ZGlmZiAtLWdpdCBhL21ldGEvQ09QWUlORy5HUEx2MiBiL21ldGEvQ09QWUlORy5HUEx2MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9DT1BZSU5HLkdQTHYyCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvQ09QWUlORy5NSVQgYi9tZXRhL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOTUwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL0NPUFlJTkcuTUlUCkBAIC0wLDAgKzEsMTcgQEAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2FsbGFyY2guYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlYTdjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hbGxhcmNoLmJiY2xhc3MKQEAgLTAsMCArMSw0MyBAQAorIworIyBUaGlzIGNsYXNzIGlzIHVzZWQgZm9yIGFyY2hpdGVjdHVyZSBpbmRlcGVuZGVudCByZWNpcGVzL2RhdGEgZmlsZXMgKHVzYWxseSBzY3JpcHRzKQorIworCisjIEV4cGFuZCBTVEFHSU5HX0RJUl9IT1NUIHNpbmNlIGZvciBjcm9zcy1jYW5hZGlhbi9uYXRpdmUvbmF0aXZlc2RrLCB0aGlzIHdpbGwKKyMgcG9pbnQgZWxzZXdoZXJlIGFmdGVyIHRoZXNlIGNoYW5nZXMuCitTVEFHSU5HX0RJUl9IT1NUIDo9ICIke1NUQUdJTkdfRElSX0hPU1R9IgorCitQQUNLQUdFX0FSQ0ggPSAiYWxsIgorCitweXRob24gKCkgeworICAgICMgQWxsb3cgdGhpcyBjbGFzcyB0byBiZSBpbmNsdWRlZCBidXQgb3ZlcnJpZGRlbiAtIG9ubHkgc2V0CisgICAgIyB0aGUgdmFsdWVzIGlmIHdlJ3JlIHN0aWxsICJhbGwiIHBhY2thZ2UgYXJjaC4KKyAgICBpZiBkLmdldFZhcigiUEFDS0FHRV9BUkNIIiwgVHJ1ZSkgPT0gImFsbCI6CisgICAgICAgICMgTm8gbmVlZCBmb3IgdmlydHVhbC9saWJjIG9yIGEgY3Jvc3MgY29tcGlsZXIKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfREVGQVVMVF9ERVBTIiwiMSIpCisKKyAgICAgICAgIyBTZXQgdGhlc2UgdG8gYSBjb21tb24gc2V0IG9mIHZhbHVlcywgd2Ugc2hvdWxkbid0IGJlIHVzaW5nIHRoZW0gb3RoZXIgdGhhdCBmb3IgV09SS0RJUiBkaXJlY3RvcnkKKyAgICAgICAgIyBuYW1pbmcgYW55d2F5CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfQVJDSCIsICJhbGxhcmNoIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9PUyIsICJsaW51eCIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfQ0NfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9MRF9BUkNIIiwgIm5vbmUiKQorICAgICAgICBkLnNldFZhcigiVEFSR0VUX0FTX0FSQ0giLCAibm9uZSIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfRlBVIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfUFJFRklYIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFX0VYVFJBX0FSQ0hTIiwgIiIpCisgICAgICAgIGQuc2V0VmFyKCJTREtfQVJDSCIsICJub25lIikKKyAgICAgICAgZC5zZXRWYXIoIlNES19DQ19BUkNIIiwgIm5vbmUiKQorCisgICAgICAgICMgQXZvaWQgdGhpcyBiZWluZyB1bm5lY2Vzc2FyaWx5IGRpZmZlcmVudCBkdWUgdG8gbnVhbmNlcyBvZgorICAgICAgICAjIHRoZSB0YXJnZXQgbWFjaGluZSB0aGF0IGFyZW4ndCBpbXBvcnRhbnQgZm9yICJhbGwiIGFyY2gKKyAgICAgICAgIyBwYWNrYWdlcy4KKyAgICAgICAgZC5zZXRWYXIoIkxERkxBR1MiLCAiIikKKworICAgICAgICAjIE5vIG5lZWQgdG8gZG8gc2hhcmVkIGxpYnJhcnkgcHJvY2Vzc2luZyBvciBkZWJ1ZyBzeW1ib2wgaGFuZGxpbmcKKyAgICAgICAgZC5zZXRWYXIoIkVYQ0xVREVfRlJPTV9TSExJQlMiLCAiMSIpCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQiLCAiMSIpCisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1BBQ0tBR0VfU1RSSVAiLCAiMSIpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpOgorICAgICAgICBiYi5lcnJvcigiUGxlYXNlIGVuc3VyZSByZWNpcGUgJXMgc2V0cyBQQUNLQUdFX0FSQ0ggYmVmb3JlIGluaGVyaXQgcGFja2FnZWdyb3VwIiAlIGQuZ2V0VmFyKCJGSUxFIiwgVHJ1ZSkpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2FyY2hpdmVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg5ZDcwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hcmNoaXZlci5iYmNsYXNzCkBAIC0wLDAgKzEsMzg1IEBACisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBUaGlzIGJiY2xhc3MgaXMgdXNlZCBmb3IgY3JlYXRpbmcgYXJjaGl2ZSBmb3I6CisjIDEpIG9yaWdpbmFsIChvciB1bnBhY2tlZCkgc291cmNlOiBBUkNISVZFUl9NT0RFW3NyY10gPSAib3JpZ2luYWwiCisjIDIpIHBhdGNoZWQgc291cmNlOiBBUkNISVZFUl9NT0RFW3NyY10gPSAicGF0Y2hlZCIgKGRlZmF1bHQpCisjIDMpIGNvbmZpZ3VyZWQgc291cmNlOiBBUkNISVZFUl9NT0RFW3NyY10gPSAiY29uZmlndXJlZCIKKyMgNCkgVGhlIHBhdGNoZXMgYmV0d2VlbiBkb191bnBhY2sgYW5kIGRvX3BhdGNoOgorIyAgICBBUkNISVZFUl9NT0RFW2RpZmZdID0gIjEiCisjICAgIEFuZCB5b3UgY2FuIHNldCB0aGUgb25lIHRoYXQgeW91J2QgbGlrZSB0byBleGNsdWRlIGZyb20gdGhlIGRpZmY6CisjICAgIEFSQ0hJVkVSX01PREVbZGlmZi1leGNsdWRlXSA/PSAiLnBjIGF1dG9tNHRlLmNhY2hlIHBhdGNoZXMiCisjIDUpIFRoZSBlbnZpcm9ubWVudCBkYXRhLCBzaW1pbGFyIHRvICdiaXRiYWtlIC1lIHJlY2lwZSc6CisjICAgIEFSQ0hJVkVSX01PREVbZHVtcGRhdGFdID0gIjEiCisjIDYpIFRoZSByZWNpcGUgKC5iYiBhbmQgLmluYyk6IEFSQ0hJVkVSX01PREVbcmVjaXBlXSA9ICIxIgorIyA3KSBXaGV0aGVyIG91dHB1dCB0aGUgLnNyYy5ycG0gcGFja2FnZToKKyMgICAgQVJDSElWRVJfTU9ERVtzcnBtXSA9ICIxIgorIyA4KSBGaWx0ZXIgdGhlIGxpY2Vuc2UsIHRoZSByZWNpcGUgd2hvc2UgbGljZW5zZSBpbgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgd2lsbCBiZSBpbmNsdWRlZCwgYW5kIGluCisjICAgIENPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSB3aWxsIGJlIGV4Y2x1ZGVkLgorIyAgICBDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgPSAnR1BMKiBMR1BMKicKKyMgICAgQ09QWUxFRlRfTElDRU5TRV9FWENMVURFID0gJ0NMT1NFRCBQcm9wcmlldGFyeScKKyMgOSkgVGhlIHJlY2lwZSB0eXBlIHRoYXQgd2lsbCBiZSBhcmNoaXZlZDoKKyMgICAgQ09QWUxFRlRfUkVDSVBFX1RZUEVTID0gJ3RhcmdldCcKKyMKKworIyBEb24ndCBmaWx0ZXIgdGhlIGxpY2Vuc2UgYnkgZGVmYXVsdAorQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFID89ICcnCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREUgPz0gJycKKyMgQ3JlYXRlIGFyY2hpdmUgZm9yIGFsbCB0aGUgcmVjaXBlIHR5cGVzCitDT1BZTEVGVF9SRUNJUEVfVFlQRVMgPz0gJ3RhcmdldCBuYXRpdmUgbmF0aXZlc2RrIGNyb3NzIGNyb3Nzc2RrIGNyb3NzLWNhbmFkaWFuJworaW5oZXJpdCBjb3B5bGVmdF9maWx0ZXIKKworQVJDSElWRVJfTU9ERVtzcnBtXSA/PSAiMCIKK0FSQ0hJVkVSX01PREVbc3JjXSA/PSAicGF0Y2hlZCIKK0FSQ0hJVkVSX01PREVbZGlmZl0gPz0gIjAiCitBUkNISVZFUl9NT0RFW2RpZmYtZXhjbHVkZV0gPz0gIi5wYyBhdXRvbTR0ZS5jYWNoZSBwYXRjaGVzIgorQVJDSElWRVJfTU9ERVtkdW1wZGF0YV0gPz0gIjAiCitBUkNISVZFUl9NT0RFW3JlY2lwZV0gPz0gIjAiCisKK0RFUExPWV9ESVJfU1JDID89ICIke0RFUExPWV9ESVJ9L3NvdXJjZXMiCitBUkNISVZFUl9UT1BESVIgPz0gIiR7V09SS0RJUn0vZGVwbG95LXNvdXJjZXMiCitBUkNISVZFUl9PVVRESVIgPSAiJHtBUkNISVZFUl9UT1BESVJ9LyR7VEFSR0VUX1NZU30vJHtQRn0vIgorQVJDSElWRVJfV09SS0RJUiA9ICIke1dPUktESVJ9L2FyY2hpdmVyLXdvcmsvIgorCitkb19kdW1wZGF0YVtkaXJzXSA9ICIke0FSQ0hJVkVSX09VVERJUn0iCitkb19hcl9yZWNpcGVbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9IgorZG9fYXJfb3JpZ2luYWxbZGlyc10gPSAiJHtBUkNISVZFUl9PVVRESVJ9ICR7QVJDSElWRVJfV09SS0RJUn0iCitkb19kZXBsb3lfYXJjaGl2ZXNbZGlyc10gPSAiJHtXT1JLRElSfSIKK2RvX2RlcGxveV9hbGxfYXJjaGl2ZXNbZGlyc10gPSAiJHtXT1JLRElSfSIKKworIyBUaGlzIGlzIGEgY29udmVuaWVuY2UgZm9yIHRoZSBzaGVsbCBzY3JpcHQgdG8gdXNlIGl0CisKKworcHl0aG9uICgpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBpbmNsdWRlZCwgcmVhc29uID0gY29weWxlZnRfc2hvdWxkX2luY2x1ZGUoZCkKKyAgICBpZiBub3QgaW5jbHVkZWQ6CisgICAgICAgIGJiLmRlYnVnKDEsICdhcmNoaXZlcjogJXMgaXMgZXhjbHVkZWQ6ICVzJyAlIChwbiwgcmVhc29uKSkKKyAgICAgICAgcmV0dXJuCisgICAgZWxzZToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FyY2hpdmVyOiAlcyBpcyBpbmNsdWRlZDogJXMnICUgKHBuLCByZWFzb24pKQorCisgICAgYXJfc3JjID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpCisgICAgYXJfZHVtcGRhdGEgPSBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZHVtcGRhdGEnLCBUcnVlKQorICAgIGFyX3JlY2lwZSA9IGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdyZWNpcGUnLCBUcnVlKQorCisgICAgaWYgYXJfc3JjID09ICJvcmlnaW5hbCI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX29yaWdpbmFsJyAlIHBuKQorICAgIGVsaWYgYXJfc3JjID09ICJwYXRjaGVkIjoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19kZXBsb3lfYXJjaGl2ZXMnLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfcGF0Y2hlZCcgJSBwbikKKyAgICBlbGlmIGFyX3NyYyA9PSAiY29uZmlndXJlZCI6CisgICAgICAgICMgV2UgY2FuJ3QgdXNlICJhZGR0YXNrIGRvX2FyX2NvbmZpZ3VyZWQgYWZ0ZXIgZG9fY29uZmlndXJlIiBzaW5jZSBpdAorICAgICAgICAjIHdpbGwgY2F1c2UgdGhlIGRlcHRhc2sgb2YgZG9fcG9wdWxhdGVfc3lzcm9vdCB0byBydW4gbm90IG1hdHRlciB3aGF0CisgICAgICAgICMgYXJjaGl2ZXMgd2UgbmVlZCwgc28gd2UgYWRkIHRoZSBkZXBlbmRzIGhlcmUuCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYXJfY29uZmlndXJlZCcsICdkZXBlbmRzJywgJyAlczpkb19jb25maWd1cmUnICUgcG4pCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX2NvbmZpZ3VyZWQnICUgcG4pCisgICAgZWxpZiBhcl9zcmM6CisgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIEFSQ0hJVkVSX01PREVbc3JjXTogJXMiICUgYXJfc3JjKQorCisgICAgaWYgYXJfZHVtcGRhdGEgPT0gIjEiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RlcGxveV9hcmNoaXZlcycsICdkZXBlbmRzJywgJyAlczpkb19kdW1wZGF0YScgJSBwbikKKworICAgIGlmIGFyX3JlY2lwZSA9PSAiMSI6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3JlY2lwZScgJSBwbikKKworICAgICMgT3V0cHV0IHRoZSBzcnBtIHBhY2thZ2UKKyAgICBhcl9zcnBtID0gZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NycG0nLCBUcnVlKQorICAgIGlmIGFyX3NycG0gPT0gIjEiOgorICAgICAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJyBhbmQgZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKSA9PSAncnBtJzoKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZGVwbG95X2FyY2hpdmVzJywgJ2RlcGVuZHMnLCAnICVzOmRvX3BhY2thZ2Vfd3JpdGVfcnBtJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfZHVtcGRhdGEgPT0gIjEiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fZHVtcGRhdGEnICUgcG4pCisgICAgICAgICAgICBpZiBhcl9yZWNpcGUgPT0gIjEiOgorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZGVwZW5kcycsICcgJXM6ZG9fYXJfcmVjaXBlJyAlIHBuKQorICAgICAgICAgICAgaWYgYXJfc3JjID09ICJvcmlnaW5hbCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9vcmlnaW5hbCcgJSBwbikKKyAgICAgICAgICAgIGVsaWYgYXJfc3JjID09ICJwYXRjaGVkIjoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCAnICVzOmRvX2FyX3BhdGNoZWQnICUgcG4pCisgICAgICAgICAgICBlbGlmIGFyX3NyYyA9PSAiY29uZmlndXJlZCI6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3JwbScsICdkZXBlbmRzJywgJyAlczpkb19hcl9jb25maWd1cmVkJyAlIHBuKQorCisgICAgIyBUaGUgZ2NjIHN0YWZmIHVzZXMgc2hhcmVkIHNvdXJjZQorICAgIGZsYWcgPSBkLmdldFZhckZsYWcoImRvX3VucGFjayIsICJzdGFtcC1iYXNlIiwgVHJ1ZSkKKyAgICBpZiBmbGFnOgorICAgICAgICBpZiBhcl9zcmMgaW4gWyAnb3JpZ2luYWwnLCAncGF0Y2hlZCcgXToKKyAgICAgICAgICAgIGFyX291dGRpciA9IG9zLnBhdGguam9pbihkLmdldFZhcignQVJDSElWRVJfVE9QRElSJywgVHJ1ZSksICd3b3JrLXNoYXJlZCcpCisgICAgICAgICAgICBkLnNldFZhcignQVJDSElWRVJfT1VURElSJywgYXJfb3V0ZGlyKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX29yaWdpbmFsJywgJ3N0YW1wLWJhc2UnLCBmbGFnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX3BhdGNoZWQnLCAnc3RhbXAtYmFzZScsIGZsYWcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICdzdGFtcC1iYXNlJywgZmxhZykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9vcmlnaW5hbCcsICd2YXJkZXBzZXhjbHVkZScsICdQTiBQRiBBUkNISVZFUl9PVVRESVIgV09SS0RJUicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrX2FuZF9wYXRjaCcsICd2YXJkZXBzZXhjbHVkZScsICdQTiBQRiBBUkNISVZFUl9PVVRESVIgV09SS0RJUicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fYXJfcGF0Y2hlZCcsICd2YXJkZXBzZXhjbHVkZScsICdQTiBQRiBBUkNISVZFUl9PVVRESVIgV09SS0RJUicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnY3JlYXRlX2RpZmZfZ3onLCAndmFyZGVwc2V4Y2x1ZGUnLCAnUEYnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2NyZWF0ZV90YXJiYWxsJywgJ3ZhcmRlcHNleGNsdWRlJywgJ1BGJykKKworICAgICAgICBmbGFnX2NsZWFuID0gZC5nZXRWYXJGbGFnKCdkb191bnBhY2snLCAnc3RhbXAtYmFzZS1jbGVhbicsIFRydWUpCisgICAgICAgIGlmIGZsYWdfY2xlYW46CisgICAgICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2FyX29yaWdpbmFsJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBmbGFnX2NsZWFuKQorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19hcl9wYXRjaGVkJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBmbGFnX2NsZWFuKQorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdkb191bnBhY2tfYW5kX3BhdGNoJywgJ3N0YW1wLWJhc2UtY2xlYW4nLCBmbGFnX2NsZWFuKQorfQorCisjIFRha2UgYWxsIHRoZSBzb3VyY2VzIGZvciBhIHJlY2lwZSBhbmQgcHV0cyB0aGVtIGluIFdPUktESVIvYXJjaGl2ZXItd29yay8uCisjIEZpbGVzIGluIFNSQ19VUkkgYXJlIGNvcGllZCBkaXJlY3RseSwgYW55dGhpbmcgdGhhdCdzIGEgZGlyZWN0b3J5CisjIChlLmcuIGdpdCByZXBvc2l0b3JpZXMpIGlzICJ1bnBhY2tlZCIgYW5kIHRoZW4gcHV0IGludG8gYSB0YXJiYWxsLgorcHl0aG9uIGRvX2FyX29yaWdpbmFsKCkgeworCisgICAgaW1wb3J0IHNodXRpbCwgdGFyZmlsZSwgdGVtcGZpbGUKKworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcmMnLCBUcnVlKSAhPSAib3JpZ2luYWwiOgorICAgICAgICByZXR1cm4KKworICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgb3JpZ2luYWwgc291cmNlLi4uJykKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIGxvY2FsID0gZmV0Y2gubG9jYWxwYXRoKHVybCkucnN0cmlwKCIvIik7CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGxvY2FsKToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5KGxvY2FsLCBhcl9vdXRkaXIpCisgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihsb2NhbCk6CisgICAgICAgICAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUobG9jYWwpCisKKyAgICAgICAgICAgIHRtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoZGlyPWQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisgICAgICAgICAgICBmZXRjaC51bnBhY2sodG1wZGlyLCAodXJsLCkpCisKKyAgICAgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgICAgICMgV2UgZWxpbWluYXRlIGFueSBBVVRPSU5DKyBpbiB0aGUgcmV2aXNpb24uCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3JjX3JldiA9IGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpLnJlcGxhY2UoJ0FVVE9JTkMrJywnJykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzcmNfcmV2ID0gJ05PUkVWJworICAgICAgICAgICAgdGFybmFtZSA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsIGJhc2VuYW1lICsgJy4nICsgc3JjX3JldiArICcudGFyLmd6JykKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCAndzpneicpCisgICAgICAgICAgICB0YXIuYWRkKCcuJykKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAjIEVtaXQgcGF0Y2ggc2VyaWVzIGZpbGVzIGZvciAnb3JpZ2luYWwnCisgICAgYmIubm90ZSgnV3JpdGluZyBwYXRjaCBzZXJpZXMgZmlsZXMuLi4nKQorICAgIGZvciBwYXRjaCBpbiBzcmNfcGF0Y2hlcyhkKToKKyAgICAgICAgXywgXywgbG9jYWwsIF8sIF8sIHBhcm0gPSBiYi5mZXRjaC5kZWNvZGV1cmwocGF0Y2gpCisgICAgICAgIHBhdGNoZGlyID0gcGFybS5nZXQoJ3BhdGNoZGlyJykKKyAgICAgICAgaWYgcGF0Y2hkaXI6CisgICAgICAgICAgICBzZXJpZXMgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnc2VyaWVzLnN1YmRpci4lcycgJSBwYXRjaGRpci5yZXBsYWNlKCcvJywgJ18nKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlcmllcyA9IG9zLnBhdGguam9pbihhcl9vdXRkaXIsICdzZXJpZXMnKQorCisgICAgICAgIHdpdGggb3BlbihzZXJpZXMsICdhJykgYXMgczoKKyAgICAgICAgICAgIHMud3JpdGUoJyVzIC1wJXNcbicgJSAob3MucGF0aC5iYXNlbmFtZShsb2NhbCksIHBhcm1bJ3N0cmlwbGV2ZWwnXSkpCit9CisKK3B5dGhvbiBkb19hcl9wYXRjaGVkKCkgeworCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpICE9ICdwYXRjaGVkJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIEdldCB0aGUgQVJDSElWRVJfT1VURElSIGJlZm9yZSB3ZSByZXNldCB0aGUgV09SS0RJUgorICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgIGJiLm5vdGUoJ0FyY2hpdmluZyB0aGUgcGF0Y2hlZCBzb3VyY2UuLi4nKQorICAgIGQuc2V0VmFyKCdXT1JLRElSJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX1dPUktESVInLCBUcnVlKSkKKyAgICAjIFRoZSBnY2Mgc3RhZmYgdXNlcyBzaGFyZWQgc291cmNlCisgICAgZmxhZyA9IGQuZ2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3N0YW1wLWJhc2UnLCBUcnVlKQorICAgIGlmIGZsYWc6CisgICAgICAgIGNyZWF0ZV90YXJiYWxsKGQsIGQuZ2V0VmFyKCdTJywgVHJ1ZSksICdwYXRjaGVkJywgYXJfb3V0ZGlyLCAnZ2NjJykKKyAgICBlbHNlOgorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBkLmdldFZhcignUycsIFRydWUpLCAncGF0Y2hlZCcsIGFyX291dGRpcikKK30KKworcHl0aG9uIGRvX2FyX2NvbmZpZ3VyZWQoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgYXJfb3V0ZGlyID0gZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpCisgICAgaWYgZC5nZXRWYXJGbGFnKCdBUkNISVZFUl9NT0RFJywgJ3NyYycsIFRydWUpID09ICdjb25maWd1cmVkJzoKKyAgICAgICAgYmIubm90ZSgnQXJjaGl2aW5nIHRoZSBjb25maWd1cmVkIHNvdXJjZS4uLicpCisgICAgICAgICMgVGhlIGxpYnRvb2wtbmF0aXZlJ3MgZG9fY29uZmlndXJlIHdpbGwgcmVtb3ZlIHRoZQorICAgICAgICAjICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQsIHNvIHdlIGNhbid0IHJlLXJ1biB0aGUKKyAgICAgICAgIyBkb19jb25maWd1cmUsIHdlIGFyY2hpdmUgdGhlIGFscmVhZHkgY29uZmlndXJlZCAke1N9IHRvCisgICAgICAgICMgaW5zdGVhZCBvZi4KKyAgICAgICAgaWYgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgIT0gJ2xpYnRvb2wtbmF0aXZlJzoKKyAgICAgICAgICAgICMgQ2hhbmdlIHRoZSBXT1JLRElSIHRvIG1ha2UgZG9fY29uZmlndXJlIHJ1biBpbiBhbm90aGVyIGRpci4KKyAgICAgICAgICAgIGQuc2V0VmFyKCdXT1JLRElSJywgZC5nZXRWYXIoJ0FSQ0hJVkVSX1dPUktESVInLCBUcnVlKSkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbC15b2N0bycsIGQpOgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fa2VybmVsX2NvbmZpZ21lJywgZCkKKyAgICAgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2NtYWtlJywgZCk6CisgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19nZW5lcmF0ZV90b29sY2hhaW5fZmlsZScsIGQpCisgICAgICAgICAgICBwcmVmdW5jcyA9IGQuZ2V0VmFyRmxhZygnZG9fY29uZmlndXJlJywgJ3ByZWZ1bmNzJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBmdW5jIGluIChwcmVmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jICE9ICJzeXNyb290X2NsZWFuc3N0YXRlIjoKKyAgICAgICAgICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGZ1bmMsIGQpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2NvbmZpZ3VyZScsIGQpCisgICAgICAgICAgICBwb3N0ZnVuY3MgPSBkLmdldFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdwb3N0ZnVuY3MnLCBUcnVlKQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gKHBvc3RmdW5jcyBvciAnJykuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jICE9ICJkb19xYV9jb25maWd1cmUiOgorICAgICAgICAgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZnVuYywgZCkKKyAgICAgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgICAgICBidWlsZGRpciA9IGQuZ2V0VmFyKCdCJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjZGlyICE9IGJ1aWxkZGlyOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYnVpbGRkaXIpOgorICAgICAgICAgICAgICAgIG9lLnBhdGguY29weXRyZWUoYnVpbGRkaXIsIG9zLnBhdGguam9pbihzcmNkaXIsIFwKKyAgICAgICAgICAgICAgICAgICAgJ2J1aWxkLiVzLmFyX2NvbmZpZ3VyZWQnICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpKQorICAgICAgICBjcmVhdGVfdGFyYmFsbChkLCBzcmNkaXIsICdjb25maWd1cmVkJywgYXJfb3V0ZGlyKQorfQorCitkZWYgY3JlYXRlX3RhcmJhbGwoZCwgc3JjZGlyLCBzdWZmaXgsIGFyX291dGRpciwgcGY9Tm9uZSk6CisgICAgIiIiCisgICAgY3JlYXRlIHRoZSB0YXJiYWxsIGZyb20gc3JjZGlyCisgICAgIiIiCisgICAgaW1wb3J0IHRhcmZpbGUKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihhcl9vdXRkaXIpCisgICAgaWYgcGY6CisgICAgICAgIHRhcm5hbWUgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCAnJXMtJXMudGFyLmd6JyAlIChwZiwgc3VmZml4KSkKKyAgICBlbHNlOgorICAgICAgICB0YXJuYW1lID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLSVzLnRhci5neicgJSBcCisgICAgICAgICAgICAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIHN1ZmZpeCkpCisKKyAgICBzcmNkaXIgPSBzcmNkaXIucnN0cmlwKCcvJykKKyAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKHNyY2RpcikKKyAgICBiYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3JjZGlyKQorICAgIG9zLmNoZGlyKGRpcm5hbWUpCisgICAgYmIubm90ZSgnQ3JlYXRpbmcgJXMnICUgdGFybmFtZSkKKyAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgJ3c6Z3onKQorICAgIHRhci5hZGQoYmFzZW5hbWUpCisgICAgdGFyLmNsb3NlKCkKKworIyBjcmVhdGluZyAuZGlmZi5neiBiZXR3ZWVuIHNvdXJjZS5vcmlnIGFuZCBzb3VyY2UKK2RlZiBjcmVhdGVfZGlmZl9neihkLCBzcmNfb3JpZywgc3JjLCBhcl9vdXRkaXIpOgorCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHNyYykgb3Igbm90IG9zLnBhdGguaXNkaXIoc3JjX29yaWcpOgorICAgICAgICByZXR1cm4KKworICAgICMgVGhlIGRpZmYgLS1leGNsdWRlIGNhbid0IGV4Y2x1ZGUgdGhlIGZpbGUgd2l0aCBwYXRoLCBzbyB3ZSBjb3B5CisgICAgIyB0aGUgcGF0Y2hlZCBzb3VyY2UsIGFuZCByZW1vdmUgdGhlIGZpbGVzIHRoYXQgd2UnZCBsaWtlIHRvCisgICAgIyBleGNsdWRlLgorICAgIHNyY19wYXRjaGVkID0gc3JjICsgJy5wYXRjaGVkJworICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzcmMsIHNyY19wYXRjaGVkKQorICAgIGZvciBpIGluIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdkaWZmLWV4Y2x1ZGUnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNyY19vcmlnLCBpKSwgcmVjdXJzZT1UcnVlKQorICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNyY19wYXRjaGVkLCBpKSwgcmVjdXJzZT1UcnVlKQorCisgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShzcmMpCisgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNyYykKKyAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgIG91dF9maWxlID0gb3MucGF0aC5qb2luKGFyX291dGRpciwgJyVzLWRpZmYuZ3onICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgZGlmZl9jbWQgPSAnZGlmZiAtTmF1ciAlcy5vcmlnICVzLnBhdGNoZWQgfCBnemlwIC1jID4gJXMnICUgKGJhc2VuYW1lLCBiYXNlbmFtZSwgb3V0X2ZpbGUpCisgICAgc3VicHJvY2Vzcy5jYWxsKGRpZmZfY21kLCBzaGVsbD1UcnVlKQorICAgIGJiLnV0aWxzLnJlbW92ZShzcmNfcGF0Y2hlZCwgcmVjdXJzZT1UcnVlKQorCisjIFJ1biBkb191bnBhY2sgYW5kIGRvX3BhdGNoCitweXRob24gZG9fdW5wYWNrX2FuZF9wYXRjaCgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JjJywgVHJ1ZSkgbm90IGluIFwKKyAgICAgICAgICAgIFsgJ3BhdGNoZWQnLCAnY29uZmlndXJlZCddIGFuZCBcCisgICAgICAgICAgICBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnZGlmZicsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuCisKKyAgICBhcl9vdXRkaXIgPSBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkKKworICAgICMgQ2hhbmdlIHRoZSBXT1JLRElSIHRvIG1ha2UgZG9fdW5wYWNrIGRvX3BhdGNoIHJ1biBpbiBhbm90aGVyIGRpci4KKyAgICBkLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdBUkNISVZFUl9XT1JLRElSJywgVHJ1ZSkpCisKKyAgICAjIFRoZSBjaGFuZ2VkICdXT1JLRElSJyBhbHNvIGNhc3VlZCAnQicgY2hhbmdlZCwgY3JlYXRlIGRpciAnQicgZm9yIHRoZQorICAgICMgcG9zc2libHkgcmVxdWlyaW5nIG9mIHRoZSBmb2xsb3dpbmcgdGFza3MgKHN1Y2ggYXMgc29tZSByZWNpcGVzJ3MKKyAgICAjIGRvX3BhdGNoIHJlcXVpcmVkICdCJyBleGlzdGVkKS4KKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoJ0InLCBUcnVlKSkKKworICAgICMgVGhlIGtlcm5lbCBzb3VyY2UgaXMgcmVhZHkgYWZ0ZXIgZG9fdmFsaWRhdGVfYnJhbmNoZXMKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwteW9jdG8nLCBkKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb191bnBhY2snLCBkKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2tlcm5lbF9jaGVja291dCcsIGQpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdmFsaWRhdGVfYnJhbmNoZXMnLCBkKQorICAgIGVsc2U6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnZG9fdW5wYWNrJywgZCkKKworICAgICMgU2F2ZSB0aGUgb3JpZ2luYWwgc291cmNlIGZvciBjcmVhdGluZyB0aGUgcGF0Y2hlcworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdkaWZmJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBzcmMgPSBkLmdldFZhcignUycsIFRydWUpLnJzdHJpcCgnLycpCisgICAgICAgIHNyY19vcmlnID0gJyVzLm9yaWcnICUgc3JjCisgICAgICAgIG9lLnBhdGguY29weXRyZWUoc3JjLCBzcmNfb3JpZykKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3BhdGNoJywgZCkKKyAgICAjIENyZWF0ZSB0aGUgcGF0Y2hlcworICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdkaWZmJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICBiYi5ub3RlKCdDcmVhdGluZyBkaWZmIGd6Li4uJykKKyAgICAgICAgY3JlYXRlX2RpZmZfZ3ooZCwgc3JjX29yaWcsIHNyYywgYXJfb3V0ZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc3JjX29yaWcsIHJlY3Vyc2U9VHJ1ZSkKK30KKworcHl0aG9uIGRvX2FyX3JlY2lwZSAoKSB7CisgICAgIiIiCisgICAgYXJjaGl2ZSB0aGUgcmVjaXBlLCBpbmNsdWRpbmcgLmJiIGFuZCAuaW5jLgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgIGltcG9ydCBzaHV0aWwKKworICAgIHJlcXVpcmVfcmUgPSByZS5jb21waWxlKCByInJlcXVpcmVccysoLispIiApCisgICAgaW5jbHVkZV9yZSA9IHJlLmNvbXBpbGUoIHIiaW5jbHVkZVxzKyguKykiICkKKyAgICBiYmZpbGUgPSBkLmdldFZhcignRklMRScsIFRydWUpCisgICAgb3V0ZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksIFwKKyAgICAgICAgICAgICclcy1yZWNpcGUnICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKG91dGRpcikKKyAgICBzaHV0aWwuY29weShiYmZpbGUsIG91dGRpcikKKworICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoYmJmaWxlKQorICAgIGJicGF0aCA9ICclczolcycgJSAoZGlybmFtZSwgZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpKQorICAgIGYgPSBvcGVuKGJiZmlsZSwgJ3InKQorICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgIGluY2ZpbGUgPSBOb25lCisgICAgICAgIGlmIHJlcXVpcmVfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBpbmNmaWxlID0gcmVxdWlyZV9yZS5tYXRjaChsaW5lKS5ncm91cCgxKQorICAgICAgICBlbGlmIGluY2x1ZGVfcmUubWF0Y2gobGluZSk6CisgICAgICAgICAgICBpbmNmaWxlID0gaW5jbHVkZV9yZS5tYXRjaChsaW5lKS5ncm91cCgxKQorICAgICAgICBpZiBpbmNmaWxlOgorICAgICAgICAgICAgaW5jZmlsZSA9IGJiLmRhdGEuZXhwYW5kKGluY2ZpbGUsIGQpCisgICAgICAgICAgICBpbmNmaWxlID0gYmIudXRpbHMud2hpY2goYmJwYXRoLCBpbmNmaWxlKQorICAgICAgICAgICAgaWYgaW5jZmlsZToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShpbmNmaWxlLCBvdXRkaXIpCisKKyAgICBjcmVhdGVfdGFyYmFsbChkLCBvdXRkaXIsICdyZWNpcGUnLCBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkpCisgICAgYmIudXRpbHMucmVtb3ZlKG91dGRpciwgcmVjdXJzZT1UcnVlKQorfQorCitweXRob24gZG9fZHVtcGRhdGEgKCkgeworICAgICIiIgorICAgIGR1bXAgZW52aXJvbm1lbnQgZGF0YSB0byAke1BGfS1zaG93ZGF0YS5kdW1wCisgICAgIiIiCisKKyAgICBkdW1wZmlsZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSksIFwKKyAgICAgICAgJyVzLXNob3dkYXRhLmR1bXAnICUgZC5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgYmIubm90ZSgnRHVtcGluZyBtZXRhZGF0YSBpbnRvICVzJyAlIGR1bXBmaWxlKQorICAgIGYgPSBvcGVuKGR1bXBmaWxlLCAndycpCisgICAgIyBlbWl0IHZhcmlhYmxlcyBhbmQgc2hlbGwgZnVuY3Rpb25zCisgICAgYmIuZGF0YS5lbWl0X2VudihmLCBkLCBUcnVlKQorICAgICMgZW1pdCB0aGUgbWV0YWRhdGEgd2hpY2ggaXNuJ3QgdmFsaWQgc2hlbGwKKyAgICBmb3IgZSBpbiBkLmtleXMoKToKKyAgICAgICAgaWYgYmIuZGF0YS5nZXRWYXJGbGFnKGUsICdweXRob24nLCBkKToKKyAgICAgICAgICAgIGYud3JpdGUoIlxucHl0aG9uICVzICgpIHtcbiVzfVxuIiAlIChlLCBiYi5kYXRhLmdldFZhcihlLCBkLCBUcnVlKSkpCisgICAgZi5jbG9zZSgpCit9CisKK1NTVEFURVRBU0tTICs9ICJkb19kZXBsb3lfYXJjaGl2ZXMiCitkb19kZXBsb3lfYXJjaGl2ZXMgKCkgeworICAgIGVjaG8gIkRlcGxveWluZyBzb3VyY2UgYXJjaGl2ZSBmaWxlcyAuLi4iCit9CitweXRob24gZG9fZGVwbG95X2FyY2hpdmVzX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2RvX2RlcGxveV9hcmNoaXZlc1tzc3RhdGUtaW5wdXRkaXJzXSA9ICIke0FSQ0hJVkVSX1RPUERJUn0iCitkb19kZXBsb3lfYXJjaGl2ZXNbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9TUkN9IgorCithZGR0YXNrIGRvX2FyX29yaWdpbmFsIGFmdGVyIGRvX3VucGFjaworYWRkdGFzayBkb191bnBhY2tfYW5kX3BhdGNoIGFmdGVyIGRvX3BhdGNoCithZGR0YXNrIGRvX2FyX3BhdGNoZWQgYWZ0ZXIgZG9fdW5wYWNrX2FuZF9wYXRjaAorYWRkdGFzayBkb19hcl9jb25maWd1cmVkIGFmdGVyIGRvX3VucGFja19hbmRfcGF0Y2gKK2FkZHRhc2sgZG9fZHVtcGRhdGEKK2FkZHRhc2sgZG9fYXJfcmVjaXBlCithZGR0YXNrIGRvX2RlcGxveV9hcmNoaXZlcyBiZWZvcmUgZG9fYnVpbGQKKworYWRkdGFzayBkb19kZXBsb3lfYWxsX2FyY2hpdmVzIGFmdGVyIGRvX2RlcGxveV9hcmNoaXZlcworZG9fZGVwbG95X2FsbF9hcmNoaXZlc1tyZWNyZGVwdGFza10gPSAiZG9fZGVwbG95X2FyY2hpdmVzIgorZG9fZGVwbG95X2FsbF9hcmNoaXZlc1tyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGVwbG95X2FsbF9hcmNoaXZlcygpIHsKKyAgICAgICAgOgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2F1dG90b29scy1icm9rZW5zZXAuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMtYnJva2Vuc2VwLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjZjk3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMtYnJva2Vuc2VwLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACisjIEF1dG90b29scyBjbGFzcyBmb3IgcmVjaXBlcyB3aGVyZSBzZXBhcmF0ZSBidWlsZCBkaXIgZG9lc24ndCB3b3JrCisjIElkZWFsbHkgd2Ugc2hvdWxkIGZpeCBzb2Z0d2FyZSBzbyBpdCBkb2VzIHdvcmsuIFN0YW5kYXJkIGF1dG90b29scyBzdXBwb3J0cworIyB0aGlzLgoraW5oZXJpdCBhdXRvdG9vbHMKK0IgPSAiJHtTfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NkN2QyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2F1dG90b29scy5iYmNsYXNzCkBAIC0wLDAgKzEsMzEyIEBACitkZWYgYXV0b3Rvb2xzX2RlcF9wcmVwZW5kKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0FVVE9UT09MU19ERVBTJywgVHJ1ZSk6CisgICAgICAgIHJldHVybiAnJworCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGRlcHMgPSAnJworCisgICAgaWYgcG4gaW4gWydhdXRvY29uZi1uYXRpdmUnLCAnYXV0b21ha2UtbmF0aXZlJywgJ2hlbHAybWFuLW5hdGl2ZSddOgorICAgICAgICByZXR1cm4gZGVwcworICAgIGRlcHMgKz0gJ2F1dG9jb25mLW5hdGl2ZSBhdXRvbWFrZS1uYXRpdmUgJworCisgICAgaWYgbm90IHBuIGluIFsnbGlidG9vbCcsICdsaWJ0b29sLW5hdGl2ZSddIGFuZCBub3QgcG4uZW5kc3dpdGgoImxpYnRvb2wtY3Jvc3MiKToKKyAgICAgICAgZGVwcyArPSAnbGlidG9vbC1uYXRpdmUgJworICAgICAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBUcnVlKToKKyAgICAgICAgICAgIGRlcHMgKz0gJ2xpYnRvb2wtY3Jvc3MgJworCisgICAgcmV0dXJuIGRlcHMgKyAnZ251LWNvbmZpZy1uYXRpdmUgJworCitFWFRSQV9PRU1BS0UgPSAiIgorCitERVBFTkRTX3ByZXBlbmQgPSAiJHtAYXV0b3Rvb2xzX2RlcF9wcmVwZW5kKGQpfSAiCisKK2luaGVyaXQgc2l0ZWluZm8KKworIyBTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBzaGVsbCBzY3JpcHRzIHdpdGggdmFyaWFibGVzIGRlZmluZWQgdG8gc3VwcGx5IHRlc3QKKyMgcmVzdWx0cyBmb3IgYXV0b2NvbmYgdGVzdHMgd2UgY2Fubm90IHJ1biBhdCBidWlsZCB0aW1lLgorZXhwb3J0IENPTkZJR19TSVRFID0gIiR7QHNpdGVpbmZvX2dldF9maWxlcyhkLCBGYWxzZSl9IgorCithY3BhdGhzID0gImRlZmF1bHQiCitFWFRSQV9BVVRPUkVDT05GID0gIi0tZXhjbHVkZT1hdXRvcG9pbnQiCisKK2V4cG9ydCBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyA9ICIke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iCisKKyMgV2hlbiBidWlsZGluZyB0b29scyBmb3IgdXNlIGF0IGJ1aWxkLXRpbWUgaXQncyByZWNvbW1lbmRlZCBmb3IgdGhlIGJ1aWxkCisjIHN5c3RlbSB0byB1c2UgdGhlc2UgdmFyaWFibGVzIHdoZW4gY3Jvc3MtY29tcGlsaW5nLgorIyAoaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9hdXRvYm9vay9hdXRvYm9vay9hdXRvYm9va18yNzAuaHRtbCkKK2V4cG9ydCBDUFBfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBDUFBGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DUFBGTEFHU30iCisKK2V4cG9ydCBDQ19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgQ0ZMQUdTX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NGTEFHU30iCisKK2V4cG9ydCBDWFhfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ1hYRkxBR1N9IgorCitleHBvcnQgTERfRk9SX0JVSUxEID0gIiR7QlVJTERfTER9IgorZXhwb3J0IExERkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfTERGTEFHU30iCisKK2RlZiBhcHBlbmRfbGlidG9vbF9zeXNyb290KGQpOgorICAgICMgT25seSBzdXBwbHkgbGlidG9vbCBzeXNyb290IG9wdGlvbiBmb3Igbm9uLW5hdGl2ZSBwYWNrYWdlcworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgcmV0dXJuICctLXdpdGgtbGlidG9vbC1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH0nCisgICAgcmV0dXJuICIiCisKK0NPTkZJR1VSRU9QVFMgPSAiIC0tYnVpbGQ9JHtCVUlMRF9TWVN9IFwKKwkJICAtLWhvc3Q9JHtIT1NUX1NZU30gXAorCQkgIC0tdGFyZ2V0PSR7VEFSR0VUX1NZU30gXAorCQkgIC0tcHJlZml4PSR7cHJlZml4fSBcCisJCSAgLS1leGVjX3ByZWZpeD0ke2V4ZWNfcHJlZml4fSBcCisJCSAgLS1iaW5kaXI9JHtiaW5kaXJ9IFwKKwkJICAtLXNiaW5kaXI9JHtzYmluZGlyfSBcCisJCSAgLS1saWJleGVjZGlyPSR7bGliZXhlY2Rpcn0gXAorCQkgIC0tZGF0YWRpcj0ke2RhdGFkaXJ9IFwKKwkJICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCSAgLS1zaGFyZWRzdGF0ZWRpcj0ke3NoYXJlZHN0YXRlZGlyfSBcCisJCSAgLS1sb2NhbHN0YXRlZGlyPSR7bG9jYWxzdGF0ZWRpcn0gXAorCQkgIC0tbGliZGlyPSR7bGliZGlyfSBcCisJCSAgLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0gXAorCQkgIC0tb2xkaW5jbHVkZWRpcj0ke29sZGluY2x1ZGVkaXJ9IFwKKwkJICAtLWluZm9kaXI9JHtpbmZvZGlyfSBcCisJCSAgLS1tYW5kaXI9JHttYW5kaXJ9IFwKKwkJICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzIFwKKwkJICAke0NPTkZJR1VSRU9QVF9ERVBUUkFDS30gXAorCQkgICR7QGFwcGVuZF9saWJ0b29sX3N5c3Jvb3QoZCl9IgorQ09ORklHVVJFT1BUX0RFUFRSQUNLID89ICItLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyIKKworCitvZV9ydW5jb25mICgpIHsKKwljZmdzY3JpcHQ9IiR7U30vY29uZmlndXJlIgorCWlmIFsgLXggIiRjZmdzY3JpcHQiIF0gOyB0aGVuCisJCWJibm90ZSAiUnVubmluZyAkY2Znc2NyaXB0ICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9ICRAIgorCQlzZXQgK2UKKwkJJHtDQUNIRURfQ09ORklHVVJFVkFSU30gJGNmZ3NjcmlwdCAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfSAiJEAiCisJCWlmIFsgIiQ/IiAhPSAiMCIgXTsgdGhlbgorCQkJZWNobyAiQ29uZmlndXJlIGZhaWxlZC4gVGhlIGNvbnRlbnRzIG9mIGFsbCBjb25maWcubG9nIGZpbGVzIGZvbGxvd3MgdG8gYWlkIGRlYnVnZ2luZyIKKwkJCWZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBjb25maWcubG9nIC1wcmludCAtZXhlYyBjYXQge30gXDsKKwkJCWRpZSAib2VfcnVuY29uZiBmYWlsZWQiCisJCWZpCisJCXNldCAtZQorCWVsc2UKKwkJYmJmYXRhbCAibm8gY29uZmlndXJlIHNjcmlwdCBmb3VuZCBhdCAkY2Znc2NyaXB0IgorCWZpCit9CisKK0FVVE9UT09MU19BVVhESVIgPz0gIiR7U30iCisKK0NPTkZJR1VSRVNUQU1QRklMRSA9ICIke1dPUktESVJ9L2NvbmZpZ3VyZS5zc3RhdGUiCisKK2F1dG90b29sc19wcmVjb25maWd1cmUoKSB7CisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiBdOyB0aGVuCisJCQlpZiBbICIke1N9IiAhPSAiJHtCfSIgXTsgdGhlbgorCQkJCWVjaG8gIlByZXZpb3VzbHkgY29uZmlndXJlZCBzZXBhcmF0ZSBidWlsZCBkaXJlY3RvcnkgZGV0ZWN0ZWQsIGNsZWFuaW5nICR7Qn0iCisJCQkJcm0gLXJmICR7Qn0KKwkJCQlta2RpciAke0J9CisJCQllbHNlCisJCQkJIyBBdCBsZWFzdCByZW1vdmUgdGhlIC5sYSBmaWxlcyBzaW5jZSBhdXRvbWFrZSB3b24ndCBhdXRvbWF0aWNhbGx5CisJCQkJIyByZWdlbmVyYXRlIHRoZW0gZXZlbiBpZiBDRkxBR1MvTERGTEFHUyBhcmUgZGlmZmVyZW50CisJCQkJY2QgJHtTfQorCQkJCWlmIFsgIiR7Q0xFQU5CUk9LRU59IiAhPSAiMSIgLWEgXCggLWUgTWFrZWZpbGUgLW8gLWUgbWFrZWZpbGUgLW8gLWUgR05VbWFrZWZpbGUgXCkgXTsgdGhlbgorCQkJCQllY2hvICJSdW5uaW5nIFwiJHtNQUtFfSBjbGVhblwiIGluICR7U30iCisJCQkJCSR7TUFLRX0gY2xlYW4KKwkJCQlmaQorCQkJCWZpbmQgJHtTfSAtaWdub3JlX3JlYWRkaXJfcmFjZSAtbmFtZSBcKi5sYSAtZGVsZXRlCisJCQlmaQorCQlmaQorCWZpCit9CisKK2F1dG90b29sc19wb3N0Y29uZmlndXJlKCl7CisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWVjaG8gJHtCQl9UQVNLSEFTSH0gPiAke0NPTkZJR1VSRVNUQU1QRklMRX0KKwlmaQorfQorCitFWFRSQUNPTkZGVU5DUyA/Pz0gIiIKKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiYXV0b3Rvb2xzX3ByZWNvbmZpZ3VyZSBhdXRvdG9vbHNfY29weV9hY2xvY2FscyAke0VYVFJBQ09ORkZVTkNTfSIKK2RvX2NvbmZpZ3VyZVtwb3N0ZnVuY3NdICs9ICJhdXRvdG9vbHNfcG9zdGNvbmZpZ3VyZSIKKworQUNMT0NBTERJUiA9ICIke0J9L2FjbG9jYWwtY29weSIKKworcHl0aG9uIGF1dG90b29sc19jb3B5X2FjbG9jYWxzICgpIHsKKyAgICBzID0gZC5nZXRWYXIoIlMiLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzICsgIi9jb25maWd1cmUuaW4iKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHMgKyAiL2NvbmZpZ3VyZS5hYyIpOgorICAgICAgICBpZiBub3QgZC5nZXRWYXIoIkFVVE9UT09MU19DT1BZQUNMT0NBTCIsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgdGFza2RlcGRhdGEgPSBkLmdldFZhcigiQkJfVEFTS0RFUERBVEEiLCBGYWxzZSkKKyAgICAjYmIud2FybihzdHIodGFza2RlcGRhdGEpKQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBhY2xvY2FsZGlyID0gZC5nZXRWYXIoIkFDTE9DQUxESVIiLCBUcnVlKQorICAgIG9lLnBhdGgucmVtb3ZlKGFjbG9jYWxkaXIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGFjbG9jYWxkaXIpCisgICAgc3RhcnQgPSBOb25lCisgICAgY29uZmlndXJlZGVwcyA9IFtdCisKKyAgICBmb3IgZGVwIGluIHRhc2tkZXBkYXRhOgorICAgICAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICAgICBpZiBkYXRhWzFdID09ICJkb19jb25maWd1cmUiIGFuZCBkYXRhWzBdID09IHBuOgorICAgICAgICAgICAgc3RhcnQgPSBkZXAKKyAgICAgICAgICAgIGJyZWFrCisgICAgaWYgc3RhcnQgaXMgTm9uZToKKyAgICAgICAgYmIuZmF0YWwoIkNvdWxkbid0IGZpbmQgb3Vyc2VsZiBpbiBCQl9UQVNLREVQREFUQT8iKQorCisgICAgIyBXZSBuZWVkIHRvIGZpbmQgY29uZmlndXJlIHRhc2tzIHdoaWNoIGFyZSBlaXRoZXIgZnJvbSA8dGFyZ2V0PiAtPiA8dGFyZ2V0PgorICAgICMgb3IgPG5hdGl2ZT4gLT4gPG5hdGl2ZT4gYnV0IG5vdCA8dGFyZ2V0PiAtPiA8bmF0aXZlPiB1bmxlc3MgdGhleSdyZSBkaXJlY3QKKyAgICAjIGRlcGVuZGVuY2llcy4gVGhpcyBtaXJyb3JzIHdoYXQgd291bGQgZ2V0IHJlc3RvcmVkIGZyb20gc3N0YXRlLgorICAgIGRvbmUgPSBbZGVwXQorICAgIG5leHQgPSBbZGVwXQorICAgIHdoaWxlIG5leHQ6CisgICAgICAgIG5ldyA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gbmV4dDoKKyAgICAgICAgICAgIGRhdGEgPSB0YXNrZGVwZGF0YVtkZXBdCisgICAgICAgICAgICBmb3IgZGF0YWRlcCBpbiBkYXRhWzNdOgorICAgICAgICAgICAgICAgIGlmIGRhdGFkZXAgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChkYXRhZGVwKQorICAgICAgICAgICAgICAgIGlmIChub3QgZGF0YVswXS5lbmRzd2l0aCgiLW5hdGl2ZSIpKSBhbmQgdGFza2RlcGRhdGFbZGF0YWRlcF1bMF0uZW5kc3dpdGgoIi1uYXRpdmUiKSBhbmQgZGVwICE9IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5ldy5hcHBlbmQoZGF0YWRlcCkKKyAgICAgICAgICAgICAgICBpZiB0YXNrZGVwZGF0YVtkYXRhZGVwXVsxXSA9PSAiZG9fY29uZmlndXJlIjoKKyAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZGVwcy5hcHBlbmQodGFza2RlcGRhdGFbZGF0YWRlcF1bMF0pCisgICAgICAgIG5leHQgPSBuZXcKKworICAgICNjb25maWd1cmVkZXBzMiA9IFtdCisgICAgI2ZvciBkZXAgaW4gdGFza2RlcGRhdGE6CisgICAgIyAgICBkYXRhID0gdGFza2RlcGRhdGFbZGVwXQorICAgICMgICAgaWYgZGF0YVsxXSA9PSAiZG9fY29uZmlndXJlIiBhbmQgZGF0YVswXSAhPSBwbjoKKyAgICAjICAgICAgICBjb25maWd1cmVkZXBzMi5hcHBlbmQoZGF0YVswXSkKKyAgICAjY29uZmlndXJlZGVwcy5zb3J0KCkKKyAgICAjY29uZmlndXJlZGVwczIuc29ydCgpCisgICAgI2JiLndhcm4oc3RyKGNvbmZpZ3VyZWRlcHMpKQorICAgICNiYi53YXJuKHN0cihjb25maWd1cmVkZXBzMikpCisKKyAgICBjcCA9IFtdCisgICAgc2l0ZWNvbmYgPSBbXSAgICAKKyAgICBmb3IgYyBpbiBjb25maWd1cmVkZXBzOgorICAgICAgICBpZiBjLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgICAgICBtYW5pZmVzdCA9IGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9L21hbmlmZXN0LSR7QlVJTERfQVJDSH0tJXMucG9wdWxhdGVfc3lzcm9vdCIgJSBjKQorICAgICAgICBlbGlmIGMuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke1NES19BUkNIfV8ke1NES19PU30tJXMucG9wdWxhdGVfc3lzcm9vdCIgJSBjKQorICAgICAgICBlbGlmICItY3Jvc3MtIiBpbiBjIG9yICItY3Jvc3NzZGsiIGluIGM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9tYW5pZmVzdC0ke01BQ0hJTkV9LSVzLnBvcHVsYXRlX3N5c3Jvb3QiICUgYykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IG9wZW4obWFuaWZlc3QsICJyIikKKyAgICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgaWYgIi9hY2xvY2FsLyIgaW4gbCBhbmQgbC5zdHJpcCgpLmVuZHN3aXRoKCIubTQiKToKKyAgICAgICAgICAgICAgICAgICAgY3AuYXBwZW5kKGwuc3RyaXAoKSkKKyAgICAgICAgICAgICAgICBlbGlmICJjb25maWdfc2l0ZS5kLyIgaW4gbDoKKyAgICAgICAgICAgICAgICAgICAgY3AuYXBwZW5kKGwuc3RyaXAoKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgYmIud2FybigiJXMgbm90IGZvdW5kIiAlIG1hbmlmZXN0KQorCisgICAgZm9yIGMgaW4gY3A6CisgICAgICAgIHQgPSBvcy5wYXRoLmpvaW4oYWNsb2NhbGRpciwgb3MucGF0aC5iYXNlbmFtZShjKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHQpOgorICAgICAgICAgICAgb3Muc3ltbGluayhjLCB0KQorICAgICAgICAgICAgCisgICAgZC5zZXRWYXIoIkNPTkZJR19TSVRFIiwgc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIEZhbHNlKSkKK30KK2F1dG90b29sc19jb3B5X2FjbG9jYWxzW3ZhcmRlcHNleGNsdWRlXSArPSAiTUFDSElORSBTREtfQVJDSCBCVUlMRF9BUkNIIFNES19PUyBCQl9UQVNLREVQREFUQSIKKworYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZSgpIHsKKwkjIFdBUk5JTkc6IGdyb3NzIGhhY2sgZm9sbG93czoKKwkjIEFuIGF1dG90b29scyBidWlsdCBwYWNrYWdlIGdlbmVyYWxseSBuZWVkcyB0aGVzZSBzY3JpcHRzLCBob3dldmVyIG9ubHkKKwkjIGF1dG9tYWtlIG9yIGxpYnRvb2xpemUgYWN0dWFsbHkgaW5zdGFsbCB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiB0aGVtLgorCSMgVGhpcyBpcyBhIHByb2JsZW0gaW4gYnVpbGRzIHRoYXQgZG8gbm90IHVzZSBsaWJ0b29sIG9yIGF1dG9tYWtlLCBpbiB0aGUgY2FzZQorCSMgd2hlcmUgd2UgLW5lZWQtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGVzZSBzY3JpcHRzLiAgZS5nLiBydW5uaW5nIGEgYnVpbGQKKwkjIGZvciBhIHBhY2thZ2Ugd2hvc2UgYXV0b3Rvb2xzIGFyZSBvbGQsIG9uIGFuIHg4Nl82NCBtYWNoaW5lLCB3aGljaCB0aGUgb2xkCisJIyBjb25maWcuc3ViIGRvZXMgbm90IHN1cHBvcnQuICBXb3JrIGFyb3VuZCB0aGlzIGJ5IGluc3RhbGxpbmcgdGhlbSBtYW51YWxseQorCSMgcmVnYXJkbGVzcy4KKwkoIGZvciBhYyBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lIGNvbmZpZ3VyZS5pbiAtbyAtbmFtZSBjb25maWd1cmUuYWNgOyBkbworCQlybSAtZiBgZGlybmFtZSAkYWNgL2NvbmZpZ3VyZQorCQlkb25lICkKKwlpZiBbIC1lICR7U30vY29uZmlndXJlLmluIC1vIC1lICR7U30vY29uZmlndXJlLmFjIF07IHRoZW4KKwkJb2xkZGlyPWBwd2RgCisJCWNkICR7U30KKwkJQUNMT0NBTD0iYWNsb2NhbCAtLXN5c3RlbS1hY2Rpcj0ke0FDTE9DQUxESVJ9LyIKKwkJaWYgWyB4IiR7YWNwYXRoc30iID0geGRlZmF1bHQgXTsgdGhlbgorCQkJYWNwYXRocz0KKwkJCWZvciBpIGluIGBmaW5kICR7U30gLWlnbm9yZV9yZWFkZGlyX3JhY2UgLW1heGRlcHRoIDIgLW5hbWUgXCoubTR8Z3JlcCAtdiAnYWNsb2NhbC5tNCd8IFwKKwkJCQlncmVwIC12ICdhY2luY2x1ZGUubTQnIHwgZ3JlcCAtdiAnYWNsb2NhbC1jb3B5JyB8IHNlZCAtZSAncyxcKC4qL1wpLiokLFwxLCd8c29ydCAtdWA7IGRvCisJCQkJYWNwYXRocz0iJGFjcGF0aHMgLUkgJGkiCisJCQlkb25lCisJCWVsc2UKKwkJCWFjcGF0aHM9IiR7YWNwYXRoc30iCisJCWZpCisJCUFVVE9WPWBhdXRvbWFrZSAtLXZlcnNpb24gfCBzZWQgLWUgJzF7cy8uKiAvLztzL1wuWzAtOV1cKyQvL307cSdgCisJCWF1dG9tYWtlIC0tdmVyc2lvbgorCQllY2hvICJBVVRPViBpcyAkQVVUT1YiCisJCWlmIFsgLWQgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hY2xvY2FsLSRBVVRPViBdOyB0aGVuCisJCQlBQ0xPQ0FMPSIkQUNMT0NBTCAtLWF1dG9tYWtlLWFjZGlyPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vYWNsb2NhbC0kQVVUT1YiCisJCWZpCisJCSMgYXV0b3JlY29uZiBpcyB0b28gc2h5IHRvIG92ZXJ3cml0ZSBhY2xvY2FsLm00IGlmIGl0IGRvZXNuJ3QgbG9vaworCQkjIGxpa2UgaXQgd2FzIGF1dG8tZ2VuZXJhdGVkLiAgV29yayBhcm91bmQgdGhpcyBieSBibG93aW5nIGl0IGF3YXkKKwkJIyBieSBoYW5kLCB1bmxlc3MgdGhlIHBhY2thZ2Ugc3BlY2lmaWNhbGx5IGFza2VkIG5vdCB0byBydW4gYWNsb2NhbC4KKwkJaWYgISBlY2hvICR7RVhUUkFfQVVUT1JFQ09ORn0gfCBncmVwIC1xICJhY2xvY2FsIjsgdGhlbgorCQkJcm0gLWYgYWNsb2NhbC5tNAorCQlmaQorCQlpZiBbIC1lIGNvbmZpZ3VyZS5pbiBdOyB0aGVuCisJCQlDT05GSUdVUkVfQUM9Y29uZmlndXJlLmluCisJCWVsc2UKKwkJCUNPTkZJR1VSRV9BQz1jb25maWd1cmUuYWMKKwkJZmkKKwkJaWYgZ3JlcCAiXltbOnNwYWNlOl1dKkFNX0dMSUJfR05VX0dFVFRFWFQiICRDT05GSUdVUkVfQUMgPi9kZXYvbnVsbDsgdGhlbgorCQkJaWYgZ3JlcCAic2VkLipQT1RGSUxFUyIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQkJOiBkbyBub3RoaW5nIC0tIHdlIHN0aWxsIGhhdmUgYW4gb2xkIHVubW9kaWZpZWQgY29uZmlndXJlLmFjCisJICAgIAkJZWxzZQorCQkJCWJibm90ZSBFeGVjdXRpbmcgZ2xpYi1nZXR0ZXh0aXplIC0tZm9yY2UgLS1jb3B5CisJCQkJZWNobyAibm8iIHwgZ2xpYi1nZXR0ZXh0aXplIC0tZm9yY2UgLS1jb3B5CisJCQlmaQorCQllbHNlIGlmIGdyZXAgIl5bWzpzcGFjZTpdXSpBTV9HTlVfR0VUVEVYVCIgJENPTkZJR1VSRV9BQyA+L2Rldi9udWxsOyB0aGVuCisJCQkjIFdlJ2QgY2FsbCBnZXR0ZXh0aXplIGhlcmUgaWYgaXQgd2Fzbid0IHNvIGJyb2tlbi4uLgorCQkJCWNwICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9jb25maWcucnBhdGggJHtBVVRPVE9PTFNfQVVYRElSfS8KKwkJCQlpZiBbIC1kICR7U30vcG8vIF07IHRoZW4KKwkJCQkJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG8vCisJCQkJCWlmIFsgISAtZSAke1N9L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4gXTsgdGhlbgorCQkJCQkJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4gJHtTfS9wby8KKwkJCQkJZmkKKwkJCQlmaQorCQkJCWZvciBpIGluIGdldHRleHQubTQgaWNvbnYubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbmxzLm00IHBvLm00IHByb2d0ZXN0Lm00OyBkbworCQkJCQlmb3IgaiBpbiBgZmluZCAke1N9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lICRpIHwgZ3JlcCAtdiBhY2xvY2FsLWNvcHlgOyBkbworCQkJCQkJcm0gJGoKKwkJCQkJZG9uZQorCQkJCWRvbmUKKwkJCWZpCisJCWZpCisJCW1rZGlyIC1wIG00CisJCWlmIGdyZXAgIl5bWzpzcGFjZTpdXSpbQUldW0NUXV9QUk9HX0lOVExUT09MIiAkQ09ORklHVVJFX0FDID4vZGV2L251bGw7IHRoZW4KKwkJCWJibm90ZSBFeGVjdXRpbmcgaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQorCQkJaW50bHRvb2xpemUgLS1jb3B5IC0tZm9yY2UgLS1hdXRvbWFrZQorCQlmaQorCQliYm5vdGUgRXhlY3V0aW5nIEFDTE9DQUw9XCIkQUNMT0NBTFwiIGF1dG9yZWNvbmYgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMKKwkJQUNMT0NBTD0iJEFDTE9DQUwiIGF1dG9yZWNvbmYgLVdjcm9zcyAtLXZlcmJvc2UgLS1pbnN0YWxsIC0tZm9yY2UgJHtFWFRSQV9BVVRPUkVDT05GfSAkYWNwYXRocyB8fCBkaWUgImF1dG9yZWNvbmYgZXhlY3V0aW9uIGZhaWxlZC4iCisJCWNkICRvbGRkaXIKKwlmaQorCWlmIFsgLWUgJHtTfS9jb25maWd1cmUgXTsgdGhlbgorCQlvZV9ydW5jb25mCisJZWxzZQorCQliYm5vdGUgIm5vdGhpbmcgdG8gY29uZmlndXJlIgorCWZpCit9CisKK2F1dG90b29sc19kb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCit9CisKK2luaGVyaXQgc2l0ZWNvbmZpZworCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZSBkb19pbnN0YWxsCisKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9hdXRvdG9vbHNfc3RhZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2M0MWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2F1dG90b29sc19zdGFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMiBAQAoraW5oZXJpdCBhdXRvdG9vbHMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA3ODAwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw2MjkgQEAKK0JCX0RFRkFVTFRfVEFTSyA/PSAiYnVpbGQiCitDTEFTU09WRVJSSURFID89ICJjbGFzcy10YXJnZXQiCisKK2luaGVyaXQgcGF0Y2gKK2luaGVyaXQgc3RhZ2luZworCitpbmhlcml0IG1pcnJvcnMKK2luaGVyaXQgdXRpbHMKK2luaGVyaXQgdXRpbGl0eS10YXNrcworaW5oZXJpdCBtZXRhZGF0YV9zY20KK2luaGVyaXQgbG9nZ2luZworCitPRV9JTVBPUlRTICs9ICJvcyBzeXMgdGltZSBvZS5wYXRoIG9lLnV0aWxzIG9lLmRhdGEgb2UucGFja2FnZSBvZS5wYWNrYWdlZ3JvdXAgb2Uuc3N0YXRlc2lnIG9lLmxzYiBvZS5jYWNoZWRwYXRoIgorT0VfSU1QT1JUU1t0eXBlXSA9ICJsaXN0IgorCitkZWYgb2VfaW1wb3J0KGQpOgorICAgIGltcG9ydCBzeXMKKworICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgc3lzLnBhdGhbMDowXSA9IFtvcy5wYXRoLmpvaW4oZGlyLCAibGliIikgZm9yIGRpciBpbiBiYnBhdGhdCisKKyAgICBkZWYgaW5qZWN0KG5hbWUsIHZhbHVlKToKKyAgICAgICAgIiIiTWFrZSBhIHB5dGhvbiBvYmplY3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBtZXRhZGF0YSIiIgorICAgICAgICBpZiBoYXNhdHRyKGJiLnV0aWxzLCAiX2NvbnRleHQiKToKKyAgICAgICAgICAgIGJiLnV0aWxzLl9jb250ZXh0W25hbWVdID0gdmFsdWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9fYnVpbHRpbnNfX1tuYW1lXSA9IHZhbHVlCisKKyAgICBpbXBvcnQgb2UuZGF0YQorICAgIGZvciB0b2ltcG9ydCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCJPRV9JTVBPUlRTIiwgZCk6CisgICAgICAgIGltcG9ydGVkID0gX19pbXBvcnRfXyh0b2ltcG9ydCkKKyAgICAgICAgaW5qZWN0KHRvaW1wb3J0LnNwbGl0KCIuIiwgMSlbMF0sIGltcG9ydGVkKQorCisgICAgcmV0dXJuICIiCisKKyMgV2UgbmVlZCB0aGUgb2UgbW9kdWxlIG5hbWUgc3BhY2UgZWFybHkgKGJlZm9yZSBJTkhFUklUcyBnZXQgYWRkZWQpCitPRV9JTVBPUlRFRCA6PSAiJHtAb2VfaW1wb3J0KGQpfSIKKworZGVmIGxzYl9kaXN0cm9faWRlbnRpZmllcihkKToKKyAgICBhZGp1c3QgPSBkLmdldFZhcignTFNCX0RJU1RST19BREpVU1QnLCBUcnVlKQorICAgIGFkanVzdF9mdW5jID0gTm9uZQorICAgIGlmIGFkanVzdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRqdXN0X2Z1bmMgPSBnbG9iYWxzKClbYWRqdXN0XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgcmV0dXJuIG9lLmxzYi5kaXN0cm9faWRlbnRpZmllcihhZGp1c3RfZnVuYykKKworZGllKCkgeworCWJiZmF0YWxfbG9nICIkKiIKK30KKworb2VfcnVubWFrZV9jYWxsKCkgeworCWJibm90ZSAke01BS0V9ICR7RVhUUkFfT0VNQUtFfSAiJEAiCisJJHtNQUtFfSAke0VYVFJBX09FTUFLRX0gIiRAIgorfQorCitvZV9ydW5tYWtlKCkgeworCW9lX3J1bm1ha2VfY2FsbCAiJEAiIHx8IGRpZSAib2VfcnVubWFrZSBmYWlsZWQiCit9CisKKworZGVmIGJhc2VfZGVwX3ByZXBlbmQoZCk6CisgICAgIworICAgICMgSWRlYWxseSB0aGlzIHdpbGwgY2hlY2sgYSBmbGFnIHNvIHdlIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSBpbgorICAgICMgdGhlIGNhc2Ugd2hlcmUgaG9zdCA9PSBidWlsZCA9PSB0YXJnZXQsIGZvciBub3cgd2UgZG9uJ3Qgd29yayBpbgorICAgICMgdGhhdCBjYXNlIHRob3VnaC4KKyAgICAjCisKKyAgICBkZXBzID0gIiIKKyAgICAjIElOSElCSVRfREVGQVVMVF9ERVBTIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIHBhdGNoIGNvbW1hbmQuICBXaGV0aGVyIG9yICBub3QKKyAgICAjIHdlIG5lZWQgdGhhdCBidWlsdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBhdGNoIGZ1bmN0aW9uIC8gY2xhc3MsIG5vdAorICAgICMgdGhlIGFwcGxpY2F0aW9uLgorICAgIGlmIG5vdCBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBGYWxzZSk6CisgICAgICAgIGlmIChkLmdldFZhcignSE9TVF9TWVMnLCBUcnVlKSAhPSBkLmdldFZhcignQlVJTERfU1lTJywgVHJ1ZSkpOgorICAgICAgICAgICAgZGVwcyArPSAiIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1jb21waWxlcmxpYnMgdmlydHVhbC9saWJjICIKKyAgICByZXR1cm4gZGVwcworCitCQVNFREVQRU5EUyA9ICIke0BiYXNlX2RlcF9wcmVwZW5kKGQpfSIKKworREVQRU5EU19wcmVwZW5kPSIke0JBU0VERVBFTkRTfSAiCisKK0ZJTEVTUEFUSCA9ICIke0BiYXNlX3NldF9maWxlc3BhdGgoWyIke0ZJTEVfRElSTkFNRX0vJHtCUH0iLCAiJHtGSUxFX0RJUk5BTUV9LyR7QlBOfSIsICIke0ZJTEVfRElSTkFNRX0vZmlsZXMiXSwgZCl9IgorIyBUSElTRElSIG9ubHkgd29ya3MgcHJvcGVybHkgd2l0aCBpbWVkaWF0ZSBleHBhbnNpb24gYXMgaXQgaGFzIHRvIHJ1bgorIyBpbiB0aGUgY29udGV4dCBvZiB0aGUgbG9jYXRpb24gaXRzIHVzZWQgKDo9KQorVEhJU0RJUiA9ICIke0Bvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSl9IgorCitkZWYgZXh0cmFfcGF0aF9lbGVtZW50cyhkKToKKyAgICBwYXRoID0gIiIKKyAgICBlbGVtZW50cyA9IChkLmdldFZhcignRVhUUkFOQVRJVkVQQVRIJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgZSBpbiBlbGVtZW50czoKKyAgICAgICAgcGF0aCA9IHBhdGggKyAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyIgKyBlICsgIjoiCisgICAgcmV0dXJuIHBhdGgKKworUEFUSF9wcmVwZW5kID0gIiR7QGV4dHJhX3BhdGhfZWxlbWVudHMoZCl9IgorCitkZWYgZ2V0X2xpY19jaGVja3N1bV9maWxlX2xpc3QoZCk6CisgICAgZmlsZWxpc3QgPSBbXQorICAgIGxpY19maWxlcyA9IGQuZ2V0VmFyKCJMSUNfRklMRVNfQ0hLU1VNIiwgVHJ1ZSkgb3IgJycKKyAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSkKKworICAgIHVybHMgPSBsaWNfZmlsZXMuc3BsaXQoKQorICAgIGZvciB1cmwgaW4gdXJsczoKKyAgICAgICAgIyBXZSBvbmx5IGNhcmUgYWJvdXQgaXRlbXMgdGhhdCBhcmUgYWJzb2x1dGUgcGF0aHMgc2luY2UKKyAgICAgICAgIyBhbnkgb3RoZXJzIHNob3VsZCBiZSBjb3ZlcmVkIGJ5IFNSQ19VUkkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSBiYi5mZXRjaC5kZWNvZGV1cmwodXJsKVsyXQorICAgICAgICAgICAgaWYgcGF0aFswXSA9PSAnLyc6CisgICAgICAgICAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKHRtcGRpcik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZWxpc3QuYXBwZW5kKHBhdGggKyAiOiIgKyBzdHIob3MucGF0aC5leGlzdHMocGF0aCkpKQorICAgICAgICBleGNlcHQgYmIuZmV0Y2guTWFsZm9ybWVkVXJsOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChkLmdldFZhcignUE4nLCBUcnVlKSArICI6IExJQ19GSUxFU19DSEtTVU0gY29udGFpbnMgYW4gaW52YWxpZCBVUkw6ICIgKyB1cmwpCisgICAgcmV0dXJuICIgIi5qb2luKGZpbGVsaXN0KQorCithZGR0YXNrIGZldGNoCitkb19mZXRjaFtkaXJzXSA9ICIke0RMX0RJUn0iCitkb19mZXRjaFtmaWxlLWNoZWNrc3Vtc10gPSAiJHtAYmIuZmV0Y2guZ2V0X2NoZWNrc3VtX2ZpbGVfbGlzdChkKX0iCitkb19mZXRjaFtmaWxlLWNoZWNrc3Vtc10gKz0gIiAke0BnZXRfbGljX2NoZWNrc3VtX2ZpbGVfbGlzdChkKX0iCitkb19mZXRjaFt2YXJkZXBzXSArPSAiU1JDUkVWIgorcHl0aG9uIGJhc2VfZG9fZmV0Y2goKSB7CisKKyAgICBzcmNfdXJpID0gKGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4oc3JjX3VyaSkgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgZCkKKyAgICAgICAgZmV0Y2hlci5kb3dubG9hZCgpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KKworYWRkdGFzayB1bnBhY2sgYWZ0ZXIgZG9fZmV0Y2gKK2RvX3VucGFja1tkaXJzXSA9ICIke1dPUktESVJ9IgorcHl0aG9uIGJhc2VfZG9fdW5wYWNrKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIHJvb3RkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisKKyAgICAjIEVuc3VyZSB0aGF0IHdlIGNsZWFudXAgJHtTfS9wYXRjaGVzCisgICAgIyBUT0RPOiBJbnZlc3RpZ2F0ZSBpZiB3ZSBjYW4gcmVtb3ZlCisgICAgIyB0aGUgZW50aXJlICR7U30gaW4gdGhpcyBjYXNlLgorICAgIHNfZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIHBfZGlyID0gb3MucGF0aC5qb2luKHNfZGlyLCAncGF0Y2hlcycpCisgICAgYmIudXRpbHMucmVtb3ZlKHBfZGlyLCBUcnVlKQorCisgICAgdHJ5OgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgICAgIGZldGNoZXIudW5wYWNrKHJvb3RkaXIpCisgICAgZXhjZXB0IGJiLmZldGNoMi5CQkZldGNoRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KKworZGVmIHBrZ2FyY2hfbWFwcGluZyhkKToKKyAgICAjIENvbXBhdGliaWxpdHkgbWFwcGluZ3Mgb2YgVFVORV9QS0dBUkNIIChvcHQgaW4pCisgICAgaWYgZC5nZXRWYXIoIlBLR0FSQ0hDT01QQVRfQVJNVjdBIiwgVHJ1ZSk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCJUVU5FX1BLR0FSQ0giLCBUcnVlKSA9PSAiYXJtdjdhLXZmcC1uZW9uIjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJUVU5FX1BLR0FSQ0giLCAiYXJtdjdhIikKKworZGVmIGdldF9sYXllcnNfYnJhbmNoX3JldihkKToKKyAgICBsYXllcnMgPSAoZC5nZXRWYXIoIkJCTEFZRVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBsYXllcnNfYnJhbmNoX3JldiA9IFsiJS0xN3MgPSBcIiVzOiVzXCIiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQorICAgIGkgPSBsZW4obGF5ZXJzX2JyYW5jaF9yZXYpLTEKKyAgICBwMSA9IGxheWVyc19icmFuY2hfcmV2W2ldLmZpbmQoIj0iKQorICAgIHMxID0gbGF5ZXJzX2JyYW5jaF9yZXZbaV1bcDE6XQorICAgIHdoaWxlIGkgPiAwOgorICAgICAgICBwMiA9IGxheWVyc19icmFuY2hfcmV2W2ktMV0uZmluZCgiPSIpCisgICAgICAgIHMyPSBsYXllcnNfYnJhbmNoX3JldltpLTFdW3AyOl0KKyAgICAgICAgaWYgczEgPT0gczI6CisgICAgICAgICAgICBsYXllcnNfYnJhbmNoX3JldltpLTFdID0gbGF5ZXJzX2JyYW5jaF9yZXZbaS0xXVswOnAyXQorICAgICAgICAgICAgaSAtPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpIC09IDEKKyAgICAgICAgICAgIHAxID0gbGF5ZXJzX2JyYW5jaF9yZXZbaV0uZmluZCgiPSIpCisgICAgICAgICAgICBzMT0gbGF5ZXJzX2JyYW5jaF9yZXZbaV1bcDE6XQorICAgIHJldHVybiBsYXllcnNfYnJhbmNoX3JldgorCisKK0JVSUxEQ0ZHX0ZVTkNTID8/PSAiYnVpbGRjZmdfdmFycyBnZXRfbGF5ZXJzX2JyYW5jaF9yZXYgYnVpbGRjZmdfbmVlZGVkdmFycyIKK0JVSUxEQ0ZHX0ZVTkNTW3R5cGVdID0gImxpc3QiCisKK2RlZiBidWlsZGNmZ192YXJzKGQpOgorICAgIHN0YXR1c3ZhcnMgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdCVUlMRENGR19WQVJTJywgZCkKKyAgICBmb3IgdmFyIGluIHN0YXR1c3ZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkICclLTE3cyA9ICIlcyInICUgKHZhciwgdmFsdWUpCisKK2RlZiBidWlsZGNmZ19uZWVkZWR2YXJzKGQpOgorICAgIG5lZWRlZF92YXJzID0gb2UuZGF0YS50eXBlZF92YWx1ZSgiQlVJTERDRkdfTkVFREVEVkFSUyIsIGQpCisgICAgcGVzdGVydXNlciA9IFtdCisgICAgZm9yIHYgaW4gbmVlZGVkX3ZhcnM6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHYsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YWwgb3IgdmFsID09ICdJTlZBTElEJzoKKyAgICAgICAgICAgIHBlc3RlcnVzZXIuYXBwZW5kKHYpCisKKyAgICBpZiBwZXN0ZXJ1c2VyOgorICAgICAgICBiYi5mYXRhbCgnVGhlIGZvbGxvd2luZyB2YXJpYWJsZShzKSB3ZXJlIG5vdCBzZXQ6ICVzXG5QbGVhc2Ugc2V0IHRoZW0gZGlyZWN0bHksIG9yIGNob29zZSBhIE1BQ0hJTkUgb3IgRElTVFJPIHRoYXQgc2V0cyB0aGVtLicgJSAnLCAnLmpvaW4ocGVzdGVydXNlcikpCisKK2FkZGhhbmRsZXIgYmFzZV9ldmVudGhhbmRsZXIKK2Jhc2VfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQ29uZmlnUGFyc2VkIGJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSBiYi5ydW5xdWV1ZS5zY2VuZVF1ZXVlQ29tcGxldGUiCitweXRob24gYmFzZV9ldmVudGhhbmRsZXIoKSB7CisgICAgaW1wb3J0IGJiLnJ1bnF1ZXVlCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkNvbmZpZ1BhcnNlZCk6CisgICAgICAgIGlmIG5vdCBlLmRhdGEuZ2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBGYWxzZSk6CisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyKCJOQVRJVkVMU0JTVFJJTkciLCBsc2JfZGlzdHJvX2lkZW50aWZpZXIoZS5kYXRhKSkKKyAgICAgICAgZS5kYXRhLnNldFZhcignQkJfVkVSU0lPTicsIGJiLl9fdmVyc2lvbl9fKQorICAgICAgICBwa2dhcmNoX21hcHBpbmcoZS5kYXRhKQorICAgICAgICBvZS51dGlscy5mZWF0dXJlc19iYWNrZmlsbCgiRElTVFJPX0ZFQVRVUkVTIiwgZS5kYXRhKQorICAgICAgICBvZS51dGlscy5mZWF0dXJlc19iYWNrZmlsbCgiTUFDSElORV9GRUFUVVJFUyIsIGUuZGF0YSkKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHN0YXR1c2xpbmVzID0gW10KKyAgICAgICAgZm9yIGZ1bmMgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQlVJTERDRkdfRlVOQ1MnLCBsb2NhbGRhdGEpOgorICAgICAgICAgICAgZyA9IGdsb2JhbHMoKQorICAgICAgICAgICAgaWYgZnVuYyBub3QgaW4gZzoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJCdWlsZCBjb25maWd1cmF0aW9uIGZ1bmN0aW9uICclcycgZG9lcyBub3QgZXhpc3QiICUgZnVuYykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmxpbmVzID0gZ1tmdW5jXShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgaWYgZmxpbmVzOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXNsaW5lcy5leHRlbmQoZmxpbmVzKQorCisgICAgICAgIHN0YXR1c2hlYWRlciA9IGUuZGF0YS5nZXRWYXIoJ0JVSUxEQ0ZHX0hFQURFUicsIFRydWUpCisgICAgICAgIGJiLnBsYWluKCdcbiVzXG4lc1xuJyAlIChzdGF0dXNoZWFkZXIsICdcbicuam9pbihzdGF0dXNsaW5lcykpKQorCisgICAgIyBUaGlzIGNvZGUgaXMgdG8gc2lsZW5jZSB3YXJuaW5ncyB3aGVyZSB0aGUgU0RLIHZhcmlhYmxlcyBvdmVyd3JpdGUgdGhlIAorICAgICMgdGFyZ2V0IG9uZXMgYW5kIHdlJ2Qgc2VlIGR1bHBpY2F0ZSBrZXkgbmFtZXMgb3ZlcndyaXRpbmcgZWFjaCBvdGhlcgorICAgICMgZm9yIHZhcmlvdXMgUFJFRkVSUkVEX1BST1ZJREVSUworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UpOgorICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfUFJFRklYIiwgVHJ1ZSkgPT0gZS5kYXRhLmdldFZhcigiU0RLX1BSRUZJWCIsIFRydWUpOgorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCIpCisgICAgICAgICAgICBlLmRhdGEuZGVsVmFyKCJQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIikKKyAgICAgICAgICAgIGUuZGF0YS5kZWxWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiKQorICAgICAgICAgICAgZS5kYXRhLmRlbFZhcigiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyIpCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIGJiLnJ1bnF1ZXVlLnNjZW5lUXVldWVDb21wbGV0ZSk6CisgICAgICAgIGNvbXBsZXRpb25zID0gZS5kYXRhLmV4cGFuZCgiJHtTVEFHSU5HX0RJUn0vc3N0YXRlY29tcGxldGlvbnMiKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21wbGV0aW9ucyk6CisgICAgICAgICAgICBjbWRzID0gc2V0KCkKKyAgICAgICAgICAgIHdpdGggb3Blbihjb21wbGV0aW9ucywgInIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGNtZHMgPSBzZXQoZikKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoImNvbXBsZXRpb25fZnVuY3Rpb24iLCAiXG4iLmpvaW4oY21kcykpCisgICAgICAgICAgICBlLmRhdGEuc2V0VmFyRmxhZygiY29tcGxldGlvbl9mdW5jdGlvbiIsICJmdW5jIiwgIjEiKQorICAgICAgICAgICAgYmIuZGVidWcoMSwgIkV4ZWN1dGluZyBTY2VuZVF1ZXVlIENvbXBsZXRpb24gY29tbWFuZHM6ICVzIiAlICJcbiIuam9pbihjbWRzKSkKKyAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiY29tcGxldGlvbl9mdW5jdGlvbiIsIGUuZGF0YSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb21wbGV0aW9ucykKK30KKworQ09ORklHVVJFU1RBTVBGSUxFID0gIiR7V09SS0RJUn0vY29uZmlndXJlLnNzdGF0ZSIKK0NMRUFOQlJPS0VOID0gIjAiCisKK2FkZHRhc2sgY29uZmlndXJlIGFmdGVyIGRvX3BhdGNoCitkb19jb25maWd1cmVbZGlyc10gPSAiJHtCfSIKK2RvX2NvbmZpZ3VyZVtkZXB0YXNrXSA9ICJkb19wb3B1bGF0ZV9zeXNyb290IgorYmFzZV9kb19jb25maWd1cmUoKSB7CisJaWYgWyAtbiAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiAtYSAtZSAiJHtDT05GSUdVUkVTVEFNUEZJTEV9IiBdOyB0aGVuCisJCWlmIFsgImBjYXQgJHtDT05GSUdVUkVTVEFNUEZJTEV9YCIgIT0gIiR7QkJfVEFTS0hBU0h9IiBdOyB0aGVuCisJCQljZCAke0J9CisJCQlpZiBbICIke0NMRUFOQlJPS0VOfSIgIT0gIjEiIC1hIFwoIC1lIE1ha2VmaWxlIC1vIC1lIG1ha2VmaWxlIC1vIC1lIEdOVW1ha2VmaWxlIFwpIF07IHRoZW4KKwkJCQlvZV9ydW5tYWtlIGNsZWFuCisJCQlmaQorCQkJZmluZCAke0J9IC1pZ25vcmVfcmVhZGRpcl9yYWNlIC1uYW1lIFwqLmxhIC1kZWxldGUKKwkJZmkKKwlmaQorCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQllY2hvICR7QkJfVEFTS0hBU0h9ID4gJHtDT05GSUdVUkVTVEFNUEZJTEV9CisJZmkKK30KKworYWRkdGFzayBjb21waWxlIGFmdGVyIGRvX2NvbmZpZ3VyZQorZG9fY29tcGlsZVtkaXJzXSA9ICIke0J9IgorYmFzZV9kb19jb21waWxlKCkgeworCWlmIFsgLWUgTWFrZWZpbGUgLW8gLWUgbWFrZWZpbGUgLW8gLWUgR05VbWFrZWZpbGUgXTsgdGhlbgorCQlvZV9ydW5tYWtlIHx8IGRpZSAibWFrZSBmYWlsZWQiCisJZWxzZQorCQliYm5vdGUgIm5vdGhpbmcgdG8gY29tcGlsZSIKKwlmaQorfQorCithZGR0YXNrIGluc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQorZG9faW5zdGFsbFtkaXJzXSA9ICIke0R9ICR7Qn0iCisjIFJlbW92ZSBhbmQgcmUtY3JlYXRlICR7RH0gc28gdGhhdCBpcyBpdCBndWFyYW50ZWVkIHRvIGJlIGVtcHR5Citkb19pbnN0YWxsW2NsZWFuZGlyc10gPSAiJHtEfSIKKworYmFzZV9kb19pbnN0YWxsKCkgeworCToKK30KKworYmFzZV9kb19wYWNrYWdlKCkgeworCToKK30KKworYWRkdGFzayBidWlsZCBhZnRlciBkb19wb3B1bGF0ZV9zeXNyb290Citkb19idWlsZFtub2V4ZWNdID0gIjEiCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX2RlcGxveSIKK2RvX2J1aWxkICgpIHsKKwk6Cit9CisKK2RlZiBzZXRfcGFja2FnZXRyaXBsZXQoZCk6CisgICAgYXJjaHMgPSBbXQorICAgIHRvcyA9IFtdCisgICAgdHZzID0gW10KKworICAgIGFyY2hzLmFwcGVuZChkLmdldFZhcigiUEFDS0FHRV9BUkNIUyIsIFRydWUpLnNwbGl0KCkpCisgICAgdG9zLmFwcGVuZChkLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkpCisgICAgdHZzLmFwcGVuZChkLmdldFZhcigiVEFSR0VUX1ZFTkRPUiIsIFRydWUpKQorCisgICAgZGVmIHNldHRyaXBsZXQoZCwgdmFybmFtZSwgYXJjaHMsIHRvcywgdHZzKToKKyAgICAgICAgdHJpcGxldHMgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYXJjaHMpKToKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzW2ldOgorICAgICAgICAgICAgICAgIHRyaXBsZXRzLmFwcGVuZChhcmNoICsgdHZzW2ldICsgIi0iICsgdG9zW2ldKQorICAgICAgICB0cmlwbGV0cy5yZXZlcnNlKCkKKyAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgIiAiLmpvaW4odHJpcGxldHMpKQorCisgICAgc2V0dHJpcGxldChkLCAiUEtHVFJJUExFVFMiLCBhcmNocywgdG9zLCB0dnMpCisKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgYXJjaHMuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKS5zcGxpdCgpKQorICAgICAgICB0b3MuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpKQorICAgICAgICB0dnMuYXBwZW5kKGxvY2FsZGF0YS5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBUcnVlKSkKKworICAgIHNldHRyaXBsZXQoZCwgIlBLR01MVFJJUExFVFMiLCBhcmNocywgdG9zLCB0dnMpCisKK3B5dGhvbiAoKSB7CisgICAgaW1wb3J0IHN0cmluZywgcmUKKworICAgICMgSGFuZGxlIFBBQ0tBR0VDT05GSUcKKyAgICAjCisgICAgIyBUaGVzZSB0YWtlIHRoZSBmb3JtOgorICAgICMKKyAgICAjIFBBQ0tBR0VDT05GSUcgPz89ICI8ZGVmYXVsdCBvcHRpb25zPiIKKyAgICAjIFBBQ0tBR0VDT05GSUdbZm9vXSA9ICItLWVuYWJsZS1mb28sLS1kaXNhYmxlLWZvbyxmb29fZGVwZW5kcyxmb29fcnVudGltZV9kZXBlbmRzIgorICAgIHBrZ2NvbmZpZ2ZsYWdzID0gZC5nZXRWYXJGbGFncygiUEFDS0FHRUNPTkZJRyIpIG9yIHt9CisgICAgaWYgcGtnY29uZmlnZmxhZ3M6CisgICAgICAgIHBrZ2NvbmZpZyA9IChkLmdldFZhcignUEFDS0FHRUNPTkZJRycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisKKyAgICAgICAgZGVmIGV4cGFuZEZpbHRlcihhcHBlbmRzLCBleHRlbnNpb24sIHByZWZpeCk6CisgICAgICAgICAgICBhcHBlbmRzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZXhwYW5kKCIgIi5qb2luKGFwcGVuZHMpKSkKKyAgICAgICAgICAgIG5ld2FwcGVuZHMgPSBbXQorICAgICAgICAgICAgZm9yIGEgaW4gYXBwZW5kczoKKyAgICAgICAgICAgICAgICBpZiBhLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgKCItY3Jvc3MtIiBpbiBhKToKKyAgICAgICAgICAgICAgICAgICAgbmV3YXBwZW5kcy5hcHBlbmQoYSkKKyAgICAgICAgICAgICAgICBlbGlmIGEuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgICAgICAgICAgc3VicyA9IGEuc3BsaXQoIi8iLCAxKVsxXQorICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZCgidmlydHVhbC8iICsgcHJlZml4ICsgc3VicyArIGV4dGVuc2lvbikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBhLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld2FwcGVuZHMuYXBwZW5kKGEgKyBleHRlbnNpb24pCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcHBlbmRzLmFwcGVuZChwcmVmaXggKyBhICsgZXh0ZW5zaW9uKQorICAgICAgICAgICAgcmV0dXJuIG5ld2FwcGVuZHMKKworICAgICAgICBkZWYgYXBwZW5kVmFyKHZhcm5hbWUsIGFwcGVuZHMpOgorICAgICAgICAgICAgaWYgbm90IGFwcGVuZHM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiB2YXJuYW1lLmZpbmQoIkRFUEVORFMiKSAhPSAtMToKKyAgICAgICAgICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHMgPSBleHBhbmRGaWx0ZXIoYXBwZW5kcywgIiIsICJuYXRpdmVzZGstIikKKyAgICAgICAgICAgICAgICBpZiBwbi5lbmRzd2l0aCgiLW5hdGl2ZSIpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmRzID0gZXhwYW5kRmlsdGVyKGFwcGVuZHMsICItbmF0aXZlIiwgIiIpCisgICAgICAgICAgICAgICAgaWYgbWxwcmVmaXg6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHMgPSBleHBhbmRGaWx0ZXIoYXBwZW5kcywgIiIsIG1scHJlZml4KQorICAgICAgICAgICAgdmFybmFtZSA9IGQuZXhwYW5kKHZhcm5hbWUpCisgICAgICAgICAgICBkLmFwcGVuZFZhcih2YXJuYW1lLCAiICIgKyAiICIuam9pbihhcHBlbmRzKSkKKworICAgICAgICBleHRyYWRlcHMgPSBbXQorICAgICAgICBleHRyYXJkZXBzID0gW10KKyAgICAgICAgZXh0cmFjb25mID0gW10KKyAgICAgICAgZm9yIGZsYWcsIGZsYWd2YWwgaW4gc29ydGVkKHBrZ2NvbmZpZ2ZsYWdzLml0ZW1zKCkpOgorICAgICAgICAgICAgaXRlbXMgPSBmbGFndmFsLnNwbGl0KCIsIikKKyAgICAgICAgICAgIG51bSA9IGxlbihpdGVtcykKKyAgICAgICAgICAgIGlmIG51bSA+IDQ6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoIk9ubHkgZW5hYmxlLGRpc2FibGUsZGVwZW5kLHJkZXBlbmQgY2FuIGJlIHNwZWNpZmllZCEiKQorCisgICAgICAgICAgICBpZiBmbGFnIGluIHBrZ2NvbmZpZzoKKyAgICAgICAgICAgICAgICBpZiBudW0gPj0gMyBhbmQgaXRlbXNbMl06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhZGVwcy5hcHBlbmQoaXRlbXNbMl0pCisgICAgICAgICAgICAgICAgaWYgbnVtID49IDQgYW5kIGl0ZW1zWzNdOgorICAgICAgICAgICAgICAgICAgICBleHRyYXJkZXBzLmFwcGVuZChpdGVtc1szXSkKKyAgICAgICAgICAgICAgICBpZiBudW0gPj0gMSBhbmQgaXRlbXNbMF06CisgICAgICAgICAgICAgICAgICAgIGV4dHJhY29uZi5hcHBlbmQoaXRlbXNbMF0pCisgICAgICAgICAgICBlbGlmIG51bSA+PSAyIGFuZCBpdGVtc1sxXToKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFjb25mLmFwcGVuZChpdGVtc1sxXSkKKyAgICAgICAgYXBwZW5kVmFyKCdERVBFTkRTJywgZXh0cmFkZXBzKQorICAgICAgICBhcHBlbmRWYXIoJ1JERVBFTkRTXyR7UE59JywgZXh0cmFyZGVwcykKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY21ha2UnLCBkKToKKyAgICAgICAgICAgIGFwcGVuZFZhcignRVhUUkFfT0VDTUFLRScsIGV4dHJhY29uZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFwcGVuZFZhcignRVhUUkFfT0VDT05GJywgZXh0cmFjb25mKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgaWYgbGljZW5zZSA9PSAiSU5WQUxJRCI6CisgICAgICAgIGJiLmZhdGFsKCdUaGlzIHJlY2lwZSBkb2VzIG5vdCBoYXZlIHRoZSBMSUNFTlNFIGZpZWxkIHNldCAoJXMpJyAlIHBuKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbGljZW5zZScsIGQpOgorICAgICAgICBjaGVja19saWNlbnNlX2Zvcm1hdChkKQorICAgICAgICB1bm1hdGNoZWRfbGljZW5zZV9mbGFnID0gY2hlY2tfbGljZW5zZV9mbGFncyhkKQorICAgICAgICBpZiB1bm1hdGNoZWRfbGljZW5zZV9mbGFnOgorICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNraXBwaW5nICVzIGJlY2F1c2UgaXQgaGFzIGEgcmVzdHJpY3RlZCBsaWNlbnNlIG5vdCIKKyAgICAgICAgICAgICAgICAgIiB3aGl0ZWxpc3RlZCBpbiBMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCIgJSBwbikKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJiZWNhdXNlIGl0IGhhcyBhIHJlc3RyaWN0ZWQgbGljZW5zZSBub3QiCisgICAgICAgICAgICAgICAgICIgd2hpdGVsaXN0ZWQgaW4gTElDRU5TRV9GTEFHU19XSElURUxJU1QiKQorCisgICAgIyBJZiB3ZSdyZSBidWlsZGluZyBhIHRhcmdldCBwYWNrYWdlIHdlIG5lZWQgdG8gdXNlIGZha2Vyb290IChwc2V1ZG8pCisgICAgIyBpbiBvcmRlciB0byBjYXB0dXJlIHBlcm1pc3Npb25zLCBvd25lcnMsIGdyb3VwcyBhbmQgc3BlY2lhbCBmaWxlcworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fdW5wYWNrJywgJ3VtYXNrJywgJzAyMicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fY29uZmlndXJlJywgJ3VtYXNrJywgJzAyMicpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fY29tcGlsZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2luc3RhbGwnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW5zdGFsbCcsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9faW5zdGFsbCcsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZScsICdmYWtlcm9vdCcsIDEpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZScsICd1bWFzaycsICcwMjInKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfc2V0c2NlbmUnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfc2V0c2NlbmUnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fZGV2c2hlbGwnLCAnZmFrZXJvb3QnLCAxKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2RldnNoZWxsJywgJ2RlcGVuZHMnLCAnIHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgIHNvdXJjZV9taXJyb3JfZmV0Y2ggPSBkLmdldFZhcignU09VUkNFX01JUlJPUl9GRVRDSCcsIDApCisgICAgaWYgbm90IHNvdXJjZV9taXJyb3JfZmV0Y2g6CisgICAgICAgIG5lZWRfaG9zdCA9IGQuZ2V0VmFyKCdDT01QQVRJQkxFX0hPU1QnLCBUcnVlKQorICAgICAgICBpZiBuZWVkX2hvc3Q6CisgICAgICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgICAgIHRoaXNfaG9zdCA9IGQuZ2V0VmFyKCdIT1NUX1NZUycsIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcmUubWF0Y2gobmVlZF9ob3N0LCB0aGlzX2hvc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCBob3N0ICVzIChub3QgaW4gQ09NUEFUSUJMRV9IT1NUKSIgJSB0aGlzX2hvc3QpCisKKyAgICAgICAgbmVlZF9tYWNoaW5lID0gZC5nZXRWYXIoJ0NPTVBBVElCTEVfTUFDSElORScsIFRydWUpCisgICAgICAgIGlmIG5lZWRfbWFjaGluZToKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgY29tcGF0X21hY2hpbmVzID0gKGQuZ2V0VmFyKCdNQUNISU5FT1ZFUlJJREVTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCI6IikKKyAgICAgICAgICAgIGZvciBtIGluIGNvbXBhdF9tYWNoaW5lczoKKyAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChuZWVkX21hY2hpbmUsIG0pOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiaW5jb21wYXRpYmxlIHdpdGggbWFjaGluZSAlcyAobm90IGluIENPTVBBVElCTEVfTUFDSElORSkiICUgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSkKKworCisgICAgICAgIGJhZF9saWNlbnNlcyA9IChkLmdldFZhcignSU5DT01QQVRJQkxFX0xJQ0VOU0UnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIGNoZWNrX2xpY2Vuc2UgPSBGYWxzZSBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIikgZWxzZSBUcnVlCisgICAgICAgIGZvciB0IGluIFsiLW5hdGl2ZSIsICItY3Jvc3MtJHtUQVJHRVRfQVJDSH0iLCAiLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iLAorICAgICAgICAgICAgICAiLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IiwgIi1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9IiwKKyAgICAgICAgICAgICAgIi1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9Il06CisgICAgICAgICAgICBpZiBwbi5lbmRzd2l0aChkLmV4cGFuZCh0KSk6CisgICAgICAgICAgICAgICAgY2hlY2tfbGljZW5zZSA9IEZhbHNlCisgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoImdjYy1zb3VyY2UtIik6CisgICAgICAgICAgICBjaGVja19saWNlbnNlID0gRmFsc2UKKworICAgICAgICBpZiBjaGVja19saWNlbnNlIGFuZCBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICBiYWRfbGljZW5zZXMgPSBleHBhbmRfd2lsZGNhcmRfbGljZW5zZXMoZCwgYmFkX2xpY2Vuc2VzKQorCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBbXQorICAgICAgICAgICAgaW5jb21wYXR3bCA9IFtdCisgICAgICAgICAgICBodGluY29tcGF0d2wgPSBbXQorICAgICAgICAgICAgZm9yIGxpYyBpbiBiYWRfbGljZW5zZXM6CisgICAgICAgICAgICAgICAgc3BkeF9saWNlbnNlID0gcmV0dXJuX3NwZHgoZCwgbGljKQorICAgICAgICAgICAgICAgIGZvciB3IGluIFsiSE9TVFRPT0xTX1dISVRFTElTVF8iLCAiTEdQTHYyX1dISVRFTElTVF8iLCAiV0hJVEVMSVNUXyJdOgorICAgICAgICAgICAgICAgICAgICB3aGl0ZWxpc3QuZXh0ZW5kKChkLmdldFZhcih3ICsgbGljLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc3BkeF9saWNlbnNlOgorICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVsaXN0LmV4dGVuZCgoZC5nZXRWYXIodyArIHNwZHhfbGljZW5zZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICcnJworICAgICAgICAgICAgICAgICAgICBXZSBuZWVkIHRvIHRyYWNrIHdoYXQgd2UgYXJlIHdoaXRlbGlzdGluZyBhbmQgd2h5LiBJZiBwbiBpcyAKKyAgICAgICAgICAgICAgICAgICAgaW5jb21wYXRpYmxlIGFuZCBpcyBub3QgSE9TVFRPT0xTX1dISVRFTElTVF8gd2UgbmVlZCB0byBiZSAKKyAgICAgICAgICAgICAgICAgICAgYWJsZSB0byBub3RlIHRoYXQgdGhlIGltYWdlIHRoYXQgaXMgY3JlYXRlZCBtYXkgaW5mYWN0IAorICAgICAgICAgICAgICAgICAgICBjb250YWluIGluY29tcGF0aWJsZSBsaWNlbnNlcyBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIAorICAgICAgICAgICAgICAgICAgICBiZWluZyBzZXQuCisgICAgICAgICAgICAgICAgICAgICcnJworICAgICAgICAgICAgICAgICAgICBpZiAiSE9TVFRPT0xTIiBpbiB3OgorICAgICAgICAgICAgICAgICAgICAgICAgaHRpbmNvbXBhdHdsLmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGR4X2xpY2Vuc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRpbmNvbXBhdHdsLmV4dGVuZCgoZC5nZXRWYXIodyArIHNwZHhfbGljZW5zZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbXBhdHdsLmV4dGVuZCgoZC5nZXRWYXIodyArIGxpYywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcGR4X2xpY2Vuc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wYXR3bC5leHRlbmQoKGQuZ2V0VmFyKHcgKyBzcGR4X2xpY2Vuc2UsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgICAgICAgICBpZiBub3QgcG4gaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIHJlY2lwZV9saWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgICAgICAgICAgICAgIHBrZ3MgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgc2tpcHBlZF9wa2dzID0gW10KKyAgICAgICAgICAgICAgICB1bnNraXBwZWRfcGtncyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmNvbXBhdGlibGVfbGljZW5zZShkLCBiYWRfbGljZW5zZXMsIHBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkX3BrZ3MuYXBwZW5kKHBrZykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2tpcHBlZF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgYWxsX3NraXBwZWQgPSBza2lwcGVkX3BrZ3MgYW5kIG5vdCB1bnNraXBwZWRfcGtncworICAgICAgICAgICAgICAgIGlmIHVuc2tpcHBlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHNraXBwZWRfcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJTS0lQUElORyB0aGUgcGFja2FnZSAiICsgcGtnICsgIiBhdCBkb19yb290ZnMgYmVjYXVzZSBpdCdzICIgKyByZWNpcGVfbGljZW5zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdMSUNFTlNFX0VYQ0xVU0lPTi0nICsgcGtnLCAxKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHVuc2tpcHBlZF9wa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIklOQ0xVRElORyB0aGUgcGFja2FnZSAiICsgcGtnKQorICAgICAgICAgICAgICAgIGVsaWYgYWxsX3NraXBwZWQgb3IgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgYmFkX2xpY2Vuc2VzKToKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIlNLSVBQSU5HIHJlY2lwZSAlcyBiZWNhdXNlIGl0J3MgJXMiICUgKHBuLCByZWNpcGVfbGljZW5zZSkpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCBsaWNlbnNlICVzIiAlIHJlY2lwZV9saWNlbnNlKQorICAgICAgICAgICAgZWxpZiBwbiBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgcG4gaW4gaW5jb21wYXR3bDoKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiSU5DTFVESU5HICIgKyBwbiArICIgYXMgYnVpbGRhYmxlIGRlc3BpdGUgSU5DT01QQVRJQkxFX0xJQ0VOU0UgYmVjYXVzZSBpdCBoYXMgYmVlbiB3aGl0ZWxpc3RlZCIpCisgICAgICAgICAgICAgICAgZWxpZiBwbiBpbiBodGluY29tcGF0d2w6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklOQ0xVRElORyAiICsgcG4gKyAiIGFzIGJ1aWxkYWJsZSBkZXNwaXRlIElOQ09NUEFUSUJMRV9MSUNFTlNFIGJlY2F1c2UgaXQgaGFzIGJlZW4gd2hpdGVsaXN0ZWQgZm9yIEhPU1RUT09MUyIpCisKKyAgICBzcmN1cmkgPSBkLmdldFZhcignU1JDX1VSSScsIFRydWUpCisgICAgIyBTdm4gcGFja2FnZXMgc2hvdWxkIERFUEVORCBvbiBzdWJ2ZXJzaW9uLW5hdGl2ZQorICAgIGlmICJzdm46Ly8iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19mZXRjaCcsICdkZXBlbmRzJywgJyBzdWJ2ZXJzaW9uLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgR2l0IHBhY2thZ2VzIHNob3VsZCBERVBFTkQgb24gZ2l0LW5hdGl2ZQorICAgIGlmICJnaXQ6Ly8iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19mZXRjaCcsICdkZXBlbmRzJywgJyBnaXQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyBNZXJjdXJpYWwgcGFja2FnZXMgc2hvdWxkIERFUEVORCBvbiBtZXJjdXJpYWwtbmF0aXZlCisgICAgZWxpZiAiaGc6Ly8iIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19mZXRjaCcsICdkZXBlbmRzJywgJyBtZXJjdXJpYWwtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyBPU0MgcGFja2FnZXMgc2hvdWxkIERFUEVORCBvbiBvc2MtbmF0aXZlCisgICAgZWxpZiAib3NjOi8vIiBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fZmV0Y2gnLCAnZGVwZW5kcycsICcgb3NjLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgKi5sejQgc2hvdWxkIGRlcGVuZHMgb24gbHo0LW5hdGl2ZSBmb3IgdW5wYWNraW5nCisgICAgIyBOb3QgZW5kc3dpdGggYmVjYXVzZSBvZiAiKi5wYXRjaC5sejQ7cGF0Y2g9MSIuIE5lZWQgYmIuZmV0Y2guZGVjb2RldXJsIGluIGZ1dHVyZQorICAgIGlmICcubHo0JyBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIGx6NC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisKKyAgICAjICoueHogc2hvdWxkIGRlcGVuZHMgb24geHotbmF0aXZlIGZvciB1bnBhY2tpbmcKKyAgICAjIE5vdCBlbmRzd2l0aCBiZWNhdXNlIG9mICIqLnBhdGNoLnh6O3BhdGNoPTEiLiBOZWVkIGJiLmZldGNoLmRlY29kZXVybCBpbiBmdXR1cmUKKyAgICBpZiAnLnh6JyBpbiBzcmN1cmk6CisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fdW5wYWNrJywgJ2RlcGVuZHMnLCAnIHh6LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgICMgdW56aXAtbmF0aXZlIHNob3VsZCBhbHJlYWR5IGJlIHN0YWdlZCBiZWZvcmUgdW5wYWNraW5nIFpJUCByZWNpcGVzCisgICAgaWYgIi56aXAiIGluIHNyY3VyaToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb191bnBhY2snLCAnZGVwZW5kcycsICcgdW56aXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorCisgICAgIyBmaWxlIGlzIG5lZWRlZCBieSBycG0yY3Bpby5zaAorICAgIGlmICIuc3JjLnJwbSIgaW4gc3JjdXJpOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3VucGFjaycsICdkZXBlbmRzJywgJyBmaWxlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKworICAgIHNldF9wYWNrYWdldHJpcGxldChkKQorCisgICAgIyAnbXVsdGltYWNoaW5lJyBoYW5kbGluZworICAgIG1hY2hfYXJjaCA9IGQuZ2V0VmFyKCdNQUNISU5FX0FSQ0gnLCBUcnVlKQorICAgIHBrZ19hcmNoID0gZC5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpCisKKyAgICBpZiAocGtnX2FyY2ggPT0gbWFjaF9hcmNoKToKKyAgICAgICAgIyBBbHJlYWR5IG1hY2hpbmUgc3BlY2lmaWMgLSBub3RoaW5nIGZ1cnRoZXIgdG8gZG8KKyAgICAgICAgcmV0dXJuCisKKyAgICAjCisgICAgIyBXZSBhbHdheXMgdHJ5IHRvIHNjYW4gU1JDX1VSSSBmb3IgdXJscyB3aXRoIG1hY2hpbmUgb3ZlcnJpZGVzCisgICAgIyB1bmxlc3MgdGhlIHBhY2thZ2Ugc2V0cyBTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0g9MAorICAgICMKKyAgICBvdmVycmlkZSA9IGQuZ2V0VmFyKCdTUkNfVVJJX09WRVJSSURFU19QQUNLQUdFX0FSQ0gnLCBUcnVlKQorICAgIGlmIG92ZXJyaWRlICE9ICcwJzoKKyAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICBmcGF0aHMgPSAoZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpCisgICAgICAgIG1hY2hpbmUgPSBkLmdldFZhcignTUFDSElORScsIFRydWUpCisgICAgICAgIGZvciBwIGluIGZwYXRoczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocCkgPT0gbWFjaGluZSBhbmQgb3MucGF0aC5pc2RpcihwKToKKyAgICAgICAgICAgICAgICBwYXRocy5hcHBlbmQocCkKKworICAgICAgICBpZiBsZW4ocGF0aHMpICE9IDA6CisgICAgICAgICAgICBmb3IgcyBpbiBzcmN1cmkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBub3Qgcy5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbc10sIGQpCisgICAgICAgICAgICAgICAgbG9jYWwgPSBmZXRjaGVyLmxvY2FscGF0aChzKQorICAgICAgICAgICAgICAgIGZvciBtcCBpbiBwYXRoczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWwuc3RhcnRzd2l0aChtcCk6CisgICAgICAgICAgICAgICAgICAgICAgICAjYmIubm90ZSgib3ZlcnJpZGluZyBQQUNLQUdFX0FSQ0ggZnJvbSAlcyB0byAlcyBmb3IgJXMiICUgKHBrZ19hcmNoLCBtYWNoX2FyY2gsIHBuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAiJHtNQUNISU5FX0FSQ0h9IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnYXJjaCA9IGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0hfJXMiICUgcGtnLCBUcnVlKQorCisgICAgICAgICMgV2UgY291bGQgbG9vayBmb3IgIT0gUEFDS0FHRV9BUkNIIGhlcmUgYnV0IGhvdyB0byBjaG9vc2UKKyAgICAgICAgIyBpZiBtdWx0aXBsZSBkaWZmZXJlbmNlcyBhcmUgcHJlc2VudD8KKyAgICAgICAgIyBMb29rIHRocm91Z2ggUEFDS0FHRV9BUkNIUyBmb3IgdGhlIHByaW9yaXR5IG9yZGVyPworICAgICAgICBpZiBwa2dhcmNoIGFuZCBwa2dhcmNoID09IG1hY2hfYXJjaDoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCAiJHtNQUNISU5FX0FSQ0h9IikKKyAgICAgICAgICAgIGJiLndhcm4oIlJlY2lwZSAlcyBpcyBtYXJrZWQgYXMgb25seSBiZWluZyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgYnV0IHNlZW1zIHRvIGhhdmUgbWFjaGluZSBzcGVjaWZpYyBwYWNrYWdlcz8hIFRoZSByZWNpcGUgbWF5IGFzIHdlbGwgbWFyayBpdHNlbGYgYXMgbWFjaGluZSBzcGVjaWZpYyBkaXJlY3RseS4iICUgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkpCit9CisKK2FkZHRhc2sgY2xlYW5zc3RhdGUgYWZ0ZXIgZG9fY2xlYW4KK3B5dGhvbiBkb19jbGVhbnNzdGF0ZSgpIHsKKyAgICAgICAgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZXMoZCkKK30KKworYWRkdGFzayBjbGVhbmFsbCBhZnRlciBkb19jbGVhbnNzdGF0ZQorcHl0aG9uIGRvX2NsZWFuYWxsKCkgeworICAgIHNyY191cmkgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIGxlbihzcmNfdXJpKSA9PSAwOgorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmNfdXJpLCBkKQorICAgICAgICBmZXRjaGVyLmNsZWFuKCkKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KK2RvX2NsZWFuYWxsW25vc3RhbXBdID0gIjEiCisKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19mZXRjaCBkb191bnBhY2sgZG9fY29uZmlndXJlIGRvX2NvbXBpbGUgZG9faW5zdGFsbCBkb19wYWNrYWdlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9iaW5fcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MmI3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmluX3BhY2thZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDM2IEBACisjCisjIGV4OnRzPTQ6c3c9NDpzdHM9NDpldAorIyAtKi0gdGFiLXdpZHRoOiA0OyBjLWJhc2ljLW9mZnNldDogNDsgaW5kZW50LXRhYnMtbW9kZTogbmlsIC0qLQorIworIyBDb21tb24gdmFyaWFibGUgYW5kIHRhc2sgZm9yIHRoZSBiaW5hcnkgcGFja2FnZSByZWNpcGUuCisjIEJhc2ljIHByaW5jaXBsZToKKyMgKiBUaGUgZmlsZXMgaGF2ZSBiZWVuIHVucGFja2VkIHRvICR7U30gYnkgYmFzZS5iYmNsYXNzCisjICogU2tpcCBkb19jb25maWd1cmUgYW5kIGRvX2NvbXBpbGUKKyMgKiBVc2UgZG9faW5zdGFsbCB0byBpbnN0YWxsIHRoZSBmaWxlcyB0byAke0R9CisjCisjIE5vdGU6CisjIFRoZSAic3ViZGlyIiBwYXJhbWV0ZXIgaW4gdGhlIFNSQ19VUkkgaXMgdXNlZnVsIHdoZW4gdGhlIGlucHV0IHBhY2thZ2UKKyMgaXMgcnBtLCBpcGssIGRlYiBhbmQgc28gb24sIGZvciBleGFtcGxlOgorIworIyBTUkNfVVJJID0gImh0dHA6Ly9mb28uY29tL2Zvby0xLjAtcjEuaTU4Ni5ycG07c3ViZGlyPWZvby0xLjAiCisjCisjIFRoZW4gdGhlIGZpbGVzIHdvdWxkIGJlIHVucGFja2VkIHRvICR7V09SS0RJUn0vZm9vLTEuMCwgb3RoZXJ3aXNlCisjIHRoZXkgd291bGQgYmUgaW4gJHtXT1JLRElSfS4KKyMKKworIyBTa2lwIHRoZSB1bndhbnRlZCBzdGVwcworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCisjIEluc3RhbGwgdGhlIGZpbGVzIHRvICR7RH0KK2Jpbl9wYWNrYWdlX2RvX2luc3RhbGwgKCkgeworICAgICMgRG8gaXQgY2FyZWZ1bGx5CisgICAgWyAtZCAiJHtTfSIgXSB8fCBleGl0IDEKKyAgICBjZCAke1N9IHx8IGV4aXQgMQorICAgIHRhciAtLW5vLXNhbWUtb3duZXIgLS1leGNsdWRlPScuL3BhdGNoZXMnIC0tZXhjbHVkZT0nLi8ucGMnIC1jcGYgLSAuIFwKKyAgICAgICAgfCB0YXIgLS1uby1zYW1lLW93bmVyIC14cGYgLSAtQyAke0R9Cit9CisKK0ZJTEVTXyR7UE59ID0gIi8iCisKK0VYUE9SVF9GVU5DVElPTlMgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2JpbmNvbmZpZy1kaXNhYmxlZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMmE2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYmluY29uZmlnLWRpc2FibGVkLmJiY2xhc3MKQEAgLTAsMCArMSwyOSBAQAorIworIyBDbGFzcyB0byBkaXNhYmxlIGJpbmNvbmZpZyBmaWxlcyBpbnN0ZWFkIG9mIGluc3RhbGxpbmcgdGhlbQorIworCisjIFRoZSBsaXN0IG9mIHNjcmlwdHMgd2hpY2ggc2hvdWxkIGJlIGRpc2FibGVkLgorQklOQ09ORklHID89ICIiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9LyotY29uZmlnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJZm9yIHggaW4gJHtCSU5DT05GSUd9OyBkbworCQkjIE1ha2UgdGhlIGRpc2FibGVkIHNjcmlwdCBlbWl0IGludmFsaWQgcGFyYW1ldGVycyBmb3IgdGhvc2UgY29uZmlndXJlCisJCSMgc2NyaXB0cyB3aGljaCBjYWxsIGl0IHdpdGhvdXQgY2hlY2tpbmcgdGhlIHJldHVybiBjb2RlLgorCQllY2hvICIjIS9iaW4vc2giID4gJHtEfSR4CisJCWVjaG8gImVjaG8gJ0VSUk9SOiAkeCBzaG91bGQgbm90IGJlIHVzZWQsIHVzZSBhbiBhbHRlcm5hdGl2ZSBzdWNoIGFzIHBrZy1jb25maWcnID4mMiIgPj4gJHtEfSR4CisJCWVjaG8gImVjaG8gJy0tc2hvdWxkLW5vdC1oYXZlLXVzZWQtJHgnIiA+PiAke0R9JHgKKwkJZWNobyAiZXhpdCAxIiA+PiAke0R9JHgKKwlkb25lCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYmluY29uZmlnX2Rpc2FibGVkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYmluY29uZmlnX2Rpc2FibGVkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZm9yIHggaW4gJHtCSU5DT05GSUd9OyBkbworCQljb25maWduYW1lPWBiYXNlbmFtZSAkeGAKKwkJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJCWluc3RhbGwgJHtEfSR4ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmluY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjNDE3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9iaW5jb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDYzIEBACitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS8qLWNvbmZpZyIKKyAKKyMgVGhlIG5hbWVzcGFjZXMgY2FuIGNsYXNoIGhlcmUgaGVuY2UgdGhlIHR3byBzdGVwIHJlcGxhY2UKK2RlZiBnZXRfYmluY29uZmlnX21hbmdsZShkKToKKyAgICBzID0gIi1lICcnIgorICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgb3B0aW9uYWxfcXVvdGUgPSByIlwoXCJcP1wpIgorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtiYXNlX2xpYmRpcn06PVxcMU9FQkFTRUxJQkRJUjo7JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtsaWJkaXJ9Oj1cXDFPRUxJQkRJUjo7JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtpbmNsdWRlZGlyfTo9XFwxT0VJTkNESVI6OyciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOj0lcyR7ZGF0YWRpcn06PVxcMU9FREFUQURJUjonIiAlIG9wdGlvbmFsX3F1b3RlCisgICAgICAgIHMgKz0gIiAtZSAnczo9JXMke3ByZWZpeH0vOj1cXDFPRVBSRUZJWC86JyIgJSBvcHRpb25hbF9xdW90ZQorICAgICAgICBzICs9ICIgLWUgJ3M6PSVzJHtleGVjX3ByZWZpeH0vOj1cXDFPRUVYRUNQUkVGSVgvOiciICUgb3B0aW9uYWxfcXVvdGUKKyAgICAgICAgcyArPSAiIC1lICdzOi1MJHtsaWJkaXJ9Oi1MT0VMSUJESVI6OyciCisgICAgICAgIHMgKz0gIiAtZSAnczotSSR7aW5jbHVkZWRpcn06LUlPRUlOQ0RJUjo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FQkFTRUxJQkRJUjoke1NUQUdJTkdfQkFTRUxJQkRJUn06OyciCisgICAgICAgIHMgKz0gIiAtZSAnczpPRUxJQkRJUjoke1NUQUdJTkdfTElCRElSfTo7JyIKKyAgICAgICAgcyArPSAiIC1lICdzOk9FSU5DRElSOiR7U1RBR0lOR19JTkNESVJ9OjsnIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VEQVRBRElSOiR7U1RBR0lOR19EQVRBRElSfTonIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VQUkVGSVg6JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fTonIgorICAgICAgICBzICs9ICIgLWUgJ3M6T0VFWEVDUFJFRklYOiR7U1RBR0lOR19ESVJfSE9TVH0ke2V4ZWNfcHJlZml4fTonIgorICAgICAgICBzICs9ICIgLWUgJ3M6LUkke1dPUktESVJ9Oi1JJHtTVEFHSU5HX0lOQ0RJUn06JyIKKyAgICAgICAgcyArPSAiIC1lICdzOi1MJHtXT1JLRElSfTotTCR7U1RBR0lOR19MSUJESVJ9OiciCisgICAgICAgIGlmIGJiLmRhdGEuZ2V0VmFyKCJPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFIiwgZCk6CisgICAgICAgICAgICBzICs9IGJiLmRhdGEuZ2V0VmFyKCJPRV9CSU5DT05GSUdfRVhUUkFfTUFOR0xFIiwgZCkKKworICAgIHJldHVybiBzCisKK0JJTkNPTkZJR19HTE9CID89ICIqLWNvbmZpZyIKKworUEFDS0FHRV9QUkVQUk9DRVNTX0ZVTkNTICs9ICJiaW5jb25maWdfcGFja2FnZV9wcmVwcm9jZXNzIgorCitiaW5jb25maWdfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwlmb3IgY29uZmlnIGluIGBmaW5kICR7UEtHRH0gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2A7IGRvCisJCXNlZCAtaSBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfQkFTRUxJQkRJUn06JHtiYXNlX2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19MSUJESVJ9OiR7bGliZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0lOQ0RJUn06JHtpbmNsdWRlZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RBVEFESVJ9OiR7ZGF0YWRpcn06JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9OiR7cHJlZml4fTonIFwKKyAgICAgICAgICAgICAgICAgICAgJGNvbmZpZworCWRvbmUKKwlmb3IgbGFmaWxlIGluIGBmaW5kICR7UEtHRH0gLW5hbWUgIioubGEiYCA7IGRvCisJCXNlZCAtaSBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfQkFTRUxJQkRJUn06JHtiYXNlX2xpYmRpcn06ZzsnIFwKKwkJICAgIC1lICdzOiR7U1RBR0lOR19MSUJESVJ9OiR7bGliZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0lOQ0RJUn06JHtpbmNsdWRlZGlyfTpnOycgXAorCQkgICAgLWUgJ3M6JHtTVEFHSU5HX0RBVEFESVJ9OiR7ZGF0YWRpcn06JyBcCisJCSAgICAtZSAnczoke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9OiR7cHJlZml4fTonIFwKKwkJICAgICRsYWZpbGUKKwlkb25lCSAgICAKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJiaW5jb25maWdfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitiaW5jb25maWdfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlmb3IgY29uZmlnIGluIGBmaW5kICR7U30gLW5hbWUgJyR7QklOQ09ORklHX0dMT0J9J2AgYGZpbmQgJHtCfSAtbmFtZSAnJHtCSU5DT05GSUdfR0xPQn0nYDsgZG8KKwkJY29uZmlnbmFtZT1gYmFzZW5hbWUgJGNvbmZpZ2AKKwkJaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9CisJCXNlZCAke0BnZXRfYmluY29uZmlnX21hbmdsZShkKX0gJGNvbmZpZyA+ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vJGNvbmZpZ25hbWUKKwkJY2htb2QgdSt4ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vJGNvbmZpZ25hbWUKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvYmxhY2tsaXN0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxNDFhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ibGFja2xpc3QuYmJjbGFzcwpAQCAtMCwwICsxLDQ1IEBACisjIGFub255bW91cyBzdXBwb3J0IGNsYXNzIGZyb20gb3JpZ2luYWxseSBmcm9tIGFuZ3N0cm9tCisjIAorIyBUbyB1c2UgdGhlIGJsYWNrbGlzdCwgYSBkaXN0cmlidXRpb24gc2hvdWxkIGluY2x1ZGUgdGhpcworIyBjbGFzcyBpbiB0aGUgSU5IRVJJVF9ESVNUUk8KKyMKKyMgTm8gbG9uZ2VyIHVzZSBBTkdTVFJPTV9CTEFDS0xJU1QsIGluc3RlYWQgdXNlIGEgdGFibGUgb2YKKyMgcmVjaXBlcyBpbiBQTkJMQUNLTElTVAorIworIyBGZWF0dXJlczoKKyMKKyMgKiBUbyBhZGQgYSBwYWNrYWdlIHRvIHRoZSBibGFja2xpc3QsIHNldDoKKyMgICBQTkJMQUNLTElTVFtwbl0gPSAibWVzc2FnZSIKKyMKKworIyBDb3BlIHdpdGggUE5CTEFDS0xJU1QgZmxhZ3MgZm9yIG11bHRpbGliIGNhc2UKK2FkZGhhbmRsZXIgYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcgorYmxhY2tsaXN0X211bHRpbGliX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCIKK3B5dGhvbiBibGFja2xpc3RfbXVsdGlsaWJfZXZlbnRoYW5kbGVyKCkgeworICAgIG11bHRpbGlicyA9IGUuZGF0YS5nZXRWYXIoJ01VTFRJTElCUycsIFRydWUpCisgICAgaWYgbm90IG11bHRpbGliczoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIHRoaXMgYmxvY2sgaGFzIGJlZW4gY29waWVkIGZyb20gYmFzZS5iYmNsYXNzIHNvIGtlZXAgaXQgaW4gc3luYworICAgIHByZWZpeGVzID0gW10KKyAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICBlZXh0ID0gZXh0LnNwbGl0KCc6JykKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgcHJlZml4ZXMuYXBwZW5kKGVleHRbMV0pCisKKyAgICBibGFja2xpc3RzID0gZS5kYXRhLmdldFZhckZsYWdzKCdQTkJMQUNLTElTVCcpIG9yIHt9CisgICAgZm9yIHBrZywgcmVhc29uIGluIGJsYWNrbGlzdHMuaXRlbXMoKToKKyAgICAgICAgaWYgcGtnLmVuZHN3aXRoKCgiLW5hdGl2ZSIsICItY3Jvc3NzZGsiKSkgb3IgcGtnLnN0YXJ0c3dpdGgoKCJuYXRpdmVzZGstIiwgInZpcnR1YWwvbmF0aXZlc2RrLSIpKSBvciAnY3Jvc3MtY2FuYWRpYW4nIGluIHBrZzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgbmV3cGtnID0gcCArICItIiArIHBrZworICAgICAgICAgICAgaWYgbm90IGUuZGF0YS5nZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIG5ld3BrZywgVHJ1ZSk6CisgICAgICAgICAgICAgICAgZS5kYXRhLnNldFZhckZsYWcoJ1BOQkxBQ0tMSVNUJywgbmV3cGtnLCByZWFzb24pCit9CisKK3B5dGhvbiAoKSB7CisgICAgYmxhY2tsaXN0ID0gZC5nZXRWYXJGbGFnKCdQTkJMQUNLTElTVCcsIGQuZ2V0VmFyKCdQTicsIFRydWUpLCBUcnVlKQorCisgICAgaWYgYmxhY2tsaXN0OgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiUmVjaXBlIGlzIGJsYWNrbGlzdGVkOiAlcyIgJSAoYmxhY2tsaXN0KSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ibHVldG9vdGguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhiNGFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2JsdWV0b290aC5iYmNsYXNzCkBAIC0wLDAgKzEsMTQgQEAKKyMgQXZvaWQgY29kZSBkdXBsaWNhdGlvbiBpbiBibHVldG9vdGgtZGVwZW5kZW50IHJlY2lwZXMuCisKKyMgRGVmaW5lIGEgdmFyaWFibGUgdGhhdCBleHBhbmRzIHRvIHRoZSByZWNpcGUgKHBhY2thZ2UpIHByb3ZpZGluZyBjb3JlCisjIGJsdWV0b290aCBzdXBwb3J0IG9uIHRoZSBwbGF0Zm9ybToKKyMgIiIgaWYgYmx1ZXRvb3RoIGlzIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMKKyMgZWxzZSAiYmx1ZXo1IiBpZiBibHVlejUgaXMgaW4gRElTVFJPX0ZFQVRVUkVTCisjIGVsc2UgImJsdWV6NCIKKworIyBVc2UgdGhpcyB3aXRoOgorIyAgaW5oZXJpdCBibHVldG9vdGgKKyMgIFBBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICcke0JMVUVafScsICcnLCBkKX0KKyMgIFBBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVlejQsLS1kaXNhYmxlLWJsdWV6NCxibHVlejQiCisKK0JMVUVaID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXo1JywgJ2JsdWV6NScsICdibHVlejQnLCBkKSwgJycsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ib290LWRpcmVjdGRpc2suYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDBlMjFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Jvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCkBAIC0wLDAgKzEsMTk0IEBACisjIGJvb3QtZGlyZWN0ZGlzay5iYmNsYXNzCisjIChsb29zbHkgYmFzZWQgb2ZmIGJvb3RpbWcuYmJjbGFzcyBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4pCisjCisjIENyZWF0ZSBhbiBpbWFnZSB3aGljaCBjYW4gYmUgcGxhY2VkIGRpcmVjdGx5IG9udG8gYSBoYXJkZGlzayB1c2luZyBkZCBhbmQgdGhlbgorIyBib290ZWQuCisjCisjIFRoaXMgdXNlcyBzeXNsaW51eC4gZXh0bGludXggd291bGQgaGF2ZSBiZWVuIG5pY2UgYnV0IHJlcXVpcmVkIHRoZSBleHQyLzMgCisjIHBhcnRpdGlvbiB0byBiZSBtb3VudGVkLiBncnViIHJlcXVpcmVzIHRvIHJ1biBpdHNlbGYgYXMgcGFydCBvZiB0aGUgaW5zdGFsbCAKKyMgcHJvY2Vzcy4KKyMKKyMgVGhlIGVuZCByZXN1bHQgaXMgYSA1MTIgYm9vdCBzZWN0b3IgcG9wdWxhdGVkIHdpdGggYW4gTUJSIGFuZCBwYXJ0aXRpb24gdGFibGUKKyMgZm9sbG93ZWQgYnkgYW4gbXNkb3MgZmF0MTYgcGFydGl0aW9uIGNvbnRhaW5pbmcgc3lzbGludXggYW5kIGEgbGludXgga2VybmVsCisjIGNvbXBsZXRlZCBieSB0aGUgZXh0Mi8zIHJvb3Rmcy4KKyMKKyMgV2UgaGF2ZSB0byBwdXNoIHRoZSBtc2RvcyBwYXJpdGlvbiB0YWJsZSBzaXplID4gMTZNQiBzbyBmYXQgMTYgaXMgdXNlZCBhcyBwYXJ0ZWQKKyMgd29uJ3QgdG91Y2ggZmF0MTIgcGFydGl0aW9ucy4KKworIyBFeHRlcm5hbCB2YXJpYWJsZXMgbmVlZGVkCisKKyMgJHtST09URlN9IC0gdGhlIHJvb3RmcyBpbWFnZSB0byBpbmNvcnBvcmF0ZQorCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiZG9zZnN0b29scy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlydHVhbC9rZXJuZWw6ZG9fZGVwbG95IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eDpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGVkLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgIgorCitQQUNLQUdFUyA9ICIgIgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK0JPT1RERF9WT0xVTUVfSUQgICA/PSAiYm9vdCIKK0JPT1RERF9FWFRSQV9TUEFDRSA/PSAiMTYzODQiCisKK0VGSSA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiMSIsICIwIiwgZCl9IgorRUZJX1BST1ZJREVSID89ICJncnViLWVmaSIKK0VGSV9DTEFTUyA9ICIke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJlZmkiLCAiJHtFRklfUFJPVklERVJ9IiwgIiIsIGQpfSIKKworIyBJbmNsdWRlIGxlZ2FjeSBib290IGlmIE1BQ0hJTkVfRkVBVFVSRVMgaW5jbHVkZXMgInBjYmlvcyIgb3IgaWYgaXQgZG9lcyBub3QKKyMgY29udGFpbiAiZWZpIi4gVGhpcyB3YXkgbGVnYWN5IGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0IGlmIG5laXRoZXIgaXMKKyMgc3BlY2lmaWVkLCBtYWludGFpbmluZyB0aGUgb3JpZ2luYWwgYmVoYXZpb3IuCitkZWYgcGNiaW9zKGQpOgorICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjYmlvcyIsICIxIiwgIjAiLCBkKQorICAgIGlmIHBjYmlvcyA9PSAiMCI6CisgICAgICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIwIiwgIjEiLCBkKQorICAgIHJldHVybiBwY2Jpb3MKKworZGVmIHBjYmlvc19jbGFzcyhkKToKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICByZXR1cm4gInN5c2xpbnV4IgorICAgIHJldHVybiAiIgorCitQQ0JJT1MgPSAiJHtAcGNiaW9zKGQpfSIKK1BDQklPU19DTEFTUyA9ICIke0BwY2Jpb3NfY2xhc3MoZCl9IgorCitpbmhlcml0ICR7UENCSU9TX0NMQVNTfQoraW5oZXJpdCAke0VGSV9DTEFTU30KKworIyBHZXQgdGhlIGJ1aWxkX3N5c2xpbnV4X2NmZygpIGZ1bmN0aW9uIGZyb20gdGhlIHN5c2xpbnV4IGNsYXNzCisKK0FVVE9fU1lTTElOVVhDRkcgPSAiMSIKK0RJU0tfU0lHTkFUVVJFID89ICIke0RJU0tfU0lHTkFUVVJFX0dFTkVSQVRFRH0iCitTWVNMSU5VWF9ST09UID89ICJyb290PS9kZXYvc2RhMiIKK1NZU0xJTlVYX1RJTUVPVVQgPz0gIjEwIgorCitJU19WTSA9ICcke0BiYi51dGlscy5jb250YWluc19hbnkoIklNQUdFX0ZTVFlQRVMiLCBbInZtZGsiLCAidmRpIiwgInFjb3cyIl0sICJ0cnVlIiwgImZhbHNlIiwgZCl9JworCitib290X2RpcmVjdF9wb3B1bGF0ZSgpIHsKKwlkZXN0PSQxCisJaW5zdGFsbCAtZCAkZGVzdAorCisJIyBJbnN0YWxsIGJ6SW1hZ2UsIGluaXRyZCwgYW5kIHJvb3Rmcy5pbWcgaW4gREVTVCBmb3IgYWxsIGxvYWRlcnMgdG8gdXNlLgorCWlmIFsgLWUgJHtERVBMT1lfRElSX0lNQUdFfS9iekltYWdlIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vYnpJbWFnZSAkZGVzdC92bWxpbnV6CisJZmkKKworCSMgaW5pdHJkIGlzIG1hZGUgb2YgY29uY2F0ZW5hdGlvbiBvZiBtdWx0aXBsZSBmaWxlc3lzdGVtIGltYWdlcworCWlmIFsgLW4gIiR7SU5JVFJEfSIgXTsgdGhlbgorCQlybSAtZiAkZGVzdC9pbml0cmQKKwkJZm9yIGZzIGluICR7SU5JVFJEfQorCQlkbworCQkJaWYgWyAtcyAiJHtmc30iIF07IHRoZW4KKwkJCQljYXQgJHtmc30gPj4gJGRlc3QvaW5pdHJkCisJCQllbHNlCisJCQkJYmJmYXRhbCAiJHtmc30gaXMgaW52YWxpZC4gaW5pdHJkIGltYWdlIGNyZWF0aW9uIGZhaWxlZC4iCisJCQlmaQorCQlkb25lCisJCWNobW9kIDA2NDQgJGRlc3QvaW5pdHJkCisJZmkKK30KKworYnVpbGRfYm9vdF9kZCgpIHsKKwlIRERESVI9IiR7U30vaGRkL2Jvb3QiCisJSERESU1HPSIke1N9L2hkZC5pbWFnZSIKKwlJTUFHRT0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0CisKKwlib290X2RpcmVjdF9wb3B1bGF0ZSAkSERERElSCisKKwlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJc3lzbGludXhfaGRkaW1nX3BvcHVsYXRlICRIRERESVIKKwlmaQorCWlmIFsgIiR7RUZJfSIgPSAiMSIgXTsgdGhlbgorCQllZmlfaGRkaW1nX3BvcHVsYXRlICRIRERESVIKKwlmaQorCisJaWYgWyAiJHtJU19WTX0iID0gInRydWUiIF07IHRoZW4KKwkJaWYgWyAieCR7QVVUT19TWVNMSU5VWE1FTlV9IiA9ICJ4MSIgXSA7IHRoZW4KKwkJCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9L3Vzci9zaGFyZS9zeXNsaW51eC92ZXNhbWVudS5jMzIgJEhERERJUi8ke1NZU0xJTlVYRElSfS8KKwkJCWlmIFsgIngke1NZU0xJTlVYX1NQTEFTSH0iICE9ICJ4IiBdIDsgdGhlbgorCQkJCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYX1NQTEFTSH0gJEhERERJUi8ke1NZU0xJTlVYRElSfS9zcGxhc2gubHNzCisJCQlmaQorCQlmaQorCWZpCisKKwlCTE9DS1M9YGR1IC1ia3MgJEhERERJUiB8IGN1dCAtZiAxYAorCUJMT0NLUz1gZXhwciAkQkxPQ0tTICsgJHtCT09URERfRVhUUkFfU1BBQ0V9YAorCisJIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKwkjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisJIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworCSMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorCUJMT0NLUz0kKGV4cHIgJEJMT0NLUyArICQoZXhwciAxNiAtICQoZXhwciAkQkxPQ0tTICUgMTYpKSkKKworCW1rZG9zZnMgLW4gJHtCT09URERfVk9MVU1FX0lEfSAtUyA1MTIgLUMgJEhERElNRyAkQkxPQ0tTIAorCW1jb3B5IC1pICRIRERJTUcgLXMgJEhERERJUi8qIDo6LworCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCXN5c2xpbnV4X2hkZGRpcmVjdF9pbnN0YWxsICRIRERJTUcKKwlmaQkKKwljaG1vZCA2NDQgJEhERElNRworCisJUk9PVEZTQkxPQ0tTPWBkdSAtTGJrcyAke1JPT1RGU30gfCBjdXQgLWYgMWAKKwlUT1RBTFNJWkU9YGV4cHIgJEJMT0NLUyArICRST09URlNCTE9DS1NgCisJRU5EMT1gZXhwciAkQkxPQ0tTIFwqIDEwMjRgCisJRU5EMj1gZXhwciAkRU5EMSArIDUxMmAKKwlFTkQzPWBleHByIFwoICRST09URlNCTE9DS1MgXCogMTAyNCBcKSArICRFTkQxYAorCisJZWNobyAkUk9PVEZTQkxPQ0tTICRUT1RBTFNJWkUgJEVORDEgJEVORDIgJEVORDMKKwlybSAtcmYgJElNQUdFCisJZGQgaWY9L2Rldi96ZXJvIG9mPSRJTUFHRSBicz0xMDI0IHNlZWs9JFRPVEFMU0laRSBjb3VudD0xCisKKwlwYXJ0ZWQgJElNQUdFIG1rbGFiZWwgbXNkb3MKKwlwYXJ0ZWQgJElNQUdFIG1rcGFydCBwcmltYXJ5IGZhdDE2IDAgJHtFTkQxfUIKKwlwYXJ0ZWQgJElNQUdFIHVuaXQgQiBta3BhcnQgcHJpbWFyeSBleHQyICR7RU5EMn1CICR7RU5EM31CCisJcGFydGVkICRJTUFHRSBzZXQgMSBib290IG9uIAorCisJcGFydGVkICRJTUFHRSBwcmludAorCisJYXdrICJCRUdJTiB7IHByaW50ZiBcIiQoZWNobyAke0RJU0tfU0lHTkFUVVJFfSB8IGZvbGQgLXcgMiB8IHRhYyB8IHBhc3RlIC1zZCAnJyB8IHNlZCAncy9cKC4uXCkvXFx4Ji9nJylcIiB9IiB8IFwKKwkJZGQgb2Y9JElNQUdFIGJzPTEgc2Vlaz00NDAgY29udj1ub3RydW5jCisKKwlPRkZTRVQ9YGV4cHIgJEVORDIgLyA1MTJgCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdOyB0aGVuCisJCWRkIGlmPSR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9tYnIuYmluIG9mPSRJTUFHRSBjb252PW5vdHJ1bmMKKwlmaQorCisJZGQgaWY9JEhERElNRyBvZj0kSU1BR0UgY29udj1ub3RydW5jIHNlZWs9MSBicz01MTIKKwlkZCBpZj0ke1JPT1RGU30gb2Y9JElNQUdFIGNvbnY9bm90cnVuYyBzZWVrPSRPRkZTRVQgYnM9NTEyCisKKwljZCAke0RFUExPWV9ESVJfSU1BR0V9CisJcm0gLWYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkZGlyZWN0CisJbG4gLXMgJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkZGlyZWN0Cit9IAorCitweXRob24gZG9fYm9vdGRpcmVjdGRpc2soKSB7CisgICAgdmFsaWRhdGVfZGlza19zaWduYXR1cmUoZCkKKyAgICBpZiBkLmdldFZhcigiUENCSU9TIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX3N5c2xpbnV4X2NmZycsIGQpCisgICAgaWYgZC5nZXRWYXIoIkVGSSIsIFRydWUpID09ICIxIjoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdidWlsZF9lZmlfY2ZnJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2Jvb3RfZGQnLCBkKQorfQorCitkZWYgZ2VuZXJhdGVfZGlza19zaWduYXR1cmUoKToKKyAgICBpbXBvcnQgdXVpZAorCisgICAgc2lnbmF0dXJlID0gc3RyKHV1aWQudXVpZDQoKSlbOjhdCisKKyAgICBpZiBzaWduYXR1cmUgIT0gJzAwMDAwMDAwJzoKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnZmZmZmZmZmYnCisKK2RlZiB2YWxpZGF0ZV9kaXNrX3NpZ25hdHVyZShkKToKKyAgICBpbXBvcnQgcmUKKworICAgIGRpc2tfc2lnbmF0dXJlID0gZC5nZXRWYXIoIkRJU0tfU0lHTkFUVVJFIiwgVHJ1ZSkKKworICAgIGlmIG5vdCByZS5tYXRjaChyJ15bMC05YS1mQS1GXXs4fSQnLCBkaXNrX3NpZ25hdHVyZSk6CisgICAgICAgIGJiLmZhdGFsKCJESVNLX1NJR05BVFVSRSAnJXMnIG11c3QgYmUgYW4gOCBkaWdpdCBoZXggc3RyaW5nIiAlIGRpc2tfc2lnbmF0dXJlKQorCitESVNLX1NJR05BVFVSRV9HRU5FUkFURUQgOj0gIiR7QGdlbmVyYXRlX2Rpc2tfc2lnbmF0dXJlKCl9IgorCithZGR0YXNrIGJvb3RkaXJlY3RkaXNrIGJlZm9yZSBkb19idWlsZApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Jvb3RpbWcuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ib290aW1nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5ZDBiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ib290aW1nLmJiY2xhc3MKQEAgLTAsMCArMSwzMDMgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKKyMgQ3JlYXRlcyBhIGJvb3RhYmxlIGltYWdlIHVzaW5nIHN5c2xpbnV4LCB5b3VyIGtlcm5lbCBhbmQgYW4gb3B0aW9uYWwKKyMgaW5pdHJkCisKKyMKKyMgRW5kIHJlc3VsdCBpcyB0d28gdGhpbmdzOgorIworIyAxLiBBIC5oZGRpbWcgZmlsZSB3aGljaCBpcyBhbiBtc2RvcyBmaWxlc3lzdGVtIGNvbnRhaW5pbmcgc3lzbGludXgsIGEga2VybmVsLAorIyBhbiBpbml0cmQgYW5kIGEgcm9vdGZzIGltYWdlLiBUaGVzZSBjYW4gYmUgd3JpdHRlbiB0byBoYXJkZGlza3MgZGlyZWN0bHkgYW5kCisjIGFsc28gYm9vdGVkIG9uIFVTQiBmbGFzaCBkaXNrcyAod3JpdGUgdGhlbSB0aGVyZSB3aXRoIGRkKS4KKyMKKyMgMi4gQSBDRCAuaXNvIGltYWdlCisKKyMgQm9vdCBwcm9jZXNzIGlzIHRoYXQgdGhlIGluaXRyZCB3aWxsIGJvb3QgYW5kIHByb2Nlc3Mgd2hpY2ggbGFiZWwgd2FzIHNlbGVjdGVkCisjIGluIHN5c2xpbnV4LiBBY3Rpb25zIGJhc2VkIG9uIHRoZSBsYWJlbCBhcmUgdGhlbiBwZXJmb3JtZWQgKGUuZy4gaW5zdGFsbGluZyB0bworIyBhbiBoZGQpCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzIChhbHNvIHVzZWQgYnkgc3lzbGludXguYmJjbGFzcykKKyMgJHtJTklUUkR9IC0gaW5kaWNhdGVzIGEgbGlzdCBvZiBmaWxlc3lzdGVtIGltYWdlcyB0byBjb25jYXRlbmF0ZSBhbmQgdXNlIGFzIGFuIGluaXRyZCAob3B0aW9uYWwpCisjICR7Q09NUFJFU1NJU099IC0gVHJhbnNwYXJlbnQgY29tcHJlc3MgSVNPLCByZWR1Y2Ugc2l6ZSB+NDAlIGlmIHNldCB0byAxCisjICR7Tk9JU099ICAtIHNraXAgYnVpbGRpbmcgdGhlIElTTyBpbWFnZSBpZiBzZXQgdG8gMQorIyAke05PSEREfSAgLSBza2lwIGJ1aWxkaW5nIHRoZSBIREQgaW1hZ2UgaWYgc2V0IHRvIDEKKyMgJHtIRERJTUdfSUR9IC0gRkFUIGltYWdlIHZvbHVtZS1pZAorIyAke1JPT1RGU30gLSBpbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAob3B0aW9uYWwpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gImRvc2ZzdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICAgICAgICAgICAgICAgICAgICAgbXRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNkcnRvb2xzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwva2VybmVsOmRvX2RlcGxveSBcCisgICAgICAgICAgICAgICAgICAgICAgICAke0BvZS51dGlscy5pZmVsc2UoZC5nZXRWYXIoJ0NPTVBSRVNTSVNPJywgRmFsc2UpLCd6aXNvZnMtdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnLCcnKX0iCisKK1BBQ0tBR0VTID0gIiAiCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworSERERElSID0gIiR7U30vaGRkaW1nIgorSVNPRElSID0gIiR7U30vaXNvIgorRUZJSU1HRElSID0gIiR7U30vZWZpX2ltZyIKK0NPTVBBQ1RfSVNPRElSID0gIiR7U30vaXNvLnoiCitDT01QUkVTU0lTTyA/PSAiMCIKKworQk9PVElNR19WT0xVTUVfSUQgICA/PSAiYm9vdCIKK0JPT1RJTUdfRVhUUkFfU1BBQ0UgPz0gIjUxMiIKKworRUZJID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIxIiwgIjAiLCBkKX0iCitFRklfUFJPVklERVIgPz0gImdydWItZWZpIgorRUZJX0NMQVNTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIke0VGSV9QUk9WSURFUn0iLCAiIiwgZCl9IgorCitLRVJORUxfSU1BR0VUWVBFID8/PSAiYnpJbWFnZSIKKworIyBJbmNsdWRlIGxlZ2FjeSBib290IGlmIE1BQ0hJTkVfRkVBVFVSRVMgaW5jbHVkZXMgInBjYmlvcyIgb3IgaWYgaXQgZG9lcyBub3QKKyMgY29udGFpbiAiZWZpIi4gVGhpcyB3YXkgbGVnYWN5IGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0IGlmIG5laXRoZXIgaXMKKyMgc3BlY2lmaWVkLCBtYWludGFpbmluZyB0aGUgb3JpZ2luYWwgYmVoYXZpb3IuCitkZWYgcGNiaW9zKGQpOgorICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInBjYmlvcyIsICIxIiwgIjAiLCBkKQorICAgIGlmIHBjYmlvcyA9PSAiMCI6CisgICAgICAgIHBjYmlvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImVmaSIsICIwIiwgIjEiLCBkKQorICAgIHJldHVybiBwY2Jpb3MKKworUENCSU9TID0gIiR7QHBjYmlvcyhkKX0iCisKKyMgVGhlIHN5c2xpbnV4IGlzIHJlcXVpcmVkIGZvciB0aGUgaXNvaHlicmlkIGNvbW1hbmQgYW5kIGJvb3QgY2F0YWxvZworaW5oZXJpdCBzeXNsaW51eAoraW5oZXJpdCAke0VGSV9DTEFTU30KKworcG9wdWxhdGUoKSB7CisJREVTVD0kMQorCWluc3RhbGwgLWQgJHtERVNUfQorCisJIyBJbnN0YWxsIGtlcm5lbCwgaW5pdHJkLCBhbmQgcm9vdGZzLmltZyBpbiBERVNUIGZvciBhbGwgbG9hZGVycyB0byB1c2UuCisJaW5zdGFsbCAtbSAwNjQ0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtLRVJORUxfSU1BR0VUWVBFfSAke0RFU1R9L3ZtbGludXoKKwkKKwkjIGluaXRyZCBpcyBtYWRlIG9mIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUgZmlsZXN5c3RlbSBpbWFnZXMKKwlpZiBbIC1uICIke0lOSVRSRH0iIF07IHRoZW4KKwkJcm0gLWYgJHtERVNUfS9pbml0cmQKKwkJZm9yIGZzIGluICR7SU5JVFJEfQorCQlkbworCQkJaWYgWyAtcyAiJHtmc30iIF07IHRoZW4KKwkJCQljYXQgJHtmc30gPj4gJHtERVNUfS9pbml0cmQKKwkJCWVsc2UKKwkJCQliYmZhdGFsICIke2ZzfSBpcyBpbnZhbGlkLiBpbml0cmQgaW1hZ2UgY3JlYXRpb24gZmFpbGVkLiIKKwkJCWZpCisJCWRvbmUKKwkJY2htb2QgMDY0NCAke0RFU1R9L2luaXRyZAorCWZpCisKKwlpZiBbIC1uICIke1JPT1RGU30iIF0gJiYgWyAtcyAiJHtST09URlN9IiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCAke1JPT1RGU30gJHtERVNUfS9yb290ZnMuaW1nCisJZmkKKworfQorCitidWlsZF9pc28oKSB7CisJIyBPbmx5IGNyZWF0ZSBhbiBJU08gaWYgd2UgaGF2ZSBhbiBJTklUUkQgYW5kIE5PSVNPIHdhcyBub3Qgc2V0CisJaWYgWyAteiAiJHtJTklUUkR9IiBdIHx8IFsgIiR7Tk9JU099IiA9ICIxIiBdOyB0aGVuCisJCWJibm90ZSAiSVNPIGltYWdlIHdpbGwgbm90IGJlIGNyZWF0ZWQuIgorCQlyZXR1cm4KKwlmaQorCSMgJHtJTklUUkR9IGlzIGEgbGlzdCBvZiBtdWx0aXBsZSBmaWxlc3lzdGVtIGltYWdlcworCWZvciBmcyBpbiAke0lOSVRSRH0KKwlkbworCQlpZiBbICEgLXMgIiR7ZnN9IiBdOyB0aGVuCisJCQliYm5vdGUgIklTTyBpbWFnZSB3aWxsIG5vdCBiZSBjcmVhdGVkLiAke2ZzfSBpcyBpbnZhbGlkLiIKKwkJCXJldHVybgorCQlmaQorCWRvbmUKKworCisJcG9wdWxhdGUgJHtJU09ESVJ9CisKKwlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJc3lzbGludXhfaXNvX3BvcHVsYXRlICR7SVNPRElSfQorCWZpCisJaWYgWyAiJHtFRkl9IiA9ICIxIiBdOyB0aGVuCisJCWVmaV9pc29fcG9wdWxhdGUgJHtJU09ESVJ9CisJCWJ1aWxkX2ZhdF9pbWcgJHtFRklJTUdESVJ9ICR7SVNPRElSfS9lZmkuaW1nCisJZmkKKworCSMgRUZJIG9ubHkKKwlpZiBbICIke1BDQklPU30iICE9ICIxIiBdICYmIFsgIiR7RUZJfSIgPSAiMSIgXSA7IHRoZW4KKwkJIyBXb3JrIGFyb3VuZCBidWcgaW4gaXNvaHlicmlkIHdoZXJlIGl0IHJlcXVpcmVzIGlzb2xpbnV4LmJpbgorCQkjIEluIHRoZSBib290IGNhdGFsb2csIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdCB1c2VkCisJCW1rZGlyIC1wICR7SVNPRElSfS8ke0lTT0xJTlVYRElSfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2lzb2xpbnV4LmJpbiAke0lTT0RJUn0ke0lTT0xJTlVYRElSfQorCWZpCisKKwlpZiBbICIke0NPTVBSRVNTSVNPfSIgPSAiMSIgXSA7IHRoZW4KKwkJIyBjcmVhdGUgY29tcGFjdCBkaXJlY3RvcnksIGNvbXByZXNzIGlzbworCQlta2RpciAtcCAke0NPTVBBQ1RfSVNPRElSfQorCQlta3pmdHJlZSAteiA5IC1wIDQgLUYgJHtJU09ESVJ9L3Jvb3Rmcy5pbWcgJHtDT01QQUNUX0lTT0RJUn0vcm9vdGZzLmltZworCisJCSMgbW92ZSBjb21wYWN0IGlzbyB0byBpc28sIHRoZW4gcmVtb3ZlIGNvbXBhY3QgZGlyZWN0b3J5CisJCW12ICR7Q09NUEFDVF9JU09ESVJ9L3Jvb3Rmcy5pbWcgJHtJU09ESVJ9L3Jvb3Rmcy5pbWcKKwkJcm0gLVJmICR7Q09NUEFDVF9JU09ESVJ9CisJCW1raXNvZnNfY29tcHJlc3Nfb3B0cz0iLVIgLXogLUQgLWwiCisJZWxzZQorCQlta2lzb2ZzX2NvbXByZXNzX29wdHM9Ii1yIgorCWZpCisKKwkjIENoZWNrIHRoZSBzaXplIG9mICR7SVNPRElSfS9yb290ZnMuaW1nLCB1c2UgbWtpc29mcyAtaXNvLWxldmVsIDMKKwkjIHdoZW4gaXQgZXhjZWVkcyAzLjhHQiwgdGhlIHNwZWNpZmljYXRpb24gaXMgNEcgLSAxIGJ5dGVzLCB3ZSBuZWVkCisJIyBsZWF2ZSBhIGZldyBzcGFjZSBmb3Igb3RoZXIgZmlsZXMuCisJbWtpc29mc19pc29fbGV2ZWw9IiIKKworICAgICAgICBpZiBbIC1uICIke1JPT1RGU30iIF0gJiYgWyAtcyAiJHtST09URlN9IiBdOyB0aGVuCisJCXJvb3Rmc19pbWdfc2l6ZT1gc3RhdCAtYyAnJXMnICR7SVNPRElSfS9yb290ZnMuaW1nYAorCQkjIDQwODAyMTg5MzEgPSAzLjggKiAxMDI0ICogMTAyNCAqIDEwMjQKKwkJaWYgWyAkcm9vdGZzX2ltZ19zaXplIC1ndCA0MDgwMjE4OTMxIF07IHRoZW4KKwkJCWJibm90ZSAiJHtJU09ESVJ9L3Jvb3Rmcy5pbWcgZXhlY2VlZHMgMy44R0IsIHVzaW5nICctaXNvLWxldmVsIDMnIGZvciBta2lzb2ZzIgorCQkJbWtpc29mc19pc29fbGV2ZWw9Ii1pc28tbGV2ZWwgMyIKKwkJZmkKKwlmaQorCisJaWYgWyAiJHtQQ0JJT1N9IiA9ICIxIiBdICYmIFsgIiR7RUZJfSIgIT0gIjEiIF0gOyB0aGVuCisJCSMgUENCSU9TIG9ubHkgbWVkaWEKKwkJbWtpc29mcyAtViAke0JPT1RJTUdfVk9MVU1FX0lEfSBcCisJCSAgICAgICAgLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmlzbyBcCisJCQktYiAke0lTT19CT09USU1HfSAtYyAke0lTT19CT09UQ0FUfSBcCisJCQkkbWtpc29mc19jb21wcmVzc19vcHRzIFwKKwkJCSR7TUtJU09GU19PUFRJT05TfSAkbWtpc29mc19pc29fbGV2ZWwgJHtJU09ESVJ9CisJZWxzZQorCQkjIEVGSSBvbmx5IE9SIEVGSStQQ0JJT1MKKwkJbWtpc29mcyAtQSAke0JPT1RJTUdfVk9MVU1FX0lEfSAtViAke0JPT1RJTUdfVk9MVU1FX0lEfSBcCisJCSAgICAgICAgLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmlzbyBcCisJCQktYiAke0lTT19CT09USU1HfSAtYyAke0lTT19CT09UQ0FUfSBcCisJCQkkbWtpc29mc19jb21wcmVzc19vcHRzICR7TUtJU09GU19PUFRJT05TfSAkbWtpc29mc19pc29fbGV2ZWwgXAorCQkJLWVsdG9yaXRvLWFsdC1ib290IC1lbHRvcml0by1wbGF0Zm9ybSBlZmkgXAorCQkJLWIgZWZpLmltZyAtbm8tZW11bC1ib290IFwKKwkJCSR7SVNPRElSfQorCQlpc29oeWJyaWRfYXJncz0iLXUiCisJZmkKKworCWlzb2h5YnJpZCAkaXNvaHlicmlkX2FyZ3MgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmlzbworCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCXJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmlzbworCWxuIC1zICR7SU1BR0VfTkFNRX0uaXNvICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmlzbworfQorCitidWlsZF9mYXRfaW1nKCkgeworCUZBVFNPVVJDRURJUj0kMQorCUZBVElNRz0kMgorCisJIyBDYWxjdWxhdGUgdGhlIHNpemUgcmVxdWlyZWQgZm9yIHRoZSBmaW5hbCBpbWFnZSBpbmNsdWRpbmcgdGhlCisJIyBkYXRhIGFuZCBmaWxlc3lzdGVtIG92ZXJoZWFkLgorCSMgU2VjdG9yczogNTEyIGJ5dGVzCisJIyAgQmxvY2tzOiAxMDI0IGJ5dGVzCisKKwkjIERldGVybWluZSB0aGUgc2VjdG9yIGNvdW50IGp1c3QgZm9yIHRoZSBkYXRhCisJU0VDVE9SUz0kKGV4cHIgJChkdSAtLWFwcGFyZW50LXNpemUgLWtzICR7RkFUU09VUkNFRElSfSB8IGN1dCAtZiAxKSBcKiAyKQorCisJIyBBY2NvdW50IGZvciB0aGUgZmlsZXN5c3RlbSBvdmVyaGVhZC4gVGhpcyBpbmNsdWRlcyBkaXJlY3RvcnkKKwkjIGVudHJpZXMgaW4gdGhlIGNsdXN0ZXJzIGFzIHdlbGwgYXMgdGhlIEZBVCBpdHNlbGYuCisJIyBBc3N1bXB0aW9uczoKKwkjICAgRkFUMzIgKDEyIG9yIDE2IG1heSBiZSBzZWxlY3RlZCBieSBta2Rvc2ZzLCBidXQgdGhlIGV4dHJhCisJIyAgIHBhZGRpbmcgd2lsbCBiZSBtaW5pbWFsIG9uIHRob3NlIHNtYWxsZXIgaW1hZ2VzIGFuZCBub3QKKwkjICAgd29ydGggdGhlIGxvZ2ljIGhlcmUgdG8gY2FjbHVsYXRlIHRoZSBzbWFsbGVyIEZBVCBzaXplcykKKwkjICAgPCAxNiBlbnRyaWVzIHBlciBkaXJlY3RvcnkKKwkjICAgOC4zIGZpbGVuYW1lcyBvbmx5CisKKwkjIDMyIGJ5dGVzIHBlciBkaXIgZW50cnkKKwlESVJfQllURVM9JChleHByICQoZmluZCAke0ZBVFNPVVJDRURJUn0gfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDMyKQorCSMgMzIgYnl0ZXMgZm9yIGV2ZXJ5IGVuZC1vZi1kaXJlY3RvcnkgZGlyIGVudHJ5CisJRElSX0JZVEVTPSQoZXhwciAkRElSX0JZVEVTICsgJChleHByICQoZmluZCAke0ZBVFNPVVJDRURJUn0gLXR5cGUgZCB8IHRhaWwgLW4gKzIgfCB3YyAtbCkgXCogMzIpKQorCSMgNCBieXRlcyBwZXIgRkFUIGVudHJ5IHBlciBzZWN0b3Igb2YgZGF0YQorCUZBVF9CWVRFUz0kKGV4cHIgJFNFQ1RPUlMgXCogNCkKKwkjIDQgYnl0ZXMgcGVyIEZBVCBlbnRyeSBwZXIgZW5kLW9mLWNsdXN0ZXIgbGlzdAorCUZBVF9CWVRFUz0kKGV4cHIgJEZBVF9CWVRFUyArICQoZXhwciAkKGZpbmQgJHtGQVRTT1VSQ0VESVJ9IC10eXBlIGQgfCB0YWlsIC1uICsyIHwgd2MgLWwpIFwqIDQpKQorCisJIyBVc2UgYSBjZWlsaW5nIGZ1bmN0aW9uIHRvIGRldGVybWluZSBGUyBvdmVyaGVhZCBpbiBzZWN0b3JzCisJRElSX1NFQ1RPUlM9JChleHByICQoZXhwciAkRElSX0JZVEVTICsgNTExKSAvIDUxMikKKwkjIFRoZXJlIGFyZSB0d28gRkFUcyBvbiB0aGUgaW1hZ2UKKwlGQVRfU0VDVE9SUz0kKGV4cHIgJChleHByICQoZXhwciAkRkFUX0JZVEVTICsgNTExKSAvIDUxMikgXCogMikKKwlTRUNUT1JTPSQoZXhwciAkU0VDVE9SUyArICQoZXhwciAkRElSX1NFQ1RPUlMgKyAkRkFUX1NFQ1RPUlMpKQorCisJIyBEZXRlcm1pbmUgdGhlIGZpbmFsIHNpemUgaW4gYmxvY2tzIGFjY291bnRpbmcgZm9yIHNvbWUgcGFkZGluZworCUJMT0NLUz0kKGV4cHIgJChleHByICRTRUNUT1JTIC8gMikgKyAke0JPT1RJTUdfRVhUUkFfU1BBQ0V9KQorCisJIyBFbnN1cmUgdG90YWwgc2VjdG9ycyBpcyBhbiBpbnRlZ3JhbCBudW1iZXIgb2Ygc2VjdG9ycyBwZXIKKwkjIHRyYWNrIG9yIG1jb3B5IHdpbGwgY29tcGxhaW4uIFNlY3RvcnMgYXJlIDUxMiBieXRlcywgYW5kIHdlCisJIyBnZW5lcmF0ZSBpbWFnZXMgd2l0aCAzMiBzZWN0b3JzIHBlciB0cmFjay4gVGhpcyBjYWxjdWxhdGlvbiBpcworCSMgZG9uZSBpbiBibG9ja3MsIHRodXMgdGhlIG1vZCBieSAxNiBpbnN0ZWFkIG9mIDMyLgorCUJMT0NLUz0kKGV4cHIgJEJMT0NLUyArICQoZXhwciAxNiAtICQoZXhwciAkQkxPQ0tTICUgMTYpKSkKKworCSMgbWtkb3NmcyB3aWxsIHNvbWV0aW1lcyB1c2UgRkFUMTYgd2hlbiBpdCBpcyBub3QgYXBwcm9wcmlhdGUsCisJIyByZXN1bHRpbmcgaW4gYSBib290IGZhaWx1cmUgZnJvbSBTWVNMSU5VWC4gVXNlIEZBVDMyIGZvcgorCSMgaW1hZ2VzIGxhcmdlciB0aGFuIDUxMk1CLCBvdGhlcndpc2UgbGV0IG1rZG9zZnMgZGVjaWRlLgorCWlmIFsgJChleHByICRCTE9DS1MgLyAxMDI0KSAtZ3QgNTEyIF07IHRoZW4KKwkJRkFUU0laRT0iLUYgMzIiCisJZmkKKworCSMgbWtkb3NmcyB3aWxsIGZhaWwgaWYgJHtGQVRJTUd9IGV4aXN0cy4gU2luY2Ugd2UgYXJlIGNyZWF0aW5nIGFuCisJIyBuZXcgaW1hZ2UsIGl0IGlzIHNhZmUgdG8gZGVsZXRlIGFueSBwcmV2aW91cyBpbWFnZS4KKwlpZiBbIC1lICR7RkFUSU1HfSBdOyB0aGVuCisJCXJtICR7RkFUSU1HfQorCWZpCisKKwlpZiBbIC16ICIke0hERElNR19JRH0iIF07IHRoZW4KKwkJbWtkb3NmcyAke0ZBVFNJWkV9IC1uICR7Qk9PVElNR19WT0xVTUVfSUR9IC1TIDUxMiAtQyAke0ZBVElNR30gXAorCQkJJHtCTE9DS1N9CisJZWxzZQorCQlta2Rvc2ZzICR7RkFUU0laRX0gLW4gJHtCT09USU1HX1ZPTFVNRV9JRH0gLVMgNTEyIC1DICR7RkFUSU1HfSBcCisJCSR7QkxPQ0tTfSAtaSAke0hERElNR19JRH0KKwlmaQorCisJIyBDb3B5IEZBVFNPVVJDRURJUiByZWN1cnNpdmVseSBpbnRvIHRoZSBpbWFnZSBmaWxlIGRpcmVjdGx5CisJbWNvcHkgLWkgJHtGQVRJTUd9IC1zICR7RkFUU09VUkNFRElSfS8qIDo6LworfQorCitidWlsZF9oZGRpbWcoKSB7CisJIyBDcmVhdGUgYW4gSEREIGltYWdlCisJaWYgWyAiJHtOT0hERH0iICE9ICIxIiBdIDsgdGhlbgorCQlwb3B1bGF0ZSAke0hERERJUn0KKworCQlpZiBbICIke1BDQklPU30iID0gIjEiIF07IHRoZW4KKwkJCXN5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSAke0hERERJUn0KKwkJZmkKKwkJaWYgWyAiJHtFRkl9IiA9ICIxIiBdOyB0aGVuCisJCQllZmlfaGRkaW1nX3BvcHVsYXRlICR7SERERElSfQorCQlmaQorCisJCSMgQ2hlY2sgdGhlIHNpemUgb2YgJHtIRERESVJ9L3Jvb3Rmcy5pbWcsIGVycm9yIG91dCBpZiBpdAorCQkjIGV4Y2VlZHMgNEdCLCBpdCBpcyB0aGUgc2luZ2xlIGZpbGUncyBtYXggc2l6ZSBvZiBGQVQgZnMuCisJCWlmIFsgLWYgJHtIRERESVJ9L3Jvb3Rmcy5pbWcgXTsgdGhlbgorCQkJcm9vdGZzX2ltZ19zaXplPWBzdGF0IC1jICclcycgJHtIRERESVJ9L3Jvb3Rmcy5pbWdgCisJCQltYXhfc2l6ZT1gZXhwciA0IFwqIDEwMjQgXCogMTAyNCBcKiAxMDI0YAorCQkJaWYgWyAkcm9vdGZzX2ltZ19zaXplIC1ndCAkbWF4X3NpemUgXTsgdGhlbgorCQkJCWJiZXJyb3IgIiR7SERERElSfS9yb290ZnMuaW1nIGV4ZWNlZWRzIDRHQiwiCisJCQkJYmJlcnJvciAidGhpcyBkb2Vzbid0IHdvcmsgb24gRkFUIGZpbGVzeXN0ZW0sIHlvdSBjYW4gdHJ5IGVpdGhlciBvZjoiCisJCQkJYmJlcnJvciAiMSkgUmVkdWNlIHRoZSBzaXplIG9mIHJvb3Rmcy5pbWciCisJCQkJYmJmYXRhbCAiMikgVXNlIGlzbywgdm1kayBvciB2ZGkgdG8gaW5zdGVhZCBvZiBoZGRpbWdcbiIKKwkJCWZpCisJCWZpCisKKwkJYnVpbGRfZmF0X2ltZyAke0hERERJUn0gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworCisJCWlmIFsgIiR7UENCSU9TfSIgPSAiMSIgXTsgdGhlbgorCQkJc3lzbGludXhfaGRkaW1nX2luc3RhbGwKKwkJZmkKKworCQljaG1vZCA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LmhkZGltZworCisJCWNkICR7REVQTE9ZX0RJUl9JTUFHRX0KKwkJcm0gLWYgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0uaGRkaW1nCisJCWxuIC1zICR7SU1BR0VfTkFNRX0uaGRkaW1nICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9MSU5LX05BTUV9LmhkZGltZworCWZpCit9CisKK3B5dGhvbiBkb19ib290aW1nKCkgeworICAgIGlmIGQuZ2V0VmFyKCJQQ0JJT1MiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfc3lzbGludXhfY2ZnJywgZCkKKyAgICBpZiBkLmdldFZhcigiRUZJIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2VmaV9jZmcnLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnYnVpbGRfaGRkaW1nJywgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2J1aWxkX2lzbycsIGQpCit9CisKK0lNQUdFX1RZUEVERVBfaXNvID0gImV4dDQiCitJTUFHRV9UWVBFREVQX2hkZGltZyA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJpc28gaGRkaW1nIgorCithZGR0YXNrIGJvb3RpbWcgYmVmb3JlIGRvX2J1aWxkCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9idWd6aWxsYS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzg5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVnemlsbGEuYmJjbGFzcwpAQCAtMCwwICsxLDE4NyBAQAorIworIyBTbWFsbCBldmVudCBoYW5kbGVyIHRvIGF1dG9tYXRpY2FsbHkgb3BlbiBVUkxzIGFuZCBmaWxlCisjIGJ1ZyByZXBvcnRzIGF0IGEgYnVnemlsbGEgb2YgeW91ciBjaG9pY2hlCisjIGl0IHVzZXMgWE1MLVJQQyBpbnRlcmZhY2UsIHNvIHlvdSBtdXN0IGhhdmUgaXQgZW5hYmxlZAorIworIyBCZWZvcmUgdXNpbmcgeW91IG11c3QgZGVmaW5lIEJVR1pJTExBX1VTRVIsIEJVR1pJTExBX1BBU1MgY3JlZGVudGlhbHMsCisjIEJVR1pJTExBX1hNTFJQQyAtIHVyaSBvZiB4bWxycGMuY2dpLAorIyBCVUdaSUxMQV9QUk9EVUNULCBCVUdaSUxMQV9DT01QT05FTlQgLSBhIHBsYWNlIGluIEJUUyBmb3IgYnVpbGQgYnVncworIyBCVUdaSUxMQV9WRVJTSU9OIC0gdmVyc2lvbiBhZ2FpbnN0IHdoaWNoIHRvIHJlcG9ydCBuZXcgYnVncworIworCitkZWYgYnVnemlsbGFfZmluZF9idWdfcmVwb3J0KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnbmFtZSk6CisgICAgYXJnc1snc3VtbWFyeSddID0gYnVnbmFtZQorICAgIGJ1Z3MgPSBzZXJ2ZXIuQnVnLnNlYXJjaChhcmdzKQorICAgIGlmIGxlbihidWdzWydidWdzJ10pID09IDA6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJCdWdzIG5vdCBmb3VuZCIKKyAgICAgICAgcmV0dXJuIChGYWxzZSxOb25lKQorICAgIGVsc2U6ICMgc2lsZW50bHkgcGljayB0aGUgZmlyc3QgcmVzdWx0CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJSZXN1bHQgb2YgYnVnIHNlYXJjaCBpcyAiCisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIGJ1Z3MKKyAgICAgICAgc3RhdHVzID0gYnVnc1snYnVncyddWzBdWydzdGF0dXMnXQorICAgICAgICBpZCA9IGJ1Z3NbJ2J1Z3MnXVswXVsnaWQnXQorICAgICAgICByZXR1cm4gKG5vdCBzdGF0dXMgaW4gWyJDTE9TRUQiLCAiUkVTT0xWRUQiLCAiVkVSSUZJRUQiXSxpZCkKKworZGVmIGJ1Z3ppbGxhX2ZpbGVfYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgbmFtZSwgdGV4dCwgdmVyc2lvbik6CisgICAgYXJnc1snc3VtbWFyeSddID0gbmFtZQorICAgIGFyZ3NbJ2NvbW1lbnQnXSA9IHRleHQKKyAgICBhcmdzWyd2ZXJzaW9uJ10gPSB2ZXJzaW9uCisgICAgYXJnc1snb3Bfc3lzJ10gPSAnTGludXgnCisgICAgYXJnc1sncGxhdGZvcm0nXSA9ICdPdGhlcicKKyAgICBhcmdzWydzZXZlcml0eSddID0gJ25vcm1hbCcKKyAgICBhcmdzWydwcmlvcml0eSddID0gJ05vcm1hbCcKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBzZXJ2ZXIuQnVnLmNyZWF0ZShhcmdzKVsnaWQnXQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsIHJlcHIoZSkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGJ1Z3ppbGxhX3Jlb3Blbl9idWcoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLCBidWdfbnVtYmVyKToKKyAgICBhcmdzWydpZHMnXSA9IFtidWdfbnVtYmVyXQorICAgIGFyZ3NbJ3N0YXR1cyddID0gIkNPTkZJUk1FRCIKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5CdWcudXBkYXRlKGFyZ3MpCisgICAgICAgIHJldHVybiBUcnVlCisgICAgZXhjZXB0IEV4Y2VwdGlvbiwgZToKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgcmVwcihlKQorICAgICAgICByZXR1cm4gRmFsc2UKKworZGVmIGJ1Z3ppbGxhX2NyZWF0ZV9hdHRhY2htZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncywgYnVnX251bWJlciwgdGV4dCwgZmlsZV9uYW1lLCBsb2csIGxvZ2Rlc2NyaXB0aW9uKToKKyAgICBhcmdzWydpZHMnXSA9IFtidWdfbnVtYmVyXQorICAgIGFyZ3NbJ2ZpbGVfbmFtZSddID0gZmlsZV9uYW1lCisgICAgYXJnc1snc3VtbWFyeSddID0gbG9nZGVzY3JpcHRpb24KKyAgICBhcmdzWydjb250ZW50X3R5cGUnXSA9ICJ0ZXh0L3BsYWluIgorICAgIGFyZ3NbJ2RhdGEnXSA9IGxvZworICAgIGFyZ3NbJ2NvbW1lbnQnXSA9IHRleHQKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5CdWcuYWRkX2F0dGFjaG1lbnQoYXJncykKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBGYWxzZQorCitkZWYgYnVnemlsbGFfYWRkX2NvbW1lbnQoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLCBidWdfbnVtYmVyLCB0ZXh0KToKKyAgICBhcmdzWydpZCddID0gYnVnX251bWJlcgorICAgIGFyZ3NbJ2NvbW1lbnQnXSA9IHRleHQKKyAgICB0cnk6CisgICAgICAgIHNlcnZlci5CdWcuYWRkX2NvbW1lbnQoYXJncykKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCByZXByKGUpCisgICAgICAgIHJldHVybiBGYWxzZQorCithZGRoYW5kbGVyIGJ1Z3ppbGxhX2V2ZW50aGFuZGxlcgorYnVnemlsbGFfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuTXNnTm90ZSBiYi5idWlsZC5UYXNrRmFpbGVkIgorcHl0aG9uIGJ1Z3ppbGxhX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgZ2xvYgorICAgIGltcG9ydCB4bWxycGNsaWIsIGh0dHBsaWIKKworICAgIGNsYXNzIFByb3hpZWRUcmFuc3BvcnQoeG1scnBjbGliLlRyYW5zcG9ydCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm94eSwgdXNlX2RhdGV0aW1lID0gMCk6CisgICAgICAgICAgICB4bWxycGNsaWIuVHJhbnNwb3J0Ll9faW5pdF9fKHNlbGYsIHVzZV9kYXRldGltZSkKKyAgICAgICAgICAgIHNlbGYucHJveHkgPSBwcm94eQorICAgICAgICAgICAgc2VsZi51c2VyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wYXNzd29yZCA9IE5vbmUKKworICAgICAgICBkZWYgc2V0X3VzZXIoc2VsZiwgdXNlcik6CisgICAgICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisKKyAgICAgICAgZGVmIHNldF9wYXNzd29yZChzZWxmLCBwYXNzd29yZCk6CisgICAgICAgICAgICBzZWxmLnBhc3N3b3JkID0gcGFzc3dvcmQKKworICAgICAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgorICAgICAgICAgICAgc2VsZi5yZWFsaG9zdCA9IGhvc3QKKyAgICAgICAgICAgIHJldHVybiBodHRwbGliLkhUVFAoc2VsZi5wcm94eSkKKworICAgICAgICBkZWYgc2VuZF9yZXF1ZXN0KHNlbGYsIGNvbm5lY3Rpb24sIGhhbmRsZXIsIHJlcXVlc3RfYm9keSk6CisgICAgICAgICAgICBjb25uZWN0aW9uLnB1dHJlcXVlc3QoIlBPU1QiLCAnaHR0cDovLyVzJXMnICUgKHNlbGYucmVhbGhvc3QsIGhhbmRsZXIpKQorICAgICAgICAgICAgaWYgc2VsZi51c2VyICE9IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wYXNzd29yZCAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICBhdXRoID0gIiVzOiVzIiAlIChzZWxmLnVzZXIsIHNlbGYucGFzc3dvcmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXV0aCA9IHNlbGYudXNlcgorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKCJQcm94eS1hdXRob3JpemF0aW9uIiwgIkJhc2ljICIgKyBiYXNlNjQuZW5jb2Rlc3RyaW5nKGF1dGgpKQorCisgICAgZXZlbnQgPSBlCisgICAgZGF0YSA9IGUuZGF0YQorICAgIG5hbWUgPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgIGlmIG5hbWUgPT0gIk1zZ05vdGUiOgorICAgICAgICAjIGF2b2lkIHJlY3Vyc2lvbgorICAgICAgICByZXR1cm4KKworICAgIGlmIG5hbWUgPT0gIlRhc2tGYWlsZWQiOgorICAgICAgICB4bWxycGMgID0gZGF0YS5nZXRWYXIoIkJVR1pJTExBX1hNTFJQQyIsIFRydWUpCisgICAgICAgIHVzZXIgICAgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfVVNFUiIsIFRydWUpCisgICAgICAgIHBhc3N3ICAgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfUEFTUyIsIFRydWUpCisgICAgICAgIHByb2R1Y3QgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfUFJPRFVDVCIsIFRydWUpCisgICAgICAgIGNvbXBvbiAgPSBkYXRhLmdldFZhcigiQlVHWklMTEFfQ09NUE9ORU5UIiwgVHJ1ZSkKKyAgICAgICAgdmVyc2lvbiA9IGRhdGEuZ2V0VmFyKCJCVUdaSUxMQV9WRVJTSU9OIiwgVHJ1ZSkKKworICAgICAgICBwcm94eSAgID0gZGF0YS5nZXRWYXIoJ2h0dHBfcHJveHknLCBUcnVlICkKKyAgICAgICAgaWYgKHByb3h5KToKKyAgICAgICAgICAgIGltcG9ydCB1cmxsaWIyCisgICAgICAgICAgICBzLCB1LCBwLCBob3N0cG9ydCA9IHVybGxpYjIuX3BhcnNlX3Byb3h5KHByb3h5KQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gUHJveGllZFRyYW5zcG9ydChob3N0cG9ydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoeG1scnBjLCB0cmFuc3BvcnQ9dHJhbnNwb3J0LCB2ZXJib3NlPTApCisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnQnVnemlsbGFfbG9naW4nOiB1c2VyLAorICAgICAgICAgICAgJ0J1Z3ppbGxhX3Bhc3N3b3JkJzogcGFzc3csCisgICAgICAgICAgICAncHJvZHVjdCc6IHByb2R1Y3QsCisgICAgICAgICAgICAnY29tcG9uZW50JzogY29tcG9ufQorCisgICAgICAgICMgZXZpbCBoYWNrIHRvIGZpZ3VyZSBvdXQgd2hhdCBpcyBnb2luZyBvbgorICAgICAgICBkZWJ1Z19maWxlID0gb3Blbihvcy5wYXRoLmpvaW4oZGF0YS5nZXRWYXIoIlRNUERJUiIsIFRydWUpLCIuLiIsImJ1Z3ppbGxhLWxvZyIpLCJhIikKKworICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICBidWduYW1lID0gIiUocGFja2FnZSlzLSUocHYpcy1hdXRvYnVpbGQiICUgeyAicGFja2FnZSIgOiBkYXRhLmdldFZhcigiUE4iLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB2IiAgICAgIDogZGF0YS5nZXRWYXIoIlBWIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgbG9nX2ZpbGUgPSBnbG9iLmdsb2IoIiVzL2xvZy4lcy4qIiAlIChldmVudC5kYXRhLmdldFZhcignVCcsIFRydWUpLCBldmVudC50YXNrKSkKKyAgICAgICAgdGV4dCAgICAgPSAiVGhlICVzIHN0ZXAgaW4gJXMgZmFpbGVkIGF0ICVzIGZvciBtYWNoaW5lICVzIiAlIChlLnRhc2ssIGRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLCBkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKSwgZGF0YS5nZXRWYXIoICdNQUNISU5FJywgVHJ1ZSApICkKKyAgICAgICAgaWYgbGVuKGxvZ19maWxlKSAhPSAwOgorICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkFkZGluZyBsb2cgZmlsZSAlcyIgJSBsb2dfZmlsZVswXQorICAgICAgICAgICAgZmlsZSA9IG9wZW4obG9nX2ZpbGVbMF0sICdyJykKKyAgICAgICAgICAgIGxvZyA9IGZpbGUucmVhZCgpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCk7CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiTm8gbG9nIGZpbGUgZm91bmQgZm9yIHRoZSBnbG9iIgorICAgICAgICAgICAgbG9nID0gTm9uZQorCisgICAgICAgIChidWdfb3BlbiwgYnVnX251bWJlcikgPSBidWd6aWxsYV9maW5kX2J1Z19yZXBvcnQoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLmNvcHkoKSwgYnVnbmFtZSkKKyAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkJ1ZyBpcyBvcGVuOiAlcyBhbmQgYnVnIG51bWJlcjogJXMiICUgKGJ1Z19vcGVuLCBidWdfbnVtYmVyKQorCisgICAgICAgICMgVGhlIGJ1ZyBpcyBwcmVzZW50IGFuZCBzdGlsbCBvcGVuLCBhdHRhY2ggYW4gZXJyb3IgbG9nCisgICAgICAgIGlmIG5vdCBidWdfbnVtYmVyOgorICAgICAgICAgICAgYnVnX251bWJlciA9IGJ1Z3ppbGxhX2ZpbGVfYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z25hbWUsIHRleHQsIHZlcnNpb24pCisgICAgICAgICAgICBpZiBub3QgYnVnX251bWJlcjoKKyAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiQ291bGRuJ3QgYWNxdWlyZSBhIG5ldyBidWdfbnVtZXIsIGZpbGluZyBhIGJ1Z3JlcG9ydCBmYWlsZWQiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJUaGUgbmV3IGJ1Z19udW1iZXI6ICclcyciICUgYnVnX251bWJlcgorICAgICAgICBlbGlmIG5vdCBidWdfb3BlbjoKKyAgICAgICAgICAgIGlmIG5vdCBidWd6aWxsYV9yZW9wZW5fYnVnKGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIpOgorICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJGYWlsZWQgdG8gcmVvcGVuIHRoZSBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIlJlb3BlbmVkIHRoZSBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKworICAgICAgICBpZiBidWdfbnVtYmVyIGFuZCBsb2c6CisgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiVGhlIGJ1ZyBpcyBrbm93biBhcyAnJXMnIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGRlc2MgPSAiQnVpbGQgbG9nIGZvciBtYWNoaW5lICVzIiAlIChkYXRhLmdldFZhcignTUFDSElORScsIFRydWUpKQorICAgICAgICAgICAgaWYgbm90IGJ1Z3ppbGxhX2NyZWF0ZV9hdHRhY2htZW50KGRlYnVnX2ZpbGUsIHNlcnZlciwgYXJncy5jb3B5KCksIGJ1Z19udW1iZXIsIHRleHQsIGxvZ19maWxlWzBdLCBsb2csIGRlc2MpOgorICAgICAgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiRmFpbGVkIHRvIGF0dGFjaCB0aGUgYnVpbGQgbG9nIGZvciBidWcgIyVzIiAlIGJ1Z19udW1iZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIHByaW50ID4+IGRlYnVnX2ZpbGUsICJDcmVhdGVkIGFuIGF0dGFjaG1lbnQgZm9yICclcycgJyVzJyAnJXMnIiAlIChwcm9kdWN0LCBjb21wb24sIGJ1Z19udW1iZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCA+PiBkZWJ1Z19maWxlLCAiTm90IHRyeWluZyB0byBjcmVhdGUgYW4gYXR0YWNobWVudCBmb3IgYnVnICMlcyIgJSBidWdfbnVtYmVyCisgICAgICAgICAgICBpZiBub3QgYnVnemlsbGFfYWRkX2NvbW1lbnQoZGVidWdfZmlsZSwgc2VydmVyLCBhcmdzLmNvcHkoKSwgYnVnX251bWJlciwgdGV4dCwgKToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkZhaWxlZCB0byBjcmVhdGUgYSBjb21tZW50IHRoZSBidWlsZCBsb2cgZm9yIGJ1ZyAjJXMiICUgYnVnX251bWJlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgcHJpbnQgPj4gZGVidWdfZmlsZSwgIkNyZWF0ZWQgYW4gYXR0YWNobWVudCBmb3IgJyVzJyAnJXMnICclcyciICUgKHByb2R1Y3QsIGNvbXBvbiwgYnVnX251bWJlcikKKworICAgICAgICAjIHN0b3JlIGJ1ZyBudW1iZXIgZm9yIG9lc3RhdHMtY2xpZW50CisgICAgICAgIGlmIGJ1Z19udW1iZXI6CisgICAgICAgICAgICBkYXRhLnNldFZhcignT0VTVEFUU19CVUdfTlVNQkVSJywgYnVnX251bWJlcikKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2J1aWxkaGlzdG9yeS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjA0NDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVpbGRoaXN0b3J5LmJiY2xhc3MKQEAgLTAsMCArMSw3NjUgQEAKKyMKKyMgUmVjb3JkcyBoaXN0b3J5IG9mIGJ1aWxkIG91dHB1dCBpbiBvcmRlciB0byBkZXRlY3QgcmVncmVzc2lvbnMKKyMKKyMgQmFzZWQgaW4gcGFydCBvbiB0ZXN0bGFiLmJiY2xhc3MgYW5kIHBhY2thZ2VoaXN0b3J5LmJiY2xhc3MKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisjCisKK0JVSUxESElTVE9SWV9GRUFUVVJFUyA/PSAiaW1hZ2UgcGFja2FnZSBzZGsiCitCVUlMREhJU1RPUllfRElSID89ICIke1RPUERJUn0vYnVpbGRoaXN0b3J5IgorQlVJTERISVNUT1JZX0RJUl9JTUFHRSA9ICIke0JVSUxESElTVE9SWV9ESVJ9L2ltYWdlcy8ke01BQ0hJTkVfQVJDSH0vJHtUQ0xJQkN9LyR7SU1BR0VfQkFTRU5BTUV9IgorQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFID0gIiR7QlVJTERISVNUT1JZX0RJUn0vcGFja2FnZXMvJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0iCitCVUlMREhJU1RPUllfRElSX1NESyA9ICIke0JVSUxESElTVE9SWV9ESVJ9L3Nkay8ke1NES19OQU1FfS8ke0lNQUdFX0JBU0VOQU1FfSIKK0JVSUxESElTVE9SWV9JTUFHRV9GSUxFUyA/PSAiL2V0Yy9wYXNzd2QgL2V0Yy9ncm91cCIKK0JVSUxESElTVE9SWV9DT01NSVQgPz0gIjAiCitCVUlMREhJU1RPUllfQ09NTUlUX0FVVEhPUiA/PSAiYnVpbGRoaXN0b3J5IDxidWlsZGhpc3RvcnlAJHtESVNUUk99PiIKK0JVSUxESElTVE9SWV9QVVNIX1JFUE8gPz0gIiIKKworU1NUQVRFUE9TVElOU1RGVU5DU19hcHBlbmQgPSAiIGJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisjIFdlIHdhbnQgdG8gYXZvaWQgaW5mbHVlbmNlIHRoZSBzaWduYXR1cmVzIG9mIHNzdGF0ZSB0YXNrcyAtIGZpcnN0IHRoZSBmdW5jdGlvbiBpdHNlbGY6Citzc3RhdGVfaW5zdGFsbFt2YXJkZXBzZXhjbHVkZV0gKz0gImJ1aWxkaGlzdG9yeV9lbWl0X3BrZ2hpc3RvcnkiCisjIHRoZW4gdGhlIHZhbHVlIGFkZGVkIHRvIFNTVEFURVBPU1RJTlNURlVOQ1M6CitTU1RBVEVQT1NUSU5TVEZVTkNTW3ZhcmRlcHZhbHVlZXhjbHVkZV0gLj0gInwgYnVpbGRoaXN0b3J5X2VtaXRfcGtnaGlzdG9yeSIKKworIworIyBXcml0ZSBvdXQgbWV0YWRhdGEgYWJvdXQgdGhpcyBwYWNrYWdlIGZvciBjb21wYXJpc2lvbiB3aGVuIHdyaXRpbmcgZnV0dXJlIHBhY2thZ2VzCisjCitweXRob24gYnVpbGRoaXN0b3J5X2VtaXRfcGtnaGlzdG9yeSgpIHsKKyAgICBpZiBub3QgZC5nZXRWYXIoJ0JCX0NVUlJFTlRUQVNLJywgVHJ1ZSkgaW4gWydwYWNrYWdlZGF0YScsICdwYWNrYWdlZGF0YV9zZXRzY2VuZSddOgorICAgICAgICByZXR1cm4gMAorCisgICAgaWYgbm90ICJwYWNrYWdlIiBpbiAoZC5nZXRWYXIoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICByZXR1cm4gMAorCisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgZXJybm8KKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIGNsYXNzIFJlY2lwZUluZm86CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYucGUgPSAiMCIKKyAgICAgICAgICAgIHNlbGYucHYgPSAiMCIKKyAgICAgICAgICAgIHNlbGYucHIgPSAicjAiCisgICAgICAgICAgICBzZWxmLmRlcGVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5wYWNrYWdlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnNyY3JldiA9ICIiCisKKworICAgIGNsYXNzIFBhY2thZ2VJbmZvOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgICAgICBzZWxmLnBlID0gIjAiCisgICAgICAgICAgICBzZWxmLnB2ID0gIjAiCisgICAgICAgICAgICBzZWxmLnByID0gInIwIgorICAgICAgICAgICAgIyBwa2cvcGtnZS9wa2d2L3BrZ3Igc2hvdWxkIGJlIGVtcHR5IGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGRlZmF1bHQgdGhlbQorICAgICAgICAgICAgc2VsZi5wa2cgPSAiIgorICAgICAgICAgICAgc2VsZi5wa2dlID0gIiIKKyAgICAgICAgICAgIHNlbGYucGtndiA9ICIiCisgICAgICAgICAgICBzZWxmLnBrZ3IgPSAiIgorICAgICAgICAgICAgc2VsZi5zaXplID0gMAorICAgICAgICAgICAgc2VsZi5kZXBlbmRzID0gIiIKKyAgICAgICAgICAgIHNlbGYucnByb3ZpZGVzID0gIiIKKyAgICAgICAgICAgIHNlbGYucmRlcGVuZHMgPSAiIgorICAgICAgICAgICAgc2VsZi5ycmVjb21tZW5kcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJzdWdnZXN0cyA9ICIiCisgICAgICAgICAgICBzZWxmLnJyZXBsYWNlcyA9ICIiCisgICAgICAgICAgICBzZWxmLnJjb25mbGljdHMgPSAiIgorICAgICAgICAgICAgc2VsZi5maWxlcyA9ICIiCisgICAgICAgICAgICBzZWxmLmZpbGVsaXN0ID0gIiIKKyAgICAgICAgICAgICMgVmFyaWFibGVzIHRoYXQgbmVlZCB0byBiZSB3cml0dGVuIHRvIHRoZWlyIG93biBzZXBhcmF0ZSBmaWxlCisgICAgICAgICAgICBzZWxmLmZpbGV2YXJzID0gZGljdC5mcm9ta2V5cyhbJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybSddKQorCisgICAgIyBTaG91bGQgY2hlY2sgUEFDS0FHRVMgaGVyZSB0byBzZWUgaWYgYW55dGhpbmcgcmVtb3ZlZAorCisgICAgZGVmIHJlYWRQYWNrYWdlSW5mbyhwa2csIGhpc3RmaWxlKToKKyAgICAgICAgcGtnaW5mbyA9IFBhY2thZ2VJbmZvKHBrZykKKyAgICAgICAgd2l0aCBvcGVuKGhpc3RmaWxlLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGxucyA9IGxpbmUuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgIG5hbWUgPSBsbnNbMF0uc3RyaXAoKQorICAgICAgICAgICAgICAgIHZhbHVlID0gbG5zWzFdLnN0cmlwKCIgXHRcclxuIikuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIlBFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wZSA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQViI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucHYgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUFIiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnByID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLRyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtnID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlBLR0UiOgorICAgICAgICAgICAgICAgICAgICBwa2dpbmZvLnBrZ2UgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUEtHViI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucGtndiA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dSIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5wa2dyID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJQUk9WSURFUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnByb3ZpZGVzID0gdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIlJERVBFTkRTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5yZGVwZW5kcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJSUkVDT01NRU5EUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucnJlY29tbWVuZHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlNVR0dFU1RTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5yc3VnZ2VzdHMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUlJFUExBQ0VTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5ycmVwbGFjZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiUkNPTkZMSUNUUyI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8ucmNvbmZsaWN0cyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJQS0dTSVpFIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5zaXplID0gbG9uZyh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIG5hbWUgPT0gIkZJTEVTIjoKKyAgICAgICAgICAgICAgICAgICAgcGtnaW5mby5maWxlcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgZWxpZiBuYW1lID09ICJGSUxFTElTVCI6CisgICAgICAgICAgICAgICAgICAgIHBrZ2luZm8uZmlsZWxpc3QgPSB2YWx1ZQorICAgICAgICAjIEFwcGx5IGRlZmF1bHRzCisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZzoKKyAgICAgICAgICAgIHBrZ2luZm8ucGtnID0gcGtnaW5mby5uYW1lCisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZ2U6CisgICAgICAgICAgICBwa2dpbmZvLnBrZ2UgPSBwa2dpbmZvLnBlCisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZ3Y6CisgICAgICAgICAgICBwa2dpbmZvLnBrZ3YgPSBwa2dpbmZvLnB2CisgICAgICAgIGlmIG5vdCBwa2dpbmZvLnBrZ3I6CisgICAgICAgICAgICBwa2dpbmZvLnBrZ3IgPSBwa2dpbmZvLnByCisgICAgICAgIHJldHVybiBwa2dpbmZvCisKKyAgICBkZWYgZ2V0bGFzdHBrZ3ZlcnNpb24ocGtnKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGlzdGZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgcGtnLCAibGF0ZXN0IikKKyAgICAgICAgICAgIHJldHVybiByZWFkUGFja2FnZUluZm8ocGtnLCBoaXN0ZmlsZSkKKyAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHNvcnRwa2dsaXN0KHN0cmluZyk6CisgICAgICAgIHBrZ2l0ZXIgPSByZS5maW5kaXRlcihyJ1thLXpBLVowLTkuKy1dKyggXChbPjw9XSsgW14gKV0rXCkpPycsIHN0cmluZywgMCkKKyAgICAgICAgcGtnbGlzdCA9IFtwLmdyb3VwKDApIGZvciBwIGluIHBrZ2l0ZXJdCisgICAgICAgIHBrZ2xpc3Quc29ydCgpCisgICAgICAgIHJldHVybiAnICcuam9pbihwa2dsaXN0KQorCisgICAgZGVmIHNvcnRsaXN0KHN0cmluZyk6CisgICAgICAgIGl0ZW1zID0gc3RyaW5nLnNwbGl0KCcgJykKKyAgICAgICAgaXRlbXMuc29ydCgpCisgICAgICAgIHJldHVybiAnICcuam9pbihpdGVtcykKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBwZSA9IGQuZ2V0VmFyKCdQRScsIFRydWUpIG9yICIwIgorICAgIHB2ID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICBwciA9IGQuZ2V0VmFyKCdQUicsIFRydWUpCisKKyAgICBwa2dkYXRhX2RpciA9IGQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpCisgICAgcGFja2FnZXMgPSAiIgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkYXRhX2RpciwgcG4pKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1BBQ0tBR0VTOiAnKToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZXMgPSBvZS51dGlscy5zcXVhc2hzcGFjZXMobGluZS5zcGxpdCgnOiAnLCAxKVsxXSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICMgUHJvYmFibHkgYSAtY3Jvc3MgcmVjaXBlLCBqdXN0IGlnbm9yZQorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBwYWNrYWdlbGlzdCA9IHBhY2thZ2VzLnNwbGl0KCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnaGlzdGRpcik6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2doaXN0ZGlyKQorICAgIGVsc2U6CisgICAgICAgICMgUmVtb3ZlIGZpbGVzIGZvciBwYWNrYWdlcyB0aGF0IG5vIGxvbmdlciBleGlzdAorICAgICAgICBmb3IgaXRlbSBpbiBvcy5saXN0ZGlyKHBrZ2hpc3RkaXIpOgorICAgICAgICAgICAgaWYgaXRlbSAhPSAibGF0ZXN0IiBhbmQgaXRlbSAhPSAibGF0ZXN0X3NyY3JldiI6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBub3QgaW4gcGFja2FnZWxpc3Q6CisgICAgICAgICAgICAgICAgICAgIGl0ZW1wYXRoID0gb3MucGF0aC5qb2luKHBrZ2hpc3RkaXIsIGl0ZW0pCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoaXRlbXBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmZpbGUgaW4gb3MubGlzdGRpcihpdGVtcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbihpdGVtcGF0aCwgc3ViZmlsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihpdGVtcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhpdGVtcGF0aCkKKworICAgIHJjcGluZm8gPSBSZWNpcGVJbmZvKHBuKQorICAgIHJjcGluZm8ucGUgPSBwZQorICAgIHJjcGluZm8ucHYgPSBwdgorICAgIHJjcGluZm8ucHIgPSBwcgorICAgIHJjcGluZm8uZGVwZW5kcyA9IHNvcnRsaXN0KG9lLnV0aWxzLnNxdWFzaHNwYWNlcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpIG9yICIiKSkKKyAgICByY3BpbmZvLnBhY2thZ2VzID0gcGFja2FnZXMKKyAgICB3cml0ZV9yZWNpcGVoaXN0b3J5KHJjcGluZm8sIGQpCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGZvciBwa2cgaW4gcGFja2FnZWxpc3Q6CisgICAgICAgIHBrZ2RhdGEgPSB7fQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHBrZ2RhdGFfZGlyLCAncnVudGltZScsIHBrZykpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgIGl0ZW0gPSBsaW5lLnJzdHJpcCgnXG4nKS5zcGxpdCgnOiAnLCAxKQorICAgICAgICAgICAgICAgIGtleSA9IGl0ZW1bMF0KKyAgICAgICAgICAgICAgICBpZiBrZXkuZW5kc3dpdGgoJ18nICsgcGtnKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5WzotbGVuKHBrZyktMV0KKyAgICAgICAgICAgICAgICBwa2dkYXRhW2tleV0gPSBpdGVtWzFdLmRlY29kZSgndXRmLTgnKS5kZWNvZGUoJ3N0cmluZ19lc2NhcGUnKQorCisgICAgICAgIHBrZ2UgPSBwa2dkYXRhLmdldCgnUEtHRScsICcwJykKKyAgICAgICAgcGtndiA9IHBrZ2RhdGFbJ1BLR1YnXQorICAgICAgICBwa2dyID0gcGtnZGF0YVsnUEtHUiddCisgICAgICAgICMKKyAgICAgICAgIyBGaW5kIG91dCB3aGF0IHRoZSBsYXN0IHZlcnNpb24gd2FzCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSB2ZXJzaW9uIGRpZCBub3QgZGVjcmVhc2UKKyAgICAgICAgIworICAgICAgICBsYXN0dmVyc2lvbiA9IGdldGxhc3Rwa2d2ZXJzaW9uKHBrZykKKyAgICAgICAgaWYgbGFzdHZlcnNpb246CisgICAgICAgICAgICBsYXN0X3BrZ2UgPSBsYXN0dmVyc2lvbi5wa2dlCisgICAgICAgICAgICBsYXN0X3BrZ3YgPSBsYXN0dmVyc2lvbi5wa2d2CisgICAgICAgICAgICBsYXN0X3BrZ3IgPSBsYXN0dmVyc2lvbi5wa2dyCisgICAgICAgICAgICByID0gYmIudXRpbHMudmVyY21wKChwa2dlLCBwa2d2LCBwa2dyKSwgKGxhc3RfcGtnZSwgbGFzdF9wa2d2LCBsYXN0X3BrZ3IpKQorICAgICAgICAgICAgaWYgciA8IDA6CisgICAgICAgICAgICAgICAgbXNnID0gIlBhY2thZ2UgdmVyc2lvbiBmb3IgcGFja2FnZSAlcyB3ZW50IGJhY2t3YXJkcyB3aGljaCB3b3VsZCBicmVhayBwYWNrYWdlIGZlZWRzIGZyb20gKCVzOiVzLSVzIHRvICVzOiVzLSVzKSIgJSAocGtnLCBsYXN0X3BrZ2UsIGxhc3RfcGtndiwgbGFzdF9wa2dyLCBwa2dlLCBwa2d2LCBwa2dyKQorICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyIsIG1zZywgZCkKKworICAgICAgICBwa2dpbmZvID0gUGFja2FnZUluZm8ocGtnKQorICAgICAgICAjIEFwcGFyZW50bHkgdGhlIHZlcnNpb24gY2FuIGJlIGRpZmZlcmVudCBvbiBhIHBlci1wYWNrYWdlIGJhc2lzIChzZWUgUHl0aG9uKQorICAgICAgICBwa2dpbmZvLnBlID0gcGtnZGF0YS5nZXQoJ1BFJywgJzAnKQorICAgICAgICBwa2dpbmZvLnB2ID0gcGtnZGF0YVsnUFYnXQorICAgICAgICBwa2dpbmZvLnByID0gcGtnZGF0YVsnUFInXQorICAgICAgICBwa2dpbmZvLnBrZyA9IHBrZ2RhdGFbJ1BLRyddCisgICAgICAgIHBrZ2luZm8ucGtnZSA9IHBrZ2UKKyAgICAgICAgcGtnaW5mby5wa2d2ID0gcGtndgorICAgICAgICBwa2dpbmZvLnBrZ3IgPSBwa2dyCisgICAgICAgIHBrZ2luZm8ucnByb3ZpZGVzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUFJPVklERVMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJkZXBlbmRzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSREVQRU5EUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnJlY29tbWVuZHMgPSBzb3J0cGtnbGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMocGtnZGF0YS5nZXQoJ1JSRUNPTU1FTkRTJywgIiIpKSkKKyAgICAgICAgcGtnaW5mby5yc3VnZ2VzdHMgPSBzb3J0cGtnbGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMocGtnZGF0YS5nZXQoJ1JTVUdHRVNUUycsICIiKSkpCisgICAgICAgIHBrZ2luZm8ucnJlcGxhY2VzID0gc29ydHBrZ2xpc3Qob2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdSUkVQTEFDRVMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLnJjb25mbGljdHMgPSBzb3J0cGtnbGlzdChvZS51dGlscy5zcXVhc2hzcGFjZXMocGtnZGF0YS5nZXQoJ1JDT05GTElDVFMnLCAiIikpKQorICAgICAgICBwa2dpbmZvLmZpbGVzID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHBrZ2RhdGEuZ2V0KCdGSUxFUycsICIiKSkKKyAgICAgICAgZm9yIGZpbGV2YXIgaW4gcGtnaW5mby5maWxldmFyczoKKyAgICAgICAgICAgIHBrZ2luZm8uZmlsZXZhcnNbZmlsZXZhcl0gPSBwa2dkYXRhLmdldChmaWxldmFyLCAiIikKKworICAgICAgICAjIEdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlZCBmaWxlcworICAgICAgICB2YWwgPSBwa2dkYXRhLmdldCgnRklMRVNfSU5GTycsICcnKQorICAgICAgICBkaWN0dmFsID0ganNvbi5sb2Fkcyh2YWwpCisgICAgICAgIGZpbGVsaXN0ID0gZGljdHZhbC5rZXlzKCkKKyAgICAgICAgZmlsZWxpc3Quc29ydCgpCisgICAgICAgIHBrZ2luZm8uZmlsZWxpc3QgPSAiICIuam9pbihmaWxlbGlzdCkKKworICAgICAgICBwa2dpbmZvLnNpemUgPSBpbnQocGtnZGF0YVsnUEtHU0laRSddKQorCisgICAgICAgIHdyaXRlX3BrZ2hpc3RvcnkocGtnaW5mbywgZCkKKworICAgICMgQ3JlYXRlIGZpbGVzLWluLTxwYWNrYWdlLW5hbWU+LnR4dCBmaWxlcyBjb250YWluaW5nIGEgbGlzdCBvZiBmaWxlcyBvZiBlYWNoIHJlY2lwZSdzIHBhY2thZ2UKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImJ1aWxkaGlzdG9yeV9saXN0X3BrZ19maWxlcyIsIGQpCit9CisKKworZGVmIHdyaXRlX3JlY2lwZWhpc3RvcnkocmNwaW5mbywgZCk6CisgICAgaW1wb3J0IGNvZGVjcworCisgICAgYmIuZGVidWcoMiwgIldyaXRpbmcgcmVjaXBlIGhpc3RvcnkiKQorCisgICAgcGtnaGlzdGRpciA9IGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRElSX1BBQ0tBR0UnLCBUcnVlKQorCisgICAgaW5mb2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgImxhdGVzdCIpCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvZmlsZSwgInciLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGlmIHJjcGluZm8ucGUgIT0gIjAiOgorICAgICAgICAgICAgZi53cml0ZSh1IlBFID0gJXNcbiIgJSAgcmNwaW5mby5wZSkKKyAgICAgICAgZi53cml0ZSh1IlBWID0gJXNcbiIgJSAgcmNwaW5mby5wdikKKyAgICAgICAgZi53cml0ZSh1IlBSID0gJXNcbiIgJSAgcmNwaW5mby5wcikKKyAgICAgICAgZi53cml0ZSh1IkRFUEVORFMgPSAlc1xuIiAlICByY3BpbmZvLmRlcGVuZHMpCisgICAgICAgIGYud3JpdGUodSJQQUNLQUdFUyA9ICVzXG4iICUgIHJjcGluZm8ucGFja2FnZXMpCisKKworZGVmIHdyaXRlX3BrZ2hpc3RvcnkocGtnaW5mbywgZCk6CisgICAgaW1wb3J0IGNvZGVjcworCisgICAgYmIuZGVidWcoMiwgIldyaXRpbmcgcGFja2FnZSBoaXN0b3J5IGZvciBwYWNrYWdlICVzIiAlIHBrZ2luZm8ubmFtZSkKKworICAgIHBrZ2hpc3RkaXIgPSBkLmdldFZhcignQlVJTERISVNUT1JZX0RJUl9QQUNLQUdFJywgVHJ1ZSkKKworICAgIHBrZ3BhdGggPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgcGtnaW5mby5uYW1lKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dwYXRoKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ3BhdGgpCisKKyAgICBpbmZvZmlsZSA9IG9zLnBhdGguam9pbihwa2dwYXRoLCAibGF0ZXN0IikKKyAgICB3aXRoIGNvZGVjcy5vcGVuKGluZm9maWxlLCAidyIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICAgICAgaWYgcGtnaW5mby5wZSAhPSAiMCI6CisgICAgICAgICAgICBmLndyaXRlKHUiUEUgPSAlc1xuIiAlICBwa2dpbmZvLnBlKQorICAgICAgICBmLndyaXRlKHUiUFYgPSAlc1xuIiAlICBwa2dpbmZvLnB2KQorICAgICAgICBmLndyaXRlKHUiUFIgPSAlc1xuIiAlICBwa2dpbmZvLnByKQorCisgICAgICAgIHBrZ3ZhcnMgPSB7fQorICAgICAgICBwa2d2YXJzWydQS0cnXSA9IHBrZ2luZm8ucGtnIGlmIHBrZ2luZm8ucGtnICE9IHBrZ2luZm8ubmFtZSBlbHNlICcnCisgICAgICAgIHBrZ3ZhcnNbJ1BLR0UnXSA9IHBrZ2luZm8ucGtnZSBpZiBwa2dpbmZvLnBrZ2UgIT0gcGtnaW5mby5wZSBlbHNlICcnCisgICAgICAgIHBrZ3ZhcnNbJ1BLR1YnXSA9IHBrZ2luZm8ucGtndiBpZiBwa2dpbmZvLnBrZ3YgIT0gcGtnaW5mby5wdiBlbHNlICcnCisgICAgICAgIHBrZ3ZhcnNbJ1BLR1InXSA9IHBrZ2luZm8ucGtnciBpZiBwa2dpbmZvLnBrZ3IgIT0gcGtnaW5mby5wciBlbHNlICcnCisgICAgICAgIGZvciBwa2d2YXIgaW4gcGtndmFyczoKKyAgICAgICAgICAgIHZhbCA9IHBrZ3ZhcnNbcGtndmFyXQorICAgICAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgICAgIGYud3JpdGUodSIlcyA9ICVzXG4iICUgKHBrZ3ZhciwgdmFsKSkKKworICAgICAgICBmLndyaXRlKHUiUlBST1ZJREVTID0gJXNcbiIgJSAgcGtnaW5mby5ycHJvdmlkZXMpCisgICAgICAgIGYud3JpdGUodSJSREVQRU5EUyA9ICVzXG4iICUgIHBrZ2luZm8ucmRlcGVuZHMpCisgICAgICAgIGYud3JpdGUodSJSUkVDT01NRU5EUyA9ICVzXG4iICUgIHBrZ2luZm8ucnJlY29tbWVuZHMpCisgICAgICAgIGlmIHBrZ2luZm8ucnN1Z2dlc3RzOgorICAgICAgICAgICAgZi53cml0ZSh1IlJTVUdHRVNUUyA9ICVzXG4iICUgIHBrZ2luZm8ucnN1Z2dlc3RzKQorICAgICAgICBpZiBwa2dpbmZvLnJyZXBsYWNlczoKKyAgICAgICAgICAgIGYud3JpdGUodSJSUkVQTEFDRVMgPSAlc1xuIiAlICBwa2dpbmZvLnJyZXBsYWNlcykKKyAgICAgICAgaWYgcGtnaW5mby5yY29uZmxpY3RzOgorICAgICAgICAgICAgZi53cml0ZSh1IlJDT05GTElDVFMgPSAlc1xuIiAlICBwa2dpbmZvLnJjb25mbGljdHMpCisgICAgICAgIGYud3JpdGUodSJQS0dTSVpFID0gJWRcbiIgJSAgcGtnaW5mby5zaXplKQorICAgICAgICBmLndyaXRlKHUiRklMRVMgPSAlc1xuIiAlICBwa2dpbmZvLmZpbGVzKQorICAgICAgICBmLndyaXRlKHUiRklMRUxJU1QgPSAlc1xuIiAlICBwa2dpbmZvLmZpbGVsaXN0KQorCisgICAgZm9yIGZpbGV2YXIgaW4gcGtnaW5mby5maWxldmFyczoKKyAgICAgICAgZmlsZXZhcnBhdGggPSBvcy5wYXRoLmpvaW4ocGtncGF0aCwgImxhdGVzdC4lcyIgJSBmaWxldmFyKQorICAgICAgICB2YWwgPSBwa2dpbmZvLmZpbGV2YXJzW2ZpbGV2YXJdCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oZmlsZXZhcnBhdGgsICJ3IiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodmFsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXZhcnBhdGgpOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxldmFycGF0aCkKKworIworIyByb290ZnNfdHlwZSBjYW4gYmU6IGltYWdlLCBzZGtfdGFyZ2V0LCBzZGtfaG9zdAorIworZGVmIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkLCByb290ZnNfdHlwZT0iaW1hZ2UiKToKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisKKyAgICBwcm9jZXNzX2xpc3QgPSBbKCdmaWxlJywgJ2JoX2luc3RhbGxlZF9wa2dzLnR4dCcpLFwKKyAgICAgICAgICAgICAgICAgICAgKCdkZXBzJywgJ2JoX2luc3RhbGxlZF9wa2dzX2RlcHMudHh0JyldCisKKyAgICBmb3Igb3V0cHV0X3R5cGUsIG91dHB1dF9maWxlIGluIHByb2Nlc3NfbGlzdDoKKyAgICAgICAgb3V0cHV0X2ZpbGVfZnVsbCA9IG9zLnBhdGguam9pbihkLmdldFZhcignV09SS0RJUicsIFRydWUpLCBvdXRwdXRfZmlsZSkKKworICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGVfZnVsbCwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBpZiByb290ZnNfdHlwZSA9PSAiaW1hZ2UiOgorICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShpbWFnZV9saXN0X2luc3RhbGxlZF9wYWNrYWdlcyhkLCBvdXRwdXRfdHlwZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgcm9vdGZzX3R5cGUgPT0gInNka190YXJnZXQiLCBvdXRwdXRfdHlwZSkpCisKK3B5dGhvbiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfaW1hZ2UoKSB7CisgICAgYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkKGQpCit9CisKK3B5dGhvbiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX3RhcmdldCgpIHsKKyAgICBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWQoZCwgInNka190YXJnZXQiKQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2xpc3RfaW5zdGFsbGVkX3Nka19ob3N0KCkgeworICAgIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZChkLCAic2RrX2hvc3QiKQorfQorCitidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCgpIHsKKwlta2RpciAtcCAkMQorCisJIyBHZXQgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMKKwlwa2djYWNoZT0iJDEvaW5zdGFsbGVkLXBhY2thZ2VzLnRtcCIKKwljYXQgJHtXT1JLRElSfS9iaF9pbnN0YWxsZWRfcGtncy50eHQgfCBzb3J0ID4gJHBrZ2NhY2hlICYmIHJtICR7V09SS0RJUn0vYmhfaW5zdGFsbGVkX3BrZ3MudHh0CisKKwljYXQgJHBrZ2NhY2hlIHwgYXdrICd7IHByaW50ICQxIH0nID4gJDEvaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0CisJaWYgWyAtcyAkcGtnY2FjaGUgXSA7IHRoZW4KKwkJY2F0ICRwa2djYWNoZSB8IGF3ayAneyBwcmludCAkMiB9JyB8IHhhcmdzIC1uMSBiYXNlbmFtZSA+ICQxL2luc3RhbGxlZC1wYWNrYWdlcy50eHQKKwllbHNlCisJCXByaW50ZiAiIiA+ICQxL2luc3RhbGxlZC1wYWNrYWdlcy50eHQKKwlmaQorCisJIyBQcm9kdWNlIGRlcGVuZGVuY3kgZ3JhcGgKKwkjIEZpcnN0LCBxdW90ZSBlYWNoIG5hbWUgdG8gaGFuZGxlIGNoYXJhY3RlcnMgdGhhdCBjYXVzZSBpc3N1ZXMgZm9yIGRvdAorCXNlZCAnczpcKFtefCBdKlwpOiJcMSI6ZycgJHtXT1JLRElSfS9iaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dCA+ICQxL2RlcGVuZHMudG1wICYmIFwKKwkJcm0gJHtXT1JLRElSfS9iaF9pbnN0YWxsZWRfcGtnc19kZXBzLnR4dAorCSMgQ2hhbmdlIGRlbGltaXRlciBmcm9tIHBpcGUgdG8gLT4gYW5kIHNldCBzdHlsZSBmb3IgcmVjb21tZW5kIGxpbmVzCisJc2VkIC1pIC1lICdzOnw6IC0+IDonIC1lICdzOiJcW1JFQ1xdIjpbc3R5bGU9ZG90dGVkXTonIC1lICdzOiQ6OzonICQxL2RlcGVuZHMudG1wCisJIyBBZGQgaGVhZGVyLCBzb3J0ZWQgYW5kIGRlLWR1cGVkIGNvbnRlbnRzIGFuZCBmb290ZXIgYW5kIHRoZW4gZGVsZXRlIHRoZSB0ZW1wIGZpbGUKKwlwcmludGYgImRpZ3JhcGggZGVwZW5kcyB7XG4gICAgbm9kZSBbc2hhcGU9cGxhaW50ZXh0XVxuIiA+ICQxL2RlcGVuZHMuZG90CisJY2F0ICQxL2RlcGVuZHMudG1wIHwgc29ydCB8IHVuaXEgPj4gJDEvZGVwZW5kcy5kb3QKKwllY2hvICJ9IiA+PiAgJDEvZGVwZW5kcy5kb3QKKwlybSAkMS9kZXBlbmRzLnRtcAorCisJIyBQcm9kdWNlIGluc3RhbGxlZCBwYWNrYWdlIHNpemVzIGxpc3QKKwlwcmludGYgIiIgPiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKwljYXQgJHBrZ2NhY2hlIHwgd2hpbGUgcmVhZCBwa2cgcGtnZmlsZSBwa2dhcmNoCisJZG8KKwkJc2l6ZT1gb2UtcGtnZGF0YS11dGlsIC1wICR7UEtHREFUQV9ESVJ9IHJlYWQtdmFsdWUgIlBLR1NJWkUiICR7cGtnfV8ke3BrZ2FyY2h9YAorCQlpZiBbICIkc2l6ZSIgIT0gIiIgXSA7IHRoZW4KKwkJCWVjaG8gIiRzaXplICRwa2ciID4+ICQxL2luc3RhbGxlZC1wYWNrYWdlLXNpemVzLnRtcAorCQlmaQorCWRvbmUKKwljYXQgJDEvaW5zdGFsbGVkLXBhY2thZ2Utc2l6ZXMudG1wIHwgc29ydCAtbiAtciB8IGF3ayAne3ByaW50ICQxICJcdEtpQiAiICQyfScgPiAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQKKwlybSAkMS9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50bXAKKworCSMgV2UncmUgbm93IGRvbmUgd2l0aCB0aGUgY2FjaGUsIGRlbGV0ZSBpdAorCXJtICRwa2djYWNoZQorCisJaWYgWyAiJDIiICE9ICJzZGsiIF0gOyB0aGVuCisJCSMgUHJvZHVjZSBzb21lIGN1dC1kb3duIGdyYXBocyAoZm9yIHJlYWRhYmlsaXR5KQorCQlncmVwIC12IGtlcm5lbF9pbWFnZSAkMS9kZXBlbmRzLmRvdCB8IGdyZXAgLXYga2VybmVsLTIgfCBncmVwIC12IGtlcm5lbC0zID4gJDEvZGVwZW5kcy1ub2tlcm5lbC5kb3QKKwkJZ3JlcCAtdiBsaWJjNiAkMS9kZXBlbmRzLW5va2VybmVsLmRvdCB8IGdyZXAgLXYgbGliZ2NjID4gJDEvZGVwZW5kcy1ub2tlcm5lbC1ub2xpYmMuZG90CisJCWdyZXAgLXYgdXBkYXRlLSAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy5kb3QgPiAkMS9kZXBlbmRzLW5va2VybmVsLW5vbGliYy1ub3VwZGF0ZS5kb3QKKwkJZ3JlcCAtdiBrZXJuZWwtbW9kdWxlICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLW5vdXBkYXRlLmRvdCA+ICQxL2RlcGVuZHMtbm9rZXJuZWwtbm9saWJjLW5vdXBkYXRlLW5vbW9kdWxlcy5kb3QKKwlmaQorCisJIyBhZGQgY29tcGxlbWVudGFyeSBwYWNrYWdlIGluZm9ybWF0aW9uCisJaWYgWyAtZSAke1dPUktESVJ9L2NvbXBsZW1lbnRhcnlfcGtncy50eHQgXTsgdGhlbgorCQljcCAke1dPUktESVJ9L2NvbXBsZW1lbnRhcnlfcGtncy50eHQgJDEKKwlmaQorfQorCitidWlsZGhpc3RvcnlfZ2V0X2ltYWdlX2luc3RhbGxlZCgpIHsKKwkjIEFueXRoaW5nIHJlcXVpcmluZyB0aGUgdXNlIG9mIHRoZSBwYWNrYWdpbmcgc3lzdGVtIHNob3VsZCBiZSBkb25lIGluIGhlcmUKKwkjIGluIGNhc2UgdGhlIHBhY2thZ2luZyBmaWxlcyBhcmUgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmb3IgdGhpcyBpbWFnZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0JVSUxESElTVE9SWV9GRUFUVVJFUycsICdpbWFnZScsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfZ2V0X2luc3RhbGxlZCAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9Cit9CisKK2J1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZCgpIHsKKwkjIEFueXRoaW5nIHJlcXVpcmluZyB0aGUgdXNlIG9mIHRoZSBwYWNrYWdpbmcgc3lzdGVtIHNob3VsZCBiZSBkb25lIGluIGhlcmUKKwkjIGluIGNhc2UgdGhlIHBhY2thZ2luZyBmaWxlcyBhcmUgZ29pbmcgdG8gYmUgcmVtb3ZlZCBmb3IgdGhpcyBTREsKKworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCAnc2RrJywgJzEnLCAnMCcsIGQpfSIgPSAiMCIgXSA7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWJ1aWxkaGlzdG9yeV9nZXRfaW5zdGFsbGVkICR7QlVJTERISVNUT1JZX0RJUl9TREt9LyQxIHNkaworfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfaG9zdCgpIHsKKwlidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWQgaG9zdAorfQorCitidWlsZGhpc3RvcnlfZ2V0X3Nka19pbnN0YWxsZWRfdGFyZ2V0KCkgeworCWJ1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZCB0YXJnZXQKK30KKworYnVpbGRoaXN0b3J5X2xpc3RfZmlsZXMoKSB7CisJIyBMaXN0IHRoZSBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgYnV0IGV4Y2x1ZGUgZGF0ZS90aW1lIGV0Yy4KKwkjIFRoaXMgYXdrIHNjcmlwdCBpcyBzb21ld2hhdCBtZXNzeSwgYnV0IGhhbmRsZXMgd2hlcmUgdGhlIHNpemUgaXMgbm90IHByaW50ZWQgZm9yIGRldmljZSBmaWxlcyB1bmRlciBwc2V1ZG8KKwlpZiBbICIkMyIgPSAiZmFrZXJvb3QiIF0gOyB0aGVuCisJCSggY2QgJDEgJiYgJHtGQUtFUk9PVEVOVn0gJHtGQUtFUk9PVENNRH0gZmluZCAuICEgLXBhdGggLiAtcHJpbnRmICIlTSAlLTEwdSAlLTEwZyAlMTBzICVwIC0+ICVsXG4iIHwgc29ydCAtazUgfCBzZWQgJ3MvICogLT4gJC8vJyA+ICQyICkKKwllbHNlCisJCSggY2QgJDEgJiYgZmluZCAuICEgLXBhdGggLiAtcHJpbnRmICIlTSAlLTEwdSAlLTEwZyAlMTBzICVwIC0+ICVsXG4iIHwgc29ydCAtazUgfCBzZWQgJ3MvICogLT4gJC8vJyA+ICQyICkKKwlmaQorfQorCitidWlsZGhpc3RvcnlfbGlzdF9wa2dfZmlsZXMoKSB7CisJIyBDcmVhdGUgaW5kaXZpZHVhbCBmaWxlcy1pbi1wYWNrYWdlIGZvciBlYWNoIHJlY2lwZSdzIHBhY2thZ2UKKwlmb3IgcGtnZGlyIGluICQoZmluZCAke1BLR0RFU1R9LyogLW1heGRlcHRoIDAgLXR5cGUgZCk7IGRvCisJCXBrZ25hbWU9JChiYXNlbmFtZSAkcGtnZGlyKQorCQlvdXRmb2xkZXI9IiR7QlVJTERISVNUT1JZX0RJUl9QQUNLQUdFfS8kcGtnbmFtZSIKKwkJb3V0ZmlsZT0iJG91dGZvbGRlci9maWxlcy1pbi1wYWNrYWdlLnR4dCIKKwkJIyBNYWtlIHN1cmUgdGhlIG91dHB1dCBmb2xkZXIgZXhpc3RzIHNvIHdlIGNhbiBjcmVhdGUgdGhlIGZpbGUKKwkJaWYgWyAhIC1kICRvdXRmb2xkZXIgXSA7IHRoZW4KKwkJCWJiZGVidWcgMiAiRm9sZGVyICRvdXRmb2xkZXIgZG9lcyBub3QgZXhpc3QsIGZpbGUgJG91dGZpbGUgbm90IGNyZWF0ZWQiCisJCQljb250aW51ZQorCQlmaQorCQlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAkcGtnZGlyICRvdXRmaWxlIGZha2Vyb290CisJZG9uZQorfQorCitidWlsZGhpc3RvcnlfZ2V0X2ltYWdlaW5mbygpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ2ltYWdlJywgJzEnLCAnMCcsIGQpfSIgPSAiMCIgXSA7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWJ1aWxkaGlzdG9yeV9saXN0X2ZpbGVzICR7SU1BR0VfUk9PVEZTfSAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ZpbGVzLWluLWltYWdlLnR4dAorCisJIyBDb2xsZWN0IGZpbGVzIHJlcXVlc3RlZCBpbiBCVUlMREhJU1RPUllfSU1BR0VfRklMRVMKKwlybSAtcmYgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1maWxlcworCWZvciBmIGluICR7QlVJTERISVNUT1JZX0lNQUdFX0ZJTEVTfTsgZG8KKwkJaWYgWyAtZiAke0lNQUdFX1JPT1RGU30vJGYgXSA7IHRoZW4KKwkJCW1rZGlyIC1wICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtZmlsZXMvYGRpcm5hbWUgJGZgCisJCQljcCAke0lNQUdFX1JPT1RGU30vJGYgJHtCVUlMREhJU1RPUllfRElSX0lNQUdFfS9pbWFnZS1maWxlcy8kZgorCQlmaQorCWRvbmUKKworCSMgUmVjb3JkIHNvbWUgbWFjaGluZS1yZWFkYWJsZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBpbWFnZQorCXByaW50ZiAiIiAgPiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2ltYWdlLWluZm8udHh0CisJY2F0ID4+ICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtaW5mby50eHQgPDxFTkQKKyR7QGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2V2YXJzKGQpfQorRU5ECisJaW1hZ2VzaXplPWBkdSAta3MgJHtJTUFHRV9ST09URlN9IHwgYXdrICd7IHByaW50ICQxIH0nYAorCWVjaG8gIklNQUdFU0laRSA9ICRpbWFnZXNpemUiID4+ICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vaW1hZ2UtaW5mby50eHQKKworCSMgQWRkIHNvbWUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorCWVjaG8gIiR7TUFDSElORX06ICR7SU1BR0VfQkFTRU5BTUV9IGNvbmZpZ3VyZWQgZm9yICR7RElTVFJPfSAke0RJU1RST19WRVJTSU9OfSIgPiAke0JVSUxESElTVE9SWV9ESVJfSU1BR0V9L2J1aWxkLWlkLnR4dAorCisJY2F0ID4+ICR7QlVJTERISVNUT1JZX0RJUl9JTUFHRX0vYnVpbGQtaWQudHh0IDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X2J1aWxkX2lkKGQpfQorRU5ECit9CisKK2J1aWxkaGlzdG9yeV9nZXRfc2RraW5mbygpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnQlVJTERISVNUT1JZX0ZFQVRVUkVTJywgJ3NkaycsICcxJywgJzAnLCBkKX0iID0gIjAiIF0gOyB0aGVuCisJCXJldHVybgorCWZpCisKKwlidWlsZGhpc3RvcnlfbGlzdF9maWxlcyAke1NES19PVVRQVVR9ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L2ZpbGVzLWluLXNkay50eHQKKworCSMgUmVjb3JkIHNvbWUgbWFjaGluZS1yZWFkYWJsZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBTREsKKwlwcmludGYgIiIgID4gJHtCVUlMREhJU1RPUllfRElSX1NES30vc2RrLWluZm8udHh0CisJY2F0ID4+ICR7QlVJTERISVNUT1JZX0RJUl9TREt9L3Nkay1pbmZvLnR4dCA8PEVORAorJHtAYnVpbGRoaXN0b3J5X2dldF9zZGt2YXJzKGQpfQorRU5ECisJc2Rrc2l6ZT1gZHUgLWtzICR7U0RLX09VVFBVVH0gfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJZWNobyAiU0RLU0laRSA9ICRzZGtzaXplIiA+PiAke0JVSUxESElTVE9SWV9ESVJfU0RLfS9zZGstaW5mby50eHQKK30KKworIyBCeSB1c2luZyBST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EIHdlIGdldCBpbiBhZnRlciB1bmluc3RhbGxhdGlvbiBvZgorIyB1bm5lZWRlZCBwYWNrYWdlcyBidXQgYmVmb3JlIHRoZSByZW1vdmFsIG9mIHBhY2thZ2luZyBmaWxlcworUk9PVEZTX1BPU1RVTklOU1RBTExfQ09NTUFORCArPSAiIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9pbWFnZSA7XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGhpc3RvcnlfZ2V0X2ltYWdlX2luc3RhbGxlZCA7ICIKKworSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCArPSAiIGJ1aWxkaGlzdG9yeV9nZXRfaW1hZ2VpbmZvIDsgIgorCisjIFdlIHdhbnQgdGhlc2UgdG8gYmUgdGhlIGxhc3QgcnVuIHNvIHRoYXQgd2UgZ2V0IGNhbGxlZCBhZnRlciBjb21wbGVtZW50YXJ5IHBhY2thZ2UgaW5zdGFsbGF0aW9uCitQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORF9hcHBlbmQgPSAiIGJ1aWxkaGlzdG9yeV9saXN0X2luc3RhbGxlZF9zZGtfdGFyZ2V0IDtcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZF90YXJnZXQgOyAiCitQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkRfYXBwZW5kID0gIiBidWlsZGhpc3RvcnlfbGlzdF9pbnN0YWxsZWRfc2RrX2hvc3QgO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkaGlzdG9yeV9nZXRfc2RrX2luc3RhbGxlZF9ob3N0IDsgIgorCitTREtfUE9TVFBST0NFU1NfQ09NTUFORCArPSAiYnVpbGRoaXN0b3J5X2dldF9zZGtpbmZvIDsgIgorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9idWlsZF9pZChkKToKKyAgICBpZiBkLmdldFZhcignQkJfV09SS0VSQ09OVEVYVCcsIFRydWUpICE9ICcxJzoKKyAgICAgICAgcmV0dXJuICIiCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgc3RhdHVzbGluZXMgPSBbXQorICAgIGZvciBmdW5jIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0JVSUxEQ0ZHX0ZVTkNTJywgbG9jYWxkYXRhKToKKyAgICAgICAgZyA9IGdsb2JhbHMoKQorICAgICAgICBpZiBmdW5jIG5vdCBpbiBnOgorICAgICAgICAgICAgYmIud2FybigiQnVpbGQgY29uZmlndXJhdGlvbiBmdW5jdGlvbiAnJXMnIGRvZXMgbm90IGV4aXN0IiAlIGZ1bmMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbGluZXMgPSBnW2Z1bmNdKGxvY2FsZGF0YSkKKyAgICAgICAgICAgIGlmIGZsaW5lczoKKyAgICAgICAgICAgICAgICBzdGF0dXNsaW5lcy5leHRlbmQoZmxpbmVzKQorCisgICAgc3RhdHVzaGVhZGVyID0gZC5nZXRWYXIoJ0JVSUxEQ0ZHX0hFQURFUicsIFRydWUpCisgICAgcmV0dXJuKCdcbiVzXG4lc1xuJyAlIChzdGF0dXNoZWFkZXIsICdcbicuam9pbihzdGF0dXNsaW5lcykpKQorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9tZXRhZGF0YV9yZXZzKGQpOgorICAgICMgV2Ugd2FudCBhbiBlYXNpbHkgbWFjaGluZS1yZWFkYWJsZSBmb3JtYXQgaGVyZSwgc28gZ2V0X2xheWVyc19icmFuY2hfcmV2IGlzbid0IHF1aXRlIHdoYXQgd2Ugd2FudAorICAgIGxheWVycyA9IChkLmdldFZhcigiQkJMQVlFUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1lZGFkYXRhX3JldnMgPSBbIiUtMTdzID0gJXM6JXMiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQorICAgIHJldHVybiAnXG4nLmpvaW4obWVkYWRhdGFfcmV2cykKKworZGVmIG91dHB1dHZhcnModmFycywgbGlzdHZhcnMsIGQpOgorICAgIHZhcnMgPSB2YXJzLnNwbGl0KCkKKyAgICBsaXN0dmFycyA9IGxpc3R2YXJzLnNwbGl0KCkKKyAgICByZXQgPSAiIgorICAgIGZvciB2YXIgaW4gdmFyczoKKyAgICAgICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHZhciBpbiBsaXN0dmFyczoKKyAgICAgICAgICAgICMgU3F1YXNoIG91dCBzcGFjZXMKKyAgICAgICAgICAgIHZhbHVlID0gb2UudXRpbHMuc3F1YXNoc3BhY2VzKHZhbHVlKQorICAgICAgICByZXQgKz0gIiVzID0gJXNcbiIgJSAodmFyLCB2YWx1ZSkKKyAgICByZXR1cm4gcmV0LnJzdHJpcCgnXG4nKQorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9pbWFnZXZhcnMoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgIHJldHVybiAiIgorICAgIGltYWdldmFycyA9ICJESVNUUk8gRElTVFJPX1ZFUlNJT04gVVNFUl9DTEFTU0VTIElNQUdFX0NMQVNTRVMgSU1BR0VfRkVBVFVSRVMgSU1BR0VfTElOR1VBUyBJTUFHRV9JTlNUQUxMIEJBRF9SRUNPTU1FTkRBVElPTlMgTk9fUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSBST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCBJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EIgorICAgIGxpc3R2YXJzID0gIlVTRVJfQ0xBU1NFUyBJTUFHRV9DTEFTU0VTIElNQUdFX0ZFQVRVUkVTIElNQUdFX0xJTkdVQVMgSU1BR0VfSU5TVEFMTCBCQURfUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKKyAgICByZXR1cm4gb3V0cHV0dmFycyhpbWFnZXZhcnMsIGxpc3R2YXJzLCBkKQorCitkZWYgYnVpbGRoaXN0b3J5X2dldF9zZGt2YXJzKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdCQl9XT1JLRVJDT05URVhUJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICByZXR1cm4gIiIKKyAgICBzZGt2YXJzID0gIkRJU1RSTyBESVNUUk9fVkVSU0lPTiBTREtfTkFNRSBTREtfVkVSU0lPTiBTREtNQUNISU5FIFNES0lNQUdFX0ZFQVRVUkVTIEJBRF9SRUNPTU1FTkRBVElPTlMgTk9fUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKKyAgICBsaXN0dmFycyA9ICJTREtJTUFHRV9GRUFUVVJFUyBCQURfUkVDT01NRU5EQVRJT05TIFBBQ0tBR0VfRVhDTFVERSIKKyAgICByZXR1cm4gb3V0cHV0dmFycyhzZGt2YXJzLCBsaXN0dmFycywgZCkKKworCitkZWYgYnVpbGRoaXN0b3J5X2dldF9jbWRsaW5lKGQpOgorICAgIGlmIHN5cy5hcmd2WzBdLmVuZHN3aXRoKCdiaW4vYml0YmFrZScpOgorICAgICAgICBiaW5jbWQgPSAnYml0YmFrZScKKyAgICBlbHNlOgorICAgICAgICBiaW5jbWQgPSBzeXMuYXJndlswXQorICAgIHJldHVybiAnJXMgJXMnICUgKGJpbmNtZCwgJyAnLmpvaW4oc3lzLmFyZ3ZbMTpdKSkKKworCitidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCgpIHsKKwlpZiBbICIkMyIgPSAiIiBdIDsgdGhlbgorCQljb21taXRvcHRzPSIke0JVSUxESElTVE9SWV9ESVJ9LyAtLWFsbG93LWVtcHR5IgorCQlpdGVtPSJObyBjaGFuZ2VzIgorCWVsc2UKKwkJY29tbWl0b3B0cz0iJDMgbWV0YWRhdGEtcmV2cyIKKwkJaXRlbT0iJDMiCisJZmkKKwlpZiBbICIke0JVSUxESElTVE9SWV9CVUlMRF9GQUlMVVJFU30iID0gIjAiIF0gOyB0aGVuCisJCXJlc3VsdD0ic3VjY2VlZGVkIgorCWVsc2UKKwkJcmVzdWx0PSJmYWlsZWQiCisJZmkKKwljYXNlICR7QlVJTERISVNUT1JZX0JVSUxEX0lOVEVSUlVQVEVEfSBpbgorCQkxKQorCQkJcmVzdWx0PSIkcmVzdWx0IChpbnRlcnJ1cHRlZCkiCisJCQk7OworCQkyKQorCQkJcmVzdWx0PSIkcmVzdWx0IChmb3JjZSBpbnRlcnJ1cHRlZCkiCisJCQk7OworCWVzYWMKKwljb21taXRtc2dmaWxlPWBta3RlbXBgCisJY2F0ID4gJGNvbW1pdG1zZ2ZpbGUgPDwgRU5ECiskaXRlbTogQnVpbGQgJHtCVUlMRE5BTUV9IG9mICR7RElTVFJPfSAke0RJU1RST19WRVJTSU9OfSBmb3IgbWFjaGluZSAke01BQ0hJTkV9IG9uICQyCisKK2NtZDogJDEKKworcmVzdWx0OiAkcmVzdWx0CisKK21ldGFkYXRhIHJldmlzaW9uczoKK0VORAorCWNhdCAke0JVSUxESElTVE9SWV9ESVJ9L21ldGFkYXRhLXJldnMgPj4gJGNvbW1pdG1zZ2ZpbGUKKwlnaXQgY29tbWl0ICRjb21taXRvcHRzIC1GICRjb21taXRtc2dmaWxlIC0tYXV0aG9yICIke0JVSUxESElTVE9SWV9DT01NSVRfQVVUSE9SfSIgPiAvZGV2L251bGwKKwlybSAkY29tbWl0bXNnZmlsZQorfQorCitidWlsZGhpc3RvcnlfY29tbWl0KCkgeworCWlmIFsgISAtZCAke0JVSUxESElTVE9SWV9ESVJ9IF0gOyB0aGVuCisJCSMgQ29kZSBhYm92ZSB0aGF0IGNyZWF0ZXMgdGhpcyBkaXIgbmV2ZXIgZXhlY3V0ZWQsIHNvIHRoZXJlIGNhbid0IGJlIGFueXRoaW5nIHRvIGNvbW1pdAorCQlyZXR1cm4KKwlmaQorCisJIyBDcmVhdGUgYSBtYWNoaW5lLXJlYWRhYmxlIGxpc3Qgb2YgbWV0YWRhdGEgcmV2aXNpb25zIGZvciBlYWNoIGxheWVyCisJY2F0ID4gJHtCVUlMREhJU1RPUllfRElSfS9tZXRhZGF0YS1yZXZzIDw8RU5ECiske0BidWlsZGhpc3RvcnlfZ2V0X21ldGFkYXRhX3JldnMoZCl9CitFTkQKKworCSggY2QgJHtCVUlMREhJU1RPUllfRElSfS8KKwkJIyBJbml0aWFsaXNlIHRoZSByZXBvIGlmIG5lY2Vzc2FyeQorCQlpZiBbICEgLWQgLmdpdCBdIDsgdGhlbgorCQkJZ2l0IGluaXQgLXEKKwkJZWxzZQorCQkJZ2l0IHRhZyAtZiBidWlsZC1taW51cy0zIGJ1aWxkLW1pbnVzLTIgPiAvZGV2L251bGwgMj4mMSB8fCB0cnVlCisJCQlnaXQgdGFnIC1mIGJ1aWxkLW1pbnVzLTIgYnVpbGQtbWludXMtMSA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKwkJCWdpdCB0YWcgLWYgYnVpbGQtbWludXMtMSA+IC9kZXYvbnVsbCAyPiYxIHx8IHRydWUKKwkJZmkKKwkJIyBJZiB0aGUgdXNlciBoYXNuJ3Qgc2V0IHVwIHRoZWlyIG5hbWUvZW1haWwsIHNldCBzb21lIGRlZmF1bHRzCisJCSMganVzdCBmb3IgdGhpcyByZXBvIChvdGhlcndpc2UgdGhlIGNvbW1pdCB3aWxsIGZhaWwgd2l0aCBvbGRlcgorCQkjIHZlcnNpb25zIG9mIGdpdCkKKwkJaWYgISBnaXQgY29uZmlnIHVzZXIuZW1haWwgPiAvZGV2L251bGwgOyB0aGVuCisJCQlnaXQgY29uZmlnIC0tbG9jYWwgdXNlci5lbWFpbCAiYnVpbGRoaXN0b3J5QCR7RElTVFJPfSIKKwkJZmkKKwkJaWYgISBnaXQgY29uZmlnIHVzZXIubmFtZSA+IC9kZXYvbnVsbCA7IHRoZW4KKwkJCWdpdCBjb25maWcgLS1sb2NhbCB1c2VyLm5hbWUgImJ1aWxkaGlzdG9yeSIKKwkJZmkKKwkJIyBDaGVjayBpZiB0aGVyZSBhcmUgbmV3L2NoYW5nZWQgZmlsZXMgdG8gY29tbWl0IChvdGhlciB0aGFuIG1ldGFkYXRhLXJldnMpCisJCXJlcG9zdGF0dXM9YGdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCBncmVwIC12ICIgbWV0YWRhdGEtcmV2cyQiYAorCQlIT1NUTkFNRT1gaG9zdG5hbWUgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCQlDTURMSU5FPSIke0BidWlsZGhpc3RvcnlfZ2V0X2NtZGxpbmUoZCl9IgorCQlpZiBbICIkcmVwb3N0YXR1cyIgIT0gIiIgXSA7IHRoZW4KKwkJCWdpdCBhZGQgLUEgLgorCQkJIyBwb3JjZWxhaW4gb3V0cHV0IGxvb2tzIGxpa2UgIj8/IHBhY2thZ2VzL2Zvby9iYXIiCisJCQkjIEVuc3VyZSB3ZSBjb21taXQgbWV0YWRhdGEtcmV2cyB3aXRoIHRoZSBmaXJzdCBjb21taXQKKwkJCWZvciBlbnRyeSBpbiBgZWNobyAiJHJlcG9zdGF0dXMiIHwgYXdrICd7cHJpbnQgJDJ9JyB8IGF3ayAtRi8gJ3twcmludCAkMX0nIHwgc29ydCB8IHVuaXFgIDsgZG8KKwkJCQlidWlsZGhpc3Rvcnlfc2luZ2xlX2NvbW1pdCAiJENNRExJTkUiICIkSE9TVE5BTUUiICIkZW50cnkiCisJCQlkb25lCisJCQlnaXQgZ2MgLS1hdXRvIC0tcXVpZXQKKwkJZWxzZQorCQkJYnVpbGRoaXN0b3J5X3NpbmdsZV9jb21taXQgIiRDTURMSU5FIiAiJEhPU1ROQU1FIgorCQlmaQorCQlpZiBbICIke0JVSUxESElTVE9SWV9QVVNIX1JFUE99IiAhPSAiIiBdIDsgdGhlbgorCQkJZ2l0IHB1c2ggLXEgJHtCVUlMREhJU1RPUllfUFVTSF9SRVBPfQorCQlmaSkgfHwgdHJ1ZQorfQorCitweXRob24gYnVpbGRoaXN0b3J5X2V2ZW50aGFuZGxlcigpIHsKKyAgICBpZiBlLmRhdGEuZ2V0VmFyKCdCVUlMREhJU1RPUllfRkVBVFVSRVMnLCBUcnVlKS5zdHJpcCgpOgorICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCJCVUlMREhJU1RPUllfQ09NTUlUIiwgVHJ1ZSkgPT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiV3JpdGluZyBidWlsZGhpc3RvcnkiKQorICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JVSUxESElTVE9SWV9CVUlMRF9GQUlMVVJFUycsIHN0cihlLl9mYWlsdXJlcykpCisgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IGdldGF0dHIoZSwgJ19pbnRlcnJ1cHRlZCcsIDApCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdCVUlMREhJU1RPUllfQlVJTERfSU5URVJSVVBURUQnLCBzdHIoaW50ZXJydXB0ZWQpKQorICAgICAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJidWlsZGhpc3RvcnlfY29tbWl0IiwgbG9jYWxkYXRhKQorfQorCithZGRoYW5kbGVyIGJ1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXIKK2J1aWxkaGlzdG9yeV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKKworCisjIEZJWE1FIHRoaXMgb3VnaHQgdG8gYmUgbW92ZWQgaW50byB0aGUgZmV0Y2hlcgorZGVmIF9nZXRfc3JjcmV2X3ZhbHVlcyhkKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHZlcnNpb24gc3RyaW5ncyBmb3IgdGhlIGN1cnJlbnQgcmVjaXBlCisgICAgIiIiCisKKyAgICBzY21zID0gW10KKyAgICBmZXRjaGVyID0gYmIuZmV0Y2guRmV0Y2goZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpLCBkKQorICAgIHVybGRhdGEgPSBmZXRjaGVyLnVkCisgICAgZm9yIHUgaW4gdXJsZGF0YToKKyAgICAgICAgaWYgdXJsZGF0YVt1XS5tZXRob2Quc3VwcG9ydHNfc3JjcmV2KCk6CisgICAgICAgICAgICBzY21zLmFwcGVuZCh1KQorCisgICAgYXV0b2luY190ZW1wbCA9ICdBVVRPSU5DKycKKyAgICBkaWN0X3NyY3JldnMgPSB7fQorICAgIGRpY3RfdGFnX3NyY3JldnMgPSB7fQorICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgdWQgPSB1cmxkYXRhW3NjbV0KKyAgICAgICAgZm9yIG5hbWUgaW4gdWQubmFtZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV2ID0gdWQubWV0aG9kLnNvcnRhYmxlX3JldmlzaW9uKHVkLCBkLCBuYW1lKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAjIHN1cHBvcnQgb2xkIGJpdGJha2UgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICByZXYgPSB1ZC5tZXRob2Quc29ydGFibGVfcmV2aXNpb24oc2NtLCB1ZCwgZCwgbmFtZSkKKyAgICAgICAgICAgICMgQ2xlYW4gdGhpcyB1cCB3aGVuIHdlIG5leHQgYnVtcCBiaXRiYWtlIHZlcnNpb24KKyAgICAgICAgICAgIGlmIHR5cGUocmV2KSAhPSBzdHI6CisgICAgICAgICAgICAgICAgYXV0b2luYywgcmV2ID0gcmV2CisgICAgICAgICAgICBlbGlmIHJldi5zdGFydHN3aXRoKGF1dG9pbmNfdGVtcGwpOgorICAgICAgICAgICAgICAgIHJldiA9IHJldltsZW4oYXV0b2luY190ZW1wbCk6XQorICAgICAgICAgICAgZGljdF9zcmNyZXZzW25hbWVdID0gcmV2CisgICAgICAgICAgICBpZiAndGFnJyBpbiB1ZC5wYXJtOgorICAgICAgICAgICAgICAgIHRhZyA9IHVkLnBhcm1bJ3RhZyddOworICAgICAgICAgICAgICAgIGtleSA9IG5hbWUrJ18nK3RhZworICAgICAgICAgICAgICAgIGRpY3RfdGFnX3NyY3JldnNba2V5XSA9IHJldgorICAgIHJldHVybiAoZGljdF9zcmNyZXZzLCBkaWN0X3RhZ19zcmNyZXZzKQorCitkb19mZXRjaFtwb3N0ZnVuY3NdICs9ICJ3cml0ZV9zcmNyZXYiCitkb19mZXRjaFt2YXJkZXBzZXhjbHVkZV0gKz0gIndyaXRlX3NyY3JldiIKK3B5dGhvbiB3cml0ZV9zcmNyZXYoKSB7CisgICAgcGtnaGlzdGRpciA9IGQuZ2V0VmFyKCdCVUlMREhJU1RPUllfRElSX1BBQ0tBR0UnLCBUcnVlKQorICAgIHNyY3JldmZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnaGlzdGRpciwgJ2xhdGVzdF9zcmNyZXYnKQorCisgICAgc3JjcmV2cywgdGFnX3NyY3JldnMgPSBfZ2V0X3NyY3Jldl92YWx1ZXMoZCkKKyAgICBpZiBzcmNyZXZzOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGtnaGlzdGRpcik6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnaGlzdGRpcikKKyAgICAgICAgb2xkX3RhZ19zcmNyZXZzID0ge30KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3JjcmV2ZmlsZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjcmV2ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMgdGFnXycpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoIj0iLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5LnJlcGxhY2UoJyMgdGFnXycsICcnKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyInLCAnJykuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3RhZ19zcmNyZXZzW2tleV0gPSB2YWx1ZQorICAgICAgICB3aXRoIG9wZW4oc3JjcmV2ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgRmFsc2UpIG9yICdJTlZBTElEJworICAgICAgICAgICAgaWYgb3JpZ19zcmNyZXYgIT0gJ0lOVkFMSUQnOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgU1JDUkVWID0gIiVzIlxuJyAlIG9yaWdfc3JjcmV2KQorICAgICAgICAgICAgaWYgbGVuKHNyY3JldnMpID4gMToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgc3JjcmV2IGluIHNyY3JldnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgb3JpZ19zcmNyZXYgPSBkLmdldFZhcignU1JDUkVWXyVzJyAlIG5hbWUsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBvcmlnX3NyY3JldjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJyMgU1JDUkVWXyVzID0gIiVzIlxuJyAlIChuYW1lLCBvcmlnX3NyY3JldikpCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJ1NSQ1JFVl8lcyA9ICIlcyJcbicgJSAobmFtZSwgc3JjcmV2KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnU1JDUkVWID0gIiVzIlxuJyAlIHNyY3JldnMuaXRlcnZhbHVlcygpLm5leHQoKSkKKyAgICAgICAgICAgIGlmIGxlbih0YWdfc3JjcmV2cykgPiAwOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCBzcmNyZXYgaW4gdGFnX3NyY3JldnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgnIyB0YWdfJXMgPSAiJXMiXG4nICUgKG5hbWUsIHNyY3JldikpCisgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gb2xkX3RhZ19zcmNyZXZzIGFuZCBvbGRfdGFnX3NyY3JldnNbbmFtZV0gIT0gc3JjcmV2OgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlJldmlzaW9uIGZvciB0YWcgJXMgaW4gcGFja2FnZSAlcyB3YXMgY2hhbmdlZCBzaW5jZSBsYXN0IGJ1aWxkIChmcm9tICVzIHRvICVzKSIgJSAobmFtZSwgcGtnLCBvbGRfdGFnX3NyY3JldnNbbmFtZV0sIHNyY3JldikpCisKKyAgICBlbHNlOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzcmNyZXZmaWxlKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzcmNyZXZmaWxlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMtc3VtbWFyeS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZWFkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvYnVpbGRzdGF0cy1zdW1tYXJ5LmJiY2xhc3MKQEAgLTAsMCArMSwzNyBAQAorIyBTdW1tYXJpemUgc3N0YXRlIHVzYWdlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1aWxkCitweXRob24gYnVpbGRzdGF0c19zdW1tYXJ5ICgpIHsKKyAgICBpbXBvcnQgY29sbGVjdGlvbnMKKyAgICBpbXBvcnQgb3MucGF0aAorCisgICAgYm4gPSBnZXRfYm4oZSkKKyAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJzZGlyKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBzc3RhdGV0YXNrcyA9IChlLmRhdGEuZ2V0VmFyKCdTU1RBVEVUQVNLUycsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgYnVpbHQgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsYW1iZGE6IFtzZXQoKSwgc2V0KCldKQorICAgIGZvciBwZiBpbiBvcy5saXN0ZGlyKGJzZGlyKToKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgcGYpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHRhc2tkaXIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0YXNrcyA9IG9zLmxpc3RkaXIodGFza2RpcikKKyAgICAgICAgZm9yIHQgaW4gc3N0YXRldGFza3M6CisgICAgICAgICAgICBub19zc3RhdGUsIHNzdGF0ZSA9IGJ1aWx0W3RdCisgICAgICAgICAgICBpZiB0IGluIHRhc2tzOgorICAgICAgICAgICAgICAgIG5vX3NzdGF0ZS5hZGQocGYpCisgICAgICAgICAgICBlbGlmIHQgKyAnX3NldHNjZW5lJyBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBzc3RhdGUuYWRkKHBmKQorCisgICAgaGVhZGVyX3ByaW50ZWQgPSBGYWxzZQorICAgIGZvciB0IGluIHNzdGF0ZXRhc2tzOgorICAgICAgICBub19zc3RhdGUsIHNzdGF0ZSA9IGJ1aWx0W3RdCisgICAgICAgIGlmIG5vX3NzdGF0ZSB8IHNzdGF0ZToKKyAgICAgICAgICAgIGlmIG5vdCBoZWFkZXJfcHJpbnRlZDoKKyAgICAgICAgICAgICAgICBoZWFkZXJfcHJpbnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJCdWlsZCBjb21wbGV0aW9uIHN1bW1hcnk6IikKKworICAgICAgICAgICAgYmIubm90ZSgiICB7MH06IHsxfSUgc3N0YXRlIHJldXNlICh7Mn0gc2V0c2NlbmUsIHszfSBzY3JhdGNoKSIuZm9ybWF0KHQsIDEwMCpsZW4oc3N0YXRlKS8obGVuKHNzdGF0ZSkrbGVuKG5vX3NzdGF0ZSkpLCBsZW4oc3N0YXRlKSwgbGVuKG5vX3NzdGF0ZSkpKQorfQorYWRkaGFuZGxlciBidWlsZHN0YXRzX3N1bW1hcnkKK2J1aWxkc3RhdHNfc3VtbWFyeVtldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2J1aWxkc3RhdHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlYzU3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9idWlsZHN0YXRzLmJiY2xhc3MKQEAgLTAsMCArMSwyNzAgQEAKK0JVSUxEU1RBVFNfQkFTRSA9ICIke1RNUERJUn0vYnVpbGRzdGF0cy8iCitCVUlMRFNUQVRTX0JORklMRSA9ICIke0JVSUxEU1RBVFNfQkFTRX0vLmJ1aWxkbmFtZSIKK0JVSUxEU1RBVFNfREVWRklMRSA9ICIke0JVSUxEU1RBVFNfQkFTRX0vLmRldmljZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQnVpbGQgc3RhdGlzdGljcyBnYXRoZXJpbmcuCisjCisjIFRoZSBDUFUgYW5kIFRpbWUgZ2F0aGVyaW5nL3RyYWNraW5nIGZ1bmN0aW9ucyBhbmQgYmJldmVudCBpbnNwaXJhdGlvbgorIyB3ZXJlIHdyaXR0ZW4gYnkgQ2hyaXN0b3BoZXIgTGFyc29uIGFuZCBjYW4gYmUgc2VlbiBoZXJlOgorIyBodHRwOi8va2VyZ290aC5wYXN0ZXkubmV0LzE0MjgxMworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIGdldF9wcm9jZXNzX2NwdXRpbWUocGlkKToKKyAgICB3aXRoIG9wZW4oIi9wcm9jLyVkL3N0YXQiICUgcGlkLCAiciIpIGFzIGY6CisgICAgICAgIGZpZWxkcyA9IGYucmVhZGxpbmUoKS5yc3RyaXAoKS5zcGxpdCgpCisgICAgIyAxMzogdXRpbWUsIDE0OiBzdGltZSwgMTU6IGN1dGltZSwgMTY6IGNzdGltZQorICAgIHJldHVybiBzdW0oaW50KGZpZWxkKSBmb3IgZmllbGQgaW4gZmllbGRzWzEzOjE2XSkKKworZGVmIGdldF9jcHV0aW1lKCk6CisgICAgd2l0aCBvcGVuKCIvcHJvYy9zdGF0IiwgInIiKSBhcyBmOgorICAgICAgICBmaWVsZHMgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKVsxOl0KKyAgICByZXR1cm4gc3VtKGludChmaWVsZCkgZm9yIGZpZWxkIGluIGZpZWxkcykKKworZGVmIHNldF9ibihlKToKKyAgICBibiA9IGUuZ2V0UGtncygpWzBdICsgIi0iICsgZS5kYXRhLmdldFZhcignTUFDSElORScsIFRydWUpCisgICAgdHJ5OgorICAgICAgICBvcy5yZW1vdmUoZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSkKKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICB3aXRoIG9wZW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CTkZJTEUnLCBUcnVlKSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKG9zLnBhdGguam9pbihibiwgZS5kYXRhLmdldFZhcignQlVJTEROQU1FJywgVHJ1ZSkpKQorCitkZWYgZ2V0X2JuKGUpOgorICAgIHdpdGggb3BlbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JORklMRScsIFRydWUpKSBhcyBmOgorICAgICAgICBibiA9IGYucmVhZGxpbmUoKQorICAgIHJldHVybiBibgorCitkZWYgc2V0X2RldmljZShlKToKKyAgICB0bXBkaXIgPSBlLmRhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGRldmZpbGUgPSBlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0RFVkZJTEUnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgb3MucmVtb3ZlKGRldmZpbGUpCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgV2UgbG9vayBmb3IgdGhlIHZvbHVtZSBUTVBESVIgbGl2ZXMgb24uIFRvIGRvIGFsbCBkaXNrcyB3b3VsZCBtYWtlIGxpdHRsZQorICAgICMgc2Vuc2UgYW5kIG5vdCBnaXZlIHVzIGFueSBwYXJ0aWN1bGFybHkgdXNlZnVsIGRhdGEuIEluIHRoZW9yeSB3ZSBjb3VsZCBkbworICAgICMgc29tZXRoaW5nIGxpa2Ugc3RpY2sgRExfRElSIG9uIGEgZGlmZmVyZW50IHBhcnRpdGlvbiBhbmQgdGhpcyB3b3VsZAorICAgICMgdGhyb3cgc3RhdHMgZ2F0aGVyaW5nIG9mZi4gVGhlIHNhbWUgZ29lcyB3aXRoIFNTVEFURV9ESVIuIEhvd2V2ZXIsIGxldCdzCisgICAgIyBnZXQgdGhlIGJhc2ljcyBpbiBoZXJlIGFuZCB3b3JrIG9uIHRoZSBjb3JuZXJjYXNlcyBsYXRlci4KKyAgICAjIEEgbm90ZS4gL3Byb2MvZGlza3N0YXRzIGRvZXMgbm90IGNvbnRhaW4gaW5mbyBvbiBlbmNyeXB0ZnMsIHRtcGZzLCBldGMuCisgICAgIyBJZiB3ZSBlbmQgdXAgaGl0dGluZyBvbmUgb2YgdGhlc2UgZnMsIHdlJ2xsIGp1c3Qgc2tpcCBkaXNrc3RhdHMgY29sbGVjdGlvbi4KKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgZGV2aWNlID0gb3Muc3RhdCh0bXBkaXIpCisgICAgbWFqb3JkZXYgPSBvcy5tYWpvcihsb25nKGRldmljZS5zdF9kZXYpKQorICAgIG1pbm9yZGV2ID0gb3MubWlub3IobG9uZyhkZXZpY2Uuc3RfZGV2KSkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBCdWcgMTcwMDoKKyAgICAjIEJlY2F1c2UgdG1wZnMvZW5jcnlwdGZzL3JhbWZzIGV0YyBpbnNlcnRzIG5vIGVudHJ5IGluIC9wcm9jL2Rpc2tzdGF0cworICAgICMgd2Ugc2V0IHJkZXYgdG8gTm9Mb2dpY2FsRGV2aWNlIGFuZCBzZWFyY2ggZm9yIGl0IGxhdGVyLiBJZiB3ZSBmaW5kIE5MRAorICAgICMgd2UgZG8gbm90IGNvbGxlY3QgZGlza3N0YXRzIGFzIHRoZSBtZXRob2QgdG8gY29sbGVjdCBtZWFuaW5nZnVsIHN0YXRpc3RpY3MKKyAgICAjIGZvciB0aGVzZSBmcyB0eXBlcyByZXF1aXJlcyBhIGJpdCBtb3JlIHJlc2VhcmNoLgorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICByZGV2ID0gIk5vTG9naWNhbERldmljZSIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiL3Byb2MvZGlza3N0YXRzIiwgInIiKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBtYWpvcmRldiA9PSBpbnQobGluZS5zcGxpdCgpWzBdKSBhbmQgbWlub3JkZXYgPT0gaW50KGxpbmUuc3BsaXQoKVsxXSk6CisgICAgICAgICAgICAgICAgICAgIHJkZXYgPSBsaW5lLnNwbGl0KClbMl0KKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICB3aXRoIG9wZW4oZGV2ZmlsZSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHJkZXYpCisKK2RlZiBnZXRfZGV2aWNlKGUpOgorICAgIHdpdGggb3BlbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0RFVkZJTEUnLCBUcnVlKSkgYXMgZjoKKyAgICAgICAgZGV2aWNlID0gZi5yZWFkbGluZSgpCisgICAgcmV0dXJuIGRldmljZQorCitkZWYgZ2V0X2Rpc2tzdGF0cyhkZXYpOgorICAgIGltcG9ydCBpdGVydG9vbHMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBGb3IgaW5mbyBvbiB3aGF0IHRoZXNlIGFyZSwgc2VlIGtlcm5lbCBkb2MgZmlsZSBpb3N0YXRzLnR4dAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICBEU1RBVF9LRVlTID0gWydSZWFkc0NvbXAnLCAnUmVhZHNNZXJnZWQnLCAnU2VjdFJlYWQnLCAnVGltZVJlYWRzJywgJ1dyaXRlc0NvbXAnLCAnU2VjdFdyaXRlJywgJ1RpbWVXcml0ZScsICdJT2luUHJvZ3Jlc3MnLCAnVGltZUlPJywgJ1dUaW1lSU8nXQorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKCIvcHJvYy9kaXNrc3RhdHMiLCAiciIpIGFzIGY6CisgICAgICAgICAgICBmb3IgeCBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGRldiBpbiB4OgorICAgICAgICAgICAgICAgICAgICBkaXNrc3RhdHNfdmFsID0geC5yc3RyaXAoKS5zcGxpdCgpWzQ6XQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybgorICAgIGRpc2tzdGF0cyA9IGRpY3QoaXRlcnRvb2xzLml6aXAoRFNUQVRfS0VZUywgZGlza3N0YXRzX3ZhbCkpCisgICAgcmV0dXJuIGRpc2tzdGF0cworCitkZWYgc2V0X2Rpc2tkYXRhKHZhciwgZGV2LCBkYXRhKToKKyAgICBkYXRhLnNldFZhcih2YXIsIGdldF9kaXNrc3RhdHMoZGV2KSkKKworZGVmIGdldF9kaXNrZGF0YSh2YXIsIGRldiwgZGF0YSk6CisgICAgb2xkZGlza2RhdGEgPSBkYXRhLmdldFZhcih2YXIsIEZhbHNlKQorICAgIGRpc2tkYXRhID0ge30KKyAgICBpZiBvbGRkaXNrZGF0YSBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBuZXdkaXNrZGF0YSA9IGdldF9kaXNrc3RhdHMoZGV2KQorICAgIGZvciBrZXkgaW4gb2xkZGlza2RhdGEuaXRlcmtleXMoKToKKyAgICAgICAgZGlza2RhdGFbIlN0YXJ0IitrZXldID0gc3RyKGludChvbGRkaXNrZGF0YVtrZXldKSkKKyAgICAgICAgZGlza2RhdGFbIkVuZCIra2V5XSA9IHN0cihpbnQobmV3ZGlza2RhdGFba2V5XSkpCisgICAgcmV0dXJuIGRpc2tkYXRhCisKK2RlZiBzZXRfdGltZWRhdGEodmFyLCBkYXRhLCBzZXJ2ZXJfdGltZT1Ob25lKToKKyAgICBpbXBvcnQgdGltZQorICAgIGlmIHNlcnZlcl90aW1lOgorICAgICAgICB0aW1lID0gc2VydmVyX3RpbWUKKyAgICBlbHNlOgorICAgICAgICB0aW1lID0gdGltZS50aW1lKCkKKyAgICBjcHV0aW1lID0gZ2V0X2NwdXRpbWUoKQorICAgIHByb2N0aW1lID0gZ2V0X3Byb2Nlc3NfY3B1dGltZShvcy5nZXRwaWQoKSkKKyAgICBkYXRhLnNldFZhcih2YXIsICh0aW1lLCBjcHV0aW1lLCBwcm9jdGltZSkpCisKK2RlZiBnZXRfdGltZWRhdGEodmFyLCBkYXRhLCBzZXJ2ZXJfdGltZT1Ob25lKToKKyAgICBpbXBvcnQgdGltZQorICAgIHRpbWVkYXRhID0gZGF0YS5nZXRWYXIodmFyLCBGYWxzZSkKKyAgICBpZiB0aW1lZGF0YSBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBvbGR0aW1lLCBvbGRjcHUsIG9sZHByb2MgPSB0aW1lZGF0YQorICAgIHByb2NkaWZmID0gZ2V0X3Byb2Nlc3NfY3B1dGltZShvcy5nZXRwaWQoKSkgLSBvbGRwcm9jCisgICAgY3B1ZGlmZiA9IGdldF9jcHV0aW1lKCkgLSBvbGRjcHUKKyAgICBpZiBzZXJ2ZXJfdGltZToKKyAgICAgICAgZW5kX3RpbWUgPSBzZXJ2ZXJfdGltZQorICAgIGVsc2U6CisgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkKKyAgICB0aW1lZGlmZiA9IGVuZF90aW1lIC0gb2xkdGltZQorICAgIGlmIGNwdWRpZmYgPiAwOgorICAgICAgICBjcHVwZXJjID0gZmxvYXQocHJvY2RpZmYpICogMTAwIC8gY3B1ZGlmZgorICAgIGVsc2U6CisgICAgICAgIGNwdXBlcmMgPSBOb25lCisgICAgcmV0dXJuIHRpbWVkaWZmLCBjcHVwZXJjCisKK2RlZiB3cml0ZV90YXNrX2RhdGEoc3RhdHVzLCBsb2dmaWxlLCBkZXYsIGUpOgorICAgIGJuID0gZ2V0X2JuKGUpCisgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4obG9nZmlsZSksICJhIikgYXMgZjoKKyAgICAgICAgdGltZWRhdGEgPSBnZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfdGFzayIsIGUuZGF0YSwgZS50aW1lKQorICAgICAgICBpZiB0aW1lZGF0YToKKyAgICAgICAgICAgIGVsYXBzZWR0aW1lLCBjcHUgPSB0aW1lZGF0YQorICAgICAgICAgICAgZi53cml0ZShiYi5kYXRhLmV4cGFuZCgiJHtQRn06ICVzOiBFbGFwc2VkIHRpbWU6ICUwLjJmIHNlY29uZHMgXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLnRhc2ssIGVsYXBzZWR0aW1lKSwgZS5kYXRhKSkKKyAgICAgICAgICAgIGlmIGNwdToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJDUFUgdXNhZ2U6ICUwLjFmJSUgXG4iICUgY3B1KQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgSGVyZSB3ZSBnYXRoZXIgdXAgZGlzayBkYXRhLiBJbiBhbiBlZmZvcnQgdG8gYXZvaWQgbHlpbmcgd2l0aCBzdGF0cworICAgICAgICAjIEkgZG8gYSBiYXJlIG1pbmltdW0gb2YgYW5hbHlzaXMgb2YgY29sbGVjdGVkIGRhdGEuCisgICAgICAgICMgVGhlIHNpbXBsZSBmYWN0IGlzLCBkb2luZyBkaXNrIGlvIGNvbGxlY3Rpb24gb24gYSBwZXIgcHJvY2VzcyBiYXNpcworICAgICAgICAjIHdpdGhvdXQgZWZmZWN0aW5nIGJ1aWxkIHRpbWUgd291bGQgYmUgZGlmZmljdWx0LgorICAgICAgICAjIEZvciB0aGUgYmVzdCBpbmZvcm1hdGlvbiwgcnVubmluZyB0aGluZ3Mgd2l0aCBCQl9UT1RBTF9USFJFQURTID0gIjEiCisgICAgICAgICMgd291bGQgcmV0dXJuIGFjY3VyYXRlIHBlciB0YXNrIHJlc3VsdHMuCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgaWYgZGV2ICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgZGlza2RhdGEgPSBnZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfdGFzayIsIGRldiwgZS5kYXRhKQorICAgICAgICAgICAgaWYgZGlza2RhdGE6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoZGlza2RhdGEuaXRlcmtleXMoKSk6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoa2V5ICsgIjogIiArIGRpc2tkYXRhW2tleV0gKyAiXG4iKQorICAgICAgICBpZiBzdGF0dXMgaXMgInBhc3NlZCI6CisgICAgICAgICAgICBmLndyaXRlKCJTdGF0dXM6IFBBU1NFRCBcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmLndyaXRlKCJTdGF0dXM6IEZBSUxFRCBcbiIpCisgICAgICAgIGYud3JpdGUoIkVuZGVkOiAlMC4yZiBcbiIgJSBlLnRpbWUpCisKK3B5dGhvbiBydW5fYnVpbGRzdGF0cyAoKSB7CisgICAgaW1wb3J0IGJiLmJ1aWxkCisgICAgaW1wb3J0IGJiLmV2ZW50CisgICAgaW1wb3J0IGJiLmRhdGEKKyAgICBpbXBvcnQgdGltZSwgc3VicHJvY2VzcywgcGxhdGZvcm0KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgYXQgZmlyc3QgcGFzcyBtYWtlIHRoZSBidWlsZHN0YXRzIGhlcmlhcmNoeSBhbmQgdGhlbgorICAgICAgICAjIHNldCB0aGUgYnVpbGRuYW1lCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSkpCisgICAgICAgIHNldF9ibihlKQorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBzZXRfZGV2aWNlKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKworICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihic2RpcikKKyAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgc2V0X2Rpc2tkYXRhKCJfX2Rpc2tkYXRhX2J1aWxkIiwgZGV2aWNlLCBlLmRhdGEpCisgICAgICAgIHNldF90aW1lZGF0YSgiX190aW1lZGF0YV9idWlsZCIsIGUuZGF0YSkKKyAgICAgICAgYnVpbGRfdGltZSA9IG9zLnBhdGguam9pbihic2RpciwgImJ1aWxkX3N0YXRzIikKKyAgICAgICAgIyB3cml0ZSBzdGFydCBvZiBidWlsZCBpbnRvIGJ1aWxkX3RpbWUKKyAgICAgICAgd2l0aCBvcGVuKGJ1aWxkX3RpbWUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIGhvc3RfaW5mbyA9IHBsYXRmb3JtLnVuYW1lKCkKKyAgICAgICAgICAgIGYud3JpdGUoIkhvc3QgSW5mbzogIikKKyAgICAgICAgICAgIGZvciB4IGluIGhvc3RfaW5mbzoKKyAgICAgICAgICAgICAgICBpZiB4OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHggKyAiICIpCisgICAgICAgICAgICBmLndyaXRlKCJcbiIpCisgICAgICAgICAgICBmLndyaXRlKCJCdWlsZCBTdGFydGVkOiAlMC4yZiBcbiIgJSB0aW1lLnRpbWUoKSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICBidWlsZF90aW1lID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICB3aXRoIG9wZW4oYnVpbGRfdGltZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICAjIFdyaXRlIGJ1aWxkIHN0YXRpc3RpY3MgZm9yIHRoZSBidWlsZAorICAgICAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICAgICB0aW1lZGF0YSA9IGdldF90aW1lZGF0YSgiX190aW1lZGF0YV9idWlsZCIsIGUuZGF0YSkKKyAgICAgICAgICAgIGlmIHRpbWVkYXRhOgorICAgICAgICAgICAgICAgIHRpbWUsIGNwdSA9IHRpbWVkYXRhCisgICAgICAgICAgICAgICAgIyB3cml0ZSBlbmQgb2YgYnVpbGQgYW5kIGNwdSB1c2VkIGludG8gYnVpbGRfdGltZQorICAgICAgICAgICAgICAgIGYud3JpdGUoIkVsYXBzZWQgdGltZTogJTAuMmYgc2Vjb25kcyBcbiIgJSAodGltZSkpCisgICAgICAgICAgICAgICAgaWYgY3B1OgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJDUFUgdXNhZ2U6ICUwLjFmJSUgXG4iICUgY3B1KQorICAgICAgICAgICAgaWYgZGV2aWNlICE9ICJOb0xvZ2ljYWxEZXZpY2UiOgorICAgICAgICAgICAgICAgIGRpc2tpbyA9IGdldF9kaXNrZGF0YSgiX19kaXNrZGF0YV9idWlsZCIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICAgICAgICAgIGlmIGRpc2tpbzoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBzb3J0ZWQoZGlza2lvLml0ZXJrZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgZGlza2lvW2tleV0gKyAiXG4iKQorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrU3RhcnRlZCk6CisgICAgICAgIGJuID0gZ2V0X2JuKGUpCisgICAgICAgIGRldmljZSA9IGdldF9kZXZpY2UoZSkKKyAgICAgICAgYnNkaXIgPSBvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksIGJuKQorICAgICAgICB0YXNrZGlyID0gb3MucGF0aC5qb2luKGJzZGlyLCBlLmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpKQorICAgICAgICBpZiBkZXZpY2UgIT0gIk5vTG9naWNhbERldmljZSI6CisgICAgICAgICAgICBzZXRfZGlza2RhdGEoIl9fZGlza2RhdGFfdGFzayIsIGRldmljZSwgZS5kYXRhKQorICAgICAgICBzZXRfdGltZWRhdGEoIl9fdGltZWRhdGFfdGFzayIsIGUuZGF0YSwgZS50aW1lKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGFza2RpcikKKyAgICAgICAgIyB3cml0ZSBpbnRvIHRoZSB0YXNrIGV2ZW50IGZpbGUgdGhlIG5hbWUgYW5kIHN0YXJ0IHRpbWUKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0YXNrZGlyLCBlLnRhc2spLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJFdmVudDogJXMgXG4iICUgYmIuZXZlbnQuZ2V0TmFtZShlKSkKKyAgICAgICAgICAgIGYud3JpdGUoIlN0YXJ0ZWQ6ICUwLjJmIFxuIiAlIGUudGltZSkKKworICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5idWlsZC5UYXNrU3VjY2VlZGVkKToKKyAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgZGV2aWNlID0gZ2V0X2RldmljZShlKQorICAgICAgICBic2RpciA9IG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgYm4pCisgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkpCisgICAgICAgIHdyaXRlX3Rhc2tfZGF0YSgicGFzc2VkIiwgb3MucGF0aC5qb2luKHRhc2tkaXIsIGUudGFzayksIGRldmljZSwgZSkKKyAgICAgICAgaWYgZS50YXNrID09ICJkb19yb290ZnMiOgorICAgICAgICAgICAgYnMgPSBvcy5wYXRoLmpvaW4oYnNkaXIsICJidWlsZF9zdGF0cyIpCisgICAgICAgICAgICB3aXRoIG9wZW4oYnMsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICByb290ZnMgPSBlLmRhdGEuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICAgICAgICAgIHJvb3Rmc19zaXplID0gc3VicHJvY2Vzcy5Qb3BlbihbImR1IiwgIi1zaCIsIHJvb3Rmc10sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJVbmNvbXByZXNzZWQgUm9vdGZzIHNpemU6ICVzIiAlIHJvb3Rmc19zaXplKQorCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmJ1aWxkLlRhc2tGYWlsZWQpOgorICAgICAgICBibiA9IGdldF9ibihlKQorICAgICAgICBkZXZpY2UgPSBnZXRfZGV2aWNlKGUpCisgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgdGFza2RpciA9IG9zLnBhdGguam9pbihic2RpciwgZS5kYXRhLmdldFZhcignUEYnLCBUcnVlKSkKKyAgICAgICAgd3JpdGVfdGFza19kYXRhKCJmYWlsZWQiLCBvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgZGV2aWNlLCBlKQorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyBMZXRzIG1ha2UgdGhpbmdzIGVhc2llciBhbmQgdGVsbCBwZW9wbGUgd2hlcmUgdGhlIGJ1aWxkIGZhaWxlZCBpbgorICAgICAgICAjIGJ1aWxkX3N0YXR1cy4gV2UgZG8gdGhpcyBoZXJlIGJlY2F1c2UgQnVpbGRDb21wbGV0ZWQgdHJpZ2dlcnMgbm8KKyAgICAgICAgIyBtYXR0ZXIgd2hhdCB0aGUgc3RhdHVzIG9mIHRoZSBidWlsZCBhY3R1YWxseSBpcworICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgYnVpbGRfc3RhdHVzID0gb3MucGF0aC5qb2luKGJzZGlyLCAiYnVpbGRfc3RhdHMiKQorICAgICAgICB3aXRoIG9wZW4oYnVpbGRfc3RhdHVzLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGUuZGF0YS5leHBhbmQoIkZhaWxlZCBhdDogJHtQRn0gYXQgdGFzazogJXMgXG4iICUgZS50YXNrKSkKK30KKworYWRkaGFuZGxlciBydW5fYnVpbGRzdGF0cworcnVuX2J1aWxkc3RhdHNbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQgYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza1N0YXJ0ZWQgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCBiYi5idWlsZC5UYXNrRmFpbGVkIgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY2NhY2hlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNkY2U0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK0NDQUNIRSA9ICIke0BiYi51dGlscy53aGljaChkLmdldFZhcignUEFUSCcsIFRydWUpLCAnY2NhY2hlJykgYW5kICdjY2FjaGUgJ30iCitleHBvcnQgQ0NBQ0hFX0RJUiA/PSAiJHtUTVBESVJ9L2NjYWNoZS8ke01VTFRJTUFDSF9IT1NUX1NZU30vJHtQTn0iCitDQ0FDSEVfRElTQUJMRVt1bmV4cG9ydF0gPSAiMSIKKworZG9fY29uZmlndXJlW2RpcnNdID0rICIke0NDQUNIRV9ESVJ9IgorZG9fa2VybmVsX2NvbmZpZ21lW2RpcnNdID0rICIke0NDQUNIRV9ESVJ9IgorCitkb19jbGVhbltjbGVhbmRpcnNdICs9ICIke0NDQUNIRV9ESVJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NocnBhdGguYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jaHJwYXRoLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkxNjBhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jaHJwYXRoLmJiY2xhc3MKQEAgLTAsMCArMSwxMTcgQEAKK0NIUlBBVEhfQklOID89ICJjaHJwYXRoIgorUFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTID89ICIiCisKK2RlZiBwcm9jZXNzX2ZpbGVfbGludXgoY21kLCBmcGF0aCwgcm9vdGRpciwgYmFzZXByZWZpeCwgdG1wZGlyLCBkKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKworICAgIHAgPSBzdWIuUG9wZW4oW2NtZCwgJy1sJywgZnBhdGhdLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgIGlmIHAucmV0dXJuY29kZSAhPSAwOgorICAgICAgICByZXR1cm4KKworICAgICMgSGFuZGxlIFJVTlBBVEggYXMgd2VsbCBhcyBSUEFUSAorICAgIGVyciA9IGVyci5yZXBsYWNlKCJSVU5QQVRIPSIsIlJQQVRIPSIpCisgICAgIyBUaHJvdyBhd2F5IGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiB0aGUgcnBhdGggbGlzdAorICAgIGN1cnJfcnBhdGggPSBlcnIucGFydGl0aW9uKCJSUEFUSD0iKVsyXQorICAgICNiYi5ub3RlKCJDdXJyZW50IHJwYXRoIGZvciAlcyBpcyAlcyIgJSAoZnBhdGgsIGN1cnJfcnBhdGguc3RyaXAoKSkpCisgICAgcnBhdGhzID0gY3Vycl9ycGF0aC5zcGxpdCgiOiIpCisgICAgbmV3X3JwYXRocyA9IFtdCisgICAgbW9kaWZpZWQgPSBGYWxzZQorICAgIGZvciBycGF0aCBpbiBycGF0aHM6CisgICAgICAgICMgSWYgcnBhdGggaXMgYWxyZWFkeSBkeW5hbWljIGNvcHkgaXQgdG8gbmV3X3JwYXRoIGFuZCBjb250aW51ZQorICAgICAgICBpZiBycGF0aC5maW5kKCIkT1JJR0lOIikgIT0gLTE6CisgICAgICAgICAgICBuZXdfcnBhdGhzLmFwcGVuZChycGF0aC5zdHJpcCgpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcnBhdGggPSAgb3MucGF0aC5ub3JtcGF0aChycGF0aCkKKyAgICAgICAgaWYgYmFzZXByZWZpeCBub3QgaW4gcnBhdGggYW5kIHRtcGRpciBub3QgaW4gcnBhdGg6CisgICAgICAgICAgICBuZXdfcnBhdGhzLmFwcGVuZChycGF0aC5zdHJpcCgpKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmV3X3JwYXRocy5hcHBlbmQoIiRPUklHSU4vIiArIG9zLnBhdGgucmVscGF0aChycGF0aC5zdHJpcCgpLCBvcy5wYXRoLmRpcm5hbWUoZnBhdGgucmVwbGFjZShyb290ZGlyLCAiLyIpKSkpCisgICAgICAgIG1vZGlmaWVkID0gVHJ1ZQorCisgICAgIyBpZiB3ZSBoYXZlIG1vZGlmaWVkIHNvbWUgcnBhdGhzIGNhbGwgY2hycGF0aCB0byB1cGRhdGUgdGhlIGJpbmFyeQorICAgIGlmIG1vZGlmaWVkOgorICAgICAgICBhcmdzID0gIjoiLmpvaW4obmV3X3JwYXRocykKKyAgICAgICAgI2JiLm5vdGUoIlNldHRpbmcgcnBhdGggZm9yICVzIHRvICVzIiAlKGZwYXRoLCBhcmdzKSkKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbihbY21kLCAnLXInLCBhcmdzLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgICAgICBiYi5lcnJvcigiJXM6IGNocnBhdGggY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJWQ6XG4lcyVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcC5yZXR1cm5jb2RlLCBvdXQsIGVycikpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkCisKK2RlZiBwcm9jZXNzX2ZpbGVfZGFyd2luKGNtZCwgZnBhdGgsIHJvb3RkaXIsIGJhc2VwcmVmaXgsIHRtcGRpciwgZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MgYXMgc3ViCisKKyAgICBwID0gc3ViLlBvcGVuKFtkLmV4cGFuZCgiJHtIT1NUX1BSRUZJWH1vdG9vbCIpLCAnLUwnLCBmcGF0aF0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorICAgICMgSWYgcmV0dXJuZWQgc3VjY2VzZnVsbHksIHByb2Nlc3Mgc3RkZXJyIGZvciByZXN1bHRzCisgICAgaWYgcC5yZXR1cm5jb2RlICE9IDA6CisgICAgICAgIHJldHVybgorICAgIGZvciBsIGluIGVyci5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgIihjb21wYXRpYmlsaXR5IiBub3QgaW4gbDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJwYXRoID0gbC5wYXJ0aXRpb24oIihjb21wYXRpYmlsaXR5IilbMF0uc3RyaXAoKQorICAgICAgICBpZiBiYXNlcHJlZml4IG5vdCBpbiBycGF0aDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbmV3cGF0aCA9ICJAbG9hZGVyX3BhdGgvIiArIG9zLnBhdGgucmVscGF0aChycGF0aCwgb3MucGF0aC5kaXJuYW1lKGZwYXRoLnJlcGxhY2Uocm9vdGRpciwgIi8iKSkpCisgICAgICAgIHAgPSBzdWIuUG9wZW4oW2QuZXhwYW5kKCIke0hPU1RfUFJFRklYfWluc3RhbGxfbmFtZV90b29sIiksICctY2hhbmdlJywgcnBhdGgsIG5ld3BhdGgsIGZwYXRoXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBlcnIsIG91dCA9IHAuY29tbXVuaWNhdGUoKQorCitkZWYgcHJvY2Vzc19kaXIgKHJvb3RkaXIsIGRpcmVjdG9yeSwgZCk6CisgICAgaW1wb3J0IHN0YXQKKworICAgIHJvb3RkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3RkaXIpCisgICAgY21kID0gZC5leHBhbmQoJyR7Q0hSUEFUSF9CSU59JykKKyAgICB0bXBkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKGQuZ2V0VmFyKCdUTVBESVInLCBGYWxzZSkpCisgICAgYmFzZXByZWZpeCA9IG9zLnBhdGgubm9ybXBhdGgoZC5leHBhbmQoJyR7YmFzZV9wcmVmaXh9JykpCisgICAgaG9zdG9zID0gZC5nZXRWYXIoIkhPU1RfT1MiLCBUcnVlKQorCisgICAgI2JiLmRlYnVnKCJDaGVja2luZyAlcyBmb3IgYmluYXJpZXMgdG8gcHJvY2VzcyIgJSBkaXJlY3RvcnkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcmVjdG9yeSk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgImxpbnV4IiBpbiBob3N0b3M6CisgICAgICAgIHByb2Nlc3NfZmlsZSA9IHByb2Nlc3NfZmlsZV9saW51eAorICAgIGVsaWYgImRhcndpbiIgaW4gaG9zdG9zOgorICAgICAgICBwcm9jZXNzX2ZpbGUgPSBwcm9jZXNzX2ZpbGVfZGFyd2luCisgICAgZWxzZToKKyAgICAgICAgIyBSZWxvY2F0aW9ucyBub3Qgc3VwcG9ydGVkCisgICAgICAgIHJldHVybgorCisgICAgZGlycyA9IG9zLmxpc3RkaXIoZGlyZWN0b3J5KQorICAgIGZvciBmaWxlIGluIGRpcnM6CisgICAgICAgIGZwYXRoID0gZGlyZWN0b3J5ICsgIi8iICsgZmlsZQorICAgICAgICBmcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoZnBhdGgpCisgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZwYXRoKToKKyAgICAgICAgICAgICMgU2tpcCBzeW1saW5rcworICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZwYXRoKToKKyAgICAgICAgICAgIHByb2Nlc3NfZGlyKHJvb3RkaXIsIGZwYXRoLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgI2JiLm5vdGUoIlRlc3RpbmcgJXMgZm9yIHJlbG9jYXRhYmlsaXR5IiAlIGZwYXRoKQorCisgICAgICAgICAgICAjIFdlIG5lZWQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgZm9yIGNocnBhdGgsIGlmIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICMgdGhlbSB0aGVuIHNldCB0aGVtIHRlbXBvcmFyaWx5LiBUYWtlIGEgY29weSBvZiB0aGUgZmlsZXMKKyAgICAgICAgICAgICMgcGVybWlzc2lvbnMgc28gdGhhdCB3ZSBjYW4gcmVzdG9yZSB0aGVtIGFmdGVyd2FyZHMuCisgICAgICAgICAgICBwZXJtcyA9IG9zLnN0YXQoZnBhdGgpW3N0YXQuU1RfTU9ERV0KKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhmcGF0aCwgb3MuV19PS3xvcy5SX09LKToKKyAgICAgICAgICAgICAgICBwZXJtcyA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUZW1wb3JhcmlseSBtYWtlIHRoZSBmaWxlIHdyaXRlYWJsZSBzbyB3ZSBjYW4gY2hycGF0aCBpdAorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBwZXJtc3xzdGF0LlNfSVJXWFUpCisgICAgICAgICAgICBwcm9jZXNzX2ZpbGUoY21kLCBmcGF0aCwgcm9vdGRpciwgYmFzZXByZWZpeCwgdG1wZGlyLCBkKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcGVybXM6CisgICAgICAgICAgICAgICAgb3MuY2htb2QoZnBhdGgsIHBlcm1zKQorCitkZWYgcnBhdGhfcmVwbGFjZSAocGF0aCwgZCk6CisgICAgYmluZGlycyA9IGQuZXhwYW5kKCIke2JpbmRpcn0gJHtzYmluZGlyfSAke2Jhc2Vfc2JpbmRpcn0gJHtiYXNlX2JpbmRpcn0gJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9ICR7bGliZXhlY2Rpcn0gJHtQUkVQUk9DRVNTX1JFTE9DQVRFX0RJUlN9Iikuc3BsaXQoKQorCisgICAgZm9yIGJpbmRpciBpbiBiaW5kaXJzOgorICAgICAgICAjYmIubm90ZSAoIlByb2Nlc3NpbmcgZGlyZWN0b3J5ICIgKyBiaW5kaXIpCisgICAgICAgIGRpcmVjdG9yeSA9IHBhdGggKyAiLyIgKyBiaW5kaXIKKyAgICAgICAgcHJvY2Vzc19kaXIgKHBhdGgsIGRpcmVjdG9yeSwgZCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NsdXR0ZXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jbHV0dGVyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3NDA3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jbHV0dGVyLmJiY2xhc3MKQEAgLTAsMCArMSwyMiBAQAorCitkZWYgZ2V0X21pbm9yX2Rpcih2KToKKyAgICBpbXBvcnQgcmUKKyAgICBtID0gcmUubWF0Y2goIl4oWzAtOV0rKVwuKFswLTldKykiLCB2KQorICAgIHJldHVybiAiJXMuJXMiICUgKG0uZ3JvdXAoMSksIG0uZ3JvdXAoMikpCisKK2RlZiBnZXRfcmVhbF9uYW1lKG4pOgorICAgIGltcG9ydCByZQorICAgIG0gPSByZS5tYXRjaCgiXihbYS16XSsoLVthLXpdKyk/KSgtWzAtOV0rXC5bMC05XSspPyIsIG4pCisgICAgcmV0dXJuICIlcyIgJSAobS5ncm91cCgxKSkKKworVkVSTUlOT1IgPSAiJHtAZ2V0X21pbm9yX2RpcigiJHtQVn0iKX0iCitSRUFMTkFNRSA9ICIke0BnZXRfcmVhbF9uYW1lKCIke0JQTn0iKX0iCisKK0NMVVRURVJfU1JDX0ZUUCA9ICIke0dOT01FX01JUlJPUn0vJHtSRUFMTkFNRX0vJHtWRVJNSU5PUn0vJHtSRUFMTkFNRX0tJHtQVn0udGFyLnh6O25hbWU9YXJjaGl2ZSIKKworQ0xVVFRFUl9TUkNfR0lUID0gImdpdDovL2dpdC5nbm9tZS5vcmcvJHtSRUFMTkFNRX0iCisKK1NSQ19VUkkgPSAiJHtDTFVUVEVSX1NSQ19GVFB9IgorUyA9ICIke1dPUktESVJ9LyR7UkVBTE5BTUV9LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyBnZXR0ZXh0CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jbWFrZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlM2NjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY21ha2UuYmJjbGFzcwpAQCAtMCwwICsxLDEzOCBAQAorIyBQYXRoIHRvIHRoZSBDTWFrZSBmaWxlIHRvIHByb2Nlc3MuCitPRUNNQUtFX1NPVVJDRVBBVEggPz0gIiR7U30iCisKK0RFUEVORFNfcHJlcGVuZCA9ICJjbWFrZS1uYXRpdmUgIgorQiA9ICIke1dPUktESVJ9L2J1aWxkIgorCisjIFdlIG5lZWQgdG8gdW5zZXQgQ0NBQ0hFIG90aGVyd2lzZSBjbWFrZSBnZXRzIHRvbyBjb25mdXNlZAorQ0NBQ0hFID0gIiIKKworIyBXZSB3YW50IHRoZSBzdGFnaW5nIGFuZCBpbnN0YWxsaW5nIGZ1bmN0aW9ucyBmcm9tIGF1dG90b29scworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBDL0MrKyBDb21waWxlciAod2l0aG91dCBjcHUgYXJjaC90dW5lIGFyZ3VtZW50cykKK09FQ01BS0VfQ19DT01QSUxFUiA/PSAiYGVjaG8gJHtDQ30gfCBzZWQgJ3MvXlwoW14gXSpcKS4qL1wxLydgIgorT0VDTUFLRV9DWFhfQ09NUElMRVIgPz0gImBlY2hvICR7Q1hYfSB8IHNlZCAncy9eXChbXiBdKlwpLiovXDEvJ2AiCitPRUNNQUtFX0FSID89ICIke0FSfSIKKworIyBDb21waWxlciBmbGFncworT0VDTUFLRV9DX0ZMQUdTID89ICIke0hPU1RfQ0NfQVJDSH0gJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtDRkxBR1N9IgorT0VDTUFLRV9DWFhfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NYWEZMQUdTfSIKK09FQ01BS0VfQ19GTEFHU19SRUxFQVNFID89ICIke1NFTEVDVEVEX09QVElNSVpBVElPTn0gJHtDRkxBR1N9IC1ETkRFQlVHIgorT0VDTUFLRV9DWFhfRkxBR1NfUkVMRUFTRSA/PSAiJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059ICR7Q1hYRkxBR1N9IC1ETkRFQlVHIgorT0VDTUFLRV9DX0xJTktfRkxBR1MgPz0gIiR7SE9TVF9DQ19BUkNIfSAke1RPT0xDSEFJTl9PUFRJT05TfSAke0NQUEZMQUdTfSAke0xERkxBR1N9IgorT0VDTUFLRV9DWFhfTElOS19GTEFHUyA/PSAiJHtIT1NUX0NDX0FSQ0h9ICR7VE9PTENIQUlOX09QVElPTlN9ICR7Q1hYRkxBR1N9ICR7TERGTEFHU30iCisKK09FQ01BS0VfUlBBVEggPz0gIiIKK09FQ01BS0VfUEVSTE5BVElWRV9ESVIgPz89ICIiCitPRUNNQUtFX0VYVFJBX1JPT1RfUEFUSCA/PSAiIgorCitPRUNNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSA9ICJPTkxZIgorT0VDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU1fY2xhc3MtbmF0aXZlID0gIkJPVEgiCisKKyMgQ01ha2UgZXhwZWN0cyB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBpbiB0aGUgZm9ybWF0IG9mIHVuYW1lKDIpLAorIyB3aGljaCBkbyBub3QgYWx3YXlzIG1hdGNoIFRBUkdFVF9BUkNILCBzbyBhbGwgdGhlIG5lY2Vzc2FyeQorIyBjb252ZXJzaW9ucyBzaG91bGQgaGFwcGVuIGhlcmUuCitkZWYgbWFwX3RhcmdldF9hcmNoX3RvX3VuYW1lX2FyY2godGFyZ2V0X2FyY2gpOgorICAgIGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjIjoKKyAgICAgICAgcmV0dXJuICJwcGMiCisgICAgaWYgdGFyZ2V0X2FyY2ggPT0gInBvd2VycGM2NCI6CisgICAgICAgIHJldHVybiAicHBjNjQiCisgICAgcmV0dXJuIHRhcmdldF9hcmNoCisKK2NtYWtlX2RvX2dlbmVyYXRlX3Rvb2xjaGFpbl9maWxlKCkgeworCWNhdCA+ICR7V09SS0RJUn0vdG9vbGNoYWluLmNtYWtlIDw8RU9GCisjIENNYWtlIHN5c3RlbSBuYW1lIG11c3QgYmUgc29tZXRoaW5nIGxpa2UgIkxpbnV4Ii4KKyMgVGhpcyBpcyBpbXBvcnRhbnQgZm9yIGNyb3NzLWNvbXBpbGluZy4KK3NldCggQ01BS0VfU1lTVEVNX05BTUUgYGVjaG8gJHtUQVJHRVRfT1N9IHwgc2VkIC1lICdzL14uL1x1Ji8nIC1lICdzL15cKExpbnV4XCkuKi9cMS8nYCApCitzZXQoIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgJHtAbWFwX3RhcmdldF9hcmNoX3RvX3VuYW1lX2FyY2goZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkpfSApCitzZXQoIENNQUtFX0NfQ09NUElMRVIgJHtPRUNNQUtFX0NfQ09NUElMRVJ9ICkKK3NldCggQ01BS0VfQ1hYX0NPTVBJTEVSICR7T0VDTUFLRV9DWFhfQ09NUElMRVJ9ICkKK3NldCggQ01BS0VfQVNNX0NPTVBJTEVSICR7T0VDTUFLRV9DX0NPTVBJTEVSfSApCitzZXQoIENNQUtFX0FSICR7T0VDTUFLRV9BUn0gQ0FDSEUgRklMRVBBVEggIkFyY2hpdmVyIiApCitzZXQoIENNQUtFX0NfRkxBR1MgIiR7T0VDTUFLRV9DX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJDRkxBR1MiICkKK3NldCggQ01BS0VfQ1hYX0ZMQUdTICIke09FQ01BS0VfQ1hYX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJDWFhGTEFHUyIgKQorc2V0KCBDTUFLRV9BU01fRkxBR1MgIiR7T0VDTUFLRV9DX0ZMQUdTfSIgQ0FDSEUgU1RSSU5HICJBU00gRkxBR1MiICkKK3NldCggQ01BS0VfQ19GTEFHU19SRUxFQVNFICIke09FQ01BS0VfQ19GTEFHU19SRUxFQVNFfSIgQ0FDSEUgU1RSSU5HICJDRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQ1hYX0ZMQUdTX1JFTEVBU0UgIiR7T0VDTUFLRV9DWFhfRkxBR1NfUkVMRUFTRX0iIENBQ0hFIFNUUklORyAiQ1hYRkxBR1MgZm9yIHJlbGVhc2UiICkKK3NldCggQ01BS0VfQVNNX0ZMQUdTX1JFTEVBU0UgIiR7T0VDTUFLRV9DX0ZMQUdTX1JFTEVBU0V9IiBDQUNIRSBTVFJJTkcgIkFTTSBGTEFHUyBmb3IgcmVsZWFzZSIgKQorc2V0KCBDTUFLRV9DX0xJTktfRkxBR1MgIiR7T0VDTUFLRV9DX0xJTktfRkxBR1N9IiBDQUNIRSBTVFJJTkcgIkxERkxBR1MiICkKK3NldCggQ01BS0VfQ1hYX0xJTktfRkxBR1MgIiR7T0VDTUFLRV9DWFhfTElOS19GTEFHU30iIENBQ0hFIFNUUklORyAiTERGTEFHUyIgKQorCisjIG9ubHkgc2VhcmNoIGluIHRoZSBwYXRocyBwcm92aWRlZCBzbyBjbWFrZSBkb2VzbnQgcGljaworIyB1cCBsaWJyYXJpZXMgYW5kIHRvb2xzIGZyb20gdGhlIG5hdGl2ZSBidWlsZCBtYWNoaW5lCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIICR7U1RBR0lOR19ESVJfSE9TVH0gJHtTVEFHSU5HX0RJUl9OQVRJVkV9ICR7Q1JPU1NfRElSfSAke09FQ01BS0VfUEVSTE5BVElWRV9ESVJ9ICR7T0VDTUFLRV9FWFRSQV9ST09UX1BBVEh9ICR7RVhURVJOQUxfVE9PTENIQUlOfSkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QQUNLQUdFIE9OTFkgKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gJHtPRUNNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTX0gKQorc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0xJQlJBUlkgT05MWSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKKworIyBVc2UgcXQuY29uZiBzZXR0aW5ncworc2V0KCBFTlZ7UVRfQ09ORl9QQVRIfSAke1dPUktESVJ9L3F0LmNvbmYgKQorCisjIFdlIG5lZWQgdG8gc2V0IHRoZSBycGF0aCB0byB0aGUgY29ycmVjdCBkaXJlY3RvcnkgYXMgY21ha2UgZG9lcyBub3QgcHJvdmlkZSBhbnkKKyMgZGlyZWN0b3J5IGFzIHJwYXRoIGJ5IGRlZmF1bHQKK3NldCggQ01BS0VfSU5TVEFMTF9SUEFUSCAke09FQ01BS0VfUlBBVEh9ICkKKworIyBVc2UgbmF0aXZlIGNtYWtlIG1vZHVsZXMKK2xpc3QoQVBQRU5EIENNQUtFX01PRFVMRV9QQVRIICIke1NUQUdJTkdfREFUQURJUn0vY21ha2UvTW9kdWxlcy8iKQorCisjIGFkZCBmb3Igbm9uIC91c3IvbGliIGxpYmRpciwgZS5nLiAvdXNyL2xpYjY0CitzZXQoIENNQUtFX0xJQlJBUllfUEFUSCAke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0pCisKK0VPRgorfQorCithZGR0YXNrIGdlbmVyYXRlX3Rvb2xjaGFpbl9maWxlIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworY21ha2VfZG9fY29uZmlndXJlKCkgeworCWlmIFsgIiR7T0VDTUFLRV9CVUlMRFBBVEh9IiBdOyB0aGVuCisJCWJibm90ZSAiY21ha2UuYmJjbGFzcyBubyBsb25nZXIgdXNlcyBPRUNNQUtFX0JVSUxEUEFUSC4gIFRoZSBkZWZhdWx0IGJlaGF2aW91ciBpcyBub3cgb3V0LW9mLXRyZWUgYnVpbGRzIHdpdGggQj1XT1JLRElSL2J1aWxkLiIKKwlmaQorCisJaWYgWyAiJHtTfSIgIT0gIiR7Qn0iIF07IHRoZW4KKwkJcm0gLXJmICR7Qn0KKwkJbWtkaXIgLXAgJHtCfQorCQljZCAke0J9CisJZWxzZQorCQlmaW5kICR7Qn0gLW5hbWUgQ01ha2VGaWxlcyAtb3IgLW5hbWUgTWFrZWZpbGUgLW9yIC1uYW1lIGNtYWtlX2luc3RhbGwuY21ha2UgLW9yIC1uYW1lIENNYWtlQ2FjaGUudHh0IC1kZWxldGUKKwlmaQorCisJIyBKdXN0IGxpa2UgYXV0b3Rvb2xzIGNtYWtlIGNhbiB1c2UgYSBzaXRlIGZpbGUgdG8gY2FjaGUgcmVzdWx0IHRoYXQgbmVlZCBnZW5lcmF0ZWQgYmluYXJpZXMgdG8gcnVuCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGUtZmlsZS5jbWFrZSBdIDsgdGhlbgorCQlPRUNNQUtFX1NJVEVGSUxFPSIgLUMgJHtXT1JLRElSfS9zaXRlLWZpbGUuY21ha2UiCisJZWxzZQorCQlPRUNNQUtFX1NJVEVGSUxFPSIiCisJZmkKKworCWNtYWtlIFwKKwkgICR7T0VDTUFLRV9TSVRFRklMRX0gXAorCSAgJHtPRUNNQUtFX1NPVVJDRVBBVEh9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg6UEFUSD0ke3ByZWZpeH0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0JJTkRJUjpQQVRIPSR7YmluZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU0JJTkRJUjpQQVRIPSR7c2JpbmRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xJQkVYRUNESVI6UEFUSD0ke2xpYmV4ZWNkaXJ9IFwKKwkgIC1EQ01BS0VfSU5TVEFMTF9TWVNDT05GRElSOlBBVEg9JHtzeXNjb25mZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU0hBUkVEU1RBVEVESVI6UEFUSD0ke3NoYXJlZHN0YXRlZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfTE9DQUxTVEFURURJUjpQQVRIPSR7bG9jYWxzdGF0ZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0xJQkRJUjpQQVRIPSR7bGliZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfSU5DTFVERURJUjpQQVRIPSR7aW5jbHVkZWRpcn0gXAorCSAgLURDTUFLRV9JTlNUQUxMX0RBVEFST09URElSOlBBVEg9JHtkYXRhZGlyfSBcCisJICAtRENNQUtFX0lOU1RBTExfU09fTk9fRVhFPTAgXAorCSAgLURDTUFLRV9UT09MQ0hBSU5fRklMRT0ke1dPUktESVJ9L3Rvb2xjaGFpbi5jbWFrZSBcCisJICAtRENNQUtFX1ZFUkJPU0VfTUFLRUZJTEU9MSBcCisJICAke0VYVFJBX09FQ01BS0V9IFwKKwkgIC1Xbm8tZGV2Cit9CisKK2NtYWtlX2RvX2NvbXBpbGUoKSAgeworCWNkICR7Qn0KKwliYXNlX2RvX2NvbXBpbGUKK30KKworY21ha2VfZG9faW5zdGFsbCgpIHsKKwljZCAke0J9CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsIGRvX2dlbmVyYXRlX3Rvb2xjaGFpbl9maWxlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY21sMS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWNmNTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NtbDEuYmJjbGFzcwpAQCAtMCwwICsxLDc1IEBACitjbWwxX2RvX2NvbmZpZ3VyZSgpIHsKKwlzZXQgLWUKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCW9lX3J1bm1ha2Ugb2xkY29uZmlnCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fY29uZmlndXJlCithZGR0YXNrIGNvbmZpZ3VyZSBhZnRlciBkb191bnBhY2sgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbXBpbGUKKworaW5oZXJpdCB0ZXJtaW5hbAorCitPRV9URVJNSU5BTF9FWFBPUlRTICs9ICJIT1NUX0VYVFJBQ0ZMQUdTIEhPU1RMREZMQUdTIFRFUk1JTkZPIENST1NTX0NVUlNFU19MSUIgQ1JPU1NfQ1VSU0VTX0lOQyIKK0hPU1RfRVhUUkFDRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9ICR7QlVJTERfTERGTEFHU30iCitIT1NUTERGTEFHUyA9ICIke0JVSUxEX0xERkxBR1N9IgorQ1JPU1NfQ1VSU0VTX0xJQiA9ICItbG5jdXJzZXMgLWx0aW5mbyIKK0NST1NTX0NVUlNFU19JTkMgPSAnLURDVVJTRVNfTE9DPSI8Y3Vyc2VzLmg+IicKK1RFUk1JTkZPID0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vdGVybWluZm8iCisKK0tDT05GSUdfQ09ORklHX0NPTU1BTkQgPz89ICJtZW51Y29uZmlnIgorcHl0aG9uIGRvX21lbnVjb25maWcoKSB7CisgICAgaW1wb3J0IHNodXRpbAorCisgICAgdHJ5OgorICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoIi5jb25maWciKQorICAgICAgICBzaHV0aWwuY29weSgiLmNvbmZpZyIsICIuY29uZmlnLm9yaWciKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBtdGltZSA9IDAKKworICAgIG9lX3Rlcm1pbmFsKCIke1NIRUxMfSAtYyBcIm1ha2UgJHtLQ09ORklHX0NPTkZJR19DT01NQU5EfTsgaWYgWyBcJD8gLW5lIDAgXTsgdGhlbiBlY2hvICdDb21tYW5kIGZhaWxlZC4nOyBwcmludGYgJ1ByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4gJzsgcmVhZCByOyBmaVwiIiwgJyR7UE59IENvbmZpZ3VyYXRpb24nLCBkKQorCisgICAgIyBGSVhNRSB0aGlzIGNoZWNrIGNhbiBiZSByZW1vdmVkIHdoZW4gdGhlIG1pbmltdW0gYml0YmFrZSB2ZXJzaW9uIGhhcyBiZWVuIGJ1bXBlZAorICAgIGlmIGhhc2F0dHIoYmIuYnVpbGQsICd3cml0ZV90YWludCcpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXdtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoIi5jb25maWciKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIG5ld210aW1lID0gMAorCisgICAgICAgIGlmIG5ld210aW1lID4gbXRpbWU6CisgICAgICAgICAgICBiYi5ub3RlKCJDb25maWd1cmF0aW9uIGNoYW5nZWQsIHJlY29tcGlsZSB3aWxsIGJlIGZvcmNlZCIpCisgICAgICAgICAgICBiYi5idWlsZC53cml0ZV90YWludCgnZG9fY29tcGlsZScsIGQpCit9Citkb19tZW51Y29uZmlnW2RlcGVuZHNdICs9ICJuY3Vyc2VzLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fbWVudWNvbmZpZ1tub3N0YW1wXSA9ICIxIgorYWRkdGFzayBtZW51Y29uZmlnIGFmdGVyIGRvX2NvbmZpZ3VyZQorCitweXRob24gZG9fZGlmZmNvbmZpZygpIHsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgZnJhZ21lbnQgPSB3b3JrZGlyICsgJy9mcmFnbWVudC5jZmcnCisgICAgY29uZmlnb3JpZyA9ICcuY29uZmlnLm9yaWcnCisgICAgY29uZmlnID0gJy5jb25maWcnCisKKyAgICB0cnk6CisgICAgICAgIG1kNW5ld2NvbmZpZyA9IGJiLnV0aWxzLm1kNV9maWxlKGNvbmZpZ29yaWcpCisgICAgICAgIG1kNWNvbmZpZyA9IGJiLnV0aWxzLm1kNV9maWxlKGNvbmZpZykKKyAgICAgICAgaXNkaWZmID0gbWQ1bmV3Y29uZmlnICE9IG1kNWNvbmZpZworICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGJiLmZhdGFsKCJObyBjb25maWcgZmlsZXMgZm91bmQuIERpZCB5b3UgZG8gbWVudWNvbmZpZyA/XG4lcyIgJSBlKQorCisgICAgaWYgaXNkaWZmOgorICAgICAgICBzdGF0ZW1lbnQgPSAnZGlmZiAtLXVuY2hhbmdlZC1saW5lLWZvcm1hdD0gLS1vbGQtbGluZS1mb3JtYXQ9IC0tbmV3LWxpbmUtZm9ybWF0PSIlTCIgJyArIGNvbmZpZ29yaWcgKyAnICcgKyBjb25maWcgKyAnPicgKyBmcmFnbWVudAorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKQorCisgICAgICAgIHNodXRpbC5jb3B5KGNvbmZpZ29yaWcsIGNvbmZpZykKKworICAgICAgICBiYi5wbGFpbigiQ29uZmlnIGZyYWdtZW50IGhhcyBiZWVuIGR1bXBlZCBpbnRvOlxuICVzIiAlIGZyYWdtZW50KQorICAgIGVsc2U6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZyYWdtZW50KToKKyAgICAgICAgICAgIG9zLnVubGluayhmcmFnbWVudCkKK30KKworZG9fZGlmZmNvbmZpZ1tub3N0YW1wXSA9ICIxIgorYWRkdGFzayBkaWZmY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY29tcHJlc3NfZG9jLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1OGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9jb21wcmVzc19kb2MuYmJjbGFzcwpAQCAtMCwwICsxLDI2MCBAQAorIyBDb21wcmVzcyBtYW4gcGFnZXMgaW4gJHttYW5kaXJ9IGFuZCBpbmZvIHBhZ2VzIGluICR7aW5mb2Rpcn0KKyMKKyMgMS4gVGhlIGRvYyB3aWxsIGJlIGNvbXByZXNzZWQgdG8gZ3ogZm9ybWF0IGJ5IGRlZmF1bHQuCisjCisjIDIuIEl0IHdpbGwgYXV0b21hdGljYWxseSBjb3JyZWN0IHRoZSBjb21wcmVzc2VkIGRvYyB3aGljaCBpcyBub3QKKyMgaW4gJHtET0NfQ09NUFJFU1N9IGJ1dCBpbiAke0RPQ19DT01QUkVTU19MSVNUfSB0byB0aGUgZm9ybWF0CisjIG9mICR7RE9DX0NPTVBSRVNTfSBwb2xpY3kKKyMKKyMgMy4gSXQgaXMgZWFzeSB0byBhZGQgYSBuZXcgdHlwZSBjb21wcmVzc2lvbiBieSBlZGl0aW5nCisjIGxvY2FsLmNvbmYsIHN1Y2ggYXM6CisjIERPQ19DT01QUkVTU19MSVNUX2FwcGVuZCA9ICcgYWJjJworIyBET0NfQ09NUFJFU1MgPSAnYWJjJworIyBET0NfQ09NUFJFU1NfQ01EW2FiY10gPSAnYWJjIGNvbXByZXNzIGNtZCAqKionCisjIERPQ19ERUNPTVBSRVNTX0NNRFthYmNdID0gJ2FiYyBkZWNvbXByZXNzIGNtZCAqKionCisKKyMgQWxsIHN1cHBvcnRlZCBjb21wcmVzc2lvbiBwb2xpY3kKK0RPQ19DT01QUkVTU19MSVNUID89ICJneiB4eiBiejIiCisKKyMgQ29tcHJlc3Npb24gcG9saWN5LCBtdXN0IGJlIG9uZSBvZiAke0RPQ19DT01QUkVTU19MSVNUfQorRE9DX0NPTVBSRVNTID89ICJneiIKKworIyBDb21wcmVzc2lvbiBzaGVsbCBjb21tYW5kCitET0NfQ09NUFJFU1NfQ01EW2d6XSA/PSAnZ3ppcCAtdiAtOSAtbicKK0RPQ19DT01QUkVTU19DTURbYnoyXSA/PSAiYnppcDIgLXYgLTkiCitET0NfQ09NUFJFU1NfQ01EW3h6XSA/PSAieHogLXYiCisKKyMgRGVjb21wcmVzc2lvbiBzaGVsbCBjb21tYW5kCitET0NfREVDT01QUkVTU19DTURbZ3pdID89ICdndW56aXAgLXYnCitET0NfREVDT01QUkVTU19DTURbYnoyXSA/PSAiYnVuemlwMiAtdiIKK0RPQ19ERUNPTVBSRVNTX0NNRFt4el0gPz0gInVueHogLXYiCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicGFja2FnZV9kb19jb21wcmVzc19kb2MgY29tcHJlc3NfZG9jX3VwZGF0ZWFsdGVybmF0aXZlcyIKK3B5dGhvbiBwYWNrYWdlX2RvX2NvbXByZXNzX2RvYygpIHsKKyAgICBjb21wcmVzc19tb2RlID0gZC5nZXRWYXIoJ0RPQ19DT01QUkVTUycsIFRydWUpCisgICAgY29tcHJlc3NfbGlzdCA9IChkLmdldFZhcignRE9DX0NPTVBSRVNTX0xJU1QnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGlmIGNvbXByZXNzX21vZGUgbm90IGluIGNvbXByZXNzX2xpc3Q6CisgICAgICAgIGJiLmZhdGFsKCdDb21wcmVzc2lvbiBwb2xpY3kgJXMgbm90IHN1cHBvcnRlZCAobm90IGxpc3RlZCBpbiAlcylcbicgJSAoY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfbGlzdCkpCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIGNvbXByZXNzX2NtZHMgPSB7fQorICAgIGRlY29tcHJlc3NfY21kcyA9IHt9CisgICAgZm9yIG1vZGUgaW4gY29tcHJlc3NfbGlzdDoKKyAgICAgICAgY29tcHJlc3NfY21kc1ttb2RlXSA9IGQuZ2V0VmFyRmxhZygnRE9DX0NPTVBSRVNTX0NNRCcsIG1vZGUpCisgICAgICAgIGRlY29tcHJlc3NfY21kc1ttb2RlXSA9IGQuZ2V0VmFyRmxhZygnRE9DX0RFQ09NUFJFU1NfQ01EJywgbW9kZSkKKworICAgIG1hbmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoIm1hbmRpciIsIFRydWUpKQorICAgIGlmIG9zLnBhdGguZXhpc3RzKG1hbmRpcik6CisgICAgICAgICMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCisgICAgICAgIGRlY29tcHJlc3NfZG9jKG1hbmRpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKQorICAgICAgICBjb21wcmVzc19kb2MobWFuZGlyLCBjb21wcmVzc19tb2RlLCBjb21wcmVzc19jbWRzKQorCisgICAgaW5mb2RpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImluZm9kaXIiLCBUcnVlKSkKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbmZvZGlyKToKKyAgICAgICAgIyBEZWNvbXByZXNzIGRvYyBmaWxlcyB3aGljaCBmb3JtYXQgaXMgbm90IGNvbXByZXNzX21vZGUKKyAgICAgICAgZGVjb21wcmVzc19kb2MoaW5mb2RpciwgY29tcHJlc3NfbW9kZSwgZGVjb21wcmVzc19jbWRzKQorICAgICAgICBjb21wcmVzc19kb2MoaW5mb2RpciwgY29tcHJlc3NfbW9kZSwgY29tcHJlc3NfY21kcykKK30KKworZGVmIF9nZXRfY29tcHJlc3NfZm9ybWF0KGZpbGUsIGNvbXByZXNzX2Zvcm1hdF9saXN0KToKKyAgICBmb3IgY29tcHJlc3NfZm9ybWF0IGluIGNvbXByZXNzX2Zvcm1hdF9saXN0OgorICAgICAgICBjb21wcmVzc19zdWZmaXggPSAnLicgKyBjb21wcmVzc19mb3JtYXQKKyAgICAgICAgaWYgZmlsZS5lbmRzd2l0aChjb21wcmVzc19zdWZmaXgpOgorICAgICAgICAgICAgcmV0dXJuIGNvbXByZXNzX2Zvcm1hdAorCisgICAgcmV0dXJuICcnCisKKyMgQ29sbGVjdCBoYXJkbGlua3MgdG8gZGljdCwgZWFjaCBlbGVtZW50IGluIGRpY3QgbGlzdHMgaGFyZGxpbmtzCisjIHdoaWNoIHBvaW50cyB0byB0aGUgc2FtZSBkb2MgZmlsZS4KKyMge2hhcmRsaW5rMTA6IFtoYXJkbGluazExLCBoYXJkbGluazEyXSwsLH0KKyMgVGhlIGhhcmRsaW5rMTAsIGhhcmRsaW5rMTEgYW5kIGhhcmRsaW5rMTIgYXJlIHRoZSBzYW1lIGZpbGUuCitkZWYgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSk6CisgICAgZm9yIGhhcmRsaW5rIGluIGhhcmRsaW5rX2RpY3Q6CisgICAgICAgICMgQWRkIHRvIHRoZSBleGlzdGVkIGhhcmRsaW5rCisgICAgICAgIGlmIG9zLnBhdGguc2FtZWZpbGUoaGFyZGxpbmssIGZpbGUpOgorICAgICAgICAgICAgaGFyZGxpbmtfZGljdFtoYXJkbGlua10uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICByZXR1cm4gaGFyZGxpbmtfZGljdAorCisgICAgaGFyZGxpbmtfZGljdFtmaWxlXSA9IFtdCisgICAgcmV0dXJuIGhhcmRsaW5rX2RpY3QKKworZGVmIF9wcm9jZXNzX2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGNvbXByZXNzX21vZGUsIHNoZWxsX2NtZHMsIGRlY29tcHJlc3M9RmFsc2UpOgorICAgIGZvciB0YXJnZXQgaW4gaGFyZGxpbmtfZGljdDoKKyAgICAgICAgaWYgZGVjb21wcmVzczoKKyAgICAgICAgICAgIGNvbXByZXNzX2Zvcm1hdCA9IF9nZXRfY29tcHJlc3NfZm9ybWF0KHRhcmdldCwgc2hlbGxfY21kcy5rZXlzKCkpCisgICAgICAgICAgICBjbWQgPSAiJXMgLWYgJXMiICUgKHNoZWxsX2NtZHNbY29tcHJlc3NfZm9ybWF0XSwgdGFyZ2V0KQorICAgICAgICAgICAgYmIubm90ZSgnZGVjb21wcmVzcyBoYXJkbGluayAlcycgJSB0YXJnZXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgLWYgJXMiICUgKHNoZWxsX2NtZHNbY29tcHJlc3NfbW9kZV0sIHRhcmdldCkKKyAgICAgICAgICAgIGJiLm5vdGUoJ2NvbXByZXNzIGhhcmRsaW5rICVzJyAlIHRhcmdldCkKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLndhcm4oImRlL2NvbXByZXNzIGZpbGUgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBmb3IgaGFyZGxpbmtfZHVwIGluIGhhcmRsaW5rX2RpY3RbdGFyZ2V0XToKKyAgICAgICAgICAgIGlmIGRlY29tcHJlc3M6CisgICAgICAgICAgICAgICAgIyBSZW1vdmUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgICAgICAgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgICAgICAgICAgICAgbmV3X2hhcmRsaW5rID0gaGFyZGxpbmtfZHVwWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgICAgICAgICAgICAgbmV3X3RhcmdldCA9IHRhcmdldFs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEFwcGVuZCBjb21wcmVzcyBzdWZmaXgKKyAgICAgICAgICAgICAgICBjb21wcmVzc19zdWZmaXggPSAnLicgKyBjb21wcmVzc19tb2RlCisgICAgICAgICAgICAgICAgbmV3X2hhcmRsaW5rID0gaGFyZGxpbmtfZHVwICsgY29tcHJlc3Nfc3VmZml4CisgICAgICAgICAgICAgICAgbmV3X3RhcmdldCA9IHRhcmdldCArIGNvbXByZXNzX3N1ZmZpeAorCisgICAgICAgICAgICBiYi5ub3RlKCdoYXJkbGluayAlcy0tPiVzJyAlIChuZXdfaGFyZGxpbmssIG5ld190YXJnZXQpKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19oYXJkbGluayk6CisgICAgICAgICAgICAgICAgb3MubGluayhuZXdfdGFyZ2V0LCBuZXdfaGFyZGxpbmspCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhoYXJkbGlua19kdXApOgorICAgICAgICAgICAgICAgIG9zLnVubGluayhoYXJkbGlua19kdXApCisKK2RlZiBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX2Zvcm1hdCwgZGVjb21wcmVzcz1GYWxzZSk6CisgICAgY29tcHJlc3Nfc3VmZml4ID0gJy4nICsgY29tcHJlc3NfZm9ybWF0CisgICAgaWYgZGVjb21wcmVzczoKKyAgICAgICAgIyBSZW1vdmUgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIG5ld19saW5rbmFtZSA9IGZpbGVbOi1sZW4oY29tcHJlc3Nfc3VmZml4KV0KKyAgICAgICAgbmV3X3NvdXJjZSA9IG9zLnJlYWRsaW5rKGZpbGUpWzotbGVuKGNvbXByZXNzX3N1ZmZpeCldCisgICAgZWxzZToKKyAgICAgICAgIyBBcHBlbmQgY29tcHJlc3Mgc3VmZml4CisgICAgICAgIG5ld19saW5rbmFtZSA9IGZpbGUgKyBjb21wcmVzc19zdWZmaXgKKyAgICAgICAgbmV3X3NvdXJjZSA9IG9zLnJlYWRsaW5rKGZpbGUpICsgY29tcHJlc3Nfc3VmZml4CisKKyAgICBiYi5ub3RlKCdzeW1saW5rICVzLS0+JXMnICUgKG5ld19saW5rbmFtZSwgbmV3X3NvdXJjZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG5ld19saW5rbmFtZSk6CisgICAgICAgIG9zLnN5bWxpbmsobmV3X3NvdXJjZSwgbmV3X2xpbmtuYW1lKQorCisgICAgb3MudW5saW5rKGZpbGUpCisKK2RlZiBfaXNfaW5mbyhmaWxlKToKKyAgICBmbGFncyA9ICcuaW5mbyAuaW5mby0nLnNwbGl0KCkKKyAgICBmb3IgZmxhZyBpbiBmbGFnczoKKyAgICAgICAgaWYgZmxhZyBpbiBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBGYWxzZQorCitkZWYgX2lzX21hbihmaWxlKToKKyAgICBpbXBvcnQgcmUKKworICAgICMgSXQgcmVmZXJzIE1BTlNFQ1QtdmFyIGluIG1hbigxLjZnKSdzIG1hbi5jb25maWcKKyAgICAjICIuMTouMXA6Ljg6LjI6LjM6LjNwOi40Oi41Oi42Oi43Oi45Oi4wcDoudGNsOi5uOi5sOi5wOi5vIgorICAgICMgTm90IHN0YXJ0IHdpdGggJy4nLCBhbmQgY29udGFpbiB0aGUgYWJvdmUgY29sb24tc2VwZXJhdGUgZWxlbWVudAorICAgIHAgPSByZS5jb21waWxlKHInW15cLl0rXC4oWzEtOWxub3BdfDBwfHRjbCknKQorICAgIGlmIHAuc2VhcmNoKGZpbGUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBfaXNfY29tcHJlc3NfZG9jKGZpbGUsIGNvbXByZXNzX2Zvcm1hdF9saXN0KToKKyAgICBjb21wcmVzc19mb3JtYXQgPSBfZ2V0X2NvbXByZXNzX2Zvcm1hdChmaWxlLCBjb21wcmVzc19mb3JtYXRfbGlzdCkKKyAgICBjb21wcmVzc19zdWZmaXggPSAnLicgKyBjb21wcmVzc19mb3JtYXQKKyAgICBpZiBmaWxlLmVuZHN3aXRoKGNvbXByZXNzX3N1ZmZpeCk6CisgICAgICAgICMgUmVtb3ZlIHRoZSBjb21wcmVzcyBzdWZmaXgKKyAgICAgICAgdW5jb21wcmVzc19maWxlID0gZmlsZVs6LWxlbihjb21wcmVzc19zdWZmaXgpXQorICAgICAgICBpZiBfaXNfaW5mbyh1bmNvbXByZXNzX2ZpbGUpIG9yIF9pc19tYW4odW5jb21wcmVzc19maWxlKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlLCBjb21wcmVzc19mb3JtYXQKKworICAgIHJldHVybiBGYWxzZSwgJycKKworZGVmIGNvbXByZXNzX2RvYyh0b3BkaXIsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpOgorICAgIGhhcmRsaW5rX2RpY3QgPSB7fQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHRvcGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBfaXNfaW5mbyhmaWxlKSBvciBfaXNfbWFuKGZpbGUpOgorICAgICAgICAgICAgICAgICMgU3ltbGluaworICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc19zeW1saW5rKGZpbGUsIGNvbXByZXNzX21vZGUpCisgICAgICAgICAgICAgICAgIyBIYXJkbGluaworICAgICAgICAgICAgICAgIGVsaWYgb3MubHN0YXQoZmlsZSkuc3RfbmxpbmsgPiAxOgorICAgICAgICAgICAgICAgICAgICBfY29sbGVjdF9oYXJkbGluayhoYXJkbGlua19kaWN0LCBmaWxlKQorICAgICAgICAgICAgICAgICMgTm9ybWFsIGZpbGUKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAiJXMgJXMiICUgKGNvbXByZXNzX2NtZHNbY29tcHJlc3NfbW9kZV0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICAgICAgICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJjb21wcmVzcyBmYWlsZWQgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2NvbXByZXNzIGZpbGUgJXMnICUgZmlsZSkKKworICAgIF9wcm9jZXNzX2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGNvbXByZXNzX21vZGUsIGNvbXByZXNzX2NtZHMpCisKKyMgRGVjb21wcmVzcyBkb2MgZmlsZXMgd2hpY2ggZm9ybWF0IGlzIG5vdCBjb21wcmVzc19tb2RlCitkZWYgZGVjb21wcmVzc19kb2ModG9wZGlyLCBjb21wcmVzc19tb2RlLCBkZWNvbXByZXNzX2NtZHMpOgorICAgIGhhcmRsaW5rX2RpY3QgPSB7fQorICAgIGRlY29tcHJlc3MgPSBUcnVlCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsodG9wZGlyKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBmaWxlID0gb3MucGF0aC5qb2luKHJvb3QsIGYpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlcywgY29tcHJlc3NfZm9ybWF0ID0gX2lzX2NvbXByZXNzX2RvYyhmaWxlLCBkZWNvbXByZXNzX2NtZHMua2V5cygpKQorICAgICAgICAgICAgIyBEZWNvbXByZXNzIGZpbGVzIHdoaWNoIGZvcm1hdCBpcyBub3QgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgaWYgcmVzIGFuZCBjb21wcmVzc19tb2RlIT1jb21wcmVzc19mb3JtYXQ6CisgICAgICAgICAgICAgICAgIyBTeW1saW5rCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIF9wcm9jZXNzX3N5bWxpbmsoZmlsZSwgY29tcHJlc3NfZm9ybWF0LCBkZWNvbXByZXNzKQorICAgICAgICAgICAgICAgICMgSGFyZGxpbmsKKyAgICAgICAgICAgICAgICBlbGlmIG9zLmxzdGF0KGZpbGUpLnN0X25saW5rID4gMToKKyAgICAgICAgICAgICAgICAgICAgX2NvbGxlY3RfaGFyZGxpbmsoaGFyZGxpbmtfZGljdCwgZmlsZSkKKyAgICAgICAgICAgICAgICAjIE5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgY21kID0gIiVzICVzIiAlIChkZWNvbXByZXNzX2NtZHNbY29tcHJlc3NfZm9ybWF0XSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oImRlY29tcHJlc3MgZmFpbGVkICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdkZWNvbXByZXNzIGZpbGUgJXMnICUgZmlsZSkKKworICAgIF9wcm9jZXNzX2hhcmRsaW5rKGhhcmRsaW5rX2RpY3QsIGNvbXByZXNzX21vZGUsIGRlY29tcHJlc3NfY21kcywgZGVjb21wcmVzcykKKworcHl0aG9uIGNvbXByZXNzX2RvY191cGRhdGVhbHRlcm5hdGl2ZXMgKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCd1cGRhdGUtYWx0ZXJuYXRpdmVzJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgbWFuZGlyID0gZC5nZXRWYXIoIm1hbmRpciIsIFRydWUpCisgICAgaW5mb2RpciA9IGQuZ2V0VmFyKCJpbmZvZGlyIiwgVHJ1ZSkKKyAgICBjb21wcmVzc19tb2RlID0gZC5nZXRWYXIoJ0RPQ19DT01QUkVTUycsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIG9sZF9uYW1lcyA9IChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBuZXdfbmFtZXMgPSBbXQorICAgICAgICBmb3Igb2xkX25hbWUgaW4gb2xkX25hbWVzOgorICAgICAgICAgICAgb2xkX2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBvbGRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIG9sZF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgb2xkX25hbWUsIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lLCBUcnVlKSBvciBcCisgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIFwKKyAgICAgICAgICAgICAgICBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgIG9sZF9saW5rCisgICAgICAgICAgICAjIFNvbWV0aW1lcyBvbGRfdGFyZ2V0IGlzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSB0byB0aGUgbGluayBuYW1lLgorICAgICAgICAgICAgb2xkX3RhcmdldCAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvbGRfbGluayksIG9sZF90YXJnZXQpCisKKyAgICAgICAgICAgICMgVGhlIHVwZGF0ZWFsdGVybmF0aXZlcyB1c2VkIGZvciBjb21wcmVzcyBkb2MKKyAgICAgICAgICAgIGlmIG1hbmRpciBpbiBvbGRfdGFyZ2V0IG9yIGluZm9kaXIgaW4gb2xkX3RhcmdldDoKKyAgICAgICAgICAgICAgICBuZXdfbmFtZSA9IG9sZF9uYW1lICsgJy4nICsgY29tcHJlc3NfbW9kZQorICAgICAgICAgICAgICAgIG5ld19saW5rID0gb2xkX2xpbmsgKyAnLicgKyBjb21wcmVzc19tb2RlCisgICAgICAgICAgICAgICAgbmV3X3RhcmdldCA9IG9sZF90YXJnZXQgKyAnLicgKyBjb21wcmVzc19tb2RlCisgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIG5ld19uYW1lLCBuZXdfbGluaykKKyAgICAgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIG9sZF9uYW1lLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgZC5kZWxWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBvbGRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBuZXdfbmFtZSwgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgb2xkX25hbWUsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLmRlbFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG9sZF9uYW1lKQorICAgICAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIG5ld19uYW1lLCBuZXdfdGFyZ2V0KQorICAgICAgICAgICAgICAgIGVsaWYgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgbmV3X3RhcmdldCkKKyAgICAgICAgICAgICAgICBlbGlmIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBvbGRfbmFtZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBuZXdfdGFyZ2V0KQorCisgICAgICAgICAgICAgICAgbmV3X25hbWVzLmFwcGVuZChuZXdfbmFtZSkKKworICAgICAgICBpZiBuZXdfbmFtZXM6CisgICAgICAgICAgICBkLnNldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCAnICcuam9pbihuZXdfbmFtZXMpKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29weWxlZnRfY29tcGxpYW5jZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDdjMTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2NvbXBsaWFuY2UuYmJjbGFzcwpAQCAtMCwwICsxLDY0IEBACisjIERlcGxveSBzb3VyY2VzIGZvciByZWNpcGVzIGZvciBjb21wbGlhbmNlIHdpdGggY29weWxlZnQtc3R5bGUgbGljZW5zZXMKKyMgRGVmYXVsdHMgdG8gdXNpbmcgc3ltbGlua3MsIGFzIGl0J3MgYSBxdWljayBvcGVyYXRpb24sIGFuZCBvbmUgY2FuIGVhc2lseQorIyBmb2xsb3cgdGhlIGxpbmtzIHdoZW4gbWFraW5nIHVzZSBvZiB0aGUgZmlsZXMgKGUuZy4gdGFyIHdpdGggdGhlIC1oIGFyZykuCisjCisjIHZpOnN0cz00OnN3PTQ6ZXQKKworaW5oZXJpdCBjb3B5bGVmdF9maWx0ZXIKKworQ09QWUxFRlRfU09VUkNFU19ESVIgPz0gJyR7REVQTE9ZX0RJUn0vY29weWxlZnRfc291cmNlcycKKworcHl0aG9uIGRvX3ByZXBhcmVfY29weWxlZnRfc291cmNlcyAoKSB7CisgICAgIiIiUG9wdWxhdGUgYSB0cmVlIG9mIHRoZSByZWNpcGUgc291cmNlcyBhbmQgZW1pdCBwYXRjaCBzZXJpZXMgZmlsZXMiIiIKKyAgICBpbXBvcnQgb3MucGF0aAorICAgIGltcG9ydCBzaHV0aWwKKworICAgIHAgPSBkLmdldFZhcignUCcsIFRydWUpCisgICAgaW5jbHVkZWQsIHJlYXNvbiA9IGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpCisgICAgaWYgbm90IGluY2x1ZGVkOgorICAgICAgICBiYi5kZWJ1ZygxLCAnY29weWxlZnQ6ICVzIGlzIGV4Y2x1ZGVkOiAlcycgJSAocCwgcmVhc29uKSkKKyAgICAgICAgcmV0dXJuCisgICAgZWxzZToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2NvcHlsZWZ0OiAlcyBpcyBpbmNsdWRlZDogJXMnICUgKHAsIHJlYXNvbikpCisKKyAgICBzb3VyY2VzX2RpciA9IGQuZ2V0VmFyKCdDT1BZTEVGVF9TT1VSQ0VTX0RJUicsIFRydWUpCisgICAgZGxfZGlyID0gZC5nZXRWYXIoJ0RMX0RJUicsIFRydWUpCisgICAgc3JjX3VyaSA9IGQuZ2V0VmFyKCdTUkNfVVJJJywgVHJ1ZSkuc3BsaXQoKQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHNyY191cmksIGQpCisgICAgdWQgPSBmZXRjaC51ZAorCisgICAgcGYgPSBkLmdldFZhcignUEYnLCBUcnVlKQorICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oc291cmNlc19kaXIsIHBmKQorICAgIHNodXRpbC5ybXRyZWUoZGVzdCwgaWdub3JlX2Vycm9ycz1UcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0KQorCisgICAgZm9yIHUgaW4gdWQudmFsdWVzKCk6CisgICAgICAgIGxvY2FsID0gb3MucGF0aC5ub3JtcGF0aChmZXRjaC5sb2NhbHBhdGgodS51cmwpKQorICAgICAgICBpZiBsb2NhbC5lbmRzd2l0aCgnLmJiJyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbGlmIGxvY2FsLmVuZHN3aXRoKCcvJyk6CisgICAgICAgICAgICBsb2NhbCA9IGxvY2FsWzotMV0KKworICAgICAgICBpZiB1Lm1pcnJvcnRhcmJhbGw6CisgICAgICAgICAgICB0YXJiYWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZGxfZGlyLCB1Lm1pcnJvcnRhcmJhbGwpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0YXJiYWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIGxvY2FsID0gdGFyYmFsbF9wYXRoCisKKyAgICAgICAgb2UucGF0aC5zeW1saW5rKGxvY2FsLCBvcy5wYXRoLmpvaW4oZGVzdCwgb3MucGF0aC5iYXNlbmFtZShsb2NhbCkpLCBmb3JjZT1UcnVlKQorCisgICAgcGF0Y2hlcyA9IHNyY19wYXRjaGVzKGQpCisgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBwYXRjaGRpciA9IHBhcm0uZ2V0KCdwYXRjaGRpcicpCisgICAgICAgIGlmIHBhdGNoZGlyOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGRlc3QsICdzZXJpZXMuc3ViZGlyLiVzJyAlIHBhdGNoZGlyLnJlcGxhY2UoJy8nLCAnXycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VyaWVzID0gb3MucGF0aC5qb2luKGRlc3QsICdzZXJpZXMnKQorCisgICAgICAgIHdpdGggb3BlbihzZXJpZXMsICdhJykgYXMgczoKKyAgICAgICAgICAgIHMud3JpdGUoJyVzIC1wJXNcbicgJSAob3MucGF0aC5iYXNlbmFtZShsb2NhbCksIHBhcm1bJ3N0cmlwbGV2ZWwnXSkpCit9CisKK2FkZHRhc2sgcHJlcGFyZV9jb3B5bGVmdF9zb3VyY2VzIGFmdGVyIGRvX2ZldGNoIGJlZm9yZSBkb19idWlsZAorZG9fcHJlcGFyZV9jb3B5bGVmdF9zb3VyY2VzW2RpcnNdID0gIiR7V09SS0RJUn0iCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gJ2RvX3ByZXBhcmVfY29weWxlZnRfc291cmNlcycKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jb3B5bGVmdF9maWx0ZXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmJlN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NvcHlsZWZ0X2ZpbHRlci5iYmNsYXNzCkBAIC0wLDAgKzEsNzkgQEAKKyMgRmlsdGVyIHRoZSBsaWNlbnNlLCB0aGUgY29weWxlZnRfc2hvdWxkX2luY2x1ZGUgcmV0dXJucyBUcnVlIGZvciB0aGUKKyMgQ09QWUxFRlRfTElDRU5TRV9JTkNMVURFIHJlY2lwZSwgYW5kIEZhbHNlIGZvciB0aGUKKyMgQ09QWUxFRlRfTElDRU5TRV9FWENMVURFLgorIworIyBCeSBkZWZhdWx0LCBpbmNsdWRlcyBhbGwgR1BMIGFuZCBMR1BMLCBhbmQgZXhjbHVkZXMgQ0xPU0VEIGFuZCBQcm9wcmlldGFyeS4KKyMKKyMgdmk6c3RzPTQ6c3c9NDpldAorCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREUgPz0gJ0dQTCogTEdQTConCitDT1BZTEVGVF9MSUNFTlNFX0lOQ0xVREVbdHlwZV0gPSAnbGlzdCcKK0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGdsb2JzIHdoaWNoIGluY2x1ZGUgbGljZW5zZXMnCisKK0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERSA/PSAnQ0xPU0VEIFByb3ByaWV0YXJ5JworQ09QWUxFRlRfTElDRU5TRV9FWENMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9MSUNFTlNFX0VYQ0xVREVbZG9jXSA9ICdTcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBnbG9icyB3aGljaCBleGNsdWRlIGxpY2Vuc2VzJworCitDT1BZTEVGVF9SRUNJUEVfVFlQRSA/PSAnJHtAY29weWxlZnRfcmVjaXBlX3R5cGUoZCl9JworQ09QWUxFRlRfUkVDSVBFX1RZUEVbZG9jXSA9ICdUaGUgInR5cGUiIG9mIHRoZSBjdXJyZW50IHJlY2lwZSAoZS5nLiB0YXJnZXQsIG5hdGl2ZSwgY3Jvc3MpJworCitDT1BZTEVGVF9SRUNJUEVfVFlQRVMgPz0gJ3RhcmdldCcKK0NPUFlMRUZUX1JFQ0lQRV9UWVBFU1t0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUkVDSVBFX1RZUEVTW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVjaXBlIHR5cGVzIHRvIGluY2x1ZGUnCisKK0NPUFlMRUZUX0FWQUlMQUJMRV9SRUNJUEVfVFlQRVMgPSAndGFyZ2V0IG5hdGl2ZSBuYXRpdmVzZGsgY3Jvc3MgY3Jvc3NzZGsgY3Jvc3MtY2FuYWRpYW4nCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9BVkFJTEFCTEVfUkVDSVBFX1RZUEVTW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHJlY2lwZSB0eXBlcycKKworQ09QWUxFRlRfUE5fSU5DTFVERSA/PSAnJworQ09QWUxFRlRfUE5fSU5DTFVERVt0eXBlXSA9ICdsaXN0JworQ09QWUxFRlRfUE5fSU5DTFVERVtkb2NdID0gJ1NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlY2lwZSBuYW1lcyB0byBpbmNsdWRlJworCitDT1BZTEVGVF9QTl9FWENMVURFID89ICcnCitDT1BZTEVGVF9QTl9FWENMVURFW3R5cGVdID0gJ2xpc3QnCitDT1BZTEVGVF9QTl9FWENMVURFW2RvY10gPSAnU3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgcmVjaXBlIG5hbWVzIHRvIGV4Y2x1ZGUnCisKK2RlZiBjb3B5bGVmdF9yZWNpcGVfdHlwZShkKToKKyAgICBmb3IgcmVjaXBlX3R5cGUgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfQVZBSUxBQkxFX1JFQ0lQRV9UWVBFUycsIGQpOgorICAgICAgICBpZiBvZS51dGlscy5pbmhlcml0cyhkLCByZWNpcGVfdHlwZSk6CisgICAgICAgICAgICByZXR1cm4gcmVjaXBlX3R5cGUKKyAgICByZXR1cm4gJ3RhcmdldCcKKworZGVmIGNvcHlsZWZ0X3Nob3VsZF9pbmNsdWRlKGQpOgorICAgICIiIgorICAgIERldGVybWluZSBpZiB0aGlzIHJlY2lwZSdzIHNvdXJjZXMgc2hvdWxkIGJlIGRlcGxveWVkIGZvciBjb21wbGlhbmNlCisgICAgIiIiCisgICAgaW1wb3J0IGFzdAorICAgIGltcG9ydCBvZS5saWNlbnNlCisgICAgZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoY2FzZSBhcyBmbm1hdGNoCisKKyAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgZGlkIG5vdCBtYXRjaCBhbnl0aGluZycKKworICAgIHJlY2lwZV90eXBlID0gZC5nZXRWYXIoJ0NPUFlMRUZUX1JFQ0lQRV9UWVBFJywgVHJ1ZSkKKyAgICBpZiByZWNpcGVfdHlwZSBub3QgaW4gb2UuZGF0YS50eXBlZF92YWx1ZSgnQ09QWUxFRlRfUkVDSVBFX1RZUEVTJywgZCk6CisgICAgICAgIGluY2x1ZGUsIG1vdGl2ZSA9IEZhbHNlLCAncmVjaXBlIHR5cGUgIiVzIiBpcyBleGNsdWRlZCcgJSByZWNpcGVfdHlwZQorCisgICAgaW5jbHVkZSA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0xJQ0VOU0VfSU5DTFVERScsIGQpCisgICAgZXhjbHVkZSA9IG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX0xJQ0VOU0VfRVhDTFVERScsIGQpCisKKyAgICB0cnk6CisgICAgICAgIGlzX2luY2x1ZGVkLCByZWFzb24gPSBvZS5saWNlbnNlLmlzX2luY2x1ZGVkKGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSksIGluY2x1ZGUsIGV4Y2x1ZGUpCisgICAgZXhjZXB0IG9lLmxpY2Vuc2UuTGljZW5zZUVycm9yIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIGV4YykpCisgICAgZWxzZToKKyAgICAgICAgaWYgaXNfaW5jbHVkZWQ6CisgICAgICAgICAgICBpZiByZWFzb246CisgICAgICAgICAgICAgICAgaW5jbHVkZWQsIG1vdGl2ZSA9IFRydWUsICdyZWNpcGUgaGFzIGluY2x1ZGVkIGxpY2Vuc2VzOiAlcycgJSAnLCAnLmpvaW4ocmVhc29uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgZG9lcyBub3QgaW5jbHVkZSBhIGNvcHlsZWZ0IGxpY2Vuc2UnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgaGFzIGV4Y2x1ZGVkIGxpY2Vuc2VzOiAlcycgJSAnLCAnLmpvaW4ocmVhc29uKQorCisgICAgaWYgYW55KGZubWF0Y2goZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG5hbWUpIFwKKyAgICAgICAgICAgIGZvciBuYW1lIGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ0NPUFlMRUZUX1BOX0lOQ0xVREUnLCBkKSk6CisgICAgICAgIGluY2x1ZGVkLCBtb3RpdmUgPSAgVHJ1ZSwgJ3JlY2lwZSBpbmNsdWRlZCBieSBuYW1lJworICAgIGlmIGFueShmbm1hdGNoKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBuYW1lKSBcCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdDT1BZTEVGVF9QTl9FWENMVURFJywgZCkpOgorICAgICAgICBpbmNsdWRlZCwgbW90aXZlID0gRmFsc2UsICdyZWNpcGUgZXhjbHVkZWQgYnkgbmFtZScKKworICAgIHJldHVybiBpbmNsdWRlZCwgbW90aXZlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY29yZS1pbWFnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTM0MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2NvcmUtaW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDczIEBACisjIENvbW1vbiBjb2RlIGZvciBnZW5lcmF0aW5nIGNvcmUgcmVmZXJlbmNlIGltYWdlcworIworIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMSBMaW51eCBGb3VuZGF0aW9uCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCisjIElNQUdFX0ZFQVRVUkVTIGNvbnRyb2wgY29udGVudCBvZiB0aGUgY29yZSByZWZlcmVuY2UgaW1hZ2VzCisjIAorIyBCeSBkZWZhdWx0IHdlIGluc3RhbGwgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCBhbmQgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgcGFja2FnZXM7CisjIHRoaXMgZ2l2ZXMgdXMgd29ya2luZyAoY29uc29sZSBvbmx5KSByb290ZnMuCisjCisjIEF2YWlsYWJsZSBJTUFHRV9GRUFUVVJFUzoKKyMKKyMgLSB4MTEgICAgICAgICAgICAgICAgIC0gWCBzZXJ2ZXIKKyMgLSB4MTEtYmFzZSAgICAgICAgICAgIC0gWCBzZXJ2ZXIgd2l0aCBtaW5pbWFsIGVudmlyb25tZW50CisjIC0geDExLXNhdG8gICAgICAgICAgICAtIE9wZW5lZEhhbmQgU2F0byBlbnZpcm9ubWVudAorIyAtIHRvb2xzLWRlYnVnICAgICAgICAgLSBkZWJ1Z2dpbmcgdG9vbHMKKyMgLSBlY2xpcHNlLWRlYnVnICAgICAgIC0gRWNsaXBzZSByZW1vdGUgZGVidWdnaW5nIHN1cHBvcnQKKyMgLSB0b29scy1wcm9maWxlICAgICAgIC0gcHJvZmlsaW5nIHRvb2xzCisjIC0gdG9vbHMtdGVzdGFwcHMgICAgICAtIHRvb2xzIHVzYWJsZSB0byBtYWtlIHNvbWUgZGV2aWNlIHRlc3RzCisjIC0gdG9vbHMtc2RrICAgICAgICAgICAtIFNESyAoQy9DKysgY29tcGlsZXIsIGF1dG90b29scywgZXRjLikKKyMgLSBuZnMtc2VydmVyICAgICAgICAgIC0gTkZTIHNlcnZlcgorIyAtIG5mcy1jbGllbnQgICAgICAgICAgLSBORlMgY2xpZW50CisjIC0gc3NoLXNlcnZlci1kcm9wYmVhciAtIFNTSCBzZXJ2ZXIgKGRyb3BiZWFyKQorIyAtIHNzaC1zZXJ2ZXItb3BlbnNzaCAgLSBTU0ggc2VydmVyIChvcGVuc3NoKQorIyAtIHF0NC1wa2dzICAgICAgICAgICAgLSBRdDQvWDExIGFuZCBkZW1vIGFwcGxpY2F0aW9ucworIyAtIGh3Y29kZWNzICAgICAgICAgICAgLSBJbnN0YWxsIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBjb2RlY3MKKyMgLSBwYWNrYWdlLW1hbmFnZW1lbnQgIC0gaW5zdGFsbHMgcGFja2FnZSBtYW5hZ2VtZW50IHRvb2xzIGFuZCBwcmVzZXJ2ZXMgdGhlIHBhY2thZ2UgbWFuYWdlciBkYXRhYmFzZQorIyAtIGRlYnVnLXR3ZWFrcyAgICAgICAgLSBtYWtlcyBhbiBpbWFnZSBzdWl0YWJsZSBmb3IgZGV2ZWxvcG1lbnQsIGUuZy4gYWxsb3dpbmcgcGFzc3dvcmRsZXNzIHJvb3QgbG9naW5zCisjIC0gZGV2LXBrZ3MgICAgICAgICAgICAtIGRldmVsb3BtZW50IHBhY2thZ2VzIChoZWFkZXJzLCBldGMuKSBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcyBpbiB0aGUgcm9vdGZzCisjIC0gZGJnLXBrZ3MgICAgICAgICAgICAtIGRlYnVnIHN5bWJvbCBwYWNrYWdlcyBmb3IgYWxsIGluc3RhbGxlZCBwYWNrYWdlcyBpbiB0aGUgcm9vdGZzCisjIC0gZG9jLXBrZ3MgICAgICAgICAgICAtIGRvY3VtZW50YXRpb24gcGFja2FnZXMgZm9yIGFsbCBpbnN0YWxsZWQgcGFja2FnZXMgaW4gdGhlIHJvb3RmcworIyAtIHB0ZXN0LXBrZ3MgICAgICAgICAgLSBwdGVzdCBwYWNrYWdlcyBmb3IgYWxsIHB0ZXN0LWVuYWJsZWQgcmVjaXBlcworIyAtIHJlYWQtb25seS1yb290ZnMgICAgLSB0d2Vha3MgYW4gaW1hZ2UgdG8gc3VwcG9ydCByZWFkLW9ubHkgcm9vdGZzCisjCitGRUFUVVJFX1BBQ0tBR0VTX3gxMSA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEiCitGRUFUVVJFX1BBQ0tBR0VTX3gxMS1iYXNlID0gInBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlIgorRkVBVFVSRV9QQUNLQUdFU194MTEtc2F0byA9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0byIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtZGVidWcgPSAicGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWciCitGRUFUVVJFX1BBQ0tBR0VTX2VjbGlwc2UtZGVidWcgPSAicGFja2FnZWdyb3VwLWNvcmUtZWNsaXBzZS1kZWJ1ZyIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtcHJvZmlsZSA9ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIgorRkVBVFVSRV9QQUNLQUdFU190b29scy10ZXN0YXBwcyA9ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy10ZXN0YXBwcyIKK0ZFQVRVUkVfUEFDS0FHRVNfdG9vbHMtc2RrID0gInBhY2thZ2Vncm91cC1jb3JlLXNkayBwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQiCitGRUFUVVJFX1BBQ0tBR0VTX25mcy1zZXJ2ZXIgPSAicGFja2FnZWdyb3VwLWNvcmUtbmZzLXNlcnZlciIKK0ZFQVRVUkVfUEFDS0FHRVNfbmZzLWNsaWVudCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1uZnMtY2xpZW50IgorRkVBVFVSRV9QQUNLQUdFU19zc2gtc2VydmVyLWRyb3BiZWFyID0gInBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciIKK0ZFQVRVUkVfUEFDS0FHRVNfc3NoLXNlcnZlci1vcGVuc3NoID0gInBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIgorRkVBVFVSRV9QQUNLQUdFU19xdDQtcGtncyA9ICJwYWNrYWdlZ3JvdXAtY29yZS1xdC1kZW1vYXBwcyIKK0ZFQVRVUkVfUEFDS0FHRVNfaHdjb2RlY3MgPSAiJHtNQUNISU5FX0hXQ09ERUNTfSIKKworCisjIElNQUdFX0ZFQVRVUkVTX1JFUExBQ0VTX2ZvbyA9ICdiYXIxIGJhcjInCisjIEluY2x1ZGluZyBpbWFnZSBmZWF0dXJlIGZvbyB3b3VsZCByZXBsYWNlIHRoZSBpbWFnZSBmZWF0dXJlcyBiYXIxIGFuZCBiYXIyCitJTUFHRV9GRUFUVVJFU19SRVBMQUNFU19zc2gtc2VydmVyLW9wZW5zc2ggPSAic3NoLXNlcnZlci1kcm9wYmVhciIKKworIyBJTUFHRV9GRUFUVVJFU19DT05GTElDVFNfZm9vID0gJ2JhcjEgYmFyMicKKyMgQW4gZXJyb3IgZXhjZXB0aW9uIHdvdWxkIGJlIHJhaXNlZCBpZiBib3RoIGltYWdlIGZlYXR1cmVzIGZvbyBhbmQgYmFyMShvciBiYXIyKSBhcmUgaW5jbHVkZWQKKworTUFDSElORV9IV0NPREVDUyA/Pz0gIiIKKworQ09SRV9JTUFHRV9CQVNFX0lOU1RBTEwgPSAnXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QgXAorICAgIHBhY2thZ2Vncm91cC1iYXNlLWV4dGVuZGVkIFwKKyAgICBcCisgICAgJHtDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTEx9IFwKKyAgICAnCisKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCA/PSAiIgorCitJTUFHRV9JTlNUQUxMID89ICIke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2NwYW4tYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODE3YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Bhbi1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSw1NSBAQAorIworIyBjcGFuLWJhc2UgcHJvdmlkZXJzIHZhcmlvdXMgcGVybCByZWxhdGVkIGluZm9ybWF0aW9uIG5lZWRlZCBmb3IgYnVpbGRpbmcKKyMgY3BhbiBtb2R1bGVzCisjCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3BlcmwgJHtkYXRhZGlyfS9wZXJsIgorCitERVBFTkRTICArPSAiJHtAWyJwZXJsIiwgInBlcmwtbmF0aXZlIl1bKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpKV19IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QFsicGVybCIsICIiXVsoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkpXX0iCisKK1BFUkxfT1dOX0RJUiA9ICIke0BbIiIsICIvcGVybC1uYXRpdmUiXVsoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkpXX0iCisKKyMgRGV0ZXJtaW5lIHRoZSBzdGFnZWQgdmVyc2lvbiBvZiBwZXJsIGZyb20gdGhlIHBlcmwgY29uZmlndXJhdGlvbiBmaWxlCisjIEFzc2lnbiB2YXJkZXB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2Ugc2lnbmF0dXJlIGlzIGNoYW5nZWQgYmVmb3JlIGFuZCBhZnRlcgorIyBwZXJsIGlzIGJ1aWx0IChmcm9tIE5vbmUgdG8gcmVhbCB2ZXJzaW9uIGluIGNvbmZpZy5zaCkuCitnZXRfcGVybF92ZXJzaW9uW3ZhcmRlcHZhbHVlXSA9ICIke1BFUkxfT1dOX0RJUn0iCitkZWYgZ2V0X3BlcmxfdmVyc2lvbihkKToKKyAgICBpbXBvcnQgcmUKKyAgICBjZmcgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC9jb25maWcuc2gnKQorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oY2ZnLCAncicpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJldHVybiBOb25lCisgICAgbCA9IGYucmVhZGxpbmVzKCk7CisgICAgZi5jbG9zZSgpOworICAgIHIgPSByZS5jb21waWxlKCJedmVyc2lvbj0nKFxkKlwuXGQqXC5cZCopJyIpCisgICAgZm9yIHMgaW4gbDoKKyAgICAgICAgbSA9IHIubWF0Y2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworIyBEZXRlcm1pbmUgd2hlcmUgdGhlIGxpYnJhcnkgZGlyZWN0b3JpZXMgYXJlCitkZWYgcGVybF9nZXRfbGliZGlycyhkKToKKyAgICBsaWJkaXIgPSBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkKKyAgICBpZiBpc190YXJnZXQoZCkgPT0gIm5vIjoKKyAgICAgICAgbGliZGlyICs9ICcvcGVybC1uYXRpdmUnCisgICAgbGliZGlyICs9ICcvcGVybCcKKyAgICByZXR1cm4gbGliZGlyCisKK2RlZiBpc190YXJnZXQoZCk6CisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICByZXR1cm4gInllcyIKKyAgICByZXR1cm4gIm5vIgorCitQRVJMTElCRElSUyA6PSAiJHtAcGVybF9nZXRfbGliZGlycyhkKX0iCitQRVJMVkVSU0lPTiA6PSAiJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0iCitQRVJMVkVSU0lPTlt2YXJkZXB2YWx1ZV0gPSAiIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7UEVSTExJQkRJUlN9L2F1dG8vKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS9hdXRvLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS9hdXRvLyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7UEVSTExJQkRJUlN9L3ZlbmRvcl9wZXJsLyR7UEVSTFZFUlNJT059L2F1dG8vKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke1BFUkxMSUJESVJTfS92ZW5kb3JfcGVybC8ke1BFUkxWRVJTSU9OfS9hdXRvLyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcGFuLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Bhbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmJkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Bhbi5iYmNsYXNzCkBAIC0wLDAgKzEsNTUgQEAKKyMKKyMgVGhpcyBpcyBmb3IgcGVybCBtb2R1bGVzIHRoYXQgdXNlIHRoZSBvbGQgTWFrZWZpbGUuUEwgYnVpbGQgc3lzdGVtCisjCitpbmhlcml0IGNwYW4tYmFzZSBwZXJsbmF0aXZlCisKK0VYVFJBX0NQQU5GTEFHUyA/PSAiIgorRVhUUkFfUEVSTEZMQUdTID89ICIiCisKKyMgRW52IHZhciB3aGljaCB0ZWxscyBwZXJsIGlmIGl0IHNob3VsZCB1c2UgaG9zdCAobm8pIG9yIHRhcmdldCAoeWVzKSBzZXR0aW5ncworZXhwb3J0IFBFUkxDT05GSUdUQVJHRVQgPSAiJHtAaXNfdGFyZ2V0KGQpfSIKKworIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgd2hlcmUgdGhlIHBlcmwgaW5jbHVkZSBmaWxlcyBhcmUKK2V4cG9ydCBQRVJMX0lOQyA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9L0NPUkUiCitleHBvcnQgUEVSTF9MSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUn0ke1BFUkxfT1dOX0RJUn0vcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfSIKK2V4cG9ydCBQRVJMSE9TVExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke0BnZXRfcGVybF92ZXJzaW9uKGQpfS8iCisKK2NwYW5fZG9fY29uZmlndXJlICgpIHsKKwlleHBvcnQgUEVSTDVMSUI9IiR7UEVSTF9BUkNITElCfSIKKwl5ZXMgJycgfCBwZXJsICR7RVhUUkFfUEVSTEZMQUdTfSBNYWtlZmlsZS5QTCAke0VYVFJBX0NQQU5GTEFHU30KKworCSMgTWFrZWZpbGUuUExzIGNhbiBleGl0IHdpdGggc3VjY2VzcyB3aXRob3V0IGdlbmVyYXRpbmcgYQorCSMgTWFrZWZpbGUsIGUuZy4gaW4gY2FzZXMgb2YgbWlzc2luZyBjb25maWd1cmUgdGltZQorCSMgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGNvbnNpZGVyZWQgYSBiZXN0IHByYWN0aWNlIGJ5CisJIyBjcGFudGVzdGVycy5vcmcuIFNlZToKKwkjICAqIGh0dHA6Ly93aWtpLmNwYW50ZXN0ZXJzLm9yZy93aWtpL0NQQU5BdXRob3JOb3RlcworCSMgICogaHR0cDovL3d3dy5ubnRwLnBlcmwub3JnL2dyb3VwL3BlcmwucWEvMjAwOC8wOC9tc2cxMTIzNi5odG1sCisJWyAtZSBNYWtlZmlsZSBdIHx8IGJiZmF0YWwgIk5vIE1ha2VmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgTWFrZWZpbGUuUEwiCisKKwlpZiBbICIke0JVSUxEX1NZU30iICE9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQkuICR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvY29uZmlnLnNoCisJCSMgVXNlIGZpbmQgc2luY2UgdGhlcmUgY2FuIGJlIGEgTWFrZWZpbGUgZ2VuZXJhdGVkIGZvciBlYWNoIE1ha2VmaWxlLlBMCisJCWZvciBmIGluIGBmaW5kIC1uYW1lIE1ha2VmaWxlLlBMYDsgZG8KKwkJCWYyPWBlY2hvICRmIHwgc2VkIC1lICdzLy5QTC8vJ2AKKwkJCXRlc3QgLWYgJGYyIHx8IGNvbnRpbnVlCisJCQlzZWQgLWkgLWUgInM6XChQRVJMX0FSQ0hMSUIgPSBcKS4qOlwxJHtQRVJMX0FSQ0hMSUJ9OiIgXAorCQkJCS1lICdzL3BlcmwucmVhbC9wZXJsLycgXAorCQkJCS1lICJzfF5cKENDRkxBR1MgPS4qXCl8XDEgJHtDRkxBR1N9fCIgXAorCQkJCSRmMgorCQlkb25lCisJZmkKK30KKworY3Bhbl9kb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIFBBU1RIUlVfSU5DPSIke0NGTEFHU30iIExEPSIke0NDTER9IgorfQorCitjcGFuX2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbF92ZW5kb3IKKwlmb3IgUEVSTFNDUklQVCBpbiBgZ3JlcCAtcklFbCAnIyEgKiR7YmluZGlyfS9wZXJsLW5hdGl2ZS4qL3BlcmwnICR7RH1gOyBkbworCQlzZWQgLWkgLWUgJ3N8JHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybHwnICRQRVJMU0NSSVBUCisJZG9uZQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbmZpZ3VyZSBkb19jb21waWxlIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9jcGFuX2J1aWxkLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Bhbl9idWlsZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjQ4YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Bhbl9idWlsZC5iYmNsYXNzCkBAIC0wLDAgKzEsMzcgQEAKKyMKKyMgVGhpcyBpcyBmb3IgcGVybCBtb2R1bGVzIHRoYXQgdXNlIHRoZSBuZXcgQnVpbGQuUEwgYnVpbGQgc3lzdGVtCisjCitpbmhlcml0IGNwYW4tYmFzZSBwZXJsbmF0aXZlCisKK0VYVFJBX0NQQU5fQlVJTERfRkxBR1MgPz0gIiIKKworIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgaWYgaXQgc2hvdWxkIHVzZSBob3N0IChubykgb3IgdGFyZ2V0ICh5ZXMpIHNldHRpbmdzCitleHBvcnQgUEVSTENPTkZJR1RBUkdFVCA9ICIke0Bpc190YXJnZXQoZCl9IgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorZXhwb3J0IExEID0gIiR7Q0NMRH0iCisKK2NwYW5fYnVpbGRfZG9fY29uZmlndXJlICgpIHsKKwlpZiBbICIke0Bpc190YXJnZXQoZCl9IiA9ICJ5ZXMiIF07IHRoZW4KKwkJIyBidWlsZCBmb3IgdGFyZ2V0CisJCS4gJHtTVEFHSU5HX0xJQkRJUn0vcGVybC9jb25maWcuc2gKKwlmaQorCisJcGVybCBCdWlsZC5QTCAtLWluc3RhbGxkaXJzIHZlbmRvciBcCisJCQkJLS1kZXN0ZGlyICR7RH0gXAorCQkJCS0taW5zdGFsbF9wYXRoIGFyY2g9IiR7bGliZGlyfS9wZXJsIiBcCisJCQkJLS1pbnN0YWxsX3BhdGggc2NyaXB0PSR7YmluZGlyfSBcCisJCQkJLS1pbnN0YWxsX3BhdGggYmluPSR7YmluZGlyfSBcCisJCQkJLS1pbnN0YWxsX3BhdGggYmluZG9jPSR7bWFuZGlyfS9tYW4xIFwKKwkJCQktLWluc3RhbGxfcGF0aCBsaWJkb2M9JHttYW5kaXJ9L21hbjMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0VYVFJBX0NQQU5fQlVJTERfRkxBR1N9Cit9CisKK2NwYW5fYnVpbGRfZG9fY29tcGlsZSAoKSB7CisgICAgICAgIHBlcmwgQnVpbGQKK30KKworY3Bhbl9idWlsZF9kb19pbnN0YWxsICgpIHsKKwlwZXJsIEJ1aWxkIGluc3RhbGwKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9jcm9zcy1jYW5hZGlhbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGExNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcwpAQCAtMCwwICsxLDE4NSBAQAorIworIyBOT1RFIC0gV2hlbiB1c2luZyB0aGlzIGNsYXNzIHRoZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0CisjIFRSQU5TTEFURURfVEFSR0VUX0FSQ0ggaXMgYWRkZWQgaW50byBQTi4gVGhpcyBlbnN1cmVzIHRoYXQgaWYgdGhlIFRBUkdFVF9BUkNICisjIGlzIGNoYW5nZWQsIGFub3RoZXIgbmF0aXZlc2RrIHh4eC1jYW5hZGlhbi1jcm9zcyBjYW4gYmUgaW5zdGFsbGVkCisjCisKKworIyBTREsgcGFja2FnZXMgYXJlIGJ1aWx0IGVpdGhlciBleHBsaWNpdGx5IGJ5IHRoZSB1c2VyLAorIyBvciBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LiAgTm8gbmVlZCB0byBiZSBpbiAnd29ybGQnLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCitDTEFTU09WRVJSSURFID0gImNsYXNzLWNyb3NzLWNhbmFkaWFuIgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtTREtfQVJDSH0ke1NES19WRU5ET1J9LSR7U0RLX09TfToke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKKyMKKyMgVXBkYXRlIEJBU0VfUEFDS0FHRV9BUkNIIGFuZCBQQUNLQUdFX0FSQ0hTCisjCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0tJHtTREtQS0dTVUZGSVh9IgorQ0FOQURJQU5FWFRSQU9TID0gImxpbnV4LXVjbGliYyBsaW51eC1tdXNsIgorQ0FOQURJQU5FWFRSQVZFTkRPUiA9ICIiCitNT0RJRllUT1MgPz89ICIxIgorcHl0aG9uICgpIHsKKyAgICBhcmNocyA9IGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0hTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHNka2FyY2hzID0gW10KKyAgICBmb3IgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgc2RrYXJjaHMuYXBwZW5kKGFyY2ggKyAnLSR7U0RLUEtHU1VGRklYfScpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCAiICIuam9pbihzZGthcmNocykpCisKKyAgICAjIEFsbG93IHRoZSBmb2xsb3dpbmcgY29kZSBzZWdtZW50IHRvIGJlIGRpc2FibGVkLCBlLmcuIG1ldGEtZW52aXJvbm1lbnQKKyAgICBpZiBkLmdldFZhcigiTU9ESUZZVE9TIiwgVHJ1ZSkgIT0gIjEiOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGQuZ2V0VmFyKCJUQ0xJQkMiLCBUcnVlKSA9PSAiYmFyZW1ldGFsIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0b3MgPSBkLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkKKyAgICB3aGl0ZWxpc3QgPSBbXQorICAgIGZvciB2YXJpYW50IGluIFsiIiwgInNwZSIsICJ4MzIiLCAiZWFiaSIsICJuMzIiXToKKyAgICAgICAgZm9yIGxpYmMgaW4gWyIiLCAidWNsaWJjIiwgIm11c2wiXToKKyAgICAgICAgICAgIGVudHJ5ID0gImxpbnV4IgorICAgICAgICAgICAgaWYgdmFyaWFudCBhbmQgbGliYzoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi0iICsgbGliYyArIHZhcmlhbnQKKyAgICAgICAgICAgIGVsaWYgdmFyaWFudDoKKyAgICAgICAgICAgICAgICBlbnRyeSA9IGVudHJ5ICsgIi1nbnUiICsgdmFyaWFudAorICAgICAgICAgICAgZWxpZiBsaWJjOgorICAgICAgICAgICAgICAgIGVudHJ5ID0gZW50cnkgKyAiLSIgKyBsaWJjCisgICAgICAgICAgICB3aGl0ZWxpc3QuYXBwZW5kKGVudHJ5KQorICAgIGlmIHRvcyBub3QgaW4gd2hpdGVsaXN0OgorICAgICAgICBiYi5mYXRhbCgiQnVpbGRpbmcgY3Jvc3MtY2FuZGlhbiBmb3IgYW4gdW5rbm93biBUQVJHRVRfU1lTICglcyksIHBsZWFzZSB1cGRhdGUgY3Jvc3MtY2FuYWRpYW4uYmJjbGFzcyIgJSBkLmdldFZhcigiVEFSR0VUX1NZUyIsIFRydWUpKQorCisgICAgZm9yIG4gaW4gWyJQUk9WSURFUyIsICJERVBFTkRTIl06CisgICAgICAgIGQuc2V0VmFyKG4sIGQuZ2V0VmFyKG4sIFRydWUpKQorICAgIGQuc2V0VmFyKCJTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4iLCBkLmdldFZhcigiU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOIiwgVHJ1ZSkpCisgICAgZm9yIHByZWZpeCBpbiBbIkFSIiwgIkFTIiwgIkRMTFRPT0wiLCAiQ0MiLCAiQ1hYIiwgIkdDQyIsICJMRCIsICJMSVBPIiwgIk5NIiwgIk9CSkRVTVAiLCAiUkFOTElCIiwgIlNUUklQIiwgIldJTkRSRVMiXToKKyAgICAgICAgbiA9IHByZWZpeCArICJfRk9SX1RBUkdFVCIKKyAgICAgICAgZC5zZXRWYXIobiwgZC5nZXRWYXIobiwgVHJ1ZSkpCisgICAgIyBUaGlzIGlzIGEgYml0IHVnbHkuIFdlIG5lZWQgdG8gemVybyBMSUJDL0FCSSBleHRlbnNpb24gd2hpY2ggd2lsbCBjaGFuZ2UgVEFSR0VUX09TCisgICAgIyBob3dldmVyIHdlIG5lZWQgdGhlIG9sZCB2YWx1ZSBpbiBzb21lIHZhcmlhYmxlcy4gV2UgZXhwYW5kIHRob3NlIGhlcmUgZmlyc3QuCisgICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHRhcmNoID09ICJ4ODZfNjQiOgorICAgICAgICBkLnNldFZhcigiTElCQ0VYVEVOU0lPTiIsICIiKQorICAgICAgICBkLnNldFZhcigiQUJJRVhURU5TSU9OIiwgIiIpCisgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudXgzMiBsaW51eC11Y2xpYmN4MzIgbGludXgtbXVzbHgzMiIpCisgICAgZWxpZiB0YXJjaCA9PSAicG93ZXJwYyI6CisgICAgICAgICMgUG93ZXJQQyBjYW4gYnVpbGQgImxpbnV4IiBhbmQgImxpbnV4LWdudXNwZSIKKyAgICAgICAgZC5zZXRWYXIoIkxJQkNFWFRFTlNJT04iLCAiIikKKyAgICAgICAgZC5zZXRWYXIoIkFCSUVYVEVOU0lPTiIsICIiKQorICAgICAgICBkLmFwcGVuZFZhcigiQ0FOQURJQU5FWFRSQU9TIiwgIiBsaW51eC1nbnVzcGUgbGludXgtdWNsaWJjc3BlIGxpbnV4LW11c2xzcGUiKQorICAgIGVsaWYgdGFyY2ggPT0gIm1pcHM2NCI6CisgICAgICAgIGQuYXBwZW5kVmFyKCJDQU5BRElBTkVYVFJBT1MiLCAiIGxpbnV4LWdudW4zMiBsaW51eC11Y2xpYmNuMzIgbGludXgtbXVzbG4zMiIpCisgICAgaWYgdGFyY2ggPT0gImFybSI6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfT1MiLCAibGludXgtZ251ZWFiaSIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoIlRBUkdFVF9PUyIsICJsaW51eCIpCisKKyAgICAjIEFsc28gbmVlZCB0byBoYW5kbGUgbXVsdGlsaWIgdGFyZ2V0IHZlbmRvcnMKKyAgICB2ZW5kb3JzID0gZC5nZXRWYXIoIkNBTkFESUFORVhUUkFWRU5ET1IiLCBUcnVlKQorICAgIGlmIG5vdCB2ZW5kb3JzOgorICAgICAgICB2ZW5kb3JzID0gYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdUQVJHRVRfVkVORE9SJykKKyAgICBvcmlndmVuZG9yID0gZC5nZXRWYXIoIlRBUkdFVF9WRU5ET1JfTVVMVElMSUJfT1JJR0lOQUwiLCBUcnVlKQorICAgIGlmIG9yaWd2ZW5kb3I6CisgICAgICAgIGQuc2V0VmFyKCJUQVJHRVRfVkVORE9SIiwgb3JpZ3ZlbmRvcikKKyAgICAgICAgaWYgb3JpZ3ZlbmRvciBub3QgaW4gdmVuZG9ycy5zcGxpdCgpOgorICAgICAgICAgICAgdmVuZG9ycyA9IG9yaWd2ZW5kb3IgKyAiICIgKyB2ZW5kb3JzCisgICAgZC5zZXRWYXIoIkNBTkFESUFORVhUUkFWRU5ET1IiLCB2ZW5kb3JzKQorfQorTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtQQUNLQUdFX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1RBR0lOR19ESVJfSE9TVCA9ICIke1NUQUdJTkdfRElSfS8ke0hPU1RfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSfS8ke0hPU1RfQVJDSH0tJHtTREtQS0dTVUZGSVh9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworUEFUSF9hcHBlbmQgPSAiOiR7VE1QRElSfS9zeXNyb290cy8ke0hPU1RfQVJDSH0vJHtiaW5kaXJfY3Jvc3N9IgorUEtHSElTVF9ESVIgPSAiJHtUTVBESVJ9L3BrZ2hpc3RvcnkvJHtIT1NUX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30vIgorCitIT1NUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorSE9TVF9PUyA9ICIke1NES19PU30iCitIT1NUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7U0RLX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorCisjYXNzaWduIERQS0dfQVJDSAorRFBLR19BUkNIID0gIiR7U0RLX0FSQ0h9IgorCitDUFBGTEFHUyA9ICIke0JVSUxEU0RLX0NQUEZMQUdTfSIKK0NGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCitDWFhGTEFHUyA9ICIke0JVSUxEU0RLX0NGTEFHU30iCitMREZMQUdTID0gIiR7QlVJTERTREtfTERGTEFHU30gXAorICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAtV2wsLXJwYXRoLCR7bGliZGlyfS8uLiAiCisKK0RFUEVORFNfR0VUVEVYVCA9ICJnZXR0ZXh0LW5hdGl2ZSBuYXRpdmVzZGstZ2V0dGV4dCIKKworIworIyBXZSBuZWVkIGNocnBhdGggPj0gMC4xNCB0byBlbnN1cmUgd2UgY2FuIGRlYWwgd2l0aCAzMiBhbmQgNjQgYml0CisjIGJpbmFyaWVzCisjCitERVBFTkRTX2FwcGVuZCA9ICIgY2hycGF0aC1yZXBsYWNlbWVudC1uYXRpdmUiCitFWFRSQU5BVElWRVBBVEggKz0gImNocnBhdGgtbmF0aXZlIgorCisjIFBhdGggbWFuZ2xpbmcgbmVlZGVkIGJ5IHRoZSBjcm9zcyBwYWNrYWdpbmcKKyMgTm90ZSB0aGF0IHdlIHVzZSA6PSBoZXJlIHRvIGVuc3VyZSB0aGF0IGxpYmRpciBhbmQgaW5jbHVkZWRpciBhcmUKKyMgdGFyZ2V0IHBhdGhzLgordGFyZ2V0X2Jhc2VfcHJlZml4IDo9ICIke2Jhc2VfcHJlZml4fSIKK3RhcmdldF9wcmVmaXggOj0gIiR7cHJlZml4fSIKK3RhcmdldF9leGVjX3ByZWZpeCA6PSAiJHtleGVjX3ByZWZpeH0iCit0YXJnZXRfYmFzZV9saWJkaXIgPSAiJHt0YXJnZXRfYmFzZV9wcmVmaXh9LyR7YmFzZWxpYn0iCit0YXJnZXRfbGliZGlyID0gIiR7dGFyZ2V0X2V4ZWNfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2luY2x1ZGVkaXIgOj0gIiR7aW5jbHVkZWRpcn0iCisKKyMgQ2hhbmdlIHRvIHBsYWNlIGZpbGVzIGluIFNES1BBVEgKK2Jhc2VfcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0iCitwcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitleGVjX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9JHtwcmVmaXhfbmF0aXZlc2RrfSIKK2JpbmRpciA9ICIke2V4ZWNfcHJlZml4fS9iaW4vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9iaW5kaXIgPSAiJHtiaW5kaXJ9IgorYmFzZV9zYmluZGlyID0gIiR7YmluZGlyfSIKK2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIvJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKK2xpYmV4ZWNkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliZXhlYy8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitGSUxFU18ke1BOfSA9ICIke3ByZWZpeH0iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cHJlZml4fS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke3ByZWZpeH0vYmluLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorCitleHBvcnQgUEtHX0NPTkZJR19ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGF5b3V0X2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKK1VTRV9OTFMgPSAiJHtTREtVU0VfTkxTfSIKKworIyBXZSBoYXZlIHRvIHVzIFRBUkdFVF9BUkNIIGJ1dCB3ZSBjYXJlIGFib3V0IHRoZSBhYnNvbHV0ZSB2YWx1ZQorIyBhbmQgbm90IGFueSBwYXJ0aWN1bGFyIHR1bmUgdGhhdCBpcyBlbmFibGVkLgorVEFSR0VUX0FSQ0hbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfQVJDSCIKKworIyBJZiBNTFBSRUZJWCBpcyBzZXQgYnkgbXVsdGlsaWIgY29kZSwgc2hsaWJzCisjIHBvaW50cyB0byB0aGUgd3JvbmcgcGxhY2Ugc28gZm9yY2UgaXQKK1NITElCU0RJUlMgPSAiJHtQS0dEQVRBX0RJUn0vbmF0aXZlc2RrLXNobGliczIiCitTSExJQlNXT1JLRElSID0gIiR7UEtHREFUQV9ESVJ9L25hdGl2ZXNkay1zaGxpYnMyIgorCitjcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcyAoKSB7CisJZm9yIGkgaW4gbGludXggJHtDQU5BRElBTkVYVFJBT1N9CisJZG8KKwkJZm9yIHYgaW4gJHtDQU5BRElBTkVYVFJBVkVORE9SfQorCQlkbworCQkJZD0ke0R9JHtiaW5kaXJ9Ly4uLyR7VEFSR0VUX0FSQ0h9JHYtJGkKKwkJCWlmIFsgLWQgJGQgXTsKKwkJCXRoZW4KKwkJCSAgICBjb250aW51ZQorCQkJZmkKKwkJCWluc3RhbGwgLWQgJGQKKwkJCWZvciBqIGluIGBscyAke0R9JHtiaW5kaXJ9YAorCQkJZG8KKwkJCQlwPSR7VEFSR0VUX0FSQ0h9JHYtJGktYGVjaG8gJGogfCBzZWQgLWUgcywke1RBUkdFVF9QUkVGSVh9LCxgCisJCQkJbG4gLXMgLi4vJHtUQVJHRVRfU1lTfS8kaiAkZC8kcAorCQkJZG9uZQorCQlkb25lCisgICAgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Jvc3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWFiNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Nyb3NzLmJiY2xhc3MKQEAgLTAsMCArMSw3NyBAQAoraW5oZXJpdCByZWxvY2F0YWJsZQorCisjIENyb3NzIHBhY2thZ2VzIGFyZSBidWlsdCBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LAorIyBubyBuZWVkIGZvciB0aGVtIHRvIGJlIGEgZGlyZWN0IHRhcmdldCBvZiAnd29ybGQnCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworQ0xBU1NPVkVSUklERSA9ICJjbGFzcy1jcm9zcyIKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK0hPU1RfVkVORE9SID0gIiR7QlVJTERfVkVORE9SfSIKK0hPU1RfT1MgPSAiJHtCVUlMRF9PU30iCitIT1NUX1BSRUZJWCA9ICIke0JVSUxEX1BSRUZJWH0iCitIT1NUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke0JVSUxEX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7QlVJTERfQVNfQVJDSH0iCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtIT1NUX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworUEFDS0FHRV9BUkNIID0gIiR7QlVJTERfQVJDSH0iCisKK01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7UEFDS0FHRV9BUkNIfSR7QlVJTERfVkVORE9SfS0ke0JVSUxEX09TfSIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7ZXhlY19wcmVmaXh9L2xpYi9wa2djb25maWciCitleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIiCisKK0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorQ0ZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0NYWEZMQUdTID0gIiR7QlVJTERfQ0ZMQUdTfSIKK0xERkxBR1MgPSAiJHtCVUlMRF9MREZMQUdTfSIKK0xERkxBR1NfYnVpbGQtZGFyd2luID0gIi1MJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IgorCitUT09MQ0hBSU5fT1BUSU9OUyA9ICIiCisKK0RFUEVORFNfR0VUVEVYVCA9ICJnZXR0ZXh0LW5hdGl2ZSIKKworIyBQYXRoIG1hbmdsaW5nIG5lZWRlZCBieSB0aGUgY3Jvc3MgcGFja2FnaW5nCisjIE5vdGUgdGhhdCB3ZSB1c2UgOj0gaGVyZSB0byBlbnN1cmUgdGhhdCBsaWJkaXIgYW5kIGluY2x1ZGVkaXIgYXJlCisjIHRhcmdldCBwYXRocy4KK3RhcmdldF9iYXNlX3ByZWZpeCA6PSAiJHtiYXNlX3ByZWZpeH0iCit0YXJnZXRfcHJlZml4IDo9ICIke3ByZWZpeH0iCit0YXJnZXRfZXhlY19wcmVmaXggOj0gIiR7ZXhlY19wcmVmaXh9IgordGFyZ2V0X2Jhc2VfbGliZGlyID0gIiR7dGFyZ2V0X2Jhc2VfcHJlZml4fS8ke2Jhc2VsaWJ9IgordGFyZ2V0X2xpYmRpciA9ICIke3RhcmdldF9leGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK3RhcmdldF9pbmNsdWRlZGlyIDo9ICIke2luY2x1ZGVkaXJ9IgorCisjIE92ZXJyaWRlcyBmb3IgcGF0aHMKK0NST1NTX1RBUkdFVF9TWVNfRElSID0gIiR7VEFSR0VUX1NZU30iCitwcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKK2Jhc2VfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2V4ZWNfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCitiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluLyR7Q1JPU1NfVEFSR0VUX1NZU19ESVJ9Igorc2JpbmRpciA9ICIke2JpbmRpcn0iCitiYXNlX2JpbmRpciA9ICIke2JpbmRpcn0iCitiYXNlX3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorbGliZGlyID0gIiR7ZXhlY19wcmVmaXh9L2xpYi8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKK2xpYmV4ZWNkaXIgPSAiJHtleGVjX3ByZWZpeH0vbGliZXhlYy8ke0NST1NTX1RBUkdFVF9TWVNfRElSfSIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKK30KKworVVNFX05MUyA9ICJubyIKKworZGVsdGFzayBwYWNrYWdlCitkZWx0YXNrIHBhY2thZ2VkYXRhCitkZWx0YXNrIHBhY2thZ2VfcWEKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9pcGsKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9kZWIKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9ycG0KK2RlbHRhc2sgcGFja2FnZV93cml0ZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvY3Jvc3NzZGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q1Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2Nyb3Nzc2RrLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAoraW5oZXJpdCBjcm9zcworCitDTEFTU09WRVJSSURFID0gImNsYXNzLWNyb3Nzc2RrIgorTUFDSElORU9WRVJSSURFUyA9ICIiCitQQUNLQUdFX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitweXRob24gKCkgeworCSMgc2V0IFRVTkVfUEtHQVJDSCB0byBTREtfQVJDSAorCWQuc2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBkLmdldFZhcignU0RLX0FSQ0gnLCBUcnVlKSkKK30KKworU1RBR0lOR19ESVJfVEFSR0VUID0gIiR7U1RBR0lOR19ESVJ9LyR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9IgorU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtUQVJHRVRfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfSIKKworVEFSR0VUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitUQVJHRVRfVkVORE9SID0gIiR7U0RLX1ZFTkRPUn0iCitUQVJHRVRfT1MgPSAiJHtTREtfT1N9IgorVEFSR0VUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtTREtfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK1RBUkdFVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorVEFSR0VUX0ZQVSA9ICIiCisKK3RhcmdldF9saWJkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7bGliZGlyX25hdGl2ZXNka30iCit0YXJnZXRfaW5jbHVkZWRpciA9ICIke1NES1BBVEhOQVRJVkV9JHtpbmNsdWRlZGlyX25hdGl2ZXNka30iCit0YXJnZXRfYmFzZV9saWJkaXIgPSAiJHtTREtQQVRITkFUSVZFfSR7YmFzZV9saWJkaXJfbmF0aXZlc2RrfSIKK3RhcmdldF9wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCit0YXJnZXRfZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiYXNlbGliID0gImxpYiIKKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCisKKyMgTmVlZCB0byBmb3JjZSB0aGlzIHRvIGVuc3VyZSBjb25zaXRlbmN5IGFjY3Jvc3MgYXJjaGl0ZWN0dXJlcworRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA9ICIiCisKK1VTRV9OTFMgPSAibm8iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGViaWFuLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2OTc5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kZWJpYW4uYmJjbGFzcwpAQCAtMCwwICsxLDE0MSBAQAorIyBEZWJpYW4gcGFja2FnZSByZW5hbWluZyBvbmx5IG9jY3VycyB3aGVuIGEgcGFja2FnZSBpcyBidWlsdAorIyBXZSB0aGVyZWZvcmUgaGF2ZSB0byBtYWtlIHN1cmUgd2UgYnVpbGQgYWxsIHJ1bnRpbWUgcGFja2FnZXMKKyMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBjdXJyZW50IHBhY2thZ2UgdG8gbWFrZSB0aGUgcGFja2FnZXMgcnVudGltZQorIyBkZXBlbmRzIGFyZSBjb3JyZWN0CisjCisjIEN1c3RvbSBsaWJyYXJ5IHBhY2thZ2UgbmFtZXMgY2FuIGJlIGRlZmluZWQgc2V0dGluZworIyBERUJJQU5OQU1FXyArIHBrZ25hbWUgdG8gdGhlIGRlc2lyZWQgbmFtZS4KKyMKKyMgQmV0dGVyIGV4cHJlc3NlZCBhcyBlbnN1cmUgYWxsIFJERVBFTkRTIHBhY2thZ2UgYmVmb3JlIHdlIHBhY2thZ2UKKyMgVGhpcyBtZWFucyB3ZSBjYW4ndCBoYXZlIGNpcmN1bGFyIFJERVBFTkRTL1JSRUNPTU1FTkRTCisKK0FVVE9fTElCTkFNRV9QS0dTID0gIiR7UEFDS0FHRVN9IgorCitpbmhlcml0IHBhY2thZ2UKKworREVCSUFOUkRFUCA9ICJkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbcmRlcHRhc2tdID0gIiR7REVCSUFOUkRFUH0iCitkb19wYWNrYWdlX3dyaXRlX3RhcltyZGVwdGFza10gPSAiJHtERUJJQU5SREVQfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3JkZXB0YXNrXSA9ICIke0RFQklBTlJERVB9IgorCitweXRob24gKCkgeworICAgIGlmIG5vdCBkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKToKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTlJERVAiLCAiIikKK30KKworcHl0aG9uIGRlYmlhbl9wYWNrYWdlX25hbWVfaG9vayAoKSB7CisgICAgaW1wb3J0IGdsb2IsIGNvcHksIHN0YXQsIGVycm5vLCByZQorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgYmluX3JlID0gcmUuY29tcGlsZSgiLiovcz8iICsgb3MucGF0aC5iYXNlbmFtZShkLmdldFZhcigiYmluZGlyIiwgVHJ1ZSkpICsgIiQiKQorICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIi4qLyIgKyBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKSkgKyAiJCIpCisgICAgc29fcmUgPSByZS5jb21waWxlKCJsaWIuKlwuc28iKQorCisgICAgZGVmIHNvY3J1bmNoKHMpOgorICAgICAgICBzID0gcy5sb3dlcigpLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgIG0gPSByZS5tYXRjaCgiXiguKikoLilcLnNvXC4oLiopJCIsIHMpCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIG0uZ3JvdXAoMikgaW4gJzAxMjM0NTY3ODknOgorICAgICAgICAgICAgYmluID0gJyVzJXMtJXMnICUgKG0uZ3JvdXAoMSksIG0uZ3JvdXAoMiksIG0uZ3JvdXAoMykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiaW4gPSBtLmdyb3VwKDEpICsgbS5ncm91cCgyKSArIG0uZ3JvdXAoMykKKyAgICAgICAgZGV2ID0gbS5ncm91cCgxKSArIG0uZ3JvdXAoMikKKyAgICAgICAgcmV0dXJuIChiaW4sIGRldikKKworICAgIGRlZiBpc2V4ZWMocGF0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KHBhdGgpCisgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiAoc1tzdGF0LlNUX01PREVdICYgc3RhdC5TX0lFWEVDKQorCisgICAgZGVmIGFkZF9ycHJvdmlkZXMocGtnLCBkKToKKyAgICAgICAgbmV3cGtnID0gZC5nZXRWYXIoJ1BLR18nICsgcGtnLCBGYWxzZSkKKyAgICAgICAgaWYgbmV3cGtnIGFuZCBuZXdwa2cgIT0gcGtnOgorICAgICAgICAgICAgcHJvdnMgPSAoZC5nZXRWYXIoJ1JQUk9WSURFU18nICsgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICAgICAgaWYgcGtnIG5vdCBpbiBwcm92czoKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignUlBST1ZJREVTXycgKyBwa2csICIgIiArIHBrZyArICIgKD0iICsgZC5nZXRWYXIoIlBLR1YiLCBUcnVlKSArICIpIikKKworICAgIGRlZiBhdXRvX2xpYm5hbWUocGFja2FnZXMsIG9yaWdfcGtnKToKKyAgICAgICAgc29uYW1lcyA9IFtdCisgICAgICAgIGhhc19iaW5zID0gMAorICAgICAgICBoYXNfbGlicyA9IDAKKyAgICAgICAgZm9yIGZpbGUgaW4gcGtnZmlsZXNbb3JpZ19wa2ddOgorICAgICAgICAgICAgcm9vdCA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgaWYgYmluX3JlLm1hdGNoKHJvb3QpOgorICAgICAgICAgICAgICAgIGhhc19iaW5zID0gMQorICAgICAgICAgICAgaWYgbGliX3JlLm1hdGNoKHJvb3QpOgorICAgICAgICAgICAgICAgIGhhc19saWJzID0gMQorICAgICAgICAgICAgICAgIGlmIHNvX3JlLm1hdGNoKG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpOgorICAgICAgICAgICAgICAgICAgICBjbWQgPSAoZC5nZXRWYXIoJ1RBUkdFVF9QUkVGSVgnLCBUcnVlKSBvciAiIikgKyAib2JqZHVtcCAtcCAiICsgZmlsZSArICIgMj4vZGV2L251bGwiCisgICAgICAgICAgICAgICAgICAgIGZkID0gb3MucG9wZW4oY21kKQorICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIlxzK1NPTkFNRVxzKyhbXlxzXSopIiwgbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG0gYW5kIG5vdCBtLmdyb3VwKDEpIGluIHNvbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29uYW1lcy5hcHBlbmQobS5ncm91cCgxKSkKKworICAgICAgICBiYi5kZWJ1ZygxLCAnTElCTkFNRVM6IHBrZyAlcyBsaWJzICVkIGJpbnMgJWQgc29uYW1lcyAlcycgJSAob3JpZ19wa2csIGhhc19saWJzLCBoYXNfYmlucywgc29uYW1lcykpCisgICAgICAgIHNvbmFtZSA9IE5vbmUKKyAgICAgICAgaWYgbGVuKHNvbmFtZXMpID09IDE6CisgICAgICAgICAgICBzb25hbWUgPSBzb25hbWVzWzBdCisgICAgICAgIGVsaWYgbGVuKHNvbmFtZXMpID4gMToKKyAgICAgICAgICAgIGxlYWQgPSBkLmdldFZhcignTEVBRF9TT05BTUUnLCBUcnVlKQorICAgICAgICAgICAgaWYgbGVhZDoKKyAgICAgICAgICAgICAgICByID0gcmUuY29tcGlsZShsZWFkKQorICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICBpZiByLm1hdGNoKHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgaWYgbGVuKGZpbHRlcmVkKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBzb25hbWUgPSBmaWx0ZXJlZFswXQorICAgICAgICAgICAgICAgIGVsaWYgbGVuKGZpbHRlcmVkKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIG1hdGNoZXMgKCVzKSBmb3IgTEVBRF9TT05BTUUgJyVzJyIgJSAoIiwgIi5qb2luKGZpbHRlcmVkKSwgbGVhZCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiTXVsdGlwbGUgbGlicmFyaWVzICglcykgZm91bmQsIGJ1dCBMRUFEX1NPTkFNRSAnJXMnIGRvZXNuJ3QgbWF0Y2ggYW55IG9mIHRoZW0iICUgKCIsICIuam9pbihzb25hbWVzKSwgbGVhZCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIk11bHRpcGxlIGxpYnJhcmllcyAoJXMpIGZvdW5kIGFuZCBMRUFEX1NPTkFNRSBub3QgZGVmaW5lZCIgJSAiLCAiLmpvaW4oc29uYW1lcykpCisKKyAgICAgICAgaWYgaGFzX2xpYnMgYW5kIG5vdCBoYXNfYmlucyBhbmQgc29uYW1lOgorICAgICAgICAgICAgc29uYW1lX3Jlc3VsdCA9IHNvY3J1bmNoKHNvbmFtZSkKKyAgICAgICAgICAgIGlmIHNvbmFtZV9yZXN1bHQ6CisgICAgICAgICAgICAgICAgKHBrZ25hbWUsIGRldm5hbWUpID0gc29uYW1lX3Jlc3VsdAorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGQuZ2V0VmFyKCdQS0dfJyArIHBrZywgRmFsc2UpIG9yIGQuZ2V0VmFyKCdERUJJQU5fTk9BVVRPTkFNRV8nICsgcGtnLCBGYWxzZSkpOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3Jwcm92aWRlcyhwa2csIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBkZWJpYW5fcG4gPSBkLmdldFZhcignREVCSUFOTkFNRV8nICsgcGtnLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGViaWFuX3BuOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gZGViaWFuX3BuCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcGtnID09IG9yaWdfcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cGtnID0gcGtnLnJlcGxhY2Uob3JpZ19wa2csIGRldm5hbWUsIDEpCisgICAgICAgICAgICAgICAgICAgIG1scHJlPWQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIG1scHJlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3BrZy5maW5kKG1scHJlKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3BrZyA9IG1scHJlICsgbmV3cGtnCisgICAgICAgICAgICAgICAgICAgIGlmIG5ld3BrZyAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcignUEtHXycgKyBwa2csIG5ld3BrZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ycHJvdmlkZXMocGtnLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkX3Jwcm92aWRlcyhvcmlnX3BrZywgZCkKKworICAgICMgcmV2ZXJzZWQgc29ydCBpcyBuZWVkZWQgd2hlbiBzb21lIHBhY2thZ2UgaXMgc3Vic3RyaW5nIG9mIGFub3RoZXIKKyAgICAjIGllIGluIG5jdXJzZXMgd2UgZ2V0IHdpdGhvdXQgcmV2ZXJzZSBzb3J0OiAKKyAgICAjIERFQlVHOiBMSUJOQU1FUzogcGtnbmFtZSBsaWJ0aWM1IGRldm5hbWUgbGlidGljIHBrZyBuY3Vyc2VzLWxpYnRpYyBvcmlnX3BrZyBuY3Vyc2VzLWxpYnRpYyBkZWJpYW5fcG4gTm9uZSBuZXdwa2cgbGlidGljNQorICAgICMgYW5kIGxhdGVyCisgICAgIyBERUJVRzogTElCTkFNRVM6IHBrZ25hbWUgbGlidGljNSBkZXZuYW1lIGxpYnRpYyBwa2cgbmN1cnNlcy1saWJ0aWN3IG9yaWdfcGtnIG5jdXJzZXMtbGlidGljIGRlYmlhbl9wbiBOb25lIG5ld3BrZyBsaWJ0aWN3CisgICAgIyBzbyB3ZSBuZWVkIHRvIGhhbmRsZSBuY3Vyc2VzLWxpYnRpY3ctPmxpYnRpY3c1IGJlZm9yZSBuY3Vyc2VzLWxpYnRpYy0+bGlidGljNQorICAgIGZvciBwa2cgaW4gc29ydGVkKChkLmdldFZhcignQVVUT19MSUJOQU1FX1BLR1MnLCBUcnVlKSBvciAiIikuc3BsaXQoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgYXV0b19saWJuYW1lKHBhY2thZ2VzLCBwa2cpCit9CisKK0VYUE9SVF9GVU5DVElPTlMgcGFja2FnZV9uYW1lX2hvb2sKKworREVCSUFOX05BTUVTID0gIjEiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kZXBsb3kuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGY1ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2RlcGxveS5iYmNsYXNzCkBAIC0wLDAgKzEsMTAgQEAKK0RFUExPWURJUiA9ICIke1dPUktESVJ9L2RlcGxveS0ke1BOfSIKK1NTVEFURVRBU0tTICs9ICJkb19kZXBsb3kiCitkb19kZXBsb3lbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtERVBMT1lESVJ9IgorZG9fZGVwbG95W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfSU1BR0V9IgorCitweXRob24gZG9fZGVwbG95X3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fZGVwbG95X3NldHNjZW5lCitkb19kZXBsb3lbZGlyc10gPSAiJHtERVBMT1lESVJ9ICR7Qn0iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9kZXZzaGVsbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTE0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGV2c2hlbGwuYmJjbGFzcwpAQCAtMCwwICsxLDE1NiBAQAoraW5oZXJpdCB0ZXJtaW5hbAorCitERVZTSEVMTCA9ICIke1NIRUxMfSIKKworcHl0aG9uIGRvX2RldnNoZWxsICgpIHsKKyAgICBpZiBkLmdldFZhckZsYWcoImRvX2RldnNoZWxsIiwgIm1hbnVhbGZha2Vyb290Iik6CisgICAgICAgZC5wcmVwZW5kVmFyKCJERVZTSEVMTCIsICJwc2V1ZG8gIikKKyAgICAgICBmYWtlZW52ID0gZC5nZXRWYXIoIkZBS0VST09URU5WIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgIGZvciBmIGluIGZha2VlbnY6CisgICAgICAgICAgICBrID0gZi5zcGxpdCgiPSIpCisgICAgICAgICAgICBkLnNldFZhcihrWzBdLCBrWzFdKSAgICAgICAgICAgCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiT0VfVEVSTUlOQUxfRVhQT1JUUyIsICIgIiArIGtbMF0pCisgICAgICAgZC5kZWxWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJmYWtlcm9vdCIpCisKKyAgICBvZV90ZXJtaW5hbChkLmdldFZhcignREVWU0hFTEwnLCBUcnVlKSwgJ09wZW5FbWJlZGRlZCBEZXZlbG9wZXIgU2hlbGwnLCBkKQorfQorCithZGR0YXNrIGRldnNoZWxsIGFmdGVyIGRvX3BhdGNoCisKKyMgVGhlIGRpcmVjdG9yeSB0aGF0IHRoZSB0ZXJtaW5hbCBzdGFydHMgaW4KK0RFVlNIRUxMX1NUQVJURElSID89ICIke1N9IgorZG9fZGV2c2hlbGxbZGlyc10gPSAiJHtERVZTSEVMTF9TVEFSVERJUn0iCitkb19kZXZzaGVsbFtub3N0YW1wXSA9ICIxIgorCisjIGRldnNoZWxsIGFuZCBmYWtlcm9vdC9wc2V1ZG8gbmVlZCBjYXJlZnVsIGhhbmRsaW5nIHNpbmNlIG9ubHkgdGhlIGZpbmFsCisjIGNvbW1hbmQgc2hvdWxkIHJ1biB1bmRlciBmYWtlcm9vdCBlbXVsYXRpb24sIGFueSBYIGNvbm5lY3Rpb24gc2hvdWxkCisjIGJlIGRvbmUgYXMgdGhlIG5vcm1hbCB1c2VyLiBXZSB0aGVyZm9yZSBjYXJlZnVsbHkgY29uc3RydWN0IHRoZSBlbnZpb25tZW50CisjIG1hbnVhbGx5CitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyRmxhZygiZG9fZGV2c2hlbGwiLCAiZmFrZXJvb3QiKToKKyAgICAgICAjIFdlIG5lZWQgdG8gc2lnbmFsIG91ciBjb2RlIHRoYXQgd2Ugd2FudCBmYWtlcm9vdCBob3dldmVyIHdlCisgICAgICAgIyBjYW4ndCBtYW5pcHVsYXRlIHRoZSBlbnZpcm9ubWVudCBhbmQgdmFyaWFibGVzIGhlcmUgeWV0IChzZWUgWU9DVE8gIzQ3OTUpCisgICAgICAgZC5zZXRWYXJGbGFnKCJkb19kZXZzaGVsbCIsICJtYW51YWxmYWtlcm9vdCIsICIxIikKKyAgICAgICBkLmRlbFZhckZsYWcoImRvX2RldnNoZWxsIiwgImZha2Vyb290IikKK30gCisKK2RlZiBkZXZweXNoZWxsKGQpOgorCisgICAgaW1wb3J0IGNvZGUKKyAgICBpbXBvcnQgc2VsZWN0CisgICAgaW1wb3J0IHNpZ25hbAorICAgIGltcG9ydCB0ZXJtaW9zCisKKyAgICBtLCBzID0gb3Mub3BlbnB0eSgpCisgICAgc25hbWUgPSBvcy50dHluYW1lKHMpCisKKyAgICBkZWYgbm9lY2hvaWNhbm9uKGZkKToKKyAgICAgICAgb2xkID0gdGVybWlvcy50Y2dldGF0dHIoZmQpCisgICAgICAgIG9sZFszXSA9IG9sZFszXSAmfiB0ZXJtaW9zLkVDSE8gJn4gdGVybWlvcy5JQ0FOT04KKyAgICAgICAgIyAmfiB0ZXJtaW9zLklTSUcKKyAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQURSQUlOLCBvbGQpCisgICAgCisgICAgIyBObyBlY2hvIG9yIGJ1ZmZlcmluZyBvdmVyIHRoZSBwdHkKKyAgICBub2VjaG9pY2Fub24ocykKKworICAgIHBpZCA9IG9zLmZvcmsoKQorICAgIGlmIHBpZDoKKyAgICAgICAgb3MuY2xvc2UobSkKKyAgICAgICAgb2VfdGVybWluYWwoIm9lcHlkZXZzaGVsbC1pbnRlcm5hbC5weSAlcyAlZCIgJSAoc25hbWUsIHBpZCksICdPcGVuRW1iZWRkZWQgRGV2ZWxvcGVyIFB5U2hlbGwnLCBkKQorICAgICAgICBvcy5fZXhpdCgwKQorICAgIGVsc2U6CisgICAgICAgIG9zLmNsb3NlKHMpCisKKyAgICAgICAgb3MuZHVwMihtLCBzeXMuc3RkaW4uZmlsZW5vKCkpCisgICAgICAgIG9zLmR1cDIobSwgc3lzLnN0ZG91dC5maWxlbm8oKSkKKyAgICAgICAgb3MuZHVwMihtLCBzeXMuc3RkZXJyLmZpbGVubygpKQorCisgICAgICAgIHN5cy5zdGRvdXQgPSBvcy5mZG9wZW4oc3lzLnN0ZG91dC5maWxlbm8oKSwgJ3cnLCAwKQorICAgICAgICBzeXMuc3RkaW4gPSBvcy5mZG9wZW4oc3lzLnN0ZGluLmZpbGVubygpLCAncicsIDApCisKKyAgICAgICAgYmIudXRpbHMubm9uYmxvY2tpbmdmZChzeXMuc3Rkb3V0KQorICAgICAgICBiYi51dGlscy5ub25ibG9ja2luZ2ZkKHN5cy5zdGRlcnIpCisgICAgICAgIGJiLnV0aWxzLm5vbmJsb2NraW5nZmQoc3lzLnN0ZGluKQorCisgICAgICAgIF9jb250ZXh0ID0geworICAgICAgICAgICAgIm9zIjogb3MsCisgICAgICAgICAgICAiYmIiOiBiYiwKKyAgICAgICAgICAgICJ0aW1lIjogdGltZSwKKyAgICAgICAgICAgICJkIjogZCwKKyAgICAgICAgfQorCisgICAgICAgIHBzMSA9ICJweWRldnNoZWxsPiAiCisgICAgICAgIHBzMiA9ICIuLi4gIgorICAgICAgICBidWYgPSBbXQorICAgICAgICBtb3JlID0gRmFsc2UKKworICAgICAgICBpID0gY29kZS5JbnRlcmFjdGl2ZUludGVycHJldGVyKGxvY2Fscz1fY29udGV4dCkKKyAgICAgICAgcHJpbnQoIk9FIFB5U2hlbGwgKFBOID0gJXMpXG4iICUgZC5nZXRWYXIoIlBOIiwgVHJ1ZSkpCisKKyAgICAgICAgZGVmIHByb21wdChtb3JlKToKKyAgICAgICAgICAgIGlmIG1vcmU6CisgICAgICAgICAgICAgICAgcHJvbXB0ID0gcHMyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb21wdCA9IHBzMQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQpCisKKyAgICAgICAgIyBSZXN0b3JlIEN0cmwrQyBzaW5jZSBiaXRiYWtlIG1hc2tzIHRoaXMKKyAgICAgICAgZGVmIHNpZ25hbF9oYW5kbGVyKHNpZ25hbCwgZnJhbWUpOgorICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzaWduYWxfaGFuZGxlcikKKworICAgICAgICBjaGlsZCA9IE5vbmUKKworICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChyLCBfLCBfKSA9IHNlbGVjdC5zZWxlY3QoW3N5cy5zdGRpbl0sIFtdLCBbXSwgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb21wdChtb3JlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBleGNlcHQgRU9GRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSAxMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gNToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW50KGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBidWYuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICJcbiIuam9pbihidWYpCisgICAgICAgICAgICAgICAgICAgIG1vcmUgPSBpLnJ1bnNvdXJjZShzb3VyY2UsICI8cHlzaGVsbD4iKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgbW9yZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IFtdCisgICAgICAgICAgICAgICAgICAgIHByb21wdChtb3JlKQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgIGkud3JpdGUoIlxuS2V5Ym9hcmRJbnRlcnJ1cHRcbiIpCisgICAgICAgICAgICAgICAgYnVmID0gW10KKyAgICAgICAgICAgICAgICBtb3JlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwcm9tcHQobW9yZSkKKyAgICAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgICAgICMgRWFzaWVzdCB3YXkgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgZXhpdHMKKyAgICAgICAgICAgICAgICBvcy5raWxsKGNoaWxkLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgICAgICAgICBicmVhaworCitweXRob24gZG9fZGV2cHlzaGVsbCgpIHsKKyAgICBpbXBvcnQgc2lnbmFsCisKKyAgICB0cnk6CisgICAgICAgIGRldnB5c2hlbGwoZCkKKyAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgIyBTdG9wIHRoZSBTSUdURVJNIGFib3ZlIGNhdXNpbmcgYW4gZXJyb3IgZXhpdCBjb2RlICAgIAorICAgICAgICByZXR1cm4KKyAgICBmaW5hbGx5OgorICAgICAgICByZXR1cm4KK30KK2FkZHRhc2sgZGV2cHlzaGVsbCBhZnRlciBkb19wYXRjaAorCitkb19kZXZweXNoZWxsW25vc3RhbXBdID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHJvX2ZlYXR1cmVzX2NoZWNrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U5MWRiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0cm9fZmVhdHVyZXNfY2hlY2suYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjIEFsbG93IGNoZWNraW5nIG9mIHJlcXVpcmVkIGFuZCBjb25mbGljdGluZyBESVNUUk9fRkVBVFVSRVMKKyMKKyMgQU5ZX09GX0RJU1RST19GRUFUVVJFUzogICBlbnN1cmUgYXQgbGVhc3Qgb25lIGl0ZW0gb24gdGhpcyBsaXN0IGlzIGluY2x1ZGVkCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRElTVFJPX0ZFQVRVUkVTLgorIyBSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVM6IGVuc3VyZSBldmVyeSBpdGVtIG9uIHRoaXMgbGlzdCBpcyBpbmNsdWRlZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIERJU1RST19GRUFUVVJFUy4KKyMgQ09ORkxJQ1RfRElTVFJPX0ZFQVRVUkVTOiBlbnN1cmUgbm8gaXRlbSBpbiB0aGlzIGxpc3QgaXMgaW5jbHVkZWQgaW4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBESVNUUk9fRkVBVFVSRVMuCisjCisjIENvcHlyaWdodCAyMDEzIChDKSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKworcHl0aG9uICgpIHsKKyAgICAjIEFzc3VtZSBhdCBsZWFzdCBvbmUgdmFyIGlzIHNldC4KKyAgICBkaXN0cm9fZmVhdHVyZXMgPSAoZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzID0gZC5nZXRWYXIoJ0FOWV9PRl9ESVNUUk9fRkVBVFVSRVMnLCBUcnVlKQorICAgIGlmIGFueV9vZl9kaXN0cm9fZmVhdHVyZXM6CisgICAgICAgIGFueV9vZl9kaXN0cm9fZmVhdHVyZXMgPSBhbnlfb2ZfZGlzdHJvX2ZlYXR1cmVzLnNwbGl0KCkKKyAgICAgICAgaWYgc2V0LmlzZGlzam9pbnQoc2V0KGFueV9vZl9kaXN0cm9fZmVhdHVyZXMpLHNldChkaXN0cm9fZmVhdHVyZXMpKToKKyAgICAgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJvbmUgb2YgJyVzJyBuZWVkcyB0byBiZSBpbiBESVNUUk9fRkVBVFVSRVMiICUgYW55X29mX2Rpc3Ryb19mZWF0dXJlcykKKworICAgIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMnLCBUcnVlKQorICAgIGlmIHJlcXVpcmVkX2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgcmVxdWlyZWRfZGlzdHJvX2ZlYXR1cmVzID0gcmVxdWlyZWRfZGlzdHJvX2ZlYXR1cmVzLnNwbGl0KCkKKyAgICAgICAgZm9yIGYgaW4gcmVxdWlyZWRfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgaWYgZiBpbiBkaXN0cm9fZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIm1pc3NpbmcgcmVxdWlyZWQgZGlzdHJvIGZlYXR1cmUgJyVzJyAobm90IGluIERJU1RST19GRUFUVVJFUykiICUgZikKKworICAgIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlcyA9IGQuZ2V0VmFyKCdDT05GTElDVF9ESVNUUk9fRkVBVFVSRVMnLCBUcnVlKQorICAgIGlmIGNvbmZsaWN0X2Rpc3Ryb19mZWF0dXJlczoKKyAgICAgICAgY29uZmxpY3RfZGlzdHJvX2ZlYXR1cmVzID0gY29uZmxpY3RfZGlzdHJvX2ZlYXR1cmVzLnNwbGl0KCkKKyAgICAgICAgZm9yIGYgaW4gY29uZmxpY3RfZGlzdHJvX2ZlYXR1cmVzOgorICAgICAgICAgICAgaWYgZiBpbiBkaXN0cm9fZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImNvbmZsaWN0aW5nIGRpc3RybyBmZWF0dXJlICclcycgKGluIERJU1RST19GRUFUVVJFUykiICUgZikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0cm9kYXRhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjhlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHJvZGF0YS5iYmNsYXNzCkBAIC0wLDAgKzEsNDc0IEBACitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCitpbmNsdWRlIGNvbmYvZGlzdHJvL2luY2x1ZGUvbWFpbnRhaW5lcnMuaW5jCisKK2FkZGhhbmRsZXIgZGlzdHJvX2V2ZW50aGFuZGxlcgorZGlzdHJvX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCIKK3B5dGhvbiBkaXN0cm9fZXZlbnRoYW5kbGVyKCkgeworICAgIGltcG9ydCBvZS5kaXN0cm9fY2hlY2sgYXMgZGMKKyAgICBpbXBvcnQgY3N2CisgICAgbG9nZmlsZSA9IGRjLmNyZWF0ZV9sb2dfZmlsZShlLmRhdGEsICJkaXN0cm9kYXRhLmNzdiIpCisKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmKQorICAgICAgICB3cml0ZXIud3JpdGVyb3coWydQYWNrYWdlJywgJ0Rlc2NyaXB0aW9uJywgJ093bmVyJywgJ0xpY2Vuc2UnLCAKKyAgICAgICAgICAgICdWZXJNYXRjaCcsICdWZXJzaW9uJywgJ1Vwc3RyZWFtJywgJ1JlYXNvbicsICdSZWNpcGUgU3RhdHVzJywKKyAgICAgICAgICAgICdEaXN0cm8gMScsICdEaXN0cm8gMicsICdEaXN0cm8gMyddKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgZGlzdHJvZGF0YV9ucAorZG9fZGlzdHJvZGF0YV9ucFtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2Rpc3Ryb2RhdGFfbnAoKSB7CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgTmFtZTogJXMiICUgcG4pCisKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkaXN0X2NoZWNrCisgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgICAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgICAgIGRhdGV0aW1lID0gbG9jYWxkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBkaXN0X2NoZWNrLnVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSkKKworICAgICAgICBpZiBwbi5maW5kKCItbmF0aXZlIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1uYXRpdmUiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3NzIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1jcm9zc3NkayIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItY3Jvc3NzZGsiKQorICAgICAgICAgICAgYmIubm90ZSgiY3Jvc3MgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4ucmVwbGFjZSgibmF0aXZlc2RrLSIsICIiKQorICAgICAgICAgICAgYmIubm90ZSgiTmF0aXZlU0RLIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKworICAgICAgICBpZiBwbi5maW5kKCItaW5pdGlhbCIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgICAgICBiYi5ub3RlKCJpbml0aWFsIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gbG9jYWxkYXRhLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBwY3VydmVyID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwZGVzYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGRlc2MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGRlc2MgPSBwZGVzYy5yZXBsYWNlKCcsJywnJykKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJ1xuJywnJykKKworICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHBsaWNlbnNlID0gbG9jYWxkYXRhLmdldFZhcignTElDRU5TRScsIFRydWUpLnJlcGxhY2UoJywnLCdfJykKKworICAgICAgICByc3RhdHVzID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX0NPTE9SJywgVHJ1ZSkKKyAgICAgICAgaWYgcnN0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByc3RhdHVzID0gcnN0YXR1cy5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBwdXB2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTicsIFRydWUpCisgICAgICAgIGlmIHBjdXJ2ZXIgPT0gcHVwdmVyOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIxIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZlcm1hdGNoPSIwIgorICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTicsIFRydWUpCisgICAgICAgIGlmIG5vdXBkYXRlX3JlYXNvbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIG5vdXBkYXRlPSIwIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5vdXBkYXRlPSIxIgorICAgICAgICAgICAgICAgIG5vdXBkYXRlX3JlYXNvbiA9IG5vdXBkYXRlX3JlYXNvbi5yZXBsYWNlKCcsJywnJykKKworICAgICAgICBtYWludGFpbmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX01BSU5UQUlORVInLCBUcnVlKQorICAgICAgICBybHJkID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX1VQU1RSRUFNX0RBVEUnLCBUcnVlKQorICAgICAgICByZXN1bHQgPSBkaXN0X2NoZWNrLmNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpciwgbG9jYWxkYXRhKQorCisgICAgICAgIGJiLm5vdGUoIkRJU1RSTzogJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXMsJXNcbiIgJSBcCisgICAgICAgICAgICAgICAgICAocG5hbWUsIHBkZXNjLCBtYWludGFpbmVyLCBwbGljZW5zZSwgdmVybWF0Y2gsIHBjdXJ2ZXIsIHB1cHZlciwgbm91cGRhdGVfcmVhc29uLCByc3RhdHVzKSkKKyAgICAgICAgbGluZSA9IHBuCisgICAgICAgIGZvciBpIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgIiwiICsgaQorICAgICAgICBiYi5ub3RlKCIlc1xuIiAlIGxpbmUpCit9CisKK2FkZHRhc2sgZGlzdHJvZGF0YQorZG9fZGlzdHJvZGF0YVtub3N0YW1wXSA9ICIxIgorcHl0aG9uIGRvX2Rpc3Ryb2RhdGEoKSB7CisgICAgICAgIGltcG9ydCBjc3YKKyAgICAgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImRpc3Ryb2RhdGEuY3N2IikKKworICAgICAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRpc3RfY2hlY2sKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgICAgICBkaXN0cm9fY2hlY2tfZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgImRpc3Ryb19jaGVjayIpCisgICAgICAgIGRhdGV0aW1lID0gbG9jYWxkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBkaXN0X2NoZWNrLnVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSkKKworICAgICAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgICAgIGJiLm5vdGUoIlBhY2thZ2UgTmFtZTogJXMiICUgcG4pCisKKyAgICAgICAgaWYgcG4uZmluZCgiLW5hdGl2ZSIpICE9IC0xOgorICAgICAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItbmF0aXZlIikKKyAgICAgICAgICAgIGJiLm5vdGUoIk5hdGl2ZSBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5yZXBsYWNlKCJuYXRpdmVzZGstIiwgIiIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmVTREsgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWQgKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbi5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLWNyb3NzIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG4uZmluZCgiLWNyb3Nzc2RrIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zc3NkayIpCisgICAgICAgICAgICBiYi5ub3RlKCJjcm9zcyBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIGlmIHBuLmZpbmQoIi1pbml0aWFsIikgIT0gLTE6CisgICAgICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1pbml0aWFsIikKKyAgICAgICAgICAgIGJiLm5vdGUoImluaXRpYWwgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICAiIiJnZW5lcmF0ZSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gLmJiIGZpbGUiIiIKKyAgICAgICAgcG5hbWUgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgIHBjdXJ2ZXIgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQVicsIFRydWUpCisgICAgICAgIHBkZXNjID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKQorICAgICAgICBpZiBwZGVzYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBwZGVzYyA9IHBkZXNjLnJlcGxhY2UoJywnLCcnKQorICAgICAgICAgICAgICAgIHBkZXNjID0gcGRlc2MucmVwbGFjZSgnXG4nLCcnKQorCisgICAgICAgIHBncnAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICAgICAgcGxpY2Vuc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkucmVwbGFjZSgnLCcsJ18nKQorCisgICAgICAgIHJzdGF0dXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdSRUNJUEVfQ09MT1InLCBUcnVlKQorICAgICAgICBpZiByc3RhdHVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJzdGF0dXMgPSByc3RhdHVzLnJlcGxhY2UoJywnLCcnKQorCisgICAgICAgIHB1cHZlciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgcGN1cnZlciA9PSBwdXB2ZXI6CisgICAgICAgICAgICAgICAgdmVybWF0Y2g9IjEiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmVybWF0Y2g9IjAiCisKKyAgICAgICAgbm91cGRhdGVfcmVhc29uID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX05PX1VQREFURV9SRUFTT04nLCBUcnVlKQorICAgICAgICBpZiBub3VwZGF0ZV9yZWFzb24gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub3VwZGF0ZT0iMSIKKyAgICAgICAgICAgICAgICBub3VwZGF0ZV9yZWFzb24gPSBub3VwZGF0ZV9yZWFzb24ucmVwbGFjZSgnLCcsJycpCisKKyAgICAgICAgbWFpbnRhaW5lciA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9NQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICAgICAgcmxyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ1JFQ0lQRV9VUFNUUkVBTV9EQVRFJywgVHJ1ZSkKKyAgICAgICAgIyBkbyB0aGUgY29tcGFyaXNvbgorICAgICAgICByZXN1bHQgPSBkaXN0X2NoZWNrLmNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpciwgbG9jYWxkYXRhKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHJvdyA9IFtwbmFtZSwgcGRlc2MsIG1haW50YWluZXIsIHBsaWNlbnNlLCB2ZXJtYXRjaCwgcGN1cnZlciwgcHVwdmVyLCBub3VwZGF0ZV9yZWFzb24sIHJzdGF0dXNdCisgICAgICAgICAgICByb3cuZXh0ZW5kKHJlc3VsdCkKKworICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHJvdykKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCithZGR0YXNrIGRpc3Ryb2RhdGFhbGwgYWZ0ZXIgZG9fZGlzdHJvZGF0YQorZG9fZGlzdHJvZGF0YWFsbFtyZWNyZGVwdGFza10gPSAiZG9fZGlzdHJvZGF0YWFsbCBkb19kaXN0cm9kYXRhIgorZG9fZGlzdHJvZGF0YWFsbFtyZWNpZGVwdGFza10gPSAiZG9fJHtCQl9ERUZBVUxUX1RBU0t9IgorZG9fZGlzdHJvZGF0YWFsbFtub3N0YW1wXSA9ICIxIgorZG9fZGlzdHJvZGF0YWFsbCgpIHsKKyAgICAgICAgOgorfQorCithZGRoYW5kbGVyIGNoZWNrcGtnX2V2ZW50aGFuZGxlcgorY2hlY2twa2dfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkIgorcHl0aG9uIGNoZWNrcGtnX2V2ZW50aGFuZGxlcigpIHsKKyAgICBpbXBvcnQgY3N2CisKKyAgICBkZWYgcGFyc2VfY3N2X2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICBwYWNrYWdlX2RpY3QgPSB7fQorCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgcmVhZGVyID0gY3N2LnJlYWRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIGZvciByb3cgaW4gcmVhZGVyOgorICAgICAgICAgICAgICAgIHBuID0gcm93WzBdCisKKyAgICAgICAgICAgICAgICBpZiByZWFkZXIubGluZV9udW0gPT0gMToKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gcm93CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3QgcG4gaW4gcGFja2FnZV9kaWN0LmtleXMoKToKKyAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9kaWN0W3BuXSA9IHJvdworICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRlbGltaXRlcj0nXHQnKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGhlYWRlcikKKyAgICAgICAgICAgIGZvciBwbiBpbiBwYWNrYWdlX2RpY3Qua2V5cygpOgorICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhwYWNrYWdlX2RpY3RbcG5dKQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgZGVsIHBhY2thZ2VfZGljdAorCisgICAgaWYgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiQnVpbGRTdGFydGVkIjoKKyAgICAgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgICAgICBsb2dmaWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgImNoZWNrcGtnLmNzdiIpCisKKyAgICAgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBsb2dmaWxlKQorICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgICAgIGhlYWRlcnMgPSBbJ1BhY2thZ2UnLCAnVmVyc2lvbicsICdVcHZlcicsICdMaWNlbnNlJywgJ1NlY3Rpb24nLAorICAgICAgICAgICAgICAgICdIb21lJywgJ1JlbGVhc2UnLCAnRGVwZW5kcycsICdCdWdUcmFja2VyJywgJ1BFJywgJ0Rlc2NyaXB0aW9uJywKKyAgICAgICAgICAgICAgICAnU3RhdHVzJywgJ1RyYWNraW5nJywgJ1VSSScsICdNQUlOVEFJTkVSJywgJ05vVXBSZWFzb24nXQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGhlYWRlcnMpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICBlbGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIkJ1aWxkQ29tcGxldGVkIjoKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGZpbGVuYW1lID0gInRtcC9sb2cvY2hlY2twa2cuY3N2IgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiVmaWxlbmFtZSkKKyAgICAgICAgICAgIHBhcnNlX2Nzdl9maWxlKGZpbGVuYW1lKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICByZXR1cm4KK30KKworYWRkdGFzayBjaGVja3BrZworZG9fY2hlY2twa2dbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jaGVja3BrZygpIHsKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGltcG9ydCBjc3YKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBpbXBvcnQgb2UucmVjaXBldXRpbHMKKyAgICAgICAgZnJvbSBiYi51dGlscyBpbXBvcnQgdmVyY21wX3N0cmluZworICAgICAgICBmcm9tIGJiLmZldGNoMiBpbXBvcnQgRmV0Y2hFcnJvciwgTm9NZXRob2RFcnJvciwgZGVjb2RldXJsCisKKyAgICAgICAgIiIiZmlyc3QgY2hlY2sgd2hldGhlciBhIHVyaSBpcyBwcm92aWRlZCIiIgorICAgICAgICBzcmNfdXJpID0gZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICAgICBpZiBub3Qgc3JjX3VyaToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdXJpX3R5cGUsIF8sIF8sIF8sIF8sIF8gPSBkZWNvZGV1cmwoc3JjX3VyaSkKKworICAgICAgICAiIiJpbml0aWFsaXplIGxvZyBmaWxlcy4iIiIKKyAgICAgICAgbG9ncGF0aCA9IGQuZ2V0VmFyKCdMT0dfRElSJywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgICAgIGxvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImNoZWNrcGtnLmNzdiIpCisKKyAgICAgICAgIiIiZ2VuZXJhdGUgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIC5iYiBmaWxlIiIiCisgICAgICAgIHBuYW1lID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICAgICBpZiBwbmFtZS5maW5kKCItbmF0aXZlIikgIT0gLTE6CisgICAgICAgICAgICBpZiBkLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmUgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMF0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbmFtZS5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgICAgICBpZiBkLmdldFZhcignQkJDTEFTU0VYVEVORCcsIFRydWUpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5yZXBsYWNlKCJuYXRpdmVzZGstIiwgIiIpCisgICAgICAgICAgICBiYi5ub3RlKCJOYXRpdmVTREsgU3BsaXQ6ICVzIiAlIHBuc3RyaXBwZWQpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWQgKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBpZiBwbmFtZS5maW5kKCItY3Jvc3MiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5zcGxpdCgiLWNyb3NzIikKKyAgICAgICAgICAgIGJiLm5vdGUoImNyb3NzIFNwbGl0OiAlcyIgJSBwbnN0cmlwcGVkKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgInBuLSIgKyBwbnN0cmlwcGVkWzBdICsgIjoiICsgZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpKQorICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgaWYgcG5hbWUuZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgICAgIHBuc3RyaXBwZWQgPSBwbmFtZS5zcGxpdCgiLWluaXRpYWwiKQorICAgICAgICAgICAgYmIubm90ZSgiaW5pdGlhbCBTcGxpdDogJXMiICUgcG5zdHJpcHBlZCkKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgICAgIHBkZXNjID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKQorICAgICAgICBwZ3JwID0gbG9jYWxkYXRhLmdldFZhcignU0VDVElPTicsIFRydWUpCisgICAgICAgIHB2ZXJzaW9uID0gbG9jYWxkYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgICAgICBwbGljZW5zZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgICAgICBwc2VjdGlvbiA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKQorICAgICAgICBwaG9tZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSkKKyAgICAgICAgcHJlbGVhc2UgPSBsb2NhbGRhdGEuZ2V0VmFyKCdQUicsIFRydWUpCisgICAgICAgIHBkZXBlbmRzID0gbG9jYWxkYXRhLmdldFZhcignREVQRU5EUycsIFRydWUpCisgICAgICAgIHBidWd0cmFja2VyID0gbG9jYWxkYXRhLmdldFZhcignQlVHVFJBQ0tFUicsIFRydWUpCisgICAgICAgIHBwZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BFJywgVHJ1ZSkKKyAgICAgICAgcHNyY3VyaSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKQorICAgICAgICBtYWludGFpbmVyID0gbG9jYWxkYXRhLmdldFZhcignUkVDSVBFX01BSU5UQUlORVInLCBUcnVlKQorCisgICAgICAgICIiIiBHZXQgdXBzdHJlYW0gdmVyc2lvbiB2ZXJzaW9uICIiIgorICAgICAgICBwdXB2ZXIgPSAiIgorICAgICAgICBwc3RhdHVzID0gIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB1diA9IG9lLnJlY2lwZXV0aWxzLmdldF9yZWNpcGVfdXBzdHJlYW1fdmVyc2lvbihsb2NhbGRhdGEpCisKKyAgICAgICAgICAgIHB1cHZlciA9IHV2Wyd2ZXJzaW9uJ10KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgZSBpcyBGZXRjaEVycm9yOgorICAgICAgICAgICAgICAgIHBzdGF0dXMgPSAiRXJyQWNjZXNzIgorICAgICAgICAgICAgZWxpZiBlIGlzIE5vTWV0aG9kRXJyb3I6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJFcnJVbnN1cHBvcnRlZFByb3RvIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIkVyclVua25vd24iCisKKyAgICAgICAgIiIiU2V0IHVwc3RyZWFtIHZlcnNpb24gc3RhdHVzIiIiCisgICAgICAgIGlmIG5vdCBwdXB2ZXI6CisgICAgICAgICAgICBwdXB2ZXIgPSAiTi9BIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHYsIF8sIF8gPSBvZS5yZWNpcGV1dGlscy5nZXRfcmVjaXBlX3B2X3dpdGhvdXRfc3JjcHYocHZlcnNpb24sIHVyaV90eXBlKQorICAgICAgICAgICAgdXB2LCBfLCBfID0gb2UucmVjaXBldXRpbHMuZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB1cHZlciwgdXJpX3R5cGUpCisKKyAgICAgICAgICAgIGNtcCA9IHZlcmNtcF9zdHJpbmcocHYsIHVwdikKKyAgICAgICAgICAgIGlmIGNtcCA9PSAtMToKKyAgICAgICAgICAgICAgICBwc3RhdHVzID0gIlVQREFURSIKKyAgICAgICAgICAgIGVsaWYgY21wID09IDA6CisgICAgICAgICAgICAgICAgcHN0YXR1cyA9ICJNQVRDSCIKKworICAgICAgICBwc3JjdXJpID0gcHNyY3VyaS5zcGxpdCgpWzBdCisgICAgICAgIHBkZXBlbmRzID0gIiIuam9pbihwZGVwZW5kcy5zcGxpdCgiXHQiKSkKKyAgICAgICAgcGRlc2MgPSAiIi5qb2luKHBkZXNjLnNwbGl0KCJcdCIpKQorICAgICAgICBub191cGdyX3JlYXNvbiA9IGQuZ2V0VmFyKCdSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTicsIFRydWUpCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUoIiVzLmxvY2siICUgbG9nZmlsZSkKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW3BuYW1lLCBwdmVyc2lvbiwgcHVwdmVyLCBwbGljZW5zZSwgcHNlY3Rpb24sIHBob21lLCAKKyAgICAgICAgICAgICAgICBwcmVsZWFzZSwgcGRlcGVuZHMsIHBidWd0cmFja2VyLCBwcGUsIHBkZXNjLCBwc3RhdHVzLCBwdXB2ZXIsCisgICAgICAgICAgICAgICAgcHNyY3VyaSwgbWFpbnRhaW5lciwgbm9fdXBncl9yZWFzb25dKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCit9CisKK2FkZHRhc2sgY2hlY2twa2dhbGwgYWZ0ZXIgZG9fY2hlY2twa2cKK2RvX2NoZWNrcGtnYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja3BrZ2FsbCBkb19jaGVja3BrZyIKK2RvX2NoZWNrcGtnYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja3BrZ2FsbFtub3N0YW1wXSA9ICIxIgorZG9fY2hlY2twa2dhbGwoKSB7CisgICAgICAgIDoKK30KKworYWRkaGFuZGxlciBkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyCitkaXN0cm9fY2hlY2tfZXZlbnRoYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRTdGFydGVkIgorcHl0aG9uIGRpc3Ryb19jaGVja19ldmVudGhhbmRsZXIoKSB7CisgICAgIiIiaW5pdGlhbGl6ZSBsb2cgZmlsZXMuIiIiCisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIHJlc3VsdF9maWxlID0gZGMuY3JlYXRlX2xvZ19maWxlKGUuZGF0YSwgImRpc3Ryb2NoZWNrLmNzdiIpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgZGlzdHJvX2NoZWNrCitkb19kaXN0cm9fY2hlY2tbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19kaXN0cm9fY2hlY2soKSB7CisgICAgIiIiY2hlY2tzIGlmIHRoZSBwYWNrYWdlIGlzIHByZXNlbnQgaW4gb3RoZXIgcHVibGljIExpbnV4IGRpc3Ryb3MiIiIKKyAgICBpbXBvcnQgb2UuZGlzdHJvX2NoZWNrIGFzIGRjCisgICAgaW1wb3J0IHNodXRpbAorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLGQpOgorICAgICAgICByZXR1cm4KKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIGRpc3Ryb19jaGVja19kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAiZGlzdHJvX2NoZWNrIikKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIHJlc3VsdF9maWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJkaXN0cm9jaGVjay5jc3YiKQorICAgIGRhdGV0aW1lID0gbG9jYWxkYXRhLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgIGRjLnVwZGF0ZV9kaXN0cm9fZGF0YShkaXN0cm9fY2hlY2tfZGlyLCBkYXRldGltZSkKKworICAgICMgZG8gdGhlIGNvbXBhcmlzb24KKyAgICByZXN1bHQgPSBkYy5jb21wYXJlX2luX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIsIGQpCisKKyAgICAjIHNhdmUgdGhlIHJlc3VsdHMKKyAgICBkYy5zYXZlX2Rpc3Ryb19jaGVja19yZXN1bHQocmVzdWx0LCBkYXRldGltZSwgcmVzdWx0X2ZpbGUsIGQpCit9CisKK2FkZHRhc2sgZGlzdHJvX2NoZWNrYWxsIGFmdGVyIGRvX2Rpc3Ryb19jaGVjaworZG9fZGlzdHJvX2NoZWNrYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19kaXN0cm9fY2hlY2thbGwgZG9fZGlzdHJvX2NoZWNrIgorZG9fZGlzdHJvX2NoZWNrYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19kaXN0cm9fY2hlY2thbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2Rpc3Ryb19jaGVja2FsbCgpIHsKKyAgICAgICAgOgorfQorIworI0NoZWNrIE1pc3NpbmcgTGljZW5zZSBUZXh0LgorI1VzZSB0aGlzIHRhc2sgdG8gZ2VuZXJhdGUgdGhlIG1pc3NpbmcgbGljZW5zZSB0ZXh0IGRhdGEgZm9yIHBrZy1yZXBvcnQgc3lzdGVtLAorI3RoZW4gd2UgY2FuIHNlYXJjaCB0aG9zZSByZWNpcGVzIHdoaWNoIGxpY2Vuc2UgdGV4dCBpc24ndCBleHNpdCBpbiBjb21tb24tbGljZW5zZXMgZGlyZWN0b3J5CisjCithZGRoYW5kbGVyIGNoZWNrbGljZW5zZV9ldmVudGhhbmRsZXIKK2NoZWNrbGljZW5zZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCitweXRob24gY2hlY2tsaWNlbnNlX2V2ZW50aGFuZGxlcigpIHsKKyAgICAiIiJpbml0aWFsaXplIGxvZyBmaWxlcy4iIiIKKyAgICBpbXBvcnQgY3N2CisgICAgaW1wb3J0IG9lLmRpc3Ryb19jaGVjayBhcyBkYworICAgIGxvZ2ZpbGUgPSBkYy5jcmVhdGVfbG9nX2ZpbGUoZS5kYXRhLCAibWlzc2luZ2xpY2Vuc2UuY3N2IikKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgd2l0aCBvcGVuKGxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmLCBkZWxpbWl0ZXI9J1x0JykKKyAgICAgICAgd3JpdGVyLndyaXRlcm93KFsnUGFja2FnZScsICdMaWNlbnNlJywgJ01pc3NpbmdMaWNlbnNlJ10pCisgICAgICAgIGYuY2xvc2UoKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2tsaWNlbnNlCitkb19jaGVja2xpY2Vuc2Vbbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jaGVja2xpY2Vuc2UoKSB7CisgICAgaW1wb3J0IGNzdgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBsb2dwYXRoID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICJtaXNzaW5nbGljZW5zZS5jc3YiKQorICAgIGdlbmVyaWNfZGlyZWN0b3J5ID0gZC5nZXRWYXIoJ0NPTU1PTl9MSUNFTlNFX0RJUicsIFRydWUpCisgICAgbGljZW5zZV90eXBlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBmb3IgbGljZW5zZV90eXBlIGluICgobGljZW5zZV90eXBlcy5yZXBsYWNlKCcrJywgJycpLnJlcGxhY2UoJ3wnLCAnJicpCisgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcoJywgJycpLnJlcGxhY2UoJyknLCAnJykucmVwbGFjZSgnOycsICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnLCcsICcnKS5yZXBsYWNlKCIgIiwgIiIpLnNwbGl0KCImIikpKToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZW5lcmljX2RpcmVjdG9yeSwgbGljZW5zZV90eXBlKSk6CisgICAgICAgICAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKCIlcy5sb2NrIiAlIGxvZ2ZpbGUpCisgICAgICAgICAgICB3aXRoIG9wZW4obG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGVsaW1pdGVyPSdcdCcpCisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KFtwbiwgbGljZW5zZV90eXBlcywgbGljZW5zZV90eXBlXSkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgcmV0dXJuCit9CisKK2FkZHRhc2sgY2hlY2tsaWNlbnNlYWxsIGFmdGVyIGRvX2NoZWNrbGljZW5zZQorZG9fY2hlY2tsaWNlbnNlYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19jaGVja2xpY2Vuc2VhbGwgZG9fY2hlY2tsaWNlbnNlIgorZG9fY2hlY2tsaWNlbnNlYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19jaGVja2xpY2Vuc2VhbGxbbm9zdGFtcF0gPSAiMSIKK2RvX2NoZWNrbGljZW5zZWFsbCgpIHsKKyAgICAgICAgOgorfQorCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExOGU4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNCBAQAorREVQRU5EUyAgKz0gIiR7QFsiJHtQWVRIT05fUE59LW5hdGl2ZSAke1BZVEhPTl9QTn0iLCAiIl1bKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpID09ICcnKV19IgorUkRFUEVORFNfJHtQTn0gKz0gIiR7QFsnJywgJyR7UFlUSE9OX1BOfS1jb3JlJ11bJyR7Q0xBU1NPVkVSUklERX0nID09ICdjbGFzcy10YXJnZXQnXX0iCisKK2luaGVyaXQgZGlzdHV0aWxzLWNvbW1vbi1iYXNlIHB5dGhvbm5hdGl2ZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy1jb21tb24tYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzI3NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLWNvbW1vbi1iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyNCBAQAoraW5oZXJpdCBweXRob24tZGlyCisKK0VYVFJBX09FTUFLRSA9ICIiCisKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK1BBQ0tBR0VTID0gIiR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZGJnICR7UE59LWRvYyAke1BOfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qICR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9LyoiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiXAorICAke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmEgXAorIgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7ZGF0YWRpcn0vcGtnY29uZmlnIFwKKyAgJHtsaWJkaXJ9L3BrZ2NvbmZpZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyoubGEgXAorIgorRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9Ly5kZWJ1ZyBcCisgICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9LyovLmRlYnVnIFwKKyAgJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKi8qLy5kZWJ1ZyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLW5hdGl2ZS1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5Y2I5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMtbmF0aXZlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKK2luaGVyaXQgZGlzdHV0aWxzLWNvbW1vbi1iYXNlCisKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUiLCAiIl1bKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpID09ICcnKV19IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2Rpc3R1dGlscy10b29scy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MzQ1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLXRvb2xzLmJiY2xhc3MKQEAgLTAsMCArMSw3NyBAQAorRElTVFVUSUxTX0JVSUxEX0FSR1MgPz0gIiIKK0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1MgPz0gIi0taW5zdGFsbC1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSIKK0RJU1RVVElMU19TVEFHRV9BTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtTVEFHSU5HX0RBVEFESVJ9IgorRElTVFVUSUxTX0lOU1RBTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtEfS8ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7RH0vJHtkYXRhZGlyfSIKKworZGlzdHV0aWxzX2RvX2NvbXBpbGUoKSB7CisgICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGRfZXh0IGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfaGVhZGVycygpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgJHtESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK2Rpc3R1dGlsc19zdGFnZV9hbGwoKSB7CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAke0RJU1RVVElMU19TVEFHRV9BTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfZG9faW5zdGFsbCgpIHsKKyAgICAgICAgZWNobyAiQmVnaW5uaW5nICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBlY2hvICJTdGVwIDIgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0vJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0gXAorICAgICAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgLS1pbnN0YWxsLWxpYj0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9ICR7RElTVFVUSUxTX0lOU1RBTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKKworICAgICAgICBlY2hvICJTdGVwIDMgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgICMgc3VwcG9ydCBmaWxlbmFtZXMgd2l0aCAqc3BhY2VzKgorICAgICAgICBmaW5kICR7RH0gLW5hbWUgIioucHkiIC1wcmludDAgfCB3aGlsZSByZWFkIC1kICQnXDAnIGkgOyBkbyBcCisgICAgICAgICAgICBzZWQgLWkgLWUgczoke0R9OjpnICRpCisgICAgICAgIGRvbmUKKworICAgICAgICBlY2hvICJTdGVwIDQgb2YgJHtQTn0gSW5zdGFsbCAuLi4iCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7YmluZGlyfSA7IHRoZW4JCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgZWNobyAiU3RlcCA0IG9mICR7UE59IEluc3RhbGwgLi4uIgorICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke3NiaW5kaXJ9OyB0aGVuCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtzYmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSBzOiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfToke2JpbmRpcn06ZyAkaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGVjaG8gIlN0ZXAgNSBvZiAke1BOfSBJbnN0YWxsIC4uLiIKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgCisgICAgICAgICMKKyAgICAgICAgIyBGSVhNRTogQmFuZGFpZCBhZ2FpbnN0IHdyb25nIGRhdGFkaXIgY29tcHV0YXRpb24KKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke2RhdGFkaXJ9L3NoYXJlOyB0aGVuCisgICAgICAgICAgICBtdiAtZiAke0R9JHtkYXRhZGlyfS9zaGFyZS8qICR7RH0ke2RhdGFkaXJ9LworICAgICAgICBmaQorfQorCisjRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwNjcxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMuYmJjbGFzcwpAQCAtMCwwICsxLDg2IEBACitpbmhlcml0IGRpc3R1dGlscy1iYXNlCisKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTID89ICItLWluc3RhbGwtZGlyPSR7U1RBR0lOR19JTkNESVJ9LyR7UFlUSE9OX0RJUn0iCitESVNUVVRJTFNfU1RBR0VfQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7U1RBR0lOR19EQVRBRElSfSIKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPz0gIi0tcHJlZml4PSR7RH0vJHtwcmVmaXh9IFwKKyAgICAtLWluc3RhbGwtZGF0YT0ke0R9LyR7ZGF0YWRpcn0iCisKK2Rpc3R1dGlsc19kb19jb21waWxlKCkgeworICAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGJ1aWxkIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfc3RhZ2VfaGVhZGVycygpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgJHtESVNUVVRJTFNfU1RBR0VfSEVBREVSU19BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsX2hlYWRlcnMgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK2Rpc3R1dGlsc19zdGFnZV9hbGwoKSB7CisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBpbnN0YWxsIC1kICR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorICAgICAgICBQWVRIT05QQVRIPSR7U1RBR0lOR19ESVJfSE9TVH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAke0RJU1RVVElMU19TVEFHRV9BTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHNfZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIFBZVEhPTlBBVEg9JHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSBzZXR1cC5weSBpbnN0YWxsIC0taW5zdGFsbC1saWI9JHtEfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSAke0RJU1RVVElMU19JTlNUQUxMX0FSR1N9IHx8IFwKKyAgICAgICAgYmJmYXRhbCAiJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgZXhlY3V0aW9uIGZhaWxlZC4iCisKKyAgICAgICAgIyBzdXBwb3J0IGZpbGVuYW1lcyB3aXRoICpzcGFjZXMqCisgICAgICAgICMgb25seSBtb2RpZnkgZmlsZSBpZiBpdCBjb250YWlucyBwYXRoICBhbmQgcmVjb21waWxlIGl0CisgICAgICAgIGZpbmQgJHtEfSAtbmFtZSAiKi5weSIgLWV4ZWMgZ3JlcCAtcSAke0R9IHt9IFw7IC1leGVjIHNlZCAtaSAtZSBzOiR7RH06Omcge30gXDsgLWV4ZWMgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIC1tY29tcGlsZWFsbCB7fSBcOworCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7YmluZGlyfSA7IHRoZW4JCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgaWYgWyAke1BOfSAhPSAiJHtCUE59LW5hdGl2ZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIAlzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob246JHtiaW5kaXJ9L2VudlwgcHl0aG9uOmcgJGkKKwkJZmkKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0IC1lICR7RH0ke3NiaW5kaXJ9OyB0aGVuCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtzYmluZGlyfS8qIDsgZG8gXAorICAgICAgICAgICAgICAgIGlmIFsgJHtQTn0gIT0gIiR7QlBOfS1uYXRpdmUiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAJc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uOiR7YmluZGlyfS9lbnZcIHB5dGhvbjpnICRpCisJCWZpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2Vhc3ktaW5zdGFsbC5wdGgKKyAgICAgICAgcm0gLWYgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NpdGUucHkqCisgICAgICAgIAorICAgICAgICAjCisgICAgICAgICMgRklYTUU6IEJhbmRhaWQgYWdhaW5zdCB3cm9uZyBkYXRhZGlyIGNvbXB1dGF0aW9uCisgICAgICAgICMKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtkYXRhZGlyfS9zaGFyZTsgdGhlbgorICAgICAgICAgICAgbXYgLWYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8KKyAgICAgICAgICAgIHJtZGlyICR7RH0ke2RhdGFkaXJ9L3NoYXJlCisgICAgICAgIGZpCisKKwkjIEZpeCBiYWNrcG9ydCBtb2R1bGVzCisJaWYgdGVzdCAtZSAke1NUQUdJTkdfTElCRElSfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvYmFja3BvcnRzL19faW5pdF9fLnB5ICYmIHRlc3QgLWUgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2JhY2twb3J0cy9fX2luaXRfXy5weTsgdGhlbgorCSAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9iYWNrcG9ydHMvX19pbml0X18ucHk7CisJICAgcm0gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2JhY2twb3J0cy9fX2luaXRfXy5weWM7CisJZmkKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworZXhwb3J0IExEU0hBUkVEPSIke0NDTER9IC1zaGFyZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzYWEwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDggQEAKK0RFUEVORFMgICs9ICIke0BbIiR7UFlUSE9OX1BOfS1uYXRpdmUgJHtQWVRIT05fUE59IiwgIiJdWyhkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSA9PSAnJyldfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BbJycsICcke1BZVEhPTl9QTn0tY29yZSddWycke0NMQVNTT1ZFUlJJREV9JyA9PSAnY2xhc3MtdGFyZ2V0J119IgorCitQWVRIT05fQkFTRVZFUlNJT04gPSAiMy40IgorUFlUSE9OX0FCSSA9ICJtIgorCitpbmhlcml0IGRpc3R1dGlscy1jb21tb24tYmFzZSBweXRob24zbmF0aXZlCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLW5hdGl2ZS1iYXNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1uYXRpdmUtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMTcxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy1uYXRpdmUtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNCBAQAorUFlUSE9OX0JBU0VWRVJTSU9OID0gIjMuNCIKK1BZVEhPTl9BQkkgPSAibSIKKworaW5oZXJpdCBkaXN0dXRpbHMtbmF0aXZlLWJhc2UKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9kaXN0dXRpbHMzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDllZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZGlzdHV0aWxzMy5iYmNsYXNzCkBAIC0wLDAgKzEsOTYgQEAKK2luaGVyaXQgZGlzdHV0aWxzMy1iYXNlCisKK0RJU1RVVElMU19CVUlMRF9BUkdTID89ICIiCitESVNUVVRJTFNfQlVJTERfRVhUX0FSR1MgPz0gIiIKK0RJU1RVVElMU19TVEFHRV9IRUFERVJTX0FSR1MgPz0gIi0taW5zdGFsbC1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfSIKK0RJU1RVVElMU19TVEFHRV9BTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtTVEFHSU5HX0RBVEFESVJ9IgorRElTVFVUSUxTX0lOU1RBTExfQVJHUyA/PSAiLS1wcmVmaXg9JHtEfS8ke3ByZWZpeH0gXAorICAgIC0taW5zdGFsbC1kYXRhPSR7RH0vJHtkYXRhZGlyfSIKKworZGlzdHV0aWxzM19kb19jb21waWxlKCkgeworICAgICAgICBpZiBbICR7QlVJTERfU1lTfSAhPSAke0hPU1RfU1lTfSBdOyB0aGVuCisgICAgICAgICAgICAgICAgU1lTPSR7TUFDSElORX0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFNZUz0ke0hPU1RfU1lTfQorICAgICAgICBmaQorICAgICAgICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgIFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgXAorICAgICAgICBidWlsZCAke0RJU1RVVElMU19CVUlMRF9BUkdTfSB8fCBcCisgICAgICAgIGJiZmF0YWwgIiR7UFlUSE9OX1BOfSBzZXR1cC5weSBidWlsZF9leHQgZXhlY3V0aW9uIGZhaWxlZC4iCit9CisKK2Rpc3R1dGlsczNfc3RhZ2VfaGVhZGVycygpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke1NUQUdJTkdfRElSX0hPU1R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzICR7RElTVFVUSUxTX1NUQUdFX0hFQURFUlNfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbF9oZWFkZXJzIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX3N0YWdlX2FsbCgpIHsKKyAgICAgICAgaWYgWyAke0JVSUxEX1NZU30gIT0gJHtIT1NUX1NZU30gXTsgdGhlbgorICAgICAgICAgICAgICAgIFNZUz0ke01BQ0hJTkV9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBTWVM9JHtIT1NUX1NZU30KKyAgICAgICAgZmkKKyAgICAgICAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgIGluc3RhbGwgLWQgJHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIFBZVEhPTlBBVEg9JHtTVEFHSU5HX0RJUl9IT1NUfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9IFwKKyAgICAgICAgQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke1NZU30gXAorICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAke0RJU1RVVElMU19TVEFHRV9BTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCAoc3RhZ2UpIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitkaXN0dXRpbHMzX2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9CisgICAgICAgIGlmIFsgJHtCVUlMRF9TWVN9ICE9ICR7SE9TVF9TWVN9IF07IHRoZW4KKyAgICAgICAgICAgICAgICBTWVM9JHtNQUNISU5FfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgU1lTPSR7SE9TVF9TWVN9CisgICAgICAgIGZpCisgICAgICAgIFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKyAgICAgICAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICBQWVRIT05QQVRIPSR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgICAgIEJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtTWVN9IFwKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59IHNldHVwLnB5IGluc3RhbGwgLS1pbnN0YWxsLWxpYj0ke0R9LyR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9ICR7RElTVFVUSUxTX0lOU1RBTExfQVJHU30gfHwgXAorICAgICAgICBiYmZhdGFsICIke1BZVEhPTl9QTn0gc2V0dXAucHkgaW5zdGFsbCBleGVjdXRpb24gZmFpbGVkLiIKKworICAgICAgICAjIHN1cHBvcnQgZmlsZW5hbWVzIHdpdGggKnNwYWNlcyoKKyAgICAgICAgZmluZCAke0R9IC1uYW1lICIqLnB5IiAtZXhlYyBncmVwIC1xICR7RH0ge30gXDsgLWV4ZWMgc2VkIC1pIC1lIHM6JHtEfTo6ZyB7fSBcOworCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7YmluZGlyfSA7IHRoZW4JCisgICAgICAgICAgICBmb3IgaSBpbiAke0R9JHtiaW5kaXJ9LyogOyBkbyBcCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LyR7UFlUSE9OX1BOfS1uYXRpdmUvJHtQWVRIT05fUE59OiR7YmluZGlyfS9lbnZcICR7UFlUSE9OX1BOfTpnICRpCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lIHM6JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7YmluZGlyfTpnICRpCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAtZSAke0R9JHtzYmluZGlyfTsgdGhlbgorICAgICAgICAgICAgZm9yIGkgaW4gJHtEfSR7c2JpbmRpcn0vKiA7IGRvIFwKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLSR7UFlUSE9OX1BOfS8ke1BZVEhPTl9QTn06JHtiaW5kaXJ9L2VudlwgJHtQWVRIT05fUE59OmcgJGkKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgczoke1NUQUdJTkdfQklORElSX05BVElWRX06JHtiaW5kaXJ9OmcgJGkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworICAgICAgICBybSAtZiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vZWFzeS1pbnN0YWxsLnB0aAorICAgICAgICAKKyAgICAgICAgIworICAgICAgICAjIEZJWE1FOiBCYW5kYWlkIGFnYWluc3Qgd3JvbmcgZGF0YWRpciBjb21wdXRhdGlvbgorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgLWUgJHtEfSR7ZGF0YWRpcn0vc2hhcmU7IHRoZW4KKyAgICAgICAgICAgIG12IC1mICR7RH0ke2RhdGFkaXJ9L3NoYXJlLyogJHtEfSR7ZGF0YWRpcn0vCisgICAgICAgICAgICBybWRpciAke0R9JHtkYXRhZGlyfS9zaGFyZQorICAgICAgICBmaQorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbAorCitleHBvcnQgTERTSEFSRUQ9IiR7Q0NMRH0gLXNoYXJlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2V4dGVybmFsc3JjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZhNTgxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9leHRlcm5hbHNyYy5iYmNsYXNzCkBAIC0wLDAgKzEsOTIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEyIExpbnV4IEZvdW5kYXRpb24KKyMgQXV0aG9yOiBSaWNoYXJkIFB1cmRpZQorIyBTb21lIGNvZGUgYW5kIGluZmx1ZW5jZSB0YWtlbiBmcm9tIHNyY3RyZWUuYmJjbGFzczoKKyMgQ29weXJpZ2h0IChDKSAyMDA5IENocmlzIExhcnNvbiA8Y2xhcnNvbkBrZXJnb3RoLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKyMKKyMgZXh0ZXJuYWxzcmMuYmJjbGFzcyBlbmFibGVzIHVzZSBvZiBhbiBleGlzdGluZyBzb3VyY2UgdHJlZSwgdXN1YWxseSBleHRlcm5hbCB0byAKKyMgdGhlIGJ1aWxkIHN5c3RlbSB0byBidWlsZCBhIHBpZWNlIG9mIHNvZnR3YXJlIHJhdGhlciB0aGFuIHRoZSB1c3VhbCBmZXRjaC91bnBhY2svcGF0Y2gKKyMgcHJvY2Vzcy4KKyMKKyMgVG8gdXNlLCBhZGQgZXh0ZXJuYWxzcmMgdG8gdGhlIGdsb2JhbCBpbmhlcml0IGFuZCBzZXQgRVhURVJOQUxTUkMgdG8gcG9pbnQgYXQgdGhlCisjIGRpcmVjdG9yeSB5b3Ugd2FudCB0byB1c2UgY29udGFpbmluZyB0aGUgc291cmNlcyBlLmcuIGZyb20gbG9jYWwuY29uZiBmb3IgYSByZWNpcGUKKyMgY2FsbGVkICJteXJlY2lwZSIgeW91IHdvdWxkIGRvOgorIworIyBJTkhFUklUICs9ICJleHRlcm5hbHNyYyIKKyMgRVhURVJOQUxTUkNfcG4tbXlyZWNpcGUgPSAiL3BhdGgvdG8vbXkvc291cmNlL3RyZWUiCisjCisjIEluIG9yZGVyIHRvIG1ha2UgdGhpcyBjbGFzcyB3b3JrIGZvciBib3RoIHRhcmdldCBhbmQgbmF0aXZlIHZlcnNpb25zIChvciB3aXRoCisjIG11bHRpbGlicy9jcm9zcyBvciBvdGhlciBCQkNMQVNTRVhURU5EIHZhcmlhbnRzKSwgQiBpcyBzZXQgdG8gcG9pbnQgdG8gYSBzZXBhcmF0ZQorIyBkaXJlY3RvcnkgdW5kZXIgdGhlIHdvcmsgZGlyZWN0b3J5IChzcGxpdCBzb3VyY2UgYW5kIGJ1aWxkIGRpcmVjdG9yaWVzKS4gVGhpcyBpcworIyB0aGUgZGVmYXVsdCwgYnV0IHRoZSBidWlsZCBkaXJlY3RvcnkgY2FuIGJlIHNldCB0byB0aGUgc291cmNlIGRpcmVjdG9yeSBpZgorIyBjaXJjdW1zdGFuY2VzIGRpY3RhdGUgYnkgc2V0dGluZyBFWFRFUk5BTFNSQ19CVUlMRCB0byB0aGUgc2FtZSB2YWx1ZSwgZS5nLjoKKyMKKyMgRVhURVJOQUxTUkNfQlVJTERfcG4tbXlyZWNpcGUgPSAiL3BhdGgvdG8vbXkvc291cmNlL3RyZWUiCisjCisKK1NSQ1RSRUVDT1ZFUkVEVEFTS1MgPz0gImRvX3BhdGNoIGRvX3VucGFjayBkb19mZXRjaCIKKworcHl0aG9uICgpIHsKKyAgICBleHRlcm5hbHNyYyA9IGQuZ2V0VmFyKCdFWFRFUk5BTFNSQycsIFRydWUpCisgICAgaWYgZXh0ZXJuYWxzcmM6CisgICAgICAgIGQuc2V0VmFyKCdTJywgZXh0ZXJuYWxzcmMpCisgICAgICAgIGV4dGVybmFsc3JjYnVpbGQgPSBkLmdldFZhcignRVhURVJOQUxTUkNfQlVJTEQnLCBUcnVlKQorICAgICAgICBpZiBleHRlcm5hbHNyY2J1aWxkOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0InLCBleHRlcm5hbHNyY2J1aWxkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZC5zZXRWYXIoJ0InLCAnJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0vJykKKworICAgICAgICBsb2NhbF9zcmN1cmkgPSBbXQorICAgICAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaCgoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAnJykuc3BsaXQoKSwgZCkKKyAgICAgICAgZm9yIHVybCBpbiBmZXRjaC51cmxzOgorICAgICAgICAgICAgdXJsX2RhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgICAgICBwYXJtID0gdXJsX2RhdGEucGFybQorICAgICAgICAgICAgaWYgKHVybF9kYXRhLnR5cGUgPT0gJ2ZpbGUnIG9yCisgICAgICAgICAgICAgICAgICAgICd0eXBlJyBpbiBwYXJtIGFuZCBwYXJtWyd0eXBlJ10gPT0gJ2ttZXRhJyk6CisgICAgICAgICAgICAgICAgbG9jYWxfc3JjdXJpLmFwcGVuZCh1cmwpCisKKyAgICAgICAgZC5zZXRWYXIoJ1NSQ19VUkknLCAnICcuam9pbihsb2NhbF9zcmN1cmkpKQorCisgICAgICAgIGlmICd7U1JDUFZ9JyBpbiBkLmdldFZhcignUFYnLCBGYWxzZSk6CisgICAgICAgICAgICAjIER1bW15IHZhbHVlIGJlY2F1c2UgdGhlIGRlZmF1bHQgZnVuY3Rpb24gY2FuJ3QgYmUgY2FsbGVkIHdpdGggYmxhbmsgU1JDX1VSSQorICAgICAgICAgICAgZC5zZXRWYXIoJ1NSQ1BWJywgJzk5OScpCisKKyAgICAgICAgdGFza3MgPSBmaWx0ZXIobGFtYmRhIGs6IGQuZ2V0VmFyRmxhZyhrLCAidGFzayIpLCBkLmtleXMoKSkKKworICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmIHRhc2suZW5kc3dpdGgoIl9zZXRzY2VuZSIpOgorICAgICAgICAgICAgICAgICMgc3N0YXRlIGlzIG5ldmVyIGdvaW5nIHRvIHdvcmsgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlcywgZGlzYWJsZSBpdAorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmRlbHRhc2sodGFzaywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBjb25maWd1cmUgd2lsbCBsaWtlbHkgdG91Y2ggJHtTfSwgZW5zdXJlIG9ubHkgd2UgbG9jayBzbyBvbmUgdGFzayBoYXMgYWNjZXNzIGF0IGEgdGltZQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZyh0YXNrLCAibG9ja2ZpbGVzIiwgIiAke1N9L3NpbmdsZXRhc2subG9jayIpCisKKyAgICAgICAgICAgICMgV2UgZG8gbm90IHdhbnQgb3VyIHNvdXJjZSB0byBiZSB3aXBlZCBvdXQsIGV2ZXIgKGtlcm5lbC5iYmNsYXNzIGRvZXMgdGhpcyBmb3IgZG9fY2xlYW4pCisgICAgICAgICAgICBjbGVhbmRpcnMgPSAoZC5nZXRWYXJGbGFnKHRhc2ssICdjbGVhbmRpcnMnLCBGYWxzZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgICAgIHNldHZhbHVlID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBjbGVhbmRpciBpbiBjbGVhbmRpcnNbOl06CisgICAgICAgICAgICAgICAgaWYgZC5leHBhbmQoY2xlYW5kaXIpID09IGV4dGVybmFsc3JjOgorICAgICAgICAgICAgICAgICAgICBjbGVhbmRpcnMucmVtb3ZlKGNsZWFuZGlyKQorICAgICAgICAgICAgICAgICAgICBzZXR2YWx1ZSA9IFRydWUKKyAgICAgICAgICAgIGlmIHNldHZhbHVlOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyRmxhZyh0YXNrLCAnY2xlYW5kaXJzJywgJyAnLmpvaW4oY2xlYW5kaXJzKSkKKworICAgICAgICBmZXRjaF90YXNrcyA9IFsnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJ10KKyAgICAgICAgIyBJZiB3ZSBkZWx0YXNrIGRvX3BhdGNoLCB0aGVyZSdzIG5vIGRlcGVuZGVuY3kgdG8gZW5zdXJlIGRvX3VucGFjayBnZXRzIHJ1biwgc28gYWRkIG9uZQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2NvbmZpZ3VyZScsICdkZXBzJywgWydkb191bnBhY2snXSkKKworICAgICAgICBmb3IgdGFzayBpbiBkLmdldFZhcigiU1JDVFJFRUNPVkVSRURUQVNLUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBsb2NhbF9zcmN1cmkgYW5kIHRhc2sgaW4gZmV0Y2hfdGFza3M6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGJiLmJ1aWxkLmRlbHRhc2sodGFzaywgZCkKKworICAgICAgICBkLnByZXBlbmRWYXJGbGFnKCdkb19jb21waWxlJywgJ3ByZWZ1bmNzJywgImV4dGVybmFsc3JjX2NvbXBpbGVfcHJlZnVuYyAiKQorCisgICAgICAgICMgRW5zdXJlIGNvbXBpbGF0aW9uIGhhcHBlbnMgZXZlcnkgdGltZQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2NvbXBpbGUnLCAnbm9zdGFtcCcsICcxJykKK30KKworcHl0aG9uIGV4dGVybmFsc3JjX2NvbXBpbGVfcHJlZnVuYygpIHsKKyAgICAjIE1ha2UgaXQgb2J2aW91cyB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nLCBzaW5jZSBmb3JnZXR0aW5nIGFib3V0IGl0IGNvdWxkIGxlYWQgdG8gbXVjaCBjb25mdXNpb24KKyAgICBiYi53YXJuKCdDb21waWxpbmcgJXMgZnJvbSBleHRlcm5hbCBzb3VyY2UgJXMnICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignRVhURVJOQUxTUkMnLCBUcnVlKSkpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZXh0cmF1c2Vycy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2V4dHJhdXNlcnMuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWY1N2IxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2V4dHJhdXNlcnMuYmJjbGFzcwpAQCAtMCwwICsxLDY1IEBACisjIFRoaXMgYmJjbGFzcyBpcyBtYWlubHkgdXNlZCBmb3IgaW1hZ2UgbGV2ZWwgdXNlci9ncm91cCBjb25maWd1cmF0aW9uLgorIyBJbmhlcml0IHRoaXMgY2xhc3MgaWYgeW91IHdhbnQgdG8gbWFrZSBFWFRSQV9VU0VSU19QQVJBTVMgZWZmZWN0aXZlLgorCisjIEJlbG93IGlzIGFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyMgSU5IRVJJVCArPSAiZXh0cmF1c2VycyIKKyMgRVhUUkFfVVNFUlNfUEFSQU1TID0gIlwKKyMgdXNlcmFkZCAtcCAnJyB0ZXN0ZXI7IFwKKyMgZ3JvdXBhZGQgZGV2ZWxvcGVyczsgXAorIyB1c2VyZGVsIG5vYm9keTsgXAorIyBncm91cGRlbCAtZyB2aWRlbzsgXAorIyBncm91cG1vZCAtZyAxMDIwIGRldmVsb3BlcnM7IFwKKyMgdXNlcm1vZCAtcyAvYmluL3NoIHRlc3RlcjsgXAorIyAiCisKKworaW5oZXJpdCB1c2VyYWRkX2Jhc2UKKworSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiICR7QFsnJywgJ2Jhc2UtcGFzc3dkIHNoYWRvdyddW2Jvb2woZC5nZXRWYXIoJ0VYVFJBX1VTRVJTX1BBUkFNUycsIFRydWUpKV19IgorCisjIEltYWdlIGxldmVsIHVzZXIgLyBncm91cCBzZXR0aW5ncworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRfYXBwZW5kID0gIiBzZXRfdXNlcl9ncm91cDsiCisKKyMgSW1hZ2UgbGV2ZWwgdXNlciAvIGdyb3VwIHNldHRpbmdzCitzZXRfdXNlcl9ncm91cCAoKSB7CisJdXNlcl9ncm91cF9zZXR0aW5ncz0iJHtFWFRSQV9VU0VSU19QQVJBTVN9IgorCWV4cG9ydCBQU0VVRE89IiR7RkFLRVJPT1RFTlZ9ICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyfS9wc2V1ZG8iCisJc2V0dGluZz1gZWNobyAkdXNlcl9ncm91cF9zZXR0aW5ncyB8IGN1dCAtZCAnOycgLWYxYAorCXJlbWFpbmluZz1gZWNobyAkdXNlcl9ncm91cF9zZXR0aW5ncyB8IGN1dCAtZCAnOycgLWYyLWAKKwl3aGlsZSB0ZXN0ICJ4JHNldHRpbmciICE9ICJ4IjsgZG8KKwkJY21kPWBlY2hvICRzZXR0aW5nIHwgY3V0IC1kICcgJyAtZjFgCisJCW9wdHM9YGVjaG8gJHNldHRpbmcgfCBjdXQgLWQgJyAnIC1mMi1gCisJCSMgRGlmZmVyZW50IGZyb20gdXNlcmFkZC5iYmNsYXNzLCB0aGVyZSdzIG5vIGZpbGUgbG9ja2luZyBpc3N1ZSBoZXJlLCBhcworCQkjIHRoaXMgc2V0dGluZyBpcyBhY3R1YWxseSBhIHNlcmlhbCBwcm9jZXNzLiBTbyB3ZSBvbmx5IHJldHJ5IG9uY2UuCisJCWNhc2UgJGNtZCBpbgorCQkJdXNlcmFkZCkKKwkJCQlwZXJmb3JtX3VzZXJhZGQgIiR7SU1BR0VfUk9PVEZTfSIgIi1SICR7SU1BR0VfUk9PVEZTfSAkb3B0cyIgMQorCQkJCTs7CisJCQlncm91cGFkZCkKKwkJCQlwZXJmb3JtX2dyb3VwYWRkICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJdXNlcmRlbCkKKwkJCQlwZXJmb3JtX3VzZXJkZWwgIiR7SU1BR0VfUk9PVEZTfSIgIi1SICR7SU1BR0VfUk9PVEZTfSAkb3B0cyIgMQorCQkJCTs7CisJCQlncm91cGRlbCkKKwkJCQlwZXJmb3JtX2dyb3VwZGVsICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJdXNlcm1vZCkKKwkJCQlwZXJmb3JtX3VzZXJtb2QgIiR7SU1BR0VfUk9PVEZTfSIgIi1SICR7SU1BR0VfUk9PVEZTfSAkb3B0cyIgMQorCQkJCTs7CisJCQlncm91cG1vZCkKKwkJCQlwZXJmb3JtX2dyb3VwbW9kICIke0lNQUdFX1JPT1RGU30iICItUiAke0lNQUdFX1JPT1RGU30gJG9wdHMiIDEKKwkJCQk7OworCQkJKikKKwkJCQliYmZhdGFsICJJbnZhbGlkIGNvbW1hbmQgaW4gRVhUUkFfVVNFUlNfUEFSQU1TOiAkY21kIgorCQkJCTs7CisJCWVzYWMKKwkJIyBBdm9pZCBpbmZpbml0ZSBsb29wIGlmIHRoZSBsYXN0IHBhcmFtZXRlciBkb2Vzbid0IGVuZCB3aXRoICc7JworCQlpZiBbICIkc2V0dGluZyIgPSAiJHJlbWFpbmluZyIgXTsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJIyBpdGVyYXRlIHRvIHRoZSBuZXh0IHNldHRpbmcKKwkJc2V0dGluZz1gZWNobyAkcmVtYWluaW5nIHwgY3V0IC1kICc7JyAtZjFgCisJCXJlbWFpbmluZz1gZWNobyAkcmVtYWluaW5nIHwgY3V0IC1kICc7JyAtZjItYAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9mb250Y2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTIyMzg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ZvbnRjYWNoZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDUgQEAKKyMKKyMgVGhpcyBjbGFzcyB3aWxsIGdlbmVyYXRlIHRoZSBwcm9wZXIgcG9zdGluc3QvcG9zdHJtIHNjcmlwdGxldHMgZm9yIGZvbnQKKyMgcGFja2FnZXMuCisjCisKK0RFUEVORFMgKz0gInFlbXUtbmF0aXZlIgoraW5oZXJpdCBxZW11CisKK0ZPTlRfUEFDS0FHRVMgPz89ICIke1BOfSIKK0ZPTlRfRVhUUkFfUkRFUEVORFMgPz0gImZvbnRjb25maWctdXRpbHMiCitGT05UQ09ORklHX0NBQ0hFX0RJUiA/PSAiJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS9mb250Y29uZmlnIgorZm9udGNhY2hlX2NvbW1vbigpIHsKK2lmIFsgIngkRCIgIT0gIngiIF0gOyB0aGVuCisJJElOVEVSQ0VQVF9ESVIvcG9zdGluc3RfaW50ZXJjZXB0IHVwZGF0ZV9mb250X2NhY2hlICR7UEtHfSBtbHByZWZpeD0ke01MUFJFRklYfSBiaW5kaXI9JHtiaW5kaXJ9IFwKKwkJbGliZGlyPSR7bGliZGlyfSBiYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfSBmb250Y29uZmlnY2FjaGVkaXI9JHtGT05UQ09ORklHX0NBQ0hFX0RJUn0KK2Vsc2UKKwlmYy1jYWNoZQorZmkKK30KKworcHl0aG9uICgpIHsKKyAgICBmb250X3BrZ3MgPSBkLmdldFZhcignRk9OVF9QQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBkZXBzID0gZC5nZXRWYXIoIkZPTlRfRVhUUkFfUkRFUEVORFMiLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiBmb250X3BrZ3M6CisgICAgICAgIGlmIGRlcHM6IGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcGtnLCAnICcrZGVwcykKK30KKworcHl0aG9uIGFkZF9mb250Y2FjaGVfcG9zdGluc3RzKCkgeworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ0ZPTlRfUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZm9udHMgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZm9udGNhY2hlX2NvbW1vbicsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdmb250Y2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK1BBQ0tBR0VGVU5DUyA9KyAiYWRkX2ZvbnRjYWNoZV9wb3N0aW5zdHMiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZnMtdXVpZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ZzLXV1aWQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI2MTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ZzLXV1aWQuYmJjbGFzcwpAQCAtMCwwICsxLDI0IEBACisjIEV4dHJhY3QgVVVJRCBmcm9tICR7Uk9PVEZTfSwgd2hpY2ggbXVzdCBoYXZlIGJlZW4gYnVpbHQKKyMgYnkgdGhlIHRpbWUgdGhhdCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBPbmx5IHdvcmtzCisjIG9uIGV4dCBmaWxlIHN5c3RlbXMgYW5kIGRlcGVuZHMgb24gdHVuZTJmcy4KK2RlZiBnZXRfcm9vdGZzX3V1aWQoZCk6CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICByb290ZnMgPSBkLmdldFZhcignUk9PVEZTJywgVHJ1ZSkKKyAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3R1bmUyZnMnLCAnLWwnLCByb290ZnNdKQorICAgIGZvciBsaW5lIGluIG91dHB1dC5zcGxpdCgnXG4nKToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGaWxlc3lzdGVtIFVVSUQ6Jyk6CisgICAgICAgICAgICB1dWlkID0gbGluZS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgYmIubm90ZSgnVVVJRCBvZiAlczogJXMnICUgKHJvb3RmcywgdXVpZCkpCisgICAgICAgICAgICByZXR1cm4gdXVpZAorICAgIGJiLmZhdGFsKCdDb3VsZCBub3QgZGV0ZXJtaW5lIGZpbGVzeXN0ZW0gVVVJRCBvZiAlcycgJSByb290ZnMpCisKKyMgUmVwbGFjZSB0aGUgc3BlY2lhbCA8PHV1aWQtb2Ytcm9vdGZzPj4gaW5zaWRlIGEgc3RyaW5nIChsaWtlIHRoZQorIyByb290PSBBUFBFTkQgc3RyaW5nIGluIGEgc3lzbGludXguY2ZnIG9yIGd1bW1pYm9vdCBlbnRyeSkgd2l0aCB0aGUKKyMgYWN0dWFsIFVVSUQgb2YgdGhlIHJvb3Rmcy4gRG9lcyBub3RoaW5nIGlmIHRoZSBzcGVjaWFsIHN0cmluZworIyBpcyBub3QgdXNlZC4KK2RlZiByZXBsYWNlX3Jvb3Rmc191dWlkKGQsIHN0cmluZyk6CisgICAgVVVJRF9QTEFDRUhPTERFUiA9ICc8PHV1aWQtb2Ytcm9vdGZzPj4nCisgICAgaWYgVVVJRF9QTEFDRUhPTERFUiBpbiBzdHJpbmc6CisgICAgICAgIHV1aWQgPSBnZXRfcm9vdGZzX3V1aWQoZCkKKyAgICAgICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoVVVJRF9QTEFDRUhPTERFUiwgdXVpZCkKKyAgICByZXR1cm4gc3RyaW5nCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9nY29uZi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YWZhNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ2NvbmYuYmJjbGFzcwpAQCAtMCwwICsxLDcwIEBACitERVBFTkRTICs9ICJnY29uZiBnY29uZi1uYXRpdmUiCisKKyMgVGhlc2UgYXJlIGZvciB3aGVuIGdjb25mdG9vbCBpcyB1c2VkIG5hdGl2ZWx5IGFuZCB0aGUgcHJlZml4IGlzbid0IG5lY2Vzc2FyaWx5CisjIHRoZSBzeXNyb290LiAgVE9ETzogcmVwbGljYXRlIHRoZSBwb3N0aW5zdCBsb2dpYyBmb3IgLW5hdGl2ZSBwYWNrYWdlcyBnb2luZworIyBpbnRvIHN5c3Jvb3QgYXMgdGhleSB3b24ndCBiZSBydW5uaW5nIHRoZWlyIG93biBpbnN0YWxsLXRpbWUgc2NoZW1hCisjIHJlZ2lzdHJhdGlvbiAoZGlzYWJsZWQgYmVsb3cpIG5vciB0aGUgcG9zdGluc3Qgc2NyaXB0IChhcyB0aGV5IGRvbid0IGhhcHBlbikuCitleHBvcnQgR0NPTkZfU0NIRU1BX0lOU1RBTExfU09VUkNFID0gInhtbDptZXJnZWQ6JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzeXNjb25mZGlyfS9nY29uZi9nY29uZi54bWwuZGVmYXVsdHMiCitleHBvcnQgR0NPTkZfQkFDS0VORF9ESVIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L0dDb25mLzIiCisKKyMgRGlzYWJsZSBpbnN0YWxsLXRpbWUgc2NoZW1hIHJlZ2lzdHJhdGlvbiBhcyB3ZSdyZSBhIHBhY2thZ2luZyBzeXN0ZW0gc28gdGhpcworIyBoYXBwZW5zIGluIHRoZSBwb3N0aW5zdCBzY3JpcHQsIG5vdCBhdCBpbnN0YWxsIHRpbWUuICBTZXQgYm90aCB0aGUgY29uZmlndXJlCisjIHNjcmlwdCBvcHRpb24gYW5kIHRoZSB0cmFkaXRpb25hbCBlbnZpb25tZW50IHZhcmlhYmxlIGp1c3QgdG8gbWFrZSBzdXJlLgorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtc2NoZW1hcy1pbnN0YWxsIgorZXhwb3J0IEdDT05GX0RJU0FCTEVfTUFLRUZJTEVfU0NIRU1BX0lOU1RBTEwgPSAiMSIKKworZ2NvbmZfcG9zdGluc3QoKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJZXhwb3J0IEdDT05GX0NPTkZJR19TT1VSQ0U9InhtbDo6JEQke3N5c2NvbmZkaXJ9L2djb25mL2djb25mLnhtbC5kZWZhdWx0cyIKK2Vsc2UKKwlleHBvcnQgR0NPTkZfQ09ORklHX1NPVVJDRT1gZ2NvbmZ0b29sLTIgLS1nZXQtZGVmYXVsdC1zb3VyY2VgCitmaQorCitTQ0hFTUFfTE9DQVRJT049JEQvZXRjL2djb25mL3NjaGVtYXMKK2ZvciBTQ0hFTUEgaW4gJHtTQ0hFTUFfRklMRVN9OyBkbworCWlmIFsgLWUgJFNDSEVNQV9MT0NBVElPTi8kU0NIRU1BIF07IHRoZW4KKwkJSE9NRT0kRC9yb290IGdjb25mdG9vbC0yIFwKKwkJCS0tbWFrZWZpbGUtaW5zdGFsbC1ydWxlICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSA+IC9kZXYvbnVsbAorCWZpCitkb25lCit9CisKK2djb25mX3ByZXJtKCkgeworU0NIRU1BX0xPQ0FUSU9OPS9ldGMvZ2NvbmYvc2NoZW1hcworZm9yIFNDSEVNQSBpbiAke1NDSEVNQV9GSUxFU307IGRvCisJaWYgWyAtZSAkU0NIRU1BX0xPQ0FUSU9OLyRTQ0hFTUEgXTsgdGhlbgorCQlIT01FPS9yb290IEdDT05GX0NPTkZJR19TT1VSQ0U9YGdjb25mdG9vbC0yIC0tZ2V0LWRlZmF1bHQtc291cmNlYCBcCisJCQlnY29uZnRvb2wtMiBcCisJCQktLW1ha2VmaWxlLXVuaW5zdGFsbC1ydWxlICRTQ0hFTUFfTE9DQVRJT04vJFNDSEVNQSA+IC9kZXYvbnVsbAorCWZpCitkb25lCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQgKCkgeworICAgIGltcG9ydCByZQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSAgZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIAorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHNjaGVtYV9kaXIgPSAnJXMvJXMvZXRjL2djb25mL3NjaGVtYXMnICUgKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgc2NoZW1hcyA9IFtdCisgICAgICAgIHNjaGVtYV9yZSA9IHJlLmNvbXBpbGUoIi4qXC5zY2hlbWFzJCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNjaGVtYV9kaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihzY2hlbWFfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBzY2hlbWFfcmUubWF0Y2goZik6CisgICAgICAgICAgICAgICAgICAgIHNjaGVtYXMuYXBwZW5kKGYpCisgICAgICAgIGlmIHNjaGVtYXMgIT0gW106CisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ2NvbmYgcG9zdGluc3QgYW5kIHByZXJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorICAgICAgICAgICAgZC5zZXRWYXIoJ1NDSEVNQV9GSUxFUycsICIgIi5qb2luKHNjaGVtYXMpKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdnY29uZl9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisgICAgICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHByZXJtOgorICAgICAgICAgICAgICAgIHByZXJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcHJlcm0gKz0gZC5nZXRWYXIoJ2djb25mX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSREVQRU5EU18lcyIgJSBwa2csICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdnY29uZicpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ2V0dGV4dC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dldHRleHQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2I4OWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2dldHRleHQuYmJjbGFzcwpAQCAtMCwwICsxLDE5IEBACitkZWYgZ2V0dGV4dF9kZXBlbmRlbmNpZXMoZCk6CisgICAgaWYgZC5nZXRWYXIoJ0lOSElCSVRfREVGQVVMVF9ERVBTJywgVHJ1ZSkgYW5kIG5vdCBvZS51dGlscy5pbmhlcml0cyhkLCAnY3Jvc3MtY2FuYWRpYW4nKToKKyAgICAgICAgcmV0dXJuICIiCisgICAgaWYgZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSA9PSAnbm8nOgorICAgICAgICByZXR1cm4gImdldHRleHQtbWluaW1hbC1uYXRpdmUiCisgICAgcmV0dXJuIGQuZ2V0VmFyKCdERVBFTkRTX0dFVFRFWFQnLCBGYWxzZSkKKworZGVmIGdldHRleHRfb2Vjb25mKGQpOgorICAgIGlmIGQuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgPT0gJ25vJzoKKyAgICAgICAgcmV0dXJuICctLWRpc2FibGUtbmxzJworICAgICMgUmVtb3ZlIHRoZSBOTFMgYml0cyBpZiBVU0VfTkxTIGlzIG5vIG9yIElOSElCSVRfREVGQVVMVF9ERVBTIGlzIHNldAorICAgIGlmIGQuZ2V0VmFyKCdJTkhJQklUX0RFRkFVTFRfREVQUycsIFRydWUpIGFuZCBub3Qgb2UudXRpbHMuaW5oZXJpdHMoZCwgJ2Nyb3NzLWNhbmFkaWFuJyk6CisgICAgICAgIHJldHVybiAnLS1kaXNhYmxlLW5scycKKyAgICByZXR1cm4gIi0tZW5hYmxlLW5scyIKKworREVQRU5EU19HRVRURVhUID8/PSAidmlydHVhbC9nZXR0ZXh0IGdldHRleHQtbmF0aXZlIgorCitCQVNFREVQRU5EUyA9KyAiJHtAZ2V0dGV4dF9kZXBlbmRlbmNpZXMoZCl9IgorRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgJHtAZ2V0dGV4dF9vZWNvbmYoZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ25vbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjIwMmJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2dub21lLmJiY2xhc3MKQEAgLTAsMCArMSBAQAoraW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWljb24tY2FjaGUgZ2NvbmYgbWltZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dub21lYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmJhNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ25vbWViYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwzMyBAQAorZGVmIGdub21lX3ZlcmRpcih2KToKKyAgICByZXR1cm4gb2UudXRpbHMudHJpbV92ZXJzaW9uKHYsIDIpCisKK0dOT01FX0NPTVBSRVNTX1RZUEUgPz0gInh6IgorU0VDVElPTiA/PSAieDExL2dub21lIgorR05PTUVCTiA/PSAiJHtCUE59IgorU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vJHtHTk9NRUJOfS8ke0Bnbm9tZV92ZXJkaXIoIiR7UFZ9Iil9LyR7R05PTUVCTn0tJHtQVn0udGFyLiR7R05PTUVfQ09NUFJFU1NfVFlQRX07bmFtZT1hcmNoaXZlIgorCitERVBFTkRTICs9ICJnbm9tZS1jb21tb24tbmF0aXZlIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hcHBsaWNhdGlvbi1yZWdpc3RyeSAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWltZS1pbmZvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21pbWUvcGFja2FnZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWltZS9hcHBsaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbm9tZS0yLjAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0KiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9HQ29uZiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIFwKKyIKKworRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RldmhlbHAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL3Njcm9sbGtlZXBlci8qCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Njcm9sbGtlZXBlci8qCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyouY2FjaGUKK30KKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2dydWItZWZpLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkYzJiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ncnViLWVmaS5iYmNsYXNzCkBAIC0wLDAgKzEsMTQ1IEBACisjIGdydWItZWZpLmJiY2xhc3MKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworIyBQcm92aWRlIGdydWItZWZpIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYnVpbGRpbmcgYm9vdGFibGUgaW1hZ2VzLgorCisjIEV4dGVybmFsIHZhcmlhYmxlcworIyAke0lOSVRSRH0gLSBpbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdHJkIChvcHRpb25hbCkKKyMgJHtST09URlN9IC0gaW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0gKG9wdGlvbmFsKQorIyAke0dSVUJfR0ZYU0VSSUFMfSAtIHNldCB0aGlzIHRvIDEgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUKKyMgJHtMQUJFTFN9IC0gYSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlnCisjICR7QVBQRU5EfSAtIGFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2ggbGFiZWwKKyMgJHtHUlVCX09QVFN9IC0gYWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgY29uZmlnLCAnOycgZGVsaW1pdGVkICMgKG9wdGlvbmFsKQorIyAke0dSVUJfVElNRU9VVH0gLSB0aW1lb3V0IGJlZm9yZSBleGVjdXRpbmcgdGhlIGRlYXVsdCBsYWJlbCAob3B0aW9uYWwpCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3J1Yi1lZmk6ZG9fZGVwbG95IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3J1Yi1lZmk6ZG9fZGVwbG95IgorCitHUlVCX1NFUklBTCA/PSAiY29uc29sZT10dHlTMCwxMTUyMDAiCitHUlVCQ0ZHID0gIiR7U30vZ3J1Yi5jZmciCitHUlVCX1RJTUVPVVQgPz0gIjEwIgorI0ZJWE1FOiBidWlsZCB0aGlzIGZyb20gdGhlIG1hY2hpbmUgY29uZmlnCitHUlVCX09QVFMgPz0gInNlcmlhbCAtLXVuaXQ9MCAtLXNwZWVkPTExNTIwMCAtLXdvcmQ9OCAtLXBhcml0eT1ubyAtLXN0b3A9MSIKKworRUZJRElSID0gIi9FRkkvQk9PVCIKKworIyBOZWVkIFVVSUQgdXRpbGl0eSBjb2RlLgoraW5oZXJpdCBmcy11dWlkCisKK2VmaV9wb3B1bGF0ZSgpIHsKKwkjIERFU1QgbXVzdCBiZSB0aGUgcm9vdCBvZiB0aGUgaW1hZ2Ugc28gdGhhdCBFRklESVIgaXMgbm90CisJIyBuZXN0ZWQgdW5kZXIgYSB0b3AgbGV2ZWwgZGlyZWN0b3J5LgorCURFU1Q9JDEKKworCWluc3RhbGwgLWQgJHtERVNUfSR7RUZJRElSfQorCisJR1JVQl9JTUFHRT0iYm9vdGlhMzIuZWZpIgorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07IHRoZW4KKwkJR1JVQl9JTUFHRT0iYm9vdHg2NC5lZmkiCisJZmkKKwlpbnN0YWxsIC1tIDA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0dSVUJfSU1BR0V9ICR7REVTVH0ke0VGSURJUn0KKworCWluc3RhbGwgLW0gMDY0NCAke0dSVUJDRkd9ICR7REVTVH0ke0VGSURJUn0vZ3J1Yi5jZmcKK30KKworZWZpX2lzb19wb3B1bGF0ZSgpIHsKKwlpc29fZGlyPSQxCisJZWZpX3BvcHVsYXRlICRpc29fZGlyCisJIyBCdWlsZCBhIEVGSSBkaXJlY3RvcnkgdG8gY3JlYXRlIGVmaS5pbWcKKwlta2RpciAtcCAke0VGSUlNR0RJUn0vJHtFRklESVJ9CisJY3AgJGlzb19kaXIvJHtFRklESVJ9LyogJHtFRklJTUdESVJ9JHtFRklESVJ9CisJY3AgJGlzb19kaXIvdm1saW51eiAke0VGSUlNR0RJUn0KKwllY2hvICIke0dSVUJfSU1BR0V9IiA+ICR7RUZJSU1HRElSfS9zdGFydHVwLm5zaAorCWlmIFsgLWYgIiRpc29fZGlyL2luaXRyZCIgXSA7IHRoZW4KKwkJY3AgJGlzb19kaXIvaW5pdHJkICR7RUZJSU1HRElSfQorCWZpCit9CisKK2VmaV9oZGRpbWdfcG9wdWxhdGUoKSB7CisJZWZpX3BvcHVsYXRlICQxCit9CisKK3B5dGhvbiBidWlsZF9lZmlfY2ZnKCkgeworICAgIGltcG9ydCBzeXMKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXI6CisgICAgICAgIGJiLmVycm9yKCJXT1JLRElSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgZ2Z4c2VyaWFsID0gZC5nZXRWYXIoJ0dSVUJfR0ZYU0VSSUFMJywgVHJ1ZSkgb3IgIiIKKworICAgIGxhYmVscyA9IGQuZ2V0VmFyKCdMQUJFTFMnLCBUcnVlKQorICAgIGlmIG5vdCBsYWJlbHM6CisgICAgICAgIGJiLmRlYnVnKDEsICJMQUJFTFMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGxhYmVscyA9PSBbXToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIGxhYmVscywgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgY2ZpbGUgPSBkLmdldFZhcignR1JVQkNGRycsIFRydWUpCisgICAgaWYgbm90IGNmaWxlOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdVbmFibGUgdG8gcmVhZCBHUlVCQ0ZHJykKKworICAgIHRyeToKKyAgICAgICAgIGNmZ2ZpbGUgPSBmaWxlKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKworICAgIG9wdHMgPSBkLmdldFZhcignR1JVQl9PUFRTJywgVHJ1ZSkKKyAgICBpZiBvcHRzOgorICAgICAgICBmb3Igb3B0IGluIG9wdHMuc3BsaXQoJzsnKToKKyAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzXG4nICUgb3B0KQorCisgICAgY2ZnZmlsZS53cml0ZSgnZGVmYXVsdD0lc1xuJyAlIChsYWJlbHMuc3BsaXQoKVswXSkpCisKKyAgICB0aW1lb3V0ID0gZC5nZXRWYXIoJ0dSVUJfVElNRU9VVCcsIFRydWUpCisgICAgaWYgdGltZW91dDoKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dD0lc1xuJyAlIHRpbWVvdXQpCisgICAgZWxzZToKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgndGltZW91dD01MFxuJykKKworICAgIGlmIGdmeHNlcmlhbCA9PSAiMSI6CisgICAgICAgIGJ0eXBlcyA9IFsgWyAiIGdyYXBoaWNzIGNvbnNvbGUiLCAiIiBdLAorICAgICAgICAgICAgWyAiIHNlcmlhbCBjb25zb2xlIiwgZC5nZXRWYXIoJ0dSVUJfU0VSSUFMJywgVHJ1ZSkgb3IgIiIgXSBdCisgICAgZWxzZToKKyAgICAgICAgYnR5cGVzID0gWyBbICIiLCAiIiBdIF0KKworICAgIGZvciBsYWJlbCBpbiBsYWJlbHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKworICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKQorICAgICAgICBpZiBub3Qgb3ZlcnJpZGVzOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgnT1ZFUlJJREVTIG5vdCBkZWZpbmVkJykKKworICAgICAgICBmb3IgYnR5cGUgaW4gYnR5cGVzOgorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgbGFiZWwgKyAnOicgKyBvdmVycmlkZXMpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnXG5tZW51ZW50cnkgXCclcyVzXCd7XG4nICUgKGxhYmVsLCBidHlwZVswXSkpCisgICAgICAgICAgICBsYiA9IGxhYmVsCisgICAgICAgICAgICBpZiBsYWJlbCA9PSAiaW5zdGFsbCI6CisgICAgICAgICAgICAgICAgbGIgPSAiaW5zdGFsbC1lZmkiCisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdsaW51eCAvdm1saW51eiBMQUJFTD0lcycgJSAobGIpKQorCisgICAgICAgICAgICBhcHBlbmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdBUFBFTkQnLCBUcnVlKQorICAgICAgICAgICAgaW5pdHJkID0gbG9jYWxkYXRhLmdldFZhcignSU5JVFJEJywgVHJ1ZSkKKworICAgICAgICAgICAgaWYgYXBwZW5kOgorICAgICAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzJyAlIChhcHBlbmQpKQorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnICVzJyAlIGJ0eXBlWzFdKQorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnXG4nKQorCisgICAgICAgICAgICBpZiBpbml0cmQ6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnaW5pdHJkIC9pbml0cmQnKQorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnXG59XG4nKQorCisgICAgY2ZnZmlsZS5jbG9zZSgpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvZ3NldHRpbmdzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjNWFiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9nc2V0dGluZ3MuYmJjbGFzcwpAQCAtMCwwICsxLDM3IEBACisjIEEgYmJjbGFzcyB0byBoYW5kbGUgaW5zdGFsbGVkIEdTZXR0aW5ncyAoZ2xpYikgc2NoZW1hcywgdXBkYXRlZCB0aGUgY29tcGlsZWQKKyMgZm9ybSBvbiBwYWNrYWdlIGluc3RhbGwgYW5kIHJlbW92ZS4KKyMKKyMgVGhlIGNvbXBpbGVkIHNjaGVtYXMgYXJlIHBsYXRmb3JtLWFnbm9zdGljLCBzbyB3ZSBjYW4gZGVwZW5kIG9uCisjIGdsaWItMi4wLW5hdGl2ZSBmb3IgdGhlIG5hdGl2ZSB0b29sIGFuZCBydW4gdGhlIHBvc3RpbnN0IHNjcmlwdCB3aGVuIHRoZQorIyByb290ZnMgYnVpbGRzIHRvIHNhdmUgYSBsaXR0bGUgdGltZSBvbiBmaXJzdCBib290LgorCisjIFRPRE8gdXNlIGEgdHJpZ2dlciBzbyB0aGF0IHRoaXMgcnVucyBvbmNlIHBlciBwYWNrYWdlIG9wZXJhdGlvbiBydW4KKworREVQRU5EUyArPSAiZ2xpYi0yLjAtbmF0aXZlIgorCitSREVQRU5EU18ke1BOfSArPSAiZ2xpYi0yLjAtdXRpbHMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2dsaWItMi4wL3NjaGVtYXMiCisKK2dzZXR0aW5nc19wb3N0aW5zdHJtICgpIHsKKwlnbGliLWNvbXBpbGUtc2NoZW1hcyAkRCR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGJiLm5vdGUoImFkZGluZyBnc2V0dGluZ3MgcG9zdGluc3Qgc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdnc2V0dGluZ3NfcG9zdGluc3RybScsIFRydWUpCisgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgYmIubm90ZSgiYWRkaW5nIGdzZXR0aW5ncyBwb3N0cm0gc2NyaXB0cyB0byAlcyIgJSBwa2cpCisKKyAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdwa2dfcG9zdHJtJywgVHJ1ZSkKKyAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgcG9zdHJtICs9IGQuZ2V0VmFyKCdnc2V0dGluZ3NfcG9zdGluc3RybScsIFRydWUpCisgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3RrLWRvYy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzJmOThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d0ay1kb2MuYmJjbGFzcwpAQCAtMCwwICsxLDI1IEBACisjIEhlbHBlciBjbGFzcyB0byBwdWxsIGluIHRoZSByaWdodCBndGstZG9jIGRlcGVuZGVuY2llcyBhbmQgZGlzYWJsZQorIyBndGstZG9jLgorIworIyBMb25nLXRlcm0gaXQgd291bGQgYmUgZ3JlYXQgaWYgdGhpcyBjbGFzcyBjb3VsZCBiZSB0b2dnbGVkIGJldHdlZW4KKyMgZ3RrLWRvYy1zdHViLW5hdGl2ZSBhbmQgdGhlIHJlYWwgZ3RrLWRvYy1uYXRpdmUsIHdoaWNoIHdvdWxkIGVuYWJsZQorIyByZS1nZW5lcmF0aW9uIG9mIGRvY3VtZW50YXRpb24uICBGb3Igbm93LCB3ZSdsbCBtYWtlIGRvIHdpdGggdGhpcyB3aGljaAorIyBwYWNrYWdlcyB1cCBhbnkgZXhpc3RpbmcgZG9jdW1lbnRhdGlvbiAoc28gZnJvbSB0YXJiYWxsIGJ1aWxkcykuCisKKyMgVGhlIGRvY3VtZW50YXRpb24gZGlyZWN0b3J5LCB3aGVyZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgd2lsbCBiZSBjb3BpZWQuCisjIGd0a2RvY2l6ZSBoYXMgYSBkZWZhdWx0IG9mICIuIiBzbyB0byBoYW5kbGUgb3V0LW9mLXRyZWUgYnVpbGRzIHNldCB0aGlzIHRvICRTLgorR1RLRE9DX0RPQ0RJUiA/PSAiJHtTfSIKKworREVQRU5EU19hcHBlbmQgPSAiIGd0ay1kb2Mtc3R1Yi1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiXAorICAtLWRpc2FibGUtZ3RrLWRvYyBcCisgIC0tZGlzYWJsZS1ndGstZG9jLWh0bWwgXAorICAtLWRpc2FibGUtZ3RrLWRvYy1wZGYgXAorIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJKCBjZCAke1N9OyBndGtkb2NpemUgLS1kb2NkaXIgJHtHVEtET0NfRE9DRElSfSApCit9CisKK2luaGVyaXQgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ndGstaWNvbi1jYWNoZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzU4ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvZ3RrLWljb24tY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDYyIEBACitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yIgorCitERVBFTkRTICs9ICIke0BbJ2hpY29sb3ItaWNvbi10aGVtZScsICcnXVsnJHtCUE59JyA9PSAnaGljb2xvci1pY29uLXRoZW1lJ119IGd0ay1pY29uLXV0aWxzLW5hdGl2ZSIKKworZ3RrX2ljb25fY2FjaGVfcG9zdGluc3QoKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisJJElOVEVSQ0VQVF9ESVIvcG9zdGluc3RfaW50ZXJjZXB0IHVwZGF0ZV9pY29uX2NhY2hlICR7UEtHfSBtbHByZWZpeD0ke01MUFJFRklYfSBsaWJkaXI9JHtsaWJkaXJ9IFwKKwkJYmFzZV9saWJkaXI9JHtiYXNlX2xpYmRpcn0KK2Vsc2UKKworCSMgVXBkYXRlIHRoZSBwaXhidWYgbG9hZGVycyBpbiBjYXNlIHRoZXkgaGF2ZW4ndCBiZWVuIHJlZ2lzdGVyZWQgeWV0CisJR0RLX1BJWEJVRl9NT0RVTEVESVI9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLzIuMTAuMC9sb2FkZXJzIGdkay1waXhidWYtcXVlcnktbG9hZGVycyAtLXVwZGF0ZS1jYWNoZQorCisJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qIDsgZG8KKwkJaWYgWyAtZCAkaWNvbmRpciBdIDsgdGhlbgorCQkJZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC1mcXQgICRpY29uZGlyCisJCWZpCisJZG9uZQorZmkKK30KKworZ3RrX2ljb25fY2FjaGVfcG9zdHJtKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfaWNvbl9jYWNoZSAke1BLR30gbWxwcmVmaXg9JHtNTFBSRUZJWH0gbGliZGlyPSR7bGliZGlyfSBcCisJCWJhc2VfbGliZGlyPSR7YmFzZV9saWJkaXJ9CitlbHNlCisJZm9yIGljb25kaXIgaW4gL3Vzci9zaGFyZS9pY29ucy8qIDsgZG8KKwkJaWYgWyAtZCAkaWNvbmRpciBdIDsgdGhlbgorCQkJZ3RrLXVwZGF0ZS1pY29uLWNhY2hlIC1xdCAgJGljb25kaXIKKwkJZmkKKwlkb25lCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBpY29uX2RpciA9ICclcy8lcy8lcy9pY29ucycgJSAocGtnZGVzdCwgcGtnLCBkLmdldFZhcignZGF0YWRpcicsIFRydWUpKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoaWNvbl9kaXIpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBiYi5ub3RlKCJhZGRpbmcgaGljb2xvci1pY29uLXRoZW1lIGRlcGVuZGVuY3kgdG8gJXMiICUgcGtnKQorICAgICAgICByZGVwZW5kcyA9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICJoaWNvbG9yLWljb24tdGhlbWUiCisgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18lcycgJSBwa2csIHJkZXBlbmRzKQorICAgIAorICAgICAgICBiYi5ub3RlKCJhZGRpbmcgZ3RrLWljb24tY2FjaGUgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgCisgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignZ3RrX2ljb25fY2FjaGVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgcG9zdHJtID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwb3N0cm0gKz0gZC5nZXRWYXIoJ2d0a19pY29uX2NhY2hlX3Bvc3RybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgcG9zdHJtKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvZ3RrLWltbW9kdWxlcy1jYWNoZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2d0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTYzMTZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d0ay1pbW1vZHVsZXMtY2FjaGUuYmJjbGFzcwpAQCAtMCwwICsxLDgzIEBACisjIFRoaXMgY2xhc3Mgd2lsbCB1cGRhdGUgdGhlIGlucHV0bWV0aG9kIG1vZHVsZSBjYWNoZSBmb3IgdmlydHVhbCBrZXlib2FyZHMKKyMKKyMgVXNhZ2U6IFNldCBHVEtJTU1PRFVMRVNfUEFDS0FHRVMgdG8gdGhlIHBhY2thZ2VzIHRoYXQgbmVlZHMgdG8gdXBkYXRlIHRoZSBpbnB1dG1ldGhvZCBtb2R1bGVzCisKK0RFUEVORFMgPSsgInFlbXUtbmF0aXZlIgorCitpbmhlcml0IHFlbXUKKworR1RLSU1NT0RVTEVTX1BBQ0tBR0VTID89ICIke1BOfSIKKworZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RpbnN0KCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorICAgIGZvciBtYWpfdmVyIGluIDIgMzsgZG8KKyAgICAgICAgaWYgWyAteCAkRCR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAgXTsgdGhlbgorICAgICAgICAgICAgSU1GSUxFUz0kKGxzICREJHtsaWJkaXJ9L2d0ay0kbWFqX3Zlci4wLyovaW1tb2R1bGVzLyouc28pCisgICAgICAgICAgICAke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywgJyR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLSRtYWpfdmVyLjAnKX0gXAorICAgICAgICAgICAgICAgICRJTUZJTEVTID4gJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMgMj4vZGV2L251bGwgJiYKKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInM6JEQ6OiIgJEQvZXRjL2d0ay0kbWFqX3Zlci4wL2d0ay5pbW1vZHVsZXMKKworICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIGV4aXQgMQorICAgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgMAorZmkKK2lmIFsgISAteiBgd2hpY2ggZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjBgIF07IHRoZW4KKyAgICBndGstcXVlcnktaW1tb2R1bGVzLTIuMCA+IC9ldGMvZ3RrLTIuMC9ndGsuaW1tb2R1bGVzCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTMuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wID4gL2V0Yy9ndGstMy4wL2d0ay5pbW1vZHVsZXMKK2ZpCit9CisKK2d0a19pbW1vZHVsZV9jYWNoZV9wb3N0cm0oKSB7CitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisgICAgZm9yIG1hal92ZXIgaW4gMiAzOyBkbworICAgICAgICBpZiBbIC14ICREJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtJG1hal92ZXIuMCBdOyB0aGVuCisgICAgICAgICAgICBJTUZJTEVTPSQobHMgJEQke2xpYmRpcn0vZ3RrLSRtYWpfdmVyLjAvKi9pbW1vZHVsZXMvKi5zbykKKyAgICAgICAgICAgICR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiaW5kaXJ9L2d0ay1xdWVyeS1pbW1vZHVsZXMtJG1hal92ZXIuMCcpfSBcCisgICAgICAgICAgICAgICAgJElNRklMRVMgPiAkRC9ldGMvZ3RrLSRtYWpfdmVyLjAvZ3RrLmltbW9kdWxlcyAyPi9kZXYvbnVsbCAmJgorICAgICAgICAgICAgICAgIHNlZCAtaSAtZSAiczokRDo6IiAkRC9ldGMvZ3RrLSRtYWpfdmVyLjAvZ3RrLmltbW9kdWxlcworCisgICAgICAgICAgICBbICQ/IC1uZSAwIF0gJiYgZXhpdCAxCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgZXhpdCAwCitmaQoraWYgWyAhIC16IGB3aGljaCBndGstcXVlcnktaW1tb2R1bGVzLTIuMGAgXTsgdGhlbgorICAgIGd0ay1xdWVyeS1pbW1vZHVsZXMtMi4wID4gL2V0Yy9ndGstMi4wL2d0ay5pbW1vZHVsZXMKK2ZpCitpZiBbICEgLXogYHdoaWNoIGd0ay1xdWVyeS1pbW1vZHVsZXMtMy4wYCBdOyB0aGVuCisgICAgZ3RrLXF1ZXJ5LWltbW9kdWxlcy0zLjAgPiAvZXRjL2d0ay0zLjAvZ3RrLmltbW9kdWxlcworZmkKK30KKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX2FwcGVuZCAoKSB7CisgICAgZ3RraW1tb2R1bGVzX3BrZ3MgPSBkLmdldFZhcignR1RLSU1NT0RVTEVTX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgZm9yIHBrZyBpbiBndGtpbW1vZHVsZXNfcGtnczoKKyAgICAgICAgICAgIGJiLm5vdGUoImFkZGluZyBndGstaW1tb2R1bGUtY2FjaGUgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKworICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdndGtfaW1tb2R1bGVfY2FjaGVfcG9zdGluc3QnLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIHBvc3RpbnN0KQorCisgICAgICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignZ3RrX2ltbW9kdWxlX2NhY2hlX3Bvc3RybScsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIHBvc3RybSkKK30KKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIGd0a2ltbW9kdWxlc19jaGVjayA9IGQuZ2V0VmFyKCdHVEtJTU1PRFVMRVNfUEFDS0FHRVMnLCBGYWxzZSkKKyAgICAgICAgaWYgbm90IGd0a2ltbW9kdWxlc19jaGVjazoKKyAgICAgICAgICAgIGJiX2ZpbGVuYW1lID0gZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIkVSUk9SOiAlcyBpbmhlcml0cyBndGstaW1tb2R1bGVzLWNhY2hlIGJ1dCBkb2Vzbid0IHNldCBHVEtJTU1PRFVMRVNfUEFDS0FHRVMiICUgYmJfZmlsZW5hbWUpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ndW1taWJvb3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDljMDhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2d1bW1pYm9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMTE4IEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBndW1taWJvb3QuYmJjbGFzcyAtIGVxdWl2YWxlbnQgb2YgZ3J1Yi1lZmkuYmJjbGFzcworIyBTZXQgRUZJX1BST1ZJREVSID0gImd1bW1pYm9vdCIgdG8gdXNlIGd1bW1pYm9vdCBvbiB5b3VyIGxpdmUgaW1hZ2VzIGluc3RlYWQgb2YgZ3J1Yi1lZmkKKyMgKGltYWdlcyBidWlsdCBieSBib290aW1hZ2UuYmJjbGFzcyBvciBib290LWRpcmVjdGRpc2suYmJjbGFzcykKKworZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtNTFBSRUZJWH1ndW1taWJvb3Q6ZG9fZGVwbG95IgorZG9fYm9vdGRpcmVjdGRpc2tbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9Z3VtbWlib290OmRvX2RlcGxveSIKKworRUZJRElSID0gIi9FRkkvQk9PVCIKKworR1VNTUlCT09UX0NGRyA/PSAiJHtTfS9sb2FkZXIuY29uZiIKK0dVTU1JQk9PVF9FTlRSSUVTID89ICIiCitHVU1NSUJPT1RfVElNRU9VVCA/PSAiMTAiCisKKyMgTmVlZCBVVUlEIHV0aWxpdHkgY29kZS4KK2luaGVyaXQgZnMtdXVpZAorCitlZmlfcG9wdWxhdGUoKSB7CisgICAgICAgIERFU1Q9JDEKKworICAgICAgICBFRklfSU1BR0U9Imd1bW1pYm9vdGlhMzIuZWZpIgorICAgICAgICBERVNUX0VGSV9JTUFHRT0iYm9vdGlhMzIuZWZpIgorICAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdOyB0aGVuCisgICAgICAgICAgICBFRklfSU1BR0U9Imd1bW1pYm9vdHg2NC5lZmkiCisgICAgICAgICAgICBERVNUX0VGSV9JTUFHRT0iYm9vdHg2NC5lZmkiCisgICAgICAgIGZpCisKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFU1R9JHtFRklESVJ9CisgICAgICAgICMgZ3VtbWlib290IHJlcXVpcmVzIHRoZXNlIHBhdGhzIGZvciBjb25maWd1cmF0aW9uIGZpbGVzCisgICAgICAgICMgdGhleSBhcmUgbm90IGN1c3RvbWl6YWJsZSBzbyBubyBwb2ludCBpbiBuZXcgdmFycworICAgICAgICBpbnN0YWxsIC1kICR7REVTVH0vbG9hZGVyCisgICAgICAgIGluc3RhbGwgLWQgJHtERVNUfS9sb2FkZXIvZW50cmllcworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtERVBMT1lfRElSX0lNQUdFfS8ke0VGSV9JTUFHRX0gJHtERVNUfSR7RUZJRElSfS8ke0RFU1RfRUZJX0lNQUdFfQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtHVU1NSUJPT1RfQ0ZHfSAke0RFU1R9L2xvYWRlci9sb2FkZXIuY29uZgorICAgICAgICBmb3IgaSBpbiAke0dVTU1JQk9PVF9FTlRSSUVTfTsgZG8KKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke2l9ICR7REVTVH0vbG9hZGVyL2VudHJpZXMKKyAgICAgICAgZG9uZQorfQorCitlZmlfaXNvX3BvcHVsYXRlKCkgeworICAgICAgICBpc29fZGlyPSQxCisgICAgICAgIGVmaV9wb3B1bGF0ZSAkaXNvX2RpcgorICAgICAgICBta2RpciAtcCAke0VGSUlNR0RJUn0vJHtFRklESVJ9CisgICAgICAgIGNwICRpc29fZGlyLyR7RUZJRElSfS8qICR7RUZJSU1HRElSfSR7RUZJRElSfQorICAgICAgICBjcCAkaXNvX2Rpci92bWxpbnV6ICR7RUZJSU1HRElSfQorICAgICAgICBlY2hvICIke0RFU1RfRUZJX0lNQUdFfSIgPiAke0VGSUlNR0RJUn0vc3RhcnR1cC5uc2gKKyAgICAgICAgaWYgWyAtZiAiJGlzb19kaXIvaW5pdHJkIiBdIDsgdGhlbgorICAgICAgICAgICAgY3AgJGlzb19kaXIvaW5pdHJkICR7RUZJSU1HRElSfQorICAgICAgICBmaQorfQorCitlZmlfaGRkaW1nX3BvcHVsYXRlKCkgeworICAgICAgICBlZmlfcG9wdWxhdGUgJDEKK30KKworcHl0aG9uIGJ1aWxkX2VmaV9jZmcoKSB7CisgICAgcyA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICBsYWJlbHMgPSBkLmdldFZhcignTEFCRUxTJywgVHJ1ZSkKKyAgICBpZiBub3QgbGFiZWxzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTEFCRUxTIG5vdCBkZWZpbmVkLCBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ0dVTU1JQk9PVF9DRkcnLCBUcnVlKQorICAgIHRyeToKKyAgICAgICAgIGNmZ2ZpbGUgPSBvcGVuKGNmaWxlLCAndycpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLmZ1bmNGYWlsZWQoJ1VuYWJsZSB0byBvcGVuICVzJyAlIChjZmlsZSkpCisKKyAgICBjZmdmaWxlLndyaXRlKCcjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBPRVxuJykKKyAgICBjZmdmaWxlLndyaXRlKCdkZWZhdWx0ICVzXG4nICUgKGxhYmVscy5zcGxpdCgpWzBdKSkKKyAgICB0aW1lb3V0ID0gZC5nZXRWYXIoJ0dVTU1JQk9PVF9USU1FT1VUJywgVHJ1ZSkKKyAgICBpZiB0aW1lb3V0OgorICAgICAgICBjZmdmaWxlLndyaXRlKCd0aW1lb3V0ICVzXG4nICUgdGltZW91dCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCd0aW1lb3V0IDEwXG4nKQorICAgIGNmZ2ZpbGUuY2xvc2UoKQorCisgICAgZm9yIGxhYmVsIGluIGxhYmVscy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQorCisgICAgICAgIGVudHJ5ZmlsZSA9ICIlcy8lcy5jb25mIiAlIChzLCBsYWJlbCkKKyAgICAgICAgZC5hcHBlbmRWYXIoIkdVTU1JQk9PVF9FTlRSSUVTIiwgIiAiICsgZW50cnlmaWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbnRyeWNmZyA9IG9wZW4oZW50cnlmaWxlLCAidyIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGVudHJ5ZmlsZSkpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBlbnRyeWNmZy53cml0ZSgndGl0bGUgJXNcbicgJSBsYWJlbCkKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ2xpbnV4IC92bWxpbnV6XG4nKQorCisgICAgICAgIGFwcGVuZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0FQUEVORCcsIFRydWUpCisgICAgICAgIGluaXRyZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0lOSVRSRCcsIFRydWUpCisKKyAgICAgICAgaWYgaW5pdHJkOgorICAgICAgICAgICAgZW50cnljZmcud3JpdGUoJ2luaXRyZCAvaW5pdHJkXG4nKQorICAgICAgICBsYiA9IGxhYmVsCisgICAgICAgIGlmIGxhYmVsID09ICJpbnN0YWxsIjoKKyAgICAgICAgICAgIGxiID0gImluc3RhbGwtZWZpIgorICAgICAgICBlbnRyeWNmZy53cml0ZSgnb3B0aW9ucyBMQUJFTD0lcyAnICUgbGIpCisgICAgICAgIGlmIGFwcGVuZDoKKyAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgZW50cnljZmcud3JpdGUoJyVzJyAlIGFwcGVuZCkKKyAgICAgICAgZW50cnljZmcud3JpdGUoJ1xuJykKKyAgICAgICAgZW50cnljZmcuY2xvc2UoKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2d6aXBuYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9nemlwbmF0aXZlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2Y2JiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9nemlwbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw1IEBACitFWFRSQU5BVElWRVBBVEggKz0gInBpZ3otbmF0aXZlIGd6aXAtbmF0aXZlIgorREVQRU5EUyArPSAiZ3ppcC1uYXRpdmUiCisKKyMgdGFyIG1heSBnZXQgcnVuIGJ5IGRvX3VucGFjayBvciBkb19wb3B1bGF0ZV9saWMgd2hpY2ggY291bGQgY2FsbCBnemlwCitkb191bnBhY2tbZGVwZW5kc10gKz0gImd6aXAtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pY2VjYy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYjhiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaWNlY2MuYmJjbGFzcwpAQCAtMCwwICsxLDMzMyBAQAorIyBJY2VDcmVhbSBkaXN0cmlidXRlZCBjb21waWxpbmcgc3VwcG9ydAorIworIyBTdGFnZXMgZGlyZWN0b3JpZXMgd2l0aCBzeW1saW5rcyBmcm9tIGdjYy9nKysgdG8gaWNlY2MsIGZvciBib3RoCisjIG5hdGl2ZSBhbmQgY3Jvc3MgY29tcGlsZXJzLiBEZXBlbmRpbmcgb24gZWFjaCBjb25maWd1cmUgb3IgY29tcGlsZSwKKyMgdGhlIGRpcmVjdG9yaWVzIGFyZSBhZGRlZCBhdCB0aGUgaGVhZCBvZiB0aGUgUEFUSCBsaXN0IGFuZCBJQ0VDQ19DWFgKKyMgYW5kIElDRUNfQ0MgYXJlIHNldC4KKyMKKyMgRm9yIHRoZSBjcm9zcyBjb21waWxlciwgY3JlYXRlcyBhIHRhci5neiBvZiBvdXIgdG9vbGNoYWluIGFuZCBzZXRzCisjIElDRUNDX1ZFUlNJT04gYWNjb3JkaW5nbHkuCisjCisjIFRoZSBjbGFzcyBub3cgaGFuZGxlcyBhbGwgMyBkaWZmZXJlbnQgY29tcGlsZSAnc3RhZ2VzJyAoaS5lIG5hdGl2ZSAsY3Jvc3Mta2VybmVsIGFuZCB0YXJnZXQpIGNyZWF0aW5nIHRoZQorIyBuZWNlc3NhcnkgZW52aXJvbm1lbnQgdGFyLmd6IGZpbGUgdG8gYmUgdXNlZCBieSB0aGUgcmVtb3RlIG1hY2hpbmVzLgorIyBJdCBhbHNvIHN1cHBvcnRzIG1ldGEtdG9vbGNoYWluIGdlbmVyYXRpb24KKyMKKyMgSWYgSUNFQ0NfUEFUSCBpcyBub3Qgc2V0IGluIGxvY2FsLmNvbmYgdGhlbiB0aGUgY2xhc3Mgd2lsbCB0cnkgdG8gbG9jYXRlIGl0IHVzaW5nICdiYi51dGlscy53aGljaCcKKyMgYnV0IG5vdGhpbmcgaXMgc3VyZSA7KQorIworIyBJZiBJQ0VDQ19FTlZfRVhFQyBpcyBzZXQgaW4gbG9jYWwuY29uZiwgdGhlbiBpdCBzaG91bGQgcG9pbnQgdG8gdGhlIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisjIG9yIHRoZSBkZWZhdWx0IG9uZSBwcm92aWRlZCBieSBpY2VjYy1jcmVhdGUtZW52LmJiIHdpbGwgYmUgdXNlZAorIyAoTk9URSB0aGF0IHRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBzY3JpcHQgbmVlZCBpdCBhbmQgKm5vdCB0aGUgb25lIHRoYXQgY29tZXMgd2l0aCBpY2VjYyoKKyMKKyMgVXNlciBjYW4gc3BlY2lmeSBpZiBzcGVjaWZpYyBwYWNrYWdlcyBvciBwYWNrYWdlcyBiZWxvbmdpbmcgdG8gY2xhc3Mgc2hvdWxkIG5vdCB1c2UgaWNlY2MgdG8gZGlzdHJpYnV0ZQorIyBjb21waWxlIGpvYnMgdG8gcmVtb3RlIG1hY2hpbmVzLCBidXQgaGFuZGxlZCBsb2NhbGx5LCBieSBkZWZpbmluZyBJQ0VDQ19VU0VSX0NMQVNTX0JMIGFuZCBJQ0VDQ19VU0VSX1BBQ0tBR0VfQkwKKyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGluIGxvY2FsLmNvbmYuIEluIGFkZGl0aW9uIHRoZSB1c2VyIGNhbiBmb3JjZSB0byBlbmFibGUgaWNlY2MgZm9yIHBhY2thZ2VzCisjIHdoaWNoIHNldCBhbiBlbXB0eSBQQVJBTExFTF9NQUtFIHZhcmlhYmxlIGJ5IGRlZmluaW5nIElDRUNDX1VTRVJfUEFDS0FHRV9XTC4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjRXJyb3IgY2hlY2tpbmcgaXMga2VwdCB0byBtaW5pbXVtIHNvIGRvdWJsZSBjaGVjayBhbnkgcGFyYW1ldGVycyB5b3UgcGFzcyB0byB0aGUgY2xhc3MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQkJfSEFTSEJBU0VfV0hJVEVMSVNUICs9ICJJQ0VDQ19QQVJBTExFTF9NQUtFIElDRUNDX0RJU0FCTEVEIElDRUNDX1VTRVJfUEFDS0FHRV9CTCBJQ0VDQ19VU0VSX0NMQVNTX0JMIElDRUNDX1VTRVJfUEFDS0FHRV9XTCBJQ0VDQ19QQVRIIElDRUNDX0VOVl9FWEVDIgorCitJQ0VDQ19FTlZfRVhFQyA/PSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2ljZWNjLWNyZWF0ZS1lbnYiCisKK2RlZiBpY2VjY19kZXBfcHJlcGVuZChkKToKKyAgICAjIElOSElCSVRfREVGQVVMVF9ERVBTIGRvZXNuJ3QgYXBwbHkgdG8gdGhlIHBhdGNoIGNvbW1hbmQuICBXaGV0aGVyIG9yICBub3QKKyAgICAjIHdlIG5lZWQgdGhhdCBidWlsdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBhdGNoIGZ1bmN0aW9uIC8gY2xhc3MsIG5vdAorICAgICMgdGhlIGFwcGxpY2F0aW9uLgorICAgIGlmIG5vdCBkLmdldFZhcignSU5ISUJJVF9ERUZBVUxUX0RFUFMnLCBGYWxzZSk6CisgICAgICAgIHJldHVybiAiaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUiCisgICAgcmV0dXJuICIiCisKK0RFUEVORFNfcHJlcGVuZCArPSAiJHtAaWNlY2NfZGVwX3ByZXBlbmQoZCl9ICIKKworZGVmIGdldF9jcm9zc19rZXJuZWxfY2MoYmIsZCk6CisgICAga2VybmVsX2NjID0gZC5nZXRWYXIoJ0tFUk5FTF9DQycsIEZhbHNlKQorCisgICAgIyBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBieSB0aGUgc2hlbGwgaWYgbmVjZXNzYXJ5CisgICAgaWYgJ2AnIGluIGtlcm5lbF9jYyBvciAnJCgnIGluIGtlcm5lbF9jYzoKKyAgICAgICAga2VybmVsX2NjID0gb3MucG9wZW4oImVjaG8gJXMiICUga2VybmVsX2NjKS5yZWFkKClbOi0xXQorCisgICAga2VybmVsX2NjID0gZC5leHBhbmQoa2VybmVsX2NjKQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5yZXBsYWNlKCdjY2FjaGUnLCAnJykuc3RyaXAoKQorICAgIGtlcm5lbF9jYyA9IGtlcm5lbF9jYy5zcGxpdCgnICcpWzBdCisgICAga2VybmVsX2NjID0ga2VybmVsX2NjLnN0cmlwKCkKKyAgICByZXR1cm4ga2VybmVsX2NjCisKK2RlZiBnZXRfaWNlY2MoZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCdJQ0VDQ19QQVRIJywgRmFsc2UpIG9yIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCAiaWNlY2MiKQorCitkZWYgY3JlYXRlX3BhdGgoY29tcGlsZXJzLCBiYiwgZCk6CisgICAgIiIiCisgICAgQ3JlYXRlIFN5bWxpbmtzIGZvciB0aGUgaWNlY2MgaW4gdGhlIHN0YWdpbmcgZGlyZWN0b3J5CisgICAgIiIiCisgICAgc3RhZ2luZyA9IG9zLnBhdGguam9pbihkLmV4cGFuZCgnJHtTVEFHSU5HX0JJTkRJUn0nKSwgImljZSIpCisgICAgaWYgaWNjX2lzX2tlcm5lbChiYiwgZCk6CisgICAgICAgIHN0YWdpbmcgKz0gIi1rZXJuZWwiCisKKyAgICAjY2hlY2sgaWYgdGhlIGljZWNjIHBhdGggaXMgc2V0IGJ5IHRoZSB1c2VyCisgICAgaWNlY2MgPSBnZXRfaWNlY2MoZCkKKworICAgICMgQ3JlYXRlIHRoZSBkaXIgaWYgbmVjZXNzYXJ5CisgICAgdHJ5OgorICAgICAgICBvcy5zdGF0KHN0YWdpbmcpCisgICAgZXhjZXB0OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzdGFnaW5nKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBmb3IgY29tcGlsZXIgaW4gY29tcGlsZXJzOgorICAgICAgICBnY2NfcGF0aCA9IG9zLnBhdGguam9pbihzdGFnaW5nLCBjb21waWxlcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Muc3RhdChnY2NfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoaWNlY2MsIGdjY19wYXRoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIHJldHVybiBzdGFnaW5nCisKK2RlZiB1c2VfaWNjKGJiLGQpOgorICAgIGlmIGQuZ2V0VmFyKCdJQ0VDQ19ESVNBQkxFRCcsIEZhbHNlKSA9PSAiMSI6CisgICAgICAgICMgZG9uJ3QgZXZlbiB0cnkgaXQsIHdoZW4gZXhwbGljaXRseSBkaXNhYmxlZAorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgIyBhbGxhcmNoIHJlY2lwZXMgZG9uJ3QgdXNlIGNvbXBpbGVyCisgICAgaWYgaWNjX2lzX2FsbGFyY2goYmIsIGQpOgorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgc3lzdGVtX2NsYXNzX2JsYWNrbGlzdCA9IFtdCisgICAgdXNlcl9jbGFzc19ibGFja2xpc3QgPSAoZC5nZXRWYXIoJ0lDRUNDX1VTRVJfQ0xBU1NfQkwnLCBGYWxzZSkgb3IgIm5vbmUiKS5zcGxpdCgpCisgICAgcGFja2FnZV9jbGFzc19ibGFja2xpc3QgPSBzeXN0ZW1fY2xhc3NfYmxhY2tsaXN0ICsgdXNlcl9jbGFzc19ibGFja2xpc3QKKworICAgIGZvciBibGFjayBpbiBwYWNrYWdlX2NsYXNzX2JsYWNrbGlzdDoKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcyhibGFjaywgZCk6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IGNsYXNzICVzIGZvdW5kIGluIGJsYWNrbGlzdCwgZGlzYWJsZSBpY2VjYyIgJSAocG4sIGJsYWNrKSkKKyAgICAgICAgICAgIHJldHVybiAibm8iCisKKyAgICAjICJzeXN0ZW0iIHJlY2lwZSBibGFja2xpc3QgY29udGFpbnMgYSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgY2FuIG5vdCBkaXN0cmlidXRlIGNvbXBpbGUgdGFza3MKKyAgICAjIGZvciBvbmUgcmVhc29uIG9yIHRoZSBvdGhlcgorICAgICMgdGhpcyBpcyB0aGUgb2xkIGxpc3QgKHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZCBhbnltb3JlLCBiZWNhdXNlIEkgd2FzIGFibGUgdG8gYnVpbGQKKyAgICAjIGFsbCB0aGVzZSB3aXRoIGljZWNjIGVuYWJsZWQpCisgICAgIyBzeXN0ZW1fcGFja2FnZV9ibGFja2xpc3QgPSBbICJ1Y2xpYmMiLCAiZ2xpYmMiLCAiZ2NjIiwgImJpbmQiLCAidS1ib290IiwgImRoY3AtZm9yd2FyZGVyIiwgImVuY2hhbnQiLCAiY29ubm1hbiIsICJvcmJpdDIiIF0KKyAgICAjIHdoZW4gYWRkaW5nIG5ldyBlbnRyeSwgcGxlYXNlIGRvY3VtZW50IHdoeSAoaG93IGl0IGZhaWxlZCkgc28gdGhhdCB3ZSBjYW4gcmUtZXZhbHVhdGUgaXQgbGF0ZXIKKyAgICAjIGUuZy4gd2hlbiB0aGVyZSBpcyBuZXcgdmVyc2lvbgorICAgICMgYnVpbGRpbmcgbGliZ2NjLWluaXRpYWwgd2l0aCBpY2VjYyBmYWlscyB3aXRoIENQUCBzYW5pdHkgY2hlY2sgZXJyb3IgaWYgaG9zdCBzeXNyb290IGNvbnRhaW5zIGNyb3NzIGdjYyBidWlsdCBmb3IgYW5vdGhlciB0YXJnZXQgdHVuZS92YXJpYW50CisgICAgc3lzdGVtX3BhY2thZ2VfYmxhY2tsaXN0ID0gWyJsaWJnY2MtaW5pdGlhbCJdCisgICAgdXNlcl9wYWNrYWdlX2JsYWNrbGlzdCA9IChkLmdldFZhcignSUNFQ0NfVVNFUl9QQUNLQUdFX0JMJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisgICAgdXNlcl9wYWNrYWdlX3doaXRlbGlzdCA9IChkLmdldFZhcignSUNFQ0NfVVNFUl9QQUNLQUdFX1dMJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisgICAgcGFja2FnZV9ibGFja2xpc3QgPSBzeXN0ZW1fcGFja2FnZV9ibGFja2xpc3QgKyB1c2VyX3BhY2thZ2VfYmxhY2tsaXN0CisKKyAgICBpZiBwbiBpbiBwYWNrYWdlX2JsYWNrbGlzdDoKKyAgICAgICAgYmIuZGVidWcoMSwgIiVzOiBmb3VuZCBpbiBibGFja2xpc3QsIGRpc2FibGUgaWNlY2MiICUgcG4pCisgICAgICAgIHJldHVybiAibm8iCisKKyAgICBpZiBwbiBpbiB1c2VyX3BhY2thZ2Vfd2hpdGVsaXN0OgorICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IGZvdW5kIGluIHdoaXRlbGlzdCwgZW5hYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gInllcyIKKworICAgIGlmIGQuZ2V0VmFyKCdQQVJBTExFTF9NQUtFJywgRmFsc2UpID09ICIiOgorICAgICAgICBiYi5kZWJ1ZygxLCAiJXM6IGhhcyBlbXB0eSBQQVJBTExFTF9NQUtFLCBkaXNhYmxlIGljZWNjIiAlIHBuKQorICAgICAgICByZXR1cm4gIm5vIgorCisgICAgcmV0dXJuICJ5ZXMiCisKK2RlZiBpY2NfaXNfYWxsYXJjaChiYiwgZCk6CisgICAgcmV0dXJuIGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBGYWxzZSkgPT0gImFsbCIKKworZGVmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgIHJldHVybiBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImtlcm5lbCIsIGQpOworCitkZWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgcmV0dXJuIFwKKyAgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygiY3Jvc3MiLCBkKSBvciBcCisgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpOworCisjIERvbid0IHBvbGx1dGUgYWxsYXJjaCBzaWduYXR1cmVzIHdpdGggVEFSR0VUX0ZQVQoraWNjX3ZlcnNpb25bdmFyZGVwc2V4Y2x1ZGVdICs9ICJUQVJHRVRfRlBVIgorZGVmIGljY192ZXJzaW9uKGJiLCBkKToKKyAgICBpZiB1c2VfaWNjKGJiLCBkKSA9PSAibm8iOgorICAgICAgICByZXR1cm4gIiIKKworICAgIHBhcmFsbGVsID0gZC5nZXRWYXIoJ0lDRUNDX1BBUkFMTEVMX01BS0UnLCBGYWxzZSkgb3IgIiIKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BBUkFMTEVMX01BS0UnLCBGYWxzZSkgPT0gIiIgYW5kIHBhcmFsbGVsOgorICAgICAgICBkLnNldFZhcigiUEFSQUxMRUxfTUFLRSIsIHBhcmFsbGVsKQorCisgICAgaWYgaWNjX2lzX25hdGl2ZShiYiwgZCk6CisgICAgICAgIGFyY2hpdmVfbmFtZSA9ICJsb2NhbC1ob3N0LWVudiIKKyAgICBlbGlmIGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScpID09ICIiOgorICAgICAgICBiYi5mYXRhbChkLmV4cGFuZCgiJHtQTn0iKSwgIiBOVUxMIHByZWZpeCIpCisgICAgZWxzZToKKyAgICAgICAgcHJlZml4ID0gZC5leHBhbmQoJyR7SE9TVF9QUkVGSVh9JyApCisgICAgICAgIGRpc3RybyA9IGQuZXhwYW5kKCcke0RJU1RST30nKQorICAgICAgICB0YXJnZXRfc3lzID0gZC5leHBhbmQoJyR7VEFSR0VUX1NZU30nKQorICAgICAgICBmbG9hdCA9IGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgRmFsc2UpIG9yICJoYXJkIgorICAgICAgICBhcmNoaXZlX25hbWUgPSBwcmVmaXggKyBkaXN0cm8gKyAiLSIgICAgICAgICsgdGFyZ2V0X3N5cyArICItIiArIGZsb2F0CisgICAgICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lICs9ICIta2VybmVsIgorCisgICAgaW1wb3J0IHNvY2tldAorICAgIGljZV9kaXIgPSBkLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfScpCisgICAgdGFyX2ZpbGUgPSBvcy5wYXRoLmpvaW4oaWNlX2RpciwgJ2ljZScsIGFyY2hpdmVfbmFtZSArICItQFZFUlNJT05ALSIgKyBzb2NrZXQuZ2V0aG9zdG5hbWUoKSArICcudGFyLmd6JykKKworICAgIHJldHVybiB0YXJfZmlsZQorCitkZWYgaWNjX3BhdGgoYmIsZCk6CisgICAgaWYgdXNlX2ljYyhiYiwgZCkgPT0gIm5vIjoKKyAgICAgICAgIyBkb24ndCBjcmVhdGUgdW5uZWNlc3NhcnkgZGlyZWN0b3JpZXMgd2hlbiBpY2VjYyBpcyBkaXNhYmxlZAorICAgICAgICByZXR1cm4KKworICAgIGlmIGljY19pc19rZXJuZWwoYmIsIGQpOgorICAgICAgICByZXR1cm4gY3JlYXRlX3BhdGgoIFtnZXRfY3Jvc3Nfa2VybmVsX2NjKGJiLGQpLCBdLCBiYiwgZCkKKworICAgIGVsc2U6CisgICAgICAgIHByZWZpeCA9IGQuZXhwYW5kKCcke0hPU1RfUFJFRklYfScpCisgICAgICAgIHJldHVybiBjcmVhdGVfcGF0aCggW3ByZWZpeCsiZ2NjIiwgcHJlZml4KyJnKysiXSwgYmIsIGQpCisKK2RlZiBpY2NfZ2V0X2V4dGVybmFsX3Rvb2woYmIsIGQsIHRvb2wpOgorICAgIGV4dGVybmFsX3Rvb2xjaGFpbl9iaW5kaXIgPSBkLmV4cGFuZCgnJHtFWFRFUk5BTF9UT09MQ0hBSU59JHtiaW5kaXJfY3Jvc3N9JykKKyAgICB0YXJnZXRfcHJlZml4ID0gZC5leHBhbmQoJyR7VEFSR0VUX1BSRUZJWH0nKQorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZXh0ZXJuYWxfdG9vbGNoYWluX2JpbmRpciwgJyVzJXMnICUgKHRhcmdldF9wcmVmaXgsIHRvb2wpKQorCisjIERvbid0IHBvbGx1dGUgbmF0aXZlIHNpZ25hdHVyZXMgd2l0aCB0YXJnZXQgVFVORV9QS0dBUkNIIHRocm91Z2ggU1RBR0lOR19CSU5ESVJfVE9PTENIQUlOCitpY2NfZ2V0X3Rvb2xbdmFyZGVwc2V4Y2x1ZGVdICs9ICJTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4iCitkZWYgaWNjX2dldF90b29sKGJiLCBkLCB0b29sKToKKyAgICBpZiBpY2NfaXNfbmF0aXZlKGJiLCBkKToKKyAgICAgICAgcmV0dXJuIGJiLnV0aWxzLndoaWNoKG9zLmdldGVudigiUEFUSCIpLCB0b29sKQorICAgIGVsaWYgaWNjX2lzX2tlcm5lbChiYiwgZCk6CisgICAgICAgIHJldHVybiBiYi51dGlscy53aGljaChvcy5nZXRlbnYoIlBBVEgiKSwgZ2V0X2Nyb3NzX2tlcm5lbF9jYyhiYiwgZCkpCisgICAgZWxzZToKKyAgICAgICAgaWNlX2RpciA9IGQuZXhwYW5kKCcke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0nKQorICAgICAgICB0YXJnZXRfc3lzID0gZC5leHBhbmQoJyR7VEFSR0VUX1NZU30nKQorICAgICAgICB0b29sX2JpbiA9IG9zLnBhdGguam9pbihpY2VfZGlyLCAiJXMtJXMiICUgKHRhcmdldF9zeXMsIHRvb2wpKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh0b29sX2Jpbik6CisgICAgICAgICAgICByZXR1cm4gdG9vbF9iaW4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4dGVybmFsX3Rvb2xfYmluID0gaWNjX2dldF9leHRlcm5hbF90b29sKGJiLCBkLCB0b29sKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZXh0ZXJuYWxfdG9vbF9iaW4pOgorICAgICAgICAgICAgICAgIHJldHVybiBleHRlcm5hbF90b29sX2JpbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKworZGVmIGljY19nZXRfYW5kX2NoZWNrX3Rvb2woYmIsIGQsIHRvb2wpOgorICAgICMgQ2hlY2sgdGhhdCBnKysgb3IgZ2NjIGlzIG5vdCBhIHN5bWJvbGljIGxpbmsgdG8gaWNlY2MgYmluYXJ5IGluCisgICAgIyBQQVRIIG9yIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHdpbGwgc2lsZW50bHkgY3JlYXRlIGFuIGludmFsaWQKKyAgICAjIGNvbXBpbGVyIGVudmlyb25tZW50IHBhY2thZ2UuCisgICAgdCA9IGljY19nZXRfdG9vbChiYiwgZCwgdG9vbCkKKyAgICBpZiB0IGFuZCBvcy5wb3BlbigicmVhZGxpbmsgLWYgJXMiICUgdCkucmVhZCgpWzotMV0gPT0gZ2V0X2ljZWNjKGQpOgorICAgICAgICBiYi5lcnJvcigiJXMgaXMgYSBzeW1saW5rIHRvICVzIGluIFBBVEggYW5kIHRoaXMgcHJldmVudHMgaWNlY2MgZnJvbSB3b3JraW5nIiAlICh0LCBnZXRfaWNlY2MoZCkpKQorICAgICAgICByZXR1cm4gIiIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gdAorCit3YWl0X2Zvcl9maWxlKCkgeworICAgIGxvY2FsIFRJTUVfRUxBUFNFRD0wCisgICAgbG9jYWwgRklMRV9UT19URVNUPSQxCisgICAgbG9jYWwgVElNRU9VVD0kMgorICAgIHVudGlsIFsgLWYgIiRGSUxFX1RPX1RFU1QiIF0KKyAgICBkbworICAgICAgICBUSU1FX0VMQVBTRUQ9YGV4cHIgJFRJTUVfRUxBUFNFRCArIDFgCisgICAgICAgIGlmIFsgJFRJTUVfRUxBUFNFRCAtZ3QgJFRJTUVPVVQgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICBmaQorICAgICAgICBzbGVlcCAxCisgICAgZG9uZQorfQorCitkZWYgc2V0X2ljZWNjX2VudigpOgorICAgICMgZHVtbXkgcHl0aG9uIHZlcnNpb24gb2Ygc2V0X2ljZWNjX2VudgorICAgIHJldHVybgorCitzZXRfaWNlY2NfZW52KCkgeworICAgIGlmIFsgIiR7QHVzZV9pY2MoYmIsIGQpfSIgPSAibm8iIF0KKyAgICB0aGVuCisgICAgICAgIHJldHVybgorICAgIGZpCisgICAgSUNFQ0NfVkVSU0lPTj0iJHtAaWNjX3ZlcnNpb24oYmIsIGQpfSIKKyAgICBpZiBbICJ4JHtJQ0VDQ19WRVJTSU9OfSIgPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBjb3VsZCBub3QgZ2V0IElDRUNDX1ZFUlNJT04iCisgICAgICAgIHJldHVybgorICAgIGZpCisKKyAgICBJQ0VfUEFUSD0iJHtAaWNjX3BhdGgoYmIsIGQpfSIKKyAgICBpZiBbICJ4JHtJQ0VfUEFUSH0iID0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGJid2FybiAiQ2Fubm90IHVzZSBpY2VjYzogY291bGQgbm90IGdldCBJQ0VfUEFUSCIKKyAgICAgICAgcmV0dXJuCisgICAgZmkKKworICAgIElDRUNDX0NDPSIke0BpY2NfZ2V0X2FuZF9jaGVja190b29sKGJiLCBkLCAiZ2NjIil9IgorICAgIElDRUNDX0NYWD0iJHtAaWNjX2dldF9hbmRfY2hlY2tfdG9vbChiYiwgZCwgImcrKyIpfSIKKyAgICAjIGNhbm5vdCB1c2UgaWNjX2dldF9hbmRfY2hlY2tfdG9vbCBoZXJlIGJlY2F1c2UgaXQgYXNzdW1lcyBhcyB3aXRob3V0IHRhcmdldF9zeXMgcHJlZml4CisgICAgSUNFQ0NfV0hJQ0hfQVM9IiR7QGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAnYXMnKX0iCisgICAgaWYgWyAhIC14ICIke0lDRUNDX0NDfSIgLW8gISAteCAiJHtJQ0VDQ19DWFh9IiBdCisgICAgdGhlbgorICAgICAgICBiYndhcm4gIkNhbm5vdCB1c2UgaWNlY2M6IGNvdWxkIG5vdCBnZXQgSUNFQ0NfQ0Mgb3IgSUNFQ0NfQ1hYIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFX1ZFUlNJT049YCRJQ0VDQ19DQyAtZHVtcHZlcnNpb25gCisgICAgSUNFQ0NfVkVSU0lPTj1gZWNobyAke0lDRUNDX1ZFUlNJT059IHwgc2VkIC1lICJzL0BWRVJTSU9OQC8kSUNFX1ZFUlNJT04vZyJgCisgICAgaWYgWyAhIC14ICIke0lDRUNDX0VOVl9FWEVDfSIgXQorICAgIHRoZW4KKyAgICAgICAgYmJ3YXJuICJDYW5ub3QgdXNlIGljZWNjOiBpbnZhbGlkIElDRUNDX0VOVl9FWEVDIgorICAgICAgICByZXR1cm4KKyAgICBmaQorCisgICAgSUNFQ0NfQVM9ImAke0lDRUNDX0NDfSAtcHJpbnQtcHJvZy1uYW1lPWFzYCIKKyAgICAjIGZvciB0YXJnZXQgcmVjaXBlcyBzaG91bGQgcmV0dXJuIHNvbWV0aGluZyBsaWtlOgorICAgICMgL09FL3RtcC1lZ2xpYmMvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWJleGVjL2FybTkyMHR0LW9lLWxpbnV4LWdudWVhYmkvZ2NjL2FybS1vZS1saW51eC1nbnVlYWJpLzQuOC4yL2FzCisgICAgIyBhbmQganVzdCAiYXMiIGZvciBuYXRpdmUsIGlmIGl0IHJldHVybnMgImFzIiBpbiBjdXJyZW50IGRpcmVjdG9yeSAoZm9yIHdoYXRldmVyIHJlYXNvbikgdXNlICJhcyIgZnJvbSBQQVRICisgICAgaWYgWyAiYGRpcm5hbWUgIiR7SUNFQ0NfQVN9ImAiID0gIi4iIF0KKyAgICB0aGVuCisgICAgICAgIElDRUNDX0FTPSIke0lDRUNDX1dISUNIX0FTfSIKKyAgICBmaQorCisgICAgaWYgWyAhIC1mICIke0lDRUNDX1ZFUlNJT059LmRvbmUiIF0KKyAgICB0aGVuCisgICAgICAgIG1rZGlyIC1wICJgZGlybmFtZSAiJHtJQ0VDQ19WRVJTSU9OfSJgIgorCisgICAgICAgICMgdGhlIElDRUNDX1ZFUlNJT04gZ2VuZXJhdGlvbiBzdGVwIG11c3QgYmUgbG9ja2VkIGJ5IGEgbXV0ZXgKKyAgICAgICAgIyBpbiBvcmRlciB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucworICAgICAgICBpZiBmbG9jayAtbiAiJHtJQ0VDQ19WRVJTSU9OfS5sb2NrIiBcCisgICAgICAgICAgICAke0lDRUNDX0VOVl9FWEVDfSAiJHtJQ0VDQ19DQ30iICIke0lDRUNDX0NYWH0iICIke0lDRUNDX0FTfSIgIiR7SUNFQ0NfVkVSU0lPTn0iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHRvdWNoICIke0lDRUNDX1ZFUlNJT059LmRvbmUiCisgICAgICAgIGVsaWYgWyAhIHdhaXRfZm9yX2ZpbGUgIiR7SUNFQ0NfVkVSU0lPTn0uZG9uZSIgMzAgXQorICAgICAgICB0aGVuCisgICAgICAgICAgICAjIGxvY2tpbmcgZmFpbGVkIHNvIHdhaXQgZm9yICR7SUNFQ0NfVkVSU0lPTn0uZG9uZSB0byBhcHBlYXIKKyAgICAgICAgICAgIGJid2FybiAiVGltZW91dCB3YWl0aW5nIGZvciAke0lDRUNDX1ZFUlNJT059LmRvbmUiCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgZXhwb3J0IElDRUNDX1ZFUlNJT04gSUNFQ0NfQ0MgSUNFQ0NfQ1hYCisgICAgZXhwb3J0IFBBVEg9IiRJQ0VfUEFUSDokUEFUSCIKKyAgICBleHBvcnQgQ0NBQ0hFX1BBVEg9IiRQQVRIIgorCisgICAgYmJub3RlICJVc2luZyBpY2VjYyIKK30KKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgc2V0X2ljZWNjX2VudgorfQorCitkb19jb21waWxlX2tlcm5lbG1vZHVsZXNfcHJlcGVuZCgpIHsKKyAgICBzZXRfaWNlY2NfZW52Cit9CisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBzZXRfaWNlY2NfZW52Cit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtYnVpbGRpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExN2NjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1idWlsZGluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACisjCisjIFdyaXRlcyBidWlsZCBpbmZvcm1hdGlvbiB0byB0YXJnZXQgZmlsZXN5c3RlbSBvbiAvZXRjL2J1aWxkCisjCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIyBBdXRob3I6IEFsZWphbmRybyBFbmVkaW5vIEhlcm5hbmRleiBTYW1hbmllZ28gPGFsZWphbmRyby5oZXJuYW5kZXpAaW50ZWwuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBDT1BZSU5HLk1JVCBmb3IgZGV0YWlscworIworIyBVc2FnZTogYWRkIElOSEVSSVQgKz0gImltYWdlLWJ1aWxkaW5mbyIgdG8geW91ciBjb25mIGZpbGUKKyMKKworIyBEZXNpcmVkIHZhcmlhYmxlcyB0byBkaXNwbGF5IAorSU1BR0VfQlVJTERJTkZPX1ZBUlMgPz0gIkRJU1RSTyBESVNUUk9fVkVSU0lPTiIKKworIyBGcm9tIGJ1aWxkaGlzdG9yeS5iYmNsYXNzCitkZWYgaW1hZ2VfYnVpbGRpbmZvX291dHB1dHZhcnModmFycywgbGlzdHZhcnMsIGQpOiAKKyAgICB2YXJzID0gdmFycy5zcGxpdCgpCisgICAgbGlzdHZhcnMgPSBsaXN0dmFycy5zcGxpdCgpCisgICAgcmV0ID0gIiIKKyAgICBmb3IgdmFyIGluIHZhcnM6CisgICAgICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgICAgICBpZiAoZC5nZXRWYXJGbGFnKHZhciwgJ3R5cGUnKSA9PSAibGlzdCIpOgorICAgICAgICAgICAgdmFsdWUgPSBvZS51dGlscy5zcXVhc2hzcGFjZXModmFsdWUpCisgICAgICAgIHJldCArPSAiJXMgPSAlc1xuIiAlICh2YXIsIHZhbHVlKQorICAgIHJldHVybiByZXQucnN0cmlwKCdcbicpCisKKyMgR2V0cyBnaXQgYnJhbmNoJ3Mgc3RhdHVzIChjbGVhbiBvciBkaXJ0eSkKK2RlZiBnZXRfbGF5ZXJfZ2l0X3N0YXR1cyhwYXRoKToKKyAgICBmID0gb3MucG9wZW4oImNkICVzOyBnaXQgZGlmZiAtLXN0YXQgMj4mMSB8IHRhaWwgLW4gMSIgJSBwYXRoKQorICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIGlmIGYuY2xvc2UoKSBpcyBOb25lOgorICAgICAgICBpZiBsZW4oZGF0YSkgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiLS0gbW9kaWZpZWQiCisgICAgcmV0dXJuICIiCisKKyMgUmV0dXJucyBsYXllciByZXZpc2lvbnMgYWxvbmcgd2l0aCB0aGVpciByZXNwZWN0aXZlIHN0YXR1cworZGVmIGdldF9sYXllcl9yZXZzKGQpOgorICAgIGxheWVycyA9IChkLmdldFZhcigiQkJMQVlFUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIG1lZGFkYXRhX3JldnMgPSBbIiUtMTdzID0gJXM6JXMgJXMiICUgKG9zLnBhdGguYmFzZW5hbWUoaSksIFwKKyAgICAgICAgYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaChpLCBOb25lKS5zdHJpcCgpLCBcCisgICAgICAgIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihpLCBOb25lKSwgXAorICAgICAgICBnZXRfbGF5ZXJfZ2l0X3N0YXR1cyhpKSkgXAorICAgICAgICAgICAgZm9yIGkgaW4gbGF5ZXJzXQorICAgIHJldHVybiAnXG4nLmpvaW4obWVkYWRhdGFfcmV2cykKKworZGVmIGJ1aWxkaW5mb190YXJnZXQoZCk6CisgICAgICAgICMgR2V0IGNvbnRleHQKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0JCX1dPUktFUkNPTlRFWFQnLCBUcnVlKSAhPSAnMSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgICMgU2luZ2xlIGFuZCBsaXN0IHZhcmlhYmxlcyB0byBiZSByZWFkCisgICAgICAgIHZhcnMgPSAoZC5nZXRWYXIoIklNQUdFX0JVSUxESU5GT19WQVJTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGxpc3R2YXJzID0gKGQuZ2V0VmFyKCJJTUFHRV9CVUlMRElORk9fTFZBUlMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgcmV0dXJuIGltYWdlX2J1aWxkaW5mb19vdXRwdXR2YXJzKHZhcnMsIGxpc3R2YXJzLCBkKQorCisjIFdyaXRlIGJ1aWxkIGluZm9ybWF0aW9uIHRvIHRhcmdldCBmaWxlc3lzdGVtCitidWlsZGluZm8gKCkgeworY2F0ID4gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9idWlsZCA8PCBFTkQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZCBDb25maWd1cmF0aW9uOiAgfAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyR7QGJ1aWxkaW5mb190YXJnZXQoZCl9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTGF5ZXIgUmV2aXNpb25zOiAgICAgIHwgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiske0BnZXRfbGF5ZXJfcmV2cyhkKX0KK0VORAorfQorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gImJ1aWxkaW5mbzsiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UtbGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdhMTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ltYWdlLWxpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDE4IEBACisKK0FVVE9fU1lTTElOVVhDRkcgPSAiMSIKK0lOSVRSRF9JTUFHRSA/PSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKK0lOSVRSRCA/PSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSRF9JTUFHRX0tJHtNQUNISU5FfS5jcGlvLmd6IgorU1lTTElOVVhfUk9PVCA9ICJyb290PS9kZXYvcmFtMCIKK1NZU0xJTlVYX1RJTUVPVVQgPz0gIjUwIgorU1lTTElOVVhfTEFCRUxTID89ICJib290IGluc3RhbGwiCitMQUJFTFNfYXBwZW5kID0gIiAke1NZU0xJTlVYX0xBQkVMU30gIgorCitST09URlMgPz0gIiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfS5leHQ0IgorCitkb19ib290aW1nW2RlcGVuZHNdICs9ICIke0lOSVRSRF9JTUFHRX06ZG9fcm9vdGZzIgorZG9fYm9vdGltZ1tkZXBlbmRzXSArPSAiJHtQTn06ZG9fcm9vdGZzIgorCitpbmhlcml0IGJvb3RpbWcKKworSU1BR0VfVFlQRURFUF9saXZlID0gImV4dDQiCitJTUFHRV9UWVBFU19NQVNLRUQgKz0gImxpdmUiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2UtbWtsaWJzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1NWE4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1ta2xpYnMuYmJjbGFzcwpAQCAtMCwwICsxLDcxIEBACitkb19yb290ZnNbZGVwZW5kc10gKz0gIm1rbGlicy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworSU1BR0VfUFJFUFJPQ0VTU19DT01NQU5EICs9ICJta2xpYnNfb3B0aW1pemVfaW1hZ2U7ICIKKworbWtsaWJzX29wdGltaXplX2ltYWdlX2RvaXQoKSB7CisJcm0gLXJmICR7V09SS0RJUn0vbWtsaWJzCisJbWtkaXIgLXAgJHtXT1JLRElSfS9ta2xpYnMvZGVzdAorCWNkICR7SU1BR0VfUk9PVEZTfQorCWR1IC1icyA+ICR7V09SS0RJUn0vbWtsaWJzL2R1LmJlZm9yZS5ta2xpYnMudHh0CisJZm9yIGkgaW4gYGZpbmQgLmA7IGRvIGZpbGUgJGk7IGRvbmUgXAorCQl8IGdyZXAgRUxGIFwKKwkJfCBncmVwICJMU0IgKmV4ZWN1dGFibGUiIFwKKwkJfCBncmVwICJkeW5hbWljYWxseSBsaW5rZWQiIFwKKwkJfCBzZWQgInMvOi4qLy8iIFwKKwkJfCBzZWQgInMrXlwuLysrIiBcCisJCT4gJHtXT1JLRElSfS9ta2xpYnMvZXhlY3V0YWJsZXMubGlzdAorCisJY2FzZSAke1RBUkdFVF9BUkNIfSBpbgorCQlwb3dlcnBjIHwgbWlwcyB8IG1pcHNlbCB8IG1pY3JvYmxhemUgKQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLnNvLjEiCisJCQk7OworCQlwb3dlcnBjNjQpCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQ2NC5zby4xIgorCQkJOzsKKwkJeDg2XzY0KQorCQkJZHluYW1pY19sb2FkZXI9IiR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LXg4Ni02NC5zby4yIgorCQkJOzsKKwkJaTU4NiApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbGludXguc28uMiIKKwkJCTs7CisJCWFybSApCisJCQlkeW5hbWljX2xvYWRlcj0iJHtiYXNlX2xpYmRpcn0vbGQtbGludXguc28uMyIKKwkJCTs7CisJCSogKQorCQkJZHluYW1pY19sb2FkZXI9Ii91bmtub3duX2R5bmFtaWNfbGlua2VyIgorCQkJOzsKKwllc2FjCisKKwlta2xpYnMgLXYgXAorCQktLWxkbGliICR7ZHluYW1pY19sb2FkZXJ9IFwKKwkJLS1saWJkaXIgJHtiYXNlbGlifSBcCisJCS0tc3lzcm9vdCAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9IFwKKwkJLS1nY2Mtb3B0aW9ucyAiLS1zeXNyb290PSR7UEtHX0NPTkZJR19TWVNST09UX0RJUn0iIFwKKwkJLS1yb290ICR7SU1BR0VfUk9PVEZTfSBcCisJCS0tdGFyZ2V0IGBlY2hvICR7VEFSR0VUX1BSRUZJWH0gfCBzZWQgJ3MvLSQvLycgYCBcCisJCS1kICR7V09SS0RJUn0vbWtsaWJzL2Rlc3QgXAorCQlgY2F0ICR7V09SS0RJUn0vbWtsaWJzL2V4ZWN1dGFibGVzLmxpc3RgCisKKwljZCAke1dPUktESVJ9L21rbGlicy9kZXN0CisJZm9yIGkgaW4gKgorCWRvCisJCWNwICRpIGBmaW5kICR7SU1BR0VfUk9PVEZTfSAtbmFtZSAkaWAKKwlkb25lCisKKwljZCAke0lNQUdFX1JPT1RGU30KKwlkdSAtYnMgPiAke1dPUktESVJ9L21rbGlicy9kdS5hZnRlci5ta2xpYnMudHh0CisKKwllY2hvIHJvb3RmcyBzaXplIGJlZm9yZSBta2xpYnMgb3B0aW1pemF0aW9uOiBgY2F0ICR7V09SS0RJUn0vbWtsaWJzL2R1LmJlZm9yZS5ta2xpYnMudHh0YAorCWVjaG8gcm9vdGZzIHNpemUgYWZ0ZXIgbWtsaWJzIG9wdGltaXphdGlvbjogYGNhdCAke1dPUktESVJ9L21rbGlicy9kdS5hZnRlci5ta2xpYnMudHh0YAorfQorCitta2xpYnNfb3B0aW1pemVfaW1hZ2UoKSB7CisJZm9yIGltZyBpbiAke01LTElCU19PUFRJTUlaRURfSU1BR0VTfQorCWRvCisJCWlmIFsgIiR7aW1nfSIgPSAiJHtQTn0iIF0gfHwgWyAiJHtpbWd9IiA9ICJhbGwiIF0KKwkJdGhlbgorCQkJbWtsaWJzX29wdGltaXplX2ltYWdlX2RvaXQKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLXByZWxpbmsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1wcmVsaW5rLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiYjNhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS1wcmVsaW5rLmJiY2xhc3MKQEAgLTAsMCArMSwzMyBAQAorZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJwcmVsaW5rLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitJTUFHRV9QUkVQUk9DRVNTX0NPTU1BTkQgKz0gInByZWxpbmtfaW1hZ2U7ICIKKworcHJlbGlua19pbWFnZSAoKSB7CisjCWV4cG9ydCBQU0VVRE9fREVCVUc9NAorIwkvYmluL2VudiB8IC9iaW4vZ3JlcCBQU0VVRE8KKyMJZWNobyAiTERfTElCUkFSWV9QQVRIPSRMRF9MSUJSQVJZX1BBVEgiCisjCWVjaG8gIkxEX1BSRUxPQUQ9JExEX1BSRUxPQUQiCisKKwlwcmVfcHJlbGlua19zaXplPWBkdSAta3MgJHtJTUFHRV9ST09URlN9IHwgYXdrICd7c2l6ZSA9ICQxIDsgcHJpbnQgc2l6ZSB9J2AKKwllY2hvICJTaXplIGJlZm9yZSBwcmVsaW5raW5nICRwcmVfcHJlbGlua19zaXplLiIKKworCSMgV2UgbmVlZCBhIHByZWxpbmsgY29uZiBvbiB0aGUgZmlsZXN5c3RlbSwgYWRkIG9uZSBpZiBpdCdzIG1pc3NpbmcKKwlpZiBbICEgLWUgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYgXTsgdGhlbgorCQljcCAke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfS9wcmVsaW5rLmNvbmYgXAorCQkJJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKwkJZHVtbXlfcHJlbGlua19jb25mPXRydWU7CisJZWxzZQorCQlkdW1teV9wcmVsaW5rX2NvbmY9ZmFsc2U7CisJZmkKKworCSMgcHJlbGluayEKKwkke1NUQUdJTkdfRElSX05BVElWRX0ke3NiaW5kaXJfbmF0aXZlfS9wcmVsaW5rIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gLWFtUiAtTiAtYyAke3N5c2NvbmZkaXJ9L3ByZWxpbmsuY29uZgorCisJIyBSZW1vdmUgdGhlIHByZWxpbmsuY29uZiBpZiB3ZSBoYWQgdG8gYWRkIGl0LgorCWlmIFsgIiRkdW1teV9wcmVsaW5rX2NvbmYiID0gInRydWUiIF07IHRoZW4KKwkJcm0gLWYgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKwlmaQorCisJcHJlX3ByZWxpbmtfc2l6ZT1gZHUgLWtzICR7SU1BR0VfUk9PVEZTfSB8IGF3ayAne3NpemUgPSAkMSA7IHByaW50IHNpemUgfSdgCisJZWNobyAiU2l6ZSBhZnRlciBwcmVsaW5raW5nICRwcmVfcHJlbGlua19zaXplLiIKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZS1zd2FiLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2Utc3dhYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MzE4NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2Utc3dhYi5iYmNsYXNzCkBAIC0wLDAgKzEsOTQgQEAKK0hPU1RfREFUQSA/PSAiJHtUTVBESVJ9L2hvc3QtY29udGFtaW5hdGlvbi1kYXRhLyIKK1NXQUJCRVJfUkVQT1JUID89ICIke0xPR19ESVJ9L3N3YWJiZXIvIgorU1dBQkJFUl9MT0dTID89ICIke0xPR19ESVJ9L2NvbnRhbWluYXRpb24tbG9ncyIKK1RSQUNFX0xPR0RJUiA/PSAiJHtTV0FCQkVSX0xPR1N9LyR7UEFDS0FHRV9BUkNIfSIKK1RSQUNFX0xPR0ZJTEUgPSAiJHtUUkFDRV9MT0dESVJ9LyR7UE59LSR7UFZ9IgorCitTV0FCX09SSUdfVEFTSyA6PSAiJHtCQl9ERUZBVUxUX1RBU0t9IgorQkJfREVGQVVMVF9UQVNLID0gImdlbmVyYXRlX3N3YWJiZXJfcmVwb3J0IgorCisjIFNldmVyYWwgcmVjaXBlcyBkb24ndCBidWlsZCB3aXRoIHBhcmFsbGVsIG1ha2Ugd2hlbiBydW4gdW5kZXIgc3RyYWNlCisjIElkZWFsbHkgdGhlc2Ugc2hvdWxkIGJlIGZpeGVkIGJ1dCBhcyBhIHRlbXBvcmFyeSBtZWFzdXJlIGRpc2FibGUgcGFyYWxsZWwKKyMgYnVpbGRzIGZvciB0cm91Ymxlc29tZSByZWNpcGVzCitQQVJBTExFTF9NQUtFX3BuLW9wZW5zc2wgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbGliYyA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWdsaWItMi4wID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGlieG1sMiA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXJlYWRsaW5lID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tdXRpbC1saW51eCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWJpbnV0aWxzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tYmlzb24gPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1jbWFrZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWVsZnV0aWxzID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2NjID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ2NjLXJ1bnRpbWUgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1tNCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLW9wa2cgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wa2djb25maWcgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1wcmVsaW5rID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tcnBtID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tdGNsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tYmVlY3J5cHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1jdXJsID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tZ21wID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGlibXBjID0gIiIKK1BBUkFMTEVMX01BS0VfcG4tbGlieHNsdCA9ICIiCitQQVJBTExFTF9NQUtFX3BuLWx6byA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXBvcHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1saW51eC13cnMgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1saWJnY3J5cHQgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1ncGdtZSA9ICIiCitQQVJBTExFTF9NQUtFX3BuLXVkZXYgPSAiIgorUEFSQUxMRUxfTUFLRV9wbi1nbnV0bHMgPSAiIgorCitweXRob24oKSB7CisgICAgIyBOT1RFOiBJdCBtaWdodCBiZSB1c2VmdWwgdG8gZGV0ZWN0IGhvc3QgaW5mZWN0aW9uIG9uIG5hdGl2ZSBhbmQgY3Jvc3MKKyAgICAjIHBhY2thZ2VzIGJ1dCBhcyBpdCB0dXJucyBvdXQgdG8gYmUgcHJldHR5IGhhcmQgdG8gZG8gdGhpcyBmb3IgYWxsIG5hdGl2ZQorICAgICMgYW5kIGNyb3NzIHBhY2thZ2VzIHdoaWNoIGFyZW4ndCBzd2FiYmVyLW5hdGl2ZSBvciBvbmUgb2YgaXRzIGRlcGVuZGVuY2llcworICAgICMgSSBoYXZlIGlnbm9yZWQgdGhlbSBmb3Igbm93Li4uCisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkZXBzID0gKGQuZ2V0VmFyRmxhZygnZG9fc2V0c2NlbmUnLCAnZGVwZW5kcycpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGRlcHMuYXBwZW5kKCdzdHJhY2UtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3NldHNjZW5lJywgJ2RlcGVuZHMnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgbG9nZGlyID0gZC5leHBhbmQoIiR7VFJBQ0VfTE9HRElSfSIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dkaXIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1NUUkFDRUZVTkMnLCAnJykKK30KKworU1RSQUNFUElEID0gIiR7QG9zLmdldHBpZCgpfSIKK1NUUkFDRUZVTkMgPSAiaW1hZ2Vzd2FiX2F0dGFjaHN0cmFjZSIKKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiJHtTVFJBQ0VGVU5DfSIKK2RvX2NvbXBpbGVbcHJlZnVuY3NdICs9ICIke1NUUkFDRUZVTkN9IgorCitpbWFnZXN3YWJfYXR0YWNoc3RyYWNlICgpIHsKKwlTVFJBQ0U9YHdoaWNoIHN0cmFjZWAKKworCWlmIFsgLXggIiRTVFJBQ0UiIF07IHRoZW4KKwkJc3dhYmJlci1zdHJhY2UtYXR0YWNoICIkU1RSQUNFIC1mIC1vICR7VFJBQ0VfTE9HRklMRX0tJHtCQl9DVVJSRU5UVEFTS30ubG9nIC1lIHRyYWNlPW9wZW4sZXhlY3ZlIC1wICR7U1RSQUNFUElEfSIgIiR7VFJBQ0VfTE9HRklMRX0tdHJhY2VhdHRhY2gtJHtCQl9DVVJSRU5UVEFTS30ubG9nIgorCWZpCit9CisKK2RvX2dlbmVyYXRlX3N3YWJiZXJfcmVwb3J0ICgpIHsKKworCXVwZGF0ZV9kaXN0cm8gJHtIT1NUX0RBVEF9CisKKwkjIFN3YWJiZXIgY2FuJ3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHVzCisJbWtkaXIgLXAgJHtTV0FCQkVSX1JFUE9SVH0KKworCVJFUE9SVFNUQU1QPSR7U1dBQl9PUklHX1RBU0t9LWBkYXRlICslMm0lMmQlMkglMk0lWWAKKworCWlmIFsgYHdoaWNoIGNjYWNoZWAgXSA7IHRoZW4KKwkJQ0NBQ0hFX0RJUj1gKCBjY2FjaGUgLXMgfCBncmVwICJjYWNoZSBkaXJlY3RvcnkiIHwgZ3JlcCAtbyAnW14gXSokJyAyPiAvZGV2L251bGwgKWAKKyAJZmkKKworCWlmIFsgIiQobHMgLUEgJHtIT1NUX0RBVEF9KSIgXTsgdGhlbgorCQllY2hvICJHZW5lcmF0aW5nIHN3YWJiZXIgcmVwb3J0IgorCQlzd2FiYmVyIC1kICR7SE9TVF9EQVRBfSAtbCAke1NXQUJCRVJfTE9HU30gLW8gJHtTV0FCQkVSX1JFUE9SVH0vcmVwb3J0LSR7UkVQT1JUU1RBTVB9LnR4dCAtciAke1NXQUJCRVJfUkVQT1JUfS9leHRyYV9yZXBvcnQtJHtSRVBPUlRTVEFNUH0udHh0IC1jIGFsbCAtcCAke1RPUERJUn0gLWYgJHtPRVJPT1R9L21ldGEvY29uZi9zd2FiYmVyICR7VE9QRElSfSAke09FUk9PVH0gJHtDQ0FDSEVfRElSfQorCWVsc2UKKwkJZWNobyAiTm8gaG9zdCBkYXRhLCBjYW5ub3QgZ2VuZXJhdGUgc3dhYmJlciByZXBvcnQuIgorCWZpCit9CithZGR0YXNrIGdlbmVyYXRlX3N3YWJiZXJfcmVwb3J0IGFmdGVyIGRvXyR7U1dBQl9PUklHX1RBU0t9Citkb19nZW5lcmF0ZV9zd2FiYmVyX3JlcG9ydFtkZXBlbmRzXSA9ICJzd2FiYmVyLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvaW1hZ2Utdm0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjMyNjY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2ltYWdlLXZtLmJiY2xhc3MKQEAgLTAsMCArMSw0OSBAQAorCitTWVNMSU5VWF9QUk9NUFQgPz0gIjAiCitTWVNMSU5VWF9MQUJFTFMgPSAiYm9vdCIKK0xBQkVMU19hcHBlbmQgPSAiICR7U1lTTElOVVhfTEFCRUxTfSAiCisKKyMgVXNpbmcgYW4gaW5pdHJhbWZzIGlzIG9wdGlvbmFsLiBFbmFibGUgaXQgYnkgc2V0dGluZyBJTklUUkRfSU1BR0UuCitJTklUUkRfSU1BR0UgPz0gIiIKK0lOSVRSRCA/PSAiJHtAJyR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTklUUkRfSU1BR0V9LSR7TUFDSElORX0uY3Bpby5neicgaWYgJyR7SU5JVFJEX0lNQUdFfScgZWxzZSAnJ30iCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtAJyR7SU5JVFJEX0lNQUdFfTpkb19yb290ZnMnIGlmICcke0lOSVRSRF9JTUFHRX0nIGVsc2UgJyd9IgorCisjIG5lZWQgdG8gZGVmaW5lIHRoZSBkZXBlbmRlbmN5IGFuZCB0aGUgUk9PVEZTIGZvciBkaXJlY3RkaXNrCitkb19ib290ZGlyZWN0ZGlza1tkZXBlbmRzXSArPSAiJHtQTn06ZG9fcm9vdGZzIgorUk9PVEZTID89ICIke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0uZXh0NCIKKworIyBjcmVhdGluZyBWTSBpbWFnZXMgcmVsaWVzIG9uIGhhdmluZyBhIGhkZGltZyBzbyBlbnN1cmUgd2UgaW5oZXJpdCBpdCBoZXJlLgoraW5oZXJpdCBib290LWRpcmVjdGRpc2sKKworSU1BR0VfVFlQRURFUF92bWRrID0gImV4dDQiCitJTUFHRV9UWVBFREVQX3ZkaSA9ICJleHQ0IgorSU1BR0VfVFlQRURFUF9xY293MiA9ICJleHQ0IgorSU1BR0VfVFlQRVNfTUFTS0VEICs9ICJ2bWRrIHZkaSBxY293MiIKKworY3JlYXRlX3ZtZGtfaW1hZ2UgKCkgeworICAgIHFlbXUtaW1nIGNvbnZlcnQgLU8gdm1kayAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0uaGRkZGlyZWN0ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52bWRrCisgICAgbG4gLXNmICR7SU1BR0VfTkFNRX0udm1kayAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS52bWRrCit9CisKK2NyZWF0ZV92ZGlfaW1hZ2UgKCkgeworICAgIHFlbXUtaW1nIGNvbnZlcnQgLU8gdmRpICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnZkaQorICAgIGxuIC1zZiAke0lNQUdFX05BTUV9LnZkaSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTElOS19OQU1FfS52ZGkKK30KKworY3JlYXRlX3Fjb3cyX2ltYWdlICgpIHsKKyAgICBxZW11LWltZyBjb252ZXJ0IC1PIHFjb3cyICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRkaXJlY3QgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnFjb3cyCisgICAgbG4gLXNmICR7SU1BR0VfTkFNRX0ucWNvdzIgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX0xJTktfTkFNRX0ucWNvdzIKK30KKworcHl0aG9uIGRvX3ZtaW1nKCkgeworICAgIGlmICd2bWRrJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV92bWRrX2ltYWdlJywgZCkKKyAgICBpZiAndmRpJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2NyZWF0ZV92ZGlfaW1hZ2UnLCBkKQorICAgIGlmICdxY293MicgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdjcmVhdGVfcWNvdzJfaW1hZ2UnLCBkKQorfQorCithZGR0YXNrIHZtaW1nIGFmdGVyIGRvX2Jvb3RkaXJlY3RkaXNrIGJlZm9yZSBkb19idWlsZAorZG9fdm1pbWdbZGVwZW5kc10gKz0gInFlbXUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ZDY0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsNTA0IEBACitpbmhlcml0IHJvb3Rmc18ke0lNQUdFX1BLR1RZUEV9CisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2V4dAorCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgKz0gIiR7UEFDS0FHRV9JTlNUQUxMfSIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSArPSAiJHtQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFl9IgorUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQgKz0gInJvb3Rmc19zeXNyb290X3JlbGF0aXZlbGlua3M7ICIKKworaW5oZXJpdCBnemlwbmF0aXZlCisKK0xJQ0VOU0UgPSAiTUlUIgorUEFDS0FHRVMgPSAiIgorREVQRU5EUyArPSAiJHtNTFBSRUZJWH1xZW11d3JhcHBlci1jcm9zcyAke01MUFJFRklYfWRlcG1vZHdyYXBwZXItY3Jvc3MiCitSREVQRU5EUyArPSAiJHtQQUNLQUdFX0lOU1RBTEx9ICR7TElOR1VBU19JTlNUQUxMfSIKK1JSRUNPTU1FTkRTICs9ICIke1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWX0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1RFU1RJTUFHRUNMQVNTID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1RFU1RfSU1BR0UnLCAnMScsICd0ZXN0aW1hZ2UtYXV0bycsICcnLCBkKX0iCitpbmhlcml0ICR7VEVTVElNQUdFQ0xBU1N9CisKKyMgSU1BR0VfRkVBVFVSRVMgbWF5IGNvbnRhaW4gYW55IGF2YWlsYWJsZSBwYWNrYWdlIGdyb3VwCitJTUFHRV9GRUFUVVJFUyA/PSAiIgorSU1BR0VfRkVBVFVSRVNbdHlwZV0gPSAibGlzdCIKK0lNQUdFX0ZFQVRVUkVTW3ZhbGlkaXRlbXNdICs9ICJkZWJ1Zy10d2Vha3MgcmVhZC1vbmx5LXJvb3RmcyBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIHBvc3QtaW5zdGFsbC1sb2dnaW5nIgorCisjIEdlbmVyYXRlIGNvbXBhbmlvbiBkZWJ1Z2ZzPworSU1BR0VfR0VOX0RFQlVHRlMgPz0gIjAiCisKKyMgcm9vdGZzIGJvb3RzdHJhcCBpbnN0YWxsCitST09URlNfQk9PVFNUUkFQX0lOU1RBTEwgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsICIiLCAiJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iLGQpfSIKKworIyBwYWNrYWdlcyB0byBpbnN0YWxsIGZyb20gZmVhdHVyZXMKK0ZFQVRVUkVfSU5TVEFMTCA9ICIke0AnICcuam9pbihvZS5wYWNrYWdlZ3JvdXAucmVxdWlyZWRfcGFja2FnZXMob2UuZGF0YS50eXBlZF92YWx1ZSgnSU1BR0VfRkVBVFVSRVMnLCBkKSwgZCkpfSIKK0ZFQVRVUkVfSU5TVEFMTFt2YXJkZXB2YWx1ZV0gPSAiJHtGRUFUVVJFX0lOU1RBTEx9IgorRkVBVFVSRV9JTlNUQUxMX09QVElPTkFMID0gIiR7QCcgJy5qb2luKG9lLnBhY2thZ2Vncm91cC5vcHRpb25hbF9wYWNrYWdlcyhvZS5kYXRhLnR5cGVkX3ZhbHVlKCdJTUFHRV9GRUFUVVJFUycsIGQpLCBkKSl9IgorRkVBVFVSRV9JTlNUQUxMX09QVElPTkFMW3ZhcmRlcHZhbHVlXSA9ICIke0ZFQVRVUkVfSU5TVEFMTF9PUFRJT05BTH0iCisKKyMgRGVmaW5lIHNvbWUgdmVyeSBiYXNpYyBmZWF0dXJlIHBhY2thZ2UgZ3JvdXBzCitGRUFUVVJFX1BBQ0tBR0VTX3BhY2thZ2UtbWFuYWdlbWVudCA9ICIke1JPT1RGU19QS0dNQU5BR0V9IgorU1BMQVNIID89ICJwc3BsYXNoIgorRkVBVFVSRV9QQUNLQUdFU19zcGxhc2ggPSAiJHtTUExBU0h9IgorCitJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlkgPSAnJHtAY29tcGxlbWVudGFyeV9nbG9icygiSU1BR0VfRkVBVFVSRVMiLCBkKX0nCisKK2RlZiBjaGVja19pbWFnZV9mZWF0dXJlcyhkKToKKyAgICB2YWxpZF9mZWF0dXJlcyA9IChkLmdldFZhckZsYWcoJ0lNQUdFX0ZFQVRVUkVTJywgJ3ZhbGlkaXRlbXMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhbGlkX2ZlYXR1cmVzICs9IGQuZ2V0VmFyRmxhZ3MoJ0NPTVBMRU1FTlRBUllfR0xPQicpLmtleXMoKQorICAgIGZvciB2YXIgaW4gZDoKKyAgICAgICBpZiB2YXIuc3RhcnRzd2l0aCgiUEFDS0FHRV9HUk9VUF8iKToKKyAgICAgICAgICAgYmIud2FybigiUEFDS0FHRV9HUk9VUCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIEZFQVRVUkVfUEFDS0FHRVMgaW5zdGVhZCIpCisgICAgICAgICAgIHZhbGlkX2ZlYXR1cmVzLmFwcGVuZCh2YXJbMTQ6XSkKKyAgICAgICBlbGlmIHZhci5zdGFydHN3aXRoKCJGRUFUVVJFX1BBQ0tBR0VTXyIpOgorICAgICAgICAgICB2YWxpZF9mZWF0dXJlcy5hcHBlbmQodmFyWzE3Ol0pCisgICAgdmFsaWRfZmVhdHVyZXMuc29ydCgpCisKKyAgICBmZWF0dXJlcyA9IHNldChvZS5kYXRhLnR5cGVkX3ZhbHVlKCdJTUFHRV9GRUFUVVJFUycsIGQpKQorICAgIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICBpZiBmZWF0dXJlIG5vdCBpbiB2YWxpZF9mZWF0dXJlczoKKyAgICAgICAgICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdFWFRSQV9JTUFHRV9GRUFUVVJFUycsIGZlYXR1cmUsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUmVjaXBlKCInJXMnIGluIElNQUdFX0ZFQVRVUkVTIChhZGRlZCB2aWEgRVhUUkFfSU1BR0VfRkVBVFVSRVMpIGlzIG5vdCBhIHZhbGlkIGltYWdlIGZlYXR1cmUuIFZhbGlkIGZlYXR1cmVzOiAlcyIgJSAoZmVhdHVyZSwgJyAnLmpvaW4odmFsaWRfZmVhdHVyZXMpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFJlY2lwZSgiJyVzJyBpbiBJTUFHRV9GRUFUVVJFUyBpcyBub3QgYSB2YWxpZCBpbWFnZSBmZWF0dXJlLiBWYWxpZCBmZWF0dXJlczogJXMiICUgKGZlYXR1cmUsICcgJy5qb2luKHZhbGlkX2ZlYXR1cmVzKSkpCisKK0lNQUdFX0lOU1RBTEwgPz0gIiIKK0lNQUdFX0lOU1RBTExbdHlwZV0gPSAibGlzdCIKK2V4cG9ydCBQQUNLQUdFX0lOU1RBTEwgPz0gIiR7SU1BR0VfSU5TVEFMTH0gJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9ICR7RkVBVFVSRV9JTlNUQUxMfSIKK1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWSA/PSAiJHtGRUFUVVJFX0lOU1RBTExfT1BUSU9OQUx9IgorCisjIEltYWdlcyBhcmUgZ2VuZXJhbGx5IGJ1aWx0IGV4cGxpY2l0bHksIGRvIG5vdCBuZWVkIHRvIGJlIHBhcnQgb2Ygd29ybGQuCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworVVNFX0RFVkZTID89ICIxIgorVVNFX0RFUE1PRCA/PSAiMSIKKworUElEID0gIiR7QG9zLmdldHBpZCgpfSIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworTERDT05GSUdERVBFTkQgPz0gImxkY29uZmlnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorTERDT05GSUdERVBFTkRfbGliYy11Y2xpYmMgPSAiIgorTERDT05GSUdERVBFTkRfbGliYy1tdXNsID0gIiIKKworIyBUaGlzIGlzIG5lZWRlZCB0byBoYXZlIGRlcG1vZCBkYXRhIGluIFBLR0RBVEFfRElSLAorIyBidXQgaWYgeW91J3JlIGJ1aWxkaW5nIHNtYWxsIGluaXRyYW1mcyBpbWFnZQorIyBlLmcuIHRvIGluY2x1ZGUgaXQgaW4geW91ciBrZXJuZWwsIHlvdSBwcm9iYWJseQorIyBkb24ndCB3YW50IHRoaXMgZGVwZW5kZW5jeSwgd2hpY2ggaXMgY2F1c2luZyBkZXBlbmRlbmN5IGxvb3AKK0tFUk5FTERFUE1PRERFUEVORCA/PSAidmlydHVhbC9rZXJuZWw6ZG9fcGFja2FnZWRhdGEiCisKK2RvX3Jvb3Rmc1tkZXBlbmRzXSArPSAiIFwKKyAgICBtYWtlZGV2cy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290ICR7TERDT05GSUdERVBFTkR9IFwKKyAgICB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdXBkYXRlLXJjLmQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgXAorICAgICR7S0VSTkVMREVQTU9EREVQRU5EfSBcCisiCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlZGF0YSIKKworZGVmIGNvbW1hbmRfdmFyaWFibGVzKGQpOgorICAgIHJldHVybiBbJ1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJywnUk9PVEZTX1BSRVBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QT1NUSU5TVEFMTF9DT01NQU5EJywnT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywnT1BLR19QT1NUUFJPQ0VTU19DT01NQU5EUycsJ0lNQUdFX1BPU1RQUk9DRVNTX0NPTU1BTkQnLAorICAgICAgICAgICAgJ0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCcsJ1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EJywnUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EJywnUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQnLCdTREtfUE9TVFBST0NFU1NfQ09NTUFORCcsJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywgICAgICAgICAKKyAgICAgICAgICAgICdSUE1fUE9TVFBST0NFU1NfQ09NTUFORFMnXQorCitweXRob24gKCkgeworICAgIHZhcmlhYmxlcyA9IGNvbW1hbmRfdmFyaWFibGVzKGQpCisgICAgZm9yIHZhciBpbiB2YXJpYWJsZXM6CisgICAgICAgIGlmIGQuZ2V0VmFyKHZhciwgRmFsc2UpOgorICAgICAgICAgICAgZC5zZXRWYXJGbGFnKHZhciwgJ2Z1bmMnLCAnMScpCit9CisKK2RlZiByb290ZnNfdmFyaWFibGVzKGQpOgorICAgIGZyb20gb2Uucm9vdGZzIGltcG9ydCB2YXJpYWJsZV9kZXBlbmRzCisgICAgdmFyaWFibGVzID0gWydJTUFHRV9ERVZJQ0VfVEFCTEVTJywnQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCdJTUFHRV9UWVBFREVQXycsJ0lNQUdFX1RZUEVTX01BU0tFRCcsJ0lNQUdFX1JPT1RGU19BTElHTk1FTlQnLCdJTUFHRV9PVkVSSEVBRF9GQUNUT1InLCdJTUFHRV9ST09URlNfU0laRScsJ0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRScsCisgICAgICAgICAgICAgICAgICdJTUFHRV9ST09URlNfTUFYU0laRScsJ0lNQUdFX05BTUUnLCdJTUFHRV9MSU5LX05BTUUnLCdJTUFHRV9NQU5JRkVTVCcsJ0RFUExPWV9ESVJfSU1BR0UnLCdSTV9PTERfSU1BR0UnLCdJTUFHRV9GU1RZUEVTJywnSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywnSU1BR0VfTElOR1VBUycsJ1NES19PUycsCisgICAgICAgICAgICAgICAgICdTREtfT1VUUFVUJywnU0RLUEFUSE5BVElWRScsJ1NES1RBUkdFVFNZU1JPT1QnLCdTREtfRElSJywnU0RLX1ZFTkRPUicsJ1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWScsJ1NES19QQUNLQUdFX0FSQ0hTJywnU0RLX09VVFBVVCcsJ1NES1RBUkdFVFNZU1JPT1QnLCdNVUxUSUxJQlJFX0FMTE9XX1JFUCcsCisgICAgICAgICAgICAgICAgICdNVUxUSUxJQl9URU1QX1JPT1RGUycsJ01VTFRJTElCX1ZBUklBTlRTJywnTVVMVElMSUJTJywnQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCdNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMnLCdCQURfUkVDT01NRU5EQVRJT05TJywnTk9fUkVDT01NRU5EQVRJT05TJywnUEFDS0FHRV9BUkNIUycsCisgICAgICAgICAgICAgICAgICdQQUNLQUdFX0NMQVNTRVMnLCdUQVJHRVRfVkVORE9SJywnVEFSR0VUX1ZFTkRPUicsJ1RBUkdFVF9BUkNIJywnVEFSR0VUX09TJywnT1ZFUlJJREVTJywnQkJFWFRFTkRWQVJJQU5UJywnRkVFRF9ERVBMT1lESVJfQkFTRV9VUkknLCdJTlRFUkNFUFRfRElSJywnVVNFX0RFVkZTJywKKyAgICAgICAgICAgICAgICAgJ0NPTVBSRVNTSU9OVFlQRVMnLCAnSU1BR0VfR0VOX0RFQlVHRlMnXQorICAgIHZhcmlhYmxlcy5leHRlbmQoY29tbWFuZF92YXJpYWJsZXMoZCkpCisgICAgdmFyaWFibGVzLmV4dGVuZCh2YXJpYWJsZV9kZXBlbmRzKGQpKQorICAgIHJldHVybiAiICIuam9pbih2YXJpYWJsZXMpCisKK2RvX3Jvb3Rmc1t2YXJkZXBzXSArPSAiJHtAcm9vdGZzX3ZhcmlhYmxlcyhkKX0iCisKK2RvX2J1aWxkW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19kZXBsb3kiCisKK2RlZiBidWlsZF9saXZlKGQpOgorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GU1RZUEVTIiwgImxpdmUiLCAibGl2ZSIsICIwIiwgZCkgPT0gIjAiOiAjIGxpdmUgaXMgbm90IHNldCBidXQgaG9iIG1pZ2h0IHNldCBpc28gb3IgaGRkaW1nCisgICAgICAgIGQuc2V0VmFyKCdOT0lTTycsIGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9GU1RZUEVTJywgImlzbyIsICIwIiwgIjEiLCBkKSkKKyAgICAgICAgZC5zZXRWYXIoJ05PSEREJywgYmIudXRpbHMuY29udGFpbnMoJ0lNQUdFX0ZTVFlQRVMnLCAiaGRkaW1nIiwgIjAiLCAiMSIsIGQpKQorICAgICAgICBpZiBkLmdldFZhcignTk9JU08nLCBUcnVlKSA9PSAiMCIgb3IgZC5nZXRWYXIoJ05PSEREJywgVHJ1ZSkgPT0gIjAiOgorICAgICAgICAgICAgcmV0dXJuICJpbWFnZS1saXZlIgorICAgICAgICByZXR1cm4gIiIKKyAgICByZXR1cm4gImltYWdlLWxpdmUiCisKK0lNQUdFX1RZUEVfbGl2ZSA9ICIke0BidWlsZF9saXZlKGQpfSIKK2luaGVyaXQgJHtJTUFHRV9UWVBFX2xpdmV9CisKK0lNQUdFX1RZUEVfdm0gPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GU1RZUEVTIiwgWyJ2bWRrIiwgInZkaSIsICJxY293MiJdLCAiaW1hZ2Utdm0iLCAiIiwgZCl9JworaW5oZXJpdCAke0lNQUdFX1RZUEVfdm19CisKK3B5dGhvbiAoKSB7CisgICAgZGVwcyA9ICIgIiArIGltYWdldHlwZXNfZ2V0ZGVwZW5kcyhkKQorICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcm9vdGZzJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgZGVwcyA9ICIiCisgICAgZm9yIGRlcCBpbiAoZC5nZXRWYXIoJ0VYVFJBX0lNQUdFREVQRU5EUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICBkZXBzICs9ICIgJXM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIgJSBkZXAKKyAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1aWxkJywgJ2RlcGVuZHMnLCBkZXBzKQorCisgICAgI3Byb2Nlc3MgSU1BR0VfRkVBVFVSRVMsIHdlIG11c3QgZG8gdGhpcyBiZWZvcmUgcnVudGltZV9tYXBwaW5nX3JlbmFtZQorICAgICNDaGVjayBmb3IgcmVwbGFjZXMgaW1hZ2UgZmVhdHVyZXMKKyAgICBmZWF0dXJlcyA9IHNldChvZS5kYXRhLnR5cGVkX3ZhbHVlKCdJTUFHRV9GRUFUVVJFUycsIGQpKQorICAgIHJlbWFpbl9mZWF0dXJlcyA9IGZlYXR1cmVzLmNvcHkoKQorICAgIGZvciBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICByZXBsYWNlcyA9IHNldCgoZC5nZXRWYXIoIklNQUdFX0ZFQVRVUkVTX1JFUExBQ0VTXyVzIiAlIGZlYXR1cmUsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorICAgICAgICByZW1haW5fZmVhdHVyZXMgLT0gcmVwbGFjZXMKKworICAgICNDaGVjayBmb3IgY29uZmxpY3QgaW1hZ2UgZmVhdHVyZXMKKyAgICBmb3IgZmVhdHVyZSBpbiByZW1haW5fZmVhdHVyZXM6CisgICAgICAgIGNvbmZsaWN0cyA9IHNldCgoZC5nZXRWYXIoIklNQUdFX0ZFQVRVUkVTX0NPTkZMSUNUU18lcyIgJSBmZWF0dXJlLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICAgICAgdGVtcCA9IGNvbmZsaWN0cyAmIHJlbWFpbl9mZWF0dXJlcworICAgICAgICBpZiB0ZW1wOgorICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGNvbnRhaW5zIGNvbmZsaWN0aW5nIElNQUdFX0ZFQVRVUkVTICVzICVzIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgZmVhdHVyZSwgJyAnLmpvaW4obGlzdCh0ZW1wKSkpKQorCisgICAgZC5zZXRWYXIoJ0lNQUdFX0ZFQVRVUkVTJywgJyAnLmpvaW4obGlzdChyZW1haW5fZmVhdHVyZXMpKSkKKworICAgIGNoZWNrX2ltYWdlX2ZlYXR1cmVzKGQpCisgICAgaW5pdHJhbWZzX2ltYWdlID0gZC5nZXRWYXIoJ0lOSVRSQU1GU19JTUFHRScsIFRydWUpIG9yICIiCisgICAgaWYgaW5pdHJhbWZzX2ltYWdlICE9ICIiOgorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1aWxkJywgJ2RlcGVuZHMnLCAiICVzOmRvX2J1bmRsZV9pbml0cmFtZnMiICUgIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX2J1bmRsZV9pbml0cmFtZnMnLCAnZGVwZW5kcycsICIgJXM6ZG9fcm9vdGZzIiAlIGluaXRyYW1mc19pbWFnZSkKK30KKworSU1BR0VfQ0xBU1NFUyArPSAiaW1hZ2VfdHlwZXMiCitpbmhlcml0ICR7SU1BR0VfQ0xBU1NFU30KKworSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCA/PSAiIgorCisjIFphcCB0aGUgcm9vdCBwYXNzd29yZCBpZiBkZWJ1Zy10d2Vha3MgZmVhdHVyZSBpcyBub3QgZW5hYmxlZAorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gJyR7QGJiLnV0aWxzLmNvbnRhaW5zX2FueSgiSU1BR0VfRkVBVFVSRVMiLCBbICdkZWJ1Zy10d2Vha3MnLCAnZW1wdHktcm9vdC1wYXNzd29yZCcgXSwgIiIsICJ6YXBfZW1wdHlfcm9vdF9wYXNzd29yZCA7ICIsZCl9JworCisjIEFsbG93IGRyb3BiZWFyL29wZW5zc2ggdG8gYWNjZXB0IGxvZ2lucyBmcm9tIGFjY291bnRzIHdpdGggYW4gZW1wdHkgcGFzc3dvcmQgc3RyaW5nIGlmIGRlYnVnLXR3ZWFrcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GRUFUVVJFUyIsIFsgJ2RlYnVnLXR3ZWFrcycsICdhbGxvdy1lbXB0eS1wYXNzd29yZCcgXSwgInNzaF9hbGxvd19lbXB0eV9wYXNzd29yZDsgIiwgIiIsZCl9JworCisjIEVuYWJsZSBwb3N0aW5zdCBsb2dnaW5nIGlmIGRlYnVnLXR3ZWFrcyBpcyBlbmFibGVkCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAnJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCJJTUFHRV9GRUFUVVJFUyIsIFsgJ2RlYnVnLXR3ZWFrcycsICdwb3N0LWluc3RhbGwtbG9nZ2luZycgXSwgInBvc3RpbnN0X2VuYWJsZV9sb2dnaW5nOyAiLCAiIixkKX0nCisKKyMgQ3JlYXRlIC9ldGMvdGltZXN0YW1wIGR1cmluZyBpbWFnZSBjb25zdHJ1Y3Rpb24gdG8gZ2l2ZSBhIHJlYXNvbmFibHkgc2FuZSBkZWZhdWx0IHRpbWUgc2V0dGluZworUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkQgKz0gInJvb3Rmc191cGRhdGVfdGltZXN0YW1wIDsgIgorCisjIFR3ZWFrIHRoZSBtb3VudCBvcHRpb25zIGZvciByb290ZnMgaW4gL2V0Yy9mc3RhYiBpZiByZWFkLW9ubHktcm9vdGZzIGlzIGVuYWJsZWQKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsICJyZWFkX29ubHlfcm9vdGZzX2hvb2s7ICIsICIiLGQpfScKKworIyBXcml0ZSBtYW5pZmVzdAorSU1BR0VfTUFOSUZFU1QgPSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5tYW5pZmVzdCIKK1JPT1RGU19QT1NUVU5JTlNUQUxMX0NPTU1BTkQgPSsgIndyaXRlX2ltYWdlX21hbmlmZXN0IDsgIgorIyBTZXQgZGVmYXVsdCBwb3N0aW5zdCBsb2cgZmlsZQorUE9TVElOU1RfTE9HRklMRSA/PSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvcG9zdGluc3RhbGwubG9nIgorIyBTZXQgZGVmYXVsdCB0YXJnZXQgZm9yIHN5c3RlbWQgaW1hZ2VzCitTWVNURU1EX0RFRkFVTFRfVEFSR0VUID89ICcke0BiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAieDExLWJhc2UiLCAiZ3JhcGhpY2FsLnRhcmdldCIsICJtdWx0aS11c2VyLnRhcmdldCIsIGQpfScKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICcke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInN5c3RlbWQiLCAic2V0X3N5c3RlbWRfZGVmYXVsdF90YXJnZXQ7ICIsICIiLCBkKX0nCisKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EICs9ICdlbXB0eV92YXJfdm9sYXRpbGU7JworCisjIHNvbWUgZGVmYXVsdCBsb2NhbGVzCitJTUFHRV9MSU5HVUFTID89ICJkZS1kZSBmci1mciBlbi1nYiIKKworTElOR1VBU19JTlNUQUxMID89ICIke0AiICIuam9pbihtYXAobGFtYmRhIHM6ICJsb2NhbGUtYmFzZS0lcyIgJSBzLCBkLmdldFZhcignSU1BR0VfTElOR1VBUycsIFRydWUpLnNwbGl0KCkpKX0iCisKKyMgUHJlZmVyIGltYWdlLCBidXQgdXNlIHRoZSBmYWxsYmFjayBmaWxlcyBmb3IgbG9va3VwcyBpZiB0aGUgaW1hZ2Ugb25lcworIyBhcmVuJ3QgeWV0IGF2YWlsYWJsZS4KK1BTRVVET19QQVNTV0QgPSAiJHtJTUFHRV9ST09URlN9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKKworZG9fcm9vdGZzW2RpcnNdID0gIiR7VE9QRElSfSIKK2RvX3Jvb3Rmc1tsb2NrZmlsZXNdICs9ICIke0lNQUdFX1JPT1RGU30ubG9jayIKK2RvX3Jvb3Rmc1tjbGVhbmRpcnNdICs9ICIke1N9IgorCisjIE11c3QgY2FsbCByZWFsX2RvX3Jvb3RmcygpIGZyb20gaW5zaWRlIGhlcmUsIHJhdGhlciB0aGFuIGFzIGEgc2VwYXJhdGUKKyMgdGFzaywgc28gdGhhdCB3ZSBoYXZlIGEgc2luZ2xlIGZha2Vyb290IGNvbnRleHQgZm9yIHRoZSB3aG9sZSBwcm9jZXNzLgorZG9fcm9vdGZzW3VtYXNrXSA9ICIwMjIiCisKKyMgQSBob29rIGZ1bmN0aW9uIHRvIHN1cHBvcnQgcmVhZC1vbmx5LXJvb3RmcyBJTUFHRV9GRUFUVVJFUworcmVhZF9vbmx5X3Jvb3Rmc19ob29rICgpIHsKKwkjIFR3ZWFrIHRoZSBtb3VudCBvcHRpb24gYW5kIGZzX3Bhc3NubyBmb3Igcm9vdGZzIGluIGZzdGFiCisJc2VkIC1pIC1lICcvXlsjWzpzcGFjZTpdXSpcL2Rldlwvcm9vdC97cy9kZWZhdWx0cy9yby87cy9cKFtbOnNwYWNlOl1dKltbOmRpZ2l0Ol1dXClcKFtbOnNwYWNlOl1dKlwpW1s6ZGlnaXQ6XV0kL1wxXDIwL30nICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdmluaXQiLCAidHJ1ZSIsICJmYWxzZSIsIGQpfTsgdGhlbgorCQkjIENoYW5nZSB0aGUgdmFsdWUgb2YgUk9PVEZTX1JFQURfT05MWSBpbiAvZXRjL2RlZmF1bHQvcmNTIHRvIHllcworCQlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9yY1MgXTsgdGhlbgorCQkJc2VkIC1pICdzL1JPT1RGU19SRUFEX09OTFk9bm8vUk9PVEZTX1JFQURfT05MWT15ZXMvJyAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvcmNTCisJCWZpCisJCSMgUnVuIHBvcHVsYXRlLXZvbGF0aWxlLnNoIGF0IHJvb3RmcyB0aW1lIHRvIHNldCB1cCBiYXNpYyBmaWxlcworCQkjIGFuZCBkaXJlY3RvcmllcyB0byBzdXBwb3J0IHJlYWQtb25seSByb290ZnMuCisJCWlmIFsgLXggJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorCQkJJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2gKKwkJZmkKKwkJIyBJZiB3ZSdyZSB1c2luZyBvcGVuc3NoIGFuZCB0aGUgL2V0Yy9zc2ggZGlyZWN0b3J5IGhhcyBubyBwcmUtZ2VuZXJhdGVkIGtleXMsCisJCSMgd2Ugc2hvdWxkIGNvbmZpZ3VyZSBvcGVuc3NoIHRvIHVzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIC9ldGMvc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJCSMgYW5kIHRoZSBrZXlzIHVuZGVyIC92YXIvcnVuL3NzaC4KKwkJaWYgWyAtZCAke0lNQUdFX1JPT1RGU30vZXRjL3NzaCBdOyB0aGVuCisJCQlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkgXTsgdGhlbgorCQkJCWVjaG8gIlNZU0NPTkZESVI9L2V0Yy9zc2giID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCQllY2hvICJTU0hEX09QVFM9IiA+PiAke0lNQUdFX1JPT1RGU30vZXRjL2RlZmF1bHQvc3NoCisJCQllbHNlCisJCQkJZWNobyAiU1lTQ09ORkRJUj0vdmFyL3J1bi9zc2giID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvZGVmYXVsdC9zc2gKKwkJCQllY2hvICJTU0hEX09QVFM9Jy1mIC9ldGMvc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5JyIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9kZWZhdWx0L3NzaAorCQkJZmkKKwkJZmkKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgInRydWUiLCAiZmFsc2UiLCBkKX07IHRoZW4KKwkgICAgIyBVcGRhdGUgdXNlciBkYXRhYmFzZSBmaWxlcyBzbyB0aGF0IHNlcnZpY2VzIGRvbid0IGZhaWwgZm9yIGEgcmVhZC1vbmx5IHN5c3RlbWQgc3lzdGVtCisJICAgIGZvciBjb25mZmlsZSBpbiAke0lNQUdFX1JPT1RGU30vdXNyL2xpYi9zeXN1c2Vycy5kL3N5c3RlbWQuY29uZiAke0lNQUdFX1JPT1RGU30vdXNyL2xpYi9zeXN1c2Vycy5kL3N5c3RlbWQtcmVtb3RlLmNvbmY7IGRvCisJCVsgLWUgJGNvbmZmaWxlIF0gfHwgY29udGludWUKKwkJZ3JlcCAtdiAiXiMiICRjb25mZmlsZSB8IHNlZCAtZSAnL14kL2QnIHwgd2hpbGUgcmVhZCB0eXBlIG5hbWUgaWQgY29tbWVudDsgZG8KKwkJICAgIGlmIFsgIiR0eXBlIiA9ICJ1IiBdOyB0aGVuCisJCQl1c2VyYWRkX3BhcmFtcz0iIgorCQkJWyAiJGlkIiAhPSAiLSIgXSAmJiB1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tdWlkICRpZCIKKwkJCVsgIiRjb21tZW50IiAhPSAiLSIgXSAmJiB1c2VyYWRkX3BhcmFtcz0iJHVzZXJhZGRfcGFyYW1zIC0tY29tbWVudCAkY29tbWVudCIKKwkJCXVzZXJhZGRfcGFyYW1zPSIkdXNlcmFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCisJCQlldmFsIHVzZXJhZGQgLS1yb290ICR7SU1BR0VfUk9PVEZTfSAkdXNlcmFkZF9wYXJhbXMgfHwgdHJ1ZQorCQkgICAgZWxpZiBbICIkdHlwZSIgPSAiZyIgXTsgdGhlbgorCQkJZ3JvdXBhZGRfcGFyYW1zPSIiCisJCQlbICIkaWQiICE9ICItIiBdICYmIGdyb3VwYWRkX3BhcmFtcz0iJGdyb3VwYWRkX3BhcmFtcyAtLWdpZCAkaWQiCisJCQlncm91cGFkZF9wYXJhbXM9IiRncm91cGFkZF9wYXJhbXMgLS1zeXN0ZW0gJG5hbWUiCisJCQlldmFsIGdyb3VwYWRkIC0tcm9vdCAke0lNQUdFX1JPT1RGU30gJGdyb3VwYWRkX3BhcmFtcyB8fCB0cnVlCisJCSAgICBmaQorCQlkb25lCisJICAgIGRvbmUKKwlmaQorfQorCitQQUNLQUdFX0VYQ0xVREUgPz89ICIiCitQQUNLQUdFX0VYQ0xVREVbdHlwZV0gPSAibGlzdCIKKworcHl0aG9uIHJvb3Rmc19wcm9jZXNzX2lnbm9yZSgpIHsKKyAgICBleGNsX3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9FWENMVURFIiwgVHJ1ZSkuc3BsaXQoKQorICAgIGluc3RfcGtncyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0lOU1RBTEwiLCBUcnVlKS5zcGxpdCgpCisgICAgaW5zdF9hdHRlbXB0X3BrZ3MgPSBkLmdldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgVHJ1ZSkuc3BsaXQoKQorCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfSU5TVEFMTF9PUklHJywgJyAnLmpvaW4oaW5zdF9wa2dzKSkKKyAgICBkLnNldFZhcignUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZJywgJyAnLmpvaW4oaW5zdF9hdHRlbXB0X3BrZ3MpKQorCisgICAgZm9yIHBrZyBpbiBleGNsX3BrZ3M6CisgICAgICAgIGlmIHBrZyBpbiBpbnN0X3BrZ3M6CisgICAgICAgICAgICBiYi53YXJuKCJQYWNrYWdlICVzLCBzZXQgdG8gYmUgZXhjbHVkZWQsIGlzIGluICVzIFBBQ0tBR0VfSU5TVEFMTCAoJXMpLiAgSXQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QuIiAlIChwa2csIGQuZ2V0VmFyKCdQTicsIFRydWUpLCBpbnN0X3BrZ3MpKQorICAgICAgICAgICAgaW5zdF9wa2dzLnJlbW92ZShwa2cpCisKKyAgICAgICAgaWYgcGtnIGluIGluc3RfYXR0ZW1wdF9wa2dzOgorICAgICAgICAgICAgYmIud2FybigiUGFja2FnZSAlcywgc2V0IHRvIGJlIGV4Y2x1ZGVkLCBpcyBpbiAlcyBQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkgKCVzKS4gIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LiIgJSAocGtnLCBkLmdldFZhcignUE4nLCBUcnVlKSwgaW5zdF9wa2dzKSkKKyAgICAgICAgICAgIGluc3RfYXR0ZW1wdF9wa2dzLnJlbW92ZShwa2cpCisKKyAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgJyAnLmpvaW4oaW5zdF9wa2dzKSkKKyAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMX0FUVEVNUFRPTkxZIiwgJyAnLmpvaW4oaW5zdF9hdHRlbXB0X3BrZ3MpKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX3Byb2Nlc3NfaWdub3JlIgorCisjIFdlIGhhdmUgdG8gZGVsYXkgdGhlIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUgdW50aWwganVzdCBiZWZvcmUgcm9vdGZzIHJ1bnMKKyMgb3RoZXJ3aXNlLCB0aGUgbXVsdGlsaWIgcmVuYW1pbmcgY291bGQgc3RlcCBpbiBhbmQgc3F1YXNoIGFueSBmaXh1cHMgdGhhdAorIyBtYXkgaGF2ZSBvY2N1cnJlZC4KK3B5dGhvbiByb290ZnNfcnVudGltZV9tYXBwaW5nKCkgeworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJQQUNLQUdFX0lOU1RBTEwiLCBwbiwgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiLCBwbiwgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJCQURfUkVDT01NRU5EQVRJT05TIiwgcG4sIGQpCit9Citkb19yb290ZnNbcHJlZnVuY3NdICs9ICJyb290ZnNfcnVudGltZV9tYXBwaW5nIgorCitmYWtlcm9vdCBweXRob24gZG9fcm9vdGZzICgpIHsKKyAgICBmcm9tIG9lLnJvb3RmcyBpbXBvcnQgY3JlYXRlX3Jvb3RmcworICAgIGZyb20gb2UuaW1hZ2UgaW1wb3J0IGNyZWF0ZV9pbWFnZQorICAgIGZyb20gb2UubWFuaWZlc3QgaW1wb3J0IGNyZWF0ZV9tYW5pZmVzdAorCisgICAgIyBnZW5lcmF0ZSB0aGUgaW5pdGlhbCBtYW5pZmVzdAorICAgIGNyZWF0ZV9tYW5pZmVzdChkKQorCisgICAgIyBnZW5lcmF0ZSByb290ZnMKKyAgICBjcmVhdGVfcm9vdGZzKGQpCisKKyAgICAjIGdlbmVyYXRlIGZpbmFsIGltYWdlcworICAgIGNyZWF0ZV9pbWFnZShkKQorfQorCitpbnNlcnRfZmVlZF91cmlzICgpIHsKKwkKKwllY2hvICJCdWlsZGluZyBmZWVkcyBmb3IgWyR7RElTVFJPfV0uLiIKKworCWZvciBsaW5lIGluICR7RkVFRF9VUklTfQorCWRvCisJCSMgc3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzL3RhYnMsIHRoZW4gc3BsaXQgaW50byBuYW1lIGFuZCB1cmkKKwkJbGluZV9jbGVhbj0iYGVjaG8gIiRsaW5lInxzZWQgJ3MvXlsgXHRdKi8vO3MvWyBcdF0qJC8vJ2AiCisJCWZlZWRfbmFtZT0iYGVjaG8gIiRsaW5lX2NsZWFuIiB8IHNlZCAtbiAncy9cKC4qXCkjI1woLipcKS9cMS9wJ2AiCisJCWZlZWRfdXJpPSJgZWNobyAiJGxpbmVfY2xlYW4iIHwgc2VkIC1uICdzL1woLipcKSMjXCguKlwpL1wyL3AnYCIKKwkJCisJCWVjaG8gIkFkZGVkICRmZWVkX25hbWUgZmVlZCB3aXRoIFVSTCAkZmVlZF91cmkiCisJCQorCQkjIGluc2VydCBuZXcgZmVlZC1zb3VyY2VzCisJCWVjaG8gInNyYy9neiAkZmVlZF9uYW1lICRmZWVkX3VyaSIgPj4gJHtJTUFHRV9ST09URlN9L2V0Yy9vcGtnLyR7ZmVlZF9uYW1lfS1mZWVkLmNvbmYKKwlkb25lCit9CisKK01VTFRJTElCUkVfQUxMT1dfUkVQID0uICIke2Jhc2VfYmluZGlyfXwke2Jhc2Vfc2JpbmRpcn18JHtiaW5kaXJ9fCR7c2JpbmRpcn18JHtsaWJleGVjZGlyfXwke3N5c2NvbmZkaXJ9fCR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldnwvbGliL21vZHVsZXMvW14vXSovbW9kdWxlcy4qfCIKK01VTFRJTElCX0NIRUNLX0ZJTEUgPSAiJHtXT1JLRElSfS9tdWx0aWxpYl9jaGVjay5weSIKK01VTFRJTElCX1RFTVBfUk9PVEZTID0gIiR7V09SS0RJUn0vbXVsdGlsaWIiCisKKyMgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBkaXNhbGxvdyBlbXB0eSByb290IHBhc3N3b3JkIGlmICdkZWJ1Zy10d2Vha3MnIGlzIG5vdCBpbiBJTUFHRV9GRUFUVVJFUy4KK3phcF9lbXB0eV9yb290X3Bhc3N3b3JkICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvc2hhZG93IF07IHRoZW4KKwkJc2VkIC1pICdzJV5yb290Ojolcm9vdDoqOiUnICR7SU1BR0VfUk9PVEZTfS9ldGMvc2hhZG93CisgICAgICAgIGZpCisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30vZXRjL3Bhc3N3ZCBdOyB0aGVuCisJCXNlZCAtaSAncyVecm9vdDo6JXJvb3Q6KjolJyAke0lNQUdFX1JPT1RGU30vZXRjL3Bhc3N3ZAorCWZpCit9IAorCisjIGFsbG93IGRyb3BiZWFyL29wZW5zc2ggdG8gYWNjZXB0IHJvb3QgbG9naW5zIGFuZCBsb2dpbnMgZnJvbSBhY2NvdW50cyB3aXRoIGFuIGVtcHR5IHBhc3N3b3JkIHN0cmluZworc3NoX2FsbG93X2VtcHR5X3Bhc3N3b3JkICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnIF07IHRoZW4KKwkJc2VkIC1pICdzL15bI1s6c3BhY2U6XV0qUGVybWl0Um9vdExvZ2luLiovUGVybWl0Um9vdExvZ2luIHllcy8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJCXNlZCAtaSAncy9eWyNbOnNwYWNlOl1dKlBlcm1pdEVtcHR5UGFzc3dvcmRzLiovUGVybWl0RW1wdHlQYXNzd29yZHMgeWVzLycgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorCisJaWYgWyAtZSAke0lNQUdFX1JPT1RGU30ke3NiaW5kaXJ9L2Ryb3BiZWFyIF0gOyB0aGVuCisJCWlmIGdyZXAgLXEgRFJPUEJFQVJfRVhUUkFfQVJHUyAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIgMj4vZGV2L251bGwgOyB0aGVuCisJCQlpZiAhIGdyZXAgLXEgIkRST1BCRUFSX0VYVFJBX0FSR1M9LiotQiIgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2Ryb3BiZWFyIDsgdGhlbgorCQkJCXNlZCAtaSAncy9eRFJPUEJFQVJfRVhUUkFfQVJHUz0iKlwoW14iXSpcKSIqL0RST1BCRUFSX0VYVFJBX0FSR1M9IlwxIC1CIi8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kcm9wYmVhcgorCQkJZmkKKwkJZWxzZQorCQkJcHJpbnRmICdcbkRST1BCRUFSX0VYVFJBX0FSR1M9Ii1CIlxuJyA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvZHJvcGJlYXIKKwkJZmkKKwlmaQorCisJaWYgWyAtZCAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3BhbS5kIF0gOyB0aGVuCisJCXNlZCAtaSAncy9udWxsb2tfc2VjdXJlL251bGxvay8nICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vcGFtLmQvKgorCWZpCit9CisKKyMgRGlzYWJsZSBETlMgbG9va3VwcywgdGhlIFNTSF9ESVNBQkxFX0ROU19MT09LVVAgY2FuIGJlIG92ZXJyaWRkZW4gdG8gYWxsb3cKKyMgZGlzdHJvcyB0byBjaG9vc2Ugbm90IHRvIHRha2UgdGhpcyBjaGFuZ2UKK1NTSF9ESVNBQkxFX0ROU19MT09LVVAgPz0gIiBzc2hfZGlzYWJsZV9kbnNfbG9va3VwIDsgIgorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRfYXBwZW5kX3FlbXVhbGwgPSAiJHtTU0hfRElTQUJMRV9ETlNfTE9PS1VQfSIKK3NzaF9kaXNhYmxlX2Ruc19sb29rdXAgKCkgeworCWlmIFsgLWUgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgXTsgdGhlbgorCQlzZWQgLWkgLWUgJ3M6I1VzZUROUyB5ZXM6VXNlRE5TIG5vOicgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcKKwlmaQorfQorCisjIEVuYWJsZSBwb3N0aW5zdCBsb2dnaW5nIGlmIGRlYnVnLXR3ZWFrcyBpcyBlbmFibGVkCitwb3N0aW5zdF9lbmFibGVfbG9nZ2luZyAoKSB7CisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisJZWNobyAiUE9TVElOU1RfTE9HR0lORz0xIiA+PiAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcG9zdGluc3QKKwllY2hvICJMT0dGSUxFPSR7UE9TVElOU1RfTE9HRklMRX0iID4+ICR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9wb3N0aW5zdAorfQorCisjIE1vZGlmeSBzeXN0ZW1kIGRlZmF1bHQgdGFyZ2V0CitzZXRfc3lzdGVtZF9kZWZhdWx0X3RhcmdldCAoKSB7CisJaWYgWyAtZCAke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtIC1hIC1lICR7SU1BR0VfUk9PVEZTfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJHtTWVNURU1EX0RFRkFVTFRfVEFSR0VUfSBdOyB0aGVuCisJCWxuIC1zZiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyR7U1lTVEVNRF9ERUZBVUxUX1RBUkdFVH0gJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS9kZWZhdWx0LnRhcmdldAorCWZpCit9CisKKyMgSWYgL3Zhci92b2xhdGlsZSBpcyBub3QgZW1wdHksIHdlIGhhdmUgc2VlbiBwcm9ibGVtcyB3aGVyZSBwcm9ncmFtcyBzdWNoIGFzIHRoZQorIyBqb3VybmFsIG1ha2UgYXNzdW1wdGlvbnMgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIC92YXIvdm9sYXRpbGUuIFRoZSBqb3VybmFsCisjIHdvdWxkIHRoZW4gd3JpdGUgdG8gL3Zhci92b2xhdGlsZSBiZWZvcmUgaXQgd2FzIG1vdW50ZWQsIHRodXMgaGlkaW5nIHRoZQorIyBpdGVtcyBwcmV2aW91c2x5IHdyaXR0ZW4uCisjCisjIFRoaXMgY2hhbmdlIGlzIHRvIGF0dGVtcHQgdG8gZml4IHRob3NlIHR5cGVzIG9mIGlzc3VlcyBpbiBhIHdheSB0aGF0IGRvZXNuJ3QKKyMgYWZmZWN0IHVzZXJzIHRoYXQgbWF5IG5vdCBiZSB1c2luZyAvdmFyL3ZvbGF0aWxlLgorZW1wdHlfdmFyX3ZvbGF0aWxlICgpIHsKKwlpZiBbIC1lICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIgXTsgdGhlbgorCQltYXRjaD1gYXdrICckMSAhfiAiIyIgJiYgJDIgfiAvXC92YXJcL3ZvbGF0aWxlL3twcmludCAkMn0nICR7SU1BR0VfUk9PVEZTfS9ldGMvZnN0YWIgMj4gL2Rldi9udWxsYAorCQlpZiBbIC1uICIkbWF0Y2giIF07IHRoZW4KKwkJCWZpbmQgJHtJTUFHRV9ST09URlN9L3Zhci92b2xhdGlsZSAtbWluZGVwdGggMSAtZGVsZXRlCisJCWZpCisJZmkKK30KKworIyBUdXJuIGFueSBzeW1ib2xpYyAvc2Jpbi9pbml0IGxpbmsgaW50byBhIGZpbGUKK3JlbW92ZV9pbml0X2xpbmsgKCkgeworCWlmIFsgLWggJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCBdOyB0aGVuCisJCUxJTktGSUxFPSR7SU1BR0VfUk9PVEZTfWByZWFkbGluayAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0YAorCQlybSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0CisJCWNwICRMSU5LRklMRSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0CisJZmkKK30KKworbWFrZV96aW1hZ2Vfc3ltbGlua19yZWxhdGl2ZSAoKSB7CisJaWYgWyAtTCAke0lNQUdFX1JPT1RGU30vYm9vdC96SW1hZ2UgXTsgdGhlbgorCQkoY2QgJHtJTUFHRV9ST09URlN9L2Jvb3QvICYmIGZvciBpIGluIGBscyB6SW1hZ2UtKiB8IHNvcnRgOyBkbyBsbiAtc2YgJGkgekltYWdlOyBkb25lKQorCWZpCit9CisKK3B5dGhvbiB3cml0ZV9pbWFnZV9tYW5pZmVzdCAoKSB7CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgd2l0aCBvcGVuKGQuZ2V0VmFyKCdJTUFHRV9NQU5JRkVTVCcsIFRydWUpLCAndysnKSBhcyBpbWFnZV9tYW5pZmVzdDoKKyAgICAgICAgaW1hZ2VfbWFuaWZlc3Qud3JpdGUoaW1hZ2VfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgJ3ZlcicpKQorICAgICAgICBpbWFnZV9tYW5pZmVzdC53cml0ZSgiXG4iKQorfQorCisjIENhbiBiZSB1c2UgdG8gY3JlYXRlIC9ldGMvdGltZXN0YW1wIGR1cmluZyBpbWFnZSBjb25zdHJ1Y3Rpb24gdG8gZ2l2ZSBhIHJlYXNvbmFibHkgCisjIHNhbmUgZGVmYXVsdCB0aW1lIHNldHRpbmcKK3Jvb3Rmc191cGRhdGVfdGltZXN0YW1wICgpIHsKKwlkYXRlIC11ICslNFklMm0lMmQlMkglMk0lMlMgPiR7SU1BR0VfUk9PVEZTfS9ldGMvdGltZXN0YW1wCit9CisKKyMgUHJldmVudCBYIGZyb20gYmVpbmcgc3RhcnRlZAorcm9vdGZzX25vX3hfc3RhcnR1cCAoKSB7CisJaWYgWyAtZiAke0lNQUdFX1JPT1RGU30vZXRjL2luaXQuZC94c2VydmVyLW5vZG0gXTsgdGhlbgorCQljaG1vZCBhLXggJHtJTUFHRV9ST09URlN9L2V0Yy9pbml0LmQveHNlcnZlci1ub2RtCisJZmkKK30KKworcm9vdGZzX3RyaW1fc2NoZW1hcyAoKSB7CisJZm9yIHNjaGVtYSBpbiAke0lNQUdFX1JPT1RGU30vZXRjL2djb25mL3NjaGVtYXMvKi5zY2hlbWFzCisJZG8KKwkJIyBOZWVkIHRoaXMgaW4gY2FzZSBubyBmaWxlcyBleGlzdAorCQlpZiBbIC1lICRzY2hlbWEgXTsgdGhlbgorCQkJb2UtdHJpbS1zY2hlbWFzICRzY2hlbWEgPiAkc2NoZW1hLm5ldworCQkJbXYgJHNjaGVtYS5uZXcgJHNjaGVtYQorCQlmaQorCWRvbmUKK30KKworcm9vdGZzX2NoZWNrX2hvc3RfdXNlcl9jb250YW1pbmF0ZWQgKCkgeworCWNvbnRhbWluYXRlZD0iJHtXT1JLRElSfS9ob3N0LXVzZXItY29udGFtaW5hdGVkLnR4dCIKKwlIT1NUX1VTRVJfVUlEPSIkKFBTRVVET19VTkxPQUQ9MSBpZCAtdSkiCisJSE9TVF9VU0VSX0dJRD0iJChQU0VVRE9fVU5MT0FEPTEgaWQgLWcpIgorCisJZmluZCAiJHtJTUFHRV9ST09URlN9IiAtd2hvbGVuYW1lICIke0lNQUdFX1JPT1RGU30vaG9tZSIgLXBydW5lIFwKKwkgICAgLXVzZXIgIiRIT1NUX1VTRVJfVUlEIiAtbyAtZ3JvdXAgIiRIT1NUX1VTRVJfR0lEIiA+IiRjb250YW1pbmF0ZWQiCisKKwlpZiBbIC1zICIkY29udGFtaW5hdGVkIiBdOyB0aGVuCisJCWVjaG8gIldBUk5JTkc6IFBhdGhzIGluIHRoZSByb290ZnMgYXJlIG93bmVkIGJ5IHRoZSBzYW1lIHVzZXIgb3IgZ3JvdXAgYXMgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiBTZWUgdGhlIGxvZ2ZpbGUgZm9yIHRoZSBzcGVjaWZpYyBwYXRocy4iCisJCWNhdCAiJGNvbnRhbWluYXRlZCIgfCBzZWQgInMsXiwgICwiCisJZmkKK30KKworIyBNYWtlIGFueSBhYnNvbHV0ZSBsaW5rcyBpbiBhIHN5c3Jvb3QgcmVsYXRpdmUKK3Jvb3Rmc19zeXNyb290X3JlbGF0aXZlbGlua3MgKCkgeworCXN5c3Jvb3QtcmVsYXRpdmVsaW5rcy5weSAke1NES19PVVRQVVR9LyR7U0RLVEFSR0VUU1lTUk9PVH0KK30KKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX2luc3RhbGxbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VfcWFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZWRhdGFbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9pcGtbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9kZWJbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZV93cml0ZV9ycG1bbm9leGVjXSA9ICIxIgorCithZGR0YXNrIHJvb3RmcyBiZWZvcmUgZG9fYnVpbGQKKyMgQWxsb3cgdGhlIGtlcm5lbCB0byBiZSByZXBhY2tlZCB3aXRoIHRoZSBpbml0cmFtZnMgYW5kIGJvb3QgaW1hZ2UgZmlsZSBhcyBhIHNpbmdsZSBmaWxlCitkb19idW5kbGVfaW5pdHJhbWZzW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19idW5kbGVfaW5pdHJhbWZzIgorZG9fYnVuZGxlX2luaXRyYW1mc1tub3N0YW1wXSA9ICIxIgorZG9fYnVuZGxlX2luaXRyYW1mc1tub2V4ZWNdID0gIjEiCitkb19idW5kbGVfaW5pdHJhbWZzICgpIHsKKwk6Cit9CithZGR0YXNrIGJ1bmRsZV9pbml0cmFtZnMgYWZ0ZXIgZG9fcm9vdGZzCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlcy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNjQwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW1hZ2VfdHlwZXMuYmJjbGFzcwpAQCAtMCwwICsxLDI2MCBAQAorCisjIFRoZSBkZWZhdWx0IGFsaWdtZW50IG9mIHRoZSBzaXplIG9mIHRoZSByb290ZnMgaXMgc2V0IHRvIDFLaUIuIEluIGNhc2UKKyMgeW91J3JlIHVzaW5nIHRoZSBTRCBjYXJkIGVtdWxhdGlvbiBvZiBhIFFFTVUgc3lzdGVtIHNpbXVsYXRvciB5b3UgbWF5CisjIHNldCB0aGlzIHZhbHVlIHRvIDIwNDggKDJNaUIgYWxpZ25tZW50KS4KK0lNQUdFX1JPT1RGU19BTElHTk1FTlQgPz0gIjEiCisKK2RlZiBpbWFnZXR5cGVzX2dldGRlcGVuZHMoZCk6CisgICAgZGVmIGFkZGRlcChkZXBzdHIsIGRlcHMpOgorICAgICAgICBmb3IgaSBpbiAoZGVwc3RyIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgaSBub3QgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChpKQorCisgICAgZGVwcyA9IFtdCisgICAgY3R5cGVzID0gZC5nZXRWYXIoJ0NPTVBSRVNTSU9OVFlQRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHR5cGUgaW4gKGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGlmIHR5cGUgaW4gWyJ2bWRrIiwgInZkaSIsICJxY293MiIsICJsaXZlIiwgImlzbyIsICJoZGRpbWciXToKKyAgICAgICAgICAgIHR5cGUgPSAiZXh0NCIKKyAgICAgICAgYmFzZXR5cGUgPSB0eXBlCisgICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6CisgICAgICAgICAgICBpZiB0eXBlLmVuZHN3aXRoKCIuIiArIGN0eXBlKToKKyAgICAgICAgICAgICAgICBiYXNldHlwZSA9IHR5cGVbOi1sZW4oIi4iICsgY3R5cGUpXQorICAgICAgICAgICAgICAgIGFkZGRlcChkLmdldFZhcigiQ09NUFJFU1NfREVQRU5EU18lcyIgJSBjdHlwZSwgVHJ1ZSksIGRlcHMpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZm9yIHR5cGVkZXBlbmRzIGluIChkLmdldFZhcigiSU1BR0VfVFlQRURFUF8lcyIgJSBiYXNldHlwZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBhZGRkZXAoZC5nZXRWYXIoJ0lNQUdFX0RFUEVORFNfJXMnICUgdHlwZWRlcGVuZHMsIFRydWUpICwgZGVwcykKKyAgICAgICAgYWRkZGVwKGQuZ2V0VmFyKCdJTUFHRV9ERVBFTkRTXyVzJyAlIGJhc2V0eXBlLCBUcnVlKSAsIGRlcHMpCisKKyAgICBkZXBzdHIgPSAiIgorICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgZGVwc3RyICs9ICIgIiArIGRlcCArICI6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKyAgICByZXR1cm4gZGVwc3RyCisKKworWFpfQ09NUFJFU1NJT05fTEVWRUwgPz0gIi1lIC02IgorWFpfSU5URUdSSVRZX0NIRUNLID89ICJjcmMzMiIKK1haX1RIUkVBRFMgPz0gIi1UIDAiCisKK0pGRlMyX1NVTV9FWFRSQV9BUkdTID89ICIiCitJTUFHRV9DTURfamZmczIgPSAibWtmcy5qZmZzMiAtLXJvb3Q9JHtJTUFHRV9ST09URlN9IC0tZmFrZXRpbWUgLS1vdXRwdXQ9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5qZmZzMiAke0VYVFJBX0lNQUdFQ01EfSIKKworSU1BR0VfQ01EX2NyYW1mcyA9ICJta2ZzLmNyYW1mcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5jcmFtZnMgJHtFWFRSQV9JTUFHRUNNRH0iCisKK29lX21rZXh0MjM0ZnMgKCkgeworCWZzdHlwZT0kMQorCWV4dHJhX2ltYWdlY21kPSIiCisKKwlpZiBbICQjIC1ndCAxIF07IHRoZW4KKwkJc2hpZnQKKwkJZXh0cmFfaW1hZ2VjbWQ9JEAKKwlmaQorCisJIyBJZiBnZW5lcmF0aW5nIGFuIGVtcHR5IGltYWdlIHRoZSBzaXplIG9mIHRoZSBzcGFyc2UgYmxvY2sgc2hvdWxkIGJlIGxhcmdlCisJIyBlbm91Z2ggdG8gYWxsb2NhdGUgYW4gZXh0NCBmaWxlc3lzdGVtIHVzaW5nIDQwOTYgYnl0ZXMgcGVyIGlub2RlLCB0aGlzIGlzCisJIyBhYm91dCA2MEssIHNvIGRkIG5lZWRzIGEgbWluaW11bSBjb3VudCBvZiA2MCwgd2l0aCBicz0xMDI0IChieXRlcyBwZXIgSU8pCisJZXZhbCBsb2NhbCBDT1VOVD1cIjBcIgorCWV2YWwgbG9jYWwgTUlOX0NPVU5UPVwiNjBcIgorCWlmIFsgJFJPT1RGU19TSVpFIC1sdCAkTUlOX0NPVU5UIF07IHRoZW4KKwkJZXZhbCBDT1VOVD1cIiRNSU5fQ09VTlRcIgorCWZpCisJIyBDcmVhdGUgYSBzcGFyc2UgaW1hZ2UgYmxvY2sKKwlkZCBpZj0vZGV2L3plcm8gb2Y9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy4kZnN0eXBlIHNlZWs9JFJPT1RGU19TSVpFIGNvdW50PSRDT1VOVCBicz0xMDI0CisJbWtmcy4kZnN0eXBlIC1GICRleHRyYV9pbWFnZWNtZCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLiRmc3R5cGUgLWQgJHtJTUFHRV9ST09URlN9Cit9CisKK0lNQUdFX0NNRF9leHQyID0gIm9lX21rZXh0MjM0ZnMgZXh0MiAke0VYVFJBX0lNQUdFQ01EfSIKK0lNQUdFX0NNRF9leHQzID0gIm9lX21rZXh0MjM0ZnMgZXh0MyAke0VYVFJBX0lNQUdFQ01EfSIKK0lNQUdFX0NNRF9leHQ0ID0gIm9lX21rZXh0MjM0ZnMgZXh0NCAke0VYVFJBX0lNQUdFQ01EfSIKKworTUlOX0JUUkZTX1NJWkUgPz0gIjE2Mzg0IgorSU1BR0VfQ01EX2J0cmZzICgpIHsKKwlpZiBbICR7Uk9PVEZTX1NJWkV9IC1ndCAke01JTl9CVFJGU19TSVpFfSBdOyB0aGVuCisJCWRkIGlmPS9kZXYvemVybyBvZj0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmJ0cmZzIGNvdW50PSR7Uk9PVEZTX1NJWkV9IGJzPTEwMjQKKwkJbWtmcy5idHJmcyAke0VYVFJBX0lNQUdFQ01EfSAtciAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5idHJmcworCWVsc2UKKwkJYmJmYXRhbCAiUm9vdGZzIGlzIHRvbyBzbWFsbCBmb3IgQlRSRlMgKFJvb3RmcyBBY3R1YWwgU2l6ZTogJHtST09URlNfU0laRX0sIEJUUkZTIE1pbmltdW0gU2l6ZTogJHtNSU5fQlRSRlNfU0laRX0pIgorCWZpCit9CisKK0lNQUdFX0NNRF9zcXVhc2hmcyA9ICJta3NxdWFzaGZzICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnNxdWFzaGZzICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCIKK0lNQUdFX0NNRF9zcXVhc2hmcy14eiA9ICJta3NxdWFzaGZzICR7SU1BR0VfUk9PVEZTfSAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnNxdWFzaGZzLXh6ICR7RVhUUkFfSU1BR0VDTUR9IC1ub2FwcGVuZCAtY29tcCB4eiIKK0lNQUdFX0NNRF9zcXVhc2hmcy1sem8gPSAibWtzcXVhc2hmcyAke0lNQUdFX1JPT1RGU30gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5zcXVhc2hmcy1sem8gJHtFWFRSQV9JTUFHRUNNRH0gLW5vYXBwZW5kIC1jb21wIGx6byIKKworIyBCeSBkZWZhdWx0LCB0YXIgZnJvbSB0aGUgaG9zdCBpcyB1c2VkLCB3aGljaCBjYW4gYmUgcXVpdGUgb2xkLiBJZgorIyB5b3UgbmVlZCBzcGVjaWFsIHBhcmFtZXRlcnMgKGxpa2UgLS14YXR0cnMpIHdoaWNoIGFyZSBvbmx5IHN1cHBvcnRlZAorIyBieSBHTlUgdGFyIHVwc3RyZWFtID49IDEuMjcsIHRoZW4gb3ZlcnJpZGUgdGhhdCBkZWZhdWx0OgorIyBJTUFHRV9DTURfVEFSID0gInRhciAtLXhhdHRycyAtLXhhdHRycy1pbmNsdWRlPSoiCisjIElNQUdFX0RFUEVORFNfdGFyX2FwcGVuZCA9ICIgdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSIKKyMgRVhUUkFOQVRJVkVQQVRIICs9ICJ0YXItbmF0aXZlIgorIworIyBUaGUgR05VIGRvY3VtZW50YXRpb24gZG9lcyBub3Qgc3BlY2lmeSB3aGV0aGVyIC0teGF0dHJzLWluY2x1ZGUgaXMgbmVjZXNzYXJ5LgorIyBJbiBwcmFjdGljZSwgaXQgdHVybmVkIG91dCB0byBiZSBub3QgbmVlZGVkIHdoZW4gY3JlYXRpbmcgYXJjaGl2ZXMgYW5kCisjIHJlcXVpcmVkIHdoZW4gZXh0cmFjdGluZywgYnV0IGl0IHNlZW1zIHBydWRlbnQgdG8gdXNlIGl0IGluIGJvdGggY2FzZXMuCitJTUFHRV9DTURfVEFSID89ICJ0YXIiCitJTUFHRV9DTURfdGFyID0gIiR7SU1BR0VfQ01EX1RBUn0gLWN2ZiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLnRhciAtQyAke0lNQUdFX1JPT1RGU30gLiIKKworZG9fcm9vdGZzW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vY3Bpb19hcHBlbmQiCitJTUFHRV9DTURfY3BpbyAoKSB7CisJKGNkICR7SU1BR0VfUk9PVEZTfSAmJiBmaW5kIC4gfCBjcGlvIC1vIC1IIG5ld2MgPiR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3BpbykKKwlpZiBbICEgLUwgJHtJTUFHRV9ST09URlN9L2luaXQgLWEgISAtZSAke0lNQUdFX1JPT1RGU30vaW5pdCBdOyB0aGVuCisJCWlmIFsgLUwgJHtJTUFHRV9ST09URlN9L3NiaW4vaW5pdCAtbyAtZSAke0lNQUdFX1JPT1RGU30vc2Jpbi9pbml0IF07IHRoZW4KKwkJCWxuIC1zZiAvc2Jpbi9pbml0ICR7V09SS0RJUn0vY3Bpb19hcHBlbmQvaW5pdAorCQllbHNlCisJCQl0b3VjaCAke1dPUktESVJ9L2NwaW9fYXBwZW5kL2luaXQKKwkJZmkKKwkJKGNkICAke1dPUktESVJ9L2NwaW9fYXBwZW5kICYmIGVjaG8gLi9pbml0IHwgY3BpbyAtb0EgLUggbmV3YyAtRiAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmNwaW8pCisJZmkKK30KKworRUxGX0tFUk5FTCA/PSAiJHtTVEFHSU5HX0RJUl9IT1NUfS91c3Ivc3JjL2tlcm5lbC8ke0tFUk5FTF9JTUFHRVRZUEV9IgorRUxGX0FQUEVORCA/PSAicmFtZGlza19zaXplPTMyNzY4IHJvb3Q9L2Rldi9yYW0wIHJ3IGNvbnNvbGU9IgorCitJTUFHRV9DTURfZWxmICgpIHsKKwl0ZXN0IC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZWxmICYmIHJtIC1mICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuZWxmCisJbWtlbGZJbWFnZSAtLWtlcm5lbD0ke0VMRl9LRVJORUx9IC0taW5pdHJkPSR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5yb290ZnMuY3Bpby5neiAtLW91dHB1dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0ucm9vdGZzLmVsZiAtLWFwcGVuZD0nJHtFTEZfQVBQRU5EfScgJHtFWFRSQV9JTUFHRUNNRH0KK30KK0lNQUdFX1RZUEVERVBfZWxmID0gImNwaW8uZ3oiCisKK1VCSV9WT0xOQU1FID89ICIke01BQ0hJTkV9LXJvb3RmcyIKKworbXVsdGl1YmlfbWtmcygpIHsKKwlsb2NhbCBta3ViaWZzX2FyZ3M9IiQxIgorCWxvY2FsIHViaW5pemVfYXJncz0iJDIiCisJaWYgWyAteiAiJDMiIF07IHRoZW4KKwkJbG9jYWwgdm5hbWU9IiIKKwllbHNlCisJCWxvY2FsIHZuYW1lPSJfJDMiCisJZmkKKworCWVjaG8gXFt1Ymlmc1xdID4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gbW9kZT11YmkgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gaW1hZ2U9JHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaWZzID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF9pZD0wID4+IHViaW5pemUke3ZuYW1lfS5jZmcKKwllY2hvIHZvbF90eXBlPWR5bmFtaWMgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gdm9sX25hbWU9JHtVQklfVk9MTkFNRX0gPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCWVjaG8gdm9sX2ZsYWdzPWF1dG9yZXNpemUgPj4gdWJpbml6ZSR7dm5hbWV9LmNmZworCW1rZnMudWJpZnMgLXIgJHtJTUFHRV9ST09URlN9IC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyAke21rdWJpZnNfYXJnc30KKwl1YmluaXplIC1vICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmkgJHt1YmluaXplX2FyZ3N9IHViaW5pemUke3ZuYW1lfS5jZmcKKworCSMgQ2xlYW51cCBjZmcgZmlsZQorCW12IHViaW5pemUke3ZuYW1lfS5jZmcgJHtERVBMT1lfRElSX0lNQUdFfS8KKworCSMgQ3JlYXRlIG93biBzeW1saW5rCisJY2QgJHtERVBMT1lfRElSX0lNQUdFfQorCWlmIFsgLWUgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmlmcyBdOyB0aGVuCisJCWxuIC1zZiAke0lNQUdFX05BTUV9JHt2bmFtZX0ucm9vdGZzLnViaWZzIFwKKwkJJHtJTUFHRV9MSU5LX05BTUV9JHt2bmFtZX0udWJpZnMKKwlmaQorCWlmIFsgLWUgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmkgXTsgdGhlbgorCQlsbiAtc2YgJHtJTUFHRV9OQU1FfSR7dm5hbWV9LnJvb3Rmcy51YmkgXAorCQkke0lNQUdFX0xJTktfTkFNRX0ke3ZuYW1lfS51YmkKKwlmaQorCWNkIC0KK30KKworSU1BR0VfQ01EX211bHRpdWJpICgpIHsKKwkjIFNwbGl0IE1LVUJJRlNfQVJHU188bmFtZT4gYW5kIFVCSU5JWkVfQVJHU188bmFtZT4KKwlmb3IgbmFtZSBpbiAke01VTFRJVUJJX0JVSUxEfTsgZG8KKwkJZXZhbCBsb2NhbCBta3ViaWZzX2FyZ3M9XCJcJE1LVUJJRlNfQVJHU18ke25hbWV9XCIKKwkJZXZhbCBsb2NhbCB1YmluaXplX2FyZ3M9XCJcJFVCSU5JWkVfQVJHU18ke25hbWV9XCIKKworCQltdWx0aXViaV9ta2ZzICIke21rdWJpZnNfYXJnc30iICIke3ViaW5pemVfYXJnc30iICIke25hbWV9IgorCWRvbmUKK30KKworSU1BR0VfQ01EX3ViaSAoKSB7CisJbXVsdGl1YmlfbWtmcyAiJHtNS1VCSUZTX0FSR1N9IiAiJHtVQklOSVpFX0FSR1N9IgorfQorCitJTUFHRV9DTURfdWJpZnMgPSAibWtmcy51YmlmcyAtciAke0lNQUdFX1JPT1RGU30gLW8gJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy51YmlmcyAke01LVUJJRlNfQVJHU30iCisKK0lNQUdFX0NNRF93aWMgKCkgeworCW91dD0ke0RFUExPWV9ESVJfSU1BR0V9LyR7SU1BR0VfTkFNRX0KKwl3a3M9JHtGSUxFX0RJUk5BTUV9LyR7SU1BR0VfQkFTRU5BTUV9LiR7TUFDSElORX0ud2tzCisJWyAtZSAkd2tzIF0gfHwgd2tzPSR7RklMRV9ESVJOQU1FfS8ke0lNQUdFX0JBU0VOQU1FfS53a3MKKwlbIC1lICR3a3MgXSB8fCBiYmZhdGFsICJLaXNrc3RhcnQgZmlsZSAkd2tzIGRvZXNuJ3QgZXhpc3QiCisJQlVJTERESVI9JHtUT1BESVJ9IHdpYyBjcmVhdGUgJHdrcyAtLXZhcnMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9L2ltZ2RhdGEvIC1lICR7SU1BR0VfQkFTRU5BTUV9IC1vICRvdXQvCisJbXYgJG91dC9idWlsZC8ke0lNQUdFX0JBU0VOQU1FfSouZGlyZWN0ICRvdXQucm9vdGZzLndpYworCXJtIC1yZiAkb3V0LworfQorCitFWFRSQV9JTUFHRUNNRCA9ICIiCisKK2luaGVyaXQgc2l0ZWluZm8KK0pGRlMyX0VORElBTk5FU1MgPz0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLWwnLCAnLWInLCBkKX0iCitKRkZTMl9FUkFTRUJMT0NLID89ICIweDQwMDAwIgorRVhUUkFfSU1BR0VDTURfamZmczIgPz0gIi0tcGFkICR7SkZGUzJfRU5ESUFOTkVTU30gLS1lcmFzZWJsb2NrPSR7SkZGUzJfRVJBU0VCTE9DS30gLS1uby1jbGVhbm1hcmtlcnMiCisKKyMgQ2hhbmdlIHRoZXNlIGlmIHlvdSB3YW50IGRlZmF1bHQgbWtmcyBiZWhhdmlvciAoaS5lLiBjcmVhdGUgbWluaW1hbCBpbm9kZSBudW1iZXIpCitFWFRSQV9JTUFHRUNNRF9leHQyID89ICItaSA0MDk2IgorRVhUUkFfSU1BR0VDTURfZXh0MyA/PSAiLWkgNDA5NiIKK0VYVFJBX0lNQUdFQ01EX2V4dDQgPz0gIi1pIDQwOTYiCitFWFRSQV9JTUFHRUNNRF9idHJmcyA/PSAiIgorRVhUUkFfSU1BR0VDTURfZWxmID89ICIiCisKK0lNQUdFX0RFUEVORFMgPSAiIgorSU1BR0VfREVQRU5EU19qZmZzMiA9ICJtdGQtdXRpbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19jcmFtZnMgPSAidXRpbC1saW51eC1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2V4dDIgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfZXh0MyA9ICJlMmZzcHJvZ3MtbmF0aXZlIgorSU1BR0VfREVQRU5EU19leHQ0ID0gImUyZnNwcm9ncy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2J0cmZzID0gImJ0cmZzLXRvb2xzLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfc3F1YXNoZnMgPSAic3F1YXNoZnMtdG9vbHMtbmF0aXZlIgorSU1BR0VfREVQRU5EU19zcXVhc2hmcy14eiA9ICJzcXVhc2hmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3NxdWFzaGZzLWx6byA9ICJzcXVhc2hmcy10b29scy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX2VsZiA9ICJ2aXJ0dWFsL2tlcm5lbCBta2VsZmltYWdlLW5hdGl2ZSIKK0lNQUdFX0RFUEVORFNfdWJpID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3ViaWZzID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX211bHRpdWJpID0gIm10ZC11dGlscy1uYXRpdmUiCitJTUFHRV9ERVBFTkRTX3dpYyA9ICJwYXJ0ZWQtbmF0aXZlIgorCisjIFRoaXMgdmFyaWFibGUgaXMgYXZhaWxhYmxlIHRvIHJlcXVlc3Qgd2hpY2ggdmFsdWVzIGFyZSBzdWl0YWJsZSBmb3IgSU1BR0VfRlNUWVBFUworSU1BR0VfVFlQRVMgPSAiIFwKKyAgICBqZmZzMiBqZmZzMi5zdW0gXAorICAgIGNyYW1mcyBcCisgICAgZXh0MiBleHQyLmd6IGV4dDIuYnoyIGV4dDIubHptYSBcCisgICAgZXh0MyBleHQzLmd6IFwKKyAgICBleHQ0IGV4dDQuZ3ogXAorICAgIGJ0cmZzIFwKKyAgICBpc28gXAorICAgIGhkZGltZyBcCisgICAgc3F1YXNoZnMgc3F1YXNoZnMteHogc3F1YXNoZnMtbHpvIFwKKyAgICB1YmkgdWJpZnMgbXVsdGl1YmkgXAorICAgIHRhciB0YXIuZ3ogdGFyLmJ6MiB0YXIueHogdGFyLmx6NCBcCisgICAgY3BpbyBjcGlvLmd6IGNwaW8ueHogY3Bpby5sem1hIGNwaW8ubHo0IFwKKyAgICB2bWRrIFwKKyAgICB2ZGkgXAorICAgIHFjb3cyIFwKKyAgICBlbGYgXAorICAgIHdpYyB3aWMuZ3ogd2ljLmJ6MiB3aWMubHptYSBcCisiCisKK0NPTVBSRVNTSU9OVFlQRVMgPSAiZ3ogYnoyIGx6bWEgeHogbHo0IHN1bSIKK0NPTVBSRVNTX0NNRF9sem1hID0gImx6bWEgLWsgLWYgLTcgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSIKK0NPTVBSRVNTX0NNRF9neiA9ICJnemlwIC1mIC05IC1jICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gPiAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmd6IgorQ09NUFJFU1NfQ01EX2J6MiA9ICJwYnppcDIgLWYgLWsgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfSIKK0NPTVBSRVNTX0NNRF94eiA9ICJ4eiAtZiAtayAtYyAke1haX0NPTVBSRVNTSU9OX0xFVkVMfSAke1haX1RIUkVBRFN9IC0tY2hlY2s9JHtYWl9JTlRFR1JJVFlfQ0hFQ0t9ICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gPiAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lnh6IgorQ09NUFJFU1NfQ01EX2x6NCA9ICJsejRjIC05IC1jICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gPiAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmx6NCIKK0NPTVBSRVNTX0NNRF9zdW0gPSAic3VtdG9vbCAtaSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9IC1vICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0uc3VtICR7SkZGUzJfU1VNX0VYVFJBX0FSR1N9IgorQ09NUFJFU1NfREVQRU5EU19sem1hID0gInh6LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfZ3ogPSAiIgorQ09NUFJFU1NfREVQRU5EU19iejIgPSAicGJ6aXAyLW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfeHogPSAieHotbmF0aXZlIgorQ09NUFJFU1NfREVQRU5EU19sejQgPSAibHo0LW5hdGl2ZSIKK0NPTVBSRVNTX0RFUEVORFNfc3VtID0gIm10ZC11dGlscy1uYXRpdmUiCisKK1JVTk5BQkxFX0lNQUdFX1RZUEVTID89ICJleHQyIGV4dDMgZXh0NCIKK1JVTk5BQkxFX01BQ0hJTkVfUEFUVEVSTlMgPz0gInFlbXUiCisKK0RFUExPWUFCTEVfSU1BR0VfVFlQRVMgPz0gImhkZGltZyBpc28iIAorCisjIFVzZSBJTUFHRV9FWFRFTlNJT05feHh4IHRvIG1hcCBpbWFnZSB0eXBlICd4eHgnIHdpdGggcmVhbCBpbWFnZSBmaWxlIGV4dGVuc2lvbiBuYW1lKHMpIGZvciBIb2IKK0lNQUdFX0VYVEVOU0lPTl9saXZlID0gImhkZGltZyBpc28iCisKKyMgVGhlIElNQUdFX1RZUEVTX01BU0tFRCB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgdG8gbWFzayBvdXQgZnJvbSB0aGUgSU1BR0VfRlNUWVBFUywKKyMgaW1hZ2VzIHRoYXQgd2lsbCBub3QgYmUgYnVpbHQgYXQgZG9fcm9vdGZzIHRpbWU6IHZtZGssIHZkaSwgcWNvdzIsIGhkZGltZywgaXNvLCBldGMuCitJTUFHRV9UWVBFU19NQVNLRUQgPz0gIiIKKworIyBUaGUgV0lDVkFSUyB2YXJpYWJsZSBpcyB1c2VkIHRvIGRlZmluZSBsaXN0IG9mIGJpdGJha2UgdmFyaWFibGVzIHVzZWQgaW4gd2ljIGNvZGUKKyMgdmFyaWFibGVzIGZyb20gdGhpcyBsaXN0IGlzIHdyaXR0ZW4gdG8gPGltYWdlPi5lbnYgZmlsZQorV0lDVkFSUyA/PSAiQkJMQVlFUlMgREVQTE9ZX0RJUl9JTUFHRSBIRERESVIgSU1BR0VfQkFTRU5BTUUgSU1BR0VfQk9PVF9GSUxFUyBJTUFHRV9MSU5LX05BTUUgSU1BR0VfUk9PVEZTIElOSVRSQU1GU19GU1RZUEVTIElOSVRSRCBJU09ESVIgTUFDSElORV9BUkNIIFJPT1RGU19TSVpFIFNUQUdJTkdfREFUQURJUiBTVEFHSU5HX0RJUl9OQVRJVkUgU1RBR0lOR19MSUJESVIgVEFSR0VUX1NZUyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2ltYWdlX3R5cGVzX3Vib290LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxYmNhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9pbWFnZV90eXBlc191Ym9vdC5iYmNsYXNzCkBAIC0wLDAgKzEsMjYgQEAKK2luaGVyaXQgaW1hZ2VfdHlwZXMga2VybmVsLWFyY2gKKworb2VfbWtpbWFnZSAoKSB7CisgICAgbWtpbWFnZSAtQSAke1VCT09UX0FSQ0h9IC1PIGxpbnV4IC1UIHJhbWRpc2sgLUMgJDIgLW4gJHtJTUFHRV9OQU1FfSBcCisgICAgICAgIC1kICR7REVQTE9ZX0RJUl9JTUFHRX0vJDEgJHtERVBMT1lfRElSX0lNQUdFfS8kMS51LWJvb3QKKyAgICBpZiBbIHgkMyA9IHgiY2xlYW4iIF07IHRoZW4KKyAgICAgICAgcm0gJDEKKyAgICBmaQorfQorCitDT01QUkVTU0lPTlRZUEVTICs9ICJnei51LWJvb3QgYnoyLnUtYm9vdCBsem1hLnUtYm9vdCB1LWJvb3QiCisKK0NPTVBSRVNTX0RFUEVORFNfdS1ib290ID0gInUtYm9vdC1ta2ltYWdlLW5hdGl2ZSIKK0NPTVBSRVNTX0NNRF91LWJvb3QgICAgICA9ICJvZV9ta2ltYWdlICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0gbm9uZSIKKworQ09NUFJFU1NfREVQRU5EU19nei51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2d6LnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2d6fTsgb2VfbWtpbWFnZSAke0lNQUdFX05BTUV9LnJvb3Rmcy4ke3R5cGV9Lmd6IGd6aXAgY2xlYW4iCisKK0NPTVBSRVNTX0RFUEVORFNfYnoyLnUtYm9vdCA9ICJ1LWJvb3QtbWtpbWFnZS1uYXRpdmUiCitDT01QUkVTU19DTURfYnoyLnUtYm9vdCAgICAgID0gIiR7Q09NUFJFU1NfQ01EX2J6Mn07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5iejIgYnppcDIgY2xlYW4iCisKK0NPTVBSRVNTX0RFUEVORFNfbHptYS51LWJvb3QgPSAidS1ib290LW1raW1hZ2UtbmF0aXZlIgorQ09NUFJFU1NfQ01EX2x6bWEudS1ib290ICAgICAgPSAiJHtDT01QUkVTU19DTURfbHptYX07IG9lX21raW1hZ2UgJHtJTUFHRV9OQU1FfS5yb290ZnMuJHt0eXBlfS5sem1hIGx6bWEgY2xlYW4iCisKK0lNQUdFX1RZUEVTICs9ICJleHQyLnUtYm9vdCBleHQyLmd6LnUtYm9vdCBleHQyLmJ6Mi51LWJvb3QgZXh0Mi5sem1hLnUtYm9vdCBleHQzLmd6LnUtYm9vdCBleHQ0Lmd6LnUtYm9vdCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2luc2FuZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjODYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvaW5zYW5lLmJiY2xhc3MKQEAgLTAsMCArMSwxMjgwIEBACisjIEJCIENsYXNzIGluc3BpcmVkIGJ5IGVidWlsZC5zaAorIworIyBUaGlzIGNsYXNzIHdpbGwgdGVzdCBmaWxlcyBhZnRlciBpbnN0YWxsYXRpb24gZm9yIGNlcnRhaW4KKyMgc2VjdXJpdHkgaXNzdWVzIGFuZCBvdGhlciBraW5kIG9mIGlzc3Vlcy4KKyMKKyMgQ2hlY2tzIHdlIGRvOgorIyAgLUNoZWNrIHRoZSBvd25lcnNoaXAgYW5kIHBlcm1pc3Npb25zCisjICAtQ2hlY2sgdGhlIFJVTlRJTUUgcGF0aCBmb3IgdGhlICRUTVBESVIKKyMgIC1DaGVjayBpZiAubGEgZmlsZXMgd3JvbmdseSBwb2ludCB0byB3b3JrZGlyCisjICAtQ2hlY2sgaWYgLnBjIGZpbGVzIHdyb25nbHkgcG9pbnQgdG8gd29ya2RpcgorIyAgLUNoZWNrIGlmIHBhY2thZ2VzIGNvbnRhaW5zIC5kZWJ1ZyBkaXJlY3RvcmllcyBvciAuc28gZmlsZXMKKyMgICB3aGVyZSB0aGV5IHNob3VsZCBiZSBpbiAtZGV2IG9yIC1kYmcKKyMgIC1DaGVjayBpZiBjb25maWcubG9nIGNvbnRhaW5zIHRyYWNlcyB0byBicm9rZW4gYXV0b2NvbmYgdGVzdHMKKyMgIC1DaGVjayBpbnZhbGlkIGNoYXJhY3RlcnMgKG5vbi11dGY4KSBvbiBzb21lIHBhY2thZ2UgbWV0YWRhdGEKKyMgIC1FbnN1cmUgdGhhdCBiaW5hcmllcyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCBsaW5rCisjICAgaW50byBleGVjX3ByZWZpeAorIyAgLUNoZWNrIHRoYXQgc2NyaXB0cyBpbiBiYXNlX1tiaW5kaXJ8c2JpbmRpcnxsaWJkaXJdIGRvIG5vdCByZWZlcmVuY2UKKyMgICBmaWxlcyB1bmRlciBleGVjX3ByZWZpeAorCisKKyMgdW5zYWZlLXJlZmVyZW5jZXMtaW4tYmluYXJpZXMgcmVxdWlyZXMgcHJlbGluay1ydGxkIGZyb20KKyMgcHJlbGluay1uYXRpdmUsIGJ1dCB3ZSBkb24ndCB3YW50IHRoaXMgREVQRU5EUyBmb3IgLW5hdGl2ZSBidWlsZHMKK1FBREVQRU5EUyA9ICJwcmVsaW5rLW5hdGl2ZSIKK1FBREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorUUFERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitRQV9TQU5FID0gIlRydWUiCisKKyMgRWxlY3Qgd2hldGhlciBhIGdpdmVuIHR5cGUgb2YgZXJyb3IgaXMgYSB3YXJuaW5nIG9yIGVycm9yLCB0aGV5IG1heQorIyBoYXZlIGJlZW4gc2V0IGJ5IG90aGVyIGZpbGVzLgorV0FSTl9RQSA/PSAibGRmbGFncyB1c2VsZXNzLXJwYXRocyBycGF0aHMgc3RhdGljZGV2IGxpYmRpciB4b3JnLWRyaXZlci1hYmkgXAorICAgICAgICAgICAgdGV4dHJlbCBhbHJlYWR5LXN0cmlwcGVkIGluY29tcGF0aWJsZS1saWNlbnNlIGZpbGVzLWludmFsaWQgXAorICAgICAgICAgICAgaW5zdGFsbGVkLXZzLXNoaXBwZWQgY29tcGlsZS1ob3N0LXBhdGggaW5zdGFsbC1ob3N0LXBhdGggXAorICAgICAgICAgICAgcG4tb3ZlcnJpZGVzIGluZm9kaXIgYnVpbGQtZGVwcyBmaWxlLXJkZXBzIFwKKyAgICAgICAgICAgIHVua25vd24tY29uZmlndXJlLW9wdGlvbiBzeW1saW5rLXRvLXN5c3Jvb3QgbXVsdGlsaWIgXAorICAgICAgICAgICAgaW52YWxpZC1wa2djb25maWcgaG9zdC11c2VyLWNvbnRhbWluYXRlZCBcCisgICAgICAgICAgICAiCitFUlJPUl9RQSA/PSAiZGV2LXNvIGRlYnVnLWRlcHMgZGV2LWRlcHMgZGVidWctZmlsZXMgYXJjaCBwa2djb25maWcgbGEgXAorICAgICAgICAgICAgcGVybXMgZGVwLWNtcCBwa2d2YXJjaGVjayBwZXJtLWNvbmZpZyBwZXJtLWxpbmUgcGVybS1saW5rIFwKKyAgICAgICAgICAgIHNwbGl0LXN0cmlwIHBhY2thZ2VzLWxpc3QgcGtndi11bmRlZmluZWQgdmFyLXVuZGVmaW5lZCBcCisgICAgICAgICAgICB2ZXJzaW9uLWdvaW5nLWJhY2t3YXJkcyBleHBhbmRlZC1kIGludmFsaWQtY2hhcnMgXAorICAgICAgICAgICAgIgorRkFLRVJPT1RfUUEgPSAiaG9zdC11c2VyLWNvbnRhbWluYXRlZCIKK0ZBS0VST09UX1FBW2RvY10gPSAiUUEgdGVzdHMgd2hpY2ggbmVlZCB0byBydW4gdW5kZXIgZmFrZXJvb3QuIElmIGFueSBcCitlbmFibGVkIHRlc3RzIGFyZSBsaXN0ZWQgaGVyZSwgdGhlIGRvX3BhY2thZ2VfcWEgdGFzayB3aWxsIHJ1biB1bmRlciBmYWtlcm9vdC4iCisKK0FMTF9RQSA9ICIke1dBUk5fUUF9ICR7RVJST1JfUUF9IgorCitVTktOT1dOX0NPTkZJR1VSRV9XSElURUxJU1QgPz0gIi0tZW5hYmxlLW5scyAtLWRpc2FibGUtbmxzIC0tZGlzYWJsZS1zaWxlbnQtcnVsZXMgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCIKKworIworIyBkaWN0aW9uYXJ5IGZvciBlbGYgaGVhZGVycworIworIyBmZWVsIGZyZWUgdG8gYWRkIGFuZCBjb3JyZWN0LgorIworIyAgICAgICAgICAgVEFSR0VUX09TICBUQVJHRVRfQVJDSCAgIE1BQ0hJTkUsIE9TQUJJLCBBQklWRVJTSU9OLCBMaXR0bGUgRW5kaWFuLCAzMmJpdD8KK2RlZiBwYWNrYWdlX3FhX2dldF9tYWNoaW5lX2RpY3QoKToKKyAgICByZXR1cm4geworICAgICAgICAgICAgImRhcndpbjkiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImVsZiIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiaTU4NiIgOiAgICAgICgzLCAgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImVwaXBoYW55IjogICAoNDY0MywgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eCIgOiB7IAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjQiIDogICAoMTgzLCAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NF9iZSIgOigxODMsICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICA5NywgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIjogICAgICAoNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjNjQiOiAgKDIxLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImkzODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNTg2IjogICAgICAgKCAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk2ODYiOiAgICAgICAoIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICg2MiwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpYTY0IjogICAgICAgKDUwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFscGhhIjogICAgICAoMzY5MDIsICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiaHBwYSI6ICAgICAgICgxNSwgICAgIDMsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtNjhrIjogICAgICAgKCA0LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwc2VsIjogICAgICggOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICA2NCksCisgICAgICAgICAgICAgICAgICAgICAgICAiczM5MCI6ICAgICAgICgyMiwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaDQiOiAgICAgICAgKDQyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInNwYXJjIjogICAgICAoIDIsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWljcm9ibGF6ZSI6ICAoMTg5LCAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaWNyb2JsYXplZWIiOigxODksICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pY3JvYmxhemVlbCI6KDE4OSwgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC11Y2xpYmMiIDogeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoICAyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICggIDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhdnIzMiI6ICAgICAgKDYzMTcsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAic2g0IjogICAgICAgICg0MiwgICAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1tdXNsIiA6IHsgCisgICAgICAgICAgICAgICAgICAgICAgICAiYWFyY2g2NCIgOiAgICgxODMsICAgIDAsICAgIDAsICAgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFhcmNoNjRfYmUiIDooMTgzLCAgICAwLCAgICAwLCAgICAgICAgICAgIEZhbHNlLCAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKCAgNDAsICAgIDk3LCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtZWIiOiAgICAgICggIDQwLCAgICA5NywgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvd2VycGMiOiAgICAoICAyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpMzg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAiaTQ4NiI6ICAgICAgICggICAzLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImk1ODYiOiAgICAgICAoICAgMywgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpNjg2IjogICAgICAgKCAgIDMsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAieDg2XzY0IjogICAgICggIDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHMiOiAgICAgICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzZWwiOiAgICAgKCAgIDgsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0IjogICAgICggICA4LCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgNjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1pcHM2NGVsIjogICAoICAgOCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDY0KSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgInVjbGludXgtdWNsaWJjIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJiZmluIjogICAgICAgKCAxMDYsICAgICAwLCAgICAwLCAgICAgICAgICBUcnVlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LCAKKyAgICAgICAgICAgICJsaW51eC1nbnVlYWJpIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm0iIDogICAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgImFybWViIiA6ICAgICAoNDAsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJsaW51eC1tdXNsZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtdWNsaWJjZWFiaSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXJtIiA6ICAgICAgICg0MCwgICAgIDAsICAgIDAsICAgICAgICAgIFRydWUsICAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcm1lYiIgOiAgICAgKDQwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251c3BlIiA6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3dlcnBjIjogICAgKDIwLCAgICAgMCwgICAgMCwgICAgICAgICAgRmFsc2UsICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtbXVzbHNwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LXVjbGliY3NwZSIgOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgImxpbnV4LWdudSIgOiAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAicG93ZXJwYyI6ICAgICgyMCwgICAgIDAsICAgIDAsICAgICAgICAgIEZhbHNlLCAgICAgICAgIDMyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaDQiOiAgICAgICAgKDQyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251eDMyIiA6ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgICAgKDYyLCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAibGludXgtZ251bjMyIiA6ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzNjQiOiAgICAgICAoIDgsICAgICAwLCAgICAwLCAgICAgICAgICBGYWxzZSwgICAgICAgICAzMiksCisgICAgICAgICAgICAgICAgICAgICAgICAibWlwczY0ZWwiOiAgICAgKCA4LCAgICAgMCwgICAgMCwgICAgICAgICAgVHJ1ZSwgICAgICAgICAgMzIpLAorICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgIH0KKworCitkZWYgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCk6CisgICAgIiIiIFJlbW92ZSB0aGUgY29tbW9uIHByZWZpeCBmcm9tIHRoZSBwYXRoLiBJbiB0aGlzIGNhc2UgaXQgaXMgdGhlIFRNUERJUiIiIgorICAgIHJldHVybiBwYXRoLnJlcGxhY2UoZC5nZXRWYXIoJ1RNUERJUicsVHJ1ZSksIiIpCisKK2RlZiBwYWNrYWdlX3FhX3dyaXRlX2Vycm9yKHR5cGUsIGVycm9yLCBkKToKKyAgICBsb2dmaWxlID0gZC5nZXRWYXIoJ1FBX0xPR0ZJTEUnLCBUcnVlKQorICAgIGlmIGxvZ2ZpbGU6CisgICAgICAgIHAgPSBkLmdldFZhcignUCcsIFRydWUpCisgICAgICAgIGYgPSBmaWxlKCBsb2dmaWxlLCAiYSsiKQorICAgICAgICBwcmludCA+PiBmLCAiJXM6ICVzIFslc10iICUgKHAsIGVycm9yLCB0eXBlKQorICAgICAgICBmLmNsb3NlKCkKKworZGVmIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKGVycm9yX2NsYXNzLCBlcnJvcl9tc2csIGQpOgorICAgIHBhY2thZ2VfcWFfd3JpdGVfZXJyb3IoZXJyb3JfY2xhc3MsIGVycm9yX21zZywgZCkKKyAgICBpZiBlcnJvcl9jbGFzcyBpbiAoZC5nZXRWYXIoIkVSUk9SX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGJiLmVycm9yKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgICAgIGQuc2V0VmFyKCJRQV9TQU5FIiwgRmFsc2UpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGVsaWYgZXJyb3JfY2xhc3MgaW4gKGQuZ2V0VmFyKCJXQVJOX1FBIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGJiLndhcm4oIlFBIElzc3VlOiAlcyBbJXNdIiAlIChlcnJvcl9tc2csIGVycm9yX2NsYXNzKSkKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJRQSBJc3N1ZTogJXMgWyVzXSIgJSAoZXJyb3JfbXNnLCBlcnJvcl9jbGFzcykpCisgICAgcmV0dXJuIFRydWUKKworUUFQQVRIVEVTVFtsaWJleGVjXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2xpYmV4ZWMiCitkZWYgcGFja2FnZV9xYV9jaGVja19saWJleGVjKHBhdGgsbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisKKyAgICAjIFNraXAgdGhlIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgaXMgZXhwbGljaXRseSAvdXNyL2xpYmV4ZWMKKyAgICBsaWJleGVjID0gZC5nZXRWYXIoJ2xpYmV4ZWNkaXInLCBUcnVlKQorICAgIGlmIGxpYmV4ZWMgPT0gIi91c3IvbGliZXhlYyI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiAnbGliZXhlYycgaW4gcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgIG1lc3NhZ2VzWyJsaWJleGVjIl0gPSAiJXM6ICVzIGlzIHVzaW5nIGxpYmV4ZWMgcGxlYXNlIHJlbG9jYXRlIHRvICVzIiAlIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCwgZCksIGxpYmV4ZWMpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgcmV0dXJuIFRydWUKKworUUFQQVRIVEVTVFtycGF0aHNdID0gInBhY2thZ2VfcWFfY2hlY2tfcnBhdGgiCitkZWYgcGFja2FnZV9xYV9jaGVja19ycGF0aChmaWxlLG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciBkYW5nZXJvdXMgUlBBVEhzCisgICAgIiIiCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYWRfZGlycyA9IFtkLmdldFZhcignQkFTRV9XT1JLRElSJywgVHJ1ZSksIGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKV0KKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisKKyAgICBpbXBvcnQgcmUKKyAgICBycGF0aF9yZSA9IHJlLmNvbXBpbGUoIlxzK1JQQVRIXHMrKC4qKSIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIG0gPSBycGF0aF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcnBhdGggPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBmb3IgZGlyIGluIGJhZF9kaXJzOgorICAgICAgICAgICAgICAgIGlmIGRpciBpbiBycGF0aDoKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXNbInJwYXRocyJdID0gInBhY2thZ2UgJXMgY29udGFpbnMgYmFkIFJQQVRIICVzIGluIGZpbGUgJXMiICUgKG5hbWUsIHJwYXRoLCBmaWxlKQorCitRQVBBVEhURVNUW3VzZWxlc3MtcnBhdGhzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3VzZWxlc3NfcnBhdGhzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfdXNlbGVzc19ycGF0aHMoZmlsZSwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIFJQQVRIcyB0aGF0IGFyZSB1c2VsZXNzIGJ1dCBub3QgZGFuZ2Vyb3VzCisgICAgIiIiCisgICAgZGVmIHJwYXRoX2VxKGEsIGIpOgorICAgICAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aChhKSA9PSBvcy5wYXRoLm5vcm1wYXRoKGIpCisKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICByZXR1cm4KKworICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJsaWJkaXIiLCBUcnVlKQorICAgIGJhc2VfbGliZGlyID0gZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkKKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisKKyAgICBpbXBvcnQgcmUKKyAgICBycGF0aF9yZSA9IHJlLmNvbXBpbGUoIlxzK1JQQVRIXHMrKC4qKSIpCisgICAgZm9yIGxpbmUgaW4gcGhkcnMuc3BsaXQoIlxuIik6CisgICAgICAgIG0gPSBycGF0aF9yZS5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcnBhdGggPSBtLmdyb3VwKDEpCisgICAgICAgICAgICBpZiBycGF0aF9lcShycGF0aCwgbGliZGlyKSBvciBycGF0aF9lcShycGF0aCwgYmFzZV9saWJkaXIpOgorICAgICAgICAgICAgICAgICMgVGhlIGR5bmFtaWMgbGlua2VyIHNlYXJjaGVzIGJvdGggdGhlc2UgcGxhY2VzIGFueXdheS4gIFRoZXJlIGlzIG5vIHBvaW50IGluCisgICAgICAgICAgICAgICAgIyBsb29raW5nIHRoZXJlIGFnYWluLgorICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJ1c2VsZXNzLXJwYXRocyJdID0gIiVzOiAlcyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggJXMiICUgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChmaWxlLCBkKSwgcnBhdGgpCisKK1FBUEFUSFRFU1RbZGV2LXNvXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2RldiIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2RldihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgIi5zbyIgbGlicmFyeSBzeW1saW5rcyBpbiBub24tZGV2IHBhY2thZ2VzCisgICAgIiIiCisKKyAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgiLWRldiIpIGFuZCBub3QgbmFtZS5lbmRzd2l0aCgiLWRiZyIpIGFuZCBub3QgbmFtZS5lbmRzd2l0aCgiLXB0ZXN0IikgYW5kIG5vdCBuYW1lLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSBhbmQgcGF0aC5lbmRzd2l0aCgiLnNvIikgYW5kIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICBtZXNzYWdlc1siZGV2LXNvIl0gPSAibm9uIC1kZXYvLWRiZy9uYXRpdmVzZGstIHBhY2thZ2UgY29udGFpbnMgc3ltbGluayAuc286ICVzIHBhdGggJyVzJyIgJSBcCisgICAgICAgICAgICAgICAgIChuYW1lLCBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKSkKKworUUFQQVRIVEVTVFtzdGF0aWNkZXZdID0gInBhY2thZ2VfcWFfY2hlY2tfc3RhdGljZGV2IgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3RhdGljZGV2KHBhdGgsIG5hbWUsIGQsIGVsZiwgbWVzc2FnZXMpOgorICAgICIiIgorICAgIENoZWNrIGZvciAiLmEiIGxpYnJhcnkgaW4gbm9uLXN0YXRpY2RldiBwYWNrYWdlcworICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBleGNlcHRpb25zIHRvIHRoaXMgcnVsZSwgLXBpYyBwYWNrYWdlcyBjYW4gY29udGFpbgorICAgIHN0YXRpYyBsaWJyYXJpZXMsIHRoZSBfbm9uc2hhcmVkLmEgYmVsb25nIHdpdGggdGhlaXIgLWRldiBwYWNrYWdlcyBhbmQKKyAgICBsaWJnY2MuYSwgbGliZ2Nvdi5hIHdpbGwgYmUgc2tpcHBlZCBpbiB0aGVpciBwYWNrYWdlcworICAgICIiIgorCisgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoIi1waWMiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1zdGF0aWNkZXYiKSBhbmQgbm90IG5hbWUuZW5kc3dpdGgoIi1wdGVzdCIpIGFuZCBwYXRoLmVuZHN3aXRoKCIuYSIpIGFuZCBub3QgcGF0aC5lbmRzd2l0aCgiX25vbnNoYXJlZC5hIik6CisgICAgICAgIG1lc3NhZ2VzWyJzdGF0aWNkZXYiXSA9ICJub24gLXN0YXRpY2RldiBwYWNrYWdlIGNvbnRhaW5zIHN0YXRpYyAuYSBsaWJyYXJ5OiAlcyBwYXRoICclcyciICUgXAorICAgICAgICAgICAgICAgICAobmFtZSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2xpYmRpcihkKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3Igd3JvbmcgbGlicmFyeSBpbnN0YWxsYXRpb24gcGF0aHMuIEZvciBpbnN0YW5jZSwgY2F0Y2gKKyAgICByZWNpcGVzIGluc3RhbGxpbmcgL2xpYi9iYXIuc28gd2hlbiAke2Jhc2VfbGliZGlyfT0ibGliMzIiIG9yCisgICAgaW5zdGFsbGluZyBpbiAvdXNyL2xpYjY0IHdoZW4gJHtsaWJkaXJ9PSIvdXNyL2xpYiIKKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgYmFzZV9saWJkaXIgPSBkLmdldFZhcigiYmFzZV9saWJkaXIiLFRydWUpICsgb3Muc2VwCisgICAgbGliZGlyID0gZC5nZXRWYXIoImxpYmRpciIsIFRydWUpICsgb3Muc2VwCisgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcigiZXhlY19wcmVmaXgiLCBUcnVlKSArIG9zLnNlcAorCisgICAgbWVzc2FnZXMgPSBbXQorCisgICAgbGliX3JlID0gcmUuY29tcGlsZSgiXi9saWIuK1wuc28oXC4uKyk/JCIpCisgICAgZXhlY19yZSA9IHJlLmNvbXBpbGUoIl4lcy4qL2xpYi4rXC5zbyhcLi4rKT8kIiAlIGV4ZWNfcHJlZml4KQorCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGtnZGVzdCk6CisgICAgICAgIGlmIHJvb3QgPT0gcGtnZGVzdDoKKyAgICAgICAgICAgICMgU2tpcCBzdWJkaXJlY3RvcmllcyBmb3IgYW55IHBhY2thZ2VzIHdpdGggbGliZGlyIGluIElOU0FORV9TS0lQCisgICAgICAgICAgICBza2lwcGFja2FnZXMgPSBbXQorICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBpZiAnbGliZGlyJyBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwYWNrYWdlLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiUGFja2FnZSAlcyBza2lwcGluZyBsaWJkaXIgUUEgdGVzdCIgJSAocGFja2FnZSkpCisgICAgICAgICAgICAgICAgICAgIHNraXBwYWNrYWdlcy5hcHBlbmQocGFja2FnZSkKKyAgICAgICAgICAgIGZvciBwYWNrYWdlIGluIHNraXBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShwYWNrYWdlKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZnVsbF9wYXRoLCBwa2dkZXN0KQorICAgICAgICAgICAgaWYgb3Muc2VwIGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgIHBhY2thZ2UsIHJlbF9wYXRoID0gcmVsX3BhdGguc3BsaXQob3Muc2VwLCAxKQorICAgICAgICAgICAgICAgIHJlbF9wYXRoID0gb3Muc2VwICsgcmVsX3BhdGgKKyAgICAgICAgICAgICAgICBpZiBsaWJfcmUubWF0Y2gocmVsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBpZiBiYXNlX2xpYmRpciBub3QgaW4gcmVsX3BhdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5hcHBlbmQoIiVzOiBmb3VuZCBsaWJyYXJ5IGluIHdyb25nIGxvY2F0aW9uOiAlcyIgJSAocGFja2FnZSwgcmVsX3BhdGgpKQorICAgICAgICAgICAgICAgIGlmIGV4ZWNfcmUubWF0Y2gocmVsX3BhdGgpOgorICAgICAgICAgICAgICAgICAgICBpZiBsaWJkaXIgbm90IGluIHJlbF9wYXRoOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXMuYXBwZW5kKCIlczogZm91bmQgbGlicmFyeSBpbiB3cm9uZyBsb2NhdGlvbjogJXMiICUgKHBhY2thZ2UsIHJlbF9wYXRoKSkKKworICAgIGlmIG1lc3NhZ2VzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigibGliZGlyIiwgIlxuIi5qb2luKG1lc3NhZ2VzKSwgZCkKKworUUFQQVRIVEVTVFtkZWJ1Zy1maWxlc10gPSAicGFja2FnZV9xYV9jaGVja19kYmciCitkZWYgcGFja2FnZV9xYV9jaGVja19kYmcocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yICIuZGVidWciIGZpbGVzIG9yIGRpcmVjdG9yaWVzIG91dHNpZGUgb2YgdGhlIGRiZyBwYWNrYWdlCisgICAgIiIiCisKKyAgICBpZiBub3QgIi1kYmciIGluIG5hbWUgYW5kIG5vdCAiLXB0ZXN0IiBpbiBuYW1lOgorICAgICAgICBpZiAnLmRlYnVnJyBpbiBwYXRoLnNwbGl0KG9zLnBhdGguc2VwKToKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJkZWJ1Zy1maWxlcyJdID0gIm5vbiBkZWJ1ZyBwYWNrYWdlIGNvbnRhaW5zIC5kZWJ1ZyBkaXJlY3Rvcnk6ICVzIHBhdGggJXMiICUgXAorICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitRQVBBVEhURVNUW3Blcm1zXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3Blcm0iCitkZWYgcGFja2FnZV9xYV9jaGVja19wZXJtKHBhdGgsbmFtZSxkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGUgcGVybWlzc2lvbiBvZiBmaWxlcworICAgICIiIgorICAgIHJldHVybgorCitRQVBBVEhURVNUW3Vuc2FmZS1yZWZlcmVuY2VzLWluLWJpbmFyaWVzXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3Vuc2FmZV9yZWZlcmVuY2VzX2luX2JpbmFyaWVzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fYmluYXJpZXMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgRW5zdXJlIGJpbmFyaWVzIGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0gZG8gbm90IGxpbmsgdG8gZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKyAgICAiIiIKKyAgICBpZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgZWxmOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgICAgIGV4ZWNfcHJlZml4ID0gZC5nZXRWYXIoJ2V4ZWNfcHJlZml4JywgVHJ1ZSkKKyAgICAgICAgc3lzcm9vdF9wYXRoID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIHN5c3Jvb3RfcGF0aF91c3IgPSBzeXNyb290X3BhdGggKyBleGVjX3ByZWZpeAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxkZF9vdXRwdXQgPSBiYi5wcm9jZXNzLlBvcGVuKFsicHJlbGluay1ydGxkIiwgIi0tcm9vdCIsIHN5c3Jvb3RfcGF0aCwgcGF0aF0sIHN0ZG91dD1zdWIuUElQRSkuc3Rkb3V0LnJlYWQoKQorICAgICAgICBleGNlcHQgYmIucHJvY2Vzcy5DbWRFcnJvcjoKKyAgICAgICAgICAgIGVycm9yX21zZyA9IHBuICsgIjogcHJlbGluay1ydGxkIGFib3J0ZWQgd2hlbiBwcm9jZXNzaW5nICVzIiAlIHBhdGgKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHN5c3Jvb3RfcGF0aF91c3IgaW4gbGRkX291dHB1dDoKKyAgICAgICAgICAgIGxkZF9vdXRwdXQgPSBsZGRfb3V0cHV0LnJlcGxhY2Uoc3lzcm9vdF9wYXRoLCAiIikKKworICAgICAgICAgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICAgICAgICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzaG9ydF9wYXRoID0gcGF0aC5yZXBsYWNlKCclcy8lcycgJSAocGtnZGVzdCwgcGFja2FnZSksICIiLCAxKQorICAgICAgICAgICAgICAgIGlmIChzaG9ydF9wYXRoICE9IHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICBiYXNlX2VyciA9IHBuICsgIjogJXMsIGluc3RhbGxlZCBpbiB0aGUgYmFzZV9wcmVmaXgsIHJlcXVpcmVzIGEgc2hhcmVkIGxpYnJhcnkgdW5kZXIgZXhlY19wcmVmaXggKCVzKSIgJSAoc2hvcnRfcGF0aCwgZXhlY19wcmVmaXgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsZGRfb3V0cHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGlmIGV4ZWNfcHJlZml4IGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlczogJXMiICUgKGJhc2VfZXJyLCBsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJ1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyIsIGVycm9yX21zZywgZCkKKworICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKK1FBUEFUSFRFU1RbdW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0c10gPSAicGFja2FnZV9xYV9jaGVja191bnNhZmVfcmVmZXJlbmNlc19pbl9zY3JpcHRzIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfdW5zYWZlX3JlZmVyZW5jZXNfaW5fc2NyaXB0cyhwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBXYXJuIGlmIHNjcmlwdHMgaW4gYmFzZV9bYmluZGlyfHNiaW5kaXJ8bGliZGlyXSByZWZlcmVuY2UgZmlsZXMgdW5kZXIgZXhlY19wcmVmaXgKKyAgICAiIiIKKyAgICBpZiB1bnNhZmVfcmVmZXJlbmNlc19za2lwcGFibGUocGF0aCwgbmFtZSwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgaW1wb3J0IHN0YXQKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgICAgICMgRW5zdXJlIHdlJ3JlIGNoZWNraW5nIGFuIGV4ZWN1dGFibGUgc2NyaXB0CisgICAgICAgIHN0YXRpbmZvID0gb3Muc3RhdChwYXRoKQorICAgICAgICBpZiBib29sKHN0YXRpbmZvLnN0X21vZGUgJiBzdGF0LlNfSVhVU1IpOgorICAgICAgICAgICAgIyBncmVwIHNoZWxsIHNjcmlwdHMgZm9yIHBvc3NpYmxlIHJlZmVyZW5jZXMgdG8gL2V4ZWNfcHJlZml4LworICAgICAgICAgICAgZXhlY19wcmVmaXggPSBkLmdldFZhcignZXhlY19wcmVmaXgnLCBUcnVlKQorICAgICAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJyVzLycgJXMgPiAvZGV2L251bGwiICUgKGV4ZWNfcHJlZml4LCBwYXRoKQorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSBwbiArICI6IEZvdW5kIGEgcmVmZXJlbmNlIHRvICVzLyBpbiAlcyIgJSAoZXhlY19wcmVmaXgsIHBhdGgpCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVuc2FmZS1yZWZlcmVuY2VzLWluLXNjcmlwdHMiLCBlcnJvcl9tc2csIGQpCisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIlNoZWxsIHNjcmlwdHMgaW4gYmFzZV9iaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciBzaG91bGQgbm90IHJlZmVyZW5jZSBhbnl0aGluZyBpbiBleGVjX3ByZWZpeCIKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigidW5zYWZlLXJlZmVyZW5jZXMtaW4tc2NyaXB0cyIsIGVycm9yX21zZywgZCkKKworZGVmIHVuc2FmZV9yZWZlcmVuY2VzX3NraXBwYWJsZShwYXRoLCBuYW1lLCBkKToKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmICItZGJnIiBpbiBuYW1lIG9yICItZGV2IiBpbiBuYW1lOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBPdGhlciBwYWNrYWdlIG5hbWVzIHRvIHNraXA6CisgICAgaWYgbmFtZS5zdGFydHN3aXRoKCJrZXJuZWwtbW9kdWxlLSIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBTa2lwIHN5bWxpbmtzCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFNraXAgdW51c3VhbCByb290ZnMgbGF5b3V0cyB3aGljaCBtYWtlIHRoZXNlIHRlc3RzIGlycmVsZXZhbnQKKyAgICBleGVjX3ByZWZpeCA9IGQuZ2V0VmFyKCdleGVjX3ByZWZpeCcsIFRydWUpCisgICAgaWYgZXhlY19wcmVmaXggPT0gIiI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBwa2dkZXN0ICsgIi8iICsgbmFtZQorICAgIHBrZ2Rlc3QgPSBvcy5wYXRoLmFic3BhdGgocGtnZGVzdCkKKyAgICBiYXNlX2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKQorICAgIGJhc2Vfc2JpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSkKKyAgICBiYXNlX2xpYmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmFzZV9saWJkaXInLCBUcnVlKQorICAgIGJpbmRpciA9IHBrZ2Rlc3QgKyBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkKKyAgICBzYmluZGlyID0gcGtnZGVzdCArIGQuZ2V0VmFyKCdzYmluZGlyJywgVHJ1ZSkKKyAgICBsaWJkaXIgPSBwa2dkZXN0ICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisKKyAgICBpZiBiYXNlX2JpbmRpciA9PSBiaW5kaXIgYW5kIGJhc2Vfc2JpbmRpciA9PSBzYmluZGlyIGFuZCBiYXNlX2xpYmRpciA9PSBsaWJkaXI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIFNraXAgZmlsZXMgbm90IGluIGJhc2VfW2JpbmRpcnxzYmluZGlyfGxpYmRpcl0KKyAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHBhdGgpCisgICAgaWYgbm90IChiYXNlX2JpbmRpciBpbiBwYXRoIG9yIGJhc2Vfc2JpbmRpciBpbiBwYXRoIG9yIGJhc2VfbGliZGlyIGluIHBhdGgpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKK1FBUEFUSFRFU1RbYXJjaF0gPSAicGFja2FnZV9xYV9jaGVja19hcmNoIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfYXJjaChwYXRoLG5hbWUsZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgaWYgYXJjaHMgYXJlIGNvbXBhdGlibGUKKyAgICAiIiIKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIHRhcmdldF9vcyAgID0gZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpCisgICAgdGFyZ2V0X2FyY2ggPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIHByb3ZpZGVzID0gZC5nZXRWYXIoJ1BST1ZJREVTJywgVHJ1ZSkKKyAgICBicG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKworICAgIGlmIHRhcmdldF9hcmNoID09ICJhbGxhcmNoIjoKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gcG4gKyAiOiBSZWNpcGUgaW5oZXJpdHMgdGhlIGFsbGFyY2ggY2xhc3MsIGJ1dCBoYXMgcGFja2FnZWQgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGJpbmFyaWVzIgorICAgICAgICByZXR1cm4KKworICAgICMgRklYTUU6IENyb3NzIHBhY2thZ2UgY29uZnVzZSB0aGlzIGNoZWNrLCBzbyBqdXN0IHNraXAgdGhlbQorICAgIGZvciBzIGluIFsnY3Jvc3MnLCAnbmF0aXZlc2RrJywgJ2Nyb3NzLWNhbmFkaWFuJ106CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MocywgZCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICMgYXZvaWQgZm9sbG93aW5nIGxpbmtzIHRvIC91c3IvYmluIChlLmcuIG9uIHVkZXYgYnVpbGRzKQorICAgICMgd2Ugd2lsbCBjaGVjayB0aGUgZmlsZXMgcG9pbnRlZCB0byBhbnl3YXkuLi4KKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjaWYgdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgdGhlbiBmaXggdGhlIGRpY3QgYWJvdmUKKyAgICAobWFjaGluZSwgb3NhYmksIGFiaXZlcnNpb24sIGxpdHRsZWVuZGlhbiwgYml0cykgXAorICAgICAgICA9IHBhY2thZ2VfcWFfZ2V0X21hY2hpbmVfZGljdCgpW3RhcmdldF9vc11bdGFyZ2V0X2FyY2hdCisKKyAgICAjIENoZWNrIHRoZSBhcmNoaXRlY3R1cmUgYW5kIGVuZGlhbm5lcyBvZiB0aGUgYmluYXJ5CisgICAgaWYgbm90ICgobWFjaGluZSA9PSBlbGYubWFjaGluZSgpKSBvciBcCisgICAgICAgICgoKCJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZSIsIGQpICkgYW5kICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIgb3IgdGFyZ2V0X29zID09ICJsaW51eC1nbnVuMzIiKSkpOgorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gIkFyY2hpdGVjdHVyZSBkaWQgbm90IG1hdGNoICglZCB0byAlZCkgb24gJXMiICUgXAorICAgICAgICAgICAgICAgICAobWFjaGluZSwgZWxmLm1hY2hpbmUoKSwgcGFja2FnZV9xYV9jbGVhbl9wYXRoKHBhdGgsZCkpCisgICAgZWxpZiBub3QgKChiaXRzID09IGVsZi5hYmlTaXplKCkpIG9yICBcCisgICAgICAgICgoKCJ2aXJ0dWFsL2tlcm5lbCIgaW4gcHJvdmlkZXMpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm1vZHVsZSIsIGQpICkgYW5kICh0YXJnZXRfb3MgPT0gImxpbnV4LWdudXgzMiIgb3IgdGFyZ2V0X29zID09ICJsaW51eC1nbnVuMzIiKSkpOgorICAgICAgICBtZXNzYWdlc1siYXJjaCJdID0gIkJpdCBzaXplIGRpZCBub3QgbWF0Y2ggKCVkIHRvICVkKSAlcyBvbiAlcyIgJSBcCisgICAgICAgICAgICAgICAgIChiaXRzLCBlbGYuYWJpU2l6ZSgpLCBicG4sIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorICAgIGVsaWYgbm90IGxpdHRsZWVuZGlhbiA9PSBlbGYuaXNMaXR0bGVFbmRpYW4oKToKKyAgICAgICAgbWVzc2FnZXNbImFyY2giXSA9ICJFbmRpYW5uZXMgZGlkIG5vdCBtYXRjaCAoJWQgdG8gJWQpIG9uICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgKGxpdHRsZWVuZGlhbiwgZWxmLmlzTGl0dGxlRW5kaWFuKCksIHBhY2thZ2VfcWFfY2xlYW5fcGF0aChwYXRoLGQpKQorCitRQVBBVEhURVNUW2Rlc2t0b3BdID0gInBhY2thZ2VfcWFfY2hlY2tfZGVza3RvcCIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2Rlc2t0b3AocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgUnVuIGFsbCBkZXNrdG9wIGZpbGVzIHRocm91Z2ggZGVza3RvcC1maWxlLXZhbGlkYXRlLgorICAgICIiIgorICAgIGlmIHBhdGguZW5kc3dpdGgoIi5kZXNrdG9wIik6CisgICAgICAgIGRlc2t0b3BfZmlsZV92YWxpZGF0ZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJyxUcnVlKSwnZGVza3RvcC1maWxlLXZhbGlkYXRlJykKKyAgICAgICAgb3V0cHV0ID0gb3MucG9wZW4oIiVzICVzIiAlIChkZXNrdG9wX2ZpbGVfdmFsaWRhdGUsIHBhdGgpKQorICAgICAgICAjIFRoaXMgb25seSBwcm9kdWNlcyBvdXRwdXQgb24gZXJyb3JzCisgICAgICAgIGZvciBsIGluIG91dHB1dDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJkZXNrdG9wIl0gPSAiRGVza3RvcCBmaWxlIGlzc3VlOiAiICsgbC5zdHJpcCgpCisKK1FBUEFUSFRFU1RbdGV4dHJlbF0gPSAicGFja2FnZV9xYV90ZXh0cmVsIgorZGVmIHBhY2thZ2VfcWFfdGV4dHJlbChwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiB0aGUgYmluYXJ5IGNvbnRhaW5zIHJlbG9jYXRpb25zIGluIC50ZXh0CisgICAgIiIiCisKKyAgICBpZiBub3QgZWxmOgorICAgICAgICByZXR1cm4KKworICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICByZXR1cm4KKworICAgIHBoZHJzID0gZWxmLnJ1bl9vYmpkdW1wKCItcCIsIGQpCisgICAgc2FuZSA9IFRydWUKKworICAgIGltcG9ydCByZQorICAgIHRleHRyZWxfcmUgPSByZS5jb21waWxlKCJccytURVhUUkVMXHMrIikKKyAgICBmb3IgbGluZSBpbiBwaGRycy5zcGxpdCgiXG4iKToKKyAgICAgICAgaWYgdGV4dHJlbF9yZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorCisgICAgaWYgbm90IHNhbmU6CisgICAgICAgIG1lc3NhZ2VzWyJ0ZXh0cmVsIl0gPSAiRUxGIGJpbmFyeSAnJXMnIGhhcyByZWxvY2F0aW9ucyBpbiAudGV4dCIgJSBwYXRoCisKK1FBUEFUSFRFU1RbbGRmbGFnc10gPSAicGFja2FnZV9xYV9oYXNoX3N0eWxlIgorZGVmIHBhY2thZ2VfcWFfaGFzaF9zdHlsZShwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayBpZiB0aGUgYmluYXJ5IGhhcyB0aGUgcmlnaHQgaGFzaCBzdHlsZS4uLgorICAgICIiIgorCisgICAgaWYgbm90IGVsZjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBnbnVfaGFzaCA9ICItLWhhc2gtc3R5bGU9Z251IiBpbiBkLmdldFZhcignTERGTEFHUycsIFRydWUpCisgICAgaWYgbm90IGdudV9oYXNoOgorICAgICAgICBnbnVfaGFzaCA9ICItLWhhc2gtc3R5bGU9Ym90aCIgaW4gZC5nZXRWYXIoJ0xERkxBR1MnLCBUcnVlKQorICAgIGlmIG5vdCBnbnVfaGFzaDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBzYW5lID0gRmFsc2UKKyAgICBoYXNfc3ltcyA9IEZhbHNlCisKKyAgICBwaGRycyA9IGVsZi5ydW5fb2JqZHVtcCgiLXAiLCBkKQorCisgICAgIyBJZiB0aGlzIGJpbmFyeSBoYXMgc3ltYm9scywgd2UgZXhwZWN0IGl0IHRvIGhhdmUgR05VX0hBU0ggdG9vLgorICAgIGZvciBsaW5lIGluIHBoZHJzLnNwbGl0KCJcbiIpOgorICAgICAgICBpZiAiU1lNVEFCIiBpbiBsaW5lOgorICAgICAgICAgICAgaGFzX3N5bXMgPSBUcnVlCisgICAgICAgIGlmICJHTlVfSEFTSCIgaW4gbGluZToKKyAgICAgICAgICAgIHNhbmUgPSBUcnVlCisgICAgICAgIGlmICJbbWlwczMyXSIgaW4gbGluZSBvciAiW21pcHM2NF0iIGluIGxpbmU6CisgICAgICAgICAgICBzYW5lID0gVHJ1ZQorCisgICAgaWYgaGFzX3N5bXMgYW5kIG5vdCBzYW5lOgorICAgICAgICBtZXNzYWdlc1sibGRmbGFncyJdID0gIk5vIEdOVV9IQVNIIGluIHRoZSBlbGYgYmluYXJ5OiAnJXMnIiAlIHBhdGgKKworCitRQVBBVEhURVNUW2J1aWxkcGF0aHNdID0gInBhY2thZ2VfcWFfY2hlY2tfYnVpbGRwYXRocyIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2J1aWxkcGF0aHMocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIGJ1aWxkIHBhdGhzIGluc2lkZSB0YXJnZXQgZmlsZXMgYW5kIGVycm9yIGlmIG5vdCBmb3VuZCBpbiB0aGUgd2hpdGVsaXN0CisgICAgIiIiCisgICAgIyBJZ25vcmUgLmRlYnVnIGZpbGVzLCBub3QgaW50ZXJlc3RpbmcKKyAgICBpZiBwYXRoLmZpbmQoIi5kZWJ1ZyIpICE9IC0xOgorICAgICAgICByZXR1cm4KKworICAgICMgSWdub3JlIHN5bWxpbmtzCisgICAgaWYgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgIHJldHVybgorCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgIGZpbGVfY29udGVudCA9IGYucmVhZCgpCisgICAgICAgIGlmIHRtcGRpciBpbiBmaWxlX2NvbnRlbnQ6CisgICAgICAgICAgICBtZXNzYWdlc1siYnVpbGRwYXRocyJdID0gIkZpbGUgJXMgaW4gcGFja2FnZSBjb250YWluZWQgcmVmZXJlbmNlIHRvIHRtcGRpciIgJSBwYWNrYWdlX3FhX2NsZWFuX3BhdGgocGF0aCxkKQorCisKK1FBUEFUSFRFU1RbeG9yZy1kcml2ZXItYWJpXSA9ICJwYWNrYWdlX3FhX2NoZWNrX3hvcmdfZHJpdmVyX2FiaSIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX3hvcmdfZHJpdmVyX2FiaShwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGF0IGFsbCBwYWNrYWdlcyBjb250YWluaW5nIFhvcmcgZHJpdmVycyBoYXZlIEFCSSBkZXBlbmRlbmNpZXMKKyAgICAiIiIKKworICAgICMgU2tpcCBkZXYsIGRiZyBvciBuYXRpdmVzZGsgcGFja2FnZXMKKyAgICBpZiBuYW1lLmVuZHN3aXRoKCItZGV2Iikgb3IgbmFtZS5lbmRzd2l0aCgiLWRiZyIpIG9yIG5hbWUuc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICByZXR1cm4KKworICAgIGRyaXZlcmRpciA9IGQuZXhwYW5kKCIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2RyaXZlcnMvIikKKyAgICBpZiBkcml2ZXJkaXIgaW4gcGF0aCBhbmQgcGF0aC5lbmRzd2l0aCgiLnNvIik6CisgICAgICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICAgICAgZm9yIHJkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgbmFtZSwgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgaWYgcmRlcC5zdGFydHN3aXRoKCIlc3hvcmctYWJpLSIgJSBtbHByZWZpeCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1lc3NhZ2VzWyJ4b3JnLWRyaXZlci1hYmkiXSA9ICJQYWNrYWdlICVzIGNvbnRhaW5zIFhvcmcgZHJpdmVyICglcykgYnV0IG5vIHhvcmctYWJpLSBkZXBlbmRlbmNpZXMiICUgKG5hbWUsIG9zLnBhdGguYmFzZW5hbWUocGF0aCkpCisKK1FBUEFUSFRFU1RbaW5mb2Rpcl0gPSAicGFja2FnZV9xYV9jaGVja19pbmZvZGlyIgorZGVmIHBhY2thZ2VfcWFfY2hlY2tfaW5mb2RpcihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiIKKyAgICBDaGVjayB0aGF0IC91c3Ivc2hhcmUvaW5mby9kaXIgaXNuJ3Qgc2hpcHBlZCBpbiBhIHBhcnRpY3VsYXIgcGFja2FnZQorICAgICIiIgorICAgIGluZm9kaXIgPSBkLmV4cGFuZCgiJHtpbmZvZGlyfS9kaXIiKQorCisgICAgaWYgaW5mb2RpciBpbiBwYXRoOgorICAgICAgICBtZXNzYWdlc1siaW5mb2RpciJdID0gIlRoZSAvdXNyL3NoYXJlL2luZm8vZGlyIGZpbGUgaXMgbm90IG1lYW50IHRvIGJlIHNoaXBwZWQgaW4gYSBwYXJ0aWN1bGFyIHBhY2thZ2UuIgorCitRQVBBVEhURVNUW3N5bWxpbmstdG8tc3lzcm9vdF0gPSAicGFja2FnZV9xYV9jaGVja19zeW1saW5rX3RvX3N5c3Jvb3QiCitkZWYgcGFja2FnZV9xYV9jaGVja19zeW1saW5rX3RvX3N5c3Jvb3QocGF0aCwgbmFtZSwgZCwgZWxmLCBtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCB0aGUgcGFja2FnZSBkb2Vzbid0IGNvbnRhaW4gYW55IGFic29sdXRlIHN5bWxpbmtzIHRvIHRoZSBzeXNyb290LgorICAgICIiIgorICAgIGlmIG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICB0YXJnZXQgPSBvcy5yZWFkbGluayhwYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHRhcmdldC5zdGFydHN3aXRoKHRtcGRpcik6CisgICAgICAgICAgICAgICAgdHJpbW1lZCA9IHBhdGgucmVwbGFjZShvcy5wYXRoLmpvaW4gKGQuZ2V0VmFyKCJQS0dERVNUIiwgVHJ1ZSksIG5hbWUpLCAiIikKKyAgICAgICAgICAgICAgICBtZXNzYWdlc1sic3ltbGluay10by1zeXNyb290Il0gPSAiU3ltbGluayAlcyBpbiAlcyBwb2ludHMgdG8gVE1QRElSIiAlICh0cmltbWVkLCBuYW1lKQorZGVmIHBhY2thZ2VfcWFfY2hlY2tfbGljZW5zZSh3b3JrZGlyLCBkKToKKyAgICAiIiIKKyAgICBDaGVjayBmb3IgY2hhbmdlcyBpbiB0aGUgbGljZW5zZSBmaWxlcyAKKyAgICAiIiIKKyAgICBpbXBvcnQgdGVtcGZpbGUKKyAgICBzYW5lID0gVHJ1ZQorCisgICAgbGljX2ZpbGVzID0gZC5nZXRWYXIoJ0xJQ19GSUxFU19DSEtTVU0nLCBUcnVlKQorICAgIGxpYyA9IGQuZ2V0VmFyKCdMSUNFTlNFJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBpZiBsaWMgPT0gIkNMT1NFRCI6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBub3QgbGljX2ZpbGVzOgorICAgICAgICBiYi5lcnJvcihwbiArICI6IFJlY2lwZSBmaWxlIGRvZXMgbm90IGhhdmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uIChMSUNfRklMRVNfQ0hLU1VNKSIpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorCisgICAgZm9yIHVybCBpbiBsaWNfZmlsZXMuc3BsaXQoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgKHR5cGUsIGhvc3QsIHBhdGgsIHVzZXIsIHBzd2QsIHBhcm0pID0gYmIuZmV0Y2guZGVjb2RldXJsKHVybCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLk1hbGZvcm1lZFVybDoKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIHBuICsgIjogTElDX0ZJTEVTX0NIS1NVTSBjb250YWlucyBhbiBpbnZhbGlkIFVSTDogIiArIHVybCkKKyAgICAgICAgc3JjbGljZmlsZSA9IG9zLnBhdGguam9pbihzcmNkaXIsIHBhdGgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzcmNsaWNmaWxlKToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIHBuICsgIjogTElDX0ZJTEVTX0NIS1NVTSBwb2ludHMgdG8gYW4gaW52YWxpZCBmaWxlOiAiICsgc3JjbGljZmlsZSkKKworICAgICAgICByZWNpcGVtZDUgPSBwYXJtLmdldCgnbWQ1JywgJycpCisgICAgICAgIGJlZ2lubGluZSwgZW5kbGluZSA9IDAsIDAKKyAgICAgICAgaWYgJ2JlZ2lubGluZScgaW4gcGFybToKKyAgICAgICAgICAgIGJlZ2lubGluZSA9IGludChwYXJtWydiZWdpbmxpbmUnXSkKKyAgICAgICAgaWYgJ2VuZGxpbmUnIGluIHBhcm06CisgICAgICAgICAgICBlbmRsaW5lID0gaW50KHBhcm1bJ2VuZGxpbmUnXSkKKworICAgICAgICBpZiAobm90IGJlZ2lubGluZSkgYW5kIChub3QgZW5kbGluZSk6CisgICAgICAgICAgICBtZDVjaGtzdW0gPSBiYi51dGlscy5tZDVfZmlsZShzcmNsaWNmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmkgPSBvcGVuKHNyY2xpY2ZpbGUsICdyYicpCisgICAgICAgICAgICBmbyA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShtb2RlPSd3YicsIHByZWZpeD0ncG9reS4nLCBzdWZmaXg9Jy50bXAnLCBkZWxldGU9RmFsc2UpCisgICAgICAgICAgICB0bXBsaWNmaWxlID0gZm8ubmFtZTsKKyAgICAgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgICAgIGxpbmVzb3V0ID0gMAorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmk6CisgICAgICAgICAgICAgICAgbGluZW5vICs9IDEKKyAgICAgICAgICAgICAgICBpZiAobGluZW5vID49IGJlZ2lubGluZSk6IAorICAgICAgICAgICAgICAgICAgICBpZiAoKGxpbmVubyA8PSBlbmRsaW5lKSBvciBub3QgZW5kbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmby53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNvdXQgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZvLmZsdXNoKCkKKyAgICAgICAgICAgIGZvLmNsb3NlKCkKKyAgICAgICAgICAgIGZpLmNsb3NlKCkKKyAgICAgICAgICAgIG1kNWNoa3N1bSA9IGJiLnV0aWxzLm1kNV9maWxlKHRtcGxpY2ZpbGUpCisgICAgICAgICAgICBvcy51bmxpbmsodG1wbGljZmlsZSkKKworICAgICAgICBpZiByZWNpcGVtZDUgPT0gbWQ1Y2hrc3VtOgorICAgICAgICAgICAgYmIubm90ZSAocG4gKyAiOiBtZDUgY2hlY2tzdW0gbWF0Y2hlZCBmb3IgIiwgdXJsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVjaXBlbWQ1OgorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogbWQ1IGRhdGEgaXMgbm90IG1hdGNoaW5nIGZvciAiLCB1cmwpCisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBUaGUgbmV3IG1kNSBjaGVja3N1bSBpcyAiLCBtZDVjaGtzdW0pCisgICAgICAgICAgICAgICAgaWYgYmVnaW5saW5lOgorICAgICAgICAgICAgICAgICAgICBpZiBlbmRsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjZmlsZWRlc2MgPSAiJXMgKGxpbmVzICVkIHRocm91Z2ggdG8gJWQpIiAlIChzcmNsaWNmaWxlLCBiZWdpbmxpbmUsIGVuZGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9ICIlcyAoYmVnaW5uaW5nIG9uIGxpbmUgJWQpIiAlIChzcmNsaWNmaWxlLCBiZWdpbmxpbmUpCisgICAgICAgICAgICAgICAgZWxpZiBlbmRsaW5lOgorICAgICAgICAgICAgICAgICAgICBzcmNmaWxlZGVzYyA9ICIlcyAoZW5kaW5nIG9uIGxpbmUgJWQpIiAlIChzcmNsaWNmaWxlLCBlbmRsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNyY2ZpbGVkZXNjID0gc3JjbGljZmlsZQorICAgICAgICAgICAgICAgIGJiLmVycm9yKHBuICsgIjogQ2hlY2sgaWYgdGhlIGxpY2Vuc2UgaW5mb3JtYXRpb24gaGFzIGNoYW5nZWQgaW4gJXMgdG8gdmVyaWZ5IHRoYXQgdGhlIExJQ0VOU0UgdmFsdWUgXCIlc1wiIHJlbWFpbnMgdmFsaWQiICUgKHNyY2ZpbGVkZXNjLCBsaWMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcihwbiArICI6IG1kNSBjaGVja3N1bSBpcyBub3Qgc3BlY2lmaWVkIGZvciAiLCB1cmwpCisgICAgICAgICAgICAgICAgYmIuZXJyb3IocG4gKyAiOiBUaGUgbWQ1IGNoZWNrc3VtIGlzICIsIG1kNWNoa3N1bSkKKyAgICAgICAgICAgIHNhbmUgPSBGYWxzZQorCisgICAgcmV0dXJuIHNhbmUKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfc3RhZ2VkKHBhdGgsZCk6CisgICAgIiIiCisgICAgQ2hlY2sgc3RhZ2VkIGxhIGFuZCBwYyBmaWxlcyBmb3Igc2FuaXR5CisgICAgICAtZS5nLiBpbnN0YWxsZWQgYmVpbmcgZmFsc2UKKworICAgICAgICBBcyB0aGlzIGlzIHJ1biBhZnRlciBldmVyeSBzdGFnZSB3ZSBzaG91bGQgYmUgYWJsZQorICAgICAgICB0byBmaW5kIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBlcnJvcnMgZWFzaWx5IGV2ZW4KKyAgICAgICAgaWYgd2UgbG9vayBhdCBldmVyeSAucGMgYW5kIC5sYSBmaWxlCisgICAgIiIiCisKKyAgICBzYW5lID0gVHJ1ZQorICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHdvcmtkaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAid29yayIpCisKKyAgICBpbnN0YWxsZWQgPSAiaW5zdGFsbGVkPXllcyIKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJuYXRpdmUiLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCJjcm9zcyIsIGQpOgorICAgICAgICBwa2djb25maWdjaGVjayA9IHdvcmtkaXIKKyAgICBlbHNlOgorICAgICAgICBwa2djb25maWdjaGVjayA9IHRtcGRpcgorCisgICAgIyBmaW5kIGFsbCAubGEgYW5kIC5wYyBmaWxlcworICAgICMgcmVhZCB0aGUgY29udGVudAorICAgICMgYW5kIGNoZWNrIGZvciBzdHVmZiB0aGF0IGxvb2tzIHdyb25nCisgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LGZpbGUpCisgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCIubGEiKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgd29ya2RpciBpbiBmaWxlX2NvbnRlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgZmFpbGVkIHNhbml0eSB0ZXN0ICh3b3JrZGlyKSBpbiBwYXRoICVzIiAlIChmaWxlLHJvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImxhIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICAgICAgZWxpZiBmaWxlLmVuZHN3aXRoKCIucGMiKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50ID0gZi5yZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnY29uZmlnY2hlY2sgaW4gZmlsZV9jb250ZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGZhaWxlZCBzYW5pdHkgdGVzdCAodG1wZGlyKSBpbiBwYXRoICVzIiAlIChmaWxlLHJvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBrZ2NvbmZpZyIsIGVycm9yX21zZywgZCkKKworICAgIHJldHVybiBzYW5lCisKKyMgV2FsayBvdmVyIGFsbCBmaWxlcyBpbiBhIGRpcmVjdG9yeSBhbmQgY2FsbCBmdW5jCitkZWYgcGFja2FnZV9xYV93YWxrKHBhdGgsIHdhcm5mdW5jcywgZXJyb3JmdW5jcywgc2tpcCwgcGFja2FnZSwgZCk6CisgICAgaW1wb3J0IG9lLnFhCisKKyAgICAjaWYgdGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiwgdGhlbiBmaXggdGhlIGRpY3QgYWJvdmUKKyAgICB0YXJnZXRfb3MgICA9IGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKQorICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKworICAgIHdhcm5pbmdzID0ge30KKyAgICBlcnJvcnMgPSB7fQorICAgIGZvciBwYXRoIGluIHBrZ2ZpbGVzW3BhY2thZ2VdOgorICAgICAgICAgICAgZWxmID0gb2UucWEuRUxGRmlsZShwYXRoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGVsZi5vcGVuKCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBlbGYgPSBOb25lCisgICAgICAgICAgICBmb3IgZnVuYyBpbiB3YXJuZnVuY3M6CisgICAgICAgICAgICAgICAgZnVuYyhwYXRoLCBwYWNrYWdlLCBkLCBlbGYsIHdhcm5pbmdzKQorICAgICAgICAgICAgZm9yIGZ1bmMgaW4gZXJyb3JmdW5jczoKKyAgICAgICAgICAgICAgICBmdW5jKHBhdGgsIHBhY2thZ2UsIGQsIGVsZiwgZXJyb3JzKQorCisgICAgZm9yIHcgaW4gd2FybmluZ3M6CisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKHcsIHdhcm5pbmdzW3ddLCBkKQorICAgIGZvciBlIGluIGVycm9yczoKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoZSwgZXJyb3JzW2VdLCBkKQorCisgICAgcmV0dXJuIGxlbihlcnJvcnMpID09IDAKKworZGVmIHBhY2thZ2VfcWFfY2hlY2tfcmRlcGVuZHMocGtnLCBwa2dkZXN0LCBza2lwLCB0YXNrZGVwcywgcGFja2FnZXMsIGQpOgorICAgICMgRG9uJ3QgZG8gdGhpcyBjaGVjayBmb3Iga2VybmVsL21vZHVsZSByZWNpcGVzLCB0aGVyZSBhcmVuJ3QgdG9vIG1hbnkgZGVidWcvZGV2ZWxvcG1lbnQKKyAgICAjIHBhY2thZ2VzIGFuZCB5b3UgY2FuIGdldCBmYWxzZSBwb3NpdGl2ZXMgZS5nLiBvbiBrZXJuZWwtbW9kdWxlLWxpcmMtZGV2CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygia2VybmVsIiwgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygibW9kdWxlLWJhc2UiLCBkKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHNhbmUgPSBUcnVlCisgICAgaWYgbm90ICItZGJnIiBpbiBwa2cgYW5kIG5vdCAicGFja2FnZWdyb3VwLSIgaW4gcGtnIGFuZCBub3QgIi1pbWFnZSIgaW4gcGtnOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICAjIE5vdyBjaGVjayB0aGUgUkRFUEVORFMKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMobG9jYWxkYXRhLmdldFZhcignUkRFUEVORFMnLCBUcnVlKSBvciAiIikKKworICAgICAgICAjIE5vdyBkbyB0aGUgc2FuaXR5IGNoZWNrISEhCisgICAgICAgIGlmICJidWlsZC1kZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgIGZvciByZGVwZW5kIGluIHJkZXBlbmRzOgorICAgICAgICAgICAgICAgIGlmICItZGJnIiBpbiByZGVwZW5kIGFuZCAiZGVidWctZGVwcyIgbm90IGluIHNraXA6CisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyByZGVwZW5kcyBvbiAlcyIgJSAocGtnLHJkZXBlbmQpCisgICAgICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZGVidWctZGVwcyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgICAgICBpZiAobm90ICItZGV2IiBpbiBwa2cgYW5kIG5vdCAiLXN0YXRpY2RldiIgaW4gcGtnKSBhbmQgcmRlcGVuZC5lbmRzd2l0aCgiLWRldiIpIGFuZCAiZGV2LWRlcHMiIG5vdCBpbiBza2lwOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXMgcmRlcGVuZHMgb24gJXMiICUgKHBrZywgcmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJkZXYtZGVwcyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgICAgICAgICBpZiByZGVwZW5kIG5vdCBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHJkZXBlbmQsIGQpCisgICAgICAgICAgICAgICAgICAgIGlmIHJkZXBfZGF0YSBhbmQgJ1BOJyBpbiByZGVwX2RhdGEgYW5kIHJkZXBfZGF0YVsnUE4nXSBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZGVwX2RhdGEgb3Igbm90ICdQTicgaW4gcmRlcF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnZGF0YV9kaXIgPSBkLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlcyA9IG9zLmxpc3RkaXIoIiVzL3J1bnRpbWUtcnByb3ZpZGVzLyVzLyIgJSAocGtnZGF0YV9kaXIsIHJkZXBlbmQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHBvc3NpYmxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocCwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZGVwX2RhdGEgYW5kICdQTicgaW4gcmRlcF9kYXRhIGFuZCByZGVwX2RhdGFbJ1BOJ10gaW4gdGFza2RlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIHJkZXBfZGF0YSBhbmQgJ1BOJyBpbiByZGVwX2RhdGEgYW5kIHJkZXBfZGF0YVsnUE4nXSBpbiB0YXNrZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlcyByZGVwZW5kcyBvbiAlcywgYnV0IGl0IGlzbid0IGEgYnVpbGQgZGVwZW5kZW5jeT8iICUgKHBrZywgcmRlcGVuZCkKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJidWlsZC1kZXBzIiwgZXJyb3JfbXNnLCBkKQorCisgICAgICAgIGlmICJmaWxlLXJkZXBzIiBub3QgaW4gc2tpcDoKKyAgICAgICAgICAgIGlnbm9yZWRfZmlsZV9yZGVwcyA9IHNldChbJy9iaW4vc2gnLCAnL3Vzci9iaW4vZW52JywgJ3J0bGQoR05VX0hBU0gpJ10pCisgICAgICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgICAgICAgICBpZ25vcmVkX2ZpbGVfcmRlcHMgfD0gc2V0KFsnL2Jpbi9iYXNoJywgJy91c3IvYmluL3BlcmwnXSkKKyAgICAgICAgICAgICMgRm9yIFNhdmluZyB0aGUgRklMRVJERVBFTkRTCisgICAgICAgICAgICBmaWxlcmRlcGVuZHMgPSB7fQorICAgICAgICAgICAgcmRlcF9kYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICAgICAgICAgIGZvciBrZXkgaW4gcmRlcF9kYXRhOgorICAgICAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJGSUxFUkRFUEVORFNfIik6CisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJrZXkgaW4gcmRlcF9kYXRhW2tleV0uc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1YmtleSBub3QgaW4gaWdub3JlZF9maWxlX3JkZXBzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IGl0IHN0YXJ0cyB3aXRoIEZJTEVSREVQRU5EU18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHNbc3Via2V5XSA9IGtleVsxMzpdCisKKyAgICAgICAgICAgIGlmIGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICBuZXh0ID0gcmRlcGVuZHMKKyAgICAgICAgICAgICAgICBkb25lID0gcmRlcGVuZHNbOl0KKyAgICAgICAgICAgICAgICAjIEZpbmQgYWxsIHRoZSByZGVwZW5kcyBvbiB0aGUgZGVwZW5kZW5jeSBjaGFpbgorICAgICAgICAgICAgICAgIHdoaWxlIG5leHQ6CisgICAgICAgICAgICAgICAgICAgIG5ldyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciByZGVwIGluIG5leHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZGVwX2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocmRlcCwgZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9yZGVwcyA9IHJkZXBfZGF0YS5nZXQoIlJERVBFTkRTXyIgKyByZGVwKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN1Yl9yZGVwczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1Yl9yZGVwIGluIHN1Yl9yZGVwcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Yl9yZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN1Yl9yZGVwLnN0YXJ0c3dpdGgoJygnKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2UucGFja2FnZWRhdGEuaGFzX3N1YnBrZ2RhdGEoc3ViX3JkZXAsIGQpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEl0J3MgYSBuZXcgcmRlcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChzdWJfcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LmFwcGVuZChzdWJfcmRlcCkKKyAgICAgICAgICAgICAgICAgICAgbmV4dCA9IG5ldworCisgICAgICAgICAgICAgICAgIyBBZGQgdGhlIHJwcm92aWRlcyBvZiBpdHNlbGYKKyAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGRvbmUuaW5zZXJ0KDAsIHBrZykKKworICAgICAgICAgICAgICAgICMgVGhlIHB5dGhvbiBpcyBub3QgYSBwYWNrYWdlLCBidXQgcHl0aG9uLWNvcmUgcHJvdmlkZXMgaXQsIHNvCisgICAgICAgICAgICAgICAgIyBza2lwIGNoZWNraW5nIC91c3IvYmluL3B5dGhvbiBpZiBweXRob24gaXMgaW4gdGhlIHJkZXBzLCBpbgorICAgICAgICAgICAgICAgICMgY2FzZSB0aGVyZSBpcyBhIFJERVBFTkRTX3BrZyA9ICJweXRob24iIGluIHRoZSByZWNpcGUuCisgICAgICAgICAgICAgICAgZm9yIHB5IGluIFsgZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgKyAicHl0aG9uIiwgInB5dGhvbiIgXToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHkgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVyZGVwZW5kcy5wb3AoIi91c3IvYmluL3B5dGhvbiIsTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUucmVtb3ZlKHB5KQorICAgICAgICAgICAgICAgIGZvciByZGVwIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICMgRm9yIFNhdmluZyB0aGUgRklMRVJQUk9WSURFUywgUlBST1ZJREVTIGFuZCBGSUxFU19JTkZPCisgICAgICAgICAgICAgICAgICAgIHJkZXBfZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfc3VicGtnZGF0YShyZGVwLCBkKQorICAgICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIHJkZXBfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCJGSUxFUlBST1ZJREVTXyIpIG9yIGtleS5zdGFydHN3aXRoKCJSUFJPVklERVNfIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1YmtleSBpbiByZGVwX2RhdGFba2V5XS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKHN1YmtleSxOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgdGhlIGZpbGVzIGxpc3QgdG8gdGhlIHJwcm92aWRlcworICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5ID09ICJGSUxFU19JTkZPIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFVzZSBldmFsKCkgdG8gbWFrZSBpdCBhcyBhIGRpY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc3Via2V5IGluIGV2YWwocmRlcF9kYXRhW2tleV0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcmRlcGVuZHMucG9wKHN1YmtleSxOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZmlsZXJkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBCcmVhayBpZiBhbGwgdGhlIGZpbGUgcmRlcGVuZHMgYXJlIG1ldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGZpbGVyZGVwZW5kczoKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGNvbnRhaW5lZCBpbiBwYWNrYWdlICVzIHJlcXVpcmVzICVzLCBidXQgbm8gcHJvdmlkZXJzIGZvdW5kIGluIGl0cyBSREVQRU5EUyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVyZGVwZW5kc1trZXldLHBrZywga2V5KQorICAgICAgICAgICAgICAgIHNhbmUgPSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZmlsZS1yZGVwcyIsIGVycm9yX21zZywgZCkKKworICAgIHJldHVybiBzYW5lCisKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2RlcHMocGtnLCBwa2dkZXN0LCBza2lwLCBkKToKKyAgICBzYW5lID0gVHJ1ZQorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgcGtnKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorCisgICAgZGVmIGNoZWNrX3ZhbGlkX2RlcHModmFyKToKKyAgICAgICAgc2FuZSA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcnZhciA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXNfJXM6ICVzIiAlICh2YXIsIHBrZywgZSkpCisgICAgICAgIGZvciBkZXAgaW4gcnZhcjoKKyAgICAgICAgICAgIGZvciB2IGluIHJ2YXJbZGVwXToKKyAgICAgICAgICAgICAgICBpZiB2IGFuZCBub3Qgdi5zdGFydHN3aXRoKCgnPCAnLCAnPSAnLCAnPiAnLCAnPD0gJywgJz49JykpOgorICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cgPSAiJXNfJXMgaXMgaW52YWxpZDogJXMgKCVzKSAgIG9ubHkgY29tcGFyaXNvbnMgPCwgPSwgPiwgPD0sIGFuZCA+PSBhcmUgYWxsb3dlZCIgJSAodmFyLCBwa2csIGRlcCwgdikKKyAgICAgICAgICAgICAgICAgICAgc2FuZSA9IHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJkZXAtY21wIiwgZXJyb3JfbXNnLCBkKQorICAgICAgICByZXR1cm4gc2FuZQorCisgICAgc2FuZSA9IFRydWUKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUkRFUEVORFMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JSRUNPTU1FTkRTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSU1VHR0VTVFMnKToKKyAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgaWYgbm90IGNoZWNrX3ZhbGlkX2RlcHMoJ1JQUk9WSURFUycpOgorICAgICAgICBzYW5lID0gRmFsc2UKKyAgICBpZiBub3QgY2hlY2tfdmFsaWRfZGVwcygnUlJFUExBQ0VTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorICAgIGlmIG5vdCBjaGVja192YWxpZF9kZXBzKCdSQ09ORkxJQ1RTJyk6CisgICAgICAgIHNhbmUgPSBGYWxzZQorCisgICAgcmV0dXJuIHNhbmUKKworUUFQQVRIVEVTVFtleHBhbmRlZC1kXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2V4cGFuZGVkX2QiCitkZWYgcGFja2FnZV9xYV9jaGVja19leHBhbmRlZF9kKHBhdGgsbmFtZSxkLGVsZixtZXNzYWdlcyk6CisgICAgIiIiCisgICAgQ2hlY2sgZm9yIHRoZSBleHBhbmRlZCBEICgke0R9KSB2YWx1ZSBpbiBwa2dfKiBhbmQgRklMRVMKKyAgICB2YXJpYWJsZXMsIHdhcm4gdGhlIHVzZXIgdG8gdXNlIGl0IGNvcnJlY3RseS4KKyAgICAiIiIKKworICAgIHNhbmUgPSBUcnVlCisgICAgZXhwYW5kZWRfZCA9IGQuZ2V0VmFyKCdEJyxUcnVlKQorCisgICAgIyBHZXQgcGFja2FnZXMgZm9yIGN1cnJlbnQgcmVjaXBlIGFuZCBpdGVyYXRlCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgiICIpCisgICAgZm9yIHBhayBpbiBwYWNrYWdlczoKKyAgICAjIEdvIHRocm91Z2ggYWxsIHZhcmlhYmxlcyBhbmQgY2hlY2sgaWYgZXhwYW5kZWQgRCBpcyBmb3VuZCwgd2FybiB0aGUgdXNlciBhY2NvcmRpbmdseQorICAgICAgICBmb3IgdmFyIGluICdGSUxFUycsJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybSc6CisgICAgICAgICAgICBiYnZhciA9IGQuZ2V0VmFyKHZhciArICJfIiArIHBhaywgRmFsc2UpCisgICAgICAgICAgICBpZiBiYnZhcjoKKyAgICAgICAgICAgICAgICAjIEJpdGJha2UgZXhwYW5kcyAke0R9IHdpdGhpbiBiYnZhciBkdXJpbmcgdGhlIHByZXZpb3VzIHN0ZXAsIHNvIHdlIGNoZWNrIGZvciBpdHMgZXhwYW5kZWQgdmFsdWUKKyAgICAgICAgICAgICAgICBpZiBleHBhbmRlZF9kIGluIGJidmFyOgorICAgICAgICAgICAgICAgICAgICBpZiB2YXIgPT0gJ0ZJTEVTJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzWyJleHBhbmRlZC1kIl0gPSAiRklMRVMgaW4gJXMgcmVjaXBlIHNob3VsZCBub3QgY29udGFpbiB0aGUgJHtEfSB2YXJpYWJsZSBhcyBpdCByZWZlcmVuY2VzIHRoZSBsb2NhbCBidWlsZCBkaXJlY3Rvcnkgbm90IHRoZSB0YXJnZXQgZmlsZXN5c3RlbSwgYmVzdCBzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhlICR7RH0gcmVmZXJlbmNlIiAlIHBhaworICAgICAgICAgICAgICAgICAgICAgICAgc2FuZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlc1siZXhwYW5kZWQtZCJdID0gIiVzIGluICVzIHJlY2lwZSBjb250YWlucyAke0R9LCBpdCBzaG91bGQgYmUgcmVwbGFjZWQgYnkgJEQgaW5zdGVhZCIgJSAodmFyLCBwYWspCisgICAgICAgICAgICAgICAgICAgICAgICBzYW5lID0gRmFsc2UKKyAgICByZXR1cm4gc2FuZQorCitkZWYgcGFja2FnZV9xYV9jaGVja19lbmNvZGluZyhrZXlzLCBlbmNvZGUsIGQpOgorICAgIGRlZiBjaGVja19lbmNvZGluZyhrZXksZW5jKToKKyAgICAgICAgc2FuZSA9IFRydWUKKyAgICAgICAgdmFsdWUgPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSB1bmljb2RlKHZhbHVlLCBlbmMpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gIiVzIGhhcyBub24gJXMgY2hhcmFjdGVycyIgJSAoa2V5LGVuYykKKyAgICAgICAgICAgICAgICBzYW5lID0gRmFsc2UKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW52YWxpZC1jaGFycyIsIGVycm9yX21zZywgZCkKKyAgICAgICAgcmV0dXJuIHNhbmUKKworICAgIGZvciBrZXkgaW4ga2V5czoKKyAgICAgICAgc2FuZSA9IGNoZWNrX2VuY29kaW5nKGtleSwgZW5jb2RlKQorICAgICAgICBpZiBub3Qgc2FuZToKKyAgICAgICAgICAgIGJyZWFrCisKK0hPU1RfVVNFUl9VSUQgOj0gIiR7QG9zLmdldHVpZCgpfSIKK0hPU1RfVVNFUl9HSUQgOj0gIiR7QG9zLmdldGdpZCgpfSIKKworUUFQQVRIVEVTVFtob3N0LXVzZXItY29udGFtaW5hdGVkXSA9ICJwYWNrYWdlX3FhX2NoZWNrX2hvc3RfdXNlciIKK2RlZiBwYWNrYWdlX3FhX2NoZWNrX2hvc3RfdXNlcihwYXRoLCBuYW1lLCBkLCBlbGYsIG1lc3NhZ2VzKToKKyAgICAiIiJDaGVjayBmb3IgcGF0aHMgb3V0c2lkZSBvZiAvaG9tZSB3aGljaCBhcmUgb3duZWQgYnkgdGhlIHVzZXIgcnVubmluZyBiaXRiYWtlLiIiIgorCisgICAgaWYgbm90IG9zLnBhdGgubGV4aXN0cyhwYXRoKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGhvbWUgPSBvcy5wYXRoLmpvaW4oZGVzdCwgJ2hvbWUnKQorICAgIGlmIHBhdGggPT0gaG9tZSBvciBwYXRoLnN0YXJ0c3dpdGgoaG9tZSArIG9zLnNlcCk6CisgICAgICAgIHJldHVybgorCisgICAgdHJ5OgorICAgICAgICBzdGF0ID0gb3MubHN0YXQocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcmFpc2UKKyAgICBlbHNlOgorICAgICAgICBjaGVja191aWQgPSBpbnQoZC5nZXRWYXIoJ0hPU1RfVVNFUl9VSUQnLCBUcnVlKSkKKyAgICAgICAgaWYgc3RhdC5zdF91aWQgPT0gY2hlY2tfdWlkOgorICAgICAgICAgICAgbWVzc2FnZXNbImhvc3QtdXNlci1jb250YW1pbmF0ZWQiXSA9ICIlcyBpcyBvd25lZCBieSB1aWQgJWQsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSB1c2VyIHJ1bm5pbmcgYml0YmFrZS4gVGhpcyBtYXkgYmUgZHVlIHRvIGhvc3QgY29udGFtaW5hdGlvbiIgJSAocGF0aCwgY2hlY2tfdWlkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgY2hlY2tfZ2lkID0gaW50KGQuZ2V0VmFyKCdIT1NUX1VTRVJfR0lEJywgVHJ1ZSkpCisgICAgICAgIGlmIHN0YXQuc3RfZ2lkID09IGNoZWNrX2dpZDoKKyAgICAgICAgICAgIG1lc3NhZ2VzWyJob3N0LXVzZXItY29udGFtaW5hdGVkIl0gPSAiJXMgaXMgb3duZWQgYnkgZ2lkICVkLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgdXNlciBydW5uaW5nIGJpdGJha2UuIFRoaXMgbWF5IGJlIGR1ZSB0byBob3N0IGNvbnRhbWluYXRpb24iICUgKHBhdGgsIGNoZWNrX2dpZCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKyMgVGhlIFBBQ0tBR0UgRlVOQyB0byBzY2FuIGVhY2ggcGFja2FnZQorcHl0aG9uIGRvX3BhY2thZ2VfcWEgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBiYi5ub3RlKCJETyBQQUNLQUdFIFFBIikKKworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygicmVhZF9zdWJwYWNrYWdlX21ldGFkYXRhIiwgZCkKKworICAgICMgQ2hlY2sgbm9uIFVURi04IGNoYXJhY3RlcnMgb24gcmVjaXBlJ3MgbWV0YWRhdGEKKyAgICBwYWNrYWdlX3FhX2NoZWNrX2VuY29kaW5nKFsnREVTQ1JJUFRJT04nLCAnU1VNTUFSWScsICdMSUNFTlNFJywgJ1NFQ1RJT04nXSwgJ3V0Zi04JywgZCkKKworICAgIGxvZ2RpciA9IGQuZ2V0VmFyKCdUJywgVHJ1ZSkKKyAgICBwa2cgPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgIyBDaGVjayB0aGUgY29tcGlsZSBsb2cgZm9yIGhvc3QgY29udGFtaW5hdGlvbgorICAgIGNvbXBpbGVsb2cgPSBvcy5wYXRoLmpvaW4obG9nZGlyLCJsb2cuZG9fY29tcGlsZSIpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21waWxlbG9nKToKKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJ0NST1NTIENPTVBJTEUgQmFkbmVzczonIC1lICdpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uJyAlcyA+IC9kZXYvbnVsbCIgJSBjb21waWxlbG9nCisgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChzdGF0ZW1lbnQsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICBtc2cgPSAiJXM6IFRoZSBjb21waWxlIGxvZyBpbmRpY2F0ZXMgdGhhdCBob3N0IGluY2x1ZGUgYW5kL29yIGxpYnJhcnkgcGF0aHMgd2VyZSB1c2VkLlxuIFwKKyAgICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb2cgJyVzJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICUgKHBrZywgY29tcGlsZWxvZykKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJjb21waWxlLWhvc3QtcGF0aCIsIG1zZywgZCkKKworICAgICMgQ2hlY2sgdGhlIGluc3RhbGwgbG9nIGZvciBob3N0IGNvbnRhbWluYXRpb24KKyAgICBpbnN0YWxsbG9nID0gb3MucGF0aC5qb2luKGxvZ2RpciwibG9nLmRvX2luc3RhbGwiKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5zdGFsbGxvZyk6CisgICAgICAgIHN0YXRlbWVudCA9ICJncmVwIC1lICdDUk9TUyBDT01QSUxFIEJhZG5lc3M6JyAtZSAnaXMgdW5zYWZlIGZvciBjcm9zcy1jb21waWxhdGlvbicgJXMgPiAvZGV2L251bGwiICUgaW5zdGFsbGxvZworICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbXNnID0gIiVzOiBUaGUgaW5zdGFsbCBsb2cgaW5kaWNhdGVzIHRoYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdlcmUgdXNlZC5cbiBcCisgICAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9nICclcycgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAlIChwa2csIGluc3RhbGxsb2cpCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5zdGFsbC1ob3N0LXBhdGgiLCBtc2csIGQpCisKKyAgICAjIFNjYW4gdGhlIHBhY2thZ2VzLi4uCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IHNldCgoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkpCisKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgZ2xvYmFsIHBrZ2ZpbGVzCisgICAgcGtnZmlsZXMgPSB7fQorICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIHBrZ2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIGNwYXRoLndhbGsocGtnZGVzdCArICIvIiArIHBrZyk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwa2dmaWxlc1twa2ddLmFwcGVuZCh3YWxrcm9vdCArIG9zLnNlcCArIGZpbGUpCisKKyAgICAjIG5vIHBhY2thZ2VzIHNob3VsZCBiZSBzY2FubmVkCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICByZXR1cm4KKworICAgIHRlc3RtYXRyaXggPSBkLmdldFZhckZsYWdzKCJRQVBBVEhURVNUIikKKyAgICBpbXBvcnQgcmUKKyAgICAjIFRoZSBwYWNrYWdlIG5hbWUgbWF0Y2hlcyB0aGUgW2EtejAtOS4rLV0rIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgIHBrZ25hbWVfcGF0dGVybiA9IHJlLmNvbXBpbGUoIl5bYS16MC05ListXSskIikKKworICAgIHRhc2tkZXBkYXRhID0gZC5nZXRWYXIoIkJCX1RBU0tERVBEQVRBIiwgRmFsc2UpCisgICAgdGFza2RlcHMgPSBzZXQoKQorICAgIGZvciBkZXAgaW4gdGFza2RlcGRhdGE6CisgICAgICAgIHRhc2tkZXBzLmFkZCh0YXNrZGVwZGF0YVtkZXBdWzBdKQorCisgICAgZyA9IGdsb2JhbHMoKQorICAgIHdhbGtfc2FuZSA9IFRydWUKKyAgICByZGVwZW5kc19zYW5lID0gVHJ1ZQorICAgIGRlcHNfc2FuZSA9IFRydWUKKyAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgc2tpcCA9IChkLmdldFZhcignSU5TQU5FX1NLSVBfJyArIHBhY2thZ2UsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGlmIHNraXA6CisgICAgICAgICAgICBiYi5ub3RlKCJQYWNrYWdlICVzIHNraXBwaW5nIFFBIHRlc3RzOiAlcyIgJSAocGFja2FnZSwgc3RyKHNraXApKSkKKyAgICAgICAgd2FybmNoZWNrcyA9IFtdCisgICAgICAgIGZvciB3IGluIChkLmdldFZhcigiV0FSTl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgdyBpbiBza2lwOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIHcgaW4gdGVzdG1hdHJpeCBhbmQgdGVzdG1hdHJpeFt3XSBpbiBnOgorICAgICAgICAgICAgICAgIHdhcm5jaGVja3MuYXBwZW5kKGdbdGVzdG1hdHJpeFt3XV0pCisgICAgICAgIGVycm9yY2hlY2tzID0gW10KKyAgICAgICAgZm9yIGUgaW4gKGQuZ2V0VmFyKCJFUlJPUl9RQSIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZSBpbiBza2lwOgorICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGUgaW4gdGVzdG1hdHJpeCBhbmQgdGVzdG1hdHJpeFtlXSBpbiBnOgorICAgICAgICAgICAgICAgIGVycm9yY2hlY2tzLmFwcGVuZChnW3Rlc3RtYXRyaXhbZV1dKQorCisgICAgICAgIGJiLm5vdGUoIkNoZWNraW5nIFBhY2thZ2U6ICVzIiAlIHBhY2thZ2UpCisgICAgICAgICMgQ2hlY2sgcGFja2FnZSBuYW1lCisgICAgICAgIGlmIG5vdCBwa2duYW1lX3BhdHRlcm4ubWF0Y2gocGFja2FnZSk6CisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtnbmFtZSIsCisgICAgICAgICAgICAgICAgICAgICIlcyBkb2Vzbid0IG1hdGNoIHRoZSBbYS16MC05ListXSsgcmVnZXhcbiIgJSBwYWNrYWdlLCBkKQorCisgICAgICAgIHBhdGggPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBhY2thZ2UpCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX3dhbGsocGF0aCwgd2FybmNoZWNrcywgZXJyb3JjaGVja3MsIHNraXAsIHBhY2thZ2UsIGQpOgorICAgICAgICAgICAgd2Fsa19zYW5lICA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX3JkZXBlbmRzKHBhY2thZ2UsIHBrZ2Rlc3QsIHNraXAsIHRhc2tkZXBzLCBwYWNrYWdlcywgZCk6CisgICAgICAgICAgICByZGVwZW5kc19zYW5lID0gRmFsc2UKKyAgICAgICAgaWYgbm90IHBhY2thZ2VfcWFfY2hlY2tfZGVwcyhwYWNrYWdlLCBwa2dkZXN0LCBza2lwLCBkKToKKyAgICAgICAgICAgIGRlcHNfc2FuZSA9IEZhbHNlCisKKworICAgIGlmICdsaWJkaXInIGluIGQuZ2V0VmFyKCJBTExfUUEiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBwYWNrYWdlX3FhX2NoZWNrX2xpYmRpcihkKQorCisgICAgcWFfc2FuZSA9IGQuZ2V0VmFyKCJRQV9TQU5FIiwgVHJ1ZSkKKyAgICBpZiBub3Qgd2Fsa19zYW5lIG9yIG5vdCByZGVwZW5kc19zYW5lIG9yIG5vdCBkZXBzX3NhbmUgb3Igbm90IHFhX3NhbmU6CisgICAgICAgIGJiLmZhdGFsKCJRQSBydW4gZm91bmQgZmF0YWwgZXJyb3JzLiBQbGVhc2UgY29uc2lkZXIgZml4aW5nIHRoZW0uIikKKyAgICBiYi5ub3RlKCJET05FIHdpdGggUEFDS0FHRSBRQSIpCit9CisKK2RvX3BhY2thZ2VfcWFbcmRlcHRhc2tdID0gImRvX3BhY2thZ2VkYXRhIgorYWRkdGFzayBkb19wYWNrYWdlX3FhIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UgYmVmb3JlIGRvX2J1aWxkCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3FhIgorZG9fcGFja2FnZV9xYVtzc3RhdGUtaW5wdXRkaXJzXSA9ICIiCitkb19wYWNrYWdlX3FhW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIiCitweXRob24gZG9fcGFja2FnZV9xYV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VfcWFfc2V0c2NlbmUKKworcHl0aG9uIGRvX3FhX3N0YWdpbmcoKSB7CisgICAgYmIubm90ZSgiUUEgY2hlY2tpbmcgc3RhZ2luZyIpCisKKyAgICBpZiBub3QgcGFja2FnZV9xYV9jaGVja19zdGFnZWQoZC5leHBhbmQoJyR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19MSUJESVJ9JyksIGQpOgorICAgICAgICBiYi5mYXRhbCgiUUEgc3RhZ2luZyB3YXMgYnJva2VuIGJ5IHRoZSBwYWNrYWdlIGJ1aWx0IGFib3ZlIikKK30KKworcHl0aG9uIGRvX3FhX2NvbmZpZ3VyZSgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBjb25maWcubG9nIGZvciBjcm9zcyBjb21waWxlIGlzc3VlcworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgY29uZmlncyA9IFtdCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBiYi5ub3RlKCJDaGVja2luZyBhdXRvdG9vbHMgZW52aXJvbm1lbnQgZm9yIGNvbW1vbiBtaXNjb25maWd1cmF0aW9uIikKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3b3JrZGlyKToKKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLWUgJ0NST1NTIENPTVBJTEUgQmFkbmVzczonIC1lICdpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uJyAlcyA+IC9kZXYvbnVsbCIgJSBcCisgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCJjb25maWcubG9nIikKKyAgICAgICAgaWYgImNvbmZpZy5sb2ciIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKHN0YXRlbWVudCwgc2hlbGw9VHJ1ZSkgPT0gMDoKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiIiJUaGlzIGF1dG9jb25mIGxvZyBpbmRpY2F0ZXMgZXJyb3JzLCBpdCBsb29rZWQgYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdoaWxlIGRldGVybWluaW5nIHN5c3RlbSBjYXBhYmlsaXRpZXMuCitSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICclcyciIiIgJSByb290KQorCisgICAgICAgIGlmICJjb25maWd1cmUuYWMiIGluIGZpbGVzOgorICAgICAgICAgICAgY29uZmlncy5hcHBlbmQob3MucGF0aC5qb2luKHJvb3QsImNvbmZpZ3VyZS5hYyIpKQorICAgICAgICBpZiAiY29uZmlndXJlLmluIiBpbiBmaWxlczoKKyAgICAgICAgICAgIGNvbmZpZ3MuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCAiY29uZmlndXJlLmluIikpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIGdldHRleHQgY29uZmlndXJhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIGFyZSBjb3JyZWN0CisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBjbmYgPSBkLmdldFZhcignRVhUUkFfT0VDT05GJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiAiZ2V0dGV4dCIgbm90IGluIGQuZ2V0VmFyKCdQJywgVHJ1ZSkgYW5kICJnY2MtcnVudGltZSIgbm90IGluIGQuZ2V0VmFyKCdQJywgVHJ1ZSkgYW5kICItLWRpc2FibGUtbmxzIiBub3QgaW4gY25mOgorICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKToKKyAgICAgICAgICAgIGd0ID0gImdldHRleHQtbmF0aXZlIgorICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgICAgICBndCA9ICJuYXRpdmVzZGstZ2V0dGV4dCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGd0ID0gInZpcnR1YWwvIiArIG1sICsgImdldHRleHQiCisgICAgICAgIGRlcHMgPSBiYi51dGlscy5leHBsb2RlX2RlcHMoZC5nZXRWYXIoJ0RFUEVORFMnLCBUcnVlKSBvciAiIikKKyAgICAgICAgaWYgZ3Qgbm90IGluIGRlcHM6CisgICAgICAgICAgICBmb3IgY29uZmlnIGluIGNvbmZpZ3M6CisgICAgICAgICAgICAgICAgZ251ID0gImdyZXAgXCJeW1s6c3BhY2U6XV0qQU1fR05VX0dFVFRFWFRcIiAlcyA+L2Rldi9udWxsIiAlIGNvbmZpZworICAgICAgICAgICAgICAgIGlmIHN1YnByb2Nlc3MuY2FsbChnbnUsIHNoZWxsPVRydWUpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCIiIiVzIHJlcXVpcmVkIGJ1dCBub3QgaW4gREVQRU5EUyBmb3IgZmlsZSAlcy4KK01pc3NpbmcgaW5oZXJpdCBnZXR0ZXh0PyIiIiAlIChndCwgY29uZmlnKSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgQ2hlY2sgbGljZW5zZSB2YXJpYWJsZXMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGlmIG5vdCBwYWNrYWdlX3FhX2NoZWNrX2xpY2Vuc2Uod29ya2RpciwgZCk6CisgICAgICAgIGJiLmZhdGFsKCJMaWNlbnNpbmcgRXJyb3I6IExJQ19GSUxFU19DSEtTVU0gZG9lcyBub3QgbWF0Y2gsIHBsZWFzZSBmaXgiKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB1bnJlY29nbmlzZWQgY29uZmlndXJlIG9wdGlvbnMgKHdpdGggYSB3aGl0ZSBsaXN0KQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImF1dG90b29scyIsIGQpOgorICAgICAgICBiYi5ub3RlKCJDaGVja2luZyBjb25maWd1cmUgb3V0cHV0IGZvciB1bnJlY29nbmlzZWQgb3B0aW9ucyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZsYWcgPSAiV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6IgorICAgICAgICAgICAgbG9nID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdCJywgVHJ1ZSksICdjb25maWcubG9nJykKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZ3JlcCcsICctRicsIGZsYWcsIGxvZ10pLnJlcGxhY2UoJywgJywgJyAnKQorICAgICAgICAgICAgb3B0aW9ucyA9IHNldCgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgICAgIG9wdGlvbnMgfD0gc2V0KGxpbmUucGFydGl0aW9uKGZsYWcpWzJdLnNwbGl0KCkpCisgICAgICAgICAgICB3aGl0ZWxpc3QgPSBzZXQoZC5nZXRWYXIoIlVOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCIsIFRydWUpLnNwbGl0KCkpCisgICAgICAgICAgICBvcHRpb25zIC09IHdoaXRlbGlzdAorICAgICAgICAgICAgaWYgb3B0aW9uczoKKyAgICAgICAgICAgICAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgICAgICAgICAgICAgZXJyb3JfbXNnID0gcG4gKyAiOiBjb25maWd1cmUgd2FzIHBhc3NlZCB1bnJlY29nbmlzZWQgb3B0aW9uczogIiArICIgIi5qb2luKG9wdGlvbnMpCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInVua25vd24tY29uZmlndXJlLW9wdGlvbiIsIGVycm9yX21zZywgZCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBDaGVjayBpbnZhbGlkIFBBQ0tBR0VDT05GSUcKKyAgICBwa2djb25maWcgPSAoZC5nZXRWYXIoIlBBQ0tBR0VDT05GSUciLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGlmIHBrZ2NvbmZpZzoKKyAgICAgICAgcGtnY29uZmlnZmxhZ3MgPSBkLmdldFZhckZsYWdzKCJQQUNLQUdFQ09ORklHIikgb3Ige30KKyAgICAgICAgZm9yIHBjb25maWcgaW4gcGtnY29uZmlnOgorICAgICAgICAgICAgaWYgcGNvbmZpZyBub3QgaW4gcGtnY29uZmlnZmxhZ3M6CisgICAgICAgICAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICAgICAgICAgIGVycm9yX21zZyA9ICIlczogaW52YWxpZCBQQUNLQUdFQ09ORklHOiAlcyIgJSAocG4sIHBjb25maWcpCisgICAgICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoImludmFsaWQtcGtnY29uZmlnIiwgZXJyb3JfbXNnLCBkKQorfQorCitweXRob24gZG9fcWFfdW5wYWNrKCkgeworICAgIGJiLm5vdGUoIkNoZWNraW5nIGhhcyAke1N9IGJlZW4gY3JlYXRlZCIpCisKKyAgICBzX2RpciA9IGQuZ2V0VmFyKCdTJywgVHJ1ZSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc19kaXIpOgorICAgICAgICBiYi53YXJuKCclczogdGhlIGRpcmVjdG9yeSAlcyAoJXMpIHBvaW50ZWQgdG8gYnkgdGhlIFMgdmFyaWFibGUgZG9lc25cJ3QgZXhpc3QgLSBwbGVhc2Ugc2V0IFMgd2l0aGluIHRoZSByZWNpcGUgdG8gcG9pbnQgdG8gd2hlcmUgdGhlIHNvdXJjZSBoYXMgYmVlbiB1bnBhY2tlZCB0bycgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQuZ2V0VmFyKCdTJywgRmFsc2UpLCBzX2RpcikpCit9CisKKyMgVGhlIFN0YWdpbmcgRnVuYywgdG8gY2hlY2sgYWxsIHN0YWdpbmcKKyNhZGR0YXNrIHFhX3N0YWdpbmcgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdCBiZWZvcmUgZG9fYnVpbGQKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbcG9zdGZ1bmNzXSArPSAiZG9fcWFfc3RhZ2luZyAiCisKKyMgQ2hlY2sgYnJva2VuIGNvbmZpZy5sb2cgZmlsZXMsIGZvciBwYWNrYWdlcyByZXF1aXJpbmcgR2V0dGV4dCB3aGljaCBkb24ndAorIyBoYXZlIGl0IGluIERFUEVORFMgYW5kIGZvciBjb3JyZWN0IExJQ19GSUxFU19DSEtTVU0KKyNhZGR0YXNrIHFhX2NvbmZpZ3VyZSBhZnRlciBkb19jb25maWd1cmUgYmVmb3JlIGRvX2NvbXBpbGUKK2RvX2NvbmZpZ3VyZVtwb3N0ZnVuY3NdICs9ICJkb19xYV9jb25maWd1cmUgIgorCisjIENoZWNrIGRvZXMgUyBleGlzdC4KK2RvX3VucGFja1twb3N0ZnVuY3NdICs9ICJkb19xYV91bnBhY2siCisKK3B5dGhvbiAoKSB7CisgICAgdGVzdHMgPSBkLmdldFZhcignQUxMX1FBJywgVHJ1ZSkuc3BsaXQoKQorICAgIGlmICJkZXNrdG9wIiBpbiB0ZXN0czoKKyAgICAgICAgZC5hcHBlbmRWYXIoIlBBQ0tBR0VfREVQRU5EUyIsICIgZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZSIpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIENoZWNrIHZhcmlvdXMgdmFyaWFibGVzCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIENoZWNraW5nICR7RklMRVNFWFRSQVBBVEhTfQorICAgIGV4dHJhcGF0aHMgPSAoZC5nZXRWYXIoIkZJTEVTRVhUUkFQQVRIUyIsIFRydWUpIG9yICIiKQorICAgIGlmICdfX2RlZmF1bHQnIG5vdCBpbiBleHRyYXBhdGhzLnNwbGl0KCI6Iik6CisgICAgICAgIG1zZyA9ICJGSUxFU0VYVFJBUEFUSFMtdmFyaWFibGUsIG11c3QgYWx3YXlzIHVzZSBfcHJlcGVuZCAob3IgX2FwcGVuZClcbiIKKyAgICAgICAgbXNnICs9ICJ0eXBlIG9mIGFzc2lnbm1lbnQsIGFuZCBkb24ndCBmb3JnZXQgdGhlIGNvbG9uLlxuIgorICAgICAgICBtc2cgKz0gIlBsZWFzZSBhc3NpZ24gaXQgd2l0aCB0aGUgZm9ybWF0IG9mOlxuIgorICAgICAgICBtc2cgKz0gIiAgRklMRVNFWFRSQVBBVEhTX2FwcGVuZCA6PSBcIjoke1RISVNESVJ9L1lvdXJfRmlsZXNfUGF0aFwiIG9yXG4iCisgICAgICAgIG1zZyArPSAiICBGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSBcIiR7VEhJU0RJUn0vWW91cl9GaWxlc19QYXRoOlwiXG4iCisgICAgICAgIG1zZyArPSAiaW4geW91ciBiYmFwcGVuZCBmaWxlXG5cbiIKKyAgICAgICAgbXNnICs9ICJZb3VyIGluY29ycmVjdCBhc3NpZ25tZW50IGlzOlxuIgorICAgICAgICBtc2cgKz0gIiVzXG4iICUgZXh0cmFwYXRocworICAgICAgICBiYi53YXJuKG1zZykKKworICAgIGlmIGQuZ2V0VmFyKCdkb19zdGFnZScsIFRydWUpIGlzIG5vdCBOb25lOgorICAgICAgICBiYi5mYXRhbCgiTGVnYWN5IHN0YWdpbmcgZm91bmQgZm9yICVzIGFzIGl0IGhhcyBhIGRvX3N0YWdlIGZ1bmN0aW9uLiBUaGlzIHdpbGwgbmVlZCBjb252ZXJzaW9uIHRvIGEgZG9faW5zdGFsbCBvciBvZnRlbiBzaW1wbHkgcmVtb3ZhbCB0byB3b3JrIHdpdGggT0UtY29yZSIgJSBkLmdldFZhcigiRklMRSIsIFRydWUpKQorCisgICAgb3ZlcnJpZGVzID0gZC5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpLnNwbGl0KCc6JykKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaWYgcG4gaW4gb3ZlcnJpZGVzOgorICAgICAgICBtc2cgPSAnUmVjaXBlICVzIGhhcyBQTiBvZiAiJXMiIHdoaWNoIGlzIGluIE9WRVJSSURFUywgdGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgYmVoYXZpb3VyLicgJSAoZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSwgcG4pCisgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwbi1vdmVycmlkZXMiLCBtc2csIGQpCisKKyAgICBpc3N1ZXMgPSBbXQorICAgIGlmIChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgZm9yIGRlcCBpbiAoZC5nZXRWYXIoJ1FBREVQRU5EUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ2RlcGVuZHMnLCAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgZGVwKQorICAgICAgICBmb3IgdmFyIGluICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUkNPTkZMSUNUUycsICdSUFJPVklERVMnLCAnUlJFUExBQ0VTJywgJ0ZJTEVTJywgJ3BrZ19wcmVpbnN0JywgJ3BrZ19wb3N0aW5zdCcsICdwa2dfcHJlcm0nLCAncGtnX3Bvc3RybScsICdBTExPV19FTVBUWSc6CisgICAgICAgICAgICBpZiBkLmdldFZhcih2YXIsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBpc3N1ZXMuYXBwZW5kKHZhcikKKworICAgICAgICBmYWtlcm9vdF90ZXN0cyA9IGQuZ2V0VmFyKCdGQUtFUk9PVF9RQScsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgaWYgc2V0KHRlc3RzKSAmIHNldChmYWtlcm9vdF90ZXN0cyk6CisgICAgICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2VfcWEnLCAnZmFrZXJvb3QnLCAnMScpCisgICAgICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2VfcWEnLCAnZGVwZW5kcycsICcgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3FhJywgJ3JkZXB0YXNrJywgJycpCisgICAgZm9yIGkgaW4gaXNzdWVzOgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtndmFyY2hlY2siLCAiJXM6IFZhcmlhYmxlICVzIGlzIHNldCBhcyBub3QgYmVpbmcgcGFja2FnZSBzcGVjaWZpYywgcGxlYXNlIGZpeCB0aGlzLiIgJSAoZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSwgaSksIGQpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtYXJjaC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMWI3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLWFyY2guYmJjbGFzcwpAQCAtMCwwICsxLDU5IEBACisjCisjIHNldCB0aGUgQVJDSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBmb3Iga2VybmVsIGNvbXBpbGF0aW9uIChpbmNsdWRpbmcKKyMgbW9kdWxlcykuIHJldHVybiB2YWx1ZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgYXJjaGl0ZWN0dXJlIGRpcmVjdG9yaWVzCisjIGluIHRoZSBrZXJuZWwgc291cmNlICJhcmNoIiBkaXJlY3RvcnkKKyMKKwordmFsaWRfYXJjaHMgPSAiYWxwaGEgY3JpcyBpYTY0IFwKKyAgICAgICAgICAgICAgIGkzODYgeDg2IFwKKyAgICAgICAgICAgICAgIG02OGtub21tdSBtNjhrIHBwYyBwb3dlcnBjIHBvd2VycGM2NCBwcGM2NCAgXAorICAgICAgICAgICAgICAgc3BhcmMgc3BhcmM2NCBcCisgICAgICAgICAgICAgICBhcm0gYWFyY2g2NCBcCisgICAgICAgICAgICAgICBtMzJyIG1pcHMgXAorICAgICAgICAgICAgICAgc2ggc2g2NCB1bSBoODMwMCAgIFwKKyAgICAgICAgICAgICAgIHBhcmlzYyBzMzkwICB2ODUwIFwKKyAgICAgICAgICAgICAgIGF2cjMyIGJsYWNrZmluIFwKKyAgICAgICAgICAgICAgIG1pY3JvYmxhemUiCisKK2RlZiBtYXBfa2VybmVsX2FyY2goYSwgZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICB2YWxpZF9hcmNocyA9IGQuZ2V0VmFyKCd2YWxpZF9hcmNocycsIFRydWUpLnNwbGl0KCkKKworICAgIGlmICAgcmUubWF0Y2goJyhpLjg2fGF0aGxvbnx4ODYuNjQpJCcsIGEpOiAgcmV0dXJuICd4ODYnCisgICAgZWxpZiByZS5tYXRjaCgnYXJtZWIkJywgYSk6ICAgICAgICAgICAgICAgICByZXR1cm4gJ2FybScKKyAgICBlbGlmIHJlLm1hdGNoKCdhYXJjaDY0JCcsIGEpOiAgICAgICAgICAgICAgIHJldHVybiAnYXJtNjQnCisgICAgZWxpZiByZS5tYXRjaCgnYWFyY2g2NF9iZSQnLCBhKTogICAgICAgICAgICByZXR1cm4gJ2FybTY0JworICAgIGVsaWYgcmUubWF0Y2goJ21pcHMoZWx8NjR8NjRlbCkkJywgYSk6ICAgICAgcmV0dXJuICdtaXBzJworICAgIGVsaWYgcmUubWF0Y2goJ3AocGN8b3dlcnBjKSh8NjQpJywgYSk6ICAgICAgcmV0dXJuICdwb3dlcnBjJworICAgIGVsaWYgcmUubWF0Y2goJ3NoKDN8NCkkJywgYSk6ICAgICAgICAgICAgICAgcmV0dXJuICdzaCcKKyAgICBlbGlmIHJlLm1hdGNoKCdiZmluJywgYSk6ICAgICAgICAgICAgICAgICAgIHJldHVybiAnYmxhY2tmaW4nCisgICAgZWxpZiByZS5tYXRjaCgnbWljcm9ibGF6ZWVbYmxdJywgYSk6ICAgICAgICByZXR1cm4gJ21pY3JvYmxhemUnCisgICAgZWxpZiBhIGluIHZhbGlkX2FyY2hzOiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJjYW5ub3QgbWFwICclcycgdG8gYSBsaW51eCBrZXJuZWwgYXJjaGl0ZWN0dXJlIiAlIGEpCisKK2V4cG9ydCBBUkNIID0gIiR7QG1hcF9rZXJuZWxfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCl9IgorCitkZWYgbWFwX3Vib290X2FyY2goYSwgZCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBpZiAgIHJlLm1hdGNoKCdwKHBjfG93ZXJwYykofDY0KScsIGEpOiByZXR1cm4gJ3BwYycKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JCcsIGEpOiByZXR1cm4gJ3g4NicKKyAgICByZXR1cm4gYQorCitleHBvcnQgVUJPT1RfQVJDSCA9ICIke0BtYXBfdWJvb3RfYXJjaChkLmdldFZhcignQVJDSCcsIFRydWUpLCBkKX0iCisKKyMgU2V0IFRBUkdFVF8/P19LRVJORUxfQVJDSCBpbiB0aGUgbWFjaGluZSAuY29uZiB0byBzZXQgYXJjaGl0ZWN0dXJlCisjIHNwZWNpZmljIG9wdGlvbnMgbmVjZXNzYXJ5IGZvciBidWlsZGluZyB0aGUga2VybmVsIGFuZCBtb2R1bGVzLgorVEFSR0VUX0NDX0tFUk5FTF9BUkNIID89ICIiCitIT1NUX0NDX0tFUk5FTF9BUkNIID89ICIke1RBUkdFVF9DQ19LRVJORUxfQVJDSH0iCitUQVJHRVRfTERfS0VSTkVMX0FSQ0ggPz0gIiIKK0hPU1RfTERfS0VSTkVMX0FSQ0ggPz0gIiR7VEFSR0VUX0xEX0tFUk5FTF9BUkNIfSIKK1RBUkdFVF9BUl9LRVJORUxfQVJDSCA/PSAiIgorSE9TVF9BUl9LRVJORUxfQVJDSCA/PSAiJHtUQVJHRVRfQVJfS0VSTkVMX0FSQ0h9IgorCitLRVJORUxfQ0MgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0tFUk5FTF9BUkNIfSAtZnVzZS1sZD1iZmQiCitLRVJORUxfTEQgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1sZC5iZmQgJHtIT1NUX0xEX0tFUk5FTF9BUkNIfSIKK0tFUk5FTF9BUiA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWFyICR7SE9TVF9BUl9LRVJORUxfQVJDSH0iCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtZml0aW1hZ2UuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTU2YTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC1maXRpbWFnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjM0IEBACitpbmhlcml0IGtlcm5lbC11Ym9vdAorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGtlcm5lbHR5cGUgPSBkLmdldFZhcignS0VSTkVMX0lNQUdFVFlQRScsIFRydWUpCisgICAgaWYga2VybmVsdHlwZSA9PSAnZml0SW1hZ2UnOgorICAgICAgICBkZXBlbmRzID0gZC5nZXRWYXIoIkRFUEVORFMiLCBUcnVlKQorICAgICAgICBkZXBlbmRzID0gIiVzIHUtYm9vdC1ta2ltYWdlLW5hdGl2ZSBkdGMtbmF0aXZlIiAlIGRlcGVuZHMKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQorCisJIyBPdmVycmlkZSBLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIHZhcmlhYmxlLCB3aGljaCBpcyBpbnRlcm5hbAorCSMgdG8ga2VybmVsLmJiY2xhc3MgLiBXZSBoYXZlIHRvIG92ZXJyaWRlIGl0LCBzaW5jZSB3ZSBwYWNrIHpJbWFnZQorCSMgKGF0IGxlYXN0IGZvciBub3cpIGludG8gdGhlIGZpdEltYWdlIC4KKyAgICAgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCAiekltYWdlIikKKworICAgICAgICBpbWFnZSA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfSU1BR0UnLCBUcnVlKQorICAgICAgICBpZiBpbWFnZToKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fYXNzZW1ibGVfZml0aW1hZ2UnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfSU1BR0V9OmRvX3Jvb3RmcycpCit9CisKKyMKKyMgRW1pdCB0aGUgZml0SW1hZ2UgSVRTIGhlYWRlcgorIworZml0aW1hZ2VfZW1pdF9maXRfaGVhZGVyKCkgeworCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworL2R0cy12MS87CisKKy8geworICAgICAgICBkZXNjcmlwdGlvbiA9ICJVLUJvb3QgZml0SW1hZ2UgZm9yICR7RElTVFJPX05BTUV9LyR7UFZ9LyR7TUFDSElORX0iOworICAgICAgICAjYWRkcmVzcy1jZWxscyA9IDwxPjsKK0VPRgorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIHNlY3Rpb24gYml0cworIworIyAkMSAuLi4gU2VjdGlvbiBiaXQgdHlwZTogaW1hZ2VzdGFydCAtIGltYWdlIHNlY3Rpb24gc3RhcnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZzdGFydCAgLSBjb25maWd1cmF0aW9uIHNlY3Rpb24gc3RhcnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3RlbmQgICAgLSBzZWN0aW9uIGVuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgZml0ZW5kICAgICAtIGZpdGltYWdlIGVuZAorIworZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50KCkgeworCWNhc2UgJDEgaW4KKwlpbWFnZXN0YXJ0KQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKworICAgICAgICBpbWFnZXMgeworRU9GCisJOzsKKwljb25mc3RhcnQpCisJCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworCisgICAgICAgIGNvbmZpZ3VyYXRpb25zIHsKK0VPRgorCTs7CisJc2VjdGVuZCkKKwkJY2F0IDw8IEVPRiA+PiBmaXQtaW1hZ2UuaXRzCisJfTsKK0VPRgorCTs7CisJZml0ZW5kKQorCQljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKK307CitFT0YKKwk7OworCWVzYWMKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMga2VybmVsIHNlY3Rpb24KKyMKKyMgJDEgLi4uIEltYWdlIGNvdW50ZXIKKyMgJDIgLi4uIFBhdGggdG8ga2VybmVsIGltYWdlCisjICQzIC4uLiBDb21wcmVzc2lvbiB0eXBlCitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fa2VybmVsKCkgeworCisJa2VybmVsX2NzdW09InNoYTEiCisKKwlFTlRSWVBPSU5UPSR7VUJPT1RfRU5UUllQT0lOVH0KKwlpZiB0ZXN0IC1uICIke1VCT09UX0VOVFJZU1lNQk9MfSI7IHRoZW4KKwkJRU5UUllQT0lOVD1gJHtIT1NUX1BSRUZJWH1ubSAke1N9L3ZtbGludXggfCBcCisJCQlhd2sgJyQzPT0iJHtVQk9PVF9FTlRSWVNZTUJPTH0iIHtwcmludCAkMX0nYAorCWZpCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBrZXJuZWxAJHsxfSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJMaW51eCBrZXJuZWwiOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IC9pbmNiaW4vKCIkezJ9Iik7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gImtlcm5lbCI7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoID0gIiR7VUJPT1RfQVJDSH0iOworICAgICAgICAgICAgICAgICAgICAgICAgb3MgPSAibGludXgiOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSAiJHszfSI7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2FkID0gPCR7VUJPT1RfTE9BREFERFJFU1N9PjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gPCR7RU5UUllQT0lOVH0+OworICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2tlcm5lbF9jc3VtfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH07CitFT0YKK30KKworIworIyBFbWl0IHRoZSBmaXRJbWFnZSBJVFMgRFRCIHNlY3Rpb24KKyMKKyMgJDEgLi4uIEltYWdlIGNvdW50ZXIKKyMgJDIgLi4uIFBhdGggdG8gRFRCIGltYWdlCitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fZHRiKCkgeworCisJZHRiX2NzdW09InNoYTEiCisKKwljYXQgPDwgRU9GID4+IGZpdC1pbWFnZS5pdHMKKyAgICAgICAgICAgICAgICBmZHRAJHsxfSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICJGbGF0dGVuZWQgRGV2aWNlIFRyZWUgYmxvYiI7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gL2luY2Jpbi8oIiR7Mn0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAiZmxhdF9kdCI7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmNoID0gIiR7VUJPT1RfQVJDSH0iOworICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gPSAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGdvID0gIiR7ZHRiX2NzdW19IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfTsKK0VPRgorfQorCisjCisjIEVtaXQgdGhlIGZpdEltYWdlIElUUyBjb25maWd1cmF0aW9uIHNlY3Rpb24KKyMKKyMgJDEgLi4uIExpbnV4IGtlcm5lbCBJRAorIyAkMiAuLi4gRFRCIGltYWdlIElECitmaXRpbWFnZV9lbWl0X3NlY3Rpb25fY29uZmlnKCkgeworCisJY29uZl9jc3VtPSJzaGExIgorCisJIyBUZXN0IGlmIHdlIGhhdmUgYW55IERUQnMgYXQgYWxsCisJaWYgWyAteiAiJHsyfSIgXSA7IHRoZW4KKwkJY29uZl9kZXNjPSJCb290IExpbnV4IGtlcm5lbCIKKwkJZmR0X2xpbmU9IiIKKwllbHNlCisJCWNvbmZfZGVzYz0iQm9vdCBMaW51eCBrZXJuZWwgd2l0aCBGRFQgYmxvYiIKKwkJZmR0X2xpbmU9ImZkdCA9IFwiZmR0QCR7Mn1cIjsiCisJZmkKKwlrZXJuZWxfbGluZT0ia2VybmVsID0gXCJrZXJuZWxAJHsxfVwiOyIKKworCWNhdCA8PCBFT0YgPj4gZml0LWltYWdlLml0cworICAgICAgICAgICAgICAgIGRlZmF1bHQgPSAiY29uZkAxIjsKKyAgICAgICAgICAgICAgICBjb25mQDEgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAiJHtjb25mX2Rlc2N9IjsKKwkJCSR7a2VybmVsX2xpbmV9CisJCQkke2ZkdF9saW5lfQorICAgICAgICAgICAgICAgICAgICAgICAgaGFzaEAxIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnbyA9ICIke2NvbmZfY3N1bX0iOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9OworRU9GCit9CisKK2RvX2Fzc2VtYmxlX2ZpdGltYWdlKCkgeworCWlmIHRlc3QgIngke0tFUk5FTF9JTUFHRVRZUEV9IiA9ICJ4Zml0SW1hZ2UiIDsgdGhlbgorCQlrZXJuZWxjb3VudD0xCisJCWR0YmNvdW50PSIiCisJCXJtIC1mIGZpdC1pbWFnZS5pdHMKKworCQlmaXRpbWFnZV9lbWl0X2ZpdF9oZWFkZXIKKworCQkjCisJCSMgU3RlcCAxOiBQcmVwYXJlIGEga2VybmVsIGltYWdlIHNlY3Rpb24uCisJCSMKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IGltYWdlc3RhcnQKKworCQl1Ym9vdF9wcmVwX2tpbWFnZQorCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fa2VybmVsICIke2tlcm5lbGNvdW50fSIgbGludXguYmluICIke2xpbnV4X2NvbXB9IgorCisJCSMKKwkJIyBTdGVwIDI6IFByZXBhcmUgYSBEVEIgaW1hZ2Ugc2VjdGlvbgorCQkjCisJCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQkJZHRiY291bnQ9MQorCQkJZm9yIERUQiBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfTsgZG8KKwkJCQlpZiBlY2hvICR7RFRCfSB8IGdyZXAgLXEgJy9kdHMvJzsgdGhlbgorCQkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJCURUQj1gYmFzZW5hbWUgJHtEVEJ9IHwgc2VkICdzLFwuZHRzJCwuZHRiLGcnYAorCQkJCWZpCisJCQkJRFRCX1BBVEg9ImFyY2gvJHtBUkNIfS9ib290L2R0cy8ke0RUQn0iCisJCQkJaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgorCQkJCQlEVEJfUEFUSD0iYXJjaC8ke0FSQ0h9L2Jvb3QvJHtEVEJ9IgorCQkJCWZpCisKKwkJCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fZHRiICR7ZHRiY291bnR9ICR7RFRCX1BBVEh9CisJCQkJZHRiY291bnQ9YGV4cHIgJHtkdGJjb3VudH0gKyAxYAorCQkJZG9uZQorCQlmaQorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBzZWN0ZW5kCisKKwkJIyBGb3JjZSB0aGUgZmlyc3QgS2VybmVsIGFuZCBEVEIgaW4gdGhlIGRlZmF1bHQgY29uZmlnCisJCWtlcm5lbGNvdW50PTEKKwkJZHRiY291bnQ9MQorCisJCSMKKwkJIyBTdGVwIDM6IFByZXBhcmUgYSBjb25maWd1cmF0aW9ucyBzZWN0aW9uCisJCSMKKwkJZml0aW1hZ2VfZW1pdF9zZWN0aW9uX21haW50IGNvbmZzdGFydAorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9jb25maWcgJHtrZXJuZWxjb3VudH0gJHtkdGJjb3VudH0KKworCQlmaXRpbWFnZV9lbWl0X3NlY3Rpb25fbWFpbnQgc2VjdGVuZAorCisJCWZpdGltYWdlX2VtaXRfc2VjdGlvbl9tYWludCBmaXRlbmQKKworCQkjCisJCSMgU3RlcCA0OiBBc3NlbWJsZSB0aGUgaW1hZ2UKKwkJIworCQl1Ym9vdC1ta2ltYWdlIC1mIGZpdC1pbWFnZS5pdHMgYXJjaC8ke0FSQ0h9L2Jvb3QvZml0SW1hZ2UKKwlmaQorfQorCithZGR0YXNrIGFzc2VtYmxlX2ZpdGltYWdlIGJlZm9yZSBkb19pbnN0YWxsIGFmdGVyIGRvX2NvbXBpbGUKKwora2VybmVsX2RvX2RlcGxveV9hcHBlbmQoKSB7CisJIyBVcGRhdGUgZGVwbG95IGRpcmVjdG9yeQorCWlmIHRlc3QgIngke0tFUk5FTF9JTUFHRVRZUEV9IiA9ICJ4Zml0SW1hZ2UiIDsgdGhlbgorCQljZCAke0J9CisJCWVjaG8gIkNvcHlpbmcgZml0LWltYWdlLml0cyBzb3VyY2UgZmlsZS4uLiIKKwkJaXRzX2Jhc2VfbmFtZT0iJHtLRVJORUxfSU1BR0VUWVBFfS1pdHMtJHtQVn0tJHtQUn0tJHtNQUNISU5FfS0ke0RBVEVUSU1FfSIKKwkJaXRzX3N5bWxpbmtfbmFtZT0ke0tFUk5FTF9JTUFHRVRZUEV9LWl0cy0ke01BQ0hJTkV9CisJCWluc3RhbGwgLW0gMDY0NCBmaXQtaW1hZ2UuaXRzICR7REVQTE9ZRElSfS8ke2l0c19iYXNlX25hbWV9Lml0cworCQlsaW51eF9iaW5fYmFzZV9uYW1lPSIke0tFUk5FTF9JTUFHRVRZUEV9LWxpbnV4LmJpbi0ke1BWfS0ke1BSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorCQlsaW51eF9iaW5fc3ltbGlua19uYW1lPSR7S0VSTkVMX0lNQUdFVFlQRX0tbGludXguYmluLSR7TUFDSElORX0KKwkJaW5zdGFsbCAtbSAwNjQ0IGxpbnV4LmJpbiAke0RFUExPWURJUn0vJHtsaW51eF9iaW5fYmFzZV9uYW1lfS5iaW4KKworCQljZCAke0RFUExPWURJUn0KKwkJbG4gLXNmICR7aXRzX2Jhc2VfbmFtZX0uaXRzICR7aXRzX3N5bWxpbmtfbmFtZX0uaXRzCisJCWxuIC1zZiAke2xpbnV4X2Jpbl9iYXNlX25hbWV9LmJpbiAke2xpbnV4X2Jpbl9zeW1saW5rX25hbWV9LmJpbgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtZ3J1Yi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2Y0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLWdydWIuYmJjbGFzcwpAQCAtMCwwICsxLDkxIEBACisjCisjIFdoaWxlIGluc3RhbGxpbmcgYSBycG0gdG8gdXBkYXRlIGtlcm5lbCBvbiBhIGRlcGxveWVkIHRhcmdldCwgaXQgd2lsbCB1cGRhdGUKKyMgdGhlIGJvb3QgYXJlYSBhbmQgdGhlIGJvb3QgbWVudSB3aXRoIHRoZSBrZXJuZWwgYXMgdGhlIHByaW9yaXR5IGJ1dCBhbGxvdworIyB5b3UgdG8gZmFsbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBrZXJuZWwgYXMgd2VsbC4KKyMKKyMgLSBJbiBrZXJuZWwtaW1hZ2UncyBwcmVpbnN0YWxsIHNjcmlwdGxldCwgaXQgYmFja3MgdXAgb3JpZ2luYWwga2VybmVsIHRvIGF2b2lkCisjICAgcHJvYmFibGUgY29uZmxpY3Rpb24gd2l0aCB0aGUgbmV3IG9uZS4KKyMKKyMgLSBJbiBrZXJuZWwtaW1hZ2UncyBwb3N0aW5zdGFsbCBzY3JpcHRsZXQsIGl0IG1vZGlmaWVzIGdydWIncyBjb25maWcgZmlsZSB0bworIyAgIHVwZGF0ZXMgdGhlIG5ldyBrZXJuZWwgYXMgdGhlIGJvb3QgcHJpb3JpdHkuCisjCisKK3BrZ19wcmVpbnN0X2tlcm5lbC1pbWFnZV9hcHBlbmQgKCkgeworCSMgUGFyc2luZyBjb25mbGljdGlvbgorCVsgLWYgIiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiIF0gJiYgZ3J1YmNmZz0iJEQvYm9vdC9ncnViL21lbnUubGlzdCIKKwlbIC1mICIkRC9ib290L2dydWIvZ3J1Yi5jZmciIF0gJiYgZ3J1YmNmZz0iJEQvYm9vdC9ncnViL2dydWIuY2ZnIgorCWlmIFsgLW4gIiRncnViY2ZnIiBdOyB0aGVuCisJCSMgRGVyZWZlcmVuY2Ugc3ltbGluayB0byBhdm9pZCBjb25mbGljdGlvbiB3aXRoIG5ldyBrZXJuZWwgbmFtZS4KKwkJaWYgZ3JlcCAtcSAiLyR7S0VSTkVMX0lNQUdFVFlQRX0gXCtyb290PSIgJGdydWJjZmc7IHRoZW4KKwkJCWlmIFsgLUwgIiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfSIgXTsgdGhlbgorCQkJCWtpbWFnZT1gcmVhbHBhdGggJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9IDI+L2Rldi9udWxsYAorCQkJCWlmIFsgLWYgIiREJGtpbWFnZSIgXTsgdGhlbgorCQkJCQlzZWQgLWkgInM6JHtLRVJORUxfSU1BR0VUWVBFfSBcK3Jvb3Q9OiR7a2ltYWdlIyMqL30gcm9vdD06IiAkZ3J1YmNmZworCQkJCWZpCisJCQlmaQorCQlmaQorCisJCSMgUmVuYW1lIG9sZCBrZXJuZWwgaWYgaXQgY29uZmxpY3RzIHdpdGggbmV3IGtlcm5lbCBuYW1lLgorCQlpZiBncmVwIC1xICIvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfSBcK3Jvb3Q9IiAkZ3J1YmNmZzsgdGhlbgorCQkJaWYgWyAtZiAiJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IiBdOyB0aGVuCisJCQkJdGltZXN0YW1wPWBkYXRlICslc2AKKwkJCQlraW1hZ2U9IiREL2Jvb3QvJHtLRVJORUxfSU1BR0VUWVBFfS0ke0tFUk5FTF9WRVJTSU9OfS0kdGltZXN0YW1wLWJhY2siCisJCQkJc2VkIC1pICJzOiR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gXCtyb290PToke2tpbWFnZSMjKi99IHJvb3Q9OiIgJGdydWJjZmcKKwkJCQltdiAiJEQvYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IiAiJGtpbWFnZSIKKwkJCWZpCisJCWZpCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1pbWFnZV9wcmVwZW5kICgpIHsKKwlnZXRfbmV3X2dydWJfY2ZnKCkgeworCQlncnViY2ZnPSIkMSIKKwkJb2xkX2ltYWdlPSIkMiIKKwkJdGl0bGU9IlVwZGF0ZSAke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059LSR7UFZ9IgorCQlpZiBbICIke2dydWJjZmcjIyovfSIgPSAiZ3J1Yi5jZmciIF07IHRoZW4KKwkJCXJvb3Rmcz1gZ3JlcCAiICpsaW51eCBcK1teIF1cKyBcK3Jvb3Q9IiAkZ3J1YmNmZyAtbSAxIHwgXAorCQkJCSBzZWQgInMjJHtvbGRfaW1hZ2V9IyR7b2xkX2ltYWdlJS8qfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IyJgCisKKwkJCWVjaG8gIm1lbnVlbnRyeSBcIiR0aXRsZVwiIHsiCisJCQllY2hvICIgICAgc2V0IHJvb3Q9KGhkMCwxKSIKKwkJCWVjaG8gIiRyb290ZnMiCisJCQllY2hvICJ9IgorCQllbGlmIFsgIiR7Z3J1YmNmZyMjKi99IiA9ICJtZW51Lmxpc3QiIF07IHRoZW4KKwkJCXJvb3Rmcz1gZ3JlcCAia2VybmVsIFwrW14gXVwrIFwrcm9vdD0iICRncnViY2ZnIC1tIDEgfCBcCisJCQkJIHNlZCAicyMke29sZF9pbWFnZX0jJHtvbGRfaW1hZ2UlLyp9LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0jImAKKworCQkJZWNobyAiZGVmYXVsdCAwIgorCQkJZWNobyAidGltZW91dCAzMCIKKwkJCWVjaG8gInRpdGxlICR0aXRsZSIKKwkJCWVjaG8gInJvb3QgIChoZDAsMCkiCisJCQllY2hvICIkcm9vdGZzIgorCQlmaQorCX0KKworCWdldF9vbGRfZ3J1Yl9jZmcoKSB7CisJCWdydWJjZmc9IiQxIgorCQlpZiBbICIke2dydWJjZmcjIyovfSIgPSAiZ3J1Yi5jZmciIF07IHRoZW4KKwkJCWNhdCAiJGdydWJjZmciCisJCWVsaWYgWyAiJHtncnViY2ZnIyMqL30iID0gIm1lbnUubGlzdCIgXTsgdGhlbgorCQkJc2VkIC1lICcvXmRlZmF1bHQvZCcgLWUgJy9edGltZW91dC9kJyAiJGdydWJjZmciCisJCWZpCisJfQorCisJaWYgWyAtZiAiJEQvYm9vdC9ncnViL2dydWIuY2ZnIiBdOyB0aGVuCisJCWdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKwkJb2xkX2ltYWdlPWBncmVwICcgKmxpbnV4IFwrW14gXVwrIFwrcm9vdD0nIC1tIDEgIiRncnViY2ZnIiB8IGF3ayAne3ByaW50ICQyfSdgCisJZWxpZiBbIC1mICIkRC9ib290L2dydWIvbWVudS5saXN0IiBdOyB0aGVuCisJCWdydWJjZmc9IiREL2Jvb3QvZ3J1Yi9tZW51Lmxpc3QiCisJCW9sZF9pbWFnZT1gZ3JlcCAnXmtlcm5lbCBcK1teIF1cKyBcK3Jvb3Q9JyAtbSAxICIkZ3J1YmNmZyIgfCBhd2sgJ3twcmludCAkMn0nYAorCWZpCisKKwkjIERvbid0IHVwZGF0ZSBncnViY2ZnIGF0IGZpcnN0IGluc3RhbGwgd2hpbGUgb2xkIGJ6SW1hZ2UgZG9lc24ndCBleGlzdC4KKwlpZiBbIC1mICIkRC9ib290LyR7b2xkX2ltYWdlIyMqL30iIF07IHRoZW4KKwkJZ3J1YmNmZ3RtcD0iJGdydWJjZmcudG1wIgorCQlnZXRfbmV3X2dydWJfY2ZnICIkZ3J1YmNmZyIgIiRvbGRfaW1hZ2UiICA+ICRncnViY2ZndG1wCisJCWdldF9vbGRfZ3J1Yl9jZmcgIiRncnViY2ZnIiA+PiAkZ3J1YmNmZ3RtcAorCQltdiAkZ3J1YmNmZ3RtcCAkZ3J1YmNmZworCQllY2hvICJDYXV0aW9uISBVcGRhdGUga2VybmVsIG1heSBhZmZlY3Qga2VybmVsLW1vZHVsZSEiCisJZmkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC1tb2R1bGUtc3BsaXQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFhNzBlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtbW9kdWxlLXNwbGl0LmJiY2xhc3MKQEAgLTAsMCArMSwyMDMgQEAKK3BrZ19wb3N0aW5zdF9tb2R1bGVzICgpIHsKK2lmIFsgLXogIiREIiBdOyB0aGVuCisJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CitlbHNlCisJIyBpbWFnZS5iYmNsYXNzIHdpbGwgY2FsbCBkZXBtb2R3cmFwcGVyIGFmdGVyIGV2ZXJ5dGhpbmcgaXMgaW5zdGFsbGVkLAorCSMgbm8gbmVlZCB0byBkbyBpdCBoZXJlIGFzIHdlbGwKKwk6CitmaQorfQorCitwa2dfcG9zdHJtX21vZHVsZXMgKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlkZXBtb2QgLWEgJHtLRVJORUxfVkVSU0lPTn0KK2Vsc2UKKwlkZXBtb2R3cmFwcGVyIC1hIC1iICREICR7S0VSTkVMX1ZFUlNJT059CitmaQorfQorCithdXRvbG9hZF9wb3N0aW5zdF9mcmFnbWVudCgpIHsKK2lmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorCW1vZHByb2JlICVzIHx8IHRydWUKK2ZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQvCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3BsaXRfa2VybmVsX21vZHVsZV9wYWNrYWdlcyAiCisKK0tFUk5FTF9NT0RVTEVTX01FVEFfUEFDS0FHRSA/PSAia2VybmVsLW1vZHVsZXMiCisKK3B5dGhvbiBzcGxpdF9rZXJuZWxfbW9kdWxlX3BhY2thZ2VzICgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIG1vZGluZm9leHAgPSByZS5jb21waWxlKCIoW149XSspPSguKikiKQorICAgIGtlcnZlcnJleHAgPSByZS5jb21waWxlKCdeKC4qLWhoLiopW1wuXCtdLiokJykKKyAgICBkZXBtb2RwYXQwID0gcmUuY29tcGlsZSgiXiguKlwuaz9vKTouLiokIikKKyAgICBkZXBtb2RwYXQxID0gcmUuY29tcGlsZSgiXiguKlwuaz9vKTpccyooLipcLms/bylccyokIikKKyAgICBkZXBtb2RwYXQyID0gcmUuY29tcGlsZSgiXiguKlwuaz9vKTpccyooLipcLms/bylccypcXFwkIikKKyAgICBkZXBtb2RwYXQzID0gcmUuY29tcGlsZSgiXlx0KC4qXC5rP28pXHMqXFxcJCIpCisgICAgZGVwbW9kcGF0NCA9IHJlLmNvbXBpbGUoIl5cdCguKlwuaz9vKVxzKiQiKQorCisgICAgZGVmIGV4dHJhY3RfbW9kaW5mbyhmaWxlKToKKyAgICAgICAgaW1wb3J0IHRlbXBmaWxlLCBzdWJwcm9jZXNzCisgICAgICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgICAgIHRmID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHRtcGZpbGUgPSB0ZlsxXQorICAgICAgICBjbWQgPSAiJXNvYmpjb3B5IC1qIC5tb2RpbmZvIC1PIGJpbmFyeSAlcyAlcyIgJSAoZC5nZXRWYXIoIkhPU1RfUFJFRklYIiwgVHJ1ZSkgb3IgIiIsIGZpbGUsIHRtcGZpbGUpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgIGYgPSBvcGVuKHRtcGZpbGUpCisgICAgICAgIGwgPSBmLnJlYWQoKS5zcGxpdCgiXDAwMCIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy5jbG9zZSh0ZlswXSkKKyAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCisgICAgICAgIHZhbHMgPSB7fQorICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgbSA9IG1vZGluZm9leHAubWF0Y2goaSkKKyAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB2YWxzW20uZ3JvdXAoMSldID0gbS5ncm91cCgyKQorICAgICAgICByZXR1cm4gdmFscworCisgICAgZGVmIHBhcnNlX2RlcG1vZCgpOgorCisgICAgICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICAgICAga2VybmVsdmVyID0gZC5nZXRWYXIoJ0tFUk5FTF9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAga2VybmVsdmVyX3N0cmlwcGVkID0ga2VybmVsdmVyCisgICAgICAgIG0gPSBrZXJ2ZXJyZXhwLm1hdGNoKGtlcm5lbHZlcikKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGtlcm5lbHZlcl9zdHJpcHBlZCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgc3RhZ2luZ19rZXJuZWxfZGlyID0gZC5nZXRWYXIoIlNUQUdJTkdfS0VSTkVMX0JVSUxERElSIiwgVHJ1ZSkKKyAgICAgICAgc3lzdGVtX21hcF9maWxlID0gIiVzL2Jvb3QvU3lzdGVtLm1hcC0lcyIgJSAoZHZhciwga2VybmVsdmVyKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3lzdGVtX21hcF9maWxlKToKKyAgICAgICAgICAgIHN5c3RlbV9tYXBfZmlsZSA9ICIlcy9TeXN0ZW0ubWFwLSVzIiAlIChzdGFnaW5nX2tlcm5lbF9kaXIsIGtlcm5lbHZlcikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzeXN0ZW1fbWFwX2ZpbGUpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJTeXN0ZW0ubWFwLSVzIGRvZXMgbm90IGV4aXN0IGluICclcy9ib290JyBub3IgU1RBR0lOR19LRVJORUxfQlVJTERESVIgJyVzJyIgJSAoa2VybmVsdmVyLCBkdmFyLCBzdGFnaW5nX2tlcm5lbF9kaXIpKQorCisgICAgICAgIGNtZCA9ICJkZXBtb2QgLW4gLWEgLWIgJXMgLUYgJXMgJXMiICUgKGR2YXIsIHN5c3RlbV9tYXBfZmlsZSwga2VybmVsdmVyX3N0cmlwcGVkKQorICAgICAgICBmID0gb3MucG9wZW4oY21kLCAncicpCisKKyAgICAgICAgZGVwcyA9IHt9CisgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgd2hpbGUgbGluZToKKyAgICAgICAgICAgIGlmIG5vdCBkZXBtb2RwYXQwLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbTEgPSBkZXBtb2RwYXQxLm1hdGNoKGxpbmUpCisgICAgICAgICAgICBpZiBtMToKKyAgICAgICAgICAgICAgICBkZXBzW20xLmdyb3VwKDEpXSA9IG0xLmdyb3VwKDIpLnNwbGl0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbTIgPSBkZXBtb2RwYXQyLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbTI6CisgICAgICAgICAgICAgICAgICAgIGRlcHNbbTIuZ3JvdXAoMSldID0gbTIuZ3JvdXAoMikuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIG0zID0gZGVwbW9kcGF0My5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICB3aGlsZSBtMzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHNbbTIuZ3JvdXAoMSldLmV4dGVuZChtMy5ncm91cCgxKS5zcGxpdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgbTMgPSBkZXBtb2RwYXQzLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIG00ID0gZGVwbW9kcGF0NC5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgICAgICBkZXBzW20yLmdyb3VwKDEpXS5leHRlbmQobTQuZ3JvdXAoMSkuc3BsaXQoKSkKKyAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBkZXBzCisKKyAgICBkZWYgZ2V0X2RlcGVuZGVuY2llcyhmaWxlLCBwYXR0ZXJuLCBmb3JtYXQpOgorICAgICAgICAjIGZpbGUgbm8gbG9uZ2VyIGluY2x1ZGVzIFBLR0QKKyAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZShkLmdldFZhcignUEtHRCcsIFRydWUpIG9yICcnLCAnJywgMSkKKyAgICAgICAgIyBpbnN0ZWFkIGlzIHByZWZpeGVkIHdpdGggL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059CisgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIi9saWIvbW9kdWxlcy8lcy8iICUgZC5nZXRWYXIoJ0tFUk5FTF9WRVJTSU9OJywgVHJ1ZSkgb3IgJycsICcnLCAxKQorCisgICAgICAgIGlmIGZpbGUgaW4gbW9kdWxlX2RlcHM6CisgICAgICAgICAgICBkZXBlbmRlbmNpZXMgPSBbXQorICAgICAgICAgICAgZm9yIGkgaW4gbW9kdWxlX2RlcHNbZmlsZV06CisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHBhdHRlcm4sIG9zLnBhdGguYmFzZW5hbWUoaSkpCisgICAgICAgICAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgb24gPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGRlcGVuZGVuY3lfcGtnID0gZm9ybWF0ICUgb24KKyAgICAgICAgICAgICAgICBkZXBlbmRlbmNpZXMuYXBwZW5kKGRlcGVuZGVuY3lfcGtnKQorICAgICAgICAgICAgcmV0dXJuIGRlcGVuZGVuY2llcworICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBmcm9iX21ldGFkYXRhKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6CisgICAgICAgIHZhbHMgPSBleHRyYWN0X21vZGluZm8oZmlsZSkKKworICAgICAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgICAgICMgSWYgYXV0b2xvYWRpbmcgaXMgcmVxdWVzdGVkLCBvdXRwdXQgL2V0Yy9tb2R1bGVzLWxvYWQuZC88bmFtZT4uY29uZiBhbmQgYXBwZW5kCisgICAgICAgICMgYXBwcm9wcmlhdGUgbW9kcHJvYmUgY29tbWFuZHMgdG8gdGhlIHBvc3RpbnN0CisgICAgICAgIGF1dG9sb2FkbGlzdCA9IChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9BVVRPTE9BRCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGF1dG9sb2FkID0gZC5nZXRWYXIoJ21vZHVsZV9hdXRvbG9hZF8lcycgJSBiYXNlbmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgYXV0b2xvYWQgYW5kIGF1dG9sb2FkID09IGJhc2VuYW1lOgorICAgICAgICAgICAgYmIud2FybigibW9kdWxlX2F1dG9sb2FkXyVzIHdhcyByZXBsYWNlZCBieSBLRVJORUxfTU9EVUxFX0FVVE9MT0FEIGZvciBjYXNlcyB3aGVyZSBiYXNlbmFtZSA9PSBtb2R1bGUgbmFtZSwgcGxlYXNlIGRyb3AgaXQiICUgYmFzZW5hbWUpCisgICAgICAgIGlmIGF1dG9sb2FkIGFuZCBiYXNlbmFtZSBub3QgaW4gYXV0b2xvYWRsaXN0OgorICAgICAgICAgICAgYmIud2FybigibW9kdWxlX2F1dG9sb2FkXyVzIGlzIGRlZmluZWQgYnV0ICclcycgaXNuJ3QgaW5jbHVkZWQgaW4gS0VSTkVMX01PRFVMRV9BVVRPTE9BRCwgcGxlYXNlIGFkZCBpdCB0aGVyZSIgJSAoYmFzZW5hbWUsIGJhc2VuYW1lKSkKKyAgICAgICAgaWYgYmFzZW5hbWUgaW4gYXV0b2xvYWRsaXN0OgorICAgICAgICAgICAgbmFtZSA9ICclcy9ldGMvbW9kdWxlcy1sb2FkLmQvJXMuY29uZicgJSAoZHZhciwgYmFzZW5hbWUpCisgICAgICAgICAgICBmID0gb3BlbihuYW1lLCAndycpCisgICAgICAgICAgICBpZiBhdXRvbG9hZDoKKyAgICAgICAgICAgICAgICBmb3IgbSBpbiBhdXRvbG9hZC5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIG0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzXG4nICUgYmFzZW5hbWUpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoInBrZ19wb3N0aW5zdF8lcyBub3QgZGVmaW5lZCIgJSBwa2cpCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignYXV0b2xvYWRfcG9zdGluc3RfZnJhZ21lbnQnLCBUcnVlKSAlIChhdXRvbG9hZCBvciBiYXNlbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICAjIFdyaXRlIG91dCBhbnkgbW9kY29uZiBmcmFnbWVudAorICAgICAgICBtb2Rjb25mbGlzdCA9IChkLmdldFZhcigiS0VSTkVMX01PRFVMRV9QUk9CRUNPTkYiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBtb2Rjb25mID0gZC5nZXRWYXIoJ21vZHVsZV9jb25mXyVzJyAlIGJhc2VuYW1lLCBUcnVlKQorICAgICAgICBpZiBtb2Rjb25mIGFuZCBiYXNlbmFtZSBpbiBtb2Rjb25mbGlzdDoKKyAgICAgICAgICAgIG5hbWUgPSAnJXMvZXRjL21vZHByb2JlLmQvJXMuY29uZicgJSAoZHZhciwgYmFzZW5hbWUpCisgICAgICAgICAgICBmID0gb3BlbihuYW1lLCAndycpCisgICAgICAgICAgICBmLndyaXRlKCIlc1xuIiAlIG1vZGNvbmYpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZWxpZiBtb2Rjb25mOgorICAgICAgICAgICAgYmIuZXJyb3IoIlBsZWFzZSBlbnN1cmUgbW9kdWxlICVzIGlzIGxpc3RlZCBpbiBLRVJORUxfTU9EVUxFX1BST0JFQ09ORiBzaW5jZSBtb2R1bGVfY29uZl8lcyBpcyBzZXQiICUgKGJhc2VuYW1lLCBiYXNlbmFtZSkpCisKKyAgICAgICAgZmlsZXMgPSBkLmdldFZhcignRklMRVNfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBmaWxlcyA9ICIlcyAvZXRjL21vZHVsZXMtbG9hZC5kLyVzLmNvbmYgL2V0Yy9tb2Rwcm9iZS5kLyVzLmNvbmYiICUgKGZpbGVzLCBiYXNlbmFtZSwgYmFzZW5hbWUpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18lcycgJSBwa2csIGZpbGVzKQorCisgICAgICAgIGlmICJkZXNjcmlwdGlvbiIgaW4gdmFsczoKKyAgICAgICAgICAgIG9sZF9kZXNjID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OXycgKyBwa2csIFRydWUpIG9yICIiCisgICAgICAgICAgICBkLnNldFZhcignREVTQ1JJUFRJT05fJyArIHBrZywgb2xkX2Rlc2MgKyAiOyAiICsgdmFsc1siZGVzY3JpcHRpb24iXSkKKworICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBkZXAgaW4gZ2V0X2RlcGVuZGVuY2llcyhmaWxlLCBwYXR0ZXJuLCBmb3JtYXQpOgorICAgICAgICAgICAgaWYgbm90IGRlcCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdID0gW10KKyAgICAgICAgZC5zZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcywgY29tbWFzZXA9RmFsc2UpKQorCisgICAgICAgICMgQXZvaWQgYXV0b21hdGljIC1kZXYgcmVjb21tZW5kYXRpb25zIGZvciBtb2R1bGVzIGVuZGluZyB3aXRoIC1kZXYuCisgICAgICAgIGQuc2V0VmFyRmxhZygnUlJFQ09NTUVORFNfJyArIHBrZywgJ25vZGVwcnJlY3MnLCAxKQorCisgICAgbW9kdWxlX2RlcHMgPSBwYXJzZV9kZXBtb2QoKQorICAgIG1vZHVsZV9yZWdleCA9ICdeKC4qKVwuaz9vJCcKKyAgICBtb2R1bGVfcGF0dGVybiA9ICdrZXJuZWwtbW9kdWxlLSVzJworCisgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0X21vZHVsZXMnLCBUcnVlKQorICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtX21vZHVsZXMnLCBUcnVlKQorCisgICAgbW9kdWxlcyA9IGRvX3NwbGl0X3BhY2thZ2VzKGQsIHJvb3Q9Jy9saWIvbW9kdWxlcycsIGZpbGVfcmVnZXg9bW9kdWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybj1tb2R1bGVfcGF0dGVybiwgZGVzY3JpcHRpb249JyVzIGtlcm5lbCBtb2R1bGUnLCBwb3N0aW5zdD1wb3N0aW5zdCwgcG9zdHJtPXBvc3RybSwgcmVjdXJzaXZlPVRydWUsIGhvb2s9ZnJvYl9tZXRhZGF0YSwgZXh0cmFfZGVwZW5kcz0na2VybmVsLSVzJyAlIChkLmdldFZhcigiS0VSTkVMX1ZFUlNJT04iLCBUcnVlKSkpCisgICAgaWYgbW9kdWxlczoKKyAgICAgICAgbWV0YXBrZyA9IGQuZ2V0VmFyKCdLRVJORUxfTU9EVUxFU19NRVRBX1BBQ0tBR0UnLCBUcnVlKQorICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIG1ldGFwa2csICcgJysnICcuam9pbihtb2R1bGVzKSkKKworICAgICMgSWYgbW9kdWxlcy1sb2FkLmQgYW5kIG1vZHByb2JlLmQgYXJlIGVtcHR5IGF0IHRoaXMgcG9pbnQsIHJlbW92ZSB0aGVtIHRvCisgICAgIyBhdm9pZCB3YXJuaW5ncy4gcmVtb3ZlZGlycyBvbmx5IHJhaXNlcyBhbiBPU0Vycm9yIGlmIGFuIGVtcHR5CisgICAgIyBkaXJlY3RvcnkgY2Fubm90IGJlIHJlbW92ZWQuCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBmb3IgZGlyIGluIFsiJXMvZXRjL21vZHByb2JlLmQiICUgKGR2YXIpLCAiJXMvZXRjL21vZHVsZXMtbG9hZC5kIiAlIChkdmFyKSwgIiVzL2V0YyIgJSAoZHZhcildOgorICAgICAgICBpZiBsZW4ob3MubGlzdGRpcihkaXIpKSA9PSAwOgorICAgICAgICAgICAgb3Mucm1kaXIoZGlyKQorfQorCitkb19wYWNrYWdlW3ZhcmRlcHNdICs9ICcke0AiICIuam9pbihtYXAobGFtYmRhIHM6ICJtb2R1bGVfY29uZl8iICsgcywgKGQuZ2V0VmFyKCJLRVJORUxfTU9EVUxFX1BST0JFQ09ORiIsIFRydWUpIG9yICIiKS5zcGxpdCgpKSl9JwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC11Ym9vdC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NWU3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMva2VybmVsLXVib290LmJiY2xhc3MKQEAgLTAsMCArMSwyMCBAQAordWJvb3RfcHJlcF9raW1hZ2UoKSB7CisJaWYgdGVzdCAtZSBhcmNoLyR7QVJDSH0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXggOyB0aGVuCisJCXZtbGludXhfcGF0aD0iYXJjaC8ke0FSQ0h9L2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4IgorCQlsaW51eF9zdWZmaXg9IiIKKwkJbGludXhfY29tcD0ibm9uZSIKKwllbHNlCisJCXZtbGludXhfcGF0aD0idm1saW51eCIKKwkJbGludXhfc3VmZml4PSIuZ3oiCisJCWxpbnV4X2NvbXA9Imd6aXAiCisJZmkKKworCSR7T0JKQ09QWX0gLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1TICIke3ZtbGludXhfcGF0aH0iIGxpbnV4LmJpbgorCisJaWYgWyAiJHtsaW51eF9jb21wfSIgIT0gIm5vbmUiIF0gOyB0aGVuCisJCWd6aXAgLTkgbGludXguYmluCisJCW12IC1mICJsaW51eC5iaW4ke2xpbnV4X3N1ZmZpeH0iIGxpbnV4LmJpbgorCWZpCisKKwllY2hvICIke2xpbnV4X2NvbXB9IgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2tlcm5lbC11aW1hZ2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjczOTY1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwtdWltYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAoraW5oZXJpdCBrZXJuZWwtdWJvb3QKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBrZXJuZWx0eXBlID0gZC5nZXRWYXIoJ0tFUk5FTF9JTUFHRVRZUEUnLCBUcnVlKQorICAgIGlmIGtlcm5lbHR5cGUgPT0gJ3VJbWFnZSc6CisgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcigiREVQRU5EUyIsIFRydWUpCisgICAgICAgIGRlcGVuZHMgPSAiJXMgdS1ib290LW1raW1hZ2UtbmF0aXZlIiAlIGRlcGVuZHMKKyAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQorCisJIyBPdmVycmlkZSBLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFIHZhcmlhYmxlLCB3aGljaCBpcyBpbnRlcm5hbAorCSMgdG8ga2VybmVsLmJiY2xhc3MgLiBXZSBvdmVycmlkZSB0aGUgdmFyaWFibGUgaGVyZSwgc2luY2Ugd2UgbmVlZAorCSMgdG8gYnVpbGQgdUltYWdlIHVzaW5nIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtIGlmIGFuZCBvbmx5IGlmCisJIyBLRUVQVUlNQUdFID09IHllcy4gT3RoZXJ3aXNlLCB3ZSBwYWNrIGNvbXByZXNzZWQgdm1saW51eCBpbnRvCisJIyB0aGUgdUltYWdlIC4KKwlpZiBkLmdldFZhcigiS0VFUFVJTUFHRSIsIFRydWUpICE9ICd5ZXMnOgorICAgICAgICAgICAgZC5zZXRWYXIoIktFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0UiLCAiekltYWdlIikKK30KKworZG9fdWJvb3RfbWtpbWFnZSgpIHsKKwlpZiB0ZXN0ICJ4JHtLRVJORUxfSU1BR0VUWVBFfSIgPSAieHVJbWFnZSIgOyB0aGVuCisJCWlmIHRlc3QgIngke0tFRVBVSU1BR0V9IiAhPSAieHllcyIgOyB0aGVuCisJCQl1Ym9vdF9wcmVwX2tpbWFnZQorCisJCQlFTlRSWVBPSU5UPSR7VUJPT1RfRU5UUllQT0lOVH0KKwkJCWlmIHRlc3QgLW4gIiR7VUJPT1RfRU5UUllTWU1CT0x9IjsgdGhlbgorCQkJCUVOVFJZUE9JTlQ9YCR7SE9TVF9QUkVGSVh9bm0gJHtTfS92bWxpbnV4IHwgXAorCQkJCQlhd2sgJyQzPT0iJHtVQk9PVF9FTlRSWVNZTUJPTH0iIHtwcmludCAkMX0nYAorCQkJZmkKKworCQkJdWJvb3QtbWtpbWFnZSAtQSAke1VCT09UX0FSQ0h9IC1PIGxpbnV4IC1UIGtlcm5lbCAtQyAiJHtsaW51eF9jb21wfSIgLWEgJHtVQk9PVF9MT0FEQUREUkVTU30gLWUgJEVOVFJZUE9JTlQgLW4gIiR7RElTVFJPX05BTUV9LyR7UFZ9LyR7TUFDSElORX0iIC1kIGxpbnV4LmJpbiBhcmNoLyR7QVJDSH0vYm9vdC91SW1hZ2UKKwkJCXJtIC1mIGxpbnV4LmJpbgorCQlmaQorCWZpCit9CisKK2FkZHRhc2sgdWJvb3RfbWtpbWFnZSBiZWZvcmUgZG9faW5zdGFsbCBhZnRlciBkb19jb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsLXlvY3RvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1Zjk0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwteW9jdG8uYmJjbGFzcwpAQCAtMCwwICsxLDM2OCBAQAorIyByZW1vdmUgdGFza3MgdGhhdCBtb2RpZnkgdGhlIHNvdXJjZSB0cmVlIGluIGNhc2UgZXh0ZXJuYWxzcmMgaXMgaW5oZXJpdGVkCitTUkNUUkVFQ09WRVJFRFRBU0tTICs9ICJkb19rZXJuZWxfbGlua192bWxpbnV4IGRvX2tlcm5lbF9jb25maWdtZSBkb192YWxpZGF0ZV9icmFuY2hlcyBkb19rZXJuZWxfY29uZmlnY2hlY2sgZG9fa2VybmVsX2NoZWNrb3V0IGRvX3NoYXJlZF93b3JrZGlyIGRvX2ZldGNoIGRvX3VucGFjayBkb19wYXRjaCIKKworIyByZXR1cm5zIGxvY2FsIChhYnNvbHV0ZSkgcGF0aCBuYW1lcyBmb3IgYWxsIHZhbGlkIHBhdGNoZXMgaW4gdGhlCisjIHNyY191cmkKK2RlZiBmaW5kX3BhdGNoZXMoZCk6CisgICAgcGF0Y2hlcyA9IHNyY19wYXRjaGVzKGQpCisgICAgcGF0Y2hfbGlzdD1bXQorICAgIGZvciBwIGluIHBhdGNoZXM6CisgICAgICAgIF8sIF8sIGxvY2FsLCBfLCBfLCBfID0gYmIuZmV0Y2guZGVjb2RldXJsKHApCisgICAgICAgIHBhdGNoX2xpc3QuYXBwZW5kKGxvY2FsKQorCisgICAgcmV0dXJuIHBhdGNoX2xpc3QKKworIyByZXR1cm5zIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc3JjIHVyaSB0aGF0IGFyZSAuc2NjIGZpbGVzCitkZWYgZmluZF9zY2NzKGQpOgorICAgIHNvdXJjZXM9c3JjX3BhdGNoZXMoZCwgVHJ1ZSkKKyAgICBzb3VyY2VzX2xpc3Q9W10KKyAgICBmb3IgcyBpbiBzb3VyY2VzOgorICAgICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUocykpCisgICAgICAgIGlmIGV4dCBhbmQgZXh0IGluIFsiLnNjYyIsICIuY2ZnIl06CisgICAgICAgICAgICBzb3VyY2VzX2xpc3QuYXBwZW5kKHMpCisgICAgICAgIGVsaWYgYmFzZSBhbmQgYmFzZSBpbiAnZGVmY29uZmlnJzoKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKKworIyBjaGVjayB0aGUgU1JDX1VSSSBmb3IgImttZXRhIiB0eXBlJ2QgZ2l0IHJlcG9zaXRvcmllcy4gUmV0dXJuIHRoZSBuYW1lIG9mCisjIHRoZSByZXBvc2l0b3J5IGFzIGl0IHdpbGwgYmUgZm91bmQgaW4gV09SS0RJUgorZGVmIGZpbmRfa2VybmVsX2ZlYXR1cmVfZGlycyhkKToKKyAgICBmZWF0dXJlX2RpcnM9W10KKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIHVybGRhdGEgPSBmZXRjaC51ZFt1cmxdCisgICAgICAgIHBhcm0gPSB1cmxkYXRhLnBhcm0KKyAgICAgICAgdHlwZT0iIgorICAgICAgICBpZiAidHlwZSIgaW4gcGFybToKKyAgICAgICAgICAgIHR5cGUgPSBwYXJtWyJ0eXBlIl0KKyAgICAgICAgaWYgImRlc3RzdWZmaXgiIGluIHBhcm06CisgICAgICAgICAgICBkZXN0ZGlyID0gcGFybVsiZGVzdHN1ZmZpeCJdCisgICAgICAgICAgICBpZiB0eXBlID09ICJrbWV0YSI6CisgICAgICAgICAgICAgICAgZmVhdHVyZV9kaXJzLmFwcGVuZChkZXN0ZGlyKQorCSAgICAKKyAgICByZXR1cm4gZmVhdHVyZV9kaXJzCisKKyMgZmluZCB0aGUgbWFzdGVyL21hY2hpbmUgc291cmNlIGJyYW5jaC4gSW4gdGhlIHNhbWUgd2F5IHRoYXQgdGhlIGZldGNoZXIgcHJvY2VzZXMKKyMgZ2l0IHJlcG9zaXRvcmllcyBpbiB0aGUgU1JDX1VSSSB3ZSB0YWtlIHRoZSBmaXJzdCByZXBvIGZvdW5kLCBmaXJzdCBicmFuY2guCitkZWYgZ2V0X21hY2hpbmVfYnJhbmNoKGQsIGRlZmF1bHQpOgorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKFtdLCBkKQorICAgIGZvciB1cmwgaW4gZmV0Y2gudXJsczoKKyAgICAgICAgdXJsZGF0YSA9IGZldGNoLnVkW3VybF0KKyAgICAgICAgcGFybSA9IHVybGRhdGEucGFybQorICAgICAgICBpZiAiYnJhbmNoIiBpbiBwYXJtOgorICAgICAgICAgICAgYnJhbmNoZXMgPSB1cmxkYXRhLnBhcm0uZ2V0KCJicmFuY2giKS5zcGxpdCgnLCcpCisgICAgICAgICAgICByZXR1cm4gYnJhbmNoZXNbMF0KKwkgICAgCisgICAgcmV0dXJuIGRlZmF1bHQKKworZG9fa2VybmVsX21ldGFkYXRhKCkgeworCXNldCArZQorCWNkICR7U30KKwlleHBvcnQgS01FVEE9JHtLTUVUQX0KKworCSMgaWYga2VybmVsIHRvb2xzIGFyZSBhdmFpbGFibGUgaW4tdHJlZSwgdGhleSBhcmUgcHJlZmVycmVkCisJIyBhbmQgYXJlIHBsYWNlZCBvbiB0aGUgcGF0aCBiZWZvcmUgYW55IGV4dGVybmFsIHRvb2xzLiBVbmxlc3MKKwkjIHRoZSBleHRlcm5hbCB0b29scyBmbGFnIGlzIHNldCwgaW4gdGhhdCBjYXNlIHdlIGRvIG5vdGhpbmcuCisJaWYgWyAtZiAiJHtTfS9zY3JpcHRzL3V0aWwvY29uZmlnbWUiIF07IHRoZW4KKwkJaWYgWyAteiAiJHtFWFRFUk5BTF9LRVJORUxfVE9PTFN9IiBdOyB0aGVuCisJCQlQQVRIPSR7U30vc2NyaXB0cy91dGlsOiR7UEFUSH0KKwkJZmkKKwlmaQorCisJbWFjaGluZV9icmFuY2g9IiR7QCBnZXRfbWFjaGluZV9icmFuY2goZCwgIiR7S0JSQU5DSH0iICl9IgorCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVl9tYWNoaW5lfSIKKwlpZiBbIC16ICIke21hY2hpbmVfc3JjcmV2fSIgXTsgdGhlbgorCQkjIGZhbGxiYWNrIHRvIFNSQ1JFViBpZiBhIG5vbiBtYWNoaW5lX21ldGEgdHJlZSBpcyBiZWluZyBidWlsdAorCQltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZ9IgorCWZpCisKKwkjIEluIGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIGtlcm5lbCBpdHNlbGY6CisJIworCSMgICBkZWZjb25maWc6ICQob2JqKS9jb25mCisJIyAgIGlmZXEgKCQoS0JVSUxEX0RFRkNPTkZJRyksKQorCSMJJDwgLS1kZWZjb25maWcgJChLY29uZmlnKQorCSMgICBlbHNlCisJIwlAZWNobyAiKioqIERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERfREVGQ09ORklHKSciCisJIwkkKFEpJDwgLS1kZWZjb25maWc9YXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSAkKEtjb25maWcpCisJIyAgIGVuZGlmCisJIworCSMgSWYgYSBkZWZjb25maWcgaXMgc3BlY2lmaWVkIHZpYSB0aGUgS0JVSUxEX0RFRkNPTkZJRyB2YXJpYWJsZSwgd2UgY29weSBpdAorCSMgZnJvbSB0aGUgc291cmNlIHRyZWUsIGludG8gYSBjb21tb24gbG9jYXRpb24gYW5kIG5vcm1hbGl6ZWQgImRlZmNvbmZpZyIgbmFtZSwKKwkjIHdoZXJlIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIHdpbGwgaW5jbHVkZSBhbmQgaW5jb3JvcG9yYXRlIGl0IGludG8gdGhlIGJ1aWxkCisJIworCSMgSWYgdGhlIGZldGNoZXIgaGFzIGFscmVhZHkgcGxhY2VkIGEgZGVmY29uZmlnIGluIFdPUktESVIgKGZyb20gdGhlIFNSQ19VUkkpLAorCSMgd2UgZG9uJ3Qgb3ZlcndyaXRlIGl0LCBidXQgaW5zdGVhZCB3YXJuIHRoZSB1c2VyIHRoYXQgU1JDX1VSSSBkZWZjb25maWdzIHRha2UKKwkjIHByZWNlbmRlbmNlLgorCSMKKwlpZiBbIC1uICIke0tCVUlMRF9ERUZDT05GSUd9IiBdOyB0aGVuCisJCWlmIFsgLWYgIiR7U30vYXJjaC8ke0FSQ0h9L2NvbmZpZ3MvJHtLQlVJTERfREVGQ09ORklHfSIgXTsgdGhlbgorCQkJaWYgWyAtZiAiJHtXT1JLRElSfS9kZWZjb25maWciIF07IHRoZW4KKwkJCQkjIElmIHRoZSB0d28gZGVmY29uZmlnJ3MgYXJlIGRpZmZlcmVudCwgd2FybiB0aGF0IHdlIGRpZG4ndCBvdmVyd3JpdGUgdGhlCisJCQkJIyBvbmUgYWxyZWFkeSBwbGFjZWQgaW4gV09SS0RJUiBieSB0aGUgZmV0Y2hlci4KKwkJCQljbXAgIiR7V09SS0RJUn0vZGVmY29uZmlnIiAiJHtTfS9hcmNoLyR7QVJDSH0vY29uZmlncy8ke0tCVUlMRF9ERUZDT05GSUd9IgorCQkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCQliYndhcm4gImRlZmNvbmZpZyBkZXRlY3RlZCBpbiBXT1JLRElSLiAke0tCVUlMRF9ERUZDT05GSUd9IHNraXBwZWQiCisJCQkJZmkKKwkJCWVsc2UKKwkJCQljcCAtZiAke1N9L2FyY2gvJHtBUkNIfS9jb25maWdzLyR7S0JVSUxEX0RFRkNPTkZJR30gJHtXT1JLRElSfS9kZWZjb25maWcKKwkJCQlzY2NzPSIke1dPUktESVJ9L2RlZmNvbmZpZyIKKwkJCWZpCisJCWVsc2UKKwkJCWJiZmF0YWwgIkEgS0JVSUxEX0RFQ09ORklHICcke0tCVUlMRF9ERUZDT05GSUd9JyB3YXMgc3BlY2lmaWVkLCBidXQgbm90IHByZXNlbnQgaW4gdGhlIHNvdXJjZSB0cmVlIgorCQlmaQorCWZpCisKKwlzY2NzPSIkc2NjcyAke0AiICIuam9pbihmaW5kX3NjY3MoZCkpfSIKKwlwYXRjaGVzPSIke0AiICIuam9pbihmaW5kX3BhdGNoZXMoZCkpfSIKKwlmZWF0X2RpcnM9IiR7QCIgIi5qb2luKGZpbmRfa2VybmVsX2ZlYXR1cmVfZGlycyhkKSl9IgorCisJIyBhZGQgYW55IGV4cGxpY2l0bHkgcmVmZXJlbmNlZCBmZWF0dXJlcyBvbnRvIHRoZSBlbmQgb2YgdGhlIGZlYXR1cmUKKwkjIGxpc3QgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGtlcm5lbCBidWlsZCBzY3JpcHRzLgorCWlmIFsgLW4gIiR7S0VSTkVMX0ZFQVRVUkVTfSIgXTsgdGhlbgorCQlmb3IgZmVhdCBpbiAke0tFUk5FTF9GRUFUVVJFU307IGRvCisJCQlhZGRvbl9mZWF0dXJlcz0iJGFkZG9uX2ZlYXR1cmVzIC0tZmVhdHVyZSAkZmVhdCIKKwkJZG9uZQorCWZpCisKKwkjIGNoZWNrIGZvciBmZWF0dXJlIGRpcmVjdG9yaWVzL3JlcG9zL2JyYW5jaGVzIHRoYXQgd2VyZSBwYXJ0IG9mIHRoZQorCSMgU1JDX1VSSS4gSWYgdGhleSB3ZXJlIHN1cHBsaWVkLCB3ZSBjb252ZXJ0IHRoZW0gaW50byBpbmNsdWRlIGRpcmVjdGl2ZXMKKwkjIGZvciB0aGUgdXBkYXRlIHBhcnQgb2YgdGhlIHByb2Nlc3MKKwlpZiBbIC1uICIke2ZlYXRfZGlyc30iIF07IHRoZW4KKwkgICAgZm9yIGYgaW4gJHtmZWF0X2RpcnN9OyBkbworCQlpZiBbIC1kICIke1dPUktESVJ9LyRmL21ldGEiIF07IHRoZW4KKwkJICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkke1dPUktESVJ9LyRmL21ldGEiCisJCWVsaWYgWyAtZCAiJHtXT1JLRElSfS8kZiIgXTsgdGhlbgorCQkgICAgaW5jbHVkZXM9IiRpbmNsdWRlcyAtSSR7V09SS0RJUn0vJGYiCisJCWZpCisJICAgIGRvbmUKKwlmaQorCisJIyB1cGRhdGVzIG9yIGdlbmVyYXRlcyB0aGUgdGFyZ2V0IGRlc2NyaXB0aW9uCisJdXBkYXRlbWUgJHt1cGRhdGVtZV9mbGFnc30gLURLREVTQz0ke0tNQUNISU5FfToke0xJTlVYX0tFUk5FTF9UWVBFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlc30gJHthZGRvbl9mZWF0dXJlc30gJHtBUkNIfSAke0tNQUNISU5FfSAke3NjY3N9ICR7cGF0Y2hlc30KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJmYXRhbF9sb2cgIkNvdWxkIG5vdCB1cGRhdGUgJHttYWNoaW5lX2JyYW5jaH0iCisJZmkKK30KKworZG9fcGF0Y2goKSB7CisJY2QgJHtTfQorCisJIyBleGVjdXRlcyBhbmQgbW9kaWZpZXMgdGhlIHNvdXJjZSB0cmVlIGFzIHJlcXVpcmVkCisJcGF0Y2htZSAke0tNQUNISU5FfQorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQliYmVycm9yICJDb3VsZCBub3QgYXBwbHkgcGF0Y2hlcyBmb3IgJHtLTUFDSElORX0uIgorCQliYmZhdGFsX2xvZyAiUGF0Y2ggZmFpbHVyZXMgY2FuIGJlIHJlc29sdmVkIGluIHRoZSBsaW51eCBzb3VyY2UgZGlyZWN0b3J5ICR7U30pIgorCWZpCisKKwkjIGNoZWNrIHRvIHNlZSBpZiB0aGUgc3BlY2lmaWVkIFNSQ1JFViBpcyByZWFjaGFibGUgZnJvbSB0aGUgZmluYWwgYnJhbmNoLgorCSMgaWYgaXQgd2Fzbid0IHNvbWV0aGluZyB3cm9uZyBoYXMgaGFwcGVuZWQsIGFuZCB3ZSBzaG91bGQgZXJyb3IuCisJbWFjaGluZV9zcmNyZXY9IiR7U1JDUkVWX21hY2hpbmV9IgorCWlmIFsgLXogIiR7bWFjaGluZV9zcmNyZXZ9IiBdOyB0aGVuCisJCSMgZmFsbGJhY2sgdG8gU1JDUkVWIGlmIGEgbm9uIG1hY2hpbmVfbWV0YSB0cmVlIGlzIGJlaW5nIGJ1aWx0CisJCW1hY2hpbmVfc3JjcmV2PSIke1NSQ1JFVn0iCisJCSMgaWYgU1JDUkVWIGNhbm5vdCBiZSByZWFjaGVkIHNvbWV0aGluZyBpcyB3cm9uZy4KKwkJaWYgWyAteiAiJHttYWNoaW5lX3NyY3Jldn0iIF07IHRoZW4KKwkJCWJiZmF0YWwgIk5laXRoZXIgU1JDUkVWX21hY2hpbmUgb3IgU1JDUkVWIHdhcyBzcGVjaWZpZWQhIgorCQlmaQorCWZpCisKKwlpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgIT0gIkFVVE9JTkMiIF07IHRoZW4KKwkJaWYgISBbICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHttYWNoaW5lX3NyY3Jldn1+MCkiID0gIiQoZ2l0IG1lcmdlLWJhc2UgJHttYWNoaW5lX3NyY3Jldn0gSEVBRCkiIF07IHRoZW4KKwkJCWJiZXJyb3IgIlNSQ1JFViAke21hY2hpbmVfc3JjcmV2fSB3YXMgc3BlY2lmaWVkLCBidXQgaXMgbm90IHJlYWNoYWJsZSIKKwkJCWJiZmF0YWwgIkNoZWNrIHRoZSBCU1AgZGVzY3JpcHRpb24gZm9yIGluY29ycmVjdCBicmFuY2ggc2VsZWN0aW9uLCBvciBvdGhlciBlcnJvcnMuIgorCQlmaQorCWZpCit9CisKK2RvX2tlcm5lbF9jaGVja291dCgpIHsKKwlzZXQgK2UKKworCXNvdXJjZV9kaXI9YGVjaG8gJHtTfSB8IHNlZCAncyUvJCUlJ2AKKwlzb3VyY2Vfd29ya2Rpcj0iJHtXT1JLRElSfS9naXQiCisJaWYgWyAtZCAiJHtXT1JLRElSfS9naXQvIiBdOyB0aGVuCisJCSMgY2FzZTogZ2l0IHJlcG9zaXRvcnkgKGJhcmUgb3Igbm9uLWJhcmUpCisJCSMgaWYgUyBpcyBXT1JLRElSL2dpdCwgdGhlbiB3ZSBzaG91bGRuJ3QgYmUgbW92aW5nIG9yIGRlbGV0aW5nIHRoZSB0cmVlLgorCQlpZiBbICIke3NvdXJjZV9kaXJ9IiAhPSAiJHtzb3VyY2Vfd29ya2Rpcn0iIF07IHRoZW4KKwkJCXJtIC1yZiAke1N9CisJCQltdiAke1dPUktESVJ9L2dpdCAke1N9CisJCWZpCisJCWNkICR7U30KKwllbHNlCisJCSMgY2FzZTogd2UgaGF2ZSBubyBnaXQgcmVwb3NpdG9yeSBhdCBhbGwuIAorCQkjIFRvIHN1cHBvcnQgbG93IGJhbmR3aWR0aCBvcHRpb25zIGZvciBidWlsZGluZyB0aGUga2VybmVsLCB3ZSdsbCBqdXN0IAorCQkjIGNvbnZlcnQgdGhlIHRyZWUgdG8gYSBnaXQgcmVwbyBhbmQgbGV0IHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIHdvcmsgdW5jaGFuZ2VkCisJCQorCQkjIGlmICR7U30gaGFzbid0IGJlZW4gc2V0IHRvIHRoZSBwcm9wZXIgc3ViZGlyZWN0b3J5IGEgZGVmYXVsdCBvZiAibGludXgiIGlzIAorCQkjIHVzZWQsIGJ1dCB3ZSBjYW4ndCBpbml0aWFsaXplIHRoYXQgZW1wdHkgZGlyZWN0b3J5LiBTbyBjaGVjayBpdCBhbmQgdGhyb3cgYQorCQkjIGNsZWFyIGVycm9yCisKKwkgICAgICAgIGNkICR7U30KKwkJaWYgWyAhIC1mICJNYWtlZmlsZSIgXTsgdGhlbgorCQkJYmJlcnJvciAiUyBpcyBub3Qgc2V0IHRvIHRoZSBsaW51eCBzb3VyY2UgZGlyZWN0b3J5LiBDaGVjayAiCisJCQliYmZhdGFsICJ0aGUgcmVjaXBlIGFuZCBzZXQgUyB0byB0aGUgcHJvcGVyIGV4dHJhY3RlZCBzdWJkaXJlY3RvcnkiCisJCWZpCisJCXJtIC1mIC5naXRpZ25vcmUKKwkJZ2l0IGluaXQKKwkJZ2l0IGFkZCAuCisJCWdpdCBjb21taXQgLXEgLW0gImJhc2VsaW5lIGNvbW1pdDogY3JlYXRpbmcgcmVwbyBmb3IgJHtQTn0tJHtQVn0iCisJCWdpdCBjbGVhbiAtZCAtZgorCWZpCisKKwkjIGNvbnZlcnQgYW55IHJlbW90ZSBicmFuY2hlcyB0byBsb2NhbCB0cmFja2luZyBvbmVzCisJZm9yIGkgaW4gYGdpdCBicmFuY2ggLWEgLS1uby1jb2xvciB8IGdyZXAgcmVtb3RlcyB8IGdyZXAgLXYgSEVBRGA7IGRvCisJCWI9YGVjaG8gJGkgfCBjdXQgLWQnICcgLWYyIHwgc2VkICdzJXJlbW90ZXMvb3JpZ2luLyUlJ2A7CisJCWdpdCBzaG93LXJlZiAtLXF1aWV0IC0tdmVyaWZ5IC0tICJyZWZzL2hlYWRzLyRiIgorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCWdpdCBicmFuY2ggJGIgJGkgPiAvZGV2L251bGwKKwkJZmkKKwlkb25lCisKKwkjIENyZWF0ZSBhIHdvcmtpbmcgdHJlZSBjb3B5IG9mIHRoZSBrZXJuZWwgYnkgY2hlY2tpbmcgb3V0IGEgYnJhbmNoCisJbWFjaGluZV9icmFuY2g9IiR7QCBnZXRfbWFjaGluZV9icmFuY2goZCwgIiR7S0JSQU5DSH0iICl9IgorCisJIyBjaGVja291dCBhbmQgY2xvYmJlciBhbnkgdW5pbXBvcnRhbnQgZmlsZXMKKwlnaXQgY2hlY2tvdXQgLWYgJHttYWNoaW5lX2JyYW5jaH0KK30KK2RvX2tlcm5lbF9jaGVja291dFtkaXJzXSA9ICIke1N9IgorCithZGR0YXNrIGtlcm5lbF9jaGVja291dCBiZWZvcmUgZG9fa2VybmVsX21ldGFkYXRhIGFmdGVyIGRvX3VucGFjaworYWRkdGFzayBrZXJuZWxfbWV0YWRhdGEgYWZ0ZXIgZG9fdmFsaWRhdGVfYnJhbmNoZXMgZG9fdW5wYWNrIGJlZm9yZSBkb19wYXRjaAorZG9fa2VybmVsX21ldGFkYXRhW2RlcGVuZHNdID0gImtlcm4tdG9vbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2tlcm5lbF9jb25maWdtZVtkaXJzXSArPSAiJHtTfSAke0J9IgorZG9fa2VybmVsX2NvbmZpZ21lKCkgeworCWJibm90ZSAia2VybmVsIGNvbmZpZ21lIgorCWV4cG9ydCBLTUVUQT0ke0tNRVRBfQorCisJaWYgWyAtbiAiJHtLQ09ORklHX01PREV9IiBdOyB0aGVuCisJCWNvbmZpZ21lZmxhZ3M9JHtLQ09ORklHX01PREV9CisJZWxzZQorCQkjIElmIGEgZGVmY29uZmlnIHdhcyBwYXNzZWQsIHVzZSA9biBhcyB0aGUgYmFzZWxpbmUsIHdoaWNoIGlzIGFjaGlldmVkCisJCSMgdmlhIC0tYWxsbm9jb25maWcKKwkJaWYgWyAtZiAke1dPUktESVJ9L2RlZmNvbmZpZyBdOyB0aGVuCisJCQljb25maWdtZWZsYWdzPSItLWFsbG5vY29uZmlnIgorCQlmaQorCWZpCisKKwljZCAke1N9CisJUEFUSD0ke1BBVEh9OiR7U30vc2NyaXB0cy91dGlsCisJY29uZmlnbWUgJHtjb25maWdtZWZsYWdzfSAtLXJlY29uZmlnIC0tb3V0cHV0ICR7Qn0gJHtMSU5VWF9LRVJORUxfVFlQRX0gJHtLTUFDSElORX0KKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJYmJmYXRhbF9sb2cgIkNvdWxkIG5vdCBjb25maWd1cmUgJHtLTUFDSElORX0tJHtMSU5VWF9LRVJORUxfVFlQRX0iCisJZmkKKwkKKwllY2hvICIjIEdsb2JhbCBzZXR0aW5ncyBmcm9tIGxpbnV4IHJlY2lwZSIgPj4gJHtCfS8uY29uZmlnCisJZWNobyAiQ09ORklHX0xPQ0FMVkVSU0lPTj0iXCIke0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OfVwiID4+ICR7Qn0vLmNvbmZpZworfQorCithZGR0YXNrIGtlcm5lbF9jb25maWdtZSBiZWZvcmUgZG9fY29uZmlndXJlIGFmdGVyIGRvX3BhdGNoCisKK3B5dGhvbiBkb19rZXJuZWxfY29uZmlnY2hlY2soKSB7CisgICAgaW1wb3J0IHJlLCBzdHJpbmcsIHN5cworCisgICAgIyBpZiBLTUVUQSBpc24ndCBzZXQgZ2xvYmFsbHkgYnkgYSByZWNpcGUgdXNpbmcgdGhpcyByb3V0aW5lLCB3ZSBuZWVkIHRvCisgICAgIyBzZXQgdGhlIGRlZmF1bHQgdG8gJ21ldGEnLiBPdGhlcndpc2UsIGtjb25mX2NoZWNrIGlzIG5vdCBwYXNzZWQgYSB2YWxpZAorICAgICMgbWV0YS1zZXJpZXMgZm9yIHByb2Nlc3NpbmcKKyAgICBrbWV0YSA9IGQuZ2V0VmFyKCAiS01FVEEiLCBUcnVlICkgb3IgIm1ldGEiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGttZXRhKToKKyAgICAgICAga21ldGEgPSAiLiIgKyBrbWV0YQorCisgICAgcGF0aHByZWZpeCA9ICJleHBvcnQgUEFUSD0lczolczsgIiAlIChkLmdldFZhcignUEFUSCcsIFRydWUpLCAiJHtTfS9zY3JpcHRzL3V0aWwvIikKKyAgICBjbWQgPSBkLmV4cGFuZCgiY2QgJHtTfTsga2NvbmZfY2hlY2sgLWNvbmZpZyAlcy9tZXRhLXNlcmllcyAke1N9ICR7Qn0iICUga21ldGEpCisgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIiVzJXMiICUgKHBhdGhwcmVmaXgsIGNtZCkpCisKKyAgICBjb25maWdfY2hlY2tfdmlzaWJpbGl0eSA9IGludChkLmdldFZhciggIktDT05GX0FVRElUX0xFVkVMIiwgVHJ1ZSApIG9yIDApCisgICAgYnNwX2NoZWNrX3Zpc2liaWxpdHkgPSBpbnQoZC5nZXRWYXIoICJLQ09ORl9CU1BfQVVESVRfTEVWRUwiLCBUcnVlICkgb3IgMCkKKworICAgICMgaWYgY29uZmlnIGNoZWNrIHZpc2liaWxpdHkgaXMgbm9uLXplcm8sIHJlcG9ydCBkcm9wcGVkIGNvbmZpZ3VyYXRpb24gdmFsdWVzCisgICAgbWlzbWF0Y2hfZmlsZSA9ICIke1N9LyIgKyBrbWV0YSArICIvIiArICJtaXNtYXRjaC5jZmciCisgICAgaWYgb3MucGF0aC5leGlzdHMobWlzbWF0Y2hfZmlsZSk6CisgICAgICAgIGlmIGNvbmZpZ19jaGVja192aXNpYmlsaXR5OgorICAgICAgICAgICAgd2l0aCBvcGVuIChtaXNtYXRjaF9maWxlLCAiciIpIGFzIG15ZmlsZToKKyAgICAgICAgICAgICAgICByZXN1bHRzID0gbXlmaWxlLnJlYWQoKQorICAgICAgICAgICAgICAgIGJiLndhcm4oICJba2VybmVsIGNvbmZpZ106IHNwZWNpZmllZCB2YWx1ZXMgZGlkIG5vdCBtYWtlIGl0IGludG8gdGhlIGtlcm5lbCdzIGZpbmFsIGNvbmZpZ3VyYXRpb246XG5cbiVzIiAlIHJlc3VsdHMpCisKKyAgICAjIGlmIGNvbmZpZyBjaGVjayB2aXNpYmlsaXR5IGlzIGxldmVsIDIgb3IgaGlnaGVyLCByZXBvcnQgbm9uLWhhcmR3YXJlIG9wdGlvbnMKKyAgICBub25od19maWxlID0gIiR7U30vIiArIGttZXRhICsgIi8iICsgIm5vbmh3X3JlcG9ydC5jZmciCisgICAgaWYgb3MucGF0aC5leGlzdHMobm9uaHdfZmlsZSk6CisgICAgICAgIGlmIGNvbmZpZ19jaGVja192aXNpYmlsaXR5ID4gMToKKyAgICAgICAgICAgIHdpdGggb3BlbiAobm9uaHdfZmlsZSwgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICAgICAgcmVzdWx0cyA9IG15ZmlsZS5yZWFkKCkKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbCBjb25maWddOiBCU1Agc3BlY2lmaWVkIG5vbi1odyBjb25maWd1cmF0aW9uOlxuXG4lcyIgJSByZXN1bHRzKQorCisgICAgYnNwX2Rlc2MgPSAiJHtTfS8iICsga21ldGEgKyAiLyIgKyAidG9wX3RndCIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhic3BfZGVzYykgYW5kIGJzcF9jaGVja192aXNpYmlsaXR5ID4gMToKKyAgICAgICAgd2l0aCBvcGVuIChic3BfZGVzYywgInIiKSBhcyBteWZpbGU6CisgICAgICAgICAgICBic3BfdGd0ID0gbXlmaWxlLnJlYWQoKQorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJeKC4qKXNjcmF0Y2gub2JqKC4qKSQiLCBic3BfdGd0KQorICAgICAgICAgICAgaWYgbm90IG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCAiW2tlcm5lbF06IEFuIGF1dG8gZ2VuZXJhdGVkIEJTUCBkZXNjcmlwdGlvbiB3YXMgdXNlZCwgdGhpcyBub3JtYWxseSBpbmRpY2F0ZXMgYSBtaXNjb25maWd1cmF0aW9uLlxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNoZWNrIHRoYXQgeW91ciBtYWNoaW5lICglcykgaGFzIGFuIGFzc29jaWF0ZWQga2VybmVsIGRlc2NyaXB0aW9uLiIgJSAiJHtNQUNISU5FfSIgKQorfQorCisjIEVuc3VyZSB0aGF0IHRoZSBicmFuY2hlcyAoQlNQIGFuZCBtZXRhKSBhcmUgb24gdGhlIGxvY2F0aW9ucyBzcGVjaWZpZWQgYnkKKyMgdGhlaXIgU1JDUkVWIHZhbHVlcy4gSWYgdGhleSBhcmUgTk9UIG9uIHRoZSByaWdodCBjb21taXRzLCB0aGUgYnJhbmNoZXMKKyMgYXJlIGNvcnJlY3RlZCB0byB0aGUgcHJvcGVyIGNvbW1pdC4KK2RvX3ZhbGlkYXRlX2JyYW5jaGVzKCkgeworCXNldCArZQorCWNkICR7U30KKworCW1hY2hpbmVfYnJhbmNoPSIke0AgZ2V0X21hY2hpbmVfYnJhbmNoKGQsICIke0tCUkFOQ0h9IiApfSIKKwltYWNoaW5lX3NyY3Jldj0iJHtTUkNSRVZfbWFjaGluZX0iCisKKwkjIGlmIFNSQ1JFViBpcyBBVVRPUkVWIGl0IHNob3dzIHVwIGFzIEFVVE9JTkMgdGhlcmUncyBub3RoaW5nIHRvCisJIyBjaGVjayBhbmQgd2UgY2FuIGV4aXQgZWFybHkKKwlpZiBbICIke21hY2hpbmVfc3JjcmV2fSIgPSAiQVVUT0lOQyIgXTsgdGhlbgorCQliYm5vdGUgIlNSQ1JFViB2YWxpZGF0aW9uIGlzIG5vdCByZXF1aXJlZCBmb3IgQVVUT1JFViIKKwllbGlmIFsgIiR7bWFjaGluZV9zcmNyZXZ9IiA9ICIiIF07IHRoZW4KKwkJaWYgWyAiJHtTUkNSRVZ9IiAhPSAiQVVUT0lOQyIgXSAmJiBbICIke1NSQ1JFVn0iICE9ICJJTlZBTElEIiBdOyB0aGVuCisJCSAgICAgICAjIFNSQ1JFVl9tYWNoaW5lXzxNQUNISU5FPiB3YXMgbm90IHNldC4gVGhpcyBtZWFucyB0aGF0IGEgY3VzdG9tIHJlY2lwZQorCQkgICAgICAgIyB0aGF0IGRvZXNuJ3QgdXNlIHRoZSBTUkNSRVZfRk9STUFUICJtYWNoaW5lX21ldGEiIGlzIGJlaW5nIGJ1aWx0LiBJbgorCQkgICAgICAgIyB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gcmVzZXQgdG8gdGhlIGdpdmUgU1JDUkVWIGJlZm9yZSBoZWFkaW5nIHRvIHBhdGNoaW5nCisJCSAgICAgICBiYm5vdGUgImN1c3RvbSByZWNpcGUgaXMgYmVpbmcgYnVpbHQsIGZvcmNpbmcgU1JDUkVWIHRvICR7U1JDUkVWfSIKKwkJICAgICAgIGZvcmNlX3NyY3Jldj0iJHtTUkNSRVZ9IgorCQlmaQorCWVsc2UKKwkJZ2l0IGNhdC1maWxlIC10ICR7bWFjaGluZV9zcmNyZXZ9ID4gL2Rldi9udWxsCisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJYmJlcnJvciAiJHttYWNoaW5lX3NyY3Jldn0gaXMgbm90IGEgdmFsaWQgY29tbWl0IElELiIKKwkJCWJiZmF0YWxfbG9nICJUaGUga2VybmVsIHNvdXJjZSB0cmVlIG1heSBiZSBvdXQgb2Ygc3luYyIKKwkJZmkKKwkJZm9yY2Vfc3JjcmV2PSR7bWFjaGluZV9zcmNyZXZ9CisJZmkKKworCWdpdCBjaGVja291dCAtcSAtZiAke21hY2hpbmVfYnJhbmNofQorCWlmIFsgLW4gIiR7Zm9yY2Vfc3JjcmV2fSIgXTsgdGhlbgorCQkjIHNlZSBpZiB0aGUgYnJhbmNoIHdlIGFyZSBhYm91dCB0byBwYXRjaCBoYXMgYmVlbiBwcm9wZXJseSByZXNldCB0byB0aGUgZGVmaW5lZAorCQkjIFNSQ1JFViAuLiBpZiBub3QsIHdlIHJlc2V0IGl0LgorCQlicmFuY2hfaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYAorCQlpZiBbICIke2ZvcmNlX3NyY3Jldn0iICE9ICIke2JyYW5jaF9oZWFkfSIgXTsgdGhlbgorCQkJY3VycmVudF9icmFuY2g9YGdpdCByZXYtcGFyc2UgLS1hYmJyZXYtcmVmIEhFQURgCisJCQlnaXQgYnJhbmNoICIkY3VycmVudF9icmFuY2gtb3JpZyIKKwkJCWdpdCByZXNldCAtLWhhcmQgJHtmb3JjZV9zcmNyZXZ9CisJCWZpCisJZmkKK30KKworIyBNYW55IHNjcmlwdHMgd2FudCB0byBsb29rIGluIGFyY2gvJGFyY2gvYm9vdCBmb3IgdGhlIGJvb3RhYmxlCisjIGltYWdlLiBUaGlzIHBvc2VzIGEgcHJvYmxlbSBmb3Igdm1saW51eCBiYXNlZCBib290aW5nLiBUaGlzIAorIyB0YXNrIGFycmFuZ2VzIHRvIGhhdmUgdm1saW51eCBhcHBlYXIgaW4gdGhlIG5vcm1hbGl6ZWQgZGlyZWN0b3J5CisjIGxvY2F0aW9uLgorZG9fa2VybmVsX2xpbmtfdm1saW51eCgpIHsKKwlpZiBbICEgLWQgIiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QiIF07IHRoZW4KKwkJbWtkaXIgJHtCfS9hcmNoLyR7QVJDSH0vYm9vdAorCWZpCisJY2QgJHtCfS9hcmNoLyR7QVJDSH0vYm9vdAorCWxuIC1zZiAuLi8uLi8uLi92bWxpbnV4Cit9CisKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gIktCVUlMRF9PVVRQVVQiCitLQlVJTERfT1VUUFVUID0gIiR7Qn0iCisKK3B5dGhvbiAoKSB7CisgICAgIyBJZiBkaWZmY29uZmlnIGlzIGF2YWlsYWJsZSwgZW5zdXJlIGl0IHJ1bnMgYWZ0ZXIga2VybmVsX2NvbmZpZ21lCisgICAgaWYgJ2RvX2RpZmZjb25maWcnIGluIGQ6CisgICAgICAgIGJiLmJ1aWxkLmFkZHRhc2soJ2RvX2RpZmZjb25maWcnLCBOb25lLCAnZG9fa2VybmVsX2NvbmZpZ21lJywgZCkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9rZXJuZWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJkZmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL2tlcm5lbC5iYmNsYXNzCkBAIC0wLDAgKzEsNDkwIEBACitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlIGtlcm5lbC1tb2R1bGUtc3BsaXQKKworUFJPVklERVMgKz0gInZpcnR1YWwva2VybmVsIgorREVQRU5EUyArPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjIGttb2QtbmF0aXZlIGRlcG1vZHdyYXBwZXItY3Jvc3MgYmMtbmF0aXZlIgorCitTID0gIiR7U1RBR0lOR19LRVJORUxfRElSfSIKK0IgPSAiJHtXT1JLRElSfS9idWlsZCIKK0tCVUlMRF9PVVRQVVQgPSAiJHtCfSIKK09FX1RFUk1JTkFMX0VYUE9SVFMgKz0gIktCVUlMRF9PVVRQVVQiCisKKyMgd2UgaW5jbHVkZSBnY2MgYWJvdmUsIHdlIGRvbnQgbmVlZCB2aXJ0dWFsL2xpYmMKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK0tFUk5FTF9JTUFHRVRZUEUgPz0gInpJbWFnZSIKK0lOSVRSQU1GU19JTUFHRSA/PSAiIgorSU5JVFJBTUZTX1RBU0sgPz0gIiIKK0lOSVRSQU1GU19JTUFHRV9CVU5ETEUgPz0gIiIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIGtlcm5lbHR5cGUgPSBkLmdldFZhcignS0VSTkVMX0lNQUdFVFlQRScsIFRydWUpCisKKyAgICBkLnNldFZhcigiS0VSTkVMX0lNQUdFVFlQRV9GT1JfTUFLRSIsIHJlLnN1YihyJ1wuZ3okJywgJycsIGtlcm5lbHR5cGUpKQorCisgICAgaW1hZ2UgPSBkLmdldFZhcignSU5JVFJBTUZTX0lNQUdFJywgVHJ1ZSkKKyAgICBpZiBpbWFnZToKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19idW5kbGVfaW5pdHJhbWZzJywgJ2RlcGVuZHMnLCAnICR7SU5JVFJBTUZTX0lNQUdFfTpkb19yb290ZnMnKQorCisgICAgIyBOT1RFOiBzZXR0aW5nIElOSVRSQU1GU19UQVNLIGlzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisgICAgIyAgICAgICBUaGUgcHJlZmVycmVkIG1ldGhvZCBpcyB0byBzZXQgSU5JVFJBTUZTX0lNQUdFLCBiZWNhdXNlCisgICAgIyAgICAgICB0aGlzIElOSVRSQU1GU19UQVNLIGhhcyBjaXJjdWxhciBkZXBlbmRlbmN5IHByb2JsZW1zCisgICAgIyAgICAgICBpZiB0aGUgaW5pdHJhbWZzIHJlcXVpcmVzIGtlcm5lbCBtb2R1bGVzCisgICAgaW1hZ2VfdGFzayA9IGQuZ2V0VmFyKCdJTklUUkFNRlNfVEFTSycsIFRydWUpCisgICAgaWYgaW1hZ2VfdGFzazoKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwZW5kcycsICcgJHtJTklUUkFNRlNfVEFTS30nKQorfQorCisjIEhlcmUgd2UgcHVsbCBpbiBhbGwgdmFyaW91cyBrZXJuZWwgaW1hZ2UgdHlwZXMgd2hpY2ggd2Ugc3VwcG9ydC4KKyMKKyMgSW4gY2FzZSB5b3UncmUgd29uZGVyaW5nIHdoeSBrZXJuZWwuYmJjbGFzcyBpbmhlcml0cyB0aGUgb3RoZXIgaW1hZ2UKKyMgdHlwZXMgaW5zdGVhZCBvZiB0aGUgb3RoZXIgd2F5IGFyb3VuZCwgdGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0bworIyBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggdmFyaW91cyBjdXJyZW50bHkgZXhpc3RpbmcgbWV0YS1sYXllcnMuCisjIEJ5IHB1bGxpbmcgaW4gdGhlIHZhcmlvdXMga2VybmVsIGltYWdlIHR5cGVzIGhlcmUsIHdlIHJldGFpbiB0aGUKKyMgb3JpZ2luYWwgYmVoYXZpb3Igb2Yga2VybmVsLmJiY2xhc3MsIHNvIG5vIG1ldGEtbGF5ZXJzIHNob3VsZCBnZXQKKyMgYnJva2VuLgorIworIyBLRVJORUxfQ0xBU1NFUyBieSBkZWZhdWx0IHB1bGxzIGluIGtlcm5lbC11aW1hZ2UuYmJjbGFzcywgc2luY2UgdGhpcworIyB1c2VkIHRvIGJlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHdoZW4gb25seSB1SW1hZ2Ugd2FzIHN1cHBvcnRlZC4gVGhpcworIyB2YXJpYWJsZSBjYW4gYmUgYXBwZW5kZWQgYnkgdXNlcnMgd2hvIGltcGxlbWVudCBzdXBwb3J0IGZvciBuZXcga2VybmVsCisjIGltYWdlIHR5cGVzLgorCitLRVJORUxfQ0xBU1NFUyA/PSAiIGtlcm5lbC11aW1hZ2UgIgoraW5oZXJpdCAke0tFUk5FTF9DTEFTU0VTfQorCisjIE9sZCBzdHlsZSBrZXJuZWxzIG1heSBzZXQgJHtTfSA9ICR7V09SS0RJUn0vZ2l0IGZvciBleGFtcGxlCisjIFdlIG5lZWQgdG8gbW92ZSB0aGVzZSBvdmVyIHRvIFNUQUdJTkdfS0VSTkVMX0RJUi4gV2UgY2FuJ3QganVzdAorIyBjcmVhdGUgdGhlIHN5bWxpbmsgaW4gYWR2YW5jZSBhcyB0aGUgZ2l0IGZldGNoZXIgY2FuJ3QgY29wZSB3aXRoCisjIHRoZSBzeW1saW5rLgorZG9fdW5wYWNrW2NsZWFuZGlyc10gKz0gIiAke1N9ICR7U1RBR0lOR19LRVJORUxfRElSfSAke0J9ICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorZG9fY2xlYW5bY2xlYW5kaXJzXSArPSAiICR7U30gJHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICR7Qn0gJHtTVEFHSU5HX0tFUk5FTF9CVUlMRERJUn0iCitiYXNlX2RvX3VucGFja19hcHBlbmQgKCkgeworICAgIHMgPSBkLmdldFZhcigiUyIsIFRydWUpCisgICAgaWYgc1stMV0gPT0gJy8nOgorICAgICAgICAjIGRyb3AgdHJhaWxpbmcgc2xhc2gsIHNvIHRoYXQgb3Muc3ltbGluayhrZXJuc3JjLCBzKSBkb2Vzbid0IHVzZSBzIGFzIGRpcmVjdG9yeSBuYW1lIGFuZCBmYWlsCisgICAgICAgIHM9c1s6LTFdCisgICAga2VybnNyYyA9IGQuZ2V0VmFyKCJTVEFHSU5HX0tFUk5FTF9ESVIiLCBUcnVlKQorICAgIGlmIHMgIT0ga2VybnNyYzoKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGtlcm5zcmMpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShrZXJuc3JjLCByZWN1cnNlPVRydWUpCisgICAgICAgIGlmIGQuZ2V0VmFyKCJFWFRFUk5BTFNSQyIsIFRydWUpOgorICAgICAgICAgICAgIyBXaXRoIEVYVEVSTkFMU1JDIFMgd2lsbCBub3QgYmUgd2lwZWQgc28gd2UgY2FuIHN5bWxpbmsgdG8gaXQKKyAgICAgICAgICAgIG9zLnN5bWxpbmsocywga2VybnNyYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKHMsIGtlcm5zcmMpCisgICAgICAgICAgICBvcy5zeW1saW5rKGtlcm5zcmMsIHMpCit9CisKK2luaGVyaXQga2VybmVsLWFyY2ggZGVwbG95CisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtbW9kdWxlLS4qIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmtlcm5lbC1pbWFnZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtZmlybXdhcmUtLioiCisKK2V4cG9ydCBPUyA9ICIke1RBUkdFVF9PU30iCitleHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgorCitLRVJORUxfUFJJT1JJVFkgPz0gIiR7QGludChkLmdldFZhcignUFYnLDEpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWzBdKSAqIDEwMDAwICsgXAorICAgICAgICAgICAgICAgICAgICAgICBpbnQoZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLScpWzBdLnNwbGl0KCcrJylbMF0uc3BsaXQoJy4nKVsxXSkgKiAxMDAgKyBcCisgICAgICAgICAgICAgICAgICAgICAgIGludChkLmdldFZhcignUFYnLDEpLnNwbGl0KCctJylbMF0uc3BsaXQoJysnKVswXS5zcGxpdCgnLicpWy0xXSl9IgorCitLRVJORUxfUkVMRUFTRSA/PSAiJHtLRVJORUxfVkVSU0lPTn0iCisKKyMgV2hlcmUgYnVpbHQga2VybmVsIGxpZXMgaW4gdGhlIGtlcm5lbCB0cmVlCitLRVJORUxfT1VUUFVUID89ICJhcmNoLyR7QVJDSH0vYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9IgorS0VSTkVMX0lNQUdFREVTVCA9ICJib290IgorCisjCisjIGNvbmZpZ3VyYXRpb24KKyMKK2V4cG9ydCBDTURMSU5FX0NPTlNPTEUgPSAiY29uc29sZT0ke0BkLmdldFZhcigiS0VSTkVMX0NPTlNPTEUiLDEpIG9yICJ0dHlTMCJ9IgorCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKCcke0J9Jyl9IgorCitLRVJORUxfTE9DQUxWRVJTSU9OID89ICIiCisKKyMga2VybmVscyBhcmUgZ2VuZXJhbGx5IG1hY2hpbmUgc3BlY2lmaWMKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKKyMgVS1Cb290IHN1cHBvcnQKK1VCT09UX0VOVFJZUE9JTlQgPz0gIjIwMDA4MDAwIgorVUJPT1RfTE9BREFERFJFU1MgPz0gIiR7VUJPT1RfRU5UUllQT0lOVH0iCisKKyMgU29tZSBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbnMgbmVlZCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb24gdGhlIGNvbW1hbmQgbGluZQorS0VSTkVMX0VYVFJBX0FSR1MgPz0gIiIKKworIyBGb3IgdGhlIGtlcm5lbCwgd2UgZG9uJ3Qgd2FudCB0aGUgJy1lIE1BS0VGTEFHUz0nIGluIEVYVFJBX09FTUFLRS4KKyMgV2UgZG9uJ3Qgd2FudCB0byBvdmVycmlkZSBrZXJuZWwgTWFrZWZpbGUgdmFyaWFibGVzIGZyb20gdGhlIGVudmlyb25tZW50CitFWFRSQV9PRU1BS0UgPSAiIgorCitLRVJORUxfQUxUX0lNQUdFVFlQRSA/Pz0gIiIKKworIyBEZWZpbmUgd2hlcmUgdGhlIGtlcm5lbCBoZWFkZXJzIGFyZSBpbnN0YWxsZWQgb24gdGhlIHRhcmdldCBhcyB3ZWxsIGFzIHdoZXJlCisjIHRoZXkgYXJlIHN0YWdlZC4KK0tFUk5FTF9TUkNfUEFUSCA9ICIvdXNyL3NyYy9rZXJuZWwiCisKK2NvcHlfaW5pdHJhbWZzKCkgeworCWVjaG8gIkNvcHlpbmcgaW5pdHJhbWZzIGludG8gLi91c3IgLi4uIgorCSMgSW4gY2FzZSB0aGUgZGlyZWN0b3J5IGlzIG5vdCBjcmVhdGVkIHlldCBmcm9tIHRoZSBmaXJzdCBwYXNzIGNvbXBpbGU6CisJbWtkaXIgLXAgJHtCfS91c3IKKwkjIEZpbmQgYW5kIHVzZSB0aGUgZmlyc3QgaW5pdHJhbWZzIGltYWdlIGFyY2hpdmUgdHlwZSB3ZSBmaW5kCisJcm0gLWYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uY3BpbworCWZvciBpbWcgaW4gY3Bpby5neiBjcGlvLmx6NCBjcGlvLmx6byBjcGlvLmx6bWEgY3Bpby54ejsgZG8KKwkJaWYgWyAtZSAiJHtERVBMT1lfRElSX0lNQUdFfS8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nIiBdOyB0aGVuCisJCQljcCAke0RFUExPWV9ESVJfSU1BR0V9LyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcgJHtCfS91c3IvLgorCQkJY2FzZSAkaW1nIGluCisJCQkqZ3opCisJCQkJZWNobyAiZ3ppcCBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWd1bnppcCAtZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJKmx6NCkKKwkJCQllY2hvICJsejQgZGVjb21wcmVzc2luZyBpbWFnZSIKKwkJCQlsejQgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqbHpvKQorCQkJCWVjaG8gImx6byBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCWx6b3AgLWRmICR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LiRpbWcKKwkJCQlicmVhaworCQkJCTs7CisJCQkqbHptYSkKKwkJCQllY2hvICJsem1hIGRlY29tcHJlc3NpbmcgaW1hZ2UiCisJCQkJbHptYSAtZGYgJHtCfS91c3IvJHtJTklUUkFNRlNfSU1BR0V9LSR7TUFDSElORX0uJGltZworCQkJCWJyZWFrCisJCQkJOzsKKwkJCSp4eikKKwkJCQllY2hvICJ4eiBkZWNvbXByZXNzaW5nIGltYWdlIgorCQkJCXh6IC1kZiAke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS4kaW1nCisJCQkJYnJlYWsKKwkJCQk7OworCQkJZXNhYworCQlmaQorCWRvbmUKKwllY2hvICJGaW5pc2hlZCBjb3B5IG9mIGluaXRyYW1mcyBpbnRvIC4vdXNyIgorfQorCitJTklUUkFNRlNfQkFTRV9OQU1FID0gIiR7S0VSTkVMX0lNQUdFVFlQRX0taW5pdHJhbWZzLSR7UFZ9LSR7UFJ9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCitJTklUUkFNRlNfQkFTRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKK2RvX2J1bmRsZV9pbml0cmFtZnMgKCkgeworCWlmIFsgISAteiAiJHtJTklUUkFNRlNfSU1BR0V9IiAtYSB4IiR7SU5JVFJBTUZTX0lNQUdFX0JVTkRMRX0iID0geDEgXTsgdGhlbgorCQllY2hvICJDcmVhdGluZyBhIGtlcm5lbCBpbWFnZSB3aXRoIGEgYnVuZGxlZCBpbml0cmFtZnMuLi4iCisJCWNvcHlfaW5pdHJhbWZzCisJCWlmIFsgLWUgJHtLRVJORUxfT1VUUFVUfSBdIDsgdGhlbgorCQkJbXYgLWYgJHtLRVJORUxfT1VUUFVUfSAke0tFUk5FTF9PVVRQVVR9LmJhaworCQlmaQorCQl1c2VfYWx0ZXJuYXRlX2luaXRyZD1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0ke0J9L3Vzci8ke0lOSVRSQU1GU19JTUFHRX0tJHtNQUNISU5FfS5jcGlvCisJCWtlcm5lbF9kb19jb21waWxlCisJCW12IC1mICR7S0VSTkVMX09VVFBVVH0gJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMKKwkJbXYgLWYgJHtLRVJORUxfT1VUUFVUfS5iYWsgJHtLRVJORUxfT1VUUFVUfQorCQkjIFVwZGF0ZSBpbnN0YWxsIGFyZWEKKwkJZWNobyAiVGhlcmUgaXMga2VybmVsIGltYWdlIGJ1bmRsZWQgd2l0aCBpbml0cmFtZnM6ICR7Qn0vJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMiCisJCWluc3RhbGwgLW0gMDY0NCAke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzICR7RH0vYm9vdC8ke0tFUk5FTF9JTUFHRVRZUEV9LWluaXRyYW1mcy0ke01BQ0hJTkV9LmJpbgorCQllY2hvICIke0J9LyR7S0VSTkVMX09VVFBVVH0uaW5pdHJhbWZzIgorCWZpCit9CisKK3B5dGhvbiBkb19kZXZzaGVsbF9wcmVwZW5kICgpIHsKKyAgICBvcy5lbnZpcm9uWyJMREZMQUdTIl0gPSAnJworfQorCithZGR0YXNrIGJ1bmRsZV9pbml0cmFtZnMgYWZ0ZXIgZG9faW5zdGFsbCBiZWZvcmUgZG9fZGVwbG95CisKK2tlcm5lbF9kb19jb21waWxlKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIE1BQ0hJTkUKKwkjIFRoZSAkdXNlX2FsdGVybmF0ZV9pbml0cmQgaXMgb25seSBzZXQgZnJvbQorCSMgZG9fYnVuZGxlX2luaXRyYW1mcygpIFRoaXMgdmFyaWFibGUgaXMgc3BlY2lmaWNhbGx5IGZvciB0aGUKKwkjIGNhc2Ugd2hlcmUgd2UgYXJlIG1ha2luZyBhIHNlY29uZCBwYXNzIGF0IHRoZSBrZXJuZWwKKwkjIGNvbXBpbGF0aW9uIGFuZCB3ZSB3YW50IHRvIGZvcmNlIHRoZSBrZXJuZWwgYnVpbGQgdG8gdXNlIGEKKwkjIGRpZmZlcmVudCBpbml0cmFtZnMgaW1hZ2UuICBUaGUgd2F5IHRvIGRvIHRoYXQgaW4gdGhlIGtlcm5lbAorCSMgaXMgdG8gc3BlY2lmeToKKwkjIG1ha2UgLi4uYXJncy4uLiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT1zb21lX290aGVyX2luaXRyYW1mcy5jcGlvCisJaWYgWyAiJHVzZV9hbHRlcm5hdGVfaW5pdHJkIiA9ICIiIF0gJiYgWyAiJHtJTklUUkFNRlNfVEFTS30iICE9ICIiIF0gOyB0aGVuCisJCSMgVGhlIG9sZCBzdHlsZSB3YXkgb2YgY29weWluZyBhbiBwcmVidWlsdCBpbWFnZSBhbmQgYnVpbGRpbmcgaXQKKwkJIyBpcyB0dXJuZWQgb24gdmlhIElOVElSQU1GU19UQVNLICE9ICIiCisJCWNvcHlfaW5pdHJhbWZzCisJCXVzZV9hbHRlcm5hdGVfaW5pdHJkPUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSR7Qn0vdXNyLyR7SU5JVFJBTUZTX0lNQUdFfS0ke01BQ0hJTkV9LmNwaW8KKwlmaQorCW9lX3J1bm1ha2UgJHtLRVJORUxfSU1BR0VUWVBFX0ZPUl9NQUtFfSAke0tFUk5FTF9BTFRfSU1BR0VUWVBFfSBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiAke0tFUk5FTF9FWFRSQV9BUkdTfSAkdXNlX2FsdGVybmF0ZV9pbml0cmQKKwlpZiB0ZXN0ICIke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9Lmd6IiA9ICIke0tFUk5FTF9JTUFHRVRZUEV9IjsgdGhlbgorCQlnemlwIC05YyA8ICIke0tFUk5FTF9JTUFHRVRZUEVfRk9SX01BS0V9IiA+ICIke0tFUk5FTF9PVVRQVVR9IgorCWZpCit9CisKK2RvX2NvbXBpbGVfa2VybmVsbW9kdWxlcygpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJaWYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgJHtCfS8uY29uZmlnKTsgdGhlbgorCQlvZV9ydW5tYWtlIC1DICR7Qn0gJHtQQVJBTExFTF9NQUtFfSBtb2R1bGVzIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iICR7S0VSTkVMX0VYVFJBX0FSR1N9CisJZWxzZQorCQliYm5vdGUgIm5vIG1vZHVsZXMgdG8gY29tcGlsZSIKKwlmaQorfQorYWRkdGFzayBjb21waWxlX2tlcm5lbG1vZHVsZXMgYWZ0ZXIgZG9fY29tcGlsZSBiZWZvcmUgZG9fc3RyaXAKKwora2VybmVsX2RvX2luc3RhbGwoKSB7CisJIworCSMgRmlyc3QgaW5zdGFsbCB0aGUgbW9kdWxlcworCSMKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyBNQUNISU5FCisJaWYgKGdyZXAgLXEgLWkgLWUgJ15DT05GSUdfTU9EVUxFUz15JCcgLmNvbmZpZyk7IHRoZW4KKwkJb2VfcnVubWFrZSBERVBNT0Q9ZWNobyBJTlNUQUxMX01PRF9QQVRIPSIke0R9IiBtb2R1bGVzX2luc3RhbGwKKwkJcm0gIiR7RH0vbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vYnVpbGQiCisJCXJtICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L3NvdXJjZSIKKwkJIyBJZiB0aGUga2VybmVsLyBkaXJlY3RvcnkgaXMgZW1wdHkgcmVtb3ZlIGl0IHRvIHByZXZlbnQgUUEgaXNzdWVzCisJCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICIke0R9L2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2tlcm5lbCIKKwllbHNlCisJCWJibm90ZSAibm8gbW9kdWxlcyB0byBpbnN0YWxsIgorCWZpCisKKwkjCisJIyBJbnN0YWxsIHZhcmlvdXMga2VybmVsIG91dHB1dCAoekltYWdlLCBtYXAgZmlsZSwgY29uZmlnLCBtb2R1bGUgc3VwcG9ydCBmaWxlcykKKwkjCisJaW5zdGFsbCAtZCAke0R9LyR7S0VSTkVMX0lNQUdFREVTVH0KKwlpbnN0YWxsIC1kICR7RH0vYm9vdAorCWluc3RhbGwgLW0gMDY0NCAke0tFUk5FTF9PVVRQVVR9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS8ke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IFN5c3RlbS5tYXAgJHtEfS9ib290L1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KKwlpbnN0YWxsIC1tIDA2NDQgLmNvbmZpZyAke0R9L2Jvb3QvY29uZmlnLSR7S0VSTkVMX1ZFUlNJT059CisJaW5zdGFsbCAtbSAwNjQ0IHZtbGludXggJHtEfS9ib290L3ZtbGludXgtJHtLRVJORUxfVkVSU0lPTn0KKwlbIC1lIE1vZHVsZS5zeW12ZXJzIF0gJiYgaW5zdGFsbCAtbSAwNjQ0IE1vZHVsZS5zeW12ZXJzICR7RH0vYm9vdC9Nb2R1bGUuc3ltdmVycy0ke0tFUk5FTF9WRVJTSU9OfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKK30KK2RvX2luc3RhbGxbcHJlZnVuY3NdICs9ICJwYWNrYWdlX2dldF9hdXRvX3ByIgorCithZGR0YXNrIHNoYXJlZF93b3JrZGlyIGFmdGVyIGRvX2NvbXBpbGUgYmVmb3JlIGRvX2NvbXBpbGVfa2VybmVsbW9kdWxlcworYWRkdGFzayBzaGFyZWRfd29ya2Rpcl9zZXRzY2VuZQorCitkb19zaGFyZWRfd29ya2Rpcl9zZXRzY2VuZSAoKSB7CisJZXhpdCAxCit9CisKK2VtaXRfZGVwbW9kX3BrZ2RhdGEoKSB7CisJIyBTdGFzaCBkYXRhIGZvciBkZXBtb2QKKwlpbnN0YWxsIC1kICR7UEtHREVTVFdPUkt9L2tlcm5lbC1kZXBtb2QvCisJZWNobyAiJHtLRVJORUxfVkVSU0lPTn0iID4gJHtQS0dERVNUV09SS30va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbgorCWNwICR7Qn0vU3lzdGVtLm1hcCAke1BLR0RFU1RXT1JLfS9rZXJuZWwtZGVwbW9kL1N5c3RlbS5tYXAtJHtLRVJORUxfVkVSU0lPTn0KK30KKworUEFDS0FHRUZVTkNTICs9ICJlbWl0X2RlcG1vZF9wa2dkYXRhIgorCitkb19zaGFyZWRfd29ya2RpciAoKSB7CisJY2QgJHtCfQorCisJa2VybmVsZGlyPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9CisJaW5zdGFsbCAtZCAka2VybmVsZGlyCisKKwkjCisJIyBTdG9yZSB0aGUga2VybmVsIHZlcnNpb24gaW4gc3lzcm9vdHMgZm9yIG1vZHVsZS1iYXNlLmJiY2xhc3MKKwkjCisKKwllY2hvICIke0tFUk5FTF9WRVJTSU9OfSIgPiAka2VybmVsZGlyL2tlcm5lbC1hYml2ZXJzaW9uCisKKwkjIENvcHkgZmlsZXMgcmVxdWlyZWQgZm9yIG1vZHVsZSBidWlsZHMKKwljcCBTeXN0ZW0ubWFwICRrZXJuZWxkaXIvU3lzdGVtLm1hcC0ke0tFUk5FTF9WRVJTSU9OfQorCWNwIE1vZHVsZS5zeW12ZXJzICRrZXJuZWxkaXIvCisJY3AgLmNvbmZpZyAka2VybmVsZGlyLworCW1rZGlyIC1wICRrZXJuZWxkaXIvaW5jbHVkZS9jb25maWcKKwljcCBpbmNsdWRlL2NvbmZpZy9rZXJuZWwucmVsZWFzZSAka2VybmVsZGlyL2luY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlCisKKwkjIFdlIGNhbiBhbHNvIGNvcHkgb3ZlciBhbGwgdGhlIGdlbmVyYXRlZCBmaWxlcyBhbmQgYXZvaWQgc3BlY2lhbCBjYXNlcworCSMgbGlrZSB2ZXJzaW9uLmgsIGJ1dCB3ZSd2ZSBvcHRlZCB0byBrZWVwIHRoaXMgc21hbGwgdW50aWwgZmlsZSBjcmVlcCBzdGFydHMKKwkjIHRvIGhhcHBlbgorCWlmIFsgLWUgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvbGludXgKKwkJY3AgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggJGtlcm5lbGRpci9pbmNsdWRlL2xpbnV4L3ZlcnNpb24uaAorCWZpCisKKwkjIEFzIG9mIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDMuMC4xLCB0aGUgY2xlYW4gdGFyZ2V0IHJlbW92ZXMKKwkjIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gd2hpY2ggaXMgcHJlc2VudCBpbgorCSMgS0JVSUxEX0xERkxBR1NfTU9EVUxFLCBtYWtpbmcgaXQgcmVxdWlyZWQgdG8gYnVpbGQgZXh0ZXJuYWwgbW9kdWxlcy4KKwlpZiBbICR7QVJDSH0gPSAicG93ZXJwYyIgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvCisJCWNwIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliL2NydHNhdnJlcy5vCisJZmkKKworCWlmIFsgLWQgaW5jbHVkZS9nZW5lcmF0ZWQgXTsgdGhlbgorCQlta2RpciAtcCAka2VybmVsZGlyL2luY2x1ZGUvZ2VuZXJhdGVkLworCQljcCAtZlIgaW5jbHVkZS9nZW5lcmF0ZWQvKiAka2VybmVsZGlyL2luY2x1ZGUvZ2VuZXJhdGVkLworCWZpCisKKwlpZiBbIC1kIGFyY2gvJHtBUkNIfS9pbmNsdWRlL2dlbmVyYXRlZCBdOyB0aGVuCisJCW1rZGlyIC1wICRrZXJuZWxkaXIvYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLworCQljcCAtZlIgYXJjaC8ke0FSQ0h9L2luY2x1ZGUvZ2VuZXJhdGVkLyogJGtlcm5lbGRpci9hcmNoLyR7QVJDSH0vaW5jbHVkZS9nZW5lcmF0ZWQvCisJZmkKK30KKworIyBXZSBkb24ndCBuZWVkIHRvIHN0YWdlIGFueXRoaW5nLCBub3QgdGhlIG1vZHVsZXMvZmlybXdhcmUgc2luY2UgdGhvc2Ugd291bGQgY2xhc2ggd2l0aCBsaW51eC1maXJtd2FyZQorc3lzcm9vdF9zdGFnZV9hbGwgKCkgeworCToKK30KKworS0VSTkVMX0NPTkZJR19DT01NQU5EID89ICJvZV9ydW5tYWtlX2NhbGwgLUMgJHtTfSBPPSR7Qn0gb2xkbm9jb25maWcgfHwgeWVzICcnIHwgb2VfcnVubWFrZSAtQyAke1N9IE89JHtCfSBvbGRjb25maWciCisKK2tlcm5lbF9kb19jb25maWd1cmUoKSB7CisJIyBmaXhlcyBleHRyYSArIGluIC9saWIvbW9kdWxlcy8yLjYuMzcrCisJIyAkIHNjcmlwdHMvc2V0bG9jYWx2ZXJzaW9uIC4gPT4gKworCSMgJCBtYWtlIGtlcm5lbHZlcnNpb24gPT4gMi42LjM3CisJIyAkIG1ha2Uga2VybmVscmVsZWFzZSA9PiAyLjYuMzcrCisJdG91Y2ggJHtCfS8uc2NtdmVyc2lvbiAke1N9Ly5zY212ZXJzaW9uCisKKwlpZiBbICIke1N9IiAhPSAiJHtCfSIgXSAmJiBbIC1mICIke1N9Ly5jb25maWciIF0gJiYgWyAhIC1mICIke0J9Ly5jb25maWciIF07IHRoZW4KKwkJbXYgIiR7U30vLmNvbmZpZyIgIiR7Qn0vLmNvbmZpZyIKKwlmaQorCisJIyBDb3B5IGRlZmNvbmZpZyB0byAuY29uZmlnIGlmIC5jb25maWcgZG9lcyBub3QgZXhpc3QuIFRoaXMgYWxsb3dzCisJIyByZWNpcGVzIHRvIG1hbmFnZSB0aGUgLmNvbmZpZyB0aGVtc2VsdmVzIGluIGRvX2NvbmZpZ3VyZV9wcmVwZW5kKCkuCisJaWYgWyAtZiAiJHtXT1JLRElSfS9kZWZjb25maWciIF0gJiYgWyAhIC1mICIke0J9Ly5jb25maWciIF07IHRoZW4KKwkJY3AgIiR7V09SS0RJUn0vZGVmY29uZmlnIiAiJHtCfS8uY29uZmlnIgorCWZpCisJZXZhbCAke0tFUk5FTF9DT05GSUdfQ09NTUFORH0KK30KKworZG9fc2F2ZWRlZmNvbmZpZygpIHsKKwlvZV9ydW5tYWtlIC1DICR7Qn0gc2F2ZWRlZmNvbmZpZworfQorZG9fc2F2ZWRlZmNvbmZpZ1tub3N0YW1wXSA9ICIxIgorYWRkdGFzayBzYXZlZGVmY29uZmlnIGFmdGVyIGRvX2NvbmZpZ3VyZQorCitpbmhlcml0IGNtbDEKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwgZG9fY29uZmlndXJlCisKKyMga2VybmVsLWJhc2UgYmVjb21lcyBrZXJuZWwtJHtLRVJORUxfVkVSU0lPTn0KKyMga2VybmVsLWltYWdlIGJlY29tZXMga2VybmVsLWltYWdlLSR7S0VSTkVMX1ZFUklTT059CitQQUNLQUdFUyA9ICJrZXJuZWwga2VybmVsLWJhc2Uga2VybmVsLXZtbGludXgga2VybmVsLWltYWdlIGtlcm5lbC1kZXYga2VybmVsLW1vZHVsZXMiCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU19rZXJuZWwtYmFzZSA9ICIvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vbW9kdWxlcy5vcmRlciAvbGliL21vZHVsZXMvJHtLRVJORUxfVkVSU0lPTn0vbW9kdWxlcy5idWlsdGluIgorRklMRVNfa2VybmVsLWltYWdlID0gIi9ib290LyR7S0VSTkVMX0lNQUdFVFlQRX0qIgorRklMRVNfa2VybmVsLWRldiA9ICIvYm9vdC9TeXN0ZW0ubWFwKiAvYm9vdC9Nb2R1bGUuc3ltdmVycyogL2Jvb3QvY29uZmlnKiAke0tFUk5FTF9TUkNfUEFUSH0gL2xpYi9tb2R1bGVzLyR7S0VSTkVMX1ZFUlNJT059L2J1aWxkIgorRklMRVNfa2VybmVsLXZtbGludXggPSAiL2Jvb3Qvdm1saW51eCoiCitGSUxFU19rZXJuZWwtbW9kdWxlcyA9ICIiCitSREVQRU5EU19rZXJuZWwgPSAia2VybmVsLWJhc2UiCisjIEFsbG93IG1hY2hpbmVzIHRvIG92ZXJyaWRlIHRoaXMgZGVwZW5kZW5jeSBpZiBrZXJuZWwgaW1hZ2UgZmlsZXMgYXJlIAorIyBub3Qgd2FudGVkIGluIGltYWdlcyBhcyBzdGFuZGFyZAorUkRFUEVORFNfa2VybmVsLWJhc2UgPz0gImtlcm5lbC1pbWFnZSIKK1BLR19rZXJuZWwtaW1hZ2UgPSAia2VybmVsLWltYWdlLSR7QGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKCcke0tFUk5FTF9WRVJTSU9OfScpfSIKK1JERVBFTkRTX2tlcm5lbC1pbWFnZSArPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnS0VSTkVMX0lNQUdFVFlQRScsICd2bWxpbnV4JywgJ2tlcm5lbC12bWxpbnV4JywgJycsIGQpfSIKK1BLR19rZXJuZWwtYmFzZSA9ICJrZXJuZWwtJHtAbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyR7S0VSTkVMX1ZFUlNJT059Jyl9IgorUlBST1ZJREVTX2tlcm5lbC1iYXNlICs9ICJrZXJuZWwtJHtLRVJORUxfVkVSU0lPTn0iCitBTExPV19FTVBUWV9rZXJuZWwgPSAiMSIKK0FMTE9XX0VNUFRZX2tlcm5lbC1iYXNlID0gIjEiCitBTExPV19FTVBUWV9rZXJuZWwtaW1hZ2UgPSAiMSIKK0FMTE9XX0VNUFRZX2tlcm5lbC1tb2R1bGVzID0gIjEiCitERVNDUklQVElPTl9rZXJuZWwtbW9kdWxlcyA9ICJLZXJuZWwgbW9kdWxlcyBtZXRhIHBhY2thZ2UiCisKK3BrZ19wb3N0aW5zdF9rZXJuZWwtYmFzZSAoKSB7CisJaWYgWyAhIC1lICIkRC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfSIgXTsgdGhlbgorCQlta2RpciAtcCAkRC9saWIvbW9kdWxlcy8ke0tFUk5FTF9WRVJTSU9OfQorCWZpCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJZGVwbW9kd3JhcHBlciAtYSAtYiAkRCAke0tFUk5FTF9WRVJTSU9OfQorCWVsc2UKKwkJZGVwbW9kIC1hICR7S0VSTkVMX1ZFUlNJT059CisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1pbWFnZSAoKSB7CisJdXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgLyR7S0VSTkVMX0lNQUdFREVTVH0vJHtLRVJORUxfSU1BR0VUWVBFfSAke0tFUk5FTF9JTUFHRVRZUEV9IC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7S0VSTkVMX0lNQUdFVFlQRX0tJHtLRVJORUxfVkVSU0lPTn0gJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKK30KKworcGtnX3Bvc3RybV9rZXJuZWwtaW1hZ2UgKCkgeworCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgJHtLRVJORUxfSU1BR0VUWVBFfSAke0tFUk5FTF9JTUFHRVRZUEV9LSR7S0VSTkVMX1ZFUlNJT059IHx8IHRydWUKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJzcGxpdF9rZXJuZWxfcGFja2FnZXMgIgorCitweXRob24gc3BsaXRfa2VybmVsX3BhY2thZ2VzICgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCByb290PScvbGliL2Zpcm13YXJlJywgZmlsZV9yZWdleD0nXiguKilcLihiaW58Znd8Y2lzfGRzcCkkJywgb3V0cHV0X3BhdHRlcm49J2tlcm5lbC1maXJtd2FyZS0lcycsIGRlc2NyaXB0aW9uPSdGaXJtd2FyZSBmb3IgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgZXh0cmFfZGVwZW5kcz0nJykKK30KKworZG9fc3RyaXAoKSB7CisJaWYgWyAtbiAiJHtLRVJORUxfSU1BR0VfU1RSSVBfRVhUUkFfU0VDVElPTlN9IiBdOyB0aGVuCisJCWlmIFsgIiR7S0VSTkVMX0lNQUdFVFlQRX0iICE9ICJ2bWxpbnV4IiBdOyB0aGVuCisJCQliYndhcm4gImltYWdlIHR5cGUgd2lsbCBub3QgYmUgc3RyaXBwZWQgKG5vdCBzdXBwb3J0ZWQpOiAke0tFUk5FTF9JTUFHRVRZUEV9IgorCQkJcmV0dXJuCisJCWZpCisKKwkJY2QgJHtCfQorCQloZWFkZXJzPWAiJENST1NTX0NPTVBJTEUicmVhZGVsZiAtUyAke0tFUk5FTF9PVVRQVVR9IHwgXAorCQkJICBncmVwICJeIFx7MSxcfVxbWzAtOSBdXHsxLFx9XF0gW14gXSIgfCBcCisJCQkgIHNlZCAicy9eIFx7MSxcfVxbWzAtOSBdXHsxLFx9XF0gLy8iIHwgXAorCQkJICBnYXdrICd7cHJpbnQgJDF9J2AKKworCQlmb3Igc3RyIGluICR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfTsgZG8geworCQkJaWYgWyAiJGhlYWRlcnMiICE9ICoiJHN0ciIqIF07IHRoZW4KKwkJCQliYndhcm4gIlNlY3Rpb24gbm90IGZvdW5kOiAkc3RyIjsKKwkJCWZpCisKKwkJCSIkQ1JPU1NfQ09NUElMRSJzdHJpcCAtcyAtUiAkc3RyICR7S0VSTkVMX09VVFBVVH0KKwkJfTsgZG9uZQorCisJCWJibm90ZSAiS0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TIGlzIHNldCwgc3RyaXBwaW5nIHNlY3Rpb25zOiIgXAorCQkJIiR7S0VSTkVMX0lNQUdFX1NUUklQX0VYVFJBX1NFQ1RJT05TfSIKKwlmaTsKK30KK2RvX3N0cmlwW2RpcnNdID0gIiR7Qn0iCisKK2FkZHRhc2sgZG9fc3RyaXAgYmVmb3JlIGRvX3NpemVjaGVjayBhZnRlciBkb19rZXJuZWxfbGlua192bWxpbnV4CisKKyMgU3VwcG9ydCBjaGVja2luZyB0aGUga2VybmVsIHNpemUgc2luY2Ugc29tZSBrZXJuZWxzIG5lZWQgdG8gcmVzaWRlIGluIHBhcnRpdGlvbnMKKyMgd2l0aCBhIGZpeGVkIGxlbmd0aCBvciB0aGVyZSBpcyBhIGxpbWl0IGluIHRyYW5zZmVycmluZyB0aGUga2VybmVsIHRvIG1lbW9yeQorZG9fc2l6ZWNoZWNrKCkgeworCWlmIFsgISAteiAiJHtLRVJORUxfSU1BR0VfTUFYU0laRX0iIF07IHRoZW4KKwkJaW52YWxpZD1gZWNobyAke0tFUk5FTF9JTUFHRV9NQVhTSVpFfSB8IHNlZCAncy9bMC05XS8vZydgCisJCWlmIFsgLW4gIiRpbnZhbGlkIiBdOyB0aGVuCisJCQlkaWUgIkludmFsaWQgS0VSTkVMX0lNQUdFX01BWFNJWkU6ICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9LCBzaG91bGQgYmUgYW4gaW50ZWdlcnggKFRoZSB1bml0IGlzIEtieXRlcykiCisJCWZpCisJCXNpemU9YGR1IC1rcyAke0J9LyR7S0VSTkVMX09VVFBVVH0gfCBhd2sgJ3sgcHJpbnQgJDF9J2AKKwkJaWYgWyAkc2l6ZSAtZ2UgJHtLRVJORUxfSU1BR0VfTUFYU0laRX0gXTsgdGhlbgorCQkJZGllICJUaGlzIGtlcm5lbCAoc2l6ZT0kc2l6ZShLKSA+ICR7S0VSTkVMX0lNQUdFX01BWFNJWkV9KEspKSBpcyB0b28gYmlnIGZvciB5b3VyIGRldmljZS4gUGxlYXNlIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJ5IG1ha2luZyBtb3JlIG9mIGl0IG1vZHVsYXIuIgorCQlmaQorCWZpCit9Citkb19zaXplY2hlY2tbZGlyc10gPSAiJHtCfSIKKworYWRkdGFzayBzaXplY2hlY2sgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fc3RyaXAKKworS0VSTkVMX0lNQUdFX0JBU0VfTkFNRSA/PSAiJHtLRVJORUxfSU1BR0VUWVBFfS0ke1BLR0V9LSR7UEtHVn0tJHtQS0dSfS0ke01BQ0hJTkV9LSR7REFURVRJTUV9IgorIyBEb24ndCBpbmNsdWRlIHRoZSBEQVRFVElNRSB2YXJpYWJsZSBpbiB0aGUgc3N0YXRlIHBhY2thZ2Ugc2lnbmF0dXJlcworS0VSTkVMX0lNQUdFX0JBU0VfTkFNRVt2YXJkZXBzZXhjbHVkZV0gPSAiREFURVRJTUUiCitLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FID89ICIke0tFUk5FTF9JTUFHRVRZUEV9LSR7TUFDSElORX0iCitNT0RVTEVfSU1BR0VfQkFTRV9OQU1FID89ICJtb2R1bGVzLSR7UEtHRX0tJHtQS0dWfS0ke1BLR1J9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCitNT0RVTEVfSU1BR0VfQkFTRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFVElNRSIKK01PRFVMRV9UQVJCQUxMX0JBU0VfTkFNRSA/PSAiJHtNT0RVTEVfSU1BR0VfQkFTRV9OQU1FfS50Z3oiCisjIERvbid0IGluY2x1ZGUgdGhlIERBVEVUSU1FIHZhcmlhYmxlIGluIHRoZSBzc3RhdGUgcGFja2FnZSBzaWduYXR1cmVzCitNT0RVTEVfVEFSQkFMTF9TWU1MSU5LX05BTUUgPz0gIm1vZHVsZXMtJHtNQUNISU5FfS50Z3oiCitNT0RVTEVfVEFSQkFMTF9ERVBMT1kgPz0gIjEiCisKK2tlcm5lbF9kb19kZXBsb3koKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7S0VSTkVMX09VVFBVVH0gJHtERVBMT1lESVJ9LyR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0uYmluCisJaWYgWyAke01PRFVMRV9UQVJCQUxMX0RFUExPWX0gPSAiMSIgXSAmJiAoZ3JlcCAtcSAtaSAtZSAnXkNPTkZJR19NT0RVTEVTPXkkJyAuY29uZmlnKTsgdGhlbgorCQlta2RpciAtcCAke0R9L2xpYgorCQl0YXIgLWN2emYgJHtERVBMT1lESVJ9LyR7TU9EVUxFX1RBUkJBTExfQkFTRV9OQU1FfSAtQyAke0R9IGxpYgorCQlsbiAtc2YgJHtNT0RVTEVfVEFSQkFMTF9CQVNFX05BTUV9ICR7REVQTE9ZRElSfS8ke01PRFVMRV9UQVJCQUxMX1NZTUxJTktfTkFNRX0KKwlmaQorCisJbG4gLXNmICR7S0VSTkVMX0lNQUdFX0JBU0VfTkFNRX0uYmluICR7REVQTE9ZRElSfS8ke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9LmJpbgorCWxuIC1zZiAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9LmJpbiAke0RFUExPWURJUn0vJHtLRVJORUxfSU1BR0VUWVBFfQorCisJY3AgJHtDT1JFQkFTRX0vbWV0YS9maWxlcy9kZXBsb3lkaXJfcmVhZG1lLnR4dCAke0RFUExPWURJUn0vUkVBRE1FXy1fRE9fTk9UX0RFTEVURV9GSUxFU19JTl9USElTX0RJUkVDVE9SWS50eHQKKworCWNkICR7Qn0KKwkjIFVwZGF0ZSBkZXBsb3kgZGlyZWN0b3J5CisJaWYgWyAtZSAiJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMiIF07IHRoZW4KKwkJZWNobyAiQ29weWluZyBkZXBsb3kga2VybmVsLWluaXRyYW1mcyBpbWFnZSBhbmQgc2V0dGluZyB1cCBsaW5rcy4uLiIKKwkJaW5pdHJhbWZzX2Jhc2VfbmFtZT0ke0lOSVRSQU1GU19CQVNFX05BTUV9CisJCWluaXRyYW1mc19zeW1saW5rX25hbWU9JHtLRVJORUxfSU1BR0VUWVBFfS1pbml0cmFtZnMtJHtNQUNISU5FfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtLRVJORUxfT1VUUFVUfS5pbml0cmFtZnMgJHtERVBMT1lESVJ9LyR7aW5pdHJhbWZzX2Jhc2VfbmFtZX0uYmluCisJCWNkICR7REVQTE9ZRElSfQorCQlsbiAtc2YgJHtpbml0cmFtZnNfYmFzZV9uYW1lfS5iaW4gJHtpbml0cmFtZnNfc3ltbGlua19uYW1lfS5iaW4KKwlmaQorfQorZG9fZGVwbG95W2RpcnNdID0gIiR7REVQTE9ZRElSfSAke0J9IgorZG9fZGVwbG95W3ByZWZ1bmNzXSArPSAicGFja2FnZV9nZXRfYXV0b19wciIKKworYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9fcG9wdWxhdGVfc3lzcm9vdAorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2RlcGxveQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMva2VybmVsc3JjLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmZDQ2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9rZXJuZWxzcmMuYmJjbGFzcwpAQCAtMCwwICsxLDEwIEBACitTID0gIiR7U1RBR0lOR19LRVJORUxfRElSfSIKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fcGF0Y2giCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0tFUk5FTF9WRVJTSU9OID0gIiR7QGdldF9rZXJuZWx2ZXJzaW9uX2ZpbGUoIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9Iil9IgorCitpbmhlcml0IGxpbnV4LWtlcm5lbC1iYXNlCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpYl9wYWNrYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0OWY1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9saWJfcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsNyBAQAorIworIyAke1BOfS1iaW4gaXMgZGVmaW5lZCBpbiBiaXRiYWtlLmNvbmYKKyMKKyMgV2UgbmVlZCB0byBhbGxvdyB0aGUgb3RoZXIgcGFja2FnZXMgdG8gYmUgZ3JlZWR5IHdpdGggd2hhdCB0aGV5CisjIHdhbnQgb3V0IG9mIC91c3IvYmluIGFuZCAvdXNyL3NiaW4gYmVmb3JlICR7UE59LWJpbiBnZXRzIGdyZWVkeS4KKyMgCitQQUNLQUdFX0JFRk9SRV9QTiA9ICIke1BOfS1iaW4iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9saWJjLWNvbW1vbi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzgwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGliYy1jb21tb24uYmJjbGFzcwpAQCAtMCwwICsxLDQzIEBACitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbF9yb290PSR7RH0gaW5zdGFsbAorCWZvciByIGluICR7cnBjc3ZjfTsgZG8KKwkJaD1gZWNobyAkcnxzZWQgLWUncyxcLngkLC5oLCdgCisJCWluc3RhbGwgLW0gMDY0NCAke1N9L3N1bnJwYy9ycGNzdmMvJGggJHtEfS8ke2luY2x1ZGVkaXJ9L3JwY3N2Yy8KKwlkb25lCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vIAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2V0Yy9sZC5zby5jb25mICR7RH0vJHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1kICR7RH0ke2xvY2FsZWRpcn0KKwltYWtlIC1mICR7V09SS0RJUn0vZ2VuZXJhdGUtc3VwcG9ydGVkLm1rIElOPSIke1N9L2xvY2FsZWRhdGEvU1VQUE9SVEVEIiBPVVQ9IiR7V09SS0RJUn0vU1VQUE9SVEVEIgorCSMgZ2V0IHJpZCBvZiBzb21lIGJyb2tlbiBmaWxlcy4uLgorCWZvciBpIGluICR7R0xJQkNfQlJPS0VOX0xPQ0FMRVN9OyBkbworCQlncmVwIC12ICRpICR7V09SS0RJUn0vU1VQUE9SVEVEID4gJHtXT1JLRElSfS9TVVBQT1JURUQudG1wCisJCW12ICR7V09SS0RJUn0vU1VQUE9SVEVELnRtcCAke1dPUktESVJ9L1NVUFBPUlRFRAorCWRvbmUKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9ycGMKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vem9uZWluZm8KKwlybSAtcmYgJHtEfSR7bGliZXhlY2Rpcn0vZ2V0Y29uZgorfQorCitkZWYgZ2V0X2xpYmNfZnB1X3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcsICdwcGMtZWZkJyBdOgorICAgICAgICByZXR1cm4gIi0td2l0aG91dC1mcCIKKyAgICByZXR1cm4gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGlmIGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKToKKyAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgICAgIHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICIiCisgICAgICAgICMgU2V0IHRoZSBiYXNlIHBhY2thZ2UuLi4KKyAgICAgICAgZC5zZXRWYXIoJ1BLR18nICsgcHJlZml4ICsgYnBuLCBwcmVmaXggKyAnbGliYzYnKQorICAgICAgICBsaWJjcHJlZml4ID0gcHJlZml4ICsgYnBuICsgJy0nCisgICAgICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgICAgICAjIEFuZCBhbGwgdGhlIHN1YnBhY2thZ2VzLgorICAgICAgICAgICAgaWYgcC5zdGFydHN3aXRoKGxpYmNwcmVmaXgpOgorICAgICAgICAgICAgICAgIHJlbmFtZWQgPSBwLnJlcGxhY2UoYnBuLCAnbGliYzYnLCAxKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCdQS0dfJyArIHAsIHJlbmFtZWQpCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgLWRiZyBwYWNrYWdlCisgICAgICAgIGQuYXBwZW5kVmFyKCdSUFJPVklERVNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JDT05GTElDVFNfJyArIGxpYmNwcmVmaXggKyAnZGJnJywgJyAnICsgcHJlZml4ICsgJ2xpYmMtZGJnJykKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JSRVBMQUNFU18nICsgbGliY3ByZWZpeCArICdkYmcnLCAnICcgKyBwcmVmaXggKyAnbGliYy1kYmcnKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpYmMtcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YmU2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGliYy1wYWNrYWdlLmJiY2xhc3MKQEAgLTAsMCArMSwzODggQEAKKyMKKyMgVGhpcyBjbGFzcyBrbm93cyBob3cgdG8gcGFja2FnZSB1cCBbZV1nbGliYy4gSXRzIHNoYXJlZCBzaW5jZSBwcmVidWlsZCBiaW5hcnkgdG9vbGNoYWlucworIyBtYXkgbmVlZCBwYWNrYWdpbmcgYW5kIGl0cyBwb2ludGxlc3MgdG8gZHVwbGljYXRlIHRoaXMgY29kZS4KKyMKKyMgQ2FsbGVyIHNob3VsZCBzZXQgR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUgdG8gb25lIG9mOgorIyAgImNvbXBpbGUiIC0gVXNlIFFFTVUgdG8gZ2VuZXJhdGUgdGhlIGJpbmFyeSBsb2NhbGUgZmlsZXMKKyMgICJwcmVjb21waWxlZCIgLSBUaGUgYmluYXJ5IGxvY2FsZSBmaWxlcyBhcmUgcHJlZ2VuZXJhdGVkIGFuZCBhbHJlYWR5IHByZXNlbnQKKyMgICJvbmRldmljZSIgLSBUaGUgZGV2aWNlIHdpbGwgYnVpbGQgdGhlIGxvY2FsZSBmaWxlcyB1cG9uIGZpcnN0IGJvb3QgdGhyb3VnaCB0aGUgcG9zdGluc3QKKworR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUgPz0gIm9uZGV2aWNlIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGVuYWJsZWQgPSBkLmdldFZhcigiRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiIsIFRydWUpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgcG4uZW5kc3dpdGgoIi1pbml0aWFsIik6CisgICAgICAgIGVuYWJsZWQgPSBGYWxzZQorCisgICAgaWYgZW5hYmxlZCBhbmQgaW50KGVuYWJsZWQpOgorICAgICAgICBpbXBvcnQgcmUKKworICAgICAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCJUQVJHRVRfQVJDSCIsIFRydWUpCisgICAgICAgIGJpbmFyeV9hcmNoZXMgPSBkLmdldFZhcigiQklOQVJZX0xPQ0FMRV9BUkNIRVMiLCBUcnVlKSBvciAiIgorICAgICAgICB1c2VfY3Jvc3NfbG9jYWxlZGVmID0gZC5nZXRWYXIoIkxPQ0FMRV9HRU5FUkFUSU9OX1dJVEhfQ1JPU1MtTE9DQUxFREVGIiwgVHJ1ZSkgb3IgIiIKKworICAgICAgICBmb3IgcmVnZXhwIGluIGJpbmFyeV9hcmNoZXMuc3BsaXQoIiAiKToKKyAgICAgICAgICAgIHIgPSByZS5jb21waWxlKHJlZ2V4cCkKKworICAgICAgICAgICAgaWYgci5tYXRjaCh0YXJnZXRfYXJjaCk6CisgICAgICAgICAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKCJERVBFTkRTIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiB1c2VfY3Jvc3NfbG9jYWxlZGVmID09ICIxIiA6CisgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSAiJXMgY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9ICIlcyBxZW11LW5hdGl2ZSIgJSBkZXBlbmRzCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkRFUEVORFMiLCBkZXBlbmRzKQorICAgICAgICAgICAgICAgIGQuc2V0VmFyKCJHTElCQ19JTlRFUk5BTF9VU0VfQklOQVJZX0xPQ0FMRSIsICJjb21waWxlIikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgIyB0cnkgdG8gZml4IGRpc2FibGUgY2hhcnNldHMvbG9jYWxlcy9sb2NhbGUtY29kZSBjb21waWxlIGZhaWwKKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY2hhcnNldHMnLCBUcnVlLCBGYWxzZSwgZCkgYW5kIFwKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGVzJywgVHJ1ZSwgRmFsc2UsIGQpIGFuZCBcCisgICAgICAgICAgICBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbG9jYWxlLWNvZGUnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX05PX0dDT05WJywgJzAnKQorICAgIGVsc2U6CisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFX05PX0dDT05WJywgJzEnKQorfQorCitPVkVSUklERVNfYXBwZW5kID0gIjoke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICBpZiBbIC1lICR7U30vZWxmL2xkZC5iYXNoLmluIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWUgInMjQEJBU0hAIy9iaW4vc2gjIiAtaSAke1N9L2VsZi9sZGQuYmFzaC5pbgorICAgICAgICBmaQorfQorCisKKworIyBpbmRlbnRhdGlvbiByZW1vdmVkIG9uIHB1cnBvc2UKK2xvY2FsZV9iYXNlX3Bvc3RpbnN0KCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwlleGl0IDEKK2ZpCisKK3JtIC1yZiAke1RNUF9MT0NBTEV9Citta2RpciAtcCAke1RNUF9MT0NBTEV9CitpZiBbIC1mICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSBdOyB0aGVuCisgICAgICAgIGNwICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSAke1RNUF9MT0NBTEV9LworZmkKK2xvY2FsZWRlZiAtLWlucHV0ZmlsZT0ke2RhdGFkaXJ9L2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgLS1wcmVmaXg9L3RtcC9sb2NhbGUgJXMKK21rZGlyIC1wICR7bG9jYWxlZGlyfS8KK212ICR7VE1QX0xPQ0FMRX0vbG9jYWxlLWFyY2hpdmUgJHtsb2NhbGVkaXJ9Lworcm0gLXJmICR7VE1QX0xPQ0FMRX0KK30KKworIyBpbmRlbnRhdGlvbiByZW1vdmVkIG9uIHB1cnBvc2UKK2xvY2FsZV9iYXNlX3Bvc3RybSgpIHsKKyMhL2Jpbi9zaAorCitybSAtcmYgJHtUTVBfTE9DQUxFfQorbWtkaXIgLXAgJHtUTVBfTE9DQUxFfQoraWYgWyAtZiAke2xvY2FsZWRpcn0vbG9jYWxlLWFyY2hpdmUgXTsgdGhlbgorCWNwICR7bG9jYWxlZGlyfS9sb2NhbGUtYXJjaGl2ZSAke1RNUF9MT0NBTEV9LworZmkKK2xvY2FsZWRlZiAtLWRlbGV0ZS1mcm9tLWFyY2hpdmUgLS1pbnB1dGZpbGU9JHtkYXRhZGlyfS9sb2NhbGVzLyVzIC0tY2hhcm1hcD0lcyAtLXByZWZpeD0vdG1wL2xvY2FsZSAlcworbXYgJHtUTVBfTE9DQUxFfS9sb2NhbGUtYXJjaGl2ZSAke2xvY2FsZWRpcn0vCitybSAtcmYgJHtUTVBfTE9DQUxFfQorfQorCisKK1RNUF9MT0NBTEU9Ii90bXAvbG9jYWxlJHtsb2NhbGVkaXJ9IgorTE9DQUxFVFJFRVNSQyA/PSAiJHtQS0dEfSIKKworZG9fcHJlcF9sb2NhbGVfdHJlZSgpIHsKKwl0cmVlZGlyPSR7V09SS0RJUn0vbG9jYWxlLXRyZWUKKwlybSAtcmYgJHRyZWVkaXIKKwlta2RpciAtcCAkdHJlZWRpci8ke2Jhc2VfYmluZGlyfSAkdHJlZWRpci8ke2Jhc2VfbGliZGlyfSAkdHJlZWRpci8ke2RhdGFkaXJ9ICR0cmVlZGlyLyR7bG9jYWxlZGlyfQorCXRhciAtY2YgLSAtQyAke0xPQ0FMRVRSRUVTUkN9JHtkYXRhZGlyfSAtcCBpMThuIHwgdGFyIC14ZiAtIC1DICR0cmVlZGlyLyR7ZGF0YWRpcn0KKwkjIHVuemlwIHRvIGF2b2lkIHBhcnNpbmcgZXJyb3JzCisJZm9yIGkgaW4gJHRyZWVkaXIvJHtkYXRhZGlyfS9pMThuL2NoYXJtYXBzLypnejsgZG8gCisJCWd1bnppcCAkaQorCWRvbmUKKwl0YXIgLWNmIC0gLUMgJHtMT0NBTEVUUkVFU1JDfSR7YmFzZV9saWJkaXJ9IC1wIC4gfCB0YXIgLXhmIC0gLUMgJHRyZWVkaXIvJHtiYXNlX2xpYmRpcn0KKwlpZiBbIC1mICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vbGliL2xpYmdjY19zLiogXTsgdGhlbgorCQl0YXIgLWNmIC0gLUMgJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyR7cHJlZml4X25hdGl2ZX0vJHtiYXNlX2xpYmRpcn0gLXAgbGliZ2NjX3MuKiB8IHRhciAteGYgLSAtQyAkdHJlZWRpci8ke2Jhc2VfbGliZGlyfQorCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7TE9DQUxFVFJFRVNSQ30ke2JpbmRpcn0vbG9jYWxlZGVmICR0cmVlZGlyLyR7YmFzZV9iaW5kaXJ9Cit9CisKK2RvX2NvbGxlY3RfYmluc19mcm9tX2xvY2FsZV90cmVlKCkgeworCXRyZWVkaXI9JHtXT1JLRElSfS9sb2NhbGUtdHJlZQorCisJcGFyZW50PSQoZGlybmFtZSAke2xvY2FsZWRpcn0pCisJbWtkaXIgLXAgJHtQS0dEfS8kcGFyZW50CisJdGFyIC1jZiAtIC1DICR0cmVlZGlyLyRwYXJlbnQgLXAgJChiYXNlbmFtZSAke2xvY2FsZWRpcn0pIHwgdGFyIC14ZiAtIC1DICR7UEtHRH0kcGFyZW50Cit9CisKK2luaGVyaXQgcWVtdQorCitweXRob24gcGFja2FnZV9kb19zcGxpdF9nY29udnMgKCkgeworICAgIGltcG9ydCByZQorICAgIGlmIChkLmdldFZhcignUEFDS0FHRV9OT19HQ09OVicsIFRydWUpID09ICcxJyk6CisgICAgICAgIGJiLm5vdGUoInBhY2thZ2UgcmVxdWVzdGVkIG5vdCBzcGxpdHRpbmcgZ2NvbnZzIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSk6CisgICAgICAgIHJldHVybgorCisgICAgbWxwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKSBvciAiIgorCisgICAgYnBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgbGliZGlyID0gZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpCisgICAgaWYgbm90IGxpYmRpcjoKKyAgICAgICAgYmIuZXJyb3IoImxpYmRpciBub3QgZGVmaW5lZCIpCisgICAgICAgIHJldHVybgorICAgIGRhdGFkaXIgPSBkLmdldFZhcignZGF0YWRpcicsIFRydWUpCisgICAgaWYgbm90IGRhdGFkaXI6CisgICAgICAgIGJiLmVycm9yKCJkYXRhZGlyIG5vdCBkZWZpbmVkIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBnY29udl9saWJkaXIgPSBiYXNlX3BhdGhfam9pbihsaWJkaXIsICJnY29udiIpCisgICAgY2hhcm1hcF9kaXIgPSBiYXNlX3BhdGhfam9pbihkYXRhZGlyLCAiaTE4biIsICJjaGFybWFwcyIpCisgICAgbG9jYWxlc19kaXIgPSBiYXNlX3BhdGhfam9pbihkYXRhZGlyLCAiaTE4biIsICJsb2NhbGVzIikKKyAgICBiaW5hcnlfbG9jYWxlc19kaXIgPSBkLmdldFZhcignbG9jYWxlZGlyJywgVHJ1ZSkKKworICAgIGRlZiBjYWxjX2djb252X2RlcHMoZm4sIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGdyb3VwKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGYgPSBvcGVuKGZuLCAicmIiKQorICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKKyAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBtID0gY19yZS5tYXRjaChsKSBvciBpX3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRwID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzJXMtZ2NvbnYtJXMnICUgKG1scHJlZml4LCBicG4sIG0uZ3JvdXAoMSkpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdjb252X2xpYmRpciwgZmlsZV9yZWdleD0nXiguKilcLnNvJCcsIG91dHB1dF9wYXR0ZXJuPWJwbisnLWdjb252LSVzJywgXAorICAgICAgICBkZXNjcmlwdGlvbj0nZ2NvbnYgbW9kdWxlIGZvciBjaGFyYWN0ZXIgc2V0ICVzJywgaG9vaz1jYWxjX2djb252X2RlcHMsIFwKKyAgICAgICAgZXh0cmFfZGVwZW5kcz1icG4rJy1nY29udicpCisKKyAgICBkZWYgY2FsY19jaGFybWFwX2RlcHMoZm4sIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGdyb3VwKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGYgPSBvcGVuKGZuLCAicmIiKQorICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKKyAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBtID0gY19yZS5tYXRjaChsKSBvciBpX3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRwID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUoJyVzJXMtY2hhcm1hcC0lcycgJSAobWxwcmVmaXgsIGJwbiwgbS5ncm91cCgxKSkpCisgICAgICAgICAgICAgICAgaWYgbm90IGRwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGRwKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgaWYgZGVwcyAhPSBbXToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2csICIgIi5qb2luKGRlcHMpKQorICAgICAgICBpZiBicG4gIT0gJ2dsaWJjJzoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJXMnICUgcGtnLCBwa2cucmVwbGFjZShicG4sICdnbGliYycpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgY2hhcm1hcF9kaXIsIGZpbGVfcmVnZXg9J14oLiopXC5neiQnLCBvdXRwdXRfcGF0dGVybj1icG4rJy1jaGFybWFwLSVzJywgXAorICAgICAgICBkZXNjcmlwdGlvbj0nY2hhcmFjdGVyIG1hcCBmb3IgJXMgZW5jb2RpbmcnLCBob29rPWNhbGNfY2hhcm1hcF9kZXBzLCBleHRyYV9kZXBlbmRzPScnKQorCisgICAgZGVmIGNhbGNfbG9jYWxlX2RlcHMoZm4sIHBrZywgZmlsZV9yZWdleCwgb3V0cHV0X3BhdHRlcm4sIGdyb3VwKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGYgPSBvcGVuKGZuLCAicmIiKQorICAgICAgICBjX3JlID0gcmUuY29tcGlsZSgnXmNvcHkgIiguKikiJykKKyAgICAgICAgaV9yZSA9IHJlLmNvbXBpbGUoJ15pbmNsdWRlICIoXHcrKSIuKicpCisgICAgICAgIGZvciBsIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICBtID0gY19yZS5tYXRjaChsKSBvciBpX3JlLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRwID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobWxwcmVmaXgrYnBuKyctbG9jYWxlZGF0YS0lcycgJSBtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkcCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGlmIGRlcHMgIT0gW106CisgICAgICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnLCAiICIuam9pbihkZXBzKSkKKyAgICAgICAgaWYgYnBuICE9ICdnbGliYyc6CisgICAgICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZywgcGtnLnJlcGxhY2UoYnBuLCAnZ2xpYmMnKSkKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxvY2FsZXNfZGlyLCBmaWxlX3JlZ2V4PScoLiopJywgb3V0cHV0X3BhdHRlcm49YnBuKyctbG9jYWxlZGF0YS0lcycsIFwKKyAgICAgICAgZGVzY3JpcHRpb249J2xvY2FsZSBkZWZpbml0aW9uIGZvciAlcycsIGhvb2s9Y2FsY19sb2NhbGVfZGVwcywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkLnNldFZhcignUEFDS0FHRVMnLCBkLmdldFZhcignUEFDS0FHRVMnLCBGYWxzZSkgKyAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyBicG4gKyAnLWdjb252JykKKworICAgIHVzZV9iaW4gPSBkLmdldFZhcigiR0xJQkNfSU5URVJOQUxfVVNFX0JJTkFSWV9MT0NBTEUiLCBUcnVlKQorCisgICAgZG90X3JlID0gcmUuY29tcGlsZSgiKC4qKVwuKC4qKSIpCisKKyAgICAjIFJlYWQgaW4gc3VwcG9ydGVkIGxvY2FsZXMgYW5kIGFzc29jaWF0ZWQgZW5jb2RpbmdzCisgICAgc3VwcG9ydGVkID0ge30KKyAgICB3aXRoIG9wZW4oYmFzZV9wYXRoX2pvaW4oZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwgIlNVUFBPUlRFRCIpKSBhcyBmOgorICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2FsZSwgY2hhcnNldCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHN1cHBvcnRlZFtsb2NhbGVdID0gY2hhcnNldAorCisgICAgIyBHTElCQ19HRU5FUkFURV9MT0NBTEVTIHZhciBzcGVjaWZpZXMgd2hpY2ggbG9jYWxlcyB0byBiZSBnZW5lcmF0ZWQuIGVtcHR5IG9yICJhbGwiIG1lYW5zIGFsbCBsb2NhbGVzCisgICAgdG9fZ2VuZXJhdGUgPSBkLmdldFZhcignR0xJQkNfR0VORVJBVEVfTE9DQUxFUycsIFRydWUpCisgICAgaWYgbm90IHRvX2dlbmVyYXRlIG9yIHRvX2dlbmVyYXRlID09ICdhbGwnOgorICAgICAgICB0b19nZW5lcmF0ZSA9IHN1cHBvcnRlZC5rZXlzKCkKKyAgICBlbHNlOgorICAgICAgICB0b19nZW5lcmF0ZSA9IHRvX2dlbmVyYXRlLnNwbGl0KCkKKyAgICAgICAgZm9yIGxvY2FsZSBpbiB0b19nZW5lcmF0ZToKKyAgICAgICAgICAgIGlmIGxvY2FsZSBub3QgaW4gc3VwcG9ydGVkOgorICAgICAgICAgICAgICAgIGlmICcuJyBpbiBsb2NhbGU6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSBsb2NhbGUuc3BsaXQoJy4nKVsxXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQgPSAnVVRGLTgnCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlVuc3VwcG9ydGVkIGxvY2FsZSAnJXMnLCBhc3N1bWluZyBlbmNvZGluZyAnJXMnIiAlIChsb2NhbGUsIGNoYXJzZXQpKQorICAgICAgICAgICAgICAgIHN1cHBvcnRlZFtsb2NhbGVdID0gY2hhcnNldAorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfc291cmNlKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJXMnICUgcGtnbmFtZSwgJ2xvY2FsZWRlZiAlcy1sb2NhbGVkYXRhLSVzICVzLWNoYXJtYXAtJXMnICUgXAorICAgICAgICAobWxwcmVmaXgrYnBuLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShsb2NhbGUpLCBtbHByZWZpeCticG4sIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKGVuY29kaW5nKSkpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnbmFtZSwgZC5nZXRWYXIoJ2xvY2FsZV9iYXNlX3Bvc3RpbnN0JywgVHJ1ZSkgXAorICAgICAgICAlIChsb2NhbGUsIGVuY29kaW5nLCBsb2NhbGUpKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2duYW1lLCBkLmdldFZhcignbG9jYWxlX2Jhc2VfcG9zdHJtJywgVHJ1ZSkgJSBcCisgICAgICAgIChsb2NhbGUsIGVuY29kaW5nLCBsb2NhbGUpKQorCisgICAgZGVmIG91dHB1dF9sb2NhbGVfYmluYXJ5X3JkZXBlbmRzKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICBtID0gcmUubWF0Y2goIiguKilcLiguKikiLCBuYW1lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbGliY19uYW1lID0gIiVzLiVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpLmxvd2VyKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaWJjX25hbWUgPSBuYW1lCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18lcycgJSBwa2duYW1lLCBsZWdpdGltaXplX3BhY2thZ2VfbmFtZSgnJXMtYmluYXJ5LWxvY2FsZWRhdGEtJXMnIFwKKyAgICAgICAgICAgICUgKG1scHJlZml4K2JwbiwgbGliY19uYW1lKSkpCisKKyAgICBjb21tYW5kcyA9IHt9CisKKyAgICBkZWYgb3V0cHV0X2xvY2FsZV9iaW5hcnkobmFtZSwgcGtnbmFtZSwgbG9jYWxlLCBlbmNvZGluZyk6CisgICAgICAgIHRyZWVkaXIgPSBiYXNlX3BhdGhfam9pbihkLmdldFZhcigiV09SS0RJUiIsIFRydWUpLCAibG9jYWxlLXRyZWUiKQorICAgICAgICBsZGxpYmRpciA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsIGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpKQorICAgICAgICBwYXRoID0gZC5nZXRWYXIoIlBBVEgiLCBUcnVlKQorICAgICAgICBpMThucGF0aCA9IGJhc2VfcGF0aF9qb2luKHRyZWVkaXIsIGRhdGFkaXIsICJpMThuIikKKyAgICAgICAgZ2NvbnZwYXRoID0gYmFzZV9wYXRoX2pvaW4odHJlZWRpciwgImljb252ZGF0YSIpCisgICAgICAgIG91dHB1dHBhdGggPSBiYXNlX3BhdGhfam9pbih0cmVlZGlyLCBiaW5hcnlfbG9jYWxlc19kaXIpCisKKyAgICAgICAgdXNlX2Nyb3NzX2xvY2FsZWRlZiA9IGQuZ2V0VmFyKCJMT0NBTEVfR0VORVJBVElPTl9XSVRIX0NST1NTLUxPQ0FMRURFRiIsIFRydWUpIG9yICIwIgorICAgICAgICBpZiB1c2VfY3Jvc3NfbG9jYWxlZGVmID09ICIxIjoKKyAgICAgICAgICAgIHRhcmdldF9hcmNoID0gZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICAgICAgICAgIGxvY2FsZV9hcmNoX29wdGlvbnMgPSB7IFwKKyAgICAgICAgICAgICAgICAiYXJtIjogICAgICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJhcm1lYiI6ICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgImFhcmNoNjQiOiAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAiYWFyY2g2NF9iZSI6ICIgLS11aW50MzItYWxpZ249NCAtLWJpZy1lbmRpYW4gIiwgICAgXAorICAgICAgICAgICAgICAgICJzaDQiOiAgICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgInBvd2VycGMiOiAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAicG93ZXJwYzY0IjogIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgXAorICAgICAgICAgICAgICAgICJtaXBzIjogICAgIiAtLXVpbnQzMi1hbGlnbj00IC0tYmlnLWVuZGlhbiAiLCAgICBcCisgICAgICAgICAgICAgICAgIm1pcHM2NCI6ICAiIC0tdWludDMyLWFsaWduPTQgLS1iaWctZW5kaWFuICIsICAgIFwKKyAgICAgICAgICAgICAgICAibWlwc2VsIjogICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJtaXBzNjRlbCI6IiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiLCBcCisgICAgICAgICAgICAgICAgImk1ODYiOiAgICAiIC0tdWludDMyLWFsaWduPTQgLS1saXR0bGUtZW5kaWFuICIsIFwKKyAgICAgICAgICAgICAgICAiaTY4NiI6ICAgICIgLS11aW50MzItYWxpZ249NCAtLWxpdHRsZS1lbmRpYW4gIiwgXAorICAgICAgICAgICAgICAgICJ4ODZfNjQiOiAgIiAtLXVpbnQzMi1hbGlnbj00IC0tbGl0dGxlLWVuZGlhbiAiICB9CisKKyAgICAgICAgICAgIGlmIHRhcmdldF9hcmNoIGluIGxvY2FsZV9hcmNoX29wdGlvbnM6CisgICAgICAgICAgICAgICAgbG9jYWxlZGVmX29wdHMgPSBsb2NhbGVfYXJjaF9vcHRpb25zW3RhcmdldF9hcmNoXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5lcnJvcigibG9jYWxlX2FyY2hfb3B0aW9ucyBub3QgZm91bmQgZm9yIHRhcmdldF9hcmNoPSIgKyB0YXJnZXRfYXJjaCkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmtub3duIGFyY2g6IiArIHRhcmdldF9hcmNoICsgIiBmb3IgbG9jYWxlX2FyY2hfb3B0aW9ucyIpCisKKyAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzICs9ICIgLS1mb3JjZSAtLW9sZC1zdHlsZSAtLW5vLWFyY2hpdmUgLS1wcmVmaXg9JXMgXAorICAgICAgICAgICAgICAgIC0taW5wdXRmaWxlPSVzLyVzL2kxOG4vbG9jYWxlcy8lcyAtLWNoYXJtYXA9JXMgJXMvJXMiIFwKKyAgICAgICAgICAgICAgICAlICh0cmVlZGlyLCB0cmVlZGlyLCBkYXRhZGlyLCBsb2NhbGUsIGVuY29kaW5nLCBvdXRwdXRwYXRoLCBuYW1lKQorCisgICAgICAgICAgICBjbWQgPSAiUEFUSD1cIiVzXCIgSTE4TlBBVEg9XCIlc1wiIEdDT05WX1BBVEg9XCIlc1wiIGNyb3NzLWxvY2FsZWRlZiAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHBhdGgsIGkxOG5wYXRoLCBnY29udnBhdGgsIGxvY2FsZWRlZl9vcHRzKQorICAgICAgICBlbHNlOiAjIGVhcmxpZXIgc2xvd2VyIHFlbXUgd2F5IAorICAgICAgICAgICAgcWVtdSA9IHFlbXVfdGFyZ2V0X2JpbmFyeShkKSAKKyAgICAgICAgICAgIGxvY2FsZWRlZl9vcHRzID0gIi0tZm9yY2UgLS1vbGQtc3R5bGUgLS1uby1hcmNoaXZlIC0tcHJlZml4PSVzIFwKKyAgICAgICAgICAgICAgICAtLWlucHV0ZmlsZT0lcy9pMThuL2xvY2FsZXMvJXMgLS1jaGFybWFwPSVzICVzIiBcCisgICAgICAgICAgICAgICAgJSAodHJlZWRpciwgZGF0YWRpciwgbG9jYWxlLCBlbmNvZGluZywgbmFtZSkKKworICAgICAgICAgICAgcWVtdV9vcHRpb25zID0gZC5nZXRWYXIoJ1FFTVVfT1BUSU9OUycsIFRydWUpCisKKyAgICAgICAgICAgIGNtZCA9ICJQU0VVRE9fUkVMT0FERUQ9WUVTIFBBVEg9XCIlc1wiIEkxOE5QQVRIPVwiJXNcIiAlcyAtTCAlcyBcCisgICAgICAgICAgICAgICAgLUUgTERfTElCUkFSWV9QQVRIPSVzICVzICVzL2Jpbi9sb2NhbGVkZWYgJXMiICUgXAorICAgICAgICAgICAgICAgIChwYXRoLCBpMThucGF0aCwgcWVtdSwgdHJlZWRpciwgbGRsaWJkaXIsIHFlbXVfb3B0aW9ucywgdHJlZWRpciwgbG9jYWxlZGVmX29wdHMpCisKKyAgICAgICAgY29tbWFuZHNbIiVzLyVzIiAlIChvdXRwdXRwYXRoLCBuYW1lKV0gPSBjbWQKKworICAgICAgICBiYi5ub3RlKCJnZW5lcmF0aW5nIGxvY2FsZSAlcyAoJXMpIiAlIChsb2NhbGUsIGVuY29kaW5nKSkKKworICAgIGRlZiBvdXRwdXRfbG9jYWxlKG5hbWUsIGxvY2FsZSwgZW5jb2RpbmcpOgorICAgICAgICBwa2duYW1lID0gZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2xvY2FsZS1iYXNlLScgKyBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShuYW1lKQorICAgICAgICBkLnNldFZhcignQUxMT1dfRU1QVFlfJXMnICUgcGtnbmFtZSwgJzEnKQorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnJXMgJXMnICUgKHBrZ25hbWUsIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpKSkKKyAgICAgICAgcnByb3ZpZGVzID0gJyAlc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobmFtZSkpCisgICAgICAgIG0gPSByZS5tYXRjaCgiKC4qKV8oLiopIiwgbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJwcm92aWRlcyArPSAnICVzdmlydHVhbC1sb2NhbGUtJXMnICUgKG1scHJlZml4LCBtLmdyb3VwKDEpKQorICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXyVzJyAlIHBrZ25hbWUsIHJwcm92aWRlcykKKworICAgICAgICBpZiB1c2VfYmluID09ICJjb21waWxlIjoKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGVfYmluYXJ5X3JkZXBlbmRzKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpCisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX2JpbmFyeShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorICAgICAgICBlbGlmIHVzZV9iaW4gPT0gInByZWNvbXBpbGVkIjoKKyAgICAgICAgICAgIG91dHB1dF9sb2NhbGVfYmluYXJ5X3JkZXBlbmRzKG5hbWUsIHBrZ25hbWUsIGxvY2FsZSwgZW5jb2RpbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlX3NvdXJjZShuYW1lLCBwa2duYW1lLCBsb2NhbGUsIGVuY29kaW5nKQorCisgICAgaWYgdXNlX2JpbiA9PSAiY29tcGlsZSI6CisgICAgICAgIGJiLm5vdGUoInByZXBhcmluZyB0cmVlIGZvciBiaW5hcnkgbG9jYWxlIGdlbmVyYXRpb24iKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX3ByZXBfbG9jYWxlX3RyZWUiLCBkKQorCisgICAgdXRmOF9vbmx5ID0gaW50KGQuZ2V0VmFyKCdMT0NBTEVfVVRGOF9PTkxZJywgVHJ1ZSkgb3IgMCkKKyAgICBlbmNvZGluZ3MgPSB7fQorICAgIGZvciBsb2NhbGUgaW4gdG9fZ2VuZXJhdGU6CisgICAgICAgIGNoYXJzZXQgPSBzdXBwb3J0ZWRbbG9jYWxlXQorICAgICAgICBpZiB1dGY4X29ubHkgYW5kIGNoYXJzZXQgIT0gJ1VURi04JzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbSA9IGRvdF9yZS5tYXRjaChsb2NhbGUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBiYXNlID0gbS5ncm91cCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmFzZSA9IGxvY2FsZQorCisgICAgICAgICMgUHJlY29tcGlsZWQgbG9jYWxlcyBhcmUga2VwdCBhcyBpcywgb2JleWluZyBTVVBQT1JURUQsIHdoaWxlCisgICAgICAgICMgb3RoZXJzIGFyZSBhZGp1c3RlZCwgZW5zdXJpbmcgdGhhdCB0aGUgbm9uLXN1ZmZpeGVkIGxvY2FsZXMKKyAgICAgICAgIyBhcmUgdXRmLTgsIHdoaWxlIHRoZSBzdWZmaXhlZCBhcmUgbm90LgorICAgICAgICBpZiB1c2VfYmluID09ICJwcmVjb21waWxlZCI6CisgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKGxvY2FsZSwgYmFzZSwgY2hhcnNldCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGNoYXJzZXQgPT0gJ1VURi04JzoKKyAgICAgICAgICAgICAgICBvdXRwdXRfbG9jYWxlKGJhc2UsIGJhc2UsIGNoYXJzZXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHB1dF9sb2NhbGUoJyVzLiVzJyAlIChiYXNlLCBjaGFyc2V0KSwgYmFzZSwgY2hhcnNldCkKKworICAgIGlmIHVzZV9iaW4gPT0gImNvbXBpbGUiOgorICAgICAgICBtYWtlZmlsZSA9IGJhc2VfcGF0aF9qb2luKGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSksICJsb2NhbGUtdHJlZSIsICJNYWtlZmlsZSIpCisgICAgICAgIG0gPSBvcGVuKG1ha2VmaWxlLCAidyIpCisgICAgICAgIG0ud3JpdGUoImFsbDogJXNcblxuIiAlICIgIi5qb2luKGNvbW1hbmRzLmtleXMoKSkpCisgICAgICAgIGZvciBjbWQgaW4gY29tbWFuZHM6CisgICAgICAgICAgICBtLndyaXRlKGNtZCArICI6XG4iKQorICAgICAgICAgICAgbS53cml0ZSgiXHQiICsgY29tbWFuZHNbY21kXSArICJcblxuIikKKyAgICAgICAgbS5jbG9zZSgpCisgICAgICAgIGQuc2V0VmFyKCJFWFRSQV9PRU1BS0UiLCAiLUMgJXMgJHtQQVJBTExFTF9NQUtFfSIgJSAob3MucGF0aC5kaXJuYW1lKG1ha2VmaWxlKSkpCisgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZyBiaW5hcnkgbG9jYWxlIGdlbmVyYXRpb24gbWFrZWZpbGUiKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoIm9lX3J1bm1ha2UiLCBkKQorICAgICAgICBiYi5ub3RlKCJjb2xsZWN0aW5nIGJpbmFyeSBsb2NhbGVzIGZyb20gbG9jYWxlIHRyZWUiKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImRvX2NvbGxlY3RfYmluc19mcm9tX2xvY2FsZV90cmVlIiwgZCkKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYmluYXJ5X2xvY2FsZXNfZGlyLCBmaWxlX3JlZ2V4PScoLiopJywgXAorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49YnBuKyctYmluYXJ5LWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0nYmluYXJ5IGxvY2FsZSBkZWZpbml0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2RpcnM9VHJ1ZSkKKyAgICBlbGlmIHVzZV9iaW4gPT0gInByZWNvbXBpbGVkIjoKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYmluYXJ5X2xvY2FsZXNfZGlyLCBmaWxlX3JlZ2V4PScoLiopJywgXAorICAgICAgICAgICAgb3V0cHV0X3BhdHRlcm49YnBuKyctYmluYXJ5LWxvY2FsZWRhdGEtJXMnLCBcCisgICAgICAgICAgICBkZXNjcmlwdGlvbj0nYmluYXJ5IGxvY2FsZSBkZWZpbml0aW9uIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2RpcnM9VHJ1ZSkKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJnZW5lcmF0aW9uIG9mIGJpbmFyeSBsb2NhbGVzIGRpc2FibGVkLiB0aGlzIG1heSBicmVhayBpMThuISIpCisKK30KKworIyBXZSB3YW50IHRvIGRvIHRoaXMgaW5kaXJlY3Rpb24gc28gdGhhdCB3ZSBjYW4gc2FmZWx5ICdyZXR1cm4nCisjIGZyb20gdGhlIGNhbGxlZCBmdW5jdGlvbiBldmVuIHRob3VnaCB3ZSdyZSBwcmVwZW5kaW5nCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdwYWNrYWdlX2RvX3NwbGl0X2djb252cycsIGQpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saWNlbnNlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTZhMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbGljZW5zZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDgzIEBACisjIFBvcHVsYXRlcyBMSUNFTlNFX0RJUkVDVE9SWSBhcyBzZXQgaW4gZGlzdHJvIGNvbmZpZyB3aXRoIHRoZSBsaWNlbnNlIGZpbGVzIGFzIHNldCBieQorIyBMSUNfRklMRVNfQ0hLU1VNLgorIyBUT0RPOgorIyAtIFRoZXJlIGlzIGEgcmVhbCBpc3N1ZSByZXZvbHZpbmcgYXJvdW5kIGxpY2Vuc2UgbmFtaW5nIHN0YW5kYXJkcy4KKworTElDRU5TRV9ESVJFQ1RPUlkgPz89ICIke0RFUExPWV9ESVJ9L2xpY2Vuc2VzIgorTElDU1NUQVRFRElSID0gIiR7V09SS0RJUn0vbGljZW5zZS1kZXN0ZGlyLyIKKworIyBDcmVhdGUgZXh0cmEgcGFja2FnZSB3aXRoIGxpY2Vuc2UgdGV4dHMgYW5kIGFkZCBpdCB0byBSUkVDT01NRU5EU18ke1BOfQorTElDRU5TRV9DUkVBVEVfUEFDS0FHRVt0eXBlXSA9ICJib29sZWFuIgorTElDRU5TRV9DUkVBVEVfUEFDS0FHRSA/Pz0gIjAiCitMSUNFTlNFX1BBQ0tBR0VfU1VGRklYID8/PSAiLWxpYyIKK0xJQ0VOU0VfRklMRVNfRElSRUNUT1JZID8/PSAiJHtkYXRhZGlyfS9saWNlbnNlcy8iCisKK2FkZHRhc2sgcG9wdWxhdGVfbGljIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19idWlsZAorZG9fcG9wdWxhdGVfbGljW2RpcnNdID0gIiR7TElDU1NUQVRFRElSfS8ke1BOfSIKK2RvX3BvcHVsYXRlX2xpY1tjbGVhbmRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKKworcHl0aG9uIHdyaXRlX3BhY2thZ2VfbWFuaWZlc3QoKSB7CisgICAgIyBHZXQgbGlzdCBvZiBpbnN0YWxsZWQgcGFja2FnZXMKKyAgICBsaWNlbnNlX2ltYWdlX2RpciA9IGQuZXhwYW5kKCcke0xJQ0VOU0VfRElSRUNUT1JZfS8ke0lNQUdFX05BTUV9JykKKyAgICBiYi51dGlscy5ta2RpcmhpZXIobGljZW5zZV9pbWFnZV9kaXIpCisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgb3Blbihvcy5wYXRoLmpvaW4obGljZW5zZV9pbWFnZV9kaXIsICdwYWNrYWdlLm1hbmlmZXN0JyksCisgICAgICAgICd3KycpLndyaXRlKGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQpKQorfQorCitweXRob24gbGljZW5zZV9jcmVhdGVfbWFuaWZlc3QoKSB7CisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisKKyAgICBiYWRfbGljZW5zZXMgPSAoZC5nZXRWYXIoIklOQ09NUEFUSUJMRV9MSUNFTlNFIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBiYWRfbGljZW5zZXMgPSBtYXAobGFtYmRhIGw6IGNhbm9uaWNhbF9saWNlbnNlKGQsIGwpLCBiYWRfbGljZW5zZXMpCisgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKworICAgIGJ1aWxkX2ltYWdlc19mcm9tX2ZlZWRzID0gZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkKKyAgICBpZiBidWlsZF9pbWFnZXNfZnJvbV9mZWVkcyA9PSAiMSI6CisgICAgICAgIHJldHVybiAwCisKKyAgICBwa2dfZGljID0ge30KKyAgICBmb3IgcGtnIGluIGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQpLnNwbGl0bGluZXMoKToKKyAgICAgICAgcGtnX2luZm8gPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW50aW1lLXJldmVyc2UnLCBwa2cpCisgICAgICAgIHBrZ19uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5yZWFkbGluayhwa2dfaW5mbykpCisKKyAgICAgICAgcGtnX2RpY1twa2dfbmFtZV0gPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3BrZ2RhdGFmaWxlKHBrZ19pbmZvKQorICAgICAgICBpZiBub3QgIkxJQ0VOU0UiIGluIHBrZ19kaWNbcGtnX25hbWVdLmtleXMoKToKKyAgICAgICAgICAgIHBrZ19saWNfbmFtZSA9ICJMSUNFTlNFXyIgKyBwa2dfbmFtZQorICAgICAgICAgICAgcGtnX2RpY1twa2dfbmFtZV1bIkxJQ0VOU0UiXSA9IHBrZ19kaWNbcGtnX25hbWVdW3BrZ19saWNfbmFtZV0KKworICAgIGxpY2Vuc2VfbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpLCAnbGljZW5zZS5tYW5pZmVzdCcpCisgICAgd2l0aCBvcGVuKGxpY2Vuc2VfbWFuaWZlc3QsICJ3IikgYXMgbGljZW5zZV9maWxlOgorICAgICAgICBmb3IgcGtnIGluIHNvcnRlZChwa2dfZGljKToKKyAgICAgICAgICAgIGlmIGJhZF9saWNlbnNlczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIChwa2dfZGljW3BrZ11bIkxJQ0VOU0UiXSwgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdKSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9lLmxpY2Vuc2UubWFuaWZlc3RfbGljZW5zZXMocGtnX2RpY1twa2ddWyJMSUNFTlNFIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBiYWRfbGljZW5zZXMsIGNhbm9uaWNhbF9saWNlbnNlLCBkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBvZS5saWNlbnNlLkxpY2Vuc2VFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCclczogJXMnICUgKGQuZ2V0VmFyKCdQJywgVHJ1ZSksIGV4YykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSA9IHJlLnN1YignW3wmKCkqXScsICcnLCBwa2dfZGljW3BrZ11bIkxJQ0VOU0UiXSkKKyAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIkxJQ0VOU0VTIl0gPSByZS5zdWIoJyAgKicsICcgJywgcGtnX2RpY1twa2ddWyJMSUNFTlNFUyJdKQorICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXSA9IHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXS5zcGxpdCgpCisKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiUEFDS0FHRSBOQU1FOiAlc1xuIiAlIHBrZykKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiUEFDS0FHRSBWRVJTSU9OOiAlc1xuIiAlIHBrZ19kaWNbcGtnXVsiUFYiXSkKKyAgICAgICAgICAgIGxpY2Vuc2VfZmlsZS53cml0ZSgiUkVDSVBFIE5BTUU6ICVzXG4iICUgcGtnX2RpY1twa2ddWyJQTiJdKQorICAgICAgICAgICAgbGljZW5zZV9maWxlLndyaXRlKCJMSUNFTlNFOiAlc1xuXG4iICUgcGtnX2RpY1twa2ddWyJMSUNFTlNFIl0pCisKKyAgICAgICAgICAgICMgSWYgdGhlIHBhY2thZ2UgZG9lc24ndCBjb250YWluIGFueSBmaWxlLCB0aGF0IGlzLCBpdHMgc2l6ZSBpcyAwLCB0aGUgbGljZW5zZQorICAgICAgICAgICAgIyBpc24ndCByZWxldmFudCBhcyBmYXIgYXMgdGhlIGZpbmFsIGltYWdlIGlzIGNvbmNlcm5lZC4gU28gZG9pbmcgbGljZW5zZSBjaGVjaworICAgICAgICAgICAgIyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSwgc2tpcCBpdC4KKyAgICAgICAgICAgIGlmIHBrZ19kaWNbcGtnXVsiUEtHU0laRV8lcyIgJSBwa2ddID09ICIwIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmb3IgbGljIGluIHBrZ19kaWNbcGtnXVsiTElDRU5TRVMiXToKKyAgICAgICAgICAgICAgICBsaWNfZmlsZSA9IG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9ESVJFQ1RPUlknLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dfZGljW3BrZ11bIlBOIl0sICJnZW5lcmljXyVzIiAlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLnN1YignXCsnLCAnJywgbGljKSkKKyAgICAgICAgICAgICAgICAjIGFkZCBleHBsaWNpdHkgYXZvaWQgb2YgQ0xPU0VEIGxpY2Vuc2UgYmVjYXVzZSBpc24ndCBnZW5lcmljCisgICAgICAgICAgICAgICAgaWYgbGljID09ICJDTE9TRUQiOgorICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGljX2ZpbGUpOgorICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRoZSBsaWNlbnNlIGxpc3RlZCAlcyB3YXMgbm90IGluIHRoZSAiXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGljZW5zZXMgY29sbGVjdGVkIGZvciByZWNpcGUgJXMiIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxpYywgcGtnX2RpY1twa2ddWyJQTiJdKSkKKworICAgICMgVHdvIG9wdGlvbnMgaGVyZToKKyAgICAjIC0gSnVzdCBjb3B5IHRoZSBtYW5pZmVzdAorICAgICMgLSBDb3B5IHRoZSBtYW5pZmVzdCBhbmQgdGhlIGxpY2Vuc2UgZGlyZWN0b3JpZXMKKyAgICAjIFdpdGggYm90aCBvcHRpb25zIHNldCB3ZSBzZWUgYSAuNSBNIGluY3JlYXNlIGluIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgIGNvcHlfbGljX21hbmlmZXN0ID0gZC5nZXRWYXIoJ0NPUFlfTElDX01BTklGRVNUJywgVHJ1ZSkKKyAgICBjb3B5X2xpY19kaXJzID0gZC5nZXRWYXIoJ0NPUFlfTElDX0RJUlMnLCBUcnVlKQorICAgIGlmIGNvcHlfbGljX21hbmlmZXN0ID09ICIxIjoKKyAgICAgICAgcm9vdGZzX2xpY2Vuc2VfZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCAnVHJ1ZScpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzcicsICdzaGFyZScsICdjb21tb24tbGljZW5zZXMnKQorICAgICAgICBvcy5tYWtlZGlycyhyb290ZnNfbGljZW5zZV9kaXIpCisgICAgICAgIHJvb3Rmc19saWNlbnNlX21hbmlmZXN0ID0gb3MucGF0aC5qb2luKHJvb3Rmc19saWNlbnNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWNlbnNlLm1hbmlmZXN0JykKKyAgICAgICAgb3MubGluayhsaWNlbnNlX21hbmlmZXN0LCByb290ZnNfbGljZW5zZV9tYW5pZmVzdCkKKworICAgICAgICBpZiBjb3B5X2xpY19kaXJzID09ICIxIjoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gc29ydGVkKHBrZ19kaWMpOgorICAgICAgICAgICAgICAgIHBrZ19yb290ZnNfbGljZW5zZV9kaXIgPSBvcy5wYXRoLmpvaW4ocm9vdGZzX2xpY2Vuc2VfZGlyLCBwa2cpCisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMocGtnX3Jvb3Rmc19saWNlbnNlX2RpcikKKyAgICAgICAgICAgICAgICBwa2dfbGljZW5zZV9kaXIgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0xJQ0VOU0VfRElSRUNUT1JZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ19kaWNbcGtnXVsiUE4iXSkgCisgICAgICAgICAgICAgICAgbGljZW5zZXMgPSBvcy5saXN0ZGlyKHBrZ19saWNlbnNlX2RpcikKKyAgICAgICAgICAgICAgICBmb3IgbGljIGluIGxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICByb290ZnNfbGljZW5zZSA9IG9zLnBhdGguam9pbihyb290ZnNfbGljZW5zZV9kaXIsIGxpYykKKyAgICAgICAgICAgICAgICAgICAgcGtnX2xpY2Vuc2UgPSBvcy5wYXRoLmpvaW4ocGtnX2xpY2Vuc2VfZGlyLCBsaWMpCisgICAgICAgICAgICAgICAgICAgIHBrZ19yb290ZnNfbGljZW5zZSA9IG9zLnBhdGguam9pbihwa2dfcm9vdGZzX2xpY2Vuc2VfZGlyLCBsaWMpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goIl5nZW5lcmljXy4qJCIsIGxpYyk6CisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljX2xpYyA9IHJlLnNlYXJjaCgiXmdlbmVyaWNfKC4qKSQiLCBsaWMpLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvZS5saWNlbnNlLmxpY2Vuc2Vfb2soY2Fub25pY2FsX2xpY2Vuc2UoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljX2xpYyksIGJhZF9saWNlbnNlcykgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJvb3Rmc19saWNlbnNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKHBrZ19saWNlbnNlLCByb290ZnNfbGljZW5zZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4oJy4uJywgbGljKSwgcGtnX3Jvb3Rmc19saWNlbnNlKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGljKSwgYmFkX2xpY2Vuc2VzKSA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKHBrZ19saWNlbnNlLCBwa2dfcm9vdGZzX2xpY2Vuc2UpCit9CisKK3B5dGhvbiBkb19wb3B1bGF0ZV9saWMoKSB7CisgICAgIiIiCisgICAgUG9wdWxhdGUgTElDRU5TRV9ESVJFQ1RPUlkgd2l0aCBsaWNlbnNlcy4KKyAgICAiIiIKKyAgICBsaWNfZmlsZXNfcGF0aHMgPSBmaW5kX2xpY2Vuc2VfZmlsZXMoZCkKKworICAgICMgVGhlIGJhc2UgZGlyZWN0b3J5IHdlIHdyYW5nbGUgbGljZW5zZXMgdG8KKyAgICBkZXN0ZGlyID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdMSUNTU1RBVEVESVInLCBUcnVlKSwgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgY29weV9saWNlbnNlX2ZpbGVzKGxpY19maWxlc19wYXRocywgZGVzdGRpcikKK30KKworIyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY29weSB0aGVtIGluIGRvX2luc3RhbGxfYXBwZW5kLCBidXQgZmluZF9saWNlbnNlX2ZpbGVzYSBpcyBweXRob24KK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5X3ByZXBlbmQgKCkgeworICAgIGVuYWJsZWQgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdMSUNFTlNFX0NSRUFURV9QQUNLQUdFJywgZCkKKyAgICBpZiBkLmdldFZhcignQ0xBU1NPVkVSUklERScsIFRydWUpID09ICdjbGFzcy10YXJnZXQnIGFuZCBlbmFibGVkOgorICAgICAgICBsaWNfZmlsZXNfcGF0aHMgPSBmaW5kX2xpY2Vuc2VfZmlsZXMoZCkKKworICAgICAgICAjIExJQ0VOU0VfRklMRVNfRElSRUNUT1JZIHN0YXJ0cyB3aXRoICcvJyBzbyBvcy5wYXRoLmpvaW4gY2Fubm90IGJlIHVzZWQgdG8gam9pbiBEIGFuZCBMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWQorICAgICAgICBkZXN0ZGlyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIG9zLnBhdGguam9pbihkLmdldFZhcignTElDRU5TRV9GSUxFU19ESVJFQ1RPUlknLCBUcnVlKSwgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisgICAgICAgIGNvcHlfbGljZW5zZV9maWxlcyhsaWNfZmlsZXNfcGF0aHMsIGRlc3RkaXIpCisgICAgICAgIGFkZF9wYWNrYWdlX2FuZF9maWxlcyhkKQorfQorCitkZWYgYWRkX3BhY2thZ2VfYW5kX2ZpbGVzKGQpOgorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBmaWxlcyA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZJTEVTX0RJUkVDVE9SWScsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIHBuX2xpYyA9ICIlcyVzIiAlIChwbiwgZC5nZXRWYXIoJ0xJQ0VOU0VfUEFDS0FHRV9TVUZGSVgnLCBGYWxzZSkpCisgICAgaWYgcG5fbGljIGluIHBhY2thZ2VzOgorICAgICAgICBiYi53YXJuKCIlcyBwYWNrYWdlIGFscmVhZHkgZXhpc3RlZCBpbiAlcy4iICUgKHBuX2xpYywgcG4pKQorICAgIGVsc2U6CisgICAgICAgICMgZmlyc3QgaW4gUEFDS0FHRVMgdG8gYmUgc3VyZSB0aGF0IG5vdGhpbmcgZWxzZSBnZXRzIExJQ0VOU0VfRklMRVNfRElSRUNUT1JZCisgICAgICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICIlcyAlcyIgJSAocG5fbGljLCBwYWNrYWdlcykpCisgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcG5fbGljLCBmaWxlcykKKyAgICAgICAgcnJlY29tbWVuZHNfcG4gPSBkLmdldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCBUcnVlKQorICAgICAgICBpZiBycmVjb21tZW5kc19wbjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18nICsgcG4sICIlcyAlcyIgJSAocG5fbGljLCBycmVjb21tZW5kc19wbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJyArIHBuLCAiJXMiICUgKHBuX2xpYykpCisKK2RlZiBjb3B5X2xpY2Vuc2VfZmlsZXMobGljX2ZpbGVzX3BhdGhzLCBkZXN0ZGlyKToKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZGVzdGRpcikKKyAgICBmb3IgKGJhc2VuYW1lLCBwYXRoKSBpbiBsaWNfZmlsZXNfcGF0aHM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNyYyA9IHBhdGgKKyAgICAgICAgICAgIGRzdCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBiYXNlbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhzcmMsIG9zLldfT0spIGFuZCAob3Muc3RhdChzcmMpLnN0X2RldiA9PSBvcy5zdGF0KGRlc3RkaXIpLnN0X2Rldik6CisgICAgICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZHN0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi53YXJuKCJDb3VsZCBub3QgY29weSBsaWNlbnNlIGZpbGUgJXMgdG8gJXM6ICVzIiAlIChzcmMsIGRzdCwgZSkpCisKK2RlZiBmaW5kX2xpY2Vuc2VfZmlsZXMoZCk6CisgICAgIiIiCisgICAgQ3JlYXRlcyBsaXN0IG9mIGZpbGVzIHVzZWQgaW4gTElDX0ZJTEVTX0NIS1NVTSBhbmQgZ2VuZXJpYyBMSUNFTlNFIGZpbGVzLgorICAgICIiIgorICAgIGltcG9ydCBzaHV0aWwKKyAgICBpbXBvcnQgb2UubGljZW5zZQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGZvciBwYWNrYWdlIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpOgorICAgICAgICBpZiBkLmdldFZhcignTElDRU5TRV8nICsgcGFja2FnZSwgVHJ1ZSk6CisgICAgICAgICAgICBsaWNlbnNlX3R5cGVzID0gbGljZW5zZV90eXBlcyArICcgJiAnICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdMSUNFTlNFXycgKyBwYWNrYWdlLCBUcnVlKQorCisgICAgI0lmIHdlIGdldCBoZXJlIHdpdGggbm8gbGljZW5zZSB0eXBlcywgdGhlbiB0aGF0IG1lYW5zIHdlIGhhdmUgYSByZWNpcGUgCisgICAgI2xldmVsIGxpY2Vuc2UuIElmIHNvLCB3ZSBncmFiIG9ubHkgdGhvc2UuCisgICAgdHJ5OgorICAgICAgICBsaWNlbnNlX3R5cGVzCisgICAgZXhjZXB0IE5hbWVFcnJvcjogICAgICAgIAorICAgICAgICAjIEFsbCB0aGUgbGljZW5zZSB0eXBlcyBhdCB0aGUgcmVjaXBlIGxldmVsCisgICAgICAgIGxpY2Vuc2VfdHlwZXMgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgCisgICAgIyBBbGwgdGhlIGxpY2Vuc2UgZmlsZXMgZm9yIHRoZSBwYWNrYWdlCisgICAgbGljX2ZpbGVzID0gZC5nZXRWYXIoJ0xJQ19GSUxFU19DSEtTVU0nLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAjIFRoZSBsaWNlbnNlIGZpbGVzIGFyZSBsb2NhdGVkIGluIFMvTElDX0ZJTEVfQ0hFQ0tTVU0uCisgICAgc3JjZGlyID0gZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgICMgRGlyZWN0b3J5IHdlIHN0b3JlIHRoZSBnZW5lcmljIGxpY2Vuc2VzIGFzIHNldCBpbiB0aGUgZGlzdHJvIGNvbmZpZ3VyYXRpb24KKyAgICBnZW5lcmljX2RpcmVjdG9yeSA9IGQuZ2V0VmFyKCdDT01NT05fTElDRU5TRV9ESVInLCBUcnVlKQorICAgICMgTGlzdCBvZiBiYXNlbmFtZSwgcGF0aCB0dXBsZXMKKyAgICBsaWNfZmlsZXNfcGF0aHMgPSBbXQorICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMgPSBbXQorICAgIGxpY2Vuc2Vfc291cmNlX2RpcnMuYXBwZW5kKGdlbmVyaWNfZGlyZWN0b3J5KQorICAgIHRyeToKKyAgICAgICAgYWRkaXRpb25hbF9saWNfZGlycyA9IGQuZ2V0VmFyKCdMSUNFTlNFX1BBVEgnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGZvciBsaWNfZGlyIGluIGFkZGl0aW9uYWxfbGljX2RpcnM6CisgICAgICAgICAgICBsaWNlbnNlX3NvdXJjZV9kaXJzLmFwcGVuZChsaWNfZGlyKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgRmluZFZpc2l0b3Iob2UubGljZW5zZS5MaWNlbnNlVmlzaXRvcik6CisgICAgICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFVudGlsIEkgZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGgKKyAgICAgICAgICAgICMgdGhlIHR3byBtb2RpZmllcnMgSSBzdXBwb3J0IChvciBncmVhdGVyID0gKworICAgICAgICAgICAgIyBhbmQgIndpdGggZXhjZXB0aW9ucyIgYmVpbmcgKgorICAgICAgICAgICAgIyB3ZSdsbCBqdXN0IHN0cmlwIG91dCB0aGUgbW9kaWZpZXIgYW5kIHB1dAorICAgICAgICAgICAgIyB0aGUgYmFzZSBsaWNlbnNlLgorICAgICAgICAgICAgZmluZF9saWNlbnNlKG5vZGUucy5yZXBsYWNlKCIrIiwgIiIpLnJlcGxhY2UoIioiLCAiIikpCisgICAgICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworICAgIGRlZiBmaW5kX2xpY2Vuc2UobGljZW5zZV90eXBlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGdlbl9saWNfZGVzdCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzcGR4X2dlbmVyaWMgPSBOb25lCisgICAgICAgIGxpY2Vuc2Vfc291cmNlID0gTm9uZQorICAgICAgICAjIElmIHRoZSBnZW5lcmljIGRvZXMgbm90IGV4aXN0IHdlIG5lZWQgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIFNQRFggbWFwcGluZyB0byBpdCwKKyAgICAgICAgIyB1bmxlc3MgTk9fR0VORVJJQ19MSUNFTlNFIGlzIHNldC4KKworICAgICAgICBmb3IgbGljX2RpciBpbiBsaWNlbnNlX3NvdXJjZV9kaXJzOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsaWNfZGlyLCBsaWNlbnNlX3R5cGUpKToKKyAgICAgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZV90eXBlKSAhPSBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIEdyZWF0LCB0aGVyZSBpcyBhbiBTUERYTElDRU5TRU1BUC4gV2UgY2FuIGNvcHkhCisgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJXZSBuZWVkIHRvIHVzZSBhIFNQRFhMSUNFTlNFTUFQIGZvciAlcyIgJSAobGljZW5zZV90eXBlKSkKKyAgICAgICAgICAgICAgICAgICAgc3BkeF9nZW5lcmljID0gZC5nZXRWYXJGbGFnKCdTUERYTElDRU5TRU1BUCcsIGxpY2Vuc2VfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgbGljZW5zZV9zb3VyY2UgPSBsaWNfZGlyCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihsaWNfZGlyLCBsaWNlbnNlX3R5cGUpKToKKyAgICAgICAgICAgICAgICBzcGR4X2dlbmVyaWMgPSBsaWNlbnNlX3R5cGUKKyAgICAgICAgICAgICAgICBsaWNlbnNlX3NvdXJjZSA9IGxpY19kaXIKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIHNwZHhfZ2VuZXJpYyBhbmQgbGljZW5zZV9zb3VyY2U6CisgICAgICAgICAgICAjIHdlIHJlYWxseSBzaG91bGQgY29weSB0byBnZW5lcmljXyArIHNwZHhfZ2VuZXJpYywgaG93ZXZlciwgdGhhdCBlbmRzIHVwIG1lc3NpbmcgdGhlIG1hbmlmZXN0CisgICAgICAgICAgICAjIGF1ZGl0IHVwLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiBlbWl0X3BrZ2RhdGEgKG9yLCB3ZSBhY3R1YWxseSBnb3QgYW5kIGZpeCBhbGwgdGhlIHJlY2lwZXMpCisKKyAgICAgICAgICAgIGxpY19maWxlc19wYXRocy5hcHBlbmQoKCJnZW5lcmljXyIgKyBsaWNlbnNlX3R5cGUsIG9zLnBhdGguam9pbihsaWNlbnNlX3NvdXJjZSwgc3BkeF9nZW5lcmljKSkpCisKKyAgICAgICAgICAgICMgVGhlIHVzZXIgbWF5IGF0dGVtcHQgdG8gdXNlIE5PX0dFTkVSSUNfTElDRU5TRSBmb3IgYSBnZW5lcmljIGxpY2Vuc2Ugd2hpY2ggZG9lc24ndCBtYWtlIHNlbnNlCisgICAgICAgICAgICAjIGFuZCBzaG91bGQgbm90IGJlIGFsbG93ZWQsIHdhcm4gdGhlIHVzZXIgaW4gdGhpcyBjYXNlLgorICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBpcyBhIGdlbmVyaWMgbGljZW5zZSwgcGxlYXNlIGRvbid0IHVzZSBOT19HRU5FUklDX0xJQ0VOU0UgZm9yIGl0LiIgJSAocG4sIGxpY2Vuc2VfdHlwZSkpCisKKyAgICAgICAgZWxpZiBkLmdldFZhckZsYWcoJ05PX0dFTkVSSUNfTElDRU5TRScsIGxpY2Vuc2VfdHlwZSk6CisgICAgICAgICAgICAjIGlmIE5PX0dFTkVSSUNfTElDRU5TRSBpcyBzZXQsIHdlIGNvcHkgdGhlIGxpY2Vuc2UgZmlsZXMgZnJvbSB0aGUgZmV0Y2hlZCBzb3VyY2UKKyAgICAgICAgICAgICMgb2YgdGhlIHBhY2thZ2UgcmF0aGVyIHRoYW4gdGhlIGxpY2Vuc2Vfc291cmNlX2RpcnMuCisgICAgICAgICAgICBmb3IgKGJhc2VuYW1lLCBwYXRoKSBpbiBsaWNfZmlsZXNfcGF0aHM6CisgICAgICAgICAgICAgICAgaWYgZC5nZXRWYXJGbGFnKCdOT19HRU5FUklDX0xJQ0VOU0UnLCBsaWNlbnNlX3R5cGUpID09IGJhc2VuYW1lOgorICAgICAgICAgICAgICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKCgiZ2VuZXJpY18iICsgbGljZW5zZV90eXBlLCBwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgQWRkIGV4cGxpY2l0eSBhdm9pZCBvZiBDTE9TRUQgbGljZW5zZSBiZWNhdXNlIHRoaXMgaXNuJ3QgZ2VuZXJpYworICAgICAgICAgICAgaWYgbGljZW5zZV90eXBlICE9ICdDTE9TRUQnOgorICAgICAgICAgICAgICAgICMgQW5kIGhlcmUgaXMgd2hlcmUgd2Ugd2FybiBwZW9wbGUgdGhhdCB0aGVpciBsaWNlbnNlcyBhcmUgbG91c3kKKyAgICAgICAgICAgICAgICBiYi53YXJuKCIlczogTm8gZ2VuZXJpYyBsaWNlbnNlIGZpbGUgZXhpc3RzIGZvcjogJXMgaW4gYW55IHByb3ZpZGVyIiAlIChwbiwgbGljZW5zZV90eXBlKSkKKyAgICAgICAgICAgIHBhc3MKKworICAgIGlmIG5vdCBnZW5lcmljX2RpcmVjdG9yeToKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiQ09NTU9OX0xJQ0VOU0VfRElSIGlzIHVuc2V0LiBQbGVhc2Ugc2V0IHRoaXMgaW4geW91ciBkaXN0cm8gY29uZmlnIikKKworICAgIGlmIG5vdCBsaWNfZmlsZXM6CisgICAgICAgICMgTm8gcmVjaXBlIHNob3VsZCBoYXZlIGFuIGludmFsaWQgbGljZW5zZSBmaWxlLiBUaGlzIGlzIGNoZWNrZWQgZWxzZQorICAgICAgICAjIHdoZXJlLCBidXQgbGV0J3MgYmUgcGVkYW50aWMKKyAgICAgICAgYmIubm90ZShwbiArICI6IFJlY2lwZSBmaWxlIGRvZXMgbm90IGhhdmUgbGljZW5zZSBmaWxlIGluZm9ybWF0aW9uLiIpCisgICAgICAgIHJldHVybiBsaWNfZmlsZXNfcGF0aHMKKworICAgIGZvciB1cmwgaW4gbGljX2ZpbGVzLnNwbGl0KCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybCh1cmwpCisgICAgICAgIGV4Y2VwdCBiYi5mZXRjaC5NYWxmb3JtZWRVcmw6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogTElDX0ZJTEVTX0NIS1NVTSBjb250YWlucyBhbiBpbnZhbGlkIFVSTDogICVzIiAlIChkLmdldFZhcignUEYnLCBUcnVlKSwgdXJsKSkKKyAgICAgICAgIyBXZSB3YW50IHRoZSBsaWNlbnNlIGZpbGVuYW1lIGFuZCBwYXRoCisgICAgICAgIHNyY2xpY2ZpbGUgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBwYXRoKQorICAgICAgICBsaWNfZmlsZXNfcGF0aHMuYXBwZW5kKChvcy5wYXRoLmJhc2VuYW1lKHBhdGgpLCBzcmNsaWNmaWxlKSkKKworICAgIHYgPSBGaW5kVmlzaXRvcigpCisgICAgdHJ5OgorICAgICAgICB2LnZpc2l0X3N0cmluZyhsaWNlbnNlX3R5cGVzKQorICAgIGV4Y2VwdCBvZS5saWNlbnNlLkludmFsaWRMaWNlbnNlIGFzIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoJyVzOiAlcycgJSAoZC5nZXRWYXIoJ1BGJywgVHJ1ZSksIGV4YykpCisgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICBiYi53YXJuKCIlczogRmFpbGVkIHRvIHBhcnNlIGl0J3MgTElDRU5TRSBmaWVsZC4iICUgKGQuZ2V0VmFyKCdQRicsIFRydWUpKSkKKworICAgIHJldHVybiBsaWNfZmlsZXNfcGF0aHMKKworZGVmIHJldHVybl9zcGR4KGQsIGxpY2Vuc2UpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3BkeCBtYXBwaW5nIG9mIGEgbGljZW5zZSBpZiBpdCBleGlzdHMuCisgICAgICIiIgorICAgIHJldHVybiBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZSwgVHJ1ZSkKKworZGVmIGNhbm9uaWNhbF9saWNlbnNlKGQsIGxpY2Vuc2UpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgY2Fub25pY2FsIChTUERYKSBmb3JtIG9mIHRoZSBsaWNlbnNlIGlmIGF2YWlsYWJsZSAoc28gR1BMdjMKKyAgICBiZWNvbWVzIEdQTC0zLjApLCBmb3IgdGhlIGxpY2Vuc2UgbmFtZWQgJ1grJywgcmV0dXJuIGNhbm9uaWNhbCBmb3JtIG9mCisgICAgJ1gnIGlmIGF2YWlsYWJlbCBhbmQgdGhlIHRhaWxpbmcgJysnIChzbyBHUEx2MysgYmVjb21lcyBHUEwtMy4wKyksIAorICAgIG9yIHRoZSBwYXNzZWQgbGljZW5zZSBpZiB0aGVyZSBpcyBubyBjYW5vbmljYWwgZm9ybS4KKyAgICAiIiIKKyAgICBsaWMgPSBkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgbGljZW5zZSwgVHJ1ZSkgb3IgIiIKKyAgICBpZiBub3QgbGljIGFuZCBsaWNlbnNlLmVuZHN3aXRoKCcrJyk6CisgICAgICAgIGxpYyA9IGQuZ2V0VmFyRmxhZygnU1BEWExJQ0VOU0VNQVAnLCBsaWNlbnNlLnJzdHJpcCgnKycpLCBUcnVlKQorICAgICAgICBpZiBsaWM6CisgICAgICAgICAgICBsaWMgKz0gJysnCisgICAgcmV0dXJuIGxpYyBvciBsaWNlbnNlCisKK2RlZiBleHBhbmRfd2lsZGNhcmRfbGljZW5zZXMoZCwgd2lsZGNhcmRfbGljZW5zZXMpOgorICAgICIiIgorICAgIFJldHVybiBhY3R1YWwgc3BkeCBmb3JtYXQgbGljZW5zZSBuYW1lcyBpZiB3aWxkY2FyZCB1c2VkLiBXZSBleHBhbmQKKyAgICB3aWxkY2FyZHMgZnJvbSBTUERYTElDRU5TRU1BUCBmbGFncyBhbmQgU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgdmFsdWVzLgorICAgICIiIgorICAgIGltcG9ydCBmbm1hdGNoCisgICAgbGljZW5zZXMgPSBbXQorICAgIHNwZHhtYXBrZXlzID0gZC5nZXRWYXJGbGFncygnU1BEWExJQ0VOU0VNQVAnKS5rZXlzKCkKKyAgICBmb3Igd2xkX2xpYyBpbiB3aWxkY2FyZF9saWNlbnNlczoKKyAgICAgICAgc3BkeGZsYWdzID0gZm5tYXRjaC5maWx0ZXIoc3BkeG1hcGtleXMsIHdsZF9saWMpCisgICAgICAgIGxpY2Vuc2VzICs9IFtkLmdldFZhckZsYWcoJ1NQRFhMSUNFTlNFTUFQJywgZmxhZykgZm9yIGZsYWcgaW4gc3BkeGZsYWdzXQorCisgICAgc3BkeF9saWNzID0gKGQuZ2V0VmFyKCdTUkNfRElTVFJJQlVURV9MSUNFTlNFUycsIEZhbHNlKSBvciAnJykuc3BsaXQoKQorICAgIGZvciB3bGRfbGljIGluIHdpbGRjYXJkX2xpY2Vuc2VzOgorICAgICAgICBsaWNlbnNlcyArPSBmbm1hdGNoLmZpbHRlcihzcGR4X2xpY3MsIHdsZF9saWMpCisKKyAgICBsaWNlbnNlcyA9IGxpc3Qoc2V0KGxpY2Vuc2VzKSkKKyAgICByZXR1cm4gbGljZW5zZXMKKworZGVmIGluY29tcGF0aWJsZV9saWNlbnNlX2NvbnRhaW5zKGxpY2Vuc2UsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgbGljZW5zZSA9IGNhbm9uaWNhbF9saWNlbnNlKGQsIGxpY2Vuc2UpCisgICAgYmFkX2xpY2Vuc2VzID0gKGQuZ2V0VmFyKCdJTkNPTVBBVElCTEVfTElDRU5TRScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYmFkX2xpY2Vuc2VzID0gZXhwYW5kX3dpbGRjYXJkX2xpY2Vuc2VzKGQsIGJhZF9saWNlbnNlcykKKyAgICByZXR1cm4gdHJ1ZXZhbHVlIGlmIGxpY2Vuc2UgaW4gYmFkX2xpY2Vuc2VzIGVsc2UgZmFsc2V2YWx1ZQorCitkZWYgaW5jb21wYXRpYmxlX2xpY2Vuc2UoZCwgZG9udF93YW50X2xpY2Vuc2VzLCBwYWNrYWdlPU5vbmUpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgcmVjaXBlIGhhcyBvbmx5IGluY29tcGF0aWJsZSBsaWNlbnNlcy4gSXQgYWxzbworICAgIHRha2UgaW50byBjb25zaWRlcmF0aW9uICdvcicgb3BlcmFuZC4gIGRvbnRfd2FudF9saWNlbnNlcyBzaG91bGQgYmUgcGFzc2VkCisgICAgYXMgY2Fub25pY2FsIChTUERYKSBuYW1lcy4KKyAgICAiIiIKKyAgICBpbXBvcnQgb2UubGljZW5zZQorICAgIGxpY2Vuc2UgPSBkLmdldFZhcigiTElDRU5TRV8lcyIgJSBwYWNrYWdlLCBUcnVlKSBpZiBwYWNrYWdlIGVsc2UgTm9uZQorICAgIGlmIG5vdCBsaWNlbnNlOgorICAgICAgICBsaWNlbnNlID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorCisgICAgIyBIYW5kbGVzIGFuICJvciIgb3IgdHdvIGxpY2Vuc2Ugc2V0cyBwcm92aWRlZCBieQorICAgICMgZmxhdHRlbmVkX2xpY2Vuc2VzKCksIHBpY2sgb25lIHRoYXQgd29ya3MgaWYgcG9zc2libGUuCisgICAgZGVmIGNob29zZV9saWNfc2V0KGEsIGIpOgorICAgICAgICByZXR1cm4gYSBpZiBhbGwob2UubGljZW5zZS5saWNlbnNlX29rKGNhbm9uaWNhbF9saWNlbnNlKGQsIGxpYyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfd2FudF9saWNlbnNlcykgZm9yIGxpYyBpbiBhKSBlbHNlIGIKKworICAgIHRyeToKKyAgICAgICAgbGljZW5zZXMgPSBvZS5saWNlbnNlLmZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlLCBjaG9vc2VfbGljX3NldCkKKyAgICBleGNlcHQgb2UubGljZW5zZS5MaWNlbnNlRXJyb3IgYXMgZXhjOgorICAgICAgICBiYi5mYXRhbCgnJXM6ICVzJyAlIChkLmdldFZhcignUCcsIFRydWUpLCBleGMpKQorICAgIHJldHVybiBhbnkobm90IG9lLmxpY2Vuc2UubGljZW5zZV9vayhjYW5vbmljYWxfbGljZW5zZShkLCBsKSwgXAorCQlkb250X3dhbnRfbGljZW5zZXMpIGZvciBsIGluIGxpY2Vuc2VzKQorCitkZWYgY2hlY2tfbGljZW5zZV9mbGFncyhkKToKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIHJlY2lwZSBoYXMgYW55IExJQ0VOU0VfRkxBR1MgdGhhdAorICAgIGFyZW4ndCB3aGl0ZWxpc3RlZC4KKworICAgIElmIGl0IGRvZXMsIGl0IHJldHVybnMgdGhlIGZpcnN0IExJQ0VOU0VfRkxBR1MgaXRlbSBtaXNzaW5nIGZyb20gdGhlCisgICAgd2hpdGVsaXN0LCBvciBhbGwgb2YgdGhlIExJQ0VOU0VfRkxBR1MgaWYgdGhlcmUgaXMgbm8gd2hpdGVsaXN0LgorCisgICAgSWYgZXZlcnl0aGluZyBpcyBpcyBwcm9wZXJseSB3aGl0ZWxpc3RlZCwgaXQgcmV0dXJucyBOb25lLgorICAgICIiIgorCisgICAgZGVmIGxpY2Vuc2VfZmxhZ19tYXRjaGVzKGZsYWcsIHdoaXRlbGlzdCwgcG4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgZmxhZyBtYXRjaGVzIHNvbWV0aGluZyBpbiB3aGl0ZWxpc3QsIE5vbmUgaWYgbm90LgorCisgICAgICAgIEJlZm9yZSB3ZSB0ZXN0IGEgZmxhZyBhZ2FpbnN0IHRoZSB3aGl0ZWxpc3QsIHdlIGFwcGVuZCBfJHtQTn0KKyAgICAgICAgdG8gaXQuICBXZSB0aGVuIHRyeSB0byBtYXRjaCB0aGF0IHN0cmluZyBhZ2FpbnN0IHRoZQorICAgICAgICB3aGl0ZWxpc3QuICBUaGlzIGNvdmVycyB0aGUgbm9ybWFsIGNhc2UsIHdoZXJlIHdlIGV4cGVjdAorICAgICAgICBMSUNFTlNFX0ZMQUdTIHRvIGJlIGEgc2ltcGxlIHN0cmluZyBsaWtlICdjb21tZXJjaWFsJywgd2hpY2gKKyAgICAgICAgdGhlIHVzZXIgdHlwaWNhbGx5IG1hdGNoZXMgZXhhY3RseSBpbiB0aGUgd2hpdGVsaXN0IGJ5CisgICAgICAgIGV4cGxpY2l0bHkgYXBwZW5kaW5nIHRoZSBwYWNrYWdlIG5hbWUgZS5nICdjb21tZXJjaWFsX2ZvbycuCisgICAgICAgIElmIHdlIGZhaWwgdGhlIG1hdGNoIGhvd2V2ZXIsIHdlIHRoZW4gc3BsaXQgdGhlIGZsYWcgYWNyb3NzCisgICAgICAgICdfJyBhbmQgYXBwZW5kIGVhY2ggZnJhZ21lbnQgYW5kIHRlc3QgdW50aWwgd2UgZWl0aGVyIG1hdGNoIG9yCisgICAgICAgIHJ1biBvdXQgb2YgZnJhZ21lbnRzLgorICAgICAgICAiIiIKKyAgICAgICAgZmxhZ19wbiA9ICgiJXNfJXMiICUgKGZsYWcsIHBuKSkKKyAgICAgICAgZm9yIGNhbmRpZGF0ZSBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICBpZiBmbGFnX3BuID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmbGFnX2N1ciA9ICIiCisgICAgICAgIGZsYWdtZW50cyA9IGZsYWdfcG4uc3BsaXQoIl8iKQorICAgICAgICBmbGFnbWVudHMucG9wKCkgIyB3ZSd2ZSBhbHJlYWR5IHRlc3RlZCB0aGUgZnVsbCBzdHJpbmcKKyAgICAgICAgZm9yIGZsYWdtZW50IGluIGZsYWdtZW50czoKKyAgICAgICAgICAgIGlmIGZsYWdfY3VyOgorICAgICAgICAgICAgICAgIGZsYWdfY3VyICs9ICJfIgorICAgICAgICAgICAgZmxhZ19jdXIgKz0gZmxhZ21lbnQKKyAgICAgICAgICAgIGZvciBjYW5kaWRhdGUgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgIGlmIGZsYWdfY3VyID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWxsX2xpY2Vuc2VfZmxhZ3NfbWF0Y2gobGljZW5zZV9mbGFncywgd2hpdGVsaXN0KToKKyAgICAgICAgIiIiIFJldHVybiBmaXJzdCB1bm1hdGNoZWQgZmxhZywgTm9uZSBpZiBhbGwgZmxhZ3MgbWF0Y2ggIiIiCisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgc3BsaXRfd2hpdGVsaXN0ID0gd2hpdGVsaXN0LnNwbGl0KCkKKyAgICAgICAgZm9yIGZsYWcgaW4gbGljZW5zZV9mbGFncy5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbm90IGxpY2Vuc2VfZmxhZ19tYXRjaGVzKGZsYWcsIHNwbGl0X3doaXRlbGlzdCwgcG4pOgorICAgICAgICAgICAgICAgIHJldHVybiBmbGFnCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBsaWNlbnNlX2ZsYWdzID0gZC5nZXRWYXIoJ0xJQ0VOU0VfRkxBR1MnLCBUcnVlKQorICAgIGlmIGxpY2Vuc2VfZmxhZ3M6CisgICAgICAgIHdoaXRlbGlzdCA9IGQuZ2V0VmFyKCdMSUNFTlNFX0ZMQUdTX1dISVRFTElTVCcsIFRydWUpCisgICAgICAgIGlmIG5vdCB3aGl0ZWxpc3Q6CisgICAgICAgICAgICByZXR1cm4gbGljZW5zZV9mbGFncworICAgICAgICB1bm1hdGNoZWRfZmxhZyA9IGFsbF9saWNlbnNlX2ZsYWdzX21hdGNoKGxpY2Vuc2VfZmxhZ3MsIHdoaXRlbGlzdCkKKyAgICAgICAgaWYgdW5tYXRjaGVkX2ZsYWc6CisgICAgICAgICAgICByZXR1cm4gdW5tYXRjaGVkX2ZsYWcKKyAgICByZXR1cm4gTm9uZQorCitkZWYgY2hlY2tfbGljZW5zZV9mb3JtYXQoZCk6CisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgTElDRU5TRSBpcyB3ZWxsIGRlZmluZWQsCisgICAgICAgIFZhbGlkYXRlIG9wZXJhdG9ycyBpbiBMSUNFTlNFUy4KKyAgICAgICAgTm8gc3BhY2VzIGFyZSBhbGxvd2VkIGJldHdlZW4gTElDRU5TRVMuCisgICAgIiIiCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGxpY2Vuc2VzID0gZC5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKQorICAgIGZyb20gb2UubGljZW5zZSBpbXBvcnQgbGljZW5zZV9vcGVyYXRvciwgbGljZW5zZV9vcGVyYXRvcl9jaGFycywgbGljZW5zZV9wYXR0ZXJuCisKKyAgICBlbGVtZW50cyA9IGZpbHRlcihsYW1iZGEgeDogeC5zdHJpcCgpLCBsaWNlbnNlX29wZXJhdG9yLnNwbGl0KGxpY2Vuc2VzKSkKKyAgICBmb3IgcG9zLCBlbGVtZW50IGluIGVudW1lcmF0ZShlbGVtZW50cyk6CisgICAgICAgIGlmIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgIGlmIHBvcyA+IDAgYW5kIGxpY2Vuc2VfcGF0dGVybi5tYXRjaChlbGVtZW50c1twb3MgLSAxXSk6CisgICAgICAgICAgICAgICAgYmIud2FybignJXM6IExJQ0VOU0UgdmFsdWUgIiVzIiBoYXMgYW4gaW52YWxpZCBmb3JtYXQgLSBsaWNlbnNlIG5hbWVzICcgXAorICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgc2VwYXJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyB0byBpbmRpY2F0ZSAnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgbGljZW5zZSBzZWxlY3Rpb246ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAocG4sIGxpY2Vuc2VzLCBsaWNlbnNlX29wZXJhdG9yX2NoYXJzKSkKKyAgICAgICAgZWxpZiBub3QgbGljZW5zZV9vcGVyYXRvci5tYXRjaChlbGVtZW50KToKKyAgICAgICAgICAgIGJiLndhcm4oJyVzOiBMSUNFTlNFIHZhbHVlICIlcyIgaGFzIGFuIGludmFsaWQgc2VwYXJhdG9yICIlcyIgdGhhdCBpcyBub3QgJyBcCisgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgdmFsaWQgbGlzdCBvZiBzZXBhcmF0b3JzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgKHBuLCBsaWNlbnNlcywgZWxlbWVudCwgbGljZW5zZV9vcGVyYXRvcl9jaGFycykpCisKK1NTVEFURVRBU0tTICs9ICJkb19wb3B1bGF0ZV9saWMiCitkb19wb3B1bGF0ZV9saWNbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtMSUNTU1RBVEVESVJ9IgorZG9fcG9wdWxhdGVfbGljW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0xJQ0VOU0VfRElSRUNUT1JZfS8iCisKK1JPT1RGU19QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmQgPSAid3JpdGVfcGFja2FnZV9tYW5pZmVzdDsgbGljZW5zZV9jcmVhdGVfbWFuaWZlc3Q7ICIKKworZG9fcG9wdWxhdGVfbGljX3NldHNjZW5lW2RpcnNdID0gIiR7TElDU1NUQVRFRElSfS8ke1BOfSIKK2RvX3BvcHVsYXRlX2xpY19zZXRzY2VuZVtjbGVhbmRpcnNdID0gIiR7TElDU1NUQVRFRElSfSIKK3B5dGhvbiBkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wb3B1bGF0ZV9saWNfc2V0c2NlbmUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL2xpbnV4LWtlcm5lbC1iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZTcxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9saW51eC1rZXJuZWwtYmFzZS5iYmNsYXNzCkBAIC0wLDAgKzEsNDEgQEAKKyMgcGFyc2Uga2VybmVsIEFCSSB2ZXJzaW9uIG91dCBvZiA8bGludXgvdmVyc2lvbi5oPgorZGVmIGdldF9rZXJuZWx2ZXJzaW9uX2hlYWRlcnMocCk6CisgICAgaW1wb3J0IHJlCisKKyAgICBmbiA9IHAgKyAnL2luY2x1ZGUvbGludXgvdXRzcmVsZWFzZS5oJworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICMgYWZ0ZXIgMi42LjMzLXJjMQorICAgICAgICBmbiA9IHAgKyAnL2luY2x1ZGUvZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaCcKKyAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICBmbiA9IHAgKyAnL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oJworCisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbihmbiwgJ3InKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgbCA9IGYucmVhZGxpbmVzKCkKKyAgICBmLmNsb3NlKCkKKyAgICByID0gcmUuY29tcGlsZSgiI2RlZmluZSBVVFNfUkVMRUFTRSBcIiguKilcIiIpCisgICAgZm9yIHMgaW4gbDoKKyAgICAgICAgbSA9IHIubWF0Y2gocykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgZ2V0X2tlcm5lbHZlcnNpb25fZmlsZShwKToKKyAgICBmbiA9IHAgKyAnL2tlcm5lbC1hYml2ZXJzaW9uJworCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgIHJldHVybiBmLnJlYWRsaW5lcygpWzBdLnN0cmlwKCkKKyAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGxpbnV4X21vZHVsZV9wYWNrYWdlcyhzLCBkKToKKwlzdWZmaXggPSAiIgorCXJldHVybiAiICIuam9pbihtYXAobGFtYmRhIHM6ICJrZXJuZWwtbW9kdWxlLSVzJXMiICUgKHMubG93ZXIoKS5yZXBsYWNlKCdfJywgJy0nKS5yZXBsYWNlKCdAJywgJysnKSwgc3VmZml4KSwgcy5zcGxpdCgpKSkKKworIyB0aGF0J3MgYWxsCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9sb2dnaW5nLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzdjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbG9nZ2luZy5iYmNsYXNzCkBAIC0wLDAgKzEsMTAxIEBACisjIFRoZSBmb2xsb3dpbmcgbG9nZ2luZyBtZWNoYW5pc21zIGFyZSB0byBiZSB1c2VkIGluIGJhc2ggZnVuY3Rpb25zIG9mIHJlY2lwZXMuCisjIFRoZXkgYXJlIGludGVuZGVkIHRvIG1hcCBvbmUgdG8gb25lIGluIGludGVudGlvbiBhbmQgb3V0cHV0IGZvcm1hdCB3aXRoIHRoZQorIyBweXRob24gcmVjaXBlIGxvZ2dpbmcgZnVuY3Rpb25zIG9mIGEgc2ltaWxhciBuYW1pbmcgY29udmVudGlvbjogYmIucGxhaW4oKSwKKyMgYmIubm90ZSgpLCBldGMuCisKK0xPR0ZJRk8gPSAiJHtUfS9maWZvLiR7QG9zLmdldHBpZCgpfSIKKworIyBQcmludCB0aGUgb3V0cHV0IGV4YWN0bHkgYXMgaXQgaXMgcGFzc2VkIGluLiBUeXBpY2FsbHkgdXNlZCBmb3Igb3V0cHV0IG9mCisjIHRhc2tzIHRoYXQgc2hvdWxkIGJlIHNlZW4gb24gdGhlIGNvbnNvbGUuIFVzZSBzcGFyaW5nbHkuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYnBsYWluKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYnBsYWluICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIiQqIgorCWZpCit9CisKKyMgTm90aWZ5IHRoZSB1c2VyIG9mIGEgbm90ZXdvcnRoeSBjb25kaXRpb24uIAorIyBPdXRwdXQ6IGxvZ3MKK2Jibm90ZSgpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJub3RlICQqIiA+ICR7TE9HRklGT30KKwllbHNlCisJCWVjaG8gIk5PVEU6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYSB3YXJuaW5nIHRvIHRoZSBsb2cuIFdhcm5pbmdzIGFyZSBub24tZmF0YWwsIGFuZCBkbyBub3QKKyMgaW5kaWNhdGUgYSBidWlsZCBmYWlsdXJlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJ3YXJuKCkgeworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYndhcm4gJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiV0FSTklORzogJCoiCisJZmkKK30KKworIyBQcmludCBhbiBlcnJvciB0byB0aGUgbG9nLiBFcnJvcnMgYXJlIG5vbi1mYXRhbCBpbiB0aGF0IHRoZSBidWlsZCBjYW4KKyMgY29udGludWUsIGJ1dCB0aGV5IGRvIGluZGljYXRlIGEgYnVpbGQgZmFpbHVyZS4KKyMgT3V0cHV0OiBsb2dzIGNvbnNvbGUKK2JiZXJyb3IoKSB7CisJaWYgWyAtcCAke0xPR0ZJRk99IF0gOyB0aGVuCisJCXByaW50ZiAiJWJcMCIgImJiZXJyb3IgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCit9CisKKyMgUHJpbnQgYSBmYXRhbCBlcnJvciB0byB0aGUgbG9nLiBGYXRhbCBlcnJvcnMgaW5kaWNhdGUgYnVpbGQgZmFpbHVyZQorIyBhbmQgaGFsdCB0aGUgYnVpbGQsIGV4aXRpbmcgd2l0aCBhbiBlcnJvciBjb2RlLgorIyBPdXRwdXQ6IGxvZ3MgY29uc29sZQorYmJmYXRhbCgpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJmYXRhbCAkKiIgPiAke0xPR0ZJRk99CisJZWxzZQorCQllY2hvICJFUlJPUjogJCoiCisJZmkKKwlleGl0IDEKK30KKworIyBMaWtlIGJiZmF0YWwsIGV4Y2VwdCBwcmV2ZW50cyB0aGUgc3VwcHJlc3Npb24gb2YgdGhlIGVycm9yIGxvZyBieQorIyBiaXRiYWtlJ3MgVUkuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCitiYmZhdGFsX2xvZygpIHsKKwlpZiBbIC1wICR7TE9HRklGT30gXSA7IHRoZW4KKwkJcHJpbnRmICIlYlwwIiAiYmJmYXRhbF9sb2cgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiRVJST1I6ICQqIgorCWZpCisJZXhpdCAxCit9CisKKyMgUHJpbnQgZGVidWcgbWVzc2FnZXMuIFRoZXNlIGFyZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3Jlc3MgY2hlY2twb2ludAorIyBtZXNzYWdlcyB0byB0aGUgbG9ncy4gRGVwZW5kaW5nIG9uIHRoZSBkZWJ1ZyBsb2cgbGV2ZWwsIHRoZXkgbWF5IGFsc28KKyMgZ28gdG8gdGhlIGNvbnNvbGUuCisjIE91dHB1dDogbG9ncyBjb25zb2xlCisjIFVzYWdlOiBiYmRlYnVnIDEgImZpcnN0IGxldmVsIGRlYnVnIG1lc3NhZ2UiCisjICAgICAgICBiYmRlYnVnIDIgInNlY29uZCBsZXZlbCBkZWJ1ZyBtZXNzYWdlIgorYmJkZWJ1ZygpIHsKKwlVU0FHRT0nVXNhZ2U6IGJiZGVidWcgWzEyM10gIm1lc3NhZ2UiJworCWlmIFsgJCMgLWx0IDIgXTsgdGhlbgorCQliYmZhdGFsICIkVVNBR0UiCisJZmkKKwkKKwkjIFN0cmlwIG9mZiB0aGUgZGVidWcgbGV2ZWwgYW5kIGVuc3VyZSBpdCBpcyBhbiBpbnRlZ2VyCisJREJHTFZMPSQxOyBzaGlmdAorCU5PTkRJR0lUUz0kKGVjaG8gIiREQkdMVkwiIHwgdHIgLWQgWzpkaWdpdDpdKQorCWlmIFsgIiROT05ESUdJVFMiIF07IHRoZW4KKwkJYmJmYXRhbCAiJFVTQUdFIgorCWZpCisKKwkjIEFsbCBkZWJ1ZyBvdXRwdXQgaXMgcHJpbnRlZCB0byB0aGUgbG9ncworCWlmIFsgLXAgJHtMT0dGSUZPfSBdIDsgdGhlbgorCQlwcmludGYgIiViXDAiICJiYmRlYnVnICREQkdMVkwgJCoiID4gJHtMT0dGSUZPfQorCWVsc2UKKwkJZWNobyAiREVCVUc6ICQqIgorCWZpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tZXRhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNjg5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbWV0YS5iYmNsYXNzCkBAIC0wLDAgKzEsNCBAQAorCitQQUNLQUdFUyA9ICIiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSA9ICJkb19idWlsZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tZXRhZGF0YV9zY20uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzdlNjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21ldGFkYXRhX3NjbS5iYmNsYXNzCkBAIC0wLDAgKzEsODIgQEAKK01FVEFEQVRBX0JSQU5DSCA/PSAiJHtAYmFzZV9kZXRlY3RfYnJhbmNoKGQpfSIKK01FVEFEQVRBX1JFVklTSU9OID89ICIke0BiYXNlX2RldGVjdF9yZXZpc2lvbihkKX0iCisKK2RlZiBiYXNlX2RldGVjdF9yZXZpc2lvbihkKToKKyAgICBwYXRoID0gYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCkKKworICAgIHNjbXMgPSBbYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X3JldmlzaW9uLCBcCisgICAgICAgICAgICBiYXNlX2dldF9tZXRhZGF0YV9zdm5fcmV2aXNpb25dCisKKyAgICBmb3Igc2NtIGluIHNjbXM6CisgICAgICAgIHJldiA9IHNjbShwYXRoLCBkKQorICAgICAgICBpZiByZXYgIT0gIjx1bmtub3duPiI6CisgICAgICAgICAgICByZXR1cm4gcmV2CisKKyAgICByZXR1cm4gIjx1bmtub3duPiIKKworZGVmIGJhc2VfZGV0ZWN0X2JyYW5jaChkKToKKyAgICBwYXRoID0gYmFzZV9nZXRfc2NtYmFzZXBhdGgoZCkKKworICAgIHNjbXMgPSBbYmFzZV9nZXRfbWV0YWRhdGFfZ2l0X2JyYW5jaF0KKworICAgIGZvciBzY20gaW4gc2NtczoKKyAgICAgICAgcmV2ID0gc2NtKHBhdGgsIGQpCisgICAgICAgIGlmIHJldiAhPSAiPHVua25vd24+IjoKKyAgICAgICAgICAgIHJldHVybiByZXYuc3RyaXAoKQorCisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKK2RlZiBiYXNlX2dldF9zY21iYXNlcGF0aChkKToKKyAgICByZXR1cm4gZC5nZXRWYXIoICdDT1JFQkFTRScsIFRydWUpCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9tb25vdG9uZV9icmFuY2gocGF0aCwgZCk6CisgICAgbW9ub3RvbmVfYnJhbmNoID0gIjx1bmtub3duPiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiJXMvX01UTi9vcHRpb25zIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICBtb25vdG9uZV9icmFuY2ggPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBtb25vdG9uZV9icmFuY2guc3RhcnRzd2l0aCggImRhdGFiYXNlIiApOgorICAgICAgICAgICAgICAgIG1vbm90b25lX2JyYW5jaF93b3JkcyA9IG1vbm90b25lX2JyYW5jaC5zcGxpdCgpCisgICAgICAgICAgICAgICAgbW9ub3RvbmVfYnJhbmNoID0gbW9ub3RvbmVfYnJhbmNoX3dvcmRzWyBtb25vdG9uZV9icmFuY2hfd29yZHMuaW5kZXgoICJicmFuY2giICkrMV1bMTotMV0KKyAgICBleGNlcHQ6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gbW9ub3RvbmVfYnJhbmNoCisKK2RlZiBiYXNlX2dldF9tZXRhZGF0YV9tb25vdG9uZV9yZXZpc2lvbihwYXRoLCBkKToKKyAgICBtb25vdG9uZV9yZXZpc2lvbiA9ICI8dW5rbm93bj4iCisgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oIiVzL19NVE4vcmV2aXNpb24iICUgcGF0aCkgYXMgZjoKKyAgICAgICAgICAgIG1vbm90b25lX3JldmlzaW9uID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbW9ub3RvbmVfcmV2aXNpb24uc3RhcnRzd2l0aCggImZvcm1hdF92ZXJzaW9uIiApOgorICAgICAgICAgICAgICAgIG1vbm90b25lX3JldmlzaW9uX3dvcmRzID0gbW9ub3RvbmVfcmV2aXNpb24uc3BsaXQoKQorICAgICAgICAgICAgICAgIG1vbm90b25lX3JldmlzaW9uID0gbW9ub3RvbmVfcmV2aXNpb25fd29yZHNbIG1vbm90b25lX3JldmlzaW9uX3dvcmRzLmluZGV4KCAib2xkX3JldmlzaW9uIiApKzFdWzE6LTFdCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gbW9ub3RvbmVfcmV2aXNpb24KKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX3N2bl9yZXZpc2lvbihwYXRoLCBkKToKKyAgICAjIFRoaXMgb25seSB3b3JrcyB3aXRoIG9sZGVyIHN1YnZlcnNpb24uIEZvciBuZXdlciB2ZXJzaW9ucyAKKyAgICAjIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGZpeGVkIGJ5IHNvbWVvbmUgaW50ZXJlc3RlZAorICAgIHJldmlzaW9uID0gIjx1bmtub3duPiIKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbigiJXMvLnN2bi9lbnRyaWVzIiAlIHBhdGgpIGFzIGY6CisgICAgICAgICAgICByZXZpc2lvbiA9IGYucmVhZGxpbmVzKClbM10uc3RyaXAoKQorICAgIGV4Y2VwdCAoSU9FcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gcmV2aXNpb24KKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9icmFuY2gocGF0aCwgZCk6CisgICAgYnJhbmNoID0gb3MucG9wZW4oJ2NkICVzOyBnaXQgYnJhbmNoIDI+JjEgfCBncmVwICJeKiAiIHwgdHIgLWQgIiogIicgJSBwYXRoKS5yZWFkKCkKKworICAgIGlmIGxlbihicmFuY2gpICE9IDA6CisgICAgICAgIHJldHVybiBicmFuY2gKKyAgICByZXR1cm4gIjx1bmtub3duPiIKKworZGVmIGJhc2VfZ2V0X21ldGFkYXRhX2dpdF9yZXZpc2lvbihwYXRoLCBkKToKKyAgICBmID0gb3MucG9wZW4oImNkICVzOyBnaXQgbG9nIC1uIDEgLS1wcmV0dHk9b25lbGluZSAtLSAyPiYxIiAlIHBhdGgpCisgICAgZGF0YSA9IGYucmVhZCgpCisgICAgaWYgZi5jbG9zZSgpIGlzIE5vbmU6ICAgICAgICAKKyAgICAgICAgcmV2ID0gZGF0YS5zcGxpdCgiICIpWzBdCisgICAgICAgIGlmIGxlbihyZXYpICE9IDA6CisgICAgICAgICAgICByZXR1cm4gcmV2CisgICAgcmV0dXJuICI8dW5rbm93bj4iCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9taWdyYXRlX2xvY2FsY291bnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTBkZjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21pZ3JhdGVfbG9jYWxjb3VudC5iYmNsYXNzCkBAIC0wLDAgKzEsNDYgQEAKK1BSU0VSVl9EVU1QRElSID8/PSAiJHtMT0dfRElSfS9kYiIKK0xPQ0FMQ09VTlRfRFVNUEZJTEUgPz89ICIke1BSU0VSVl9EVU1QRElSfS9wcnNlcnYtbG9jYWxjb3VudC1leHBvcnRzLmluYyIKKworcHl0aG9uIG1pZ3JhdGVfbG9jYWxjb3VudF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIHB2ID0gZS5kYXRhLmdldFZhcignUFYnLCBUcnVlKQorICAgIGlmIG5vdCAnQVVUT0lOQycgaW4gcHY6CisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxjb3VudHMgPSBiYi5wZXJzaXN0X2RhdGEucGVyc2lzdCgnQkJfVVJJX0xPQ0FMQ09VTlQnLCBlLmRhdGEpCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgcmV2cyA9IGxvY2FsY291bnRzLmdldF9ieV9wYXR0ZXJuKCclJS0lc19yZXYnICUgcG4pCisgICAgY291bnRzID0gbG9jYWxjb3VudHMuZ2V0X2J5X3BhdHRlcm4oJyUlLSVzX2NvdW50JyAlIHBuKQorICAgIGlmIG5vdCByZXZzIG9yIG5vdCBjb3VudHM6CisgICAgICAgIHJldHVybgorCisgICAgaWYgbGVuKHJldnMpICE9IGxlbihjb3VudHMpOgorICAgICAgICBiYi53YXJuKCJUaGUgbnVtYmVyIG9mIHJldnMgYW5kIGxvY2FsY291bnRzIGRvbid0IG1hdGNoIGluICVzIiAlIHBuKQorICAgICAgICByZXR1cm4KKworICAgIHZlcnNpb24gPSBlLmRhdGEuZ2V0VmFyKCdQUkFVVE9JTlgnLCBUcnVlKQorICAgIHNyY3JldiA9IGJiLmZldGNoMi5nZXRfc3JjcmV2KGUuZGF0YSkKKyAgICBiYXNlX3ZlciA9ICdBVVRPSU5DLSVzJyAlIHZlcnNpb25bOnZlcnNpb24uZmluZChzcmNyZXYpXQorICAgIHBrZ2FyY2ggPSBlLmRhdGEuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKQorICAgIHZhbHVlID0gbWF4KGludChjb3VudCkgZm9yIGNvdW50IGluIGNvdW50cykKKworICAgIGlmIGxlbihyZXZzKSA9PSAxOgorICAgICAgICBpZiBzcmNyZXYgIT0gKCdBVVRPSU5DKyVzJyAlIHJldnNbMF0pOgorICAgICAgICAgICAgdmFsdWUgKz0gMQorICAgIGVsc2U6CisgICAgICAgIHZhbHVlICs9IDEKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihlLmRhdGEuZ2V0VmFyKCdQUlNFUlZfRFVNUERJUicsIFRydWUpKQorICAgIGRmID0gZS5kYXRhLmdldFZhcignTE9DQUxDT1VOVF9EVU1QRklMRScsIFRydWUpCisgICAgZmxvY2sgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBkZikKKyAgICB3aXRoIG9wZW4oZGYsICdhJykgYXMgZmQ6CisgICAgICAgIGZkLndyaXRlKCdQUkFVVE8kJXMkJXMkJXMgPSAiJXMiXG4nICUKKyAgICAgICAgICAgICAgICAoYmFzZV92ZXIsIHBrZ2FyY2gsIHNyY3Jldiwgc3RyKHZhbHVlKSkpCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShmbG9jaykKK30KKworYWRkaGFuZGxlciBtaWdyYXRlX2xvY2FsY291bnRfaGFuZGxlcgorbWlncmF0ZV9sb2NhbGNvdW50X2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQYXJzZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbWltZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjFjNzNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21pbWUuYmJjbGFzcwpAQCAtMCwwICsxLDU2IEBACitERVBFTkRTICs9ICJzaGFyZWQtbWltZS1pbmZvLW5hdGl2ZSBzaGFyZWQtbWltZS1pbmZvIgorCittaW1lX3Bvc3RpbnN0KCkgeworaWYgWyAiJDEiID0gY29uZmlndXJlIF07IHRoZW4KKwlVUERBVEVNSU1FREI9YHdoaWNoIHVwZGF0ZS1taW1lLWRhdGFiYXNlYAorCWlmIFsgLXggIiRVUERBVEVNSU1FREIiIF0gOyB0aGVuCisJCWVjaG8gIlVwZGF0aW5nIE1JTUUgZGF0YWJhc2UuLi4gdGhpcyBtYXkgdGFrZSBhIHdoaWxlLiIKKwkJJFVQREFURU1JTUVEQiAkRCR7ZGF0YWRpcn0vbWltZQorCWVsc2UKKwkJZWNobyAiTWlzc2luZyB1cGRhdGUtbWltZS1kYXRhYmFzZSwgdXBkYXRlIG9mIG1pbWUgZGF0YWJhc2UgZmFpbGVkISIKKwkJZXhpdCAxCisJZmkKK2ZpCit9CisKK21pbWVfcG9zdHJtKCkgeworaWYgWyAiJDEiID0gcmVtb3ZlIF0gfHwgWyAiJDEiID0gdXBncmFkZSBdOyB0aGVuCisJVVBEQVRFTUlNRURCPWB3aGljaCB1cGRhdGUtbWltZS1kYXRhYmFzZWAKKwlpZiBbIC14ICIkVVBEQVRFTUlNRURCIiBdIDsgdGhlbgorCQllY2hvICJVcGRhdGluZyBNSU1FIGRhdGFiYXNlLi4uIHRoaXMgbWF5IHRha2UgYSB3aGlsZS4iCisJCSRVUERBVEVNSU1FREIgJEQke2RhdGFkaXJ9L21pbWUKKwllbHNlCisJCWVjaG8gIk1pc3NpbmcgdXBkYXRlLW1pbWUtZGF0YWJhc2UsIHVwZGF0ZSBvZiBtaW1lIGRhdGFiYXNlIGZhaWxlZCEiCisJCWV4aXQgMQorCWZpCitmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfYXBwZW5kICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBwa2dkZXN0ID0gIGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgIG1pbWVfZGlyID0gJyVzLyVzL3Vzci9zaGFyZS9taW1lL3BhY2thZ2VzJyAlIChwa2dkZXN0LCBwa2cpCisgICAgICAgIG1pbWVzID0gW10KKyAgICAgICAgbWltZV9yZSA9IHJlLmNvbXBpbGUoIi4qXC54bWwkIikKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobWltZV9kaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihtaW1lX2Rpcik6CisgICAgICAgICAgICAgICAgaWYgbWltZV9yZS5tYXRjaChmKToKKyAgICAgICAgICAgICAgICAgICAgbWltZXMuYXBwZW5kKGYpCisgICAgICAgIGlmIG1pbWVzOgorICAgICAgICAgICAgYmIubm90ZSgiYWRkaW5nIG1pbWUgcG9zdGluc3QgYW5kIHBvc3RybSBzY3JpcHRzIHRvICVzIiAlIHBrZykKKyAgICAgICAgICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wb3N0aW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwb3N0aW5zdCArPSBkLmdldFZhcignbWltZV9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisgICAgICAgICAgICBwb3N0cm0gPSBkLmdldFZhcigncGtnX3Bvc3RybV8lcycgJSBwa2csIFRydWUpCisgICAgICAgICAgICBpZiBub3QgcG9zdHJtOgorICAgICAgICAgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RybSArPSBkLmdldFZhcignbWltZV9wb3N0cm0nLCBUcnVlKQorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCisgICAgICAgICAgICBiYi5ub3RlKCJhZGRpbmcgc2hhcmVkLW1pbWUtaW5mby1kYXRhIGRlcGVuZGVuY3kgdG8gJXMiICUgcGtnKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICIgc2hhcmVkLW1pbWUtaW5mby1kYXRhIikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9taXJyb3JzLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NmMwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbWlycm9ycy5iYmNsYXNzCkBAIC0wLDAgKzEsNjcgQEAKK01JUlJPUlMgKz0gIlwKKyR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDEyMDMyOFQwOTI3NTJaL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDExMDEyN1QwODQyNTdaL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4tYXJjaGl2ZS8yMDA5MDgwMlQwMDQxNTNaL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuYXUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5jbC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmhyLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuZmkuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5oay5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmh1LmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuaWUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5pdC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLmpwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAubm8uZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5wbC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnJvLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAuc2kuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0RFQklBTl9NSVJST1J9CWZ0cDovL2Z0cC5lcy5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIFxuIFwKKyR7REVCSUFOX01JUlJPUn0JZnRwOi8vZnRwLnNlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wgXG4gXAorJHtERUJJQU5fTUlSUk9SfQlmdHA6Ly9mdHAudHIuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCBcbiBcCiske0dOVV9NSVJST1J9CWZ0cDovL21pcnJvcnMua2VybmVsLm9yZy9nbnUgXG4gXAorJHtLRVJORUxPUkdfTUlSUk9SfQlodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgZnRwOi8vZnRwLmZyYW5rZW4uZGUvcHViL2NyeXB0L21pcnJvci9mdHAuZ251cGcub3JnL2djcnlwdC8gXG4gXAorZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvICAgICBmdHA6Ly9mdHAuc3VyZm5ldC5ubC9wdWIvc2VjdXJpdHkvZ251cGcvIFxuIFwKK2Z0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyAgICAgaHR0cDovL2d1bHVzLlVTaGVyYnJvb2tlLmNhL3B1Yi9hcHBsL0dudVBHLyBcbiBcCitmdHA6Ly9kYW50ZS5jdGFuLm9yZy90ZXgtYXJjaGl2ZSBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3RleC9DVEFOIFxuIFwKK2Z0cDovL2RhbnRlLmN0YW4ub3JnL3RleC1hcmNoaXZlIGh0dHA6Ly9zdW5zaXRlLnN1dC5hYy5qcC9wdWIvYXJjaGl2ZXMvY3Rhbi8gXG4gXAorZnRwOi8vZGFudGUuY3Rhbi5vcmcvdGV4LWFyY2hpdmUgaHR0cDovL2N0YW4udW5zdy5lZHUuYXUvIFxuIFwKK2Z0cDovL2Z0cC5nbnV0bHMub3JnL2djcnlwdC9nbnV0bHMgZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvZ251dGxzLyBcbiBcCitodHRwOi8vZnRwLmluZm8temlwLm9yZy9wdWIvaW5mb3ppcC9zcmMvIGh0dHA6Ly9taXJyb3Iuc3dpdGNoLmNoL2Z0cC9taXJyb3IvaW5mb3ppcC9zcmMvIFxuIFwKK2h0dHA6Ly9mdHAuaW5mby16aXAub3JnL3B1Yi9pbmZvemlwL3NyYy8gZnRwOi8vc3Vuc2l0ZS5pY20uZWR1LnBsL3B1Yi91bml4L2FyY2hpdmluZy9pbmZvLXppcC9zcmMvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuY2VyaWFzLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvc3lzdXRpbHMvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50YXUuYWMuaWwvcHViL3VuaXgvYWRtaW4vIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuY2VydC5kZm4uZGUvcHViL3Rvb2xzL2FkbWluL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAuZnUtYmVybGluLmRlL3B1Yi91bml4L3Rvb2xzL2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9mdHAua2Fpem8ub3JnL3B1Yi9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vZnRwLnR1LWRhcm1zdGFkdC5kZS9wdWIvc3lzYWRtaW4vbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL2Z0cC50dXgub3JnL3B1Yi9zaXRlcy92aWMuY2MucHVyZHVlLmVkdS90b29scy91bml4L2xzb2YvIFxuIFwKK2Z0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvICBmdHA6Ly9nZC50dXdpZW4uYWMuYXQvdXRpbHMvYWRtaW4tdG9vbHMvbHNvZi8gXG4gXAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi8gIGZ0cDovL3N1bnNpdGUudWFsYmVydGEuY2EvcHViL01pcnJvci9sc29mLyBcbiBcCitmdHA6Ly9sc29mLml0YXAucHVyZHVlLmVkdS9wdWIvdG9vbHMvdW5peC9sc29mLyAgZnRwOi8vdGhlLndpcmV0YXBwZWQubmV0L3B1Yi9zZWN1cml0eS9ob3N0LXNlY3VyaXR5L2xzb2YvIFxuIFwKK2h0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0ICBodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2Rpc3QgXG4gXAoraHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvd2F0Y2hkb2cvIGh0dHA6Ly9mb3NzaWVzLm9yZy9saW51eC9taXNjLyBcbiBcCiske1NBVkFOTkFIX0dOVV9NSVJST1J9IGh0dHA6Ly9kb3dubG9hZC1taXJyb3Iuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcyBcbiBcCiske1NBVkFOTkFIX05PTkdOVV9NSVJST1J9IGh0dHA6Ly9kb3dubG9hZC1taXJyb3Iuc2F2YW5uYWgubm9uZ251Lm9yZy9yZWxlYXNlcyBcbiBcCitjdnM6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitzdm46Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitnaXQ6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitoZzovLy4qLy4qICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitienI6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitwNDovLy4qLy4qICAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitvc2M6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitodHRwcz8kOi8vLiovLiogaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitmdHA6Ly8uKi8uKiAgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzLyBcbiBcCitjdnM6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorc3ZuOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2dpdDovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitoZzovLy4qLy4qICAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAorYnpyOi8vLiovLiogICAgIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK3A0Oi8vLiovLiogICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCitvc2M6Ly8uKi8uKiAgICAgaHR0cDovL3NvdXJjZXMub3BlbmVtYmVkZGVkLm9yZy8gXG4gXAoraHR0cHM/JDovLy4qLy4qIGh0dHA6Ly9zb3VyY2VzLm9wZW5lbWJlZGRlZC5vcmcvIFxuIFwKK2Z0cDovLy4qLy4qICAgICBodHRwOi8vc291cmNlcy5vcGVuZW1iZWRkZWQub3JnLyBcbiBcCiske0NQQU5fTUlSUk9SfSAgaHR0cDovL2NwYW4ubWV0YWNwYW4ub3JnLyBcbiBcCiske0NQQU5fTUlSUk9SfSAgaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOLyBcbiBcCisiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tb2R1bGUtYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTI2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbW9kdWxlLWJhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDI3IEBACitpbmhlcml0IGtlcm5lbC1hcmNoCisKKyMgVGhpcyBpcyBpbnN0ZWFkIG9mIERFUEVORFMgPSAidmlydHVhbC9rZXJuZWwiCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitleHBvcnQgT1MgPSAiJHtUQVJHRVRfT1N9IgorZXhwb3J0IENST1NTX0NPTVBJTEUgPSAiJHtUQVJHRVRfUFJFRklYfSIKKworIyBUaGlzIHBvaW50cyB0byB0aGUgYnVpbGQgYXJ0ZWZhY3RzIGZyb20gdGhlIG1haW4ga2VybmVsIGJ1aWxkCisjIHN1Y2ggYXMgLmNvbmZpZyBhbmQgU3lzdGVtLm1hcAorIyBDb25mdXNpbmdseSBpdCBpcyBub3QgdGhlIG1vZHVsZSBidWlsZCBvdXRwdXQgKHdoaWNoIGlzICR7Qn0pIGJ1dAorIyB3ZSBkaWRuJ3QgcGljayB0aGUgbmFtZS4KK2V4cG9ydCBLQlVJTERfT1VUUFVUID0gIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorCitleHBvcnQgS0VSTkVMX1ZFUlNJT04gPSAiJHtAYmFzZV9yZWFkX2ZpbGUoJyR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9L2tlcm5lbC1hYml2ZXJzaW9uJyl9IgorS0VSTkVMX09CSkVDVF9TVUZGSVggPSAiLmtvIgorCisjIGtlcm5lbCBtb2R1bGVzIGFyZSBnZW5lcmFsbHkgbWFjaGluZSBzcGVjaWZpYworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBGdW5jdGlvbiB0byBlbnN1cmUgdGhlIGtlcm5lbCBzY3JpcHRzIGFyZSBjcmVhdGVkLiBFeHBlY3RlZCB0bworIyBiZSBjYWxsZWQgYmVmb3JlIGRvX2NvbXBpbGUuIFNlZSBtb2R1bGUuYmJjbGFzcyBmb3IgYW4gZXhtYXBsZS4KK2RvX21ha2Vfc2NyaXB0cygpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyAKKwltYWtlIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkgICAgICAgICAgIC1DICR7U1RBR0lOR19LRVJORUxfRElSfSBPPSR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IHNjcmlwdHMKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tb2R1bGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTUyYzBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL21vZHVsZS5iYmNsYXNzCkBAIC0wLDAgKzEsMzIgQEAKK2luaGVyaXQgbW9kdWxlLWJhc2Uga2VybmVsLW1vZHVsZS1zcGxpdAorCithZGR0YXNrIG1ha2Vfc2NyaXB0cyBhZnRlciBkb19wYXRjaCBiZWZvcmUgZG9fY29tcGlsZQorZG9fbWFrZV9zY3JpcHRzW2xvY2tmaWxlc10gPSAiJHtUTVBESVJ9L2tlcm5lbC1zY3JpcHRzLmxvY2siCitkb19tYWtlX3NjcmlwdHNbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitFWFRSQV9PRU1BS0UgKz0gIktFUk5FTF9TUkM9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorCittb2R1bGVfZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCW9lX3J1bm1ha2UgS0VSTkVMX1BBVEg9JHtTVEFHSU5HX0tFUk5FTF9ESVJ9ICAgXAorCQkgICBLRVJORUxfVkVSU0lPTj0ke0tFUk5FTF9WRVJTSU9OfSAgICBcCisJCSAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkJICAgQVI9IiR7S0VSTkVMX0FSfSIgXAorCSAgICAgICAgICAgTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBcCisJCSAgICR7TUFLRV9UQVJHRVRTfQorfQorCittb2R1bGVfZG9faW5zdGFsbCgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCW9lX3J1bm1ha2UgREVQTU9EPWVjaG8gSU5TVEFMTF9NT0RfUEFUSD0iJHtEfSIgXAorCSAgICAgICAgICAgQ0M9IiR7S0VSTkVMX0NDfSIgTEQ9IiR7S0VSTkVMX0xEfSIgXAorCSAgICAgICAgICAgTz0ke1NUQUdJTkdfS0VSTkVMX0JVSUxERElSfSBcCisJICAgICAgICAgICBtb2R1bGVzX2luc3RhbGwKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb21waWxlIGRvX2luc3RhbGwKKworIyBhZGQgYWxsIHNwbGl0dGVkIG1vZHVsZXMgdG8gUE4gUkRFUEVORFMsIFBOIGNhbiBiZSBlbXB0eSBub3cKK0tFUk5FTF9NT0RVTEVTX01FVEFfUEFDS0FHRSA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiIKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9tdWx0aWxpYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjFkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWIuYmJjbGFzcwpAQCAtMCwwICsxLDE1MSBAQAorcHl0aG9uIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyICgpIHsKKyAgICBjbHMgPSBlLmRhdGEuZ2V0VmFyKCJCQkVYVEVORENVUlIiLCBUcnVlKQorICAgIHZhcmlhbnQgPSBlLmRhdGEuZ2V0VmFyKCJCQkVYVEVORFZBUklBTlQiLCBUcnVlKQorICAgIGlmIGNscyAhPSAibXVsdGlsaWIiIG9yIG5vdCB2YXJpYW50OgorICAgICAgICByZXR1cm4KKworICAgIGUuZGF0YS5zZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIGUuZGF0YS5nZXRWYXIoJ1NUQUdJTkdfS0VSTkVMX0RJUicsIFRydWUpKQorCisgICAgIyBUaGVyZSBzaG91bGQgb25seSBiZSBvbmUga2VybmVsIGluIG11bHRpbGliIGNvbmZpZ3MKKyAgICAjIFdlIGFsc28gc2tpcCBtdWx0aWxpYiBzZXR1cCBmb3IgbW9kdWxlIHBhY2thZ2VzLgorICAgIHByb3ZpZGVzID0gKGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiAidmlydHVhbC9rZXJuZWwiIGluIHByb3ZpZGVzIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ21vZHVsZS1iYXNlJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIldlIHNob3VsZG4ndCBoYXZlIG11bHRpbGliIHZhcmlhbnRzIGZvciB0aGUga2VybmVsIikKKworICAgIHNhdmVfdmFyX25hbWU9ZS5kYXRhLmdldFZhcigiTVVMVElMSUJfU0FWRV9WQVJOQU1FIiwgVHJ1ZSkgb3IgIiIKKyAgICBmb3IgbmFtZSBpbiBzYXZlX3Zhcl9uYW1lLnNwbGl0KCk6CisgICAgICAgIHZhbD1lLmRhdGEuZ2V0VmFyKG5hbWUsIFRydWUpCisgICAgICAgIGlmIHZhbDoKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIobmFtZSArICJfTVVMVElMSUJfT1JJR0lOQUwiLCB2YWwpCisKKyAgICBvdmVycmlkZXMgPSBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkKKyAgICBwbiA9IGUuZGF0YS5nZXRWYXIoIlBOIiwgRmFsc2UpCisgICAgb3ZlcnJpZGVzID0gb3ZlcnJpZGVzLnJlcGxhY2UoInBuLSR7UE59IiwgInBuLSR7UE59OnBuLSIgKyBwbikKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdpbWFnZScsIGUuZGF0YSk6CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgdmFyaWFudCArICItIikKKyAgICAgICAgZS5kYXRhLnNldFZhcigiUE4iLCB2YXJpYW50ICsgIi0iICsgZS5kYXRhLmdldFZhcigiUE4iLCBGYWxzZSkpCisgICAgICAgIHRhcmdldF92ZW5kb3IgPSBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SXyIgKyAidmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50LCBGYWxzZSkKKyAgICAgICAgaWYgdGFyZ2V0X3ZlbmRvcjoKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCB0YXJnZXRfdmVuZG9yKQorICAgICAgICByZXR1cm4KKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZS5kYXRhKToKKyAgICAgICAgZS5kYXRhLnNldFZhcigiTUxQUkVGSVgiLCB2YXJpYW50ICsgIi0iKQorICAgICAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50CisgICAgICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGUuZGF0YSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBlLmRhdGEpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiV2UgY2FuJ3QgZXh0ZW5kIG5hdGl2ZSByZWNpcGVzIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGUuZGF0YSkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBlLmRhdGEpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiV2UgY2FuJ3QgZXh0ZW5kIG5hdGl2ZXNkayByZWNpcGVzIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBlLmRhdGEpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZS5kYXRhKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIkRvbid0IGV4dGVuZCBhbGxhcmNoIHJlY2lwZXMgd2hpY2ggYXJlIG5vdCBwYWNrYWdlZ3JvdXBzIikKKworCisgICAgIyBFeHBhbmQgdGhpcyBzaW5jZSB0aGlzIHdvbid0IHdvcmsgY29ycmVjdGx5IG9uY2Ugd2Ugc2V0IGEgbXVsdGlsaWIgaW50byBwbGFjZQorICAgIGUuZGF0YS5zZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgZS5kYXRhLmdldFZhcigiQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMiLCBUcnVlKSkKKyAKKyAgICBvdmVycmlkZSA9ICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyB2YXJpYW50CisKKyAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIHZhcmlhbnQgKyAiLSIpCisgICAgZS5kYXRhLnNldFZhcigiUE4iLCB2YXJpYW50ICsgIi0iICsgZS5kYXRhLmdldFZhcigiUE4iLCBGYWxzZSkpCisgICAgZS5kYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgZS5kYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisKKyAgICAjIEV4cGFuZCB0aGUgV0hJVEVMSVNUcyB3aXRoIG11bHRpbGliIHByZWZpeAorICAgIGZvciB3aGl0ZWxpc3QgaW4gWyJIT1NUVE9PTFNfV0hJVEVMSVNUX0dQTC0zLjAiLCAiV0hJVEVMSVNUX0dQTC0zLjAiLCAiTEdQTHYyX1dISVRFTElTVF9HUEwtMy4wIl06CisgICAgICAgIHBrZ3MgPSBlLmRhdGEuZ2V0VmFyKHdoaXRlbGlzdCwgVHJ1ZSkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzLnNwbGl0KCk6CisgICAgICAgICAgICBwa2dzICs9ICIgIiArIHZhcmlhbnQgKyAiLSIgKyBwa2cKKyAgICAgICAgZS5kYXRhLnNldFZhcih3aGl0ZWxpc3QsIHBrZ3MpCisKKyAgICAjIERFRkFVTFRUVU5FIGNhbiBjaGFuZ2UgVEFSR0VUX0FSQ0ggb3ZlcnJpZGUgc28gZXhwYW5kIHRoaXMgbm93IGJlZm9yZSB1cGRhdGVfZGF0YQorICAgIG5ld3R1bmUgPSBlLmRhdGEuZ2V0VmFyKCJERUZBVUxUVFVORV8iICsgInZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdmFyaWFudCwgRmFsc2UpCisgICAgaWYgbmV3dHVuZToKKyAgICAgICAgZS5kYXRhLnNldFZhcigiREVGQVVMVFRVTkUiLCBuZXd0dW5lKQorICAgICAgICBlLmRhdGEuc2V0VmFyKCdERUZBVUxUVFVORV9NTF8lcycgJSB2YXJpYW50LCBuZXd0dW5lKQorfQorCithZGRoYW5kbGVyIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyCittdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIgorCitTVEFHSU5HQ0NfcHJlcGVuZCA9ICIke0JCRVhURU5EVkFSSUFOVH0tIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHZhcmlhbnQgPSBkLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorCisgICAgY2xzZXh0ZW5kID0gb2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBkKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJQQUNLQUdFX0lOU1RBTEwiKQorICAgICAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIkxJTkdVQVNfSU5TVEFMTCIpCisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkRFUEVORFMiKQorICAgICAgICBwaW5zdGFsbCA9IGQuZ2V0VmFyKCJMSU5HVUFTX0lOU1RBTEwiLCBUcnVlKSArICIgIiArIGQuZ2V0VmFyKCJQQUNLQUdFX0lOU1RBTEwiLCBUcnVlKQorICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9JTlNUQUxMIiwgcGluc3RhbGwpCisgICAgICAgIGQuc2V0VmFyKCJMSU5HVUFTX0lOU1RBTEwiLCAiIikKKyAgICAgICAgIyBGSVhNRSwgd2UgbmVlZCB0byBtYXAgdGhpcyB0byBzb21ldGhpbmcsIG5vdCBkZWxldGUgaXQhCisgICAgICAgIGQuc2V0VmFyKCJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiLCAiIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BvcHVsYXRlX3Nka19iYXNlJywgZCk6CisgICAgICAgIGNsc2V4dGVuZC5tYXBfZGVwZW5kc192YXJpYWJsZSgiVE9PTENIQUlOX1RBUkdFVF9UQVNLIikKKyAgICAgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkiKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnaW1hZ2UnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBjbHNleHRlbmQubWFwX2RlcGVuZHNfdmFyaWFibGUoIkRFUEVORFMiKQorICAgIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlBST1ZJREVTIikKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgY2xzZXh0ZW5kLnJlbmFtZV9wYWNrYWdlcygpCisgICAgY2xzZXh0ZW5kLnJlbmFtZV9wYWNrYWdlX3ZhcmlhYmxlcygoZC5nZXRWYXIoIlBBQ0tBR0VWQVJTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkpCisKKyAgICBjbHNleHRlbmQubWFwX3BhY2thZ2V2YXJzKCkKKyAgICBjbHNleHRlbmQubWFwX3JlZ2V4cF92YXJpYWJsZSgiUEFDS0FHRVNfRFlOQU1JQyIpCisgICAgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUEFDS0FHRV9JTlNUQUxMIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJJTklUU0NSSVBUX1BBQ0tBR0VTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJVU0VSQUREX1BBQ0tBR0VTIikKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJTWVNURU1EX1BBQ0tBR0VTIikKK30KKworUEFDS0FHRUZVTkNTX2FwcGVuZCA9ICIgZG9fcGFja2FnZV9xYV9tdWx0aWxpYiIKKworcHl0aG9uIGRvX3BhY2thZ2VfcWFfbXVsdGlsaWIoKSB7CisKKyAgICBkZWYgY2hlY2tfbWxwcmVmaXgocGtnLCB2YXIsIG1scHJlZml4KToKKyAgICAgICAgdmFsdWVzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKSBvciBkLmdldFZhcih2YXIsIFRydWUpIG9yICIiKQorICAgICAgICBjYW5kaWRhdGVzID0gW10KKyAgICAgICAgZm9yIGkgaW4gdmFsdWVzOgorICAgICAgICAgICAgaWYgaS5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgIGkgPSBpW2xlbigndmlydHVhbC8nKTpdCisgICAgICAgICAgICBpZiAobm90IGkuc3RhcnRzd2l0aCgna2VybmVsLW1vZHVsZScpKSBhbmQgKG5vdCBpLnN0YXJ0c3dpdGgobWxwcmVmaXgpKSBhbmQgXAorICAgICAgICAgICAgICAgIChub3QgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBpKSBhbmQgKG5vdCBpLnN0YXJ0c3dpdGgoIm5hdGl2ZXNkay0iKSkgYW5kIFwKKyAgICAgICAgICAgICAgICAobm90IGkuc3RhcnRzd2l0aCgicnRsZCIpKSBhbmQgKG5vdCBpLnN0YXJ0c3dpdGgoJ2tlcm5lbC12bWxpbnV4JykpOgorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGkpCisgICAgICAgIGlmIGxlbihjYW5kaWRhdGVzKSA+IDA6CisgICAgICAgICAgICBtc2cgPSAiJXMgcGFja2FnZSAlcyAtIHN1c3BpY2lvdXMgdmFsdWVzICclcycgaW4gJXMiIFwKKyAgICAgICAgICAgICAgICAgICAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCAnICcuam9pbihjYW5kaWRhdGVzKSwgdmFyKQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoIm11bHRpbGliIiwgbXNnLCBkKQorCisgICAgbWwgPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKQorICAgIGlmIG5vdCBtbDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSREVQRU5EUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSUFJPVklERVMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlJFQ09NTUVORFMnLCBtbCkKKyAgICAgICAgY2hlY2tfbWxwcmVmaXgocGtnLCAnUlNVR0dFU1RTJywgbWwpCisgICAgICAgIGNoZWNrX21scHJlZml4KHBrZywgJ1JSRVBMQUNFUycsIG1sKQorICAgICAgICBjaGVja19tbHByZWZpeChwa2csICdSQ09ORkxJQ1RTJywgbWwpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfZ2xvYmFsLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyY2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9tdWx0aWxpYl9nbG9iYWwuYmJjbGFzcwpAQCAtMCwwICsxLDE2MiBAQAorZGVmIHByZWZlcnJlZF9tbF91cGRhdGVzKGQpOgorICAgICMgSWYgYW55IFBSRUZFUlJFRF9QUk9WSURFUiBvciBQUkVGRVJSRURfVkVSU0lPTiBhcmUgc2V0LAorICAgICMgd2UgbmVlZCB0byBtaXJyb3IgdGhlc2UgdmFyaWFibGVzIGluIHRoZSBtdWx0aWxpYiBjYXNlOworICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKSBvciAiIgorICAgIGlmIG5vdCBtdWx0aWxpYnM6CisgICAgICAgIHJldHVybgorCisgICAgcHJlZml4ZXMgPSBbXQorICAgIGZvciBleHQgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgIGVleHQgPSBleHQuc3BsaXQoJzonKQorICAgICAgICBpZiBsZW4oZWV4dCkgPiAxIGFuZCBlZXh0WzBdID09ICdtdWx0aWxpYic6CisgICAgICAgICAgICBwcmVmaXhlcy5hcHBlbmQoZWV4dFsxXSkKKworICAgIHZlcnNpb25zID0gW10KKyAgICBwcm92aWRlcnMgPSBbXQorICAgIGZvciB2IGluIGQua2V5cygpOgorICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIlBSRUZFUlJFRF9WRVJTSU9OXyIpOgorICAgICAgICAgICAgdmVyc2lvbnMuYXBwZW5kKHYpCisgICAgICAgIGlmIHYuc3RhcnRzd2l0aCgiUFJFRkVSUkVEX1BST1ZJREVSXyIpOgorICAgICAgICAgICAgcHJvdmlkZXJzLmFwcGVuZCh2KQorCisgICAgZm9yIHYgaW4gdmVyc2lvbnM6CisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKHYsIEZhbHNlKQorICAgICAgICBwa2cgPSB2LnJlcGxhY2UoIlBSRUZFUlJFRF9WRVJTSU9OXyIsICIiKQorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoIi1uYXRpdmUiKSBvciAiLWNyb3Nzc2RrLSIgaW4gcGtnIG9yIHBrZy5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiAnLWNyb3NzLScgaW4gcGtnIGFuZCAnJHsnIGluIHBrZzoKKyAgICAgICAgICAgIGZvciBwIGluIHByZWZpeGVzOgorICAgICAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgICAgIG92ZXJyaWRlID0gIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHAKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyBvdmVycmlkZSkKKyAgICAgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBpZiAiLWNhbmFkaWFuLSIgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCh2KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHYpLnJlcGxhY2UoIlBSRUZFUlJFRF9WRVJTSU9OXyIsICJQUkVGRVJSRURfVkVSU0lPTl8iICsgcCArICctJykKKyAgICAgICAgICAgICAgICBpZiBuZXduYW1lICE9IHY6CisgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCA9IGxvY2FsZGF0YS5leHBhbmQodmFsKQorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcihuZXduYW1lLCBuZXd2YWwpCisgICAgICAgICAgICAjIEF2b2lkIGZ1dHVyZSB2YXJpYWJsZSBrZXkgZXhwYW5zaW9uCisgICAgICAgICAgICB2ZXhwID0gZC5leHBhbmQodikKKyAgICAgICAgICAgIGlmIHYgIT0gdmV4cCBhbmQgZC5nZXRWYXIodiwgRmFsc2UpOgorICAgICAgICAgICAgICAgIGQucmVuYW1lVmFyKHYsIHZleHApCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIG5ld25hbWUgPSAiUFJFRkVSUkVEX1ZFUlNJT05fIiArIHAgKyAiLSIgKyBwa2cKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgdmFsKQorCisgICAgZm9yIHByb3YgaW4gcHJvdmlkZXJzOgorICAgICAgICB2YWwgPSBkLmdldFZhcihwcm92LCBGYWxzZSkKKyAgICAgICAgcGtnID0gcHJvdi5yZXBsYWNlKCJQUkVGRVJSRURfUFJPVklERVJfIiwgIiIpCisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgiLW5hdGl2ZSIpIG9yICItY3Jvc3NzZGstIiBpbiBwa2cgb3IgcGtnLnN0YXJ0c3dpdGgoKCJuYXRpdmVzZGstIiwgInZpcnR1YWwvbmF0aXZlc2RrLSIpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmICdjcm9zcy1jYW5hZGlhbicgaW4gcGtnOgorICAgICAgICAgICAgZm9yIHAgaW4gcHJlZml4ZXM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgICAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgcAorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArIG92ZXJyaWRlKQorICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHByb3YpCisgICAgICAgICAgICAgICAgaWYgbmV3bmFtZSAhPSBwcm92OgorICAgICAgICAgICAgICAgICAgICBuZXd2YWwgPSBsb2NhbGRhdGEuZXhwYW5kKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbmV3dmFsKQorICAgICAgICAgICAgIyBBdm9pZCBmdXR1cmUgdmFyaWFibGUga2V5IGV4cGFuc2lvbgorICAgICAgICAgICAgcHJvdmV4cCA9IGQuZXhwYW5kKHByb3YpCisgICAgICAgICAgICBpZiBwcm92ICE9IHByb3ZleHAgYW5kIGQuZ2V0VmFyKHByb3YsIEZhbHNlKToKKyAgICAgICAgICAgICAgICBkLnJlbmFtZVZhcihwcm92LCBwcm92ZXhwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdmlydCA9ICIiCisgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKCJ2aXJ0dWFsLyIpOgorICAgICAgICAgICAgcGtnID0gcGtnLnJlcGxhY2UoInZpcnR1YWwvIiwgIiIpCisgICAgICAgICAgICB2aXJ0ID0gInZpcnR1YWwvIgorICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIGlmIHBrZyAhPSAia2VybmVsIjoKKyAgICAgICAgICAgICAgICBuZXd2YWwgPSBwICsgIi0iICsgdmFsCisKKyAgICAgICAgICAgICMgaW1wbGVtZW50IHZhcmlhYmxlIGtleXMKKyAgICAgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICAgICAgb3ZlcnJpZGUgPSAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgcAorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgbG9jYWxkYXRhLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAgICAgICAgIG5ld25hbWUgPSBsb2NhbGRhdGEuZXhwYW5kKHByb3YpCisgICAgICAgICAgICBpZiBuZXduYW1lICE9IHByb3YgYW5kIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbG9jYWxkYXRhLmV4cGFuZChuZXd2YWwpKQorCisgICAgICAgICAgICAjIGltcGxlbWVudCBhbHRlcm5hdGl2ZSBtdWx0aWxpYiBuYW1lCisgICAgICAgICAgICBuZXduYW1lID0gbG9jYWxkYXRhLmV4cGFuZCgiUFJFRkVSUkVEX1BST1ZJREVSXyIgKyB2aXJ0ICsgcCArICItIiArIHBrZykKKyAgICAgICAgICAgIGlmIG5vdCBkLmdldFZhcihuZXduYW1lLCBGYWxzZSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXIobmV3bmFtZSwgbG9jYWxkYXRhLmV4cGFuZChuZXd2YWwpKQorICAgICAgICAjIEF2b2lkIGZ1dHVyZSB2YXJpYWJsZSBrZXkgZXhwYW5zaW9uCisgICAgICAgIHByb3ZleHAgPSBkLmV4cGFuZChwcm92KQorICAgICAgICBpZiBwcm92ICE9IHByb3ZleHAgYW5kIGQuZ2V0VmFyKHByb3YsIEZhbHNlKToKKyAgICAgICAgICAgIGQucmVuYW1lVmFyKHByb3YsIHByb3ZleHApCisKKworICAgIG1wID0gKGQuZ2V0VmFyKCJNVUxUSV9QUk9WSURFUl9XSElURUxJU1QiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGV4dHJhbXAgPSBbXQorICAgIGZvciBwIGluIG1wOgorICAgICAgICBpZiBwLmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zc3Nkay0iIGluIHAgb3IgcC5zdGFydHN3aXRoKCgibmF0aXZlc2RrLSIsICJ2aXJ0dWFsL25hdGl2ZXNkay0iKSkgb3IgJ2Nyb3NzLWNhbmFkaWFuJyBpbiBwOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdmlydCA9ICIiCisgICAgICAgIGlmIHAuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHAgPSBwLnJlcGxhY2UoInZpcnR1YWwvIiwgIiIpCisgICAgICAgICAgICB2aXJ0ID0gInZpcnR1YWwvIgorICAgICAgICBmb3IgcHJlZiBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgIGV4dHJhbXAuYXBwZW5kKHZpcnQgKyBwcmVmICsgIi0iICsgcCkKKyAgICBkLnNldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgIiAiLmpvaW4obXAgKyBleHRyYW1wKSkKKworcHl0aG9uIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX3ZlbmRvciAoKSB7CisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5Db25maWdQYXJzZWQpOgorICAgICAgICBmb3IgdiBpbiBlLmRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfVkVORE9SX3ZpcnRjbGFzcy1tdWx0aWxpYi0iICsgdiwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZS5kYXRhLnNldFZhcigiVEFSR0VUX1ZFTkRPUl92aXJ0Y2xhc3MtbXVsdGlsaWItIiArIHYsIGUuZGF0YS5nZXRWYXIoIlRBUkdFVF9WRU5ET1IiLCBGYWxzZSkgKyAibWwiICsgdikKKyAgICAgICAgcHJlZmVycmVkX21sX3VwZGF0ZXMoZS5kYXRhKQorfQorYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl92ZW5kb3IKK211bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX3ZlbmRvcltldmVudG1hc2tdID0gImJiLmV2ZW50LkNvbmZpZ1BhcnNlZCIKKworcHl0aG9uIG11bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX2dsb2JhbCAoKSB7CisgICAgaWYgbm90IGUuZGF0YToKKyAgICAgICAgcmV0dXJuCisKKyAgICB2YXJpYW50ID0gZS5kYXRhLmdldFZhcigiQkJFWFRFTkRWQVJJQU5UIiwgVHJ1ZSkKKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUmVjaXBlUGFyc2VkKSBhbmQgbm90IHZhcmlhbnQ6CisgICAgICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2tlcm5lbCcsIGUuZGF0YSkgb3IgXAorICAgICAgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbW9kdWxlLWJhc2UnLCBlLmRhdGEpIG9yIFwKKyAgICAgICAgICAgIChiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhbGxhcmNoJywgZS5kYXRhKSBhbmRcCisgICAgICAgICAgICAgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ3BhY2thZ2Vncm91cCcsIGUuZGF0YSkpOgorICAgICAgICAgICAgdmFyaWFudHMgPSAoZS5kYXRhLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgICAgICBpbXBvcnQgb2UuY2xhc3NleHRlbmQKKyAgICAgICAgICAgIGNsc2V4dGVuZHMgPSBbXQorICAgICAgICAgICAgZm9yIHZhcmlhbnQgaW4gdmFyaWFudHM6CisgICAgICAgICAgICAgICAgY2xzZXh0ZW5kcy5hcHBlbmQob2UuY2xhc3NleHRlbmQuQ2xhc3NFeHRlbmRlcih2YXJpYW50LCBlLmRhdGEpKQorCisgICAgICAgICAgICAjIFByb2Nlc3MgUFJPVklERVMKKyAgICAgICAgICAgIG9yaWdwcm92cyA9IHByb3ZzID0gZS5kYXRhLmdldFZhcigiUFJPVklERVMiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIGNsc2V4dGVuZCBpbiBjbHNleHRlbmRzOgorICAgICAgICAgICAgICAgIHByb3ZzID0gcHJvdnMgKyAiICIgKyBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIsIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlBST1ZJREVTIiwgcHJvdnMpCisKKyAgICAgICAgICAgICMgUHJvY2VzcyBSUFJPVklERVMKKyAgICAgICAgICAgIG9yaWdycHJvdnMgPSBycHJvdnMgPSBlLmRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZm9yIGNsc2V4dGVuZCBpbiBjbHNleHRlbmRzOgorICAgICAgICAgICAgICAgIHJwcm92cyA9IHJwcm92cyArICIgIiArIGNsc2V4dGVuZC5tYXBfdmFyaWFibGUoIlJQUk9WSURFUyIsIHNldHZhcj1GYWxzZSkKKyAgICAgICAgICAgIGlmIHJwcm92cy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlJQUk9WSURFUyIsIHJwcm92cykKKworCSAgICAjIFByb2Nlc3MgUlBST1ZJREVTXyR7UE59Li4uCisgICAgICAgICAgICBmb3IgcGtnIGluIChlLmRhdGEuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIG9yaWdycHJvdnMgPSBycHJvdnMgPSBlLmRhdGEuZ2V0VmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgICAgIGZvciBjbHNleHRlbmQgaW4gY2xzZXh0ZW5kczoKKyAgICAgICAgICAgICAgICAgICAgcnByb3ZzID0gcnByb3ZzICsgIiAiICsgY2xzZXh0ZW5kLm1hcF92YXJpYWJsZSgiUlBST1ZJREVTXyVzIiAlIHBrZywgc2V0dmFyPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICBycHJvdnMgPSBycHJvdnMgKyAiICIgKyBjbHNleHRlbmQuZXh0bmFtZSArICItIiArIHBrZworICAgICAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoIlJQUk9WSURFU18lcyIgJSBwa2csIHJwcm92cykKK30KKworYWRkaGFuZGxlciBtdWx0aWxpYl92aXJ0Y2xhc3NfaGFuZGxlcl9nbG9iYWwKK211bHRpbGliX3ZpcnRjbGFzc19oYW5kbGVyX2dsb2JhbFtldmVudG1hc2tdID0gImJiLmV2ZW50LlJlY2lwZVByZUZpbmFsaXNlIGJiLmV2ZW50LlJlY2lwZVBhcnNlZCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL211bHRpbGliX2hlYWRlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTBhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvbXVsdGlsaWJfaGVhZGVyLmJiY2xhc3MKQEAgLTAsMCArMSw1NCBAQAoraW5oZXJpdCBzaXRlaW5mbworCisjIElmIGFwcGxpY2FibGUgb24gdGhlIGFyY2hpdGVjdHVyZSwgdGhpcyByb3V0aW5lIHdpbGwgcmVuYW1lIHRoZSBoZWFkZXIgYW5kCisjIGFkZCBhIHVuaXF1ZSBpZGVudGlmaWVyIHRvIHRoZSBuYW1lIGZvciB0aGUgQUJJL2JpdHNpemUgdGhhdCBpcyBiZWluZyB1c2VkLgorIyBBIHdyYXBwZXIgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBhcmNoaXRlY3R1cmUgdGhhdCBrbm93cyBob3cgdG8gY2FsbAorIyBhbGwgb2YgdGhlIEFCSSB2YXJpYW50cyBmb3IgdGhhdCBnaXZlbiBhcmNoaXRlY3R1cmUuCisjCitvZV9tdWx0aWxpYl9oZWFkZXIoKSB7CisKKwljYXNlICR7SE9TVF9PU30gaW4KKwkqLW11c2wqKQorCQlyZXR1cm4KKwkJOzsKKwkqKQorCWVzYWMKKyAgICAgICAgIyBXZSB1c2UKKyAgICAgICAgIyBGb3IgQVJNOiBXZSBkb24ndCBzdXBwb3J0IG11bHRpbGliIGJ1aWxkcy4KKyAgICAgICAgIyBGb3IgTUlQUzogIm4zMiIgaXMgYSBzcGVjaWFsIGNhc2UsIHdoaWNoIG5lZWRzIHRvIGJlCisgICAgICAgICMgZGlzdGluY3QgZnJvbSBib3RoIDY0LWJpdCBhbmQgMzItYml0LgorICAgICAgICBjYXNlICR7VEFSR0VUX0FSQ0h9IGluCisgICAgICAgIGFybSopICAgcmV0dXJuCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgbWlwcyopICBjYXNlICIke01JUFNQS0dTRlhfQUJJfSIgaW4KKyAgICAgICAgICAgICAgICAiLW4zMiIpCisgICAgICAgICAgICAgICAgICAgICAgIGlkZW50PW4zMiAgIAorICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQ9JHtTSVRFSU5GT19CSVRTfQorICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAqKSAgICAgIGlkZW50PSR7U0lURUlORk9fQklUU30KKyAgICAgICAgZXNhYworCWlmIGVjaG8gJHtUQVJHRVRfQVJDSH0gfCBncmVwIC1xIGFybTsgdGhlbgorCSAgICByZXR1cm4KKwlmaQorCWZvciBlYWNoX2hlYWRlciBpbiAiJEAiIDsgZG8KKwkgICBpZiBbICEgLWYgIiR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIiIF07IHRoZW4KKwkgICAgICBiYmVycm9yICJvZV9tdWx0aWxpYl9oZWFkZXI6IFVuYWJsZSB0byBmaW5kIGhlYWRlciAkZWFjaF9oZWFkZXIuIgorCSAgICAgIGNvbnRpbnVlCisJICAgZmkKKwkgICBzdGVtPSQoZWNobyAkZWFjaF9oZWFkZXIgfCBzZWQgJ3MjXC5oJCMjJykKKwkgICAjIGlmIG1pcHM2NC9uMzIgc2V0IGlkZW50IHRvIG4zMgorCSAgIG12ICR7RH0vJHtpbmNsdWRlZGlyfS8kZWFjaF9oZWFkZXIgJHtEfS8ke2luY2x1ZGVkaXJ9LyR7c3RlbX0tJHtpZGVudH0uaAorCisJICAgc2VkIC1lICJzI0VOVEVSX0hFQURFUl9GSUxFTkFNRV9IRVJFIyR7c3RlbX0jZyIgJHtDT1JFQkFTRX0vc2NyaXB0cy9tdWx0aWxpYl9oZWFkZXJfd3JhcHBlci5oID4gJHtEfS8ke2luY2x1ZGVkaXJ9LyRlYWNoX2hlYWRlcgorCWRvbmUKK30KKworIyBEZXBlbmRlbmNpZXMgb24gYXJjaCB2YXJpYWJsZXMgbGlrZSBNSVBTUEtHU0ZYX0FCSSBjYW4gYmUgcHJvYmxlbWF0aWMuCisjIFdlIGRvbid0IG5lZWQgbXVsdGlsaWIgaGVhZGVycyBmb3IgbmF0aXZlIGJ1aWxkcyBzbyBicnV0ZSBmb3JjZSB0aGluZ3MuCitvZV9tdWx0aWxpYl9oZWFkZXJfY2xhc3MtbmF0aXZlICgpIHsKKwlyZXR1cm4KK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9uYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2JjZDYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL25hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsMTgzIEBACisjIFdlIHdhbnQgbmF0aXZlIHBhY2thZ2VzIHRvIGJlIHJlbG9jYXRhYmxlCitpbmhlcml0IHJlbG9jYXRhYmxlCisKKyMgTmF0aXZlIHBhY2thZ2VzIGFyZSBidWlsdCBpbmRpcmVjdGx5IHZpYSBkZXBlbmRlbmN5LAorIyBubyBuZWVkIGZvciB0aGVtIHRvIGJlIGEgZGlyZWN0IHRhcmdldCBvZiAnd29ybGQnCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworUEFDS0FHRVMgPSAiIgorUEFDS0FHRVNfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmUgPSAiIgorUEFDS0FHRV9BUkNIID0gIiR7QlVJTERfQVJDSH0iCisKKyMgdXNlZCBieSBjbWFrZSBjbGFzcworT0VDTUFLRV9SUEFUSCA9ICIke2xpYmRpcn0iCitPRUNNQUtFX1JQQVRIX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0iCisKKyMgV2hlbiB0aGlzIGNsYXNzIGhhcyBwYWNrYWdpbmcgZW5hYmxlZCwgc2V0dGluZyAKKyMgUlBST1ZJREVTIGJlY29tZXMgdW5uZWNlc3NhcnkuCitSUFJPVklERVMgPSAiJHtQTn0iCisKK1RBUkdFVF9BUkNIID0gIiR7QlVJTERfQVJDSH0iCitUQVJHRVRfT1MgPSAiJHtCVUlMRF9PU30iCitUQVJHRVRfVkVORE9SID0gIiR7QlVJTERfVkVORE9SfSIKK1RBUkdFVF9QUkVGSVggPSAiJHtCVUlMRF9QUkVGSVh9IgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtCVUlMRF9DQ19BUkNIfSIKK1RBUkdFVF9MRF9BUkNIID0gIiR7QlVJTERfTERfQVJDSH0iCitUQVJHRVRfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorVEFSR0VUX0NQUEZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorVEFSR0VUX0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitUQVJHRVRfQ1hYRkxBR1MgPSAiJHtCVUlMRF9DWFhGTEFHU30iCitUQVJHRVRfTERGTEFHUyA9ICIke0JVSUxEX0xERkxBR1N9IgorVEFSR0VUX0ZQVSA9ICIiCisKK0hPU1RfQVJDSCA9ICIke0JVSUxEX0FSQ0h9IgorSE9TVF9PUyA9ICIke0JVSUxEX09TfSIKK0hPU1RfVkVORE9SID0gIiR7QlVJTERfVkVORE9SfSIKK0hPU1RfUFJFRklYID0gIiR7QlVJTERfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke0JVSUxEX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7QlVJTERfTERfQVJDSH0iCitIT1NUX0FTX0FSQ0ggPSAiJHtCVUlMRF9BU19BUkNIfSIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRF9DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEX0xERkxBR1N9IgorTERGTEFHU19idWlsZC1kYXJ3aW4gPSAiLUwke1NUQUdJTkdfTElCRElSX05BVElWRX0gIgorCitTVEFHSU5HX0JJTkRJUiA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCitTVEFHSU5HX0JJTkRJUl9DUk9TUyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0iCisKKyMgbmF0aXZlIHBrZyBkb2Vzbid0IG5lZWQgdGhlIFRPT0xDSEFJTl9PUFRJT05TLgorVE9PTENIQUlOX09QVElPTlMgPSAiIgorCitERVBFTkRTX0dFVFRFWFQgPSAiZ2V0dGV4dC1uYXRpdmUiCisKKyMgRG9uJ3QgYnVpbGQgcHRlc3QgbmF0aXZlbHkKK1BURVNUX0VOQUJMRUQgPSAiMCIKKworIyBEb24ndCB1c2Ugc2l0ZSBmaWxlcyBmb3IgbmF0aXZlIGJ1aWxkcworZXhwb3J0IENPTkZJR19TSVRFID0gIiR7Q09SRUJBU0V9L21ldGEvc2l0ZS9uYXRpdmUiCisKKyMgc2V0IHRoZSBjb21waWxlciBhcyB3ZWxsLiBJdCBjb3VsZCBoYXZlIGJlZW4gc2V0IHRvIHNvbWV0aGluZyBlbHNlCitleHBvcnQgQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgQ1hYID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBGQyA9ICIke0JVSUxEX0ZDfSIKK2V4cG9ydCBDUFAgPSAiJHtCVUlMRF9DUFB9IgorZXhwb3J0IExEID0gIiR7QlVJTERfTER9IgorZXhwb3J0IENDTEQgPSAiJHtCVUlMRF9DQ0xEfSIKK2V4cG9ydCBBUiA9ICIke0JVSUxEX0FSfSIKK2V4cG9ydCBBUyA9ICIke0JVSUxEX0FTfSIKK2V4cG9ydCBSQU5MSUIgPSAiJHtCVUlMRF9SQU5MSUJ9IgorZXhwb3J0IFNUUklQID0gIiR7QlVJTERfU1RSSVB9IgorZXhwb3J0IE5NID0gIiR7QlVJTERfTk19IgorCisjIFBhdGggcHJlZml4ZXMKK2Jhc2VfcHJlZml4ID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK3ByZWZpeCA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9IgorZXhlY19wcmVmaXggPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSIKKworYmluZGlyID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSIKK3NiaW5kaXIgPSAiJHtTVEFHSU5HX1NCSU5ESVJfTkFUSVZFfSIKK2xpYmRpciA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0iCitpbmNsdWRlZGlyID0gIiR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK3N5c2NvbmZkaXIgPSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9IgorZGF0YWRpciA9ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9IgorCitiYXNlbGliID0gImxpYiIKKworIyBMaWJ0b29sJ3MgZGVmYXVsdCBwYXRocyBhcmUgY29ycmVjdCBmb3IgdGhlIG5hdGl2ZSBtYWNoaW5lCitsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1t1bmV4cG9ydF0gPSAiMSIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPz0gIiIKK2JpbmRpciAuPSAiJHtOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWH0iCitsaWJkaXIgLj0gIiR7TkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVh9IgorbGliZXhlY2RpciAuPSAiJHtOQVRJVkVfUEFDS0FHRV9QQVRIX1NVRkZJWH0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0vIgorCisjIFNpbmNlIHdlIGFjdHVhbGx5IGluc3RhbGwgdGhlc2UgaW50byBzaXR1IHRoZXJlIGlzIG5vIHN0YWdpbmcgcHJlZml4CitTVEFHSU5HX0RJUl9IT1NUID0gIiIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIiCitQS0dfQ09ORklHX0RJUiA9ICIke2xpYmRpcn0vcGtnY29uZmlnIgorCitFWFRSQV9OQVRJVkVfUEtHQ09ORklHX1BBVEggPz0gIiIKK1BLR19DT05GSUdfUEFUSCAuPSAiJHtFWFRSQV9OQVRJVkVfUEtHQ09ORklHX1BBVEh9IgorUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIiCisKKyMgd2UgZG9udCB3YW50IGxpYmMtdWNsaWJjIG9yIGxpYmMtZ2xpYmMgdG8ga2ljayBpbiBmb3IgbmF0aXZlIHJlY2lwZXMKK0xJQkNPVkVSUklERSA9ICIiCitDTEFTU09WRVJSSURFID0gImNsYXNzLW5hdGl2ZSIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorCitQQVRIX3ByZXBlbmQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0cy9uYXRpdmUtaW50ZXJjZXB0OiIKKworcHl0aG9uIG5hdGl2ZV92aXJ0Y2xhc3NfaGFuZGxlciAoKSB7CisgICAgY2xhc3NleHRlbmQgPSBlLmRhdGEuZ2V0VmFyKCdCQkNMQVNTRVhURU5EJywgVHJ1ZSkgb3IgIiIKKyAgICBpZiAibmF0aXZlIiBub3QgaW4gY2xhc3NleHRlbmQ6CisgICAgICAgIHJldHVybgorCisgICAgcG4gPSBlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgaWYgbm90IHBuLmVuZHN3aXRoKCItbmF0aXZlIik6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIG1hcF9kZXBlbmRlbmNpZXModmFybmFtZSwgZCwgc3VmZml4ID0gIiIpOgorICAgICAgICBpZiBzdWZmaXg6CisgICAgICAgICAgICB2YXJuYW1lID0gdmFybmFtZSArICJfIiArIHN1ZmZpeAorICAgICAgICBkZXBzID0gZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGRlcHM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkZXBzKQorICAgICAgICBuZXdkZXBzID0gW10KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgaWYgZGVwID09IHBuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmICItY3Jvc3MtIiBpbiBkZXA6CisgICAgICAgICAgICAgICAgbmV3ZGVwcy5hcHBlbmQoZGVwLnJlcGxhY2UoIi1jcm9zcyIsICItbmF0aXZlIikpCisgICAgICAgICAgICBlbGlmIG5vdCBkZXAuZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXAgKyAiLW5hdGl2ZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKGRlcCkKKyAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgIiAiLmpvaW4obmV3ZGVwcykpCisKKyAgICBlLmRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBlLmRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1uYXRpdmUiKQorCisgICAgbWFwX2RlcGVuZGVuY2llcygiREVQRU5EUyIsIGUuZGF0YSkKKyAgICBmb3IgcGtnIGluIFtlLmRhdGEuZ2V0VmFyKCJQTiIsIFRydWUpLCAiIiwgIiR7UE59Il06CisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJERVBFTkRTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJSRUNPTU1FTkRTIiwgZS5kYXRhLCBwa2cpCisgICAgICAgIG1hcF9kZXBlbmRlbmNpZXMoIlJTVUdHRVNUUyIsIGUuZGF0YSwgcGtnKQorICAgICAgICBtYXBfZGVwZW5kZW5jaWVzKCJSUFJPVklERVMiLCBlLmRhdGEsIHBrZykKKyAgICAgICAgbWFwX2RlcGVuZGVuY2llcygiUlJFUExBQ0VTIiwgZS5kYXRhLCBwa2cpCisKKyAgICBwcm92aWRlcyA9IGUuZGF0YS5nZXRWYXIoIlBST1ZJREVTIiwgVHJ1ZSkKKyAgICBucHJvdmlkZXMgPSBbXQorICAgIGZvciBwcm92IGluIHByb3ZpZGVzLnNwbGl0KCk6CisgICAgICAgIGlmIHByb3YuZmluZChwbikgIT0gLTE6CisgICAgICAgICAgICBucHJvdmlkZXMuYXBwZW5kKHByb3YpCisgICAgICAgIGVsaWYgbm90IHByb3YuZW5kc3dpdGgoIi1uYXRpdmUiKToKKyAgICAgICAgICAgIG5wcm92aWRlcy5hcHBlbmQocHJvdi5yZXBsYWNlKHByb3YsIHByb3YgKyAiLW5hdGl2ZSIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbnByb3ZpZGVzLmFwcGVuZChwcm92KQorICAgIGUuZGF0YS5zZXRWYXIoIlBST1ZJREVTIiwgJyAnLmpvaW4obnByb3ZpZGVzKSkKKworCit9CisKK2FkZGhhbmRsZXIgbmF0aXZlX3ZpcnRjbGFzc19oYW5kbGVyCituYXRpdmVfdmlydGNsYXNzX2hhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWNpcGVQcmVGaW5hbGlzZSIKKworZGVsdGFzayBwYWNrYWdlCitkZWx0YXNrIHBhY2thZ2VkYXRhCitkZWx0YXNrIHBhY2thZ2VfcWEKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9pcGsKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9kZWIKK2RlbHRhc2sgcGFja2FnZV93cml0ZV9ycG0KK2RlbHRhc2sgcGFja2FnZV93cml0ZQorCitkb19wYWNrYWdlZGF0YVtzdGFtcC1leHRyYS1pbmZvXSA9ICIiCitkb19wb3B1bGF0ZV9zeXNyb290W3N0YW1wLWV4dHJhLWluZm9dID0gIiIKKworVVNFX05MUyA9ICJubyIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9uYXRpdmVzZGsuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzRkYTYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL25hdGl2ZXNkay5iYmNsYXNzCkBAIC0wLDAgKzEsOTcgQEAKKyMgU0RLIHBhY2thZ2VzIGFyZSBidWlsdCBlaXRoZXIgZXhwbGljaXRseSBieSB0aGUgdXNlciwKKyMgb3IgaW5kaXJlY3RseSB2aWEgZGVwZW5kZW5jeS4gIE5vIG5lZWQgdG8gYmUgaW4gJ3dvcmxkJy4KK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCitTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1NES19BUkNIfSR7U0RLX1ZFTkRPUn0tJHtTREtfT1N9IgorCisjIGxpYmMgZm9yIHRoZSBTREsgY2FuIGJlIGRpZmZlcmVudCB0byB0aGF0IG9mIHRoZSB0YXJnZXQKK05BVElWRVNES0xJQkMgPz0gImxpYmMtZ2xpYmMiCitMSUJDT1ZFUlJJREUgPSAiOiR7TkFUSVZFU0RLTElCQ30iCitDTEFTU09WRVJSSURFID0gImNsYXNzLW5hdGl2ZXNkayIKK01BQ0hJTkVPVkVSUklERVMgPSAiIgorCisjCisjIFVwZGF0ZSBQQUNLQUdFX0FSQ0ggYW5kIFBBQ0tBR0VfQVJDSFMKKyMKK1BBQ0tBR0VfQVJDSCA9ICIke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0iCitQQUNLQUdFX0FSQ0hTID0gIiR7U0RLX1BBQ0tBR0VfQVJDSFN9IgorCisjCisjIFdlIG5lZWQgY2hycGF0aCA+PSAwLjE0IHRvIGVuc3VyZSB3ZSBjYW4gZGVhbCB3aXRoIDMyIGFuZCA2NCBiaXQKKyMgYmluYXJpZXMKKyMKK0RFUEVORFNfYXBwZW5kID0gIiBjaHJwYXRoLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0VYVFJBTkFUSVZFUEFUSCArPSAiY2hycGF0aC1uYXRpdmUiCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9IgorU1RBR0lOR19ESVJfVEFSR0VUID0gIiR7U1RBR0lOR19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9wa2dkYXRhIgorCitIT1NUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitIT1NUX1ZFTkRPUiA9ICIke1NES19WRU5ET1J9IgorSE9TVF9PUyA9ICIke1NES19PU30iCitIT1NUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorSE9TVF9DQ19BUkNIID0gIiR7U0RLX0NDX0FSQ0h9IgorSE9TVF9MRF9BUkNIID0gIiR7U0RLX0xEX0FSQ0h9IgorSE9TVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorI0hPU1RfU1lTID0gIiR7SE9TVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworVEFSR0VUX0FSQ0ggPSAiJHtTREtfQVJDSH0iCitUQVJHRVRfVkVORE9SID0gIiR7U0RLX1ZFTkRPUn0iCitUQVJHRVRfT1MgPSAiJHtTREtfT1N9IgorVEFSR0VUX1BSRUZJWCA9ICIke1NES19QUkVGSVh9IgorVEFSR0VUX0NDX0FSQ0ggPSAiJHtTREtfQ0NfQVJDSH0iCitUQVJHRVRfTERfQVJDSCA9ICIke1NES19MRF9BUkNIfSIKK1RBUkdFVF9BU19BUkNIID0gIiR7U0RLX0FTX0FSQ0h9IgorVEFSR0VUX0ZQVSA9ICIiCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID0gIiIKKworQ1BQRkxBR1MgPSAiJHtCVUlMRFNES19DUFBGTEFHU30iCitDRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorQ1hYRkxBR1MgPSAiJHtCVUlMRFNES19DRkxBR1N9IgorTERGTEFHUyA9ICIke0JVSUxEU0RLX0xERkxBR1N9IgorCisjIENoYW5nZSB0byBwbGFjZSBmaWxlcyBpbiBTREtQQVRICitiYXNlX3ByZWZpeCA9ICIke1NES1BBVEhOQVRJVkV9IgorcHJlZml4ID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9IgorZXhlY19wcmVmaXggPSAiJHtTREtQQVRITkFUSVZFfSR7cHJlZml4X25hdGl2ZXNka30iCitiYXNlbGliID0gImxpYiIKK3NiaW5kaXIgPSAiJHtiaW5kaXJ9IgorCitleHBvcnQgUEtHX0NPTkZJR19ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSR7bGliZGlyfS9wa2djb25maWciCitleHBvcnQgUEtHX0NPTkZJR19TWVNST09UX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9IgorCitweXRob24gbmF0aXZlc2RrX3ZpcnRjbGFzc19oYW5kbGVyICgpIHsKKyAgICBwbiA9IGUuZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgKHBuLmVuZHN3aXRoKCItbmF0aXZlc2RrIikgb3IgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBlLmRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsICJuYXRpdmVzZGstIikKKyAgICBlLmRhdGEuc2V0VmFyKCJQTiIsICJuYXRpdmVzZGstIiArIGUuZGF0YS5nZXRWYXIoIlBOIiwgVHJ1ZSkucmVwbGFjZSgiLW5hdGl2ZXNkayIsICIiKS5yZXBsYWNlKCJuYXRpdmVzZGstIiwgIiIpKQorICAgIGUuZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIGUuZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW5hdGl2ZXNkayIpCit9CisKK3B5dGhvbiAoKSB7CisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGlmIG5vdCBwbi5zdGFydHN3aXRoKCJuYXRpdmVzZGstIik6CisgICAgICAgIHJldHVybgorCisgICAgaW1wb3J0IG9lLmNsYXNzZXh0ZW5kCisKKyAgICBjbHNleHRlbmQgPSBvZS5jbGFzc2V4dGVuZC5OYXRpdmVzZGtDbGFzc0V4dGVuZGVyKCJuYXRpdmVzZGsiLCBkKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZXMoKQorICAgIGNsc2V4dGVuZC5yZW5hbWVfcGFja2FnZV92YXJpYWJsZXMoKGQuZ2V0VmFyKCJQQUNLQUdFVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpKQorCisgICAgY2xzZXh0ZW5kLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJERVBFTkRTIikKKyAgICBjbHNleHRlbmQubWFwX3BhY2thZ2V2YXJzKCkKKyAgICBjbHNleHRlbmQubWFwX3ZhcmlhYmxlKCJQUk9WSURFUyIpCisgICAgY2xzZXh0ZW5kLm1hcF9yZWdleHBfdmFyaWFibGUoIlBBQ0tBR0VTX0RZTkFNSUMiKQorfQorCithZGRoYW5kbGVyIG5hdGl2ZXNka192aXJ0Y2xhc3NfaGFuZGxlcgorbmF0aXZlc2RrX3ZpcnRjbGFzc19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUHJlRmluYWxpc2UiCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorZG9fcGFja2FnZWRhdGFbc3RhbXAtZXh0cmEtaW5mb10gPSAiIgorCitVU0VfTkxTID0gIiR7U0RLVVNFX05MU30iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvb2VsaW50LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwNTFjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9vZWxpbnQuYmJjbGFzcwpAQCAtMCwwICsxLDg0IEBACithZGR0YXNrIGxpbnQgYmVmb3JlIGRvX2J1aWxkCitkb19saW50W25vc3RhbXBdID0gIjEiCitweXRob24gZG9fbGludCgpIHsKKyAgICBwa2duYW1lID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgVGVzdCB0aGF0IERFU0NSSVBUSU9OIGV4aXN0cworICAgICMKKyAgICBkZXNjcmlwdGlvbiA9IGQuZ2V0VmFyKCJERVNDUklQVElPTiIsIEZhbHNlKQorICAgIGlmIGRlc2NyaXB0aW9uWzE6MTBdID09ICd7U1VNTUFSWX0nOgorICAgICAgICBiYi53YXJuKCIlczogREVTQ1JJUFRJT04gaXMgbm90IHNldCIgJSBwa2duYW1lKQorCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFRlc3QgdGhhdCBIT01FUEFHRSBleGlzdHMKKyAgICAjCisgICAgaG9tZXBhZ2UgPSBkLmdldFZhcigiSE9NRVBBR0UiLCBGYWxzZSkKKyAgICBpZiBob21lcGFnZSA9PSAnJzoKKyAgICAgICAgYmIud2FybigiJXM6IEhPTUVQQUdFIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKyAgICBlbGlmIG5vdCBob21lcGFnZS5zdGFydHN3aXRoKCJodHRwOi8vIikgYW5kIG5vdCBob21lcGFnZS5zdGFydHN3aXRoKCJodHRwczovLyIpOgorICAgICAgICBiYi53YXJuKCIlczogSE9NRVBBR0UgZG9lc24ndCBzdGFydCB3aXRoIGh0dHA6Ly8gb3IgaHR0cHM6Ly8iICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBUZXN0IGZvciB2YWxpZCBTRUNUSU9OCisgICAgIworICAgIHNlY3Rpb24gPSBkLmdldFZhcigiU0VDVElPTiIsIEZhbHNlKQorICAgIGlmIHNlY3Rpb24gPT0gJyc6CisgICAgICAgIGJiLndhcm4oIiVzOiBTRUNUSU9OIGlzIG5vdCBzZXQiICUgcGtnbmFtZSkKKyAgICBlbGlmIG5vdCBzZWN0aW9uLmlzbG93ZXIoKToKKyAgICAgICAgYmIud2FybigiJXM6IFNFQ1RJT04gc2hvdWxkIG9ubHkgdXNlIGxvd2VyIGNhc2UiICUgcGtnbmFtZSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayB0aGF0IGFsbCBwYXRjaGVzIGhhdmUgU2lnbmVkLW9mZi1ieSBhbmQgVXBzdHJlYW0tU3RhdHVzCisgICAgIworICAgIHNyY3VyaSA9IGQuZ2V0VmFyKCJTUkNfVVJJIiwgRmFsc2UpLnNwbGl0KCkKKyAgICBmcGF0aHMgPSAoZC5nZXRWYXIoJ0ZJTEVTUEFUSCcsIFRydWUpIG9yICcnKS5zcGxpdCgnOicpCisKKyAgICBkZWYgZmluZFBhdGNoKHBhdGNobmFtZSk6CisgICAgICAgIGZvciBkaXIgaW4gZnBhdGhzOgorICAgICAgICAgICAgcGF0Y2hwYXRoID0gZGlyICsgcGF0Y2huYW1lCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRjaHBhdGgpOgorICAgICAgICAgICAgICAgICByZXR1cm4gcGF0Y2hwYXRoCisKKyAgICBkZWYgZmluZEtleShwYXRoLCBrZXkpOgorICAgICAgICByZXQgPSBUcnVlCisgICAgICAgIGYgPSBmaWxlKCclcycgJSBwYXRoLCBtb2RlID0gJ3InKQorICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCisgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICBpZiBsaW5lLmZpbmQoa2V5KSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXQgPSBGYWxzZQorICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgZGVmIGNoZWNrUE4ocGtnbmFtZSwgdmFybmFtZSwgc3RyKToKKyAgICAgICAgaWYgc3RyLmZpbmQoIntQTn0iKSAhPSAtMToKKyAgICAgICAgICAgIGJiLndhcm4oIiVzOiBzaG91bGQgdXNlIEJQTiBpbnN0ZWFkIG9mIFBOIGluICVzIiAlIChwa2duYW1lLCB2YXJuYW1lKSkKKyAgICAgICAgaWYgc3RyLmZpbmQoIntQfSIpICE9IC0xOgorICAgICAgICAgICAgYmIud2FybigiJXM6IHNob3VsZCB1c2UgQlAgaW5zdGVhZCBvZiBQIGluICVzIiAlIChwa2duYW1lLCB2YXJuYW1lKSkKKworICAgIGxlbmd0aCA9IGxlbigiZmlsZTovLyIpCisgICAgZm9yIGl0ZW0gaW4gc3JjdXJpOgorICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtW2xlbmd0aDpdCisgICAgICAgICAgICBpZiBpdGVtLmVuZHN3aXRoKCIucGF0Y2giKSBvciBpdGVtLmVuZHN3aXRoKCIuZGlmZiIpOgorICAgICAgICAgICAgICAgIHBhdGggPSBmaW5kUGF0Y2goaXRlbSkKKyAgICAgICAgICAgICAgICBpZiBmaW5kS2V5KHBhdGgsICJTaWduZWQtb2ZmLWJ5Iik6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBkb2Vzbid0IGhhdmUgU2lnbmVkLW9mZi1ieSIgJSAocGtnbmFtZSwgaXRlbSkpCisgICAgICAgICAgICAgICAgaWYgZmluZEtleShwYXRoLCAiVXBzdHJlYW0tU3RhdHVzIik6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiAlcyBkb2Vzbid0IGhhdmUgVXBzdHJlYW0tU3RhdHVzIiAlIChwa2duYW1lLCBpdGVtKSkKKworCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBDaGVjayBmb3IgJHtQTn0gb3IgJHtQfSB1c2FnZSBpbiBTUkNfVVJJIG9yIFMKKyAgICAjIFNob3VsZCB1c2UgJHtCUE59IG9yICR7QlB9IGluc3RlYWQgdG8gYXZvaWQgYnJlYWtpbmcgbXVsdGlsaWIKKyAgICAjCisgICAgZm9yIHMgaW4gc3JjdXJpOgorICAgICAgICBpZiBub3Qgcy5zdGFydHN3aXRoKCJmaWxlOi8vIik6CisgICAgICAgICAgICBjaGVja1BOKHBrZ25hbWUsICdTUkNfVVJJJywgcykKKworICAgIGNoZWNrUE4ocGtnbmFtZSwgJ1MnLCBkLmdldFZhcignUycsIEZhbHNlKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL293bi1taXJyb3JzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIzNTIyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9vd24tbWlycm9ycy5iYmNsYXNzCkBAIC0wLDAgKzEsMTIgQEAKK1BSRU1JUlJPUlMoKSB7CitjdnM6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK3N2bjovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorZ2l0Oi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitnaXRzbTovLy4qLy4qICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK2hnOi8vLiovLiogICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQorYnpyOi8vLiovLiogICAgICR7U09VUkNFX01JUlJPUl9VUkx9CitwNDovLy4qLy4qICAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK29zYzovLy4qLy4qICAgICAke1NPVVJDRV9NSVJST1JfVVJMfQoraHR0cHM/JDovLy4qLy4qICR7U09VUkNFX01JUlJPUl9VUkx9CitmdHA6Ly8uKi8uKiAgICAgJHtTT1VSQ0VfTUlSUk9SX1VSTH0KK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTJiZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZS5iYmNsYXNzCkBAIC0wLDAgKzEsMjA4NiBAQAorIworIyBQYWNrYWdpbmcgcHJvY2VzcworIworIyBFeGVjdXRpdmUgc3VtbWFyeTogVGhpcyBjbGFzcyBpdGVyYXRlcyBvdmVyIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGluIFBBQ0tBR0VGVU5DUworIyBUYWtpbmcgRCBhbmQgc3BsaXR0aW5nIGl0IHVwIGludG8gdGhlIHBhY2thZ2VzIGxpc3RlZCBpbiBQQUNLQUdFUywgcGxhY2luZyB0aGUKKyMgcmVzdWx0aW5nIG91dHB1dCBpbiBQS0dERVNULgorIworIyBUaGVyZSBhcmUgdGhlIGZvbGxvd2luZyBkZWZhdWx0IHN0ZXBzIGJ1dCBQQUNLQUdFRlVOQ1MgY2FuIGJlIGV4dGVuZGVkOgorIworIyBhKSBwYWNrYWdlX2dldF9hdXRvX3ByIC0gZ2V0IFBSQVVUTyBmcm9tIHJlbW90ZSBQUiBzZXJ2aWNlCisjCisjIGIpIHBlcmZvcm1fcGFja2FnZWNvcHkgLSBDb3B5IEQgaW50byBQS0dECisjCisjIGMpIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcyAtIFNwbGl0IG91dCB0aGUgbG9jYWxlIGZpbGVzLCB1cGRhdGVzIEZJTEVTIGFuZCBQQUNLQUdFUworIworIyBkKSBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgLSBzcGxpdCB0aGUgZmlsZXMgaW50byBydW50aW1lIGFuZCBkZWJ1ZyBhbmQgc3RyaXAgdGhlbS4KKyMgICAgRGVidWcgZmlsZXMgaW5jbHVkZSBkZWJ1ZyBpbmZvIHNwbGl0LCBhbmQgYXNzb2NpYXRlZCBzb3VyY2VzIHRoYXQgZW5kIHVwIGluIC1kYmcgcGFja2FnZXMKKyMKKyMgZSkgZml4dXBfcGVybXMgLSBGaXggdXAgcGVybWlzc2lvbnMgaW4gdGhlIHBhY2thZ2UgYmVmb3JlIHdlIHNwbGl0IGl0LgorIworIyBmKSBwb3B1bGF0ZV9wYWNrYWdlcyAtIFNwbGl0IHRoZSBmaWxlcyBpbiBQS0dEIGludG8gc2VwYXJhdGUgcGFja2FnZXMgaW4gUEtHREVTVC88cGtnbmFtZT4KKyMgICAgQWxzbyB0cmlnZ2VycyB0aGUgYmluYXJ5IHN0cmlwcGluZyBjb2RlIHRvIHB1dCBmaWxlcyBpbiAtZGJnIHBhY2thZ2VzLgorIworIyBnKSBwYWNrYWdlX2RvX2ZpbGVkZXBzIC0gQ29sbGVjdCBwZXJmaWxlIHJ1bi10aW1lIGRlcGVuZGVuY3kgbWV0YWRhdGEKKyMgICAgVGhlIGRhdGEgaXMgc3RvcmVzIGluIEZJTEVSe1BST1ZJREVTLERFUEVORFN9X2ZpbGVfcGtnIHZhcmlhYmxlcyB3aXRoCisjICAgIGEgbGlzdCBvZiBhZmZlY3RlZCBmaWxlcyBpbiBGSUxFUntQUk9WSURFUyxERVBFTkRTfUZMSVNUX3BrZworIworIyBoKSBwYWNrYWdlX2RvX3NobGlicyAtIExvb2sgYXQgdGhlIHNoYXJlZCBsaWJyYXJpZXMgZ2VuZXJhdGVkIGFuZCBhdXRvdG1hdGljYWxseSBhZGQgYW55CisjICAgIGRlcGVuZWRlbmNpZXMgZm91bmQuIEFsc28gc3RvcmVzIHRoZSBwYWNrYWdlIG5hbWUgc28gYW55b25lIGVsc2UgdXNpbmcgdGhpcyBsaWJyYXJ5CisjICAgIGtub3dzIHdoaWNoIHBhY2thZ2UgdG8gZGVwZW5kIG9uLgorIworIyBpKSBwYWNrYWdlX2RvX3BrZ2NvbmZpZyAtIEtlZXAgdHJhY2sgb2Ygd2hpY2ggcGFja2FnZXMgbmVlZCBhbmQgcHJvdmlkZSB3aGljaCAucGMgZmlsZXMKKyMKKyMgaikgcmVhZF9zaGxpYmRlcHMgLSBSZWFkcyB0aGUgc3RvcmVkIHNobGlicyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBtZXRhZGF0YQorIworIyBrKSBwYWNrYWdlX2RlcGNoYWlucyAtIEFkZHMgYXV0b21hdGljIGRlcGVuZGVuY2llcyB0byAtZGJnIGFuZCAtZGV2IHBhY2thZ2VzCisjCisjIGwpIGVtaXRfcGtnZGF0YSAtIHNhdmVzIHRoZSBwYWNrYWdpbmcgZGF0YSBpbnRvIFBLR0RBVEFfRElSIGZvciB1c2UgaW4gbGF0ZXIKKyMgICAgcGFja2FnaW5nIHN0ZXBzCisKK2luaGVyaXQgcGFja2FnZWRhdGEKK2luaGVyaXQgcHJzZXJ2Citpbmhlcml0IGNocnBhdGgKKworIyBOZWVkIHRoZSBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigpIGluIGluc2FuZS5iYmNsYXNzCitpbmhlcml0IGluc2FuZQorCitQS0dEICAgID0gIiR7V09SS0RJUn0vcGFja2FnZSIKK1BLR0RFU1QgPSAiJHtXT1JLRElSfS9wYWNrYWdlcy1zcGxpdCIKKworTE9DQUxFX1NFQ1RJT04gPz0gJycKKworQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMgPSAiJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdQQUNLQUdFX0FSQ0hTJyl9IgorCisjIHJwbSBpcyB1c2VkIGZvciB0aGUgcGVyLWZpbGUgZGVwZW5kZW5jeSBpZGVudGlmaWNhdGlvbgorUEFDS0FHRV9ERVBFTkRTICs9ICJycG0tbmF0aXZlIgorCitkZWYgbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUocyk6CisgICAgIiIiCisgICAgTWFrZSBzdXJlIHBhY2thZ2UgbmFtZXMgYXJlIGxlZ2l0aW1hdGUgc3RyaW5ncworICAgICIiIgorICAgIGltcG9ydCByZQorCisgICAgZGVmIGZpeHV0ZihtKToKKyAgICAgICAgY3AgPSBtLmdyb3VwKDEpCisgICAgICAgIGlmIGNwOgorICAgICAgICAgICAgcmV0dXJuICgnXHUlcycgJSBjcCkuZGVjb2RlKCd1bmljb2RlX2VzY2FwZScpLmVuY29kZSgndXRmLTgnKQorCisgICAgIyBIYW5kbGUgdW5pY29kZSBjb2RlcG9pbnRzIGVuY29kZWQgYXMgPFUwMTIzPiwgYXMgaW4gZ2xpYmMgbG9jYWxlIGZpbGVzLgorICAgIHMgPSByZS5zdWIoJzxVKFswLTlBLUZhLWZdezEsNH0pPicsIGZpeHV0ZiwgcykKKworICAgICMgUmVtYWluaW5nIHBhY2thZ2UgbmFtZSB2YWxpZGl0eSBmaXhlcworICAgIHJldHVybiBzLmxvd2VyKCkucmVwbGFjZSgnXycsICctJykucmVwbGFjZSgnQCcsICcrJykucmVwbGFjZSgnLCcsICcrJykucmVwbGFjZSgnLycsICctJykKKworZGVmIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHJvb3QsIGZpbGVfcmVnZXgsIG91dHB1dF9wYXR0ZXJuLCBkZXNjcmlwdGlvbiwgcG9zdGluc3Q9Tm9uZSwgcmVjdXJzaXZlPUZhbHNlLCBob29rPU5vbmUsIGV4dHJhX2RlcGVuZHM9Tm9uZSwgYXV4X2ZpbGVzX3BhdHRlcm49Tm9uZSwgcG9zdHJtPU5vbmUsIGFsbG93X2RpcnM9RmFsc2UsIHByZXBlbmQ9RmFsc2UsIG1hdGNoX3BhdGg9RmFsc2UsIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltPU5vbmUsIGFsbG93X2xpbmtzPUZhbHNlLCBzdW1tYXJ5PU5vbmUpOgorICAgICIiIgorICAgIFVzZWQgaW4gLmJiIGZpbGVzIHRvIHNwbGl0IHVwIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBzdWJwYWNrYWdlcyBvZiBhCisgICAgZ2l2ZW4gcGFja2FnZSwgdXN1YWxseSBwbHVnaW5zIG9yIG1vZHVsZXMuCisKKyAgICBBcmd1bWVudHM6CisgICAgcm9vdCAgICAgICAgICAgLS0gdGhlIHBhdGggaW4gd2hpY2ggdG8gc2VhcmNoCisgICAgZmlsZV9yZWdleCAgICAgLS0gcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHNlYXJjaGVkIGZpbGVzLiBVc2UKKyAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRoZXNlcyAoKSB0byBtYXJrIHRoZSBwYXJ0IG9mIHRoaXMgZXhwcmVzc2lvbgorICAgICAgICAgICAgICAgICAgICAgIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGVyaXZlIHRoZSBtb2R1bGUgbmFtZSAodG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRlZCB3aGVyZSAlcyBpcyB1c2VkIGluIG90aGVyIGZ1bmN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIGFzIG5vdGVkIGJlbG93KQorICAgIG91dHB1dF9wYXR0ZXJuIC0tIHBhdHRlcm4gdG8gdXNlIGZvciB0aGUgcGFja2FnZSBuYW1lcy4gTXVzdCBpbmNsdWRlICVzLgorICAgIGRlc2NyaXB0aW9uICAgIC0tIGRlc2NyaXB0aW9uIHRvIHNldCBmb3IgZWFjaCBwYWNrYWdlLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgcG9zdGluc3QgICAgICAgLS0gcG9zdGluc3RhbGwgc2NyaXB0IHRvIHVzZSBmb3IgYWxsIHBhY2thZ2VzIChhcyBhCisgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKQorICAgIHJlY3Vyc2l2ZSAgICAgIC0tIFRydWUgdG8gcGVyZm9ybSBhIHJlY3Vyc2l2ZSBzZWFyY2ggLSBkZWZhdWx0IEZhbHNlCisgICAgaG9vayAgICAgICAgICAgLS0gYSBob29rIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZXZlcnkgbWF0Y2guIFRoZQorICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAoaW4gdGhlIG9yZGVyIGxpc3RlZCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmOiBmdWxsIHBhdGggdG8gdGhlIGZpbGUvZGlyZWN0b3J5IG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBwa2c6IHRoZSBwYWNrYWdlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfcmVnZXg6IGFzIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybjogYXMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZW5hbWU6IHRoZSBtb2R1bGUgbmFtZSBkZXJpdmVkIHVzaW5nIGZpbGVfcmVnZXgKKyAgICBleHRyYV9kZXBlbmRzICAtLSBleHRyYSBydW50aW1lIGRlcGVuZGVuY2llcyAoUkRFUEVORFMpIHRvIGJlIHNldCBmb3IKKyAgICAgICAgICAgICAgICAgICAgICBhbGwgcGFja2FnZXMuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIE5vbmUgY2F1c2VzIGEKKyAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbmN5IG9uIHRoZSBtYWluIHBhY2thZ2UgKCR7UE59KSAtIGlmIHlvdSBkbworICAgICAgICAgICAgICAgICAgICAgIG5vdCB3YW50IHRoaXMsIHBhc3MgJycgZm9yIHRoaXMgcGFyYW1ldGVyLgorICAgIGF1eF9maWxlc19wYXR0ZXJuIC0tIGV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yIGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlLiBDYW4gYmUgYSBzaW5nbGUgc3RyaW5nIGl0ZW0gb3IgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyBmb3IgbXVsdGlwbGUgaXRlbXMuICBNdXN0IGluY2x1ZGUgJXMuCisgICAgcG9zdHJtICAgICAgICAgLS0gcG9zdHJtIHNjcmlwdCB0byB1c2UgZm9yIGFsbCBwYWNrYWdlcyAoYXMgYSBzdHJpbmcpCisgICAgYWxsb3dfZGlycyAgICAgLS0gVHJ1ZSBhbGxvdyBkaXJlY3RvcmllcyB0byBiZSBtYXRjaGVkIC0gZGVmYXVsdCBGYWxzZQorICAgIHByZXBlbmQgICAgICAgIC0tIGlmIFRydWUsIHByZXBlbmQgY3JlYXRlZCBwYWNrYWdlcyB0byBQQUNLQUdFUyBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGRlZmF1bHQgRmFsc2Ugd2hpY2ggYXBwZW5kcyB0aGVtCisgICAgbWF0Y2hfcGF0aCAgICAgLS0gbWF0Y2ggZmlsZV9yZWdleCBvbiB0aGUgd2hvbGUgcmVsYXRpdmUgcGF0aCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICByb290IHJhdGhlciB0aGFuIGp1c3QgdGhlIGZpbGUgbmFtZQorICAgIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltIC0tIGV4dHJhIGl0ZW0ocykgdG8gYmUgYWRkZWQgdG8gRklMRVMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgZWFjaCBwYWNrYWdlLCB1c2luZyB0aGUgYWN0dWFsIGRlcml2ZWQgbW9kdWxlIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBjb252ZXJ0aW5nIGl0IHRvIHNvbWV0aGluZyBsZWdhbCBmb3IgYQorICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgbmFtZS4gQ2FuIGJlIGEgc2luZ2xlIHN0cmluZyBpdGVtIG9yIGEgbGlzdAorICAgICAgICAgICAgICAgICAgICAgIG9mIHN0cmluZ3MgZm9yIG11bHRpcGxlIGl0ZW1zLiBNdXN0IGluY2x1ZGUgJXMuCisgICAgYWxsb3dfbGlua3MgICAgLS0gVHJ1ZSB0byBhbGxvdyBzeW1saW5rcyB0byBiZSBtYXRjaGVkIC0gZGVmYXVsdCBGYWxzZQorICAgIHN1bW1hcnkgICAgICAgIC0tIFN1bW1hcnkgdG8gc2V0IGZvciBlYWNoIHBhY2thZ2UuIE11c3QgaW5jbHVkZSAlczsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBkZXNjcmlwdGlvbiBpZiBub3Qgc2V0LgorCisgICAgIiIiCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgIyBJZiB0aGUgcm9vdCBkaXJlY3RvcnkgZG9lc24ndCBleGlzdCwgZG9uJ3QgZXJyb3Igb3V0IGxhdGVyIGJ1dCBzaWxlbnRseSBkbworICAgICMgbm8gc3BsaXR0aW5nLgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkdmFyICsgcm9vdCk6CisgICAgICAgIHJldHVybiBbXQorCisgICAgbWwgPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgIGlmIG1sOgorICAgICAgICBpZiBub3Qgb3V0cHV0X3BhdHRlcm4uc3RhcnRzd2l0aChtbCk6CisgICAgICAgICAgICBvdXRwdXRfcGF0dGVybiA9IG1sICsgb3V0cHV0X3BhdHRlcm4KKworICAgICAgICBuZXdkZXBzID0gW10KKyAgICAgICAgZm9yIGRlcCBpbiAoZXh0cmFfZGVwZW5kcyBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGRlcC5zdGFydHN3aXRoKG1sKToKKyAgICAgICAgICAgICAgICBuZXdkZXBzLmFwcGVuZChkZXApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld2RlcHMuYXBwZW5kKG1sICsgZGVwKQorICAgICAgICBpZiBuZXdkZXBzOgorICAgICAgICAgICAgZXh0cmFfZGVwZW5kcyA9ICIgIi5qb2luKG5ld2RlcHMpCisKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHNwbGl0X3BhY2thZ2VzID0gW10KKworICAgIGlmIHBvc3RpbnN0OgorICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicgKyBwb3N0aW5zdCArICdcbicKKyAgICBpZiBwb3N0cm06CisgICAgICAgIHBvc3RybSA9ICcjIS9iaW4vc2hcbicgKyBwb3N0cm0gKyAnXG4nCisgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgb2JqcyA9IG9zLmxpc3RkaXIoZHZhciArIHJvb3QpCisgICAgZWxzZToKKyAgICAgICAgb2JqcyA9IFtdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkdmFyICsgcm9vdCk6CisgICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKHdhbGtyb290LCBmaWxlKS5yZXBsYWNlKGR2YXIgKyByb290ICsgJy8nLCAnJywgMSkKKyAgICAgICAgICAgICAgICBpZiByZWxwYXRoOgorICAgICAgICAgICAgICAgICAgICBvYmpzLmFwcGVuZChyZWxwYXRoKQorCisgICAgaWYgZXh0cmFfZGVwZW5kcyA9PSBOb25lOgorICAgICAgICBleHRyYV9kZXBlbmRzID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBzdW1tYXJ5OgorICAgICAgICBzdW1tYXJ5ID0gZGVzY3JpcHRpb24KKworICAgIGZvciBvIGluIHNvcnRlZChvYmpzKToKKyAgICAgICAgaW1wb3J0IHJlLCBzdGF0CisgICAgICAgIGlmIG1hdGNoX3BhdGg6CisgICAgICAgICAgICBtID0gcmUubWF0Y2goZmlsZV9yZWdleCwgbykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChmaWxlX3JlZ2V4LCBvcy5wYXRoLmJhc2VuYW1lKG8pKQorCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZiA9IG9zLnBhdGguam9pbihkdmFyICsgcm9vdCwgbykKKyAgICAgICAgbW9kZSA9IG9zLmxzdGF0KGYpLnN0X21vZGUKKyAgICAgICAgaWYgbm90IChzdGF0LlNfSVNSRUcobW9kZSkgb3IgKGFsbG93X2xpbmtzIGFuZCBzdGF0LlNfSVNMTksobW9kZSkpIG9yIChhbGxvd19kaXJzIGFuZCBzdGF0LlNfSVNESVIobW9kZSkpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG9uID0gbGVnaXRpbWl6ZV9wYWNrYWdlX25hbWUobS5ncm91cCgxKSkKKyAgICAgICAgcGtnID0gb3V0cHV0X3BhdHRlcm4gJSBvbgorICAgICAgICBzcGxpdF9wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBpZiBub3QgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgcHJlcGVuZDoKKyAgICAgICAgICAgICAgICBwYWNrYWdlcyA9IFtwa2ddICsgcGFja2FnZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgb2xkZmlsZXMgPSBkLmdldFZhcignRklMRVNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgbmV3ZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBvKQorICAgICAgICAjIFRoZXNlIG5hbWVzIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggZ2xvYigpIHNvIGlmIHRoZSBmaWxlbmFtZSBhY3R1YWxseQorICAgICAgICAjIGNvbnRhaW5zICogb3IgPyAocmFyZSwgYnV0IHBvc3NpYmxlKSB3ZSBuZWVkIHRvIGhhbmRsZSB0aGF0IHNwZWNpYWxseQorICAgICAgICBuZXdmaWxlID0gbmV3ZmlsZS5yZXBsYWNlKCcqJywgJ1sqXScpCisgICAgICAgIG5ld2ZpbGUgPSBuZXdmaWxlLnJlcGxhY2UoJz8nLCAnWz9dJykKKyAgICAgICAgaWYgbm90IG9sZGZpbGVzOgorICAgICAgICAgICAgdGhlX2ZpbGVzID0gW25ld2ZpbGVdCisgICAgICAgICAgICBpZiBhdXhfZmlsZXNfcGF0dGVybjoKKyAgICAgICAgICAgICAgICBpZiB0eXBlKGF1eF9maWxlc19wYXR0ZXJuKSBpcyBsaXN0OgorICAgICAgICAgICAgICAgICAgICBmb3IgZnAgaW4gYXV4X2ZpbGVzX3BhdHRlcm46CisgICAgICAgICAgICAgICAgICAgICAgICB0aGVfZmlsZXMuYXBwZW5kKGZwICUgb24pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChhdXhfZmlsZXNfcGF0dGVybiAlIG9uKQorICAgICAgICAgICAgaWYgYXV4X2ZpbGVzX3BhdHRlcm5fdmVyYmF0aW06CisgICAgICAgICAgICAgICAgaWYgdHlwZShhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSkgaXMgbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGZwIGluIGF1eF9maWxlc19wYXR0ZXJuX3ZlcmJhdGltOgorICAgICAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChmcCAlIG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGhlX2ZpbGVzLmFwcGVuZChhdXhfZmlsZXNfcGF0dGVybl92ZXJiYXRpbSAlIG0uZ3JvdXAoMSkpCisgICAgICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgIiAiLmpvaW4odGhlX2ZpbGVzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdGSUxFU18nICsgcGtnLCBvbGRmaWxlcyArICIgIiArIG5ld2ZpbGUpCisgICAgICAgIGlmIGV4dHJhX2RlcGVuZHMgIT0gJyc6CisgICAgICAgICAgICBkLmFwcGVuZFZhcignUkRFUEVORFNfJyArIHBrZywgJyAnICsgZXh0cmFfZGVwZW5kcykKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBUcnVlKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCBkZXNjcmlwdGlvbiAlIG9uKQorICAgICAgICBpZiBub3QgZC5nZXRWYXIoJ1NVTU1BUllfJyArIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBkLnNldFZhcignU1VNTUFSWV8nICsgcGtnLCBzdW1tYXJ5ICUgb24pCisgICAgICAgIGlmIHBvc3RpbnN0OgorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0aW5zdF8nICsgcGtnLCBwb3N0aW5zdCkKKyAgICAgICAgaWYgcG9zdHJtOgorICAgICAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJyArIHBrZywgcG9zdHJtKQorICAgICAgICBpZiBjYWxsYWJsZShob29rKToKKyAgICAgICAgICAgIGhvb2soZiwgcGtnLCBmaWxlX3JlZ2V4LCBvdXRwdXRfcGF0dGVybiwgbS5ncm91cCgxKSkKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VzKSkKKyAgICByZXR1cm4gc3BsaXRfcGFja2FnZXMKKworUEFDS0FHRV9ERVBFTkRTICs9ICJmaWxlLW5hdGl2ZSIKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSAhPSAnJzoKKyAgICAgICAgZGVwcyA9ICIiCisgICAgICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdQQUNLQUdFX0RFUEVORFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcAorICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2UnLCAnZGVwZW5kcycsIGRlcHMpCisKKyAgICAgICAgIyBzaGxpYnMgcmVxdWlyZXMgYW55IERFUEVORFMgdG8gaGF2ZSBhbHJlYWR5IHBhY2thZ2VkIGZvciB0aGUgKi5saXN0IGZpbGVzCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZScsICdkZXB0YXNrJywgIiBkb19wYWNrYWdlZGF0YSIpCit9CisKKyMgR2V0IGEgbGlzdCBvZiBmaWxlcyBmcm9tIGZpbGUgdmFycyBieSBzZWFyY2hpbmcgZmlsZXMgdW5kZXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorIyBUaGUgbGlzdCBjb250YWlucyBzeW1saW5rcywgZGlyZWN0b3JpZXMgYW5kIG5vcm1hbCBmaWxlcy4KK2RlZiBmaWxlc19mcm9tX2ZpbGV2YXJzKGZpbGV2YXJzKToKKyAgICBpbXBvcnQgb3MsZ2xvYgorICAgIGNwYXRoID0gb2UuY2FjaGVkcGF0aC5DYWNoZWRQYXRoKCkKKyAgICBmaWxlcyA9IFtdCisgICAgZm9yIGYgaW4gZmlsZXZhcnM6CisgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoZik6CisgICAgICAgICAgICBmID0gJy4nICsgZgorICAgICAgICBpZiBub3QgZi5zdGFydHN3aXRoKCIuLyIpOgorICAgICAgICAgICAgZiA9ICcuLycgKyBmCisgICAgICAgIGdsb2JiZWQgPSBnbG9iLmdsb2IoZikKKyAgICAgICAgaWYgZ2xvYmJlZDoKKyAgICAgICAgICAgIGlmIFsgZiBdICE9IGdsb2JiZWQ6CisgICAgICAgICAgICAgICAgZmlsZXMgKz0gZ2xvYmJlZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZpbGVzLmFwcGVuZChmKQorCisgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgIGlmIG5vdCBjcGF0aC5pc2xpbmsoZik6CisgICAgICAgICAgICBpZiBjcGF0aC5pc2RpcihmKToKKyAgICAgICAgICAgICAgICBuZXdmaWxlcyA9IFsgb3MucGF0aC5qb2luKGYseCkgZm9yIHggaW4gb3MubGlzdGRpcihmKSBdCisgICAgICAgICAgICAgICAgaWYgbmV3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZpbGVzICs9IG5ld2ZpbGVzCisKKyAgICByZXR1cm4gZmlsZXMKKworIyBDYWxsZWQgaW4gcGFja2FnZV88cnBtLGlwayxkZWI+LmJiY2xhc3MgdG8gZ2V0IHRoZSBjb3JyZWN0IGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcworZGVmIGdldF9jb25mZmlsZXMocGtnLCBkKToKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIHJvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgb3MuY2hkaXIocm9vdCkKKworICAgIGNvbmZmaWxlcyA9IGQuZ2V0VmFyKCdDT05GRklMRVNfJXMnICUgcGtnLCBUcnVlKTsKKyAgICBpZiBjb25mZmlsZXMgPT0gTm9uZToKKyAgICAgICAgY29uZmZpbGVzID0gZC5nZXRWYXIoJ0NPTkZGSUxFUycsIFRydWUpCisgICAgaWYgY29uZmZpbGVzID09IE5vbmU6CisgICAgICAgIGNvbmZmaWxlcyA9ICIiCisgICAgY29uZmZpbGVzID0gY29uZmZpbGVzLnNwbGl0KCkKKyAgICBjb25mX29yaWdfbGlzdCA9IGZpbGVzX2Zyb21fZmlsZXZhcnMoY29uZmZpbGVzKQorCisgICAgIyBSZW1vdmUgbGlua3MgYW5kIGRpcmVjdG9yaWVzIGZyb20gY29uZl9vcmlnX2xpc3QgdG8gZ2V0IGNvbmZfbGlzdCB3aGljaCBvbmx5IGNvbnRhaW5zIG5vcm1hbCBmaWxlcworICAgIGNvbmZfbGlzdCA9IFtdCisgICAgZm9yIGYgaW4gY29uZl9vcmlnX2xpc3Q6CisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGNvbmZfbGlzdC5hcHBlbmQoZikKKworICAgICMgUmVtb3ZlIHRoZSBsZWFkaW5nICcuLycKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oY29uZl9saXN0KSk6CisgICAgICAgIGNvbmZfbGlzdFtpXSA9IGNvbmZfbGlzdFtpXVsxOl0KKworICAgIG9zLmNoZGlyKGN3ZCkKKyAgICByZXR1cm4gY29uZl9saXN0CisKK2RlZiBzcGxpdGRlYnVnaW5mbyhmaWxlLCBkZWJ1Z2ZpbGUsIGRlYnVnc3JjZGlyLCBzb3VyY2VmaWxlLCBkKToKKyAgICAjIEZ1bmN0aW9uIHRvIHNwbGl0IGEgc2luZ2xlIGZpbGUgaW50byB0d28gY29tcG9uZW50cywgb25lIGlzIHRoZSBzdHJpcHBlZAorICAgICMgdGFyZ2V0IHN5c3RlbSBiaW5hcnksIHRoZSBvdGhlciBjb250YWlucyBhbnkgZGVidWdnaW5nIGluZm9ybWF0aW9uLiBUaGUKKyAgICAjIHR3byBmaWxlcyBhcmUgbGlua2VkIHRvIHJlZmVyZW5jZSBlYWNoIG90aGVyLgorICAgICMKKyAgICAjIHNvdXJjZWZpbGUgaXMgYWxzbyBnZW5lcmF0ZWQgY29udGFpbmluZyBhIGxpc3Qgb2YgZGVidWdzb3VyY2VzCisKKyAgICBpbXBvcnQgc3RhdAorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBvYmpjb3B5ID0gZC5nZXRWYXIoIk9CSkNPUFkiLCBUcnVlKQorICAgIGRlYnVnZWRpdCA9IGQuZXhwYW5kKCIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL2Jpbi9kZWJ1Z2VkaXQiKQorICAgIHdvcmtkaXIgPSBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpCisgICAgd29ya3BhcmVudGRpciA9IGQuZ2V0VmFyKCJERUJVR1NSQ19PVkVSUklERV9QQVRIIiwgVHJ1ZSkgb3Igb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh3b3JrZGlyKSkKKworICAgICMgV2UgaWdub3JlIGtlcm5lbCBtb2R1bGVzLCB3ZSBkb24ndCBnZW5lcmF0ZSBkZWJ1ZyBpbmZvIGZpbGVzLgorICAgIGlmIGZpbGUuZmluZCgiL2xpYi9tb2R1bGVzLyIpICE9IC0xIGFuZCBmaWxlLmVuZHN3aXRoKCIua28iKToKKyAgICAgICAgcmV0dXJuIDEKKworICAgIG5ld21vZGUgPSBOb25lCisgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5XX09LKSBvciBvcy5hY2Nlc3MoZmlsZSwgb3MuUl9PSyk6CisgICAgICAgIG9yaWdtb2RlID0gb3Muc3RhdChmaWxlKVtzdGF0LlNUX01PREVdCisgICAgICAgIG5ld21vZGUgPSBvcmlnbW9kZSB8IHN0YXQuU19JV1JJVEUgfCBzdGF0LlNfSVJFQUQKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgbmV3bW9kZSkKKworICAgICMgV2UgbmVlZCB0byBleHRyYWN0IHRoZSBkZWJ1ZyBzcmMgaW5mb3JtYXRpb24gaGVyZS4uLgorICAgIGlmIGRlYnVnc3JjZGlyOgorICAgICAgICBjbWQgPSAiJyVzJyAtYiAnJXMnIC1kICclcycgLWkgLWwgJyVzJyAnJXMnIiAlIChkZWJ1Z2VkaXQsIHdvcmtwYXJlbnRkaXIsIGRlYnVnc3JjZGlyLCBzb3VyY2VmaWxlLCBmaWxlKQorICAgICAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICAgICAgaWYgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoImRlYnVnZWRpdCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZGVidWdmaWxlKSkKKworICAgIGNtZCA9ICInJXMnIC0tb25seS1rZWVwLWRlYnVnICclcycgJyVzJyIgJSAob2JqY29weSwgZmlsZSwgZGVidWdmaWxlKQorICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgYmIuZmF0YWwoIm9iamNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSVzIiAlIChyZXR2YWwsIGNtZCwgIjpcbiVzIiAlIG91dHB1dCBpZiBvdXRwdXQgZWxzZSAiIikpCisKKyAgICAjIFNldCB0aGUgZGVidWdsaW5rIHRvIGhhdmUgdGhlIHZpZXcgb2YgdGhlIGZpbGUgcGF0aCBvbiB0aGUgdGFyZ2V0CisgICAgY21kID0gIiclcycgLS1hZGQtZ251LWRlYnVnbGluaz0nJXMnICclcyciICUgKG9iamNvcHksIGRlYnVnZmlsZSwgZmlsZSkKKyAgICAocmV0dmFsLCBvdXRwdXQpID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKyAgICBpZiByZXR2YWw6CisgICAgICAgIGJiLmZhdGFsKCJvYmpjb3B5IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAlcyAoY21kIHdhcyAlcyklcyIgJSAocmV0dmFsLCBjbWQsICI6XG4lcyIgJSBvdXRwdXQgaWYgb3V0cHV0IGVsc2UgIiIpKQorCisgICAgaWYgbmV3bW9kZToKKyAgICAgICAgb3MuY2htb2QoZmlsZSwgb3JpZ21vZGUpCisKKyAgICByZXR1cm4gMAorCitkZWYgY29weWRlYnVnc291cmNlcyhkZWJ1Z3NyY2RpciwgZCk6CisgICAgIyBUaGUgZGVidWcgc3JjIGluZm9ybWF0aW9uIHdyaXR0ZW4gb3V0IHRvIHNvdXJjZWZpbGUgaXMgZnVydGhlciBwcm9jZWNlc3NlZAorICAgICMgYW5kIGNvcGllZCB0byB0aGUgZGVzdGluYXRpb24gaGVyZS4KKworICAgIGltcG9ydCBzdGF0CisKKyAgICBzb3VyY2VmaWxlID0gZC5leHBhbmQoIiR7V09SS0RJUn0vZGVidWdzb3VyY2VzLmxpc3QiKQorICAgIGlmIGRlYnVnc3JjZGlyIGFuZCBvcy5wYXRoLmlzZmlsZShzb3VyY2VmaWxlKToKKyAgICAgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICAgICAgc3RyaXAgPSBkLmdldFZhcigiU1RSSVAiLCBUcnVlKQorICAgICAgICBvYmpjb3B5ID0gZC5nZXRWYXIoIk9CSkNPUFkiLCBUcnVlKQorICAgICAgICBkZWJ1Z2VkaXQgPSBkLmV4cGFuZCgiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3JwbS9iaW4vZGVidWdlZGl0IikKKyAgICAgICAgd29ya2RpciA9IGQuZ2V0VmFyKCJXT1JLRElSIiwgVHJ1ZSkKKyAgICAgICAgd29ya3BhcmVudGRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpCisgICAgICAgIHdvcmtiYXNlZGlyID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUod29ya2RpcikpICsgIi8iICsgb3MucGF0aC5iYXNlbmFtZSh3b3JrZGlyKQorCisgICAgICAgIG5vc3VjaGRpciA9IFtdCisgICAgICAgIGJhc2VwYXRoID0gZHZhcgorICAgICAgICBmb3IgcCBpbiBkZWJ1Z3NyY2Rpci5zcGxpdCgiLyIpOgorICAgICAgICAgICAgYmFzZXBhdGggPSBiYXNlcGF0aCArICIvIiArIHAKKyAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5leGlzdHMoYmFzZXBhdGgpOgorICAgICAgICAgICAgICAgIG5vc3VjaGRpci5hcHBlbmQoYmFzZXBhdGgpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihiYXNlcGF0aCkKKyAgICAgICAgY3BhdGgudXBkYXRlY2FjaGUoYmFzZXBhdGgpCisKKyAgICAgICAgcHJvY2Vzc2RlYnVnc3JjID0gICJMQ19BTEw9QyA7IHNvcnQgLXogLXUgJyVzJyB8IGVncmVwIC12IC16ICcoPGludGVybmFsPnw8YnVpbHQtaW4+KSQnIHwgIgorICAgICAgICAjIFdlIG5lZWQgdG8gaWdub3JlIGZpbGVzIHRoYXQgYXJlIG5vdCBhY3R1YWxseSBvdXJzCisgICAgICAgICMgd2UgZG8gdGhpcyBieSBvbmx5IHBheWluZyBhdHRlbnRpb24gdG8gaXRlbXMgZnJvbSB0aGlzIHBhY2thZ2UKKyAgICAgICAgcHJvY2Vzc2RlYnVnc3JjICs9ICJmZ3JlcCAtencgJyVzJyB8ICIKKyAgICAgICAgcHJvY2Vzc2RlYnVnc3JjICs9ICIoY2QgJyVzJyA7IGNwaW8gLXBkMG1sTCAtLW5vLXByZXNlcnZlLW93bmVyICclcyVzJyAyPi9kZXYvbnVsbCkiCisKKyAgICAgICAgY21kID0gcHJvY2Vzc2RlYnVnc3JjICUgKHNvdXJjZWZpbGUsIHdvcmtiYXNlZGlyLCB3b3JrcGFyZW50ZGlyLCBkdmFyLCBkZWJ1Z3NyY2RpcikKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgICMgQ2FuICJmYWlsIiBpZiBpbnRlcm5hbCBoZWFkZXJzL3RyYW5zaWVudCBzb3VyY2VzIGFyZSBhdHRlbXB0ZWQKKyAgICAgICAgI2lmIHJldHZhbDoKKyAgICAgICAgIyAgICBiYi5mYXRhbCgiZGVidWcgc291cmNlIGNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlICVzIChjbWQgd2FzICVzKSIgJSAocmV0dmFsLCBjbWQpKQorCisgICAgICAgICMgY3BpbyBzZWVtcyB0byBoYXZlIGEgYnVnIHdpdGggLWxMIHRvZ2V0aGVyIGFuZCBzeW1ib2xpYyBsaW5rcyBhcmUganVzdCBjb3BpZWQsIG5vdCBkZXJlZmVyZW5jZWQuCisgICAgICAgICMgV29yayBhcm91bmQgdGhpcyBieSBtYW51YWxseSBmaW5kaW5nIGFuZCBjb3B5aW5nIGFueSBzeW1ib2xpYyBsaW5rcyB0aGF0IG1hZGUgaXQgdGhyb3VnaC4KKyAgICAgICAgY21kID0gImZpbmQgJXMlcyAtdHlwZSBsIC1wcmludDAgLWRlbGV0ZSB8IHNlZCBzIyVzJXMvIyNnIHwgKGNkICclcycgOyBjcGlvIC1wZDBtTCAtLW5vLXByZXNlcnZlLW93bmVyICclcyVzJyAyPi9kZXYvbnVsbCkiICUgKGR2YXIsIGRlYnVnc3JjZGlyLCBkdmFyLCBkZWJ1Z3NyY2Rpciwgd29ya3BhcmVudGRpciwgZHZhciwgZGVidWdzcmNkaXIpCisgICAgICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiByZXR2YWw6CisgICAgICAgICAgICBiYi5mYXRhbCgiZGVidWdzcmMgc3ltbGluayBmaXh1cCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpIiAlIChyZXR2YWwsIGNtZCkpCisKKyAgICAgICAgIyBUaGUgY29weSBieSBjcGlvIG1heSBoYXZlIHJlc3VsdGVkIGluIHNvbWUgZW1wdHkgZGlyZWN0b3JpZXMhICBSZW1vdmUgdGhlc2UKKyAgICAgICAgY21kID0gImZpbmQgJXMlcyAtZW1wdHkgLXR5cGUgZCAtZGVsZXRlIiAlIChkdmFyLCBkZWJ1Z3NyY2RpcikKKyAgICAgICAgKHJldHZhbCwgb3V0cHV0KSA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJlbXB0eSBkaXJlY3RvcnkgcmVtb3ZhbCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgICAgICAjIEFsc28gcmVtb3ZlIGRlYnVnc3JjZGlyIGlmIGl0cyBlbXB0eQorICAgICAgICBmb3IgcCBpbiBub3N1Y2hkaXJbOjotMV06CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKSBhbmQgbm90IG9zLmxpc3RkaXIocCk6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIocCkKKworIworIyBQYWNrYWdlIGRhdGEgaGFuZGxpbmcgcm91dGluZXMKKyMKKworZGVmIGdldF9wYWNrYWdlX21hcHBpbmcgKHBrZywgYmFzZXBrZywgZCk6CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9zdWJwa2dkYXRhKHBrZywgZCkKKyAgICBrZXkgPSAiUEtHXyVzIiAlIHBrZworCisgICAgaWYga2V5IGluIGRhdGE6CisgICAgICAgICMgSGF2ZSB0byBhdm9pZCB1bmRvaW5nIHRoZSB3cml0ZV9leHRyYV9wa2dzKGdsb2JhbF92YXJpYW50cy4uLikKKyAgICAgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBkYXRhW2tleV0gPT0gYmFzZXBrZzoKKyAgICAgICAgICAgIHJldHVybiBwa2cKKyAgICAgICAgcmV0dXJuIGRhdGFba2V5XQorCisgICAgcmV0dXJuIHBrZworCitkZWYgZ2V0X3BhY2thZ2VfYWRkaXRpb25hbF9tZXRhZGF0YSAocGtnX3R5cGUsIGQpOgorICAgIGJhc2Vfa2V5ID0gIlBBQ0tBR0VfQUREX01FVEFEQVRBIgorICAgIGZvciBrZXkgaW4gKCIlc18lcyIgJSAoYmFzZV9rZXksIHBrZ190eXBlLnVwcGVyKCkpLCBiYXNlX2tleSk6CisgICAgICAgIGlmIGQuZ2V0VmFyKGtleSwgRmFsc2UpIGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBkLnNldFZhckZsYWcoa2V5LCAidHlwZSIsICJsaXN0IikKKyAgICAgICAgaWYgZC5nZXRWYXJGbGFnKGtleSwgInNlcGFyYXRvciIpIGlzIE5vbmU6CisgICAgICAgICAgICBkLnNldFZhckZsYWcoa2V5LCAic2VwYXJhdG9yIiwgIlxcbiIpCisgICAgICAgIG1ldGFkYXRhX2ZpZWxkcyA9IFtmaWVsZC5zdHJpcCgpIGZvciBmaWVsZCBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKGtleSwgZCldCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obWV0YWRhdGFfZmllbGRzKS5zdHJpcCgpCisKK2RlZiBydW50aW1lX21hcHBpbmdfcmVuYW1lICh2YXJuYW1lLCBwa2csIGQpOgorICAgICNiYi5ub3RlKCIlcyBiZWZvcmU6ICVzIiAlICh2YXJuYW1lLCBkLmdldFZhcih2YXJuYW1lLCBUcnVlKSkpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdwYWNrYWdlZ3JvdXAnLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBuZXdfZGVwZW5kcyA9IHt9CisgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcih2YXJuYW1lLCBUcnVlKSBvciAiIikKKyAgICBmb3IgZGVwZW5kIGluIGRlcHM6CisgICAgICAgIG5ld19kZXBlbmQgPSBnZXRfcGFja2FnZV9tYXBwaW5nKGRlcGVuZCwgcGtnLCBkKQorICAgICAgICBuZXdfZGVwZW5kc1tuZXdfZGVwZW5kXSA9IGRlcHNbZGVwZW5kXQorCisgICAgZC5zZXRWYXIodmFybmFtZSwgYmIudXRpbHMuam9pbl9kZXBzKG5ld19kZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCisKKyAgICAjYmIubm90ZSgiJXMgYWZ0ZXI6ICVzIiAlICh2YXJuYW1lLCBkLmdldFZhcih2YXJuYW1lLCBUcnVlKSkpCisKKyMKKyMgUGFja2FnZSBmdW5jdGlvbnMgc3VpdGFibGUgZm9yIGluY2x1c2lvbiBpbiBQQUNLQUdFRlVOQ1MKKyMKKworcHl0aG9uIHBhY2thZ2VfZ2V0X2F1dG9fcHIoKSB7CisgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgIGltcG9ydCByZQorCisgICAgIyBTdXBwb3J0IHBlciByZWNpcGUgUFJTRVJWX0hPU1QKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaG9zdCA9IGQuZ2V0VmFyKCJQUlNFUlZfSE9TVF8iICsgcG4sIFRydWUpCisgICAgaWYgbm90IChob3N0IGlzIE5vbmUpOgorICAgICAgICBkLnNldFZhcigiUFJTRVJWX0hPU1QiLCBob3N0KQorCisgICAgcGtndiA9IGQuZ2V0VmFyKCJQS0dWIiwgVHJ1ZSkKKworICAgICMgUFIgU2VydmVyIG5vdCBhY3RpdmUsIGhhbmRsZSBBVVRPSU5DCisgICAgaWYgbm90IGQuZ2V0VmFyKCdQUlNFUlZfSE9TVCcsIFRydWUpOgorICAgICAgICBpZiAnQVVUT0lOQycgaW4gcGtndjoKKyAgICAgICAgICAgIGQuc2V0VmFyKCJQS0dWIiwgcGtndi5yZXBsYWNlKCJBVVRPSU5DIiwgIjAiKSkKKyAgICAgICAgcmV0dXJuCisKKyAgICBhdXRvX3ByID0gTm9uZQorICAgIHB2ID0gZC5nZXRWYXIoIlBWIiwgVHJ1ZSkKKyAgICB2ZXJzaW9uID0gZC5nZXRWYXIoIlBSQVVUT0lOWCIsIFRydWUpCisgICAgcGtnYXJjaCA9IGQuZ2V0VmFyKCJQQUNLQUdFX0FSQ0giLCBUcnVlKQorICAgIGNoZWNrc3VtID0gZC5nZXRWYXIoIkJCX1RBU0tIQVNIIiwgVHJ1ZSkKKworICAgIGlmIGQuZ2V0VmFyKCdQUlNFUlZfTE9DS0RPV04nLCBUcnVlKToKKyAgICAgICAgYXV0b19wciA9IGQuZ2V0VmFyKCdQUkFVVE9fJyArIHZlcnNpb24gKyAnXycgKyBwa2dhcmNoLCBUcnVlKSBvciBkLmdldFZhcignUFJBVVRPXycgKyB2ZXJzaW9uLCBUcnVlKSBvciBOb25lCisgICAgICAgIGlmIGF1dG9fcHIgaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW4gTk9UIGdldCBQUkFVVE8gZnJvbSBsb2NrZG93biBleHBvcnRlZCBmaWxlIikKKyAgICAgICAgZC5zZXRWYXIoJ1BSQVVUTycsc3RyKGF1dG9fcHIpKQorICAgICAgICByZXR1cm4KKworICAgIHRyeToKKyAgICAgICAgY29ubiA9IGQuZ2V0VmFyKCJfX1BSU0VSVl9DT05OIiwgVHJ1ZSkKKyAgICAgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICAgICAgY29ubiA9IG9lLnByc2VydmljZS5wcnNlcnZfbWFrZV9jb25uKGQpCisgICAgICAgIGlmIGNvbm4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiAiQVVUT0lOQyIgaW4gcGtndjoKKyAgICAgICAgICAgICAgICBzcmNwdiA9IGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpCisgICAgICAgICAgICAgICAgYmFzZV92ZXIgPSAiQVVUT0lOQy0lcyIgJSB2ZXJzaW9uWzp2ZXJzaW9uLmZpbmQoc3JjcHYpXQorICAgICAgICAgICAgICAgIHZhbHVlID0gY29ubi5nZXRQUihiYXNlX3ZlciwgcGtnYXJjaCwgc3JjcHYpCisgICAgICAgICAgICAgICAgZC5zZXRWYXIoIlBLR1YiLCBwa2d2LnJlcGxhY2UoIkFVVE9JTkMiLCBzdHIodmFsdWUpKSkKKworICAgICAgICAgICAgYXV0b19wciA9IGNvbm4uZ2V0UFIodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0pCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiQ2FuIE5PVCBnZXQgUFJBVVRPLCBleGNlcHRpb24gJXMiICUgIHN0cihlKSkKKyAgICBpZiBhdXRvX3ByIGlzIE5vbmU6CisgICAgICAgIGJiLmZhdGFsKCJDYW4gTk9UIGdldCBQUkFVVE8gZnJvbSByZW1vdGUgUFIgc2VydmljZSIpCisgICAgZC5zZXRWYXIoJ1BSQVVUTycsc3RyKGF1dG9fcHIpKQorfQorCitMT0NBTEVCQVNFUE4gPz89ICIke1BOfSIKKworcHl0aG9uIHBhY2thZ2VfZG9fc3BsaXRfbG9jYWxlcygpIHsKKyAgICBpZiAoZC5nZXRWYXIoJ1BBQ0tBR0VfTk9fTE9DQUxFJywgVHJ1ZSkgPT0gJzEnKToKKyAgICAgICAgYmIuZGVidWcoMSwgInBhY2thZ2UgcmVxdWVzdGVkIG5vdCBzcGxpdHRpbmcgbG9jYWxlcyIpCisgICAgICAgIHJldHVybgorCisgICAgcGFja2FnZXMgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGRhdGFkaXIgPSBkLmdldFZhcignZGF0YWRpcicsIFRydWUpCisgICAgaWYgbm90IGRhdGFkaXI6CisgICAgICAgIGJiLm5vdGUoImRhdGFkaXIgbm90IGRlZmluZWQiKQorICAgICAgICByZXR1cm4KKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignTE9DQUxFQkFTRVBOJywgVHJ1ZSkKKworICAgIGlmIHBuICsgJy1sb2NhbGUnIGluIHBhY2thZ2VzOgorICAgICAgICBwYWNrYWdlcy5yZW1vdmUocG4gKyAnLWxvY2FsZScpCisKKyAgICBsb2NhbGVkaXIgPSBvcy5wYXRoLmpvaW4oZHZhciArIGRhdGFkaXIsICdsb2NhbGUnKQorCisgICAgaWYgbm90IGNwYXRoLmlzZGlyKGxvY2FsZWRpcik6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsb2NhbGUgZmlsZXMgaW4gdGhpcyBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBsb2NhbGVzID0gb3MubGlzdGRpcihsb2NhbGVkaXIpCisKKyAgICBzdW1tYXJ5ID0gZC5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBwbgorICAgIGRlc2NyaXB0aW9uID0gZC5nZXRWYXIoJ0RFU0NSSVBUSU9OJywgVHJ1ZSkgb3IgIiIKKyAgICBsb2NhbGVfc2VjdGlvbiA9IGQuZ2V0VmFyKCdMT0NBTEVfU0VDVElPTicsIFRydWUpCisgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgIGZvciBsIGluIHNvcnRlZChsb2NhbGVzKToKKyAgICAgICAgbG4gPSBsZWdpdGltaXplX3BhY2thZ2VfbmFtZShsKQorICAgICAgICBwa2cgPSBwbiArICctbG9jYWxlLScgKyBsbgorICAgICAgICBwYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBkLnNldFZhcignRklMRVNfJyArIHBrZywgb3MucGF0aC5qb2luKGRhdGFkaXIsICdsb2NhbGUnLCBsKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csICclc3ZpcnR1YWwtbG9jYWxlLSVzJyAlIChtbHByZWZpeCwgbG4pKQorICAgICAgICBkLnNldFZhcignUlBST1ZJREVTXycgKyBwa2csICclcy1sb2NhbGUgJXMlcy10cmFuc2xhdGlvbicgJSAocG4sIG1scHJlZml4LCBsbikpCisgICAgICAgIGQuc2V0VmFyKCdTVU1NQVJZXycgKyBwa2csICclcyAtICVzIHRyYW5zbGF0aW9ucycgJSAoc3VtbWFyeSwgbCkpCisgICAgICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgcGtnLCAnJXMgIFRoaXMgcGFja2FnZSBjb250YWlucyBsYW5ndWFnZSB0cmFuc2xhdGlvbiBmaWxlcyBmb3IgdGhlICVzIGxvY2FsZS4nICUgKGRlc2NyaXB0aW9uLCBsKSkKKyAgICAgICAgaWYgbG9jYWxlX3NlY3Rpb246CisgICAgICAgICAgICBkLnNldFZhcignU0VDVElPTl8nICsgcGtnLCBsb2NhbGVfc2VjdGlvbikKKworICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VzKSkKKworICAgICMgRGlzYWJsZWQgYnkgUlAgMTgvMDYvMDcKKyAgICAjIFdpbGRjYXJkcyBhcmVuJ3Qgc3VwcG9ydGVkIGluIGRlYmlhbgorICAgICMgVGhleSBicmVhayB3aXRoIGlwa2cgc2luY2UgZ2xpYmMtbG9jYWxlKiB3aWxsIG1lYW4gdGhhdAorICAgICMgZ2xpYmMtbG9jYWxlZGF0YS10cmFuc2xpdCogd29uJ3QgaW5zdGFsbCBhcyBhIGRlcGVuZGVuY3kKKyAgICAjIGZvciBzb21lIG90aGVyIHBhY2thZ2Ugd2hpY2ggYnJlYWtzIG1ldGEtdG9vbGNoYWluCisgICAgIyBQcm9iYWJseSBicmVha3Mgc2luY2UgdmlydHVhbC1sb2NhbGUtIGlzbid0IHByb3ZpZGVkIGFueXdoZXJlCisgICAgI3JkZXAgPSAoZC5nZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBuLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICNyZGVwLmFwcGVuZCgnJXMtbG9jYWxlKicgJSBwbikKKyAgICAjZC5zZXRWYXIoJ1JERVBFTkRTXyVzJyAlIHBuLCAnICcuam9pbihyZGVwKSkKK30KKworcHl0aG9uIHBlcmZvcm1fcGFja2FnZWNvcHkgKCkgeworICAgIGRlc3QgPSBkLmdldFZhcignRCcsIFRydWUpCisgICAgZHZhciA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKworICAgICMgU3RhcnQgYnkgcGFja2FnZSBwb3B1bGF0aW9uIGJ5IHRha2luZyBhIGNvcHkgb2YgdGhlIGluc3RhbGxlZAorICAgICMgZmlsZXMgdG8gb3BlcmF0ZSBvbgorICAgICMgUHJlc2VydmUgc3BhcnNlIGZpbGVzIGFuZCBoYXJkIGxpbmtzCisgICAgY21kID0gJ3RhciAtY2YgLSAtQyAlcyAtcCAuIHwgdGFyIC14ZiAtIC1DICVzJyAlIChkZXN0LCBkdmFyKQorICAgIChyZXR2YWwsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgIGlmIHJldHZhbDoKKyAgICAgICAgYmIuZmF0YWwoImZpbGUgY29weSBmYWlsZWQgd2l0aCBleGl0IGNvZGUgJXMgKGNtZCB3YXMgJXMpJXMiICUgKHJldHZhbCwgY21kLCAiOlxuJXMiICUgb3V0cHV0IGlmIG91dHB1dCBlbHNlICIiKSkKKworICAgICMgcmVwbGFjZSBSUEFUSHMgZm9yIHRoZSBuYXRpdmVzZGsgYmluYXJpZXMsIHRvIG1ha2UgdGhlbSByZWxvY2F0YWJsZQorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIHJwYXRoX3JlcGxhY2UgKGR2YXIsIGQpCit9CitwZXJmb3JtX3BhY2thZ2Vjb3B5W2NsZWFuZGlyc10gPSAiJHtQS0dEfSIKK3BlcmZvcm1fcGFja2FnZWNvcHlbZGlyc10gPSAiJHtQS0dEfSIKKworIyBXZSBnZW5lcmF0ZSBhIG1hc3RlciBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHByb2Nlc3MsIHdlIHN0YXJ0IGJ5CisjIHNlZWRpbmcgdGhpcyBsaXN0IHdpdGggcmVhc29uYWJsZSBkZWZhdWx0cywgdGhlbiBsb2FkIGZyb20KKyMgdGhlIGZzLXBlcm1zLnR4dCBmaWxlcworcHl0aG9uIGZpeHVwX3Blcm1zICgpIHsKKyAgICBpbXBvcnQgcHdkLCBncnAKKworICAgICMgaW5pdCB1c2luZyBhIHN0cmluZyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBhIGxpbmUgYXMgZG9jdW1lbnRlZCBpbgorICAgICMgdGhlIGZzLXBlcm1zLnR4dCBmaWxlCisgICAgIyA8cGF0aD4gPG1vZGU+IDx1aWQ+IDxnaWQ+IDx3YWxrPiA8Zm1vZGU+IDxmdWlkPiA8ZmdpZD4KKyAgICAjIDxwYXRoPiBsaW5rIDxsaW5rIHRhcmdldD4KKyAgICAjCisgICAgIyBfX3N0cl9fIGNhbiBiZSB1c2VkIHRvIHByaW50IG91dCBhbiBlbnRyeSBpbiB0aGUgaW5wdXQgZm9ybWF0CisgICAgIworICAgICMgaWYgZnNfcGVybXNfZW50cnkucGF0aCBpcyBOb25lOgorICAgICMgICAgYW4gZXJyb3Igb2NjdXJlZAorICAgICMgaWYgZnNfcGVybXNfZW50cnkubGluaywgeW91IGNhbiByZXRyaWV2ZToKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LnBhdGggPSBwYXRoCisgICAgIyAgICBmc19wZXJtc19lbnRyeS5saW5rID0gdGFyZ2V0IG9mIGxpbmsKKyAgICAjIGlmIG5vdCBmc19wZXJtc19lbnRyeS5saW5rLCB5b3UgY2FuIHJldHJpZXZlOgorICAgICMgICAgZnNfcGVybXNfZW50cnkucGF0aCA9IHBhdGgKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5Lm1vZGUgPSBleHBlY3RlZCBkaXIgbW9kZSBvciBOb25lCisgICAgIyAgICBmc19wZXJtc19lbnRyeS51aWQgPSBleHBlY3RlZCB1aWQgb3IgLTEKKyAgICAjICAgIGZzX3Blcm1zX2VudHJ5LmdpZCA9IGV4cGVjdGVkIGdpZCBvciAtMQorICAgICMgICAgZnNfcGVybXNfZW50cnkud2FsayA9ICd0cnVlJyBvciBzb21ldGhpbmcgZWxzZQorICAgICMgICAgZnNfcGVybXNfZW50cnkuZm1vZGUgPSBleHBlY3RlZCBmaWxlIG1vZGUgb3IgTm9uZQorICAgICMgICAgZnNfcGVybXNfZW50cnkuZnVpZCA9IGV4cGVjdGVkIGZpbGUgdWlkIG9yIC0xCisgICAgIyAgICBmc19wZXJtc19lbnRyeV9mZ2lkID0gZXhwZWN0ZWQgZmlsZSBnaWQgb3IgLTEKKyAgICBjbGFzcyBmc19wZXJtc19lbnRyeSgpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgICAgICBsc3BsaXQgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpID09IDMgYW5kIGxzcGxpdFsxXS5sb3dlcigpID09ICJsaW5rIjoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRsaW5rKGxzcGxpdFswXSwgbHNwbGl0WzJdKQorICAgICAgICAgICAgZWxpZiBsZW4obHNwbGl0KSA9PSA4OgorICAgICAgICAgICAgICAgIHNlbGYuX3NldGRpcihsc3BsaXRbMF0sIGxzcGxpdFsxXSwgbHNwbGl0WzJdLCBsc3BsaXRbM10sIGxzcGxpdFs0XSwgbHNwbGl0WzVdLCBsc3BsaXRbNl0sIGxzcGxpdFs3XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIkZpeHVwIFBlcm1zOiBpbnZhbGlkIGNvbmZpZyBsaW5lICVzIiAlIGxpbmUKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGVybS1jb25maWciLCBtc2csIGQpCisgICAgICAgICAgICAgICAgc2VsZi5wYXRoID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubGluayA9IE5vbmUKKworICAgICAgICBkZWYgX3NldGRpcihzZWxmLCBwYXRoLCBtb2RlLCB1aWQsIGdpZCwgd2FsaywgZm1vZGUsIGZ1aWQsIGZnaWQpOgorICAgICAgICAgICAgc2VsZi5wYXRoID0gb3MucGF0aC5ub3JtcGF0aChwYXRoKQorICAgICAgICAgICAgc2VsZi5saW5rID0gTm9uZQorICAgICAgICAgICAgc2VsZi5tb2RlID0gc2VsZi5fcHJvY21vZGUobW9kZSkKKyAgICAgICAgICAgIHNlbGYudWlkICA9IHNlbGYuX3Byb2N1aWQodWlkKQorICAgICAgICAgICAgc2VsZi5naWQgID0gc2VsZi5fcHJvY2dpZChnaWQpCisgICAgICAgICAgICBzZWxmLndhbGsgPSB3YWxrLmxvd2VyKCkKKyAgICAgICAgICAgIHNlbGYuZm1vZGUgPSBzZWxmLl9wcm9jbW9kZShmbW9kZSkKKyAgICAgICAgICAgIHNlbGYuZnVpZCA9IHNlbGYuX3Byb2N1aWQoZnVpZCkKKyAgICAgICAgICAgIHNlbGYuZmdpZCA9IHNlbGYuX3Byb2NnaWQoZmdpZCkKKworICAgICAgICBkZWYgX3NldGxpbmsoc2VsZiwgcGF0aCwgbGluayk6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHBhdGgpCisgICAgICAgICAgICBzZWxmLmxpbmsgPSBsaW5rCisKKyAgICAgICAgZGVmIF9wcm9jbW9kZShzZWxmLCBtb2RlKToKKyAgICAgICAgICAgIGlmIG5vdCBtb2RlIG9yIChtb2RlIGFuZCBtb2RlID09ICItIik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChtb2RlLDgpCisKKyAgICAgICAgIyBOb3RlIHVpZC9naWQgLTEgaGFzIHNwZWNpYWwgc2lnbmlmaWNhbmNlIGluIG9zLmxjaG93bgorICAgICAgICBkZWYgX3Byb2N1aWQoc2VsZiwgdWlkKToKKyAgICAgICAgICAgIGlmIHVpZCBpcyBOb25lIG9yIHVpZCA9PSAiLSI6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgICAgICBlbGlmIHVpZC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludCh1aWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBwd2QuZ2V0cHduYW0odWlkKS5wd191aWQKKworICAgICAgICBkZWYgX3Byb2NnaWQoc2VsZiwgZ2lkKToKKyAgICAgICAgICAgIGlmIGdpZCBpcyBOb25lIG9yIGdpZCA9PSAiLSI6CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgICAgICBlbGlmIGdpZC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChnaWQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBncnAuZ2V0Z3JuYW0oZ2lkKS5ncl9naWQKKworICAgICAgICAjIFVzZSBmb3IgZGVidWdnaW5nIHRoZSBlbnRyaWVzCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5saW5rOgorICAgICAgICAgICAgICAgIHJldHVybiAiJXMgbGluayAlcyIgJSAoc2VsZi5wYXRoLCBzZWxmLmxpbmspCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1vZGUgPSAiLSIKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1vZGU6CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiMCVvIiAlIHNlbGYubW9kZQorICAgICAgICAgICAgICAgIGZtb2RlID0gIi0iCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mbW9kZToKKyAgICAgICAgICAgICAgICAgICAgZm1vZGUgPSAiMCVvIiAlIHNlbGYuZm1vZGUKKyAgICAgICAgICAgICAgICB1aWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYudWlkKQorICAgICAgICAgICAgICAgIGdpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi5naWQpCisgICAgICAgICAgICAgICAgZnVpZCA9IHNlbGYuX21hcHVnaWQoc2VsZi5mdWlkKQorICAgICAgICAgICAgICAgIGZnaWQgPSBzZWxmLl9tYXB1Z2lkKHNlbGYuZmdpZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gIiVzICVzICVzICVzICVzICVzICVzICVzIiAlIChzZWxmLnBhdGgsIG1vZGUsIHVpZCwgZ2lkLCBzZWxmLndhbGssIGZtb2RlLCBmdWlkLCBmZ2lkKQorCisgICAgICAgIGRlZiBfbWFwdWdpZChzZWxmLCBpZCk6CisgICAgICAgICAgICBpZiBpZCBpcyBOb25lIG9yIGlkID09IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiAiLSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlZCIgJSBpZAorCisgICAgIyBGaXggdGhlIHBlcm1pc3Npb24sIG93bmVyIGFuZCBncm91cCBvZiBwYXRoCisgICAgZGVmIGZpeF9wZXJtcyhwYXRoLCBtb2RlLCB1aWQsIGdpZCwgZGlyKToKKyAgICAgICAgaWYgbW9kZSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKHBhdGgpOgorICAgICAgICAgICAgI2JiLm5vdGUoIkZpeHVwIFBlcm1zOiBjaG1vZCAwJW8gJXMiICUgKG1vZGUsIGRpcikpCisgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQorICAgICAgICAjIC0xIGlzIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IG1lYW5zIGRvbid0IGNoYW5nZSB0aGUgdWlkL2dpZAorICAgICAgICAjIGlmIHRoZXkgYXJlIEJPVEggLTEsIGRvbid0IGJvdGhlciB0byBsY2hvd24KKyAgICAgICAgaWYgbm90ICh1aWQgPT0gLTEgYW5kIGdpZCA9PSAtMSk6CisgICAgICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IGxjaG93biAlZDolZCAlcyIgJSAodWlkLCBnaWQsIGRpcikpCisgICAgICAgICAgICBvcy5sY2hvd24ocGF0aCwgdWlkLCBnaWQpCisKKyAgICAjIFJldHVybiBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvbiBlaXRoZXIgdGhlIGRlZmF1bHQKKyAgICAjIGZpbGVzL2ZzLXBlcm1zLnR4dCBvciB0aGUgY29udGVudHMgb2YgRklMRVNZU1RFTV9QRVJNU19UQUJMRVMKKyAgICAjIHBhdGhzIGFyZSByZXNvbHZlZCB2aWEgQkJQQVRICisgICAgZGVmIGdldF9mc19wZXJtc19saXN0KGQpOgorICAgICAgICBzdHIgPSAiIgorICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICAgICAgZnNfcGVybXNfdGFibGVzID0gZC5nZXRWYXIoJ0ZJTEVTWVNURU1fUEVSTVNfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGZzX3Blcm1zX3RhYmxlczoKKyAgICAgICAgICAgIGZzX3Blcm1zX3RhYmxlcyA9ICdmaWxlcy9mcy1wZXJtcy50eHQnCisgICAgICAgIGZvciBjb25mX2ZpbGUgaW4gZnNfcGVybXNfdGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICBzdHIgKz0gIiAlcyIgJSBiYi51dGlscy53aGljaChiYnBhdGgsIGNvbmZfZmlsZSkKKyAgICAgICAgcmV0dXJuIHN0cgorCisKKworICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisKKyAgICBmc19wZXJtc190YWJsZSA9IHt9CisKKyAgICAjIEJ5IGRlZmF1bHQgYWxsIG9mIHRoZSBzdGFuZGFyZCBkaXJlY3RvcmllcyBzcGVjaWZpZWQgaW4KKyAgICAjIGJpdGJha2UuY29uZiB3aWxsIGdldCAwNzU1IHJvb3Q6cm9vdC4KKyAgICB0YXJnZXRfcGF0aF92YXJzID0gWyAgICAnYmFzZV9wcmVmaXgnLAorICAgICAgICAgICAgICAgICdwcmVmaXgnLAorICAgICAgICAgICAgICAgICdleGVjX3ByZWZpeCcsCisgICAgICAgICAgICAgICAgJ2Jhc2VfYmluZGlyJywKKyAgICAgICAgICAgICAgICAnYmFzZV9zYmluZGlyJywKKyAgICAgICAgICAgICAgICAnYmFzZV9saWJkaXInLAorICAgICAgICAgICAgICAgICdkYXRhZGlyJywKKyAgICAgICAgICAgICAgICAnc3lzY29uZmRpcicsCisgICAgICAgICAgICAgICAgJ3NlcnZpY2VkaXInLAorICAgICAgICAgICAgICAgICdzaGFyZWRzdGF0ZWRpcicsCisgICAgICAgICAgICAgICAgJ2xvY2Fsc3RhdGVkaXInLAorICAgICAgICAgICAgICAgICdpbmZvZGlyJywKKyAgICAgICAgICAgICAgICAnbWFuZGlyJywKKyAgICAgICAgICAgICAgICAnZG9jZGlyJywKKyAgICAgICAgICAgICAgICAnYmluZGlyJywKKyAgICAgICAgICAgICAgICAnc2JpbmRpcicsCisgICAgICAgICAgICAgICAgJ2xpYmV4ZWNkaXInLAorICAgICAgICAgICAgICAgICdsaWJkaXInLAorICAgICAgICAgICAgICAgICdpbmNsdWRlZGlyJywKKyAgICAgICAgICAgICAgICAnb2xkaW5jbHVkZWRpcicgXQorCisgICAgZm9yIHBhdGggaW4gdGFyZ2V0X3BhdGhfdmFyczoKKyAgICAgICAgZGlyID0gZC5nZXRWYXIocGF0aCwgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgZGlyID09ICIiOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZnNfcGVybXNfdGFibGVbZGlyXSA9IGZzX3Blcm1zX2VudHJ5KGJiLmRhdGEuZXhwYW5kKCIlcyAwNzU1IHJvb3Qgcm9vdCBmYWxzZSAtIC0gLSIgJSAoZGlyKSwgZCkpCisKKyAgICAjIE5vdyB3ZSBhY3R1YWxseSBsb2FkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyAgICBmb3IgY29uZiBpbiBnZXRfZnNfcGVybXNfbGlzdChkKS5zcGxpdCgpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25mKToKKyAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGxzcGxpdCA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihsc3BsaXQpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbGVuKGxzcGxpdCkgIT0gOCBhbmQgbm90IChsZW4obHNwbGl0KSA9PSAzIGFuZCBsc3BsaXRbMV0ubG93ZXIoKSA9PSAibGluayIpOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAiRml4dXAgcGVybXM6ICVzIGludmFsaWQgbGluZTogJXMiICUgKGNvbmYsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwZXJtLWxpbmUiLCBtc2csIGQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZW50cnkgPSBmc19wZXJtc19lbnRyeShkLmV4cGFuZChsaW5lKSkKKyAgICAgICAgICAgICAgICBpZiBlbnRyeSBhbmQgZW50cnkucGF0aDoKKyAgICAgICAgICAgICAgICAgICAgZnNfcGVybXNfdGFibGVbZW50cnkucGF0aF0gPSBlbnRyeQorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjIERlYnVnIC0tIGxpc3Qgb3V0IGluLW1lbW9yeSB0YWJsZQorICAgICNmb3IgZGlyIGluIGZzX3Blcm1zX3RhYmxlOgorICAgICMgICAgYmIubm90ZSgiRml4dXAgUGVybXM6ICVzOiAlcyIgJSAoZGlyLCBzdHIoZnNfcGVybXNfdGFibGVbZGlyXSkpKQorCisgICAgIyBXZSBwcm9jZXNzIGxpbmtzIGZpcnN0LCBzbyB3ZSBjYW4gZ28gYmFjayBhbmQgZml4dXAgZGlyZWN0b3J5IG93bmVyc2hpcAorICAgICMgZm9yIGFueSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yaWVzCisgICAgZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAgICAgaWYgbm90IGZzX3Blcm1zX3RhYmxlW2Rpcl0ubGluazoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgb3JpZ2luID0gZHZhciArIGRpcgorICAgICAgICBpZiBub3QgKGNwYXRoLmV4aXN0cyhvcmlnaW4pIGFuZCBjcGF0aC5pc2RpcihvcmlnaW4pIGFuZCBub3QgY3BhdGguaXNsaW5rKG9yaWdpbikpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBsaW5rID0gZnNfcGVybXNfdGFibGVbZGlyXS5saW5rCisgICAgICAgIGlmIGxpbmtbMF0gPT0gIi8iOgorICAgICAgICAgICAgdGFyZ2V0ID0gZHZhciArIGxpbmsKKyAgICAgICAgICAgIHB0YXJnZXQgPSBsaW5rCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9yaWdpbiksIGxpbmspCisgICAgICAgICAgICBwdGFyZ2V0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShkaXIpLCBsaW5rKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0YXJnZXQpOgorICAgICAgICAgICAgbXNnID0gIkZpeHVwIFBlcm1zOiBVbmFibGUgdG8gY29ycmVjdCBkaXJlY3RvcnkgbGluaywgdGFyZ2V0IGFscmVhZHkgZXhpc3RzOiAlcyAtPiAlcyIgJSAoZGlyLCBwdGFyZ2V0KQorICAgICAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInBlcm0tbGluayIsIG1zZywgZCkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgIyBDcmVhdGUgcGF0aCB0byBtb3ZlIGRpcmVjdG9yeSB0bywgbW92ZSBpdCwgYW5kIHRoZW4gc2V0dXAgdGhlIHN5bWxpbmsKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZSh0YXJnZXQpKQorICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IFJlbmFtZSAlcyAtPiAlcyIgJSAoZGlyLCBwdGFyZ2V0KSkKKyAgICAgICAgb3MucmVuYW1lKG9yaWdpbiwgdGFyZ2V0KQorICAgICAgICAjYmIubm90ZSgiRml4dXAgUGVybXM6IExpbmsgJXMgLT4gJXMiICUgKGRpciwgbGluaykpCisgICAgICAgIG9zLnN5bWxpbmsobGluaywgb3JpZ2luKQorCisgICAgZm9yIGRpciBpbiBmc19wZXJtc190YWJsZToKKyAgICAgICAgaWYgZnNfcGVybXNfdGFibGVbZGlyXS5saW5rOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBvcmlnaW4gPSBkdmFyICsgZGlyCisgICAgICAgIGlmIG5vdCAoY3BhdGguZXhpc3RzKG9yaWdpbikgYW5kIGNwYXRoLmlzZGlyKG9yaWdpbikpOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBmaXhfcGVybXMob3JpZ2luLCBmc19wZXJtc190YWJsZVtkaXJdLm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0udWlkLCBmc19wZXJtc190YWJsZVtkaXJdLmdpZCwgZGlyKQorCisgICAgICAgIGlmIGZzX3Blcm1zX3RhYmxlW2Rpcl0ud2FsayA9PSAndHJ1ZSc6CisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhvcmlnaW4pOgorICAgICAgICAgICAgICAgIGZvciBkciBpbiBkaXJzOgorICAgICAgICAgICAgICAgICAgICBlYWNoX2RpciA9IG9zLnBhdGguam9pbihyb290LCBkcikKKyAgICAgICAgICAgICAgICAgICAgZml4X3Blcm1zKGVhY2hfZGlyLCBmc19wZXJtc190YWJsZVtkaXJdLm1vZGUsIGZzX3Blcm1zX3RhYmxlW2Rpcl0udWlkLCBmc19wZXJtc190YWJsZVtkaXJdLmdpZCwgZGlyKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBlYWNoX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgICAgICAgICAgZml4X3Blcm1zKGVhY2hfZmlsZSwgZnNfcGVybXNfdGFibGVbZGlyXS5mbW9kZSwgZnNfcGVybXNfdGFibGVbZGlyXS5mdWlkLCBmc19wZXJtc190YWJsZVtkaXJdLmZnaWQsIGRpcikKK30KKworcHl0aG9uIHNwbGl0X2FuZF9zdHJpcF9maWxlcyAoKSB7CisgICAgaW1wb3J0IHN0YXQsIGVycm5vCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgICMgV2UgZGVmYXVsdCB0byAnLmRlYnVnJyBzdHlsZQorICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFX0RFQlVHX1NQTElUX1NUWUxFJywgVHJ1ZSkgPT0gJ2RlYnVnLWZpbGUtZGlyZWN0b3J5JzoKKyAgICAgICAgIyBTaW5nbGUgZGVidWctZmlsZS1kaXJlY3Rvcnkgc3R5bGUgZGVidWcgaW5mbworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIuZGVidWciCisgICAgICAgIGRlYnVnZGlyID0gIiIKKyAgICAgICAgZGVidWdsaWJkaXIgPSAiL3Vzci9saWIvZGVidWciCisgICAgICAgIGRlYnVnc3JjZGlyID0gIi91c3Ivc3JjL2RlYnVnIgorICAgIGVsaWYgZC5nZXRWYXIoJ1BBQ0tBR0VfREVCVUdfU1BMSVRfU1RZTEUnLCBUcnVlKSA9PSAnZGVidWctd2l0aG91dC1zcmMnOgorICAgICAgICAjIE9yaWdpbmFsIE9FLWNvcmUsIGEuay5hLiAiLmRlYnVnIiwgc3R5bGUgZGVidWcgaW5mbywgYnV0IHdpdGhvdXQgc291cmNlcyBpbiAvdXNyL3NyYy9kZWJ1ZworICAgICAgICBkZWJ1Z2FwcGVuZCA9ICIiCisgICAgICAgIGRlYnVnZGlyID0gIi8uZGVidWciCisgICAgICAgIGRlYnVnbGliZGlyID0gIiIKKyAgICAgICAgZGVidWdzcmNkaXIgPSAiIgorICAgIGVsc2U6CisgICAgICAgICMgT3JpZ2luYWwgT0UtY29yZSwgYS5rLmEuICIuZGVidWciLCBzdHlsZSBkZWJ1ZyBpbmZvCisgICAgICAgIGRlYnVnYXBwZW5kID0gIiIKKyAgICAgICAgZGVidWdkaXIgPSAiLy5kZWJ1ZyIKKyAgICAgICAgZGVidWdsaWJkaXIgPSAiIgorICAgICAgICBkZWJ1Z3NyY2RpciA9ICIvdXNyL3NyYy9kZWJ1ZyIKKworICAgIHNvdXJjZWZpbGUgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9kZWJ1Z3NvdXJjZXMubGlzdCIpCisgICAgYmIudXRpbHMucmVtb3ZlKHNvdXJjZWZpbGUpCisKKyAgICBvcy5jaGRpcihkdmFyKQorCisgICAgIyBSZXR1cm4gdHlwZSAoYml0cyk6CisgICAgIyAwIC0gbm90IGVsZgorICAgICMgMSAtIEVMRgorICAgICMgMiAtIHN0cmlwcGVkCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKyAgICBkZWYgaXNFTEYocGF0aCk6CisgICAgICAgIHR5cGUgPSAwCisgICAgICAgIHJldCwgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJmaWxlIFwiJXNcIiIgJSBwYXRoLnJlcGxhY2UoIlwiIiwgIlxcXCIiKSkKKworICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBtc2cgPSAic3BsaXRfYW5kX3N0cmlwX2ZpbGVzOiAnZmlsZSAlcycgZmFpbGVkIiAlIHBhdGgKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJzcGxpdC1zdHJpcCIsIG1zZywgZCkKKyAgICAgICAgICAgIHJldHVybiB0eXBlCisKKyAgICAgICAgIyBOb3Qgc3RyaXBwZWQKKyAgICAgICAgaWYgIkVMRiIgaW4gcmVzdWx0OgorICAgICAgICAgICAgdHlwZSB8PSAxCisgICAgICAgICAgICBpZiAibm90IHN0cmlwcGVkIiBub3QgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gMgorICAgICAgICAgICAgaWYgImV4ZWN1dGFibGUiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDQKKyAgICAgICAgICAgIGlmICJzaGFyZWQiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDgKKyAgICAgICAgcmV0dXJuIHR5cGUKKworCisgICAgIworICAgICMgRmlyc3QgbGV0cyBmaWd1cmUgb3V0IGFsbCBvZiB0aGUgZmlsZXMgd2UgbWF5IGhhdmUgdG8gcHJvY2VzcyAuLi4gZG8gdGhpcyBvbmx5IG9uY2UhCisgICAgIworICAgIGVsZmZpbGVzID0ge30KKyAgICBzeW1saW5rcyA9IHt9CisgICAga2Vybm1vZHMgPSBbXQorICAgIGlub2RlcyA9IHt9CisgICAgbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpCisgICAgYmFzZWxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkpCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhkdmFyKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZikKKyAgICAgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCIua28iKSBhbmQgZmlsZS5maW5kKCIvbGliL21vZHVsZXMvIikgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIGtlcm5tb2RzLmFwcGVuZChmaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIyBTa2lwIGRlYnVnIGZpbGVzCisgICAgICAgICAgICAgICAgaWYgZGVidWdhcHBlbmQgYW5kIGZpbGUuZW5kc3dpdGgoZGVidWdhcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIGRlYnVnZGlyIGFuZCBkZWJ1Z2RpciBpbiBvcy5wYXRoLmRpcm5hbWUoZmlsZVtsZW4oZHZhcik6XSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGx0YXJnZXQgPSBjcGF0aC5yZWFscGF0aChmaWxlLCBkdmFyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcyA9IGNwYXRoLmxzdGF0KGx0YXJnZXQpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgKGVyciwgc3RyZXJyb3IpID0gZS5hcmdzCisgICAgICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAjIFNraXAgYnJva2VuIHN5bWxpbmtzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBDaGVjayBpdHMgYW4gZXhjdXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWFVTUikgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWEdSUCkgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChmaWxlLnN0YXJ0c3dpdGgobGliZGlyKSBvciBmaWxlLnN0YXJ0c3dpdGgoYmFzZWxpYmRpcikpIGFuZCAiLnNvIiBpbiBmKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBpdCdzIGEgc3ltbGluaywgYW5kIHBvaW50cyB0byBhbiBFTEYgZmlsZSwgd2UgY2FwdHVyZSB0aGUgcmVhZGxpbmsgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGlmIGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IG9zLnJlYWRsaW5rKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc0VMRihsdGFyZ2V0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYmIubm90ZSgiU3ltOiAlcyAoJWQpIiAlIChsdGFyZ2V0LCBpc0VMRihsdGFyZ2V0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3NbZmlsZV0gPSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgZmlsZSAob3IgaGFyZGxpbmspLCBub3QgYSBsaW5rCisgICAgICAgICAgICAgICAgICAgICMgLi4uYnV0IGlzIGl0IEVMRiwgYW5kIGlzIGl0IGFscmVhZHkgc3RyaXBwZWQ/CisgICAgICAgICAgICAgICAgICAgIGVsZl9maWxlID0gaXNFTEYoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZWxmX2ZpbGUgJiAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICdhbHJlYWR5LXN0cmlwcGVkJyBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIlNraXBwaW5nIGZpbGUgJXMgZnJvbSAlcyBmb3IgYWxyZWFkeS1zdHJpcHBlZCBRQSB0ZXN0IiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gIkZpbGUgJyVzJyBmcm9tICVzIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCB0aGlzIHdpbGwgcHJldmVudCBmdXR1cmUgZGVidWdnaW5nISIgJSAoZmlsZVtsZW4oZHZhcik6XSwgcG4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJhbHJlYWR5LXN0cmlwcGVkIiwgbXNnLCBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGFuIHVuc3RyaXBwZWQgZWxmIGZpbGUuIFdlIG5lZWQgdG86CisgICAgICAgICAgICAgICAgICAgICAgICAjICBhKSBNYWtlIHN1cmUgYW55IGZpbGUgd2Ugc3RyaXAgaXMgbm90IGhhcmRsaW5rZWQgdG8gYW55dGhpbmcgZWxzZSBvdXRzaWRlIHRoaXMgdHJlZQorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYikgT25seSBzdHJpcCBhbnkgaGFyZGxpbmtlZCBmaWxlIG9uY2UgKG5vIHJhY2VzKQorICAgICAgICAgICAgICAgICAgICAgICAgIyAgYykgVHJhY2sgYW55IGhhcmRsaW5rcyBiZXR3ZWVuIGZpbGVzIHNvIHRoYXQgd2UgY2FuIHJlY29uc3RydWN0IG1hdGNoaW5nIGRlYnVnIGZpbGUgaGFyZGxpbmtzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlIGEgcmVmZXJlbmNlIG9mIGRldmljZSBJRCBhbmQgaW5vZGUgbnVtYmVyIHRvIGluZGVudGlmeSBmaWxlcworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9yZWZlcmVuY2UgPSAiJWRfJWQiICUgKHMuc3RfZGV2LCBzLnN0X2lubykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbGVfcmVmZXJlbmNlIGluIGlub2RlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5rKGlub2Rlc1tmaWxlX3JlZmVyZW5jZV1bMF0sIGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW2ZpbGVfcmVmZXJlbmNlXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW2ZpbGVfcmVmZXJlbmNlXSA9IFtmaWxlXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYnJlYWsgaGFyZGxpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmaWxlLCBmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZmZpbGVzW2ZpbGVdID0gZWxmX2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTW9kaWZpZWQgdGhlIGZpbGUgc28gY2xlYXIgdGhlIGNhY2hlCisgICAgICAgICAgICAgICAgICAgICAgICBjcGF0aC51cGRhdGVjYWNoZShmaWxlKQorCisgICAgIworICAgICMgRmlyc3QgbGV0cyBwcm9jZXNzIGRlYnVnIHNwbGl0dGluZworICAgICMKKyAgICBpZiAoZC5nZXRWYXIoJ0lOSElCSVRfUEFDS0FHRV9ERUJVR19TUExJVCcsIFRydWUpICE9ICcxJyk6CisgICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgorICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3JjKSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBmcGF0aCA9IGR2YXIgKyBkZXN0CisKKyAgICAgICAgICAgICMgU3BsaXQgdGhlIGZpbGUuLi4KKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgI2JiLm5vdGUoIlNwbGl0ICVzIC0+ICVzIiAlIChmaWxlLCBmcGF0aCkpCisgICAgICAgICAgICAjIE9ubHkgc3RvcmUgb2ZmIHRoZSBoYXJkIGxpbmsgcmVmZXJlbmNlIGlmIHdlIHN1Y2Nlc3NmdWxseSBzcGxpdCEKKyAgICAgICAgICAgIHNwbGl0ZGVidWdpbmZvKGZpbGUsIGZwYXRoLCBkZWJ1Z3NyY2Rpciwgc291cmNlZmlsZSwgZCkKKworICAgICAgICAjIEhhcmRsaW5rIG91ciBkZWJ1ZyBzeW1ib2xzIHRvIHRoZSBvdGhlciBoYXJkbGluayBjb3BpZXMKKyAgICAgICAgZm9yIHJlZiBpbiBpbm9kZXM6CisgICAgICAgICAgICBpZiBsZW4oaW5vZGVzW3JlZl0pID09IDE6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGlub2Rlc1tyZWZdWzE6XToKKyAgICAgICAgICAgICAgICBzcmMgPSBmaWxlW2xlbihkdmFyKTpdCisgICAgICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3JjKSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICAgICAgZnBhdGggPSBkdmFyICsgZGVzdAorICAgICAgICAgICAgICAgIHRhcmdldCA9IGlub2Rlc1tyZWZdWzBdW2xlbihkdmFyKTpdCisgICAgICAgICAgICAgICAgZnRhcmdldCA9IGR2YXIgKyBkZWJ1Z2xpYmRpciArIG9zLnBhdGguZGlybmFtZSh0YXJnZXQpICsgZGVidWdkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHRhcmdldCkgKyBkZWJ1Z2FwcGVuZAorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZnBhdGgpKQorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJMaW5rICVzIC0+ICVzIiAlIChmcGF0aCwgZnRhcmdldCkpCisgICAgICAgICAgICAgICAgb3MubGluayhmdGFyZ2V0LCBmcGF0aCkKKworICAgICAgICAjIENyZWF0ZSBzeW1saW5rcyBmb3IgYWxsIGNhc2VzIHdlIHdlcmUgYWJsZSB0byBzcGxpdCBzeW1ib2xzCisgICAgICAgIGZvciBmaWxlIGluIHN5bWxpbmtzOgorICAgICAgICAgICAgc3JjID0gZmlsZVtsZW4oZHZhcik6XQorICAgICAgICAgICAgZGVzdCA9IGRlYnVnbGliZGlyICsgb3MucGF0aC5kaXJuYW1lKHNyYykgKyBkZWJ1Z2RpciArICIvIiArIG9zLnBhdGguYmFzZW5hbWUoc3JjKSArIGRlYnVnYXBwZW5kCisgICAgICAgICAgICBmcGF0aCA9IGR2YXIgKyBkZXN0CisgICAgICAgICAgICAjIFNraXAgaXQgaWYgdGhlIHRhcmdldCBkb2Vzbid0IGV4aXN0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcyA9IG9zLnN0YXQoZnBhdGgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIChlcnIsIHN0cmVycm9yKSA9IGUuYXJncworICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbHRhcmdldCA9IHN5bWxpbmtzW2ZpbGVdCisgICAgICAgICAgICBscGF0aCA9IG9zLnBhdGguZGlybmFtZShsdGFyZ2V0KQorICAgICAgICAgICAgbGJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGx0YXJnZXQpCisgICAgICAgICAgICBmdGFyZ2V0ID0gIiIKKyAgICAgICAgICAgIGlmIGxwYXRoIGFuZCBscGF0aCAhPSAiLiI6CisgICAgICAgICAgICAgICAgZnRhcmdldCArPSBscGF0aCArIGRlYnVnZGlyICsgIi8iCisgICAgICAgICAgICBmdGFyZ2V0ICs9IGxiYXNlICsgZGVidWdhcHBlbmQKKyAgICAgICAgICAgIGlmIGxwYXRoLnN0YXJ0c3dpdGgoIi4uIik6CisgICAgICAgICAgICAgICAgZnRhcmdldCA9IG9zLnBhdGguam9pbigiLi4iLCBmdGFyZ2V0KQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmcGF0aCkpCisgICAgICAgICAgICAjYmIubm90ZSgiU3ltbGluayAlcyAtPiAlcyIgJSAoZnBhdGgsIGZ0YXJnZXQpKQorICAgICAgICAgICAgb3Muc3ltbGluayhmdGFyZ2V0LCBmcGF0aCkKKworICAgICAgICAjIFByb2Nlc3MgdGhlIGRlYnVnc3JjZGlyIGlmIHJlcXVlc3RlZC4uLgorICAgICAgICAjIFRoaXMgY29waWVzIGFuZCBwbGFjZXMgdGhlIHJlZmVyZW5jZWQgc291cmNlcyBmb3IgbGF0ZXIgZGVidWdnaW5nLi4uCisgICAgICAgIGNvcHlkZWJ1Z3NvdXJjZXMoZGVidWdzcmNkaXIsIGQpCisgICAgIworICAgICMgRW5kIG9mIGRlYnVnIHNwbGl0dGluZworICAgICMKKworICAgICMKKyAgICAjIE5vdyBsZXRzIGdvIGJhY2sgb3ZlciB0aGluZ3MgYW5kIHN0cmlwIHRoZW0KKyAgICAjCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1BBQ0tBR0VfU1RSSVAnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIsIFRydWUpCisgICAgICAgIHNmaWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgorICAgICAgICAgICAgZWxmX2ZpbGUgPSBpbnQoZWxmZmlsZXNbZmlsZV0pCisgICAgICAgICAgICAjYmIubm90ZSgiU3RyaXAgJXMiICUgZmlsZSkKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGZpbGUsIGVsZl9maWxlLCBzdHJpcCkpCisgICAgICAgIGZvciBmIGluIGtlcm5tb2RzOgorICAgICAgICAgICAgc2ZpbGVzLmFwcGVuZCgoZiwgMTYsIHN0cmlwKSkKKworICAgICAgICBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhzZmlsZXMsIG9lLnBhY2thZ2UucnVuc3RyaXApCisKKyAgICAjCisgICAgIyBFbmQgb2Ygc3RyaXAKKyAgICAjCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlcyAoKSB7CisgICAgaW1wb3J0IGdsb2IsIHJlCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSkKKyAgICBkdmFyID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3V0ZGlyKQorICAgIG9zLmNoZGlyKGR2YXIpCisKKyAgICAjIFNhbml0eSBjaGVjayBQQUNLQUdFUyBmb3IgZHVwbGljYXRlcworICAgICMgU2FuaXR5IHNob3VsZCBiZSBtb3ZlZCB0byBzYW5pdHkuYmJjbGFzcyBvbmNlIHdlIGhhdmUgdGhlIGluZnJhc3R1Y3R1cmUKKyAgICBwYWNrYWdlX2xpc3QgPSBbXQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBpZiBwa2cgaW4gcGFja2FnZV9saXN0OgorICAgICAgICAgICAgbXNnID0gIiVzIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgJSBwa2cKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJwYWNrYWdlcy1saXN0IiwgbXNnLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9saXN0LmFwcGVuZChwa2cpCisgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgJyAnLmpvaW4ocGFja2FnZV9saXN0KSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgc2VlbiA9IFtdCisKKyAgICAjIG9zLm1rZGlyIG1hc2tzIHRoZSBwZXJtaXNzaW9ucyB3aXRoIHVtYXNrIHNvIHdlIGhhdmUgdG8gdW5zZXQgaXQgZmlyc3QKKyAgICBvbGR1bWFzayA9IG9zLnVtYXNrKDApCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VfbGlzdDoKKyAgICAgICAgcm9vdCA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihyb290KQorCisgICAgICAgIGZpbGVzdmFyID0gZC5nZXRWYXIoJ0ZJTEVTXyVzJyAlIHBrZywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgaWYgIi8vIiBpbiBmaWxlc3ZhcjoKKyAgICAgICAgICAgIG1zZyA9ICJGSUxFUyB2YXJpYWJsZSBmb3IgcGFja2FnZSAlcyBjb250YWlucyAnLy8nIHdoaWNoIGlzIGludmFsaWQuIEF0dGVtcHRpbmcgdG8gZml4IHRoaXMgYnV0IHlvdSBzaG91bGQgY29ycmVjdCB0aGUgbWV0YWRhdGEuXG4iICUgcGtnCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiZmlsZXMtaW52YWxpZCIsIG1zZywgZCkKKyAgICAgICAgICAgIGZpbGVzdmFyLnJlcGxhY2UoIi8vIiwgIi8iKQorCisgICAgICAgIG9yaWdmaWxlcyA9IGZpbGVzdmFyLnNwbGl0KCkKKyAgICAgICAgZmlsZXMgPSBmaWxlc19mcm9tX2ZpbGV2YXJzKG9yaWdmaWxlcykKKworICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIChub3QgY3BhdGguaXNsaW5rKGZpbGUpKSBhbmQgKG5vdCBjcGF0aC5leGlzdHMoZmlsZSkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBmaWxlIGluIHNlZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlZW4uYXBwZW5kKGZpbGUpCisKKyAgICAgICAgICAgIGRlZiBta2RpcihzcmMsIGRlc3QsIHApOgorICAgICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihzcmMsIHApCisgICAgICAgICAgICAgICAgZGVzdCA9IG9zLnBhdGguam9pbihkZXN0LCBwKQorICAgICAgICAgICAgICAgIGZzdGF0ID0gY3BhdGguc3RhdChzcmMpCisgICAgICAgICAgICAgICAgb3MubWtkaXIoZGVzdCwgZnN0YXQuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICBvcy5jaG93bihkZXN0LCBmc3RhdC5zdF91aWQsIGZzdGF0LnN0X2dpZCkKKyAgICAgICAgICAgICAgICBpZiBwIG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICBzZWVuLmFwcGVuZChwKQorICAgICAgICAgICAgICAgIGNwYXRoLnVwZGF0ZWNhY2hlKGRlc3QpCisKKyAgICAgICAgICAgIGRlZiBta2Rpcl9yZWN1cnNlKHNyYywgZGVzdCwgcGF0aHMpOgorICAgICAgICAgICAgICAgIGlmIGNwYXRoLmV4aXN0cyhkZXN0ICsgJy8nICsgcGF0aHMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICB3aGlsZSBwYXRocy5zdGFydHN3aXRoKCIuLyIpOgorICAgICAgICAgICAgICAgICAgICBwYXRocyA9IHBhdGhzWzI6XQorICAgICAgICAgICAgICAgIHAgPSAiLiIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBwYXRocy5zcGxpdCgiLyIpOgorICAgICAgICAgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHAsIGMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5leGlzdHMob3MucGF0aC5qb2luKGRlc3QsIHApKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKHNyYywgZGVzdCwgcCkKKworICAgICAgICAgICAgaWYgY3BhdGguaXNkaXIoZmlsZSkgYW5kIG5vdCBjcGF0aC5pc2xpbmsoZmlsZSk6CisgICAgICAgICAgICAgICAgbWtkaXJfcmVjdXJzZShkdmFyLCByb290LCBmaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIG1rZGlyX3JlY3Vyc2UoZHZhciwgcm9vdCwgb3MucGF0aC5kaXJuYW1lKGZpbGUpKQorICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCxmaWxlKQorICAgICAgICAgICAgaWYgbm90IGNwYXRoLmlzbGluayhmaWxlKToKKyAgICAgICAgICAgICAgICBvcy5saW5rKGZpbGUsIGZwYXRoKQorICAgICAgICAgICAgICAgIGZzdGF0ID0gY3BhdGguc3RhdChmaWxlKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGZwYXRoLCBmc3RhdC5zdF9tb2RlKQorICAgICAgICAgICAgICAgIG9zLmNob3duKGZwYXRoLCBmc3RhdC5zdF91aWQsIGZzdGF0LnN0X2dpZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcmV0ID0gYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZnBhdGgpCisgICAgICAgICAgICBpZiByZXQgaXMgRmFsc2Ugb3IgcmV0ID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiRmlsZSBwb3B1bGF0aW9uIGZhaWxlZCIpCisKKyAgICBvcy51bWFzayhvbGR1bWFzaykKKyAgICBvcy5jaGRpcih3b3JrZGlyKQorCisgICAgIyBIYW5kbGUgTElDRU5TRV9FWENMVVNJT04KKyAgICBwYWNrYWdlX2xpc3QgPSBbXQorICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0xJQ0VOU0VfRVhDTFVTSU9OLScgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgbXNnID0gIiVzIGhhcyBhbiBpbmNvbXBhdGlibGUgbGljZW5zZS4gRXhjbHVkaW5nIGZyb20gcGFja2FnaW5nLiIgJSBwa2cKKyAgICAgICAgICAgIHBhY2thZ2VfcWFfaGFuZGxlX2Vycm9yKCJpbmNvbXBhdGlibGUtbGljZW5zZSIsIG1zZywgZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhY2thZ2VfbGlzdC5hcHBlbmQocGtnKQorICAgIGQuc2V0VmFyKCdQQUNLQUdFUycsICcgJy5qb2luKHBhY2thZ2VfbGlzdCkpCisKKyAgICB1bnNoaXBwZWQgPSBbXQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBjcGF0aC53YWxrKGR2YXIpOgorICAgICAgICBkaXIgPSByb290W2xlbihkdmFyKTpdCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBkaXIgPSBvcy5zZXAKKyAgICAgICAgZm9yIGYgaW4gKGZpbGVzICsgZGlycyk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpciwgZikKKyAgICAgICAgICAgIGlmICgnLicgKyBwYXRoKSBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICB1bnNoaXBwZWQuYXBwZW5kKHBhdGgpCisKKyAgICBpZiB1bnNoaXBwZWQgIT0gW106CisgICAgICAgIG1zZyA9IHBuICsgIjogRmlsZXMvZGlyZWN0b3JpZXMgd2VyZSBpbnN0YWxsZWQgYnV0IG5vdCBzaGlwcGVkIGluIGFueSBwYWNrYWdlOiIKKyAgICAgICAgaWYgImluc3RhbGxlZC12cy1zaGlwcGVkIiBpbiAoZC5nZXRWYXIoJ0lOU0FORV9TS0lQXycgKyBwbiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBiYi5ub3RlKCJQYWNrYWdlICVzIHNraXBwaW5nIFFBIHRlc3RzOiBpbnN0YWxsZWQtdnMtc2hpcHBlZCIgJSBwbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBmIGluIHVuc2hpcHBlZDoKKyAgICAgICAgICAgICAgICBtc2cgPSBtc2cgKyAiXG4gICIgKyBmCisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiXG5QbGVhc2Ugc2V0IEZJTEVTIHN1Y2ggdGhhdCB0aGVzZSBpdGVtcyBhcmUgcGFja2FnZWQuIEFsdGVybmF0aXZlbHkgaWYgdGhleSBhcmUgdW5uZWVkZWQsIGF2b2lkIGluc3RhbGxpbmcgdGhlbSBvciBkZWxldGUgdGhlbSB3aXRoaW4gZG9faW5zdGFsbC4iCisgICAgICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigiaW5zdGFsbGVkLXZzLXNoaXBwZWQiLCBtc2csIGQpCit9Citwb3B1bGF0ZV9wYWNrYWdlc1tkaXJzXSA9ICIke0R9IgorCitweXRob24gcGFja2FnZV9maXhzeW1saW5rcyAoKSB7CisgICAgaW1wb3J0IGVycm5vCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIEZhbHNlKS5zcGxpdCgpCisKKyAgICBkYW5nbGluZ19saW5rcyA9IHt9CisgICAgcGtnX2ZpbGVzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBkYW5nbGluZ19saW5rc1twa2ddID0gW10KKyAgICAgICAgcGtnX2ZpbGVzW3BrZ10gPSBbXQorICAgICAgICBpbnN0X3Jvb3QgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBmb3IgcGF0aCBpbiBwa2dmaWxlc1twa2ddOgorICAgICAgICAgICAgICAgIHJwYXRoID0gcGF0aFtsZW4oaW5zdF9yb290KTpdCisgICAgICAgICAgICAgICAgcGtnX2ZpbGVzW3BrZ10uYXBwZW5kKHJwYXRoKQorICAgICAgICAgICAgICAgIHJ0YXJnZXQgPSBjcGF0aC5yZWFscGF0aChwYXRoLCBpbnN0X3Jvb3QsIFRydWUsIGFzc3VtZV9kaXIgPSBUcnVlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBjcGF0aC5sZXhpc3RzKHJ0YXJnZXQpOgorICAgICAgICAgICAgICAgICAgICBkYW5nbGluZ19saW5rc1twa2ddLmFwcGVuZChvcy5wYXRoLm5vcm1wYXRoKHJ0YXJnZXRbbGVuKGluc3Rfcm9vdCk6XSkpCisKKyAgICBuZXdyZGVwZW5kcyA9IHt9CisgICAgZm9yIHBrZyBpbiBkYW5nbGluZ19saW5rczoKKyAgICAgICAgZm9yIGwgaW4gZGFuZ2xpbmdfbGlua3NbcGtnXToKKyAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICIlcyBjb250YWlucyBkYW5nbGluZyBsaW5rICVzIiAlIChwa2csIGwpKQorICAgICAgICAgICAgZm9yIHAgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgaWYgbCBpbiBwa2dfZmlsZXNbcF06CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmRlYnVnKDEsICJ0YXJnZXQgZm91bmQgaW4gJXMiICUgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAgPT0gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwa2cgbm90IGluIG5ld3JkZXBlbmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JkZXBlbmRzW3BrZ10gPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmRlcGVuZHNbcGtnXS5hcHBlbmQocCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBmb3VuZCA9PSBGYWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCIlcyBjb250YWlucyBkYW5nbGluZyBzeW1saW5rIHRvICVzIiAlIChwa2csIGwpKQorCisgICAgZm9yIHBrZyBpbiBuZXdyZGVwZW5kczoKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JERVBFTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorICAgICAgICBmb3IgcCBpbiBuZXdyZGVwZW5kc1twa2ddOgorICAgICAgICAgICAgaWYgcCBub3QgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICAgICAgcmRlcGVuZHNbcF0gPSBbXQorICAgICAgICBkLnNldFZhcignUkRFUEVORFNfJyArIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJkZXBlbmRzLCBjb21tYXNlcD1GYWxzZSkpCit9CisKKworcHl0aG9uIHBhY2thZ2VfcGFja2FnZV9uYW1lX2hvb2soKSB7CisgICAgIiIiCisgICAgQSBwYWNrYWdlX25hbWVfaG9vayBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byByZXdyaXRlIHRoZSBwYWNrYWdlIG5hbWVzIGJ5CisgICAgY2hhbmdpbmcgUEtHLiAgRm9yIGFuIGV4YW1wbGUsIHNlZSBkZWJpYW4uYmJjbGFzcy4KKyAgICAiIiIKKyAgICBwYXNzCit9CisKK0VYUE9SVF9GVU5DVElPTlMgcGFja2FnZV9uYW1lX2hvb2sKKworCitQS0dERVNUV09SSyA9ICIke1dPUktESVJ9L3BrZ2RhdGEiCisKK3B5dGhvbiBlbWl0X3BrZ2RhdGEoKSB7CisgICAgZnJvbSBnbG9iIGltcG9ydCBnbG9iCisgICAgaW1wb3J0IGpzb24KKworICAgIGRlZiB3cml0ZV9pZl9leGlzdHMoZiwgcGtnLCB2YXIpOgorICAgICAgICBkZWYgZW5jb2RlKHN0cik6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBjID0gY29kZWNzLmdldGVuY29kZXIoInN0cmluZ19lc2NhcGUiKQorICAgICAgICAgICAgcmV0dXJuIGMoc3RyKVswXQorCisgICAgICAgIHZhbCA9IGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBmLndyaXRlKCclc18lczogJXNcbicgJSAodmFyLCBwa2csIGVuY29kZSh2YWwpKSkKKyAgICAgICAgICAgIHJldHVybiB2YWwKKyAgICAgICAgdmFsID0gZC5nZXRWYXIoJyVzJyAlICh2YXIpLCBUcnVlKQorICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICBmLndyaXRlKCclczogJXNcbicgJSAodmFyLCBlbmNvZGUodmFsKSkpCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiB3cml0ZV9leHRyYV9wa2dzKHZhcmlhbnRzLCBwbiwgcGFja2FnZXMsIHBrZ2RhdGFkaXIpOgorICAgICAgICBmb3IgdmFyaWFudCBpbiB2YXJpYW50czoKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvJXMtJXMiICUgKHBrZ2RhdGFkaXIsIHZhcmlhbnQsIHBuKSwgJ3cnKSBhcyBmZDoKKyAgICAgICAgICAgICAgICBmZC53cml0ZSgiUEFDS0FHRVM6ICVzXG4iICUgJyAnLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGxhbWJkYSBwa2c6ICclcy0lcycgJSAodmFyaWFudCwgcGtnKSwgcGFja2FnZXMuc3BsaXQoKSkpKQorCisgICAgZGVmIHdyaXRlX2V4dHJhX3J1bnRpbWVfcGtncyh2YXJpYW50cywgcGFja2FnZXMsIHBrZ2RhdGFkaXIpOgorICAgICAgICBmb3IgdmFyaWFudCBpbiB2YXJpYW50czoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBtbF9wa2cgPSAiJXMtJXMiICUgKHZhcmlhbnQsIHBrZykKKyAgICAgICAgICAgICAgICBzdWJkYXRhX2ZpbGUgPSAiJXMvcnVudGltZS8lcyIgJSAocGtnZGF0YWRpciwgbWxfcGtnKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzdWJkYXRhX2ZpbGUsICd3JykgYXMgZmQ6CisgICAgICAgICAgICAgICAgICAgIGZkLndyaXRlKCJQS0dfJXM6ICVzIiAlIChtbF9wa2csIHBrZykpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBwa2dkYXRhZGlyID0gZC5nZXRWYXIoJ1BLR0RFU1RXT1JLJywgVHJ1ZSkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSwgVHJ1ZSkKKworICAgIGRhdGFfZmlsZSA9IHBrZ2RhdGFkaXIgKyBkLmV4cGFuZCgiLyR7UE59IiApCisgICAgZiA9IG9wZW4oZGF0YV9maWxlLCAndycpCisgICAgZi53cml0ZSgiUEFDS0FHRVM6ICVzXG4iICUgcGFja2FnZXMpCisgICAgZi5jbG9zZSgpCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgZ2xvYmFsX3ZhcmlhbnRzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcmlhbnRzID0gKGQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9wa2dzKHZhcmlhbnRzLCBwbiwgcGFja2FnZXMsIHBrZ2RhdGFkaXIpCisKKyAgICBpZiAoYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCkpOgorICAgICAgICB3cml0ZV9leHRyYV9wa2dzKGdsb2JhbF92YXJpYW50cywgcG4sIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtndmFsID0gZC5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHBrZ3ZhbCBpcyBOb25lOgorICAgICAgICAgICAgcGtndmFsID0gcGtnCisgICAgICAgICAgICBkLnNldFZhcignUEtHXyVzJyAlIHBrZywgcGtnKQorCisgICAgICAgIHBrZ2Rlc3Rwa2cgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICBmaWxlcyA9IHt9CisgICAgICAgIHRvdGFsX3NpemUgPSAwCisgICAgICAgIGZvciBmIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICByZWxwdGggPSBvcy5wYXRoLnJlbHBhdGgoZiwgcGtnZGVzdHBrZykKKyAgICAgICAgICAgIGZzdGF0ID0gb3MubHN0YXQoZikKKyAgICAgICAgICAgIHRvdGFsX3NpemUgKz0gZnN0YXQuc3Rfc2l6ZQorICAgICAgICAgICAgZmlsZXNbb3Muc2VwICsgcmVscHRoXSA9IGZzdGF0LnN0X3NpemUKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTX0lORk8nLCBqc29uLmR1bXBzKGZpbGVzKSkKKworICAgICAgICBzdWJkYXRhX2ZpbGUgPSBwa2dkYXRhZGlyICsgIi9ydW50aW1lLyVzIiAlIHBrZworICAgICAgICBzZiA9IG9wZW4oc3ViZGF0YV9maWxlLCAndycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUE4nKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BFJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdQVicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUFInKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLR0UnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLR1YnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1BLR1InKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0xJQ0VOU0UnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0RFU0NSSVBUSU9OJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdTVU1NQVJZJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSREVQRU5EUycpCisgICAgICAgIHJwcm92ID0gd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSUFJPVklERVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JSRUNPTU1FTkRTJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdSU1VHR0VTVFMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ1JSRVBMQUNFUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUkNPTkZMSUNUUycpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnU0VDVElPTicpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnUEtHJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdBTExPV19FTVBUWScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVMnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wb3N0aW5zdCcpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAncGtnX3Bvc3RybScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAncGtnX3ByZWluc3QnKQorICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ3BrZ19wcmVybScpCisgICAgICAgIHdyaXRlX2lmX2V4aXN0cyhzZiwgcGtnLCAnRklMRVJQUk9WSURFU0ZMSVNUJykKKyAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFU19JTkZPJykKKyAgICAgICAgZm9yIGRmaWxlIGluIChkLmdldFZhcignRklMRVJQUk9WSURFU0ZMSVNUXycgKyBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgd3JpdGVfaWZfZXhpc3RzKHNmLCBwa2csICdGSUxFUlBST1ZJREVTXycgKyBkZmlsZSkKKworICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSREVQRU5EU0ZMSVNUJykKKyAgICAgICAgZm9yIGRmaWxlIGluIChkLmdldFZhcignRklMRVJERVBFTkRTRkxJU1RfJyArIHBrZywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICB3cml0ZV9pZl9leGlzdHMoc2YsIHBrZywgJ0ZJTEVSREVQRU5EU18nICsgZGZpbGUpCisKKyAgICAgICAgc2Yud3JpdGUoJyVzXyVzOiAlZFxuJyAlICgnUEtHU0laRScsIHBrZywgdG90YWxfc2l6ZSkpCisgICAgICAgIHNmLmNsb3NlKCkKKworICAgICAgICAjIFN5bWxpbmtzIG5lZWRlZCBmb3IgcnByb3ZpZGVzIGxvb2t1cAorICAgICAgICBpZiBycHJvdjoKKyAgICAgICAgICAgIGZvciBwIGluIHJwcm92LnN0cmlwKCkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzdWJkYXRhX3N5bSA9IHBrZ2RhdGFkaXIgKyAiL3J1bnRpbWUtcnByb3ZpZGVzLyVzLyVzIiAlIChwLCBwa2cpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzdWJkYXRhX3N5bSkpCisgICAgICAgICAgICAgICAgb2UucGF0aC5zeW1saW5rKCIuLi8uLi9ydW50aW1lLyVzIiAlIHBrZywgc3ViZGF0YV9zeW0sIFRydWUpCisKKyAgICAgICAgYWxsb3dfZW1wdHkgPSBkLmdldFZhcignQUxMT1dfRU1QVFlfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgYWxsb3dfZW1wdHk6CisgICAgICAgICAgICBhbGxvd19lbXB0eSA9IGQuZ2V0VmFyKCdBTExPV19FTVBUWScsIFRydWUpCisgICAgICAgIHJvb3QgPSAiJXMvJXMiICUgKHBrZ2Rlc3QsIHBrZykKKyAgICAgICAgb3MuY2hkaXIocm9vdCkKKyAgICAgICAgZyA9IGdsb2IoJyonKQorICAgICAgICBpZiBnIG9yIGFsbG93X2VtcHR5ID09ICIxIjoKKyAgICAgICAgICAgICMgU3ltbGlua3MgbmVlZGVkIGZvciByZXZlcnNlIGxvb2t1cHMgKGZyb20gdGhlIGZpbmFsIHBhY2thZ2UgbmFtZSkKKyAgICAgICAgICAgIHN1YmRhdGFfc3ltID0gcGtnZGF0YWRpciArICIvcnVudGltZS1yZXZlcnNlLyVzIiAlIHBrZ3ZhbAorICAgICAgICAgICAgb2UucGF0aC5zeW1saW5rKCIuLi9ydW50aW1lLyVzIiAlIHBrZywgc3ViZGF0YV9zeW0sIFRydWUpCisKKyAgICAgICAgICAgIHBhY2thZ2VkZmlsZSA9IHBrZ2RhdGFkaXIgKyAnL3J1bnRpbWUvJXMucGFja2FnZWQnICUgcGtnCisgICAgICAgICAgICBvcGVuKHBhY2thZ2VkZmlsZSwgJ3cnKS5jbG9zZSgpCisKKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdrZXJuZWwnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdtb2R1bGUtYmFzZScsIGQpOgorICAgICAgICB3cml0ZV9leHRyYV9ydW50aW1lX3BrZ3ModmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYWxsYXJjaCcsIGQpIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygncGFja2FnZWdyb3VwJywgZCk6CisgICAgICAgIHdyaXRlX2V4dHJhX3J1bnRpbWVfcGtncyhnbG9iYWxfdmFyaWFudHMsIHBhY2thZ2VzLCBwa2dkYXRhZGlyKQorCisgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKK30KK2VtaXRfcGtnZGF0YVtkaXJzXSA9ICIke1BLR0RFU1RXT1JLfS9ydW50aW1lICR7UEtHREVTVFdPUkt9L3J1bnRpbWUtcmV2ZXJzZSAke1BLR0RFU1RXT1JLfS9ydW50aW1lLXJwcm92aWRlcyIKKworbGRjb25maWdfcG9zdGluc3RfZnJhZ21lbnQoKSB7CitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKwlpZiBbIC14IC9zYmluL2xkY29uZmlnIF07IHRoZW4gL3NiaW4vbGRjb25maWcgOyBmaQorZmkKK30KKworUlBNREVQUyA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZSAtLW1hY3JvcyAke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL21hY3JvcyAtLWRlZmluZSAnX3JwbWZjX21hZ2ljX3BhdGggJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0vbWlzYy9tYWdpYy5tZ2MnIC0tcnBtcG9wdCAke1NUQUdJTkdfTElCRElSX05BVElWRX0vcnBtL3JwbXBvcHQiCisKKyMgQ29sbGVjdCBwZXJmaWxlIHJ1bi10aW1lIGRlcGVuZGVuY3kgbWV0YWRhdGEKKyMgT3V0cHV0OgorIyAgRklMRVJQUk9WSURFU0ZMSVNUX3BrZyAtIGxpc3Qgb2YgYWxsIGZpbGVzIHcvIGRlcHMKKyMgIEZJTEVSUFJPVklERVNfZmlsZXBhdGhfcGtnIC0gcGVyIGZpbGUgZGVwCisjCisjICBGSUxFUkRFUEVORFNGTElTVF9wa2cgLSBsaXN0IG9mIGFsbCBmaWxlcyB3LyBkZXBzCisjICBGSUxFUkRFUEVORFNfZmlsZXBhdGhfcGtnIC0gcGVyIGZpbGUgZGVwCisKK3B5dGhvbiBwYWNrYWdlX2RvX2ZpbGVkZXBzKCkgeworICAgIGlmIGQuZ2V0VmFyKCdTS0lQX0ZJTEVERVBTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICByZXR1cm4KKworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHJwbWRlcHMgPSBkLmdldFZhcignUlBNREVQUycsIFRydWUpCisKKyAgICBkZWYgY2h1bmtzKGZpbGVzLCBuKToKKyAgICAgICAgcmV0dXJuIFtmaWxlc1tpOmkrbl0gZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGZpbGVzKSwgbildCisKKyAgICBwa2dsaXN0ID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCdTS0lQX0ZJTEVERVBTXycgKyBwa2csIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHBrZy5lbmRzd2l0aCgnLWRiZycpIG9yIHBrZy5lbmRzd2l0aCgnLWRvYycpIG9yIHBrZy5maW5kKCctbG9jYWxlLScpICE9IC0xIG9yIHBrZy5maW5kKCctbG9jYWxlZGF0YS0nKSAhPSAtMSBvciBwa2cuZmluZCgnLWdjb252LScpICE9IC0xIG9yIHBrZy5maW5kKCctY2hhcm1hcC0nKSAhPSAtMSBvciBwa2cuc3RhcnRzd2l0aCgna2VybmVsLW1vZHVsZS0nKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZvciBmaWxlcyBpbiBjaHVua3MocGtnZmlsZXNbcGtnXSwgMTAwKToKKyAgICAgICAgICAgIHBrZ2xpc3QuYXBwZW5kKChwa2csIGZpbGVzLCBycG1kZXBzLCBwa2dkZXN0KSkKKworICAgIHByb2Nlc3NlZCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKCBwa2dsaXN0LCBvZS5wYWNrYWdlLmZpbGVkZXBydW5uZXIpCisKKyAgICBwcm92aWRlc19maWxlcyA9IHt9CisgICAgcmVxdWlyZXNfZmlsZXMgPSB7fQorCisgICAgZm9yIHJlc3VsdCBpbiBwcm9jZXNzZWQ6CisgICAgICAgIChwa2csIHByb3ZpZGVzLCByZXF1aXJlcykgPSByZXN1bHQKKworICAgICAgICBpZiBwa2cgbm90IGluIHByb3ZpZGVzX2ZpbGVzOgorICAgICAgICAgICAgcHJvdmlkZXNfZmlsZXNbcGtnXSA9IFtdCisgICAgICAgIGlmIHBrZyBub3QgaW4gcmVxdWlyZXNfZmlsZXM6CisgICAgICAgICAgICByZXF1aXJlc19maWxlc1twa2ddID0gW10KKworICAgICAgICBmb3IgZmlsZSBpbiBwcm92aWRlczoKKyAgICAgICAgICAgIHByb3ZpZGVzX2ZpbGVzW3BrZ10uYXBwZW5kKGZpbGUpCisgICAgICAgICAgICBrZXkgPSAiRklMRVJQUk9WSURFU18iICsgZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCAiICIuam9pbihwcm92aWRlc1tmaWxlXSkpCisKKyAgICAgICAgZm9yIGZpbGUgaW4gcmVxdWlyZXM6CisgICAgICAgICAgICByZXF1aXJlc19maWxlc1twa2ddLmFwcGVuZChmaWxlKQorICAgICAgICAgICAga2V5ID0gIkZJTEVSREVQRU5EU18iICsgZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgZC5zZXRWYXIoa2V5LCAiICIuam9pbihyZXF1aXJlc1tmaWxlXSkpCisKKyAgICBmb3IgcGtnIGluIHJlcXVpcmVzX2ZpbGVzOgorICAgICAgICBkLnNldFZhcigiRklMRVJERVBFTkRTRkxJU1RfIiArIHBrZywgIiAiLmpvaW4ocmVxdWlyZXNfZmlsZXNbcGtnXSkpCisgICAgZm9yIHBrZyBpbiBwcm92aWRlc19maWxlczoKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVSUFJPVklERVNGTElTVF8iICsgcGtnLCAiICIuam9pbihwcm92aWRlc19maWxlc1twa2ddKSkKK30KKworU0hMSUJTRElSUyA9ICIke1BLR0RBVEFfRElSfS8ke01MUFJFRklYfXNobGliczIiCitTSExJQlNXT1JLRElSID0gIiR7UEtHREVTVFdPUkt9LyR7TUxQUkVGSVh9c2hsaWJzMiIKKworcHl0aG9uIHBhY2thZ2VfZG9fc2hsaWJzKCkgeworICAgIGltcG9ydCByZSwgcGlwZXMKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKworICAgIGV4Y2x1ZGVfc2hsaWJzID0gZC5nZXRWYXIoJ0VYQ0xVREVfRlJPTV9TSExJQlMnLCAwKQorICAgIGlmIGV4Y2x1ZGVfc2hsaWJzOgorICAgICAgICBiYi5ub3RlKCJub3QgZ2VuZXJhdGluZyBzaGxpYnMiKQorICAgICAgICByZXR1cm4KKworICAgIGxpYl9yZSA9IHJlLmNvbXBpbGUoIl4uKlwuc28iKQorICAgIGxpYmRpcl9yZSA9IHJlLmNvbXBpbGUoIi4qLyVzJCIgJSBkLmdldFZhcignYmFzZWxpYicsIFRydWUpKQorCisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHRhcmdldG9zID0gZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorCisgICAgdmVyID0gZC5nZXRWYXIoJ1BLR1YnLCBUcnVlKQorICAgIGlmIG5vdCB2ZXI6CisgICAgICAgIG1zZyA9ICJQS0dWIG5vdCBkZWZpbmVkIgorICAgICAgICBwYWNrYWdlX3FhX2hhbmRsZV9lcnJvcigicGtndi11bmRlZmluZWQiLCBtc2csIGQpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIHNobGlic3dvcmtfZGlyID0gZC5nZXRWYXIoJ1NITElCU1dPUktESVInLCBUcnVlKQorCisgICAgIyBUYWtlIHNoYXJlZCBsb2NrIHNpbmNlIHdlJ3JlIG9ubHkgcmVhZGluZywgbm90IHdyaXRpbmcKKyAgICBsZiA9IGJiLnV0aWxzLmxvY2tmaWxlKGQuZXhwYW5kKCIke1BBQ0tBR0VMT0NLfSIpKQorCisgICAgZGVmIGxpbnV4X3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKToKKyAgICAgICAgbmVlZHNfbGRjb25maWcgPSBGYWxzZQorICAgICAgICBsZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpLnJlcGxhY2UocGtnZGVzdCArICIvIiArIHBrZywgJycpCisgICAgICAgIGNtZCA9IGQuZ2V0VmFyKCdPQkpEVU1QJywgVHJ1ZSkgKyAiIC1wICIgKyBwaXBlcy5xdW90ZShmaWxlKSArICIgMj4vZGV2L251bGwiCisgICAgICAgIGZkID0gb3MucG9wZW4oY21kKQorICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgcnBhdGggPSBbXQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaCgiXHMrUlBBVEhccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHJwYXRocyA9IG0uZ3JvdXAoMSkucmVwbGFjZSgiJE9SSUdJTiIsIGxkaXIpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICBycGF0aCA9IG1hcChvcy5wYXRoLm5vcm1wYXRoLCBycGF0aHMpCisgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytORUVERURccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIGRlcCA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBpZiBkZXAgbm90IGluIG5lZWRlZFtwa2ddOgorICAgICAgICAgICAgICAgICAgICBuZWVkZWRbcGtnXS5hcHBlbmQoKGRlcCwgZmlsZSwgcnBhdGgpKQorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCJccytTT05BTUVccysoW15cc10qKSIsIGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHRoaXNfc29uYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIHByb3YgPSAodGhpc19zb25hbWUsIGxkaXIsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJvdiBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICAjIGlmIGxpYnJhcnkgaXMgcHJpdmF0ZSAob25seSB1c2VkIGJ5IHBhY2thZ2UpIHRoZW4gZG8gbm90IGJ1aWxkIHNobGliIGZvciBpdAorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcHJpdmF0ZV9saWJzIG9yIHRoaXNfc29uYW1lIG5vdCBpbiBwcml2YXRlX2xpYnM6CisgICAgICAgICAgICAgICAgICAgICAgICBzb25hbWVzLmFwcGVuZChwcm92KQorICAgICAgICAgICAgICAgIGlmIGxpYmRpcl9yZS5tYXRjaChvcy5wYXRoLmRpcm5hbWUoZmlsZSkpOgorICAgICAgICAgICAgICAgICAgICBuZWVkc19sZGNvbmZpZyA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBzbmFwX3N5bWxpbmtzIGFuZCAob3MucGF0aC5iYXNlbmFtZShmaWxlKSAhPSB0aGlzX3NvbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHJlbmFtZXMuYXBwZW5kKChmaWxlLCBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZpbGUpLCB0aGlzX3NvbmFtZSkpKQorICAgICAgICByZXR1cm4gbmVlZHNfbGRjb25maWcKKworICAgIGRlZiBkYXJ3aW5fc28oZmlsZSwgbmVlZGVkLCBzb25hbWVzLCByZW5hbWVzLCBwa2d2ZXIpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKS5yZXBsYWNlKHBrZ2Rlc3QgKyAiLyIgKyBwa2csICcnKQorCisgICAgICAgIGRlZiBnZXRfY29tYmluYXRpb25zKGJhc2UpOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBHaXZlbiBhIGJhc2UgbGlicmFyeSBuYW1lLCBmaW5kIGFsbCBjb21iaW5hdGlvbnMgb2YgdGhpcyBzcGxpdCBieSAiLiIgYW5kICItIgorICAgICAgICAgICAgIworICAgICAgICAgICAgY29tYm9zID0gW10KKyAgICAgICAgICAgIG9wdGlvbnMgPSBiYXNlLnNwbGl0KCIuIikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihvcHRpb25zKSArIDEpOgorICAgICAgICAgICAgICAgIGNvbWJvcy5hcHBlbmQoIi4iLmpvaW4ob3B0aW9uc1swOmldKSkKKyAgICAgICAgICAgIG9wdGlvbnMgPSBiYXNlLnNwbGl0KCItIikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihvcHRpb25zKSArIDEpOgorICAgICAgICAgICAgICAgIGNvbWJvcy5hcHBlbmQoIi0iLmpvaW4ob3B0aW9uc1swOmldKSkKKyAgICAgICAgICAgIHJldHVybiBjb21ib3MKKworICAgICAgICBpZiAoZmlsZS5lbmRzd2l0aCgnLmR5bGliJykgb3IgZmlsZS5lbmRzd2l0aCgnLnNvJykpIGFuZCBub3QgcGtnLmVuZHN3aXRoKCctZGV2JykgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICMgRHJvcCBzdWZmaXgKKyAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpLnJzcGxpdCgiLiIsMSlbMF0KKyAgICAgICAgICAgICMgRmluZCBhbGwgY29tYmluYXRpb25zCisgICAgICAgICAgICBjb21ib3MgPSBnZXRfY29tYmluYXRpb25zKG5hbWUpCisgICAgICAgICAgICBmb3IgY29tYm8gaW4gY29tYm9zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBjb21ibyBpbiBzb25hbWVzOgorICAgICAgICAgICAgICAgICAgICBwcm92ID0gKGNvbWJvLCBsZGlyLCBwa2d2ZXIpCisgICAgICAgICAgICAgICAgICAgIHNvbmFtZXMuYXBwZW5kKHByb3YpCisgICAgICAgIGlmIGZpbGUuZW5kc3dpdGgoJy5keWxpYicpIG9yIGZpbGUuZW5kc3dpdGgoJy5zbycpOgorICAgICAgICAgICAgcnBhdGggPSBbXQorICAgICAgICAgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1sJywgZmlsZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgICAgIGVyciwgb3V0ID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICAjIElmIHJldHVybmVkIHN1Y2Nlc2Z1bGx5LCBwcm9jZXNzIHN0ZGVyciBmb3IgcmVzdWx0cworICAgICAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CisgICAgICAgICAgICAgICAgZm9yIGwgaW4gZXJyLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBsID0gbC5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGwuc3RhcnRzd2l0aCgncGF0aCAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoLmFwcGVuZChsLnNwbGl0KClbMV0pCisKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbihbZC5leHBhbmQoIiR7SE9TVF9QUkVGSVh9b3Rvb2wiKSwgJy1MJywgZmlsZV0sc3Rkb3V0PXN1Yi5QSVBFLHN0ZGVycj1zdWIuUElQRSkKKyAgICAgICAgZXJyLCBvdXQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgIyBJZiByZXR1cm5lZCBzdWNjZXNmdWxseSwgcHJvY2VzcyBzdGRlcnIgZm9yIHJlc3VsdHMKKyAgICAgICAgaWYgcC5yZXR1cm5jb2RlID09IDA6CisgICAgICAgICAgICBmb3IgbCBpbiBlcnIuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgbCA9IGwuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsIG9yIGwuZW5kc3dpdGgoIjoiKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiAiaXMgbm90IGFuIG9iamVjdCBmaWxlIiBpbiBsOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGwuc3BsaXQoKVswXSkucnNwbGl0KCIuIiwgMSlbMF0KKyAgICAgICAgICAgICAgICBpZiBuYW1lIGFuZCBuYW1lIG5vdCBpbiBuZWVkZWRbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwa2ddLmFwcGVuZCgobmFtZSwgZmlsZSwgW10pKQorCisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VfU05BUF9MSUJfU1lNTElOS1MnLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHNuYXBfc3ltbGlua3MgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgc25hcF9zeW1saW5rcyA9IEZhbHNlCisKKyAgICBpZiAoZC5nZXRWYXIoJ1VTRV9MRENPTkZJRycsIFRydWUpIG9yICIxIikgPT0gIjEiOgorICAgICAgICB1c2VfbGRjb25maWcgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgdXNlX2xkY29uZmlnID0gRmFsc2UKKworICAgIG5lZWRlZCA9IHt9CisgICAgc2hsaWJfcHJvdmlkZXIgPSBvZS5wYWNrYWdlLnJlYWRfc2hsaWJfcHJvdmlkZXJzKGQpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHByaXZhdGVfbGlicyA9IGQuZ2V0VmFyKCdQUklWQVRFX0xJQlNfJyArIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ1BSSVZBVEVfTElCUycsIFRydWUpIG9yICIiCisgICAgICAgIHByaXZhdGVfbGlicyA9IHByaXZhdGVfbGlicy5zcGxpdCgpCisgICAgICAgIG5lZWRzX2xkY29uZmlnID0gRmFsc2UKKyAgICAgICAgYmIuZGVidWcoMiwgImNhbGN1bGF0aW5nIHNobGliIHByb3ZpZGVzIGZvciAlcyIgJSBwa2cpCisKKyAgICAgICAgcGtndmVyID0gZC5nZXRWYXIoJ1BLR1ZfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBrZ3ZlcjoKKyAgICAgICAgICAgIHBrZ3ZlciA9IGQuZ2V0VmFyKCdQVl8nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcGtndmVyOgorICAgICAgICAgICAgcGtndmVyID0gdmVyCisKKyAgICAgICAgbmVlZGVkW3BrZ10gPSBbXQorICAgICAgICBzb25hbWVzID0gbGlzdCgpCisgICAgICAgIHJlbmFtZXMgPSBsaXN0KCkKKyAgICAgICAgZm9yIGZpbGUgaW4gcGtnZmlsZXNbcGtnXToKKyAgICAgICAgICAgICAgICBzb25hbWUgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgY3BhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHRhcmdldG9zID09ICJkYXJ3aW4iIG9yIHRhcmdldG9zID09ICJkYXJ3aW44IjoKKyAgICAgICAgICAgICAgICAgICAgZGFyd2luX3NvKGZpbGUsIG5lZWRlZCwgc29uYW1lcywgcmVuYW1lcywgcGtndmVyKQorICAgICAgICAgICAgICAgIGVsaWYgb3MuYWNjZXNzKGZpbGUsIG9zLlhfT0spIG9yIGxpYl9yZS5tYXRjaChmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgbGRjb25maWcgPSBsaW51eF9zbyhmaWxlLCBuZWVkZWQsIHNvbmFtZXMsIHJlbmFtZXMsIHBrZ3ZlcikKKyAgICAgICAgICAgICAgICAgICAgbmVlZHNfbGRjb25maWcgPSBuZWVkc19sZGNvbmZpZyBvciBsZGNvbmZpZworICAgICAgICBmb3IgKG9sZCwgbmV3KSBpbiByZW5hbWVzOgorICAgICAgICAgICAgYmIubm90ZSgiUmVuYW1pbmcgJXMgdG8gJXMiICUgKG9sZCwgbmV3KSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShvbGQsIG5ldykKKyAgICAgICAgICAgIHBrZ2ZpbGVzW3BrZ10ucmVtb3ZlKG9sZCkKKwkgICAgCisgICAgICAgIHNobGlic19maWxlID0gb3MucGF0aC5qb2luKHNobGlic3dvcmtfZGlyLCBwa2cgKyAiLmxpc3QiKQorICAgICAgICBpZiBsZW4oc29uYW1lcyk6CisgICAgICAgICAgICBmZCA9IG9wZW4oc2hsaWJzX2ZpbGUsICd3JykKKyAgICAgICAgICAgIGZvciBzIGluIHNvbmFtZXM6CisgICAgICAgICAgICAgICAgaWYgc1swXSBpbiBzaGxpYl9wcm92aWRlciBhbmQgc1sxXSBpbiBzaGxpYl9wcm92aWRlcltzWzBdXToKKyAgICAgICAgICAgICAgICAgICAgKG9sZF9wa2csIG9sZF9wa2d2ZXIpID0gc2hsaWJfcHJvdmlkZXJbc1swXV1bc1sxXV0KKyAgICAgICAgICAgICAgICAgICAgaWYgb2xkX3BrZyAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCclcy0lcyB3YXMgcmVnaXN0ZXJlZCBhcyBzaGxpYiBwcm92aWRlciBmb3IgJXMsIGNoYW5naW5nIGl0IHRvICVzLSVzIGJlY2F1c2UgaXQgd2FzIGJ1aWx0IGxhdGVyJyAlIChvbGRfcGtnLCBvbGRfcGtndmVyLCBzWzBdLCBwa2csIHBrZ3ZlcikpCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgJ3JlZ2lzdGVyaW5nICVzLSVzIGFzIHNobGliIHByb3ZpZGVyIGZvciAlcycgJSAocGtnLCBwa2d2ZXIsIHNbMF0pKQorICAgICAgICAgICAgICAgIGZkLndyaXRlKHNbMF0gKyAnOicgKyBzWzFdICsgJzonICsgc1syXSArICdcbicpCisgICAgICAgICAgICAgICAgaWYgc1swXSBub3QgaW4gc2hsaWJfcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW3NbMF1dID0ge30KKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXVtzWzFdXSA9IChwa2csIHBrZ3ZlcikKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgaWYgbmVlZHNfbGRjb25maWcgYW5kIHVzZV9sZGNvbmZpZzoKKyAgICAgICAgICAgIGJiLmRlYnVnKDEsICdhZGRpbmcgbGRjb25maWcgY2FsbCB0byBwb3N0aW5zdCBmb3IgJXMnICUgcGtnKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwb3N0aW5zdDoKKyAgICAgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdsZGNvbmZpZ19wb3N0aW5zdF9mcmFnbWVudCcsIFRydWUpCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisgICAgICAgIGJiLmRlYnVnKDEsICdMSUJOQU1FUzogcGtnICVzIHNvbmFtZXMgJXMnICUgKHBrZywgc29uYW1lcykpCisKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCisgICAgYXNzdW1lZF9saWJzID0gZC5nZXRWYXIoJ0FTU1VNRV9TSExJQlMnLCBUcnVlKQorICAgIGlmIGFzc3VtZWRfbGliczoKKyAgICAgICAgbGliZGlyID0gZC5nZXRWYXIoImxpYmRpciIsIFRydWUpCisgICAgICAgIGZvciBlIGluIGFzc3VtZWRfbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgbCwgZGVwX3BrZyA9IGUuc3BsaXQoIjoiKQorICAgICAgICAgICAgbGliX3ZlciA9IE5vbmUKKyAgICAgICAgICAgIGRlcF9wa2cgPSBkZXBfcGtnLnJzcGxpdCgiXyIsIDEpCisgICAgICAgICAgICBpZiBsZW4oZGVwX3BrZykgPT0gMjoKKyAgICAgICAgICAgICAgICBsaWJfdmVyID0gZGVwX3BrZ1sxXQorICAgICAgICAgICAgZGVwX3BrZyA9IGRlcF9wa2dbMF0KKyAgICAgICAgICAgIGlmIGwgbm90IGluIHNobGliX3Byb3ZpZGVyOgorICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW2xdID0ge30KKyAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW2xdW2xpYmRpcl0gPSAoZGVwX3BrZywgbGliX3ZlcikKKworICAgIGxpYnNlYXJjaHBhdGggPSBbZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmFzZV9saWJkaXInLCBUcnVlKV0KKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgYmIuZGVidWcoMiwgImNhbGN1bGF0aW5nIHNobGliIHJlcXVpcmVtZW50cyBmb3IgJXMiICUgcGtnKQorCisgICAgICAgIGRlcHMgPSBsaXN0KCkKKyAgICAgICAgZm9yIG4gaW4gbmVlZGVkW3BrZ106CisgICAgICAgICAgICAjIGlmIG4gaXMgaW4gcHJpdmF0ZSBsaWJyYXJpZXMsIGRvbid0IHRyeSB0byBzZWFyY2ggcHJvdmlkZXIgZm9yIGl0CisgICAgICAgICAgICAjIHRoaXMgY291bGQgY2F1c2UgcHJvYmxlbSBpbiBjYXNlIHNvbWUgYWJjLmJiIHByb3ZpZGVzIHByaXZhdGUKKyAgICAgICAgICAgICMgL29wdC9hYmMvbGliL2xpYmZvby5zby4xIGFuZCBjb250YWlucyAvdXNyL2Jpbi9hYmMgZGVwZW5kaW5nIG9uIHN5c3RlbSBsaWJyYXJ5IGxpYmZvby5zby4xCisgICAgICAgICAgICAjIGJ1dCBza2lwcGluZyBpdCBpcyBzdGlsbCBiZXR0ZXIgYWx0ZXJuYXRpdmUgdGhhbiBwcm92aWRpbmcgb3duCisgICAgICAgICAgICAjIHZlcnNpb24gYW5kIHRoZW4gYWRkaW5nIHJ1bnRpbWUgZGVwZW5kZW5jeSBmb3IgdGhlIHNhbWUgc3lzdGVtIGxpYnJhcnkKKyAgICAgICAgICAgIGlmIHByaXZhdGVfbGlicyBhbmQgblswXSBpbiBwcml2YXRlX2xpYnM6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgJyVzOiBEZXBlbmRlbmN5ICVzIGNvdmVyZWQgYnkgUFJJVkFURV9MSUJTJyAlIChwa2csIG5bMF0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBuWzBdIGluIHNobGliX3Byb3ZpZGVyLmtleXMoKToKKyAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcl9wYXRoID0gbGlzdCgpCisgICAgICAgICAgICAgICAgZm9yIGsgaW4gc2hsaWJfcHJvdmlkZXJbblswXV0ua2V5cygpOgorICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcl9wYXRoLmFwcGVuZChrKQorICAgICAgICAgICAgICAgIG1hdGNoID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBwIGluIG5bMl0gKyBzaGxpYl9wcm92aWRlcl9wYXRoICsgbGlic2VhcmNocGF0aDoKKyAgICAgICAgICAgICAgICAgICAgaWYgcCBpbiBzaGxpYl9wcm92aWRlcltuWzBdXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gcAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgKGRlcF9wa2csIHZlcl9uZWVkZWQpID0gc2hsaWJfcHJvdmlkZXJbblswXV1bbWF0Y2hdCisKKyAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgJyVzOiBEZXBlbmRlbmN5ICVzIHJlcXVpcmVzIHBhY2thZ2UgJXMgKHVzZWQgYnkgZmlsZXM6ICVzKScgJSAocGtnLCBuWzBdLCBkZXBfcGtnLCBuWzFdKSkKKworICAgICAgICAgICAgICAgICAgICBpZiBkZXBfcGtnID09IHBrZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyX25lZWRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcCA9ICIlcyAoPj0gJXMpIiAlIChkZXBfcGtnLCB2ZXJfbmVlZGVkKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVwID0gZGVwX3BrZworICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBzLmFwcGVuZChkZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBiYi5ub3RlKCJDb3VsZG4ndCBmaW5kIHNoYXJlZCBsaWJyYXJ5IHByb3ZpZGVyIGZvciAlcywgdXNlZCBieSBmaWxlczogJXMiICUgKG5bMF0sIG5bMV0pKQorCisgICAgICAgIGRlcHNfZmlsZSA9IG9zLnBhdGguam9pbihwa2dkZXN0LCBwa2cgKyAiLnNobGliZGVwcyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRlcHNfZmlsZSk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZGVwc19maWxlKQorICAgICAgICBpZiBsZW4oZGVwcyk6CisgICAgICAgICAgICBmZCA9IG9wZW4oZGVwc19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgZmQud3JpdGUoZGVwICsgJ1xuJykKKyAgICAgICAgICAgIGZkLmNsb3NlKCkKK30KKworcHl0aG9uIHBhY2thZ2VfZG9fcGtnY29uZmlnICgpIHsKKyAgICBpbXBvcnQgcmUKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisKKyAgICBzaGxpYnNfZGlycyA9IGQuZ2V0VmFyKCdTSExJQlNESVJTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHNobGlic3dvcmtfZGlyID0gZC5nZXRWYXIoJ1NITElCU1dPUktESVInLCBUcnVlKQorCisgICAgcGNfcmUgPSByZS5jb21waWxlKCcoLiopXC5wYyQnKQorICAgIHZhcl9yZSA9IHJlLmNvbXBpbGUoJyguKik9KC4qKScpCisgICAgZmllbGRfcmUgPSByZS5jb21waWxlKCcoLiopOiAoLiopJykKKworICAgIHBrZ2NvbmZpZ19wcm92aWRlZCA9IHt9CisgICAgcGtnY29uZmlnX25lZWRlZCA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXSA9IFtdCisgICAgICAgIHBrZ2NvbmZpZ19uZWVkZWRbcGtnXSA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIHBrZ2ZpbGVzW3BrZ106CisgICAgICAgICAgICAgICAgbSA9IHBjX3JlLm1hdGNoKGZpbGUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgcGQgPSBiYi5kYXRhLmluaXQoKQorICAgICAgICAgICAgICAgICAgICBuYW1lID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXS5hcHBlbmQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhmaWxlLCBvcy5SX09LKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICdyJykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSB2YXJfcmUubWF0Y2gobCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGQuc2V0VmFyKG5hbWUsIHBkLmV4cGFuZCh2YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBtID0gZmllbGRfcmUubWF0Y2gobCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cCA9IGJiLmRhdGEuZXhwYW5kKG0uZ3JvdXAoMiksIHBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhkciA9PSAnUmVxdWlyZXMnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2djb25maWdfbmVlZGVkW3BrZ10gKz0gZXhwLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKworICAgICMgVGFrZSBzaGFyZWQgbG9jayBzaW5jZSB3ZSdyZSBvbmx5IHJlYWRpbmcsIG5vdCB3cml0aW5nCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZShkLmV4cGFuZCgiJHtQQUNLQUdFTE9DS30iKSkKKworICAgIGZvciBwa2cgaW4gcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgcGtnc19maWxlID0gb3MucGF0aC5qb2luKHNobGlic3dvcmtfZGlyLCBwa2cgKyAiLnBjbGlzdCIpCisgICAgICAgIGlmIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddICE9IFtdOgorICAgICAgICAgICAgZiA9IG9wZW4ocGtnc19maWxlLCAndycpCisgICAgICAgICAgICBmb3IgcCBpbiBwa2djb25maWdfcHJvdmlkZWRbcGtnXToKKyAgICAgICAgICAgICAgICBmLndyaXRlKCclc1xuJyAlIHApCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICMgR28gZnJvbSBsZWFzdCB0byBtb3N0IHNwZWNpZmljIHNpbmNlIHRoZSBsYXN0IG9uZSBmb3VuZCB3aW5zCisgICAgZm9yIGRpciBpbiByZXZlcnNlZChzaGxpYnNfZGlycyk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkaXIpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihkaXIpOgorICAgICAgICAgICAgbSA9IHJlLm1hdGNoKCdeKC4qKVwucGNsaXN0JCcsIGZpbGUpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHBrZyA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob3MucGF0aC5qb2luKGRpciwgZmlsZSkpCisgICAgICAgICAgICAgICAgbGluZXMgPSBmZC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZkLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBwa2djb25maWdfcHJvdmlkZWRbcGtnXSA9IFtdCisgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIHBrZ2NvbmZpZ19wcm92aWRlZFtwa2ddLmFwcGVuZChsLnJzdHJpcCgpKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBkZXBzID0gW10KKyAgICAgICAgZm9yIG4gaW4gcGtnY29uZmlnX25lZWRlZFtwa2ddOgorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGsgaW4gcGtnY29uZmlnX3Byb3ZpZGVkLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBuIGluIHBrZ2NvbmZpZ19wcm92aWRlZFtrXToKKyAgICAgICAgICAgICAgICAgICAgaWYgayAhPSBwa2cgYW5kIG5vdCAoayBpbiBkZXBzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlcHMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgaWYgZm91bmQgPT0gRmFsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiY291bGRuJ3QgZmluZCBwa2djb25maWcgbW9kdWxlICclcycgaW4gYW55IHBhY2thZ2UiICUgbikKKyAgICAgICAgZGVwc19maWxlID0gb3MucGF0aC5qb2luKHBrZ2Rlc3QsIHBrZyArICIucGNkZXBzIikKKyAgICAgICAgaWYgbGVuKGRlcHMpOgorICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNfZmlsZSwgJ3cnKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzOgorICAgICAgICAgICAgICAgIGZkLndyaXRlKGRlcCArICdcbicpCisgICAgICAgICAgICBmZC5jbG9zZSgpCisKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorCitkZWYgcmVhZF9saWJkZXBfZmlsZXMoZCk6CisgICAgcGtnbGliZGVwcyA9IHt9CisgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnbGliZGVwc1twa2ddID0ge30KKyAgICAgICAgZm9yIGV4dGVuc2lvbiBpbiAiLnNobGliZGVwcyIsICIucGNkZXBzIiwgIi5jbGlsaWJkZXBzIjoKKyAgICAgICAgICAgIGRlcHNmaWxlID0gZC5leHBhbmQoIiR7UEtHREVTVH0vIiArIHBrZyArIGV4dGVuc2lvbikKKyAgICAgICAgICAgIGlmIG9zLmFjY2VzcyhkZXBzZmlsZSwgb3MuUl9PSyk6CisgICAgICAgICAgICAgICAgZmQgPSBvcGVuKGRlcHNmaWxlKQorICAgICAgICAgICAgICAgIGxpbmVzID0gZmQucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmZC5jbG9zZSgpCisgICAgICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgICAgIGwucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZGVwcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsKQorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGVwIGluIHBrZ2xpYmRlcHNbcGtnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dsaWJkZXBzW3BrZ11bZGVwXSA9IGRlcHNbZGVwXQorICAgIHJldHVybiBwa2dsaWJkZXBzCisKK3B5dGhvbiByZWFkX3NobGliZGVwcyAoKSB7CisgICAgcGtnbGliZGVwcyA9IHJlYWRfbGliZGVwX2ZpbGVzKGQpCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICByZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBkZXAgaW4gcGtnbGliZGVwc1twa2ddOgorICAgICAgICAgICAgIyBBZGQgdGhlIGRlcCBpZiBpdCdzIG5vdCBhbHJlYWR5IHRoZXJlLCBvciBpZiBubyBjb21wYXJpc29uIGlzIHNldAorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICByZGVwZW5kc1tkZXBdID0gW10KKyAgICAgICAgICAgIGZvciB2IGluIHBrZ2xpYmRlcHNbcGtnXVtkZXBdOgorICAgICAgICAgICAgICAgIGlmIHYgbm90IGluIHJkZXBlbmRzW2RlcF06CisgICAgICAgICAgICAgICAgICAgIHJkZXBlbmRzW2RlcF0uYXBwZW5kKHYpCisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBiYi51dGlscy5qb2luX2RlcHMocmRlcGVuZHMsIGNvbW1hc2VwPUZhbHNlKSkKK30KKworcHl0aG9uIHBhY2thZ2VfZGVwY2hhaW5zKCkgeworICAgICIiIgorICAgIEZvciBhIGdpdmVuIHNldCBvZiBwcmVmaXggYW5kIHBvc3RmaXggbW9kaWZpZXJzLCBtYWtlIHRob3NlIHBhY2thZ2VzCisgICAgUlJFQ09NTUVORFMgb24gdGhlIGNvcnJlc3BvbmRpbmcgcGFja2FnZXMgZm9yIGl0cyBSREVQRU5EUy4KKworICAgIEV4YW1wbGU6ICBJZiBwYWNrYWdlIEEgZGVwZW5kcyB1cG9uIHBhY2thZ2UgQiwgYW5kIEEncyAuYmIgZW1pdHMgYW4KKyAgICBBLWRldiBwYWNrYWdlLCB0aGlzIHdvdWxkIG1ha2UgQS1kZXYgUmVjb21tZW5kczogQi1kZXYuCisKKyAgICBJZiBvbmx5IG9uZSBvZiBhIGdpdmVuIHN1ZmZpeCBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgdGFrZSB0aGUgUlJFQ09NTUVORFMKKyAgICBiYXNlZCBvbiB0aGUgUkRFUEVORFMgb2YgKmFsbCogb3RoZXIgcGFja2FnZXMuIElmIG1vcmUgdGhhbiBvbmUgb2YgYSBnaXZlbgorICAgIHN1ZmZpeCBpcyBzcGVjaWZpZWQsIGl0cyB3aWxsIG9ubHkgdXNlIHRoZSBSREVQRU5EUyBvZiB0aGUgc2luZ2xlIHBhcmVudAorICAgIHBhY2thZ2UuCisgICAgIiIiCisKKyAgICBwYWNrYWdlcyAgPSBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKQorICAgIHBvc3RmaXhlcyA9IChkLmdldFZhcignREVQQ0hBSU5fUE9TVCcsIFRydWUpIG9yICcnKS5zcGxpdCgpCisgICAgcHJlZml4ZXMgID0gKGQuZ2V0VmFyKCdERVBDSEFJTl9QUkUnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorCisgICAgZGVmIHBrZ19hZGRkZXBycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZ2V0bmFtZSwgZGVwZW5kcywgZCk6CisKKyAgICAgICAgI2JiLm5vdGUoJ2RlcGVuZHMgZm9yICVzIGlzICVzJyAlIChiYXNlLCBkZXBlbmRzKSkKKyAgICAgICAgcnJlY2xpc3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorCisgICAgICAgIGZvciBkZXBlbmQgaW4gZGVwZW5kczoKKyAgICAgICAgICAgIGlmIGRlcGVuZC5maW5kKCctbmF0aXZlJykgIT0gLTEgb3IgZGVwZW5kLmZpbmQoJy1jcm9zcycpICE9IC0xIG9yIGRlcGVuZC5zdGFydHN3aXRoKCd2aXJ0dWFsLycpOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCJTa2lwcGluZyAlcyIgJSBkZXBlbmQpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRldicpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBpZiBkZXBlbmQuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgICAgICBkZXBlbmQgPSBkZXBlbmRbOi00XQorICAgICAgICAgICAgcGtnbmFtZSA9IGdldG5hbWUoZGVwZW5kLCBzdWZmaXgpCisgICAgICAgICAgICAjYmIubm90ZSgiQWRkaW5nICVzIGZvciAlcyIgJSAocGtnbmFtZSwgZGVwZW5kKSkKKyAgICAgICAgICAgIGlmIHBrZ25hbWUgbm90IGluIHJyZWNsaXN0IGFuZCBwa2duYW1lICE9IHBrZzoKKyAgICAgICAgICAgICAgICBycmVjbGlzdFtwa2duYW1lXSA9IFtdCisKKyAgICAgICAgI2JiLm5vdGUoJ3NldHRpbmc6IFJSRUNPTU1FTkRTXyVzPSVzJyAlIChwa2csICcgJy5qb2luKHJyZWNsaXN0KSkpCisgICAgICAgIGQuc2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBwa2csIGJiLnV0aWxzLmpvaW5fZGVwcyhycmVjbGlzdCwgY29tbWFzZXA9RmFsc2UpKQorCisgICAgZGVmIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZ2V0bmFtZSwgcmRlcGVuZHMsIGQpOgorCisgICAgICAgICNiYi5ub3RlKCdyZGVwZW5kcyBmb3IgJXMgaXMgJXMnICUgKGJhc2UsIHJkZXBlbmRzKSkKKyAgICAgICAgcnJlY2xpc3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoZC5nZXRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csIFRydWUpIG9yICIiKQorCisgICAgICAgIGZvciBkZXBlbmQgaW4gcmRlcGVuZHM6CisgICAgICAgICAgICBpZiBkZXBlbmQuZmluZCgndmlydHVhbC1sb2NhbGUtJykgIT0gLTE6CisgICAgICAgICAgICAgICAgI2JiLm5vdGUoIlNraXBwaW5nICVzIiAlIGRlcGVuZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZGVwZW5kLmVuZHN3aXRoKCctZGV2Jyk6CisgICAgICAgICAgICAgICAgZGVwZW5kID0gZGVwZW5kWzotNF0KKyAgICAgICAgICAgIGlmIGRlcGVuZC5lbmRzd2l0aCgnLWRiZycpOgorICAgICAgICAgICAgICAgIGRlcGVuZCA9IGRlcGVuZFs6LTRdCisgICAgICAgICAgICBwa2duYW1lID0gZ2V0bmFtZShkZXBlbmQsIHN1ZmZpeCkKKyAgICAgICAgICAgICNiYi5ub3RlKCJBZGRpbmcgJXMgZm9yICVzIiAlIChwa2duYW1lLCBkZXBlbmQpKQorICAgICAgICAgICAgaWYgcGtnbmFtZSBub3QgaW4gcnJlY2xpc3QgYW5kIHBrZ25hbWUgIT0gcGtnOgorICAgICAgICAgICAgICAgIHJyZWNsaXN0W3BrZ25hbWVdID0gW10KKworICAgICAgICAjYmIubm90ZSgnc2V0dGluZzogUlJFQ09NTUVORFNfJXM9JXMnICUgKHBrZywgJyAnLmpvaW4ocnJlY2xpc3QpKSkKKyAgICAgICAgZC5zZXRWYXIoJ1JSRUNPTU1FTkRTXyVzJyAlIHBrZywgYmIudXRpbHMuam9pbl9kZXBzKHJyZWNsaXN0LCBjb21tYXNlcD1GYWxzZSkpCisKKyAgICBkZWYgYWRkX2RlcChsaXN0LCBkZXApOgorICAgICAgICBpZiBkZXAgbm90IGluIGxpc3Q6CisgICAgICAgICAgICBsaXN0LmFwcGVuZChkZXApCisKKyAgICBkZXBlbmRzID0gW10KKyAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignREVQRU5EUycsIFRydWUpIG9yICIiKToKKyAgICAgICAgYWRkX2RlcChkZXBlbmRzLCBkZXApCisKKyAgICByZGVwZW5kcyA9IFtdCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgZGVwIGluIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhkLmdldFZhcignUkRFUEVORFNfJyArIHBrZywgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgYWRkX2RlcChyZGVwZW5kcywgZGVwKQorCisgICAgI2JiLm5vdGUoJ3JkZXBlbmRzIGlzICVzJyAlIHJkZXBlbmRzKQorCisgICAgZGVmIHBvc3RfZ2V0bmFtZShuYW1lLCBzdWZmaXgpOgorICAgICAgICByZXR1cm4gJyVzJXMnICUgKG5hbWUsIHN1ZmZpeCkKKyAgICBkZWYgcHJlX2dldG5hbWUobmFtZSwgc3VmZml4KToKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChzdWZmaXgsIG5hbWUpCisKKyAgICBwa2dzID0ge30KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGZvciBwb3N0Zml4IGluIHBvc3RmaXhlczoKKyAgICAgICAgICAgIGlmIHBrZy5lbmRzd2l0aChwb3N0Zml4KToKKyAgICAgICAgICAgICAgICBpZiBub3QgcG9zdGZpeCBpbiBwa2dzOgorICAgICAgICAgICAgICAgICAgICBwa2dzW3Bvc3RmaXhdID0ge30KKyAgICAgICAgICAgICAgICBwa2dzW3Bvc3RmaXhdW3BrZ10gPSAocGtnWzotbGVuKHBvc3RmaXgpXSwgcG9zdF9nZXRuYW1lKQorCisgICAgICAgIGZvciBwcmVmaXggaW4gcHJlZml4ZXM6CisgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBwcmVmaXggaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgcGtnc1twcmVmaXhdID0ge30KKyAgICAgICAgICAgICAgICBwa2dzW3ByZWZpeF1bcGtnXSA9IChwa2dbOi1sZW4ocHJlZml4KV0sIHByZV9nZXRuYW1lKQorCisgICAgaWYgIi1kYmciIGluIHBrZ3M6CisgICAgICAgIHBrZ2xpYmRlcHMgPSByZWFkX2xpYmRlcF9maWxlcyhkKQorICAgICAgICBwa2dsaWJkZXBsaXN0ID0gW10KKyAgICAgICAgZm9yIHBrZyBpbiBwa2dsaWJkZXBzOgorICAgICAgICAgICAgZm9yIGsgaW4gcGtnbGliZGVwc1twa2ddOgorICAgICAgICAgICAgICAgIGFkZF9kZXAocGtnbGliZGVwbGlzdCwgaykKKyAgICAgICAgIyBGSVhNRSB0aGlzIHNob3VsZCBub3QgbG9vayBhdCBQTiBvbmNlIGFsbCB0YXNrIHJlY2lwZXMgaW5oZXJpdCBmcm9tIHRhc2suYmJjbGFzcworICAgICAgICBkYmdkZWZhdWx0ZGVwcyA9ICgoZC5nZXRWYXIoJ0RFUENIQUlOX0RCR0RFRkFVTFRERVBTJywgVHJ1ZSkgPT0gJzEnKSBvciAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgb3IgJycpLnN0YXJ0c3dpdGgoJ3BhY2thZ2Vncm91cC0nKSkKKworICAgIGZvciBzdWZmaXggaW4gcGtnczoKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3N1ZmZpeF06CisgICAgICAgICAgICBpZiBkLmdldFZhckZsYWcoJ1JSRUNPTU1FTkRTXycgKyBwa2csICdub2RlcHJyZWNzJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIChiYXNlLCBmdW5jKSA9IHBrZ3Nbc3VmZml4XVtwa2ddCisgICAgICAgICAgICBpZiBzdWZmaXggPT0gIi1kZXYiOgorICAgICAgICAgICAgICAgIHBrZ19hZGRkZXBycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgZGVwZW5kcywgZCkKKyAgICAgICAgICAgIGVsaWYgc3VmZml4ID09ICItZGJnIjoKKyAgICAgICAgICAgICAgICBpZiBub3QgZGJnZGVmYXVsdGRlcHM6CisgICAgICAgICAgICAgICAgICAgIHBrZ19hZGRycmVjcyhwa2csIGJhc2UsIHN1ZmZpeCwgZnVuYywgcGtnbGliZGVwbGlzdCwgZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxlbihwa2dzW3N1ZmZpeF0pID09IDE6CisgICAgICAgICAgICAgICAgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCByZGVwZW5kcywgZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmRlcHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gYmIudXRpbHMuZXhwbG9kZV9kZXBzKGQuZ2V0VmFyKCdSREVQRU5EU18nICsgYmFzZSwgVHJ1ZSkgb3IgIiIpOgorICAgICAgICAgICAgICAgICAgICBhZGRfZGVwKHJkZXBzLCBkZXApCisgICAgICAgICAgICAgICAgcGtnX2FkZHJyZWNzKHBrZywgYmFzZSwgc3VmZml4LCBmdW5jLCByZGVwcywgZCkKK30KKworIyBTaW5jZSBiaXRiYWtlIGNhbid0IGRldGVybWluZSB3aGljaCB2YXJpYWJsZXMgYXJlIGFjY2Vzc2VkIGR1cmluZyBwYWNrYWdlCisjIGl0ZXJhdGlvbiwgd2UgbmVlZCB0byBsaXN0IHRoZW0gaGVyZToKK1BBQ0tBR0VWQVJTID0gIkZJTEVTIFJERVBFTkRTIFJSRUNPTU1FTkRTIFNVTU1BUlkgREVTQ1JJUFRJT04gUlNVR0dFU1RTIFJQUk9WSURFUyBSQ09ORkxJQ1RTIFBLRyBBTExPV19FTVBUWSBwa2dfcG9zdGluc3QgcGtnX3Bvc3RybSBJTklUU0NSSVBUX05BTUUgSU5JVFNDUklQVF9QQVJBTVMgREVCSUFOX05PQVVUT05BTUUgQUxURVJOQVRJVkUgUEtHRSBQS0dWIFBLR1IgVVNFUkFERF9QQVJBTSBHUk9VUEFERF9QQVJBTSBDT05GRklMRVMgU1lTVEVNRF9TRVJWSUNFIExJQ0VOU0UgU0VDVElPTiBwa2dfcHJlaW5zdCBwa2dfcHJlcm0gUlJFUExBQ0VTIEdST1VQTUVNU19QQVJBTSBTWVNURU1EX0FVVE9fRU5BQkxFIgorCitkZWYgZ2VuX3BhY2thZ2V2YXIoZCk6CisgICAgcmV0ID0gW10KKyAgICBwa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgdmFycyA9IChkLmdldFZhcigiUEFDS0FHRVZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGZvciB2IGluIHZhcnM6CisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiXyIgKyBwKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgY2hhbmdlcyB0byBJTkNPTVBBVElCTEVfTElDRU5TRSByZS1ydW4gZG9fcGFja2FnZSBmb3IKKyAgICAgICAgIyBhZmZlY3RlZCByZWNpcGVzLgorICAgICAgICByZXQuYXBwZW5kKCdMSUNFTlNFX0VYQ0xVU0lPTi0lcycgJSBwKQorICAgIHJldHVybiAiICIuam9pbihyZXQpCisKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyA/PSAiIgorIyBGdW5jdGlvbnMgZm9yIHNldHRpbmcgdXAgUEtHRAorUEFDS0FHRUJVSUxEUEtHRCA/PSAiIFwKKyAgICAgICAgICAgICAgICBwZXJmb3JtX3BhY2thZ2Vjb3B5IFwKKyAgICAgICAgICAgICAgICAke1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DU30gXAorICAgICAgICAgICAgICAgIHNwbGl0X2FuZF9zdHJpcF9maWxlcyBcCisgICAgICAgICAgICAgICAgZml4dXBfcGVybXMgXAorICAgICAgICAgICAgICAgICIKKyMgRnVuY3Rpb25zIHdoaWNoIHNwbGl0IFBLR0QgdXAgaW50byBzZXBhcmF0ZSBwYWNrYWdlcworUEFDS0FHRVNQTElURlVOQ1MgPz0gIiBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19zcGxpdF9sb2NhbGVzIFwKKyAgICAgICAgICAgICAgICBwb3B1bGF0ZV9wYWNrYWdlcyIKKyMgRnVuY3Rpb25zIHdoaWNoIHByb2Nlc3MgbWV0YWRhdGEgYmFzZWQgb24gc3BsaXQgcGFja2FnZXMKK1BBQ0tBR0VGVU5DUyArPSAiIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2ZpeHN5bWxpbmtzIFwKKyAgICAgICAgICAgICAgICBwYWNrYWdlX25hbWVfaG9vayBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19maWxlZGVwcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kb19zaGxpYnMgXAorICAgICAgICAgICAgICAgIHBhY2thZ2VfZG9fcGtnY29uZmlnIFwKKyAgICAgICAgICAgICAgICByZWFkX3NobGliZGVwcyBcCisgICAgICAgICAgICAgICAgcGFja2FnZV9kZXBjaGFpbnMgXAorICAgICAgICAgICAgICAgIGVtaXRfcGtnZGF0YSIKKworcHl0aG9uIGRvX3BhY2thZ2UgKCkgeworICAgICMgQ2hhbmdlIHRoZSBmb2xsb3dpbmcgdmVyc2lvbiB0byBjYXVzZSBzc3RhdGUgdG8gaW52YWxpZGF0ZSB0aGUgcGFja2FnZQorICAgICMgY2FjaGUuICBUaGlzIGlzIHVzZWZ1bCBpZiBhbiBpdGVtIHRoaXMgY2xhc3MgZGVwZW5kcyBvbiBjaGFuZ2VzIGluIGEKKyAgICAjIHdheSB0aGF0IHRoZSBvdXRwdXQgb2YgdGhpcyBjbGFzcyBjaGFuZ2VzLiAgcnBtZGVwcyBpcyBhIGdvb2QgZXhhbXBsZQorICAgICMgYXMgYW55IGNoYW5nZSB0byBycG1kZXBzIHJlcXVpcmVzIHRoaXMgdG8gYmUgcmVydW4uCisgICAgIyBQQUNLQUdFX0JCQ0xBU1NfVkVSU0lPTiA9ICIxIgorCisgICAgIyBJbml0IGNhY2hlZHBhdGgKKyAgICBnbG9iYWwgY3BhdGgKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFNhbml0eSB0ZXN0IHRoZSBzZXR1cAorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgcGFja2FnZXMgPSAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBsZW4ocGFja2FnZXMpIDwgMToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzIHRvIGJ1aWxkLCBza2lwcGluZyBkb19wYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIG91dGRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSJywgVHJ1ZSkKKyAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIGR2YXIgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorCisgICAgaWYgbm90IHdvcmtkaXIgb3Igbm90IG91dGRpciBvciBub3QgZGVzdCBvciBub3QgZHZhciBvciBub3QgcG46CisgICAgICAgIG1zZyA9ICJXT1JLRElSLCBERVBMT1lfRElSLCBELCBQTiBhbmQgUEtHRCBhbGwgbXVzdCBiZSBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIKKyAgICAgICAgcGFja2FnZV9xYV9oYW5kbGVfZXJyb3IoInZhci11bmRlZmluZWQiLCBtc2csIGQpCisgICAgICAgIHJldHVybgorCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJwYWNrYWdlX2dldF9hdXRvX3ByIiwgZCkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMgT3B0aW1pc2F0aW9ucworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBDb250aW51YWxseSBleHBhbmRpbmcgY29tcGxleCBleHByZXNzaW9ucyBpcyBpbmVmZmljaWVudCwgcGFydGljdWxhcmx5CisgICAgIyB3aGVuIHdlIHdyaXRlIHRvIHRoZSBkYXRhc3RvcmUgYW5kIGludmFsaWRhdGUgdGhlIGV4cGFuc2lvbiBjYWNoZS4gVGhpcworICAgICMgY29kZSBwcmUtZXhwYW5kcyBzb21lIGZyZXF1ZW50bHkgdXNlZCB2YXJpYWJsZXMKKworICAgIGRlZiBleHBhbmRWYXIoeCwgZCk6CisgICAgICAgIGQuc2V0VmFyKHgsIGQuZ2V0VmFyKHgsIFRydWUpKQorCisgICAgZm9yIHggaW4gJ1BOJywgJ1BWJywgJ0JQTicsICdUQVJHRVRfU1lTJywgJ0VYVEVORFBSQVVUTyc6CisgICAgICAgIGV4cGFuZFZhcih4LCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBTZXR1cCBQS0dEIChmcm9tIEQpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VCVUlMRFBLR0QnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIFNwbGl0IHVwIFBLR0QgaW50byBQS0dERVNUCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTUExJVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBQcm9jZXNzIFBLR0RFU1QKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgQnVpbGQgZ2xvYmFsIGxpc3Qgb2YgZmlsZXMgaW4gZWFjaCBzcGxpdCBwYWNrYWdlCisgICAgZ2xvYmFsIHBrZ2ZpbGVzCisgICAgcGtnZmlsZXMgPSB7fQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlczoKKyAgICAgICAgcGtnZmlsZXNbcGtnXSA9IFtdCisgICAgICAgIGZvciB3YWxrcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2Fsayhwa2dkZXN0ICsgIi8iICsgcGtnKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHBrZ2ZpbGVzW3BrZ10uYXBwZW5kKHdhbGtyb290ICsgb3Muc2VwICsgZmlsZSkKKworICAgIGZvciBmIGluIChkLmdldFZhcignUEFDS0FHRUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorfQorCitkb19wYWNrYWdlW2RpcnNdID0gIiR7U0hMSUJTV09SS0RJUn0gJHtQS0dERVNUV09SS30gJHtEfSIKK2RvX3BhY2thZ2VbdmFyZGVwc10gKz0gIiR7UEFDS0FHRUJVSUxEUEtHRH0gJHtQQUNLQUdFU1BMSVRGVU5DU30gJHtQQUNLQUdFRlVOQ1N9ICR7QGdlbl9wYWNrYWdldmFyKGQpfSIKK2FkZHRhc2sgcGFja2FnZSBhZnRlciBkb19pbnN0YWxsCisKK1BBQ0tBR0VMT0NLID0gIiR7U1RBR0lOR19ESVJ9L3BhY2thZ2Utb3V0cHV0LmxvY2siCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZSIKK2RvX3BhY2thZ2VbY2xlYW5kaXJzXSA9ICIke1BLR0RFU1R9ICR7UEtHREVTVFdPUkt9IgorZG9fcGFja2FnZVtzc3RhdGUtcGxhaW5kaXJzXSA9ICIke1BLR0R9ICR7UEtHREVTVH0gJHtQS0dERVNUV09SS30iCitkb19wYWNrYWdlW3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWRdID0gIiR7UEFDS0FHRUxPQ0t9IgorZG9fcGFja2FnZV9zZXRzY2VuZVtkaXJzXSA9ICIke1NUQUdJTkdfRElSfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3NldHNjZW5lCisKK2RvX3BhY2thZ2VkYXRhICgpIHsKKwk6Cit9CisKK2FkZHRhc2sgcGFja2FnZWRhdGEgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX3BhY2thZ2UKKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZWRhdGFbc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dERVNUV09SS30iCitkb19wYWNrYWdlZGF0YVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtQS0dEQVRBX0RJUn0iCitkb19wYWNrYWdlZGF0YVtzc3RhdGUtbG9ja2ZpbGUtc2hhcmVkXSA9ICIke1BBQ0tBR0VMT0NLfSIKK2RvX3BhY2thZ2VkYXRhW3N0YW1wLWV4dHJhLWluZm9dID0gIiR7TUFDSElORX0iCisKK3B5dGhvbiBkb19wYWNrYWdlZGF0YV9zZXRzY2VuZSAoKSB7CisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2VkYXRhX3NldHNjZW5lCisKKyMKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIHBhY2thZ2Ugd3JpdGluZyBjbGFzc2VzCisjCisKK2RlZiBtYXBwaW5nX3JlbmFtZV9ob29rKGQpOgorICAgICIiIgorICAgIFJld3JpdGUgdmFyaWFibGVzIHRvIGFjY291bnQgZm9yIHBhY2thZ2UgcmVuYW1pbmcgaW4gdGhpbmdzCisgICAgbGlrZSBkZWJpYW4uYmJjbGFzcyBvciBtYW51YWwgUEtHIHZhcmlhYmxlIG5hbWUgY2hhbmdlcworICAgICIiIgorICAgIHBrZyA9IGQuZ2V0VmFyKCJQS0ciLCBUcnVlKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJERVBFTkRTIiwgcGtnLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJSRUNPTU1FTkRTIiwgcGtnLCBkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlJTVUdHRVNUUyIsIHBrZywgZCkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9kZWIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmZlYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfZGViLmJiY2xhc3MKQEAgLTAsMCArMSwzMzggQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDYtMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworaW5oZXJpdCBwYWNrYWdlCisKK0lNQUdFX1BLR1RZUEUgPz0gImRlYiIKKworRFBLR19BUkNIID89ICIke1RBUkdFVF9BUkNIfSIgCisKK1BLR1dSSVRFRElSREVCID0gIiR7V09SS0RJUn0vZGVwbG95LWRlYnMiCisKK0FQVENPTkZfVEFSR0VUID0gIiR7V09SS0RJUn0iCisKK0FQVF9BUkdTID0gIiR7QFsnJywgJy0tbm8taW5zdGFsbC1yZWNvbW1lbmRzJ11bZC5nZXRWYXIoIk5PX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpID09ICIxIl19IgorCisjCisjIGluc3RhbGwgYSBidW5jaCBvZiBwYWNrYWdlcyB1c2luZyBhcHQKKyMgdGhlIGZvbGxvd2luZyBzaGVsbCB2YXJpYWJsZXMgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuYzoKKyMgSU5TVEFMTF9ST09URlNfREVCIC0gaW5zdGFsbCByb290IGRpcgorIyBJTlNUQUxMX0JBU0VBUkNIX0RFQiAtIGluc3RhbGwgYmFzZSBhcmNoaXRlY3V0cmUKKyMgSU5TVEFMTF9BUkNIU19ERUIgLSBsaXN0IG9mIGF2YWlsYWJsZSBhcmNocworIyBJTlNUQUxMX1BBQ0tBR0VTX05PUk1BTF9ERUIgLSBwYWNrYWdlcyB0byBiZSBpbnN0YWxsZWQKKyMgSU5TVEFMTF9QQUNLQUdFU19BVFRFTVBUT05MWV9ERUIgLSBwYWNrYWdlcyBhdHRlbXBlZCB0byBiZSBpbnN0YWxsZWQgb25seQorIyBJTlNUQUxMX1BBQ0tBR0VTX0xJTkdVQVNfREVCIC0gYWRkaXRpb25hbCBwYWNrYWdlcyBmb3IgdWNsaWJjCisjIElOU1RBTExfVEFTS19ERUIgLSB0YXNrIG5hbWUKKworcHl0aG9uIGRvX3BhY2thZ2VfZGViICgpIHsKKyAgICBpbXBvcnQgcmUsIGNvcHkKKyAgICBpbXBvcnQgdGV4dHdyYXAKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBvdXRkaXIgPSBkLmdldFZhcignUEtHV1JJVEVESVJERUInLCBUcnVlKQorICAgIGlmIG5vdCBvdXRkaXI6CisgICAgICAgIGJiLmVycm9yKCJQS0dXUklURURJUkRFQiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgIGJiLmRlYnVnKDEsICJQQUNLQUdFUyBub3QgZGVmaW5lZCwgbm90aGluZyB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIiksb3MuUl9PSyk6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIkRFQl9QQUNLQUdFX0lOREVYX0NMRUFOIikpCisKKyAgICBpZiBwYWNrYWdlcyA9PSBbXToKKyAgICAgICAgYmIuZGVidWcoMSwgIk5vIHBhY2thZ2VzOyBub3RoaW5nIHRvIGRvIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgZGVmIGNsZWFudXBjb250cm9sKHJvb3QpOgorICAgICAgICBmb3IgcCBpbiBbJ0NPTlRST0wnLCAnREVCSUFOJ106CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHJvb3QsIHApCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUocm9vdCArICIubG9jayIpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UXyVzJyAlIHBrZywgcm9vdCkKKyAgICAgICAgcGtnbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2duYW1lOgorICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQS0cnLCBwa2duYW1lKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOiIgKyBwa2cpCisKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJvb3QpKQorCisgICAgICAgIHBrZ291dGRpciA9IG9zLnBhdGguam9pbihvdXRkaXIsIGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsIFRydWUpKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGtnb3V0ZGlyKQorCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgICAgICBnID0gZ2xvYignKicpCisgICAgICAgIGlmIG5vdCBnIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgY29udHJvbGRpciA9IG9zLnBhdGguam9pbihyb290LCAnREVCSUFOJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGNvbnRyb2xkaXIpCisgICAgICAgIG9zLmNobW9kKGNvbnRyb2xkaXIsIDA3NTUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgIGN0cmxmaWxlID0gY29kZWNzLm9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb250cm9sJyksICd3JywgJ3V0Zi04JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgcGUgPSBkLmdldFZhcignUEtHRScsIFRydWUpCisgICAgICAgIGlmIHBlIGFuZCBpbnQocGUpID4gMDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlczolcy0lc1xuIiwgWydQS0dFJywgJ1BLR1YnLCAnUEtHUiddXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlcy0lc1xuIiwgWydQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJEZXNjcmlwdGlvbjogJXNcbiIsIFsnREVTQ1JJUFRJT04nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJTZWN0aW9uOiAlc1xuIiwgWydTRUNUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiUHJpb3JpdHk6ICVzXG4iLCBbJ1BSSU9SSVRZJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiTWFpbnRhaW5lcjogJXNcbiIsIFsnTUFJTlRBSU5FUiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkFyY2hpdGVjdHVyZTogJXNcbiIsIFsnRFBLR19BUkNIJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiT0U6ICVzXG4iLCBbJ1BOJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiUGFja2FnZUFyY2g6ICVzXG4iLCBbJ1BBQ0tBR0VfQVJDSCddXSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSk6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiSG9tZXBhZ2U6ICVzXG4iLCBbJ0hPTUVQQUdFJ11dKQorCisgICAgICAgICMgUGFja2FnZSwgVmVyc2lvbiwgTWFpbnRhaW5lciwgRGVzY3JpcHRpb24gLSBtYW5kYXRvcnkKKyAgICAgICAgIyBTZWN0aW9uLCBQcmlvcml0eSwgRXNzZW50aWFsLCBBcmNoaXRlY3R1cmUsIFNvdXJjZSwgRGVwZW5kcywgUHJlLURlcGVuZHMsIFJlY29tbWVuZHMsIFN1Z2dlc3RzLCBDb25mbGljdHMsIFJlcGxhY2VzLCBQcm92aWRlcyAtIE9wdGlvbmFsCisKKworICAgICAgICBkZWYgcHVsbERhdGEobCwgZCk6CisgICAgICAgICAgICBsMiA9IFtdCisgICAgICAgICAgICBmb3IgaSBpbiBsOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkLmdldFZhcihpLCBUcnVlKQorICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoZikKKyAgICAgICAgICAgICAgICBpZiBpID09ICdEUEtHX0FSQ0gnIGFuZCBkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkgPT0gJ2FsbCc6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSAnYWxsJworICAgICAgICAgICAgICAgIGVsaWYgaSA9PSAnUEFDS0FHRV9BUkNIJyBvciBpID09ICdEUEtHX0FSQ0gnOgorICAgICAgICAgICAgICAgICAgICMgVGhlIHBhcmFtcyBpbiBkZWIgcGFja2FnZSBjb250cm9sIGRvbid0IGFsbG93IGNoYXJhY3RlcgorICAgICAgICAgICAgICAgICAgICMgYF8nLCBzbyBjaGFuZ2UgdGhlIGFyY2gncyBgXycgdG8gYC0nLiBTdWNoIGFzIGB4ODZfNjQnCisgICAgICAgICAgICAgICAgICAgIyAtLT5geDg2LTY0JworICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICAgICAgbDIuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gbDIKKworICAgICAgICBjdHJsZmlsZS53cml0ZSgiUGFja2FnZTogJXNcbiIgJSBwa2duYW1lKQorICAgICAgICAjIGNoZWNrIGZvciByZXF1aXJlZCBmaWVsZHMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIChjLCBmcykgaW4gZmllbGRzOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZzOgorICAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcihmLCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihmKQorICAgICAgICAgICAgICAgICMgU3BlY2lhbCBiZWhhdmlvciBmb3IgZGVzY3JpcHRpb24uLi4KKyAgICAgICAgICAgICAgICBpZiAnREVTQ1JJUFRJT04nIGluIGZzOgorICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIgorICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJ0Rlc2NyaXB0aW9uOiAlc1xuJyAlIHVuaWNvZGUoc3VtbWFyeSwndXRmLTgnKSkKKyAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gdGV4dHdyYXAuZGVkZW50KGRlc2NyaXB0aW9uKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICBpZiAnXFxuJyBpbiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIE1hbnVhbGx5IGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIGRlc2NyaXB0aW9uLnNwbGl0KCdcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBsaW1pdCB0aGUgd2lkdGggd2hlbiBtYW51YWxseSBpbmRlbnQsIGJ1dCB3ZSBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lZWQgdGhlIHRleHR3cmFwLmZpbGwoKSB0byBzZXQgdGhlIGluaXRpYWxfaW5kZW50IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN1YnNlcXVlbnRfaW5kZW50LCBzbyBzZXQgYSBsYXJnZSB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB1bmljb2RlKHRleHR3cmFwLmZpbGwodCwgd2lkdGg9MTAwMDAwLCBpbml0aWFsX2luZGVudD0nICcsIHN1YnNlcXVlbnRfaW5kZW50PScgJyksJ3V0Zi04JykpCisgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICMgQXV0byBpbmRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgnJXNcbicgJSB1bmljb2RlKHRleHR3cmFwLmZpbGwoZGVzY3JpcHRpb24uc3RyaXAoKSwgd2lkdGg9NzQsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSwndXRmLTgnKSkKKworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSh1bmljb2RlKGMgJSB0dXBsZShwdWxsRGF0YShmcywgbG9jYWxkYXRhKSksJ3V0Zi04JykpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiTWlzc2luZyBmaWVsZCBmb3IgZGViIGdlbmVyYXRpb246ICVzIiAlIHZhbHVlKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk5vbiBVVEYtOCBjaGFyYWN0ZXJzIGZvdW5kIGluIG9uZSBvZiB0aGUgZmllbGRzIikKKworICAgICAgICAjIG1vcmUgZmllbGRzCisKKyAgICAgICAgY3VzdG9tX2ZpZWxkc19jaHVuayA9IGdldF9wYWNrYWdlX2FkZGl0aW9uYWxfbWV0YWRhdGEoImRlYiIsIGxvY2FsZGF0YSkKKyAgICAgICAgaWYgY3VzdG9tX2ZpZWxkc19jaHVuayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKHVuaWNvZGUoY3VzdG9tX2ZpZWxkc19jaHVuaykpCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiXG4iKQorCisgICAgICAgIG1hcHBpbmdfcmVuYW1lX2hvb2sobG9jYWxkYXRhKQorCisgICAgICAgIGRlZiBkZWJpYW5fY21wX3JlbWFwKHZhcik6CisgICAgICAgICAgICAjIGRwa2cgZG9lcyBub3QgYWxsb3cgZm9yICcoJyBvciAnKScgaW4gYSBkZXBlbmRlbmN5IG5hbWUKKyAgICAgICAgICAgICMgcmVwbGFjZSB0aGVzZSBpbnN0YW5jZXMgd2l0aCAnX18nIGFuZCAnX18nCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEluIGRlYmlhbiAnPicgYW5kICc8JyBkbyBub3QgbWVhbiB3aGF0IGl0IGFwcGVhcnMgdGhleSBtZWFuCisgICAgICAgICAgICAjICAgJzwnID0gbGVzcyBvciBlcXVhbAorICAgICAgICAgICAgIyAgICc+JyA9IGdyZWF0ZXIgb3IgZXF1YWwKKyAgICAgICAgICAgICMgYWRqdXN0IHRoZXNlIHRvIHRoZSAnPDwnIGFuZCAnPj4nIGVxdWl2YWxlbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBmb3IgZGVwIGluIHZhcjoKKyAgICAgICAgICAgICAgICBpZiAnKCcgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICBuZXdkZXAgPSBkZXAucmVwbGFjZSgnKCcsICdfXycpCisgICAgICAgICAgICAgICAgICAgIG5ld2RlcCA9IG5ld2RlcC5yZXBsYWNlKCcpJywgJ19fJykKKyAgICAgICAgICAgICAgICAgICAgaWYgbmV3ZGVwICE9IGRlcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcltuZXdkZXBdID0gdmFyW2RlcF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCB2YXJbZGVwXQorICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHZhcltkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIjwgIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIjwgIiwgIjw8ICIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIj4gIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIj4gIiwgIj4+ICIpCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkRFUEVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyZGVwZW5kcykKKyAgICAgICAgZm9yIGRlcCBpbiByZGVwZW5kczoKKyAgICAgICAgICAgICAgICBpZiAnKicgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJkZXBlbmRzW2RlcF0KKyAgICAgICAgcnJlY29tbWVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVjb21tZW5kcykKKyAgICAgICAgZm9yIGRlcCBpbiBycmVjb21tZW5kczoKKyAgICAgICAgICAgICAgICBpZiAnKicgaW4gZGVwOgorICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHJyZWNvbW1lbmRzW2RlcF0KKyAgICAgICAgcnN1Z2dlc3RzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJTVUdHRVNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJzdWdnZXN0cykKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZHJvcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGhlcmUsIG5vdCB3YW50ZWQvc3VwcG9ydGVkIGJ5IGRlYgorICAgICAgICBycHJvdmlkZXMgPSBkaWN0LmZyb21rZXlzKGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIiksIFtdKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJwcm92aWRlcykKKyAgICAgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRVBMQUNFUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJyZXBsYWNlcykKKyAgICAgICAgcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSQ09ORkxJQ1RTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmNvbmZsaWN0cykKKyAgICAgICAgaWYgcmRlcGVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiRGVwZW5kczogJXNcbiIgJSB1bmljb2RlKGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcykpKQorICAgICAgICBpZiByc3VnZ2VzdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU3VnZ2VzdHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnN1Z2dlc3RzKSkpCisgICAgICAgIGlmIHJyZWNvbW1lbmRzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlJlY29tbWVuZHM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnJlY29tbWVuZHMpKSkKKyAgICAgICAgaWYgcnByb3ZpZGVzOgorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlByb3ZpZGVzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcykpKQorICAgICAgICBpZiBycmVwbGFjZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVwbGFjZXM6ICVzXG4iICUgdW5pY29kZShiYi51dGlscy5qb2luX2RlcHMocnJlcGxhY2VzKSkpCisgICAgICAgIGlmIHJjb25mbGljdHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiQ29uZmxpY3RzOiAlc1xuIiAlIHVuaWNvZGUoYmIudXRpbHMuam9pbl9kZXBzKHJjb25mbGljdHMpKSkKKyAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorCisgICAgICAgIGZvciBzY3JpcHQgaW4gWyJwcmVpbnN0IiwgInBvc3RpbnN0IiwgInByZXJtIiwgInBvc3RybSJdOgorICAgICAgICAgICAgc2NyaXB0dmFyID0gbG9jYWxkYXRhLmdldFZhcigncGtnXyVzJyAlIHNjcmlwdCwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBzY3JpcHR2YXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IHNjcmlwdHZhci5zdHJpcCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gJXMgc2NyaXB0IGZpbGUgZm9yIHdyaXRpbmcuIiAlIHNjcmlwdCkKKworICAgICAgICAgICAgaWYgc2NyaXB0dmFyLnN0YXJ0c3dpdGgoIiMhIik6CisgICAgICAgICAgICAgICAgcG9zID0gc2NyaXB0dmFyLmZpbmQoIlxuIikgKyAxCisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZShzY3JpcHR2YXJbOnBvc10pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBvcyA9IDAKKyAgICAgICAgICAgICAgICBzY3JpcHRmaWxlLndyaXRlKCIjIS9iaW4vc2hcbiIpCisKKyAgICAgICAgICAgICMgUHJldmVudCB0aGUgcHJlcm0vcG9zdHJtIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gZHVyaW5nIGFuIHVwZ3JhZGUKKyAgICAgICAgICAgIGlmIHNjcmlwdCBpbiAoJ3ByZXJtJywgJ3Bvc3RybScpOgorICAgICAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoJ1sgIiQxIiAhPSAidXBncmFkZSIgXSB8fCBleGl0IDBcbicpCisKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyW3BvczpdKQorICAgICAgICAgICAgc2NyaXB0ZmlsZS53cml0ZSgnXG4nKQorICAgICAgICAgICAgc2NyaXB0ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgMDc1NSkKKworICAgICAgICBjb25mZmlsZXNfc3RyID0gJyAnLmpvaW4oZ2V0X2NvbmZmaWxlcyhwa2csIGQpKQorICAgICAgICBpZiBjb25mZmlsZXNfc3RyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbmZmaWxlcyA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb25mZmlsZXMnKSwgJ3cnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb25mZmlsZXMgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgICAgIGZvciBmIGluIGNvbmZmaWxlc19zdHIuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4ocm9vdCwgZikpOgorICAgICAgICAgICAgICAgICAgICBjb25mZmlsZXMud3JpdGUoJyVzXG4nICUgZikKKyAgICAgICAgICAgIGNvbmZmaWxlcy5jbG9zZSgpCisKKyAgICAgICAgb3MuY2hkaXIoYmFzZWRpcikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJQQVRIPVwiJXNcIiBkcGtnLWRlYiAtYiAlcyAlcyIgJSAobG9jYWxkYXRhLmdldFZhcigiUEFUSCIsIFRydWUpLCByb290LCBwa2dvdXRkaXIpLCBzaGVsbD1UcnVlKQorICAgICAgICBpZiByZXQgIT0gMDoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJkcGtnLWRlYiBleGVjdXRpb24gZmFpbGVkIikKKworICAgICAgICBjbGVhbnVwY29udHJvbChyb290KQorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCitkb19wYWNrYWdlX2RlYlt2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCisKK1NTVEFURVRBU0tTICs9ICJkb19wYWNrYWdlX3dyaXRlX2RlYiIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW3NzdGF0ZS1pbnB1dGRpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7REVQTE9ZX0RJUl9ERUJ9IgorCitweXRob24gZG9fcGFja2FnZV93cml0ZV9kZWJfc2V0c2NlbmUgKCkgeworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorCisgICAgaWYgb3MuYWNjZXNzKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiREVCX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSxvcy5SX09LKToKKyAgICAgICAgb3MudW5saW5rKG9zLnBhdGguam9pbih0bXBkaXIsICJzdGFtcHMiLCAiREVCX1BBQ0tBR0VfSU5ERVhfQ0xFQU4iKSkKKworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wYWNrYWdlX3dyaXRlX2RlYl9zZXRzY2VuZQorCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpICE9ICcnOgorICAgICAgICBkZXBzID0gJyBkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IHZpcnR1YWwvZmFrZXJvb3QtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QnCisgICAgICAgIGQuYXBwZW5kVmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZGVwZW5kcycsIGRlcHMpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZmFrZXJvb3QnLCAiMSIpCisKKyAgICAjIE1hcCBUQVJHRVRfQVJDSCB0byBEZWJpYW4ncyBpZGVhcyBhYm91dCBhcmNoaXRlY3R1cmVzCisgICAgZGFyY2ggPSBkLmdldFZhcignRFBLR19BUkNIJywgVHJ1ZSkKKyAgICBpZiBkYXJjaCBpbiBbIng4NiIsICJpNDg2IiwgImk1ODYiLCAiaTY4NiIsICJwZW50aXVtIl06CisgICAgICAgICBkLnNldFZhcignRFBLR19BUkNIJywgJ2kzODYnKQorICAgIGVsaWYgZGFyY2ggPT0gIng4Nl82NCI6CisgICAgICAgICBkLnNldFZhcignRFBLR19BUkNIJywgJ2FtZDY0JykKKyAgICBlbGlmIGRhcmNoID09ICJhcm0iOgorICAgICAgICAgZC5zZXRWYXIoJ0RQS0dfQVJDSCcsICdhcm1lbCcpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3dyaXRlX2RlYiAoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJyZWFkX3N1YnBhY2thZ2VfbWV0YWRhdGEiLCBkKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygiZG9fcGFja2FnZV9kZWIiLCBkKQorfQorZG9fcGFja2FnZV93cml0ZV9kZWJbZGlyc10gPSAiJHtQS0dXUklURURJUkRFQn0iCitkb19wYWNrYWdlX3dyaXRlX2RlYltjbGVhbmRpcnNdID0gIiR7UEtHV1JJVEVESVJERUJ9IgorZG9fcGFja2FnZV93cml0ZV9kZWJbdW1hc2tdID0gIjAyMiIKK2FkZHRhc2sgcGFja2FnZV93cml0ZV9kZWIgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQorCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gImRwa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitQQUNLQUdFSU5ERVhERVBTICs9ICJhcHQtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2RvX2J1aWxkW3JlY3JkZXB0YXNrXSArPSAiZG9fcGFja2FnZV93cml0ZV9kZWIiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX2lway5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDdhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9pcGsuYmJjbGFzcwpAQCAtMCwwICsxLDI4OSBAQAoraW5oZXJpdCBwYWNrYWdlCisKK0lNQUdFX1BLR1RZUEUgPz0gImlwayIKKworSVBLR0NPTkZfVEFSR0VUID0gIiR7V09SS0RJUn0vb3BrZy5jb25mIgorSVBLR0NPTkZfU0RLID0gICIke1dPUktESVJ9L29wa2ctc2RrLmNvbmYiCisKK1BLR1dSSVRFRElSSVBLID0gIiR7V09SS0RJUn0vZGVwbG95LWlwa3MiCisKKyMgUHJvZ3JhbSB0byBiZSB1c2VkIHRvIGJ1aWxkIG9wa2cgcGFja2FnZXMKK09QS0dCVUlMRENNRCA/Pz0gIm9wa2ctYnVpbGQiCisKK09QS0dfQVJHUyA9ICItLWZvcmNlX3Bvc3RpbnN0YWxsIC0tcHJlZmVyLWFyY2gtdG8tdmVyc2lvbiIKK09QS0dfQVJHUyArPSAiJHtAWycnLCAnLS1uby1pbnN0YWxsLXJlY29tbWVuZHMnXVtkLmdldFZhcigiTk9fUkVDT01NRU5EQVRJT05TIiwgVHJ1ZSkgPT0gIjEiXX0iCitPUEtHX0FSR1MgKz0gIiR7QFsnJywgJy0tYWRkLWV4Y2x1ZGUgJyArICcgLS1hZGQtZXhjbHVkZSAnLmpvaW4oKGQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIikuc3BsaXQoKSldWyhkLmdldFZhcigiUEFDS0FHRV9FWENMVURFIiwgVHJ1ZSkgb3IgIiIpICE9ICIiXX0iCisKK09QS0dMSUJESVIgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIiCisKK3B5dGhvbiBkb19wYWNrYWdlX2lwayAoKSB7CisgICAgaW1wb3J0IHJlLCBjb3B5CisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgb3V0ZGlyID0gZC5nZXRWYXIoJ1BLR1dSSVRFRElSSVBLJywgVHJ1ZSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyIG9yIG5vdCBvdXRkaXIgb3Igbm90IHRtcGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIlZhcmlhYmxlcyBpbmNvcnJlY3RseSBzZXQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgICMgV2UncmUgYWJvdXQgdG8gYWRkIG5ldyBwYWNrYWdlcyBzbyB0aGUgaW5kZXggbmVlZHMgdG8gYmUgY2hlY2tlZAorICAgICMgc28gcmVtb3ZlIHRoZSBhcHByb3ByaWF0ZSBzdGFtcCBmaWxlLgorICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIiksIG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgZGVmIGNsZWFudXBjb250cm9sKHJvb3QpOgorICAgICAgICBmb3IgcCBpbiBbJ0NPTlRST0wnLCAnREVCSUFOJ106CisgICAgICAgICAgICBwID0gb3MucGF0aC5qb2luKHJvb3QsIHApCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5wcnVuZWRpcihwKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgcm9vdCA9ICIlcy8lcyIgJSAocGtnZGVzdCwgcGtnKQorCisgICAgICAgIGxmID0gYmIudXRpbHMubG9ja2ZpbGUocm9vdCArICIubG9jayIpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UXyVzJyAlIHBrZywgcm9vdCkKKyAgICAgICAgcGtnbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2duYW1lOgorICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQS0cnLCBwa2duYW1lKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOiIgKyBwa2cpCisKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHJvb3QpKQorICAgICAgICBhcmNoID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSkKKworICAgICAgICBpZiBsb2NhbGRhdGEuZ2V0VmFyKCdJUEtfSElFUkFSQ0hJQ0FMX0ZFRUQnLCBGYWxzZSkgPT0gIjEiOgorICAgICAgICAgICAgIyBTcHJlYWQgcGFja2FnZXMgYWNyb3NzIHN1YmRpcmVjdG9yaWVzIHNvIGVhY2ggaXNuJ3QgdG9vIGNyb3dkZWQKKyAgICAgICAgICAgIGlmIHBrZ25hbWUuc3RhcnRzd2l0aCgnbGliJyk6CisgICAgICAgICAgICAgICAgcGtnX3ByZWZpeCA9ICdsaWInICsgcGtnbmFtZVszXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfcHJlZml4ID0gcGtnbmFtZVswXQorCisgICAgICAgICAgICAjIEtlZXAgLWRiZywgLWRldiwgLWRvYywgLXN0YXRpY2RldiwgLWxvY2FsZSBhbmQgLWxvY2FsZS0qIHBhY2thZ2VzCisgICAgICAgICAgICAjIHRvZ2V0aGVyLiBUaGVzZSBwYWNrYWdlIHN1ZmZpeGVzIGFyZSB0YWtlbiBmcm9tIHRoZSBkZWZpbml0aW9ucyBvZgorICAgICAgICAgICAgIyBQQUNLQUdFUyBhbmQgUEFDS0FHRVNfRFlOQU1JQyBpbiBtZXRhL2NvbmYvYml0YmFrZS5jb25mCisgICAgICAgICAgICBpZiBwa2duYW1lWy00Ol0gaW4gKCctZGJnJywgJy1kZXYnLCAnLWRvYycpOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lWzotNF0KKyAgICAgICAgICAgIGVsaWYgcGtnbmFtZS5lbmRzd2l0aCgnLXN0YXRpY2RldicpOgorICAgICAgICAgICAgICAgIHBrZ19zdWJkaXIgPSBwa2duYW1lWzotMTBdCisgICAgICAgICAgICBlbGlmIHBrZ25hbWUuZW5kc3dpdGgoJy1sb2NhbGUnKToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6LTddCisgICAgICAgICAgICBlbGlmICctbG9jYWxlLScgaW4gcGtnbmFtZToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZVs6cGtnbmFtZS5maW5kKCctbG9jYWxlLScpXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dfc3ViZGlyID0gcGtnbmFtZQorCisgICAgICAgICAgICBwa2dvdXRkaXIgPSAiJXMvJXMvJXMvJXMiICUgKG91dGRpciwgYXJjaCwgcGtnX3ByZWZpeCwgcGtnX3N1YmRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBrZ291dGRpciA9ICIlcy8lcyIgJSAob3V0ZGlyLCBhcmNoKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwa2dvdXRkaXIpCisgICAgICAgIG9zLmNoZGlyKHJvb3QpCisgICAgICAgIGNsZWFudXBjb250cm9sKHJvb3QpCisgICAgICAgIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgorICAgICAgICBnID0gZ2xvYignKicpCisgICAgICAgIGlmIG5vdCBnIGFuZCBsb2NhbGRhdGEuZ2V0VmFyKCdBTExPV19FTVBUWScsIEZhbHNlKSAhPSAiMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJOb3QgY3JlYXRpbmcgZW1wdHkgYXJjaGl2ZSBmb3IgJXMtJXMtJXMiICUgKHBrZywgbG9jYWxkYXRhLmdldFZhcignUEtHVicsIFRydWUpLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dSJywgVHJ1ZSkpKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgY29udHJvbGRpciA9IG9zLnBhdGguam9pbihyb290LCAnQ09OVFJPTCcpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihjb250cm9sZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdHJsZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb250cm9sJyksICd3JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gY29udHJvbCBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgcGUgPSBkLmdldFZhcignUEtHRScsIFRydWUpCisgICAgICAgIGlmIHBlIGFuZCBpbnQocGUpID4gMDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlczolcy0lc1xuIiwgWydQS0dFJywgJ1BLR1YnLCAnUEtHUiddXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJWZXJzaW9uOiAlcy0lc1xuIiwgWydQS0dWJywgJ1BLR1InXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJEZXNjcmlwdGlvbjogJXNcbiIsIFsnREVTQ1JJUFRJT04nXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJTZWN0aW9uOiAlc1xuIiwgWydTRUNUSU9OJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiUHJpb3JpdHk6ICVzXG4iLCBbJ1BSSU9SSVRZJ11dKQorICAgICAgICBmaWVsZHMuYXBwZW5kKFsiTWFpbnRhaW5lcjogJXNcbiIsIFsnTUFJTlRBSU5FUiddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIkxpY2Vuc2U6ICVzXG4iLCBbJ0xJQ0VOU0UnXV0pCisgICAgICAgIGZpZWxkcy5hcHBlbmQoWyJBcmNoaXRlY3R1cmU6ICVzXG4iLCBbJ1BBQ0tBR0VfQVJDSCddXSkKKyAgICAgICAgZmllbGRzLmFwcGVuZChbIk9FOiAlc1xuIiwgWydQTiddXSkKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0hPTUVQQUdFJywgVHJ1ZSk6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKFsiSG9tZXBhZ2U6ICVzXG4iLCBbJ0hPTUVQQUdFJ11dKQorCisgICAgICAgIGRlZiBwdWxsRGF0YShsLCBkKToKKyAgICAgICAgICAgIGwyID0gW10KKyAgICAgICAgICAgIGZvciBpIGluIGw6CisgICAgICAgICAgICAgICAgbDIuYXBwZW5kKGQuZ2V0VmFyKGksIFRydWUpKQorICAgICAgICAgICAgcmV0dXJuIGwyCisKKyAgICAgICAgY3RybGZpbGUud3JpdGUoIlBhY2thZ2U6ICVzXG4iICUgcGtnbmFtZSkKKyAgICAgICAgIyBjaGVjayBmb3IgcmVxdWlyZWQgZmllbGRzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciAoYywgZnMpIGluIGZpZWxkczoKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcihmLCBGYWxzZSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKGYpCisgICAgICAgICAgICAgICAgIyBTcGVjaWFsIGJlaGF2aW9yIGZvciBkZXNjcmlwdGlvbi4uLgorICAgICAgICAgICAgICAgIGlmICdERVNDUklQVElPTicgaW4gZnM6CisgICAgICAgICAgICAgICAgICAgIHN1bW1hcnkgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVU1NQVJZJywgVHJ1ZSkgb3IgbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJ0Rlc2NyaXB0aW9uOiAlc1xuJyAlIHN1bW1hcnkpCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uID0gbG9jYWxkYXRhLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSB0ZXh0d3JhcC5kZWRlbnQoZGVzY3JpcHRpb24pLnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1xcbicgaW4gZGVzY3JpcHRpb246CisgICAgICAgICAgICAgICAgICAgICAgICAjIE1hbnVhbGx5IGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gZGVzY3JpcHRpb24uc3BsaXQoJ1xcbicpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgZG9uJ3QgbGltaXQgdGhlIHdpZHRoIHdoZW4gbWFudWFsbHkgaW5kZW50LCBidXQgd2UgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5lZWQgdGhlIHRleHR3cmFwLmZpbGwoKSB0byBzZXQgdGhlIGluaXRpYWxfaW5kZW50IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3Vic2VxdWVudF9pbmRlbnQsIHNvIHNldCBhIGxhcmdlIHdpZHRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdGV4dHdyYXAuZmlsbCh0LnN0cmlwKCksIHdpZHRoPTEwMDAwMCwgaW5pdGlhbF9pbmRlbnQ9JyAnLCBzdWJzZXF1ZW50X2luZGVudD0nICcpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBdXRvIGluZGVudAorICAgICAgICAgICAgICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoJyVzXG4nICUgdGV4dHdyYXAuZmlsbChkZXNjcmlwdGlvbiwgd2lkdGg9NzQsIGluaXRpYWxfaW5kZW50PScgJywgc3Vic2VxdWVudF9pbmRlbnQ9JyAnKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjdHJsZmlsZS53cml0ZShjICUgdHVwbGUocHVsbERhdGEoZnMsIGxvY2FsZGF0YSkpKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgY3RybGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk1pc3NpbmcgZmllbGQgZm9yIGlwayBnZW5lcmF0aW9uOiAlcyIgJSB2YWx1ZSkKKyAgICAgICAgIyBtb3JlIGZpZWxkcworCisgICAgICAgIGN1c3RvbV9maWVsZHNfY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJpcGsiLCBsb2NhbGRhdGEpCisgICAgICAgIGlmIGN1c3RvbV9maWVsZHNfY2h1bmsgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZShjdXN0b21fZmllbGRzX2NodW5rKQorICAgICAgICAgICAgY3RybGZpbGUud3JpdGUoIlxuIikKKworICAgICAgICBtYXBwaW5nX3JlbmFtZV9ob29rKGxvY2FsZGF0YSkKKworICAgICAgICBkZWYgZGViaWFuX2NtcF9yZW1hcCh2YXIpOgorICAgICAgICAgICAgIyBJbiBkZWJpYW4gJz4nIGFuZCAnPCcgZG8gbm90IG1lYW4gd2hhdCBpdCBhcHBlYXJzIHRoZXkgbWVhbgorICAgICAgICAgICAgIyAgICc8JyA9IGxlc3Mgb3IgZXF1YWwKKyAgICAgICAgICAgICMgICAnPicgPSBncmVhdGVyIG9yIGVxdWFsCisgICAgICAgICAgICAjIGFkanVzdCB0aGVzZSB0byB0aGUgJzw8JyBhbmQgJz4+JyBlcXVpdmFsZW50cworICAgICAgICAgICAgIworICAgICAgICAgICAgZm9yIGRlcCBpbiB2YXI6CisgICAgICAgICAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHZhcltkZXBdKToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIjwgIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIjwgIiwgIjw8ICIpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgKHYgb3IgIiIpLnN0YXJ0c3dpdGgoIj4gIik6CisgICAgICAgICAgICAgICAgICAgICAgICB2YXJbZGVwXVtpXSA9IHZhcltkZXBdW2ldLnJlcGxhY2UoIj4gIiwgIj4+ICIpCisKKyAgICAgICAgcmRlcGVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUkRFUEVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChyZGVwZW5kcykKKyAgICAgICAgcnJlY29tbWVuZHMgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIobG9jYWxkYXRhLmdldFZhcigiUlJFQ09NTUVORFMiLCBUcnVlKSBvciAiIikKKyAgICAgICAgZGViaWFuX2NtcF9yZW1hcChycmVjb21tZW5kcykKKyAgICAgICAgcnN1Z2dlc3RzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJTVUdHRVNUUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJzdWdnZXN0cykKKyAgICAgICAgIyBEZWxpYmVyYXRlbHkgZHJvcCB2ZXJzaW9uIGluZm9ybWF0aW9uIGhlcmUsIG5vdCB3YW50ZWQvc3VwcG9ydGVkIGJ5IGlwaworICAgICAgICBycHJvdmlkZXMgPSBkaWN0LmZyb21rZXlzKGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSUFJPVklERVMiLCBUcnVlKSBvciAiIiksIFtdKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJwcm92aWRlcykKKyAgICAgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGxvY2FsZGF0YS5nZXRWYXIoIlJSRVBMQUNFUyIsIFRydWUpIG9yICIiKQorICAgICAgICBkZWJpYW5fY21wX3JlbWFwKHJyZXBsYWNlcykKKyAgICAgICAgcmNvbmZsaWN0cyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihsb2NhbGRhdGEuZ2V0VmFyKCJSQ09ORkxJQ1RTIiwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGRlYmlhbl9jbXBfcmVtYXAocmNvbmZsaWN0cykKKworICAgICAgICBpZiByZGVwZW5kczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJEZXBlbmRzOiAlc1xuIiAlIGJiLnV0aWxzLmpvaW5fZGVwcyhyZGVwZW5kcykpCisgICAgICAgIGlmIHJzdWdnZXN0czoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJTdWdnZXN0czogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnN1Z2dlc3RzKSkKKyAgICAgICAgaWYgcnJlY29tbWVuZHM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUmVjb21tZW5kczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnJlY29tbWVuZHMpKQorICAgICAgICBpZiBycHJvdmlkZXM6CisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiUHJvdmlkZXM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcykpCisgICAgICAgIGlmIHJyZXBsYWNlczoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJSZXBsYWNlczogJXNcbiIgJSBiYi51dGlscy5qb2luX2RlcHMocnJlcGxhY2VzKSkKKyAgICAgICAgaWYgcmNvbmZsaWN0czoKKyAgICAgICAgICAgIGN0cmxmaWxlLndyaXRlKCJDb25mbGljdHM6ICVzXG4iICUgYmIudXRpbHMuam9pbl9kZXBzKHJjb25mbGljdHMpKQorICAgICAgICBzcmNfdXJpID0gbG9jYWxkYXRhLmdldFZhcigiU1JDX1VSSSIsIFRydWUpLnN0cmlwKCkgb3IgIk5vbmUiCisgICAgICAgIGlmIHNyY191cmk6CisgICAgICAgICAgICBzcmNfdXJpID0gcmUuc3ViKCJccysiLCAiICIsIHNyY191cmkpCisgICAgICAgICAgICBjdHJsZmlsZS53cml0ZSgiU291cmNlOiAlc1xuIiAlICIgIi5qb2luKHNyY191cmkuc3BsaXQoKSkpCisgICAgICAgIGN0cmxmaWxlLmNsb3NlKCkKKworICAgICAgICBmb3Igc2NyaXB0IGluIFsicHJlaW5zdCIsICJwb3N0aW5zdCIsICJwcmVybSIsICJwb3N0cm0iXToKKyAgICAgICAgICAgIHNjcmlwdHZhciA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ18lcycgJSBzY3JpcHQsIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2NyaXB0dmFyOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2NyaXB0ZmlsZSA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsIHNjcmlwdCksICd3JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobGYpCisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gJXMgc2NyaXB0IGZpbGUgZm9yIHdyaXRpbmcuIiAlIHNjcmlwdCkKKyAgICAgICAgICAgIHNjcmlwdGZpbGUud3JpdGUoc2NyaXB0dmFyKQorICAgICAgICAgICAgc2NyaXB0ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oY29udHJvbGRpciwgc2NyaXB0KSwgMDc1NSkKKworICAgICAgICBjb25mZmlsZXNfc3RyID0gJyAnLmpvaW4oZ2V0X2NvbmZmaWxlcyhwa2csIGQpKQorICAgICAgICBpZiBjb25mZmlsZXNfc3RyOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbmZmaWxlcyA9IG9wZW4ob3MucGF0aC5qb2luKGNvbnRyb2xkaXIsICdjb25mZmlsZXMnKSwgJ3cnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBjb25mZmlsZXMgZm9yIHdyaXRpbmcuIikKKyAgICAgICAgICAgIGZvciBmIGluIGNvbmZmaWxlc19zdHIuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4ocm9vdCwgZikpOgorICAgICAgICAgICAgICAgICAgICBjb25mZmlsZXMud3JpdGUoJyVzXG4nICUgZikKKyAgICAgICAgICAgIGNvbmZmaWxlcy5jbG9zZSgpCisKKyAgICAgICAgb3MuY2hkaXIoYmFzZWRpcikKKyAgICAgICAgcmV0ID0gc3VicHJvY2Vzcy5jYWxsKCJQQVRIPVwiJXNcIiAlcyAlcyAlcyIgJSAobG9jYWxkYXRhLmdldFZhcigiUEFUSCIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCJPUEtHQlVJTERDTUQiLDEpLCBwa2csIHBrZ291dGRpciksIHNoZWxsPVRydWUpCisgICAgICAgIGlmIHJldCAhPSAwOgorICAgICAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIm9wa2ctYnVpbGQgZXhlY3V0aW9uIGZhaWxlZCIpCisKKyAgICAgICAgY2xlYW51cGNvbnRyb2wocm9vdCkKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsZikKKworfQorIyBPdGhlcndpc2UgYWxsYXJjaCBwYWNrYWdlcyBtYXkgY2hhbmdlIGRlcGVuZGluZyBvbiBvdmVycmlkZSBjb25maWd1cmF0aW9uCitkb19wYWNrYWdlX2lwa1t2YXJkZXBzZXhjbHVkZV0gPSAiT1ZFUlJJREVTIgorCitTU1RBVEVUQVNLUyArPSAiZG9fcGFja2FnZV93cml0ZV9pcGsiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1BLR1dSSVRFRElSSVBLfSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke0RFUExPWV9ESVJfSVBLfSIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfaXBrX3NldHNjZW5lICgpIHsKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKworICAgIGlmIG9zLmFjY2Vzcyhvcy5wYXRoLmpvaW4odG1wZGlyLCAic3RhbXBzIiwgIklQS19QQUNLQUdFX0lOREVYX0NMRUFOIiksIG9zLlJfT0spOgorICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKHRtcGRpciwgInN0YW1wcyIsICJJUEtfUEFDS0FHRV9JTkRFWF9DTEVBTiIpKQorCisgICAgc3N0YXRlX3NldHNjZW5lKGQpCit9CithZGR0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrX3NldHNjZW5lCisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAnIG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgdmlydHVhbC9mYWtlcm9vdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcKKyAgICAgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdkZXBlbmRzJywgZGVwcykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX2lwaycsICdmYWtlcm9vdCcsICIxIikKK30KKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfaXBrICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX2lwayIsIGQpCit9Citkb19wYWNrYWdlX3dyaXRlX2lwa1tkaXJzXSA9ICIke1BLR1dSSVRFRElSSVBLfSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2NsZWFuZGlyc10gPSAiJHtQS0dXUklURURJUklQS30iCitkb19wYWNrYWdlX3dyaXRlX2lwa1t1bWFza10gPSAiMDIyIgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX2lwayBhZnRlciBkb19wYWNrYWdlZGF0YSBkb19wYWNrYWdlCisKK1BBQ0tBR0VJTkRFWERFUFMgKz0gIm9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitQQUNLQUdFSU5ERVhERVBTICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitkb19idWlsZFtyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZV9ycG0uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmExNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfcnBtLmJiY2xhc3MKQEAgLTAsMCArMSw3NzQgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJycG0iCisKK1JQTT0icnBtIgorUlBNQlVJTEQ9InJwbWJ1aWxkIgorCitQS0dXUklURURJUlJQTSA9ICIke1dPUktESVJ9L2RlcGxveS1ycG1zIgorCisjIE1haW50YWluaW5nIHRoZSBwZXJmaWxlIGRlcGVuZGVuY2llcyBoYXMgc2luZ2lmaWNhbnQgb3ZlcmhlYWQgd2hlbiB3cml0aW5nIHRoZSAKKyMgcGFja2FnZXMuIFdoZW4gc2V0LCB0aGlzIHZhbHVlIG1lcmdlcyB0aGVtIGZvciBlZmZpY2llbmN5LgorTUVSR0VQRVJGSUxFREVQUyA9ICIxIgorCisjIENvbnN0cnVjdCBwZXIgZmlsZSBkZXBlbmRlbmNpZXMgZmlsZQorZGVmIHdyaXRlX3JwbV9wZXJmaWxlZGF0YShzcmNuYW1lLCBkKToKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwa2dkID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorCisgICAgZGVmIGR1bXBfZmlsZXJkZXBzKHZhcm5hbWUsIG91dGZpbGUsIGQpOgorICAgICAgICBvdXRmaWxlLndyaXRlKCIjIS91c3IvYmluL2VudiBweXRob25cblxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiIyBEZXBlbmRlbmN5IHRhYmxlXG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCdkZXBzID0ge1xuJykKKyAgICAgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgZGVwZW5kc2ZsaXN0X2tleSA9ICdGSUxFJyArIHZhcm5hbWUgKyAnRkxJU1QnICsgIl8iICsgcGtnCisgICAgICAgICAgICBkZXBlbmRzZmxpc3QgPSAoZC5nZXRWYXIoZGVwZW5kc2ZsaXN0X2tleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBmb3IgZGZpbGUgaW4gZGVwZW5kc2ZsaXN0LnNwbGl0KCk6CisgICAgICAgICAgICAgICAga2V5ID0gIkZJTEUiICsgdmFybmFtZSArICJfIiArIGRmaWxlICsgIl8iICsgcGtnCisgICAgICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMoZC5nZXRWYXIoa2V5LCBUcnVlKSBvciAiIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZGZpbGUucmVwbGFjZSgiQHVuZGVyc2NvcmVAIiwgIl8iKQorICAgICAgICAgICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoIkBjbG9zZWJyYWNlQCIsICJdIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAb3BlbmJyYWNlQCIsICJbIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAdGFiQCIsICJcdCIpCisgICAgICAgICAgICAgICAgZmlsZSA9IGZpbGUucmVwbGFjZSgiQHNwYWNlQCIsICIgIikKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCJAYXRAIiwgIkAiKQorICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoJyInICsgcGtnZCArIGZpbGUgKyAnIiA6ICInKQorICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgICAgICB2ZXIgPSBkZXBlbmRzX2RpY3RbZGVwXQorICAgICAgICAgICAgICAgICAgICBpZiBkZXAgYW5kIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCIoIiwiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlciA9IHZlci5yZXBsYWNlKCIpIiwiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoZGVwICsgIiAiICsgdmVyICsgIiAiKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZShkZXAgKyAiICIpCisgICAgICAgICAgICAgICAgb3V0ZmlsZS53cml0ZSgnIixcbicpCisgICAgICAgIG91dGZpbGUud3JpdGUoJ31cblxuJykKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiaW1wb3J0IHN5c1xuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgid2hpbGUgMTpcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0bGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLnN0cmlwKClcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0aWYgbm90IGxpbmU6XG4iKQorICAgICAgICBvdXRmaWxlLndyaXRlKCJcdFx0c3lzLmV4aXQoMClcbiIpCisgICAgICAgIG91dGZpbGUud3JpdGUoIlx0aWYgbGluZSBpbiBkZXBzOlxuIikKKyAgICAgICAgb3V0ZmlsZS53cml0ZSgiXHRcdHByaW50KGRlcHNbbGluZV0gKyAnXFxuJylcbiIpCisKKyAgICAjIE9FLWNvcmUgZGVwZW5kZW5jaWVzIGEuay5hLiBSUE0gcmVxdWlyZXMKKyAgICBvdXRkZXBlbmRzID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnJlcXVpcmVzIgorCisgICAgdHJ5OgorICAgICAgICBkZXBlbmRzZmlsZSA9IG9wZW4ob3V0ZGVwZW5kcywgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgIGR1bXBfZmlsZXJkZXBzKCdSREVQRU5EUycsIGRlcGVuZHNmaWxlLCBkKQorCisgICAgZGVwZW5kc2ZpbGUuY2xvc2UoKQorICAgIG9zLmNobW9kKG91dGRlcGVuZHMsIDA3NTUpCisKKyAgICAjIE9FLWNvcmUgLyBSUE0gUHJvdmlkZXMKKyAgICBvdXRwcm92aWRlcyA9IHdvcmtkaXIgKyAiLyIgKyBzcmNuYW1lICsgIi5wcm92aWRlcyIKKworICAgIHRyeToKKyAgICAgICAgcHJvdmlkZXNmaWxlID0gb3BlbihvdXRwcm92aWRlcywgJ3cnKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCJ1bmFibGUgdG8gb3BlbiBzcGVjIGZpbGUgZm9yIHdyaXRpbmcuIikKKworICAgIGR1bXBfZmlsZXJkZXBzKCdSUFJPVklERVMnLCBwcm92aWRlc2ZpbGUsIGQpCisKKyAgICBwcm92aWRlc2ZpbGUuY2xvc2UoKQorICAgIG9zLmNobW9kKG91dHByb3ZpZGVzLCAwNzU1KQorCisgICAgcmV0dXJuIChvdXRkZXBlbmRzLCBvdXRwcm92aWRlcykKKworCitweXRob24gd3JpdGVfc3BlY2ZpbGUgKCkgeworICAgIGltcG9ydCBvZS5wYWNrYWdlZGF0YQorCisgICAgIyBhcHBlbmQgaW5mb3JtYXRpb24gZm9yIGxvZ3MgYW5kIHBhdGNoZXMgdG8gJXByZXAKKyAgICBkZWYgYWRkX3ByZXAoZCxzcGVjX2ZpbGVzX2JvdHRvbSk6CisgICAgICAgIGlmIGQuZ2V0VmFyRmxhZygnQVJDSElWRVJfTU9ERScsICdzcnBtJywgVHJ1ZSkgPT0gJzEnIGFuZCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdhcmNoaXZlcicsIGQpOgorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclJXByZXAgLW4gJXMnICUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkgKQorICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uYXBwZW5kKCclcycgJSAiZWNobyBcImluY2x1ZGUgbG9ncyBhbmQgcGF0Y2hlcywgUGxlYXNlIGNoZWNrIHRoZW0gaW4gU09VUkNFU1wiIikKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJykKKworICAgICMgYXBwZW5kIHRoZSBuYW1lIG9mIHRhcmJhbGwgdG8ga2V5IHdvcmQgJ1NPVVJDRScgaW4geHh4LnNwZWMuCisgICAgZGVmIHRhaWxfc291cmNlKGQpOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgICAgIGFyX291dGRpciA9IGQuZ2V0VmFyKCdBUkNISVZFUl9PVVRESVInLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyX291dGRpcik6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzb3VyY2VfbGlzdCA9IG9zLmxpc3RkaXIoYXJfb3V0ZGlyKQorICAgICAgICAgICAgc291cmNlX251bWJlciA9IDAKKyAgICAgICAgICAgIGZvciBzb3VyY2UgaW4gc291cmNlX2xpc3Q6CisgICAgICAgICAgICAgICAgIyBUaGUgcnBtYnVpbGQgZG9lc24ndCBuZWVkIHRoZSByb290IHBlcm1pc3Npb24sIGJ1dCBpdCBuZWVkcworICAgICAgICAgICAgICAgICMgdG8ga25vdyB0aGUgZmlsZSdzIHVzZXIgYW5kIGdyb3VwIG5hbWUsIHRoZSBvbmx5IHVzZXIgYW5kCisgICAgICAgICAgICAgICAgIyBncm91cCBpbiBmYWtlcm9vdCBpcyAicm9vdCIgd2hlbiB3b3JraW5nIGluIGZha2Vyb290LgorICAgICAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4oYXJfb3V0ZGlyLCBzb3VyY2UpCisgICAgICAgICAgICAgICAgb3MuY2hvd24oZiwgMCwgMCkKKyAgICAgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1NvdXJjZSVzOiAlcycgJSAoc291cmNlX251bWJlciwgc291cmNlKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbnVtYmVyICs9IDEKKyAgICAjIFdlIG5lZWQgYSBzaW1wbGUgd2F5IHRvIHJlbW92ZSB0aGUgTUxQUkVGSVggZnJvbSB0aGUgcGFja2FnZSBuYW1lLAorICAgICMgYW5kIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24uLi4KKyAgICBkZWYgc3RyaXBfbXVsdGlsaWIobmFtZSwgZCk6CisgICAgICAgIG11bHRpbGlicyA9IGQuZ2V0VmFyKCdNVUxUSUxJQlMnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgZXh0IGluIG11bHRpbGlicy5zcGxpdCgpOgorICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgICAgICBpZiBsZW4oZWV4dCkgPiAxIGFuZCBlZXh0WzBdID09ICdtdWx0aWxpYicgYW5kIG5hbWUgYW5kIG5hbWUuZmluZChlZXh0WzFdICsgJy0nKSA+PSAwOgorICAgICAgICAgICAgICAgIG5hbWUgPSAiIi5qb2luKG5hbWUuc3BsaXQoZWV4dFsxXSArICctJykpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgc3RyaXBfbXVsdGlsaWJfZGVwcyhkZXBzLCBkKToKKyAgICAgICAgZGVwZW5kcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBzIG9yICIiKQorICAgICAgICBuZXdkZXBzID0ge30KKyAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzOgorICAgICAgICAgICAgbmV3ZGVwc1tzdHJpcF9tdWx0aWxpYihkZXAsIGQpXSA9IGRlcGVuZHNbZGVwXQorICAgICAgICByZXR1cm4gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHMpCisKKyMgICAgICAgIG1sID0gZC5nZXRWYXIoIk1MUFJFRklYIiwgVHJ1ZSkKKyMgICAgICAgIGlmIG1sIGFuZCBuYW1lIGFuZCBsZW4obWwpICE9IDAgYW5kIG5hbWUuZmluZChtbCkgPT0gMDoKKyMgICAgICAgICAgICByZXR1cm4gbWwuam9pbihuYW1lLnNwbGl0KG1sLCAxKVsxOl0pCisjICAgICAgICByZXR1cm4gbmFtZQorCisgICAgIyBJbiBSUE0sIGRlcGVuZGVuY2llcyBhcmUgb2YgdGhlIGZvcm1hdDogcGtnIDw+PSBFcG9jaDpWZXJzaW9uLVJlbGVhc2UKKyAgICAjIFRoaXMgZm9ybWF0IGlzIHNpbWlsYXIgdG8gT0UsIGhvd2V2ZXIgdGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBvbiB0aGUKKyAgICAjIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgaW4gYSBmaWVsZC4gIEluIHRoZSBWZXJzaW9uIGZpZWxkLCAiLSIKKyAgICAjIGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkLiAgIi0iIGlzIGFsbG93ZWQgaW4gdGhlIFJlbGVhc2UgZmllbGQuCisgICAgIworICAgICMgV2UgdHJhbnNsYXRlIHRoZSAiLSIgaW4gdGhlIHZlcnNpb24gdG8gYSAiKyIsIGJ5IGxvYWRpbmcgdGhlIFBLR1YKKyAgICAjIGZyb20gdGhlIGRlcGVuZGVudCByZWNpcGUsIHJlcGxhY2luZyB0aGUgLSB3aXRoIGEgKywgYW5kIHRoZW4gdXNpbmcKKyAgICAjIHRoYXQgdmFsdWUgdG8gZG8gYSByZXBsYWNlIGluc2lkZSBvZiB0aGlzIHJlY2lwZSdzIGRlcGVuZGVuY2llcy4KKyAgICAjIFRoaXMgcHJlc2VydmVzIHRoZSAiLSIgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHZlcnNpb24gYW5kIHJlbGVhc2UsIGFzCisgICAgIyB3ZWxsIGFzIGFueSAiLSIgY2hhcmFjdGVycyBpbnNpZGUgb2YgdGhlIHJlbGVhc2UgZmllbGQuCisgICAgIworICAgICMgQWxsIG9mIHRoaXMgaGFzIHRvIGhhcHBlbiBCRUZPUkUgdGhlIG1hcHBpbmdfcmVuYW1lX2hvb2sgYXMKKyAgICAjIGFmdGVyIHJlbmFtaW5nIHdlIGNhbm5vdCBsb29rIHVwIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIHBhY2thZ2VkYXRhCisgICAgIyBzdG9yZS4KKyAgICBkZWYgdHJhbnNsYXRlX3ZlcnModmFybmFtZSwgZCk6CisgICAgICAgIGRlcGVuZHMgPSBkLmdldFZhcih2YXJuYW1lLCBUcnVlKQorICAgICAgICBpZiBkZXBlbmRzOgorICAgICAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcGVuZHMpCisgICAgICAgICAgICBuZXdkZXBzX2RpY3QgPSB7fQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICAgICAgdmVybGlzdCA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHZlciBpbiBkZXBlbmRzX2RpY3RbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgaWYgJy0nIGluIHZlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmQgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGFfZGljdChkZXAsIGQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnUEtHVicgaW4gc3ViZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdiA9IHN1YmRbJ1BWJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2d2ID0gc3ViZFsnUEtHViddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcHYgPSBwa2d2LnJlcGxhY2UoJy0nLCAnKycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UocHYsIHJlcHB2KS5yZXBsYWNlKHBrZ3YsIHJlcHB2KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ1BLR1InIGluIHN1YmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgUEtHUiByYXRoZXIgdGhhbiBQUiBpbiB2ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwciA9ICctJyArIHN1YmRbJ1BSJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dyID0gJy0nICsgc3ViZFsnUEtHUiddCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnciBub3QgaW4gdmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZShwciwgcGtncikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcmxpc3QuYXBwZW5kKHZlcikKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcmxpc3QuYXBwZW5kKHZlcikKKyAgICAgICAgICAgICAgICBuZXdkZXBzX2RpY3RbZGVwXSA9IHZlcmxpc3QKKyAgICAgICAgICAgIGRlcGVuZHMgPSBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwc19kaWN0KQorICAgICAgICAgICAgZC5zZXRWYXIodmFybmFtZSwgZGVwZW5kcy5zdHJpcCgpKQorCisgICAgIyBXZSBuZWVkIHRvIGNoYW5nZSB0aGUgc3R5bGUgdGhlIGRlcGVuZGVuY3kgZnJvbSBCQiB0byBSUE0KKyAgICAjIFRoaXMgbmVlZHMgdG8gaGFwcGVuIEFGVEVSIHRoZSBtYXBwaW5nX3JlbmFtZV9ob29rCisgICAgZGVmIHByaW50X2RlcHModmFyaWFibGUsIHRhZywgYXJyYXksIGQpOgorICAgICAgICBkZXBlbmRzID0gdmFyaWFibGUKKyAgICAgICAgaWYgZGVwZW5kczoKKyAgICAgICAgICAgIGRlcGVuZHNfZGljdCA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihkZXBlbmRzKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBlbmRzX2RpY3Q6CisgICAgICAgICAgICAgICAgZm9yIHZlciBpbiBkZXBlbmRzX2RpY3RbZGVwXToKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJygnLCAnJykKKyAgICAgICAgICAgICAgICAgICAgdmVyID0gdmVyLnJlcGxhY2UoJyknLCAnJykKKyAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXBwZW5kKCIlczogJXMgJXMiICUgKHRhZywgZGVwLCB2ZXIpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsZW4oZGVwZW5kc19kaWN0W2RlcF0pOgorICAgICAgICAgICAgICAgICAgICBhcnJheS5hcHBlbmQoIiVzOiAlcyIgJSAodGFnLCBkZXApKQorCisgICAgZGVmIHdhbGtfZmlsZXMod2Fsa3BhdGgsIHRhcmdldCwgY29uZmZpbGVzLCBkaXJmaWxlcyk6CisgICAgICAgICMgV2UgY2FuIHJhY2UgYWdhaW5zdCB0aGUgaXBrL2RlYiBiYWNrZW5kcyB3aGljaCBjcmVhdGUgQ09OVFJPTCBvciBERUJJQU4gZGlyZWN0b3JpZXMKKyAgICAgICAgIyB3aGVuIHBhY2thZ2luZy4gV2UganVzdCBpZ25vcmUgdGhlc2UgZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgaW4gCisgICAgICAgICMgcGFja2FnZXMtc3BsaXQvIGFuZCBub3QgcGFja2FnZS8KKyAgICAgICAgIyBXZSBoYXZlIHRoZSBvZGQgc2l0dWF0aW9uIHdoZXJlIHRoZSBDT05UUk9ML0RFQklBTiBkaXJlY3RvcnkgY2FuIGJlIHJlbW92ZWQgaW4gdGhlIG1pZGRsZSBvZgorICAgICAgICAjIG9mIHRoZSB3YWxrLCB0aGUgaXNkaXIoKSB0ZXN0IHdvdWxkIHRoZW4gZmFpbCBhbmQgdGhlIHdhbGsgY29kZSB3b3VsZCBhc3N1bWUgaXRzIGEgZmlsZQorICAgICAgICAjIGhlbmNlIHdlIGNoZWNrIGZvciB0aGUgbmFtZXMgaW4gZmlsZXMgdG9vLgorICAgICAgICBmb3Igcm9vdHBhdGgsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod2Fsa3BhdGgpOgorICAgICAgICAgICAgcGF0aCA9IHJvb3RwYXRoLnJlcGxhY2Uod2Fsa3BhdGgsICIiKQorICAgICAgICAgICAgaWYgcGF0aC5lbmRzd2l0aCgiREVCSUFOIikgb3IgcGF0aC5lbmRzd2l0aCgiQ09OVFJPTCIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCIlIiwgIiUlJSUlJSUlIikKKworICAgICAgICAgICAgIyBUcmVhdCBhbGwgc3ltbGlua3MgdG8gZGlyZWN0b3JpZXMgYXMgbm9ybWFsIGZpbGVzLgorICAgICAgICAgICAgIyBvcy53YWxrKCkgbGlzdHMgdGhlbSBhcyBkaXJlY3Rvcmllcy4KKyAgICAgICAgICAgIGRlZiBtb3ZlX3RvX2ZpbGVzKGRpcik6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKHJvb3RwYXRoLCBkaXIpKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGRpcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRpcnNbOl0gPSBbZGlyIGZvciBkaXIgaW4gZGlycyBpZiBub3QgbW92ZV90b19maWxlcyhkaXIpXQorCisgICAgICAgICAgICAjIERpcmVjdG9yeSBoYW5kbGluZyBjYW4gaGFwcGVuIGluIHR3byB3YXlzLCBlaXRoZXIgRElSRklMRVMgaXMgbm90IHNldCBhdCBhbGwKKyAgICAgICAgICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBmYWxsIGJhY2sgdG8gdGhlIG9sZGVyIGJlaGF2aW91ciBvZiBwYWNrYWdlcyBvd25pbmcgYWxsIHRoZWlyCisgICAgICAgICAgICAjIGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpZiBkaXJmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZGlyID09ICJDT05UUk9MIiBvciBkaXIgPT0gIkRFQklBTiI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBkaXIgPSBkaXIucmVwbGFjZSgiJSIsICIlJSUlJSUlJSIpCisgICAgICAgICAgICAgICAgICAgICMgQWxsIHBhY2thZ2VzIG93biB0aGUgZGlyZWN0b3JpZXMgdGhlaXIgZmlsZXMgYXJlIGluLi4uCisgICAgICAgICAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoJyVkaXIgIicgKyBwYXRoICsgJy8nICsgZGlyICsgJyInKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIHBhY2thZ2VzIG93biBvbmx5IGVtcHR5IGRpcmVjdG9yaWVzIG9yIGV4cGxpY3QgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICMgVGhpcyB3aWxsIHByZXZlbnQgdGhlIG92ZXJsYXBwaW5nIG9mIHNlY3VyaXR5IHBlcm1pc3Npb24uCisgICAgICAgICAgICAgICAgaWYgcGF0aCBhbmQgbm90IGZpbGVzIGFuZCBub3QgZGlyczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnJWRpciAiJyArIHBhdGggKyAnIicpCisgICAgICAgICAgICAgICAgZWxpZiBwYXRoIGFuZCBwYXRoIGluIGRpcmZpbGVzOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclZGlyICInICsgcGF0aCArICciJykKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlsZSA9PSAiQ09OVFJPTCIgb3IgZmlsZSA9PSAiREVCSUFOIjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmaWxlID0gZmlsZS5yZXBsYWNlKCIlIiwgIiUlJSUlJSUlIikKKyAgICAgICAgICAgICAgICBpZiBjb25mZmlsZXMuY291bnQocGF0aCArICcvJyArIGZpbGUpOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYXBwZW5kKCclY29uZmlnICInICsgcGF0aCArICcvJyArIGZpbGUgKyAnIicpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZCgnIicgKyBwYXRoICsgJy8nICsgZmlsZSArICciJykKKworICAgICMgUHJldmVudCB0aGUgcHJlcm0vcG9zdHJtIHNjcmlwdHMgZnJvbSBiZWluZyBydW4gZHVyaW5nIGFuIHVwZ3JhZGUKKyAgICBkZWYgd3JhcF91bmluc3RhbGwoc2NyaXB0dmFyKToKKyAgICAgICAgc2NyID0gc2NyaXB0dmFyLnN0cmlwKCkKKyAgICAgICAgaWYgc2NyLnN0YXJ0c3dpdGgoIiMhIik6CisgICAgICAgICAgICBwb3MgPSBzY3IuZmluZCgiXG4iKSArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBvcyA9IDAKKyAgICAgICAgc2NyID0gc2NyWzpwb3NdICsgJ2lmIFsgIiQxIiA9ICIwIiBdIDsgdGhlblxuJyArIHNjcltwb3M6XSArICdcbmZpJworICAgICAgICByZXR1cm4gc2NyCisKKyAgICBkZWYgZ2V0X3BlcmZpbGUodmFybmFtZSwgcGtnLCBkKToKKyAgICAgICAgZGVwcyA9IFtdCisgICAgICAgIGRlcGVuZHNmbGlzdF9rZXkgPSAnRklMRScgKyB2YXJuYW1lICsgJ0ZMSVNUJyArICJfIiArIHBrZworICAgICAgICBkZXBlbmRzZmxpc3QgPSAoZC5nZXRWYXIoZGVwZW5kc2ZsaXN0X2tleSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgIGZvciBkZmlsZSBpbiBkZXBlbmRzZmxpc3Quc3BsaXQoKToKKyAgICAgICAgICAgIGtleSA9ICJGSUxFIiArIHZhcm5hbWUgKyAiXyIgKyBkZmlsZSArICJfIiArIHBrZworICAgICAgICAgICAgZGVwZW5kcyA9IGQuZ2V0VmFyKGtleSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGRlcGVuZHM6CisgICAgICAgICAgICAgICAgZGVwcy5hcHBlbmQoZGVwZW5kcykKKyAgICAgICAgcmV0dXJuICIgIi5qb2luKGRlcHMpCisKKyAgICBkZWYgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGUsIHRleHQpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkIHRoZSBkZXNjcmlwdGlvbiB0byB0aGUgc3BlYyBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IHRleHR3cmFwCisgICAgICAgIGRlZGVudF90ZXh0ID0gdGV4dHdyYXAuZGVkZW50KHRleHQpLnN0cmlwKCkKKyAgICAgICAgIyBCaXRiYWtlIHNhdmVzICJcbiIgYXMgIlxcbiIKKyAgICAgICAgaWYgJ1xcbicgaW4gZGVkZW50X3RleHQ6CisgICAgICAgICAgICBmb3IgdCBpbiBkZWRlbnRfdGV4dC5zcGxpdCgnXFxuJyk6CisgICAgICAgICAgICAgICAgc3BlY19wcmVhbWJsZS5hcHBlbmQodC5zdHJpcCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZS5hcHBlbmQoJyVzJyAlIHRleHR3cmFwLmZpbGwoZGVkZW50X3RleHQsIHdpZHRoPTc1KSkKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBpZiBub3QgcGFja2FnZXMgb3IgcGFja2FnZXMgPT0gJyc6CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBwYWNrYWdlczsgbm90aGluZyB0byBkbyIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKyAgICBpZiBub3QgcGtnZGVzdDoKKyAgICAgICAgYmIuZmF0YWwoIk5vIFBLR0RFU1QiKQorCisgICAgb3V0c3BlY2ZpbGUgPSBkLmdldFZhcignT1VUU1BFQ0ZJTEUnLCBUcnVlKQorICAgIGlmIG5vdCBvdXRzcGVjZmlsZToKKyAgICAgICAgYmIuZmF0YWwoIk5vIE9VVFNQRUNGSUxFIikKKworICAgICMgQ29uc3RydWN0IHRoZSBTUEVDIGZpbGUuLi4KKyAgICBzcmNuYW1lICAgID0gc3RyaXBfbXVsdGlsaWIoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGQpCisgICAgc3Jjc3VtbWFyeSA9IChkLmdldFZhcignU1VNTUFSWScsIFRydWUpIG9yIGQuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKKyAgICBzcmN2ZXJzaW9uID0gZC5nZXRWYXIoJ1BLR1YnLCBUcnVlKS5yZXBsYWNlKCctJywgJysnKQorICAgIHNyY3JlbGVhc2UgPSBkLmdldFZhcignUEtHUicsIFRydWUpCisgICAgc3JjZXBvY2ggICA9IChkLmdldFZhcignUEtHRScsIFRydWUpIG9yICIiKQorICAgIHNyY2xpY2Vuc2UgPSBkLmdldFZhcignTElDRU5TRScsIFRydWUpCisgICAgc3Jjc2VjdGlvbiA9IGQuZ2V0VmFyKCdTRUNUSU9OJywgVHJ1ZSkKKyAgICBzcmNtYWludGFpbmVyICA9IGQuZ2V0VmFyKCdNQUlOVEFJTkVSJywgVHJ1ZSkKKyAgICBzcmNob21lcGFnZSAgICA9IGQuZ2V0VmFyKCdIT01FUEFHRScsIFRydWUpCisgICAgc3JjZGVzY3JpcHRpb24gPSBkLmdldFZhcignREVTQ1JJUFRJT04nLCBUcnVlKSBvciAiLiIKKyAgICBzcmNjdXN0b210YWdzY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJycG0iLCBkKQorCisgICAgc3JjZGVwZW5kcyAgICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGQuZ2V0VmFyKCdERVBFTkRTJywgVHJ1ZSksIGQpCisgICAgc3JjcmRlcGVuZHMgICAgPSBbXQorICAgIHNyY3JyZWNvbW1lbmRzID0gW10KKyAgICBzcmNyc3VnZ2VzdHMgICA9IFtdCisgICAgc3JjcnByb3ZpZGVzICAgPSBbXQorICAgIHNyY3JyZXBsYWNlcyAgID0gW10KKyAgICBzcmNyY29uZmxpY3RzICA9IFtdCisgICAgc3Jjcm9ic29sZXRlcyAgPSBbXQorCisgICAgc3JjcnByZWluc3QgID0gW10KKyAgICBzcmNycG9zdGluc3QgPSBbXQorICAgIHNyY3JwcmVybSAgICA9IFtdCisgICAgc3JjcnBvc3RybSAgID0gW10KKworICAgIHNwZWNfcHJlYW1ibGVfdG9wID0gW10KKyAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbSA9IFtdCisKKyAgICBzcGVjX3NjcmlwdGxldHNfdG9wID0gW10KKyAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tID0gW10KKworICAgIHNwZWNfZmlsZXNfdG9wID0gW10KKyAgICBzcGVjX2ZpbGVzX2JvdHRvbSA9IFtdCisKKyAgICBwZXJmaWxlZGVwcyA9IChkLmdldFZhcigiTUVSR0VQRVJGSUxFREVQUyIsIFRydWUpIG9yICIwIikgPT0gIjAiCisgICAgZXh0cmFfcGtnZGF0YSA9IChkLmdldFZhcigiUlBNX0VYVFJBX1BLR0RBVEEiLCBUcnVlKSBvciAiMCIpID09ICIxIgorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKworICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUk9PVCcsICcnKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdST09UXyVzJyAlIHBrZywgcm9vdCkKKyAgICAgICAgcGtnbmFtZSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BLR18lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2duYW1lOgorICAgICAgICAgICAgcGtnbmFtZSA9IHBrZworICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQS0cnLCBwa2duYW1lKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGQuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOiIgKyBwa2cpCisKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgY29uZmZpbGVzID0gZ2V0X2NvbmZmaWxlcyhwa2csIGQpCisgICAgICAgIGRpcmZpbGVzID0gbG9jYWxkYXRhLmdldFZhcignRElSRklMRVMnLCBUcnVlKQorICAgICAgICBpZiBkaXJmaWxlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRpcmZpbGVzID0gZGlyZmlsZXMuc3BsaXQoKQorCisgICAgICAgIHNwbGl0bmFtZSAgICA9IHN0cmlwX211bHRpbGliKHBrZ25hbWUsIGQpCisKKyAgICAgICAgc3BsaXRzdW1tYXJ5ID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1NVTU1BUlknLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKKyAgICAgICAgc3BsaXR2ZXJzaW9uID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1YnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICcrJykKKyAgICAgICAgc3BsaXRyZWxlYXNlID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1InLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRlcG9jaCAgID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1BLR0UnLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRsaWNlbnNlID0gKGxvY2FsZGF0YS5nZXRWYXIoJ0xJQ0VOU0UnLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRzZWN0aW9uID0gKGxvY2FsZGF0YS5nZXRWYXIoJ1NFQ1RJT04nLCBUcnVlKSBvciAiIikKKyAgICAgICAgc3BsaXRkZXNjcmlwdGlvbiA9IChsb2NhbGRhdGEuZ2V0VmFyKCdERVNDUklQVElPTicsIFRydWUpIG9yICIuIikKKyAgICAgICAgc3BsaXRjdXN0b210YWdzY2h1bmsgPSBnZXRfcGFja2FnZV9hZGRpdGlvbmFsX21ldGFkYXRhKCJycG0iLCBsb2NhbGRhdGEpCisKKyAgICAgICAgdHJhbnNsYXRlX3ZlcnMoJ1JERVBFTkRTJywgbG9jYWxkYXRhKQorICAgICAgICB0cmFuc2xhdGVfdmVycygnUlJFQ09NTUVORFMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSU1VHR0VTVFMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSUFJPVklERVMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSUkVQTEFDRVMnLCBsb2NhbGRhdGEpCisgICAgICAgIHRyYW5zbGF0ZV92ZXJzKCdSQ09ORkxJQ1RTJywgbG9jYWxkYXRhKQorCisgICAgICAgICMgTWFwIHRoZSBkZXBlbmRlbmNpZXMgaW50byB0aGVpciBmaW5hbCBmb3JtCisgICAgICAgIG1hcHBpbmdfcmVuYW1lX2hvb2sobG9jYWxkYXRhKQorCisgICAgICAgIHNwbGl0cmRlcGVuZHMgICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JERVBFTkRTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnJlY29tbWVuZHMgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JSRUNPTU1FTkRTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cnN1Z2dlc3RzICAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JTVUdHRVNUUycsIFRydWUpLCBkKQorICAgICAgICBzcGxpdHJwcm92aWRlcyAgID0gc3RyaXBfbXVsdGlsaWJfZGVwcyhsb2NhbGRhdGEuZ2V0VmFyKCdSUFJPVklERVMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRycmVwbGFjZXMgICA9IHN0cmlwX211bHRpbGliX2RlcHMobG9jYWxkYXRhLmdldFZhcignUlJFUExBQ0VTJywgVHJ1ZSksIGQpCisgICAgICAgIHNwbGl0cmNvbmZsaWN0cyAgPSBzdHJpcF9tdWx0aWxpYl9kZXBzKGxvY2FsZGF0YS5nZXRWYXIoJ1JDT05GTElDVFMnLCBUcnVlKSwgZCkKKyAgICAgICAgc3BsaXRyb2Jzb2xldGVzICA9IFtdCisKKyAgICAgICAgc3BsaXRycHJlaW5zdCAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIHNwbGl0cnBvc3RpbnN0ID0gbG9jYWxkYXRhLmdldFZhcigncGtnX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgc3BsaXRycHJlcm0gICAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdwa2dfcHJlcm0nLCBUcnVlKQorICAgICAgICBzcGxpdHJwb3N0cm0gICA9IGxvY2FsZGF0YS5nZXRWYXIoJ3BrZ19wb3N0cm0nLCBUcnVlKQorCisKKyAgICAgICAgaWYgbm90IHBlcmZpbGVkZXBzOgorICAgICAgICAgICAgIyBBZGQgaW4gc3VtbWFyeSBvZiBwZXIgZmlsZSBkZXBlbmRlbmNpZXMKKyAgICAgICAgICAgIHNwbGl0cmRlcGVuZHMgPSBzcGxpdHJkZXBlbmRzICsgIiAiICsgZ2V0X3BlcmZpbGUoJ1JERVBFTkRTJywgcGtnLCBkKQorICAgICAgICAgICAgc3BsaXRycHJvdmlkZXMgPSBzcGxpdHJwcm92aWRlcyArICIgIiArIGdldF9wZXJmaWxlKCdSUFJPVklERVMnLCBwa2csIGQpCisKKyAgICAgICAgIyBHYXRoZXIgc3BlY2lhbCBzcmMvZmlyc3QgcGFja2FnZSBkYXRhCisgICAgICAgIGlmIHNyY25hbWUgPT0gc3BsaXRuYW1lOgorICAgICAgICAgICAgc3JjcmRlcGVuZHMgICAgPSBzcGxpdHJkZXBlbmRzCisgICAgICAgICAgICBzcmNycmVjb21tZW5kcyA9IHNwbGl0cnJlY29tbWVuZHMKKyAgICAgICAgICAgIHNyY3JzdWdnZXN0cyAgID0gc3BsaXRyc3VnZ2VzdHMKKyAgICAgICAgICAgIHNyY3Jwcm92aWRlcyAgID0gc3BsaXRycHJvdmlkZXMKKyAgICAgICAgICAgIHNyY3JyZXBsYWNlcyAgID0gc3BsaXRycmVwbGFjZXMKKyAgICAgICAgICAgIHNyY3Jjb25mbGljdHMgID0gc3BsaXRyY29uZmxpY3RzCisKKyAgICAgICAgICAgIHNyY3JwcmVpbnN0ICAgID0gc3BsaXRycHJlaW5zdAorICAgICAgICAgICAgc3JjcnBvc3RpbnN0ICAgPSBzcGxpdHJwb3N0aW5zdAorICAgICAgICAgICAgc3JjcnByZXJtICAgICAgPSBzcGxpdHJwcmVybQorICAgICAgICAgICAgc3JjcnBvc3RybSAgICAgPSBzcGxpdHJwb3N0cm0KKworICAgICAgICAgICAgZmlsZV9saXN0ID0gW10KKyAgICAgICAgICAgIHdhbGtfZmlsZXMocm9vdCwgZmlsZV9saXN0LCBjb25mZmlsZXMsIGRpcmZpbGVzKQorICAgICAgICAgICAgaWYgbm90IGZpbGVfbGlzdCBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGluZyBSUE0gcGFja2FnZSBmb3IgJXMiICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmFwcGVuZCgnJWZpbGVzJykKKyAgICAgICAgICAgICAgICBpZiBleHRyYV9wa2dkYXRhOgorICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX3JwbV9leHRyYV9wa2dkYXRhKHNwbGl0bmFtZSwgc3BlY19maWxlc190b3AsIGxvY2FsZGF0YSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJyVkZWZhdHRyKC0sLSwtLC0pJykKKyAgICAgICAgICAgICAgICBpZiBmaWxlX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNwZWNfZmlsZXNfdG9wLmV4dGVuZChmaWxlX2xpc3QpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgRU1QVFkgUlBNIFBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgICAgICBzcGVjX2ZpbGVzX3RvcC5hcHBlbmQoJycpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgUHJvY2VzcyBzdWJwYWNrYWdlIGRhdGEKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCclJXBhY2thZ2UgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1N1bW1hcnk6ICVzJyAlIHNwbGl0c3VtbWFyeSkKKyAgICAgICAgaWYgc3JjdmVyc2lvbiAhPSBzcGxpdHZlcnNpb246CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1ZlcnNpb246ICVzJyAlIHNwbGl0dmVyc2lvbikKKyAgICAgICAgaWYgc3JjcmVsZWFzZSAhPSBzcGxpdHJlbGVhc2U6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJ1JlbGVhc2U6ICVzJyAlIHNwbGl0cmVsZWFzZSkKKyAgICAgICAgaWYgc3JjZXBvY2ggIT0gc3BsaXRlcG9jaDoKKyAgICAgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnRXBvY2g6ICVzJyAlIHNwbGl0ZXBvY2gpCisgICAgICAgIGlmIHNyY2xpY2Vuc2UgIT0gc3BsaXRsaWNlbnNlOgorICAgICAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCdMaWNlbnNlOiAlcycgJSBzcGxpdGxpY2Vuc2UpCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnR3JvdXA6ICVzJyAlIHNwbGl0c2VjdGlvbikKKworICAgICAgICBpZiBzcmNjdXN0b210YWdzY2h1bmsgIT0gc3BsaXRjdXN0b210YWdzY2h1bms6CisgICAgICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoc3BsaXRjdXN0b210YWdzY2h1bmspCisKKyAgICAgICAgIyBSZXBsYWNlcyA9PSBPYnNvbGV0ZXMgJiYgUHJvdmlkZXMKKyAgICAgICAgcm9ic29sZXRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJvYnNvbGV0ZXMgb3IgIiIpCisgICAgICAgIHJwcm92aWRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcGxpdHJwcm92aWRlcyBvciAiIikKKyAgICAgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNwbGl0cnJlcGxhY2VzIG9yICIiKQorICAgICAgICBmb3IgZGVwIGluIHJyZXBsYWNlczoKKyAgICAgICAgICAgIGlmIG5vdCBkZXAgaW4gcm9ic29sZXRlczoKKyAgICAgICAgICAgICAgICByb2Jzb2xldGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgcnByb3ZpZGVzW2RlcF0gPSBycmVwbGFjZXNbZGVwXQorICAgICAgICBzcGxpdHJvYnNvbGV0ZXMgPSBiYi51dGlscy5qb2luX2RlcHMocm9ic29sZXRlcywgY29tbWFzZXA9RmFsc2UpCisgICAgICAgIHNwbGl0cnByb3ZpZGVzID0gYmIudXRpbHMuam9pbl9kZXBzKHJwcm92aWRlcywgY29tbWFzZXA9RmFsc2UpCisKKyAgICAgICAgcHJpbnRfZGVwcyhzcGxpdHJkZXBlbmRzLCAiUmVxdWlyZXMiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycHJlaW5zdDoKKyAgICAgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzKHByZSkiLCBzcGVjX3ByZWFtYmxlX2JvdHRvbSwgZCkKKyAgICAgICAgaWYgc3BsaXRycG9zdGluc3Q6CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0KSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBpZiBzcGxpdHJwcmVybToKKyAgICAgICAgICAgIHByaW50X2RlcHMoc3BsaXRyZGVwZW5kcywgIlJlcXVpcmVzKHByZXVuKSIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBpZiBzcGxpdHJwb3N0cm06CisgICAgICAgICAgICBwcmludF9kZXBzKHNwbGl0cmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0dW4pIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisKKyAgICAgICAgIyBTdWdnZXN0cyBpbiBSUE0gYXJlIGxpa2UgcmVjb21tZW5kcyBpbiBPRS1jb3JlIQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnJlY29tbWVuZHMsICJTdWdnZXN0cyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICAjIFdoaWxlIHRoZXJlIGlzIG5vIGFuYWxvZyBmb3Igc3VnZ2VzdHMuLi4gKFNvIGNhbGwgdGhlbSByZWNvbW1lbmRzIGZvciBub3cpCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyc3VnZ2VzdHMsICAiUmVjb21tZW5kcyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorICAgICAgICBwcmludF9kZXBzKHNwbGl0cnByb3ZpZGVzLCAgIlByb3ZpZGVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyb2Jzb2xldGVzLCAiT2Jzb2xldGVzIiwgc3BlY19wcmVhbWJsZV9ib3R0b20sIGQpCisKKyAgICAgICAgIyBjb25mbGljdHMgY2FuIG5vdCBiZSBpbiBhIHByb3ZpZGUhICBXZSB3aWxsIG5lZWQgdG8gZmlsdGVyIGl0LgorICAgICAgICBpZiBzcGxpdHJjb25mbGljdHM6CisgICAgICAgICAgICBkZXBlbmRzX2RpY3QgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoc3BsaXRyY29uZmxpY3RzKQorICAgICAgICAgICAgbmV3ZGVwc19kaWN0ID0ge30KKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgICAgIGlmIGRlcCBub3QgaW4gc3BsaXRycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgICAgIG5ld2RlcHNfZGljdFtkZXBdID0gZGVwZW5kc19kaWN0W2RlcF0KKyAgICAgICAgICAgIGlmIG5ld2RlcHNfZGljdDoKKyAgICAgICAgICAgICAgICBzcGxpdHJjb25mbGljdHMgPSBiYi51dGlscy5qb2luX2RlcHMobmV3ZGVwc19kaWN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzcGxpdHJjb25mbGljdHMgPSAiIgorCisgICAgICAgIHByaW50X2RlcHMoc3BsaXRyY29uZmxpY3RzLCAgIkNvbmZsaWN0cyIsIHNwZWNfcHJlYW1ibGVfYm90dG9tLCBkKQorCisgICAgICAgIHNwZWNfcHJlYW1ibGVfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICBzcGVjX3ByZWFtYmxlX2JvdHRvbS5hcHBlbmQoJyUlZGVzY3JpcHRpb24gLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICBhcHBlbmRfZGVzY3JpcHRpb24oc3BlY19wcmVhbWJsZV9ib3R0b20sIHNwbGl0ZGVzY3JpcHRpb24pCisKKyAgICAgICAgc3BlY19wcmVhbWJsZV9ib3R0b20uYXBwZW5kKCcnKQorCisgICAgICAgICMgTm93IHByb2Nlc3Mgc2NyaXB0bGV0cworICAgICAgICBpZiBzcGxpdHJwcmVpbnN0OgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcHJlIC1uICVzJyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcjICVzIC0gcHJlaW5zdCcgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZChzcGxpdHJwcmVpbnN0KQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisgICAgICAgIGlmIHNwbGl0cnBvc3RpbnN0OgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcG9zdCAtbiAlcycgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnIyAlcyAtIHBvc3RpbnN0JyAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNwbGl0cnBvc3RpbnN0KQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisgICAgICAgIGlmIHNwbGl0cnByZXJtOgorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyUlcHJldW4gLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwcmVybScgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcGxpdHJwcmVybSkKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgICAgIHNwZWNfc2NyaXB0bGV0c19ib3R0b20uYXBwZW5kKCcnKQorICAgICAgICBpZiBzcGxpdHJwb3N0cm06CisgICAgICAgICAgICBzcGVjX3NjcmlwdGxldHNfYm90dG9tLmFwcGVuZCgnJSVwb3N0dW4gLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJyMgJXMgLSBwb3N0cm0nICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgc2NyaXB0dmFyID0gd3JhcF91bmluc3RhbGwoc3BsaXRycG9zdHJtKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoc2NyaXB0dmFyKQorICAgICAgICAgICAgc3BlY19zY3JpcHRsZXRzX2JvdHRvbS5hcHBlbmQoJycpCisKKyAgICAgICAgIyBOb3cgcHJvY2VzcyBmaWxlcworICAgICAgICBmaWxlX2xpc3QgPSBbXQorICAgICAgICB3YWxrX2ZpbGVzKHJvb3QsIGZpbGVfbGlzdCwgY29uZmZpbGVzLCBkaXJmaWxlcykKKyAgICAgICAgaWYgbm90IGZpbGVfbGlzdCBhbmQgbG9jYWxkYXRhLmdldFZhcignQUxMT1dfRU1QVFknLCBGYWxzZSkgIT0gIjEiOgorICAgICAgICAgICAgYmIubm90ZSgiTm90IGNyZWF0aW5nIGVtcHR5IFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGVjX2ZpbGVzX2JvdHRvbS5hcHBlbmQoJyUlZmlsZXMgLW4gJXMnICUgc3BsaXRuYW1lKQorICAgICAgICAgICAgaWYgZXh0cmFfcGtnZGF0YToKKyAgICAgICAgICAgICAgICBwYWNrYWdlX3JwbV9leHRyYV9wa2dkYXRhKHNwbGl0bmFtZSwgc3BlY19maWxlc19ib3R0b20sIGxvY2FsZGF0YSkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJWRlZmF0dHIoLSwtLC0sLSknKQorICAgICAgICAgICAgaWYgZmlsZV9saXN0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIFJQTSBwYWNrYWdlIGZvciAlcyIgJSBzcGxpdG5hbWUpCisgICAgICAgICAgICAgICAgc3BlY19maWxlc19ib3R0b20uZXh0ZW5kKGZpbGVfbGlzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgRU1QVFkgUlBNIFBhY2thZ2UgZm9yICVzIiAlIHNwbGl0bmFtZSkKKyAgICAgICAgICAgIHNwZWNfZmlsZXNfYm90dG9tLmFwcGVuZCgnJykKKworICAgICAgICBkZWwgbG9jYWxkYXRhCisgICAgCisgICAgYWRkX3ByZXAoZCxzcGVjX2ZpbGVzX2JvdHRvbSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1N1bW1hcnk6ICVzJyAlIHNyY3N1bW1hcnkpCisgICAgc3BlY19wcmVhbWJsZV90b3AuYXBwZW5kKCdOYW1lOiAlcycgJSBzcmNuYW1lKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnVmVyc2lvbjogJXMnICUgc3JjdmVyc2lvbikKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ1JlbGVhc2U6ICVzJyAlIHNyY3JlbGVhc2UpCisgICAgaWYgc3JjZXBvY2ggYW5kIHNyY2Vwb2NoLnN0cmlwKCkgIT0gIiI6CisgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnRXBvY2g6ICVzJyAlIHNyY2Vwb2NoKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnTGljZW5zZTogJXMnICUgc3JjbGljZW5zZSkKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJ0dyb3VwOiAlcycgJSBzcmNzZWN0aW9uKQorICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnUGFja2FnZXI6ICVzJyAlIHNyY21haW50YWluZXIpCisgICAgaWYgc3JjaG9tZXBhZ2U6CisgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnVVJMOiAlcycgJSBzcmNob21lcGFnZSkKKyAgICBpZiBzcmNjdXN0b210YWdzY2h1bms6CisgICAgICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZChzcmNjdXN0b210YWdzY2h1bmspCisgICAgdGFpbF9zb3VyY2UoZCkKKworICAgICMgUmVwbGFjZXMgPT0gT2Jzb2xldGVzICYmIFByb3ZpZGVzCisgICAgcm9ic29sZXRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNyb2Jzb2xldGVzIG9yICIiKQorICAgIHJwcm92aWRlcyA9IGJiLnV0aWxzLmV4cGxvZGVfZGVwX3ZlcnNpb25zMihzcmNycHJvdmlkZXMgb3IgIiIpCisgICAgcnJlcGxhY2VzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNyY3JyZXBsYWNlcyBvciAiIikKKyAgICBmb3IgZGVwIGluIHJyZXBsYWNlczoKKyAgICAgICAgaWYgbm90IGRlcCBpbiByb2Jzb2xldGVzOgorICAgICAgICAgICAgcm9ic29sZXRlc1tkZXBdID0gcnJlcGxhY2VzW2RlcF0KKyAgICAgICAgaWYgbm90IGRlcCBpbiBycHJvdmlkZXM6CisgICAgICAgICAgICBycHJvdmlkZXNbZGVwXSA9IHJyZXBsYWNlc1tkZXBdCisgICAgc3Jjcm9ic29sZXRlcyA9IGJiLnV0aWxzLmpvaW5fZGVwcyhyb2Jzb2xldGVzLCBjb21tYXNlcD1GYWxzZSkKKyAgICBzcmNycHJvdmlkZXMgPSBiYi51dGlscy5qb2luX2RlcHMocnByb3ZpZGVzLCBjb21tYXNlcD1GYWxzZSkKKworICAgIHByaW50X2RlcHMoc3JjZGVwZW5kcywgIkJ1aWxkUmVxdWlyZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3JkZXBlbmRzLCAiUmVxdWlyZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycHJlaW5zdDoKKyAgICAgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzKHByZSkiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBpZiBzcmNycG9zdGluc3Q6CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0KSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIGlmIHNyY3JwcmVybToKKyAgICAgICAgcHJpbnRfZGVwcyhzcmNyZGVwZW5kcywgIlJlcXVpcmVzKHByZXVuKSIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIGlmIHNyY3Jwb3N0cm06CisgICAgICAgIHByaW50X2RlcHMoc3JjcmRlcGVuZHMsICJSZXF1aXJlcyhwb3N0dW4pIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisKKyAgICAjIFN1Z2dlc3RzIGluIFJQTSBhcmUgbGlrZSByZWNvbW1lbmRzIGluIE9FLWNvcmUhCisgICAgcHJpbnRfZGVwcyhzcmNycmVjb21tZW5kcywgIlN1Z2dlc3RzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisgICAgIyBXaGlsZSB0aGVyZSBpcyBubyBhbmFsb2cgZm9yIHN1Z2dlc3RzLi4uIChTbyBjYWxsIHRoZW0gcmVjb21tZW5kcyBmb3Igbm93KQorICAgIHByaW50X2RlcHMoc3JjcnN1Z2dlc3RzLCAiUmVjb21tZW5kcyIsIHNwZWNfcHJlYW1ibGVfdG9wLCBkKQorICAgIHByaW50X2RlcHMoc3JjcnByb3ZpZGVzLCAiUHJvdmlkZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICBwcmludF9kZXBzKHNyY3JvYnNvbGV0ZXMsICJPYnNvbGV0ZXMiLCBzcGVjX3ByZWFtYmxlX3RvcCwgZCkKKyAgICAKKyAgICAjIGNvbmZsaWN0cyBjYW4gbm90IGJlIGluIGEgcHJvdmlkZSEgIFdlIHdpbGwgbmVlZCB0byBmaWx0ZXIgaXQuCisgICAgaWYgc3JjcmNvbmZsaWN0czoKKyAgICAgICAgZGVwZW5kc19kaWN0ID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKHNyY3Jjb25mbGljdHMpCisgICAgICAgIG5ld2RlcHNfZGljdCA9IHt9CisgICAgICAgIGZvciBkZXAgaW4gZGVwZW5kc19kaWN0OgorICAgICAgICAgICAgaWYgZGVwIG5vdCBpbiBzcmNycHJvdmlkZXM6CisgICAgICAgICAgICAgICAgbmV3ZGVwc19kaWN0W2RlcF0gPSBkZXBlbmRzX2RpY3RbZGVwXQorICAgICAgICBpZiBuZXdkZXBzX2RpY3Q6CisgICAgICAgICAgICBzcmNyY29uZmxpY3RzID0gYmIudXRpbHMuam9pbl9kZXBzKG5ld2RlcHNfZGljdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNyY3Jjb25mbGljdHMgPSAiIgorCisgICAgcHJpbnRfZGVwcyhzcmNyY29uZmxpY3RzLCAiQ29uZmxpY3RzIiwgc3BlY19wcmVhbWJsZV90b3AsIGQpCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJycpCisKKyAgICBzcGVjX3ByZWFtYmxlX3RvcC5hcHBlbmQoJyVkZXNjcmlwdGlvbicpCisgICAgYXBwZW5kX2Rlc2NyaXB0aW9uKHNwZWNfcHJlYW1ibGVfdG9wLCBzcmNkZXNjcmlwdGlvbikKKworICAgIHNwZWNfcHJlYW1ibGVfdG9wLmFwcGVuZCgnJykKKworICAgIGlmIHNyY3JwcmVpbnN0OgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXByZScpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcjICVzIC0gcHJlaW5zdCcgJSBzcmNuYW1lKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzcmNycHJlaW5zdCkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisgICAgaWYgc3JjcnBvc3RpbnN0OgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXBvc3QnKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHBvc3RpbnN0JyAlIHNyY25hbWUpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNyY3Jwb3N0aW5zdCkKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisgICAgaWYgc3JjcnByZXJtOgorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnJXByZXVuJykKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyMgJXMgLSBwcmVybScgJSBzcmNuYW1lKQorICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcmNycHJlcm0pCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKHNjcmlwdHZhcikKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJycpCisgICAgaWYgc3JjcnBvc3RybToKKyAgICAgICAgc3BlY19zY3JpcHRsZXRzX3RvcC5hcHBlbmQoJyVwb3N0dW4nKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZCgnIyAlcyAtIHBvc3RybScgJSBzcmNuYW1lKQorICAgICAgICBzY3JpcHR2YXIgPSB3cmFwX3VuaW5zdGFsbChzcmNycG9zdHJtKQorICAgICAgICBzcGVjX3NjcmlwdGxldHNfdG9wLmFwcGVuZChzY3JpcHR2YXIpCisgICAgICAgIHNwZWNfc2NyaXB0bGV0c190b3AuYXBwZW5kKCcnKQorCisgICAgIyBXcml0ZSB0aGUgU1BFQyBmaWxlCisgICAgdHJ5OgorICAgICAgICBzcGVjZmlsZSA9IG9wZW4ob3V0c3BlY2ZpbGUsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgidW5hYmxlIHRvIG9wZW4gc3BlYyBmaWxlIGZvciB3cml0aW5nLiIpCisKKyAgICAjIFJQTVNQRUNfUFJFQU1CTEUgaXMgYSB3YXkgdG8gYWRkIGFyYml0cmFyeSB0ZXh0IHRvIHRoZSB0b3AKKyAgICAjIG9mIHRoZSBnZW5lcmF0ZWQgc3BlYyBmaWxlCisgICAgZXh0ZXJuYWxfcHJlYW1ibGUgPSBkLmdldFZhcigiUlBNU1BFQ19QUkVBTUJMRSIsIFRydWUpCisgICAgaWYgZXh0ZXJuYWxfcHJlYW1ibGU6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGV4dGVybmFsX3ByZWFtYmxlICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfcHJlYW1ibGVfdG9wOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfcHJlYW1ibGVfYm90dG9tOgorICAgICAgICBzcGVjZmlsZS53cml0ZShsaW5lICsgIlxuIikKKworICAgIGZvciBsaW5lIGluIHNwZWNfc2NyaXB0bGV0c190b3A6CisgICAgICAgIHNwZWNmaWxlLndyaXRlKGxpbmUgKyAiXG4iKQorCisgICAgZm9yIGxpbmUgaW4gc3BlY19zY3JpcHRsZXRzX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX2ZpbGVzX3RvcDoKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBmb3IgbGluZSBpbiBzcGVjX2ZpbGVzX2JvdHRvbToKKyAgICAgICAgc3BlY2ZpbGUud3JpdGUobGluZSArICJcbiIpCisKKyAgICBzcGVjZmlsZS5jbG9zZSgpCit9CisjIE90aGVyd2lzZSBhbGxhcmNoIHBhY2thZ2VzIG1heSBjaGFuZ2UgZGVwZW5kaW5nIG9uIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KK3dyaXRlX3NwZWNmaWxlW3ZhcmRlcHNleGNsdWRlXSA9ICJPVkVSUklERVMiCisKK3B5dGhvbiBkb19wYWNrYWdlX3JwbSAoKSB7CisgICAgIyBXZSBuZWVkIGEgc2ltcGxlIHdheSB0byByZW1vdmUgdGhlIE1MUFJFRklYIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwKKyAgICAjIGFuZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLi4uCisgICAgZGVmIHN0cmlwX211bHRpbGliKG5hbWUsIGQpOgorICAgICAgICBtbCA9IGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpCisgICAgICAgIGlmIG1sIGFuZCBuYW1lIGFuZCBsZW4obWwpICE9IDAgYW5kIG5hbWUuZmluZChtbCkgPj0gMDoKKyAgICAgICAgICAgIHJldHVybiAiIi5qb2luKG5hbWUuc3BsaXQobWwpKQorICAgICAgICByZXR1cm4gbmFtZQorCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBwa2dkID0gZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgaWYgbm90IHdvcmtkaXIgb3Igbm90IHBrZ2Qgb3Igbm90IHRtcGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIlZhcmlhYmxlcyBpbmNvcnJlY3RseSBzZXQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzIG9yIHBhY2thZ2VzID09ICcnOgorICAgICAgICBiYi5kZWJ1ZygxLCAiTm8gcGFja2FnZXM7IG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgICMgQ29uc3RydWN0IHRoZSBzcGVjIGZpbGUuLi4KKyAgICAjIElmIHRoZSBzcGVjIGZpbGUgYWxyZWFkeSBleGlzdCwgYW5kIGhhcyBub3QgYmVlbiBzdG9yZWQgaW50byAKKyAgICAjIHBzZXVkbydzIGZpbGVzLmRiLCBpdCBtYXliZSBjYXVzZSBycG1idWlsZCBzcmMucnBtIGZhaWwsCisgICAgIyBzbyByZW1vdmUgaXQgYmVmb3JlIGRvaW5nIHJwbWJ1aWxkIHNyYy5ycG0uCisgICAgc3JjbmFtZSAgICA9IHN0cmlwX211bHRpbGliKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkKQorICAgIG91dHNwZWNmaWxlID0gd29ya2RpciArICIvIiArIHNyY25hbWUgKyAiLnNwZWMiCisgICAgaWYgb3MucGF0aC5pc2ZpbGUob3V0c3BlY2ZpbGUpOgorICAgICAgICBvcy5yZW1vdmUob3V0c3BlY2ZpbGUpCisgICAgZC5zZXRWYXIoJ09VVFNQRUNGSUxFJywgb3V0c3BlY2ZpbGUpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCd3cml0ZV9zcGVjZmlsZScsIGQpCisKKyAgICBwZXJmaWxlZGVwcyA9IChkLmdldFZhcigiTUVSR0VQRVJGSUxFREVQUyIsIFRydWUpIG9yICIwIikgPT0gIjAiCisgICAgaWYgcGVyZmlsZWRlcHM6CisgICAgICAgIG91dGRlcGVuZHMsIG91dHByb3ZpZGVzID0gd3JpdGVfcnBtX3BlcmZpbGVkYXRhKHNyY25hbWUsIGQpCisKKyAgICAjIFNldHVwIHRoZSBycG1idWlsZCBhcmd1bWVudHMuLi4KKyAgICBycG1idWlsZCA9IGQuZ2V0VmFyKCdSUE1CVUlMRCcsIFRydWUpCisgICAgdGFyZ2V0c3lzID0gZC5nZXRWYXIoJ1RBUkdFVF9TWVMnLCBUcnVlKQorICAgIHRhcmdldHZlbmRvciA9IGQuZ2V0VmFyKCdIT1NUX1ZFTkRPUicsIFRydWUpCisgICAgcGFja2FnZV9hcmNoID0gKGQuZ2V0VmFyKCdQQUNLQUdFX0FSQ0gnLCBUcnVlKSBvciAiIikucmVwbGFjZSgiLSIsICJfIikKKyAgICBzZGtwa2dzdWZmaXggPSAoZC5nZXRWYXIoJ1NES1BLR1NVRkZJWCcsIFRydWUpIG9yICJuYXRpdmVzZGsiKS5yZXBsYWNlKCItIiwgIl8iKQorICAgIGlmIHBhY2thZ2VfYXJjaCBub3QgaW4gImFsbCBhbnkgbm9hcmNoIi5zcGxpdCgpIGFuZCBub3QgcGFja2FnZV9hcmNoLmVuZHN3aXRoKHNka3BrZ3N1ZmZpeCk6CisgICAgICAgIG1sX3ByZWZpeCA9IChkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIikucmVwbGFjZSgiLSIsICJfIikKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFRFTkQnLCBtbF9wcmVmaXggKyBwYWNrYWdlX2FyY2gpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VfQVJDSF9FWFRFTkQnLCBwYWNrYWdlX2FyY2gpCisgICAgcGtnd3JpdGVkaXIgPSBkLmV4cGFuZCgnJHtQS0dXUklURURJUlJQTX0vJHtQQUNLQUdFX0FSQ0hfRVhURU5EfScpCisgICAgZC5zZXRWYXIoJ1JQTV9QS0dXUklURURJUicsIHBrZ3dyaXRlZGlyKQorICAgIGJiLmRlYnVnKDEsICdQS0dXUklURURJUjogJXMnICUgZC5nZXRWYXIoJ1JQTV9QS0dXUklURURJUicsIFRydWUpKQorICAgIHBrZ2FyY2ggPSBkLmV4cGFuZCgnJHtQQUNLQUdFX0FSQ0hfRVhURU5EfSR7SE9TVF9WRU5ET1J9LSR7SE9TVF9PU30nKQorICAgIG1hZ2ljZmlsZSA9IGQuZXhwYW5kKCcke1NUQUdJTkdfRElSX05BVElWRX0ke2RhdGFkaXJfbmF0aXZlfS9taXNjL21hZ2ljLm1nYycpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKHBrZ3dyaXRlZGlyKQorICAgIG9zLmNobW9kKHBrZ3dyaXRlZGlyLCAwNzU1KQorCisgICAgY21kID0gcnBtYnVpbGQKKyAgICBjbWQgPSBjbWQgKyAiIC0tbm9kZXBzIC0tc2hvcnQtY2lyY3VpdCAtLXRhcmdldCAiICsgcGtnYXJjaCArICIgLS1idWlsZHJvb3QgIiArIHBrZ2QKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfdG9wZGlyICIgKyB3b3JrZGlyICsgIicgLS1kZWZpbmUgJ19ycG1kaXIgIiArIHBrZ3dyaXRlZGlyICsgIiciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX2J1aWxkZGlyICIgKyBkLmdldFZhcignUycsIFRydWUpICsgIiciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX2J1aWxkX25hbWVfZm10ICUle05BTUV9LSUle1ZFUlNJT059LSUle1JFTEVBU0V9LiUle0FSQ0h9LnJwbSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3VzZV9pbnRlcm5hbF9kZXBlbmRlbmN5X2dlbmVyYXRvciAwJyIKKyAgICBpZiBwZXJmaWxlZGVwczoKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3JlcXVpcmVzICIgKyBvdXRkZXBlbmRzICsgIiciCisgICAgICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ19fZmluZF9wcm92aWRlcyAiICsgb3V0cHJvdmlkZXMgKyAiJyIKKyAgICBlbHNlOgorICAgICAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfX2ZpbmRfcmVxdWlyZXMgJXtuaWx9JyIKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX19maW5kX3Byb3ZpZGVzICV7bmlsfSciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3VucGFja2FnZWRfZmlsZXNfdGVybWluYXRlX2J1aWxkIDAnIgorICAgIGNtZCA9IGNtZCArICIgLS1kZWZpbmUgJ2RlYnVnX3BhY2thZ2UgJXtuaWx9JyIKKyAgICBjbWQgPSBjbWQgKyAiIC0tZGVmaW5lICdfcnBtZmNfbWFnaWNfcGF0aCAiICsgbWFnaWNmaWxlICsgIiciCisgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3RtcHBhdGggIiArIHdvcmtkaXIgKyAiJyIKKyAgICBpZiBkLmdldFZhckZsYWcoJ0FSQ0hJVkVSX01PREUnLCAnc3JwbScsIFRydWUpID09ICcxJyBhbmQgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnYXJjaGl2ZXInLCBkKToKKyAgICAgICAgY21kID0gY21kICsgIiAtLWRlZmluZSAnX3NvdXJjZWRpciAiICsgZC5nZXRWYXIoJ0FSQ0hJVkVSX09VVERJUicsIFRydWUpICsgIiciCisgICAgICAgIGNtZHNycG0gPSBjbWQgKyAiIC0tZGVmaW5lICdfc3JjcnBtZGlyICIgKyBkLmdldFZhcignQVJDSElWRVJfT1VURElSJywgVHJ1ZSkgKyAiJyIKKyAgICAgICAgY21kc3JwbSA9IGNtZHNycG0gKyAiIC1icyAiICsgb3V0c3BlY2ZpbGUKKyAgICAgICAgIyBCdWlsZCB0aGUgLnNyYy5ycG0KKyAgICAgICAgZC5zZXRWYXIoJ1NCVUlMRFNQRUMnLCBjbWRzcnBtICsgIlxuIikKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdTQlVJTERTUEVDJywgJ2Z1bmMnLCAnMScpCisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnU0JVSUxEU1BFQycsIGQpCisgICAgY21kID0gY21kICsgIiAtYmIgIiArIG91dHNwZWNmaWxlCisKKyAgICAjIEJ1aWxkIHRoZSBycG0gcGFja2FnZSEKKyAgICBkLnNldFZhcignQlVJTERTUEVDJywgY21kICsgIlxuIikKKyAgICBkLnNldFZhckZsYWcoJ0JVSUxEU1BFQycsICdmdW5jJywgJzEnKQorICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnQlVJTERTUEVDJywgZCkKKworICAgIGlmIGQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJzaWduX3JwbSIsIGQpCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAnIHJwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCB2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JworICAgICAgICBkLmFwcGVuZFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RlcGVuZHMnLCBkZXBzKQorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2Zha2Vyb290JywgMSkKK30KKworU1NUQVRFVEFTS1MgKz0gImRvX3BhY2thZ2Vfd3JpdGVfcnBtIgorZG9fcGFja2FnZV93cml0ZV9ycG1bc3N0YXRlLWlucHV0ZGlyc10gPSAiJHtQS0dXUklURURJUlJQTX0iCitkb19wYWNrYWdlX3dyaXRlX3JwbVtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtERVBMT1lfRElSX1JQTX0iCisjIFRha2UgYSBzaGFyZWQgbG9jaywgd2UgY2FuIHdyaXRlIG11bHRpcGxlIHBhY2thZ2VzIGF0IHRoZSBzYW1lIHRpbWUuLi4KKyMgYnV0IHdlIG5lZWQgdG8gc3RvcCB0aGUgcm9vdGZzL3NvbHZlciBmcm9tIHJ1bm5pbmcgd2hpbGUgd2UgZG8uLi4KK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3NzdGF0ZS1sb2NrZmlsZS1zaGFyZWRdICs9ICIke0RFUExPWV9ESVJfUlBNfS9ycG0ubG9jayIKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfcnBtX3NldHNjZW5lICgpIHsKKyAgICBzc3RhdGVfc2V0c2NlbmUoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV93cml0ZV9ycG1fc2V0c2NlbmUKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfcnBtICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX3JwbSIsIGQpCit9CisKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RpcnNdID0gIiR7UEtHV1JJVEVESVJSUE19IgorZG9fcGFja2FnZV93cml0ZV9ycG1bY2xlYW5kaXJzXSA9ICIke1BLR1dSSVRFRElSUlBNfSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW3VtYXNrXSA9ICIwMjIiCithZGR0YXNrIHBhY2thZ2Vfd3JpdGVfcnBtIGFmdGVyIGRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2UKKworUEFDS0FHRUlOREVYREVQUyArPSAicnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorUEFDS0FHRUlOREVYREVQUyArPSAiY3JlYXRlcmVwby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fYnVpbGRbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VfdGFyLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllMjI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlX3Rhci5iYmNsYXNzCkBAIC0wLDAgKzEsNjkgQEAKK2luaGVyaXQgcGFja2FnZQorCitJTUFHRV9QS0dUWVBFID89ICJ0YXIiCisKK3B5dGhvbiBkb19wYWNrYWdlX3RhciAoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGlmIG5vdCB3b3JrZGlyOgorICAgICAgICBiYi5lcnJvcigiV09SS0RJUiBub3QgZGVmaW5lZCwgdW5hYmxlIHRvIHBhY2thZ2UiKQorICAgICAgICByZXR1cm4KKworICAgIG91dGRpciA9IGQuZ2V0VmFyKCdERVBMT1lfRElSX1RBUicsIFRydWUpCisgICAgaWYgbm90IG91dGRpcjoKKyAgICAgICAgYmIuZXJyb3IoIkRFUExPWV9ESVJfVEFSIG5vdCBkZWZpbmVkLCB1bmFibGUgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgZHZhciA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkKKyAgICBpZiBub3QgZHZhcjoKKyAgICAgICAgYmIuZXJyb3IoIkQgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgaWYgbm90IHBhY2thZ2VzOgorICAgICAgICBiYi5kZWJ1ZygxLCAiUEFDS0FHRVMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gcGFja2FnZSIpCisgICAgICAgIHJldHVybgorCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dERVNUJywgVHJ1ZSkKKworICAgIGJiLnV0aWxzLm1rZGlyaGllcihvdXRkaXIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGR2YXIpCisKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICByb290ID0gIiVzLyVzIiAlIChwa2dkZXN0LCBwa2cpCisKKyAgICAgICAgb3ZlcnJpZGVzID0gbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgRmFsc2UpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICclczolcycgJSAob3ZlcnJpZGVzLCBwa2cpKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocm9vdCkKKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguZGlybmFtZShyb290KQorICAgICAgICB0YXJmbiA9IGxvY2FsZGF0YS5leHBhbmQoIiR7REVQTE9ZX0RJUl9UQVJ9LyR7UEtHfS0ke1BLR1Z9LSR7UEtHUn0udGFyLmd6IikKKyAgICAgICAgb3MuY2hkaXIocm9vdCkKKyAgICAgICAgZGxpc3QgPSBvcy5saXN0ZGlyKHJvb3QpCisgICAgICAgIGlmIG5vdCBkbGlzdDoKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vdCBjcmVhdGluZyBlbXB0eSBhcmNoaXZlIGZvciAlcy0lcy0lcyIgJSAocGtnLCBsb2NhbGRhdGEuZ2V0VmFyKCdQS0dWJywgVHJ1ZSksIGxvY2FsZGF0YS5nZXRWYXIoJ1BLR1InLCBUcnVlKSkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBhcmdzID0gInRhciAtY3ogLS1leGNsdWRlPUNPTlRST0wgLS1leGNsdWRlPURFQklBTiAtZiIuc3BsaXQoKQorICAgICAgICByZXQgPSBzdWJwcm9jZXNzLmNhbGwoYXJncyArIFt0YXJmbl0gKyBkbGlzdCkKKyAgICAgICAgaWYgcmV0ICE9IDA6CisgICAgICAgICAgICBiYi5lcnJvcigiQ3JlYXRpb24gb2YgdGFyICVzIGZhaWxlZC4iICUgdGFyZm4pCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgIT0gJyc6CisgICAgICAgIGRlcHMgPSAoZC5nZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3RhcicsICdkZXBlbmRzJykgb3IgIiIpLnNwbGl0KCkKKyAgICAgICAgZGVwcy5hcHBlbmQoJ3Rhci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCcpCisgICAgICAgIGRlcHMuYXBwZW5kKCd2aXJ0dWFsL2Zha2Vyb290LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290JykKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdkb19wYWNrYWdlX3dyaXRlX3RhcicsICdkZXBlbmRzJywgIiAiLmpvaW4oZGVwcykpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcGFja2FnZV93cml0ZV90YXInLCAnZmFrZXJvb3QnLCAiMSIpCit9CisKKworcHl0aG9uIGRvX3BhY2thZ2Vfd3JpdGVfdGFyICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSIsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wYWNrYWdlX3RhciIsIGQpCit9Citkb19wYWNrYWdlX3dyaXRlX3RhcltkaXJzXSA9ICIke0R9IgorYWRkdGFzayBwYWNrYWdlX3dyaXRlX3RhciBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fcGFja2FnZWRhdGEgZG9fcGFja2FnZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGFja2FnZWRhdGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk3ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VkYXRhLmJiY2xhc3MKQEAgLTAsMCArMSwzNCBAQAorcHl0aG9uIHJlYWRfc3VicGFja2FnZV9tZXRhZGF0YSAoKSB7CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICB2YXJzID0geworICAgICAgICAiUE4iIDogZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIAorICAgICAgICAiUEUiIDogZC5nZXRWYXIoJ1BFJywgVHJ1ZSksIAorICAgICAgICAiUFYiIDogZC5nZXRWYXIoJ1BWJywgVHJ1ZSksCisgICAgICAgICJQUiIgOiBkLmdldFZhcignUFInLCBUcnVlKSwKKyAgICB9CisKKyAgICBkYXRhID0gb2UucGFja2FnZWRhdGEucmVhZF9wa2dkYXRhKHZhcnNbIlBOIl0sIGQpCisKKyAgICBmb3Iga2V5IGluIGRhdGEua2V5cygpOgorICAgICAgICBkLnNldFZhcihrZXksIGRhdGFba2V5XSkKKworICAgIGZvciBwa2cgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgc2RhdGEgPSBvZS5wYWNrYWdlZGF0YS5yZWFkX3N1YnBrZ2RhdGEocGtnLCBkKQorICAgICAgICBmb3Iga2V5IGluIHNkYXRhLmtleXMoKToKKyAgICAgICAgICAgIGlmIGtleSBpbiB2YXJzOgorICAgICAgICAgICAgICAgIGlmIHNkYXRhW2tleV0gIT0gdmFyc1trZXldOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgPT0gIlBOIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSZWNpcGUgJXMgaXMgdHJ5aW5nIHRvIGNyZWF0ZSBwYWNrYWdlICVzIHdoaWNoIHdhcyBhbHJlYWR5IHdyaXR0ZW4gYnkgcmVjaXBlICVzLiBUaGlzIHdpbGwgY2F1c2UgY29ycnVwdGlvbiwgcGxlYXNlIHJlc29sdmUgdGhpcyBhbmQgb25seSBwcm92aWRlIHRoZSBwYWNrYWdlIGZyb20gb25lIHJlY2lwZSBvciB0aGUgb3RoZXIgb3Igb25seSBidWlsZCBvbmUgb2YgdGhlIHJlY2lwZXMuIiAlICh2YXJzW2tleV0sIHBrZywgc2RhdGFba2V5XSkpCisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJSZWNpcGUgJXMgaXMgdHJ5aW5nIHRvIGNoYW5nZSAlcyBmcm9tICclcycgdG8gJyVzJy4gVGhpcyB3aWxsIGNhdXNlIGRvX3BhY2thZ2Vfd3JpdGVfKiBmYWlsdXJlcyBzaW5jZSB0aGUgaW5jb3JyZWN0IGRhdGEgd2lsbCBiZSB1c2VkIGFuZCB0aGV5IHdpbGwgYmUgdW5hYmxlIHRvIGZpbmQgdGhlIHJpZ2h0IHdvcmtkaXIuIiAlICh2YXJzWyJQTiJdLCBrZXksIHZhcnNba2V5XSwgc2RhdGFba2V5XSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgd2Ugc2V0IHVuc3VmZml4ZWQgdmFyaWFibGVzIGhlcmUgdGhlcmUgaXMgYSBjaGFuY2UgdGhleSBjb3VsZCBjbG9iYmVyIG92ZXJyaWRlIHZlcnNpb25zCisgICAgICAgICAgICAjIG9mIHRoYXQgdmFyaWFibGUsIGUuZy4gREVTQ1JJUFRJT04gY291bGQgY2xvYmJlciBERVNDUklQVElPTl88cGtnbmFtZT4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIGRvbid0IGNsb2JiZXIgZm9yIHRoZSB1bnN1ZmZpeGVkIHZhcmlhYmxlIHZlcnNpb25zCisgICAgICAgICAgICAjCisgICAgICAgICAgICBpZiBrZXkuZW5kc3dpdGgoIl8iICsgcGtnKToKKyAgICAgICAgICAgICAgICBkLnNldFZhcihrZXksIHNkYXRhW2tleV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGQuc2V0VmFyKGtleSwgc2RhdGFba2V5XSwgcGFyc2luZz1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2Vncm91cC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2ZlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcGFja2FnZWdyb3VwLmJiY2xhc3MKQEAgLTAsMCArMSw1MiBAQAorIyBDbGFzcyBmb3IgcGFja2FnZWdyb3VwIChwYWNrYWdlIGdyb3VwKSByZWNpcGVzCisKKyMgQnkgZGVmYXVsdCwgb25seSB0aGUgcGFja2FnZWdyb3VwIHBhY2thZ2UgaXRzZWxmIGlzIGluIFBBQ0tBR0VTLgorIyAtZGJnIGFuZCAtZGV2IGZsYXZvdXJzIGFyZSBoYW5kbGVkIGJ5IHRoZSBhbm9uZnVuYyBiZWxvdy4KKyMgVGhpcyBtZWFucyB0aGF0IHBhY2thZ2Vncm91cCByZWNpcGVzIHVzZWQgdG8gYnVpbGQgbXVsdGlwbGUgcGFja2FnZWdyb3VwCisjIHBhY2thZ2VzIGhhdmUgdG8gbW9kaWZ5IFBBQ0tBR0VTIGFmdGVyIGluaGVyaXRpbmcgcGFja2FnZWdyb3VwLmJiY2xhc3MuCitQQUNLQUdFUyA9ICIke1BOfSIKKworIyBCeSBkZWZhdWx0LCBwYWNrYWdlZ3JvdXAgcGFja2FnZXMgZG8gbm90IGRlcGVuZCBvbiBhIGNlcnRhaW4gYXJjaGl0ZWN0dXJlLgorIyBPbmx5IGlmIGRlcGVuZGVuY2llcyBhcmUgbW9kaWZpZWQgYnkgTUFDSElORV9GRUFUVVJFUywgcGFja2FnZXMKKyMgbmVlZCB0byBiZSBzZXQgdG8gTUFDSElORV9BUkNIIGFmdGVyIGluaGVyaXRpbmcgcGFja2FnZWdyb3VwLmJiY2xhc3MKK1BBQ0tBR0VfQVJDSCA/PSAiYWxsIgorCisjIEZ1bGx5IGV4cGFuZGVkIC0gc28gaXQgYXBwbGllcyB0aGUgb3ZlcnJpZGVzIGFzIHdlbGwKK1BBQ0tBR0VfQVJDSF9FWFBBTkRFRCA6PSAiJHtQQUNLQUdFX0FSQ0h9IgorCitpbmhlcml0ICR7QG9lLnV0aWxzLmlmZWxzZShkLmdldFZhcignUEFDS0FHRV9BUkNIX0VYUEFOREVEJywgVHJ1ZSkgPT0gJ2FsbCcsICdhbGxhcmNoJywgJycpfQorCisjIFRoaXMgYXV0b21hdGljYWxseSBhZGRzIC1kYmcgYW5kIC1kZXYgZmxhdm91cnMgb2YgYWxsIFBBQ0tBR0VTCisjIHRvIHRoZSBsaXN0LiBUaGVpciBkZXBlbmRlbmNpZXMgKFJSRUNPTU1FTkRTKSBhcmUgaGFuZGxlZCBhcyB1c3VhbAorIyBieSBwYWNrYWdlX2RlcGNoYWlucyBpbiBhIGZvbGxvd2luZyBzdGVwLgorIyBBbHNvIG1hcmsgYWxsIHBhY2thZ2VzIGFzIEFMTE9XX0VNUFRZCitweXRob24gKCkgeworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGdlbnBhY2thZ2VzID0gW10KKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBkLnNldFZhcigiQUxMT1dfRU1QVFlfJXMiICUgcGtnLCAiMSIpCisgICAgICAgIGZvciBwb3N0Zml4IGluIFsnLWRiZycsICctZGV2JywgJy1wdGVzdCddOgorICAgICAgICAgICAgZ2VucGFja2FnZXMuYXBwZW5kKHBrZytwb3N0Zml4KQorICAgIGlmIGQuZ2V0VmFyKCdQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZJywgVHJ1ZSkgIT0gJzEnOgorICAgICAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwYWNrYWdlcytnZW5wYWNrYWdlcykpCit9CisKKyMgV2UgZG9uJ3Qgd2FudCB0byBsb29rIGF0IHNoYXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmb3IgdGhlCisjIGRiZyBwYWNrYWdlcworREVQQ0hBSU5fREJHREVGQVVMVERFUFMgPSAiMSIKKworIyBXZSBvbmx5IG5lZWQgdGhlIHBhY2thZ2luZyB0YXNrcyAtIGRpc2FibGUgdGhlIHJlc3QKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19pbnN0YWxsW25vZXhlY10gPSAiMSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbbm9leGVjXSA9ICIxIgorCitweXRob24gKCkgeworICAgIGluaXRtYW4gPSBkLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIFRydWUpCisgICAgaWYgaW5pdG1hbiBhbmQgaW5pdG1hbiBpbiBbJ3N5c3Zpbml0JywgJ3N5c3RlbWQnXSBhbmQgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCBpbml0bWFuLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGJiLmZhdGFsKCJQbGVhc2UgZW5zdXJlIHRoYXQgeW91ciBzZXR0aW5nIG9mIFZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIgKCVzKSBtYXRjaGVzIHRoZSBlbnRyaWVzIGVuYWJsZWQgaW4gRElTVFJPX0ZFQVRVUkVTIiAlIGluaXRtYW4pCit9CisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BhY2thZ2VpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MGFjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wYWNrYWdlaW5mby5iYmNsYXNzCkBAIC0wLDAgKzEsMjIgQEAKK3B5dGhvbiBwYWNrYWdlaW5mb19oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgb2UucGFja2FnZWRhdGEKKyAgICBwa2dpbmZvbGlzdCA9IFtdCisKKyAgICBwa2dkYXRhX2RpciA9IGUuZGF0YS5nZXRWYXIoIlBLR0RBVEFfRElSIiwgVHJ1ZSkgKyAnL3J1bnRpbWUvJworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBrZ2RhdGFfZGlyKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGtnZGF0YV9kaXIpOgorICAgICAgICAgICAgZm9yIHBrZ25hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgcGtnbmFtZS5lbmRzd2l0aCgnLnBhY2thZ2VkJyk6CisgICAgICAgICAgICAgICAgICAgIHBrZ25hbWUgPSBwa2duYW1lWzotOV0KKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YWZpbGUgPSByb290ICsgcGtnbmFtZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZGF0YSA9IG9lLnBhY2thZ2VkYXRhLnJlYWRfcGtnZGF0YWZpbGUocGtnZGF0YWZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZGF0YVsnUEtHJ10gPSBwa2duYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwa2dpbmZvbGlzdC5hcHBlbmQoc2RhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkZhaWxlZCB0byByZWFkIHBrZ2RhdGEgZmlsZSAlczogJXM6ICVzIiAlIChwa2dkYXRhZmlsZSwgZS5fX2NsYXNzX18sIHN0cihlKSkpCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5QYWNrYWdlSW5mbyhwa2dpbmZvbGlzdCksIGUuZGF0YSkKK30KKworYWRkaGFuZGxlciBwYWNrYWdlaW5mb19oYW5kbGVyCitwYWNrYWdlaW5mb19oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVxdWVzdFBhY2thZ2VJbmZvIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGF0Y2guYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJhYWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BhdGNoLmJiY2xhc3MKQEAgLTAsMCArMSwxODggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA2ICBPcGVuZWRIYW5kIExURAorCisjIFBvaW50IHRvIGFuIGVtcHR5IGZpbGUgc28gYW55IHVzZXIncyBjdXN0b20gc2V0dGluZ3MgZG9uJ3QgYnJlYWsgdGhpbmdzCitRVUlMVFJDRklMRSA/PSAiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L3F1aWx0cmMiCisKK1BBVENIREVQRU5ERU5DWSA9ICIke1BBVENIVE9PTH0tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK2luaGVyaXQgdGVybWluYWwKKworZGVmIHNyY19wYXRjaGVzKGQsIGFsbCA9IEZhbHNlICk6CisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBmZXRjaCA9IGJiLmZldGNoMi5GZXRjaChbXSwgZCkKKyAgICBwYXRjaGVzID0gW10KKyAgICBzb3VyY2VzID0gW10KKyAgICBmb3IgdXJsIGluIGZldGNoLnVybHM6CisgICAgICAgIGxvY2FsID0gcGF0Y2hfcGF0aCh1cmwsIGZldGNoLCB3b3JrZGlyKQorICAgICAgICBpZiBub3QgbG9jYWw6CisgICAgICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICAgICAgbG9jYWwgPSBmZXRjaC5sb2NhbHBhdGgodXJsKQorICAgICAgICAgICAgICAgIHNvdXJjZXMuYXBwZW5kKGxvY2FsKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgICAgICBwYXJtID0gdXJsZGF0YS5wYXJtCisgICAgICAgIHBhdGNobmFtZSA9IHBhcm0uZ2V0KCdwbmFtZScpIG9yIG9zLnBhdGguYmFzZW5hbWUobG9jYWwpCisKKyAgICAgICAgYXBwbHksIHJlYXNvbiA9IHNob3VsZF9hcHBseShwYXJtLCBkKQorICAgICAgICBpZiBub3QgYXBwbHk6CisgICAgICAgICAgICBpZiByZWFzb246CisgICAgICAgICAgICAgICAgYmIubm90ZSgiUGF0Y2ggJXMgJXMiICUgKHBhdGNobmFtZSwgcmVhc29uKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcGF0Y2hwYXJtID0geydwYXRjaG5hbWUnOiBwYXRjaG5hbWV9CisgICAgICAgIGlmICJzdHJpcGxldmVsIiBpbiBwYXJtOgorICAgICAgICAgICAgc3RyaXBsZXZlbCA9IHBhcm1bInN0cmlwbGV2ZWwiXQorICAgICAgICBlbGlmICJwbnVtIiBpbiBwYXJtOgorICAgICAgICAgICAgI2JiLm1zZy53YXJuKE5vbmUsICJEZXByZWNhdGVkIHVzYWdlIG9mICdwbnVtJyB1cmwgcGFyYW1ldGVyIGluICclcycsIHBsZWFzZSB1c2UgJ3N0cmlwbGV2ZWwnIiAlIHVybCkKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSBwYXJtWyJwbnVtIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmlwbGV2ZWwgPSAnMScKKyAgICAgICAgcGF0Y2hwYXJtWydzdHJpcGxldmVsJ10gPSBzdHJpcGxldmVsCisKKyAgICAgICAgcGF0Y2hkaXIgPSBwYXJtLmdldCgncGF0Y2hkaXInKQorICAgICAgICBpZiBwYXRjaGRpcjoKKyAgICAgICAgICAgIHBhdGNocGFybVsncGF0Y2hkaXInXSA9IHBhdGNoZGlyCisKKyAgICAgICAgbG9jYWx1cmwgPSBiYi5mZXRjaC5lbmNvZGV1cmwoKCdmaWxlJywgJycsIGxvY2FsLCAnJywgJycsIHBhdGNocGFybSkpCisgICAgICAgIHBhdGNoZXMuYXBwZW5kKGxvY2FsdXJsKQorCisgICAgaWYgYWxsOgorICAgICAgICByZXR1cm4gc291cmNlcworCisgICAgcmV0dXJuIHBhdGNoZXMKKworZGVmIHBhdGNoX3BhdGgodXJsLCBmZXRjaCwgd29ya2Rpcik6CisgICAgIiIiUmV0dXJuIHRoZSBsb2NhbCBwYXRoIG9mIGEgcGF0Y2gsIG9yIE5vbmUgaWYgdGhpcyBpc24ndCBhIHBhdGNoIiIiCisKKyAgICBsb2NhbCA9IGZldGNoLmxvY2FscGF0aCh1cmwpCisgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKGxvY2FsKSkKKyAgICBpZiBleHQgaW4gKCcuZ3onLCAnLmJ6MicsICcuWicpOgorICAgICAgICBsb2NhbCA9IG9zLnBhdGguam9pbih3b3JrZGlyLCBiYXNlKQorICAgICAgICBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2UpWzFdCisKKyAgICB1cmxkYXRhID0gZmV0Y2gudWRbdXJsXQorICAgIGlmICJhcHBseSIgaW4gdXJsZGF0YS5wYXJtOgorICAgICAgICBhcHBseSA9IG9lLnR5cGVzLmJvb2xlYW4odXJsZGF0YS5wYXJtWyJhcHBseSJdKQorICAgICAgICBpZiBub3QgYXBwbHk6CisgICAgICAgICAgICByZXR1cm4KKyAgICBlbGlmIGV4dCBub3QgaW4gKCIuZGlmZiIsICIucGF0Y2giKToKKyAgICAgICAgcmV0dXJuCisKKyAgICByZXR1cm4gbG9jYWwKKworZGVmIHNob3VsZF9hcHBseShwYXJtLCBkKToKKyAgICAiIiJEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGFwcGx5IHRoZSBnaXZlbiBwYXRjaCIiIgorCisgICAgaWYgIm1pbmRhdGUiIGluIHBhcm0gb3IgIm1heGRhdGUiIGluIHBhcm06CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgc3JjZGF0ZSA9IGQuZ2V0VmFyKCdTUkNEQVRFXyVzJyAlIHBuLCBUcnVlKQorICAgICAgICBpZiBub3Qgc3JjZGF0ZToKKyAgICAgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignU1JDREFURScsIFRydWUpCisKKyAgICAgICAgaWYgc3JjZGF0ZSA9PSAibm93IjoKKyAgICAgICAgICAgIHNyY2RhdGUgPSBkLmdldFZhcignREFURScsIFRydWUpCisKKyAgICAgICAgaWYgIm1heGRhdGUiIGluIHBhcm0gYW5kIHBhcm1bIm1heGRhdGUiXSA8IHNyY2RhdGU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdpcyBvdXRkYXRlZCcKKworICAgICAgICBpZiAibWluZGF0ZSIgaW4gcGFybSBhbmQgcGFybVsibWluZGF0ZSJdID4gc3JjZGF0ZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2lzIHByZWRhdGVkJworCisKKyAgICBpZiAibWlucmV2IiBpbiBwYXJtOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBzcmNyZXYgPCBwYXJtWyJtaW5yZXYiXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgJ2FwcGxpZXMgdG8gbGF0ZXIgcmV2aXNpb25zJworCisgICAgaWYgIm1heHJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgc3JjcmV2ID4gcGFybVsibWF4cmV2Il06CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICdhcHBsaWVzIHRvIGVhcmxpZXIgcmV2aXNpb25zJworCisgICAgaWYgInJldiIgaW4gcGFybToKKyAgICAgICAgc3JjcmV2ID0gZC5nZXRWYXIoJ1NSQ1JFVicsIFRydWUpCisgICAgICAgIGlmIHNyY3JldiBhbmQgcGFybVsicmV2Il0gbm90IGluIHNyY3JldjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZSwgImRvZXNuJ3QgYXBwbHkgdG8gcmV2aXNpb24iCisKKyAgICBpZiAibm90cmV2IiBpbiBwYXJtOgorICAgICAgICBzcmNyZXYgPSBkLmdldFZhcignU1JDUkVWJywgVHJ1ZSkKKyAgICAgICAgaWYgc3JjcmV2IGFuZCBwYXJtWyJub3RyZXYiXSBpbiBzcmNyZXY6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UsICJkb2Vzbid0IGFwcGx5IHRvIHJldmlzaW9uIgorCisgICAgcmV0dXJuIFRydWUsIE5vbmUKKworc2hvdWxkX2FwcGx5W3ZhcmRlcHNleGNsdWRlXSA9ICJEQVRFIFNSQ0RBVEUiCisKK3B5dGhvbiBwYXRjaF9kb19wYXRjaCgpIHsKKyAgICBpbXBvcnQgb2UucGF0Y2gKKworICAgIHBhdGNoc2V0bWFwID0geworICAgICAgICAicGF0Y2giOiBvZS5wYXRjaC5QYXRjaFRyZWUsCisgICAgICAgICJxdWlsdCI6IG9lLnBhdGNoLlF1aWx0VHJlZSwKKyAgICAgICAgImdpdCI6IG9lLnBhdGNoLkdpdEFwcGx5VHJlZSwKKyAgICB9CisKKyAgICBjbHMgPSBwYXRjaHNldG1hcFtkLmdldFZhcignUEFUQ0hUT09MJywgVHJ1ZSkgb3IgJ3F1aWx0J10KKworICAgIHJlc29sdmVybWFwID0geworICAgICAgICAibm9vcCI6IG9lLnBhdGNoLk5PT1BSZXNvbHZlciwKKyAgICAgICAgInVzZXIiOiBvZS5wYXRjaC5Vc2VyUmVzb2x2ZXIsCisgICAgfQorCisgICAgcmNscyA9IHJlc29sdmVybWFwW2QuZ2V0VmFyKCdQQVRDSFJFU09MVkUnLCBUcnVlKSBvciAndXNlciddCisKKyAgICBjbGFzc2VzID0ge30KKworICAgIHMgPSBkLmdldFZhcignUycsIFRydWUpCisKKyAgICBwYXRoID0gb3MuZ2V0ZW52KCdQQVRIJykKKyAgICBvcy5wdXRlbnYoJ1BBVEgnLCBkLmdldFZhcignUEFUSCcsIFRydWUpKQorCisgICAgIyBXZSBtdXN0IHVzZSBvbmUgVE1QRElSIHBlciBwcm9jZXNzIHNvIHRoYXQgdGhlICJwYXRjaCIgcHJvY2Vzc2VzCisgICAgIyBkb24ndCBnZW5lcmF0ZSB0aGUgc2FtZSB0ZW1wIGZpbGUgbmFtZS4KKworICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIHByb2Nlc3NfdG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgb3MuZW52aXJvblsnVE1QRElSJ10gPSBwcm9jZXNzX3RtcGRpcgorCisgICAgZm9yIHBhdGNoIGluIHNyY19wYXRjaGVzKGQpOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKworICAgICAgICBpZiAicGF0Y2hkaXIiIGluIHBhcm06CisgICAgICAgICAgICBwYXRjaGRpciA9IHBhcm1bInBhdGNoZGlyIl0KKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHBhdGNoZGlyKToKKyAgICAgICAgICAgICAgICBwYXRjaGRpciA9IG9zLnBhdGguam9pbihzLCBwYXRjaGRpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhdGNoZGlyID0gcworCisgICAgICAgIGlmIG5vdCBwYXRjaGRpciBpbiBjbGFzc2VzOgorICAgICAgICAgICAgcGF0Y2hzZXQgPSBjbHMocGF0Y2hkaXIsIGQpCisgICAgICAgICAgICByZXNvbHZlciA9IHJjbHMocGF0Y2hzZXQsIG9lX3Rlcm1pbmFsKQorICAgICAgICAgICAgY2xhc3Nlc1twYXRjaGRpcl0gPSAocGF0Y2hzZXQsIHJlc29sdmVyKQorICAgICAgICAgICAgcGF0Y2hzZXQuQ2xlYW4oKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0Y2hzZXQsIHJlc29sdmVyID0gY2xhc3Nlc1twYXRjaGRpcl0KKworICAgICAgICBiYi5ub3RlKCJBcHBseWluZyBwYXRjaCAnJXMnICglcykiICUgKHBhcm1bJ3BhdGNobmFtZSddLCBvZS5wYXRoLmZvcm1hdF9kaXNwbGF5KGxvY2FsLCBkKSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGNoc2V0LkltcG9ydCh7ImZpbGUiOmxvY2FsLCAic3RyaXBwYXRoIjogcGFybVsnc3RyaXBsZXZlbCddfSwgVHJ1ZSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUocHJvY2Vzc190bXBkaXIsIFRydWUpCisgICAgICAgICAgICBiYi5mYXRhbChzdHIoZXhjKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzb2x2ZXIuUmVzb2x2ZSgpCisgICAgICAgIGV4Y2VwdCBiYi5CQkhhbmRsZWRFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShwcm9jZXNzX3RtcGRpciwgVHJ1ZSkKKyAgICAgICAgICAgIGJiLmZhdGFsKHN0cihlKSkKKworICAgIGJiLnV0aWxzLnJlbW92ZShwcm9jZXNzX3RtcGRpciwgVHJ1ZSkKKyAgICBkZWwgb3MuZW52aXJvblsnVE1QRElSJ10KK30KK3BhdGNoX2RvX3BhdGNoW3ZhcmRlcHNleGNsdWRlXSA9ICJQQVRDSFJFU09MVkUiCisKK2FkZHRhc2sgcGF0Y2ggYWZ0ZXIgZG9fdW5wYWNrCitkb19wYXRjaFtkaXJzXSA9ICIke1dPUktESVJ9IgorZG9fcGF0Y2hbZGVwZW5kc10gPSAiJHtQQVRDSERFUEVOREVOQ1l9IgorCitFWFBPUlRfRlVOQ1RJT05TIGRvX3BhdGNoCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGVybG5hdGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhkZThiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BlcmxuYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDMgQEAKK0VYVFJBTkFUSVZFUEFUSCArPSAicGVybC1uYXRpdmUiCitERVBFTkRTICs9ICJwZXJsLW5hdGl2ZSIKK09FQ01BS0VfUEVSTE5BVElWRV9ESVIgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGl4YnVmY2FjaGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDk5NjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3BpeGJ1ZmNhY2hlLmJiY2xhc3MKQEAgLTAsMCArMSw2NyBAQAorIworIyBUaGlzIGNsYXNzIHdpbGwgZ2VuZXJhdGUgdGhlIHByb3BlciBwb3N0aW5zdC9wb3N0cm0gc2NyaXB0bGV0cyBmb3IgcGl4YnVmCisjIHBhY2thZ2VzLgorIworCitERVBFTkRTICs9ICJxZW11LW5hdGl2ZSIKK2luaGVyaXQgcWVtdQorCitQSVhCVUZfUEFDS0FHRVMgPz89ICIke1BOfSIKKworcGl4YnVmY2FjaGVfY29tbW9uKCkgeworaWYgWyAieCREIiAhPSAieCIgXTsgdGhlbgorCSRJTlRFUkNFUFRfRElSL3Bvc3RpbnN0X2ludGVyY2VwdCB1cGRhdGVfcGl4YnVmX2NhY2hlICR7UEtHfSBtbHByZWZpeD0ke01MUFJFRklYfSBsaWJkaXI9JHtsaWJkaXJ9IFwKKwkJYmluZGlyPSR7YmluZGlyfSBiYXNlX2xpYmRpcj0ke2Jhc2VfbGliZGlyfQorZWxzZQorCisJIyBVcGRhdGUgdGhlIHBpeGJ1ZiBsb2FkZXJzIGluIGNhc2UgdGhleSBoYXZlbid0IGJlZW4gcmVnaXN0ZXJlZCB5ZXQKKwlHREtfUElYQlVGX01PRFVMRURJUj0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMgZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIC0tdXBkYXRlLWNhY2hlCisKKwlpZiBbIC14ICR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgXSAmJiBbIC1kICR7ZGF0YWRpcn0vaWNvbnMgXTsgdGhlbgorCQlmb3IgaWNvbmRpciBpbiAvdXNyL3NoYXJlL2ljb25zLyo7IGRvCisJCQlpZiBbIC1kICR7aWNvbmRpcn0gXTsgdGhlbgorCQkJCWd0ay11cGRhdGUtaWNvbi1jYWNoZSAtdCAtcSAke2ljb25kaXJ9CisJCQlmaQorCQlkb25lCisJZmkKK2ZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19hcHBlbmQoKSB7CisgICAgcGl4YnVmX3BrZ3MgPSBkLmdldFZhcignUElYQlVGX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgZm9yIHBrZyBpbiBwaXhidWZfcGtnczoKKyAgICAgICAgYmIubm90ZSgiYWRkaW5nIHBpeGJ1ZiBwb3N0aW5zdCBhbmQgcG9zdHJtIHNjcmlwdHMgdG8gJXMiICUgcGtnKQorICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RpbnN0JywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGQuZ2V0VmFyKCdwaXhidWZjYWNoZV9jb21tb24nLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgcG9zdHJtID0gZC5nZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcigncGtnX3Bvc3RybScsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0cm06CisgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBkLmdldFZhcigncGl4YnVmY2FjaGVfY29tbW9uJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCit9CisKK2dka3BpeGJ1Zl9jb21wbGV0ZSgpIHsKKwlHREtfUElYQlVGX0ZBVEFMX0xPQURFUj0xICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9nZGstcGl4YnVmLXF1ZXJ5LWxvYWRlcnMgLS11cGRhdGUtY2FjaGUgfHwgZXhpdCAxCit9CisKKyMKKyMgQWRkIGFuIHNzdGF0ZSBwb3N0aW5zdCBob29rIHRvIHVwZGF0ZSB0aGUgY2FjaGUgZm9yIG5hdGl2ZSBwYWNrYWdlcy4KKyMgQW4gZXJyb3IgZXhpdCBkdXJpbmcgcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBhbGxvd3MgYml0YmFrZSB0bworIyB0cnkgdG8gcmVjb3ZlciBieSByZS1idWlsZGluZyB0aGUgcGFja2FnZS4KKyMKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgcGl4YnVmY2FjaGVfc3N0YXRlX3Bvc3RpbnN0IgorCisjIFNlZSBiYXNlLmJiY2xhc3MgZm9yIHRoZSBvdGhlciBoYWxmIG9mIHRoaXMKK3BpeGJ1ZmNhY2hlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgXTsgdGhlbgorCQkke2dka3BpeGJ1Zl9jb21wbGV0ZX0KKwllbGlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdOyB0aGVuCisJCWVjaG8gIiR7Z2RrcGl4YnVmX2NvbXBsZXRlfSIgPj4gJHtTVEFHSU5HX0RJUn0vc3N0YXRlY29tcGxldGlvbnMKKwlmaQorfQorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcGtnY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQxZjg0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wa2djb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDIgQEAKK0RFUEVORFNfcHJlcGVuZCA9ICJwa2djb25maWctbmF0aXZlICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3BvcHVsYXRlX3Nkay5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NGE5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrLmJiY2xhc3MKQEAgLTAsMCArMSw3IEBACisjIFRoZSBtYWpvcml0eSBvZiBwb3B1bGF0ZV9zZGsgaXMgbG9jYXRlZCBpbiBwb3B1bGF0ZV9zZGtfYmFzZQorIyBUaGlzIGNodW5rIHNpbXBseSBmYWNpbGl0YXRlcyBjb21wYXRpYmlsaXR5IHdpdGggU0RLIG9ubHkgcmVjaXBlcy4KKworaW5oZXJpdCBwb3B1bGF0ZV9zZGtfYmFzZQorCithZGR0YXNrIHBvcHVsYXRlX3NkayBhZnRlciBkb19pbnN0YWxsIGJlZm9yZSBkb19idWlsZAorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2E5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2Jhc2UuYmJjbGFzcwpAQCAtMCwwICsxLDIwMyBAQAoraW5oZXJpdCBtZXRhCisKKyMgV2lsZGNhcmRzIHNwZWNpZnlpbmcgY29tcGxlbWVudGFyeSBwYWNrYWdlcyB0byBpbnN0YWxsIGZvciBldmVyeSBwYWNrYWdlIHRoYXQgaGFzIGJlZW4gZXhwbGljaXRseQorIyBpbnN0YWxsZWQgaW50byB0aGUgcm9vdGZzCitDT01QTEVNRU5UQVJZX0dMT0JbZGV2LXBrZ3NdID0gJyotZGV2JworQ09NUExFTUVOVEFSWV9HTE9CW3N0YXRpY2Rldi1wa2dzXSA9ICcqLXN0YXRpY2RldicKK0NPTVBMRU1FTlRBUllfR0xPQltkb2MtcGtnc10gPSAnKi1kb2MnCitDT01QTEVNRU5UQVJZX0dMT0JbZGJnLXBrZ3NdID0gJyotZGJnJworQ09NUExFTUVOVEFSWV9HTE9CW3B0ZXN0LXBrZ3NdID0gJyotcHRlc3QnCisKK2RlZiBjb21wbGVtZW50YXJ5X2dsb2JzKGZlYXR1cmV2YXIsIGQpOgorICAgIGFsbF9nbG9icyA9IGQuZ2V0VmFyRmxhZ3MoJ0NPTVBMRU1FTlRBUllfR0xPQicpCisgICAgZ2xvYnMgPSBbXQorICAgIGZlYXR1cmVzID0gc2V0KChkLmdldFZhcihmZWF0dXJldmFyLCBUcnVlKSBvciAnJykuc3BsaXQoKSkKKyAgICBmb3IgbmFtZSwgZ2xvYiBpbiBhbGxfZ2xvYnMuaXRlbXMoKToKKyAgICAgICAgaWYgbmFtZSBpbiBmZWF0dXJlczoKKyAgICAgICAgICAgIGdsb2JzLmFwcGVuZChnbG9iKQorICAgIHJldHVybiAnICcuam9pbihnbG9icykKKworU0RLSU1BR0VfRkVBVFVSRVMgPz89ICJkZXYtcGtncyBkYmctcGtncyIKK1NES0lNQUdFX0lOU1RBTExfQ09NUExFTUVOVEFSWSA9ICcke0Bjb21wbGVtZW50YXJ5X2dsb2JzKCJTREtJTUFHRV9GRUFUVVJFUyIsIGQpfScKKworaW5oZXJpdCByb290ZnNfJHtJTUFHRV9QS0dUWVBFfQorCitTREtfRElSID0gIiR7V09SS0RJUn0vc2RrIgorU0RLX09VVFBVVCA9ICIke1NES19ESVJ9L2ltYWdlIgorU0RLX0RFUExPWSA9ICIke0RFUExPWV9ESVJ9L3NkayIKKworQl90YXNrLXBvcHVsYXRlLXNkayA9ICIke1NES19ESVJ9IgorCitTREtUQVJHRVRTWVNST09UID0gIiR7U0RLUEFUSH0vc3lzcm9vdHMvJHtSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAibmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJHtNQUNISU5FfSIKK1RPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkgPz0gIiIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA/PSAiIFwKKyAgICAke0BtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsICdwYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQnKX0gXAorICAgICR7QG11bHRpbGliX3BrZ19leHRlbmQoZCwgJ3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldC1kYmcnKX0gXAorICAgICIKK1RPT0xDSEFJTl9UQVJHRVRfVEFTS19BVFRFTVBUT05MWSA/PSAiIgorVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi0ke1NES19WRVJTSU9OfSIKKworU0RLX1JERVBFTkRTID0gIiR7VE9PTENIQUlOX1RBUkdFVF9UQVNLfSAke1RPT0xDSEFJTl9IT1NUX1RBU0t9IgorU0RLX0RFUEVORFMgPSAidmlydHVhbC9mYWtlcm9vdC1uYXRpdmUgcGJ6aXAyLW5hdGl2ZSIKKworIyBXZSB3YW50IHRoZSBNVUxUSUFSQ0hfVEFSR0VUX1NZUyB0byBwb2ludCB0byB0aGUgVFVORV9QS0dBUkNILCBub3QgUEFDS0FHRV9BUkNIIGFzIGl0CisjIGNvdWxkIGJlIHNldCB0byB0aGUgTUFDSElORV9BUkNICitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID0gIiR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorCitQSUQgPSAiJHtAb3MuZ2V0cGlkKCl9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworU0RLX1BBQ0tBR0lOR19GVU5DID89ICJjcmVhdGVfc2hhciIKK1NES19QUkVfSU5TVEFMTF9DT01NQU5EID89ICIiCitTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkQgPz0gIiIKK1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMID89ICIxIgorCitTREtFWFRQQVRIID89ICJ+LyR7QGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKX1fc2RrIgorU0RLX1RJVExFID89ICIke0BkLmdldFZhcignRElTVFJPX05BTUUnLCBUcnVlKSBvciBkLmdldFZhcignRElTVFJPJywgVHJ1ZSl9IFNESyIKKworU0RLX1RBUkdFVF9NQU5JRkVTVCA9ICIke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhcmdldC5tYW5pZmVzdCIKK1NES19IT1NUX01BTklGRVNUID0gIiR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uaG9zdC5tYW5pZmVzdCIKK3B5dGhvbiB3cml0ZV90YXJnZXRfc2RrX21hbmlmZXN0ICgpIHsKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgc2RrbWFuaWZlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoIlNES19UQVJHRVRfTUFOSUZFU1QiLCBUcnVlKSkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2RrbWFuaWZlc3RkaXIpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2RrbWFuaWZlc3RkaXIpCisgICAgd2l0aCBvcGVuKGQuZ2V0VmFyKCdTREtfVEFSR0VUX01BTklGRVNUJywgVHJ1ZSksICd3JykgYXMgb3V0cHV0OgorICAgICAgICBvdXRwdXQud3JpdGUoc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIFRydWUsICd2ZXInKSkKK30KKworcHl0aG9uIHdyaXRlX2hvc3Rfc2RrX21hbmlmZXN0ICgpIHsKKyAgICBmcm9tIG9lLnNkayBpbXBvcnQgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzCisgICAgc2RrbWFuaWZlc3RkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoIlNES19IT1NUX01BTklGRVNUIiwgVHJ1ZSkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNka21hbmlmZXN0ZGlyKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNka21hbmlmZXN0ZGlyKQorICAgIHdpdGggb3BlbihkLmdldFZhcignU0RLX0hPU1RfTUFOSUZFU1QnLCBUcnVlKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgIG91dHB1dC53cml0ZShzZGtfbGlzdF9pbnN0YWxsZWRfcGFja2FnZXMoZCwgRmFsc2UsICd2ZXInKSkKK30KKworUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkRfYXBwZW5kID0gIiB3cml0ZV90YXJnZXRfc2RrX21hbmlmZXN0IDsgIgorUE9QVUxBVEVfU0RLX1BPU1RfSE9TVF9DT01NQU5EX2FwcGVuZCA9ICIgd3JpdGVfaG9zdF9zZGtfbWFuaWZlc3Q7ICIKKworIyBTb21lIGFyY2hzIG92ZXJyaWRlIHRoaXMsIHdlIG5lZWQgdGhlIG5hdGl2ZXNkayB2ZXJzaW9uCisjIHR1cm5zIG91dCB0aGlzIGlzIGhhcmQgdG8gZ2V0IGZyb20gdGhlIGRhdGFzdG9yZSBkdWUgdG8gVFJBTlNMQVRFRF9UQVJHRVRfQVJDSAorIyBtYW5pcHVsYXRpb24uCitTREtfT0xERVNUX0tFUk5FTCA9ICIyLjYuMzIiCisKK2Zha2Vyb290IHB5dGhvbiBkb19wb3B1bGF0ZV9zZGsoKSB7CisgICAgZnJvbSBvZS5zZGsgaW1wb3J0IHBvcHVsYXRlX3NkaworICAgIGZyb20gb2UubWFuaWZlc3QgaW1wb3J0IGNyZWF0ZV9tYW5pZmVzdCwgTWFuaWZlc3QKKworICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0siLCBwbiwgZCkKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fVEFSR0VUX1RBU0tfQVRURU1QVE9OTFkiLCBwbiwgZCkKKworICAgIGxkID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgbGQuc2V0VmFyKCJQS0dEQVRBX0RJUiIsICIke1NUQUdJTkdfRElSfS8ke1NES19BUkNIfS0ke1NES1BLR1NVRkZJWH0ke1NES19WRU5ET1J9LSR7U0RLX09TfS9wa2dkYXRhIikKKyAgICBydW50aW1lX21hcHBpbmdfcmVuYW1lKCJUT09MQ0hBSU5fSE9TVF9UQVNLIiwgcG4sIGxkKQorICAgIHJ1bnRpbWVfbWFwcGluZ19yZW5hbWUoIlRPT0xDSEFJTl9IT1NUX1RBU0tfQVRURU1QVE9OTFkiLCBwbiwgbGQpCisgICAgZC5zZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0siLCBsZC5nZXRWYXIoIlRPT0xDSEFJTl9IT1NUX1RBU0siLCBUcnVlKSkKKyAgICBkLnNldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIGxkLmdldFZhcigiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSIsIFRydWUpKQorICAgIAorICAgICMgY3JlYXRlIHRhcmdldC9ob3N0IFNESyBtYW5pZmVzdHMKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyPWQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3R5cGU9TWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfSE9TVCkKKyAgICBjcmVhdGVfbWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyPWQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0X3R5cGU9TWFuaWZlc3QuTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUKQorCisgICAgcG9wdWxhdGVfc2RrKGQpCisKKyAgICAjIFByb2Nlc3MgREVGQVVMVFRVTkUKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNyZWF0ZV9zZGtfZmlsZXMiLCBkKQorCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJ0YXJfc2RrIiwgZCkKKworICAgIHNka19wYWNrYWdpbmdfZnVuYyA9IGQuZ2V0VmFyKCJTREtfUEFDS0FHSU5HX0ZVTkMiLCBUcnVlKSBvciAiIgorICAgIGlmIHNka19wYWNrYWdpbmdfZnVuYy5zdHJpcCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZC5nZXRWYXIoIlNES19QQUNLQUdJTkdfRlVOQyIsIFRydWUpLCBkKQorfQorCitmYWtlcm9vdCBjcmVhdGVfc2RrX2ZpbGVzKCkgeworCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8KKworCSMgUmVwbGFjZSB0aGUgIyNERUZBVUxUX0lOU1RBTExfRElSIyMgd2l0aCB0aGUgY29ycmVjdCBwYXR0ZXJuLgorCSMgRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICcrJyBhbmQgJy4nIGluIHRoZSBTREtQQVRICisJZXNjYXBlZF9zZGtwYXRoPSQoZWNobyAke1NES1BBVEh9IHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisJc2VkIC1pIC1lICJzOiMjREVGQVVMVF9JTlNUQUxMX0RJUiMjOiRlc2NhcGVkX3Nka3BhdGg6IiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vcmVsb2NhdGVfc2RrLnB5Cit9CisKK1NES1RBUk9QVFMgPSAiLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdCIKKworZmFrZXJvb3QgdGFyX3NkaygpIHsKKwkjIFBhY2thZ2UgaXQgdXAKKwlta2RpciAtcCAke1NES19ERVBMT1l9CisJY2QgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisJdGFyICR7U0RLVEFST1BUU30gLWNmIC0gLiB8IHBiemlwMiA+ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0udGFyLmJ6MgorfQorCitmYWtlcm9vdCBjcmVhdGVfc2hhcigpIHsKKwkjIGNvcHkgaW4gdGhlIHRlbXBsYXRlIHNoYXIgZXh0cmFjdG9yIHNjcmlwdAorCWNwICR7Q09SRUJBU0V9L21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwlybSAtZiAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQgJHtUfS9wb3N0X2luc3RhbGxfY29tbWFuZAorCisJaWYgWyAke1NES19SRUxPQ0FURV9BRlRFUl9JTlNUQUxMfSAtZXEgMSBdIDsgdGhlbgorCQljcCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL3Rvb2xjaGFpbi1zaGFyLXJlbG9jYXRlLnNoICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQKKwlmaQorCWNhdCA8PCAiRU9GIiA+PiAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQKKyR7U0RLX1BSRV9JTlNUQUxMX0NPTU1BTkR9CitFT0YKKworCWNhdCA8PCAiRU9GIiA+PiAke1R9L3Bvc3RfaW5zdGFsbF9jb21tYW5kCiske1NES19QT1NUX0lOU1RBTExfQ09NTUFORH0KK0VPRgorCXNlZCAtaSAtZSAnL0BTREtfUFJFX0lOU1RBTExfQ09NTUFOREAvciAke1R9L3ByZV9pbnN0YWxsX2NvbW1hbmQnIFwKKwkJLWUgJy9AU0RLX1BPU1RfSU5TVEFMTF9DT01NQU5EQC9yICR7VH0vcG9zdF9pbnN0YWxsX2NvbW1hbmQnIFwKKwkJJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBzdWJzdGl0dXRlIHZhcmlhYmxlcworCXNlZCAtaSAtZSAncyNAU0RLX0FSQ0hAIyR7U0RLX0FSQ0h9I2cnIFwKKwkJLWUgJ3MjQFNES1BBVEhAIyR7U0RLUEFUSH0jZycgXAorCQktZSAncyNAU0RLRVhUUEFUSEAjJHtTREtFWFRQQVRIfSNnJyBcCisJCS1lICdzI0BPTERFU1RfS0VSTkVMQCMke1NES19PTERFU1RfS0VSTkVMfSNnJyBcCisJCS1lICdzI0BSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTQCMke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9I2cnIFwKKwkJLWUgJ3MjQFNES19USVRMRUAjJHtTREtfVElUTEV9I2cnIFwKKwkJLWUgJ3MjQFNES19WRVJTSU9OQCMke1NES19WRVJTSU9OfSNnJyBcCisJCS1lICcvQFNES19QUkVfSU5TVEFMTF9DT01NQU5EQC9kJyBcCisJCS1lICcvQFNES19QT1NUX0lOU1RBTExfQ09NTUFOREAvZCcgXAorCQkke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnNoCisKKwkjIGFkZCBleGVjdXRpb24gcGVybWlzc2lvbgorCWNobW9kICt4ICR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2gKKworCSMgYXBwZW5kIHRoZSBTREsgdGFyYmFsbAorCWNhdCAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIgPj4gJHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS5zaAorCisJIyBkZWxldGUgdGhlIG9sZCB0YXJiYWxsLCB3ZSBkb24ndCBuZWVkIGl0IGFueW1vcmUKKwlybSAke1NES19ERVBMT1l9LyR7VE9PTENIQUlOX09VVFBVVE5BTUV9LnRhci5iejIKK30KKworcG9wdWxhdGVfc2RrX2xvZ19jaGVjaygpIHsKKwlmb3IgdGFyZ2V0IGluICQqCisJZG8KKwkJbGZfcGF0aD0iYGRpcm5hbWUgJHtCQl9MT0dGSUxFfWAvbG9nLmRvXyR0YXJnZXQuJHtQSUR9IgorCisJCWVjaG8gImxvZ19jaGVjazogVXNpbmcgJGxmX3BhdGggYXMgbG9nZmlsZSIKKworCQlpZiB0ZXN0IC1lICIkbGZfcGF0aCIKKwkJdGhlbgorCQkJJHtJTUFHRV9QS0dUWVBFfV9sb2dfY2hlY2sgJHRhcmdldCAkbGZfcGF0aAorCQllbHNlCisJCQllY2hvICJDYW5ub3QgZmluZCBsb2dmaWxlIFskbGZfcGF0aF0iCisJCWZpCisJCWVjaG8gIkxvZ2ZpbGUgaXMgY2xlYW4iCisJZG9uZQorfQorCitkb19wb3B1bGF0ZV9zZGtbZGlyc10gPSAiJHtUT1BESVJ9IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICIke0AnICcuam9pbihbeCArICc6ZG9fcG9wdWxhdGVfc3lzcm9vdCcgZm9yIHggaW4gZC5nZXRWYXIoJ1NES19ERVBFTkRTJywgVHJ1ZSkuc3BsaXQoKV0pfSAgJHtAZC5nZXRWYXJGbGFnKCdkb19yb290ZnMnLCAnZGVwZW5kcycsIEZhbHNlKX0iCitkb19wb3B1bGF0ZV9zZGtbcmRlcGVuZHNdID0gIiR7QCcgJy5qb2luKFt4ICsgJzpkb19wb3B1bGF0ZV9zeXNyb290JyBmb3IgeCBpbiBkLmdldFZhcignU0RLX1JERVBFTkRTJywgVHJ1ZSkuc3BsaXQoKV0pfSIKK2RvX3BvcHVsYXRlX3Nka1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2VkYXRhIGRvX3BhY2thZ2Vfd3JpdGVfcnBtIGRvX3BhY2thZ2Vfd3JpdGVfaXBrIGRvX3BhY2thZ2Vfd3JpdGVfZGViIgorYWRkdGFzayBwb3B1bGF0ZV9zZGsKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wb3B1bGF0ZV9zZGtfZXh0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZjg4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcG9wdWxhdGVfc2RrX2V4dC5iYmNsYXNzCkBAIC0wLDAgKzEsMjc1IEBACisjIEV4dGVuc2libGUgU0RLCisKK2luaGVyaXQgcG9wdWxhdGVfc2RrX2Jhc2UKKworIyBOT1RFOiBub3JtYWxseSB5b3UgY2Fubm90IHVzZSB0YXNrIG92ZXJyaWRlcyBmb3IgdGhpcyBraW5kIG9mIHRoaW5nIC0gdGhpcworIyBvbmx5IHdvcmtzIGJlY2F1c2Ugb2YgZ2V0X3Nka19leHRfcmRlcGVuZHMoKQorCitUT09MQ0hBSU5fSE9TVF9UQVNLX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIgXAorICAgIG1ldGEtZW52aXJvbm1lbnQtZXh0c2RrLSR7TUFDSElORX0gXAorICAgICIKKworVE9PTENIQUlOX1RBUkdFVF9UQVNLX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIiCisKK1NES19SREVQRU5EU19hcHBlbmRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiAke1NES19UQVJHRVRTfSIKKworU0RLX1JFTE9DQVRFX0FGVEVSX0lOU1RBTExfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIjAiCisKK1NES19MT0NBTF9DT05GX1dISVRFTElTVCA/PSAiIgorU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUID89ICJDT05GX1ZFUlNJT04gQkJfTlVNQkVSX1RIUkVBRFMgUEFSQUxMRUxfTUFLRSBQUlNFUlZfSE9TVCIKK1NES19JTkhFUklUX0JMQUNLTElTVCA/PSAiYnVpbGRoaXN0b3J5IGljZWNjIgorU0RLX1VQREFURV9VUkwgPz0gIiIKKworU0RLX1RBUkdFVFMgPz0gIiR7UE59IgorT0VfSU5JVF9FTlZfU0NSSVBUID89ICJvZS1pbml0LWJ1aWxkLWVudiIKKworIyBUaGUgZmlsZXMgZnJvbSBDT1JFQkFTRSB0aGF0IHlvdSB3YW50IHByZXNlcnZlZCBpbiB0aGUgQ09SRUJBU0UgY29waWVkCisjIGludG8gdGhlIHNkay4gVGhpcyBhbGxvd3Mgc29tZW9uZSB0byBoYXZlIHRoZWlyIG93biBzZXR1cCBzY3JpcHRzIGluCisjIENPUkVCQVNFIGJlIHByZXNlcnZlZCBhcyB3ZWxsIGFzIHVudHJhY2tlZCBmaWxlcy4KK0NPUkVCQVNFX0ZJTEVTID89ICIgXAorICAgIG9lLWluaXQtYnVpbGQtZW52IFwKKyAgICBvZS1pbml0LWJ1aWxkLWVudi1tZW1yZXMgXAorICAgIHNjcmlwdHMgXAorICAgIExJQ0VOU0UgXAorICAgIC50ZW1wbGF0ZWNvbmYgXAorIgorCitTREtfRElSX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1dPUktESVJ9L3Nkay1leHQiCitCX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke1NES19ESVJ9IgorVE9PTENIQUlOX09VVFBVVE5BTUVfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7U0RLX05BTUV9LXRvb2xjaGFpbi1leHQtJHtTREtfVkVSU0lPTn0iCisKK1NES19USVRMRV90YXNrLXBvcHVsYXRlLXNkay1leHQgPSAiJHtAZC5nZXRWYXIoJ0RJU1RST19OQU1FJywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpfSBFeHRlbnNpYmxlIFNESyIKKworcHl0aG9uIGNvcHlfYnVpbGRzeXN0ZW0gKCkgeworICAgIGltcG9ydCByZQorICAgIGltcG9ydCBvZS5jb3B5X2J1aWxkc3lzdGVtCisKKyAgICBvZV9pbml0X2Vudl9zY3JpcHQgPSBkLmdldFZhcignT0VfSU5JVF9FTlZfU0NSSVBUJywgVHJ1ZSkKKworICAgIGNvbmZfYmJwYXRoID0gJycKKyAgICBjb25mX2luaXRwYXRoID0gJycKKyAgICBjb3JlX21ldGFfc3ViZGlyID0gJycKKworICAgICMgQ29weSBpbiBhbGwgbWV0YWRhdGEgbGF5ZXJzICsgYml0YmFrZSAoYXMgcmVwb3NpdG9yaWVzKQorICAgIGJ1aWxkc3lzdGVtID0gb2UuY29weV9idWlsZHN5c3RlbS5CdWlsZFN5c3RlbShkKQorICAgIGJhc2VvdXRwYXRoID0gZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKSArICcvJyArIGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSkKKyAgICBsYXllcnNfY29waWVkID0gYnVpbGRzeXN0ZW0uY29weV9iaXRiYWtlX2FuZF9sYXllcnMoYmFzZW91dHBhdGggKyAnL2xheWVycycpCisKKyAgICBzZGtiYmxheWVycyA9IFtdCisgICAgY29yZWJhc2UgPSBvcy5wYXRoLmJhc2VuYW1lKGQuZ2V0VmFyKCdDT1JFQkFTRScsIFRydWUpKQorICAgIGZvciBsYXllciBpbiBsYXllcnNfY29waWVkOgorICAgICAgICBpZiBjb3JlYmFzZSA9PSBvcy5wYXRoLmJhc2VuYW1lKGxheWVyKToKKyAgICAgICAgICAgIGNvbmZfYmJwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBsYXllciwgJ2JpdGJha2UnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2RrYmJsYXllcnMuYXBwZW5kKGxheWVyKQorCisgICAgZm9yIHBhdGggaW4gb3MubGlzdGRpcihiYXNlb3V0cGF0aCArICcvbGF5ZXJzJyk6CisgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLmpvaW4oJ2xheWVycycsIHBhdGgsIG9lX2luaXRfZW52X3NjcmlwdCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCByZWxwYXRoKSk6CisgICAgICAgICAgICBjb25mX2luaXRwYXRoID0gcmVscGF0aAorCisgICAgICAgIHJlbHBhdGggPSBvcy5wYXRoLmpvaW4oJ2xheWVycycsIHBhdGgsICdzY3JpcHRzJywgJ2RldnRvb2wnKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsIHJlbHBhdGgpKToKKyAgICAgICAgICAgIHNjcmlwdHJlbHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVscGF0aCkKKworICAgICAgICByZWxwYXRoID0gb3MucGF0aC5qb2luKCdsYXllcnMnLCBwYXRoLCAnbWV0YScpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihiYXNlb3V0cGF0aCwgcmVscGF0aCwgJ2xpYicsICdvZScpKToKKyAgICAgICAgICAgIGNvcmVfbWV0YV9zdWJkaXIgPSByZWxwYXRoCisKKyAgICBkLnNldFZhcignb2VfaW5pdF9idWlsZF9lbnZfcGF0aCcsIGNvbmZfaW5pdHBhdGgpCisgICAgZC5zZXRWYXIoJ3NjcmlwdHJlbHBhdGgnLCBzY3JpcHRyZWxwYXRoKQorCisgICAgIyBXcml0ZSBvdXQgY29uZmlnIGZpbGUgZm9yIGRldnRvb2wKKyAgICBpbXBvcnQgQ29uZmlnUGFyc2VyCisgICAgY29uZmlnID0gQ29uZmlnUGFyc2VyLlNhZmVDb25maWdQYXJzZXIoKQorICAgIGNvbmZpZy5hZGRfc2VjdGlvbignR2VuZXJhbCcpCisgICAgY29uZmlnLnNldCgnR2VuZXJhbCcsICdiaXRiYWtlX3N1YmRpcicsIGNvbmZfYmJwYXRoKQorICAgIGNvbmZpZy5zZXQoJ0dlbmVyYWwnLCAnaW5pdF9wYXRoJywgY29uZl9pbml0cGF0aCkKKyAgICBjb25maWcuc2V0KCdHZW5lcmFsJywgJ2NvcmVfbWV0YV9zdWJkaXInLCBjb3JlX21ldGFfc3ViZGlyKQorICAgIGNvbmZpZy5hZGRfc2VjdGlvbignU0RLJykKKyAgICBjb25maWcuc2V0KCdTREsnLCAnc2RrX3RhcmdldHMnLCBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKSkKKyAgICB1cGRhdGV1cmwgPSBkLmdldFZhcignU0RLX1VQREFURV9VUkwnLCBUcnVlKQorICAgIGlmIHVwZGF0ZXVybDoKKyAgICAgICAgY29uZmlnLnNldCgnU0RLJywgJ3VwZGF0ZXNlcnZlcicsIHVwZGF0ZXVybCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnY29uZicpKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oYmFzZW91dHBhdGgsICdjb25mJywgJ2RldnRvb2wuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgIGNvbmZpZy53cml0ZShmKQorCisgICAgIyBDcmVhdGUgYSBsYXllciBmb3IgbmV3IHJlY2lwZXMgLyBhcHBlbmRzCisgICAgYmJwYXRoID0gZC5nZXRWYXIoJ0JCUEFUSCcsIFRydWUpCisgICAgYmIucHJvY2Vzcy5ydW4oWydkZXZ0b29sJywgJy0tYmJwYXRoJywgYmJwYXRoLCAnLS1iYXNlcGF0aCcsIGJhc2VvdXRwYXRoLCAnY3JlYXRlLXdvcmtzcGFjZScsICctLWNyZWF0ZS1vbmx5Jywgb3MucGF0aC5qb2luKGJhc2VvdXRwYXRoLCAnd29ya3NwYWNlJyldKQorCisgICAgIyBDcmVhdGUgYmJsYXllcnMuY29uZgorICAgIGJiLnV0aWxzLm1rZGlyaGllcihiYXNlb3V0cGF0aCArICcvY29uZicpCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL2JibGF5ZXJzLmNvbmYnLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJyMgV0FSTklORzogdGhpcyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBpblxuJykKKyAgICAgICAgZi53cml0ZSgnIyBtb3N0IGNhc2VzIHNob3VsZCBub3QgYmUgZWRpdGVkLiBJZiB5b3UgbmVlZCBtb3JlIGZsZXhpYmlsaXR5IHRoYW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgdGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzLCBpdCBpcyBzdHJvbmdseSBzdWdnZXN0ZWQgdGhhdCB5b3Ugc2V0XG4nKQorICAgICAgICBmLndyaXRlKCcjIHVwIGEgcHJvcGVyIGluc3RhbmNlIG9mIHRoZSBmdWxsIGJ1aWxkIHN5c3RlbSBhbmQgdXNlIHRoYXQgaW5zdGVhZC5cblxuJykKKworICAgICAgICBmLndyaXRlKCdMQ09ORl9WRVJTSU9OID0gIiVzIlxuXG4nICUgZC5nZXRWYXIoJ0xDT05GX1ZFUlNJT04nLCBGYWxzZSkpCisgICAgICAgIGYud3JpdGUoJ0JCUEFUSCA9ICIkJyArICd7VE9QRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ1NES0JBU0VNRVRBUEFUSCA9ICIkJyArICd7VE9QRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ0JCTEFZRVJTIDo9ICIgXFxcbicpCisgICAgICAgIGZvciBsYXllcnJlbHBhdGggaW4gc2RrYmJsYXllcnM6CisgICAgICAgICAgICBmLndyaXRlKCcgICAgJCcgKyAne1NES0JBU0VNRVRBUEFUSH0vbGF5ZXJzLyVzIFxcXG4nICUgbGF5ZXJyZWxwYXRoKQorICAgICAgICBmLndyaXRlKCcgICAgJCcgKyAne1NES0JBU0VNRVRBUEFUSH0vd29ya3NwYWNlIFxcXG4nKQorICAgICAgICBmLndyaXRlKCcgICAgIlxuJykKKworICAgICMgQ3JlYXRlIGxvY2FsLmNvbmYKKyAgICBsb2NhbF9jb25mX3doaXRlbGlzdCA9IChkLmdldFZhcignU0RLX0xPQ0FMX0NPTkZfV0hJVEVMSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBsb2NhbF9jb25mX2JsYWNrbGlzdCA9IChkLmdldFZhcignU0RLX0xPQ0FMX0NPTkZfQkxBQ0tMSVNUJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkKKyAgICBkZWYgaGFuZGxlX3Zhcih2YXJuYW1lLCBvcmlndmFsdWUsIG9wLCBuZXdsaW5lcyk6CisgICAgICAgIGlmIHZhcm5hbWUgaW4gbG9jYWxfY29uZl9ibGFja2xpc3Qgb3IgKG9yaWd2YWx1ZS5zdHJpcCgpLnN0YXJ0c3dpdGgoJy8nKSBhbmQgbm90IHZhcm5hbWUgaW4gbG9jYWxfY29uZl93aGl0ZWxpc3QpOgorICAgICAgICAgICAgbmV3bGluZXMuYXBwZW5kKCcjIFJlbW92ZWQgb3JpZ2luYWwgc2V0dGluZyBvZiAlc1xuJyAlIHZhcm5hbWUpCisgICAgICAgICAgICByZXR1cm4gTm9uZSwgb3AsIDAsIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBvcmlndmFsdWUsIG9wLCAwLCBUcnVlCisgICAgdmFybGlzdCA9IFsnW14jPSsgXSonXQorICAgIGJ1aWxkZGlyID0gZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpCisgICAgd2l0aCBvcGVuKGJ1aWxkZGlyICsgJy9jb25mL2xvY2FsLmNvbmYnLCAncicpIGFzIGY6CisgICAgICAgIG9sZGxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICh1cGRhdGVkLCBuZXdsaW5lcykgPSBiYi51dGlscy5lZGl0X21ldGFkYXRhKG9sZGxpbmVzLCB2YXJsaXN0LCBoYW5kbGVfdmFyKQorCisgICAgd2l0aCBvcGVuKGJhc2VvdXRwYXRoICsgJy9jb25mL2xvY2FsLmNvbmYnLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJyMgV0FSTklORzogdGhpcyBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBpblxuJykKKyAgICAgICAgZi53cml0ZSgnIyBtb3N0IGNhc2VzIHNob3VsZCBub3QgYmUgZWRpdGVkLiBJZiB5b3UgbmVlZCBtb3JlIGZsZXhpYmlsaXR5IHRoYW5cbicpCisgICAgICAgIGYud3JpdGUoJyMgdGhpcyBjb25maWd1cmF0aW9uIHByb3ZpZGVzLCBpdCBpcyBzdHJvbmdseSBzdWdnZXN0ZWQgdGhhdCB5b3Ugc2V0XG4nKQorICAgICAgICBmLndyaXRlKCcjIHVwIGEgcHJvcGVyIGluc3RhbmNlIG9mIHRoZSBmdWxsIGJ1aWxkIHN5c3RlbSBhbmQgdXNlIHRoYXQgaW5zdGVhZC5cblxuJykKKyAgICAgICAgZm9yIGxpbmUgaW4gbmV3bGluZXM6CisgICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgYW5kIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisKKyAgICAgICAgZi53cml0ZSgnSU5IRVJJVCArPSAiJXMiXG5cbicgJSAndW5pbmF0aXZlJykKKyAgICAgICAgZi53cml0ZSgnQ09ORl9WRVJTSU9OID0gIiVzIlxuXG4nICUgZC5nZXRWYXIoJ0NPTkZfVkVSU0lPTicsIEZhbHNlKSkKKworICAgICAgICAjIFNvbWUgY2xhc3NlcyBhcmUgbm90IHN1aXRhYmxlIGZvciBTREssIHJlbW92ZSB0aGVtIGZyb20gSU5IRVJJVAorICAgICAgICBmLndyaXRlKCdJTkhFUklUX3JlbW92ZSA9ICIlcyJcbicgJSBkLmdldFZhcignU0RLX0lOSEVSSVRfQkxBQ0tMSVNUJykpCisKKyAgICAgICAgIyBCeXBhc3MgdGhlIGRlZmF1bHQgY29ubmVjdGl2aXR5IGNoZWNrIGlmIGFueQorICAgICAgICBmLndyaXRlKCdDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyA9ICIiXG5cbicpCisKKyAgICAgICAgIyBBbm90aGVyIGhhY2ssIGJ1dCB3ZSB3YW50IHRoZSBuYXRpdmUgcGFydCBvZiBzc3RhdGUgdG8gYmUga2VwdCB0aGUgc2FtZQorICAgICAgICAjIHJlZ2FyZGxlc3Mgb2YgdGhlIGhvc3QgZGlzdHJvCisgICAgICAgIGZpeGVkbHNic3RyaW5nID0gJ1NESy1GaXhlZCcKKyAgICAgICAgZi53cml0ZSgnTkFUSVZFTFNCU1RSSU5HX2ZvcmNldmFyaWFibGUgPSAiJXMiXG5cbicgJSBmaXhlZGxzYnN0cmluZykKKworICAgICAgICAjIEVuc3VyZSBsb2NrZWQgc3N0YXRlIGNhY2hlIG9iamVjdHMgYXJlIHJlLXVzZWQgd2l0aG91dCBlcnJvcgorICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19DSEVDS19MRVZFTCA9ICJ3YXJuIlxuXG4nKQorCisgICAgICAgIGYud3JpdGUoJ3JlcXVpcmUgY29uZi9sb2NrZWQtc2lncy5pbmNcbicpCisgICAgICAgIGYud3JpdGUoJ3JlcXVpcmUgY29uZi93b3JrLWNvbmZpZy5pbmNcbicpCisKKyAgICBzaWdmaWxlID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSArICcvbG9ja2VkLXNpZ3MuaW5jJworICAgIG9lLmNvcHlfYnVpbGRzeXN0ZW0uZ2VuZXJhdGVfbG9ja2VkX3NpZ3Moc2lnZmlsZSwgZCkKKworICAgICMgRmlsdGVyIHRoZSBsb2NrZWQgc2lnbmF0dXJlcyBmaWxlIHRvIGp1c3QgdGhlIHNzdGF0ZSB0YXNrcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgorICAgIGFsbG93ZWRfdGFza3MgPSBbJ2RvX3BvcHVsYXRlX2xpYycsICdkb19wb3B1bGF0ZV9zeXNyb290JywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2VfcWEnLCAnZG9fZGVwbG95J10KKyAgICBleGNsdWRlZF90YXJnZXRzID0gZC5nZXRWYXIoJ1NES19UQVJHRVRTJywgVHJ1ZSkKKyAgICBsb2NrZWRzaWdzX3BydW5lZCA9IGJhc2VvdXRwYXRoICsgJy9jb25mL2xvY2tlZC1zaWdzLmluYycKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLnBydW5lX2xvY2tlZHNpZ3MoYWxsb3dlZF90YXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRfdGFyZ2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2Vkc2lnc19wcnVuZWQpCisKKyAgICBzc3RhdGVfb3V0ID0gYmFzZW91dHBhdGggKyAnL3NzdGF0ZS1jYWNoZScKKyAgICBiYi51dGlscy5yZW1vdmUoc3N0YXRlX291dCwgVHJ1ZSkKKyAgICBvZS5jb3B5X2J1aWxkc3lzdGVtLmNyZWF0ZV9sb2NrZWRfc3N0YXRlX2NhY2hlKGxvY2tlZHNpZ3NfcHJ1bmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzdGF0ZV9vdXQsIGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZGxzYnN0cmluZykKKworICAgICMgQ3JlYXRlIGEgZHVtbXkgY29uZmlnIGZpbGUgZm9yIGFkZGl0aW9uYWwgc2V0dGluZ3MKKyAgICB3aXRoIG9wZW4oYmFzZW91dHBhdGggKyAnL2NvbmYvd29yay1jb25maWcuaW5jJywgJ3cnKSBhcyBmOgorICAgICAgICBwYXNzCit9CisKK2RlZiBleHRzZGtfZ2V0X2J1aWxkdG9vbHNfZmlsZW5hbWUoZCk6CisgICAgIyBUaGlzIGlzIHNvbWV3aGF0IG9mIGEgaGFjaworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BOJywgJ2J1aWxkdG9vbHMtdGFyYmFsbCcpCisgICAgcmV0dXJuIGxvY2FsZGF0YS5leHBhbmQoJyR7U0RLX05BTUV9LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtKi5zaCcpCisKK2luc3RhbGxfdG9vbHMoKSB7CisJaW5zdGFsbCAtZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9CisJbG5yICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9L2RldnRvb2wgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9kZXZ0b29sCisJbG5yICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8ke3NjcmlwdHJlbHBhdGh9L3JlY2lwZXRvb2wgJHtTREtfT1VUUFVUfS8ke1NES1BBVEhOQVRJVkV9JHtiaW5kaXJfbmF0aXZlc2RrfS9yZWNpcGV0b29sCisJdG91Y2ggJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9Ly5kZXZ0b29sYmFzZQorCisJIyBmaW5kIGxhdGVzdCBidWlsZHRvb2xzLXRhcmJhbGwgYW5kIGluc3RhbGwgaXQKKwlidWlsZHRvb2xzX3BhdGg9YGxzIC10MSAke1NES19ERVBMT1l9LyR7QGV4dHNka19nZXRfYnVpbGR0b29sc19maWxlbmFtZShkKX0gfCBoZWFkIC1uMWAKKwlpbnN0YWxsICRidWlsZHRvb2xzX3BhdGggJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9CisKKwlpbnN0YWxsICR7U0RLX0RFUExPWX0vJHtCVUlMRF9BUkNIfS1uYXRpdmVzZGstbGliYy50YXIuYnoyICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfQorfQorCisjIFNpbmNlIGJpdGJha2Ugd29uJ3QgcnVuIGFzIHJvb3QgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHRyeSBhbmQgaW5zdGFsbAorIyB0aGUgZXh0ZW5zaWJsZSBzZGsgYXMgcm9vdC4KK3Nka19leHRfcHJlaW5zdCgpIHsKKwlpZiBbICJgaWQgLXVgIiA9ICIwIiBdOyB0aGVuCisJCWVjaG8gIkVSUk9SOiBUaGUgZXh0ZW5zaWJsZSBzZGsgY2Fubm90IGJlIGluc3RhbGxlZCBhcyByb290LiIKKwkJZXhpdCAxCisJZmkKKwlTREtfRVhURU5TSUJMRT0iMSIKK30KK1NES19QUkVfSU5TVEFMTF9DT01NQU5EX3Rhc2stcG9wdWxhdGUtc2RrLWV4dCA9ICIke3Nka19leHRfcHJlaW5zdH0iCisKKyMgRklYTUUgdGhpcyBwcmVwYXJhdGlvbiBzaG91bGQgYmUgZG9uZSBhcyBwYXJ0IG9mIHRoZSBTREsgY29uc3RydWN0aW9uCitzZGtfZXh0X3Bvc3RpbnN0KCkgeworCXByaW50ZiAiXG5FeHRyYWN0aW5nIGJ1aWxkdG9vbHMuLi5cbiIKKwljZCAkdGFyZ2V0X3Nka19kaXIKKwlwcmludGYgImJ1aWxkdG9vbHNcbnkiIHwgLi8qYnVpbGR0b29scy1uYXRpdmVzZGstc3RhbmRhbG9uZSogPiAvZGV2L251bGwKKworCSMgTWFrZSBzdXJlIHdoZW4gdGhlIHVzZXIgc2V0cyB1cCB0aGUgZW52aXJvbm1lbnQsIHRoZXkgYWxzbyBnZXQKKwkjIHRoZSBidWlsZHRvb2xzLXRhcmJhbGwgdG9vbHMgaW4gdGhlaXIgcGF0aC4KKwllY2hvICIuICR0YXJnZXRfc2RrX2Rpci9idWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwKiIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBBbGxvdyBiaXRiYWtlIGVudmlyb25tZW50IHNldHVwIHRvIGJlIHJhbiBhcyBwYXJ0IG9mIHRoaXMgc2RrLgorCWVjaG8gImV4cG9ydCBPRV9TS0lQX1NES19DSEVDSz0xIiA+PiAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAqCisKKwkjIEEgYml0IG9mIGFub3RoZXIgaGFjaywgYnV0IHdlIG5lZWQgdGhpcyBpbiB0aGUgcGF0aCBvbmx5IGZvciBkZXZ0b29sCisJIyBzbyBwdXQgaXQgYXQgdGhlIGVuZCBvZiAkUEFUSC4KKwllY2hvICJleHBvcnQgUEFUSD1cJFBBVEg6JHRhcmdldF9zZGtfZGlyL3N5c3Jvb3RzLyR7U0RLX1NZU30vJHtiaW5kaXJfbmF0aXZlc2RrfSIgPj4gJHRhcmdldF9zZGtfZGlyL2Vudmlyb25tZW50LXNldHVwKgorCisJIyBGb3Igbm93IHRoaXMgaXMgd2hlcmUgdW5pbmF0aXZlLmJiY2xhc3MgZXhwZWN0cyB0aGUgdGFyYmFsbAorCW12ICotbmF0aXZlc2RrLWxpYmMudGFyLiogJHRhcmdldF9zZGtfZGlyL2BkaXJuYW1lICR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH1gCisKKwlpZiBbICIkcHJlcGFyZV9idWlsZHN5c3RlbSIgIT0gIm5vIiBdOyB0aGVuCisJICAgIHByaW50ZiAiUHJlcGFyaW5nIGJ1aWxkIHN5c3RlbS4uLlxuIgorCSAgICAjIGRhc2ggd2hpY2ggaXMgL2Jpbi9zaCBvbiBVYnVudHUgd2lsbCBub3QgcHJlc2VydmUgdGhlCisJICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIGZpcnN0IHJhbiwgbm9yIHdpbGwgaXQgc2V0ICQxIHdoZW4KKwkgICAgIyBzb3VyY2luZyBhIHNjcmlwdC4gVGhhdCBpcyB3aHkgdGhpcyBoYXMgdG8gbG9vayBzbyB1Z2x5LgorCSAgICBzaCAtYyAiLiBidWlsZHRvb2xzL2Vudmlyb25tZW50LXNldHVwKiA+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nICYmIGNkICR0YXJnZXRfc2RrX2Rpci9gZGlybmFtZSAke29lX2luaXRfYnVpbGRfZW52X3BhdGh9YCAmJiBzZXQgJHRhcmdldF9zZGtfZGlyICYmIC4gJHRhcmdldF9zZGtfZGlyLyR7b2VfaW5pdF9idWlsZF9lbnZfcGF0aH0gJHRhcmdldF9zZGtfZGlyID4+IHByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nICYmIGJpdGJha2UgJHtTREtfVEFSR0VUU30gPj4gcHJlcGFyaW5nX2J1aWxkX3N5c3RlbS5sb2ciIHx8IHsgZWNobyAiU0RLIHByZXBhcmF0aW9uIGZhaWxlZDogc2VlIGBwd2RgL3ByZXBhcmluZ19idWlsZF9zeXN0ZW0ubG9nIiA7IGV4aXQgMSA7IH0KKwlmaQorCWVjaG8gZG9uZQorfQorCitTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gIiR7c2RrX2V4dF9wb3N0aW5zdH0iCisKK1NES19QT1NUUFJPQ0VTU19DT01NQU5EX3ByZXBlbmRfdGFzay1wb3B1bGF0ZS1zZGstZXh0ID0gImNvcHlfYnVpbGRzeXN0ZW07IGluc3RhbGxfdG9vbHM7ICIKKworZmFrZXJvb3QgcHl0aG9uIGRvX3BvcHVsYXRlX3Nka19leHQoKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJkb19wb3B1bGF0ZV9zZGsiLCBkKQorfQorCitkZWYgZ2V0X3Nka19leHRfcmRlcGVuZHMoZCk6CisgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICBsb2NhbGRhdGEuYXBwZW5kVmFyKCdPVkVSUklERVMnLCAnOnRhc2stcG9wdWxhdGUtc2RrLWV4dCcpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgcmV0dXJuIGxvY2FsZGF0YS5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAncmRlcGVuZHMnLCBUcnVlKQorCitkb19wb3B1bGF0ZV9zZGtfZXh0W2RpcnNdID0gIiR7QGQuZ2V0VmFyRmxhZygnZG9fcG9wdWxhdGVfc2RrJywgJ2RpcnMnLCBGYWxzZSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtkZXBlbmRzXSArPSAiJHtAZC5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAnZGVwZW5kcycsIEZhbHNlKX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JkZXBlbmRzXSA9ICIke0BnZXRfc2RrX2V4dF9yZGVwZW5kcyhkKX0iCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JlY3JkZXB0YXNrXSArPSAiJHtAZC5nZXRWYXJGbGFnKCdkb19wb3B1bGF0ZV9zZGsnLCAncmVjcmRlcHRhc2snLCBGYWxzZSl9IgorCisKK2RvX3BvcHVsYXRlX3Nka19leHRbZGVwZW5kc10gKz0gImJ1aWxkdG9vbHMtdGFyYmFsbDpkb19wb3B1bGF0ZV9zZGsgdW5pbmF0aXZlLXRhcmJhbGw6ZG9fcG9wdWxhdGVfc2RrIgorCitkb19wb3B1bGF0ZV9zZGtfZXh0W3JkZXBlbmRzXSArPSAiJHtAJyAnLmpvaW4oW3ggKyAnOmRvX2J1aWxkJyBmb3IgeCBpbiBkLmdldFZhcignU0RLX1RBUkdFVFMnLCBUcnVlKS5zcGxpdCgpXSl9IgorZG9fcG9wdWxhdGVfc2RrX2V4dFtyZWNyZGVwdGFza10gKz0gImRvX3BvcHVsYXRlX2xpYyBkb19wYWNrYWdlX3FhIGRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9fZGVwbG95IgorCisjIE1ha2Ugc3VyZSBjb2RlcyBjaGFuZ2UgaW4gY29weV9idWlsZHN5c3RlbSBjYW4gcmVzdWx0IGluIHJlYnVpbHQKK2RvX3BvcHVsYXRlX3Nka19leHRbdmFyZGVwc10gKz0gImNvcHlfYnVpbGRzeXN0ZW0iCisKK2FkZHRhc2sgcG9wdWxhdGVfc2RrX2V4dApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcHJleHBvcnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFjYjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3ByZXhwb3J0LmJiY2xhc3MKQEAgLTAsMCArMSw1OCBAQAorUFJTRVJWX0RVTVBPUFRfVkVSU0lPTiA9ICIke1BSQVVUT0lOWH0iCitQUlNFUlZfRFVNUE9QVF9QS0dBUkNIICA9ICIiCitQUlNFUlZfRFVNUE9QVF9DSEVDS1NVTSA9ICIiCitQUlNFUlZfRFVNUE9QVF9DT0wgPSAiMCIKKworUFJTRVJWX0RVTVBESVIgPz89ICIke0xPR19ESVJ9L2RiIgorUFJTRVJWX0RVTVBGSUxFID8/PSAiJHtQUlNFUlZfRFVNUERJUn0vcHJzZXJ2LmluYyIKKworcHl0aG9uIHByZXhwb3J0X2hhbmRsZXIgKCkgeworICAgIGltcG9ydCBiYi5ldmVudAorICAgIGlmIG5vdCBlLmRhdGE6CisgICAgICAgIHJldHVybgorCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5SZWNpcGVQYXJzZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgICNnZXQgYWxsIFBSIHZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgUFJBVVRPSU5YCisgICAgICAgIHZlciA9IGUuZGF0YS5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICB2ZXIgPSB2ZXIucmVwbGFjZSgnJScsJy0nKQorICAgICAgICByZXR2YWwgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2R1bXBfZGIoZS5kYXRhKQorICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgYmIuZmF0YWwoInByZXhwb3J0X2hhbmRsZXI6IGV4cG9ydCBmYWlsZWQhIikKKyAgICAgICAgKG1ldGFpbmZvLCBkYXRhaW5mbykgPSByZXR2YWwKKyAgICAgICAgaWYgbm90IGRhdGFpbmZvOgorICAgICAgICAgICAgYmIud2FybigicHJleHBvcnRfaGFuZGxlcjogTm8gQVVUT1BSIHZhbHVlcyBmb3VuZCBmb3IgJXMiICUgdmVyKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG9lLnByc2VydmljZS5wcnNlcnZfZXhwb3J0X3RvZmlsZShlLmRhdGEsIE5vbmUsIGRhdGFpbmZvLCBGYWxzZSkKKyAgICAgICAgaWYgJ0FVVE9JTkMnIGluIHZlcjoKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgc3JjcHYgPSAgYmIuZmV0Y2gyLmdldF9zcmNyZXYoZS5kYXRhKQorICAgICAgICAgICAgYmFzZV92ZXIgPSAiQVVUT0lOQy0lcyIgJSB2ZXJbOnZlci5maW5kKHNyY3B2KV0KKyAgICAgICAgICAgIGUuZGF0YS5zZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBiYXNlX3ZlcikKKyAgICAgICAgICAgIHJldHZhbCA9IG9lLnByc2VydmljZS5wcnNlcnZfZHVtcF9kYihlLmRhdGEpCisgICAgICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJwcmV4cG9ydF9oYW5kbGVyOiBleHBvcnQgZmFpbGVkISIpCisgICAgICAgICAgICAobWV0YWluZm8sIGRhdGFpbmZvKSA9IHJldHZhbAorICAgICAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9leHBvcnRfdG9maWxlKGUuZGF0YSwgTm9uZSwgZGF0YWluZm8sIEZhbHNlKQorICAgIGVsaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5QYXJzZVN0YXJ0ZWQpOgorICAgICAgICBpbXBvcnQgYmIudXRpbHMKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2NoZWNrX2F2YWlsKGUuZGF0YSkKKyAgICAgICAgI3JlbW92ZSBkdW1wZmlsZQorICAgICAgICBiYi51dGlscy5yZW1vdmUoZS5kYXRhLmdldFZhcignUFJTRVJWX0RVTVBGSUxFJywgVHJ1ZSkpCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlQ29tcGxldGVkKToKKyAgICAgICAgaW1wb3J0IG9lLnByc2VydmljZQorICAgICAgICAjZHVtcCBtZXRhIGluZm8gb2YgdGFibGVzCisgICAgICAgIGQgPSBlLmRhdGEuY3JlYXRlQ29weSgpCisgICAgICAgIGQuc2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DT0wnLCAiMSIpCisgICAgICAgIHJldHZhbCA9IG9lLnByc2VydmljZS5wcnNlcnZfZHVtcF9kYihkKQorICAgICAgICBpZiBub3QgcmV0dmFsOgorICAgICAgICAgICAgYmIuZXJyb3IoInByZXhwb3J0X2hhbmRsZXI6IGV4cG9ydCBmYWlsZWQhIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAobWV0YWluZm8sIGRhdGFpbmZvKSA9IHJldHZhbAorICAgICAgICBvZS5wcnNlcnZpY2UucHJzZXJ2X2V4cG9ydF90b2ZpbGUoZCwgbWV0YWluZm8sIE5vbmUsIFRydWUpCisKK30KKworYWRkaGFuZGxlciBwcmV4cG9ydF9oYW5kbGVyCitwcmV4cG9ydF9oYW5kbGVyW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuUmVjaXBlUGFyc2VkIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCBiYi5ldmVudC5QYXJzZUNvbXBsZXRlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3ByaW1wb3J0LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkNDVmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wcmltcG9ydC5iYmNsYXNzCkBAIC0wLDAgKzEsMjEgQEAKK3B5dGhvbiBwcmltcG9ydF9oYW5kbGVyICgpIHsKKyAgICBpbXBvcnQgYmIuZXZlbnQKKyAgICBpZiBub3QgZS5kYXRhOgorICAgICAgICByZXR1cm4KKworICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuUGFyc2VDb21wbGV0ZWQpOgorICAgICAgICBpbXBvcnQgb2UucHJzZXJ2aWNlCisgICAgICAgICNpbXBvcnQgYWxsIGV4cG9ydGVkIEFVVE9QUiB2YWx1ZXMKKyAgICAgICAgaW1wb3J0ZWQgPSBvZS5wcnNlcnZpY2UucHJzZXJ2X2ltcG9ydF9kYihlLmRhdGEpCisgICAgICAgIGlmIGltcG9ydGVkIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbCgiaW1wb3J0IGZhaWxlZCEiKQorCisgICAgICAgIGZvciAodmVyc2lvbiwgcGtnYXJjaCwgY2hlY2tzdW0sIHZhbHVlKSBpbiBpbXBvcnRlZDoKKyAgICAgICAgICAgIGJiLm5vdGUoImltcG9ydGVkICglcywlcywlcywlZCkiICUgKHZlcnNpb24sIHBrZ2FyY2gsIGNoZWNrc3VtLCB2YWx1ZSkpCisgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCk6CisgICAgICAgIGltcG9ydCBvZS5wcnNlcnZpY2UKKyAgICAgICAgb2UucHJzZXJ2aWNlLnByc2Vydl9jaGVja19hdmFpbChlLmRhdGEpCit9CisKK2FkZGhhbmRsZXIgcHJpbXBvcnRfaGFuZGxlcgorcHJpbXBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlBhcnNlQ29tcGxldGVkIGJiLmV2ZW50LlBhcnNlU3RhcnRlZCIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9wcnNlcnYuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzk1OTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Byc2Vydi5iYmNsYXNzCkBAIC0wLDAgKzEsMiBAQAorCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B0ZXN0LWdub21lLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5NDlhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9wdGVzdC1nbm9tZS5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBwdGVzdAorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICctLWVuYWJsZS1pbnN0YWxsZWQtdGVzdHMnLCAnLS1kaXNhYmxlLWluc3RhbGxlZC10ZXN0cycsIGQpfSIKKworRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLyBcCisgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pbnN0YWxsZWQtdGVzdHMvIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZ25vbWUtZGVza3RvcC10ZXN0aW5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcHRlc3QuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWY0NzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B0ZXN0LmJiY2xhc3MKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWV8ke1BOfS1wdGVzdCA/PSAiJHtTVU1NQVJZfSAtIFBhY2thZ2UgdGVzdCBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LXB0ZXN0ID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGEgdGVzdCBkaXJlY3RvcnkgJHtQVEVTVF9QQVRIfSBmb3IgcGFja2FnZSB0ZXN0IHB1cnBvc2VzLiIKKworUFRFU1RfUEFUSCA/PSAiJHtsaWJkaXJ9LyR7UE59L3B0ZXN0IgorRklMRVNfJHtQTn0tcHRlc3QgPSAiJHtQVEVTVF9QQVRIfSIKK1NFQ1RJT05fJHtQTn0tcHRlc3QgPSAiZGV2ZWwiCitBTExPV19FTVBUWV8ke1BOfS1wdGVzdCA9ICIxIgorUFRFU1RfRU5BQkxFRCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJzEnLCAnMCcsIGQpfSIKK1BURVNUX0VOQUJMRURfY2xhc3MtbmF0aXZlID0gIiIKK1BURVNUX0VOQUJMRURfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BURVNUX0VOQUJMRURfY2xhc3MtY3Jvc3MtY2FuYWRpYW4gPSAiIgorUkRFUEVORFNfJHtQTn0tcHRlc3RfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1wdGVzdCArPSAicHRlc3QtcnVubmVyIgorCitQQUNLQUdFUyA9KyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICcke1BOfS1wdGVzdCcsICcnLCBkKX0iCisKK2RvX2NvbmZpZ3VyZV9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2NvbmZpZ3VyZV9wdGVzdF9iYXNlKCkgeworICAgIGRvX2NvbmZpZ3VyZV9wdGVzdAorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgIDoKK30KKworZG9fY29tcGlsZV9wdGVzdF9iYXNlKCkgeworICAgIGRvX2NvbXBpbGVfcHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3RfYmFzZSgpIHsKKyAgICBpZiBbIC1mICR7V09SS0RJUn0vcnVuLXB0ZXN0IF07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtRCAke1dPUktESVJ9L3J1bi1wdGVzdCAke0R9JHtQVEVTVF9QQVRIfS9ydW4tcHRlc3QKKyAgICAgICAgaWYgZ3JlcCAtcSBpbnN0YWxsLXB0ZXN0OiBNYWtlZmlsZTsgdGhlbgorICAgICAgICAgICAgb2VfcnVubWFrZSBERVNURElSPSR7RH0ke1BURVNUX1BBVEh9IGluc3RhbGwtcHRlc3QKKyAgICAgICAgZmkKKyAgICAgICAgZG9faW5zdGFsbF9wdGVzdAorICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICBmaQorfQorCitkb19jb25maWd1cmVfcHRlc3RfYmFzZVtkaXJzXSA9ICIke0J9IgorZG9fY29tcGlsZV9wdGVzdF9iYXNlW2RpcnNdID0gIiR7Qn0iCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbZGlyc10gPSAiJHtCfSIKK2RvX2luc3RhbGxfcHRlc3RfYmFzZVtjbGVhbmRpcnNdID0gIiR7RH0ke1BURVNUX1BBVEh9IgorCithZGR0YXNrIGNvbmZpZ3VyZV9wdGVzdF9iYXNlIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQorYWRkdGFzayBjb21waWxlX3B0ZXN0X2Jhc2UgICBhZnRlciBkb19jb21waWxlICAgYmVmb3JlIGRvX2luc3RhbGwKK2FkZHRhc2sgaW5zdGFsbF9wdGVzdF9iYXNlICAgYWZ0ZXIgZG9faW5zdGFsbCAgIGJlZm9yZSBkb19wYWNrYWdlIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworcHl0aG9uICgpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhckZsYWcoJ2RvX2luc3RhbGxfcHRlc3RfYmFzZScsICdmYWtlcm9vdCcsIDEpCisKKyAgICAjIFJlbW92ZSBhbGwgJypwdGVzdF9iYXNlJyB0YXNrcyB3aGVuIHB0ZXN0IGlzIG5vdCBlbmFibGVkCisgICAgaWYgbm90KGQuZ2V0VmFyKCdQVEVTVF9FTkFCTEVEJywgVHJ1ZSkgPT0gIjEiKToKKyAgICAgICAgZm9yIGkgaW4gWydkb19jb25maWd1cmVfcHRlc3RfYmFzZScsICdkb19jb21waWxlX3B0ZXN0X2Jhc2UnLCAnZG9faW5zdGFsbF9wdGVzdF9iYXNlJ106CisgICAgICAgICAgICBiYi5idWlsZC5kZWx0YXNrKGksIGQpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHl0aG9uLWRpci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmZhNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B5dGhvbi1kaXIuYmJjbGFzcwpAQCAtMCwwICsxLDUgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA/PSAiMi43IgorUFlUSE9OX0FCSSA/PSAiIgorUFlUSE9OX0RJUiA9ICJweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iCitQWVRIT05fUE4gPSAicHl0aG9uJHtAJycgaWYgJyR7UFlUSE9OX0JBU0VWRVJTSU9OfScuc3RhcnRzd2l0aCgnMicpIGVsc2UgJzMnfSIKK1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSID0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcHl0aG9uM25hdGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgzMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B5dGhvbjNuYXRpdmUuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKK1BZVEhPTl9CQVNFVkVSU0lPTiA9ICIzLjQiCisKK2luaGVyaXQgcHl0aG9uLWRpcgorCitQWVRIT049IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BZVEhPTl9QTn0tbmF0aXZlLyR7UFlUSE9OX1BOfSIKK0VYVFJBTkFUSVZFUEFUSCArPSAiJHtQWVRIT05fUE59LW5hdGl2ZSIKK0RFUEVORFMgKz0gIiAke1BZVEhPTl9QTn0tbmF0aXZlICIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9weXRob25uYXRpdmUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzAyOWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3B5dGhvbm5hdGl2ZS5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAorCitpbmhlcml0IHB5dGhvbi1kaXIKKworUFlUSE9OPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0iCisjIFBZVEhPTl9FWEVDVVRBQkxFIGlzIHVzZWQgYnkgY21ha2UKK1BZVEhPTl9FWEVDVVRBQkxFPSIke1BZVEhPTn0iCitFWFRSQU5BVElWRVBBVEggKz0gIiR7UFlUSE9OX1BOfS1uYXRpdmUiCitERVBFTkRTICs9ICIgJHtQWVRIT05fUE59LW5hdGl2ZSAiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcWVtdS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3FlbXUuYmJjbGFzcwpAQCAtMCwwICsxLDUxIEBACisjCisjIFRoaXMgY2xhc3MgY29udGFpbnMgZnVuY3Rpb25zIGZvciByZWNpcGVzIHRoYXQgbmVlZCBRRU1VIG9yIHRlc3QgZm9yIGl0cworIyBleGlzdGVuY2UuCisjCisKK2RlZiBxZW11X3RhcmdldF9iaW5hcnkoZGF0YSk6CisgICAgdGFyZ2V0X2FyY2ggPSBkYXRhLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHRhcmdldF9hcmNoIGluICgiaTQ4NiIsICJpNTg2IiwgImk2ODYiKToKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSAiaTM4NiIKKyAgICBlbGlmIHRhcmdldF9hcmNoID09ICJwb3dlcnBjIjoKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSAicHBjIgorICAgIGVsaWYgdGFyZ2V0X2FyY2ggPT0gInBvd2VycGM2NCI6CisgICAgICAgIHRhcmdldF9hcmNoID0gInBwYzY0IgorCisgICAgcmV0dXJuICJxZW11LSIgKyB0YXJnZXRfYXJjaAorIworIyBOZXh0IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgdGhhdCBpcyBuZWVkZWQgdG8KKyMgdG8gcnVuIGEgY2VydGFpbiBiaW5hcnkgdGhyb3VnaCBxZW11LiBGb3IgZXhhbXBsZSwgaW4gb3JkZXIgdG8gbWFrZSBhIGNlcnRhaW4KKyMgcG9zdGluc3RhbGwgc2NyaXB0bGV0IHJ1biBhdCBkb19yb290ZnMgdGltZSBhbmQgcnVubmluZyB0aGUgcG9zdGluc3RhbGwgaXMKKyMgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCwgd2UgY2FuIHJ1biBpdCB0aHJvdWdoIHFlbXUuIEZvciBleGFtcGxlLCBpbiB0aGUKKyMgcG9zdGluc3RhbGwgc2NyaXB0bGV0LCB3ZSBjb3VsZCB1c2UgdGhlIGZvbGxvd2luZzoKKyMKKyMgJHtAcWVtdV9ydW5fYmluYXJ5KGQsICckRCcsICcvdXNyL2Jpbi90ZXN0X2FwcCcpfSBbdGVzdF9hcHAgYXJndW1lbnRzXQorIworZGVmIHFlbXVfcnVuX2JpbmFyeShkYXRhLCByb290ZnNfcGF0aCwgYmluYXJ5KToKKyAgICBxZW11X2JpbmFyeSA9IHFlbXVfdGFyZ2V0X2JpbmFyeShkYXRhKQorICAgIGlmIHFlbXVfYmluYXJ5ID09ICJxZW11LWFsbGFyY2giOgorICAgICAgICBxZW11X2JpbmFyeSA9ICJxZW11d3JhcHBlciIKKworICAgIGxpYmRpciA9IHJvb3Rmc19wYXRoICsgZGF0YS5nZXRWYXIoImxpYmRpciIsIEZhbHNlKQorICAgIGJhc2VfbGliZGlyID0gcm9vdGZzX3BhdGggKyBkYXRhLmdldFZhcigiYmFzZV9saWJkaXIiLCBGYWxzZSkKKyAgICBxZW11X29wdGlvbnMgPSBkYXRhLmdldFZhcigiUUVNVV9PUFRJT05TIiwgVHJ1ZSkKKworICAgIHJldHVybiAiUFNFVURPX1VOTE9BRD0xICIgKyBxZW11X2JpbmFyeSArICIgIiArIHFlbXVfb3B0aW9ucyArICIgLUwgIiArIHJvb3Rmc19wYXRoXAorICAgICAgICAgICAgKyAiIC1FIExEX0xJQlJBUllfUEFUSD0iICsgbGliZGlyICsgIjoiICsgYmFzZV9saWJkaXIgKyAiICJcCisgICAgICAgICAgICArIHJvb3Rmc19wYXRoICsgYmluYXJ5CisKKyMgUUVNVV9FWFRSQU9QVElPTlMgaXMgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IHVzZWQsIHRoZSBleHRlbnNpb25zIGFyZSAKKyMgUEFDS0FHRV9BUkNILCBub3Qgb3ZlcnJpZGVzIGFuZCBoZW5jZSBoYXZlIHRvIGRvIHRoaXMgZGFuY2UuIFNpbXBseSBiZWluZyBhcmNoIAorIyBzcGVjaWZpYyBpc24ndCBnb29kIGVub3VnaC4KK1FFTVVfT1BUSU9OUyA9ICItciAke09MREVTVF9LRVJORUx9ICR7QGQuZ2V0VmFyKCJRRU1VX0VYVFJBT1BUSU9OU18lcyIgJSBkLmdldFZhcignUEFDS0FHRV9BUkNIJywgVHJ1ZSksIFRydWUpIG9yICIifSIKK1FFTVVfRVhUUkFPUFRJT05TX2l3bW14dCAgICA9ICIgLWNwdSBweGEyNzAtYzUiCitRRU1VX0VYVFJBT1BUSU9OU19hcm12NiAgICAgPSAiIC1jcHUgYXJtMTEzNiIKK1FFTVVfRVhUUkFPUFRJT05TX2FybXY3YSAgICA9ICIgLWNwdSBjb3J0ZXgtYTgiCitRRU1VX0VYVFJBT1BUSU9OU19lNTAwdjIgICAgPSAiIC1jcHUgZTUwMHYyIgorUUVNVV9FWFRSQU9QVElPTlNfZTUwMG1jICAgID0gIiAtY3B1IGU1MDBtYyIKK1FFTVVfRVhUUkFPUFRJT05TX2U1NTAwICAgICA9ICIgLWNwdSBlNTUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX2U1NTAwLTY0YiA9ICIgLWNwdSBlNTUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX2U2NTAwICAgICA9ICIgLWNwdSBlNjUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX2U2NTAwLTY0YiA9ICIgLWNwdSBlNjUwMCIKK1FFTVVfRVhUUkFPUFRJT05TX3BwYzc0MDAgICA9ICIgLWNwdSA3NDAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3FtYWtlMi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNzNhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcW1ha2UyLmJiY2xhc3MKQEAgLTAsMCArMSwyNyBAQAorIworIyBRTWFrZSB2YXJpYWJsZXMgZm9yIFF0NAorIworaW5oZXJpdCBxbWFrZV9iYXNlCisKK0RFUEVORFNfcHJlcGVuZCA9ICJxdDQtdG9vbHMtbmF0aXZlICIKKworZXhwb3J0IFFNQUtFU1BFQyA9ICIke1NUQUdJTkdfREFUQURJUn0vcXQ0L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKK2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUcgPSAiJHtTVEFHSU5HX0RBVEFESVJ9L3F0NC9ta3NwZWNzL3Fjb25maWcucHJpIgorZXhwb3J0IE9FX1FNQUtFX1VJQyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljNCIKK2V4cG9ydCBPRV9RTUFLRV9VSUMzID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS91aWMzNCIKK2V4cG9ydCBPRV9RTUFLRV9NT0MgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L21vYzQiCitleHBvcnQgT0VfUU1BS0VfUkNDID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9yY2M0IgorZXhwb3J0IE9FX1FNQUtFX1FEQlVTQ1BQMlhNTCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcWRidXNjcHAyeG1sNCIKK2V4cG9ydCBPRV9RTUFLRV9RREJVU1hNTDJDUFAgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FkYnVzeG1sMmNwcDQiCitleHBvcnQgT0VfUU1BS0VfUU1BS0UgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3FtYWtlMiIKK2V4cG9ydCBPRV9RTUFLRV9MSU5LID0gIiR7Q1hYfSIKK2V4cG9ydCBPRV9RTUFLRV9DWFhGTEFHUyA9ICIke0NYWEZMQUdTfSIKK2V4cG9ydCBPRV9RTUFLRV9JTkNESVJfUVQgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vcXQ0IgorZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVCA9ICIke1NUQUdJTkdfTElCRElSfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1FUID0gInF0IgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExID0gIi1sWGV4dCAtbFgxMSAtbG0iCitleHBvcnQgT0VfUU1BS0VfTElCU19YMTFTTSA9ICItbFNNIC1sSUNFIgorZXhwb3J0IE9FX1FNQUtFX0xDT05WRVJUID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9sY29udmVydDQiCitleHBvcnQgT0VfUU1BS0VfTFJFTEVBU0UgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2xyZWxlYXNlNCIKK2V4cG9ydCBPRV9RTUFLRV9MVVBEQVRFID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9sdXBkYXRlNCIKK2V4cG9ydCBPRV9RTUFLRV9YTUxQQVRURVJOUyA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0veG1scGF0dGVybnM0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3FtYWtlX2Jhc2UuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ODcxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9xbWFrZV9iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwxMTkgQEAKK1FNQUtFX01LU1BFQ19QQVRIID89ICIke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3FtYWtlIgorCitPRV9RTUFLRV9QTEFURk9STSA9ICIke1RBUkdFVF9PU30tb2UtZysrIgorUU1BS0VTUEVDIDo9ICIke1FNQUtFX01LU1BFQ19QQVRIfS8ke09FX1FNQUtFX1BMQVRGT1JNfSIKKworIyBXZSBvdmVycmlkZSB0aGlzIGNvbXBsZXRlbHkgdG8gZWxpbWluYXRlIHRoZSAtZSBub3JtYWxseSBwYXNzZWQgaW4KK0VYVFJBX09FTUFLRSA9ICIiCisKK2V4cG9ydCBPRV9RTUFLRV9DQz0iJHtDQ30iCitleHBvcnQgT0VfUU1BS0VfQ0ZMQUdTPSIke0NGTEFHU30iCitleHBvcnQgT0VfUU1BS0VfQ1hYPSIke0NYWH0iCitleHBvcnQgT0VfUU1BS0VfTERGTEFHUz0iJHtMREZMQUdTfSIKK2V4cG9ydCBPRV9RTUFLRV9BUj0iJHtBUn0iCitleHBvcnQgT0VfUU1BS0VfU1RSSVA9ImVjaG8iCitleHBvcnQgT0VfUU1BS0VfUlBBVEg9Ii1XbCwtcnBhdGgtbGluaywiCisKKyMgZGVmYXVsdCB0byBxdGUyIHZpYSBiYi5jb25mLCBpbmhlcml0IHF0M3gxMSB0byBjb25maWd1cmUgZm9yIHF0M3gxMQorCitvZV9xbWFrZV9ta3NwZWNzICgpIHsKKyAgICBta2RpciAtcCBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19CisgICAgZm9yIGYgaW4gJHtRTUFLRV9NS1NQRUNfUEFUSH0vJHtPRV9RTUFLRV9QTEFURk9STX0vKjsgZG8KKyAgICAgICAgaWYgWyAtTCAkZiBdOyB0aGVuCisgICAgICAgICAgICBsbms9YHJlYWRsaW5rICRmYAorICAgICAgICAgICAgaWYgWyAtZiBta3NwZWNzLyR7T0VfUU1BS0VfUExBVEZPUk19LyRsbmsgXTsgdGhlbgorICAgICAgICAgICAgICAgIGxuIC1zICRsbmsgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS9gYmFzZW5hbWUgJGZgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3AgJGYgbWtzcGVjcy8ke09FX1FNQUtFX1BMQVRGT1JNfS8KKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNwICRmIG1rc3BlY3MvJHtPRV9RTUFLRV9QTEFURk9STX0vCisgICAgICAgIGZpCisgICAgZG9uZQorfQorCitkb19nZW5lcmF0ZV9xdF9jb25maWdfZmlsZSgpIHsKKwlleHBvcnQgUVRfQ09ORl9QQVRIPSR7V09SS0RJUn0vcXQuY29uZgorCWNhdCA+ICR7V09SS0RJUn0vcXQuY29uZiA8PEVPRgorW1BhdGhzXQorUHJlZml4ID0KK0JpbmFyaWVzID0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9CitIZWFkZXJzID0gJHtTVEFHSU5HX0lOQ0RJUn0vJHtRVF9ESVJfTkFNRX0KK1BsdWdpbnMgPSAke1NUQUdJTkdfTElCRElSfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zLworTWtzcGVjcyA9ICR7U1RBR0lOR19EQVRBRElSfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzLworRU9GCit9CisKK2FkZHRhc2sgZ2VuZXJhdGVfcXRfY29uZmlnX2ZpbGUgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitxbWFrZV9iYXNlX2RvX2NvbmZpZ3VyZSgpIHsKKwljYXNlICR7UU1BS0VTUEVDfSBpbgorCSpsaW51eC1vZS1nKyt8KmxpbnV4LXVjbGliYy1vZS1nKyt8KmxpbnV4LWdudWVhYmktb2UtZysrfCpsaW51eC11Y2xpYmNlYWJpLW9lLWcrK3wqbGludXgtZ251c3BlLW9lLWcrK3wqbGludXgtdWNsaWJjc3BlLW9lLWcrK3wqbGludXgtZ251bjMyLW9lLWcrKykKKwkJOzsKKwkqLW9lLWcrKykKKwkJZGllIFVuc3VwcG9ydGVkIHRhcmdldCAke1RBUkdFVF9PU30gZm9yIG9lLWcrKyBxbWFrZSBzcGVjCisJCTs7CisJKikKKwkJYmJub3RlIFNlYXJjaGluZyBmb3IgcW1ha2Ugc3BlYyBmaWxlCisJCXBhdGhzPSIke1FNQUtFX01LU1BFQ19QQVRIfS9xd3MvJHtUQVJHRVRfT1N9LSR7VEFSR0VUX0FSQ0h9LWcrKyIKKwkJcGF0aHM9IiR7UU1BS0VfTUtTUEVDX1BBVEh9LyR7VEFSR0VUX09TfS1nKysgJHBhdGhzIgorCisJCWlmIChlY2hvICIke1RBUkdFVF9BUkNIfSJ8Z3JlcCAtcSAnaS44NicpOyB0aGVuCisJCQlwYXRocz0iJHtRTUFLRV9NS1NQRUNfUEFUSH0vcXdzLyR7VEFSR0VUX09TfS14ODYtZysrICRwYXRocyIKKwkJZmkKKwkJZm9yIGkgaW4gJHBhdGhzOyBkbworCQkJaWYgdGVzdCAtZSAkaTsgdGhlbgorCQkJCWV4cG9ydCBRTUFLRVNQRUM9JGkKKwkJCQlicmVhaworCQkJZmkKKwkJZG9uZQorCQk7OworCWVzYWMKKworCWJibm90ZSAidXNpbmcgcW1ha2Ugc3BlYyBpbiAke1FNQUtFU1BFQ30sIHVzaW5nIHByb2ZpbGVzICcke1FNQUtFX1BST0ZJTEVTfSciCisKKwlpZiBbIC16ICIke1FNQUtFX1BST0ZJTEVTfSIgXTsgdGhlbiAKKwkJUFJPRklMRVM9ImBscyAqLnByb2AiCisJZWxzZQorCQlQUk9GSUxFUz0iJHtRTUFLRV9QUk9GSUxFU30iCisJZmkKKworCWlmIFsgLXogIiRQUk9GSUxFUyIgXTsgdGhlbgorCQlkaWUgIlFNQUtFX1BST0ZJTEVTIG5vdCBzZXQgYW5kIG5vIHByb2ZpbGVzIGZvdW5kIGluICRQV0QiCisgICAgICAgIGZpCisKKwlpZiBbICEgLXogIiR7RVhUUkFfUU1BS0VWQVJTX1BPU1R9IiBdOyB0aGVuCisJCUFGVEVSPSItYWZ0ZXIiCisJCVFNQUtFX1ZBUlNVQlNUX1BPU1Q9IiR7RVhUUkFfUU1BS0VWQVJTX1BPU1R9IgorCQliYm5vdGUgInFtYWtlIHBvc3R2YXIgc3Vic3RpdHV0aW9uOiAke0VYVFJBX1FNQUtFVkFSU19QT1NUfSIKKwlmaQorCisJaWYgWyAhIC16ICIke0VYVFJBX1FNQUtFVkFSU19QUkV9IiBdOyB0aGVuCisJCVFNQUtFX1ZBUlNVQlNUX1BSRT0iJHtFWFRSQV9RTUFLRVZBUlNfUFJFfSIKKwkJYmJub3RlICJxbWFrZSBwcmV2YXIgc3Vic3RpdHV0aW9uOiAke0VYVFJBX1FNQUtFVkFSU19QUkV9IgorCWZpCisKKwkjIEhhY2sgLnBybyBmaWxlcyB0byB1c2UgT0UgdXRpbGl0aWVzCisJTENPTlZFUlRfTkFNRT0kKGJhc2VuYW1lICR7T0VfUU1BS0VfTENPTlZFUlR9KQorCUxSRUxFQVNFX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xSRUxFQVNFfSkKKwlMVVBEQVRFX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX0xVUERBVEV9KQorCVhNTFBBVFRFUk5TX05BTUU9JChiYXNlbmFtZSAke09FX1FNQUtFX1hNTFBBVFRFUk5TfSkKKwlmaW5kIC1uYW1lICcqLnBybycgXAorCSAgICAgLWV4ZWMgc2VkIC1pIC1lICJzfFwoPVxzKi4qXCkvJExDT05WRVJUX05BTUV8XDEvbGNvbnZlcnR8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvJExSRUxFQVNFX05BTUV8XDEvbHJlbGVhc2V8ZyIgXAorCSAgICAgICAgICAgICAgICAgIC1lICJzfFwoPVxzKi4qXCkvJExVUERBVEVfTkFNRXxcMS9sdXBkYXRlfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpLyRYTUxQQVRURVJOU19OQU1FfFwxL3htbHBhdHRlcm5zfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL2xjb252ZXJ0fFwxLyRMQ09OVkVSVF9OQU1FfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL2xyZWxlYXNlfFwxLyRMUkVMRUFTRV9OQU1FfGciIFwKKwkgICAgICAgICAgICAgICAgICAtZSAic3xcKD1ccyouKlwpL2x1cGRhdGV8XDEvJExVUERBVEVfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgLWUgInN8XCg9XHMqLipcKS94bWxwYXR0ZXJuc3xcMS8kWE1MUEFUVEVSTlNfTkFNRXxnIiBcCisJICAgICAgICAgICAgICAgICAgJ3t9JyAnOycKKworI2Jibm90ZSAiQ2FsbGluZyAnJHtPRV9RTUFLRV9RTUFLRX0gLW1ha2VmaWxlIC1zcGVjICR7UU1BS0VTUEVDfSAtbyBNYWtlZmlsZSAkUU1BS0VfVkFSU1VCU1RfUFJFICRBRlRFUiAkUFJPRklMRVMgJFFNQUtFX1ZBUlNVQlNUX1BPU1QnIgorCXVuc2V0IFFNQUtFU1BFQyB8fCB0cnVlCisJJHtPRV9RTUFLRV9RTUFLRX0gLW1ha2VmaWxlIC1zcGVjICR7UU1BS0VTUEVDfSAtbyBNYWtlZmlsZSAkUU1BS0VfVkFSU1VCU1RfUFJFICRBRlRFUiAkUFJPRklMRVMgJFFNQUtFX1ZBUlNVQlNUX1BPU1QgfHwgZGllICJFcnJvciBjYWxsaW5nICR7T0VfUU1BS0VfUU1BS0V9IG9uICRQUk9GSUxFUyIKK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUKKworYWRkdGFzayBjb25maWd1cmUgYWZ0ZXIgZG9fdW5wYWNrIGRvX3BhdGNoIGJlZm9yZSBkb19jb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcXQ0ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2IxMDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3F0NGUuYmJjbGFzcwpAQCAtMCwwICsxLDIxIEBACitRVDRFREVQRU5EUyA/PSAicXQ0LWVtYmVkZGVkICIKK0RFUEVORFNfcHJlcGVuZCA9ICIke1FUNEVERVBFTkRTfSIKKworaW5oZXJpdCBxbWFrZTIKKworUVRfQkFTRV9OQU1FID0gInF0NC1lbWJlZGRlZCIKK1FUX0RJUl9OQU1FID0gInF0b3BpYSIKK1FUX0xJQklORklYID0gIkUiCisjIG92ZXJyaWRlIHZhcmlhYmxlcyBzZXQgYnkgcW1ha2UtYmFzZSB0byBjb21waWxlIFF0L0VtYmVkZGVkIGFwcHMKKyMKK2V4cG9ydCBRTUFLRVNQRUMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKK2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUcgPSAiJHtTVEFHSU5HX0RBVEFESVJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvcWNvbmZpZy5wcmkiCitleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUID0gIiR7U1RBR0lOR19JTkNESVJ9LyR7UVRfRElSX05BTUV9IgorZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVCA9ICIke1NUQUdJTkdfTElCRElSfSIKK2V4cG9ydCBPRV9RTUFLRV9MSUJTX1FUID0gInF0IgorZXhwb3J0IE9FX1FNQUtFX0xJQlNfWDExID0gIiIKK2V4cG9ydCBPRV9RTUFLRV9FWFRSQV9NT0RVTEVTID0gIm5ldHdvcmsiCitFWFRSQV9RTUFLRVZBUlNfUFJFICs9ICIgUVRfTElCSU5GSVg9JHtRVF9MSUJJTkZJWH0gIgorCisjIFF0NCB1c2VzIGF0b21pYyBpbnN0cnVjdGlvbnMgbm90IHN1cHBvcnRlZCBpbiB0aHVtYiBtb2RlCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9xdDR4MTEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA2ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3F0NHgxMS5iYmNsYXNzCkBAIC0wLDAgKzEsMTQgQEAKK1FUNERFUEVORFMgPz0gInF0NC14MTEgIgorREVQRU5EU19wcmVwZW5kID0gIiR7UVQ0REVQRU5EU30iCisKKyMgZGVwZW5kcyBvbiBxdDQteDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgKz0gIngxMSIKKworaW5oZXJpdCBxbWFrZTIgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1FUX0JBU0VfTkFNRSA9ICJxdDQiCitRVF9ESVJfTkFNRSA9ICJxdDQiCitRVF9MSUJJTkZJWCA9ICIiCisKKyMgUXQ0IHVzZXMgYXRvbWljIGluc3RydWN0aW9ucyBub3Qgc3VwcG9ydGVkIGluIHRodW1iIG1vZGUKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JlY2lwZV9zYW5pdHkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwNGUzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9yZWNpcGVfc2FuaXR5LmJiY2xhc3MKQEAgLTAsMCArMSwxNjcgQEAKK2RlZiBfX25vdGUobXNnLCBkKToKKyAgICBiYi5ub3RlKCIlczogcmVjaXBlX3Nhbml0eTogJXMiICUgKGQuZ2V0VmFyKCJQIiwgVHJ1ZSksIG1zZykpCisKK19fcmVjaXBlX3Nhbml0eV9iYWRydW50aW1ldmFycyA9ICJSREVQRU5EUyBSUFJPVklERVMgUlJFQ09NTUVORFMgUkNPTkZMSUNUUyIKK2RlZiBiYWRfcnVudGltZV92YXJzKGNmZ2RhdGEsIGQpOgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCk6CisgICAgICAgIHJldHVybgorCisgICAgZm9yIHZhciBpbiBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X2JhZHJ1bnRpbWV2YXJzIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCAwKQorICAgICAgICBpZiB2YWwgYW5kIHZhbCAhPSBjZmdkYXRhLmdldCh2YXIpOgorICAgICAgICAgICAgX19ub3RlKCIlcyBzaG91bGQgYmUgJXNfJHtQTn0iICUgKHZhciwgdmFyKSwgZCkKKworX19yZWNpcGVfc2FuaXR5X3JlcXZhcnMgPSAiREVTQ1JJUFRJT04iCitfX3JlY2lwZV9zYW5pdHlfcmVxZGlmZnZhcnMgPSAiIgorZGVmIHJlcV92YXJzKGNmZ2RhdGEsIGQpOgorICAgIGZvciB2YXIgaW4gZC5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZXF2YXJzIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgaWYgbm90IGQuZ2V0VmFyKHZhciwgMCk6CisgICAgICAgICAgICBfX25vdGUoIiVzIHNob3VsZCBiZSBzZXQiICUgdmFyLCBkKQorCisgICAgZm9yIHZhciBpbiBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X3JlcWRpZmZ2YXJzIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgdmFsID0gZC5nZXRWYXIodmFyLCAwKQorICAgICAgICBjZmd2YWwgPSBjZmdkYXRhLmdldCh2YXIpCisKKyAgICAgICAgaWYgbm90IHZhbDoKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlIHNldCIgJSB2YXIsIGQpCisgICAgICAgIGVsaWYgdmFsID09IGNmZ3ZhbDoKKyAgICAgICAgICAgIF9fbm90ZSgiJXMgc2hvdWxkIGJlIGRlZmluZWQgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gZGVmYXVsdCAoJXMpIiAlICh2YXIsIGNmZ3ZhbCksIGQpCisKK2RlZiB2YXJfcmVuYW1lc19vdmVyd3JpdGUoY2ZnZGF0YSwgZCk6CisgICAgcmVuYW1lcyA9IGQuZ2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIDApCisgICAgaWYgcmVuYW1lczoKKyAgICAgICAgZm9yIChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSBpbiByZW5hbWVzOgorICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWUgYW5kIG9sZHZhbHVlICE9IGNmZ2RhdGEuZ2V0KG5ld2tleSk6CisgICAgICAgICAgICAgICAgX19ub3RlKCJyZW5hbWUgb2YgdmFyaWFibGUgJyVzJyB0byAnJXMnIG92ZXJ3cm90ZSBleGlzdGluZyB2YWx1ZSAnJXMnIHdpdGggJyVzJy4iICUgKGtleSwgbmV3a2V5LCBvbGR2YWx1ZSwgbmV3dmFsdWUpLCBkKQorCitkZWYgaW5jb3JyZWN0X25vbmVtcHR5X1BBQ0tBR0VTKGNmZ2RhdGEsIGQpOgorICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoIm5hdGl2ZSIsIGQpIG9yIFwKKyAgICAgICAgICAgIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImNyb3NzIiwgZCk6CisgICAgICAgIGlmIGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIGNhbl91c2VfYXV0b3Rvb2xzX2Jhc2UoY2ZnZGF0YSwgZCk6CisgICAgY2ZnID0gZC5nZXRWYXIoImRvX2NvbmZpZ3VyZSIsIFRydWUpCisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoImF1dG90b29scyIsIGQpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGZvciBpIGluIFsiYXV0b3JlY29uZiJdICsgWyIlc19kb19jb25maWd1cmUiICUgY2xzIGZvciBjbHMgaW4gWyJnbm9tZWJhc2UiLCAiZ25vbWUiLCAiZSIsICJhdXRvdG9vbHMiLCAiZWZsIiwgImdwZXBob25lIiwgIm9wZW5tb2tvIiwgIm9wZW5tb2tvMiIsICJ4ZmNlIiwgInhsaWJzIl1dOgorICAgICAgICBpZiBjZmcuZmluZChpKSAhPSAtMToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZm9yIGNsc2ZpbGUgaW4gZC5nZXRWYXIoIl9faW5oZXJpdF9jYWNoZSIsIDApOgorICAgICAgICAoYmFzZSwgXykgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoY2xzZmlsZSkpCisgICAgICAgIGlmIGNmZy5maW5kKCIlc19kb19jb25maWd1cmUiICUgYmFzZSkgIT0gLTE6CisgICAgICAgICAgICBfX25vdGUoImF1dG90b29sc19iYXNlIHVzYWdlIG5lZWRzIHZlcmlmaWNhdGlvbiwgc3BvdHRlZCAlc19kb19jb25maWd1cmUiICUgYmFzZSwgZCkKKworICAgIHJldHVybiBUcnVlCisKK2RlZiBjYW5fZGVsZXRlX0ZJTEVTUEFUSChjZmdkYXRhLCBkKToKKyAgICBleHBlY3RlZCA9IGNmZ2RhdGEuZ2V0KCJGSUxFU1BBVEgiKQorICAgIGV4cGVjdGVkcGF0aHMgPSBkLmV4cGFuZChleHBlY3RlZCkKKyAgICB1bmV4cGFuZGVkID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIDApCisgICAgZmlsZXNwYXRoID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmaWxlc3BhdGggPSBbb3MucGF0aC5ub3JtcGF0aChmKSBmb3IgZiBpbiBmaWxlc3BhdGggaWYgb3MucGF0aC5leGlzdHMoZildCisgICAgZm9yIGZwIGluIGZpbGVzcGF0aDoKKyAgICAgICAgaWYgbm90IGZwIGluIGV4cGVjdGVkcGF0aHM6CisgICAgICAgICAgICAjIF9fbm90ZSgiUGF0aCAlcyBpbiBGSUxFU1BBVEggbm90IGluIHRoZSBleHBlY3RlZCBwYXRocyAlcyIgJQorICAgICAgICAgICAgIyAoZnAsIGV4cGVjdGVkcGF0aHMpLCBkKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIGV4cGVjdGVkICE9IHVuZXhwYW5kZWQKKworZGVmIGNhbl9kZWxldGVfRklMRVNESVIoY2ZnZGF0YSwgZCk6CisgICAgZXhwZWN0ZWQgPSBjZmdkYXRhLmdldCgiRklMRVNESVIiKQorICAgICNleHBlY3RlZCA9ICIke0BiYi51dGlscy53aGljaChkLmdldFZhcignRklMRVNQQVRIJywgVHJ1ZSksICcuJyl9IgorICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcigiRklMRVNESVIiLCAwKQorICAgIGlmIHVuZXhwYW5kZWQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBleHBhbmRlZCA9IG9zLnBhdGgubm9ybXBhdGgoZC5nZXRWYXIoIkZJTEVTRElSIiwgVHJ1ZSkpCisgICAgZmlsZXNwYXRoID0gZC5nZXRWYXIoIkZJTEVTUEFUSCIsIFRydWUpLnNwbGl0KCI6IikKKyAgICBmaWxlc3BhdGggPSBbb3MucGF0aC5ub3JtcGF0aChmKSBmb3IgZiBpbiBmaWxlc3BhdGggaWYgb3MucGF0aC5leGlzdHMoZildCisKKyAgICByZXR1cm4gdW5leHBhbmRlZCAhPSBleHBlY3RlZCBhbmQgXAorICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhleHBhbmRlZCkgYW5kIFwKKyAgICAgICAgICAgKGV4cGFuZGVkIGluIGZpbGVzcGF0aCBvcgorICAgICAgICAgICAgZXhwYW5kZWQgPT0gZC5leHBhbmQoZXhwZWN0ZWQpKQorCitkZWYgY2FuX2RlbGV0ZV9vdGhlcnMocCwgY2ZnZGF0YSwgZCk6CisgICAgZm9yIGsgaW4gWyJTIiwgIlBWIiwgIlBOIiwgIkRFU0NSSVBUSU9OIiwgIkRFUEVORFMiLAorICAgICAgICAgICAgICAiU0VDVElPTiIsICJQQUNLQUdFUyIsICJFWFRSQV9PRUNPTkYiLCAiRVhUUkFfT0VNQUtFIl06CisgICAgI2ZvciBrIGluIGNmZ2RhdGE6CisgICAgICAgIHVuZXhwYW5kZWQgPSBkLmdldFZhcihrLCAwKQorICAgICAgICBjZmd1bmV4cGFuZGVkID0gY2ZnZGF0YS5nZXQoaykKKyAgICAgICAgaWYgbm90IGNmZ3VuZXhwYW5kZWQ6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGFuZGVkID0gZC5nZXRWYXIoaywgVHJ1ZSkKKyAgICAgICAgICAgIGNmZ2V4cGFuZGVkID0gZC5leHBhbmQoY2ZndW5leHBhbmRlZCkKKyAgICAgICAgZXhjZXB0IGJiLmZldGNoLlBhcmFtZXRlckVycm9yOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiB1bmV4cGFuZGVkICE9IGNmZ3VuZXhwYW5kZWQgYW5kIFwKKyAgICAgICAgICAgY2ZnZXhwYW5kZWQgPT0gZXhwYW5kZWQ6CisgICAgICAgICAgIF9fbm90ZSgiY2FuZGlkYXRlIGZvciByZW1vdmFsIG9mICVzIiAlIGssIGQpCisgICAgICAgICAgIGJiLmRlYnVnKDEsICIlczogcmVjaXBlX3Nhbml0eTogICBjZmcncyAnJXMnIGFuZCBkJ3MgJyVzJyBib3RoIGV4cGFuZCB0byAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAocCwgY2ZndW5leHBhbmRlZCwgdW5leHBhbmRlZCwgZXhwYW5kZWQpKQorCitweXRob24gZG9fcmVjaXBlX3Nhbml0eSAoKSB7CisgICAgcCA9IGQuZ2V0VmFyKCJQIiwgVHJ1ZSkKKyAgICBwID0gIiVzICVzICVzIiAlIChkLmdldFZhcigiUE4iLCBUcnVlKSwgZC5nZXRWYXIoIlBWIiwgVHJ1ZSksIGQuZ2V0VmFyKCJQUiIsIFRydWUpKQorCisgICAgc2FuaXR5Y2hlY2tzID0gWworICAgICAgICAoY2FuX2RlbGV0ZV9GSUxFU0RJUiwgImNhbmRpZGF0ZSBmb3IgcmVtb3ZhbCBvZiBGSUxFU0RJUiIpLAorICAgICAgICAoY2FuX2RlbGV0ZV9GSUxFU1BBVEgsICJjYW5kaWRhdGUgZm9yIHJlbW92YWwgb2YgRklMRVNQQVRIIiksCisgICAgICAgICMoY2FuX3VzZV9hdXRvdG9vbHNfYmFzZSwgImNhbmRpZGF0ZSBmb3IgdXNlIG9mIGF1dG90b29sc19iYXNlIiksCisgICAgICAgIChpbmNvcnJlY3Rfbm9uZW1wdHlfUEFDS0FHRVMsICJuYXRpdmUgb3IgY3Jvc3MgcmVjaXBlIHdpdGggbm9uLWVtcHR5IFBBQ0tBR0VTIiksCisgICAgXQorICAgIGNmZ2RhdGEgPSBkLmdldFZhcigiX19yZWNpcGVfc2FuaXR5X2NmZ2RhdGEiLCAwKQorCisgICAgZm9yIChmdW5jLCBtc2cpIGluIHNhbml0eWNoZWNrczoKKyAgICAgICAgaWYgZnVuYyhjZmdkYXRhLCBkKToKKyAgICAgICAgICAgIF9fbm90ZShtc2csIGQpCisKKyAgICBjYW5fZGVsZXRlX290aGVycyhwLCBjZmdkYXRhLCBkKQorICAgIHZhcl9yZW5hbWVzX292ZXJ3cml0ZShjZmdkYXRhLCBkKQorICAgIHJlcV92YXJzKGNmZ2RhdGEsIGQpCisgICAgYmFkX3J1bnRpbWVfdmFycyhjZmdkYXRhLCBkKQorfQorZG9fcmVjaXBlX3Nhbml0eVtub3N0YW1wXSA9ICIxIgorYWRkdGFzayByZWNpcGVfc2FuaXR5CisKK2RvX3JlY2lwZV9zYW5pdHlfYWxsW25vc3RhbXBdID0gIjEiCitkb19yZWNpcGVfc2FuaXR5X2FsbFtyZWNyZGVwdGFza10gPSAiZG9fcmVjaXBlX3Nhbml0eV9hbGwgZG9fcmVjaXBlX3Nhbml0eSIKK2RvX3JlY2lwZV9zYW5pdHlfYWxsICgpIHsKKyAgICA6Cit9CithZGR0YXNrIHJlY2lwZV9zYW5pdHlfYWxsIGFmdGVyIGRvX3JlY2lwZV9zYW5pdHkKKworcHl0aG9uIHJlY2lwZV9zYW5pdHlfZWggKCkgeworICAgIGQgPSBlLmRhdGEKKworICAgIGNmZ2RhdGEgPSB7fQorICAgIGZvciBrIGluIGQua2V5cygpOgorICAgICNmb3IgayBpbiBbIlMiLCAiUFIiLCAiUFYiLCAiUE4iLCAiREVTQ1JJUFRJT04iLCAiTElDRU5TRSIsICJERVBFTkRTIiwKKyAgICAjICAgICAgICAgICJTRUNUSU9OIl06CisgICAgICAgIGNmZ2RhdGFba10gPSBkLmdldFZhcihrLCAwKQorCisgICAgZC5zZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgY2ZnZGF0YSkKKyAgICAjZC5zZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9jZmdkYXRhIiwgZCkKKworICAgICMgU2ljaywgdmVyeSBzaWNrLi4KKyAgICBmcm9tIGJiLmRhdGFfc21hcnQgaW1wb3J0IERhdGFTbWFydAorICAgIG9sZCA9IERhdGFTbWFydC5yZW5hbWVWYXIKKyAgICBkZWYgbXlyZW5hbWUoc2VsZiwga2V5LCBuZXdrZXkpOgorICAgICAgICBvbGR2YWx1ZSA9IHNlbGYuZ2V0VmFyKG5ld2tleSwgMCkKKyAgICAgICAgb2xkKHNlbGYsIGtleSwgbmV3a2V5KQorICAgICAgICBuZXd2YWx1ZSA9IHNlbGYuZ2V0VmFyKG5ld2tleSwgMCkKKyAgICAgICAgaWYgb2xkdmFsdWU6CisgICAgICAgICAgICByZW5hbWVzID0gc2VsZi5nZXRWYXIoIl9fcmVjaXBlX3Nhbml0eV9yZW5hbWVzIiwgMCkgb3Igc2V0KCkKKyAgICAgICAgICAgIHJlbmFtZXMuYWRkKChrZXksIG5ld2tleSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuc2V0VmFyKCJfX3JlY2lwZV9zYW5pdHlfcmVuYW1lcyIsIHJlbmFtZXMpCisgICAgRGF0YVNtYXJ0LnJlbmFtZVZhciA9IG15cmVuYW1lCit9CithZGRoYW5kbGVyIHJlY2lwZV9zYW5pdHlfZWgKK3JlY2lwZV9zYW5pdHlfZWhbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yZWxvY2F0YWJsZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTk5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcmVsb2NhdGFibGUuYmJjbGFzcwpAQCAtMCwwICsxLDcgQEAKK2luaGVyaXQgY2hycGF0aAorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInJlbG9jYXRhYmxlX2JpbmFyaWVzX3ByZXByb2Nlc3MiCisKK3B5dGhvbiByZWxvY2F0YWJsZV9iaW5hcmllc19wcmVwcm9jZXNzKCkgeworICAgIHJwYXRoX3JlcGxhY2UoZC5leHBhbmQoJyR7U1lTUk9PVF9ERVNURElSfScpLCBkKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3JlcG9ydC1lcnJvci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MGMyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcmVwb3J0LWVycm9yLmJiY2xhc3MKQEAgLTAsMCArMSw5MiBAQAorIworIyBDb2xsZWN0cyBkZWJ1ZyBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBjcmVhdGUgZXJyb3IgcmVwb3J0IGZpbGVzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBBbmRyZWVhIEJyYW5kdXNhIFByb2NhIDxhbmRyZWVhLmIucHJvY2FAaW50ZWwuY29tPgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UsIHNlZSBDT1BZSU5HLk1JVCBmb3IgZGV0YWlscworCitFUlJfUkVQT1JUX0RJUiA/PSAiJHtMT0dfRElSfS9lcnJvci1yZXBvcnQiCisKK2RlZiBlcnJvcnJlcG9ydF9nZXRkYXRhKGUpOgorICAgIGxvZ3BhdGggPSBlLmRhdGEuZ2V0VmFyKCdFUlJfUkVQT1JUX0RJUicsIFRydWUpCisgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImVycm9yLXJlcG9ydC50eHQiKQorICAgIHdpdGggb3BlbihkYXRhZmlsZSkgYXMgZjoKKyAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgcmV0dXJuIGRhdGEKKworZGVmIGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIG5ld2RhdGEsIGZpbGUpOgorICAgIGltcG9ydCBqc29uCisgICAgbG9ncGF0aCA9IGUuZGF0YS5nZXRWYXIoJ0VSUl9SRVBPUlRfRElSJywgVHJ1ZSkKKyAgICBkYXRhZmlsZSA9IG9zLnBhdGguam9pbihsb2dwYXRoLCBmaWxlKQorICAgIHdpdGggb3BlbihkYXRhZmlsZSwgInciKSBhcyBmOgorICAgICAgICBqc29uLmR1bXAobmV3ZGF0YSwgZiwgaW5kZW50PTQsIHNvcnRfa2V5cz1UcnVlKQorICAgIHJldHVybiBkYXRhZmlsZQorCitweXRob24gZXJyb3JyZXBvcnRfaGFuZGxlciAoKSB7CisgICAgICAgIGltcG9ydCBqc29uCisKKyAgICAgICAgbG9ncGF0aCA9IGUuZGF0YS5nZXRWYXIoJ0VSUl9SRVBPUlRfRElSJywgVHJ1ZSkKKyAgICAgICAgZGF0YWZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgImVycm9yLXJlcG9ydC50eHQiKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZSwgYmIuZXZlbnQuQnVpbGRTdGFydGVkKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihsb2dwYXRoKQorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICBtYWNoaW5lID0gZS5kYXRhLmdldFZhcigiTUFDSElORSIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydtYWNoaW5lJ10gPSBtYWNoaW5lCisgICAgICAgICAgICBkYXRhWydidWlsZF9zeXMnXSA9IGUuZGF0YS5nZXRWYXIoIkJVSUxEX1NZUyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWyduYXRpdmVsc2InXSA9IGUuZGF0YS5nZXRWYXIoIk5BVElWRUxTQlNUUklORyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWydkaXN0cm8nXSA9IGUuZGF0YS5nZXRWYXIoIkRJU1RSTyIsIFRydWUpCisgICAgICAgICAgICBkYXRhWyd0YXJnZXRfc3lzJ10gPSBlLmRhdGEuZ2V0VmFyKCJUQVJHRVRfU1lTIiwgVHJ1ZSkKKyAgICAgICAgICAgIGRhdGFbJ2ZhaWx1cmVzJ10gPSBbXQorICAgICAgICAgICAgZGF0YVsnY29tcG9uZW50J10gPSBlLmdldFBrZ3MoKVswXQorICAgICAgICAgICAgZGF0YVsnYnJhbmNoX2NvbW1pdCddID0gYmFzZV9kZXRlY3RfYnJhbmNoKGUuZGF0YSkgKyAiOiAiICsgYmFzZV9kZXRlY3RfcmV2aXNpb24oZS5kYXRhKQorICAgICAgICAgICAgbG9jayA9IGJiLnV0aWxzLmxvY2tmaWxlKGRhdGFmaWxlICsgJy5sb2NrJykKKyAgICAgICAgICAgIGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGRhdGEsICJlcnJvci1yZXBvcnQudHh0IikKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZSwgYmIuYnVpbGQuVGFza0ZhaWxlZCk6CisgICAgICAgICAgICB0YXNrID0gZS50YXNrCisgICAgICAgICAgICB0YXNrZGF0YT17fQorICAgICAgICAgICAgbG9nID0gZS5kYXRhLmdldFZhcignQkJfTE9HRklMRScsIFRydWUpCisgICAgICAgICAgICB0YXNrZGF0YVsncGFja2FnZSddID0gZS5kYXRhLmV4cGFuZCgiJHtQRn0iKQorICAgICAgICAgICAgdGFza2RhdGFbJ3Rhc2snXSA9IHRhc2sKKyAgICAgICAgICAgIGlmIGxvZzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvZ0ZpbGUgPSBvcGVuKGxvZywgJ3InKQorICAgICAgICAgICAgICAgICAgICBsb2dkYXRhID0gbG9nRmlsZS5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgICAgIGxvZ0ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgbG9nZGF0YSA9ICJVbmFibGUgdG8gcmVhZCBsb2cgZmlsZSIKKworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2dkYXRhID0gIk5vIExvZyIKKworICAgICAgICAgICAgIyBzZXJ2ZXIgd2lsbCByZWZ1c2UgZmFpbHVyZXMgbG9uZ2VyIHRoYW4gcGFyYW0gc3BlY2lmaWVkIGluIHByb2plY3Quc2V0dGluZ3MucHkKKyAgICAgICAgICAgICMgTUFYX1VQTE9BRF9TSVpFID0gIjUyNDI4ODAiCisgICAgICAgICAgICAjIHVzZSBsb3dlciB2YWx1ZSwgYmVjYXVzZSA2NTAgY2hhcnMgY2FuIGJlIHNwZW50IGluIHRhc2ssIHBhY2thZ2UsIHZlcnNpb24KKyAgICAgICAgICAgIG1heF9sb2dkYXRhX3NpemUgPSA1MjQyMDAwCisgICAgICAgICAgICAjIHVwbG9hZCBsYXN0IG1heF9sb2dkYXRhX3NpemUgY2hhcmFjdGVycworICAgICAgICAgICAgaWYgbGVuKGxvZ2RhdGEpID4gbWF4X2xvZ2RhdGFfc2l6ZToKKyAgICAgICAgICAgICAgICBsb2dkYXRhID0gIi4uLiIgKyBsb2dkYXRhWy1tYXhfbG9nZGF0YV9zaXplOl0KKyAgICAgICAgICAgIHRhc2tkYXRhWydsb2cnXSA9IGxvZ2RhdGEKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBqc29uZGF0YSA9IGpzb24ubG9hZHMoZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKSkKKyAgICAgICAgICAgIGpzb25kYXRhWydmYWlsdXJlcyddLmFwcGVuZCh0YXNrZGF0YSkKKyAgICAgICAgICAgIGVycm9ycmVwb3J0X3NhdmVkYXRhKGUsIGpzb25kYXRhLCAiZXJyb3ItcmVwb3J0LnR4dCIpCisgICAgICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGUsIGJiLmV2ZW50LkJ1aWxkQ29tcGxldGVkKToKKyAgICAgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShkYXRhZmlsZSArICcubG9jaycpCisgICAgICAgICAgICBqc29uZGF0YSA9IGpzb24ubG9hZHMoZXJyb3JyZXBvcnRfZ2V0ZGF0YShlKSkKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKyAgICAgICAgICAgIGZhaWx1cmVzID0ganNvbmRhdGFbJ2ZhaWx1cmVzJ10KKyAgICAgICAgICAgIGlmKGxlbihmYWlsdXJlcykgPiAwKToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9ICJlcnJvcl9yZXBvcnRfIiArIGUuZGF0YS5nZXRWYXIoIkJVSUxETkFNRSIsIFRydWUpKyIudHh0IgorICAgICAgICAgICAgICAgIGRhdGFmaWxlID0gZXJyb3JyZXBvcnRfc2F2ZWRhdGEoZSwganNvbmRhdGEsIGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlRoZSBlcnJvcnMgZm9yIHRoaXMgYnVpbGQgYXJlIHN0b3JlZCBpbiAlc1xuWW91IGNhbiBzZW5kIHRoZSBlcnJvcnMgdG8gYSByZXBvcnRzIHNlcnZlciBieSBydW5uaW5nOlxuICBzZW5kLWVycm9yLXJlcG9ydCAlcyBbLXMgc2VydmVyXSIgJSAoZGF0YWZpbGUsIGRhdGFmaWxlKSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJUaGUgY29udGVudHMgb2YgdGhlc2UgbG9ncyB3aWxsIGJlIHBvc3RlZCBpbiBwdWJsaWMgaWYgeW91IHVzZSB0aGUgYWJvdmUgY29tbWFuZCB3aXRoIHRoZSBkZWZhdWx0IHNlcnZlci4gUGxlYXNlIGVuc3VyZSB5b3UgcmVtb3ZlIGFueSBpZGVudGlmeWluZyBvciBwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiB3aGVuIHByb21wdGVkIGJlZm9yZSBzZW5kaW5nLiIpCit9CisKK2FkZGhhbmRsZXIgZXJyb3JyZXBvcnRfaGFuZGxlcgorZXJyb3JyZXBvcnRfaGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LkJ1aWxkU3RhcnRlZCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCBiYi5idWlsZC5UYXNrRmFpbGVkIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3JtX3dvcmsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5ZWZjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9ybV93b3JrLmJiY2xhc3MKQEAgLTAsMCArMSwxMjAgQEAKKyMKKyMgUmVtb3ZlcyBzb3VyY2UgYWZ0ZXIgYnVpbGQKKyMKKyMgVG8gdXNlIGl0IGFkZCB0aGF0IGxpbmUgdG8gY29uZi9sb2NhbC5jb25mOgorIworIyBJTkhFUklUICs9ICJybV93b3JrIgorIworIyBUbyBpbmhpYml0IHJtX3dvcmsgZm9yIHNvbWUgcmVjaXBlcywgc3BlY2lmeSB0aGVtIGluIFJNX1dPUktfRVhDTFVERS4KKyMgRm9yIGV4YW1wbGUsIGluIGNvbmYvbG9jYWwuY29uZjoKKyMKKyMgUk1fV09SS19FWENMVURFICs9ICJpY3UtbmF0aXZlIGljdSBidXN5Ym94IgorIworCisjIFVzZSB0aGUgY29tcGxldGlvbiBzY2hlZHVsZXIgYnkgZGVmYXVsdCB3aGVuIHJtX3dvcmsgaXMgYWN0aXZlCisjIHRvIHRyeSBhbmQgcmVkdWNlIGRpc2sgdXNhZ2UKK0JCX1NDSEVEVUxFUiA/PSAiY29tcGxldGlvbiIKKworUk1XT1JLX09SSUdfVEFTSyA6PSAiJHtCQl9ERUZBVUxUX1RBU0t9IgorQkJfREVGQVVMVF9UQVNLID0gInJtX3dvcmtfYWxsIgorCitkb19ybV93b3JrICgpIHsKKyAgICAjIElmIHRoZSByZWNpcGUgbmFtZSBpcyBpbiB0aGUgUk1fV09SS19FWENMVURFLCBza2lwIHRoZSByZWNpcGUuCisgICAgZm9yIHAgaW4gJHtSTV9XT1JLX0VYQ0xVREV9OyBkbworICAgICAgICBpZiBbICIkcCIgPSAiJHtQTn0iIF07IHRoZW4KKyAgICAgICAgICAgIGJibm90ZSAicm1fd29yazogU2tpcHBpbmcgJHtQTn0gc2luY2UgaXQgaXMgaW4gUk1fV09SS19FWENMVURFIgorICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgY2QgJHtXT1JLRElSfQorICAgIGZvciBkaXIgaW4gKgorICAgIGRvCisgICAgICAgICMgUmV0YWluIG9ubHkgbG9ncyBhbmQgb3RoZXIgZmlsZXMgaW4gdGVtcCwgc2FmZWx5IGlnbm9yZQorICAgICAgICAjIGZhaWx1cmVzIG9mIHJlbW92aW5nIHBzZXVkbyBmb2xlcnMgb24gTkZTMi8zIHNlcnZlci4KKyAgICAgICAgaWYgWyAkZGlyID0gJ3BzZXVkbycgXTsgdGhlbgorICAgICAgICAgICAgcm0gLXJmICRkaXIgMj4gL2Rldi9udWxsIHx8IHRydWUKKyAgICAgICAgZWxpZiBbICRkaXIgIT0gJ3RlbXAnIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1yZiAkZGlyCisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgIyBOZWVkIHRvIGFkZCBwc2V1ZG8gYmFjayBvciBzdWJzcWV1ZW50IHdvcmsgaW4gdGhpcyB3b3JrZGlyCisgICAgIyBtaWdodCBmYWlsIHNpbmNlIHNldHNjZW5lIG1heSBub3QgcmVydW4gdG8gcmVjcmVhdGUgaXQKKyAgICBta2RpciAtcCAke1dPUktESVJ9L3BzZXVkby8KKworICAgICMgQ2hhbmdlIG5vcm1hbCBzdGFtcHMgaW50byBzZXRzY2VuZSBzdGFtcHMgYXMgdGhleSBiZXR0ZXIgcmVmbGVjdCB0aGUKKyAgICAjIGZhY3QgV09SS0RJUiBpcyBub3cgZW1wdHkKKyAgICAjIEFsc28gbGVhdmUgbm9leGVjIHN0YW1wcyBzaW5jZSBzZXRzY2VuZSBzdGFtcHMgZG9uJ3QgY292ZXIgdGhlbQorICAgIGNkIGBkaXJuYW1lICR7U1RBTVB9YAorICAgIGZvciBpIGluIGBiYXNlbmFtZSAke1NUQU1QfWAqCisgICAgZG8KKyAgICAgICAgZm9yIGogaW4gJHtTU1RBVEVUQVNLU30gZG9fc2hhcmVkX3dvcmtkaXIKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGNhc2UgJGkgaW4KKyAgICAgICAgICAgICpkb19zZXRzY2VuZSopCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKnNpZ2RhdGEqKQorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqZG9fcGFja2FnZV93cml0ZSopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICpkb19idWlsZCopCisgICAgICAgICAgICAgICAgaT1kdW1teQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICMgV2UgcmVtb3ZlIGRvX3BhY2thZ2UgZW50aXJlbHksIGluY2x1ZGluZyBhbnkKKyAgICAgICAgICAgICMgc3N0YXRlIHZlcnNpb24gc2luY2Ugb3RoZXJ3aXNlIHdlJ2QgbmVlZCB0byBsZWF2ZSAncGxhaW5kaXJzJyBhcm91bmQKKyAgICAgICAgICAgICMgc3VjaCBhcyAncGFja2FnZXMnIGFuZCAncGFja2FnZXMtc3BsaXQnIGFuZCB0aGVzZSBjYW4gYmUgbGFyZ2UuIE5vIGVuZAorICAgICAgICAgICAgIyBvZiBjaGFpbiB0YXNrcyBkZXBlbmQgZGlyZWN0bHkgb24gZG9fcGFja2FnZSBhbnltb3JlLgorICAgICAgICAgICAgKmRvX3BhY2thZ2V8KmRvX3BhY2thZ2UuKnwqZG9fcGFja2FnZV9zZXRzY2VuZS4qKQorICAgICAgICAgICAgICAgIHJtIC1mICRpOworICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqX3NldHNjZW5lKikKKyAgICAgICAgICAgICAgICBpPWR1bW15CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKiRqfCokai4qKQorICAgICAgICAgICAgICAgIG12ICRpIGBlY2hvICRpIHwgc2VkIC1lICJzIyR7an0jJHtqfV9zZXRzY2VuZSMiYAorICAgICAgICAgICAgICAgIGk9ZHVtbXkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorICAgICAgICBybSAtZiAkaQorICAgIGRvbmUKK30KK2FkZHRhc2sgcm1fd29yayBhZnRlciBkb18ke1JNV09SS19PUklHX1RBU0t9CisKK2RvX3JtX3dvcmtfYWxsICgpIHsKKyAgICA6Cit9Citkb19ybV93b3JrX2FsbFtyZWNyZGVwdGFza10gPSAiZG9fcm1fd29yayIKK2FkZHRhc2sgcm1fd29ya19hbGwgYWZ0ZXIgZG9fcm1fd29yaworCitkb19wb3B1bGF0ZV9zZGtbcG9zdGZ1bmNzXSArPSAicm1fd29ya19wb3B1bGF0ZXNkayIKK3JtX3dvcmtfcG9wdWxhdGVzZGsgKCkgeworICAgIDoKK30KK3JtX3dvcmtfcG9wdWxhdGVzZGtbY2xlYW5kaXJzXSA9ICIke1dPUktESVJ9L3NkayIKKworZG9fcm9vdGZzW3Bvc3RmdW5jc10gKz0gInJtX3dvcmtfcm9vdGZzIgorcm1fd29ya19yb290ZnMgKCkgeworICAgIDoKK30KK3JtX3dvcmtfcm9vdGZzW2NsZWFuZGlyc10gPSAiJHtXT1JLRElSfS9yb290ZnMiCisKK3B5dGhvbiAoKSB7CisgICAgIyBJZiB0aGUgcmVjaXBlIG5hbWUgaXMgaW4gdGhlIFJNX1dPUktfRVhDTFVERSwgc2tpcCB0aGUgcmVjaXBlLgorICAgIGV4Y2x1ZGVzID0gKGQuZ2V0VmFyKCJSTV9XT1JLX0VYQ0xVREUiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBpZiBwbiBpbiBleGNsdWRlczoKKyAgICAgICAgZC5kZWxWYXJGbGFnKCdybV93b3JrX3Jvb3RmcycsICdjbGVhbmRpcnMnKQorICAgICAgICBkLmRlbFZhckZsYWcoJ3JtX3dvcmtfcG9wdWxhdGVzZGsnLCAnY2xlYW5kaXJzJykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yb290ZnNfZGViLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MWI0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX2RlYi5iYmNsYXNzCkBAIC0wLDAgKzEsMzkgQEAKKyMKKyMgQ29weXJpZ2h0IDIwMDYtMjAwNyBPcGVuZWRoYW5kIEx0ZC4KKyMKKworUk9PVEZTX1BLR01BTkFHRSA9ICJkcGtnIGFwdCIKK1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQICA9ICJydW4tcG9zdGluc3RzIgorCitkb19yb290ZnNbZGVwZW5kc10gKz0gImRwa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYXB0LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICJkcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IGFwdC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBiemlwMi1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3Jvb3Rmc1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfZGViIgorcm9vdGZzX2RlYl9kb19yb290ZnNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJCVUlMRE5BTUUiCitkb19yb290ZnNbdmFyZGVwc10gKz0gIlBBQ0tBR0VfRkVFRF9VUklTIgorCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX0RFQn0vZGViLmxvY2siCitkb19wb3B1bGF0ZV9zZGtbbG9ja2ZpbGVzXSArPSAiJHtERVBMT1lfRElSX0RFQn0vZGViLmxvY2siCisKK3B5dGhvbiByb290ZnNfZGViX2JhZF9yZWNvbW1lbmRhdGlvbnMoKSB7CisgICAgaWYgZC5nZXRWYXIoIkJBRF9SRUNPTU1FTkRBVElPTlMiLCBUcnVlKToKKyAgICAgICAgYmIud2FybigiRGViaWFuIHBhY2thZ2UgaW5zdGFsbCBkb2VzIG5vdCBzdXBwb3J0IEJBRF9SRUNPTU1FTkRBVElPTlMiKQorfQorZG9fcm9vdGZzW3ByZWZ1bmNzXSArPSAicm9vdGZzX2RlYl9iYWRfcmVjb21tZW5kYXRpb25zIgorCitERUJfUE9TVFBST0NFU1NfQ09NTUFORFMgPSAiIgorCitvcGtnbGliZGlyID0gIiR7bG9jYWxzdGF0ZWRpcn0vbGliL29wa2ciCisKK3B5dGhvbiAoKSB7CisgICAgIyBNYXAgVEFSR0VUX0FSQ0ggdG8gRGViaWFuJ3MgaWRlYXMgYWJvdXQgYXJjaGl0ZWN0dXJlcworICAgIGRhcmNoID0gZC5nZXRWYXIoJ1NES19BUkNIJywgVHJ1ZSkKKyAgICBpZiBkYXJjaCBpbiBbIng4NiIsICJpNDg2IiwgImk1ODYiLCAiaTY4NiIsICJwZW50aXVtIl06CisgICAgICAgICBkLnNldFZhcignREVCX1NES19BUkNIJywgJ2kzODYnKQorICAgIGVsaWYgZGFyY2ggPT0gIng4Nl82NCI6CisgICAgICAgICBkLnNldFZhcignREVCX1NES19BUkNIJywgJ2FtZDY0JykKKyAgICBlbGlmIGRhcmNoID09ICJhcm0iOgorICAgICAgICAgZC5zZXRWYXIoJ0RFQl9TREtfQVJDSCcsICdhcm1lbCcpCit9CisKKyMgVGhpcyB3aWxsIG9mIGNvdXJzZSBvbmx5IHdvcmsgYWZ0ZXIgcm9vdGZzX2RlYl9kb19yb290ZnMgb3IgcG9wdWxhdGVfc2RrX2RlYiBoYXMgYmVlbiBjYWxsZWQKK0RQS0dfUVVFUllfQ09NTUFORCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vZHBrZy1xdWVyeSAtLWFkbWluZGlyPSRJTlNUQUxMX1JPT1RGU19ERUIvdmFyL2xpYi9kcGtnIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Jvb3Rmc19pcGsuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxNDRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9yb290ZnNfaXBrLmJiY2xhc3MKQEAgLTAsMCArMSwzOSBAQAorIworIyBDcmVhdGVzIGEgcm9vdCBmaWxlc3lzdGVtIG91dCBvZiBJUEtzCisjCisjIFRoaXMgcm9vdGZzIGNhbiBiZSBtb3VudGVkIHZpYSByb290LW5mcyBvciBpdCBjYW4gYmUgcHV0IGludG8gYW4gY3JhbWZzL2pmZnMgZXRjLgorIyBTZWUgaW1hZ2UuYmJjbGFzcyBmb3IgYSB1c2FnZSBvZiB0aGlzLgorIworCitFWFRSQU9QS0dDT05GSUcgPz0gIiIKK1JPT1RGU19QS0dNQU5BR0UgPSAib3BrZyAke0VYVFJBT1BLR0NPTkZJR30iCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCAgPSAicnVuLXBvc3RpbnN0cyIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJvcGtnLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IG9wa2ctdXRpbHMtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wb3B1bGF0ZV9zZGtbZGVwZW5kc10gKz0gIm9wa2ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Qgb3BrZy11dGlscy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK2RvX3Jvb3Rmc1tyZWNyZGVwdGFza10gKz0gImRvX3BhY2thZ2Vfd3JpdGVfaXBrIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKK3Jvb3Rmc19pcGtfZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorCitkb19yb290ZnNbbG9ja2ZpbGVzXSArPSAiJHtXT1JLRElSfS9pcGsubG9jayIKK2RvX3BvcHVsYXRlX3Nka1tsb2NrZmlsZXNdICs9ICIke1dPUktESVJ9L2lway5sb2NrIgorCitPUEtHX1BSRVBST0NFU1NfQ09NTUFORFMgPSAiIgorCitPUEtHX1BPU1RQUk9DRVNTX0NPTU1BTkRTID0gIiIKKworT1BLR0xJQkRJUiA9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYiIKKworTVVMVElMSUJSRV9BTExPV19SRVAgPSAiJHtPUEtHTElCRElSfS9vcGtnfC91c3IvbGliL29wa2ciCisKK3B5dGhvbiAoKSB7CisKKyAgICBpZiBkLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKToKKyAgICAgICAgZmxhZ3MgPSBkLmdldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcGFja2FnZV93cml0ZV9pcGsiLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19kZXBsb3kiLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19wb3B1bGF0ZV9zeXNyb290IiwgIiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ3JlY3JkZXB0YXNrJywgZmxhZ3MpCisgICAgICAgIGQuc2V0VmFyKCdPUEtHX1BSRVBST0NFU1NfQ09NTUFORFMnLCAiIikKKyAgICAgICAgZC5zZXRWYXIoJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnJykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9yb290ZnNfcnBtLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWQwMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvcm9vdGZzX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgQ3JlYXRlcyBhIHJvb3QgZmlsZXN5c3RlbSBvdXQgb2YgcnBtIHBhY2thZ2VzCisjCisKK1JPT1RGU19QS0dNQU5BR0UgPSAicnBtIHNtYXJ0cG0iCitST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUCA9ICJydW4tcG9zdGluc3RzIgorCisjIEFkZCA1ME1lZyBvZiBleHRyYSBzcGFjZSBmb3IgU21hcnQKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlBBQ0tBR0VfSU5TVEFMTCIsICJzbWFydHBtIiwgIiArIDUxMjAwIiwgIiIgLGQpfSIKKworIyBTbWFydCBpcyBweXRob24gYmFzZWQsIHNvIGJlIHN1cmUgcHl0aG9uLW5hdGl2ZSBpcyBhdmFpbGFibGUgdG8gdXMuCitFWFRSQU5BVElWRVBBVEggKz0gInB5dGhvbi1uYXRpdmUiCisKKyMgb3BrZyBpcyBuZWVkZWQgZm9yIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKK1JQTVJPT1RGU0RFUEVORFMgPSAicnBtLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICBycG1yZXNvbHZlLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IFwKKyAgICBweXRob24tc21hcnRwbS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgY3JlYXRlcmVwby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgb3BrZy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICIke1JQTVJPT1RGU0RFUEVORFN9IgorZG9fcG9wdWxhdGVfc2RrW2RlcGVuZHNdICs9ICIke1JQTVJPT1RGU0RFUEVORFN9IgorCitkb19yb290ZnNbcmVjcmRlcHRhc2tdICs9ICJkb19wYWNrYWdlX3dyaXRlX3JwbSIKK3Jvb3Rmc19ycG1fZG9fcm9vdGZzW3ZhcmRlcHNleGNsdWRlXSArPSAiQlVJTEROQU1FIgorZG9fcm9vdGZzW3ZhcmRlcHNdICs9ICJQQUNLQUdFX0ZFRURfVVJJUyIKKworIyBSUE0gZG9lc24ndCB3b3JrIHdpdGggbXVsdGlwbGUgcm9vdGZzIGdlbmVyYXRpb24gYXQgb25jZSBkdWUgdG8gY29sbGlzaW9ucyBpbiB0aGUgdXNlIG9mIGZpbGVzIAorIyBpbiAke0RFUExPWV9ESVJfUlBNfS4gVGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiBwYWNrYWdlX3VwZGF0ZV9pbmRleF9ycG0gY2FuIGJlIGNhbGxlZCBjb25jdXJyZW50bHkKK2RvX3Jvb3Rmc1tsb2NrZmlsZXNdICs9ICIke0RFUExPWV9ESVJfUlBNfS9ycG0ubG9jayIKK2RvX3BvcHVsYXRlX3Nka1tsb2NrZmlsZXNdICs9ICIke0RFUExPWV9ESVJfUlBNfS9ycG0ubG9jayIKKworcHl0aG9uICgpIHsKKyAgICBpZiBkLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKToKKyAgICAgICAgZmxhZ3MgPSBkLmdldFZhckZsYWcoJ2RvX3Jvb3RmcycsICdyZWNyZGVwdGFzaycpCisgICAgICAgIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgiZG9fcGFja2FnZV93cml0ZV9ycG0iLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19kZXBsb3kiLCAiIikKKyAgICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCJkb19wb3B1bGF0ZV9zeXNyb290IiwgIiIpCisgICAgICAgIGQuc2V0VmFyRmxhZygnZG9fcm9vdGZzJywgJ3JlY3JkZXB0YXNrJywgZmxhZ3MpCisgICAgICAgIGQuc2V0VmFyKCdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsICcnKQorICAgICAgICBkLnNldFZhcignUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgJycpCisKK30KKyMgU21hcnQgaXMgcHl0aG9uIGJhc2VkLCBzbyBiZSBzdXJlIHB5dGhvbi1uYXRpdmUgaXMgYXZhaWxhYmxlIHRvIHVzLgorRVhUUkFOQVRJVkVQQVRIICs9ICJweXRob24tbmF0aXZlIgorCitycG1saWJkaXIgPSAiL3Zhci9saWIvcnBtIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Jvb3Rmc2RlYnVnZmlsZXMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1ODg3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9yb290ZnNkZWJ1Z2ZpbGVzLmJiY2xhc3MKQEAgLTAsMCArMSwzNiBAQAorIyBUaGlzIGNsYXNzIGluc3RhbGxzIGFkZGl0aW9uYWwgZmlsZXMgZm91bmQgb24gdGhlIGJ1aWxkIGhvc3QKKyMgZGlyZWN0bHkgaW50byB0aGUgcm9vdGZzLgorIworIyBPbmUgdXNlIGNhc2UgaXMgdG8gaW5zdGFsbCBhIGNvbnN0YW50IHNzaCBob3N0IGtleSBpbgorIyBhbiBpbWFnZSB0aGF0IGdldHMgY3JlYXRlZCBmb3IganVzdCBvbmUgbWFjaGluZS4gVGhpcworIyBzb2x2ZXMgdHdvIGlzc3VlczoKKyMgLSBob3N0IGtleSBnZW5lcmF0aW9uIG9uIHRoZSBkZXZpY2UgY2FuIHN0YWxsIHdoZW4gdGhlCisjICAga2VybmVsIGhhcyBub3QgZ2F0aGVyZWQgZW5vdWdoIGVudHJvcHkgeWV0IChzZWVuIGluIHByYWN0aWNlCisjICAgdW5kZXIgcWVtdSkKKyMgLSBzc2ggY29tcGxhaW5zIGJ5IGRlZmF1bHQgd2hlbiB0aGUgaG9zdCBrZXkgY2hhbmdlcworIworIyBGb3IgZHJvcGJlYXIsIHdpdGggdGhlIHNzaCBob3N0IGtleSBzdG9yZSBhbG9uZyBzaWRlIHRoZSBsb2NhbC5jb25mOgorIyAxLiBFeHRlbmQgbG9jYWwuY29uZjoKKyMgICAgSU5IRVJJVCArPSAicm9vdGZzZGVidWdmaWxlcyIKKyMgICAgUk9PVEZTX0RFQlVHX0ZJTEVTICs9ICIke1RPUERJUn0vY29uZi9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJHtJTUFHRV9ST09URlN9L2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgOyIKKyMgMi4gQm9vdCB0aGUgaW1hZ2Ugb25jZSwgY29weSB0aGUgZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IGZyb20KKyMgICAgdGhlIGRldmljZSBpbnRvIHlvdXIgYnVpbGQgY29uZiBkaXJlY3RvcnkuCisjCisjIERvIG5vdCB1c2UgZm9yIHByb2R1Y3Rpb24gaW1hZ2VzISBJdCBieXBhc3NlcyBzZXZlcmFsCisjIGNvcmUgYnVpbGQgbWVjaGFuaXNtcyAodXBkYXRpbmcgdGhlIGltYWdlIHdoZW4gb25lCisjIG9mIHRoZSBmaWxlcyBjaGFuZ2VzLCBsaWNlbnNlIHRyYWNraW5nIGluIHRoZSBpbWFnZQorIyBtYW5pZmVzdCwgLi4uKS4KKworUk9PVEZTX0RFQlVHX0ZJTEVTID89ICIiCitST09URlNfREVCVUdfRklMRVNbZG9jXSA9ICJMaXN0cyBhZGRpdGlvbmFsIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIGluc3RhbGxlZCB3aXRoICdjcCAtYScgaW4gdGhlIGZvcm1hdCAnc291cmNlMSB0YXJnZXQxO3NvdXJjZTIgdGFyZ2V0MjsuLi4nIgorCitST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCArPSAicm9vdGZzX2RlYnVnX2ZpbGVzIDsiCityb290ZnNfZGVidWdfZmlsZXMgKCkgeworICAgIyEvYmluL3NoIC1lCisgICBlY2hvICIke1JPT1RGU19ERUJVR19GSUxFU30iIHwgc2VkIC1lICdzLzsvXG4vZycgfCB3aGlsZSByZWFkIHNvdXJjZSB0YXJnZXQ7IGRvCisgICAgICBpZiBbIC1lICIkc291cmNlIiBdOyB0aGVuCisgICAgICAgICBta2RpciAtcCAkKGRpcm5hbWUgJHRhcmdldCkKKyAgICAgICAgIGNwIC1hICRzb3VyY2UgJHRhcmdldAorICAgICAgZmkKKyAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zYW5pdHkuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWI3NDRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Nhbml0eS5iYmNsYXNzCkBAIC0wLDAgKzEsOTQ1IEBACisjCisjIFNhbml0eSBjaGVjayB0aGUgdXNlcnMgc2V0dXAgZm9yIGNvbW1vbiBtaXNjb25maWd1cmF0aW9ucworIworCitTQU5JVFlfUkVRVUlSRURfVVRJTElUSUVTID89ICJwYXRjaCBkaWZmc3RhdCBtYWtlaW5mbyBnaXQgYnppcDIgdGFyIFwKKyAgICBnemlwIGdhd2sgY2hycGF0aCB3Z2V0IGNwaW8gcGVybCIKKworZGVmIGJibGF5ZXJzX2NvbmZfZmlsZShkKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCdUT1BESVInLCBUcnVlKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpCisKK2RlZiBzYW5pdHlfY29uZl9yZWFkKGZuKToKKyAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgcmV0dXJuIGxpbmVzCisKK2RlZiBzYW5pdHlfY29uZl9maW5kX2xpbmUocGF0dGVybiwgbGluZXMpOgorICAgIGltcG9ydCByZQorICAgIHJldHVybiBuZXh0KCgoaW5kZXgsIGxpbmUpCisgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpCisgICAgICAgIGlmIHJlLnNlYXJjaChwYXR0ZXJuLCBsaW5lKSksIChOb25lLCBOb25lKSkKKworZGVmIHNhbml0eV9jb25mX3VwZGF0ZShmbiwgbGluZXMsIHZlcnNpb25fdmFyX25hbWUsIG5ld192ZXJzaW9uKToKKyAgICBpbmRleCwgbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSh2ZXJzaW9uX3Zhcl9uYW1lLCBsaW5lcykKKyAgICBsaW5lc1tpbmRleF0gPSAnJXMgPSAiJWQiXG4nICUgKHZlcnNpb25fdmFyX25hbWUsIG5ld192ZXJzaW9uKQorICAgIHdpdGggb3BlbihmbiwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKCcnLmpvaW4obGluZXMpKQorCisjIEZ1bmN0aW9ucyBhZGRlZCB0byB0aGlzIHZhcmlhYmxlIE1VU1QgdGhyb3cgYW4gZXhjZXB0aW9uIChvciBzeXMuZXhpdCgpKSB1bmxlc3MgdGhleQorIyBzdWNjZXNzZnVsbHkgY2hhbmdlZCBMQ09ORl9WRVJTSU9OIGluIGJibGF5ZXJzLmNvbmYKK0JCTEFZRVJTX0NPTkZfVVBEQVRFX0ZVTkNTICs9ICJvZWNvcmVfdXBkYXRlX2JibGF5ZXJzIgorCitweXRob24gb2Vjb3JlX3VwZGF0ZV9iYmxheWVycygpIHsKKyAgICAjIGJibGF5ZXJzLmNvbmYgaXMgb3V0IG9mIGRhdGUsIHNvIHNlZSBpZiB3ZSBjYW4gcmVzb2x2ZSB0aGF0CisKKyAgICBjdXJyZW50X2xjb25mID0gaW50KGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkpCisgICAgaWYgbm90IGN1cnJlbnRfbGNvbmY6CisgICAgICAgIHN5cy5leGl0KCkKKyAgICBsY29uZl92ZXJzaW9uID0gaW50KGQuZ2V0VmFyKCdMQVlFUl9DT05GX1ZFUlNJT04nLCBUcnVlKSkKKyAgICBsaW5lcyA9IFtdCisKKyAgICBpZiBjdXJyZW50X2xjb25mIDwgNDoKKyAgICAgICAgc3lzLmV4aXQoKQorCisgICAgYmJsYXllcnNfZm4gPSBiYmxheWVyc19jb25mX2ZpbGUoZCkKKyAgICBsaW5lcyA9IHNhbml0eV9jb25mX3JlYWQoYmJsYXllcnNfZm4pCisKKyAgICBpZiBjdXJyZW50X2xjb25mID09IDQgYW5kIGxjb25mX3ZlcnNpb24gPiA0OgorICAgICAgICB0b3BkaXJfdmFyID0gJyQnICsgJ3tUT1BESVJ9JworICAgICAgICBpbmRleCwgYmJwYXRoX2xpbmUgPSBzYW5pdHlfY29uZl9maW5kX2xpbmUoJ0JCUEFUSCcsIGxpbmVzKQorICAgICAgICBpZiBiYnBhdGhfbGluZToKKyAgICAgICAgICAgIHN0YXJ0ID0gYmJwYXRoX2xpbmUuZmluZCgnIicpCisgICAgICAgICAgICBpZiBzdGFydCAhPSAtMSBhbmQgKGxlbihiYnBhdGhfbGluZSkgIT0gKHN0YXJ0ICsgMSkpOgorICAgICAgICAgICAgICAgIGlmIGJicGF0aF9saW5lW3N0YXJ0ICsgMV0gPT0gJyInOgorICAgICAgICAgICAgICAgICAgICBsaW5lc1tpbmRleF0gPSAoYmJwYXRoX2xpbmVbOnN0YXJ0ICsgMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wZGlyX3ZhciArIGJicGF0aF9saW5lW3N0YXJ0ICsgMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0b3BkaXJfdmFyIGluIGJicGF0aF9saW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbaW5kZXhdID0gKGJicGF0aF9saW5lWzpzdGFydCArIDFdICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRpcl92YXIgKyAnOicgKyBiYnBhdGhfbGluZVtzdGFydCArIDE6XSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5kZXgsIGJiZmlsZXNfbGluZSA9IHNhbml0eV9jb25mX2ZpbmRfbGluZSgnQkJGSUxFUycsIGxpbmVzKQorICAgICAgICAgICAgaWYgYmJmaWxlc19saW5lOgorICAgICAgICAgICAgICAgIGxpbmVzLmluc2VydChpbmRleCwgJ0JCUEFUSCA9ICInICsgdG9wZGlyX3ZhciArICciXG4nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgpCisKKyAgICAgICAgY3VycmVudF9sY29uZiArPSAxCisgICAgICAgIHNhbml0eV9jb25mX3VwZGF0ZShiYmxheWVyc19mbiwgbGluZXMsICdMQ09ORl9WRVJTSU9OJywgY3VycmVudF9sY29uZikKKyAgICAgICAgcmV0dXJuCisKKyAgICBlbGlmIGN1cnJlbnRfbGNvbmYgPT0gNSBhbmQgbGNvbmZfdmVyc2lvbiA+IDU6CisgICAgICAgICMgTnVsbCB1cGRhdGUsIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHBlb3BsZSBzd2l0Y2hpbmcgYmV0d2VlbiBwb2t5IGFuZCBvdGhlciBkaXN0cm9zCisgICAgICAgIGN1cnJlbnRfbGNvbmYgPSA2CisgICAgICAgIHNhbml0eV9jb25mX3VwZGF0ZShiYmxheWVyc19mbiwgbGluZXMsICdMQ09ORl9WRVJTSU9OJywgY3VycmVudF9sY29uZikKKyAgICAgICAgcmV0dXJuCisKKyAgICBzeXMuZXhpdCgpCit9CisKK2RlZiByYWlzZV9zYW5pdHlfZXJyb3IobXNnLCBkLCBuZXR3b3JrX2Vycm9yPUZhbHNlKToKKyAgICBpZiBkLmdldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCBUcnVlKSA9PSAiMSI6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2tGYWlsZWQobXNnLCBuZXR3b3JrX2Vycm9yKSwgZCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuU2FuaXR5Q2hlY2tGYWlsZWQobXNnKSwgZCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBiYi5mYXRhbCgiIiIgT0UtY29yZSdzIGNvbmZpZyBzYW5pdHkgY2hlY2tlciBkZXRlY3RlZCBhIHBvdGVudGlhbCBtaXNjb25maWd1cmF0aW9uLgorICAgIEVpdGhlciBmaXggdGhlIGNhdXNlIG9mIHRoaXMgZXJyb3Igb3IgYXQgeW91ciBvd24gcmlzayBkaXNhYmxlIHRoZSBjaGVja2VyIChzZWUgc2FuaXR5LmNvbmYpLgorICAgIEZvbGxvd2luZyBpcyB0aGUgbGlzdCBvZiBwb3RlbnRpYWwgcHJvYmxlbXMgLyBhZHZpc29yaWVzOgorICAgIAorICAgICVzIiIiICUgbXNnKQorCisjIENoZWNrIGZsYWdzIGFzc29jaWF0ZWQgd2l0aCBhIHR1bmluZy4KK2RlZiBjaGVja190b29sY2hhaW5fdHVuZV9hcmdzKGRhdGEsIHR1bmUsIG11bHRpbGliLCBlcnJzKToKKyAgICBmb3VuZF9lcnJvcnMgPSBGYWxzZQorICAgIGlmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMsICdDQ0FSR1MnKToKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgIGlmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMsICdBU0FSR1MnKToKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorICAgIGlmIGNoZWNrX3Rvb2xjaGFpbl9hcmdzX3ByZXNlbnQoZGF0YSwgdHVuZSwgbXVsdGlsaWIsIGVycnMsICdMREFSR1MnKToKKyAgICAgICAgZm91bmRfZXJyb3JzID0gVHJ1ZQorCisgICAgcmV0dXJuIGZvdW5kX2Vycm9ycworCitkZWYgY2hlY2tfdG9vbGNoYWluX2FyZ3NfcHJlc2VudChkYXRhLCB0dW5lLCBtdWx0aWxpYiwgdHVuZV9lcnJvcnMsIHdoaWNoKToKKyAgICBhcmdzX3NldCA9IChkYXRhLmdldFZhcigiVFVORV8lcyIgJSB3aGljaCwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBhcmdzX3dhbnRlZCA9IChkYXRhLmdldFZhcigiVFVORUFCSV9SRVFVSVJFRF8lc190dW5lLSVzIiAlICh3aGljaCwgdHVuZSksIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgYXJnc19taXNzaW5nID0gW10KKworICAgICMgSWYgbm8gYXJncyBhcmUgbGlzdGVkL3JlcXVpcmVkLCB3ZSBhcmUgZG9uZS4KKyAgICBpZiBub3QgYXJnc193YW50ZWQ6CisgICAgICAgIHJldHVybgorICAgIGZvciBhcmcgaW4gYXJnc193YW50ZWQ6CisgICAgICAgIGlmIGFyZyBub3QgaW4gYXJnc19zZXQ6CisgICAgICAgICAgICBhcmdzX21pc3NpbmcuYXBwZW5kKGFyZykKKworICAgIGZvdW5kX2Vycm9ycyA9IEZhbHNlCisgICAgaWYgYXJnc19taXNzaW5nOgorICAgICAgICBmb3VuZF9lcnJvcnMgPSBUcnVlCisgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiVFVORUFCSSBmb3IgJXMgcmVxdWlyZXMgJyVzJyBpbiBUVU5FXyVzICglcykuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICh0dW5lLCAnICcuam9pbihhcmdzX21pc3NpbmcpLCB3aGljaCwgJyAnLmpvaW4oYXJnc19zZXQpKSkKKyAgICByZXR1cm4gZm91bmRfZXJyb3JzCisKKyMgQ2hlY2sgYSBzaW5nbGUgdHVuZSBmb3IgdmFsaWRpdHkuCitkZWYgY2hlY2tfdG9vbGNoYWluX3R1bmUoZGF0YSwgdHVuZSwgbXVsdGlsaWIpOgorICAgIHR1bmVfZXJyb3JzID0gW10KKyAgICBpZiBub3QgdHVuZToKKyAgICAgICAgcmV0dXJuICJObyB0dW5pbmcgZm91bmQgZm9yICVzIG11bHRpbGliLiIgJSBtdWx0aWxpYgorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkYXRhKQorICAgIGlmIG11bHRpbGliICE9ICJkZWZhdWx0IjoKKyAgICAgICAgIyBBcHBseSB0aGUgb3ZlcnJpZGVzIHNvIHdlIGNhbiBsb29rIGF0IHRoZSBkZXRhaWxzLgorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgbXVsdGlsaWIKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgIGJiLmRlYnVnKDIsICJTYW5pdHktY2hlY2tpbmcgdHVuaW5nICclcycgKCVzKSBmZWF0dXJlczoiICUgKHR1bmUsIG11bHRpbGliKSkKKyAgICBmZWF0dXJlcyA9IChsb2NhbGRhdGEuZ2V0VmFyKCJUVU5FX0ZFQVRVUkVTX3R1bmUtJXMiICUgdHVuZSwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBub3QgZmVhdHVyZXM6CisgICAgICAgIHJldHVybiAiVHVuaW5nICclcycgaGFzIG5vIGRlZmluZWQgZmVhdHVyZXMsIGFuZCBjYW5ub3QgYmUgdXNlZC4iICUgdHVuZQorICAgIHZhbGlkX3R1bmVzID0gbG9jYWxkYXRhLmdldFZhckZsYWdzKCdUVU5FVkFMSUQnKSBvciB7fQorICAgIGNvbmZsaWN0cyA9IGxvY2FsZGF0YS5nZXRWYXJGbGFncygnVFVORUNPTkZMSUNUUycpIG9yIHt9CisgICAgIyBbZG9jXSBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHZhcmlhYmxlLCBub3QgYSByZWFsIGZlYXR1cmUKKyAgICBpZiAnZG9jJyBpbiB2YWxpZF90dW5lczoKKyAgICAgICAgZGVsIHZhbGlkX3R1bmVzWydkb2MnXQorICAgIGlmICdkb2MnIGluIGNvbmZsaWN0czoKKyAgICAgICAgZGVsIGNvbmZsaWN0c1snZG9jJ10KKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgaWYgZmVhdHVyZSBpbiBjb25mbGljdHM6CisgICAgICAgICAgICBmb3IgY29uZmxpY3QgaW4gY29uZmxpY3RzW2ZlYXR1cmVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgY29uZmxpY3QgaW4gZmVhdHVyZXM6CisgICAgICAgICAgICAgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiRmVhdHVyZSAnJXMnIGNvbmZsaWN0cyB3aXRoICclcycuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoZmVhdHVyZSwgY29uZmxpY3QpKQorICAgICAgICBpZiBmZWF0dXJlIGluIHZhbGlkX3R1bmVzOgorICAgICAgICAgICAgYmIuZGVidWcoMiwgIiAgJXM6ICVzIiAlIChmZWF0dXJlLCB2YWxpZF90dW5lc1tmZWF0dXJlXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0dW5lX2Vycm9ycy5hcHBlbmQoIkZlYXR1cmUgJyVzJyBpcyBub3QgZGVmaW5lZC4iICUgZmVhdHVyZSkKKyAgICB3aGl0ZWxpc3QgPSBsb2NhbGRhdGEuZ2V0VmFyKCJUVU5FQUJJX1dISVRFTElTVCIsIFRydWUpCisgICAgaWYgd2hpdGVsaXN0OgorICAgICAgICB0dW5lYWJpID0gbG9jYWxkYXRhLmdldFZhcigiVFVORUFCSV90dW5lLSVzIiAlIHR1bmUsIFRydWUpCisgICAgICAgIGlmIG5vdCB0dW5lYWJpOgorICAgICAgICAgICAgdHVuZWFiaSA9IHR1bmUKKyAgICAgICAgaWYgVHJ1ZSBub3QgaW4gW3ggaW4gd2hpdGVsaXN0LnNwbGl0KCkgZm9yIHggaW4gdHVuZWFiaS5zcGxpdCgpXToKKyAgICAgICAgICAgIHR1bmVfZXJyb3JzLmFwcGVuZCgiVHVuaW5nICclcycgKCVzKSBjYW5ub3QgYmUgdXNlZCB3aXRoIGFueSBzdXBwb3J0ZWQgdHVuaW5nL0FCSS4iICUKKyAgICAgICAgICAgICAgICAodHVuZSwgdHVuZWFiaSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgY2hlY2tfdG9vbGNoYWluX3R1bmVfYXJncyhsb2NhbGRhdGEsIHR1bmVhYmksIG11bHRpbGliLCB0dW5lX2Vycm9ycyk6CisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNhbml0eSBjaGVjazogQ29tcGlsZXIgYXJncyBPSyBmb3IgJXMuIiAlIHR1bmUpCisgICAgaWYgdHVuZV9lcnJvcnM6CisgICAgICAgIHJldHVybiAiVHVuaW5nICclcycgaGFzIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuIiAlIHR1bmUgKyAnXG4nLmpvaW4odHVuZV9lcnJvcnMpCisKK2RlZiBjaGVja190b29sY2hhaW4oZGF0YSk6CisgICAgdHVuZV9lcnJvcl9zZXQgPSBbXQorICAgIGRlZnR1bmUgPSBkYXRhLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKQorICAgIHR1bmVfZXJyb3JzID0gY2hlY2tfdG9vbGNoYWluX3R1bmUoZGF0YSwgZGVmdHVuZSwgJ2RlZmF1bHQnKQorICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQodHVuZV9lcnJvcnMpCisKKyAgICBtdWx0aWxpYnMgPSAoZGF0YS5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBnbG9iYWxfbXVsdGlsaWJzID0gKGRhdGEuZ2V0VmFyKCJNVUxUSUxJQl9HTE9CQUxfVkFSSUFOVFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgaWYgbXVsdGlsaWJzOgorICAgICAgICBzZWVuX2xpYnMgPSBbXQorICAgICAgICBzZWVuX3R1bmVzID0gW10KKyAgICAgICAgZm9yIGxpYiBpbiBtdWx0aWxpYnM6CisgICAgICAgICAgICBpZiBsaWIgaW4gc2Vlbl9saWJzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCgiVGhlIG11bHRpbGliICclcycgYXBwZWFycyBtb3JlIHRoYW4gb25jZS4iICUgbGliKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWVuX2xpYnMuYXBwZW5kKGxpYikKKyAgICAgICAgICAgIGlmIG5vdCBsaWIgaW4gZ2xvYmFsX211bHRpbGliczoKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9yX3NldC5hcHBlbmQoIk11bHRpbGliICVzIGlzIG5vdCBwcmVzZW50IGluIE1VTFRJTElCX0dMT0JBTF9WQVJJQU5UUyIgJSBsaWIpCisgICAgICAgICAgICB0dW5lID0gZGF0YS5nZXRWYXIoIkRFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0lcyIgJSBsaWIsIFRydWUpCisgICAgICAgICAgICBpZiB0dW5lIGluIHNlZW5fdHVuZXM6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJUaGUgdHVuaW5nICclcycgYXBwZWFycyBpbiBtb3JlIHRoYW4gb25lIG11bHRpbGliLiIgJSB0dW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWVuX2xpYnMuYXBwZW5kKHR1bmUpCisgICAgICAgICAgICBpZiB0dW5lID09IGRlZnR1bmU6CisgICAgICAgICAgICAgICAgdHVuZV9lcnJvcl9zZXQuYXBwZW5kKCJNdWx0aWxpYiAnJXMnICglcykgaXMgYWxzbyB0aGUgZGVmYXVsdCB0dW5pbmcuIiAlIChsaWIsIGRlZnR1bmUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0dW5lX2Vycm9ycyA9IGNoZWNrX3Rvb2xjaGFpbl90dW5lKGRhdGEsIHR1bmUsIGxpYikKKyAgICAgICAgICAgIGlmIHR1bmVfZXJyb3JzOgorICAgICAgICAgICAgICAgIHR1bmVfZXJyb3Jfc2V0LmFwcGVuZCh0dW5lX2Vycm9ycykKKyAgICBpZiB0dW5lX2Vycm9yX3NldDoKKyAgICAgICAgcmV0dXJuICJUb29sY2hhaW4gdHVuaW5ncyBpbnZhbGlkOlxuIiArICdcbicuam9pbih0dW5lX2Vycm9yX3NldCkgKyAiXG4iCisKKyAgICByZXR1cm4gIiIKKworZGVmIGNoZWNrX2NvbmZfZXhpc3RzKGZuLCBkYXRhKToKKyAgICBiYnBhdGggPSBbXQorICAgIGZuID0gZGF0YS5leHBhbmQoZm4pCisgICAgdmJicGF0aCA9IGRhdGEuZ2V0VmFyKCJCQlBBVEgiLCBGYWxzZSkKKyAgICBpZiB2YmJwYXRoOgorICAgICAgICBiYnBhdGggKz0gdmJicGF0aC5zcGxpdCgiOiIpCisgICAgZm9yIHAgaW4gYmJwYXRoOgorICAgICAgICBjdXJybmFtZSA9IG9zLnBhdGguam9pbihkYXRhLmV4cGFuZChwKSwgZm4pCisgICAgICAgIGlmIG9zLmFjY2VzcyhjdXJybmFtZSwgb3MuUl9PSyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitkZWYgY2hlY2tfY3JlYXRlX2xvbmdfZmlsZW5hbWUoZmlsZXBhdGgsIHBhdGhuYW1lKToKKyAgICBpbXBvcnQgc3RyaW5nLCByYW5kb20KKyAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihmaWxlcGF0aCwgJycuam9pbihyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzKSBmb3IgeCBpbiByYW5nZSgyMDApKSkKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoZmlsZXBhdGgpCisgICAgICAgIGYgPSBvcGVuKHRlc3RmaWxlLCAidyIpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBvcy5yZW1vdmUodGVzdGZpbGUpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGVyciwgc3RyZXJyb3IgPSBlLmFyZ3MKKyAgICAgICAgaWYgZXJyID09IGVycm5vLkVOQU1FVE9PTE9ORzoKKyAgICAgICAgICAgIHJldHVybiAiRmFpbGVkIHRvIGNyZWF0ZSBhIGZpbGUgd2l0aCBhIGxvbmcgbmFtZSBpbiAlcy4gUGxlYXNlIHVzZSBhIGZpbGVzeXN0ZW0gdGhhdCBkb2VzIG5vdCB1bnJlYXNvbmFibHkgbGltaXQgZmlsZW5hbWUgbGVuZ3RoLlxuIiAlIHBhdGhuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgYSBmaWxlIGluICVzOiAlcy5cbiIgJSAocGF0aG5hbWUsIHN0cmVycm9yKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGVycm5vLCBzdHJlcnJvciA9IGUuYXJncworICAgICAgICByZXR1cm4gIkZhaWxlZCB0byBjcmVhdGUgJXMgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHJ1biBsb25nIG5hbWUgc2FuaXR5IGNoZWNrOiAlcy5cbiIgJSAocGF0aG5hbWUsIHN0cmVycm9yKQorICAgIHJldHVybiAiIgorCitkZWYgY2hlY2tfcGF0aF9sZW5ndGgoZmlsZXBhdGgsIHBhdGhuYW1lLCBsaW1pdCk6CisgICAgaWYgbGVuKGZpbGVwYXRoKSA+IGxpbWl0OgorICAgICAgICByZXR1cm4gIlRoZSBsZW5ndGggb2YgJXMgaXMgbG9uZ2VyIHRoYW4gNDEwLCB0aGlzIHdvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgZXJyb3JzLCBwbGVhc2UgdXNlIGEgc2hvcnRlciBwYXRoLlxuIiAlIHBhdGhuYW1lCisgICAgcmV0dXJuICIiCisKK2RlZiBnZXRfZmlsZXN5c3RlbV9pZChwYXRoKToKKyAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgic3RhdCAtZiAtYyAnJXMnICVzIiAlICgiJXQiLCBwYXRoKSkKKyAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIGVsc2U6CisgICAgICAgIGJiLndhcm4oIkNhbid0IGdldCB0aGUgZmlsZXN5c3RlbSBpZCBvZjogJXMiICUgcGF0aCkKKyAgICAgICAgcmV0dXJuIE5vbmUKKworIyBDaGVjayB0aGF0IHRoZSBwYXRoIGlzbid0IGxvY2F0ZWQgb24gbmZzLgorZGVmIGNoZWNrX25vdF9uZnMocGF0aCwgbmFtZSk6CisgICAgIyBUaGUgbmZzJyBmaWxlc3lzdGVtIGlkIGlzIDY5NjkKKyAgICBpZiBnZXRfZmlsZXN5c3RlbV9pZChwYXRoKSA9PSAiNjk2OSI6CisgICAgICAgIHJldHVybiAiVGhlICVzOiAlcyBjYW4ndCBiZSBsb2NhdGVkIG9uIG5mcy5cbiIgJSAobmFtZSwgcGF0aCkKKyAgICByZXR1cm4gIiIKKworIyBDaGVjayB0aGF0IHBhdGggaXNuJ3QgYSBicm9rZW4gc3ltbGluaworZGVmIGNoZWNrX3N5bWxpbmsobG5rLCBkYXRhKToKKyAgICBpZiBvcy5wYXRoLmlzbGluayhsbmspIGFuZCBub3Qgb3MucGF0aC5leGlzdHMobG5rKToKKyAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCIlcyBpcyBhIGJyb2tlbiBzeW1saW5rLiIgJSBsbmssIGRhdGEpCisKK2RlZiBjaGVja19jb25uZWN0aXZpdHkoZCk6CisgICAgIyBVUkkncyB0byBjaGVjayBjYW4gYmUgc2V0IGluIHRoZSBDT05ORUNUSVZJVFlfQ0hFQ0tfVVJJUyB2YXJpYWJsZQorICAgICMgdXNpbmcgdGhlIHNhbWUgc3ludGF4IGFzIGZvciBTUkNfVVJJLiBJZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldAorICAgICMgdGhlIGNoZWNrIGlzIHNraXBwZWQKKyAgICB0ZXN0X3VyaXMgPSAoZC5nZXRWYXIoJ0NPTk5FQ1RJVklUWV9DSEVDS19VUklTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICByZXR2YWwgPSAiIgorCisgICAgIyBPbmx5IGNoZWNrIGNvbm5lY3Rpdml0eSBpZiBuZXR3b3JrIGVuYWJsZWQgYW5kIHRoZQorICAgICMgQ09OTkVDVElWSVRZX0NIRUNLX1VSSVMgYXJlIHNldAorICAgIG5ldHdvcmtfZW5hYmxlZCA9IG5vdCBkLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpCisgICAgY2hlY2tfZW5hYmxlZCA9IGxlbih0ZXN0X3VyaXMpCisgICAgIyBUYWtlIGEgY29weSBvZiB0aGUgZGF0YSBzdG9yZSBhbmQgdW5zZXQgTUlSUk9SUyBhbmQgUFJFTUlSUk9SUworICAgIGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBkYXRhLmRlbFZhcignUFJFTUlSUk9SUycpCisgICAgZGF0YS5kZWxWYXIoJ01JUlJPUlMnKQorICAgIGlmIGNoZWNrX2VuYWJsZWQgYW5kIG5ldHdvcmtfZW5hYmxlZDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaCh0ZXN0X3VyaXMsIGRhdGEpCisgICAgICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICAjIEFsbG93IHRoZSBtZXNzYWdlIHRvIGJlIGNvbmZpZ3VyZWQgc28gdGhhdCB1c2VycyBjYW4gYmUKKyAgICAgICAgICAgICMgcG9pbnRlZCB0byBhIHN1cHBvcnQgbWVjaGFuaXNtLgorICAgICAgICAgICAgbXNnID0gZGF0YS5nZXRWYXIoJ0NPTk5FQ1RJVklUWV9DSEVDS19NU0cnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgaWYgbGVuKG1zZykgPT0gMDoKKyAgICAgICAgICAgICAgICBtc2cgPSAiJXMuIFBsZWFzZSBlbnN1cmUgeW91ciBuZXR3b3JrIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LlxuIiAlIGVycgorICAgICAgICAgICAgcmV0dmFsID0gbXNnCisKKyAgICByZXR1cm4gcmV0dmFsCisKK2RlZiBjaGVja19zdXBwb3J0ZWRfZGlzdHJvKHNhbml0eV9kYXRhKToKKyAgICBmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKKworICAgIHRlc3RlZF9kaXN0cm9zID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdTQU5JVFlfVEVTVEVEX0RJU1RST1MnLCBUcnVlKQorICAgIGlmIG5vdCB0ZXN0ZWRfZGlzdHJvczoKKyAgICAgICAgcmV0dXJuCisKKyAgICB0cnk6CisgICAgICAgIGRpc3RybyA9IG9lLmxzYi5kaXN0cm9faWRlbnRpZmllcigpCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgZGlzdHJvID0gTm9uZQorCisgICAgaWYgbm90IGRpc3RybzoKKyAgICAgICAgYmIud2FybignSG9zdCBkaXN0cmlidXRpb24gY291bGQgbm90IGJlIGRldGVybWluZWQ7IHlvdSBtYXkgcG9zc2libHkgZXhwZXJpZW5jZSB1bmV4cGVjdGVkIGZhaWx1cmVzLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgYSB0ZXN0ZWQgZGlzdHJpYnV0aW9uLicpCisKKyAgICBmb3Igc3VwcG9ydGVkIGluIFt4LnN0cmlwKCkgZm9yIHggaW4gdGVzdGVkX2Rpc3Ryb3Muc3BsaXQoJ1xcbicpXToKKyAgICAgICAgaWYgZm5tYXRjaChkaXN0cm8sIHN1cHBvcnRlZCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgIGJiLndhcm4oJ0hvc3QgZGlzdHJpYnV0aW9uICIlcyIgaGFzIG5vdCBiZWVuIHZhbGlkYXRlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgYnVpbGQgc3lzdGVtOyB5b3UgbWF5IHBvc3NpYmx5IGV4cGVyaWVuY2UgdW5leHBlY3RlZCBmYWlsdXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgdXNlIGEgdGVzdGVkIGRpc3RyaWJ1dGlvbi4nICUgZGlzdHJvKQorCisjIENoZWNrcyB3ZSBzaG91bGQgb25seSBtYWtlIGlmIE1BQ0hJTkUgaXMgc2V0IGNvcnJlY3RseQorZGVmIGNoZWNrX3Nhbml0eV92YWxpZG1hY2hpbmUoc2FuaXR5X2RhdGEpOgorICAgIG1lc3NhZ2VzID0gIiIKKworICAgICMgQ2hlY2sgVFVORV9BUkNIIGlzIHNldAorICAgIGlmIHNhbml0eV9kYXRhLmdldFZhcignVFVORV9BUkNIJywgVHJ1ZSkgPT0gJ0lOVkFMSUQnOgorICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzICsgJ1RVTkVfQVJDSCBpcyB1bnNldC4gUGxlYXNlIGVuc3VyZSB5b3VyIE1BQ0hJTkUgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBhIHZhbGlkIHR1bmUgY29uZmlndXJhdGlvbiBmaWxlIHdoaWNoIHdpbGwgc2V0IHRoaXMgY29ycmVjdGx5LlxuJworCisgICAgIyBDaGVjayBUQVJHRVRfT1MgaXMgc2V0CisgICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSA9PSAnSU5WQUxJRCc6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAnUGxlYXNlIHNldCBUQVJHRVRfT1MgZGlyZWN0bHksIG9yIGNob29zZSBhIE1BQ0hJTkUgb3IgRElTVFJPIHRoYXQgZG9lcyBzby5cbicKKworICAgICMgQ2hlY2sgdGhhdCB3ZSBkb24ndCBoYXZlIGR1cGxpY2F0ZSBlbnRyaWVzIGluIFBBQ0tBR0VfQVJDSFMgJiB0aGF0IFRVTkVfUEtHQVJDSCBpcyBpbiBQQUNLQUdFX0FSQ0hTCisgICAgcGtnYXJjaHMgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfQVJDSFMnLCBUcnVlKQorICAgIHR1bmVwa2cgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1RVTkVfUEtHQVJDSCcsIFRydWUpCisgICAgdHVuZWZvdW5kID0gRmFsc2UKKyAgICBzZWVuID0ge30KKyAgICBkdXBzID0gW10KKworICAgIGZvciBwYSBpbiBwa2dhcmNocy5zcGxpdCgpOgorICAgICAgICBpZiBzZWVuLmdldChwYSwgMCkgPT0gMToKKyAgICAgICAgICAgIGR1cHMuYXBwZW5kKHBhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VlbltwYV0gPSAxCisgICAgICAgIGlmIHBhID09IHR1bmVwa2c6CisgICAgICAgICAgICB0dW5lZm91bmQgPSBUcnVlCisKKyAgICBpZiBsZW4oZHVwcyk6CisgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMgKyAiRXJyb3IsIHRoZSBQQUNLQUdFX0FSQ0hTIHZhcmlhYmxlIGNvbnRhaW5zIGR1cGxpY2F0ZXMuIFRoZSBmb2xsb3dpbmcgYXJjaHMgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZTogJXMiICUgIiAiLmpvaW4oZHVwcykKKworICAgIGlmIHR1bmVmb3VuZCA9PSBGYWxzZToKKyAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlcyArICJFcnJvciwgdGhlIFBBQ0tBR0VfQVJDSFMgdmFyaWFibGUgZG9lcyBub3QgY29udGFpbiBUVU5FX1BLR0FSQ0ggKCVzKS4iICUgdHVuZXBrZworCisgICAgcmV0dXJuIG1lc3NhZ2VzCisKKyMgQ2hlY2tzIGlmIG5lY2Vzc2FyeSB0byBhZGQgb3B0aW9uIG1hcmNoIHRvIGhvc3QgZ2NjCitkZWYgY2hlY2tfZ2NjX21hcmNoKHNhbml0eV9kYXRhKToKKyAgICByZXN1bHQgPSBUcnVlCisgICAgbWVzc2FnZSA9ICIiCisKKyAgICAjIENoZWNrIGlmIC1tYXJjaCBub3QgaW4gQlVJTERfQ0ZMQUdTCisgICAgaWYgc2FuaXR5X2RhdGEuZ2V0VmFyKCJCVUlMRF9DRkxBR1MiLFRydWUpLmZpbmQoIi1tYXJjaCIpIDwgMDoKKyAgICAgICAgcmVzdWx0ID0gRmFsc2UKKworICAgICAgICAjIENvbnN0cnVjdCBhIHRlc3QgZmlsZQorICAgICAgICBmID0gb3BlbigiZ2NjX3Rlc3QuYyIsICJ3IikKKyAgICAgICAgZi53cml0ZSgiaW50IG1haW4gKCl7IHZvbGF0aWxlIGludCBhdG9taWMgPSAyOyBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwICgmYXRvbWljLCAyLCAzKTsgcmV0dXJuIDA7IH1cbiIpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgICMgQ2hlY2sgaWYgR0NDIGNvdWxkIHdvcmsgd2l0aG91dCBtYXJjaAorICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiKQorICAgICAgICAgICAgaWYgc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgc3RhdHVzLHJlcyA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgiJHtCVUlMRF9QUkVGSVh9Z2NjIC1tYXJjaD1uYXRpdmUgZ2NjX3Rlc3QuYyAtbyBnY2NfdGVzdCIpCisgICAgICAgICAgICBpZiBzdGF0dXMgPT0gMDoKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gIkJVSUxEX0NGTEFHU19hcHBlbmQgPSBcIiAtbWFyY2g9bmF0aXZlXCIiCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVHJ1ZTsKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgYnVpbGRfYXJjaCA9IHNhbml0eV9kYXRhLmdldFZhcignQlVJTERfQVJDSCcsIFRydWUpCisgICAgICAgICAgICBzdGF0dXMscmVzID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCIke0JVSUxEX1BSRUZJWH1nY2MgLW1hcmNoPSVzIGdjY190ZXN0LmMgLW8gZ2NjX3Rlc3QiICUgYnVpbGRfYXJjaCkKKyAgICAgICAgICAgIGlmIHN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiQlVJTERfQ0ZMQUdTX2FwcGVuZCA9IFwiIC1tYXJjaD0lc1wiIiAlIGJ1aWxkX2FyY2gKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBUcnVlOworCisgICAgICAgIG9zLnJlbW92ZSgiZ2NjX3Rlc3QuYyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJnY2NfdGVzdCIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJnY2NfdGVzdCIpCisKKyAgICByZXR1cm4gKHJlc3VsdCwgbWVzc2FnZSkKKworIyBVbnBhdGNoZWQgdmVyc2lvbnMgb2YgbWFrZSAzLjgyIGFyZSBrbm93biB0byBiZSBicm9rZW4uICBTZWUgR05VIFNhdmFubmFoIEJ1ZyAzMDYxMi4KKyMgVXNlIGEgbW9kaWZpZWQgcmVwcm9kdWNlciBmcm9tIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzMwNjEyIHRvIHZhbGlkYXRlLgorZGVmIGNoZWNrX21ha2VfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoIm1ha2UgLS12ZXJzaW9uIikKKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gZXhlY3V0ZSBtYWtlIC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzJdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pID09IExvb3NlVmVyc2lvbigiMy44MiIpOgorICAgICAgICAjIENvbnN0cnVjdCBhIHRlc3QgZmlsZQorICAgICAgICBmID0gb3BlbigibWFrZWZpbGVfdGVzdCIsICJ3IikKKyAgICAgICAgZi53cml0ZSgibWFrZWZpbGVfdGVzdC5hOiBtYWtlZmlsZV90ZXN0X2EuYyBtYWtlZmlsZV90ZXN0X2IuYyBtYWtlZmlsZV90ZXN0LmEoIG1ha2VmaWxlX3Rlc3RfYS5jIG1ha2VmaWxlX3Rlc3RfYi5jKVxuIikKKyAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICBmLndyaXRlKCJtYWtlZmlsZV90ZXN0X2EuYzpcbiIpCisgICAgICAgIGYud3JpdGUoIgl0b3VjaCAkQFxuIikKKyAgICAgICAgZi53cml0ZSgiXG4iKQorICAgICAgICBmLndyaXRlKCJtYWtlZmlsZV90ZXN0X2IuYzpcbiIpCisgICAgICAgIGYud3JpdGUoIgl0b3VjaCAkQFxuIikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgIyBDaGVjayBpZiBtYWtlIDMuODIgaGFzIGJlZW4gcGF0Y2hlZAorICAgICAgICBzdGF0dXMscmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJtYWtlIC1mIG1ha2VmaWxlX3Rlc3QiKQorCisgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdCIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJtYWtlZmlsZV90ZXN0X2EuYyIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJtYWtlZmlsZV90ZXN0X2EuYyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJtYWtlZmlsZV90ZXN0X2IuYyIpOgorICAgICAgICAgICAgb3MucmVtb3ZlKCJtYWtlZmlsZV90ZXN0X2IuYyIpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCJtYWtlZmlsZV90ZXN0LmEiKToKKyAgICAgICAgICAgIG9zLnJlbW92ZSgibWFrZWZpbGVfdGVzdC5hIikKKworICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJldHVybiAiWW91ciB2ZXJzaW9uIG9mIG1ha2UgMy44MiBpcyBicm9rZW4uIFBsZWFzZSByZXZlcnQgdG8gMy44MSBvciBpbnN0YWxsIGEgcGF0Y2hlZCB2ZXJzaW9uLlxuIgorICAgIHJldHVybiBOb25lCisKKworIyBUYXIgdmVyc2lvbiAxLjI0IGFuZCBvbndhcmRzIGhhbmRsZSBvdmVyd3JpdGluZyBzeW1saW5rcyBjb3JyZWN0bHkKKyMgYnV0IGVhcmxpZXIgdmVyc2lvbnMgZG8gbm90OyB0aGlzIG5lZWRzIHRvIHdvcmsgcHJvcGVybHkgZm9yIHNzdGF0ZQorZGVmIGNoZWNrX3Rhcl92ZXJzaW9uKHNhbml0eV9kYXRhKToKKyAgICBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KKyAgICBzdGF0dXMsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgidGFyIC0tdmVyc2lvbiIpCisgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGV4ZWN1dGUgdGFyIC0tdmVyc2lvbiwgZXhpdCBjb2RlICVzXG4iICUgc3RhdHVzCisgICAgdmVyc2lvbiA9IHJlc3VsdC5zcGxpdCgpWzNdCisgICAgaWYgTG9vc2VWZXJzaW9uKHZlcnNpb24pIDwgTG9vc2VWZXJzaW9uKCIxLjI0Iik6CisgICAgICAgIHJldHVybiAiWW91ciB2ZXJzaW9uIG9mIHRhciBpcyBvbGRlciB0aGFuIDEuMjQgYW5kIGhhcyBidWdzIHdoaWNoIHdpbGwgYnJlYWsgYnVpbGRzLiBQbGVhc2UgaW5zdGFsbCBhIG5ld2VyIHZlcnNpb24gb2YgdGFyLlxuIgorICAgIHJldHVybiBOb25lCisKKyMgV2UgdXNlIGdpdCBwYXJhbWV0ZXJzIGFuZCBmdW5jdGlvbmFsaXR5IG9ubHkgZm91bmQgaW4gMS43Ljggb3IgbGF0ZXIKK2RlZiBjaGVja19naXRfdmVyc2lvbihzYW5pdHlfZGF0YSk6CisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgc3RhdHVzLCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoImdpdCAtLXZlcnNpb24gMj4gL2Rldi9udWxsIikKKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgcmV0dXJuICJVbmFibGUgdG8gZXhlY3V0ZSBnaXQgLS12ZXJzaW9uLCBleGl0IGNvZGUgJXNcbiIgJSBzdGF0dXMKKyAgICB2ZXJzaW9uID0gcmVzdWx0LnNwbGl0KClbMl0KKyAgICBpZiBMb29zZVZlcnNpb24odmVyc2lvbikgPCBMb29zZVZlcnNpb24oIjEuNy44Iik6CisgICAgICAgIHJldHVybiAiWW91ciB2ZXJzaW9uIG9mIGdpdCBpcyBvbGRlciB0aGFuIDEuNy44IGFuZCBoYXMgYnVncyB3aGljaCB3aWxsIGJyZWFrIGJ1aWxkcy4gUGxlYXNlIGluc3RhbGwgYSBuZXdlciB2ZXJzaW9uIG9mIGdpdC5cbiIKKyAgICByZXR1cm4gTm9uZQorCisjIENoZWNrIHRoZSByZXF1aXJlZCBwZXJsIG1vZHVsZXMgd2hpY2ggbWF5IG5vdCBiZSBpbnN0YWxsZWQgYnkgZGVmYXVsdAorZGVmIGNoZWNrX3BlcmxfbW9kdWxlcyhzYW5pdHlfZGF0YSk6CisgICAgcmV0ID0gIiIKKyAgICBtb2R1bGVzID0gKCAiVGV4dDo6UGFyc2VXb3JkcyIsICJUaHJlYWQ6OlF1ZXVlIiwgIkRhdGE6OkR1bXBlciIgKQorICAgIGZvciBtIGluIG1vZHVsZXM6CisgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gb2UudXRpbHMuZ2V0c3RhdHVzb3V0cHV0KCJwZXJsIC1lICd1c2UgJXMnIDI+IC9kZXYvbnVsbCIgJSBtKQorICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJldCArPSAiJXMgIiAlIG0KKyAgICBpZiByZXQ6CisgICAgICAgIHJldHVybiAiUmVxdWlyZWQgcGVybCBtb2R1bGUocykgbm90IGZvdW5kOiAlc1xuIiAlIHJldAorICAgIHJldHVybiBOb25lCisKK2RlZiBzYW5pdHlfY2hlY2tfY29uZmZpbGVzKHN0YXR1cywgZCk6CisgICAgIyBDaGVjayB3ZSBhcmUgdXNpbmcgYSB2YWxpZCBsb2NhbC5jb25mCisgICAgY3VycmVudF9jb25mICA9IGQuZ2V0VmFyKCdDT05GX1ZFUlNJT04nLCBUcnVlKQorICAgIGNvbmZfdmVyc2lvbiA9ICBkLmdldFZhcignTE9DQUxDT05GX1ZFUlNJT04nLCBUcnVlKQorCisgICAgaWYgY3VycmVudF9jb25mICE9IGNvbmZfdmVyc2lvbjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciB2ZXJzaW9uIG9mIGxvY2FsLmNvbmYgd2FzIGdlbmVyYXRlZCBmcm9tIGFuIG9sZGVyL25ld2VyIHZlcnNpb24gb2YgbG9jYWwuY29uZi5zYW1wbGUgYW5kIHRoZXJlIGhhdmUgYmVlbiB1cGRhdGVzIG1hZGUgdG8gdGhpcyBmaWxlLiBQbGVhc2UgY29tcGFyZSB0aGUgdHdvIGZpbGVzIGFuZCBtZXJnZSBhbnkgY2hhbmdlcyBiZWZvcmUgY29udGludWluZy5cbk1hdGNoaW5nIHRoZSB2ZXJzaW9uIG51bWJlcnMgd2lsbCByZW1vdmUgdGhpcyBtZXNzYWdlLlxuXCJtZWxkIGNvbmYvbG9jYWwuY29uZiAke0NPUkVCQVNFfS9tZXRhKi9jb25mL2xvY2FsLmNvbmYuc2FtcGxlXCIgaXMgYSBnb29kIHdheSB0byB2aXN1YWxpc2UgdGhlIGNoYW5nZXMuXG4iKQorCisgICAgIyBDaGVjayBiYmxheWVycy5jb25mIGlzIHZhbGlkCisgICAgY3VycmVudF9sY29uZiA9IGQuZ2V0VmFyKCdMQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICBsY29uZl92ZXJzaW9uID0gZC5nZXRWYXIoJ0xBWUVSX0NPTkZfVkVSU0lPTicsIFRydWUpCisgICAgaWYgY3VycmVudF9sY29uZiAhPSBsY29uZl92ZXJzaW9uOgorICAgICAgICBmdW5jcyA9IGQuZ2V0VmFyKCdCQkxBWUVSU19DT05GX1VQREFURV9GVU5DUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgZm9yIGZ1bmMgaW4gZnVuY3M6CisgICAgICAgICAgICBzdWNjZXNzID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmdW5jLCBkKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgIGlmIHN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiWW91ciBjb25mL2JibGF5ZXJzLmNvbmYgaGFzIGJlZW4gYXV0b21hdGljYWxseSB1cGRhdGVkLiIpCisgICAgICAgICAgICAgICAgc3RhdHVzLnJlcGFyc2UgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzdGF0dXMucmVwYXJzZToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgdmVyc2lvbiBvZiBiYmxheWVycy5jb25mIGhhcyB0aGUgd3JvbmcgTENPTkZfVkVSU0lPTiAoaGFzICVzLCBleHBlY3RpbmcgJXMpLlxuUGxlYXNlIGNvbXBhcmUgdGhlIHlvdXIgZmlsZSBhZ2FpbnN0IGJibGF5ZXJzLmNvbmYuc2FtcGxlIGFuZCBtZXJnZSBhbnkgY2hhbmdlcyBiZWZvcmUgY29udGludWluZy5cblwibWVsZCBjb25mL2JibGF5ZXJzLmNvbmYgJHtDT1JFQkFTRX0vbWV0YSovY29uZi9iYmxheWVycy5jb25mLnNhbXBsZVwiIGlzIGEgZ29vZCB3YXkgdG8gdmlzdWFsaXNlIHRoZSBjaGFuZ2VzLlxuIiAlIChjdXJyZW50X2xjb25mLCBsY29uZl92ZXJzaW9uKSkKKworICAgICMgSWYgd2UgaGF2ZSBhIHNpdGUuY29uZiwgY2hlY2sgaXQncyB2YWxpZAorICAgIGlmIGNoZWNrX2NvbmZfZXhpc3RzKCJjb25mL3NpdGUuY29uZiIsIGQpOgorICAgICAgICBjdXJyZW50X3Njb25mID0gZC5nZXRWYXIoJ1NDT05GX1ZFUlNJT04nLCBUcnVlKQorICAgICAgICBzY29uZl92ZXJzaW9uID0gZC5nZXRWYXIoJ1NJVEVfQ09ORl9WRVJTSU9OJywgVHJ1ZSkKKyAgICAgICAgaWYgY3VycmVudF9zY29uZiAhPSBzY29uZl92ZXJzaW9uOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciB2ZXJzaW9uIG9mIHNpdGUuY29uZiB3YXMgZ2VuZXJhdGVkIGZyb20gYW4gb2xkZXIgdmVyc2lvbiBvZiBzaXRlLmNvbmYuc2FtcGxlIGFuZCB0aGVyZSBoYXZlIGJlZW4gdXBkYXRlcyBtYWRlIHRvIHRoaXMgZmlsZS4gUGxlYXNlIGNvbXBhcmUgdGhlIHR3byBmaWxlcyBhbmQgbWVyZ2UgYW55IGNoYW5nZXMgYmVmb3JlIGNvbnRpbnVpbmcuXG5NYXRjaGluZyB0aGUgdmVyc2lvbiBudW1iZXJzIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS5cblwibWVsZCBjb25mL3NpdGUuY29uZiAke0NPUkVCQVNFfS9tZXRhKi9jb25mL3NpdGUuY29uZi5zYW1wbGVcIiBpcyBhIGdvb2Qgd2F5IHRvIHZpc3VhbGlzZSB0aGUgY2hhbmdlcy5cbiIpCisKKworZGVmIHNhbml0eV9oYW5kbGVfYWJpY2hhbmdlcyhzdGF0dXMsIGQpOgorICAgICMKKyAgICAjIENoZWNrIHRoZSAnQUJJJyBvZiBUTVBESVIKKyAgICAjCisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKworICAgIGN1cnJlbnRfYWJpID0gZC5nZXRWYXIoJ09FTEFZT1VUX0FCSScsIFRydWUpCisgICAgYWJpZmlsZSA9IGQuZ2V0VmFyKCdTQU5JVFlfQUJJRklMRScsIFRydWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoYWJpZmlsZSk6CisgICAgICAgIHdpdGggb3BlbihhYmlmaWxlLCAiciIpIGFzIGY6CisgICAgICAgICAgICBhYmkgPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCBhYmkuaXNkaWdpdCgpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiMiIgYW5kIGN1cnJlbnRfYWJpID09ICIzIjoKKyAgICAgICAgICAgIGJiLm5vdGUoIkNvbnZlcnRpbmcgc3RhZ2luZyBmcm9tIGxheW91dCB2ZXJzaW9uIDIgdG8gbGF5b3V0IHZlcnNpb24gMyIpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoIm12ICR7VE1QRElSfS9zdGFnaW5nICR7VE1QRElSfS9zeXNyb290cyIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJsbiAtcyBzeXNyb290cyAke1RNUERJUn0vc3RhZ2luZyIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJjZCAke1RNUERJUn0vc3RhbXBzOyBmb3IgaSBpbiAqLypkb19wb3B1bGF0ZV9zdGFnaW5nOyBkbyBuZXc9YGVjaG8gJGkgfCBzZWQgLWUgJ3MvZG9fcG9wdWxhdGVfc3RhZ2luZy9kb19wb3B1bGF0ZV9zeXNyb290LydgOyBtdiAkaSAkbmV3OyBkb25lIiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICIzIiBhbmQgY3VycmVudF9hYmkgPT0gIjQiOgorICAgICAgICAgICAgYmIubm90ZSgiQ29udmVydGluZyBzdGFnaW5nIGxheW91dCBmcm9tIHZlcnNpb24gMyB0byBsYXlvdXQgdmVyc2lvbiA0IikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGQuZXhwYW5kKCIke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIpKToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoZC5leHBhbmQoIm12ICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0vJHtNVUxUSU1BQ0hfSE9TVF9TWVN9ICR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJsbiAtcyAke1NUQUdJTkdfQklORElSX0NST1NTfSAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcl9uYXRpdmV9LyR7TVVMVElNQUNIX0hPU1RfU1lTfSIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIGFiaSA9PSAiNCI6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJTdGFnaW5nIGxheW91dCBoYXMgY2hhbmdlZC4gVGhlIGNyb3NzIGRpcmVjdG9yeSBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCBjcm9zcyBwYWNrYWdlcyBhcmUgbm93IGJ1aWx0IHVuZGVyIHRoZSBuYXRpdmUgc3lzcm9vdC5cblRoaXMgcmVxdWlyZXMgYSByZWJ1aWxkLlxuIikKKyAgICAgICAgZWxpZiBhYmkgPT0gIjUiIGFuZCBjdXJyZW50X2FiaSA9PSAiNiI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiA1IHRvIGxheW91dCB2ZXJzaW9uIDYiKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKGQuZXhwYW5kKCJtdiAke1RNUERJUn0vcHN0YWdlbG9ncyAke1NTVEFURV9NQU5JRkVTVFN9IiksIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICI3IiBhbmQgY3VycmVudF9hYmkgPT0gIjgiOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiWW91ciBjb25maWd1cmF0aW9uIGlzIHVzaW5nIHN0YW1wIGZpbGVzIGluY2x1ZGluZyB0aGUgc3N0YXRlIGhhc2ggYnV0IHlvdXIgYnVpbGQgZGlyZWN0b3J5IHdhcyBidWlsdCB3aXRoIHN0YW1wIGZpbGVzIHRoYXQgZG8gbm90IGluY2x1ZGUgdGhpcy5cblRvIGNvbnRpbnVlLCBlaXRoZXIgcmVidWlsZCBvciBzd2l0Y2ggYmFjayB0byB0aGUgT0VCYXNpYyBzaWduYXR1cmUgaGFuZGxlciB3aXRoIEJCX1NJR05BVFVSRV9IQU5ETEVSID0gJ09FQmFzaWMnLlxuIikKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpIGFuZCBjdXJyZW50X2FiaSA9PSAiOSIpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVGhlIGxheW91dCBvZiB0aGUgVE1QRElSIFNUQU1QUyBkaXJlY3RvcnkgaGFzIGNoYW5nZWQuIFBsZWFzZSBjbGVhbiBvdXQgVE1QRElSIGFuZCByZWJ1aWxkIChzc3RhdGUgd2lsbCBiZSBzdGlsbCBiZSB2YWxpZCBhbmQgcmV1c2VkKVxuIikKKyAgICAgICAgZWxpZiAoYWJpICE9IGN1cnJlbnRfYWJpIGFuZCBjdXJyZW50X2FiaSA9PSAiMTAiIGFuZCAoYWJpID09ICI4IiBvciBhYmkgPT0gIjkiKSk6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiA4LzkgdG8gbGF5b3V0IHZlcnNpb24gMTAiKQorICAgICAgICAgICAgY21kID0gZC5leHBhbmQoImdyZXAgLXIgLWwgc3lzcm9vdC1wcm92aWRlcnMvdmlydHVhbF9rZXJuZWwgJHtTU1RBVEVfTUFOSUZFU1RTfSIpCisgICAgICAgICAgICByZXQsIHJlc3VsdCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dChjbWQpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3BsaXQoKQorICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoIlVuaW5zdGFsbGluZyBtYW5pZmVzdCBmaWxlICVzIiAlIGYpCisgICAgICAgICAgICAgICAgc3N0YXRlX2NsZWFuX21hbmlmZXN0KGYsIGQpCisgICAgICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoY3VycmVudF9hYmkpCisgICAgICAgIGVsaWYgYWJpID09ICIxMCIgYW5kIGN1cnJlbnRfYWJpID09ICIxMSI6CisgICAgICAgICAgICBiYi5ub3RlKCJDb252ZXJ0aW5nIHN0YWdpbmcgbGF5b3V0IGZyb20gdmVyc2lvbiAxMCB0byBsYXlvdXQgdmVyc2lvbiAxMSIpCisgICAgICAgICAgICAjIEZpbGVzIGluIHhmODYtdmlkZW8tbW9kZXNldHRpbmcgbW92ZWQgdG8geHNlcnZlci14b3JnIGFuZCBiaXRiYWtlIGNhbid0IGN1cnJlbnRseSBoYW5kbGUgdGhhdDoKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChkLmV4cGFuZCgicm0gJHtUTVBESVJ9L3N5c3Jvb3RzLyovdXNyL2xpYi94b3JnL21vZHVsZXMvZHJpdmVycy9tb2Rlc2V0dGluZ19kcnYuc28gJHtUTVBESVJ9L3N5c3Jvb3RzLyovcGtnZGF0YS9ydW50aW1lL3hmODYtdmlkZW8tbW9kZXNldHRpbmcqICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvcnVudGltZS1yZXZlcnNlL3hmODYtdmlkZW8tbW9kZXNldHRpbmcqICR7VE1QRElSfS9zeXNyb290cy8qL3BrZ2RhdGEvc2hsaWJzMi94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nKiIpLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgd2l0aCBvcGVuKGFiaWZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGN1cnJlbnRfYWJpKQorICAgICAgICBlbGlmIChhYmkgIT0gY3VycmVudF9hYmkpOgorICAgICAgICAgICAgIyBDb2RlIHRvIGNvbnZlcnQgZnJvbSBvbmUgQUJJIHRvIGFub3RoZXIgY291bGQgZ28gaGVyZSBpZiBwb3NzaWJsZS4KKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBUTVBESVIgaGFzIGNoYW5nZWQgaXRzIGxheW91dCB2ZXJzaW9uIG51bWJlciAoJXMgdG8gJXMpIGFuZCB5b3UgbmVlZCB0byBlaXRoZXIgcmVidWlsZCwgcmV2ZXJ0IG9yIGFkanVzdCBpdCBhdCB5b3VyIG93biByaXNrLlxuIiAlIChhYmksIGN1cnJlbnRfYWJpKSkKKyAgICBlbHNlOgorICAgICAgICB3aXRoIG9wZW4oYWJpZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjdXJyZW50X2FiaSkKKworZGVmIGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBkYXRhKToKKyAgICAjIFNhbml0eSBjaGVja3MgdG8gYmUgZG9uZSB3aGVuIHRoZSB2YWx1ZSBvZiBTU1RBVEVfRElSIGNoYW5nZXMKKworICAgICMgQ2hlY2sgdGhhdCBTU1RBVEVfRElSIGlzbid0IG9uIGEgZmlsZXN5c3RlbSB3aXRoIGxpbWl0ZWQgZmlsZW5hbWUgbGVuZ3RoIChlZy4gZUNyeXB0RlMpCisgICAgdGVzdG1zZyA9ICIiCisgICAgaWYgc3N0YXRlX2RpciAhPSAiIjoKKyAgICAgICAgdGVzdG1zZyA9IGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKHNzdGF0ZV9kaXIsICJTU1RBVEVfRElSIikKKyAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIHBlcm1pc3Npb25zIHRvIFNTVEFURV9ESVIsIHN1Z2dlc3QgdGhlIHVzZXIgc2V0IGl0IGFzIGFuIFNTVEFURV9NSVJST1JTCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVyciA9IHRlc3Rtc2cuc3BsaXQoJzogJylbMV0uc3RyaXAoKQorICAgICAgICAgICAgaWYgZXJyID09ICJQZXJtaXNzaW9uIGRlbmllZC4iOgorICAgICAgICAgICAgICAgIHRlc3Rtc2cgPSB0ZXN0bXNnICsgIllvdSBjb3VsZCB0cnkgdXNpbmcgJXMgaW4gU1NUQVRFX01JUlJPUlMgcmF0aGVyIHRoYW4gYXMgYW4gU1NUQVRFX0NBQ0hFLlxuIiAlIChzc3RhdGVfZGlyKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gdGVzdG1zZworICAgICAgIAorZGVmIGNoZWNrX3Nhbml0eV92ZXJzaW9uX2NoYW5nZShzdGF0dXMsIGQpOgorICAgICMgU2FuaXR5IGNoZWNrcyB0byBiZSBkb25lIHdoZW4gU0FOSVRZX1ZFUlNJT04gY2hhbmdlcworICAgICMgSW4gb3RoZXIgd29yZHMsIHRoZXNlIHRlc3RzIHJ1biBvbmNlIGluIGEgZ2l2ZW4gYnVpbGQgZGlyZWN0b3J5IGFuZCB0aGVuIAorICAgICMgbmV2ZXIgYWdhaW4gdW50aWwgdGhlIHNhbml0eSB2ZXJzaW9uIGNoYW5nZXMuCisKKyAgICAjIENoZWNrIHRoZSBweXRob24gaW5zdGFsbCBpcyBjb21wbGV0ZS4gZ2xpYi0yLjAtbmF0aXZlcyByZXF1cmllcworICAgICMgeG1sLnBhcnNlcnMuZXhwYXQKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB4bWwucGFyc2Vycy5leHBhdAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnWW91ciBweXRob24gaXMgbm90IGEgZnVsbCBpbnN0YWxsLiBQbGVhc2UgaW5zdGFsbCB0aGUgbW9kdWxlIHhtbC5wYXJzZXJzLmV4cGF0IChweXRob24teG1sIG9uIG9wZW5TVVNFIGFuZCBTVVNFIExpbnV4KS5cbicpCisgICAgaW1wb3J0IHN0YXQKKworICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfbWFrZV92ZXJzaW9uKGQpKQorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfdGFyX3ZlcnNpb24oZCkpCisgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja19naXRfdmVyc2lvbihkKSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3BlcmxfbW9kdWxlcyhkKSkKKworICAgIG1pc3NpbmcgPSAiIgorCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoIiR7TUFLRX0iLCBkKToKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcgKyAiR05VIG1ha2UsIgorCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoJyR7QlVJTERfUFJFRklYfWdjYycsIGQpOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJDIENvbXBpbGVyICglc2djYyksIiAlIGQuZ2V0VmFyKCJCVUlMRF9QUkVGSVgiLCBUcnVlKQorCisgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHMoJyR7QlVJTERfUFJFRklYfWcrKycsIGQpOgorICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICJDKysgQ29tcGlsZXIgKCVzZysrKSwiICUgZC5nZXRWYXIoIkJVSUxEX1BSRUZJWCIsIFRydWUpCisKKyAgICByZXF1aXJlZF91dGlsaXRpZXMgPSBkLmdldFZhcignU0FOSVRZX1JFUVVJUkVEX1VUSUxJVElFUycsIFRydWUpCisKKyAgICBmb3IgdXRpbCBpbiByZXF1aXJlZF91dGlsaXRpZXMuc3BsaXQoKToKKyAgICAgICAgaWYgbm90IGNoZWNrX2FwcF9leGlzdHModXRpbCwgZCk6CisgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyArICIlcywiICUgdXRpbAorCisgICAgaWYgbWlzc2luZzoKKyAgICAgICAgbWlzc2luZyA9IG1pc3NpbmcucnN0cmlwKCcsJykKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUGxlYXNlIGluc3RhbGwgdGhlIGZvbGxvd2luZyBtaXNzaW5nIHV0aWxpdGllczogJXNcbiIgJSBtaXNzaW5nKQorCisgICAgYXNzdW1lX3Byb3ZpZGVkID0gZC5nZXRWYXIoJ0FTU1VNRV9QUk9WSURFRCcsIFRydWUpLnNwbGl0KCkKKyAgICAjIENoZWNrIHVzZXIgZG9lc24ndCBoYXZlIEFTU1VNRV9QUk9WSURFRCA9IGluc3RlYWQgb2YgKz0gaW4gbG9jYWwuY29uZgorICAgIGlmICJkaWZmc3RhdC1uYXRpdmUiIG5vdCBpbiBhc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSB1c2UgQVNTVU1FX1BST1ZJREVEICs9LCBub3QgQVNTVU1FX1BST1ZJREVEID0gaW4geW91ciBsb2NhbC5jb25mXG4nKQorCisgICAgaWYgInFlbXUtbmF0aXZlIiBpbiBhc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCJxZW11LWFybSIsIGQpOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgicWVtdS1uYXRpdmUgd2FzIGluIEFTU1VNRV9QUk9WSURFRCBidXQgdGhlIFFFTVUgYmluYXJpZXMgKHFlbXUtYXJtKSBjYW4ndCBiZSBmb3VuZCBpbiBQQVRIIikKKworICAgIGlmICJsaWJzZGwtbmF0aXZlIiBpbiBhc3N1bWVfcHJvdmlkZWQ6CisgICAgICAgIGlmIG5vdCBjaGVja19hcHBfZXhpc3RzKCJzZGwtY29uZmlnIiwgZCk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJsaWJzZGwtbmF0aXZlIGlzIHNldCB0byBiZSBBU1NVTUVfUFJPVklERUQgYnV0IHNkbC1jb25maWcgY2FuJ3QgYmUgZm91bmQgaW4gUEFUSC4gUGxlYXNlIGVpdGhlciBpbnN0YWxsIGl0LCBvciBjb25maWd1cmUgcWVtdSBub3QgdG8gcmVxdWlyZSBzZGwuIikKKworICAgIChyZXN1bHQsIG1lc3NhZ2UpID0gY2hlY2tfZ2NjX21hcmNoKGQpCisgICAgaWYgcmVzdWx0IGFuZCBtZXNzYWdlOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJZb3VyIGdjYyB2ZXJzaW9uIGlzIG9sZGVyIHRoYW4gNC41LCBwbGVhc2UgYWRkIHRoZSBmb2xsb3dpbmcgcGFyYW0gdG8gbG9jYWwuY29uZlxuIFwKKyAgICAgICAgJXNcbiIgJSBtZXNzYWdlKQorICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdXIgZ2NjIHZlcnNpb24gaXMgb2xkZXIgdGhhbiA0LjUgb3IgaXMgbm90IHdvcmtpbmcgcHJvcGVybHkuICBQbGVhc2UgdmVyaWZ5IHlvdSBjYW4gYnVpbGQiKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCIgYW5kIGxpbmsgc29tZXRoaW5nIHRoYXQgdXNlcyBhdG9taWMgb3BlcmF0aW9ucywgc3VjaCBhczogXG4iKQorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCIgICAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpO1xuIikKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaXNuJ3Qgb24gYSBmaWxlc3lzdGVtIHdpdGggbGltaXRlZCBmaWxlbmFtZSBsZW5ndGggKGVnLiBlQ3J5cHRGUykKKyAgICB0bXBkaXIgPSBkLmdldFZhcignVE1QRElSJywgVHJ1ZSkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX2NyZWF0ZV9sb25nX2ZpbGVuYW1lKHRtcGRpciwgIlRNUERJUiIpKQorICAgIHRtcGRpcm1vZGUgPSBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZQorICAgIGlmICh0bXBkaXJtb2RlICYgc3RhdC5TX0lTR0lEKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiVE1QRElSIGlzIHNldGdpZCwgcGxlYXNlIGRvbid0IGJ1aWxkIGluIGEgc2V0Z2lkIGRpcmVjdG9yeSIpCisgICAgaWYgKHRtcGRpcm1vZGUgJiBzdGF0LlNfSVNVSUQpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJUTVBESVIgaXMgc2V0dWlkLCBwbGVhc2UgZG9uJ3QgYnVpbGQgaW4gYSBzZXR1aWQgZGlyZWN0b3J5IikKKworICAgICMgU29tZSB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBhcHBhcmVudGx5IHJlbGllcyBvbiBjaG1vZCBldGMuIGJlaW5nIHN1aWQgcm9vdCAoISEpCisgICAgaW1wb3J0IHN0YXQKKyAgICBzdWlkX2NoZWNrX2JpbnMgPSAiY2hvd24gY2htb2QgbWtub2QiLnNwbGl0KCkKKyAgICBmb3IgYmluX2NtZCBpbiBzdWlkX2NoZWNrX2JpbnM6CisgICAgICAgIGJpbl9wYXRoID0gYmIudXRpbHMud2hpY2gob3MuZW52aXJvblsiUEFUSCJdLCBiaW5fY21kKQorICAgICAgICBpZiBiaW5fcGF0aDoKKyAgICAgICAgICAgIGJpbl9zdGF0ID0gb3Muc3RhdChiaW5fcGF0aCkKKyAgICAgICAgICAgIGlmIGJpbl9zdGF0LnN0X3VpZCA9PSAwIGFuZCBiaW5fc3RhdC5zdF9tb2RlICYgc3RhdC5TX0lTVUlEOgorICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJyVzIGhhcyB0aGUgc2V0dWlkIGJpdCBzZXQuIFRoaXMgaW50ZXJmZXJlcyB3aXRoIHBzZXVkbyBhbmQgbWF5IGNhdXNlIG90aGVyIGlzc3VlcyB0aGF0IGJyZWFrIHRoZSBidWlsZCBwcm9jZXNzLlxuJyAlIGJpbl9wYXRoKQorCisgICAgIyBDaGVjayB0aGF0IHdlIGNhbiBmZXRjaCBmcm9tIHZhcmlvdXMgbmV0d29yayB0cmFuc3BvcnRzCisgICAgbmV0Y2hlY2sgPSBjaGVja19jb25uZWN0aXZpdHkoZCkKKyAgICBzdGF0dXMuYWRkcmVzdWx0KG5ldGNoZWNrKQorICAgIGlmIG5ldGNoZWNrOgorICAgICAgICBzdGF0dXMubmV0d29ya19lcnJvciA9IFRydWUKKworICAgIG5vbGlicyA9IGQuZ2V0VmFyKCdOTzMyTElCUycsIFRydWUpCisgICAgaWYgbm90IG5vbGliczoKKyAgICAgICAgbGliMzJwYXRoID0gJy9saWInCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCcvbGliNjQnKSBhbmQgKCBvcy5wYXRoLmlzbGluaygnL2xpYjY0Jykgb3Igb3MucGF0aC5pc2xpbmsoJy9saWInKSApOgorICAgICAgICAgICBsaWIzMnBhdGggPSAnL2xpYjMyJworCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCclcy9saWJjLnNvLjYnICUgbGliMzJwYXRoKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKCcvdXNyL2luY2x1ZGUvZ251L3N0dWJzLTMyLmgnKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIllvdSBoYXZlIGEgMzItYml0IGxpYmMsIGJ1dCBubyAzMi1iaXQgaGVhZGVycy4gIFlvdSBtdXN0IGluc3RhbGwgdGhlIDMyLWJpdCBsaWJjIGhlYWRlcnMuXG4iKQorCisgICAgYmJwYXRocyA9IGQuZ2V0VmFyKCdCQlBBVEgnLCBUcnVlKS5zcGxpdCgiOiIpCisgICAgaWYgKCIuIiBpbiBiYnBhdGhzIG9yICIuLyIgaW4gYmJwYXRocyBvciAiIiBpbiBiYnBhdGhzKSBhbmQgbm90IHN0YXR1cy5yZXBhcnNlOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJCQlBBVEggcmVmZXJlbmNlcyB0aGUgY3VycmVudCBkaXJlY3RvcnksIGVpdGhlciB0aHJvdWdoICIgICAgXAorICAgICAgICAgICAgICAgICJhbiBlbXB0eSBlbnRyeSwgYSAnLi8nIG9yIGEgJy4nLlxuXHQgVGhpcyBpcyB1bnNhZmUgYW5kIG1lYW5zIHlvdXIgIlwKKyAgICAgICAgICAgICAgICAibGF5ZXIgY29uZmlndXJhdGlvbiBpcyBhZGRpbmcgZW1wdHkgZWxlbWVudHMgdG8gQkJQQVRILlxuXHQgIlwKKyAgICAgICAgICAgICAgICAiUGxlYXNlIGNoZWNrIHlvdXIgbGF5ZXIuY29uZiBmaWxlcyBhbmQgb3RoZXIgQkJQQVRIICIgICAgICAgIFwKKyAgICAgICAgICAgICAgICAic2V0dGluZ3MgdG8gcmVtb3ZlIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICIgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAicmVmZXJlbmNlcy5cbiIgXAorICAgICAgICAgICAgICAgICJQYXJzZWQgQkJQQVRIIGlzIiArIHN0cihiYnBhdGhzKSk7CisKKyAgICBvZXNfYmJfY29uZiA9IGQuZ2V0VmFyKCAnT0VTX0JJVEJBS0VfQ09ORicsIFRydWUpCisgICAgaWYgbm90IG9lc19iYl9jb25mOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdZb3UgYXJlIG5vdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIHZlcnNpb24gb2YgY29uZi9iaXRiYWtlLmNvbmYuIFRoaXMgbWVhbnMgeW91ciBlbnZpcm9ubWVudCBpcyBtaXNjb25maWd1cmVkLCBpbiBwYXJ0aWN1bGFyIGNoZWNrIEJCUEFUSC5cbicpCisKKyAgICAjIFRoZSBsZW5ndGggb2YgVE1QRElSIGNhbid0IGJlIGxvbmdlciB0aGFuIDQxMAorICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfcGF0aF9sZW5ndGgodG1wZGlyLCAiVE1QRElSIiwgNDEwKSkKKworICAgICMgQ2hlY2sgdGhhdCBUTVBESVIgaXNuJ3QgbG9jYXRlZCBvbiBuZnMKKyAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX25vdF9uZnModG1wZGlyLCAiVE1QRElSIikpCisKK2RlZiBjaGVja19zYW5pdHlfZXZlcnlidWlsZChzdGF0dXMsIGQpOgorICAgIGltcG9ydCBvcywgc3RhdAorICAgICMgU2FuaXR5IHRlc3RzIHdoaWNoIHRlc3QgdGhlIHVzZXJzIGVudmlyb25tZW50IHNvIG5lZWQgdG8gcnVuIGF0IGVhY2ggYnVpbGQgKG9yIGFyZSBzbyBjaGVhcAorICAgICMgaXQgbWFrZXMgc2Vuc2UgdG8gYWx3YXlzIHJ1biB0aGVtLgorCisgICAgaWYgMCA9PSBvcy5nZXR1aWQoKToKKyAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCJEbyBub3QgdXNlIEJpdGJha2UgYXMgcm9vdC4iLCBkKQorCisgICAgIyBDaGVjayB0aGUgUHl0aG9uIHZlcnNpb24sIHdlIG5vdyBoYXZlIGEgbWluaW11bSBvZiBQeXRob24gMi43LjMKKyAgICBpbXBvcnQgc3lzCisgICAgaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDcwM0YwOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdUaGUgc3lzdGVtIHJlcXVpcmVzIGF0IGxlYXN0IFB5dGhvbiAyLjcuMyB0byBydW4uIFBsZWFzZSB1cGRhdGUgeW91ciBQeXRob24gaW50ZXJwcmV0ZXIuXG4nKQorCisgICAgIyBDaGVjayB0aGUgYml0YmFrZSB2ZXJzaW9uIG1lZXRzIG1pbmltdW0gcmVxdWlyZW1lbnRzCisgICAgZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisgICAgbWludmVyc2lvbiA9IGQuZ2V0VmFyKCdCQl9NSU5fVkVSU0lPTicsIFRydWUpCisgICAgaWYgKExvb3NlVmVyc2lvbihiYi5fX3ZlcnNpb25fXykgPCBMb29zZVZlcnNpb24obWludmVyc2lvbikpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCdCaXRiYWtlIHZlcnNpb24gJXMgaXMgcmVxdWlyZWQgYW5kIHZlcnNpb24gJXMgd2FzIGZvdW5kXG4nICUgKG1pbnZlcnNpb24sIGJiLl9fdmVyc2lvbl9fKSkKKworICAgIHNhbml0eV9jaGVja19jb25mZmlsZXMoc3RhdHVzLCBkKQorCisgICAgcGF0aHMgPSBkLmdldFZhcignUEFUSCcsIFRydWUpLnNwbGl0KCI6IikKKyAgICBpZiAiLiIgaW4gcGF0aHMgb3IgIi4vIiBpbiBwYXRocyBvciAiIiBpbiBwYXRoczoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiUEFUSCBjb250YWlucyAnLicsICcuLycgb3IgJycgKGVtcHR5IGVsZW1lbnQpLCB3aGljaCB3aWxsIGJyZWFrIHRoZSBidWlsZCwgcGxlYXNlIHJlbW92ZSB0aGlzLlxuUGFyc2VkIFBBVEggaXMgIiArIHN0cihwYXRocykgKyAiXG4iKQorCisgICAgIyBDaGVjayB0aGF0IHRoZSBESVNUUk8gaXMgdmFsaWQsIGlmIHNldAorICAgICMgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCBESVNUUk8gcmVuYW1pbmcgRElTVFJPCisgICAgZGlzdHJvID0gZC5nZXRWYXIoJ0RJU1RSTycsIFRydWUpCisgICAgaWYgZGlzdHJvIGFuZCBkaXN0cm8gIT0gIm5vZGlzdHJvIjoKKyAgICAgICAgaWYgbm90ICggY2hlY2tfY29uZl9leGlzdHMoImNvbmYvZGlzdHJvLyR7RElTVFJPfS5jb25mIiwgZCkgb3IgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvZGlzdHJvL2luY2x1ZGUvJHtESVNUUk99LmluYyIsIGQpICk6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJESVNUUk8gJyVzJyBub3QgZm91bmQuIFBsZWFzZSBzZXQgYSB2YWxpZCBESVNUUk8gaW4geW91ciBsb2NhbC5jb25mXG4iICUgZC5nZXRWYXIoIkRJU1RSTyIsIFRydWUpKQorCisgICAgIyBDaGVjayB0aGF0IERMX0RJUiBpcyBzZXQsIGV4aXN0cyBhbmQgaXMgd3JpdGFibGUuIEluIHRoZW9yeSwgd2Ugc2hvdWxkIG5ldmVyIGV2ZW4gaGl0IHRoZSBjaGVjayBpZiBETF9ESVIgaXNuJ3QgCisgICAgIyBzZXQsIHNpbmNlIHNvIG11Y2ggcmVsaWVzIG9uIGl0IGJlaW5nIHNldC4KKyAgICBkbGRpciA9IGQuZ2V0VmFyKCdETF9ESVInLCBUcnVlKQorICAgIGlmIG5vdCBkbGRpcjoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRExfRElSIGlzIG5vdCBzZXQuIFlvdXIgZW52aXJvbm1lbnQgaXMgbWlzY29uZmlndXJlZCwgY2hlY2sgdGhhdCBETF9ESVIgaXMgc2V0LCBhbmQgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMsIHRoYXQgaXQgaXMgd3JpdGFibGUuIFxuIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkbGRpcikgYW5kIG5vdCBvcy5hY2Nlc3MoZGxkaXIsIG9zLldfT0spOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJETF9ESVI6ICVzIGV4aXN0cyBidXQgeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gaXQuIFxuIiAlIGRsZGlyKQorICAgIGNoZWNrX3N5bWxpbmsoZGxkaXIsIGQpCisKKyAgICAjIENoZWNrIHRoYXQgdGhlIE1BQ0hJTkUgaXMgdmFsaWQsIGlmIGl0IGlzIHNldAorICAgIG1hY2hpbmV2YWxpZCA9IFRydWUKKyAgICBpZiBkLmdldFZhcignTUFDSElORScsIFRydWUpOgorICAgICAgICBpZiBub3QgY2hlY2tfY29uZl9leGlzdHMoImNvbmYvbWFjaGluZS8ke01BQ0hJTkV9LmNvbmYiLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1BsZWFzZSBzZXQgYSB2YWxpZCBNQUNISU5FIGluIHlvdXIgbG9jYWwuY29uZiBvciBlbnZpcm9ubWVudFxuJykKKyAgICAgICAgICAgIG1hY2hpbmV2YWxpZCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV92YWxpZG1hY2hpbmUoZCkpCisgICAgZWxzZToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnUGxlYXNlIHNldCBhIE1BQ0hJTkUgaW4geW91ciBsb2NhbC5jb25mIG9yIGVudmlyb25tZW50XG4nKQorICAgICAgICBtYWNoaW5ldmFsaWQgPSBGYWxzZQorICAgIGlmIG1hY2hpbmV2YWxpZDoKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdChjaGVja190b29sY2hhaW4oZCkpCisKKyAgICAjIENoZWNrIHRoYXQgdGhlIFNES01BQ0hJTkUgaXMgdmFsaWQsIGlmIGl0IGlzIHNldAorICAgIGlmIGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSk6CisgICAgICAgIGlmIG5vdCBjaGVja19jb25mX2V4aXN0cygiY29uZi9tYWNoaW5lLXNkay8ke1NES01BQ0hJTkV9LmNvbmYiLCBkKToKKyAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ1NwZWNpZmllZCBTREtNQUNISU5FIHZhbHVlIGlzIG5vdCB2YWxpZFxuJykKKyAgICAgICAgZWxpZiBkLmdldFZhcignU0RLX0FSQ0gnLCBGYWxzZSkgPT0gIiR7QlVJTERfQVJDSH0iOgorICAgICAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgnU0RLTUFDSElORSBpcyBzZXQsIGJ1dCBTREtfQVJDSCBoYXMgbm90IGJlZW4gY2hhbmdlZCBhcyBhIHJlc3VsdCAtIFNES01BQ0hJTkUgbWF5IGhhdmUgYmVlbiBzZXQgdG9vIGxhdGUgKGUuZy4gaW4gdGhlIGRpc3RybyBjb25maWd1cmF0aW9uKVxuJykKKworICAgIGNoZWNrX3N1cHBvcnRlZF9kaXN0cm8oZCkKKworICAgICMgQ2hlY2sgaWYgRElTUExBWSBpcyBzZXQgaWYgVEVTVF9JTUFHRSBpcyBzZXQKKyAgICBpZiBkLmdldFZhcignVEVTVF9JTUFHRScsIFRydWUpID09ICcxJyBvciBkLmdldFZhcignREVGQVVMVF9URVNUX1NVSVRFUycsIFRydWUpOgorICAgICAgICB0ZXN0dGFyZ2V0ID0gZC5nZXRWYXIoJ1RFU1RfVEFSR0VUJywgVHJ1ZSkKKyAgICAgICAgaWYgdGVzdHRhcmdldCA9PSAncWVtdScgb3IgdGVzdHRhcmdldCA9PSAnUWVtdVRhcmdldCc6CisgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBkaXNwbGF5OgorICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoJ3Rlc3RpbWFnZSBuZWVkcyBhbiBYIGRlc2t0b3AgdG8gc3RhcnQgcWVtdSwgcGxlYXNlIHNldCBESVNQTEFZIGNvcnJlY3RseSAoZS5nLiBESVNQTEFZPToxLjApXG4nKQorCisgICAgb21hc2sgPSBvcy51bWFzaygwMjIpCisgICAgaWYgb21hc2sgJiAwNzU1OgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJQbGVhc2UgdXNlIGEgdW1hc2sgd2hpY2ggYWxsb3dzIGErcnggYW5kIHUrcnd4XG4iKQorICAgIG9zLnVtYXNrKG9tYXNrKQorCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkgPT0gImFybSI6CisgICAgICAgICMgVGhpcyBwYXRoIGlzIG5vIGxvbmdlciB1c2VyLXJlYWRhYmxlIGluIG1vZGVybiAodmVyeSByZWNlbnQpIExpbnV4CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciIpOgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKCIvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciIsICJyIikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnQoZi5yZWFkKCkuc3RyaXAoKSkgPiA2NTUzNik6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCIvcHJvYy9zeXMvdm0vbW1hcF9taW5fYWRkciBpcyBub3QgPD0gNjU1MzYuIFRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcyB3aXRoIHFlbXUgc28gcGxlYXNlIGZpeCB0aGUgdmFsdWUgKGFzIHJvb3QpLlxuXG5UbyBmaXggdGhpcyBpbiBsYXRlciByZWJvb3RzLCBzZXQgdm0ubW1hcF9taW5fYWRkciA9IDY1NTM2IGluIC9ldGMvc3lzY3RsLmNvbmYuXG4iKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBvZXJvb3QgPSBkLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKQorICAgIGlmIG9lcm9vdC5maW5kKCcrJykgIT0gLTE6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCB5b3UgaGF2ZSBhbiBpbnZhbGlkIGNoYXJhY3RlciAoKykgaW4geW91ciBDT1JFQkFTRSBkaXJlY3RvcnkgcGF0aC4gUGxlYXNlIG1vdmUgdGhlIGluc3RhbGxhdGlvbiB0byBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGluY2x1ZGUgYW55ICsgY2hhcmFjdGVycy4iKQorICAgIGlmIG9lcm9vdC5maW5kKCdAJykgIT0gLTE6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCB5b3UgaGF2ZSBhbiBpbnZhbGlkIGNoYXJhY3RlciAoQCkgaW4geW91ciBDT1JFQkFTRSBkaXJlY3RvcnkgcGF0aC4gUGxlYXNlIG1vdmUgdGhlIGluc3RhbGxhdGlvbiB0byBhIGRpcmVjdG9yeSB3aGljaCBkb2Vzbid0IGluY2x1ZGUgYW55IEAgY2hhcmFjdGVycy4iKQorICAgIGlmIG9lcm9vdC5maW5kKCcgJykgIT0gLTE6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCB5b3UgaGF2ZSBhIHNwYWNlIGluIHlvdXIgQ09SRUJBU0UgZGlyZWN0b3J5IHBhdGguIFBsZWFzZSBtb3ZlIHRoZSBpbnN0YWxsYXRpb24gdG8gYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBpbmNsdWRlIGEgc3BhY2Ugc2luY2UgYXV0b3Rvb2xzIGRvZXNuJ3Qgc3VwcG9ydCB0aGlzLiIpCisKKyAgICAjIENoZWNrIHRoZSBmb3JtYXQgb2YgTUlSUk9SUywgUFJFTUlSUk9SUyBhbmQgU1NUQVRFX01JUlJPUlMKKyAgICBpbXBvcnQgcmUKKyAgICBtaXJyb3JfdmFycyA9IFsnTUlSUk9SUycsICdQUkVNSVJST1JTJywgJ1NTVEFURV9NSVJST1JTJ10KKyAgICBwcm90b2NvbHMgPSBbJ2h0dHAnLCAnZnRwJywgJ2ZpbGUnLCAnaHR0cHMnLCBcCisgICAgICAgICAgICAgICAgICdnaXQnLCAnZ2l0c20nLCAnaGcnLCAnb3NjJywgJ3A0JywgJ3N2bicsIFwKKyAgICAgICAgICAgICAgICAgJ2J6cicsICdjdnMnXQorICAgIGZvciBtaXJyb3JfdmFyIGluIG1pcnJvcl92YXJzOgorICAgICAgICBtaXJyb3JzID0gKGQuZ2V0VmFyKG1pcnJvcl92YXIsIFRydWUpIG9yICcnKS5yZXBsYWNlKCdcXG4nLCAnXG4nKS5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbWlycm9yX2VudHJ5IGluIG1pcnJvcnM6CisgICAgICAgICAgICBtaXJyb3JfZW50cnkgPSBtaXJyb3JfZW50cnkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IG1pcnJvcl9lbnRyeToKKyAgICAgICAgICAgICAgICAjIGlnbm9yZSBibGFuayBsaW5lcworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXR0ZXJuLCBtaXJyb3IgPSBtaXJyb3JfZW50cnkuc3BsaXQoKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCAlczogJXMsIHNob3VsZCBiZSAyIG1lbWJlcnMuJyAlIChtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkuc3RyaXAoKSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVjb2RlZCA9IGJiLmZldGNoMi5kZWNvZGV1cmwocGF0dGVybikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXR0ZXJuX3NjaGVtZSA9IHJlLmNvbXBpbGUoZGVjb2RlZFswXSkKKyAgICAgICAgICAgIGV4Y2VwdCByZS5lcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCBzY2hlbWUgcmVnZXggKCVzKSBpbiAlczsgJXMnICUgKHBhdHRlcm4sIG1pcnJvcl92YXIsIG1pcnJvcl9lbnRyeSkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90IGFueShwYXR0ZXJuX3NjaGVtZS5tYXRjaChwcm90b2NvbCkgZm9yIHByb3RvY29sIGluIHByb3RvY29scyk6CisgICAgICAgICAgICAgICAgYmIud2FybignSW52YWxpZCBwcm90b2NvbCAoJXMpIGluICVzOiAlcycgJSAoZGVjb2RlZFswXSwgbWlycm9yX3ZhciwgbWlycm9yX2VudHJ5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3QgYW55KG1pcnJvci5zdGFydHN3aXRoKHByb3RvY29sICsgJzovLycpIGZvciBwcm90b2NvbCBpbiBwcm90b2NvbHMpOgorICAgICAgICAgICAgICAgIGJiLndhcm4oJ0ludmFsaWQgcHJvdG9jb2wgaW4gJXM6ICVzJyAlIChtaXJyb3JfdmFyLCBtaXJyb3JfZW50cnkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG1pcnJvci5zdGFydHN3aXRoKCdmaWxlOi8vJyk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHVybHBhcnNlCisgICAgICAgICAgICAgICAgY2hlY2tfc3ltbGluayh1cmxwYXJzZS51cmxwYXJzZShtaXJyb3IpLnBhdGgsIGQpCisgICAgICAgICAgICAgICAgIyBTU1RBVEVfTUlSUk9SIGVuZHMgd2l0aCBhIC9QQVRIIHN0cmluZworICAgICAgICAgICAgICAgIGlmIG1pcnJvci5lbmRzd2l0aCgnL1BBVEgnKToKKyAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgL1BBVEgkIGZyb20gU1NUQVRFX01JUlJPUiB0byBnZXQgYSB3b3JraW5nCisgICAgICAgICAgICAgICAgICAgICMgYmFzZSBkaXJlY3RvcnkgcGF0aAorICAgICAgICAgICAgICAgICAgICBtaXJyb3JfYmFzZSA9IHVybHBhcnNlLnVybHBhcnNlKG1pcnJvcls6LTEqbGVuKCcvUEFUSCcpXSkucGF0aAorICAgICAgICAgICAgICAgICAgICBjaGVja19zeW1saW5rKG1pcnJvcl9iYXNlLCBkKQorCisgICAgIyBDaGVjayB0aGF0IFRNUERJUiBoYXNuJ3QgY2hhbmdlZCBsb2NhdGlvbiBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgcnVuCisgICAgdG1wZGlyID0gZC5nZXRWYXIoJ1RNUERJUicsIFRydWUpCisgICAgY2hlY2tmaWxlID0gb3MucGF0aC5qb2luKHRtcGRpciwgInNhdmVkX3RtcGRpciIpCisgICAgaWYgb3MucGF0aC5leGlzdHMoY2hlY2tmaWxlKToKKyAgICAgICAgd2l0aCBvcGVuKGNoZWNrZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgc2F2ZWRfdG1wZGlyID0gZi5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgaWYgKHNhdmVkX3RtcGRpciAhPSB0bXBkaXIpOgorICAgICAgICAgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBUTVBESVIgaGFzIGNoYW5nZWQgbG9jYXRpb24uIFlvdSBuZWVkIHRvIGVpdGhlciBtb3ZlIGl0IGJhY2sgdG8gJXMgb3IgcmVidWlsZFxuIiAlIHNhdmVkX3RtcGRpcikKKyAgICBlbHNlOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodG1wZGlyKQorICAgICAgICAjIFJlbW92ZSBzZXR1aWQsIHNldGdpZCBhbmQgc3RpY2t5IGJpdHMgZnJvbSBUTVBESVIKKyAgICAgICAgb3MuY2htb2QodG1wZGlyLCBvcy5zdGF0KHRtcGRpcikuc3RfbW9kZSAmIH4gc3RhdC5TX0lTVUlEKQorICAgICAgICBvcy5jaG1vZCh0bXBkaXIsIG9zLnN0YXQodG1wZGlyKS5zdF9tb2RlICYgfiBzdGF0LlNfSVNHSUQpCisgICAgICAgIG9zLmNobW9kKHRtcGRpciwgb3Muc3RhdCh0bXBkaXIpLnN0X21vZGUgJiB+IHN0YXQuU19JU1ZUWCkKKyAgICAgICAgd2l0aCBvcGVuKGNoZWNrZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh0bXBkaXIpCisKKyAgICAjIENoZWNrIHZtZGsgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXIuCisgICAgaWYgJ3ZtZGsnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSkgYW5kICdsaXZlJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpOgorICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KCJFcnJvciwgSU1BR0VfRlNUWVBFUyB2bWRrIGFuZCBsaXZlIGNhbid0IGJlIGJ1aWx0IHRvZ2V0aGVyXG4iKQorCisgICAgIyBDaGVjayB2ZGkgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXIuCisgICAgaWYgJ3ZkaScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKSBhbmQgJ2xpdmUnIGluIGQuZ2V0VmFyKCdJTUFHRV9GU1RZUEVTJywgVHJ1ZSk6CisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoIkVycm9yLCBJTUFHRV9GU1RZUEVTIHZkaSBhbmQgbGl2ZSBjYW4ndCBiZSBidWlsdCB0b2dldGhlclxuIikKKworICAgICMgQ2hlY2sgcWNvdzIgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXIuCisgICAgaWYgJ3Fjb3cyJyBpbiBkLmdldFZhcignSU1BR0VfRlNUWVBFUycsIFRydWUpIGFuZCAnbGl2ZScgaW4gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIElNQUdFX0ZTVFlQRVMgcWNvdzIgYW5kIGxpdmUgY2FuJ3QgYmUgYnVpbHQgdG9nZXRoZXJcbiIpCisKKyAgICAjIENoZWNrIC9iaW4vc2ggbGlua3MgdG8gZGFzaCBvciBiYXNoCisgICAgcmVhbF9zaCA9IG9zLnBhdGgucmVhbHBhdGgoJy9iaW4vc2gnKQorICAgIGlmIG5vdCByZWFsX3NoLmVuZHN3aXRoKCcvZGFzaCcpIGFuZCBub3QgcmVhbF9zaC5lbmRzd2l0aCgnL2Jhc2gnKToKKyAgICAgICAgc3RhdHVzLmFkZHJlc3VsdCgiRXJyb3IsIC9iaW4vc2ggbGlua3MgdG8gJXMsIG11c3QgYmUgZGFzaCBvciBiYXNoXG4iICUgcmVhbF9zaCkKKworZGVmIGNoZWNrX3Nhbml0eShzYW5pdHlfZGF0YSk6CisgICAgY2xhc3MgU2FuaXR5U3RhdHVzKG9iamVjdCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZXMgPSAiIgorICAgICAgICAgICAgc2VsZi5uZXR3b3JrX2Vycm9yID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYucmVwYXJzZSA9IEZhbHNlCisKKyAgICAgICAgZGVmIGFkZHJlc3VsdChzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgICAgIGlmIG1lc3NhZ2U6CisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlcyA9IHNlbGYubWVzc2FnZXMgKyBtZXNzYWdlCisKKyAgICBzdGF0dXMgPSBTYW5pdHlTdGF0dXMoKQorCisgICAgdG1wZGlyID0gc2FuaXR5X2RhdGEuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorICAgIHNzdGF0ZV9kaXIgPSBzYW5pdHlfZGF0YS5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKQorCisgICAgY2hlY2tfc3ltbGluayhzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkKKworICAgICMgQ2hlY2sgc2F2ZWQgc2FuaXR5IGluZm8KKyAgICBsYXN0X3Nhbml0eV92ZXJzaW9uID0gMAorICAgIGxhc3RfdG1wZGlyID0gIiIKKyAgICBsYXN0X3NzdGF0ZV9kaXIgPSAiIgorICAgIHNhbml0eXZlcmZpbGUgPSBzYW5pdHlfZGF0YS5leHBhbmQoIiR7VE9QRElSfS9jb25mL3Nhbml0eV9pbmZvIikKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhzYW5pdHl2ZXJmaWxlKToKKyAgICAgICAgd2l0aCBvcGVuKHNhbml0eXZlcmZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTQU5JVFlfVkVSU0lPTicpOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3Nhbml0eV92ZXJzaW9uID0gaW50KGxpbmUuc3BsaXQoKVsxXSkKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1RNUERJUicpOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3RtcGRpciA9IGxpbmUuc3BsaXQoKVsxXQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU1NUQVRFX0RJUicpOgorICAgICAgICAgICAgICAgICAgICBsYXN0X3NzdGF0ZV9kaXIgPSBsaW5lLnNwbGl0KClbMV0KKworICAgIGNoZWNrX3Nhbml0eV9ldmVyeWJ1aWxkKHN0YXR1cywgc2FuaXR5X2RhdGEpCisgICAgCisgICAgc2FuaXR5X3ZlcnNpb24gPSBpbnQoc2FuaXR5X2RhdGEuZ2V0VmFyKCdTQU5JVFlfVkVSU0lPTicsIFRydWUpIG9yIDEpCisgICAgbmV0d29ya19lcnJvciA9IEZhbHNlCisgICAgaWYgbGFzdF9zYW5pdHlfdmVyc2lvbiA8IHNhbml0eV92ZXJzaW9uOiAKKyAgICAgICAgY2hlY2tfc2FuaXR5X3ZlcnNpb25fY2hhbmdlKHN0YXR1cywgc2FuaXR5X2RhdGEpCisgICAgICAgIHN0YXR1cy5hZGRyZXN1bHQoY2hlY2tfc2FuaXR5X3NzdGF0ZV9kaXJfY2hhbmdlKHNzdGF0ZV9kaXIsIHNhbml0eV9kYXRhKSkKKyAgICBlbHNlOiAKKyAgICAgICAgaWYgbGFzdF9zc3RhdGVfZGlyICE9IHNzdGF0ZV9kaXI6CisgICAgICAgICAgICBzdGF0dXMuYWRkcmVzdWx0KGNoZWNrX3Nhbml0eV9zc3RhdGVfZGlyX2NoYW5nZShzc3RhdGVfZGlyLCBzYW5pdHlfZGF0YSkpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoc2FuaXR5dmVyZmlsZSkpIGFuZCBub3Qgc3RhdHVzLm1lc3NhZ2VzOgorICAgICAgICB3aXRoIG9wZW4oc2FuaXR5dmVyZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiU0FOSVRZX1ZFUlNJT04gJXNcbiIgJSBzYW5pdHlfdmVyc2lvbikgCisgICAgICAgICAgICBmLndyaXRlKCJUTVBESVIgJXNcbiIgJSB0bXBkaXIpIAorICAgICAgICAgICAgZi53cml0ZSgiU1NUQVRFX0RJUiAlc1xuIiAlIHNzdGF0ZV9kaXIpIAorCisgICAgc2FuaXR5X2hhbmRsZV9hYmljaGFuZ2VzKHN0YXR1cywgc2FuaXR5X2RhdGEpCisKKyAgICBpZiBzdGF0dXMubWVzc2FnZXMgIT0gIiI6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcihzYW5pdHlfZGF0YS5leHBhbmQoc3RhdHVzLm1lc3NhZ2VzKSwgc2FuaXR5X2RhdGEsIHN0YXR1cy5uZXR3b3JrX2Vycm9yKQorICAgIHJldHVybiBzdGF0dXMucmVwYXJzZQorCisjIENyZWF0ZSBhIGNvcHkgb2YgdGhlIGRhdGFzdG9yZSBhbmQgZmluYWxpc2UgaXQgdG8gZW5zdXJlIGFwcGVuZHMgYW5kIAorIyBvdmVycmlkZXMgYXJlIHNldCAtIHRoZSBkYXRhc3RvcmUgaGFzIHlldCB0byBiZSBmaW5hbGlzZWQgYXQgQ29uZmlnUGFyc2VkCitkZWYgY29weV9kYXRhKGUpOgorICAgIHNhbml0eV9kYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGUuZGF0YSkKKyAgICBzYW5pdHlfZGF0YS5maW5hbGl6ZSgpCisgICAgcmV0dXJuIHNhbml0eV9kYXRhCisKK2FkZGhhbmRsZXIgY2hlY2tfc2FuaXR5X2V2ZW50aGFuZGxlcgorY2hlY2tfc2FuaXR5X2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmV2ZW50LlNhbml0eUNoZWNrIGJiLmV2ZW50Lk5ldHdvcmtUZXN0IgorcHl0aG9uIGNoZWNrX3Nhbml0eV9ldmVudGhhbmRsZXIoKSB7CisgICAgaWYgYmIuZXZlbnQuZ2V0TmFtZShlKSA9PSAiU2FuaXR5Q2hlY2siOgorICAgICAgICBzYW5pdHlfZGF0YSA9IGNvcHlfZGF0YShlKQorICAgICAgICBpZiBlLmdlbmVyYXRlZXZlbnRzOgorICAgICAgICAgICAgc2FuaXR5X2RhdGEuc2V0VmFyKCJTQU5JVFlfVVNFX0VWRU5UUyIsICIxIikKKyAgICAgICAgcmVwYXJzZSA9IGNoZWNrX3Nhbml0eShzYW5pdHlfZGF0YSkKKyAgICAgICAgZS5kYXRhLnNldFZhcigiQkJfSU5WQUxJRENPTkYiLCByZXBhcnNlKQorICAgICAgICBiYi5ldmVudC5maXJlKGJiLmV2ZW50LlNhbml0eUNoZWNrUGFzc2VkKCksIGUuZGF0YSkKKyAgICBlbGlmIGJiLmV2ZW50LmdldE5hbWUoZSkgPT0gIk5ldHdvcmtUZXN0IjoKKyAgICAgICAgc2FuaXR5X2RhdGEgPSBjb3B5X2RhdGEoZSkKKyAgICAgICAgaWYgZS5nZW5lcmF0ZWV2ZW50czoKKyAgICAgICAgICAgIHNhbml0eV9kYXRhLnNldFZhcigiU0FOSVRZX1VTRV9FVkVOVFMiLCAiMSIpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTmV0d29ya1Rlc3RGYWlsZWQoKSBpZiBjaGVja19jb25uZWN0aXZpdHkoc2FuaXR5X2RhdGEpIGVsc2UgYmIuZXZlbnQuTmV0d29ya1Rlc3RQYXNzZWQoKSwgZS5kYXRhKQorCisgICAgcmV0dXJuCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zY29ucy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZGU4MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2NvbnMuYmJjbGFzcwpAQCAtMCwwICsxLDE1IEBACitERVBFTkRTICs9ICJweXRob24tc2NvbnMtbmF0aXZlIgorCitFWFRSQV9PRVNDT05TID89ICIiCisKK3Njb25zX2RvX2NvbXBpbGUoKSB7CisgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyAke1BBUkFMTEVMX01BS0V9IFBSRUZJWD0ke3ByZWZpeH0gcHJlZml4PSR7cHJlZml4fSAke0VYVFJBX09FU0NPTlN9IHx8IFwKKyAgICAgICAgZGllICJzY29ucyBidWlsZCBleGVjdXRpb24gZmFpbGVkLiIKK30KKworc2NvbnNfZG9faW5zdGFsbCgpIHsKKyAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Njb25zIFBSRUZJWD0ke0R9JHtwcmVmaXh9IHByZWZpeD0ke0R9JHtwcmVmaXh9IGluc3RhbGwgJHtFWFRSQV9PRVNDT05TfXx8IFwKKyAgICAgICAgZGllICJzY29ucyBpbnN0YWxsIGV4ZWN1dGlvbiBmYWlsZWQuIgorfQorCitFWFBPUlRfRlVOQ1RJT05TIGRvX2NvbXBpbGUgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NkbC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzEyODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc2RsLmJiY2xhc3MKQEAgLTAsMCArMSw2IEBACisjCisjIChDKSBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAVmFuaWxsZS5kZT4KKyMKKworREVQRU5EUyArPSAidmlydHVhbC9saWJzZGwgbGlic2RsLW1peGVyIGxpYnNkbC1pbWFnZSIKK1NFQ1RJT04gPSAieDExL2dhbWVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzNDNiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzLmJiY2xhc3MKQEAgLTAsMCArMSw4IEBACitpbmhlcml0IGRpc3R1dGlscworCitERVBFTkRTICs9ICJweXRob24tZGlzdHJpYnV0ZS1uYXRpdmUiCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPSAiLS1yb290PSR7RH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWxpYj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NldHVwdG9vbHMzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2ZGQ5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zZXR1cHRvb2xzMy5iYmNsYXNzCkBAIC0wLDAgKzEsOCBAQAoraW5oZXJpdCBkaXN0dXRpbHMzCisKK0RFUEVORFMgKz0gInB5dGhvbjMtc2V0dXB0b29scy1uYXRpdmUiCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgPSAiLS1yb290PSR7RH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgLS1pbnN0YWxsLWxpYj0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfSBcCisgICAgLS1pbnN0YWxsLWRhdGE9JHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NpZ25fcnBtLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFhNGNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaWduX3JwbS5iYmNsYXNzCkBAIC0wLDAgKzEsNzUgQEAKKyMgQ2xhc3MgZm9yIGdlbmVyYXRpbmcgc2lnbmVkIFJQTSBwYWNrYWdlcy4KKyMKKyMgQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdXNlZCBieSB0aGlzIGNsYXNzOgorIyBSUE1fR1BHX1BBU1NQSFJBU0VfRklMRQorIyAgICAgICAgICAgUGF0aCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgcGFzc3BocmFzZSBvZiB0aGUgc2lnbmluZyBrZXkuCisjIFJQTV9HUEdfTkFNRQorIyAgICAgICAgICAgTmFtZSBvZiB0aGUga2V5IHRvIHNpZ24gd2l0aC4gQWx0ZXJuYXRpdmVseSB5b3UgY2FuIGRlZmluZQorIyAgICAgICAgICAgJV9ncGdfbmFtZSBtYWNybyBpbiB5b3VyIH4vLm9lcnBtbWFjcm9zIGZpbGUuCisjIFJQTV9HUEdfUFVCS0VZCisjICAgICAgICAgICBQYXRoIHRvIGEgZmlsZSBjb250YWluaW5nIHRoZSBwdWJsaWMga2V5IChpbiAiYXJtb3IiIGZvcm1hdCkKKyMgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdGhlIHNpZ25pbmcga2V5LgorIyBHUEdfQklOCisjICAgICAgICAgICBPcHRpb25hbCB2YXJpYWJsZSBmb3Igc3BlY2lmeWluZyB0aGUgZ3BnIGJpbmFyeS93cmFwcGVyIHRvIHVzZSBmb3IKKyMgICAgICAgICAgIHNpZ25pbmcuCisjCitpbmhlcml0IHNhbml0eQorCitSUE1fU0lHTl9QQUNLQUdFUz0nMScKKworCitfY2hlY2tfZ3BnX25hbWUgKCkgeworICAgIG1hY3JvZGVmPWBycG0gLUUgJyVfZ3BnX25hbWUnYAorICAgIFsgIiRtYWNyb2RlZiIgPT0gIiVfZ3BnX25hbWUiIF0gJiYgcmV0dXJuIDEgfHwgcmV0dXJuIDAKK30KKworCitkZWYgcnBtc2lnbl93cmFwcGVyKGQsIGZpbGVzLCBwYXNzcGhyYXNlLCBncGdfbmFtZT1Ob25lKToKKyAgICBpbXBvcnQgcGV4cGVjdAorCisgICAgIyBGaW5kIHRoZSBjb3JyZWN0IHJwbSBiaW5hcnkKKyAgICBycG1fYmluX3BhdGggPSBkLmdldFZhcignU1RBR0lOR19CSU5ESVJfTkFUSVZFJywgVHJ1ZSkgKyAnL3JwbScKKyAgICBjbWQgPSBycG1fYmluX3BhdGggKyAiIC0tYWRkc2lnbiAiCisgICAgaWYgZ3BnX25hbWU6CisgICAgICAgIGNtZCArPSAiLS1kZWZpbmUgJyUlX2dwZ19uYW1lICVzJyAiICUgZ3BnX25hbWUKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ19jaGVja19ncGdfbmFtZScsIGQpCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkOgorICAgICAgICAgICAgcmFpc2Vfc2FuaXR5X2Vycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgUlBNX0dQR19OQU1FIGluIGJpdGJha2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb25maWcgb3IgdGhlICVfZ3BnX25hbWUgUlBNIG1hY3JvIGRlZmluZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoZS5nLiBpbiAgfi8ub2VycG1tYWNyb3MiLCBkKQorICAgIGlmIGQuZ2V0VmFyKCdHUEdfQklOJywgVHJ1ZSk6CisgICAgICAgIGNtZCArPSAiLS1kZWZpbmUgJyUlX19ncGcgJXMnICIgJSBkLmdldFZhcignR1BHX0JJTicsIFRydWUpCisgICAgY21kICs9ICcgJy5qb2luKGZpbGVzKQorCisgICAgIyBOZWVkIHRvIHVzZSBwZXhwZWN0IGZvciBmZWVkaW5nIHRoZSBwYXNzcGhyYXNlCisgICAgcHJvYyA9IHBleHBlY3Quc3Bhd24oY21kKQorICAgIHRyeToKKyAgICAgICAgcHJvYy5leHBlY3RfZXhhY3QoJ0VudGVyIHBhc3MgcGhyYXNlOicsIHRpbWVvdXQ9MTUpCisgICAgICAgIHByb2Muc2VuZGxpbmUocGFzc3BocmFzZSkKKyAgICAgICAgcHJvYy5leHBlY3QocGV4cGVjdC5FT0YsIHRpbWVvdXQ9OTAwKQorICAgICAgICBwcm9jLmNsb3NlKCkKKyAgICBleGNlcHQgcGV4cGVjdC5USU1FT1VUIGFzIGVycjoKKyAgICAgICAgYmIuZGVidWcoJ3JwbXNpZ24gdGltZW91dDogJXMnICUgZXJyKQorICAgICAgICBwcm9jLnRlcm1pbmF0ZSgpCisgICAgcmV0dXJuIHByb2MuZXhpdHN0YXR1cworCisKK3B5dGhvbiBzaWduX3JwbSAoKSB7CisgICAgaW1wb3J0IGdsb2IKKworICAgIHJwbV9ncGdfcGFzc19maWxlID0gKGQuZ2V0VmFyKCJSUE1fR1BHX1BBU1NQSFJBU0VfRklMRSIsIFRydWUpIG9yICIiKQorICAgIGlmIHJwbV9ncGdfcGFzc19maWxlOgorICAgICAgICB3aXRoIG9wZW4ocnBtX2dwZ19wYXNzX2ZpbGUpIGFzIGZvYmo6CisgICAgICAgICAgICBycG1fZ3BnX3Bhc3NwaHJhc2UgPSBmb2JqLnJlYWRsaW5lcygpWzBdLnJzdHJpcCgnXG4nKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlX3Nhbml0eV9lcnJvcigiWW91IG5lZWQgdG8gZGVmaW5lIFJQTV9HUEdfUEFTU1BIUkFTRV9GSUxFIGluIHRoZSBjb25maWciLCBkKQorCisgICAgcnBtX2dwZ19uYW1lID0gKGQuZ2V0VmFyKCJSUE1fR1BHX05BTUUiLCBUcnVlKSBvciAiIikKKworICAgIHJwbXMgPSBnbG9iLmdsb2IoZC5nZXRWYXIoJ1JQTV9QS0dXUklURURJUicsIFRydWUpICsgJy8qJykKKworICAgIGlmIHJwbXNpZ25fd3JhcHBlcihkLCBycG1zLCBycG1fZ3BnX3Bhc3NwaHJhc2UsIHJwbV9ncGdfbmFtZSkgIT0gMDoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiUlBNIHNpZ25pbmcgZmFpbGVkIikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zaXAuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQyYTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3NpcC5iYmNsYXNzCkBAIC0wLDAgKzEsNjEgQEAKKyMgQnVpbGQgQ2xhc3MgZm9yIFNpcCBiYXNlZCBQeXRob24gQmluZGluZ3MKKyMgKEMpIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUBWYW5pbGxlLmRlPgorIworU1RBR0lOR19TSVBESVIgPz0gIiR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vc2lwIgorCitERVBFTkRTICA9KyAic2lwLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tc2lwIgorCisjIGRlZmF1bHQgc3R1ZmYsIGRvIG5vdCB1bmNvbW1lbnQKKyMgRVhUUkFfU0lQVEFHUyA9ICItdFdTX1gxMSAtdFF0XzRfM18wIgorCisjIGRvX2dlbmVyYXRlIGlzIGJlZm9yZSBkb19jb25maWd1cmUgc28gZW5zdXJlIHRoYXQgc2lwX25hdGl2ZSBpcyBwb3B1bGF0ZWQgaW4gc3lzcm9vdCBiZWZvcmUgZXhlY3V0aW5nIGl0Citkb19nZW5lcmF0ZVtkZXBlbmRzXSArPSAic2lwLW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290IgorCitzaXBfZG9fZ2VuZXJhdGUoKSB7CisJaWYgWyAteiAiJHtTSVBfTU9EVUxFU30iIF07IHRoZW4gCisJCU1PRFVMRVM9ImBscyBzaXAvKm1vZC5zaXBgIgorCWVsc2UKKwkJTU9EVUxFUz0iJHtTSVBfTU9EVUxFU30iCisJZmkKKworCWlmIFsgLXogIiRNT0RVTEVTIiBdOyB0aGVuCisJCWRpZSAiU0lQX01PRFVMRVMgbm90IHNldCBhbmQgbm8gbW9kdWxlcyBmb3VuZCBpbiAkUFdEIgorICAgICAgICBlbHNlCisJCWJibm90ZSAidXNpbmcgbW9kdWxlcyAnJHtTSVBfTU9EVUxFU30nIGFuZCB0YWdzICcke0VYVFJBX1NJUFRBR1N9JyIKKwlmaQorCisJaWYgWyAteiAiJHtFWFRSQV9TSVBUQUdTfSIgXTsgdGhlbgorCQlkaWUgIkVYVFJBX1NJUFRBR1MgbmVlZHMgdG8gYmUgc2V0ISIKKwllbHNlCisJCVNJUFRBR1M9IiR7RVhUUkFfU0lQVEFHU30iCisJZmkKKworCWlmIFsgISAteiAiJHtTSVBfRkVBVFVSRVN9IiBdOyB0aGVuCisJCUZFQVRVUkVTPSIteiAke1NJUF9GRUFUVVJFU30iCisJCWJibm90ZSAic2lwIGZlYXR1cmUgZmlsZTogJHtTSVBfRkVBVFVSRVN9IgorCWZpCisKKwlmb3IgbW9kdWxlIGluICRNT0RVTEVTCisJZG8KKwkJaW5zdGFsbCAtZCAke21vZHVsZX0vCisJCWVjaG8gImNhbGxpbmcgJ3NpcDQgLUkgc2lwIC1JICR7U1RBR0lOR19TSVBESVJ9ICR7U0lQVEFHU30gJHtGRUFUVVJFU30gLWMgJHttb2R1bGV9IC1iICR7bW9kdWxlfS8ke21vZHVsZX0ucHJvLmluIHNpcC8ke21vZHVsZX0vJHttb2R1bGV9bW9kLnNpcCciCisJCXNpcDQgLUkgJHtTVEFHSU5HX1NJUERJUn0gLUkgc2lwICR7U0lQVEFHU30gJHtGRUFUVVJFU30gLWMgJHttb2R1bGV9IC1iICR7bW9kdWxlfS8ke21vZHVsZX0uc2JmIFwKKwkJCXNpcC8ke21vZHVsZX0vJHttb2R1bGV9bW9kLnNpcCB8fCBkaWUgIkVycm9yIGNhbGxpbmcgc2lwIG9uICR7bW9kdWxlfSIKKwkJc2VkIC1lICdzLHRhcmdldCxUQVJHRVQsJyAtZSAncyxzb3VyY2VzLFNPVVJDRVMsJyAtZSAncyxoZWFkZXJzLEhFQURFUlMsJyBcCisJCQkke21vZHVsZX0vJHttb2R1bGV9LnNiZiB8IHNlZCBzLCJtb2NfSEVBREVSUyA9IiwiSEVBREVSUyArPSIsIFwKKwkJCT4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQllY2hvICJURU1QTEFURT1saWIiID4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdCIgXSAJCSYmIGVjaG8gIiIgCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXRjYW52YXMiIF0gCSYmIGVjaG8gIiIJCT4+JHttb2R1bGV9LyR7bW9kdWxlfS5wcm8KKwkJWyAiJHttb2R1bGV9IiA9ICJxdHRhYmxlIiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXd0IiBdIAkmJiBlY2hvICIiCQk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCVsgIiR7bW9kdWxlfSIgPSAicXRwZSIgXSAgICAgICAgJiYgZWNobyAiIgkJPj4ke21vZHVsZX0vJHttb2R1bGV9LnBybworCQlbICIke21vZHVsZX0iID0gInF0cGUiIF0gICAgICAgICYmIGVjaG8gIkxJQlMrPS1scXBlIgk+PiR7bW9kdWxlfS8ke21vZHVsZX0ucHJvCisJCXRydWUKKwlkb25lCit9CisKK0VYUE9SVF9GVU5DVElPTlMgZG9fZ2VuZXJhdGUKKworYWRkdGFzayBnZW5lcmF0ZSBhZnRlciBkb191bnBhY2sgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NpdGVjb25maWcuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkY2U0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaXRlY29uZmlnLmJiY2xhc3MKQEAgLTAsMCArMSwzMyBAQAorcHl0aG9uIHNpdGVjb25maWdfZG9fc2l0ZWNvbmZpZyAoKSB7CisJc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQpCisJaWYgc2hhcmVkX3N0YXRlWyd0YXNrJ10gIT0gJ3BvcHVsYXRlX3N5c3Jvb3QnOgorCQlyZXR1cm4KKwlpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0ZJTEVfRElSTkFNRScsIFRydWUpLCAnc2l0ZV9jb25maWcnKSk6CisJCWJiLmRlYnVnKDEsICJObyBzaXRlX2NvbmZpZyBkaXJlY3RvcnksIHNraXBwaW5nIGRvX3NpdGVjb25maWciKQorCQlyZXR1cm4KKwliYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3NpdGVjb25maWdfZ2VuY2FjaGUnLCBkKQorCXNzdGF0ZV9jbGVhbihzaGFyZWRfc3RhdGUsIGQpCisJc3N0YXRlX2luc3RhbGwoc2hhcmVkX3N0YXRlLCBkKQorfQorCitFWFRSQVNJVEVDT05GSUcgPz0gIiIKKworc2l0ZWNvbmZpZ19kb19zaXRlY29uZmlnX2dlbmNhY2hlICgpIHsKKwlta2RpciAtcCAke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0KKwlnZW4tc2l0ZS1jb25maWcgJHtGSUxFX0RJUk5BTUV9L3NpdGVfY29uZmlnIFwKKwkJPiR7V09SS0RJUn0vc2l0ZV9jb25maWdfJHtNQUNISU5FfS9jb25maWd1cmUuYWMKKwljZCAke1dPUktESVJ9L3NpdGVfY29uZmlnXyR7TUFDSElORX0KKwlhdXRvY29uZgorCXJtIC1mICR7QlBOfV9jYWNoZQorCUNPTkZJR19TSVRFPSIiICR7RVhUUkFTSVRFQ09ORklHfSAuL2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9IC0tY2FjaGUtZmlsZSAke0JQTn1fY2FjaGUKKwlzZWQgLW4gLWUgIi9hY19jdl9jX2JpZ2VuZGlhbi9wIiAtZSAiL2FjX2N2X3NpemVvZl8vcCIgXAorCQktZSAiL2FjX2N2X3R5cGVfL3AiIC1lICIvYWNfY3ZfaGVhZGVyXy9wIiAtZSAiL2FjX2N2X2Z1bmNfL3AiIFwKKwkJPCAke0JQTn1fY2FjaGUgPiAke0JQTn1fY29uZmlnCisJbWtkaXIgLXAgJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS8ke1RBUkdFVF9TWVN9X2NvbmZpZ19zaXRlLmQKKwljcCAke0JQTn1fY29uZmlnICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kCisKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW50ZXJjZXB0ZnVuY3NdICs9ICJkb19zaXRlY29uZmlnICIKKworRVhQT1JUX0ZVTkNUSU9OUyBkb19zaXRlY29uZmlnIGRvX3NpdGVjb25maWdfZ2VuY2FjaGUKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NpdGVpbmZvLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2ZWFjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zaXRlaW5mby5iYmNsYXNzCkBAIC0wLDAgKzEsMTcxIEBACisjIFRoaXMgY2xhc3MgZXhpc3RzIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldHMgdGhhdAorIyBtYXkgYmUgbmVlZGVkIGJ5IG90aGVyIGNsYXNzZXMgYW5kL29yIHJlY2lwZXMuIElmIHlvdSBhZGQgYSBuZXcKKyMgdGFyZ2V0IHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisKKyMKKyMgUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCAnd2hhdCcgZm9yIHRoZSBuYW1lZCB0YXJnZXQgJ3RhcmdldCcKKyMgd2hlcmUgJ3RhcmdldCcgPT0gIjxhcmNoPi08b3M+IgorIworIyAnd2hhdCcgY2FuIGJlIG9uZSBvZgorIyAqIHRhcmdldDogUmV0dXJucyB0aGUgdGFyZ2V0IG5hbWUgKCI8YXJjaD4tPG9zPiIpCisjICogZW5kaWFuZXNzOiBSZXR1cm4gImJlIiBmb3IgYmlnIGVuZGlhbiB0YXJnZXRzLCAibGUiIGZvciBsaXR0bGUgZW5kaWFuCisjICogYml0czogUmV0dXJucyB0aGUgYml0IHNpemUgb2YgdGhlIHRhcmdldCwgZWl0aGVyICIzMiIgb3IgIjY0IgorIyAqIGxpYmM6IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGMgbGlicmFyeSB1c2VkIGJ5IHRoZSB0YXJnZXQKKyMKKyMgSXQgaXMgYW4gZXJyb3IgZm9yIHRoZSB0YXJnZXQgbm90IHRvIGV4aXN0LgorIyBJZiAnd2hhdCcgZG9lc24ndCBleGlzdCB0aGVuIGFuIGVtcHR5IHZhbHVlIGlzIHJldHVybmVkCisjCitkZWYgc2l0ZWluZm9fZGF0YShkKToKKyAgICBhcmNoaW5mbyA9IHsKKyAgICAgICAgImFsbGFyY2giOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIiLCAjIGJvZ3VzLCBidXQgYmV0dGVyIHRoYW4gc3BlY2lhbC1jYXNpbmcgdGhlIGNoZWNrcyBiZWxvdyBmb3IgYWxsYXJjaAorICAgICAgICAiYWFyY2g2NCI6ICJlbmRpYW4tbGl0dGxlIGJpdC02NCBhcm0tY29tbW9uIGFybS02NCIsCisgICAgICAgICJhYXJjaDY0X2JlIjogImVuZGlhbi1iaWcgYml0LTY0IGFybS1jb21tb24gYXJtLTY0IiwKKyAgICAgICAgImFybSI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBhcm0tY29tbW9uIGFybS0zMiIsCisgICAgICAgICJhcm1lYiI6ICJlbmRpYW4tYmlnIGJpdC0zMiBhcm0tY29tbW9uIGFybS0zMiIsCisgICAgICAgICJhdnIzMiI6ICJlbmRpYW4tYmlnIGJpdC0zMiBhdnIzMi1jb21tb24iLAorICAgICAgICAiYmZpbiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBiZmluLWNvbW1vbiIsCisgICAgICAgICJlcGlwaGFueSI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiIsCisgICAgICAgICJpMzg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImk0ODYiOiAiZW5kaWFuLWxpdHRsZSBiaXQtMzIgaXg4Ni1jb21tb24iLAorICAgICAgICAiaTU4NiI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJpNjg2IjogImVuZGlhbi1saXR0bGUgYml0LTMyIGl4ODYtY29tbW9uIiwKKyAgICAgICAgImlhNjQiOiAiZW5kaWFuLWxpdHRsZSBiaXQtNjQiLAorICAgICAgICAibWljcm9ibGF6ZSI6ICJlbmRpYW4tYmlnIGJpdC0zMiBtaWNyb2JsYXplLWNvbW1vbiIsCisgICAgICAgICJtaWNyb2JsYXplZWIiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWljcm9ibGF6ZS1jb21tb24iLAorICAgICAgICAibWljcm9ibGF6ZWVsIjogImVuZGlhbi1saXR0bGUgYml0LTMyIG1pY3JvYmxhemUtY29tbW9uIiwKKyAgICAgICAgIm1pcHMiOiAiZW5kaWFuLWJpZyBiaXQtMzIgbWlwcy1jb21tb24iLAorICAgICAgICAibWlwczY0IjogImVuZGlhbi1iaWcgYml0LTY0IG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHM2NGVsIjogImVuZGlhbi1saXR0bGUgYml0LTY0IG1pcHMtY29tbW9uIiwKKyAgICAgICAgIm1pcHNlbCI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBtaXBzLWNvbW1vbiIsCisgICAgICAgICJwb3dlcnBjIjogImVuZGlhbi1iaWcgYml0LTMyIHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgIm5pb3MyIjogImVuZGlhbi1saXR0bGUgYml0LTMyIG5pb3MyLWNvbW1vbiIsCisgICAgICAgICJwb3dlcnBjNjQiOiAiZW5kaWFuLWJpZyBiaXQtNjQgcG93ZXJwYy1jb21tb24iLAorICAgICAgICAicHBjIjogImVuZGlhbi1iaWcgYml0LTMyIHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInBwYzY0IjogImVuZGlhbi1iaWcgYml0LTY0IHBvd2VycGMtY29tbW9uIiwKKyAgICAgICAgInNoMyI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBzaC1jb21tb24iLAorICAgICAgICAic2g0IjogImVuZGlhbi1saXR0bGUgYml0LTMyIHNoLWNvbW1vbiIsCisgICAgICAgICJzcGFyYyI6ICJlbmRpYW4tYmlnIGJpdC0zMiIsCisgICAgICAgICJ2aWFjMyI6ICJlbmRpYW4tbGl0dGxlIGJpdC0zMiBpeDg2LWNvbW1vbiIsCisgICAgICAgICJ4ODZfNjQiOiAiZW5kaWFuLWxpdHRsZSIsICMgYml0aW5mbyBzcGVjaWZpZWQgaW4gdGFyZ2V0aW5mbworICAgIH0KKyAgICBvc2luZm8gPSB7CisgICAgICAgICJkYXJ3aW4iOiAiY29tbW9uLWRhcndpbiIsCisgICAgICAgICJkYXJ3aW45IjogImNvbW1vbi1kYXJ3aW4iLAorICAgICAgICAibGludXgiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnUiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnV4MzIiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnVuMzIiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1nbGliYyIsCisgICAgICAgICJsaW51eC1nbnVlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtZ251c3BlIjogImNvbW1vbi1saW51eCBjb21tb24tZ2xpYmMiLAorICAgICAgICAibGludXgtdWNsaWJjIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LXVjbGliY2VhYmkiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi11Y2xpYmMiLAorICAgICAgICAibGludXgtdWNsaWJjc3BlIjogImNvbW1vbi1saW51eCBjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImxpbnV4LW11c2wiOiAiY29tbW9uLWxpbnV4IGNvbW1vbi1tdXNsIiwKKyAgICAgICAgImxpbnV4LW11c2xlYWJpIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJsaW51eC1tdXNsc3BlIjogImNvbW1vbi1saW51eCBjb21tb24tbXVzbCIsCisgICAgICAgICJ1Y2xpbnV4LXVjbGliYyI6ICJjb21tb24tdWNsaWJjIiwKKyAgICAgICAgImN5Z3dpbiI6ICJjb21tb24tY3lnd2luIiwKKyAgICAgICAgIm1pbmd3MzIiOiAiY29tbW9uLW1pbmd3IiwKKyAgICB9CisgICAgdGFyZ2V0aW5mbyA9IHsKKyAgICAgICAgImFhcmNoNjQtbGludXgtZ251IjogImFhcmNoNjQtbGludXgiLAorICAgICAgICAiYWFyY2g2NF9iZS1saW51eC1nbnUiOiAiYWFyY2g2NF9iZS1saW51eCIsCisgICAgICAgICJhcm0tbGludXgtZ251ZWFiaSI6ICJhcm0tbGludXgiLAorICAgICAgICAiYXJtLWxpbnV4LW11c2xlYWJpIjogImFybS1saW51eCIsCisgICAgICAgICJhcm0tbGludXgtdWNsaWJjZWFiaSI6ICJhcm0tbGludXgtdWNsaWJjIiwKKyAgICAgICAgImFybWViLWxpbnV4LWdudWVhYmkiOiAiYXJtZWItbGludXgiLAorICAgICAgICAiYXJtZWItbGludXgtdWNsaWJjZWFiaSI6ICJhcm1lYi1saW51eC11Y2xpYmMiLAorICAgICAgICAiYXJtZWItbGludXgtbXVzbGVhYmkiOiAiYXJtZWItbGludXgiLAorICAgICAgICAibWlwcy1saW51eC1tdXNsIjogIm1pcHMtbGludXgiLAorICAgICAgICAibWlwc2VsLWxpbnV4LW11c2wiOiAibWlwc2VsLWxpbnV4IiwKKyAgICAgICAgIm1pcHM2NC1saW51eC1tdXNsIjogIm1pcHMtbGludXgiLAorICAgICAgICAibWlwczY0ZWwtbGludXgtbXVzbCI6ICJtaXBzZWwtbGludXgiLAorICAgICAgICAibWlwczY0LWxpbnV4LWdudW4zMiI6ICJtaXBzLWxpbnV4IGJpdC0zMiIsCisgICAgICAgICJtaXBzNjRlbC1saW51eC1nbnVuMzIiOiAibWlwc2VsLWxpbnV4IGJpdC0zMiIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4IjogInBvd2VycGMzMi1saW51eCIsCisgICAgICAgICJwb3dlcnBjLWxpbnV4LW11c2wiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC11Y2xpYmMiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1nbnVzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjMzItbGludXgiLAorICAgICAgICAicG93ZXJwYy1saW51eC1tdXNsc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IiwKKyAgICAgICAgInBvd2VycGMtbGludXgtdWNsaWJjc3BlIjogInBvd2VycGMtbGludXggcG93ZXJwYzMyLWxpbnV4IHBvd2VycGMtbGludXgtdWNsaWJjIiwKKyAgICAgICAgInBvd2VycGM2NC1saW51eC1nbnVzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjNjQtbGludXgiLAorICAgICAgICAicG93ZXJwYzY0LWxpbnV4LW11c2xzcGUiOiAicG93ZXJwYy1saW51eCBwb3dlcnBjNjQtbGludXgiLAorICAgICAgICAicG93ZXJwYzY0LWxpbnV4IjogInBvd2VycGMtbGludXgiLAorICAgICAgICAieDg2XzY0LWN5Z3dpbiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWRhcndpbiI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWRhcndpbjkiOiAiYml0LTY0IiwKKyAgICAgICAgIng4Nl82NC1saW51eCI6ICJiaXQtNjQiLAorICAgICAgICAieDg2XzY0LWxpbnV4LW11c2wiOiAieDg2XzY0LWxpbnV4IGJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgtdWNsaWJjIjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtZWxmIjogImJpdC02NCIsCisgICAgICAgICJ4ODZfNjQtbGludXgtZ251IjogImJpdC02NCB4ODZfNjQtbGludXgiLAorICAgICAgICAieDg2XzY0LWxpbnV4LWdudXgzMiI6ICJiaXQtMzIgaXg4Ni1jb21tb24geDMyLWxpbnV4IiwKKyAgICAgICAgIng4Nl82NC1taW5ndzMyIjogImJpdC02NCIsCisgICAgfQorCisgICAgaG9zdGFyY2ggPSBkLmdldFZhcigiSE9TVF9BUkNIIiwgVHJ1ZSkKKyAgICBob3N0b3MgPSBkLmdldFZhcigiSE9TVF9PUyIsIFRydWUpCisgICAgdGFyZ2V0ID0gIiVzLSVzIiAlIChob3N0YXJjaCwgaG9zdG9zKQorCisgICAgc2l0ZWRhdGEgPSBbXQorICAgIGlmIGhvc3RhcmNoIGluIGFyY2hpbmZvOgorICAgICAgICBzaXRlZGF0YS5leHRlbmQoYXJjaGluZm9baG9zdGFyY2hdLnNwbGl0KCkpCisgICAgaWYgaG9zdG9zIGluIG9zaW5mbzoKKyAgICAgICAgc2l0ZWRhdGEuZXh0ZW5kKG9zaW5mb1tob3N0b3NdLnNwbGl0KCkpCisgICAgaWYgdGFyZ2V0IGluIHRhcmdldGluZm86CisgICAgICAgIHNpdGVkYXRhLmV4dGVuZCh0YXJnZXRpbmZvW3RhcmdldF0uc3BsaXQoKSkKKyAgICBzaXRlZGF0YS5hcHBlbmQodGFyZ2V0KQorICAgIHNpdGVkYXRhLmFwcGVuZCgiY29tbW9uIikKKworICAgIGJiLmRlYnVnKDEsICJTSVRFIGZpbGVzICVzIiAlIHNpdGVkYXRhKTsKKyAgICByZXR1cm4gc2l0ZWRhdGEKKworcHl0aG9uICgpIHsKKyAgICBzaXRlZGF0YSA9IHNldChzaXRlaW5mb19kYXRhKGQpKQorICAgIGlmICJlbmRpYW4tbGl0dGxlIiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0VORElBTk5FU1MiLCAibGUiKQorICAgIGVsaWYgImVuZGlhbi1iaWciIGluIHNpdGVkYXRhOgorICAgICAgICBkLnNldFZhcigiU0lURUlORk9fRU5ESUFOTkVTUyIsICJiZSIpCisgICAgZWxzZToKKyAgICAgICAgYmIuZXJyb3IoIlVuYWJsZSB0byBkZXRlcm1pbmUgZW5kaWFubmVzcyBmb3IgYXJjaGl0ZWN0dXJlICclcyciICUKKyAgICAgICAgICAgICAgICAgZC5nZXRWYXIoIkhPU1RfQVJDSCIsIFRydWUpKQorICAgICAgICBiYi5mYXRhbCgiUGxlYXNlIGFkZCB5b3VyIGFyY2hpdGVjdHVyZSB0byBzaXRlaW5mby5iYmNsYXNzIikKKworICAgIGlmICJiaXQtMzIiIGluIHNpdGVkYXRhOgorICAgICAgICBkLnNldFZhcigiU0lURUlORk9fQklUUyIsICIzMiIpCisgICAgZWxpZiAiYml0LTY0IiBpbiBzaXRlZGF0YToKKyAgICAgICAgZC5zZXRWYXIoIlNJVEVJTkZPX0JJVFMiLCAiNjQiKQorICAgIGVsc2U6CisgICAgICAgIGJiLmVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIGJpdCBzaXplIGZvciBhcmNoaXRlY3R1cmUgJyVzJyIgJQorICAgICAgICAgICAgICAgICBkLmdldFZhcigiSE9TVF9BUkNIIiwgVHJ1ZSkpCisgICAgICAgIGJiLmZhdGFsKCJQbGVhc2UgYWRkIHlvdXIgYXJjaGl0ZWN0dXJlIHRvIHNpdGVpbmZvLmJiY2xhc3MiKQorfQorCitkZWYgc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIG5vX2NhY2hlID0gRmFsc2UpOgorICAgIHNpdGVkYXRhID0gc2l0ZWluZm9fZGF0YShkKQorICAgIHNpdGVmaWxlcyA9ICIiCisgICAgZm9yIHBhdGggaW4gZC5nZXRWYXIoIkJCUEFUSCIsIFRydWUpLnNwbGl0KCI6Iik6CisgICAgICAgIGZvciBlbGVtZW50IGluIHNpdGVkYXRhOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgInNpdGUiLCBlbGVtZW50KQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgorICAgICAgICAgICAgICAgIHNpdGVmaWxlcyArPSBmaWxlbmFtZSArICIgIgorCisgICAgaWYgbm9fY2FjaGU6IHJldHVybiBzaXRlZmlsZXMKKworICAgICMgTm93IGNoZWNrIGZvciBzaXRlY29uZmlnIGNhY2hlIGZpbGVzCisgICAgIyBVc2UgdGhlIGZpbGVzIGNvcGllZCB0byB0aGUgYWNsb2NhbCBjYWNoZSBnZW5lcmF0ZWQgYnkgYXV0b3Rvb2xzLmJiY2xhc3MKKyAgICAjIHRvIGF2b2lkIHJhY2VzCisgICAgcGF0aF9zaXRlY29uZmlnID0gZC5nZXRWYXIoJ0FDTE9DQUxESVInLCBUcnVlKQorICAgIGlmIHBhdGhfc2l0ZWNvbmZpZyBhbmQgb3MucGF0aC5pc2RpcihwYXRoX3NpdGVjb25maWcpOgorICAgICAgICBmb3IgaSBpbiBvcy5saXN0ZGlyKHBhdGhfc2l0ZWNvbmZpZyk6CisgICAgICAgICAgICBpZiBub3QgaS5lbmRzd2l0aCgiX2NvbmZpZyIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoX3NpdGVjb25maWcsIGkpCisgICAgICAgICAgICBzaXRlZmlsZXMgKz0gZmlsZW5hbWUgKyAiICIKKworICAgIHJldHVybiBzaXRlZmlsZXMKKworIworIyBNYWtlIHNvbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHZpYSB2YXJpYWJsZXMKKyMKK1NJVEVDT05GSUdfU1lTUk9PVENBQ0hFID0gIiR7U1RBR0lOR19EQVRBRElSfS8ke1RBUkdFVF9TWVN9X2NvbmZpZ19zaXRlLmQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc3BkeC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTRjNTNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3NwZHguYmJjbGFzcwpAQCAtMCwwICsxLDM2NSBAQAorIyBUaGlzIGNsYXNzIGludGVncmF0ZXMgcmVhbC10aW1lIGxpY2Vuc2Ugc2Nhbm5pbmcsIGdlbmVyYXRpb24gb2YgU1BEWCBzdGFuZGFyZAorIyBvdXRwdXQgYW5kIHZlcmlmaXlpbmcgbGljZW5zZSBpbmZvIGR1cmluZyB0aGUgYnVpbGRpbmcgcHJvY2Vzcy4KKyMgSXQgaXMgYSBjb21iaW5hdGlvbiBvZiBlZmZvcnRzIGZyb20gdGhlIE9FLUNvcmUsIFNQRFggYW5kIEZvc3NvbG9neSBwcm9qZWN0cy4KKyMKKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gRk9TU29sb2d5OgorIyAgIGh0dHA6Ly93d3cuZm9zc29sb2d5Lm9yZworIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBGT1NTb2xvZ3lTUERYIGNvbW1hbmRsaW5lOgorIyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGR4LXRvb2xzL2Zvc3NvbG9neS1zcGR4L3dpa2kvRm9zc29sb2d5LVNQRFgtV2ViLUFQSQorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBTUERYOgorIyAgIGh0dHA6Ly93d3cuc3BkeC5vcmcKKyMKKworIyBTUERYIGZpbGUgd2lsbCBiZSBvdXRwdXQgdG8gdGhlIHBhdGggd2hpY2ggaXMgZGVmaW5lZCBhc1tTUERYX01BTklGRVNUX0RJUl0gCisjIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYuCisKK1NQRFhTU1RBVEVESVIgPSAiJHtXT1JLRElSfS9zcGR4X3NzdGF0ZV9kaXIiCisKKyMgSWYgJHtTfSBpc24ndCBhY3R1YWxseSB0aGUgdG9wLWxldmVsIHNvdXJjZSBkaXJlY3RvcnksIHNldCBTUERYX1MgdG8gcG9pbnQgYXQKKyMgdGhlIHJlYWwgdG9wLWxldmVsIGRpcmVjdG9yeS4KK1NQRFhfUyA/PSAiJHtTfSIKKworcHl0aG9uIGRvX3NwZHggKCkgeworICAgIGltcG9ydCBvcywgc3lzCisgICAgaW1wb3J0IGpzb24sIHNodXRpbAorCisgICAgaW5mbyA9IHt9IAorICAgIGluZm9bJ3dvcmtkaXInXSA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpbmZvWydzb3VyY2VkaXInXSA9IGQuZ2V0VmFyKCdTUERYX1MnLCBUcnVlKQorICAgIGluZm9bJ3BuJ10gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIGluZm9bJ3B2J10gPSBkLmdldFZhcignUFYnLCBUcnVlKQorICAgIGluZm9bJ3NwZHhfdmVyc2lvbiddID0gZC5nZXRWYXIoJ1NQRFhfVkVSU0lPTicsIFRydWUpCisgICAgaW5mb1snZGF0YV9saWNlbnNlJ10gPSBkLmdldFZhcignREFUQV9MSUNFTlNFJywgVHJ1ZSkKKworICAgIHNzdGF0ZWRpciA9IGQuZ2V0VmFyKCdTUERYU1NUQVRFRElSJywgVHJ1ZSkKKyAgICBzc3RhdGVmaWxlID0gb3MucGF0aC5qb2luKHNzdGF0ZWRpciwgaW5mb1sncG4nXSArIGluZm9bJ3B2J10gKyAiLnNwZHgiKQorCisgICAgbWFuaWZlc3RfZGlyID0gZC5nZXRWYXIoJ1NQRFhfTUFOSUZFU1RfRElSJywgVHJ1ZSkKKyAgICBpbmZvWydvdXRmaWxlJ10gPSBvcy5wYXRoLmpvaW4obWFuaWZlc3RfZGlyLCBpbmZvWydwbiddICsgIi5zcGR4IiApCisKKyAgICBpbmZvWydzcGR4X3RlbXBfZGlyJ10gPSBkLmdldFZhcignU1BEWF9URU1QX0RJUicsIFRydWUpCisgICAgaW5mb1sndGFyX2ZpbGUnXSA9IG9zLnBhdGguam9pbihpbmZvWyd3b3JrZGlyJ10sIGluZm9bJ3BuJ10gKyAiLnRhci5neiIgKQorCisgICAgIyBNYWtlIHN1cmUgaW1wb3J0YW50IGRpcnMgZXhpc3QKKyAgICB0cnk6CisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihtYW5pZmVzdF9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzc3RhdGVkaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihpbmZvWydzcGR4X3RlbXBfZGlyJ10pCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoIlNQRFg6IENvdWxkIG5vdCBzZXQgdXAgcmVxdWlyZWQgZGlyZWN0b3JpZXM6ICIgKyBzdHIoZSkpCisgICAgICAgIHJldHVybgorCisgICAgIyMgZ2V0IGV2ZXJ5dGhpbmcgZnJvbSBjYWNoZS4gIHVzZSBpdCB0byBkZWNpZGUgaWYgCisgICAgIyMgc29tZXRoaW5nIG5lZWRzIHRvIGJlIHJlcnVuIAorICAgIGN1cl92ZXJfY29kZSA9IGdldF92ZXJfY29kZShpbmZvWydzb3VyY2VkaXInXSkKKyAgICBjYWNoZV9jdXIgPSBGYWxzZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKHNzdGF0ZWZpbGUpOgorICAgICAgICAjIyBjYWNoZSBmb3IgdGhpcyBwYWNrYWdlIGV4aXN0cy4gcmVhZCBpdCBpbgorICAgICAgICBjYWNoZWRfc3BkeCA9IGdldF9jYWNoZWRfc3BkeChzc3RhdGVmaWxlKQorCisgICAgICAgIGlmIGNhY2hlZF9zcGR4WydQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZSddID09IGN1cl92ZXJfY29kZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IFZlcmlmaWNhdGlvbiBjb2RlIGZvciAiICsgaW5mb1sncG4nXQorICAgICAgICAgICAgICAgICAgKyAiaXMgc2FtZSBhcyBjYWNoZSdzLiBkbyBub3RoaW5nIikKKyAgICAgICAgICAgIGNhY2hlX2N1ciA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvY2FsX2ZpbGVfaW5mbyA9IHNldHVwX2Zvc3Nfc2NhbihpbmZvLCBUcnVlLCBjYWNoZWRfc3BkeFsnRmlsZXMnXSkKKyAgICBlbHNlOgorICAgICAgICBsb2NhbF9maWxlX2luZm8gPSBzZXR1cF9mb3NzX3NjYW4oaW5mbywgRmFsc2UsIE5vbmUpCisKKyAgICBpZiBjYWNoZV9jdXI6CisgICAgICAgIHNwZHhfZmlsZV9pbmZvID0gY2FjaGVkX3NwZHhbJ0ZpbGVzJ10KKyAgICAgICAgZm9zc19wYWNrYWdlX2luZm8gPSBjYWNoZWRfc3BkeFsnUGFja2FnZSddCisgICAgICAgIGZvc3NfbGljZW5zZV9pbmZvID0gY2FjaGVkX3NwZHhbJ0xpY2Vuc2VzJ10KKyAgICBlbHNlOgorICAgICAgICAjIyBzZXR1cCBmb3Nzb2xvZ3kgY29tbWFuZAorICAgICAgICBmb3NzX3NlcnZlciA9IGQuZ2V0VmFyKCdGT1NTX1NFUlZFUicsIFRydWUpCisgICAgICAgIGZvc3NfZmxhZ3MgPSBkLmdldFZhcignRk9TU19XR0VUX0ZMQUdTJywgVHJ1ZSkKKyAgICAgICAgZm9zc19mdWxsX3NwZHggPSBkLmdldFZhcignRk9TU19GVUxMX1NQRFgnLCBUcnVlKSA9PSAidHJ1ZSIgb3IgRmFsc2UKKyAgICAgICAgZm9zc19jb21tYW5kID0gIndnZXQgJXMgLS1wb3N0LWZpbGU9JXMgJXMiXAorICAgICAgICAgICAgJSAoZm9zc19mbGFncywgaW5mb1sndGFyX2ZpbGUnXSwgZm9zc19zZXJ2ZXIpCisgICAgICAgIAorICAgICAgICBmb3NzX3Jlc3VsdCA9IHJ1bl9mb3Nzb2xvZ3koZm9zc19jb21tYW5kLCBmb3NzX2Z1bGxfc3BkeCkKKyAgICAgICAgaWYgZm9zc19yZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAoZm9zc19wYWNrYWdlX2luZm8sIGZvc3NfZmlsZV9pbmZvLCBmb3NzX2xpY2Vuc2VfaW5mbykgPSBmb3NzX3Jlc3VsdAorICAgICAgICAgICAgc3BkeF9maWxlX2luZm8gPSBjcmVhdGVfc3BkeF9kb2MobG9jYWxfZmlsZV9pbmZvLCBmb3NzX2ZpbGVfaW5mbykKKyAgICAgICAgICAgICMjIHdyaXRlIHRvIGNhY2hlCisgICAgICAgICAgICB3cml0ZV9jYWNoZWRfc3BkeChzc3RhdGVmaWxlLCBjdXJfdmVyX2NvZGUsIGZvc3NfcGFja2FnZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BkeF9maWxlX2luZm8sIGZvc3NfbGljZW5zZV9pbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoIlNQRFg6IENvdWxkIG5vdCBjb21tdW5pY2F0ZSB3aXRoIEZPU1NvbG9neSBzZXJ2ZXIuIENvbW1hbmQgd2FzOiAiICsgZm9zc19jb21tYW5kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgCisgICAgIyMgR2V0IGRvY3VtZW50IGFuZCBwYWNrYWdlIGxldmVsIGluZm9ybWF0aW9uCisgICAgc3BkeF9oZWFkZXJfaW5mbyA9IGdldF9oZWFkZXJfaW5mbyhpbmZvLCBjdXJfdmVyX2NvZGUsIGZvc3NfcGFja2FnZV9pbmZvKQorICAgIAorICAgICMjIENSRUFURSBNQU5JRkVTVAorICAgIGNyZWF0ZV9tYW5pZmVzdChpbmZvLCBzcGR4X2hlYWRlcl9pbmZvLCBzcGR4X2ZpbGVfaW5mbywgZm9zc19saWNlbnNlX2luZm8pCisKKyAgICAjIyBjbGVhbiB1cCB0aGUgdGVtcCBzdHVmZgorICAgIHNodXRpbC5ybXRyZWUoaW5mb1snc3BkeF90ZW1wX2RpciddLCBpZ25vcmVfZXJyb3JzPVRydWUpCisgICAgaWYgb3MucGF0aC5leGlzdHMoaW5mb1sndGFyX2ZpbGUnXSk6CisgICAgICAgIHJlbW92ZV9maWxlKGluZm9bJ3Rhcl9maWxlJ10pCit9CithZGR0YXNrIHNwZHggYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCitkZWYgY3JlYXRlX21hbmlmZXN0KGluZm8sIGhlYWRlciwgZmlsZXMsIGxpY2Vuc2VzKToKKyAgICBpbXBvcnQgY29kZWNzCisgICAgd2l0aCBjb2RlY3Mub3BlbihpbmZvWydvdXRmaWxlJ10sIG1vZGU9J3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICAjIFdyaXRlIGhlYWRlcgorICAgICAgICBmLndyaXRlKGhlYWRlciArICdcbicpCisKKyAgICAgICAgIyBXcml0ZSBmaWxlIGRhdGEKKyAgICAgICAgZm9yIGNoa3N1bSwgYmxvY2sgaW4gZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmLndyaXRlKCJGaWxlTmFtZTogIiArIGJsb2NrWydGaWxlTmFtZSddICsgJ1xuJykKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGJsb2NrLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBrZXkgPT0gJ0ZpbGVOYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShrZXkgKyAiOiAiICsgdmFsdWUgKyAnXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnXG4nKQorCisgICAgICAgICMgV3JpdGUgbGljZW5zZSBkYXRhCisgICAgICAgIGZvciBpZCwgYmxvY2sgaW4gbGljZW5zZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmLndyaXRlKCJMaWNlbnNlSUQ6ICIgKyBpZCArICdcbicpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBibG9jay5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgICAgICBmLndyaXRlKGtleSArICI6ICIgKyB2YWx1ZSArICdcbicpCisgICAgICAgICAgICBmLndyaXRlKCdcbicpCisKK2RlZiBnZXRfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSk6CisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgY29kZWNzCisgICAgY2FjaGVkX3NwZHhfaW5mbyA9IHt9CisgICAgd2l0aCBjb2RlY3Mub3Blbihzc3RhdGVmaWxlLCBtb2RlPSdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FjaGVkX3NwZHhfaW5mbyA9IGpzb24ubG9hZChmKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgY2FjaGVkX3NwZHhfaW5mbyA9IE5vbmUKKyAgICByZXR1cm4gY2FjaGVkX3NwZHhfaW5mbworCitkZWYgd3JpdGVfY2FjaGVkX3NwZHgoc3N0YXRlZmlsZSwgdmVyX2NvZGUsIHBhY2thZ2VfaW5mbywgZmlsZXMsIGxpY2Vuc2VfaW5mbyk6CisgICAgaW1wb3J0IGpzb24KKyAgICBpbXBvcnQgY29kZWNzCisgICAgc3BkeF9kb2MgPSB7fQorICAgIHNwZHhfZG9jWydQYWNrYWdlVmVyaWZpY2F0aW9uQ29kZSddID0gdmVyX2NvZGUKKyAgICBzcGR4X2RvY1snRmlsZXMnXSA9IHt9CisgICAgc3BkeF9kb2NbJ0ZpbGVzJ10gPSBmaWxlcworICAgIHNwZHhfZG9jWydQYWNrYWdlJ10gPSB7fQorICAgIHNwZHhfZG9jWydQYWNrYWdlJ10gPSBwYWNrYWdlX2luZm8KKyAgICBzcGR4X2RvY1snTGljZW5zZXMnXSA9IHt9CisgICAgc3BkeF9kb2NbJ0xpY2Vuc2VzJ10gPSBsaWNlbnNlX2luZm8KKyAgICB3aXRoIGNvZGVjcy5vcGVuKHNzdGF0ZWZpbGUsIG1vZGU9J3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGpzb24uZHVtcHMoc3BkeF9kb2MpKQorCitkZWYgc2V0dXBfZm9zc19zY2FuKGluZm8sIGNhY2hlLCBjYWNoZWRfZmlsZXMpOgorICAgIGltcG9ydCBlcnJubywgc2h1dGlsCisgICAgaW1wb3J0IHRhcmZpbGUKKyAgICBmaWxlX2luZm8gPSB7fQorICAgIGNhY2hlX2RpY3QgPSB7fQorCisgICAgZm9yIGZfZGlyLCBmIGluIGxpc3RfZmlsZXMoaW5mb1snc291cmNlZGlyJ10pOgorICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oZl9kaXIsIGYpCisgICAgICAgIGFic19wYXRoID0gb3MucGF0aC5qb2luKGluZm9bJ3NvdXJjZWRpciddLCBmdWxsX3BhdGgpCisgICAgICAgIGRlc3RfZGlyID0gb3MucGF0aC5qb2luKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgZl9kaXIpCisgICAgICAgIGRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihpbmZvWydzcGR4X3RlbXBfZGlyJ10sIGZ1bGxfcGF0aCkKKworICAgICAgICBjaGVja3N1bSA9IGhhc2hfZmlsZShhYnNfcGF0aCkKKyAgICAgICAgaWYgbm90IGNoZWNrc3VtIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlX2luZm9bY2hlY2tzdW1dID0ge30KKyAgICAgICAgICAgICMjIHJldGFpbiBjYWNoZSBpbmZvcm1hdGlvbiBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIGlmIGNhY2hlIGFuZCBjaGVja3N1bSBpbiBjYWNoZWRfZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXSA9IGNhY2hlZF9maWxlc1tjaGVja3N1bV0KKyAgICAgICAgICAgICMjIGhhdmUgdGhlIGZpbGUgaW5jbHVkZWQgaW4gd2hhdCdzIHNlbnQgdG8gdGhlIEZPU1NvbG9neSBzZXJ2ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZV9pbmZvW2NoZWNrc3VtXVsnRmlsZU5hbWUnXSA9IGZ1bGxfcGF0aAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRlc3RfZGlyKQorICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoYWJzX3BhdGgsIGRlc3RfcGF0aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBta2RpcmhpZXIgZmFpbGVkOiAiICsgc3RyKGUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzaHV0aWwuRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU1BEWDogY29weWZpbGUgZmFpbGVkOiAiICsgc3RyKGUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IGNvcHlmaWxlIGZhaWxlZDogIiArIHN0cihlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6IENvdWxkIG5vdCBnZXQgY2hlY2tzdW0gZm9yIGZpbGU6ICIgKyBmKQorICAgIAorICAgIHdpdGggdGFyZmlsZS5vcGVuKGluZm9bJ3Rhcl9maWxlJ10sICJ3Omd6IikgYXMgdGFyOgorICAgICAgICB0YXIuYWRkKGluZm9bJ3NwZHhfdGVtcF9kaXInXSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKGluZm9bJ3NwZHhfdGVtcF9kaXInXSkpCisgICAgCisgICAgcmV0dXJuIGZpbGVfaW5mbworCitkZWYgcmVtb3ZlX2ZpbGUoZmlsZV9uYW1lKToKKyAgICB0cnk6CisgICAgICAgIG9zLnJlbW92ZShmaWxlX25hbWUpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgcGFzcworCitkZWYgbGlzdF9maWxlcyhkaXIpOgorICAgIGZvciByb290LCBzdWJGb2xkZXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpcik6CisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgcmVsX3Jvb3QgPSBvcy5wYXRoLnJlbHBhdGgocm9vdCwgZGlyKQorICAgICAgICAgICAgeWllbGQgcmVsX3Jvb3QsIGYKKyAgICByZXR1cm4KKworZGVmIGhhc2hfZmlsZShmaWxlX25hbWUpOgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVfbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGFfc3RyaW5nID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNoYTEgPSBoYXNoX3N0cmluZyhkYXRhX3N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBzaGExCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgaGFzaF9zdHJpbmcoZGF0YSk6CisgICAgaW1wb3J0IGhhc2hsaWIKKyAgICBzaGExID0gaGFzaGxpYi5zaGExKCkKKyAgICBzaGExLnVwZGF0ZShkYXRhKQorICAgIHJldHVybiBzaGExLmhleGRpZ2VzdCgpCisKK2RlZiBydW5fZm9zc29sb2d5KGZvc3NfY29tbWFuZCwgZnVsbF9zcGR4KToKKyAgICBpbXBvcnQgc3RyaW5nLCByZQorICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oZm9zc19jb21tYW5kLnNwbGl0KCksCisgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgZm9zc19vdXRwdXQsIGZvc3NfZXJyb3IgPSBwLmNvbW11bmljYXRlKCkKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGZvc3Nfb3V0cHV0ID0gdW5pY29kZShmb3NzX291dHB1dCwgInV0Zi04IikKKyAgICBmb3NzX291dHB1dCA9IHN0cmluZy5yZXBsYWNlKGZvc3Nfb3V0cHV0LCAnXHInLCAnJykKKworICAgICMgUGFja2FnZSBpbmZvCisgICAgcGFja2FnZV9pbmZvID0ge30KKyAgICBpZiBmdWxsX3NwZHg6CisgICAgICAgICMgQWxsIG1hbmRhdG9yeSwgb25seSBvbmUgb2NjdXJhbmNlCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUNvcHlyaWdodFRleHQnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VDb3B5cmlnaHRUZXh0OiAoLio/PC90ZXh0PiknLCBmb3NzX291dHB1dCwgcmUuUylbMF0KKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZURlY2xhcmVkJ10gPSByZS5maW5kYWxsKCdQYWNrYWdlTGljZW5zZURlY2xhcmVkOiAoLiopJywgZm9zc19vdXRwdXQpWzBdCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkOiAoLiopJywgZm9zc19vdXRwdXQpWzBdCisgICAgICAgICMgVGhlc2UgbWF5IGJlIG1vcmUgdGhhbiBvbmUKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXMnXSA9IHJlLmZpbmRhbGwoJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlczogKC4qKScsIGZvc3Nfb3V0cHV0KQorICAgIGVsc2U6CisgICAgICAgIERFRkFVTFQgPSAiTk9BU1NFUlRJT04iCisgICAgICAgIHBhY2thZ2VfaW5mb1snUGFja2FnZUNvcHlyaWdodFRleHQnXSA9ICI8dGV4dD4iICsgREVGQVVMVCArICI8L3RleHQ+IgorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlRGVjbGFyZWQnXSA9IERFRkFVTFQKKyAgICAgICAgcGFja2FnZV9pbmZvWydQYWNrYWdlTGljZW5zZUNvbmNsdWRlZCddID0gREVGQVVMVAorICAgICAgICBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlSW5mb0Zyb21GaWxlcyddID0gW10KKworICAgICMgRmlsZSBpbmZvCisgICAgZmlsZV9pbmZvID0ge30KKyAgICByZWNvcmRzID0gW10KKyAgICAjIEZpbGVOYW1lIGlzIGFsc28gaW4gUGFja2FnZUZpbGVOYW1lLCBzbyB3ZSBtYXRjaCBvbiBGaWxlVHlwZSBhcyB3ZWxsLgorICAgIHJlY29yZHMgPSByZS5maW5kYWxsKCdGaWxlTmFtZTouKj9GaWxlVHlwZTouKj88L3RleHQ+JywgZm9zc19vdXRwdXQsIHJlLlMpCisgICAgZm9yIHJlYyBpbiByZWNvcmRzOgorICAgICAgICBjaGtzdW0gPSByZS5maW5kYWxsKCdGaWxlQ2hlY2tzdW06IFNIQTE6ICguKilcbicsIHJlYylbMF0KKyAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV0gPSB7fQorICAgICAgICBmaWxlX2luZm9bY2hrc3VtXVsnRmlsZUNvcHlyaWdodFRleHQnXSA9IHJlLmZpbmRhbGwoJ0ZpbGVDb3B5cmlnaHRUZXh0OiAnCisgICAgICAgICAgICArICcoLio/PC90ZXh0PiknLCByZWMsIHJlLlMgKVswXQorICAgICAgICBmaWVsZHMgPSBbJ0ZpbGVOYW1lJywgJ0ZpbGVUeXBlJywgJ0xpY2Vuc2VDb25jbHVkZWQnLCAnTGljZW5zZUluZm9JbkZpbGUnXQorICAgICAgICBmb3IgZmllbGQgaW4gZmllbGRzOgorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bZmllbGRdID0gcmUuZmluZGFsbChmaWVsZCArICc6ICguKiknLCByZWMpWzBdCisKKyAgICAjIExpY2Vuc2VzCisgICAgbGljZW5zZV9pbmZvID0ge30KKyAgICBsaWNlbnNlcyA9IFtdCisgICAgbGljZW5zZXMgPSByZS5maW5kYWxsKCdMaWNlbnNlSUQ6Lio/TGljZW5zZU5hbWU6Lio/XG4nLCBmb3NzX291dHB1dCwgcmUuUykKKyAgICBmb3IgbGljIGluIGxpY2Vuc2VzOgorICAgICAgICBsaWNlbnNlX2lkID0gcmUuZmluZGFsbCgnTGljZW5zZUlEOiAoLiopXG4nLCBsaWMpWzBdCisgICAgICAgIGxpY2Vuc2VfaW5mb1tsaWNlbnNlX2lkXSA9IHt9CisgICAgICAgIGxpY2Vuc2VfaW5mb1tsaWNlbnNlX2lkXVsnRXh0cmFjdGVkVGV4dCddID0gcmUuZmluZGFsbCgnRXh0cmFjdGVkVGV4dDogKC4qPzwvdGV4dD4pJywgbGljLCByZS5TKVswXQorICAgICAgICBsaWNlbnNlX2luZm9bbGljZW5zZV9pZF1bJ0xpY2Vuc2VOYW1lJ10gPSByZS5maW5kYWxsKCdMaWNlbnNlTmFtZTogKC4qKScsIGxpYylbMF0KKworICAgIHJldHVybiAocGFja2FnZV9pbmZvLCBmaWxlX2luZm8sIGxpY2Vuc2VfaW5mbykKKworZGVmIGNyZWF0ZV9zcGR4X2RvYyhmaWxlX2luZm8sIHNjYW5uZWRfZmlsZXMpOgorICAgIGltcG9ydCBqc29uCisgICAgIyMgcHVzaCBmb3NzIGNoYW5nZXMgYmFjayBpbnRvIGNhY2hlCisgICAgZm9yIGNoa3N1bSwgbGljX2luZm8gaW4gc2Nhbm5lZF9maWxlcy5pdGVyaXRlbXMoKToKKyAgICAgICAgaWYgY2hrc3VtIGluIGZpbGVfaW5mbzoKKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlVHlwZSddID0gbGljX2luZm9bJ0ZpbGVUeXBlJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlQ2hlY2tzdW06IFNIQTEnXSA9IGNoa3N1bQorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0xpY2Vuc2VJbmZvSW5GaWxlJ10gPSBsaWNfaW5mb1snTGljZW5zZUluZm9JbkZpbGUnXQorICAgICAgICAgICAgZmlsZV9pbmZvW2Noa3N1bV1bJ0xpY2Vuc2VDb25jbHVkZWQnXSA9IGxpY19pbmZvWydMaWNlbnNlQ29uY2x1ZGVkJ10KKyAgICAgICAgICAgIGZpbGVfaW5mb1tjaGtzdW1dWydGaWxlQ29weXJpZ2h0VGV4dCddID0gbGljX2luZm9bJ0ZpbGVDb3B5cmlnaHRUZXh0J10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLndhcm4oIlNQRFg6ICIgKyBsaWNfaW5mb1snRmlsZU5hbWUnXSArICIgOiAiICsgY2hrc3VtCisgICAgICAgICAgICAgICAgKyAiIDogaXMgbm90IGluIHRoZSBsb2NhbCBmaWxlIGluZm86ICIKKyAgICAgICAgICAgICAgICArIGpzb24uZHVtcHMobGljX2luZm8sIGluZGVudD0xKSkKKyAgICByZXR1cm4gZmlsZV9pbmZvCisKK2RlZiBnZXRfdmVyX2NvZGUoZGlybmFtZSk6CisgICAgY2hrc3VtcyA9IFtdCisgICAgZm9yIGZfZGlyLCBmIGluIGxpc3RfZmlsZXMoZGlybmFtZSk6CisgICAgICAgIGhhc2ggPSBoYXNoX2ZpbGUob3MucGF0aC5qb2luKGRpcm5hbWUsIGZfZGlyLCBmKSkKKyAgICAgICAgaWYgbm90IGhhc2ggaXMgTm9uZToKKyAgICAgICAgICAgIGNoa3N1bXMuYXBwZW5kKGhhc2gpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi53YXJuKCJTUERYOiBDb3VsZCBub3QgaGFzaCBmaWxlOiAiICsgcGF0aCkKKyAgICB2ZXJfY29kZV9zdHJpbmcgPSAnJy5qb2luKGNoa3N1bXMpLmxvd2VyKCkKKyAgICB2ZXJfY29kZSA9IGhhc2hfc3RyaW5nKHZlcl9jb2RlX3N0cmluZykKKyAgICByZXR1cm4gdmVyX2NvZGUKKworZGVmIGdldF9oZWFkZXJfaW5mbyhpbmZvLCBzcGR4X3ZlcmlmaWNhdGlvbl9jb2RlLCBwYWNrYWdlX2luZm8pOgorICAgICIiIgorICAgICAgICBQdXQgdG9nZXRoZXIgdGhlIGhlYWRlciBTUERYIGluZm9ybWF0aW9uLgorICAgICAgICBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmVjb21lIGEgbG90IGxlc3MKKyAgICAgICAgb2YgYSBoYXJkY29kZWQgdGhpbmcuCisgICAgIiIiCisgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKKyAgICBpbXBvcnQgb3MKKyAgICBoZWFkID0gW10KKyAgICBERUZBVUxUID0gIk5PQVNTRVJUSU9OIgorCisgICAgcGFja2FnZV9jaGVja3N1bSA9IGhhc2hfZmlsZShpbmZvWyd0YXJfZmlsZSddKQorICAgIGlmIHBhY2thZ2VfY2hlY2tzdW0gaXMgTm9uZToKKyAgICAgICAgcGFja2FnZV9jaGVja3N1bSA9IERFRkFVTFQKKworICAgICMjIGRvY3VtZW50IGxldmVsIGluZm9ybWF0aW9uCisgICAgaGVhZC5hcHBlbmQoIiMjIFNQRFggRG9jdW1lbnQgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCJTUERYVmVyc2lvbjogIiArIGluZm9bJ3NwZHhfdmVyc2lvbiddKQorICAgIGhlYWQuYXBwZW5kKCJEYXRhTGljZW5zZTogIiArIGluZm9bJ2RhdGFfbGljZW5zZSddKQorICAgIGhlYWQuYXBwZW5kKCJEb2N1bWVudENvbW1lbnQ6IDx0ZXh0PlNQRFggZm9yICIKKyAgICAgICAgKyBpbmZvWydwbiddICsgIiB2ZXJzaW9uICIgKyBpbmZvWydwdiddICsgIjwvdGV4dD4iKQorICAgIGhlYWQuYXBwZW5kKCIiKQorCisgICAgIyMgQ3JlYXRvciBpbmZvcm1hdGlvbgorICAgICMjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGdpdmUgdGltZSBpbiBVVEMuCisgICAgbm93ID0gZGF0ZXRpbWUubm93KCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpCisgICAgaGVhZC5hcHBlbmQoIiMjIENyZWF0aW9uIEluZm9ybWF0aW9uIikKKyAgICAjIyBUb29scyBhcmUgc3VwcG9zZWQgdG8gaGF2ZSBhIHZlcnNpb24sIGJ1dCBGT1NTb2xvZ3krU1BEWCBwcm92aWRlcyBub25lLgorICAgIGhlYWQuYXBwZW5kKCJDcmVhdG9yOiBUb29sOiBGT1NTb2xvZ3krU1BEWCIpCisgICAgaGVhZC5hcHBlbmQoIkNyZWF0ZWQ6ICIgKyBub3cpCisgICAgaGVhZC5hcHBlbmQoIkNyZWF0b3JDb21tZW50OiA8dGV4dD5VTk88L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKworICAgICMjIHBhY2thZ2UgbGV2ZWwgaW5mb3JtYXRpb24KKyAgICBoZWFkLmFwcGVuZCgiIyMgUGFja2FnZSBJbmZvcm1hdGlvbiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VOYW1lOiAiICsgaW5mb1sncG4nXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZVZlcnNpb246ICIgKyBpbmZvWydwdiddKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlRmlsZU5hbWU6ICIgKyBvcy5wYXRoLmJhc2VuYW1lKGluZm9bJ3Rhcl9maWxlJ10pKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlU3VwcGxpZXI6IFBlcnNvbjoiICsgREVGQVVMVCkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZURvd25sb2FkTG9jYXRpb246ICIgKyBERUZBVUxUKQorICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlU3VtbWFyeTogPHRleHQ+PC90ZXh0PiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VPcmlnaW5hdG9yOiBQZXJzb246IiArIERFRkFVTFQpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VDaGVja3N1bTogU0hBMTogIiArIHBhY2thZ2VfY2hlY2tzdW0pCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VWZXJpZmljYXRpb25Db2RlOiAiICsgc3BkeF92ZXJpZmljYXRpb25fY29kZSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZURlc2NyaXB0aW9uOiA8dGV4dD4iICsgaW5mb1sncG4nXQorICAgICAgICArICIgdmVyc2lvbiAiICsgaW5mb1sncHYnXSArICI8L3RleHQ+IikKKyAgICBoZWFkLmFwcGVuZCgiIikKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUNvcHlyaWdodFRleHQ6ICIKKyAgICAgICAgKyBwYWNrYWdlX2luZm9bJ1BhY2thZ2VDb3B5cmlnaHRUZXh0J10pCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgaGVhZC5hcHBlbmQoIlBhY2thZ2VMaWNlbnNlRGVjbGFyZWQ6ICIKKyAgICAgICAgKyBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlRGVjbGFyZWQnXSkKKyAgICBoZWFkLmFwcGVuZCgiUGFja2FnZUxpY2Vuc2VDb25jbHVkZWQ6ICIKKyAgICAgICAgKyBwYWNrYWdlX2luZm9bJ1BhY2thZ2VMaWNlbnNlQ29uY2x1ZGVkJ10pCisKKyAgICBmb3IgbGljcmVmIGluIHBhY2thZ2VfaW5mb1snUGFja2FnZUxpY2Vuc2VJbmZvRnJvbUZpbGVzJ106CisgICAgICAgIGhlYWQuYXBwZW5kKCJQYWNrYWdlTGljZW5zZUluZm9Gcm9tRmlsZXM6ICIgKyBsaWNyZWYpCisgICAgaGVhZC5hcHBlbmQoIiIpCisgICAgCisgICAgIyMgaGVhZGVyIGZvciBmaWxlIGxldmVsCisgICAgaGVhZC5hcHBlbmQoIiMjIEZpbGUgSW5mb3JtYXRpb24iKQorICAgIGhlYWQuYXBwZW5kKCIiKQorCisgICAgcmV0dXJuICdcbicuam9pbihoZWFkKQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3NzdGF0ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YWQ2ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvc3N0YXRlLmJiY2xhc3MKQEAgLTAsMCArMSw5NTEgQEAKK1NTVEFURV9WRVJTSU9OID0gIjMiCisKK1NTVEFURV9NQU5JRkVTVFMgPz0gIiR7VE1QRElSfS9zc3RhdGUtY29udHJvbCIKK1NTVEFURV9NQU5GSUxFUFJFRklYID0gIiR7U1NUQVRFX01BTklGRVNUU30vbWFuaWZlc3QtJHtTU1RBVEVfTUFOTUFDSH0tJHtQTn0iCisKK2RlZiBnZW5lcmF0ZV9zc3RhdGVmbihzcGVjLCBoYXNoLCBkKToKKyAgICBpZiBub3QgaGFzaDoKKyAgICAgICAgaGFzaCA9ICJJTlZBTElEIgorICAgIHJldHVybiBoYXNoWzoyXSArICIvIiArIHNwZWMgKyBoYXNoCisKK1NTVEFURV9QS0dBUkNIICAgID0gIiR7UEFDS0FHRV9BUkNIfSIKK1NTVEFURV9QS0dTUEVDICAgID0gInNzdGF0ZToke1BOfToke1BBQ0tBR0VfQVJDSH0ke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfToke1BWfToke1BSfToke1NTVEFURV9QS0dBUkNIfToke1NTVEFURV9WRVJTSU9OfToiCitTU1RBVEVfU1dTUEVDICAgICA9ICJzc3RhdGU6JHtCUE59Ojoke1BWfToke1BSfTo6JHtTU1RBVEVfVkVSU0lPTn06IgorU1NUQVRFX1BLR05BTUUgICAgPSAiJHtTU1RBVEVfRVhUUkFQQVRIfSR7QGdlbmVyYXRlX3NzdGF0ZWZuKGQuZ2V0VmFyKCdTU1RBVEVfUEtHU1BFQycsIFRydWUpLCBkLmdldFZhcignQkJfVEFTS0hBU0gnLCBUcnVlKSwgZCl9IgorU1NUQVRFX1BLRyAgICAgICAgPSAiJHtTU1RBVEVfRElSfS8ke1NTVEFURV9QS0dOQU1FfSIKK1NTVEFURV9FWFRSQVBBVEggICA9ICIiCitTU1RBVEVfRVhUUkFQQVRIV0lMRENBUkQgPSAiIgorU1NUQVRFX1BBVEhTUEVDICAgPSAiJHtTU1RBVEVfRElSfS8ke1NTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRH0qLyR7U1NUQVRFX1BLR1NQRUN9IgorCisjIFdlIGRvbid0IHdhbnQgdGhlIHNzdGF0ZSB0byBkZXBlbmQgb24gdGhpbmdzIGxpa2UgdGhlIGRpc3RybyBzdHJpbmcKKyMgb2YgdGhlIHN5c3RlbSwgd2UgbGV0IHRoZSBzc3RhdGUgcGF0aHMgdGFrZSBjYXJlIG9mIHRoaXMuCitTU1RBVEVfRVhUUkFQQVRIW3ZhcmRlcHZhbHVlXSA9ICIiCisKKyMgRm9yIG11bHRpbGliIHJwbSB0aGUgYWxsYXJjaCBwYWNrYWdlZ3JvdXAgZmlsZXMgY2FuIG92ZXJ3cml0ZSAoaW4gdGhlb3J5IHRoZXkncmUgaWRlbnRpY2FsKQorU1NUQVRFX0RVUFdISVRFTElTVCA9ICIke0RFUExPWV9ESVJfSU1BR0V9LyAke0RFUExPWV9ESVJ9L2xpY2Vuc2VzLyAke0RFUExPWV9ESVJfUlBNfS9hbGwvIgorIyBBdm9pZCBkb2Nib29rL3NnbWwgY2F0YWxvZyB3YXJuaW5ncyBmb3Igbm93CitTU1RBVEVfRFVQV0hJVEVMSVNUICs9ICIke1NUQUdJTkdfRVRDRElSX05BVElWRX0vc2dtbCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L3NnbWwiCisjIEFyY2hpdmUgdGhlIHNvdXJjZXMgZm9yIG1hbnkgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgZGVwbG95IGZvbGRlcgorU1NUQVRFX0RVUFdISVRFTElTVCArPSAiJHtERVBMT1lfRElSX1NSQ30iCisKK1NTVEFURV9TQ0FOX0ZJTEVTID89ICIqLmxhICotY29uZmlnICpfY29uZmlnIgorU1NUQVRFX1NDQU5fQ01EID89ICdmaW5kICR7U1NUQVRFX0JVSUxERElSfSBcKCAtbmFtZSAiJHtAIlwiIC1vIC1uYW1lIFwiIi5qb2luKGQuZ2V0VmFyKCJTU1RBVEVfU0NBTl9GSUxFUyIsIFRydWUpLnNwbGl0KCkpfSIgXCkgLXR5cGUgZicKKworQkJfSEFTSEZJTEVOQU1FID0gIiR7U1NUQVRFX0VYVFJBUEFUSH0gJHtTU1RBVEVfUEtHU1BFQ30gJHtTU1RBVEVfU1dTUEVDfSIKKworU1NUQVRFX0FSQ0hTID0gIiBcCisgICAgJHtCVUlMRF9BUkNIfSBcCisgICAgJHtCVUlMRF9BUkNIfV8ke1NES19BUkNIfV8ke1NES19PU30gXAorICAgICR7QlVJTERfQVJDSH1fJHtUQVJHRVRfQVJDSH0gXAorICAgICR7U0RLX0FSQ0h9XyR7U0RLX09TfSBcCisgICAgJHtTREtfQVJDSH1fJHtQQUNLQUdFX0FSQ0h9IFwKKyAgICBhbGxhcmNoIFwKKyAgICAke1BBQ0tBR0VfQVJDSH0gXAorICAgICR7TUFDSElORX0iCisKK1NTVEFURV9NQU5NQUNIID89ICIke1NTVEFURV9QS0dBUkNIfSIKKworU1NUQVRFQ1JFQVRFRlVOQ1MgPSAic3N0YXRlX2hhcmRjb2RlX3BhdGgiCitTU1RBVEVQT1NUQ1JFQVRFRlVOQ1MgPSAiIgorU1NUQVRFUFJFSU5TVEZVTkNTID0gIiIKK1NTVEFURVBPU1RVTlBBQ0tGVU5DUyA9ICJzc3RhdGVfaGFyZGNvZGVfcGF0aF91bnBhY2siCitTU1RBVEVQT1NUSU5TVEZVTkNTID0gIiIKK0VYVFJBX1NUQUdJTkdfRklYTUVTID89ICIiCisKK1NJR0dFTl9MT0NLRURTSUdTX0NIRUNLX0xFVkVMID89ICdlcnJvcicKKworIyBUaGUgR251UEcga2V5IElEIGFuZCBwYXNzcGhyYXNlIHRvIHVzZSB0byBzaWduIHNzdGF0ZSBhcmNoaXZlcyAob3IgdW5zZXQgdG8KKyMgbm90IHNpZ24pCitTU1RBVEVfU0lHX0tFWSA/PSAiIgorU1NUQVRFX1NJR19QQVNTUEhSQVNFID89ICIiCisjIFdoZXRoZXIgdG8gdmVyaWZ5IHRoZSBHblVQRyBzaWduYXR1cmVzIHdoZW4gZXh0cmFjdGluZyBzc3RhdGUgYXJjaGl2ZXMKK1NTVEFURV9WRVJJRllfU0lHID89ICIwIgorCisjIFNwZWNpZnkgZGlycyBpbiB3aGljaCB0aGUgc2hlbGwgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYW5kIGRvbid0IHVzZSAke0J9CisjIGFzIGRlZmF1bHQgZGlycyB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGFib3V0ICR7Qn0gd2l0aCBvdGhlciB0YXNrLgorc3N0YXRlX2NyZWF0ZV9wYWNrYWdlW2RpcnNdID0gIiR7U1NUQVRFX0JVSUxERElSfSIKK3NzdGF0ZV91bnBhY2tfcGFja2FnZVtkaXJzXSA9ICIke1NTVEFURV9JTlNURElSfSIKKworIyBEbyBub3QgcnVuIHNzdGF0ZV9oYXJkY29kZV9wYXRoKCkgaW4gJHtCfToKKyMgdGhlICR7Qn0gbWF5YmUgcmVtb3ZlZCBieSBjbWFrZV9kb19jb25maWd1cmUoKSB3aGlsZQorIyBzc3RhdGVfaGFyZGNvZGVfcGF0aCgpIHJ1bm5pbmcuCitzc3RhdGVfaGFyZGNvZGVfcGF0aFtkaXJzXSA9ICIke1NTVEFURV9CVUlMRERJUn0iCisKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZ2V0VmFyKCdCVUlMRF9BUkNIJywgRmFsc2UpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0dBUkNIJywgZC5leHBhbmQoIiR7QlVJTERfQVJDSH1fJHtTREtfQVJDSH1fJHtTREtfT1N9IikpCisgICAgZWxpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCBkLmV4cGFuZCgiJHtCVUlMRF9BUkNIfV8ke1RBUkdFVF9BUkNIfSIpKQorICAgIGVsaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke1NES19BUkNIfV8ke1NES19PU30iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgIGQuc2V0VmFyKCdTU1RBVEVfUEtHQVJDSCcsIGQuZXhwYW5kKCIke1NES19BUkNIfV8ke1BBQ0tBR0VfQVJDSH0iKSkKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2FsbGFyY2gnLCBkKSBhbmQgZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSCIsIFRydWUpID09ICJhbGwiOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX1BLR0FSQ0gnLCAiYWxsYXJjaCIpCisgICAgZWxzZToKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9NQU5NQUNIJywgZC5leHBhbmQoIiR7UEFDS0FHRV9BUkNIfSIpKQorCisgICAgaWYgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcycsIGQpOgorICAgICAgICBkLnNldFZhcignU1NUQVRFX0VYVFJBUEFUSCcsICIke05BVElWRUxTQlNUUklOR30vIikKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9FWFRSQVBBVEhXSUxEQ0FSRCcsICIqLyIpCisKKyAgICAjIFRoZXNlIGNsYXNzZXMgZW5jb2RlIHN0YWdpbmcgcGF0aHMgaW50byB0aGVpciBzY3JpcHRzIGRhdGEgc28gY2FuIG9ubHkgYmUKKyAgICAjIHJldXNlZCBpZiB3ZSBtYW5pcHVsYXRlIHRoZSBwYXRocworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3NzZGsnLCBkKToKKyAgICAgICAgc2Nhbl9jbWQgPSAiZ3JlcCAtSXJsICR7U1RBR0lOR19ESVJ9ICR7U1NUQVRFX0JVSUxERElSfSIKKyAgICAgICAgZC5zZXRWYXIoJ1NTVEFURV9TQ0FOX0NNRCcsIHNjYW5fY21kKQorCisgICAgdW5pcXVlX3Rhc2tzID0gc2V0KChkLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKSBvciAiIikuc3BsaXQoKSkKKyAgICBkLnNldFZhcignU1NUQVRFVEFTS1MnLCAiICIuam9pbih1bmlxdWVfdGFza3MpKQorICAgIGZvciB0YXNrIGluIHVuaXF1ZV90YXNrczoKKyAgICAgICAgZC5wcmVwZW5kVmFyRmxhZyh0YXNrLCAncHJlZnVuY3MnLCAic3N0YXRlX3Rhc2tfcHJlZnVuYyAiKQorICAgICAgICBkLmFwcGVuZFZhckZsYWcodGFzaywgJ3Bvc3RmdW5jcycsICIgc3N0YXRlX3Rhc2tfcG9zdGZ1bmMiKQorfQorCitkZWYgc3N0YXRlX2luaXQodGFzaywgZCk6CisgICAgc3MgPSB7fQorICAgIHNzWyd0YXNrJ10gPSB0YXNrCisgICAgc3NbJ2RpcnMnXSA9IFtdCisgICAgc3NbJ3BsYWluZGlycyddID0gW10KKyAgICBzc1snbG9ja2ZpbGVzJ10gPSBbXQorICAgIHNzWydsb2NrZmlsZXMtc2hhcmVkJ10gPSBbXQorICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQsIHRhc2sgPSBOb25lKToKKyAgICBpZiB0YXNrIGlzIE5vbmU6CisgICAgICAgIHRhc2sgPSBkLmdldFZhcignQkJfQ1VSUkVOVFRBU0snLCBUcnVlKQorICAgICAgICBpZiBub3QgdGFzazoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJzc3RhdGUgY29kZSBydW5uaW5nIHdpdGhvdXQgdGFzayBjb250ZXh0PyEiKQorICAgICAgICB0YXNrID0gdGFzay5yZXBsYWNlKCJfc2V0c2NlbmUiLCAiIikKKworICAgIGlmIHRhc2suc3RhcnRzd2l0aCgiZG9fIik6CisgICAgICAgIHRhc2sgPSB0YXNrWzM6XQorICAgIGlucHV0cyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWlucHV0ZGlycycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgb3V0cHV0cyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLW91dHB1dGRpcnMnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHBsYWluZGlycyA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLXBsYWluZGlycycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbG9ja2ZpbGVzID0gKGQuZ2V0VmFyRmxhZygiZG9fIiArIHRhc2ssICdzc3RhdGUtbG9ja2ZpbGUnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGxvY2tmaWxlc3NoYXJlZCA9IChkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3N0YXRlLWxvY2tmaWxlLXNoYXJlZCcsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaW50ZXJjZXB0ZnVuY3MgPSAoZC5nZXRWYXJGbGFnKCJkb18iICsgdGFzaywgJ3NzdGF0ZS1pbnRlcmNlcHRmdW5jcycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbm90IHRhc2sgb3IgbGVuKGlucHV0cykgIT0gbGVuKG91dHB1dHMpOgorICAgICAgICBiYi5mYXRhbCgic3N0YXRlIHZhcmlhYmxlcyBub3Qgc2V0dXAgY29ycmVjdGx5PyEiKQorCisgICAgaWYgdGFzayA9PSAicG9wdWxhdGVfbGljIjoKKyAgICAgICAgZC5zZXRWYXIoIlNTVEFURV9QS0dTUEVDIiwgIiR7U1NUQVRFX1NXU1BFQ30iKQorICAgICAgICBkLnNldFZhcigiU1NUQVRFX0VYVFJBUEFUSCIsICIiKQorCisgICAgc3MgPSBzc3RhdGVfaW5pdCh0YXNrLCBkKQorICAgIGZvciBpIGluIHJhbmdlKGxlbihpbnB1dHMpKToKKyAgICAgICAgc3N0YXRlX2FkZChzcywgaW5wdXRzW2ldLCBvdXRwdXRzW2ldLCBkKQorICAgIHNzWydsb2NrZmlsZXMnXSA9IGxvY2tmaWxlcworICAgIHNzWydsb2NrZmlsZXMtc2hhcmVkJ10gPSBsb2NrZmlsZXNzaGFyZWQKKyAgICBzc1sncGxhaW5kaXJzJ10gPSBwbGFpbmRpcnMKKyAgICBzc1snaW50ZXJjZXB0ZnVuY3MnXSA9IGludGVyY2VwdGZ1bmNzCisgICAgcmV0dXJuIHNzCisKK2RlZiBzc3RhdGVfYWRkKHNzLCBzb3VyY2UsIGRlc3QsIGQpOgorICAgIGlmIG5vdCBzb3VyY2UuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgIHNvdXJjZSA9IHNvdXJjZSArICIvIgorICAgIGlmIG5vdCBkZXN0LmVuZHN3aXRoKCIvIik6CisgICAgICAgICBkZXN0ID0gZGVzdCArICIvIgorICAgIHNvdXJjZSA9IG9zLnBhdGgubm9ybXBhdGgoc291cmNlKQorICAgIGRlc3QgPSBvcy5wYXRoLm5vcm1wYXRoKGRlc3QpCisgICAgc3JjYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUoc291cmNlKQorICAgIHNzWydkaXJzJ10uYXBwZW5kKFtzcmNiYXNlLCBzb3VyY2UsIGRlc3RdKQorICAgIHJldHVybiBzcworCitkZWYgc3N0YXRlX2luc3RhbGwoc3MsIGQpOgorICAgIGltcG9ydCBvZS5wYXRoCisgICAgaW1wb3J0IG9lLnNzdGF0ZXNpZworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBzaGFyZWRmaWxlcyA9IFtdCisgICAgc2hhcmVkZGlycyA9IFtdCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGQuZXhwYW5kKCIke1NTVEFURV9NQU5JRkVTVFN9IikpCisKKyAgICBtYW5pZmVzdCwgZDIgPSBvZS5zc3RhdGVzaWcuc3N0YXRlX2dldF9tYW5pZmVzdF9maWxlbmFtZShzc1sndGFzayddLCBkKQorCisgICAgaWYgb3MuYWNjZXNzKG1hbmlmZXN0LCBvcy5SX09LKToKKyAgICAgICAgYmIuZmF0YWwoIlBhY2thZ2UgYWxyZWFkeSBzdGFnZWQgKCVzKT8hIiAlIG1hbmlmZXN0KQorCisgICAgbG9ja3MgPSBbXQorICAgIGZvciBsb2NrIGluIHNzWydsb2NrZmlsZXMtc2hhcmVkJ106CisgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrLCBUcnVlKSkKKyAgICBmb3IgbG9jayBpbiBzc1snbG9ja2ZpbGVzJ106CisgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKworICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBiYi5kZWJ1ZygyLCAiU3RhZ2luZyBmaWxlcyBmcm9tICVzIHRvICVzIiAlIChzdGF0ZVsxXSwgc3RhdGVbMl0pKQorICAgICAgICBmb3Igd2Fsa3Jvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3RhdGVbMV0pOgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZmlsZSkKKyAgICAgICAgICAgICAgICBkc3RwYXRoID0gc3JjcGF0aC5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICAjYmIuZGVidWcoMiwgIlN0YWdpbmcgJXMgdG8gJXMiICUgKHNyY3BhdGgsIGRzdHBhdGgpKQorICAgICAgICAgICAgICAgIHNoYXJlZGZpbGVzLmFwcGVuZChkc3RwYXRoKQorICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgICAgIHNyY2RpciA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZGlyKQorICAgICAgICAgICAgICAgIGRzdGRpciA9IHNyY2Rpci5yZXBsYWNlKHN0YXRlWzFdLCBzdGF0ZVsyXSkKKyAgICAgICAgICAgICAgICAjYmIuZGVidWcoMiwgIlN0YWdpbmcgJXMgdG8gJXMiICUgKHNyY2RpciwgZHN0ZGlyKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgZHN0ZGlyLmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgICAgIGRzdGRpciA9IGRzdGRpciArICIvIgorICAgICAgICAgICAgICAgIHNoYXJlZGRpcnMuYXBwZW5kKGRzdGRpcikKKworICAgICMgQ2hlY2sgdGhlIGZpbGUgbGlzdCBmb3IgY29uZmxpY3RzIGFnYWluc3QgZmlsZXMgd2hpY2ggYWxyZWFkeSBleGlzdAorICAgIHdoaXRlbGlzdCA9IChkLmdldFZhcigiU1NUQVRFX0RVUFdISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgbWF0Y2ggPSBbXQorICAgIGZvciBmIGluIHNoYXJlZGZpbGVzOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmKToKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLm5vcm1wYXRoKGYpCisgICAgICAgICAgICByZWFsbWF0Y2ggPSBUcnVlCisgICAgICAgICAgICBmb3IgdyBpbiB3aGl0ZWxpc3Q6CisgICAgICAgICAgICAgICAgaWYgZi5zdGFydHN3aXRoKHcpOgorICAgICAgICAgICAgICAgICAgICByZWFsbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcmVhbG1hdGNoOgorICAgICAgICAgICAgICAgIG1hdGNoLmFwcGVuZChmKQorICAgICAgICAgICAgICAgIHNzdGF0ZV9zZWFyY2hfY21kID0gImdyZXAgLXJsICclcycgJXMgLS1leGNsdWRlPW1hc3Rlci5saXN0IHwgc2VkIC1lICdzOl4uKi86OicgLWUgJ3M6XC5wb3B1bGF0ZS1zeXNyb290OjonIiAlIChmLCBkLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfSIpKQorICAgICAgICAgICAgICAgIHNlYXJjaF9vdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKHNzdGF0ZV9zZWFyY2hfY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICAgICAgaWYgc2VhcmNoX291dHB1dCAhPSAiIjoKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2guYXBwZW5kKCJNYXRjaGVkIGluICVzIiAlIHNlYXJjaF9vdXRwdXQucnN0cmlwKCkpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIGJiLmVycm9yKCJUaGUgcmVjaXBlICVzIGlzIHRyeWluZyB0byBpbnN0YWxsIGZpbGVzIGludG8gYSBzaGFyZWQgIiBcCisgICAgICAgICAgImFyZWEgd2hlbiB0aG9zZSBmaWxlcyBhbHJlYWR5IGV4aXN0LiBUaG9zZSBmaWxlcyBhbmQgdGhlaXIgbWFuaWZlc3QgIiBcCisgICAgICAgICAgImxvY2F0aW9uIGFyZTpcbiAgICVzXG5QbGVhc2UgdmVyaWZ5IHdoaWNoIHJlY2lwZSBzaG91bGQgcHJvdmlkZSB0aGUgIiBcCisgICAgICAgICAgImFib3ZlIGZpbGVzLlxuVGhlIGJ1aWxkIGhhcyBzdG9wcGVkIGFzIGNvbnRpbnVpbmcgaW4gdGhpcyBzY2VuYXJpbyBXSUxMICIgXAorICAgICAgICAgICJicmVhayB0aGluZ3MsIGlmIG5vdCBub3csIHBvc3NpYmx5IGluIHRoZSBmdXR1cmUgKHdlJ3ZlIHNlZW4gYnVpbGRzIGZhaWwgIiBcCisgICAgICAgICAgInNldmVyYWwgbW9udGhzIGxhdGVyKS4gSWYgdGhlIHN5c3RlbSBrbmV3IGhvdyB0byByZWNvdmVyIGZyb20gdGhpcyAiIFwKKyAgICAgICAgICAiYXV0b21hdGljYWxseSBpdCB3b3VsZCBob3dldmVyIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBzY2VuYXJpb3MgIiBcCisgICAgICAgICAgIndoaWNoIGNhbiByZXN1bHQgaW4gdGhpcyBhbmQgd2UgZG9uJ3Qga25vdyB3aGljaCBvbmUgdGhpcyBpcy4gSXQgbWF5IGJlICIgXAorICAgICAgICAgICJ5b3UgaGF2ZSBzd2l0Y2hlZCBwcm92aWRlcnMgb2Ygc29tZXRoaW5nIGxpa2UgdmlydHVhbC9rZXJuZWwgKGUuZy4gZnJvbSAiIFwKKyAgICAgICAgICAibGludXgteW9jdG8gdG8gbGludXgteW9jdG8tZGV2KSwgaW4gdGhhdCBjYXNlIHlvdSBuZWVkIHRvIGV4ZWN1dGUgdGhlICIgXAorICAgICAgICAgICJjbGVhbiB0YXNrIGZvciBib3RoIHJlY2lwZXMgYW5kIGl0IHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLiBJdCBtYXkgYmUgIiBcCisgICAgICAgICAgInlvdSBjaGFuZ2VkIERJU1RST19GRUFUVVJFUyBmcm9tIHN5c3RlbWQgdG8gdWRldiBvciB2aWNlIHZlcnNhLiBDbGVhbmluZyAiIFwKKyAgICAgICAgICAidGhvc2UgcmVjaXBlcyBzaG91bGQgYWdhaW4gcmVzb2x2ZSB0aGlzIGVycm9yIGhvd2V2ZXIgc3dpdGNoaW5nICIgXAorICAgICAgICAgICJESVNUUk9fRkVBVFVSRVMgb24gYW4gZXhpc3RpbmcgYnVpbGQgZGlyZWN0b3J5IGlzIG5vdCBzdXBwb3J0ZWQsIHlvdSAiIFwKKyAgICAgICAgICAic2hvdWxkIHJlYWxseSBjbGVhbiBvdXQgdG1wIGFuZCByZWJ1aWxkIChyZXVzaW5nIHNzdGF0ZSBzaG91bGQgYmUgc2FmZSkuICIgXAorICAgICAgICAgICJJdCBjb3VsZCBiZSB0aGUgb3ZlcmxhcHBpbmcgZmlsZXMgZGV0ZWN0ZWQgYXJlIGhhcm1sZXNzIGluIHdoaWNoIGNhc2UgIiBcCisgICAgICAgICAgImFkZGluZyB0aGVtIHRvIFNTVEFURV9EVVBXSElURUxJU1QgbWF5IGJlIHRoZSBjb3JyZWN0IHNvbHV0aW9uLiBJdCBjb3VsZCAiIFwKKyAgICAgICAgICAiYWxzbyBiZSB5b3VyIGJ1aWxkIGlzIGluY2x1ZGluZyB0d28gZGlmZmVyZW50IGNvbmZsaWN0aW5nIHZlcnNpb25zIG9mICIgXAorICAgICAgICAgICJ0aGluZ3MgKGUuZy4gYmx1ZXogNCBhbmQgYmx1ZXogNSBhbmQgdGhlIGNvcnJlY3Qgc29sdXRpb24gZm9yIHRoYXQgd291bGQgIiBcCisgICAgICAgICAgImJlIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiBJZiBpbiBkb3VidCwgcGxlYXNlIGFzayBvbiB0aGUgbWFpbGluZyBsaXN0LCAiIFwKKyAgICAgICAgICAic2hhcmluZyB0aGUgZXJyb3IgYW5kIGZpbGVsaXN0IGFib3ZlLiIgJSBcCisgICAgICAgICAgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCAiXG4gIi5qb2luKG1hdGNoKSkpCisgICAgICAgIGJiLmZhdGFsKCJJZiB0aGUgYWJvdmUgbWVzc2FnZSBpcyB0b28gbXVjaCwgdGhlIHNpbXBsZXIgdmVyc2lvbiBpcyB5b3UncmUgYWR2aXNlZCB0byB3aXBlIG91dCB0bXAgYW5kIHJlYnVpbGQgKHJldXNpbmcgc3N0YXRlIGlzIGZpbmUpLiBUaGF0IHdpbGwgbGlrZWx5IGZpeCB0aGluZ3MgaW4gbW9zdCAoYnV0IG5vdCBhbGwpIGNhc2VzLiIpCisKKyAgICAjIFdyaXRlIG91dCB0aGUgbWFuaWZlc3QKKyAgICBmID0gb3BlbihtYW5pZmVzdCwgInciKQorICAgIGZvciBmaWxlIGluIHNoYXJlZGZpbGVzOgorICAgICAgICBmLndyaXRlKGZpbGUgKyAiXG4iKQorCisgICAgIyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IGRpcmVjdG9yaWVzIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBtYW5pZmVzdAorICAgICMgc28gdGhhdCB3aGVuIHdlIHRlc3QgdG8gc2VlIGlmIHRoZXkgc2hvdWxkIGJlIGRlbGV0ZWQgYW55IGNvbnRlbnRzCisgICAgIyBhZGRlZCBieSB0aGUgdGFzayB3aWxsIGhhdmUgYmVlbiByZW1vdmVkIGZpcnN0LgorICAgIGRpcnMgPSBzb3J0ZWQoc2hhcmVkZGlycywga2V5PWxlbikKKyAgICAjIE11c3QgcmVtb3ZlIGNoaWxkcmVuIGZpcnN0LCB3aGljaCB3aWxsIGhhdmUgYSBsb25nZXIgcGF0aCB0aGFuIHRoZSBwYXJlbnQKKyAgICBmb3IgZGkgaW4gcmV2ZXJzZWQoZGlycyk6CisgICAgICAgIGYud3JpdGUoZGkgKyAiXG4iKQorICAgIGYuY2xvc2UoKQorCisgICAgIyBBcHBlbmQgdG8gdGhlIGxpc3Qgb2YgbWFuaWZlc3RzIGZvciB0aGlzIFBBQ0tBR0VfQVJDSAorCisgICAgaSA9IGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFOSUZFU1RTfS9pbmRleC0ke1NTVEFURV9NQU5NQUNIfSIpCisgICAgbCA9IGJiLnV0aWxzLmxvY2tmaWxlKGkgKyAiLmxvY2siKQorICAgIGZpbGVkYXRhID0gZC5nZXRWYXIoIlNUQU1QIiwgVHJ1ZSkgKyAiICIgKyBkMi5nZXRWYXIoIlNTVEFURV9NQU5GSUxFUFJFRklYIiwgVHJ1ZSkgKyAiICIgKyBkLmdldFZhcigiV09SS0RJUiIsIFRydWUpICsgIlxuIgorICAgIG1hbmlmZXN0cyA9IFtdCisgICAgaWYgb3MucGF0aC5leGlzdHMoaSk6CisgICAgICAgIHdpdGggb3BlbihpLCAiciIpIGFzIGY6CisgICAgICAgICAgICBtYW5pZmVzdHMgPSBmLnJlYWRsaW5lcygpCisgICAgaWYgZmlsZWRhdGEgbm90IGluIG1hbmlmZXN0czoKKyAgICAgICAgd2l0aCBvcGVuKGksICJhKyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGZpbGVkYXRhKQorICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobCkKKworICAgICMgUnVuIHRoZSBhY3R1YWwgZmlsZSBpbnN0YWxsCisgICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN0YXRlWzFdKToKKyAgICAgICAgICAgIG9lLnBhdGguY29weWhhcmRsaW5rdHJlZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisKKyAgICBmb3IgcG9zdGluc3QgaW4gKGQuZ2V0VmFyKCdTU1RBVEVQT1NUSU5TVEZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhwb3N0aW5zdCwgZCkKKworICAgIGZvciBsb2NrIGluIGxvY2tzOgorICAgICAgICBiYi51dGlscy51bmxvY2tmaWxlKGxvY2spCisKK3NzdGF0ZV9pbnN0YWxsW3ZhcmRlcHNleGNsdWRlXSArPSAiU1NUQVRFX0RVUFdISVRFTElTVCBTVEFURV9NQU5NQUNIIFNTVEFURV9NQU5GSUxFUFJFRklYIgorc3N0YXRlX2luc3RhbGxbdmFyZGVwc10gKz0gIiR7U1NUQVRFUE9TVElOU1RGVU5DU30iCisKK2RlZiBzc3RhdGVfaW5zdGFsbHBrZyhzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgZGVmIHByZXBkaXIoZGlyKToKKyAgICAgICAgIyByZW1vdmUgZGlyIGlmIGl0IGV4aXN0cywgZW5zdXJlIGFueSBwYXJlbnQgZGlyZWN0b3JpZXMgZG8gZXhpc3QKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGlyKToKKyAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKGRpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRpcikKKyAgICAgICAgb2UucGF0aC5yZW1vdmUoZGlyKQorCisgICAgc3N0YXRlaW5zdCA9IGQuZXhwYW5kKCIke1dPUktESVJ9L3NzdGF0ZS1pbnN0YWxsLSVzLyIgJSBzc1sndGFzayddKQorICAgIHNzdGF0ZWZldGNoID0gZC5nZXRWYXIoJ1NTVEFURV9QS0dOQU1FJywgVHJ1ZSkgKyAnXycgKyBzc1sndGFzayddICsgIi50Z3oiCisgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSArICdfJyArIHNzWyd0YXNrJ10gKyAiLnRneiIKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzc3RhdGVwa2cpOgorICAgICAgICBwc3RhZ2luZ19mZXRjaChzc3RhdGVmZXRjaCwgc3N0YXRlcGtnLCBkKQorCisgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKHNzdGF0ZXBrZyk6CisgICAgICAgIGJiLm5vdGUoIlN0YWdpbmcgcGFja2FnZSAlcyBkb2VzIG5vdCBleGlzdCIgJSBzc3RhdGVwa2cpCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgc3N0YXRlX2NsZWFuKHNzLCBkKQorCisgICAgZC5zZXRWYXIoJ1NTVEFURV9JTlNURElSJywgc3N0YXRlaW5zdCkKKyAgICBkLnNldFZhcignU1NUQVRFX1BLRycsIHNzdGF0ZXBrZykKKworICAgIGlmIGJiLnV0aWxzLnRvX2Jvb2xlYW4oZC5nZXRWYXIoIlNTVEFURV9WRVJJRllfU0lHIiwgVHJ1ZSksIEZhbHNlKToKKyAgICAgICAgaWYgc3VicHJvY2Vzcy5jYWxsKFsiZ3BnIiwgIi0tdmVyaWZ5Iiwgc3N0YXRlcGtnICsgIi5zaWciLCBzc3RhdGVwa2ddKSAhPSAwOgorICAgICAgICAgICAgYmIud2FybigiQ2Fubm90IHZlcmlmeSBzaWduYXR1cmUgb24gc3N0YXRlIHBhY2thZ2UgJXMiICUgc3N0YXRlcGtnKQorCisgICAgZm9yIGYgaW4gKGQuZ2V0VmFyKCdTU1RBVEVQUkVJTlNURlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKSArIFsnc3N0YXRlX3VucGFja19wYWNrYWdlJ10gKyAoZC5nZXRWYXIoJ1NTVEFURVBPU1RVTlBBQ0tGVU5DUycsIFRydWUpIG9yICcnKS5zcGxpdCgpOgorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoZiwgZCkKKworICAgIGZvciBzdGF0ZSBpbiBzc1snZGlycyddOgorICAgICAgICBwcmVwZGlyKHN0YXRlWzFdKQorICAgICAgICBvcy5yZW5hbWUoc3N0YXRlaW5zdCArIHN0YXRlWzBdLCBzdGF0ZVsxXSkKKyAgICBzc3RhdGVfaW5zdGFsbChzcywgZCkKKworICAgIGZvciBwbGFpbiBpbiBzc1sncGxhaW5kaXJzJ106CisgICAgICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgICAgIHNyYyA9IHNzdGF0ZWluc3QgKyAiLyIgKyBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsICcnKQorICAgICAgICBkZXN0ID0gcGxhaW4KKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNyYykKKyAgICAgICAgcHJlcGRpcihkZXN0KQorICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0KQorCisgICAgcmV0dXJuIFRydWUKKworcHl0aG9uIHNzdGF0ZV9oYXJkY29kZV9wYXRoX3VucGFjayAoKSB7CisgICAgIyBGaXh1cCBoYXJkY29kZWQgcGF0aHMKKyAgICAjCisgICAgIyBOb3RlOiBUaGUgbG9naWMgYmVsb3cgbXVzdCBtYXRjaCB0aGUgcmV2ZXJzZSBsb2dpYyBpbgorICAgICMgc3N0YXRlX2hhcmRjb2RlX3BhdGgoZCkKKyAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgc3N0YXRlaW5zdCA9IGQuZ2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIFRydWUpCisgICAgZml4bWVmbiA9ICBzc3RhdGVpbnN0ICsgImZpeG1lcGF0aCIKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmaXhtZWZuKToKKyAgICAgICAgc3RhZ2luZyA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUicsIFRydWUpCisgICAgICAgIHN0YWdpbmdfdGFyZ2V0ID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIHN0YWdpbmdfaG9zdCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9IT1NUJywgVHJ1ZSkKKworICAgICAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzLWNhbmFkaWFuJywgZCk6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSOiVzOmcnIiAlIChzdGFnaW5nKQorICAgICAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgICAgICBzc3RhdGVfc2VkX2NtZCA9ICJzZWQgLWkgLWUgJ3M6RklYTUVTVEFHSU5HRElSVEFSR0VUOiVzOmc7IHM6RklYTUVTVEFHSU5HRElSOiVzOmcnIiAlIChzdGFnaW5nX3RhcmdldCwgc3RhZ2luZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczpGSVhNRVNUQUdJTkdESVJIT1NUOiVzOmcnIiAlIChzdGFnaW5nX2hvc3QpCisKKyAgICAgICAgZXh0cmFfc3RhZ2luZ19maXhtZXMgPSBkLmdldFZhcignRVhUUkFfU1RBR0lOR19GSVhNRVMnLCBUcnVlKSBvciAnJworICAgICAgICBmb3IgZml4bWV2YXIgaW4gZXh0cmFfc3RhZ2luZ19maXhtZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZpeG1lX3BhdGggPSBkLmdldFZhcihmaXhtZXZhciwgVHJ1ZSkKKyAgICAgICAgICAgIHNzdGF0ZV9zZWRfY21kICs9ICIgLWUgJ3M6RklYTUVfJXM6JXM6ZyciICUgKGZpeG1ldmFyLCBmaXhtZV9wYXRoKQorCisgICAgICAgICMgQWRkIHNzdGF0ZWluc3QgdG8gZWFjaCBmaWxlbmFtZSBpbiBmaXhtZXBhdGgsIHVzZSB4YXJncyB0byBlZmZpY2llbnRseSBjYWxsIHNlZAorICAgICAgICBzc3RhdGVfaGFyZGNvZGVfY21kID0gInNlZCAtZSAnczpeOiVzOmcnICVzIHwgeGFyZ3MgJXMiICUgKHNzdGF0ZWluc3QsIGZpeG1lZm4sIHNzdGF0ZV9zZWRfY21kKQorCisgICAgICAgIGJiLm5vdGUoIlJlcGxhY2luZyBmaXhtZSBwYXRocyBpbiBzc3RhdGUgcGFja2FnZTogJXMiICUgKHNzdGF0ZV9oYXJkY29kZV9jbWQpKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2hhcmRjb2RlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIE5lZWQgdG8gcmVtb3ZlIHRoaXMgb3Igd2UnZCBjb3B5IGl0IGludG8gdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIG1heSAKKyAgICAgICAgIyBjb25mbGljdCB3aXRoIGFub3RoZXIgd3JpdGVyCisgICAgICAgIG9zLnJlbW92ZShmaXhtZWZuKQorfQorCitkZWYgc3N0YXRlX2NsZWFuX2NhY2hlZmlsZShzcywgZCk6CisgICAgaW1wb3J0IG9lLnBhdGgKKworICAgIHNzdGF0ZXBrZ2ZpbGUgPSBkLmdldFZhcignU1NUQVRFX1BBVEhTUEVDJywgVHJ1ZSkgKyAiKl8iICsgc3NbJ3Rhc2snXSArICIudGd6KiIKKyAgICBiYi5ub3RlKCJSZW1vdmluZyAlcyIgJSBzc3RhdGVwa2dmaWxlKQorICAgIG9lLnBhdGgucmVtb3ZlKHNzdGF0ZXBrZ2ZpbGUpCisKK2RlZiBzc3RhdGVfY2xlYW5fY2FjaGVmaWxlcyhkKToKKyAgICBmb3IgdGFzayBpbiAoZC5nZXRWYXIoJ1NTVEFURVRBU0tTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGxkID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgc3MgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMobGQsIHRhc2spCisgICAgICAgIHNzdGF0ZV9jbGVhbl9jYWNoZWZpbGUoc3MsIGxkKQorCitkZWYgc3N0YXRlX2NsZWFuX21hbmlmZXN0KG1hbmlmZXN0LCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgbWZpbGUgPSBvcGVuKG1hbmlmZXN0KQorICAgIGVudHJpZXMgPSBtZmlsZS5yZWFkbGluZXMoKQorICAgIG1maWxlLmNsb3NlKCkKKworICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOgorICAgICAgICBlbnRyeSA9IGVudHJ5LnN0cmlwKCkKKyAgICAgICAgYmIuZGVidWcoMiwgIlJlbW92aW5nIG1hbmlmZXN0OiAlcyIgJSBlbnRyeSkKKyAgICAgICAgIyBXZSBjYW4gcmFjZSBhZ2FpbnN0IGFub3RoZXIgcGFja2FnZSBwb3B1bGF0aW5nIGRpcmVjdG9yaWVzIGFzIHdlJ3JlIHJlbW92aW5nIHRoZW0KKyAgICAgICAgIyBzbyB3ZSBpZ25vcmUgZXJyb3JzIGhlcmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGVudHJ5LmVuZHN3aXRoKCIvIik6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZW50cnlbOi0xXSk6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShlbnRyeVs6LTFdKQorICAgICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoZW50cnkpIGFuZCBsZW4ob3MubGlzdGRpcihlbnRyeSkpID09IDA6CisgICAgICAgICAgICAgICAgICAgIG9zLnJtZGlyKGVudHJ5WzotMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9lLnBhdGgucmVtb3ZlKGVudHJ5KQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIG9lLnBhdGgucmVtb3ZlKG1hbmlmZXN0KQorCitkZWYgc3N0YXRlX2NsZWFuKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorICAgIGltcG9ydCBnbG9iCisKKyAgICBkMiA9IGQuY3JlYXRlQ29weSgpCisgICAgc3RhbXBfY2xlYW4gPSBkLmdldFZhcigiU1RBTVBDTEVBTiIsIFRydWUpCisgICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyBzc1sndGFzayddLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCisgICAgaWYgZXh0cmFpbmY6CisgICAgICAgIGQyLnNldFZhcigiU1NUQVRFX01BTk1BQ0giLCBleHRyYWluZikKKyAgICAgICAgd2lsZGNhcmRfc3RmaWxlID0gIiVzLmRvXyVzKi4lcyIgJSAoc3RhbXBfY2xlYW4sIHNzWyd0YXNrJ10sIGV4dHJhaW5mKQorICAgIGVsc2U6CisgICAgICAgIHdpbGRjYXJkX3N0ZmlsZSA9ICIlcy5kb18lcyoiICUgKHN0YW1wX2NsZWFuLCBzc1sndGFzayddKQorCisgICAgbWFuaWZlc3QgPSBkMi5leHBhbmQoIiR7U1NUQVRFX01BTkZJTEVQUkVGSVh9LiVzIiAlIHNzWyd0YXNrJ10pCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYW5pZmVzdCk6CisgICAgICAgIGxvY2tzID0gW10KKyAgICAgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcy1zaGFyZWQnXToKKyAgICAgICAgICAgIGxvY2tzLmFwcGVuZChiYi51dGlscy5sb2NrZmlsZShsb2NrKSkKKyAgICAgICAgZm9yIGxvY2sgaW4gc3NbJ2xvY2tmaWxlcyddOgorICAgICAgICAgICAgbG9ja3MuYXBwZW5kKGJiLnV0aWxzLmxvY2tmaWxlKGxvY2spKQorCisgICAgICAgIHNzdGF0ZV9jbGVhbl9tYW5pZmVzdChtYW5pZmVzdCwgZCkKKworICAgICAgICBmb3IgbG9jayBpbiBsb2NrczoKKyAgICAgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUobG9jaykKKworICAgICMgUmVtb3ZlIHRoZSBjdXJyZW50IGFuZCBwcmV2aW91cyBzdGFtcHMsIGJ1dCBrZWVwIHRoZSBzaWdkYXRhLgorICAgICMKKyAgICAjIFRoZSBnbG9iKCkgbWF0Y2hlcyBkb190YXNrKiB3aGljaCBtYXkgbWF0Y2ggbXVsdGlwbGUgdGFza3MsIGZvcgorICAgICMgZXhhbXBsZTogZG9fcGFja2FnZSBhbmQgZG9fcGFja2FnZV93cml0ZV9pcGssIHNvIHdlIG5lZWQgdG8KKyAgICAjIGV4YWN0bHkgbWF0Y2ggKi5kb190YXNrLiogYW5kICouZG9fdGFza19zZXRzY2VuZS4qCisgICAgcm1fc3RhbXAgPSAnLmRvXyVzLicgJSBzc1sndGFzayddCisgICAgcm1fc2V0c2NlbmUgPSAnLmRvXyVzX3NldHNjZW5lLicgJSBzc1sndGFzayddCisgICAgIyBGb3IgQkJfU0lHTkFUVVJFX0hBTkRMRVIgPSAibm9vcCIKKyAgICBybV9ub2hhc2ggPSAiLmRvXyVzIiAlIHNzWyd0YXNrJ10KKyAgICBmb3Igc3RmaWxlIGluIGdsb2IuZ2xvYih3aWxkY2FyZF9zdGZpbGUpOgorICAgICAgICAjIEtlZXAgdGhlIHNpZ2RhdGEKKyAgICAgICAgaWYgIi5zaWdkYXRhLiIgaW4gc3RmaWxlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBQcmVzZXJ2ZSB0YWludCBmaWxlcyBpbiB0aGUgc3RhbXBzIGRpcmVjdG9yeQorICAgICAgICBpZiBzdGZpbGUuZW5kc3dpdGgoJy50YWludCcpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgcm1fc3RhbXAgaW4gc3RmaWxlIG9yIHJtX3NldHNjZW5lIGluIHN0ZmlsZSBvciBcCisgICAgICAgICAgICAgICAgc3RmaWxlLmVuZHN3aXRoKHJtX25vaGFzaCk6CisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShzdGZpbGUpCisKK3NzdGF0ZV9jbGVhblt2YXJkZXBzZXhjbHVkZV0gPSAiU1NUQVRFX01BTkZJTEVQUkVGSVgiCisKK0NMRUFORlVOQ1MgKz0gInNzdGF0ZV9jbGVhbmFsbCIKKworcHl0aG9uIHNzdGF0ZV9jbGVhbmFsbCgpIHsKKyAgICBiYi5ub3RlKCJSZW1vdmluZyBzaGFyZWQgc3RhdGUgZm9yIHBhY2thZ2UgJXMiICUgZC5nZXRWYXIoJ1BOJywgVHJ1ZSkpCisKKyAgICBtYW5pZmVzdF9kaXIgPSBkLmdldFZhcignU1NUQVRFX01BTklGRVNUUycsIFRydWUpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHJldHVybgorCisgICAgdGFza3MgPSBkLmdldFZhcignU1NUQVRFVEFTS1MnLCBUcnVlKS5zcGxpdCgpCisgICAgZm9yIG5hbWUgaW4gdGFza3M6CisgICAgICAgIGxkID0gZC5jcmVhdGVDb3B5KCkKKyAgICAgICAgc2hhcmVkX3N0YXRlID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGxkLCBuYW1lKQorICAgICAgICBzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBsZCkKK30KKworcHl0aG9uIHNzdGF0ZV9oYXJkY29kZV9wYXRoICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcywgcGxhdGZvcm0KKworICAgICMgTmVlZCB0byByZW1vdmUgaGFyZGNvZGVkIHBhdGhzIGFuZCBmaXggdGhlc2Ugd2hlbiB3ZSBpbnN0YWxsIHRoZQorICAgICMgc3RhZ2luZyBwYWNrYWdlcy4KKyAgICAjCisgICAgIyBOb3RlOiB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBtYXRjaCB0aGUgcmV2ZXJzZSBsb2dpYworICAgICMgaW4gc3N0YXRlX2luc3RhbGxwa2coc3MsIGQpCisKKyAgICBzdGFnaW5nID0gZC5nZXRWYXIoJ1NUQUdJTkdfRElSJywgVHJ1ZSkKKyAgICBzdGFnaW5nX3RhcmdldCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKQorICAgIHN0YWdpbmdfaG9zdCA9IGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9IT1NUJywgVHJ1ZSkKKyAgICBzc3RhdGVfYnVpbGRkaXIgPSBkLmdldFZhcignU1NUQVRFX0JVSUxERElSJywgVHJ1ZSkKKworICAgIGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MtY2FuYWRpYW4nLCBkKToKKyAgICAgICAgc3N0YXRlX2dyZXBfY21kID0gImdyZXAgLWwgLWUgJyVzJyIgJSAoc3RhZ2luZykKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOiVzOkZJWE1FU1RBR0lOR0RJUjpnJyIgJSAoc3RhZ2luZykKKyAgICBlbGlmIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3NzJywgZCk6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcycgLWUgJyVzJyIgJSAoc3RhZ2luZ190YXJnZXQsIHN0YWdpbmcpCisgICAgICAgIHNzdGF0ZV9zZWRfY21kID0gInNlZCAtaSAtZSAnczolczpGSVhNRVNUQUdJTkdESVJUQVJHRVQ6ZzsgczolczpGSVhNRVNUQUdJTkdESVI6ZyciICUgKHN0YWdpbmdfdGFyZ2V0LCBzdGFnaW5nKQorICAgIGVsc2U6CisgICAgICAgIHNzdGF0ZV9ncmVwX2NtZCA9ICJncmVwIC1sIC1lICclcyciICUgKHN0YWdpbmdfaG9zdCkKKyAgICAgICAgc3N0YXRlX3NlZF9jbWQgPSAic2VkIC1pIC1lICdzOiVzOkZJWE1FU1RBR0lOR0RJUkhPU1Q6ZyciICUgKHN0YWdpbmdfaG9zdCkKKworICAgIGV4dHJhX3N0YWdpbmdfZml4bWVzID0gZC5nZXRWYXIoJ0VYVFJBX1NUQUdJTkdfRklYTUVTJywgVHJ1ZSkgb3IgJycKKyAgICBmb3IgZml4bWV2YXIgaW4gZXh0cmFfc3RhZ2luZ19maXhtZXMuc3BsaXQoKToKKyAgICAgICAgZml4bWVfcGF0aCA9IGQuZ2V0VmFyKGZpeG1ldmFyLCBUcnVlKQorICAgICAgICBzc3RhdGVfc2VkX2NtZCArPSAiIC1lICdzOiVzOkZJWE1FXyVzOmcnIiAlIChmaXhtZV9wYXRoLCBmaXhtZXZhcikKKworICAgIGZpeG1lZm4gPSAgc3N0YXRlX2J1aWxkZGlyICsgImZpeG1lcGF0aCIKKworICAgIHNzdGF0ZV9zY2FuX2NtZCA9IGQuZ2V0VmFyKCdTU1RBVEVfU0NBTl9DTUQnLCBUcnVlKQorICAgIHNzdGF0ZV9maWxlbGlzdF9jbWQgPSAidGVlICVzIiAlIChmaXhtZWZuKQorCisgICAgIyBmaXhtZXBhdGggZmlsZSBuZWVkcyByZWxhdGl2ZSBwYXRocywgZHJvcCBzc3RhdGVfYnVpbGRkaXIgcHJlZml4CisgICAgc3N0YXRlX2ZpbGVsaXN0X3JlbGF0aXZlX2NtZCA9ICJzZWQgLWkgLWUgJ3M6XiVzOjpnJyAlcyIgJSAoc3N0YXRlX2J1aWxkZGlyLCBmaXhtZWZuKQorCisgICAgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCA9ICctLW5vLXJ1bi1pZi1lbXB0eScKKyAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAnRGFyd2luJzoKKyAgICAgICAgeGFyZ3Nfbm9fZW1wdHlfcnVuX2NtZCA9ICcnCisKKyAgICAjIExpbWl0IHRoZSBmaXhwYXRocyBhbmQgc2VkIG9wZXJhdGlvbnMgYmFzZWQgb24gdGhlIGluaXRpYWwgZ3JlcCBzZWFyY2gKKyAgICAjIFRoaXMgaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBtYWtpbmcgc3VyZSB0aGUgdmZzIGNhY2hlIGlzIGhvdAorICAgIHNzdGF0ZV9oYXJkY29kZV9jbWQgPSAiJXMgfCB4YXJncyAlcyB8ICVzIHwgeGFyZ3MgJXMgJXMiICUgKHNzdGF0ZV9zY2FuX2NtZCwgc3N0YXRlX2dyZXBfY21kLCBzc3RhdGVfZmlsZWxpc3RfY21kLCB4YXJnc19ub19lbXB0eV9ydW5fY21kLCBzc3RhdGVfc2VkX2NtZCkKKworICAgIGJiLm5vdGUoIlJlbW92aW5nIGhhcmRjb2RlZCBwYXRocyBmcm9tIHNzdGF0ZSBwYWNrYWdlOiAnJXMnIiAlIChzc3RhdGVfaGFyZGNvZGVfY21kKSkKKyAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2hhcmRjb2RlX2NtZCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIElmIHRoZSBmaXhtZWZuIGlzIGVtcHR5LCByZW1vdmUgaXQuLgorICAgIGlmIG9zLnN0YXQoZml4bWVmbikuc3Rfc2l6ZSA9PSAwOgorICAgICAgICBvcy5yZW1vdmUoZml4bWVmbikKKyAgICBlbHNlOgorICAgICAgICBiYi5ub3RlKCJSZXBsYWNpbmcgYWJzb2x1dGUgcGF0aHMgaW4gZml4bWVwYXRoIGZpbGU6ICclcyciICUgKHNzdGF0ZV9maWxlbGlzdF9yZWxhdGl2ZV9jbWQpKQorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoc3N0YXRlX2ZpbGVsaXN0X3JlbGF0aXZlX2NtZCwgc2hlbGw9VHJ1ZSkKK30KKworZGVmIHNzdGF0ZV9wYWNrYWdlKHNzLCBkKToKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgZGVmIG1ha2VfcmVsYXRpdmVfc3ltbGluayhwYXRoLCBvdXRwdXRwYXRoLCBkKToKKyAgICAgICAgIyBSZXBsYWNlIG91dCBhYnNvbHV0ZSBUTVBESVIgcGF0aHMgaW4gc3ltbGlua3Mgd2l0aCByZWxhdGl2ZSBvbmVzCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBsaW5rID0gb3MucmVhZGxpbmsocGF0aCkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGluayk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IGxpbmsuc3RhcnRzd2l0aCh0bXBkaXIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZGVwdGggPSBvdXRwdXRwYXRoLnJwYXJ0aXRpb24odG1wZGlyKVsyXS5jb3VudCgnLycpCisgICAgICAgIGJhc2UgPSBsaW5rLnBhcnRpdGlvbih0bXBkaXIpWzJdLnN0cmlwKCkKKyAgICAgICAgd2hpbGUgZGVwdGggPiAxOgorICAgICAgICAgICAgYmFzZSA9ICIvLi4iICsgYmFzZQorICAgICAgICAgICAgZGVwdGggLT0gMQorICAgICAgICBiYXNlID0gIi4iICsgYmFzZQorCisgICAgICAgIGJiLmRlYnVnKDIsICJSZXBsYWNpbmcgYWJzb2x1dGUgcGF0aCAlcyB3aXRoIHJlbGF0aXZlIHBhdGggJXMgZm9yICVzIiAlIChsaW5rLCBiYXNlLCBvdXRwdXRwYXRoKSkKKyAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgIG9zLnN5bWxpbmsoYmFzZSwgcGF0aCkKKworICAgIHRtcGRpciA9IGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKQorCisgICAgc3N0YXRlYnVpbGQgPSBkLmV4cGFuZCgiJHtXT1JLRElSfS9zc3RhdGUtYnVpbGQtJXMvIiAlIHNzWyd0YXNrJ10pCisgICAgc3N0YXRlcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKSArICdfJysgc3NbJ3Rhc2snXSArICIudGd6IgorICAgIGJiLnV0aWxzLnJlbW92ZShzc3RhdGVidWlsZCwgcmVjdXJzZT1UcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihzc3RhdGVidWlsZCkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHNzdGF0ZXBrZykpCisgICAgZm9yIHN0YXRlIGluIHNzWydkaXJzJ106CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzdGF0ZVsxXSk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBzcmNiYXNlID0gc3RhdGVbMF0ucnN0cmlwKCIvIikucnNwbGl0KCcvJywgMSlbMF0KKyAgICAgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHN0YXRlWzFdKToKKyAgICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIHNyY3BhdGggPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICAgICAgZHN0cGF0aCA9IHNyY3BhdGgucmVwbGFjZShzdGF0ZVsxXSwgc3RhdGVbMl0pCisgICAgICAgICAgICAgICAgbWFrZV9yZWxhdGl2ZV9zeW1saW5rKHNyY3BhdGgsIGRzdHBhdGgsIGQpCisgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgc3JjcGF0aCA9IG9zLnBhdGguam9pbih3YWxrcm9vdCwgZGlyKQorICAgICAgICAgICAgICAgIGRzdHBhdGggPSBzcmNwYXRoLnJlcGxhY2Uoc3RhdGVbMV0sIHN0YXRlWzJdKQorICAgICAgICAgICAgICAgIG1ha2VfcmVsYXRpdmVfc3ltbGluayhzcmNwYXRoLCBkc3RwYXRoLCBkKQorICAgICAgICBiYi5kZWJ1ZygyLCAiUHJlcGFyaW5nIHRyZWUgJXMgZm9yIHBhY2thZ2luZyBhdCAlcyIgJSAoc3RhdGVbMV0sIHNzdGF0ZWJ1aWxkICsgc3RhdGVbMF0pKQorICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUoc3RhdGVbMV0sIHNzdGF0ZWJ1aWxkICsgc3RhdGVbMF0pCisKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGZvciBwbGFpbiBpbiBzc1sncGxhaW5kaXJzJ106CisgICAgICAgIHBkaXIgPSBwbGFpbi5yZXBsYWNlKHdvcmtkaXIsIHNzdGF0ZWJ1aWxkKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocGxhaW4pCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihwZGlyKQorICAgICAgICBvZS5wYXRoLmNvcHloYXJkbGlua3RyZWUocGxhaW4sIHBkaXIpCisKKyAgICBkLnNldFZhcignU1NUQVRFX0JVSUxERElSJywgc3N0YXRlYnVpbGQpCisgICAgZC5zZXRWYXIoJ1NTVEFURV9QS0cnLCBzc3RhdGVwa2cpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ1NTVEFURUNSRUFURUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgKyBbJ3NzdGF0ZV9jcmVhdGVfcGFja2FnZSddICsgXAorICAgICAgICAgICAgIChkLmdldFZhcignU1NUQVRFUE9TVENSRUFURUZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorICAKKyAgICBiYi5zaWdnZW4uZHVtcF90aGlzX3Rhc2soc3N0YXRlcGtnICsgIi5zaWdpbmZvIiwgZCkKKworICAgIHJldHVybgorCitkZWYgcHN0YWdpbmdfZmV0Y2goc3N0YXRlZmV0Y2gsIHNzdGF0ZXBrZywgZCk6CisgICAgaW1wb3J0IGJiLmZldGNoMgorCisgICAgIyBPbmx5IHRyeSBhbmQgZmV0Y2ggaWYgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgYSBtaXJyb3IKKyAgICBtaXJyb3JzID0gZC5nZXRWYXIoJ1NTVEFURV9NSVJST1JTJywgVHJ1ZSkKKyAgICBpZiBub3QgbWlycm9yczoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIENvcHkgdGhlIGRhdGEgb2JqZWN0IGFuZCBvdmVycmlkZSBETF9ESVIgYW5kIFNSQ19VUkkKKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgIGRsZGlyID0gbG9jYWxkYXRhLmV4cGFuZCgiJHtTU1RBVEVfRElSfSIpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRsZGlyKQorCisgICAgbG9jYWxkYXRhLmRlbFZhcignTUlSUk9SUycpCisgICAgbG9jYWxkYXRhLnNldFZhcignRklMRVNQQVRIJywgZGxkaXIpCisgICAgbG9jYWxkYXRhLnNldFZhcignRExfRElSJywgZGxkaXIpCisgICAgbG9jYWxkYXRhLnNldFZhcignUFJFTUlSUk9SUycsIG1pcnJvcnMpCisKKyAgICAjIGlmIEJCX05PX05FVFdPUksgaXMgc2V0IGJ1dCB3ZSBhbHNvIGhhdmUgU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLLAorICAgICMgd2UnbGwgd2FudCB0byBhbGxvdyBuZXR3b3JrIGFjY2VzcyBmb3IgdGhlIGN1cnJlbnQgc2V0IG9mIGZldGNoZXMuCisgICAgaWYgbG9jYWxkYXRhLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpID09ICIxIiBhbmQgbG9jYWxkYXRhLmdldFZhcignU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICBsb2NhbGRhdGEuZGVsVmFyKCdCQl9OT19ORVRXT1JLJykKKworICAgICMgVHJ5IGEgZmV0Y2ggZnJvbSB0aGUgc3N0YXRlIG1pcnJvciwgaWYgaXQgZmFpbHMganVzdCByZXR1cm4gYW5kCisgICAgIyB3ZSB3aWxsIGJ1aWxkIHRoZSBwYWNrYWdlCisgICAgdXJpcyA9IFsnZmlsZTovL3swfScuZm9ybWF0KHNzdGF0ZWZldGNoKSwKKyAgICAgICAgICAgICdmaWxlOi8vezB9LnNpZ2luZm8nLmZvcm1hdChzc3RhdGVmZXRjaCldCisgICAgaWYgYmIudXRpbHMudG9fYm9vbGVhbihkLmdldFZhcigiU1NUQVRFX1ZFUklGWV9TSUciLCBUcnVlKSwgRmFsc2UpOgorICAgICAgICB1cmlzICs9IFsnZmlsZTovL3swfS5zaWcnLmZvcm1hdChzc3RhdGVmZXRjaCldCisKKyAgICBmb3Igc3JjdXJpIGluIHVyaXM6CisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NSQ19VUkknLCBzcmN1cmkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goW3NyY3VyaV0sIGxvY2FsZGF0YSwgY2FjaGU9RmFsc2UpCisgICAgICAgICAgICBmZXRjaGVyLmRvd25sb2FkKCkKKworICAgICAgICAgICAgIyBOZWVkIHRvIG9wdGltaXNlIHRoaXMsIGlmIHVzaW5nIGZpbGU6Ly8gdXJscywgdGhlIGZldGNoZXIganVzdCBjaGFuZ2VzIHRoZSBsb2NhbCBwYXRoCisgICAgICAgICAgICAjIEZvciBub3cgd29yayBhcm91bmQgYnkgc3ltbGlua2luZworICAgICAgICAgICAgbG9jYWxwYXRoID0gYmIuZGF0YS5leHBhbmQoZmV0Y2hlci5sb2NhbHBhdGgoc3JjdXJpKSwgbG9jYWxkYXRhKQorICAgICAgICAgICAgaWYgbG9jYWxwYXRoICE9IHNzdGF0ZXBrZyBhbmQgb3MucGF0aC5leGlzdHMobG9jYWxwYXRoKSBhbmQgbm90IG9zLnBhdGguZXhpc3RzKHNzdGF0ZXBrZyk6CisgICAgICAgICAgICAgICAgb3Muc3ltbGluayhsb2NhbHBhdGgsIHNzdGF0ZXBrZykKKworICAgICAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb246CisgICAgICAgICAgICBicmVhaworCitkZWYgc3N0YXRlX3NldHNjZW5lKGQpOgorICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorICAgIGFjY2VsZXJhdGUgPSBzc3RhdGVfaW5zdGFsbHBrZyhzaGFyZWRfc3RhdGUsIGQpCisgICAgaWYgbm90IGFjY2VsZXJhdGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIk5vIHN1aXRhYmxlIHN0YWdpbmcgcGFja2FnZSBmb3VuZCIpCisKK3B5dGhvbiBzc3RhdGVfdGFza19wcmVmdW5jICgpIHsKKyAgICBzaGFyZWRfc3RhdGUgPSBzc3RhdGVfc3RhdGVfZnJvbXZhcnMoZCkKKyAgICBzc3RhdGVfY2xlYW4oc2hhcmVkX3N0YXRlLCBkKQorfQorCitweXRob24gc3N0YXRlX3Rhc2tfcG9zdGZ1bmMgKCkgeworICAgIHNoYXJlZF9zdGF0ZSA9IHNzdGF0ZV9zdGF0ZV9mcm9tdmFycyhkKQorICAgIHNzdGF0ZV9pbnN0YWxsKHNoYXJlZF9zdGF0ZSwgZCkKKyAgICBmb3IgaW50ZXJjZXB0IGluIHNoYXJlZF9zdGF0ZVsnaW50ZXJjZXB0ZnVuY3MnXToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGludGVyY2VwdCwgZCkKKyAgICBvbWFzayA9IG9zLnVtYXNrKDAwMikKKyAgICBpZiBvbWFzayAhPSAwMDI6CisgICAgICAgYmIubm90ZSgiVXNpbmcgdW1hc2sgMDAyIChub3QgJTBvKSBmb3Igc3N0YXRlIHBhY2thZ2luZyIgJSBvbWFzaykKKyAgICBzc3RhdGVfcGFja2FnZShzaGFyZWRfc3RhdGUsIGQpCisgICAgb3MudW1hc2sob21hc2spCit9CisgIAorCisjCisjIFNoZWxsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgc3N0YXRlIHBhY2thZ2UgZnJvbSBhIGRpcmVjdG9yeQorIyBzZXQgYXMgU1NUQVRFX0JVSUxERElSLiBXaWxsIGJlIHJ1biBmcm9tIHdpdGhpbiBTU1RBVEVfQlVJTERESVIuCisjCitzc3RhdGVfY3JlYXRlX3BhY2thZ2UgKCkgeworCVRGSUxFPWBta3RlbXAgJHtTU1RBVEVfUEtHfS5YWFhYWFhYWGAKKwkjIE5lZWQgdG8gaGFuZGxlIGVtcHR5IGRpcmVjdG9yaWVzCisJaWYgWyAiJChscyAtQSkiIF07IHRoZW4KKwkJc2V0ICtlCisJCXRhciAtY3pmICRURklMRSAqCisJCXJldD0kPworCQlpZiBbICRyZXQgLW5lIDAgXSAmJiBbICRyZXQgLW5lIDEgXTsgdGhlbgorCQkJZXhpdCAxCisJCWZpCisJCXNldCAtZQorCWVsc2UKKwkJdGFyIC1jeiAtLWZpbGU9JFRGSUxFIC0tZmlsZXMtZnJvbT0vZGV2L251bGwKKwlmaQorCWNobW9kIDA2NjQgJFRGSUxFIAorCW12IC1mICRURklMRSAke1NTVEFURV9QS0d9CisKKwlpZiBbIC1uICIke1NTVEFURV9TSUdfS0VZfSIgXTsgdGhlbgorCQlybSAtZiAke1NTVEFURV9QS0d9LnNpZworCQllY2hvICR7U1NUQVRFX1NJR19QQVNTUEhSQVNFfSB8IGdwZyAtLWJhdGNoIC0tcGFzc3BocmFzZS1mZCAwIC0tZGV0YWNoLXNpZ24gLS1sb2NhbC11c2VyICR7U1NUQVRFX1NJR19LRVl9IC0tb3V0cHV0ICR7U1NUQVRFX1BLR30uc2lnICR7U1NUQVRFX1BLR30KKwlmaQorCisJY2QgJHtXT1JLRElSfQorCXJtIC1yZiAke1NTVEFURV9CVUlMRERJUn0KK30KKworIworIyBTaGVsbCBmdW5jdGlvbiB0byBkZWNvbXByZXNzIGFuZCBwcmVwYXJlIGEgcGFja2FnZSBmb3IgaW5zdGFsbGF0aW9uCisjIFdpbGwgYmUgcnVuIGZyb20gd2l0aGluIFNTVEFURV9JTlNURElSLgorIworc3N0YXRlX3VucGFja19wYWNrYWdlICgpIHsKKwl0YXIgLXhtdnpmICR7U1NUQVRFX1BLR30KKwkjIFVzZSAiISAtdyB8fCIgdG8gcmV0dXJuIHRydWUgZm9yIHJlYWQgb25seSBmaWxlcworCVsgISAtdyAke1NTVEFURV9QS0d9IF0gfHwgdG91Y2ggLS1uby1kZXJlZmVyZW5jZSAke1NTVEFURV9QS0d9Cit9CisKK0JCX0hBU0hDSEVDS19GVU5DVElPTiA9ICJzc3RhdGVfY2hlY2toYXNoZXMiCisKK2RlZiBzc3RhdGVfY2hlY2toYXNoZXMoc3FfZm4sIHNxX3Rhc2ssIHNxX2hhc2gsIHNxX2hhc2hmbiwgZCwgc2lnaW5mbz1GYWxzZSk6CisKKyAgICByZXQgPSBbXQorICAgIG1pc3NlZCA9IFtdCisgICAgZXh0ZW5zaW9uID0gIi50Z3oiCisgICAgaWYgc2lnaW5mbzoKKyAgICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uICsgIi5zaWdpbmZvIgorCisgICAgZGVmIGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpOgorICAgICAgICAjIE1hZ2ljIGRhdGEgZnJvbSBCQl9IQVNIRklMRU5BTUUKKyAgICAgICAgc3BsaXRoYXNoZm4gPSBzcV9oYXNoZm5bdGFza10uc3BsaXQoIiAiKQorICAgICAgICBzcGVjID0gc3BsaXRoYXNoZm5bMV0KKyAgICAgICAgZXh0cmFwYXRoID0gc3BsaXRoYXNoZm5bMF0KKworICAgICAgICB0bmFtZSA9IHNxX3Rhc2tbdGFza11bMzpdCisKKyAgICAgICAgaWYgdG5hbWUgaW4gWyJmZXRjaCIsICJ1bnBhY2siLCAicGF0Y2giLCAicG9wdWxhdGVfbGljIiwgInByZWNvbmZpZ3VyZSJdIGFuZCBzcGxpdGhhc2hmblsyXToKKyAgICAgICAgICAgIHNwZWMgPSBzcGxpdGhhc2hmblsyXQorICAgICAgICAgICAgZXh0cmFwYXRoID0gIiIKKworICAgICAgICByZXR1cm4gc3BlYywgZXh0cmFwYXRoLCB0bmFtZQorCisKKyAgICBmb3IgdGFzayBpbiByYW5nZShsZW4oc3FfZm4pKToKKworICAgICAgICBzcGVjLCBleHRyYXBhdGgsIHRuYW1lID0gZ2V0cGF0aGNvbXBvbmVudHModGFzaywgZCkKKworICAgICAgICBzc3RhdGVmaWxlID0gZC5leHBhbmQoIiR7U1NUQVRFX0RJUn0vIiArIGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyBleHRlbnNpb24pCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3N0YXRlZmlsZSk6CisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBGb3VuZCB2YWxpZCBzc3RhdGUgZmlsZSAlcyIgJSBzc3RhdGVmaWxlKQorICAgICAgICAgICAgcmV0LmFwcGVuZCh0YXNrKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1pc3NlZC5hcHBlbmQodGFzaykKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IExvb2tlZCBmb3IgYnV0IGRpZG4ndCBmaW5kIGZpbGUgJXMiICUgc3N0YXRlZmlsZSkKKworICAgIG1pcnJvcnMgPSBkLmdldFZhcigiU1NUQVRFX01JUlJPUlMiLCBUcnVlKQorICAgIGlmIG1pcnJvcnM6CisgICAgICAgICMgQ29weSB0aGUgZGF0YSBvYmplY3QgYW5kIG92ZXJyaWRlIERMX0RJUiBhbmQgU1JDX1VSSQorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgZGxkaXIgPSBsb2NhbGRhdGEuZXhwYW5kKCIke1NTVEFURV9ESVJ9IikKKyAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignTUlSUk9SUycpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0ZJTEVTUEFUSCcsIGRsZGlyKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdETF9ESVInLCBkbGRpcikKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFJFTUlSUk9SUycsIG1pcnJvcnMpCisKKyAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZSB1c2luZyBwcmVtaXJyb3Igb2Y6ICVzIiAlIG1pcnJvcnMpCisKKyAgICAgICAgIyBpZiBCQl9OT19ORVRXT1JLIGlzIHNldCBidXQgd2UgYWxzbyBoYXZlIFNTVEFURV9NSVJST1JfQUxMT1dfTkVUV09SSywKKyAgICAgICAgIyB3ZSdsbCB3YW50IHRvIGFsbG93IG5ldHdvcmsgYWNjZXNzIGZvciB0aGUgY3VycmVudCBzZXQgb2YgZmV0Y2hlcy4KKyAgICAgICAgaWYgbG9jYWxkYXRhLmdldFZhcignQkJfTk9fTkVUV09SSycsIFRydWUpID09ICIxIiBhbmQgbG9jYWxkYXRhLmdldFZhcignU1NUQVRFX01JUlJPUl9BTExPV19ORVRXT1JLJywgVHJ1ZSkgPT0gIjEiOgorICAgICAgICAgICAgbG9jYWxkYXRhLmRlbFZhcignQkJfTk9fTkVUV09SSycpCisKKyAgICAgICAgZnJvbSBiYi5mZXRjaDIgaW1wb3J0IEZldGNoQ29ubmVjdGlvbkNhY2hlCisgICAgICAgIGRlZiBjaGVja3N0YXR1c19pbml0KHRocmVhZF93b3JrZXIpOgorICAgICAgICAgICAgdGhyZWFkX3dvcmtlci5jb25uZWN0aW9uX2NhY2hlID0gRmV0Y2hDb25uZWN0aW9uQ2FjaGUoKQorCisgICAgICAgIGRlZiBjaGVja3N0YXR1c19lbmQodGhyZWFkX3dvcmtlcik6CisgICAgICAgICAgICB0aHJlYWRfd29ya2VyLmNvbm5lY3Rpb25fY2FjaGUuY2xvc2VfY29ubmVjdGlvbnMoKQorCisgICAgICAgIGRlZiBjaGVja3N0YXR1cyh0aHJlYWRfd29ya2VyLCBhcmcpOgorICAgICAgICAgICAgKHRhc2ssIHNzdGF0ZWZpbGUpID0gYXJnCisKKyAgICAgICAgICAgIGxvY2FsZGF0YTIgPSBiYi5kYXRhLmNyZWF0ZUNvcHkobG9jYWxkYXRhKQorICAgICAgICAgICAgc3JjdXJpID0gImZpbGU6Ly8iICsgc3N0YXRlZmlsZQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1JDX1VSSScsIHNyY3VyaSkKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICJTU3RhdGU6IEF0dGVtcHRpbmcgdG8gZmV0Y2ggJXMiICUgc3JjdXJpKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChzcmN1cmkuc3BsaXQoKSwgbG9jYWxkYXRhMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uX2NhY2hlPXRocmVhZF93b3JrZXIuY29ubmVjdGlvbl9jYWNoZSkKKyAgICAgICAgICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKKyAgICAgICAgICAgICAgICBiYi5kZWJ1ZygyLCAiU1N0YXRlOiBTdWNjZXNzZnVsIGZldGNoIHRlc3QgZm9yICVzIiAlIHNyY3VyaSkKKyAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgaWYgdGFzayBpbiBtaXNzZWQ6CisgICAgICAgICAgICAgICAgICAgIG1pc3NlZC5yZW1vdmUodGFzaykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBtaXNzZWQuYXBwZW5kKHRhc2spCisgICAgICAgICAgICAgICAgYmIuZGVidWcoMiwgIlNTdGF0ZTogVW5zdWNjZXNzZnVsIGZldGNoIHRlc3QgZm9yICVzIiAlIHNyY3VyaSkKKyAgICAgICAgICAgICAgICBwYXNzICAgICAKKworICAgICAgICB0YXNrbGlzdCA9IFtdCisgICAgICAgIGZvciB0YXNrIGluIHJhbmdlKGxlbihzcV9mbikpOgorICAgICAgICAgICAgaWYgdGFzayBpbiByZXQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyBleHRlbnNpb24pCisgICAgICAgICAgICB0YXNrbGlzdC5hcHBlbmQoKHRhc2ssIHNzdGF0ZWZpbGUpKQorCisgICAgICAgIGlmIHRhc2tsaXN0OgorICAgICAgICAgICAgYmIubm90ZSgiQ2hlY2tpbmcgc3N0YXRlIG1pcnJvciBvYmplY3QgYXZhaWxhYmlsaXR5IChmb3IgJXMgb2JqZWN0cykiICUgbGVuKHRhc2tsaXN0KSkKKyAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKyAgICAgICAgICAgIG5wcm9jID0gbWluKG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSwgbGVuKHRhc2tsaXN0KSkKKworICAgICAgICAgICAgcG9vbCA9IG9lLnV0aWxzLlRocmVhZGVkUG9vbChucHJvYywgbGVuKHRhc2tsaXN0KSwKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyX2luaXQ9Y2hlY2tzdGF0dXNfaW5pdCwgd29ya2VyX2VuZD1jaGVja3N0YXR1c19lbmQpCisgICAgICAgICAgICBmb3IgdCBpbiB0YXNrbGlzdDoKKyAgICAgICAgICAgICAgICBwb29sLmFkZF90YXNrKGNoZWNrc3RhdHVzLCB0KQorICAgICAgICAgICAgcG9vbC5zdGFydCgpCisgICAgICAgICAgICBwb29sLndhaXRfY29tcGxldGlvbigpCisKKyAgICBpbmhlcml0bGlzdCA9IGQuZ2V0VmFyKCJJTkhFUklUIiwgVHJ1ZSkKKyAgICBpZiAidG9hc3RlciIgaW4gaW5oZXJpdGxpc3Q6CisgICAgICAgIGV2ZGF0YSA9IHsnbWlzc2VkJzogW10sICdmb3VuZCc6IFtdfTsKKyAgICAgICAgZm9yIHRhc2sgaW4gbWlzc2VkOgorICAgICAgICAgICAgc3BlYywgZXh0cmFwYXRoLCB0bmFtZSA9IGdldHBhdGhjb21wb25lbnRzKHRhc2ssIGQpCisgICAgICAgICAgICBzc3RhdGVmaWxlID0gZC5leHBhbmQoZXh0cmFwYXRoICsgZ2VuZXJhdGVfc3N0YXRlZm4oc3BlYywgc3FfaGFzaFt0YXNrXSwgZCkgKyAiXyIgKyB0bmFtZSArICIudGd6IikKKyAgICAgICAgICAgIGV2ZGF0YVsnbWlzc2VkJ10uYXBwZW5kKCAoc3FfZm5bdGFza10sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10sIHNzdGF0ZWZpbGUgKSApCisgICAgICAgIGZvciB0YXNrIGluIHJldDoKKyAgICAgICAgICAgIHNwZWMsIGV4dHJhcGF0aCwgdG5hbWUgPSBnZXRwYXRoY29tcG9uZW50cyh0YXNrLCBkKQorICAgICAgICAgICAgc3N0YXRlZmlsZSA9IGQuZXhwYW5kKGV4dHJhcGF0aCArIGdlbmVyYXRlX3NzdGF0ZWZuKHNwZWMsIHNxX2hhc2hbdGFza10sIGQpICsgIl8iICsgdG5hbWUgKyAiLnRneiIpCisgICAgICAgICAgICBldmRhdGFbJ2ZvdW5kJ10uYXBwZW5kKCAoc3FfZm5bdGFza10sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10sIHNzdGF0ZWZpbGUgKSApCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTWlzc2VkU3N0YXRlIiwgZXZkYXRhKSwgZCkKKworICAgIGlmIGhhc2F0dHIoYmIucGFyc2Uuc2lnZ2VuLCAiY2hlY2toYXNoZXMiKToKKyAgICAgICAgYmIucGFyc2Uuc2lnZ2VuLmNoZWNraGFzaGVzKG1pc3NlZCwgcmV0LCBzcV9mbiwgc3FfdGFzaywgc3FfaGFzaCwgc3FfaGFzaGZuLCBkKQorCisgICAgcmV0dXJuIHJldAorCitCQl9TRVRTQ0VORV9ERVBWQUxJRCA9ICJzZXRzY2VuZV9kZXB2YWxpZCIKKworZGVmIHNldHNjZW5lX2RlcHZhbGlkKHRhc2ssIHRhc2tkZXBlbmRlZXMsIG5vdG5lZWRlZCwgZCk6CisgICAgIyB0YXNrZGVwZW5kZWVzIGlzIGEgZGljdCBvZiB0YXNrcyB3aGljaCBkZXBlbmQgb24gdGFzaywgZWFjaCBiZWluZyBhIDMgaXRlbSBsaXN0IG9mIFtQTiwgVEFTS05BTUUsIEZJTEVOQU1FXQorICAgICMgdGFzayBpcyBpbmNsdWRlZCBpbiB0YXNrZGVwZW5kZWVzIHRvbworCisgICAgYmIuZGVidWcoMiwgIkNvbnNpZGVyaW5nIHNldHNjZW5lIHRhc2s6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1t0YXNrXSkpKQorCisgICAgZGVmIGlzTmF0aXZlQ3Jvc3MoeCk6CisgICAgICAgIHJldHVybiB4LmVuZHN3aXRoKCItbmF0aXZlIikgb3IgIi1jcm9zcy0iIGluIHggb3IgIi1jcm9zc3NkayIgaW4geAorCisgICAgZGVmIGlzUG9zdEluc3REZXAoeCk6CisgICAgICAgIGlmIHggaW4gWyJxZW11LW5hdGl2ZSIsICJnZGstcGl4YnVmLW5hdGl2ZSIsICJxZW11d3JhcHBlci1jcm9zcyIsICJkZXBtb2R3cmFwcGVyLWNyb3NzIiwgInN5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZSIsICJndGstaWNvbi11dGlscy1uYXRpdmUiXToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBXZSBvbmx5IG5lZWQgdG8gdHJpZ2dlciBwb3B1bGF0ZV9saWMgdGhyb3VnaCBkaXJlY3QgZGVwZW5kZW5jaWVzCisgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAiZG9fcG9wdWxhdGVfbGljIjoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGZvciBkZXAgaW4gdGFza2RlcGVuZGVlczoKKyAgICAgICAgYmIuZGVidWcoMiwgIiAgY29uc2lkZXJpbmcgZGVwZW5kZW5jeTogJXMiICUgKHN0cih0YXNrZGVwZW5kZWVzW2RlcF0pKSkKKyAgICAgICAgaWYgdGFzayA9PSBkZXA6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBkZXAgaW4gbm90bmVlZGVkOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBkb19wYWNrYWdlX3dyaXRlXyogYW5kIGRvX3BhY2thZ2UgZG9lc24ndCBuZWVkIGRvX3BhY2thZ2UKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAiZG9fcGFja2FnZSIgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2UnLCAnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZG9fcGFja2FnZWRhdGEnLCAnZG9fcGFja2FnZV9xYSddOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBkb19wYWNrYWdlX3dyaXRlXyogYW5kIGRvX3BhY2thZ2UgZG9lc24ndCBuZWVkIGRvX3BvcHVsYXRlX3N5c3Jvb3QsIHVubGVzcyBpcyBhIHBvc3RpbnN0YWxsIGRlcGVuZGVuY3kKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2UnLCAnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nLCAnZG9fcGFja2FnZWRhdGEnLCAnZG9fcGFja2FnZV9xYSddOgorICAgICAgICAgICAgaWYgaXNQb3N0SW5zdERlcCh0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdKSBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzFdIGluIFsnZG9fcGFja2FnZV93cml0ZV9kZWInLCAnZG9fcGFja2FnZV93cml0ZV9pcGsnLCAnZG9fcGFja2FnZV93cml0ZV9ycG0nXToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgTmF0aXZlL0Nyb3NzIHBhY2thZ2VzIGRvbid0IGV4aXN0IGFuZCBhcmUgbm9leGVjIGFueXdheQorICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSkgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSBpbiBbJ2RvX3BhY2thZ2Vfd3JpdGVfZGViJywgJ2RvX3BhY2thZ2Vfd3JpdGVfaXBrJywgJ2RvX3BhY2thZ2Vfd3JpdGVfcnBtJywgJ2RvX3BhY2thZ2VkYXRhJywgJ2RvX3BhY2thZ2UnLCAnZG9fcGFja2FnZV9xYSddOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIENvbnNpZGVyIHN5c3Jvb3QgZGVwZW5kaW5nIG9uIHN5c3Jvb3QgdGFza3MKKyAgICAgICAgaWYgdGFza2RlcGVuZGVlc1t0YXNrXVsxXSA9PSAnZG9fcG9wdWxhdGVfc3lzcm9vdCcgYW5kIHRhc2tkZXBlbmRlZXNbZGVwXVsxXSA9PSAnZG9fcG9wdWxhdGVfc3lzcm9vdCc6CisgICAgICAgICAgICAjIGJhc2UtcGFzc3dkL3NoYWRvdy1zeXNyb290IGRvbid0IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW2RlcF1bMF0uZW5kc3dpdGgoKCJiYXNlLXBhc3N3ZCIsICJzaGFkb3ctc3lzcm9vdCIpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBOb3RoaW5nIG5lZWQgZGVwZW5kIG9uIGxpYmMtaW5pdGlhbC9nY2MtY3Jvc3MtaW5pdGlhbAorICAgICAgICAgICAgaWYgIi1pbml0aWFsIiBpbiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzBdOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIE5hdGl2ZS9Dcm9zcyBwb3B1bGF0ZV9zeXNyb290IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbdGFza11bMF0pIGFuZCBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAjIFRhcmdldCBwb3B1bGF0ZV9zeXNyb290IGRlcGVuZGVkIG9uIGJ5IGNyb3NzIHRvb2xzIG5lZWQgdG8gYmUgaW5zdGFsbGVkCisgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbZGVwXVswXSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICAjIE5hdGl2ZS9jcm9zcyB0b29scyBkZXBlbmRlZCB1cG9uIGJ5IHRhcmdldCBzeXNyb290IGFyZSBub3QgbmVlZGVkCisgICAgICAgICAgICBpZiBpc05hdGl2ZUNyb3NzKHRhc2tkZXBlbmRlZXNbdGFza11bMF0pOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIFRhcmdldCBwb3B1bGF0ZV9zeXNyb290IG5lZWQgdGhlaXIgZGVwZW5kZW5jaWVzCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICdkb19zaGFyZWRfd29ya2Rpcic6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgVGhpcyBpcyBkdWUgdG8gdGhlIFtkZXBlbmRzXSBpbiB1c2VyYWRkLmJiY2xhc3MgY29tcGxpY2F0aW5nIG1hdHRlcnMKKyAgICAgICAgIyBUaGUgbG9naWMgKmlzKiByZXZlcnNlZCBoZXJlIGR1ZSB0byB0aGUgd2F5IGhhcmQgc2V0c2NlbmUgZGVwZW5kZW5jaWVzIGFyZSBpbmplY3RlZAorICAgICAgICBpZiB0YXNrZGVwZW5kZWVzW3Rhc2tdWzFdID09ICdkb19wYWNrYWdlJyBhbmQgdGFza2RlcGVuZGVlc1tkZXBdWzBdLmVuZHN3aXRoKCgnc2hhZG93LW5hdGl2ZScsICdzaGFkb3ctc3lzcm9vdCcsICdiYXNlLXBhc3N3ZCcsICdwc2V1ZG8tbmF0aXZlJykpIGFuZCB0YXNrZGVwZW5kZWVzW2RlcF1bMV0gPT0gJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIFNhZmUgZmFsbHRocm91Z2ggZGVmYXVsdAorICAgICAgICBiYi5kZWJ1ZygyLCAiIERlZmF1bHQgc2V0c2NlbmUgZGVwZW5kZW5jeSBmYWxsIHRocm91Z2ggZHVlIHRvIGRlcGVuZGVuY3k6ICVzIiAlIChzdHIodGFza2RlcGVuZGVlc1tkZXBdKSkpCisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKK2FkZGhhbmRsZXIgc3N0YXRlX2V2ZW50aGFuZGxlcgorc3N0YXRlX2V2ZW50aGFuZGxlcltldmVudG1hc2tdID0gImJiLmJ1aWxkLlRhc2tTdWNjZWVkZWQiCitweXRob24gc3N0YXRlX2V2ZW50aGFuZGxlcigpIHsKKyAgICBkID0gZS5kYXRhCisgICAgIyBXaGVuIHdlIHdyaXRlIGFuIHNzdGF0ZSBwYWNrYWdlIHdlIHJld3JpdGUgdGhlIFNTVEFURV9QS0cKKyAgICBzcGtnID0gZC5nZXRWYXIoJ1NTVEFURV9QS0cnLCBUcnVlKQorICAgIGlmIG5vdCBzcGtnLmVuZHN3aXRoKCIudGd6Iik6CisgICAgICAgIHRhc2tuYW1lID0gZC5nZXRWYXIoIkJCX1JVTlRBU0siLCBUcnVlKVszOl0KKyAgICAgICAgc3BlYyA9IGQuZ2V0VmFyKCdTU1RBVEVfUEtHU1BFQycsIFRydWUpCisgICAgICAgIHN3c3BlYyA9IGQuZ2V0VmFyKCdTU1RBVEVfU1dTUEVDJywgVHJ1ZSkKKyAgICAgICAgaWYgdGFza25hbWUgaW4gWyJmZXRjaCIsICJ1bnBhY2siLCAicGF0Y2giLCAicG9wdWxhdGVfbGljIiwgInByZWNvbmZpZ3VyZSJdIGFuZCBzd3NwZWM6CisgICAgICAgICAgICBkLnNldFZhcigiU1NUQVRFX1BLR1NQRUMiLCAiJHtTU1RBVEVfU1dTUEVDfSIpCisgICAgICAgICAgICBkLnNldFZhcigiU1NUQVRFX0VYVFJBUEFUSCIsICIiKQorICAgICAgICBzc3RhdGVwa2cgPSBkLmdldFZhcignU1NUQVRFX1BLRycsIFRydWUpCisgICAgICAgIGJiLnNpZ2dlbi5kdW1wX3RoaXNfdGFzayhzc3RhdGVwa2cgKyAnXycgKyB0YXNrbmFtZSArICIudGd6IiAiLnNpZ2luZm8iLCBkKQorfQorCitTU1RBVEVfUFJVTkVfT0JTT0xFVEVXT1JLRElSID0gIjEiCisKKyMgRXZlbnQgaGFuZGxlciB3aGljaCByZW1vdmVzIG1hbmlmZXN0cyBhbmQgc3RhbXBzIGZpbGUgZm9yCisjIHJlY2lwZXMgd2hpY2ggYXJlIG5vIGxvbmdlciByZWFjaGFibGUgaW4gYSBidWlsZCB3aGVyZSB0aGV5CisjIG9uY2Ugd2VyZS4KKyMgQWxzbyBvcHRpb25hbGx5IHJlbW92ZXMgdGhlIHdvcmtkaXIgb2YgdGhvc2UgdGFza3MvcmVjaXBlcworIworYWRkaGFuZGxlciBzc3RhdGVfZXZlbnRoYW5kbGVyMgorc3N0YXRlX2V2ZW50aGFuZGxlcjJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5SZWFjaGFibGVTdGFtcHMiCitweXRob24gc3N0YXRlX2V2ZW50aGFuZGxlcjIoKSB7CisgICAgaW1wb3J0IGdsb2IKKyAgICBkID0gZS5kYXRhCisgICAgc3RhbXBzID0gZS5zdGFtcHMudmFsdWVzKCkKKyAgICByZW1vdmV3b3JrZGlyID0gKGQuZ2V0VmFyKCJTU1RBVEVfUFJVTkVfT0JTT0xFVEVXT1JLRElSIiwgRmFsc2UpID09ICIxIikKKyAgICBzZWVuID0gW10KKyAgICBmb3IgYSBpbiBkLmdldFZhcigiU1NUQVRFX0FSQ0hTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgdG9yZW1vdmUgPSBbXQorICAgICAgICBpID0gZC5leHBhbmQoIiR7U1NUQVRFX01BTklGRVNUU30vaW5kZXgtIiArIGEpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdpdGggb3BlbihpLCAiciIpIGFzIGY6CisgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIChzdGFtcCwgbWFuaWZlc3QsIHdvcmtkaXIpID0gbC5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgc3RhbXAgbm90IGluIHN0YW1wczoKKyAgICAgICAgICAgICAgICAgICAgdG9yZW1vdmUuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgICAgIGlmIHN0YW1wIG5vdCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiU3RhbXAgJXMgaXMgbm90IHJlYWNoYWJsZSwgcmVtb3ZpbmcgcmVsYXRlZCBtYW5pZmVzdHMiICUgc3RhbXApCisgICAgICAgICAgICAgICAgICAgICAgICBzZWVuLmFwcGVuZChzdGFtcCkKKyAgICAgICAgZm9yIHIgaW4gdG9yZW1vdmU6CisgICAgICAgICAgICAoc3RhbXAsIG1hbmlmZXN0LCB3b3JrZGlyKSA9IHIuc3BsaXQoKQorICAgICAgICAgICAgZm9yIG0gaW4gZ2xvYi5nbG9iKG1hbmlmZXN0ICsgIi4qIik6CisgICAgICAgICAgICAgICAgc3N0YXRlX2NsZWFuX21hbmlmZXN0KG0sIGQpCisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc3RhbXAgKyAiKiIpCisgICAgICAgICAgICBpZiByZW1vdmV3b3JrZGlyOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZSh3b3JrZGlyLCByZWN1cnNlID0gVHJ1ZSkKKyAgICAgICAgICAgIGxpbmVzLnJlbW92ZShyKQorICAgICAgICB3aXRoIG9wZW4oaSwgInciKSBhcyBmOgorICAgICAgICAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZShsKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3N0YWdpbmcuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3ZWRkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy9zdGFnaW5nLmJiY2xhc3MKQEAgLTAsMCArMSwyMTggQEAKKworc3lzcm9vdF9zdGFnZV9kaXIoKSB7CisJc3JjPSIkMSIKKwlkZXN0PSIkMiIKKwkjIGlmIHRoZSBzcmMgZG9lc24ndCBleGlzdCBkb24ndCBkbyBhbnl0aGluZworCWlmIFsgISAtZCAiJHNyYyIgXTsgdGhlbgorCQkgcmV0dXJuCisJZmkKKworCW1rZGlyIC1wICIkZGVzdCIKKwkoCisJCWNkICRzcmMKKwkJZmluZCAuIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAkZGVzdAorCSkKK30KKworc3lzcm9vdF9zdGFnZV9saWJkaXIoKSB7CisJc3JjPSIkMSIKKwlkZXN0PSIkMiIKKworCXN5c3Jvb3Rfc3RhZ2VfZGlyICRzcmMgJGRlc3QKK30KKworc3lzcm9vdF9zdGFnZV9kaXJzKCkgeworCWZyb209IiQxIgorCXRvPSIkMiIKKworCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtpbmNsdWRlZGlyfSAkdG8ke2luY2x1ZGVkaXJ9CisJaWYgWyAiJHtCVUlMRF9TWVN9IiA9ICIke0hPU1RfU1lTfSIgXTsgdGhlbgorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7YmluZGlyfSAkdG8ke2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke3NiaW5kaXJ9ICR0byR7c2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2Jhc2VfYmluZGlyfSAkdG8ke2Jhc2VfYmluZGlyfQorCQlzeXNyb290X3N0YWdlX2RpciAkZnJvbSR7YmFzZV9zYmluZGlyfSAkdG8ke2Jhc2Vfc2JpbmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2xpYmV4ZWNkaXJ9ICR0byR7bGliZXhlY2Rpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke3N5c2NvbmZkaXJ9ICR0byR7c3lzY29uZmRpcn0KKwkJc3lzcm9vdF9zdGFnZV9kaXIgJGZyb20ke2xvY2Fsc3RhdGVkaXJ9ICR0byR7bG9jYWxzdGF0ZWRpcn0KKwlmaQorCWlmIFsgLWQgJGZyb20ke2xpYmRpcn0gXQorCXRoZW4KKwkJc3lzcm9vdF9zdGFnZV9saWJkaXIgJGZyb20ke2xpYmRpcn0gJHRvJHtsaWJkaXJ9CisJZmkKKwlpZiBbIC1kICRmcm9tJHtiYXNlX2xpYmRpcn0gXQorCXRoZW4KKwkJc3lzcm9vdF9zdGFnZV9saWJkaXIgJGZyb20ke2Jhc2VfbGliZGlyfSAkdG8ke2Jhc2VfbGliZGlyfQorCWZpCisJaWYgWyAtZCAkZnJvbSR7bm9uYXJjaF9iYXNlX2xpYmRpcn0gXQorCXRoZW4KKwkJc3lzcm9vdF9zdGFnZV9saWJkaXIgJGZyb20ke25vbmFyY2hfYmFzZV9saWJkaXJ9ICR0byR7bm9uYXJjaF9iYXNlX2xpYmRpcn0KKwlmaQorCXN5c3Jvb3Rfc3RhZ2VfZGlyICRmcm9tJHtkYXRhZGlyfSAkdG8ke2RhdGFkaXJ9CisJIyBXZSBkb24ndCBjYXJlIGFib3V0IGRvY3MvaW5mby9tYW5wYWdlcy9sb2NhbGVzCisJcm0gLXJmICR0byR7bWFuZGlyfS8gJHRvJHtkb2NkaXJ9LyAkdG8ke2luZm9kaXJ9LyAke3RvfSR7ZGF0YWRpcn0vbG9jYWxlLworCXJtIC1yZiAkdG8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy8gJHRvJHtkYXRhZGlyfS9mb250cy8gJHRvJHtkYXRhZGlyfS9waXhtYXBzLworfQorCitzeXNyb290X3N0YWdlX2FsbCgpIHsKKwlzeXNyb290X3N0YWdlX2RpcnMgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KK30KKworcHl0aG9uIHN5c3Jvb3Rfc3RyaXAgKCkgeworICAgIGltcG9ydCBzdGF0LCBlcnJubworCisgICAgZHZhciA9IGQuZ2V0VmFyKCdTWVNST09UX0RFU1RESVInLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKworICAgIG9zLmNoZGlyKGR2YXIpCisKKyAgICAjIFJldHVybiB0eXBlIChiaXRzKToKKyAgICAjIDAgLSBub3QgZWxmCisgICAgIyAxIC0gRUxGCisgICAgIyAyIC0gc3RyaXBwZWQKKyAgICAjIDQgLSBleGVjdXRhYmxlCisgICAgIyA4IC0gc2hhcmVkIGxpYnJhcnkKKyAgICAjIDE2IC0ga2VybmVsIG1vZHVsZQorICAgIGRlZiBpc0VMRihwYXRoKToKKyAgICAgICAgdHlwZSA9IDAKKyAgICAgICAgcmV0LCByZXN1bHQgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoImZpbGUgXCIlc1wiIiAlIHBhdGgucmVwbGFjZSgiXCIiLCAiXFxcIiIpKQorCisgICAgICAgIGlmIHJldDoKKyAgICAgICAgICAgIGJiLmVycm9yKCJzcGxpdF9hbmRfc3RyaXBfZmlsZXM6ICdmaWxlICVzJyBmYWlsZWQiICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiB0eXBlCisKKyAgICAgICAgIyBOb3Qgc3RyaXBwZWQKKyAgICAgICAgaWYgIkVMRiIgaW4gcmVzdWx0OgorICAgICAgICAgICAgdHlwZSB8PSAxCisgICAgICAgICAgICBpZiAibm90IHN0cmlwcGVkIiBub3QgaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGUgfD0gMgorICAgICAgICAgICAgaWYgImV4ZWN1dGFibGUiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDQKKyAgICAgICAgICAgIGlmICJzaGFyZWQiIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICB0eXBlIHw9IDgKKyAgICAgICAgcmV0dXJuIHR5cGUKKworCisgICAgZWxmZmlsZXMgPSB7fQorICAgIGlub2RlcyA9IHt9CisgICAgbGliZGlyID0gb3MucGF0aC5hYnNwYXRoKGR2YXIgKyBvcy5zZXAgKyBkLmdldFZhcigibGliZGlyIiwgVHJ1ZSkpCisgICAgYmFzZWxpYmRpciA9IG9zLnBhdGguYWJzcGF0aChkdmFyICsgb3Muc2VwICsgZC5nZXRWYXIoImJhc2VfbGliZGlyIiwgVHJ1ZSkpCisgICAgaWYgKGQuZ2V0VmFyKCdJTkhJQklUX1NZU1JPT1RfU1RSSVAnLCBUcnVlKSAhPSAnMScpOgorICAgICAgICAjCisgICAgICAgICMgRmlyc3QgbGV0cyBmaWd1cmUgb3V0IGFsbCBvZiB0aGUgZmlsZXMgd2UgbWF5IGhhdmUgdG8gcHJvY2VzcworICAgICAgICAjCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGR2YXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihyb290LCBmKQorCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsdGFyZ2V0ID0gb2UucGF0aC5yZWFscGF0aChmaWxlLCBkdmFyLCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcyA9IG9zLmxzdGF0KGx0YXJnZXQpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgKGVyciwgc3RyZXJyb3IpID0gZS5hcmdzCisgICAgICAgICAgICAgICAgICAgIGlmIGVyciAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAjIFNraXAgYnJva2VuIHN5bWxpbmtzCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IHM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBDaGVjayBpdHMgYW4gZXhjdXRhYmxlCisgICAgICAgICAgICAgICAgaWYgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWFVTUikgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWEdSUCkgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChmaWxlLnN0YXJ0c3dpdGgobGliZGlyKSBvciBmaWxlLnN0YXJ0c3dpdGgoYmFzZWxpYmRpcikpIGFuZCAiLnNvIiBpbiBmKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBpdCdzIGEgc3ltbGluaywgYW5kIHBvaW50cyB0byBhbiBFTEYgZmlsZSwgd2UgY2FwdHVyZSB0aGUgcmVhZGxpbmsgdGFyZ2V0CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZpbGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAjIEl0J3MgYSBmaWxlIChvciBoYXJkbGluayksIG5vdCBhIGxpbmsKKyAgICAgICAgICAgICAgICAgICAgIyAuLi5idXQgaXMgaXQgRUxGLCBhbmQgaXMgaXQgYWxyZWFkeSBzdHJpcHBlZD8KKyAgICAgICAgICAgICAgICAgICAgZWxmX2ZpbGUgPSBpc0VMRihmaWxlKQorICAgICAgICAgICAgICAgICAgICBpZiBlbGZfZmlsZSAmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbGZfZmlsZSAmIDI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiRmlsZSAnJXMnIGZyb20gJXMgd2FzIGFscmVhZHkgc3RyaXBwZWQsIHRoaXMgd2lsbCBwcmV2ZW50IGZ1dHVyZSBkZWJ1Z2dpbmchIiAlIChmaWxlW2xlbihkdmFyKTpdLCBwbikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcy5zdF9pbm8gaW4gaW5vZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmaWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmsoaW5vZGVzW3Muc3RfaW5vXSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGVzW3Muc3RfaW5vXSA9IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJyZWFrIGhhcmRsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIudXRpbHMuY29weWZpbGUoZmlsZSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGZmaWxlc1tmaWxlXSA9IGVsZl9maWxlCisKKyAgICAgICAgIworICAgICAgICAjIE5vdyBzdHJpcCB0aGVtIChpbiBwYXJhbGxlbCkKKyAgICAgICAgIworICAgICAgICBzdHJpcCA9IGQuZ2V0VmFyKCJTVFJJUCIsIFRydWUpCisgICAgICAgIHNmaWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlIGluIGVsZmZpbGVzOgorICAgICAgICAgICAgZWxmX2ZpbGUgPSBpbnQoZWxmZmlsZXNbZmlsZV0pCisgICAgICAgICAgICAjYmIubm90ZSgiU3RyaXAgJXMiICUgZmlsZSkKKyAgICAgICAgICAgIHNmaWxlcy5hcHBlbmQoKGZpbGUsIGVsZl9maWxlLCBzdHJpcCkpCisKKyAgICAgICAgb2UudXRpbHMubXVsdGlwcm9jZXNzX2V4ZWMoc2ZpbGVzLCBvZS5wYWNrYWdlLnJ1bnN0cmlwKQorfQorCitkb19wb3B1bGF0ZV9zeXNyb290W2RpcnNdID0gIiR7U1lTUk9PVF9ERVNURElSfSIKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbdW1hc2tdID0gIjAyMiIKKworYWRkdGFzayBwb3B1bGF0ZV9zeXNyb290IGFmdGVyIGRvX2luc3RhbGwKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTID89ICIiCitTWVNST09UX0RFU1RESVIgPSAiJHtXT1JLRElSfS9zeXNyb290LWRlc3RkaXIvIgorU1lTUk9PVF9MT0NLID0gIiR7U1RBR0lOR19ESVJ9L3N0YWdpbmcubG9jayIKKworIyBXZSBjbGVhbiBvdXQgYW55IGV4aXN0aW5nIHNzdGF0ZSBmcm9tIHRoZSBzeXNyb290IGlmIHdlIHJlcnVuIGNvbmZpZ3VyZQorcHl0aG9uIHN5c3Jvb3RfY2xlYW5zc3RhdGUgKCkgeworICAgIHNzID0gc3N0YXRlX3N0YXRlX2Zyb212YXJzKGQsICJwb3B1bGF0ZV9zeXNyb290IikKKyAgICBzc3RhdGVfY2xlYW4oc3MsIGQpCit9Citkb19jb25maWd1cmVbcHJlZnVuY3NdICs9ICJzeXNyb290X2NsZWFuc3N0YXRlIgorCisKK0JCX1NFVFNDRU5FX1ZFUklGWV9GVU5DVElPTiA9ICJzeXNyb290X2NoZWNraGFzaGVzIgorCitkZWYgc3lzcm9vdF9jaGVja2hhc2hlcyhjb3ZlcmVkLCB0YXNrbmFtZXMsIGZuaWRzLCBmbnMsIGQsIGludmFsaWR0YXNrcyA9IE5vbmUpOgorICAgIHByb2JsZW1zID0gc2V0KCkKKyAgICBjb25maWd1cmVmbmlkcyA9IHNldCgpCisgICAgaWYgbm90IGludmFsaWR0YXNrczoKKyAgICAgICAgaW52YWxpZHRhc2tzID0geHJhbmdlKGxlbih0YXNrbmFtZXMpKQorICAgIGZvciB0YXNrIGluIGludmFsaWR0YXNrczoKKyAgICAgICAgaWYgdGFza25hbWVzW3Rhc2tdID09ICJkb19jb25maWd1cmUiIGFuZCB0YXNrIG5vdCBpbiBjb3ZlcmVkOgorICAgICAgICAgICAgY29uZmlndXJlZm5pZHMuYWRkKGZuaWRzW3Rhc2tdKQorICAgIGZvciB0YXNrIGluIGNvdmVyZWQ6CisgICAgICAgIGlmIHRhc2tuYW1lc1t0YXNrXSA9PSAiZG9fcG9wdWxhdGVfc3lzcm9vdCIgYW5kIGZuaWRzW3Rhc2tdIGluIGNvbmZpZ3VyZWZuaWRzOgorICAgICAgICAgICAgcHJvYmxlbXMuYWRkKHRhc2spCisgICAgcmV0dXJuIHByb2JsZW1zCisKK3B5dGhvbiBkb19wb3B1bGF0ZV9zeXNyb290ICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInN5c3Jvb3Rfc3RhZ2VfYWxsIiwgZCkKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoInN5c3Jvb3Rfc3RyaXAiLCBkKQorICAgIGZvciBmIGluIChkLmdldFZhcignU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCk6CisgICAgICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYyhmLCBkKQorICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBtdWx0aXByb3YgPSBkLmdldFZhcigiTVVMVElfUFJPVklERVJfV0hJVEVMSVNUIiwgVHJ1ZSkuc3BsaXQoKQorICAgIHByb3ZkaXIgPSBkLmV4cGFuZCgiJHtTWVNST09UX0RFU1RESVJ9JHtiYXNlX3ByZWZpeH0vc3lzcm9vdC1wcm92aWRlcnMvIikKKyAgICBiYi51dGlscy5ta2RpcmhpZXIocHJvdmRpcikKKyAgICBmb3IgcCBpbiBkLmdldFZhcigiUFJPVklERVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBwIGluIG11bHRpcHJvdjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHAgPSBwLnJlcGxhY2UoIi8iLCAiXyIpCisgICAgICAgIHdpdGggb3Blbihwcm92ZGlyICsgcCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShwbikKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFt2YXJkZXBzXSArPSAiJHtTWVNST09UX1BSRVBST0NFU1NfRlVOQ1N9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFt2YXJkZXBzZXhjbHVkZV0gKz0gIk1VTFRJX1BST1ZJREVSX1dISVRFTElTVCIKKworU1NUQVRFVEFTS1MgKz0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb19wb3B1bGF0ZV9zeXNyb290W2NsZWFuZGlyc10gPSAiJHtTWVNST09UX0RFU1RESVJ9IgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0iCitkb19wb3B1bGF0ZV9zeXNyb290W3NzdGF0ZS1vdXRwdXRkaXJzXSA9ICIke1NUQUdJTkdfRElSX0hPU1R9LyIKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3RhbXAtZXh0cmEtaW5mb10gPSAiJHtNQUNISU5FfSIKKworcHl0aG9uIGRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgKCkgeworICAgIHNzdGF0ZV9zZXRzY2VuZShkKQorfQorYWRkdGFzayBkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvc3lzbGludXguYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGVmOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3N5c2xpbnV4LmJiY2xhc3MKQEAgLTAsMCArMSwxOTAgQEAKKyMgc3lzbGludXguYmJjbGFzcworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorCisjIFByb3ZpZGUgc3lzbGludXggc3BlY2lmaWMgZnVuY3Rpb25zIGZvciBidWlsZGluZyBib290YWJsZSBpbWFnZXMuCisKKyMgRXh0ZXJuYWwgdmFyaWFibGVzCisjICR7SU5JVFJEfSAtIGluZGljYXRlcyBhIGxpc3Qgb2YgZmlsZXN5c3RlbSBpbWFnZXMgdG8gY29uY2F0ZW5hdGUgYW5kIHVzZSBhcyBhbiBpbml0cmQgKG9wdGlvbmFsKQorIyAke1JPT1RGU30gLSBpbmRpY2F0ZXMgYSBmaWxlc3lzdGVtIGltYWdlIHRvIGluY2x1ZGUgYXMgdGhlIHJvb3QgZmlsZXN5c3RlbSAob3B0aW9uYWwpCisjICR7QVVUT19TWVNMSU5VWE1FTlV9IC0gc2V0IHRoaXMgdG8gMSB0byBlbmFibGUgY3JlYXRpbmcgYW4gYXV0b21hdGljIG1lbnUKKyMgJHtMQUJFTFN9IC0gYSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSBhdXRvbWF0aWMgY29uZmlnCisjICR7QVBQRU5EfSAtIGFuIG92ZXJyaWRlIGxpc3Qgb2YgYXBwZW5kIHN0cmluZ3MgZm9yIGVhY2ggbGFiZWwKKyMgJHtTWVNMSU5VWF9PUFRTfSAtIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBhZGQgdG8gdGhlIHN5c2xpbnV4IGZpbGUgJzsnIGRlbGltaXRlZAorIyAke1NZU0xJTlVYX1NQTEFTSH0gLSBBIGJhY2tncm91bmQgZm9yIHRoZSB2Z2EgYm9vdCBtZW51IGlmIHVzaW5nIHRoZSBib290IG1lbnUKKyMgJHtTWVNMSU5VWF9ERUZBVUxUX0NPTlNPTEV9IC0gc2V0IHRvICJjb25zb2xlPXR0eVgiIHRvIGNoYW5nZSBrZXJuZWwgYm9vdCBkZWZhdWx0IGNvbnNvbGUKKyMgJHtTWVNMSU5VWF9TRVJJQUx9IC0gU2V0IGFuIGFsdGVybmF0ZSBzZXJpYWwgcG9ydCBvciB0dXJuIG9mZiBzZXJpYWwgd2l0aCBlbXB0eSBzdHJpbmcKKyMgJHtTWVNMSU5VWF9TRVJJQUxfVFRZfSAtIFNldCBhbHRlcm5hdGUgY29uc29sZT10dHkuLi4ga2VybmVsIGJvb3QgYXJndW1lbnQKKyMgJHtTWVNMSU5VWF9LRVJORUxfQVJHU30gLSBBZGQgYWRkaXRpb25hbCBrZXJuZWwgYXJndW1lbnRzCisKK2RvX2Jvb3RpbWdbZGVwZW5kc10gKz0gIiR7TUxQUkVGSVh9c3lzbGludXg6ZG9fcG9wdWxhdGVfc3lzcm9vdCBcCisgICAgICAgICAgICAgICAgICAgICAgICBzeXNsaW51eC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworU1lTTElOVVhDRkcgID0gIiR7U30vc3lzbGludXguY2ZnIgorCitJU09MSU5VWERJUiA9ICIvaXNvbGludXgiCitTWVNMSU5VWERJUiA9ICIvIgorIyBUaGUga2VybmVsIGhhcyBhbiBpbnRlcm5hbCBkZWZhdWx0IGNvbnNvbGUsIHdoaWNoIHlvdSBjYW4gb3ZlcnJpZGUgd2l0aAorIyBhIGNvbnNvbGU9Li4uc29tZV90dHkuLi4KK1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRSA/PSAiIgorU1lTTElOVVhfU0VSSUFMID89ICIwIDExNTIwMCIKK1NZU0xJTlVYX1NFUklBTF9UVFkgPz0gImNvbnNvbGU9dHR5UzAsMTE1MjAwIgorSVNPX0JPT1RJTUcgPSAiaXNvbGludXgvaXNvbGludXguYmluIgorSVNPX0JPT1RDQVQgPSAiaXNvbGludXgvYm9vdC5jYXQiCitNS0lTT0ZTX09QVElPTlMgPSAiLW5vLWVtdWwtYm9vdCAtYm9vdC1sb2FkLXNpemUgNCAtYm9vdC1pbmZvLXRhYmxlIgorQVBQRU5EX3ByZXBlbmQgPSAiICR7U1lTTElOVVhfUk9PVH0gIgorCisjIE5lZWQgVVVJRCB1dGlsaXR5IGNvZGUuCitpbmhlcml0IGZzLXV1aWQKKworc3lzbGludXhfcG9wdWxhdGUoKSB7CisJREVTVD0kMQorCUJPT1RESVI9JDIKKwlDRkdOQU1FPSQzCisKKwlpbnN0YWxsIC1kICR7REVTVH0ke0JPT1RESVJ9CisKKwkjIEluc3RhbGwgdGhlIGNvbmZpZyBmaWxlcworCWluc3RhbGwgLW0gMDY0NCAke1NZU0xJTlVYQ0ZHfSAke0RFU1R9JHtCT09URElSfS8ke0NGR05BTUV9CisJaWYgWyAiJHtBVVRPX1NZU0xJTlVYTUVOVX0iID0gMSBdIDsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L3Zlc2FtZW51LmMzMiAke0RFU1R9JHtCT09URElSfS92ZXNhbWVudS5jMzIKKwkJaW5zdGFsbCAtbSAwNDQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9saWJjb20zMi5jMzIgJHtERVNUfSR7Qk9PVERJUn0vbGliY29tMzIuYzMyCisJCWluc3RhbGwgLW0gMDQ0NCAke1NUQUdJTkdfREFUQURJUn0vc3lzbGludXgvbGlidXRpbC5jMzIgJHtERVNUfSR7Qk9PVERJUn0vbGlidXRpbC5jMzIKKwkJaWYgWyAiJHtTWVNMSU5VWF9TUExBU0h9IiAhPSAiIiBdIDsgdGhlbgorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7U1lTTElOVVhfU1BMQVNIfSAke0RFU1R9JHtCT09URElSfS9zcGxhc2gubHNzCisJCWZpCisJZmkKK30KKworc3lzbGludXhfaXNvX3BvcHVsYXRlKCkgeworCWlzb19kaXI9JDEKKwlzeXNsaW51eF9wb3B1bGF0ZSAkaXNvX2RpciAke0lTT0xJTlVYRElSfSBpc29saW51eC5jZmcKKwlpbnN0YWxsIC1tIDA2NDQgJHtTVEFHSU5HX0RBVEFESVJ9L3N5c2xpbnV4L2lzb2xpbnV4LmJpbiAkaXNvX2RpciR7SVNPTElOVVhESVJ9CisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9sZGxpbnV4LmMzMiAkaXNvX2RpciR7SVNPTElOVVhESVJ9Cit9CisKK3N5c2xpbnV4X2hkZGltZ19wb3B1bGF0ZSgpIHsKKwloZGRfZGlyPSQxCisJc3lzbGludXhfcG9wdWxhdGUgJGhkZF9kaXIgJHtTWVNMSU5VWERJUn0gc3lzbGludXguY2ZnCisJaW5zdGFsbCAtbSAwNDQ0ICR7U1RBR0lOR19EQVRBRElSfS9zeXNsaW51eC9sZGxpbnV4LnN5cyAkaGRkX2RpciR7U1lTTElOVVhESVJ9L2xkbGludXguc3lzCit9CisKK3N5c2xpbnV4X2hkZGltZ19pbnN0YWxsKCkgeworCXN5c2xpbnV4ICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS5oZGRpbWcKK30KKworc3lzbGludXhfaGRkZGlyZWN0X2luc3RhbGwoKSB7CisJREVTVD0kMQorCXN5c2xpbnV4ICRERVNUCit9CisKK3B5dGhvbiBidWlsZF9zeXNsaW51eF9jZmcgKCkgeworICAgIGltcG9ydCBjb3B5CisgICAgaW1wb3J0IHN5cworCisgICAgd29ya2RpciA9IGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICBpZiBub3Qgd29ya2RpcjoKKyAgICAgICAgYmIuZXJyb3IoIldPUktESVIgbm90IGRlZmluZWQsIHVuYWJsZSB0byBwYWNrYWdlIikKKyAgICAgICAgcmV0dXJuCisgICAgICAgIAorICAgIGxhYmVscyA9IGQuZ2V0VmFyKCdMQUJFTFMnLCBUcnVlKQorICAgIGlmIG5vdCBsYWJlbHM6CisgICAgICAgIGJiLmRlYnVnKDEsICJMQUJFTFMgbm90IGRlZmluZWQsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKyAgICAKKyAgICBpZiBsYWJlbHMgPT0gW106CisgICAgICAgIGJiLmRlYnVnKDEsICJObyBsYWJlbHMsIG5vdGhpbmcgdG8gZG8iKQorICAgICAgICByZXR1cm4KKworICAgIGNmaWxlID0gZC5nZXRWYXIoJ1NZU0xJTlVYQ0ZHJywgVHJ1ZSkKKyAgICBpZiBub3QgY2ZpbGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoJ1VuYWJsZSB0byByZWFkIFNZU0xJTlVYQ0ZHJykKKworICAgIHRyeToKKyAgICAgICAgY2ZnZmlsZSA9IGZpbGUoY2ZpbGUsICd3JykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmFpc2UgYmIuYnVpbGQuZnVuY0ZhaWxlZCgnVW5hYmxlIHRvIG9wZW4gJXMnICUgKGNmaWxlKSkKKworICAgIGNmZ2ZpbGUud3JpdGUoJyMgQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IE9FXG4nKQorCisgICAgb3B0cyA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9PUFRTJywgVHJ1ZSkKKworICAgIGlmIG9wdHM6CisgICAgICAgIGZvciBvcHQgaW4gb3B0cy5zcGxpdCgnOycpOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnJXNcbicgJSBvcHQpCisKKyAgICBjZmdmaWxlLndyaXRlKCdBTExPV09QVElPTlMgMVxuJyk7CisgICAgc3lzbGludXhfZGVmYXVsdF9jb25zb2xlID0gZC5nZXRWYXIoJ1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRScsIFRydWUpCisgICAgc3lzbGludXhfc2VyaWFsX3R0eSA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9TRVJJQUxfVFRZJywgVHJ1ZSkKKyAgICBzeXNsaW51eF9zZXJpYWwgPSBkLmdldFZhcignU1lTTElOVVhfU0VSSUFMJywgVHJ1ZSkKKyAgICBpZiBzeXNsaW51eF9zZXJpYWw6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1NFUklBTCAlc1xuJyAlIHN5c2xpbnV4X3NlcmlhbCkKKworICAgIG1lbnUgPSBkLmdldFZhcignQVVUT19TWVNMSU5VWE1FTlUnLCBUcnVlKQorCisgICAgaWYgbWVudSBhbmQgc3lzbGludXhfc2VyaWFsOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdERUZBVUxUIEdyYXBoaWNzIGNvbnNvbGUgJXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ0RFRkFVTFQgJXNcbicgJSAobGFiZWxzLnNwbGl0KClbMF0pKQorCisgICAgdGltZW91dCA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9USU1FT1VUJywgVHJ1ZSkKKworICAgIGlmIHRpbWVvdXQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1RJTUVPVVQgJXNcbicgJSB0aW1lb3V0KQorICAgIGVsc2U6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1RJTUVPVVQgNTBcbicpCisKKyAgICBwcm9tcHQgPSBkLmdldFZhcignU1lTTElOVVhfUFJPTVBUJywgVHJ1ZSkKKyAgICBpZiBwcm9tcHQ6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ1BST01QVCAlc1xuJyAlIHByb21wdCkKKyAgICBlbHNlOgorICAgICAgICBjZmdmaWxlLndyaXRlKCdQUk9NUFQgMVxuJykKKworICAgIGlmIG1lbnU6CisgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ3VpIHZlc2FtZW51LmMzMlxuJykKKyAgICAgICAgY2ZnZmlsZS53cml0ZSgnbWVudSB0aXRsZSBTZWxlY3Qga2VybmVsIG9wdGlvbnMgYW5kIGJvb3Qga2VybmVsXG4nKQorICAgICAgICBjZmdmaWxlLndyaXRlKCdtZW51IHRhYm1zZyBQcmVzcyBbVGFiXSB0byBlZGl0LCBbUmV0dXJuXSB0byBzZWxlY3RcbicpCisgICAgICAgIHNwbGFzaCA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9TUExBU0gnLCBUcnVlKQorICAgICAgICBpZiBzcGxhc2g6CisgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdtZW51IGJhY2tncm91bmQgc3BsYXNoLmxzc1xuJykKKyAgICAKKyAgICBmb3IgbGFiZWwgaW4gbGFiZWxzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoJ09WRVJSSURFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvdmVycmlkZXM6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdPVkVSUklERVMgbm90IGRlZmluZWQnKQorCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsIGxhYmVsICsgJzonICsgb3ZlcnJpZGVzKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKyAgICAKKyAgICAgICAgYnR5cGVzID0gWyBbICIiLCBzeXNsaW51eF9kZWZhdWx0X2NvbnNvbGUgXSBdCisgICAgICAgIGlmIG1lbnUgYW5kIHN5c2xpbnV4X3NlcmlhbDoKKyAgICAgICAgICAgIGJ0eXBlcyA9IFsgWyAiR3JhcGhpY3MgY29uc29sZSAiLCBzeXNsaW51eF9kZWZhdWx0X2NvbnNvbGUgIF0sCisgICAgICAgICAgICAgICAgWyAiU2VyaWFsIGNvbnNvbGUgIiwgc3lzbGludXhfc2VyaWFsX3R0eSBdIF0KKworICAgICAgICBmb3IgYnR5cGUgaW4gYnR5cGVzOgorICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnTEFCRUwgJXMlc1xuS0VSTkVMIC92bWxpbnV6XG4nICUgKGJ0eXBlWzBdLCBsYWJlbCkpCisKKyAgICAgICAgICAgIGV4YXJncyA9IGQuZ2V0VmFyKCdTWVNMSU5VWF9LRVJORUxfQVJHUycsIFRydWUpCisgICAgICAgICAgICBpZiBleGFyZ3M6CisgICAgICAgICAgICAgICAgYnR5cGVbMV0gKz0gIiAiICsgZXhhcmdzCisKKyAgICAgICAgICAgIGFwcGVuZCA9IGxvY2FsZGF0YS5nZXRWYXIoJ0FQUEVORCcsIFRydWUpCisgICAgICAgICAgICBpbml0cmQgPSBsb2NhbGRhdGEuZ2V0VmFyKCdJTklUUkQnLCBUcnVlKQorCisgICAgICAgICAgICBpZiBhcHBlbmQ6CisgICAgICAgICAgICAgICAgY2ZnZmlsZS53cml0ZSgnQVBQRU5EICcpCisKKyAgICAgICAgICAgICAgICBpZiBpbml0cmQ6CisgICAgICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJ2luaXRyZD0vaW5pdHJkICcpCisKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdMQUJFTD0lcyAnJSAobGFiZWwpKQorICAgICAgICAgICAgICAgIGFwcGVuZCA9IHJlcGxhY2Vfcm9vdGZzX3V1aWQoZCwgYXBwZW5kKQorICAgICAgICAgICAgICAgIGNmZ2ZpbGUud3JpdGUoJyVzICVzXG4nICUgKGFwcGVuZCwgYnR5cGVbMV0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjZmdmaWxlLndyaXRlKCdBUFBFTkQgJXNcbicgJSBidHlwZVsxXSkKKworICAgIGNmZ2ZpbGUuY2xvc2UoKQorfQorYnVpbGRfc3lzbGludXhfY2ZnW3ZhcmRlcHNdICs9ICJBUFBFTkQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvc3lzdGVtZC5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmU3MmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3N5c3RlbWQuYmJjbGFzcwpAQCAtMCwwICsxLDE5MyBAQAorIyBUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IHNob3VsZCBoYXZlIHN5c3RlbWQgcGFja2FnaW5nIHNjcmlwdHMgYWRkZWQuICBGb3IKKyMgZWFjaCBlbnRyeSwgb3B0aW9uYWxseSBoYXZlIGEgU1lTVEVNRF9TRVJWSUNFX1twYWNrYWdlXSB0aGF0IGxpc3RzIHRoZSBzZXJ2aWNlCisjIGZpbGVzIGluIHRoaXMgcGFja2FnZS4gIElmIHRoaXMgdmFyaWFibGUgaXNuJ3Qgc2V0LCBbcGFja2FnZV0uc2VydmljZSBpcyB1c2VkLgorU1lTVEVNRF9QQUNLQUdFUyA/PSAiJHtQTn0iCitTWVNURU1EX1BBQ0tBR0VTX2NsYXNzLW5hdGl2ZSA/PSAiIgorU1lTVEVNRF9QQUNLQUdFU19jbGFzcy1uYXRpdmVzZGsgPz0gIiIKKworIyBXaGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBzZXJ2aWNlcyBvbiBpbnN0YWxsYXRpb24uCitTWVNURU1EX0FVVE9fRU5BQkxFID8/PSAiZW5hYmxlIgorCisjIFRoaXMgY2xhc3Mgd2lsbCBiZSBpbmNsdWRlZCBpbiBhbnkgcmVjaXBlIHRoYXQgc3VwcG9ydHMgc3lzdGVtZCBpbml0IHNjcmlwdHMsCisjIGV2ZW4gaWYgc3lzdGVtZCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTLiAgQXMgc3VjaCBkb24ndCBtYWtlIGFueSBjaGFuZ2VzCisjIGRpcmVjdGx5IGJ1dCBjaGVjayB0aGUgRElTVFJPX0ZFQVRVUkVTIGZpcnN0LgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgICMgSWYgdGhlIGRpc3RybyBmZWF0dXJlcyBoYXZlIHN5c3RlbWQgYnV0IG5vdCBzeXN2aW5pdCwgaW5oaWJpdCB1cGRhdGUtcmNkCisgICAgIyBmcm9tIGRvaW5nIGFueSB3b3JrIHNvIHRoYXQgcHVyZS1zeXN0ZW1kIGltYWdlcyBkb24ndCBoYXZlIHJlZHVuZGFudCBpbml0CisgICAgIyBmaWxlcy4KKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuYXBwZW5kVmFyKCJERVBFTkRTIiwgIiBzeXN0ZW1kLXN5c3RlbWN0bC1uYXRpdmUiKQorICAgICAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitzeXN0ZW1kX3Bvc3RpbnN0KCkgeworT1BUUz0iIgorCitpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgIE9QVFM9Ii0tcm9vdD0kRCIKK2ZpCisKK2lmIHR5cGUgc3lzdGVtY3RsID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlzeXN0ZW1jdGwgJE9QVFMgJHtTWVNURU1EX0FVVE9fRU5BQkxFfSAke1NZU1RFTURfU0VSVklDRX0KKworCWlmIFsgLXogIiREIiAtYSAiJHtTWVNURU1EX0FVVE9fRU5BQkxFfSIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCXN5c3RlbWN0bCByZXN0YXJ0ICR7U1lTVEVNRF9TRVJWSUNFfQorCWZpCitmaQorfQorCitzeXN0ZW1kX3ByZXJtKCkgeworT1BUUz0iIgorCitpZiBbIC1uICIkRCIgXTsgdGhlbgorICAgIE9QVFM9Ii0tcm9vdD0kRCIKK2ZpCisKK2lmIHR5cGUgc3lzdGVtY3RsID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlpZiBbIC16ICIkRCIgXTsgdGhlbgorCQlzeXN0ZW1jdGwgc3RvcCAke1NZU1RFTURfU0VSVklDRX0KKwlmaQorCisJc3lzdGVtY3RsICRPUFRTIGRpc2FibGUgJHtTWVNURU1EX1NFUlZJQ0V9CitmaQorfQorCisKK3N5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXNbdmFyZGVwc10gKz0gInN5c3RlbWRfcHJlcm0gc3lzdGVtZF9wb3N0aW5zdCIKK3N5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJPVkVSUklERVMiCisKKworcHl0aG9uIHN5c3RlbWRfcG9wdWxhdGVfcGFja2FnZXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgZ2V0X3BhY2thZ2VfdmFyKGQsIHZhciwgcGtnKToKKyAgICAgICAgdmFsID0gKGQuZ2V0VmFyKCclc18lcycgJSAodmFyLCBwa2cpLCBUcnVlKSBvciAiIikuc3RyaXAoKQorICAgICAgICBpZiB2YWwgPT0gIiI6CisgICAgICAgICAgICB2YWwgPSAoZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIikuc3RyaXAoKQorICAgICAgICByZXR1cm4gdmFsCisKKyAgICAjIENoZWNrIGlmIHN5c3RlbWQtcGFja2FnZXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBQQUNLQUdFUworICAgIGRlZiBzeXN0ZW1kX2NoZWNrX3BhY2thZ2UocGtnX3N5c3RlbWQpOgorICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBwa2dfc3lzdGVtZCBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICAgICAgYmIuZXJyb3IoJyVzIGRvZXMgbm90IGFwcGVhciBpbiBwYWNrYWdlIGxpc3QsIHBsZWFzZSBhZGQgaXQnICUgcGtnX3N5c3RlbWQpCisKKworICAgIGRlZiBzeXN0ZW1kX2dlbmVyYXRlX3BhY2thZ2Vfc2NyaXB0cyhwa2cpOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIHN5c3RlbWQgY2FsbHMgdG8gcG9zdGluc3QvcG9zdHJtIGZvciAlcycgJSBwa2cpCisKKyAgICAgICAgIyBBZGQgcGtnIHRvIHRoZSBvdmVycmlkZXMgc28gdGhhdCBpdCBmaW5kcyB0aGUgU1lTVEVNRF9TRVJWSUNFX3BrZworICAgICAgICAjIHZhcmlhYmxlLgorICAgICAgICBsb2NhbGRhdGEgPSBkLmNyZWF0ZUNvcHkoKQorICAgICAgICBsb2NhbGRhdGEucHJlcGVuZFZhcigiT1ZFUlJJREVTIiwgcGtnICsgIjoiKQorICAgICAgICBiYi5kYXRhLnVwZGF0ZV9kYXRhKGxvY2FsZGF0YSkKKworICAgICAgICBwb3N0aW5zdCA9IGQuZ2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcG9zdGluc3Q6CisgICAgICAgICAgICBwb3N0aW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcG9zdGluc3QgKz0gbG9jYWxkYXRhLmdldFZhcignc3lzdGVtZF9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlcm06CisgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlcm0gKz0gbG9jYWxkYXRhLmdldFZhcignc3lzdGVtZF9wcmVybScsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBwcmVybSkKKworCisgICAgIyBBZGQgZmlsZXMgdG8gRklMRVNfKi1zeXN0ZW1kIGlmIGV4aXN0ZW50IGFuZCBub3QgYWxyZWFkeSBkb25lCisgICAgZGVmIHN5c3RlbWRfYXBwZW5kX2ZpbGUocGtnX3N5c3RlbWQsIGZpbGVfYXBwZW5kKToKKyAgICAgICAgYXBwZW5kZWQgPSBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgZmlsZV9hcHBlbmQpKToKKyAgICAgICAgICAgIHZhcl9uYW1lID0gIkZJTEVTXyIgKyBwa2dfc3lzdGVtZAorICAgICAgICAgICAgZmlsZXMgPSBkLmdldFZhcih2YXJfbmFtZSwgRmFsc2UpIG9yICIiCisgICAgICAgICAgICBpZiBmaWxlX2FwcGVuZCBub3QgaW4gZmlsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcih2YXJfbmFtZSwgIiAiICsgZmlsZV9hcHBlbmQpCisgICAgICAgICAgICAgICAgYXBwZW5kZWQgPSBUcnVlCisgICAgICAgIHJldHVybiBhcHBlbmRlZAorCisgICAgIyBBZGQgc3lzdGVtZCBmaWxlcyB0byBGSUxFU18qLXN5c3RlbWQsIHBhcnNlIGZvciBBbHNvPSBhbmQgZm9sbG93IHJlY3Vyc2l2ZQorICAgIGRlZiBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIHNlcnZpY2UsIGtleXMpOgorICAgICAgICAjIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbgorICAgICAgICBpZiBzeXN0ZW1kX2FwcGVuZF9maWxlKHBrZ19zeXN0ZW1kLCBvZS5wYXRoLmpvaW4ocGF0aCwgc2VydmljZSkpOgorICAgICAgICAgICAgZnVsbHBhdGggPSBvZS5wYXRoLmpvaW4oZC5nZXRWYXIoIkQiLCBUcnVlKSwgcGF0aCwgc2VydmljZSkKKyAgICAgICAgICAgIGlmIHNlcnZpY2UuZmluZCgnLnNlcnZpY2UnKSAhPSAtMToKKyAgICAgICAgICAgICAgICAjIGZvciAqLnNlcnZpY2UgYWRkICpALnNlcnZpY2UKKyAgICAgICAgICAgICAgICBzZXJ2aWNlX2Jhc2UgPSBzZXJ2aWNlLnJlcGxhY2UoJy5zZXJ2aWNlJywgJycpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnQC5zZXJ2aWNlJywga2V5cykKKyAgICAgICAgICAgIGlmIHNlcnZpY2UuZmluZCgnLnNvY2tldCcpICE9IC0xOgorICAgICAgICAgICAgICAgICMgZm9yICouc29ja2V0IGFkZCAqLnNlcnZpY2UgYW5kICpALnNlcnZpY2UKKyAgICAgICAgICAgICAgICBzZXJ2aWNlX2Jhc2UgPSBzZXJ2aWNlLnJlcGxhY2UoJy5zb2NrZXQnLCAnJykKKyAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGgsIHNlcnZpY2VfYmFzZSArICcuc2VydmljZScsIGtleXMpCisgICAgICAgICAgICAgICAgc3lzdGVtZF9hZGRfZmlsZXNfYW5kX3BhcnNlKHBrZ19zeXN0ZW1kLCBwYXRoLCBzZXJ2aWNlX2Jhc2UgKyAnQC5zZXJ2aWNlJywga2V5cykKKyAgICAgICAgICAgIGZvciBrZXkgaW4ga2V5cy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICMgcmVjdXJzZSBhbGwgZGVwZW5kZW5jaWVzIGZvdW5kIGluIGtleXMgKCdBbHNvJzsnQ29uZmxpY3RzJzsuLikgYW5kIGFkZCB0byBmaWxlcworICAgICAgICAgICAgICAgIGNtZCA9ICJncmVwICVzICVzIHwgc2VkICdzLCVzPSwsZycgfCB0ciAnLCcgJ1xcbiciICUgKGtleSwgZnVsbHBhdGgsIGtleSkKKyAgICAgICAgICAgICAgICBwaXBlID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgICAgICAgICAgbGluZSA9IHBpcGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHdoaWxlIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJ1xuJywgJycpCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZShwa2dfc3lzdGVtZCwgcGF0aCwgbGluZSwga2V5cykKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHBpcGUucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorCisgICAgIyBDaGVjayBzZXJ2aWNlLWZpbGVzIGFuZCBjYWxsIHN5c3RlbWRfYWRkX2ZpbGVzX2FuZF9wYXJzZSBmb3IgZWFjaCBlbnRyeQorICAgIGRlZiBzeXN0ZW1kX2NoZWNrX3NlcnZpY2VzKCk6CisgICAgICAgIHNlYXJjaHBhdGhzID0gW29lLnBhdGguam9pbihkLmdldFZhcigic3lzY29uZmRpciIsIFRydWUpLCAic3lzdGVtZCIsICJzeXN0ZW0iKSxdCisgICAgICAgIHNlYXJjaHBhdGhzLmFwcGVuZChkLmdldFZhcigic3lzdGVtZF9zeXN0ZW1fdW5pdGRpciIsIFRydWUpKQorICAgICAgICBzeXN0ZW1kX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1NZU1RFTURfUEFDS0FHRVMnLCBUcnVlKQorCisgICAgICAgIGtleXMgPSAnQWxzbycKKyAgICAgICAgIyBzY2FuIGZvciBhbGwgaW4gU1lTVEVNRF9TRVJWSUNFW10KKyAgICAgICAgZm9yIHBrZ19zeXN0ZW1kIGluIHN5c3RlbWRfcGFja2FnZXMuc3BsaXQoKToKKyAgICAgICAgICAgIGZvciBzZXJ2aWNlIGluIGdldF9wYWNrYWdlX3ZhcihkLCAnU1lTVEVNRF9TRVJWSUNFJywgcGtnX3N5c3RlbWQpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcGF0aF9mb3VuZCA9ICcnCisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VhcmNocGF0aHM6CisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBwYXRoLCBzZXJ2aWNlKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2ZvdW5kID0gcGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBwYXRoX2ZvdW5kICE9ICcnOgorICAgICAgICAgICAgICAgICAgICBzeXN0ZW1kX2FkZF9maWxlc19hbmRfcGFyc2UocGtnX3N5c3RlbWQsIHBhdGhfZm91bmQsIHNlcnZpY2UsIGtleXMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiU1lTVEVNRF9TRVJWSUNFXyVzIHZhbHVlICVzIGRvZXMgbm90IGV4aXN0IiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChwa2dfc3lzdGVtZCwgc2VydmljZSkpCisKKyAgICAjIFJ1biBhbGwgbW9kaWZpY2F0aW9ucyBvbmNlIHdoZW4gY3JlYXRpbmcgcGFja2FnZQorICAgIGlmIG9zLnBhdGguZXhpc3RzKGQuZ2V0VmFyKCJEIiwgVHJ1ZSkpOgorICAgICAgICBmb3IgcGtnIGluIGQuZ2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHN5c3RlbWRfY2hlY2tfcGFja2FnZShwa2cpCisgICAgICAgICAgICBpZiBkLmdldFZhcignU1lTVEVNRF9TRVJWSUNFXycgKyBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgIHN5c3RlbWRfZ2VuZXJhdGVfcGFja2FnZV9zY3JpcHRzKHBrZykKKyAgICAgICAgc3lzdGVtZF9jaGVja19zZXJ2aWNlcygpCit9CisKK1BBQ0tBR0VTUExJVEZVTkNTX3ByZXBlbmQgPSAic3lzdGVtZF9wb3B1bGF0ZV9wYWNrYWdlcyAiCisKK3B5dGhvbiBybV9zeXN0ZW1kX3VuaXRkaXIgKCl7CisgICAgaW1wb3J0IHNodXRpbAorICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHN5c3RlbWRfdW5pdGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBkLmdldFZhcignc3lzdGVtZF91bml0ZGlyJywgVHJ1ZSkpCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfdW5pdGRpcik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN5c3RlbWRfdW5pdGRpcikKKyAgICAgICAgc3lzdGVtZF9saWJkaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3lzdGVtZF91bml0ZGlyKQorICAgICAgICBpZiAob3MucGF0aC5leGlzdHMoc3lzdGVtZF9saWJkaXIpIGFuZCBub3Qgb3MubGlzdGRpcihzeXN0ZW1kX2xpYmRpcikpOgorICAgICAgICAgICAgb3Mucm1kaXIoc3lzdGVtZF9saWJkaXIpCit9Citkb19pbnN0YWxsW3Bvc3RmdW5jc10gKz0gInJtX3N5c3RlbWRfdW5pdGRpciAiCisKK3B5dGhvbiBybV9zeXN2aW5pdF9pbml0ZGRpciAoKXsKKyAgICBpbXBvcnQgc2h1dGlsCisgICAgc3lzdl9pbml0ZGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCAoZC5nZXRWYXIoJ0lOSVRfRF9ESVInLCBUcnVlKSBvciAiL2V0Yy9pbml0LmQiKSkKKworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKSBhbmQgXAorICAgICAgICBvcy5wYXRoLmV4aXN0cyhzeXN2X2luaXRkZGlyKToKKyAgICAgICAgc3lzdGVtZF9zeXN0ZW1fdW5pdGRpciA9IG9lLnBhdGguam9pbihkLmdldFZhcigiRCIsIFRydWUpLCBkLmdldFZhcignc3lzdGVtZF9zeXN0ZW1fdW5pdGRpcicsIFRydWUpKQorCisgICAgICAgICMgSWYgc3lzdGVtZF9zeXN0ZW1fdW5pdGRpciBjb250YWlucyBhbnl0aGluZywgZGVsZXRlIHN5c3ZfaW5pdGRkaXIKKyAgICAgICAgaWYgKG9zLnBhdGguZXhpc3RzKHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIpIGFuZCBvcy5saXN0ZGlyKHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3lzdl9pbml0ZGRpcikKK30KK2RvX2luc3RhbGxbcG9zdGZ1bmNzXSArPSAicm1fc3lzdmluaXRfaW5pdGRkaXIgIgpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdGVybWluYWwuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTc3YzZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3Rlcm1pbmFsLmJiY2xhc3MKQEAgLTAsMCArMSw5NCBAQAorT0VfVEVSTUlOQUwgPz0gJ2F1dG8nCitPRV9URVJNSU5BTFt0eXBlXSA9ICdjaG9pY2UnCitPRV9URVJNSU5BTFtjaG9pY2VzXSA9ICdhdXRvIG5vbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtAIiAiLmpvaW4oby5uYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvIGluIG9lLnRlcm1pbmFsLnByaW9yaXRpemVkKCkpfScKKworT0VfVEVSTUlOQUxfRVhQT1JUUyArPSAnRVhUUkFfT0VNQUtFJworT0VfVEVSTUlOQUxfRVhQT1JUU1t0eXBlXSA9ICdsaXN0JworCitYQVVUSE9SSVRZID89ICIke0hPTUV9Ly5YYXV0aG9yaXR5IgorU0hFTEwgPz0gImJhc2giCisKKworZGVmIGVtaXRfdGVybWluYWxfZnVuYyhjb21tYW5kLCBlbnZkYXRhLCBkKToKKyAgICBjbWRfZnVuYyA9ICdkb190ZXJtaW5hbCcKKworICAgIGVudmRhdGEuc2V0VmFyKGNtZF9mdW5jLCAnZXhlYyAnICsgY29tbWFuZCkKKyAgICBlbnZkYXRhLnNldFZhckZsYWcoY21kX2Z1bmMsICdmdW5jJywgMSkKKworICAgIHJ1bmZtdCA9IGQuZ2V0VmFyKCdCQl9SVU5GTVQnLCBUcnVlKSBvciAicnVuLntmdW5jfS57cGlkfSIKKyAgICBydW5maWxlID0gcnVuZm10LmZvcm1hdChmdW5jPWNtZF9mdW5jLCB0YXNrPWNtZF9mdW5jLCB0YXNrZnVuYz1jbWRfZnVuYywgcGlkPW9zLmdldHBpZCgpKQorICAgIHJ1bmZpbGUgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1QnLCBUcnVlKSwgcnVuZmlsZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKHJ1bmZpbGUpKQorCisgICAgd2l0aCBvcGVuKHJ1bmZpbGUsICd3JykgYXMgc2NyaXB0OgorICAgICAgICBzY3JpcHQud3JpdGUoJyMhL2Jpbi9zaCAtZVxuJykKKyAgICAgICAgYmIuZGF0YS5lbWl0X2Z1bmMoY21kX2Z1bmMsIHNjcmlwdCwgZW52ZGF0YSkKKyAgICAgICAgc2NyaXB0LndyaXRlKGNtZF9mdW5jKQorICAgICAgICBzY3JpcHQud3JpdGUoIlxuIikKKyAgICBvcy5jaG1vZChydW5maWxlLCAwNzU1KQorCisgICAgcmV0dXJuIHJ1bmZpbGUKKworZGVmIG9lX3Rlcm1pbmFsKGNvbW1hbmQsIHRpdGxlLCBkKToKKyAgICBpbXBvcnQgb2UuZGF0YQorICAgIGltcG9ydCBvZS50ZXJtaW5hbAorCisgICAgZW52ZGF0YSA9IGJiLmRhdGEuaW5pdCgpCisKKyAgICBmb3IgdiBpbiBvcy5lbnZpcm9uOgorICAgICAgICBlbnZkYXRhLnNldFZhcih2LCBvcy5lbnZpcm9uW3ZdKQorICAgICAgICBlbnZkYXRhLnNldFZhckZsYWcodiwgJ2V4cG9ydCcsIDEpCisKKyAgICBmb3IgZXhwb3J0IGluIG9lLmRhdGEudHlwZWRfdmFsdWUoJ09FX1RFUk1JTkFMX0VYUE9SVFMnLCBkKToKKyAgICAgICAgdmFsdWUgPSBkLmdldFZhcihleHBvcnQsIFRydWUpCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MuZW52aXJvbltleHBvcnRdID0gc3RyKHZhbHVlKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXIoZXhwb3J0LCBzdHIodmFsdWUpKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGV4cG9ydCwgJ2V4cG9ydCcsIDEpCisgICAgICAgIGlmIGV4cG9ydCA9PSAiUFNFVURPX0RJU0FCTEVEIjoKKyAgICAgICAgICAgIGlmICJQU0VVRE9fVU5MT0FEIiBpbiBvcy5lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWyJQU0VVRE9fVU5MT0FEIl0KKyAgICAgICAgICAgIGVudmRhdGEuZGVsVmFyKCJQU0VVRE9fVU5MT0FEIikKKworICAgICMgQWRkIGluIGFsbCB2YXJpYWJsZXMgZnJvbSB0aGUgdXNlcidzIG9yaWdpbmFsIGVudmlyb25tZW50IHdoaWNoCisgICAgIyBoYXZlbid0IHN1YnNlcXVudGx5IGJlZW4gc2V0L2NoYW5nZWQKKyAgICBvcmlnYmJlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKSBvciB7fQorICAgIGZvciBrZXkgaW4gb3JpZ2JiZW52OgorICAgICAgICBpZiBrZXkgaW4gZW52ZGF0YToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHZhbHVlID0gb3JpZ2JiZW52LmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gc3RyKHZhbHVlKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXIoa2V5LCBzdHIodmFsdWUpKQorICAgICAgICAgICAgZW52ZGF0YS5zZXRWYXJGbGFnKGtleSwgJ2V4cG9ydCcsIDEpCisKKyAgICAjIEEgY29tcGxleCBQUzEgbWlnaHQgbmVlZCBtb3JlIGVzY2FwaW5nIG9mIGNoYXJzLgorICAgICMgTGV0cyBub3QgZXhwb3J0IFBTMSBpbnN0ZWFkLgorICAgIGVudmRhdGEuZGVsVmFyKCJQUzEiKQorCisgICAgIyBSZXBsYWNlIGNvbW1hbmQgd2l0aCBhbiBleGVjdXRhYmxlIHdyYXBwZXIgc2NyaXB0CisgICAgY29tbWFuZCA9IGVtaXRfdGVybWluYWxfZnVuYyhjb21tYW5kLCBlbnZkYXRhLCBkKQorCisgICAgdGVybWluYWwgPSBvZS5kYXRhLnR5cGVkX3ZhbHVlKCdPRV9URVJNSU5BTCcsIGQpLmxvd2VyKCkKKyAgICBpZiB0ZXJtaW5hbCA9PSAnbm9uZSc6CisgICAgICAgIGJiLmZhdGFsKCdEZXZzaGVsbCB1c2FnZSBkaXNhYmxlZCB3aXRoIE9FX1RFUk1JTkFMJykKKyAgICBlbGlmIHRlcm1pbmFsICE9ICdhdXRvJzoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2UudGVybWluYWwuc3Bhd24odGVybWluYWwsIGNvbW1hbmQsIHRpdGxlLCBOb25lLCBkKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5VbnN1cHBvcnRlZFRlcm1pbmFsOgorICAgICAgICAgICAgYmIud2FybignVW5zdXBwb3J0ZWQgdGVybWluYWwgIiVzIiwgZGVmYXVsdGluZyB0byAiYXV0byInICUKKyAgICAgICAgICAgICAgICAgICAgdGVybWluYWwpCisgICAgICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5FeGVjdXRpb25FcnJvciBhcyBleGM6CisgICAgICAgICAgICBiYi5mYXRhbCgnVW5hYmxlIHRvIHNwYXduIHRlcm1pbmFsICVzOiAlcycgJSAodGVybWluYWwsIGV4YykpCisKKyAgICB0cnk6CisgICAgICAgIG9lLnRlcm1pbmFsLnNwYXduX3ByZWZlcnJlZChjb21tYW5kLCB0aXRsZSwgTm9uZSwgZCkKKyAgICBleGNlcHQgb2UudGVybWluYWwuTm9TdXBwb3J0ZWRUZXJtaW5hbHM6CisgICAgICAgIGJiLmZhdGFsKCdObyB2YWxpZCB0ZXJtaW5hbCBmb3VuZCwgdW5hYmxlIHRvIG9wZW4gZGV2c2hlbGwnKQorICAgIGV4Y2VwdCBvZS50ZXJtaW5hbC5FeGVjdXRpb25FcnJvciBhcyBleGM6CisgICAgICAgIGJiLmZhdGFsKCdVbmFibGUgdG8gc3Bhd24gdGVybWluYWwgJXM6ICVzJyAlICh0ZXJtaW5hbCwgZXhjKSkKKworb2VfdGVybWluYWxbdmFyZGVwc2V4Y2x1ZGVdID0gIkJCX09SSUdFTlYiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UtYXV0by5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLWF1dG8uYmJjbGFzcwpAQCAtMCwwICsxLDIzIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIFJ1biB0ZXN0cyBhdXRvbWF0aWNhbGx5IG9uIGFuIGltYWdlIGFmdGVyIHRoZSBpbWFnZSBpcyBjb25zdHJ1Y3RlZAorIyAoYXMgb3Bwb3NlZCB0byB0ZXN0aW1hZ2UuYmJjbGFzcyBhbG9uZSB3aGVyZSB0ZXN0cyBtdXN0IGJlIGNhbGxlZAorIyBtYW51YWxseSB1c2luZyBiaXRiYWtlIC1jIHRlc3RpbWFnZSA8aW1hZ2U+KS4KKyMKKyMgTk9URTogdG8gdXNlIHRoaXMgY2xhc3MsIHNpbXBseSBzZXQgVEVTVF9JTUFHRSA9ICIxIiAtIG5vIG5lZWQgdG8KKyMgaW5oZXJpdCBpdCBzaW5jZSB0aGF0IHdpbGwgYmUgZG9uZSBpbiBpbWFnZS5iYmNsYXNzIHdoZW4gdGhpcyB2YXJpYWJsZQorIyBoYXMgYmVlbiBzZXQuCisjCisjIFNlZSB0ZXN0aW1hZ2UuYmJjbGFzcyBmb3IgdGhlIHRlc3QgaW1wbGVtZW50YXRpb24uCisKK2luaGVyaXQgdGVzdGltYWdlCisKK3B5dGhvbiBkb190ZXN0aW1hZ2VfYXV0bygpIHsKKyAgICB0ZXN0aW1hZ2VfbWFpbihkKQorfQorYWRkdGFzayB0ZXN0aW1hZ2VfYXV0byBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fcm9vdGZzCitkb190ZXN0aW1hZ2VfYXV0b1tkZXBlbmRzXSArPSAiJHtURVNUSU1BR0VERVBFTkRTfSIKK2RvX3Rlc3RpbWFnZV9hdXRvW2xvY2tmaWxlc10gKz0gIiR7VEVTVElNQUdFTE9DS30iCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdGVzdGltYWdlLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5MThiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90ZXN0aW1hZ2UuYmJjbGFzcwpAQCAtMCwwICsxLDQyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKworIyB0ZXN0aW1hZ2UuYmJjbGFzcyBlbmFibGVzIHRlc3Rpbmcgb2YgcWVtdSBpbWFnZXMgdXNpbmcgcHl0aG9uIHVuaXR0ZXN0cy4KKyMgTW9zdCBvZiB0aGUgdGVzdHMgYXJlIGNvbW1hbmRzIHJ1biBvbiB0YXJnZXQgaW1hZ2Ugb3ZlciBzc2guCisjIFRvIHVzZSBpdCBhZGQgdGVzdGltYWdlIHRvIGdsb2JhbCBpbmhlcml0IGFuZCBjYWxsIHlvdXIgdGFyZ2V0IGltYWdlIHdpdGggLWMgdGVzdGltYWdlCisjIFlvdSBjYW4gdHJ5IGl0IG91dCBsaWtlIHRoaXM6CisjIC0gZmlyc3QgYnVpbGQgYSBxZW11IGNvcmUtaW1hZ2Utc2F0bworIyAtIGFkZCBJTkhFUklUICs9ICJ0ZXN0aW1hZ2UiIGluIGxvY2FsLmNvbmYKKyMgLSB0aGVuIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZS4gVGhhdCB3aWxsIHJ1biBhIHN0YW5kYXJkIHN1aXRlIG9mIHRlc3RzLgorCisjIFlvdSBjYW4gc2V0IChvciBhcHBlbmQgdG8pIFRFU1RfU1VJVEVTIGluIGxvY2FsLmNvbmYgdG8gc2VsZWN0IHRoZSB0ZXN0cworIyB3aGljaCB5b3Ugd2FudCB0byBydW4gZm9yIHlvdXIgdGFyZ2V0LgorIyBUaGUgdGVzdCBuYW1lcyBhcmUgdGhlIG1vZHVsZSBuYW1lcyBpbiBtZXRhL2xpYi9vZXFhL3J1bnRpbWUuCisjIEVhY2ggbmFtZSBpbiBURVNUX1NVSVRFUyByZXByZXNlbnRzIGEgcmVxdWlyZWQgdGVzdCBmb3IgdGhlIGltYWdlLiAobm8gc2tpcHBpbmcgYWxsb3dlZCkKKyMgQXBwZW5kaW5nICJhdXRvIiBtZWFucyB0aGF0IGl0IHdpbGwgdHJ5IHRvIHJ1biBhbGwgdGVzdHMgdGhhdCBhcmUgc3VpdGFibGUgZm9yIHRoZSBpbWFnZSAoZWFjaCB0ZXN0IGRlY2lkZXMgdGhhdCBvbiBpdCdzIG93bikuCisjIE5vdGUgdGhhdCBvcmRlciBpbiBURVNUX1NVSVRFUyBpcyByZWxldmFudDogdGVzdHMgYXJlIHJ1biBpbiBhbiBvcmRlciBzdWNoIHRoYXQKKyMgdGVzdHMgbWVudGlvbmVkIGluIEBza2lwVW5sZXNzUGFzc2VkIHJ1biBiZWZvcmUgdGhlIHRlc3RzIHRoYXQgZGVwZW5kIG9uIHRoZW0sCisjIGJ1dCB3aXRob3V0IHN1Y2ggZGVwZW5kZW5jaWVzLCB0ZXN0cyBydW4gaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIGxpc3RlZAorIyBpbiBURVNUX1NVSVRFUy4KKyMKKyMgQSBsYXllciBjYW4gYWRkIGl0cyBvd24gdGVzdHMgaW4gbGliL29lcWEvcnVudGltZSwgcHJvdmlkZWQgaXQgZXh0ZW5kcyBCQlBBVEggYXMgbm9ybWFsIGluIGl0cyBsYXllci5jb25mLgorCisjIFRFU1RfTE9HX0RJUiBjb250YWlucyBhIGNvbW1hbmQgc3NoIGxvZyBhbmQgbWF5IGNvbnRhaW4gaW5mcm9tYXRpb24gYWJvdXQgd2hhdCBjb21tYW5kIGlzIHJ1bm5pbmcsIG91dHB1dCBhbmQgcmV0dXJuIGNvZGVzIGFuZCBmb3IgcWVtdSBhIGJvb3QgbG9nIHRpbGwgbG9naW4uCisjIEJvb3RpbmcgaXMgaGFuZGxlZCBieSB0aGlzIGNsYXNzLCBhbmQgaXQncyBub3QgYSB0ZXN0IGluIGl0c2VsZi4KKyMgVEVTVF9RRU1VQk9PVF9USU1FT1VUIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbWF4aW11bSB0aW1lIGluIHNlY29uZHMgdGhlIGxhdW5jaCBjb2RlIHdpbGwgd2FpdCBmb3IgdGhlIGxvZ2luIHByb21wdC4KKworVEVTVF9MT0dfRElSID89ICIke1dPUktESVJ9L3Rlc3RpbWFnZSIKKworVEVTVF9FWFBPUlRfRElSID89ICIke1RNUERJUn0vdGVzdGltYWdlLyR7UE59IgorVEVTVF9FWFBPUlRfT05MWSA/PSAiMCIKKworUlBNVEVTVFNVSVRFID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdJTUFHRV9QS0dUWVBFJywgJ3JwbScsICdzbWFydCBycG0nLCAnJywgZCl9IgorCitERUZBVUxUX1RFU1RfU1VJVEVTID0gInBpbmcgYXV0byIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1taW5pbWFsID0gInBpbmciCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLWNvcmUtaW1hZ2Utc2F0byA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyB4b3JnIHNjcCB2bmMgZGF0ZSBkbWVzZyBwYXJzZWxvZ3MgJHtSUE1URVNUU1VJVEV9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnSU1BR0VfUEtHVFlQRScsICdycG0nLCAncHl0aG9uJywgJycsIGQpfSIKK0RFRkFVTFRfVEVTVF9TVUlURVNfcG4tY29yZS1pbWFnZS1zYXRvLXNkayA9ICJwaW5nIHNzaCBkZiBjb25ubWFuIHN5c2xvZyB4b3JnIHNjcCB2bmMgZGF0ZSBwZXJsIGxkZCBnY2Mga2VybmVsbW9kdWxlIGRtZXNnIHB5dGhvbiBwYXJzZWxvZ3MgJHtSUE1URVNUU1VJVEV9IgorREVGQVVMVF9URVNUX1NVSVRFU19wbi1jb3JlLWltYWdlLWxzYi1zZGsgPSAicGluZyBidWlsZGN2cyBidWlsZGlwdGFibGVzIGJ1aWxkc3Vkb2t1IGNvbm5tYW4gZGF0ZSBkZiBnY2Mga2VybmVsbW9kdWxlIGxkZCBwYW0gcGFyc2Vsb2dzIHBlcmwgcHl0aG9uIHNjcCAke1JQTVRFU1RTVUlURX0gc3NoIHN5c2xvZyBsb2dyb3RhdGUiCitERUZBVUxUX1RFU1RfU1VJVEVTX3BuLW1ldGEtdG9vbGNoYWluID0gImF1dG8iCisKKyMgYWFyY2g2NCBoYXMgbm8gZ3JhcGhpY3MKK0RFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX2FhcmNoNjQgPSAieG9yZyB2bmMiCisKKyNxZW11bWlwcyBpcyB0b28gc2xvdyBmb3IgYnVpbGRzdWRva3UKK0RFRkFVTFRfVEVTVF9TVUlURVNfcmVtb3ZlX3FlbXVtaXBzID0gImJ1aWxkc3Vkb2t1IgorCitURVNUX1NVSVRFUyA/PSAiJHtERUZBVUxUX1RFU1RfU1VJVEVTfSIKKworVEVTVF9RRU1VQk9PVF9USU1FT1VUID89ICIxMDAwIgorVEVTVF9UQVJHRVQgPz0gInFlbXUiCitURVNUX1RBUkdFVF9JUCA/PSAiIgorVEVTVF9TRVJWRVJfSVAgPz0gIiIKKworVEVTVElNQUdFREVQRU5EUyA9ICIiCitURVNUSU1BR0VERVBFTkRTX3FlbXVhbGwgPSAicWVtdS1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCBxZW11LWhlbHBlci1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworVEVTVElNQUdFTE9DSyA9ICIke1RNUERJUn0vdGVzdGltYWdlLmxvY2siCitURVNUSU1BR0VMT0NLX3FlbXVhbGwgPSAiIgorCitURVNUSU1BR0VfRFVNUF9ESVIgPz0gIi90bXAvb2Utc2F2ZWQtdGVzdHMvIgorCit0ZXN0aW1hZ2VfZHVtcF90YXJnZXQgKCkgeworICAgIHRvcCAtYm4xCisgICAgcHMKKyAgICBmcmVlCisgICAgZGYKKyAgICAjIFRoZSBuZXh0IGNvbW1hbmQgd2lsbCBleHBvcnQgdGhlIGRlZmF1bHQgZ2F0ZXdheSBJUAorICAgIGV4cG9ydCBERUZBVUxUX0dBVEVXQVk9JChpcCByb3V0ZSB8IGF3ayAnL2RlZmF1bHQvIHsgcHJpbnQgJDN9JykKKyAgICBwaW5nIC1jMyAkREVGQVVMVF9HQVRFV0FZCisgICAgZG1lc2cKKyAgICBuZXRzdGF0IC1hbgorICAgIGlwIGFkZHJlc3MKKyAgICAjIE5leHQgY29tbWFuZCB3aWxsIGR1bXAgbG9ncyBmcm9tIC92YXIvbG9nLworICAgIGZpbmQgL3Zhci9sb2cvIC10eXBlIGYgMj4vZGV2L251bGwgLWV4ZWMgZWNobyAiPT09PT09PT09PT09PT09PT09PT0iIFw7IC1leGVjIGVjaG8ge30gXDsgLWV4ZWMgZWNobyAiPT09PT09PT09PT09PT09PT09PT0iIFw7IC1leGVjIGNhdCB7fSBcOyAtZXhlYyBlY2hvICIiIFw7Cit9CisKK3Rlc3RpbWFnZV9kdW1wX2hvc3QgKCkgeworICAgIHRvcCAtYm4xCisgICAgcHMgLWVmCisgICAgZnJlZQorICAgIGRmCisgICAgbWVtc3RhdAorICAgIGRtZXNnCisgICAgbmV0c3RhdCAtYW4KK30KKworcHl0aG9uIGRvX3Rlc3RpbWFnZSgpIHsKKyAgICB0ZXN0aW1hZ2VfbWFpbihkKQorfQorYWRkdGFzayB0ZXN0aW1hZ2UKK2RvX3Rlc3RpbWFnZVtub3N0YW1wXSA9ICIxIgorZG9fdGVzdGltYWdlW2RlcGVuZHNdICs9ICIke1RFU1RJTUFHRURFUEVORFN9IgorZG9fdGVzdGltYWdlW2xvY2tmaWxlc10gKz0gIiR7VEVTVElNQUdFTE9DS30iCisKK3B5dGhvbiBkb190ZXN0c2RrKCkgeworICAgIHRlc3RzZGtfbWFpbihkKQorfQorYWRkdGFzayB0ZXN0c2RrCitkb190ZXN0c2RrW25vc3RhbXBdID0gIjEiCitkb190ZXN0c2RrW2RlcGVuZHNdICs9ICIke1RFU1RJTUFHRURFUEVORFN9IgorZG9fdGVzdHNka1tsb2NrZmlsZXNdICs9ICIke1RFU1RJTUFHRUxPQ0t9IgorCisjIGdldCB0ZXN0Y2FzZSBsaXN0IGZyb20gc3BlY2lmaWVkIGZpbGUKKyMgaWYgcGF0aCBpcyBhIHJlbGF0aXZlIHBhdGgsIHRoZW4gcmVsYXRpdmUgdG8gYnVpbGQvY29uZi8KK2RlZiByZWFkX3Rlc3RsaXN0KGQsIGZwYXRoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmcGF0aCk6CisgICAgICAgIGJ1aWxkZGlyID0gZC5nZXRWYXIoIlRPUERJUiIsIFRydWUpCisgICAgICAgIGZwYXRoID0gb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAiY29uZiIsIGZwYXRoKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmcGF0aCk6CisgICAgICAgIGJiLmZhdGFsKCJObyBzdWNoIG1hbmlmZXN0IGZpbGU6ICIsIGZwYXRoKQorICAgIHRjcyA9IFtdCisgICAgZm9yIGxpbmUgaW4gb3BlbihmcGF0aCkucmVhZGxpbmVzKCk6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgbGluZSBhbmQgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIpOgorICAgICAgICAgICAgdGNzLmFwcGVuZChsaW5lKQorICAgIHJldHVybiAiICIuam9pbih0Y3MpCisKK2RlZiBnZXRfdGVzdHNfbGlzdChkLCB0eXBlPSJydW50aW1lIik6CisgICAgdGVzdHN1aXRlcyA9IFtdCisgICAgdGVzdHNsaXN0ID0gW10KKyAgICBtYW5pZmVzdHMgPSBkLmdldFZhcigiVEVTVF9TVUlURVNfTUFOSUZFU1QiLCBUcnVlKQorICAgIGlmIG1hbmlmZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgbWFuaWZlc3RzID0gbWFuaWZlc3RzLnNwbGl0KCkKKyAgICAgICAgZm9yIG1hbmlmZXN0IGluIG1hbmlmZXN0czoKKyAgICAgICAgICAgIHRlc3RzdWl0ZXMuZXh0ZW5kKHJlYWRfdGVzdGxpc3QoZCwgbWFuaWZlc3QpLnNwbGl0KCkpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHN1aXRlcyA9IGQuZ2V0VmFyKCJURVNUX1NVSVRFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBpZiB0eXBlID09ICJzZGsiOgorICAgICAgICB0ZXN0c3VpdGVzID0gKGQuZ2V0VmFyKCJURVNUX1NVSVRFU19TREsiLCBUcnVlKSBvciAiYXV0byIpLnNwbGl0KCkKKyAgICBiYnBhdGggPSBkLmdldFZhcigiQkJQQVRIIiwgVHJ1ZSkuc3BsaXQoJzonKQorCisgICAgIyBUaGlzIHJlbGllcyBvbiBsaWIvIHVuZGVyIGVhY2ggZGlyZWN0b3J5IGluIEJCUEFUSCBiZWluZyBhZGRlZCB0byBzeXMucGF0aAorICAgICMgKGFzIGRvbmUgYnkgZGVmYXVsdCBpbiBiYXNlLmJiY2xhc3MpCisgICAgZm9yIHRlc3RuYW1lIGluIHRlc3RzdWl0ZXM6CisgICAgICAgIGlmIHRlc3RuYW1lICE9ICJhdXRvIjoKKyAgICAgICAgICAgIGlmIHRlc3RuYW1lLnN0YXJ0c3dpdGgoIm9lcWEuIik6CisgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZCh0ZXN0bmFtZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIHAgaW4gYmJwYXRoOgorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwLCAnbGliJywgJ29lcWEnLCB0eXBlLCB0ZXN0bmFtZSArICcucHknKSk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzbGlzdC5hcHBlbmQoIm9lcWEuIiArIHR5cGUgKyAiLiIgKyB0ZXN0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBub3QgZm91bmQ6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ1Rlc3QgJXMgc3BlY2lmaWVkIGluIFRFU1RfU1VJVEVTIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiBsaWIvb2VxYS9ydW50aW1lIHVuZGVyIEJCUEFUSCcgJSB0ZXN0bmFtZSkKKworICAgIGlmICJhdXRvIiBpbiB0ZXN0c3VpdGVzOgorICAgICAgICBkZWYgYWRkX2F1dG9fbGlzdChwYXRoKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykpOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCdUZXN0cyBkaXJlY3RvcnkgJXMgZXhpc3RzIGJ1dCBpcyBtaXNzaW5nIF9faW5pdF9fLnB5JyAlIHBhdGgpCisgICAgICAgICAgICBmaWxlcyA9IHNvcnRlZChbZiBmb3IgZiBpbiBvcy5saXN0ZGlyKHBhdGgpIGlmIGYuZW5kc3dpdGgoJy5weScpIGFuZCBub3QgZi5zdGFydHN3aXRoKCdfJyldKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gJ29lcWEuJyArIHR5cGUgKyAnLicgKyBmWzotM10KKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgbm90IGluIHRlc3RzbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgdGVzdHNsaXN0LmFwcGVuZChtb2R1bGUpCisKKyAgICAgICAgZm9yIHAgaW4gYmJwYXRoOgorICAgICAgICAgICAgdGVzdHBhdGggPSBvcy5wYXRoLmpvaW4ocCwgJ2xpYicsICdvZXFhJywgdHlwZSkKKyAgICAgICAgICAgIGJiLmRlYnVnKDIsICdTZWFyY2hpbmcgZm9yIHRlc3RzIGluICVzJyAlIHRlc3RwYXRoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGVzdHBhdGgpOgorICAgICAgICAgICAgICAgIGFkZF9hdXRvX2xpc3QodGVzdHBhdGgpCisKKyAgICByZXR1cm4gdGVzdHNsaXN0CisKKworZGVmIGV4cG9ydFRlc3RzKGQsdGMpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBwa2d1dGlsCisKKyAgICBleHBvcnRwYXRoID0gZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpCisKKyAgICBzYXZlZGF0YSA9IHt9CisgICAgc2F2ZWRhdGFbImQiXSA9IHt9CisgICAgc2F2ZWRhdGFbInRhcmdldCJdID0ge30KKyAgICBzYXZlZGF0YVsiaG9zdF9kdW1wZXIiXSA9IHt9CisgICAgZm9yIGtleSBpbiB0Yy5fX2RpY3RfXzoKKyAgICAgICAgIyBzcGVjaWFsIGNhc2VzCisgICAgICAgIGlmIGtleSAhPSAiZCIgYW5kIGtleSAhPSAidGFyZ2V0IiBhbmQga2V5ICE9ICJob3N0X2R1bXBlciI6CisgICAgICAgICAgICBzYXZlZGF0YVtrZXldID0gZ2V0YXR0cih0Yywga2V5KQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXVsiaXAiXSA9IHRjLnRhcmdldC5pcCBvciBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKQorICAgIHNhdmVkYXRhWyJ0YXJnZXQiXVsic2VydmVyX2lwIl0gPSB0Yy50YXJnZXQuc2VydmVyX2lwIG9yIGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisKKyAgICBrZXlzID0gWyBrZXkgZm9yIGtleSBpbiBkLmtleXMoKSBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoIl8iKSBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJCQiIpIFwKKyAgICAgICAgICAgIGFuZCBub3Qga2V5LnN0YXJ0c3dpdGgoIkJfcG4iKSBhbmQgbm90IGtleS5zdGFydHN3aXRoKCJkb18iKSBhbmQgbm90IGQuZ2V0VmFyRmxhZyhrZXksICJmdW5jIildCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzYXZlZGF0YVsiZCJdW2tleV0gPSBkLmdldFZhcihrZXksIFRydWUpCisgICAgICAgIGV4Y2VwdCBiYi5kYXRhX3NtYXJ0LkV4cGFuc2lvbkVycm9yOgorICAgICAgICAgICAgIyB3ZSBkb24ndCBjYXJlIGFib3V0IHRob3NlIGFueXdheQorICAgICAgICAgICAgcGFzcworCisgICAgc2F2ZWRhdGFbImhvc3RfZHVtcGVyIl1bInBhcmVudF9kaXIiXSA9IHRjLmhvc3RfZHVtcGVyLnBhcmVudF9kaXIKKyAgICBzYXZlZGF0YVsiaG9zdF9kdW1wZXIiXVsiY21kcyJdID0gdGMuaG9zdF9kdW1wZXIuY21kcworCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAidGVzdGRhdGEuanNvbiIpLCAidyIpIGFzIGY6CisgICAgICAgICAgICBqc29uLmR1bXAoc2F2ZWRhdGEsIGYsIHNraXBrZXlzPVRydWUsIGluZGVudD00LCBzb3J0X2tleXM9VHJ1ZSkKKworICAgICMgbm93IHN0YXJ0IGNvcHlpbmcgZmlsZXMKKyAgICAjIHdlJ2xsIGJhc2ljYWxseSBjb3B5IGV2ZXJ5dGhpbmcgdW5kZXIgbWV0YS9saWIvb2VxYSwgd2l0aCB0aGVzZSBleGNlcHRpb25zCisgICAgIyAgLSBvZXFhL3RhcmdldGNvbnRyb2wucHkgLSBub3QgbmVlZGVkCisgICAgIyAgLSBvZXFhL3NlbGZ0ZXN0IC0gc29tZXRoaW5nIGVsc2UKKyAgICAjIFRoYXQgbWVhbnM6CisgICAgIyAgIC0gYWxsIHRlc3RzIGZyb20gb2VxYS9ydW50aW1lIGRlZmluZWQgaW4gVEVTVF9TVUlURVMgKGluY2x1ZGluZyBmcm9tIG90aGVyIGxheWVycykKKyAgICAjICAgLSB0aGUgY29udGVudHMgb2Ygb2VxYS91dGlscyBhbmQgb2VxYS9ydW50aW1lL2ZpbGVzCisgICAgIyAgIC0gb2VxYS9vZXRlc3QucHkgYW5kIG9lcWEvcnVuZXhwb3J0LnB5ICh0aGlzIHdpbGwgZ2V0IGNvcGllZCB0byBleHBvcnRwYXRoIG5vdCBleHBvcnRwYXRoL29lcWEpCisgICAgIyAgIC0gX19pbml0X18ucHkgZmlsZXMKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3J1bnRpbWUvZmlsZXMiKSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhL3V0aWxzIikpCisgICAgIyBjb3B5IHRlc3QgbW9kdWxlcywgdGhpcyBzaG91bGQgY292ZXIgdGVzdHMgaW4gb3RoZXIgbGF5ZXJzIHRvbworICAgIGZvciB0IGluIHRjLnRlc3RzbGlzdDoKKyAgICAgICAgbW9kID0gcGtndXRpbC5nZXRfbG9hZGVyKHQpCisgICAgICAgIHNodXRpbC5jb3B5Mihtb2QuZmlsZW5hbWUsIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS9ydW50aW1lIikpCisgICAgIyBjb3B5IF9faW5pdF9fLnB5IGZpbGVzCisgICAgb2VxYWRpciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcigib2VxYSIpLmZpbGVuYW1lCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAiX19pbml0X18ucHkiKSwgb3MucGF0aC5qb2luKGV4cG9ydHBhdGgsICJvZXFhIikpCisgICAgc2h1dGlsLmNvcHkyKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVudGltZS9fX2luaXRfXy5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZSIpKQorICAgICMgY29weSBvZXFhL29ldGVzdC5weSBhbmQgb2VxYS9ydW5leHBvcnRlZC5weQorICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ob2VxYWRpciwgIm9ldGVzdC5weSIpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEiKSkKKyAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKG9lcWFkaXIsICJydW5leHBvcnRlZC5weSIpLCBleHBvcnRwYXRoKQorICAgICMgY29weSBvZXFhL3V0aWxzLyoucHkKKyAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhvcy5wYXRoLmpvaW4ob2VxYWRpciwgInV0aWxzIikpOgorICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5Mihvcy5wYXRoLmpvaW4ocm9vdCwgZiksIG9zLnBhdGguam9pbihleHBvcnRwYXRoLCAib2VxYS91dGlscyIpKQorICAgICMgY29weSBvZXFhL3J1bnRpbWUvZmlsZXMvKgorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG9zLnBhdGguam9pbihvZXFhZGlyLCAicnVudGltZS9maWxlcyIpKToKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBzaHV0aWwuY29weTIob3MucGF0aC5qb2luKHJvb3QsIGYpLCBvcy5wYXRoLmpvaW4oZXhwb3J0cGF0aCwgIm9lcWEvcnVudGltZS9maWxlcyIpKQorCisgICAgYmIucGxhaW4oIkV4cG9ydGVkIHRlc3RzIHRvOiAlcyIgJSBleHBvcnRwYXRoKQorCisKK2RlZiB0ZXN0aW1hZ2VfbWFpbihkKToKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgb2VxYS5ydW50aW1lCisgICAgaW1wb3J0IHRpbWUKKyAgICBpbXBvcnQgc2lnbmFsCisgICAgZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgbG9hZFRlc3RzLCBydW5UZXN0cworICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBnZXRfdGFyZ2V0X2NvbnRyb2xsZXIKKyAgICBmcm9tIG9lcWEudXRpbHMuZHVtcCBpbXBvcnQgZ2V0X2hvc3RfZHVtcGVyCisKKyAgICBwbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisgICAgZXhwb3J0ID0gb2UudXRpbHMuY29uZGl0aW9uYWwoIlRFU1RfRVhQT1JUX09OTFkiLCAiMSIsIFRydWUsIEZhbHNlLCBkKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkpCisgICAgaWYgZXhwb3J0OgorICAgICAgICBiYi51dGlscy5yZW1vdmUoZC5nZXRWYXIoIlRFU1RfRVhQT1JUX0RJUiIsIFRydWUpLCByZWN1cnNlPVRydWUpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcigiVEVTVF9FWFBPUlRfRElSIiwgVHJ1ZSkpCisKKyAgICAjIHRlc3RzIGluIFRFU1RfU1VJVEVTIGJlY29tZSByZXF1aXJlZCB0ZXN0cworICAgICMgdGhleSB3b24ndCBiZSBza2lwcGVkIGV2ZW4gaWYgdGhleSBhcmVuJ3Qgc3VpdGFibGUgZm9yIGEgaW1hZ2UgKGxpa2UgeG9yZyBmb3IgbWluaW1hbCkKKyAgICAjIHRlc3RzbGlzdCBpcyB3aGF0IHdlJ2xsIGFjdHVhbGx5IHBhc3MgdG8gdGhlIHVuaXR0ZXN0IGxvYWRlcgorICAgIHRlc3RzbGlzdCA9IGdldF90ZXN0c19saXN0KGQpCisgICAgdGVzdHNyZXF1aXJlZCA9IFt0IGZvciB0IGluIGQuZ2V0VmFyKCJURVNUX1NVSVRFUyIsIFRydWUpLnNwbGl0KCkgaWYgdCAhPSAiYXV0byJdCisKKyAgICB0YWdleHAgPSBkLmdldFZhcigiVEVTVF9TVUlURVNfVEFHUyIsIFRydWUpCisKKyAgICAjIHdlIG5lZWQgdGhlIGhvc3QgZHVtcGVyIGluIHRlc3QgY29udGV4dAorICAgIGhvc3RfZHVtcGVyID0gZ2V0X2hvc3RfZHVtcGVyKGQpCisKKyAgICAjIHRoZSByb2JvdCBkYW5jZQorICAgIHRhcmdldCA9IGdldF90YXJnZXRfY29udHJvbGxlcihkKQorCisgICAgY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kID0gZAorICAgICAgICAgICAgc2VsZi50ZXN0c2xpc3QgPSB0ZXN0c2xpc3QKKyAgICAgICAgICAgIHNlbGYudGFnZXhwID0gdGFnZXhwCisgICAgICAgICAgICBzZWxmLnRlc3RzcmVxdWlyZWQgPSB0ZXN0c3JlcXVpcmVkCisgICAgICAgICAgICBzZWxmLmZpbGVzZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgob2VxYS5ydW50aW1lLl9fZmlsZV9fKSksImZpbGVzIikKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0ID0gdGFyZ2V0CisgICAgICAgICAgICBzZWxmLmhvc3RfZHVtcGVyID0gaG9zdF9kdW1wZXIKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VmZWF0dXJlcyA9IGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuZGlzdHJvZmVhdHVyZXMgPSBkLmdldFZhcigiRElTVFJPX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgIi5tYW5pZmVzdCIpCisgICAgICAgICAgICBzZWxmLnNpZ3Rlcm0gPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5vcmlnc2lndGVybWhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2VsZi5zaWd0ZXJtX2V4Y2VwdGlvbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obWFuaWZlc3QpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTm8gcGFja2FnZSBtYW5pZmVzdCBmaWxlIGZvdW5kLiBEaWQgeW91IGJ1aWxkIHRoZSBpbWFnZT9cbiVzIiAlIGUpCisKKyAgICAgICAgZGVmIHNpZ3Rlcm1fZXhjZXB0aW9uKHNlbGYsIHNpZ251bSwgc3RhY2tmcmFtZSk6CisgICAgICAgICAgICBiYi53YXJuKCJUZXN0SW1hZ2UgcmVjZWl2ZWQgU0lHVEVSTSwgc2h1dHRpbmcgZG93bi4uLiIpCisgICAgICAgICAgICBzZWxmLnNpZ3Rlcm0gPSBUcnVlCisgICAgICAgICAgICBzZWxmLnRhcmdldC5zdG9wKCkKKworICAgICMgdGVzdCBjb250ZXh0CisgICAgdGMgPSBUZXN0Q29udGV4dCgpCisKKyAgICAjIHRoaXMgaXMgYSBkdW1teSBsb2FkIG9mIHRlc3RzCisgICAgIyB3ZSBhcmUgZG9pbmcgdGhhdCB0byBmaW5kIGNvbXBpbGUgZXJyb3JzIGluIHRoZSB0ZXN0cyB0aGVtc2VsdmVzCisgICAgIyBiZWZvcmUgYm9vdGluZyB0aGUgaW1hZ2UKKyAgICB0cnk6CisgICAgICAgIGxvYWRUZXN0cyh0YykKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgYmIuZmF0YWwoIkxvYWRpbmcgdGVzdHMgZmFpbGVkOlxuJXMiICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKworICAgIHRhcmdldC5kZXBsb3koKQorCisgICAgdHJ5OgorICAgICAgICB0YXJnZXQuc3RhcnQoKQorICAgICAgICBpZiBleHBvcnQ6CisgICAgICAgICAgICBleHBvcnRUZXN0cyhkLHRjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1blRlc3RzKHRjKQorICAgICAgICAgICAgc3RvcHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKKyAgICAgICAgICAgICAgICBiYi5wbGFpbigiJXMgLSBSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlIChwbiwgcmVzdWx0LnRlc3RzUnVuLCByZXN1bHQudGVzdHNSdW4gIT0gMSBhbmQgInMiIG9yICIiLCBzdG9wdGltZSAtIHN0YXJ0dGltZSkpCisgICAgICAgICAgICAgICAgbXNnID0gIiVzIC0gT0sgLSBBbGwgcmVxdWlyZWQgdGVzdHMgcGFzc2VkIiAlIHBuCisgICAgICAgICAgICAgICAgc2tpcHBlZCA9IGxlbihyZXN1bHQuc2tpcHBlZCkKKyAgICAgICAgICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIiAoc2tpcHBlZD0lZCkiICUgc2tpcHBlZAorICAgICAgICAgICAgICAgIGJiLnBsYWluKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBzc2ggbG9nIiAlIHBuICkKKyAgICBmaW5hbGx5OgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdURVJNLCB0Yy5vcmlnc2lndGVybWhhbmRsZXIpCisgICAgICAgIHRhcmdldC5zdG9wKCkKKwordGVzdGltYWdlX21haW5bdmFyZGVwc2V4Y2x1ZGVdID0rICJCQl9PUklHRU5WIgorCisKK2RlZiB0ZXN0c2RrX21haW4oZCk6CisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgaW1wb3J0IG9zCisgICAgaW1wb3J0IGdsb2IKKyAgICBpbXBvcnQgb2VxYS5ydW50aW1lCisgICAgaW1wb3J0IG9lcWEuc2RrCisgICAgaW1wb3J0IHRpbWUKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGZyb20gb2VxYS5vZXRlc3QgaW1wb3J0IGxvYWRUZXN0cywgcnVuVGVzdHMKKworICAgIHBuID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpKQorCisgICAgIyB0ZXN0cyBpbiBURVNUX1NVSVRFUyBiZWNvbWUgcmVxdWlyZWQgdGVzdHMKKyAgICAjIHRoZXkgd29uJ3QgYmUgc2tpcHBlZCBldmVuIGlmIHRoZXkgYXJlbid0IHN1aXRhYmxlLgorICAgICMgdGVzdHNsaXN0IGlzIHdoYXQgd2UnbGwgYWN0dWFsbHkgcGFzcyB0byB0aGUgdW5pdHRlc3QgbG9hZGVyCisgICAgdGVzdHNsaXN0ID0gZ2V0X3Rlc3RzX2xpc3QoZCwgInNkayIpCisgICAgdGVzdHNyZXF1aXJlZCA9IFt0IGZvciB0IGluIChkLmdldFZhcigiVEVTVF9TVUlURVNfU0RLIiwgVHJ1ZSkgb3IgImF1dG8iKS5zcGxpdCgpIGlmIHQgIT0gImF1dG8iXQorCisgICAgdGNuYW1lID0gZC5leHBhbmQoIiR7U0RLX0RFUExPWX0vJHtUT09MQ0hBSU5fT1VUUFVUTkFNRX0uc2giKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0Y25hbWUpOgorICAgICAgICBiYi5mYXRhbCgiVGhlIHRvb2xjaGFpbiBpcyBub3QgYnVpbHQuIEJ1aWxkIGl0IGJlZm9yZSBydW5uaW5nIHRoZSB0ZXN0czogJ2JpdGJha2UgPGltYWdlPiAtYyBwb3B1bGF0ZV9zZGsnIC4iKQorCisgICAgY2xhc3MgVGVzdENvbnRleHQob2JqZWN0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kID0gZAorICAgICAgICAgICAgc2VsZi50ZXN0c2xpc3QgPSB0ZXN0c2xpc3QKKyAgICAgICAgICAgIHNlbGYudGVzdHNyZXF1aXJlZCA9IHRlc3RzcmVxdWlyZWQKKyAgICAgICAgICAgIHNlbGYuZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguYWJzcGF0aChvZXFhLnJ1bnRpbWUuX19maWxlX18pKSwiZmlsZXMiKQorICAgICAgICAgICAgc2VsZi5zZGt0ZXN0ZGlyID0gc2RrdGVzdGRpcgorICAgICAgICAgICAgc2VsZi5zZGtlbnYgPSBzZGtlbnYKKyAgICAgICAgICAgIHNlbGYuaW1hZ2VmZWF0dXJlcyA9IGQuZ2V0VmFyKCJJTUFHRV9GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgIHNlbGYuZGlzdHJvZmVhdHVyZXMgPSBkLmdldFZhcigiRElTVFJPX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgbWFuaWZlc3QgPSBkLmdldFZhcigiU0RLX1RBUkdFVF9NQU5JRkVTVCIsIFRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1hbmlmZXN0KSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnBrZ21hbmlmZXN0ID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHBhY2thZ2UgbWFuaWZlc3QgZmlsZSBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgc2RrIGltYWdlP1xuJXMiICUgZSkKKyAgICAgICAgICAgIGhvc3RtYW5pZmVzdCA9IGQuZ2V0VmFyKCJTREtfSE9TVF9NQU5JRkVTVCIsIFRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGhvc3RtYW5pZmVzdCkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3N0cGtnbWFuaWZlc3QgPSBmLnJlYWQoKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiTm8gaG9zdCBwYWNrYWdlIG1hbmlmZXN0IGZpbGUgZm91bmQuIERpZCB5b3UgYnVpbGQgdGhlIHNkayBpbWFnZT9cbiVzIiAlIGUpCisKKyAgICBzZGt0ZXN0ZGlyID0gZC5leHBhbmQoIiR7V09SS0RJUn0vdGVzdGltYWdlLXNkay8iKQorICAgIGJiLnV0aWxzLnJlbW92ZShzZGt0ZXN0ZGlyLCBUcnVlKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZGt0ZXN0ZGlyKQorICAgIHRyeToKKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImNkICVzOyAlcyA8PEVPRlxuLi90Y1xuWVxuRU9GIiAlIChzZGt0ZXN0ZGlyLCB0Y25hbWUpLCBzaGVsbD1UcnVlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBiYi5mYXRhbCgiQ291bGRuJ3QgaW5zdGFsbCB0aGUgU0RLOlxuJXMiICUgZS5vdXRwdXQpCisKKyAgICB0cnk6CisgICAgICAgIHRhcmdldHMgPSBnbG9iLmdsb2IoZC5leHBhbmQoc2RrdGVzdGRpciArICIvdGMvZW52aXJvbm1lbnQtc2V0dXAtKiIpKQorICAgICAgICBiYi53YXJuKHN0cih0YXJnZXRzKSkKKyAgICAgICAgZm9yIHNka2VudiBpbiB0YXJnZXRzOgorICAgICAgICAgICAgYmIucGxhaW4oIlRlc3RpbmcgJXMiICUgc2RrZW52KQorICAgICAgICAgICAgIyB0ZXN0IGNvbnRleHQKKyAgICAgICAgICAgIHRjID0gVGVzdENvbnRleHQoKQorCisgICAgICAgICAgICAjIHRoaXMgaXMgYSBkdW1teSBsb2FkIG9mIHRlc3RzCisgICAgICAgICAgICAjIHdlIGFyZSBkb2luZyB0aGF0IHRvIGZpbmQgY29tcGlsZSBlcnJvcnMgaW4gdGhlIHRlc3RzIHRoZW1zZWx2ZXMKKyAgICAgICAgICAgICMgYmVmb3JlIGJvb3RpbmcgdGhlIGltYWdlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9hZFRlc3RzKHRjLCAic2RrIikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIkxvYWRpbmcgdGVzdHMgZmFpbGVkOlxuJXMiICUgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKworICAgIAorICAgICAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1blRlc3RzKHRjLCAic2RrIikKKyAgICAgICAgICAgIHN0b3B0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGlmIHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6CisgICAgICAgICAgICAgICAgYmIucGxhaW4oIiVzIFNESyglcyk6JXMgLSBSYW4gJWQgdGVzdCVzIGluICUuM2ZzIiAlIChwbiwgb3MucGF0aC5iYXNlbmFtZSh0Y25hbWUpLCBvcy5wYXRoLmJhc2VuYW1lKHNka2VudikscmVzdWx0LnRlc3RzUnVuLCByZXN1bHQudGVzdHNSdW4gIT0gMSBhbmQgInMiIG9yICIiLCBzdG9wdGltZSAtIHN0YXJ0dGltZSkpCisgICAgICAgICAgICAgICAgbXNnID0gIiVzIC0gT0sgLSBBbGwgcmVxdWlyZWQgdGVzdHMgcGFzc2VkIiAlIHBuCisgICAgICAgICAgICAgICAgc2tpcHBlZCA9IGxlbihyZXN1bHQuc2tpcHBlZCkKKyAgICAgICAgICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIiAoc2tpcHBlZD0lZCkiICUgc2tpcHBlZAorICAgICAgICAgICAgICAgIGJiLnBsYWluKG1zZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBjb21tYW5kcyBsb2ciICUgcG4gKQorICAgIGZpbmFsbHk6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZGt0ZXN0ZGlyLCBUcnVlKQorCit0ZXN0c2RrX21haW5bdmFyZGVwc2V4Y2x1ZGVdID0rICJCQl9PUklHRU5WIgorCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdGV4aW5mby5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVmYmNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3RleGluZm8uYmJjbGFzcwpAQCAtMCwwICsxLDE1IEBACisjIFRoaXMgY2xhc3MgaXMgaW5oZXJpdGVkIGJ5IHJlY2lwZXMgd2hvc2UgdXBzdHJlYW0gcGFja2FnZXMgaW52b2tlIHRoZQorIyB0ZXhpbmZvIHV0aWxpdGllcyBhdCBidWlsZC10aW1lLiBOYXRpdmUgYW5kIGNyb3NzIHJlY2lwZXMgYXJlIG1hZGUgdG8gdXNlIHRoZQorIyBkdW1teSBzY3JpcHRzIHByb3ZpZGVkIGJ5IHRleGluZm8tZHVtbXktbmF0aXZlLCBmb3IgaW1wcm92ZWQgcGVyZm9ybWFuY2UuIAorIyBUYXJnZXQgYXJjaGl0ZWN0dXJlIHJlY2lwZXMgdXNlIHRoZSBnZW51aW5lIFRleGluZm8gdXRpbGl0aWVzLiBCeSBkZWZhdWx0LCAKKyMgdGhleSB1c2UgdGhlIFRleGluZm8gdXRpbGl0aWVzIG9uIHRoZSBob3N0IHN5c3RlbS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoZQorIyBUZXhpbmZvIHJlY2lwZSBzaGlwcGVkIHdpdGggeW9jbywgeW91IGNhbiByZW1vdmUgdGV4aW5mby1uYXRpdmUgZnJvbSAKKyMgQVNTVU1FX1BST1ZJREVEIGFuZCBtYWtlaW5mbyBmcm9tIFNBTklUWV9SRVFVSVJFRF9VVElMSVRJRVMuCisKK1RFWERFUCA9ICJ0ZXhpbmZvLW5hdGl2ZSIKK1RFWERFUF9jbGFzcy1uYXRpdmUgPSAidGV4aW5mby1kdW1teS1uYXRpdmUiCitURVhERVBfY2xhc3MtY3Jvc3MgPSAidGV4aW5mby1kdW1teS1uYXRpdmUiCitERVBFTkRTX2FwcGVuZCA9ICIgJHtURVhERVB9IgorUEFUSF9wcmVwZW5kX2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vdGV4aW5mby1kdW1teS1uYXRpdmU6IgorUEFUSF9wcmVwZW5kX2NsYXNzLWNyb3NzID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS90ZXhpbmZvLWR1bW15LW5hdGl2ZToiCisKZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90aW5kZXJjbGllbnQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTg0ZWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3RpbmRlcmNsaWVudC5iYmNsYXNzCkBAIC0wLDAgKzEsMzY4IEBACitkZWYgdGluZGVyX2h0dHBfcG9zdChzZXJ2ZXIsIHNlbGVjdG9yLCBjb250ZW50X3R5cGUsIGJvZHkpOgorICAgIGltcG9ydCBodHRwbGliCisgICAgIyBub3cgcG9zdCBpdAorICAgIGZvciBpIGluIHJhbmdlKDAsNSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBodHRwbGliLkhUVFAoc2VydmVyKQorICAgICAgICAgICAgaC5wdXRyZXF1ZXN0KCdQT1NUJywgc2VsZWN0b3IpCisgICAgICAgICAgICBoLnB1dGhlYWRlcignY29udGVudC10eXBlJywgY29udGVudF90eXBlKQorICAgICAgICAgICAgaC5wdXRoZWFkZXIoJ2NvbnRlbnQtbGVuZ3RoJywgc3RyKGxlbihib2R5KSkpCisgICAgICAgICAgICBoLmVuZGhlYWRlcnMoKQorICAgICAgICAgICAgaC5zZW5kKGJvZHkpCisgICAgICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMgPSBoLmdldHJlcGx5KCkKKyAgICAgICAgICAgICNwcmludCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMKKyAgICAgICAgICAgIHJldHVybiAoZXJyY29kZSxlcnJtc2csIGhlYWRlcnMsIGguZmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcHJpbnQgIkVycm9yIHNlbmRpbmcgdGhlIHJlcG9ydCEiCisgICAgICAgICAgICAjIHRyeSBhZ2FpbgorICAgICAgICAgICAgcGFzcworCisgICAgIyByZXR1cm4gc29tZSBnYXJiYWdlCisgICAgcmV0dXJuICgtMSwgInVua25vd24iLCAidW5rbm93biIsIE5vbmUpCisKK2RlZiB0aW5kZXJfZm9ybV9kYXRhKGJvdW5kLCBkaWN0LCBsb2cpOgorICAgIG91dHB1dCA9IFtdCisgICAgIyBmb3IgZWFjaCBrZXkgaW4gdGhlIGRpY3Rpb25hcnkKKyAgICBmb3IgbmFtZSBpbiBkaWN0OgorICAgICAgICBhc3NlcnQgZGljdFtuYW1lXQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiLS0iICsgYm91bmQgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAnQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSIlcyInICUgbmFtZSApCisgICAgICAgIG91dHB1dC5hcHBlbmQoICIiICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggZGljdFtuYW1lXSApCisgICAgaWYgbG9nOgorICAgICAgICBvdXRwdXQuYXBwZW5kKCAiLS0iICsgYm91bmQgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCAnQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJsb2ciOyBmaWxlbmFtZT0ibG9nLnR4dCInICkKKyAgICAgICAgb3V0cHV0LmFwcGVuZCggJycgKQorICAgICAgICBvdXRwdXQuYXBwZW5kKCBsb2cgKQorICAgIG91dHB1dC5hcHBlbmQoICctLScgKyBib3VuZCArICctLScgKQorICAgIG91dHB1dC5hcHBlbmQoICcnICkKKworICAgIHJldHVybiAiXHJcbiIuam9pbihvdXRwdXQpCisKK2RlZiB0aW5kZXJfdGltZV9zdHJpbmcoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIHRpbWUgYXMgR01UCisgICAgIiIiCisgICAgcmV0dXJuICIiCisKK2RlZiB0aW5kZXJfZm9ybWF0X2h0dHBfcG9zdChkLHN0YXR1cyxsb2cpOgorICAgICIiIgorICAgIEZvcm1hdCB0aGUgVGluZGVyYm94IEhUVFAgcG9zdCB3aXRoIHRoZSBkYXRhIG5lZWRlZAorICAgIGZvciB0aGUgdGluZGVyYm94IHRvIGJlIGhhcHB5LgorICAgICIiIgorCisgICAgaW1wb3J0IHJhbmRvbQorCisgICAgIyB0aGUgdmFyaWFibGVzIHdlIHdpbGwgbmVlZCB0byBzZW5kIG9uIHRoaXMgZm9ybSBwb3N0CisgICAgdmFyaWFibGVzID0gIHsKKyAgICAgICAgInRyZWUiICAgICAgICAgOiBkLmdldFZhcignVElOREVSX1RSRUUnLCBUcnVlKSwKKyAgICAgICAgIm1hY2hpbmVfbmFtZSIgOiBkLmdldFZhcignVElOREVSX01BQ0hJTkUnLCBUcnVlKSwKKyAgICAgICAgIm9zIiAgICAgICAgICAgOiBvcy51bmFtZSgpWzBdLAorICAgICAgICAib3NfdmVyc2lvbiIgICA6IG9zLnVuYW1lKClbMl0sCisgICAgICAgICJjb21waWxlciIgICAgIDogImdjYyIsCisgICAgICAgICJjbG9iYmVyIiAgICAgIDogZC5nZXRWYXIoJ1RJTkRFUl9DTE9CQkVSJywgVHJ1ZSkgb3IgIjAiLAorICAgICAgICAic3JjZGF0ZSIgICAgICA6IGQuZ2V0VmFyKCdTUkNEQVRFJywgVHJ1ZSksCisgICAgICAgICJQTiIgICAgICAgICAgIDogZC5nZXRWYXIoJ1BOJywgVHJ1ZSksCisgICAgICAgICJQViIgICAgICAgICAgIDogZC5nZXRWYXIoJ1BWJywgVHJ1ZSksCisgICAgICAgICJQUiIgICAgICAgICAgIDogZC5nZXRWYXIoJ1BSJywgVHJ1ZSksCisgICAgICAgICJGSUxFIiAgICAgICAgIDogZC5nZXRWYXIoJ0ZJTEUnLCBUcnVlKSBvciAiTi9BIiwKKyAgICAgICAgIlRBUkdFVEFSQ0giICAgOiBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwKKyAgICAgICAgIlRBUkdFVEZQVSIgICAgOiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIG9yICJVbmtub3duIiwKKyAgICAgICAgIlRBUkdFVE9TIiAgICAgOiBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiTUFDSElORSIgICAgICA6IGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkgb3IgIlVua25vd24iLAorICAgICAgICAiRElTVFJPIiAgICAgICA6IGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKSBvciAiVW5rbm93biIsCisgICAgICAgICJ6ZWNrZS1yb2NrcyIgIDogInN1cmUiLAorICAgIH0KKworICAgICMgb3B0aW9uYWxseSBhZGQgdGhlIHN0YXR1cworICAgIGlmIHN0YXR1czoKKyAgICAgICAgdmFyaWFibGVzWyJzdGF0dXMiXSA9IHN0cihzdGF0dXMpCisKKyAgICAjIHRyeSB0byBsb2FkIHRoZSBtYWNoaW5lIGlkCisgICAgIyB3ZSBvbmx5IG5lZWQgb24gYnVpbGRfc3RhdHVzLnBsIGJ1dCBzZW5kaW5nIGl0CisgICAgIyBhbHdheXMgZG9lcyBub3QgaHVydAorICAgIHRyeToKKyAgICAgICAgZiA9IGZpbGUoZC5nZXRWYXIoJ1RNUERJUicsVHJ1ZSkrJy90aW5kZXItbWFjaGluZS5pZCcsICdyJykKKyAgICAgICAgaWQgPSBmLnJlYWQoKQorICAgICAgICB2YXJpYWJsZXNbJ21hY2hpbmVfaWQnXSA9IGlkCisgICAgZXhjZXB0OgorICAgICAgICBwYXNzCisKKyAgICAjIHRoZSBib3VuZGFyeSB3ZSB3aWxsIG5lZWQKKyAgICBib3VuZGFyeSA9ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJWQiICUgaW50KHJhbmRvbS5yYW5kb20oKSoxMDAwMDAwMDAwMDAwKQorCisgICAgIyBub3cgZm9ybWF0IHRoZSBib2R5CisgICAgYm9keSA9IHRpbmRlcl9mb3JtX2RhdGEoIGJvdW5kYXJ5LCB2YXJpYWJsZXMsIGxvZyApCisKKyAgICByZXR1cm4gKCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0lcyIgJSBib3VuZGFyeSksYm9keQorCisKK2RlZiB0aW5kZXJfYnVpbGRfc3RhcnQoZCk6CisgICAgIiIiCisgICAgSW5mb3JtIHRoZSB0aW5kZXJib3ggdGhhdCBhIGJ1aWxkIGlzIHN0YXJ0aW5nLiBXZSBkbyB0aGlzCisgICAgYnkgcG9zdGluZyBvdXIgbmFtZSBhbmQgdHJlZSB0byB0aGUgYnVpbGRfc3RhcnQucGwgc2NyaXB0CisgICAgb24gdGhlIHNlcnZlci4KKyAgICAiIiIKKworICAgICMgZ2V0IHRoZSBib2R5IGFuZCB0eXBlCisgICAgY29udGVudF90eXBlLCBib2R5ID0gdGluZGVyX2Zvcm1hdF9odHRwX3Bvc3QoZCxOb25lLE5vbmUpCisgICAgc2VydmVyID0gZC5nZXRWYXIoJ1RJTkRFUl9IT1NUJywgVHJ1ZSApCisgICAgdXJsICAgID0gZC5nZXRWYXIoJ1RJTkRFUl9VUkwnLCBUcnVlICkKKworICAgIHNlbGVjdG9yID0gdXJsICsgIi94bWwvYnVpbGRfc3RhcnQucGwiCisKKyAgICAjcHJpbnQgInNlbGVjdG9yICVzIGFuZCB1cmwgJXMiICUgKHNlbGVjdG9yLCB1cmwpCisKKyAgICAjIG5vdyBwb3N0IGl0CisgICAgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzLCBoX2ZpbGUgPSB0aW5kZXJfaHR0cF9wb3N0KHNlcnZlcixzZWxlY3Rvcixjb250ZW50X3R5cGUsIGJvZHkpCisgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycworICAgIHJlcG9ydCA9IGhfZmlsZS5yZWFkKCkKKworICAgICMgbm93IGxldCB1cyBmaW5kIHRoZSBtYWNoaW5lIGlkIHRoYXQgd2FzIGFzc2lnbmVkIHRvIHVzCisgICAgc2VhcmNoID0gIjxtYWNoaW5lIGlkPSciCisgICAgcmVwb3J0ID0gcmVwb3J0W3JlcG9ydC5maW5kKHNlYXJjaCkrbGVuKHNlYXJjaCk6XQorICAgIHJlcG9ydCA9IHJlcG9ydFswOnJlcG9ydC5maW5kKCInIildCisKKyAgICBiYi5ub3RlKCJNYWNoaW5lIElEIGFzc2lnbmVkIGJ5IHRpbmRlcmJveDogJXMiICUgcmVwb3J0ICkKKworICAgICMgbm93IHdlIHdpbGwgbmVlZCB0byBzYXZlIHRoZSBtYWNoaW5lIG51bWJlcgorICAgICMgd2Ugd2lsbCBvdmVycmlkZSBhbnkgcHJldmlvdXMgbnVtYmVycworICAgIGYgPSBmaWxlKGQuZ2V0VmFyKCdUTVBESVInLCBUcnVlKSsiL3RpbmRlci1tYWNoaW5lLmlkIiwgJ3cnKQorICAgIGYud3JpdGUocmVwb3J0KQorCisKK2RlZiB0aW5kZXJfc2VuZF9odHRwKGQsIHN0YXR1cywgX2xvZyk6CisgICAgIiIiCisgICAgU2VuZCB0aGlzIGxvZyBhcyBidWlsZCBzdGF0dXMKKyAgICAiIiIKKworICAgICMgZ2V0IHRoZSBib2R5IGFuZCB0eXBlCisgICAgc2VydmVyID0gZC5nZXRWYXIoJ1RJTkRFUl9IT1NUJywgVHJ1ZSkKKyAgICB1cmwgICAgPSBkLmdldFZhcignVElOREVSX1VSTCcsIFRydWUpCisKKyAgICBzZWxlY3RvciA9IHVybCArICIveG1sL2J1aWxkX3N0YXR1cy5wbCIKKworICAgICMgbm93IHBvc3QgaXQgLSBpbiBjaHVua3Mgb2YgMTAuMDAwIGNoYXJhY2h0ZXJzCisgICAgbmV3X2xvZyA9IF9sb2cKKyAgICB3aGlsZSBsZW4obmV3X2xvZykgPiAwOgorICAgICAgICBjb250ZW50X3R5cGUsIGJvZHkgPSB0aW5kZXJfZm9ybWF0X2h0dHBfcG9zdChkLHN0YXR1cyxuZXdfbG9nWzA6MTgwMDBdKQorICAgICAgICBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIGhfZmlsZSA9IHRpbmRlcl9odHRwX3Bvc3Qoc2VydmVyLHNlbGVjdG9yLGNvbnRlbnRfdHlwZSwgYm9keSkKKyAgICAgICAgI3ByaW50IGVycmNvZGUsIGVycm1zZywgaGVhZGVycworICAgICAgICAjcHJpbnQgaC5maWxlLnJlYWQoKQorICAgICAgICBuZXdfbG9nID0gbmV3X2xvZ1sxODAwMDpdCisKKworZGVmIHRpbmRlcl9wcmludF9pbmZvKGQpOgorICAgICIiIgorICAgIFByaW50IHRoZSBUaW5kZXJCb3ggSW5mbworICAgICAgICBJbmNsdWRpbmcgaW5mb3JtYXRpb25zIG9mIHRoZSBCYXNlU3lzdGVtIGFuZCB0aGUgVHJlZQorICAgICAgICB3ZSB1c2UuCisgICAgIiIiCisKKyAgICAjIGdldCB0aGUgbG9jYWwgdmFycworICAgIHRpbWUgICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIG9wcyAgICAgPSBvcy51bmFtZSgpWzBdCisgICAgdmVyc2lvbiA9IG9zLnVuYW1lKClbMl0KKyAgICB1cmwgICAgID0gZC5nZXRWYXIoICdUSU5ERVJfVVJMJyAsIFRydWUgKQorICAgIHRyZWUgICAgPSBkLmdldFZhciggJ1RJTkRFUl9UUkVFJywgVHJ1ZSApCisgICAgYnJhbmNoICA9IGQuZ2V0VmFyKCAnVElOREVSX0JSQU5DSCcsIFRydWUgKQorICAgIHNyY2RhdGUgPSBkLmdldFZhciggJ1NSQ0RBVEUnLCBUcnVlICkKKyAgICBtYWNoaW5lID0gZC5nZXRWYXIoICdNQUNISU5FJywgVHJ1ZSApCisgICAgZGlzdHJvICA9IGQuZ2V0VmFyKCAnRElTVFJPJywgVHJ1ZSApCisgICAgYmJmaWxlcyA9IGQuZ2V0VmFyKCAnQkJGSUxFUycsIFRydWUgKQorICAgIHRhcmNoICAgPSBkLmdldFZhciggJ1RBUkdFVF9BUkNIJywgVHJ1ZSApCisgICAgZnB1ICAgICA9IGQuZ2V0VmFyKCAnVEFSR0VUX0ZQVScsIFRydWUgKQorICAgIG9lcmV2ICAgPSBkLmdldFZhciggJ09FX1JFVklTSU9OJywgVHJ1ZSApIG9yICJ1bmtub3duIgorCisgICAgIyB0aGVyZSBpcyBhIGJ1ZyB3aXRoIHRpcHBsZSBxdW90ZWQgc3RyaW5ncworICAgICMgaSB3aWxsIHdvcmsgYXJvdW5kIGJ1dCB3aWxsIGZpeCB0aGUgb3JpZ2luYWwKKyAgICAjIGJ1ZyBhcyB3ZWxsCisgICAgb3V0cHV0ID0gW10KKyAgICBvdXRwdXQuYXBwZW5kKCI9PSBUaW5kZXJib3ggSW5mbyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRpbWU6ICUodGltZSlzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiT1M6ICUob3BzKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCIlKHZlcnNpb24pcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIkNvbXBpbGVyOiBnY2MiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggQ2xpZW50OiAwLjEiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJUaW5kZXJib3ggQ2xpZW50IExhc3QgTW9kaWZpZWQ6IHllc3RlcmRheSIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRpbmRlcmJveCBQcm90b2NvbDogMC4xIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVVJMOiAlKHVybClzIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVHJlZTogJSh0cmVlKXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCJDb25maWc6IiApCisgICAgb3V0cHV0LmFwcGVuZCgiYnJhbmNoID0gJyUoYnJhbmNoKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiVEFSR0VUX0FSQ0ggPSAnJSh0YXJjaClzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIlRBUkdFVF9GUFUgPSAnJShmcHUpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJTUkNEQVRFID0gJyUoc3JjZGF0ZSlzJyIgKQorICAgIG91dHB1dC5hcHBlbmQoIk1BQ0hJTkUgPSAnJShtYWNoaW5lKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiRElTVFJPID0gJyUoZGlzdHJvKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiQkJGSUxFUyA9ICclKGJiZmlsZXMpcyciICkKKyAgICBvdXRwdXQuYXBwZW5kKCJPRVJFViA9ICclKG9lcmV2KXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCgiPT0gRW5kIFRpbmRlcmJveCBDbGllbnQgSW5mbyIgKQorCisgICAgIyBub3cgY3JlYXRlIHRoZSByZWFsIG91dHB1dAorICAgIHJldHVybiAiXG4iLmpvaW4ob3V0cHV0KSAlIHZhcnMoKQorCisKK2RlZiB0aW5kZXJfcHJpbnRfZW52KCk6CisgICAgIiIiCisgICAgUHJpbnQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvZiB0aGlzIGJ1aWxkCisgICAgIiIiCisgICAgdGltZV9zdGFydCA9IHRpbmRlcl90aW1lX3N0cmluZygpCisgICAgdGltZV9lbmQgICA9IHRpbmRlcl90aW1lX3N0cmluZygpCisKKyAgICAjIGJ1aWxkIHRoZSBlbnZpcm9ubWVudAorICAgIGVudiA9ICIiCisgICAgZm9yIHZhciBpbiBvcy5lbnZpcm9uOgorICAgICAgICBlbnYgKz0gIiVzPSVzXG4iICUgKHZhciwgb3MuZW52aXJvblt2YXJdKQorCisgICAgb3V0cHV0ID0gW10KKyAgICBvdXRwdXQuYXBwZW5kKCAiLS0tPiBUSU5ERVJCT1ggUlVOTklORyBlbnYgJSh0aW1lX3N0YXJ0KXMiICkKKyAgICBvdXRwdXQuYXBwZW5kKCBlbnYgKQorICAgIG91dHB1dC5hcHBlbmQoICI8LS0tIFRJTkRFUkJPWCBGSU5JU0hFRCAoU1VDQ0VTUykgJSh0aW1lX2VuZClzIiApCisKKyAgICByZXR1cm4gIlxuIi5qb2luKG91dHB1dCkgJSB2YXJzKCkKKworZGVmIHRpbmRlcl90aW5kZXJfc3RhcnQoZCwgZXZlbnQpOgorICAgICIiIgorICAgIFBSSU5UIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoaXMgYnVpbGQKKyAgICAiIiIKKworICAgIHRpbWVfc3RhcnQgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIGNvbmZpZyA9IHRpbmRlcl9wcmludF9pbmZvKGQpCisgICAgI2VudiAgICA9IHRpbmRlcl9wcmludF9lbnYoKQorICAgIHRpbWVfZW5kICAgPSB0aW5kZXJfdGltZV9zdHJpbmcoKQorICAgIHBhY2thZ2VzID0gIiAiLmpvaW4oIGV2ZW50LmdldFBrZ3MoKSApIAorCisgICAgb3V0cHV0ID0gW10KKyAgICBvdXRwdXQuYXBwZW5kKCAiLS0tPiBUSU5ERVJCT1ggUFJJTlRJTkcgQ09ORklHVVJBVElPTiAlKHRpbWVfc3RhcnQpcyIgKQorICAgIG91dHB1dC5hcHBlbmQoIGNvbmZpZyApCisgICAgI291dHB1dC5hcHBlbmQoIGVudiAgICApCisgICAgb3V0cHV0LmFwcGVuZCggIjwtLS0gVElOREVSQk9YIEZJTklTSEVEIFBSSU5USU5HIENPTkZJR1VSQVRJT04gJSh0aW1lX2VuZClzIiApCisgICAgb3V0cHV0LmFwcGVuZCggIi0tLT4gVElOREVSQk9YIEJVSUxESU5HICclKHBhY2thZ2VzKXMnIiApCisgICAgb3V0cHV0LmFwcGVuZCggIjwtLS0gVElOREVSQk9YIFNUQVJUSU5HIEJVSUxEIE5PVyIgKQorCisgICAgb3V0cHV0LmFwcGVuZCggIiIgKQorCisgICAgcmV0dXJuICJcbiIuam9pbihvdXRwdXQpICUgdmFycygpCisKK2RlZiB0aW5kZXJfZG9fdGluZGVyX3JlcG9ydChldmVudCk6CisgICAgIiIiCisgICAgUmVwb3J0IHRvIHRoZSB0aW5kZXJib3g6CisgICAgICAgIE9uIHRoZSBCdWlsZFN0YXJ0IHdlIHdpbGwgaW5mb3JtIHRoZSBib3ggZGlyZWN0bHkKKyAgICAgICAgT24gdGhlIG90aGVyIGV2ZW50cyB3ZSB3aWxsIHdyaXRlIHRvIHRoZSBUSU5ERVJfTE9HIGFuZAorICAgICAgICB3aGVuIHRoZSBUYXNrIGlzIGZpbmlzaGVkIHdlIHdpbGwgc2VuZCB0aGUgcmVwb3J0LgorCisgICAgVGhlIGFib3ZlIGlzIG5vdCB5ZXQgZnVsbHkgaW1wbGVtZW50ZWQuIEN1cnJlbnRseSB3ZSBzZW5kCisgICAgaW5mb3JtYXRpb24gaW1tZWRpYXRlbHkuIFRoZSBjYWNoaW5nL3F1ZXVpbmcgbmVlZHMgdG8gYmUKKyAgICBpbXBsZW1lbnRlZC4gQWxzbyBzZW5kaW5nIG1vcmUgb3IgbGVzcyBpbmZvcm1hdGlvbiBpcyBub3QKKyAgICBpbXBsZW1lbnRlZCB5ZXQuCisKKyAgICBXZSBoYXZlIHR3byB0ZW1wb3JhcnkgZmlsZXMgc3RvcmVkIGluIHRoZSBUTVAgZGlyZWN0b3J5LiBPbmUgZmlsZQorICAgIGNvbnRhaW5zIHRoZSBhc3NpZ25lZCBtYWNoaW5lIGlkIGZvciB0aGUgdGluZGVyY2xpZW50LiBUaGlzIGlkIGdldHMKKyAgICBhc3NpZ25lZCB3aGVuIHdlIGNvbm5lY3QgdGhlIGJveCBhbmQgc3RhcnQgdGhlIGJ1aWxkIHByb2Nlc3MgdGhlIHNlY29uZAorICAgIGZpbGUgaXMgdXNlZCB0byB3b3JrYXJvdW5kIGFuIEV2ZW50SGFuZGxlciBsaW1pdGF0aW9uLiBJZiBCaXRCYWtlIGlzIHJhbgorICAgIHdpdGggdGhlIGNvbnRpbnVlIG9wdGlvbiB3ZSB3YW50IHRoZSBCdWlsZCB0byBmYWlsIGV2ZW4gaWYgd2UgZ2V0IHRoZQorICAgIEJ1aWxkQ29tcGxldGVkIEV2ZW50LiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBsb29rIHVwIHRoZSBzdGF0dXMgYW5kCisgICAgc2VuZCBpdCBpbnN0ZWFkIG9mIDEwMC9zdWNjZXNzLgorICAgICIiIgorICAgIGltcG9ydCBnbG9iCisKKyAgICAjIHZhcmlhYmxlcworICAgIG5hbWUgPSBiYi5ldmVudC5nZXROYW1lKGV2ZW50KQorICAgIGxvZyAgPSAiIgorICAgIHN0YXR1cyA9IDEKKyAgICAjIENoZWNrIHdoYXQgd2UgbmVlZCB0byBkbyBCdWlsZCogc2hvd3Mgd2Ugc3RhcnQgb3IgYXJlIGRvbmUKKyAgICBpZiBuYW1lID09ICJCdWlsZFN0YXJ0ZWQiOgorICAgICAgICB0aW5kZXJfYnVpbGRfc3RhcnQoZXZlbnQuZGF0YSkKKyAgICAgICAgbG9nID0gdGluZGVyX3RpbmRlcl9zdGFydChldmVudC5kYXRhLGV2ZW50KQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgdHJ1bmNhdGUgdGhlIHRpbmRlciBsb2cgZmlsZQorICAgICAgICAgICAgZiA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RJTkRFUl9MT0cnLCBUcnVlKSwgJ3cnKQorICAgICAgICAgICAgZi53cml0ZSgiIikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB3cml0ZSBhIHN0YXR1cyB0byB0aGUgZmlsZS4gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSAtayBvcHRpb24KKyAgICAgICAgICAgICMgb2YgQml0QmFrZQorICAgICAgICAgICAgZyA9IGZpbGUoZXZlbnQuZGF0YS5nZXRWYXIoJ1RNUERJUicsIFRydWUpKyIvdGluZGVyLXN0YXR1cyIsICd3JykKKyAgICAgICAgICAgIGcud3JpdGUoIiIpCisgICAgICAgICAgICBnLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAjIEFwcGVuZCB0aGUgVGFzay1Mb2cgKGNvbXBpbGUsY29uZmlndXJlLi4uKSB0byB0aGUgbG9nIGZpbGUKKyAgICAjIHdlIHdpbGwgc2VuZCB0byB0aGUgc2VydmVyCisgICAgaWYgbmFtZSA9PSAiVGFza1N1Y2NlZWRlZCIgb3IgbmFtZSA9PSAiVGFza0ZhaWxlZCI6CisgICAgICAgIGxvZ19maWxlID0gZ2xvYi5nbG9iKCIlcy9sb2cuJXMuKiIgJSAoZXZlbnQuZGF0YS5nZXRWYXIoJ1QnLCBUcnVlKSwgZXZlbnQudGFzaykpCisKKyAgICAgICAgaWYgbGVuKGxvZ19maWxlKSAhPSAwOgorICAgICAgICAgICAgdG9fZmlsZSAgPSBldmVudC5kYXRhLmdldFZhcignVElOREVSX0xPRycsIFRydWUpCisgICAgICAgICAgICBsb2cgICAgICs9ICIiLmpvaW4ob3Blbihsb2dfZmlsZVswXSwgJ3InKS5yZWFkbGluZXMoKSkKKworICAgICMgc2V0IHRoZSByaWdodCAnSEVBREVSJy9TdW1tYXJ5IGZvciB0aGUgVGluZGVyQm94CisgICAgaWYgbmFtZSA9PSAiVGFza1N0YXJ0ZWQiOgorICAgICAgICBsb2cgKz0gIi0tLT4gVElOREVSQk9YIFRhc2sgJXMgc3RhcnRlZFxuIiAlIGV2ZW50LnRhc2sKKyAgICBlbGlmIG5hbWUgPT0gIlRhc2tTdWNjZWVkZWQiOgorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIFRhc2sgJXMgZG9uZSAoU1VDQ0VTUylcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJUYXNrRmFpbGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBUYXNrICVzIGZhaWxlZCAoRkFJTFVSRSlcbiIgJSBldmVudC50YXNrCisgICAgZWxpZiBuYW1lID09ICJQa2dTdGFydGVkIjoKKyAgICAgICAgbG9nICs9ICItLS0+IFRJTkRFUkJPWCBQYWNrYWdlICVzIHN0YXJ0ZWRcbiIgJSBldmVudC5kYXRhLmdldFZhcignUEYnLCBUcnVlKQorICAgIGVsaWYgbmFtZSA9PSAiUGtnU3VjY2VlZGVkIjoKKyAgICAgICAgbG9nICs9ICI8LS0tIFRJTkRFUkJPWCBQYWNrYWdlICVzIGRvbmUgKFNVQ0NFU1MpXG4iICUgZXZlbnQuZGF0YS5nZXRWYXIoJ1BGJywgVHJ1ZSkKKyAgICBlbGlmIG5hbWUgPT0gIlBrZ0ZhaWxlZCI6CisgICAgICAgIGlmIG5vdCBldmVudC5kYXRhLmdldFZhcignVElOREVSX0FVVE9CVUlMRCcsIFRydWUpID09ICIwIjoKKyAgICAgICAgICAgIGJ1aWxkLmV4ZWNfdGFzaygnZG9fY2xlYW4nLCBldmVudC5kYXRhKQorICAgICAgICBsb2cgKz0gIjwtLS0gVElOREVSQk9YIFBhY2thZ2UgJXMgZmFpbGVkIChGQUlMVVJFKVxuIiAlIGV2ZW50LmRhdGEuZ2V0VmFyKCdQRicsIFRydWUpCisgICAgICAgIHN0YXR1cyA9IDIwMAorICAgICAgICAjIHJlbWVtYmVyIHRoZSBmYWlsdXJlIGZvciB0aGUgLWsgY2FzZQorICAgICAgICBoID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItc3RhdHVzIiwgJ3cnKQorICAgICAgICBoLndyaXRlKCIyMDAiKQorICAgIGVsaWYgbmFtZSA9PSAiQnVpbGRDb21wbGV0ZWQiOgorICAgICAgICBsb2cgKz0gIkJ1aWxkIENvbXBsZXRlZFxuIgorICAgICAgICBzdGF0dXMgPSAxMDAKKyAgICAgICAgIyBDaGVjayBpZiB3ZSBoYXZlIGEgb2xkIHN0YXR1cy4uLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJyxUcnVlKSsnL3RpbmRlci1zdGF0dXMnLCAncicpCisgICAgICAgICAgICBzdGF0dXMgPSBpbnQoaC5yZWFkKCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGVsaWYgbmFtZSA9PSAiTXVsdGlwbGVQcm92aWRlcnMiOgorICAgICAgICBsb2cgKz0gIi0tLT4gVElOREVSQk9YIE11bHRpcGxlIFByb3ZpZGVyc1xuIgorICAgICAgICBsb2cgKz0gIm11bHRpcGxlIHByb3ZpZGVycyBhcmUgYXZhaWxhYmxlICglcyk7XG4iICUgIiwgIi5qb2luKGV2ZW50LmdldENhbmRpZGF0ZXMoKSkKKyAgICAgICAgbG9nICs9ICJjb25zaWRlciBkZWZpbmluZyBQUkVGRVJSRURfUFJPVklERVJfJXNcbiIgJSBldmVudC5nZXRJdGVtKCkKKyAgICAgICAgbG9nICs9ICJpcyBydW50aW1lOiAlZFxuIiAlIGV2ZW50LmlzUnVudGltZSgpCisgICAgICAgIGxvZyArPSAiPC0tLSBUSU5ERVJCT1ggTXVsdGlwbGUgUHJvdmlkZXJzXG4iCisgICAgZWxpZiBuYW1lID09ICJOb1Byb3ZpZGVyIjoKKyAgICAgICAgbG9nICs9ICJFcnJvcjogTm8gUHJvdmlkZXIgZm9yOiAlc1xuIiAlIGV2ZW50LmdldEl0ZW0oKQorICAgICAgICBsb2cgKz0gIkVycm9yOldhcyBSdW50aW1lOiAlZFxuIiAlIGV2ZW50LmlzUnVudGltZSgpCisgICAgICAgIHN0YXR1cyA9IDIwMAorICAgICAgICAjIHJlbWVtYmVyIHRoZSBmYWlsdXJlIGZvciB0aGUgLWsgY2FzZQorICAgICAgICBoID0gZmlsZShldmVudC5kYXRhLmdldFZhcignVE1QRElSJywgVHJ1ZSkrIi90aW5kZXItc3RhdHVzIiwgJ3cnKQorICAgICAgICBoLndyaXRlKCIyMDAiKQorCisgICAgIyBub3cgcG9zdCB0aGUgbG9nCisgICAgaWYgbGVuKGxvZykgPT0gMDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIGZvciBub3cgd2Ugd2lsbCB1c2UgdGhlIGh0dHAgcG9zdCBtZXRob2QgYXMgaXQgaXMgdGhlIG9ubHkgb25lCisgICAgbG9nX3Bvc3RfbWV0aG9kID0gdGluZGVyX3NlbmRfaHR0cAorICAgIGxvZ19wb3N0X21ldGhvZChldmVudC5kYXRhLCBzdGF0dXMsIGxvZykKKworCisjIHdlIHdhbnQgdG8gYmUgYW4gZXZlbnQgaGFuZGxlcgorYWRkaGFuZGxlciB0aW5kZXJjbGllbnRfZXZlbnRoYW5kbGVyCitweXRob24gdGluZGVyY2xpZW50X2V2ZW50aGFuZGxlcigpIHsKKyAgICBpZiBlLmRhdGEgaXMgTm9uZSBvciBiYi5ldmVudC5nZXROYW1lKGUpID09ICJNc2dOb3RlIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBkb190aW5kZXJfcmVwb3J0ID0gZS5kYXRhLmdldFZhcignVElOREVSX1JFUE9SVCcsIFRydWUpCisgICAgaWYgZG9fdGluZGVyX3JlcG9ydCBhbmQgZG9fdGluZGVyX3JlcG9ydCA9PSAiMSI6CisgICAgICAgIHRpbmRlcl9kb190aW5kZXJfcmVwb3J0KGUpCisKKyAgICByZXR1cm4KK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy90b2FzdGVyLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2M2NmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdG9hc3Rlci5iYmNsYXNzCkBAIC0wLDAgKzEsMzU1IEBACisjCisjIFRvYXN0ZXIgaGVscGVyIGNsYXNzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKyMKKyMgVGhpcyBiYmNsYXNzIGlzIGRlc2lnbmVkIHRvIGV4dHJhY3QgZGF0YSB1c2VkIGJ5IE9FLUNvcmUgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLAorIyBmb3IgcmVjb3JkaW5nIGluIHRoZSBUb2FzdGVyIHN5c3RlbS4KKyMgVGhlIGRhdGEgYWNjZXNzIGlzIHN5bmNocm9ub3VzLCBwcmVzZXJ2aW5nIHRoZSBidWlsZCBkYXRhIGludGVncml0eSBhY3Jvc3MKKyMgZGlmZmVyZW50IGJ1aWxkcy4KKyMKKyMgVGhlIGRhdGEgaXMgdHJhbnNmZXJyZWQgdGhyb3VnaCB0aGUgZXZlbnQgc3lzdGVtLCB1c2luZyB0aGUgTWV0YWRhdGFFdmVudCBvYmplY3RzLgorIworIyBUaGUgbW9kZWwgaXMgdG8gZW5hYmxlIHRoZSBkYXRhZHVtcCBmdW5jdGlvbnMgYXMgcG9zdGZ1bmNzLCBhbmQgaGF2ZSB0aGUgZHVtcAorIyBleGVjdXRlZCBhZnRlciB0aGUgcmVhbCB0YXNrZnVuYyBoYXMgYmVlbiBleGVjdXRlZC4gVGhpcyBwcmV2ZW50cyB0YXNrIHNpZ25hdHVyZSBjaGFuZ2luZworIyBpcyB0b2FzdGVyIGlzIGVuYWJsZWQgb3Igbm90LiBCdWlsZCBwZXJmb3JtYW5jZSBpcyBub3QgYWZmZWN0ZWQgaWYgVG9hc3RlciBpcyBub3QgZW5hYmxlZC4KKyMKKyMgVG8gZW5hYmxlLCB1c2UgSU5IRVJJVCBpbiBsb2NhbC5jb25mOgorIworIyAgICAgICBJTkhFUklUICs9ICJ0b2FzdGVyIgorIworIworIworIworCisjIEZpbmQgYW5kIGR1bXAgbGF5ZXIgaW5mbyB3aGVuIHdlIGdvdCB0aGUgbGF5ZXJzIHBhcnNlZAorCisKKworcHl0aG9uIHRvYXN0ZXJfbGF5ZXJpbmZvX2R1bXBkYXRhKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICBkZWYgX2dldF9naXRfYnJhbmNoKGxheWVyX3BhdGgpOgorICAgICAgICBicmFuY2ggPSBzdWJwcm9jZXNzLlBvcGVuKCJnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwgIiwgY3dkPWxheWVyX3BhdGgsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgYnJhbmNoID0gYnJhbmNoLnJlcGxhY2UoJ3JlZnMvaGVhZHMvJywgJycpLnJzdHJpcCgpCisgICAgICAgIHJldHVybiBicmFuY2gKKworICAgIGRlZiBfZ2V0X2dpdF9yZXZpc2lvbihsYXllcl9wYXRoKToKKyAgICAgICAgcmV2aXNpb24gPSBzdWJwcm9jZXNzLlBvcGVuKCJnaXQgcmV2LXBhcnNlIEhFQUQgMj4vZGV2L251bGwgIiwgY3dkPWxheWVyX3BhdGgsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0ucnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uCisKKyAgICBkZWYgX2dldF91cmxfbWFwX25hbWUobGF5ZXJfbmFtZSk6CisgICAgICAgICIiIiBTb21lIGxheWVycyBoYXZlIGEgZGlmZmVyZW50IG5hbWUgb24gb3BlbmVtYmVkZGVkLm9yZyBzaXRlLAorICAgICAgICAgICAgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29ycmVjdCBuYW1lIHRvIHVzZSBpbiB0aGUgVVJMCisgICAgICAgICIiIgorCisgICAgICAgIHVybF9uYW1lID0gbGF5ZXJfbmFtZQorICAgICAgICB1cmxfbWFwcGluZyA9IHsnbWV0YSc6ICdvcGVuZW1iZWRkZWQtY29yZSd9CisKKyAgICAgICAgZm9yIGtleSBpbiB1cmxfbWFwcGluZy5rZXlzKCk6CisgICAgICAgICAgICBpZiBrZXkgPT0gbGF5ZXJfbmFtZToKKyAgICAgICAgICAgICAgICB1cmxfbmFtZSA9IHVybF9tYXBwaW5nW2tleV0KKworICAgICAgICByZXR1cm4gdXJsX25hbWUKKworICAgIGRlZiBfZ2V0X2xheWVyX3ZlcnNpb25faW5mb3JtYXRpb24obGF5ZXJfcGF0aCk6CisKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvID0ge30KKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydicmFuY2gnXSA9IF9nZXRfZ2l0X2JyYW5jaChsYXllcl9wYXRoKQorICAgICAgICBsYXllcl92ZXJzaW9uX2luZm9bJ2NvbW1pdCddID0gX2dldF9naXRfcmV2aXNpb24obGF5ZXJfcGF0aCkKKyAgICAgICAgbGF5ZXJfdmVyc2lvbl9pbmZvWydwcmlvcml0eSddID0gMAorCisgICAgICAgIHJldHVybiBsYXllcl92ZXJzaW9uX2luZm8KKworCisgICAgZGVmIF9nZXRfbGF5ZXJfZGljdChsYXllcl9wYXRoKToKKworICAgICAgICBsYXllcl9pbmZvID0ge30KKyAgICAgICAgbGF5ZXJfbmFtZSA9IGxheWVyX3BhdGguc3BsaXQoJy8nKVstMV0KKyAgICAgICAgbGF5ZXJfdXJsID0gJ2h0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2xheWVyL3tsYXllcn0vJworICAgICAgICBsYXllcl91cmxfbmFtZSA9IF9nZXRfdXJsX21hcF9uYW1lKGxheWVyX25hbWUpCisKKyAgICAgICAgbGF5ZXJfaW5mb1snbmFtZSddID0gbGF5ZXJfdXJsX25hbWUKKyAgICAgICAgbGF5ZXJfaW5mb1snbG9jYWxfcGF0aCddID0gbGF5ZXJfcGF0aAorICAgICAgICBsYXllcl9pbmZvWydsYXllcl9pbmRleF91cmwnXSA9IGxheWVyX3VybC5mb3JtYXQobGF5ZXI9bGF5ZXJfdXJsX25hbWUpCisgICAgICAgIGxheWVyX2luZm9bJ3ZlcnNpb24nXSA9IF9nZXRfbGF5ZXJfdmVyc2lvbl9pbmZvcm1hdGlvbihsYXllcl9wYXRoKQorCisgICAgICAgIHJldHVybiBsYXllcl9pbmZvCisKKworICAgIGJibGF5ZXJzID0gZS5kYXRhLmdldFZhcigiQkJMQVlFUlMiLCBUcnVlKQorCisgICAgbGxheWVyaW5mbyA9IHt9CisKKyAgICBmb3IgbGF5ZXIgaW4geyBsIGZvciBsIGluIGJibGF5ZXJzLnN0cmlwKCkuc3BsaXQoIiAiKSBpZiBsZW4obCkgfToKKyAgICAgICAgbGxheWVyaW5mb1tsYXllcl0gPSBfZ2V0X2xheWVyX2RpY3QobGF5ZXIpCisKKworICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiTGF5ZXJJbmZvIiwgbGxheWVyaW5mbyksIGUuZGF0YSkKK30KKworIyBEdW1wIHBhY2thZ2UgZmlsZSBpbmZvIGRhdGEKKworZGVmIF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUoZGlycGF0aCwgZmlsZXBhdGgpOgorICAgIGltcG9ydCBqc29uCisgICAgaW1wb3J0IHJlCisgICAgcGtnZGF0YSA9IHt9CisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlcGF0aCksICJyIikgYXMgZmluOgorICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAga24sIGt2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6ICIsIDEpCisgICAgICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHIiXlBLR18oW15BLVo6XSopIiwga24pCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YVsnT1BLR04nXSA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBrbiA9ICJfIi5qb2luKFt4IGZvciB4IGluIGtuLnNwbGl0KCJfIikgaWYgeC5pc3VwcGVyKCldKQorICAgICAgICAgICAgICAgIHBrZ2RhdGFba25dID0ga3Yuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGtuID09ICdGSUxFU19JTkZPJzoKKyAgICAgICAgICAgICAgICAgICAgcGtnZGF0YVtrbl0gPSBqc29uLmxvYWRzKGt2KQorCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICAgICMgaWdub3JlIGxpbmVzIHdpdGhvdXQgdmFsaWQga2V5OiB2YWx1ZSBwYWlycworICAgIHJldHVybiBwa2dkYXRhCisKKworcHl0aG9uIHRvYXN0ZXJfcGFja2FnZV9kdW1wZGF0YSgpIHsKKyAgICAiIiIKKyAgICBEdW1wcyB0aGUgZGF0YSBjcmVhdGVkIGJ5IGVtaXRfcGtnZGF0YQorICAgICIiIgorICAgICMgcmVwbGljYXRlIHZhcmlhYmxlcyBmcm9tIHRoZSBwYWNrYWdlLmJiY2xhc3MKKworICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgcGtnZGF0YWRpciA9IGQuZ2V0VmFyKCdQS0dERVNUV09SSycsIFRydWUpCisKKyAgICAjIHNjYW4gYW5kIHNlbmQgZGF0YSBmb3IgZWFjaCBwYWNrYWdlCisKKyAgICBscGtnZGF0YSA9IHt9CisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorCisgICAgICAgIGxwa2dkYXRhID0gX3RvYXN0ZXJfbG9hZF9wa2dkYXRhZmlsZShwa2dkYXRhZGlyICsgIi9ydW50aW1lLyIsIHBrZykKKworICAgICAgICAjIEZpcmUgYW4gZXZlbnQgY29udGFpbmluZyB0aGUgcGtnIGRhdGEKKyAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJTaW5nbGVQYWNrYWdlSW5mbyIsIGxwa2dkYXRhKSwgZCkKK30KKworIyAyLiBEdW1wIG91dHB1dCBpbWFnZSBmaWxlcyBpbmZvcm1hdGlvbgorCitweXRob24gdG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSgpIHsKKyAgICAiIiIKKyAgICBJbWFnZSBmaWxlbmFtZSBmb3Igb3V0cHV0IGltYWdlcyBpcyBub3Qgc3RhbmRhcmRpemVkLgorICAgIGltYWdlX3R5cGVzLmJiY2xhc3Mgd2lsbCBzcGVsbCBvdXQgSU1BR0VfQ01EX3h4eCB2YXJpYWJsZXMgdGhhdCBhY3R1YWxseQorICAgIGhhdmUgaGFyZGNvZGVkIHdheXMgdG8gY3JlYXRlIGltYWdlIGZpbGUgbmFtZXMgaW4gdGhlbS4KKyAgICBTbyB3ZSBsb29rIGZvciBmaWxlcyBzdGFydGluZyB3aXRoIHRoZSBzZXQgbmFtZS4KKyAgICAiIiIKKworICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBkLmdldFZhcignREVQTE9ZX0RJUl9JTUFHRScsIFRydWUpOworICAgIGltYWdlX25hbWUgPSBkLmdldFZhcignSU1BR0VfTkFNRScsIFRydWUpOworCisgICAgaW1hZ2VfaW5mb19kYXRhID0ge30KKyAgICBhcnRpZmFjdF9pbmZvX2RhdGEgPSB7fQorCisgICAgIyBjb2xsZWN0IGFsbCBhcnRpZmFjdHMKKyAgICBmb3IgZGlycGF0aCwgZGlybmFtZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRlcGxveV9kaXJfaW1hZ2UpOgorICAgICAgICBmb3IgZm4gaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoaW1hZ2VfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGltYWdlX291dHB1dCA9IG9zLnBhdGguam9pbihkaXJwYXRoLCBmbikKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VfaW5mb19kYXRhW2ltYWdlX291dHB1dF0gPSBvcy5zdGF0KGltYWdlX291dHB1dCkuc3Rfc2l6ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzdGF0CisgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0X3BhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm4pCisgICAgICAgICAgICAgICAgICAgIGZpbGVzdGF0ID0gb3Muc3RhdChhcnRpZmFjdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoYXJ0aWZhY3RfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBhcnRpZmFjdF9pbmZvX2RhdGFbYXJ0aWZhY3RfcGF0aF0gPSBmaWxlc3RhdC5zdF9zaXplCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiT1NFcnJvckV4Y2VwdGlvbiIsIGUpLCBkKQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJJbWFnZUZpbGVTaXplIixpbWFnZV9pbmZvX2RhdGEpLCBkKQorICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiQXJ0aWZhY3RGaWxlU2l6ZSIsYXJ0aWZhY3RfaW5mb19kYXRhKSwgZCkKK30KKworCisKKyMgY29sbGVjdCBsaXN0IG9mIGJ1aWxkc3RhdHMgZmlsZXMgYmFzZWQgb24gZmlyZWQgZXZlbnRzOyB3aGVuIHRoZSBidWlsZCBjb21wbGV0ZXMsIGNvbGxlY3QgYWxsIHN0YXRzIGFuZCBmaXJlIGFuIGV2ZW50IHdpdGggY29sbGVjdGVkIGRhdGEKKworcHl0aG9uIHRvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzKCkgeworICAgIGltcG9ydCBiYi5idWlsZAorICAgIGltcG9ydCBiYi5ldmVudAorICAgIGltcG9ydCBiYi5kYXRhCisgICAgaW1wb3J0IGJiLnV0aWxzCisgICAgaW1wb3J0IG9zCisKKyAgICBpZiBub3QgZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSk6CisgICAgICAgIHJldHVybiAgIyBpZiB3ZSBkb24ndCBoYXZlIGJ1aWxkc3RhdHMsIHdlIGNhbm5vdCBjb2xsZWN0IHN0YXRzCisKKyAgICBkZWYgX2FwcGVuZF9yZWFkX2xpc3Qodik6CisgICAgICAgIGxvY2sgPSBiYi51dGlscy5sb2NrZmlsZShlLmRhdGEuZXhwYW5kKCIke1RPUERJUn0vdG9hc3Rlci5sb2NrIiksIEZhbHNlLCBUcnVlKQorCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSwgImEiKSBhcyBmb3V0OgorICAgICAgICAgICAgYm4gPSBnZXRfYm4oZSkKKyAgICAgICAgICAgIGJzZGlyID0gb3MucGF0aC5qb2luKGUuZGF0YS5nZXRWYXIoJ0JVSUxEU1RBVFNfQkFTRScsIFRydWUpLCBibikKKyAgICAgICAgICAgIHRhc2tkaXIgPSBvcy5wYXRoLmpvaW4oYnNkaXIsIGUuZGF0YS5leHBhbmQoIiR7UEZ9IikpCisgICAgICAgICAgICBmb3V0LndyaXRlKCIlczo6JXM6OiVzOjolc1xuIiAlIChlLnRhc2tmaWxlLCBlLnRhc2tuYW1lLCBvcy5wYXRoLmpvaW4odGFza2RpciwgZS50YXNrKSwgZS5kYXRhLmV4cGFuZCgiJHtQTn0iKSkpCisKKyAgICAgICAgYmIudXRpbHMudW5sb2NrZmlsZShsb2NrKQorCisgICAgZGVmIF9yZWFkX3N0YXRzKGZpbGVuYW1lKToKKyAgICAgICAgY3B1X3VzYWdlID0gMAorICAgICAgICBkaXNrX2lvID0gMAorICAgICAgICBzdGFydGlvID0gJzAnCisgICAgICAgIGVuZGlvID0gJzAnCisgICAgICAgIHN0YXJ0ZWQgPSAnMCcKKyAgICAgICAgZW5kZWQgPSAnMCcKKyAgICAgICAgcG4gPSAnJworICAgICAgICB0YXNrbmFtZSA9ICcnCisgICAgICAgIHN0YXRpbmZvID0ge30KKworICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgdGFza19iczoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHRhc2tfYnMucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgayx2ID0gbGluZS5zdHJpcCgpLnNwbGl0KCI6ICIsIDEpCisgICAgICAgICAgICAgICAgc3RhdGluZm9ba10gPSB2CisKKyAgICAgICAgaWYgIkNQVSB1c2FnZSIgaW4gc3RhdGluZm86CisgICAgICAgICAgICBjcHVfdXNhZ2UgPSBzdHIoc3RhdGluZm9bIkNQVSB1c2FnZSJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBpZiAiRW5kVGltZUlPIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIGVuZGlvID0gc3RyKHN0YXRpbmZvWyJFbmRUaW1lSU8iXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIlN0YXJ0VGltZUlPIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIHN0YXJ0aW8gPSBzdHIoc3RhdGluZm9bIlN0YXJ0VGltZUlPIl0pLnN0cmlwKCclIFxuXHInKQorCisgICAgICAgIGlmICJTdGFydGVkIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIHN0YXJ0ZWQgPSBzdHIoc3RhdGluZm9bIlN0YXJ0ZWQiXSkuc3RyaXAoJyUgXG5ccicpCisKKyAgICAgICAgaWYgIkVuZGVkIiBpbiBzdGF0aW5mbzoKKyAgICAgICAgICAgIGVuZGVkID0gc3RyKHN0YXRpbmZvWyJFbmRlZCJdKS5zdHJpcCgnJSBcblxyJykKKworICAgICAgICBkaXNrX2lvID0gaW50KGVuZGlvKSAtIGludChzdGFydGlvKQorCisgICAgICAgIGVsYXBzZWRfdGltZSA9IGZsb2F0KGVuZGVkKSAtIGZsb2F0KHN0YXJ0ZWQpCisKKyAgICAgICAgY3B1X3VzYWdlID0gZmxvYXQoY3B1X3VzYWdlKQorCisgICAgICAgIHJldHVybiB7J2NwdV91c2FnZSc6IGNwdV91c2FnZSwgJ2Rpc2tfaW8nOiBkaXNrX2lvLCAnZWxhcHNlZF90aW1lJzogZWxhcHNlZF90aW1lfQorCisKKyAgICBpZiBpc2luc3RhbmNlKGUsIChiYi5idWlsZC5UYXNrU3VjY2VlZGVkLCBiYi5idWlsZC5UYXNrRmFpbGVkKSk6CisgICAgICAgIF9hcHBlbmRfcmVhZF9saXN0KGUpCisgICAgICAgIHBhc3MKKworCisgICAgaWYgaXNpbnN0YW5jZShlLCBiYi5ldmVudC5CdWlsZENvbXBsZXRlZCkgYW5kIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgInRvYXN0ZXJzdGF0bGlzdCIpKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlLmRhdGEuZ2V0VmFyKCdCVUlMRFNUQVRTX0JBU0UnLCBUcnVlKSwgInRvYXN0ZXJzdGF0bGlzdCIpLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGZpbjoKKyAgICAgICAgICAgICAgICAodGFza2ZpbGUsIHRhc2tuYW1lLCBmaWxlbmFtZSwgcmVjaXBlbmFtZSkgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIjo6IikKKyAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCh0YXNrZmlsZSwgdGFza25hbWUsIF9yZWFkX3N0YXRzKGZpbGVuYW1lKSwgcmVjaXBlbmFtZSkpCisgICAgICAgIGJiLmV2ZW50LmZpcmUoYmIuZXZlbnQuTWV0YWRhdGFFdmVudCgiQnVpbGRTdGF0c0xpc3QiLCBldmVudHMpLCBlLmRhdGEpCisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4oZS5kYXRhLmdldFZhcignQlVJTERTVEFUU19CQVNFJywgVHJ1ZSksICJ0b2FzdGVyc3RhdGxpc3QiKSkKK30KKworIyBkdW1wIHJlbGV2YW50IGJ1aWxkIGhpc3RvcnkgZGF0YSBhcyBhbiBldmVudCB3aGVuIHRoZSBidWlsZCBpcyBjb21wbGV0ZWQKKworcHl0aG9uIHRvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgQlVJTERISVNUT1JZX0RJUiA9IGUuZGF0YS5leHBhbmQoIiR7VE9QRElSfS9idWlsZGhpc3RvcnkiKQorICAgIEJVSUxESElTVE9SWV9ESVJfSU1BR0VfQkFTRSA9IGUuZGF0YS5leHBhbmQoIiVzL2ltYWdlcy8ke01BQ0hJTkVfQVJDSH0vJHtUQ0xJQkN9LyIlIEJVSUxESElTVE9SWV9ESVIpCisgICAgcGtnZGF0YV9kaXIgPSBlLmRhdGEuZ2V0VmFyKCJQS0dEQVRBX0RJUiIsIFRydWUpCisKKworICAgICMgc2NhbiB0aGUgYnVpbGQgdGFyZ2V0cyBmb3IgdGhpcyBidWlsZAorICAgIGltYWdlcyA9IHt9CisgICAgYWxscGtncyA9IHt9CisgICAgZmlsZXMgPSB7fQorICAgIGZvciB0YXJnZXQgaW4gZS5fcGtnczoKKyAgICAgICAgaW5zdGFsbGVkX2ltZ19wYXRoID0gZS5kYXRhLmV4cGFuZChvcy5wYXRoLmpvaW4oQlVJTERISVNUT1JZX0RJUl9JTUFHRV9CQVNFLCB0YXJnZXQpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbnN0YWxsZWRfaW1nX3BhdGgpOgorICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF0gPSB7fQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XSA9IHt9CisgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydkaXJzJ10gPSBbXQorICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnc3ltcyddID0gW10KKyAgICAgICAgICAgIGZpbGVzW3RhcmdldF1bJ2ZpbGVzJ10gPSBbXQorICAgICAgICAgICAgd2l0aCBvcGVuKCIlcy9pbnN0YWxsZWQtcGFja2FnZS1zaXplcy50eHQiICUgaW5zdGFsbGVkX2ltZ19wYXRoLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgiOyIpCisgICAgICAgICAgICAgICAgICAgIHBzaXplLCBweCA9IGxpbmUuc3BsaXQoIlx0IikKKyAgICAgICAgICAgICAgICAgICAgcHVuaXQsIHBuYW1lID0gcHguc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgc2l6ZSBpcyAiaW5zdGFsbGVkLXNpemUiIGFzIGl0IG1lYXN1cmVzIGhvdyBtdWNoIHNwYWNlIGl0IHRha2VzIG9uIGRpc2sKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bcG5hbWUuc3RyaXAoKV0gPSB7J3NpemUnOmludChwc2l6ZSkqMTAyNCwgJ2RlcGVuZHMnIDogW119CisKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvZGVwZW5kcy5kb3QiICUgaW5zdGFsbGVkX2ltZ19wYXRoLCAiciIpIGFzIGZpbjoKKyAgICAgICAgICAgICAgICBwID0gcmUuY29tcGlsZShyJyAtPiAnKQorICAgICAgICAgICAgICAgIGRvdCA9IHJlLmNvbXBpbGUocicuKnN0eWxlPWRvdHRlZCcpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoJzsnKQorICAgICAgICAgICAgICAgICAgICBsaW5lc3BsaXQgPSBwLnNwbGl0KGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lc3BsaXQpID09IDI6CisgICAgICAgICAgICAgICAgICAgICAgICBwbmFtZSA9IGxpbmVzcGxpdFswXS5yc3RyaXAoJyInKS5zdHJpcCgnIicpCisgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzbmFtZSA9IGxpbmVzcGxpdFsxXS5zcGxpdCgiICIpWzBdLnN0cmlwKCkuc3RyaXAoIjsiKS5zdHJpcCgnIicpLnJzdHJpcCgnIicpCisgICAgICAgICAgICAgICAgICAgICAgICBkZXB0eXBlID0gImRlcGVuZHMiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb3QubWF0Y2gobGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdHlwZSA9ICJyZWNvbW1lbmRzIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBuYW1lIGluIGltYWdlc1t0YXJnZXRdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW3BuYW1lXSA9IHsnc2l6ZSc6IDAsICdkZXBlbmRzJyA6IFtdfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcGVuZHNuYW1lIGluIGltYWdlc1t0YXJnZXRdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlc1t0YXJnZXRdW2RlcGVuZHNuYW1lXSA9IHsnc2l6ZSc6IDAsICdkZXBlbmRzJyA6IFtdfQorICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VzW3RhcmdldF1bcG5hbWVdWydkZXBlbmRzJ10uYXBwZW5kKChkZXBlbmRzbmFtZSwgZGVwdHlwZSkpCisKKyAgICAgICAgICAgIHdpdGggb3BlbigiJXMvZmlsZXMtaW4taW1hZ2UudHh0IiAlIGluc3RhbGxlZF9pbWdfcGF0aCwgInIiKSBhcyBmaW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZmluOgorICAgICAgICAgICAgICAgICAgICBsYyA9IFsgeCBmb3IgeCBpbiBsaW5lLnN0cmlwKCkuc3BsaXQoIiAiKSBpZiBsZW4oeCkgPiAwIF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGNbMF0uc3RhcnRzd2l0aCgibCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnc3ltcyddLmFwcGVuZChsYykKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsY1swXS5zdGFydHN3aXRoKCJkIik6CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1t0YXJnZXRdWydkaXJzJ10uYXBwZW5kKGxjKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbdGFyZ2V0XVsnZmlsZXMnXS5hcHBlbmQobGMpCisKKyAgICAgICAgICAgIGZvciBwbmFtZSBpbiBpbWFnZXNbdGFyZ2V0XToKKyAgICAgICAgICAgICAgICBpZiBub3QgcG5hbWUgaW4gYWxscGtnczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnZGF0YSA9IF90b2FzdGVyX2xvYWRfcGtnZGF0YWZpbGUoIiVzL3J1bnRpbWUtcmV2ZXJzZS8iICUgcGtnZGF0YV9kaXIsIHBuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGV4cGVjdCB0aGlzIGUuZy4gZm9yIFJSRUNPTU1FTkRTIHRoYXQgYXJlIHVuc2F0aXNmaWVkIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBhbGxwa2dzW3BuYW1lXSA9IHBrZ2RhdGEKKworCisgICAgZGF0YSA9IHsgJ3BrZ2RhdGEnIDogYWxscGtncywgJ2ltZ2RhdGEnIDogaW1hZ2VzLCAnZmlsZWRhdGEnIDogZmlsZXMgfQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJJbWFnZVBrZ0xpc3QiLCBkYXRhKSwgZS5kYXRhKQorCit9CisKKyMgZHVtcCBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGxpY2Vuc2UgbWFuaWZlc3QgcGF0aAorCitweXRob24gdG9hc3Rlcl9saWNlbnNlbWFuaWZlc3RfZHVtcCgpIHsKKyAgICBkZXBsb3lfZGlyID0gZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKTsKKyAgICBpbWFnZV9uYW1lID0gZC5nZXRWYXIoJ0lNQUdFX05BTUUnLCBUcnVlKTsKKworICAgIGRhdGEgPSB7ICdkZXBsb3lfZGlyJyA6IGRlcGxveV9kaXIsICdpbWFnZV9uYW1lJyA6IGltYWdlX25hbWUgfQorCisgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5NZXRhZGF0YUV2ZW50KCJMaWNlbnNlTWFuaWZlc3RQYXRoIiwgZGF0YSksIGQpCit9CisKKyMgc2V0IGV2ZW50IGhhbmRsZXJzCithZGRoYW5kbGVyIHRvYXN0ZXJfbGF5ZXJpbmZvX2R1bXBkYXRhCit0b2FzdGVyX2xheWVyaW5mb19kdW1wZGF0YVtldmVudG1hc2tdID0gImJiLmV2ZW50LlRyZWVEYXRhUHJlcGFyYXRpb25Db21wbGV0ZWQiCisKK2FkZGhhbmRsZXIgdG9hc3Rlcl9jb2xsZWN0X3Rhc2tfc3RhdHMKK3RvYXN0ZXJfY29sbGVjdF90YXNrX3N0YXRzW2V2ZW50bWFza10gPSAiYmIuZXZlbnQuQnVpbGRDb21wbGV0ZWQgYmIuYnVpbGQuVGFza1N1Y2NlZWRlZCBiYi5idWlsZC5UYXNrRmFpbGVkIgorCithZGRoYW5kbGVyIHRvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXAKK3RvYXN0ZXJfYnVpbGRoaXN0b3J5X2R1bXBbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZENvbXBsZXRlZCIKK2RvX3BhY2thZ2VbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9wYWNrYWdlX2R1bXBkYXRhICIKK2RvX3BhY2thZ2VbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ0b2FzdGVyX3BhY2thZ2VfZHVtcGRhdGEgIgorCitkb19yb290ZnNbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9pbWFnZV9kdW1wZGF0YSAiCitkb19yb290ZnNbcG9zdGZ1bmNzXSArPSAidG9hc3Rlcl9saWNlbnNlbWFuaWZlc3RfZHVtcCAiCitkb19yb290ZnNbdmFyZGVwc2V4Y2x1ZGVdICs9ICJ0b2FzdGVyX2ltYWdlX2R1bXBkYXRhIHRvYXN0ZXJfbGljZW5zZW1hbmlmZXN0X2R1bXAiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy90b29sY2hhaW4tc2NyaXB0cy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYjJiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdG9vbGNoYWluLXNjcmlwdHMuYmJjbGFzcwpAQCAtMCwwICsxLDE1NCBAQAoraW5oZXJpdCBzaXRlaW5mbyBrZXJuZWwtYXJjaAorCisjIFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIE1VTFRJTUFDSF9UQVJHRVRfU1lTLCBiZWNhdXNlIGl0CisjIGRvZXNuJ3QgYWx3YXlzIG1hdGNoIG91ciBleHBlY3RhdGlvbnMuLi4gYnV0IHdlIGRlZmF1bHQgdG8gdGhlIHN0b2NrIHZhbHVlCitSRUFMX01VTFRJTUFDSF9UQVJHRVRfU1lTID89ICIke01VTFRJTUFDSF9UQVJHRVRfU1lTfSIKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLW11Y2xpYmMiCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfbGliYy1tdXNsID0gIiAtbW11c2wiCisKKyMgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuIGVudmlyb25tZW50LXNldHVwLXNjcmlwdCBmb3IgdXNlIGluIGEgZGVwbG95YWJsZSBTREsKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX2Vudl9zY3JpcHQgKCkgeworCSMgQ3JlYXRlIGVudmlyb25tZW50IHNldHVwIHNjcmlwdAorCXNka3BhdGhuYXRpdmU9JHs3Oi0ke1NES1BBVEhOQVRJVkV9fQorCXByZWZpeD0kezY6LSR7cHJlZml4X25hdGl2ZXNka319CisJYmluZGlyPSR7NTotJHtiaW5kaXJfbmF0aXZlc2RrfX0KKwlsaWJkaXI9JHs0Oi0ke2xpYmRpcn19CisJc3lzcm9vdD0kezM6LSR7U0RLVEFSR0VUU1lTUk9PVH19CisJbXVsdGltYWNoX3RhcmdldF9zeXM9JHsyOi0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9fQorCXNjcmlwdD0kezE6LSR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0kbXVsdGltYWNoX3RhcmdldF9zeXN9CisJcm0gLWYgJHNjcmlwdAorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgU0RLVEFSR0VUU1lTUk9PVD0nIiRzeXNyb290IiA+PiAkc2NyaXB0CisJRVhUUkFQQVRIPSIiCisJZm9yIGkgaW4gJHtDQU5BRElBTkVYVFJBT1N9OyBkbworCQlFWFRSQVBBVEg9IiRFWFRSQVBBVEg6JHNka3BhdGhuYXRpdmUkYmluZGlyLyR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0kaSIKKwlkb25lCisJZWNobyAiZXhwb3J0IFBBVEg9JHNka3BhdGhuYXRpdmUkYmluZGlyOiRzZGtwYXRobmF0aXZlJGJpbmRpci8uLi8ke0hPU1RfU1lTfS9iaW46JHNka3BhdGhuYXRpdmUkYmluZGlyLyR7VEFSR0VUX1NZU30iJEVYVFJBUEFUSCc6JFBBVEgnID4+ICRzY3JpcHQKKwllY2hvICJleHBvcnQgQ0NBQ0hFX1BBVEg9JHNka3BhdGhuYXRpdmUkYmluZGlyOiRzZGtwYXRobmF0aXZlJGJpbmRpci8uLi8ke0hPU1RfU1lTfS9iaW46JHNka3BhdGhuYXRpdmUkYmluZGlyLyR7VEFSR0VUX1NZU30iJEVYVFJBUEFUSCc6JENDQUNIRV9QQVRIJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVI9JFNES1RBUkdFVFNZU1JPT1QnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEtHX0NPTkZJR19QQVRIPSRTREtUQVJHRVRTWVNST09UJyIkbGliZGlyIicvcGtnY29uZmlnJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENPTkZJR19TSVRFPSR7U0RLUEFUSH0vc2l0ZS1jb25maWctJyIke211bHRpbWFjaF90YXJnZXRfc3lzfSIgPj4gJHNjcmlwdAorCWVjaG8gImV4cG9ydCBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9XCIkc2RrcGF0aG5hdGl2ZVwiIiA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9UQVJHRVRfU1lTUk9PVD0iJFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IE9FQ09SRV9BQ0xPQ0FMX09QVFM9XCItSSAkc2RrcGF0aG5hdGl2ZS91c3Ivc2hhcmUvYWNsb2NhbFwiIiA+PiAkc2NyaXB0CisJZWNobyAiZXhwb3J0IFBZVEhPTkhPTUU9JHNka3BhdGhuYXRpdmUkcHJlZml4IiA+PiAkc2NyaXB0CisKKwl0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQKK30KKworIyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZW52aXJvbm1lbnQtc2V0dXAtc2NyaXB0IGluIHRoZSBUTVBESVIgd2hpY2ggZW5hYmxlcworIyBhIE9FLWNvcmUgSURFIHRvIGludGVncmF0ZSB3aXRoIHRoZSBidWlsZCB0cmVlCit0b29sY2hhaW5fY3JlYXRlX3RyZWVfZW52X3NjcmlwdCAoKSB7CisJc2NyaXB0PSR7VE1QRElSfS9lbnZpcm9ubWVudC1zZXR1cC0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9CisJcm0gLWYgJHNjcmlwdAorCXRvdWNoICRzY3JpcHQKKwllY2hvICdleHBvcnQgUEFUSD0ke1NUQUdJTkdfRElSX05BVElWRX0vdXNyL2Jpbjoke1BBVEh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENDQUNIRV9QQVRIPSR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3IvYmluOiR7Q0NBQ0hFX1BBVEh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVI9JHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBQS0dfQ09ORklHX1BBVEg9JHtQS0dfQ09ORklHX1BBVEh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENPTkZJR19TSVRFPSIke0BzaXRlaW5mb19nZXRfZmlsZXMoZCl9IicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBTREtUQVJHRVRTWVNST09UPSR7U1RBR0lOR19ESVJfVEFSR0VUfScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiR7U1RBR0lOR19ESVJfTkFUSVZFfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX1RBUkdFVF9TWVNST09UPSIke1NUQUdJTkdfRElSX1RBUkdFVH0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FQ09SRV9BQ0xPQ0FMX09QVFM9Ii1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3Ivc2hhcmUvYWNsb2NhbCInID4+ICRzY3JpcHQKKworCXRvb2xjaGFpbl9zaGFyZWRfZW52X3NjcmlwdAorfQorCit0b29sY2hhaW5fc2hhcmVkX2Vudl9zY3JpcHQgKCkgeworCWVjaG8gJ2V4cG9ydCBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENYWD0iJHtUQVJHRVRfUFJFRklYfWcrKyAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENQUD0iJHtUQVJHRVRfUFJFRklYfWdjYyAtRSAke1RBUkdFVF9DQ19BUkNIfSAtLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFTPSIke1RBUkdFVF9QUkVGSVh9YXMgJHtUQVJHRVRfQVNfQVJDSH0iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IExEPSIke1RBUkdFVF9QUkVGSVh9bGQgJHtUQVJHRVRfTERfQVJDSH0gLS1zeXNyb290PSRTREtUQVJHRVRTWVNST09UIicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBHREI9JHtUQVJHRVRfUFJFRklYfWdkYicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBTVFJJUD0ke1RBUkdFVF9QUkVGSVh9c3RyaXAnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgUkFOTElCPSR7VEFSR0VUX1BSRUZJWH1yYW5saWInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0JKQ09QWT0ke1RBUkdFVF9QUkVGSVh9b2JqY29weScgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPQkpEVU1QPSR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEFSPSR7VEFSR0VUX1BSRUZJWH1hcicgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBOTT0ke1RBUkdFVF9QUkVGSVh9bm0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTTQ9bTQnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgVEFSR0VUX1BSRUZJWD0ke1RBUkdFVF9QUkVGSVh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENPTkZJR1VSRV9GTEFHUz0iLS10YXJnZXQ9JHtUQVJHRVRfU1lTfSAtLWhvc3Q9JHtUQVJHRVRfU1lTfSAtLWJ1aWxkPSR7U0RLX0FSQ0h9LWxpbnV4IC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JFNES1RBUkdFVFNZU1JPT1QiJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENGTEFHUz0iJHtUQVJHRVRfQ0ZMQUdTfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQ1hYRkxBR1M9IiR7VEFSR0VUX0NYWEZMQUdTfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgTERGTEFHUz0iJHtUQVJHRVRfTERGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENQUEZMQUdTPSIke1RBUkdFVF9DUFBGTEFHU30iJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IEtDRkxBR1M9Ii0tc3lzcm9vdD0kU0RLVEFSR0VUU1lTUk9PVCInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX0RJU1RST19WRVJTSU9OPSIke0RJU1RST19WRVJTSU9OfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VDT1JFX1NES19WRVJTSU9OPSIke1NES19WRVJTSU9OfSInID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgQVJDSD0ke0FSQ0h9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfScgPj4gJHNjcmlwdAorCisgICAgY2F0ID4+ICRzY3JpcHQgPDxFT0YKKworIyBBcHBlbmQgZW52aXJvbm1lbnQgc3Vic2NyaXB0cworaWYgWyAtZCAiXCRPRUNPUkVfVEFSR0VUX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZCIgXTsgdGhlbgorICAgIGZvciBlbnZmaWxlIGluIFwkT0VDT1JFX1RBUkdFVF9TWVNST09UL2Vudmlyb25tZW50LXNldHVwLmQvKi5zaDsgZG8KKwkgICAgc291cmNlIFwkZW52ZmlsZQorICAgIGRvbmUKK2ZpCitpZiBbIC1kICJcJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9lbnZpcm9ubWVudC1zZXR1cC5kIiBdOyB0aGVuCisgICAgZm9yIGVudmZpbGUgaW4gXCRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZW52aXJvbm1lbnQtc2V0dXAuZC8qLnNoOyBkbworCSAgICBzb3VyY2UgXCRlbnZmaWxlCisgICAgZG9uZQorZmkKK0VPRgorfQorCisjd2UgZ2V0IHRoZSBjYWNoZWQgc2l0ZSBjb25maWcgaW4gdGhlIHJ1bnRpbWUKK1RPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEUgPSAiJHtAc2l0ZWluZm9fZ2V0X2ZpbGVzKGQsIFRydWUpfSIKK1RPT0xDSEFJTl9DT05GSUdTSVRFX1NZU1JPT1RDQUNIRSA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0vJHt0YXJnZXRfZGF0YWRpcn0vJHtUQVJHRVRfU1lTfV9jb25maWdfc2l0ZS5kIgorVE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRSA/Pz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjIG5jdXJzZXMiCisKKyNUaGlzIGZ1bmN0aW9uIGNyZWF0ZSBhIHNpdGUgY29uZmlnIGZpbGUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3NpdGVjb25maWcgKCkgeworCWxvY2FsIHNpdGVjb25maWc9JDEKKworCXJtIC1mICRzaXRlY29uZmlnCisJdG91Y2ggJHNpdGVjb25maWcKKworCWZvciBzaXRlZmlsZSBpbiAke1RPT0xDSEFJTl9DT05GSUdTSVRFX05PQ0FDSEV9IDsgZG8KKwkJY2F0ICRzaXRlZmlsZSA+PiAkc2l0ZWNvbmZpZworCWRvbmUKKworCSNnZXQgY2FjaGVkIHNpdGUgY29uZmlnCisJZm9yIHNpdGVmaWxlIGluICR7VE9PTENIQUlOX05FRURfQ09ORklHU0lURV9DQUNIRX07IGRvCisJCSMgUmVzb2x2ZSB2aXJ0dWFsLyogbmFtZXMgdG8gdGhlIHJlYWwgcmVjaXBlIG5hbWUgdXNpbmcgc3lzcm9vdC1wcm92aWRlcnMgaW5mbworCQljYXNlICRzaXRlZmlsZSBpbiB2aXJ0dWFsLyopCisJCQlzaXRlZmlsZT1gZWNobyAkc2l0ZWZpbGUgfCB0ciAvIF9gCisJCQlzaXRlZmlsZT1gY2F0ICR7U1RBR0lOR19ESVJfVEFSR0VUfS9zeXNyb290LXByb3ZpZGVycy8kc2l0ZWZpbGVgCisJCWVzYWMKKworCQlpZiBbIC1yICR7VE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFfS8ke3NpdGVmaWxlfV9jb25maWcgXTsgdGhlbgorCQkJY2F0ICR7VE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFfS8ke3NpdGVmaWxlfV9jb25maWcgPj4gJHNpdGVjb25maWcKKwkJZmkKKwlkb25lCit9CisjIFRoZSBpbW1lZGlhdGUgZXhwYW5zaW9uIGFib3ZlIGNhbiByZXN1bHQgaW4gdW53YW50ZWQgcGF0aCBkZXBlbmRlbmNpZXMgaGVyZQordG9vbGNoYWluX2NyZWF0ZV9zZGtfc2l0ZWNvbmZpZ1t2YXJkZXBzZXhjbHVkZV0gPSAiVE9PTENIQUlOX0NPTkZJR1NJVEVfU1lTUk9PVENBQ0hFIgorCisjVGhpcyBmdW5jdGlvbiBjcmVhdGUgYSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZpbGUKK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb24gKCkgeworCWxvY2FsIHZlcnNpb25maWxlPSQxCisJcm0gLWYgJHZlcnNpb25maWxlCisJdG91Y2ggJHZlcnNpb25maWxlCisJZWNobyAnRGlzdHJvOiAke0RJU1RST30nID4+ICR2ZXJzaW9uZmlsZQorCWVjaG8gJ0Rpc3RybyBWZXJzaW9uOiAke0RJU1RST19WRVJTSU9OfScgPj4gJHZlcnNpb25maWxlCisJZWNobyAnTWV0YWRhdGEgUmV2aXNpb246ICR7TUVUQURBVEFfUkVWSVNJT059JyA+PiAkdmVyc2lvbmZpbGUKKwllY2hvICdUaW1lc3RhbXA6ICR7REFURVRJTUV9JyA+PiAkdmVyc2lvbmZpbGUKK30KK3Rvb2xjaGFpbl9jcmVhdGVfc2RrX3ZlcnNpb25bdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCBvZS5jbGFzc2V4dGVuZAorICAgIGRlcHMgPSAiIgorICAgIGZvciBkZXAgaW4gKGQuZ2V0VmFyKCdUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgIGRlcHMgKz0gIiAlczpkb19wb3B1bGF0ZV9zeXNyb290IiAlIGRlcAorICAgICAgICBmb3IgdmFyaWFudCBpbiAoZC5nZXRWYXIoJ01VTFRJTElCX1ZBUklBTlRTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBjbHNleHRlbmQgPSBvZS5jbGFzc2V4dGVuZC5DbGFzc0V4dGVuZGVyKHZhcmlhbnQsIGQpCisgICAgICAgICAgICBuZXdkZXAgPSBjbHNleHRlbmQuZXh0ZW5kX25hbWUoZGVwKQorICAgICAgICAgICAgZGVwcyArPSAiICVzOmRvX3BvcHVsYXRlX3N5c3Jvb3QiICUgbmV3ZGVwCisgICAgZC5hcHBlbmRWYXJGbGFnKCdkb19jb25maWd1cmUnLCAnZGVwZW5kcycsIGRlcHMpCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdHlwZWNoZWNrLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkYTkzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy90eXBlY2hlY2suYmJjbGFzcwpAQCAtMCwwICsxLDEyIEBACisjIENoZWNrIHR5cGVzIG9mIGJpdGJha2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyMKKyMgU2VlIG9lLnR5cGVzIGZvciBkZXRhaWxzLgorCitweXRob24gY2hlY2tfdHlwZXMoKSB7CisgICAgaW1wb3J0IG9lLnR5cGVzCisgICAgZm9yIGtleSBpbiBlLmRhdGEua2V5cygpOgorICAgICAgICBpZiBlLmRhdGEuZ2V0VmFyRmxhZyhrZXksICJ0eXBlIik6CisgICAgICAgICAgICBvZS5kYXRhLnR5cGVkX3ZhbHVlKGtleSwgZS5kYXRhKQorfQorYWRkaGFuZGxlciBjaGVja190eXBlcworY2hlY2tfdHlwZXNbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5Db25maWdQYXJzZWQiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdWJvb3QtY29uZmlnLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNjFhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91Ym9vdC1jb25maWcuYmJjbGFzcwpAQCAtMCwwICsxLDQ5IEBACisjIEhhbmRsZSBVLUJvb3QgY29uZmlnIGZvciBhIG1hY2hpbmUKKyMKKyMgVGhlIGZvcm1hdCB0byBzcGVjaWZ5IGl0LCBpbiB0aGUgbWFjaGluZSwgaXM6CisjCisjIFVCT09UX0NPTkZJRyA/Pz0gPGRlZmF1bHQ+CisjIFVCT09UX0NPTkZJR1tmb29dID0gImNvbmZpZyxpbWFnZXMiCisjCisjIG9yCisjCisjIFVCT09UX01BQ0hJTkUgPSAiY29uZmlnIgorIworIyBDb3B5cmlnaHQgMjAxMywgMjAxNCAoQykgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisKK3B5dGhvbiAoKSB7CisgICAgdWJvb3RtYWNoaW5lID0gZC5nZXRWYXIoIlVCT09UX01BQ0hJTkUiLCBUcnVlKQorICAgIHVib290Y29uZmlnZmxhZ3MgPSBkLmdldFZhckZsYWdzKCdVQk9PVF9DT05GSUcnKQorICAgICMgVGhlICJkb2MiIHZhcmZsYWcgaXMgc3BlY2lhbCwgd2UgZG9uJ3Qgd2FudCB0byBzZWUgaXQgaGVyZQorICAgIHVib290Y29uZmlnZmxhZ3MucG9wKCdkb2MnLCBOb25lKQorCisgICAgaWYgbm90IHVib290bWFjaGluZSBhbmQgbm90IHVib290Y29uZmlnZmxhZ3M6CisgICAgICAgIFBOID0gZC5nZXRWYXIoIlBOIiwgVHJ1ZSkKKyAgICAgICAgRklMRSA9IG9zLnBhdGguYmFzZW5hbWUoZC5nZXRWYXIoIkZJTEUiLCBUcnVlKSkKKyAgICAgICAgYmIuZGVidWcoMSwgIlRvIGJ1aWxkICVzLCBzZWUgJXMgZm9yIGluc3RydWN0aW9ucyBvbiBcCisgICAgICAgICAgICAgICAgIHNldHRpbmcgdXAgeW91ciBtYWNoaW5lIGNvbmZpZyIgJSAoUE4sIEZJTEUpKQorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiRWl0aGVyIFVCT09UX01BQ0hJTkUgb3IgVUJPT1RfQ09ORklHIG11c3QgYmUgc2V0IGluIHRoZSAlcyBtYWNoaW5lIGNvbmZpZ3VyYXRpb24uIiAlIGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkpCisKKyAgICBpZiB1Ym9vdG1hY2hpbmUgYW5kIHVib290Y29uZmlnZmxhZ3M6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJZb3UgY2Fubm90IHVzZSBVQk9PVF9NQUNISU5FIGFuZCBVQk9PVF9DT05GSUcgYXQgdGhlIHNhbWUgdGltZS4iKQorCisgICAgaWYgbm90IHVib290Y29uZmlnZmxhZ3M6CisgICAgICAgIHJldHVybgorCisgICAgdWJvb3Rjb25maWcgPSAoZC5nZXRWYXIoJ1VCT09UX0NPTkZJRycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHVib290Y29uZmlnKSA+IDA6CisgICAgICAgIGZvciBjb25maWcgaW4gdWJvb3Rjb25maWc6CisgICAgICAgICAgICBmb3IgZiwgdiBpbiB1Ym9vdGNvbmZpZ2ZsYWdzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgY29uZmlnID09IGY6IAorICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IHYuc3BsaXQoJywnKQorICAgICAgICAgICAgICAgICAgICBpZiBpdGVtc1swXSBhbmQgbGVuKGl0ZW1zKSA+IDI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgnT25seSBjb25maWcsaW1hZ2VzIGNhbiBiZSBzcGVjaWZpZWQhJykKKyAgICAgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1VCT09UX01BQ0hJTkUnLCAnICcgKyBpdGVtc1swXSkKKyAgICAgICAgICAgICAgICAgICAgIyBJTUFHRV9GU1RZUEVTIGFwcGVuZGluZworICAgICAgICAgICAgICAgICAgICBpZiBsZW4oaXRlbXMpID4gMSBhbmQgaXRlbXNbMV06CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiQXBwZW5kaW5nICclcycgdG8gSU1BR0VfRlNUWVBFUy4iICUgaXRlbXNbMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBkLmFwcGVuZFZhcignSU1BR0VfRlNUWVBFUycsICcgJyArIGl0ZW1zWzFdKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgIGVsaWYgbGVuKHVib290Y29uZmlnKSA9PSAwOgorICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCdZb3UgbXVzdCBzZXQgYSBkZWZhdWx0IGluIFVCT09UX0NPTkZJRy4nKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VuaW5hdGl2ZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMzkxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdW5pbmF0aXZlLmJiY2xhc3MKQEAgLTAsMCArMSw0NCBAQAorTkFUSVZFTFNCU1RSSU5HID0gInVuaXZlcnNhbCIKKworVU5JTkFUSVZFX0xPQURFUiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0vbGliL2xkLWxpbnV4LXg4Ni02NC5zby4yIgorCithZGRoYW5kbGVyIHVuaW5hdGl2ZV9ldmVudGhhbmRsZXIKK3VuaW5hdGl2ZV9ldmVudGhhbmRsZXJbZXZlbnRtYXNrXSA9ICJiYi5ldmVudC5CdWlsZFN0YXJ0ZWQiCisKK3B5dGhvbiB1bmluYXRpdmVfZXZlbnRoYW5kbGVyKCkgeworICAgIGxvYWRlciA9IGUuZGF0YS5nZXRWYXIoIlVOSU5BVElWRV9MT0FERVIiLCBUcnVlKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsb2FkZXIpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBjbWQgPSBlLmRhdGEuZXhwYW5kKCJta2RpciAtcCAke1NUQUdJTkdfRElSfTsgY2QgJHtTVEFHSU5HX0RJUn07IHRhciAteGpmICR7Q09SRUJBU0V9LyR7QlVJTERfQVJDSH0tbmF0aXZlc2RrLWxpYmMudGFyLmJ6MjsgJHtTVEFHSU5HX0RJUn0vcmVsb2NhdGVfc2RrLnB5ICR7U1RBR0lOR19ESVJfTkFUSVZFfSAke1VOSU5BVElWRV9MT0FERVJ9ICR7VU5JTkFUSVZFX0xPQURFUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BhdGNoZWxmLXVuaW5hdGl2ZSIpCisgICAgICAgICNiYi53YXJuKCJuYXRpdmVzZGsgbGliIGV4dHJhY3Rpb246ICIgKyBjbWQpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCit9CisKK1NTVEFURVBPU1RVTlBBQ0tGVU5DU19hcHBlbmQgPSAiIHVuaW5hdGl2ZV9jaGFuZ2VpbnRlcnAiCisKK3B5dGhvbiB1bmluYXRpdmVfY2hhbmdlaW50ZXJwICgpIHsKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBzdGF0CisgICAgaW1wb3J0IG9lLnFhCisKKyAgICBpZiBub3QgKGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpIG9yIGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ2Nyb3Nzc2RrJywgZCkgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSk6CisgICAgICAgIHJldHVybgorCisgICAgc3N0YXRlaW5zdCA9IGQuZ2V0VmFyKCdTU1RBVEVfSU5TVERJUicsIFRydWUpCisgICAgZm9yIHdhbGtyb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNzdGF0ZWluc3QpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4od2Fsa3Jvb3QsIGZpbGUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcyA9IG9zLnN0YXQoZikKKyAgICAgICAgICAgIGlmIG5vdCAoKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWFVTUikgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWEdSUCkgb3IgKHNbc3RhdC5TVF9NT0RFXSAmIHN0YXQuU19JWE9USCkpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGYgPSBvZS5xYS5FTEZGaWxlKGYpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZWxmLm9wZW4oKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICNiYi53YXJuKCJwYXRjaGVsZi11bmluYXRpdmUgLS1zZXQtaW50ZXJwcmV0ZXIgJXMgJXMiICUgKGQuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSksIGYpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJwYXRjaGVsZi11bmluYXRpdmUgLS1zZXQtaW50ZXJwcmV0ZXIgJXMgJXMiICUgKGQuZ2V0VmFyKCJVTklOQVRJVkVfTE9BREVSIiwgVHJ1ZSksIGYpLCBzaGVsbD1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMTY1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91cGRhdGUtYWx0ZXJuYXRpdmVzLmJiY2xhc3MKQEAgLTAsMCArMSwyNjcgQEAKKyMgVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGhlbHAgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gd2hpY2ggaXMgdXNlZnVsIHdoZW4KKyMgbXVsdGlwbGUgc291cmNlcyBwcm92aWRlIHNhbWUgY29tbWFuZC4gWW91IGNhbiB1c2UgdXBkYXRlLWFsdGVybmF0aXZlcworIyBjb21tYW5kIGRpcmVjdGx5IGluIHlvdXIgcmVjaXBlLCBidXQgaW4gbW9zdCBjYXNlcyB0aGlzIGNsYXNzIHNpbXBsaWZpZXMKKyMgdGhhdCBqb2IuCisjCisjIFRvIHVzZSB0aGlzIGNsYXNzIGEgbnVtYmVyIG9mIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVmaW5lZDoKKyMKKyMgTGlzdCBhbGwgb2YgdGhlIGFsdGVybmF0aXZlcyBuZWVkZWQgYnkgYSBwYWNrYWdlOgorIyBBTFRFUk5BVElWRV88cGtnPiA9ICJuYW1lMSBuYW1lMiBuYW1lMyAuLi4iCisjCisjICAgaS5lLiBBTFRFUk5BVElWRV9idXN5Ym94ID0gInNoIHNlZCB0ZXN0IGJyYWNrZXQiCisjCisjIFRoZSBwYXRobmFtZSBvZiB0aGUgbGluaworIyBBTFRFUk5BVElWRV9MSU5LX05BTUVbbmFtZV0gPSAidGFyZ2V0IgorIworIyAgIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGJpbmFyeSBvbmNlIGl0J3MgYmVlbiBpbnN0YWxsZWQgb250byB0aGUgcnVudGltZS4KKyMgICBUaGlzIG5hbWUgaXMgZ2xvYmFsIHRvIGFsbCBzcGxpdCBwYWNrYWdlcyBpbiB0aGlzIHJlY2lwZSwgYW5kIHNob3VsZCBtYXRjaAorIyAgIG90aGVyIHJlY2lwZXMgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LgorIyAgIGkuZS4gQUxURVJOQVRJVkVfTElOS19OQU1FW2JyYWNrZXRdID0gIi91c3IvYmluL1siCisjCisjIE5PVEU6IElmIEFMVEVSTkFUSVZFX0xJTktfTkFNRSBpcyBub3QgZGVmaW5lZCwgaXQgZGVmYXVsdHMgdG8gJHtiaW5kaXJ9L25hbWUKKyMKKyMgVGhlIGRlZmF1bHQgbGluayB0byBjcmVhdGUgZm9yIGFsbCB0YXJnZXRzCisjIEFMVEVSTkFUSVZFX1RBUkdFVCA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB1c2VmdWwgaW4gYSBtdWx0aWNhbGwgYmluYXJ5IGNhc2UKKyMgICBpLmUuIEFMVEVSTkFUSVZFX1RBUkdFVCA9ICIvYmluL2J1c3lib3giCisjCisjIEEgbm9uLWRlZmF1bHQgbGluayB0byBjcmVhdGUgZm9yIGEgdGFyZ2V0CisjIEFMVEVSTkFUSVZFX1RBUkdFVFtuYW1lXSA9ICJ0YXJnZXQiCisjCisjICAgVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYmluYXJ5IGFzIGl0J3MgYmVlbiBpbnN0YWxsIGJ5IGRvX2luc3RhbGwKKyMgICBpLmUuIEFMVEVSTkFUSVZFX1RBUkdFVFtzaF0gPSAiL2Jpbi9iYXNoIgorIworIyBBIHBhY2thZ2Ugc3BlY2lmaWMgbGluayBmb3IgYSB0YXJnZXQKKyMgQUxURVJOQVRJVkVfVEFSR0VUXzxwa2c+W25hbWVdID0gInRhcmdldCIKKyMKKyMgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgcmVjaXBlIHByb3ZpZGVzIG11bHRpcGxlIGFsdGVybmF0aXZlcyBmb3IgdGhlCisjICAgc2FtZSBpdGVtLgorIworIyBOT1RFOiBJZiBBTFRFUk5BVElWRV9UQVJHRVQgaXMgbm90IGRlZmluZWQsIGl0IHdpbGwgaW5oZXJpdCB0aGUgdmFsdWUKKyMgZnJvbSBBTFRFUk5BVElWRV9MSU5LX05BTUUuCisjCisjIE5PVEU6IElmIHRoZSBBTFRFUk5BVElWRV9MSU5LX05BTUUgYW5kIEFMVEVSTkFUSVZFX1RBUkdFVCBhcmUgdGhlIHNhbWUsCisjIEFMVEVSTkFUSVZFX1RBUkdFVCB3aWxsIGhhdmUgJy57QlBOfScgYXBwZW5kZWQgdG8gaXQuICBJZiB0aGUgZmlsZQorIyByZWZlcmVuY2VkIGhhcyBub3QgYmVlbiByZW5hbWVkLCBpdCB3aWxsIGFsc28gYmUgcmVuYW1lZC4gIChUaGlzIGF2b2lkcworIyB0aGUgbmVlZCB0byByZW5hbWUgYWx0ZXJuYXRpdmUgZmlsZXMgaW4gdGhlIGRvX2luc3RhbGwgc3RlcCwgYnV0IHN0aWxsCisjIHN1cHBvcnRzIGl0IGlmIG5lY2Vzc2FyeSBmb3Igc29tZSByZWFzb24uKQorIworIyBUaGUgZGVmYXVsdCBwcmlvcml0eSBmb3IgYW55IGFsdGVybmF0aXZlcworIyBBTFRFUk5BVElWRV9QUklPUklUWSA9ICJwcmlvcml0eSIKKyMKKyMgICBpLmUuIGRlZmF1bHQgaXMgQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCisjCisjIFRoZSBub24tZGVmYXVsdCBwcmlvcml0eSBmb3IgYSBzcGVjaWZpYyB0YXJnZXQKKyMgQUxURVJOQVRJVkVfUFJJT1JJVFlbbmFtZV0gPSAicHJpb3JpdHkiCisjCisjIFRoZSBwYWNrYWdlIHByaW9yaXR5IGZvciBhIHNwZWNpZmljIHRhcmdldAorIyBBTFRFUk5BVElWRV9QUklPUklUWV88cGtnPltuYW1lXSA9ICJwcmlvcml0eSIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCisKKyMgV2UgbmVlZCBzcGVjaWFsIHByb2Nlc3NpbmcgZm9yIHZhcmRlcHMgYmVjYXVzZSBpdCBjYW4gbm90IHdvcmsgb24KKyMgbW9kaWZpZWQgZmxhZyB2YWx1ZXMuICBTbyB3ZSBhZ3JlZ2F0ZSB0aGUgZmxhZ3MgaW50byBhIG5ldyB2YXJpYWJsZQorIyBhbmQgaW5jbHVkZSB0aGF0IHZhaXJhYmxlIGluIHRoZSBzZXQuCitVUERBTFRWQVJTICA9ICJBTFRFUk5BVElWRSBBTFRFUk5BVElWRV9MSU5LX05BTUUgQUxURVJOQVRJVkVfVEFSR0VUIEFMVEVSTkFUSVZFX1BSSU9SSVRZIgorCitkZWYgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcmRlcHMoZCk6CisgICAgcGtncyA9IChkLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIHZhcnMgPSAoZC5nZXRWYXIoIlVQREFMVFZBUlMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgIyBGaXJzdCBjb21wdXRlIHRoZW0gZm9yIG5vbl9wa2cgdmVyc2lvbnMKKyAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICBmb3IgZmxhZyBpbiAoZC5nZXRWYXJGbGFncyh2KSBvciB7fSk6CisgICAgICAgICAgICBpZiBmbGFnID09ICJkb2MiIG9yIGZsYWcgPT0gInZhcmRlcHMiIG9yIGZsYWcgPT0gInZhcmRlcHNleHAiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkLmFwcGVuZFZhcignJXNfVkFSREVQUycgJSAodiksICcgJXM6JXMnICUgKGZsYWcsIGQuZ2V0VmFyRmxhZyh2LCBmbGFnLCBGYWxzZSkpKQorCisgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgICAgIGZvciBmbGFnIGluIChkLmdldFZhckZsYWdzKCIlc18lcyIgJSAodixwKSkgb3Ige30pOgorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gImRvYyIgb3IgZmxhZyA9PSAidmFyZGVwcyIgb3IgZmxhZyA9PSAidmFyZGVwc2V4cCI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJyVzX1ZBUkRFUFNfJXMnICUgKHYscCksICcgJXM6JXMnICUgKGZsYWcsIGQuZ2V0VmFyRmxhZygnJXNfJXMnICUgKHYscCksIGZsYWcsIEZhbHNlKSkpCisKK2RlZiB1YV9leHRlbmRfZGVwZW5kcyhkKToKKyAgICBpZiBub3QgJ3ZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcycgaW4gZC5nZXRWYXIoJ1BST1ZJREVTJywgVHJ1ZSk6CisgICAgICAgIGQuYXBwZW5kVmFyKCdERVBFTkRTJywgJyB2aXJ0dWFsLyR7TUxQUkVGSVh9dXBkYXRlLWFsdGVybmF0aXZlcycpCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICAjIFVwZGF0ZSBBbHRlcm5hdGl2ZXMgb25seSB3b3JrcyBvbiB0YXJnZXQgcGFja2FnZXMuLi4KKyAgICBpZiBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKSBvciBcCisgICAgICAgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnY3Jvc3MnLCBkKSBvciBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zc3NkaycsIGQpIG9yIFwKKyAgICAgICBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCdjcm9zcy1jYW5hZGlhbicsIGQpOgorICAgICAgICByZXR1cm4KKworICAgICMgY29tcHV0ZSBzcGVjaWFsIHZhcmRlcHMKKyAgICBnZW5fdXBkYXRlYWx0ZXJuYXRpdmVzdmFyZGVwcyhkKQorCisgICAgIyBleHRlbmQgdGhlIGRlcGVuZHMgdG8gaW5jbHVkZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMKKyAgICB1YV9leHRlbmRfZGVwZW5kcyhkKQorfQorCitkZWYgZ2VuX3VwZGF0ZWFsdGVybmF0aXZlc3ZhcnMoZCk6CisgICAgcmV0ID0gW10KKyAgICBwa2dzID0gKGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgdmFycyA9IChkLmdldFZhcigiVVBEQUxUVkFSUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisKKyAgICBmb3IgdiBpbiB2YXJzOgorICAgICAgICByZXQuYXBwZW5kKHYgKyAiX1ZBUkRFUFMiKQorCisgICAgZm9yIHAgaW4gcGtnczoKKyAgICAgICAgZm9yIHYgaW4gdmFyczoKKyAgICAgICAgICAgIHJldC5hcHBlbmQodiArICJfIiArIHApCisgICAgICAgICAgICByZXQuYXBwZW5kKHYgKyAiX1ZBUkRFUFNfIiArIHApCisgICAgcmV0dXJuICIgIi5qb2luKHJldCkKKworIyBOb3cgdGhlIG5ldyBzdHVmZiwgd2UgdXNlIGEgY3VzdG9tIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSByaWdodCB2YWx1ZXMKK3BvcHVsYXRlX3BhY2thZ2VzW3ZhcmRlcHNdICs9ICIke1VQREFMVFZBUlN9ICR7QGdlbl91cGRhdGVhbHRlcm5hdGl2ZXN2YXJzKGQpfSIKKworIyBXZSBuZWVkIHRvIGRvIHRoZSByZW5hbWUgYWZ0ZXIgdGhlIGltYWdlIGNyZWF0aW9uIHN0ZXAsIGJ1dCBiZWZvcmUKKyMgdGhlIHNwbGl0IGFuZCBzdHJpcCBzdGVwcy4uICBwYWNrYWdlY29weSBzZWVtcyB0byBiZSB0aGUgZWFybGllc3QgcmVhc29uYWJsZQorIyBwbGFjZS4KK3B5dGhvbiBwZXJmb3JtX3BhY2thZ2Vjb3B5X2FwcGVuZCAoKSB7CisgICAgIyBDaGVjayBmb3IgZGVwcmVjYXRlZCB1c2FnZS4uLgorICAgIHBuID0gZC5nZXRWYXIoJ0JQTicsIFRydWUpCisgICAgaWYgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX0xJTktTJywgVHJ1ZSkgIT0gTm9uZToKKyAgICAgICAgYmIuZmF0YWwoJyVzOiBVc2Ugb2YgQUxURVJOQVRJVkVfTElOS1MvQUxURVJOQVRJVkVfUEFUSC9BTFRFUk5BVElWRV9OQU1FIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQsIHBsZWFzZSBjb252ZXJ0IHRvIHRoZSB1cGRhdGVkIHN5bnRheCwgc2VlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMuYmJjbGFzcyBmb3IgbW9yZSBpbmZvLicgJSBwbikKKworICAgICMgRG8gYWN0dWFsIHVwZGF0ZSBhbHRlcm5hdGl2ZXMgcHJvY2Vzc2luZworICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHRCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiAoZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICMgSWYgdGhlIHNyYyA9PSBkZXN0LCB3ZSBrbm93IHdlIG5lZWQgdG8gcmVuYW1lIHRoZSBkZXN0IGJ5IGFwcGVuZGluZyAke0JQTn0KKyAgICAgICAgbGlua19yZW5hbWUgPSB7fQorICAgICAgICBmb3IgYWx0X25hbWUgaW4gKGQuZ2V0VmFyKCdBTFRFUk5BVElWRV8lcycgJSBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWx0X2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBhbHRfbGluazoKKyAgICAgICAgICAgICAgICBhbHRfbGluayA9ICIlcy8lcyIgJSAoZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpLCBhbHRfbmFtZSkKKyAgICAgICAgICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIGFsdF9uYW1lLCBhbHRfbGluaykKKworICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgVHJ1ZSkgb3IgZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGFsdF90YXJnZXQgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIFRydWUpIG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBUcnVlKSBvciBhbHRfbGluaworICAgICAgICAgICAgIyBTb21ldGltZXMgYWx0X3RhcmdldCBpcyBzcGVjaWZpZWQgYXMgcmVsYXRpdmUgdG8gdGhlIGxpbmsgbmFtZS4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYWx0X2xpbmspLCBhbHRfdGFyZ2V0KQorCisgICAgICAgICAgICAjIElmIHRoZSBsaW5rIGFuZCB0YXJnZXQgYXJlIHRoZSBzYW1lIG5hbWUsIHdlIG5lZWQgdG8gcmVuYW1lIHRoZSB0YXJnZXQuCisgICAgICAgICAgICBpZiBhbHRfbGluayA9PSBhbHRfdGFyZ2V0OgorICAgICAgICAgICAgICAgIHNyYyA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldCkKKyAgICAgICAgICAgICAgICBhbHRfdGFyZ2V0X3JlbmFtZSA9ICclcy4lcycgJSAoYWx0X3RhcmdldCwgcG4pCisgICAgICAgICAgICAgICAgZGVzdCA9ICclcy8lcycgJSAocGtnZGVzdCwgYWx0X3RhcmdldF9yZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGRlc3QpOgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogQWxyZWFkeSByZW5hbWVkOiAlcycgJSAocG4sIGFsdF90YXJnZXRfcmVuYW1lKSkKKyAgICAgICAgICAgICAgICBlbGlmIG9zLnBhdGgubGV4aXN0cyhzcmMpOgorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhzcmMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBEZWxheSByZW5hbWUgb2YgbGlua3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfcmVuYW1lW2FsdF90YXJnZXRdID0gYWx0X3RhcmdldF9yZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJyVzOiBSZW5hbWUgJXMgLT4gJXMnICUgKHBuLCBhbHRfdGFyZ2V0LCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc3JjLCBkZXN0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBhbHRlcm5hdGl2ZSB0YXJnZXQgKCVzIG9yICVzKSBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcuLi4iICUgKHBuLCBhbHRfdGFyZ2V0LCBhbHRfdGFyZ2V0X3JlbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBhbHRfbmFtZSwgYWx0X3RhcmdldF9yZW5hbWUpCisKKyAgICAgICAgIyBQcm9jZXNzIGRlbGF5ZWQgbGluayBuYW1lcworICAgICAgICAjIERvIHRoZXNlIGFmdGVyIG90aGVyIHJlbmFtZXMgc28gd2UgY2FuIGNvcnJlY3QgYnJva2VuIGxpbmtzCisgICAgICAgIGZvciBhbHRfdGFyZ2V0IGluIGxpbmtfcmVuYW1lOgorICAgICAgICAgICAgc3JjID0gJyVzLyVzJyAlIChwa2dkZXN0LCBhbHRfdGFyZ2V0KQorICAgICAgICAgICAgZGVzdCA9ICclcy8lcycgJSAocGtnZGVzdCwgbGlua19yZW5hbWVbYWx0X3RhcmdldF0pCisgICAgICAgICAgICBsaW5rID0gb3MucmVhZGxpbmsoc3JjKQorICAgICAgICAgICAgbGlua190YXJnZXQgPSBvZS5wYXRoLnJlYWxwYXRoKHNyYywgcGtnZGVzdCwgVHJ1ZSkKKworICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGxpbmtfdGFyZ2V0KToKKyAgICAgICAgICAgICAgICAjIE9rLCB0aGUgbGlua190YXJnZXQgZXhpc3RzLCB3ZSBjYW4gcmVuYW1lCisgICAgICAgICAgICAgICAgYmIubm90ZSgnJXM6IFJlbmFtZSAobGluaykgJXMgLT4gJXMnICUgKHBuLCBhbHRfdGFyZ2V0LCBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSkpCisgICAgICAgICAgICAgICAgb3MucmVuYW1lKHNyYywgZGVzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUcnkgdG8gcmVzb2x2ZSB0aGUgYnJva2VuIGxpbmsgdG8gbGluay4ke0JQTn0KKyAgICAgICAgICAgICAgICBsaW5rX21heWJlID0gJyVzLiVzJyAlIChvcy5yZWFkbGluayhzcmMpLCBwbikKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzcmMpLCBsaW5rX21heWJlKSk6CisgICAgICAgICAgICAgICAgICAgICMgT2ssIHRoZSByZW5hbWVkIGxpbmsgdGFyZ2V0IGV4aXN0cy4uIGNyZWF0ZSBhIG5ldyBsaW5rLCBhbmQgcmVtb3ZlIHRoZSBvcmlnaW5hbAorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCclczogQ3JlYXRpbmcgbmV3IGxpbmsgJXMgLT4gJXMnICUgKHBuLCBsaW5rX3JlbmFtZVthbHRfdGFyZ2V0XSwgbGlua19tYXliZSkpCisgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsobGlua19tYXliZSwgZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKHNyYykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBiYi53YXJuKCclczogVW5hYmxlIHRvIHJlc29sdmUgZGFuZ2xpbmcgc3ltbGluazogJXMnICUgKHBuLCBhbHRfdGFyZ2V0KSkKK30KKworUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICJwb3B1bGF0ZV9wYWNrYWdlc191cGRhdGVhbHRlcm5hdGl2ZXMgIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlYWx0ZXJuYXRpdmVzICgpIHsKKyAgICBwbiA9IGQuZ2V0VmFyKCdCUE4nLCBUcnVlKQorCisgICAgIyBEbyBhY3R1YWwgdXBkYXRlIGFsdGVybmF0aXZlcyBwcm9jZXNzaW5nCisgICAgcGtnZGVzdCA9IGQuZ2V0VmFyKCdQS0dEJywgVHJ1ZSkKKyAgICBmb3IgcGtnIGluIChkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIyBDcmVhdGUgcG9zdCBpbnN0YWxsL3JlbW92YWwgc2NyaXB0cworICAgICAgICBhbHRfc2V0dXBfbGlua3MgPSAiIgorICAgICAgICBhbHRfcmVtb3ZlX2xpbmtzID0gIiIKKyAgICAgICAgZm9yIGFsdF9uYW1lIGluIChkLmdldFZhcignQUxURVJOQVRJVkVfJXMnICUgcGtnLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgICAgIGFsdF9saW5rICAgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVF8lcycgJSBwa2csIGFsdF9uYW1lLCBUcnVlKSBvciBkLmdldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIGFsdF9uYW1lLCBUcnVlKQorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gYWx0X3RhcmdldCBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsIFRydWUpIG9yIGFsdF9saW5rCisgICAgICAgICAgICAjIFNvbWV0aW1lcyBhbHRfdGFyZ2V0IGlzIHNwZWNpZmllZCBhcyByZWxhdGl2ZSB0byB0aGUgbGluayBuYW1lLgorICAgICAgICAgICAgYWx0X3RhcmdldCAgID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShhbHRfbGluayksIGFsdF90YXJnZXQpCisKKyAgICAgICAgICAgIGFsdF9wcmlvcml0eSA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfUFJJT1JJVFlfJXMnICUgcGtnLCAgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfUFJJT1JJVFknLCAgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfcHJpb3JpdHkgPSBhbHRfcHJpb3JpdHkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZXyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ0FMVEVSTkFUSVZFX1BSSU9SSVRZJywgVHJ1ZSkKKworICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCB0cmlnZ2VyLCBhcyBpdCBzaG91bGQgaGF2ZSBiZWVuIHJlc29sdmVkIGVhcmxpZXIhCisgICAgICAgICAgICBpZiBhbHRfbGluayA9PSBhbHRfdGFyZ2V0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ2FsdF9saW5rID09IGFsdF90YXJnZXQ6ICVzID09ICVzIC0tIGNvcnJlY3RpbmcsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4hJyAlIChhbHRfbGluaywgYWx0X3RhcmdldCkpCisgICAgICAgICAgICAgICAgYWx0X3RhcmdldCA9ICclcy4lcycgJSAoYWx0X3RhcmdldCwgcG4pCisKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMoJyVzLyVzJyAlIChwa2dkZXN0LCBhbHRfdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgYmIud2FybignJXM6IE5PVCBhZGRpbmcgYWx0ZXJuYXRpdmUgcHJvdmlkZSAlczogJXMgZG9lcyBub3QgZXhpc3QnICUgKHBuLCBhbHRfbGluaywgYWx0X3RhcmdldCkpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZWZhdWx0IHRvIGdlbmVyYXRlIHNoZWxsIHNjcmlwdC4uIGV2ZW50dWFsbHkgd2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMuLi4KKyAgICAgICAgICAgIGFsdF90YXJnZXQgPSBvcy5wYXRoLm5vcm1wYXRoKGFsdF90YXJnZXQpCisKKyAgICAgICAgICAgIGFsdF9zZXR1cF9saW5rcyAgKz0gJ1x0dXBkYXRlLWFsdGVybmF0aXZlcyAtLWluc3RhbGwgJXMgJXMgJXMgJXNcbicgJSAoYWx0X2xpbmssIGFsdF9uYW1lLCBhbHRfdGFyZ2V0LCBhbHRfcHJpb3JpdHkpCisgICAgICAgICAgICBhbHRfcmVtb3ZlX2xpbmtzICs9ICdcdHVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1yZW1vdmUgICVzICVzXG4nICUgKGFsdF9uYW1lLCBhbHRfdGFyZ2V0KQorCisgICAgICAgIGlmIGFsdF9zZXR1cF9saW5rczoKKyAgICAgICAgICAgICMgUkRFUEVORFMgc2V0dXAKKyAgICAgICAgICAgIHByb3ZpZGVyID0gZC5nZXRWYXIoJ1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIHByb3ZpZGVyOgorICAgICAgICAgICAgICAgICNiYi5ub3RlKCdhZGRpbmcgcnVudGltZSByZXF1aXJlbWVudCBmb3IgdXBkYXRlLWFsdGVybmF0aXZlcyBmb3IgJXMnICUgcGtnKQorICAgICAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18lcycgJSBwa2csICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArIHByb3ZpZGVyKQorCisgICAgICAgICAgICBiYi5ub3RlKCdhZGRpbmcgdXBkYXRlLWFsdGVybmF0aXZlcyBjYWxscyB0byBwb3N0aW5zdC9wcmVybSBmb3IgJXMnICUgcGtnKQorICAgICAgICAgICAgYmIubm90ZSgnJXMnICUgYWx0X3NldHVwX2xpbmtzKQorICAgICAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgJyMhL2Jpbi9zaFxuJworICAgICAgICAgICAgcG9zdGluc3QgKz0gYWx0X3NldHVwX2xpbmtzCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgcG9zdGluc3QpCisKKyAgICAgICAgICAgIGJiLm5vdGUoJyVzJyAlIGFsdF9yZW1vdmVfbGlua3MpCisgICAgICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKSBvciAnIyEvYmluL3NoXG4nCisgICAgICAgICAgICBwcmVybSArPSBhbHRfcmVtb3ZlX2xpbmtzCisgICAgICAgICAgICBkLnNldFZhcigncGtnX3ByZXJtXyVzJyAlIHBrZywgcHJlcm0pCit9CisKK3B5dGhvbiBwYWNrYWdlX2RvX2ZpbGVkZXBzX2FwcGVuZCAoKSB7CisgICAgcG4gPSBkLmdldFZhcignQlBOJywgVHJ1ZSkKKyAgICBwa2dkZXN0ID0gZC5nZXRWYXIoJ1BLR0RFU1QnLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5zcGxpdCgpOgorICAgICAgICBmb3IgYWx0X25hbWUgaW4gKGQuZ2V0VmFyKCdBTFRFUk5BVElWRV8lcycgJSBwa2csIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgYWx0X2xpbmsgICAgID0gZC5nZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHRfbmFtZSwgVHJ1ZSkKKyAgICAgICAgICAgIGFsdF90YXJnZXQgICA9IGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUXyVzJyAlIHBrZywgYWx0X25hbWUsIFRydWUpIG9yIGQuZ2V0VmFyRmxhZygnQUxURVJOQVRJVkVfVEFSR0VUJywgYWx0X25hbWUsIFRydWUpCisgICAgICAgICAgICBhbHRfdGFyZ2V0ICAgPSBhbHRfdGFyZ2V0IG9yIGQuZ2V0VmFyKCdBTFRFUk5BVElWRV9UQVJHRVRfJXMnICUgcGtnLCBUcnVlKSBvciBkLmdldFZhcignQUxURVJOQVRJVkVfVEFSR0VUJywgVHJ1ZSkgb3IgYWx0X2xpbmsKKworICAgICAgICAgICAgaWYgYWx0X2xpbmsgPT0gYWx0X3RhcmdldDoKKyAgICAgICAgICAgICAgICBiYi53YXJuKCdhbHRfbGluayA9PSBhbHRfdGFyZ2V0OiAlcyA9PSAlcycgJSAoYWx0X2xpbmssIGFsdF90YXJnZXQpKQorICAgICAgICAgICAgICAgIGFsdF90YXJnZXQgPSAnJXMuJXMnICUgKGFsdF90YXJnZXQsIHBuKQorCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5sZXhpc3RzKCclcy8lcy8lcycgJSAocGtnZGVzdCwgcGtnLCBhbHRfdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBBZGQgZmlsZSBwcm92aWRlCisgICAgICAgICAgICB0cmFuc190YXJnZXQgPSBvZS5wYWNrYWdlLmZpbGVfdHJhbnNsYXRlKGFsdF90YXJnZXQpCisgICAgICAgICAgICBkLmFwcGVuZFZhcignRklMRVJQUk9WSURFU18lc18lcycgJSAodHJhbnNfdGFyZ2V0LCBwa2cpLCAiICIgKyBhbHRfbGluaykKKyAgICAgICAgICAgIGlmIG5vdCB0cmFuc190YXJnZXQgaW4gKGQuZ2V0VmFyKCdGSUxFUlBST1ZJREVTRkxJU1RfJXMnICUgcGtnLCBUcnVlKSBvciAiIik6CisgICAgICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0ZJTEVSUFJPVklERVNGTElTVF8lcycgJSBwa2csICIgIiArIHRyYW5zX3RhcmdldCkKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdXBkYXRlLXJjLmQuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBhNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3VwZGF0ZS1yYy5kLmJiY2xhc3MKQEAgLTAsMCArMSwxMzMgQEAKK1VQREFURVJDUE4gPz0gIiR7UE59IgorCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIHVwZGF0ZS1yYy5kLW5hdGl2ZSB1cGRhdGUtcmMuZCBpbml0c2NyaXB0cyIKK1VQREFURVJDRCA9ICJ1cGRhdGUtcmMuZCIKK1VQREFURVJDRF9jbGFzcy1jcm9zcyA9ICIiCitVUERBVEVSQ0RfY2xhc3MtbmF0aXZlID0gIiIKK1VQREFURVJDRF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitJTklUU0NSSVBUX1BBUkFNUyA/PSAiZGVmYXVsdHMiCisKK0lOSVRfRF9ESVIgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQiCisKK3VwZGF0ZXJjZF9wcmVpbnN0KCkgeworaWYgWyAteiAiJEQiIC1hIC1mICIke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSIgXTsgdGhlbgorCSR7SU5JVF9EX0RJUn0vJHtJTklUU0NSSVBUX05BTUV9IHN0b3AKK2ZpCitpZiB0eXBlIHVwZGF0ZS1yYy5kID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwlpZiBbIC1uICIkRCIgXTsgdGhlbgorCQlPUFQ9Ii1mIC1yICREIgorCWVsc2UKKwkJT1BUPSItZiIKKwlmaQorCXVwZGF0ZS1yYy5kICRPUFQgJHtJTklUU0NSSVBUX05BTUV9IHJlbW92ZQorZmkKK30KKwordXBkYXRlcmNkX3Bvc3RpbnN0KCkgeworaWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItciAkRCIKKwllbHNlCisJCU9QVD0iLXMiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSAke0lOSVRTQ1JJUFRfUEFSQU1TfQorZmkKK30KKwordXBkYXRlcmNkX3ByZXJtKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwkke0lOSVRfRF9ESVJ9LyR7SU5JVFNDUklQVF9OQU1FfSBzdG9wCitmaQorfQorCit1cGRhdGVyY2RfcG9zdHJtKCkgeworaWYgdHlwZSB1cGRhdGUtcmMuZCA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJT1BUPSItZiAtciAkRCIKKwllbHNlCisJCU9QVD0iLWYiCisJZmkKKwl1cGRhdGUtcmMuZCAkT1BUICR7SU5JVFNDUklQVF9OQU1FfSByZW1vdmUKK2ZpCit9CisKKworZGVmIHVwZGF0ZV9yY19hZnRlcl9wYXJzZShkKToKKyAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9QQUNLQUdFUycsIEZhbHNlKSA9PSBOb25lOgorICAgICAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9OQU1FJywgRmFsc2UpID09IE5vbmU6CisgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1cGRhdGUtcmMuZCBidXQgZG9lc24ndCBzZXQgSU5JVFNDUklQVF9OQU1FIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorICAgICAgICBpZiBkLmdldFZhcignSU5JVFNDUklQVF9QQVJBTVMnLCBGYWxzZSkgPT0gTm9uZToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIGluaGVyaXRzIHVwZGF0ZS1yYy5kIGJ1dCBkb2Vzbid0IHNldCBJTklUU0NSSVBUX1BBUkFNUyIgJSBkLmdldFZhcignRklMRScsIEZhbHNlKSkKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIHVwZGF0ZV9yY19hZnRlcl9wYXJzZShkKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAiCitQQUNLQUdFU1BMSVRGVU5DU19yZW1vdmVfY2xhc3MtbmF0aXZlc2RrID0gInBvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZCAiCisKK3BvcHVsYXRlX3BhY2thZ2VzX3VwZGF0ZXJjZFt2YXJkZXBzXSArPSAidXBkYXRlcmNkX3ByZXJtIHVwZGF0ZXJjZF9wb3N0cm0gdXBkYXRlcmNkX3ByZWluc3QgdXBkYXRlcmNkX3Bvc3RpbnN0IgorcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkW3ZhcmRlcHNleGNsdWRlXSArPSAiT1ZFUlJJREVTIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfdXBkYXRlcmNkICgpIHsKKyAgICBkZWYgdXBkYXRlX3JjZF9hdXRvX2RlcGVuZChwa2cpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgcGF0aCA9IGQuZXhwYW5kKCIke0R9JHtJTklUX0RfRElSfS8ke0lOSVRTQ1JJUFRfTkFNRX0iKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc3RhdGVtZW50ID0gImdyZXAgLXEgLXcgJy9ldGMvaW5pdC5kL2Z1bmN0aW9ucycgJXMiICUgcGF0aAorICAgICAgICBpZiBzdWJwcm9jZXNzLmNhbGwoc3RhdGVtZW50LCBzaGVsbD1UcnVlKSA9PSAwOgorICAgICAgICAgICAgbWxwcmVmaXggPSBkLmdldFZhcignTUxQUkVGSVgnLCBUcnVlKSBvciAiIgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ1JERVBFTkRTXycgKyBwa2csICcgJXNpbml0c2NyaXB0cy1mdW5jdGlvbnMnICUgKG1scHJlZml4KSkKKworICAgIGRlZiB1cGRhdGVfcmNkX3BhY2thZ2UocGtnKToKKyAgICAgICAgYmIuZGVidWcoMSwgJ2FkZGluZyB1cGRhdGUtcmMuZCBjYWxscyB0byBwcmVpbnN0L3Bvc3RpbnN0L3ByZXJtL3Bvc3RybSBmb3IgJXMnICUgcGtnKQorCisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBUcnVlKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCAiJXM6JXMiICUgKHBrZywgb3ZlcnJpZGVzKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICAgICAgdXBkYXRlX3JjZF9hdXRvX2RlcGVuZChwa2cpCisKKyAgICAgICAgcHJlaW5zdCA9IGQuZ2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIG5vdCBwcmVpbnN0OgorICAgICAgICAgICAgcHJlaW5zdCA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlaW5zdCArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcHJlaW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcHJlaW5zdF8lcycgJSBwa2csIHByZWluc3QpCisKKyAgICAgICAgcG9zdGluc3QgPSBkLmdldFZhcigncGtnX3Bvc3RpbnN0XyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RpbnN0OgorICAgICAgICAgICAgcG9zdGluc3QgPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RpbnN0ICs9IGxvY2FsZGF0YS5nZXRWYXIoJ3VwZGF0ZXJjZF9wb3N0aW5zdCcsIFRydWUpCisgICAgICAgIGQuc2V0VmFyKCdwa2dfcG9zdGluc3RfJXMnICUgcGtnLCBwb3N0aW5zdCkKKworICAgICAgICBwcmVybSA9IGQuZ2V0VmFyKCdwa2dfcHJlcm1fJXMnICUgcGtnLCBUcnVlKQorICAgICAgICBpZiBub3QgcHJlcm06CisgICAgICAgICAgICBwcmVybSA9ICcjIS9iaW4vc2hcbicKKyAgICAgICAgcHJlcm0gKz0gbG9jYWxkYXRhLmdldFZhcigndXBkYXRlcmNkX3ByZXJtJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wcmVybV8lcycgJSBwa2csIHByZXJtKQorCisgICAgICAgIHBvc3RybSA9IGQuZ2V0VmFyKCdwa2dfcG9zdHJtXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHBvc3RybToKKyAgICAgICAgICAgICAgICBwb3N0cm0gPSAnIyEvYmluL3NoXG4nCisgICAgICAgIHBvc3RybSArPSBsb2NhbGRhdGEuZ2V0VmFyKCd1cGRhdGVyY2RfcG9zdHJtJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ3BrZ19wb3N0cm1fJXMnICUgcGtnLCBwb3N0cm0pCisKKyAgICAgICAgZC5hcHBlbmRWYXIoJ1JSRUNPTU1FTkRTXycgKyBwa2csICIgJHtNTFBSRUZJWH0ke1VQREFURVJDRH0iKQorCisgICAgIyBDaGVjayB0aGF0IHRoaXMgY2xhc3MgaXNuJ3QgYmVpbmcgaW5oaWJpdGVkIChnZW5lcmFsbHksIGJ5CisgICAgIyBzeXN0ZW1kLmJiY2xhc3MpIGJlZm9yZSBkb2luZyBhbnkgd29yay4KKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpIG9yIFwKKyAgICAgICBub3QgZC5nZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCBUcnVlKToKKyAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdJTklUU0NSSVBUX1BBQ0tBR0VTJywgVHJ1ZSkKKyAgICAgICAgaWYgcGtncyA9PSBOb25lOgorICAgICAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdVUERBVEVSQ1BOJywgVHJ1ZSkKKyAgICAgICAgICAgIHBhY2thZ2VzID0gKGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgcGtncyBpbiBwYWNrYWdlcyBhbmQgcGFja2FnZXMgIT0gW106CisgICAgICAgICAgICAgICAgcGtncyA9IHBhY2thZ2VzWzBdCisgICAgICAgIGZvciBwa2cgaW4gcGtncy5zcGxpdCgpOgorICAgICAgICAgICAgdXBkYXRlX3JjZF9wYWNrYWdlKHBrZykKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGQtc3RhdGljaWRzLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxYTcwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy91c2VyYWRkLXN0YXRpY2lkcy5iYmNsYXNzCkBAIC0wLDAgKzEsMjc2IEBACisjIEluIG9yZGVyIHRvIHN1cHBvcnQgYSBkZXRlcm1pbmlzdGljIHNldCBvZiAnZHluYW1pYycgdXNlcnMvZ3JvdXBzLAorIyB3ZSBuZWVkIGEgZnVuY3Rpb24gdG8gcmVmb3JtYXQgdGhlIHBhcmFtcyBiYXNlZCBvbiBhIHN0YXRpYyBmaWxlCitkZWYgdXBkYXRlX3VzZXJhZGRfc3RhdGljX2NvbmZpZyhkKToKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgcmUKKworICAgIGNsYXNzIG15QXJndW1lbnRQYXJzZXIoIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyICk6CisgICAgICAgIGRlZiBfcHJpbnRfbWVzc2FnZShzZWxmLCBtZXNzYWdlLCBmaWxlPU5vbmUpOgorICAgICAgICAgICAgYmIud2FybigiJXMgLSAlczogJXMiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIG1lc3NhZ2UpKQorCisgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLi4uCisgICAgICAgIGRlZiBleGl0KHNlbGYsIHN0YXR1cz0wLCBtZXNzYWdlPU5vbmUpOgorICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2Ugb3IgKCIlcyAtICVzOiB1c2VyYWRkLmJiY2xhc3M6IEFyZ3VtZW50IHBhcnNpbmcgZXhpdGVkIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnKSkKKyAgICAgICAgICAgIGVycm9yKG1lc3NhZ2UpCisKKyAgICAgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZChtZXNzYWdlKQorCisgICAgIyBXZSBwYXJzZSBhbmQgcmV3cml0ZSB0aGUgdXNlcmFkZCBjb21wb25lbnRzCisgICAgZGVmIHJld3JpdGVfdXNlcmFkZChwYXJhbXMpOgorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgY29tZXMgZnJvbSAtLWhlbHAgb24gdXNlcmFkZCBmcm9tIHNoYWRvdworICAgICAgICBwYXJzZXIgPSBteUFyZ3VtZW50UGFyc2VyKHByb2c9J3VzZXJhZGQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItYiIsICItLWJhc2UtZGlyIiwgbWV0YXZhcj0iQkFTRV9ESVIiLCBoZWxwPSJiYXNlIGRpcmVjdG9yeSBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1jIiwgIi0tY29tbWVudCIsIG1ldGF2YXI9IkNPTU1FTlQiLCBoZWxwPSJHRUNPUyBmaWVsZCBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItZCIsICItLWhvbWUtZGlyIiwgbWV0YXZhcj0iSE9NRV9ESVIiLCBoZWxwPSJob21lIGRpcmVjdG9yeSBvZiB0aGUgbmV3IGFjY291bnQiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItRCIsICItLWRlZmF1bHRzIiwgaGVscD0icHJpbnQgb3IgY2hhbmdlIGRlZmF1bHQgdXNlcmFkZCBjb25maWd1cmF0aW9uIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWUiLCAiLS1leHBpcmVkYXRlIiwgbWV0YXZhcj0iRVhQSVJFX0RBVEUiLCBoZWxwPSJleHBpcmF0aW9uIGRhdGUgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWYiLCAiLS1pbmFjdGl2ZSIsIG1ldGF2YXI9IklOQUNUSVZFIiwgaGVscD0icGFzc3dvcmQgaW5hY3Rpdml0eSBwZXJpb2Qgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWciLCAiLS1naWQiLCBtZXRhdmFyPSJHUk9VUCIsIGhlbHA9Im5hbWUgb3IgSUQgb2YgdGhlIHByaW1hcnkgZ3JvdXAgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUciLCAiLS1ncm91cHMiLCBtZXRhdmFyPSJHUk9VUFMiLCBoZWxwPSJsaXN0IG9mIHN1cHBsZW1lbnRhcnkgZ3JvdXBzIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1rIiwgIi0tc2tlbCIsIG1ldGF2YXI9IlNLRUxfRElSIiwgaGVscD0idXNlIHRoaXMgYWx0ZXJuYXRpdmUgc2tlbGV0b24gZGlyZWN0b3J5IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLUsiLCAiLS1rZXkiLCBtZXRhdmFyPSJLRVk9VkFMVUUiLCBoZWxwPSJvdmVycmlkZSAvZXRjL2xvZ2luLmRlZnMgZGVmYXVsdHMiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbCIsICItLW5vLWxvZy1pbml0IiwgaGVscD0iZG8gbm90IGFkZCB0aGUgdXNlciB0byB0aGUgbGFzdGxvZyBhbmQgZmFpbGxvZyBkYXRhYmFzZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItbSIsICItLWNyZWF0ZS1ob21lIiwgaGVscD0iY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItTSIsICItLW5vLWNyZWF0ZS1ob21lIiwgaGVscD0iZG8gbm90IGNyZWF0ZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLU4iLCAiLS1uby11c2VyLWdyb3VwIiwgaGVscD0iZG8gbm90IGNyZWF0ZSBhIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdXNlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1vIiwgIi0tbm9uLXVuaXF1ZSIsIGhlbHA9ImFsbG93IHRvIGNyZWF0ZSB1c2VycyB3aXRoIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSBVSUQpIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0iZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1SIiwgIi0tcm9vdCIsIG1ldGF2YXI9IkNIUk9PVF9ESVIiLCBoZWxwPSJkaXJlY3RvcnkgdG8gY2hyb290IGludG8iKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItciIsICItLXN5c3RlbSIsIGhlbHA9ImNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXMiLCAiLS1zaGVsbCIsIG1ldGF2YXI9IlNIRUxMIiwgaGVscD0ibG9naW4gc2hlbGwgb2YgdGhlIG5ldyBhY2NvdW50IikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXUiLCAiLS11aWQiLCBtZXRhdmFyPSJVSUQiLCBoZWxwPSJ1c2VyIElEIG9mIHRoZSBuZXcgYWNjb3VudCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1VIiwgIi0tdXNlci1ncm91cCIsIGhlbHA9ImNyZWF0ZSBhIGdyb3VwIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgdXNlciIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIkxPR0lOIiwgaGVscD0iTG9naW4gbmFtZSBvZiB0aGUgbmV3IHVzZXIiKQorCisgICAgICAgICMgUmV0dXJuIGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGVzIGJhc2VkIG9uIGVpdGhlciB0aGUgZGVmYXVsdAorICAgICAgICAjIGZpbGVzL3Bhc3N3ZCBvciB0aGUgY29udGVudHMgb2YgVVNFUkFERF9VSURfVEFCTEVTCisgICAgICAgICMgcGF0aHMgYXJlIHJlc3VsdmVkIHZpYSBCQlBBVEgKKyAgICAgICAgZGVmIGdldF9wYXNzd2RfbGlzdChkKToKKyAgICAgICAgICAgIHN0ciA9ICIiCisgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICAgICAgICAgIHBhc3N3ZF90YWJsZXMgPSBkLmdldFZhcignVVNFUkFERF9VSURfVEFCTEVTJywgVHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBwYXNzd2RfdGFibGVzOgorICAgICAgICAgICAgICAgIHBhc3N3ZF90YWJsZXMgPSAnZmlsZXMvcGFzc3dkJworICAgICAgICAgICAgZm9yIGNvbmZfZmlsZSBpbiBwYXNzd2RfdGFibGVzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgc3RyICs9ICIgJXMiICUgYmIudXRpbHMud2hpY2goYmJwYXRoLCBjb25mX2ZpbGUpCisgICAgICAgICAgICByZXR1cm4gc3RyCisKKyAgICAgICAgbmV3cGFyYW1zID0gW10KKyAgICAgICAgZm9yIHBhcmFtIGluIHJlLnNwbGl0KCcnJ1sgXHRdKjtbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbXMpOgorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgcGFyYW06CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB1YWFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhyZS5zcGxpdCgnJydbIFx0XSooPz0oPzpbXiciXXwnW14nXSonfCJbXiJdKiIpKiQpJycnLCBwYXJhbSkpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXM6IFVuYWJsZSB0byBwYXJzZSBhcmd1bWVudHMgZm9yIFVTRVJBRERfUEFSQU1fJXM6ICclcyciICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHBhcmFtKSkKKworICAgICAgICAgICAgIyBmaWxlcy9wYXNzd2Qgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfVUlEX1RBQkxFUworICAgICAgICAgICAgIyBVc2UgdGhlIHN0YW5kYXJkIHBhc3N3ZCBsYXlvdXQ6CisgICAgICAgICAgICAjICB1c2VybmFtZTpwYXNzd29yZDp1c2VyX2lkOmdyb3VwX2lkOmNvbW1lbnQ6aG9tZV9kaXJlY3Rvcnk6bG9naW5fc2hlbGwKKyAgICAgICAgICAgICMgKHdlIHdhbnQgdG8gcHJvY2VzcyBpbiByZXZlcnNlIG9yZGVyLCBhcyAnbGFzdCBmb3VuZCcgaW4gdGhlIGxpc3Qgd2lucykKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSWYgYSBmaWVsZCBpcyBsZWZ0IGJsYW5rLCB0aGUgb3JpZ2luYWwgdmFsdWUgd2lsbCBiZSB1c2VkLiAgVGhlICd1c2VybmFtZScKKyAgICAgICAgICAgICMgZmllbGQgaXMgcmVxdWlyZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIE5vdGU6IHdlIGlnbm9yZSB0aGUgcGFzc3dvcmQgZmllbGQsIGFzIGluY2x1ZGluZyBldmVuIHRoZSBoYXNoZWQgcGFzc3dvcmQKKyAgICAgICAgICAgICMgaW4gdGhlIHVzZXJhZGQgY29tbWFuZCBtYXkgaW50cm9kdWNlIGEgc2VjdXJpdHkgaG9sZS4gIEl0J3MgYXNzdW1lZCB0aGF0CisgICAgICAgICAgICAjIGFsbCBuZXcgdXNlcnMgZ2V0IHRoZSBkZWZhdWx0ICgnKicgd2hpY2ggcHJldmVudHMgbG9naW4pIHVudGlsIHRoZSB1c2VyIGlzCisgICAgICAgICAgICAjIHNwZWNpZmljYWxseSBjb25maWd1cmVkIGJ5IHRoZSBzeXN0ZW0gYWRtaW4uCisgICAgICAgICAgICBmb3IgY29uZiBpbiBnZXRfcGFzc3dkX2xpc3QoZCkuc3BsaXQoKVs6Oi0xXToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb25mKToKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oY29uZiwgInIiKQorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5yc3RyaXAoKS5zcGxpdCgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmaWVsZFswXSA9PSB1YWFyZ3MuTE9HSU46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdWFhcmdzLnVpZCBhbmQgZmllbGRbMl0gYW5kICh1YWFyZ3MudWlkICE9IGZpZWxkWzJdKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiJXM6IENoYW5naW5nIHVzZXJuYW1lICVzJ3MgdWlkIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCB1YWFyZ3MuTE9HSU4sIHVhYXJncy51aWQsIGZpZWxkWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MudWlkID0gW2ZpZWxkWzJdLCB1YWFyZ3MudWlkXVtub3QgZmllbGRbMl1dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERldGVybWluZSB0aGUgcG9zc2libGUgZ3JvdXBuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBVbmxlc3MgdGhlIGdyb3VwIG5hbWUgKG9yIGdpZCkgaXMgc3BlY2lmaWVkLCB3ZSBhc3N1bWUgdGhhdCB0aGUgTE9HSU4gaXMgdGhlIGdyb3VwbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJ5IGRlZmF1bHQgdGhlIHN5c3RlbSBoYXMgY3JlYXRpb24gb2YgdGhlIG1hdGNoaW5nIGdyb3VwcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTbyBpZiB0aGUgaW1wbGljaXQgdXNlcm5hbWUtZ3JvdXAgY3JlYXRpb24gaXMgb24sIHRoZW4gdGhlIGltcGxpY2l0IGdyb3VwbmFtZSAoTE9HSU4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpcyB1c2VkLCBhbmQgd2UgZGlzYWJsZSB0aGUgdXNlcl9ncm91cCBvcHRpb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5ncm91cG5hbWUgPSBbdWFhcmdzLmdpZCwgdWFhcmdzLkxPR0lOXVtub3QgdWFhcmdzLmdpZCBvciB1YWFyZ3MudXNlcl9ncm91cF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBpZCA9IFt1YWFyZ3MuZ2lkLCB1YWFyZ3MuZ3JvdXBuYW1lXVtub3QgdWFhcmdzLmdpZF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuZ3JvdXBpZCA9IFtmaWVsZFszXSwgdWFhcmdzLmdyb3VwaWRdW25vdCBmaWVsZFszXV0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB1YWFyZ3MuZ2lkIG9yIHVhYXJncy5naWQgIT0gdWFhcmdzLmdyb3VwaWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1YWFyZ3MuZ3JvdXBpZCBhbmQgdWFhcmdzLmdyb3VwaWQuaXNkaWdpdCgpKSBhbmQgKHVhYXJncy5ncm91cG5hbWUgYW5kIHVhYXJncy5ncm91cG5hbWUuaXNkaWdpdCgpKSBhbmQgKHVhYXJncy5ncm91cGlkICE9IHVhYXJncy5ncm91cG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSB3YW50IHRvIGFkZCBhIGdyb3VwLCBidXQgd2UgZG9uJ3Qga25vdyBpdCdzIG5hbWUuLi4gc28gd2UgY2FuJ3QgYWRkIHRoZSBncm91cC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGFzc3VtZSB0aGUgZ3JvdXAgaGFzIHByZXZpb3VzbHkgYmVlbiBhZGRlZCBvciB3ZSdsbCBmYWlsIG9uIHRoZSBhZGR1c2VyLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vdGU6IHNwZWNpZnlpbmcgdGhlIGFjdHVhbCBnaWQgaXMgdmVyeSByYXJlIGluIE9FLCB1c3VhbGx5IHRoZSBncm91cCBuYW1lIGlzIHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyBnaWQgZm9yIGxvZ2luICVzIGZyb20gKCVzKSB0byAoJXMpLCB2ZXJpZnkgY29uZmlndXJhdGlvbiBmaWxlcyEiICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCB1YWFyZ3MuTE9HSU4sIHVhYXJncy5ncm91cG5hbWUsIHVhYXJncy5naWQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmICh1YWFyZ3MuZ3JvdXBpZCBhbmQgbm90IHVhYXJncy5ncm91cGlkLmlzZGlnaXQoKSkgYW5kIHVhYXJncy5ncm91cGlkID09IHVhYXJncy5ncm91cG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGhhdmUgYSBudW1iZXIsIHNvIHdlIGhhdmUgdG8gYWRkIGEgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGVidWcoMSwgIkFkZGluZyBncm91cCAlcyEiICUgKHVhYXJncy5ncm91cG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLmdpZCA9IHVhYXJncy5ncm91cGlkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MudXNlcl9ncm91cCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGFkZCA9IGQuZ2V0VmFyKCJHUk9VUEFERF9QQVJBTV8lcyIgJSBwa2csIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdncm91cCA9ICIlcyAlcyIgJSAoWycnLCAnIC0tc3lzdGVtJ11bdWFhcmdzLnN5c3RlbV0sIHVhYXJncy5ncm91cG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBncm91cGFkZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCAiJXMgOyAlcyIgJSAoZ3JvdXBhZGQsIG5ld2dyb3VwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgbmV3Z3JvdXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgdWFhcmdzLmdyb3VwbmFtZSBhbmQgKHVhYXJncy5ncm91cGlkIGFuZCB1YWFyZ3MuZ3JvdXBpZC5pc2RpZ2l0KCkpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgZ3JvdXAgbmFtZSBhbmQgYSBncm91cCBudW1iZXIgdG8gYXNzaWduIGl0IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiQWRkaW5nIGdyb3VwICVzICBnaWQgKCVzKSEiICUgKHVhYXJncy5ncm91cG5hbWUsIHVhYXJncy5ncm91cGlkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5naWQgPSB1YWFyZ3MuZ3JvdXBpZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFhcmdzLnVzZXJfZ3JvdXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBhZGQgPSBkLmdldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Z3JvdXAgPSAiLWcgJXMgJXMiICUgKHVhYXJncy5naWQsIHVhYXJncy5ncm91cG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBncm91cGFkZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiR1JPVVBBRERfUEFSQU1fJXMiICUgcGtnLCAiJXMgOyAlcyIgJSAoZ3JvdXBhZGQsIG5ld2dyb3VwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5zZXRWYXIoIkdST1VQQUREX1BBUkFNXyVzIiAlIHBrZywgbmV3Z3JvdXApCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuY29tbWVudCA9IFsiJyVzJyIgJSBmaWVsZFs0XSwgdWFhcmdzLmNvbW1lbnRdW25vdCBmaWVsZFs0XV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1YWFyZ3MuaG9tZV9kaXIgPSBbZmllbGRbNV0sIHVhYXJncy5ob21lX2Rpcl1bbm90IGZpZWxkWzVdXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhYXJncy5zaGVsbCA9IFtmaWVsZFs2XSwgdWFhcmdzLnNoZWxsXVtub3QgZmllbGRbNl1dCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgIyBTaG91bGQgYmUgYW4gZXJyb3IgaWYgYSBzcGVjaWZpYyBvcHRpb24gaXMgc2V0Li4uCisgICAgICAgICAgICBpZiBkLmdldFZhcignVVNFUkFERF9FUlJPUl9EWU5BTUlDJywgVHJ1ZSkgPT0gJzEnIGFuZCBub3QgKCh1YWFyZ3MudWlkIGFuZCB1YWFyZ3MudWlkLmlzZGlnaXQoKSkgYW5kIHVhYXJncy5naWQpOgorICAgICAgICAgICAgICAgICNiYi5lcnJvcigiU2tpcHBpbmcgcmVjaXBlICVzLCBwYWNrYWdlICVzIHdoaWNoIGFkZHMgdXNlcm5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyB1aWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCAgcGtnLCB1YWFyZ3MuTE9HSU4pKQorICAgICAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gJXM6IFVzZXJuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgdWlkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgcGtnLCB1YWFyZ3MuTE9HSU4pKQorCisgICAgICAgICAgICAjIFJlY29uc3RydWN0IHRoZSBhcmdzLi4uCisgICAgICAgICAgICBuZXdwYXJhbSAgPSBbJycsICcgLS1kZWZhdWx0cyddW3VhYXJncy5kZWZhdWx0c10KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWJhc2UtZGlyICVzJyAlIHVhYXJncy5iYXNlX2Rpcl1bdWFhcmdzLmJhc2VfZGlyICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1jb21tZW50ICVzJyAlIHVhYXJncy5jb21tZW50XVt1YWFyZ3MuY29tbWVudCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0taG9tZS1kaXIgJXMnICUgdWFhcmdzLmhvbWVfZGlyXVt1YWFyZ3MuaG9tZV9kaXIgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWV4cGlyZWRhdGEgJXMnICUgdWFhcmdzLmV4cGlyZWRhdGVdW3VhYXJncy5leHBpcmVkYXRlICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1pbmFjdGl2ZSAlcycgJSB1YWFyZ3MuaW5hY3RpdmVdW3VhYXJncy5pbmFjdGl2ZSAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tZ2lkICVzJyAlIHVhYXJncy5naWRdW3VhYXJncy5naWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWdyb3VwcyAlcycgJSB1YWFyZ3MuZ3JvdXBzXVt1YWFyZ3MuZ3JvdXBzICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1za2VsICVzJyAlIHVhYXJncy5za2VsXVt1YWFyZ3Muc2tlbCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0ta2V5ICVzJyAlIHVhYXJncy5rZXldW3VhYXJncy5rZXkgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vLWxvZy1pbml0J11bdWFhcmdzLm5vX2xvZ19pbml0XQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tY3JlYXRlLWhvbWUnXVt1YWFyZ3MuY3JlYXRlX2hvbWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1uby1jcmVhdGUtaG9tZSddW3VhYXJncy5ub19jcmVhdGVfaG9tZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vLXVzZXItZ3JvdXAnXVt1YWFyZ3Mubm9fdXNlcl9ncm91cF0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLW5vbi11bmlxdWUnXVt1YWFyZ3Mubm9uX3VuaXF1ZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXBhc3N3b3JkICVzJyAlIHVhYXJncy5wYXNzd29yZF1bdWFhcmdzLnBhc3N3b3JkICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1yb290ICVzJyAlIHVhYXJncy5yb290XVt1YWFyZ3Mucm9vdCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tc3lzdGVtJ11bdWFhcmdzLnN5c3RlbV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXNoZWxsICVzJyAlIHVhYXJncy5zaGVsbF1bdWFhcmdzLnNoZWxsICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS11aWQgJXMnICUgdWFhcmdzLnVpZF1bdWFhcmdzLnVpZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tdXNlci1ncm91cCddW3VhYXJncy51c2VyX2dyb3VwXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gJyAlcycgJSB1YWFyZ3MuTE9HSU4KKworICAgICAgICAgICAgbmV3cGFyYW1zLmFwcGVuZChuZXdwYXJhbSkKKworICAgICAgICByZXR1cm4gIiA7Ii5qb2luKG5ld3BhcmFtcykuc3RyaXAoKQorCisgICAgIyBXZSBwYXJzZSBhbmQgcmV3cml0ZSB0aGUgZ3JvdXBhZGQgY29tcG9uZW50cworICAgIGRlZiByZXdyaXRlX2dyb3VwYWRkKHBhcmFtcyk6CisgICAgICAgICMgVGhlIGZvbGxvd2luZyBjb21lcyBmcm9tIC0taGVscCBvbiBncm91cGFkZCBmcm9tIHNoYWRvdworICAgICAgICBwYXJzZXIgPSBteUFyZ3VtZW50UGFyc2VyKHByb2c9J2dyb3VwYWRkJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLWYiLCAiLS1mb3JjZSIsIGhlbHA9ImV4aXQgc3VjY2Vzc2Z1bGx5IGlmIHRoZSBncm91cCBhbHJlYWR5IGV4aXN0cywgYW5kIGNhbmNlbCAtZyBpZiB0aGUgR0lEIGlzIGFscmVhZHkgdXNlZCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1nIiwgIi0tZ2lkIiwgbWV0YXZhcj0iR0lEIiwgaGVscD0idXNlIEdJRCBmb3IgdGhlIG5ldyBncm91cCIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1LIiwgIi0ta2V5IiwgbWV0YXZhcj0iS0VZPVZBTFVFIiwgaGVscD0ib3ZlcnJpZGUgL2V0Yy9sb2dpbi5kZWZzIGRlZmF1bHRzIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1ub24tdW5pcXVlIiwgaGVscD0iYWxsb3cgdG8gY3JlYXRlIGdyb3VwcyB3aXRoIGR1cGxpY2F0ZSAobm9uLXVuaXF1ZSkgR0lEIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLXAiLCAiLS1wYXNzd29yZCIsIG1ldGF2YXI9IlBBU1NXT1JEIiwgaGVscD0idXNlIHRoaXMgZW5jcnlwdGVkIHBhc3N3b3JkIGZvciB0aGUgbmV3IGdyb3VwIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLVIiLCAiLS1yb290IiwgbWV0YXZhcj0iQ0hST09UX0RJUiIsIGhlbHA9ImRpcmVjdG9yeSB0byBjaHJvb3QgaW50byIpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoIi1yIiwgIi0tc3lzdGVtIiwgaGVscD0iY3JlYXRlIGEgc3lzdGVtIGFjY291bnQiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCJHUk9VUCIsIGhlbHA9Ikdyb3VwIG5hbWUgb2YgdGhlIG5ldyBncm91cCIpCisKKyAgICAgICAgIyBSZXR1cm4gYSBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFzZWQgb24gZWl0aGVyIHRoZSBkZWZhdWx0CisgICAgICAgICMgZmlsZXMvZ3JvdXAgb3IgdGhlIGNvbnRlbnRzIG9mIFVTRVJBRERfR0lEX1RBQkxFUworICAgICAgICAjIHBhdGhzIGFyZSByZXN1bHZlZCB2aWEgQkJQQVRICisgICAgICAgIGRlZiBnZXRfZ3JvdXBfbGlzdChkKToKKyAgICAgICAgICAgIHN0ciA9ICIiCisgICAgICAgICAgICBiYnBhdGggPSBkLmdldFZhcignQkJQQVRIJywgVHJ1ZSkKKyAgICAgICAgICAgIGdyb3VwX3RhYmxlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX0dJRF9UQUJMRVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IGdyb3VwX3RhYmxlczoKKyAgICAgICAgICAgICAgICBncm91cF90YWJsZXMgPSAnZmlsZXMvZ3JvdXAnCisgICAgICAgICAgICBmb3IgY29uZl9maWxlIGluIGdyb3VwX3RhYmxlcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHN0ciArPSAiICVzIiAlIGJiLnV0aWxzLndoaWNoKGJicGF0aCwgY29uZl9maWxlKQorICAgICAgICAgICAgcmV0dXJuIHN0cgorCisgICAgICAgIG5ld3BhcmFtcyA9IFtdCisgICAgICAgIGZvciBwYXJhbSBpbiByZS5zcGxpdCgnJydbIFx0XSo7WyBcdF0qKD89KD86W14nIl18J1teJ10qJ3wiW14iXSoiKSokKScnJywgcGFyYW1zKToKKyAgICAgICAgICAgIHBhcmFtID0gcGFyYW0uc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IHBhcmFtOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSBwcm9jZXNzaW5nIG11bHRpcGxlIGxpbmVzLCB3ZSBjb3VsZCBoYXZlIGxlZnQgb3ZlciB2YWx1ZXMgaGVyZS4uLgorICAgICAgICAgICAgICAgIGdhYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKHJlLnNwbGl0KCcnJ1sgXHRdKig/PSg/OlteJyJdfCdbXiddKid8IlteIl0qIikqJCknJycsIHBhcmFtKSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlczogVW5hYmxlIHRvIHBhcnNlIGFyZ3VtZW50cyBmb3IgR1JPVVBBRERfUEFSQU1fJXM6ICclcyciICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIHBhcmFtKSkKKworICAgICAgICAgICAgIyBOZWVkIHRvIGl0ZXJhdGUgb3ZlciBsYXllcnMgYW5kIG9wZW4gdGhlIHJpZ2h0IGZpbGUocykKKyAgICAgICAgICAgICMgVXNlIHRoZSBzdGFuZGFyZCBncm91cCBsYXlvdXQ6CisgICAgICAgICAgICAjICBncm91cG5hbWU6cGFzc3dvcmQ6Z3JvdXBfaWQ6Z3JvdXBfbWVtYmVycworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZiBhIGZpZWxkIGlzIGxlZnQgYmxhbmssIHRoZSBvcmlnaW5hbCB2YWx1ZSB3aWxsIGJlIHVzZWQuIFRoZSAnZ3JvdXBuYW1lJyBmaWVsZAorICAgICAgICAgICAgIyBpcyByZXF1aXJlZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTm90ZTogc2ltaWxhciB0byB0aGUgcGFzc3dkIGZpbGUsIHRoZSAncGFzc3dvcmQnIGZpbGVkIGlzIGlnbm9yZWQKKyAgICAgICAgICAgICMgTm90ZTogZ3JvdXBfbWVtYmVycyBpcyBpZ25vcmVkLCBncm91cCBtZW1iZXJzIG11c3QgYmUgY29uZmlndXJlZCB3aXRoIHRoZSBHUk9VUE1FTVNfUEFSQU0KKyAgICAgICAgICAgIGZvciBjb25mIGluIGdldF9ncm91cF9saXN0KGQpLnNwbGl0KClbOjotMV06CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29uZik6CisgICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGNvbmYsICJyIikKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUucnN0cmlwKCkuc3BsaXQoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmllbGRbMF0gPT0gZ2FhcmdzLkdST1VQIGFuZCBmaWVsZFsyXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBnYWFyZ3MuZ2lkIGFuZCAoZ2FhcmdzLmdpZCAhPSBmaWVsZFsyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIiVzOiBDaGFuZ2luZyBncm91cG5hbWUgJXMncyBnaWQgZnJvbSAoJXMpIHRvICglcyksIHZlcmlmeSBjb25maWd1cmF0aW9uIGZpbGVzISIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGdhYXJncy5HUk9VUCwgZ2FhcmdzLmdpZCwgZmllbGRbMl0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhYXJncy5naWQgPSBmaWVsZFsyXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGQuZ2V0VmFyKCdVU0VSQUREX0VSUk9SX0RZTkFNSUMnLCBUcnVlKSA9PSAnMScgYW5kIG5vdCAoZ2FhcmdzLmdpZCBhbmQgZ2FhcmdzLmdpZC5pc2RpZ2l0KCkpOgorICAgICAgICAgICAgICAgICNiYi5lcnJvcigiU2tpcHBpbmcgcmVjaXBlICVzLCBwYWNrYWdlICVzIHdoaWNoIGFkZHMgZ3JvdXBuYW1lICVzIGRvZXMgbm90IGhhdmUgYSBzdGF0aWMgZ2lkIGRlZmluZWQuIiAlIChkLmdldFZhcignUE4nLCBUcnVlKSwgIHBrZywgZ2FhcmdzLkdST1VQKSkKKyAgICAgICAgICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyAtICVzOiBHcm91cG5hbWUgJXMgZG9lcyBub3QgaGF2ZSBhIHN0YXRpYyBnaWQgZGVmaW5lZC4iICUgKGQuZ2V0VmFyKCdQTicsIFRydWUpLCBwa2csIGdhYXJncy5HUk9VUCkpCisKKyAgICAgICAgICAgICMgUmVjb25zdHJ1Y3QgdGhlIGFyZ3MuLi4KKyAgICAgICAgICAgIG5ld3BhcmFtICA9IFsnJywgJyAtLWZvcmNlJ11bZ2FhcmdzLmZvcmNlXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tZ2lkICVzJyAlIGdhYXJncy5naWRdW2dhYXJncy5naWQgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLWtleSAlcycgJSBnYWFyZ3Mua2V5XVtnYWFyZ3Mua2V5ICE9IE5vbmVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1ub24tdW5pcXVlJ11bZ2FhcmdzLm5vbl91bmlxdWVdCisgICAgICAgICAgICBuZXdwYXJhbSArPSBbJycsICcgLS1wYXNzd29yZCAlcycgJSBnYWFyZ3MucGFzc3dvcmRdW2dhYXJncy5wYXNzd29yZCAhPSBOb25lXQorICAgICAgICAgICAgbmV3cGFyYW0gKz0gWycnLCAnIC0tcm9vdCAlcycgJSBnYWFyZ3Mucm9vdF1bZ2FhcmdzLnJvb3QgIT0gTm9uZV0KKyAgICAgICAgICAgIG5ld3BhcmFtICs9IFsnJywgJyAtLXN5c3RlbSddW2dhYXJncy5zeXN0ZW1dCisgICAgICAgICAgICBuZXdwYXJhbSArPSAnICVzJyAlIGdhYXJncy5HUk9VUAorCisgICAgICAgICAgICBuZXdwYXJhbXMuYXBwZW5kKG5ld3BhcmFtKQorCisgICAgICAgIHJldHVybiAiIDsiLmpvaW4obmV3cGFyYW1zKS5zdHJpcCgpCisKKyAgICAjIExvYWQgYW5kIHByb2Nlc3MgdGhlIHVzZXJzIGFuZCBncm91cHMsIHJld3JpdGluZyB0aGUgYWRkdXNlci9hZGRncm91cCBwYXJhbXMKKyAgICB1c2VyYWRkX3BhY2thZ2VzID0gZC5nZXRWYXIoJ1VTRVJBRERfUEFDS0FHRVMnLCBUcnVlKQorCisgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICMgR3JvdXBtZW1zIGRvZXNuJ3QgaGF2ZSBhbnl0aGluZyB3ZSBtaWdodCB3YW50IHRvIGNoYW5nZSwgc28gc2ltcGx5IHZhbGlkYXRpbmcKKyAgICAgICAgIyBpcyBhIGJpdCBvZiBhIHdhc3RlIC0tIG9ubHkgcHJvY2VzcyB1c2VyYWRkL2dyb3VwYWRkCisgICAgICAgIHVzZXJhZGRfcGFyYW0gPSBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpCisgICAgICAgIGlmIHVzZXJhZGRfcGFyYW06CisgICAgICAgICAgICAjYmIud2FybigiQmVmb3JlOiAnVVNFUkFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIHVzZXJhZGRfcGFyYW0pKQorICAgICAgICAgICAgZC5zZXRWYXIoJ1VTRVJBRERfUEFSQU1fJXMnICUgcGtnLCByZXdyaXRlX3VzZXJhZGQodXNlcmFkZF9wYXJhbSkpCisgICAgICAgICAgICAjYmIud2FybigiQWZ0ZXI6ICAnVVNFUkFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIGQuZ2V0VmFyKCdVU0VSQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkpKQorCisgICAgICAgIGdyb3VwYWRkX3BhcmFtID0gZC5nZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgZ3JvdXBhZGRfcGFyYW06CisgICAgICAgICAgICAjYmIud2FybigiQmVmb3JlOiAnR1JPVVBBRERfUEFSQU1fJXMnIC0gJyVzJyIgJSAocGtnLCBncm91cGFkZF9wYXJhbSkpCisgICAgICAgICAgICBkLnNldFZhcignR1JPVVBBRERfUEFSQU1fJXMnICUgcGtnLCByZXdyaXRlX2dyb3VwYWRkKGdyb3VwYWRkX3BhcmFtKSkKKyAgICAgICAgICAgICNiYi53YXJuKCJBZnRlcjogICdHUk9VUEFERF9QQVJBTV8lcycgLSAnJXMnIiAlIChwa2csIGQuZ2V0VmFyKCdHUk9VUEFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpKSkKKworCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCkgXAorICAgICAgICBhbmQgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZScsIGQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB1cGRhdGVfdXNlcmFkZF9zdGF0aWNfY29uZmlnKGQpCisgICAgICAgIGV4Y2VwdCBiYi5idWlsZC5GdW5jRmFpbGVkIGFzIGY6CisgICAgICAgICAgICBiYi5kZWJ1ZygxLCAiU2tpcHBpbmcgcmVjaXBlICVzOiAlcyIgJSAoZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIGYpKQorICAgICAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoZikKK30KZGlmZiAtLWdpdCBhL21ldGEvY2xhc3Nlcy91c2VyYWRkLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzdlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZC5iYmNsYXNzCkBAIC0wLDAgKzEsMjIzIEBACitpbmhlcml0IHVzZXJhZGRfYmFzZQorCisjIGJhc2UtcGFzc3dkLWNyb3NzIHByb3ZpZGVzIHRoZSBkZWZhdWx0IHBhc3N3ZCBhbmQgZ3JvdXAgZmlsZXMgaW4gdGhlCisjIHRhcmdldCBzeXNyb290LCBhbmQgc2hhZG93IC1uYXRpdmUgYW5kIC1zeXNyb290IHByb3ZpZGUgdGhlIHV0aWxpdGllcworIyBhbmQgc3VwcG9ydCBmaWxlcyBuZWVkZWQgdG8gYWRkIGFuZCBtb2RpZnkgdXNlciBhbmQgZ3JvdXAgYWNjb3VudHMKK0RFUEVORFNfYXBwZW5kID0gIiR7VVNFUkFERERFUEVORFN9IgorVVNFUkFERERFUEVORFMgPSAiIGJhc2UtZmlsZXMgc2hhZG93LW5hdGl2ZSBzaGFkb3ctc3lzcm9vdCBzaGFkb3ciCitVU0VSQUREREVQRU5EU19jbGFzcy1jcm9zcyA9ICIiCitVU0VSQUREREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorVVNFUkFERERFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBUaGlzIHByZWluc3RhbGwgZnVuY3Rpb24gY2FuIGJlIHJ1biBpbiBmb3VyIGRpZmZlcmVudCBjb250ZXh0czoKKyMKKyMgYSkgQmVmb3JlIGRvX2luc3RhbGwKKyMgYikgQXQgZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSB3aGVuIGluc3RhbGxpbmcgZnJvbSBzc3RhdGUgcGFja2FnZXMKKyMgYykgQXMgdGhlIHByZWluc3Qgc2NyaXB0IGluIHRoZSB0YXJnZXQgcGFja2FnZSBhdCBkb19yb290ZnMgdGltZQorIyBkKSBBcyB0aGUgcHJlaW5zdCBzY3JpcHQgaW4gdGhlIHRhcmdldCBwYWNrYWdlIG9uIGRldmljZSBhcyBhIHBhY2thZ2UgdXBncmFkZQorIwordXNlcmFkZF9wcmVpbnN0ICgpIHsKK09QVD0iIgorU1lTUk9PVD0iIgorCitpZiB0ZXN0ICJ4JEQiICE9ICJ4IjsgdGhlbgorCSMgSW5zdGFsbGluZyBpbnRvIGEgc3lzcm9vdAorCVNZU1JPT1Q9IiREIgorCU9QVD0iLS1yb290ICREIgorCisJIyBNYWtlIHN1cmUgbG9naW4uZGVmcyBpcyB0aGVyZSwgdGhpcyBpcyB0byBtYWtlIGRlYmlhbiBwYWNrYWdlIGJhY2tlbmQgd29yaworCSMgY29ycmVjdGx5IHdoaWxlIGRvaW5nIHJvb3Rmcy4KKwkjIFRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiAvZXRjL2xvZ2luLmRlZnMgaXMgdHJlYXRlZCBhcyBhIGNvbmZpZyBmaWxlIGZvcgorCSMgc2hhZG93IHBhY2thZ2UsIHRoZW4gd2hpbGUgcGVyZm9ybWluZyBwcmVpbnN0cyBmb3IgcGFja2FnZXMgdGhhdCBkZXBlbmQgb24KKwkjIHNoYWRvdywgdGhlcmUgbWlnaHQgb25seSBiZSAvZXRjL2xvZ2luLmRlZi5kcGtnLW5ldyB0aGVyZSBpbiByb290IGZpbGVzeXN0ZW0uCisJaWYgWyAhIC1lICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzIC1hIC1lICREJHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzLmRwa2ctbmV3IF07IHRoZW4KKwkgICAgY3AgJEQke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMuZHBrZy1uZXcgJEQke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlmaQorCisJIyB1c2VyL2dyb3VwIGxvb2t1cHMgc2hvdWxkIG1hdGNoIHVzZXJhZGQvZ3JvdXBhZGQgLS1yb290CisJZXhwb3J0IFBTRVVET19QQVNTV0Q9IiRTWVNST09UOiR7U1RBR0lOR19ESVJfTkFUSVZFfSIKK2ZpCisKKyMgSWYgd2UncmUgbm90IGRvaW5nIGEgc3BlY2lhbCBTU1RBVEUvU1lTUk9PVCBpbnN0YWxsCisjIHRoZW4gc2V0IHRoZSB2YWx1ZXMsIG90aGVyd2lzZSB1c2UgdGhlIGVudmlyb25tZW50CitpZiB0ZXN0ICJ4JFVBX1NZU1JPT1QiID0gIngiOyB0aGVuCisJIyBJbnN0YWxsaW5nIG9udG8gYSB0YXJnZXQKKwkjIEFkZCBncm91cHMgYW5kIHVzZXJzIGRlZmluZWQgb25seSBmb3IgdGhpcyBwYWNrYWdlCisJR1JPVVBBRERfUEFSQU09IiR7R1JPVVBBRERfUEFSQU19IgorCVVTRVJBRERfUEFSQU09IiR7VVNFUkFERF9QQVJBTX0iCisJR1JPVVBNRU1TX1BBUkFNPSIke0dST1VQTUVNU19QQVJBTX0iCitmaQorCisjIFBlcmZvcm0gZ3JvdXAgYWRkaXRpb25zIGZpcnN0LCBzaW5jZSB1c2VyIGFkZGl0aW9ucyBtYXkgZGVwZW5kCisjIG9uIHRoZXNlIGdyb3VwcyBleGlzdGluZworaWYgdGVzdCAieCRHUk9VUEFERF9QQVJBTSIgIT0gIngiOyB0aGVuCisJZWNobyAiUnVubmluZyBncm91cGFkZCBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgZ3JvdXBhZGQgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRHUk9VUEFERF9QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDFgCisJcmVtYWluaW5nPWBlY2hvICIkR1JPVVBBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV9ncm91cGFkZCAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpIAorCitpZiB0ZXN0ICJ4JFVTRVJBRERfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgdXNlcmFkZCBjb21tYW5kcy4uLiIKKwkjIEludm9rZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcmFkZCBmb3IgcGFyYW1ldGVyIGxpc3RzCisJIyBzZXBhcmF0ZWQgYnkgJzsnCisJb3B0cz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJFVTRVJBRERfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAyLWAKKwl3aGlsZSB0ZXN0ICJ4JG9wdHMiICE9ICJ4IjsgZG8KKwkJcGVyZm9ybV91c2VyYWRkICIkU1lTUk9PVCIgIiRPUFQgJG9wdHMiIDEwCisJCWlmIHRlc3QgIngkb3B0cyIgPSAieCRyZW1haW5pbmciOyB0aGVuCisJCQlicmVhaworCQlmaQorCQlvcHRzPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMWAKKwkJcmVtYWluaW5nPWBlY2hvICIkcmVtYWluaW5nIiB8IGN1dCAtZCAnOycgLWYgMi1gCisJZG9uZQorZmkKKworaWYgdGVzdCAieCRHUk9VUE1FTVNfUEFSQU0iICE9ICJ4IjsgdGhlbgorCWVjaG8gIlJ1bm5pbmcgZ3JvdXBtZW1zIGNvbW1hbmRzLi4uIgorCSMgSW52b2tlIG11bHRpcGxlIGluc3RhbmNlcyBvZiBncm91cG1lbXMgZm9yIHBhcmFtZXRlciBsaXN0cworCSMgc2VwYXJhdGVkIGJ5ICc7JworCW9wdHM9YGVjaG8gIiRHUk9VUE1FTVNfUEFSQU0iIHwgY3V0IC1kICc7JyAtZiAxYAorCXJlbWFpbmluZz1gZWNobyAiJEdST1VQTUVNU19QQVJBTSIgfCBjdXQgLWQgJzsnIC1mIDItYAorCXdoaWxlIHRlc3QgIngkb3B0cyIgIT0gIngiOyBkbworCQlwZXJmb3JtX2dyb3VwbWVtcyAiJFNZU1JPT1QiICIkT1BUICRvcHRzIiAxMAorCQlpZiB0ZXN0ICJ4JG9wdHMiID0gIngkcmVtYWluaW5nIjsgdGhlbgorCQkJYnJlYWsKKwkJZmkKKwkJb3B0cz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDFgCisJCXJlbWFpbmluZz1gZWNobyAiJHJlbWFpbmluZyIgfCBjdXQgLWQgJzsnIC1mIDItYAorCWRvbmUKK2ZpCit9CisKK3VzZXJhZGRfc3lzcm9vdCAoKSB7CisJIyBQc2V1ZG8gbWF5IChkb19pbnN0YWxsKSBvciBtYXkgbm90IChkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lKSBiZSBydW5uaW5nIAorCSMgYXQgdGhpcyBwb2ludCBzbyB3ZSdyZSBleHBsaWNpdCBhYm91dCB0aGUgZW52aXJvbm1lbnQgc28gcHNldWRvIGNhbiBsb2FkIGlmIAorCSMgbm90IGFscmVhZHkgcHJlc2VudC4KKwlleHBvcnQgUFNFVURPPSIke0ZBS0VST09URU5WfSBQU0VVRE9fTE9DQUxTVEFURURJUj0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2xvY2Fsc3RhdGVkaXJ9L3BzZXVkbyAke1NUQUdJTkdfRElSX05BVElWRX0ke2JpbmRpcn0vcHNldWRvIgorCisJIyBFeHBsaWNpdGx5IHNldCAkRCBzaW5jZSBpdCBpc24ndCBzZXQgdG8gYW55dGhpbmcKKwkjIGJlZm9yZSBkb19pbnN0YWxsCisJRD0ke1NUQUdJTkdfRElSX1RBUkdFVH0KKworCSMgQWRkIGdyb3VwcyBhbmQgdXNlcnMgZGVmaW5lZCBmb3IgYWxsIHJlY2lwZSBwYWNrYWdlcworCUdST1VQQUREX1BBUkFNPSIke0BnZXRfYWxsX2NtZF9wYXJhbXMoZCwgJ2dyb3VwYWRkJyl9IgorCVVTRVJBRERfUEFSQU09IiR7QGdldF9hbGxfY21kX3BhcmFtcyhkLCAndXNlcmFkZCcpfSIKKwlHUk9VUE1FTVNfUEFSQU09IiR7QGdldF9hbGxfY21kX3BhcmFtcyhkLCAnZ3JvdXBtZW1zJyl9IgorCisJIyBUZWxsIHRoZSBzeXN0ZW0gdG8gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJzCisJVUFfU1lTUk9PVD0xCisKKwl1c2VyYWRkX3ByZWluc3QKK30KKwordXNlcmFkZF9zeXNyb290X3NzdGF0ZSAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBhY2thZ2Vfc2V0c2NlbmUiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJdXNlcmFkZF9zeXNyb290CisJZmkKK30KKworZG9faW5zdGFsbFtwcmVmdW5jc10gKz0gIiR7U1lTUk9PVEZVTkN9IgorU1lTUk9PVEZVTkMgPSAidXNlcmFkZF9zeXNyb290IgorU1lTUk9PVEZVTkNfY2xhc3MtY3Jvc3MgPSAiIgorU1lTUk9PVEZVTkNfY2xhc3MtbmF0aXZlID0gIiIKK1NZU1JPT1RGVU5DX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitTU1RBVEVQUkVJTlNURlVOQ1MgKz0gIiR7U1lTUk9PVFBPU1RGVU5DfSIKK1NZU1JPT1RQT1NURlVOQyA9ICJ1c2VyYWRkX3N5c3Jvb3Rfc3N0YXRlIgorU1lTUk9PVFBPU1RGVU5DX2NsYXNzLWNyb3NzID0gIiIKK1NZU1JPT1RQT1NURlVOQ19jbGFzcy1uYXRpdmUgPSAiIgorU1lTUk9PVFBPU1RGVU5DX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1VTRVJBRERTRVRTQ0VORURFUFMgPSAiJHtNTFBSRUZJWH1iYXNlLXBhc3N3ZDpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIHBzZXVkby1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSBzaGFkb3ctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgJHtNTFBSRUZJWH1zaGFkb3ctc3lzcm9vdDpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgorVVNFUkFERFNFVFNDRU5FREVQU19jbGFzcy1jcm9zcyA9ICIiCitVU0VSQUREU0VUU0NFTkVERVBTX2NsYXNzLW5hdGl2ZSA9ICIiCitVU0VSQUREU0VUU0NFTkVERVBTX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitkb19wYWNrYWdlX3NldHNjZW5lW2RlcGVuZHNdICs9ICIke1VTRVJBRERTRVRTQ0VORURFUFN9IgorZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZVtkZXBlbmRzXSArPSAiJHtVU0VSQUREU0VUU0NFTkVERVBTfSIKKworIyBSZWNpcGUgcGFyc2UtdGltZSBzYW5pdHkgY2hlY2tzCitkZWYgdXBkYXRlX3VzZXJhZGRfYWZ0ZXJfcGFyc2UoZCk6CisgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkKKworICAgIGlmIG5vdCB1c2VyYWRkX3BhY2thZ2VzOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCIlcyBpbmhlcml0cyB1c2VyYWRkIGJ1dCBkb2Vzbid0IHNldCBVU0VSQUREX1BBQ0tBR0VTIiAlIGQuZ2V0VmFyKCdGSUxFJywgRmFsc2UpKQorCisgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIGlmIG5vdCBkLmdldFZhcignVVNFUkFERF9QQVJBTV8lcycgJSBwa2csIFRydWUpIGFuZCBub3QgZC5nZXRWYXIoJ0dST1VQQUREX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSkgYW5kIG5vdCBkLmdldFZhcignR1JPVVBNRU1TX1BBUkFNXyVzJyAlIHBrZywgVHJ1ZSk6CisgICAgICAgICAgICBiYi5mYXRhbCgiJXMgaW5oZXJpdHMgdXNlcmFkZCBidXQgZG9lc24ndCBzZXQgVVNFUkFERF9QQVJBTSwgR1JPVVBBRERfUEFSQU0gb3IgR1JPVVBNRU1TX1BBUkFNIGZvciBwYWNrYWdlICVzIiAlIChkLmdldFZhcignRklMRScsIEZhbHNlKSwgcGtnKSkKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmVzZGsnLCBkKSBcCisgICAgICAgIGFuZCBub3QgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJywgZCk6CisgICAgICAgIHVwZGF0ZV91c2VyYWRkX2FmdGVyX3BhcnNlKGQpCit9CisKKyMgUmV0dXJuIGEgc2luZ2xlIFtHUk9VUHxVU0VSXUFERF9QQVJBTSBmb3JtYXR0ZWQgc3RyaW5nIHdoaWNoIGluY2x1ZGVzIHRoZQorIyBbZ3JvdXB8dXNlcl1hZGQgcGFyYW1ldGVycyBmb3IgYWxsIFVTRVJBRERfUEFDS0FHRVMgaW4gdGhpcyByZWNpcGUKK2RlZiBnZXRfYWxsX2NtZF9wYXJhbXMoZCwgY21kX3R5cGUpOgorICAgIGltcG9ydCBzdHJpbmcKKyAgICAKKyAgICBwYXJhbV90eXBlID0gY21kX3R5cGUudXBwZXIoKSArICJfUEFSQU1fJXMiCisgICAgcGFyYW1zID0gW10KKworICAgIHVzZXJhZGRfcGFja2FnZXMgPSBkLmdldFZhcignVVNFUkFERF9QQUNLQUdFUycsIFRydWUpIG9yICIiCisgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgIHBhcmFtID0gZC5nZXRWYXIocGFyYW1fdHlwZSAlIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcGFyYW06CisgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKHBhcmFtKQorCisgICAgcmV0dXJuICI7ICIuam9pbihwYXJhbXMpCisKKyMgQWRkcyB0aGUgcHJlaW5zdCBzY3JpcHQgaW50byBnZW5lcmF0ZWQgcGFja2FnZXMKK2Zha2Vyb290IHB5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkZWYgdXBkYXRlX3VzZXJhZGRfcGFja2FnZShwa2cpOgorICAgICAgICBiYi5kZWJ1ZygxLCAnYWRkaW5nIHVzZXIvZ3JvdXAgY2FsbHMgdG8gcHJlaW5zdCBmb3IgJXMnICUgcGtnKQorCisgICAgICAgICIiIgorICAgICAgICB1c2VyYWRkIHByZWluc3QgaXMgYXBwZW5kZWQgaGVyZSBiZWNhdXNlIHBrZ19wcmVpbnN0IG1heSBiZQorICAgICAgICByZXF1aXJlZCB0byBleGVjdXRlIG9uIHRoZSB0YXJnZXQuIE5vdCBkb2luZyBzbyBtYXkgY2F1c2UKKyAgICAgICAgdXNlcmFkZCBwcmVpbnN0IHRvIGJlIGludm9rZWQgdHdpY2UsIGNhdXNpbmcgdW53YW50ZWQgd2FybmluZ3MuCisgICAgICAgICIiIgorICAgICAgICBwcmVpbnN0ID0gZC5nZXRWYXIoJ3BrZ19wcmVpbnN0XyVzJyAlIHBrZywgVHJ1ZSkgb3IgZC5nZXRWYXIoJ3BrZ19wcmVpbnN0JywgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHByZWluc3Q6CisgICAgICAgICAgICBwcmVpbnN0ID0gJyMhL2Jpbi9zaFxuJworICAgICAgICBwcmVpbnN0ICs9ICdiYm5vdGUgKCkge1xuXHRlY2hvICJOT1RFOiAkKiJcbn1cbicKKyAgICAgICAgcHJlaW5zdCArPSAnYmJ3YXJuICgpIHtcblx0ZWNobyAiV0FSTklORzogJCoiXG59XG4nCisgICAgICAgIHByZWluc3QgKz0gJ2JiZmF0YWwgKCkge1xuXHRlY2hvICJFUlJPUjogJCoiXG5cdGV4aXQgMVxufVxuJworICAgICAgICBwcmVpbnN0ICs9ICdwZXJmb3JtX2dyb3VwYWRkICgpIHtcbiVzfVxuJyAlIGQuZ2V0VmFyKCdwZXJmb3JtX2dyb3VwYWRkJywgVHJ1ZSkKKyAgICAgICAgcHJlaW5zdCArPSAncGVyZm9ybV91c2VyYWRkICgpIHtcbiVzfVxuJyAlIGQuZ2V0VmFyKCdwZXJmb3JtX3VzZXJhZGQnLCBUcnVlKQorICAgICAgICBwcmVpbnN0ICs9ICdwZXJmb3JtX2dyb3VwbWVtcyAoKSB7XG4lc31cbicgJSBkLmdldFZhcigncGVyZm9ybV9ncm91cG1lbXMnLCBUcnVlKQorICAgICAgICBwcmVpbnN0ICs9IGQuZ2V0VmFyKCd1c2VyYWRkX3ByZWluc3QnLCBUcnVlKQorICAgICAgICBkLnNldFZhcigncGtnX3ByZWluc3RfJXMnICUgcGtnLCBwcmVpbnN0KQorCisgICAgICAgICMgUkRFUEVORFMgc2V0dXAKKyAgICAgICAgcmRlcGVuZHMgPSBkLmdldFZhcigiUkRFUEVORFNfJXMiICUgcGtnLCBUcnVlKSBvciAiIgorICAgICAgICByZGVwZW5kcyArPSAnICcgKyBkLmdldFZhcignTUxQUkVGSVgnLCBGYWxzZSkgKyAnYmFzZS1wYXNzd2QnCisgICAgICAgIHJkZXBlbmRzICs9ICcgJyArIGQuZ2V0VmFyKCdNTFBSRUZJWCcsIEZhbHNlKSArICdzaGFkb3cnCisgICAgICAgICMgYmFzZS1maWxlcyBpcyB3aGVyZSB0aGUgZGVmYXVsdCAvZXRjL3NrZWwgaXMgcGFja2FnZWQKKyAgICAgICAgcmRlcGVuZHMgKz0gJyAnICsgZC5nZXRWYXIoJ01MUFJFRklYJywgRmFsc2UpICsgJ2Jhc2UtZmlsZXMnCisgICAgICAgIGQuc2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csIHJkZXBlbmRzKQorCisgICAgIyBBZGQgdGhlIHVzZXIvZ3JvdXAgcHJlaW5zdGFsbCBzY3JpcHRzIGFuZCBSREVQRU5EUyByZXF1aXJlbWVudHMKKyAgICAjIHRvIHBhY2thZ2VzIHNwZWNpZmllZCBieSBVU0VSQUREX1BBQ0tBR0VTCisgICAgaWYgbm90IGJiLmRhdGEuaW5oZXJpdHNfY2xhc3MoJ25hdGl2ZXNkaycsIGQpIFwKKyAgICAgICAgYW5kIG5vdCBiYi5kYXRhLmluaGVyaXRzX2NsYXNzKCduYXRpdmUnLCBkKToKKyAgICAgICAgdXNlcmFkZF9wYWNrYWdlcyA9IGQuZ2V0VmFyKCdVU0VSQUREX1BBQ0tBR0VTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgZm9yIHBrZyBpbiB1c2VyYWRkX3BhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICB1cGRhdGVfdXNlcmFkZF9wYWNrYWdlKHBrZykKK30KKworIyBVc2UgdGhlIGZvbGxvd2luZyB0byBleHRlbmQgdGhlIHVzZXJhZGQgd2l0aCBjdXN0b20gZnVuY3Rpb25zCitVU0VSQURERVhURU5TSU9OID89ICIiCisKK2luaGVyaXQgJHtVU0VSQURERVhURU5TSU9OfQpkaWZmIC0tZ2l0IGEvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3VzZXJhZGRfYmFzZS5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXNlcmFkZF9iYXNlLmJiY2xhc3MKQEAgLTAsMCArMSwyMzAgQEAKKyMgVGhpcyBiYmNsYXNzIHByb3ZpZGVzIGJhc2ljIGZ1bmN0aW9uYWxpdHkgZm9yIHVzZXIvZ3JvdXAgc2V0dGluZ3MuCisjIFRoaXMgYmJjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSBpbmhlcml0ZWQgYnkgdXNlcmFkZC5iYmNsYXNzIGFuZAorIyBleHRyYXVzZXJzLmJiY2xhc3MuCisKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYmFzaWNhbGx5IGhhdmUgc2ltaWxhciBsb2dpYy4KKyMgKikgUGVyZm9ybSBuZWNlc3NhcnkgY2hlY2tzIGJlZm9yZSBpbnZva2luZyB0aGUgYWN0dWFsIGNvbW1hbmQKKyMgKikgSW52b2tlIHRoZSBhY3R1YWwgY29tbWFuZCwgbWFrZSByZXRyaWVzIGlmIG5lY2Vzc2FyeQorIyAqKSBFcnJvciBvdXQgaWYgYW4gZXJyb3Igb2NjdXJzLgorCisjIE5vdGUgdGhhdCBiZWZvcmUgaW52b2tpbmcgdGhlc2UgZnVuY3Rpb25zLCBtYWtlIHN1cmUgdGhlIGdsb2JhbCB2YXJpYWJsZQorIyBQU0VVRE8gaXMgc2V0IHVwIGNvcnJlY3RseS4KKworcGVyZm9ybV9ncm91cGFkZCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyBncm91cGFkZCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCBncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgPSAieCI7IHRoZW4KKwkJbG9jYWwgY291bnQ9MAorCQl3aGlsZSB0cnVlOyBkbworCQkJZXZhbCAkUFNFVURPIGdyb3VwYWRkICRvcHRzIHx8IHRydWUKKwkJCWdyb3VwX2V4aXN0cz0iYGdyZXAgIl4kZ3JvdXBuYW1lOiIgJHJvb3RkaXIvZXRjL2dyb3VwIHx8IHRydWVgIgorCQkJaWYgdGVzdCAieCRncm91cF9leGlzdHMiID0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBhZGQgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkJZWxzZQorCQkJCWJyZWFrCisJCQlmaQorCQkJY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJCWlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyBncm91cGFkZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkJZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwICRjb3VudAorCQlkb25lCisJZWxzZQorCQliYm5vdGUgIiR7UE59OiBncm91cCAkZ3JvdXBuYW1lIGFscmVhZHkgZXhpc3RzLCBub3QgcmUtY3JlYXRpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV91c2VyYWRkICgpIHsKKwlsb2NhbCByb290ZGlyPSIkMSIKKwlsb2NhbCBvcHRzPSIkMiIKKwlsb2NhbCByZXRyaWVzPSIkMyIKKwliYm5vdGUgIiR7UE59OiBQZXJmb3JtaW5nIHVzZXJhZGQgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCB1c2VybmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCB1c2VyX2V4aXN0cz0iYGdyZXAgIl4kdXNlcm5hbWU6IiAkcm9vdGRpci9ldGMvcGFzc3dkIHx8IHRydWVgIgorCWlmIHRlc3QgIngkdXNlcl9leGlzdHMiID0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VyYWRkICRvcHRzIHx8IHRydWUKKwkJICAgICAgIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJCSAgICAgICBpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQkJICAgICAgIGJid2FybiAiJHtQTn06IHVzZXJhZGQgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkgICAgICAgZWxzZQorCQkJICAgICAgIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJICAgICAgIGlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyB1c2VyYWRkIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCSAgICAgICBmaQorCQkgICAgICAgc2xlZXAgJGNvdW50CisJICAgICAgIGRvbmUKKwllbHNlCisJCWJibm90ZSAiJHtQTn06IHVzZXIgJHVzZXJuYW1lIGFscmVhZHkgZXhpc3RzLCBub3QgcmUtY3JlYXRpbmcgaXQiCisJZmkKK30KKworcGVyZm9ybV9ncm91cG1lbXMgKCkgeworCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBtZW1zIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgZ3JvdXBuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgZm9yIChpID0gMTsgaSA8IE5GOyBpKyspIGlmICgkaSA9PSAiLWciIHx8ICRpID09ICItLWdyb3VwIikgcHJpbnQgJChpKzEpIH0nYAorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgZm9yIChpID0gMTsgaSA8IE5GOyBpKyspIGlmICgkaSA9PSAiLWEiIHx8ICRpID09ICItLWFkZCIpIHByaW50ICQoaSsxKSB9J2AKKwliYm5vdGUgIiR7UE59OiBSdW5uaW5nIGdyb3VwbWVtcyBjb21tYW5kIHdpdGggZ3JvdXAgJGdyb3VwbmFtZSBhbmQgdXNlciAkdXNlcm5hbWUiCisJIyBncm91cG1lbXMgZmFpbHMgaWYgL2V0Yy9nc2hhZG93IGRvZXMgbm90IGV4aXN0CisJbG9jYWwgZ3NoYWRvdz0iIgorCWlmIFsgLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cgXTsgdGhlbgorCQlnc2hhZG93PSJ5ZXMiCisJZWxzZQorCQlnc2hhZG93PSJubyIKKwkJdG91Y2ggJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cKKwlmaQorCWxvY2FsIG1lbV9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZTpbXjpdKjpbXjpdKjpcKFteLF0qLFwpKiR1c2VybmFtZVwoLFteLF0qXCkqIiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRtZW1fZXhpc3RzIiA9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBtZW1zICRvcHRzIHx8IHRydWUKKwkJCW1lbV9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZTpbXjpdKjpbXjpdKjpcKFteLF0qLFwpKiR1c2VybmFtZVwoLFteLF0qXCkqIiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJCQlpZiB0ZXN0ICJ4JG1lbV9leGlzdHMiID0gIngiOyB0aGVuCisJCQkJYmJ3YXJuICIke1BOfTogZ3JvdXBtZW1zIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJaWYgdGVzdCAieCRnc2hhZG93IiA9ICJ4bm8iOyB0aGVuCisJCQkJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93CisJCQkJCXJtIC1mICRyb290ZGlyJHtzeXNjb25mZGlyfS9nc2hhZG93LQorCQkJCWZpCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBtZW1zIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgYWxyZWFkeSBjb250YWlucyAkdXNlcm5hbWUsIG5vdCByZS1hZGRpbmcgaXQiCisJZmkKKwlpZiB0ZXN0ICJ4JGdzaGFkb3ciID0gInhubyI7IHRoZW4KKwkJcm0gLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3cKKwkJcm0gLWYgJHJvb3RkaXIke3N5c2NvbmZkaXJ9L2dzaGFkb3ctCisJZmkKK30KKworcGVyZm9ybV9ncm91cGRlbCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyBncm91cGRlbCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIGdyb3VwbmFtZT1gZWNobyAiJG9wdHMiIHwgYXdrICd7IHByaW50ICRORiB9J2AKKwlsb2NhbCBncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JGdyb3VwX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJCWxvY2FsIGNvdW50PTAKKwkJd2hpbGUgdHJ1ZTsgZG8KKwkJCWV2YWwgJFBTRVVETyBncm91cGRlbCAkb3B0cyB8fCB0cnVlCisJCQlncm91cF9leGlzdHM9ImBncmVwICJeJGdyb3VwbmFtZToiICRyb290ZGlyL2V0Yy9ncm91cCB8fCB0cnVlYCIKKwkJCWlmIHRlc3QgIngkZ3JvdXBfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkJCQliYndhcm4gIiR7UE59OiBncm91cGRlbCBjb21tYW5kIGRpZCBub3Qgc3VjY2VlZC4gUmV0cnlpbmcuLi4iCisJCQllbHNlCisJCQkJYnJlYWsKKwkJCWZpCisJCQljb3VudD1gZXhwciAkY291bnQgKyAxYAorCQkJaWYgdGVzdCAkY291bnQgPSAkcmV0cmllczsgdGhlbgorCQkJCWJiZmF0YWwgIiR7UE59OiBUcmllZCBydW5uaW5nIGdyb3VwZGVsIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCQlmaQorCQkJc2xlZXAgJGNvdW50CisJCWRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IGdyb3VwICRncm91cG5hbWUgZG9lc24ndCBleGlzdCwgbm90IHJlbW92aW5nIGl0IgorCWZpCit9CisKK3BlcmZvcm1fdXNlcmRlbCAoKSB7CisJbG9jYWwgcm9vdGRpcj0iJDEiCisJbG9jYWwgb3B0cz0iJDIiCisJbG9jYWwgcmV0cmllcz0iJDMiCisJYmJub3RlICIke1BOfTogUGVyZm9ybWluZyB1c2VyZGVsIHdpdGggWyRvcHRzXSBhbmQgJHJldHJpZXMgdGltZXMgb2YgcmV0cnkiCisJbG9jYWwgdXNlcm5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwlpZiB0ZXN0ICJ4JHVzZXJfZXhpc3RzIiAhPSAieCI7IHRoZW4KKwkgICAgICAgbG9jYWwgY291bnQ9MAorCSAgICAgICB3aGlsZSB0cnVlOyBkbworCQkgICAgICAgZXZhbCAkUFNFVURPIHVzZXJkZWwgJG9wdHMgfHwgdHJ1ZQorCQkgICAgICAgdXNlcl9leGlzdHM9ImBncmVwICJeJHVzZXJuYW1lOiIgJHJvb3RkaXIvZXRjL3Bhc3N3ZCB8fCB0cnVlYCIKKwkJICAgICAgIGlmIHRlc3QgIngkdXNlcl9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQkJICAgICAgIGJid2FybiAiJHtQTn06IHVzZXJkZWwgY29tbWFuZCBkaWQgbm90IHN1Y2NlZWQuIFJldHJ5aW5nLi4uIgorCQkgICAgICAgZWxzZQorCQkJICAgICAgIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgY291bnQ9YGV4cHIgJGNvdW50ICsgMWAKKwkJICAgICAgIGlmIHRlc3QgJGNvdW50ID0gJHJldHJpZXM7IHRoZW4KKwkJCQliYmZhdGFsICIke1BOfTogVHJpZWQgcnVubmluZyB1c2VyZGVsIGNvbW1hbmQgJHJldHJpZXMgdGltZXMgd2l0aG91dCBzdWNjZXNzLCBnaXZpbmcgdXAiCisJCSAgICAgICBmaQorCQkgICAgICAgc2xlZXAgJGNvdW50CisJICAgICAgIGRvbmUKKwllbHNlCisJCWJid2FybiAiJHtQTn06IHVzZXIgJHVzZXJuYW1lIGRvZXNuJ3QgZXhpc3QsIG5vdCByZW1vdmluZyBpdCIKKwlmaQorfQorCitwZXJmb3JtX2dyb3VwbW9kICgpIHsKKwkjIE90aGVyIHRoYW4gdGhlIHJldHVybiB2YWx1ZSBvZiBncm91cG1vZCwgdGhlcmUncyBubyBzaW1wbGUgd2F5IHRvIGp1ZGdlIHdoZXRoZXIgdGhlIGNvbW1hbmQKKwkjIHN1Y2NlZWRzLCBzbyB3ZSBkaXNhYmxlIC1lIG9wdGlvbiB0ZW1wb3JhcmlseQorCXNldCArZQorCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgZ3JvdXBtb2Qgd2l0aCBbJG9wdHNdIGFuZCAkcmV0cmllcyB0aW1lcyBvZiByZXRyeSIKKwlsb2NhbCBncm91cG5hbWU9YGVjaG8gIiRvcHRzIiB8IGF3ayAneyBwcmludCAkTkYgfSdgCisJbG9jYWwgZ3JvdXBfZXhpc3RzPSJgZ3JlcCAiXiRncm91cG5hbWU6IiAkcm9vdGRpci9ldGMvZ3JvdXAgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCRncm91cF9leGlzdHMiICE9ICJ4IjsgdGhlbgorCQlsb2NhbCBjb3VudD0wCisJCXdoaWxlIHRydWU7IGRvCisJCQlldmFsICRQU0VVRE8gZ3JvdXBtb2QgJG9wdHMKKwkJCWlmIHRlc3QgJD8gIT0gMDsgdGhlbgorCQkJCWJid2FybiAiJHtQTn06IGdyb3VwbW9kIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJCWVsc2UKKwkJCQlicmVhaworCQkJZmkKKwkJCWNvdW50PWBleHByICRjb3VudCArIDFgCisJCQlpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgZ3JvdXBtb2QgY29tbWFuZCAkcmV0cmllcyB0aW1lcyB3aXRob3V0IHN1Y2Nlc3MsIGdpdmluZyB1cCIKKwkJCWZpCisJCQlzbGVlcCAkY291bnQKKwkJZG9uZQorCWVsc2UKKwkJYmJ3YXJuICIke1BOfTogZ3JvdXAgJGdyb3VwbmFtZSBkb2Vzbid0IGV4aXN0LCB1bmFibGUgdG8gbW9kaWZ5IGl0IgorCWZpCisJc2V0IC1lCit9CisKK3BlcmZvcm1fdXNlcm1vZCAoKSB7CisJIyBTYW1lIHJlYXNvbiB3aXRoIGdyb3VwbW9kLCB0ZW1wb3JhcmlseSBkaXNhYmxlIC1lIG9wdGlvbgorCXNldCArZQorCWxvY2FsIHJvb3RkaXI9IiQxIgorCWxvY2FsIG9wdHM9IiQyIgorCWxvY2FsIHJldHJpZXM9IiQzIgorCWJibm90ZSAiJHtQTn06IFBlcmZvcm1pbmcgdXNlcm1vZCB3aXRoIFskb3B0c10gYW5kICRyZXRyaWVzIHRpbWVzIG9mIHJldHJ5IgorCWxvY2FsIHVzZXJuYW1lPWBlY2hvICIkb3B0cyIgfCBhd2sgJ3sgcHJpbnQgJE5GIH0nYAorCWxvY2FsIHVzZXJfZXhpc3RzPSJgZ3JlcCAiXiR1c2VybmFtZToiICRyb290ZGlyL2V0Yy9wYXNzd2QgfHwgdHJ1ZWAiCisJaWYgdGVzdCAieCR1c2VyX2V4aXN0cyIgIT0gIngiOyB0aGVuCisJICAgICAgIGxvY2FsIGNvdW50PTAKKwkgICAgICAgd2hpbGUgdHJ1ZTsgZG8KKwkJICAgICAgIGV2YWwgJFBTRVVETyB1c2VybW9kICRvcHRzCisJCSAgICAgICBpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCSAgICAgICBiYndhcm4gIiR7UE59OiB1c2VybW9kIGNvbW1hbmQgZGlkIG5vdCBzdWNjZWVkLiBSZXRyeWluZy4uLiIKKwkJICAgICAgIGVsc2UKKwkJCSAgICAgICBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGNvdW50PWBleHByICRjb3VudCArIDFgCisJCSAgICAgICBpZiB0ZXN0ICRjb3VudCA9ICRyZXRyaWVzOyB0aGVuCisJCQkJYmJmYXRhbCAiJHtQTn06IFRyaWVkIHJ1bm5pbmcgdXNlcm1vZCBjb21tYW5kICRyZXRyaWVzIHRpbWVzIHdpdGhvdXQgc3VjY2VzcywgZ2l2aW5nIHVwIgorCQkgICAgICAgZmkKKwkJICAgICAgIHNsZWVwICRjb3VudAorCSAgICAgICBkb25lCisJZWxzZQorCQliYndhcm4gIiR7UE59OiB1c2VyICR1c2VybmFtZSBkb2Vzbid0IGV4aXN0LCB1bmFibGUgdG8gbW9kaWZ5IGl0IgorCWZpCisJc2V0IC1lCit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdXRpbGl0eS10YXNrcy5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODE3Yjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3V0aWxpdHktdGFza3MuYmJjbGFzcwpAQCAtMCwwICsxLDY5IEBACithZGR0YXNrIGxpc3R0YXNrcworZG9fbGlzdHRhc2tzW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fbGlzdHRhc2tzKCkgeworICAgIHRhc2tkZXNjcyA9IHt9CisgICAgbWF4bGVuID0gMAorICAgIGZvciBlIGluIGQua2V5cygpOgorICAgICAgICBpZiBkLmdldFZhckZsYWcoZSwgJ3Rhc2snKToKKyAgICAgICAgICAgIG1heGxlbiA9IG1heChtYXhsZW4sIGxlbihlKSkKKyAgICAgICAgICAgIGlmIGUuZW5kc3dpdGgoJ19zZXRzY2VuZScpOgorICAgICAgICAgICAgICAgIGRlc2MgPSAiJXMgKHNldHNjZW5lIHZlcnNpb24pIiAlIChkLmdldFZhckZsYWcoZVs6LTldLCAnZG9jJykgb3IgJycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlc2MgPSBkLmdldFZhckZsYWcoZSwgJ2RvYycpIG9yICcnCisgICAgICAgICAgICB0YXNrZGVzY3NbZV0gPSBkZXNjCisKKyAgICB0YXNrcyA9IHNvcnRlZCh0YXNrZGVzY3Mua2V5cygpKQorICAgIGZvciB0YXNrbmFtZSBpbiB0YXNrczoKKyAgICAgICAgYmIucGxhaW4oIiVzICAlcyIgJSAodGFza25hbWUubGp1c3QobWF4bGVuKSwgdGFza2Rlc2NzW3Rhc2tuYW1lXSkpCit9CisKK0NMRUFORlVOQ1MgPz0gIiIKKworVF90YXNrLWNsZWFuID0gIiR7TE9HX0RJUn0vY2xlYW5sb2dzLyR7UE59IgorYWRkdGFzayBjbGVhbgorZG9fY2xlYW5bbm9zdGFtcF0gPSAiMSIKK3B5dGhvbiBkb19jbGVhbigpIHsKKyAgICAiIiJjbGVhciB0aGUgYnVpbGQgYW5kIHRlbXAgZGlyZWN0b3JpZXMiIiIKKyAgICBkaXIgPSBkLmV4cGFuZCgiJHtXT1JLRElSfSIpCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgIiArIGRpcikKKyAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisKKyAgICBkaXIgPSAiJXMuKiIgJSBiYi5kYXRhLmV4cGFuZChkLmdldFZhcignU1RBTVAnLCBGYWxzZSksIGQpCisgICAgYmIubm90ZSgiUmVtb3ZpbmcgIiArIGRpcikKKyAgICBvZS5wYXRoLnJlbW92ZShkaXIpCisKKyAgICBmb3IgZiBpbiAoZC5nZXRWYXIoJ0NMRUFORlVOQ1MnLCBUcnVlKSBvciAnJykuc3BsaXQoKToKKyAgICAgICAgYmIuYnVpbGQuZXhlY19mdW5jKGYsIGQpCit9CisKK2FkZHRhc2sgY2hlY2t1cmkKK2RvX2NoZWNrdXJpW25vc3RhbXBdID0gIjEiCitweXRob24gZG9fY2hlY2t1cmkoKSB7CisgICAgc3JjX3VyaSA9IChkLmdldFZhcignU1JDX1VSSScsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgaWYgbGVuKHNyY191cmkpID09IDA6CisgICAgICAgIHJldHVybgorCisgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICB0cnk6CisgICAgICAgIGZldGNoZXIgPSBiYi5mZXRjaDIuRmV0Y2goc3JjX3VyaSwgbG9jYWxkYXRhKQorICAgICAgICBmZXRjaGVyLmNoZWNrc3RhdHVzKCkKKyAgICBleGNlcHQgYmIuZmV0Y2gyLkJCRmV0Y2hFeGNlcHRpb24sIGU6CisgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoZSkKK30KKworYWRkdGFzayBjaGVja3VyaWFsbCBhZnRlciBkb19jaGVja3VyaQorZG9fY2hlY2t1cmlhbGxbcmVjcmRlcHRhc2tdID0gImRvX2NoZWNrdXJpYWxsIGRvX2NoZWNrdXJpIgorZG9fY2hlY2t1cmlhbGxbcmVjaWRlcHRhc2tdID0gImRvXyR7QkJfREVGQVVMVF9UQVNLfSIKK2RvX2NoZWNrdXJpYWxsW25vc3RhbXBdID0gIjEiCitkb19jaGVja3VyaWFsbCgpIHsKKwk6Cit9CisKK2FkZHRhc2sgZmV0Y2hhbGwgYWZ0ZXIgZG9fZmV0Y2gKK2RvX2ZldGNoYWxsW3JlY3JkZXB0YXNrXSA9ICJkb19mZXRjaGFsbCBkb19mZXRjaCIKK2RvX2ZldGNoYWxsW3JlY2lkZXB0YXNrXSA9ICJkb18ke0JCX0RFRkFVTFRfVEFTS30iCitkb19mZXRjaGFsbCgpIHsKKwk6Cit9CmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcyBiL21ldGEvY2xhc3Nlcy91dGlscy5iYmNsYXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjkyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NsYXNzZXMvdXRpbHMuYmJjbGFzcwpAQCAtMCwwICsxLDM4MCBAQAorIyBGb3IgY29tcGF0aWJpbGl0eQorZGVmIGJhc2VfcGF0aF9qb2luKGEsICpwKToKKyAgICByZXR1cm4gb2UucGF0aC5qb2luKGEsICpwKQorCitkZWYgYmFzZV9wYXRoX3JlbGF0aXZlKHNyYywgZGVzdCk6CisgICAgcmV0dXJuIG9lLnBhdGgucmVsYXRpdmUoc3JjLCBkZXN0KQorCitkZWYgYmFzZV9wYXRoX291dChwYXRoLCBkKToKKyAgICByZXR1cm4gb2UucGF0aC5mb3JtYXRfZGlzcGxheShwYXRoLCBkKQorCitkZWYgYmFzZV9yZWFkX2ZpbGUoZmlsZW5hbWUpOgorICAgIHJldHVybiBvZS51dGlscy5yZWFkX2ZpbGUoZmlsZW5hbWUpCisKK2RlZiBiYXNlX2lmZWxzZShjb25kaXRpb24sIGlmdHJ1ZSA9IFRydWUsIGlmZmFsc2UgPSBGYWxzZSk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmlmZWxzZShjb25kaXRpb24sIGlmdHJ1ZSwgaWZmYWxzZSkKKworZGVmIGJhc2VfY29uZGl0aW9uYWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmNvbmRpdGlvbmFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpCisKK2RlZiBiYXNlX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLmxlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfdmVyc2lvbl9sZXNzX29yX2VxdWFsKHZhcmlhYmxlLCBjaGVja3ZhbHVlLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBvZS51dGlscy52ZXJzaW9uX2xlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfY29udGFpbnModmFyaWFibGUsIGNoZWNrdmFsdWVzLCB0cnVldmFsdWUsIGZhbHNldmFsdWUsIGQpOgorICAgIHJldHVybiBiYi51dGlscy5jb250YWlucyh2YXJpYWJsZSwgY2hlY2t2YWx1ZXMsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCkKKworZGVmIGJhc2VfYm90aF9jb250YWluKHZhcmlhYmxlMSwgdmFyaWFibGUyLCBjaGVja3ZhbHVlLCBkKToKKyAgICByZXR1cm4gb2UudXRpbHMuYm90aF9jb250YWluKHZhcmlhYmxlMSwgdmFyaWFibGUyLCBjaGVja3ZhbHVlLCBkKQorCitkZWYgYmFzZV9wcnVuZV9zdWZmaXgodmFyLCBzdWZmaXhlcywgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnBydW5lX3N1ZmZpeCh2YXIsIHN1ZmZpeGVzLCBkKQorCitkZWYgb2VfZmlsdGVyKGYsIHN0ciwgZCk6CisgICAgcmV0dXJuIG9lLnV0aWxzLnN0cl9maWx0ZXIoZiwgc3RyLCBkKQorCitkZWYgb2VfZmlsdGVyX291dChmLCBzdHIsIGQpOgorICAgIHJldHVybiBvZS51dGlscy5zdHJfZmlsdGVyX291dChmLCBzdHIsIGQpCisKK2RlZiBtYWNoaW5lX3BhdGhzKGQpOgorICAgICIiIkxpc3QgYW55IGV4aXN0aW5nIG1hY2hpbmUgc3BlY2lmaWMgZmlsZXNwYXRoIGRpcmVjdG9yaWVzIiIiCisgICAgbWFjaGluZSA9IGQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICBmaWxlc3BhdGhwa2cgPSBkLmdldFZhcigiRklMRVNQQVRIUEtHIiwgVHJ1ZSkuc3BsaXQoIjoiKQorICAgIGZvciBiYXNlcGF0aCBpbiBkLmdldFZhcigiRklMRVNQQVRIQkFTRSIsIFRydWUpLnNwbGl0KCI6Iik6CisgICAgICAgIGZvciBwa2dwYXRoIGluIGZpbGVzcGF0aHBrZzoKKyAgICAgICAgICAgIG1hY2hpbmVwYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBwa2dwYXRoLCBtYWNoaW5lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihtYWNoaW5lcGF0aCk6CisgICAgICAgICAgICAgICAgeWllbGQgbWFjaGluZXBhdGgKKworZGVmIGlzX21hY2hpbmVfc3BlY2lmaWMoZCk6CisgICAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGN1cnJlbnQgcmVjaXBlIGlzIG1hY2hpbmUgc3BlY2lmaWMiIiIKKyAgICBtYWNoaW5lcGF0aHMgPSBzZXQobWFjaGluZV9wYXRocyhkKSkKKyAgICBzcmN1cmkgPSBkLmdldFZhcigiU1JDX1VSSSIsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgdXJsIGluIHNyY3VyaToKKyAgICAgICAgZmV0Y2hlciA9IGJiLmZldGNoMi5GZXRjaChbc3JjdXJpXSwgZCkKKyAgICAgICAgaWYgdXJsLnN0YXJ0c3dpdGgoImZpbGU6Ly8iKToKKyAgICAgICAgICAgIGlmIGFueShmZXRjaGVyLmxvY2FscGF0aCh1cmwpLnN0YXJ0c3dpdGgobXAgKyAiLyIpIGZvciBtcCBpbiBtYWNoaW5lcGF0aHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKK29lX3NvaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgc2hhcmVkIGxpYnJhcnkgZmlsZSBhbmQKKwkjICAgICAgICAgIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IGxpbmtzCisJIyBFeGFtcGxlOgorCSMKKwkjIG9lXworCSMKKwkjYmJub3RlIGluc3RhbGxpbmcgc2hhcmVkIGxpYnJhcnkgJDEgdG8gJDIKKwkjCisJbGlibmFtZT1gYmFzZW5hbWUgJDFgCisJaW5zdGFsbCAtbSA3NTUgJDEgJDIvJGxpYm5hbWUKKwlzb25hbWVsaW5rPWAke0hPU1RfUFJFRklYfXJlYWRlbGYgLWQgJDEgfGdyZXAgJ0xpYnJhcnkgc29uYW1lOicgfHNlZCAtZSAncy8uKlxbXCguKlwpXF0uKi9cMS8nYAorCXNvbGluaz1gZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9cLnNvXC4uKi8uc28vJ2AKKwlsbiAtc2YgJGxpYm5hbWUgJDIvJHNvbmFtZWxpbmsKKwlsbiAtc2YgJGxpYm5hbWUgJDIvJHNvbGluaworfQorCitvZV9saWJpbnN0YWxsKCkgeworCSMgUHVycG9zZTogSW5zdGFsbCBhIGxpYnJhcnksIGluIGFsbCBpdHMgZm9ybXMKKwkjIEV4YW1wbGUKKwkjCisJIyBvZV9saWJpbnN0YWxsIGxpYmx0ZGwgJHtTVEFHSU5HX0xJQkRJUn0vCisJIyBvZV9saWJpbnN0YWxsIC1DIHNyYy9saWJibGFoIGxpYmJsYWggJHtEfS8ke2xpYmRpcn0vCisJZGlyPSIiCisJbGlidG9vbD0iIgorCXNpbGVudD0iIgorCXJlcXVpcmVfc3RhdGljPSIiCisJcmVxdWlyZV9zaGFyZWQ9IiIKKwlzdGFnaW5nX2luc3RhbGw9IiIKKwl3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS1DKQorCQkJc2hpZnQKKwkJCWRpcj0iJDEiCisJCQk7OworCQktcykKKwkJCXNpbGVudD0xCisJCQk7OworCQktYSkKKwkJCXJlcXVpcmVfc3RhdGljPTEKKwkJCTs7CisJCS1zbykKKwkJCXJlcXVpcmVfc2hhcmVkPTEKKwkJCTs7CisJCS0qKQorCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogdW5rbm93biBvcHRpb246ICQxIgorCQkJOzsKKwkJKikKKwkJCWJyZWFrOworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWxpYm5hbWU9IiQxIgorCXNoaWZ0CisJZGVzdHBhdGg9IiQxIgorCWlmIFsgLXogIiRkZXN0cGF0aCIgXTsgdGhlbgorCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiBubyBkZXN0aW5hdGlvbiBwYXRoIHNwZWNpZmllZCIKKwlmaQorCWlmIGVjaG8gIiRkZXN0cGF0aC8iIHwgZWdyZXAgJ14ke1NUQUdJTkdfTElCRElSfS8nID4vZGV2L251bGwKKwl0aGVuCisJCXN0YWdpbmdfaW5zdGFsbD0xCisJZmkKKworCV9fcnVuY21kICgpIHsKKwkJaWYgWyAteiAiJHNpbGVudCIgXTsgdGhlbgorCQkJZWNobyA+JjIgIm9lX2xpYmluc3RhbGw6ICQqIgorCQlmaQorCQkkKgorCX0KKworCWlmIFsgLXogIiRkaXIiIF07IHRoZW4KKwkJZGlyPWBwd2RgCisJZmkKKworCWRvdGxhaT0kbGlibmFtZS5sYWkKKworCSMgU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGxpYm5hbWUubGFpIGlzIHVuaXF1ZQorCW51bWJlcl9vZl9maWxlcz1gKGNkICRkaXI7IGZpbmQgLiAtbmFtZSAiJGRvdGxhaSIpIHwgd2MgLWxgCisJaWYgWyAkbnVtYmVyX29mX2ZpbGVzIC1ndCAxIF07IHRoZW4KKwkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogJGRvdGxhaSBpcyBub3QgdW5pcXVlIGluICRkaXIiCisJZmkKKworCisJZGlyPSRkaXJgKGNkICRkaXI7ZmluZCAuIC1uYW1lICIkZG90bGFpIikgfCBzZWQgInMvXlwuLy87cy9cLyRkb3RsYWlcJC8vO3EiYAorCW9sZGRpcj1gcHdkYAorCV9fcnVuY21kIGNkICRkaXIKKworCWxhZmlsZT0kbGlibmFtZS5sYQorCisJIyBJZiBzdWNoIGZpbGUgZG9lc24ndCBleGlzdCwgdHJ5IHRvIGN1dCB2ZXJzaW9uIHN1ZmZpeAorCWlmIFsgISAtZiAiJGxhZmlsZSIgXTsgdGhlbgorCQlsaWJuYW1lMT1gZWNobyAiJGxpYm5hbWUiIHwgc2VkICdzLy1bMC05Ll0qJC8vJ2AKKwkJbGFmaWxlMT0kbGlibmFtZS5sYQorCQlpZiBbIC1mICIkbGFmaWxlMSIgXTsgdGhlbgorCQkJbGlibmFtZT0kbGlibmFtZTEKKwkJCWxhZmlsZT0kbGFmaWxlMQorCQlmaQorCWZpCisKKwlpZiBbIC1mICIkbGFmaWxlIiBdOyB0aGVuCisJCSMgbGlidG9vbCBhcmNoaXZlCisJCWV2YWwgYGNhdCAkbGFmaWxlfGdyZXAgIl5saWJyYXJ5X25hbWVzPSJgCisJCWxpYnRvb2w9MQorCWVsc2UKKwkJbGlicmFyeV9uYW1lcz0iJGxpYm5hbWUuc28qICRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLiouZHlsaWIiCisJZmkKKworCV9fcnVuY21kIGluc3RhbGwgLWQgJGRlc3RwYXRoLworCWRvdGE9JGxpYm5hbWUuYQorCWlmIFsgLWYgIiRkb3RhIiAtbyAtbiAiJHJlcXVpcmVfc3RhdGljIiBdOyB0aGVuCisJCXJtIC1mICRkZXN0cGF0aC8kZG90YQorCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA2NDQgJGRvdGEgJGRlc3RwYXRoLworCWZpCisJaWYgWyAtZiAiJGRvdGxhaSIgLWEgLW4gIiRsaWJ0b29sIiBdOyB0aGVuCisJCXJtIC1mICRkZXN0cGF0aC8kbGlibmFtZS5sYQorCQlfX3J1bmNtZCBpbnN0YWxsIC1tIDA2NDQgJGRvdGxhaSAkZGVzdHBhdGgvJGxpYm5hbWUubGEKKwlmaQorCisJZm9yIG5hbWUgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJCWZpbGVzPWBldmFsIGVjaG8gJG5hbWVgCisJCWZvciBmIGluICRmaWxlczsgZG8KKwkJCWlmIFsgISAtZSAiJGYiIF07IHRoZW4KKwkJCQlpZiBbIC1uICIkbGlidG9vbCIgXTsgdGhlbgorCQkJCQliYmZhdGFsICJvZV9saWJpbnN0YWxsOiAkZGlyLyRmIG5vdCBmb3VuZC4iCisJCQkJZmkKKwkJCWVsaWYgWyAtTCAiJGYiIF07IHRoZW4KKwkJCQlfX3J1bmNtZCBjcCAtUCAiJGYiICRkZXN0cGF0aC8KKwkJCWVsaWYgWyAhIC1MICIkZiIgXTsgdGhlbgorCQkJCWxpYmZpbGU9IiRmIgorCQkJCXJtIC1mICRkZXN0cGF0aC8kbGliZmlsZQorCQkJCV9fcnVuY21kIGluc3RhbGwgLW0gMDc1NSAkbGliZmlsZSAkZGVzdHBhdGgvCisJCQlmaQorCQlkb25lCisJZG9uZQorCisJaWYgWyAteiAiJGxpYmZpbGUiIF07IHRoZW4KKwkJaWYgIFsgLW4gIiRyZXF1aXJlX3NoYXJlZCIgXTsgdGhlbgorCQkJYmJmYXRhbCAib2VfbGliaW5zdGFsbDogdW5hYmxlIHRvIGxvY2F0ZSBzaGFyZWQgbGlicmFyeSIKKwkJZmkKKwllbGlmIFsgLXogIiRsaWJ0b29sIiBdOyB0aGVuCisJCSMgc3BlY2lhbCBjYXNlIGhhY2sgZm9yIG5vbi1saWJ0b29sIC5zby4jLiMuIyBsaW5rcworCQliYXNlbGliZmlsZT1gYmFzZW5hbWUgIiRsaWJmaWxlImAKKwkJaWYgKGVjaG8gJGJhc2VsaWJmaWxlIHwgZ3JlcCAtcUUgJ15saWIuKlwuc29cLlswLTkuXSokJyk7IHRoZW4KKwkJCXNvbmFtZWxpbms9YCR7SE9TVF9QUkVGSVh9cmVhZGVsZiAtZCAkbGliZmlsZSB8Z3JlcCAnTGlicmFyeSBzb25hbWU6JyB8c2VkIC1lICdzLy4qXFtcKC4qXClcXS4qL1wxLydgCisJCQlzb2xpbms9YGVjaG8gJGJhc2VsaWJmaWxlIHwgc2VkIC1lICdzL1wuc29cLi4qLy5zby8nYAorCQkJaWYgWyAtbiAiJHNvbmFtZWxpbmsiIC1hIHgiJGJhc2VsaWJmaWxlIiAhPSB4IiRzb25hbWVsaW5rIiBdOyB0aGVuCisJCQkJX19ydW5jbWQgbG4gLXNmICRiYXNlbGliZmlsZSAkZGVzdHBhdGgvJHNvbmFtZWxpbmsKKwkJCWZpCisJCQlfX3J1bmNtZCBsbiAtc2YgJGJhc2VsaWJmaWxlICRkZXN0cGF0aC8kc29saW5rCisJCWZpCisJZmkKKworCV9fcnVuY21kIGNkICIkb2xkZGlyIgorfQorCitvZV9tYWNoaW5zdGFsbCgpIHsKKwkjIFB1cnBvc2U6IEluc3RhbGwgbWFjaGluZSBkZXBlbmRlbnQgZmlsZXMsIGlmIGF2YWlsYWJsZQorCSMgICAgICAgICAgSWYgbm90IGF2YWlsYWJsZSwgY2hlY2sgaWYgdGhlcmUgaXMgYSBkZWZhdWx0CisJIyAgICAgICAgICBJZiBubyBkZWZhdWx0LCBqdXN0IHRvdWNoIHRoZSBkZXN0aW5hdGlvbgorCSMgRXhhbXBsZToKKwkjICAgICAgICAgICAgICAgICQxICAkMiAgICQzICAgICAgICAgJDQKKwkjIG9lX21hY2hpbnN0YWxsIC1tIDA2NDQgZnN0YWIgJHtEfS9ldGMvZnN0YWIKKwkjCisJIyBUT0RPOiBDaGVjayBhcmd1bWVudCBudW1iZXI/CisJIworCWZpbGVuYW1lPWBiYXNlbmFtZSAkM2AKKwlkaXJuYW1lPWBkaXJuYW1lICQzYAorCisJZm9yIG8gaW4gYGVjaG8gJHtPVkVSUklERVN9IHwgdHIgJzonICcgJ2A7IGRvCisJCWlmIFsgLWUgJGRpcm5hbWUvJG8vJGZpbGVuYW1lIF07IHRoZW4KKwkJCWJibm90ZSAkZGlybmFtZS8kby8kZmlsZW5hbWUgcHJlc2VudCwgaW5zdGFsbGluZyB0byAkNAorCQkJaW5zdGFsbCAkMSAkMiAkZGlybmFtZS8kby8kZmlsZW5hbWUgJDQKKwkJCXJldHVybgorCQlmaQorCWRvbmUKKyMJYmJub3RlIG92ZXJyaWRlcyBzcGVjaWZpYyBmaWxlIE5PVCBwcmVzZW50LCB0cnlpbmcgZGVmYXVsdD0kMy4uLgorCWlmIFsgLWUgJDMgXTsgdGhlbgorCQliYm5vdGUgJDMgcHJlc2VudCwgaW5zdGFsbGluZyB0byAkNAorCQlpbnN0YWxsICQxICQyICQzICQ0CisJZWxzZQorCQliYm5vdGUgJDMgTk9UIHByZXNlbnQsIHRvdWNoaW5nIGVtcHR5ICQ0CisJCXRvdWNoICQ0CisJZmkKK30KKworY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAoKSB7CisJIyBDcmVhdGUgYSB3cmFwcGVyIHNjcmlwdCB3aGVyZSBjb21tYW5kbGluZSBvcHRpb25zIGFyZSBuZWVkZWQKKwkjCisJIyBUaGVzZSBhcmUgdXNlZnVsIHRvIHdvcmsgYXJvdW5kIHJlbG9jYXRpb24gaXNzdWVzLCBieSBwYXNzaW5nIGV4dHJhIG9wdGlvbnMgCisJIyB0byBhIHByb2dyYW0KKwkjCisJIyBVc2FnZTogY3JlYXRlX2NtZGxpbmVfd3JhcHBlciBGSUxFTkFNRSA8ZXh0cmEtb3B0aW9ucz4KKworCWNtZD0kMQorCXNoaWZ0CisKKwllY2hvICJHZW5lcmF0aW5nIHdyYXBwZXIgc2NyaXB0IGZvciAkY21kIgorCisJbXYgJGNtZCAkY21kLnJlYWwKKwljbWRuYW1lPWBiYXNlbmFtZSAkY21kYAorCWNhdCA8PEVORCA+JGNtZAorIyEvYmluL2Jhc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleGVjIC1hIFxgZGlybmFtZSBcJHJlYWxwYXRoXGAvJGNtZG5hbWUgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZS5yZWFsICRAICJcJEAiCitFTkQKKwljaG1vZCAreCAkY21kCit9CisKK2NyZWF0ZV93cmFwcGVyICgpIHsKKwkjIENyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IHdoZXJlIGV4dHJhIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbmVlZGVkCisJIworCSMgVGhlc2UgYXJlIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCByZWxvY2F0aW9uIGlzc3VlcywgYnkgc2V0dGluZyBlbnZpcm9ubWVudAorCSMgdmFyaWFibGVzIHdoaWNoIHBvaW50IHRvIHBhdGhzIGluIHRoZSBmaWxlc3lzdGVtLgorCSMKKwkjIFVzYWdlOiBjcmVhdGVfd3JhcHBlciBGSUxFTkFNRSBbW1ZBUj1WQUxVRV0uLl0KKworCWNtZD0kMQorCXNoaWZ0CisKKwllY2hvICJHZW5lcmF0aW5nIHdyYXBwZXIgc2NyaXB0IGZvciAkY21kIgorCisJbXYgJGNtZCAkY21kLnJlYWwKKwljbWRuYW1lPWBiYXNlbmFtZSAkY21kYAorCWNhdCA8PEVORCA+JGNtZAorIyEvYmluL2Jhc2gKK3JlYWxwYXRoPVxgcmVhZGxpbmsgLWZuIFwkMFxgCitleHBvcnQgJEAKK2V4ZWMgLWEgXGBkaXJuYW1lIFwkcmVhbHBhdGhcYC8kY21kbmFtZSBcYGRpcm5hbWUgXCRyZWFscGF0aFxgLyRjbWRuYW1lLnJlYWwgIlwkQCIKK0VORAorCWNobW9kICt4ICRjbWQKK30KKworIyBDb3B5IGZpbGVzL2RpcmVjdG9yaWVzIGZyb20gJDEgdG8gJDIgYnV0IHVzaW5nIGhhcmRsaW5rcworIyAocHJlc2VydmUgc3ltbGlua3MpCitoYXJkbGlua2RpciAoKSB7CisJZnJvbT0kMQorCXRvPSQyCisJKGNkICRmcm9tOyBmaW5kIC4gLXByaW50MCB8IGNwaW8gLS1udWxsIC1wZGx1ICR0bykKK30KKworCitkZWYgY2hlY2tfYXBwX2V4aXN0cyhhcHAsIGQpOgorICAgIGFwcCA9IGQuZXhwYW5kKGFwcCkKKyAgICBwYXRoID0gZC5nZXRWYXIoJ1BBVEgnLCBkLCBUcnVlKQorICAgIHJldHVybiBib29sKGJiLnV0aWxzLndoaWNoKHBhdGgsIGFwcCkpCisKK2RlZiBleHBsb2RlX2RlcHMocyk6CisgICAgcmV0dXJuIGJiLnV0aWxzLmV4cGxvZGVfZGVwcyhzKQorCitkZWYgYmFzZV9zZXRfZmlsZXNwYXRoKHBhdGgsIGQpOgorICAgIGZpbGVzcGF0aCA9IFtdCisgICAgZXh0cmFwYXRocyA9IChkLmdldFZhcigiRklMRVNFWFRSQVBBVEhTIiwgVHJ1ZSkgb3IgIiIpCisgICAgIyBSZW1vdmUgZGVmYXVsdCBmbGFnIHdoaWNoIHdhcyB1c2VkIGZvciBjaGVja2luZworICAgIGV4dHJhcGF0aHMgPSBleHRyYXBhdGhzLnJlcGxhY2UoIl9fZGVmYXVsdDoiLCAiIikKKyAgICAjIERvbid0IHByZXBlbmQgZW1wdHkgc3RyaW5ncyB0byB0aGUgcGF0aCBsaXN0CisgICAgaWYgZXh0cmFwYXRocyAhPSAiIjoKKyAgICAgICAgcGF0aCA9IGV4dHJhcGF0aHMuc3BsaXQoIjoiKSArIHBhdGgKKyAgICAjIFRoZSAiOiIgZW5zdXJlcyB3ZSBoYXZlIGFuICdlbXB0eScgb3ZlcnJpZGUKKyAgICBvdmVycmlkZXMgPSAoIjoiICsgKGQuZ2V0VmFyKCJGSUxFU09WRVJSSURFUyIsIFRydWUpIG9yICIiKSkuc3BsaXQoIjoiKQorICAgIG92ZXJyaWRlcy5yZXZlcnNlKCkKKyAgICBmb3IgbyBpbiBvdmVycmlkZXM6CisgICAgICAgIGZvciBwIGluIHBhdGg6CisgICAgICAgICAgICBpZiBwICE9ICIiOiAKKyAgICAgICAgICAgICAgICBmaWxlc3BhdGguYXBwZW5kKG9zLnBhdGguam9pbihwLCBvKSkKKyAgICByZXR1cm4gIjoiLmpvaW4oZmlsZXNwYXRoKQorCitkZWYgZXh0ZW5kX3ZhcmlhbnRzKGQsIHZhciwgZXh0ZW5kLCBkZWxpbT0nOicpOgorICAgICIiIlJldHVybiBhIHN0cmluZyBvZiBhbGwgYmIgY2xhc3MgZXh0ZW5kIHZhcmlhbnRzIGZvciB0aGUgZ2l2ZW4gZXh0ZW5kIiIiCisgICAgdmFyaWFudHMgPSBbXQorICAgIHdob2xlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgIGZvciBleHQgaW4gd2hvbGUuc3BsaXQoKToKKyAgICAgICAgZWV4dCA9IGV4dC5zcGxpdChkZWxpbSkKKyAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSBleHRlbmQ6CisgICAgICAgICAgICB2YXJpYW50cy5hcHBlbmQoZWV4dFsxXSkKKyAgICByZXR1cm4gIiAiLmpvaW4odmFyaWFudHMpCisKK2RlZiBtdWx0aWxpYl9wa2dfZXh0ZW5kKGQsIHBrZyk6CisgICAgdmFyaWFudHMgPSAoZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBpZiBub3QgdmFyaWFudHM6CisgICAgICAgIHJldHVybiBwa2cKKyAgICBwa2dzID0gcGtnCisgICAgZm9yIHYgaW4gdmFyaWFudHM6CisgICAgICAgIHBrZ3MgPSBwa2dzICsgIiAiICsgdiArICItIiArIHBrZworICAgIHJldHVybiBwa2dzCisKK2RlZiBhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgdmFyLCB1bmlxdWUgPSBUcnVlLCBuZWVkX3NwbGl0ID0gVHJ1ZSwgZGVsaW0gPSAnICcpOgorICAgICIiIlJldHVybiBhIHN0cmluZyBvZiBhbGwgJHt2YXJ9IGluIGFsbCBtdWx0aWxpYiB0dW5lIGNvbmZpZ3VyYXRpb24iIiIKKyAgICB2YWx1ZXMgPSBbXQorICAgIHZhbHVlID0gZC5nZXRWYXIodmFyLCBUcnVlKSBvciAiIgorICAgIGlmIHZhbHVlICE9ICIiOgorICAgICAgICBpZiBuZWVkX3NwbGl0OgorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gdmFsdWUuc3BsaXQoZGVsaW0pOgorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgICAgICBvdmVycmlkZXMgPSBsb2NhbGRhdGEuZ2V0VmFyKCJPVkVSUklERVMiLCBGYWxzZSkgKyAiOnZpcnRjbGFzcy1tdWx0aWxpYi0iICsgaXRlbQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJPVkVSUklERVMiLCBvdmVycmlkZXMpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk1MUFJFRklYIiwgaXRlbSArICItIikKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHZhbHVlID0gbG9jYWxkYXRhLmdldFZhcih2YXIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHZhbHVlICE9ICIiOgorICAgICAgICAgICAgaWYgbmVlZF9zcGxpdDoKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB2YWx1ZS5zcGxpdChkZWxpbSk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoaXRlbSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKyAgICBpZiB1bmlxdWU6CisgICAgICAgICN3ZSBkbyB0aGlzIHRvIGtlZXAgb3JkZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQorICAgICAgICByZXQgPSBbXQorICAgICAgICBmb3IgdmFsdWUgaW4gdmFsdWVzOgorICAgICAgICAgICAgaWYgbm90IHZhbHVlIGluIHJldDoKKyAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHZhbHVlKQorICAgIGVsc2U6CisgICAgICAgIHJldCA9IHZhbHVlcworICAgIHJldHVybiAiICIuam9pbihyZXQpCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvdmFsYS5iYmNsYXNzIGIvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmY2NjRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jbGFzc2VzL3ZhbGEuYmJjbGFzcwpAQCAtMCwwICsxLDE4IEBACisjIEV2ZXJ5b25lIG5lZWRzIHZhbGEtbmF0aXZlIGFuZCB0YXJnZXRzIG5lZWQgdmFsYSwgdG9vLAorIyBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgdGFyZ2V0IGJ1aWxkcyBsb29rIGZvciAudmFwaSBmaWxlcy4KKyMKK1ZBTEFERVBFTkRTID0gIiIKK1ZBTEFERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJ2YWxhIgorREVQRU5EU19hcHBlbmQgPSAiIHZhbGEtbmF0aXZlICR7VkFMQURFUEVORFN9IgorCisjIE91ciBwYXRjaGVkIHZlcnNpb24gb2YgVmFsYSBsb29rcyBpbiBTVEFHSU5HX0RBVEFESVIgZm9yIC52YXBpIGZpbGVzCitleHBvcnQgU1RBR0lOR19EQVRBRElSCisjIFVwc3RyZWFtIFZhbGEgPj0gMC4xMSBsb29rcyBpbiBYREdfREFUQV9ESVJTIGZvciAudmFwaSBmaWxlcworZXhwb3J0IFhER19EQVRBX0RJUlMgPSAiJHtTVEFHSU5HX0RBVEFESVJ9IgorCisjIFBhY2thZ2UgYWRkaXRpb25hbCBmaWxlcworRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICAgJHtkYXRhZGlyfS92YWxhL3ZhcGkvKi52YXBpIFwKKyAgICAke2RhdGFkaXJ9L3ZhbGEvdmFwaS8qLmRlcHMgXAorICAgICR7ZGF0YWRpcn0vZ2lyLTEuMCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MgYi9tZXRhL2NsYXNzZXMvd2FmLmJiY2xhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMjFlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY2xhc3Nlcy93YWYuYmJjbGFzcwpAQCAtMCwwICsxLDEzIEBACit3YWZfZG9fY29uZmlndXJlKCkgeworCSR7U30vd2FmIGNvbmZpZ3VyZSAtLXByZWZpeD0ke3ByZWZpeH0gJHtFWFRSQV9PRUNPTkZ9Cit9CisKK3dhZl9kb19jb21waWxlKCkgIHsKKwkke1N9L3dhZiBidWlsZCAke1BBUkFMTEVMX01BS0V9Cit9CisKK3dhZl9kb19pbnN0YWxsKCkgeworCSR7U30vd2FmIGluc3RhbGwgLS1kZXN0ZGlyPSR7RH0KK30KKworRVhQT1JUX0ZVTkNUSU9OUyBkb19jb25maWd1cmUgZG9fY29tcGlsZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZiBiL21ldGEvY29uZi9hYmlfdmVyc2lvbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Mjk2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvYWJpX3ZlcnNpb24uY29uZgpAQCAtMCwwICsxLDcgQEAKKyMKKyMgT0VMQVlPVVRfQUJJIGFsbG93cyB1cyB0byBub3RpZnkgdXNlcnMgd2hlbiB0aGUgZm9ybWF0IG9mIFRNUERJUiBjaGFuZ2VzIGluIAorIyBhbiBpbmNvbXBhdGlibGUgd2F5LiBTdWNoIGNoYW5nZXMgc2hvdWxkIHVzdWFsbHkgYmUgZGV0YWlsZWQgaW4gdGhlIGNvbW1pdAorIyB0aGF0IGJyZWFrcyB0aGUgZm9ybWF0IGFuZCBoYXZlIGJlZW4gcHJldmlvdXNseSBkaXNjdXNzZWQgb24gdGhlIG1haWxpbmcgbGlzdCAKKyMgd2l0aCBnZW5lcmFsIGFncmVlbWVudCBmcm9tIHRoZSBjb3JlIHRlYW0uCisjCitPRUxBWU9VVF9BQkkgPSAiMTEiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvYml0YmFrZS5jb25mIGIvbWV0YS9jb25mL2JpdGJha2UuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGE2NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2JpdGJha2UuY29uZgpAQCAtMCwwICsxLDgxMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFN0YW5kYXJkIHRhcmdldCBmaWxlc3lzdGVtIHBhdGhzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIElmIGNoYW5naW5nIHRoZXNlIHZhbHVlcywgYmV3YXJlIHRoYXQgbmF0aXZlL2Nyb3NzL25hdGl2ZXNkayBiYmNsYXNzCisjIGZpbGVzIG1heSBhbHNvIG5lZWQgY2hhbmdlcyB0byBrZWVwIGluIHN5bmMuCisjCisKKyMgVXNlZCBieSBtdWx0aWxpYiBjb2RlIHRvIGNoYW5nZSB0aGUgbGlicmFyeSBwYXRocworYmFzZWxpYiA9ICIke0JBU0VMSUJ9IgorYmFzZWxpYlt2YXJkZXB2YWx1ZV0gPSAiJHtiYXNlbGlifSIKK0JBU0VMSUIgPSAibGliIgorQkFTRUxJQl9wb3dlcnBjNjQgPSAibGliNjQiCisKKyMgUGF0aCBwcmVmaXhlcworZXhwb3J0IGJhc2VfcHJlZml4ID0gIiIKK2V4cG9ydCBwcmVmaXggPSAiL3VzciIKK2V4cG9ydCBleGVjX3ByZWZpeCA9ICIvdXNyIgorCisjIEJhc2UgcGF0aHMKK2V4cG9ydCBiYXNlX2JpbmRpciA9ICIke2Jhc2VfcHJlZml4fS9iaW4iCitleHBvcnQgYmFzZV9zYmluZGlyID0gIiR7YmFzZV9wcmVmaXh9L3NiaW4iCitleHBvcnQgYmFzZV9saWJkaXIgPSAiJHtiYXNlX3ByZWZpeH0vJHtiYXNlbGlifSIKK2V4cG9ydCBub25hcmNoX2Jhc2VfbGliZGlyID0gIiR7YmFzZV9wcmVmaXh9L2xpYiIKKworIyBBcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgcGF0aHMKK2V4cG9ydCBzeXNjb25mZGlyID0gIiR7YmFzZV9wcmVmaXh9L2V0YyIKK2V4cG9ydCBzZXJ2aWNlZGlyID0gIiR7YmFzZV9wcmVmaXh9L3NydiIKK2V4cG9ydCBzaGFyZWRzdGF0ZWRpciA9ICIke2Jhc2VfcHJlZml4fS9jb20iCitleHBvcnQgbG9jYWxzdGF0ZWRpciA9ICIke2Jhc2VfcHJlZml4fS92YXIiCitleHBvcnQgZGF0YWRpciA9ICIke3ByZWZpeH0vc2hhcmUiCitleHBvcnQgaW5mb2RpciA9ICIke2RhdGFkaXJ9L2luZm8iCitleHBvcnQgbWFuZGlyID0gIiR7ZGF0YWRpcn0vbWFuIgorZXhwb3J0IGRvY2RpciA9ICIke2RhdGFkaXJ9L2RvYyIKK2V4cG9ydCBzeXN0ZW1kX3VuaXRkaXIgPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS9zeXN0ZW1kIgorZXhwb3J0IHN5c3RlbWRfc3lzdGVtX3VuaXRkaXIgPSAiJHtub25hcmNoX2Jhc2VfbGliZGlyfS9zeXN0ZW1kL3N5c3RlbSIKK2V4cG9ydCBub25hcmNoX2xpYmRpciA9ICIke2V4ZWNfcHJlZml4fS9saWIiCitleHBvcnQgc3lzdGVtZF91c2VyX3VuaXRkaXIgPSAiJHtub25hcmNoX2xpYmRpcn0vc3lzdGVtZC91c2VyIgorCisjIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgcGF0aHMKK2V4cG9ydCBiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vYmluIgorZXhwb3J0IHNiaW5kaXIgPSAiJHtleGVjX3ByZWZpeH0vc2JpbiIKK2V4cG9ydCBsaWJkaXIgPSAiJHtleGVjX3ByZWZpeH0vJHtiYXNlbGlifSIKK2V4cG9ydCBsaWJleGVjZGlyID0gIiR7bGliZGlyfS8ke0JQTn0iCitleHBvcnQgaW5jbHVkZWRpciA9ICIke2V4ZWNfcHJlZml4fS9pbmNsdWRlIgorZXhwb3J0IG9sZGluY2x1ZGVkaXIgPSAiJHtleGVjX3ByZWZpeH0vaW5jbHVkZSIKK2xvY2FsZWRpciA9ICIke2xpYmRpcn0vbG9jYWxlIgorCisjIExpbmthZ2UgYmV0d2VlbiBuYXRpdmUvY3Jvc3MvbmF0aXZlc2RrIGxheW91dHMKK2Jhc2VfYmluZGlyX25hdGl2ZSA9ICIvYmluIgorYmFzZV9zYmluZGlyX25hdGl2ZSA9ICIvc2JpbiIKK3N5c2NvbmZkaXJfbmF0aXZlID0gIi9ldGMiCitwcmVmaXhfbmF0aXZlID0gIi91c3IiCitiaW5kaXJfbmF0aXZlID0gIiR7cHJlZml4X25hdGl2ZX0vYmluIgorc2JpbmRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9zYmluIgoraW5jbHVkZWRpcl9uYXRpdmUgPSAiJHtwcmVmaXhfbmF0aXZlfS9pbmNsdWRlIgorbGliZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L2xpYiIKK2xpYmV4ZWNkaXJfbmF0aXZlID0gIiR7bGliZGlyX25hdGl2ZX0vJHtCUE59IgorYmFzZV9saWJkaXJfbmF0aXZlID0gIi9saWIiCitkYXRhZGlyX25hdGl2ZSA9ICIke3ByZWZpeF9uYXRpdmV9L3NoYXJlIgorYmluZGlyX2Nyb3NzID0gIi9iaW4iCitiaW5kaXJfY3Jvc3NzY3JpcHRzID0gIiR7YmluZGlyfS9jcm9zc3NjcmlwdHMiCitwcmVmaXhfbmF0aXZlc2RrID0gIi91c3IiCitiaW5kaXJfbmF0aXZlc2RrID0gIiR7cHJlZml4X25hdGl2ZXNka30vYmluIgoraW5jbHVkZWRpcl9uYXRpdmVzZGsgPSAiJHtwcmVmaXhfbmF0aXZlc2RrfS9pbmNsdWRlIgorbGliZGlyX25hdGl2ZXNkayA9ICIke3ByZWZpeF9uYXRpdmVzZGt9L2xpYiIKK2Jhc2VfbGliZGlyX25hdGl2ZXNkayA9ICIvbGliIgorbG9jYWxzdGF0ZWRpcl9uYXRpdmVzZGsgPSAiL3ZhciIKKworIworIyBDcm9zcyByZWNpcGVzIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgdGFyZ2V0IGxheW91dAorIyA6PSBpcyB1c2VkIGNhcmVmdWxseSBoZXJlCisjCit0YXJnZXRfZGF0YWRpciA6PSAiJHtkYXRhZGlyfSIKKyMgVXNlZCB0byBmaW5kIGVudi9wZXJsL3B5dGhvbgorVVNSQklOUEFUSCA9ICIke2JpbmRpcn0iCitVU1JCSU5QQVRIX2NsYXNzLW5hdGl2ZSA9ICIvdXNyL2JpbiIKK1VTUkJJTlBBVEhfY2xhc3MtbmF0aXZlc2RrID0gIi91c3IvYmluIgorCisjIFJvb3QgaG9tZSBkaXJlY3RvcnkKK1JPT1RfSE9NRSA/Pz0gIi9ob21lL3Jvb3QiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1aWxkIHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEltbWVkaWF0ZSBleHBhbnNpb24gc2luY2UgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmVhcGVhdGVkbHkgY2FsbGluZworIyBvcy51bmFtZSgpIHRocm91Z2hvdXQgcGFyc2luZworQlVJTERfQVJDSCA6PSAiJHtAb3MudW5hbWUoKVs0XX0iCitCVUlMRF9PUyA6PSAiJHtAb3MudW5hbWUoKVswXS5sb3dlcigpfSIKK0JVSUxEX1ZFTkRPUiA9ICIiCitCVUlMRF9TWVMgPSAiJHtCVUlMRF9BUkNIfSR7QlVJTERfVkVORE9SfS0ke0JVSUxEX09TfSIKK0JVSUxEX1BSRUZJWCA9ICIiCitCVUlMRF9DQ19BUkNIID0gIiIKK0JVSUxEX0xEX0FSQ0ggPSAiIgorQlVJTERfQVNfQVJDSCA9ICIiCitCVUlMRF9FWEVFWFQgPSAiIgorCitIT1NUX0FSQ0ggPSAiJHtUQVJHRVRfQVJDSH0iCitIT1NUX09TID0gIiR7VEFSR0VUX09TfSIKK0hPU1RfVkVORE9SID0gIiR7VEFSR0VUX1ZFTkRPUn0iCitIT1NUX1NZUyA9ICIke0hPU1RfQVJDSH0ke0hPU1RfVkVORE9SfS0ke0hPU1RfT1N9IgorSE9TVF9QUkVGSVggPSAiJHtUQVJHRVRfUFJFRklYfSIKK0hPU1RfQ0NfQVJDSCA9ICIke1RBUkdFVF9DQ19BUkNIfSIKK0hPU1RfTERfQVJDSCA9ICIke1RBUkdFVF9MRF9BUkNIfSIKK0hPU1RfQVNfQVJDSCA9ICIke1RBUkdFVF9BU19BUkNIfSIKK0hPU1RfRVhFRVhUID0gIiIKKworVFVORV9BUkNIID8/PSAiSU5WQUxJRCIKK1RVTkVfQ0NBUkdTID8/PSAiIgorVFVORV9DQ0FSR1NbdmFyZGVwdmFsdWVdID0gIiR7VFVORV9DQ0FSR1N9IgorVFVORV9MREFSR1MgPz89ICIiCitUVU5FX0FTQVJHUyA/Pz0gIiIKK1RVTkVfRkVBVFVSRVMgPz89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitMSUJDRVhURU5TSU9OID8/PSAiIgorQUJJRVhURU5TSU9OID8/PSAiIgorVVNFX05MUyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1sb2NhbGUtY29kZScsICd5ZXMnLCAnbm8nLCBkKX0iCitTREtVU0VfTkxTID8/PSAieWVzIgorCitUQVJHRVRfQVJDSCA9ICIke1RVTkVfQVJDSH0iCitUQVJHRVRfT1MgPSAibGludXgke0xJQkNFWFRFTlNJT059JHtBQklFWFRFTlNJT059IgorVEFSR0VUX1ZFTkRPUiA9ICItb2UiCitUQVJHRVRfU1lTID0gIiR7VEFSR0VUX0FSQ0h9JHtUQVJHRVRfVkVORE9SfSR7QFsnLScgKyBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSksICcnXVtkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgPT0gKCcnIG9yICdjdXN0b20nKV19IgorVEFSR0VUX1BSRUZJWCA9ICIke1RBUkdFVF9TWVN9LSIKK1RBUkdFVF9DQ19BUkNIID0gIiR7VFVORV9DQ0FSR1N9IgorVEFSR0VUX0xEX0FSQ0ggPSAiJHtUVU5FX0xEQVJHU30iCitUQVJHRVRfQVNfQVJDSCA9ICIke1RVTkVfQVNBUkdTfSIKKworU0RLX0FSQ0ggPSAiJHtCVUlMRF9BUkNIfSIKK1NES19PUyA9ICIke0JVSUxEX09TfSIKK1NES19WRU5ET1IgPSAiLW9lc2RrIgorU0RLX1NZUyA9ICIke1NES19BUkNIfSR7U0RLX1ZFTkRPUn0ke0BbJy0nICsgZC5nZXRWYXIoJ1NES19PUycsIFRydWUpLCAnJ11bZC5nZXRWYXIoJ1NES19PUycsIFRydWUpID09ICgnJyBvciAnY3VzdG9tJyldfSIKK1NES19QUkVGSVggPSAiJHtTREtfU1lTfS0iCitTREtfQ0NfQVJDSCA9ICIke0JVSUxEX0NDX0FSQ0h9IgorU0RLUEtHU1VGRklYID0gIm5hdGl2ZXNkayIKK1NES19QQUNLQUdFX0FSQ0hTID0gImFsbCBhbnkgbm9hcmNoICR7U0RLX0FSQ0h9LSR7U0RLUEtHU1VGRklYfSIKK1NES19MRF9BUkNIID0gIiR7QlVJTERfTERfQVJDSH0iCitTREtfQVNfQVJDSCA9ICIke0JVSUxEX0FTX0FSQ0h9IgorCitUVU5FX1BLR0FSQ0ggPz89ICIiCitQQUNLQUdFX0FSQ0ggPz89ICIke1RVTkVfUEtHQVJDSH0iCitNQUNISU5FX0FSQ0ggPSAiJHtAW2QuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKSwgZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKV1bYm9vbChkLmdldFZhcignTUFDSElORScsIFRydWUpKV0ucmVwbGFjZSgnLScsICdfJyl9IgorUEFDS0FHRV9FWFRSQV9BUkNIUyA/Pz0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLSR7REVGQVVMVFRVTkV9fSIKK1BBQ0tBR0VfQVJDSFMgPSAiYWxsIGFueSBub2FyY2ggJHtQQUNLQUdFX0VYVFJBX0FSQ0hTfSAke01BQ0hJTkVfQVJDSH0iCisjIE1BQ0hJTkVfQVJDSCBzaG91bGRuJ3QgYmUgaW5jbHVkZWQgaGVyZSBhcyBhIHZhcmlhYmxlIGRlcGVuZGVuY3kKKyMgc2luY2UgbWFjaGluZSBzcGVjaWZpYyBwYWNrYWdlcyBhcmUgaGFuZGxlZCB1c2luZyBtdWx0aW1hY2hpbmUKK1BBQ0tBR0VfQVJDSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkVfQVJDSCIKKworTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtQQUNLQUdFX0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCitNVUxUSU1BQ0hfSE9TVF9TWVMgPSAiJHtQQUNLQUdFX0FSQ0h9JHtIT1NUX1ZFTkRPUn0tJHtIT1NUX09TfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERhdGUvdGltZSB2YXJpYWJsZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworREFURSA6PSAiJHtAdGltZS5zdHJmdGltZSgnJVklbSVkJyx0aW1lLmdtdGltZSgpKX0iCitUSU1FIDo9ICIke0B0aW1lLnN0cmZ0aW1lKCclSCVNJVMnLHRpbWUuZ210aW1lKCkpfSIKK0RBVEVUSU1FID0gIiR7REFURX0ke1RJTUV9IgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgT3BlbmVtYmVkZGVkIFNvZnR3YXJlIFByZXJlcXVpc2l0ZXMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBweXRob24tbmF0aXZlIHNob3VsZCBiZSBoZXJlIGJ1dCBweXRob24gcmVsaWVzIG9uIGJ1aWxkaW5nCisjIGl0cyBvd24gaW4gc3RhZ2luZworQVNTVU1FX1BST1ZJREVEID0gIlwKKyAgICBiemlwMi1uYXRpdmUgXAorICAgIGNocnBhdGgtbmF0aXZlIFwKKyAgICBnaXQtbmF0aXZlIFwKKyAgICBncmVwLW5hdGl2ZSBcCisgICAgZGlmZnN0YXQtbmF0aXZlIFwKKyAgICBwYXRjaC1uYXRpdmUgXAorICAgIHBlcmwtbmF0aXZlLXJ1bnRpbWUgXAorICAgIHB5dGhvbi1uYXRpdmUtcnVudGltZSBcCisgICAgdGFyLW5hdGl2ZSBcCisgICAgdmlydHVhbC9saWJpbnRsLW5hdGl2ZSBcCisgICAgdGV4aW5mby1uYXRpdmUgXAorICAgIGJhc2gtbmF0aXZlIFwKKyAgICBzZWQtbmF0aXZlIFwKKyAgICAiCisjIGd6aXAtbmF0aXZlIHNob3VsZCBiZSBsaXN0ZWQgYWJvdmU/CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQYWNrYWdlIGRlZmF1bHQgdmFyaWFibGVzLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1BOID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVswXSBvciAnZGVmYXVsdHBrZ25hbWUnfSIKK1BWID0gIiR7QGJiLnBhcnNlLkJCSGFuZGxlci52YXJzX2Zyb21fZmlsZShkLmdldFZhcignRklMRScsIEZhbHNlKSxkKVsxXSBvciAnMS4wJ30iCitQUiA9ICIke0BiYi5wYXJzZS5CQkhhbmRsZXIudmFyc19mcm9tX2ZpbGUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSksZClbMl0gb3IgJ3IwJ30iCitQRiA9ICIke1BOfS0ke0VYVEVORFBFfSR7UFZ9LSR7UFJ9IgorRVhURU5EUEUgPSAiJHtAWycnLCcke1BFXHg3ZF8nXVtpbnQoZC5nZXRWYXIoJ1BFJywgVHJ1ZSkgb3IgMCkgPiAwXX0iCitQID0gIiR7UE59LSR7UFZ9IgorCitFWFRFTkRQUkFVVE8gPSAiJHtAWycuJHtQUkFVVE9ceDdkJywnJ11bZC5nZXRWYXIoJ1BSQVVUTycsIFRydWUpIGlzIE5vbmVdfSIKK1BSQVVUT0lOWCA9ICIke1BGfSIKKworUEtHViA/PSAiJHtQVn0iCitQS0dSID89ICIke1BSfSR7RVhURU5EUFJBVVRPfSIKK1BLR0UgPz0gIiR7QFsnJywnJHtQRVx4N2QnXVtpbnQoZC5nZXRWYXIoJ1BFJywgVHJ1ZSkgb3IgMCkgPiAwXX0iCitFWFRFTkRQS0dFVkVSID0gIiR7QFsnJywnJHtQS0dFXHg3ZDonXVtkLmdldFZhcignUEtHRScsIFRydWUpLnN0cmlwKCkgIT0gJyddfSIKK0VYVEVORFBLR1YgPz0gIiR7RVhURU5EUEtHRVZFUn0ke1BLR1Z9LSR7UEtHUn0iCisKKyMgQmFzZSBwYWNrYWdlIG5hbWUKKyMgQXV0b21hdGljYWxseSBkZXJpdmVzICJmb28iIGZyb20gImZvby1uYXRpdmUiLCAiZm9vLWNyb3NzIiBvciAiZm9vLWluaXRpYWwiCisjIG90aGVyd2lzZSBpdCBpcyB0aGUgc2FtZSBhcyBQTiBhbmQgUAorU1BFQ0lBTF9QS0dTVUZGSVggPSAiLW5hdGl2ZSAtY3Jvc3MgLWluaXRpYWwgLWludGVybWVkaWF0ZSAtY3Jvc3NzZGsgLWNyb3NzLWNhbmFkaWFuIgorQlBOID0gIiR7QGJhc2VfcHJ1bmVfc3VmZml4KGQuZ2V0VmFyKCdQTicsIFRydWUpLCBkLmdldFZhcignU1BFQ0lBTF9QS0dTVUZGSVgnLCBUcnVlKS5zcGxpdCgpLCBkKX0iCitCUCA9ICIke0JQTn0tJHtQVn0iCisKKyMgUGFja2FnZSBpbmZvLgorCitTRUNUSU9OID0gImJhc2UiCitQUklPUklUWSA9ICJvcHRpb25hbCIKK1NVTU1BUlkgPz0gIiR7UE59IHZlcnNpb24gJHtQVn0tJHtQUn0iCitERVNDUklQVElPTiA/PSAiJHtTVU1NQVJZfS4iCisKKyMgVGhlIGZvbGxvd2luZyB0d28gYXJlIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSB0aGV5IHJlc3VsdCBpbiBhIHJlY3Vyc2l2ZQorIyBkZWZpbml0aW9uIG9mIHRoZSB2YXJpYWJsZSBpbiBzb21lIGNvcm5lciBjYXNlcy4gIFRoZXNlIGFyZSBsZWZ0IGluCisjIHRvIGlsbHVzdHJhdGUgdGhlIGludGVuZGVkIGJlaGF2aW9yLgorI1NVTU1BUllfJHtQTn0gPz0gIiR7U1VNTUFSWX0iCisjREVTQ1JJUFRJT05fJHtQTn0gPz0gIiR7REVTQ1JJUFRJT059IgorCitTVU1NQVJZXyR7UE59LWRiZyA/PSAiJHtTVU1NQVJZfSAtIERlYnVnZ2luZyBmaWxlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRiZyA/PSAiJHtERVNDUklQVElPTn0gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBFTEYgc3ltYm9scyBhbmQgcmVsYXRlZCBzb3VyY2VzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIgorCitTVU1NQVJZXyR7UE59LWRldiA/PSAiJHtTVU1NQVJZfSAtIERldmVsb3BtZW50IGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHN5bWJvbGljIGxpbmtzLCBoZWFkZXIgZmlsZXMsIGFuZCBcCityZWxhdGVkIGl0ZW1zIG5lY2Vzc2FyeSBmb3Igc29mdHdhcmUgZGV2ZWxvcG1lbnQuIgorCitTVU1NQVJZXyR7UE59LXN0YXRpY2RldiA/PSAiJHtTVU1NQVJZfSAtIERldmVsb3BtZW50IGZpbGVzIChTdGF0aWMgTGlicmFyaWVzKSIKK0RFU0NSSVBUSU9OXyR7UE59LXN0YXRpY2Rldj89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHN0YXRpYyBsaWJyYXJpZXMgZm9yIHNvZnR3YXJlIGRldmVsb3BtZW50LiIKKworU1VNTUFSWV8ke1BOfS1kb2MgPz0gIiR7U1VNTUFSWX0gLSBEb2N1bWVudGF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tZG9jID89ICIke0RFU0NSSVBUSU9OfSAgXAorVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24uIgorCitMSUNFTlNFID0gIklOVkFMSUQiCitNQUlOVEFJTkVSID0gIk9FLUNvcmUgRGV2ZWxvcGVycyA8b3BlbmVtYmVkZGVkLWNvcmVAbGlzdHMub3BlbmVtYmVkZGVkLm9yZz4iCitIT01FUEFHRSA9ICIiCisKKyMgUGFja2FnZSBkZXBlbmRlbmNpZXMgYW5kIHByb3ZpZGVzLgorCisjIEVuc3VyZSB0aGF0IC1kZXYgcGFja2FnZXMgcmVjb21tZW5kIHRoZSBjb3JyZXNwb25kaW5nIC1kZXYgcGFja2FnZXMgb2YgdGhlaXIKKyMgZGVwcywgYW5kIHRoZSBzYW1lIGZvciAtZGJnLgorREVQQ0hBSU5fUFJFICA9ICIiCitERVBDSEFJTl9QT1NUID0gIi1kZXYgLWRiZyIKKworREVQRU5EUyA9ICIiCitSREVQRU5EUyA9ICIiCitQUk9WSURFUyA9ICIiCitQUk9WSURFU19wcmVwZW5kID0gIiR7UE59ICIKK1JQUk9WSURFUyA9ICIiCisKK01VTFRJX1BST1ZJREVSX1dISVRFTElTVCA9ICJ2aXJ0dWFsL2xpYmludGwgdmlydHVhbC9saWJpbnRsLW5hdGl2ZSB2aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsIHZpcnR1YWwveHNlcnZlciB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIHZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcyIKKworU09MSUJTID0gIi5zby4qIgorU09MSUJTX2RhcndpbiA9ICIuZHlsaWIiCisKK1NPTElCU0RFViA9ICIuc28iCisjIER1ZSB0byB0aGUgb3JkZXJpbmcgb2YgUEFDS0FHRVMgYW5kIHRoZSBuYW1pbmcgb2YgdGhlIGRldiBzeW1saW5rcyBvbiBkYXJ3aW4sCisjIHdlIGNhbid0IG1ha2UgdGhlIHN5bWxpbmtzIGVuZCB1cCBpbiB0aGUgLWRldiBwYWNrYWdlcyBlYXNpbHkgYXQgdGhpcyBwb2ludC4gVGhpcyBoYWNrCisjIGF0IGxlYXN0IG1lYW5zIGJ1aWxkcyBhcmVuJ3QgY29tcGxldGVseSBicm9rZW4gYW5kIHN5bWxpbmtzIGRvbid0IHRha2UgdXAgbXVjaCBzcGFjZS4KK1NPTElCU0RFVl9kYXJ3aW4gPSAiLmR5bGliYnJva2VuIgorCitQQUNLQUdFX0JFRk9SRV9QTiA/PSAiIgorUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59LXN0YXRpY2RldiAke1BOfS1kZXYgJHtQTn0tZG9jICR7UE59LWxvY2FsZSAke1BBQ0tBR0VfQkVGT1JFX1BOfSAke1BOfSIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LWxvY2FsZS0uKiIKK0ZJTEVTID0gIiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyogJHtzYmluZGlyfS8qICR7bGliZXhlY2Rpcn0vKiAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiBcCisgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS8qJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICR7YmFzZV9wcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgJHtwcmVmaXh9L2xpYi91ZGV2L3J1bGVzLmQgXAorICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJkaXJ9LyR7QlBOfS8qIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vcGl4bWFwcyAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucyBcCisgICAgICAgICAgICAke2RhdGFkaXJ9L2lkbCAke2RhdGFkaXJ9L29tZiAke2RhdGFkaXJ9L3NvdW5kcyBcCisgICAgICAgICAgICAke2xpYmRpcn0vYm9ub2JvL3NlcnZlcnMiCisKK0ZJTEVTXyR7UE59LWJpbiA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyoiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHttYW5kaXJ9ICR7aW5mb2Rpcn0gJHtkYXRhZGlyfS9ndGstZG9jIFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vZ25vbWUvaGVscCIKK1NFQ1RJT05fJHtQTn0tZG9jID0gImRvYyIKKworRklMRVNfU09MSUJTREVWID89ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0gJHtGSUxFU19TT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vKi5vICR7bGliZGlyfS9wa2djb25maWcgJHtkYXRhZGlyfS9wa2djb25maWcgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYWNsb2NhbCAke2Jhc2VfbGliZGlyfS8qLm8gXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS8ke0JQTn0vKi5sYSAke2Jhc2VfbGliZGlyfS8qLmxhIgorU0VDVElPTl8ke1BOfS1kZXYgPSAiZGV2ZWwiCitBTExPV19FTVBUWV8ke1BOfS1kZXYgPSAiMSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIke1BOfSAoPSAke0VYVEVORFBLR1Z9KSIKKworRklMRVNfJHtQTn0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5hICR7bGliZGlyfS8ke0JQTn0vKi5hIgorU0VDVElPTl8ke1BOfS1zdGF0aWNkZXYgPSAiZGV2ZWwiCitSREVQRU5EU18ke1BOfS1zdGF0aWNkZXYgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitET1RERUJVRy1kYmcgPSAiJHtiaW5kaXJ9Ly5kZWJ1ZyAke3NiaW5kaXJ9Ly5kZWJ1ZyAke2xpYmV4ZWNkaXJ9Ly5kZWJ1ZyAke2xpYmRpcn0vLmRlYnVnIFwKKyAgICAgICAgICAgICR7YmFzZV9iaW5kaXJ9Ly5kZWJ1ZyAke2Jhc2Vfc2JpbmRpcn0vLmRlYnVnICR7YmFzZV9saWJkaXJ9Ly5kZWJ1ZyAke2xpYmRpcn0vJHtCUE59Ly5kZWJ1ZyBcCisgICAgICAgICAgICAke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnICR7bGliZXhlY2Rpcn0vJHtCUE59Ly5kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZyIKKworREVCVUdGSUxFRElSRUNUT1JZLWRiZyA9ICIvdXNyL2xpYi9kZWJ1ZyAvdXNyL3NyYy9kZWJ1ZyIKKworRklMRVNfJHtQTn0tZGJnID0gIiR7QGQuZ2V0VmFyKFsnRE9UREVCVUctZGJnJywgJ0RFQlVHRklMRURJUkVDVE9SWS1kYmcnXVtkLmdldFZhcignUEFDS0FHRV9ERUJVR19TUExJVF9TVFlMRScsIFRydWUpID09ICdkZWJ1Zy1maWxlLWRpcmVjdG9yeSddLCBUcnVlKX0iCisKK1NFQ1RJT05fJHtQTn0tZGJnID0gImRldmVsIgorQUxMT1dfRU1QVFlfJHtQTn0tZGJnID0gIjEiCisKK0ZJTEVTXyR7UE59LWxvY2FsZSA9ICIke2RhdGFkaXJ9L2xvY2FsZSIKKworIyBGaWxlIG1hbmlmZXN0CisKK0ZJTEVfRElSTkFNRSA9ICIke0Bvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLCBGYWxzZSkpfSIKKyMgRklMRVNQQVRIIGlzIHNldCBpbiBiYXNlLmJiY2xhc3MKKyNGSUxFU1BBVEggPSAiJHtGSUxFX0RJUk5BTUV9LyR7UEZ9OiR7RklMRV9ESVJOQU1FfS8ke1B9OiR7RklMRV9ESVJOQU1FfS8ke1BOfToke0ZJTEVfRElSTkFNRX0vJHtCUH06JHtGSUxFX0RJUk5BTUV9LyR7QlBOfToke0ZJTEVfRElSTkFNRX0vZmlsZXM6JHtGSUxFX0RJUk5BTUV9IgorIyBUaGlzIGRlZmF1bHQgd2FzIG9ubHkgdXNlZCBmb3IgY2hlY2tpbmcKK0ZJTEVTRVhUUkFQQVRIUyA/PSAiX19kZWZhdWx0OiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdlbmVyYWwgd29yayBhbmQgb3V0cHV0IGRpcmVjdG9yaWVzIGZvciB0aGUgYnVpbGQgc3lzdGVtLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK1RNUERJUiA/PSAiJHtUT1BESVJ9L3RtcCIKK0NBQ0hFID0gIiR7VE1QRElSfS9jYWNoZSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdNQUNISU5FJywgVHJ1ZSkpXX0ke0BbJycsICcvJyArIHN0cihkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV1bYm9vbChkLmdldFZhcignU0RLTUFDSElORScsIFRydWUpKV19IgorIyBUaGUgcGVyc2lzdGVudCBjYWNoZSBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBidWlsZHMKK1BFUlNJU1RFTlRfRElSID0gIiR7VE9QRElSfS9jYWNoZSIKK0xPR19ESVIgPSAiJHtUTVBESVJ9L2xvZyIKK0NPX0RJUiA9ICIke0RMX0RJUn0iCitDVlNESVIgPSAiJHtDT19ESVJ9L2N2cyIKK1NWTkRJUiA9ICIke0NPX0RJUn0vc3ZuIgorR0lURElSID0gIiR7Q09fRElSfS9naXQyIgorQlpSRElSID0gIiR7Q09fRElSfS9ienIiCitIR0RJUiA9ICIke0NPX0RJUn0vaGciCisKK1NUQU1QU19ESVIgPz0gIiR7VE1QRElSfS9zdGFtcHMiCitTVEFNUCA9ICIke1NUQU1QU19ESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCitTVEFNUENMRUFOID0gIiR7U1RBTVBTX0RJUn0vJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30vJHtQTn0vKi0qIgorQkFTRV9XT1JLRElSID89ICIke1RNUERJUn0vd29yayIKK1dPUktESVIgPSAiJHtCQVNFX1dPUktESVJ9LyR7TVVMVElNQUNIX1RBUkdFVF9TWVN9LyR7UE59LyR7RVhURU5EUEV9JHtQVn0tJHtQUn0iCitUID0gIiR7V09SS0RJUn0vdGVtcCIKK0QgPSAiJHtXT1JLRElSfS9pbWFnZSIKK1MgPSAiJHtXT1JLRElSfS8ke0JQfSIKK0IgPSAiJHtTfSIKKworU1RBR0lOR19ESVIgPSAiJHtUTVBESVJ9L3N5c3Jvb3RzIgorCitTVEFHSU5HX0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUn0vJHtCVUlMRF9TWVN9IgorU1RBR0lOR19CSU5ESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmluZGlyX25hdGl2ZX0iCitTVEFHSU5HX0JJTkRJUl9DUk9TUyA9ICIke1NUQUdJTkdfQklORElSfS9jcm9zc3NjcmlwdHMiCitTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU4gPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgorU1RBR0lOR19MSUJESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7bGliZGlyX25hdGl2ZX0iCitTVEFHSU5HX0xJQkVYRUNESVJfTkFUSVZFID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7bGliZXhlY2Rpcl9uYXRpdmV9IgorU1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiYXNlX2xpYmRpcl9uYXRpdmV9IgorU1RBR0lOR19TQklORElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3NiaW5kaXJfbmF0aXZlfSIKK1NUQUdJTkdfSU5DRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke2luY2x1ZGVkaXJfbmF0aXZlfSIKK1NUQUdJTkdfRVRDRElSX05BVElWRSA9ICIke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfSIKK1NUQUdJTkdfREFUQURJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtkYXRhZGlyX25hdGl2ZX0iCisKK1NUQUdJTkdfRElSX0hPU1QgPSAiJHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSIKK1NUQUdJTkdfQklORElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2JpbmRpcn0iCitTVEFHSU5HX0xJQkRJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJkaXJ9IgorU1RBR0lOR19MSUJFWEVDRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmV4ZWNkaXJ9IgorU1RBR0lOR19CQVNFTElCRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSIKK1NUQUdJTkdfSU5DRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2luY2x1ZGVkaXJ9IgorU1RBR0lOR19EQVRBRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2RhdGFkaXJ9IgorU1RBR0lOR19FWEVDUFJFRklYRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2V4ZWNfcHJlZml4fSIKK1NUQUdJTkdfTE9BREVSX0RJUiA9ICIke1NUQUdJTkdfRElSX0hPU1R9L2xvYWRlciIKK1NUQUdJTkdfRklSTVdBUkVfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vZmlybXdhcmUiCisKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9IgorU1RBR0lOR19ESVJfVENCT09UU1RSQVAgPSAiJHtTVEFHSU5HX0RJUl9UQVJHRVR9LXRjYm9vdHN0cmFwIgorCisjIFNldHRpbmcgREVQTE9ZX0RJUiBvdXRzaWRlIG9mIFRNUERJUiBpcyBoZWxwZnVsLCB3aGVuIHlvdSBhcmUgdXNpbmcKKyMgcGFja2FnZWQgc3RhZ2luZyBhbmQvb3IgbXVsdGltYWNoaW5lLgorREVQTE9ZX0RJUiA/PSAiJHtUTVBESVJ9L2RlcGxveSIKK0RFUExPWV9ESVJfVEFSID0gIiR7REVQTE9ZX0RJUn0vdGFyIgorREVQTE9ZX0RJUl9JUEsgPSAiJHtERVBMT1lfRElSfS9pcGsiCitERVBMT1lfRElSX1JQTSA9ICIke0RFUExPWV9ESVJ9L3JwbSIKK0RFUExPWV9ESVJfREVCID0gIiR7REVQTE9ZX0RJUn0vZGViIgorREVQTE9ZX0RJUl9JTUFHRSA/PSAiJHtERVBMT1lfRElSfS9pbWFnZXMvJHtNQUNISU5FfSIKK0RFUExPWV9ESVJfVE9PTFMgPSAiJHtERVBMT1lfRElSfS90b29scyIKKworUEtHREFUQV9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS9wa2dkYXRhIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU0RLIHZhcmlhYmxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitTREtfTkFNRV9QUkVGSVggPz0gIm9lY29yZSIKK1NES19OQU1FID0gIiR7U0RLX05BTUVfUFJFRklYfS0ke1NES19BUkNIfS0ke1RVTkVfUEtHQVJDSH0iCitTREtQQVRIID0gIi91c3IvbG9jYWwvJHtTREtfTkFNRV9QUkVGSVh9LSR7U0RLX0FSQ0h9IgorU0RLUEFUSE5BVElWRSA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7U0RLX1NZU30iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBLZXJuZWwgaW5mby4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitPTERFU1RfS0VSTkVMID0gIjIuNi4zMiIKK09MREVTVF9LRVJORUxfYWFyY2g2NCA9ICIzLjE0IgorU1RBR0lOR19LRVJORUxfRElSID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC8ke01BQ0hJTkV9L2tlcm5lbC1zb3VyY2UiCitTVEFHSU5HX0tFUk5FTF9CVUlMRERJUiA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvJHtNQUNISU5FfS9rZXJuZWwtYnVpbGQtYXJ0aWZhY3RzIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU3BlY2lmaWMgaW1hZ2UgY3JlYXRpb24gYW5kIHJvb3RmcyBwb3B1bGF0aW9uIGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworSU1BR0VfUk9PVEZTID0gIiR7V09SS0RJUn0vcm9vdGZzIgorSU1BR0VfQkFTRU5BTUUgPSAiJHtQTn0iCitJTUFHRV9OQU1FID0gIiR7SU1BR0VfQkFTRU5BTUV9LSR7TUFDSElORX0tJHtEQVRFVElNRX0iCitJTUFHRV9OQU1FW3ZhcmRlcHNleGNsdWRlXSArPSAiREFURVRJTUUiCitJTUFHRV9MSU5LX05BTUUgPSAiJHtJTUFHRV9CQVNFTkFNRX0tJHtNQUNISU5FfSIKKworIyBUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIGEgcGVyY2VudGFnZSBvdmVyYWdlIG9mIHRoZSBhY3R1YWwgaW1hZ2Ugc2l6ZSByYXRoZXIgdGhhbiBhCisjIGZpeGVkIGV4dHJhIHNwYWNlLCB0aGlzIGlzIHNwYWNlIG5lZWRlZCBmb3IgaW5pdGlhbCBzdGFydHVwIGFuZCBiYXNpYyBvcGVyYXRpb25zLgorSU1BR0VfT1ZFUkhFQURfRkFDVE9SID89ICIxLjMiCisjIFRoaXMgb3B0aW9uIGFsbG93cyBmb3IgYWRkaW5nIGFkZGl0aW9uYWwgc3BhY2UgaW4gSyBhYm92ZSBhbmQgYmV5b25kIHdoYXQgdGhlCisjIElNQUdFX09WRVJIRUFEX0ZBQ1RPUiBtaWdodCBhZGQuIFRoaXMgc3BhY2UgaXMgZm9yIGFkZGl0aW9uYWwgcGFja2FnZXMsIHVzZXIgZGF0YSwgLi4uCisjIFRvIHNldCBhIGZpeGVkIHNpemUgdGhlbiBvdmVycmlkaW5nIElNQUdFX1JPT1RGU19TSVpFIHdpdGggdGhlIG1heCBzaXplIG9uZSB3YW50cworIyBzaG91bGQgZG8gdGhlIHRyaWNrCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPz0gIjAiCisKK0VYVFJBX0lNQUdFREVQRU5EUyA9ICIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUb29sY2hhaW4gaW5mby4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitQQVRIX3ByZXBlbmQgPSAiJHtDT1JFQkFTRX0vc2NyaXB0czoke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn06JHtTVEFHSU5HX0JJTkRJUl9DUk9TU306JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX06JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7YmFzZV9zYmluZGlyX25hdGl2ZX06JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiYXNlX2JpbmRpcl9uYXRpdmV9OiIKK2V4cG9ydCBQQVRICisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCdWlsZCB1dGlsaXR5IGluZm8uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworQ0NBQ0hFID8/PSAiIgorIyBEaXNhYmxlIGNjYWNoZSBleHBsaWNpdGx5IGlmIENDQUNIRSBpcyBudWxsIHNpbmNlIGdjYyBtYXkgYmUgYSBzeW1saW5rCisjIG9mIGNjYWNoZSBzb21lIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIEZlZG9yYSAxNykuCitleHBvcnQgQ0NBQ0hFX0RJU0FCTEUgPz89ICIke0BbMCwxXVtkLmdldFZhcignQ0NBQ0hFJywgVHJ1ZSkgPT0gJyddfSIKKyMgQXNzaWduIENDQUNIRV9ESVIgYSBkZWZhdWx0IHZhbHVlIHRvIGZpeCBhIGJ1ZyBvZiBjY2FjaGUgMy4xLjcsCisjIHNpbmNlIGl0IHdvdWxkIGFsd2F5cyBjcmVhdGUgQ0NBQ0hFX0RJUi8uY2NhY2hlIGV2ZW4gaWYKKyMgQ0NBQ0hFX0RJU0FCTEUgPSAxLgorZXhwb3J0IENDQUNIRV9ESVIgPz89ICIke0Bvcy5nZXRlbnYoJ0hPTUUnKX0iCisKK1RPT0xDSEFJTl9PUFRJT05TID0gIiAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCitleHBvcnQgQ0MgPSAiJHtDQ0FDSEV9JHtIT1NUX1BSRUZJWH1nY2MgJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iCitleHBvcnQgQ1hYID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9ZysrICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IgorZXhwb3J0IEZDID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2ZvcnRyYW4gJHtIT1NUX0NDX0FSQ0h9JHtUT09MQ0hBSU5fT1BUSU9OU30iCitleHBvcnQgQ1BQID0gIiR7SE9TVF9QUkVGSVh9Z2NjIC1FJHtUT09MQ0hBSU5fT1BUSU9OU30gJHtIT1NUX0NDX0FSQ0h9IgorZXhwb3J0IExEID0gIiR7SE9TVF9QUkVGSVh9bGQke1RPT0xDSEFJTl9PUFRJT05TfSAke0hPU1RfTERfQVJDSH0iCitleHBvcnQgQ0NMRCA9ICIke0NDfSIKK2V4cG9ydCBBUiA9ICIke0hPU1RfUFJFRklYfWFyIgorZXhwb3J0IEFTID0gIiR7SE9TVF9QUkVGSVh9YXMgJHtIT1NUX0FTX0FSQ0h9IgorZXhwb3J0IFJBTkxJQiA9ICIke0hPU1RfUFJFRklYfXJhbmxpYiIKK2V4cG9ydCBTVFJJUCA9ICIke0hPU1RfUFJFRklYfXN0cmlwIgorZXhwb3J0IE9CSkNPUFkgPSAiJHtIT1NUX1BSRUZJWH1vYmpjb3B5IgorZXhwb3J0IE9CSkRVTVAgPSAiJHtIT1NUX1BSRUZJWH1vYmpkdW1wIgorZXhwb3J0IFNUUklOR1MgPSAiJHtIT1NUX1BSRUZJWH1zdHJpbmdzIgorZXhwb3J0IE5NID0gIiR7SE9TVF9QUkVGSVh9bm0iCitQWVRIT04gPSAiJHtAc3lzLmV4ZWN1dGFibGV9IgorCitleHBvcnQgQlVJTERfQ0MgPSAiJHtDQ0FDSEV9JHtCVUlMRF9QUkVGSVh9Z2NjICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQ1hYID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWcrKyAke0JVSUxEX0NDX0FSQ0h9IgorZXhwb3J0IEJVSUxEX0ZDID0gIiR7Q0NBQ0hFfSR7QlVJTERfUFJFRklYfWdmb3J0cmFuICR7QlVJTERfQ0NfQVJDSH0iCitleHBvcnQgQlVJTERfQ1BQID0gIiR7QlVJTERfUFJFRklYfWdjYyAke0JVSUxEX0NDX0FSQ0h9IC1FIgorZXhwb3J0IEJVSUxEX0xEID0gIiR7QlVJTERfUFJFRklYfWxkICR7QlVJTERfTERfQVJDSH0iCitleHBvcnQgQlVJTERfQ0NMRCA9ICIke0JVSUxEX1BSRUZJWH1nY2MgJHtCVUlMRF9DQ19BUkNIfSIKK2V4cG9ydCBCVUlMRF9BUiA9ICIke0JVSUxEX1BSRUZJWH1hciIKK2V4cG9ydCBCVUlMRF9BUyA9ICIke0JVSUxEX1BSRUZJWH1hcyAke0JVSUxEX0FTX0FSQ0h9IgorZXhwb3J0IEJVSUxEX1JBTkxJQiA9ICIke0JVSUxEX1BSRUZJWH1yYW5saWIiCitleHBvcnQgQlVJTERfU1RSSVAgPSAiJHtCVUlMRF9QUkVGSVh9c3RyaXAiCitleHBvcnQgQlVJTERfTk0gPSAiJHtCVUlMRF9QUkVGSVh9bm0iCisKK2V4cG9ydCBNQUtFID0gIm1ha2UiCitFWFRSQV9PRU1BS0UgPSAiLWUgTUFLRUZMQUdTPSIKK0VYVFJBX09FQ09ORiA9ICIiCitleHBvcnQgTENfQUxMID0gIkMiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQYXRjaCBoYW5kbGluZy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworUEFUQ0hUT09MID0gInF1aWx0IgorUEFUQ0hSRVNPTFZFID0gIm5vb3AiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCdWlsZCBmbGFncyBhbmQgb3B0aW9ucy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitleHBvcnQgQlVJTERfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0iCitCVUlMRFNES19DUFBGTEFHUyA9ICItaXN5c3RlbSR7U1RBR0lOR19JTkNESVJ9IgorZXhwb3J0IENQUEZMQUdTID0gIiR7VEFSR0VUX0NQUEZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfQ1BQRkxBR1MgPSAiIgorI2V4cG9ydCBUQVJHRVRfQ1BQRkxBR1MgPSAiLWlzeXN0ZW0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9IgorCitleHBvcnQgQlVJTERfQ0ZMQUdTID0gIiR7QlVJTERfQ1BQRkxBR1N9ICR7QlVJTERfT1BUSU1JWkFUSU9OfSIKK0JVSUxEU0RLX0NGTEFHUyA9ICIke0JVSUxEU0RLX0NQUEZMQUdTfSAke0JVSUxEX09QVElNSVpBVElPTn0iCitleHBvcnQgQ0ZMQUdTID0gIiR7VEFSR0VUX0NGTEFHU30iCitleHBvcnQgVEFSR0VUX0NGTEFHUyA9ICIke1RBUkdFVF9DUFBGTEFHU30gJHtTRUxFQ1RFRF9PUFRJTUlaQVRJT059IgorCitleHBvcnQgQlVJTERfQ1hYRkxBR1MgPSAiJHtCVUlMRF9DRkxBR1N9IgorZXhwb3J0IENYWEZMQUdTID0gIiR7VEFSR0VUX0NYWEZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfQ1hYRkxBR1MgPSAiJHtUQVJHRVRfQ0ZMQUdTfSIKKworZXhwb3J0IEJVSUxEX0xERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLUwke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfQkFTRV9MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7U1RBR0lOR19CQVNFX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtTzEiCisKK0JVSUxEU0RLX0xERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgsJHtsaWJkaXJ9IC1XbCwtTzEgXAorICAgICAgICAgICAgICAgICAgICAtTCR7U1RBR0lOR19ESVJfSE9TVH0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgICAgIC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfRElSX0hPU1R9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgICAgICAtV2wsLXJwYXRoLCR7YmFzZV9saWJkaXJ9IC1XbCwtTzEiCisKK0xJTktFUl9IQVNIX1NUWUxFID8/PSAiZ251IgorIyBtaXBzIGRvZXMgbm90IHN1cHBvcnQgR05VIGhhc2ggc3R5bGUgdGhlcmVmb3JlIHdlIG92ZXJyaWRlCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzID0gInN5c3YiCitMSU5LRVJfSEFTSF9TVFlMRV9taXBzZWwgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NCA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwczY0ZWwgPSAic3lzdiIKK0xJTktFUl9IQVNIX1NUWUxFX21pcHM2NG4zMiA9ICJzeXN2IgorTElOS0VSX0hBU0hfU1RZTEVfbWlwczY0ZWxuMzIgPSAic3lzdiIKK1RBUkdFVF9MSU5LX0hBU0hfU1RZTEUgPz0gIiR7QFsnLVdsLC0taGFzaC1zdHlsZT1nbnUnLCcnXVtkLmdldFZhcignTElOS0VSX0hBU0hfU1RZTEUnLCBUcnVlKSAhPSAnZ251J119IgorCitleHBvcnQgTERGTEFHUyA9ICIke1RBUkdFVF9MREZMQUdTfSIKK2V4cG9ydCBUQVJHRVRfTERGTEFHUyA9ICItV2wsLU8xICR7VEFSR0VUX0xJTktfSEFTSF9TVFlMRX0iCisjZXhwb3J0IFRBUkdFVF9MREZMQUdTID0gIi1MJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtsaWJkaXJ9IFwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19ESVJfVEFSR0VUfSR7bGliZGlyfSBcCisjICAgICAgICAgICAgICAgICAgICAgICAgIC1XbCwtTzEiCisKKyMgV2hpY2ggZmxhZ3MgdG8gbGVhdmUgYnkgc3RyaXAtZmxhZ3MoKSBpbiBiaW4vYnVpbGQvb2VidWlsZC5zaCA/CitBTExPV0VEX0ZMQUdTID0gIi1PIC1tY3B1IC1tYXJjaCAtcGlwZSIKKworIyBQYXNzIHBhcmFsbGVsIG1ha2Ugb3B0aW9ucyB0byB0aGUgY29tcGlsZSB0YXNrCitFWFRSQV9PRU1BS0VfcHJlcGVuZF90YXNrLWNvbXBpbGUgPSAiJHtQQVJBTExFTF9NQUtFfSAiCitQQVJBTExFTF9NQUtFSU5TVCA/Pz0gIiR7UEFSQUxMRUxfTUFLRX0iCisjIFBhc3MgcGFyYWxsZWwgbWFrZSBvcHRpb25zIHRvIHRoZSBpbnN0YWxsIHRhc2sKK0VYVFJBX09FTUFLRV9wcmVwZW5kX3Rhc2staW5zdGFsbCA9ICIke1BBUkFMTEVMX01BS0VJTlNUfSAiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPcHRpbWl6YXRpb24gZmxhZ3MuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0RFQlVHX0ZMQUdTID89ICItZyAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMiCisjIERpc2FibGVkIHVudGlsIHRoZSBvcHRpb24gd29ya3MgcHJvcGVybHkgLWZlbGltaW5hdGUtZHdhcmYyLWR1cHMKK0ZVTExfT1BUSU1JWkFUSU9OID0gIi1PMiAtcGlwZSAke0RFQlVHX0ZMQUdTfSIKK0RFQlVHX09QVElNSVpBVElPTiA9ICItTyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAke0RFQlVHX0ZMQUdTfSAtcGlwZSIKK1NFTEVDVEVEX09QVElNSVpBVElPTiA9ICIke0BkLmdldFZhcihbJ0ZVTExfT1BUSU1JWkFUSU9OJywgJ0RFQlVHX09QVElNSVpBVElPTiddW2QuZ2V0VmFyKCdERUJVR19CVUlMRCcsIFRydWUpID09ICcxJ10sIFRydWUpfSIKK1NFTEVDVEVEX09QVElNSVpBVElPTlt2YXJkZXBzXSArPSAiRlVMTF9PUFRJTUlaQVRJT04gREVCVUdfT1BUSU1JWkFUSU9OIgorQlVJTERfT1BUSU1JWkFUSU9OID0gIi1PMiAtcGlwZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNldHRpbmdzIHVzZWQgYnkgYml0YmFrZS1sYXllcnMuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0JCTEFZRVJTX0xBWUVSSU5ERVhfVVJMID8/PSAiaHR0cDovL2xheWVycy5vcGVuZW1iZWRkZWQub3JnL2xheWVyaW5kZXgvIgorQkJMQVlFUlNfRkVUQ0hfRElSID8/PSAiJHtDT1JFQkFTRX0iCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEb3dubG9hZCBsb2NhdGlvbnMgYW5kIHV0aWxpdGllcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitBUEFDSEVfTUlSUk9SID0gImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9kaXN0IgorREVCSUFOX01JUlJPUiA9ICJmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbCIKK0dFTlRPT19NSVJST1IgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcyIKK0dOT01FX0dJVCA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnIgorR05PTUVfTUlSUk9SID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzIgorR05VX01JUlJPUiA9ICJodHRwOi8vZnRwLmdudS5vcmcvZ251IgorR1BFX01JUlJPUiA9ICJodHRwOi8vZ3BlLmxpbnV4dG9nby5vcmcvZG93bmxvYWQvc291cmNlIgorS0VSTkVMT1JHX01JUlJPUiA9ICJodHRwOi8va2VybmVsLm9yZy9wdWIiCitTT1VSQ0VGT1JHRV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQiCitYTElCU19NSVJST1IgPSAiaHR0cDovL3hsaWJzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlIgorWE9SR19NSVJST1IgPSAiaHR0cDovL3hvcmcuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzIgorU0FWQU5OQUhfR05VX01JUlJPUiA9ICJodHRwOi8vZG93bmxvYWQuc2F2YW5uYWguZ251Lm9yZy9yZWxlYXNlcyIKK1NBVkFOTkFIX05PTkdOVV9NSVJST1IgPSAiaHR0cDovL2Rvd25sb2FkLnNhdmFubmFoLm5vbmdudS5vcmcvcmVsZWFzZXMiCitDUEFOX01JUlJPUiA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4iCisKK1NSQ19VUklbdmFyZGVwc2V4Y2x1ZGVdICs9ICJcCisgICAgQVBBQ0hFX01JUlJPUiBcCisgICAgQ1BBTl9NSVJST1IgXAorICAgIERFQklBTl9NSVJST1IgXAorICAgIEdFTlRPT19NSVJST1IgXAorICAgIEdOT01FX0dJVCBcCisgICAgR05PTUVfTUlSUk9SIFwKKyAgICBHTlVfTUlSUk9SIFwKKyAgICBHUEVfTUlSUk9SIFwKKyAgICBLRVJORUxPUkdfTUlSUk9SIFwKKyAgICBTQVZBTk5BSF9HTlVfTUlSUk9SIFwKKyAgICBTQVZBTk5BSF9OT05HTlVfTUlSUk9SIFwKKyAgICBTT1VSQ0VGT1JHRV9NSVJST1IgXAorICAgIFhMSUJTX01JUlJPUiBcCisgICAgWE9SR19NSVJST1IgXAorIgorCisjIFlvdSBjYW4gdXNlIHRoZSBtaXJyb3Igb2YgeW91ciBjb3VudHJ5IHRvIGdldCBmYXN0ZXIgZG93bmxvYWRzIGJ5IHB1dHRpbmcKKyMgIGV4cG9ydCBERUJJQU5fTUlSUk9SID0gImZ0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sIgorIyAgICAgaW50byB5b3VyIGxvY2FsLmNvbmYKKworRkVUQ0hDTURfc3ZuID0gIi91c3IvYmluL2VudiBzdm4gLS1ub24taW50ZXJhY3RpdmUgLS10cnVzdC1zZXJ2ZXItY2VydCIKK0ZFVENIQ01EX2N2cyA9ICIvdXNyL2Jpbi9lbnYgY3ZzIgorRkVUQ0hDTURfd2dldCA9ICIvdXNyL2Jpbi9lbnYgd2dldCAtdCAyIC1UIDMwIC1udiAtLXBhc3NpdmUtZnRwIC0tbm8tY2hlY2stY2VydGlmaWNhdGUiCitGRVRDSENNRF9ienIgPSAiL3Vzci9iaW4vZW52IGJ6ciIKK0ZFVENIQ01EX2hnID0gIi91c3IvYmluL2VudiBoZyIKKworU1JDREFURSA9ICIke0RBVEV9IgorU1JDUkVWID8/PSAiSU5WQUxJRCIKK0FVVE9SRVYgPSAiJHtAYmIuZmV0Y2gyLmdldF9hdXRvcmV2KGQpfSIKK1NSQ1BWID0gIiR7QGJiLmZldGNoMi5nZXRfc3JjcmV2KGQpfSIKK1NSQ1BWW3ZhcmRlcHZhbHVlXSA9ICIke1NSQ1BWfSIKKworU1JDX1VSSSA9ICIiCisKKyMgVXNlIHBzZXVkbyBhcyB0aGUgZmFrZXJvb3QgaW1wbGVtZW50YXRpb24KK1BTRVVET19MT0NBTFNUQVRFRElSID89ICIke1dPUktESVJ9L3BzZXVkby8iCitQU0VVRE9fUEFTU1dEID89ICIke1NUQUdJTkdfRElSX1RBUkdFVH06JHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorZXhwb3J0IFBTRVVET19ESVNBQkxFRCA9ICIxIgorI2V4cG9ydCBQU0VVRE9fUFJFRklYID0gIiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0iCisjZXhwb3J0IFBTRVVET19CSU5ESVIgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJfbmF0aXZlfSIKKyNleHBvcnQgUFNFVURPX0xJQkRJUiA9ICIke1NUQUdJTkdfRElSX05BVElWRX0kUFNFVURPQklORElSLy4uL2xpYi9wc2V1ZG8vbGliCitGQUtFUk9PVEJBU0VFTlYgPSAiUFNFVURPX0JJTkRJUj0ke1NUQUdJTkdfQklORElSX05BVElWRX0gUFNFVURPX0xJQkRJUj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vLi4vbGliL3BzZXVkby9saWIgUFNFVURPX1BSRUZJWD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vLi4vLi4vIFBTRVVET19ESVNBQkxFRD0xIgorRkFLRVJPT1RDTUQgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BzZXVkbyIKK0ZBS0VST09URU5WID0gIlBTRVVET19QUkVGSVg9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfSBQU0VVRE9fTE9DQUxTVEFURURJUj0ke1BTRVVET19MT0NBTFNUQVRFRElSfSBQU0VVRE9fUEFTU1dEPSR7UFNFVURPX1BBU1NXRH0gUFNFVURPX05PU1lNTElOS0VYUD0xIFBTRVVET19ESVNBQkxFRD0wIgorRkFLRVJPT1ROT0VOViA9ICJQU0VVRE9fVU5MT0FEPTEiCitGQUtFUk9PVERJUlMgPSAiJHtQU0VVRE9fTE9DQUxTVEFURURJUn0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9mYWtlcm9vdC1uYXRpdmUgPz0gInBzZXVkby1uYXRpdmUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNaXNjZWxsYW5lb3VzIHV0aWxpdGllcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEdOVSBwYXRjaCB0cmllcyB0byBiZSBpbnRlbGxnZW50IGFib3V0IGNoZWNraW5nIG91dCByZWFkLW9ubHkgZmlsZXMgZnJvbQorIyBhIFJDUywgd2hpY2ggZnJlYWtzIG91dCB0aG9zZSBzcGVjaWFsIGZvbGtzIHdpdGggYWN0aXZlIFBlcmZvcmNlIGNsaWVudHMKKyMgdGhlIGZvbGxvd2luZyBtYWtlcyBwYXRjaCBpZ25vcmUgUkNTOgorCitleHBvcnQgUEFUQ0hfR0VUPSIwIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTm90IHN1cmUgYWJvdXQgdGhlIHJlc3Qgb2YgdGhpcyB5ZXQuCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQcmUtYnVpbGQgY29uZmlndXJhdGlvbiBvdXRwdXQKK0JVSUxEQ0ZHX0hFQURFUiA9ICJCdWlsZCBDb25maWd1cmF0aW9uOiIKK0JVSUxEQ0ZHX1ZBUlMgPSAiQkJfVkVSU0lPTiBCVUlMRF9TWVMgTkFUSVZFTFNCU1RSSU5HIFRBUkdFVF9TWVMgTUFDSElORSBESVNUUk8gRElTVFJPX1ZFUlNJT04gVFVORV9GRUFUVVJFUyBUQVJHRVRfRlBVIgorQlVJTERDRkdfVkFSU1t0eXBlXSA9ICJsaXN0IgorQlVJTERDRkdfTkVFREVEVkFSUyA9ICJUQVJHRVRfQVJDSCBUQVJHRVRfT1MiCitCVUlMRENGR19ORUVERURWQVJTW3R5cGVdID0gImxpc3QiCisKKyMgT3RoZXIKKworZXhwb3J0IFBLR19DT05GSUdfRElSID0gIiR7U1RBR0lOR19ESVJfSE9TVH0ke2xpYmRpcn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfUEFUSCA9ICIke1BLR19DT05GSUdfRElSfToke1NUQUdJTkdfREFUQURJUn0vcGtnY29uZmlnIgorZXhwb3J0IFBLR19DT05GSUdfTElCRElSID0gIiR7UEtHX0NPTkZJR19ESVJ9IgorZXhwb3J0IFBLR19DT05GSUdfU1lTUk9PVF9ESVIgPSAiJHtTVEFHSU5HX0RJUl9IT1NUfSIKK2V4cG9ydCBQS0dfQ09ORklHX0RJU0FCTEVfVU5JTlNUQUxMRUQgPSAieWVzIgorCisjIyMKKyMjIyBDb25maWcgZmlsZSBwcm9jZXNzaW5nCisjIyMKKworIyBBbiBlbXB0eSBkaXN0cm8gbGVhZHMgdG8gOjogZW50cmllcyBpbiBPVkVSUklERVMgYW5kIEZJTEVPVkVSUklERVMgd2hpY2gKKyMgaXMgYSBiYWQgaWRlYS4gU2V0dGluZyBhIGR1bW15IHZhbHVlIGlzIGJldHRlciB0aGFuIGEgdG9uIG9mIGFub255bW91cyBweXRob24uCitESVNUUk8gPz89ICJub2Rpc3RybyIKK0RJU1RST19OQU1FID8/PSAiT3BlbkVtYmVkZGVkIgorIyBPdmVycmlkZXMgYXJlIHByb2Nlc3NlZCBsZWZ0IHRvIHJpZ2h0LCBzbyB0aGUgb25lcyB0aGF0IGFyZSBuYW1lZCBsYXRlciB0YWtlIHByZWNlZGVuY2UuCisjIFlvdSBnZW5lcmFsbHkgd2FudCB0aGVtIHRvIGdvIGZyb20gbGVhc3QgdG8gbW9zdCBzcGVjaWZpYy4KKyMKKyMgVGhpcyBtZWFucyB0aGF0IGFuIGVudmlvbm1lbnQgdmFyaWFibGUgbmFtZWQgJzxmb28+X2FybScgb3ZlcnJpZGVzIGFuCisjIGVudmlyb25tZW50IHZhcmlhYmxlICc8Zm9vPicgKHdoZW4gJHtUQVJHRVRfQVJDSH0gaXMgYXJtKS4KKyMgQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgJzxmb28+X3FlbXVhcm0nIG92ZXJyaWRlcyAnPGZvbz4nIGFuZCBvdmVycmlkZXMKKyMgJzxmb28+X2FybScgd2hlbiAke01BQ0hJTkV9IGlzICdxZW11YXJtJy4KKyMgSWYgeW91IHVzZSBjb21iaW5hdGlvbiBpZSAnPGZvbz5fcWVtdWFybV9hcm0nLCB0aGVuICc8Zm9vPl9xZW11YXJtX2FybScgd2lsbCBvdmVycmlkZQorIyAnPGZvbz5fcWVtdWFybScgYW5kIHRoZW4gJzxmb28+JyB3aWxsIGJlIG92ZXJyaWRlbiB3aXRoIHRoYXQgdmFsdWUgZnJvbSAnPGZvbz5fcWVtdWFybScuCisjIEFuZCBmaW5hbGx5ICc8Zm9vPl9mb3JjZXZhcmlhYmxlJyBvdmVycmlkZXMgYW55IHN0YW5kYXJkIHZhcmlhYmxlLCB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5LgorIworIyBUaGlzIHdvcmtzIGZvciAgZnVuY3Rpb25zIGFzIHdlbGwsIHRoZXkgYXJlIHJlYWxseSBqdXN0IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyMgRGVmYXVsdCBPVkVSUklERVMgdG8gbWFrZSBjb21waWxhdGlvbiBmYWlsIGZhc3QgaW4gY2FzZSBvZiBidWlsZCBzeXN0ZW0gbWlzY29uZmlndXJhdGlvbi4KK09WRVJSSURFUyA9ICIke1RBUkdFVF9PU306JHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfTpidWlsZC0ke0JVSUxEX09TfTpwbi0ke1BOfToke01BQ0hJTkVPVkVSUklERVN9OiR7RElTVFJPT1ZFUlJJREVTfToke0NMQVNTT1ZFUlJJREV9OmZvcmNldmFyaWFibGUiCitPVkVSUklERVNbdmFyZGVwc2V4Y2x1ZGVdID0gIk1BQ0hJTkVPVkVSUklERVMiCitDTEFTU09WRVJSSURFID89ICJjbGFzcy10YXJnZXQiCitESVNUUk9PVkVSUklERVMgPz0gIiR7QGQuZ2V0VmFyKCdESVNUUk8nLCBUcnVlKSBvciAnJ30iCitNQUNISU5FT1ZFUlJJREVTID89ICIke01BQ0hJTkV9IgorTUFDSElORU9WRVJSSURFU1t2YXJkZXBzZXhjbHVkZV0gPSAiTUFDSElORSIKKworRklMRVNPVkVSUklERVMgPSAiJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfToke01BQ0hJTkVPVkVSUklERVN9OiR7RElTVFJPT1ZFUlJJREVTfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluY2x1ZGUgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBmaWxlcy4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCityZXF1aXJlIGNvbmYvYWJpX3ZlcnNpb24uY29uZgoraW5jbHVkZSBjb25mL3NpdGUuY29uZgoraW5jbHVkZSBjb25mL2F1dG8uY29uZgoraW5jbHVkZSBjb25mL2xvY2FsLmNvbmYKK2luY2x1ZGUgY29uZi9idWlsZC8ke0JVSUxEX1NZU30uY29uZgoraW5jbHVkZSBjb25mL3RhcmdldC8ke1RBUkdFVF9TWVN9LmNvbmYKK2luY2x1ZGUgY29uZi9tYWNoaW5lLyR7TUFDSElORX0uY29uZgoraW5jbHVkZSBjb25mL21hY2hpbmUtc2RrLyR7U0RLTUFDSElORX0uY29uZgoraW5jbHVkZSBjb25mL2Rpc3Ryby8ke0RJU1RST30uY29uZgoraW5jbHVkZSBjb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZgoraW5jbHVkZSBjb25mL2RvY3VtZW50YXRpb24uY29uZgoraW5jbHVkZSBjb25mL2xpY2Vuc2VzLmNvbmYKK3JlcXVpcmUgY29uZi9zYW5pdHkuY29uZgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgV2VhayB2YXJpYWJsZXMgKHVzdWFsbHkgdG8gcmV0YWluIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0RMX0RJUiA/PSAiJHtUT1BESVJ9L2Rvd25sb2FkcyIKK1NTVEFURV9ESVIgPz0gIiR7VE9QRElSfS9zc3RhdGUtY2FjaGUiCitJTUFHRV9GU1RZUEVTID89ICJ0YXIuZ3oiCitJTklUUkFNRlNfRlNUWVBFUyA/PSAiY3Bpby5neiIKK0RFRkFVTFRfVEFTS19QUk9WSURFUiA/PSAicGFja2FnZWdyb3VwLWJhc2UiCitNQUNISU5FX1RBU0tfUFJPVklERVIgPz0gIiR7REVGQVVMVF9UQVNLX1BST1ZJREVSfSIKKworIyBUaGUgc2l6ZSBpbiBLYnl0ZXMgZm9yIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgaWYgaXQgaXMgbGFyZ2VyIHRoYW4KKyMgdGhlIHJlcXVpcmVkIHNpemUgKGR1IC1rcyBJTUFHRV9ST09URlMgKiBJTUFHRV9PVkVSSEVBRF9GQUNUT1IpLAorIyBhbmQgbm8gZWZmZWN0IGlmIGxlc3MgdGhhbiBpdC4KK0lNQUdFX1JPT1RGU19TSVpFID8/PSAiNjU1MzYiCisKKyMgRm9yY2VmdWxseSBzZXQgQ0FDSEUgbm93IHNvIGZ1dHVyZSBjaGFuZ2VzIHRvIHRoaW5ncyBsaWtlCisjIE1BQ0hJTkUgZG9uJ3QgY2hhbmdlIHRoZSBwYXRoIHRvIHRoZSBjYWNoZQorQ0FDSEUgOj0gIiR7Q0FDSEV9IgorCisjIERlZmF1bHQgdG8gc2V0dGluZyBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGNwdSBjb3VudAorQkJfTlVNQkVSX1RIUkVBRFMgPz0gIiR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKworIyBEZWZhdWx0IHRvIHNldHRpbmcgYXV0b21hdGljYWxseSBiYXNlZCBvbiBjcHUgY291bnQKK1BBUkFMTEVMX01BS0UgPz0gIi1qICR7QG9lLnV0aWxzLmNwdV9jb3VudCgpfSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1hZ2ljIENvb2tpZSBmb3IgU0FOSVRZIENIRUNLCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK09FU19CSVRCQUtFX0NPTkYgPSAiMSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1hY2hpbmUgcHJvcGVydGllcyBhbmQgcGFja2FnZWdyb3VwLWJhc2Ugc3R1ZmYKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitNQUNISU5FX0ZFQVRVUkVTID89ICIiCitESVNUUk9fRkVBVFVSRVMgPz0gIiIKKworRElTVFJPX0VYVFJBX1JERVBFTkRTID89ICIiCitESVNUUk9fRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKK01BQ0hJTkVfRVhUUkFfUkRFUEVORFMgPz0gIiIKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPz0gIiIKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTID89ICIiCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyA/PSAiIgorCitFWFRSQV9JTUFHRV9GRUFUVVJFUyA/Pz0gIiIKK0lNQUdFX0ZFQVRVUkVTICs9ICIke0VYVFJBX0lNQUdFX0ZFQVRVUkVTfSIKKworRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMID0gInB1bHNlYXVkaW8gc3lzdmluaXQgYmx1ZXo1IgorTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCA9ICJydGMiCisKK0NPTUJJTkVEX0ZFQVRVUkVTID0gIiR7QG9lLnV0aWxzLnNldF9pbnRlcnNlY3QoJ0RJU1RST19GRUFUVVJFUycsICdNQUNISU5FX0ZFQVRVUkVTJywgZCl9IgorQ09NQklORURfRkVBVFVSRVNbdmFyZGVwc10gKz0gIkRJU1RST19GRUFUVVJFUyBNQUNISU5FX0ZFQVRVUkVTIgorCitTRVJJQUxfQ09OU09MRSA/Pz0gIiIKK1NFUklBTF9DT05TT0xFUyA/Pz0gIiR7QGQuZ2V0VmFyKCdTRVJJQUxfQ09OU09MRScsIFRydWUpLnJlcGxhY2UoJyAnLCAnOycpfSIKKworTk9fUkVDT01NRU5EQVRJT05TID89ICIiCitCQURfUkVDT01NRU5EQVRJT05TID89ICIiCisKKyMgTWFrZSBzdXJlIE1BQ0hJTkUgaXNuJ3QgZXhwb3J0ZWQKKyMgKGJyZWFrcyBiaW51dGlscyBhdCBsZWFzdCkKK01BQ0hJTkVbdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIFRBUkdFVF9BUkNIIGlzbid0IGV4cG9ydGVkCisjIChicmVha3MgTWFrZWZpbGVzIHVzaW5nIGltcGxpY2l0IHJ1bGVzLCBlLmcuIHF1aWx0LCBhcyBHTlUgbWFrZSBoYXMgdGhpcworIyBpbiB0aGVtLCB1bmRvY3VtZW50ZWQpCitUQVJHRVRfQVJDSFt1bmV4cG9ydF0gPSAiMSIKKworIyBNYWtlIHN1cmUgRElTVFJPIGlzbid0IGV4cG9ydGVkCisjIChicmVha3Mgc3lzdmluaXQgYXQgbGVhc3QpCitESVNUUk9bdW5leHBvcnRdID0gIjEiCisKKyMgTWFrZSBzdXJlIFNIRUxMIGlzbid0IGV4cG9ydGVkCisjIChjYW4gYnJlYWsgYW55IG51bWJlciBvZiB0aGluZ3MgaWYgdGhlIHVzZXIncyBzaGVsbCBpc24ndCBQT1NJWC1jb21wbGlhbnQsCisjIGluY2x1ZGluZyB0aGUgZmxvY2sgY29tbWFuZCkuIFRoZSB1c2VyJ3Mgc2hlbGwgc2hvdWxkbid0IGFmZmVjdCBvdXIgYnVpbGRzLgorU0hFTExbdW5leHBvcnRdID0gIjEiCisKKyMgVXNlZCBieSBjYW5hZGlhbi1jcm9zcyB0byBoYW5kbGUgc3RyaW5nIGNvbnZlcnNpb25zIG9uIFRBUkdFVF9BUkNIIHdoZXJlIG5lZWRlZAorVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCA/Pz0gIiR7QGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLnJlcGxhY2UoIl8iLCAiLSIpfSIKKworIyBDb21wbGV0ZSBvdXRwdXQgZnJvbSBiaXRiYWtlCitCQl9DT05TT0xFTE9HID89ICIke0xPR19ESVJ9L2Nvb2tlci8ke01BQ0hJTkV9LyR7REFURVRJTUV9LmxvZyIKKworIyBTZXR1cCBvdXIgZGVmYXVsdCBoYXNoIHBvbGljeQorQkJfU0lHTkFUVVJFX0hBTkRMRVIgPz0gIk9FQmFzaWNIYXNoIgorQkJfSEFTSEJBU0VfV0hJVEVMSVNUID89ICJUTVBESVIgRklMRSBQQVRIIFBXRCBCQl9UQVNLSEFTSCBCQlBBVEggRExfRElSIFwKKyAgICBTU1RBVEVfRElSIFRISVNESVIgRklMRVNFWFRSQVBBVEhTIEZJTEVfRElSTkFNRSBIT01FIExPR05BTUUgU0hFTEwgVEVSTSBcCisgICAgVVNFUiBGSUxFU1BBVEggU1RBR0lOR19ESVJfSE9TVCBTVEFHSU5HX0RJUl9UQVJHRVQgQ09SRUJBU0UgUFJTRVJWX0hPU1QgXAorICAgIFBSU0VSVl9EVU1QRElSIFBSU0VSVl9EVU1QRklMRSBQUlNFUlZfTE9DS0RPV04gUEFSQUxMRUxfTUFLRSBcCisgICAgQ0NBQ0hFX0RJUiBFWFRFUk5BTF9UT09MQ0hBSU4gQ0NBQ0hFIENDQUNIRV9ESVNBQkxFIExJQ0VOU0VfUEFUSCBTREtQS0dTVUZGSVggXAorICAgIFdBUk5fUUEgRVJST1JfUUEgV09SS0RJUiBTVEFNUENMRUFOIFBLR0RBVEFfRElSIEJVSUxEX0FSQ0ggU1NUQVRFX1BLR0FSQ0giCitCQl9IQVNIQ09ORklHX1dISVRFTElTVCA/PSAiJHtCQl9IQVNIQkFTRV9XSElURUxJU1R9IERBVEUgVElNRSBTU0hfQUdFTlRfUElEIFwKKyAgICBTU0hfQVVUSF9TT0NLIFBTRVVET19CVUlMRCBCQl9FTlZfRVhUUkFXSElURSBESVNBQkxFX1NBTklUWV9DSEVDS1MgXAorICAgIFBBUkFMTEVMX01BS0UgQkJfTlVNQkVSX1RIUkVBRFMgQkJfT1JJR0VOViBCQl9JTlZBTElEQ09ORiBCQklOQ0xVREVEIgorQkJfU0lHTkFUVVJFX0VYQ0xVREVfRkxBR1MgPz0gImRvYyBkZXBzIGRlcGVuZHMgXAorICAgIGxvY2tmaWxlcyB0eXBlIHZhcmRlcHNleGNsdWRlIHZhcmRlcHMgdmFyZGVwdmFsdWUgdmFyZGVwdmFsdWVleGNsdWRlIFwKKyAgICBmaWxlLWNoZWNrc3VtcyBweXRob24gZnVuYyB0YXNrIGV4cG9ydCB1bmV4cG9ydCBub2V4ZWMgbm9zdGFtcCBkaXJzIGNsZWFuZGlycyBcCisgICAgc3N0YXRlLWxvY2tmaWxlLXNoYXJlZCBwcmVmdW5jcyBwb3N0ZnVuY3MgZXhwb3J0X2Z1bmMgZGVwdGFzayByZGVwdGFzayBcCisgICAgcmVjcmRlcHRhc2sgbm9kZXBycmVjcyBzdGFtcC1iYXNlIHN0YW1wLWV4dHJhLWluZm8iCisKK01MUFJFRklYID8/PSAiIgorTVVMVElMSUJfVkFSSUFOVFMgPz89ICIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQgYi9tZXRhL2NvbmYvY29uZi1ub3Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZlNjMxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9jb25mLW5vdGVzLnR4dApAQCAtMCwwICsxLDggQEAKK0NvbW1vbiB0YXJnZXRzIGFyZToKKyAgICBjb3JlLWltYWdlLW1pbmltYWwKKyAgICBjb3JlLWltYWdlLXNhdG8KKyAgICBtZXRhLXRvb2xjaGFpbgorICAgIGFkdC1pbnN0YWxsZXIKKyAgICBtZXRhLWlkZS1zdXBwb3J0CisKK1lvdSBjYW4gYWxzbyBydW4gZ2VuZXJhdGVkIHFlbXUgaW1hZ2VzIHdpdGggYSBjb21tYW5kIGxpa2UgJ3J1bnFlbXUgcWVtdXg4NicKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vZGVmYXVsdHNldHVwLmNvbmYgYi9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzY1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2RlZmF1bHRzZXR1cC5jb25mCkBAIC0wLDAgKzEsMjMgQEAKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYworaW5jbHVkZSBjb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMKK2luY2x1ZGUgY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCisKK1RDTU9ERSA/PSAiZGVmYXVsdCIKK3JlcXVpcmUgY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtJHtUQ01PREV9LmluYworCitUQ0xJQkMgPz0gImdsaWJjIgorcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy0ke1RDTElCQ30uaW5jCisKKyMgQWxsb3cgc2luZ2xlIGxpYmMgZGlzdHJvcyB0byBkaXNhYmxlIHRoaXMgY29kZQorVENMSUJDQVBQRU5EID89ICItJHtUQ0xJQkN9IgorVE1QRElSIC49ICIke1RDTElCQ0FQUEVORH0iCisKK0NBQ0hFID0gIiR7VE1QRElSfS9jYWNoZS8ke1RDTU9ERX0tJHtUQ0xJQkN9JHtAWycnLCAnLycgKyBzdHIoZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldW2Jvb2woZC5nZXRWYXIoJ01BQ0hJTkUnLCBUcnVlKSldfSR7QFsnJywgJy8nICsgc3RyKGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSkpXVtib29sKGQuZ2V0VmFyKCdTREtNQUNISU5FJywgVHJ1ZSkpXX0iCisKK1VTRVJfQ0xBU1NFUyA/PSAiIgorUEFDS0FHRV9DTEFTU0VTID89ICJwYWNrYWdlX2lwayIKK0lOSEVSSVRfQkxBQ0tMSVNUID0gImJsYWNrbGlzdCIKK0lOSEVSSVRfRElTVFJPID89ICJkZWJpYW4gZGV2c2hlbGwgc3N0YXRlIGxpY2Vuc2UiCitJTkhFUklUICs9ICIke1BBQ0tBR0VfQ0xBU1NFU30gJHtVU0VSX0NMQVNTRVN9ICR7SU5IRVJJVF9ESVNUUk99ICR7SU5IRVJJVF9CTEFDS0xJU1R9IgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9hcy1uZWVkZWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjQ5ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvYXMtbmVlZGVkLmluYwpAQCAtMCwwICsxLDE3IEBACisKK0FTTkVFREVEID0gIi1XbCwtLWFzLW5lZWRlZCIKKworQVNORUVERURfcG4tYmFiZWx0cmFjZSA9ICIiCitBU05FRURFRF9wbi1jb25zb2xlLXRvb2xzID0gIiIKK0FTTkVFREVEX3BuLWRpc3RjYyA9ICIiCitBU05FRURFRF9wbi1vcGVub2JleCA9ICIiCitBU05FRURFRF9wbi1pY3UgPSAiIgorQVNORUVERURfcG4teHNlcnZlci1rZHJpdmUteG9tYXAgPSAiIgorQVNORUVERURfcG4tbWluaW1vID0gIiIKK0FTTkVFREVEX3BuLXBjaXV0aWxzID0gIiIKK0FTTkVFREVEX3BuLXB1enpsZXMgPSAiIgorQVNORUVERURfcG4tZGlhbGVyID0gIiIKK0FTTkVFREVEX3BuLXB1bHNlYXVkaW8gPSAiIgorQVNORUVERURfcG4tcnBtID0gIiIKKworVEFSR0VUX0xERkxBR1MgKz0gIiR7QVNORUVERUR9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGVmYXVsdC1kaXN0cm92YXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWI3NjJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtZGlzdHJvdmFycy5pbmMKQEAgLTAsMCArMSw0OSBAQAorUUFfTE9HRklMRSA9ICIke1RNUERJUn0vcWEubG9nIgorCitPRUlOQ0xVREVMT0dTID89ICJ5ZXMiCitLRVJORUxfQ09OU09MRSA/PSAidHR5UzAiCitLRUVQVUlNQUdFID8/PSAieWVzIgorCitJTUFHRV9MSU5HVUFTID89ICJlbi11cyBlbi1nYiIKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04gPz0gIjEiCitMT0NBTEVfVVRGOF9PTkxZID89ICIwIgorCitESVNUUk9fRkVBVFVSRVNfREVGQVVMVCA/PSAiYWxzYSBhcmdwIGJsdWV0b290aCBleHQyIGlyZGEgbGFyZ2VmaWxlIHBjbWNpYSB1c2JnYWRnZXQgdXNiaG9zdCB3aWZpIHhhdHRyIG5mcyB6ZXJvY29uZiBwY2kgM2cgbmZjIHgxMSIKK0RJU1RST19GRUFUVVJFU19MSUJDX0RFRkFVTFQgPz0gImlwdjQgaXB2NiBsaWJjLWJhY2t0cmFjZSBsaWJjLWJpZy1tYWNyb3MgbGliYy1ic2QgbGliYy1jeHgtdGVzdHMgbGliYy1jYXRnZXRzIGxpYmMtY2hhcnNldHMgbGliYy1jcnlwdCBcCisJCQkJCWxpYmMtY3J5cHQtdWZjIGxpYmMtZGItYWxpYXNlcyBsaWJjLWVudnogbGliYy1mY3Z0IGxpYmMtZm10bXNnIGxpYmMtZnN0YWIgbGliYy1mdHJhdmVyc2UgXAorCQkJCQlsaWJjLWdldGxvZ2luIGxpYmMtaWRuIGxpYmMtaW5ldC1hbmwgbGliYy1saWJtIGxpYmMtbG9jYWxlcyBsaWJjLWxvY2FsZS1jb2RlIFwKKwkJCQkJbGliYy1tZW11c2FnZSBsaWJjLW5pcyBsaWJjLW5zc3dpdGNoIGxpYmMtcmNtZCBsaWJjLXJ0bGQtZGVidWcgbGliYy1zcGF3biBsaWJjLXN0cmVhbXMgbGliYy1zdW5ycGMgXAorCQkJCQlsaWJjLXV0bXAgbGliYy11dG1weCBsaWJjLXdvcmRleHAgbGliYy1wb3NpeC1jbGFuZy13Y2hhciBsaWJjLXBvc2l4LXJlZ2V4cCBsaWJjLXBvc2l4LXJlZ2V4cC1nbGliYyBcCisJCQkJCWxpYmMtcG9zaXgtd2NoYXItaW8iCitESVNUUk9fRkVBVFVSRVNfTElCQyA/PSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ19ERUZBVUxUfSIKK0RJU1RST19GRUFUVVJFU19MSUJDX2NsYXNzLW5hdGl2ZXNkayA9ICIke0RJU1RST19GRUFUVVJFU19MSUJDX0RFRkFVTFR9IgorRElTVFJPX0ZFQVRVUkVTID89ICIke0RJU1RST19GRUFUVVJFU19ERUZBVUxUfSAke0RJU1RST19GRUFUVVJFU19MSUJDfSIKKworSU1BR0VfRkVBVFVSRVMgPz0gIiIKKworIyBUaGlzIGlzIGEgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIGRpc3RyaWJ1dGlvbiwgdGhleSBhcmUgbm90CisjIGRpcmVjdGx5IHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gCitIT1NUVE9PTFNfV0hJVEVMSVNUX0dQTC0zLjAgPz0gIiIKK1dISVRFTElTVF9HUEwtMy4wID89ICJsZXNzIgorTEdQTHYyX1dISVRFTElTVF9HUEwtMy4wID89ICJsaWJhc3N1YW4gZ251dGxzIGxpYnRhc24xIGxpYmlkbiIKKworQ09NTUVSQ0lBTF9BVURJT19QTFVHSU5TID89ICIiCisjIENPTU1FUkNJQUxfQVVESU9fUExVR0lOUyA/PSAiZ3N0LXBsdWdpbnMtdWdseS1tYWQgZ3N0LXBsdWdpbnMtdWdseS1tcGVnYXVkaW9wYXJzZSIKK0NPTU1FUkNJQUxfVklERU9fUExVR0lOUyA/PSAiIgorIyBDT01NRVJDSUFMX1ZJREVPX1BMVUdJTlMgPz0gImdzdC1wbHVnaW5zLXVnbHktbXBlZzJkZWMgZ3N0LXBsdWdpbnMtdWdseS1tcGVnc3RyZWFtIGdzdC1wbHVnaW5zLWJhZC1tcGVndmlkZW9wYXJzZSIKK0NPTU1FUkNJQUxfUVQgPz0gIiIKKyMgQ09NTUVSQ0lBTF9RVCA/PSAicW1tcCIKKyMgU2V0IG9mIGNvbW1vbiBsaWNlbnNlcyB1c2VkIGZvciBsaWNlbnNlLmJiY2xhc3MKK0NPTU1PTl9MSUNFTlNFX0RJUiA/Pz0gIiR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzIgorCitCQl9HRU5FUkFURV9NSVJST1JfVEFSQkFMTFMgPz89ICIwIgorCitOTzMyTElCUyA/Pz0gIjEiCisKKyMgRGVmYXVsdCB0byBlbWl0dGluZyBsb2dmaWxlcyBpZiBhIGJ1aWxkIGZhaWxzLgorQkJJTkNMVURFTE9HUyA/Pz0gInllcyIKK1NES19WRVJTSU9OID8/PSAibm9kaXN0cm8uMCIKK0RJU1RST19WRVJTSU9OID8/PSAibm9kaXN0cm8uMCIKKworIyBNaXNzaW5nIGNoZWNrc3VtcyBzaG91bGQgcmFpc2UgYW4gZXJyb3IKK0JCX1NUUklDVF9DSEVDS1NVTSA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtcHJvdmlkZXJzLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NGQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXByb3ZpZGVycy5pbmMKQEAgLTAsMCArMSw1MSBAQAorIworIyBEZWZhdWx0IHZpcnR1YWwgcHJvdmlkZXJzCisjCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYiA/PSAiZGIiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9kYi1uYXRpdmUgPz0gImRiLW5hdGl2ZSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIteGY4NiA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZWdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbWVzYSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMgPz0gIm9wa2ctdXRpbHMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzLW5hdGl2ZSA/PSAib3BrZy11dGlscy1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJ4MTEgPz0gImxpYngxMSIKK1BSRUZFUlJFRF9QUk9WSURFUl94Zjg2LXZpZGVvLWludGVsID89ICJ4Zjg2LXZpZGVvLWludGVsIgorCisjCisjIERlZmF1bHQgdmlydHVhbCBydW50aW1lIHByb3ZpZGVycworIworVklSVFVBTC1SVU5USU1FX3VwZGF0ZS1hbHRlcm5hdGl2ZXMgPz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyIKK1ZJUlRVQUwtUlVOVElNRV9hcG0gPz0gImFwbSIKK1ZJUlRVQUwtUlVOVElNRV9hbHNhLXN0YXRlID89ICJhbHNhLXN0YXRlIgorVklSVFVBTC1SVU5USU1FX2dldG9wdCA/PSAidXRpbC1saW51eC1nZXRvcHQiCitWSVJUVUFMLVJVTlRJTUVfd2lyZWxlc3MtdG9vbHMgPz0gIml3IHdpcmVsZXNzLXRvb2xzIgorCisjCisjIERlZmF1bHQgcmVjaXBlIHByb3ZpZGVycworIworUFJFRkVSUkVEX1BST1ZJREVSX2RidXMtZ2xpYiA/PSAiZGJ1cy1nbGliIgorUFJFRkVSUkVEX1BST1ZJREVSX2RidXMtZ2xpYi1uYXRpdmUgPz0gImRidXMtZ2xpYi1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfZ2RrLXBpeGJ1ZiA/PSAiZ2RrLXBpeGJ1ZiIKK1BSRUZFUlJFRF9QUk9WSURFUl9saWJnY2MgPz0gImxpYmdjYyIKK1BSRUZFUlJFRF9QUk9WSURFUl9uYXRpdmVzZGstbGliZ2NjID89ICJuYXRpdmVzZGstbGliZ2NjIgorUFJFRkVSUkVEX1BST1ZJREVSX2xpbnV4LWxpYmMtaGVhZGVycyA/PSAibGludXgtbGliYy1oZWFkZXJzIgorUFJFRkVSUkVEX1BST1ZJREVSX25hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMgPz0gIm5hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMiCitQUkVGRVJSRURfUFJPVklERVJfbWF0Y2hib3gtcGFuZWwgPz0gIm1hdGNoYm94LXBhbmVsLTIiCitQUkVGRVJSRURfUFJPVklERVJfb3BrZyA/PSAib3BrZyIKK1BSRUZFUlJFRF9QUk9WSURFUl9vcGtnLW5hdGl2ZSA/PSAib3BrZy1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfbmF0aXZlc2RrLW9wa2cgPz0gIm5hdGl2ZXNkay1vcGtnIgorUFJFRkVSUkVEX1BST1ZJREVSX2NvbnNvbGUtdG9vbHMgPz0gImtiZCIKK1BSRUZFUlJFRF9QUk9WSURFUl9nemlwLW5hdGl2ZSA/PSAicGlnei1uYXRpdmUiCitQUkVGRVJSRURfUFJPVklERVJfbWFrZSA/PSAibWFrZSIKK1BSRUZFUlJFRF9QUk9WSURFUl91ZGV2ID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQnLCd1ZGV2JyxkKX0iCisjIFRoZXJlIGFyZSBpc3N1ZXMgd2l0aCBydW50aW1lIHBhY2thZ2VzIGFuZCBQUkVGRVJSRURfUFJPVklERVIsIHNlZSBZT0NUTyAjNTA0NCBmb3IgZGV0YWlscworIyBvbiB0aGlzIHJhdGhlciBzdHJhbmdlIGVudHJ5LgorUFJFRkVSUkVEX1BST1ZJREVSX2JsdWV6NCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ2JsdWV0b290aCBibHVlejUnLCdibHVlejUnLCdibHVlejQnLGQpfSIKK1BSRUZFUlJFRF9QUk9WSURFUl9ibHVlei1oY2lkdW1wID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnYmx1ZXRvb3RoIGJsdWV6NScsJ2JsdWV6NScsJ2JsdWV6LWhjaWR1bXAnLGQpfSIKKyMgQWx0ZXJuYXRpdmUgaXMgbHRwLWRkdCBpbiBtZXRhLW9lOiBtZXRhLW9lL3JlY2lwZXMtZGV2dG9vbHMvbHRwLWRkdC9sdHAtZGR0XzAuMC40LmJiCitQUkVGRVJSRURfUFJPVklERVJfbHRwID89ICJsdHAiCitQUkVGRVJSRURfUFJPVklERVJfZ2V0b3B0ID89ICJ1dGlsLWxpbnV4LWdldG9wdCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kZWZhdWx0LXZlcnNpb25zLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMwNjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL2RlZmF1bHQtdmVyc2lvbnMuaW5jCkBAIC0wLDAgKzEsMTUgQEAKKyMKKyMgRGVmYXVsdCBwcmVmZXJyZWQgdmVyc2lvbnMKKyMKKworIyBGb3JjZSB0aGUgcHl0aG9uIHZlcnNpb25zIGluIG9uZSBwbGFjZQorUFlUSE9OX0JBU0VWRVJTSU9OID89ICIyLjciCitQUkVGRVJSRURfVkVSU0lPTl9weXRob24gPz0gIjIuNy45IgorUFJFRkVSUkVEX1ZFUlNJT05fcHl0aG9uLW5hdGl2ZSA/PSAiMi43LjkiCisKKyMgRm9yY2UgdGhlIG9sZGVyIHZlcnNpb24gb2YgbGliZXJhdGlvbi1mb250cyB1bnRpbCB3ZSBmaXggdGhlIGZvbnRmb3JnZSBpc3N1ZQorUFJFRkVSUkVEX1ZFUlNJT05fbGliZXJhdGlvbi1mb250cyA/PSAiMS4wNCIKKworIyBGb3JjZSBkYi1uYXRpdmUncyB2ZXJzaW9uIHRvIGtlZXAgc3luYyB3aXRoIGRiIHdoaWxlCisjICdBR1BMLTMuMCcgaW4gJHtJTkNPTVBBVElCTEVfTElDRU5TRX0gYmxhY2tsaXN0CitQUkVGRVJSRURfVkVSU0lPTl9kYi1uYXRpdmUgPSAiJHtAaW5jb21wYXRpYmxlX2xpY2Vuc2VfY29udGFpbnMoJ0FHUEwtMy4wJywgJzUuJScsICc2LiUnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9kaXN0cm9fYWxpYXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkM2RhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvZGlzdHJvX2FsaWFzLmluYwpAQCAtMCwwICsxLDUzNiBAQAorIworIyBUaGlzIGlzIGEgbGlzdCBmb3IgdHJhY2tpbmcgc3RhdHVzIG9mIHBhY2thZ2UgcmVsYXRpdmUgdG8gTWFqb3IKKyMgZGlzdHJpYnV0aW9ucyBzdWNoIGFzIEZlZG9yYSwgVWJ1bnR1LCBEZWJpYW4sIC4uLiBUaGUgcGFja2FnZQorIyBuYW1lIGlzIHRoZSBtYWpvciBkaXN0cmlidXRpb24gZXF1aXZhbGVudCB0byB0aGUgbmFtZSB1c2VkIGluIG9lLWNvcmUKKyMKKyMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCisjCisjICAgICAgIERJU1RST19QTl9BTElBU19wbi08cmVjaXBlIG5hbWU+ID0gIkRpc3RybzE9PHBrZ25hbWU+IERpc3RybzI9PHBrZ25hbWU+IgorIworIyBQbGVhc2Uga2VlcCB0aGlzIGxpc3QgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorIworRElTVFJPX1BOX0FMSUFTX3BuLWFhaW5hID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWFiaXdvcmQtZW1iZWRkZWQgPSAiRmVkb3JhPWFiaXdvcmQgVWJ1bnR1PWFiaXdvcmQiCitESVNUUk9fUE5fQUxJQVNfcG4tYWR0LWluc3RhbGxlciA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1hbHNhLXN0YXRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYWxzYS11dGlscy1hbHNhY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWF0ayA9ICJGZWRvcmE9YXRrIE9wZW5TdVNFPWF0ayIKK0RJU1RST19QTl9BTElBU19wbi1hdWdlYXMgPSAiVWJ1bnR1PWxpYmF1Z2VhczAgRGViaWFuPWxpYmF1Z2VhczAiCitESVNUUk9fUE5fQUxJQVNfcG4tYXZhaGktdWkgPSAiVWJ1bnR1PWF2YWhpLWRpc2NvdmVyIERlYmlhbj1hdmFoaS1kaXNjb3ZlciIKK0RJU1RST19QTl9BTElBU19wbi1iYWJlbHRyYWNlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWJkd2djID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWJpZ3JlcXNwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1iaWdyZXFzcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tYmphbSA9ICJPcGVuU3VTRT1ib29zdC1qYW0gRGViaW5hPWJqYW0iCitESVNUUk9fUE5fQUxJQVNfcG4tYmxrdG9vbCA9ICJEZWJpYW49YmxrdG9vbCBNYW5kcml2YT1ibGt0b29sIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsdWV6NCA9ICJVYnVudHU9Ymx1ZXogRGViaWFuPWJsdWV6LXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLWJsdWV6NSA9ICJGZWRvcmE9Ymx1ZXogIE9wZW5zdXNlPWJsdWV6IgorRElTVFJPX1BOX0FMSUFTX3BuLWJsdWV6LWR0bDEtd29ya2Fyb3VuZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWJvb3RjaGFydDIgPSAiRmVkb3JhPWJvb3RjaGFydDIgT3BlbnN1c2U9Ym9vdGNoYXJ0IgorRElTVFJPX1BOX0FMSUFTX3BuLWJ0cmZzLXRvb2xzID0gIkRlYmlhbj1idHJmcy10b29scyBGZWRvcmE9YnRyZnMtcHJvZ3MiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGQtYXBwbGlhbmNlLWltYWdlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWJ1aWxkLWNvbXBhcmUgPSAiT3BlbnN1c2U9YnVpbGQtY29tcGFyZSBGZWRvcmE9YnVpbGQtY29tcGFyZSIKK0RJU1RST19QTl9BTElBU19wbi1idWlsZGVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tYnVpbGR0b29scy10YXJiYWxsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY2FsaWJyYXRlcHJvdG8gPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3hvcmcvcHJvdG8vY2FsaWJyYXRlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tY2RydG9vbHMgPSAiT3BlblNVU0U9Y2RydG9vbHMgT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tY2hrY29uZmlnLWFsdGVybmF0aXZlcyA9ICJNYW5kcml2YT1jaGtjb25maWcgRGViaWFuPWNoa2NvbmZpZyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tZ3RraHRtbDItdmlld2VyID0gIkZlZG9yYT1jbGF3cy1tYWlsLXBsdWdpbnMgT3BlblN1U0U9Y2xhd3MtbWFpbC1leHRyYS1wbHVnaW5zIERlYmlhbj1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tY2xhd3MtcGx1Z2luLW1haWxkaXIgPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tbWFpbG1ib3ggPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGF3cy1wbHVnaW4tcnNzeWwgPSAiRmVkb3JhPWNsYXdzLW1haWwtcGx1Z2lucyBPcGVuU3VTRT1jbGF3cy1tYWlsLWV4dHJhLXBsdWdpbnMgRGViaWFuPWNsYXdzLW1haWwtZXh0cmEtcGx1Z2lucyIKK0RJU1RST19QTl9BTElBU19wbi1jbGlwYm9hcmQtbWFuYWdlciA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXIgPSAiRmVkb3JhPWNsdXR0ZXIgT3BlblN1c2U9Y2x1dHRlciBVYnVudHU9Y2x1dHRlci0xLjAgTWFuZHJpdmE9Y2x1dHRlciBEZWJpYW49Y2x1dHRlciIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLTEuOCA9ICJGZWRvcmE9Y2x1dHRlciBPcGVuU3VzZT1jbHV0dGVyIFVidW50dT1jbHV0dGVyLTEuMCBNYW5kcml2YT1jbHV0dGVyIERlYmlhbj1jbHV0dGVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWNsdXR0ZXItZ3N0LTEuMCA9ICJEZWJpYW49Y2x1dHRlci1nc3QgVWJ1bnR1PWNsdXR0ZXItZ3N0IEZlZG9yYT1jbHV0dGVyLWdzdCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWdzdC0xLjggPSAiRmVkb3JhPWNsdXR0ZXItZ3N0IERlYmlhbj1saWJjbHV0dGVyLWdzdCIKK0RJU1RST19QTl9BTElBU19wbi1jbHV0dGVyLWd0ay0xLjAgPSAiRGViaWFuPWNsdXR0ZXItZ3RrIFVidW50dT1jbHV0dGVyLWd0ayBGZWRvcmE9Y2x1dHRlci1ndGsiCitESVNUUk9fUE5fQUxJQVNfcG4tY2x1dHRlci1ndGstMS44ID0gIkZlZG9yYT1jbHV0dGVyLWd0ayBPcGVuU3VTRT1jbHV0dGVyLWd0ayBVYnVudHU9Y2x1dHRlci1ndGstMC4xMCBNYW5kcml2YT1jbHV0dGVyLWd0ayBEZWJpYW49Y2x1dHRlci1ndGsiCitESVNUUk9fUE5fQUxJQVNfcG4tY29nbC0xLjAgPSAiRGViaWFuPWNvZ2wgVWJ1bnR1PWNvZ2wgRmVkb3JhPWNvZ2wiCitESVNUUk9fUE5fQUxJQVNfcG4tY29nbCA9ICJGZWRvcmE9Y29nbCBPcGVuU3VzZT1jb2dsIFVidW50dT1jb2dsIE1hbmRyaXZhPWNvZ2wgRGViaWFuPWNvZ2wiCitESVNUUk9fUE5fQUxJQVNfcG4tY29tcG9zaXRlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tY29tcG9zaXRlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tY29ubm1hbiA9ICJNZWVnbz1jb25ubWFuIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4tY29uZiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvbm5tYW4tZ25vbWUgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tY29uc29sZS10b29scyA9ICJEZWJpYW49Y29uc29sZS10b29scyBVYnVudHU9Y29uc29sZS10b29scyIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWNsdXR0ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWRpcmVjdGZiID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1mdWxsLWNtZGxpbmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWtlcm5lbC1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLWxzYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiLWRldiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiLXF0MyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbHNiLXNkayA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtbWluaW1hbC1kZXYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1ydCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2UtcnQtc2RrID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1zYXRvID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS1zYXRvLWRldiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNvcmUtaW1hZ2Utc2F0by1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXRlc3RtYXN0ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY29yZS1pbWFnZS13ZXN0b24gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jb3JlLWltYWdlLXgxMSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWNyb3NzLWxvY2FsZWRlZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1jcnlwdG9kZXYtbGludXggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1jcnlwdG9kZXYtbW9kdWxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3J5cHRvZGV2LXRlc3RzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tY3dhdXRvbWFjcm9zID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jd2F1dG9tYWNyb3MuYmVybGlvcy5kZS8iCitESVNUUk9fUE5fQUxJQVNfcG4tZGFtYWdlcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZGFtYWdlcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tZGIgPSAiRGViaWFuPWRiNS4xIFVidW50dT1kYjUuMSIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXB0ZXN0ID0gIkZlZG9yYT1kYnVzIFVidW50dT1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRidXMtdGVzdCA9ICJGZWRvcmE9ZGJ1cyBVYnVudHU9ZGJ1cyIKK0RJU1RST19QTl9BTElBU19wbi1kYnVzLXdhaXQgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1kZXBtb2R3cmFwcGVyLWNyb3NzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZGlyZWN0ZmItZXhhbXBsZXMgPSAiRGViaWFuPWRpcmVjdGZiIEZlZG9yYT1kaXJlY3RmYiIKK0RJU1RST19QTl9BTElBU19wbi1kaXN0Y2MgPSAiRGViaWFuPWRpc3RjYyBGZWRvcmE9ZGlzdGNjIgorRElTVFJPX1BOX0FMSUFTX3BuLWRpc3RjYy1jb25maWcgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1kbXhwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1kbXhwcm90byBVYnVudHU9eDExcHJvdG8tZG14IERlYmlhbj14MTFwcm90by1kbXgiCitESVNUUk9fUE5fQUxJQVNfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cyA9ICJGZWRvcmE9ZG9jYm9vay1zdHlsZS1kc3NzbCBVYnVudHU9ZG9jYm9vay1kc3NzbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXNnbWwtZHRkLTMuMSA9ICJGZWRvcmE9ZG9jYm9vay1kdGRzIE1hbmRyaXZhPWRvY2Jvb2stZHRkMzEtc2dtbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXNnbWwtZHRkLTQuMSA9ICJGZWRvcmE9ZG9jYm9vay1kdGRzIE1hbmRyaXZhPWRvY2Jvb2stZHRkNDEtc2dtbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXNnbWwtZHRkLTQuNSA9ICJGZWRvcmE9ZG9jYm9vay1kdGRzIE1hbmRyaXZhPWRvY2Jvb2stZHRkNDItc2dtbCIKK0RJU1RST19QTl9BTElBU19wbi1kb2Nib29rLXhtbC1kdGQ0ID0gIlVidW50dT1kb2Nib29rLXhtbCBGZWRvcmE9ZG9jYm9vay1kdGRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlID0gIlVidW50dT1kb2Nib29rLXhtbCBGZWRvcmE9ZG9jYm9vay1kdGRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gIkZlZG9yYT1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyBPcGVuc3VzZT1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyIKK0RJU1RST19QTl9BTElBU19wbi1kcmkycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZHJpMnByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWRyaTNwcm90byA9ICJGZWRvcmE9ZHJpM3Byb3RvIE9wZW5zdXNlPWRyaTNwcm90by1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1kcm9wYmVhciA9ICJEZWJpYW49ZHJvcGJlYXIgVWJ1bnR1PWRyb3BiZWFyIgorRElTVFJPX1BOX0FMSUFTX3BuLWR0YyA9ICJGZWRvcmE9ZHRjIFVidW50dT1kdGMiCitESVNUUk9fUE5fQUxJQVNfcG4tZWRzLXRvb2xzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZWVlLWFjcGktc2NyaXB0cyA9ICJEZWJpYW49ZWVlcGMtYWNwaS1zY3JpcHRzIFVidW50dT1lZWVwYy1hY3BpLXNjcmlwdHMiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLWluaXRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1lZ2xpYmMtbG9jYWxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaWJjLW10cmFjZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGliYy1zY3JpcHRzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZWdsaW5mby1mYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWVnbGluZm8teDExID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZW1nZC1kcml2ZXItYmluID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWVuY29kaW5ncyA9ICJVYnVudHU9eGZvbnRzLWVuY29kaW5ncyBNYW5kcml2YT14MTEtZm9udC1lbmNvZGluZ3MgRGViaWFuPXhmb250cy1lbmNvZGluZ3MiCitESVNUUk9fUE5fQUxJQVNfcG4tZXZpZWV4dCA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1ldmllZXh0IERlYmlhbj14MTFwcm90by1ldmllIgorRElTVFJPX1BOX0FMSUFTX3BuLWZpeGVzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZml4ZXNwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250LWFsaWFzID0gIkZlZG9yYT14b3JnLXgxMS1mb250cy1iYXNlIE1hbmRyaXZhPXgxMS1mb250LWFsaWFzIE1lZWdvPXhvcmcteDExLWZvbnRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvbnRjYWNoZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWZvbnRjYWNoZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWZvbnRzcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tZm9udHNwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1mb250LXV0aWwgPSAiTWVlZ289eG9yZy14MTEtZm9udC11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyBVYnVudHU9eGZvbnRzLXV0aWxzIE1hbmRyaXZhPXgxMS1mb250LXV0aWwgRGViaWFuPXhmb250cy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1mb3JtZmFjdG9yID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZm90b3dhbGwgPSAiRmVkb3JhPWZvdG93YWxsIFVidW50dT1mb3Rvd2FsbCIKK0RJU1RST19QTl9BTElBU19wbi1mc3Rlc3RzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2FpbCA9ICJGZWRvcmE9Z2FpbCBVYnVudHU9bGliZ2FpbC0zLTAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2FrdSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdhbGFnby1kYWVtb24gPSAiRGViaWFuPWdhbGFnby1kYWVtb24gVWJ1bnR1PWdhbGFnby1kYWVtb24iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3NzLWluaXRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtY3Jvc3MtaW5pdGlhbC1pNTg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLWNyb3Nzc2RrLWluaXRpYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2MtY3Jvc3NzZGstaW5pdGlhbC14ODZfNjQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1nY2NtYWtlZGVwID0gIk1hbmRyaXZhPWdjY21ha2VkZXAgVWJ1bnR1PXh1dGlscy1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2NjLXJ1bnRpbWUgPSAiVWJ1bnR1PWdjYyBGZWRvcmE9Z2NjIgorRElTVFJPX1BOX0FMSUFTX3BuLWdjYy1zYW5pdGl6ZXJzID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY2Mtc291cmNlID0gIlVidW50dT1nY2MgRmVkb3JhPWdjYyIKK0RJU1RST19QTl9BTElBU19wbi1nY29uZi1kYnVzID0gIk1lZWdvPUdDb25mLWRidXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2RrLXBpeGJ1ZiA9ICJEZWJpYW49bGliZ2RrLXBpeGJ1ZjIuMCBGZWRvcmE9Z2RrLXBpeGJ1ZiIKK0RJU1RST19QTl9BTElBU19wbi1nZGstcGl4YnVmLWNzb3VyY2UgPSAiRGViaWFuPWxpYmdkay1waXhidWYyLjAtMCBGZWRvcmE9Z2RrLXBpeGJ1ZjIiCitESVNUUk9fUE5fQUxJQVNfcG4tZ2V0dGV4dC1taW5pbWFsID0gIkRlYmlhbj1nZXR0ZXh0IEZlZG9yYT1nZXR0ZXh0IgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWItMi4wID0gIk1lZWdvPWdsaWIyIEZlZG9yYT1nbGliMiBPcGVuU3VTRT1nbGliMiBVYnVudHU9Z2xpYjIuMCBNYW5kcml2YT1nbGliMi4wIERlYmlhbj1nbGliMi4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWJjLWxvY2FsZSA9ICJPcGVuU3VTRT1nbGliYy1sb2NhbGUgRmVkb3JhPWdsaWJjLWRldmVsIgorRElTVFJPX1BOX0FMSUFTX3BuLWdsaWJjLW10cmFjZSA9ICJGZWRvcmE9Z2xpYmMtdXRpbHMgVWJ1bnR1PWxpYmMtZGV2LWJpbiIKK0RJU1RST19QTl9BTElBU19wbi1nbGliYy1zY3JpcHRzID0gIkZlZG9yYT1nbGliYyBVYnVudHU9bGliYy1iaW4iCitESVNUUk9fUE5fQUxJQVNfcG4tZ2xwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1nbHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLWdub21lLWRlc2t0b3AtdGVzdGluZyA9ICJEZWJpYW49Z25vbWUtZGVza3RvcC10ZXN0aW5nIEZlZG9yYT1nbm9tZS1kZXNrdG9wLXRlc3RpbmciCitESVNUUk9fUE5fQUxJQVNfcG4tZ251LWNvbmZpZyA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWdwdGZkaXNrID0gIkZlZG9yYT1nZGlzayBVYnVudHU9Z2Rpc2siCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmkgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3J1Yi1lZmktaTU4NiA9ICJEZWJpYW49Z3J1Yi1lZmkgRmVkb3JhPWdydWIyLWVmaSIKK0RJU1RST19QTl9BTElBU19wbi1ncnViLWVmaS14ODYtNjQgPSAiRGViaWFuPWdydWItZWZpIEZlZG9yYT1ncnViMi1lZmkiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0LXBsYXllciA9ICJVYnVudHU9Z3N0LXBsYXllciBGZWRvcmE9Z3N0cmVhbWVyLXBsYXllciIKK0RJU1RST19QTl9BTElBU19wbi1nc3QtcGx1Z2luLWJsdWV0b290aCA9ICJVYnVudHU9bGliZ3N0cmVhbWVyLXBsdWdpbnMtYmFzZSBGZWRvcmE9Z3N0cmVhbWVyLXBsdWdpbnMtYmFzZSIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAgPSAiRGViaWFuPWdzdHJlYW1lcjEuMCBVYnVudHU9Z3N0cmVhbWVyMS4wIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1tZXRhLWJhc2UgPSAiTWVlZ289Z3N0cmVhbWVyIEZlZG9yYT1nc3RyZWFtZXIgT3BlblN1U0U9Z3N0cmVhbWVyIFVidW50dT1nc3RyZWFtZXIwLjEwIgorRElTVFJPX1BOX0FMSUFTX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIFVidW50dT1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSA9ICJEZWJpYW49Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSBVYnVudHU9Z3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSIKK0RJU1RST19QTl9BTElBU19wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kID0gIkRlYmlhbj1nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kIFVidW50dT1nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyID0gIlVidW50dT1nc3RyZWFtZXIwLjEwLXJ0c3AgRmVkb3JhPWdzdHJlYW1lci1ydHNwIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0aysgPSAiTWVlZ289Z3RrMiBGZWRvcmE9Z3RrMiBPcGVuU3VTRT1ndGsyIFVidW50dT1ndGsrMi4wIE1hbmRyaXZhPWd0aysyLjAgRGViaWFuPWd0aysyLjAiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrKzMgPSAiVWJ1bnR1PWd0ayszLjAgRGViaWFuPWd0ayszLjAgRmVkb3JhPWd0azMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLWRvYy1zdHViID0gIkZlZG9yYT1ndGstZG9jIFVidW50dT1ndGstZG9jIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1lbmdpbmVzID0gIkZlZG9yYT1ndGsyLWVuZ2luZXMgT3BlblN1U0U9Z3RrMi1lbmdpbmVzIFVidW50dT1ndGsyLWVuZ2luZXMgTWFuZHJpdmE9Z3RrLWVuZ2luZXMyIERlYmlhbj1ndGsyLWVuZ2luZXMiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLXNhdG8tZW5naW5lID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tZ3RrLXRoZW1lLXRvcnR1cmVyID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vR1RLX2Zvcl9PTFBDIgorRElTVFJPX1BOX0FMSUFTX3BuLWd0ay1pY29uLXV0aWxzLW5hdGl2ZSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ndW1taWJvb3QgPSAiRGViaWFuPWd1bW1pYm9vdCBGZWRvcmE9Z3VtbWlib290IgorRElTVFJPX1BOX0FMSUFTX3BuLWhlbGxvLW1vZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWhvc3RhcC1jb25mID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taHdsYXRkZXRlY3QgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4taWNlY2MtY3JlYXRlLWVudiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXQtaWZ1cGRvd24gPSAiRGViaWFuPWlmdXBkb3duIFVidW50dT1pZnVwZG93biIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtYm9vdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1mcmFtZXdvcmsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0cmFtZnMtbGl2ZS1ib290ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmktdGVzdGZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4taW5pdHJhbWZzLWxpdmUtaW5zdGFsbC10ZXN0ZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1pbml0c2NyaXB0cyA9ICJGZWRvcmE9aW5pdHNjcmlwdHMgTWFuZHJhdmlhPWluaXRzY3JpcHRzIgorRElTVFJPX1BOX0FMSUFTX3BuLWlucHV0cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8taW5wdXRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1pcHJvdXRlMiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1qcGVnID0gIk9wZW5TdVNFPWxpYmpwZWcgVWJ1bnR1PWxpYmpwZWc2MiIKK0RJU1RST19QTl9BTElBU19wbi1rYnByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLWticHJvdG8gVWJ1bnR1PXgxMXByb3RvLWtiLWRldiBEZWJpYW49eDExcHJvdG8ta2ItZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLWtjb25maWctZnJvbnRlbmRzID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWtlcm5lbC1kZXZzcmMgPSAiRGViaWFuPWxpbnV4LWJhc2UgVWJ1bnR1PWxpbnV4IgorRElTVFJPX1BOX0FMSUFTX3BuLWtlcm5lbHNoYXJrID0gIk1hbmRyaXZhPWtlcm5lbHNoYXJrIFVidW50dT1rZXJuZWxzaGFyayIKK0RJU1RST19QTl9BTElBU19wbi1rZXJuLXRvb2xzLW5hdGl2ZSA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4ta2V5bWFwcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWtmID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxhbWUgPSAiRGViaWFuPWxhbWUgVWJ1bnR1PWxhbWUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGF0ZW5jeXRvcCA9ICJNZWVnbz1sYXRlbmN5dG9wIEZlZG9yYT1sYXRlbmN5dG9wIERlYmlhbj1sYXRlbmN5dG9wIE9wZW5TdVNFPWxhdGVuY3l0b3AiCitESVNUUk9fUE5fQUxJQVNfcG4tbGRjb25maWctbmF0aXZlID0gIlVidW50dT1saWJjLWJpbiBGZWRvcmE9Z2xpYmMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliYTUyID0gIk1hbmRyaXZhPWE1MmRlYyBEZWJpYW49YTUyZGVjIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmFjcGkgPSAiVWJ1bnR1PWxpYmFjcGkgTWFuZHJpdmE9bGliYWNwaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJhdG9taWNzLW9wcyA9ICJNZWVnbz1saWJhdG9taWMtb3BzIERlYmlhbj1saWJhdG9taWMtb3BzIFVidW50dT1saWJhdG9taWMtb3BzIE9wZW5TdVNFPWxpYmF0b21pYy1vcHMgTWFuZHJpdmE9bGliYXRvbWljLW9wcyIKK0RJU1RST19QTl9BTElBU19wbi1saWJjZ3JvdXAgPSAiVWJ1bnR1PWxpYmNncm91cDEgRGViaWFuPWxpYmNncm91cDEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliY2hlY2sgPSAiVWJ1bnR1PWNoZWNrIEZlZG9yYT1jaGVjayBPcGVuU3VTRT1jaGVjayIKK0RJU1RST19QTl9BTElBU19wbi1saWJjbGFzcy1pc2EtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJkcm0tcG91bHNibyA9ICJEZWJpYW49bGliZHJtLWludGVsMSBVYnVudHU9bGliZHJtLWludGVsMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJkdW1wdmFsdWUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJlbnYtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJlcmF0aW9uLWZvbnRzID0gIlVidW50dT1mb250cy1saWJlcmF0aW9uIEZlZG9yYT1saWJlcmF0aW9uLWZvbnRzLXR0ZiIKK0RJU1RST19QTl9BTElBU19wbi1saWJmYWtla2V5ID0gIk1lZWdvMS4wPWxpYmZha2VrZXkgRGViaWFuPWxpYmZha2VrZXkiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZmlsZS1jaGVja3RyZWUtcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJmbS1leHRyYSA9ICJPcGVuc3VzZT1saWJmbS1leHRyYTQgVWJ1bnR1PWxpYmZtLWV4dHJhNCIKK0RJU1RST19QTl9BTElBU19wbi1saWJmcmliaWRpID0gIk9wZW5TdVNFPWZyaWJpZGkgVWJ1bnR1PWZyaWJpZGkgTWFuZHJpdmE9ZnJpYmlkaSBEZWJpYW49ZnJpYmlkaSIKK0RJU1RST19QTl9BTElBU19wbi1saWJnY2MgPSAiRGViaWFuPWxpYmdjYzQgVWJ1bnR1PWxpYmdjYzEgT3BlblN1U0U9bGliZ2NjNDYiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2RidXMgPSAiSW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ2xhZGUgPSAiTWVlZ289bGliZ2xhZGUyIEZlZG9yYT1saWJnbGFkZTIgT3BlblN1U0U9bGliZ2xhZGUyIFVidW50dT1saWJnbGFkZTIgTWFuZHJpdmE9bGliZ2xhZGUyLjAgRGViaWFuPWxpYmdsYWRlMiIKK0RJU1RST19QTl9BTElBU19wbi1saWJnbHUgPSAiRGViaWFuPWxpYmdsdSBVYnVudHU9bGliZ2x1IE9wZW5zdXNlPW1lc2EtbGliZ2x1IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmdzbWQgPSAiRmVkb3JhPWdzbSBVYnVudHU9bGliZ3NtIERlYmlhbj1saWJnc20gT3BlbnN1c2U9bGliZ3NtIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmd0a3N0eWx1cyA9ICJEZWJpYW49bGliZ3Rrc3R5bHVzIFVidW50dT1saWJndGtzdHlsdXMiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliZ3UgPSAiT3BlblN1U0U9Z2x1IE9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmkxOG4tY29sbGF0ZS1wZXJsID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmljYWwgPSAiVWJ1bnR1PWxpYmljYWwgRmVkb3JhPWxpYmljYWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGliaWNvbnYgPSAiRmVkb3JhPW1pbmd3LWxpYmljb252IE9wZW5zdXNlPWNyb3NzLW1pbmd3LWxpYmljb252IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYmlucHV0ID0gIlVidW50dT1saWJpbnB1dDAgRmVkb3JhPWxpYmlucHV0MCIKK0RJU1RST19QTl9BTElBU19wbi1saWJqc29uID0gIlVidW50dT1saWJqc29uMC1kZXYgRGViaWFuPWxpYmpzb24wLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1saWJrc2JhID0gIkZlZG9yYT1saWJrc2JhIERlYmlhbj1saWJrc2JhOCBVYnVudHU9bGlia3NiYSIKK0RJU1RST19QTl9BTElBU19wbi1saWJsYnh1dGlsID0gIk1hbmRyaXZhPWxpYmxieHV0aWwgT3BlblN1c2U9eG9yZy14MTEtZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibWF0Y2hib3ggPSAiVWJ1bnR1PWxpYm1hdGNoYm94IEZlZG9yYT1saWJtYXRjaGJveCIKK0RJU1RST19QTl9BTElBU19wbi1saWJtcGMgPSAiRmVkb3JhPWxpYm1wYyBPcGVuU3VzZT1saWJtcGMyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5ld3QgPSAiRGViaWFuPWxpYm5ld3QwLjUyIEZlZG9yYT1uZXd0IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm5ld3QtcHl0aG9uID0gIlVidW50dT1weXRob24tbmV3dCBGZWRvcmE9bmV3dC1weXRob24iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlibnNzLW1kbnMgPSAiTWVlZ289bnNzLW1kbnMgT3BlblN1U0U9bnNzLW1kbnMgVWJ1bnR1PW5zcy1tZG5zIE1hbmRyaXZhPW5zc19tZG5zIERlYmlhbj1uc3MtbWRucyIKK0RJU1RST19QTl9BTElBU19wbi1saWJvbXhpbCA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vb214aWwuc291cmNlZm9yZ2UubmV0LyIKK0RJU1RST19QTl9BTElBU19wbi1saWJvd2wgPSAiRGViaWFuPW93bCBPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYm93bC1hdiA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBhbSA9ICJNZWVnbz1wYW0gRmVkb3JhPXBhbSBPcGVuU3VTRT1wYW0gVWJ1bnR1PXBhbSBNYW5kcml2YT1wYW0gRGViaWFuPXBhbSIKK0RJU1RST19QTl9BTElBU19wbi1saWJwY3JlID0gIk1hbmRyaXZhPWxpYnBjcmUwIEZlZG9yYT1wY3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnBuZzEyID0gIkRlYmlhbj1saWJwbmcxMi0wIEZlZG9yYT1saWJwbmciCitESVNUUk9fUE5fQUxJQVNfcG4tbGlicG9kLXBsYWluZXItcGVybCA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1saWJzYW1wbGVyYXRlMCA9ICJNZWVnbz1saWJzYW1wbGVyYXRlIEZlZG9yYT1saWJzYW1wbGVyYXRlIE9wZW5TdVNFPWxpYnNhbXBsZXJhdGUgVWJ1bnR1PWxpYnNhbXBsZXJhdGUgTWFuZHJpdmE9bGlic2FtcGxlcmF0ZSBEZWJpYW49bGlic2FtcGxlcmF0ZSIKK0RJU1RST19QTl9BTElBU19wbi1saWJzZGwgPSAiRmVkb3JhPVNETCBPcGVuc3VzZT1TREwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlic2RsMiA9ICJGZWRvcmE9c2RsMiBPcGVuc3VzZT1saWJzZGwyIFVidW50dT1saWJzZGwyIERlYmlhbj1saWJzZGwyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNuZGZpbGUxID0gIk1lZWdvPWxpYnNuZGZpbGUgRmVkb3JhPWxpYnNuZGZpbGUgT3BlblN1U0U9bGlic25kZmlsZSBVYnVudHU9bGlic25kZmlsZSBNYW5kcml2YT1saWJzbmRmaWxlIERlYmlhbj1saWJzbmRmaWxlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnNvdXAtMi40ID0gIk1lZWdvPWxpYnNvdXAgRmVkb3JhPWxpYnNvdXAgT3BlblN1U0U9bGlic291cCBVYnVudHU9bGlic291cDIuNCBNYW5kcml2YT1saWJzb3VwIERlYmlhbj1saWJzb3VwMi40IgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnN5bmMgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidGVsZXBhdGh5ID0gIkRlYmlhbj1saWJ0ZWxlcGF0aHkyIFVidW50dT1saWJ0ZWxlcGF0aHkyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnRpbWVkYXRlLXBlcmwgPSAiRGViaWFuPWxpYnRpbWVkYXRlLXBlcmwgVWJ1bnR1PWxpYnRpbWVkYXRlLXBlcmwiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidXJjdSA9ICJGZWRvcmE9dXNlcnNwYWNlLXJjdSBVYnVudHU9bGlidXJjdTAiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlidXNiMSA9ICJEZWJpYW49bGlidXNiLTEuMC0wIEZlZG9yYT1saWJ1c2IxIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnVzYi1jb21wYXQgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieDExID0gIkRlYmlhbj1saWJ4MTEtNiBGZWRvcmE9bGliWDExIFVidW50dT1saWJ4MTEtNiBPcGVuU3VTRT14b3JnLXgxMS1saWJYMTEiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieDExLWRpZXQgPSAiRGViaWFuPWxpYngxMS02IEZlZG9yYT1saWJYMTEgVWJ1bnR1PWxpYngxMS02IE9wZW5TdVNFPXhvcmcteDExLWxpYlgxMSIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4Y2FsaWJyYXRlID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy94b3JnL2xpYi9saWJYQ2FsaWJyYXRlLyIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4Zm9udGNhY2hlID0gIk1hbmRyaXZhPWxpYnhmb250Y2FjaGUgRGViaWFuPWxpYnhmb250Y2FjaGUiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieGZ0ID0gIk1hbmRyaXZhPWxpYnhmdCBEZWJpYW49bGlieGZ0MiBVYnVudHU9bGlieGZ0MiIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4aSA9ICJVYnVudHU9bGlieGkgRmVkb3JhPWxpYlhpIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnhrYmNvbW1vbiA9ICJGZWRvcmE9bGlieGtiY29tbW9uIERlYmlhbj1saWJ4a2Jjb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHByaW50YXBwdXRpbCA9ICJEZWJpYW49bGlieHByaW50YXBwdXRpbCBVYnVudHU9bGlieHByaW50YXBwdXRpbDEgTWFuZHJpdmE9bGlieHByaW50YXBwdXRpbCIKK0RJU1RST19QTl9BTElBU19wbi1saWJ4c2NybnNhdmVyID0gIkZlZG9yYT1saWJYU2NyblNhdmVyIFVidW50dT1saWJ4c3MxIE1hbmRyaXZhPWxpYnhzY3Juc2F2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbGlieHNldHRpbmdzLWNsaWVudCA9ICJEZWJpYW49bGlieHNldHRpbmdzLWNsaWVudDAgVWJ1bnR1PWxpYnhzZXR0aW5ncy1jbGllbnQwIE1hbmRyaXZhPWxpYlhzZXR0aW5ncy1jbGllbnQwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnh0cmFwID0gIkRlYmlhbj1saWJ4dHJhcDYgRmVkb3JhPWxpYlhUcmFwIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpYnh4Zjg2bWlzYyA9ICJNYW5kcml2YT1saWJ4eGY4Nm1pc2MgRmVkb3JhPWxpYlh4Zjg2bWlzYyIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1kdW1teSA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC1maXJtd2FyZSA9ICJGZWRvcmE9bGludXgtZmlybXdhcmUgVWJ1bnR1PWxpbnV4LWZpcm13YXJlIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LWxpYmMtaGVhZGVycyA9ICJEZWJpYW49bGludXgta2VybmVsLWhlYWRlcnMgVWJ1bnR1PWxpbnV4LWtlcm5lbC1oZWFkZXJzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LWxpYmMtaGVhZGVycy15b2N0byA9ICJEZWJpYW49bGludXgta2VybmVsLWhlYWRlcnMgVWJ1bnR1PWxpbnV4LWtlcm5lbC1oZWFkZXJzIgorRElTVFJPX1BOX0FMSUFTX3BuLWxpbnV4LXlvY3RvID0gIkRlYmlhbj1saW51eC1iYXNlIFVidW50dT1saW51eCIKK0RJU1RST19QTl9BTElBU19wbi1saW51eC15b2N0by1ydCA9ICJEZWJpYW49bGludXgtYmFzZSBVYnVudHU9bGludXgiCitESVNUUk9fUE5fQUxJQVNfcG4tbGludXgteW9jdG8tdGlueSA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1sc2Jpbml0c2NyaXB0cyA9ICJXaW5kcml2ZXIiCitESVNUUk9fUE5fQUxJQVNfcG4tbHNic2V0dXAgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWxzYnRlc3QgPSAiV2luZHJpdmVyIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0cCA9ICJNYW5kcml2YT1sdHAgVWJ1bnR1PWx0cCIKK0RJU1RST19QTl9BTElBU19wbi1sdHRuZy1tb2R1bGVzID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9sdHRuZy5vcmcvIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0dG5nLXRvb2xzID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly9sdHRuZy5vcmcvIgorRElTVFJPX1BOX0FMSUFTX3BuLWx0dG5nLXVzdCA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vbHR0bmcub3JnLyIKK0RJU1RST19QTl9BTElBU19wbi1sejQgPSAiRGViaWFuPWx6NCBGZWRvcmE9bHo0IgorRElTVFJPX1BOX0FMSUFTX3BuLWx6byA9ICJEZWJpYW49bGlibHpvIFVidW50dT1saWJsem8gRmVkb3JhPWx6cCIKK0RJU1RST19QTl9BTElBU19wbi1tYWlseCA9ICJEZWJpYW49YnNkLW1haWx4IFVidW50dT1ic2QtbWFpbHgiCitESVNUUk9fUE5fQUxJQVNfcG4tbWFrZWRlcGVuZCA9ICJNYW5kcml2YT1tYWtlZGVwZW5kIFVidW50dT14dXRpbHMtZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLW1ha2VkZXZzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtY29uZmlnLWd0ayA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LWRlc2t0b3AgPSAiTWFuZHJpdmE9bWF0Y2hib3gtZGVza3RvcCBVYnVudHU9bWF0Y2hib3gtZGVza3RvcCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1kZXNrdG9wLXNhdG8gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1rZXlib2FyZCA9ICJEZWJpYW49bWF0Y2hib3gta2V5Ym9hcmQgRmVkb3JhPW1hdGNoYm94LWtleWJvYXJkIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXBhbmVsLTIgPSAiRGViaWFuPW1hdGNoYm94LXBhbmVsIE1hbmRyaXZhPW1hdGNoYm94LXBhbmVsIFVidW50dT1tYXRjaGJveC1wYW5lbCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC1zZXNzaW9uID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtc2Vzc2lvbi1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGVybWluYWwgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC10aGVtZS1zYXRvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWUtc2F0by0yID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWF0Y2hib3gtdGhlbWVzLWV4dHJhID0gIlVidW50dT1tYXRjaGJveC10aGVtZXMtZXh0cmEgTWFuZHJpdmE9bWF0Y2hib3gtdGhlbWVzLWV4dHJhIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXRoZW1lcy1ndGsgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1tYXRjaGJveC13bSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW1hdGNoYm94LXdtLTIgPSAiTWFuZHJpdmE9bWF0Y2hib3gtd2luZG93LW1hbmFnZXIgRGViaWFuPW1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lbnUtY2FjaGUgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbWVzYSA9ICJGZWRvcmE9bWVzYSBVYnVudHU9bGliZ2wxLW1lc2EtZHJpIgorRElTVFJPX1BOX0FMSUFTX3BuLW1lc2EtZ2wgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXNhLWdsc2wgPSAiRmVkb3JhPW1lc2EgVWJ1bnR1PWxpYmdsMS1tZXNhLWRyaSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLWVudmlyb25tZW50LWV4dHNkay1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1pNTg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1xZW11eDg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1lbnZpcm9ubWVudC1xZW11eDg2LTY0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS1pZGUtc3VwcG9ydCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1ldGEtdG9vbGNoYWluID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbWV0YS10b29sY2hhaW4tcXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tZXRhLXRvb2xjaGFpbi1xdGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1taW5pLXgtc2Vzc2lvbiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1ta2VsZmltYWdlID0gIlVidW50dT1ta2VsZmltYWdlIEZlZG9yYT1ta2VsZmltYWdlIgorRElTVFJPX1BOX0FMSUFTX3BuLW1rZm9udGRpciA9ICJNYW5kcml2YT1ta2ZvbnRkaXIgVWJ1bnR1PXhmb250cy11dGlscyBGZWRvcmE9eG9yZy14MTEtZm9udC11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ta2ZvbnRzY2FsZSA9ICJNYW5kcml2YT1ta2ZvbnRzY2FsZSBVYnVudHU9eGZvbnRzLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1mb250LXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW1rdGVtcCA9ICJNYW5kcml2YT1ta3RlbXAgRmVkb3JhPW1rdGVtcCIKK0RJU1RST19QTl9BTElBU19wbi1tbWMtdXRpbHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tb2JsaW4tcHJvdG8gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tb2R1dGlscy1jb2xsYXRlcmFsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tbW9kdXRpbHMtaW5pdHNjcmlwdHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1tc3luY3Rvb2wgPSAiT3BlblN1c2U9bXN5bmN0b29sIE1hbmRyaXZhPW1zeW5jdG9vbCIKK0RJU1RST19QTl9BTElBU19wbi1tdGQtdXRpbHMgPSAiRGViaWFuPW10ZC11dGlscyBVYnVudHU9bXRkLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW14LTEuMCA9ICJVYnVudHU9bXggRGViaWFuPW14IEZlZG9yYT1teCIKK0RJU1RST19QTl9BTElBU19wbi1uNDUwLWF1ZGlvID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLW5lYXJkID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLW5lb24gPSAiRmVkb3JhPW5lb24gT3BlbnN1c2U9bmVvbiIKK0RJU1RST19QTl9BTElBU19wbi1uZXR3b3JrLXN1c3BlbmQtc2NyaXB0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLW5mcy1leHBvcnQtcm9vdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLW5wdGggPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tbnNzLW15aG9zdG5hbWUgPSAiTWVlZ289bnNzLW1kbnMgT3BlblN1U0U9bnNzLW1kbnMgVWJ1bnR1PW5zcy1tZG5zIE1hbmRyaXZhPW5zc19tZG5zIERlYmlhbj1uc3MtbWRucyIKK0RJU1RST19QTl9BTElBU19wbi1vY2YtbGludXggPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tb2Zvbm8gPSAiRGViaWFuPW9mb25vIFVidW50dT1vZm9ubyIKK0RJU1RST19QTl9BTElBU19wbi1vaC1wdXp6bGVzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vc3ZuLm9wZW5tb2tvLm9yZy90cnVuay9zcmMvdGFyIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctYXJjaC1jb25maWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWNvbGxhdGVyYWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1vcGtnLWtleXJpbmdzID0gIk9TUERUIHVwc3RyZWFtPWdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tb3BrZy1ub2dwZyA9ICJPU1BEVCB1cHN0cmVhbT1naXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9vcGtnLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wa2ctdXRpbHMgPSAiT1NQRFQgdXBzdHJlYW09Z2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3BrZy11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1vcHJvZmlsZSA9ICJEZWJpYW49b3Byb2ZpbGUgRmVkb3JhPW9wcm9maWxlIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxldWkgPSAiRmVkb3JhPW9wcm9maWxldWkgVWJ1bnR1PW9wcm9maWxlLWd1aSBEZWJpYW49b3Byb2ZpbGUtZ3VpIgorRElTVFJPX1BOX0FMSUFTX3BuLW9wcm9maWxldWktc2VydmVyID0gIkZlZG9yYT1vcHJvZmlsZXVpIFVidW50dT1vcHJvZmlsZS1ndWkgRGViaWFuPW9wcm9maWxlLWd1aSIKK0RJU1RST19QTl9BTElBU19wbi1vcy1yZWxlYXNlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tb3dsLXZpZGVvID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWJhc2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWJvb3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1sc2IgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1uZnMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1xdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXF0NGUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zZGsgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXRvb2xzID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEtYmFzZSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jb3JlLXgxMS1taW5pID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlciA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi1pNTg2ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLXFlbXV4ODYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tcWVtdXg4Ni02NCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdDRlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLXRhcmdldCA9ICJJbnRlbCIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1zZGstaG9zdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXBhY2thZ2UtaW5kZXggPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wYXRjaGVsZiA9ICJPcGVuc3VzZT1wYXRjaGVsZiBGZWRvcmE9cGF0Y2hlbGYiCitESVNUUk9fUE5fQUxJQVNfcG4tcGVyZiA9ICJPU1BEVCIKK0RJU1RST19QTl9BTElBU19wbi1waWdsaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wa2djb25maWcgPSAiVWJ1bnR1PXBrZy1jb25maWcgRmVkb3JhPXBrZ2NvbmZpZyIKK0RJU1RST19QTl9BTElBU19wbi1wb2ludGVyY2FsID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9pbnRlcmNhbC14aW5wdXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb2t5LWZlZWQtY29uZmlnLW9wa2cgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb25nLWNsb2NrID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcG9ydG1hcCA9ICJEZWJpYW49cnBjYmluZCBGZWRvcmE9cnBjYmluZCIKK0RJU1RST19QTl9BTElBU19wbi1wb3N0aW5zdC1pbnRlcmNlcHQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wb3dlcnRvcCA9ICJNZWVnbz1wb3dlcnRvcCBGZWRvcmE9cG93ZXJ0b3AgRGViaWFuPXBvd2VydG9wIE9wZW5TdVNFPXBvd2VydG9wIE1hbmRyaXZhPXBvd2VydG9wIgorRElTVFJPX1BOX0FMSUFTX3BuLXBwcC1kaWFsaW4gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1wcmVzZW50cHJvdG8gPSAiRGViaWFuPXgxMXByb3RvLXByZXNlbnQtZGV2IEZlZG9yYT14b3JnLXgxMS1wcm90by1kZXZlbCIKK0RJU1RST19QTl9BTElBU19wbi1wcmludHByb3RvID0gIkRlYmlhbj14MTFwcm90by1wcmludC1kZXYgVWJ1bnR1PXgxMXByb3RvLXByaW50LWRldiBNYW5kcml2YT14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4tcHNldWRvID0gIldpbmRyaXZlciIKK0RJU1RST19QTl9BTElBU19wbi1wc3BsYXNoID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcHRlc3QtcnVubmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcHV6emxlcyA9ICJEZWJpYW49c2d0LXB1enpsZXMgRmVkb3JhPXB1enpsZXMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uMyA9ICJGZWRvcmE9cHl0aG9uMyBEZWJpYW49cHl0aG9uMy4yIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbjMtZGlzdHJpYnV0ZSA9ICJEZWJpYW49cHl0aG9uMy1zZXR1cHRvb2xzIEZlZG9yYT1weXRob24zLXNldHVwdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLVpTSSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1hcmdwYXJzZSA9ICJGZWRvcmE9cHl0aG9uLWFyZ3BhcnNlIE9wZW5TdVNFPXB5dGhvbi1hcmdwYXJzZSIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZGJ1cyA9ICJVYnVudHU9cHl0aG9uLWRidXMgRGViaWFuPXB5dGhvbi1kYnVzIE1hbmRyaXZhPXB5dGhvbi1kYnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gIk9wZW5zdXNlPXB5dGhvbi1zZXR1cHRvb2xzIEZlZG9yYT1weXRob24tc2V0dXB0b29scyIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tZ2l0ID0gIkRlYmlhbj1weXRob24tZ2l0IEZlZG9yYT1HaXRQeXRob24iCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLW1ha28gPSAiRmVkb3JhPXB5dGhvbi1tYWtvIE9wZW5zdXNlPXB5dGhvbi1NYWtvIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWNhaXJvID0gIk1lZWdvPXB5Y2Fpcm8gRmVkb3JhPXB5Y2Fpcm8gVWJ1bnR1PXB5Y2Fpcm8gRGViaWFuPXB5Y2Fpcm8iCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXB5Y3VybCA9ICJEZWJpYW49cHl0aG9uLXB5Y3VybCBVYnVudHU9cHl0aG9uLXB5Y3VybCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tcHlnb2JqZWN0ID0gIk1lZWdvPXB5Z29iamVjdDIgRmVkb3JhPXB5Z29iamVjdDIgVWJ1bnR1PXB5Z29iamVjdCBEZWJpYW49cHlnb2JqZWN0IgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weWd0ayA9ICJEZWJpYW49cHl0aG9uLWd0azIgRmVkb3JhPXB5Z3RrMiBPcGVuU3VTRT1weXRob24tZ3RrIgorRElTVFJPX1BOX0FMSUFTX3BuLXB5dGhvbi1weXJleCA9ICJNYW5kcml2YT1weXRob24tcHlyZXggVWJ1bnR1PXB5dGhvbi1weXJleCIKK0RJU1RST19QTl9BTElBU19wbi1weXRob24tc2NvbnMgPSAiRmVkb3JhPXNjb25zIE9wZW5TdVNFPXNjb25zIFVidW50dT1zY29ucyBNYW5kcml2YT1zY29ucyBEZWJpYW49c2NvbnMiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNldHVwdG9vbHMgPSAiTWFuZHJpdmE9cHl0aG9uLXNldHVwIE9wZW5TdVNFPXB5dGhvbi1zZXR1cC1naXQiCitESVNUUk9fUE5fQUxJQVNfcG4tcHl0aG9uLXNtYXJ0cG0gPSAiRGViaWFuPXNtYXJ0IE9wZW5TdVNFPXNtYXJ0IgorRElTVFJPX1BOX0FMSUFTX3BuLXFlbXUtY29uZmlnID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdWdsID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4tcWVtdS1oZWxwZXIgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1xZW11d3JhcHBlci1jcm9zcyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXFtbXAgPSAiRmVkb3JhPXFtbXAgRGViaWFuPXFtbXAiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0ID0gIk1hbmRyaXZhPWxpYnF0NC1kZXZlbCBVYnVudHU9bGlicXQ0LWRldiIKK0RJU1RST19QTl9BTElBU19wbi1xdDRlLWRlbW8taW1hZ2UgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1xdDQtZW1iZWRkZWQgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LWdyYXBoaWNzLXN5c3RlbSA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXF0NC10b29scyA9ICJNYW5kcml2YT1saWJxdDQtZGV2ZWwgVWJ1bnR1PWxpYnF0NC1kZXYiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQ0LXgxMS1mcmVlID0gIlVidW50dT1xdC14MTEtZnJlZSBEZWJpYW49cXQteDExLWZyZWUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXQtZGVtby1pbml0ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tcXVpY2t5ID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXJhbmRycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmFuZHJwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZWFkbGluZSA9ICJGZWRvcmE9cmVhZGxpbmUgRGViaWFuPXJlYWRsaW5lLWNvbW1vbiIKK0RJU1RST19QTl9BTElBU19wbi1yZWNvcmRwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1yZWNvcmRwcm90byIKK0RJU1RST19QTl9BTElBU19wbi1yZW1ha2UgPSAiTWFuZHJpdmE9cmVtYWtlIERlYmlhbj1yZW1ha2UiCitESVNUUk9fUE5fQUxJQVNfcG4tcmVuZGVycHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8tcmVuZGVycHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tcmVzb3VyY2Vwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1yZXNvdXJjZXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXJnYiA9ICJGZWRvcmE9eG9yZy1YMTEtc2VydmVyLXV0aWxzIERlYmlhbj14MTEteHNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi1ycG1yZXNvbHZlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXJ0LXRlc3RzID0gIkRlYmlhbj1ydC10ZXN0cyBVYnVudHU9cnQtdGVzdHMiCitESVNUUk9fUE5fQUxJQVNfcG4tcnVuLXBvc3RpbnN0cyA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXNhdG8taWNvbi10aGVtZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNhdG8tc2NyZWVuc2hvdCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNiYyA9ICJGZWRvcmE9c2JjIERlYmlhbj1saWJzYmMxIgorRElTVFJPX1BOX0FMSUFTX3BuLXNjcmVlbnNob3QgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zY3Juc2F2ZXJwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by1zY3Juc2F2ZXJwcm90byBVYnVudHU9eDExcHJvdG8tc2NybnNhdmVyLWRldiBEZWJpYW49eDExcHJvdG8tc2NybnNhdmVyLWRldiIKK0RJU1RST19QTl9BTElBU19wbi1zZXR0aW5ncy1kYWVtb24gPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi1zZ21sLWNvbW1vbiA9ICJPcGVuU3VTRT1zZ21sLWNvbW1vbiBGZWRvcmE9c2dtbC1jb21tb24iCitESVNUUk9fUE5fQUxJQVNfcG4tc2dtbHNwbCA9ICJEZWJpYW49c2dtbHNwbCBVYnVudHU9c2dtbHNwbCIKK0RJU1RST19QTl9BTElBU19wbi1zaGFkb3ctc2VjdXJldHR5ID0gIlVidW50dT1zaGFkb3cgRmVkb3JhPXNoYWRvdyIKK0RJU1RST19QTl9BTElBU19wbi1zaGFkb3ctc3lzcm9vdCA9ICJVYnVudHU9c2hhZG93IEZlZG9yYT1zaGFkb3ciCitESVNUUk9fUE5fQUxJQVNfcG4tc2hhc3VtID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tc2h1dGRvd24tZGVza3RvcCA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXNpZ25ncCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXN0YXQgPSAiRGViaWFuPWNvcmV1dGlscyBGZWRvcmE9Y29yZXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXN3YWJiZXIgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi1zeXNrbG9nZCA9ICJEZWJpYW49c3lza2xvZ2QgTWFuZHJpdmE9c3lza2xvZ2QiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzcHJvZiA9ICJGZWRvcmE9c3lzcHJvZiBEZWJpYW49c3lzcHJvZiIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLWNvbXBhdC11bml0cyA9ICJGZWRvcmE9c3lzdGVtZCBVYnVudHU9c3lzdGVtZCIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW1kLXN5c3RlbWN0bCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXN5c3RlbWQtc3lzdGVtZGN0bCA9ICJGZWRvcmE9c3lzdGVtZCBVYnVudHU9c3lzdGVtZCIKK0RJU1RST19QTl9BTElBU19wbi1zeXN0ZW10YXAtdXByb2JlcyA9ICJVYnVudHU9c3lzdGVtdGFwIERlYmlhbj1zeXN0ZW10YXAiCitESVNUUk9fUE5fQUxJQVNfcG4tc3lzdmluaXQtaW5pdHRhYiA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXRhYmxlID0gIkludGVsIgorRElTVFJPX1BOX0FMSUFTX3BuLXRhci1yZXBsYWNlbWVudCA9ICJGZWRvcmE9dGFyIFVidW50dT10YXIiCitESVNUUk9fUE5fQUxJQVNfcG4tdGNmLWFnZW50ID0gIldpbmRyaXZlciB1cHN0cmVhbT1odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2RzZHAvdG0vIgorRElTVFJPX1BOX0FMSUFTX3BuLXRlbGVwYXRoeS1weXRob24gPSAiRGViaWFuPXRlbGVwYXRoeS1weXRob24gVWJ1bnR1PXRlbGVwYXRoeS1weXRob24iCitESVNUUk9fUE5fQUxJQVNfcG4tdGV4aW5mby1kdW1teS1uYXRpdmUgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi10aW55LWluaXQgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4tdGlueWxvZ2luID0gIkRlYmlhbj1idXN5Ym94IFVidW50dT1idXN5Ym94IE1hbmRyaXZhPWJ1c3lib3giCitESVNUUk9fUE5fQUxJQVNfcG4tdHJhY2UtY21kID0gIk1hbmRyaXZhPXRyYWNlLWNtZCBVYnVudHU9dHJhY2UtY21kIgorRElTVFJPX1BOX0FMSUFTX3BuLXRyYXBwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by10cmFwcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4tdHJlbW9yID0gIk9TUERUIHVwc3RyZWFtPWh0dHA6Ly93d3cueGlwaC5vcmcvdm9yYmlzLyIKK0RJU1RST19QTl9BTElBU19wbi10c2xpYiA9ICJEZWJpYW49dHNsaWIgVWJ1bnR1PXRzbGliIgorRElTVFJPX1BOX0FMSUFTX3BuLXR0Zi1iaXRzdHJlYW0tdmVyYSA9ICJEZWJpYW49dHRmLWJpdHN0cmVhbS12ZXJhIFVidW50dT10dGYtYml0c3RyZWFtLXZlcmEiCitESVNUUk9fUE5fQUxJQVNfcG4tdHpjb2RlID0gIk9TUERUIgorRElTVFJPX1BOX0FMSUFTX3BuLXUtYm9vdC1mdy11dGlscyA9ICJVYnVudHU9dS1ib290LXRvb2xzIERlYmlhbj11LWJvb3QtdG9vbHMiCitESVNUUk9fUE5fQUxJQVNfcG4tdS1ib290LW1raW1hZ2UgPSAiVWJ1bnR1PXVib290LW1raW1hZ2UgRGViaWFuPXVib290LW1raW1hZ2UiCitESVNUUk9fUE5fQUxJQVNfcG4tdWRldi1leHRyYWNvbmYgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11bmZzMyA9ICJEZWJpYW49dW5mczMgRmVkb3JhPXVuZnMzIgorRElTVFJPX1BOX0FMSUFTX3BuLXVuZnMtc2VydmVyID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdW5pbmF0aXZlLXRhcmJhbGwgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi11cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgPSAiT3BlbnN1c2U9dXBkYXRlLWFsdGVybmF0aXZlcyBNYW5kcml2YT11cGRhdGUtYWx0ZXJuYXRpdmVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXVwZGF0ZS1yYy5kID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4tdXNiaW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXV0aWwtbWFjcm9zID0gIk1lZWdvPXhvcmcteDExLXV0aWwtbWFjcm9zIEZlZG9yYT14b3JnLXgxMS11dGlsLW1hY3JvcyBNYW5kcml2YT14MTEtdXRpbC1tYWNyb3MiCitESVNUUk9fUE5fQUxJQVNfcG4tdjg2ZCA9ICJEZWJpYW49djg2ZCBVYnVudHU9djg2ZCIKK0RJU1RST19QTl9BTElBU19wbi12aWRlb3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXZpZGVvcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4td2FmZmxlID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4td2F0Y2hkb2cgPSAiRGViaWFuPXdhdGNoZG9nIFVidW50dT13YXRjaGRvZyBNYW5kcml2YT13YXRjaGRvZyIKK0RJU1RST19QTl9BTElBU19wbi13ZWJraXRndGsgPSAiRmVkb3JhPXdlYmtpdGd0ayBVYnVudHU9bGlid2Via2l0IgorRElTVFJPX1BOX0FMSUFTX3BuLXdlYi13ZWJraXQgPSAiT3BlbmVkSGFuZCIKK0RJU1RST19QTl9BTElBU19wbi13ZXN0b24gPSAiRmVkb3JhPXdlc3RvbiBPcGVuU3VTRT13ZXN0b24iCitESVNUUk9fUE5fQUxJQVNfcG4td2VzdG9uLWluaXQgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi13aGljaCA9ICJNYW5kcml2YT13aGljaCBGZWRvcmE9d2hpY2giCitESVNUUk9fUE5fQUxJQVNfcG4td3BhLXN1cHBsaWNhbnQgPSAiTWVlZ289d3BhX3N1cHBsaWNhbnQgRmVkb3JhPXdwYV9zdXBwbGljYW50IE9wZW5TdVNFPXdwYV9zdXBwbGljYW50IFVidW50dT13cGFzdXBwbGljYW50IE1hbmRyaXZhPXdwYV9zdXBwbGljYW50IERlYmlhbj13cGFzdXBwbGljYW50IgorRElTVFJPX1BOX0FMSUFTX3BuLXgxMS1jb21tb24gPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14MTFwZXJmID0gIkZlZG9yYT14b3JnLXgxMS1hcHBzIFVidW50dT14MTEtYXBwcyIKK0RJU1RST19QTl9BTElBU19wbi14MTF2bmMgPSAiRmVkb3JhPXgxMXZuYyBVYnVudHU9eDExdm5jIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLWltYWdlID0gIkRlYmlhbj14Y2ItdXRpbCBGZWRvcmE9eGNiLXV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGNiLXV0aWwta2V5c3ltcyA9ICJEZWJpYW49eGNiLXV0aWwgRmVkb3JhPXhjYi11dGlsIgorRElTVFJPX1BOX0FMSUFTX3BuLXhjYi11dGlsLXdtID0gIkRlYmlhbj14Y2ItdXRpbCBGZWRvcmE9eGNiLXV0aWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGNtaXNjcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGNtaXNjcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGN1cnNvci10cmFuc3BhcmVudC10aGVtZSA9ICJPcGVuZWRIYW5kIgorRElTVFJPX1BOX0FMSUFTX3BuLXhkcHlpbmZvID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhldiA9ICJGZWRvcmE9eG9yZy14MTEtdXRpbHMgVWJ1bnR1PXgxMS11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14ZXh0cHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGV4dHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhleWVzID0gIlVidW50dT14MTEtYXBwcyBGZWRvcmE9eG9yZy14MTEtYXBwcyIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2YmlnZm9udHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZiaWdmb250cHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NmRnYXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZkZ2Fwcm90byIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2ZHJpcHJvdG8gPSAiTWVlZ289eG9yZy14MTEtcHJvdG8teGY4NmRyaXByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtaW5wdXQtZXZkZXYgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy1pbnB1dC1ldmRldiBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LWV2ZGV2IERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtZXZkZXYgRmVkb3JhPXhvcmcteDExLWRydi1ldmRldiBNZWVnbz14b3JnLXgxMS1kcnYtZXZkZXYiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1rZXlib2FyZCA9ICJNZWVnbz14b3JnLXgxMS1kcnYta2V5Ym9hcmQgRmVkb3JhPXhvcmcteDExLWRydi1rZXlib2FyZCBNYW5kcml2YT14MTEtZHJpdmVyLWlucHV0LWtleWJvYXJkIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQta2V5Ym9hcmQiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC1tb3VzZSA9ICJVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LW1vdXNlIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtbW91c2UgRGViaWFuPXhzZXJ2ZXIteG9yZy1pbnB1dC1tb3VzZSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LWlucHV0LXN5bmFwdGljcyA9ICJNZWVnbz14b3JnLXgxMS1kcnYtc3luYXB0aWNzIEZlZG9yYT14b3JnLXgxMS1kcnYtc3luYXB0aWNzIFVidW50dT14c2VydmVyLXhvcmctaW5wdXQtc3luYXB0aWNzIE1hbmRyaXZhPXgxMS1kcml2ZXItaW5wdXQtc3luYXB0aWNzIERlYmlhbj14ZnJlZTg2LWRyaXZlci1zeW5hcHRpY3MiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni1pbnB1dC12bW1vdXNlID0gIkZlZG9yYT14b3JnLXgxMS1kcnYtdm1tb3VzZSBVYnVudHU9eHNlcnZlci14b3JnLWlucHV0LXZtbW91c2UgTWFuZHJpdmE9eDExLWRyaXZlci1pbnB1dC12bW1vdXNlIERlYmlhbj14c2VydmVyLXhvcmctaW5wdXQtdm1tb3VzZSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2bWlzY3Byb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZtaXNjcHJvdG8iCitESVNUUk9fUE5fQUxJQVNfcG4teGY4NnJ1c2hwcm90byA9ICJNZWVnbz14b3JnLXgxMS1wcm90by14Zjg2cnVzaHByb3RvIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tY2lycnVzID0gIk9wZW5zdXNlPXhmODYtdmlkZW8tY2lycnVzIERlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tY2lycnVzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tZmJkZXYgPSAiVWJ1bnR1PXhzZXJ2ZXIteG9yZy12aWRlby1mYmRldiBEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLWZiZGV2IgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8taW50ZWwgPSAiRGViaWFuPXhzZXJ2ZXIteG9yZy12aWRlby1pbnRlbCBGZWRvcmE9eG9yZy14MTEtZHJ2LWludGVsIE1hbmRyaXZhPXgxMS1kcml2ZXItdmlkZW8taW50ZWwgTWVlZ289eG9yZy14MTEtZHJ2LWludGVsIFVidW50dT14c2VydmVyLXhvcmctdmlkZW8taW50ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1tb2Rlc2V0dGluZyA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLW1vZGVzZXR0aW5nIEZlZG9yYT14Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgorRElTVFJPX1BOX0FMSUFTX3BuLXhmODYtdmlkZW8tb21hcCA9ICJVYnVudHU9eGY4Ni12aWRlby1vbWFwIERlYmlhbj14Zjg2LXZpZGVvLW9tYXAiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiT1NQRFQiCitESVNUUk9fUE5fQUxJQVNfcG4teGY4Ni12aWRlby12ZXNhID0gIkRlYmlhbj14c2VydmVyLXhvcmctdmlkZW8tdmVzYSBGZWRvcmE9eG9yZy14MTEtZHJ2LXZlc2EgTWFuZHJpdmE9eDExLWRyaXZlci12aWRlby12ZXNhIFVidW50dT14c2VydmVyLXhvcmctdmlkZW8tdmVzYSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICJEZWJpYW49eHNlcnZlci14b3JnLXZpZGVvLXZtd2FyZSBGZWRvcmE9eG9yZy14MTEtZHJ2LXZtd2FyZSBNYW5kcml2YT14MTEtZHJpdmVyLXZpZGVvLXZtd2FyZSBVYnVudHU9eHNlcnZlci14b3JnLXZpZGVvLXZtd2FyZSIKK0RJU1RST19QTl9BTElBU19wbi14Zjg2dmlkbW9kZXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhmODZ2aWRtb2RlcHJvdG8gVWJ1bnR1PXgxMXByb3RvLXhmODZ2aWRtb2RlIERlYmlhbj14MTFwcm90by14Zjg2dmlkbW9kZSIKK0RJU1RST19QTl9BTElBU19wbi14aG9zdCA9ICJVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14aW5lcmFtYXByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhpbmVyYW1hcHJvdG8gVWJ1bnR1PXgxMXByb3RvLXhpbmVyYW1hIERlYmlhbj14MTFwcm90by14aW5lcmFtYSIKK0RJU1RST19QTl9BTElBU19wbi14aW5wdXQtY2FsaWJyYXRvciA9ICJGZWRvcmE9eGlucHV0LWNhbGlicmF0b3IgTWFuZHJhdmlhPXhpbnB1dC1jYWxpYnJhdG9yIFVidW50dT14aW5wdXQtY2FsaWJyYXRvciIKK0RJU1RST19QTl9BTElBU19wbi14a2Jjb21wID0gIlVidW50dT14MTEteGtiLXV0aWxzIEZlZG9yYT14b3JnLXgxMS14a2ItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teG1vZG1hcCA9ICJNZWVnbz14b3JnLXgxMS11dGlscy14bW9kbWFwIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMgVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXhvcmctbWluaW1hbC1mb250cyA9ICJVYnVudHU9eGZvbnRzLWJhc2UgRmVkb3JhPXhvcmcteDExLWZvbnRzLWJhc2UiCitESVNUUk9fUE5fQUxJQVNfcG4teHByb3AgPSAiTWVlZ289eG9yZy14MTEtdXRpbHMteHByb3AgRmVkb3JhPXhvcmcteDExLXV0aWxzIFVidW50dT14MTEtdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHByb3RvID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhwcm90byBGZWRvcmE9eG9yZy14MTEtcHJvdG8tZGV2ZWwgVWJ1bnR1PXgxMXByb3RvLWNvcmUtZGV2IERlYmlhbj14MTFwcm90by1jb3JlLWRldiBPcGVuc3VzZT14b3JnLXgxMS1wcm90by1kZXZlbCBNYW5kcml2YT14MTEtcHJvdG8tZGV2ZWwiCitESVNUUk9fUE5fQUxJQVNfcG4teHByb3h5bWFuYWdlbWVudHByb3RvY29sID0gIk1lZWdvPXhvcmcteDExLXByb3RvLXhwcm94eW1hbmFnZW1lbnRwcm90b2NvbCIKK0RJU1RST19QTl9BTElBU19wbi14cmFuZHIgPSAiVWJ1bnR1PXgxMS14c2VydmVyLXV0aWxzIEZlZG9yYT14b3JnLXgxMS1zZXJ2ZXItdXRpbHMiCitESVNUUk9fUE5fQUxJQVNfcG4teHJkYiA9ICJVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLW5vZG0taW5pdCA9ICJPRS1Db3JlIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXIteGY4Ni1jb25maWcgPSAiT0UtQ29yZSIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhmODYtZHJpLWxpdGUgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlciBVYnVudHU9eHNlcnZlci14b3JnIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXJ2ZXIteGY4Ni1saXRlID0gIkZlZG9yYT14b3JnLXgxMS1zZXJ2ZXIgVWJ1bnR1PXhzZXJ2ZXIteG9yZyIKK0RJU1RST19QTl9BTElBU19wbi14c2VydmVyLXhvcmcgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlciBVYnVudHU9eHNlcnZlci14b3JnIgorRElTVFJPX1BOX0FMSUFTX3BuLXhzZXQgPSAiRmVkb3JhPXhvcmcteDExLXNlcnZlci11dGlscyBVYnVudHU9eDExLXhzZXJ2ZXItdXRpbHMgRGViaWFuPXgxMS14c2VydmVyLXV0aWxzIE9wZW5zdXNlPXhvcmcteDExIgorRElTVFJPX1BOX0FMSUFTX3BuLXh0c2NhbCA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vZ3BlLmxpbnV4dG9nby5vcmcvZG93bmxvYWQvc291cmNlLyIKK0RJU1RST19QTl9BTElBU19wbi14dXNlci1hY2NvdW50ID0gIk9FLUNvcmUiCitESVNUUk9fUE5fQUxJQVNfcG4teHZpZGVvLXRlc3RzID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4teHZpbmZvID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXh3aW5pbmZvID0gIkZlZG9yYT14b3JnLXgxMS11dGlscyBVYnVudHU9eDExLXV0aWxzIgorRElTVFJPX1BOX0FMSUFTX3BuLXlhZmZzMi11dGlscyA9ICJPU1BEVCB1cHN0cmVhbT1odHRwOi8vd3d3LnlhZmZzLm5ldCIKK0RJU1RST19QTl9BTElBU19wbi16YXVydXNkID0gIk9wZW5lZEhhbmQiCitESVNUUk9fUE5fQUxJQVNfcG4temVyb2NvbmYgPSAiT1NQRFQgdXBzdHJlYW09aHR0cDovL3d3dy5wcm9nc29jLm9yZy9+d2lsZGZpcmUvemVyb2NvbmYvIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3BhY2thZ2VfcmVnZXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMjk5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvcGFja2FnZV9yZWdleC5pbmMKQEAgLTAsMCArMSwyNzggQEAKKyMgcGFja2FnZV9yZWdleC5pbmMgLSBUaGlzIGZpbGUgY29udGFpbnMgZGF0YSB0aGF0IHRyYWNrcworIyB1cHN0cmVhbSBwcm9qZWN0IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIHJlY2lwZS4gVGhpcyBsaXN0IGlzIG5lZWRlZAorIyBmb3IgcmVjaXBlcyB0aGF0IHZlcnNpb24gaW5mb3JtYXRpb24gY2FuIG5vdCBiZSBhdXRvbWFnaWNhbGx5IGRpc2NvdmVyZWQuCisjIEFzIHdlIGF1dG9tYXRlIHRoaXMgY2hlY2tpbmcsIHRoaXMgZmlsZSB3aWxsIHNsb3dseSBiZSByZWR1Y2VkLgorIyIKKyMgVGhpcyBkYXRhIGlzIHVzZWQgYnkgdGhlIHBhY2thZ2UgcmVwb3J0aW5nIHN5c3RlbSAocGFja2FnZXMueW9jdG9wcm9qZWN0Lm9yZykKKyMiCisjIFRoZSBmb3JtYXQgaXMgYXMgYSBiaXRiYWtlIHZhcmlhYmxlIG92ZXJyaWRlIGZvciBlYWNoIHJlY2lwZQorIyIKKyMgICAgICAgUkVHRVhfVVJJX3BuLTxyZWNpcGUgbmFtZT4gPSAicmVjaXBlX3VybCIKKyMJIC0gVGhpcyBpcyB0aGUgdXJsIHVzZWQgYnkgdGhlIHBhY2thZ2UgY2hlY2tpbmcgc3lzdGVtIHRvCisjCSAgIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBhY2thZ2UKKyMgICAgICAgUkVHRVhfcG4tPHJlY2lwZSBuYW1lPiA9ICJwYWNrYWdlX3JlZ2V4IgorIwkgLSBUaGlzIGlzIHRoZSByZWdleCB0aGUgcGFja2FnZSBjaGVja2luZyBzeXN0ZW0gdXNlcyB0bworIwkgICBwYXJzZSB0aGUgcGFnZSBmb3VuZCBhdCBSRUdFWF9VUklfcG4tPHJlY2lwZSBuYW1lPgorIwlHSVRUQUdSRUdFWF9wbi08cmVjaXBlIG5hbWU+ID0gImdpdF90YWdfcmVnZXgiCisjCSAtIFdoZW4gc291cmNlIGNvZGUgaXMgZmV0Y2hlZCBmcm9tIGdpdCwgZ2l0IHRhZ3MgYXJlIHVzZWQgdG8KKyMJICAgZGV0ZXJtaW5lIHRoZSB1cHN0cmVhbSByZWxlYXNlIHZlcnNpb24uIFRoaXMgcmVnZXggY2FuIGJlIHVzZWQKKyMJICAgdG8gZmlsdGVyIG9ubHkgcmVsZXZhbnQgdGFncy4KKyMKKworQ09NTU9OX1JFR0VYID0gIig/UDxwdmVyPihcZCtbXC5cLV9dKikrKSIKKworIyBHZW5lcmljIHJlZ2V4IGRvbid0IG1hdGNoCitSRUdFWF9VUklfcG4td2lyZWxlc3MtdG9vbHMgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sIgorUkVHRVhfcG4td2lyZWxlc3MtdG9vbHMgPSAid2lyZWxlc3NfdG9vbHNcLig/UDxwdmVyPihcZCspKFwuLip8KSlcLnRhclwuZ3oiCisKK1JFR0VYX1VSSV9wbi1zcWxpdGUzPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvIgorUkVHRVhfcG4tc3FsaXRlMz0icmVsZWFzZWxvZy8ke0NPTU1PTl9SRUdFWH0uaHRtbCIKKworUkVHRVhfVVJJX3BuLWRoY3AgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2RoY3AvIgorUkVHRVhfcG4tZGhjcD0iKD9QPHB2ZXI+XGQrXC5cZCtcLihcZCs/KSkvIgorCitSRUdFWF9wbi1mb29tYXRpYy1maWx0ZXJzID0gImZvb21hdGljLWZpbHRlcnMtKD9QPHB2ZXI+KChcZHxcZFxkKVwuKikrKVwudGFyXC5neiIKK1JFR0VYX3BuLXhkZy11dGlscyA9ICJ4ZGctdXRpbHMtKD9QPHB2ZXI+KChcZCtbXC5cLV9dKikrKSgocmN8YWxwaGF8YmV0YSlcZCspPylcLih0YXJcLmd6fHRneikiCitSRUdFWF9wbi1ycG09InJwbS0ke0NPTU1PTl9SRUdFWH0tLiokIgorUkVHRVhfcG4tbGlidGhlb3JhID0gImxpYnRoZW9yYS0oP1A8cHZlcj5cZCsoXC5cZCkrKVwuKHRhclwuZ3p8dGd6KSIKKworUkVHRVhfcG4taXB1dGlscz0iaXB1dGlscy0oP1A8cHZlcj5zXGQrKS50YXIiCitSRUdFWF9wbi1uZXR0bGUgPSAibmV0dGxlLSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorCitSRUdFWF9wbi1jYWlybyA9ICJjYWlyby0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWNtYWtlID0gImNtYWtlLSg/UDxwdmVyPlxkKyhcLlxkKykrKVwudGFyIgorUkVHRVhfcG4tbGlic2RsID0gIlNETC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKK1JFR0VYX3BuLWxpYnhzbHQgPSAibGlieHNsdC0oP1A8cHZlcj5cZCsoXC5cZCspKylcLnRhciIKKworIyBFeGNsdWRlIE5DIHZlcnNpb25zIHdoaWNoIGxhY2sgQUVTIGVuY3J5cHRpb24KK1JFR0VYX3BuLWRiID0gImRiLSg/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKT8pLnRhciIKKworUkVHRVhfVVJJX3BuLWF1dG9nZW4gPSAiaHR0cDovL2Z0cC5nbnUub3JnL2dudS9hdXRvZ2VuLyIKK1JFR0VYX3BuLWF1dG9nZW4gPSAicmVsKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKKworIyBweXRob24gcmVjaXBlIGlzIGFjdHVhbGx5IHB5dGhvbiAyLngKKyMgYWxzbywgZXhjbHVkZSBwcmUtcmVsZWFzZXMgZm9yIGJvdGggcHl0aG9uIDIueCBhbmQgMy54CitSRUdFWF9wbi1weXRob24gPSAiW1BwXXl0aG9uLSg/UDxwdmVyPjIoXC5cZCspKykudGFyIgorUkVHRVhfcG4tcHl0aG9uMyA9ICJbUHBdeXRob24tKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworIyBleGNsdWRlIGJldGFzCitSRUdFWF9wbi10aWZmID0gInRpZmYtKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKworIyBleGNsdWRlIHZlcnNpb24gNS41LjIgd2hpY2ggdHJpZ2dlcnMgYSBmYWxzZSBwb3NpdGl2ZQorUkVHRVhfcG4tdW56aXAgPSAidW56aXAoP1A8cHZlcj4oPyE1NTIpLispXC50Z3oiCisjIHNpbWlsYXIgZm9yIHppcAorUkVHRVhfcG4temlwID0gIl56aXAoP1A8cHZlcj4oPyEyMzIpLispXC50Z3oiCisKKyMgSXNuJ3QgcG9zc2libGUgdG8gZG93bmxvYWQgd2l0aCB0aGUgZGVmYXVsdCBVUkkgd2ViIHNlcnZlciByZXR1cm5zCisjICg0MDMsIDQwNCwgNTUwKQorUkVHRVhfVVJJX3BuLWRvc2ZzdG9vbHMgPSAiaHR0cHM6Ly9naXRodWIuY29tL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9yZWxlYXNlcyIKK1JFR0VYX3BuLWpzb24tYyA9ICJqc29uLWMtKD9QPHB2ZXI+XGQrKFwuXGQrKSspLnRhciIKKyMganNvbi1jIHJlbGVhc2VzIHBhZ2UgaXMgZmV0Y2hpbmcgdGhlIGxpc3Qgb2YgcmVsZWFzZXMgaW4gc29tZSB3ZWlyZCBYTUwgZm9ybWF0CisjIGZyb20gaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2pzb24tY19yZWxlYXNlcyBhbmQgcHJvY2Vzc2VzIGl0IHdpdGggamF2YXNjcmlwdCA6LS8KKyNSRUdFWF9VUklfcG4tanNvbi1jID0gImh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9qc29uLWNfcmVsZWFzZXMvcmVsZWFzZXMvaW5kZXguaHRtbCIKK1JFR0VYX1VSSV9wbi1jaHJwYXRoID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvP2dyb3VwX2lkPTMxMDUyIgorCitSRUdFWF9VUklfcG4tcG93ZXJ0b3AgPSAiaHR0cHM6Ly8wMS5vcmcvcG93ZXJ0b3AvZG93bmxvYWRzIgorUkVHRVhfVVJJX3BuLWxpYnNhbXBsZXJhdGUwID0gImh0dHA6Ly93d3cubWVnYS1uZXJkLmNvbS9TUkMvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJ4a2Jjb21tb24gPSAiaHR0cDovL3hrYmNvbW1vbi5vcmcvIgorUkVHRVhfVVJJX3BuLXRzbGliID0gImh0dHBzOi8vZ2l0aHViLmNvbS9rZXJnb3RoL3RzbGliL3JlbGVhc2VzIgorUkVHRVhfVVJJX3BuLXdhZmZsZT0iaHR0cDovL3d3dy53YWZmbGUtZ2wub3JnL3JlbGVhc2VzLmh0bWwiCitSRUdFWF9VUklfcG4tbHJ6c3ogPSAiaHR0cDovL29oc2UuZGUvdXdlL3NvZnR3YXJlL2xyenN6Lmh0bWwiCitSRUdFWF9VUklfcG4tbGliYWNwaSA9ICJodHRwOi8vd3d3Lm5nb2xkZS5kZS9saWJhY3BpLmh0bWwiCitSRUdFWF9VUklfcG4tbGVzcyAgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vbGVzcy9kb3dubG9hZC5odG1sIgorUkVHRVhfVVJJX3BuLWN1cHMgPSAiaHR0cDovL3d3dy5jdXBzLm9yZy9zb2Z0d2FyZS5waHAiCitSRUdFWF9wbi1jdXBzID0gImN1cHMtKD9QPHB2ZXI+XGQrXC5cZCsoXC5cZCspPyktc291cmNlLnRhciIKK1JFR0VYX1VSSV9wbi1iemlwMiA9ICJodHRwOi8vd3d3LmJ6aXAub3JnL2Rvd25sb2Fkcy5odG1sIgorUkVHRVhfVVJJX3BuLW1pbmljb20gPSAiaHR0cHM6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvP2dyb3VwX2lkPTMwMDE4IgorUkVHRVhfVVJJX3BuLXN5c3N0YXQgPSAiaHR0cDovL3NlYmFzdGllbi5nb2RhcmQucGFnZXNwZXJzby1vcmFuZ2UuZnIvZG93bmxvYWQuaHRtbCIKK1JFR0VYX1VSSV9wbi1saWJpY2FsID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwvcmVsZWFzZXMvIgorUkVHRVhfVVJJX3BuLWxpYm1wYyA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy9pbmRleC5waHA/cHJvZz1tcGMmcGFnZT1kb3dubG9hZCIKK1JFR0VYX1VSSV9wbi10YWdsaWIgPSAiaHR0cDovL2dpdGh1Yi5jb20vdGFnbGliL3RhZ2xpYi9yZWxlYXNlcy8iCitSRUdFWF9VUklfcG4tbGliZXZlbnQgPSAiaHR0cDovL2xpYmV2ZW50Lm9yZy8iCitSRUdFWF9VUklfcG4tZGIgPSAiaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL3Byb2R1Y3RzL2JlcmtlbGV5ZGIvZG93bmxvYWRzL2luZGV4LTA4Mjk0NC5odG1sIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1zbWFydHBtPSJodHRwczovL2xhdW5jaHBhZC5uZXQvc21hcnQvdHJ1bmsvIgorUkVHRVhfVVJJX3BuLWxzb2YgPSAiZnRwOi8vc3Vuc2l0ZS51YWxiZXJ0YS5jYS9wdWIvTWlycm9yL2xzb2YvIgorUkVHRVhfVVJJX3BuLXBiemlwMiA9ICJodHRwOi8vY29tcHJlc3Npb24uY2EvcGJ6aXAyLyIKK1JFR0VYX1VSSV9wbi1xdWlja3kgPSAiaHR0cDovL3F0LWFwcHMub3JnL2NvbnRlbnQvZG93bmxvYWQucGhwP2NvbnRlbnQ9ODAzMjUmaWQ9MSZ0YW49MTA0MTc0ODIiCitSRUdFWF9VUklfcG4tbGlid2VicCA9ICJodHRwOi8vZG93bmxvYWRzLndlYm1wcm9qZWN0Lm9yZy9yZWxlYXNlcy93ZWJwL2luZGV4Lmh0bWwiCisKKyMgVGhlIGVuZ2luZSB0cmllcyB0byB1c2UgZGlyZWN0b3J5IHZlcnNpb25pbmcgYnV0IGlzIGEgZmFsc2UtcG9zaXRpdmUKK1JFR0VYX1VSSV9wbi1pbnRsdG9vbCA9ICJodHRwczovL2xhdW5jaHBhZC5uZXQvaW50bHRvb2wvdHJ1bmsvIgorUkVHRVhfVVJJX3BuLWxpYm5mc2lkbWFwID0gImh0dHA6Ly93d3cuY2l0aS51bWljaC5lZHUvcHJvamVjdHMvbmZzdjQvbGludXgvbGlibmZzaWRtYXAvIgorUkVHRVhfVVJJX3BuLW1wZnIgPSAiaHR0cDovL3d3dy5tcGZyLm9yZy9tcGZyLWN1cnJlbnQvIgorUkVHRVhfVVJJX3BuLW5zcyA9ICJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvUHJvamVjdHMvTlNTL05TU19SZWxlYXNlcyIKK1JFR0VYX3BuLW5zcyA9ICJOU1NfKD9QPHB2ZXI+LispX3JlbGVhc2Vfbm90ZXMiCisKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXNnbWwtZHRkLTMuMSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvIgorUkVHRVhfcG4tZG9jYm9vay1zZ21sLWR0ZC0zLjEgPSAiKD9QPHB2ZXI+M1wuLispLyIKK1JFR0VYX1VSSV9wbi1kb2Nib29rLXNnbWwtZHRkLTQuMSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvIgorUkVHRVhfcG4tZG9jYm9vay1zZ21sLWR0ZC00LjEgPSAiKD9QPHB2ZXI+NFwuMShcLlxkKykqKS8iCisKKyMgUXQgcmVjaXBlcyBzaG91bGQgYmUga2VwdCBhdCA0LngKK1JFR0VYX1VSSV9wbi1xdDQtZW1iZWRkZWQgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1xdDQtZW1iZWRkZWQgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1xdDQteDExLWZyZWUgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1xdDQteDExLWZyZWUgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspLyIKK1JFR0VYX1VSSV9wbi1uYXRpdmVzZGstcXQ0LXRvb2xzID0gImh0dHA6Ly9kb3dubG9hZC5xdC5pby9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvIgorUkVHRVhfcG4tbmF0aXZlc2RrLXF0NC10b29scyA9ICIoP1A8cHZlcj5cZCsoXC5cZCspKykvIgorUkVHRVhfVVJJX3BuLXF0NC1uYXRpdmUgPSAiaHR0cDovL2Rvd25sb2FkLnF0LmlvL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8iCitSRUdFWF9wbi1xdDQtbmF0aXZlID0gIig/UDxwdmVyPlxkKyhcLlxkKykrKS8iCisKKyMgUHlQSSBzaXRlcworUkVHRVhfVVJJX3BuLXB5dGhvbi1ub3NlID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbm9zZS8iCitSRUdFWF9wbi1weXRob24tbm9zZSA9ICIvbm9zZS8ke0NPTU1PTl9SRUdFWH0iCisjIHB5dGhvbi1kaXN0cmlidXRlIDAuNy54IGlzIGEgc2ltcGxlIGNvbXBhdGliaWxpdHkgbGF5ZXIgdGhhdCBpbnN0YWxscyBTZXR1cHRvb2xzIDAuNysuCisjIHNvIHdlIHN0aWNrIHRvIDAuNi54IHNlcmllcworUkVHRVhfVVJJX3BuLXB5dGhvbi1kaXN0cmlidXRlID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvZGlzdHJpYnV0ZS8iCitSRUdFWF9wbi1weXRob24tZGlzdHJpYnV0ZSA9ICIvZGlzdHJpYnV0ZS8oP1A8cHZlcj5cZCsuNi5cZCspIgorUkVHRVhfVVJJX3BuLXB5dGhvbi1naXRkYiA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2dpdGRiLyIKK1JFR0VYX1VSSV9wbi1weXRob24tYXN5bmMgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9hc3luYy8iCitSRUdFWF9VUklfcG4tcHl0aG9uLXNtbWFwID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc21tYXAvIgorUkVHRVhfcG4tcHl0aG9uLXNtbWFwID0gIi9zbW1hcC8ke0NPTU1PTl9SRUdFWH0iCitSRUdFWF9VUklfcG4tcHl0aG9uLWdpdCA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL0dpdFB5dGhvbi8iCitSRUdFWF9wbi1weXRob24tZ2l0ID0gIi9HaXRQeXRob24vJHtDT01NT05fUkVHRVh9IgorUkVHRVhfVVJJX3BuLXB5dGhvbi1tYWtvID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvbWFrby8iCitSRUdFWF9wbi1weXRob24tbWFrbyA9ICIvTWFrby8ke0NPTU1PTl9SRUdFWH0iCitSRUdFWF9VUklfcG4tcHl0aG9uLXBleHBlY3QgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9wZXhwZWN0IgorUkVHRVhfVVJJX3BuLXB5dGhvbjMtcGlwID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGlwIgorUkVHRVhfVVJJX3BuLXB5dGhvbjMtc2V0dXB0b29scyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3NldHVwdG9vbHMiCisKKyMgU291cmNlZm9yZ2Ugc2l0ZXMKK1JFR0VYX1VSSV9wbi1weXRob24tc2NvbnMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9zY29ucy9maWxlcy9zY29ucy8iCitSRUdFWF9wbi1weXRob24tc2NvbnMgPSAiL3Njb25zLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tZXhwZWN0ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZXhwZWN0L2ZpbGVzL0V4cGVjdC8iCitSRUdFWF9wbi1leHBlY3QgPSAiL0V4cGVjdC8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWRvY2Jvb2steHNsLXN0eWxlc2hlZXRzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZG9jYm9vay9maWxlcy9kb2Nib29rLXhzbC8iCitSRUdFWF9wbi1kb2Nib29rLXhzbC1zdHlsZXNoZWV0cyA9ICIvZG9jYm9vay14c2wvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1nbGV3ID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2xldy9maWxlcy9nbGV3IgorUkVHRVhfcG4tZ2xldyA9ICIvZ2xldy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLW1lbnUtY2FjaGUgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9seGRlL2ZpbGVzL21lbnUtY2FjaGUvMS4wLyIKK1JFR0VYX1VSSV9wbi14MTF2bmMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ2bmNzZXJ2ZXIvZmlsZXMveDExdm5jLyIKK1JFR0VYX3BuLXgxMXZuYyA9ICIveDExdm5jLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tcXVvdGEgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eHF1b3RhL2ZpbGVzL3F1b3RhLXRvb2xzLyIKK1JFR0VYX3BuLXF1b3RhID0gIi9xdW90YS10b29scy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxzYiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xzYi9maWxlcy9sc2JfcmVsZWFzZS8iCitSRUdFWF9wbi1sc2IgPSAiL2xzYl9yZWxlYXNlLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbGlicGNyZSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BjcmUvZmlsZXMvcGNyZS8iCitSRUdFWF9wbi1saWJwY3JlID0gIi9wY3JlLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tbGlidXNiLWNvbXBhdCA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnVzYi9maWxlcy9saWJ1c2ItY29tcGF0LTAuMS8iCitSRUdFWF9wbi1saWJ1c2ItY29tcGF0ID0gIi9saWJ1c2ItY29tcGF0LSR7Q09NTU9OX1JFR0VYfS8kIgorUkVHRVhfVVJJX3BuLXN5c2ZzdXRpbHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saW51eC1kaWFnL2ZpbGVzL3N5c2ZzdXRpbHMvIgorUkVHRVhfcG4tc3lzZnN1dGlscyA9ICIvc3lzZnN1dGlscy8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWNvbnNvbGUtdG9vbHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9sY3QvZmlsZXMvY29uc29sZS10b29scy1kZXZlbC8iCitSRUdFWF9wbi1jb25zb2xlLXRvb2xzID0gIi9jb25zb2xlLXRvb2xzLWRldmVsLyg/UDxwdmVyPihcZFxkP1wuKStcZFxkPykvIgorUkVHRVhfVVJJX3BuLXdhdGNoZG9nID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvd2F0Y2hkb2cvZmlsZXMvd2F0Y2hkb2cvIgorUkVHRVhfcG4td2F0Y2hkb2cgPSAiL3dhdGNoZG9nLyR7Q09NTU9OX1JFR0VYfS8iCitSRUdFWF9VUklfcG4tY3JhY2tsaWIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9jcmFja2xpYi9maWxlcy9jcmFja2xpYi8iCitSRUdFWF9wbi1jcmFja2xpYiA9ICIvY3JhY2tsaWIvJHtDT01NT05fUkVHRVh9LyIKK1JFR0VYX1VSSV9wbi1ncHRmZGlzayA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dwdGZkaXNrL2ZpbGVzL2dwdGZkaXNrLyIKK1JFR0VYX3BuLWdwdGZkaXNrID0gIi9ncHRmZGlzay8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWxpYnBuZzEyID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlicG5nL2ZpbGVzL2xpYnBuZzEyLyIKK1JFR0VYX3BuLWxpYnBuZzEyID0gIi9saWJwbmcxMi8ke0NPTU1PTl9SRUdFWH0vIgorUkVHRVhfVVJJX3BuLWRvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9kb2Nib29rL2ZpbGVzL2RvY2Jvb2stZHNzc2wvIgorUkVHRVhfcG4tZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cyA9ICIvZG9jYm9vay1kc3NzbC8ke0NPTU1PTl9SRUdFWH0vIgorCitSRUdFWF9VUklfcG4tb3BlbmphZGUgPSAiaHR0cDovL29wZW5qYWRlLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZC5odG1sIgorUkVHRVhfVVJJX3BuLWxpYnBmbTQgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9wZXJmbW9uMi9maWxlcy9saWJwZm00LyIKK1JFR0VYX1VSSV9wbi1saWJhNTIgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvZG93bmxvYWRzLmh0bWwiCitSRUdFWF9VUklfcG4tbXBlZzJkZWMgPSAiaHR0cDovL2xpYm1wZWcyLnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZHMuaHRtbCIKK1JFR0VYX1VSSV9wbi1wY21hbmZtID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGNtYW5mbS9maWxlcy9QQ01hbkZNJTIwJTJCJTIwTGliZm0lMjAlMjh0YXJiYWxsJTIwcmVsZWFzZSUyOS9QQ01hbkZNLyIKK1JFR0VYX1VSSV9wbi1saWJjZ3JvdXAgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZy9maWxlcy9saWJjZ3JvdXAvIgorUkVHRVhfVVJJX3BuLWNkcnRvb2xzID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY2RydG9vbHMvZmlsZXMvYWxwaGEvIgorCisjIEdJVAorR0lUVEFHUkVHRVhfQ09NTU9OID0gIig/UDxwdmVyPlxkK1wuXGQrKFwuXGQrKSopIgorCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0byA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi1saW51eC15b2N0by10aW55ID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWxpbnV4LXlvY3RvLWRldiA9ICIke0dJVFRBR1JFR0VYX0NPTU1PTn0iCitHSVRUQUdSRUdFWF9wbi11Y2xpYmMgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tZ2xpYmMgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tY3Jvc3MtbG9jYWxlZGVmID0gIiR7R0lUVEFHUkVHRVhfQ09NTU9OfSIKK0dJVFRBR1JFR0VYX3BuLWJpbnV0aWxzID0gImJpbnV0aWxzLSg/UDxwdmVyPlxkK18oXGRfPykqKSIKK0dJVFRBR1JFR0VYX3BuLWJvb3RjaGFydDIgPSAiJHtHSVRUQUdSRUdFWF9DT01NT059IgorR0lUVEFHUkVHRVhfcG4tcmVtYWtlID0gIig/UDxwdmVyPihcZCsoXC5cZCspKylcK2RiZy4rKSIKK0dJVFRBR1JFR0VYX3BuLXRjZi1hZ2VudCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKK0dJVFRBR1JFR0VYX3BuLWNoa2NvbmZpZy1hbHRlcm5hdGl2ZXMgPSAiY2hrY29uZmlnLSg/UDxwdmVyPihcZCsoXC5cZCspKykpIgorR0lUVEFHUkVHRVhfcG4tc2dtbHNwbCA9ICIoP1A8cHZlcj4oXGQrKFwuXGQrKSspKSIKKworIyBFeGNsdWRlIHguOTkueCB2ZXJzaW9ucworR0lUVEFHUkVHRVhfcG4tbXgtMS4wID0gIig/UDxwdmVyPl5cZCsoXC4oPyE5OSlcZCspKykiCisKKyMgQmxhY2tsaXN0IGEgYm9ndXMgdGFnCitHSVRUQUdSRUdFWF9wbi1maWxlID0gIkZJTEUoP1A8cHZlcj4oPyE2XzIzKS4rKSIKK0dJVFRBR1JFR0VYX3BuLXhpbmV0ZCA9ICJ4aW5ldGQtKD9QPHB2ZXI+KD8hMjAwMzAxMjIpLispIgorCisjIEJsYWNrbGlzdCBkZWJpYW4tc3BlY2lmaWMgdGFncworR0lUVEFHUkVHRVhfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiKD9QPHB2ZXI+XGQrKFwuXGQrKSspKD8hLSkiCisKKyMgR05PTUUgcmVsYXRlZC4KKyMKKyMgR05PTUUyX1NUQUJMRSBwaWNrcyBzdGFibGUgcmVsZWFzZXMgaW4gdGhlIDIueCBzZXJpZXMgKHNvIG5vdCAyLjkwIG9ud2FyZHMsCisjIHdoaWNoIHdlcmUgR05PTUUgMyBiZXRhcy4KKyMKKyMgR05PTUVfU1RBQkxFIHBpY2tzIHRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2UuCisKK0dOT01FMl9TVEFCTEUgPSAiKD9QPHB2ZXI+MlwuKFswLThdKlswMjQ2OF0pKyhcLlxkKykrKSIKK0dOT01FX1NUQUJMRSA9ICIoP1A8cHZlcj5cZCtcLihcZCpbMDI0NjhdKSsoXC5cZCspKykiCisKK1JFR0VYX3BuLWdsaWItMi4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWF0ayA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1hdC1zcGkyLWNvcmUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tYXQtc3BpMi1hdGsgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ2RrLXBpeGJ1ZiA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1wYW5nbyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1ndGsrID0gIiR7R05PTUUyX1NUQUJMRX0iCitSRUdFWF9wbi1ndGsrMyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1ndGstZW5naW5lcyA9ICIke0dOT01FMl9TVEFCTEV9IgorUkVHRVhfcG4tZ2xpYi1uZXR3b3JraW5nID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWxpYnJzdmcgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tbGlic291cC0yLjQgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tdmFsYSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jbHV0dGVyLTEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1jbHV0dGVyLWd0ay0xLjAgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tY2x1dHRlci1nc3QtMy4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWNvZ2wtMS4wID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWFkd2FpdGEtaWNvbi10aGVtZSA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi12dGUgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZXBpcGhhbnkgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4td2Via2l0Z3RrID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLXAxMS1raXQgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ25vbWUtZGVza3RvcDMgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIG5vdCBHTk9NRSByZWxhdGVkIGJ1dCB1c2VzIHNhbWUgZXZlbi1taW5vci1yZWxlYXNlLWlzLXN0YWJsZSBsb2dpYworUkVHRVhfcG4tZGJ1cyA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1kYnVzLXRlc3QgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIHNhbWUgbG9naWMgYXBwbGllcyB0byBnc3RyZWFtZXIgcmVsZWFzZXMKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtbGliYXYgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgPSAiJHtHTk9NRV9TVEFCTEV9IgorUkVHRVhfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICIke0dOT01FX1NUQUJMRX0iCitSRUdFWF9wbi1nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5ID0gIiR7R05PTUVfU1RBQkxFfSIKK1JFR0VYX3BuLWdzdHJlYW1lcjEuMC1ydHNwLXNlcnZlciA9ICIke0dOT01FX1NUQUJMRX0iCisKKyMgYW5kIHBlcmwKK1JFR0VYX3BuLXBlcmwgPSAiJHtHTk9NRV9TVEFCTEV9IgorCisjIEtlZXAgb2xkIGdjYyB2ZXJzaW9ucyBhdCB0aGVpciBtYWpvciB2ZXJzaW9ucworUkVHRVhfcG4tZ2NjLXNvdXJjZS00LjkuMyA9ICJnY2MtKD9QPHB2ZXI+NFwuOVwuXGQrKS50YXIiCitSRUdFWF9wbi1nY2Mtc291cmNlLTQuOC40ID0gImdjYy0oP1A8cHZlcj40XC44XC5cZCspLnRhciIKKworIyB0aGVzZSBwYWNrYWdlcyBhcmUgdGFrZW4gZnJvbSBzbmFwc2hvdHMuZGViaWFuLm9yZzsgdGhhdCBzb3VyY2UgaXMgc3RhdGljIGFuZCBnb2VzIHN0YWxlCisjIHNvIHdlIGNoZWNrIHRoZSBsYXRlc3QgdXBzdHJlYW0gZnJvbSBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgZ2V0IHVwZGF0ZWQKK1JFR0VYX1VSSV9wbi1hcHQgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXB0LyIKK1JFR0VYX1VSSV9wbi1yZXNvbHZjb25mID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9yL3Jlc29sdmNvbmYvIgorUkVHRVhfVVJJX3BuLW5ldC10b29scyA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbi9uZXQtdG9vbHMvIgorCisjIHNhbWUgZm9yIHBhY2thZ2VzIGZyb20gbGF1bmNocGFkCitSRUdFWF9VUklfcG4tYmFzZS1wYXNzd2QgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2IvYmFzZS1wYXNzd2QvIgorCisjIGZvciB0aGVzZSBwYWNrYWdlcyB3ZSdyZSBtb3N0bHkgaW50ZXJlc3RlZCBpbiB0cmFja2luZyBkZWJpYW4gcGF0Y2hlcywKKyMgYW5kIG5vdCBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB3aGVyZSBhbGwgZGV2ZWxvcG1lbnQgaGFzIGVmZmVjdGl2ZWx5IHN0b3BwZWQKK0RFQklBTl9QQVRDSF9SRUdFWCA9ICIoP1A8cHZlcj4oKFxkK1wuKikrKS0oKFxkK1wuKikrKSlcLihkaWZmfGRlYmlhblwudGFyKVwuKGd6fHh6KSIKK1JFR0VYX3BuLW5ldC10b29scyA9ICIke0RFQklBTl9QQVRDSF9SRUdFWH0iCitSRUdFWF9wbi1hcG1kID0gIiR7REVCSUFOX1BBVENIX1JFR0VYfSIKK1JFR0VYX3BuLWJsa3Rvb2wgPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgorUkVHRVhfcG4tbWFpbHggPSAiJHtERUJJQU5fUEFUQ0hfUkVHRVh9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3NlY3VyaXR5X2ZsYWdzLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRhYzBiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS9zZWN1cml0eV9mbGFncy5pbmMKQEAgLTAsMCArMSwxMDMgQEAKKyMgU2V0dXAgZXh0cmEgQ0ZMQUdTIGFuZCBMREZMQUdTIHdoaWNoIGhhdmUgJ3NlY3VyaXR5JyBiZW5lZml0cy4gVGhlc2UgCisjIGRvbid0IHdvcmsgdW5pdmVyc2FsbHksIHRoZXJlIGFyZSByZWNpcGVzIHdoaWNoIGNhbid0IHVzZSBvbmUsIHRoZSBvdGhlcgorIyBvciBib3RoIHNvIGEgYmxhY2tsaXN0IGlzIG1haW50YWluZWQgaGVyZS4gVGhlIGlkZWEgd291bGQgYmUgb3ZlcgorIyB0aW1lIHRvIHJlZHVjZSB0aGlzIGxpc3QgdG8gbm90aGluZy4KKyMgRnJvbSBhIFlvY3RvIFByb2plY3QgcGVyc3BlY3RpdmUsIHRoaXMgZmlsZSBpcyBpbmNsdWRlZCBhbmQgdGVzdGVkCisjIGluIHRoZSBESVNUUk89InBva3ktbHNiIiBjb25maWd1cmF0aW9uLgorCisjIF9GT1JUSUZZX1NPVVJDRSByZXF1aXJlcyAtTzEgb3IgaGlnaGVyLCBzbyBkaXNhYmxlIGluIGRlYnVnIGJ1aWxkcyBhcyB0aGV5IHVzZQorIyAtTzAgd2hpY2ggdGhlbiByZXN1bHRzIGluIGEgY29tcGlsZXIgd2FybmluZy4KK2xjbF9tYXliZV9mb3J0aWZ5ID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ0RFQlVHX0JVSUxEJywnMScsJycsJy1EX0ZPUlRJRllfU09VUkNFPTInLGQpfSIKKworU0VDVVJJVFlfQ0ZMQUdTID89ICItZnN0YWNrLXByb3RlY3Rvci1hbGwgLXBpZSAtZnBpZSAke2xjbF9tYXliZV9mb3J0aWZ5fSIKK1NFQ1VSSVRZX05PX1BJRV9DRkxBR1MgPz0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAke2xjbF9tYXliZV9mb3J0aWZ5fSIKKworU0VDVVJJVFlfTERGTEFHUyA/PSAiLVdsLC16LHJlbHJvLC16LG5vdyIKK1NFQ1VSSVRZX1hfTERGTEFHUyA/PSAiLVdsLC16LHJlbHJvIgorCisjIHBvd2VycGMgZG9lcyBub3QgZ2V0IG9uIHdpdGggcGllIGZvciByZWFzb25zIG5vdCBsb29rZWQgaW50byBhcyB5ZXQKK1NFQ1VSSVRZX0NGTEFHU19wb3dlcnBjID0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAke2xjbF9tYXliZV9mb3J0aWZ5fSIKKyMgRGVhbCB3aXRoIHBwYyBzcGVjaWZpYyBsaW5rZXIgZmFpbHVyZXMgd2hlbiB1c2luZyB0aGUgY2ZsYWdzCitTRUNVUklUWV9DRkxBR1NfcG4tZGJ1c19wb3dlcnBjID0gIiIKK1NFQ1VSSVRZX0NGTEFHU19wbi1kYnVzLXB0ZXN0X3Bvd2VycGMgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYm1hdGNoYm94X3Bvd2VycGMgPSAiIgorCisjIGFybSBzcGVjaWZpYyBzZWN1cml0eSBmbGFnIGlzc3VlcworU0VDVVJJVFlfQ0ZMQUdTX3BuLWx0dG5nLXRvb2xzX2FybSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWFzcGVsbCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWJlZWNyeXB0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tYmxrdHJhY2UgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jb3JldXRpbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKKyMgQ3VybCBzZWVtcyB0byBjaGVjayBmb3IgRk9SVElGWV9TT1VSQ0UgaW4gQ0ZMQUdTLCBidXQgZXZlbiBhc3NpZ25lZAorIyB0byBDUFBGTEFHUyBpdCBnZXRzIHBpY2tlZCBpbnRvIENGTEFHUyBpbiBiaXRiYWtlLgorI1RBUkdFVF9DUFBGTEFHU19wbi1jdXJsICs9ICItRF9GT1JUSUZZX1NPVVJDRT0yIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWN1cHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1jdXJsID0gIi1mc3RhY2stcHJvdGVjdG9yLWFsbCAtcGllIC1mcGllIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWRiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZGlyZWN0ZmIgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nbGliYyA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ2xpYmMtaW5pdGlhbCA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZWxmdXRpbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1lbmNoYW50ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZXhwZWN0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZmxhYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWZsZXggPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2MgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1nY2MtcnVudGltZSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdjYy1zYW5pdGl6ZXJzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ2RiID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ21wID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ251dGxzID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1YiA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLW5hdGl2ZSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmkteDg2LW5hdGl2ZSA9ICIiCitTRUNVUklUWV9DRkxBR1NfcG4tZ3J1Yi1lZmktaTU4Ni1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdydWItZWZpLXg4Ni02NC1uYXRpdmUgPSAiIgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdC1wbHVnaW5zLWJhZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWdzdC1wbHVnaW5zLWdsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWhhcmZidXp6ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4ta2V4ZWMtdG9vbHMgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1pcHRhYmxlcyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmFpbyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmNhcCA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmdjYyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYmlkM3RhZyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYm5ld3QgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJnbHUgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1saWJwY2FwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbGlicGNyZSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLWxpYnByb3h5ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbHR0bmctdXN0ID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tbWVzYSA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLW1lc2EtZ2wgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1vcGVuc3NsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tb3BlbnNwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHBwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLWltYWdpbmcgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tcHljdXJsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHl0aG9uLXNtYXJ0cG0gPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24tbnVtcHkgPSAiJHtTRUNVUklUWV9OT19QSUVfQ0ZMQUdTfSIKK1NFQ1VSSVRZX0NGTEFHU19wbi1weXRob24zID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tdGNsID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tdGlmZiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorU0VDVVJJVFlfQ0ZMQUdTX3BuLXZhbGdyaW5kID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4temxpYiA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorCisjIFRoZXNlIDIgaGF2ZSB0ZXh0IHJlbGNvIGVycm9ycyB3aXRoIHRoZSBwaWUgb3B0aW9ucyBlbmFibGVkCitTRUNVUklUWV9DRkxBR1NfcG4tbHRwID0gIiR7U0VDVVJJVFlfTk9fUElFX0NGTEFHU30iCitTRUNVUklUWV9DRkxBR1NfcG4tcHVsc2VhdWRpbyA9ICIke1NFQ1VSSVRZX05PX1BJRV9DRkxBR1N9IgorCitUQVJHRVRfQ0ZMQUdTX2FwcGVuZCA9ICIgJHtTRUNVUklUWV9DRkxBR1N9IgorVEFSR0VUX0xERkxBR1NfYXBwZW5kID0gIiAke1NFQ1VSSVRZX0xERkxBR1N9IgorCitTRUNVUklUWV9MREZMQUdTX3BuLXhmODYtdmlkZW8tZmJkZXYgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLWludGVsID0gIiR7U0VDVVJJVFlfWF9MREZMQUdTfSIKK1NFQ1VSSVRZX0xERkxBR1NfcG4teGY4Ni12aWRlby1vbWFwZmIgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLW9tYXAgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLXZlc2EgPSAiJHtTRUNVUklUWV9YX0xERkxBR1N9IgorU0VDVVJJVFlfTERGTEFHU19wbi14Zjg2LXZpZGVvLXZtd2FyZSA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCitTRUNVUklUWV9MREZMQUdTX3BuLXhzZXJ2ZXIteG9yZyA9ICIke1NFQ1VSSVRZX1hfTERGTEFHU30iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWJhcmVtZXRhbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThjZTZkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtYmFyZW1ldGFsLmluYwpAQCAtMCwwICsxLDMyIEBACisjCisjIGJhcmVtZXRhbCBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiIgorCisjIEFkZCBiYXJlbWV0YWwgbGliYyBvdmVycmlkZXMgdG8gdGhlIG92ZXJyaWRlcy4KK0xJQkNPVkVSUklERSA9ICI6bGliYy1iYXJlbWV0YWwiCitPVkVSUklERVMgLj0gIiR7TElCQ09WRVJSSURFfSIKKworQVNTVU1FX1BST1ZJREVEICs9ICJ2aXJ0dWFsL2xpYmMgdmlydHVhbC9saWJpY29udiIKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAibXVzbCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaW50bCA/PSAiZ2V0dGV4dCIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpbnRsID89ICJuYXRpdmVzZGstZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliaWNvbnYgPz0gIm5hdGl2ZXNkay1nbGliYyIKKworVVNFX05MUyA/PSAibm8iCitJTUFHRV9MSU5HVUFTID0gIiIKK0xJQkNfREVQRU5ERU5DSUVTID0gIiIKKworRVhUUkFfT0VDT05GX3BuLWdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfV9hcHBlbmQgPSAiIC0td2l0aG91dC1oZWFkZXJzIgorREVQRU5EU19yZW1vdmVfcG4tbWV0YS10b29sY2hhaW4gPSAidmlydHVhbC9saWJjIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyIKKworVEFSR0VUX09TID0gImVsZiIKK1RBUkdFVF9PU19hcm0gPSAiZWFiaSIKKworVE9PTENIQUlOX0hPU1RfVEFTSyA/PSAicGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fSE9TVF9UQVNLX0FUVEVNUFRPTkxZID89ICIiCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPz0gImxpYmdjYy1kZXYiCitUT09MQ0hBSU5fTkVFRF9DT05GSUdTSVRFX0NBQ0hFX3JlbW92ZSA9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9bGliYyB6bGliIG5jdXJzZXMiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtZ2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0OTkxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLWdsaWJjLmluYwpAQCAtMCwwICsxLDQwIEBACisjCisjIGdsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKyMKKworTElCQ0VYVEVOU0lPTiA9ICIke0BbJycsICctZ251J11bKGQuZ2V0VmFyKCdBQklFWFRFTlNJT04nLCBUcnVlKSBvciAnJykgIT0gJyddfSIKKworIyBBZGQgZ2xpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMgZm9yIGdsaWJjLgorTElCQ09WRVJSSURFID0gIjpsaWJjLWdsaWJjIgorT1ZFUlJJREVTIC49ICIke0xJQkNPVkVSUklERX0iCisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmljb252ID89ICJnbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmludGwgPz0gImdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYyA/PSAiZ2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9uYXRpdmVzZGstbGliYyA/PSAibmF0aXZlc2RrLWdsaWJjIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliYy1sb2NhbGUgPz0gImdsaWJjLWxvY2FsZSIKKworQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKKworTElCQ19ERVBFTkRFTkNJRVMgPSAibGlic2VnZmF1bHQgXAorCQkgICAgIGdsaWJjIFwKKwkJICAgICBnbGliYy1kYmcgXAorCQkgICAgIGdsaWJjLWRldiBcCisJCSAgICAgZ2xpYmMtdXRpbHMgXAorCQkgICAgIGdsaWJjLXRocmVhZC1kYiBcCisJCSAgICAgJHtAZ2V0X2xpYmNfbG9jYWxlc19kZXBlbmRlbmNpZXMoZCl9IgorCitMSUJDX0xPQ0FMRV9ERVBFTkRFTkNJRVMgPSAiXAorCWdsaWJjLWxvY2FsZWRhdGEtaTE4biBcCisJZ2xpYmMtZ2NvbnYtaWJtODUwIFwKKwlnbGliYy1nY29udi1jcDEyNTIgXAorCWdsaWJjLWdjb252LWlzbzg4NTktMSBcCisJZ2xpYmMtZ2NvbnYtaXNvODg1OS0xNSIKKworZGVmIGdldF9saWJjX2xvY2FsZXNfZGVwZW5kZW5jaWVzKGQpOgorICAgIGlmICdsaWJjLWxvY2FsZXMnIGluIChkLmdldFZhcignRElTVFJPX0ZFQVRVUkVTJywgVHJ1ZSkgb3IgJycpLnNwbGl0KCkgOgorICAgICAgICByZXR1cm4gZC5nZXRWYXIoJ0xJQkNfTE9DQUxFX0RFUEVOREVOQ0lFUycsIFRydWUpIG9yICcnCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICcnCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLW11c2wuaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGRkNThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3RjbGliYy1tdXNsLmluYwpAQCAtMCwwICsxLDI3IEBACisjCisjIG11c2wgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorIworCitMSUJDRVhURU5TSU9OID0gIi1tdXNsIgorCisjIEFkZCB1Y2xpYmMgb3ZlcnJpZGVzIHRvIHRoZSBvdmVycmlkZXMuCitMSUJDT1ZFUlJJREUgPSAiOmxpYmMtbXVzbCIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliaWNvbnYgPz0gIm11c2wiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJtdXNsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorCisjVVNFX05MUyA/PSAibm8iCisKK0NYWEZMQUdTICs9ICItZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisKK0lNQUdFX0xJTkdVQVMgPSAiIgorCitMSUJDX0RFUEVOREVOQ0lFUyA9ICJcCisgICAgbXVzbCBcCisgICAgbXVzbC1kYmcgXAorICAgIG11c2wtZGV2IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNsaWJjLXVjbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjM2NkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y2xpYmMtdWNsaWJjLmluYwpAQCAtMCwwICsxLDI4IEBACisjCisjIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9uCisjCisKK0xJQkNFWFRFTlNJT04gPSAiLXVjbGliYyIKKworIyBBZGQgdWNsaWJjIG92ZXJyaWRlcyB0byB0aGUgb3ZlcnJpZGVzLgorTElCQ09WRVJSSURFID0gIjpsaWJjLXVjbGliYyIKK09WRVJSSURFUyAuPSAiJHtMSUJDT1ZFUlJJREV9IgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJjID89ICJ1Y2xpYmMiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpY29udiA/PSAibGliaWNvbnYiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJpbnRsID89ICJnZXR0ZXh0IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLWxpYmludGwgPz0gIm5hdGl2ZXNkay1nbGliYyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL25hdGl2ZXNkay1saWJpY29udiA/PSAibmF0aXZlc2RrLWdsaWJjIgorCitVU0VfTkxTID89ICJubyIKKworQ1hYRkxBR1MgKz0gIi1mdmlzaWJpbGl0eS1pbmxpbmVzLWhpZGRlbiIKKworSU1BR0VfTElOR1VBUyA9ICIiCisKK0xJQkNfREVQRU5ERU5DSUVTID0gIlwKKyAgICB1Y2xpYmMgXAorICAgIHVjbGliYy1kYmcgXAorICAgIHVjbGliYy1kZXYgXAorICAgIHVjbGliYy10aHJlYWQtZGIgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS90Y21vZGUtZGVmYXVsdC5pbmMgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDU1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZGlzdHJvL2luY2x1ZGUvdGNtb2RlLWRlZmF1bHQuaW5jCkBAIC0wLDAgKzEsNzUgQEAKKyMKKyMgRGVmYXVsdCB0b29sY2hhaW4gY29uZmlndXJhdGlvbgorIworCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMgPSAiYmludXRpbHMtY3Jvc3MtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysgPSAiZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGlicyA9ICJnY2MtcnVudGltZSIKK1BSRUZFUlJFRF9QUk9WSURFUl9nZGIgPSAiZ2RiIgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgPz0gImJpbnV0aWxzLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWdjYy1pbml0aWFsID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7U0RLX0FSQ0h9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvJHtTREtfUFJFRklYfWdjYyA9ICJnY2MtY3Jvc3NzZGstJHtTREtfQVJDSH0iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1NES19QUkVGSVh9ZysrID0gImdjYy1jcm9zc3Nkay0ke1NES19BUkNIfSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7U0RLX1BSRUZJWH1jb21waWxlcmxpYnMgPSAibmF0aXZlc2RrLWdjYy1ydW50aW1lIgorCisjIERlZmF1bHQgbGliYyBjb25maWcKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MgPSAiJHtUQ0xJQkN9IgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLSR7U0RLX1BSRUZJWH1saWJjLWZvci1nY2MgPz0gIm5hdGl2ZXNkay0ke1RDTElCQ30iCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsID0gIiR7VENMSUJDfS1pbml0aWFsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbmF0aXZlc2RrLSR7U0RLX1BSRUZJWH1saWJjLWluaXRpYWwgPSAibmF0aXZlc2RrLSR7VENMSUJDfS1pbml0aWFsIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZ2V0dGV4dCA/Pz0gImdldHRleHQiCisKK0dDQ1ZFUlNJT04gPz0gIjUuJSIKK1NES0dDQ1ZFUlNJT04gPz0gIiR7R0NDVkVSU0lPTn0iCitCSU5VVkVSU0lPTiA/PSAiMi4yNSUiCitHREJWRVJTSU9OID89ICI3LjklIgorR0xJQkNWRVJTSU9OID89ICIyLjIyIgorVUNMSUJDVkVSU0lPTiA/PSAiMC45LjMzK2dpdCUiCitMSU5VWExJQkNWRVJTSU9OID89ICI0LjEiCisKK1BSRUZFUlJFRF9WRVJTSU9OX2djYyA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9ID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9ID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtTREtfQVJDSH0gPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nY2MtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2djYy1ydW50aW1lID89ICIke0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2NjLXNhbml0aXplcnMgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjLXJ1bnRpbWUgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2NjLXNhbml0aXplcnMgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9saWJnY2MgPz0gIiR7R0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9saWJnY2MtaW5pdGlhbCA/PSAiJHtHQ0NWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nY2MgPz0gIiR7U0RLR0NDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstbGliZ2NjID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fbmF0aXZlc2RrLWxpYmdjYy1pbml0aWFsID89ICIke1NES0dDQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMgPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fYmludXRpbHMtbmF0aXZlID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3NzLSR7VEFSR0VUX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3Nzc2RrLSR7U0RLX0FSQ0h9ID89ICIke0JJTlVWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7QklOVVZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2RiID89ICIke0dEQlZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2RiLWNyb3NzLSR7VEFSR0VUX0FSQ0h9ID89ICIke0dEQlZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2RiLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0gPz0gIiR7R0RCVkVSU0lPTn0iCisKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LWxpYmMtaGVhZGVycyA/PSAiJHtMSU5VWExJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1saW51eC1saWJjLWhlYWRlcnMgPz0gIiR7TElOVVhMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYyAgICAgICAgICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2dsaWJjLWxvY2FsZSAgICAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtbXRyYWNlICAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9nbGliYy1zY3JpcHRzICAgICAgICAgICAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX25hdGl2ZXNkay1nbGliYyAgICAgICAgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fZ2xpYmMtaW5pdGlhbCAgICAgICAgICAgID89ICIke0dMSUJDVkVSU0lPTn0iCitQUkVGRVJSRURfVkVSU0lPTl9uYXRpdmVzZGstZ2xpYmMtaW5pdGlhbCAgPz0gIiR7R0xJQkNWRVJTSU9OfSIKK1BSRUZFUlJFRF9WRVJTSU9OX2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUgICA/PSAiJHtHTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjICAgICAgICAgICAgICAgICAgID89ICIke1VDTElCQ1ZFUlNJT059IgorUFJFRkVSUkVEX1ZFUlNJT05fdWNsaWJjLWluaXRpYWwgICAgICAgICAgID89ICIke1VDTElCQ1ZFUlNJT059IgorIyBkb24ndCB1c2UgdmVyc2lvbiBlYXJsaWVyIHRoYW4gMS40IGZvciBnemlwLW5hdGl2ZSwgYXMgaXQncyBuZWNlc3NhcnkgZm9yCisjIHNvbWUgcGFja2FnZXMgdXNpbmcgYW4gYXJjaGl2ZSBmb3JtYXQgaW5jb21wYXRpYmxlIHdpdGggZWFybGllciBnemlwCitQUkVGRVJSRURfVkVSU0lPTl9nemlwLW5hdGl2ZSA/PSAiMS42IgorCisjIFNldHVwIHN1aXRhYmxlIHRvb2xjaGFpbiBmbGFncworcmVxdWlyZSBjb25mL2Rpc3Ryby9pbmNsdWRlL2FzLW5lZWRlZC5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3Vwc3RyZWFtX3RyYWNraW5nLmluYyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhNWU2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS91cHN0cmVhbV90cmFja2luZy5pbmMKQEAgLTAsMCArMSwyNCBAQAorIyBOT1RFOiBUSElTIEZJTEUgSVMgREVQUkVDQVRFRC4gUGxlYXNlIGFkZCBuZXcgZW50cmllcyB0byB0aGUgcmVjaXBlcyB0aGVtc2VsdmVzLgorIworIyB1cHN0cmVhbV90cmFja2luZy5pbmMgLSBUaGlzIGZpbGUgY29udGFpbnMgZGF0YSB0aGF0IHRyYWNrcyB0aGUKKyMgdXBzdHJlYW0gcHJvamVjdCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiByZWNpcGUuIFRoaXMgbGlzdCBpcyBuZWVkZWQKKyMgZm9yIHJlY2lwZXMgdGhhdCB2ZXJzaW9uIGluZm9ybWF0aW9uIGNhbiBub3QgYmUgYXV0b21hZ2ljYWxseSBkaXNjb3ZlcmVkLgorIyBBcyB3ZSBhdXRvbWF0ZSB0aGlzIGNoZWNraW5nLCB0aGlzIGZpbGUgd2lsbCBzbG93ZWQgYmUgcmVkdWNlZC4KKyMKKyMgVGhpcyBkYXRhIGlzIHVzZWQgYnkgdGhlIHBhY2thZ2UgcmVwb3J0aW5nIHN5c3RlbSAocGFja2FnZXMueW9jdG9wcm9qZWN0Lm9yZykKKyMKKyMgVGhlIGZvcm1hdCBpcyBhcyBhIGJpdGJha2UgdmFyaWFibGUgb3ZlcnJpZGUgZm9yIGVhY2ggcmVjaXBlCisjCisjICAgICAgIFJFQ0lQRV9VUFNUUkVBTV9WRVJTSU9OX3BuLTxyZWNpcGUgbmFtZT4gPSAiPHZlcnNpb24+IgorIyAgICAgICBSRUNJUEVfVVBTVFJFQU1fREFURV9wbi08cmVjaXBlIG5hbWU+ID0gIk1tbSBkZCwgWVlZWSIKKyMJIC0gVGhpcyBpcyB0aGUgbGF0ZXN0IHVwc3RyZWFtIHZlcnNpb24gYW5kIGRhdGUKKyMgICAgICAgUkVDSVBFX05PX1VQREFURV9SRUFTT05fcG4tPHJlY2lwZSBuYW1lPiA9ICI8ZnJlZSBmb3JtIHRleHQ+IgorIyAgICAgICAgLSBVc2VkIHRvIG5vdGUgd2h5IGEgcmVjaXBlIHNob3VsZCBub3QgYmUgdXBncmFkZWQgdG8gYSBuZXdlciB2ZXJzb2luCisjICAgICAgIENIRUNLX0RBVEVfcG4tPHJlY2lwZSBuYW1lPiA9ICJNbW0gZGQsIFlZWVkiCisjICAgICAgICAtIFRoaXMgaXMgdGhlIGRhdGUgdGhhdCB1cHN0cmVhbSB3YXMgbGFzdCBtYW51YWxseSBjaGVja2VkIG92ZXIgdGltZQorIyAgICAgICAgICB0aGlzIHNob3VsZCBiZSByZW1vdmVkIGFzIHdlIGF1dG9tYXRlIHRoaXMgY2hlY2tpbmcKKyMKKyMgVGhlc2UgZW50cmllcyB3aWxsIHNsb3dseSBiZSByZW1vdmVkIGFzIHdlIGNhbiBhdXRvbWF0aWNhbGx5IGRldGVybWluZQorIyB0aGUgaW5mb3JtYXRpb24gaW4gdGhpcyBmaWxlLiAgU28gZm9yIGV4aXN0aW5nIHJlY2lwZXMgdGhhdCB3ZSBjYW4gZ2V0IAorIyBmcm9tIHRoZSBSZWNpcGUgcmVwb3J0aW5nIHN5c3RlbSwgdGhlIGVudHJpZXMgaGVyZSBjYW4gYmUgcmVtb3ZlZC4KKyMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jIGIvbWV0YS9jb25mL2Rpc3Ryby9pbmNsdWRlL3dvcmxkLWJyb2tlbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYzJkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9kaXN0cm8vaW5jbHVkZS93b3JsZC1icm9rZW4uaW5jCkBAIC0wLDAgKzEsNSBAQAorIworIyBFeGNsdWRlIGtub3duIGJyb2tlbiBwYWNrYWdlcworIworCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9kb2N1bWVudGF0aW9uLmNvbmYgYi9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NWFiNmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvZG9jdW1lbnRhdGlvbi5jb25mCkBAIC0wLDAgKzEsNDU5IEBACisjIHRoaXMgZmlsZSBob2xkcyBkb2N1bWVudGF0aW9uIGZvciBrbm93biBrZXlzLCBwb3NzaWJsZSB2YWx1ZXMgYW5kCisjIHRoZWlyIG1lYW5pbmdzLiBQbGVhc2UgdXBkYXRlLCBjb3JyZWN0IGFuZCBleHRlbmQgdGhpcyBkb2N1bWVudGF0aW9uLgorIyBNYWlsIHlvdXIgY2hhbmdlcyB0byBvcGVuZW1iZWRkZWQtZGV2ZWxAb3BlbmVtYmVkZGVkLm9yZworCisjIERFU0NSSVBUSU9OUyBGT1IgVEFTS1MgIworCitkb19ib290aW1nW2RvY10gPSAiQ3JlYXRlcyBhIGJvb3RhYmxlIGxpdmUgaW1hZ2UiCitkb19idWlsZFtkb2NdID0gIkRlZmF1bHQgdGFzayBmb3IgYSByZWNpcGUgLSBkZXBlbmRzIG9uIGFsbCBvdGhlciBub3JtYWwgdGFza3MgcmVxdWlyZWQgdG8gJ2J1aWxkJyBhIHJlY2lwZSIKK2RvX2J1bmRsZV9pbml0cmFtZnNbZG9jXSA9ICJDb21iaW5lcyBhbiBpbml0aWFsIHJhbWRpc2sgaW1hZ2UgYW5kIGtlcm5lbCB0b2dldGhlciB0byBmb3JtIGEgc2luZ2xlIGltYWdlIgorZG9fY2hlY2t1cmlbZG9jXSA9ICJWYWxpZGF0ZXMgdGhlIFNSQ19VUkkgdmFsdWUiCitkb19jaGVja3VyaWFsbFtkb2NdID0gIlZhbGlkYXRlcyB0aGUgU1JDX1VSSSB2YWx1ZSBmb3IgYWxsIHJlY2lwZXMgcmVxdWlyZWQgdG8gYnVpbGQgYSB0YXJnZXQiCitkb19jbGVhbltkb2NdID0gIlJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcyBmb3IgYSB0YXJnZXQiCitkb19jbGVhbmFsbFtkb2NdID0gIlJlbW92ZXMgYWxsIG91dHB1dCBmaWxlcywgc2hhcmVkIHN0YXRlIGNhY2hlLCBhbmQgZG93bmxvYWRlZCBzb3VyY2UgZmlsZXMgZm9yIGEgdGFyZ2V0IgorZG9fY2xlYW5zc3RhdGVbZG9jXSA9ICJSZW1vdmVzIGFsbCBvdXRwdXQgZmlsZXMgYW5kIHNoYXJlZCBzdGF0ZSBjYWNoZSBmb3IgYSB0YXJnZXQiCitkb19jb21waWxlW2RvY10gPSAiQ29tcGlsZXMgdGhlIHNvdXJjZSBpbiB0aGUgY29tcGlsYXRpb24gZGlyZWN0b3J5IgorZG9fY29tcGlsZV9rZXJuZWxtb2R1bGVzW2RvY10gPSAiQ29tcGlsZXMgbG9hZGFibGUgbW9kdWxlcyBmb3IgdGhlIExpbnV4IGtlcm5lbCIKK2RvX2NvbXBpbGVfcHRlc3RfYmFzZVtkb2NdID0gIkNvbXBpbGVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IgorZG9fY29uZmlndXJlW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgc291cmNlIGJ5IGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgYW55IGJ1aWxkLXRpbWUgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IgorZG9fY29uZmlndXJlX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb25maWd1cmVzIHRoZSBydW50aW1lIHRlc3Qgc3VpdGUgaW5jbHVkZWQgaW4gdGhlIHNvZnR3YXJlIGJlaW5nIGJ1aWx0IgorZG9fZGVwbG95W2RvY10gPSAiV3JpdGVzIGRlcGxveWFibGUgb3V0cHV0IGZpbGVzIHRvIHRoZSBkZXBsb3kgZGlyZWN0b3J5IgorZG9fZGV2cHlzaGVsbFtkb2NdID0gIlN0YXJ0cyBhbiBpbnRlcmFjdGl2ZSBQeXRob24gc2hlbGwgZm9yIGRldmVsb3BtZW50L2RlYnVnZ2luZyIKK2RvX2RldnNoZWxsW2RvY10gPSAiU3RhcnRzIGEgc2hlbGwgd2l0aCB0aGUgZW52aXJvbm1lbnQgc2V0IHVwIGZvciBkZXZlbG9wbWVudC9kZWJ1Z2dpbmciCitkb19kaWZmY29uZmlnW2RvY10gPSAiQ29tcGFyZXMgdGhlIG9sZCBhbmQgbmV3IGNvbmZpZyBmaWxlcyBhZnRlciBydW5uaW5nIGRvX21lbnVjb25maWcgZm9yIHRoZSBrZXJuZWwiCitkb19mZXRjaFtkb2NdID0gIkZldGNoZXMgdGhlIHNvdXJjZSBjb2RlIgorZG9fZmV0Y2hhbGxbZG9jXSA9ICJGZXRjaGVzIGFsbCByZW1vdGUgc291cmNlcyByZXF1aXJlZCB0byBidWlsZCBhIHRhcmdldCIKK2RvX2dlbmVyYXRlX3F0X2NvbmZpZ19maWxlW2RvY10gPSAiV3JpdGVzIGEgcXQuY29uZiBmaWxlIGZvciBidWlsZGluZyBhIFF0LWJhc2VkIGFwcGxpY2F0aW9uIgorZG9faW5zdGFsbFtkb2NdID0gIkNvcGllcyBmaWxlcyBmcm9tIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkgdG8gYSBob2xkaW5nIGFyZWEiCitkb19pbnN0YWxsX3B0ZXN0X2Jhc2VbZG9jXSA9ICJDb3BpZXMgdGhlIHJ1bnRpbWUgdGVzdCBzdWl0ZSBmaWxlcyBmcm9tIHRoZSBjb21waWxhdGlvbiBkaXJlY3RvcnkgdG8gYSBob2xkaW5nIGFyZWEiCitkb19rZXJuZWxfY2hlY2tvdXRbZG9jXSA9ICJDaGVja3Mgb3V0IHNvdXJjZS9tZXRhIGJyYW5jaGVzIGZvciBhIGxpbnV4LXlvY3RvIHN0eWxlIGtlcm5lbCIKK2RvX2tlcm5lbF9jb25maWdjaGVja1tkb2NdID0gIlZhbGlkYXRlcyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fa2VybmVsX2NvbmZpZ21lW2RvY10gPSAiQXNzZW1ibGVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgYSBsaW51eC15b2N0byBzdHlsZSBrZXJuZWwiCitkb19rZXJuZWxfbGlua192bWxpbnV4W2RvY10gPSAiQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgaW4gYXJjaC8kYXJjaC9ib290IGZvciB2bWxpbnV4IGtlcm5lbCBpbWFnZXMiCitkb19saXN0dGFza3NbZG9jXSA9ICJMaXN0cyBhbGwgZGVmaW5lZCB0YXNrcyBmb3IgYSB0YXJnZXQiCitkb19tZW51Y29uZmlnW2RvY10gPSAiUnVucyAnbWFrZSBtZW51Y29uZmlnJyBmb3IgdGhlIGtlcm5lbCIKK2RvX3BhY2thZ2VbZG9jXSA9ICJBbmFseXplcyB0aGUgY29udGVudCBvZiB0aGUgaG9sZGluZyBhcmVhIGFuZCBzcGxpdHMgaXQgaW50byBzdWJzZXRzIGJhc2VkIG9uIGF2YWlsYWJsZSBwYWNrYWdlcyBhbmQgZmlsZXMiCitkb19wYWNrYWdlX2luZGV4W2RvY10gPSAiQ3JlYXRlcyBvciB1cGRhdGVzIHRoZSBpbmRleCBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3FhW2RvY10gPSAiUnVucyBRQSBjaGVja3Mgb24gcGFja2FnZWQgZmlsZXMiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkb2NdID0gIkNyZWF0ZXMgdGhlIGFjdHVhbCBERUIgcGFja2FnZXMgYW5kIHBsYWNlcyB0aGVtIGluIHRoZSBQYWNrYWdlIEZlZWQgYXJlYSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RvY10gPSAiQ3JlYXRlcyB0aGUgYWN0dWFsIElQSyBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZG9jXSA9ICJDcmVhdGVzIHRoZSBhY3R1YWwgUlBNIHBhY2thZ2VzIGFuZCBwbGFjZXMgdGhlbSBpbiB0aGUgUGFja2FnZSBGZWVkIGFyZWEiCitkb19wYWNrYWdlX3dyaXRlX3Rhcltkb2NdID0gIkNyZWF0ZXMgdGFyIGFyY2hpdmVzIGZvciBwYWNrYWdlcyBhbmQgcGxhY2VzIHRoZW0gaW4gdGhlIFBhY2thZ2UgRmVlZCBhcmVhIgorZG9fcGFja2FnZWRhdGFbZG9jXSA9ICJDcmVhdGVzIHBhY2thZ2UgbWV0YWRhdGEgdXNlZCBieSB0aGUgYnVpbGQgc3lzdGVtIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBwYWNrYWdlcyIKK2RvX3BhdGNoW2RvY10gPSAiTG9jYXRlcyBwYXRjaCBmaWxlcyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBzb3VyY2UgY29kZSIKK2RvX3BvcHVsYXRlX2xpY1tkb2NdID0gIldyaXRlcyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGUgcmVjaXBlIHRoYXQgaXMgY29sbGVjdGVkIGxhdGVyIHdoZW4gdGhlIGltYWdlIGlzIGNvbnN0cnVjdGVkIgorZG9fcG9wdWxhdGVfc2RrW2RvY10gPSAiQ3JlYXRlcyB0aGUgZmlsZSBhbmQgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgYW4gaW5zdGFsbGFibGUgU0RLIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtkb2NdID0gIkNvcGllcyBhIHN1YnNldCBvZiBmaWxlcyBpbnN0YWxsZWQgYnkgZG9faW5zdGFsbCBpbnRvIHRoZSBzeXNyb290IGluIG9yZGVyIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gb3RoZXIgcmVjaXBlcyIKK2RvX3JtX3dvcmtbZG9jXSA9ICJSZW1vdmVzIHdvcmsgZmlsZXMgYWZ0ZXIgdGhlIGJ1aWxkIHN5c3RlbSBoYXMgZmluaXNoZWQgd2l0aCB0aGVtIgorZG9fcm1fd29ya19hbGxbZG9jXSA9ICJUb3AtbGV2ZWwgdGFzayBmb3IgcmVtb3Zpbmcgd29yayBmaWxlcyBhZnRlciB0aGUgYnVpbGQgc3lzdGVtIGhhcyBmaW5pc2hlZCB3aXRoIHRoZW0iCitkb19yb290ZnNbZG9jXSA9ICJDcmVhdGVzIHRoZSByb290IGZpbGVzeXN0ZW0gKGZpbGUgYW5kIGRpcmVjdG9yeSBzdHJ1Y3R1cmUpIGZvciBhbiBpbWFnZSIKK2RvX3NhdmVkZWZjb25maWdbZG9jXSA9ICJDcmVhdGVzIGEgbWluaW1hbCBMaW51eCBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIgorZG9fc2l6ZWNoZWNrW2RvY10gPSAiQ2hlY2tzIHRoZSBzaXplIG9mIHRoZSBrZXJuZWwgaW1hZ2UgYWdhaW5zdCBLRVJORUxfSU1BR0VfTUFYU0laRSAoaWYgc2V0KSIKK2RvX3NwZHhbZG9jXSA9ICJBIGJ1aWxkIHN0YWdlIHRoYXQgdGFrZXMgdGhlIHNvdXJjZSBjb2RlIGFuZCBzY2FucyBpdCBvbiBhIHJlbW90ZSBGT1NTT0xPR1kgc2VydmVyIGluIG9yZGVyIHRvIHByb2R1Y2UgYW4gU1BEWCBkb2N1bWVudCIKK2RvX3N0cmlwW2RvY10gPSAiU3RyaXBzIHVubmVlZGVkIHNlY3Rpb25zIG91dCBvZiB0aGUgTGludXgga2VybmVsIGltYWdlIgorZG9fdGVzdGltYWdlW2RvY10gPSAiQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZSIKK2RvX3Rlc3RpbWFnZV9hdXRvW2RvY10gPSAiQm9vdHMgYW4gaW1hZ2UgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgd2l0aGluIHRoZSBpbWFnZSBpbW1lZGlhdGVseSBhZnRlciBpdCBoYXMgYmVlbiBidWlsdCIKK2RvX3Rlc3RzZGtbZG9jXSA9ICJJbnN0YWxscyBhbiBTREsgYW5kIHBlcmZvcm1zIHJ1bnRpbWUgdGVzdHMgb24gdGhlIHRvb2xzIGluc3RhbGxlZCBieSBpdCIKK2RvX3Vib290X21raW1hZ2VbZG9jXSA9ICJDcmVhdGVzIGEgdUltYWdlIGZpbGUgZnJvbSB0aGUga2VybmVsIGZvciB0aGUgVS1Cb290IGJvb3Rsb2FkZXIiCitkb191bnBhY2tbZG9jXSA9ICJVbnBhY2tzIHRoZSBzb3VyY2UgY29kZSBpbnRvIGEgd29ya2luZyBkaXJlY3RvcnkiCitkb192YWxpZGF0ZV9icmFuY2hlc1tkb2NdID0gIkVuc3VyZXMgdGhhdCB0aGUgc291cmNlL21ldGEgYnJhbmNoZXMgYXJlIG9uIHRoZSBsb2NhdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZWlyIFNSQ1JFViB2YWx1ZXMgZm9yIGEgbGludXgteW9jdG8gc3R5bGUga2VybmVsIgorZG9fdm1pbWdbZG9jXSA9ICJDcmVhdGVzIGFuIGltYWdlIGZvciB1c2Ugd2l0aCBWTXdhcmUgb3IgVmlydHVhbEJveCBjb21wYXRpYmxlIHZpcnR1YWwgbWFjaGluZSBob3N0cyAoYmFzZWQgb24gSU1BR0VfRlNUWVBFUyBlaXRoZXIgLnZtZGsgb3IgLnZkaSkiCisKKyMgREVTQ1JJUFRJT05TIEZPUiBWQVJJQUJMRVMgIworCisjQQorCitBTExPV19FTVBUWVtkb2NdID0gIlNwZWNpZmllcyBpZiBhbiBvdXRwdXQgcGFja2FnZSBzaG91bGQgc3RpbGwgYmUgcHJvZHVjZWQgaWYgaXQgaXMgZW1wdHkuIgorQUxURVJOQVRJVkVbZG9jXSA9ICJMaXN0cyBjb21tYW5kcyBpbiBhIHBhY2thZ2UgdGhhdCBuZWVkIGFuIGFsdGVybmF0aXZlIGJpbmFyeSBuYW1pbmcgc2NoZW1lLiIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gbWFwIGR1cGxpY2F0ZWQgY29tbWFuZHMgdG8gYWN0dWFsIGxvY2F0aW9ucy4iCitBTFRFUk5BVElWRV9QUklPUklUWVtkb2NdID0gIlVzZWQgYnkgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0gdG8gY3JlYXRlIGRlZmF1bHQgcHJpb3JpdGllcyBmb3IgZHVwbGljYXRlZCBjb21tYW5kcy4iCitBTFRFUk5BVElWRV9UQVJHRVRbZG9jXSA9ICJVc2VkIGJ5IHRoZSBhbHRlcm5hdGl2ZXMgc3lzdGVtIHRvIGNyZWF0ZSBkZWZhdWx0IGxpbmsgbG9jYXRpb25zIGZvciBkdXBsaWNhdGVkIGNvbW1hbmRzLiIKK0FTU1VNRV9QUk9WSURFRFtkb2NdID0gIkxpc3Qgb2YgcGFja2FnZXMgKHJlY2lwZXMgYWN0dWFsbHkpIHRoYXQgYXJlIGFzc3VtZWQgdG8gYmUgaW1wbGljaXRseSBhdmFpbGFibGUuIEJpdEJha2UgZG9lcyBub3QgYnVpbGQgdGhlc2UgcGFja2FnZXMuIgorQVNTVU1FX1NITElCU1tkb2NdID0gIkxpc3Qgb2Ygc2hsaWI6cGFja2FnZVtfdmVyc2lvbl0gbWFwcGluZ3MuIFVzZWZ1bCBmb3IgbGliIHBhY2thZ2VzIGluIEFTU1VNRV9QUk9WSURFRCwgZm9yIHdoaWNoIGF1dG9tYXRpYyBzaGxpYiBkZXBlbmRlbmN5IHRyYWNraW5nIGRvZXMgbm90IHdvcmsuIgorQVVUSE9SW2RvY10gPSAiRW1haWwgYWRkcmVzcyB1c2VkIHRvIGNvbnRhY3QgdGhlIG9yaWdpbmFsIGF1dGhvcihzKSBpbiBvcmRlciB0byBzZW5kIHBhdGNoZXMgYW5kIGZvcndhcmQgYnVncy4iCitBVVRPX1NZU0xJTlVYTUVOVVtkb2NdID0gIkVuYWJsZXMgY3JlYXRpbmcgYW4gYXV0b21hdGljIG1lbnUgZm9yIHRoZSBzeXNsaW51eCBib290bG9hZGVyLiIKK0FVVE9SRVZbZG9jXSA9ICJXaGVuIFNSQ1JFViBpcyBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUsIGl0IHNwZWNpZmllcyB0byB1c2UgdGhlIGxhdGVzdCBzb3VyY2UgcmV2aXNpb24gaW4gdGhlIHJlcG9zaXRvcnkuIgorCisjQgorCitCW2RvY10gPSAiVGhlIEJ1aWxkIERpcmVjdG9yeS4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gcGxhY2VzIGdlbmVyYXRlZCBvYmplY3RzIGludG8gdGhlIEJ1aWxkIERpcmVjdG9yeSBkdXJpbmcgYSByZWNpcGUncyBidWlsZCBwcm9jZXNzLiIKK0JBRF9SRUNPTU1FTkRBVElPTlNbZG9jXSA9ICJBIGxpc3Qgb2YgcGFja2FnZXMgbm90IHRvIGluc3RhbGwgZGVzcGl0ZSBiZWluZyByZWNvbW1lbmRlZCBieSBhIHJlY2lwZS4gU3VwcG9ydCBmb3IgdGhpcyB2YXJpYWJsZSBleGlzdHMgb25seSB3aGVuIHVzaW5nIHRoZSBJUEsgb3IgUlBNIHBhY2thZ2luZyBiYWNrZW5kcy4iCitCQl9EQU5HTElOR0FQUEVORFNfV0FSTk9OTFlbZG9jXSA9ICJEZWZpbmVzIGhvdyBCaXRCYWtlIGhhbmRsZXMgc2l0dWF0aW9ucyB3aGVyZSBhbiBhcHBlbmQgZmlsZSAoLmJiYXBwZW5kKSBoYXMgbm8gY29ycmVzcG9uZGluZyByZWNpcGUgZmlsZSAoLmJiKS4iCitCQl9ESVNLTU9OX0RJUlNbZG9jXSA9ICJNb25pdG9ycyBkaXNrIHNwYWNlIGFuZCBhdmFpbGFibGUgaW5vZGVzIGR1cmluZyB0aGUgYnVpbGQgYW5kIGFsbG93cyB5b3UgdG8gY29udHJvbCB0aGUgYnVpbGQgYmFzZWQgb24gdGhlc2UgcGFyYW1ldGVycy4iCitCQl9ESVNLTU9OX1dBUk5JTlRFUlZBTFtkb2NdID0gIkRlZmluZXMgdGhlIGRpc2sgc3BhY2UgYW5kIGZyZWUgaW5vZGUgd2FybmluZyBpbnRlcnZhbHMuIFRvIHNldCB0aGVzZSBpbnRlcnZhbHMsIGRlZmluZSB0aGUgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorQkJfR0VORVJBVEVfTUlSUk9SX1RBUkJBTExTW2RvY10gPSAiQ2F1c2VzIHRhcmJhbGxzIG9mIHRoZSBHaXQgcmVwb3NpdG9yaWVzIHRvIGJlIHBsYWNlZCBpbiB0aGUgRExfRElSIGRpcmVjdG9yeS4iCitCQl9OVU1CRVJfVEhSRUFEU1tkb2NdID0gIlRoZSBtYXhpbXVtIG51bWJlciBvZiB0YXNrcyBCaXRCYWtlIHNob3VsZCBydW4gaW4gcGFyYWxsZWwgYXQgYW55IG9uZSB0aW1lLiBBIGdvb2QgcnVsZSBvZiB0aHVtYiBpcyB0byBzZXQgdGhpcyB2YXJpYWJsZSB0byB0d2ljZSB0aGUgbnVtYmVyIG9mIGNvcmVzLiIKK0JCQ0xBU1NFWFRFTkRbZG9jXSA9ICJBbGxvd3MgeW91IHRvIGV4dGVuZCBhIHJlY2lwZSBzbyB0aGF0IGl0IGJ1aWxkcyB2YXJpYW50cyBvZiB0aGUgc29mdHdhcmUuIENvbW1vbiB2YXJpYW50cyBmb3IgcmVjaXBlcyBhcmUgJ25hdGl2ZScsICdjcm9zcycsICduYXRpdmVzZGsnIGFuZCBtdWx0aWxpYnMuIgorQkJGSUxFX0NPTExFQ1RJT05TW2RvY10gPSAiTGlzdHMgdGhlIG5hbWVzIG9mIGNvbmZpZ3VyZWQgbGF5ZXJzLiBUaGVzZSBuYW1lcyBhcmUgdXNlZCB0byBmaW5kIHRoZSBvdGhlciBCQkZJTEVfKiB2YXJpYWJsZXMuIgorQkJGSUxFX1BBVFRFUk5bZG9jXSA9ICJWYXJpYWJsZSB0aGF0IGV4cGFuZHMgdG8gbWF0Y2ggZmlsZXMgZnJvbSBCQkZJTEVTIGluIGEgcGFydGljdWxhciBsYXllci4gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIHRoZSBsYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiBhIGxheWVyLiIKK0JCRklMRV9QUklPUklUWVtkb2NdID0gIkFzc2lnbnMgdGhlIHByaW9yaXR5IGZvciByZWNpcGUgZmlsZXMgaW4gZWFjaCBsYXllci4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gcHJpb3JpdGl6ZSBhIGxheWVyIGFnYWluc3Qgb3RoZXIgbGF5ZXJzIHRoYXQgY29udGFpbiB0aGUgc2FtZSByZWNpcGUuIgorQkJGSUxFU1tkb2NdID0gIkxpc3Qgb2YgcmVjaXBlIGZpbGVzIHVzZWQgYnkgQml0QmFrZSB0byBidWlsZCBzb2Z0d2FyZS4iCitCQklOQ0xVREVMT0dTW2RvY10gPSAiVmFyaWFibGUgdGhhdCBjb250cm9scyBob3cgQml0QmFrZSBkaXNwbGF5cyBsb2dzIG9uIGJ1aWxkIGZhaWx1cmUuIgorQkJJTkNMVURFTE9HU19MSU5FU1tkb2NdID0gIkFtb3VudCBvZiBsb2cgbGluZXMgcHJpbnRlZCBvbiBmYWlsdXJlLiIKK0JCTEFZRVJTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycyB0byBlbmFibGUgZHVyaW5nIHRoZSBidWlsZC4gVGhpcyB2YXJpYWJsZSBpcyBkZWZpbmVkIGluIHRoZSBiYmxheWVycy5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZS4iCitCQkxBWUVSU19OT05fUkVNT1ZBQkxFW2RvY10gPSAiTGlzdHMgY29yZSBsYXllcnMgdGhhdCBjYW5ub3QgYmUgcmVtb3ZlZCBmcm9tIHRoZSBiYmxheWVycy5jb25mIGZpbGUuIgorQkJNQVNLW2RvY10gPSAiUHJldmVudHMgQml0QmFrZSBmcm9tIHByb2Nlc3Npbmcgc3BlY2lmaWMgcmVjaXBlcyBvciByZWNpcGUgYXBwZW5kIGZpbGVzLiBVc2UgdGhlIEJCTUFTSyB2YXJpYWJsZSBmcm9tIHdpdGhpbiBjb25mL2xvY2FsLmNvbmYuIgorQkJQQVRIW2RvY10gPSAiVXNlZCBieSBCaXRCYWtlIHRvIGxvY2F0ZSAuYmJjbGFzcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyB2YXJpYWJsZSBpcyBhbmFsb2dvdXMgdG8gdGhlIFBBVEggdmFyaWFibGUuIgorQkJTRVJWRVJbZG9jXSA9ICJQb2ludHMgdG8gdGhlIHNlcnZlciB0aGF0IHJ1bnMgbWVtb3J5LXJlc2lkZW50IEJpdEJha2UuIgorQklOQ09ORklHX0dMT0JbZG9jXSA9ICJXaGVuIGluaGVyaXRpbmcgYmluY29uZmlnLmJiY2xhc3MgZnJvbSBhIHJlY2lwZSwgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYSB3aWxkY2FyZCBmb3IgY29uZmlndXJhdGlvbiBzY3JpcHRzIHRoYXQgbmVlZCBlZGl0aW5nLiIKK0JQW2RvY10gPSAiVGhlIGJhc2UgcmVjaXBlIG5hbWUgYW5kIHZlcnNpb24gYnV0IHdpdGhvdXQgYW55IHNwZWNpYWwgcmVjaXBlIG5hbWUgc3VmZml4IChpLmUuIC1uYXRpdmUsIGxpYjY0LSwgYW5kIHNvIGZvcnRoKS4gQlAgaXMgY29tcHJpc2VkIG9mICR7QlBOfS0ke1BWfSIKK0JQTltkb2NdID0gIlRoZSBiYXJlIG5hbWUgb2YgdGhlIHJlY2lwZS4gVGhpcyB2YXJpYWJsZSBpcyBhIHZlcnNpb24gb2YgdGhlIFBOIHZhcmlhYmxlIGJ1dCByZW1vdmVzIGNvbW1vbiBzdWZmaXhlcyBhbmQgcHJlZml4ZXMuIgorQlVHVFJBQ0tFUltkb2NdID0gIlNwZWNpZmllcyBhIFVSTCBmb3IgYW4gdXBzdHJlYW0gYnVnIHRyYWNraW5nIHdlYnNpdGUgZm9yIGEgcmVjaXBlLiIKK0JVSUxEX0FSQ0hbZG9jXSA9ICJUaGUgbmFtZSBvZiB0aGUgYnVpbGRpbmcgYXJjaGl0ZWN0dXJlIChlLmcuIGk2ODYpLiIKK0JVSUxEX09TW2RvY10gPSAiVGhlIG9wZXJhdGluZyBzeXN0ZW0gKGluIGxvd2VyIGNhc2UpIG9mIHRoZSBidWlsZGluZyBhcmNoaXRlY3R1cmUgKGUuZy4gbGludXgpLiIKK0JVSUxERElSW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK0JVSUxEU1RBVFNfQkFTRVtkb2NdID0gIlBvaW50cyB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIGJ1aWxkIHN0YXRpc3RpY3Mgd2hlbiB5b3UgdXNlIGFuZCBlbmFibGUgdGhlIGJ1aWxkc3RhdHMgY2xhc3MuIgorQlVTWUJPWF9TUExJVF9TVUlEW2RvY10gPSAiRm9yIHRoZSBCdXN5Qm94IHJlY2lwZSwgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc3BsaXQgdGhlIG91dHB1dCBleGVjdXRhYmxlIGZpbGUgaW50byB0d28gcGFydHM6IG9uZSBmb3IgZmVhdHVyZXMgdGhhdCByZXF1aXJlIHNldHVpZCByb290LCBhbmQgb25lIGZvciB0aGUgcmVtYWluaW5nIGZlYXR1cmVzLiIKKworI0MKKworQ0FDSEVbZG9jXSAgPSAiVGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBjYWNoZSBvZiB0aGUgbWV0YWRhdGEuIgorQ0ZMQUdTW2RvY10gPSAiRmxhZ3MgcGFzc2VkIHRvIHRoZSBDIGNvbXBpbGVyIGZvciB0aGUgdGFyZ2V0IHN5c3RlbS4gVGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdGhlIHNhbWUgYXMgVEFSR0VUX0NGTEFHUy4iCitDTEFTU09WRVJSSURFW2RvY10gPSAiQW4gaW50ZXJuYWwgdmFyaWFibGUgc3BlY2lmeWluZyB0aGUgc3BlY2lhbCBjbGFzcyBvdmVycmlkZSB0aGF0IHNob3VsZCBjdXJyZW50bHkgYXBwbHkgKGUuZy4gImNsYXNzLXRhcmdldCIsICJjbGFzcy1uYXRpdmUiLCBhbmQgc28gZm9ydGgpLiIKK0NMRUFOQlJPS0VOW2RvY10gPSAiU3BlY2lmaWVzIGlmICdtYWtlIGNsZWFuJyBkb2VzIG5vdCB3b3JrIGZvciBhIHJlY2lwZSAoYW5kIHRoZXJlZm9yZSB0aGUgYnVpbGQgc3lzdGVtIHNob3VsZCBub3QgdHJ5IHRvIHVzZSBpdCBkdXJpbmcgZG9fY29uZmlndXJlKSIKK0NPTUJJTkVEX0ZFQVRVUkVTW2RvY10gPSAiQSBzZXQgb2YgZmVhdHVyZXMgY29tbW9uIGJldHdlZW4gTUFDSElORV9GRUFUVVJFUyBhbmQgRElTVFJPX0ZFQVRVUkVTLiIKK0NPTU1PTl9MSUNFTlNFX0RJUltkb2NdID0gIlBvaW50cyB0byBtZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcyBpbiB0aGUgU291cmNlIERpcmVjdG9yeSwgd2hpY2ggaXMgd2hlcmUgZ2VuZXJpYyBsaWNlbnNlIGZpbGVzIHJlc2lkZS4iCitDT01QQVRJQkxFX0hPU1RbZG9jXSA9ICJBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlc29sdmVzIHRvIG9uZSBvciBtb3JlIGhvc3RzICh3aGVuIHRoZSByZWNpcGUgaXMgbmF0aXZlKSBvciBvbmUgb3IgbW9yZSB0YXJnZXRzICh3aGVuIHRoZSByZWNpcGUgaXMgbm9uLW5hdGl2ZSkgd2l0aCB3aGljaCBhIHJlY2lwZSBpcyBjb21wYXRpYmxlLiIKK0NPTVBBVElCTEVfTUFDSElORVtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gb25lIG9yIG1vcmUgdGFyZ2V0IG1hY2hpbmVzIHdpdGggd2hpY2ggYSByZWNpcGUgaXMgY29tcGF0aWJsZS4iCitDT01QTEVNRU5UQVJZX0dMT0JbZG9jXSA9ICJEZWZpbmVzIHdpbGRjYXJkcyB0byBtYXRjaCB3aGVuIGluc3RhbGxpbmcgYSBsaXN0IG9mIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgZm9yIGFsbCB0aGUgcGFja2FnZXMgaW5zdGFsbGVkIGluIGFuIGltYWdlLiIKK0NPTkZGSUxFU1tkb2NdID0gIklkZW50aWZpZXMgZWRpdGFibGUgb3IgY29uZmlndXJhYmxlIGZpbGVzIHRoYXQgYXJlIHBhcnQgb2YgYSBwYWNrYWdlLiIKK0NPTkZJR19TSVRFW2RvY10gPSAiQSBsaXN0IG9mIGZpbGVzIHRoYXQgY29udGFpbnMgYXV0b2NvbmYgdGVzdCByZXN1bHRzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGJ1aWxkLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIEF1dG90b29scyB1dGlsaXRpZXMgd2hlbiBydW5uaW5nIGNvbmZpZ3VyZS4iCitDT05GTElDVF9ESVNUUk9fRkVBVFVSRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBkaXN0cmlidXRpb24gZmVhdHVyZXMgdGhhdCB3b3VsZCBiZSBpbiBjb25mbGljdCBzaG91bGQgdGhlIHJlY2lwZSBiZSBidWlsdC4iCitDT1JFX0lNQUdFX0VYVFJBX0lOU1RBTExbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxpc3Qgb2YgcGFja2FnZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGltYWdlLiBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gdGhlIGNvbmYvbG9jYWwuY29uZiBmaWxlIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorQ09SRUJBU0VbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIE9wZW5FbWJlZGRlZCBDb3JlIE1ldGFkYXRhIGxheWVyIChpLmUuIG1ldGEpLiIKK0NPTkZfVkVSU0lPTltkb2NdID0gIlRyYWNrcyB0aGUgdmVyc2lvbiBvZiBsb2NhbC5jb25mLiAgSW5jcmVhc2VkIGVhY2ggdGltZSBidWlsZC9jb25mLyBjaGFuZ2VzIGluY29tcGF0aWJseS4iCitDVlNESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIGN2cyBjaGVja291dHMgd2lsbCBiZSBzdG9yZWQgaW4uIgorCisjRAorCitEW2RvY10gPSAiVGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4iCitEQVRFW2RvY10gPSAiVGhlIGRhdGUgdGhlIGJ1aWxkIHdhcyBzdGFydGVkIHVzaW5nIFlNRCBmb3JtYXQuIgorREFURVRJTUVbZG9jXSA9ICJUaGUgZGF0ZSBhbmQgdGltZSB0aGUgYnVpbGQgd2FzIHN0YXJ0ZWQuIgorREVCVUdfQlVJTERbZG9jXSA9ICJTcGVjaWZpZXMgdG8gYnVpbGQgcGFja2FnZXMgd2l0aCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uIFRoaXMgaW5mbHVlbmNlcyB0aGUgdmFsdWUgb2YgdGhlIFNFTEVDVEVEX09QVElNSVpBVElPTiB2YXJpYWJsZS4iCitERUJVR19PUFRJTUlaQVRJT05bZG9jXSA9ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhIHN5c3RlbSBmb3IgZGVidWdnaW5nLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctTyAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZycuIgorREVGQVVMVF9QUkVGRVJFTkNFW2RvY10gPSAiU3BlY2lmaWVzIGEgd2VhayBiaWFzIGZvciByZWNpcGUgc2VsZWN0aW9uIHByaW9yaXR5LiIKK0RFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHJlY2lwZSdzIGJ1aWxkLXRpbWUgZGVwZW5kZW5jaWVzIChpLmUuIG90aGVyIHJlY2lwZSBmaWxlcykuIgorREVQTE9ZX0RJUltkb2NdID0gIlBvaW50cyB0byB0aGUgZ2VuZXJhbCBhcmVhIHRoYXQgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB0byBwbGFjZSBpbWFnZXMsIHBhY2thZ2VzLCBTREtzIGFuZCBvdGhlciBvdXRwdXQgZmlsZXMgdGhhdCBhcmUgcmVhZHkgdG8gYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0uIgorREVQTE9ZX0RJUl9JTUFHRVtkb2NdID0gIlBvaW50cyB0byB0aGUgYXJlYSB0aGF0IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgdG8gcGxhY2UgaW1hZ2VzIGFuZCBvdGhlciBhc3NvY2lhdGVkIG91dHB1dCBmaWxlcyB0aGF0IGFyZSByZWFkeSB0byBiZSBkZXBsb3llZCBvbnRvIHRoZSB0YXJnZXQgbWFjaGluZS4iCitERVBMT1lESVJbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIGRlcGxveSBjbGFzcywgdGhlIERFUExPWURJUiBwb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIGZvciBkZXBsb3llZCBmaWxlcy4iCitERVNDUklQVElPTltkb2NdID0gIlRoZSBwYWNrYWdlIGRlc2NyaXB0aW9uIHVzZWQgYnkgcGFja2FnZSBtYW5hZ2Vycy4gSWYgbm90IHNldCwgREVTQ1JJUFRJT04gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBTVU1NQVJZIHZhcmlhYmxlLiIKK0RJU1RST1tkb2NdID0gIlRoZSBzaG9ydCBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24uIElmIHRoZSB2YXJpYWJsZSBpcyBibGFuaywgbWV0YS9jb25mL2Rpc3Ryby9kZWZhdWx0c2V0dXAuY29uZiB3aWxsIGJlIHVzZWQuIgorRElTVFJPX0VYVFJBX1JERVBFTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMuIFRoZSB2YXJpYWJsZSBvbmx5IGFwcGxpZXMgdG8gdGhlIGltYWdlcyB0aGF0IGluY2x1ZGUgcGFja2FnZWdyb3VwLWJhc2UuIgorRElTVFJPX0VYVFJBX1JSRUNPTU1FTkRTW2RvY10gPSAiU3BlY2lmaWVzIGEgbGlzdCBvZiBkaXN0cm8tc3BlY2lmaWMgcGFja2FnZXMgdG8gYWRkIHRvIGFsbCBpbWFnZXMgaWYgdGhlIHBhY2thZ2VzIGV4aXN0LiBUaGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgYXV0b21hdGljYWxseSBpbnN0YWxsZWQgYnV0IHlvdSBjYW4gcmVtb3ZlIHRoZW0uIgorRElTVFJPX0ZFQVRVUkVTW2RvY10gPSAiVGhlIGZlYXR1cmVzIGVuYWJsZWQgZm9yIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gRElTVFJPX0ZFQVRVUkVTIGlmIG5vdCBhbHNvIHByZXNlbnQgaW4gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMX0NPTlNJREVSRUQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IGluIHRoZSBtZXRhL2NvbmYvYml0YmFrZS5jb25mIGZpbGUgYW5kIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VyLWNvbmZpZ3VyYWJsZS4iCitESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gRElTVFJPX0ZFQVRVUkVTX0JBQ0tGSUxMIHRoYXQgc2hvdWxkIG5vdCBiZSBiYWNrZmlsbGVkIChpLmUuIGFkZGVkIHRvIERJU1RST19GRUFUVVJFUykgZHVyaW5nIHRoZSBidWlsZC4iCitESVNUUk9fTkFNRVtkb2NdID0gIlRoZSBsb25nIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbi4iCitESVNUUk9fUE5fQUxJQVNbZG9jXSA9ICJBbGlhcyBuYW1lcyB1c2VkIGZvciB0aGUgcmVjaXBlIGluIHZhcmlvdXMgTGludXggZGlzdHJpYnV0aW9ucy4iCitESVNUUk9fVkVSU0lPTltkb2NdID0gIlRoZSB2ZXJzaW9uIG9mIHRoZSBkaXN0cmlidXRpb24uIgorRElTVFJPT1ZFUlJJREVTW2RvY10gPSAiTGlzdHMgb3ZlcnJpZGVzIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IGRpc3RyaWJ1dGlvbi4gQnkgZGVmYXVsdCwgdGhlIHZhcmlhYmxlIGxpc3QgaW5jbHVkZXMgdGhlIHZhbHVlIG9mIHRoZSBESVNUUk8gdmFyaWFibGUuIgorRExfRElSW2RvY10gPSAiVGhlIGNlbnRyYWwgZG93bmxvYWQgZGlyZWN0b3J5IHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gc3RvcmUgZG93bmxvYWRzLiBCeSBkZWZhdWx0LCB0aGUgZGlyZWN0b3J5IGlzICdkb3dubG9hZHMnIGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorCisjRQorCitFTkFCTEVfQklOQVJZX0xPQ0FMRV9HRU5FUkFUSU9OW2RvY10gPSAiQ29udHJvbHMgd2hpY2ggbG9jYWxlcyBmb3IgZ2xpYmMgYXJlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGJ1aWxkLiBUaGUgdmFyaWFibGUgaXMgdXNlZnVsIGlmIHRoZSB0YXJnZXQgZGV2aWNlIGhhcyA2NE1ieXRlcyBvZiBSQU0gb3IgbGVzcy4iCitFUlJPUl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyBlcnJvcnMgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorRVhDTFVERV9GUk9NX1dPUkxEW2RvY10gPSAiRGlyZWN0cyBCaXRCYWtlIHRvIGV4Y2x1ZGUgYSByZWNpcGUgZnJvbSB3b3JsZCBidWlsZHMgKGkuZS4gYml0YmFrZSB3b3JsZCkuIgorRVhURU5EUEVbZG9jXSA9ICJVc2VkIHdpdGggZmlsZSBhbmQgcGF0aG5hbWVzIHRvIGNyZWF0ZSBhIHByZWZpeCBmb3IgYSByZWNpcGUncyB2ZXJzaW9uIGJhc2VkIG9uIHRoZSByZWNpcGUncyBQRSB2YWx1ZS4gSWYgUEUgaXMgc2V0IGFuZCBncmVhdGVyIHRoYW4gemVybyBmb3IgYSByZWNpcGUsIEVYVEVORFBFIGJlY29tZXMgdGhhdCB2YWx1ZS4iCitFWFRFTkRQS0dWW2RvY10gPSAiVGhlIGZ1bGwgcGFja2FnZSB2ZXJzaW9uIHNwZWNpZmljYXRpb24gYXMgaXQgYXBwZWFycyBvbiB0aGUgZmluYWwgcGFja2FnZXMgcHJvZHVjZWQgYnkgYSByZWNpcGUuIgorRVhURVJOQUxTUkNbZG9jXSA9ICJJZiBleHRlcm5hbHNyYy5iYmNsYXNzIGlzIGluaGVyaXRlZCwgdGhpcyB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHNvdXJjZSB0cmVlLCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYVEVSTkFMU1JDX0JVSUxEW2RvY10gPSAiSWYgZXh0ZXJuYWxzcmMuYmJjbGFzcyBpcyBpbmhlcml0ZWQsIHRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHJlY2lwZSdzIHNvdXJjZSBjb2RlIGlzIGJ1aWx0LCB3aGljaCBpcyBvdXRzaWRlIG9mIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtLiIKK0VYVFJBX0lNQUdFX0ZFQVRVUkVTW2RvY10gPSAiVGhlIGxpc3Qgb2YgYWRkaXRpb25hbCBmZWF0dXJlcyB0byBpbmNsdWRlIGluIGFuIGltYWdlLiBDb25maWd1cmUgdGhpcyB2YXJpYWJsZSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitFWFRSQV9JTUFHRURFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjaXBlcyB0byBidWlsZCB0aGF0IGRvIG5vdCBwcm92aWRlIHBhY2thZ2VzIGZvciBpbnN0YWxsaW5nIGludG8gdGhlIHJvb3QgZmlsZXN5c3RlbS4gVXNlIHRoaXMgdmFyaWFibGUgdG8gbGlzdCByZWNpcGVzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBmaW5hbCBpbWFnZSwgYnV0IG5vdCBuZWVkZWQgaW4gdGhlIHJvb3QgZmlsZXN5c3RlbS4iCitFWFRSQV9PRUNNQUtFW2RvY10gPSAiQWRkaXRpb25hbCBjbWFrZSBvcHRpb25zLiIKK0VYVFJBX09FQ09ORltkb2NdID0gIkFkZGl0aW9uYWwgY29uZmlndXJlIHNjcmlwdCBvcHRpb25zLiIKK0VYVFJBX09FTUFLRVtkb2NdID0gIkFkZGl0aW9uYWwgR05VIG1ha2Ugb3B0aW9ucy4iCitFWFRSQV9PRVNDT05TW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgc2NvbnMgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSB3YW50IHRvIHBhc3MgdG8gdGhlIHNjb25zIGNvbW1hbmQgbGluZS4iCitFWFRSQV9RTUFLRVZBUlNfUE9TVFtkb2NdID0gIkNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIG9yIG9wdGlvbnMgeW91IHdhbnQgdG8gcGFzcyB0byBxbWFrZSB3aGVuIHRoZSBhcmd1bWVudHMgbmVlZCB0byBiZSBhZnRlciB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCitFWFRSQV9RTUFLRVZBUlNfUFJFW2RvY10gPSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgb3Igb3B0aW9ucyB5b3Ugd2FudCB0byBwYXNzIHRvIHFtYWtlIHdoZW4gdGhlIGFyZ3VtZW50cyBuZWVkIHRvIGJlIGJlZm9yZSB0aGUgLnBybyBmaWxlIGxpc3Qgb24gdGhlIGNvbW1hbmQgbGluZS4iCitFWFRSQV9VU0VSU19QQVJBTVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBleHRyYXVzZXJzIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHByb3ZpZGVzIGltYWdlIGxldmVsIHVzZXIgYW5kIGdyb3VwIG9wZXJhdGlvbnMuIgorCisjRgorCitGRUVEX0RFUExPWURJUl9CQVNFX1VSSVtkb2NdID0gIkFsbG93IHRvIHNlcnZlIGlwayBkZXBsb3kgZGlyZWN0b3J5IGFzIGFuIGFkIGhvYyBmZWVkIChib2dvZmVlZCkuIFNldCB0byBiYXNlIFVSTCBvZiB0aGUgZGlyZWN0b3J5IGFzIGV4cG9ydGVkIGJ5IEhUVFAuIFNldCBvZiBhZCBob2MgZmVlZCBjb25maWdzIHdpbGwgYmUgZ2VuZXJhdGVkIGluIHRoZSBpbWFnZS4iCitGSUxFU1tkb2NdID0gIlRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIG9yIGZpbGVzIHRoYXQgYXJlIHBsYWNlZCBpbiBwYWNrYWdlcy4iCitGSUxFU0VYVFJBUEFUSFNbZG9jXSA9ICJFeHRlbmRzIHRoZSBzZWFyY2ggcGF0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHdoZW4gbG9va2luZyBmb3IgZmlsZXMgYW5kIHBhdGNoZXMgYXMgaXQgcHJvY2Vzc2VzIHJlY2lwZXMgYW5kIGFwcGVuZCBmaWxlcy4iCitGSUxFU09WRVJSSURFU1tkb2NdID0gIkEgc3Vic2V0IG9mIE9WRVJSSURFUyB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGZvciBjcmVhdGluZyBGSUxFU1BBVEguIgorRklMRVNQQVRIW2RvY10gPSAiVGhlIGRlZmF1bHQgc2V0IG9mIGRpcmVjdG9yaWVzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBzZWFyY2hpbmcgZm9yIHBhdGNoZXMgYW5kIGZpbGVzLiBJdCBpcyBkZWZpbmVkIGluIHRoZSBiYXNlLmJiY2xhc3MgY2xhc3MgZm91bmQgaW4gbWV0YS9jbGFzc2VzIGluIHRoZSBTb3VyY2UgRGlyZWN0b3J5LiBEbyBub3QgaGFuZC1lZGl0IHRoZSBGSUxFU1BBVEggdmFyaWFibGUuIgorRklMRVNZU1RFTV9QRVJNU19UQUJMRVNbZG9jXSA9ICJBbGxvd3MgeW91IHRvIGRlZmluZSB5b3VyIG93biBmaWxlIHBlcm1pc3Npb25zIHNldHRpbmdzIHRhYmxlIGFzIHBhcnQgb2YgeW91ciBjb25maWd1cmF0aW9uIGZvciB0aGUgcGFja2FnaW5nIHByb2Nlc3MuIgorRk9OVF9FWFRSQV9SREVQRU5EU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGZvbnRjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIGZvbnQgcGFja2FnZXMuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJ2ZvbnRjb25maWctdXRpbHMnLiIKK0ZPTlRfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBmb250Y2FjaGUgY2xhc3MsIHRoaXMgdmFyaWFibGUgaWRlbnRpZmllcyBwYWNrYWdlcyBjb250YWluaW5nIGZvbnQgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIGNhY2hlZCBieSBGb250Y29uZmlnLiIKK0ZVTExfT1BUSU1JWkFUSU9OW2RvY109ICJUaGUgb3B0aW9ucyB0byBwYXNzIGluIFRBUkdFVF9DRkxBR1MgYW5kIENGTEFHUyB3aGVuIGNvbXBpbGluZyBhbiBvcHRpbWl6ZWQgc3lzdGVtLiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICctZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mcmVuYW1lLXJlZ2lzdGVycyAtTzInLiIKKworI0cKKworR0lURElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSB3aGVyZSBHaXQgY2xvbmVzIHdpbGwgYmUgc3RvcmVkLiIKK0dST1VQQUREX1BBUkFNW2RvY10gPSAiV2hlbiBhIHJlY2lwZSBpbmhlcml0cyB0aGUgdXNlcmFkZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgZm9yIGEgcGFja2FnZSB3aGF0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgZ3JvdXBhZGQgY29tbWFuZCBpZiB5b3Ugd2lzaCB0byBhZGQgYSBncm91cCB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKK0dST1VQTUVNU19QQVJBTVtkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGZvciBhIHBhY2thZ2Ugd2hhdCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGdyb3VwbWVtcyBjb21tYW5kIGlmIHlvdSB3aXNoIHRvIG1vZGlmeSB0aGUgbWVtYmVycyBvZiBhIGdyb3VwIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKK0dSVUJfR0ZYU0VSSUFMW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgdG8gaGF2ZSBncmFwaGljcyBhbmQgc2VyaWFsIGluIHRoZSBib290IG1lbnUuIgorR1JVQl9PUFRTW2RvY10gPSAiQWRkaXRpb25hbCBvcHRpb25zIHRvIGFkZCB0byB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikgY29uZmlndXJhdGlvbi4iCitHUlVCX1RJTUVPVVRbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIHRpbWVvdXQgYmVmb3JlIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBMQUJFTCBpbiB0aGUgR05VIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciAoR1JVQikuIgorR1RLSU1NT0RVTEVTX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBndGstaW1tb2R1bGVzLWNhY2hlIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIHRoZSBHVEsrIGlucHV0IG1ldGhvZCBtb2R1bGVzIGJlaW5nIGluc3RhbGxlZCB3aGVuIHRoZSBtb2R1bGVzIGFyZSBpbiBwYWNrYWdlcyBvdGhlciB0aGFuIHRoZSBtYWluIHBhY2thZ2UuIgorCisjSAorCitIT01FUEFHRVtkb2NdID0gIldlYnNpdGUgd2hlcmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29mdHdhcmUgdGhlIHJlY2lwZSBpcyBidWlsZGluZyBjYW4gYmUgZm91bmQuIgorSE9TVF9BUkNIW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuIE5vcm1hbGx5IHNhbWUgYXMgdGhlIFRBUkdFVF9BUkNILiIKK0hPU1RfQ0NfQVJDSFtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBob3N0IGFyY2hpdGVjdHVyZS4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX0NDX0FSQ0guIgorSE9TVF9PU1tkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgb3BlcmF0aW5nIHN5c3RlbS4gTm9ybWFsbHkgdGhlIHNhbWUgYXMgdGhlIFRBUkdFVF9PUy4iCitIT1NUX1BSRUZJWFtkb2NdID0gIlRoZSBwcmVmaXggZm9yIHRoZSBjcm9zcyBjb21waWxlIHRvb2xjaGFpbi4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX1BSRUZJWC4iCitIT1NUX1NZU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIGZvciB3aXRoIHRoZSBidWlsZCBpcyBvY2N1cnJpbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcmVjaXBlLiIKK0hPU1RfVkVORE9SW2RvY10gPSAiVGhlIG5hbWUgb2YgdGhlIHZlbmRvci4gTm9ybWFsbHkgc2FtZSBhcyB0aGUgVEFSR0VUX1ZFTkRPUi4iCisKKyNJCisKK0lDRUNDX0VOVl9FWEVDW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBpY2VjYy1jcmVhdGUtZW52IHNjcmlwdCB0aGF0IHlvdSBwcm92aWRlLiIKK0lDRUNDX1BBVEhbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIGljZWNjIGJpbmFyeS4iCitJQ0VDQ19VU0VSX0NMQVNTX0JMW2RvY10gPSAiSWRlbnRpZmllcyB1c2VyIGNsYXNzZXMgdGhhdCB5b3UgZG8gbm90IHdhbnQgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydCB0byBjb25zaWRlci4iCitJQ0VDQ19VU0VSX1BBQ0tBR0VfQkxbZG9jXSA9ICJJZGVudGlmaWVzIHVzZXIgcmVjaXBlcyB0aGF0IHlvdSBkbyBub3Qgd2FudCB0aGUgSWNlY3JlYW0gZGlzdHJpYnV0ZWQgY29tcGlsZSBzdXBwb3J0IHRvIGNvbnNpZGVyLiIKK0lDRUNDX1VTRVJfUEFDS0FHRV9XTFtkb2NdID0gIklkZW50aWZpZXMgdXNlciByZWNpcGVzIHRoYXQgdXNlIGFuIGVtcHR5IFBBUkFMTEVMX01BS0UgdmFyaWFibGUgdGhhdCB5b3Ugd2FudCB0byBmb3JjZSByZW1vdGUgZGlzdHJpYnV0ZWQgY29tcGlsYXRpb24gb24gdXNpbmcgdGhlIEljZWNyZWFtIGRpc3RyaWJ1dGVkIGNvbXBpbGUgc3VwcG9ydC4iCitJTUFHRV9CQVNFTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgb2YgaW1hZ2Ugb3V0cHV0IGZpbGVzLiIKK0lNQUdFX0JPT1RfRklMRVNbZG9jXSA9ICJXaGl0ZXNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGZpbGVzIGZyb20gJHtERVBMT1lfRElSX0lNQUdFfSB0byBwbGFjZSBpbiBib290IHBhcnRpdGlvbi4gRW50cmllcyB3aWxsIGJlIGluc3RhbGxlZCB1bmRlciBhIHNhbWUgbmFtZSBhcyB0aGUgc291cmNlIGZpbGUuIFRvIGNoYW5nZSB0aGUgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBwYXNzIGEgZGVzaXJlZCBuYW1lIGFmdGVyIGEgc2VtaWNvbG9uIChlZy4gdS1ib290LmltZzt1Ym9vdCkuIgorSU1BR0VfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIHRoYXQgYWxsIGltYWdlcyBzaG91bGQgaW5oZXJpdC4iCitJTUFHRV9GRUFUVVJFU1tkb2NdID0gIlRoZSBwcmltYXJ5IGxpc3Qgb2YgZmVhdHVyZXMgdG8gaW5jbHVkZSBpbiBhbiBpbWFnZS4gQ29uZmlndXJlIHRoaXMgdmFyaWFibGUgaW4gYW4gaW1hZ2UgcmVjaXBlLiIKK0lNQUdFX0ZTVFlQRVNbZG9jXSA9ICJGb3JtYXRzIG9mIHJvb3QgZmlsZXN5c3RlbSBpbWFnZXMgdGhhdCB5b3Ugd2FudCB0byBoYXZlIGNyZWF0ZWQuIgorSU1BR0VfSU5TVEFMTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgcGFja2FnZXMgdG8gaW5zdGFsbCBpbnRvIGFuIGltYWdlLiBJbWFnZSByZWNpcGVzIHNldCBJTUFHRV9JTlNUQUxMIHRvIHNwZWNpZnkgdGhlIHBhY2thZ2VzIHRvIGluc3RhbGwgaW50byBhbiBpbWFnZSB0aHJvdWdoIGltYWdlLmJiY2xhc3MuIgorSU1BR0VfTElOR1VBU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBsb2NhbGVzIHRvIGluc3RhbGwgaW50byB0aGUgaW1hZ2UgZHVyaW5nIHRoZSByb290IGZpbGVzeXN0ZW0gY29uc3RydWN0aW9uIHByb2Nlc3MuIgorSU1BR0VfTkFNRVtkb2NdID0gIlRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgaW1hZ2UgZmlsZXMgbWludXMgdGhlIGV4dGVuc2lvbi4iCitJTUFHRV9PVkVSSEVBRF9GQUNUT1JbZG9jXSA9ICJEZWZpbmVzIGEgbXVsdGlwbGllciB0aGF0IHRoZSBidWlsZCBzeXN0ZW0gYXBwbGllcyB0byB0aGUgaW5pdGlhbCBpbWFnZSBzaXplIGZvciBjYXNlcyB3aGVuIHRoZSBtdWx0aXBsaWVyIHRpbWVzIHRoZSByZXR1cm5lZCBkaXNrIHVzYWdlIHZhbHVlIGZvciB0aGUgaW1hZ2UgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdW0gb2YgSU1BR0VfUk9PVEZTX1NJWkUgYW5kIElNQUdFX1JPT1RGU19FWFRSQV9TUEFDRS4iCitJTUFHRV9QS0dUWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUgcGFja2FnZSB0eXBlIChERUIsIFJQTSwgSVBLLCBvciBUQVIpIHVzZWQgYnkgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0uIgorSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORFtkb2NdID0gIkFkZGVkIGJ5IGNsYXNzZXMgdG8gcnVuIHBvc3QgcHJvY2Vzc2luZyBjb21tYW5kcyBvbmNlIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGhhcyBjcmVhdGVkIHRoZSBpbWFnZS4iCitJTUFHRV9ST09URlNbZG9jXSA9ICJUaGUgbG9jYXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aGlsZSBpdCBpcyB1bmRlciBjb25zdHJ1Y3Rpb24gKGkuZS4gZHVyaW5nIGRvX3Jvb3RmcykuIgorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFW2RvY10gPSAiRGVmaW5lcyBhZGRpdGlvbmFsIGZyZWUgZGlzayBzcGFjZSBjcmVhdGVkIGluIHRoZSBpbWFnZSBpbiBLYnl0ZXMuIEJ5IGRlZmF1bHQsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICcwJy4iCitJTUFHRV9ST09URlNfU0laRVtkb2NdID0gIkRlZmluZXMgdGhlIHNpemUgaW4gS2J5dGVzIGZvciB0aGUgZ2VuZXJhdGVkIGltYWdlLiIKK0lNQUdFX1RZUEVTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSB0eXBlcyBieSBkZWZhdWx0LiIKK0lOQ19QUltkb2NdID0gIkhlbHBzIGRlZmluZSB0aGUgcmVjaXBlIHJldmlzaW9uIGZvciByZWNpcGVzIHRoYXQgc2hhcmUgYSBjb21tb24gaW5jbHVkZSBmaWxlLiIKK0lOQ09NUEFUSUJMRV9MSUNFTlNFW2RvY10gPSAiU3BlY2lmaWVzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgbGljZW5zZSBuYW1lcyAoYXMgdGhleSB3b3VsZCBhcHBlYXIgaW4gTElDRU5TRSkgdGhhdCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSB0aGUgYnVpbGQuIFdpbGRjYXJkIGlzIHN1cHBvcnRlZCwgc3VjaCBhcyAnKkdQTHYzJyIKK0lOSElCSVRfREVGQVVMVF9ERVBTW2RvY10gPSAiUHJldmVudHMgdGhlIGRlZmF1bHQgZGVwZW5kZW5jaWVzLCBuYW1lbHkgdGhlIEMgY29tcGlsZXIgYW5kIHN0YW5kYXJkIEMgbGlicmFyeSAobGliYyksIGZyb20gYmVpbmcgYWRkZWQgdG8gREVQRU5EUy4iCitJTkhJQklUX1BBQ0tBR0VfU1RSSVBbZG9jXSA9ICJJZiBzZXQgdG8gIjEiLCBjYXVzZXMgdGhlIGJ1aWxkIHRvIG5vdCBzdHJpcCBiaW5hcmllcyBpbiByZXN1bHRpbmcgcGFja2FnZXMuIgorSU5IRVJJVFtkb2NdID0gIkNhdXNlcyB0aGUgbmFtZWQgY2xhc3MgdG8gYmUgaW5oZXJpdGVkIGF0IHRoaXMgcG9pbnQgZHVyaW5nIHBhcnNpbmcuIFRoZSB2YXJpYWJsZSBpcyBvbmx5IHZhbGlkIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgorSU5IRVJJVF9ESVNUUk9bZG9jXSA9ICJMaXN0cyBjbGFzc2VzIHRoYXQgd2lsbCBiZSBpbmhlcml0ZWQgYXQgdGhlIGRpc3RyaWJ1dGlvbiBsZXZlbC4gSXQgaXMgdW5saWtlbHkgdGhhdCB5b3Ugd2FudCB0byBlZGl0IHRoaXMgdmFyaWFibGUuIgorSU5JVFJBTUZTX0ZTVFlQRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBmb3JtYXQgZm9yIHRoZSBvdXRwdXQgaW1hZ2Ugb2YgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJhbWZzKSwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgYm9vdC4iCitJTklUUkRbZG9jXSA9ICJJbmRpY2F0ZXMgYSBsaXN0IG9mIGZpbGVzeXN0ZW0gaW1hZ2VzIHRvIGNvbmNhdGVuYXRlIGFuZCB1c2UgYXMgYW4gaW5pdGlhbCBSQU0gZGlzayAoaW5pdHJkKS4iCitJTklUU0NSSVBUX05BTUVbZG9jXSA9ICJUaGUgZmlsZW5hbWUgb2YgdGhlIGluaXRpYWxpemF0aW9uIHNjcmlwdCBhcyBpbnN0YWxsZWQgdG8gJHtzeXNjb25mZGlyfS9pbml0LmQuIgorSU5JVFNDUklQVF9QQUNLQUdFU1tkb2NdID0gIkEgbGlzdCBvZiB0aGUgcGFja2FnZXMgdGhhdCBjb250YWluIGluaXRzY3JpcHRzLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIHVwZGF0ZS1yYy5kLmJiY2xhc3MuIFRoZSB2YXJpYWJsZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gdGhlIFBOIHZhcmlhYmxlLiIKK0lOSVRTQ1JJUFRfUEFSQU1TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBvcHRpb25zIHRvIHBhc3MgdG8gdXBkYXRlLXJjLmQuIFRoZSB2YXJpYWJsZSBpcyBtYW5kYXRvcnkgYW5kIGlzIHVzZWQgaW4gcmVjaXBlcyB3aGVuIHVzaW5nIHVwZGF0ZS1yYy5kLmJiY2xhc3MuIgorSU5TQU5FX1NLSVBbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIFFBIGNoZWNrcyB0byBza2lwIGZvciBhIHNwZWNpZmljIHBhY2thZ2Ugd2l0aGluIGEgcmVjaXBlLiIKK0lQS19GRUVEX1VSSVNbZG9jXSA9ICJMaXN0IG9mIGlwa2cgZmVlZCByZWNvcmRzIHRvIHB1dCBpbnRvIGdlbmVyYXRlZCBpbWFnZS4iCisKKyNLCisKK0tBUkNIW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIGFyY2hpdGVjdHVyZSB1c2VkIHdoZW4gYXNzZW1ibGluZyB0aGUgY29uZmlndXJhdGlvbi4gWW91IGRlZmluZSB0aGUgS0FSQ0ggdmFyaWFibGUgaW4gdGhlIEJTUCBEZXNjcmlwdGlvbnMuIgorS0JSQU5DSFtkb2NdID0gIkEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgYnkgdGhlIGJ1aWxkIHByb2Nlc3MgdG8gZXhwbGljaXRseSBpZGVudGlmeSB0aGUga2VybmVsIGJyYW5jaCB0aGF0IGlzIHZhbGlkYXRlZCwgcGF0Y2hlZCBhbmQgY29uZmlndXJlZCBkdXJpbmcgYSBidWlsZC4iCitLQlJBTkNIX0RFRkFVTFRbZG9jXSA9ICJEZWZpbmVzIHRoZSBMaW51eCBrZXJuZWwgc291cmNlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCB1c2VkIHRvIGJ1aWxkIHRoZSBMaW51eCBrZXJuZWwuIFVubGVzcyB5b3Ugc3BlY2lmeSBvdGhlcndpc2UsIHRoZSB2YXJpYWJsZSBpbml0aWFsaXplcyB0byAnbWFzdGVyJy4iCitLRVJORUxfQ0xBU1NFU1tkb2NdID0gIkEgbGlzdCBvZiBjbGFzc2VzIGRlZmluaW5nIGtlcm5lbCBpbWFnZSB0eXBlcyB0aGF0IGtlcm5lbCBjbGFzcyBzaG91bGQgaW5oZXJpdC4iCitLRVJORUxfRVhUUkFfQVJHU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIG1ha2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwYXNzZXMgb24gd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4iCitLRVJORUxfRkVBVFVSRVNbZG9jXSA9ICJJbmNsdWRlcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGZyb20gdGhlIFlvY3RvIFByb2plY3Qga2VybmVsIEdpdCByZXBvc2l0b3J5LiBUaGUgbWV0YWRhdGEgeW91IGFkZCB0aHJvdWdoIHRoaXMgdmFyaWFibGUgaW5jbHVkZXMgY29uZmlnIGZyYWdtZW50cyBhbmQgZmVhdHVyZXMgZGVzY3JpcHRpb25zLiIKK0tFUk5FTF9JTUFHRVRZUEVbZG9jXSA9ICJUaGUgdHlwZSBvZiBrZXJuZWwgdG8gYnVpbGQgZm9yIGEgZGV2aWNlLCB1c3VhbGx5IHNldCBieSB0aGUgbWFjaGluZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCBkZWZhdWx0cyB0byAnekltYWdlJy4iCitLRVJORUxfTU9EVUxFX0FVVE9MT0FEW2RvY10gPSAiTGlzdHMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGF1dG8tbG9hZGVkIGR1cmluZyBib290IgorS0VSTkVMX01PRFVMRV9QUk9CRUNPTkZbZG9jXSA9ICJMaXN0cyBrZXJuZWwgbW9kdWxlcyBmb3Igd2hpY2ggdGhlIGJ1aWxkIHN5c3RlbSBleHBlY3RzIHRvIGZpbmQgbW9kdWxlX2NvbmZfKiB2YWx1ZXMgdGhhdCBzcGVjaWZ5IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggb2YgdGhlIG1vZHVsZXMiCitLRVJORUxfUEFUSFtkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorS0VSTkVMX1NSQ1tkb2NdID0gIlRoZSBsb2NhdGlvbiBvZiB0aGUga2VybmVsIHNvdXJjZXMuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgU1RBR0lOR19LRVJORUxfRElSIHdpdGhpbiB0aGUgbW9kdWxlIGNsYXNzIChtb2R1bGUuYmJjbGFzcykuIgorS0ZFQVRVUkVfREVTQ1JJUFRJT05bZG9jXSA9ICJQcm92aWRlcyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIGEgY29uZmlndXJhdGlvbiBmcmFnbWVudC4gWW91IHVzZSB0aGlzIHZhcmlhYmxlIGluIHRoZSAuc2NjIGZpbGUgdGhhdCBkZXNjcmliZXMgYSBjb25maWd1cmF0aW9uIGZyYWdtZW50IGZpbGUuIgorS01BQ0hJTkVbZG9jXSA9ICJUaGUgbWFjaGluZSBhcyBrbm93biBieSB0aGUga2VybmVsLiIKK0tUWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiIKKworI0wKKworTEFZRVJERVBFTkRTW2RvY10gPSAiTGlzdHMgdGhlIGxheWVycywgc2VwYXJhdGVkIGJ5IHNwYWNlcywgdXBvbiB3aGljaCB0aGlzIHJlY2lwZSBkZXBlbmRzLiBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgaW4gdGhlIGNvbmYvbGF5ZXIuY29uZiBmaWxlIGFuZCBtdXN0IGJlIHN1ZmZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIHNwZWNpZmljIGxheWVyLiIKK0xBWUVSRElSW2RvY10gPSAiV2hlbiB1c2VkIGluc2lkZSB0aGUgbGF5ZXIuY29uZiBjb25maWd1cmF0aW9uIGZpbGUsIHRoaXMgdmFyaWFibGUgcHJvdmlkZXMgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgbGF5ZXIuIgorTEFZRVJWRVJTSU9OW2RvY10gPSAiT3B0aW9uYWxseSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYSBsYXllciBhcyBhIHNpbmdsZSBudW1iZXIuIFRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbiB0aGUgY29uZi9sYXllci5jb25mIGZpbGUgYW5kIG11c3QgYmUgc3VmZml4ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgc3BlY2lmaWMgbGF5ZXIuIgorTEVBRF9TT05BTUVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxlYWQgKG9yIHByaW1hcnkpIGNvbXBpbGVkIGxpYnJhcnkgZmlsZSAoLnNvKSB0aGF0IHRoZSBkZWJpYW4gY2xhc3MgYXBwbGllcyBpdHMgbmFtaW5nIHBvbGljeSB0byBnaXZlbiBhIHJlY2lwZSB0aGF0IHBhY2thZ2VzIG11bHRpcGxlIGxpYnJhcmllcy4iCitMSUNfRklMRVNfQ0hLU1VNW2RvY10gPSAiQ2hlY2tzdW1zIG9mIHRoZSBsaWNlbnNlIHRleHQgaW4gdGhlIHJlY2lwZSBzb3VyY2UgY29kZS4iCitMSUNFTlNFW2RvY10gPSAiVGhlIGxpc3Qgb2Ygc291cmNlIGxpY2Vuc2VzIGZvciB0aGUgcmVjaXBlLiBMb2dpY2FsIG9wZXJhdG9ycyAnJicgb3IgJ3wnIGFuZCBwYXJlbnRoZXNlcyBjYW4gYmUgdXNlZC4iCitMSUNFTlNFX1BBVEhbZG9jXSA9ICJQYXRoIHRvIGFkZGl0aW9uYWwgbGljZW5zZXMgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLiIKK0xJTlVYX0tFUk5FTF9UWVBFW2RvY10gPSAiRGVmaW5lcyB0aGUga2VybmVsIHR5cGUgdG8gYmUgdXNlZCBpbiBhc3NlbWJsaW5nIHRoZSBjb25maWd1cmF0aW9uLiIKK0xJTlVYX1ZFUlNJT05bZG9jXSA9ICJUaGUgTGludXggdmVyc2lvbiBmcm9tIGtlcm5lbC5vcmcgb24gd2hpY2ggdGhlIExpbnV4IGtlcm5lbCBpbWFnZSBiZWluZyBidWlsdCB1c2luZyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBpcyBiYXNlZC4gWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLiIKK0xJTlVYX1ZFUlNJT05fRVhURU5TSU9OW2RvY10gPSAiQSBzdHJpbmcgZXh0ZW5zaW9uIGNvbXBpbGVkIGludG8gdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBMaW51eCBrZXJuZWwgYnVpbHQgd2l0aCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4gWW91IGRlZmluZSB0aGlzIHZhcmlhYmxlIGluIHRoZSBrZXJuZWwgcmVjaXBlLiIKK0xPR19ESVJbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB0byB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3cml0ZXMgb3ZlcmFsbCBsb2cgZmlsZXMuIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBpcyAke1RNUERJUn0vbG9nIgorCisjTQorCitNQUNISU5FW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgZGV2aWNlIGZvciB3aGljaCB0aGUgaW1hZ2UgaXMgYnVpbHQuIFlvdSBkZWZpbmUgTUFDSElORSBpbiB0aGUgY29uZi9sb2NhbC5jb25mIGZpbGUgaW4gdGhlIEJ1aWxkIERpcmVjdG9yeS4iCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SREVQRU5EU1tkb2NdID0gIkEgbGlzdCBvZiByZXF1aXJlZCBtYWNoaW5lLXNwZWNpZmljIHBhY2thZ2VzIHRvIGluc3RhbGwgYXMgcGFydCBvZiB0aGUgaW1hZ2UgYmVpbmcgYnVpbHQuIEJlY2F1c2UgdGhpcyBpcyBhICdtYWNoaW5lIGVzc2VudGlhbCcgdmFyaWFibGUsIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIgorTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgcmVjb21tZW5kZWQgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0LiBCZWNhdXNlIHRoaXMgaXMgYSAnbWFjaGluZSBlc3NlbnRpYWwnIHZhcmlhYmxlLCB0aGUgbGlzdCBvZiBwYWNrYWdlcyBhcmUgZXNzZW50aWFsIGZvciB0aGUgbWFjaGluZSB0byBib290LiIKK01BQ0hJTkVfRVhUUkFfUkRFUEVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBtYWNoaW5lIHRvIGJvb3QuIEhvd2V2ZXIsIHRoZSBidWlsZCBwcm9jZXNzIGZvciBtb3JlIGZ1bGx5LWZlYXR1cmVkIGltYWdlcyBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlcyBiZWluZyBwcmVzZW50LiIKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFNbZG9jXSA9ICJBIGxpc3Qgb2YgbWFjaGluZS1zcGVjaWZpYyBwYWNrYWdlcyB0byBpbnN0YWxsIGFzIHBhcnQgb2YgdGhlIGltYWdlIGJlaW5nIGJ1aWx0IHRoYXQgYXJlIG5vdCBlc3NlbnRpYWwgZm9yIGJvb3RpbmcgdGhlIG1hY2hpbmUuIFRoZSBpbWFnZSBiZWluZyBidWlsdCBoYXMgbm8gYnVpbGQgZGVwZW5kZW5jaWVzIG9uIHRoZSBwYWNrYWdlcyBpbiB0aGlzIGxpc3QuIgorTUFDSElORV9GRUFUVVJFU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBoYXJkd2FyZSBmZWF0dXJlcyB0aGUgTUFDSElORSBzdXBwb3J0cy4iCitNQUNISU5FX0ZFQVRVUkVTX0JBQ0tGSUxMW2RvY10gPSAiRmVhdHVyZXMgdG8gYmUgYWRkZWQgdG8gTUFDSElORV9GRUFUVVJFUyBpZiBub3QgYWxzbyBwcmVzZW50IGluIE1BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRC4gVGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gdGhlIG1ldGEvY29uZi9iaXRiYWtlLmNvbmYgZmlsZSBhbmQgaXMgbm90IGludGVuZGVkIHRvIGJlIHVzZXItY29uZmlndXJhYmxlLiIKK01BQ0hJTkVfRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRFtkb2NdID0gIkZlYXR1cmVzIGZyb20gTUFDSElORV9GRUFUVVJFU19CQUNLRklMTCB0aGF0IHNob3VsZCBub3QgYmUgYmFja2ZpbGxlZCAoaS5lLiBhZGRlZCB0byBNQUNISU5FX0ZFQVRVUkVTKSBkdXJpbmcgdGhlIGJ1aWxkLiIKK01BQ0hJTkVPVkVSUklERVNbZG9jXSA9ICJMaXN0cyBvdmVycmlkZXMgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4gQnkgZGVmYXVsdCwgdGhpcyBsaXN0IGluY2x1ZGVzIHRoZSB2YWx1ZSBvZiBNQUNISU5FLiIKK01BSU5UQUlORVJbZG9jXSA9ICJUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgZGlzdHJpYnV0aW9uIG1haW50YWluZXIuIgorTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCitNTFBSRUZJWFtkb2NdID0gIlNwZWNpZmllcyBhIHByZWZpeCBoYXMgYmVlbiBhZGRlZCB0byBQTiB0byBjcmVhdGUgYSBzcGVjaWFsIHZlcnNpb24gb2YgYSByZWNpcGUgb3IgcGFja2FnZSwgc3VjaCBhcyBhIE11bHRpbGliIHZlcnNpb24uIgorTU9EVUxFX1RBUkJBTExfREVQTE9ZW2RvY10gPSAiQ29udHJvbHMgY3JlYXRpb24gb2YgdGhlIG1vZHVsZXMtKi50Z3ogZmlsZS4gU2V0IHRoaXMgdmFyaWFibGUgdG8gIjAiIHRvIGRpc2FibGUgY3JlYXRpb24gb2YgdGhpcyBmaWxlLCB3aGljaCBjb250YWlucyBhbGwgb2YgdGhlIGtlcm5lbCBtb2R1bGVzIHJlc3VsdGluZyBmcm9tIGEga2VybmVsIGJ1aWxkLiIKK01VTFRJTUFDSF9UQVJHRVRfU1lTW2RvY10gPSAiU2VwYXJhdGVzIGZpbGVzIGZvciBkaWZmZXJlbnQgbWFjaGluZXMgc3VjaCB0aGF0IHlvdSBjYW4gYnVpbGQgZm9yIG11bHRpcGxlIHRhcmdldCBtYWNoaW5lcyB1c2luZyB0aGUgc2FtZSBvdXRwdXQgZGlyZWN0b3JpZXMuIgorCisjTgorCitOQVRJVkVMU0JTVFJJTkdbZG9jXSA9ICJBIHN0cmluZyBpZGVudGlmeWluZyB0aGUgaG9zdCBkaXN0cmlidXRpb24uIgorTk9fUkVDT01NRU5EQVRJT05TW2RvY10gPSAiV2hlbiBzZXQgdG8gJzEnLCBubyByZWNvbW1lbmRlZCBwYWNrYWdlcyB3aWxsIGJlIGluc3RhbGxlZC4gUmVhbGl6ZSB0aGF0IHNvbWUgcmVjb21tZW5kZWQgcGFja2FnZXMgbWlnaHQgYmUgcmVxdWlyZWQgZm9yIGNlcnRhaW4gc3lzdGVtIGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMga2VybmVsLW1vZHVsZXMuIEl0IGlzIHVwIHRvIHRoZSB1c2VyIHRvIGFkZCBwYWNrYWdlcyB0byBJTUFHRV9JTlNUQUxMIGFzIG5lZWRlZC4iCitOT0hERFtkb2NdID0gIkNhdXNlcyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBza2lwIGJ1aWxkaW5nIHRoZSAuaGRkaW1nIGltYWdlLiIKK05PSVNPW2RvY10gPSAiQ2F1c2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIHNraXAgYnVpbGRpbmcgdGhlIElTTyBpbWFnZS4iCisKKyNPCisKK09FX0JJTkNPTkZJR19FWFRSQV9NQU5HTEVbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBiaW5jb25maWcuYmJjbGFzcyBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSAic2VkIiBjb21tYW5kLiIKK09FX0lNUE9SVFNbZG9jXSA9ICJBbiBpbnRlcm5hbCB2YXJpYWJsZSB1c2VkIHRvIHRlbGwgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gd2hhdCBQeXRob24gbW9kdWxlcyB0byBpbXBvcnQgZm9yIGV2ZXJ5IFB5dGhvbiBmdW5jdGlvbiBydW4gYnkgdGhlIHN5c3RlbS4iCitPRV9URVJNSU5BTFtkb2NdID0gIkNvbnRyb2xzIGhvdyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBzcGF3bnMgaW50ZXJhY3RpdmUgdGVybWluYWxzIG9uIHRoZSBob3N0IGRldmVsb3BtZW50IHN5c3RlbS4iCitPRVJPT1RbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGhlIHRvcC1sZXZlbCBidWlsZCBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgaXMgc291cmNlZC4iCitPTERFU1RfS0VSTkVMW2RvY10gPSAiRGVjbGFyZXMgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIHRoZSBMaW51eCBrZXJuZWwgdGhhdCB0aGUgcHJvZHVjZWQgYmluYXJpZXMgbXVzdCBzdXBwb3J0LiIKK09WRVJSSURFU1tkb2NdID0gIkJpdEJha2UgdXNlcyBPVkVSUklERVMgdG8gY29udHJvbCB3aGF0IHZhcmlhYmxlcyBhcmUgb3ZlcnJpZGRlbiBhZnRlciBCaXRCYWtlIHBhcnNlcyByZWNpcGVzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLiIKKworI1AKKworUFtkb2NdID0gIlRoZSByZWNpcGUgbmFtZSBhbmQgdmVyc2lvbi4gUCBpcyBjb21wcmlzZWQgb2YgJHtQTn0tJHtQVn0uIgorUEFDS0FHRV9BUkNIW2RvY10gPSAiVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgcmVzdWx0aW5nIHBhY2thZ2Ugb3IgcGFja2FnZXMuIgorUEFDS0FHRV9BUkNIU1tkb2NdID0gIkEgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0IGluIG9yZGVyIG9mIHByaW9yaXR5LiIKK1BBQ0tBR0VfQkVGT1JFX1BOW2RvY10gPSAiRW5hYmxlcyBlYXNpbHkgYWRkaW5nIHBhY2thZ2VzIHRvIFBBQ0tBR0VTIGJlZm9yZSAke1BOfSBzbyB0aGF0IHRoZSBwYWNrYWdlcyBjYW4gcGljayB1cCBmaWxlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IHBhY2thZ2UuIgorUEFDS0FHRV9DTEFTU0VTW2RvY10gPSAiVGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2Ugd2hlbiBwYWNrYWdpbmcgZGF0YS4gSXQgaXMgc2V0IGluIHRoZSBjb25mL2xvY2FsLmNvbmYgZmlsZSBpbiB0aGUgQnVpbGQgRGlyZWN0b3J5LiIKK1BBQ0tBR0VfRVhDTFVERVtkb2NdID0gIlBhY2thZ2VzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgaW5zdGFsbGF0aW9uLiBJZiBhIGxpc3RlZCBwYWNrYWdlIGlzIHJlcXVpcmVkLCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIgorUEFDS0FHRV9FWFRSQV9BUkNIU1tkb2NdID0gIlNwZWNpZmllcyB0aGUgbGlzdCBvZiBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGUgZGV2aWNlIENQVS4gVGhpcyB2YXJpYWJsZSBpcyB1c2VmdWwgd2hlbiB5b3UgYnVpbGQgZm9yIHNldmVyYWwgZGlmZmVyZW50IGRldmljZXMgdGhhdCB1c2UgbWlzY2VsbGFuZW91cyBwcm9jZXNzb3JzLiIKK1BBQ0tBR0VfR1JPVVBbZG9jXSA9ICJEZWZpbmVzIG9uZSBvciBtb3JlIHBhY2thZ2VzIHRvIGluY2x1ZGUgaW4gYW4gaW1hZ2Ugd2hlbiBhIHNwZWNpZmljIGl0ZW0gaXMgaW5jbHVkZWQgaW4gSU1BR0VfRkVBVFVSRVMuIgorUEFDS0FHRV9JTlNUQUxMW2RvY10gPSAiTGlzdCBvZiB0aGUgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIGltYWdlLiBUaGUgdmFyaWFibGUgaXMgZ2VuZXJhbGx5IG5vdCB1c2VyLWRlZmluZWQgYW5kIHVzZXMgSU1BR0VfSU5TVEFMTCBhcyBwYXJ0IG9mIHRoZSBsaXN0LiIKK1BBQ0tBR0VfSU5TVEFMTF9BVFRFTVBUT05MWVtkb2NdID0gIkxpc3Qgb2YgcGFja2FnZXMgYXR0ZW1wdGVkIHRvIGJlIGluc3RhbGxlZC4gSWYgYSBsaXN0ZWQgcGFja2FnZSBmYWlscyB0byBpbnN0YWxsLCB0aGUgYnVpbGQgc3lzdGVtIGRvZXMgbm90IGdlbmVyYXRlIGFuIGVycm9yLiBUaGlzIHZhcmlhYmxlIGlzIGdlbmVyYWxseSBub3QgdXNlci1kZWZpbmVkLiIKK1BBQ0tBR0VDT05GSUdbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIHByb3ZpZGVzIGEgbWVhbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGZlYXR1cmVzIG9mIGEgcmVjaXBlIG9uIGEgcGVyLXJlY2lwZSBiYXNpcy4iCitQQUNLQUdFU1tkb2NdID0gIlRoZSBsaXN0IG9mIHBhY2thZ2VzIHRvIGJlIGNyZWF0ZWQgZnJvbSB0aGUgcmVjaXBlLiIKK1BBQ0tBR0VTX0RZTkFNSUNbZG9jXSA9ICJBIHByb21pc2UgdGhhdCB5b3VyIHJlY2lwZSBzYXRpc2ZpZXMgcnVudGltZSBkZXBlbmRlbmNpZXMgZm9yIG9wdGlvbmFsIG1vZHVsZXMgdGhhdCBhcmUgZm91bmQgaW4gb3RoZXIgcmVjaXBlcy4iCitQQVJBTExFTF9NQUtFW2RvY10gPSAiU3BlY2lmaWVzIGV4dHJhIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBtYWtlIGNvbW1hbmQgZHVyaW5nIHRoZSBjb21waWxlIHRhc2tzLiBUaGlzIHZhcmlhYmxlIGlzIHVzdWFsbHkgaW4gdGhlIGZvcm0gLWogNCwgd2hlcmUgdGhlIG51bWJlciByZXByZXNlbnRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCB0aHJlYWRzIG1ha2UgY2FuIHJ1bi4iCitQQVJBTExFTF9NQUtFSU5TVFtkb2NdID0gIkV4dHJhIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBtYWtlIGluc3RhbGwgY29tbWFuZCBkdXJpbmcgdGhlIGRvX2luc3RhbGwgdGFzayBpbiBvcmRlciB0byBzcGVjaWZ5IHBhcmFsbGVsIGluc3RhbGxhdGlvbi4iCitQQVRDSFJFU09MVkVbZG9jXSA9ICJFbmFibGUgb3IgZGlzYWJsZSBpbnRlcmFjdGl2ZSBwYXRjaCByZXNvbHV0aW9uLiIKK1BBVENIVE9PTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdXRpbGl0eSB1c2VkIHRvIGFwcGx5IHBhdGNoZXMgZm9yIGEgcmVjaXBlIGR1cmluZyBkb19wYXRjaC4iCitQRVtkb2NdID0gIlRoZSBlcG9jaCBvZiB0aGUgcmVjaXBlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAnMCcuIFRoZSBmaWVsZCBpcyB1c2VkIHRvIG1ha2UgdXBncmFkZXMgcG9zc2libGUgd2hlbiB0aGUgdmVyc2lvbmluZyBzY2hlbWUgY2hhbmdlcyBpbiBzb21lIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgd2F5LiIKK1BGW2RvY10gPSAiU3BlY2lmaWVzIHRoZSByZWNpcGUgb3IgcGFja2FnZSBuYW1lIGFuZCBpbmNsdWRlcyBhbGwgdmVyc2lvbiBhbmQgcmV2aXNpb24gbnVtYmVycy4gVGhpcyB2YXJpYWJsZSBpcyBjb21wcmlzZWQgb2YgJHtQTn0tJHtFWFRFTkRQRX0ke1BWfS0ke1BSfS4iCitQSVhCVUZfUEFDS0FHRVNbZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSBwaXhidWZjYWNoZSBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIHBhY2thZ2VzIHRoYXQgY29udGFpbiB0aGUgcGl4YnVmIGxvYWRlcnMgdXNlZCB3aXRoIGdkay1waXhidWYuIgorUEtHRFtkb2NdID0gIlBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBiZWZvcmUgdGhleSBhcmUgc3BsaXQgaW50byBpbmRpdmlkdWFsIHBhY2thZ2VzLiIKK1BLR0RBVEFfRElSW2RvY10gPSAiUG9pbnRzIHRvIGEgc2hhcmVkLCBnbG9iYWwtc3RhdGUgZGlyZWN0b3J5IHRoYXQgaG9sZHMgZGF0YSBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBwYWNrYWdpbmcgcHJvY2Vzcy4iCitQS0dERVNUW2RvY10gPSAiUG9pbnRzIHRvIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGZvciBmaWxlcyB0byBiZSBwYWNrYWdlZCBhZnRlciB0aGV5IGhhdmUgYmVlbiBzcGxpdCBpbnRvIGluZGl2aWR1YWwgcGFja2FnZXMuIgorUEtHREVTVFdPUktbZG9jXSA9ICJQb2ludHMgdG8gYSB0ZW1wb3Jhcnkgd29yayBhcmVhIHVzZWQgYnkgdGhlIGRvX3BhY2thZ2UgdGFzayB0byB3cml0ZSBvdXRwdXQgZnJvbSB0aGUgZG9fcGFja2FnZWRhdGEgdGFzay4iCitQTltkb2NdID0gIlBOIHJlZmVycyB0byBhIHJlY2lwZSBuYW1lIGluIHRoZSBjb250ZXh0IG9mIGEgZmlsZSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGFzIGlucHV0IHRvIGNyZWF0ZSBhIHBhY2thZ2UuIEl0IHJlZmVycyB0byBhIHBhY2thZ2UgbmFtZSBpbiB0aGUgY29udGV4dCBvZiBhIGZpbGUgY3JlYXRlZCBvciBwcm9kdWNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitQTkJMQUNLTElTVFtkb2NdID0gIkxpc3RzIHJlY2lwZXMgeW91IGRvIG5vdCB3YW50IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHRvIGJ1aWxkLiIKK1BSW2RvY10gPSAiVGhlIHJldmlzaW9uIG9mIHRoZSByZWNpcGUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlIGlzICdyMCcuIgorUFJFRkVSUkVEX1BST1ZJREVSW2RvY10gPSAiSWYgbXVsdGlwbGUgcmVjaXBlcyBwcm92aWRlIGFuIGl0ZW0sIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorUFJFRkVSUkVEX1ZFUlNJT05bZG9jXSA9ICJJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgcmVjaXBlcyBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgZGV0ZXJtaW5lcyB3aGljaCByZWNpcGUgc2hvdWxkIGJlIGdpdmVuIHByZWZlcmVuY2UuIgorUFJFTUlSUk9SU1tkb2NdID0gIlNwZWNpZmllcyBhZGRpdGlvbmFsIHBhdGhzIGZyb20gd2hpY2ggdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gZ2V0cyBzb3VyY2UgY29kZS4iCitQUklOQ1tkb2NdID0gIkNhdXNlcyB0aGUgUFIgdmFyaWFibGUgb2YgLmJiYXBwZW5kIGZpbGVzIHRvIGR5bmFtaWNhbGx5IGluY3JlbWVudC4gVGhpcyBpbmNyZW1lbnQgbWluaW1pemVzIHRoZSBpbXBhY3Qgb2YgbGF5ZXIgb3JkZXJpbmcuIFRoaXMgdmFyaWFibGUgZGVmYXVsdHMgdG8gJzAnLiIKK1BSSU9SSVRZW2RvY10gPSAiSW5kaWNhdGVzIHRoZSBpbXBvcnRhbmNlIG9mIGEgcGFja2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzICdvcHRpb25hbCcuICBPdGhlciBzdGFuZGFyZCB2YWx1ZXMgYXJlICdyZXF1aXJlZCcsICdzdGFuZGFyZCcgYW5kICdleHRyYScuIgorUFJPVklERVNbZG9jXSA9ICJBIGxpc3Qgb2YgYWxpYXNlcyB0aGF0IGEgcmVjaXBlIGFsc28gcHJvdmlkZXMuIFRoZXNlIGFsaWFzZXMgYXJlIHVzZWZ1bCBmb3Igc2F0aXNmeWluZyBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcmVjaXBlcyBkdXJpbmcgdGhlIGJ1aWxkIGFzIHNwZWNpZmllZCBieSBERVBFTkRTLiIKK1BSU0VSVl9IT1NUW2RvY10gPSAiVGhlIG5ldHdvcmsgYmFzZWQgUFIgc2VydmljZSBob3N0IGFuZCBwb3J0LiIKK1BWW2RvY10gPSAiVGhlIHZlcnNpb24gb2YgdGhlIHJlY2lwZS4gVGhlIHZlcnNpb24gaXMgbm9ybWFsbHkgZXh0cmFjdGVkIGZyb20gdGhlIHJlY2lwZSBmaWxlbmFtZS4iCisKKyNRCisKK1FNQUtFX1BST0ZJTEVTW2RvY10gPSAiU3BlY2lmaWVzIHlvdXIgb3duIHN1YnNldCBvZiAucHJvIGZpbGVzIHRvIGJlIGJ1aWx0IGZvciB1c2Ugd2l0aCBxbWFrZS4iCisKKyNSCisKK1JDT05GTElDVFNbZG9jXSA9ICJUaGUgbGlzdCBvZiBwYWNrYWdlcyB0aGF0IGNvbmZsaWN0IHdpdGggYW5vdGhlciBwYWNrYWdlLiBOb3RlIHRoYXQgdGhlIHBhY2thZ2Ugd2lsbCBub3QgYmUgaW5zdGFsbGVkIGlmIHRoZSBjb25mbGljdGluZyBwYWNrYWdlcyBhcmUgbm90IGZpcnN0IHJlbW92ZWQuIgorUkRFUEVORFNbZG9jXSA9ICJMaXN0cyBhIHBhY2thZ2UncyBydW50aW1lIGRlcGVuZGVuY2llcyAoaS5lLiBvdGhlciBwYWNrYWdlcykgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBmb3IgdGhlIHBhY2thZ2UgdG8gYmUgYnVpbHQuIFRoZXkgbXVzdCBiZSB0aGUgbmFtZXMgb2Ygb3RoZXIgcGFja2FnZXMgYXMgbGlzdGVkIGluIHRoZSBQQUNLQUdFUyB2YXJpYWJsZSwgbm90IHJlY2lwZSBuYW1lcyAoUE4pLiIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIGRpc3Ryb19mZWF0dXJlc19jaGVjayBjbGFzcywgdGhpcyB2YXJpYWJsZSBpZGVudGlmaWVzIGRpc3RyaWJ1dGlvbiBmZWF0dXJlcyB0aGF0IG11c3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciBmb3IgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gYnVpbGQgdGhlIHJlY2lwZS4iCitSTV9PTERfSU1BR0VbZG9jXSA9ICJSZWNsYWltcyBkaXNrIHNwYWNlIGJ5IHJlbW92aW5nIHByZXZpb3VzbHkgYnVpbHQgdmVyc2lvbnMgb2YgdGhlIHNhbWUgaW1hZ2UgZnJvbSB0aGUgaW1hZ2VzIGRpcmVjdG9yeSBwb2ludGVkIHRvIGJ5IHRoZSBERVBMT1lfRElSIHZhcmlhYmxlLiIKK1JNX1dPUktfRVhDTFVERVtkb2NdID0gIldpdGggcm1fd29yayBlbmFibGVkLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBhIGxpc3Qgb2YgcGFja2FnZXMgd2hvc2Ugd29yayBkaXJlY3RvcmllcyBzaG91bGQgbm90IGJlIHJlbW92ZWQuIgorUk9PVEZTW2RvY10gPSAiSW5kaWNhdGVzIGEgZmlsZXN5c3RlbSBpbWFnZSB0byBpbmNsdWRlIGFzIHRoZSByb290IGZpbGVzeXN0ZW0uIgorUk9PVEZTX1BPU1RQUk9DRVNTX0NPTU1BTkRbZG9jXSA9ICJBZGRlZCBieSBjbGFzc2VzIHRvIHJ1biBwb3N0IHByb2Nlc3NpbmcgY29tbWFuZHMgb25jZSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBoYXMgY3JlYXRlZCB0aGUgcm9vdCBmaWxlc3lzdGVtLiIKK1JQUk9WSURFU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlIG5hbWUgYWxpYXNlcyB0aGF0IGEgcGFja2FnZSBhbHNvIHByb3ZpZGVzLiBUaGVzZSBhbGlhc2VzIGFyZSB1c2VmdWwgZm9yIHNhdGlzZnlpbmcgcnVudGltZSBkZXBlbmRlbmNpZXMgb2Ygb3RoZXIgcGFja2FnZXMgYm90aCBkdXJpbmcgdGhlIGJ1aWxkIGFuZCBvbiB0aGUgdGFyZ2V0LiIKK1JSRUNPTU1FTkRTW2RvY10gPSAiQSBsaXN0IG9mIHBhY2thZ2VzIHRoYXQgZXh0ZW5kcyB0aGUgdXNhYmlsaXR5IG9mIGEgcGFja2FnZSBiZWluZyBidWlsdC4gVGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQgZG9lcyBub3QgZGVwZW5kIG9uIHRoaXMgbGlzdCBvZiBwYWNrYWdlcyBpbiBvcmRlciB0byBzdWNjZXNzZnVsbHkgYnVpbGQsIGJ1dCBuZWVkcyB0aGVtIGZvciB0aGUgZXh0ZW5kZWQgdXNhYmlsaXR5LiIKK1JSRVBMQUNFU1tkb2NdID0gIkEgbGlzdCBvZiBwYWNrYWdlcyByZXBsYWNlZCBieSBhIHBhY2thZ2UuIFRoZSBwYWNrYWdlIG1hbmFnZXIgdXNlcyB0aGlzIHZhcmlhYmxlIHRvIGRldGVybWluZSB3aGljaCBwYWNrYWdlIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gcmVwbGFjZSBvdGhlciBwYWNrYWdlKHMpIGR1cmluZyBhbiB1cGdyYWRlLiIKK1JTVUdHRVNUU1tkb2NdID0gIkEgbGlzdCBvZiBhZGRpdGlvbmFsIHBhY2thZ2VzIHRoYXQgeW91IGNhbiBzdWdnZXN0IGZvciBpbnN0YWxsYXRpb24gYnkgdGhlIHBhY2thZ2UgbWFuYWdlciBhdCB0aGUgdGltZSBhIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiBOb3QgYWxsIHBhY2thZ2UgbWFuYWdlcnMgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHkuIgorCisjUworCitTW2RvY10gPSAiVGhlIGxvY2F0aW9uIGluIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlcmUgdW5wYWNrZWQgcGFja2FnZSBzb3VyY2UgY29kZSByZXNpZGVzLiIKK1NBTklUWV9URVNURURfRElTVFJPU1tkb2NdID0gIkEgbGlzdCBvZiB0aGUgaG9zdCBkaXN0cmlidXRpb24gaWRlbnRpZmllcnMgdGhhdCB0aGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuIHRlc3RlZCBhZ2FpbnN0LiIKK1NES19BUkNIW2RvY10gPSAiVGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBTREsuIgorU0RLX0RFUExPWVtkb2NdID0gIlRoZSBkaXJlY3Rvcnkgc2V0IHVwIGFuZCB1c2VkIGJ5IHRoZSBwb3B1bGF0ZV9zZGtfYmFzZSB0byB3aGljaCB0aGUgU0RLIGlzIGRlcGxveWVkLiIKK1NES19ESVJbZG9jXSA9ICJUaGUgcGFyZW50IGRpcmVjdG9yeSB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4iCitTREtfTkFNRVtkb2NdID0gIlRoZSBiYXNlIG5hbWUgZm9yIFNESyBvdXRwdXQgZmlsZXMuIgorU0RLX09VVFBVVFtkb2NdID0gIlRoZSBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHdoZW4gY3JlYXRpbmcgU0RLIG91dHB1dC4iCitTREtJTUFHRV9GRUFUVVJFU1tkb2NdID0gIkVxdWl2YWxlbnQgdG8gSU1BR0VfRkVBVFVSRVMuIEhvd2V2ZXIsIHRoaXMgdmFyaWFibGUgYXBwbGllcyB0byB0aGUgU0RLIGdlbmVyYXRlZCBmcm9tIGFuIGltYWdlIHVzaW5nIHRoZSBjb21tYW5kICdiaXRiYWtlIC1jIHBvcHVsYXRlX3NkayBpbWFnZW5hbWUnLiIKK1NES01BQ0hJTkVbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGFyY2hpdGVjdHVyZSAoaS5lLiBpNjg2IG9yIHg4Nl82NCkgZm9yIHdoaWNoIHRvIGJ1aWxkIFNESyBhbmQgQURUIGl0ZW1zLiIKK1NFQ1RJT05bZG9jXSA9ICJUaGUgc2VjdGlvbiBpbiB3aGljaCBwYWNrYWdlcyBzaG91bGQgYmUgY2F0ZWdvcml6ZWQuIFBhY2thZ2UgbWFuYWdlbWVudCB1dGlsaXRpZXMgY2FuIG1ha2UgdXNlIG9mIHRoaXMgdmFyaWFibGUuIgorU0VMRUNURURfT1BUSU1JWkFUSU9OW2RvY10gPSAiVGhlIHZhcmlhYmxlIHRha2VzIHRoZSB2YWx1ZSBvZiBGVUxMX09QVElNSVpBVElPTiB1bmxlc3MgREVCVUdfQlVJTEQgPSAnMScuIEluIHRoaXMgY2FzZSwgdGhlIHZhbHVlIG9mIERFQlVHX09QVElNSVpBVElPTiBpcyB1c2VkLiIKK1NFUklBTF9DT05TT0xFW2RvY10gPSAiVGhlIHNwZWVkIGFuZCBkZXZpY2UgZm9yIHRoZSBzZXJpYWwgcG9ydCB1c2VkIHRvIGF0dGFjaCB0aGUgc2VyaWFsIGNvbnNvbGUuIFRoaXMgdmFyaWFibGUgaXMgZ2l2ZW4gdG8gdGhlIGtlcm5lbCBhcyB0aGUgJ2NvbnNvbGUnIHBhcmFtZXRlci4gQWZ0ZXIgYm9vdGluZyBvY2N1cnMsIGdldHR5IGlzIHN0YXJ0ZWQgb24gdGhhdCBwb3J0IHNvIHJlbW90ZSBsb2dpbiBpcyBwb3NzaWJsZS4iCitTRVJJQUxfQ09OU09MRVNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzZXJpYWwgY29uc29sZXMgKFRUWXMpIHRvIGVuYWJsZSB1c2luZyBnZXR0eS4iCitTRVJJQUxfQ09OU09MRVNfQ0hFQ0tbZG9jXSA9ICJTaW1pbGFyIHRvIFNFUklBTF9DT05TT0xFUyBleGNlcHQgdGhlIGRldmljZSBpcyBjaGVja2VkIGZvciBleGlzdGVuY2UgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZW5hYmxlIGl0LiBTdXBwb3J0ZWQgb25seSBieSBTeXNWaW5pdC4iCitTSUdHRU5fRVhDTFVERV9TQUZFX1JFQ0lQRV9ERVBTW2RvY10gPSAiQSBsaXN0IG9mIHJlY2lwZSBkZXBlbmRlbmNpZXMgdGhhdCBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHNpZ25hdHVyZXMgb2YgdGFza3MgZnJvbSBvbmUgcmVjaXBlIHdoZW4gdGhleSBkZXBlbmQgb24gdGFza3MgZnJvbSBhbm90aGVyIHJlY2lwZS4iCitTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRVtkb2NdID0gIkEgbGlzdCBvZiByZWNpcGVzIHRoYXQgYXJlIGNvbXBsZXRlbHkgc3RhYmxlIGFuZCB3aWxsIG5ldmVyIGNoYW5nZS4iCitTSVRFSU5GT19CSVRTW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gQ1BVLiIKK1NJVEVJTkZPX0VORElBTk5FU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGVuZGlhbiBieXRlIG9yZGVyIG9mIHRoZSB0YXJnZXQgc3lzdGVtLiBUaGUgdmFsdWUgc2hvdWxkIGJlIGVpdGhlciAnbGUnIGZvciAnbGl0dGxlLWVuZGlhbicgb3IgJ2JlJyBmb3IgJ2JpZy1lbmRpYW4nLiIKK1NPQ19GQU1JTFlbZG9jXSA9ICJHcm91cHMgdG9nZXRoZXIgbWFjaGluZXMgYmFzZWQgdXBvbiB0aGUgc2FtZSBmYW1pbHkgb2YgU09DIChTeXN0ZW0gT24gQ2hpcCkuIFlvdSB0eXBpY2FsbHkgc2V0IHRoaXMgdmFyaWFibGUgaW4gYSBjb21tb24gLmluYyBmaWxlIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgb2YgYWxsIHRoZSBtYWNoaW5lcy4iCitTT0xJQlNbZG9jXSA9ICJEZWZpbmVzIHRoZSBzdWZmaXggZm9yIHNoYXJlZCBsaWJyYXJpZXMgdXNlZCBvbiB0aGUgdGFyZ2V0IHBsYXRmb3JtLiIKK1NPTElCU0RFVltkb2NdID0gIkRlZmluZXMgdGhlIHN1ZmZpeCBmb3IgdGhlIGRldmVsb3BtZW50IHN5bWJvbGljIGxpbmsgKHN5bWxpbmspIGZvciBzaGFyZWQgbGlicmFyaWVzIG9uIHRoZSB0YXJnZXQgcGxhdGZvcm0uIgorU09VUkNFX01JUlJPUl9GRVRDSFtkb2NdID0gIlN3aXRjaCBtYXJraW5nIGJ1aWxkIGFzIHNvdXJjZSBmZXRjaGVyLiBVc2VkIHRvIHNraXAgQ09NUEFUSUJMRV8qIGNoZWNraW5nLiIKK1NPVVJDRV9NSVJST1JfVVJMW2RvY10gPSAiVVJMIHRvIHNvdXJjZSBtaXJyb3IgdGhhdCB3aWxsIGJlIHVzZWQgYmVmb3JlIGZldGNoaW5nIGZyb20gb3JpZ2luYWwgU1JDX1VSSS4iCitTUEVDSUFMX1BLR1NVRkZJWFtkb2NdID0gIkEgbGlzdCBvZiBwcmVmaXhlcyBmb3IgUE4gdXNlZCBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB0byBjcmVhdGUgdmFyaWFudHMgb2YgcmVjaXBlcyBvciBwYWNrYWdlcy4gVGhlIGxpc3Qgc3BlY2lmaWVzIHRoZSBwcmVmaXhlcyB0byBzdHJpcCBvZmYgZHVyaW5nIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBzdWNoIGFzIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBCUE4gdmFyaWFibGUuIgorU1JDX1VSSVtkb2NdID0gIlRoZSBsaXN0IG9mIHNvdXJjZSBmaWxlcyAtIGxvY2FsIG9yIHJlbW90ZS4gVGhpcyB2YXJpYWJsZSB0ZWxscyB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB3aGF0IGJpdHMgdG8gcHVsbCBpbiBmb3IgdGhlIGJ1aWxkIGFuZCBob3cgdG8gcHVsbCB0aGVtIGluLiIKK1NSQ19VUklfT1ZFUlJJREVTX1BBQ0tBR0VfQVJDSFtkb2NdID0gIkJ5IGRlZmF1bHQsIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyB3aGV0aGVyIFNSQ19VUkkgY29udGFpbnMgZmlsZXMgdGhhdCBhcmUgbWFjaGluZS1zcGVjaWZpYy4gSWYgc28sIHRoZSBidWlsZCBzeXN0ZW0gYXV0b21hdGljYWxseSBjaGFuZ2VzIFBBQ0tBR0VfQVJDSC4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvICcwJyBkaXNhYmxlcyB0aGlzIGJlaGF2aW9yLiIKK1NSQ0RBVEVbZG9jXSA9ICJUaGUgZGF0ZSBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIG9ubHkgaWYgdGhlIHNvdXJjZSB3YXMgZmV0Y2hlZCBmcm9tIGEgU291cmNlIENvZGUgTWFuYWdlciAoU0NNKS4iCitTUkNQVltkb2NdID0gIlJldHVybnMgdGhlIHZlcnNpb24gc3RyaW5nIG9mIHRoZSBjdXJyZW50IHBhY2thZ2UuIFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gaGVscCBkZWZpbmUgdGhlIHZhbHVlIG9mIFBWLiIKK1NSQ1JFVltkb2NdID0gIlRoZSByZXZpc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgdXNlZCB0byBidWlsZCB0aGUgcGFja2FnZS4gVGhpcyB2YXJpYWJsZSBhcHBsaWVzIHRvIFN1YnZlcnNpb24sIEdpdCwgTWVyY3VyaWFsIGFuZCBCYXphYXIgb25seS4iCitTU1RBVEVfRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBmb3IgdGhlIHNoYXJlZCBzdGF0ZSBjYWNoZS4iCitTU1RBVEVfTUlSUk9SU1tkb2NdID0gIkNvbmZpZ3VyZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdG8gc2VhcmNoIG90aGVyIG1pcnJvciBsb2NhdGlvbnMgZm9yIHByZWJ1aWx0IGNhY2hlIGRhdGEgb2JqZWN0cyBiZWZvcmUgYnVpbGRpbmcgb3V0IHRoZSBkYXRhLiBZb3UgY2FuIHNwZWNpZnkgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSBvciBhIHJlbW90ZSBVUkwgc3VjaCBhcyBIVFRQIG9yIEZUUC4iCitTVEFHSU5HX0tFUk5FTF9ESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdpdGgga2VybmVsIGhlYWRlcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gYnVpbGQgb3V0LW9mLXRyZWUgbW9kdWxlcy4iCitTVEFNUFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYmFzZSBwYXRoIHVzZWQgdG8gY3JlYXRlIHJlY2lwZSBzdGFtcCBmaWxlcy4gVGhlIHBhdGggdG8gYW4gYWN0dWFsIHN0YW1wIGZpbGUgaXMgY29uc3RydWN0ZWQgYnkgZXZhbHVhdGluZyB0aGlzIHN0cmluZyBhbmQgdGhlbiBhcHBlbmRpbmcgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4iCitTVEFNUFNfRElSW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBiYXNlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBwbGFjZXMgc3RhbXBzLiIKK1NVTU1BUllbZG9jXSA9ICJUaGUgc2hvcnQgKDgwIGNoYXJhY3RlcnMgb3IgbGVzcykgc3VtbWFyeSBvZiB0aGUgYmluYXJ5IHBhY2thZ2UgZm9yIHBhY2thZ2luZyBzeXN0ZW1zIHN1Y2ggYXMgb3BrZywgcnBtIG9yIGRwa2cuIEJ5IGRlZmF1bHQsIFNVTU1BUlkgaXMgdXNlZCB0byBkZWZpbmUgdGhlIERFU0NSSVBUSU9OIHZhcmlhYmxlIGlmIERFU0NSSVBUSU9OIGlzIG5vdCBzZXQgaW4gdGhlIHJlY2lwZS4iCitTVk5ESVJbZG9jXSA9ICJUaGUgZGlyZWN0b3J5IHdoZXJlIFN1YnZlcnNpb24gY2hlY2tvdXRzIHdpbGwgYmUgc3RvcmVkLiIKK1NZU0xJTlVYX0RFRkFVTFRfQ09OU09MRVtkb2NdID0gIlNwZWNpZmllcyB0aGUga2VybmVsIGJvb3QgZGVmYXVsdCBjb25zb2xlLiIKK1NZU0xJTlVYX09QVFNbZG9jXSA9ICJMaXN0cyBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gYWRkIHRvIHRoZSBzeXNsaW51eCBmaWxlLiIKK1NZU0xJTlVYX1NFUklBTFtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIHNlcmlhbCBwb3J0IG9yIHR1cm5zIGl0IG9mZi4iCitTWVNMSU5VWF9TUExBU0hbZG9jXSA9ICJBbiAuTFNTIGZpbGUgdXNlZCBhcyB0aGUgYmFja2dyb3VuZCBmb3IgdGhlIFZHQSBib290IG1lbnUgd2hlbiB5b3UgYXJlIHVzaW5nIHRoZSBib290IG1lbnUuIgorU1lTTElOVVhfU0VSSUFMX1RUWVtkb2NdID0gIlNwZWNpZmllcyB0aGUgYWx0ZXJuYXRlIGNvbnNvbGU9dHR5Li4uIGtlcm5lbCBib290IGFyZ3VtZW50LiIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU1tkb2NdID0gIkEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gZXhlY3V0ZSBhZnRlciBmaWxlcyBhcmUgc3RhZ2VkIGludG8gdGhlIHN5c3Jvb3QuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSB1c2VkIHRvIGFwcGx5IGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBvbiB0aGUgc3RhZ2VkIGZpbGVzLCBvciB0byBzdGFnZSBhZGRpdGlvbmFsIGZpbGVzLiIKK1NZU1RFTURfQVVUT19FTkFCTEVbZG9jXSA9ICJGb3IgcmVjaXBlcyB0aGF0IGluaGVyaXQgdGhlIHN5c3RlbWQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHNlcnZpY2UgeW91IGhhdmUgc3BlY2lmaWVkIGluIFNZU1RFTURfU0VSVklDRSBzaG91bGQgYmUgc3RhcnRlZCBhdXRvbWF0aWNhbGx5IG9yIG5vdC4iCitTWVNURU1EX1BBQ0tBR0VTW2RvY10gPSAiRm9yIHJlY2lwZXMgdGhhdCBpbmhlcml0IHRoZSBzeXN0ZW1kIGNsYXNzLCB0aGlzIHZhcmlhYmxlIGxvY2F0ZXMgdGhlIHN5c3RlbWQgdW5pdCBmaWxlcyB3aGVuIHRoZXkgYXJlIG5vdCBmb3VuZCBpbiB0aGUgbWFpbiByZWNpcGUncyBwYWNrYWdlLiIKK1NZU1RFTURfU0VSVklDRVtkb2NdID0gIkZvciByZWNpcGVzIHRoYXQgaW5oZXJpdCB0aGUgc3lzdGVtZCBjbGFzcywgdGhpcyB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIHN5c3RlbWQgc2VydmljZSBuYW1lIGZvciBhIHBhY2thZ2UuIgorU1lTVklOSVRfRU5BQkxFRF9HRVRUWVNbZG9jXSA9ICJTcGVjaWZpZXMgd2hpY2ggdmlydHVhbCB0ZXJtaW5hbHMgc2hvdWxkIGJlIHJ1bm5pbmcgYSBnZXR0eSwgdGhlIGRlZmF1bHQgaXMgJzEnLiIKKworI1QKKworVFtkb2NdID0gIlRoaXMgdmFyaWFibGUgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IHdlcmUgQml0QmFrZSBwbGFjZXMgdGVtcG9yYXJ5IGZpbGVzLCB3aGljaCBjb25zaXN0IG1vc3RseSBvZiB0YXNrIGxvZ3MgYW5kIHNjcmlwdHMsIHdoZW4gYnVpbGRpbmcgYSBwYXJ0aWN1bGFyIHJlY2lwZS4iCitUQVJHRVRfQVJDSFtkb2NdID0gIlRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGRldmljZSBiZWluZyBidWlsdC4gVGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmVzOiBhcm0sIG1pcHMsIHBwYywgeDg2LCB4ODYtNjQuIgorVEFSR0VUX0NGTEFHU1tkb2NdID0gIkZsYWdzIHBhc3NlZCB0byB0aGUgQyBjb21waWxlciBmb3IgdGhlIHRhcmdldCBzeXN0ZW0uIFRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRoZSBzYW1lIGFzIENGTEFHUy4iCitUQVJHRVRfRlBVW2RvY10gPSAiU3BlY2lmaWVzIHRoZSBtZXRob2QgZm9yIGhhbmRsaW5nIEZQVSBjb2RlLiBGb3IgRlBVLWxlc3MgdGFyZ2V0cywgd2hpY2ggaW5jbHVkZSBtb3N0IEFSTSBDUFVzLCB0aGUgdmFyaWFibGUgbXVzdCBiZSBzZXQgdG8gJ3NvZnQnLiBJZiBub3QsIHRoZSBrZXJuZWwgZW11bGF0aW9uIGdldHMgdXNlZCwgd2hpY2ggcmVzdWx0cyBpbiBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuIgorVEFSR0VUX09TW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQncyBvcGVyYXRpbmcgc3lzdGVtLiIKK1RBUkdFVF9QUkVGSVhbZG9jXSA9ICJUaGUgcHJlZml4IGZvciB0aGUgY3Jvc3MtY29tcGlsZSB0b29sY2hhaW4gKGUuZy4gYXJtLWxpbnV4LSkuIgorVEFSR0VUX1NZU1tkb2NdID0gIlRoZSB0YXJnZXQgc3lzdGVtIGlzIGNvbXByaXNlZCBvZiBUQVJHRVRfQVJDSCxUQVJHRVRfVkVORE9SIGFuZCBUQVJHRVRfT1MuIgorVENMSUJDW2RvY10gPSAiU3BlY2lmaWVzIEdOVSBzdGFuZGFyZCBDIGxpYnJhcnkgKGxpYmMpIHZhcmlhbnQgdG8gdXNlIGR1cmluZyB0aGUgYnVpbGQgcHJvY2Vzcy4gWW91IGNhbiBzZWxlY3QgJ2dsaWJjJyBvciAndWNsaWJjJy4iCitUQ01PREVbZG9jXSA9ICJFbmFibGVzIGFuIGV4dGVybmFsIHRvb2xjaGFpbiAod2hlcmUgcHJvdmlkZWQgYnkgYW4gYWRkaXRpb25hbCBsYXllcikgaWYgc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAnZGVmYXVsdCcuIgorVEVTVF9JTUFHRVtkb2NdID0gIkVuYWJsZXMgdGVzdCBib290aW5nIG9mIHZpcnR1YWwgbWFjaGluZSBpbWFnZXMgdW5kZXIgdGhlIFFFTVUgZW11bGF0b3IgYWZ0ZXIgYW55IHJvb3QgZmlsZXN5c3RlbXMgYXJlIGNyZWF0ZWQgYW5kIHJ1bnMgdGVzdHMgYWdhaW5zdCB0aG9zZSBpbWFnZXMuIgorVEVTVF9RRU1VQk9PVF9USU1FT1VUW2RvY10gPSAiVGhlIHRpbWUgaW4gc2Vjb25kcyBhbGxvd2VkIGZvciBhbiBpbWFnZSB0byBib290IGJlZm9yZSBhdXRvbWF0ZWQgcnVudGltZSB0ZXN0cyBiZWdpbiB0byBydW4gYWdhaW5zdCBhbiBpbWFnZS4iCitURVNUX1NVSVRFU1tkb2NdID0gIkFuIG9yZGVyZWQgbGlzdCBvZiB0ZXN0cyAobW9kdWxlcykgdG8gcnVuIGFnYWluc3QgYW4gaW1hZ2Ugd2hlbiBwZXJmb3JtaW5nIGF1dG9tYXRlZCBydW50aW1lIHRlc3RpbmcuIgorVEVTVF9QT1dFUkNPTlRST0xfQ01EW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgdGhlIGNvbW1hbmQgdG8gdXNlIHRvIGNvbnRyb2wgdGhlIHBvd2VyIG9mIHRoZSB0YXJnZXQgbWFjaGluZSB1bmRlciB0ZXN0IgorVEVTVF9QT1dFUkNPTlRST0xfRVhUUkFfQVJHU1tkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQgaW4gVEVTVF9QT1dFUkNPTlRST0xfQ01EIgorVEVTVF9TRVJJQUxDT05UUk9MX0NNRFtkb2NdID0gIkZvciBhdXRvbWF0ZWQgaGFyZHdhcmUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBjb21tYW5kIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBzZXJpYWwgY29uc29sZSBvZiB0aGUgdGFyZ2V0IG1hY2hpbmUgdW5kZXIgdGVzdCIKK1RFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTW2RvY10gPSAiRm9yIGF1dG9tYXRlZCBoYXJkd2FyZSB0ZXN0aW5nLCBzcGVjaWZpZXMgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBjb21tYW5kIHNwZWNpZmllZCBpbiBURVNUX1NFUklBTENPTlRST0xfQ01EIgorVEVTVF9UQVJHRVRbZG9jXSA9ICJGb3IgYXV0b21hdGVkIHJ1bnRpbWUgdGVzdGluZywgc3BlY2lmaWVzIHRoZSBtZXRob2Qgb2YgZGVwbG95aW5nIHRoZSBpbWFnZSBhbmQgcnVubmluZyB0ZXN0cyBvbiB0aGUgdGFyZ2V0IG1hY2hpbmUiCitUSElTRElSW2RvY10gPSAiVGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgZmlsZSBCaXRCYWtlIGlzIGN1cnJlbnRseSBwYXJzaW5nIGlzIGxvY2F0ZWQuIgorVElNRVtkb2NdID0gIlRoZSB0aW1lIHRoZSBidWlsZCB3YXMgc3RhcnRlZCB1c2luZyBITVMgZm9ybWF0LiIKK1RNUERJUltkb2NdID0gIlRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBpdCBkb2VzIGl0cyB3b3JrIGJ1aWxkaW5nIGltYWdlcy4gQnkgZGVmYXVsdCwgdGhlIFRNUERJUiB2YXJpYWJsZSBpcyBuYW1lZCB0bXAgd2l0aGluIHRoZSBCdWlsZCBEaXJlY3RvcnkuIgorVE9PTENIQUlOX0hPU1RfVEFTS1tkb2NdID0gIlRoaXMgdmFyaWFibGUgbGlzdHMgcGFja2FnZXMgdGhlIE9wZW5FbWJlZGRlZCBidWlsZCBzeXN0ZW0gdXNlcyB3aGVuIGJ1aWxkaW5nIGFuIFNESywgd2hpY2ggY29udGFpbnMgYSBjcm9zcy1kZXZlbG9wbWVudCBlbnZpcm9ubWVudC4iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0tbZG9jXSA9ICJUaGlzIHZhcmlhYmxlIGxpc3RzIHBhY2thZ2VzIHRoZSBPcGVuRW1iZWRkZWQgYnVpbGQgc3lzdGVtIHVzZXMgd2hlbiBpdCBjcmVhdGVzIHRoZSB0YXJnZXQgcGFydCBvZiBhbiBTREssIHdoaWNoIGluY2x1ZGVzIGxpYnJhcmllcyBhbmQgaGVhZGVycy4iCitUT1BESVJbZG9jXSA9ICJUaGUgQnVpbGQgRGlyZWN0b3J5LiBCaXRCYWtlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGlzIHZhcmlhYmxlLiBUaGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSB1c2VzIHRoZSBCdWlsZCBEaXJlY3Rvcnkgd2hlbiBidWlsZGluZyBpbWFnZXMuIgorVFJBTlNMQVRFRF9UQVJHRVRfQVJDSFtkb2NdID0gIkEgc2FuaXRpemVkIHZlcnNpb24gb2YgVEFSR0VUX0FSQ0guIFRoaXMgdmFyaWFibGUgaXMgdXNlZCB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlIGlzIG5lZWRlZCBpbiBhIHZhbHVlIHdoZXJlIHVuZGVyc2NvcmVzIGFyZSBub3QgYWxsb3dlZC4iCitUVU5FX1BLR0FSQ0hbZG9jXSA9ICJUaGUgcGFja2FnZSBhcmNoaXRlY3R1cmUgdW5kZXJzdG9vZCBieSB0aGUgcGFja2FnaW5nIHN5c3RlbSB0byBkZWZpbmUgdGhlIGFyY2hpdGVjdHVyZSwgQUJJLCBhbmQgdHVuaW5nIG9mIG91dHB1dCBwYWNrYWdlcy4iCitUVU5FQUJJW2RvY10gPSAiQW4gdW5kZXJseWluZyBBQkkgdXNlZCBieSBhIHBhcnRpY3VsYXIgdHVuaW5nIGluIGEgZ2l2ZW4gdG9vbGNoYWluIGxheWVyLiBUaGlzIGZlYXR1cmUgYWxsb3dzIHByb3ZpZGVycyB1c2luZyBwcmVidWlsdCBsaWJyYXJpZXMgdG8gY2hlY2sgY29tcGF0aWJpbGl0eSBvZiBhIHR1bmluZyBhZ2FpbnN0IHRoZWlyIHNlbGVjdGlvbiBvZiBsaWJyYXJpZXMuIgorVFVORUFCSV9PVkVSUklERVtkb2NdID0gIklmIHNldCwgaWdub3JlcyBUVU5FQUJJX1dISVRFTElTVC4iCitUVU5FQUJJX1dISVRFTElTVFtkb2NdID0gIkEgd2hpdGVsaXN0IG9mIHBlcm1pc3NpYmxlIFRVTkVBQkkgdmFsdWVzLiAgSWYgdGhlIHZhcmlhYmxlIGlzIG5vdCBzZXQsIGFsbCB2YWx1ZXMgYXJlIGFsbG93ZWQuIgorVFVORUNPTkZMSUNUU1tkb2NdID0gIkxpc3Qgb2YgY29uZmxpY3RpbmcgZmVhdHVyZXMgZm9yIGEgZ2l2ZW4gZmVhdHVyZS4iCitUVU5FVkFMSURbZG9jXSA9ICJEZXNjcmlwdGlvbnMsIHN0b3JlZCBhcyBmbGFncywgb2YgdmFsaWQgdHVuaW5nIGZlYXR1cmVzLiIKKworI1UKKworVUJPT1RfQ09ORklHW2RvY10gPSAiQ29uZmlndXJlcyB0aGUgVUJPT1RfTUFDSElORSBhbmQgY2FuIGFsc28gZGVmaW5lIElNQUdFX0ZTVFlQRVMgZm9yIGluZGl2aWR1YWwgY2FzZXMuIgorVUJPT1RfRU5UUllQT0lOVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTE9BREFERFJFU1NbZG9jXSA9ICJTcGVjaWZpZXMgdGhlIGxvYWQgYWRkcmVzcyBmb3IgdGhlIFUtQm9vdCBpbWFnZS4iCitVQk9PVF9MT0NBTFZFUlNJT05bZG9jXSA9ICJBcHBlbmRzIGEgc3RyaW5nIHRvIHRoZSBuYW1lIG9mIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZSBVLUJvb3QgaW1hZ2UuIgorVUJPT1RfTUFDSElORVtkb2NdID0gIlNwZWNpZmllcyB0aGUgdmFsdWUgcGFzc2VkIG9uIHRoZSBtYWtlIGNvbW1hbmQgbGluZSB3aGVuIGJ1aWxkaW5nIGEgVS1Cb290IGltYWdlLiIKK1VCT09UX01BS0VfVEFSR0VUW2RvY10gPSAiU3BlY2lmaWVzIHRoZSB0YXJnZXQgY2FsbGVkIGluIHRoZSBNYWtlZmlsZS4iCitVQk9PVF9TVUZGSVhbZG9jXSA9ICJQb2ludHMgdG8gdGhlIGdlbmVyYXRlZCBVLUJvb3QgZXh0ZW5zaW9uLiIKK1VCT09UX1RBUkdFVFtkb2NdID0gIlNwZWNpZmllcyB0aGUgdGFyZ2V0IHVzZWQgZm9yIGJ1aWxkaW5nIFUtQm9vdC4iCitVU0VfREVWRlNbZG9jXSA9ICJXaGVuIGJ1aWxkaW5nIGltYWdlcywgc3BlY2lmaWVzIHRvIHBvcHVsYXRlIG9yIG5vdCAvZGV2LiBUaGlzIHZhcmlhYmxlIGRlZmF1bHRzIHRvICcxJyAobGVhdmUgZGlyZWN0b3J5IGVtcHR5LCBzdXJlbHkgYmVjYXVzZSBkZXZ0bXBmcyBkbyB0aGUgam9iKS4gU2V0IGl0IHRvICcwJyB0byB1c2UgbWFrZWRldnMgKG9yIGNvbnNpZGVyIHVzaW5nIGEgY3VzdG9tIGZpbGUgd2l0aCBJTUFHRV9ERVZJQ0VfVEFCTEVTKS4iCitVU0VSX0NMQVNTRVNbZG9jXSA9ICJMaXN0IG9mIGFkZGl0aW9uYWwgY2xhc3NlcyB0byB1c2Ugd2hlbiBidWlsZGluZyBpbWFnZXMgdGhhdCBlbmFibGUgZXh0cmEgZmVhdHVyZXMuIgorVVNFUkFERF9QQUNLQUdFU1tkb2NdID0gIldoZW4gYSByZWNpcGUgaW5oZXJpdHMgdGhlIHVzZXJhZGQgY2xhc3MsIHRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIHRoZSBpbmRpdmlkdWFsIHBhY2thZ2VzIHdpdGhpbiB0aGUgcmVjaXBlIHRoYXQgcmVxdWlyZSB1c2VycyBhbmQvb3IgZ3JvdXBzIHRvIGJlIGFkZGVkLiIKK1VTRVJBRERfUEFSQU1bZG9jXSA9ICJXaGVuIGEgcmVjaXBlIGluaGVyaXRzIHRoZSB1c2VyYWRkIGNsYXNzLCB0aGlzIHZhcmlhYmxlIHNwZWNpZmllcyBmb3IgYSBwYWNrYWdlIHdoYXQgcGFyYW1ldGVycyBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1c2VyYWRkIGNvbW1hbmQgaWYgeW91IHdpc2ggdG8gYWRkIGEgdXNlciB0byB0aGUgc3lzdGVtIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkLiIKKworI1cKKworV0FSTl9RQVtkb2NdID0gIlNwZWNpZmllcyB0aGUgcXVhbGl0eSBhc3N1cmFuY2UgY2hlY2tzIHdob3NlIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBhcyB3YXJuaW5ncyBieSB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbS4iCitXT1JLRElSW2RvY10gPSAiVGhlIHBhdGhuYW1lIG9mIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgT3BlbkVtYmVkZGVkIGJ1aWxkIHN5c3RlbSBidWlsZHMgYSByZWNpcGUuIFRoaXMgZGlyZWN0b3J5IGlzIGxvY2F0ZWQgd2l0aGluIHRoZSBUTVBESVIgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgY2hhbmdlcyBhcyBkaWZmZXJlbnQgcGFja2FnZXMgYXJlIGJ1aWx0LiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9sYXllci5jb25mIGIvbWV0YS9jb25mL2xheWVyLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MDAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9sYXllci5jb25mCkBAIC0wLDAgKzEsNjAgQEAKKyMgV2UgaGF2ZSBhIGNvbmYgYW5kIGNsYXNzZXMgZGlyZWN0b3J5LCBhZGQgdG8gQkJQQVRICitCQlBBVEggLj0gIjoke0xBWUVSRElSfSIKKyMgV2UgaGF2ZSByZWNpcGVzLSogZGlyZWN0b3JpZXMsIGFkZCB0byBCQkZJTEVTCitCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiIgorCitCQkZJTEVfQ09MTEVDVElPTlMgKz0gImNvcmUiCitCQkZJTEVfUEFUVEVSTl9jb3JlID0gIl4ke0xBWUVSRElSfS8iCitCQkZJTEVfUFJJT1JJVFlfY29yZSA9ICI1IgorCisjIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW5jcmVtZW50ZWQgb24gc2lnbmlmaWNhbnQgY2hhbmdlcyB0aGF0IHdpbGwKKyMgY2F1c2UgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvdGhlciBsYXllcnMKK0xBWUVSVkVSU0lPTl9jb3JlID0gIjYiCisKK0JCTEFZRVJTX0xBWUVSSU5ERVhfTkFNRV9jb3JlID0gIm9wZW5lbWJlZGRlZC1jb3JlIgorCisjIFNldCBhIHZhcmlhYmxlIHRvIGdldCB0byB0aGUgdG9wIG9mIHRoZSBtZXRhZGF0YSBsb2NhdGlvbgorQ09SRUJBU0UgPSAnJHtAb3MucGF0aC5ub3JtcGF0aCgiJHtMQVlFUkRJUn0vLi4vIil9JworCisjIG9wa2ctdXRpbHMgaXMgZm9yIHVwZGF0ZS1hbHRuZXJuYXRpdmVzIDooCitTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSArPSAiIFwKKyAgc3lzdmluaXQtaW5pdHRhYiBcCisgIHNoYWRvdy1zZWN1cmV0dHkgXAorICBvcGtnLWFyY2gtY29uZmlnIFwKKyAgbmV0YmFzZSBcCisgIGluaXQtaWZ1cGRvd24gXAorICBjb25ubWFuLWNvbmYgXAorICBmb3JtZmFjdG9yIFwKKyAgeHNlcnZlci14Zjg2LWNvbmZpZyBcCisgIHBvaW50ZXJjYWwgXAorICBwb2ludGVyY2FsLXhpbnB1dCBcCisgIGJhc2UtZmlsZXMgXAorICBrZXltYXBzIFwKKyAgdWRldi1leHRyYWNvbmYgXAorICBwYWNrYWdlZ3JvdXAteDExLXhzZXJ2ZXIgXAorICBzeXN0ZW1kLXNlcmlhbGdldHR5IFwKKyAgaW5pdHNjcmlwdHMgXAorICBzaGFkb3cgXAorICBzaGFkb3ctc3lzcm9vdCBcCisgIGJhc2UtcGFzc3dkIFwKKyAgb3BrZy11dGlscyBcCisiCisKK1NJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMgKz0gIiBcCisgIGdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfS0+Z2xpYmMgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPm11c2wgXAorICBnY2MtY3Jvc3MtJHtUQVJHRVRfQVJDSH0tPnVjbGliYyBcCisgIGdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfS0+bGludXgtbGliYy1oZWFkZXJzIFwKKyAgcHBwLWRpYWxpbi0+cHBwIFwKKyAgcmVzb2x2Y29uZi0+YmFzaCBcCisgIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLT5wZXJsIFwKKyAgaW5pdHJhbWZzLWZyYW1ld29yay0+YnVzeWJveCBcCisgIGluaXRyYW1mcy1mcmFtZXdvcmstPnN5c3RlbWQgXAorICBpbml0cmFtZnMtZnJhbWV3b3JrLT51ZGV2IFwKKyAgbGliZXJhdGlvbi1mb250cy0+Zm9udGNvbmZpZyBcCisgIGdub21lLWljb24tdGhlbWUtPmxpYnJzdmcgXAorICBmb250LWFsaWFzLT5mb250LXV0aWwgXAorICB3ZXN0b24taW5pdC0+d2VzdG9uIFwKKyAgd2VzdG9uLWluaXQtPmtiZCBcCisiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9saWNlbnNlcy5jb25mIGIvbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxN2M0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9saWNlbnNlcy5jb25mCkBAIC0wLDAgKzEsMTg5IEBACisjIFRoZXNlIGFyZW4ndCBhY3R1YWxseSB1c2VkIGFueXdoZXJlIHRoYXQgSSBjYW4gdGVsbAorIyBUaGV5IG1heSBiZSBpbiB0aGUgZnV0dXJlIChvciBhcmUgdXNlZCBieSBzb21lb25lIGVsc2UKKyMgRm9yIGNvbXBsZXRpb24gc2FrZSwgSSd2ZSB1cGRhdGVkIHRoZW0KK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBQUwgQWRvYmUgQUZMLTEuMiBBRkwtMi4wIEFGTC0yLjEgQUZMLTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBR1BMLTMuMCBBTlRMUi1QRCBBcGFjaGUtMS4wIEFwYWNoZS0xLjEgQXBhY2hlLTIuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJBUEwtMS4wIEFQU0wtMS4wIEFQU0wtMS4xIEFQU0wtMS4yIEFQU0wtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkFydGlzdGljLTEuMCBBcnRpc3RpYy0yLjAgQml0c3RyZWFtVmVyYSBCU0QiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQlNELTItQ2xhdXNlIEJTRC0zLUNsYXVzZSBCU0QtNC1DbGF1c2UgQlNMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQVRPU0wtMS4xIENDMC0xLjAgQ0MtQlktMS4wIENDLUJZLTIuMCBDQy1CWS0yLjUiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0MtQlktMy4wIENDLUJZLU5DLTEuMCBDQy1CWS1OQy0yLjAgQ0MtQlktTkMtMi41IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5DLTMuMCBDQy1CWS1OQy1ORC0xLjAgQ0MtQlktTkMtTkQtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5DLU5ELTIuNSBDQy1CWS1OQy1ORC0zLjAgQ0MtQlktTkMtU0EtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5DLVNBLTIuMCBDQy1CWS1OQy1TQS0yLjUgQ0MtQlktTkMtU0EtMy4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNDLUJZLU5ELTEuMCBDQy1CWS1ORC0yLjAgQ0MtQlktTkQtMi41IENDLUJZLU5ELTMuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJDQy1CWS1TQS0xLjAgQ0MtQlktU0EtMi4wIENDLUJZLVNBLTIuNSBDQy1CWS1TQS0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiQ0RETC0xLjAgQ0VDSUxMLTEuMCBDRUNJTEwtMi4wIENFQ0lMTC1CIENFQ0lMTC1DIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkNsQXJ0aXN0aWMgQ1BBTC0xLjAgQ1BMLTEuMCBDVUEtT1BMLTEuMCBEU1NTTCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJFQ0wtMS4wIEVDTC0yLjAgZUNvcy0yLjAgRURMLTEuMCBFRkwtMS4wIEVGTC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRWxmdXRpbHMtRXhjZXB0aW9uIEVudGVzc2EgRVBMLTEuMCBFcmxQTC0xLjEiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRVVEYXRhZ3JpZCBFVVBMLTEuMCBFVVBMLTEuMSBGYWlyIEZyYW1ld29yeC0xLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiRnJlZVR5cGUgR0ZETC0xLjEgR0ZETC0xLjIgR0ZETC0xLjMgR1BMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMi4wIEdQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMC13aXRoLWNsYXNzcGF0aC1leGNlcHRpb24iCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkdQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIEdQTC0zLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJnU09BUC0xIGdTT0FQLTEuM2IgSFBORCBJUEEgSVBMLTEuMCBJU0MgTEdQTC0yLjAiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTEdQTC0yLjEgTEdQTC0zLjAgTGlicG5nIExQTC0xLjAyIExQUEwtMS4wIExQUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIkxQUEwtMS4yIExQUEwtMS4zYyBNaXJPUyBNSVQgTW90b3NvdG8gTVBMLTEuMCIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJNUEwtMS4xIE1TLVBMIE1TLVJMIE11bHRpY3MgTkFTQS0xLjMgTmF1bWFuIE5DU0EiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiTkdQTCBOb2tpYSBOUE9TTC0zLjAgTlRQIE9BU0lTIE9DTEMtMi4wIE9EYkwtMS4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk9GTC0xLjEgT0dUU0wgT0xEQVAtMi44IE9wZW5TU0wgT1NMLTEuMCBPU0wtMi4wIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIk9TTC0zLjAgUEQgUEhQLTMuMCBQb3N0Z3JlU1FMIFByb3ByaWV0YXJ5IgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlB5dGhvbi0yLjAgUVBMLTEuMCBSSGVDb3MtMSBSSGVDb3MtMS4xIFJQTC0xLjUiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiUlBTTC0xLjAgUlNDUEwgUnVieSBTQVgtUEQgU0dJLTEgU2ltcGxlLTIuMCBTbGVlcHljYXQiCitTUkNfRElTVFJJQlVURV9MSUNFTlNFUyArPSAiU1BMLTEuMCBTdWdhckNSTS0xIFN1Z2FyQ1JNLTEuMS4zIFVDQiBWU0wtMS4wIFczQyIKK1NSQ19ESVNUUklCVVRFX0xJQ0VOU0VTICs9ICJXYXRjb20tMS4wIFdYd2luZG93cyBYRnJlZTg2LTEuMCBYRnJlZTg2LTEuMSBYbmV0IFhTTCBZUEwtMS4xIgorU1JDX0RJU1RSSUJVVEVfTElDRU5TRVMgKz0gIlppbWJyYS0xLjMgWmxpYiBaUEwtMS4xIFpQTC0yLjAgWlBMLTIuMSIKKworIyBTdGFuZGFyZHMgYXJlIGdyZWF0ISBFdmVyeW9uZSBoYXMgdGhlaXIgb3duLiBJbiBhbiBlZmZvcnQgdG8gc3RhbmRhcmRpemUgbGljZW5zaW5nCisjIG5hbWVzLCBjb21tb24tbGljZW5zZXMgd2lsbCB1c2UgdGhlIFNQRFggc3RhbmRhcmQgbGljZW5zZSBuYW1lcy4gSW4gb3JkZXIgdG8gbm90CisjIGJyZWFrIHRoZSBub24tc3RhbmRhcmRpemVkIGxpY2Vuc2UgbmFtZXMgdGhhdCB3ZSBmaW5kIGluIExJQ0VOU0UsIHdlJ2xsIHNldAorIyB1cCBhIGJ1bmNoIG9mIFZhckZsYWdzIHRvIGFjY29tb2RhdGUgbm9uLVNQRFggbGljZW5zZSBuYW1lcy4KKyMKKyMgV2Ugc2hvdWxkIHJlYWxseSBkaXNjdXNzIHN0YW5kYXJkaXppbmcgdGhpcyBmaWVsZCwgYnV0IHRoYXQncyBhIGxvbmdlciB0ZXJtIGdvYWwuCisjIEZvciBub3csIHdlIGNhbiBkbyB0aGlzIGFuZCBpdCBzaG91bGQgZ3JhYiB0aGUgbW9zdCBjb21tb24gTElDRU5TRSBuYW1pbmcgdmFyaWF0aW9ucy4KKyMKKyMgV2Ugc2hvdWxkIE5FVkVSIGhhdmUgYSBHUEwvTEdQTCB3aXRob3V0IGEgdmVyc2lvbiEhISEKKyMgQW55IG1hcHBpbmcgdG8gTVBML0xHUEwvR1BMIHNob3VsZCBiZSBmaXhlZAorCisjIEFHUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbQUdQTC0zXSA9ICJBR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0FHUEx2M10gPSAiQUdQTC0zLjAiCitTUERYTElDRU5TRU1BUFtBR1BMdjMuMF0gPSAiQUdQTC0zLjAiCisKKyMgR1BMIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0dQTC0xXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjFdID0gIkdQTC0xLjAiCitTUERYTElDRU5TRU1BUFtHUEx2MS4wXSA9ICJHUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbR1BMLTJdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEx2Ml0gPSAiR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYyLjBdID0gIkdQTC0yLjAiCitTUERYTElDRU5TRU1BUFtHUEwtM10gPSAiR1BMLTMuMCIKK1NQRFhMSUNFTlNFTUFQW0dQTHYzXSA9ICJHUEwtMy4wIgorU1BEWExJQ0VOU0VNQVBbR1BMdjMuMF0gPSAiR1BMLTMuMCIKKworI0xHUEwgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbTEdQTHYyXSA9ICJMR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0xHUEx2Mi4wXSA9ICJMR1BMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0xHUEwyLjFdID0gIkxHUEwtMi4xIgorU1BEWExJQ0VOU0VNQVBbTEdQTHYyLjFdID0gIkxHUEwtMi4xIgorU1BEWExJQ0VOU0VNQVBbTEdQTHYzXSA9ICJMR1BMLTMuMCIKKworI01QTCB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtNUEwtMV0gPSAiTVBMLTEuMCIKK1NQRFhMSUNFTlNFTUFQW01QTHYxXSA9ICJNUEwtMS4wIgorU1BEWExJQ0VOU0VNQVBbTVBMdjEuMV0gPSAiTVBMLTEuMSIKK1NQRFhMSUNFTlNFTUFQW01QTHYyXSA9ICJNUEwtMi4wIgorCisjTUlUIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW01JVC1YXSA9ICJNSVQiCitTUERYTElDRU5TRU1BUFtNSVQtc3R5bGVdID0gIk1JVCIKKworI09wZW5zc2wgdmFyaWF0aW9ucworU1BEWExJQ0VOU0VNQVBbb3BlbnNzbF0gPSAiT3BlblNTTCIKKworI1B5dGhvbiB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtQU0ZdID0gIlB5dGhvbi0yLjAiCitTUERYTElDRU5TRU1BUFtQU0Z2Ml0gPSAiUHl0aG9uLTIuMCIKK1NQRFhMSUNFTlNFTUFQW1B5dGhvbi0yXSA9ICJQeXRob24tMi4wIgorCisjQXBhY2hlIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0FwYWNoZXYyXSA9ICJBcGFjaGUtMi4wIgorU1BEWExJQ0VOU0VNQVBbQXBhY2hlLTJdID0gIkFwYWNoZS0yLjAiCisKKyNBcnRpc3RpYyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBcnRpc3RpY3YxXSA9ICJBcnRpc3RpYy0xLjAiCitTUERYTElDRU5TRU1BUFtBcnRpc3RpYy0xXSA9ICJBcnRpc3RpYy0xLjAiCisKKyNBY2FkZW1pYyB2YXJpYXRpb25zCitTUERYTElDRU5TRU1BUFtBRkwtMl0gPSAiQUZMLTIuMCIKK1NQRFhMSUNFTlNFTUFQW0FGTC0xXSA9ICJBRkwtMS4yIgorU1BEWExJQ0VOU0VNQVBbQUZMdjJdID0gIkFGTC0yLjAiCitTUERYTElDRU5TRU1BUFtBRkx2MV0gPSAiQUZMLTEuMiIKKworI090aGVyIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW0VQTHYxLjBdID0gIkVQTC0xLjAiCisKKyNTaWxpY29uIEdyYXBoaWNzIHZhcmlhdGlvbnMKK1NQRFhMSUNFTlNFTUFQW1NHSXYxXSA9ICJTR0ktMSIKKworIyBBZGRpdGlvbmFsIGxpY2Vuc2UgZGlyZWN0b3JpZXMuIEFkZCB5b3VyIGN1c3RvbSBsaWNlbnNlcyBkaXJlY3RvcmllcyB0aGlzIHBhdGguCisjIExJQ0VOU0VfUEFUSCArPSAiJHtDT1JFQkFTRX0vY3VzdG9tLWxpY2Vuc2VzIgorCisjIFNldCBpZiB5b3Ugd2FudCB0aGUgbGljZW5zZS5tYW5pZmVzdCBjb3BpZWQgdG8gdGhlIGltYWdlCisjQ09QWV9MSUNfTUFOSUZFU1QgPSAiMSIKKworIyBJZiB5b3Ugd2FudCB0aGUgcGtnIGxpY2Vuc2VzIGNvcGllZCBvdmVyIGFzIHdlbGwgeW91IG11c3Qgc2V0CisjIGJvdGggQ09QWV9MSUNfTUFOSUZFU1QgYW5kIENPUFlfTElDX0RJUlMKKyNDT1BZX0xJQ19ESVJTID0gIjEiCisKKyMjIFNQRFggdGVtcG9yYXJ5IGRpcmVjdG9yeQorU1BEWF9URU1QX0RJUiA9ICIke1dPUktESVJ9L3NwZHhfdGVtcCIKK1NQRFhfTUFOSUZFU1RfRElSID0gIi9ob21lL3lvY3RvL2Zvc3NvbG9neV9zY2FucyIKKworIyMgU1BEWCBGb3JtYXQgaW5mbworU1BEWF9WRVJTSU9OID0gIlNQRFgtMS4xIgorREFUQV9MSUNFTlNFID0gIkNDMC0xLjAiCisKKyMjIEZvc3NvbG9neSBzY2FuIGluZm9ybWF0aW9uCisjIFlvdSBjYW4gc2V0IG9wdGlvbiB0byBjb250cm9sIGlmIHRoZSBjb3B5cmlnaHQgaW5mb3JtYXRpb24gd2lsbCBiZSBza2lwcGVkCisjIGR1cmluZyB0aGUgaWRlbnRpZmljYXRpb24gcHJvY2Vzcy4KKyMKKyMgSXQgaXMgZGVmaW5lZCBhcyBbRk9TU19DT1BZUklHSFRdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYuCisjIEZPU1NfQ09QWVJJR0hUID0gInRydWUiCisjICAgTk8gY29weXJpZ2h0IHdpbGwgYmUgcHJvY2Vzc2VkLiBUaGF0IG1lYW5zIG9ubHkgbGljZW5zZSBpbmZvcm1hdGlvbiB3aWxsIGJlCisjICAgaWRlbnRpZmllZCBhbmQgb3V0cHV0IHRvIFNQRFggZmlsZQorIyBGT1NTX0NPUFlSSUdIVCA9ICJmYWxzZSIKKyMgICBDb3B5cmlnaHQgd2lsbCBiZSBpZGVudGlmaWVkIGFuZCBvdXRwdXQgdG8gU1BEWCBmaWxlIGFsb25nIHdpdGggbGljZW5zZQorIyAgIGluZm9ybWF0aW9uLiBUaGUgcHJvY2VzcyB3aWxsIHRha2UgbW9yZSB0aW1lIHRoYW4gbm90IHByb2Nlc3NpbmcgY29weXJpZ2h0CisjICAgaW5mb3JtYXRpb24uCisjCisKK0ZPU1NfTk9fQ09QWVJJR0hUID0gInRydWUiCisKKyMgQSBvcHRpb24gZGVmaW5lZCBhc1tGT1NTX1JFQ1VSU0lWRV9VTlBBQ0tdIGluIC4vbWV0YS9jb25mL2xpY2Vuc2VzLmNvbmYuIGlzCisjIHVzZWQgdG8gY29udHJvbCBpZiBGT1NTb2xvZ3kgc2VydmVyIG5lZWQgcmVjdXJzaXZlbHkgdW5wYWNrIHRhci5neiBmaWxlIHdoaWNoCisjIGlzIHNlbnQgZnJvbSBkb19zcGR4IHRhc2suCisjCisjIEZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJmYWxzZSI6CisjICAgIEZPU1NvbG9neSBzZXJ2ZXIgZG9lcyBOT1QgcmVjdXJzaXZlbHkgdW5wYWNrLiBJbiB0aGUgY3VycmVudCByZWxlYXNlLCB0aGlzCisjICAgIGlzIHRoZSBkZWZhdWx0IGNob2ljZSBiZWNhdXNlIHJlY3Vyc2l2ZWx5IHVucGFjayB3aWxsIG5vdCBuZWNlc3NhcmlseSBicmVhaworIyAgICBkb3duIG9yaWdpbmFsIGNvbXByZXNzZWQgZmlsZXMuCisjIEZPU1NfUkVDVVJTSVZFX1VOUEFDSyA9ICJ0cnVlIjoKKyMgICAgRk9TU29sb2d5IHNlcnZlciByZWN1cnNpdmVseSB1bnBhY2sgY29tcG9uZW50cy4KKyMKKworRk9TU19SRUNVUlNJVkVfVU5QQUNLID0gImZhbHNlIgorCisjIEFuIG9wdGlvbiBkZWZpbmVkIGFzIFtGT1NTX0ZVTExfU1BEWF0gaW4gLi9tZXRhL2NvbmYvbGljZW5zZXMuY29uZiBpcyB1c2VkIHRvCisjIGNvbnRyb2wgd2hhdCBraW5kIG9mIFNQRFggb3V0cHV0IHRvIGdldCBmcm9tIHRoZSBGT1NTb2xvZ3kgc2VydmVyLgorIworIyBGT1NTX0ZVTExfU1BEWCA9ICJ0cnVlIjoKKyMgICBUZWxsIEZPU1NvbG9neSBzZXJ2ZXIgdG8gcmV0dXJuIGZ1bGwgU1BEWCBvdXRwdXQsIGxpa2UgaWYgdGhlIHByb2dyYW0gd2FzCisjICAgcnVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhpcyBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZ2V0IGxpY2Vuc2UgcmVmcyBmb3IKKyMgICB0aGUgZnVsbCBwYWNrYWdlIHJhdGhlciB0aGFuIGluZGl2aWR1YWwgZmlsZXMgb25seS4KKyMKKyMgRk9TU19GVUxMX1NQRFggPSAiZmFsc2UiOgorIyAgIFRlbGwgRk9TU29sb2d5IHRvIG9ubHkgcHJvY2VzcyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciBmaWxlcy4gQWxsIHBhY2thZ2UKKyMgICBsaWNlbnNlIHRhZ3MgaW4gdGhlIHJlcG9ydCB3aWxsIGJlICJOT0FTU0VSVElPTiIKKyMKKworRk9TU19GVUxMX1NQRFggPSAidHJ1ZSIKKworIyBGT1NTb2xvZ3lTUERYIGluc3RhbmNlIHNlcnZlci4gaHR0cDovL2xvY2FsaG9zdC9yZXBvIGlzIHRoZSBkZWZhdWx0CisjIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBmb3IgRk9TU29sb2d5LgorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBGT1NTb2xvZ3lTUERYIGNvbW1hbmRsaW5lOgorIyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGR4LXRvb2xzL2Zvc3NvbG9neS1zcGR4L3dpa2kvRm9zc29sb2d5LVNQRFgtV2ViLUFQSQorIworCitGT1NTX0JBU0VfVVJMID0gImh0dHA6Ly9sb2NhbGhvc3QvcmVwby8/bW9kPXNwZHhfbGljZW5zZV9vbmNlIgorRk9TU19TRVJWRVIgPSAiJHtGT1NTX0JBU0VfVVJMfSZmdWxsU1BEWEZsYWc9JHtGT1NTX0ZVTExfU1BEWH0mbm9Db3B5cmlnaHQ9JHtGT1NTX05PX0NPUFlSSUdIVH0mcmVjdXJzaXZlVW5wYWNrPSR7Rk9TU19SRUNVUlNJVkVfVU5QQUNLfSIKKworRk9TU19XR0VUX0ZMQUdTID0gIi1xTyAtIC0tbm8tY2hlY2stY2VydGlmaWNhdGUgLS10aW1lb3V0PTAiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUtc2RrL2k1ODYuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFhY2NlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNTg2LmNvbmYKQEAgLTAsMCArMSwzIEBACitTREtfQVJDSCA9ICJpNTg2IgorU0RLX0NDX0FSQ0ggPSAiLW1hcmNoPWk1ODYiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lLXNkay9pNjg2LmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGI0NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsvaTY4Ni5jb25mCkBAIC0wLDAgKzEsMiBAQAorU0RLX0FSQ0ggPSAiaTY4NiIKK1NES19DQ19BUkNIID0gIi1tYXJjaD1pNjg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUtc2RrL3g4Nl82NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMmQ2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS1zZGsveDg2XzY0LmNvbmYKQEAgLTAsMCArMSBAQAorU0RLX0FSQ0ggPSAieDg2XzY0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYxMzBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9SRUFETUUKQEAgLTAsMCArMSwxMDAgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgLSBJbml0aWFsIFJldmlzaW9uCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KK1RoZSBpbmRpdmlkdWFsIENQVSwgYW5kIEFCSSB0dW5pbmdzIGFyZSBjb250YWluZWQgaW4gdGhpcyBkaXJlY3RvcnkuICBBCitudW1iZXIgb2YgbG9jYWwgYW5kIGdsb2JhbCB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgd2F5IHRoZQordHVuaW5ncyBhcmUgc2V0dXAgYW5kIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIgdG8gc3BlY2lmeSBhbiBvcHRpbWl6ZWQKK2NvbmZpZ3VyYXRpb24uCisKK1RoZSBmb2xsb3dpbmcgaXMgYnJpZWYgc3VtbWFyeSBvZiB0aGUgZ2VuZXJpYyBjb21wb25lbnRzIHRoYXQgYXJlIHVzZWQKK2luIHRoZXNlIHR1bmluZ3MuCisKK0FWQUlMVFVORVMgLSBUaGlzIGlzIGEgbGlzdCBvZiBhbGwgb2YgdGhlIHR1bmluZyBkZWZpbml0aW9ucyBjdXJyZW50bHkKK2F2YWlsYWJsZSBpbiB0aGUgc3lzdGVtLiAgTm90IGFsbCB0dW5lcyBpbiB0aGlzIGxpc3QgbWF5IGJlIGNvbXBhdGlibGUKK3dpdGggdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbiwgb3IgZWFjaCBvdGhlciBpbiBhIG11bHRpbGliCitjb25maWd1cmF0aW9uLiAgRWFjaCB0dW5pbmcgZmlsZSBjYW4gYWRkIHRvIHRoaXMgbGlzdCB1c2luZyAiKz0iLCBidXQKK3Nob3VsZCBuZXZlciByZXBsYWNlIHRoZSBsaXN0IHVzaW5nICI9Ii4KKworREVGQVVMVFRVTkUgLSBUaGlzIHNwZWNpZmllcyB0aGUgdHVuZSB0byB1c2UgZm9yIGEgcGFydGljdWxhciBidWlsZC4KK0VhY2ggdHVuZSBzaG91bGQgc3BlY2lmeSBhIHJlYXNvbmFibGUgZGVmYXVsdCwgd2hpY2ggY2FuIGJlIG92ZXJyaWRlbiBieQorYSBtYWNoaW5lIG9yIG11bHRpbGliIGNvbmZpZ3VyYXRpb24uICBUaGUgc3BlY2lmaWVkIHR1bmUgbXVzdCBiZSBsaXN0ZWQKK2luIHRoZSBBVkFJTFRVTkVTLgorCitUVU5FVkFMSURbZmVhdHVyZV0gLSBUaGUgPGZlYXR1cmU+IGlzIGRlZmluZWQgd2l0aCBhIGh1bWFuIHJlYWRhYmxlCitleHBsYW5hdGlvbiBmb3Igd2hhdCBpdCBkb2VzLiAgQWxsIGFyY2hpdGVjdHVyYWwsIGNwdSwgYWJpLCBldGMgdHVuaW5nCitmZWF0dXJlcyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgVFVORVZBTElELgorCitUVU5FQ09ORkxJQ1RTW2ZlYXR1cmVdIC0gQSBsaXN0IG9mIGZlYXR1cmVzIHdoaWNoIGNvbmZsaWN0IHdpdGggPGZlYXR1cmU+LgorTmV3IHNhbml0eSBjaGVja3Mgd2lsbCB0cnkgdG8gcmVqZWN0IGNvbWJpbmF0aW9ucyBpbiB3aGljaCBhIHNpbmdsZQordHVuaW5nIGVuZHMgdXAgd2l0aCBmZWF0dXJlcyB3aGljaCBjb25mbGljdCB3aXRoIGVhY2ggb3RoZXIuCisKK1RVTkVfRkVBVFVSRVMgLSBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZGVmaW5lZCBhcyBUVU5FX0ZFQVRVUkVTX3R1bmUtPHR1bmU+LgorU2VlIFRVTkVfRkVBVFVSRVNfdHVuZS08dHVuZT4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1RVTkVfRkVBVFVSRVNfdHVuZS08dHVuZT4gLSBTcGVjaWZ5IHRoZSBmZWF0dXJlcyB1c2VkIHRvIGRlc2NyaWJlIGEKK3NwZWNpZmljIHR1bmUuICBUaGlzIGlzIGEgbGlzdCBvZiBmZWF0dXJlcyB0aGF0IGEgdHVuZSBzdXBwb3J0LCBlYWNoCitmZWF0dXJlIG11c3QgYmUgaW4gdGhlIFRVTkVWQUxJRCBsaXN0LiAgTm90ZTogdGhlIHR1bmUgYW5kIGEgZ2l2ZW4KK2ZlYXR1cmUgbmFtZSBtYXkgYmUgdGhlIHNhbWUsIGJ1dCB0aGV5IGhhdmUgZGlmZmVyZW50IHB1cnBvc2VzLiAgT25seQorZmVhdHVyZXMgbWF5IGJlIHVzZWQgdG8gY2hhbmdlIGJlaGF2aW9yLCB3aGlsZSB0dW5lcyBhcmUgdXNlZCB0bworZGVzY3JpYmUgYW4gb3ZlcmFsbCBzZXQgb2YgZmVhdHVyZXMuCisKK0FCSUVYVEVOU0lPTiAtIEFuIEFCSSBleHRlbnNpb24gbWF5IGJlIHNwZWNpZmllZCBieSBhIHNwZWNpZmljIGZlYXR1cmUKK29yIG90aGVyIHR1bmluZyBzZXR0aW5nLCBzdWNoIGFzIFRBUkdFVF9GUFUuICBBbnkgQUJJIGV4dGVuc2lvbnMgZWl0aGVyCituZWVkIHRvIGJlIGRlZmluZWQgaW4gdGhlIGFyY2hpdGVjdHVyZXMgYmFzZSBhcmNoIGZpbGUsIGkuZS4KK0FCSUVYVEVOU0lPTiA9ICJlYWJpIiBpbiB0aGUgYXJtIGNhc2UsIG9yIGFwcGVuZGVkIHRvIGluIHNwZWNpZmljIHR1bmUKK2ZpbGVzIHdpdGggYSAiLj0iLiAgU3BhY2VzIGFyZSBub3QgYWxsb3dlZCBpbiB0aGlzIHZhcmlhYmxlLgorCitUVU5FX0NDQVJHUyAtIFNldHVwIHRoZSBjZmxhZ3MgYmFzZWQgb24gdGhlIFRVTkVfRkVBVFVSRVMgc2V0dGluZ3MuCitUaGVzZSBzaG91bGQgYmUgYWRkaXRpdmUgd2hlbiBkZWZpbmVkIHVzaW5nICIrPSIuICBBbGwgaXRlbXMgaW4gdGhpcworbGlzdCBzaG91bGQgYmUgZHluYW1pYyEgaS5lLgorJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZmVhdHVyZSIsICJjZmxhZyIsICIhY2ZsYWciLCBkKX0KKworVFVORV9BUkNIIC0gVGhlIEdOVSBjYW5vbmljYWwgYXJjaCBmb3IgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUuICBpLmUuCithcm0sIGFybWViLCBtaXBzLCBtaXBzNjQsIGV0Yy4gIFRoaXMgdmFsdWUgaXMgdXNlZCBieSBiaXRiYWtlIHRvIHNldHVwCitjb25maWd1cmUuIFRVTkVfQVJDSCBkZWZpbml0aW9ucyBhcmUgc3BlY2lmaWMgdG8gYSBnaXZlbiBhcmNoaXRlY3R1cmUuCitUaGV5IG1heSBiZSBhIHNpbmdsZSBzdGF0aWMgZGVmaW5pdGlvbiwgb3IgbWF5IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkLgorU2VlIGVhY2ggYXJjaGl0ZWN0dXJlJ3MgUkVBRE1FIGZvciBkZXRhaWxzIGZvciB0aGF0IENQVSBmYW1pbHkuCisKK1RVTkVfUEtHQVJDSCAtIFRoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSB1c2VkIGJ5IHRoZSBwYWNrYWdpbmcgc3lzdGVtcyB0bworZGVmaW5lIHRoZSBhcmNoaXRlY3R1cmUsIGFiaSBhbmQgdHVuaW5nIG9mIGEgcGFydGljdWxhciBwYWNrYWdlLgorU2ltaWxhcmx5IHRvIFRVTkVfQVJDSCwgdGhlIGRlZmluaXRpb24gb2YgVFVORV9QS0dBUkNIIGlzIHNwZWNpZmljIHRvCitlYWNoIGFyY2hpdGVjdHVyZS4gU2VlIGVhY2ggYXJjaGl0ZWN0dXJlcyBSRUFETUUgZm9yIGRldGFpbHMgZm9yIHRoYXQKK0NQVSBmYW1pbHkuCisKK1BBQ0tBR0VfRVhUUkFfQVJDSFMgLSBMaXN0cyBhbGwgcnVudGltZSBjb21wYXRpYmxlIHBhY2thZ2UKK2FyY2hpdGVjdHVyZXMuICBCeSBkZWZhdWx0IHRoaXMgaXMgZXF1YWwgdG8KK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS08dHVuZT4uICBJZiBhbiBhcmNoaXRlY3R1cmUgZGV2aWF0ZXMgZnJvbSB0aGUKK2RlZmF1bHQgaXQgd2lsbCBiZSBsaXN0ZWQgaW4gdGhlIGFyY2hpdGVjdHVyZSBSRUFETUUuCisKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS08dHVuZT4gLSBMaXN0IGFsbCBvZiB0aGUgcGFja2FnZSBhcmNoaXRlY3R1cmVzCit0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhpcyBzcGVjaWZpYyB0dW5lLiAgVGhlIHBhY2thZ2UgYXJjaCBvZiB0aGlzCit0dW5lIG11c3QgYmUgaW4gdGhlIGxpc3QuCisKK1RBUkdFVF9GUFUgLSBUaGUgRlBVIHNldHRpbmcgZm9yIGEgZ2l2ZW4gdHVuZSwgaGFyZCAoZ2VuZXJhdGUgZmxvYXRpbmcKK3BvaW50IGluc3RydWN0aW9ucyksIHNvZnQgKGdlbmVyYXRlIGludGVybmFsIGdjYyBjYWxscyksICJvdGhlciIKK2FyY2hpdGVjdHVyZSBzcGVjaWZpYyBmbG9hdGluZyBwb2ludC4gIFRoaXMgaXMgc3luY2hyb25pemVkIHdpdGggdGhlCitjb21waWxlciBhbmQgb3RoZXIgdG9vbGNoYWluIGl0ZW1zLiAgVGhpcyBzaG91bGQgYmUgZHluYW1pY2FsbHkKK2NvbmZpZ3VyZWQgaW4gdGhlIHNhbWUgd2F5IHRoYXQgVFVORV9DQ0FSR1MgaXMuCisKK0JBU0VfTElCX3R1bmUtPHR1bmU+IC0gVGhlICIvbGliIiBsb2NhdGlvbiBmb3IgYSBzcGVjaWZpYyBBQkkuICBUaGlzIGlzCit1c2VkIGluIGEgbXVsdGlsaWIgY29uZmlndXJhdGlvbiB0byBwbGFjZSB0aGUgbGlicmFyaWVzIGluIHRoZSBjb3JyZWN0LAorbm9uLWNvbmZsaWN0aW5nIGxvY2F0aW9ucy4KKworCitCZXN0IFByYWN0aWNlCis9PT09PT09PT09PT09CitUaGUgdHVuZSBpbmZyYXN0cnVjdHVyZSBpcyBkZXNpZ25lZCB0byBiZSBoaWVyYXJjaGljYWwuIFdoZW4gd3JpdGluZyBhCituZXcgdHVuZSBmaWxlIGZvciBhICJmYXN0LWZvcndhcmQiIENQVSBhcmNoaXRlY3R1cmUgKG9uZSB0aGF0IHN1cHBvcnRzCitldmVyeXRoaW5nIGZyb20gYSBwcmV2aW91cyBnZW5lcmF0aW9uKSwgaXQgaXMgcmVjb21tZW5kZWQgdG8gcmVxdWlyZSB0aGUKK3ByZXZpb3VzIGdlbmVyYXRpb24gdHVuZSBmaWxlIGFuZCBzcGVjaWZ5IFBBQ0tBR0VfRVhUUkFfQVJDSFMgdXNpbmcgdGhlCitwcmV2aW91cyBnZW5lcmF0aW9uJ3Mgb3ZlcnJpZGUgYW5kIGFwcGVuZGluZyB0aGUgbmV3IHR1bmUuIE5vdGUgdGhhdAorb25seSBvbmUgcHJldmlvdXMgdHVuZSBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCB0byBhdm9pZCBtdXRpcGxlIGluY2x1ZGVzCitvZiB0aGUgYmFzZSBhcmNoIHdoaWNoIGNvdWxkIGxlYWQgdG8gYSBicm9rZW4gY29uZmlndXJhdGlvbiBkdWUgdG8KK211bHRpcGxlIHByZXBlbmQgYW5kIGFwcGVuZCBhc3NpZ25tZW50cy4KKworRm9yIGV4YW1wbGUsIGZvciB4ODYsIHRoZXJlIGlzIGEgY29tbW9uIHg4Ni9hcmNoLXg4Ni5pbmMgd2hpY2ggaXMKK2luY2x1ZGVkIGluIHRoZSBiYXNlIGk1ODYgdHVuZSBmaWxlLiBUaGUgY29yZTIgdHVuZSBidWlsZHMKK29uIHRoYXQsIGFuZCBjb3JlaTcgYnVpbGRzIG9uIGNvcmUyLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYmViNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9SRUFETUUKQEAgLTAsMCArMSw0MCBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgUmV2aXNpb24KKworVGhlIEFSTSBhcmNoaXRlY3R1cmUgZGVmaW5pdGlvbnMgYXJlIHNwbGl0IGFtb25nIGEgbnVtYmVyIG9mIGZpbGVzLgorVGhlIHByaW1hcnkgZGVmaW5pdGlvbnMgZm9yIHRoZSB2YXJpYWJsZXMgYXJlIGhhbmRsZWQgYnkgdGhlIGNvcmUKK2FyY2gtYXJtLmluYyBmaWxlLgorCitUVU5FX0FSQ0ggaXMgc2V0IHRvIGVpdGhlciAiYXJtIiBvciAiYXJtZWIiIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUKK29mIHRoZSBleGlzdGVuY2Ugb2YgdGhlICJiaWdlbmRpYW4iIGZlYXR1cmUgaW4gYSBnaXZlbiB0dW5lLgorCitBIHNtYWxsIHNldCBvZiBBUk0gc3BlY2lmaWMgdmFyaWFibGVzIGhhdmUgYmVlbiBkZWZpbmVkIHRvIGFsbG93IAorVFVORV9QS0dBUkNIIHRvIGJlIGF1dG9tYXRpY2FsbHkgZGVmaW5lZC4gIE9wdGltaXplZCB0dW5pbmdzIG11c3QgTk9UIAorY2hhbmdlIHRoZSBkZWZpbml0b24gb2YgVFVORV9QS0dBUkNILiAgVFVORV9QS0dBQ0hfdHVuZS08dHVuZT4gd2lsbCBiZSAKK2lnbm9yZWQuICBUaGUgZm9ybWF0IG9mIHRoZSBwYWNrYWdlIGFyY2ggaXMgZW5mb3JjZWQgYnkgdGhlIFRVTkVfUEtHQVJDSAorZGVmYXVsdC4gIFRoZSBmb3JtYXQgbXVzdCBiZSBvZiB0aGUgZm9ybToKKzxhcm12ZXJzaW9uPlt0XVtlXVtoZl1bYl1bLXZmcF1bLW5lb25dCisKK1RVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzOgorJHtBUk1QS0dBUkNIfSR7QVJNUEtHU0ZYX1RIVU1CfSR7QVJNUEtHU0ZYX0RTUH0ke0FSTVBLR1NGWF9FQUJJfSR7QVJNUEtHU0ZYX0VORElBTn0ke0FSTVBLR1NGWF9GUFV9CisKK0FSTVBLR0FSQ0ggLSBUaGlzIGlzIHRoZSBjb3JlIHBhY2thZ2UgYXJjaCBjb21wb25lbnQgc3BlY2lmaWVkIGJ5IGVhY2ggCit0dW5pbmcuICBUaGlzIGlzIHRoZSBwcmltYXJ5IGlkZW50aWZpZXIgb2YgYSB0dW5pbmcuICBVc3VhbCB2YWx1ZXMgYXJlOgorYXJtLCBhcm12NCwgYXJtdjUsIGFybXY2LCBhcm12N2EsIGV0Yy4KKworQVJNUEtHU0ZYX1RIVU1CIC0gVGhpcyBpcyB0aGUgdGh1bWIgc3BlY2lmaWMgc3VmZml4LiAgQ3VyZW50bHkgaXQgaXMgCitkZWZpbmVkIGluIGZlYXR1cmUtYXJtLXRodW1iLmluYy4KKworQVJNUEtHU0ZYX0RTUCAtIFRoaXMgaXMgdGhlIERTUCBzcGVjaWZpYyBzdWZmaXguICBDdXJyZW50bHkgdGhpcyBpcyBzZXQgCit0byAnZScgd2hlbiBvbiBhcm12NSBhbmQgdGhlIGRzcCBmZWF0dXJlIGlzIGVuYWJsZWQuCisKK0FSTVBLR1NGWF9FQUJJIC0gVGhpcyBpcyB0aGUgZWFiaSBzcGVjaWZpYyBzdWZmaXguICBUaGVyZSBhcmUgY3VycmVudGx5IAordHdvIGRlZmluZWQgQUJJcyBzcGVjaWZpY2VkLCBzdGFuZGFyZCBFQUJJIGFuZCBIYXJkIEZsb2F0IChWRlApIEVBQkkuICAKK1doZW4gdGhlIGNhbGxjb252ZW50aW9uLWhhcmQgaXMgZW5hYmxlZCwgImhmIiBpcyBzcGVjaWZpZWQsIG90aGVyd2lzZSBpdCAKK2lzIGJsYW5rLgorCitBUk1QS0dTRlhfRU5ESUFOIC0gVGhpcyBpcyB0aGUgZW5kaWFuIHNwZWNpZmljIHN1ZmZpeC4gIEl0IGlzIGRlZmluZWQgaW4gCit0aGUgY29yZSBhcmNoLWFybS5pbmMgZmlsZS4KKworQVJNUEtHU0ZYX0ZQVSAtIFRoaXMgaXMgdGhlIEZQVSBzcGVjaWZpYyBzdWZmaXguICBUaGUgc3VmZml4IGluZGljYXRlcyAKK3NwZWNpZmljIEZQVSBvcHRpbWl6YXRpb25zLiAgJ3ZmcCcgYW5kICduZW9uJyBhcmUgYm90aCBkZWZpbmVkLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYjgwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybS5pbmMKQEAgLTAsMCArMSwxNyBAQAorCitUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGUgYmlnLWVuZGlhbiBtb2RlLiIKKworQVJNUEtHQVJDSCA9ICIke0FSTVBLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCitBUk1QS0dTRlhfRU5ESUFOID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImJpZ2VuZGlhbiIsICJiIiwgIiIsIGQpfSIKK0FSTVBLR1NGWF9GUFUgPz89ICIiCitBUk1QS0dTRlhfRFNQID8/PSAiIgorQVJNUEtHU0ZYX0VBQkkgPz89ICIiCitBUk1QS0dTRlhfVEhVTUIgPz89ICIiCisKK1RVTkVfQVJDSCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiYXJtZWIiLCAiYXJtIiwgZCl9IgorVFVORV9QS0dBUkNIID0gIiR7QVJNUEtHQVJDSH0ke0FSTVBLR1NGWF9USFVNQn0ke0FSTVBLR1NGWF9EU1B9JHtBUk1QS0dTRlhfRUFCSX0ke0FSTVBLR1NGWF9FTkRJQU59JHtBUk1QS0dTRlhfRlBVfSIKKworQUJJRVhURU5TSU9OID0gImVhYmkiCisKK1RBUkdFVF9GUFUgPSAiJHtAZC5nZXRWYXIoJ0FSTVBLR1NGWF9GUFUnLCBUcnVlKS5zdHJpcCgnLScpIG9yICdzb2Z0J30iCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm02NC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3NmI4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtNjQuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhYXJjaDY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2FhcmNoNjRdID0gIkVuYWJsZSBpbnN0cnVjdGlvbnMgZm9yIGFhcmNoNjQiCisKK01BQ0hJTkVPVkVSUklERVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiOmFhcmNoNjQiLCAiIiAsZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJhYXJjaDY0IGFhcmNoNjRfYmUiCitBUk1QS0dBUkNIX3R1bmUtYWFyY2g2NCA/PSAiYWFyY2g2NCIKK0FSTVBLR0FSQ0hfdHVuZS1hYXJjaDY0X2JlID89ICJhYXJjaDY0X2JlIgorVFVORV9GRUFUVVJFU190dW5lLWFhcmNoNjQgPz0gImFhcmNoNjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYWFyY2g2NF9iZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYWFyY2g2NH0gYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1hYXJjaDY0ID0gImxpYjY0IgorQkFTRV9MSUJfdHVuZS1hYXJjaDY0X2JlID0gImxpYjY0IgorCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYWFyY2g2NCA9ICJhYXJjaDY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFhcmNoNjRfYmUgPSAiYWFyY2g2NF9iZSIKKworQVJNUEtHU0ZYX0VORElBTl82NCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiX2JlIiwgIiIsIGQpfSIKK1RVTkVfQVJDSF82NCA9ICJhYXJjaDY0JHtBUk1QS0dTRlhfRU5ESUFOXzY0fSIKK1RVTkVfUEtHQVJDSF82NCA9ICJhYXJjaDY0JHtBUk1QS0dTRlhfRU5ESUFOXzY0fSIKK0FCSUVYVEVOU0lPTl82NCA9ICIiCitUQVJHRVRfRlBVXzY0ID0gIiIKKworIyBEdXBsaWNhdGVkIGZyb20gYXJjaC1hcm0uaW5jCitUVU5FX0FSQ0hfMzIgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgImFybWViIiwgImFybSIsIGQpfSIKK1RVTkVfUEtHQVJDSF8zMiA9ICIke0FSTVBLR0FSQ0h9JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSR7QVJNUEtHU0ZYX0VBQkl9JHtBUk1QS0dTRlhfRU5ESUFOfSR7QVJNUEtHU0ZYX0ZQVX0iCitBQklFWFRFTlNJT05fMzIgPSAiZWFiaSIKK1RBUkdFVF9GUFVfMzIgPSAiJHtAZC5nZXRWYXIoJ0FSTVBLR1NGWF9GUFUnLCBUcnVlKS5zdHJpcCgnLScpIG9yICdzb2Z0J30iCisKK1RVTkVfQVJDSCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhYXJjaDY0IiwgIiR7VFVORV9BUkNIXzY0fSIsICIke1RVTkVfQVJDSF8zMn0iICxkKX0iCitUVU5FX1BLR0FSQ0ggPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RVTkVfUEtHQVJDSF82NH0iLCAiJHtUVU5FX1BLR0FSQ0hfMzJ9IiAsZCl9IgorQUJJRVhURU5TSU9OID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFhcmNoNjQiLCAiJHtBQklFWFRFTlNJT05fNjR9IiwgIiR7QUJJRVhURU5TSU9OXzMyfSIgLGQpfSIKK1RBUkdFVF9GUFUgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWFyY2g2NCIsICIke1RBUkdFVF9GUFVfNjR9IiwgIiR7VEFSR0VUX0ZQVV8zMn0iICxkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzA3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY0LmluYwpAQCAtMCwwICsxLDM0IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjQiCisKK1RVTkVWQUxJRFthcm1dID0gIkVuYWJsZSBBUk0gaW5zdHJ1Y3Rpb24gc2V0IgorVFVORVZBTElEW2FybXY0XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12NCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NCIsICIgLW1hcmNoPWFybXY0JHtBUk1QS0dTRlhfVEhVTUJ9IiwgIiIsIGQpfSIKKyMgZW5hYmxlIC0tZml4LXY0Ynggd2hlbiB3ZSBoYXZlIGFybXY0IGluIFRVTkVfRkVBVFVSRVMsIGJ1dCB0aGVuIGRpc2FibGUgaXQgd2hlbiB3ZSBoYXZlIGFsc28gYXJtdjUgb3IgdGh1bWIKKyMgbWF5YmUgd2Ugc2hvdWxkIGV4dGVuZCBiYi51dGlscy5jb250YWlucyB0byBzdXBwb3J0IGNoZWNrIGZvciBhbnkgY2hlY2t2YWx1ZXMgaW4gdmFsdWUsIG5vdyBpdCBkb2VzIAorIyBjaGVja3ZhbHVlcy5pc3N1YnNldCh2YWwpIHdoaWNoIGNhbm5vdCBiZSB1c2VkIGZvciBuZWdhdGl2ZSB0ZXN0IG9mIGZvbyBuZWl0aGVyIGJhciBpbiB2YWx1ZQorRklYX1Y0QlhfQVJNVjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiLS1maXgtdjRieCIsICIiLCBkKX0iCitGSVhfVjRCWF9BUk1WNSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NSIsICIiLCAiJHtGSVhfVjRCWF9BUk1WNH0iLCBkKX0iCitGSVhfVjRCWCA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ0aHVtYiIsICIiLCAiJHtGSVhfVjRCWF9BUk1WNX0iLCBkKX0iCitUQVJHRVRfTERfS0VSTkVMX0FSQ0ggKz0gIiR7RklYX1Y0Qlh9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjQiLCAiYXJtdjQ6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm0uaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKKworIyBMaXR0bGUgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NCBhcm12NHQiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjQgPz0gImFybXY0IgorQVJNUEtHQVJDSF90dW5lLWFybXY0dCA/PSAiYXJtdjQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjQgPz0gImFybSBhcm12NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0fSB0aHVtYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NCA9ICJhcm0gYXJtdjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0fSBhcm12NHQiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjRiIGFybXY0dGIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjRiID89ICJhcm12NCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NHRiID89ICJhcm12NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY0fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjRiID0gImFybWViIGFybXY0YiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0Yn0gYXJtdjR0YiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjRhNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCkBAIC0wLDAgKzEsNTIgQEAKK0FSTVBLR1NGWF9EU1AgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJhcm12NSIsICJkc3AiIF0sICJlIiwgIiIsIGQpfSIKK1RVTkVWQUxJRFtkc3BdID0gIkFSTSBEU1AgZnVuY3Rpb25hbGl0eSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS5pbmMKKworIyBMaXR0bGUgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWUgYXJtdjV0ZSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWUgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGUgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZSA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IGRzcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IGRzcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV9IGFybXY1ZSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dH0gYXJtdjVlIGFybXY1dGUiCisKKyMgTGl0dGxlIEVuZGlhbiArIFZGUC9EU1AKK0FWQUlMVFVORVMgKz0gImFybXY1ZS12ZnAgYXJtdjV0ZS12ZnAgYXJtdjVlaGYtdmZwIGFybXY1dGVoZi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZS12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ZWhmLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWhmLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVlfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dGV9IHZmcCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWVoZi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZS12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWhmLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZS12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NS12ZnB9IGFybXY1ZSBhcm12NWUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGUtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dC12ZnB9IGFybXY1ZSBhcm12NXRlIGFybXY1ZS12ZnAgYXJtdjV0ZS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGYtdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGYtdmZwfSBhcm12NWVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWhmLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZi12ZnB9IGFybXY1ZWhmLXZmcCBhcm12NXRlaGYtdmZwIgorCisjIEJpZyBFbmRpYW4KK0FWQUlMVFVORVMgKz0gImFybXY1ZWIgYXJtdjV0ZWIiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlYiA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWIgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZX0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGViID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWJ9IGFybXY1ZWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yn0gYXJtdjVlYiBhcm12NXRlYiIKKworIyBCaWcgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjVlYi12ZnAgYXJtdjV0ZWItdmZwIGFybXY1ZWhmYi12ZnAgYXJtdjV0ZWhmYi12ZnAiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlYi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGViLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVlaGZiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0ZWhmYi12ZnAgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWUtdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZWItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWhmYi12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1ZWhmLXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dGVoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlaGYtdmZwfSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjViLXZmcH0gYXJtdjVlYiBhcm12NWViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0Yi12ZnB9IGFybXY1ZWIgYXJtdjV0ZWIgYXJtdjVlYi12ZnAgYXJtdjV0ZWItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWhmYi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVoZmItdmZwfSBhcm12NWVoZmItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZmItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGhmYi12ZnB9IGFybXY1ZWhmYi12ZnAgYXJtdjV0ZWhmYi12ZnAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjY2VhZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LmluYwpAQCAtMCwwICsxLDYwIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjUiCisKK1RVTkVWQUxJRFthcm12NV0gPSAiRW5hYmxlIGluc3RydWN0aW9ucyBmb3IgQVJNdjUiCitUVU5FQ09ORkxJQ1RTW2FybXY1XSA9ICJhcm12NCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NSIsICIgLW1hcmNoPWFybXY1JHtBUk1QS0dTRlhfVEhVTUJ9JHtBUk1QS0dTRlhfRFNQfSIsICIiLCBkKX0iCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12NSIsICJhcm12NToiLCAiIiAsZCl9IgorCitBUk1QS0dTRlhfRFNQID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAiYXJtdjUiLCAiZHNwIiBdLCAiZSIsICIiLCBkKX0iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjUgYXJtdjV0IgorQVJNUEtHQVJDSF90dW5lLWFybXY1ID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXQgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1ID89ICJhcm0gYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NX0gdGh1bWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR9IGFybXY1IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGFybXY1IGFybXY1dCIKKworIyBMaXR0bGUgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjUtdmZwIGFybXY1dC12ZnAgYXJtdjVoZi12ZnAgYXJtdjV0aGYtdmZwIgorQVJNUEtHQVJDSF90dW5lLWFybXY1LXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjV0LXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVoZi12ZnAgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGhmLXZmcCA/PSAiYXJtdjUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjUtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NX0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1dC12ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY1dH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1aGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NS12ZnB9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0aGYtdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXQtdmZwfSBjYWxsY29udmVudGlvbi1oYXJkIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1LXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NX0gYXJtdjUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dC12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0fSBhcm12NS12ZnAgYXJtdjV0LXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWhmLXZmcCA9ICJhcm12NWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRoZi12ZnAgPSAiYXJtdjVoZi12ZnAgYXJtdjV0aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZi12ZnAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGYtdmZwfSBhcm12NWVoZi12ZnAgYXJtdjV0ZWhmLXZmcCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12NWIgYXJtdjV0YiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWIgPz0gImFybXY1IgorQVJNUEtHQVJDSF90dW5lLWFybXY1dGIgPz0gImFybXY1IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXR9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjRifSBhcm12NWIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0YiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHRifSBhcm12NWIgYXJtdjV0YiIKKworIyBCaWcgRW5kaWFuICsgVkZQL0RTUAorQVZBSUxUVU5FUyArPSAiYXJtdjViLXZmcCBhcm12NXRiLXZmcCBhcm12NWhmYi12ZnAgYXJtdjV0aGZiLXZmcCIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NWItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRiLXZmcCA/PSAiYXJtdjUiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjVoZmItdmZwID89ICJhcm12NSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NXRoZmItdmZwID89ICJhcm12NSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NWItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NS12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0LXZmcH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY1aGZiLXZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjVoZi12ZnB9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRoZmItdmZwID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRoZi12ZnB9IGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWItdmZwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1Yn0gYXJtdjViLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRiLXZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRifSBhcm12NWItdmZwIGFybXY1dGItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1aGZiLXZmcCA9ICJhcm12NWhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0aGZiLXZmcCA9ICJhcm12NWhmYi12ZnAgYXJtdjV0aGZiLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwYzViZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjYuaW5jCkBAIC0wLDAgKzEsNTAgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NiIKKworVFVORVZBTElEW2FybXY2XSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12NiIKK1RVTkVDT05GTElDVFNbYXJtdjZdID0gImFybXY0IGFybXY1IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY2IiwgIiAtbWFyY2g9YXJtdjYiLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjYiLCAiYXJtdjY6IiwgIiIgLGQpfSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NS1kc3AuaW5jCisKKyMgTGl0dGxlIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjYtbm92ZnAgYXJtdjZ0LW5vdmZwIGFybXY2IGFybXY2dCBhcm12NmhmIGFybXY2dGhmIgorQVJNUEtHQVJDSF90dW5lLWFybXY2LW5vdmZwID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnQtbm92ZnAgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2ID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnQgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2aGYgPz0gImFybXY2IgorQVJNUEtHQVJDSF90dW5lLWFybXY2dGhmID89ICJhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcCA/PSAiYXJtIGFybXY2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dC1ub3ZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjYtbm92ZnB9IHRodW1iIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Ni1ub3ZmcH0gdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0LW5vdmZwfSB2ZnAiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dH0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12Ni1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWV9IGFybXY2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dC1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBhcm12NiBhcm12NnQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlLXZmcH0gYXJtdjYgYXJtdjYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlLXZmcH0gYXJtdjYgYXJtdjZ0IGFybXY2LXZmcCBhcm12NnQtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjVlaGYtdmZwfSBhcm12NmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlaGYtdmZwfSBhcm12NmhmLXZmcCBhcm12NnRoZi12ZnAiCisKKyMgQmlnIEVuZGlhbgorQVZBSUxUVU5FUyArPSAiYXJtdjZiLW5vdmZwIGFybXY2dGItbm92ZnAgYXJtdjZiIGFybXY2dGIgYXJtdjZoZmIgYXJtdjZ0aGZiIgorQVJNUEtHQVJDSF90dW5lLWFybXY2Yi1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0Yi1ub3ZmcCA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZiID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NnRiID89ICJhcm12NiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12NmhmYiA/PSAiYXJtdjYiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjZ0aGZiID89ICJhcm12NiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmItbm92ZnAgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2LW5vdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0Yi1ub3ZmcCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0LW5vdmZwfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Nn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2dGIgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY2dH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY2aGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NmhmfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjZ0aGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NnRoZn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2Yi1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVifSBhcm12NmIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0Yi1ub3ZmcCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlYn0gYXJtdjZiIGFybXY2dGIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1ZWItdmZwfSBhcm12NmIgYXJtdjZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NnRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGViLXZmcH0gYXJtdjZiIGFybXY2dGIgYXJtdjZiLXZmcCBhcm12NnRiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NWVoZmItdmZwfSBhcm12NmhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGVoZmItdmZwfSBhcm12NmhmYi12ZnAgYXJtdjZ0aGZiLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2I2ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCkBAIC0wLDAgKzEsMTIzIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhIgorCitUVU5FVkFMSURbYXJtdjdhXSA9ICJFbmFibGUgaW5zdHJ1Y3Rpb25zIGZvciBBUk12Ny1hIgorVFVORUNPTkZMSUNUU1thcm12N2FdID0gImFybXY0IGFybXY1IGFybXY2IGFybXY3IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybXY3YSIsICIgLW1hcmNoPWFybXY3LWEiLCAiIiwgZCl9IgorTUFDSElORU9WRVJSSURFUyA9LiAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdhIiwgImFybXY3YToiLCAiIiAsZCl9IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiYXJtdjdhIGFybXY3YXQgYXJtdjdhLXZmcHYzZDE2IGFybXY3YXQtdmZwdjNkMTYgYXJtdjdhLXZmcHYzIGFybXY3YXQtdmZwdjMgYXJtdjdhLW5lb24gYXJtdjdhdC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YSA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXQgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2EtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0LXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdC12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YS1uZW9uPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0LW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EgPz0gImFybSBhcm12N2EgdmZwIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gdGh1bWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IHZmcHYzZDE2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IHZmcHYzZDE2IgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzZDE2fSB2ZnB2MyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSB2ZnB2MyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhfSBuZW9uIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ9IGFybXY3YSBhcm12N2EtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGFybXY3YS12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLXZmcHYzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS12ZnB2M2QxNn0gYXJtdjdhLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGFybXY3YS12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dH0gYXJtdjdhIGFybXY3YS12ZnAgYXJtdjdhdDItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtdmZwdjNkMTYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdhLXZmcC12ZnB2M2QxNiBhcm12N2F0Mi12ZnAtdmZwdjNkMTYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBhcm12N2EtdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdhLXZmcC1uZW9uIGFybXY3YXQyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiYXJtdjdhaGYgYXJtdjdhdGhmIGFybXY3YWhmLXZmcHYzZDE2IGFybXY3YXRoZi12ZnB2M2QxNiBhcm12N2FoZi12ZnB2MyBhcm12N2F0aGYtdmZwdjMgYXJtdjdhaGYtbmVvbiBhcm12N2F0aGYtbmVvbiBhcm12N2FoZi1uZW9uLXZmcHY0IGFybXY3YXRoZi1uZW9uLXZmcHY0IgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi12ZnB2MyA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi1uZW9uID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZi1uZW9uLXZmcHY0ID89ICJhcm12N2EiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjNkMTZ9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M30gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjN9IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNhbGxjb252ZW50aW9uLWhhcmQiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY2FsbGNvbnZlbnRpb24taGFyZCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSB2ZnB2NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IHZmcHY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2aGZ9IGFybXY3YWhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjZ0aGZ9IGFybXY3YWhmLXZmcCBhcm12N2F0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gYXJtdjdhaGYtdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNiBhcm12N2F0MmhmLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi12ZnB2M2QxNn0gYXJtdjdhaGYtdmZwLXZmcHYzZDE2LXZmcHYzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtdmZwdjNkMTZ9IGFybXY3YWhmLXZmcC12ZnB2M2QxNi12ZnB2MyBhcm12N2F0MmhmLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBhcm12N2FoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGFybXY3YWhmLXZmcC1uZW9uIGFybXY3YXQyaGYtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBhcm12N2FoZi12ZnAtbmVvbi12ZnB2NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gYXJtdjdhaGYtdmZwLW5lb24tdmZwdjQgYXJtdjdhdDJoZi12ZnAtbmVvbi12ZnB2NCIKKworIyBCaWcgRW5kaWFuCitBVkFJTFRVTkVTICs9ICJhcm12N2FiIGFybXY3YXRiIGFybXY3YWItdmZwdjNkMTYgYXJtdjdhdGItdmZwdjNkMTYgYXJtdjdhYi12ZnB2MyBhcm12N2F0Yi12ZnB2MyBhcm12N2FiLW5lb24gYXJtdjdhdGItbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGIgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiLXZmcHYzZDE2ID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGItdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FiLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRiLW5lb24gPz0gImFybXY3YSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0YiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS12ZnB2M2QxNn0gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRiLXZmcHYzZDE2ID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhYi12ZnB2MyA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLXZmcHYzfSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtdmZwdjN9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FiLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGItbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdC1uZW9ufSBiaWdlbmRpYW4iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmJ9IGFybXY3YWItdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGJ9IGFybXY3YWItdmZwIGFybXY3YXQyYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FifSBhcm12N2FiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yi12ZnB2M2QxNiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FifSBhcm12N2FiLXZmcC12ZnB2M2QxNiBhcm12N2F0MmItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGItdmZwdjMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYi12ZnB2M2QxNn0gYXJtdjdhYi12ZnAtdmZwdjNkMTYtdmZwdjMgYXJtdjdhdDJiLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhYn0gYXJtdjdhYi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0Yi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRifSBhcm12N2FiLXZmcC1uZW9uIGFybXY3YXQyYi12ZnAtbmVvbiIKKworIyBCaWcgRW5kaWFuICsgVkZQCitBVkFJTFRVTkVTICs9ICJhcm12N2FoZmIgYXJtdjdhdGhmYiBhcm12N2FoZmItdmZwdjNkMTYgYXJtdjdhdGhmYi12ZnB2M2QxNiBhcm12N2FoZmItdmZwdjMgYXJtdjdhdGhmYi12ZnB2MyBhcm12N2FoZmItbmVvbiBhcm12N2F0aGZiLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhdGhmYiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YWhmYi12ZnB2M2QxNiA/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmItdmZwdjNkMTYgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2FoZmItdmZwdjMgPz0gImFybXY3YSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm12N2F0aGZiLXZmcHYzID89ICJhcm12N2EiCitBUk1QS0dBUkNIX3R1bmUtYXJtdjdhaGZiLW5lb24/PSAiYXJtdjdhIgorQVJNUEtHQVJDSF90dW5lLWFybXY3YXRoZmItbmVvbiA/PSAiYXJtdjdhIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZiID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGJpZ2VuZGlhbiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZmItdmZwdjNkMTYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYi12ZnB2M2QxNiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLXZmcHYzZDE2fSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZiLXZmcHYzID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZmItdmZwdjMgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZi12ZnB2M30gYmlnZW5kaWFuIgorVFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBiaWdlbmRpYW4iCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmYi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gYmlnZW5kaWFuIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NmhmYn0gYXJtdjdhaGZiLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2dGhmYn0gYXJtdjdhaGZiLXZmcCBhcm12N2F0MmhmYi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZiLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYn0gYXJtdjdhaGZiLXZmcC12ZnB2M2QxNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZmJ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYgYXJtdjdhdDJoZmItdmZwLXZmcHYzZDE2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmYi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItdmZwdjNkMTZ9IGFybXY3YWhmYi12ZnAtdmZwdjNkMTYtdmZwdjMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYi12ZnB2MyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLXZmcHYzZDE2fSBhcm12N2FoZmItdmZwLXZmcHYzZDE2LXZmcHYzIGFybXY3YXQyaGZiLXZmcC12ZnB2M2QxNi12ZnB2MyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmItbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZmJ9IGFybXY3YWhmYi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZiLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmYn0gYXJtdjdhaGZiLXZmcC1uZW9uIGFybXY3YXQyaGZiLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTgzMmZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm02NC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tbmVvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiMmI4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLW5lb24uaW5jCkBAIC0wLDAgKzEsMyBAQAorVFVORVZBTElEW25lb25dID0gIkVuYWJsZSBOZW9uIFNJTUQgYWNjZWxlcmF0b3IgdW5pdC4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsIGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHY0IiwgIiAtbWZwdT1uZW9uLXZmcHY0IiwgIiAtbWZwdT1uZW9uIiwgZCksICIiICwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICItbmVvbiIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS10aHVtYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzMjE3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2ZlYXR1cmUtYXJtLXRodW1iLmluYwpAQCAtMCwwICsxLDQ5IEBACisjIFRoZSBpbnN0cnVjdGlvbiBzZXQgdGhlIGNvbXBpbGVyIHNob3VsZCB1c2Ugd2hlbiBnZW5lcmF0aW5nIGFwcGxpY2F0aW9uCisjIGNvZGUuIFRoZSBrZXJuZWwgaXMgYWx3YXlzIGNvbXBpbGVkIHdpdGggYXJtIGNvZGUgYXQgcHJlc2VudC4gYXJtIGNvZGUKKyMgaXMgdGhlIG9yaWdpbmFsIDMyIGJpdCBBUk0gaW5zdHJ1Y3Rpb24gc2V0LCB0aHVtYiBjb2RlIGlzIHRoZSAxNiBiaXQKKyMgZW5jb2RlZCBSSVNDIHN1Yi1zZXQuIFRodW1iIGNvZGUgaXMgc21hbGxlciAobWF5YmUgNzAlIG9mIHRoZSBBUk0gc2l6ZSkKKyMgYnV0IHJlcXVpcmVzIG1vcmUgaW5zdHJ1Y3Rpb25zICgxNDAlIGZvciA3MCUgc21hbGxlciBjb2RlKSBzbyBtYXkgYmUKKyMgc2xvd2VyLgorVFVORVZBTElEW3RodW1iXSA9ICJVc2UgdGh1bWIgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgQVJNIgorQVJNX1RIVU1CX09QVCA9ICIke0BbJ2FybScsICd0aHVtYiddW2QuZ2V0VmFyKCdBUk1fSU5TVFJVQ1RJT05fU0VUJywgVHJ1ZSkgPT0gJ3RodW1iJ119IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjQnLCAgJ3QnLCAgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY1JywgICd0JywgICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12NicsICAndCcsICAnJywgZCl9IgorQVJNX1RIVU1CX1NVRkZJWCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtdjdhJywgJ3QyJywgJycsIGQpfSIKK0FSTV9USFVNQl9TVUZGSVggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FybXY3cicsICd0MicsICcnLCBkKX0iCitBUk1fVEhVTUJfU1VGRklYIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICdhcm12N20nLCAndDInLCAnJywgZCl9IgorCisjIElmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgQVJNLCB0aGVuIHJlc3BlY3QgQVJNX1RIVU1CX09QVCAod2hpY2ggY2FuIGJlICJhcm0iIG9yICJ0aHVtYiIpCisjIElmIHRoZSBkZWZpY2UgZG9lc24ndCBzdXBwb3J0IEFSTSwgdGhlbiBhbHdheXMgc2V0ICJ0aHVtYiIgZXZlbiB3aGVuCisjIHNvbWUgcmVjaXBlIGV4cGxpY2l0bHkgc2V0cyBBUk1fSU5TVFJVQ1RJT05fU0VUIHRvICJhcm0iCitBUk1fTV9PUFQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnYXJtJywgJyR7QVJNX1RIVU1CX09QVH0nLCAndGh1bWInLCBkKX0iCitweXRob24gKCkgeworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ3RodW1iJywgJ0ZhbHNlJywgJ1RydWUnLCBkKToKKyAgICAgICAgcmV0dXJuCisgICAgc2VsZWN0ZWQgPSBkLmdldFZhcignQVJNX0lOU1RSVUNUSU9OX1NFVCcsIFRydWUpCisgICAgaWYgc2VsZWN0ZWQgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgdXNlZCA9IGQuZ2V0VmFyKCdBUk1fTV9PUFQnLCBUcnVlKQorICAgIGlmIHNlbGVjdGVkICE9IHVzZWQ6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgYmIud2FybigiUmVjaXBlICclcycgc2VsZWN0cyBBUk1fSU5TVFJVQ1RJT05fU0VUIHRvIGJlICclcycsIGJ1dCB0dW5lIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzIGl0IHRvICclcyciICUgKHBuLCBzZWxlY3RlZCwgdXNlZCkpCit9CisKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcgLW0ke0FSTV9NX09QVH0nLCAnJywgZCl9IgorT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICc6dGh1bWInLCAnJywgZCl9IgorCisjIEFkZCBzdWZmaXggZnJvbSBBUk1fVEhVTUJfU1VGRklYIG9ubHkgaWYgYWZ0ZXIgYWxsIHRoaXMgd2Ugc3RpbGwgc2V0IEFSTV9NX09QVCB0byB0aHVtYgorQVJNUEtHU0ZYX1RIVU1CIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcke0FSTV9USFVNQl9TVUZGSVh9JywgJycsIGQpIGlmIGQuZ2V0VmFyKCdBUk1fTV9PUFQnLCBUcnVlKSA9PSAndGh1bWInIGVsc2UgJyd9IgorCisjIFdoZXRoZXIgdG8gY29tcGlsZSB3aXRoIGNvZGUgdG8gYWxsb3cgaW50ZXJ3b3JraW5nIGJldHdlZW4gdGhlIHR3bworIyBpbnN0cnVjdGlvbiBzZXRzLiBUaGlzIGFsbG93cyB0aHVtYiBjb2RlIHRvIGJlIGV4ZWN1dGVkIG9uIGEgcHJpbWFyaWx5CisjIGFybSBzeXN0ZW0gYW5kIHZpY2UgdmVyc2EuIEl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgRElTVFJPcyBub3QKKyMgdHVybiB0aGlzIG9mZiAtIHRoZSBhY3R1YWwgY29zdCBpcyB2ZXJ5IHNtYWxsLgorVFVORVZBTElEW25vLXRodW1iLWludGVyd29ya10gPSAiRGlzYWJsZSBtaXhpbmcgb2YgdGh1bWIgYW5kIEFSTSBmdW5jdGlvbnMiCitUSFVNQl9UVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1RVTkVfRkVBVFVSRVMnLCAnbm8tdGh1bWItaW50ZXJ3b3JrJywgJyAtbW5vLXRodW1iLWludGVyd29yaycsICcgLW10aHVtYi1pbnRlcndvcmsnLCBkKX0iCitUSFVNQl9PVkVSUklERVMgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ25vLXRodW1iLWludGVyd29yaycsICc6dGh1bWItaW50ZXJ3b3JrJywgJycsIGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcgJHtUSFVNQl9UVU5FX0NDQVJHU30nLCAnJywgZCl9IgorT1ZFUlJJREVTIC49ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICcke1RIVU1CX09WRVJSSURFU30nLCAnJywgZCl9IgorCisjIHdoYXQgYWJvdXQgYXJtdjdtIGRldmljZXMgd2hpY2ggZG9uJ3Qgc3VwcG9ydCAtbWFybSAoZS5nLiBDb3J0ZXgtTTMpPworVEFSR0VUX0NDX0tFUk5FTF9BUkNIICs9ICIke0BiYi51dGlscy5jb250YWlucygnVFVORV9GRUFUVVJFUycsICd0aHVtYicsICctbW5vLXRodW1iLWludGVyd29yayAtbWFybScsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9mZWF0dXJlLWFybS12ZnAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGZiZWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vZmVhdHVyZS1hcm0tdmZwLmluYwpAQCAtMCwwICsxLDE3IEBACitUVU5FVkFMSURbdmZwXSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50ICh2ZnApIHVuaXQuIgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwIiwgIi12ZnAiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbdmZwdjNkMTZdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgVmVyc2lvbiAzIHdpdGggMTYgcmVnaXN0ZXJzICh2ZnB2My1kMTYpIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzZDE2IiwgIiAtbWZwdT12ZnB2My1kMTYiLCAiIiwgZCl9IgorQVJNUEtHU0ZYX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwdjNkMTYiLCAiLXZmcHYzZDE2IiwgIiIgLGQpfSIKKworVFVORVZBTElEW3ZmcHYzXSA9ICJFbmFibGUgVmVjdG9yIEZsb2F0aW5nIFBvaW50IFZlcnNpb24gMyB3aXRoIDMyIHJlZ2lzdGVycyAodmZwdjMpIHVuaXQuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInZmcHYzIiwgIiAtbWZwdT12ZnB2MyIsICIiLCBkKX0iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2MyIsICItdmZwdjMiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbdmZwdjRdID0gIkVuYWJsZSBWZWN0b3IgRmxvYXRpbmcgUG9pbnQgVmVyc2lvbiA0ICh2ZnB2NCkgdW5pdC4iCitBUk1QS0dTRlhfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJ2ZnB2NCIsICItdmZwdjQiLCAiIiAsZCl9IgorCitUVU5FVkFMSURbY2FsbGNvbnZlbnRpb24taGFyZF0gPSAiRW5hYmxlIEVBQkkgaGFyZCBmbG9hdCBjYWxsIGNvbnZlbnRpb24sIHJlcXVpcmVzIFZGUC4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAidmZwIiwgYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY2FsbGNvbnZlbnRpb24taGFyZCIsICIgLW1mbG9hdC1hYmk9aGFyZCIsICIgLW1mbG9hdC1hYmk9c29mdGZwIiwgZCksICIiICxkKX0iCitBUk1QS0dTRlhfRUFCSSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCBbICJjYWxsY29udmVudGlvbi1oYXJkIiwgInZmcCIgXSwgImhmIiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvbWlwcy9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvUkVBRE1FCkBAIC0wLDAgKzEsMzYgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgIC0gSW5pdGlhbCBWZXJzaW9uCisKK01JUFMgY3VycmVudGx5IGRlZmluZXMgMTIgQUJJcy4gIENvbWJpbmF0aW9ucyBvZjoKKyAqKSBCaWcvTGl0dGxlIEVuZGlhbgorICopIEhhcmR3YXJlL1NvZnR3YXJlIEZsb2F0aW5nIFBvaW50CisgKikgbzMyLCBuMzIsIG42NCBBQkkKKworVFVORV9BUkNILCB0aGUgR05VIGNhbm9uaWNhbCBhcmNoLCBpcyBkZWZpbmVkIGFzOgorCittaXBzJHtNSVBTUEtHU0ZYX0JZVEV9JHtNSVBTUEtHU0ZYX0VORElBTn0KKworVGhlIHBhY2thZ2UgYXJjaCBpcyBkZWZpbmVkIGluIHN1Y2ggYSB3YXkgdG8gZ2VuZXJhdGVkIGEgc3RhbmRhcmQgbmFtaW5nCitzY2hlbWUuICBUaGUgc2NoZW1lIGlzOiA8bWlwcyB2YXJpYW50PlstbmZdWy1uMzJdCisKK1RVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzOgorCiske01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLSR7REVGQVVMVFRVTkV9fSR7TUlQU1BLR1NGWF9GUFV9JHtNSVBTUEtHU0ZYX0FCSX0KKworVGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgTUlQUyBzcGVjaWZpYyB2YXJpYWJsZXM6CisKK01JUFNQS0dTRlhfQllURSAtIFRoaXMgaXMgZGVmaW5lZCBhcyBlaXRoZXIgYmxhbmsgYW5kICI2NCIgZm9yIE1JUFM2NCBDUFVzLgorCitNSVBTUEtHU0ZYX0VORElBTiAtIEZvciBiaWdlbmRpYW4gaGFyZHdhcmUgdGhpcyBpcyBibGFuaywgb3RoZXJ3aXNlIGl0J3MKK2RlZmluZWQgYXMgImVsIi4KKworTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtPHR1bmU+IC0gSW4gdGhlIGRlZmF1bHQgdHVuaW5ncyBpdCBpcyBzZXQgdG8gdGhlCitzYW1lIHZhbHVlIGFzIFRVTkVfQVJDSC4gIEluIGN1c3RvbSwgb3B0aW1pemVkIHR1bmluZ3MsIHRoZSB2YWx1ZSBzaG91bGQKK2JlIG1vZGlmaWVkIHRvIG1vcmUgcHJlY2lzZWx5IGRlc2NyaWJlIHRoZSB0dW5pbmcuCisKK01JUFNQS0dTRlhfRlBVIC0gVGhlIHZhbHVlIGlzIHNldCB0byAiIiBvciAiLW5mIiwgd2hlcmUgIi1uZiIgaW5kaWNhdGVzIAordGhhdCB0aGUgdHVuZSBpcyB1c2luZyBhIG5vbi1mbG9hdGluZyBwb2ludCBBQkkuCisKK01JUFNQS0dTRlhfQUJJIC0gVGhpcyBpcyB1c2VkIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUgQUJJIHdoZW4gdGhlIHByZXZpb3VzCit2YWx1ZXMgYXJlIG5vdCBlbm91Z2ggdG8gZGlzdHJpbmd1aXNoIHRoZSBwYWNrYWdlLiAgIi1uMzIiIGlzIGFkZGVkIHdoZW4KK2J1aWxkaW5nIGZvciBOMzIgQUJJLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL21pcHMvYXJjaC1taXBzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYyNmQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKQEAgLTAsMCArMSwxMDIgQEAKKyMgTUlQUyBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorIyAxMiBkZWZpbmVkIEFCSXMsIGFsbCBjb21iaW5hdGlvbnMgb2Y6CisjICopIEJpZy9MaXR0bGUgRW5kaWFuCisjICopIEhhcmR3YXJlL1NvZnR3YXJlIEZsb2F0aW5nIFBvaW50CisjICopIG8zMiwgbjMyLCBuNjQgQUJJCisKK0RFRkFVTFRUVU5FID89ICJtaXBzIgorCisjIEVuZGlhbmVzcworVFVORVZBTElEW2JpZ2VuZGlhbl0gPSAiRW5hYmxlIGJpZy1lbmRpYW4gbW9kZSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJiaWdlbmRpYW4iLCAiIC1tZWIiLCAiIC1tZWwiLCBkKX0iCisKKyMgQUJJIGZsYWdzCitUVU5FVkFMSURbbzMyXSA9ICJNSVBTIG8zMiBBQkkiCitUVU5FQ09ORkxJQ1RTW28zMl0gPSAibjMyIG42NCIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJvMzIiLCAiIC1tYWJpPTMyIiwgIiIsIGQpfSIKKworVFVORVZBTElEW24zMl0gPSAiTUlQUzY0IG4zMiBBQkkiCitUVU5FQ09ORkxJQ1RTW24zMl0gPSAibzMyIG42NCIKK0FCSUVYVEVOU0lPTiAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiwgIm4zMiIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiwgIiAtbWFiaT1uMzIiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbbjY0XSA9ICJNSVBTNjQgbjY0IEFCSSIKK1RVTkVDT05GTElDVFNbbjY0XSA9ICJvMzIgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm42NCIsICIgLW1hYmk9NjQiLCAiIiwgZCl9IgorCisjIEZsb2F0aW5nIHBvaW50CitUVU5FVkFMSURbZnB1LWhhcmRdID0gIlVzZSBoYXJkd2FyZSBGUFUiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LWhhcmQiLCAiIC1taGFyZC1mbG9hdCIsICIgLW1zb2Z0LWZsb2F0IiwgZCl9IgorVEFSR0VUX0ZQVSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIsICIiLCAic29mdCIsIGQpfSIKKworIyBQYWNrYWdlIG5hbWluZworTUlQU1BLR1NGWF9FTkRJQU4gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiIsICJlbCIsIGQpfSIKK01JUFNQS0dTRlhfQllURSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuNjQiICwgIjY0IiwgIiIsIGQpfSIKK01JUFNQS0dTRlhfQllURSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibjMyIiAsICI2NCIsICIiLCBkKX0iCitNSVBTUEtHU0ZYX0ZQVSA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJmcHUtaGFyZCIgLCAiIiwgIi1uZiIsIGQpfSIKK01JUFNQS0dTRlhfQUJJID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm4zMiIsICItbjMyIiwgIiIsIGQpfSIKKworVFVORV9BUkNIID0gIm1pcHMke01JUFNQS0dTRlhfQllURX0ke01JUFNQS0dTRlhfRU5ESUFOfSIKK1RVTkVfUEtHQVJDSCA9ICIke01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLSR7REVGQVVMVFRVTkV9fSR7TUlQU1BLR1NGWF9GUFV9JHtNSVBTUEtHU0ZYX0FCSX0iCisKKyMgQmFzZSB0dW5lcworQVZBSUxUVU5FUyArPSAibWlwcyBtaXBzNjQtbjMyIG1pcHM2NCBtaXBzZWwgbWlwczY0ZWwtbjMyIG1pcHM2NGVsIG1pcHMtbmYgbWlwczY0LW5mLW4zMiBtaXBzNjQtbmYgbWlwc2VsLW5mIG1pcHM2NGVsLW5mLW4zMiBtaXBzNjRlbC1uZiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzID0gIm8zMiBiaWdlbmRpYW4gZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHMgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwcyA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwcyA9ICJtaXBzIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMiA9ICJuMzIgYmlnZW5kaWFuIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjQtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0LW4zMiA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0LW4zMiA9ICJtaXBzNjQtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ID0gIm42NCBiaWdlbmRpYW4gZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHM2NCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NCA9ICIke1RVTkVfQVJDSH0iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczY0ID0gIm1pcHM2NCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHNlbCA9ICJvMzIgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHNlbCA9ICJsaWIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzZWwgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHNlbCA9ICJtaXBzZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbC1uMzIgPSAibjMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbC1uMzIgPSAibGliMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjRlbC1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsLW4zMiA9ICJtaXBzNjRlbC1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzNjRlbCA9ICJuNjQgZnB1LWhhcmQiCitCQVNFX0xJQl90dW5lLW1pcHM2NGVsID0gImxpYjY0IgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NGVsID0gIm1pcHM2NGVsIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwcy1uZiA9ICJvMzIgYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1taXBzLW5mID0gImxpYiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMtbmYgPSAibWlwcy1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uZi1uMzIgPSAibjMyIGJpZ2VuZGlhbiIKK0JBU0VfTElCX3R1bmUtbWlwczY0LW5mLW4zMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NC1uZi1uMzIgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uZi1uMzIgPSAibWlwczY0LW5mLW4zMiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHM2NC1uZiA9ICJuNjQgYmlnZW5kaWFuIgorQkFTRV9MSUJfdHVuZS1taXBzNjQtbmYgPSAibGliNjQiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzNjQtbmYgPSAiJHtUVU5FX0FSQ0h9IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHM2NC1uZiA9ICJtaXBzNjQtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWwtbmYgPSAibzMyIgorQkFTRV9MSUJfdHVuZS1taXBzZWwtbmYgPSAibGliIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwc2VsLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzZWwtbmYgPSAibWlwc2VsLW5mIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIm4zMiIKK0JBU0VfTElCX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gImxpYjMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczY0ZWwtbmYtbjMyID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uZi1uMzIgPSAibWlwczY0ZWwtbmYtbjMyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0ZWwtbmYgPSAibjY0IgorQkFTRV9MSUJfdHVuZS1taXBzNjRlbC1uZiA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHM2NGVsLW5mID0gIiR7VFVORV9BUkNIfSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzNjRlbC1uZiA9ICJtaXBzNjRlbC1uZiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9SRUFETUUgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4N2ZiNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvUkVBRE1FCkBAIC0wLDAgKzEsMTcgQEAKKzIwMTIvMDMvMzAgLSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisgIC0gSW5pdGlhbCByZXZpc2lvbgorCitUaGVyZSBhcmUgNCBwcmltYXJ5IFBvd2VyUEMgQUJJcy4KKyMgKikgSGFyZC9Tb2Z0IEZsb2F0aW5nIFBvaW50CisjICopIDMyLWJpdC82NC1iaXQKKworVFVORV9BUkNIIGlzIGRlZmluZWQgYXMgZWl0aGVyICJwb3dlcnBjIiBvciAicG93ZXJwYzY0IiBiYXNlZCBvbiB0aGUgbTMyIAorb3IgbTY0IGZlYXR1cmUuCisKK01heSBvZiB0aGUgUG93ZXJQQyBwYWNrYWdlIGFyY2hpY3R1cmVzIGFyZSBiYXNlZCBvbiBsZWdhY3kgTGludXggbmFtZXMuCitIb3dldmVyLCBhIGdlbmVyYWwgbmFtaW5nIHNjaGVtZSBzaG91bGQgYmUgc2ltaWxhciB0bzogcHBjWzY0XVs8ZmFtaWx5Pl1bLW5mXS4KKyhOb3RlOiB0aGUgZGVmYXVsdCBwYWNrYWdlIGFyY2hpdGVjdHVyZXMgYXJlICJwb3dlcnBjIiBhbmQgInBvd2VycGM2NCIuKQorCitUVU5FX1BLR0FSQ0ggaXMgZGVmaW5lZCBhcyBUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfS4gIEFsbCAKK1Bvd2VyUEMgdHVuaW5ncyBhcmUgcmVxdWlyZWQgdG8gZGVmaW5lIFRVTkVfUEtHQVJDSF90dW5lLTx0dW5lPi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzZjYTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKQEAgLTAsMCArMSwzNCBAQAorIyBQb3dlciBBcmNoaXRlY3R1cmUgZGVmaW5pdGlvbgorIyBGb3VyIGRlZmluZWQgQUJJcywgYWxsIGNvbWJpbmF0aW9ucyBvZjoKKyMgKikgSGFyZC9Tb2Z0IEZsb2F0aW5nIFBvaW50CisjICopIDMyLWJpdC82NC1iaXQKKworREVGQVVMVFRVTkUgPz0gInBvd2VycGMiCisKK1RVTkVfUEtHQVJDSCA9ICIke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fSIKK0FCSUVYVEVOU0lPTiA/PSAiIgorCitUVU5FVkFMSURbbTMyXSA9ICJQb3dlciBFTEYzMiBzdGFuZGFyZCBBQkkiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIiAtbTMyIiwgIiIsIGQpfSIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgInBvd2VycGMiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbZnB1LWhhcmRdID0gIlVzZSBoYXJkd2FyZSBGUFUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1oYXJkIiwgIiAtbWhhcmQtZmxvYXQiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbZnB1LXNvZnRdID0gIlVzZSBzb2Z0d2FyZSBGUFUuIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImZwdS1zb2Z0IiwgIiAtbXNvZnQtZmxvYXQiLCAiIiwgZCl9IgorVEFSR0VUX0ZQVSAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiZnB1LXNvZnQiLCAic29mdCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthbHRpdmVjXSA9ICJBbHRpdmVjIgorCisjIEJhc2ljIHR1bmUgZGVmaW5pdGlvbnMKK0FWQUlMVFVORVMgKz0gInBvd2VycGMgcG93ZXJwYy1uZiIgCitUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwYy1uZiA9ICJtMzIgZnB1LXNvZnQiCitCQVNFX0xJQl90dW5lLXBvd2VycGMtbmYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcG93ZXJwYy1uZiA9ICJwb3dlcnBjLW5mIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGMtbmYgPSAicG93ZXJwYy1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGMgPSAibTMyIGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXBvd2VycGMgPSAicG93ZXJwYyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjID0gInBvd2VycGMiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDc2ZGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYzY0LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicG93ZXJwYzY0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitUVU5FVkFMSURbbTY0XSA9ICJQb3dlciBFTEY2NCBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW202NF0gPSAibTMyIG5mIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIgLW02NCIsICIiLCBkKX0iCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAibTY0IiBdLCAicG93ZXJwYzY0IiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicG93ZXJwYzY0IgorVFVORV9GRUFUVVJFU190dW5lLXBvd2VycGM2NCA/PSAibTY0IGZwdS1oYXJkIgorQkFTRV9MSUJfdHVuZS1wb3dlcnBjNjQgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wb3dlcnBjNjQgPSAicG93ZXJwYzY0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NCA9ICJwb3dlcnBjNjQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWMwYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYwpAQCAtMCwwICsxLDI5IEBACitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC94c2VydmVyID89ICJ4c2VydmVyLXhvcmciCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9lZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbCA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMxID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczIgPz0gIm1lc2EiCisKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1zd3Jhc3QnLCAnJywgZCl9IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQtZXZkZXYgXAorICAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQiCisKK01BQ0hJTkVfRkVBVFVSRVMgPSAiYWxzYSBibHVldG9vdGggdXNiZ2FkZ2V0IHNjcmVlbiIKKworTUFDSElORU9WRVJSSURFUyA9LiAicWVtdWFsbDoiCisKK0lNQUdFX0ZTVFlQRVMgKz0gInRhci5iejIgZXh0NCIKKworIyBEb24ndCBpbmNsdWRlIGtlcm5lbHMgaW4gc3RhbmRhcmQgaW1hZ2VzCitSREVQRU5EU19rZXJuZWwtYmFzZSA9ICIiCisKKyMgVXNlIGEgY29tbW9uIGtlcm5lbCByZWNpcGUgZm9yIGFsbCBRRU1VIG1hY2hpbmVzCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz0gImxpbnV4LXlvY3RvIgorCitFWFRSQV9JTUFHRURFUEVORFMgKz0gInFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIKKworIyBQcm92aWRlIHRoZSBuZnMgc2VydmVyIGtlcm5lbCBtb2R1bGUgZm9yIGFsbCBxZW11IGltYWdlcworS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9wbi1saW51eC15b2N0byA9ICIgZmVhdHVyZXMvbmZzZC9uZnNkLWVuYWJsZS5zY2MiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRSBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTFhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NoL1JFQURNRQpAQCAtMCwwICsxLDExIEBACisyMDEyLzAzLzMwIC0gTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorIC0gSW5pdGlhbCBSZXZpc2lvbgorCitCb3RoIGJpZyBlbmRpYW4gYW5kIGxpdHRsZSBlbmRpYW4gYXJlIGRlZmluZWQgZm9yIFNILgorCitFeHBlcmltZW50YWwgLS0gU0ggdHVuaW5ncyBoYXZlIG5vdCBiZWVuIHZhbGlkYXRlZC4KKworVGhlIFRVTkVfQVJDSCBpcyBkZWZpbmVkIGFzICR7VFVORV9BUkNIX3R1bmUtJHtERUZBVUxUVFVORX19LgorCitUaGUgVFVORV9QS0dBUkNIIGlzIGRlZmluZCBhcyAke1RVTkVfUEtHQVJDSF90dW5lLSR7REVGQVVMVFRVTkV9fS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkNGNhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc2gvYXJjaC1zaC5pbmMKQEAgLTAsMCArMSw5IEBACisjIFNIIEFyY2hpdGVjdHVyZSBkZWZpbml0aW9uCisKK0RFRkFVTFRUVU5FID89ICJzaCIKKworVFVORV9BUkNIID0gIiR7VFVORV9BUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorVFVORV9QS0dBUkNIID0gIiR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19IgorCitUVU5FVkFMSURbYmlnZW5kaWFuXSA9ICJFbmFibGVkIGJpZy1lbmRpYW4gbW9kZS4iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYmlnZW5kaWFuIiwgIiAtbWIiLCAiIC1tbCIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvc29jLWZhbWlseS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjA4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3NvYy1mYW1pbHkuaW5jCkBAIC0wLDAgKzEsMyBAQAorIyBBZGQgU09DX0ZBTUlMWSB0byBtYWNoaW5lIG92ZXJyaWRlcyBzbyB3ZSBnZXQgYWNjZXNzIHRvIGUuZy4gJ29tYXAzJyBhbmQgJ3RpMzM1eCcKK1NPQ19GQU1JTFkgPz89ICIiCitNQUNISU5FT1ZFUlJJREVTID0uICIke0BbJycsICcke1NPQ19GQU1JTFl9OiddWycke1NPQ19GQU1JTFl9JyAhPSAnJ119IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTExMzZqZi1zLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExMzFiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm0xMTM2amYtcy5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY2IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY2LmluYworCitUVU5FVkFMSURbYXJtMTEzNmpmc10gPSAiRW5hYmxlIGFybTExMzZqZnMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtMTEzNmpmcyIsICIgLW10dW5lPWFybTExMzZqZi1zIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYXJtMTEzNmpmcyIKK0FSTVBLR0FSQ0hfdHVuZS1hcm0xMTM2amZzID0gImFybTExMzZqZnMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtMTEzNmpmcyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12Nn0gYXJtMTEzNmpmcyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm0xMTM2amZzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY2fSBhcm0xMTM2amZzLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05MjB0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTJlYWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyMHQuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NHQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFthcm05MjB0XSA9ICJFbmFibGUgYXJtOTIwdCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm05MjB0IiwgIiAtbXR1bmU9YXJtOTIwdCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImFybTkyMHQiCitBUk1QS0dBUkNIX3R1bmUtYXJtOTIwdCA9ICJhcm05MjB0IgorVFVORV9GRUFUVVJFU190dW5lLWFybTkyMHQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0fSBhcm05MjB0IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTkyMHQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjR0fSBhcm05MjB0IGFybTkyMHR0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOTI2ZWpzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzVlNGUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY1dGUiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjUtZHNwLmluYworCitUVU5FVkFMSURbYXJtOTI2ZWpzXSA9ICJFbmFibGUgYXJtOTI2ZWpzIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTkyNmVqcyIsICIgLW10dW5lPWFybTkyNmVqLXMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05MjZlanMiCitBUk1QS0dBUkNIX3R1bmUtYXJtOTI2ZWpzID0gImFybTkyNmVqcyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05MjZlanMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjV0ZX0gYXJtOTI2ZWpzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTkyNmVqcyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NXRlfSBhcm05MjZlanN0ZSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1hcm05dGRtaS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTU3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtOXRkbWkuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NHQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFthcm05dGRtaV0gPSAiRW5hYmxlIGFybTl0ZG1pIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImFybTl0ZG1pIiwgIiAtbXR1bmU9YXJtOXRkbWkiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJhcm05dGRtaSIKK0FSTVBLR0FSQ0hfdHVuZS1hcm05dGRtaSA9ICJhcm05dGRtaSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1hcm05dGRtaSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NHR9IGFybTl0ZG1pIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybTl0ZG1pID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY0dH0gYXJtOXRkbWl0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWF0b20uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMWJiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXRvbS5pbmMKQEAgLTAsMCArMSwyIEBACisjIEF0b20gdHVuaW5ncyBhcmUgdGhlIHNhbWUgYXMgY29yZTIgZm9yIG5vdy4uLgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWMzLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYzI4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jMy5pbmMKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisKK1RVTkVWQUxJRFtjM10gPSAiVklBIEN5cml4IElJSSBvciBWSUEgQzMgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyIKK1RVTkVDT05GTElDVFNbYzNdID0gIm02NCBteDMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImMzIiwgIiAtbWFyY2g9YzMgLW10dW5lPWMzIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiYzMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtYzMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjMyIKK0JBU0VfTElCU190dW5lLWMzID0gIiR7QkFTRV9MSUJfdHVuZS14ODZ9IgorIyBUaGUgZm9sbG93aW5nIHNob3VsZCBsaWtlbHkgYmUgc29tZXRoaW5nIG90aGVyIHRoZW4gaTU4Ni4uLgorVFVORV9QS0dBUkNIX3R1bmUtYzMgPSAiaTU4NiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jMyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14ODZ9IGkzODYgaTQ4NiBpNTg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmUyLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0Y2I3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlMi5pbmMKQEAgLTAsMCArMSwzOCBAQAorIyBTZXR0aW5ncyBmb3IgdGhlIEdDQygxKSBjcHUtdHlwZSAiY29yZTIiOgorIworIyAgICAgIEludGVsIENvcmUyIENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwgU1NFMiwgU1NFMyBhbmQgU1NTRTMKKyMgICAgICBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKyMKKyMgVGhpcyB0dW5lIGlzIHJlY29tbWVuZGVkIGZvciB0aGUgSW50ZWwgQ29yZSAyIENQVSBmYW1pbHksIGluY2x1ZGluZyBDb25yb2UsCisjIE1lcm9tIGFuZCBiZXlvbmQsIGFzIHdlbGwgYXMgdGhlIGZpcnN0IEF0b20gQ1BVcywgRGlhbW9uZHZpbGxlLCBhbmQgYmV5b25kLgorIworREVGQVVMVFRVTkUgPz0gImNvcmUyLTMyIgorCisjIFNldCB4ODYgdGFyZ2V0IGFyY2ggdG8gaTY4Niwgc28gdGhhdCBnbGliYyBlbmFibGVzIFNTRSBvcHRpbWlzZWQgbWVtY3B5LCBldGMuCitYODZBUkNIMzIgPz0gImk2ODYiCisKKyMgSW5jbHVkZSB0aGUgcHJldmlvdXMgdHVuZSB0byBwdWxsIGluIFBBQ0tBR0VfRVhUUkFfQVJDSFMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYworCisjIEV4dHJhIHR1bmUgZmVhdHVyZXMKK1RVTkVWQUxJRFtjb3JlMl0gPSAiRW5hYmxlIGNvcmUyIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcmUyIiwgIiAtbWFyY2g9Y29yZTIgLW10dW5lPWNvcmUyIC1tc3NlMyAtbWZwbWF0aD1zc2UiLCAiIiwgZCl9IgorCisjIEV4dHJhIHR1bmUgc2VsZWN0aW9ucworQVZBSUxUVU5FUyArPSAiY29yZTItMzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZTItMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBjb3JlMiIKK0JBU0VfTElCX3R1bmUtY29yZTItMzIgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtY29yZTItMzIgPSAiY29yZTItMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItMzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaTU4Nn0gY29yZTItMzIiCisKK0FWQUlMVFVORVMgKz0gImNvcmUyLTY0IgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXg4Ni02NH0gY29yZTIiCitCQVNFX0xJQl90dW5lLWNvcmUyLTY0ID0gImxpYjY0IgorVFVORV9QS0dBUkNIX3R1bmUtY29yZTItNjQgPSAiY29yZTItNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2LTY0fSBjb3JlMi02NCIKKworQVZBSUxUVU5FUyArPSAiY29yZTItNjQteDMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmUyLTY0LXgzMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQteDMyfSBjb3JlMiIKK0JBU0VfTElCX3R1bmUtY29yZTItNjQteDMyID0gImxpYngzMiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmUyLTY0LXgzMiA9ICJjb3JlMi02NC14MzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjQteDMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NC14MzJ9IGNvcmUyLTY0LXgzMiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcmVpNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjZjkzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3JlaTcuaW5jCkBAIC0wLDAgKzEsMzUgQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgImNvcmVpNyI6CisjCisjICAgICBJbnRlbCBDb3JlIGk3IENQVSB3aXRoIDY0LWJpdCBleHRlbnNpb25zLCBNTVgsIFNTRSwgU1NFMiwgU1NFMywgU1NTRTMsIFNTRTQuMQorIyAgICAgYW5kIFNTRTQuMiBpbnN0cnVjdGlvbiBzZXQgc3VwcG9ydC4KKyMKKyMgVGhpcyB0dW5lIGlzIHJlY29tbWVuZGVkIGZvciBJbnRlbCBOZWhhbGVtIGFuZCBTaWx2ZXJtb250IChlLmcuIEJheSBUcmFpbCkgQ1BVcworIyAoYW5kIGJleW9uZCkuCisjCitERUZBVUxUVFVORSA/PSAiY29yZWk3LTY0IgorCisjIFB1bGwgaW4gdGhlIHByZXZpb3VzIHR1bmUgaW4gdG8gcHVsbCBpbiBQQUNLQUdFX0VYVFJBX0FSQ0hTCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCisKKyMgRXh0cmEgdHVuZSBmZWF0dXJlcworVFVORVZBTElEW2NvcmVpN10gPSAiRW5hYmxlIGNvcmVpNyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlaTciLCAiIC1tYXJjaD1jb3JlaTcgLW10dW5lPWNvcmVpNyAtbWZwbWF0aD1zc2UgLW1zc2U0LjIiLCAiIiwgZCl9IgorCisjIEV4dHJhIHR1bmUgc2VsZWN0aW9ucworQVZBSUxUVU5FUyArPSAiY29yZWk3LTMyIgorVFVORV9GRUFUVVJFU190dW5lLWNvcmVpNy0zMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGNvcmVpNyIKK0JBU0VfTElCX3R1bmUtY29yZWk3LTMyID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy0zMiA9ICJjb3JlaTctMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZWk3LTMyID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyfSBjb3JlaTctMzIiCisKK0FWQUlMVFVORVMgKz0gImNvcmVpNy02NCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3JlaTctNjQgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2LTY0fSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLWNvcmVpNy02NCA9ICJjb3JlaTctNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZWk3LTY0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmUyLTY0fSBjb3JlaTctNjQiCisKK0FWQUlMVFVORVMgKz0gImNvcmVpNy02NC14MzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29yZWk3LTY0LXgzMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQteDMyfSBjb3JlaTciCitCQVNFX0xJQl90dW5lLWNvcmVpNy02NC14MzIgPSAibGlieDMyIgorVFVORV9QS0dBUkNIX3R1bmUtY29yZWk3LTY0LXgzMiA9ICJjb3JlaTctNjQteDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcmVpNy02NC14MzIgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29yZTItNjQteDMyfSBjb3JlaTctNjQteDMyIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTI5Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGExNS5pbmMKQEAgLTAsMCArMSwzNiBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YS1uZW9uIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleGExNV0gPSAiRW5hYmxlIENvcnRleC1BMTUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTE1IiwgIiAtbXR1bmU9Y29ydGV4LWExNSIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNSBjb3J0ZXhhMTV0IGNvcnRleGExNS1uZW9uIGNvcnRleGExNXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTUgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNXQgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNS1uZW9uID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0LW5lb24gPSAiY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTUtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhMTUtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXQgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE1LXZmcCBjb3J0ZXhhMTV0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE1LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGExNS12ZnAgY29ydGV4YTE1LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXQtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGExNS12ZnAgY29ydGV4YTE1LXZmcC1uZW9uIGNvcnRleGExNXQyLXZmcCBjb3J0ZXhhMTV0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGExNWhmIGNvcnRleGExNXRoZiBjb3J0ZXhhMTVoZi1uZW9uIGNvcnRleGExNXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNWhmID0gImNvcnRleGExNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhMTV0aGYgPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNWhmLW5lb24gPSAiY29ydGV4YTE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNXRoZi1uZW9uID0gImNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTVoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNWhmLW5lb24gPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGExNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTVoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE1aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNXRoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTV0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTVoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmLW5lb259IGNvcnRleGExNWhmLXZmcCBjb3J0ZXhhMTVoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTV0aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE1aGYtdmZwIGNvcnRleGExNWhmLXZmcC1uZW9uIGNvcnRleGExNXQyaGYtdmZwIGNvcnRleGExNXQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhMTcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzcxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTE3LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTE3XSA9ICJFbmFibGUgQ29ydGV4LUExNyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhMTciLCAiIC1tdHVuZT1jb3J0ZXgtYTE3IiwgIiIsIGQpfSIKKworIyBMaXR0bGUgRW5kaWFuIGJhc2UgY29uZmlncworQVZBSUxUVU5FUyArPSAiY29ydGV4YTE3IGNvcnRleGExN3QgY29ydGV4YTE3LW5lb24gY29ydGV4YTE3dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExNyA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3dCA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3LW5lb24gPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3QtbmVvbiA9ICJjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3QgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdH0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExNy1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExNyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F9IGNvcnRleGExNy12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhMTctdmZwIGNvcnRleGExN3QyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhMTctbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTctdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTE3LXZmcCBjb3J0ZXhhMTctdmZwLW5lb24gY29ydGV4YTE3dDItdmZwIGNvcnRleGExN3QyLXZmcC1uZW9uIgorCisjIFZGUCBUdW5lcworQVZBSUxUVU5FUyArPSAiY29ydGV4YTE3aGYgY29ydGV4YTE3dGhmIGNvcnRleGExN2hmLW5lb24gY29ydGV4YTE3dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3aGYgPSAiY29ydGV4YTE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGExN3RoZiA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3aGYtbmVvbiA9ICJjb3J0ZXhhMTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTE3dGhmLW5lb24gPSAiY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN2hmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3RoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhMTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTE3aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGExN3RoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN2hmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YWhmfSBjb3J0ZXhhMTdoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTE3dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN3QyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN2hmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTE3aGYtdmZwIGNvcnRleGExN2hmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGExN3RoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhMTdoZi12ZnAgY29ydGV4YTE3aGYtdmZwLW5lb24gY29ydGV4YTE3dDJoZi12ZnAgY29ydGV4YTE3dDJoZi12ZnAtbmVvbiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhNS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTUuaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhNV0gPSAiRW5hYmxlIENvcnRleC1BNSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhNSIsICIgLW10dW5lPWNvcnRleC1hNSIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGE1IGNvcnRleGE1dCBjb3J0ZXhhNS1uZW9uIGNvcnRleGE1dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1ID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dCA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNS1uZW9uID0gImNvcnRleGE1IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE1dC1uZW9uID0gImNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE1IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE1dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhNS12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGE1LXZmcCBjb3J0ZXhhNXQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhNS1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNS12ZnAgY29ydGV4YTUtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhNS12ZnAgY29ydGV4YTUtdmZwLW5lb24gY29ydGV4YTV0Mi12ZnAgY29ydGV4YTV0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGE1aGYgY29ydGV4YTV0aGYgY29ydGV4YTVoZi1uZW9uIGNvcnRleGE1dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTVoZiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNXRoZiA9ICJjb3J0ZXhhNSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNWhmLW5lb24gPSAiY29ydGV4YTUiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTV0aGYtbmVvbiA9ICJjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNWhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTV0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTUiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTVoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhNSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNXRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTVoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTVoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTV0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNXQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhNWhmLXZmcCBjb3J0ZXhhNWhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE1dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE1aGYtdmZwIGNvcnRleGE1aGYtdmZwLW5lb24gY29ydGV4YTV0MmhmLXZmcCBjb3J0ZXhhNXQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTcuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDA2OTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE3LmluYwpAQCAtMCwwICsxLDQyIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTddID0gIkVuYWJsZSBDb3J0ZXgtQTcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTciLCAiIC1tdHVuZT1jb3J0ZXgtYTciLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhNyBjb3J0ZXhhN3QgY29ydGV4YTctbmVvbiBjb3J0ZXhhN3QtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhNyA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3QgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTctbmVvbiA9ICJjb3J0ZXhhNyIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICJjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNyA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhNy1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhNyIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhN3QtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTctdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhNy12ZnAgY29ydGV4YTd0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTctbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTctdmZwIGNvcnRleGE3LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTctdmZwIGNvcnRleGE3LXZmcC1uZW9uIGNvcnRleGE3dDItdmZwIGNvcnRleGE3dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhN2hmIGNvcnRleGE3dGhmIGNvcnRleGE3aGYtbmVvbiBjb3J0ZXhhN3RoZi1uZW9uIGNvcnRleGE3aGYtbmVvbi12ZnB2NCBjb3J0ZXhhN3RoZi1uZW9uLXZmcHY0IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3aGYgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTd0aGYgPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTdoZi1uZW9uID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmLW5lb24gPSAiY29ydGV4YTciCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTdoZi1uZW9uLXZmcHY0ID0gImNvcnRleGE3IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE3dGhmLW5lb24tdmZwdjQgPSAiY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTdoZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE3IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbi12ZnB2NH0gY29ydGV4YTciCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTd0aGYtbmVvbi12ZnB2NCA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb24tdmZwdjR9IGNvcnRleGE3IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE3aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTd0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN2hmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhN3RoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN2hmLXZmcC1uZW9uIGNvcnRleGE3dDJoZi12ZnAgY29ydGV4YTd0MmhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE3aGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9uLXZmcHY0fSBjb3J0ZXhhN2hmLXZmcCBjb3J0ZXhhN2hmLXZmcC1uZW9uIGNvcnRleGE3aGYtdmZwLXZmcHY0LW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTd0aGYtbmVvbi12ZnB2NCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0aGYtbmVvbi12ZnB2NH0gY29ydGV4YTdoZi12ZnAgY29ydGV4YTdoZi12ZnAtbmVvbiBjb3J0ZXhhN3QyaGYtdmZwIGNvcnRleGE3dDJoZi12ZnAtbmVvbiBjb3J0ZXhhN2hmLXZmcC12ZnB2NC1uZW9uIGNvcnRleGE3dDJoZi12ZnAtdmZwdjQtbmVvbiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhhOC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MTUzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTguaW5jCkBAIC0wLDAgKzEsMzYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12N2EtbmVvbiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhhOF0gPSAiRW5hYmxlIENvcnRleC1BOCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhhOCIsICIgLW10dW5lPWNvcnRleC1hOCIsICIiLCBkKX0iCisKKyMgTGl0dGxlIEVuZGlhbiBiYXNlIGNvbmZpZ3MKK0FWQUlMVFVORVMgKz0gImNvcnRleGE4IGNvcnRleGE4dCBjb3J0ZXhhOC1uZW9uIGNvcnRleGE4dC1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4ID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dCA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOC1uZW9uID0gImNvcnRleGE4IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE4dC1uZW9uID0gImNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXR9IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4LW5lb24gPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhLW5lb259IGNvcnRleGE4IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE4dC1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTgiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTggPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhfSBjb3J0ZXhhOC12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXR9IGNvcnRleGE4LXZmcCBjb3J0ZXhhOHQyLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOC12ZnAgY29ydGV4YTgtdmZwLW5lb24iCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0LW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdC1uZW9ufSBjb3J0ZXhhOC12ZnAgY29ydGV4YTgtdmZwLW5lb24gY29ydGV4YTh0Mi12ZnAgY29ydGV4YTh0Mi12ZnAtbmVvbiIKKworIyBWRlAgVHVuZXMKK0FWQUlMVFVORVMgKz0gImNvcnRleGE4aGYgY29ydGV4YTh0aGYgY29ydGV4YThoZi1uZW9uIGNvcnRleGE4dGhmLW5lb24iCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YThoZiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOHRoZiA9ICJjb3J0ZXhhOCIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOGhmLW5lb24gPSAiY29ydGV4YTgiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTh0aGYtbmVvbiA9ICJjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTh0aGYgPz0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTgiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YThoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhOCIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOHRoZi1uZW9uID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGYtbmVvbn0gY29ydGV4YTgiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YThoZiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZn0gY29ydGV4YThoZi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTh0aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmfSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOHQyaGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4aGYtbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2FoZi1uZW9ufSBjb3J0ZXhhOGhmLXZmcCBjb3J0ZXhhOGhmLXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE4dGhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE4aGYtdmZwIGNvcnRleGE4aGYtdmZwLW5lb24gY29ydGV4YTh0MmhmLXZmcCBjb3J0ZXhhOHQyaGYtdmZwLW5lb24iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4YTkuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDAzOTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleGE5LmluYwpAQCAtMCwwICsxLDM2IEBACitERUZBVUxUVFVORSA/PSAiYXJtdjdhLW5lb24iCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjdhLmluYworCitUVU5FVkFMSURbY29ydGV4YTldID0gIkVuYWJsZSBDb3J0ZXgtQTkgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiY29ydGV4YTkiLCAiIC1tdHVuZT1jb3J0ZXgtYTkiLCAiIiwgZCl9IgorCisjIExpdHRsZSBFbmRpYW4gYmFzZSBjb25maWdzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOSBjb3J0ZXhhOXQgY29ydGV4YTktbmVvbiBjb3J0ZXhhOXQtbmVvbiIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOSA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXQgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTktbmVvbiA9ICJjb3J0ZXhhOSIKK0FSTVBLR0FSQ0hfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICJjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOS1uZW9uID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YS1uZW9ufSBjb3J0ZXhhOSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhhOXQtbmVvbiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0LW5lb259IGNvcnRleGE5IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YX0gY29ydGV4YTktdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBjb3J0ZXhhOS12ZnAgY29ydGV4YTl0Mi12ZnAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4YTktbmVvbiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2EtbmVvbn0gY29ydGV4YTktdmZwIGNvcnRleGE5LXZmcC1uZW9uIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dC1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXQtbmVvbn0gY29ydGV4YTktdmZwIGNvcnRleGE5LXZmcC1uZW9uIGNvcnRleGE5dDItdmZwIGNvcnRleGE5dDItdmZwLW5lb24iCisKKyMgVkZQIFR1bmVzCitBVkFJTFRVTkVTICs9ICJjb3J0ZXhhOWhmIGNvcnRleGE5dGhmIGNvcnRleGE5aGYtbmVvbiBjb3J0ZXhhOXRoZi1uZW9uIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5aGYgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTl0aGYgPSAiY29ydGV4YTkiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4YTloZi1uZW9uID0gImNvcnRleGE5IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleGE5dGhmLW5lb24gPSAiY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTloZiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5dGhmID89ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12N2F0aGZ9IGNvcnRleGE5IgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleGE5aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTkiCitUVU5FX0ZFQVRVUkVTX3R1bmUtY29ydGV4YTl0aGYtbmVvbiA/PSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjdhdGhmLW5lb259IGNvcnRleGE5IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5aGYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGZ9IGNvcnRleGE5aGYtdmZwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWNvcnRleGE5dGhmID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTl0MmhmLXZmcCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOWhmLW5lb24gPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhaGYtbmVvbn0gY29ydGV4YTloZi12ZnAgY29ydGV4YTloZi12ZnAtbmVvbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhhOXRoZi1uZW9uID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY3YXRoZi1uZW9ufSBjb3J0ZXhhOWhmLXZmcCBjb3J0ZXhhOWhmLXZmcC1uZW9uIGNvcnRleGE5dDJoZi12ZnAgY29ydGV4YTl0MmhmLXZmcC1uZW9uIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0xLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2NTI3OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMS5pbmMKQEAgLTAsMCArMSwxMSBAQAorREVGQVVMVFRVTkUgPz0gImFybXY3YSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhtMV0gPSAiRW5hYmxlIENvcnRleC1NMSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhtMSIsICIgLW10dW5lPWNvcnRleC1tMSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleG0xIgorQVJNUEtHQVJDSF90dW5lLWNvcnRleG0xID0gImNvcnRleG0xIgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleG0xID0gIiR7VFVORV9GRUFUVVJFU190dW5lLWFybXY3YX0gY29ydGV4bTEiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4bTEgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gY29ydGV4bTEtdmZwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWNvcnRleG0zLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JjNGMwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhtMy5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gImNvcnRleG0zIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY3YS5pbmMKKworVFVORVZBTElEW2NvcnRleG0zXSA9ICJFbmFibGUgQ29ydGV4LU0zIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcnRleG0zIiwgIiAtbXR1bmU9Y29ydGV4LW0zIiwgIiIsIGQpfSIKKworVFVORVZBTElEW2FybXY3bV0gPSAiRW5hYmxlIENvcnRleC1NMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJhcm12N20iLCAiIC1tYXJjaD1hcm12Ny1tIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAiY29ydGV4bTMiCitBUk1QS0dBUkNIX3R1bmUtY29ydGV4bTMgPSAiYXJtdjdtIgorVFVORV9GRUFUVVJFU190dW5lLWNvcnRleG0zID0gImFybXY3bSB2ZnAgY29ydGV4bTMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtY29ydGV4bTMgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjdhdH0gYXJtdjdtLXZmcCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1jb3J0ZXhyNC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTY0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29ydGV4cjQuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJjb3J0ZXhyNCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12N2EuaW5jCisKK1RVTkVWQUxJRFtjb3J0ZXhyNF0gPSAiRW5hYmxlIENvcnRleC1SNCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3J0ZXhyNCIsICIgLW10dW5lPWNvcnRleC1yNCIsICIiLCBkKX0iCisKK1RVTkVWQUxJRFthcm12N3JdID0gIkVuYWJsZSBDb3J0ZXgtUjQgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYXJtdjdyIiwgIiAtbWFyY2g9YXJtdjctciIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImNvcnRleHI0IgorQVJNUEtHQVJDSF90dW5lLWNvcnRleHI0ID0gImFybXY3ciIKK1RVTkVfRkVBVFVSRVNfdHVuZS1jb3J0ZXhyNCA9ICJhcm12N3IgdmZwIGNvcnRleHI0IGFybSB0aHVtYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1jb3J0ZXhyNCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12N2F0fSBhcm12N3ItdmZwIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtZXA5MzEyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTliNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWVwOTMxMi5pbmMKQEAgLTAsMCArMSwxMiBAQAorREVGQVVMVFRVTkUgPz0gImVwOTMxMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12NC5pbmMKKworVFVORVZBTElEW2VwOTMxMl0gPSAiRW5hYmxlIEludGVsIFBYQTI3eCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlcDkzMTIiLCAiIC1tYXJjaD1lcDkzMTIgLW10dW5lPWVwOTMxMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gImVwOTMxMiIKK0FSTVBLR0FSQ0hfdHVuZS1lcDkzMTIgPSAiZXA5MzEyIgorIyB0aGlzIHR1bmUgZG9lcyBub3QgaW5jbHVkZSBUVU5FX0ZFQVRVUkVTX3R1bmUtYXJtdjR0LCBzbyB0aGVyZSBpcyBubyBhcm12NCBUVU5FX0ZFQVRVUkVTID0+IG5vICd0JyBpbiBBUk1QS0dTRlhfVEhVTUIKK1RVTkVfRkVBVFVSRVNfdHVuZS1lcDkzMTIgPSAidGh1bWIgZXA5MzEyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWVwOTMxMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NHR9IGVwOTMxMiIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LW5scC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDYwMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni1ubHAuaW5jCkBAIC0wLDAgKzEsMTkgQEAKKyMgU2V0dGluZ3MgZm9yIHRoZSBHQ0MoMSkgY3B1LXR5cGUgInF1YXJrIjoKKyMKKyMKKyMKK0RFRkFVTFRUVU5FID89ICJpNTg2LW5scC0zMiIKKworIyBJbmNsdWRlIHRoZSBwcmV2aW91cyB0dW5lIHRvIHB1bGwgaW4gUEFDS0FHRV9FWFRSQV9BUkNIUworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisKKyMgeDg2IHdpdGggbm8gbG9jayBwcmVmaXgKK1RVTkVWQUxJRFtpNTg2LW5scF0gPSAiSUEzMiB3aXRoIExvY2sgUHJlZml4IG9taXR0ZWQiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiaTU4Ni1ubHAiLCAiIC1tYXJjaD1pNTg2IC1XYSwtbW9taXQtbG9jay1wcmVmaXg9eWVzIiwgIiIsIGQpfSIKKworIyBRdWFyayB0dW5lIGZlYXR1cmUKK0FWQUlMVFVORVMgPSAiaTU4Ni1ubHAtMzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtaTU4Ni1ubHAtMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUteDg2fSBpNTg2LW5scCIKK0JBU0VfTElCX3R1bmUtaTU4Ni1ubHAtMzIgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtaTU4Ni1ubHAtMzIgPSAiaTU4Ni1ubHAtMzIiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaTU4Ni1ubHAtMzIgPSAiaTU4Ni1ubHAtMzIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaTU4Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZiYjNjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1pNTg2LmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAiaTU4NiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCisKKyMgRXh0cmEgdHVuZSBmZWF0dXJlcworVFVORVZBTElEW2k1ODZdID0gIkVuYWJsZSBpNTg2IHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImk1ODYiLCAiIC1tYXJjaD1pNTg2IiwgIiIsIGQpfSIKKworIyBFeHRyYSB0dW5lIHNlbGVjdGlvbnMKK0FWQUlMVFVORVMgKz0gImk1ODYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtaTU4NiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS14ODZ9IGk1ODYiCitCQVNFX0xJQl90dW5lLWk1ODYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtaTU4NiA9ICJpNTg2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWk1ODYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2fSBpNTg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtaXdtbXh0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDhjYTBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWl3bW14dC5pbmMKQEAgLTAsMCArMSwxNCBAQAorIyBDb25maWd1cmF0aW9ucyBmb3IgdGhlIEludGVsIFBYQTI3eCBBcHBpY2F0aW9ucyBQcm9jZXNzb3IgRmFtaWx5LiAKKyMgUGxlYXNlIHVzZSB0dW5lLXhzY2FsZSBmb3IgUFhBMjU1L1BYQTI2eCBiYXNlZCBwcm9jZXNzb3JzLgorCitERUZBVUxUVFVORSA/PSAiaXdtbXh0IgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW2l3bW14dF0gPSAiRW5hYmxlIEludGVsIFBYQTI3eCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJpd21teHQiLCAiIC1tYXJjaD1pd21teHQgLW10dW5lPWl3bW14dCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gIml3bW14dCIKK0FSTVBLR0FSQ0hfdHVuZS1pd21teHQgPSAiaXdtbXh0IgorVFVORV9GRUFUVVJFU190dW5lLWl3bW14dCA9ICJ0aHVtYiBpd21teHQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtaXdtbXh0ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGV9IGl3bW14dCBpd21teHR0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTMyNmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMi5pbmMKQEAgLTAsMCArMSwyNSBAQAorREVGQVVMVFRVTkUgPz0gIm1pcHMzMiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9taXBzL2FyY2gtbWlwcy5pbmMKKworVFVORVZBTElEW21pcHMzMl0gPSAiRW5hYmxlIG1pcHMzMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVDT05GTElDVFNbbWlwczMyXSA9ICJuNjQgbjMyIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm1pcHMzMiIsICIgLW1hcmNoPW1pcHMzMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gIm1pcHMzMiBtaXBzMzJlbCBtaXBzMzItbmYgbWlwczMyZWwtbmYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwc30gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyID0gIm1pcHMzMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1taXBzMzIgPSAibWlwcyBtaXBzMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJlbCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWx9IG1pcHMzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMmVsID0gIm1pcHMzMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMmVsID0gIm1pcHNlbCBtaXBzMzJlbCIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMi1uZiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzLW5mfSBtaXBzMzIiCitNSVBTUEtHU0ZYX1ZBUklBTlRfdHVuZS1taXBzMzItbmYgPSAibWlwczMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMi1uZiA9ICJtaXBzLW5mIG1pcHMzMi1uZiIKKworVFVORV9GRUFUVVJFU190dW5lLW1pcHMzMmVsLW5mID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHNlbC1uZn0gbWlwczMyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMyZWwtbmYgPSAibWlwczMyZWwiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtbWlwczMyZWwtbmYgPSAibWlwc2VsLW5mIG1pcHMzMmVsLW5mIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkZWZmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKQEAgLTAsMCArMSwxNyBAQAorREVGQVVMVFRVTkUgPz0gIm1pcHMzMnIyIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczMyLmluYworCitUVU5FVkFMSURbbWlwczMycjJdID0gIkVuYWJsZSBtaXBzMzJyMiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVDT05GTElDVFNbbWlwczMycjJdID0gIm42NCBuMzIiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibWlwczMycjIiLCAiIC1tYXJjaD1taXBzMzJyMiIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gIm1pcHMzMnIyIG1pcHMzMnIyZWwiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzMzJyMiA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzfSBtaXBzMzJyMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW1pcHMzMnIyID0gIm1pcHMzMnIyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyID0gIm1pcHMgbWlwczMyIG1pcHMzMnIyIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczMycjJlbCA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1taXBzZWx9IG1pcHMzMnIyIgorTUlQU1BLR1NGWF9WQVJJQU5UX3R1bmUtbWlwczMycjJlbCA9ICJtaXBzMzJyMmVsIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLW1pcHMzMnIyZWwgPSAibWlwc2VsIG1pcHMzMmVsIG1pcHMzMnIyZWwiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTBlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtbWlwczY0LmluYwpAQCAtMCwwICsxLDMgQEAKK0RFRkFVTFRUVU5FID89ICJtaXBzNjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzMzJyMi5pbmMKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW9jdGVvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0ZDlkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1vY3Rlb24uaW5jCkBAIC0wLDAgKzEsMzIgQEAKK0RFRkFVTFRUVU5FID89Im9jdGVvbjIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1taXBzNjQuaW5jCisKK0FWQUlMVFVORVMgKz0gIm9jdGVvbjIgb2N0ZW9uMl82NCBvY3Rlb24zIG9jdGVvbjNfNjQiCisKK1RVTkVWQUxJRFtvY3Rlb24yXSA9ICJFbmFibGUgb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gb2N0ZW9uMiBzdXBwb3J0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm9jdGVvbjIiLCAiIC1tYXJjaD1vY3Rlb24yICIsICIiLGQpfSIKKworVFVORV9GRUFUVVJFU190dW5lLW9jdGVvbjIgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMn0gb2N0ZW9uMiIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uMiA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjIgPSAib2N0ZW9uMiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24yID0gIm1pcHM2NC1uMzIgb2N0ZW9uMi1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24yXzY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NH0gb2N0ZW9uMiIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uMl82NCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjJfNjQgPSAib2N0ZW9uMl82NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24yXzY0ID0gIm1pcHM2NCBvY3Rlb24yXzY0IgorCisKK1RVTkVWQUxJRFtvY3Rlb24zXSA9ICJFbmFibGUgb3B0aW1pemF0aW9uIHJlbGF0ZWQgdG8gb2N0ZW9uMyBzdXBwb3J0IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm9jdGVvbjMiLCAiIC1tYXJjaD1vY3Rlb24zICIsICIiLGQpfSIKKworVFVORV9GRUFUVVJFU190dW5lLW9jdGVvbjMgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtbWlwczY0LW4zMn0gb2N0ZW9uMyIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uMyA9ICJsaWIzMiIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjMgPSAib2N0ZW9uMyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24zID0gIm1pcHM2NC1uMzIgb2N0ZW9uMy1uMzIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1vY3Rlb24zXzY0ID0gIiR7VFVORV9GRUFUVVJFU190dW5lLW1pcHM2NH0gb2N0ZW9uMyIKK0JBU0VfTElCX3R1bmUtb2N0ZW9uM182NCA9ICJsaWI2NCIKK01JUFNQS0dTRlhfVkFSSUFOVF90dW5lLW9jdGVvbjNfNjQgPSAib2N0ZW9uM182NCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1vY3Rlb24zXzY0ID0gIm1pcHM2NCBvY3Rlb24zXzY0IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcG93ZXI1LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGJlODY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNS5pbmMKQEAgLTAsMCArMSwyMSBAQAorREVGQVVMVFRVTkUgPz0gInBwYzY0cDUiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW3Bvd2VyNV0gPSAiRW5hYmxlIElCTSBQb3dlcjUgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI1IiwgIiAtbWNwdT1wb3dlcjUiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNwNSBwcGM2NHA1IgorVFVORV9GRUFUVVJFU190dW5lLXBwY3A1ID0gIm0zMiBmcHUtaGFyZCBwb3dlcjUgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjcDUgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjcDUgPSAicHBjcDUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjcDUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjcDUiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NHA1ID0gIm02NCBmcHUtaGFyZCBwb3dlcjUgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRwNSA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0cDUgPSAicHBjNjRwNSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NHA1ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRwNSIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgcG93ZXI1IHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNSIsICItLXdpdGgtY3B1PXBvd2VyNSIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI1IiwgIi0td2l0aC1jcHU9cG93ZXI1IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2Mzc5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjYuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNwcjYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW3Bvd2VyNl0gPSAiRW5hYmxlIElCTSBQb3dlcjYgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI2IiwgIiAtbWNwdT1wb3dlcjYiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNwNiBwcGM2NHA2IgorVFVORV9GRUFUVVJFU190dW5lLXBwY3A2ID0gIm0zMiBmcHUtaGFyZCBwb3dlcjYgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjcDYgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjcDYgPSAicHBjcDYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjcDYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjcDYiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NHA2ID0gIm02NCBmcHUtaGFyZCBwb3dlcjYgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRwNiA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0cDYgPSAicHBjNjRwNiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NHA2ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRwNiIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgcG93ZXI2IHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNiIsICItLXdpdGgtY3B1PXBvd2VyNiIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI2IiwgIi0td2l0aC1jcHU9cG93ZXI2IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBvd2VyNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2OWU3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wb3dlcjcuaW5jCkBAIC0wLDAgKzEsMjEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNwcjciCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGM2NC5pbmMKKworVFVORVZBTElEW3Bvd2VyN10gPSAiRW5hYmxlIElCTSBQb3dlcjcgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI3IiwgIiAtbWNwdT1wb3dlcjciLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNwNyBwcGM2NHA3IgorVFVORV9GRUFUVVJFU190dW5lLXBwY3A3ID0gIm0zMiBmcHUtaGFyZCBwb3dlcjcgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjcDcgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjcDcgPSAicHBjcDciCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjcDcgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjcDciCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NHA3ID0gIm02NCBmcHUtaGFyZCBwb3dlcjcgYWx0aXZlYyIKK0JBU0VfTElCX3R1bmUtcHBjNjRwNyA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0cDcgPSAicHBjNjRwNyIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NHA3ID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRwNyIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgcG93ZXI3IHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBvd2VyNyIsICItLXdpdGgtY3B1PXBvd2VyNyIsICIiLCBkKX0iCitHTElCQ19FWFRSQV9PRUNPTkZfcG93ZXJwYyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicG93ZXI3IiwgIi0td2l0aC1jcHU9cG93ZXI3IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzQ3Ni5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVkMTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM0NzYuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGM0NzYiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM0NzZdID0gIkVuYWJsZSBwcGM0NzYgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNDc2IiwgIiAtbWNwdT00NzYiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGM0NzYiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjNDc2ID0gIm0zMiBmcHUtaGFyZCBwcGM0NzYiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM0NzYgPSAicHBjNDc2IgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzQ3NiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGM0NzYiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDQ3NiBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNDc2IiwgIi13aXRoLWNwdT00NzYiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzYwM2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NDRhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNjAzZS5pbmMKQEAgLTAsMCArMSwxNCBAQAorREVGQVVMVFRVTkUgPz0gInBwYzYwM2UiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGM2MDNlXSA9ICJFbmFibGUgcHBjNjAzZSBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM2MDNlIiwgIiAtbWNwdT02MDNlIiwgIiIsIGQpfSIKKworQVZBSUxUVU5FUyArPSAicHBjNjAzZSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2MDNlID0gIm0zMiBmcHUtaGFyZCBwcGM2MDNlIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjNjAzZSA9ICJwcGM2MDNlIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwYzYwM2UgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjNjAzZSIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgNjAzZSBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjNjAzZSIsICItd2l0aC1jcHU9NjAzZSIsICIiLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjNzQwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjMDQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGM3NDAwLmluYwpAQCAtMCwwICsxLDE0IEBACitERUZBVUxUVFVORSA/PSAicHBjNzQwMCIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwYzc0MDBdID0gIkVuYWJsZSBwcGM3NDAwIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwYzc0MDAiLCAiIC1tY3B1PTc0MDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGM3NDAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwYzc0MDAgPSAibTMyIGZwdS1oYXJkIHBwYzc0MDAgYWx0aXZlYyIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzc0MDAgPSAicHBjNzQwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM3NDAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwYzc0MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IDc0MDAgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCisjR0xJQkNfRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGM3NDAwIiwgIi0td2l0aC1jcHU9cG93ZXI0IiwgIiIsIGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2UzMDBjMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOTUwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzIuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlMzAwYzIiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlMzAwYzJdID0gIkVuYWJsZSBwcGNlMzAwYzIgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTMwMGMyIiwgIiAtbWNwdT1lMzAwYzIiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlMzAwYzIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMyID0gIm0zMiBmcHUtc29mdCBwcGNlMzAwYzIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlMzAwYzIgPSAicHBjZTMwMGMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2UzMDBjMiA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjLW5mfSBwcGNlMzAwYzIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlMzAwYzMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOWNmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTMwMGMzLmluYwpAQCAtMCwwICsxLDIzIEBACitERUZBVUxUVFVORSA/PSAicHBjZTMwMGMzIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjLmluYworCitBVkFJTFRVTkVTICs9ICJwcGNlMzAwYzMgcHBjZTMwMGMzLW5mIgorCisjIGhhcmQtZmxvYXQKK1RVTkVWQUxJRFtwcGNlMzAwYzNdID0gIkVuYWJsZSBwcGNlMzAwYzMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTMwMGMzID0gIiR7VFVORV9GRUFUVVJFU190dW5lLXBvd2VycGN9IHBwY2UzMDBjMyIKK1RVTkVfUEtHQVJDSF90dW5lLXBwY2UzMDBjMyA9ICJwcGNlMzAwYzMiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTMwMGMzID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGN9IHBwY2UzMDBjMyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlMzAwYzMiLCAiIC1tY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKKyMgZ2xpYmMgY29uZmlnIG9wdGlvbnMgdG8gbWFrZSB1c2Ugb2YgZTMwMGMzICg2MDNlKSBzcGVjaWZpYyBzcXJ0L3NxcnRmIHJvdXRpbmVzCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMyIsICItLXdpdGgtY3B1PWUzMDBjMyIsICIiLCBkKX0iCisKKyMgc29mdC1mbG9hdAorVFVORVZBTElEW3BwY2UzMDBjMy1uZl0gPSAiRW5hYmxlIHBwY2UzMDBjMyBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyAobm8gZnB1KSIKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGNlMzAwYzMtbmYgPSAiJHtUVU5FX0ZFQVRVUkVTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMzLW5mIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTMwMGMzLW5mID0gInBwY2UzMDBjMy1uZiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlMzAwYzMtbmYgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwYy1uZn0gcHBjZTMwMGMzLW5mIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInBwY2UzMDBjMy1uZiIsICIgLW1jcHU9ZTMwMGMzIiwgIiIsIGQpfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwYzFmOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMC5pbmMKQEAgLTAsMCArMSwyMCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1MDAiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwXSA9ICJFbmFibGUgcHBjZTUwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlNTAwIiwgIiAtbWNwdT04NTQwIiwgIiIsIGQpfSIKKworVFVORVZBTElEW3NwZV0gPSAiRW5hYmxlIFNQRSBBQkkgZXh0ZW5zaW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDAiLCAic3BlIiBdLCAiIC1tYWJpPXNwZSAtbXNwZSAtbWZsb2F0LWdwcnM9c2luZ2xlIiwgIiIsIGQpfSIKK1RBUkdFVF9GUFUgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAicHBjZTUwMCIgLCAic3BlIiBdLCAicHBjLWVmcyIsICIiLCBkKX0iCisKKyMgc3BlIGlzIGRlZmluZWQgcG90ZW50aWFsbHkgaW4gdHdvIHBsYWNlcywgc28gd2Ugd2FudCB0byBiZSBzdXJlIGl0IHdpbGwKKyMgb25seSB3cml0ZSBzcGUgb25jZSB0byB0aGUgQUJJRVhURU5TSU9OUyBmaWVsZC4KK1NQRUFCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzcGUiLCAic3BlIiwgIiIsIGQpfSIKK0FCSUVYVEVOU0lPTiAuPSAiJHtTUEVBQklFWFRFTlNJT059IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1MDAgPSAibTMyIHNwZSBwcGNlNTAwIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMCA9ICJwcGNlNTAwIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1MDAgPSAicHBjZTUwMCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDBtYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ZDhlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTAwbWMuaW5jCkBAIC0wLDAgKzEsMTQgQEAKK0RFRkFVTFRUVU5FID89ICJwcGNlNTAwbWMiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcG93ZXJwYy9hcmNoLXBvd2VycGMuaW5jCisKK1RVTkVWQUxJRFtwcGNlNTAwbWNdID0gIkVuYWJsZSBwcGNlNTAwbWMgc3BlY2lmaWMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMG1jIiwgIiAtbWNwdT1lNTAwbWMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTAwbWMiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTUwMG1jID0gIm0zMiBmcHUtaGFyZCBwcGNlNTAwbWMiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNTAwbWMgPSAicHBjZTUwMG1jIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBwY2U1MDBtYyA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlNTAwbWMiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU1MDBtYyBzcGVjaWZpYyBsaWJyYXJ5IChmb3Igc3FydCkKK0dMSUJDX0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAicHBjZTUwMG1jIiwgIi13aXRoLWNwdT1lNTAwbWMiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtcHBjZTUwMHYyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDE0ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1MDB2Mi5pbmMKQEAgLTAsMCArMSwyMCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1MDB2MiIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9wb3dlcnBjL2FyY2gtcG93ZXJwYy5pbmMKKworVFVORVZBTElEW3BwY2U1MDB2Ml0gPSAiRW5hYmxlIHBwY2U1MDB2MiBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJwcGNlNTAwdjIiLCAiIC1tY3B1PTg1NDgiLCAiIiwgZCl9IgorCitUVU5FVkFMSURbc3BlXSA9ICJFbmFibGUgU1BFIEFCSSBleHRlbnNpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgWyAicHBjZTUwMHYyIiwgInNwZSIgXSwgIiAtbWFiaT1zcGUgLW1zcGUgLW1mbG9hdC1ncHJzPWRvdWJsZSIsICIiLCBkKX0iCitUQVJHRVRfRlBVIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsIFsgInBwY2U1MDB2MiIgLCAic3BlIiBdLCAicHBjLWVmZCIsICIiLCBkKX0iCisKKyMgc3BlIGlzIGRlZmluZWQgcG90ZW50aWFsbHkgaW4gdHdvIHBsYWNlcywgc28gd2Ugd2FudCB0byBiZSBzdXJlIGl0IHdpbGwKKyMgb25seSB3cml0ZSBzcGUgb25jZSB0byB0aGUgQUJJRVhURU5TSU9OUyBmaWVsZC4KK1NQRUFCSUVYVEVOU0lPTiA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzcGUiLCAic3BlIiwgIiIsIGQpfSIKK0FCSUVYVEVOU0lPTiAuPSAiJHtTUEVBQklFWFRFTlNJT059IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTAwdjIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtcHBjZTUwMHYyID0gIm0zMiBzcGUgcHBjZTUwMHYyIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTUwMHYyID0gInBwY2U1MDB2MiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNTAwdjIgPSAicHBjZTUwMHYyIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U1NTAwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUyMzFlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNTUwMC5pbmMKQEAgLTAsMCArMSwyMCBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U1NTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtlNTUwMF0gPSAiRW5hYmxlIEZyZWVzY2FsZSBlNTUwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNTUwMCIsICIgLW1jcHU9ZTU1MDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNTUwMCBwcGM2NGU1NTAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U1NTAwID0gIm0zMiBmcHUtaGFyZCBlNTUwMCIKK0JBU0VfTElCX3R1bmUtcHBjZTU1MDAgPSAibGliIgorVFVORV9QS0dBUkNIX3R1bmUtcHBjZTU1MDAgPSAicHBjZTU1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjZTU1MDAgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcG93ZXJwY30gcHBjZTU1MDAiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1wcGM2NGU1NTAwID0gIm02NCBmcHUtaGFyZCBlNTUwMCIKK0JBU0VfTElCX3R1bmUtcHBjNjRlNTUwMCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXBwYzY0ZTU1MDAgPSAicHBjNjRlNTUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGM2NGU1NTAwID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXBvd2VycGM2NH0gcHBjNjRlNTUwMCIKKworIyBnbGliYyBjb25maWd1cmUgb3B0aW9ucyB0byBnZXQgZTU1MDAgc3BlY2lmaWMgbGlicmFyeSAoZm9yIHNxcnQpCitHTElCQ19FWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU1NTAwIiwgIi0td2l0aC1jcHU9ZTU1MDAiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwY2U2NTAwLmluYyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE3NDNhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1wcGNlNjUwMC5pbmMKQEAgLTAsMCArMSwyMSBAQAorREVGQVVMVFRVTkUgPz0gInBwY2U2NTAwIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3Bvd2VycGMvYXJjaC1wb3dlcnBjNjQuaW5jCisKK1RVTkVWQUxJRFtlNjUwMF0gPSAiRW5hYmxlIEZyZWVzY2FsZSBlNjUwMCBzcGVjaWZpYyBwcm9jZXNzb3Igb3B0aW1pemF0aW9ucyIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJlNjUwMCIsICIgLW1jcHU9ZTY1MDAiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJwcGNlNjUwMCBwcGM2NGU2NTAwIgorVFVORV9GRUFUVVJFU190dW5lLXBwY2U2NTAwID0gIm0zMiBmcHUtaGFyZCBlNjUwMCBhbHRpdmVjIgorQkFTRV9MSUJfdHVuZS1wcGNlNjUwMCA9ICJsaWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGNlNjUwMCA9ICJwcGNlNjUwMCIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wcGNlNjUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjfSBwcGNlNjUwMCIKKworVFVORV9GRUFUVVJFU190dW5lLXBwYzY0ZTY1MDAgPSAibTY0IGZwdS1oYXJkIGU2NTAwIGFsdGl2ZWMiCitCQVNFX0xJQl90dW5lLXBwYzY0ZTY1MDAgPSAibGliNjQiCitUVU5FX1BLR0FSQ0hfdHVuZS1wcGM2NGU2NTAwID0gInBwYzY0ZTY1MDAiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtcHBjNjRlNjUwMCA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1wb3dlcnBjNjR9IHBwYzY0ZTY1MDAiCisKKyMgZ2xpYmMgY29uZmlndXJlIG9wdGlvbnMgdG8gZ2V0IGU2NTAwIHNwZWNpZmljIGxpYnJhcnkKK0dMSUJDX0VYVFJBX09FQ09ORl9wb3dlcnBjNjQgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU2NTAwIiwgIi0td2l0aC1jcHU9ZTY1MDAiLCAiIiwgZCl9IgorR0xJQkNfRVhUUkFfT0VDT05GX3Bvd2VycGMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImU2NTAwIiwgIi0td2l0aC1jcHU9ZTY1MDAiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2gzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVkN2JhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoMy5pbmMKQEAgLTAsMCArMSwxNyBAQAorREVGQVVMVFRVTkUgPz0gInNoMyIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYworCitUVU5FVkFMSURbc2gzXSA9ICJFbmFibGUgU0gzIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic2gzIiwgIiAtbTMiLCAiIiwgZCl9IgorCitBVkFJTFRVTkVTICs9ICJzaDMgc2gzZWIiCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2gzID0gInNoMyIKK1RVTkVfQVJDSF90dW5lLXNoMyA9ICJzaDMiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDMgPSAic2gzIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoMyA9ICJzaCBzaDMiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDNlYiA9ICJzaDMgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2gzZWIgPSAic2gzZWIiCitUVU5FX1BLR0FSQ0hfdHVuZS1zaDNlYiA9ICJzaDNlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDNlYiA9ICJzaGViIHNoM2ViIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2g0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUyM2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXNoNC5pbmMKQEAgLTAsMCArMSwzNCBAQAorREVGQVVMVFRVTkUgPz0gInNoNCIKKworIyBQdWxsIGluIHNoNCBmb3IgY29tcGF0aWJpbGl0eS4uLgorcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9zaC9hcmNoLXNoLmluYworCitUVU5FVkFMSURbc2g0XSA9ICJFbmFibGUgU0g0IG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic2g0IiwgIiAtbTQiLCAiIiwgZCl9IgorCisjIE5PVEU6IElmIHlvdSB3YW50IHRvIG9wdGltaXplIHRvIHNoNGEsIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc2g0YS5pbmMuCisjIEJ1dCBpdCBpcyBub3QgY29tcGF0aWJsZSBmb3Igc2g0LgorIyBUaGUgYmluYXJ5IG9wdGltaXplZCBieSBtNGEgZG9lc24ndCBvcGVyYXRlIG9uIHNoNC4gSXQgd29ya3Mgb24gc2g0YSBvbmx5LgorVFVORVZBTElEW3NoNGFdID0gIkVuYWJsZSBTSDRhIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic2g0YSIsICIgLW00YSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInNoNCBzaDRlYiBzaDRhIHNoNGFlYiIKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDQgPSAic2g0IgorVFVORV9BUkNIX3R1bmUtc2g0ID0gInNoNCIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNCA9ICJzaDQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtc2g0ID0gInNoIHNoNCIKKworVFVORV9GRUFUVVJFU190dW5lLXNoNGViID0gInNoNCBiaWdlbmRpYW4iCitUVU5FX0FSQ0hfdHVuZS1zaDRlYiA9ICJzaDRlYiIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGViID0gInNoNGViIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXNoNGViID0gInNoZWIgc2g0ZWIiCisKK1RVTkVfRkVBVFVSRVNfdHVuZS1zaDRhID0gInNoNGEiCitUVU5FX0FSQ0hfdHVuZS1zaDRhID0gInNoNCIKK1RVTkVfUEtHQVJDSF90dW5lLXNoNGEgPSAic2g0YSIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRhID0gInNoIHNoNCBzaDRhIgorCitUVU5FX0ZFQVRVUkVTX3R1bmUtc2g0YWViID0gInNoNGEgYmlnZW5kaWFuIgorVFVORV9BUkNIX3R1bmUtc2g0YWViID0gInNoNGViIgorVFVORV9QS0dBUkNIX3R1bmUtc2g0YWViID0gInNoNGFlYiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1zaDRhZWIgPSAic2hlYiBzaDRlYiBzaDRhZWIiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3Ryb25nYXJtMTEwMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZmJhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS1zdHJvbmdhcm0xMTAwLmluYwpAQCAtMCwwICsxLDExIEBACitERUZBVUxUVFVORSA/PSAiYXJtdjQiCisKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvYXJtL2FyY2gtYXJtdjQuaW5jCisKK1RVTkVWQUxJRFtzdHJvbmdhcm1dID0gIkVuYWJsZSBTdHJvbmdhcm0gMTEwMCBzZXJpZXMgcHJvY2Vzc29yIG9wdGltaXphdGlvbnMiCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAic3Ryb25nYXJtIiwgIiAtbXR1bmU9c3Ryb25nYXJtMTEwMCIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInN0cm9uZ2FybSIKK0FSTVBLR0FSQ0hfdHVuZS1zdHJvbmdhcm0gPSAic3Ryb25nYXJtIgorVFVORV9GRUFUVVJFU190dW5lLXN0cm9uZ2FybSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NH0gc3Ryb25nYXJtIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXN0cm9uZ2FybSA9ICIke1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS1hcm12NH0gc3Ryb25nYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXN1cGVyc3BhcmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWEzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtc3VwZXJzcGFyYy5pbmMKQEAgLTAsMCArMSw0IEBACitUVU5FX0FSQ0ggPSAic3BhcmMiCisKK1RVTkVfQ0NBUkdTID0gIi1tY3B1PXN1cGVyc3BhcmMiCitUVU5FX1BLR0FSQ0ggPSAic3VwZXJzcGFyYyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXhzY2FsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM1Y2E4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL2luY2x1ZGUvdHVuZS14c2NhbGUuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK0RFRkFVTFRUVU5FID89ICJhcm12NXRlIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL2FybS9hcmNoLWFybXY1LWRzcC5pbmMKKworVFVORVZBTElEW3hzY2FsZV0gPSAiRW5hYmxlIFBYQTI1NS9QWEEyNnggWHNjYWxlIHNwZWNpZmljIHByb2Nlc3NvciBvcHRpbWl6YXRpb25zIgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgInhzY2FsZSIsICIgLW10dW5lPXhzY2FsZSIsICIiLCBkKX0iCisKK0FWQUlMVFVORVMgKz0gInhzY2FsZSIKK0FSTVBLR0FSQ0hfdHVuZS14c2NhbGUgPSAieHNjYWxlIgorVFVORV9GRUFUVVJFU190dW5lLXhzY2FsZSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlfSB4c2NhbGUiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteHNjYWxlID0gIiR7UEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLWFybXY1dGV9IHhzY2FsZSB4c2NhbGV0IHhzY2FsZWUgeHNjYWxldGUiCisKK0FWQUlMVFVORVMgKz0gInhzY2FsZS1iZSIKK0FSTVBLR0FSQ0hfdHVuZS14c2NhbGUtYmUgPSAieHNjYWxlIgorVFVORV9GRUFUVVJFU190dW5lLXhzY2FsZS1iZSA9ICIke1RVTkVfRkVBVFVSRVNfdHVuZS1hcm12NXRlYn0geHNjYWxlIGJpZ2VuZGlhbiIKK1BBQ0tBR0VfRVhUUkFfQVJDSFNfdHVuZS14c2NhbGUtYmUgPSAiJHtQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUtYXJtdjV0ZWJ9IHhzY2FsZWIgeHNjYWxldGIgeHNjYWxlZWIgeHNjYWxldGViIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni1iYXNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2M4YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYtYmFzZS5pbmMKQEAgLTAsMCArMSw1MiBAQAorIworIyBCYXNlIG1hY2hpbmUgc2V0dGluZ3MgZm9yIFg4NiBhcmNoaXRlY3R1cmUgQlNQcworIworCisjCisjIGNvbW1vbiBzZXR0aW5ncyBmb3IgWDg2IG1hY2hpbmVzCisjCitNQUNISU5FX0ZFQVRVUkVTICs9ICJzY3JlZW4ga2V5Ym9hcmQgcGNpIHVzYmhvc3QgZXh0MiBleHQzIHg4NiBcCisgICAgICAgICAgICAgICAgICAgICBhY3BpIHNlcmlhbCB1c2JnYWRnZXQgYWxzYSIKKworTUFDSElORV9FWFRSQV9SUkVDT01NRU5EUyArPSAia2VybmVsLW1vZHVsZXMiCisKK0lNQUdFX0ZTVFlQRVMgKz0gImxpdmUiCisKK0tFUk5FTF9JTUFHRVRZUEUgPz0gImJ6SW1hZ2UiCisKK1NFUklBTF9DT05TT0xFID89ICIxMTUyMDAgdHR5UzAiCisKKyMKKyMga2VybmVsLXJlbGF0ZWQgdmFyaWFibGVzCisjCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPz89ICJsaW51eC15b2N0byIKK1BSRUZFUlJFRF9WRVJTSU9OX2xpbnV4LXlvY3RvID8/PSAiMy4wJSIKKworIworIyBYU0VSVkVSIHN1YmNvbXBvbmVudHMsIHVzZWQgdG8gYnVpbGQgdGhlIFhTRVJWRVIgdmFyaWFibGUKKyMKK1hTRVJWRVJfWDg2X0JBU0UgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni1pbnB1dC1zeW5hcHRpY3MgXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X0VYVCA9ICIgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICd4c2VydmVyLXhvcmctZXh0ZW5zaW9uLWdseCcsICcnLCBkKX0gXAorICAgICAgICAgICB4c2VydmVyLXhvcmctbW9kdWxlLWxpYmludDEwIFwKKyAgICAgICAgICAgIgorCitYU0VSVkVSX1g4Nl9JOTE1ID0gInhmODYtdmlkZW8taW50ZWwgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdtZXNhLWRyaXZlci1pOTE1JywgJycsIGQpfSBcCisgICAgICAgICAgICIKKworWFNFUlZFUl9YODZfSTk2NSA9ICJ4Zjg2LXZpZGVvLWludGVsIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItaTk2NScsICcnLCBkKX0gXAorICAgICAgICAgICAiCisKK1hTRVJWRVJfWDg2X1ZFU0EgPSAieGY4Ni12aWRlby12ZXNhIgorCitYU0VSVkVSX1g4Nl9GQkRFViA9ICJ4Zjg2LXZpZGVvLWZiZGV2IgorCitYU0VSVkVSX1g4Nl9NT0RFU0VUVElORyA9ICJ4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNmM0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9SRUFETUUKQEAgLTAsMCArMSwyNCBAQAorMjAxMi8wMy8zMCAtIE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKyAtIEluaXRpYWwgdmVyc2lvbgorCitNb3N0IG9mIHRoZSBpdGVtcyBmb3IgdGhlIFg4NiBhcmNoaXRlY3R1cmVzIGFyZSBkZWZpbmVkIGluIHRoZSBzaW5nbGUKK2FyY2gteDg2IGZpbGUuCisKK1RocmVlIEFCSXMgYXJlIGRlZmluZSwgbTMyLCBteDMyIGFuZCBtNjQuCisKK1RoZSBmb2xsb3dpbmcgaXMgdGhlIGxpc3Qgb2YgWDg2IHNwZWNpZmljIHZhcmlhYmxlczoKKworWDg2QVJDSDMyIC0gVGhpcyBpcyB0aGUgMzItYml0IGFyY2hpdGVjdHVyZSBHTlUgY2Fub25pY2FsIGFyY2gsIFRVTkVfQVJDSC4KKworWDg2QVJDSDY0IC0gVGhpcyBpcyB0aGUgNjQtYml0IGFyY2hpdGVjdHVyZSBHTlUgY2Fub25pY2FsIGFyY2gsIFRVTkVfQVJDSC4KKworVGhlIFRVTkVfUEtHQVJDSCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CisKK1RVTkVfUEtHQVJDSCA9ICR7VFVORV9QS0dBUkNIX3R1bmUtJHtERUZBVUxUVFVORX19CisKK1RoZSBwYWNrYWdlIGFyY2hpdGVjdHVyZSBmb3IgMzItYml0IHRhcmdldHMgaXMgaGlzdG9yaWNhbCBhbmQgZ2VuZXJhbGx5CitzZXQgdG8gdG8gbWF0Y2ggdGhlIGNvcmUgY29tcGF0aWJsZSBwcm9jZXNzb3IgdHlwZSwgaS5lLiBpMzg2LgorCitGb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMsIHRoZSBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gZW5kIGluICdfNjQnLgorCitJZiB0aGUgeDMyIEFCSSBpcyB1c2VkLCB0aGVuIHRoZSBfNjQgaXMgZnVydGhlciBleHRlbmRlZCB3aXRoIGEgJ194MzInLgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jIGIvbWV0YS9jb25mL21hY2hpbmUvaW5jbHVkZS94ODYvYXJjaC14ODYuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGJkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9pbmNsdWRlL3g4Ni9hcmNoLXg4Ni5pbmMKQEAgLTAsMCArMSw1MSBAQAorIworIyBYODYgQXJjaGl0ZWN0dXJlIGRlZmluaXRpb24gKElBMzIsIFg4Nl82NCwgYW5kIFgzMikKKyMKKworREVGQVVMVFRVTkUgPz0gIng4NiIKK1RBUkdFVF9GUFUgPz0gIiIKK1g4NkFSQ0gzMiA/PSAiaTU4NiIKK1g4NkFSQ0g2NCA/PSAieDg2XzY0IgorCitUVU5FX1BLR0FSQ0ggPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS0ke0RFRkFVTFRUVU5FfX0iCisKKyMgRUxGMzIgQUJJCitUVU5FVkFMSURbbTMyXSA9ICJJQTMyIEVMRjMyIHN0YW5kYXJkIEFCSSIKK1RVTkVDT05GTElDVFNbbTMyXSA9ICJtNjQgbXgzMiIKK1RVTkVfQVJDSCAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIiR7WDg2QVJDSDMyfSIsICIiICxkKX0iCitUVU5FX0NDQVJHUyAuPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibTMyIiwgIiAtbTMyIiwgIiIsIGQpfSIKK01BQ0hJTkVPVkVSUklERVMgPS4gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm0zMiIsICJ4ODY6IiwgIiIgLGQpfSIKKworIyB4MzIgQUJJCitUVU5FVkFMSURbbXgzMl0gPSAiSUEzMmUgKHg4Nl82NCkgRUxGMzIgc3RhbmRhcmQgQUJJIgorVFVORUNPTkZMSUNUU1tteDMyXSA9ICJtNjQgbTMyIgorVFVORV9BUkNIIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiR7WDg2QVJDSDY0fSIsICIiICxkKX0iCitBQklFWFRFTlNJT04gLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAieDMyIiwgIiIgLGQpfSIKK1RVTkVfQ0NBUkdTIC49ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiAtbXgzMiIsICIiLCBkKX0iCitUVU5FX0xEQVJHUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICItbSBlbGYzMl94ODZfNjQiLCAiIiwgZCl9IgorVFVORV9BU0FSR1MgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLXgzMiIsICIiLCBkKX0iCisKKyMgRUxGNjQgQUJJCitUVU5FVkFMSURbbTY0XSA9ICJJQTMyZSAoeDg2XzY0KSBFTEY2NCBzdGFuZGFyZCBBQkkiCitUVU5FQ09ORkxJQ1RTW202NF0gPSAibTMyIG14MzIiCitUVU5FX0FSQ0ggLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIke1g4NkFSQ0g2NH0iLCAiIiAsZCl9IgorVFVORV9DQ0FSR1MgLj0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm02NCIsICIgLW02NCIsICIiLCBkKX0iCisKKyMgRGVmYXVsdCBUdW5lIGNvbmZpZ3VyYXRpb25zCitBVkFJTFRVTkVTICs9ICJ4ODYiCitUVU5FX0ZFQVRVUkVTX3R1bmUteDg2ID0gIm0zMiIKK0JBU0VfTElCX3R1bmUteDg2ID0gImxpYiIKK1RVTkVfUEtHQVJDSF90dW5lLXg4NiA9ICJ4ODYiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2ID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2fSIKKworQVZBSUxUVU5FUyArPSAieDg2LTY0IgorVFVORV9GRUFUVVJFU190dW5lLXg4Ni02NCA9ICJtNjQiCitCQVNFX0xJQl90dW5lLXg4Ni02NCA9ICJsaWI2NCIKK1RVTkVfUEtHQVJDSF90dW5lLXg4Ni02NCA9ICJ4ODZfNjQiCitQQUNLQUdFX0VYVFJBX0FSQ0hTX3R1bmUteDg2LTY0ID0gIiR7VFVORV9QS0dBUkNIX3R1bmUteDg2LTY0fSIKKworQVZBSUxUVU5FUyArPSAieDg2LTY0LXgzMiIKK1RVTkVfRkVBVFVSRVNfdHVuZS14ODYtNjQteDMyID0gIm14MzIiCitCQVNFX0xJQl90dW5lLXg4Ni02NC14MzIgPSAibGlieDMyIgorVFVORV9QS0dBUkNIX3R1bmUteDg2LTY0LXgzMiA9ICJ4ODZfNjRfeDMyIgorUEFDS0FHRV9FWFRSQV9BUkNIU190dW5lLXg4Ni02NC14MzIgPSAiJHtUVU5FX1BLR0FSQ0hfdHVuZS14ODYtNjQteDMyfSIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm0uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGFkMDNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybS5jb25mCkBAIC0wLDAgKzEsMTIgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBhcm1fdmVyc2F0aWxlXzkyNmVqcworI0BERVNDUklQVElPTjogYXJtX3ZlcnNhdGlsZV85MjZlanMKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWFybTkyNmVqcy5pbmMKKyNyZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtYXJtMTEzNmpmLXMuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiekltYWdlIgorCitTRVJJQUxfQ09OU09MRVMgPSAiMTE1MjAwO3R0eUFNQTAgMTE1MjAwO3R0eUFNQTEiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdWFybTY0LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1OWQwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVhcm02NC5jb25mCkBAIC0wLDAgKzEsMTIgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBnZW5lcmljIGFybXY4IG1hY2hpbmUKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhIGdlbmVyaWMgYXJtdjgKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9hcm0vYXJjaC1hcm12OC5pbmMKK3JlcXVpcmUgY29uZi9tYWNoaW5lL2luY2x1ZGUvcWVtdS5pbmMKKworTUFDSElORV9GRUFUVVJFUyA9ICIiCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiSW1hZ2UiCisKK1NFUklBTF9DT05TT0xFUyA9ICIzODQwMDt0dHlBTUEwIDM4NDAwO2h2YzAiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwcy5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY4MTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHMuY29uZgpAQCAtMCwwICsxLDEzIEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogbXRpX21hbHRhMzJfYmUgTUlQUworI0BERVNDUklQVElPTjogbXRpX21hbHRhMzJfYmUKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHMzMnIyLmluYworCitLRVJORUxfSU1BR0VUWVBFID0gInZtbGludXgiCitLRVJORUxfQUxUX0lNQUdFVFlQRSA9ICJ2bWxpbnV4LmJpbiIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFMgPSAiIGtlcm5lbC1tb2R1bGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdW1pcHM2NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2YxZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11bWlwczY0LmNvbmYKQEAgLTAsMCArMSwxMyBAQAorI0BUWVBFOiBNYWNoaW5lCisjQE5BTUU6IG10aS1tYWx0YTY0LWJlIE1JUFM2NAorI0BERVNDUklQVElPTjogbXRpLW1hbHRhNjQtYmUKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLW1pcHM2NC5pbmMKKworS0VSTkVMX0lNQUdFVFlQRSA9ICJ2bWxpbnV4IgorS0VSTkVMX0FMVF9JTUFHRVRZUEUgPSAidm1saW51eC5iaW4iCisKK1NFUklBTF9DT05TT0xFUyA9ICIxMTUyMDA7dHR5UzAgMTE1MjAwO3R0eVMxIgorCitNQUNISU5FX0VYVFJBX1JSRUNPTU1FTkRTID0gIiBrZXJuZWwtbW9kdWxlcyIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXVwcGMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWNiYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdXBwYy5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBxZW11IFBQQyBFbXVsYXRvciBzZXR1cAorI0BERVNDUklQVElPTjogTWFjaGluZSBjb25maWd1cmF0aW9uIGZvciBydW5uaW5nIGFuIFBQQyBzeXN0ZW0gdW5kZXIgcWVtdSBlbXVsYXRpb24KKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLXBwYzc0MDAuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAidm1saW51eCIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZiBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYtNjQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGZkNDNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL21hY2hpbmUvcWVtdXg4Ni02NC5jb25mCkBAIC0wLDAgKzEsMjkgQEAKKyNAVFlQRTogTWFjaGluZQorI0BOQU1FOiBjb21tb25fcGMKKyNAREVTQ1JJUFRJT046IE1hY2hpbmUgY29uZmlndXJhdGlvbiBmb3IgcnVubmluZyBhIGNvbW1vbiB4ODYKKworUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwveHNlcnZlciA/PSAieHNlcnZlci14b3JnIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2wgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMSA/PSAibWVzYSIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsZXMyID89ICJtZXNhIgorCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3FlbXUuaW5jCitERUZBVUxUVFVORSA/PSAiY29yZTItNjQiCityZXF1aXJlIGNvbmYvbWFjaGluZS9pbmNsdWRlL3R1bmUtY29yZTIuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK1hTRVJWRVIgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgIHhmODYtaW5wdXQtdm1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1jaXJydXMgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisKK01BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKKworTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgKz0gInY4NmQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYgYi9tZXRhL2NvbmYvbWFjaGluZS9xZW11eDg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZjZWE2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9tYWNoaW5lL3FlbXV4ODYuY29uZgpAQCAtMCwwICsxLDI4IEBACisjQFRZUEU6IE1hY2hpbmUKKyNATkFNRTogY29tbW9uX3BjCisjQERFU0NSSVBUSU9OOiBNYWNoaW5lIGNvbmZpZ3VyYXRpb24gZm9yIHJ1bm5pbmcgYSBjb21tb24geDg2CisKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL3hzZXJ2ZXIgPz0gInhzZXJ2ZXIteG9yZyIKK1BSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2xpYmdsID89ICJtZXNhIgorUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvbGliZ2xlczEgPz0gIm1lc2EiCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9saWJnbGVzMiA/PSAibWVzYSIKKworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS9xZW11LmluYworcmVxdWlyZSBjb25mL21hY2hpbmUvaW5jbHVkZS90dW5lLWk1ODYuaW5jCisKK0tFUk5FTF9JTUFHRVRZUEUgPSAiYnpJbWFnZSIKKworU0VSSUFMX0NPTlNPTEVTID0gIjExNTIwMDt0dHlTMCAxMTUyMDA7dHR5UzEiCisKK1hTRVJWRVIgPSAieHNlcnZlci14b3JnIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbWVzYS1kcml2ZXItc3dyYXN0JywgJycsIGQpfSBcCisgICAgICAgICAgIHhmODYtaW5wdXQtdm1tb3VzZSBcCisgICAgICAgICAgIHhmODYtaW5wdXQta2V5Ym9hcmQgXAorICAgICAgICAgICB4Zjg2LWlucHV0LWV2ZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby1jaXJydXMgXAorICAgICAgICAgICB4Zjg2LXZpZGVvLWZiZGV2IFwKKyAgICAgICAgICAgeGY4Ni12aWRlby12bXdhcmUiCisKK01BQ0hJTkVfRkVBVFVSRVMgKz0gIng4NiIKKworTUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFMgKz0gInY4NmQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYgYi9tZXRhL2NvbmYvbWlncmF0ZV9sb2NhbGNvdW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4NmUwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9taWdyYXRlX2xvY2FsY291bnQuY29uZgpAQCAtMCwwICsxIEBACitJTkhFUklUICs9ICJtaWdyYXRlX2xvY2FsY291bnQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZiBiL21ldGEvY29uZi9tdWx0aWxpYi5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YThlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvbXVsdGlsaWIuY29uZgpAQCAtMCwwICsxLDI2IEBACisKK2Jhc2VsaWIgPSAiJHtAZC5nZXRWYXIoJ0JBU0VfTElCX3R1bmUtJyArIChkLmdldFZhcignREVGQVVMVFRVTkUnLCBUcnVlKSBvciAnSU5WQUxJRCcpLCBUcnVlKSBvciBkLmdldFZhcignQkFTRUxJQicsIFRydWUpfSIKKworTVVMVElMSUJfVkFSSUFOVFMgPSAiJHtAZXh0ZW5kX3ZhcmlhbnRzKGQsJ01VTFRJTElCUycsJ211bHRpbGliJyl9IgorTVVMVElMSUJfU0FWRV9WQVJOQU1FID0gIkRFRkFVTFRUVU5FIFRBUkdFVF9BUkNIIFRBUkdFVF9TWVMiCisKK01VTFRJTElCUyA/Pz0gIm11bHRpbGliOmxpYjMyIgorCitTVEFHSU5HX0RJUl9IT1NUID0gIiR7U1RBR0lOR19ESVJ9LyR7TUxQUkVGSVh9JHtNQUNISU5FfSIKK1NUQUdJTkdfRElSX1RBUkdFVCA9ICIke1NUQUdJTkdfRElSfS8ke01MUFJFRklYfSR7TUFDSElORX0iCitQS0dEQVRBX0RJUiA9ICIke1NUQUdJTkdfRElSfS8ke01BQ0hJTkV9L3BrZ2RhdGEiCisKK0lOSEVSSVQgKz0gIm11bHRpbGliX2dsb2JhbCIKKworQkJDTEFTU0VYVEVORF9hcHBlbmQgPSAiICR7TVVMVElMSUJTfSIKKworTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTID89ICJsaWIzMiBsaWI2NCBsaWJ4MzIiCisKK09QS0dfQVJHU19hcHBlbmQgPSAiIC0tZm9yY2UtbWFpbnRhaW5lciAtLWZvcmNlLW92ZXJ3cml0ZSIKKworIyBXaGVuIG11bHRpbGliIGlzIGVuYWJsZWQsIGFsbGFyY2ggcmVjaXBlcyB3aWxsIGJlIGluc3RhbGxlZCBpbnRvIHRoZSBNQUNISU5FCisjIHN5c3Jvb3QsIG5vdCBNTFBSRUZJWE1BQ0hJTkUuICBUaGlzIG1lYW5zIHRoYXQgYW55dGhpbmcgdXNpbmcgcGtnLWNvbmZpZyB0bworIyBmaW5kIGFuIGFsbGFyY2ggcGtnY29uZmlnIGZpbGUgd2lsbCBmYWlsIGFzIHRoZSBQS0dfQ09ORklHX1BBVEggb25seSBsb29rcworIyBpbnNpZGUgdGhlIG11bHRpbGliIHN5c3Jvb3QuICBGaXggdGhpcyBieSBleHBsaWNpdGx5IGFkZGluZyB0aGUgTUFDSElORSdzCisjIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBwa2djb25maWcgbG9jYXRpb24gdG8gUEtHX0NPTkZJR19QQVRILgorUEtHX0NPTkZJR19QQVRIIC49ICI6JHtTVEFHSU5HX0RJUn0vJHtNQUNISU5FfSR7ZGF0YWRpcn0vcGtnY29uZmlnIgpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYgYi9tZXRhL2NvbmYvcHJleHBvcnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmYzYWNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3ByZXhwb3J0LmNvbmYKQEAgLTAsMCArMSBAQAorSU5IRVJJVCArPSAicHJleHBvcnQiCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZiBiL21ldGEvY29uZi9wcmltcG9ydC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NGVhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvcHJpbXBvcnQuY29uZgpAQCAtMCwwICsxIEBACitJTkhFUklUICs9ICJwcmltcG9ydCIKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zYW5pdHkuY29uZiBiL21ldGEvY29uZi9zYW5pdHkuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDE1NmQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9jb25mL3Nhbml0eS5jb25mCkBAIC0wLDAgKzEsMTYgQEAKKyMgU2FuaXR5IGNoZWNrcyBmb3IgY29tbW9uIHVzZXIgbWlzY29uZmlndXJhdGlvbnMKKyMKKyMgU2VlIHNhbml0eS5iYmNsYXNzCisjCisjIEV4cGVydCB1c2VycyBjYW4gY29uZmlybSB0aGVpciBzYW5pdHkgd2l0aCAidG91Y2ggY29uZi9zYW5pdHkuY29uZiIKK0JCX01JTl9WRVJTSU9OID0gIjEuMjcuMSIKKworU0FOSVRZX0FCSUZJTEUgPSAiJHtUTVBESVJ9L2FiaV92ZXJzaW9uIgorCitTQU5JVFlfVkVSU0lPTiA/PSAiMSIKK0xPQ0FMQ09ORl9WRVJTSU9OICA/PSAiMSIKK0xBWUVSX0NPTkZfVkVSU0lPTiA/PSAiNiIKK1NJVEVfQ09ORl9WRVJTSU9OICA/PSAiMSIKKworSU5IRVJJVCArPSAic2FuaXR5IgorCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC9ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZkYjhmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2JsYWNrbGlzdApAQCAtMCwwICsxLDYgQEAKK2xpYm5lb24yNy1nbnV0bHMKK29wZW5qZGstNi1qcmUtaGVhZGxlc3MKK29wZW5qZGstNi1qcmUtbGliCitvcGVuamRrLTYtanJlCitsaWJkYnVzLTEtMworbGlibmVvbjI3LWdudXRscwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvZmlsdGVycyBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0N2Y3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL1VidW50dS0xMC4wNC4xLTY0L2ZpbHRlcnMKQEAgLTAsMCArMSw3IEBACisvdXNyL2xvY2FsL2xpYi9weXRob24yLjYKKy91c3IvbGliL3B5dGhvbjIuNgorL3Vzci9saWIvcHltb2R1bGVzL3B5dGhvbjIuNgorL3Vzci9saWIvcGVybC81LjEwCisjIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRlYmlhbnV0aWxzIHBhY2thZ2VzLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBwdXQgdGhlIGVudGlyZQorIyBkZWJpYW51dGlscyBwYWNrYWdlIGluIHRoZSB3aGl0ZWxpc3QuCisvdXNyL2Jpbi93aGljaApkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvVWJ1bnR1LTEwLjA0LjEtNjQvd2hpdGVsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZmU5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9VYnVudHUtMTAuMDQuMS02NC93aGl0ZWxpc3QKQEAgLTAsMCArMSwyMyBAQAorYmFzZS1maWxlcworZGFzaAorbGliYWNsMQorbGliYXR0cjEKK2xpYmJ6Mi0xLjAKK2xpYmM2CitsaWJjLWJpbgorbGliZ2xpYjIuMC0wCitsaWJuY3Vyc2VzNQorbGlic2VsaW51eDEKK2xpYnNxbGl0ZTMtMAorbGlic3NsMC45LjgKK21pbWUtc3VwcG9ydAorcGVybC1iYXNlCitweXRob24yLjYKK3B5dGhvbjIuNi1taW5pbWFsCitweXRob24tYXBwb3J0CitweXRob24tZ3N0MC4xMAorcHl0aG9uLWltYWdpbmcKK3B5dGhvbi1taW5pbWFsCitweXRob24tc3VwcG9ydAorcHl0aG9uLXpvcGUuaW50ZXJmYWNlCit6bGliMWcKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9ibGFja2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2YmNiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvYmxhY2tsaXN0CkBAIC0wLDAgKzEsMiBAQAordWRldgorZGtwZwpkaWZmIC0tZ2l0IGEvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzIGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy9maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMTBmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvc3dhYmJlci9nZW5lcmljL2ZpbHRlcnMKQEAgLTAsMCArMSwxMCBAQAorL3RtcAorL2V0Yy9sb2NhbHRpbWUKKy9ldGMvbGQuc28uY2FjaGUKKy9ldGMvbGQuc28uY29uZgorL2V0Yy9wYXNzd2QKKy9ldGMvZ3JvdXAKKy9ldGMvbnNzd2l0Y2guY29uZgorL3Byb2MKKy9kZXYvbnVsbAorL2Rldi90dHkKZGlmZiAtLWdpdCBhL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0IGIvbWV0YS9jb25mL3N3YWJiZXIvZ2VuZXJpYy93aGl0ZWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlYzJhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvY29uZi9zd2FiYmVyL2dlbmVyaWMvd2hpdGVsaXN0CkBAIC0wLDAgKzEsMTUgQEAKK2Jhc2gKK2J6aXAyCitjY2FjaGUKK2NvcmV1dGlscworY3BwCitmaWxlCitmaW5kdXRpbHMKK2dhd2sKK2dyZXAKK2hvc3RuYW1lCittYWtlCitzZWQKK3RhcgordXRpbC1saW51eAoremxpYjFnCmRpZmYgLS1naXQgYS9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbiBiL21ldGEvY29uZi90b2FzdGVyY29uZi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTQyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2NvbmYvdG9hc3RlcmNvbmYuanNvbgpAQCAtMCwwICsxLDEwNiBAQAoreworICAgICJjb25maWciOiB7CisgICAgICAgICJNQUNISU5FIiAgICAgIDogInFlbXV4ODYiLAorICAgICAgICAiRElTVFJPIiAgICAgICA6ICJwb2t5IiwKKyAgICAgICAgIklNQUdFX0ZTVFlQRVMiOiAiZXh0MyBqZmZzMiB0YXIuYnoyIiwKKyAgICAgICAgIklNQUdFX0lOU1RBTExfYXBwZW5kIjogIiIsCisgICAgICAgICJQQUNLQUdFX0NMQVNTRVMiOiAicGFja2FnZV9ycG0iLAorICAgICAgICAiU0RLTUFDSElORSIgICA6ICJ4ODZfNjQiCisgICAgfSwKKyAgICAibGF5ZXJzb3VyY2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJMb2NhbCBPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibG9jYWwiLAorICAgICAgICAgICAgImFwaXVybCI6ICIuLi8uLi8iLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJIRUFEIiwgIm1hc3RlciIsICJmaWRvIiwgImRpenp5Il0sCisgICAgICAgICAgICAibGF5ZXJzIjogWworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAib3BlbmVtYmVkZGVkLWNvcmUiLAorICAgICAgICAgICAgICAgICAgICAibG9jYWxfcGF0aCI6ICJtZXRhIiwKKyAgICAgICAgICAgICAgICAgICAgInZjc191cmwiOiAicmVtb3RlOm9yaWdpbiIsCisgICAgICAgICAgICAgICAgICAgICJkaXJwYXRoIjogIm1ldGEiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJPcGVuRW1iZWRkZWQiLAorICAgICAgICAgICAgInNvdXJjZXR5cGUiOiAibGF5ZXJpbmRleCIsCisgICAgICAgICAgICAiYXBpdXJsIjogImh0dHA6Ly9sYXllcnMub3BlbmVtYmVkZGVkLm9yZy9sYXllcmluZGV4L2FwaS8iLAorICAgICAgICAgICAgImJyYW5jaGVzIjogWyJtYXN0ZXIiLCAiZmlkbyIsICJkaXp6eSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogIkltcG9ydGVkIGxheWVycyIsCisgICAgICAgICAgICAic291cmNldHlwZSI6ICJpbXBvcnRlZCIsCisgICAgICAgICAgICAiYXBpdXJsIjogIiIsCisgICAgICAgICAgICAiYnJhbmNoZXMiOiBbIm1hc3RlciIsICJmaWRvIiwgImRpenp5IiwgIkhFQUQiXQorCisgICAgICAgIH0KKyAgICBdLAorICAgICJiaXRiYWtlIiA6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIm1hc3RlciIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImZpZG8iLAorICAgICAgICAgICAgImdpdHVybCI6ICJnaXQ6Ly9naXQub3BlbmVtYmVkZGVkLm9yZy9iaXRiYWtlIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiMS4yNiIsCisgICAgICAgICAgICAiZGlycGF0aCI6ICIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpenp5IiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIjEuMjQiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJIRUFEIiwKKyAgICAgICAgICAgICJnaXR1cmwiOiAiZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvYml0YmFrZSIsCisgICAgICAgICAgICAiYnJhbmNoIjogIkhFQUQiLAorICAgICAgICAgICAgImRpcnBhdGgiOiAiIgorICAgICAgICB9CisgICAgXSwKKworICAgICJkZWZhdWx0cmVsZWFzZSI6ICJtYXN0ZXIiLAorCisgICAgInJlbGVhc2VzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJtYXN0ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9wZW5FbWJlZGRlZCBtYXN0ZXIiLAorICAgICAgICAgICAgImJpdGJha2UiOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJicmFuY2giOiAibWFzdGVyIiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB1c2luZyB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvXCI+T3BlbkVtYmVkZGVkIG1hc3RlcjwvYT4gYnJhbmNoLCB3aGVyZSBhY3RpdmUgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UuIFRoaXMgaXMgbm90IGEgc3RhYmxlIGJyYW5jaCwgc28geW91ciBidWlsZHMgbWlnaHQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPcGVuRW1iZWRkZWQgRmlkbyIsCisgICAgICAgICAgICAiYml0YmFrZSI6ICJmaWRvIiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZmlkbyIsCisgICAgICAgICAgICAiZGVmYXVsdGxheWVycyI6IFsgIm9wZW5lbWJlZGRlZC1jb3JlIiBdLAorICAgICAgICAgICAgImxheWVyc291cmNlcHJpb3JpdHkiOiB7ICJJbXBvcnRlZCBsYXllcnMiOiA5OSwgIkxvY2FsIE9wZW5FbWJlZGRlZCIgOiAxMCwgIk9wZW5FbWJlZGRlZCIgOiAgMCB9LAorICAgICAgICAgICAgImhlbHB0ZXh0IjogIlRvYXN0ZXIgd2lsbCBydW4geW91ciBidWlsZHMgd2l0aCB0aGUgdGlwIG9mIHRoZSA8YSBocmVmPVwiaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9vcGVuZW1iZWRkZWQtY29yZS9sb2cvP2g9Zmlkb1wiPk9wZW5FbWJlZGRlZCBcIkZpZG9cIjwvYT4gYnJhbmNoIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaXp6eSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3BlbkVtYmVkZGVkIERpenp5IiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogImRpenp5IiwKKyAgICAgICAgICAgICJicmFuY2giOiAiZGl6enkiLAorICAgICAgICAgICAgImRlZmF1bHRsYXllcnMiOiBbICJvcGVuZW1iZWRkZWQtY29yZSIgXSwKKyAgICAgICAgICAgICJsYXllcnNvdXJjZXByaW9yaXR5IjogeyAiSW1wb3J0ZWQgbGF5ZXJzIjogOTksICJMb2NhbCBPcGVuRW1iZWRkZWQiIDogMTAsICJPcGVuRW1iZWRkZWQiIDogIDAgfSwKKyAgICAgICAgICAgICJoZWxwdGV4dCI6ICJUb2FzdGVyIHdpbGwgcnVuIHlvdXIgYnVpbGRzIHdpdGggdGhlIHRpcCBvZiB0aGUgPGEgaHJlZj1cImh0dHA6Ly9jZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLWNvcmUvbG9nLz9oPWRpenp5XCI+T3BlbkVtYmVkZGVkIFwiRGl6enlcIjwvYT4gYnJhbmNoIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2NhbCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9jYWwgT3BlbkVtYmVkZGVkIiwKKyAgICAgICAgICAgICJiaXRiYWtlIjogIkhFQUQiLAorICAgICAgICAgICAgImJyYW5jaCI6ICJIRUFEIiwKKyAgICAgICAgICAgICJkZWZhdWx0bGF5ZXJzIjogWyAib3BlbmVtYmVkZGVkLWNvcmUiIF0sCisgICAgICAgICAgICAibGF5ZXJzb3VyY2Vwcmlvcml0eSI6IHsgIkltcG9ydGVkIGxheWVycyI6IDk5LCAiTG9jYWwgT3BlbkVtYmVkZGVkIiA6IDEwLCAiT3BlbkVtYmVkZGVkIiA6ICAwIH0sCisgICAgICAgICAgICAiaGVscHRleHQiOiAiVG9hc3RlciB3aWxsIHJ1biB5b3VyIGJ1aWxkcyB3aXRoIHRoZSB2ZXJzaW9uIG9mIE9wZW5FbWJlZGRlZCB0aGF0IHlvdSBoYXZlIGNsb25lZCBvciBkb3dubG9hZGVkIHRvIHlvdXIgY29tcHV0ZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUFMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODQyMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BQUwKQEAgLTAsMCArMSw1MSBAQAorCitBdHRyaWJ1dGlvbiBBc3N1cmFuY2UgTGljZW5zZQorQ29weXJpZ2h0IChjKSAyMDAyIGJ5IEFVVEhPUgorUFJPRkVTU0lPTkFMIElERU5USUZJQ0FUSU9OICogVVJMCisiUFJPTU9USU9OQUwgU0xPR0FOIEZPUiBBVVRIT1JgUyBQUk9GRVNTSU9OQUwgUFJBQ1RJQ0UiCisKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKK0FUVFJJQlVUSU9OIEFTU1VSQU5DRSBMSUNFTlNFIChhZGFwdGVkIGZyb20gdGhlIG9yaWdpbmFsIEJTRCBsaWNlbnNlKQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBhcmUgbWV0LgorVGhlc2UgY29uZGl0aW9ucyByZXF1aXJlIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIDxBVVRIT1I+ICh0aGUKKyJBdXRob3IiKSwgd2hvIGhvcGVzIHRoYXQgaXRzIHByb21vdGlvbmFsIHZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlCit0aG91c2FuZHMgb2YgZG9sbGFycyBpbiBvdGhlcndpc2UgYmlsbGFibGUgdGltZSBpbnZlc3RlZCBpbiB3cml0aW5nCit0aGlzIGFuZCBvdGhlciBmcmVlbHkgYXZhaWxhYmxlLCBvcGVuLXNvdXJjZSBzb2Z0d2FyZS4KKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlLCBpbiB3aG9sZSBvciBwYXJ0IGFuZCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiAodGhlICJDb2RlIiksIG11c3QgcHJvbWluZW50bHkgZGlzcGxheSB0aGlzIEdQRy1zaWduZWQKK3RleHQgaW4gdmVyaWZpYWJsZSBmb3JtLgorMi4gUmVkaXN0cmlidXRpb25zIG9mIHRoZSBDb2RlIGluIGJpbmFyeSBmb3JtIG11c3QgYmUgYWNjb21wYW5pZWQgYnkKK3RoaXMgR1BHLXNpZ25lZCB0ZXh0IGluIGFueSBkb2N1bWVudGF0aW9uIGFuZCwgZWFjaCB0aW1lIHRoZSByZXN1bHRpbmcKK2V4ZWN1dGFibGUgcHJvZ3JhbSBvciBhIHByb2dyYW0gZGVwZW5kZW50IHRoZXJlb24gaXMgbGF1bmNoZWQsIGEKK3Byb21pbmVudCBkaXNwbGF5IChlLmcuLCBzcGxhc2ggc2NyZWVuIG9yIGJhbm5lciB0ZXh0KSBvZiB0aGUgQXV0aG9yYHMKK2F0dHJpYnV0aW9uIGluZm9ybWF0aW9uLCB3aGljaCBpbmNsdWRlczoKKyhhKSBOYW1lICgiQVVUSE9SIiksCisoYikgUHJvZmVzc2lvbmFsIGlkZW50aWZpY2F0aW9uICgiUFJPRkVTU0lPTkFMIElERU5USUZJQ0FUSU9OIiksIGFuZAorKGMpIFVSTCAoIlVSTCIpLgorMy4gTmVpdGhlciB0aGUgbmFtZSBub3IgYW55IHRyYWRlbWFyayBvZiB0aGUgQXV0aG9yIG1heSBiZSB1c2VkIHRvCitlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorNC4gVXNlcnMgYXJlIGVudGlyZWx5IHJlc3BvbnNpYmxlLCB0byB0aGUgZXhjbHVzaW9uIG9mIHRoZSBBdXRob3IgYW5kCithbnkgb3RoZXIgcGVyc29ucywgZm9yIGNvbXBsaWFuY2Ugd2l0aCAoMSkgcmVndWxhdGlvbnMgc2V0IGJ5IG93bmVycyBvcgorYWRtaW5pc3RyYXRvcnMgb2YgZW1wbG95ZWQgZXF1aXBtZW50LCAoMikgbGljZW5zaW5nIHRlcm1zIG9mIGFueSBvdGhlcgorc29mdHdhcmUsIGFuZCAoMykgbG9jYWwgcmVndWxhdGlvbnMgcmVnYXJkaW5nIHVzZSwgaW5jbHVkaW5nIHRob3NlCityZWdhcmRpbmcgaW1wb3J0LCBleHBvcnQsIGFuZCB1c2Ugb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4KKworVEhJUyBGUkVFIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitFRkZFQ1RTIE9GIFVOQVVUSE9SSVpFRCBPUiBNQUxJQ0lPVVMgTkVUV09SSyBBQ0NFU1M7CitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCitJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tRW5kIG9mIExpY2Vuc2UKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTEuMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgxMzFlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0xLjIKQEAgLTAsMCArMSwxMjMgQEAKKworICBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKKyAgVmVyc2lvbiAxLjIKKworVGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwIAorKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgCitmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIAorT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDEuMgorCitHcmFudCBvZiBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgCitjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrICgiWW91IikgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIAorbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSAoMSkgdG8gdXNlLCBjb3B5LCAKK21vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSAKK09yaWdpbmFsIFdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgYW5kICgyKSB1bmRlciBwYXRlbnQgY2xhaW1zIAorb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIAorV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciAKK3NhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgc3ViamVjdCB0byB0aGUgCitmb2xsb3dpbmcgY29uZGl0aW9ucy4KKworQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgCitEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayAKK25vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IAorbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAKKyJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIAorV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IAorY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCitFeGNsdXNpb25zIGZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgCituYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIAordHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgCitkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gCitvZiB0aGUgTGljZW5zb3IuCisKK1dhcnJhbnR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgCitpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIHRoYXQgdGhlIE9yaWdpbmFsIAorV29yayBpcyBkaXN0cmlidXRlZCBieSBMaWNlbnNvciB1bmRlciBhIHZhbGlkIGN1cnJlbnQgbGljZW5zZSBmcm9tIHRoZSAKK2NvcHlyaWdodCBvd25lci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgCitzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgCitCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IAorbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgCitXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgCitvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgCit1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIAord2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSAKK0xpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgCitpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IAorb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IAorbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSAKK29yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIAorbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgCitpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3JgcyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgCitwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgCitsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgCitsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCitMaWNlbnNlIHRvIFNvdXJjZSBDb2RlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiAKK3RoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSAKK2RvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgCithZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIAorV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiAKK0xpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgCittYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIAorYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IAorcHVibGlzaGluZyB0aGUgYWRkcmVzcyBvZiB0aGF0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgCitmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCitNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgCithdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSAKK2J5IHRoaXMgTGljZW5zZSBpZiBZb3UgZmlsZSBhIGxhd3N1aXQgaW4gYW55IGNvdXJ0IGFsbGVnaW5nIHRoYXQgYW55IE9TSSAKK0NlcnRpZmllZCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSB0aGF0IGlzIGxpY2Vuc2VkIHVuZGVyIGFueSBsaWNlbnNlIGNvbnRhaW5pbmcgCit0aGlzICJNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24iIGNsYXVzZSBpbmZyaW5nZXMgYW55IHBhdGVudCAKK2NsYWltcyB0aGF0IGFyZSBlc3NlbnRpYWwgdG8gdXNlIHRoYXQgc29mdHdhcmUuCisKK1JpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSAKK3Jlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIAorbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2Ugd2l0aG91dCAKK21vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIAorcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCistLSAKK0VORCBPRiBMSUNFTlNFLiBUaGUgZm9sbG93aW5nIGlzIGludGVuZGVkIHRvIGRlc2NyaWJlIHRoZSBlc3NlbnRpYWwgCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKEFGTCkgdmVyc2lvbiAxLjAgYW5kIG90aGVyIAorb3BlbiBzb3VyY2UgbGljZW5zZXM6CisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgaXMgc2ltaWxhciB0byB0aGUgQlNELCBNSVQsIFVvSS9OQ1NBIGFuZCBBcGFjaGUgCitsaWNlbnNlcyBpbiBtYW55IHJlc3BlY3RzIGJ1dCBpdCBpcyBpbnRlbmRlZCB0byBzb2x2ZSBhIGZldyBwcm9ibGVtcyB3aXRoIAordGhvc2UgbGljZW5zZXMuCisgICAgCisqIFRoZSBBRkwgaXMgd3JpdHRlbiBzbyBhcyB0byBtYWtlIGl0IGNsZWFyIHdoYXQgc29mdHdhcmUgaXMgYmVpbmcgCitsaWNlbnNlZCAoYnkgdGhlIGluY2x1c2lvbiBvZiBhIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgCitpbiB0aGUgc29mdHdhcmUpLiBUaGlzIHdheSwgdGhlIGxpY2Vuc2UgZnVuY3Rpb25zIGJldHRlciB0aGFuIGEgdGVtcGxhdGUgCitsaWNlbnNlLiBUaGUgQlNELCBNSVQgYW5kIFVvSS9OQ1NBIGxpY2Vuc2VzIGFwcGx5IHRvIHVuaWRlbnRpZmllZCBzb2Z0d2FyZS4KKyAgICAKKyogVGhlIEFGTCBjb250YWlucyBhIGNvbXBsZXRlIGNvcHlyaWdodCBncmFudCB0byB0aGUgc29mdHdhcmUuIFRoZSBCU0QgCithbmQgQXBhY2hlIGxpY2Vuc2VzIGFyZSB2YWd1ZSBhbmQgaW5jb21wbGV0ZSBpbiB0aGF0IHJlc3BlY3QuCisgICAgCisqIFRoZSBBRkwgY29udGFpbnMgYSBjb21wbGV0ZSBwYXRlbnQgZ3JhbnQgdG8gdGhlIHNvZnR3YXJlLiBUaGUgQlNELCBNSVQsIAorVW9JL05DU0EgYW5kIEFwYWNoZSBsaWNlbnNlcyByZWx5IG9uIGFuIGltcGxpZWQgcGF0ZW50IGxpY2Vuc2UgYW5kIGNvbnRhaW4gCitubyBleHBsaWNpdCBwYXRlbnQgZ3JhbnQuCisgICAgCisqIFRoZSBBRkwgbWFrZXMgaXQgY2xlYXIgdGhhdCBubyB0cmFkZW1hcmsgcmlnaHRzIGFyZSBncmFudGVkIHRvIHRoZSAKK2xpY2Vuc29yYHMgdHJhZGVtYXJrcy4gVGhlIEFwYWNoZSBsaWNlbnNlIGNvbnRhaW5zIHN1Y2ggYSBwcm92aXNpb24sIGJ1dCB0aGUgCitCU0QsIE1JVCBhbmQgVW9JL05DU0EgbGljZW5zZXMgZG8gbm90LgorICAgIAorKiBUaGUgQUZMIGluY2x1ZGVzIHRoZSB3YXJyYW50eSBieSB0aGUgbGljZW5zb3IgdGhhdCBpdCBlaXRoZXIgb3ducyB0aGUgCitjb3B5cmlnaHQgb3IgdGhhdCBpdCBpcyBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIHVuZGVyIGEgbGljZW5zZS4gTm9uZSBvZiAKK3RoZSBvdGhlciBsaWNlbnNlcyBjb250YWluIHRoYXQgd2FycmFudHkuIEFsbCBvdGhlciB3YXJyYW50aWVzIGFyZSBkaXNjbGFpbWVkLCAKK2FzIGlzIHRoZSBjYXNlIGZvciB0aGUgb3RoZXIgbGljZW5zZXMuCisKKyogVGhlIEFGTCBpcyBpdHNlbGYgY29weXJpZ2h0ZWQgKHdpdGggdGhlIHJpZ2h0IGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSAKK3dpdGhvdXQgbW9kaWZpY2F0aW9uKS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBjb3B5cmlnaHQgdG8gdGhlIAorbGljZW5zZSB3aWxsIGNvbnRyb2wgY2hhbmdlcy4gVGhlIEFwYWNoZSBsaWNlbnNlIGNvbnRhaW5zIGEgY29weXJpZ2h0IG5vdGljZSwgCitidXQgdGhlIEJTRCwgTUlUIGFuZCBVb0kvTkNTQSBsaWNlbnNlcyBkbyBub3QuIAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDI3YTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTIuMApAQCAtMCwwICsxLDQ4IEBACisKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKKyB2LiAyLjAKKworVGhpcyBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6ICAgCitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6IAorYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsgCisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOyAKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYzsgCisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZCAKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4gICAKKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4gIAorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuICBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuICBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLiAgICAKKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uICBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4gIAorCis1KSBUaGlzIHNlY3Rpb24gaW50ZW50aW9uYWxseSBvbWl0dGVkLiAgCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iICBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuICAKKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuICBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4gIAorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIGxpYWJpbGl0eSBmb3IgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yYHMgbmVnbGlnZW5jZSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uICBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuICAKKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlICBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuICBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuICAgIAorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGkpIGFnYWluc3QgTGljZW5zb3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgb3IgKGlpKSBhZ2FpbnN0IGFueSBlbnRpdHkgd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gdGhlIE9yaWdpbmFsIFdvcmsgKGJ1dCBleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpLiAgICAKKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuICBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuIMKkIDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiAgVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIAorCisxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICAKKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuICAgIAorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuICBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuICAgCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LiAgICAKKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMyBMYXdyZW5jZSBFLiBSb3Nlbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiAgVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4gCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0yLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyODRlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BRkwtMi4xCkBAIC0wLDAgKzEsNTAgQEAKKworVGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZQordi4gMi4xCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMi4xCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CisKK2IpIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0byB0aGUgcHVibGljOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgVGhpcyBzZWN0aW9uIGludGVudGlvbmFsbHkgb21pdHRlZC4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gJiMxOTQ7JiMxNjc7IDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUZMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2YzI1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FGTC0zLjAKQEAgLTAsMCArMSwyNyBAQAorCitBY2FkZW1pYyBGcmVlIExpY2Vuc2UgKCYjODIyMDtBRkwmIzgyMjE7KSB2LiAzLjAKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIGxpY2Vuc2luZyBub3RpY2UgYWRqYWNlbnQgdG8gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mIGEgY29sbGVjdGl2ZSB3b3JrOworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGVyZWJ5IGNyZWF0aW5nIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHVuZGVyIGFueSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlIHRoYXQgZG9lcyBub3QgY29udHJhZGljdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGluY2x1ZGluZyBMaWNlbnNvciYjODIxNztzIHJlc2VydmVkIHJpZ2h0cyBhbmQgcmVtZWRpZXMsIGluIHRoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlOworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhdGVudHMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kIGltcG9ydCB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yay4KKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4sIG5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGdyYW50cyBhbnkgbGljZW5zZSB0byBMaWNlbnNvciYjODIxNztzIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eS4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIG9yIGltcG9ydCBlbWJvZGltZW50cyBvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uIDIuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLgorNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2Ygbm9uLWluZnJpbmdlbWVudCwgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYsIGF0IGFueSB0aW1lLCBZb3UgZXhwcmVzc2x5IGFzc2VudGVkIHRvIHRoaXMgTGljZW5zZSwgdGhhdCBhc3NlbnQgaW5kaWNhdGVzIHlvdXIgY2xlYXIgYW5kIGlycmV2b2NhYmxlIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMgeW91ciByaWdodHMgdG8gdW5kZXJ0YWtlIHRoZSBhY3Rpdml0aWVzIGxpc3RlZCBpbiBTZWN0aW9uIDEsIGluY2x1ZGluZyB5b3VyIHJpZ2h0IHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGFmZmVjdCBjb3B5cmlnaHQgZXhjZXB0aW9ucyBhbmQgbGltaXRhdGlvbnMgKGluY2x1ZGluZyAmIzgyMjA7ZmFpciB1c2UmIzgyMjE7IG9yICYjODIyMDtmYWlyIGRlYWxpbmcmIzgyMjE7KS4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24geW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMShjKS4KKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKzExKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIG9yIHN1aXQgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdCBqdXJpc2RpY3Rpb24gZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlIG9yIGFmdGVyIGl0cyB0ZXJtaW5hdGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgYW5kIHBlbmFsdGllcyBvZiBjb3B5cmlnaHQgb3IgcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorMTIpIEF0dG9ybmV5cyYjODIxNzsgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3Igc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY292ZXIgaXRzIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaCBhY3Rpb24sIGluY2x1ZGluZyBhbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorMTYpIE1vZGlmaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBpcyBDb3B5cmlnaHQgJiMxNjk7IDIwMDUgTGF3cmVuY2UgUm9zZW4uIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBjb21tdW5pY2F0ZSB0aGlzIExpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHBlcm1pdHMgWW91IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UgYXMgYXBwbGllZCB0byB0aGUgT3JpZ2luYWwgV29yayBvciB0byBEZXJpdmF0aXZlIFdvcmtzLiBIb3dldmVyLCBZb3UgbWF5IG1vZGlmeSB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UgYW5kIGNvcHksIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgeW91ciBtb2RpZmllZCB2ZXJzaW9uICh0aGUgIk1vZGlmaWVkIExpY2Vuc2UiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlICJBY2FkZW1pYyBGcmVlIExpY2Vuc2UiIG9yICJBRkwiIGFuZCB5b3UgbWF5IG5vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0IHJlcGxhY2UgdGhlIG5vdGljZSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBhYm92ZSB3aXRoIHRoZSBub3RpY2UgIkxpY2Vuc2VkIHVuZGVyIDxpbnNlcnQgeW91ciBsaWNlbnNlIG5hbWUgaGVyZT4iIG9yIHdpdGggYSBub3RpY2Ugb2YgeW91ciBvd24gdGhhdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGUgbm90aWNlIGluIHRoaXMgTGljZW5zZTsgYW5kIChpaWkpIFlvdSBtYXkgbm90IGNsYWltIHRoYXQgeW91ciBvcmlnaW5hbCB3b3JrcyBhcmUgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdW5sZXNzIHlvdXIgTW9kaWZpZWQgTGljZW5zZSBoYXMgYmVlbiBhcHByb3ZlZCBieSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIGFuZCBZb3UgY29tcGx5IHdpdGggaXRzIGxpY2Vuc2UgcmV2aWV3IGFuZCBjZXJ0aWZpY2F0aW9uIHByb2Nlc3MuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQUdQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhMTNlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FHUEwtMy4wCkBAIC0wLDAgKzEsNjYxIEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBBRkZFUk8gR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDE5IE5vdmVtYmVyIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBlbnN1cmUKK2Nvb3BlcmF0aW9uIHdpdGggdGhlIGNvbW11bml0eSBpbiB0aGUgY2FzZSBvZiBuZXR3b3JrIHNlcnZlciBzb2Z0d2FyZS4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK291ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIERldmVsb3BlcnMgdGhhdCB1c2Ugb3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIHByb3RlY3QgeW91ciByaWdodHMKK3dpdGggdHdvIHN0ZXBzOiAoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIKK3lvdSB0aGlzIExpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZQorYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQSBzZWNvbmRhcnkgYmVuZWZpdCBvZiBkZWZlbmRpbmcgYWxsIHVzZXJzJyBmcmVlZG9tIGlzIHRoYXQKK2ltcHJvdmVtZW50cyBtYWRlIGluIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbSwgaWYgdGhleQorcmVjZWl2ZSB3aWRlc3ByZWFkIHVzZSwgYmVjb21lIGF2YWlsYWJsZSBmb3Igb3RoZXIgZGV2ZWxvcGVycyB0bworaW5jb3Jwb3JhdGUuICBNYW55IGRldmVsb3BlcnMgb2YgZnJlZSBzb2Z0d2FyZSBhcmUgaGVhcnRlbmVkIGFuZAorZW5jb3VyYWdlZCBieSB0aGUgcmVzdWx0aW5nIGNvb3BlcmF0aW9uLiAgSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YKK3NvZnR3YXJlIHVzZWQgb24gbmV0d29yayBzZXJ2ZXJzLCB0aGlzIHJlc3VsdCBtYXkgZmFpbCB0byBjb21lIGFib3V0LgorVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbWFraW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBhbmQKK2xldHRpbmcgdGhlIHB1YmxpYyBhY2Nlc3MgaXQgb24gYSBzZXJ2ZXIgd2l0aG91dCBldmVyIHJlbGVhc2luZyBpdHMKK3NvdXJjZSBjb2RlIHRvIHRoZSBwdWJsaWMuCisKKyAgVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8KK2Vuc3VyZSB0aGF0LCBpbiBzdWNoIGNhc2VzLCB0aGUgbW9kaWZpZWQgc291cmNlIGNvZGUgYmVjb21lcyBhdmFpbGFibGUKK3RvIHRoZSBjb21tdW5pdHkuICBJdCByZXF1aXJlcyB0aGUgb3BlcmF0b3Igb2YgYSBuZXR3b3JrIHNlcnZlciB0bworcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb24gcnVubmluZyB0aGVyZSB0byB0aGUKK3VzZXJzIG9mIHRoYXQgc2VydmVyLiAgVGhlcmVmb3JlLCBwdWJsaWMgdXNlIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiwgb24KK2EgcHVibGljbHkgYWNjZXNzaWJsZSBzZXJ2ZXIsIGdpdmVzIHRoZSBwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UKK2NvZGUgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb24uCisKKyAgQW4gb2xkZXIgbGljZW5zZSwgY2FsbGVkIHRoZSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK3B1Ymxpc2hlZCBieSBBZmZlcm8sIHdhcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoIHNpbWlsYXIgZ29hbHMuICBUaGlzIGlzCithIGRpZmZlcmVudCBsaWNlbnNlLCBub3QgYSB2ZXJzaW9uIG9mIHRoZSBBZmZlcm8gR1BMLCBidXQgQWZmZXJvIGhhcworcmVsZWFzZWQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCB3aGljaCBwZXJtaXRzIHJlbGljZW5zaW5nIHVuZGVyCit0aGlzIGxpY2Vuc2UuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAxMy4gUmVtb3RlIE5ldHdvcmsgSW50ZXJhY3Rpb247IFVzZSB3aXRoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGlmIHlvdSBtb2RpZnkgdGhlCitQcm9ncmFtLCB5b3VyIG1vZGlmaWVkIHZlcnNpb24gbXVzdCBwcm9taW5lbnRseSBvZmZlciBhbGwgdXNlcnMKK2ludGVyYWN0aW5nIHdpdGggaXQgcmVtb3RlbHkgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmsgKGlmIHlvdXIgdmVyc2lvbgorc3VwcG9ydHMgc3VjaCBpbnRlcmFjdGlvbikgYW4gb3Bwb3J0dW5pdHkgdG8gcmVjZWl2ZSB0aGUgQ29ycmVzcG9uZGluZworU291cmNlIG9mIHlvdXIgdmVyc2lvbiBieSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZSwgdGhyb3VnaCBzb21lIHN0YW5kYXJkIG9yIGN1c3RvbWFyeQorbWVhbnMgb2YgZmFjaWxpdGF0aW5nIGNvcHlpbmcgb2Ygc29mdHdhcmUuICBUaGlzIENvcnJlc3BvbmRpbmcgU291cmNlCitzaGFsbCBpbmNsdWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYW55IHdvcmsgY292ZXJlZCBieSB2ZXJzaW9uIDMKK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGF0IGlzIGluY29ycG9yYXRlZCBwdXJzdWFudCB0byB0aGUKK2ZvbGxvd2luZyBwYXJhZ3JhcGguCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgd29yayB3aXRoIHdoaWNoIGl0IGlzIGNvbWJpbmVkIHdpbGwgcmVtYWluIGdvdmVybmVkIGJ5IHZlcnNpb24KKzMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIDE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgordGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCit3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKK2J5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZQordmVyc2lvbnMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB5b3VyIHNvZnR3YXJlIGNhbiBpbnRlcmFjdCB3aXRoIHVzZXJzIHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlcgorbmV0d29yaywgeW91IHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGF0IGl0IHByb3ZpZGVzIGEgd2F5IGZvciB1c2VycyB0bworZ2V0IGl0cyBzb3VyY2UuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBwcm9ncmFtIGlzIGEgd2ViIGFwcGxpY2F0aW9uLCBpdHMKK2ludGVyZmFjZSBjb3VsZCBkaXNwbGF5IGEgIlNvdXJjZSIgbGluayB0aGF0IGxlYWRzIHVzZXJzIHRvIGFuIGFyY2hpdmUKK29mIHRoZSBjb2RlLiAgVGhlcmUgYXJlIG1hbnkgd2F5cyB5b3UgY291bGQgb2ZmZXIgc291cmNlLCBhbmQgZGlmZmVyZW50Citzb2x1dGlvbnMgd2lsbCBiZSBiZXR0ZXIgZm9yIGRpZmZlcmVudCBwcm9ncmFtczsgc2VlIHNlY3Rpb24gMTMgZm9yIHRoZQorc3BlY2lmaWMgcmVxdWlyZW1lbnRzLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgQUdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FOVExSLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDJhOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BTlRMUi1QRApAQCAtMCwwICsxLDMyIEBACisKK0FOVExSIFNPRlRXQVJFIFJJR0hUUworCitBTlRMUiAxOTg5LTIwMDYgRGV2ZWxvcGVkIGJ5IFRlcmVuY2UgUGFycgorUGFydGlhbGx5IHN1cHBvcnRlZCBieSBVbml2ZXJzaXR5IG9mIFNhbiBGcmFuY2lzY28gJmFtcDsgakd1cnUuY29tCisKK1dlIHJlc2VydmUgbm8gbGVnYWwgcmlnaHRzIHRvIHRoZSBBTlRMUi0taXQgaXMgZnVsbHkgaW4gdGhlCitwdWJsaWMgZG9tYWluLiBBbiBpbmRpdmlkdWFsIG9yIGNvbXBhbnkgbWF5IGRvIHdoYXRldmVyCit0aGV5IHdpc2ggd2l0aCBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCB3aXRoIEFOVExSIG9yIHRoZQorY29kZSBnZW5lcmF0ZWQgYnkgQU5UTFIsIGluY2x1ZGluZyB0aGUgaW5jb3Jwb3JhdGlvbiBvZgorQU5UTFIsIG9yIGl0cyBvdXRwdXQsIGludG8gY29tbWVyaWNhbCBzb2Z0d2FyZS4KKworV2UgZW5jb3VyYWdlIHVzZXJzIHRvIGRldmVsb3Agc29mdHdhcmUgd2l0aCBBTlRMUi4gSG93ZXZlciwKK3dlIGRvIGFzayB0aGF0IGNyZWRpdCBpcyBnaXZlbiB0byB1cyBmb3IgZGV2ZWxvcGluZworQU5UTFIuIEJ5ICJjcmVkaXQiLCB3ZSBtZWFuIHRoYXQgaWYgeW91IHVzZSBBTlRMUiBvcgoraW5jb3Jwb3JhdGUgYW55IHNvdXJjZSBjb2RlIGludG8gb25lIG9mIHlvdXIgcHJvZ3JhbXMKKyhjb21tZXJjaWFsIHByb2R1Y3QsIHJlc2VhcmNoIHByb2plY3QsIG9yIG90aGVyd2lzZSkgdGhhdAoreW91IGFja25vd2xlZGdlIHRoaXMgZmFjdCBzb21ld2hlcmUgaW4gdGhlIGRvY3VtZW50YXRpb24sCityZXNlYXJjaCByZXBvcnQsIGV0Yy4uLiBJZiB5b3UgbGlrZSBBTlRMUiBhbmQgaGF2ZQorZGV2ZWxvcGVkIGEgbmljZSB0b29sIHdpdGggdGhlIG91dHB1dCwgcGxlYXNlIG1lbnRpb24gdGhhdAoreW91IGRldmVsb3BlZCBpdCB1c2luZyBBTlRMUi4gSW4gYWRkaXRpb24sIHdlIGFzayB0aGF0IHRoZQoraGVhZGVycyByZW1haW4gaW50YWN0IGluIG91ciBzb3VyY2UgY29kZS4gQXMgbG9uZyBhcyB0aGVzZQorZ3VpZGVsaW5lcyBhcmUga2VwdCwgd2UgZXhwZWN0IHRvIGNvbnRpbnVlIGVuaGFuY2luZyB0aGlzCitzeXN0ZW0gYW5kIGV4cGVjdCB0byBtYWtlIG90aGVyIHRvb2xzIGF2YWlsYWJsZSBhcyB0aGV5IGFyZQorY29tcGxldGVkLgorCitUaGUgcHJpbWFyeSBBTlRMUiBndXk6CisKK1RlcmVuY2UgUGFycgorcGFycnRAY3MudXNmY2EuZWR1CitwYXJydEBhbnRsci5vcmcKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgwNWIxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQTC0xLjAKQEAgLTAsMCArMSwyMTggQEAKKworQURBUFRJVkUgUFVCTElDIExJQ0VOU0UKK1ZlcnNpb24gMS4wCitUSEUgTElDRU5TRUQgV09SSyBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBBREFQVElWRSBQVUJMSUMgTElDRU5TRSAoIkxJQ0VOU0UiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgTElDRU5TRUQgV09SSyBDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgTElDRU5TRSBBTkQgSVRTIFRFUk1TLCBXSEVUSEVSIE9SIE5PVCBTVUNIIFJFQ0lQSUVOVCBSRUFEUyBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiAiTElDRU5TRUQgV09SSyIgQU5EICJSRUNJUElFTlQiIEFSRSBERUZJTkVEIEJFTE9XLgorCitJTVBPUlRBTlQgTk9URTogVGhpcyBMaWNlbnNlIGlzICJhZGFwdGl2ZSIsIGFuZCB0aGUgZ2VuZXJpYyB2ZXJzaW9uIG9yIGFub3RoZXIgdmVyc2lvbiBvZiBhbiBBZGFwdGl2ZSBQdWJsaWMgTGljZW5zZSBzaG91bGQgbm90IGJlIHJlbGllZCB1cG9uIHRvIGRldGVybWluZSB5b3VyIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCByZWFkIHRoZSBzcGVjaWZpYyBBZGFwdGl2ZSBQdWJsaWMgTGljZW5zZSB0aGF0IHlvdSByZWNlaXZlIHdpdGggdGhlIExpY2Vuc2VkIFdvcmssIGFzIGNlcnRhaW4gdGVybXMgYXJlIGRlZmluZWQgYXQgdGhlIG91dHNldCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvci4KKworU2VlIFNlY3Rpb24gMi4yIGJlbG93LCBFeGhpYml0IEEgYXR0YWNoZWQsIGFuZCBhbnkgU3VwcGZpbGUudHh0IGFjY29tcGFueWluZyB0aGlzIExpY2Vuc2UgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhZGFwdGl2ZSBmZWF0dXJlcyBhcHBsaWNhYmxlIHRvIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgKGEpIGZvciBzZWxlY3RlZCBjaG9pY2Ugb2YgbGF3IGFuZCBqdXJpc2RpY3Rpb24gc2VlIFBhcnQgMyBvZiBFeGhpYml0IEE7IChiKSBmb3IgdGhlIHNlbGVjdGVkIGRlZmluaXRpb24gb2YgVGhpcmQgUGFydHkgc2VlIFBhcnQgNCBvZiBFeGhpYml0IEE7IGFuZCAoYykgZm9yIHNlbGVjdGVkIHBhdGVudCBsaWNlbnNpbmcgdGVybXMgKGlmIGFueSkgc2VlIFNlY3Rpb24gMi4yIGJlbG93IGFuZCBQYXJ0IDYgb2YgRXhoaWJpdCBBLgorCisxLiBERUZJTklUSU9OUy4KKworMS4xLiAiQ09OVFJJQlVUSU9OIiBtZWFuczoKKworKGEpIEluIHRoZSBjYXNlIG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgSW5pdGlhbCBXb3JrIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgYW5kCisKKyhiKSBJbiB0aGUgY2FzZSBvZiBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIHRoZSBTdWJzZXF1ZW50IFdvcmsgb3JpZ2luYXRpbmcgZnJvbSBhbmQgZGlzdHJpYnV0ZWQgYnkgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLgorCisxLjIuICJERVNJR05BVEVEIFdFQiBTSVRFIiBtZWFucyB0aGUgd2ViIHNpdGUgaGF2aW5nIHRoZSBVUkwgaWRlbnRpZmllZCBpbiBQYXJ0IDEgb2YgRXhoaWJpdCBBLCB3aGljaCBVUkwgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYnkgcG9zdGluZyBvbiB0aGUgY3VycmVudCBEZXNpZ25hdGVkIFdlYiBTaXRlIHRoZSBuZXcgVVJMIGZvciBhdCBsZWFzdCBzaXh0eSAoNjApIGRheXMuCisKKzEuMy4gIkRJU1RSSUJVVE9SIiBtZWFucyBhbnkgUGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgdGhlIExpY2Vuc2VkIFdvcmsgb3IgYW55IHBvcnRpb24gdGhlcmVvZiB0byBhdCBsZWFzdCBvbmUgVGhpcmQgUGFydHkuCisKKzEuNC4gIkVMRUNUUk9OSUMgRElTVFJJQlVUSU9OIE1FQ0hBTklTTSIgbWVhbnMgYW55IG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAiRVhFQ1VUQUJMRSIgbWVhbnMgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAiR09WRVJOSU5HIEpVUklTRElDVElPTiIgbWVhbnMgdGhlIHN0YXRlLCBwcm92aW5jZSBvciBvdGhlciBsZWdhbCBqdXJpc2RpY3Rpb24gaWRlbnRpZmllZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLgorCisxLjcuICJJTkRFUEVOREVOVCBNT0RVTEUiIG1lYW5zIGEgc2VwYXJhdGUgbW9kdWxlIG9mIHNvZnR3YXJlIGFuZC9vciBkYXRhIHRoYXQgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIG9yIGNvcGllZCBmcm9tIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIEluIGFkZGl0aW9uLCBhIG1vZHVsZSBkb2VzIG5vdCBxdWFsaWZ5IGFzIGFuIEluZGVwZW5kZW50IE1vZHVsZSBidXQgaW5zdGVhZCBmb3JtcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGlmIHRoZSBtb2R1bGU6IChhKSBpcyBlbWJlZGRlZCBpbiB0aGUgTGljZW5zZWQgV29yazsgKGIpIGlzIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGUgTGljZW5zZWQgV29yayBvdGhlciB0aGFuIGJ5IGEgZnVuY3Rpb24gY2FsbCBvciBhIGNsYXNzIHJlZmVyZW5jZTsgb3IgKGMpIG11c3QgYmUgaW5jbHVkZWQgb3IgY29udGFpbmVkLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3aXRoaW4gYSBmaWxlIGRpcmVjdG9yeSBvciBzdWJkaXJlY3RvcnkgYWN0dWFsbHkgY29udGFpbmluZyBmaWxlcyBtYWtpbmcgdXAgdGhlIExpY2Vuc2VkIFdvcmsuCisKKzEuOC4gIklOSVRJQUwgQ09OVFJJQlVUT1IiIG1lYW5zIHRoZSBQZXJzb24gb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSByZXF1aXJlZCBieSBQYXJ0IDEgb2YgRXhoaWJpdCBBLgorCisxLjkuICJJTklUSUFMIFdPUksiIG1lYW5zIHRoZSBpbml0aWFsIFNvdXJjZSBDb2RlLCBvYmplY3QgY29kZSAoaWYgYW55KSBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNvbXB1dGVyIHByb2dyYW0gaWRlbnRpZmllZCBpbiBQYXJ0IDIgb2YgRXhoaWJpdCBBLCBhcyBzdWNoIFNvdXJjZSBDb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKKzEuMTAuICJMQVJHRVIgV09SSyIgbWVhbnMgYSB3b3JrIHRoYXQgY29tYmluZXMgdGhlIExpY2Vuc2VkIFdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIkxJQ0VOU0VEIFdPUksiIG1lYW5zIHRoZSBJbml0aWFsIFdvcmsgYW5kL29yIGFueSBTdWJzZXF1ZW50IFdvcmssIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS4xMi4gIkxJQ0VOU0UgTk9USUNFIiBoYXMgdGhlIG1lYW5pbmcgYXNzaWduZWQgaW4gUGFydCA1IG9mIEV4aGliaXQgQS4KKworMS4xMy4gIk1PRElGSUNBVElPTiIgb3IgIk1PRElGSUNBVElPTlMiIG1lYW5zIGFueSBjaGFuZ2UgdG8gYW5kL29yIGFkZGl0aW9uIHRvIHRoZSBMaWNlbnNlZCBXb3JrLgorCisxLjE0LiAiUEVSU09OIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIG90aGVyIGxlZ2FsIGVudGl0eSwgaW5jbHVkaW5nIGEgY29ycG9yYXRpb24sIHBhcnRuZXJzaGlwIG9yIG90aGVyIGJvZHkuCisKKzEuMTUuICJSRUNJUElFTlQiIG1lYW5zIGFueSBQZXJzb24gd2hvIHJlY2VpdmVzIG9yIG9idGFpbnMgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgdGhpcyBMaWNlbnNlIChieSB3YXkgb2YgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCBhbnkgU3Vic2VxdWVudCBDb250cmlidXRvciBvciBEaXN0cmlidXRvcikuCisKKzEuMTYuICJTT1VSQ0UgQ09ERSIgbWVhbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBhIGNvbXB1dGVyIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGFuZCBjb21wb25lbnRzIG9mIHRoZSBjb21wdXRlciBwcm9ncmFtLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBhbmQgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlLgorCisxLjE3LiAiU1VCU0VRVUVOVCBDT05UUklCVVRPUiIgbWVhbnMgYW55IFBlcnNvbiB0aGF0IG1ha2VzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBtYWtpbmcgb2YgYW55IFN1YnNlcXVlbnQgV29yayBhbmQgdGhhdCBkaXN0cmlidXRlcyB0aGF0IFN1YnNlcXVlbnQgV29yayB0byBhdCBsZWFzdCBvbmUgVGhpcmQgUGFydHkuCisKKzEuMTguICJTVUJTRVFVRU5UIFdPUksiIG1lYW5zIGEgd29yayB0aGF0IGhhcyByZXN1bHRlZCBvciBhcmlzZXMgZnJvbSBjaGFuZ2VzIHRvIGFuZC9vciBhZGRpdGlvbnMgdG86CisKKyhhKSB0aGUgSW5pdGlhbCBXb3JrOworCisoYikgYW55IG90aGVyIFN1YnNlcXVlbnQgV29yazsgb3IKKworKGMpIHRvIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgSW5pdGlhbCBXb3JrIGFuZCBhbnkgc3VjaCBvdGhlciBTdWJzZXF1ZW50IFdvcms7CisKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIG9yaWdpbmF0ZSBmcm9tIGEgU3Vic2VxdWVudCBDb250cmlidXRvci4gQSBTdWJzZXF1ZW50IFdvcmsgd2lsbCAib3JpZ2luYXRlIiBmcm9tIGEgU3Vic2VxdWVudCBDb250cmlidXRvciBpZiB0aGUgU3Vic2VxdWVudCBXb3JrIHdhcyBhIHJlc3VsdCBvZiBlZmZvcnRzIGJ5IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciAob3IgYW55b25lIGFjdGluZyBvbiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JgcyBiZWhhbGYsIHN1Y2ggYXMsIGEgY29udHJhY3RvciBvciBvdGhlciBlbnRpdHkgdGhhdCBpcyBlbmdhZ2VkIGJ5IG9yIHVuZGVyIHRoZSBkaXJlY3Rpb24gb2YgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIGEgU3Vic2VxdWVudCBXb3JrIGV4cHJlc3NseSBleGNsdWRlcyBhbmQgc2hhbGwgbm90IGNhcHR1cmUgd2l0aGluIGl0cyBtZWFuaW5nIGFueSBJbmRlcGVuZGVudCBNb2R1bGUuCisKKzEuMTkuICJTVVBQTEVNRU5UIEZJTEUiIG1lYW5zIGEgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGhhdmluZyBhIGZpbGUgbmFtZSAic3VwcGZpbGUudHh0Ii4KKworMS4yMC4gIlRISVJEIFBBUlRZIiBoYXMgdGhlIG1lYW5pbmcgYXNzaWduZWQgaW4gUGFydCA0IG9mIEV4aGliaXQgQS4KKworMi4gTElDRU5TRS4KKworMi4xLiBDT1BZUklHSFQgTElDRU5TRSBGUk9NIElOSVRJQUwgQU5EIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1JTLgorCisoYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIGVhY2ggUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOgorCisoaSkgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIEluaXRpYWwgV29yazsgYW5kCisKKyhpaSkgcmVwcm9kdWNlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyAoaWYgYW55KSBwcmVwYXJlZCBieSBSZWNpcGllbnQ7CisKK2luIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0sIGVpdGhlciB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yay4KKworKGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgZWFjaCBSZWNpcGllbnQgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgY29weXJpZ2h0IGxpY2Vuc2UgdG86CisKKyhpKSByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgU3Vic2VxdWVudCBXb3JrIG9mIHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvcjsgYW5kCisKKyhpaSkgcmVwcm9kdWNlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyAoaWYgYW55KSBwcmVwYXJlZCBieSBSZWNpcGllbnQ7CisKK2luIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0sIGVpdGhlciB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yay4KKzIuMi4gUEFURU5UIExJQ0VOU0UgRlJPTSBJTklUSUFMIEFORCBTVUJTRVFVRU5UIENPTlRSSUJVVE9SUy4KKworKGEpIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBpbmNsdWRlIG9yIGdyYW50IGFueSBwYXRlbnQgbGljZW5zZSB3aGF0c29ldmVyIGZyb20gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIG9yIGFueSBEaXN0cmlidXRvciB1bmxlc3MsIGF0IHRoZSB0aW1lIHRoZSBJbml0aWFsIFdvcmsgaXMgZmlyc3QgZGlzdHJpYnV0ZWQgb3IgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlIChhcyB0aGUgY2FzZSBtYXkgYmUpLCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBoYXMgc2VsZWN0ZWQgcHVyc3VhbnQgdG8gUGFydCA2IG9mIEV4aGliaXQgQSB0aGUgcGF0ZW50IHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEuIElmIHRoaXMgaXMgbm90IGRvbmUgdGhlbiB0aGUgSW5pdGlhbCBXb3JrIGFuZCBhbnkgb3RoZXIgU3Vic2VxdWVudCBXb3JrIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IHBhdGVudCBsaWNlbnNlICh0aGUgIlBBVEVOVFMtRVhDTFVERUQgTElDRU5TRSIpLgorCisoYikgSG93ZXZlciwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHN1YnNlcXVlbnRseSBkaXN0cmlidXRlIG9yIG1ha2UgYXZhaWxhYmxlIChhcyB0aGUgY2FzZSBtYXkgYmUpIGZ1dHVyZSBjb3BpZXMgb2Y6ICgxKSB0aGUgSW5pdGlhbCBXb3JrOyBvciAoMikgYW55IExpY2Vuc2VkIFdvcmsgZGlzdHJpYnV0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hpY2ggaW5jbHVkZXMgdGhlIEluaXRpYWwgV29yayAob3IgYW55IHBvcnRpb24gdGhlcmVvZikgYW5kL29yIGFueSBNb2RpZmljYXRpb24gbWFkZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgYXZhaWxhYmxlIHVuZGVyIGEgTGljZW5zZSB3aGljaCBpbmNsdWRlcyBhIHBhdGVudCBsaWNlbnNlICh0aGUgIlBBVEVOVFMtSU5DTFVERUQgTElDRU5TRSIpIGJ5IHNlbGVjdGluZyBwdXJzdWFudCB0byBQYXJ0IDYgb2YgRXhoaWJpdCBBIHRoZSBwYXRlbnQgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIGZyb20gUGFydCA2IG9mIEV4aGliaXQgQSwgd2hlbiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBkaXN0cmlidXRlcyBvciBtYWtlcyBhdmFpbGFibGUgKGFzIHRoZSBjYXNlIG1heSBiZSkgc3VjaCBmdXR1cmUgY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZS4KKworKGMpIElmIGFueSBSZWNpcGllbnQgcmVjZWl2ZXMgb3Igb2J0YWlucyBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgb3RoZXIgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayB1bmRlciB0aGUgUGF0ZW50cy1JbmNsdWRlZCBMaWNlbnNlLCB0aGVuIGFsbCBsaWNlbnNpbmcgb2Ygc3VjaCBjb3BpZXMgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIGluY2x1ZGUgdGhlIHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSBmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEgYW5kIHRoYXQgUmVjaXBpZW50IHNoYWxsIG5vdCBiZSBhYmxlIHRvIHJlbHkgdXBvbiB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIGZvciBhbnkgc3VjaCBjb3BpZXMuIEhvd2V2ZXIsIGFsbCBSZWNpcGllbnRzIHRoYXQgcmVjZWl2ZSBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgb3RoZXIgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgV29yayB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBzaGFsbCBoYXZlIG5vIHBhdGVudCBsaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzdWNoIGNvcGllcyByZWNlaXZlZCB1bmRlciB0aGUgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIGFuZCBhdmFpbGFiaWxpdHkgYW5kIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcGllcywgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFJlY2lwaWVudCB0byBzdWNoIGNvcGllcywgc2hhbGwgYmUgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IHBhdGVudCBsaWNlbnNlLgorCisoZCkgV2hlcmUgYSBSZWNpcGllbnQgdXNlcyBpbiBjb21iaW5hdGlvbiBvciBjb21iaW5lcyBhbnkgY29weSBvZiB0aGUgTGljZW5zZWQgV29yayAob3IgcG9ydGlvbiB0aGVyZW9mKSBsaWNlbnNlZCB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIGEgUGF0ZW50cy1FeGNsdWRlZCBMaWNlbnNlIHdpdGggYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgbGljZW5zZWQgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGhhdmluZyBhIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSwgdGhlIGNvbWJpbmF0aW9uIChhbmQgYW55IHBvcnRpb24gdGhlcmVvZikgc2hhbGwsIGZyb20gdGhlIGZpcnN0IHRpbWUgc3VjaCBSZWNpcGllbnQgdXNlcywgbWFrZXMgYXZhaWxhYmxlIG9yIGRpc3RyaWJ1dGVzIHRoZSBjb21iaW5hdGlvbiAoYXMgdGhlIGNhc2UgbWF5IGJlKSwgYmUgc3ViamVjdCB0byBvbmx5IHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBoYXZpbmcgdGhlIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSB3aGljaCBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLgorCisyLjMuIEFDS05PV0xFREdFTUVOVCBBTkQgRElTQ0xBSU1FUi4KKworUmVjaXBpZW50IHVuZGVyc3RhbmRzIGFuZCBhZ3JlZXMgdGhhdCBhbHRob3VnaCBJbml0aWFsIENvbnRyaWJ1dG9yIGFuZCBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyByZXByZXNlbnRhdGlvbiwgd2FycmFudHksIGd1YXJhbnRlZSBvciBhc3N1cmFuY2UgaXMgcHJvdmlkZWQgYnkgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIG9yIERpc3RyaWJ1dG9yIHRoYXQgdGhlIExpY2Vuc2VkIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGFuZCBlYWNoIERpc3RyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UsIGluIHJlbGF0aW9uIHRvIHRoZSBMaWNlbnNlZCBXb3Jrcy4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCB3aXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcgZGlzY2xhaW1lcnMsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmssIGl0IGlzIFJlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFdvcmsuCisKKzIuNC4gUkVTRVJWQVRJT04uCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBEaXN0cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uCisKKzMuIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUy4KKworMy4xLiBESVNUUklCVVRJT04gR0VORVJBTExZLgorCisoYSkgQSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHNoYWxsIG1ha2UgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgU3Vic2VxdWVudCBXb3JrKHMpIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gZm9yIGEgcGVyaW9kIG9mIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocy4gVGhlIGFmb3Jlc2FpZCB0d2VsdmUgKDEyKSBtb250aCBwZXJpb2Qgc2hhbGwgYmVnaW4gd2l0aGluIGEgcmVhc29uYWJsZSB0aW1lIGFmdGVyIHRoZSBjcmVhdGlvbiBvZiB0aGUgU3Vic2VxdWVudCBXb3JrIGFuZCBubyBsYXRlciB0aGFuIHNpeHR5ICg2MCkgZGF5cyBhZnRlciBmaXJzdCBkaXN0cmlidXRpb24gb2YgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yYHMgU3Vic2VxdWVudCBXb3JrLgorCisoYikgQWxsIERpc3RyaWJ1dG9ycyBtdXN0IGRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSwgYW5kIG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIEV4aGliaXQgQSBhbmQgdGhlIGFjY29tcGFueWluZyBTdXBwbGVtZW50IEZpbGUpIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGRpc3RyaWJ1dGVkLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIExpY2Vuc2UgbXVzdCBiZSBwcm9taW5lbnRseSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgZmlsZSBjYWxsZWQgImxpY2Vuc2UudHh0LiIgSW4gYWRkaXRpb24sIHRoZSBMaWNlbnNlIE5vdGljZSBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBIG11c3QgYmUgaW5jbHVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgU291cmNlIENvZGUgZmlsZXMsIGFuZCB2aWV3YWJsZSB0byBhIHVzZXIgaW4gYW55IGV4ZWN1dGFibGUgc3VjaCB0aGF0IHRoZSBMaWNlbnNlIE5vdGljZSBpcyByZWFzb25hYmx5IGJyb3VnaHQgdG8gdGhlIGF0dGVudGlvbiBvZiBhbnkgcGFydHkgdXNpbmcgdGhlIExpY2Vuc2VkIFdvcmsuCisKKzMuMi4gRVhFQ1VUQUJMRSBESVNUUklCVVRJT05TIE9GIFRIRSBMSUNFTlNFRCBXT1JLLgorCitBIERpc3RyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaW4gRXhlY3V0YWJsZSBmb3JtIChhbiAiRVhFQ1VUQUJMRSBESVNUUklCVVRJT04iKSB0byBhbnkgdGhpcmQgcGFydHksIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDIgb2YgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgYW5kIGFjY29tcGFuaWVkIGJ5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UsIEFORCBwcm92aWRlZCBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIGZ1bGZpbGxlZDoKKworKGEpIFRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBTb3VyY2UgQ29kZSBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgbWFraW5nIHVwIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiwgYW5kIHRoZSBTb3VyY2UgQ29kZSBtdXN0IGJlIGRpc3RyaWJ1dGVkIG9uIHRoZSBzYW1lIG1lZGlhIGFzIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBvciB1c2luZyBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc207IG9yCisKKyhiKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRoaXJ0eSBzaXggKDM2KSBtb250aHMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgbWFraW5nIHVwIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiwgdG8gYmUgYXZhaWxhYmxlIGFuZCBkaXN0cmlidXRlZCB1c2luZyBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIGFuZCBzdWNoIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgcmVtYWluIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHRvIGFueSB0aGlyZCBwYXJ0eSB2aWEgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSAob3IgYW55IHJlcGxhY2VtZW50IEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0aGUgcGFydGljdWxhciBEaXN0cmlidXRvciBtYXkgcmVhc29uYWJseSBuZWVkIHRvIHR1cm4gdG8gYXMgYSBzdWJzdGl0dXRlKSBmb3Igc2FpZCBhdCBsZWFzdCB0aGlydHkgc2l4ICgzNikgbW9udGhzLgorCitGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBhYm92ZS1ub3RlZCByZXF1aXJlbWVudHMgYXBwbHkgdG8gYW55IExpY2Vuc2VkIFdvcmsgb3IgcG9ydGlvbiB0aGVyZW9mIGRpc3RyaWJ1dGVkIHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBFeGVjdXRhYmxlIGZvcm0sIHdoZXRoZXIgc3VjaCBkaXN0cmlidXRpb24gaXMgbWFkZSBhbG9uZSwgaW4gY29tYmluYXRpb24gd2l0aCBhIExhcmdlciBXb3JrIG9yIEluZGVwZW5kZW50IE1vZHVsZXMsIG9yIGluIHNvbWUgb3RoZXIgY29tYmluYXRpb24uCisKKzMuMy4gU09VUkNFIENPREUgRElTVFJJQlVUSU9OUy4KKworV2hlbiBhIERpc3RyaWJ1dG9yIG1ha2VzIHRoZSBMaWNlbnNlZCBXb3JrLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBhdmFpbGFibGUgdG8gYW55IFBlcnNvbiBpbiBTb3VyY2UgQ29kZSBmb3JtLCBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSwgc2l0dWF0ZWQgc28gdGhhdCB0aGUgY29weSBvZiB0aGUgTGljZW5zZSBpcyBjb25zcGljdW91c2x5IGJyb3VnaHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGF0IFBlcnNvbi4gRm9yIGdyZWF0ZXIgY2xhcmlmaWNhdGlvbiwgdGhpcyBTZWN0aW9uIDMuMyBhcHBsaWVzIHRvIGFsbCBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IFNvdXJjZSBDb2RlIGZvcm0uIEEgRGlzdHJpYnV0b3IgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCB3aGljaCBjaGFyZ2Ugc2hhbGwgYmUgbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCiszLjQuIFJFUVVJUkVEIE5PVElDRVMgSU4gU09VUkNFIENPREUuCisKK0VhY2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBub3RpY2Ugc2V0IG91dCBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBIGlzIGluY2x1ZGVkIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgZm9yIGVhY2ggU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gdGhhdCBwYXJ0aWN1bGFyIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGlmIHN1Y2ggbm90aWNlIGlzIG5vdCBhbHJlYWR5IGluY2x1ZGVkIGluIGVhY2ggc3VjaCBmaWxlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIGlzIHN0b3JlZCkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLgorCiszLjUuIE5PIERJU1RSSUJVVElPTiBSRVFVSVJFTUVOVFMgRk9SIElOVEVSTkFMTFkgVVNFRCBNT0RJRklDQVRJT05TLgorCitOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbnMgMy4yLCAzLjMgYW5kIDMuNCwgUmVjaXBpZW50IG1heSwgaW50ZXJuYWxseSB3aXRoaW4gaXRzIG93biBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24gdXNlIHRoZSBMaWNlbnNlZCBXb3JrLCBpbmNsdWRpbmcgdGhlIEluaXRpYWwgV29yayBhbmQgU3Vic2VxdWVudCBXb3JrcywgYW5kIG1ha2UgTW9kaWZpY2F0aW9ucyBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiBSZWNpcGllbnRgcyBvd24gY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIChjb2xsZWN0aXZlbHksICJJTlRFUk5BTCBVU0UgTU9ESUZJQ0FUSU9OUyIpLiBUaGUgUmVjaXBpZW50IHNoYWxsIGhhdmUgbm8gb2JsaWdhdGlvbiB0byBkaXN0cmlidXRlLCBpbiBlaXRoZXIgU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtLCBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFJlY2lwaWVudCBpbiB0aGUgY291cnNlIG9mIHN1Y2ggaW50ZXJuYWwgdXNlLCBleGNlcHQgd2hlcmUgcmVxdWlyZWQgYmVsb3cgaW4gdGhpcyBTZWN0aW9uIDMuNS4gQWxsIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIGRpc3RyaWJ1dGVkIHRvIGFueSBQZXJzb24sIHdoZXRoZXIgb3Igbm90IGEgVGhpcmQgUGFydHksIHNoYWxsIGJlIGRpc3RyaWJ1dGVkIHB1cnN1YW50IHRvIGFuZCBiZSBhY2NvbXBhbmllZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgUmVjaXBpZW50IGNob29zZXMgdG8gZGlzdHJpYnV0ZSBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyB0byBhbnkgVGhpcmQgUGFydHksIHRoZW4gdGhlIFJlY2lwaWVudCBzaGFsbCBiZSBkZWVtZWQgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgYW55IHN1Y2ggSW50ZXJuYWwgVXNlIE1vZGlmaWNhdGlvbnMgZGlzdHJpYnV0ZWQgdG8gYW55IFRoaXJkIFBhcnR5IHNoYWxsIGJlIGRlZW1lZCBhIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIHNoYWxsIGZyb20gdGhlIGZpcnN0IHN1Y2ggaW5zdGFuY2UgYmVjb21lIHBhcnQgb2YgdGhlIExpY2Vuc2VkIFdvcmsgdGhhdCBtdXN0IHRoZXJlYWZ0ZXIgYmUgZGlzdHJpYnV0ZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHRvIHRoaXJkIHBhcnRpZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAzLjEgdG8gMy40IGluY2x1c2l2ZS4KKworMy42LiBJTkRFUEVOREVOVCBNT0RVTEVTLgorCitUaGlzIExpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIEluZGVwZW5kZW50IE1vZHVsZXMgb2YgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIERpc3RyaWJ1dG9yIG9yIGFueSBSZWNpcGllbnQsIGFuZCBzdWNoIEluZGVwZW5kZW50IE1vZHVsZXMgbWF5IGJlIGxpY2Vuc2VkIG9yIG1hZGUgYXZhaWxhYmxlIHVuZGVyIG9uZSBvciBtb3JlIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50cy4KKworMy43LiBMQVJHRVIgV09SS1MuCisKK0FueSBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgbWF5IGNyZWF0ZSBvciBjb250cmlidXRlIHRvIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgb25lIG9yIG1vcmUgcHJvZHVjdHMuIEhvd2V2ZXIsIGluIGFueSBzdWNoIGNhc2UsIERpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCAoYXMgdGhlIGNhc2UgbWF5IGJlKSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBMaWNlbnNlZCBXb3JrIHBvcnRpb24gb2YgdGhlIExhcmdlciBXb3JrLgorCiszLjguIERFU0NSSVBUSU9OIE9GIERJU1RSSUJVVEVEIE1PRElGSUNBVElPTlMuCisKKyhhKSBFYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKGluY2x1ZGluZyB0aGUgSW5pdGlhbCBDb250cmlidXRvciB3aGVyZSB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbHNvIHF1YWxpZmllcyBhcyBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpIG11c3QgY2F1c2UgZWFjaCBTdWJzZXF1ZW50IFdvcmsgY3JlYXRlZCBvciBjb250cmlidXRlZCB0byBieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGF0IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtYWRlIGluIHRoZSBjcmVhdGlvbiBvciBjb250cmlidXRpb24gdG8gdGhhdCBTdWJzZXF1ZW50IFdvcmsuIElmIG5vIFN1cHBsZW1lbnQgRmlsZSBleGlzdHMgb3Igbm8gcmVxdWlyZW1lbnRzIGFyZSBzZXQgb3V0IGluIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIHRvIGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuCisKKyhiKSBUaGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgYXQgYW55IHRpbWUgaW50cm9kdWNlIHJlcXVpcmVtZW50cyBvciBhZGQgdG8gb3IgY2hhbmdlIGVhcmxpZXIgcmVxdWlyZW1lbnRzIChpbiBlYWNoIGNhc2UsIHRoZSAiRUFSTElFUiBERVNDUklQVElPTiBSRVFVSVJFTUVOVFMiKSBmb3IgZG9jdW1lbnRpbmcgY2hhbmdlcyByZXN1bHRpbmcgaW4gU3Vic2VxdWVudCBXb3JrcyBieSByZXZpc2luZyBQYXJ0IDEgb2YgZWFjaCBjb3B5IG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgZGlzdHJpYnV0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2l0aCBmdXR1cmUgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBXb3JrIHNvIHRoYXQgUGFydCAxIHRoZW4gY29udGFpbnMgbmV3IHJlcXVpcmVtZW50cyAodGhlICJORVcgREVTQ1JJUFRJT04gUkVRVUlSRU1FTlRTIikgZm9yIGRvY3VtZW50aW5nIHN1Y2ggY2hhbmdlcy4KKworKGMpIEFueSBSZWNpcGllbnQgcmVjZWl2aW5nIGF0IGFueSB0aW1lIGFueSBjb3B5IG9mIGFuIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrIHVuZGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKGluIGVhY2ggY2FzZSwgYW4gIkVhcmxpZXIgTElDRU5TRUQgQ09QWSIpIGhhdmluZyB0aGUgRWFybGllciBEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMgbWF5IGNob29zZSwgd2l0aCByZXNwZWN0IHRvIGVhY2ggc3VjaCBFYXJsaWVyIExpY2Vuc2VkIENvcHksIHRvIGNvbXBseSB3aXRoIHRoZSBFYXJsaWVyIERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cyBvciB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cy4gV2hlcmUgYSBSZWNpcGllbnQgY2hvb3NlcyB0byBjb21wbHkgd2l0aCB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cywgdGhhdCBSZWNpcGllbnQgd2lsbCwgd2hlbiB0aGVyZWFmdGVyIGRpc3RyaWJ1dGluZyBhbnkgY29waWVzIG9mIGFueSBzdWNoIEVhcmxpZXIgTGljZW5zZWQgQ29weSwgaW5jbHVkZSBhIFN1cHBsZW1lbnQgRmlsZSBoYXZpbmcgYSBzZWN0aW9uIGVudGl0bGVkIFBhcnQgMSB0aGF0IGNvbnRhaW5zIGEgY29weSBvZiB0aGUgTmV3IERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cy4KKworKGQpIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIGludGVudCBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBpcyB0byBwcm92aWRlIGEgbWVjaGFuaXNtIChpZiBhbnkpIGJ5IHdoaWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3JzIG11c3QgZG9jdW1lbnQgY2hhbmdlcyB0aGF0IHRoZXkgbWFrZSB0byB0aGUgTGljZW5zZWQgV29yayByZXN1bHRpbmcgaW4gU3Vic2VxdWVudCBXb3Jrcy4gUGFydCAxIG9mIGFueSBTdXBwbGVtZW50IEZpbGUgc2hhbGwgbm90IGJlIHVzZWQgdG8gaW5jcmVhc2Ugb3IgcmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGluIEFydGljbGUgMiBvZiB0aGlzIExpY2Vuc2Ugb3IgaW4gYW55IG90aGVyIHdheSBpbmNyZWFzZSBvciBkZWNyZWFzZSB0aGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBhbnkgUmVjaXBpZW50LCBhbmQgc2hhbGwgYXQgbm8gdGltZSBzZXJ2ZSBhcyB0aGUgYmFzaXMgZm9yIHRlcm1pbmF0aW5nIHRoZSBMaWNlbnNlLiBGdXJ0aGVyLCBhIFJlY2lwaWVudCBjYW4gYmUgcmVxdWlyZWQgdG8gY29ycmVjdCBhbmQgY2hhbmdlIGl0cyBkb2N1bWVudGF0aW9uIHByb2NlZHVyZXMgdG8gY29tcGx5IHdpdGggUGFydCAxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUsIGJ1dCBjYW5ub3QgYmUgcGVuYWxpc2VkIHdpdGggZGFtYWdlcy4gUGFydCAxIG9mIGFueSBTdXBwbGVtZW50IEZpbGUgaXMgb25seSBiaW5kaW5nIG9uIGVhY2ggUmVjaXBpZW50IG9mIGFueSBMaWNlbnNlZCBXb3JrIHRvIHRoZSBleHRlbnQgUGFydCAxIHNldHMgb3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgdG8gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLgorCisoZSkgQW4gZXhhbXBsZSBvZiBhIHNldCBvZiByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgYW5kIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGlzIHNldCBvdXQgaW4gUGFydCA3IG9mIEV4aGliaXQgQSBvZiB0aGlzIExpY2Vuc2UuIFBhcnQgNyBpcyBhIHNhbXBsZSBvbmx5IGFuZCBpcyBub3QgYmluZGluZyBvbiBSZWNpcGllbnRzLCB1bmxlc3MgKHN1YmplY3QgdG8gdGhlIGVhcmxpZXIgcGFyYWdyYXBocyBvZiB0aGlzIFNlY3Rpb24gMy44KSB0aG9zZSBhcmUgdGhlIHJlcXVpcmVtZW50cyB0aGF0IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluY2x1ZGVzIGluIFBhcnQgMSBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIHdpdGggdGhlIGNvcGllcyBvZiB0aGUgSW5pdGlhbCBXb3JrIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMy45LiBVU0UgT0YgRElTVFJJQlVUT1IgTkFNRS4KKworVGhlIG5hbWUgb2YgYSBEaXN0cmlidXRvciBtYXkgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIERpc3RyaWJ1dG9yIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSB0aGUgTGljZW5zZWQgV29yayBvciBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIExpY2Vuc2VkIFdvcmssIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCiszLjEwLiBMSU1JVEVEIFJFQ09HTklUSU9OIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IuCisKKyhhKSBBcyBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAganVzdGlmeSB0aGUgdGltZSwgbW9uZXkgYW5kIGVmZm9ydCBpbnZlc3RlZCBpbiB3cml0aW5nIHRoZSBJbml0aWFsIFdvcmssIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBpbmNsdWRlIGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGEgcmVxdWlyZW1lbnQgdGhhdCBlYWNoIHRpbWUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgb3IgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uLCBpcyBsYXVuY2hlZCBvciBydW4sIGEgcHJvbWluZW50IGRpc3BsYXkgb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3JgcyBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiBtdXN0IG9jY3VyICh0aGUgIkFUVFJJQlVUSU9OIElORk9STUFUSU9OIikuIFRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBTb3VyY2UgQ29kZSBmaWxlLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBzcGVjaWZ5IGluIHRoZSBTdXBwbGVtZW50IEZpbGUgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSByZXN1bHRpbmcgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmssIGJ1dCBub3QgYSBwcm9ncmFtIGRlcGVuZGVudCB0aGVyZW9uLiBUaGUgaW50ZW50IGlzIHRvIHByb3ZpZGUgZm9yIHJlYXNvbmFibHkgbW9kZXN0IGF0dHJpYnV0aW9uLCB0aGVyZWZvcmUgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IG5vdCByZXF1aXJlIFJlY2lwaWVudHMgdG8gZGlzcGxheSwgYXQgYW55IHRpbWUsIG1vcmUgdGhhbiB0aGUgZm9sbG93aW5nIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uOiAoYSkgYSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgKGIpIGEgd29yZCBvciBvbmUgcGhyYXNlIChub3QgZXhjZWVkaW5nIDEwIHdvcmRzKTsgKGMpIG9uZSBkaWdpdGFsIGltYWdlIG9yIGdyYXBoaWMgcHJvdmlkZWQgd2l0aCB0aGUgSW5pdGlhbCBXb3JrOyBhbmQgKGQpIGEgVVJMIChjb2xsZWN0aXZlbHksIHRoZSAiQVRUUklCVVRJT04gTElNSVRTIikuCisKKyhiKSBJZiBubyBTdXBwbGVtZW50IEZpbGUgZXhpc3RzLCBvciBubyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBpcyBzZXQgb3V0IGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFJlY2lwaWVudHMgdG8gZGlzcGxheSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKKyhjKSBFYWNoIFJlY2lwaWVudCBhY2tub3dsZWRnZXMgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgY29udGFpbmVkIHdpdGhpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBMaWNlbnNlZCBXb3JrIGFyZSB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGFuZCBtYXkgb25seSBiZSB1c2VkIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIG9yIHVuZGVyIGNpcmN1bXN0YW5jZXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBsYXcsIG9yIGFzIGV4cHJlc3NseSBzZXQgb3V0IGluIHRoaXMgTGljZW5zZS4KKworMy4xMS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBhbnkgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcHJvdmlzaW9ucyBjb250YWluZWQgd2l0aGluIGEgU3VwcGxlbWVudCBGaWxlIG1heSBvbmx5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbmF0dXJlIG9mIHRoZSBkZXNjcmlwdGlvbiBvciBhdHRyaWJ1dGlvbiByZXF1aXJlbWVudHMsIGFzIHRoZSBjYXNlIG1heSBiZS4gQW55IHByb3Zpc2lvbiBpbiBhIFN1cHBsZW1lbnQgRmlsZSB0aGF0IG90aGVyd2lzZSBwdXJwb3J0cyB0byBtb2RpZnksIHZhcnksIG51bGxpZnkgb3IgYW1lbmQgYW55IHJpZ2h0LCBvYmxpZ2F0aW9uIG9yIHJlcHJlc2VudGF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gc2hhbGwgYmUgZGVlbWVkIHZvaWQgdG8gdGhhdCBleHRlbnQsIGFuZCBzaGFsbCBiZSBvZiBubyBmb3JjZSBvciBlZmZlY3QuCisKKzQuIENPTU1FUkNJQUwgVVNFIEFORCBJTkRFTU5JVFkuCisKKzQuMS4gQ09NTUVSQ0lBTCBTRVJWSUNFUy4KKworQSBSZWNpcGllbnQgKCJDT01NRVJDSUFMIFJFQ0lQSUVOVCIpIG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyAoY29sbGVjdGl2ZWx5LCAiU0VSVklDRVMiKSB0byBvbmUgb3IgbW9yZSBvdGhlciBSZWNpcGllbnRzIG9yIERpc3RyaWJ1dG9ycy4gSG93ZXZlciwgc3VjaCBDb21tZXJjaWFsIFJlY2lwaWVudCBtYXkgZG8gc28gb25seSBvbiB0aGF0IENvbW1lcmNpYWwgUmVjaXBpZW50YHMgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgYW55IG90aGVyIERpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCwgYW5kIENvbW1lcmNpYWwgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24ocykgaXMvYXJlIG9mZmVyZWQgYnkgQ29tbWVyY2lhbCBSZWNpcGllbnQgYWxvbmUuIEF0IG5vIHRpbWUgbWF5IENvbW1lcmNpYWwgUmVjaXBpZW50IHVzZSBhbnkgU2VydmljZXMgdG8gZGVueSBhbnkgcGFydHkgdGhlIExpY2Vuc2VkIFdvcmsgaW4gU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtIHdoZW4gc28gcmVxdWlyZWQgdW5kZXIgYW55IG9mIHRoZSBvdGhlciB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhpcyBTZWN0aW9uIDQuMSBkb2VzIG5vdCBkaW1pbmlzaCBhbnkgb2YgdGhlIG90aGVyIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgb2JsaWdhdGlvbiBvZiB0aGUgQ29tbWVyY2lhbCBSZWNpcGllbnQgYXMgYSBEaXN0cmlidXRvciwgd2hlbiBkaXN0cmlidXRpbmcgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZm9ybSwgdG8gbWFrZSBzdWNoIGRpc3RyaWJ1dGlvbiByb3lhbHR5LWZyZWUgKHN1YmplY3QgdG8gdGhlIHJpZ2h0IHRvIGNoYXJnZSBhIGZlZSBvZiBubyBtb3JlIHRoYW4gdGhlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgZGlzdHJpYnV0aW9uIChhcyB0aGUgY2FzZSBtYXkgYmUpKS4KKworNC4yLiBJTkRFTU5JVFkuCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBMaWNlbnNlZCBXb3JrLCB0aGUgRGlzdHJpYnV0b3Igd2hvIGluY2x1ZGVzIGFueSBvZiB0aGUgTGljZW5zZWQgV29yayBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIERpc3RyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIERpc3RyaWJ1dG9yIGluY2x1ZGVzIHRoZSBMaWNlbnNlZCBXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIG9yIG9mZmVycyBhbnkgU2VydmljZXMsIHN1Y2ggRGlzdHJpYnV0b3IgKCJDT01NRVJDSUFMIERJU1RSSUJVVE9SIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBEaXN0cmlidXRvciBvciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbiBlYWNoIGNhc2UgYW4gIklOREVNTklGSUVEIFBBUlRZIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMT1NTRVMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgUGFydHkgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgb3IgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBTZXJ2aWNlcy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIFBhcnR5IG11c3Q6IChhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltOyBhbmQgKGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjby1vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIFBhcnR5IG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKKzUuIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLgorCis1LjEuIE5FVyBWRVJTSU9OUy4KKworVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis1LjIuIEVGRkVDVCBPRiBORVcgVkVSU0lPTlMuCisKK09uY2UgdGhlIExpY2Vuc2VkIFdvcmsgb3IgYW55IHBvcnRpb24gdGhlcmVvZiBoYXMgYmVlbiBwdWJsaXNoZWQgYnkgSW5pdGlhbCBDb250cmlidXRvciB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIEhvd2V2ZXIsIGlmIGEgUmVjaXBpZW50IGNob29zZXMgdG8gdXNlIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlbiBmcm9tIHRoZSBkYXRlIG9mIG1ha2luZyB0aGlzIGNob2ljZSwgdGhlIFJlY2lwaWVudCBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IHN1YnNlcXVlbnQgdmVyc2lvbiB3aXRoIHJlc3BlY3QgdG8gYWxsIGZ1cnRoZXIgcmVwcm9kdWN0aW9uLCBwcmVwYXJhdGlvbiBvZiBkZXJpdmF0aXZlIHdvcmtzLCBwdWJsaWMgZGlzcGxheSBvZiwgcHVibGljIHBlcmZvcm1hbmNlIG9mLCBkaXN0cmlidXRpb24gYW5kIHN1YmxpY2Vuc2luZyBieSB0aGUgUmVjaXBpZW50IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgTGljZW5zZWQgV29yay4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIExpY2Vuc2VkIFdvcmsKKworNi4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworNi4xLiBHRU5FUkFMIERJU0NMQUlNRVIuCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgQU5ZIFJFUFJFU0VOVEFUSU9OLCBXQVJSQU5UWSwgR1VBUkFOVEVFLCBBU1NVUkFOQ0UgT1IgQ09ORElUSU9OIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgV09SSyBJUyBXSVRIIFJFQ0lQSUVOVC4gU0hPVUxEIEFOWSBMSUNFTlNFRCBXT1JLIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgUkVDSVBJRU5UIChOT1QgVEhFIElOSVRJQUwgQ09OVFJJQlVUT1IgT1IgQU5ZIFNVQlNFUVVFTlQgQ09OVFJJQlVUT1IpIEFTU1VNRVMgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIENMQVVTRSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgTElDRU5TRUQgV09SSyBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBMSUNFTlNFIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gVEhJUyBESVNDTEFJTUVSLgorCis2LjIuIFJFU1BPTlNJQklMSVRZIE9GIFJFQ0lQSUVOVFMuCisKK0VhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBMaWNlbnNlZCBXb3JrIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzcuIFRFUk1JTkFUSU9OLgorCis3LjEuIFRoaXMgTGljZW5zZSBzaGFsbCBjb250aW51ZSB1bnRpbCB0ZXJtaW5hdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZXhwcmVzcyB0ZXJtcyBoZXJlaW4uCisKKzcuMi4gUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gdGVybWluYXRlIHRoaXMgTGljZW5zZSBhdXRvbWF0aWNhbGx5IGF0IGFueSB0aW1lLgorCis3LjMuIFRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHRvIGEgcGFydGljdWxhciBSZWNpcGllbnQsIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgc3VjaCBSZWNpcGllbnQgaXMgaW4gbWF0ZXJpYWwgYnJlYWNoIG9mIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlscyB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiBzaXh0eSAoNjApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCBhbnkgbWF0ZXJpYWwgYnJlYWNoIGJ5IHN1Y2ggUmVjaXBpZW50IG9mIGFueSB0ZXJtIG9mIGFueSBvdGhlciBMaWNlbnNlIHVuZGVyIHdoaWNoIHN1Y2ggUmVjaXBpZW50IGlzIGdyYW50ZWQgYW55IHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgV29yayBzaGFsbCBjb25zdGl0dXRlIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIHRoaXMgTGljZW5zZS4KKworNy40LiBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBieSBvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIFJlY2lwaWVudCBmb3IgYW55IHJlYXNvbiwgYWxsIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciBhbmQgdW5kZXIgYW55IG90aGVyIExpY2Vuc2UgdG8gdGhhdCBSZWNpcGllbnQgc2hhbGwgdGVybWluYXRlLiBIb3dldmVyLCBhbGwgc3VibGljZW5zZXMgdG8gdGhlIExpY2Vuc2VkIFdvcmsgd2hpY2ggd2VyZSBwcmV2aW91c2x5IHByb3Blcmx5IGdyYW50ZWQgYnkgc3VjaCBSZWNpcGllbnQgdW5kZXIgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW4gZWFjaCBjYXNlLCBhbiAiT3RoZXIgTGljZW5zZSIgYW5kIGluIHBsdXJhbCwgIk90aGVyIExpY2Vuc2VzIikgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgdW5kZXIgc3VjaCBPdGhlciBMaWNlbnNlcyBhcyBzZXQgb3V0IGluIHRoZWlyIHJlc3BlY3RpdmUgU2VjdGlvbnMgMiwgMywgNCwgNSwgNiwgNyBhbmQgOCwgbXV0YXRpcyBtdXRhbmRpcywgZm9yIHNvIGxvbmcgYXMgdGhlIHJlc3BlY3RpdmUgc3VibGljZW5zZWVzIChpLmUuIG90aGVyIFJlY2lwaWVudHMpIHJlbWFpbiBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZSB1bmRlciB3aGljaCBzdWNoIHN1YmxpY2Vuc2VlcyByZWNlaXZlZCByaWdodHMgdG8gdGhlIExpY2Vuc2VkIFdvcmsuIEFueSB0ZXJtaW5hdGlvbiBvZiBzdWNoIE90aGVyIExpY2Vuc2VzIHNoYWxsIGJlIHB1cnN1YW50IHRvIHRoZWlyIHJlc3BlY3RpdmUgU2VjdGlvbiA3LCBtdXRhdGlzIG11dGFuZGlzLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis3LjUuIFVwb24gYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBieSBvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIFJlY2lwaWVudCwgU2VjdGlvbnMgNC4xLCA0LjIsIDYuMSwgNi4yLCA3LjQsIDcuNSwgOC4xLCBhbmQgOC4yLCB0b2dldGhlciB3aXRoIGFsbCBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSBuZWNlc3NhcnkgZm9yIHRoZSBpbnRlcnByZXRhdGlvbiBhbmQgZW5mb3JjZW1lbnQgb2Ygc2FtZSwgc2hhbGwgZXhwcmVzc2x5IHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworOC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKKzguMS4gSU4gTk8gRVZFTlQgU0hBTEwgQU5ZIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IsIElUUyBTVUJTSURJQVJJRVMsIE9SIEFGRklMSUFURVMsIE9SIEFOWSBPRiBJVFMgT1IgVEhFSVIgUkVTUEVDVElWRSBPRkZJQ0VSUywgRElSRUNUT1JTLCBFTVBMT1lFRVMsIEFORC9PUiBBR0VOVFMgKEFTIFRIRSBDQVNFIE1BWSBCRSksIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCBEQU1BR0VTLCBJTkRJUkVDVCBEQU1BR0VTLCBQVU5JVElWRSBEQU1BR0VTLCBJTkNJREVOVEFMIERBTUFHRVMsIFNQRUNJQUwgREFNQUdFUywgRVhFTVBMQVJZIERBTUFHRVMsIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgT1RIRVIgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIE9SIEFOWSBPVEhFUiBMT1NTIEFSSVNJTkcgT1VUIE9GIE9SIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSEUgVVNFLCBJTkFCSUxJVFkgVE8gVVNFLCBVTkFVVEhPUklaRUQgVVNFLCBQRVJGT1JNQU5DRSwgT1IgTk9OLVBFUkZPUk1BTkNFIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIEFOWSBQQVJUIFRIRVJFT0YgT1IgVEhFIFBST1ZJU0lPTiBPRiBPUiBGQUlMVVJFIFRPIFBST1ZJREUgU1VQUE9SVCBTRVJWSUNFUywgT1IgVEhBVCBSRVNVTFQgRlJPTSBFUlJPUlMsIERFRkVDVFMsIE9NSVNTSU9OUywgREVMQVlTIElOIE9QRVJBVElPTiBPUiBUUkFOU01JU1NJT04sIE9SIEFOWSBPVEhFUiBGQUlMVVJFIE9GIFBFUkZPUk1BTkNFKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIElOIFJFTEFUSU9OIFRPIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBUSElTIENMQVVTRSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgTElDRU5TRUQgV09SSyBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBMSUNFTlNFIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gVEhFIExJTUlUQVRJT05TIFNFVCBGT1JUSCBJTiBUSElTIFNFQ1RJT04gOC4xLgorCis4LjIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgRUFDSCBSRUNJUElFTlQgU0hBTEwgTk9UIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLgorCis5LiBHT1ZFUk5JTkcgTEFXIEFORCBMRUdBTCBBQ1RJT04uCisKKzkuMS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIGFzc2lnbmVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEsIHdpdGhvdXQgcmVnYXJkIHRvIGl0cyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gTm8gcGFydHkgbWF5IGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIHRoZSBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgKGlmIGFueSkgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSBsaXRpZ2F0aW9uIGFyaXNpbmcgdW5kZXIgdGhpcyBMaWNlbnNlLiBOb3RlIHRoYXQgaWYgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gaXMgbm90IGFzc2lnbmVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEsIHRoZW4gdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gc2hhbGwgYmUgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLgorCis5LjIuIFRoZSBjb3VydHMgb2YgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gc2hhbGwgaGF2ZSBqdXJpc2RpY3Rpb24sIGJ1dCBub3QgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiwgdG8gZW50ZXJ0YWluIGFuZCBkZXRlcm1pbmUgYWxsIGRpc3B1dGVzIGFuZCBjbGFpbXMsIHdoZXRoZXIgZm9yIHNwZWNpZmljIHBlcmZvcm1hbmNlLCBpbmp1bmN0aW9uLCBkYW1hZ2VzIG9yIG90aGVyd2lzZSwgCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI0ZjgyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4wCkBAIC0wLDAgKzEsMzcyIEBACisKK0FQUExFIFBVQkxJQyBTT1VSQ0UgTElDRU5TRQorVmVyc2lvbiAxLjAgLSBNYXJjaCAxNiwgMTk5OQorCitQbGVhc2UgcmVhZCB0aGlzIExpY2Vuc2UgY2FyZWZ1bGx5IGJlZm9yZSBkb3dubG9hZGluZyB0aGlzIHNvZnR3YXJlLgorQnkgZG93bmxvYWRpbmcgYW5kIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBkbyBub3Qgb3IgY2Fubm90IGFncmVlIHRvIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlcgord29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgcHVibGljbHkgYW5ub3VuY2VzIGFzCitzdWJqZWN0IHRvIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIGFuZCB3aGljaCBjb250YWlucyBhCitub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbAorQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgdmVyc2lvbiAxLjAgKG9yIHN1YnNlcXVlbnQgdmVyc2lvbiB0aGVyZW9mKSwgYXMgaXQgbWF5CitiZSByZXZpc2VkIGZyb20gdGltZSB0byB0aW1lIGJ5IEFwcGxlICgiTGljZW5zZSIpLiBBcyB1c2VkIGluIHRoaXMKK0xpY2Vuc2U6CisKKzEuMSAiQXBwbGljYWJsZSBQYXRlbnRzIiBtZWFuOiAoYSkgaW4gdGhlIGNhc2Ugd2hlcmUgQXBwbGUgaXMgdGhlCitncmFudG9yIG9mIHJpZ2h0cywgKGkpIHBhdGVudHMgb3IgcGF0ZW50IGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBub3cKK29yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgd2hvc2UKK2NsYWltcyBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5Cit0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUKK09yaWdpbmFsIENvZGUgd2l0aG91dCBpbmZyaW5nZW1lbnQ7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91CithcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgcGF0ZW50cyBhbmQgcGF0ZW50IGFwcGxpY2F0aW9ucyB0aGF0CithcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpCit3aG9zZSBjbGFpbXMgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZQorb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZQorY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS4zICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlcgordGhhbiBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgKFImYW1wO0QpLCBhbmQgaW5jbHVkZXMKK3dpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZgorQ292ZXJlZCBDb2RlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBleGNlcHQgZm9yIFImYW1wO0QgdXNlLAorYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCitDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHkgaW4gYW55IGZvcm0gb3IgbWFubmVyLgorCisxLjQgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS41ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZQordG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiBDb3ZlcmVkIENvZGUuIFdoZW4gY29kZSBpcworcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvCitvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7CithbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtCitzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjYgIk9yaWdpbmFsIENvZGUiIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yaworYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZwordGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMgb3Igd29ya3MKK21hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4KK2V4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2gKK3dvcmsuCisKKzEuNyAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlcgord29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbAorbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywKK3NjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZQorKG9iamVjdCBjb2RlKS4KKworMS44ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiCitpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlcgorY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mCitzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uCit0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCitBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwKK0NvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIE9yaWdpbmFsIENvZGUsIHdpdGggb3IKK3dpdGhvdXQgTW9kaWZpY2F0aW9ucywgc29sZWx5IGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZAorZGV2ZWxvcG1lbnQsIHByb3ZpZGVkIHRoYXQgWW91IG11c3QgaW4gZWFjaCBpbnN0YW5jZToKKworKGEpIHJldGFpbiBhbmQgcmVwcm9kdWNlIGluIGFsbCBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSB0aGUgY29weXJpZ2h0CithbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIKK2luIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUKK3RoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOworCisoYikgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZgorQ292ZXJlZCBDb2RlIGFuZCBkb2N1bWVudGF0aW9uIFlvdSBkaXN0cmlidXRlLCBhbmQgWW91IG1heSBub3Qgb2ZmZXIKK29yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIKK1NlY3Rpb24gNjsgYW5kCisKKyhjKSBjb21wbGV0ZWx5IGFuZCBhY2N1cmF0ZWx5IGRvY3VtZW50IGFsbCBNb2RpZmljYXRpb25zIHRoYXQgeW91IGhhdmUKK21hZGUgYW5kIHRoZSBkYXRlIG9mIGVhY2ggc3VjaCBNb2RpZmljYXRpb24sIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZgordGhlIE9yaWdpbmFsIENvZGUgeW91IHVzZWQsIHByb21pbmVudGx5IGluY2x1ZGUgYSBmaWxlIGNhcnJ5aW5nIHN1Y2gKK2luZm9ybWF0aW9uIHdpdGggdGhlIE1vZGlmaWNhdGlvbnMsIGFuZCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbgorRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYWxsIHN1Y2ggTW9kaWZpY2F0aW9ucy4KKworMi4yIFlvdSBtYXkgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoCitpbnN0YW5jZToKKworKGEpIHNhdGlzZnkgYWxsIHRoZSBjb25kaXRpb25zIG9mIFNlY3Rpb24gMi4xIHdpdGggcmVzcGVjdCB0byB0aGUKK1NvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7CisKKyhiKSBtYWtlIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIGluIFNvdXJjZQorQ29kZSBmb3JtIHZpYSBlbGVjdHJvbmljIGRpc3RyaWJ1dGlvbiAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQKK2ZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgYW5kIGFueSBhZGRpdGlvbmFsIHRlcm1zIFlvdSBtYXkgY2hvb3NlIHRvCitvZmZlciB1bmRlciBTZWN0aW9uIDYuIFlvdSBtdXN0IGNvbnRpbnVlIHRvIG1ha2UgdGhlIFNvdXJjZSBDb2RlIG9mCitZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHlvdSBEZXBsb3kgdGhlCitDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbAorRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlcjsKKworKGMpIG11c3Qgbm90aWZ5IEFwcGxlIGFuZCBvdGhlciB0aGlyZCBwYXJ0aWVzIG9mIGhvdyB0byBvYnRhaW4gWW91cgorRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBieSBmaWxsaW5nIG91dCBhbmQgc3VibWl0dGluZyB0aGUgcmVxdWlyZWQKK2luZm9ybWF0aW9uIGZvdW5kIGF0CitodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UvbW9kaWZpY2F0aW9ucy5odG1sOyBhbmQKKworKGQpIGlmIHlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwKK2luY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlLCBpbiB0aGUgY29kZSBpdHNlbGYgYXMgd2VsbCBhcyBpbiByZWxhdGVkCitkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcworYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kCit3aGVyZSB0byBvYnRhaW4gc3VjaCBTb3VyY2UgQ29kZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlCitsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2U6CisKKyhhKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudHMgYW5kIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsCityZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBhbmQgRGVwbG95IFlvdXIgTW9kaWZpY2F0aW9ucyBvZiB0aGUKK3NhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOworYW5kCisKKyhiKSBZb3UgaGVyZWJ5IGdyYW50IHRvIEFwcGxlIGFuZCBpdHMgc3Vic2lkaWFyaWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3dvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwgYW5kIGlycmV2b2NhYmxlIGxpY2Vuc2UsIHVuZGVyIFlvdXIKK0FwcGxpY2FibGUgUGF0ZW50cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvcgorY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBleGVjdXRlLCBjb21waWxlLCBkaXNwbGF5LAorcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0sIHRocm91Z2gKK211bHRpcGxlIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbi4KKworNC4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkCitDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaAoraW5zdGFuY2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUKK2Z1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLgorCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4KK1NlY3Rpb24gMiwgbm8gb3RoZXIgcGF0ZW50IHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZAorYnkgQXBwbGUgaGVyZWluLiBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cworc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZQorZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IKK290aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluCisoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQKK0NvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIKK3NvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlLiBZb3UgbXVzdCBvYnRhaW4gdGhlCityZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5CitZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlCitoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdAorQXBwbGUgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUKK2dpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbgorcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heQorY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbworY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50Cit2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlCitoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZAordW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvcgoraW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZQorT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzCitvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdQorZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IKK2FueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBPUklHSU5BTAorQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUCitPRiBBTlkgS0lORCBBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKEZPUiBUSEUgUFVSUE9TRVMgT0YKK1NFQ1RJT05TIDggQU5EIDksIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIEFSRSBDT0xMRUNUSVZFTFkKK1JFRkVSUkVEIFRPIEFTICJBUFBMRSIpIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IKK0NPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBPUgorU0FUSVNGQUNUT1JZIFFVQUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gQVBQTEUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUCitUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIE1FRVQgWU9VUgorUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIE9SSUdJTkFMIENPREUgV0lMTCBCRQorVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIE9SSUdJTkFMIENPREUKK1dJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOCitCWSBBUFBMRSBPUiBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBCitXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiBZb3UKK2Fja25vd2xlZGdlIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlCitvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uCitzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUKK29mIHRoZSBPcmlnaW5hbCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlCitwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTGlhYmlsaXR5LgorCis5LjEgSW5mcmluZ2VtZW50LiBJZiBhbnkgb2YgdGhlIE9yaWdpbmFsIENvZGUgYmVjb21lcyB0aGUgc3ViamVjdCBvZgorYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgKCJBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIiksIEFwcGxlIG1heSwgYXQKK2l0cyBzb2xlIGRpc2NyZXRpb24gYW5kIG9wdGlvbjogKGEpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzCituZWNlc3NhcnkgZm9yIFlvdSB0byBjb250aW51ZSB1c2luZyB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZTsgKGIpCittb2RpZnkgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgc28gdGhhdCBpdCBpcyBubyBsb25nZXIKK2luZnJpbmdpbmc7IG9yIChjKSB0ZXJtaW5hdGUgWW91ciByaWdodHMgdG8gdXNlIHRoZSBBZmZlY3RlZAorT3JpZ2luYWwgQ29kZSwgZWZmZWN0aXZlIGltbWVkaWF0ZWx5IHVwb24gQXBwbGVgcyBwb3N0aW5nIG9mIGEKK25vdGljZSB0byBzdWNoIGVmZmVjdCBvbiB0aGUgQXBwbGUgd2ViIHNpdGUgdGhhdCBpcyB1c2VkIGZvcgoraW1wbGVtZW50YXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCis5LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgU0hBTEwgQVBQTEUgQkUKK0xJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SCitJTkFCSUxJVFkgVE8gVVNFIFRIRSBPUklHSU5BTCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSCitVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwKK1BST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgSEFTIEJFRU4gQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GCitFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsCitsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZQorYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICJBcHBsZSIsICJBcHBsZSBDb21wdXRlciIsICJNYWMgT1MgWCIsCisiTWFjIE9TIFggU2VydmVyIiBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcKK3RvIEFwcGxlIChjb2xsZWN0aXZlbHkgIkFwcGxlIE1hcmtzIikgYW5kIG5vIEFwcGxlIE1hcmtzIG1heSBiZQordXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlCitvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzCit3aXRoIEFwcGxlYHMgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlCitwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvCit0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YKK0FwcGxlICgiQXBwbGUgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwKK25vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBBcHBsZSBtYXksIGF0IGl0cworc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIKK3RoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMKK0xpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4gQXBwbGVgcworZGV2ZWxvcG1lbnQsIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIHN1YmxpY2Vuc2luZyBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2lsbCBub3QgYmUgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBUZXJtaW5hdGlvbi4KKworMTIuMSBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwKK3Rlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aAorYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOyAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mCit0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbnMgOS4xIGFuZC9vciAxMy42KGIpOyBvciAoYykKK2F1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUKK3Rlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQKK2FnYWluc3QgQXBwbGUuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8KK2ltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiBhbmQKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIGluIHRoZQorY2FzZSBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9uIDkuMSwgYW5kIHRvIGRlc3Ryb3kgYWxsIGNvcGllcyBvZgordGhlIENvdmVyZWQgQ29kZSBvciBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIChpbiB0aGUgY2FzZSBvZgordGVybWluYXRpb24gdW5kZXIgU2VjdGlvbiA5LjEpIHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvcgorY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuCitwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uCitvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbgoraW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsCitpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQKKzEzLiBOZWl0aGVyIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLAoraW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nCit0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mCitlaXRoZXIgcGFydHkuCisKKzEzLiBNaXNjZWxsYW5lb3VzLgorCisxMy4xIEV4cG9ydCBMYXcgQXNzdXJhbmNlcy4gWW91IG1heSBub3QgdXNlIG9yIG90aGVyd2lzZSBleHBvcnQgb3IKK3JlLWV4cG9ydCB0aGUgT3JpZ2luYWwgQ29kZSBleGNlcHQgYXMgYXV0aG9yaXplZCBieSBVbml0ZWQgU3RhdGVzCitsYXcgYW5kIHRoZSBsYXdzIG9mIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIE9yaWdpbmFsIENvZGUgd2FzCitvYnRhaW5lZC4gSW4gcGFydGljdWxhciwgYnV0IHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIE9yaWdpbmFsIENvZGUKK21heSBub3QgYmUgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgKGEpIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IKK3Jlc2lkZW50IG9mKSBhbnkgVS5TLiBlbWJhcmdvZWQgY291bnRyeSBvciAoYikgdG8gYW55b25lIG9uIHRoZQorVS5TLiBUcmVhc3VyeSBEZXBhcnRtZW50YHMgbGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMKK29yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2VgcyBUYWJsZSBvZiBEZW5pYWwgT3JkZXJzLiBCeQordXNpbmcgdGhlIE9yaWdpbmFsIENvZGUsIFlvdSByZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdCBZb3UgYXJlIG5vdAorbG9jYXRlZCBpbiwgdW5kZXIgY29udHJvbCBvZiwgb3IgYSBuYXRpb25hbCBvciByZXNpZGVudCBvZiBhbnkgc3VjaAorY291bnRyeSBvciBvbiBhbnkgc3VjaCBsaXN0LgorCisxMy4yIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMKK2RlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YQorcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseQorcHJvdmlkZWQgdG8gdGhlIHB1YmxpYyBhcyBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhpcyBjdXN0b21hcnkKK2NvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4KK2FjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIKK1NvZnR3YXJlKSBhbmQsIGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgcHVyY2hhc2VzLCBERkFSCisyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zCisoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUKK0RvY3VtZW50YXRpb24pLiBBY2NvcmRpbmdseSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZQorQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTMuMyBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcworY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZgorbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudAordG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3IKK290aGVyd2lzZS4KKworMTMuNCBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIKK0FwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IKK2l0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0KK3RoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLAorTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heQorZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjUgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgQXBwbGUgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uCitvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudAorb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2gKK3Byb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QKK3RoZSBkcmFmdGVyIHdpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuNiBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudAoranVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uCit0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlCitlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZQorZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YKK3RoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpCitOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yCityZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aAorU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mCit0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UKK211c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZAorZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMy43IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uCitiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4KK3RoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkKK2NvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUKK2FuZCBmZWRlcmFsIGNvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcworTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5CitleGNsdWRlZC4KKworMTMuOCBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZgorQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nCitjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkCit0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzCitwYXJ0aWVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cworY29ubmV4ZXMgc29pZW50IHJlZGlnZXMgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLgorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5IEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCBSaWdodHMKK1Jlc2VydmVkLiBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSBhcyBkZWZpbmVkIGluIGFuZCB0aGF0IGFyZSBzdWJqZWN0IHRvIHRoZSBBcHBsZSBQdWJsaWMKK1NvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgYExpY2Vuc2VgKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlCitMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZSBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcKK3RoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUKK2Rpc3RyaWJ1dGVkIG9uIGFuIGBBUyBJU2AgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUKK0xpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNWU0NmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMQpAQCAtMCwwICsxLDM3NCBAQAorCitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMS4xIC0gQXByaWwgMTksMTk5OQorCitQbGVhc2UgcmVhZCB0aGlzIExpY2Vuc2UgY2FyZWZ1bGx5IGJlZm9yZSBkb3dubG9hZGluZyB0aGlzIHNvZnR3YXJlLgorQnkgZG93bmxvYWRpbmcgYW5kIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQKK2J5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgZG8gbm90IG9yIGNhbm5vdCBhZ3JlZSB0byB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgdGhlIHNvZnR3YXJlLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIHdoaWNoIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBwdWJsaWNseSBhbm5vdW5jZXMgYXMKK3N1YmplY3QgdG8gdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgYW5kIHdoaWNoIGNvbnRhaW5zIGEKK25vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsCitDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljCitTb3VyY2UgTGljZW5zZSB2ZXJzaW9uIDEuMSAob3Igc3Vic2VxdWVudCB2ZXJzaW9uIHRoZXJlb2YpLCBhcyBpdCBtYXkKK2JlIHJldmlzZWQgZnJvbSB0aW1lIHRvIHRpbWUgYnkgQXBwbGUgKCJMaWNlbnNlIikuICBBcyB1c2VkIGluIHRoaXMKK0xpY2Vuc2U6CisKKzEuMSAiQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSIgbWVhbnMgb25seSB0aG9zZSBzcGVjaWZpYyBwb3J0aW9ucyBvZgorT3JpZ2luYWwgQ29kZSB0aGF0IGFsbGVnZWRseSBpbmZyaW5nZSB1cG9uIGFueSBwYXJ0eWBzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9yIGFyZSBvdGhlcndpc2UgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZgoraW5mcmluZ2VtZW50LgorCisxLjIgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzCit0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyCithY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gQXBwbGUgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0CittYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UgYW5kL29yIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUKK3dpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YKK3JpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsCitvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBpbiBZb3VyCitNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKzEuMyAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlCitjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueQorcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyCit0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCksIGFuZCBpbmNsdWRlcword2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mCitDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UsCithcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQKK0NvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMKK3RoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjYgIk1vZGlmaWNhdGlvbnMiIG1lYW4gYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBhbmQvb3IgY2hhbmdlCit0bywgdGhlIHN1YnN0YW5jZSBhbmQvb3Igc3RydWN0dXJlIG9mIENvdmVyZWQgQ29kZS4gIFdoZW4gY29kZSBpcworcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvCitvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7CithbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtCitzdGF0ZW1lbnRzIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgQ292ZXJlZCBDb2RlLgorCisxLjcgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zCitvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuCitleHByZXNzbHkgaWRlbnRpZmllZCBieSBBcHBsZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoCit3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kCitvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS44ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyCit3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsCittb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLAorc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlCisob2JqZWN0IGNvZGUpLgorCisxLjkgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZworcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiCitpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlcgorY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CitvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mCitzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiAgU3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbgordGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgYW5kIGRvd25sb2FkIHRoZSBPcmlnaW5hbCBDb2RlLCBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0gZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YKK0FwcGxlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbAorQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFlvdSBtYXkgdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvcgord2l0aG91dCBNb2RpZmljYXRpb25zLCBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kCitkZXZlbG9wbWVudCwgcHJvdmlkZWQgdGhhdCBZb3UgbXVzdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQKK2FuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBvZiBBcHBsZSBhcyB0aGV5IGFwcGVhcgoraW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZQordGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7CisKKyhiKSBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mCitDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlcgorb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlcgorU2VjdGlvbiA2OyBhbmQKKworKGMpIGNvbXBsZXRlbHkgYW5kIGFjY3VyYXRlbHkgZG9jdW1lbnQgYWxsIE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgaGF2ZQorbWFkZSBhbmQgdGhlIGRhdGUgb2YgZWFjaCBzdWNoIE1vZGlmaWNhdGlvbiwgZGVzaWduYXRlIHRoZSB2ZXJzaW9uIG9mCit0aGUgT3JpZ2luYWwgQ29kZSB5b3UgdXNlZCwgcHJvbWluZW50bHkgaW5jbHVkZSBhIGZpbGUgY2Fycnlpbmcgc3VjaAoraW5mb3JtYXRpb24gd2l0aCB0aGUgTW9kaWZpY2F0aW9ucywgYW5kIGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluCitFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgc3VjaCBNb2RpZmljYXRpb25zLgorCisyLjIgWW91IG1heSBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IFlvdSBtdXN0IGluIGVhY2gKKyAgaW5zdGFuY2U6CisKKyhhKSBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlCitTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOworCisoYikgbWFrZSBhbGwgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIHB1YmxpY2x5IGF2YWlsYWJsZSBpbiBTb3VyY2UKK0NvZGUgZm9ybSB2aWEgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24gKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKQordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgc3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudHMgc2V0Citmb3J0aCBpbiBTZWN0aW9uIDMgYmVsb3csIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBZb3UgbWF5IGNob29zZSB0bworb2ZmZXIgdW5kZXIgU2VjdGlvbiA2LiAgWW91IG11c3QgY29udGludWUgdG8gbWFrZSB0aGUgU291cmNlIENvZGUgb2YKK1lvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUKK0NvdmVyZWQgQ29kZSBvciB0d2VsdmUgKDEyKSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBpbml0aWFsCitEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyOworCisoYykgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgY29udGFpbmluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgWW91LAoraW5mb3JtIG90aGVycyBvZiBob3cgdG8gb2J0YWluIHRob3NlIE1vZGlmaWNhdGlvbnMgYnkgZmlsbGluZyBvdXQgYW5kCitzdWJtaXR0aW5nIHRoZSBpbmZvcm1hdGlvbiBmb3VuZCBhdAoraHR0cDovL3d3dy5hcHBsZS5jb20vcHVibGljc291cmNlL21vZGlmaWNhdGlvbnMuaHRtbCwgaWYgYXZhaWxhYmxlOworYW5kCisKKyhkKSBpZiBZb3UgRGVwbG95IENvdmVyZWQgQ29kZSBpbiBvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksCitpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMKK2F2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZAord2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuCisKKzMuIFlvdXIgR3JhbnRzLiAgSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUKK2xpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwKK3JlcHJvZHVjZSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZQorc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIEFwcGxlYHMgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjI7CithbmQKKworKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLAord29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91cgorQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkCitvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGV4ZWN1dGUsIGNvbXBpbGUsIGRpc3BsYXksCitwZXJmb3JtLCBtb2RpZnkgb3IgaGF2ZSBtb2RpZmllZCAoZm9yIEFwcGxlIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzKSwKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgWW91ciBNb2RpZmljYXRpb25zLCBpbiBhbnkgZm9ybSwgdGhyb3VnaAorbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uLgorCis0LiBMYXJnZXIgV29ya3MuICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkCitDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuICBJbiBlYWNoIHN1Y2gKK2luc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlCitmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbgorU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5CitBcHBsZSBoZXJlaW4uICBNb2RpZmljYXRpb25zIGFuZC9vciBMYXJnZXIgV29ya3MgbWF5IHJlcXVpcmUKK2FkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cworc29sZSBkaXNjcmV0aW9uLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiAgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUKK2Zvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yCitvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbgorKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUKK3Jlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZS4gWW91IG11c3Qgb2J0YWluIHRoZQorcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieQorWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBBcHBsZQoraGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QKK0FwcGxlIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gIEFwcGxlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgRWFjaCB2ZXJzaW9uIHdpbGwgYmUKK2dpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4KK3B1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUKK3RvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZQorc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgcHVibGlzaGVkIGJ5IEFwcGxlLiAgTm8gb25lIG90aGVyIHRoYW4gQXBwbGUgaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuICBUaGUgT3JpZ2luYWwgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvcgoraW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuICBUaGUKK09yaWdpbmFsIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZgorZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiAgWW91IGV4cHJlc3NseQorYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBhbnkgcG9ydGlvbgordGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gIFRIRSBPUklHSU5BTCBDT0RFIElTCitQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5ECitBTkQgQVBQTEUgQU5EIEFQUExFYFMgTElDRU5TT1IoUykgKEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQKKzksIEFQUExFIEFORCBBUFBMRWBTIExJQ0VOU09SKFMpIEFSRSBDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMKKyJBUFBMRSIpIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK0FORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkKK1JJR0hUUy4gIEFQUExFIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUKK09SSUdJTkFMIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YKK1RIRSBPUklHSU5BTCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi0gRlJFRSwgT1IgVEhBVAorREVGRUNUUyBJTiBUSEUgT1JJR0lOQUwgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gIE5PIE9SQUwgT1IgV1JJVFRFTgorSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFIE9SIEFOIEFQUExFIEFVVEhPUklaRUQKK1JFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UgVEhFCitTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiAgWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgaXMgbm90CitpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdAorbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluCit3aGljaCBjYXNlIHRoZSBmYWlsdXJlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsCitwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTGlhYmlsaXR5LgorCis5LjEgSW5mcmluZ2VtZW50LiAgSWYgYW55IHBvcnRpb24gb2YsIG9yIGZ1bmN0aW9uYWxpdHkgaW1wbGVtZW50ZWQgYnksCit0aGUgT3JpZ2luYWwgQ29kZSBiZWNvbWVzIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW5mcmluZ2VtZW50LAorQXBwbGUgbWF5LCBhdCBpdHMgb3B0aW9uOiAoYSkgYXR0ZW1wdCB0byBwcm9jdXJlIHRoZSByaWdodHMgbmVjZXNzYXJ5Citmb3IgQXBwbGUgYW5kIFlvdSB0byBjb250aW51ZSB1c2luZyB0aGUgQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZTsgKGIpCittb2RpZnkgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgc28gdGhhdCBpdCBpcyBubyBsb25nZXIgaW5mcmluZ2luZzsKK29yIChjKSBzdXNwZW5kIFlvdXIgcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIHN1YmxpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBBZmZlY3RlZCBPcmlnaW5hbCBDb2RlIHVudGlsIGEgZmluYWwgZGV0ZXJtaW5hdGlvbiBvZgordGhlIGNsYWltIGlzIG1hZGUgYnkgYSBjb3VydCBvciBnb3Zlcm5tZW50YWwgYWRtaW5pc3RyYXRpdmUgYWdlbmN5IG9mCitjb21wZXRlbnQganVyaXNkaWN0aW9uIGFuZCBBcHBsZSBsaWZ0cyB0aGUgc3VzcGVuc2lvbiBhcyBzZXQgZm9ydGgKK2JlbG93LiAgU3VjaCBzdXNwZW5zaW9uIG9mIHJpZ2h0cyB3aWxsIGJlIGVmZmVjdGl2ZSBpbW1lZGlhdGVseSB1cG9uCitBcHBsZWBzIHBvc3Rpbmcgb2YgYSBub3RpY2UgdG8gc3VjaCBlZmZlY3Qgb24gdGhlIEFwcGxlIHdlYiBzaXRlIHRoYXQKK2lzIHVzZWQgZm9yIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIFVwb24gc3VjaCBmaW5hbAorZGV0ZXJtaW5hdGlvbiBiZWluZyBtYWRlLCBpZiBBcHBsZSBpcyBsZWdhbGx5IGFibGUsIHdpdGhvdXQgdGhlCitwYXltZW50IG9mIGEgZmVlIG9yIHJveWFsdHksIHRvIHJlc3VtZSB1c2UsIHJlcHJvZHVjdGlvbiwKK21vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIEFmZmVjdGVkIE9yaWdpbmFsCitDb2RlLCBBcHBsZSB3aWxsIGxpZnQgdGhlIHN1c3BlbnNpb24gb2YgcmlnaHRzIHRvIHRoZSBBZmZlY3RlZAorT3JpZ2luYWwgQ29kZSBieSBwb3N0aW5nIGEgbm90aWNlIHRvIHN1Y2ggZWZmZWN0IG9uIHRoZSBBcHBsZSB3ZWIgc2l0ZQordGhhdCBpcyB1c2VkIGZvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIExpY2Vuc2UuICBJZiBBcHBsZSBzdXNwZW5kcworWW91ciByaWdodHMgdG8gQWZmZWN0ZWQgT3JpZ2luYWwgQ29kZSwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwKK2JlIGNvbnN0cnVlZCB0byByZXN0cmljdCBZb3UsIGF0IFlvdXIgb3B0aW9uIGFuZCBzdWJqZWN0IHRvIGFwcGxpY2FibGUKK2xhdywgZnJvbSByZXBsYWNpbmcgdGhlIEFmZmVjdGVkIE9yaWdpbmFsIENvZGUgd2l0aCBub24taW5mcmluZ2luZworY29kZSBvciBpbmRlcGVuZGVudGx5IG5lZ290aWF0aW5nIGZvciBuZWNlc3NhcnkgcmlnaHRzIGZyb20gc3VjaCB0aGlyZAorcGFydHkuCisKKzkuMiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgU0hBTEwgQVBQTEUgQkUKK0xJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTworVVNFIFRIRSBPUklHSU5BTCBDT0RFLCBPUiBBTlkgUE9SVElPTiBUSEVSRU9GLCBXSEVUSEVSIFVOREVSIEEgVEhFT1JZCitPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZCitPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUyBBTkQgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIEVTU0VOVElBTCBQVVJQT1NFIE9GCitBTlkgUkVNRURZLiAgSW4gbm8gZXZlbnQgc2hhbGwgQXBwbGVgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwKK2RhbWFnZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMKKygkNTAuMDApLgorCisxMC4gVHJhZGVtYXJrcy4gIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIkFwcGxlIiwgIkFwcGxlIENvbXB1dGVyIiwgIk1hYyBPUyBYIiwgIk1hYworT1MgWCBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBBcHBsZQorKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBhbmQgbm8gQXBwbGUgTWFya3MgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcworcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZWBzIHRoaXJkCitwYXJ0eSB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcyB3aGljaCBhcmUgcG9zdGVkIGF0CitodHRwOi8vd3d3LmFwcGxlLmNvbS9sZWdhbC9ndWlkZWxpbmVzZm9yM3JkcGFydGllcy5odG1sLgorCisxMS4gT3duZXJzaGlwLiAgQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvCit0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUKKygiQXBwbGUgTW9kaWZpY2F0aW9ucyIpLCBhbmQgc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlCithdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgQXBwbGUgbWF5LCBhdCBpdHMgc29sZQorZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBBcHBsZSBNb2RpZmljYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IKK21heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuICBBcHBsZWBzIGRldmVsb3BtZW50LCB1c2UsCityZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgQ292ZXJlZAorQ29kZSB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFRlcm1pbmF0aW9uLgorCisxMi4xIFRlcm1pbmF0aW9uLiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwKKyAgIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aAorYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggYnJlYWNoOyAoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mCit0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy41KGIpOyBvciAoYykgYXV0b21hdGljYWxseQord2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzCitMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBBcHBsZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uICBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8KK2ltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwKK3N1YmxpY2Vuc2luZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIHRvIGRlc3Ryb3kgYWxsCitjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KK0FsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUKK3Rlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkCit0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiAgTmVpdGhlciBwYXJ0eSB3aWxsIGJlCitsaWFibGUgdG8gdGhlIG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0Citzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMKK3Rlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8KK2FueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgZWl0aGVyIHBhcnR5LgorCisxMy4gIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMKK2RlZmluZWQgaW4gRkFSIDIuMTAxLiAgR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzCitpbiB0aGUgQ292ZXJlZCBDb2RlIGluY2x1ZGUgb25seSB0aG9zZSByaWdodHMgY3VzdG9tYXJpbHkgcHJvdmlkZWQgdG8KK3RoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwKK2xpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aAorRkFSIDEyLjIxMSAoVGVjaG5pY2FsIERhdGEpIGFuZCAxMi4yMTIgKENvbXB1dGVyIFNvZnR3YXJlKSBhbmQsIGZvcgorRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tCitDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIKK1NvZnR3YXJlIG9yIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24pLiAgQWNjb3JkaW5nbHksIGFsbCBVLlMuCitHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldAorZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiAgVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcworY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZgorbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlLCBhbmQgWW91IHdpbGwgbm90IHJlcHJlc2VudCB0bwordGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3IKK290aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyCitBcHBsZWBzIHJpZ2h0IHRvIGFjcXVpcmUsIGxpY2Vuc2UsIGRldmVsb3AsIGhhdmUgb3RoZXJzIGRldmVsb3AgZm9yCitpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZQorc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwKK01vZGlmaWNhdGlvbnMsIExhcmdlciBXb3JrcywgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IFlvdSBtYXkKK2RldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiAgRmFpbHVyZSBieSBBcHBsZSB0byBlbmZvcmNlIGFueSBwcm92aXNpb24KK29mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mCit0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uICBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMKK3RoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIKK3dpbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTMuNSBTZXZlcmFiaWxpdHkuICAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLAordG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0bwordGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMKK2FuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsCitjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuICAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsCitpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vcgorc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlCitlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsCitpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YKK3RoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyCitwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiAgQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uCitiZXR3ZWVuIFlvdSBhbmQgQXBwbGUgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlCitOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0bwordGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwKK2NvdXJ0cyB3aXRoaW4gdGhhdCBEaXN0cmljdCB3aXRoIHJlc3BlY3QgdG8gdGhpcyBMaWNlbnNlLiBUaGUKK2FwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlCitJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMy43IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuICBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiAgVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZQorVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YKK0NhbGlmb3JuaWEgbGF3IGNvbmNlcm5pbmcgY29uZmxpY3RzIG9mIGxhdy4KKworV2hlcmUgWW91IGFyZSBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZworY2xhdXNlIGFwcGxpZXM6IFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhleSBoYXZlIHJlcXVlc3RlZAordGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcworcGFydGllcyBvbnQgZXhpZ2UgcXVlIGxlIHByZXNlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMKK2Nvbm5leGVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OS0yMDAwIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgUmlnaHRzCitSZXNlcnZlZC4gIFRoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mCitPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYworU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLiAgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZQorZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZQorTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nCit0aGlzIGZpbGUuCisKK1RoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCitkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIKK0VYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKK0lOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi0gSU5GUklOR0VNRU5ULiAgUGxlYXNlIHNlZSB0aGUKK0xpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucwordW5kZXIgdGhlIExpY2Vuc2UuIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BUFNMLTEuMgpAQCAtMCwwICsxLDEwNSBAQAorCitBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgVmVyLiAxLjIKKworMS4gR2VuZXJhbDsgRGVmaW5pdGlvbnMuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG1ha2VzIHB1YmxpY2x5IGF2YWlsYWJsZSBhbmQgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvciB3b3JrIGFzICJPcmlnaW5hbCBDb2RlIiBhbmQgc3RhdGluZyB0aGF0IGl0IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4yIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZikgKCJMaWNlbnNlIikuIEFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlOgorCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMyAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjggIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIENvdmVyZWQgQ29kZSBieSBhbiBpbmRpdmlkdWFsIHNvbGVseSBmb3IgaGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBvciBhZ2VudCBvZiBhIGNvcnBvcmF0aW9uLCBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gKGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwpIGRvZXMgbm90IHF1YWxpZnkgYXMgUGVyc29uYWwgVXNlLgorCisxLjkgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS4xMCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLlN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgQXBwbGUgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgQXBwbGVgcyBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIGNvcHlyaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgYW5kL29yIFBlcnNvbmFsIFVzZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7IGFuZAorCisoYikgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisyLjIgWW91IG1heSB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IGFuZCBEZXBsb3kgQ292ZXJlZCBDb2RlLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCBzYXRpc2Z5IGFsbCB0aGUgY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGU7CisKKyhiKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7CisKKyhjKSBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyBhbmQKKworKGQpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLgorCisyLjMgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzIHRvIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcyBZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgQ29kZS4KKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZToKKworKGEpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBBcHBsZWBzIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQgMi4yOyBhbmQKKworKGIpIFlvdSBoZXJlYnkgZ3JhbnQgdG8gQXBwbGUgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQpIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5IG9yIGhhdmUgbW9kaWZpZWQgKGZvciBBcHBsZSBhbmQvb3IgaXRzIHN1YnNpZGlhcmllcyksIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgWW91ciBNb2RpZmljYXRpb25zLCBpbiBhbnkgZm9ybSwgdGhyb3VnaCBtdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gZWFjaCBzdWNoIGluc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLgorCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IEFwcGxlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gQXBwbGUgd2hpY2ggQXBwbGUgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhlIHNjb3BlIG9mIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZWluICgiQWRkaXRpb25hbCBUZXJtcyIpIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIGFuZCBub3Qgb24gYmVoYWxmIG9mIEFwcGxlIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQXBwbGUgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IEFwcGxlIG9yIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJBUFBMRSIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBBUFBMRSBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIENPVkVSRUQgQ09ERSwgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgQ09SUkVDVEVELiBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFLCBBTiBBUFBMRSBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIkFwcGxlIiwgIkFwcGxlIENvbXB1dGVyIiwgIk1hYyBPUyBYIiwgIk1hYyBPUyBYIFNlcnZlciIsICJRdWlja1RpbWUiLCAiUXVpY2tUaW1lIFN0cmVhbWluZyBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzIGJlbG9uZ2luZyB0byBBcHBsZSAoY29sbGVjdGl2ZWx5ICJBcHBsZSBNYXJrcyIpIG9yIHRvIGFueSB0cmFkZW1hcmsgb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBObyBBcHBsZSBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBBcHBsZSBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTIuIFRlcm1pbmF0aW9uLgorCisxMi4xIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IEFwcGxlLgorCisxMi4yIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlIHRvIGltbWVkaWF0ZWx5IHN0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGhhdmUgYmVlbiBwcm9wZXJseSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuIE5vIHBhcnR5IHdpbGwgYmUgbGlhYmxlIHRvIGFueSBvdGhlciBmb3IgY29tcGVuc2F0aW9uLCBpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcgdGhpcyBMaWNlbnNlIGluIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMsIGFuZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSB3aXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgb3IgcmVtZWR5IG9mIGFueSBwYXJ0eS4KKworMTMuIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcyBkZWZpbmVkIGluIEZBUiAyLjEwMS4gR292ZXJubWVudCBzb2Z0d2FyZSBhbmQgdGVjaG5pY2FsIGRhdGEgcmlnaHRzIGluIHRoZSBDb3ZlcmVkIENvZGUgaW5jbHVkZSBvbmx5IHRob3NlIHJpZ2h0cyBjdXN0b21hcmlseSBwcm92aWRlZCB0byB0aGUgcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UgaW4gdGVjaG5pY2FsIGRhdGEgYW5kIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTIuMjExIChUZWNobmljYWwgRGF0YSkgYW5kIDEyLjIxMiAoQ29tcHV0ZXIgU29mdHdhcmUpIGFuZCwgZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLSBDb21tZXJjaWFsIEl0ZW1zKSBhbmQgMjI3LjcyMDItMyAoUmlnaHRzIGluIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgb3IgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbikuIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuIFRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgY3JlYXRpbmcgYW4gYWdlbmN5LCBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nWW91LCBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgQXBwbGVgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisxMy40IFdhaXZlcjsgQ29uc3RydWN0aW9uLiBGYWlsdXJlIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBvciBwb3J0aW9uIHRoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoYXQgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbnNlIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LiAoYikgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIGlmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yIHNwZWNpZmljYWxseSBjb21wbHlpbmcgd2l0aCBTZWN0aW9ucyAyIGFuZC9vciAzIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBlaXRoZXIgb2YgdGhvc2UgU2VjdGlvbnMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgaXQgdGhhdCBhcmUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuCisKKzEzLjYgRGlzcHV0ZSBSZXNvbHV0aW9uLiBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2VwdCB0aGF0IGJvZHkgb2YgQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKK0VYSElCSVQgQS4KKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OS0yMDAxIEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4yICh0aGUgYExpY2Vuc2VgKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwcGxlLmNvbS9wdWJsaWNzb3VyY2UgYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQVBTTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEyZThiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FQU0wtMi4wCkBAIC0wLDAgKzEsMTAyIEBACisKK0FQUExFIFBVQkxJQyBTT1VSQ0UgTElDRU5TRQorVmVyc2lvbiAyLjAgLSAgQXVndXN0IDYsIDIwMDMKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4gIEJ5IGRvd25sb2FkaW5nIG9yIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBkbyBub3Qgb3IgY2Fubm90IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHBsZWFzZSBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBzb2Z0d2FyZS4KKworQXBwbGUgTm90ZTogIEluIEphbnVhcnkgMjAwNywgQXBwbGUgY2hhbmdlZCBpdHMgY29ycG9yYXRlIG5hbWUgZnJvbSAiQXBwbGUgQ29tcHV0ZXIsIEluYy4iIHRvICJBcHBsZSBJbmMuIiAgVGhpcyBjaGFuZ2UgaGFzIGJlZW4gcmVmbGVjdGVkIGJlbG93IGFuZCBjb3B5cmlnaHQgeWVhcnMgdXBkYXRlZCwgYnV0IG5vIG90aGVyIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIEFQU0wgMi4wLgorCisxLiBHZW5lcmFsOyBEZWZpbml0aW9ucy4gIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggQXBwbGUgSW5jLiAoIkFwcGxlIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgQXBwbGUgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsIENvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAyLjAgKCJMaWNlbnNlIikuICBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICAiQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIiBtZWFuOiAgKGEpIGluIHRoZSBjYXNlIHdoZXJlIEFwcGxlIGlzIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBidXQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byB1c2UsIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mIHJpZ2h0cywgKGkpIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIFlvdSBhbmQgKGlpKSB0aGF0IGNvdmVyIHN1YmplY3QgbWF0dGVyIGluIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMyAgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNCAiRXh0ZXJuYWxseSBEZXBsb3kiIG1lYW5zOiAoYSkgdG8gc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBhbnlvbmUgb3RoZXIgdGhhbiBZb3U7IGFuZC9vciAoYikgdG8gdXNlIENvdmVyZWQgQ29kZSwgYWxvbmUgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrLCBpbiBhbnkgd2F5IHRvIHByb3ZpZGUgYSBzZXJ2aWNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRlbGl2ZXJ5IG9mIGNvbnRlbnQsIHRocm91Z2ggZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9uIHdpdGggYSBjbGllbnQgb3RoZXIgdGhhbiBZb3UuCisKKzEuNSAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuICBXaGVuIGNvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAgKGEpIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBDb3ZlcmVkIENvZGU7IGFuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIENvdmVyZWQgQ29kZS4gCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayBhcyBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4gZXhwcmVzc2x5IGlkZW50aWZpZWQgYnkgQXBwbGUgYXMgc3VjaCBpbiB0aGUgaGVhZGVyIGZpbGUocykgb2Ygc3VjaCB3b3JrOyBhbmQgKGIpIHRoZSBvYmplY3QgY29kZSBjb21waWxlZCBmcm9tIHN1Y2ggU291cmNlIENvZGUgYW5kIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlCisKKzEuOCAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBodW1hbiByZWFkYWJsZSBmb3JtIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHRoYXQgaXMgc3VpdGFibGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSAob2JqZWN0IGNvZGUpLgorCisxLjkgIllvdSIgb3IgIllvdXIiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBvciAiWW91ciIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCwgWW91LCB3aGVyZSAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuICAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhpcyBMaWNlbnNlIGFuZCBkb3dubG9hZCB0aGUgT3JpZ2luYWwgQ29kZSwgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBBcHBsZWBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwgQ29kZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMi4xIFVubW9kaWZpZWQgQ29kZS4gIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGludGVybmFsbHkgZGlzdHJpYnV0ZSB3aXRoaW4gWW91ciBvcmdhbml6YXRpb24sIGFuZCBFeHRlcm5hbGx5IERlcGxveSB2ZXJiYXRpbSwgdW5tb2RpZmllZCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUsIGZvciBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgQXBwbGUgYXMgdGhleSBhcHBlYXIgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGFuZCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyBpbiB0aGUgT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kCisKKyhiKSAgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUgb3IgRXh0ZXJuYWxseSBEZXBsb3ksIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisyLjIgTW9kaWZpZWQgQ29kZS4gIFlvdSBtYXkgbW9kaWZ5IENvdmVyZWQgQ29kZSBhbmQgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGludGVybmFsbHkgZGlzdHJpYnV0ZSB3aXRoaW4gWW91ciBvcmdhbml6YXRpb24sIGFuZCBFeHRlcm5hbGx5IERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgYW5kIENvdmVyZWQgQ29kZSwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMsIHByb3ZpZGVkIHRoYXQgaW4gZWFjaCBpbnN0YW5jZSBZb3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOyAKKworKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyhjKSBJZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zLCBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlaXRoZXIgYXZhaWxhYmxlIHRvIHRob3NlIHRvIHdob20gWW91IGhhdmUgRXh0ZXJuYWxseSBEZXBsb3llZCBZb3VyIE1vZGlmaWNhdGlvbnMsIG9yIHB1YmxpY2x5IGF2YWlsYWJsZS4gIFNvdXJjZSBDb2RlIG9mIFlvdXIgRXh0ZXJuYWxseSBEZXBsb3llZCBNb2RpZmljYXRpb25zIG11c3QgYmUgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IEV4dGVybmFsbHkgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBFeHRlcm5hbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWxlY3Ryb25pY2FsbHkgKGUuZy4gZG93bmxvYWQgZnJvbSBhIHdlYiBzaXRlKS4KKworMi4zIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAgSW4gYWRkaXRpb24sIGlmIFlvdSBFeHRlcm5hbGx5IERlcGxveSBDb3ZlcmVkIENvZGUgKE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMpIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlLiAgCisKKzIuNCBUaGlyZCBQYXJ0eSBSaWdodHMuICBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGFsdGhvdWdoIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IEFwcGxlIG9yIGFueSBDb250cmlidXRvciB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltIGFueSBsaWFiaWxpdHkgdG8gWW91IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91IGhlcmVieSBhc3N1bWUgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IGhlcmVieSBncmFudCB0byBhbnkgcGVyc29uIG9yIGVudGl0eSByZWNlaXZpbmcgb3IgZGlzdHJpYnV0aW5nIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUgbGljZW5zZSwgdW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50KSBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBhbmQgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgQXBwbGVgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMiBhYm92ZS4gIAorCis0LiBMYXJnZXIgV29ya3MuICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiAgSW4gZWFjaCBzdWNoIGluc3RhbmNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiAKKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuICAgRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IEFwcGxlIGhlcmVpbi4gIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLiAgCisKKzYuIEFkZGl0aW9uYWwgVGVybXMuICBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBBcHBsZSBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLiAKKworNy4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuICBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBBcHBsZS4gIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIAorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiAgVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuICBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpcyBhdCBZb3VyIHNvbGUgYW5kIGVudGlyZSByaXNrLiAgVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBBUFBMRSBBTkQgQVBQTEVgUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJBUFBMRSIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiAgQVBQTEUgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUsIEFOIEFQUExFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiAgWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSBPUiBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBDT1ZFUkVEIENPREUsIE9SIEFOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1RTIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZWBzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbCBkYW1hZ2VzIChvdGhlciB0aGFuIGFzIG1heSBiZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdykgdW5kZXIgdGhpcyBMaWNlbnNlIGV4Y2VlZCB0aGUgYW1vdW50IG9mIGZpZnR5IGRvbGxhcnMgKCQ1MC4wMCkuCisKKzEwLiBUcmFkZW1hcmtzLiAgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWVzICAiQXBwbGUiLCAiTWFjIiwgIk1hYyBPUyIsICJRdWlja1RpbWUiLCAiUXVpY2tUaW1lIFN0cmVhbWluZyBTZXJ2ZXIiIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBsb2dvcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseSAiQXBwbGUgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiAgWW91IGFncmVlIG5vdCB0byB1c2UgYW55IEFwcGxlIE1hcmtzIGluIG9yIGFzIHBhcnQgb2YgdGhlIG5hbWUgb2YgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIgdGhhbiBhcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBBcHBsZWBzIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4gIAorCisxMS4gT3duZXJzaGlwLiBTdWJqZWN0IHRvIHRoZSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiAgQXBwbGUgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBBcHBsZSAoIkFwcGxlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggQXBwbGUgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgQXBwbGUgbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBjaG9vc2UgdG8gbGljZW5zZSBzdWNoIEFwcGxlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlIG9yIG1heSBjaG9vc2Ugbm90IHRvIGxpY2Vuc2UgdGhlbSBhdCBhbGwuICAKKworMTIuIFRlcm1pbmF0aW9uLiAgCisKKzEyLjEgVGVybWluYXRpb24uICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisoYikgaW1tZWRpYXRlbHkgaW4gdGhlIGV2ZW50IG9mIHRoZSBjaXJjdW1zdGFuY2VzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEzLjUoYik7IG9yCisoYykgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgQXBwbGU7IHByb3ZpZGVkIHRoYXQgQXBwbGUgZGlkIG5vdCBmaXJzdCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgYWdhaW5zdCBZb3UgaW4gdGhhdCBpbnN0YW5jZS4KKworMTIuMiBFZmZlY3Qgb2YgVGVybWluYXRpb24uICBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlLiAgQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb25zIDMsIDUsIDgsIDksIDEwLCAxMSwgMTIuMiBhbmQgMTMuICBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKzEzLiAgTWlzY2VsbGFuZW91cy4KKworMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSIgYXMgZGVmaW5lZCBpbiBGQVIgMi4xMDEuICBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gIEFjY29yZGluZ2x5LCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzEzLjIgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMuICBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyBZb3UsIEFwcGxlIG9yIGFueSBDb250cmlidXRvciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGFwcGVhcmFuY2Ugb3Igb3RoZXJ3aXNlLgorCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHdpbGwgaW1wYWlyIEFwcGxlYHMgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBhbmQvb3IgZGlzdHJpYnV0ZSB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUgd2l0aCwgTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTMuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gIEZhaWx1cmUgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGZ1dHVyZSBlbmZvcmNlbWVudCBvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uICBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAgKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uICBBbnkgbGl0aWdhdGlvbiBvciBvdGhlciBkaXNwdXRlIHJlc29sdXRpb24gYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCBhbmQgWW91IGFuZCBBcHBsZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKzEzLjcgRW50aXJlIEFncmVlbWVudDsgR292ZXJuaW5nIExhdy4gIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiAgVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuIAorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiAgVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiAgTGVzIHBhcnRpZXMgb250IGV4aWcmIzIzMzsgcXVlIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cyBjb25uZXhlcyBzb2llbnQgciYjMjMzO2RpZyYjMjMzO3MgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLiAKKworIlBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IEFwcGxlIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUgYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUgYExpY2Vuc2VgKS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5hcHBsZS5jb20vYXBzbC8gYW5kIHJlYWQgaXQgYmVmb3JlIHVzaW5nIHRoaXMgZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUgZGlzdHJpYnV0ZWQgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgUVVJRVQgRU5KT1lNRU5UIE9SIE5PTi1JTkZSSU5HRU1FTlQuICBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIiAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BZG9iZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDc3OWRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQWRvYmUKQEAgLTAsMCArMSwxNCBAQAorQ29weXJpZ2h0IDE5OTAtMTk5OCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCisgIAorUGF0ZW50cyBQZW5kaW5nCisKK05PVElDRTogQWxsIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaXMgdGhlIHByb3BlcnR5IG9mIEFkb2JlCitTeXN0ZW1zIEluY29ycG9yYXRlZC4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIGZvciByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUgcHJvdmlkZWQKK3RoaXMgY29weXJpZ2h0IG5vdGljZSBpcyBtYWludGFpbmVkIGludGFjdCBhbmQgdGhhdCB0aGUgY29udGVudHMKK29mIHRoaXMgZmlsZSBhcmUgbm90IGFsdGVyZWQgaW4gYW55IHdheSBmcm9tIGl0cyBvcmlnaW5hbCBmb3JtLgorCitQb3N0U2NyaXB0IGFuZCBEaXNwbGF5IFBvc3RTY3JpcHQgYXJlIHRyYWRlbWFya3Mgb2YgQWRvYmUgU3lzdGVtcworSW5jb3Jwb3JhdGVkIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGluIGNlcnRhaW4ganVyaXNkaWN0aW9ucy4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FwYWNoZS0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTkwODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4wCkBAIC0wLDAgKzEsNjEgQEAKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IFRoZSBBcGFjaGUgR3JvdXAuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZSBHcm91cAorICogICAgZm9yIHVzZSBpbiB0aGUgQXBhY2hlIEhUVFAgc2VydmVyIHByb2plY3QgKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSBTZXJ2ZXIiIGFuZCAiQXBhY2hlIEdyb3VwIiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIKKyAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwLgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEFwYWNoZSBHcm91cAorICogICAgZm9yIHVzZSBpbiB0aGUgQXBhY2hlIEhUVFAgc2VydmVyIHByb2plY3QgKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBUEFDSEUgR1JPVVAgYGBBUyBJU2BgIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgR1JPVVAgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQorICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgR3JvdXAgYW5kIHdhcyBvcmlnaW5hbGx5IGJhc2VkCisgKiBvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlIHdyaXR0ZW4gYXQgdGhlIE5hdGlvbmFsIENlbnRlciBmb3IKKyAqIFN1cGVyY29tcHV0aW5nIEFwcGxpY2F0aW9ucywgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcywgVXJiYW5hLUNoYW1wYWlnbi4KKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgR3JvdXAgYW5kIHRoZSBBcGFjaGUgSFRUUCBzZXJ2ZXIKKyAqIHByb2plY3QsIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqLworCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjVlYzAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTEuMQpAQCAtMCwwICsxLDYwIEBACisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICoKKyAqIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0CisgKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGJhc2VkIHVwb24gcHVibGljIGRvbWFpbiBzb2Z0d2FyZQorICogb3JpZ2luYWxseSB3cml0dGVuIGF0IHRoZSBOYXRpb25hbCBDZW50ZXIgZm9yIFN1cGVyY29tcHV0aW5nIEFwcGxpY2F0aW9ucywKKyAqIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMsIFVyYmFuYS1DaGFtcGFpZ24uCisgKi8KKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcGFjaGUtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzIwMWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXBhY2hlLTIuMApAQCAtMCwwICsxLDIwNCBAQAorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisKKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCisgICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uYHQgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCisgICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9BcnRpc3RpYy0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA3ZTRkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTEuMApAQCAtMCwwICsxLDUwIEBACisKK1RoZSBBcnRpc3RpYyBMaWNlbnNlCitQcmVhbWJsZQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSBQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlIHJlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworRGVmaW5pdGlvbnM6CisKKyJQYWNrYWdlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorIkNvcHlyaWdodCBIb2xkZXIiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvciBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS4KKyJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoaXMgUGFja2FnZS4KKyJSZWFzb25hYmxlIGNvcHlpbmcgZmVlIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlIGJhc2lzIG9mIG1lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlIGludm9sdmVkLCBhbmQgc28gb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwgYnV0IG9ubHkgdG8gdGhlIGNvbXB1dGluZyBjb21tdW5pdHkgYXQgbGFyZ2UgYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pCisiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0gaXRzZWxmLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGl0ZW0uIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIFBhY2thZ2UgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQgd2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBhcmNoaXZlIHNpdGUgc3VjaCBhcyBmdHAudXUubmV0LCBvciBieSBhbGxvd2luZyB0aGUgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS4KKworYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLgorCitjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2QpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCithKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCitiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZiB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy4KKworYykgYWNjb21wYW55IGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkgZG9jdW1lbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gSG93ZXZlciwgeW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KKworNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsIHVuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob21ldmVyIGdlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzIFBhY2thZ2UuCisKKzcuIEMgb3IgcGVybCBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZS4KKworOC4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworOS4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitUaGUgRW5kCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0FydGlzdGljLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGY4ZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQXJ0aXN0aWMtMi4wCkBAIC0wLDAgKzEsMjAzIEBACisKKyAgICAgICAgIFRoZSBBcnRpc3RpYyBMaWNlbnNlIDIuMAorCisgICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBUaGUgUGVybCBGb3VuZGF0aW9uLgorCisgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1ByZWFtYmxlCisKK1RoaXMgbGljZW5zZSBlc3RhYmxpc2hlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggYSBnaXZlbiBmcmVlIHNvZnR3YXJlCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIG1vZGlmaWVkLCBkaXN0cmlidXRlZCwgYW5kL29yIHJlZGlzdHJpYnV0ZWQuCitUaGUgaW50ZW50IGlzIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgYXJ0aXN0aWMKK2NvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhhdCBQYWNrYWdlIHdoaWxlIHN0aWxsIGtlZXBpbmcgdGhlCitQYWNrYWdlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZSBhbmQgZnJlZSBzb2Z0d2FyZS4KKworWW91IGFyZSBhbHdheXMgcGVybWl0dGVkIHRvIG1ha2UgYXJyYW5nZW1lbnRzIHdob2xseSBvdXRzaWRlIG9mIHRoaXMKK2xpY2Vuc2UgZGlyZWN0bHkgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlciBvZiBhIGdpdmVuIFBhY2thZ2UuICBJZiB0aGUKK3Rlcm1zIG9mIHRoaXMgbGljZW5zZSBkbyBub3QgcGVybWl0IHRoZSBmdWxsIHVzZSB0aGF0IHlvdSBwcm9wb3NlIHRvCittYWtlIG9mIHRoZSBQYWNrYWdlLCB5b3Ugc2hvdWxkIGNvbnRhY3QgdGhlIENvcHlyaWdodCBIb2xkZXIgYW5kIHNlZWsKK2EgZGlmZmVyZW50IGxpY2Vuc2luZyBhcnJhbmdlbWVudC4gCisKK0RlZmluaXRpb25zCisKKyAgICAiQ29weXJpZ2h0IEhvbGRlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3Igb3JnYW5pemF0aW9uKHMpCisgICAgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBlbnRpcmUgUGFja2FnZS4KKworICAgICJDb250cmlidXRvciIgbWVhbnMgYW55IHBhcnR5IHRoYXQgaGFzIGNvbnRyaWJ1dGVkIGNvZGUgb3Igb3RoZXIKKyAgICBtYXRlcmlhbCB0byB0aGUgUGFja2FnZSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyYHMKKyAgICBwcm9jZWR1cmVzLgorCisgICAgIllvdSIgYW5kICJ5b3VyIiBtZWFucyBhbnkgcGVyc29uIHdobyB3b3VsZCBsaWtlIHRvIGNvcHksCisgICAgZGlzdHJpYnV0ZSwgb3IgbW9kaWZ5IHRoZSBQYWNrYWdlLgorCisgICAgIlBhY2thZ2UiIG1lYW5zIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gYW5kL29yIG9mCisgICAgdGhvc2UgZmlsZXMuIEEgZ2l2ZW4gUGFja2FnZSBtYXkgY29uc2lzdCBvZiBlaXRoZXIgdGhlIFN0YW5kYXJkCisgICAgVmVyc2lvbiwgb3IgYSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIkRpc3RyaWJ1dGUiIG1lYW5zIHByb3ZpZGluZyBhIGNvcHkgb2YgdGhlIFBhY2thZ2Ugb3IgbWFraW5nIGl0CisgICAgYWNjZXNzaWJsZSB0byBhbnlvbmUgZWxzZSwgb3IgaW4gdGhlIGNhc2Ugb2YgYSBjb21wYW55IG9yCisgICAgb3JnYW5pemF0aW9uLCB0byBvdGhlcnMgb3V0c2lkZSBvZiB5b3VyIGNvbXBhbnkgb3Igb3JnYW5pemF0aW9uLgorCisgICAgIkRpc3RyaWJ1dG9yIEZlZSIgbWVhbnMgYW55IGZlZSB0aGF0IHlvdSBjaGFyZ2UgZm9yIERpc3RyaWJ1dGluZworICAgIHRoaXMgUGFja2FnZSBvciBwcm92aWRpbmcgc3VwcG9ydCBmb3IgdGhpcyBQYWNrYWdlIHRvIGFub3RoZXIKKyAgICBwYXJ0eS4gIEl0IGRvZXMgbm90IG1lYW4gbGljZW5zaW5nIGZlZXMuCisKKyAgICAiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbgorICAgIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBvbmx5IGluIHdheXMgZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICBieSB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworICAgICJNb2RpZmllZCBWZXJzaW9uIiBtZWFucyB0aGUgUGFja2FnZSwgaWYgaXQgaGFzIGJlZW4gY2hhbmdlZCwgYW5kCisgICAgc3VjaCBjaGFuZ2VzIHdlcmUgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ5IHRoZSBDb3B5cmlnaHQKKyAgICBIb2xkZXIuIAorCisgICAgIk9yaWdpbmFsIExpY2Vuc2UiIG1lYW5zIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSBhcyBEaXN0cmlidXRlZCB3aXRoCisgICAgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UsIGluIGl0cyBjdXJyZW50IHZlcnNpb24gb3IgYXMKKyAgICBpdCBtYXkgYmUgbW9kaWZpZWQgYnkgVGhlIFBlcmwgRm91bmRhdGlvbiBpbiB0aGUgZnV0dXJlLgorCisgICAgIlNvdXJjZSIgZm9ybSBtZWFucyB0aGUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQKKyAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgUGFja2FnZS4KKworICAgICJDb21waWxlZCIgZm9ybSBtZWFucyB0aGUgY29tcGlsZWQgYnl0ZWNvZGUsIG9iamVjdCBjb2RlLCBiaW5hcnksCisgICAgb3IgYW55IG90aGVyIGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvcgorICAgIHRyYW5zbGF0aW9uIG9mIHRoZSBTb3VyY2UgZm9ybS4KKworCitQZXJtaXNzaW9uIGZvciBVc2UgYW5kIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorCisoMSkgIFlvdSBhcmUgcGVybWl0dGVkIHRvIHVzZSB0aGUgU3RhbmRhcmQgVmVyc2lvbiBhbmQgY3JlYXRlIGFuZCB1c2UKK01vZGlmaWVkIFZlcnNpb25zIGZvciBhbnkgcHVycG9zZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0Cit5b3UgZG8gbm90IERpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKworUGVybWlzc2lvbnMgZm9yIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uCisKKygyKSAgWW91IG1heSBEaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgU291cmNlIGZvcm0gb2YgdGhlCitTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcmVzdHJpY3Rpb24sCitlaXRoZXIgZ3JhdGlzIG9yIGZvciBhIERpc3RyaWJ1dG9yIEZlZSwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlCithbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLiAgQXQKK3lvdXIgZGlzY3JldGlvbiwgc3VjaCB2ZXJiYXRpbSBjb3BpZXMgbWF5IG9yIG1heSBub3QgaW5jbHVkZSBhCitDb21waWxlZCBmb3JtIG9mIHRoZSBQYWNrYWdlLgorCisoMykgIFlvdSBtYXkgYXBwbHkgYW55IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgY2hhbmdlcywgYW5kIG90aGVyCittb2RpZmljYXRpb25zIG1hZGUgYXZhaWxhYmxlIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuICBUaGUgcmVzdWx0aW5nCitQYWNrYWdlIHdpbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgYW5kIGFzIHN1Y2gKK3dpbGwgYmUgc3ViamVjdCB0byB0aGUgT3JpZ2luYWwgTGljZW5zZS4KKworCitEaXN0cmlidXRpb24gb2YgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIFBhY2thZ2UgYXMgU291cmNlIAorCisoNCkgIFlvdSBtYXkgRGlzdHJpYnV0ZSB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYXMgU291cmNlIChlaXRoZXIgZ3JhdGlzCitvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIGFuZCB3aXRoIG9yIHdpdGhvdXQgYSBDb21waWxlZCBmb3JtIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbikgcHJvdmlkZWQgdGhhdCB5b3UgY2xlYXJseSBkb2N1bWVudCBob3cgaXQgZGlmZmVycworZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGRvY3VtZW50aW5nCithbnkgbm9uLXN0YW5kYXJkIGZlYXR1cmVzLCBleGVjdXRhYmxlcywgb3IgbW9kdWxlcywgYW5kIHByb3ZpZGVkIHRoYXQKK3lvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIChhKSAgbWFrZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhdmFpbGFibGUgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIKKyAgICBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgdW5kZXIgdGhlIE9yaWdpbmFsIExpY2Vuc2UsIHNvIHRoYXQgdGhlCisgICAgQ29weXJpZ2h0IEhvbGRlciBtYXkgaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkCisgICAgVmVyc2lvbi4KKworICAgIChiKSAgZW5zdXJlIHRoYXQgaW5zdGFsbGF0aW9uIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBkb2VzIG5vdAorICAgIHByZXZlbnQgdGhlIHVzZXIgaW5zdGFsbGluZyBvciBydW5uaW5nIHRoZSBTdGFuZGFyZCBWZXJzaW9uLiBJbgorICAgIGFkZGl0aW9uLCB0aGUgTW9kaWZpZWQgVmVyc2lvbiBtdXN0IGJlYXIgYSBuYW1lIHRoYXQgaXMgZGlmZmVyZW50CisgICAgZnJvbSB0aGUgbmFtZSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIChjKSAgYWxsb3cgYW55b25lIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8KKyAgICBtYWtlIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhdmFpbGFibGUgdG8gb3RoZXJzCisgICAgdW5kZXIKKyAgCisgKGkpICB0aGUgT3JpZ2luYWwgTGljZW5zZSBvcgorCisgKGlpKSAgYSBsaWNlbnNlIHRoYXQgcGVybWl0cyB0aGUgbGljZW5zZWUgdG8gZnJlZWx5IGNvcHksCisgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24gdXNpbmcgdGhlIHNhbWUKKyBsaWNlbnNpbmcgdGVybXMgdGhhdCBhcHBseSB0byB0aGUgY29weSB0aGF0IHRoZSBsaWNlbnNlZQorIHJlY2VpdmVkLCBhbmQgcmVxdWlyZXMgdGhhdCB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkCisgVmVyc2lvbiwgYW5kIG9mIGFueSB3b3JrcyBkZXJpdmVkIGZyb20gaXQsIGJlIG1hZGUgZnJlZWx5CisgYXZhaWxhYmxlIGluIHRoYXQgbGljZW5zZSBmZWVzIGFyZSBwcm9oaWJpdGVkIGJ1dCBEaXN0cmlidXRvcgorIEZlZXMgYXJlIGFsbG93ZWQuCisKKworRGlzdHJpYnV0aW9uIG9mIENvbXBpbGVkIEZvcm1zIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIAorb3IgTW9kaWZpZWQgVmVyc2lvbnMgd2l0aG91dCB0aGUgU291cmNlCisKKyg1KSAgWW91IG1heSBEaXN0cmlidXRlIENvbXBpbGVkIGZvcm1zIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIHdpdGhvdXQKK3RoZSBTb3VyY2UsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgY29tcGxldGUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworZ2V0IHRoZSBTb3VyY2Ugb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24uICBTdWNoIGluc3RydWN0aW9ucyBtdXN0IGJlCit2YWxpZCBhdCB0aGUgdGltZSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4gIElmIHRoZXNlIGluc3RydWN0aW9ucywgYXQgYW55Cit0aW1lIHdoaWxlIHlvdSBhcmUgY2Fycnlpbmcgb3V0IHN1Y2ggZGlzdHJpYnV0aW9uLCBiZWNvbWUgaW52YWxpZCwgeW91CittdXN0IHByb3ZpZGUgbmV3IGluc3RydWN0aW9ucyBvbiBkZW1hbmQgb3IgY2Vhc2UgZnVydGhlciBkaXN0cmlidXRpb24uCitJZiB5b3UgcHJvdmlkZSB2YWxpZCBpbnN0cnVjdGlvbnMgb3IgY2Vhc2UgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGlydHkKK2RheXMgYWZ0ZXIgeW91IGJlY29tZSBhd2FyZSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGludmFsaWQsIHRoZW4KK3lvdSBkbyBub3QgZm9yZmVpdCBhbnkgb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCisoNikgIFlvdSBtYXkgRGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gaW4gQ29tcGlsZWQgZm9ybSB3aXRob3V0Cit0aGUgU291cmNlLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCBTZWN0aW9uIDQgd2l0aCByZXNwZWN0IHRvCit0aGUgU291cmNlIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisKK0FnZ3JlZ2F0aW5nIG9yIExpbmtpbmcgdGhlIFBhY2thZ2UgCisKKyg3KSAgWW91IG1heSBhZ2dyZWdhdGUgdGhlIFBhY2thZ2UgKGVpdGhlciB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvcgorTW9kaWZpZWQgVmVyc2lvbikgd2l0aCBvdGhlciBwYWNrYWdlcyBhbmQgRGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nCithZ2dyZWdhdGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgY2hhcmdlIGEgbGljZW5zaW5nIGZlZSBmb3IgdGhlCitQYWNrYWdlLiAgRGlzdHJpYnV0b3IgRmVlcyBhcmUgcGVybWl0dGVkLCBhbmQgbGljZW5zaW5nIGZlZXMgZm9yIG90aGVyCitjb21wb25lbnRzIGluIHRoZSBhZ2dyZWdhdGlvbiBhcmUgcGVybWl0dGVkLiBUaGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlCithcHBseSB0byB0aGUgdXNlIGFuZCBEaXN0cmlidXRpb24gb2YgdGhlIFN0YW5kYXJkIG9yIE1vZGlmaWVkIFZlcnNpb25zCithcyBpbmNsdWRlZCBpbiB0aGUgYWdncmVnYXRpb24uCisKKyg4KSBZb3UgYXJlIHBlcm1pdHRlZCB0byBsaW5rIE1vZGlmaWVkIGFuZCBTdGFuZGFyZCBWZXJzaW9ucyB3aXRoCitvdGhlciB3b3JrcywgdG8gZW1iZWQgdGhlIFBhY2thZ2UgaW4gYSBsYXJnZXIgd29yayBvZiB5b3VyIG93biwgb3IgdG8KK2J1aWxkIHN0YW5kLWFsb25lIGJpbmFyeSBvciBieXRlY29kZSB2ZXJzaW9ucyBvZiBhcHBsaWNhdGlvbnMgdGhhdAoraW5jbHVkZSB0aGUgUGFja2FnZSwgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdCB3aXRob3V0IHJlc3RyaWN0aW9uLAorcHJvdmlkZWQgdGhlIHJlc3VsdCBkb2VzIG5vdCBleHBvc2UgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHRoZSBQYWNrYWdlLgorCisKK0l0ZW1zIFRoYXQgYXJlIE5vdCBDb25zaWRlcmVkIFBhcnQgb2YgYSBNb2RpZmllZCBWZXJzaW9uIAorCisoOSkgV29ya3MgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBtb2R1bGVzIGFuZCBzY3JpcHRzKSB0aGF0CittZXJlbHkgZXh0ZW5kIG9yIG1ha2UgdXNlIG9mIHRoZSBQYWNrYWdlLCBkbyBub3QsIGJ5IHRoZW1zZWx2ZXMsIGNhdXNlCit0aGUgUGFja2FnZSB0byBiZSBhIE1vZGlmaWVkIFZlcnNpb24uICBJbiBhZGRpdGlvbiwgc3VjaCB3b3JrcyBhcmUgbm90Citjb25zaWRlcmVkIHBhcnRzIG9mIHRoZSBQYWNrYWdlIGl0c2VsZiwgYW5kIGFyZSBub3Qgc3ViamVjdCB0byB0aGUKK3Rlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworCitHZW5lcmFsIFByb3Zpc2lvbnMKKworKDEwKSAgQW55IHVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBvcgorTW9kaWZpZWQgVmVyc2lvbnMgaXMgZ292ZXJuZWQgYnkgdGhpcyBBcnRpc3RpYyBMaWNlbnNlLiBCeSB1c2luZywKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFBhY2thZ2UsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBEbyBub3QKK3VzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBQYWNrYWdlLCBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzCitsaWNlbnNlLgorCisoMTEpICBJZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gaGFzIGJlZW4gZGVyaXZlZCBmcm9tIGEgTW9kaWZpZWQKK1ZlcnNpb24gbWFkZSBieSBzb21lb25lIG90aGVyIHRoYW4geW91LCB5b3UgYXJlIG5ldmVydGhlbGVzcyByZXF1aXJlZAordG8gZW5zdXJlIHRoYXQgeW91ciBNb2RpZmllZCBWZXJzaW9uIGNvbXBsaWVzIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBsaWNlbnNlLgorCisoMTIpICBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHRoZSByaWdodCB0byB1c2UgYW55IHRyYWRlbWFyaywKK3NlcnZpY2UgbWFyaywgdHJhZGVuYW1lLCBvciBsb2dvIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisoMTMpICBUaGlzIGxpY2Vuc2UgaW5jbHVkZXMgdGhlIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwKK2ZyZWUtb2YtY2hhcmdlIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLAorc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFBhY2thZ2Ugd2l0aCByZXNwZWN0IHRvIGFueQorcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CitpbmZyaW5nZWQgYnkgdGhlIFBhY2thZ2UuIElmIHlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgYW55IHBhcnR5IGFsbGVnaW5nCit0aGF0IHRoZSBQYWNrYWdlIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50CitpbmZyaW5nZW1lbnQsIHRoZW4gdGhpcyBBcnRpc3RpYyBMaWNlbnNlIHRvIHlvdSBzaGFsbCB0ZXJtaW5hdGUgb24gdGhlCitkYXRlIHRoYXQgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisoMTQpICBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5OgorVEhFIFBBQ0tBR0UgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgQU5EIENPTlRSSUJVVE9SUyAiQVMKK0lTYCBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMuIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVEIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIFlPVVIgTE9DQUwKK0xBVy4gVU5MRVNTIFJFUVVJUkVEIEJZIExBVywgTk8gQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUiBXSUxMCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUEFDS0FHRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2EwYWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNECkBAIC0wLDAgKzEsMjYgQEAKK0NvcHlyaWdodCAoYykgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMC1DbGF1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI4YmRkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0wLUNsYXVzZQpAQCAtMCwwICsxLDEyIEBACitDb3B5cmlnaHQgKEMpIDxZRUFSPiBieSA8T1dORVI+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTItQ2xhdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTBmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0QtMi1DbGF1c2UKQEAgLTAsMCArMSwxMyBAQAorCitUaGUgRnJlZUJTRCBDb3B5cmlnaHQKKworQ29weXJpZ2h0IDE5OTItMjAxMCBUaGUgRnJlZUJTRCBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEZSRUVCU0QgUFJPSkVDVCBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZSRUVCU0QgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIHRoZSBGcmVlQlNEIFByb2plY3QuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC0zLUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM4NjVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTMtQ2xhdXNlCkBAIC0wLDAgKzEsMTEgQEAKKworQ29weXJpZ2h0IChjKSA8WUVBUj4sIDxPV05FUj4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgPE9SR0FOSVpBVElPTj4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTRC00LUNsYXVzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE2MmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQlNELTQtQ2xhdXNlCkBAIC0wLDAgKzEsMjkgQEAKKworQ29weXJpZ2h0IChjKSA8eWVhcj4sIDxjb3B5cmlnaHQgaG9sZGVyPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgPG9yZ2FuaXphdGlvbj4uCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSA8b3JnYW5pemF0aW9uPiBub3IgdGhlCisgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgPENPUFlSSUdIVCBIT0xERVI+IGBgQVMgSVNgYCBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JTTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYThlYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CU0wtMS4wCkBAIC0wLDAgKzEsMjUgQEAKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0JpdHN0cmVhbVZlcmEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjAzYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9CaXRzdHJlYW1WZXJhCkBAIC0wLDAgKzEsMTYwIEBACitCaXRzdHJlYW0gVmVyYSBGb250cyBDb3B5cmlnaHQKKworVGhlIGZvbnRzIGhhdmUgYSBnZW5lcm91cyBjb3B5cmlnaHQsIGFsbG93aW5nIGRlcml2YXRpdmUgd29ya3MgKGFzCitsb25nIGFzICJCaXRzdHJlYW0iIG9yICJWZXJhIiBhcmUgbm90IGluIHRoZSBuYW1lcyksIGFuZCBmdWxsCityZWRpc3RyaWJ1dGlvbiAoc28gbG9uZyBhcyB0aGV5IGFyZSBub3QgKnNvbGQqIGJ5IHRoZW1zZWx2ZXMpLiBUaGV5CitjYW4gYmUgYmUgYnVuZGxlZCwgcmVkaXN0cmlidXRlZCBhbmQgc29sZCB3aXRoIGFueSBzb2Z0d2FyZS4KKworVGhlIGZvbnRzIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvcHlyaWdodDoKKworQ29weXJpZ2h0Cis9PT09PT09PT0KKworQ29weXJpZ2h0IChjKSAyMDAzIGJ5IEJpdHN0cmVhbSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBCaXRzdHJlYW0KK1ZlcmEgaXMgYSB0cmFkZW1hcmsgb2YgQml0c3RyZWFtLCBJbmMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoZSBmb250cyBhY2NvbXBhbnlpbmcgdGhpcyBsaWNlbnNlICgiRm9udHMiKSBhbmQgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJGb250IFNvZnR3YXJlIiksIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZQordGhlIEZvbnQgU29mdHdhcmUsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBGb250CitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIEZvbnQgU29mdHdhcmUgaXMgZnVybmlzaGVkCit0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgYW5kIHRyYWRlbWFyayBub3RpY2VzIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCitzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIG9uZSBvciBtb3JlIG9mIHRoZSBGb250IFNvZnR3YXJlCit0eXBlZmFjZXMuCisKK1RoZSBGb250IFNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCwgYWx0ZXJlZCwgb3IgYWRkZWQgdG8sIGFuZCBpbgorcGFydGljdWxhciB0aGUgZGVzaWducyBvZiBnbHlwaHMgb3IgY2hhcmFjdGVycyBpbiB0aGUgRm9udHMgbWF5IGJlCittb2RpZmllZCBhbmQgYWRkaXRpb25hbCBnbHlwaHMgb3IgY2hhcmFjdGVycyBtYXkgYmUgYWRkZWQgdG8gdGhlCitGb250cywgb25seSBpZiB0aGUgZm9udHMgYXJlIHJlbmFtZWQgdG8gbmFtZXMgbm90IGNvbnRhaW5pbmcgZWl0aGVyCit0aGUgd29yZHMgIkJpdHN0cmVhbSIgb3IgdGhlIHdvcmQgIlZlcmEiLgorCitUaGlzIExpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSB0byBGb250cworb3IgRm9udCBTb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUKKyJCaXRzdHJlYW0gVmVyYSIgbmFtZXMuCisKK1RoZSBGb250IFNvZnR3YXJlIG1heSBiZSBzb2xkIGFzIHBhcnQgb2YgYSBsYXJnZXIgc29mdHdhcmUgcGFja2FnZSBidXQKK25vIGNvcHkgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEZvbnQgU29mdHdhcmUgdHlwZWZhY2VzIG1heSBiZSBzb2xkIGJ5CitpdHNlbGYuCisKK1RIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAorT0YgQ09QWVJJR0hULCBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFQuIElOIE5PIEVWRU5UIFNIQUxMCitCSVRTVFJFQU0gT1IgVEhFIEdOT01FIEZPVU5EQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKK09USEVSIExJQUJJTElUWSwgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKK09USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UCitTT0ZUV0FSRSBPUiBGUk9NIE9USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgR25vbWUsIHRoZSBHbm9tZQorRm91bmRhdGlvbiwgYW5kIEJpdHN0cmVhbSBJbmMuLCBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIEZvbnQKK1NvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIEdub21lIEZvdW5kYXRpb24KK29yIEJpdHN0cmVhbSBJbmMuLCByZXNwZWN0aXZlbHkuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBjb250YWN0OgorZm9udHMgYXQgZ25vbWUgZG90IG9yZy4KKworQ29weXJpZ2h0IEZBUQorPT09PT09PT09PT09PQorCisxLiBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIHJlc2FsZSByZXN0cmljdGlvbi4uLiBXaGF0IGdpdmVzPworCitCaXRzdHJlYW0gaXMgZ2l2aW5nIGF3YXkgdGhlc2UgZm9udHMsIGJ1dCB3aXNoZXMgdG8gZW5zdXJlIGl0cworY29tcGV0aXRvcnMgY2FuJ3QganVzdCBkcm9wIHRoZSBmb250cyBhcyBpcyBpbnRvIGEgZm9udCBzYWxlIHN5c3RlbQorYW5kIHNlbGwgdGhlbSBhcyBpcy4gSXQgc2VlbXMgZmFpciB0aGF0IGlmIEJpdHN0cmVhbSBjYW4ndCBtYWtlIG1vbmV5Citmcm9tIHRoZSBCaXRzdHJlYW0gVmVyYSBmb250cywgdGhlaXIgY29tcGV0aXRvcnMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvCitkbyBzbyBlaXRoZXIuIFlvdSBjYW4gc2VsbCB0aGUgZm9udHMgYXMgcGFydCBvZiBhbnkgc29mdHdhcmUgcGFja2FnZSwKK2hvd2V2ZXIuCisKKzIuIEkgd2FudCB0byBwYWNrYWdlIHRoZXNlIGZvbnRzIHNlcGFyYXRlbHkgZm9yIGRpc3RyaWJ1dGlvbiBhbmQKK3NhbGUgYXMgcGFydCBvZiBhIGxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIG9yIHN5c3RlbS4gQ2FuIEkgZG8gc28/CisKK1llcy4gQSBSUE0gb3IgRGViaWFuIHBhY2thZ2UgaXMgYSAibGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2UiIHRvIGJlZ2luCit3aXRoLCBhbmQgeW91IGFyZW4ndCBzZWxsaW5nIHRoZW0gaW5kZXBlbmRlbnRseSBieSB0aGVtc2VsdmVzLgorU2VlIDEuIGFib3ZlLgorCiszLiBBcmUgZGVyaXZhdGl2ZSB3b3JrcyBhbGxvd2VkPworWWVzIQorCis0LiBDYW4gSSBjaGFuZ2Ugb3IgYWRkIHRvIHRoZSBmb250KHMpPworWWVzLCBidXQgeW91IG11c3QgY2hhbmdlIHRoZSBuYW1lKHMpIG9mIHRoZSBmb250KHMpLgorCis1LiBVbmRlciB3aGF0IHRlcm1zIGFyZSBkZXJpdmF0aXZlIHdvcmtzIGFsbG93ZWQ/CisKK1lvdSBtdXN0IGNoYW5nZSB0aGUgbmFtZShzKSBvZiB0aGUgZm9udHMuIFRoaXMgaXMgdG8gZW5zdXJlIHRoZQorcXVhbGl0eSBvZiB0aGUgZm9udHMsIGJvdGggdG8gcHJvdGVjdCBCaXRzdHJlYW0gYW5kIEdub21lLiBXZSB3YW50IHRvCitlbnN1cmUgdGhhdCBpZiBhbiBhcHBsaWNhdGlvbiBoYXMgb3BlbmVkIGEgZm9udCBzcGVjaWZpY2FsbHkgb2YgdGhlc2UKK25hbWVzLCBpdCBnZXRzIHdoYXQgaXQgZXhwZWN0cyAodGhvdWdoIG9mIGNvdXJzZSwgdXNpbmcgZm9udGNvbmZpZywKK3N1YnN0aXR1dGlvbnMgY291bGQgc3RpbGwgY291bGQgaGF2ZSBvY2N1cnJlZCBkdXJpbmcgZm9udAorb3BlbmluZykuIFlvdSBtdXN0IGluY2x1ZGUgdGhlIEJpdHN0cmVhbSBjb3B5cmlnaHQuIEFkZGl0aW9uYWwKK2NvcHlyaWdodHMgY2FuIGJlIGFkZGVkLCBhcyBwZXIgY29weXJpZ2h0IGxhdy4gSGFwcHkgRm9udCBIYWNraW5nIQorCis2LiBJZiBJIGhhdmUgaW1wcm92ZW1lbnRzIGZvciBCaXRzdHJlYW0gVmVyYSwgaXMgaXQgcG9zc2libGUgdGhleSBtaWdodCBnZXQKK2Fkb3B0ZWQgaW4gZnV0dXJlIHZlcnNpb25zPworCitZZXMuIFRoZSBjb250cmFjdCBiZXR3ZWVuIHRoZSBHbm9tZSBGb3VuZGF0aW9uIGFuZCBCaXRzdHJlYW0gaGFzCitwcm92aXNpb25zIGZvciB3b3JraW5nIHdpdGggQml0c3RyZWFtIHRvIGVuc3VyZSBxdWFsaXR5IGFkZGl0aW9ucyB0bwordGhlIEJpdHN0cmVhbSBWZXJhIGZvbnQgZmFtaWx5LiBQbGVhc2UgY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBzdWNoCithZGRpdGlvbnMuIE5vdGUsIHRoYXQgaW4gZ2VuZXJhbCwgd2Ugd2lsbCB3YW50IHN1Y2ggYWRkaXRpb25zIGZvciB0aGUKK2VudGlyZSBmYW1pbHksIG5vdCBqdXN0IGEgc2luZ2xlIGZvbnQsIGFuZCB0aGF0IHlvdSdsbCBoYXZlIHRvIGtlZXAKK2JvdGggR25vbWUgYW5kIEppbSBMeWxlcywgVmVyYSdzIGRlc2lnbmVyLCBoYXBweSEgVG8gbWFrZSBzZW5zZSB0byBhZGQKK2dseXBocyB0byB0aGUgZm9udCwgdGhleSBtdXN0IGJlIHN0eWxpc3RpY2FsbHkgaW4ga2VlcGluZyB3aXRoIFZlcmEncworZGVzaWduLiBWZXJhIGNhbm5vdCBiZWNvbWUgYSAicmFuc29tIG5vdGUiIGZvbnQuIEppbSBMeWxlcyB3aWxsIGJlCitwcm92aWRpbmcgYSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSBkZXNpZ24gZWxlbWVudHMgdXNlZCBpbiBWZXJhLCBhcyBhCitndWlkZSBhbmQgYWlkIGZvciBwZW9wbGUgaW50ZXJlc3RlZCBpbiBjb250cmlidXRpbmcgdG8gVmVyYS4KKworNy4gSSB3YW50IHRvIHNlbGwgYSBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgdXNlcyB0aGVzZSBmb250czogQ2FuIEkgZG8gc28/CisKK1N1cmUuIEJ1bmRsZSB0aGUgZm9udHMgd2l0aCB5b3VyIHNvZnR3YXJlIGFuZCBzZWxsIHlvdXIgc29mdHdhcmUKK3dpdGggdGhlIGZvbnRzLiBUaGF0IGlzIHRoZSBpbnRlbnQgb2YgdGhlIGNvcHlyaWdodC4KKworOC4gSWYgYXBwbGljYXRpb25zIGhhdmUgYnVpbHQgdGhlIG5hbWVzICJCaXRzdHJlYW0gVmVyYSIgaW50byB0aGVtLAorY2FuIEkgb3ZlcnJpZGUgdGhpcyBzb21laG93IHRvIHVzZSBmb250cyBvZiBteSBjaG9vc2luZz8KKworVGhpcyBkZXBlbmRzIG9uIGV4YWN0IGRldGFpbHMgb2YgdGhlIHNvZnR3YXJlLiBNb3N0IG9wZW4gc291cmNlCitzeXN0ZW1zIGFuZCBzb2Z0d2FyZSAoZS5nLiwgR25vbWUsIEtERSwgZXRjLikgYXJlIG5vdyBjb252ZXJ0aW5nIHRvCit1c2UgZm9udGNvbmZpZyAoc2VlIHd3dy5mb250Y29uZmlnLm9yZykgdG8gaGFuZGxlIGZvbnQgY29uZmlndXJhdGlvbiwKK3NlbGVjdGlvbiBhbmQgc3Vic3RpdHV0aW9uOyBpdCBoYXMgcHJvdmlzaW9ucyBmb3Igb3ZlcnJpZGluZyBmb250CituYW1lcyBhbmQgc3Vic2l0dXRpbmcgYWx0ZXJuYXRpdmVzLiBBbiBleGFtcGxlIGlzIHByb3ZpZGVkIGJ5IHRoZQorc3VwcGxpZWQgbG9jYWwuY29uZiBmaWxlLCB3aGljaCBjaG9vc2VzIHRoZSBmYW1pbHkgQml0c3RyZWFtIFZlcmEgZm9yCisic2FucyIsICJzZXJpZiIgYW5kICJtb25vc3BhY2UiLiBPdGhlciBzb2Z0d2FyZSAoZS5nLiwgdGhlIFhGcmVlODYKK2NvcmUgc2VydmVyKSBoYXMgb3RoZXIgbWVjaGFuaXNtcyBmb3IgZm9udCBzdWJzdGl0dXRpb24uCisKK1Nob3cgZGV0YWlscyBIaWRlIGRldGFpbHMKKworQ2hhbmdlIGxvZworcjIwMTEgYnkgbWFyay5uaWNrZWwgb24gTWFyIDMsIDIwMTEgICBEaWZmCisKK01ham9yaXR5IG9mIE11bHRpLUxpbmUgdGV4dCBlZGl0aW5nIGlzIGluCit0aGUgY29tbWl0LiAgQWxzbyBhZGRlZCBzb21lIHNwZWNpZmljIGZyZWUKK2ZvbnRzIHRvIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHNldCBhcyB3ZQorbmVlZCBzb21lIGFkZGl0aW9uYWwgZm9udCBtZXRyaWNzIHRoYXQgd2UKK3VzZSBpbiB0aGUgVGV4dCBFZGl0aW5nIHJlbmRlcmluZworcGlwZWxpbmUuCisKK1lvdSBjYW4gc2VlIHRoZSBmb250IGxpY2Vuc2VzIGluIHRoZQorZWRpdG9yL2ZvbnRzIGZvbGRlciB1bmRlciBlYWNoIGZvbnQuCisKK1N0aWxsIGhhdmUgc29tZSBjbGVhbnVwIHRvIGRvIHRvIGFkZCB0aGUKK3RleHQgZm9ybWF0dGluZyAobGVmdCxyaWdodCxjZW50ZXIpIGFzCisuLi4KKworR28gdG86IAkKK0hpZGUgY29tbWVudHMKK1Nob3cgY29tbWVudHMKKworT2xkZXIgcmV2aXNpb25zCitBbGwgcmV2aXNpb25zIG9mIHRoaXMgZmlsZQorCitGaWxlIGluZm8KK1NpemU6IDU5NTMgYnl0ZXMsIDEyMyBsaW5lcworVmlldyByYXcgZmlsZQorCitGaWxlIHByb3BlcnRpZXMKKworc3ZuOmV4ZWN1dGFibGUKKyAgICAqCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0FUT1NMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNlOGE1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NBVE9TTC0xLjEKQEAgLTAsMCArMSwxMTYgQEAKKworQ29tcHV0ZXIgQXNzb2NpYXRlcyBUcnVzdGVkIE9wZW4gU291cmNlIExpY2Vuc2UKK1ZlcnNpb24gMS4xCisKKworKHRleHQpCisKK1BMRUFTRSBSRUFEIFRISVMgRE9DVU1FTlQgQ0FSRUZVTExZIEFORCBJTiBJVFMgRU5USVJFVFkuIFRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT01QVVRFUiBBU1NPQ0lBVEVTIFRSVVNURUQgT1BFTiBTT1VSQ0UgTElDRU5TRSAoIkxJQ0VOU0UiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFRIRSBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgTElDRU5TRS4KKworTGljZW5zZSBCYWNrZ3JvdW5kCitDb21wdXRlciBBc3NvY2lhdGVzIEludGVybmF0aW9uYWwsIEluYy4gKENBKSBiZWxpZXZlcyBpbiBvcGVuIHNvdXJjZS4gV2UgYmVsaWV2ZSB0aGF0IHRoZSBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBhcHByb2FjaCBjYW4gdGFrZSBhcHByb3ByaWF0ZSBzb2Z0d2FyZSBwcm9ncmFtcyB0byB1bnByZWNlZGVudGVkIGxldmVscyBvZiBxdWFsaXR5LCBncm93dGgsIGFuZCBpbm5vdmF0aW9uLiBUbyBkZW1vbnN0cmF0ZSBvdXIgY29udGludWluZyBjb21taXRtZW50IHRvIG9wZW4gc291cmNlLCB3ZSBhcmUgcmVsZWFzaW5nIHRoZSBQcm9ncmFtIChhcyBkZWZpbmVkIGJlbG93KSB1bmRlciB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBwZXJtaXQgY29udHJpYnV0b3JzIGFuZCByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIHRvIHVzZSB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nIGl0cyBzb3VyY2UgY29kZSwgZnJlZWx5IGFuZCB3aXRob3V0IG1hbnkgb2YgdGhlIGNvbmNlcm5zIG9mIHNvbWUgb3RoZXIgb3BlbiBzb3VyY2UgbGljZW5zZXMuIEFsdGhvdWdoIHdlIGV4cGVjdCB0aGUgdW5kZXJseWluZyBQcm9ncmFtLCBhbmQgQ29udHJpYnV0aW9ucyAoYXMgZGVmaW5lZCBiZWxvdykgbWFkZSB0byBzdWNoIFByb2dyYW0sIHRvIHJlbWFpbiBvcGVuLCB0aGlzIExpY2Vuc2UgaXMgZGVzaWduZWQgdG8gcGVybWl0IHlvdSB0byBtYWludGFpbiB5b3VyIG93biBzb2Z0d2FyZSBwcm9ncmFtcyBmcmVlIG9mIHRoaXMgTGljZW5zZSB1bmxlc3MgeW91IGNob29zZSB0byBkbyBzby4gVGh1cywgb25seSB5b3VyIENvbnRyaWJ1dGlvbnMgdG8gdGhlIFByb2dyYW0gbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCitUaGUgcHJvdmlzaW9ucyB0aGF0IGZvbGxvdyBzZXQgZm9ydGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHlvdSBtYXkgdXNlIHRoZSBQcm9ncmFtLgorCisxLiBERUZJTklUSU9OUworCisxLjEgQ29udHJpYnV0aW9uIG1lYW5zIChhKSBpbiB0aGUgY2FzZSBvZiBDQSwgdGhlIE9yaWdpbmFsIFByb2dyYW07IGFuZCAoYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciAoaW5jbHVkaW5nIENBKSwgY2hhbmdlcyBhbmQgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtLCB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvciB0byB1bmFmZmlsaWF0ZWQgdGhpcmQgcGFydGllcy4gQSBDb250cmlidXRpb24gb3JpZ2luYXRlcyBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcnMgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKHgpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKHkpIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworMS4yIENvbnRyaWJ1dG9yIG1lYW5zIENBIGFuZCBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisxLjMgQ29udHJpYnV0b3IgVmVyc2lvbiBtZWFucyBhcyB0byBhIENvbnRyaWJ1dG9yLCB0aGF0IHZlcnNpb24gb2YgdGhlIFByb2dyYW0gdGhhdCBpbmNsdWRlcyB0aGUgQ29udHJpYnV0b3JzIENvbnRyaWJ1dGlvbiBidXQgbm90IGFueSBDb250cmlidXRpb25zIG1hZGUgdG8gdGhlIFByb2dyYW0gdGhlcmVhZnRlci4KKworMS40IExhcmdlciBXb3JrIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIHRoZSBQcm9ncmFtIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjUgTGljZW5zZWQgUGF0ZW50cyBtZWFuIHBhdGVudHMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHRoYXQgYXJlIGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKzEuNiBPcmlnaW5hbCBQcm9ncmFtIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSB0byB3aGljaCB0aGlzIExpY2Vuc2UgaXMgYXR0YWNoZWQgYW5kIGFzIHJlbGVhc2VkIGJ5IENBLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBpZiBhbnkuCisKKzEuNyBQcm9ncmFtIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLgorCisxLjggUmVjaXBpZW50IG1lYW5zIGFueW9uZSB3aG8gbW9kaWZpZXMsIGNvcGllcywgdXNlcyBvciBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKKzIuMSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYW4gaXJyZXZvY2FibGUsIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhlIGxpY2Vuc2UgcHJvdmlkZWQgaW4gdGhpcyBTZWN0aW9uIDIuMSBzaGFsbCBub3QgaW5jbHVkZSBhIGxpY2Vuc2UgdG8gYW55IExpY2Vuc2VkIFBhdGVudHMgb2YgYSBDb250cmlidXRvci4KKworMi4yIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhbiBpcnJldm9jYWJsZSwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byB0aGUgTGljZW5zZWQgUGF0ZW50cyB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwgYW5kIGltcG9ydCB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMiBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHRoZSBMaWNlbnNlZCBQYXRlbnRzIHRvIGJlIGluZnJpbmdlZCBieSBzdWNoIGNvbWJpbmF0aW9uLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgbm8gbGljZW5zZSBpcyBncmFudGVkIHVuZGVyIHRoaXMgU2VjdGlvbiAyLjI6IChhKSBmb3IgYW55IGNvZGUgb3Igd29ya3MgdGhhdCBkbyBub3QgaW5jbHVkZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiwgYXMgaXQgZXhpc3RzIGFuZCBpcyB1c2VkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgaGVyZW9mOyAoYikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IGVhY2ggc3VjaCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgKGMpIHdpdGggcmVzcGVjdCB0byBMaWNlbnNlZCBQYXRlbnRzIGluZnJpbmdlZCBieSB0aGUgUHJvZ3JhbSBpbiB0aGUgYWJzZW5jZSBvZiBDb250cmlidXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworMi4zIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAyLjQsIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuCisKKzIuNCBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgaXQgaGFzIGFsbCByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0IGluIHRoZSBjb3B5cmlnaHRzIGluIGl0cyBDb250cmlidXRpb25zLCBhbmQgaGFzIHRoZSByaWdodCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2VzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuCisKKzMuIERJU1RSSUJVVElPTiBSRVFVSVJFTUVOVFMKKworMy4xIElmIHRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIG9iamVjdCBjb2RlIGZvcm0sIHRoZW4gYSBwcm9taW5lbnQgbm90aWNlIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gdGhlIENvbnRyaWJ1dG9yIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gdGhlIHNvdXJjZSBjb2RlLiBBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZTsgYW5kCitpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CitlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3OworZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHMsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXc7CitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBhcmUgaW5jb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IgYXQgdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyLgorMy4yIFdoZW4gdGhlIFByb2dyYW0gaXMgbWFkZSBhdmFpbGFibGUgaW4gc291cmNlIGNvZGUgZm9ybToKKworaXQgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZAorYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtLgorMy4zIFRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbnkgQ29udHJpYnV0b3IuIEhvd2V2ZXIsIENvbnRyaWJ1dG9ycyBtYXkgb25seSBjaGFyZ2UgUmVjaXBpZW50cyBhIG9uZS10aW1lLCB1cGZyb250IGZlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4gQ29udHJpYnV0b3JzIG1heSBub3QgY2hhcmdlIFJlY2lwaWVudHMgYW55IHJlY3VycmluZyBjaGFyZ2UsIGxpY2Vuc2UgZmVlLCBvciBhbnkgb25nb2luZyByb3lhbHR5IGZvciB0aGUgUmVjaXBpZW50cyBleGVyY2lzZSBvZiBpdHMgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB0byB0aGUgUHJvZ3JhbS4gQ29udHJpYnV0b3JzIHNoYWxsIG1ha2UgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiB0aGV5IGRpc3RyaWJ1dGUgYXZhaWxhYmxlIGF0IGEgY29zdCwgaWYgYW55LCBlcXVhbCB0byB0aGUgY29zdCB0byB0aGUgQ29udHJpYnV0b3IgdG8gcGh5c2ljYWxseSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSB3b3JrLiBJdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIExpY2Vuc2UgdG8gcHJvaGliaXQgYSBDb250cmlidXRvciBmcm9tIGNoYXJnaW5nIGZlZXMgZm9yIGFueSBzZXJ2aWNlIG9yIG1haW50ZW5hbmNlIHRoYXQgYSBDb250cmlidXRvciBtYXkgY2hhcmdlIHRvIGEgUmVjaXBpZW50LCBzbyBsb25nIGFzIHN1Y2ggZmVlcyBhcmUgbm90IGFuIGF0dGVtcHQgdG8gY2lyY3VtdmVudCB0aGUgZm9yZWdvaW5nIHJlc3RyaWN0aW9ucyBvbiBjaGFyZ2luZyByb3lhbHRpZXMgb3Igb3RoZXIgcmVjdXJyaW5nIGZlZXMgZm9yIHRoZSBQcm9ncmFtIGl0c2VsZi4KKworMy40IEEgQ29udHJpYnV0b3IgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgdGhlIENvbnRyaWJ1dG9yIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIFByb2dyYW0uIEFueSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIGluY2x1ZGluZyBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmssIG1heSBzdWJqZWN0IGl0c2VsZiwgYnV0IG5vdCBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIHRvIGFkZGl0aW9uYWwgY29udHJhY3R1YWwgY29tbWl0bWVudHMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBwZXJmb3JtYW5jZSB3YXJyYW50aWVzIGFuZCBub24taW5mcmluZ2VtZW50IHJlcHJlc2VudGF0aW9ucyBvbiBzdWNoQ29udHJpYnV0b3JzIGJlaGFsZi4gTm8gQ29udHJpYnV0b3IgbWF5IGNyZWF0ZSBhbnkgYWRkaXRpb25hbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yIChDb21tZXJjaWFsIENvbnRyaWJ1dG9yKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yIChJbmRlbW5pZmllZCBDb250cmlidXRvcikgd2hvIG1hZGUgQ29udHJpYnV0aW9ucyB0byB0aGUgUHJvZ3JhbSBkaXN0cmlidXRlZCBieSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgTG9zc2VzKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zLCBpbmNsdWRpbmcgYW55IGFkZGl0aW9uYWwgY29udHJhY3R1YWwgY29tbWl0bWVudHMsIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuCisKKzMuNSBJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCAoYSkgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBQcm9ncmFtIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgLi4vSVBfSVNTVUVTLCBhbmQgKGIpIG5vdGlmeSBDQSBpbiB3cml0aW5nIGF0IENvbXB1dGVyIEFzc29jaWF0ZXMgSW50ZXJuYXRpb25hbCwgSW5jLiwgT25lIENvbXB1dGVyIEFzc29jaWF0ZXMgUGxhemEsIElzbGFuZGlhLCBOZXcgWW9yayAxMTc0OSwgQXR0bjogT3BlbiBTb3VyY2UgR3JvdXAgb3IgYnkgZW1haWwgYXQgb3BlbnNvdXJjZUBjYS5jb20sIGJvdGggZGVzY3JpYmluZyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSBSZWNpcGllbnQgYW5kIENBIHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3Qgd2l0aCByZWdhcmQgdG8gc3VjaCBtYXR0ZXIuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIENvbnRyaWJ1dGlvbiBpcyBtYWRlIGF2YWlsYWJsZSwgQ29udHJpYnV0b3Igc2hhbGwgYWxzbyBwcm9tcHRseSBtb2RpZnkgdGhlIElQX0lTU1VFUyBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIFByb2dyYW0gdGhhdCBzdWNoIG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKzMuNiBSZWNpcGllbnQgc2hhbGwgbm90IHJlbW92ZSwgb2JzY3VyZSwgb3IgbW9kaWZ5IGFueSBDQSBvciBvdGhlciBDb250cmlidXRvciBjb3B5cmlnaHQgb3IgcGF0ZW50IHByb3ByaWV0YXJ5IG5vdGljZXMgYXBwZWFyaW5nIGluIHRoZSBQcm9ncmFtLCB3aGV0aGVyIGluIHRoZSBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgb3IgaW4gYW55IGRvY3VtZW50YXRpb24uIEluIGFkZGl0aW9uIHRvIHRoZSBvYmxpZ2F0aW9ucyBzZXQgZm9ydGggaW4gU2VjdGlvbiA0LCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09OVFJJQlVUSU9OIFJFU1RSSUNUSU9OUworCis0LjEgRWFjaCBDb250cmlidXRvciBtdXN0IGNhdXNlIHRoZSBQcm9ncmFtIHRvIHdoaWNoIHRoZSBDb250cmlidXRvciBwcm92aWRlcyBhIENvbnRyaWJ1dGlvbiB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyB0aGUgQ29udHJpYnV0b3IgbWFkZSB0byBjcmVhdGUgaXRzIHZlcnNpb24gb2YgdGhlIFByb2dyYW0gYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIENvbnRyaWJ1dGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIHRoZSBQcm9ncmFtIGRpc3RyaWJ1dGVkIGJ5IGEgcHJpb3IgQ29udHJpYnV0b3IsIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgcHJpb3IgQ29udHJpYnV0b3IgZnJvbSB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbiB3YXMgZGVyaXZlZCwgaW4gKGEpIHRoZSBQcm9ncmFtIHNvdXJjZSBjb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gZXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCB0aGUgQ29udHJpYnV0b3IgZGVzY3JpYmVzIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBQcm9ncmFtLgorCis1LiBOTyBXQVJSQU5UWQorCis1LjEgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBBUyBJUyBBTkQgSU4gSVRTIFBSRVNFTlQgU1RBVEUgQU5EIENPTkRJVElPTi4gTk8gV0FSUkFOVFksIFJFUFJFU0VOVEFUSU9OLCBDT05ESVRJT04sIFVOREVSVEFLSU5HIE9SIFRFUk0sIEVYUFJFU1MgT1IgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgQVMgVE8gVEhFIENPTkRJVElPTiwgUVVBTElUWSwgRFVSQUJJTElUWSwgUEVSRk9STUFOQ0UsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVVNFIE9GIFRIRSBQUk9HUkFNIElTIEdJVkVOIE9SIEFTU1VNRUQgQlkgQU5ZIENPTlRSSUJVVE9SIEFORCBBTEwgU1VDSCBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMsIENPTkRJVElPTlMsIFVOREVSVEFLSU5HUyBBTkQgVEVSTVMgQVJFIEhFUkVCWSBFWENMVURFRCBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4KKworNS4yIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzUuMyBFYWNoIFJlY2lwaWVudCBhY2tub3dsZWRnZXMgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIFByb2dyYW0gY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKKzYuMSBFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIExJQ0VOU0UsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIE5PIENPTlRSSUJVVE9SIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVFJBREVNQVJLUyBBTkQgQlJBTkRJTkcKKworNy4xIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgUmVjaXBpZW50IG9yIGFueSB0aGlyZCBwYXJ0eSBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBub3cgb3Igc3Vic2VxdWVudGx5IHBvc3RlZCBhdCBodHRwOi8vd3d3LmNhLmNvbS9jYXRyZG1yay5odG0sIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBsb2dvcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQ0EgKGNvbGxlY3RpdmVseSBDQSBNYXJrcykgb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvci4gUmVjaXBpZW50IGFncmVlcyBub3QgdG8gdXNlIGFueSBDQSBNYXJrcyBpbiBvciBhcyBwYXJ0IG9mIHRoZSBuYW1lIG9mIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBvciB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBQcm9ncmFtLgorCis3LjIgU3ViamVjdCB0byBTZWN0aW9uIDcuMSwgUmVjaXBpZW50cyBtYXkgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSB1bmRlciB0cmFkZW1hcmtzLCBsb2dvcywgYW5kIHByb2R1Y3QgbmFtZXMgYmVsb25naW5nIHRvIHRoZSBSZWNpcGllbnQgcHJvdmlkZWQgdGhhdCBhbGwgY29weXJpZ2h0IGFuZCBvdGhlciBhdHRyaWJ1dGlvbiBub3RpY2VzIHJlbWFpbiBpbiB0aGUgUHJvZ3JhbS4KKworOC4gUEFURU5UIExJVElHQVRJT04KKworOC4xIElmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IHBlcnNvbiBvciBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50cyByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIuMiBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCis5LiBPV05FUlNISVAKKworOS4xIFN1YmplY3QgdG8gdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGluIFNlY3Rpb25zIDIuMSBhbmQgMi4yIGFib3ZlLCBlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkgQ29udHJpYnV0aW9ucyBtYWRlIGJ5IHN1Y2ggQ29udHJpYnV0b3IuIENBIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgYW55IENvbnRyaWJ1dGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQ0EgKENBIENvbnRyaWJ1dGlvbnMpLCBhbmQgc3VjaCBDQSBDb250cmlidXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIENBIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBDQSBDb250cmlidXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSwgb3Igb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLgorCisxMC4gVEVSTUlOQVRJT04KKworMTAuMSBBbGwgb2YgUmVjaXBpZW50cyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBSZWNpcGllbnRzIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCBhcyBhIENvbnRyaWJ1dG9yIHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisxMS4gR0VORVJBTAorCisxMS4xIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKKzExLjIgQ0EgbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUgb3RoZXIgdGhhbiBDQSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UuCisKKzExLjMgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgUmVjaXBpZW50IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgUHJvZ3JhbSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24sIHRoZW4gUmVjaXBpZW50IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIElQX0lTU1VFUyBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNSBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBQcm9ncmFtIHNvdXJjZSBjb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSBSZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCisxMS40IFRoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsuIE5vIFJlY2lwaWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBSZWNpcGllbnQgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gYSBSZWNpcGllbnQgYW5kIENBIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZSBTdGF0ZSBvZiBOZXcgWW9yaywgYW5kIFJlY2lwaWVudCBhbmQgQ0EgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IGRpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMS41IFdoZXJlIFJlY2lwaWVudCBpcyBsb2NhdGVkIGluIHRoZSBwcm92aW5jZSBvZiBRdWViZWMsIENhbmFkYSwgdGhlIGZvbGxvd2luZyBjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkIHRoYXQgdGhpcyBMaWNlbnNlIGFuZCBhbGwgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiBMZXMgcGFydGllcyBjb250cmFjdGFudGVzIGNvbmZpcm1lbnQgcXVgZWxsZXMgb250IGV4aWdlIHF1ZSBsZSBwcmVzZW50IGNvbnRyYXQgZXQgdG91cyBsZXMgZG9jdW1lbnRzIGFzc29jaWVzIHNvaWVudCByZWRpZ2VzIGVuIGFuZ2xhaXMuCisKKzExLjYgVGhlIFByb2dyYW0gaXMgc3ViamVjdCB0byBhbGwgZXhwb3J0IGFuZCBpbXBvcnQgbGF3cywgcmVzdHJpY3Rpb25zIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBSZWNpcGllbnQgcmVjZWl2ZXMgdGhlIFByb2dyYW0uIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGNvbXBseWluZyB3aXRoIGFuZCBlbnN1cmluZyB0aGF0IFJlY2lwaWVudCBkb2VzIG5vdCBleHBvcnQsIHJlLWV4cG9ydCwgb3IgaW1wb3J0IHRoZSBQcm9ncmFtIGluIHZpb2xhdGlvbiBvZiBzdWNoIGxhd3MsIHJlc3RyaWN0aW9ucyBvciByZWd1bGF0aW9ucywgb3Igd2l0aG91dCBhbnkgbmVjZXNzYXJ5IGxpY2Vuc2VzIGFuZCBhdXRob3JpemF0aW9ucy4KKworMTEuNyBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMGI3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0xLjAKQEAgLTAsMCArMSw2MCBAQAorCitDcmVhdGl2ZSBDb21tb25zCitBdHRyaWJ1dGlvbiAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTE3YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi4wCkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1dlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlM2QxOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS0yLjUKQEAgLTAsMCArMSw2MyBAQAorCitDcmVhdGl2ZSBDb21tb25zCitBdHRyaWJ1dGlvbiAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTNkNTYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktMy4wCkBAIC0wLDAgKzEsNzAgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworQXR0cmlidXRpb24gMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7Cit0byBjcmVhdGUgYW5kIFJlcHJvZHVjZSBBZGFwdGF0aW9ucyBwcm92aWRlZCB0aGF0IGFueSBzdWNoIEFkYXB0YXRpb24sIGluY2x1ZGluZyBhbnkgdHJhbnNsYXRpb24gaW4gYW55IG1lZGl1bSwgdGFrZXMgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5IHRoYXQgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gdGhlIG9yaWdpbmFsIFdvcmsuIEZvciBleGFtcGxlLCBhIHRyYW5zbGF0aW9uIGNvdWxkIGJlIG1hcmtlZCAiVGhlIG9yaWdpbmFsIHdvcmsgd2FzIHRyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGFuIEFkYXB0YXRpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQWRhcHRhdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgKGl2KSAsIGNvbnNpc3RlbnQgd2l0aCBTZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNCAoYikgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM1ZDIyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTEuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDEuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBEUkFGVCBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjNTE3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTIuMApAQCAtMCwwICsxLDY2IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGQpIGFuZCA0KGUpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTYxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0yLjUKQEAgLTAsMCArMSw2NiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAyLjUKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNDI1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLTMuMApAQCAtMCwwICsxLDcyIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbCAzLjAgVW5wb3J0ZWQKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gNChkKS4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikgY29uc2lzdGVudCB3aXRoIFNlY3Rpb24gMyhiKSwgaW4gdGhlIGNhc2Ugb2YgYW4gQWRhcHRhdGlvbiwgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgQWRhcHRhdGlvbiAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGMpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUgb3RoZXIgY29udHJpYnV0aW5nIGF1dGhvcnMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBZb3UgbWF5IG9ubHkgdXNlIHRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIGZvciB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IG1heSBub3QgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGFzc2VydCBvciBpbXBseSBhbnkgY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgV29yaywgd2l0aG91dCB0aGUgc2VwYXJhdGUsIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisKK05vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CitXYWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYikgYW5kIG90aGVyd2lzZSB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpLgorRXhjZXB0IGFzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgTGljZW5zb3Igb3IgYXMgbWF5IGJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCBub3QgZGlzdG9ydCwgbXV0aWxhdGUsIG1vZGlmeSBvciB0YWtlIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSBqdXJpc2RpY3Rpb25zIChlLmcuIEphcGFuKSwgaW4gd2hpY2ggYW55IGV4ZXJjaXNlIG9mIHRoZSByaWdodCBncmFudGVkIGluIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLCBtdXRpbGF0aW9uLCBtb2RpZmljYXRpb24gb3Igb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIGFuZCByZXB1dGF0aW9uLCB0aGUgTGljZW5zb3Igd2lsbCB3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIFlvdXIgcmlnaHQgdW5kZXIgU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorQ3JlYXRpdmUgQ29tbW9ucyBOb3RpY2UKKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhlIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZDg0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTEuMApAQCAtMCwwICsxLDUgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cy1Ob25Db21tZXJjaWFsIDEuMCAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLiBMaWNlbnNlICBUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4gIEJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuICAxLiBEZWZpbml0aW9ucyAgIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuICJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4gIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4gIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzogIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6ICBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIFlvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZC4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LiA1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIgIEJ5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeTogTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOyBUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4gNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIDcuIFRlcm1pbmF0aW9uICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4gOC4gTWlzY2VsbGFuZW91cyAgRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4gQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuICBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuICBDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ2YzE3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuMApAQCAtMCwwICsxLDYzIEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuMAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSBXb3JrLgorIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZCkgYW5kIDQoZSkuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLU5ELTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjdhYTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMi41CkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmssIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtTkQtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1ORC0zLjAKQEAgLTAsMCArMSw2OSBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMgMy4wIFVucG9ydGVkCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgZGVyaXZhdGl2ZSB3b3JrLCBhcnJhbmdlbWVudCBvZiBtdXNpYyBvciBvdGhlciBhbHRlcmF0aW9ucyBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkIGluIFNlY3Rpb24gMShmKSBiZWxvdywgd2hpY2gsIGJ5IHJlYXNvbiBvZiB0aGUgc2VsZWN0aW9uIGFuZCBhcnJhbmdlbWVudCBvZiB0aGVpciBjb250ZW50cywgY29uc3RpdHV0ZSBpbnRlbGxlY3R1YWwgY3JlYXRpb25zLCBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nIHdpdGggb25lIG9yIG1vcmUgb3RoZXIgY29udHJpYnV0aW9ucywgZWFjaCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gKGFzIGRlZmluZWQgYWJvdmUpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgdGhyb3VnaCBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcC4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsgYW5kLAordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQoZCkuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBUaGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiA0KGMpIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdXIgZXhlcmNpc2Ugb2Ygc3VjaCByaWdodHMgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGIpIGFuZCBvdGhlcndpc2Ugd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lOyBhbmQsCitWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSB0aGF0IGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChiKS4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlmZDZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMS4wCkBAIC0wLDAgKzEsNjQgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK0J5IG9mZmVyaW5nIHRoZSBXb3JrIGZvciBwdWJsaWMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQsIHRvIHRoZSBiZXN0IG9mIExpY2Vuc29yYHMga25vd2xlZGdlIGFmdGVyIHJlYXNvbmFibGUgaW5xdWlyeToKK0xpY2Vuc29yIGhhcyBzZWN1cmVkIGFsbCByaWdodHMgaW4gdGhlIFdvcmsgbmVjZXNzYXJ5IHRvIGdyYW50IHRoZSBsaWNlbnNlIHJpZ2h0cyBoZXJldW5kZXIgYW5kIHRvIHBlcm1pdCB0aGUgbGF3ZnVsIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2l0aG91dCBZb3UgaGF2aW5nIGFueSBvYmxpZ2F0aW9uIHRvIHBheSBhbnkgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKK1RoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyIHJpZ2h0IG9mIGFueSB0aGlyZCBwYXJ0eSBvciBjb25zdGl0dXRlIGRlZmFtYXRpb24sIGludmFzaW9uIG9mIHByaXZhY3kgb3Igb3RoZXIgdG9ydGlvdXMgaW5qdXJ5IHRvIGFueSB0aGlyZCBwYXJ0eS4KK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBXT1JLIElTIExJQ0VOU0VEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBDT05URU5UUyBPUiBBQ0NVUkFDWSBPRiBUSEUgV09SSy4KKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00gTElBQklMSVRZIFRPIEEgVEhJUkQgUEFSVFkgUkVTVUxUSU5HIEZST00gQlJFQUNIIE9GIFRIRSBXQVJSQU5USUVTIElOIFNFQ1RJT04gNSwgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjA3ZjgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkMtU0EtMi4wCkBAIC0wLDAgKzEsNjggQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDQoZSkgYW5kIDQoZikuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLCBvciBhIENyZWF0aXZlIENvbW1vbnMgaUNvbW1vbnMgbGljZW5zZSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjAgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBleGNoYW5nZSBvZiBjb3B5cmlnaHRlZCB3b3Jrcy4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI1Y2NjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTIuNQpAQCAtMCwwICsxLDY4IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyA0KGUpIGFuZCA0KGYpLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoZCksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDIuNSBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK1lvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMyBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIFRoZSBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlIGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yayBvciBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0LgorRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKworUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE0IG9mIHRoZSBVUyBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCitTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaCBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKzguIE1pc2NlbGxhbmVvdXMKKworRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9uc2AgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1OQy1TQS0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjYjFjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5DLVNBLTMuMApAQCAtMCwwICsxLDc0IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZykgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgTm9uY29tbWVyY2lhbCwgU2hhcmVBbGlrZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsgYW5kIHRvIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMgdGhvc2UgcHVibGljIHJlY2l0YXRpb25zLCBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2ggYSB3YXkgdGhhdCBtZW1iZXJzIG9mIHRoZSBwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBwdWJsaWMgb2YgdGhlIHBlcmZvcm1hbmNlcyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIGJ5IHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlOyB0byBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mIGZpeGF0aW9uIGFuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKK3RvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOwordG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChlKS4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoZCksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoZCksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24gb25seSB1bmRlcjogKGkpIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2U7IChpaSkgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlOyAoaWlpKSBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2UgKGVpdGhlciB0aGlzIG9yIGEgbGF0ZXIgbGljZW5zZSB2ZXJzaW9uKSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuLCBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMy4wIFVTKSAoIkFwcGxpY2FibGUgTGljZW5zZSIpLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVSSSwgZm9yIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBBZGFwdGF0aW9uIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZS4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBhcyBpbmNsdWRlZCBpbiB0aGUgQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIEFkYXB0YXRpb24sIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGIpIGFwcGxpZXMgdG8gdGhlIEFkYXB0YXRpb24gYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBBZGFwdGF0aW9uIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuCitZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lciB0aGF0IGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUgZXhjaGFuZ2Ugb2YgdGhlIFdvcmsgZm9yIG90aGVyIGNvcHlyaWdodGVkIHdvcmtzIGJ5IG1lYW5zIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLCBwcm92aWRlZCB0aGVyZSBpcyBubyBwYXltZW50IG9mIGFueSBtb25ldGFyeSBjb21wZW5zYXRpb24gaW4gY29uLW5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCwgKGl2KSBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoZCkgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZiBZb3VyIGV4ZXJjaXNlIG9mIHN1Y2ggcmlnaHRzIGlzIGZvciBhIHB1cnBvc2Ugb3IgdXNlIHdoaWNoIGlzIG90aGVyd2lzZSB0aGFuIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKSBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcyBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UgdGhhdCBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcyBvdGhlcndpc2UgdGhhbiBub25jb21tZXJjaWFsIGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQoYykuCitFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcmBzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HIEFORCBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRISVMgRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiwgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK05vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCitUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzIExpY2Vuc2Ugd2VyZSBkcmFmdGVkIHV0aWxpemluZyB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIEJlcm5lIENvbnZlbnRpb24gZm9yIHRoZSBQcm90ZWN0aW9uIG9mIExpdGVyYXJ5IGFuZCBBcnRpc3RpYyBXb3JrcyAoYXMgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodCBUcmVhdHkgb2YgMTk5NiwgdGhlIFdJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIExpY2Vuc2UgdGVybXMgYXJlIHNvdWdodCB0byBiZSBlbmZvcmNlZCBhY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcHJvdmlzaW9ucyBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUgc3RhbmRhcmQgc3VpdGUgb2YgcmlnaHRzIGdyYW50ZWQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3IGluY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IGludGVuZGVkIHRvIHJlc3RyaWN0IHRoZSBsaWNlbnNlIG9mIGFueSByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBsYXcuCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGlzIExpY2Vuc2UuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyYjMTcxOyBCYWNrIHRvIENvbW1vbnMgRGVlZAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1ODE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLU5ELTEuMApAQCAtMCwwICsxLDU5IEBACisKK0NyZWF0aXZlIENvbW1vbnMKKworCitBdHRyaWJ1dGlvbi1Ob0Rlcml2cyAxLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCit0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0IHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZyBieSBjb252ZXlpbmcgdGhlIG5hbWUgKG9yIHBzZXVkb255bSBpZiBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitCeSBvZmZlcmluZyB0aGUgV29yayBmb3IgcHVibGljIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0LCB0byB0aGUgYmVzdCBvZiBMaWNlbnNvcmBzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CitMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0byBwZXJtaXQgdGhlIGxhd2Z1bCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpdGhvdXQgWW91IGhhdmluZyBhbnkgb2JsaWdhdGlvbiB0byBwYXkgYW55IHJveWFsdGllcywgY29tcHVsc29yeSBsaWNlbnNlIGZlZXMsIHJlc2lkdWFscyBvciBhbnkgb3RoZXIgcGF5bWVudHM7CitUaGUgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIHB1YmxpY2l0eSByaWdodHMsIGNvbW1vbiBsYXcgcmlnaHRzIG9yIGFueSBvdGhlciByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkgdGhpcmQgcGFydHkuCitFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSElTIExJQ0VOU0UgT1IgT1RIRVJXSVNFIEFHUkVFRCBJTiBXUklUSU5HIE9SIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUgV09SSyBJUyBMSUNFTlNFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIEFORCBFWENFUFQgRk9SIERBTUFHRVMgQVJJU0lORyBGUk9NIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYzk3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjAKQEAgLTAsMCArMSw2MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMi4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0yLjUKQEAgLTAsMCArMSw2MiBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tTm9EZXJpdnMgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZSBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGIpLCBhcyByZXF1ZXN0ZWQuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yYHMgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworVU5MRVNTIE9USEVSV0lTRSBNVVRVQUxMWSBBR1JFRUQgVE8gQlkgVEhFIFBBUlRJRVMgSU4gV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNQVRFUklBTFMsIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktTkQtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNjRlMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1ORC0zLjAKQEAgLTAsMCArMSw2OCBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKK0F0dHJpYnV0aW9uLU5vRGVyaXZzIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGFib3ZlKSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zLCBpbiB0aGUgY2FzZSBvZiBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrIG9yIGlmIG5vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLCBwbGF5IGluLCBpbnRlcnByZXQgb3Igb3RoZXJ3aXNlIHBlcmZvcm0gbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3Mgb3IgZXhwcmVzc2lvbnMgb2YgZm9sa2xvcmU7IChpaSkgaW4gdGhlIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEgcGVyZm9ybWFuY2Ugb3Igb3RoZXIgc291bmRzOyBhbmQsIChpaWkpIGluIHRoZSBjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvciBmb3JtIG9mIGl0cyBleHByZXNzaW9uIGluY2x1ZGluZyBkaWdpdGFsIGZvcm0sIHN1Y2ggYXMgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3Igb3RoZXIgd29yayBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYSBjaG9yZW9ncmFwaGljIHdvcmsgb3IgZW50ZXJ0YWlubWVudCBpbiBkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OyBhIHdvcmsgb2YgZHJhd2luZywgcGFpbnRpbmcsIGFyY2hpdGVjdHVyZSwgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZCBhcnQ7IGFuIGlsbHVzdHJhdGlvbiwgbWFwLCBwbGFuLCBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzIHBlcmZvcm1lciB0byB0aGUgZXh0ZW50IGl0IGlzIG5vdCBvdGhlcndpc2UgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorIlB1YmxpY2x5IFBlcmZvcm0iIG1lYW5zIHRvIHBlcmZvcm0gcHVibGljIHJlY2l0YXRpb25zIG9mIHRoZSBXb3JrIGFuZCB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUgV29yayB0byB0aGUgcHVibGljIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzIGFuZCB0aGUgY29tbXVuaWNhdGlvbiB0byB0aGUgcHVibGljIG9mIHRoZSBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHVzZXMgZnJlZSBmcm9tIGNvcHlyaWdodCBvciByaWdodHMgYXJpc2luZyBmcm9tIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9ucy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCitOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2FuIGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsgYW5kLAorVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMsIGJ1dCBvdGhlcndpc2UgeW91IGhhdmUgbm8gcmlnaHRzIHRvIG1ha2UgQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIFdvcmsgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGEpIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLgorSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYikgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBDb2xsZWN0aW9uLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIsIGlmIGEgY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoaXMgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjEzOTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMS4wCkBAIC0wLDAgKzEsNjMgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMS4wCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIERSQUZUIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3JrczsKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCis1LiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXIKKworQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlIGJlc3Qgb2YgTGljZW5zb3JgcyBrbm93bGVkZ2UgYWZ0ZXIgcmVhc29uYWJsZSBpbnF1aXJ5OgorTGljZW5zb3IgaGFzIHNlY3VyZWQgYWxsIHJpZ2h0cyBpbiB0aGUgV29yayBuZWNlc3NhcnkgdG8gZ3JhbnQgdGhlIGxpY2Vuc2UgcmlnaHRzIGhlcmV1bmRlciBhbmQgdG8gcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueSByb3lhbHRpZXMsIGNvbXB1bHNvcnkgbGljZW5zZSBmZWVzLCByZXNpZHVhbHMgb3IgYW55IG90aGVyIHBheW1lbnRzOworVGhlIFdvcmsgZG9lcyBub3QgaW5mcmluZ2UgdGhlIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwdWJsaWNpdHkgcmlnaHRzLCBjb21tb24gbGF3IHJpZ2h0cyBvciBhbnkgb3RoZXIgcmlnaHQgb2YgYW55IHRoaXJkIHBhcnR5IG9yIGNvbnN0aXR1dGUgZGVmYW1hdGlvbiwgaW52YXNpb24gb2YgcHJpdmFjeSBvciBvdGhlciB0b3J0aW91cyBpbmp1cnkgdG8gYW55IHRoaXJkIHBhcnR5LgorRVhDRVBUIEFTIEVYUFJFU1NMWSBTVEFURUQgSU4gVEhJUyBMSUNFTlNFIE9SIE9USEVSV0lTRSBBR1JFRUQgSU4gV1JJVElORyBPUiBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgVEhFIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIENPTlRFTlRTIE9SIEFDQ1VSQUNZIE9GIFRIRSBXT1JLLgorNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBBTkQgRVhDRVBUIEZPUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBMSUFCSUxJVFkgVE8gQSBUSElSRCBQQVJUWSBSRVNVTFRJTkcgRlJPTSBCUkVBQ0ggT0YgVEhFIFdBUlJBTlRJRVMgSU4gU0VDVElPTiA1LCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCitObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MjQzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DQy1CWS1TQS0yLjAKQEAgLTAsMCArMSw2NyBAQAorCitDcmVhdGl2ZSBDb21tb25zCisKKworQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjAKKworQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIFNoYXJlQWxpa2UuCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKwordG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzOwordG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisKK1BlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KK01lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yIHRoZSBPcmlnaW5hbCBBdXRob3IsIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjAgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgZ2l2ZSB0aGUgT3JpZ2luYWwgQXV0aG9yIGNyZWRpdCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZiBzdXBwbGllZDsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhkZDVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMi41CkBAIC0wLDAgKzEsNjcgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCisKK0F0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi41CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorMi4gRmFpciBVc2UgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvciBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKK3RvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7Cit0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzOwordG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3MuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCitQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4gQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsuCitNZWNoYW5pY2FsIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZSBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChjKSwgYXMgcmVxdWVzdGVkLgorWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDIuNSBKYXBhbikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgZWFjaCBEZXJpdmF0aXZlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgRGVyaXZhdGl2ZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBEZXJpdmF0aXZlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK0lmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3JgcyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcHJhY3RpY2FibGUsIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1N1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorOC4gTWlzY2VsbGFuZW91cworCitFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZSBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IHNoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zYCB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKworJiMxNzE7IEJhY2sgdG8gQ29tbW9ucyBEZWVkCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDLUJZLVNBLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGJiZDZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MtQlktU0EtMy4wCkBAIC0wLDAgKzEsNzQgQEAKKworQ3JlYXRpdmUgQ29tbW9ucworCitBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDMuMCBVbnBvcnRlZAorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUTyBUSEUgRVhURU5UIFRISVMgTElDRU5TRSBNQVkgQkUgQ09OU0lERVJFRCBUTyBCRSBBIENPTlRSQUNULCBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIGFkYXB0YXRpb24sIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyJDb2xsZWN0aW9uIiBtZWFucyBhIGNvbGxlY3Rpb24gb2YgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29ya3MsIHN1Y2ggYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvciBicm9hZGNhc3RzLCBvciBvdGhlciB3b3JrcyBvciBzdWJqZWN0IG1hdHRlciBvdGhlciB0aGFuIHdvcmtzIGxpc3RlZCBpbiBTZWN0aW9uIDEoZikgYmVsb3csIHdoaWNoLCBieSByZWFzb24gb2YgdGhlIHNlbGVjdGlvbiBhbmQgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyJDcmVhdGl2ZSBDb21tb25zIENvbXBhdGlibGUgTGljZW5zZSIgbWVhbnMgYSBsaWNlbnNlIHRoYXQgaXMgbGlzdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2NvbXBhdGlibGVsaWNlbnNlcyB0aGF0IGhhcyBiZWVuIGFwcHJvdmVkIGJ5IENyZWF0aXZlIENvbW1vbnMgYXMgYmVpbmcgZXNzZW50aWFsbHkgZXF1aXZhbGVudCB0byB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZywgYXQgYSBtaW5pbXVtLCBiZWNhdXNlIHRoYXQgbGljZW5zZTogKGkpIGNvbnRhaW5zIHRlcm1zIHRoYXQgaGF2ZSB0aGUgc2FtZSBwdXJwb3NlLCBtZWFuaW5nIGFuZCBlZmZlY3QgYXMgdGhlIExpY2Vuc2UgRWxlbWVudHMgb2YgdGhpcyBMaWNlbnNlOyBhbmQsIChpaSkgZXhwbGljaXRseSBwZXJtaXRzIHRoZSByZWxpY2Vuc2luZyBvZiBhZGFwdGF0aW9ucyBvZiB3b3JrcyBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGF0IGxpY2Vuc2UgdW5kZXIgdGhpcyBMaWNlbnNlIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlLgorIkRpc3RyaWJ1dGUiIG1lYW5zIHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgdGhlIG9yaWdpbmFsIGFuZCBjb3BpZXMgb2YgdGhlIFdvcmsgb3IgQWRhcHRhdGlvbiwgYXMgYXBwcm9wcmlhdGUsIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisiTGljZW5zZSBFbGVtZW50cyIgbWVhbnMgdGhlIGZvbGxvd2luZyBoaWdoLWxldmVsIGxpY2Vuc2UgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZiB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBTaGFyZUFsaWtlLgorIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiBubyBpbmRpdmlkdWFsIG9yIGVudGl0eSBjYW4gYmUgaWRlbnRpZmllZCwgdGhlIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsIG11c2ljaWFucywgZGFuY2VycywgYW5kIG90aGVyIHBlcnNvbnMgd2hvIGFjdCwgc2luZywgZGVsaXZlciwgZGVjbGFpbSwgcGxheSBpbiwgaW50ZXJwcmV0IG9yIG90aGVyd2lzZSBwZXJmb3JtIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZSBsaXRlcmFyeSwgc2NpZW50aWZpYyBhbmQgYXJ0aXN0aWMgZG9tYWluLCB3aGF0ZXZlciBtYXkgYmUgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzIGEgYm9vaywgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsIHNjdWxwdHVyZSwgZW5ncmF2aW5nIG9yIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcyBleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYSBwZXJmb3JtYW5jZTsgYSBicm9hZGNhc3Q7IGEgcGhvbm9ncmFtOyBhIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYSBjb3B5cmlnaHRhYmxlIHdvcms7IG9yIGEgd29yayBwZXJmb3JtZWQgYnkgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlIGNvbnNpZGVyZWQgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLgorIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyJSZXByb2R1Y2UiIG1lYW5zIHRvIG1ha2UgY29waWVzIG9mIHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2Ugb2YgYSBwcm90ZWN0ZWQgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtIGluIGRpZ2l0YWwgZm9ybSBvciBvdGhlciBlbGVjdHJvbmljIG1lZGl1bS4KKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSBsaW1pdGF0aW9ucyBvciBleGNlcHRpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGZvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCiszLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKK3RvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZSBDb2xsZWN0aW9ucywgYW5kIHRvIFJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3Rpb25zOwordG8gY3JlYXRlIGFuZCBSZXByb2R1Y2UgQWRhcHRhdGlvbnMgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzIHJlYXNvbmFibGUgc3RlcHMgdG8gY2xlYXJseSBsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20gRW5nbGlzaCB0byBTcGFuaXNoLCIgb3IgYSBtb2RpZmljYXRpb24gY291bGQgaW5kaWNhdGUgIlRoZSBvcmlnaW5hbCB3b3JrIGhhcyBiZWVuIG1vZGlmaWVkLiI7Cit0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGlvbnM7IGFuZCwKK3RvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gQWRhcHRhdGlvbnMuCitGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbm5vdCBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaCByb3lhbHRpZXMgZm9yIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZTsKK1dhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKK1ZvbHVudGFyeSBMaWNlbnNlIFNjaGVtZXMuIFRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzLCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIExpY2Vuc29yIGlzIGEgbWVtYmVyIG9mIGEgY29sbGVjdGluZyBzb2NpZXR5IHRoYXQgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LCBmcm9tIGFueSBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBTdWJqZWN0IHRvIFNlY3Rpb24gOChmKSwgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCitZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtLiBXaGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmssIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgV29yayBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhbiBBZGFwdGF0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYyksIGFzIHJlcXVlc3RlZC4KK1lvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24gb25seSB1bmRlciB0aGUgdGVybXMgb2Y6IChpKSB0aGlzIExpY2Vuc2U7IChpaSkgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlOyAoaWlpKSBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2UgKGVpdGhlciB0aGlzIG9yIGEgbGF0ZXIgbGljZW5zZSB2ZXJzaW9uKSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlIChlLmcuLCBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDMuMCBVUykpOyAoaXYpIGEgQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2UuIElmIHlvdSBsaWNlbnNlIHRoZSBBZGFwdGF0aW9uIHVuZGVyIG9uZSBvZiB0aGUgbGljZW5zZXMgbWVudGlvbmVkIGluIChpdiksIHlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UuIElmIHlvdSBsaWNlbnNlIHRoZSBBZGFwdGF0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgb2YgdGhlIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiAoaSksIChpaSkgb3IgKGlpaSkgKHRoZSAiQXBwbGljYWJsZSBMaWNlbnNlIiksIHlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIGdlbmVyYWxseSBhbmQgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zOiAoSSkgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVUkkgZm9yLCB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBlYWNoIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybTsgKElJKSBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2U7IChJSUkpIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgYXMgaW5jbHVkZWQgaW4gdGhlIEFkYXB0YXRpb24gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybTsgKElWKSB3aGVuIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIEFkYXB0YXRpb24sIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiBmcm9tIFlvdSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuIFRoaXMgU2VjdGlvbiA0KGIpIGFwcGxpZXMgdG8gdGhlIEFkYXB0YXRpb24gYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBBZGFwdGF0aW9uIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UuCitJZiBZb3UgRGlzdHJpYnV0ZSwgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcmBzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyAoaWkpIHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgKGlpaSkgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCAoaXYpICwgY29uc2lzdGVudCB3aXRoIFNzZWN0aW9uIDMoYiksIGluIHRoZSBjYXNlIG9mIGFuIEFkYXB0YXRpb24sIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNChjKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlIGNyZWRpdHMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyB0aGUgY3JlZGl0cyBmb3IgdGhlIG90aGVyIGNvbnRyaWJ1dGluZyBhdXRob3JzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMsIGFzIGFwcHJvcHJpYXRlLCBvZiBZb3Ugb3IgWW91ciB1c2Ugb2YgdGhlIFdvcmssIHdpdGhvdXQgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcy4KK0V4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZSBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZCBiZSBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yYHMgaG9ub3Igb3IgcmVwdXRhdGlvbi4gTGljZW5zb3IgYWdyZWVzIHRoYXQgaW4gdGhvc2UganVyaXNkaWN0aW9ucyAoZS5nLiBKYXBhbiksIGluIHdoaWNoIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlICh0aGUgcmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgd291bGQgYmUgZGVlbWVkIHRvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3JgcyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUgb3Igbm90IGFzc2VydCwgYXMgYXBwcm9wcmlhdGUsIHRoaXMgU2VjdGlvbiwgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcsIHRvIGVuYWJsZSBZb3UgdG8gcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UgKHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIGJ1dCBub3Qgb3RoZXJ3aXNlLgorNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCis4LiBNaXNjZWxsYW5lb3VzCisKK0VhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCitFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KK1RoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgdGhlIFByb3RlY3Rpb24gb2YgTGl0ZXJhcnkgYW5kIEFydGlzdGljIFdvcmtzIChhcyBhbWVuZGVkIG9uIFNlcHRlbWJlciAyOCwgMTk3OSksIHRoZSBSb21lIENvbnZlbnRpb24gb2YgMTk2MSwgdGhlIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYgYW5kIHRoZSBVbml2ZXJzYWwgQ29weXJpZ2h0IENvbnZlbnRpb24gKGFzIHJldmlzZWQgb24gSnVseSAyNCwgMTk3MSkuIFRoZXNlIHJpZ2h0cyBhbmQgc3ViamVjdCBtYXR0ZXIgdGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aG9zZSB0cmVhdHkgcHJvdmlzaW9ucyBpbiB0aGUgYXBwbGljYWJsZSBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgaW5jbHVkZXMgYWRkaXRpb25hbCByaWdodHMgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBzdWNoIGFkZGl0aW9uYWwgcmlnaHRzIGFyZSBkZWVtZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplIHRoZSB1c2UgYnkgZWl0aGVyIHBhcnR5IG9mIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnNgIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgdGhpcyB0cmFkZW1hcmsgcmVzdHJpY3Rpb24gZG9lcyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBMaWNlbnNlLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCismIzE3MTsgQmFjayB0byBDb21tb25zIERlZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0MwLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjZjg4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NDMC0xLjAKQEAgLTAsMCArMSwzMiBAQAorCitDcmVhdGl2ZSBDb21tb25zIFplcm8gMS4wIFVuaXZlcnNhbCAoQ0MwKQorCitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBET0NVTUVOVCBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIFVTRSBPRiBUSElTIERPQ1VNRU5UIE9SIFRIRSBJTkZPUk1BVElPTiBPUiBXT1JLUyBQUk9WSURFRCBIRVJFVU5ERVIsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIFRIRSBVU0UgT0YgVEhJUyBET0NVTUVOVCBPUiBUSEUgSU5GT1JNQVRJT04gT1IgV09SS1MgUFJPVklERUQgSEVSRVVOREVSLgorU3RhdGVtZW50IG9mIFB1cnBvc2UKKworVGhlIGxhd3Mgb2YgbW9zdCBqdXJpc2RpY3Rpb25zIHRocm91Z2hvdXQgdGhlIHdvcmxkIGF1dG9tYXRpY2FsbHkgY29uZmVyIGV4Y2x1c2l2ZSBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIChkZWZpbmVkIGJlbG93KSB1cG9uIHRoZSBjcmVhdG9yIGFuZCBzdWJzZXF1ZW50IG93bmVyKHMpIChlYWNoIGFuZCBhbGwsIGFuICJvd25lciIpIG9mIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCBhbmQvb3IgYSBkYXRhYmFzZSAoZWFjaCwgYSAiV29yayIpLgorCitDZXJ0YWluIG93bmVycyB3aXNoIHRvIHBlcm1hbmVudGx5IHJlbGlucXVpc2ggdGhvc2UgcmlnaHRzIHRvIGEgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgY29udHJpYnV0aW5nIHRvIGEgY29tbW9ucyBvZiBjcmVhdGl2ZSwgY3VsdHVyYWwgYW5kIHNjaWVudGlmaWMgd29ya3MgKCJDb21tb25zIikgdGhhdCB0aGUgcHVibGljIGNhbiByZWxpYWJseSBhbmQgd2l0aG91dCBmZWFyIG9mIGxhdGVyIGNsYWltcyBvZiBpbmZyaW5nZW1lbnQgYnVpbGQgdXBvbiwgbW9kaWZ5LCBpbmNvcnBvcmF0ZSBpbiBvdGhlciB3b3JrcywgcmV1c2UgYW5kIHJlZGlzdHJpYnV0ZSBhcyBmcmVlbHkgYXMgcG9zc2libGUgaW4gYW55IGZvcm0gd2hhdHNvZXZlciBhbmQgZm9yIGFueSBwdXJwb3NlcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsIHB1cnBvc2VzLiBUaGVzZSBvd25lcnMgbWF5IGNvbnRyaWJ1dGUgdG8gdGhlIENvbW1vbnMgdG8gcHJvbW90ZSB0aGUgaWRlYWwgb2YgYSBmcmVlIGN1bHR1cmUgYW5kIHRoZSBmdXJ0aGVyIHByb2R1Y3Rpb24gb2YgY3JlYXRpdmUsIGN1bHR1cmFsIGFuZCBzY2llbnRpZmljIHdvcmtzLCBvciB0byBnYWluIHJlcHV0YXRpb24gb3IgZ3JlYXRlciBkaXN0cmlidXRpb24gZm9yIHRoZWlyIFdvcmsgaW4gcGFydCB0aHJvdWdoIHRoZSB1c2UgYW5kIGVmZm9ydHMgb2Ygb3RoZXJzLgorCitGb3IgdGhlc2UgYW5kL29yIG90aGVyIHB1cnBvc2VzIGFuZCBtb3RpdmF0aW9ucywgYW5kIHdpdGhvdXQgYW55IGV4cGVjdGF0aW9uIG9mIGFkZGl0aW9uYWwgY29uc2lkZXJhdGlvbiBvciBjb21wZW5zYXRpb24sIHRoZSBwZXJzb24gYXNzb2NpYXRpbmcgQ0MwIHdpdGggYSBXb3JrICh0aGUgIkFmZmlybWVyIiksIHRvIHRoZSBleHRlbnQgdGhhdCBoZSBvciBzaGUgaXMgYW4gb3duZXIgb2YgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yaywgdm9sdW50YXJpbHkgZWxlY3RzIHRvIGFwcGx5IENDMCB0byB0aGUgV29yayBhbmQgcHVibGljbHkgZGlzdHJpYnV0ZSB0aGUgV29yayB1bmRlciBpdHMgdGVybXMsIHdpdGgga25vd2xlZGdlIG9mIGhpcyBvciBoZXIgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayBhbmQgdGhlIG1lYW5pbmcgYW5kIGludGVuZGVkIGxlZ2FsIGVmZmVjdCBvZiBDQzAgb24gdGhvc2UgcmlnaHRzLgorCisxLiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzLiBBIFdvcmsgbWFkZSBhdmFpbGFibGUgdW5kZXIgQ0MwIG1heSBiZSBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGFuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyAoIkNvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMiKS4gQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCB0aGUgZm9sbG93aW5nOgorCit0aGUgcmlnaHQgdG8gcmVwcm9kdWNlLCBhZGFwdCwgZGlzdHJpYnV0ZSwgcGVyZm9ybSwgZGlzcGxheSwgY29tbXVuaWNhdGUsIGFuZCB0cmFuc2xhdGUgYSBXb3JrOworbW9yYWwgcmlnaHRzIHJldGFpbmVkIGJ5IHRoZSBvcmlnaW5hbCBhdXRob3IocykgYW5kL29yIHBlcmZvcm1lcihzKTsKK3B1YmxpY2l0eSBhbmQgcHJpdmFjeSByaWdodHMgcGVydGFpbmluZyB0byBhIHBlcnNvbmBzIGltYWdlIG9yIGxpa2VuZXNzIGRlcGljdGVkIGluIGEgV29yazsKK3JpZ2h0cyBwcm90ZWN0aW5nIGFnYWluc3QgdW5mYWlyIGNvbXBldGl0aW9uIGluIHJlZ2FyZHMgdG8gYSBXb3JrLCBzdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBpbiBwYXJhZ3JhcGggNChhKSwgYmVsb3c7CityaWdodHMgcHJvdGVjdGluZyB0aGUgZXh0cmFjdGlvbiwgZGlzc2VtaW5hdGlvbiwgdXNlIGFuZCByZXVzZSBvZiBkYXRhIGluIGEgV29yazsKK2RhdGFiYXNlIHJpZ2h0cyAoc3VjaCBhcyB0aG9zZSBhcmlzaW5nIHVuZGVyIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZiAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbCBwcm90ZWN0aW9uIG9mIGRhdGFiYXNlcywgYW5kIHVuZGVyIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbiB0aGVyZW9mLCBpbmNsdWRpbmcgYW55IGFtZW5kZWQgb3Igc3VjY2Vzc29yIHZlcnNpb24gb2Ygc3VjaCBkaXJlY3RpdmUpOyBhbmQKK290aGVyIHNpbWlsYXIsIGVxdWl2YWxlbnQgb3IgY29ycmVzcG9uZGluZyByaWdodHMgdGhyb3VnaG91dCB0aGUgd29ybGQgYmFzZWQgb24gYXBwbGljYWJsZSBsYXcgb3IgdHJlYXR5LCBhbmQgYW55IG5hdGlvbmFsIGltcGxlbWVudGF0aW9ucyB0aGVyZW9mLgorMi4gV2FpdmVyLiBUbyB0aGUgZ3JlYXRlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSwgYnV0IG5vdCBpbiBjb250cmF2ZW50aW9uIG9mLCBhcHBsaWNhYmxlIGxhdywgQWZmaXJtZXIgaGVyZWJ5IG92ZXJ0bHksIGZ1bGx5LCBwZXJtYW5lbnRseSwgaXJyZXZvY2FibHkgYW5kIHVuY29uZGl0aW9uYWxseSB3YWl2ZXMsIGFiYW5kb25zLCBhbmQgc3VycmVuZGVycyBhbGwgb2YgQWZmaXJtZXJgcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGFuZCBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiwgd2hldGhlciBub3cga25vd24gb3IgdW5rbm93biAoaW5jbHVkaW5nIGV4aXN0aW5nIGFzIHdlbGwgYXMgZnV0dXJlIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiksIGluIHRoZSBXb3JrIChpKSBpbiBhbGwgdGVycml0b3JpZXMgd29ybGR3aWRlLCAoaWkpIGZvciB0aGUgbWF4aW11bSBkdXJhdGlvbiBwcm92aWRlZCBieSBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHkgKGluY2x1ZGluZyBmdXR1cmUgdGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yIGFueSBudW1iZXIgb2YgY29waWVzLCBhbmQgKGl2KSBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsLCBhZHZlcnRpc2luZyBvciBwcm9tb3Rpb25hbCBwdXJwb3NlcyAodGhlICJXYWl2ZXIiKS4gQWZmaXJtZXIgbWFrZXMgdGhlIFdhaXZlciBmb3IgdGhlIGJlbmVmaXQgb2YgZWFjaCBtZW1iZXIgb2YgdGhlIHB1YmxpYyBhdCBsYXJnZSBhbmQgdG8gdGhlIGRldHJpbWVudCBvZiBBZmZpcm1lcmBzIGhlaXJzIGFuZCBzdWNjZXNzb3JzLCBmdWxseSBpbnRlbmRpbmcgdGhhdCBzdWNoIFdhaXZlciBzaGFsbCBub3QgYmUgc3ViamVjdCB0byByZXZvY2F0aW9uLCByZXNjaXNzaW9uLCBjYW5jZWxsYXRpb24sIHRlcm1pbmF0aW9uLCBvciBhbnkgb3RoZXIgbGVnYWwgb3IgZXF1aXRhYmxlIGFjdGlvbiB0byBkaXNydXB0IHRoZSBxdWlldCBlbmpveW1lbnQgb2YgdGhlIFdvcmsgYnkgdGhlIHB1YmxpYyBhcyBjb250ZW1wbGF0ZWQgYnkgQWZmaXJtZXJgcyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLgorCiszLiBQdWJsaWMgTGljZW5zZSBGYWxsYmFjay4gU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBXYWl2ZXIgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhlbiB0aGUgV2FpdmVyIHNoYWxsIGJlIHByZXNlcnZlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIHRha2luZyBpbnRvIGFjY291bnQgQWZmaXJtZXJgcyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLiBJbiBhZGRpdGlvbiwgdG8gdGhlIGV4dGVudCB0aGUgV2FpdmVyIGlzIHNvIGp1ZGdlZCBBZmZpcm1lciBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggYWZmZWN0ZWQgcGVyc29uIGEgcm95YWx0eS1mcmVlLCBub24gdHJhbnNmZXJhYmxlLCBub24gc3VibGljZW5zYWJsZSwgbm9uIGV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgYW5kIHVuY29uZGl0aW9uYWwgbGljZW5zZSB0byBleGVyY2lzZSBBZmZpcm1lcmBzIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgKGkpIGluIGFsbCB0ZXJyaXRvcmllcyB3b3JsZHdpZGUsIChpaSkgZm9yIHRoZSBtYXhpbXVtIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZSB0aW1lIGV4dGVuc2lvbnMpLCAoaWlpKSBpbiBhbnkgY3VycmVudCBvciBmdXR1cmUgbWVkaXVtIGFuZCBmb3IgYW55IG51bWJlciBvZiBjb3BpZXMsIGFuZCAoaXYpIGZvciBhbnkgcHVycG9zZSB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nIG9yIHByb21vdGlvbmFsIHB1cnBvc2VzICh0aGUgIkxpY2Vuc2UiKS4gVGhlIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBDQzAgd2FzIGFwcGxpZWQgYnkgQWZmaXJtZXIgdG8gdGhlIFdvcmsuIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgTGljZW5zZSBmb3IgYW55IHJlYXNvbiBiZSBqdWRnZWQgbGVnYWxseSBpbnZhbGlkIG9yIGluZWZmZWN0aXZlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBzdWNoIHBhcnRpYWwgaW52YWxpZGl0eSBvciBpbmVmZmVjdGl2ZW5lc3Mgc2hhbGwgbm90IGludmFsaWRhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgTGljZW5zZSwgYW5kIGluIHN1Y2ggY2FzZSBBZmZpcm1lciBoZXJlYnkgYWZmaXJtcyB0aGF0IGhlIG9yIHNoZSB3aWxsIG5vdCAoaSkgZXhlcmNpc2UgYW55IG9mIGhpcyBvciBoZXIgcmVtYWluaW5nIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgb3IgKGlpKSBhc3NlcnQgYW55IGFzc29jaWF0ZWQgY2xhaW1zIGFuZCBjYXVzZXMgb2YgYWN0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgaW4gZWl0aGVyIGNhc2UgY29udHJhcnkgdG8gQWZmaXJtZXJgcyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLgorCis0LiBMaW1pdGF0aW9ucyBhbmQgRGlzY2xhaW1lcnMuCisKK05vIHRyYWRlbWFyayBvciBwYXRlbnQgcmlnaHRzIGhlbGQgYnkgQWZmaXJtZXIgYXJlIHdhaXZlZCwgYWJhbmRvbmVkLCBzdXJyZW5kZXJlZCwgbGljZW5zZWQgb3Igb3RoZXJ3aXNlIGFmZmVjdGVkIGJ5IHRoaXMgZG9jdW1lbnQuCitBZmZpcm1lciBvZmZlcnMgdGhlIFdvcmsgYXMtaXMgYW5kIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBvciB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGV4cHJlc3MsIGltcGxpZWQsIHN0YXR1dG9yeSBvciBvdGhlcndpc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gd2FycmFudGllcyBvZiB0aXRsZSwgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgbm9uIGluZnJpbmdlbWVudCwgb3IgdGhlIGFic2VuY2Ugb2YgbGF0ZW50IG9yIG90aGVyIGRlZmVjdHMsIGFjY3VyYWN5LCBvciB0aGUgcHJlc2VudCBvciBhYnNlbmNlIG9mIGVycm9ycywgd2hldGhlciBvciBub3QgZGlzY292ZXJhYmxlLCBhbGwgdG8gdGhlIGdyZWF0ZXN0IGV4dGVudCBwZXJtaXNzaWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK0FmZmlybWVyIGRpc2NsYWltcyByZXNwb25zaWJpbGl0eSBmb3IgY2xlYXJpbmcgcmlnaHRzIG9mIG90aGVyIHBlcnNvbnMgdGhhdCBtYXkgYXBwbHkgdG8gdGhlIFdvcmsgb3IgYW55IHVzZSB0aGVyZW9mLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwZXJzb25gcyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluIHRoZSBXb3JrLiBGdXJ0aGVyLCBBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIG9idGFpbmluZyBhbnkgbmVjZXNzYXJ5IGNvbnNlbnRzLCBwZXJtaXNzaW9ucyBvciBvdGhlciByaWdodHMgcmVxdWlyZWQgZm9yIGFueSB1c2Ugb2YgdGhlIFdvcmsuCitBZmZpcm1lciB1bmRlcnN0YW5kcyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIGRvY3VtZW50IGFuZCBoYXMgbm8gZHV0eSBvciBvYmxpZ2F0aW9uIHdpdGggcmVzcGVjdCB0byB0aGlzIENDMCBvciB1c2Ugb2YgdGhlIFdvcmsuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0RETC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQxOThlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NEREwtMS4wCkBAIC0wLDAgKzEsMTMxIEBACisKK0NPTU1PTiBERVZFTE9QTUVOVCBBTkQgRElTVFJJQlVUSU9OIExJQ0VOU0UgKENEREwpCitWZXJzaW9uIDEuMAorMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gJiM4MjIwO0NvbnRyaWJ1dG9yJiM4MjIxOyBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAmIzgyMjA7Q29udHJpYnV0b3IgVmVyc2lvbiYjODIyMTsgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IgKGlmIGFueSksIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAmIzgyMjA7Q292ZXJlZCBTb2Z0d2FyZSYjODIyMTsgbWVhbnMgKGEpIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKGIpIE1vZGlmaWNhdGlvbnMsIG9yIChjKSB0aGUgY29tYmluYXRpb24gb2YgZmlsZXMgY29udGFpbmluZyBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIGZpbGVzIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICYjODIyMDtFeGVjdXRhYmxlJiM4MjIxOyBtZWFucyB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjUuICYjODIyMDtJbml0aWFsIERldmVsb3BlciYjODIyMTsgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgZmlyc3QgbWFrZXMgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS42LiAmIzgyMjA7TGFyZ2VyIFdvcmsmIzgyMjE7IG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjcuICYjODIyMDtMaWNlbnNlJiM4MjIxOyBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguICYjODIyMDtMaWNlbnNhYmxlJiM4MjIxOyBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworMS45LiAmIzgyMjA7TW9kaWZpY2F0aW9ucyYjODIyMTsgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisKK0EuIEFueSBmaWxlIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uczsKKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbjsgb3IKKworQy4gQW55IG5ldyBmaWxlIHRoYXQgaXMgY29udHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuMTAuICYjODIyMDtPcmlnaW5hbCBTb2Z0d2FyZSYjODIyMTsgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB0aGF0IGlzIG9yaWdpbmFsbHkgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjExLiAmIzgyMjA7UGF0ZW50IENsYWltcyYjODIyMTsgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTIuICYjODIyMDtTb3VyY2UgQ29kZSYjODIyMTsgbWVhbnMgKGEpIHRoZSBjb21tb24gZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIGluIHdoaWNoIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgYW5kIChiKSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4gb3Igd2l0aCBzdWNoIGNvZGUuCisKKzEuMTMuICYjODIyMDtZb3UmIzgyMjE7IChvciAmIzgyMjA7WW91ciYjODIyMTspIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgJiM4MjIwO1lvdSYjODIyMTsgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICYjODIyMDtjb250cm9sJiM4MjIxOyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gTGljZW5zZSBHcmFudHMuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgb3Igb3RoZXJ3aXNlIG1ha2VzIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK0NvbmRpdGlvbmVkIHVwb24gWW91ciBjb21wbGlhbmNlIHdpdGggU2VjdGlvbiAzLjEgYmVsb3cgYW5kIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBTb2Z0d2FyZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgKDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgZGlzdHJpYnV0ZXMgb3Igb3RoZXJ3aXNlIG1ha2VzIHRoZSBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiwgb3IgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yICgzKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCitBbnkgQ292ZXJlZCBTb2Z0d2FyZSB0aGF0IFlvdSBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZSBpbiBFeGVjdXRhYmxlIGZvcm0gbXVzdCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kIHRoYXQgU291cmNlIENvZGUgZm9ybSBtdXN0IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUuIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIG9mIGFueSBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIGFzIHRvIGhvdyB0aGV5IGNhbiBvYnRhaW4gc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCiszLjIuIE1vZGlmaWNhdGlvbnMuCisKK1RoZSBNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IHJlcHJlc2VudCB0aGF0IFlvdSBiZWxpZXZlIFlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgWW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgWW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuMy4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBpbiBlYWNoIG9mIFlvdXIgTW9kaWZpY2F0aW9ucyB0aGF0IGlkZW50aWZpZXMgWW91IGFzIHRoZSBDb250cmlidXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiBZb3UgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIENvdmVyZWQgU29mdHdhcmUsIG9yIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBvciBhbnkgZGVzY3JpcHRpdmUgdGV4dCBnaXZpbmcgYXR0cmlidXRpb24gdG8gYW55IENvbnRyaWJ1dG9yIG9yIHRoZSBJbml0aWFsIERldmVsb3Blci4KKworMy40LiBBcHBsaWNhdGlvbiBvZiBBZGRpdGlvbmFsIFRlcm1zLgorCitZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJiM4MjE3OyByaWdodHMgaGVyZXVuZGVyLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBTb2Z0d2FyZS4gSG93ZXZlciwgeW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjUuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBmb3JtIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCYjODIxNztzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgZm9ybSBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCis0LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworNC4xLiBOZXcgVmVyc2lvbnMuCisKK1N1biBNaWNyb3N5c3RlbXMsIEluYy4gaXMgdGhlIGluaXRpYWwgbGljZW5zZSBzdGV3YXJkIGFuZCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlIHN0ZXdhcmQgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhpcyBMaWNlbnNlLgorCis0LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBJZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW5jbHVkZXMgYSBub3RpY2UgaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcgZGlzdHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtdXN0IGRpc3RyaWJ1dGUgYW5kIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gT3RoZXJ3aXNlLCBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBsaWNlbnNlIHN0ZXdhcmQuCisKKzQuMy4gTW9kaWZpZWQgVmVyc2lvbnMuCisKK1doZW4gWW91IGFyZSBhbiBJbml0aWFsIERldmVsb3BlciBhbmQgWW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGxpY2Vuc2UgZm9yIFlvdXIgT3JpZ2luYWwgU29mdHdhcmUsIFlvdSBtYXkgY3JlYXRlIGFuZCB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiBZb3U6IChhKSByZW5hbWUgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZSBhbnkgcmVmZXJlbmNlcyB0byB0aGUgbmFtZSBvZiB0aGUgbGljZW5zZSBzdGV3YXJkIChleGNlcHQgdG8gbm90ZSB0aGF0IHRoZSBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpOyBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLgorCis1LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAmIzgyMjA7QVMgSVMmIzgyMjE7IEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis2LiBURVJNSU5BVElPTi4KKworNi4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis2LjIuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBhc3NlcnQgc3VjaCBjbGFpbSBpcyByZWZlcnJlZCB0byBhcyAmIzgyMjA7UGFydGljaXBhbnQmIzgyMjE7KSBhbGxlZ2luZyB0aGF0IHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSAobWVhbmluZyB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiB3aGVyZSB0aGUgUGFydGljaXBhbnQgaXMgYSBDb250cmlidXRvciBvciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIHRoZSBJbml0aWFsIERldmVsb3BlcikgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50LCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgKGlmIHRoZSBJbml0aWFsIERldmVsb3BlciBpcyBub3QgdGhlIFBhcnRpY2lwYW50KSBhbmQgYWxsIENvbnRyaWJ1dG9ycyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSBhbmQgYXV0b21hdGljYWxseSBhdCB0aGUgZXhwaXJhdGlvbiBvZiBzdWNoIDYwIGRheSBub3RpY2UgcGVyaW9kLCB1bmxlc3MgaWYgd2l0aGluIHN1Y2ggNjAgZGF5IHBlcmlvZCBZb3Ugd2l0aGRyYXcgWW91ciBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudCBlaXRoZXIgdW5pbGF0ZXJhbGx5IG9yIHB1cnN1YW50IHRvIGEgd3JpdHRlbiBhZ3JlZW1lbnQgd2l0aCBQYXJ0aWNpcGFudC4KKworNi4zLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgNi4xIG9yIDYuMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2VzIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiAoZXhjbHVkaW5nIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IGJ5IGFueSBkaXN0cmlidXRvcikgc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworNy4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIFNPRlRXQVJFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1QgUFJPRklUUywgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJiM4MjE3O1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworOC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworVGhlIENvdmVyZWQgU29mdHdhcmUgaXMgYSAmIzgyMjA7Y29tbWVyY2lhbCBpdGVtLCYjODIyMTsgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICYjODIyMDtjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlJiM4MjIxOyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgYXQgNDggQy5GLlIuICYjMTY3OyAyNTIuMjI3LTcwMTQoYSkoMSkpIGFuZCAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uJiM4MjIxOyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLiBUaGlzIFUuUy4gR292ZXJubWVudCBSaWdodHMgY2xhdXNlIGlzIGluIGxpZXUgb2YsIGFuZCBzdXBlcnNlZGVzLCBhbnkgb3RoZXIgRkFSLCBERkFSLCBvciBvdGhlciBjbGF1c2Ugb3IgcHJvdmlzaW9uIHRoYXQgYWRkcmVzc2VzIEdvdmVybm1lbnQgcmlnaHRzIGluIGNvbXB1dGVyIHNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBqdXJpc2RpY3Rpb24gc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgc3VjaCBqdXJpc2RpY3Rpb24mIzgyMTc7cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gQW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGxvY2F0ZWQgaW4gdGhlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJiM4MjE3OyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuIFlvdSBhZ3JlZSB0aGF0IFlvdSBhbG9uZSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVW5pdGVkIFN0YXRlcyBleHBvcnQgYWRtaW5pc3RyYXRpb24gcmVndWxhdGlvbnMgKGFuZCB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgcmVndWxhdGlvbiBvZiBhbnkgb3RoZXIgY291bnRyaWVzKSB3aGVuIFlvdSB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBDb3ZlcmVkIFNvZnR3YXJlLgorCisxMC4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DRUNJTEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMxNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTEuMApAQCAtMCwwICsxLDI0MiBAQAorCitDT05UUkFUIERFIExJQ0VOQ0UgREUgTE9HSUNJRUwgTElCUkUgQ2VDSUxMCisKK0F2ZXJ0aXNzZW1lbnQKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgaXNzdWUgZCYjODIxNzt1bmUgY29uY2VydGF0aW9uIGVudHJlIHNlcyBhdXRldXJzIGFmaW4gcXVlIGxlIHJlc3BlY3QgZGUgZGV1eCBncmFuZHMgcHJpbmNpcGVzIHByJiMyMzM7c2lkZSAmIzIyNDsgc2EgciYjMjMzO2RhY3Rpb246CisKK2QmIzgyMTc7dW5lIHBhcnQsIHNhIGNvbmZvcm1pdCYjMjMzOyBhdSBkcm9pdCBmcmFuJiMyMzE7YWlzLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1JiM4MjE3O2lsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorZCYjODIxNzthdXRyZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbCYjODIxNztFbmVyZ2llIEF0b21pcXVlICYjODIxMTsgQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIGNhcmFjdCYjMjMyO3JlIHNjaWVudGlmaXF1ZSB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMxLTMzIHJ1ZSBkZSBsYSBGJiMyMzM7ZCYjMjMzO3JhdGlvbiwgNzU3NTIgUEFSSVMgY2VkZXggMTUuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlICYjODIxMTsgQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAmIzgyMTE7IElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQUkVBTUJVTEUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBkdSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UgZGFucyBsZSBjYWRyZSBkYHVuIG1vZCYjMjMyO2xlIGRlIGRpZmZ1c2lvbiAmIzE3MTtvcGVuIHNvdXJjZSYjMTg3Oy4KKworTGBleGVyY2ljZSBkZSBjZXMgbGliZXJ0JiMyMzM7cyBlc3QgYXNzb3J0aSBkZSBjZXJ0YWlucyBkZXZvaXJzICYjMjI0OyBsYSBjaGFyZ2UgZGVzIHV0aWxpc2F0ZXVycyBhZmluIGRlIHByJiMyMzM7c2VydmVyIGNlIHN0YXR1dCBhdSBjb3VycyBkZXMgcmVkaXN0cmlidXRpb25zIHVsdCYjMjMzO3JpZXVyZXMuCisKK0wmIzgyMTc7YWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZW4gZCYjMjMzO2NvdWxlbnQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG4mIzgyMTc7b2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXUmIzgyMTc7dW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbCYjODIxNzthdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXUmIzgyMTc7dW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsJiM4MjE3O2F0dGVudGlvbiBkZSBsJiM4MjE3O3V0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGwmIzgyMTc7dXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGwmIzgyMTc7dXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgZXQgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbCYjODIxNzthZCYjMjMzO3F1YXRpb24gZHUgTG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldCBvdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lIGNvbmRpdGlvbnMgZGUgcyYjMjMzO2N1cml0JiMyMzM7LiBDZSBjb250cmF0IHBldXQgJiMyMzQ7dHJlIHJlcHJvZHVpdCBldCBkaWZmdXMmIzIzMzsgbGlicmVtZW50LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBsZSBjb25zZXJ2ZXIgZW4gbCYjODIxNzsmIzIzMzt0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy4KKworQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgcyYjODIxNzthcHBsaXF1ZXIgJiMyMjQ7IHRvdXQgbG9naWNpZWwgZG9udCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO2NpZGUgZGUgc291bWV0dHJlIGwmIzgyMTc7ZXhwbG9pdGF0aW9uIGF1eCBkaXNwb3NpdGlvbnMgcXUmIzgyMTc7aWwgY29udGllbnQuCisKK0FydGljbGUgMWVyIC0gREVGSU5JVElPTlMKKworRGFucyBjZSBjb250cmF0LCBsZXMgdGVybWVzIHN1aXZhbnRzLCBsb3JzcXUmIzgyMTc7aWxzIHNlcm9udCAmIzIzMztjcml0cyBhdmVjIHVuZSBsZXR0cmUgY2FwaXRhbGUsIGF1cm9udCBsYSBzaWduaWZpY2F0aW9uIHN1aXZhbnRlOgorCitDb250cmF0OiBkJiMyMzM7c2lnbmUgbGUgcHImIzIzMztzZW50IGNvbnRyYXQgZGUgbGljZW5jZSwgc2VzICYjMjMzO3ZlbnR1ZWxsZXMgdmVyc2lvbnMgcG9zdCYjMjMzO3JpZXVyZXMgZXQgYW5uZXhlcy4KKworTG9naWNpZWw6IGQmIzIzMztzaWduZSBsZSBsb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgT2JqZXQgZXQvb3UgZGUgQ29kZSBTb3VyY2UgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGwmIzgyMTc7YWNjZXB0YXRpb24gZHUgQ29udHJhdCBwYXIgbGUgTGljZW5jaSYjMjMzOy4KKworTG9naWNpZWwgSW5pdGlhbDogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBTb3VyY2UgZXQgZGUgQ29kZSBPYmpldCBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGV1ciBwcmVtaSYjMjMyO3JlIGRpZmZ1c2lvbiBzb3VzIGxlcyB0ZXJtZXMgZHUgQ29udHJhdC4KKworTG9naWNpZWwgTW9kaWZpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IHBhciBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGwmIzgyMTc7ZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbCYjODIxNzthY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmUgOiBkJiMyMzM7c2lnbmUgbGUgZCYjMjMzO3RlbnRldXIgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjODIxNzthdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzsocyk6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXIocykgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGQmIzgyMTc7YXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uczogZCYjMjMzO3NpZ25lIGwmIzgyMTc7ZW5zZW1ibGUgZGVzIG1vZGlmaWNhdGlvbnMsIGNvcnJlY3Rpb25zLCB0cmFkdWN0aW9ucywgYWRhcHRhdGlvbnMgZXQvb3Ugbm91dmVsbGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGludCYjMjMzO2dyJiMyMzM7ZXMgZGFucyBsZSBMb2dpY2llbCBwYXIgdG91dCBDb250cmlidXRldXIsIGFpbnNpIHF1ZSBsZXMgTW9kdWxlcyBTdGF0aXF1ZXMuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWksIHVuZSBmb2lzIGNvbXBpbCYjMjMzOyBzb3VzIGZvcm1lIGV4JiMyMzM7Y3V0YWJsZSwgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRHluYW1pcXVlOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUsIGNyJiMyMzM7JiMyMzM7IHBhciBsZSBDb250cmlidXRldXIsIGluZCYjMjMzO3BlbmRhbnQgZHUgTG9naWNpZWwsIHRlbCBxdWUgY2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIHNvbnQgc291cyBmb3JtZSBkZSBkZXV4IGV4JiMyMzM7Y3V0YWJsZXMgaW5kJiMyMzM7cGVuZGFudHMgcXVpIHMmIzgyMTc7ZXgmIzIzMztjdXRlbnQgZGFucyB1biBlc3BhY2UgZCYjODIxNzthZHJlc3NhZ2UgaW5kJiMyMzM7cGVuZGFudCwgbCYjODIxNzt1biBhcHBlbGFudCBsJiM4MjE3O2F1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgU3RhdGlxdWU6IGQmIzIzMztzaWduZSB0b3V0IE1vZHVsZSBjciYjMjMzOyYjMjMzOyBwYXIgbGUgQ29udHJpYnV0ZXVyIGV0IGxpJiMyMzM7IGF1IExvZ2ljaWVsIHBhciB1biBsaWVuIHN0YXRpcXVlIHJlbmRhbnQgbGV1ciBjb2RlIG9iamV0IGQmIzIzMztwZW5kYW50IGxgdW4gZGUgbGBhdXRyZS4gQ2UgTW9kdWxlIGV0IGxlIExvZ2ljaWVsIGF1cXVlbCBpbCBlc3QgbGkmIzIzMzssIHNvbnQgcmVncm91cCYjMjMzO3MgZW4gdW4gc2V1bCBleCYjMjMzO2N1dGFibGUuCisKK1BhcnRpZXM6IGQmIzIzMztzaWduZSBjb2xsZWN0aXZlbWVudCBsZSBMaWNlbmNpJiMyMzM7IGV0IGxlIENvbmMmIzIzMztkYW50LgorCitDZXMgdGVybWVzIHMmIzgyMTc7ZW50ZW5kZW50IGF1IHNpbmd1bGllciBjb21tZSBhdSBwbHVyaWVsLgorCitBcnRpY2xlIDIgLSBPQkpFVAorCitMZSBDb250cmF0IGEgcG91ciBvYmpldCBsYSBjb25jZXNzaW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudCBhdSBMaWNlbmNpJiMyMzM7IGQmIzgyMTc7dW5lIExpY2VuY2Ugbm9uIGV4Y2x1c2l2ZSwgdHJhbnNmJiMyMzM7cmFibGUgZXQgbW9uZGlhbGUgZHUgTG9naWNpZWwgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBjaS1hcHImIzIzMjtzICYjMjI0OyBsYGFydGljbGUgNSBwb3VyIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBvcnRhbnQgc3VyIGNlIExvZ2ljaWVsLgorCitBcnRpY2xlIDMgLSBBQ0NFUFRBVElPTgorCiszLjEuIEwmIzgyMTc7YWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZCYjODIxNzt1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkJiM4MjE3O3VuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbCYjODIxNzt1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yLiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlcy4KKworQXJ0aWNsZSA0IC0gRU5UUkVFIEVOIFZJR1VFVVIgRVQgRFVSRUUKKworNC4xLkVOVFJFRSBFTiBWSUdVRVVSCisKK0xlIENvbnRyYXQgZW50cmUgZW4gdmlndWV1ciAmIzIyNDsgbGEgZGF0ZSBkZSBzb24gYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgdGVsbGUgcXVlIGQmIzIzMztmaW5pZSBlbiAzLjEuCisKKzQuMi4gRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIGxlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7ICYjMjI0OyB0aXRyZSBncmFjaWV1eCBsZXMgZHJvaXRzIGQmIzgyMTc7ZXhwbG9pdGF0aW9uIGR1IG91IGRlcyBicmV2ZXRzIHF1JiM4MjE3O2lsIGQmIzIzMzt0aWVudCBzdXIgdG91dCBvdSBwYXJ0aWUgZGVzIGludmVudGlvbnMgaW1wbCYjMjMzO21lbnQmIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsLgorCis1LjEuIERST0lUUyBEJiM4MjE3O1VUSUxJU0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyIGxlIExvZ2ljaWVsLCBzYW5zIHJlc3RyaWN0aW9uIHF1YW50IGF1eCBkb21haW5lcyBkJiM4MjE3O2FwcGxpY2F0aW9uLCAmIzIzMzt0YW50IGNpLWFwciYjMjMyO3MgcHImIzIzMztjaXMmIzIzMzsgcXVlIGNlbGEgY29tcG9ydGU6CisKK2xhIHJlcHJvZHVjdGlvbiBwZXJtYW5lbnRlIG91IHByb3Zpc29pcmUgZHUgTG9naWNpZWwgZW4gdG91dCBvdSBwYXJ0aWUgcGFyIHRvdXQgbW95ZW4gZXQgc291cyB0b3V0ZSBmb3JtZS4KKworbGUgY2hhcmdlbWVudCwgbCYjODIxNzthZmZpY2hhZ2UsIGwmIzgyMTc7ZXgmIzIzMztjdXRpb24sIG91IGxlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHN1ciB0b3V0IHN1cHBvcnQuCisKK2xhIHBvc3NpYmlsaXQmIzIzMzsgZCYjODIxNztlbiBvYnNlcnZlciwgZCYjODIxNztlbiAmIzIzMzt0dWRpZXIsIG91IGQmIzgyMTc7ZW4gdGVzdGVyIGxlIGZvbmN0aW9ubmVtZW50IGFmaW4gZGUgZCYjMjMzO3Rlcm1pbmVyIGxlcyBpZCYjMjMzO2VzIGV0IHByaW5jaXBlcyBxdWkgc29udCAmIzIyNDsgbGEgYmFzZSBkZSBuJiM4MjE3O2ltcG9ydGUgcXVlbCAmIzIzMztsJiMyMzM7bWVudCBkZSBjZSBMb2dpY2llbDsgZXQgY2VjaSwgbG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGVmZmVjdHVlIHRvdXRlIG9wJiMyMzM7cmF0aW9uIGRlIGNoYXJnZW1lbnQsIGQmIzgyMTc7YWZmaWNoYWdlLCBkJiM4MjE3O2V4JiMyMzM7Y3V0aW9uLCBkZSB0cmFuc21pc3Npb24gb3UgZGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgcXUmIzgyMTc7aWwgZXN0IGVuIGRyb2l0IGQmIzgyMTc7ZWZmZWN0dWVyIGVuIHZlcnR1IGR1IENvbnRyYXQuCisKKzUuMi4gRFJPSVQgRCYjODIxNztBUFBPUlRFUiBERVMgQ09OVFJJQlVUSU9OUworCitMZSBkcm9pdCBkJiM4MjE3O2FwcG9ydGVyIGRlcyBDb250cmlidXRpb25zIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkJiM4MjE3O2FkYXB0ZXIsIGQmIzgyMTc7YXJyYW5nZXIgb3UgZCYjODIxNzthcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gZHUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBMb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXUmIzgyMTc7YXV0ZXVyIGRlIGNldHRlIENvbnRyaWJ1dGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMy4gRFJPSVRTIERFIERJU1RSSUJVVElPTiBFVCBERSBESUZGVVNJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGV0IGRlIGRpZmZ1c2lvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBkZXMgY29waWVzIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCAmIzIyNDsgZGVzIHRpZXJzIGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworNS4zLjEuIFJFRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIFNBTlMgTU9ESUZJQ0FUSU9OCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSByZWRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkJiM4MjE3O3VuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZCYjODIxNzt1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0JiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMyO3MsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGQmIzgyMTc7YWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMi4gUkVESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc29udCBhbG9ycyBzb3VtaXNlcyAmIzIyNDsgbCYjODIxNztpbnQmIzIzMztncmFsaXQmIzIzMzsgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyByZWRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIHJlZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2QmIzgyMTc7dW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkJiM4MjE3O3VuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBjb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgQ29kZSBPYmpldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkJiM4MjE3O2FjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZCYjODIxNzthY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkJiM4MjE3O2FjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjMuIFJFRElTVFJJQlVUSU9OIERFUyBNT0RVTEVTIERZTkFNSVFVRVMKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRHluYW1pcXVlIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgcyYjODIxNzthcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIER5bmFtaXF1ZSwgcXVpIHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGRpZmYmIzIzMztyZW50LgorCis1LjMuNC4gQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgR1BMCisKK0RhbnMgbGUgY2FzIG8mIzI0OTsgbGUgTG9naWNpZWwsIE1vZGlmaSYjMjMzOyBvdSBub24sIGVzdCBpbnQmIzIzMztnciYjMjMzOyAmIzIyNDsgdW4gY29kZSBzb3VtaXMgYXV4IGRpc3Bvc2l0aW9ucyBkZSBsYSBsaWNlbmNlIEdQTCwgbGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgcmVkaXN0cmlidWVyIGwmIzgyMTc7ZW5zZW1ibGUgc291cyBsYSBsaWNlbmNlIEdQTC4KKworRGFucyBsZSBjYXMgbyYjMjQ5OyBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgaW50JiMyMzI7Z3JlIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGUgbGEgbGljZW5jZSBHUEwsIGxlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHJlZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc291cyBsYSBsaWNlbmNlIEdQTC4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMS4gU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uICYjMzM5O3V2cmUgZXQgbnVsIGF1dHJlIG4mIzgyMTc7YSBsYSBmYWN1bHQmIzIzMzsgZGUgbW9kaWZpZXIgbGVzIGNvbmRpdGlvbnMgZGUgZGlmZnVzaW9uIGRlIGNlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xlIFRpdHVsYWlyZSBzYGVuZ2FnZSAmIzIyNDsgbWFpbnRlbmlyIGxhIGRpZmZ1c2lvbiBkdSBMb2dpY2llbCBpbml0aWFsIHNvdXMgbGVzIGNvbmRpdGlvbnMgZHUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMi4gU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIENvbnRyaWJ1dGlvbnMgc29udCBhdHRhY2gmIzIzMztzIGF1IHRpdHVsYWlyZSBkZSBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztzaWduJiMyMzM7IHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMy4gU1VSIExFUyBNT0RVTEVTIERZTkFNSVFVRVMKKworTGUgTGljZW5jaSYjMjMzOyBheWFudCBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBEeW5hbWlxdWUgZXN0IHRpdHVsYWlyZSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGNlIE1vZHVsZSBEeW5hbWlxdWUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24uCisKKzYuNC4gRElTUE9TSVRJT05TIENPTU1VTkVTCisKKzYuNC4xLiBMZSBMaWNlbmNpJiMyMzM7IHMmIzgyMTc7ZW5nYWdlIGV4cHJlc3MmIzIzMzttZW50OgorCismIzIyNDsgbmUgcGFzIHN1cHByaW1lciBvdSBtb2RpZmllciBkZSBxdWVscXVlIG1hbmkmIzIzMjtyZSBxdWUgY2Ugc29pdCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBhcHBvcyYjMjMzO2VzIHN1ciBsZSBMb2dpY2llbDsKKworJiMyMjQ7IHJlcHJvZHVpcmUgJiMyMjQ7IGwmIzgyMTc7aWRlbnRpcXVlIGxlc2RpdGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgc3VyIGxlcyBjb3BpZXMgZHUgTG9naWNpZWwuCisKKzYuNC4yLiBMZSBMaWNlbmNpJiMyMzM7IHMmIzgyMTc7ZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsJiM4MjE3OyYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMS4gTGUgQ29udHJhdCBuJiM4MjE3O29ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZCYjODIxNzthc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkJiM4MjE3O3VuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkJiM4MjE3O3VuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuJiM4MjE3O2VuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIuIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuJiM4MjE3O2VuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1JiM4MjE3O2lsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGwmIzgyMTc7b2JqZXQgZCYjODIxNzt1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xLiBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGwmIzgyMTc7YXJ0aWNsZSA4LjIsIHNpIGxlIENvbmMmIzIzMztkYW50IG4mIzgyMTc7ZXgmIzIzMztjdXRlIHBhcyB0b3V0IG91IHBhcnRpZSBkZXMgb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXUmIzgyMTc7aWwgc3ViaXQgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIuIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OihpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsJiM4MjE3O2luZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbCYjODIxNzt1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGxvcnNxdSYjODIxNztpbCBzJiM4MjE3O2FnaXQgZCYjODIxNzt1biBwcm9mZXNzaW9ubmVsIHV0aWxpc2FudCBsZSBMb2dpY2llbCAmIzIyNDsgZGVzIGZpbnMgcHJvZmVzc2lvbm5lbGxlcyBldCAoaWlpKSBkZXMgZG9tbWFnZXMgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGwmIzgyMTc7dXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbC4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZCYjODIxNztleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbiYjODIxNztvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMS4gTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbCYjODIxNzsmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGQmIzgyMTc7ZW4gdGVzdGVyIGV0IGQmIzgyMTc7ZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGwmIzgyMTc7ZXhpc3RlbmNlIGQmIzgyMTc7JiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMJiM4MjE3O2F0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsJiM4MjE3O3V0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsJiM4MjE3O2FkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXUmIzgyMTc7aWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMi4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMy4gTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAmIzE3MTtlbiBsYCYjMjMzO3RhdCYjMTg3OyBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGwmIzgyMTc7YXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXUmIzgyMTc7aWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdSYjODIxNztpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsJiM4MjE3OyYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdSYjODIxNztpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQuIExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGQmIzgyMTc7dW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGwmIzgyMTc7dXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkJiM4MjE3O3VuIHByb3RvY29sZSBkJiM4MjE3O2FjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbCYjODIxNzt1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG4mIzgyMTc7ZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGwmIzgyMTc7ZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbCYjODIxNztleGlzdGVuY2UgZCYjODIxNzt1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMS4gRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIuIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuJiM4MjE3O2VzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXUmIzgyMTc7aWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdSYjODIxNztlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEuIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZCYjODIxNzt1biByZXRhcmQgb3UgZCYjODIxNzt1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkJiM4MjE3O2V4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsJiM4MjE3O2ludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsJiM4MjE3OyYjMjMzO3RhdCBkZSBndWVycmUmIzgyMzA7CisKKzExLjIuIExlIGZhaXQsIHBhciBsJiM4MjE3O3VuZSBvdSBsJiM4MjE3O2F1dHJlIGRlcyBQYXJ0aWVzLCBkJiM4MjE3O29tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZCYjODIxNzt1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgcyYjODIxNztlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zLiBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGwmIzgyMTc7YWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuJiM4MjE3O2F1cmEgZCYjODIxNztlZmZldCAmIzIyNDsgbCYjODIxNzsmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkJiM4MjE3OyYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40LiBEYW5zIGwmIzgyMTc7aHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzJiM4MjE3O2F2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkJiM4MjE3O3VuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbCYjODIxNztlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41LiBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLiBFbiBjYXMgZGUgZGl2ZXJnZW5jZSBkJiM4MjE3O2ludGVycHImIzIzMzt0YXRpb24sIHNldWxlIGxhIHZlcnNpb24gZnJhbiYjMjMxO2Fpc2UgZmFpdCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xLiBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMi4gQWZpbiBkJiM4MjE3O2VuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMyO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zLiBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUsIHNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDUuMy40LgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMS4gTGUgQ29udHJhdCBlc3QgciYjMjMzO2dpIHBhciBsYSBsb2kgZnJhbiYjMjMxO2Fpc2UuIExlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGRlIHRlbnRlciBkZSByJiMyMzM7Z2xlciAmIzIyNDsgbCYjODIxNzthbWlhYmxlIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBxdWkgdmllbmRyYWllbnQgJiMyMjQ7IHNlIHByb2R1aXJlIHBhciBzdWl0ZSBvdSAmIzIyNDsgbCYjODIxNztvY2Nhc2lvbiBkdSBDb250cmF0LgorCisxMy4yLiBBIGQmIzIzMztmYXV0IGQmIzgyMTc7YWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGQmIzgyMTc7dW5lIHByb2MmIzIzMztkdXJlIGQmIzgyMTc7dXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZTogQ0VBLCBDOiBDTlJTLCBJOiBJTlJJQSwgTEw6IExvZ2ljaWVsIExpYnJlCisKKworVmVyc2lvbiAxIGR1IDIxLzA2LzIwMDQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JjMTRhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC0yLjAKQEAgLTAsMCArMSwyNDMgQEAKKworQ09OVFJBVCBERSBMSUNFTkNFIERFIExPR0lDSUVMIExJQlJFIENlQ0lMTAorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGRgdW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkYHVuZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLAorZGBhdXRyZSBwYXJ0LCBsYSBkJiMyMzM7c2lnbmF0aW9uIGRgdW4gZHJvaXQgYXBwbGljYWJsZSwgbGUgZHJvaXQgZnJhbiYjMjMxO2FpcywgYXVxdWVsIGVsbGUgZXN0IGNvbmZvcm1lLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1YGlsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwxIHNvbnQ6CisKK0NvbW1pc3NhcmlhdCAmIzIyNDsgbGBFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljIGRlIHJlY2hlcmNoZSAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlLCB0ZWNobmlxdWUgZXQgaW5kdXN0cmllbCwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDI1IHJ1ZSBMZWJsYW5jLCBpbW1ldWJsZSBMZSBQb25hbnQgRCwgNzUwMTUgUGFyaXMuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYuCisKK0luc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4gQXV0b21hdGlxdWUgLSBJTlJJQSwgJiMyMzM7dGFibGlzc2VtZW50IHB1YmxpYyAmIzIyNDsgY2FyYWN0JiMyMzI7cmUgc2NpZW50aWZpcXVlIGV0IHRlY2hub2xvZ2lxdWUsIGRvbnQgbGUgc2kmIzIzMjtnZSBlc3Qgc2l0dSYjMjMzOyBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQIDEwNSwgNzgxNTMgTGUgQ2hlc25heSBjZWRleC4KKworUHImIzIzMzthbWJ1bGUKKworQ2UgY29udHJhdCBlc3QgdW5lIGxpY2VuY2UgZGUgbG9naWNpZWwgbGlicmUgZG9udCBsYG9iamVjdGlmIGVzdCBkZSBjb25mJiMyMzM7cmVyIGF1eCB1dGlsaXNhdGV1cnMgbGEgbGliZXJ0JiMyMzM7IGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBkdSBsb2dpY2llbCByJiMyMzM7Z2kgcGFyIGNldHRlIGxpY2VuY2UgZGFucyBsZSBjYWRyZSBkYHVuIG1vZCYjMjMyO2xlIGRlIGRpZmZ1c2lvbiBlbiBsb2dpY2llbCBsaWJyZS4KKworTGBleGVyY2ljZSBkZSBjZXMgbGliZXJ0JiMyMzM7cyBlc3QgYXNzb3J0aSBkZSBjZXJ0YWlucyBkZXZvaXJzICYjMjI0OyBsYSBjaGFyZ2UgZGVzIHV0aWxpc2F0ZXVycyBhZmluIGRlIHByJiMyMzM7c2VydmVyIGNlIHN0YXR1dCBhdSBjb3VycyBkZXMgcmVkaXN0cmlidXRpb25zIHVsdCYjMjMzO3JpZXVyZXMuCisKK0xgYWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZW4gZCYjMjMzO2NvdWxlbnQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29kZSBTb3VyY2U6IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBpbnN0cnVjdGlvbnMgZXQgZGVzIGxpZ25lcyBkZSBwcm9ncmFtbWUgZHUgTG9naWNpZWwgZXQgYXVxdWVsIGxgYWNjJiMyMzI7cyBlc3QgbiYjMjMzO2Nlc3NhaXJlIGVuIHZ1ZSBkZSBtb2RpZmllciBsZSBMb2dpY2llbC4KKworQ29kZSBPYmpldDogZCYjMjMzO3NpZ25lIGxlcyBmaWNoaWVycyBiaW5haXJlcyBpc3N1cyBkZSBsYSBjb21waWxhdGlvbiBkdSBDb2RlIFNvdXJjZS4KKworVGl0dWxhaXJlOiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIGQmIzIzMzt0ZW50ZXVycyBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBkYGF1dGV1ciBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4KKworTGljZW5jaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyB1dGlsaXNhdGV1cnMgZHUgTG9naWNpZWwgYXlhbnQgYWNjZXB0JiMyMzM7IGxlIENvbnRyYXQuCisKK0NvbnRyaWJ1dGV1cjogZCYjMjMzO3NpZ25lIGxlIExpY2VuY2kmIzIzMzsgYXV0ZXVyIGRgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbi4KKworQ29uYyYjMjMzO2RhbnQ6IGQmIzIzMztzaWduZSBsZSBUaXR1bGFpcmUgb3UgdG91dGUgcGVyc29ubmUgcGh5c2lxdWUgb3UgbW9yYWxlIGRpc3RyaWJ1YW50IGxlIExvZ2ljaWVsIHNvdXMgbGUgQ29udHJhdC4KKworQ29udHJpYnV0aW9uOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIExvZ2ljaWVsIHBhciB0b3V0IENvbnRyaWJ1dGV1ciwgYWluc2kgcXVlIHRvdXQgTW9kdWxlIEludGVybmUuCisKK01vZHVsZTogZCYjMjMzO3NpZ25lIHVuIGVuc2VtYmxlIGRlIGZpY2hpZXJzIHNvdXJjZXMgeSBjb21wcmlzIGxldXIgZG9jdW1lbnRhdGlvbiBxdWkgcGVybWV0IGRlIHImIzIzMzthbGlzZXIgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIG91IHNlcnZpY2VzIHN1cHBsJiMyMzM7bWVudGFpcmVzICYjMjI0OyBjZXV4IGZvdXJuaXMgcGFyIGxlIExvZ2ljaWVsLgorCitNb2R1bGUgRXh0ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlLCBub24gZCYjMjMzO3JpdiYjMjMzOyBkdSBMb2dpY2llbCwgdGVsIHF1ZSBjZSBNb2R1bGUgZXQgbGUgTG9naWNpZWwgc2BleCYjMjMzO2N1dGVudCBkYW5zIGRlcyBlc3BhY2VzIGRgYWRyZXNzYWdlIGRpZmYmIzIzMztyZW50cywgbGB1biBhcHBlbGFudCBsYGF1dHJlIGF1IG1vbWVudCBkZSBsZXVyIGV4JiMyMzM7Y3V0aW9uLgorCitNb2R1bGUgSW50ZXJuZTogZCYjMjMzO3NpZ25lIHRvdXQgTW9kdWxlIGxpJiMyMzM7IGF1IExvZ2ljaWVsIGRlIHRlbGxlIHNvcnRlIHF1YGlscyBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgbGUgbSYjMjM0O21lIGVzcGFjZSBkYGFkcmVzc2FnZS4KKworR05VIEdQTDogZCYjMjMzO3NpZ25lIGxhIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRhbnMgc2EgdmVyc2lvbiAyIG91IHRvdXRlIHZlcnNpb24gdWx0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUgcHVibGkmIzIzMztlIHBhciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzYGVudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkYHVuZSBsaWNlbmNlIG5vbiBleGNsdXNpdmUsIGNlc3NpYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xIExgYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbGB1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yIFVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwgY29udGVuYW50IG5vdGFtbWVudCB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgYXV4IHNwJiMyMzM7Y2lmaWNpdCYjMjMzO3MgZHUgTG9naWNpZWwsICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCAmIzIyNDsgbGEgbGltaXRhdGlvbiAmIzIyNDsgdW4gdXNhZ2UgcGFyIGRlcyB1dGlsaXNhdGV1cnMgZXhwJiMyMzM7cmltZW50JiMyMzM7cyBhICYjMjMzO3QmIzIzMzsgbWlzICYjMjI0OyBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpJiMyMzM7IHByJiMyMzM7YWxhYmxlbWVudCAmIzIyNDsgc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgJiMyMjQ7IGxgYXJ0aWNsZSAzLjEgY2kgZGVzc3VzIGV0IGxlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgZW4gYXZvaXIgcHJpcyBjb25uYWlzc2FuY2UuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMSBFTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIgRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIHNpIGxlIENvbmMmIzIzMztkYW50IGQmIzIzMzt0aWVudCBvdSB2ZW5haXQgJiMyMjQ7IGQmIzIzMzt0ZW5pciB1biBvdSBwbHVzaWV1cnMgYnJldmV0cyBkYGludmVudGlvbiBwcm90JiMyMzM7Z2VhbnQgdG91dCBvdSBwYXJ0aWUgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGR1IExvZ2ljaWVsIG91IGRlIHNlcyBjb21wb3NhbnRzLCBpbCBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIG9wcG9zZXIgbGVzICYjMjMzO3ZlbnR1ZWxzIGRyb2l0cyBjb25mJiMyMzM7ciYjMjMzO3MgcGFyIGNlcyBicmV2ZXRzIGF1eCBMaWNlbmNpJiMyMzM7cyBzdWNjZXNzaWZzIHF1aSB1dGlsaXNlcmFpZW50LCBleHBsb2l0ZXJhaWVudCBvdSBtb2RpZmllcmFpZW50IGxlIExvZ2ljaWVsLiBFbiBjYXMgZGUgY2Vzc2lvbiBkZSBjZXMgYnJldmV0cywgbGUgQ29uYyYjMjMzO2RhbnQgc2BlbmdhZ2UgJiMyMjQ7IGZhaXJlIHJlcHJlbmRyZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFsaW4mIzIzMzthIGF1eCBjZXNzaW9ubmFpcmVzLgorCis1LjEgRFJPSVQgRGBVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZGBhcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGxgYWZmaWNoYWdlLCBsYGV4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGRgZW4gb2JzZXJ2ZXIsIGRgZW4gJiMyMzM7dHVkaWVyLCBvdSBkYGVuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbmBpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkYGFmZmljaGFnZSwgZGBleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1YGlsIGVzdCBlbiBkcm9pdCBkYGVmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIgRFJPSVQgRGBBUFBPUlRFUiBERVMgQ09OVFJJQlVUSU9OUworCitMZSBkcm9pdCBkYGFwcG9ydGVyIGRlcyBDb250cmlidXRpb25zIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXVgYXV0ZXVyIGRlIGNldHRlIENvbnRyaWJ1dGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMyBEUk9JVCBERSBESVNUUklCVVRJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGNvbXBvcnRlIG5vdGFtbWVudCBsZSBkcm9pdCBkZSBkaWZmdXNlciwgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkYGFjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IENvZGUgU291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgZW4gaW5kaXF1YW50IGxlcyBtb2RhbGl0JiMyMzM7cyBkYGFjYyYjMjMyO3MsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMiBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZXMgY29uZGl0aW9ucyBkZSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIHImIzIzMztzdWx0YW50IHNvbnQgYWxvcnMgc291bWlzZXMgJiMyMjQ7IGxgaW50JiMyMzM7Z3JhbGl0JiMyMzM7IGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHNvdXMgZm9ybWUgZGUgY29kZSBzb3VyY2Ugb3UgZGUgY29kZSBvYmpldCwgJiMyMjQ7IGNvbmRpdGlvbiBxdWUgY2V0dGUgZGlzdHJpYnV0aW9uIHJlc3BlY3RlIGxlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBkYW5zIGxldXIgdG90YWxpdCYjMjMzOyBldCBzb2l0IGFjY29tcGFnbiYjMjMzO2U6CisKK2RgdW4gZXhlbXBsYWlyZSBkdSBDb250cmF0LAorCitkYHVuIGF2ZXJ0aXNzZW1lbnQgcmVsYXRpZiAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgZGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCB0ZWxsZSBxdWUgcHImIzIzMzt2dWUgYXV4IGFydGljbGVzIDggZXQgOSwKKworZXQgcXVlLCBkYW5zIGxlIGNhcyBvJiMyNDk7IHNldWwgbGUgY29kZSBvYmpldCBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgYXV4IGZ1dHVycyBMaWNlbmNpJiMyMzM7cyBkYGFjYyYjMjMzO2RlciBmYWNpbGVtZW50IGF1IGNvZGUgc291cmNlIGNvbXBsZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVuIGluZGlxdWFudCBsZXMgbW9kYWxpdCYjMjMzO3MgZGBhY2MmIzIzMjtzLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IGNvZGUgc291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjMgRElTVFJJQlVUSU9OIERFUyBNT0RVTEVTIEVYVEVSTkVTCisKK0xvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgbGVzIGNvbmRpdGlvbnMgZHUgQ29udHJhdCBuZSBzYGFwcGxpcXVlbnQgcGFzICYjMjI0OyBjZSBNb2R1bGUgRXh0ZXJuZSwgcXVpIHBldXQgJiMyMzQ7dHJlIGRpc3RyaWJ1JiMyMzM7IHNvdXMgdW4gY29udHJhdCBkZSBsaWNlbmNlIGRpZmYmIzIzMztyZW50LgorCis1LjMuNCBDT01QQVRJQklMSVRFIEFWRUMgTEEgTElDRU5DRSBHTlUgR1BMCisKK0xlIExpY2VuY2kmIzIzMzsgcGV1dCBpbmNsdXJlIHVuIGNvZGUgc291bWlzIGF1eCBkaXNwb3NpdGlvbnMgZGB1bmUgZGVzIHZlcnNpb25zIGRlIGxhIGxpY2VuY2UgR05VIEdQTCBkYW5zIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24gZXQgZGlzdHJpYnVlciBsYGVuc2VtYmxlIHNvdXMgbGVzIGNvbmRpdGlvbnMgZGUgbGEgbSYjMjM0O21lIHZlcnNpb24gZGUgbGEgbGljZW5jZSBHTlUgR1BMLgorCitMZSBMaWNlbmNpJiMyMzM7IHBldXQgaW5jbHVyZSBsZSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uIGRhbnMgdW4gY29kZSBzb3VtaXMgYXV4IGRpc3Bvc2l0aW9ucyBkYHVuZSBkZXMgdmVyc2lvbnMgZGUgbGEgbGljZW5jZSBHTlUgR1BMIGV0IGRpc3RyaWJ1ZXIgbGBlbnNlbWJsZSBzb3VzIGxlcyBjb25kaXRpb25zIGRlIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGRlIGxhIGxpY2VuY2UgR05VIEdQTC4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMSBTVVIgTEUgTE9HSUNJRUwgSU5JVElBTAorCitMZSBUaXR1bGFpcmUgZXN0IGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gb2V1dnJlIGV0IG51bCBhdXRyZSBuYGEgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZSBsZSBMb2dpY2llbCBJbml0aWFsIHJlc3RlIGF1IG1vaW5zIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMiBTVVIgTEVTIENPTlRSSUJVVElPTlMKKworTGUgTGljZW5jaSYjMjMzOyBxdWkgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuZSBDb250cmlidXRpb24gZXN0IHRpdHVsYWlyZSBzdXIgY2VsbGUtY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlLgorCis2LjMgU1VSIExFUyBNT0RVTEVTIEVYVEVSTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1biBNb2R1bGUgRXh0ZXJuZSBlc3QgdGl0dWxhaXJlIHN1ciBjZWx1aS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUgZXQgcmVzdGUgbGlicmUgZHUgY2hvaXggZHUgY29udHJhdCByJiMyMzM7Z2lzc2FudCBzYSBkaWZmdXNpb24uCisKKzYuNCBESVNQT1NJVElPTlMgQ09NTVVORVMKKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsYGlkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub24uCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBwb3J0ZXIgYXR0ZWludGUsIGRpcmVjdGVtZW50IG91IGluZGlyZWN0ZW1lbnQsIGF1eCBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMgc3VyIGxlIExvZ2ljaWVsIGV0ICYjMjI0OyBwcmVuZHJlLCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQsICYjMjI0OyBsYCYjMjMzO2dhcmQgZGUgc29uIHBlcnNvbm5lbCB0b3V0ZXMgbGVzIG1lc3VyZXMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIGFzc3VyZXIgbGUgcmVzcGVjdCBkZXMgZGl0cyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBUaXR1bGFpcmUgZXQvb3UgZGVzIENvbnRyaWJ1dGV1cnMuCisKK0FydGljbGUgNyAtIFNFUlZJQ0VTIEFTU09DSUVTCisKKzcuMSBMZSBDb250cmF0IG5gb2JsaWdlIGVuIGF1Y3VuIGNhcyBsZSBDb25jJiMyMzM7ZGFudCAmIzIyNDsgbGEgciYjMjMzO2FsaXNhdGlvbiBkZSBwcmVzdGF0aW9ucyBkYGFzc2lzdGFuY2UgdGVjaG5pcXVlIG91IGRlIG1haW50ZW5hbmNlIGR1IExvZ2ljaWVsLgorCitDZXBlbmRhbnQgbGUgQ29uYyYjMjMzO2RhbnQgcmVzdGUgbGlicmUgZGUgcHJvcG9zZXIgY2UgdHlwZSBkZSBzZXJ2aWNlcy4gTGVzIHRlcm1lcyBldCBjb25kaXRpb25zIGRgdW5lIHRlbGxlIGFzc2lzdGFuY2UgdGVjaG5pcXVlIGV0L291IGRgdW5lIHRlbGxlIG1haW50ZW5hbmNlIHNlcm9udCBhbG9ycyBkJiMyMzM7dGVybWluJiMyMzM7cyBkYW5zIHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOy4gQ2VzIGFjdGVzIGRlIG1haW50ZW5hbmNlIGV0L291IGFzc2lzdGFuY2UgdGVjaG5pcXVlIG5gZW5nYWdlcm9udCBxdWUgbGEgc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBxdWkgbGVzIHByb3Bvc2UuCisKKzcuMiBEZSBtJiMyMzQ7bWUsIHRvdXQgQ29uYyYjMjMzO2RhbnQgZXN0IGxpYnJlIGRlIHByb3Bvc2VyLCBzb3VzIHNhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzssICYjMjI0OyBzZXMgbGljZW5jaSYjMjMzO3MgdW5lIGdhcmFudGllLCBxdWkgbmBlbmdhZ2VyYSBxdWUgbHVpLCBsb3JzIGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsIGV0L291IGR1IExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBldCBjZSwgZGFucyBsZXMgY29uZGl0aW9ucyBxdWBpbCBzb3VoYWl0ZS4gQ2V0dGUgZ2FyYW50aWUgZXQgbGVzIG1vZGFsaXQmIzIzMztzIGZpbmFuY2kmIzIzMjtyZXMgZGUgc29uIGFwcGxpY2F0aW9uIGZlcm9udCBsYG9iamV0IGRgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7IGVudHJlIGxlIENvbmMmIzIzMztkYW50IGV0IGxlIExpY2VuY2kmIzIzMzsuCisKK0FydGljbGUgOCAtIFJFU1BPTlNBQklMSVRFCisKKzguMSBTb3VzIHImIzIzMztzZXJ2ZSBkZXMgZGlzcG9zaXRpb25zIGRlIGxgYXJ0aWNsZSA4LjIsIGxlIExpY2VuY2kmIzIzMzsgYSBsYSBmYWN1bHQmIzIzMzssIHNvdXMgciYjMjMzO3NlcnZlIGRlIHByb3V2ZXIgbGEgZmF1dGUgZHUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOywgZGUgc29sbGljaXRlciBsYSByJiMyMzM7cGFyYXRpb24gZHUgcHImIzIzMztqdWRpY2UgZGlyZWN0IHF1YGlsIHN1YmlyYWl0IGR1IGZhaXQgZHUgTG9naWNpZWwgZXQgZG9udCBpbCBhcHBvcnRlcmEgbGEgcHJldXZlLgorCis4LjIgTGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBDb25jJiMyMzM7ZGFudCBlc3QgbGltaXQmIzIzMztlIGF1eCBlbmdhZ2VtZW50cyBwcmlzIGVuIGFwcGxpY2F0aW9uIGR1IENvbnRyYXQgZXQgbmUgc2F1cmFpdCAmIzIzNDt0cmUgZW5nYWcmIzIzMztlIGVuIHJhaXNvbiBub3RhbW1lbnQ6IChpKSBkZXMgZG9tbWFnZXMgZHVzICYjMjI0OyBsYGluZXgmIzIzMztjdXRpb24sIHRvdGFsZSBvdSBwYXJ0aWVsbGUsIGRlIHNlcyBvYmxpZ2F0aW9ucyBwYXIgbGUgTGljZW5jaSYjMjMzOywgKGlpKSBkZXMgZG9tbWFnZXMgZGlyZWN0cyBvdSBpbmRpcmVjdHMgZCYjMjMzO2NvdWxhbnQgZGUgbGB1dGlsaXNhdGlvbiBvdSBkZXMgcGVyZm9ybWFuY2VzIGR1IExvZ2ljaWVsIHN1YmlzIHBhciBsZSBMaWNlbmNpJiMyMzM7IGV0IChpaWkpIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCBkYHVuIHF1ZWxjb25xdWUgZG9tbWFnZSBpbmRpcmVjdC4gRW4gcGFydGljdWxpZXIsIGxlcyBQYXJ0aWVzIGNvbnZpZW5uZW50IGV4cHJlc3MmIzIzMzttZW50IHF1ZSB0b3V0IHByJiMyMzM7anVkaWNlIGZpbmFuY2llciBvdSBjb21tZXJjaWFsIChwYXIgZXhlbXBsZSBwZXJ0ZSBkZSBkb25uJiMyMzM7ZXMsIHBlcnRlIGRlIGImIzIzMztuJiMyMzM7ZmljZXMsIHBlcnRlIGRgZXhwbG9pdGF0aW9uLCBwZXJ0ZSBkZSBjbGllbnQmIzIzMjtsZSBvdSBkZSBjb21tYW5kZXMsIG1hbnF1ZSAmIzIyNDsgZ2FnbmVyLCB0cm91YmxlIGNvbW1lcmNpYWwgcXVlbGNvbnF1ZSkgb3UgdG91dGUgYWN0aW9uIGRpcmlnJiMyMzM7ZSBjb250cmUgbGUgTGljZW5jaSYjMjMzOyBwYXIgdW4gdGllcnMsIGNvbnN0aXR1ZSB1biBkb21tYWdlIGluZGlyZWN0IGV0IG5gb3V2cmUgcGFzIGRyb2l0ICYjMjI0OyByJiMyMzM7cGFyYXRpb24gcGFyIGxlIENvbmMmIzIzMztkYW50LgorCitBcnRpY2xlIDkgLSBHQVJBTlRJRQorCis5LjEgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGAmIzIzMzt0YXQgYWN0dWVsIGRlcyBjb25uYWlzc2FuY2VzIHNjaWVudGlmaXF1ZXMgZXQgdGVjaG5pcXVlcyBhdSBtb21lbnQgZGUgbGEgbWlzZSBlbiBjaXJjdWxhdGlvbiBkdSBMb2dpY2llbCBuZSBwZXJtZXQgcGFzIGRgZW4gdGVzdGVyIGV0IGRgZW4gdiYjMjMzO3JpZmllciB0b3V0ZXMgbGVzIHV0aWxpc2F0aW9ucyBuaSBkZSBkJiMyMzM7dGVjdGVyIGxgZXhpc3RlbmNlIGRgJiMyMzM7dmVudHVlbHMgZCYjMjMzO2ZhdXRzLiBMYGF0dGVudGlvbiBkdSBMaWNlbmNpJiMyMzM7IGEgJiMyMzM7dCYjMjMzOyBhdHRpciYjMjMzO2Ugc3VyIGNlIHBvaW50IHN1ciBsZXMgcmlzcXVlcyBhc3NvY2kmIzIzMztzIGF1IGNoYXJnZW1lbnQsICYjMjI0OyBsYHV0aWxpc2F0aW9uLCBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgTG9naWNpZWwgcXVpIHNvbnQgciYjMjMzO3NlcnYmIzIzMztzICYjMjI0OyBkZXMgdXRpbGlzYXRldXJzIGF2ZXJ0aXMuCisKK0lsIHJlbCYjMjMyO3ZlIGRlIGxhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgTGljZW5jaSYjMjMzOyBkZSBjb250ciYjMjQ0O2xlciwgcGFyIHRvdXMgbW95ZW5zLCBsYGFkJiMyMzM7cXVhdGlvbiBkdSBwcm9kdWl0ICYjMjI0OyBzZXMgYmVzb2lucywgc29uIGJvbiBmb25jdGlvbm5lbWVudCBldCBkZSBzYGFzc3VyZXIgcXVgaWwgbmUgY2F1c2VyYSBwYXMgZGUgZG9tbWFnZXMgYXV4IHBlcnNvbm5lcyBldCBhdXggYmllbnMuCisKKzkuMiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Y2xhcmUgZGUgYm9ubmUgZm9pICYjMjM0O3RyZSBlbiBkcm9pdCBkZSBjb25jJiMyMzM7ZGVyIGxgZW5zZW1ibGUgZGVzIGRyb2l0cyBhdHRhY2gmIzIzMztzIGF1IExvZ2ljaWVsIChjb21wcmVuYW50IG5vdGFtbWVudCBsZXMgZHJvaXRzIHZpcyYjMjMzO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1KS4KKworOS4zIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxlIExvZ2ljaWVsIGVzdCBmb3VybmkgImVuIGxgJiMyMzM7dGF0IiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgc2FucyBhdXRyZSBnYXJhbnRpZSwgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgY2VsbGUgcHImIzIzMzt2dWUgJiMyMjQ7IGxgYXJ0aWNsZSA5LjIgZXQgbm90YW1tZW50IHNhbnMgYXVjdW5lIGdhcmFudGllIHN1ciBzYSB2YWxldXIgY29tbWVyY2lhbGUsIHNvbiBjYXJhY3QmIzIzMjtyZSBzJiMyMzM7Y3VyaXMmIzIzMzssIGlubm92YW50IG91IHBlcnRpbmVudC4KKworRW4gcGFydGljdWxpZXIsIGxlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcyBxdWUgbGUgTG9naWNpZWwgZXN0IGV4ZW1wdCBkYGVycmV1ciwgcXVgaWwgZm9uY3Rpb25uZXJhIHNhbnMgaW50ZXJydXB0aW9uLCBxdWBpbCBzZXJhIGNvbXBhdGlibGUgYXZlYyBsYCYjMjMzO3F1aXBlbWVudCBkdSBMaWNlbmNpJiMyMzM7IGV0IHNhIGNvbmZpZ3VyYXRpb24gbG9naWNpZWxsZSBuaSBxdWBpbCByZW1wbGlyYSBsZXMgYmVzb2lucyBkdSBMaWNlbmNpJiMyMzM7LgorCis5LjQgTGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzLCBkZSBtYW5pJiMyMzI7cmUgZXhwcmVzc2Ugb3UgdGFjaXRlLCBxdWUgbGUgTG9naWNpZWwgbmUgcG9ydGUgcGFzIGF0dGVpbnRlICYjMjI0OyB1biBxdWVsY29ucXVlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGB1biB0aWVycyBwb3J0YW50IHN1ciB1biBicmV2ZXQsIHVuIGxvZ2ljaWVsIG91IHN1ciB0b3V0IGF1dHJlIGRyb2l0IGRlIHByb3ByaSYjMjMzO3QmIzIzMzsuIEFpbnNpLCBsZSBDb25jJiMyMzM7ZGFudCBleGNsdXQgdG91dGUgZ2FyYW50aWUgYXUgcHJvZml0IGR1IExpY2VuY2kmIzIzMzsgY29udHJlIGxlcyBhY3Rpb25zIGVuIGNvbnRyZWZhJiMyMzE7b24gcXVpIHBvdXJyYWllbnQgJiMyMzQ7dHJlIGRpbGlnZW50JiMyMzM7ZXMgYXUgdGl0cmUgZGUgbGB1dGlsaXNhdGlvbiwgZGUgbGEgbW9kaWZpY2F0aW9uLCBldCBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbC4gTiYjMjMzO2FubW9pbnMsIHNpIGRlIHRlbGxlcyBhY3Rpb25zIHNvbnQgZXhlcmMmIzIzMztlcyBjb250cmUgbGUgTGljZW5jaSYjMjMzOywgbGUgQ29uYyYjMjMzO2RhbnQgbHVpIGFwcG9ydGVyYSBzb24gYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIHBvdXIgc2EgZCYjMjMzO2ZlbnNlLiBDZXR0ZSBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgZXN0IGQmIzIzMzt0ZXJtaW4mIzIzMztlIGF1IGNhcyBwYXIgY2FzIGVudHJlIGxlIENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzsgZXQgbGUgTGljZW5jaSYjMjMzOyBkYW5zIGxlIGNhZHJlIGRgdW4gcHJvdG9jb2xlIGRgYWNjb3JkLiBMZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7Z2FnZSB0b3V0ZSByZXNwb25zYWJpbGl0JiMyMzM7IHF1YW50ICYjMjI0OyBsYHV0aWxpc2F0aW9uIGRlIGxhIGQmIzIzMztub21pbmF0aW9uIGR1IExvZ2ljaWVsIHBhciBsZSBMaWNlbmNpJiMyMzM7LiBBdWN1bmUgZ2FyYW50aWUgbmBlc3QgYXBwb3J0JiMyMzM7ZSBxdWFudCAmIzIyNDsgbGBleGlzdGVuY2UgZGUgZHJvaXRzIGFudCYjMjMzO3JpZXVycyBzdXIgbGUgbm9tIGR1IExvZ2ljaWVsIGV0IHN1ciBsYGV4aXN0ZW5jZSBkYHVuZSBtYXJxdWUuCisKK0FydGljbGUgMTAgLSBSRVNJTElBVElPTgorCisxMC4xIEVuIGNhcyBkZSBtYW5xdWVtZW50IHBhciBsZSBMaWNlbmNpJiMyMzM7IGF1eCBvYmxpZ2F0aW9ucyBtaXNlcyAmIzIyNDsgc2EgY2hhcmdlIHBhciBsZSBDb250cmF0LCBsZSBDb25jJiMyMzM7ZGFudCBwb3VycmEgciYjMjMzO3NpbGllciBkZSBwbGVpbiBkcm9pdCBsZSBDb250cmF0IHRyZW50ZSAoMzApIGpvdXJzIGFwciYjMjMyO3Mgbm90aWZpY2F0aW9uIGFkcmVzcyYjMjMzO2UgYXUgTGljZW5jaSYjMjMzOyBldCByZXN0JiMyMzM7ZSBzYW5zIGVmZmV0LgorCisxMC4yIExlIExpY2VuY2kmIzIzMzsgZG9udCBsZSBDb250cmF0IGVzdCByJiMyMzM7c2lsaSYjMjMzOyBuYGVzdCBwbHVzIGF1dG9yaXMmIzIzMzsgJiMyMjQ7IHV0aWxpc2VyLCBtb2RpZmllciBvdSBkaXN0cmlidWVyIGxlIExvZ2ljaWVsLiBDZXBlbmRhbnQsIHRvdXRlcyBsZXMgbGljZW5jZXMgcXVgaWwgYXVyYSBjb25jJiMyMzM7ZCYjMjMzO2VzIGFudCYjMjMzO3JpZXVyZW1lbnQgJiMyMjQ7IGxhIHImIzIzMztzaWxpYXRpb24gZHUgQ29udHJhdCByZXN0ZXJvbnQgdmFsaWRlcyBzb3VzIHImIzIzMztzZXJ2ZSBxdWBlbGxlcyBhaWVudCAmIzIzMzt0JiMyMzM7IGVmZmVjdHUmIzIzMztlcyBlbiBjb25mb3JtaXQmIzIzMzsgYXZlYyBsZSBDb250cmF0LgorCitBcnRpY2xlIDExIC0gRElTUE9TSVRJT05TIERJVkVSU0VTCisKKzExLjEgQ0FVU0UgRVhURVJJRVVSRQorCitBdWN1bmUgZGVzIFBhcnRpZXMgbmUgc2VyYSByZXNwb25zYWJsZSBkYHVuIHJldGFyZCBvdSBkYHVuZSBkJiMyMzM7ZmFpbGxhbmNlIGRgZXgmIzIzMztjdXRpb24gZHUgQ29udHJhdCBxdWkgc2VyYWl0IGQmIzI1MTsgJiMyMjQ7IHVuIGNhcyBkZSBmb3JjZSBtYWpldXJlLCB1biBjYXMgZm9ydHVpdCBvdSB1bmUgY2F1c2UgZXh0JiMyMzM7cmlldXJlLCB0ZWxsZSBxdWUsIG5vdGFtbWVudCwgbGUgbWF1dmFpcyBmb25jdGlvbm5lbWVudCBvdSBsZXMgaW50ZXJydXB0aW9ucyBkdSByJiMyMzM7c2VhdSAmIzIzMztsZWN0cmlxdWUgb3UgZGUgdCYjMjMzO2wmIzIzMztjb21tdW5pY2F0aW9uLCBsYSBwYXJhbHlzaWUgZHUgciYjMjMzO3NlYXUgbGkmIzIzMztlICYjMjI0OyB1bmUgYXR0YXF1ZSBpbmZvcm1hdGlxdWUsIGxgaW50ZXJ2ZW50aW9uIGRlcyBhdXRvcml0JiMyMzM7cyBnb3V2ZXJuZW1lbnRhbGVzLCBsZXMgY2F0YXN0cm9waGVzIG5hdHVyZWxsZXMsIGxlcyBkJiMyMzM7ZyYjMjI2O3RzIGRlcyBlYXV4LCBsZXMgdHJlbWJsZW1lbnRzIGRlIHRlcnJlLCBsZSBmZXUsIGxlcyBleHBsb3Npb25zLCBsZXMgZ3ImIzIzMjt2ZXMgZXQgbGVzIGNvbmZsaXRzIHNvY2lhdXgsIGxgJiMyMzM7dGF0IGRlIGd1ZXJyZS4uLgorCisxMS4yIExlIGZhaXQsIHBhciBsYHVuZSBvdSBsYGF1dHJlIGRlcyBQYXJ0aWVzLCBkYG9tZXR0cmUgZW4gdW5lIG91IHBsdXNpZXVycyBvY2Nhc2lvbnMgZGUgc2UgcHImIzIzMzt2YWxvaXIgZGB1bmUgb3UgcGx1c2lldXJzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LCBuZSBwb3VycmEgZW4gYXVjdW4gY2FzIGltcGxpcXVlciByZW5vbmNpYXRpb24gcGFyIGxhIFBhcnRpZSBpbnQmIzIzMztyZXNzJiMyMzM7ZSAmIzIyNDsgc2BlbiBwciYjMjMzO3ZhbG9pciB1bHQmIzIzMztyaWV1cmVtZW50LgorCisxMS4zIExlIENvbnRyYXQgYW5udWxlIGV0IHJlbXBsYWNlIHRvdXRlIGNvbnZlbnRpb24gYW50JiMyMzM7cmlldXJlLCAmIzIzMztjcml0ZSBvdSBvcmFsZSwgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGxlIG0mIzIzNDttZSBvYmpldCBldCBjb25zdGl0dWUgbGBhY2NvcmQgZW50aWVyIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBjZXQgb2JqZXQuIEF1Y3VuZSBhZGRpdGlvbiBvdSBtb2RpZmljYXRpb24gYXV4IHRlcm1lcyBkdSBDb250cmF0IG5gYXVyYSBkYGVmZmV0ICYjMjI0OyBsYCYjMjMzO2dhcmQgZGVzIFBhcnRpZXMgJiMyMjQ7IG1vaW5zIGRgJiMyMzQ7dHJlIGZhaXRlIHBhciAmIzIzMztjcml0IGV0IHNpZ24mIzIzMztlIHBhciBsZXVycyByZXByJiMyMzM7c2VudGFudHMgZCYjMjUxO21lbnQgaGFiaWxpdCYjMjMzO3MuCisKKzExLjQgRGFucyBsYGh5cG90aCYjMjMyO3NlIG8mIzI0OTsgdW5lIG91IHBsdXNpZXVycyBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgc2BhdiYjMjMyO3JlcmFpdCBjb250cmFpcmUgJiMyMjQ7IHVuZSBsb2kgb3UgJiMyMjQ7IHVuIHRleHRlIGFwcGxpY2FibGUsIGV4aXN0YW50cyBvdSBmdXR1cnMsIGNldHRlIGxvaSBvdSBjZSB0ZXh0ZSBwciYjMjMzO3ZhdWRyYWl0LCBldCBsZXMgUGFydGllcyBmZXJhaWVudCBsZXMgYW1lbmRlbWVudHMgbiYjMjMzO2Nlc3NhaXJlcyBwb3VyIHNlIGNvbmZvcm1lciAmIzIyNDsgY2V0dGUgbG9pIG91ICYjMjI0OyBjZSB0ZXh0ZS4gVG91dGVzIGxlcyBhdXRyZXMgZGlzcG9zaXRpb25zIHJlc3Rlcm9udCBlbiB2aWd1ZXVyLiBEZSBtJiMyMzQ7bWUsIGxhIG51bGxpdCYjMjMzOywgcG91ciBxdWVscXVlIHJhaXNvbiBxdWUgY2Ugc29pdCwgZGB1bmUgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IG5lIHNhdXJhaXQgZW50cmEmIzIzODtuZXIgbGEgbnVsbGl0JiMyMzM7IGRlIGxgZW5zZW1ibGUgZHUgQ29udHJhdC4KKworMTEuNSBMQU5HVUUKKworTGUgQ29udHJhdCBlc3QgciYjMjMzO2RpZyYjMjMzOyBlbiBsYW5ndWUgZnJhbiYjMjMxO2Fpc2UgZXQgZW4gbGFuZ3VlIGFuZ2xhaXNlLCBjZXMgZGV1eCB2ZXJzaW9ucyBmYWlzYW50ICYjMjMzO2dhbGVtZW50IGZvaS4KKworQXJ0aWNsZSAxMiAtIE5PVVZFTExFUyBWRVJTSU9OUyBEVSBDT05UUkFUCisKKzEyLjEgVG91dGUgcGVyc29ubmUgZXN0IGF1dG9yaXMmIzIzMztlICYjMjI0OyBjb3BpZXIgZXQgZGlzdHJpYnVlciBkZXMgY29waWVzIGRlIGNlIENvbnRyYXQuCisKKzEyLjIgQWZpbiBkYGVuIHByJiMyMzM7c2VydmVyIGxhIGNvaCYjMjMzO3JlbmNlLCBsZSB0ZXh0ZSBkdSBDb250cmF0IGVzdCBwcm90JiMyMzM7ZyYjMjMzOyBldCBuZSBwZXV0ICYjMjM0O3RyZSBtb2RpZmkmIzIzMzsgcXVlIHBhciBsZXMgYXV0ZXVycyBkZSBsYSBsaWNlbmNlLCBsZXNxdWVscyBzZSByJiMyMzM7c2VydmVudCBsZSBkcm9pdCBkZSBwdWJsaWVyIHAmIzIzMztyaW9kaXF1ZW1lbnQgZGVzIG1pc2VzICYjMjI0OyBqb3VyIG91IGRlIG5vdXZlbGxlcyB2ZXJzaW9ucyBkdSBDb250cmF0LCBxdWkgcG9zcyYjMjMzO2Rlcm9udCBjaGFjdW5lIHVuIG51bSYjMjMzO3JvIGRpc3RpbmN0LiBDZXMgdmVyc2lvbnMgdWx0JiMyMzM7cmlldXJlcyBzZXJvbnQgc3VzY2VwdGlibGVzIGRlIHByZW5kcmUgZW4gY29tcHRlIGRlIG5vdXZlbGxlcyBwcm9ibCYjMjMzO21hdGlxdWVzIHJlbmNvbnRyJiMyMzM7ZXMgcGFyIGxlcyBsb2dpY2llbHMgbGlicmVzLgorCisxMi4zIFRvdXQgTG9naWNpZWwgZGlmZnVzJiMyMzM7IHNvdXMgdW5lIHZlcnNpb24gZG9ubiYjMjMzO2UgZHUgQ29udHJhdCBuZSBwb3VycmEgZmFpcmUgbGBvYmpldCBkYHVuZSBkaWZmdXNpb24gdWx0JiMyMzM7cmlldXJlIHF1ZSBzb3VzIGxhIG0mIzIzNDttZSB2ZXJzaW9uIGR1IENvbnRyYXQgb3UgdW5lIHZlcnNpb24gcG9zdCYjMjMzO3JpZXVyZSwgc291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgNS4zLjQuCisKK0FydGljbGUgMTMgLSBMT0kgQVBQTElDQUJMRSBFVCBDT01QRVRFTkNFIFRFUlJJVE9SSUFMRQorCisxMy4xIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGxgYW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGxgb2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMiBBIGQmIzIzMztmYXV0IGRgYWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGRgdW5lIHByb2MmIzIzMztkdXJlIGRgdXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZUNJTEwgZXN0IHBvdXIgQ2UoYSkgQyhucnMpIEkobnJpYSkgTChvZ2ljaWVsKSBMKGlicmUpCisKK1ZlcnNpb24gMi4wIGR1IDIwMDYtMDktMDUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMjQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1CCkBAIC0wLDAgKzEsMjQ3IEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwtQgorCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGRgdW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkYHVuZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLAorZGBhdXRyZSBwYXJ0LCBsYSBkJiMyMzM7c2lnbmF0aW9uIGRgdW4gZHJvaXQgYXBwbGljYWJsZSwgbGUgZHJvaXQgZnJhbiYjMjMxO2FpcywgYXVxdWVsIGVsbGUgZXN0IGNvbmZvcm1lLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1YGlsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwtQjEgc29udDoKKworQ29tbWlzc2FyaWF0ICYjMjI0OyBsYEVuZXJnaWUgQXRvbWlxdWUgLSBDRUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgZGUgcmVjaGVyY2hlICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUsIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcy4KKworQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgLSBDTlJTLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtIElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQciYjMjMzO2FtYnVsZQorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBkb250IGxgb2JqZWN0aWYgZXN0IGRlIGNvbmYmIzIzMztyZXIgYXV4IHV0aWxpc2F0ZXVycyB1bmUgdHImIzIzMjtzIGxhcmdlIGxpYmVydCYjMjMzOyBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gZHUgbG9naWNpZWwgciYjMjMzO2dpIHBhciBjZXR0ZSBsaWNlbmNlLgorCitMYGV4ZXJjaWNlIGRlIGNldHRlIGxpYmVydCYjMjMzOyBlc3QgYXNzb3J0aSBkYHVuZSBvYmxpZ2F0aW9uIGZvcnRlIGRlIGNpdGF0aW9uICYjMjI0OyBsYSBjaGFyZ2UgZGUgY2V1eCBxdWkgZGlzdHJpYnVlcmFpZW50IHVuIGxvZ2ljaWVsIGluY29ycG9yYW50IHVuIGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgbGEgcHImIzIzMztzZW50ZSBsaWNlbmNlIGFmaW4gZGBhc3N1cmVyIHF1ZSBsZXMgY29udHJpYnV0aW9ucyBkZSB0b3VzIHNvaWVudCBjb3JyZWN0ZW1lbnQgaWRlbnRpZmkmIzIzMztlcyBldCByZWNvbm51ZXMuCisKK0xgYWNjZXNzaWJpbGl0JiMyMzM7IGF1IGNvZGUgc291cmNlIGV0IGxlcyBkcm9pdHMgZGUgY29waWUsIGRlIG1vZGlmaWNhdGlvbiBldCBkZSByZWRpc3RyaWJ1dGlvbiBxdWkgZCYjMjMzO2NvdWxlbnQgZGUgY2UgY29udHJhdCBvbnQgcG91ciBjb250cmVwYXJ0aWUgZGUgbmBvZmZyaXIgYXV4IHV0aWxpc2F0ZXVycyBxdWB1bmUgZ2FyYW50aWUgbGltaXQmIzIzMztlIGV0IGRlIG5lIGZhaXJlIHBlc2VyIHN1ciBsYGF1dGV1ciBkdSBsb2dpY2llbCwgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGV0IGxlcyBjb25jJiMyMzM7ZGFudHMgc3VjY2Vzc2lmcyBxdWB1bmUgcmVzcG9uc2FiaWxpdCYjMjMzOyByZXN0cmVpbnRlLgorCitBIGNldCAmIzIzMztnYXJkIGxgYXR0ZW50aW9uIGRlIGxgdXRpbGlzYXRldXIgZXN0IGF0dGlyJiMyMzM7ZSBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgJiMyMjQ7IGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBsb2dpY2llbCBwYXIgbGB1dGlsaXNhdGV1ciAmIzIzMzt0YW50IGRvbm4mIzIzMzsgc2Egc3AmIzIzMztjaWZpY2l0JiMyMzM7IGRlIGxvZ2ljaWVsIGxpYnJlLCBxdWkgcGV1dCBsZSByZW5kcmUgY29tcGxleGUgJiMyMjQ7IG1hbmlwdWxlciBldCBxdWkgbGUgciYjMjMzO3NlcnZlIGRvbmMgJiMyMjQ7IGRlcyBkJiMyMzM7dmVsb3BwZXVycyBvdSBkZXMgcHJvZmVzc2lvbm5lbHMgYXZlcnRpcyBwb3NzJiMyMzM7ZGFudCBkZXMgY29ubmFpc3NhbmNlcyBpbmZvcm1hdGlxdWVzIGFwcHJvZm9uZGllcy4gTGVzIHV0aWxpc2F0ZXVycyBzb250IGRvbmMgaW52aXQmIzIzMztzICYjMjI0OyBjaGFyZ2VyIGV0IHRlc3RlciBsYGFkJiMyMzM7cXVhdGlvbiBkdSBsb2dpY2llbCAmIzIyNDsgbGV1cnMgYmVzb2lucyBkYW5zIGRlcyBjb25kaXRpb25zIHBlcm1ldHRhbnQgZGBhc3N1cmVyIGxhIHMmIzIzMztjdXJpdCYjMjMzOyBkZSBsZXVycyBzeXN0JiMyMzI7bWVzIGV0L291IGRlIGxldXJzIGRvbm4mIzIzMztlcyBldCwgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50LCAmIzIyNDsgbGB1dGlsaXNlciBldCBsYGV4cGxvaXRlciBkYW5zIGxlcyBtJiMyMzQ7bWVzIGNvbmRpdGlvbnMgZGUgcyYjMjMzO2N1cml0JiMyMzM7LiBDZSBjb250cmF0IHBldXQgJiMyMzQ7dHJlIHJlcHJvZHVpdCBldCBkaWZmdXMmIzIzMzsgbGlicmVtZW50LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBsZSBjb25zZXJ2ZXIgZW4gbGAmIzIzMzt0YXQsIHNhbnMgYWpvdXQgbmkgc3VwcHJlc3Npb24gZGUgY2xhdXNlcy4KKworQ2UgY29udHJhdCBlc3Qgc3VzY2VwdGlibGUgZGUgc2BhcHBsaXF1ZXIgJiMyMjQ7IHRvdXQgbG9naWNpZWwgZG9udCBsZSB0aXR1bGFpcmUgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZCYjMjMzO2NpZGUgZGUgc291bWV0dHJlIGxgZXhwbG9pdGF0aW9uIGF1eCBkaXNwb3NpdGlvbnMgcXVgaWwgY29udGllbnQuCisKK0FydGljbGUgMSAtIERFRklOSVRJT05TCisKK0RhbnMgY2UgY29udHJhdCwgbGVzIHRlcm1lcyBzdWl2YW50cywgbG9yc3F1YGlscyBzZXJvbnQgJiMyMzM7Y3JpdHMgYXZlYyB1bmUgbGV0dHJlIGNhcGl0YWxlLCBhdXJvbnQgbGEgc2lnbmlmaWNhdGlvbiBzdWl2YW50ZToKKworQ29udHJhdDogZCYjMjMzO3NpZ25lIGxlIHByJiMyMzM7c2VudCBjb250cmF0IGRlIGxpY2VuY2UsIHNlcyAmIzIzMzt2ZW50dWVsbGVzIHZlcnNpb25zIHBvc3QmIzIzMztyaWV1cmVzIGV0IGFubmV4ZXMuCisKK0xvZ2ljaWVsOiBkJiMyMzM7c2lnbmUgbGUgbG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIE9iamV0IGV0L291IGRlIENvZGUgU291cmNlIGV0IGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCBzYSBkb2N1bWVudGF0aW9uLCBkYW5zIGxldXIgJiMyMzM7dGF0IGF1IG1vbWVudCBkZSBsYGFjY2VwdGF0aW9uIGR1IENvbnRyYXQgcGFyIGxlIExpY2VuY2kmIzIzMzsuCisKK0xvZ2ljaWVsIEluaXRpYWw6IGQmIzIzMztzaWduZSBsZSBMb2dpY2llbCBzb3VzIHNhIGZvcm1lIGRlIENvZGUgU291cmNlIGV0ICYjMjMzO3ZlbnR1ZWxsZW1lbnQgZGUgQ29kZSBPYmpldCBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGV1ciBwcmVtaSYjMjMyO3JlIGRpZmZ1c2lvbiBzb3VzIGxlcyB0ZXJtZXMgZHUgQ29udHJhdC4KKworTG9naWNpZWwgTW9kaWZpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IHBhciBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb2RlIFNvdXJjZTogZCYjMjMzO3NpZ25lIGxgZW5zZW1ibGUgZGVzIGluc3RydWN0aW9ucyBldCBkZXMgbGlnbmVzIGRlIHByb2dyYW1tZSBkdSBMb2dpY2llbCBldCBhdXF1ZWwgbGBhY2MmIzIzMjtzIGVzdCBuJiMyMzM7Y2Vzc2FpcmUgZW4gdnVlIGRlIG1vZGlmaWVyIGxlIExvZ2ljaWVsLgorCitDb2RlIE9iamV0OiBkJiMyMzM7c2lnbmUgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGlzc3VzIGRlIGxhIGNvbXBpbGF0aW9uIGR1IENvZGUgU291cmNlLgorCitUaXR1bGFpcmU6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgZCYjMjMzO3RlbnRldXJzIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGRgYXV0ZXVyIHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLgorCitMaWNlbmNpJiMyMzM7OiBkJiMyMzM7c2lnbmUgbGUgb3UgbGVzIHV0aWxpc2F0ZXVycyBkdSBMb2dpY2llbCBheWFudCBhY2NlcHQmIzIzMzsgbGUgQ29udHJhdC4KKworQ29udHJpYnV0ZXVyOiBkJiMyMzM7c2lnbmUgbGUgTGljZW5jaSYjMjMzOyBhdXRldXIgZGBhdSBtb2lucyB1bmUgQ29udHJpYnV0aW9uLgorCitDb25jJiMyMzM7ZGFudDogZCYjMjMzO3NpZ25lIGxlIFRpdHVsYWlyZSBvdSB0b3V0ZSBwZXJzb25uZSBwaHlzaXF1ZSBvdSBtb3JhbGUgZGlzdHJpYnVhbnQgbGUgTG9naWNpZWwgc291cyBsZSBDb250cmF0LgorCitDb250cmlidXRpb246IGQmIzIzMztzaWduZSBsYGVuc2VtYmxlIGRlcyBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhZHVjdGlvbnMsIGFkYXB0YXRpb25zIGV0L291IG5vdXZlbGxlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBpbnQmIzIzMztnciYjMjMzO2VzIGRhbnMgbGUgTG9naWNpZWwgcGFyIHRvdXQgQ29udHJpYnV0ZXVyLCBhaW5zaSBxdWUgdG91dCBNb2R1bGUgSW50ZXJuZS4KKworTW9kdWxlOiBkJiMyMzM7c2lnbmUgdW4gZW5zZW1ibGUgZGUgZmljaGllcnMgc291cmNlcyB5IGNvbXByaXMgbGV1ciBkb2N1bWVudGF0aW9uIHF1aSBwZXJtZXQgZGUgciYjMjMzO2FsaXNlciBkZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3Mgb3Ugc2VydmljZXMgc3VwcGwmIzIzMzttZW50YWlyZXMgJiMyMjQ7IGNldXggZm91cm5pcyBwYXIgbGUgTG9naWNpZWwuCisKK01vZHVsZSBFeHRlcm5lOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUsIG5vbiBkJiMyMzM7cml2JiMyMzM7IGR1IExvZ2ljaWVsLCB0ZWwgcXVlIGNlIE1vZHVsZSBldCBsZSBMb2dpY2llbCBzYGV4JiMyMzM7Y3V0ZW50IGRhbnMgZGVzIGVzcGFjZXMgZGBhZHJlc3NhZ2UgZGlmZiYjMjMzO3JlbnRzLCBsYHVuIGFwcGVsYW50IGxgYXV0cmUgYXUgbW9tZW50IGRlIGxldXIgZXgmIzIzMztjdXRpb24uCisKK01vZHVsZSBJbnRlcm5lOiBkJiMyMzM7c2lnbmUgdG91dCBNb2R1bGUgbGkmIzIzMzsgYXUgTG9naWNpZWwgZGUgdGVsbGUgc29ydGUgcXVgaWxzIHNgZXgmIzIzMztjdXRlbnQgZGFucyBsZSBtJiMyMzQ7bWUgZXNwYWNlIGRgYWRyZXNzYWdlLgorCitQYXJ0aWVzOiBkJiMyMzM7c2lnbmUgY29sbGVjdGl2ZW1lbnQgbGUgTGljZW5jaSYjMjMzOyBldCBsZSBDb25jJiMyMzM7ZGFudC4KKworQ2VzIHRlcm1lcyBzYGVudGVuZGVudCBhdSBzaW5ndWxpZXIgY29tbWUgYXUgcGx1cmllbC4KKworQXJ0aWNsZSAyIC0gT0JKRVQKKworTGUgQ29udHJhdCBhIHBvdXIgb2JqZXQgbGEgY29uY2Vzc2lvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQgYXUgTGljZW5jaSYjMjMzOyBkYHVuZSBsaWNlbmNlIG5vbiBleGNsdXNpdmUsIGNlc3NpYmxlIGV0IG1vbmRpYWxlIGR1IExvZ2ljaWVsIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgY2ktYXByJiMyMzI7cyAmIzIyNDsgbGBhcnRpY2xlIDUgcG91ciB0b3V0ZSBsYSBkdXImIzIzMztlIGRlIHByb3RlY3Rpb24gZGVzIGRyb2l0cyBwb3J0YW50IHN1ciBjZSBMb2dpY2llbC4KKworQXJ0aWNsZSAzIC0gQUNDRVBUQVRJT04KKworMy4xIExgYWNjZXB0YXRpb24gcGFyIGxlIExpY2VuY2kmIzIzMzsgZGVzIHRlcm1lcyBkdSBDb250cmF0IGVzdCByJiMyMzM7cHV0JiMyMzM7ZSBhY3F1aXNlIGR1IGZhaXQgZHUgcHJlbWllciBkZXMgZmFpdHMgc3VpdmFudHM6CisKKyhpKSBsZSBjaGFyZ2VtZW50IGR1IExvZ2ljaWVsIHBhciB0b3V0IG1veWVuIG5vdGFtbWVudCBwYXIgdCYjMjMzO2wmIzIzMztjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzZXJ2ZXVyIGRpc3RhbnQgb3UgcGFyIGNoYXJnZW1lbnQgJiMyMjQ7IHBhcnRpciBkYHVuIHN1cHBvcnQgcGh5c2lxdWU7CisoaWkpIGxlIHByZW1pZXIgZXhlcmNpY2UgcGFyIGxlIExpY2VuY2kmIzIzMzsgZGUgbGB1biBxdWVsY29ucXVlIGRlcyBkcm9pdHMgY29uYyYjMjMzO2QmIzIzMztzIHBhciBsZSBDb250cmF0LgorMy4yIFVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwgY29udGVuYW50IG5vdGFtbWVudCB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgYXV4IHNwJiMyMzM7Y2lmaWNpdCYjMjMzO3MgZHUgTG9naWNpZWwsICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCAmIzIyNDsgbGEgbGltaXRhdGlvbiAmIzIyNDsgdW4gdXNhZ2UgcGFyIGRlcyB1dGlsaXNhdGV1cnMgZXhwJiMyMzM7cmltZW50JiMyMzM7cyBhICYjMjMzO3QmIzIzMzsgbWlzICYjMjI0OyBkaXNwb3NpdGlvbiBkdSBMaWNlbmNpJiMyMzM7IHByJiMyMzM7YWxhYmxlbWVudCAmIzIyNDsgc29uIGFjY2VwdGF0aW9uIHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgJiMyMjQ7IGxgYXJ0aWNsZSAzLjEgY2kgZGVzc3VzIGV0IGxlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgZW4gYXZvaXIgcHJpcyBjb25uYWlzc2FuY2UuCisKK0FydGljbGUgNCAtIEVOVFJFRSBFTiBWSUdVRVVSIEVUIERVUkVFCisKKzQuMSBFTlRSRUUgRU4gVklHVUVVUgorCitMZSBDb250cmF0IGVudHJlIGVuIHZpZ3VldXIgJiMyMjQ7IGxhIGRhdGUgZGUgc29uIGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IHRlbGxlIHF1ZSBkJiMyMzM7ZmluaWUgZW4gMy4xLgorCis0LjIgRFVSRUUKKworTGUgQ29udHJhdCBwcm9kdWlyYSBzZXMgZWZmZXRzIHBlbmRhbnQgdG91dGUgbGEgZHVyJiMyMzM7ZSBsJiMyMzM7Z2FsZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHBvcnRhbnQgc3VyIGxlIExvZ2ljaWVsLgorCitBcnRpY2xlIDUgLSBFVEVORFVFIERFUyBEUk9JVFMgQ09OQ0VERVMKKworTGUgQ29uYyYjMjMzO2RhbnQgY29uYyYjMjMyO2RlIGF1IExpY2VuY2kmIzIzMzssIHF1aSBhY2NlcHRlLCBsZXMgZHJvaXRzIHN1aXZhbnRzIHN1ciBsZSBMb2dpY2llbCBwb3VyIHRvdXRlcyBkZXN0aW5hdGlvbnMgZXQgcG91ciBsYSBkdXImIzIzMztlIGR1IENvbnRyYXQgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCitQYXIgYWlsbGV1cnMsIHNpIGxlIENvbmMmIzIzMztkYW50IGQmIzIzMzt0aWVudCBvdSB2ZW5haXQgJiMyMjQ7IGQmIzIzMzt0ZW5pciB1biBvdSBwbHVzaWV1cnMgYnJldmV0cyBkYGludmVudGlvbiBwcm90JiMyMzM7Z2VhbnQgdG91dCBvdSBwYXJ0aWUgZGVzIGZvbmN0aW9ubmFsaXQmIzIzMztzIGR1IExvZ2ljaWVsIG91IGRlIHNlcyBjb21wb3NhbnRzLCBpbCBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIG9wcG9zZXIgbGVzICYjMjMzO3ZlbnR1ZWxzIGRyb2l0cyBjb25mJiMyMzM7ciYjMjMzO3MgcGFyIGNlcyBicmV2ZXRzIGF1eCBMaWNlbmNpJiMyMzM7cyBzdWNjZXNzaWZzIHF1aSB1dGlsaXNlcmFpZW50LCBleHBsb2l0ZXJhaWVudCBvdSBtb2RpZmllcmFpZW50IGxlIExvZ2ljaWVsLiBFbiBjYXMgZGUgY2Vzc2lvbiBkZSBjZXMgYnJldmV0cywgbGUgQ29uYyYjMjMzO2RhbnQgc2BlbmdhZ2UgJiMyMjQ7IGZhaXJlIHJlcHJlbmRyZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFsaW4mIzIzMzthIGF1eCBjZXNzaW9ubmFpcmVzLgorCis1LjEgRFJPSVQgRGBVVElMSVNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciBsZSBMb2dpY2llbCwgc2FucyByZXN0cmljdGlvbiBxdWFudCBhdXggZG9tYWluZXMgZGBhcHBsaWNhdGlvbiwgJiMyMzM7dGFudCBjaS1hcHImIzIzMjtzIHByJiMyMzM7Y2lzJiMyMzM7IHF1ZSBjZWxhIGNvbXBvcnRlOgorCitsYSByZXByb2R1Y3Rpb24gcGVybWFuZW50ZSBvdSBwcm92aXNvaXJlIGR1IExvZ2ljaWVsIGVuIHRvdXQgb3UgcGFydGllIHBhciB0b3V0IG1veWVuIGV0IHNvdXMgdG91dGUgZm9ybWUuCisKK2xlIGNoYXJnZW1lbnQsIGxgYWZmaWNoYWdlLCBsYGV4JiMyMzM7Y3V0aW9uLCBvdSBsZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBzdXIgdG91dCBzdXBwb3J0LgorCitsYSBwb3NzaWJpbGl0JiMyMzM7IGRgZW4gb2JzZXJ2ZXIsIGRgZW4gJiMyMzM7dHVkaWVyLCBvdSBkYGVuIHRlc3RlciBsZSBmb25jdGlvbm5lbWVudCBhZmluIGRlIGQmIzIzMzt0ZXJtaW5lciBsZXMgaWQmIzIzMztlcyBldCBwcmluY2lwZXMgcXVpIHNvbnQgJiMyMjQ7IGxhIGJhc2UgZGUgbmBpbXBvcnRlIHF1ZWwgJiMyMzM7bCYjMjMzO21lbnQgZGUgY2UgTG9naWNpZWw7IGV0IGNlY2ksIGxvcnNxdWUgbGUgTGljZW5jaSYjMjMzOyBlZmZlY3R1ZSB0b3V0ZSBvcCYjMjMzO3JhdGlvbiBkZSBjaGFyZ2VtZW50LCBkYGFmZmljaGFnZSwgZGBleCYjMjMzO2N1dGlvbiwgZGUgdHJhbnNtaXNzaW9uIG91IGRlIHN0b2NrYWdlIGR1IExvZ2ljaWVsIHF1YGlsIGVzdCBlbiBkcm9pdCBkYGVmZmVjdHVlciBlbiB2ZXJ0dSBkdSBDb250cmF0LgorCis1LjIgRFJPSVQgRGBBUFBPUlRFUiBERVMgQ09OVFJJQlVUSU9OUworCitMZSBkcm9pdCBkYGFwcG9ydGVyIGRlcyBDb250cmlidXRpb25zIGNvbXBvcnRlIGxlIGRyb2l0IGRlIHRyYWR1aXJlLCBkYGFkYXB0ZXIsIGRgYXJyYW5nZXIgb3UgZGBhcHBvcnRlciB0b3V0ZSBhdXRyZSBtb2RpZmljYXRpb24gYXUgTG9naWNpZWwgZXQgbGUgZHJvaXQgZGUgcmVwcm9kdWlyZSBsZSBsb2dpY2llbCBlbiByJiMyMzM7c3VsdGFudC4KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgYXBwb3J0ZXIgdG91dGUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsIHNvdXMgciYjMjMzO3NlcnZlIGRlIG1lbnRpb25uZXIsIGRlIGZhJiMyMzE7b24gZXhwbGljaXRlLCBzb24gbm9tIGVuIHRhbnQgcXVgYXV0ZXVyIGRlIGNldHRlIENvbnRyaWJ1dGlvbiBldCBsYSBkYXRlIGRlIGNyJiMyMzM7YXRpb24gZGUgY2VsbGUtY2kuCisKKzUuMyBEUk9JVCBERSBESVNUUklCVVRJT04KKworTGUgZHJvaXQgZGUgZGlzdHJpYnV0aW9uIGNvbXBvcnRlIG5vdGFtbWVudCBsZSBkcm9pdCBkZSBkaWZmdXNlciwgZGUgdHJhbnNtZXR0cmUgZXQgZGUgY29tbXVuaXF1ZXIgbGUgTG9naWNpZWwgYXUgcHVibGljIHN1ciB0b3V0IHN1cHBvcnQgZXQgcGFyIHRvdXQgbW95ZW4gYWluc2kgcXVlIGxlIGRyb2l0IGRlIG1ldHRyZSBzdXIgbGUgbWFyY2gmIzIzMzsgJiMyMjQ7IHRpdHJlIG9uJiMyMzM7cmV1eCBvdSBncmF0dWl0LCB1biBvdSBkZXMgZXhlbXBsYWlyZXMgZHUgTG9naWNpZWwgcGFyIHRvdXQgcHJvYyYjMjMzO2QmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkdSBMb2dpY2llbCwgbW9kaWZpJiMyMzM7IG91IG5vbiwgJiMyMjQ7IGRlcyB0aWVycyBkYW5zIGxlcyBjb25kaXRpb25zIGNpLWFwciYjMjMyO3MgZCYjMjMzO3RhaWxsJiMyMzM7ZXMuCisKKzUuMy4xIERJU1RSSUJVVElPTiBEVSBMT0dJQ0lFTCBTQU5TIE1PRElGSUNBVElPTgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgY29uZm9ybWVzIGR1IExvZ2ljaWVsLCBzb3VzIGZvcm1lIGRlIENvZGUgU291cmNlIG91IGRlIENvZGUgT2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIENvZGUgT2JqZXQgZHUgTG9naWNpZWwgZXN0IHJlZGlzdHJpYnUmIzIzMzssIGxlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgdW4gYWNjJiMyMzI7cyBlZmZlY3RpZiBhdSBDb2RlIFNvdXJjZSBjb21wbGV0IGR1IExvZ2ljaWVsIHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBzYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwsICYjMjMzO3RhbnQgZW50ZW5kdSBxdWUgbGUgY28mIzI1MTt0IGFkZGl0aW9ubmVsIGRgYWNxdWlzaXRpb24gZHUgQ29kZSBTb3VyY2UgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGRlIHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorCis1LjMuMiBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgTU9ESUZJRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYXBwb3J0ZSB1bmUgQ29udHJpYnV0aW9uIGF1IExvZ2ljaWVsLCBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgYXV0cmUgcXVlIGxlIHByJiMyMzM7c2VudCBDb250cmF0IHNvdXMgciYjMjMzO3NlcnZlIGR1IHJlc3BlY3QgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgNS4zLjQuCisKKzUuMy4zIERJU1RSSUJVVElPTiBERVMgTU9EVUxFUyBFWFRFUk5FUworCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgYSBkJiMyMzM7dmVsb3BwJiMyMzM7IHVuIE1vZHVsZSBFeHRlcm5lIGxlcyBjb25kaXRpb25zIGR1IENvbnRyYXQgbmUgc2BhcHBsaXF1ZW50IHBhcyAmIzIyNDsgY2UgTW9kdWxlIEV4dGVybmUsIHF1aSBwZXV0ICYjMjM0O3RyZSBkaXN0cmlidSYjMjMzOyBzb3VzIHVuIGNvbnRyYXQgZGUgbGljZW5jZSBkaWZmJiMyMzM7cmVudC4KKworNS4zLjQgQ0lUQVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGRpc3RyaWJ1ZSB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBpbmRpcXVlciBkYW5zIHNhIGRvY3VtZW50YXRpb24gcXVgaWwgYSAmIzIzMzt0JiMyMzM7IHImIzIzMzthbGlzJiMyMzM7ICYjMjI0OyBwYXJ0aXIgZHUgTG9naWNpZWwgciYjMjMzO2dpIHBhciBsZSBDb250cmF0LCBlbiByZXByb2R1aXNhbnQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgTG9naWNpZWwsCisKKyYjMjI0OyBmYWlyZSBlbiBzb3J0ZSBxdWUgbGB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCwgc2VzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgbGUgZmFpdCBxdWBpbCBlc3QgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IHNvaWVudCBpbmRpcXUmIzIzMztzIGRhbnMgdW4gdGV4dGUgZmFjaWxlbWVudCBhY2Nlc3NpYmxlIGRlcHVpcyBsYGludGVyZmFjZSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzssCisKKyYjMjI0OyBtZW50aW9ubmVyLCBzdXIgdW4gc2l0ZSBXZWIgbGlicmVtZW50IGFjY2Vzc2libGUgZCYjMjMzO2NyaXZhbnQgbGUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCBldCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uLCBxdWBpbCBhICYjMjMzO3QmIzIzMzsgciYjMjMzO2FsaXMmIzIzMzsgJiMyMjQ7IHBhcnRpciBkdSBMb2dpY2llbCByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQsIGVuIHJlcHJvZHVpc2FudCBsZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkdSBMb2dpY2llbCwKKworbG9yc3F1YGlsIGxlIGRpc3RyaWJ1ZSAmIzIyNDsgdW4gdGllcnMgc3VzY2VwdGlibGUgZGUgZGlzdHJpYnVlciBsdWktbSYjMjM0O21lIHVuIExvZ2ljaWVsIE1vZGlmaSYjMjMzOywgc2FucyBhdm9pciAmIzIyNDsgZW4gZGlzdHJpYnVlciBsZSBjb2RlIHNvdXJjZSwgJiMyMjQ7IGZhaXJlIHNlcyBtZWlsbGV1cnMgZWZmb3J0cyBwb3VyIHF1ZSBsZXMgb2JsaWdhdGlvbnMgZHUgcHImIzIzMztzZW50IGFydGljbGUgNS4zLjQgc29pZW50IHJlcHJpc2VzIHBhciBsZSBkaXQgdGllcnMuCisKK0xvcnNxdWUgbGUgTG9naWNpZWwgbW9kaWZpJiMyMzM7IG91IG5vbiBlc3QgZGlzdHJpYnUmIzIzMzsgYXZlYyB1biBNb2R1bGUgRXh0ZXJuZSBxdWkgYSAmIzIzMzt0JiMyMzM7IGNvbiYjMjMxO3UgcG91ciBsYHV0aWxpc2VyLCBsZSBMaWNlbmNpJiMyMzM7IGRvaXQgc291bWV0dHJlIGxlIGRpdCBNb2R1bGUgRXh0ZXJuZSBhdXggb2JsaWdhdGlvbnMgcHImIzIzMztjJiMyMzM7ZGVudGVzLgorCis1LjMuNSBDT01QQVRJQklMSVRFIEFWRUMgTEVTIExJQ0VOQ0VTIENlQ0lMTCBldCBDZUNJTEwtQworCitMb3JzcXVgdW4gTG9naWNpZWwgTW9kaWZpJiMyMzM7IGNvbnRpZW50IHVuZSBDb250cmlidXRpb24gc291bWlzZSBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBsZXMgc3RpcHVsYXRpb25zIHByJiMyMzM7dnVlcyAmIzIyNDsgbGBhcnRpY2xlIDUuMy40IHNvbnQgZmFjdWx0YXRpdmVzLgorCitVbiBMb2dpY2llbCBNb2RpZmkmIzIzMzsgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyBsZSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLUMuIExlcyBzdGlwdWxhdGlvbnMgcHImIzIzMzt2dWVzICYjMjI0OyBsYGFydGljbGUgNS4zLjQgc29udCBhbG9ycyBmYWN1bHRhdGl2ZXMuCisKK0FydGljbGUgNiAtIFBST1BSSUVURSBJTlRFTExFQ1RVRUxMRQorCis2LjEgU1VSIExFIExPR0lDSUVMIElOSVRJQUwKKworTGUgVGl0dWxhaXJlIGVzdCBkJiMyMzM7dGVudGV1ciBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBzdXIgbGUgTG9naWNpZWwgSW5pdGlhbC4gVG91dGUgdXRpbGlzYXRpb24gZHUgTG9naWNpZWwgSW5pdGlhbCBlc3Qgc291bWlzZSBhdSByZXNwZWN0IGRlcyBjb25kaXRpb25zIGRhbnMgbGVzcXVlbGxlcyBsZSBUaXR1bGFpcmUgYSBjaG9pc2kgZGUgZGlmZnVzZXIgc29uIG9ldXZyZSBldCBudWwgYXV0cmUgbmBhIGxhIGZhY3VsdCYjMjMzOyBkZSBtb2RpZmllciBsZXMgY29uZGl0aW9ucyBkZSBkaWZmdXNpb24gZGUgY2UgTG9naWNpZWwgSW5pdGlhbC4KKworTGUgVGl0dWxhaXJlIHNgZW5nYWdlICYjMjI0OyBjZSBxdWUgbGUgTG9naWNpZWwgSW5pdGlhbCByZXN0ZSBhdSBtb2lucyByJiMyMzM7Z2kgcGFyIGxlIENvbnRyYXQgZXQgY2UsIHBvdXIgbGEgZHVyJiMyMzM7ZSB2aXMmIzIzMztlICYjMjI0OyBsYGFydGljbGUgNC4yLgorCis2LjIgU1VSIExFUyBDT05UUklCVVRJT05TCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIGVzdCB0aXR1bGFpcmUgc3VyIGNlbGxlLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZS4KKworNi4zIFNVUiBMRVMgTU9EVUxFUyBFWFRFUk5FUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIEV4dGVybmUgZXN0IHRpdHVsYWlyZSBzdXIgY2VsdWktY2kgZGVzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRhbnMgbGVzIGNvbmRpdGlvbnMgZCYjMjMzO2ZpbmllcyBwYXIgbGEgbCYjMjMzO2dpc2xhdGlvbiBhcHBsaWNhYmxlIGV0IHJlc3RlIGxpYnJlIGR1IGNob2l4IGR1IGNvbnRyYXQgciYjMjMzO2dpc3NhbnQgc2EgZGlmZnVzaW9uLgorCis2LjQgRElTUE9TSVRJT05TIENPTU1VTkVTCisKK0xlIExpY2VuY2kmIzIzMzsgc2BlbmdhZ2UgZXhwcmVzcyYjMjMzO21lbnQ6CisKKyYjMjI0OyBuZSBwYXMgc3VwcHJpbWVyIG91IG1vZGlmaWVyIGRlIHF1ZWxxdWUgbWFuaSYjMjMyO3JlIHF1ZSBjZSBzb2l0IGxlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGFwcG9zJiMyMzM7ZXMgc3VyIGxlIExvZ2ljaWVsOworCismIzIyNDsgcmVwcm9kdWlyZSAmIzIyNDsgbGBpZGVudGlxdWUgbGVzZGl0ZXMgbWVudGlvbnMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBzdXIgbGVzIGNvcGllcyBkdSBMb2dpY2llbCBtb2RpZmkmIzIzMzsgb3Ugbm9uLgorCitMZSBMaWNlbmNpJiMyMzM7IHNgZW5nYWdlICYjMjI0OyBuZSBwYXMgcG9ydGVyIGF0dGVpbnRlLCBkaXJlY3RlbWVudCBvdSBpbmRpcmVjdGVtZW50LCBhdXggZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzIHN1ciBsZSBMb2dpY2llbCBldCAmIzIyNDsgcHJlbmRyZSwgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50LCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlIHNvbiBwZXJzb25uZWwgdG91dGVzIGxlcyBtZXN1cmVzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBhc3N1cmVyIGxlIHJlc3BlY3QgZGVzIGRpdHMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZHUgVGl0dWxhaXJlIGV0L291IGRlcyBDb250cmlidXRldXJzLgorCitBcnRpY2xlIDcgLSBTRVJWSUNFUyBBU1NPQ0lFUworCis3LjEgTGUgQ29udHJhdCBuYG9ibGlnZSBlbiBhdWN1biBjYXMgbGUgQ29uYyYjMjMzO2RhbnQgJiMyMjQ7IGxhIHImIzIzMzthbGlzYXRpb24gZGUgcHJlc3RhdGlvbnMgZGBhc3Npc3RhbmNlIHRlY2huaXF1ZSBvdSBkZSBtYWludGVuYW5jZSBkdSBMb2dpY2llbC4KKworQ2VwZW5kYW50IGxlIENvbmMmIzIzMztkYW50IHJlc3RlIGxpYnJlIGRlIHByb3Bvc2VyIGNlIHR5cGUgZGUgc2VydmljZXMuIExlcyB0ZXJtZXMgZXQgY29uZGl0aW9ucyBkYHVuZSB0ZWxsZSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBldC9vdSBkYHVuZSB0ZWxsZSBtYWludGVuYW5jZSBzZXJvbnQgYWxvcnMgZCYjMjMzO3Rlcm1pbiYjMjMzO3MgZGFucyB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsuIENlcyBhY3RlcyBkZSBtYWludGVuYW5jZSBldC9vdSBhc3Npc3RhbmNlIHRlY2huaXF1ZSBuYGVuZ2FnZXJvbnQgcXVlIGxhIHNldWxlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgcXVpIGxlcyBwcm9wb3NlLgorCis3LjIgRGUgbSYjMjM0O21lLCB0b3V0IENvbmMmIzIzMztkYW50IGVzdCBsaWJyZSBkZSBwcm9wb3Nlciwgc291cyBzYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7LCAmIzIyNDsgc2VzIGxpY2VuY2kmIzIzMztzIHVuZSBnYXJhbnRpZSwgcXVpIG5gZW5nYWdlcmEgcXVlIGx1aSwgbG9ycyBkZSBsYSByZWRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBldC9vdSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZXQgY2UsIGRhbnMgbGVzIGNvbmRpdGlvbnMgcXVgaWwgc291aGFpdGUuIENldHRlIGdhcmFudGllIGV0IGxlcyBtb2RhbGl0JiMyMzM7cyBmaW5hbmNpJiMyMzI7cmVzIGRlIHNvbiBhcHBsaWNhdGlvbiBmZXJvbnQgbGBvYmpldCBkYHVuIGFjdGUgcyYjMjMzO3BhciYjMjMzOyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBldCBsZSBMaWNlbmNpJiMyMzM7LgorCitBcnRpY2xlIDggLSBSRVNQT05TQUJJTElURQorCis4LjEgU291cyByJiMyMzM7c2VydmUgZGVzIGRpc3Bvc2l0aW9ucyBkZSBsYGFydGljbGUgOC4yLCBsZSBMaWNlbmNpJiMyMzM7IGEgbGEgZmFjdWx0JiMyMzM7LCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBwcm91dmVyIGxhIGZhdXRlIGR1IENvbmMmIzIzMztkYW50IGNvbmNlcm4mIzIzMzssIGRlIHNvbGxpY2l0ZXIgbGEgciYjMjMzO3BhcmF0aW9uIGR1IHByJiMyMzM7anVkaWNlIGRpcmVjdCBxdWBpbCBzdWJpcmFpdCBkdSBmYWl0IGR1IExvZ2ljaWVsIGV0IGRvbnQgaWwgYXBwb3J0ZXJhIGxhIHByZXV2ZS4KKworOC4yIExhIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgZXN0IGxpbWl0JiMyMzM7ZSBhdXggZW5nYWdlbWVudHMgcHJpcyBlbiBhcHBsaWNhdGlvbiBkdSBDb250cmF0IGV0IG5lIHNhdXJhaXQgJiMyMzQ7dHJlIGVuZ2FnJiMyMzM7ZSBlbiByYWlzb24gbm90YW1tZW50OiAoaSkgZGVzIGRvbW1hZ2VzIGR1cyAmIzIyNDsgbGBpbmV4JiMyMzM7Y3V0aW9uLCB0b3RhbGUgb3UgcGFydGllbGxlLCBkZSBzZXMgb2JsaWdhdGlvbnMgcGFyIGxlIExpY2VuY2kmIzIzMzssIChpaSkgZGVzIGRvbW1hZ2VzIGRpcmVjdHMgb3UgaW5kaXJlY3RzIGQmIzIzMztjb3VsYW50IGRlIGxgdXRpbGlzYXRpb24gb3UgZGVzIHBlcmZvcm1hbmNlcyBkdSBMb2dpY2llbCBzdWJpcyBwYXIgbGUgTGljZW5jaSYjMjMzOyBldCAoaWlpKSBwbHVzIGcmIzIzMztuJiMyMzM7cmFsZW1lbnQgZGB1biBxdWVsY29ucXVlIGRvbW1hZ2UgaW5kaXJlY3QuIEVuIHBhcnRpY3VsaWVyLCBsZXMgUGFydGllcyBjb252aWVubmVudCBleHByZXNzJiMyMzM7bWVudCBxdWUgdG91dCBwciYjMjMzO2p1ZGljZSBmaW5hbmNpZXIgb3UgY29tbWVyY2lhbCAocGFyIGV4ZW1wbGUgcGVydGUgZGUgZG9ubiYjMjMzO2VzLCBwZXJ0ZSBkZSBiJiMyMzM7biYjMjMzO2ZpY2VzLCBwZXJ0ZSBkYGV4cGxvaXRhdGlvbiwgcGVydGUgZGUgY2xpZW50JiMyMzI7bGUgb3UgZGUgY29tbWFuZGVzLCBtYW5xdWUgJiMyMjQ7IGdhZ25lciwgdHJvdWJsZSBjb21tZXJjaWFsIHF1ZWxjb25xdWUpIG91IHRvdXRlIGFjdGlvbiBkaXJpZyYjMjMzO2UgY29udHJlIGxlIExpY2VuY2kmIzIzMzsgcGFyIHVuIHRpZXJzLCBjb25zdGl0dWUgdW4gZG9tbWFnZSBpbmRpcmVjdCBldCBuYG91dnJlIHBhcyBkcm9pdCAmIzIyNDsgciYjMjMzO3BhcmF0aW9uIHBhciBsZSBDb25jJiMyMzM7ZGFudC4KKworQXJ0aWNsZSA5IC0gR0FSQU5USUUKKworOS4xIExlIExpY2VuY2kmIzIzMzsgcmVjb25uYSYjMjM4O3QgcXVlIGxgJiMyMzM7dGF0IGFjdHVlbCBkZXMgY29ubmFpc3NhbmNlcyBzY2llbnRpZmlxdWVzIGV0IHRlY2huaXF1ZXMgYXUgbW9tZW50IGRlIGxhIG1pc2UgZW4gY2lyY3VsYXRpb24gZHUgTG9naWNpZWwgbmUgcGVybWV0IHBhcyBkYGVuIHRlc3RlciBldCBkYGVuIHYmIzIzMztyaWZpZXIgdG91dGVzIGxlcyB1dGlsaXNhdGlvbnMgbmkgZGUgZCYjMjMzO3RlY3RlciBsYGV4aXN0ZW5jZSBkYCYjMjMzO3ZlbnR1ZWxzIGQmIzIzMztmYXV0cy4gTGBhdHRlbnRpb24gZHUgTGljZW5jaSYjMjMzOyBhICYjMjMzO3QmIzIzMzsgYXR0aXImIzIzMztlIHN1ciBjZSBwb2ludCBzdXIgbGVzIHJpc3F1ZXMgYXNzb2NpJiMyMzM7cyBhdSBjaGFyZ2VtZW50LCAmIzIyNDsgbGB1dGlsaXNhdGlvbiwgbGEgbW9kaWZpY2F0aW9uIGV0L291IGF1IGQmIzIzMzt2ZWxvcHBlbWVudCBldCAmIzIyNDsgbGEgcmVwcm9kdWN0aW9uIGR1IExvZ2ljaWVsIHF1aSBzb250IHImIzIzMztzZXJ2JiMyMzM7cyAmIzIyNDsgZGVzIHV0aWxpc2F0ZXVycyBhdmVydGlzLgorCitJbCByZWwmIzIzMjt2ZSBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IExpY2VuY2kmIzIzMzsgZGUgY29udHImIzI0NDtsZXIsIHBhciB0b3VzIG1veWVucywgbGBhZCYjMjMzO3F1YXRpb24gZHUgcHJvZHVpdCAmIzIyNDsgc2VzIGJlc29pbnMsIHNvbiBib24gZm9uY3Rpb25uZW1lbnQgZXQgZGUgc2Bhc3N1cmVyIHF1YGlsIG5lIGNhdXNlcmEgcGFzIGRlIGRvbW1hZ2VzIGF1eCBwZXJzb25uZXMgZXQgYXV4IGJpZW5zLgorCis5LjIgTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2NsYXJlIGRlIGJvbm5lIGZvaSAmIzIzNDt0cmUgZW4gZHJvaXQgZGUgY29uYyYjMjMzO2RlciBsYGVuc2VtYmxlIGRlcyBkcm9pdHMgYXR0YWNoJiMyMzM7cyBhdSBMb2dpY2llbCAoY29tcHJlbmFudCBub3RhbW1lbnQgbGVzIGRyb2l0cyB2aXMmIzIzMztzICYjMjI0OyBsYGFydGljbGUgNSkuCisKKzkuMyBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsZSBMb2dpY2llbCBlc3QgZm91cm5pICJlbiBsYCYjMjMzO3RhdCIgcGFyIGxlIENvbmMmIzIzMztkYW50IHNhbnMgYXV0cmUgZ2FyYW50aWUsIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGNlbGxlIHByJiMyMzM7dnVlICYjMjI0OyBsYGFydGljbGUgOS4yIGV0IG5vdGFtbWVudCBzYW5zIGF1Y3VuZSBnYXJhbnRpZSBzdXIgc2EgdmFsZXVyIGNvbW1lcmNpYWxlLCBzb24gY2FyYWN0JiMyMzI7cmUgcyYjMjMzO2N1cmlzJiMyMzM7LCBpbm5vdmFudCBvdSBwZXJ0aW5lbnQuCisKK0VuIHBhcnRpY3VsaWVyLCBsZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMgcXVlIGxlIExvZ2ljaWVsIGVzdCBleGVtcHQgZGBlcnJldXIsIHF1YGlsIGZvbmN0aW9ubmVyYSBzYW5zIGludGVycnVwdGlvbiwgcXVgaWwgc2VyYSBjb21wYXRpYmxlIGF2ZWMgbGAmIzIzMztxdWlwZW1lbnQgZHUgTGljZW5jaSYjMjMzOyBldCBzYSBjb25maWd1cmF0aW9uIGxvZ2ljaWVsbGUgbmkgcXVgaWwgcmVtcGxpcmEgbGVzIGJlc29pbnMgZHUgTGljZW5jaSYjMjMzOy4KKworOS40IExlIENvbmMmIzIzMztkYW50IG5lIGdhcmFudGl0IHBhcywgZGUgbWFuaSYjMjMyO3JlIGV4cHJlc3NlIG91IHRhY2l0ZSwgcXVlIGxlIExvZ2ljaWVsIG5lIHBvcnRlIHBhcyBhdHRlaW50ZSAmIzIyNDsgdW4gcXVlbGNvbnF1ZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGRgdW4gdGllcnMgcG9ydGFudCBzdXIgdW4gYnJldmV0LCB1biBsb2dpY2llbCBvdSBzdXIgdG91dCBhdXRyZSBkcm9pdCBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7LiBBaW5zaSwgbGUgQ29uYyYjMjMzO2RhbnQgZXhjbHV0IHRvdXRlIGdhcmFudGllIGF1IHByb2ZpdCBkdSBMaWNlbmNpJiMyMzM7IGNvbnRyZSBsZXMgYWN0aW9ucyBlbiBjb250cmVmYSYjMjMxO29uIHF1aSBwb3VycmFpZW50ICYjMjM0O3RyZSBkaWxpZ2VudCYjMjMzO2VzIGF1IHRpdHJlIGRlIGxgdXRpbGlzYXRpb24sIGRlIGxhIG1vZGlmaWNhdGlvbiwgZXQgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwuIE4mIzIzMzthbm1vaW5zLCBzaSBkZSB0ZWxsZXMgYWN0aW9ucyBzb250IGV4ZXJjJiMyMzM7ZXMgY29udHJlIGxlIExpY2VuY2kmIzIzMzssIGxlIENvbmMmIzIzMztkYW50IGx1aSBhcHBvcnRlcmEgc29uIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBwb3VyIHNhIGQmIzIzMztmZW5zZS4gQ2V0dGUgYWlkZSB0ZWNobmlxdWUgZXQganVyaWRpcXVlIGVzdCBkJiMyMzM7dGVybWluJiMyMzM7ZSBhdSBjYXMgcGFyIGNhcyBlbnRyZSBsZSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7IGV0IGxlIExpY2VuY2kmIzIzMzsgZGFucyBsZSBjYWRyZSBkYHVuIHByb3RvY29sZSBkYGFjY29yZC4gTGUgQ29uYyYjMjMzO2RhbnQgZCYjMjMzO2dhZ2UgdG91dGUgcmVzcG9uc2FiaWxpdCYjMjMzOyBxdWFudCAmIzIyNDsgbGB1dGlsaXNhdGlvbiBkZSBsYSBkJiMyMzM7bm9taW5hdGlvbiBkdSBMb2dpY2llbCBwYXIgbGUgTGljZW5jaSYjMjMzOy4gQXVjdW5lIGdhcmFudGllIG5gZXN0IGFwcG9ydCYjMjMzO2UgcXVhbnQgJiMyMjQ7IGxgZXhpc3RlbmNlIGRlIGRyb2l0cyBhbnQmIzIzMztyaWV1cnMgc3VyIGxlIG5vbSBkdSBMb2dpY2llbCBldCBzdXIgbGBleGlzdGVuY2UgZGB1bmUgbWFycXVlLgorCitBcnRpY2xlIDEwIC0gUkVTSUxJQVRJT04KKworMTAuMSBFbiBjYXMgZGUgbWFucXVlbWVudCBwYXIgbGUgTGljZW5jaSYjMjMzOyBhdXggb2JsaWdhdGlvbnMgbWlzZXMgJiMyMjQ7IHNhIGNoYXJnZSBwYXIgbGUgQ29udHJhdCwgbGUgQ29uYyYjMjMzO2RhbnQgcG91cnJhIHImIzIzMztzaWxpZXIgZGUgcGxlaW4gZHJvaXQgbGUgQ29udHJhdCB0cmVudGUgKDMwKSBqb3VycyBhcHImIzIzMjtzIG5vdGlmaWNhdGlvbiBhZHJlc3MmIzIzMztlIGF1IExpY2VuY2kmIzIzMzsgZXQgcmVzdCYjMjMzO2Ugc2FucyBlZmZldC4KKworMTAuMiBMZSBMaWNlbmNpJiMyMzM7IGRvbnQgbGUgQ29udHJhdCBlc3QgciYjMjMzO3NpbGkmIzIzMzsgbmBlc3QgcGx1cyBhdXRvcmlzJiMyMzM7ICYjMjI0OyB1dGlsaXNlciwgbW9kaWZpZXIgb3UgZGlzdHJpYnVlciBsZSBMb2dpY2llbC4gQ2VwZW5kYW50LCB0b3V0ZXMgbGVzIGxpY2VuY2VzIHF1YGlsIGF1cmEgY29uYyYjMjMzO2QmIzIzMztlcyBhbnQmIzIzMztyaWV1cmVtZW50ICYjMjI0OyBsYSByJiMyMzM7c2lsaWF0aW9uIGR1IENvbnRyYXQgcmVzdGVyb250IHZhbGlkZXMgc291cyByJiMyMzM7c2VydmUgcXVgZWxsZXMgYWllbnQgJiMyMzM7dCYjMjMzOyBlZmZlY3R1JiMyMzM7ZXMgZW4gY29uZm9ybWl0JiMyMzM7IGF2ZWMgbGUgQ29udHJhdC4KKworQXJ0aWNsZSAxMSAtIERJU1BPU0lUSU9OUyBESVZFUlNFUworCisxMS4xIENBVVNFIEVYVEVSSUVVUkUKKworQXVjdW5lIGRlcyBQYXJ0aWVzIG5lIHNlcmEgcmVzcG9uc2FibGUgZGB1biByZXRhcmQgb3UgZGB1bmUgZCYjMjMzO2ZhaWxsYW5jZSBkYGV4JiMyMzM7Y3V0aW9uIGR1IENvbnRyYXQgcXVpIHNlcmFpdCBkJiMyNTE7ICYjMjI0OyB1biBjYXMgZGUgZm9yY2UgbWFqZXVyZSwgdW4gY2FzIGZvcnR1aXQgb3UgdW5lIGNhdXNlIGV4dCYjMjMzO3JpZXVyZSwgdGVsbGUgcXVlLCBub3RhbW1lbnQsIGxlIG1hdXZhaXMgZm9uY3Rpb25uZW1lbnQgb3UgbGVzIGludGVycnVwdGlvbnMgZHUgciYjMjMzO3NlYXUgJiMyMzM7bGVjdHJpcXVlIG91IGRlIHQmIzIzMztsJiMyMzM7Y29tbXVuaWNhdGlvbiwgbGEgcGFyYWx5c2llIGR1IHImIzIzMztzZWF1IGxpJiMyMzM7ZSAmIzIyNDsgdW5lIGF0dGFxdWUgaW5mb3JtYXRpcXVlLCBsYGludGVydmVudGlvbiBkZXMgYXV0b3JpdCYjMjMzO3MgZ291dmVybmVtZW50YWxlcywgbGVzIGNhdGFzdHJvcGhlcyBuYXR1cmVsbGVzLCBsZXMgZCYjMjMzO2cmIzIyNjt0cyBkZXMgZWF1eCwgbGVzIHRyZW1ibGVtZW50cyBkZSB0ZXJyZSwgbGUgZmV1LCBsZXMgZXhwbG9zaW9ucywgbGVzIGdyJiMyMzI7dmVzIGV0IGxlcyBjb25mbGl0cyBzb2NpYXV4LCBsYCYjMjMzO3RhdCBkZSBndWVycmUuLi4KKworMTEuMiBMZSBmYWl0LCBwYXIgbGB1bmUgb3UgbGBhdXRyZSBkZXMgUGFydGllcywgZGBvbWV0dHJlIGVuIHVuZSBvdSBwbHVzaWV1cnMgb2NjYXNpb25zIGRlIHNlIHByJiMyMzM7dmFsb2lyIGRgdW5lIG91IHBsdXNpZXVycyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCwgbmUgcG91cnJhIGVuIGF1Y3VuIGNhcyBpbXBsaXF1ZXIgcmVub25jaWF0aW9uIHBhciBsYSBQYXJ0aWUgaW50JiMyMzM7cmVzcyYjMjMzO2UgJiMyMjQ7IHNgZW4gcHImIzIzMzt2YWxvaXIgdWx0JiMyMzM7cmlldXJlbWVudC4KKworMTEuMyBMZSBDb250cmF0IGFubnVsZSBldCByZW1wbGFjZSB0b3V0ZSBjb252ZW50aW9uIGFudCYjMjMzO3JpZXVyZSwgJiMyMzM7Y3JpdGUgb3Ugb3JhbGUsIGVudHJlIGxlcyBQYXJ0aWVzIHN1ciBsZSBtJiMyMzQ7bWUgb2JqZXQgZXQgY29uc3RpdHVlIGxgYWNjb3JkIGVudGllciBlbnRyZSBsZXMgUGFydGllcyBzdXIgY2V0IG9iamV0LiBBdWN1bmUgYWRkaXRpb24gb3UgbW9kaWZpY2F0aW9uIGF1eCB0ZXJtZXMgZHUgQ29udHJhdCBuYGF1cmEgZGBlZmZldCAmIzIyNDsgbGAmIzIzMztnYXJkIGRlcyBQYXJ0aWVzICYjMjI0OyBtb2lucyBkYCYjMjM0O3RyZSBmYWl0ZSBwYXIgJiMyMzM7Y3JpdCBldCBzaWduJiMyMzM7ZSBwYXIgbGV1cnMgcmVwciYjMjMzO3NlbnRhbnRzIGQmIzI1MTttZW50IGhhYmlsaXQmIzIzMztzLgorCisxMS40IERhbnMgbGBoeXBvdGgmIzIzMjtzZSBvJiMyNDk7IHVuZSBvdSBwbHVzaWV1cnMgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IHNgYXYmIzIzMjtyZXJhaXQgY29udHJhaXJlICYjMjI0OyB1bmUgbG9pIG91ICYjMjI0OyB1biB0ZXh0ZSBhcHBsaWNhYmxlLCBleGlzdGFudHMgb3UgZnV0dXJzLCBjZXR0ZSBsb2kgb3UgY2UgdGV4dGUgcHImIzIzMzt2YXVkcmFpdCwgZXQgbGVzIFBhcnRpZXMgZmVyYWllbnQgbGVzIGFtZW5kZW1lbnRzIG4mIzIzMztjZXNzYWlyZXMgcG91ciBzZSBjb25mb3JtZXIgJiMyMjQ7IGNldHRlIGxvaSBvdSAmIzIyNDsgY2UgdGV4dGUuIFRvdXRlcyBsZXMgYXV0cmVzIGRpc3Bvc2l0aW9ucyByZXN0ZXJvbnQgZW4gdmlndWV1ci4gRGUgbSYjMjM0O21lLCBsYSBudWxsaXQmIzIzMzssIHBvdXIgcXVlbHF1ZSByYWlzb24gcXVlIGNlIHNvaXQsIGRgdW5lIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBuZSBzYXVyYWl0IGVudHJhJiMyMzg7bmVyIGxhIG51bGxpdCYjMjMzOyBkZSBsYGVuc2VtYmxlIGR1IENvbnRyYXQuCisKKzExLjUgTEFOR1VFCisKK0xlIENvbnRyYXQgZXN0IHImIzIzMztkaWcmIzIzMzsgZW4gbGFuZ3VlIGZyYW4mIzIzMTthaXNlIGV0IGVuIGxhbmd1ZSBhbmdsYWlzZSwgY2VzIGRldXggdmVyc2lvbnMgZmFpc2FudCAmIzIzMztnYWxlbWVudCBmb2kuCisKK0FydGljbGUgMTIgLSBOT1VWRUxMRVMgVkVSU0lPTlMgRFUgQ09OVFJBVAorCisxMi4xIFRvdXRlIHBlcnNvbm5lIGVzdCBhdXRvcmlzJiMyMzM7ZSAmIzIyNDsgY29waWVyIGV0IGRpc3RyaWJ1ZXIgZGVzIGNvcGllcyBkZSBjZSBDb250cmF0LgorCisxMi4yIEFmaW4gZGBlbiBwciYjMjMzO3NlcnZlciBsYSBjb2gmIzIzMztyZW5jZSwgbGUgdGV4dGUgZHUgQ29udHJhdCBlc3QgcHJvdCYjMjMzO2cmIzIzMzsgZXQgbmUgcGV1dCAmIzIzNDt0cmUgbW9kaWZpJiMyMzM7IHF1ZSBwYXIgbGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSwgbGVzcXVlbHMgc2UgciYjMjMzO3NlcnZlbnQgbGUgZHJvaXQgZGUgcHVibGllciBwJiMyMzM7cmlvZGlxdWVtZW50IGRlcyBtaXNlcyAmIzIyNDsgam91ciBvdSBkZSBub3V2ZWxsZXMgdmVyc2lvbnMgZHUgQ29udHJhdCwgcXVpIHBvc3MmIzIzMztkZXJvbnQgY2hhY3VuZSB1biBudW0mIzIzMztybyBkaXN0aW5jdC4gQ2VzIHZlcnNpb25zIHVsdCYjMjMzO3JpZXVyZXMgc2Vyb250IHN1c2NlcHRpYmxlcyBkZSBwcmVuZHJlIGVuIGNvbXB0ZSBkZSBub3V2ZWxsZXMgcHJvYmwmIzIzMzttYXRpcXVlcyByZW5jb250ciYjMjMzO2VzIHBhciBsZXMgbG9naWNpZWxzIGxpYnJlcy4KKworMTIuMyBUb3V0IExvZ2ljaWVsIGRpZmZ1cyYjMjMzOyBzb3VzIHVuZSB2ZXJzaW9uIGRvbm4mIzIzMztlIGR1IENvbnRyYXQgbmUgcG91cnJhIGZhaXJlIGxgb2JqZXQgZGB1bmUgZGlmZnVzaW9uIHVsdCYjMjMzO3JpZXVyZSBxdWUgc291cyBsYSBtJiMyMzQ7bWUgdmVyc2lvbiBkdSBDb250cmF0IG91IHVuZSB2ZXJzaW9uIHBvc3QmIzIzMztyaWV1cmUuCisKK0FydGljbGUgMTMgLSBMT0kgQVBQTElDQUJMRSBFVCBDT01QRVRFTkNFIFRFUlJJVE9SSUFMRQorCisxMy4xIExlIENvbnRyYXQgZXN0IHImIzIzMztnaSBwYXIgbGEgbG9pIGZyYW4mIzIzMTthaXNlLiBMZXMgUGFydGllcyBjb252aWVubmVudCBkZSB0ZW50ZXIgZGUgciYjMjMzO2dsZXIgJiMyMjQ7IGxgYW1pYWJsZSBsZXMgZGlmZiYjMjMzO3JlbmRzIG91IGxpdGlnZXMgcXVpIHZpZW5kcmFpZW50ICYjMjI0OyBzZSBwcm9kdWlyZSBwYXIgc3VpdGUgb3UgJiMyMjQ7IGxgb2NjYXNpb24gZHUgQ29udHJhdC4KKworMTMuMiBBIGQmIzIzMztmYXV0IGRgYWNjb3JkIGFtaWFibGUgZGFucyB1biBkJiMyMzM7bGFpIGRlIGRldXggKDIpIG1vaXMgJiMyMjQ7IGNvbXB0ZXIgZGUgbGV1ciBzdXJ2ZW5hbmNlIGV0IHNhdWYgc2l0dWF0aW9uIHJlbGV2YW50IGRgdW5lIHByb2MmIzIzMztkdXJlIGRgdXJnZW5jZSwgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHNlcm9udCBwb3J0JiMyMzM7cyBwYXIgbGEgUGFydGllIGxhIHBsdXMgZGlsaWdlbnRlIGRldmFudCBsZXMgVHJpYnVuYXV4IGNvbXAmIzIzMzt0ZW50cyBkZSBQYXJpcy4KKworMSBDZUNJTEwgZXN0IHBvdXIgQ2UoYSkgQyhucnMpIEkobnJpYSkgTChvZ2ljaWVsKSBMKGlicmUpCisKK1ZlcnNpb24gMS4wIGR1IDIwMDYtMDktMDUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ0VDSUxMLUMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4ZWY4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NFQ0lMTC1DCkBAIC0wLDAgKzEsMjQxIEBACisKK0NPTlRSQVQgREUgTElDRU5DRSBERSBMT0dJQ0lFTCBMSUJSRSBDZUNJTEwtQworCitBdmVydGlzc2VtZW50CisKK0NlIGNvbnRyYXQgZXN0IHVuZSBsaWNlbmNlIGRlIGxvZ2ljaWVsIGxpYnJlIGlzc3VlIGRgdW5lIGNvbmNlcnRhdGlvbiBlbnRyZSBzZXMgYXV0ZXVycyBhZmluIHF1ZSBsZSByZXNwZWN0IGRlIGRldXggZ3JhbmRzIHByaW5jaXBlcyBwciYjMjMzO3NpZGUgJiMyMjQ7IHNhIHImIzIzMztkYWN0aW9uOgorCitkYHVuZSBwYXJ0LCBsZSByZXNwZWN0IGRlcyBwcmluY2lwZXMgZGUgZGlmZnVzaW9uIGRlcyBsb2dpY2llbHMgbGlicmVzOiBhY2MmIzIzMjtzIGF1IGNvZGUgc291cmNlLCBkcm9pdHMgJiMyMzM7dGVuZHVzIGNvbmYmIzIzMztyJiMyMzM7cyBhdXggdXRpbGlzYXRldXJzLAorZGBhdXRyZSBwYXJ0LCBsYSBkJiMyMzM7c2lnbmF0aW9uIGRgdW4gZHJvaXQgYXBwbGljYWJsZSwgbGUgZHJvaXQgZnJhbiYjMjMxO2FpcywgYXVxdWVsIGVsbGUgZXN0IGNvbmZvcm1lLCB0YW50IGF1IHJlZ2FyZCBkdSBkcm9pdCBkZSBsYSByZXNwb25zYWJpbGl0JiMyMzM7IGNpdmlsZSBxdWUgZHUgZHJvaXQgZGUgbGEgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBldCBkZSBsYSBwcm90ZWN0aW9uIHF1YGlsIG9mZnJlIGF1eCBhdXRldXJzIGV0IHRpdHVsYWlyZXMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggc3VyIHVuIGxvZ2ljaWVsLgorTGVzIGF1dGV1cnMgZGUgbGEgbGljZW5jZSBDZUNJTEwtQzEgc29udDoKKworQ29tbWlzc2FyaWF0ICYjMjI0OyBsYEVuZXJnaWUgQXRvbWlxdWUgLSBDRUEsICYjMjMzO3RhYmxpc3NlbWVudCBwdWJsaWMgZGUgcmVjaGVyY2hlICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUsIHRlY2huaXF1ZSBldCBpbmR1c3RyaWVsLCBkb250IGxlIHNpJiMyMzI7Z2UgZXN0IHNpdHUmIzIzMzsgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcy4KKworQ2VudHJlIE5hdGlvbmFsIGRlIGxhIFJlY2hlcmNoZSBTY2llbnRpZmlxdWUgLSBDTlJTLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNi4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtIElOUklBLCAmIzIzMzt0YWJsaXNzZW1lbnQgcHVibGljICYjMjI0OyBjYXJhY3QmIzIzMjtyZSBzY2llbnRpZmlxdWUgZXQgdGVjaG5vbG9naXF1ZSwgZG9udCBsZSBzaSYjMjMyO2dlIGVzdCBzaXR1JiMyMzM7IERvbWFpbmUgZGUgVm9sdWNlYXUsIFJvY3F1ZW5jb3VydCwgQlAgMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LgorCitQciYjMjMzO2FtYnVsZQorCitDZSBjb250cmF0IGVzdCB1bmUgbGljZW5jZSBkZSBsb2dpY2llbCBsaWJyZSBkb250IGxgb2JqZWN0aWYgZXN0IGRlIGNvbmYmIzIzMztyZXIgYXV4IHV0aWxpc2F0ZXVycyBsYSBsaWJlcnQmIzIzMzsgZGUgbW9kaWZpZXIgZXQgZGUgciYjMjMzO3V0aWxpc2VyIGxlIGxvZ2ljaWVsIHImIzIzMztnaSBwYXIgY2V0dGUgbGljZW5jZS4KKworTGBleGVyY2ljZSBkZSBjZXR0ZSBsaWJlcnQmIzIzMzsgZXN0IGFzc29ydGkgZGB1bmUgb2JsaWdhdGlvbiBkZSByZW1ldHRyZSAmIzIyNDsgbGEgZGlzcG9zaXRpb24gZGUgbGEgY29tbXVuYXV0JiMyMzM7IGxlcyBtb2RpZmljYXRpb25zIGFwcG9ydCYjMjMzO2VzIGF1IGNvZGUgc291cmNlIGR1IGxvZ2ljaWVsIGFmaW4gZGUgY29udHJpYnVlciAmIzIyNDsgc29uICYjMjMzO3ZvbHV0aW9uLgorCitMYGFjY2Vzc2liaWxpdCYjMjMzOyBhdSBjb2RlIHNvdXJjZSBldCBsZXMgZHJvaXRzIGRlIGNvcGllLCBkZSBtb2RpZmljYXRpb24gZXQgZGUgcmVkaXN0cmlidXRpb24gcXVpIGQmIzIzMztjb3VsZW50IGRlIGNlIGNvbnRyYXQgb250IHBvdXIgY29udHJlcGFydGllIGRlIG5gb2ZmcmlyIGF1eCB1dGlsaXNhdGV1cnMgcXVgdW5lIGdhcmFudGllIGxpbWl0JiMyMzM7ZSBldCBkZSBuZSBmYWlyZSBwZXNlciBzdXIgbGBhdXRldXIgZHUgbG9naWNpZWwsIGxlIHRpdHVsYWlyZSBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBldCBsZXMgY29uYyYjMjMzO2RhbnRzIHN1Y2Nlc3NpZnMgcXVgdW5lIHJlc3BvbnNhYmlsaXQmIzIzMzsgcmVzdHJlaW50ZS4KKworQSBjZXQgJiMyMzM7Z2FyZCBsYGF0dGVudGlvbiBkZSBsYHV0aWxpc2F0ZXVyIGVzdCBhdHRpciYjMjMzO2Ugc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sICYjMjI0OyBsYSBtb2RpZmljYXRpb24gZXQvb3UgYXUgZCYjMjMzO3ZlbG9wcGVtZW50IGV0ICYjMjI0OyBsYSByZXByb2R1Y3Rpb24gZHUgbG9naWNpZWwgcGFyIGxgdXRpbGlzYXRldXIgJiMyMzM7dGFudCBkb25uJiMyMzM7IHNhIHNwJiMyMzM7Y2lmaWNpdCYjMjMzOyBkZSBsb2dpY2llbCBsaWJyZSwgcXVpIHBldXQgbGUgcmVuZHJlIGNvbXBsZXhlICYjMjI0OyBtYW5pcHVsZXIgZXQgcXVpIGxlIHImIzIzMztzZXJ2ZSBkb25jICYjMjI0OyBkZXMgZCYjMjMzO3ZlbG9wcGV1cnMgb3UgZGVzIHByb2Zlc3Npb25uZWxzIGF2ZXJ0aXMgcG9zcyYjMjMzO2RhbnQgZGVzIGNvbm5haXNzYW5jZXMgaW5mb3JtYXRpcXVlcyBhcHByb2ZvbmRpZXMuIExlcyB1dGlsaXNhdGV1cnMgc29udCBkb25jIGludml0JiMyMzM7cyAmIzIyNDsgY2hhcmdlciBldCB0ZXN0ZXIgbGBhZCYjMjMzO3F1YXRpb24gZHUgbG9naWNpZWwgJiMyMjQ7IGxldXJzIGJlc29pbnMgZGFucyBkZXMgY29uZGl0aW9ucyBwZXJtZXR0YW50IGRgYXNzdXJlciBsYSBzJiMyMzM7Y3VyaXQmIzIzMzsgZGUgbGV1cnMgc3lzdCYjMjMyO21lcyBldC9vdSBkZSBsZXVycyBkb25uJiMyMzM7ZXMgZXQsIHBsdXMgZyYjMjMzO24mIzIzMztyYWxlbWVudCwgJiMyMjQ7IGxgdXRpbGlzZXIgZXQgbGBleHBsb2l0ZXIgZGFucyBsZXMgbSYjMjM0O21lcyBjb25kaXRpb25zIGRlIHMmIzIzMztjdXJpdCYjMjMzOy4gQ2UgY29udHJhdCBwZXV0ICYjMjM0O3RyZSByZXByb2R1aXQgZXQgZGlmZnVzJiMyMzM7IGxpYnJlbWVudCwgc291cyByJiMyMzM7c2VydmUgZGUgbGUgY29uc2VydmVyIGVuIGxgJiMyMzM7dGF0LCBzYW5zIGFqb3V0IG5pIHN1cHByZXNzaW9uIGRlIGNsYXVzZXMuCisKK0NlIGNvbnRyYXQgZXN0IHN1c2NlcHRpYmxlIGRlIHNgYXBwbGlxdWVyICYjMjI0OyB0b3V0IGxvZ2ljaWVsIGRvbnQgbGUgdGl0dWxhaXJlIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IGQmIzIzMztjaWRlIGRlIHNvdW1ldHRyZSBsYGV4cGxvaXRhdGlvbiBhdXggZGlzcG9zaXRpb25zIHF1YGlsIGNvbnRpZW50LgorCitBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitEYW5zIGNlIGNvbnRyYXQsIGxlcyB0ZXJtZXMgc3VpdmFudHMsIGxvcnNxdWBpbHMgc2Vyb250ICYjMjMzO2NyaXRzIGF2ZWMgdW5lIGxldHRyZSBjYXBpdGFsZSwgYXVyb250IGxhIHNpZ25pZmljYXRpb24gc3VpdmFudGU6CisKK0NvbnRyYXQ6IGQmIzIzMztzaWduZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBkZSBsaWNlbmNlLCBzZXMgJiMyMzM7dmVudHVlbGxlcyB2ZXJzaW9ucyBwb3N0JiMyMzM7cmlldXJlcyBldCBhbm5leGVzLgorCitMb2dpY2llbDogZCYjMjMzO3NpZ25lIGxlIGxvZ2ljaWVsIHNvdXMgc2EgZm9ybWUgZGUgQ29kZSBPYmpldCBldC9vdSBkZSBDb2RlIFNvdXJjZSBldCBsZSBjYXMgJiMyMzM7Y2gmIzIzMzthbnQgc2EgZG9jdW1lbnRhdGlvbiwgZGFucyBsZXVyICYjMjMzO3RhdCBhdSBtb21lbnQgZGUgbGBhY2NlcHRhdGlvbiBkdSBDb250cmF0IHBhciBsZSBMaWNlbmNpJiMyMzM7LgorCitMb2dpY2llbCBJbml0aWFsOiBkJiMyMzM7c2lnbmUgbGUgTG9naWNpZWwgc291cyBzYSBmb3JtZSBkZSBDb2RlIFNvdXJjZSBldCAmIzIzMzt2ZW50dWVsbGVtZW50IGRlIENvZGUgT2JqZXQgZXQgbGUgY2FzICYjMjMzO2NoJiMyMzM7YW50IHNhIGRvY3VtZW50YXRpb24sIGRhbnMgbGV1ciAmIzIzMzt0YXQgYXUgbW9tZW50IGRlIGxldXIgcHJlbWkmIzIzMjtyZSBkaWZmdXNpb24gc291cyBsZXMgdGVybWVzIGR1IENvbnRyYXQuCisKK0xvZ2ljaWVsIE1vZGlmaSYjMjMzOzogZCYjMjMzO3NpZ25lIGxlIExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBwYXIgYXUgbW9pbnMgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UuCisKK0NvZGUgU291cmNlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgaW5zdHJ1Y3Rpb25zIGV0IGRlcyBsaWduZXMgZGUgcHJvZ3JhbW1lIGR1IExvZ2ljaWVsIGV0IGF1cXVlbCBsYGFjYyYjMjMyO3MgZXN0IG4mIzIzMztjZXNzYWlyZSBlbiB2dWUgZGUgbW9kaWZpZXIgbGUgTG9naWNpZWwuCisKK0NvZGUgT2JqZXQ6IGQmIzIzMztzaWduZSBsZXMgZmljaGllcnMgYmluYWlyZXMgaXNzdXMgZGUgbGEgY29tcGlsYXRpb24gZHUgQ29kZSBTb3VyY2UuCisKK1RpdHVsYWlyZTogZCYjMjMzO3NpZ25lIGxlIG91IGxlcyBkJiMyMzM7dGVudGV1cnMgZGVzIGRyb2l0cyBwYXRyaW1vbmlhdXggZGBhdXRldXIgc3VyIGxlIExvZ2ljaWVsIEluaXRpYWwuCisKK0xpY2VuY2kmIzIzMzs6IGQmIzIzMztzaWduZSBsZSBvdSBsZXMgdXRpbGlzYXRldXJzIGR1IExvZ2ljaWVsIGF5YW50IGFjY2VwdCYjMjMzOyBsZSBDb250cmF0LgorCitDb250cmlidXRldXI6IGQmIzIzMztzaWduZSBsZSBMaWNlbmNpJiMyMzM7IGF1dGV1ciBkYGF1IG1vaW5zIHVuZSBDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlLgorCitDb25jJiMyMzM7ZGFudDogZCYjMjMzO3NpZ25lIGxlIFRpdHVsYWlyZSBvdSB0b3V0ZSBwZXJzb25uZSBwaHlzaXF1ZSBvdSBtb3JhbGUgZGlzdHJpYnVhbnQgbGUgTG9naWNpZWwgc291cyBsZSBDb250cmF0LgorCitDb250cmlidXRpb24gSW50JiMyMzM7Z3ImIzIzMztlOiBkJiMyMzM7c2lnbmUgbGBlbnNlbWJsZSBkZXMgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsIHRyYWR1Y3Rpb25zLCBhZGFwdGF0aW9ucyBldC9vdSBub3V2ZWxsZXMgZm9uY3Rpb25uYWxpdCYjMjMzO3MgaW50JiMyMzM7Z3ImIzIzMztlcyBkYW5zIGxlIENvZGUgU291cmNlIHBhciB0b3V0IENvbnRyaWJ1dGV1ci4KKworTW9kdWxlIExpJiMyMzM7OiBkJiMyMzM7c2lnbmUgdW4gZW5zZW1ibGUgZGUgZmljaGllcnMgc291cmNlcyB5IGNvbXByaXMgbGV1ciBkb2N1bWVudGF0aW9uIHF1aSwgc2FucyBtb2RpZmljYXRpb24gZHUgQ29kZSBTb3VyY2UsIHBlcm1ldCBkZSByJiMyMzM7YWxpc2VyIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBvdSBzZXJ2aWNlcyBzdXBwbCYjMjMzO21lbnRhaXJlcyAmIzIyNDsgY2V1eCBmb3VybmlzIHBhciBsZSBMb2dpY2llbC4KKworTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOzogZCYjMjMzO3NpZ25lIHRvdXRlIGNvbWJpbmFpc29uIGR1IExvZ2ljaWVsLCBtb2RpZmkmIzIzMzsgb3Ugbm9uLCBldCBkYHVuIE1vZHVsZSBMaSYjMjMzOy4KKworUGFydGllczogZCYjMjMzO3NpZ25lIGNvbGxlY3RpdmVtZW50IGxlIExpY2VuY2kmIzIzMzsgZXQgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0NlcyB0ZXJtZXMgc2BlbnRlbmRlbnQgYXUgc2luZ3VsaWVyIGNvbW1lIGF1IHBsdXJpZWwuCisKK0FydGljbGUgMiAtIE9CSkVUCisKK0xlIENvbnRyYXQgYSBwb3VyIG9iamV0IGxhIGNvbmNlc3Npb24gcGFyIGxlIENvbmMmIzIzMztkYW50IGF1IExpY2VuY2kmIzIzMzsgZGB1bmUgbGljZW5jZSBub24gZXhjbHVzaXZlLCBjZXNzaWJsZSBldCBtb25kaWFsZSBkdSBMb2dpY2llbCB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGNpLWFwciYjMjMyO3MgJiMyMjQ7IGxgYXJ0aWNsZSA1IHBvdXIgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBwcm90ZWN0aW9uIGRlcyBkcm9pdHMgcG9ydGFudCBzdXIgY2UgTG9naWNpZWwuCisKK0FydGljbGUgMyAtIEFDQ0VQVEFUSU9OCisKKzMuMSBMYGFjY2VwdGF0aW9uIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlcyB0ZXJtZXMgZHUgQ29udHJhdCBlc3QgciYjMjMzO3B1dCYjMjMzO2UgYWNxdWlzZSBkdSBmYWl0IGR1IHByZW1pZXIgZGVzIGZhaXRzIHN1aXZhbnRzOgorCisoaSkgbGUgY2hhcmdlbWVudCBkdSBMb2dpY2llbCBwYXIgdG91dCBtb3llbiBub3RhbW1lbnQgcGFyIHQmIzIzMztsJiMyMzM7Y2hhcmdlbWVudCAmIzIyNDsgcGFydGlyIGRgdW4gc2VydmV1ciBkaXN0YW50IG91IHBhciBjaGFyZ2VtZW50ICYjMjI0OyBwYXJ0aXIgZGB1biBzdXBwb3J0IHBoeXNpcXVlOworKGlpKSBsZSBwcmVtaWVyIGV4ZXJjaWNlIHBhciBsZSBMaWNlbmNpJiMyMzM7IGRlIGxgdW4gcXVlbGNvbnF1ZSBkZXMgZHJvaXRzIGNvbmMmIzIzMztkJiMyMzM7cyBwYXIgbGUgQ29udHJhdC4KKzMuMiBVbiBleGVtcGxhaXJlIGR1IENvbnRyYXQsIGNvbnRlbmFudCBub3RhbW1lbnQgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmIGF1eCBzcCYjMjMzO2NpZmljaXQmIzIzMztzIGR1IExvZ2ljaWVsLCAmIzIyNDsgbGEgcmVzdHJpY3Rpb24gZGUgZ2FyYW50aWUgZXQgJiMyMjQ7IGxhIGxpbWl0YXRpb24gJiMyMjQ7IHVuIHVzYWdlIHBhciBkZXMgdXRpbGlzYXRldXJzIGV4cCYjMjMzO3JpbWVudCYjMjMzO3MgYSAmIzIzMzt0JiMyMzM7IG1pcyAmIzIyNDsgZGlzcG9zaXRpb24gZHUgTGljZW5jaSYjMjMzOyBwciYjMjMzO2FsYWJsZW1lbnQgJiMyMjQ7IHNvbiBhY2NlcHRhdGlvbiB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllICYjMjI0OyBsYGFydGljbGUgMy4xIGNpIGRlc3N1cyBldCBsZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IGVuIGF2b2lyIHByaXMgY29ubmFpc3NhbmNlLgorCitBcnRpY2xlIDQgLSBFTlRSRUUgRU4gVklHVUVVUiBFVCBEVVJFRQorCis0LjEgRU5UUkVFIEVOIFZJR1VFVVIKKworTGUgQ29udHJhdCBlbnRyZSBlbiB2aWd1ZXVyICYjMjI0OyBsYSBkYXRlIGRlIHNvbiBhY2NlcHRhdGlvbiBwYXIgbGUgTGljZW5jaSYjMjMzOyB0ZWxsZSBxdWUgZCYjMjMzO2ZpbmllIGVuIDMuMS4KKworNC4yIERVUkVFCisKK0xlIENvbnRyYXQgcHJvZHVpcmEgc2VzIGVmZmV0cyBwZW5kYW50IHRvdXRlIGxhIGR1ciYjMjMzO2UgbCYjMjMzO2dhbGUgZGUgcHJvdGVjdGlvbiBkZXMgZHJvaXRzIHBhdHJpbW9uaWF1eCBwb3J0YW50IHN1ciBsZSBMb2dpY2llbC4KKworQXJ0aWNsZSA1IC0gRVRFTkRVRSBERVMgRFJPSVRTIENPTkNFREVTCisKK0xlIENvbmMmIzIzMztkYW50IGNvbmMmIzIzMjtkZSBhdSBMaWNlbmNpJiMyMzM7LCBxdWkgYWNjZXB0ZSwgbGVzIGRyb2l0cyBzdWl2YW50cyBzdXIgbGUgTG9naWNpZWwgcG91ciB0b3V0ZXMgZGVzdGluYXRpb25zIGV0IHBvdXIgbGEgZHVyJiMyMzM7ZSBkdSBDb250cmF0IGRhbnMgbGVzIGNvbmRpdGlvbnMgY2ktYXByJiMyMzI7cyBkJiMyMzM7dGFpbGwmIzIzMztlcy4KKworUGFyIGFpbGxldXJzLCBzaSBsZSBDb25jJiMyMzM7ZGFudCBkJiMyMzM7dGllbnQgb3UgdmVuYWl0ICYjMjI0OyBkJiMyMzM7dGVuaXIgdW4gb3UgcGx1c2lldXJzIGJyZXZldHMgZGBpbnZlbnRpb24gcHJvdCYjMjMzO2dlYW50IHRvdXQgb3UgcGFydGllIGRlcyBmb25jdGlvbm5hbGl0JiMyMzM7cyBkdSBMb2dpY2llbCBvdSBkZSBzZXMgY29tcG9zYW50cywgaWwgc2BlbmdhZ2UgJiMyMjQ7IG5lIHBhcyBvcHBvc2VyIGxlcyAmIzIzMzt2ZW50dWVscyBkcm9pdHMgY29uZiYjMjMzO3ImIzIzMztzIHBhciBjZXMgYnJldmV0cyBhdXggTGljZW5jaSYjMjMzO3Mgc3VjY2Vzc2lmcyBxdWkgdXRpbGlzZXJhaWVudCwgZXhwbG9pdGVyYWllbnQgb3UgbW9kaWZpZXJhaWVudCBsZSBMb2dpY2llbC4gRW4gY2FzIGRlIGNlc3Npb24gZGUgY2VzIGJyZXZldHMsIGxlIENvbmMmIzIzMztkYW50IHNgZW5nYWdlICYjMjI0OyBmYWlyZSByZXByZW5kcmUgbGVzIG9ibGlnYXRpb25zIGR1IHByJiMyMzM7c2VudCBhbGluJiMyMzM7YSBhdXggY2Vzc2lvbm5haXJlcy4KKworNS4xIERST0lUIERgVVRJTElTQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIgbGUgTG9naWNpZWwsIHNhbnMgcmVzdHJpY3Rpb24gcXVhbnQgYXV4IGRvbWFpbmVzIGRgYXBwbGljYXRpb24sICYjMjMzO3RhbnQgY2ktYXByJiMyMzI7cyBwciYjMjMzO2NpcyYjMjMzOyBxdWUgY2VsYSBjb21wb3J0ZToKKworbGEgcmVwcm9kdWN0aW9uIHBlcm1hbmVudGUgb3UgcHJvdmlzb2lyZSBkdSBMb2dpY2llbCBlbiB0b3V0IG91IHBhcnRpZSBwYXIgdG91dCBtb3llbiBldCBzb3VzIHRvdXRlIGZvcm1lLgorCitsZSBjaGFyZ2VtZW50LCBsYGFmZmljaGFnZSwgbGBleCYjMjMzO2N1dGlvbiwgb3UgbGUgc3RvY2thZ2UgZHUgTG9naWNpZWwgc3VyIHRvdXQgc3VwcG9ydC4KKworbGEgcG9zc2liaWxpdCYjMjMzOyBkYGVuIG9ic2VydmVyLCBkYGVuICYjMjMzO3R1ZGllciwgb3UgZGBlbiB0ZXN0ZXIgbGUgZm9uY3Rpb25uZW1lbnQgYWZpbiBkZSBkJiMyMzM7dGVybWluZXIgbGVzIGlkJiMyMzM7ZXMgZXQgcHJpbmNpcGVzIHF1aSBzb250ICYjMjI0OyBsYSBiYXNlIGRlIG5gaW1wb3J0ZSBxdWVsICYjMjMzO2wmIzIzMzttZW50IGRlIGNlIExvZ2ljaWVsOyBldCBjZWNpLCBsb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgZWZmZWN0dWUgdG91dGUgb3AmIzIzMztyYXRpb24gZGUgY2hhcmdlbWVudCwgZGBhZmZpY2hhZ2UsIGRgZXgmIzIzMztjdXRpb24sIGRlIHRyYW5zbWlzc2lvbiBvdSBkZSBzdG9ja2FnZSBkdSBMb2dpY2llbCBxdWBpbCBlc3QgZW4gZHJvaXQgZGBlZmZlY3R1ZXIgZW4gdmVydHUgZHUgQ29udHJhdC4KKworNS4yIERST0lUIERFIE1PRElGSUNBVElPTgorCitMZSBkcm9pdCBkZSBtb2RpZmljYXRpb24gY29tcG9ydGUgbGUgZHJvaXQgZGUgdHJhZHVpcmUsIGRgYWRhcHRlciwgZGBhcnJhbmdlciBvdSBkYGFwcG9ydGVyIHRvdXRlIGF1dHJlIG1vZGlmaWNhdGlvbiBhdSBMb2dpY2llbCBldCBsZSBkcm9pdCBkZSByZXByb2R1aXJlIGxlIGxvZ2ljaWVsIGVuIHImIzIzMztzdWx0YW50LiBJbCBjb21wcmVuZCBlbiBwYXJ0aWN1bGllciBsZSBkcm9pdCBkZSBjciYjMjMzO2VyIHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsuCisKK0xlIExpY2VuY2kmIzIzMzsgZXN0IGF1dG9yaXMmIzIzMzsgJiMyMjQ7IGFwcG9ydGVyIHRvdXRlIG1vZGlmaWNhdGlvbiBhdSBMb2dpY2llbCBzb3VzIHImIzIzMztzZXJ2ZSBkZSBtZW50aW9ubmVyLCBkZSBmYSYjMjMxO29uIGV4cGxpY2l0ZSwgc29uIG5vbSBlbiB0YW50IHF1YGF1dGV1ciBkZSBjZXR0ZSBtb2RpZmljYXRpb24gZXQgbGEgZGF0ZSBkZSBjciYjMjMzO2F0aW9uIGRlIGNlbGxlLWNpLgorCis1LjMgRFJPSVQgREUgRElTVFJJQlVUSU9OCisKK0xlIGRyb2l0IGRlIGRpc3RyaWJ1dGlvbiBjb21wb3J0ZSBub3RhbW1lbnQgbGUgZHJvaXQgZGUgZGlmZnVzZXIsIGRlIHRyYW5zbWV0dHJlIGV0IGRlIGNvbW11bmlxdWVyIGxlIExvZ2ljaWVsIGF1IHB1YmxpYyBzdXIgdG91dCBzdXBwb3J0IGV0IHBhciB0b3V0IG1veWVuIGFpbnNpIHF1ZSBsZSBkcm9pdCBkZSBtZXR0cmUgc3VyIGxlIG1hcmNoJiMyMzM7ICYjMjI0OyB0aXRyZSBvbiYjMjMzO3JldXggb3UgZ3JhdHVpdCwgdW4gb3UgZGVzIGV4ZW1wbGFpcmVzIGR1IExvZ2ljaWVsIHBhciB0b3V0IHByb2MmIzIzMztkJiMyMzM7LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZHUgTG9naWNpZWwsIG1vZGlmaSYjMjMzOyBvdSBub24sICYjMjI0OyBkZXMgdGllcnMgZGFucyBsZXMgY29uZGl0aW9ucyBjaS1hcHImIzIzMjtzIGQmIzIzMzt0YWlsbCYjMjMzO2VzLgorCis1LjMuMSBESVNUUklCVVRJT04gRFUgTE9HSUNJRUwgU0FOUyBNT0RJRklDQVRJT04KKworTGUgTGljZW5jaSYjMjMzOyBlc3QgYXV0b3JpcyYjMjMzOyAmIzIyNDsgZGlzdHJpYnVlciBkZXMgY29waWVzIGNvbmZvcm1lcyBkdSBMb2dpY2llbCwgc291cyBmb3JtZSBkZSBDb2RlIFNvdXJjZSBvdSBkZSBDb2RlIE9iamV0LCAmIzIyNDsgY29uZGl0aW9uIHF1ZSBjZXR0ZSBkaXN0cmlidXRpb24gcmVzcGVjdGUgbGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0IGRhbnMgbGV1ciB0b3RhbGl0JiMyMzM7IGV0IHNvaXQgYWNjb21wYWduJiMyMzM7ZToKKworZGB1biBleGVtcGxhaXJlIGR1IENvbnRyYXQsCisKK2RgdW4gYXZlcnRpc3NlbWVudCByZWxhdGlmICYjMjI0OyBsYSByZXN0cmljdGlvbiBkZSBnYXJhbnRpZSBldCBkZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHRlbGxlIHF1ZSBwciYjMjMzO3Z1ZSBhdXggYXJ0aWNsZXMgOCBldCA5LAorCitldCBxdWUsIGRhbnMgbGUgY2FzIG8mIzI0OTsgc2V1bCBsZSBDb2RlIE9iamV0IGR1IExvZ2ljaWVsIGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgYXUgQ29kZSBTb3VyY2UgY29tcGxldCBkdSBMb2dpY2llbCBwZW5kYW50IGF1IG1vaW5zIHRvdXRlIGxhIGR1ciYjMjMzO2UgZGUgc2EgZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IENvZGUgU291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjIgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIE1PRElGSUUKKworTG9yc3F1ZSBsZSBMaWNlbmNpJiMyMzM7IGFwcG9ydGUgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2UgYXUgTG9naWNpZWwsIGxlcyBjb25kaXRpb25zIGRlIGRpc3RyaWJ1dGlvbiBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgZW4gciYjMjMzO3N1bHRhbnQgc29udCBhbG9ycyBzb3VtaXNlcyAmIzIyNDsgbGBpbnQmIzIzMztncmFsaXQmIzIzMzsgZGVzIGRpc3Bvc2l0aW9ucyBkdSBDb250cmF0LgorCitMZSBMaWNlbmNpJiMyMzM7IGVzdCBhdXRvcmlzJiMyMzM7ICYjMjI0OyBkaXN0cmlidWVyIGxlIExvZ2ljaWVsIE1vZGlmaSYjMjMzOyBzb3VzIGZvcm1lIGRlIGNvZGUgc291cmNlIG91IGRlIGNvZGUgb2JqZXQsICYjMjI0OyBjb25kaXRpb24gcXVlIGNldHRlIGRpc3RyaWJ1dGlvbiByZXNwZWN0ZSBsZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgZGFucyBsZXVyIHRvdGFsaXQmIzIzMzsgZXQgc29pdCBhY2NvbXBhZ24mIzIzMztlOgorCitkYHVuIGV4ZW1wbGFpcmUgZHUgQ29udHJhdCwKKworZGB1biBhdmVydGlzc2VtZW50IHJlbGF0aWYgJiMyMjQ7IGxhIHJlc3RyaWN0aW9uIGRlIGdhcmFudGllIGV0IGRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgZHUgQ29uYyYjMjMzO2RhbnQgdGVsbGUgcXVlIHByJiMyMzM7dnVlIGF1eCBhcnRpY2xlcyA4IGV0IDksCisKK2V0IHF1ZSwgZGFucyBsZSBjYXMgbyYjMjQ5OyBzZXVsIGxlIGNvZGUgb2JqZXQgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGVzdCByZWRpc3RyaWJ1JiMyMzM7LCBsZSBMaWNlbmNpJiMyMzM7IHBlcm1ldHRlIHVuIGFjYyYjMjMyO3MgZWZmZWN0aWYgJiMyMjQ7IHNvbiBjb2RlIHNvdXJjZSBjb21wbGV0IHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBzYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7LCAmIzIzMzt0YW50IGVudGVuZHUgcXVlIGxlIGNvJiMyNTE7dCBhZGRpdGlvbm5lbCBkYGFjcXVpc2l0aW9uIGR1IGNvZGUgc291cmNlIG5lIGRldnJhIHBhcyBleGMmIzIzMztkZXIgbGUgc2ltcGxlIGNvJiMyNTE7dCBkZSB0cmFuc2ZlcnQgZGVzIGRvbm4mIzIzMztlcy4KKworNS4zLjMgRElTVFJJQlVUSU9OIERVIExPR0lDSUVMIERFUklWRQorCitMb3JzcXVlIGxlIExpY2VuY2kmIzIzMzsgY3ImIzIzMztlIHVuIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzssIGNlIExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgcGV1dCAmIzIzNDt0cmUgZGlzdHJpYnUmIzIzMzsgc291cyB1biBjb250cmF0IGRlIGxpY2VuY2UgYXV0cmUgcXVlIGxlIHByJiMyMzM7c2VudCBDb250cmF0ICYjMjI0OyBjb25kaXRpb24gZGUgcmVzcGVjdGVyIGxlcyBvYmxpZ2F0aW9ucyBkZSBtZW50aW9uIGRlcyBkcm9pdHMgc3VyIGxlIExvZ2ljaWVsIHRlbGxlcyBxdWUgZCYjMjMzO2ZpbmllcyAmIzIyNDsgbGBhcnRpY2xlIDYuNC4gRGFucyBsZSBjYXMgbyYjMjQ5OyBsYSBjciYjMjMzO2F0aW9uIGR1IExvZ2ljaWVsIEQmIzIzMztyaXYmIzIzMzsgYSBuJiMyMzM7Y2Vzc2l0JiMyMzM7IHVuZSBtb2RpZmljYXRpb24gZHUgQ29kZSBTb3VyY2UgbGUgbGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgY2UgcXVlOgorCitsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgY29ycmVzcG9uZGFudCAmIzIyNDsgY2V0dGUgbW9kaWZpY2F0aW9uIHNvaXQgciYjMjMzO2dpIHBhciBsZSBwciYjMjMzO3NlbnQgQ29udHJhdCwKK2xlcyBDb250cmlidXRpb25zIEludCYjMjMzO2dyJiMyMzM7ZXMgZG9udCBsZSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgciYjMjMzO3N1bHRlIHNvaWVudCBjbGFpcmVtZW50IGlkZW50aWZpJiMyMzM7ZXMgZXQgZG9jdW1lbnQmIzIzMztlcywKK2xlIExpY2VuY2kmIzIzMzsgcGVybWV0dGUgdW4gYWNjJiMyMzI7cyBlZmZlY3RpZiBhdSBjb2RlIHNvdXJjZSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzssIHBlbmRhbnQgYXUgbW9pbnMgdG91dGUgbGEgZHVyJiMyMzM7ZSBkZSBsYSBkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOywgZGUgdGVsbGUgc29ydGUgcXVlIGNlcyBtb2RpZmljYXRpb25zIHB1aXNzZW50ICYjMjM0O3RyZSByZXByaXNlcyBkYW5zIHVuZSB2ZXJzaW9uIHVsdCYjMjMzO3JpZXVyZSBkdSBMb2dpY2llbCwgJiMyMzM7dGFudCBlbnRlbmR1IHF1ZSBsZSBjbyYjMjUxO3QgYWRkaXRpb25uZWwgZGBhY3F1aXNpdGlvbiBkdSBjb2RlIHNvdXJjZSBkdSBMb2dpY2llbCBNb2RpZmkmIzIzMzsgbmUgZGV2cmEgcGFzIGV4YyYjMjMzO2RlciBsZSBzaW1wbGUgY28mIzI1MTt0IGR1IHRyYW5zZmVydCBkZXMgZG9ubiYjMjMzO2VzLgorNS4zLjQgQ09NUEFUSUJJTElURSBBVkVDIExBIExJQ0VOQ0UgQ2VDSUxMCisKK0xvcnNxdWB1biBMb2dpY2llbCBNb2RpZmkmIzIzMzsgY29udGllbnQgdW5lIENvbnRyaWJ1dGlvbiBJbnQmIzIzMztnciYjMjMzO2Ugc291bWlzZSBhdSBjb250cmF0IGRlIGxpY2VuY2UgQ2VDSUxMLCBvdSBsb3JzcXVgdW4gTG9naWNpZWwgRCYjMjMzO3JpdiYjMjMzOyBjb250aWVudCB1biBNb2R1bGUgTGkmIzIzMzsgc291bWlzIGF1IGNvbnRyYXQgZGUgbGljZW5jZSBDZUNJTEwsIGxlcyBzdGlwdWxhdGlvbnMgcHImIzIzMzt2dWVzIGF1IHRyb2lzaSYjMjMyO21lIGl0ZW0gZGUgbGBhcnRpY2xlIDYuNCBzb250IGZhY3VsdGF0aXZlcy4KKworQXJ0aWNsZSA2IC0gUFJPUFJJRVRFIElOVEVMTEVDVFVFTExFCisKKzYuMSBTVVIgTEUgTE9HSUNJRUwgSU5JVElBTAorCitMZSBUaXR1bGFpcmUgZXN0IGQmIzIzMzt0ZW50ZXVyIGRlcyBkcm9pdHMgcGF0cmltb25pYXV4IHN1ciBsZSBMb2dpY2llbCBJbml0aWFsLiBUb3V0ZSB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCBJbml0aWFsIGVzdCBzb3VtaXNlIGF1IHJlc3BlY3QgZGVzIGNvbmRpdGlvbnMgZGFucyBsZXNxdWVsbGVzIGxlIFRpdHVsYWlyZSBhIGNob2lzaSBkZSBkaWZmdXNlciBzb24gb2V1dnJlIGV0IG51bCBhdXRyZSBuYGEgbGEgZmFjdWx0JiMyMzM7IGRlIG1vZGlmaWVyIGxlcyBjb25kaXRpb25zIGRlIGRpZmZ1c2lvbiBkZSBjZSBMb2dpY2llbCBJbml0aWFsLgorCitMZSBUaXR1bGFpcmUgc2BlbmdhZ2UgJiMyMjQ7IGNlIHF1ZSBsZSBMb2dpY2llbCBJbml0aWFsIHJlc3RlIGF1IG1vaW5zIHImIzIzMztnaSBwYXIgbGUgQ29udHJhdCBldCBjZSwgcG91ciBsYSBkdXImIzIzMztlIHZpcyYjMjMzO2UgJiMyMjQ7IGxgYXJ0aWNsZSA0LjIuCisKKzYuMiBTVVIgTEVTIENPTlRSSUJVVElPTlMgSU5URUdSRUVTCisKK0xlIExpY2VuY2kmIzIzMzsgcXVpIGEgZCYjMjMzO3ZlbG9wcCYjMjMzOyB1bmUgQ29udHJpYnV0aW9uIEludCYjMjMzO2dyJiMyMzM7ZSBlc3QgdGl0dWxhaXJlIHN1ciBjZWxsZS1jaSBkZXMgZHJvaXRzIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZGFucyBsZXMgY29uZGl0aW9ucyBkJiMyMzM7ZmluaWVzIHBhciBsYSBsJiMyMzM7Z2lzbGF0aW9uIGFwcGxpY2FibGUuCisKKzYuMyBTVVIgTEVTIE1PRFVMRVMgTElFUworCitMZSBMaWNlbmNpJiMyMzM7IHF1aSBhIGQmIzIzMzt2ZWxvcHAmIzIzMzsgdW4gTW9kdWxlIExpJiMyMzM7IGVzdCB0aXR1bGFpcmUgc3VyIGNlbHVpLWNpIGRlcyBkcm9pdHMgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgcGFyIGxhIGwmIzIzMztnaXNsYXRpb24gYXBwbGljYWJsZSBldCByZXN0ZSBsaWJyZSBkdSBjaG9peCBkdSBjb250cmF0IHImIzIzMztnaXNzYW50IHNhIGRpZmZ1c2lvbiBkYW5zIGxlcyBjb25kaXRpb25zIGQmIzIzMztmaW5pZXMgJiMyMjQ7IGxgYXJ0aWNsZSA1LjMuMy4KKworNi40IE1FTlRJT05TIERFUyBEUk9JVFMKKworTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSBleHByZXNzJiMyMzM7bWVudDoKKworJiMyMjQ7IG5lIHBhcyBzdXBwcmltZXIgb3UgbW9kaWZpZXIgZGUgcXVlbHF1ZSBtYW5pJiMyMzI7cmUgcXVlIGNlIHNvaXQgbGVzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgYXBwb3MmIzIzMztlcyBzdXIgbGUgTG9naWNpZWw7CisKKyYjMjI0OyByZXByb2R1aXJlICYjMjI0OyBsYGlkZW50aXF1ZSBsZXNkaXRlcyBtZW50aW9ucyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIHN1ciBsZXMgY29waWVzIGR1IExvZ2ljaWVsIG1vZGlmaSYjMjMzOyBvdSBub247CisKKyYjMjI0OyBmYWlyZSBlbiBzb3J0ZSBxdWUgbGB1dGlsaXNhdGlvbiBkdSBMb2dpY2llbCwgc2VzIG1lbnRpb25zIGRlIHByb3ByaSYjMjMzO3QmIzIzMzsgaW50ZWxsZWN0dWVsbGUgZXQgbGUgZmFpdCBxdWBpbCBlc3QgciYjMjMzO2dpIHBhciBsZSBDb250cmF0IHNvaWVudCBpbmRpcXUmIzIzMztzIGRhbnMgdW4gdGV4dGUgZmFjaWxlbWVudCBhY2Nlc3NpYmxlIG5vdGFtbWVudCBkZXB1aXMgbGBpbnRlcmZhY2UgZGUgdG91dCBMb2dpY2llbCBEJiMyMzM7cml2JiMyMzM7LgorTGUgTGljZW5jaSYjMjMzOyBzYGVuZ2FnZSAmIzIyNDsgbmUgcGFzIHBvcnRlciBhdHRlaW50ZSwgZGlyZWN0ZW1lbnQgb3UgaW5kaXJlY3RlbWVudCwgYXV4IGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycyBzdXIgbGUgTG9naWNpZWwgZXQgJiMyMjQ7IHByZW5kcmUsIGxlIGNhcyAmIzIzMztjaCYjMjMzO2FudCwgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZSBzb24gcGVyc29ubmVsIHRvdXRlcyBsZXMgbWVzdXJlcyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgYXNzdXJlciBsZSByZXNwZWN0IGRlcyBkaXRzIGRyb2l0cyBkZSBwcm9wcmkmIzIzMzt0JiMyMzM7IGludGVsbGVjdHVlbGxlIGR1IFRpdHVsYWlyZSBldC9vdSBkZXMgQ29udHJpYnV0ZXVycy4KKworQXJ0aWNsZSA3IC0gU0VSVklDRVMgQVNTT0NJRVMKKworNy4xIExlIENvbnRyYXQgbmBvYmxpZ2UgZW4gYXVjdW4gY2FzIGxlIENvbmMmIzIzMztkYW50ICYjMjI0OyBsYSByJiMyMzM7YWxpc2F0aW9uIGRlIHByZXN0YXRpb25zIGRgYXNzaXN0YW5jZSB0ZWNobmlxdWUgb3UgZGUgbWFpbnRlbmFuY2UgZHUgTG9naWNpZWwuCisKK0NlcGVuZGFudCBsZSBDb25jJiMyMzM7ZGFudCByZXN0ZSBsaWJyZSBkZSBwcm9wb3NlciBjZSB0eXBlIGRlIHNlcnZpY2VzLiBMZXMgdGVybWVzIGV0IGNvbmRpdGlvbnMgZGB1bmUgdGVsbGUgYXNzaXN0YW5jZSB0ZWNobmlxdWUgZXQvb3UgZGB1bmUgdGVsbGUgbWFpbnRlbmFuY2Ugc2Vyb250IGFsb3JzIGQmIzIzMzt0ZXJtaW4mIzIzMztzIGRhbnMgdW4gYWN0ZSBzJiMyMzM7cGFyJiMyMzM7LiBDZXMgYWN0ZXMgZGUgbWFpbnRlbmFuY2UgZXQvb3UgYXNzaXN0YW5jZSB0ZWNobmlxdWUgbmBlbmdhZ2Vyb250IHF1ZSBsYSBzZXVsZSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IHF1aSBsZXMgcHJvcG9zZS4KKworNy4yIERlIG0mIzIzNDttZSwgdG91dCBDb25jJiMyMzM7ZGFudCBlc3QgbGlicmUgZGUgcHJvcG9zZXIsIHNvdXMgc2Egc2V1bGUgcmVzcG9uc2FiaWxpdCYjMjMzOywgJiMyMjQ7IHNlcyBsaWNlbmNpJiMyMzM7cyB1bmUgZ2FyYW50aWUsIHF1aSBuYGVuZ2FnZXJhIHF1ZSBsdWksIGxvcnMgZGUgbGEgcmVkaXN0cmlidXRpb24gZHUgTG9naWNpZWwgZXQvb3UgZHUgTG9naWNpZWwgTW9kaWZpJiMyMzM7IGV0IGNlLCBkYW5zIGxlcyBjb25kaXRpb25zIHF1YGlsIHNvdWhhaXRlLiBDZXR0ZSBnYXJhbnRpZSBldCBsZXMgbW9kYWxpdCYjMjMzO3MgZmluYW5jaSYjMjMyO3JlcyBkZSBzb24gYXBwbGljYXRpb24gZmVyb250IGxgb2JqZXQgZGB1biBhY3RlIHMmIzIzMztwYXImIzIzMzsgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgZXQgbGUgTGljZW5jaSYjMjMzOy4KKworQXJ0aWNsZSA4IC0gUkVTUE9OU0FCSUxJVEUKKworOC4xIFNvdXMgciYjMjMzO3NlcnZlIGRlcyBkaXNwb3NpdGlvbnMgZGUgbGBhcnRpY2xlIDguMiwgbGUgTGljZW5jaSYjMjMzOyBhIGxhIGZhY3VsdCYjMjMzOywgc291cyByJiMyMzM7c2VydmUgZGUgcHJvdXZlciBsYSBmYXV0ZSBkdSBDb25jJiMyMzM7ZGFudCBjb25jZXJuJiMyMzM7LCBkZSBzb2xsaWNpdGVyIGxhIHImIzIzMztwYXJhdGlvbiBkdSBwciYjMjMzO2p1ZGljZSBkaXJlY3QgcXVgaWwgc3ViaXJhaXQgZHUgZmFpdCBkdSBMb2dpY2llbCBldCBkb250IGlsIGFwcG9ydGVyYSBsYSBwcmV1dmUuCisKKzguMiBMYSByZXNwb25zYWJpbGl0JiMyMzM7IGR1IENvbmMmIzIzMztkYW50IGVzdCBsaW1pdCYjMjMzO2UgYXV4IGVuZ2FnZW1lbnRzIHByaXMgZW4gYXBwbGljYXRpb24gZHUgQ29udHJhdCBldCBuZSBzYXVyYWl0ICYjMjM0O3RyZSBlbmdhZyYjMjMzO2UgZW4gcmFpc29uIG5vdGFtbWVudDogKGkpIGRlcyBkb21tYWdlcyBkdXMgJiMyMjQ7IGxgaW5leCYjMjMzO2N1dGlvbiwgdG90YWxlIG91IHBhcnRpZWxsZSwgZGUgc2VzIG9ibGlnYXRpb25zIHBhciBsZSBMaWNlbmNpJiMyMzM7LCAoaWkpIGRlcyBkb21tYWdlcyBkaXJlY3RzIG91IGluZGlyZWN0cyBkJiMyMzM7Y291bGFudCBkZSBsYHV0aWxpc2F0aW9uIG91IGRlcyBwZXJmb3JtYW5jZXMgZHUgTG9naWNpZWwgc3ViaXMgcGFyIGxlIExpY2VuY2kmIzIzMzsgZXQgKGlpaSkgcGx1cyBnJiMyMzM7biYjMjMzO3JhbGVtZW50IGRgdW4gcXVlbGNvbnF1ZSBkb21tYWdlIGluZGlyZWN0LiBFbiBwYXJ0aWN1bGllciwgbGVzIFBhcnRpZXMgY29udmllbm5lbnQgZXhwcmVzcyYjMjMzO21lbnQgcXVlIHRvdXQgcHImIzIzMztqdWRpY2UgZmluYW5jaWVyIG91IGNvbW1lcmNpYWwgKHBhciBleGVtcGxlIHBlcnRlIGRlIGRvbm4mIzIzMztlcywgcGVydGUgZGUgYiYjMjMzO24mIzIzMztmaWNlcywgcGVydGUgZGBleHBsb2l0YXRpb24sIHBlcnRlIGRlIGNsaWVudCYjMjMyO2xlIG91IGRlIGNvbW1hbmRlcywgbWFucXVlICYjMjI0OyBnYWduZXIsIHRyb3VibGUgY29tbWVyY2lhbCBxdWVsY29ucXVlKSBvdSB0b3V0ZSBhY3Rpb24gZGlyaWcmIzIzMztlIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7IHBhciB1biB0aWVycywgY29uc3RpdHVlIHVuIGRvbW1hZ2UgaW5kaXJlY3QgZXQgbmBvdXZyZSBwYXMgZHJvaXQgJiMyMjQ7IHImIzIzMztwYXJhdGlvbiBwYXIgbGUgQ29uYyYjMjMzO2RhbnQuCisKK0FydGljbGUgOSAtIEdBUkFOVElFCisKKzkuMSBMZSBMaWNlbmNpJiMyMzM7IHJlY29ubmEmIzIzODt0IHF1ZSBsYCYjMjMzO3RhdCBhY3R1ZWwgZGVzIGNvbm5haXNzYW5jZXMgc2NpZW50aWZpcXVlcyBldCB0ZWNobmlxdWVzIGF1IG1vbWVudCBkZSBsYSBtaXNlIGVuIGNpcmN1bGF0aW9uIGR1IExvZ2ljaWVsIG5lIHBlcm1ldCBwYXMgZGBlbiB0ZXN0ZXIgZXQgZGBlbiB2JiMyMzM7cmlmaWVyIHRvdXRlcyBsZXMgdXRpbGlzYXRpb25zIG5pIGRlIGQmIzIzMzt0ZWN0ZXIgbGBleGlzdGVuY2UgZGAmIzIzMzt2ZW50dWVscyBkJiMyMzM7ZmF1dHMuIExgYXR0ZW50aW9uIGR1IExpY2VuY2kmIzIzMzsgYSAmIzIzMzt0JiMyMzM7IGF0dGlyJiMyMzM7ZSBzdXIgY2UgcG9pbnQgc3VyIGxlcyByaXNxdWVzIGFzc29jaSYjMjMzO3MgYXUgY2hhcmdlbWVudCwgJiMyMjQ7IGxgdXRpbGlzYXRpb24sIGxhIG1vZGlmaWNhdGlvbiBldC9vdSBhdSBkJiMyMzM7dmVsb3BwZW1lbnQgZXQgJiMyMjQ7IGxhIHJlcHJvZHVjdGlvbiBkdSBMb2dpY2llbCBxdWkgc29udCByJiMyMzM7c2VydiYjMjMzO3MgJiMyMjQ7IGRlcyB1dGlsaXNhdGV1cnMgYXZlcnRpcy4KKworSWwgcmVsJiMyMzI7dmUgZGUgbGEgcmVzcG9uc2FiaWxpdCYjMjMzOyBkdSBMaWNlbmNpJiMyMzM7IGRlIGNvbnRyJiMyNDQ7bGVyLCBwYXIgdG91cyBtb3llbnMsIGxgYWQmIzIzMztxdWF0aW9uIGR1IHByb2R1aXQgJiMyMjQ7IHNlcyBiZXNvaW5zLCBzb24gYm9uIGZvbmN0aW9ubmVtZW50IGV0IGRlIHNgYXNzdXJlciBxdWBpbCBuZSBjYXVzZXJhIHBhcyBkZSBkb21tYWdlcyBhdXggcGVyc29ubmVzIGV0IGF1eCBiaWVucy4KKworOS4yIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztjbGFyZSBkZSBib25uZSBmb2kgJiMyMzQ7dHJlIGVuIGRyb2l0IGRlIGNvbmMmIzIzMztkZXIgbGBlbnNlbWJsZSBkZXMgZHJvaXRzIGF0dGFjaCYjMjMzO3MgYXUgTG9naWNpZWwgKGNvbXByZW5hbnQgbm90YW1tZW50IGxlcyBkcm9pdHMgdmlzJiMyMzM7cyAmIzIyNDsgbGBhcnRpY2xlIDUpLgorCis5LjMgTGUgTGljZW5jaSYjMjMzOyByZWNvbm5hJiMyMzg7dCBxdWUgbGUgTG9naWNpZWwgZXN0IGZvdXJuaSAiZW4gbGAmIzIzMzt0YXQiIHBhciBsZSBDb25jJiMyMzM7ZGFudCBzYW5zIGF1dHJlIGdhcmFudGllLCBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBjZWxsZSBwciYjMjMzO3Z1ZSAmIzIyNDsgbGBhcnRpY2xlIDkuMiBldCBub3RhbW1lbnQgc2FucyBhdWN1bmUgZ2FyYW50aWUgc3VyIHNhIHZhbGV1ciBjb21tZXJjaWFsZSwgc29uIGNhcmFjdCYjMjMyO3JlIHMmIzIzMztjdXJpcyYjMjMzOywgaW5ub3ZhbnQgb3UgcGVydGluZW50LgorCitFbiBwYXJ0aWN1bGllciwgbGUgQ29uYyYjMjMzO2RhbnQgbmUgZ2FyYW50aXQgcGFzIHF1ZSBsZSBMb2dpY2llbCBlc3QgZXhlbXB0IGRgZXJyZXVyLCBxdWBpbCBmb25jdGlvbm5lcmEgc2FucyBpbnRlcnJ1cHRpb24sIHF1YGlsIHNlcmEgY29tcGF0aWJsZSBhdmVjIGxgJiMyMzM7cXVpcGVtZW50IGR1IExpY2VuY2kmIzIzMzsgZXQgc2EgY29uZmlndXJhdGlvbiBsb2dpY2llbGxlIG5pIHF1YGlsIHJlbXBsaXJhIGxlcyBiZXNvaW5zIGR1IExpY2VuY2kmIzIzMzsuCisKKzkuNCBMZSBDb25jJiMyMzM7ZGFudCBuZSBnYXJhbnRpdCBwYXMsIGRlIG1hbmkmIzIzMjtyZSBleHByZXNzZSBvdSB0YWNpdGUsIHF1ZSBsZSBMb2dpY2llbCBuZSBwb3J0ZSBwYXMgYXR0ZWludGUgJiMyMjQ7IHVuIHF1ZWxjb25xdWUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOyBpbnRlbGxlY3R1ZWxsZSBkYHVuIHRpZXJzIHBvcnRhbnQgc3VyIHVuIGJyZXZldCwgdW4gbG9naWNpZWwgb3Ugc3VyIHRvdXQgYXV0cmUgZHJvaXQgZGUgcHJvcHJpJiMyMzM7dCYjMjMzOy4gQWluc2ksIGxlIENvbmMmIzIzMztkYW50IGV4Y2x1dCB0b3V0ZSBnYXJhbnRpZSBhdSBwcm9maXQgZHUgTGljZW5jaSYjMjMzOyBjb250cmUgbGVzIGFjdGlvbnMgZW4gY29udHJlZmEmIzIzMTtvbiBxdWkgcG91cnJhaWVudCAmIzIzNDt0cmUgZGlsaWdlbnQmIzIzMztlcyBhdSB0aXRyZSBkZSBsYHV0aWxpc2F0aW9uLCBkZSBsYSBtb2RpZmljYXRpb24sIGV0IGRlIGxhIHJlZGlzdHJpYnV0aW9uIGR1IExvZ2ljaWVsLiBOJiMyMzM7YW5tb2lucywgc2kgZGUgdGVsbGVzIGFjdGlvbnMgc29udCBleGVyYyYjMjMzO2VzIGNvbnRyZSBsZSBMaWNlbmNpJiMyMzM7LCBsZSBDb25jJiMyMzM7ZGFudCBsdWkgYXBwb3J0ZXJhIHNvbiBhaWRlIHRlY2huaXF1ZSBldCBqdXJpZGlxdWUgcG91ciBzYSBkJiMyMzM7ZmVuc2UuIENldHRlIGFpZGUgdGVjaG5pcXVlIGV0IGp1cmlkaXF1ZSBlc3QgZCYjMjMzO3Rlcm1pbiYjMjMzO2UgYXUgY2FzIHBhciBjYXMgZW50cmUgbGUgQ29uYyYjMjMzO2RhbnQgY29uY2VybiYjMjMzOyBldCBsZSBMaWNlbmNpJiMyMzM7IGRhbnMgbGUgY2FkcmUgZGB1biBwcm90b2NvbGUgZGBhY2NvcmQuIExlIENvbmMmIzIzMztkYW50IGQmIzIzMztnYWdlIHRvdXRlIHJlc3BvbnNhYmlsaXQmIzIzMzsgcXVhbnQgJiMyMjQ7IGxgdXRpbGlzYXRpb24gZGUgbGEgZCYjMjMzO25vbWluYXRpb24gZHUgTG9naWNpZWwgcGFyIGxlIExpY2VuY2kmIzIzMzsuIEF1Y3VuZSBnYXJhbnRpZSBuYGVzdCBhcHBvcnQmIzIzMztlIHF1YW50ICYjMjI0OyBsYGV4aXN0ZW5jZSBkZSBkcm9pdHMgYW50JiMyMzM7cmlldXJzIHN1ciBsZSBub20gZHUgTG9naWNpZWwgZXQgc3VyIGxgZXhpc3RlbmNlIGRgdW5lIG1hcnF1ZS4KKworQXJ0aWNsZSAxMCAtIFJFU0lMSUFUSU9OCisKKzEwLjEgRW4gY2FzIGRlIG1hbnF1ZW1lbnQgcGFyIGxlIExpY2VuY2kmIzIzMzsgYXV4IG9ibGlnYXRpb25zIG1pc2VzICYjMjI0OyBzYSBjaGFyZ2UgcGFyIGxlIENvbnRyYXQsIGxlIENvbmMmIzIzMztkYW50IHBvdXJyYSByJiMyMzM7c2lsaWVyIGRlIHBsZWluIGRyb2l0IGxlIENvbnRyYXQgdHJlbnRlICgzMCkgam91cnMgYXByJiMyMzI7cyBub3RpZmljYXRpb24gYWRyZXNzJiMyMzM7ZSBhdSBMaWNlbmNpJiMyMzM7IGV0IHJlc3QmIzIzMztlIHNhbnMgZWZmZXQuCisKKzEwLjIgTGUgTGljZW5jaSYjMjMzOyBkb250IGxlIENvbnRyYXQgZXN0IHImIzIzMztzaWxpJiMyMzM7IG5gZXN0IHBsdXMgYXV0b3JpcyYjMjMzOyAmIzIyNDsgdXRpbGlzZXIsIG1vZGlmaWVyIG91IGRpc3RyaWJ1ZXIgbGUgTG9naWNpZWwuIENlcGVuZGFudCwgdG91dGVzIGxlcyBsaWNlbmNlcyBxdWBpbCBhdXJhIGNvbmMmIzIzMztkJiMyMzM7ZXMgYW50JiMyMzM7cmlldXJlbWVudCAmIzIyNDsgbGEgciYjMjMzO3NpbGlhdGlvbiBkdSBDb250cmF0IHJlc3Rlcm9udCB2YWxpZGVzIHNvdXMgciYjMjMzO3NlcnZlIHF1YGVsbGVzIGFpZW50ICYjMjMzO3QmIzIzMzsgZWZmZWN0dSYjMjMzO2VzIGVuIGNvbmZvcm1pdCYjMjMzOyBhdmVjIGxlIENvbnRyYXQuCisKK0FydGljbGUgMTEgLSBESVNQT1NJVElPTlMgRElWRVJTRVMKKworMTEuMSBDQVVTRSBFWFRFUklFVVJFCisKK0F1Y3VuZSBkZXMgUGFydGllcyBuZSBzZXJhIHJlc3BvbnNhYmxlIGRgdW4gcmV0YXJkIG91IGRgdW5lIGQmIzIzMztmYWlsbGFuY2UgZGBleCYjMjMzO2N1dGlvbiBkdSBDb250cmF0IHF1aSBzZXJhaXQgZCYjMjUxOyAmIzIyNDsgdW4gY2FzIGRlIGZvcmNlIG1hamV1cmUsIHVuIGNhcyBmb3J0dWl0IG91IHVuZSBjYXVzZSBleHQmIzIzMztyaWV1cmUsIHRlbGxlIHF1ZSwgbm90YW1tZW50LCBsZSBtYXV2YWlzIGZvbmN0aW9ubmVtZW50IG91IGxlcyBpbnRlcnJ1cHRpb25zIGR1IHImIzIzMztzZWF1ICYjMjMzO2xlY3RyaXF1ZSBvdSBkZSB0JiMyMzM7bCYjMjMzO2NvbW11bmljYXRpb24sIGxhIHBhcmFseXNpZSBkdSByJiMyMzM7c2VhdSBsaSYjMjMzO2UgJiMyMjQ7IHVuZSBhdHRhcXVlIGluZm9ybWF0aXF1ZSwgbGBpbnRlcnZlbnRpb24gZGVzIGF1dG9yaXQmIzIzMztzIGdvdXZlcm5lbWVudGFsZXMsIGxlcyBjYXRhc3Ryb3BoZXMgbmF0dXJlbGxlcywgbGVzIGQmIzIzMztnJiMyMjY7dHMgZGVzIGVhdXgsIGxlcyB0cmVtYmxlbWVudHMgZGUgdGVycmUsIGxlIGZldSwgbGVzIGV4cGxvc2lvbnMsIGxlcyBnciYjMjMyO3ZlcyBldCBsZXMgY29uZmxpdHMgc29jaWF1eCwgbGAmIzIzMzt0YXQgZGUgZ3VlcnJlLi4uCisKKzExLjIgTGUgZmFpdCwgcGFyIGxgdW5lIG91IGxgYXV0cmUgZGVzIFBhcnRpZXMsIGRgb21ldHRyZSBlbiB1bmUgb3UgcGx1c2lldXJzIG9jY2FzaW9ucyBkZSBzZSBwciYjMjMzO3ZhbG9pciBkYHVuZSBvdSBwbHVzaWV1cnMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQsIG5lIHBvdXJyYSBlbiBhdWN1biBjYXMgaW1wbGlxdWVyIHJlbm9uY2lhdGlvbiBwYXIgbGEgUGFydGllIGludCYjMjMzO3Jlc3MmIzIzMztlICYjMjI0OyBzYGVuIHByJiMyMzM7dmFsb2lyIHVsdCYjMjMzO3JpZXVyZW1lbnQuCisKKzExLjMgTGUgQ29udHJhdCBhbm51bGUgZXQgcmVtcGxhY2UgdG91dGUgY29udmVudGlvbiBhbnQmIzIzMztyaWV1cmUsICYjMjMzO2NyaXRlIG91IG9yYWxlLCBlbnRyZSBsZXMgUGFydGllcyBzdXIgbGUgbSYjMjM0O21lIG9iamV0IGV0IGNvbnN0aXR1ZSBsYGFjY29yZCBlbnRpZXIgZW50cmUgbGVzIFBhcnRpZXMgc3VyIGNldCBvYmpldC4gQXVjdW5lIGFkZGl0aW9uIG91IG1vZGlmaWNhdGlvbiBhdXggdGVybWVzIGR1IENvbnRyYXQgbmBhdXJhIGRgZWZmZXQgJiMyMjQ7IGxgJiMyMzM7Z2FyZCBkZXMgUGFydGllcyAmIzIyNDsgbW9pbnMgZGAmIzIzNDt0cmUgZmFpdGUgcGFyICYjMjMzO2NyaXQgZXQgc2lnbiYjMjMzO2UgcGFyIGxldXJzIHJlcHImIzIzMztzZW50YW50cyBkJiMyNTE7bWVudCBoYWJpbGl0JiMyMzM7cy4KKworMTEuNCBEYW5zIGxgaHlwb3RoJiMyMzI7c2UgbyYjMjQ5OyB1bmUgb3UgcGx1c2lldXJzIGRlcyBkaXNwb3NpdGlvbnMgZHUgQ29udHJhdCBzYGF2JiMyMzI7cmVyYWl0IGNvbnRyYWlyZSAmIzIyNDsgdW5lIGxvaSBvdSAmIzIyNDsgdW4gdGV4dGUgYXBwbGljYWJsZSwgZXhpc3RhbnRzIG91IGZ1dHVycywgY2V0dGUgbG9pIG91IGNlIHRleHRlIHByJiMyMzM7dmF1ZHJhaXQsIGV0IGxlcyBQYXJ0aWVzIGZlcmFpZW50IGxlcyBhbWVuZGVtZW50cyBuJiMyMzM7Y2Vzc2FpcmVzIHBvdXIgc2UgY29uZm9ybWVyICYjMjI0OyBjZXR0ZSBsb2kgb3UgJiMyMjQ7IGNlIHRleHRlLiBUb3V0ZXMgbGVzIGF1dHJlcyBkaXNwb3NpdGlvbnMgcmVzdGVyb250IGVuIHZpZ3VldXIuIERlIG0mIzIzNDttZSwgbGEgbnVsbGl0JiMyMzM7LCBwb3VyIHF1ZWxxdWUgcmFpc29uIHF1ZSBjZSBzb2l0LCBkYHVuZSBkZXMgZGlzcG9zaXRpb25zIGR1IENvbnRyYXQgbmUgc2F1cmFpdCBlbnRyYSYjMjM4O25lciBsYSBudWxsaXQmIzIzMzsgZGUgbGBlbnNlbWJsZSBkdSBDb250cmF0LgorCisxMS41IExBTkdVRQorCitMZSBDb250cmF0IGVzdCByJiMyMzM7ZGlnJiMyMzM7IGVuIGxhbmd1ZSBmcmFuJiMyMzE7YWlzZSBldCBlbiBsYW5ndWUgYW5nbGFpc2UsIGNlcyBkZXV4IHZlcnNpb25zIGZhaXNhbnQgJiMyMzM7Z2FsZW1lbnQgZm9pLgorCitBcnRpY2xlIDEyIC0gTk9VVkVMTEVTIFZFUlNJT05TIERVIENPTlRSQVQKKworMTIuMSBUb3V0ZSBwZXJzb25uZSBlc3QgYXV0b3JpcyYjMjMzO2UgJiMyMjQ7IGNvcGllciBldCBkaXN0cmlidWVyIGRlcyBjb3BpZXMgZGUgY2UgQ29udHJhdC4KKworMTIuMiBBZmluIGRgZW4gcHImIzIzMztzZXJ2ZXIgbGEgY29oJiMyMzM7cmVuY2UsIGxlIHRleHRlIGR1IENvbnRyYXQgZXN0IHByb3QmIzIzMztnJiMyMzM7IGV0IG5lIHBldXQgJiMyMzQ7dHJlIG1vZGlmaSYjMjMzOyBxdWUgcGFyIGxlcyBhdXRldXJzIGRlIGxhIGxpY2VuY2UsIGxlc3F1ZWxzIHNlIHImIzIzMztzZXJ2ZW50IGxlIGRyb2l0IGRlIHB1YmxpZXIgcCYjMjMzO3Jpb2RpcXVlbWVudCBkZXMgbWlzZXMgJiMyMjQ7IGpvdXIgb3UgZGUgbm91dmVsbGVzIHZlcnNpb25zIGR1IENvbnRyYXQsIHF1aSBwb3NzJiMyMzM7ZGVyb250IGNoYWN1bmUgdW4gbnVtJiMyMzM7cm8gZGlzdGluY3QuIENlcyB2ZXJzaW9ucyB1bHQmIzIzMztyaWV1cmVzIHNlcm9udCBzdXNjZXB0aWJsZXMgZGUgcHJlbmRyZSBlbiBjb21wdGUgZGUgbm91dmVsbGVzIHByb2JsJiMyMzM7bWF0aXF1ZXMgcmVuY29udHImIzIzMztlcyBwYXIgbGVzIGxvZ2ljaWVscyBsaWJyZXMuCisKKzEyLjMgVG91dCBMb2dpY2llbCBkaWZmdXMmIzIzMzsgc291cyB1bmUgdmVyc2lvbiBkb25uJiMyMzM7ZSBkdSBDb250cmF0IG5lIHBvdXJyYSBmYWlyZSBsYG9iamV0IGRgdW5lIGRpZmZ1c2lvbiB1bHQmIzIzMztyaWV1cmUgcXVlIHNvdXMgbGEgbSYjMjM0O21lIHZlcnNpb24gZHUgQ29udHJhdCBvdSB1bmUgdmVyc2lvbiBwb3N0JiMyMzM7cmlldXJlLgorCitBcnRpY2xlIDEzIC0gTE9JIEFQUExJQ0FCTEUgRVQgQ09NUEVURU5DRSBURVJSSVRPUklBTEUKKworMTMuMSBMZSBDb250cmF0IGVzdCByJiMyMzM7Z2kgcGFyIGxhIGxvaSBmcmFuJiMyMzE7YWlzZS4gTGVzIFBhcnRpZXMgY29udmllbm5lbnQgZGUgdGVudGVyIGRlIHImIzIzMztnbGVyICYjMjI0OyBsYGFtaWFibGUgbGVzIGRpZmYmIzIzMztyZW5kcyBvdSBsaXRpZ2VzIHF1aSB2aWVuZHJhaWVudCAmIzIyNDsgc2UgcHJvZHVpcmUgcGFyIHN1aXRlIG91ICYjMjI0OyBsYG9jY2FzaW9uIGR1IENvbnRyYXQuCisKKzEzLjIgQSBkJiMyMzM7ZmF1dCBkYGFjY29yZCBhbWlhYmxlIGRhbnMgdW4gZCYjMjMzO2xhaSBkZSBkZXV4ICgyKSBtb2lzICYjMjI0OyBjb21wdGVyIGRlIGxldXIgc3VydmVuYW5jZSBldCBzYXVmIHNpdHVhdGlvbiByZWxldmFudCBkYHVuZSBwcm9jJiMyMzM7ZHVyZSBkYHVyZ2VuY2UsIGxlcyBkaWZmJiMyMzM7cmVuZHMgb3UgbGl0aWdlcyBzZXJvbnQgcG9ydCYjMjMzO3MgcGFyIGxhIFBhcnRpZSBsYSBwbHVzIGRpbGlnZW50ZSBkZXZhbnQgbGVzIFRyaWJ1bmF1eCBjb21wJiMyMzM7dGVudHMgZGUgUGFyaXMuCisKKzEgQ2VDSUxMIGVzdCBwb3VyIENlKGEpIEMobnJzKSBJKG5yaWEpIEwob2dpY2llbCkgTChpYnJlKQorCitWZXJzaW9uIDEuMCBkdSAyMDA2LTA5LTA1LgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQQUwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmIwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEFMLTEuMApAQCAtMCwwICsxLDEwOSBAQAorCitDb21tb24gUHVibGljIEF0dHJpYnV0aW9uIExpY2Vuc2UgVmVyc2lvbiAxLjAgKENQQUwpCisxLiAmIzgyMjA7RGVmaW5pdGlvbnMmIzgyMjE7CisxLjAuMSAmIzgyMjA7Q29tbWVyY2lhbCBVc2UmIzgyMjE7IG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisxLjEgJiM4MjIwO0NvbnRyaWJ1dG9yJiM4MjIxOyBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIgJiM4MjIwO0NvbnRyaWJ1dG9yIFZlcnNpb24mIzgyMjE7IG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMyAmIzgyMjA7Q292ZXJlZCBDb2RlJiM4MjIxOyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40ICYjODIyMDtFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20mIzgyMjE7IG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41ICYjODIyMDtFeGVjdXRhYmxlJiM4MjIxOyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNiAmIzgyMjA7SW5pdGlhbCBEZXZlbG9wZXImIzgyMjE7IG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNyAmIzgyMjA7TGFyZ2VyIFdvcmsmIzgyMjE7IG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjggJiM4MjIwO0xpY2Vuc2UmIzgyMjE7IG1lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMSAmIzgyMjA7TGljZW5zYWJsZSYjODIyMTsgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkgJiM4MjIwO01vZGlmaWNhdGlvbnMmIzgyMjE7IG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisxLjEwICYjODIyMDtPcmlnaW5hbCBDb2RlJiM4MjIxOyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xICYjODIyMDtQYXRlbnQgQ2xhaW1zJiM4MjIxOyBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEgJiM4MjIwO1NvdXJjZSBDb2RlJiM4MjIxOyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvciYjODIxNztzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKzEuMTIgJiM4MjIwO1lvdSYjODIyMTsgKG9yICYjODIyMDtZb3VyJiM4MjIxOykgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgJiM4MjIwO1lvdSYjODIyMTsgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICYjODIyMDtjb250cm9sJiM4MjIxOyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisyLjEgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisyLjIgQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgQ29kZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKzMuMSBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCiszLjMgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKzMuNCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSYjODIxNztzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgJiM4MjIwO0xFR0FMJiM4MjIxOyB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvciYjODIxNztzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJiM4MjE3O3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3ImIzgyMTc7cyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorMy41IFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMmIzgyMTc7IHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorMy42IERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cyYjODIxNzsgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50JiM4MjE3O3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKzMuNyBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xIE5ldyBWZXJzaW9ucy4KK1NvY2lhbHRleHQsIEluYy4gKCYjODIyMDtTb2NpYWx0ZXh0JiM4MjIxOykgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU29jaWFsdGV4dC4gTm8gb25lIG90aGVyIHRoYW4gU29jaWFsdGV4dCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCis2LjMgRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICYjODIyMDtTb2NpYWx0ZXh0JiM4MjIxOywgJiM4MjIwO0NQQUwmIzgyMjE7IG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgQ1BBTC4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAmIzgyMjA7QVMgSVMmIzgyMjE7IEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgT1JJR0lOQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzguIFRFUk1JTkFUSU9OLgorOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgJiM4MjIwO1BhcnRpY2lwYW50JiM4MjIxOykgYWxsZWdpbmcgdGhhdDoKKyhhKSBzdWNoIFBhcnRpY2lwYW50JiM4MjE3O3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQmIzgyMTc7cyBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCis4LjMgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQmIzgyMTc7cyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKzguNCBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBPUklHSU5BTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFkmIzgyMTc7UyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgJiM4MjIwO2NvbW1lcmNpYWwgaXRlbSwmIzgyMjE7IGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAmIzgyMjA7Y29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSYjODIyMTsgYW5kICYjODIyMDtjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sJiM4MjIxOyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyYjODIxNzsgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgTXVsdGlwbGUtTGljZW5zZWQuIE11bHRpcGxlLUxpY2Vuc2VkIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgQ1BBTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorMTQuIEFERElUSU9OQUwgVEVSTTogQVRUUklCVVRJT04KKyhhKSBBcyBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byB0aGUgb3JnYW5pemVyIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgT3JpZ2luYWwgQ29kZSAoJiM4MjIwO09yaWdpbmFsIERldmVsb3BlciYjODIyMTspLCBpbiB0aGUgaG9wZSB0aGF0IGl0cyBwcm9tb3Rpb25hbCB2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZSB0aW1lLCBtb25leSBhbmQgZWZmb3J0IGludmVzdGVkIGluIHdyaXRpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgbWF5IGluY2x1ZGUgaW4gRXhoaWJpdCBCICgmIzgyMjA7QXR0cmlidXRpb24gSW5mb3JtYXRpb24mIzgyMjE7KSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCB0aW1lIGFuIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIG9yIGEgTGFyZ2VyIFdvcmsgaXMgbGF1bmNoZWQgb3IgaW5pdGlhbGx5IHJ1biAod2hpY2ggaW5jbHVkZXMgaW5pdGlhdGluZyBhIHNlc3Npb24pLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXImIzgyMTc7cyBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgbXVzdCBvY2N1ciBvbiB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBlbXBsb3llZCBieSB0aGUgZW5kIHVzZXIgdG8gYWNjZXNzIHN1Y2ggQ292ZXJlZCBDb2RlICh3aGljaCBtYXkgaW5jbHVkZSBkaXNwbGF5IG9uIGEgc3BsYXNoIHNjcmVlbiksIGlmIGFueS4gVGhlIHNpemUgb2YgdGhlIGdyYXBoaWMgaW1hZ2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgb3RoZXIgZWxlbWVudHMgb2YgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uLiBJZiB0aGUgYWNjZXNzIGJ5IHRoZSBlbmQgdXNlciB0byB0aGUgRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgZG9lcyBub3QgY3JlYXRlIGEgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBmb3IgYWNjZXNzIHRvIHRoZSBDb3ZlcmVkIENvZGUsIHRoaXMgb2JsaWdhdGlvbiBzaGFsbCBub3QgYXBwbHkuIElmIHRoZSBPcmlnaW5hbCBDb2RlIGRpc3BsYXlzIHN1Y2ggQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaW4gYSBwYXJ0aWN1bGFyIGZvcm0gKHN1Y2ggYXMgaW4gdGhlIGZvcm0gb2YgYSBzcGxhc2ggc2NyZWVuLCBub3RpY2UgYXQgbG9naW4sIGFuICYjODIyMDthYm91dCYjODIyMTsgZGlzcGxheSwgb3IgZGVkaWNhdGVkIGF0dHJpYnV0aW9uIGFyZWEgb24gdXNlciBpbnRlcmZhY2Ugc2NyZWVucyksIGNvbnRpbnVlZCB1c2Ugb2Ygc3VjaCBmb3JtIGZvciB0aGF0IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIG9uZSB3YXkgb2YgbWVldGluZyB0aGlzIHJlcXVpcmVtZW50IGZvciBub3RpY2UuCisoYikgQXR0cmlidXRpb24gaW5mb3JtYXRpb24gbWF5IG9ubHkgaW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2UsIGEgYnJpZWYgcGhyYXNlLCBncmFwaGljIGltYWdlIGFuZCBhIFVSTCAoJiM4MjIwO0F0dHJpYnV0aW9uIEluZm9ybWF0aW9uJiM4MjIxOykgYW5kIGlzIHN1YmplY3QgdG8gdGhlIEF0dHJpYnV0aW9uIExpbWl0cyBhcyBkZWZpbmVkIGJlbG93LiBGb3IgdGhlc2UgcHVycG9zZXMsIHByb21pbmVudCBzaGFsbCBtZWFuIGRpc3BsYXkgZm9yIHN1ZmZpY2llbnQgZHVyYXRpb24gdG8gZ2l2ZSByZWFzb25hYmxlIG5vdGljZSB0byB0aGUgdXNlciBvZiB0aGUgaWRlbnRpdHkgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlciBhbmQgdGhhdCBpZiBZb3UgaW5jbHVkZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBvciBzaW1pbGFyIGluZm9ybWF0aW9uIGZvciBvdGhlciBwYXJ0aWVzLCBZb3UgbXVzdCBlbnN1cmUgdGhhdCB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgc2hhbGwgYmUgbm8gbGVzcyBwcm9taW5lbnQgdGhhbiBzdWNoIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9yIHNpbWlsYXIgaW5mb3JtYXRpb24gZm9yIHRoZSBvdGhlciBwYXJ0eS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIG1heSBjaG9vc2UgdG8gc3BlY2lmeSBpbiBFeGhpYml0IEIgYmVsb3cgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIHJlc3VsdGluZyBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBNb2RpZmljYXRpb24sIGJ1dCBub3QgYSBMYXJnZXIgV29yay4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgY2Fubm90IHJlcXVpcmUgdGhhdCBZb3UgZGlzcGxheSwgYXQgYW55IHRpbWUsIG1vcmUgdGhhbiB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFzIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uOiAoYSkgYSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyOyAoYikgYSB3b3JkIG9yIG9uZSBwaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGdyYXBoaWMgaW1hZ2UgcHJvdmlkZWQgYnkgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgJiM4MjIwO0F0dHJpYnV0aW9uIExpbWl0cyYjODIyMTspLgorKGMpIElmIEV4aGliaXQgQiBkb2VzIG5vdCBpbmNsdWRlIGFueSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBZb3UgdG8gZGlzcGxheSBhbnkgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb2YgdGhlIE9yaWdpbmFsIERldmVsb3Blci4KKyhkKSBZb3UgYWNrbm93bGVkZ2UgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZGlzdHJpYnV0ZWQgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIGFyZSB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIHRoZWlyIG93bmVycyBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZWlyIG93bmVycywgb3IgdW5kZXIgY2lyY3Vtc3RhbmNlcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGxhdyBvciBhcyBleHByZXNzbHkgc2V0IG91dCBpbiB0aGlzIExpY2Vuc2UuCisxNS4gQURESVRJT05BTCBURVJNOiBORVRXT1JLIFVTRS4KK1RoZSB0ZXJtICYjODIyMDtFeHRlcm5hbCBEZXBsb3ltZW50JiM4MjIxOyBtZWFucyB0aGUgdXNlLCBkaXN0cmlidXRpb24sIG9yIGNvbW11bmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkIHRvIHRob3NlIHBlcnNvbnMgb3IgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgbmV0d29yay4gQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHRoZSBncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMy4xIGFuZCBtYWtlIFNvdXJjZSBDb2RlIGF2YWlsYWJsZSB1bmRlciBTZWN0aW9uIDMuMi4KKworIEVYSElCSVQgQS4gQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wLgorJiM4MjIwO1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIENvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICYjODIyMDtMaWNlbnNlJiM4MjIxOyk7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IF9fX19fX19fX19fX18uIFRoZSBMaWNlbnNlIGlzIGJhc2VkIG9uIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIGJ1dCBTZWN0aW9ucyAxNCBhbmQgMTUgaGF2ZSBiZWVuIGFkZGVkIHRvIGNvdmVyIHVzZSBvZiBzb2Z0d2FyZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yayBhbmQgcHJvdmlkZSBmb3IgbGltaXRlZCBhdHRyaWJ1dGlvbiBmb3IgdGhlIE9yaWdpbmFsIERldmVsb3Blci4gSW4gYWRkaXRpb24sIEV4aGliaXQgQSBoYXMgYmVlbiBtb2RpZmllZCB0byBiZSBjb25zaXN0ZW50IHdpdGggRXhoaWJpdCBCLgorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJiM4MjIwO0FTIElTJiM4MjIxOyBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitUaGUgT3JpZ2luYWwgQ29kZSBpc19fX19fX19fX19fX19fX19fX19fX18uCitUaGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGlzIG5vdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGlzIF9fX19fX19fX18uIElmIGxlZnQgYmxhbmssIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgaXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fXy4gQWxsIHBvcnRpb25zIG9mIHRoZSBjb2RlIHdyaXR0ZW4gYnkgX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoYykgX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb250cmlidXRvciBfX19fX19fX19fX19fX19fX19fX19fLgorQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSBbX19fXSBMaWNlbnNlKSwgaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuCitJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIENQQUwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBDUEFMIG9yIHRoZSBbX19fXSBMaWNlbnNlLiYjODIyMTsKK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworIEVYSElCSVQgQi4gQXR0cmlidXRpb24gSW5mb3JtYXRpb24KK0F0dHJpYnV0aW9uIENvcHlyaWdodCBOb3RpY2U6IF9fX19fX19fX19fX19fX19fX19fX19fCitBdHRyaWJ1dGlvbiBQaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOiBfX19fX19fX19fX19fX19fX19fX19fXworQXR0cmlidXRpb24gVVJMOiBfX19fX19fX19fX19fX19fX19fX19fXworR3JhcGhpYyBJbWFnZSBhcyBwcm92aWRlZCBpbiB0aGUgQ292ZXJlZCBDb2RlLCBpZiBhbnkuCitEaXNwbGF5IG9mIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIFtyZXF1aXJlZC9ub3QgcmVxdWlyZWRdIGluIExhcmdlciBXb3JrcyB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgQ1BBTCBhcyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhlIENQQUwuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxN2MyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DUEwtMS4wCkBAIC0wLDAgKzEsMjE1IEBACisKK0NvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NTU9OIFBVQkxJQworTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNCitDT05TVElUVVRFUyBSRUNJUElFTlRgUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworYSkgaW4gdGhlIGNhc2Ugb2YgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBpbml0aWFsIGNvZGUgYW5kCitkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKKworYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOgorCitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKworaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZQorZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiBgb3JpZ2luYXRlc2AgZnJvbSBhCitDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lCithY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcmBzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8KK3RoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4KK2Nvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90CitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzICIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUKK25lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuCitjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LAoraW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCithKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCitSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bworcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sCitkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaAorZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisKK2IpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKK1JlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkCitQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlCitDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KK1RoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZQorUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKK2FkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUKK0xpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucword2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMKK3RvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IGFueQorQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8KK1JlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZQorcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZQorcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LgorRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZQorYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KKworZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudAorY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQKK2ZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMKK293biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworYSkgaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCitiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CisKK2kpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQKK2NvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kCitub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZAorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CisKK2lpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvcgorZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwKK2RhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworCitpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkCitieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKworaXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoCitDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvcgordGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCithKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uCisKK0NvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUKK1Byb2dyYW0uCisKK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYKK2FueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlCitvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGgKK3Jlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcworaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8KK2luY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lcgord2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZgorYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaAorQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeQorZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcworYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbAorYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlCitleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4KK2Nvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0CitvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlcgordG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0bworY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55CityZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluCithbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQKK0NvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzCityZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlcgorQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydAorcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTgorIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SCitJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLAorTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoCitSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZgorcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsCitwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkKK0NPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVAorUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKK0dSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlCitsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlCit0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoCitwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2gKK3Byb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoIHJlc3BlY3QgdG8KK2EgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhCitsYXdzdWl0KSwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgYnkgdGhhdCBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudAordW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4KK2FkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkKKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkKK2luZnJpbmdlcyBzdWNoIFJlY2lwaWVudGBzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudGBzIHJpZ2h0cyBncmFudGVkIHVuZGVyCitTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8KK2NvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcworbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZgorc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50YHMgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRlcm1pbmF0ZSwKK1JlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcworcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50YHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK2FuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0gc2hhbGwgY29udGludWUgYW5kCitzdXJ2aXZlLgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbgorb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZQorbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcyB0aGUgcmlnaHQgdG8KK3B1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4KK05vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4KK0lCTSBpcyB0aGUgaW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gSUJNIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlCithcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlCitBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nCitDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudAordW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50CitpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzCitDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zCisyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlcgorZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcworQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyCithZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbgorYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NVQS1PUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZjU5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9DVUEtT1BMLTEuMApAQCAtMCwwICsxLDQ3MSBAQAorCitDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisocGxhaW4gdGV4dCkKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKK0NvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKK0NvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMKK21hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKK0NvZGUuCisKKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZAorYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCitleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKK3N1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlCitjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKK3ByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKK09yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLAorYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlCitkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlcgord2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZQorU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUKK2FwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUKK2ZvciBubyBjaGFyZ2UuCisKKzEuMTIuICJZb3UiIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKK2V4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcworTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuCitGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzCitjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mCit0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsCit0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkKK2NvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudAorKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoCitlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwKK21vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwKK0NvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IKK2FzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3IKK3NlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLAorc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlCitPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUKK2VmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcworT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpCitzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQKK2J5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvcgoraGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKK3RyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMKK2NyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuCit1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZQorYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3IKK3NlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lCithbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKK29mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlCittYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZQorZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mCit0aGUgQ292ZXJlZCBDb2RlLgorCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CiszKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YKK0NvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUKK2J5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlCitDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCitpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQordGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUKK2Rpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCitvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQordmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUKK2FuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjUuCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUKK21hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbgorRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpCittb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeAorKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uCitoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCitlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCit0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK0NvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzCitncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwKK0NvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZQorZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZQorcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwKK2tub3cgd2hvbSB0byBjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyCit0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwKK0NvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzCitDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcworKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKK3JlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkCitDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoCithcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CithbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworKGMpIFJlcHJlc2VudGF0aW9ucy4KKworQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvCitTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcmBzCitNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vcgorQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkKK3RoaXMgTGljZW5zZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKK0NvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEKK2xvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5Cit0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykKK1lvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcAorcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKK29ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UKK21heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzCitvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlCitvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKK2luIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUKK0NvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5Citjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluCitjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50YHMKK3JpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMKK0xpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQKK2xpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlcgorZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaAordGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUKK25vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKK3JlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0bworc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQorZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbgorbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QKK2JlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCitleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcworYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworNi4xLiBOZXcgVmVyc2lvbnMuCitDVUEgT2ZmaWNlIFByb2plY3QgbWF5IHB1Ymxpc2ggcmV2aXNlZAorYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uCit3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUKK0xpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAordmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zCitvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBDVUEgT2ZmaWNlIFByb2plY3QuIE5vIG9uZQorb3RoZXIgdGhhbiBDVUEgT2ZmaWNlIFByb2plY3QgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8KK0NvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heQorb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQorZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdAordGhlIHBocmFzZXMgIkNVQSBPZmZpY2UiLCAiQ1VBIiwgIkNVQVBMIiwgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91cgorbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkKK2FuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UKK2NvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCitFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YKK3RoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCitERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCitUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUKK0lTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsCitZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFCitDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSCitPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRgorQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUKK3N1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpcgorbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsIHN1cnZpdmUuCisKKzguMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3Blcgorb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbQorWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDoKKworKGEpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKK2luZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2gKK1BhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2UKK3NoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCit1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpCithZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlCityb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8KK3RoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMKK29mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdAorbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQoraXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YKK3RoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzCitDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCithbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpCithbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKK3NvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKK1BhcnRpY2lwYW50LgorCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQKK2FsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcworYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcworZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KK2ludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yCitsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLAorYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQord2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlcgorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMCitERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwKK09SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IKK0FOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLAorV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIKK0NPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4KK0lORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTworVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2gKK3Rlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDgKK0MuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwKK2FsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZQorcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CitDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYKK2FueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KK1dpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLAorb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQKK1N0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuCitEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwKK0NhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kCitleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKK3NoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzCitMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcworcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8KK3dvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaAorcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvcgorc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyJNdWx0aXBsZS1MaWNlbnNlZCIuICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlcgorWW91ciBjaG9pY2Ugb2YgdGhlIE5QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkCitieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRVhISUJJVCBBIC0gQ1VBIE9mZmljZSBQdWJsaWMgTGljZW5zZS4KKworYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBDVUEgT2ZmaWNlIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL2N1YW9mZmljZS5zb3VyY2Vmb3JnZS5uZXQvCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18KK19fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGUgX19fX18gbGljZW5zZSAodGhlICJbX19fXSBMaWNlbnNlIiksIGluIHdoaWNoIGNhc2UgdGhlCitwcm92aXNpb25zIG9mIFtfX19fX19dIExpY2Vuc2UgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aG9zZQorYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCit5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBDVUFQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCitvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQordGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQordW5kZXIgZWl0aGVyIHRoZSBDVUFQTCBvciB0aGUgW19fX10gTGljZW5zZS4iCisKK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKK3RoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZAordXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZQorT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvQ2xBcnRpc3RpYyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1YTRhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0NsQXJ0aXN0aWMKQEAgLTAsMCArMSwxMzggQEAKKworICAgICAgIFRoZSBDbGFyaWZpZWQgQXJ0aXN0aWMgTGljZW5zZQorCisgICAgUHJlYW1ibGUKKworVGhlIGludGVudCBvZiB0aGlzIGRvY3VtZW50IGlzIHRvIHN0YXRlIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEKK1BhY2thZ2UgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1haW50YWlucyBzb21lCitzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwKK3doaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzdHJpYnV0ZQordGhlIFBhY2thZ2UgaW4gYSBtb3JlLW9yLWxlc3MgY3VzdG9tYXJ5IGZhc2hpb24sIHBsdXMgdGhlIHJpZ2h0IHRvIG1ha2UKK3JlYXNvbmFibGUgbW9kaWZpY2F0aW9ucy4KKworRGVmaW5pdGlvbnM6CisKKyAiUGFja2FnZSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMKKyBjcmVhdGVkIHRocm91Z2ggdGV4dHVhbCBtb2RpZmljYXRpb24uCisKKyAiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHN1Y2ggYSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbgorIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcworIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIGFzIHNwZWNpZmllZCBiZWxvdy4KKworICJDb3B5cmlnaHQgSG9sZGVyIiBpcyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IKKyBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS4KKworICJZb3UiIGlzIHlvdSwgaWYgeW91YHJlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nCisgdGhpcyBQYWNrYWdlLgorCisgIkRpc3RyaWJ1dGlvbiBmZWUiIGlzIGEgZmVlIHlvdSBjaGFyZ2UgZm9yIHByb3ZpZGluZyBhIGNvcHkKKyAgICAgICAgb2YgdGhpcyBQYWNrYWdlIHRvIGFub3RoZXIgcGFydHkuCisKKyAiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIHJpZ2h0IHRvCisgICAgICAgIHVzZSB0aGUgaXRlbSwgdGhvdWdoIHRoZXJlIG1heSBiZSBmZWVzIGludm9sdmVkIGluIGhhbmRsaW5nIHRoZQorICAgICAgICBpdGVtLiAgSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZQorICAgICAgICBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuCisKKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlCitTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdQorZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKzIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucworZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluLCBvciB0aG9zZSBtYWRlIEZyZWVseSBBdmFpbGFibGUsIG9yIGZyb20KK3RoZSBDb3B5cmlnaHQgSG9sZGVyLiAgQSBQYWNrYWdlIG1vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUKK2NvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkCit0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcgaG93IGFuZAord2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlCitmb2xsb3dpbmc6CisKKyAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlIG1ha2UgdGhlbQorICAgIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuCisgICAgZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBuZXR3b3JrCisgICAgYXJjaGl2ZSBzaXRlIGFsbG93aW5nIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gdGhlbSwgb3IgYnkgYWxsb3dpbmcgdGhlCisgICAgQ29weXJpZ2h0IEhvbGRlciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbgorICAgIG9mIHRoZSBQYWNrYWdlLgorCisgICAgYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLgorCisgICAgYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdAorICAgIHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZCwgYW5kIHByb3ZpZGUKKyAgICBhIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseQorICAgIGRvY3VtZW50cyBob3cgaXQgZGlmZmVycyBmcm9tIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICBlKSBwZXJtaXQgYW5kIGVuY291cmdlIGFueW9uZSB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCBQYWNrYWdlCisgICAgICAgcGVybWlzc2lvbiB0byBtYWtlIHlvdXIgbW9kaWZpY2F0aW9ucyBGcmVlbHkgQXZhaWxhYmxlCisgICAgICAgaW4gc29tZSBzcGVjaWZpYyB3YXkuCisKKworNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IKK2V4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBkaXN0cmlidXRlIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMsCisgICAgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KSBvbiB3aGVyZQorICAgIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mCisgICAgdGhlIFBhY2thZ2Ugd2l0aCB5b3VyIG1vZGlmaWNhdGlvbnMuCisKKyAgICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5CisgICAgZG9jdW1lbnQgdGhlIGRpZmZlcmVuY2VzIGluIG1hbnVhbCBwYWdlcyAob3IgZXF1aXZhbGVudCksIHRvZ2V0aGVyCisgICAgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyAgICBlKSBvZmZlciB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlIFBhY2thZ2UsIHdpdGggeW91cgorICAgICAgIG1vZGlmaWNhdGlvbnMsIGJ5IG1haWwgb3JkZXIuCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuCitJZiB5b3Ugb2ZmZXIgc3VwcG9ydCBmb3IgdGhpcyBQYWNrYWdlLCB5b3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UKK2ZvciB0aGF0IHN1cHBvcnQuICBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBsaWNlbnNlIGZlZSBmb3IgdGhlIHJpZ2h0IHRvIHVzZQordGhpcyBQYWNrYWdlIGl0c2VsZi4gIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGgKK290aGVyIChwb3NzaWJseSBjb21tZXJjaWFsIGFuZCBwb3NzaWJseSBub25mcmVlKSBwcm9ncmFtcyBhcyBwYXJ0IG9mIGEKK2xhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCBhbmQgcG9zc2libHkgbm9uZnJlZSkgc29mdHdhcmUgZGlzdHJpYnV0aW9uLAorYW5kIGNoYXJnZSBsaWNlbnNlIGZlZXMgZm9yIG90aGVyIHBhcnRzIG9mIHRoYXQgc29mdHdhcmUgZGlzdHJpYnV0aW9uLAorcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzIFBhY2thZ2UgYXMgYSBwcm9kdWN0IG9mIHlvdXIgb3duLgorSWYgdGhlIFBhY2thZ2UgaW5jbHVkZXMgYW4gaW50ZXJwcmV0ZXIsIFlvdSBtYXkgZW1iZWQgdGhpcyBQYWNrYWdlYHMKK2ludGVycHJldGVyIHdpdGhpbiBhbiBleGVjdXRhYmxlIG9mIHlvdXJzIChieSBsaW5raW5nKTsgdGhpcyBzaGFsbCBiZQorY29uc3RydWVkIGFzIGEgbWVyZSBmb3JtIG9mIGFnZ3JlZ2F0aW9uLCBwcm92aWRlZCB0aGF0IHRoZSBjb21wbGV0ZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgaXMgc28gZW1iZWRkZWQuCisKKzYuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzCitvdXRwdXQgZnJvbSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwKK3VuZGVyIHRoZSBjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob2V2ZXIgZ2VuZXJhdGVkCit0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCitQYWNrYWdlLiAgSWYgc3VjaCBzY3JpcHRzIG9yIGxpYnJhcnkgZmlsZXMgYXJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCitQYWNrYWdlIHZpYSB0aGUgc28tY2FsbGVkICJ1bmR1bXAiIG9yICJ1bmV4ZWMiIG1ldGhvZHMgb2YgcHJvZHVjaW5nIGEKK2JpbmFyeSBleGVjdXRhYmxlIGltYWdlLCB0aGVuIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGFuIGltYWdlIHNoYWxsCituZWl0aGVyIGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2Ugbm9yIHNoYWxsIGl0CitmYWxsIHVuZGVyIHRoZSByZXN0cmljdGlvbnMgb2YgUGFyYWdyYXBocyAzIGFuZCA0LCBwcm92aWRlZCB0aGF0IHlvdSBkbworbm90IHJlcHJlc2VudCBzdWNoIGFuIGV4ZWN1dGFibGUgaW1hZ2UgYXMgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMKK1BhY2thZ2UuCisKKzcuIEMgc3Vicm91dGluZXMgKG9yIGNvbXBhcmFibHkgY29tcGlsZWQgc3Vicm91dGluZXMgaW4gb3RoZXIKK2xhbmd1YWdlcykgc3VwcGxpZWQgYnkgeW91IGFuZCBsaW5rZWQgaW50byB0aGlzIFBhY2thZ2UgaW4gb3JkZXIgdG8KK2VtdWxhdGUgc3Vicm91dGluZXMgYW5kIHZhcmlhYmxlcyBvZiB0aGUgbGFuZ3VhZ2UgZGVmaW5lZCBieSB0aGlzCitQYWNrYWdlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYXJlIHRoZQorZXF1aXZhbGVudCBvZiBpbnB1dCBhcyBpbiBQYXJhZ3JhcGggNiwgcHJvdmlkZWQgdGhlc2Ugc3Vicm91dGluZXMgZG8KK25vdCBjaGFuZ2UgdGhlIGxhbmd1YWdlIGluIGFueSB3YXkgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBmYWlsIHRoZQorcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlIGxhbmd1YWdlLgorCis4LiBBZ2dyZWdhdGlvbiBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZSB3aXRoIGEgY29tbWVyY2lhbAorZGlzdHJpYnV0aW9uIGlzIGFsd2F5cyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgdXNlIG9mIHRoaXMgUGFja2FnZQoraXMgZW1iZWRkZWQ7IHRoYXQgaXMsIHdoZW4gbm8gb3ZlcnQgYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2UgdGhpcyBQYWNrYWdlYHMKK2ludGVyZmFjZXMgdmlzaWJsZSB0byB0aGUgZW5kIHVzZXIgb2YgdGhlIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLgorU3VjaCB1c2Ugc2hhbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBhIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UuCisKKzkuIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisxMC4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyAgICBUaGUgRW5kCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRFNTU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1OWRmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0RTU1NMCkBAIC0wLDAgKzEsNDkgQEAKK0NvcHlyaWdodAorLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMTk5Ny0yMDAxIE5vcm1hbiBXYWxzaAorCitUaGUgb3JpZ2luYWwgaW5zcGlyYXRpb24gZm9yIHRoZXNlIHN0eWxlc2hlZXRzIGNhbWUgZnJvbSB0aGUKK3dvcmsgb2YgSm9uIEJvc2FrLCBBbmRlcnMgQmVyZ2x1bmQsIFRvbnkgR3JhaGFtLCBUZXJyeSBBbGxlbiwKK0phbWVzIENsYXJrLCBhbmQgbWFueSBvdGhlcnMuICBJIGFtIGluZGVidGVkIHRvIHRoZW0gYW5kIHRvIHRoZQorY29tbXVuaXR5IG9mIHVzZXJzIG9uIGRzc3NsaXN0QG11bGJlcnJ5dGVjaC5jb20gZm9yIG1ha2luZworc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyB0byB0aGlzIHdvcmsgYW5kIGZvciBhbnN3ZXJpbmcgbXkgbWFueQorcXVlc3Rpb25zLgorCitUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBKYWRlOgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KK2ZpbGVzICh0aGUgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dAorcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsCitjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCitTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZXMgb2YgaW5kaXZpZHVhbHMKK2NyZWRpdGVkIHdpdGggY29udHJpYnV0aW9uIHRvIHRoaXMgc29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIKK2RlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK2Zyb20gdGhlIGluZGl2aWR1YWxzIGluIHF1ZXN0aW9uLgorCitBbnkgc3R5bGVzaGVldCBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB0aGF0IGlzIHB1YmxpY2FsbHkKK2Rpc3RyaWJ1dGVkIHdpbGwgYmUgaWRlbnRpZmllZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUgYW5kIHRoZQordmVyc2lvbiBzdHJpbmdzIGluIGFueSBkZXJpdmVkIFNvZnR3YXJlIHdpbGwgYmUgY2hhbmdlZCBzbyB0aGF0CitubyBwb3NzaWJpbGl0eSBvZiBjb25mdXNpb24gYmV0d2VlbiB0aGUgZGVyaXZlZCBwYWNrYWdlIGFuZCB0aGlzCitTb2Z0d2FyZSB3aWxsIGV4aXN0LgorCitXYXJyYW50eQorLS0tLS0tLS0KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBOT1JNQU4gV0FMU0ggT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VDTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzhiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMS4wCkBAIC0wLDAgKzEsNTUgQEAKKworVGhpcyBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcwordG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIKKyh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcKK3RoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworQ29weXJpZ2h0IChjKSA8eWVhcj4gPGNvcHlyaWdodCBob2xkZXJzPgorCitMaWNlbnNlZCB1bmRlciB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2UgdmVyc2lvbiAxLjAKKworVGhpcyBPcmlnaW5hbCBXb3JrLCBpbmNsdWRpbmcgc29mdHdhcmUsIHNvdXJjZSBjb2RlLCBkb2N1bWVudHMsCitvciBvdGhlciByZWxhdGVkIGl0ZW1zLCBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcihzKQorc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlLiBCeQorb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIE9yaWdpbmFsIFdvcmssIHlvdSBhZ3JlZSB0aGF0IHlvdQoraGF2ZSByZWFkLCB1bmRlcnN0YW5kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGUgRWR1Y2F0aW9uYWwgQ29tbXVuaXR5IExpY2Vuc2U6CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQKK3N1YmxpY2Vuc2UgdGhpcyBPcmlnaW5hbCBXb3JrIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiwgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGZvciBhbnkgcHVycG9zZSwgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgdG8gdGhlCitjb3B5cmlnaHQgaG9sZGVyKHMpIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZQorZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgcG9ydGlvbnMgdGhlcmVvZiwKK2luY2x1ZGluZyBtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmVzLCB0aGF0IHlvdSBtYWtlOgorCisKK1RoZSBmdWxsIHRleHQgb2YgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIGluIGEgbG9jYXRpb24gdmlld2FibGUgdG8KK3VzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay4KKworCitBbnkgcHJlLWV4aXN0aW5nIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBkaXNjbGFpbWVycywgbm90aWNlcywgb3IgdGVybXMgYW5kCitjb25kaXRpb25zLgorCisKKworTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIGluY2x1ZGluZyB0aGUKK2RhdGUgdGhlIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKK0FueSBtb2RpZmljYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG11c3QgYmUgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIG1hbm5lciBhcwordG8gYXZvaWQgYW55IGNvbmZ1c2lvbiB3aXRoIHRoZSBPcmlnaW5hbCBXb3JrIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitUaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiBjb3B5cmlnaHQgaG9sZGVyKHMpIG1heSBOT1QgYmUgdXNlZAoraW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIE9yaWdpbmFsIG9yIERlcml2YXRpdmUKK1dvcmtzIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluCit0aGUgT3JpZ2luYWwgV29yayBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcworcmVtYWluIHdpdGggdGhlIGNvcHlyaWdodCBob2xkZXJzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FQ0wtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGM5OWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUNMLTIuMApAQCAtMCwwICsxLDk5IEBACisKK0VkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorKHBsYWluIHRleHQpCitFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZQorCitWZXJzaW9uIDIuMCwgQXByaWwgMjAwNworCitodHRwOi8vd3d3Lm9zZWR1Lm9yZy9saWNlbnNlcy8KKworVGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHZlcnNpb24gMi4wICgiRUNMIikgY29uc2lzdHMgb2YgdGhlIEFwYWNoZSAyLjAgbGljZW5zZSwgbW9kaWZpZWQgdG8gY2hhbmdlIHRoZSBzY29wZSBvZiB0aGUgcGF0ZW50IGdyYW50IGluIHNlY3Rpb24gMyB0byBiZSBzcGVjaWZpYyB0byB0aGUgbmVlZHMgb2YgdGhlIGVkdWNhdGlvbiBjb21tdW5pdGllcyB1c2luZyB0aGlzIGxpY2Vuc2UuIFRoZSBvcmlnaW5hbCBBcGFjaGUgMi4wIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKzEuIERlZmluaXRpb25zLgorCisiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIiBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50IHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dCBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZSBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4KKworU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKzMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLgorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKSB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0IG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gQW55IHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgaGVyZWJ5IHdpdGggcmVzcGVjdCB0byBjb250cmlidXRpb25zIGJ5IGFuIGluZGl2aWR1YWwgZW1wbG95ZWQgYnkgYW4gaW5zdGl0dXRpb24gb3Igb3JnYW5pemF0aW9uIGlzIGxpbWl0ZWQgdG8gcGF0ZW50IGNsYWltcyB3aGVyZSB0aGUgaW5kaXZpZHVhbCB0aGF0IGlzIHRoZSBhdXRob3Igb2YgdGhlIFdvcmsgaXMgYWxzbyB0aGUgaW52ZW50b3Igb2YgdGhlIHBhdGVudCBjbGFpbXMgbGljZW5zZWQsIGFuZCB3aGVyZSB0aGUgb3JnYW5pemF0aW9uIG9yIGluc3RpdHV0aW9uIGhhcyB0aGUgcmlnaHQgdG8gZ3JhbnQgc3VjaCBsaWNlbnNlIHVuZGVyIGFwcGxpY2FibGUgZ3JhbnQgYW5kIHJlc2VhcmNoIGZ1bmRpbmcgYWdyZWVtZW50cy4gTm8gb3RoZXIgZXhwcmVzcyBvciBpbXBsaWVkIGxpY2Vuc2VzIGFyZSBncmFudGVkLgorCis0LiBSZWRpc3RyaWJ1dGlvbi4KKworWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1lvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKK1lvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKK1lvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCitJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cyBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0IGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24gbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZCBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCitZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGggdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLgorCitVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLCBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCis2LiBUcmFkZW1hcmtzLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaCBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueSByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCis5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuCisKK1doaWxlIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBFZHVjYXRpb25hbCBDb21tdW5pdHkgTGljZW5zZSB0byB5b3VyIHdvcmsKKworVG8gYXBwbHkgdGhlIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoCit0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5CiticmFja2V0cyAiW10iIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uCisoRG9uYHQgaW5jbHVkZSB0aGUgYnJhY2tldHMhKSBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlCithcHByb3ByaWF0ZSBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZAordGhhdCBhIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbgordGhlIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgoraWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdIExpY2Vuc2VkIHVuZGVyIHRoZQorIEVkdWNhdGlvbmFsIENvbW11bml0eSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkKKyBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5Cisgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIAorIGh0dHA6Ly93d3cub3NlZHUub3JnL2xpY2Vuc2VzL0VDTC0yLjAKKworIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcworIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZworIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRURMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiMWViMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VETC0xLjAKQEAgLTAsMCArMSwxMyBAQAorRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSAtIHYgMS4wCisKK0NvcHlyaWdodCAoYykgMjAwNywgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgbGljZW5zb3JzLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRUZMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5OTYwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0xLjAKQEAgLTAsMCArMSwyNSBAQAorCitFaWZmZWwgRm9ydW0gTGljZW5zZSwgdmVyc2lvbiAxCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kL29yIGRpc3RyaWJ1dGUKK3RoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKKworICAtIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB1bmNoYW5nZWQKKworICAtIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBwYWNrYWdlLCB3aGV0aGVyIG1vZGlmaWVkIG9yIG5vdCwKKyAgICBpbmNsdWRlcyB0aGlzIGZpbGUKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgYWxzbyBncmFudGVkIHRvIGRpc3RyaWJ1dGUgYmluYXJ5IHByb2dyYW1zIHdoaWNoCitkZXBlbmQgb24gdGhpcyBwYWNrYWdlLCBwcm92aWRlZCB0aGF0OgorCisgIC0gaWYgdGhlIGJpbmFyeSBwcm9ncmFtIGRlcGVuZHMgb24gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMKKyAgICBwYWNrYWdlLCB5b3UgbXVzdCBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMKKyAgICBwYWNrYWdlCisKK1RISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLiBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFBBQ0tBR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VGTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzdmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FRkwtMi4wCkBAIC0wLDAgKzEsMTIgQEAKKworRWlmZmVsIEZvcnVtIExpY2Vuc2UsIHZlcnNpb24gMgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZC9vciBkaXN0cmlidXRlIHRoaXMgcGFja2FnZSwgcHJvdmlkZWQgdGhhdDoKK2NvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCB1bmNoYW5nZWQsCithbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcGFja2FnZSwgd2hldGhlciBtb2RpZmllZCBvciBub3QsIGluY2x1ZGVzIHRoaXMgbGljZW5zZSB0ZXh0LgorUGVybWlzc2lvbiBpcyBoZXJlYnkgYWxzbyBncmFudGVkIHRvIGRpc3RyaWJ1dGUgYmluYXJ5IHByb2dyYW1zIHdoaWNoIGRlcGVuZCBvbiB0aGlzIHBhY2thZ2UuIElmIHRoZSBiaW5hcnkgcHJvZ3JhbSBkZXBlbmRzIG9uIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBwdWJsaWNseSByZWxlYXNlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4KKyoqKioqKioqKioqKioqKioqKioqKioqCisKK1RISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBQQUNLQUdFLiAKKyoqKioqKioqKioqKioqKioqKioqKioqCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNzZlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FUEwtMS4wCkBAIC0wLDAgKzEsNzIgQEAKKworRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKK2IpIGluIHRoZSBjYXNlIG9mIGVhY2ggc3Vic2VxdWVudCBDb250cmlidXRvcjoKK2kpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAoraWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiBgb3JpZ2luYXRlc2AgZnJvbSBhIENvbnRyaWJ1dG9yIGlmIGl0IHdhcyBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYuIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKyJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJQcm9ncmFtIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQ29udHJpYnV0b3JzLgorCisyLiBHUkFOVCBPRiBSSUdIVFMKKworYSkgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCitjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorZCkgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2EpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKK2IpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKK2kpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CitpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CitpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAoraXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2EpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uCitDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFByb2dyYW0uCisKK0VhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QgY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIG90aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIHRvIHRoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gd3JpdGluZyBvZiBzdWNoIGNsYWltLCBhbmQgYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkgcGFydGljaXBhdGUgaW4gYW55IHN1Y2ggY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yYHMgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3Igd291bGQgaGF2ZSB0byBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkgZGFtYWdlcyBhcyBhIHJlc3VsdCwgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCAsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyLiBUaGUgQWdyZWVtZW50IFN0ZXdhcmQgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudCBTdGV3YXJkIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCB0byBhIHN1aXRhYmxlIHNlcGFyYXRlIGVudGl0eS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudCByZWNlaXZlcyBubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVEYXRhZ3JpZCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2ZTUwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VVRGF0YWdyaWQKQEAgLTAsMCArMSwyOSBAQAorCitFVSBEYXRhR3JpZCBTb2Z0d2FyZSBMaWNlbnNlCisKK0NvcHlyaWdodCAoYykgMjAwMSBFVSBEYXRhR3JpZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIHRvIHRoZSBFVSBEYXRhR3JpZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEVVIERhdGFHcmlkLCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cuZXUtZGF0YWdyaWQub3JnLy4KKworSW5zdGFsbGF0aW9uLCB1c2UsIHJlcHJvZHVjdGlvbiwgZGlzcGxheSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywgYXJlIHBlcm1pdHRlZC4gQW55IGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgeW91IG9yIHlvdXIgc3ViLWxpY2Vuc2VlcyBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHRoaXMgc29mdHdhcmUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYWJvdmUgbGljZW5zZSBzdGF0ZW1lbnQgYXMgd2VsbCBhcyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgaW4gdGhlIHNvZnR3YXJlLCB0aGUgdXNlciBkb2N1bWVudGF0aW9uIGFuZCBhbnkgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHNvZnR3YXJlLgorCisyLiBUaGUgdXNlciBkb2N1bWVudGF0aW9uLCBpZiBhbnksIGluY2x1ZGVkIHdpdGggYSByZWRpc3RyaWJ1dGlvbiwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgbm90aWNlOgorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEVVIERhdGFHcmlkIChodHRwOi8vd3d3LmV1LWRhdGFncmlkLm9yZy8pLiIKKworQWx0ZXJuYXRpdmVseSwgaWYgdGhhdCBpcyB3aGVyZSB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLCB0aGlzIGFja25vd2xlZGdtZW50IG11c3QgYmUgcmVwcm9kdWNlZCBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLgorCiszLiBUaGUgbmFtZXMgIkVERyIsICJFREcgVG9vbGtpdCIsICYjODIyMDtFVSBEYXRhR3JpZCYjODIyMTsgYW5kICJFVSBEYXRhR3JpZCBQcm9qZWN0IiBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHNvZnR3YXJlLCBvciBwcm9kdWN0cyBkZXJpdmVkCit0aGVyZWZyb20sIGV4Y2VwdCB3aXRoIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBieSBoZXAtcHJvamVjdC1ncmlkLWVkZy1saWNlbnNlQGNlcm4uY2guCisKKzQuIFlvdSBhcmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueW9uZSB3aXRoIGFueSBidWcgZml4ZXMsIHBhdGNoZXMsIHVwZ3JhZGVzIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlcyBvZiB0aGUgZmVhdHVyZXMsZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGlzIHNvZnR3YXJlIHRoYXQgeW91IG1heSBkZXZlbG9wLiBIb3dldmVyLCBpZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIHlvdXIgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzIG9yIGRlcml2YXRpdmUgd29ya3Mgd2l0aG91dCBjb250ZW1wb3JhbmVvdXNseSByZXF1aXJpbmcgdXNlcnMgdG8gZW50ZXIgaW50byBhIHNlcGFyYXRlIHdyaXR0ZW4gbGljZW5zZSBhZ3JlZW1lbnQsIHRoZW4geW91IGFyZSBkZWVtZWQgdG8gaGF2ZSBncmFudGVkIHBhcnRpY2lwYW50cyBpbiB0aGUgRVUgRGF0YUdyaWQgYSB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGxpY2Vuc2UgdG8gaW5zdGFsbCwgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIG1vZGlmeSwgcmVkaXN0cmlidXRlIGFuZCBzdWItbGljZW5zZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlIHdvcmtzLCB3aGV0aGVyIGluIGJpbmFyeSBvciBzb3VyY2UgY29kZSBmb3JtLCB1bmRlciB0aGUgbGljZW5zZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucy4KKworNS4gRElTQ0xBSU1FUiAKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgRVUgREFUQUdSSUQgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBVU0UgQVJFIERJU0NMQUlNRUQuIFRIRSBFVSBEQVRBR1JJRCBBTkQgQ09OVFJJQlVUT1JTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT04gVEhBVCBUSEUgU09GVFdBUkUsIE1PRElGSUNBVElPTlMsIEVOSEFOQ0VNRU5UUyBPUiBERVJJVkFUSVZFIFdPUktTIFRIRVJFT0YsIFdJTEwgTk9UIElORlJJTkdFIEFOWSBQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVUIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hULiAKKworNi4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVEhFIEVVIERBVEFHUklEIEFORCBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBOTyBMSUFCSUxJVFkgVE8gTElDRU5TRUUgT1IgT1RIRVIgUEVSU09OUyBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgRVhFTVBMQVJZLCBPUiBQVU5JVElWRSBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTiwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFBST0RVQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGVjYmZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjAKQEAgLTAsMCArMSwxODQgQEAKKworRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgCitWLjEuMCAKK0VVUEwgJiMxNjk7IHRoZSBFdXJvcGVhbiBDb21tdW5pdHkgMjAwNyAKK1RoaXMgRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UgKHRoZSAmIzgyMjA7RVVQTCYjODIyMTspIGFwcGxpZXMgdG8gdGhlIFdvcmsgb3IgU29mdHdhcmUgKGFzIAorZGVmaW5lZCBiZWxvdykgd2hpY2ggaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS4gQW55IHVzZSBvZiB0aGUgV29yaywgb3RoZXIgCit0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UgaXMgY292ZXJlZCBieSBhIHJpZ2h0IAorb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIFdvcmspLiAKK1RoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugd2hlbiB0aGUgTGljZW5zb3IgKGFzIGRlZmluZWQgCitiZWxvdykgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSAKK09yaWdpbmFsIFdvcms6IAorTGljZW5zZWQgdW5kZXIgdGhlIEVVUEwgVi4xLjAgCitvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLiAKKzEuIERlZmluaXRpb25zCitJbiB0aGlzIExpY2VuY2UsIHRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6IAorJiM4NzIyOyBUaGUgTGljZW5jZTogdGhpcyBMaWNlbmNlLiAKKyYjODcyMjsgVGhlIE9yaWdpbmFsIFdvcmsgb3IgdGhlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYW5kL29yIGNvbW11bmljYXRlZCBieSAKK3RoZSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2VuY2UsIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSBhbmQgYWxzbyBhcyBFeGVjdXRhYmxlIAorQ29kZSBhcyB0aGUgY2FzZSBtYXkgYmUuIAorJiM4NzIyOyBEZXJpdmF0aXZlIFdvcmtzOiB0aGUgd29ya3Mgb3Igc29mdHdhcmUgdGhhdCBjb3VsZCBiZSBjcmVhdGVkIGJ5IHRoZSBMaWNlbnNlZSwgYmFzZWQgCit1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZi4gVGhpcyBMaWNlbmNlIGRvZXMgbm90IGRlZmluZSB0aGUgCitleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9yIGRlcGVuZGVuY2Ugb24gdGhlIE9yaWdpbmFsIFdvcmsgcmVxdWlyZWQgaW4gb3JkZXIgdG8gCitjbGFzc2lmeSBhIHdvcmsgYXMgYSBEZXJpdmF0aXZlIFdvcms7IHRoaXMgZXh0ZW50IGlzIGRldGVybWluZWQgYnkgY29weXJpZ2h0IGxhdyAKK2FwcGxpY2FibGUgaW4gdGhlIGNvdW50cnkgbWVudGlvbmVkIGluIEFydGljbGUgMTUuICAKKyYjODcyMjsgVGhlIFdvcms6IHRoZSBPcmlnaW5hbCBXb3JrIGFuZC9vciBpdHMgRGVyaXZhdGl2ZSBXb3Jrcy4gCismIzg3MjI7IFRoZSBTb3VyY2UgQ29kZTogdGhlIGh1bWFuLXJlYWRhYmxlIGZvcm0gb2YgdGhlIFdvcmsgd2hpY2ggaXMgdGhlIG1vc3QgCitjb252ZW5pZW50IGZvciBwZW9wbGUgdG8gc3R1ZHkgYW5kIG1vZGlmeS4gCismIzg3MjI7IFRoZSBFeGVjdXRhYmxlIENvZGU6IGFueSBjb2RlIHdoaWNoIGhhcyBnZW5lcmFsbHkgYmVlbiBjb21waWxlZCBhbmQgd2hpY2ggaXMgCittZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSBhIGNvbXB1dGVyIGFzIGEgcHJvZ3JhbS4gCismIzg3MjI7IFRoZSBMaWNlbnNvcjogdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHRoYXQgIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlIAorV29yayB1bmRlciB0aGUgTGljZW5jZS4gCismIzg3MjI7IENvbnRyaWJ1dG9yKHMpOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1vZGlmaWVzIHRoZSBXb3JrIHVuZGVyIHRoZSAKK0xpY2VuY2UsIG9yIG90aGVyd2lzZSBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgYSBEZXJpdmF0aXZlIFdvcmsuIAorJiM4NzIyOyBUaGUgTGljZW5zZWUgb3IgJiM4MjIwO1lvdSYjODIyMTs6ICBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUgCitTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuICYjODcyMjsgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uOiBhbnkgYWN0IG9mIHNlbGxpbmcsICBnaXZpbmcsIGxlbmRpbmcsIHJlbnRpbmcsIAorZGlzdHJpYnV0aW5nLCBjb21tdW5pY2F0aW5nLCB0cmFuc21pdHRpbmcsIG9yIG90aGVyd2lzZSBtYWtpbmcgYXZhaWxhYmxlLCBvbi1saW5lIG9yIAorb2ZmLWxpbmUsIGNvcGllcyBvZiB0aGUgV29yayBhdCB0aGUgZGlzcG9zYWwgb2YgYW55IG90aGVyIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLiAKKzIuIFNjb3BlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZQorVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3ViLWxpY2Vuc2FibGUgCitsaWNlbmNlIHRvIGRvIHRoZSBmb2xsb3dpbmcsIGZvciB0aGUgZHVyYXRpb24gb2YgY29weXJpZ2h0IHZlc3RlZCBpbiB0aGUgT3JpZ2luYWwgV29yazogCismIzg3MjI7IHVzZSB0aGUgV29yayBpbiBhbnkgY2lyY3Vtc3RhbmNlIGFuZCBmb3IgYWxsIHVzYWdlLCAKKyYjODcyMjsgcmVwcm9kdWNlIHRoZSBXb3JrLCAKKyYjODcyMjsgbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgbWFrZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIFdvcmssIAorJiM4NzIyOyBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljLCBpbmNsdWRpbmcgdGhlIHJpZ2h0IHRvIG1ha2UgYXZhaWxhYmxlIG9yIGRpc3BsYXkgdGhlIFdvcmsgCitvciBjb3BpZXMgdGhlcmVvZiB0byB0aGUgcHVibGljIGFuZCBwZXJmb3JtIHB1YmxpY2x5LCBhcyB0aGUgY2FzZSBtYXkgYmUsIHRoZSBXb3JrLCAKKyYjODcyMjsgZGlzdHJpYnV0ZSB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwgCismIzg3MjI7IGxlbmQgYW5kIHJlbnQgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsIAorJiM4NzIyOyBzdWItbGljZW5zZSByaWdodHMgaW4gdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuIAorVGhvc2UgcmlnaHRzIGNhbiBiZSBleGVyY2lzZWQgb24gYW55IG1lZGlhLCAgc3VwcG9ydHMgYW5kIGZvcm1hdHMsIHdoZXRoZXIgbm93IGtub3duIG9yIAorbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby4gCitJbiB0aGUgY291bnRyaWVzIHdoZXJlIG1vcmFsIHJpZ2h0cyBhcHBseSwgdGhlIExpY2Vuc29yIHdhaXZlcyBoaXMgcmlnaHQgdG8gZXhlcmNpc2UgaGlzIG1vcmFsIAorcmlnaHQgdG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBpbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB0aGUgbGljZW5jZSBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIAoraGVyZSBhYm92ZSBsaXN0ZWQuIAorVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgTGljZW5zZWUgcm95YWx0eS1mcmVlLCBub24gZXhjbHVzaXZlIHVzYWdlIHJpZ2h0cyB0byBhbnkgcGF0ZW50cyAKK2hlbGQgYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHVzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb24gdGhlIFdvcmsgCit1bmRlciB0aGlzIExpY2VuY2UuIAorMy4gQ29tbXVuaWNhdGlvbiBvZiB0aGUgU291cmNlIENvZGUKK1RoZSBMaWNlbnNvciBtYXkgcHJvdmlkZSB0aGUgV29yayBlaXRoZXIgaW4gaXRzIFNvdXJjZSBDb2RlIGZvcm0sIG9yIGFzIEV4ZWN1dGFibGUgQ29kZS4gSWYgCit0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsICB0aGUgTGljZW5zb3IgcHJvdmlkZXMgaW4gYWRkaXRpb24gYSBtYWNoaW5lcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFdvcmsgdGhhdCB0aGUgCitMaWNlbnNvciBkaXN0cmlidXRlcyBvciBpbmRpY2F0ZXMsIGluIGEgbm90aWNlIGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBhdHRhY2hlZCB0byB0aGUgCitXb3JrLCBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlIFNvdXJjZSBDb2RlIGlzIGVhc2lseSBhbmQgZnJlZWx5IGFjY2Vzc2libGUgZm9yIGFzIGxvbmcgYXMgdGhlIAorTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgYW5kL29yIGNvbW11bmljYXRlIHRoZSBXb3JrLiAKKzQuIExpbWl0YXRpb25zIG9uIGNvcHlyaWdodAorTm90aGluZyBpbiB0aGlzIExpY2VuY2UgaXMgaW50ZW5kZWQgdG8gZGVwcml2ZSB0aGUgTGljZW5zZWUgb2YgdGhlIGJlbmVmaXRzIGZyb20gYW55IGV4Y2VwdGlvbiAKK29yIGxpbWl0YXRpb24gdG8gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIHJpZ2h0cyBvd25lcnMgaW4gdGhlIE9yaWdpbmFsIFdvcmsgb3IgU29mdHdhcmUsIG9mIAordGhlIGV4aGF1c3Rpb24gb2YgdGhvc2UgcmlnaHRzIG9yIG9mIG90aGVyIGFwcGxpY2FibGUgbGltaXRhdGlvbnMgdGhlcmV0by4gCis1LiBPYmxpZ2F0aW9ucyBvZiB0aGUgTGljZW5zZWUKK1RoZSBncmFudCBvZiB0aGUgcmlnaHRzIG1lbnRpb25lZCBhYm92ZSBpcyBzdWJqZWN0IHRvIHNvbWUgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucyAKK2ltcG9zZWQgb24gdGhlIExpY2Vuc2VlLiBUaG9zZSBvYmxpZ2F0aW9ucyBhcmUgdGhlIGZvbGxvd2luZzogQXR0cmlidXRpb24gcmlnaHQ6IHRoZSBMaWNlbnNlZSBzaGFsbCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrcyBub3RpY2VzIAorYW5kIGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFRoZSBMaWNlbnNlZSBtdXN0IAoraW5jbHVkZSBhIGNvcHkgb2Ygc3VjaCBub3RpY2VzIGFuZCBhIGNvcHkgb2YgdGhlIExpY2VuY2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGhlL3NoZSAKK2Rpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0IGNhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gY2FycnkgCitwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgdGhlIFdvcmsgaGFzIGJlZW4gbW9kaWZpZWQgYW5kIHRoZSBkYXRlIG9mIG1vZGlmaWNhdGlvbi4gCitDb3B5bGVmdCBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBkaXN0cmlidXRlcyBhbmQvb3IgIGNvbW11bmljYXRlcyBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIAorV29ya3Mgb3IgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCB0aGlzIERpc3RyaWJ1dGlvbiBhbmQvb3IgCitDb21tdW5pY2F0aW9uIHdpbGwgYmUgZG9uZSB1bmRlciB0aGUgdGVybXMgIG9mIHRoaXMgTGljZW5jZS4gVGhlIExpY2Vuc2VlIChiZWNvbWluZyAKK0xpY2Vuc29yKSBjYW5ub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yICBjb25kaXRpb25zIG9uIHRoZSBXb3JrIG9yIAorRGVyaXZhdGl2ZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLiAKK0NvbXBhdGliaWxpdHkgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgRGlzdHJpYnV0ZXMgYW5kL29yIENvbW11bmljYXRlcyBEZXJpdmF0aXZlIFdvcmtzIG9yIAorY29waWVzIHRoZXJlb2YgYmFzZWQgdXBvbiBib3RoIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbm90aGVyIHdvcmsgbGljZW5zZWQgdW5kZXIgYSAKK0NvbXBhdGlibGUgTGljZW5jZSwgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gY2FuIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIAordGhpcyBDb21wYXRpYmxlIExpY2VuY2UuIEZvciB0aGUgc2FrZSBvZiB0aGlzIGNsYXVzZSwgJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZSYjODIyMTsgcmVmZXJzIHRvIHRoZSAKK2xpY2VuY2VzIGxpc3RlZCBpbiB0aGUgYXBwZW5kaXggYXR0YWNoZWQgdG8gIHRoaXMgTGljZW5jZS4gU2hvdWxkIHRoZSAgTGljZW5zZWUmIzgyMTc7cyBvYmxpZ2F0aW9ucyAKK3VuZGVyIHRoZSBDb21wYXRpYmxlIExpY2VuY2UgY29uZmxpY3Qgd2l0aCBoaXMvaGVyICBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2VuY2UsIHRoZSAKK29ibGlnYXRpb25zIG9mIHRoZSBDb21wYXRpYmxlIExpY2VuY2Ugc2hhbGwgcHJldmFpbC4gIAorUHJvdmlzaW9uIG9mIFNvdXJjZSBDb2RlOiBXaGVuIGRpc3RyaWJ1dGluZyBhbmQvb3IgY29tbXVuaWNhdGluZyBjb3BpZXMgb2YgdGhlIFdvcmssIHRoZSAKK0xpY2Vuc2VlIHdpbGwgcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IgIGluZGljYXRlIGEgcmVwb3NpdG9yeSAKK3doZXJlIHRoaXMgU291cmNlIHdpbGwgYmUgZWFzaWx5IGFuZCBmcmVlbHkgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gCitkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4gCitMZWdhbCBQcm90ZWN0aW9uOiBUaGlzIExpY2VuY2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCAKK3NlcnZpY2UgbWFya3MsIG9yIG5hbWVzIG9mIHRoZSBMaWNlbnNvciwgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIAoraW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgY29weXJpZ2h0IG5vdGljZS4gCis2LiBDaGFpbiBvZiBBdXRob3JzaGlwCitUaGUgb3JpZ2luYWwgTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBPcmlnaW5hbCBXb3JrIGdyYW50ZWQgaGVyZXVuZGVyIGlzIAorb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZCBhdXRob3JpdHkgdG8gZ3JhbnQgCit0aGUgTGljZW5jZS4gCitFYWNoIENvbnRyaWJ1dG9yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgbW9kaWZpY2F0aW9ucyBoZS9zaGUgYnJpbmdzIHRvIHRoZSBXb3JrIAorYXJlIG93bmVkIGJ5IGhpbS9oZXIgb3IgbGljZW5zZWQgdG8gaGltL2hlciBhbmQgdGhhdCBoZS9zaGUgaGFzIHRoZSBwb3dlciBhbmQgYXV0aG9yaXR5IHRvIAorZ3JhbnQgdGhlIExpY2VuY2UuIAorRWFjaCB0aW1lIFlvdSwgYXMgYSBMaWNlbnNlZSwgIHJlY2VpdmUgdGhlIFdvcmssIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBhbmQgc3Vic2VxdWVudCAKK0NvbnRyaWJ1dG9ycyBncmFudCBZb3UgYSBsaWNlbmNlIHRvIHRoZWlyIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIFdvcmssIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIAorTGljZW5jZS4gCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5CitUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cyBjb250cmlidXRvcnMuIEl0IAoraXMgbm90IGEgZmluaXNoZWQgd29yayBhbmQgbWF5IHRoZXJlZm9yZSBjb250YWluIGRlZmVjdHMgb3IgJiM4MjIwO2J1Z3MmIzgyMjE7IGluaGVyZW50IHRvIHRoaXMgdHlwZSBvZiAKK3NvZnR3YXJlIGRldmVsb3BtZW50LiAKK0ZvciB0aGUgYWJvdmUgcmVhc29uLCB0aGUgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgTGljZW5jZSBvbiBhbiAmIzgyMjA7YXMgaXMmIzgyMjE7IGJhc2lzIGFuZCB3aXRob3V0IAord2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBtZXJjaGFudGFiaWxpdHksIAorZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIGFic2VuY2Ugb2YgZGVmZWN0cyBvciBlcnJvcnMsIGFjY3VyYWN5LCBub24taW5mcmluZ2VtZW50IG9mIAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcyBzdGF0ZWQgaW4gQXJ0aWNsZSA2IG9mIHRoaXMgTGljZW5jZS4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGlzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBMaWNlbmNlIGFuZCBhIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50IG9mIAorYW55IHJpZ2h0cyB0byB0aGUgV29yay4gCis4LiBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eQorRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsIHBlcnNvbnMsIHRoZSAKK0xpY2Vuc29yIHdpbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0IG9yIGluZGlyZWN0LCBtYXRlcmlhbCBvciBtb3JhbCwgZGFtYWdlcyBvZiAKK2FueSBraW5kLCBhcmlzaW5nIG91dCBvZiAgdGhlIExpY2VuY2Ugb3Igb2YgdGhlIHVzZSBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgCitkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgCithbnkgY29tbWVyY2lhbCBkYW1hZ2UsIGV2ZW4gaWYgdGhlIExpY2Vuc29yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlICBwb3NzaWJpbGl0eSBvZiBzdWNoIAorZGFtYWdlLiBIb3dldmVyLCB0aGUgTGljZW5zb3Igd2lsbCBiZSBsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggCitsYXdzIGFwcGx5IHRvIHRoZSBXb3JrLiAKKzkuIEFkZGl0aW9uYWwgYWdyZWVtZW50cworV2hpbGUgZGlzdHJpYnV0aW5nIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MsIFlvdSBtYXkgY2hvb3NlIHRvIGNvbmNsdWRlIGFuIAorYWRkaXRpb25hbCBhZ3JlZW1lbnQgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlICBvZiBzdXBwb3J0LCB3YXJyYW50eSwgCitpbmRlbW5pdHksIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igc2VydmljZXMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5jZS4gCitIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiB5b3VyIG93biBiZWhhbGYgYW5kIG9uIHlvdXIgCitzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBvciBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIAorWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIAorYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IHN1Y2ggQ29udHJpYnV0b3IgYnkgdGhlIGZhY3QgWW91IGhhdmUgYWNjZXB0ZWQgYW55IHN1Y2ggCit3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4gCisxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZQorVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbmNlIGNhbiBiZSBhY2NlcHRlZCBieSBjbGlja2luZyBvbiBhbiBpY29uICYjODIyMDtJIGFncmVlJiM4MjIxOyBwbGFjZWQgdW5kZXIgCit0aGUgYm90dG9tIG9mIGEgd2luZG93IGRpc3BsYXlpbmcgdGhlIHRleHQgb2YgdGhpcyBMaWNlbmNlIG9yIGJ5IGFmZmlybWluZyBjb25zZW50IGluIGFueSAKK290aGVyIHNpbWlsYXIgd2F5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIGFwcGxpY2FibGUgbGF3LiBDbGlja2luZyBvbiB0aGF0IGljb24gCitpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2VuY2UgYW5kICBhbGwgb2YgaXRzIHRlcm1zIGFuZCAKK2NvbmRpdGlvbnMuICAKK1NpbWlsYXJseSwgeW91IGlycmV2b2NhYmx5IGFjY2VwdCB0aGlzIExpY2VuY2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgYnkgCitleGVyY2lzaW5nIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5jZSwgc3VjaCBhcyB0aGUgdXNlIG9mIHRoZSBXb3JrLCAKK3RoZSBjcmVhdGlvbiBieSBZb3Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgdGhlIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBieSBZb3UgCitvZiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi4gIAorMTEuIEluZm9ybWF0aW9uIHRvIHRoZSBwdWJsaWMKK0luIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljIAorY29tbXVuaWNhdGlvbiBieSBZb3UgKGZvciBleGFtcGxlLCBieSBvZmZlcmluZyB0byBkb3dubG9hZCB0aGUgV29yayBmcm9tIGEgcmVtb3RlIAorbG9jYXRpb24pIHRoZSBkaXN0cmlidXRpb24gY2hhbm5lbCBvciBtZWRpYSAoZm9yIGV4YW1wbGUsIGEgd2Vic2l0ZSkgbXVzdCBhdCBsZWFzdCBwcm92aWRlIHRvIAordGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcgdGhlIGlkZW50aWZpY2F0aW9uIGFuZCAKK2FkZHJlc3Mgb2YgdGhlIExpY2Vuc29yLCB0aGUgTGljZW5jZSBhbmQgdGhlIHdheSBpdCBtYXkgYmUgYWNjZXNzaWJsZSwgY29uY2x1ZGVkLCBzdG9yZWQgYW5kIAorcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuIAorMTIuIFRlcm1pbmF0aW9uIG9mIHRoZSBMaWNlbmNlCitUaGUgTGljZW5jZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSAKK3RoZSBMaWNlbnNlZSBvZiB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuIAorU3VjaCBhIHRlcm1pbmF0aW9uIHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5jZXMgb2YgYW55IHBlcnNvbiB3aG8gaGFzIHJlY2VpdmVkIHRoZSBXb3JrIAorZnJvbSB0aGUgTGljZW5zZWUgdW5kZXIgdGhlIExpY2VuY2UsIHByb3ZpZGVkIHN1Y2ggcGVyc29ucyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggCit0aGUgTGljZW5jZS4gIDEzLiBNaXNjZWxsYW5lb3VzCitXaXRob3V0IHByZWp1ZGljZSBvZiBBcnRpY2xlIDkgYWJvdmUsIHRoZSBMaWNlbmNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBiZXR3ZWVuIAordGhlIFBhcnRpZXMgYXMgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZXVuZGVyLiAKK0lmIGFueSBwcm92aXNpb24gb2YgdGhlIExpY2VuY2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGlzIHdpbGwgbm90IAorYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgTGljZW5jZSBhcyBhIHdob2xlLiBTdWNoIHByb3Zpc2lvbiB3aWxsIGJlIAorY29uc3RydWVkIGFuZC9vciByZWZvcm1lZCBzbyBhcyBuZWNlc3NhcnkgdG8gbWFrZSBpdCB2YWxpZCBhbmQgZW5mb3JjZWFibGUuIAorVGhlIEV1cm9wZWFuIENvbW1pc3Npb24gbWF5IHB1dCBpbnRvIGZvcmNlIHRyYW5zbGF0aW9ucyBhbmQvb3IgYmluZGluZyBuZXcgdmVyc2lvbnMgb2YgCit0aGlzIExpY2VuY2UsIHNvIGZhciB0aGlzIGlzIHJlcXVpcmVkIGFuZCByZWFzb25hYmxlLiBOZXcgdmVyc2lvbnMgb2YgdGhlIExpY2VuY2Ugd2lsbCBiZSAKK3B1Ymxpc2hlZCB3aXRoIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyLiBUaGUgbmV3IHZlcnNpb24gb2YgdGhlIExpY2VuY2UgYmVjb21lcyBiaW5kaW5nIGZvciAKK1lvdSBhcyBzb29uIGFzIFlvdSBiZWNvbWUgYXdhcmUgb2YgaXRzIHB1YmxpY2F0aW9uLiAKKzE0LiBKdXJpc2RpY3Rpb24KK0FueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUgRXVyb3BlYW4gCitDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55IExpY2Vuc2VlLCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgQ291cnQgCitvZiBKdXN0aWNlIG9mIHRoZSBFdXJvcGVhbiBDb21tdW5pdGllcywgYXMgbGFpZCBkb3duIGluIGFydGljbGUgMjM4IG9mIHRoZSBUcmVhdHkgZXN0YWJsaXNoaW5nIAordGhlIEV1cm9wZWFuIENvbW11bml0eS4gCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGJldHdlZW4gUGFydGllcywgb3RoZXIgIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFuZCByZXN1bHRpbmcgCitmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgCitjb21wZXRlbnQgY291cnQgd2hlcmUgdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MuIAorMTUuIEFwcGxpY2FibGUgTGF3CitUaGlzIExpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhdyBvZiB0aGUgRXVyb3BlYW4gVW5pb24gY291bnRyeSB3aGVyZSB0aGUgTGljZW5zb3IgCityZXNpZGVzIG9yIGhhcyBoaXMgcmVnaXN0ZXJlZCBvZmZpY2UuIAorVGhpcyBsaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBCZWxnaWFuIGxhdyBpZjogCismIzg3MjI7IGEgbGl0aWdhdGlvbiBhcmlzZXMgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSAKK0xpY2Vuc2VlOyAKKyYjODcyMjsgdGhlIExpY2Vuc29yLCBvdGhlciB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBoYXMgbm8gcmVzaWRlbmNlIG9yIHJlZ2lzdGVyZWQgCitvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS4gIAorID09PUFwcGVuZGl4CismIzgyMjA7Q29tcGF0aWJsZSBMaWNlbmNlcyYjODIyMTsgYWNjb3JkaW5nIHRvIGFydGljbGUgNSBFVVBMIGFyZTogCismIzg3MjI7IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdi4gMiAKKyYjODcyMjsgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wpIHYuIDIuMSwgdi4gMy4wIAorJiM4NzIyOyBDb21tb24gUHVibGljIExpY2Vuc2Ugdi4gMS4wIAorJiM4NzIyOyBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMCAKKyYjODcyMjsgQ2VjaWxsIHYuIDIuMCAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FVVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTFkODRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRVVQTC0xLjEKQEAgLTAsMCArMSwyMDQgQEAKKworRXVyb3BlYW4gVW5pb24gUHVibGljIExpY2VuY2UKK1YuIDEuMQorRVVQTCAmIzE2OTsgdGhlIEV1cm9wZWFuIENvbW11bml0eSAyMDA3CitUaGlzIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlICh0aGUgJiM4MjIwO0VVUEwmIzgyMjE7KSBhcHBsaWVzIHRvIHRoZSBXb3JrIG9yIFNvZnR3YXJlCisoYXMgZGVmaW5lZCBiZWxvdykgd2hpY2ggaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS4gQW55IHVzZSBvZiB0aGUKK1dvcmssIG90aGVyIHRoYW4gYXMgYXV0aG9yaXNlZCB1bmRlciB0aGlzIExpY2VuY2UgaXMgcHJvaGliaXRlZCAodG8gdGhlIGV4dGVudCBzdWNoIHVzZQoraXMgY292ZXJlZCBieSBhIHJpZ2h0IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBXb3JrKS4KK1RoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugd2hlbiB0aGUgTGljZW5zb3IgKGFzCitkZWZpbmVkIGJlbG93KSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorTGljZW5zZWQgdW5kZXIgdGhlIEVVUEwgVi4xLjEKK29yIGhhcyBleHByZXNzZWQgYnkgYW55IG90aGVyIG1lYW4gaGlzIHdpbGxpbmduZXNzIHRvIGxpY2Vuc2UgdW5kZXIgdGhlIEVVUEwuCisxLiBEZWZpbml0aW9ucworSW4gdGhpcyBMaWNlbmNlLCB0aGUgZm9sbG93aW5nIHRlcm1zIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorLSBUaGUgTGljZW5jZTogdGhpcyBMaWNlbmNlLgorLSBUaGUgT3JpZ2luYWwgV29yayBvciB0aGUgU29mdHdhcmU6IHRoZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBhbmQvb3IgY29tbXVuaWNhdGVkCitieSB0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZQorQ29kZSBhcyB0aGUgY2FzZSBtYXkgYmUuCistIERlcml2YXRpdmUgV29ya3M6IHRoZSB3b3JrcyBvciBzb2Z0d2FyZSB0aGF0IGNvdWxkIGJlIGNyZWF0ZWQgYnkgdGhlIExpY2Vuc2VlLAorYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YuIFRoaXMgTGljZW5jZSBkb2VzIG5vdCBkZWZpbmUKK3RoZSBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9yIGRlcGVuZGVuY2Ugb24gdGhlIE9yaWdpbmFsIFdvcmsgcmVxdWlyZWQgaW4gb3JkZXIgdG8KK2NsYXNzaWZ5IGEgd29yayBhcyBhIERlcml2YXRpdmUgV29yazsgdGhpcyBleHRlbnQgaXMgZGV0ZXJtaW5lZCBieSBjb3B5cmlnaHQgbGF3CithcHBsaWNhYmxlIGluIHRoZSBjb3VudHJ5IG1lbnRpb25lZCBpbiBBcnRpY2xlIDE1LgorLSBUaGUgV29yazogdGhlIE9yaWdpbmFsIFdvcmsgYW5kL29yIGl0cyBEZXJpdmF0aXZlIFdvcmtzLgorLSBUaGUgU291cmNlIENvZGU6IHRoZSBodW1hbi1yZWFkYWJsZSBmb3JtIG9mIHRoZSBXb3JrIHdoaWNoIGlzIHRoZSBtb3N0Citjb252ZW5pZW50IGZvciBwZW9wbGUgdG8gc3R1ZHkgYW5kIG1vZGlmeS4KKy0gVGhlIEV4ZWN1dGFibGUgQ29kZTogYW55IGNvZGUgd2hpY2ggaGFzIGdlbmVyYWxseSBiZWVuIGNvbXBpbGVkIGFuZCB3aGljaCBpcworbWVhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYnkgYSBjb21wdXRlciBhcyBhIHByb2dyYW0uCistIFRoZSBMaWNlbnNvcjogdGhlIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcyB0aGUKK1dvcmsgdW5kZXIgdGhlIExpY2VuY2UuCistIENvbnRyaWJ1dG9yKHMpOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1vZGlmaWVzIHRoZSBXb3JrIHVuZGVyIHRoZQorTGljZW5jZSwgb3Igb3RoZXJ3aXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhIERlcml2YXRpdmUgV29yay4KKy0gVGhlIExpY2Vuc2VlIG9yICYjODIyMDtZb3UmIzgyMjE7OiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KKy0gRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uOiBhbnkgYWN0IG9mIHNlbGxpbmcsIGdpdmluZywgbGVuZGluZywgcmVudGluZywKK2Rpc3RyaWJ1dGluZywgY29tbXVuaWNhdGluZywgdHJhbnNtaXR0aW5nLCBvciBvdGhlcndpc2UgbWFraW5nIGF2YWlsYWJsZSwgb24tbGluZSBvcgorb2ZmLWxpbmUsIGNvcGllcyBvZiB0aGUgV29yayBvciBwcm92aWRpbmcgYWNjZXNzIHRvIGl0cyBlc3NlbnRpYWwgZnVuY3Rpb25hbGl0aWVzIGF0IHRoZQorZGlzcG9zYWwgb2YgYW55IG90aGVyIG5hdHVyYWwgb3IgbGVnYWwgcGVyc29uLgorMi4gU2NvcGUgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlCitUaGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUKK2xpY2VuY2UgdG8gZG8gdGhlIGZvbGxvd2luZywgZm9yIHRoZSBkdXJhdGlvbiBvZiBjb3B5cmlnaHQgdmVzdGVkIGluIHRoZQorT3JpZ2luYWwgV29yazoKKy0gdXNlIHRoZSBXb3JrIGluIGFueSBjaXJjdW1zdGFuY2UgYW5kIGZvciBhbGwgdXNhZ2UsCistIHJlcHJvZHVjZSB0aGUgV29yaywKKy0gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgbWFrZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIFdvcmssCistIGNvbW11bmljYXRlIHRvIHRoZSBwdWJsaWMsIGluY2x1ZGluZyB0aGUgcmlnaHQgdG8gbWFrZSBhdmFpbGFibGUgb3IgZGlzcGxheSB0aGUKK1dvcmsgb3IgY29waWVzIHRoZXJlb2YgdG8gdGhlIHB1YmxpYyBhbmQgcGVyZm9ybSBwdWJsaWNseSwgYXMgdGhlIGNhc2UgbWF5IGJlLAordGhlIFdvcmssCistIGRpc3RyaWJ1dGUgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsCistIGxlbmQgYW5kIHJlbnQgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YsCistIHN1Yi1saWNlbnNlIHJpZ2h0cyBpbiB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZi4KK1Rob3NlIHJpZ2h0cyBjYW4gYmUgZXhlcmNpc2VkIG9uIGFueSBtZWRpYSwgc3VwcG9ydHMgYW5kIGZvcm1hdHMsIHdoZXRoZXIgbm93Citrbm93biBvciBsYXRlciBpbnZlbnRlZCwgYXMgZmFyIGFzIHRoZSBhcHBsaWNhYmxlIGxhdyBwZXJtaXRzIHNvLgorSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcworbW9yYWwgcmlnaHQgdG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBpbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB0aGUgbGljZW5jZSBvZiB0aGUKK2Vjb25vbWljIHJpZ2h0cyBoZXJlIGFib3ZlIGxpc3RlZC4KK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIExpY2Vuc2VlIHJveWFsdHktZnJlZSwgbm9uIGV4Y2x1c2l2ZSB1c2FnZSByaWdodHMgdG8gYW55CitwYXRlbnRzIGhlbGQgYnkgdGhlIExpY2Vuc29yLCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHVzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQKK29uIHRoZSBXb3JrIHVuZGVyIHRoaXMgTGljZW5jZS4KKzMuIENvbW11bmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlCitUaGUgTGljZW5zb3IgbWF5IHByb3ZpZGUgdGhlIFdvcmsgZWl0aGVyIGluIGl0cyBTb3VyY2UgQ29kZSBmb3JtLCBvciBhcyBFeGVjdXRhYmxlCitDb2RlLiBJZiB0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsIHRoZSBMaWNlbnNvciBwcm92aWRlcyBpbiBhZGRpdGlvbiBhCittYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorV29yayB0aGF0IHRoZSBMaWNlbnNvciBkaXN0cmlidXRlcyBvciBpbmRpY2F0ZXMsIGluIGEgbm90aWNlIGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgYXR0YWNoZWQgdG8gdGhlIFdvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkKK2FjY2Vzc2libGUgZm9yIGFzIGxvbmcgYXMgdGhlIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUKK1dvcmsuCis0LiBMaW1pdGF0aW9ucyBvbiBjb3B5cmlnaHQKK05vdGhpbmcgaW4gdGhpcyBMaWNlbmNlIGlzIGludGVuZGVkIHRvIGRlcHJpdmUgdGhlIExpY2Vuc2VlIG9mIHRoZSBiZW5lZml0cyBmcm9tIGFueQorZXhjZXB0aW9uIG9yIGxpbWl0YXRpb24gdG8gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIHJpZ2h0cyBvd25lcnMgaW4gdGhlIE9yaWdpbmFsCitXb3JrIG9yIFNvZnR3YXJlLCBvZiB0aGUgZXhoYXVzdGlvbiBvZiB0aG9zZSByaWdodHMgb3Igb2Ygb3RoZXIgYXBwbGljYWJsZSBsaW1pdGF0aW9ucwordGhlcmV0by4KKzUuIE9ibGlnYXRpb25zIG9mIHRoZSBMaWNlbnNlZQorVGhlIGdyYW50IG9mIHRoZSByaWdodHMgbWVudGlvbmVkIGFib3ZlIGlzIHN1YmplY3QgdG8gc29tZSByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zCitpbXBvc2VkIG9uIHRoZSBMaWNlbnNlZS4gVGhvc2Ugb2JsaWdhdGlvbnMgYXJlIHRoZSBmb2xsb3dpbmc6CitBdHRyaWJ1dGlvbiByaWdodDogdGhlIExpY2Vuc2VlIHNoYWxsIGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmtzCitub3RpY2VzIGFuZCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBMaWNlbmNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorVGhlIExpY2Vuc2VlIG11c3QgaW5jbHVkZSBhIGNvcHkgb2Ygc3VjaCBub3RpY2VzIGFuZCBhIGNvcHkgb2YgdGhlIExpY2VuY2Ugd2l0aAorZXZlcnkgY29weSBvZiB0aGUgV29yayBoZS9zaGUgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcy4gVGhlIExpY2Vuc2VlIG11c3QKK2NhdXNlIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBXb3JrIGhhcyBiZWVuCittb2RpZmllZCBhbmQgdGhlIGRhdGUgb2YgbW9kaWZpY2F0aW9uLgorQ29weWxlZnQgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcyBjb3BpZXMgb2YgdGhlCitPcmlnaW5hbCBXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIHRoaXMgRGlzdHJpYnV0aW9uCithbmQvb3IgQ29tbXVuaWNhdGlvbiB3aWxsIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSBvciBvZiBhIGxhdGVyCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5jZSB1bmxlc3MgdGhlIE9yaWdpbmFsIFdvcmsgaXMgZXhwcmVzc2x5IGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIKK3RoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5jZS4gVGhlIExpY2Vuc2VlIChiZWNvbWluZyBMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZQorYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmsgdGhhdCBhbHRlciBvcgorcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorQ29tcGF0aWJpbGl0eSBjbGF1c2U6IElmIHRoZSBMaWNlbnNlZSBEaXN0cmlidXRlcyBhbmQvb3IgQ29tbXVuaWNhdGVzIERlcml2YXRpdmUKK1dvcmtzIG9yIGNvcGllcyB0aGVyZW9mIGJhc2VkIHVwb24gYm90aCB0aGUgT3JpZ2luYWwgV29yayBhbmQgYW5vdGhlciB3b3JrCitsaWNlbnNlZCB1bmRlciBhIENvbXBhdGlibGUgTGljZW5jZSwgdGhpcyBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb24gY2FuIGJlCitkb25lIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIENvbXBhdGlibGUgTGljZW5jZS4gRm9yIHRoZSBzYWtlIG9mIHRoaXMgY2xhdXNlLAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZSYjODIyMTsgcmVmZXJzIHRvIHRoZSBsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvIHRoaXMKK0xpY2VuY2UuIFNob3VsZCB0aGUgTGljZW5zZWUmIzgyMTc7cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlIGNvbmZsaWN0Cit3aXRoIGhpcy9oZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbmNlLCB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIENvbXBhdGlibGUgTGljZW5jZQorc2hhbGwgcHJldmFpbC4KK1Byb3Zpc2lvbiBvZiBTb3VyY2UgQ29kZTogV2hlbiBkaXN0cmlidXRpbmcgYW5kL29yIGNvbW11bmljYXRpbmcgY29waWVzIG9mIHRoZQorV29yaywgdGhlIExpY2Vuc2VlIHdpbGwgcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb3IKK2luZGljYXRlIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGlzIFNvdXJjZSB3aWxsIGJlIGVhc2lseSBhbmQgZnJlZWx5IGF2YWlsYWJsZSBmb3IgYXMgbG9uZworYXMgdGhlIExpY2Vuc2VlIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUgV29yay4KK0xlZ2FsIFByb3RlY3Rpb246IFRoaXMgTGljZW5jZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsCit0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IKK3JlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZwordGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuCis2LiBDaGFpbiBvZiBBdXRob3JzaGlwCitUaGUgb3JpZ2luYWwgTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIHRoZSBPcmlnaW5hbCBXb3JrIGdyYW50ZWQKK2hlcmV1bmRlciBpcyBvd25lZCBieSBoaW0vaGVyIG9yIGxpY2Vuc2VkIHRvIGhpbS9oZXIgYW5kIHRoYXQgaGUvc2hlIGhhcyB0aGUgcG93ZXIKK2FuZCBhdXRob3JpdHkgdG8gZ3JhbnQgdGhlIExpY2VuY2UuCitFYWNoIENvbnRyaWJ1dG9yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgbW9kaWZpY2F0aW9ucyBoZS9zaGUgYnJpbmdzIHRvIHRoZQorV29yayBhcmUgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZAorYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorRWFjaCB0aW1lIFlvdSBhY2NlcHQgdGhlIExpY2VuY2UsIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBhbmQgc3Vic2VxdWVudCBDb250cmlidXRvcnMKK2dyYW50IFlvdSBhIGxpY2VuY2UgdG8gdGhlaXIgY29udHJpYnV0aW9ucyB0byB0aGUgV29yaywgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2VuY2UuCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5CitUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cworY29udHJpYnV0b3JzLiBJdCBpcyBub3QgYSBmaW5pc2hlZCB3b3JrIGFuZCBtYXkgdGhlcmVmb3JlIGNvbnRhaW4gZGVmZWN0cyBvciAmIzgyMjA7YnVncyYjODIyMTsKK2luaGVyZW50IHRvIHRoaXMgdHlwZSBvZiBzb2Z0d2FyZSBkZXZlbG9wbWVudC4KK0ZvciB0aGUgYWJvdmUgcmVhc29uLCB0aGUgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgTGljZW5jZSBvbiBhbiAmIzgyMjA7YXMgaXMmIzgyMjE7IGJhc2lzIGFuZAord2l0aG91dCB3YXJyYW50aWVzIG9mIGFueSBraW5kIGNvbmNlcm5pbmcgdGhlIFdvcmssIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KK21lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIGFic2VuY2Ugb2YgZGVmZWN0cyBvciBlcnJvcnMsCithY2N1cmFjeSwgbm9uLWluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG90aGVyIHRoYW4gY29weXJpZ2h0IGFzCitzdGF0ZWQgaW4gQXJ0aWNsZSA2IG9mIHRoaXMgTGljZW5jZS4KK1RoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGUgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZQorZ3JhbnQgb2YgYW55IHJpZ2h0cyB0byB0aGUgV29yay4KKzguIERpc2NsYWltZXIgb2YgTGlhYmlsaXR5CitFeGNlcHQgaW4gdGhlIGNhc2VzIG9mIHdpbGZ1bCBtaXNjb25kdWN0IG9yIGRhbWFnZXMgZGlyZWN0bHkgY2F1c2VkIHRvIG5hdHVyYWwKK3BlcnNvbnMsIHRoZSBMaWNlbnNvciB3aWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCwgbWF0ZXJpYWwgb3IKK21vcmFsLCBkYW1hZ2VzIG9mIGFueSBraW5kLCBhcmlzaW5nIG91dCBvZiB0aGUgTGljZW5jZSBvciBvZiB0aGUgdXNlIG9mIHRoZSBXb3JrLAoraW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIKK2ZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIGxvc3Mgb2YgZGF0YSBvciBhbnkgY29tbWVyY2lhbCBkYW1hZ2UsIGV2ZW4gaWYgdGhlIExpY2Vuc29yCitoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4gSG93ZXZlciwgdGhlIExpY2Vuc29yIHdpbGwgYmUKK2xpYWJsZSB1bmRlciBzdGF0dXRvcnkgcHJvZHVjdCBsaWFiaWxpdHkgbGF3cyBhcyBmYXIgc3VjaCBsYXdzIGFwcGx5IHRvIHRoZSBXb3JrLgorOS4gQWRkaXRpb25hbCBhZ3JlZW1lbnRzCitXaGlsZSBkaXN0cmlidXRpbmcgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcywgWW91IG1heSBjaG9vc2UgdG8KK2NvbmNsdWRlIGFuIGFkZGl0aW9uYWwgYWdyZWVtZW50IHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LAord2FycmFudHksIGluZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBzZXJ2aWNlcyBjb25zaXN0ZW50IHdpdGggdGhpcworTGljZW5jZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24geW91ciBvd24KK2JlaGFsZiBhbmQgb24geW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmIG9mIHRoZSBvcmlnaW5hbCBMaWNlbnNvciBvciBhbnkKK290aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2gKK0NvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBzdWNoCitDb250cmlidXRvciBieSB0aGUgZmFjdCBZb3UgaGF2ZSBhY2NlcHRlZCBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKzEwLiBBY2NlcHRhbmNlIG9mIHRoZSBMaWNlbmNlCitUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24gJiM4MjIwO0kgYWdyZWUmIzgyMjE7CitwbGFjZWQgdW5kZXIgdGhlIGJvdHRvbSBvZiBhIHdpbmRvdyBkaXNwbGF5aW5nIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5jZSBvciBieQorYWZmaXJtaW5nIGNvbnNlbnQgaW4gYW55IG90aGVyIHNpbWlsYXIgd2F5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIGFwcGxpY2FibGUKK2xhdy4gQ2xpY2tpbmcgb24gdGhhdCBpY29uIGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMKK0xpY2VuY2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5CitleGVyY2lzaW5nIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5jZSwgc3VjaCBhcyB0aGUgdXNlIG9mCit0aGUgV29yaywgdGhlIGNyZWF0aW9uIGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBvciB0aGUgRGlzdHJpYnV0aW9uIGFuZC9vcgorQ29tbXVuaWNhdGlvbiBieSBZb3Ugb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuCisxMS4gSW5mb3JtYXRpb24gdG8gdGhlIHB1YmxpYworSW4gY2FzZSBvZiBhbnkgRGlzdHJpYnV0aW9uIGFuZC9vciBDb21tdW5pY2F0aW9uIG9mIHRoZSBXb3JrIGJ5IG1lYW5zIG9mIGVsZWN0cm9uaWMKK2NvbW11bmljYXRpb24gYnkgWW91IChmb3IgZXhhbXBsZSwgYnkgb2ZmZXJpbmcgdG8gZG93bmxvYWQgdGhlIFdvcmsgZnJvbSBhCityZW1vdGUgbG9jYXRpb24pIHRoZSBkaXN0cmlidXRpb24gY2hhbm5lbCBvciBtZWRpYSAoZm9yIGV4YW1wbGUsIGEgd2Vic2l0ZSkgbXVzdCBhdAorbGVhc3QgcHJvdmlkZSB0byB0aGUgcHVibGljIHRoZSBpbmZvcm1hdGlvbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3IHJlZ2FyZGluZwordGhlIExpY2Vuc29yLCB0aGUgTGljZW5jZSBhbmQgdGhlIHdheSBpdCBtYXkgYmUgYWNjZXNzaWJsZSwgY29uY2x1ZGVkLCBzdG9yZWQgYW5kCityZXByb2R1Y2VkIGJ5IHRoZSBMaWNlbnNlZS4KKzEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZQorVGhlIExpY2VuY2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueQorYnJlYWNoIGJ5IHRoZSBMaWNlbnNlZSBvZiB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UuCitTdWNoIGEgdGVybWluYXRpb24gd2lsbCBub3QgdGVybWluYXRlIHRoZSBsaWNlbmNlcyBvZiBhbnkgcGVyc29uIHdobyBoYXMgcmVjZWl2ZWQgdGhlCitXb3JrIGZyb20gdGhlIExpY2Vuc2VlIHVuZGVyIHRoZSBMaWNlbmNlLCBwcm92aWRlZCBzdWNoIHBlcnNvbnMgcmVtYWluIGluIGZ1bGwKK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5jZS4KKzEzLiBNaXNjZWxsYW5lb3VzCitXaXRob3V0IHByZWp1ZGljZSBvZiBBcnRpY2xlIDkgYWJvdmUsIHRoZSBMaWNlbmNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorYmV0d2VlbiB0aGUgUGFydGllcyBhcyB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJldW5kZXIuCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbmNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgdGhpcword2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgTGljZW5jZSBhcyBhIHdob2xlLiBTdWNoIHByb3Zpc2lvbgord2lsbCBiZSBjb25zdHJ1ZWQgYW5kL29yIHJlZm9ybWVkIHNvIGFzIG5lY2Vzc2FyeSB0byBtYWtlIGl0IHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KK1RoZSBFdXJvcGVhbiBDb21taXNzaW9uIG1heSBwdWJsaXNoIG90aGVyIGxpbmd1aXN0aWMgdmVyc2lvbnMgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhpcyBMaWNlbmNlLCBzbyBmYXIgdGhpcyBpcyByZXF1aXJlZCBhbmQgcmVhc29uYWJsZSwgd2l0aG91dCByZWR1Y2luZyB0aGUgc2NvcGUgb2YKK3RoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZS4gTmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbmNlIHdpbGwgYmUgcHVibGlzaGVkIHdpdGgKK2EgdW5pcXVlIHZlcnNpb24gbnVtYmVyLgorQWxsIGxpbmd1aXN0aWMgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbmNlLCBhcHByb3ZlZCBieSB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGF2ZQoraWRlbnRpY2FsIHZhbHVlLiBQYXJ0aWVzIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbGluZ3Vpc3RpYyB2ZXJzaW9uIG9mIHRoZWlyIGNob2ljZS4KKzE0LiBKdXJpc2RpY3Rpb24KK0FueSBsaXRpZ2F0aW9uIHJlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFyaXNpbmcgYmV0d2VlbiB0aGUKK0V1cm9wZWFuIENvbW1pc3Npb24sIGFzIGEgTGljZW5zb3IsIGFuZCBhbnkgTGljZW5zZWUsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUKK2p1cmlzZGljdGlvbiBvZiB0aGUgQ291cnQgb2YgSnVzdGljZSBvZiB0aGUgRXVyb3BlYW4gQ29tbXVuaXRpZXMsIGFzIGxhaWQgZG93biBpbgorYXJ0aWNsZSAyMzggb2YgdGhlIFRyZWF0eSBlc3RhYmxpc2hpbmcgdGhlIEV1cm9wZWFuIENvbW11bml0eS4KK0FueSBsaXRpZ2F0aW9uIGFyaXNpbmcgYmV0d2VlbiBQYXJ0aWVzLCBvdGhlciB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhbmQKK3Jlc3VsdGluZyBmcm9tIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlCitqdXJpc2RpY3Rpb24gb2YgdGhlIGNvbXBldGVudCBjb3VydCB3aGVyZSB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBjb25kdWN0cyBpdHMgcHJpbWFyeQorYnVzaW5lc3MuCisxNS4gQXBwbGljYWJsZSBMYXcKK1RoaXMgTGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5IHdoZXJlIHRoZQorTGljZW5zb3IgcmVzaWRlcyBvciBoYXMgaGlzIHJlZ2lzdGVyZWQgb2ZmaWNlLgorVGhpcyBsaWNlbmNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBCZWxnaWFuIGxhdyBpZjoKKy0gYSBsaXRpZ2F0aW9uIGFyaXNlcyBiZXR3ZWVuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBhcyBhIExpY2Vuc29yLCBhbmQgYW55CitMaWNlbnNlZTsKKy0gdGhlIExpY2Vuc29yLCBvdGhlciB0aGFuIHRoZSBFdXJvcGVhbiBDb21taXNzaW9uLCBoYXMgbm8gcmVzaWRlbmNlIG9yCityZWdpc3RlcmVkIG9mZmljZSBpbnNpZGUgYSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5LgorPT09CitBcHBlbmRpeAorJiM4MjIwO0NvbXBhdGlibGUgTGljZW5jZXMmIzgyMjE7IGFjY29yZGluZyB0byBhcnRpY2xlIDUgRVVQTCBhcmU6CistIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHTlUgR1BMKSB2LiAyCistIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMKSB2LiAyLjEsIHYuIDMuMAorLSBDb21tb24gUHVibGljIExpY2Vuc2Ugdi4gMS4wCistIEVjbGlwc2UgUHVibGljIExpY2Vuc2Ugdi4gMS4wCistIENlY2lsbCB2LiAyLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRWxmdXRpbHMtRXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyN2Q3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbGZ1dGlscy1FeGNlcHRpb24KQEAgLTAsMCArMSwxMiBAQAorICAgVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgbGltaXRzIG9mIHRoZSBFeGNlcHRpb24gdW5kZXIgd2hpY2ggeW91IGFyZSBhbGxvd2VkCisgICB0byBkaXN0cmlidXRlIE5vbi1HUEwgQ29kZSBpbiBsaW5rZWQgY29tYmluYXRpb24gd2l0aCBSZWQgSGF0IGVsZnV0aWxzLgorICAgRm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UsIHBsZWFzZSBzZWUgb25lIG9mIHRoZSBoZWFkZXIgZmlsZXMKKyAgIGluY2x1ZGVkIHdpdGggdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gb3IgdGhlIGZpbGUgQ09QWUlORyBmb3VuZCBpbiB0aGUKKyAgIHRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZS4KKworICAgVGhlIEFwcHJvdmVkIEludGVyZmFjZXMgYXJlIHRoZSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gdGhlIGZpbGVzOgorCisgICBsaWJlbGYuaAorICAgbGliZHcuaAorICAgbGliZHdmbC5oCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VudGVzc2EgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZGFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9FbnRlc3NhCkBAIC0wLDAgKzEsMjAgQEAKKworRW50ZXNzYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uLiAxLjAKK0NvcHlyaWdodCAoYykgMjAwMyBFbnRlc3NhLCBMTEMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6IAorIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBvcGVuIHNvdXJjZSBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgb3BlblNFQUwgKGh0dHA6Ly93d3cub3BlbnNlYWwub3JnLykuIgorCitBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisKK1RoZSBuYW1lcyAib3BlblNFQUwiIGFuZCAiRW50ZXNzYSIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGVwbEBlbnRlc3NhLmNvbS4KK1Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJvcGVuU0VBTCIsIG5vciBtYXkgIm9wZW5TRUFMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgRW50ZXNzYS4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRU5URVNTQSwgTExDLCBPUEVOU0VBTCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBvcGVuU0VBTCBhbmQgd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29udHJpYnV0ZWQgYnkgRW50ZXNzYSwgTExDLCBodHRwOi8vd3d3LmVudGVzc2EuY29tLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgb3BlblNFQUwsIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cub3BlbnNlYWwub3JnLz4uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0VybFBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTYxY2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRXJsUEwtMS4xCkBAIC0wLDAgKzEsMjg4IEBACisKK0VSTEFORyBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjEKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uYGAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGVgYCBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc21gYCBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZWBgIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiBgYEluaXRpYWwgRGV2ZWxvcGVyYGAgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKK2FzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gYGBMYXJnZXIgV29ya2BgIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguIGBgTGljZW5zZWBgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gYGBNb2RpZmljYXRpb25zYGAgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZworICAgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLiAKKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKKyAgIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorCisxLjEwLiBgYE9yaWdpbmFsIENvZGVgYCBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKK09yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzCithbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZQorY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IKK2Fub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcworY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLAorcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzCit3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKzEuMTIuIGBgWW91YGAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbAorZW50aXRpZXMsYGBZb3VgYCBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LAorb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCitgYGNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKK290aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCitvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQKKyAgICBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwKKyAgICBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemVgYCkgdGhlCisgICAgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0CisgICAgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZQorICAgIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyCisgICAgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvcgorICAgIGNvbWJpbmF0aW9ucy4gCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IKKyAgICBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlcgorICAgIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLAorICAgIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQKKyAgICBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeQorICAgIHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKKyAgICB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvCisgICAgVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLiAKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aAorZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yCitpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cwordGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cworaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZwordGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4gCisKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZQorQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzCithbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsKK2FuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0CityZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQKK2luaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhCitzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0Cit0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCB5b3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKK2ZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAordGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCitDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCitFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKK29yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorICAgIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgIHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24KKyAgICB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZQorICAgIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBgYExFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQKKyAgICB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50CisgICAgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UKKyAgICBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdQorICAgIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlCisgICAgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nCisgICAgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8KKyAgICBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcworICAgIGJlZW4gb2J0YWluZWQuIAorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KKyAgICBJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCisgICAgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCisgICAgaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgICBMRUdBTCBmaWxlLiAKKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlCitZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91CitjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEKK0NvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90Citwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaAorYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvcgorc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLAord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUKK3JlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLAorYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvcgorc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlCitvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKK2luIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUKK0NvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudAorZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcworbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdQorZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QKK21ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UKK2FyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKK29yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUKK25vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKK3JlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZQorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQordG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQKK3RoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMCitmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbAorZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkKK3N0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZAorZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIENPTk5FQ1RJT04gVE8gTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorCitUaGlzIEVybGFuZyBMaWNlbnNlIGlzIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworTGljZW5zZSwgVmVyc2lvbiAxLjAuIEl0IGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhCitQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gYGBBUyBJU2BgIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YKK1RIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRQorSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIKK0NPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUCitPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSCitFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCitzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCituYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorc2hhbGwgc3Vydml2ZS4KKworOS4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKK0FueSB1dGlsaXphdGlvbiBvZiBDb3ZlcmVkIENvZGUgc2hhbGwgbm90IGNhdXNlIHRoZSBJbml0aWFsIERldmVsb3Blcgorb3IgYW55IENvbnRyaWJ1dG9yIHRvIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgKG5laXRoZXIgZGlyZWN0IG5vcgoraW5kaXJlY3QpLgorCisxMC4gTUlTQ0VMTEFORU9VUworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYnkgYW5kIGluIGFjY29yZGFuY2Ugd2l0aAordGhlIHN1YnN0YW50aXZlIGxhd3Mgb2YgU3dlZGVuLiBBbnkgZGlzcHV0ZSwgY29udHJvdmVyc3kgb3IgY2xhaW0KK2FyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSwgb3IgdGhlIGJyZWFjaCwgdGVybWluYXRpb24KK29yIGludmFsaWRpdHkgdGhlcmVvZiwgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbgorb2YgU3dlZGlzaCBjb3VydHMsIHdpdGggdGhlIFN0b2NraG9sbSBDaXR5IENvdXJ0IGFzIHRoZSBmaXJzdAoraW5zdGFuY2UuCisgCitFWEhJQklUIEEuCisKK2BgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgRXJsYW5nIFB1YmxpYyBMaWNlbnNlLAorVmVyc2lvbiAxLjEsICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KK2NvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUKK0VybGFuZyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc29mdHdhcmUuIElmIG5vdCwgaXQgY2FuIGJlCityZXRyaWV2ZWQgdmlhIHRoZSB3b3JsZCB3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmVybGFuZy5vcmcvLgorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCit0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIEVyaWNzc29uIFV0dmVja2xpbmdzIEFCLgorUG9ydGlvbnMgY3JlYXRlZCBieSBFcmljc3NvbiBhcmUgQ29weXJpZ2h0IDE5OTksIEVyaWNzc29uIFV0dmVja2xpbmdzCitBQi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5gYAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GU0YtVW5saW1pdGVkIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTBhOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRlNGLVVubGltaXRlZApAQCAtMCwwICsxLDQgQEAKK0NvcHlyaWdodCAoQykgMTk5Ny0yMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GYWlyIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzViMDFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRmFpcgpAQCAtMCwwICsxLDExIEBACisKK0ZhaXIgTGljZW5zZQorKHBsYWluIHRleHQpCis8Q29weXJpZ2h0IEluZm9ybWF0aW9uPgorCitVc2FnZSBvZiB0aGUgd29ya3MgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBpbnN0cnVtZW50IGlzIHJldGFpbmVkIHdpdGggdGhlIHdvcmtzLCBzbyB0aGF0IGFueSBlbnRpdHkgdGhhdCB1c2VzIHRoZSB3b3JrcyBpcyBub3RpZmllZCBvZiB0aGlzIGluc3RydW1lbnQuCisKK0RJU0NMQUlNRVI6IFRIRSBXT1JLUyBBUkUgV0lUSE9VVCBXQVJSQU5UWS4KKworWzIwMDQsIEZhaXIgTGljZW5zZTogcmhpZC5jb20vZmFpciAodGhpcyBVUkwgbm8gbG9uZ2VyIHdvcmtzKV0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvRnJhbWV3b3J4LTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiYjE4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyYW1ld29yeC0xLjAKQEAgLTAsMCArMSw2OSBAQAorCitUSEUgRlJBTUVXT1JYIE9QRU4gTElDRU5TRSAxLjAKK1RoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFRoZSBGcmFtZXdvcnggT3BlbiBMaWNlbnNlIDEuMCwgaGFzIGJlZW4gZW50ZXJlZCBpbnRvIGJldHdlZW4gVGhlIEZyYW1ld29yeCBDb21wYW55IGFuZCB5b3UsIHRoZSBsaWNlbnNlZSBoZXJldW5kZXIsIGVmZmVjdGl2ZSBhcyBvZiBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2Ugb3IgYW4gRG93bnN0cmVhbSBEaXN0cmlidXRpb24gKGVhY2ggYXMgZGVmaW5lZCBiZWxvdykuCisKK0FHUkVFTUVOVCBCQUNLR1JPVU5ECitUaGUgRnJhbWV3b3J4IENvbXBhbnkgaXMgY29tbWl0dGVkIHRvIHRoZSBiZWxpZWYgdGhhdCBvcGVuIHNvdXJjZSBzb2Z0d2FyZSByZXN1bHRzIGluIGJldHRlciBxdWFsaXR5LCBncmVhdGVyIHRlY2huaWNhbCBhbmQgcHJvZHVjdCBpbm5vdmF0aW9uIGluIHRoZSBtYXJrZXQgcGxhY2UgYW5kIGEgbW9yZSBlbXBvd2VyZWQgYW5kIHByb2R1Y3RpdmUgZGV2ZWxvcGVyIGFuZCBlbmQtdXNlciBjb21tdW5pdHkuIE91ciBvYmplY3RpdmUgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIGltcHJvdmVtZW50cyBhbmQgaW5ub3ZhdGlvbnMgdG8gaXQsIHJlbWFpbiBmcmVlIGFuZCBvcGVuIHRvIHRoZSBjb21tdW5pdHkuVG8gZnVydGhlciB0aGVzZSBiZWxpZWZzIGFuZCBvYmplY3RpdmVzLCB3ZSBhcmUgZGlzdHJpYnV0aW5nIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCB3aXRob3V0IHJveWFsdGllcyBhbmQgaW4gc291cmNlIGNvZGUgZm9ybSwgdG8gdGhlIGNvbW11bml0eSBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCitBR1JFRU1FTlQgVEVSTVMKK1RoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgWW91IGhhdmUgYWdyZWVkIGFzIGZvbGxvd3M6CisxLkRlZmluaXRpb25zLlRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlc3BlY3RpdmUgbWVhbmluZ3M6CisKKyhhKSAgICAgRnJhbWV3b3J4IENvZGUgQmFzZSBtZWFucyB0aGUgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFRoZSBGcmFtZXdvcnggQ29tcGFueSBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudAorCisoYikgICAgIERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1lYW5zIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QgcmVsZWFzZSwgZGlzdHJpYnV0aW9uIG9yIHJlbW90ZSBhdmFpbGFiaWxpdHkgb2Ygc29mdHdhcmUgKGkpIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjb250YWlucywgb3IgZGVwZW5kcyBmb3IgaXRzIGludGVuZGVkIGZ1bmN0aW9uaW5nIG9uLCB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSBvciBhbnkgcG9ydGlvbiBvciBlbGVtZW50IHRoZXJlb2YgYW5kIChpaSkgaW4gd2hpY2ggcmlnaHRzIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSBzdWNoIEZyYW1ld29yeCBDb2RlIEJhc2Ugc29mdHdhcmUgZGVwZW5kLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvbiB0aGUgTGljZW5zZSBwcm92aWRlZCBpbiBTZWN0aW9uIDIgYmVsb3cuCisKKyhjKSAgICAgIlNvdXJjZSBDb2RlIiB0byBhbnkgc29mdHdhcmUgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGF0IHNvZnR3YXJlLCBpbmNsdWRpbmcgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYW5kIGNvbXBpbGF0aW9uIG9yIGluc3RhbGxhdGlvbiBzY3JpcHRzLCBvciBhbnkgdmVyc2lvbiB0aGVyZW9mIHRoYXQgaGFzIGJlZW4gY29tcHJlc3NlZCBvciBhcmNoaXZlZCwgYW5kIGNhbiBiZSByZWNvbnN0aXR1dGVkLCB1c2luZyBhbiBhcHByb3ByaWF0ZSBhbmQgZ2VuZXJhbGx5IGF2YWlsYWJsZSBhcmNoaXZhbCBvciBjb21wcmVzc2lvbiB0ZWNobm9sb2d5LgorCisoZCkgICAgIFZhbHVlLUFkZGVkIFNlcnZpY2VzIG1lYW5zIGFueSBjb21tZXJjaWFsIG9yIGZlZS1iYXNlZCBzb2Z0d2FyZS1yZWxhdGVkIHNlcnZpY2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb246IHN5c3RlbSBvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCBvciBjb25zdWx0aW5nOyB0ZWNobmljYWwgb3IgZW5kLXVzZXIgc3VwcG9ydCBvciB0cmFpbmluZzsgZGlzdHJpYnV0aW9uIG1haW50ZW5hbmNlLCBjb25maWd1cmF0aW9uIG9yIHZlcnNpb25pbmc7IG9yIG91dHNvdXJjZWQsIGhvc3RlZCBvciBuZXR3b3JrLWJhc2VkIGFwcGxpY2F0aW9uIHNlcnZpY2VzLgorCisyLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YsIFRoZSBGcmFtZXdvcnggQ29tcGFueSBoZXJlYnkgZ3JhbnRzIFlvdSBhIG5vbi1leGNsdXNpdmUgbGljZW5zZSAodGhlIExpY2Vuc2UpLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGFuZCBmb3Igbm8gZmVlIG90aGVyIHRoYW4gYSBub21pbmFsIGNoYXJnZSByZWZsZWN0aW5nIHRoZSBjb3N0cyBvZiBwaHlzaWNhbCBkaXN0cmlidXRpb24sIHRvOgorCisoYSkgICAgIHVzZSB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZSwgaW4gZWl0aGVyIFNvdXJjZSBDb2RlIG9yIG1hY2hpbmUtcmVhZGFibGUgZm9ybTsKKworKGIpICAgICBtYWtlIG1vZGlmaWNhdGlvbnMsIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIHRvIHRoZSBjb250ZW50IG9yIHN0cnVjdHVyZSBvZiB0aGUgRnJhbWV3b3J4IENvZGUgQmFzZTsgb3IKKworKGMpICAgICBjcmVhdGUgbGFyZ2VyIHdvcmtzIG9yIGRlcml2YXRpdmUgd29ya3MgaW5jbHVkaW5nIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZjsgYW5kCisKKyhkKSAgICAgcmVsZWFzZSwgZGlzdHJpYnV0ZSBvciBtYWtlIGF2YWlsYWJsZSwgZWl0aGVyIGdlbmVyYWxseSBvciB0byBhbnkgc3BlY2lmaWMgdGhpcmQtcGFydHksIGFueSBvZiB0aGUgZm9yZWdvaW5nIGluIFNvdXJjZSBDb2RlIG9yIGJpbmFyeSBmb3JtLgorCiszLiBMaWNlbnNlIENvbmRpdGlvbnMuIFRoZSBncmFudCBvZiB0aGUgTGljZW5zZSB1bmRlciBTZWN0aW9uIDEgaGVyZW9mLCBhbmQgeW91ciBleGVyY2lzZSBvZiBhbGwgcmlnaHRzIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCB3aWxsIHJlbWFpbiBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFzIHdlbGwgYXMgdG8gdGhlIG90aGVyIHByb3Zpc2lvbnMgaGVyZW9mOgorCisoYSkgICAgIENvbXBsZXRlIFNvdXJjZSBDb2RlIGZvciBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBtYWRlIGJ5IFlvdSB0aGF0IGNvbnRhaW5zLCBvciBkZXBlbmRzIGZvciBpdHMgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBvbiwgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UsIG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZiwgc2hhbGwgYmUgbWFkZSBmcmVlbHkgYXZhaWxhYmxlIHRvIGFsbCB1c2VycyB0aGVyZW9mIG9uIHRlcm1zIGFuZCBjb25kaXRpb25zIG5vIG1vcmUgcmVzdHJpY3RpdmUsIGFuZCBubyBsZXNzIGZhdm9yYWJsZSBmb3IgYW55IHVzZXIgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB3aXRoIHJlZ2FyZCB0byBTb3VyY2UgQ29kZSBhdmFpbGFiaWxpdHkgYW5kIHJveWFsdHktZnJlZSB1c2UpIHRoYW4gdGhvc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworKGIpICAgICBBbnkgVmFsdWUtQWRkZWQgU2VydmljZXMgdGhhdCB5b3Ugb2ZmZXIgb3IgcHJvdmlkZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgaW4gcmVsYXRpb24gdG8gYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIHNoYWxsIGJlIG9mZmVyZWQgYW5kIHByb3ZpZGVkIG9uIGNvbW1lcmNpYWwgdGVybXMgdGhhdCBhcmUgcmVhc29uYWJseSBjb21tZW5zdXJhdGUgdG8gdGhlIGZhaXIgbWFya2V0IHZhbHVlIG9mIHN1Y2ggVmFsdWUtQWRkZWQgU2VydmljZXMuIEluIGFkZGl0aW9uLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb24gd2hpY2ggYW55IHN1Y2ggVmFsdWUgQWRkZWQgU2VydmljZXMgYXJlIHNvIG9mZmVyZWQgb3IgcHJvdmlkZWQgc2hhbGwgYmUgY29uc2lzdGVudCB3aXRoLCBhbmQgc2hhbGwgZnVsbHkgc3VwcG9ydCwgdGhlIGludGVudCBhbmQgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCisoYykgICAgIEFsbCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbnMgc2hhbGw6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSkgICAgICAgICAgICBpbmNsdWRlIGFsbCBwb3J0aW9ucyBhbmQgZWxlbWVudHMgb2YgdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIFNvdXJjZSBDb2RlIG9mIHN1Y2ggRG93bnN0cmVhbSBEaXN0cmlidXRpb24gaW50byBhIGZ1bGx5IGZ1bmN0aW9uYWwgbWFjaGluZS1leGVjdXRhYmxlIHN5c3RlbSwgb3IgYWRkaXRpb25hbCBidWlsZCBzY3JpcHRzIG9yIGNvbXBhcmFibGUgc29mdHdhcmUgbmVjZXNzYXJ5IGFuZCBzdWZmaWNpZW50IGZvciBzdWNoIHB1cnBvc2VzOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpaSkgICAgICAgICAgICBpbmNsdWRlLCBpbiBlYWNoIGZpbGUgY29udGFpbmluZyBhbnkgcG9ydGlvbiBvciBlbGVtZW50IG9mIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLCB0aGUgZm9sbG93aW5nIGlkZW50aWZ5aW5nIGxlZ2VuZDogVGhpcyBmaWxlIGNvbnRhaW5zIHNvZnR3YXJlIHRoYXQgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdW5kZXIgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UgMS4wLiBVc2UgYW5kIGRpc3RyaWJ1dGlvbiBoZXJlb2YgYXJlIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggdGhlcmVpbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpaWkpICAgICAgICAgICAgaW5jbHVkZSBhbGwgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMsIGF1dGhvcnNoaXAgY3JlZGl0cywgd2FycmFudHkgZGlzY2xhaW1lcnMgKGluY2x1ZGluZyB0aGF0IHByb3ZpZGVkIGluIFNlY3Rpb24gNiBiZWxvdyksIGxlZ2VuZHMsIGRvY3VtZW50YXRpb24sIGFubm90YXRpb25zIGFuZCBjb21tZW50cyBjb250YWluZWQgaW4gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgYXMgcHJvdmlkZWQgdG8gWW91IGhlcmV1bmRlcjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdikgICAgICAgICAgICBjb250YWluIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoZSBodG1sIGZpbGUgbmFtZWQgZnJhbWV3b3J4X2NvbW11bml0eV9pbnZpdGF0aW9uLmh0bWwgaW5jbHVkZWQgd2l0aGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRoYXQgYWNrbm93bGVkZ2VzIG5ldyB1c2VycyBhbmQgcHJvdmlkZXMgdGhlbSB3aXRoIGluZm9ybWF0aW9uIG9uIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIGNvbW11bml0eTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHYpICAgICAgICAgICAgY29udGFpbiBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGUgdGV4dCBmaWxlIG5hbWVkIHRoZV9mcmFtZXdvcnhfbGljZW5zZS50eHQgaW5jbHVkZWQgd2l0aGluIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlIHRoYXQgaW5jbHVkZXMgYSB0ZXh0IGNvcHkgb2YgdGhlIGZvcm0gb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudDsgYW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmkpICAgICAgICAgICAgcHJvbWluZW50bHkgZGlzcGxheSB0byBhbnkgdmlld2VyIG9yIHVzZXIgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHN1Y2ggT3BlbiBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiwgaW4gdGhlIHBsYWNlIGFuZCBtYW5uZXIgbm9ybWFsbHkgdXNlZCBmb3Igc3VjaCBkaXNwbGF5cywgdGhlIGZvbGxvd2luZyBsZWdlbmQ6CisKK1NvdXJjZSBjb2RlIGxpY2Vuc2VkIHVuZGVyIGZyb20gVGhlIEZyYW1ld29yeCBDb21wYW55IGlzIGNvbnRhaW5lZCBoZXJlaW4sIGFuZCBzdWNoIHNvdXJjZSBjb2RlIGhhcyBiZWVuIG9idGFpbmVkIGVpdGhlciB1bmRlciBUaGUgRnJhbWV3b3J4IE9wZW4gTGljZW5zZSwgb3IgYW5vdGhlciBsaWNlbnNlIGdyYW50ZWQgYnkgVGhlIEZyYW1ld29yeCBDb21wYW55LiBVc2UgYW5kIGRpc3RyaWJ1dGlvbiBoZXJlb2YgaXMgc3ViamVjdCB0byB0aGUgcmVzdHJpY3Rpb25zIHByb3ZpZGVkIGluIHRoZSByZWxldmFudCBzdWNoIGxpY2Vuc2UgYW5kIHRvIHRoZSBjb3B5cmlnaHRzIG9mIHRoZSBsaWNlbnNvciB0aGVyZXVuZGVyLiBBIGNvcHkgb2YgVGhlIEZyYW1ld29yeCBPcGVuIExpY2Vuc2UgaXMgcHJvdmlkZWQgaW4gYSBmaWxlIG5hbWVkIHRoZV9mcmFtZXdvcnhfbGljZW5zZS50eHQgYW5kIGluY2x1ZGVkIGhlcmVpbiwgYW5kIG1heSBhbHNvIGJlIGF2YWlsYWJsZSBmb3IgaW5zcGVjdGlvbiBhdCBodHRwOi8vd3d3LmZyYW1ld29yeC5jb20uCisKKzQuIFJlc3RyaWN0aW9ucyBvbiBPcGVuIERvd25zdHJlYW0gRGlzdHJpYnV0aW9ucy4gRWFjaCBEb3duc3RyZWFtIERpc3RyaWJ1dGlvbiBtYWRlIGJ5IFlvdSwgYW5kIGJ5IGFueSBwYXJ0eSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG9idGFpbmluZyByaWdodHMgdG8gdGhlIEZyYW1ld29yeCBDb2RlIEJhc2UgdGhyb3VnaCBZb3UsIHNoYWxsIGJlIG1hZGUgc3ViamVjdCB0byBhIGxpY2Vuc2UgZ3JhbnQgb3IgYWdyZWVtZW50IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHNvIHRoYXQgZWFjaCBkaXN0cmlidXRlZSB1bmRlciB0aGF0IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgc2FtZSByZXN0cmljdGlvbnMgb24gcmUtZGlzdHJpYnV0aW9uIGFuZCB1c2UgYXMgYXJlIGJpbmRpbmcgb24gWW91IGhlcmV1bmRlci4gWW91IG1heSBzYXRpc2Z5IHRoaXMgbGljZW5zaW5nIHJlcXVpcmVtZW50IGVpdGhlciBieToKKworKGEpICAgICByZXF1aXJpbmcgYXMgYSBjb25kaXRpb24gdG8gYW55IERvd25zdHJlYW0gRGlzdHJpYnV0aW9uIG1hZGUgYnkgeW91LCBvciBieSBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IGRpc3RyaWJ1dGVlIG9mIFlvdXIgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gKG9yIGFueSBwb3J0aW9uIG9yIGVsZW1lbnQgdGhlcmVvZiksIHRoYXQgZWFjaCBkaXN0cmlidXRlZSB1bmRlciB0aGUgcmVsZXZhbnQgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gb2J0YWluIGEgZGlyZWN0IGxpY2Vuc2UgKG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRob3NlIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQpIGZyb20gVGhlIEZyYW1ld29yeCBDb21wYW55OyBvcgorCisoYikgICAgIHN1Yi1saWNlbnNpbmcgYWxsIChhbmQgbm90IGxlc3MgdGhhbiBhbGwpIG9mIFlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBoZXJldW5kZXIgdG8gdGhhdCBkaXN0cmlidXRlZSwgaW5jbHVkaW5nICh3aXRob3V0IGxpbWl0YXRpb24pIFlvdXIgb2JsaWdhdGlvbiB0byByZXF1aXJlIGRpc3RyaWJ1dGVlcyB0byBiZSBib3VuZCBieSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBhcyBjb250ZW1wbGF0ZWQgYnkgdGhpcyBTZWN0aW9uIDQgYWJvdmUuCisKK1RoZSBGcmFtZXdvcnggQ29tcGFueSBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhbGwgcmlnaHRzIHRvIHN1Yi1saWNlbnNlIHlvdXIgcmlnaHRzIGhlcmV1bmRlciBhcyBuZWNlc3NhcnkgdG8gZnVsbHkgZWZmZWN0IHRoZSBpbnRlbnQgYW5kIHB1cnBvc2Ugb2YgdGhpcyBTZWN0aW9uIDQgYWJvdmUsIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHlvdXIgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBoZXJldW5kZXIgc2hhbGwgYmUgdW5hZmZlY3RlZCBieSBhbnkgc3VjaCBzdWJsaWNlbnNpbmcuIEluIGFkZGl0aW9uLCBUaGUgRnJhbWV3b3J4IENvbXBhbnkgZXhwcmVzc2x5IHJldGFpbnMgYWxsIHJpZ2h0cyB0byB0YWtlIGFsbCBhcHByb3ByaWF0ZSBhY3Rpb24gKGluY2x1ZGluZyBsZWdhbCBhY3Rpb24pIGFnYWluc3QgYW55IHN1Y2ggZGlyZWN0IG9yIGluZGlyZWN0IHN1Yi1saWNlbnNlZSB0byBlbnN1cmUgaXRzIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoZSBpbnRlbnQgYW5kIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKzUuIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gRXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBoZXJlaW4sIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgcHJlc2VydmVzIGFuZCByZXNwZWN0cyBZb3VyIGFuZCBUaGUgRnJhbWV3b3J4IENvbXBhbnlzIHJlc3BlY3RpdmUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgaW5jbHVkaW5nLCBpbiB0aGUgY2FzZSBvZiBUaGUgRnJhbWV3b3J4IENvbXBhbnksIGl0cyBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBGcmFtZXdvcnggQ29kZSBCYXNlLgorCis2LiBXYXJyYW50eSBEaXNjbGFpbWVyLiBUSEUgU09GVFdBUkUgTElDRU5TRUQgSEVSRVVOREVSIElTIFBST1ZJREVEIGBgQVMgSVMuYGAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCwgQVJFIEhFUkVCWSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTElDRU5TT1IgT0YgVEhJUyBTT0ZUV0FSRSwgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSU5DTFVESU5HIChCVVQgTk9UIExJTUlURUQgVE8pIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCis3LiBMaWNlbnNlIFZpb2xhdGlvbi4gVGhlIExpY2Vuc2UsIGFuZCBhbGwgb2YgeW91ciByaWdodHMgdGhlcmV1bmRlciwgc2hhbGwgYmUgZGVlbWVkIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZCBhbmQgdm9pZCBhcyBvZiBhbnkgRG93bnN0cmVhbSBEaXN0cmlidXRpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBtYWRlIG9yIGZhY2lsaXRhdGVkIGJ5IFlvdSB0aGF0IHZpb2xhdGVzIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgc3Vydml2ZSBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBpbiBvcmRlciB0byByZW1lZHkgdGhlIGVmZmVjdHMgb2Ygc3VjaCB2aW9sYXRpb24uIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYmluZGluZyBvbiB0aGUgbGVnYWwgc3VjY2Vzc29ycyBhbmQgYXNzaWducyBvZiB0aGUgcGFydGllcyBoZXJldG8uCisKK1lvdXIgYWdyZWVtZW50IHRvIHRoZSBmb3JlZ29pbmcgYXMgb2YgdGhlIGRhdGUgaGVyZW9mIGhhcyBiZWVuIGV2aWRlbmNlZCBieSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHJlbGV2YW50IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBoZXJldW5kZXIuCisKKyhDKSBUSEUgRlJBTUVXT1JYIENPTVBBTlkgMjAwMworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0ZyZWVUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZDRkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9GcmVlVHlwZQpAQCAtMCwwICsxLDE3MCBAQAorICAgICAgICAgICAgICAgICAgICBUaGUgRnJlZVR5cGUgUHJvamVjdCBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDYtSmFuLTI3CisKKyAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTYtMjAwMiwgMjAwNiBieQorICAgICAgICAgIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZworCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworICBUaGUgRnJlZVR5cGUgIFByb2plY3QgaXMgZGlzdHJpYnV0ZWQgaW4gIHNldmVyYWwgYXJjaGl2ZSBwYWNrYWdlczsKKyAgc29tZSBvZiB0aGVtIG1heSBjb250YWluLCBpbiBhZGRpdGlvbiB0byB0aGUgRnJlZVR5cGUgZm9udCBlbmdpbmUsCisgIHZhcmlvdXMgdG9vbHMgYW5kICBjb250cmlidXRpb25zIHdoaWNoIHJlbHkgb24sIG9yICByZWxhdGUgdG8sIHRoZQorICBGcmVlVHlwZSBQcm9qZWN0LgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBmb3VuZCAgaW4gc3VjaCAgcGFja2FnZXMsIGFuZAorICB3aGljaCBkbyBub3QgIGZhbGwgdW5kZXIgdGhlaXIgb3duIGV4cGxpY2l0ICBsaWNlbnNlLiAgVGhlIGxpY2Vuc2UKKyAgYWZmZWN0cyAgdGh1cyAgdGhlICBGcmVlVHlwZSAgIGZvbnQgIGVuZ2luZSwgIHRoZSAgdGVzdCAgcHJvZ3JhbXMsCisgIGRvY3VtZW50YXRpb24gYW5kIG1ha2VmaWxlcywgYXQgdGhlIHZlcnkgbGVhc3QuCisKKyAgVGhpcyAgbGljZW5zZSAgIHdhcyAgaW5zcGlyZWQgIGJ5ICB0aGUgIEJTRCwgICBBcnRpc3RpYywgIGFuZCAgSUpHCisgIChJbmRlcGVuZGVudCBKUEVHICBHcm91cCkgbGljZW5zZXMsIHdoaWNoICBhbGwgZW5jb3VyYWdlIGluY2x1c2lvbgorICBhbmQgIHVzZSBvZiAgZnJlZSAgc29mdHdhcmUgaW4gIGNvbW1lcmNpYWwgIGFuZCBmcmVld2FyZSAgcHJvZHVjdHMKKyAgYWxpa2UuICBBcyBhIGNvbnNlcXVlbmNlLCBpdHMgbWFpbiBwb2ludHMgYXJlIHRoYXQ6CisKKyAgICBvIFdlIGRvbid0IHByb21pc2UgdGhhdCB0aGlzIHNvZnR3YXJlIHdvcmtzLiBIb3dldmVyLCB3ZSB3aWxsIGJlCisgICAgICBpbnRlcmVzdGVkIGluIGFueSBraW5kIG9mIGJ1ZyByZXBvcnRzLiAoYGFzIGlzJyBkaXN0cmlidXRpb24pCisKKyAgICBvIFlvdSBjYW4gIHVzZSB0aGlzIHNvZnR3YXJlIGZvciB3aGF0ZXZlciB5b3UgIHdhbnQsIGluIHBhcnRzIG9yCisgICAgICBmdWxsIGZvcm0sIHdpdGhvdXQgaGF2aW5nIHRvIHBheSB1cy4gKGByb3lhbHR5LWZyZWUnIHVzYWdlKQorCisgICAgbyBZb3UgbWF5IG5vdCBwcmV0ZW5kIHRoYXQgIHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiAgSWYgeW91IHVzZQorICAgICAgaXQsIG9yICBvbmx5IHBhcnRzIG9mIGl0LCAgaW4gYSBwcm9ncmFtLCAgeW91IG11c3QgYWNrbm93bGVkZ2UKKyAgICAgIHNvbWV3aGVyZSAgaW4gIHlvdXIgIGRvY3VtZW50YXRpb24gIHRoYXQgIHlvdSAgaGF2ZSAgdXNlZCAgdGhlCisgICAgICBGcmVlVHlwZSBjb2RlLiAoYGNyZWRpdHMnKQorCisgIFdlICBzcGVjaWZpY2FsbHkgIHBlcm1pdCAgYW5kICBlbmNvdXJhZ2UgIHRoZSAgaW5jbHVzaW9uICBvZiAgdGhpcworICBzb2Z0d2FyZSwgd2l0aCAgb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCAgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4KKyAgV2UgIGRpc2NsYWltICBhbGwgd2FycmFudGllcyAgY292ZXJpbmcgIFRoZSAgRnJlZVR5cGUgUHJvamVjdCAgYW5kCisgIGFzc3VtZSBubyBsaWFiaWxpdHkgcmVsYXRlZCB0byBUaGUgRnJlZVR5cGUgUHJvamVjdC4KKworCisgIEZpbmFsbHksICBtYW55ICBwZW9wbGUgIGFza2VkICB1cyAgZm9yICBhICBwcmVmZXJyZWQgIGZvcm0gIGZvciAgYQorICBjcmVkaXQvZGlzY2xhaW1lciB0byB1c2UgaW4gY29tcGxpYW5jZSB3aXRoIHRoaXMgbGljZW5zZS4gIFdlIHRodXMKKyAgZW5jb3VyYWdlIHlvdSB0byB1c2UgdGhlIGZvbGxvd2luZyB0ZXh0OgorCisgICAiIiIgIAorICAgIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGNvcHlyaWdodCDvv70gPHllYXI+IFRoZSBGcmVlVHlwZQorICAgIFByb2plY3QgKHd3dy5mcmVldHlwZS5vcmcpLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICIiIgorCisgIFBsZWFzZSByZXBsYWNlIDx5ZWFyPiB3aXRoIHRoZSB2YWx1ZSBmcm9tIHRoZSBGcmVlVHlwZSB2ZXJzaW9uIHlvdQorICBhY3R1YWxseSB1c2UuCisKKworTGVnYWwgVGVybXMKKz09PT09PT09PT09CisKKzAuIERlZmluaXRpb25zCistLS0tLS0tLS0tLS0tLQorCisgIFRocm91Z2hvdXQgdGhpcyBsaWNlbnNlLCAgdGhlIHRlcm1zIGBwYWNrYWdlJywgYEZyZWVUeXBlIFByb2plY3QnLAorICBhbmQgIGBGcmVlVHlwZSAgYXJjaGl2ZScgcmVmZXIgIHRvICB0aGUgIHNldCAgb2YgZmlsZXMgIG9yaWdpbmFsbHkKKyAgZGlzdHJpYnV0ZWQgIGJ5IHRoZSAgYXV0aG9ycyAgKERhdmlkIFR1cm5lciwgIFJvYmVydCBXaWxoZWxtLCAgYW5kCisgIFdlcm5lciBMZW1iZXJnKSBhcyB0aGUgYEZyZWVUeXBlIFByb2plY3QnLCBiZSB0aGV5IG5hbWVkIGFzIGFscGhhLAorICBiZXRhIG9yIGZpbmFsIHJlbGVhc2UuCisKKyAgYFlvdScgcmVmZXJzIHRvICB0aGUgbGljZW5zZWUsIG9yIHBlcnNvbiB1c2luZyAgdGhlIHByb2plY3QsIHdoZXJlCisgIGB1c2luZycgaXMgYSBnZW5lcmljIHRlcm0gaW5jbHVkaW5nIGNvbXBpbGluZyB0aGUgcHJvamVjdCdzIHNvdXJjZQorICBjb2RlIGFzICB3ZWxsIGFzIGxpbmtpbmcgaXQgIHRvIGZvcm0gYSAgYHByb2dyYW0nIG9yIGBleGVjdXRhYmxlJy4KKyAgVGhpcyAgcHJvZ3JhbSBpcyAgcmVmZXJyZWQgdG8gIGFzICBgYSBwcm9ncmFtICB1c2luZyB0aGUgIEZyZWVUeXBlCisgIGVuZ2luZScuCisKKyAgVGhpcyAgbGljZW5zZSBhcHBsaWVzICB0byBhbGwgIGZpbGVzIGRpc3RyaWJ1dGVkICBpbiAgdGhlIG9yaWdpbmFsCisgIEZyZWVUeXBlICBQcm9qZWN0LCAgIGluY2x1ZGluZyAgYWxsICBzb3VyY2UgICBjb2RlLCAgYmluYXJpZXMgIGFuZAorICBkb2N1bWVudGF0aW9uLCAgdW5sZXNzICBvdGhlcndpc2UgIHN0YXRlZCAgIGluICB0aGUgIGZpbGUgIGluICBpdHMKKyAgb3JpZ2luYWwsIHVubW9kaWZpZWQgZm9ybSBhcyAgZGlzdHJpYnV0ZWQgaW4gdGhlIG9yaWdpbmFsIGFyY2hpdmUuCisgIElmIHlvdSBhcmUgIHVuc3VyZSB3aGV0aGVyIG9yIG5vdCBhIHBhcnRpY3VsYXIgIGZpbGUgaXMgY292ZXJlZCBieQorICB0aGlzIGxpY2Vuc2UsIHlvdSBtdXN0IGNvbnRhY3QgdXMgdG8gdmVyaWZ5IHRoaXMuCisKKyAgVGhlIEZyZWVUeXBlICBQcm9qZWN0IGlzIGNvcHlyaWdodCAoQykgMTk5Ni0yMDAwICBieSBEYXZpZCBUdXJuZXIsCisgIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICBBbGwgcmlnaHRzIHJlc2VydmVkIGV4Y2VwdCBhcworICBzcGVjaWZpZWQgYmVsb3cuCisKKzEuIE5vIFdhcnJhbnR5CistLS0tLS0tLS0tLS0tLQorCisgIFRIRSBGUkVFVFlQRSBQUk9KRUNUICBJUyBQUk9WSURFRCBgQVMgSVMnIFdJVEhPVVQgIFdBUlJBTlRZIE9GIEFOWQorICBLSU5ELCBFSVRIRVIgIEVYUFJFU1MgT1IgSU1QTElFRCwgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCBUTywKKyAgV0FSUkFOVElFUyAgT0YgIE1FUkNIQU5UQUJJTElUWSAgIEFORCAgRklUTkVTUyAgRk9SICBBICBQQVJUSUNVTEFSCisgIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBXSUxMIEFOWSBPRiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICBCRSBMSUFCTEUgIEZPUiBBTlkgREFNQUdFUyBDQVVTRUQgIEJZIFRIRSBVU0UgT1IgIFRIRSBJTkFCSUxJVFkgVE8KKyAgVVNFLCBPRiBUSEUgRlJFRVRZUEUgUFJPSkVDVC4KKworMi4gUmVkaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyAgbGljZW5zZSAgZ3JhbnRzICBhICB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgIHBlcnBldHVhbCAgYW5kCisgIGlycmV2b2NhYmxlIHJpZ2h0ICBhbmQgbGljZW5zZSB0byB1c2UsICBleGVjdXRlLCBwZXJmb3JtLCBjb21waWxlLAorICBkaXNwbGF5LCAgY29weSwgICBjcmVhdGUgIGRlcml2YXRpdmUgIHdvcmtzICAgb2YsICBkaXN0cmlidXRlICBhbmQKKyAgc3VibGljZW5zZSB0aGUgIEZyZWVUeXBlIFByb2plY3QgKGluICBib3RoIHNvdXJjZSBhbmQgIG9iamVjdCBjb2RlCisgIGZvcm1zKSAgYW5kICBkZXJpdmF0aXZlIHdvcmtzICB0aGVyZW9mICBmb3IgIGFueSAgcHVycG9zZTsgYW5kICB0bworICBhdXRob3JpemUgb3RoZXJzICB0byBleGVyY2lzZSAgc29tZSBvciBhbGwgIG9mIHRoZSAgcmlnaHRzIGdyYW50ZWQKKyAgaGVyZWluLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgIG8gUmVkaXN0cmlidXRpb24gb2YgIHNvdXJjZSBjb2RlICBtdXN0IHJldGFpbiB0aGlzICBsaWNlbnNlIGZpbGUKKyAgICAgIChgRlRMLlRYVCcpIHVuYWx0ZXJlZDsgYW55ICBhZGRpdGlvbnMsIGRlbGV0aW9ucyBvciBjaGFuZ2VzIHRvCisgICAgICB0aGUgb3JpZ2luYWwgIGZpbGVzIG11c3QgYmUgY2xlYXJseSAgaW5kaWNhdGVkIGluIGFjY29tcGFueWluZworICAgICAgZG9jdW1lbnRhdGlvbi4gICBUaGUgIGNvcHlyaWdodCAgIG5vdGljZXMgIG9mICB0aGUgIHVuYWx0ZXJlZCwKKyAgICAgIG9yaWdpbmFsICBmaWxlcyBtdXN0ICBiZSAgcHJlc2VydmVkIGluICBhbGwgIGNvcGllcyBvZiAgc291cmNlCisgICAgICBmaWxlcy4KKworICAgIG8gUmVkaXN0cmlidXRpb24gaW4gYmluYXJ5IGZvcm0gbXVzdCBwcm92aWRlIGEgIGRpc2NsYWltZXIgIHRoYXQKKyAgICAgIHN0YXRlcyAgdGhhdCAgdGhlIHNvZnR3YXJlIGlzIGJhc2VkIGluIHBhcnQgb2YgdGhlIHdvcmsgb2YgdGhlCisgICAgICBGcmVlVHlwZSBUZWFtLCAgaW4gIHRoZSAgZGlzdHJpYnV0aW9uICBkb2N1bWVudGF0aW9uLiAgV2UgYWxzbworICAgICAgZW5jb3VyYWdlIHlvdSB0byBwdXQgYW4gVVJMIHRvIHRoZSBGcmVlVHlwZSB3ZWIgcGFnZSAgaW4gIHlvdXIKKyAgICAgIGRvY3VtZW50YXRpb24sIHRob3VnaCB0aGlzIGlzbid0IG1hbmRhdG9yeS4KKworICBUaGVzZSBjb25kaXRpb25zICBhcHBseSB0byBhbnkgIHNvZnR3YXJlIGRlcml2ZWQgZnJvbSBvciAgYmFzZWQgb24KKyAgdGhlIEZyZWVUeXBlIFByb2plY3QsICBub3QganVzdCB0aGUgdW5tb2RpZmllZCBmaWxlcy4gICBJZiB5b3UgdXNlCisgIG91ciB3b3JrLCB5b3UgIG11c3QgYWNrbm93bGVkZ2UgdXMuICBIb3dldmVyLCBubyAgZmVlIG5lZWQgYmUgcGFpZAorICB0byB1cy4KKworMy4gQWR2ZXJ0aXNpbmcKKy0tLS0tLS0tLS0tLS0tCisKKyAgTmVpdGhlciB0aGUgIEZyZWVUeXBlIGF1dGhvcnMgYW5kICBjb250cmlidXRvcnMgbm9yIHlvdSAgc2hhbGwgdXNlCisgIHRoZSBuYW1lIG9mIHRoZSAgb3RoZXIgZm9yIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nLCBvciBwcm9tb3Rpb25hbAorICBwdXJwb3NlcyB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICBXZSBzdWdnZXN0LCAgYnV0IGRvIG5vdCByZXF1aXJlLCB0aGF0ICB5b3UgdXNlIG9uZSBvciAgbW9yZSBvZiB0aGUKKyAgZm9sbG93aW5nIHBocmFzZXMgdG8gcmVmZXIgIHRvIHRoaXMgc29mdHdhcmUgaW4geW91ciBkb2N1bWVudGF0aW9uCisgIG9yIGFkdmVydGlzaW5nICBtYXRlcmlhbHM6IGBGcmVlVHlwZSBQcm9qZWN0JywgIGBGcmVlVHlwZSBFbmdpbmUnLAorICBgRnJlZVR5cGUgbGlicmFyeScsIG9yIGBGcmVlVHlwZSBEaXN0cmlidXRpb24nLgorCisgIEFzICB5b3UgaGF2ZSAgbm90IHNpZ25lZCAgdGhpcyBsaWNlbnNlLCAgeW91IGFyZSAgbm90ICByZXF1aXJlZCB0bworICBhY2NlcHQgIGl0LiAgIEhvd2V2ZXIsICBhcyAgdGhlIEZyZWVUeXBlICBQcm9qZWN0ICBpcyAgY29weXJpZ2h0ZWQKKyAgbWF0ZXJpYWwsIG9ubHkgIHRoaXMgbGljZW5zZSwgb3IgIGFub3RoZXIgb25lIGNvbnRyYWN0ZWQgIHdpdGggdGhlCisgIGF1dGhvcnMsIGdyYW50cyB5b3UgIHRoZSByaWdodCB0byB1c2UsIGRpc3RyaWJ1dGUsICBhbmQgbW9kaWZ5IGl0LgorICBUaGVyZWZvcmUsICBieSAgdXNpbmcsICBkaXN0cmlidXRpbmcsICBvciBtb2RpZnlpbmcgIHRoZSAgRnJlZVR5cGUKKyAgUHJvamVjdCwgeW91IGluZGljYXRlIHRoYXQgeW91IHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBhbGwgdGhlIHRlcm1zCisgIG9mIHRoaXMgbGljZW5zZS4KKworNC4gQ29udGFjdHMKKy0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHR3byBtYWlsaW5nIGxpc3RzIHJlbGF0ZWQgdG8gRnJlZVR5cGU6CisKKyAgICBvIGZyZWV0eXBlQG5vbmdudS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGdlbmVyYWwgdXNlIGFuZCBhcHBsaWNhdGlvbnMgb2YgRnJlZVR5cGUsIGFzIHdlbGwgYXMKKyAgICAgIGZ1dHVyZSBhbmQgIHdhbnRlZCBhZGRpdGlvbnMgdG8gdGhlICBsaWJyYXJ5IGFuZCBkaXN0cmlidXRpb24uCisgICAgICBJZiAgeW91IGFyZSBsb29raW5nICBmb3Igc3VwcG9ydCwgIHN0YXJ0IGluICB0aGlzIGxpc3QgIGlmIHlvdQorICAgICAgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB0byBoZWxwIHlvdSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICAgIG8gZnJlZXR5cGUtZGV2ZWxAbm9uZ251Lm9yZworCisgICAgICBEaXNjdXNzZXMgYnVncywgIGFzIHdlbGwgIGFzIGVuZ2luZSBpbnRlcm5hbHMsICBkZXNpZ24gaXNzdWVzLAorICAgICAgc3BlY2lmaWMgbGljZW5zZXMsIHBvcnRpbmcsIGV0Yy4KKworICBPdXIgaG9tZSBwYWdlIGNhbiBiZSBmb3VuZCBhdAorCisgICAgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcKKworCistLS0gZW5kIG9mIEZUTC5UWFQgLS0tCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwZmUxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4xCkBAIC0wLDAgKzEsMzk3IEBACisJCUdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorCQkgIFZlcnNpb24gMS4yLCBOb3ZlbWJlciAyMDAyCisKKworIENvcHlyaWdodCAoQykgMjAwMCwyMDAxLDIwMDIgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKzAuIFBSRUFNQkxFCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZSBpcyB0byBtYWtlIGEgbWFudWFsLCB0ZXh0Ym9vaywgb3Igb3RoZXIKK2Z1bmN0aW9uYWwgYW5kIHVzZWZ1bCBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvCithc3N1cmUgZXZlcnlvbmUgdGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwKK3dpdGggb3Igd2l0aG91dCBtb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LgorU2Vjb25kYXJpbHksIHRoaXMgTGljZW5zZSBwcmVzZXJ2ZXMgZm9yIHRoZSBhdXRob3IgYW5kIHB1Ymxpc2hlciBhIHdheQordG8gZ2V0IGNyZWRpdCBmb3IgdGhlaXIgd29yaywgd2hpbGUgbm90IGJlaW5nIGNvbnNpZGVyZWQgcmVzcG9uc2libGUKK2ZvciBtb2RpZmljYXRpb25zIG1hZGUgYnkgb3RoZXJzLgorCitUaGlzIExpY2Vuc2UgaXMgYSBraW5kIG9mICJjb3B5bGVmdCIsIHdoaWNoIG1lYW5zIHRoYXQgZGVyaXZhdGl2ZQord29ya3Mgb2YgdGhlIGRvY3VtZW50IG11c3QgdGhlbXNlbHZlcyBiZSBmcmVlIGluIHRoZSBzYW1lIHNlbnNlLiAgSXQKK2NvbXBsZW1lbnRzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggaXMgYSBjb3B5bGVmdAorbGljZW5zZSBkZXNpZ25lZCBmb3IgZnJlZSBzb2Z0d2FyZS4KKworV2UgaGF2ZSBkZXNpZ25lZCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gdXNlIGl0IGZvciBtYW51YWxzIGZvciBmcmVlCitzb2Z0d2FyZSwgYmVjYXVzZSBmcmVlIHNvZnR3YXJlIG5lZWRzIGZyZWUgZG9jdW1lbnRhdGlvbjogYSBmcmVlCitwcm9ncmFtIHNob3VsZCBjb21lIHdpdGggbWFudWFscyBwcm92aWRpbmcgdGhlIHNhbWUgZnJlZWRvbXMgdGhhdCB0aGUKK3NvZnR3YXJlIGRvZXMuICBCdXQgdGhpcyBMaWNlbnNlIGlzIG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIG1hbnVhbHM7CitpdCBjYW4gYmUgdXNlZCBmb3IgYW55IHRleHR1YWwgd29yaywgcmVnYXJkbGVzcyBvZiBzdWJqZWN0IG1hdHRlciBvcgord2hldGhlciBpdCBpcyBwdWJsaXNoZWQgYXMgYSBwcmludGVkIGJvb2suICBXZSByZWNvbW1lbmQgdGhpcyBMaWNlbnNlCitwcmluY2lwYWxseSBmb3Igd29ya3Mgd2hvc2UgcHVycG9zZSBpcyBpbnN0cnVjdGlvbiBvciByZWZlcmVuY2UuCisKKworMS4gQVBQTElDQUJJTElUWSBBTkQgREVGSU5JVElPTlMKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IG1hbnVhbCBvciBvdGhlciB3b3JrLCBpbiBhbnkgbWVkaXVtLCB0aGF0Citjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFN1Y2ggYSBub3RpY2UgZ3JhbnRzIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlLCB1bmxpbWl0ZWQgaW4gZHVyYXRpb24sIHRvIHVzZSB0aGF0Cit3b3JrIHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBoZXJlaW4uICBUaGUgIkRvY3VtZW50IiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggbWFudWFsIG9yIHdvcmsuICBBbnkgbWVtYmVyIG9mIHRoZSBwdWJsaWMgaXMgYQorbGljZW5zZWUsIGFuZCBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICBZb3UgYWNjZXB0IHRoZSBsaWNlbnNlIGlmIHlvdQorY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHdvcmsgaW4gYSB3YXkgcmVxdWlyaW5nIHBlcm1pc3Npb24KK3VuZGVyIGNvcHlyaWdodCBsYXcuCisKK0EgIk1vZGlmaWVkIFZlcnNpb24iIG9mIHRoZSBEb2N1bWVudCBtZWFucyBhbnkgd29yayBjb250YWluaW5nIHRoZQorRG9jdW1lbnQgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgY29waWVkIHZlcmJhdGltLCBvciB3aXRoCittb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworQSAiU2Vjb25kYXJ5IFNlY3Rpb24iIGlzIGEgbmFtZWQgYXBwZW5kaXggb3IgYSBmcm9udC1tYXR0ZXIgc2VjdGlvbiBvZgordGhlIERvY3VtZW50IHRoYXQgZGVhbHMgZXhjbHVzaXZlbHkgd2l0aCB0aGUgcmVsYXRpb25zaGlwIG9mIHRoZQorcHVibGlzaGVycyBvciBhdXRob3JzIG9mIHRoZSBEb2N1bWVudCB0byB0aGUgRG9jdW1lbnQncyBvdmVyYWxsIHN1YmplY3QKKyhvciB0byByZWxhdGVkIG1hdHRlcnMpIGFuZCBjb250YWlucyBub3RoaW5nIHRoYXQgY291bGQgZmFsbCBkaXJlY3RseQord2l0aGluIHRoYXQgb3ZlcmFsbCBzdWJqZWN0LiAgKFRodXMsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBJZiBhCitzZWN0aW9uIGRvZXMgbm90IGZpdCB0aGUgYWJvdmUgZGVmaW5pdGlvbiBvZiBTZWNvbmRhcnkgdGhlbiBpdCBpcyBub3QKK2FsbG93ZWQgdG8gYmUgZGVzaWduYXRlZCBhcyBJbnZhcmlhbnQuICBUaGUgRG9jdW1lbnQgbWF5IGNvbnRhaW4gemVybworSW52YXJpYW50IFNlY3Rpb25zLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IGlkZW50aWZ5IGFueSBJbnZhcmlhbnQKK1NlY3Rpb25zIHRoZW4gdGhlcmUgYXJlIG5vbmUuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEEgRnJvbnQtQ292ZXIgVGV4dCBtYXkKK2JlIGF0IG1vc3QgNSB3b3JkcywgYW5kIGEgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhdCBtb3N0IDI1IHdvcmRzLgorCitBICJUcmFuc3BhcmVudCIgY29weSBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHksCityZXByZXNlbnRlZCBpbiBhIGZvcm1hdCB3aG9zZSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUKK2dlbmVyYWwgcHVibGljLCB0aGF0IGlzIHN1aXRhYmxlIGZvciByZXZpc2luZyB0aGUgZG9jdW1lbnQKK3N0cmFpZ2h0Zm9yd2FyZGx5IHdpdGggZ2VuZXJpYyB0ZXh0IGVkaXRvcnMgb3IgKGZvciBpbWFnZXMgY29tcG9zZWQgb2YKK3BpeGVscykgZ2VuZXJpYyBwYWludCBwcm9ncmFtcyBvciAoZm9yIGRyYXdpbmdzKSBzb21lIHdpZGVseSBhdmFpbGFibGUKK2RyYXdpbmcgZWRpdG9yLCBhbmQgdGhhdCBpcyBzdWl0YWJsZSBmb3IgaW5wdXQgdG8gdGV4dCBmb3JtYXR0ZXJzIG9yCitmb3IgYXV0b21hdGljIHRyYW5zbGF0aW9uIHRvIGEgdmFyaWV0eSBvZiBmb3JtYXRzIHN1aXRhYmxlIGZvciBpbnB1dAordG8gdGV4dCBmb3JtYXR0ZXJzLiAgQSBjb3B5IG1hZGUgaW4gYW4gb3RoZXJ3aXNlIFRyYW5zcGFyZW50IGZpbGUKK2Zvcm1hdCB3aG9zZSBtYXJrdXAsIG9yIGFic2VuY2Ugb2YgbWFya3VwLCBoYXMgYmVlbiBhcnJhbmdlZCB0byB0aHdhcnQKK29yIGRpc2NvdXJhZ2Ugc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuCitBbiBpbWFnZSBmb3JtYXQgaXMgbm90IFRyYW5zcGFyZW50IGlmIHVzZWQgZm9yIGFueSBzdWJzdGFudGlhbCBhbW91bnQKK29mIHRleHQuICBBIGNvcHkgdGhhdCBpcyBub3QgIlRyYW5zcGFyZW50IiBpcyBjYWxsZWQgIk9wYXF1ZSIuCisKK0V4YW1wbGVzIG9mIHN1aXRhYmxlIGZvcm1hdHMgZm9yIFRyYW5zcGFyZW50IGNvcGllcyBpbmNsdWRlIHBsYWluCitBU0NJSSB3aXRob3V0IG1hcmt1cCwgVGV4aW5mbyBpbnB1dCBmb3JtYXQsIExhVGVYIGlucHV0IGZvcm1hdCwgU0dNTAorb3IgWE1MIHVzaW5nIGEgcHVibGljbHkgYXZhaWxhYmxlIERURCwgYW5kIHN0YW5kYXJkLWNvbmZvcm1pbmcgc2ltcGxlCitIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgRXhhbXBsZXMgb2YKK3RyYW5zcGFyZW50IGltYWdlIGZvcm1hdHMgaW5jbHVkZSBQTkcsIFhDRiBhbmQgSlBHLiAgT3BhcXVlIGZvcm1hdHMKK2luY2x1ZGUgcHJvcHJpZXRhcnkgZm9ybWF0cyB0aGF0IGNhbiBiZSByZWFkIGFuZCBlZGl0ZWQgb25seSBieQorcHJvcHJpZXRhcnkgd29yZCBwcm9jZXNzb3JzLCBTR01MIG9yIFhNTCBmb3Igd2hpY2ggdGhlIERURCBhbmQvb3IKK3Byb2Nlc3NpbmcgdG9vbHMgYXJlIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlLCBhbmQgdGhlCittYWNoaW5lLWdlbmVyYXRlZCBIVE1MLCBQb3N0U2NyaXB0IG9yIFBERiBwcm9kdWNlZCBieSBzb21lIHdvcmQKK3Byb2Nlc3NvcnMgZm9yIG91dHB1dCBwdXJwb3NlcyBvbmx5LgorCitUaGUgIlRpdGxlIFBhZ2UiIG1lYW5zLCBmb3IgYSBwcmludGVkIGJvb2ssIHRoZSB0aXRsZSBwYWdlIGl0c2VsZiwKK3BsdXMgc3VjaCBmb2xsb3dpbmcgcGFnZXMgYXMgYXJlIG5lZWRlZCB0byBob2xkLCBsZWdpYmx5LCB0aGUgbWF0ZXJpYWwKK3RoaXMgTGljZW5zZSByZXF1aXJlcyB0byBhcHBlYXIgaW4gdGhlIHRpdGxlIHBhZ2UuICBGb3Igd29ya3MgaW4KK2Zvcm1hdHMgd2hpY2ggZG8gbm90IGhhdmUgYW55IHRpdGxlIHBhZ2UgYXMgc3VjaCwgIlRpdGxlIFBhZ2UiIG1lYW5zCit0aGUgdGV4dCBuZWFyIHRoZSBtb3N0IHByb21pbmVudCBhcHBlYXJhbmNlIG9mIHRoZSB3b3JrJ3MgdGl0bGUsCitwcmVjZWRpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgYm9keSBvZiB0aGUgdGV4dC4KKworQSBzZWN0aW9uICJFbnRpdGxlZCBYWVoiIG1lYW5zIGEgbmFtZWQgc3VidW5pdCBvZiB0aGUgRG9jdW1lbnQgd2hvc2UKK3RpdGxlIGVpdGhlciBpcyBwcmVjaXNlbHkgWFlaIG9yIGNvbnRhaW5zIFhZWiBpbiBwYXJlbnRoZXNlcyBmb2xsb3dpbmcKK3RleHQgdGhhdCB0cmFuc2xhdGVzIFhZWiBpbiBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmUgWFlaIHN0YW5kcyBmb3IgYQorc3BlY2lmaWMgc2VjdGlvbiBuYW1lIG1lbnRpb25lZCBiZWxvdywgc3VjaCBhcyAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCAiRW5kb3JzZW1lbnRzIiwgb3IgIkhpc3RvcnkiLikgIFRvICJQcmVzZXJ2ZSB0aGUgVGl0bGUiCitvZiBzdWNoIGEgc2VjdGlvbiB3aGVuIHlvdSBtb2RpZnkgdGhlIERvY3VtZW50IG1lYW5zIHRoYXQgaXQgcmVtYWlucyBhCitzZWN0aW9uICJFbnRpdGxlZCBYWVoiIGFjY29yZGluZyB0byB0aGlzIGRlZmluaXRpb24uCisKK1RoZSBEb2N1bWVudCBtYXkgaW5jbHVkZSBXYXJyYW50eSBEaXNjbGFpbWVycyBuZXh0IHRvIHRoZSBub3RpY2Ugd2hpY2gKK3N0YXRlcyB0aGF0IHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBEb2N1bWVudC4gIFRoZXNlIFdhcnJhbnR5CitEaXNjbGFpbWVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbmNsdWRlZCBieSByZWZlcmVuY2UgaW4gdGhpcworTGljZW5zZSwgYnV0IG9ubHkgYXMgcmVnYXJkcyBkaXNjbGFpbWluZyB3YXJyYW50aWVzOiBhbnkgb3RoZXIKK2ltcGxpY2F0aW9uIHRoYXQgdGhlc2UgV2FycmFudHkgRGlzY2xhaW1lcnMgbWF5IGhhdmUgaXMgdm9pZCBhbmQgaGFzCitubyBlZmZlY3Qgb24gdGhlIG1lYW5pbmcgb2YgdGhpcyBMaWNlbnNlLgorCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8gb3RoZXIKK2NvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50J3MgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0byBnaXZlCit0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIgZG9jdW1lbnRzCityZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGlzCitMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkgdGhhdCBpcyBpbmNsdWRlZCBpbgordGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMgb2YgdGhpcyBMaWNlbnNlIGZvcgordmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsIG90aGVyIHJlc3BlY3RzLgorCitZb3UgbWF5IGV4dHJhY3QgYSBzaW5nbGUgZG9jdW1lbnQgZnJvbSBzdWNoIGEgY29sbGVjdGlvbiwgYW5kIGRpc3RyaWJ1dGUKK2l0IGluZGl2aWR1YWxseSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHlvdSBpbnNlcnQgYSBjb3B5IG9mIHRoaXMKK0xpY2Vuc2UgaW50byB0aGUgZXh0cmFjdGVkIGRvY3VtZW50LCBhbmQgZm9sbG93IHRoaXMgTGljZW5zZSBpbiBhbGwKK290aGVyIHJlc3BlY3RzIHJlZ2FyZGluZyB2ZXJiYXRpbSBjb3B5aW5nIG9mIHRoYXQgZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50J3MgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgb3RoZXIgYXR0ZW1wdCB0bworY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGlzIHZvaWQsIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLAorcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zCitvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKworQURERU5EVU06IEhvdyB0byB1c2UgdGhpcyBMaWNlbnNlIGZvciB5b3VyIGRvY3VtZW50cworCitUbyB1c2UgdGhpcyBMaWNlbnNlIGluIGEgZG9jdW1lbnQgeW91IGhhdmUgd3JpdHRlbiwgaW5jbHVkZSBhIGNvcHkgb2YKK3RoZSBMaWNlbnNlIGluIHRoZSBkb2N1bWVudCBhbmQgcHV0IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorbGljZW5zZSBub3RpY2VzIGp1c3QgYWZ0ZXIgdGhlIHRpdGxlIHBhZ2U6CisKKyAgICBDb3B5cmlnaHQgKGMpICBZRUFSICBZT1VSIE5BTUUuCisgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIFZlcnNpb24gMS4yCisgICAgb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisgICAgd2l0aCBubyBJbnZhcmlhbnQgU2VjdGlvbnMsIG5vIEZyb250LUNvdmVyIFRleHRzLCBhbmQgbm8gQmFjay1Db3ZlciBUZXh0cy4KKyAgICBBIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkdOVQorICAgIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIi4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zLCBGcm9udC1Db3ZlciBUZXh0cyBhbmQgQmFjay1Db3ZlciBUZXh0cywKK3JlcGxhY2UgdGhlICJ3aXRoLi4uVGV4dHMuIiBsaW5lIHdpdGggdGhpczoKKworICAgIHdpdGggdGhlIEludmFyaWFudCBTZWN0aW9ucyBiZWluZyBMSVNUIFRIRUlSIFRJVExFUywgd2l0aCB0aGUKKyAgICBGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNULCBhbmQgd2l0aCB0aGUgQmFjay1Db3ZlciBUZXh0cyBiZWluZyBMSVNULgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aG91dCBDb3ZlciBUZXh0cywgb3Igc29tZSBvdGhlcgorY29tYmluYXRpb24gb2YgdGhlIHRocmVlLCBtZXJnZSB0aG9zZSB0d28gYWx0ZXJuYXRpdmVzIHRvIHN1aXQgdGhlCitzaXR1YXRpb24uCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HRkRMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzg3MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjIKQEAgLTAsMCArMSwzOTkgQEAKKworICAgICAgICAgICAgICAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLjIsIE5vdmVtYmVyIDIwMDIKKworCisgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEsMjAwMiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKworMC4gUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50ICJmcmVlIiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKK1RoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgImNvcHlsZWZ0Iiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCitXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUKK3NvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUKK3Byb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZQorc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsKK2l0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yCit3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UKK3ByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworCisxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSAiRG9jdW1lbnQiLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhCitsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91Citjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbgordW5kZXIgY29weXJpZ2h0IGxhdy4KKworQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mCit0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudGBzIG92ZXJhbGwgc3ViamVjdAorKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsIGRpcmVjdGx5Cit3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluIHBhcnQgYQordGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluIGFueQorbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCitUaGUgIkludmFyaWFudCBTZWN0aW9ucyIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcworYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZQordGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIGEKK3NlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdAorYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4gIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvCitJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudAorU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworVGhlICJDb3ZlciBUZXh0cyIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKK0EgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4KK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KKworRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KK0FTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LCBTR01MCitvciBYTUwgdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUgRFRELCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUKK0hUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcyBvZgordHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIFBORywgWENGIGFuZCBKUEcuICBPcGFxdWUgZm9ybWF0cworaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5Citwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFREIGFuZC9vcgorcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKK21hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIHByb2R1Y2VkIGJ5IHNvbWUgd29yZAorcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKK1RoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUgUGFnZSIgbWVhbnMKK3RoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmtgcyB0aXRsZSwKK3ByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LgorCitBIHNlY3Rpb24gIkVudGl0bGVkIFhZWiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsICJFbmRvcnNlbWVudHMiLCBvciAiSGlzdG9yeSIuKSAgVG8gIlByZXNlcnZlIHRoZSBUaXRsZSIKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gIkVudGl0bGVkIFhZWiIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaAorc3RhdGVzIHRoYXQgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50LiAgVGhlc2UgV2FycmFudHkKK0Rpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzCitMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgoraW1wbGljYXRpb24gdGhhdCB0aGVzZSBXYXJyYW50eSBEaXNjbGFpbWVycyBtYXkgaGF2ZSBpcyB2b2lkIGFuZCBoYXMKK25vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCisKKworMi4gVkVSQkFUSU0gQ09QWUlORworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubyBvdGhlcgorY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworCiszLiBDT1BZSU5HIElOIFFVQU5USVRZCisKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnRgcyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCitJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiBmaXZlKSwKKyAgIHVubGVzcyB0aGV5IHJlbGVhc2UgeW91IGZyb20gdGhpcyByZXF1aXJlbWVudC4KK0MuIFN0YXRlIG9uIHRoZSBUaXRsZSBwYWdlIHRoZSBuYW1lIG9mIHRoZSBwdWJsaXNoZXIgb2YgdGhlCisgICBNb2RpZmllZCBWZXJzaW9uLCBhcyB0aGUgcHVibGlzaGVyLgorRC4gUHJlc2VydmUgYWxsIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvZiB0aGUgRG9jdW1lbnQuCitFLiBBZGQgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBmb3IgeW91ciBtb2RpZmljYXRpb25zCisgICBhZGphY2VudCB0byB0aGUgb3RoZXIgY29weXJpZ2h0IG5vdGljZXMuCitGLiBJbmNsdWRlLCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY29weXJpZ2h0IG5vdGljZXMsIGEgbGljZW5zZSBub3RpY2UKKyAgIGdpdmluZyB0aGUgcHVibGljIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHRoZQorICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiB0aGUgZm9ybSBzaG93biBpbiB0aGUgQWRkZW5kdW0gYmVsb3cuCitHLiBQcmVzZXJ2ZSBpbiB0aGF0IGxpY2Vuc2Ugbm90aWNlIHRoZSBmdWxsIGxpc3RzIG9mIEludmFyaWFudCBTZWN0aW9ucworICAgYW5kIHJlcXVpcmVkIENvdmVyIFRleHRzIGdpdmVuIGluIHRoZSBEb2N1bWVudGBzIGxpY2Vuc2Ugbm90aWNlLgorSC4gSW5jbHVkZSBhbiB1bmFsdGVyZWQgY29weSBvZiB0aGlzIExpY2Vuc2UuCitJLiBQcmVzZXJ2ZSB0aGUgc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIsIFByZXNlcnZlIGl0cyBUaXRsZSwgYW5kIGFkZAorICAgdG8gaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gRm9yIGFueSBzZWN0aW9uIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiBvciAiRGVkaWNhdGlvbnMiLAorICAgUHJlc2VydmUgdGhlIFRpdGxlIG9mIHRoZSBzZWN0aW9uLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsCisgICB0aGUgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiB0byBiZSBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCitPLiBQcmVzZXJ2ZSBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uYHMgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIEVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLCBhbmQgdGhhdCB5b3UgcHJlc2VydmUgYWxsIHRoZWlyIFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIEVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK0VudGl0bGVkICJFbmRvcnNlbWVudHMiLgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMKK3JlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwgY29waWVzIG9mIHRoaXMKK0xpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weSB0aGF0IGlzIGluY2x1ZGVkIGluCit0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yCit2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQoraXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhIGNvcHkgb2YgdGhpcworTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbAorb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKworCis3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKK0EgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAiYWdncmVnYXRlIiBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uYHMgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LgorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKK0lmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnRgcyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisKKworOC4gVFJBTlNMQVRJT04KKworVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4KK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKK0lmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUKK2l0cyBUaXRsZSAoc2VjdGlvbiAxKSB3aWxsIHR5cGljYWxseSByZXF1aXJlIGNoYW5naW5nIHRoZSBhY3R1YWwKK3RpdGxlLgorCisKKzkuIFRFUk1JTkFUSU9OCisKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgZXhjZXB0CithcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBvdGhlciBhdHRlbXB0IHRvCitjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaXMgdm9pZCwgYW5kIHdpbGwKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsCitwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworCisxMC4gRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMKK29mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCitodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvLgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCitBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworICAgIENvcHlyaWdodCAoYykgIFlFQVIgIFlPVVIgTkFNRS4KKyAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjIKKyAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyIFRleHRzLgorICAgIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VCisgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgIndpdGguLi5UZXh0cy4iIGxpbmUgd2l0aCB0aGlzOgorCisgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZQorICAgIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworSWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR0ZETC0xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIxMWE0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dGREwtMS4zCkBAIC0wLDAgKzEsNDUzIEBACisKKworICAgICAgICAgICAgICAgIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZQorICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMywgMyBOb3ZlbWJlciAyMDA4CisKKworIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworMC4gUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgorZnVuY3Rpb25hbCBhbmQgdXNlZnVsIGRvY3VtZW50ICJmcmVlIiBpbiB0aGUgc2Vuc2Ugb2YgZnJlZWRvbTogdG8KK2Fzc3VyZSBldmVyeW9uZSB0aGUgZWZmZWN0aXZlIGZyZWVkb20gdG8gY29weSBhbmQgcmVkaXN0cmlidXRlIGl0LAord2l0aCBvciB3aXRob3V0IG1vZGlmeWluZyBpdCwgZWl0aGVyIGNvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHkuCitTZWNvbmRhcmlseSwgdGhpcyBMaWNlbnNlIHByZXNlcnZlcyBmb3IgdGhlIGF1dGhvciBhbmQgcHVibGlzaGVyIGEgd2F5Cit0byBnZXQgY3JlZGl0IGZvciB0aGVpciB3b3JrLCB3aGlsZSBub3QgYmVpbmcgY29uc2lkZXJlZCByZXNwb25zaWJsZQorZm9yIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBvdGhlcnMuCisKK1RoaXMgTGljZW5zZSBpcyBhIGtpbmQgb2YgImNvcHlsZWZ0Iiwgd2hpY2ggbWVhbnMgdGhhdCBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgZG9jdW1lbnQgbXVzdCB0aGVtc2VsdmVzIGJlIGZyZWUgaW4gdGhlIHNhbWUgc2Vuc2UuICBJdAorY29tcGxlbWVudHMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aGljaCBpcyBhIGNvcHlsZWZ0CitsaWNlbnNlIGRlc2lnbmVkIGZvciBmcmVlIHNvZnR3YXJlLgorCitXZSBoYXZlIGRlc2lnbmVkIHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byB1c2UgaXQgZm9yIG1hbnVhbHMgZm9yIGZyZWUKK3NvZnR3YXJlLCBiZWNhdXNlIGZyZWUgc29mdHdhcmUgbmVlZHMgZnJlZSBkb2N1bWVudGF0aW9uOiBhIGZyZWUKK3Byb2dyYW0gc2hvdWxkIGNvbWUgd2l0aCBtYW51YWxzIHByb3ZpZGluZyB0aGUgc2FtZSBmcmVlZG9tcyB0aGF0IHRoZQorc29mdHdhcmUgZG9lcy4gIEJ1dCB0aGlzIExpY2Vuc2UgaXMgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgbWFudWFsczsKK2l0IGNhbiBiZSB1c2VkIGZvciBhbnkgdGV4dHVhbCB3b3JrLCByZWdhcmRsZXNzIG9mIHN1YmplY3QgbWF0dGVyIG9yCit3aGV0aGVyIGl0IGlzIHB1Ymxpc2hlZCBhcyBhIHByaW50ZWQgYm9vay4gIFdlIHJlY29tbWVuZCB0aGlzIExpY2Vuc2UKK3ByaW5jaXBhbGx5IGZvciB3b3JrcyB3aG9zZSBwdXJwb3NlIGlzIGluc3RydWN0aW9uIG9yIHJlZmVyZW5jZS4KKworCisxLiBBUFBMSUNBQklMSVRZIEFORCBERUZJTklUSU9OUworCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWFudWFsIG9yIG90aGVyIHdvcmssIGluIGFueSBtZWRpdW0sIHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgY2FuIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAgU3VjaCBhIG5vdGljZSBncmFudHMgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVubGltaXRlZCBpbiBkdXJhdGlvbiwgdG8gdXNlIHRoYXQKK3dvcmsgdW5kZXIgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGhlcmVpbi4gIFRoZSAiRG9jdW1lbnQiLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhCitsaWNlbnNlZSwgYW5kIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gIFlvdSBhY2NlcHQgdGhlIGxpY2Vuc2UgaWYgeW91Citjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgd29yayBpbiBhIHdheSByZXF1aXJpbmcgcGVybWlzc2lvbgordW5kZXIgY29weXJpZ2h0IGxhdy4KKworQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mCit0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudGBzIG92ZXJhbGwKK3N1YmplY3QgKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsCitkaXJlY3RseSB3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoVGh1cywgaWYgdGhlIERvY3VtZW50IGlzIGluCitwYXJ0IGEgdGV4dGJvb2sgb2YgbWF0aGVtYXRpY3MsIGEgU2Vjb25kYXJ5IFNlY3Rpb24gbWF5IG5vdCBleHBsYWluCithbnkgbWF0aGVtYXRpY3MuKSAgVGhlIHJlbGF0aW9uc2hpcCBjb3VsZCBiZSBhIG1hdHRlciBvZiBoaXN0b3JpY2FsCitjb25uZWN0aW9uIHdpdGggdGhlIHN1YmplY3Qgb3Igd2l0aCByZWxhdGVkIG1hdHRlcnMsIG9yIG9mIGxlZ2FsLAorY29tbWVyY2lhbCwgcGhpbG9zb3BoaWNhbCwgZXRoaWNhbCBvciBwb2xpdGljYWwgcG9zaXRpb24gcmVnYXJkaW5nCit0aGVtLgorCitUaGUgIkludmFyaWFudCBTZWN0aW9ucyIgYXJlIGNlcnRhaW4gU2Vjb25kYXJ5IFNlY3Rpb25zIHdob3NlIHRpdGxlcworYXJlIGRlc2lnbmF0ZWQsIGFzIGJlaW5nIHRob3NlIG9mIEludmFyaWFudCBTZWN0aW9ucywgaW4gdGhlIG5vdGljZQordGhhdCBzYXlzIHRoYXQgdGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4gIElmIGEKK3NlY3Rpb24gZG9lcyBub3QgZml0IHRoZSBhYm92ZSBkZWZpbml0aW9uIG9mIFNlY29uZGFyeSB0aGVuIGl0IGlzIG5vdAorYWxsb3dlZCB0byBiZSBkZXNpZ25hdGVkIGFzIEludmFyaWFudC4gIFRoZSBEb2N1bWVudCBtYXkgY29udGFpbiB6ZXJvCitJbnZhcmlhbnQgU2VjdGlvbnMuICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3QgaWRlbnRpZnkgYW55IEludmFyaWFudAorU2VjdGlvbnMgdGhlbiB0aGVyZSBhcmUgbm9uZS4KKworVGhlICJDb3ZlciBUZXh0cyIgYXJlIGNlcnRhaW4gc2hvcnQgcGFzc2FnZXMgb2YgdGV4dCB0aGF0IGFyZSBsaXN0ZWQsCithcyBGcm9udC1Db3ZlciBUZXh0cyBvciBCYWNrLUNvdmVyIFRleHRzLCBpbiB0aGUgbm90aWNlIHRoYXQgc2F5cyB0aGF0Cit0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQSBGcm9udC1Db3ZlciBUZXh0IG1heQorYmUgYXQgbW9zdCA1IHdvcmRzLCBhbmQgYSBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGF0IG1vc3QgMjUgd29yZHMuCisKK0EgIlRyYW5zcGFyZW50IiBjb3B5IG9mIHRoZSBEb2N1bWVudCBtZWFucyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSwKK3JlcHJlc2VudGVkIGluIGEgZm9ybWF0IHdob3NlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZQorZ2VuZXJhbCBwdWJsaWMsIHRoYXQgaXMgc3VpdGFibGUgZm9yIHJldmlzaW5nIHRoZSBkb2N1bWVudAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCwgb3IgYWJzZW5jZSBvZiBtYXJrdXAsIGhhcyBiZWVuIGFycmFuZ2VkIHRvIHRod2FydAorb3IgZGlzY291cmFnZSBzdWJzZXF1ZW50IG1vZGlmaWNhdGlvbiBieSByZWFkZXJzIGlzIG5vdCBUcmFuc3BhcmVudC4KK0FuIGltYWdlIGZvcm1hdCBpcyBub3QgVHJhbnNwYXJlbnQgaWYgdXNlZCBmb3IgYW55IHN1YnN0YW50aWFsIGFtb3VudAorb2YgdGV4dC4gIEEgY29weSB0aGF0IGlzIG5vdCAiVHJhbnNwYXJlbnQiIGlzIGNhbGxlZCAiT3BhcXVlIi4KKworRXhhbXBsZXMgb2Ygc3VpdGFibGUgZm9ybWF0cyBmb3IgVHJhbnNwYXJlbnQgY29waWVzIGluY2x1ZGUgcGxhaW4KK0FTQ0lJIHdpdGhvdXQgbWFya3VwLCBUZXhpbmZvIGlucHV0IGZvcm1hdCwgTGFUZVggaW5wdXQgZm9ybWF0LCBTR01MCitvciBYTUwgdXNpbmcgYSBwdWJsaWNseSBhdmFpbGFibGUgRFRELCBhbmQgc3RhbmRhcmQtY29uZm9ybWluZyBzaW1wbGUKK0hUTUwsIFBvc3RTY3JpcHQgb3IgUERGIGRlc2lnbmVkIGZvciBodW1hbiBtb2RpZmljYXRpb24uICBFeGFtcGxlcyBvZgordHJhbnNwYXJlbnQgaW1hZ2UgZm9ybWF0cyBpbmNsdWRlIFBORywgWENGIGFuZCBKUEcuICBPcGFxdWUgZm9ybWF0cworaW5jbHVkZSBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5IGJ5Citwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFREIGFuZC9vcgorcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKK21hY2hpbmUtZ2VuZXJhdGVkIEhUTUwsIFBvc3RTY3JpcHQgb3IgUERGIHByb2R1Y2VkIGJ5IHNvbWUgd29yZAorcHJvY2Vzc29ycyBmb3Igb3V0cHV0IHB1cnBvc2VzIG9ubHkuCisKK1RoZSAiVGl0bGUgUGFnZSIgbWVhbnMsIGZvciBhIHByaW50ZWQgYm9vaywgdGhlIHRpdGxlIHBhZ2UgaXRzZWxmLAorcGx1cyBzdWNoIGZvbGxvd2luZyBwYWdlcyBhcyBhcmUgbmVlZGVkIHRvIGhvbGQsIGxlZ2libHksIHRoZSBtYXRlcmlhbAordGhpcyBMaWNlbnNlIHJlcXVpcmVzIHRvIGFwcGVhciBpbiB0aGUgdGl0bGUgcGFnZS4gIEZvciB3b3JrcyBpbgorZm9ybWF0cyB3aGljaCBkbyBub3QgaGF2ZSBhbnkgdGl0bGUgcGFnZSBhcyBzdWNoLCAiVGl0bGUgUGFnZSIgbWVhbnMKK3RoZSB0ZXh0IG5lYXIgdGhlIG1vc3QgcHJvbWluZW50IGFwcGVhcmFuY2Ugb2YgdGhlIHdvcmtgcyB0aXRsZSwKK3ByZWNlZGluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBib2R5IG9mIHRoZSB0ZXh0LgorCitUaGUgInB1Ymxpc2hlciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBjb3BpZXMgb2YKK3RoZSBEb2N1bWVudCB0byB0aGUgcHVibGljLgorCitBIHNlY3Rpb24gIkVudGl0bGVkIFhZWiIgbWVhbnMgYSBuYW1lZCBzdWJ1bml0IG9mIHRoZSBEb2N1bWVudCB3aG9zZQordGl0bGUgZWl0aGVyIGlzIHByZWNpc2VseSBYWVogb3IgY29udGFpbnMgWFlaIGluIHBhcmVudGhlc2VzIGZvbGxvd2luZwordGV4dCB0aGF0IHRyYW5zbGF0ZXMgWFlaIGluIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZSBYWVogc3RhbmRzIGZvciBhCitzcGVjaWZpYyBzZWN0aW9uIG5hbWUgbWVudGlvbmVkIGJlbG93LCBzdWNoIGFzICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsICJFbmRvcnNlbWVudHMiLCBvciAiSGlzdG9yeSIuKSAgVG8gIlByZXNlcnZlIHRoZSBUaXRsZSIKK29mIHN1Y2ggYSBzZWN0aW9uIHdoZW4geW91IG1vZGlmeSB0aGUgRG9jdW1lbnQgbWVhbnMgdGhhdCBpdCByZW1haW5zIGEKK3NlY3Rpb24gIkVudGl0bGVkIFhZWiIgYWNjb3JkaW5nIHRvIHRoaXMgZGVmaW5pdGlvbi4KKworVGhlIERvY3VtZW50IG1heSBpbmNsdWRlIFdhcnJhbnR5IERpc2NsYWltZXJzIG5leHQgdG8gdGhlIG5vdGljZSB3aGljaAorc3RhdGVzIHRoYXQgdGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIERvY3VtZW50LiAgVGhlc2UgV2FycmFudHkKK0Rpc2NsYWltZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGluY2x1ZGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzCitMaWNlbnNlLCBidXQgb25seSBhcyByZWdhcmRzIGRpc2NsYWltaW5nIHdhcnJhbnRpZXM6IGFueSBvdGhlcgoraW1wbGljYXRpb24gdGhhdCB0aGVzZSBXYXJyYW50eSBEaXNjbGFpbWVycyBtYXkgaGF2ZSBpcyB2b2lkIGFuZCBoYXMKK25vIGVmZmVjdCBvbiB0aGUgbWVhbmluZyBvZiB0aGlzIExpY2Vuc2UuCisKKzIuIFZFUkJBVElNIENPUFlJTkcKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpbiBhbnkgbWVkaXVtLCBlaXRoZXIKK2NvbW1lcmNpYWxseSBvciBub25jb21tZXJjaWFsbHksIHByb3ZpZGVkIHRoYXQgdGhpcyBMaWNlbnNlLCB0aGUKK2NvcHlyaWdodCBub3RpY2VzLCBhbmQgdGhlIGxpY2Vuc2Ugbm90aWNlIHNheWluZyB0aGlzIExpY2Vuc2UgYXBwbGllcwordG8gdGhlIERvY3VtZW50IGFyZSByZXByb2R1Y2VkIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHlvdSBhZGQgbm8KK290aGVyIGNvbmRpdGlvbnMgd2hhdHNvZXZlciB0byB0aG9zZSBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCB1c2UKK3RlY2huaWNhbCBtZWFzdXJlcyB0byBvYnN0cnVjdCBvciBjb250cm9sIHRoZSByZWFkaW5nIG9yIGZ1cnRoZXIKK2NvcHlpbmcgb2YgdGhlIGNvcGllcyB5b3UgbWFrZSBvciBkaXN0cmlidXRlLiAgSG93ZXZlciwgeW91IG1heSBhY2NlcHQKK2NvbXBlbnNhdGlvbiBpbiBleGNoYW5nZSBmb3IgY29waWVzLiAgSWYgeW91IGRpc3RyaWJ1dGUgYSBsYXJnZSBlbm91Z2gKK251bWJlciBvZiBjb3BpZXMgeW91IG11c3QgYWxzbyBmb2xsb3cgdGhlIGNvbmRpdGlvbnMgaW4gc2VjdGlvbiAzLgorCitZb3UgbWF5IGFsc28gbGVuZCBjb3BpZXMsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQKK3lvdSBtYXkgcHVibGljbHkgZGlzcGxheSBjb3BpZXMuCisKKworMy4gQ09QWUlORyBJTiBRVUFOVElUWQorCitJZiB5b3UgcHVibGlzaCBwcmludGVkIGNvcGllcyAob3IgY29waWVzIGluIG1lZGlhIHRoYXQgY29tbW9ubHkgaGF2ZQorcHJpbnRlZCBjb3ZlcnMpIG9mIHRoZSBEb2N1bWVudCwgbnVtYmVyaW5nIG1vcmUgdGhhbiAxMDAsIGFuZCB0aGUKK0RvY3VtZW50YHMgbGljZW5zZSBub3RpY2UgcmVxdWlyZXMgQ292ZXIgVGV4dHMsIHlvdSBtdXN0IGVuY2xvc2UgdGhlCitjb3BpZXMgaW4gY292ZXJzIHRoYXQgY2FycnksIGNsZWFybHkgYW5kIGxlZ2libHksIGFsbCB0aGVzZSBDb3ZlcgorVGV4dHM6IEZyb250LUNvdmVyIFRleHRzIG9uIHRoZSBmcm9udCBjb3ZlciwgYW5kIEJhY2stQ292ZXIgVGV4dHMgb24KK3RoZSBiYWNrIGNvdmVyLiAgQm90aCBjb3ZlcnMgbXVzdCBhbHNvIGNsZWFybHkgYW5kIGxlZ2libHkgaWRlbnRpZnkKK3lvdSBhcyB0aGUgcHVibGlzaGVyIG9mIHRoZXNlIGNvcGllcy4gIFRoZSBmcm9udCBjb3ZlciBtdXN0IHByZXNlbnQKK3RoZSBmdWxsIHRpdGxlIHdpdGggYWxsIHdvcmRzIG9mIHRoZSB0aXRsZSBlcXVhbGx5IHByb21pbmVudCBhbmQKK3Zpc2libGUuICBZb3UgbWF5IGFkZCBvdGhlciBtYXRlcmlhbCBvbiB0aGUgY292ZXJzIGluIGFkZGl0aW9uLgorQ29weWluZyB3aXRoIGNoYW5nZXMgbGltaXRlZCB0byB0aGUgY292ZXJzLCBhcyBsb25nIGFzIHRoZXkgcHJlc2VydmUKK3RoZSB0aXRsZSBvZiB0aGUgRG9jdW1lbnQgYW5kIHNhdGlzZnkgdGhlc2UgY29uZGl0aW9ucywgY2FuIGJlIHRyZWF0ZWQKK2FzIHZlcmJhdGltIGNvcHlpbmcgaW4gb3RoZXIgcmVzcGVjdHMuCisKK0lmIHRoZSByZXF1aXJlZCB0ZXh0cyBmb3IgZWl0aGVyIGNvdmVyIGFyZSB0b28gdm9sdW1pbm91cyB0byBmaXQKK2xlZ2libHksIHlvdSBzaG91bGQgcHV0IHRoZSBmaXJzdCBvbmVzIGxpc3RlZCAoYXMgbWFueSBhcyBmaXQKK3JlYXNvbmFibHkpIG9uIHRoZSBhY3R1YWwgY292ZXIsIGFuZCBjb250aW51ZSB0aGUgcmVzdCBvbnRvIGFkamFjZW50CitwYWdlcy4KKworSWYgeW91IHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSBPcGFxdWUgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcKK21vcmUgdGhhbiAxMDAsIHlvdSBtdXN0IGVpdGhlciBpbmNsdWRlIGEgbWFjaGluZS1yZWFkYWJsZSBUcmFuc3BhcmVudAorY29weSBhbG9uZyB3aXRoIGVhY2ggT3BhcXVlIGNvcHksIG9yIHN0YXRlIGluIG9yIHdpdGggZWFjaCBPcGFxdWUgY29weQorYSBjb21wdXRlci1uZXR3b3JrIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGdlbmVyYWwgbmV0d29yay11c2luZworcHVibGljIGhhcyBhY2Nlc3MgdG8gZG93bmxvYWQgdXNpbmcgcHVibGljLXN0YW5kYXJkIG5ldHdvcmsgcHJvdG9jb2xzCithIGNvbXBsZXRlIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLgorSWYgeW91IHVzZSB0aGUgbGF0dGVyIG9wdGlvbiwgeW91IG11c3QgdGFrZSByZWFzb25hYmx5IHBydWRlbnQgc3RlcHMsCit3aGVuIHlvdSBiZWdpbiBkaXN0cmlidXRpb24gb2YgT3BhcXVlIGNvcGllcyBpbiBxdWFudGl0eSwgdG8gZW5zdXJlCit0aGF0IHRoaXMgVHJhbnNwYXJlbnQgY29weSB3aWxsIHJlbWFpbiB0aHVzIGFjY2Vzc2libGUgYXQgdGhlIHN0YXRlZAorbG9jYXRpb24gdW50aWwgYXQgbGVhc3Qgb25lIHllYXIgYWZ0ZXIgdGhlIGxhc3QgdGltZSB5b3UgZGlzdHJpYnV0ZSBhbgorT3BhcXVlIGNvcHkgKGRpcmVjdGx5IG9yIHRocm91Z2ggeW91ciBhZ2VudHMgb3IgcmV0YWlsZXJzKSBvZiB0aGF0CitlZGl0aW9uIHRvIHRoZSBwdWJsaWMuCisKK0l0IGlzIHJlcXVlc3RlZCwgYnV0IG5vdCByZXF1aXJlZCwgdGhhdCB5b3UgY29udGFjdCB0aGUgYXV0aG9ycyBvZiB0aGUKK0RvY3VtZW50IHdlbGwgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGFueSBsYXJnZSBudW1iZXIgb2YgY29waWVzLCB0bworZ2l2ZSB0aGVtIGEgY2hhbmNlIHRvIHByb3ZpZGUgeW91IHdpdGggYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZQorRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50YHMgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb25gcyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyCitkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbAorY29waWVzIG9mIHRoaXMgTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5Cit0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzCitvZiB0aGlzIExpY2Vuc2UgZm9yIHZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbAorb3RoZXIgcmVzcGVjdHMuCisKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQKK2Rpc3RyaWJ1dGUgaXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhCitjb3B5IG9mIHRoaXMgTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcworTGljZW5zZSBpbiBhbGwgb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdAorZG9jdW1lbnQuCisKKworNy4gQUdHUkVHQVRJT04gV0lUSCBJTkRFUEVOREVOVCBXT1JLUworCitBIGNvbXBpbGF0aW9uIG9mIHRoZSBEb2N1bWVudCBvciBpdHMgZGVyaXZhdGl2ZXMgd2l0aCBvdGhlciBzZXBhcmF0ZQorYW5kIGluZGVwZW5kZW50IGRvY3VtZW50cyBvciB3b3JrcywgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yCitkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4gImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvcHlyaWdodAorcmVzdWx0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIGlzIG5vdCB1c2VkIHRvIGxpbWl0IHRoZSBsZWdhbCByaWdodHMKK29mIHRoZSBjb21waWxhdGlvbmBzIHVzZXJzIGJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4KK1doZW4gdGhlIERvY3VtZW50IGlzIGluY2x1ZGVkIGluIGFuIGFnZ3JlZ2F0ZSwgdGhpcyBMaWNlbnNlIGRvZXMgbm90CithcHBseSB0byB0aGUgb3RoZXIgd29ya3MgaW4gdGhlIGFnZ3JlZ2F0ZSB3aGljaCBhcmUgbm90IHRoZW1zZWx2ZXMKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIERvY3VtZW50LgorCitJZiB0aGUgQ292ZXIgVGV4dCByZXF1aXJlbWVudCBvZiBzZWN0aW9uIDMgaXMgYXBwbGljYWJsZSB0byB0aGVzZQorY29waWVzIG9mIHRoZSBEb2N1bWVudCwgdGhlbiBpZiB0aGUgRG9jdW1lbnQgaXMgbGVzcyB0aGFuIG9uZSBoYWxmIG9mCit0aGUgZW50aXJlIGFnZ3JlZ2F0ZSwgdGhlIERvY3VtZW50YHMgQ292ZXIgVGV4dHMgbWF5IGJlIHBsYWNlZCBvbgorY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgRG9jdW1lbnQgd2l0aGluIHRoZSBhZ2dyZWdhdGUsIG9yIHRoZQorZWxlY3Ryb25pYyBlcXVpdmFsZW50IG9mIGNvdmVycyBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gZWxlY3Ryb25pYyBmb3JtLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gcHJpbnRlZCBjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSB3aG9sZQorYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhbGwgdGhlIGxpY2Vuc2Ugbm90aWNlcyBpbiB0aGUKK0RvY3VtZW50LCBhbmQgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGluY2x1ZGUKK3RoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbnMKK29mIHRob3NlIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLiAgSW4gY2FzZSBvZiBhIGRpc2FncmVlbWVudCBiZXR3ZWVuCit0aGUgdHJhbnNsYXRpb24gYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciBhIG5vdGljZQorb3IgZGlzY2xhaW1lciwgdGhlIG9yaWdpbmFsIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCitJZiBhIHNlY3Rpb24gaW4gdGhlIERvY3VtZW50IGlzIEVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKKyJEZWRpY2F0aW9ucyIsIG9yICJIaXN0b3J5IiwgdGhlIHJlcXVpcmVtZW50IChzZWN0aW9uIDQpIHRvIFByZXNlcnZlCitpdHMgVGl0bGUgKHNlY3Rpb24gMSkgd2lsbCB0eXBpY2FsbHkgcmVxdWlyZSBjaGFuZ2luZyB0aGUgYWN0dWFsCit0aXRsZS4KKworCis5LiBURVJNSU5BVElPTgorCitZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50CitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIGl0IGlzIHZvaWQsIGFuZAord2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0hvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGxpY2Vuc2UKK2Zyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwKK3VubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseQordGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyCitmYWlscyB0byBub3RpZnkgeW91IG9mIHRoZSB2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zIHByaW9yIHRvCis2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKK01vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCitUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCByZWNlaXB0IG9mIGEgY29weSBvZiBzb21lIG9yIGFsbCBvZiB0aGUgc2FtZSBtYXRlcmlhbCBkb2VzCitub3QgZ2l2ZSB5b3UgYW55IHJpZ2h0cyB0byB1c2UgaXQuCisKKworMTAuIEZVVFVSRSBSRVZJU0lPTlMgT0YgVEhJUyBMSUNFTlNFCisKK1RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggbmV3LCByZXZpc2VkIHZlcnNpb25zIG9mIHRoZQorR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMKK3dpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4KK2RldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4gIFNlZQoraHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0Ly4KKworRWFjaCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCitJZiB0aGUgRG9jdW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBwYXJ0aWN1bGFyIG51bWJlcmVkIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YKK2ZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgc3BlY2lmaWVkIHZlcnNpb24gb3IKK29mIGFueSBsYXRlciB2ZXJzaW9uIHRoYXQgaGFzIGJlZW4gcHVibGlzaGVkIChub3QgYXMgYSBkcmFmdCkgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24KK251bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIChub3QKK2FzIGEgZHJhZnQpIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgRG9jdW1lbnQKK3NwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhpcworTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eWBzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhCit2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZQorRG9jdW1lbnQuCisKKzExLiBSRUxJQ0VOU0lORworCisiTWFzc2l2ZSBNdWx0aWF1dGhvciBDb2xsYWJvcmF0aW9uIFNpdGUiIChvciAiTU1DIFNpdGUiKSBtZWFucyBhbnkKK1dvcmxkIFdpZGUgV2ViIHNlcnZlciB0aGF0IHB1Ymxpc2hlcyBjb3B5cmlnaHRhYmxlIHdvcmtzIGFuZCBhbHNvCitwcm92aWRlcyBwcm9taW5lbnQgZmFjaWxpdGllcyBmb3IgYW55Ym9keSB0byBlZGl0IHRob3NlIHdvcmtzLiAgQQorcHVibGljIHdpa2kgdGhhdCBhbnlib2R5IGNhbiBlZGl0IGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIHNlcnZlci4gIEEKKyJNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24iIChvciAiTU1DIikgY29udGFpbmVkIGluIHRoZSBzaXRlCittZWFucyBhbnkgc2V0IG9mIGNvcHlyaWdodGFibGUgd29ya3MgdGh1cyBwdWJsaXNoZWQgb24gdGhlIE1NQyBzaXRlLgorCisiQ0MtQlktU0EiIG1lYW5zIHRoZSBDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlIEFsaWtlIDMuMCAKK2xpY2Vuc2UgcHVibGlzaGVkIGJ5IENyZWF0aXZlIENvbW1vbnMgQ29ycG9yYXRpb24sIGEgbm90LWZvci1wcm9maXQgCitjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sIAorQ2FsaWZvcm5pYSwgYXMgd2VsbCBhcyBmdXR1cmUgY29weWxlZnQgdmVyc2lvbnMgb2YgdGhhdCBsaWNlbnNlIAorcHVibGlzaGVkIGJ5IHRoYXQgc2FtZSBvcmdhbml6YXRpb24uCisKKyJJbmNvcnBvcmF0ZSIgbWVhbnMgdG8gcHVibGlzaCBvciByZXB1Ymxpc2ggYSBEb2N1bWVudCwgaW4gd2hvbGUgb3IgaW4gCitwYXJ0LCBhcyBwYXJ0IG9mIGFub3RoZXIgRG9jdW1lbnQuCisKK0FuIE1NQyBpcyAiZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nIiBpZiBpdCBpcyBsaWNlbnNlZCB1bmRlciB0aGlzIAorTGljZW5zZSwgYW5kIGlmIGFsbCB3b3JrcyB0aGF0IHdlcmUgZmlyc3QgcHVibGlzaGVkIHVuZGVyIHRoaXMgTGljZW5zZSAKK3NvbWV3aGVyZSBvdGhlciB0aGFuIHRoaXMgTU1DLCBhbmQgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCBpbiB3aG9sZSBvciAKK2luIHBhcnQgaW50byB0aGUgTU1DLCAoMSkgaGFkIG5vIGNvdmVyIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywgYW5kIAorKDIpIHdlcmUgdGh1cyBpbmNvcnBvcmF0ZWQgcHJpb3IgdG8gTm92ZW1iZXIgMSwgMjAwOC4KKworVGhlIG9wZXJhdG9yIG9mIGFuIE1NQyBTaXRlIG1heSByZXB1Ymxpc2ggYW4gTU1DIGNvbnRhaW5lZCBpbiB0aGUgc2l0ZQordW5kZXIgQ0MtQlktU0Egb24gdGhlIHNhbWUgc2l0ZSBhdCBhbnkgdGltZSBiZWZvcmUgQXVndXN0IDEsIDIwMDksCitwcm92aWRlZCB0aGUgTU1DIGlzIGVsaWdpYmxlIGZvciByZWxpY2Vuc2luZy4KKworCitBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworICAgIENvcHlyaWdodCAoYykgIFlFQVIgIFlPVVIgTkFNRS4KKyAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoaXMgZG9jdW1lbnQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjMKKyAgICBvciBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKyAgICB3aXRoIG5vIEludmFyaWFudCBTZWN0aW9ucywgbm8gRnJvbnQtQ292ZXIgVGV4dHMsIGFuZCBubyBCYWNrLUNvdmVyIFRleHRzLgorICAgIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VCisgICAgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UiLgorCitJZiB5b3UgaGF2ZSBJbnZhcmlhbnQgU2VjdGlvbnMsIEZyb250LUNvdmVyIFRleHRzIGFuZCBCYWNrLUNvdmVyIFRleHRzLAorcmVwbGFjZSB0aGUgIndpdGguLi5UZXh0cy4iIGxpbmUgd2l0aCB0aGlzOgorCisgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZQorICAgIEZyb250LUNvdmVyIFRleHRzIGJlaW5nIExJU1QsIGFuZCB3aXRoIHRoZSBCYWNrLUNvdmVyIFRleHRzIGJlaW5nIExJU1QuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucyB3aXRob3V0IENvdmVyIFRleHRzLCBvciBzb21lIG90aGVyCitjb21iaW5hdGlvbiBvZiB0aGUgdGhyZWUsIG1lcmdlIHRob3NlIHR3byBhbHRlcm5hdGl2ZXMgdG8gc3VpdCB0aGUKK3NpdHVhdGlvbi4KKworSWYgeW91ciBkb2N1bWVudCBjb250YWlucyBub250cml2aWFsIGV4YW1wbGVzIG9mIHByb2dyYW0gY29kZSwgd2UKK3JlY29tbWVuZCByZWxlYXNpbmcgdGhlc2UgZXhhbXBsZXMgaW4gcGFyYWxsZWwgdW5kZXIgeW91ciBjaG9pY2Ugb2YKK2ZyZWUgc29mdHdhcmUgbGljZW5zZSwgc3VjaCBhcyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCit0byBwZXJtaXQgdGhlaXIgdXNlIGluIGZyZWUgc29mdHdhcmUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNGVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMS4wCkBAIC0wLDAgKzEsMjUyIEBACisKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDEKKworICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAxLCBGZWJydWFyeSAxOTg5CisKKyBDb3B5cmlnaHQgKEMpIDE5ODkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMgdHJ5IHRvIGtlZXAgdXNlcnMKK2F0IHRoZSBtZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuICBCeSBjb250cmFzdCwgb3VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhlCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzCitzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuCitZb3UgY2FuIHVzZSBpdCBmb3IgeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgU3BlY2lmaWNhbGx5LCB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBkZXNpZ25lZCB0byBtYWtlCitzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZ2l2ZSBhd2F5IG9yIHNlbGwgY29waWVzIG9mIGZyZWUKK3NvZnR3YXJlLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsCit0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlCitwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIGEgc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yYHMgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9yc2AgcmVwdXRhdGlvbnMuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoCitjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZQorIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK1Byb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zLiAgRWFjaAorbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW1gcyBzb3VyY2UKK2NvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kCitkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLiAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKK3RyYW5zZmVycmluZyBhIGNvcHkuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZgoraXQsIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBoCisxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0CisgICAgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworICAgIGIpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQKKyAgICBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGVpdGhlcgorICAgIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsCisgICAgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChleGNlcHQKKyAgICB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwKKyAgICB0aGlyZCBwYXJ0aWVzLCBhdCB5b3VyIG9wdGlvbikuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4KKyAgICBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaCBpbnRlcmFjdGl2ZSB1c2UKKyAgICBpbiB0aGUgc2ltcGxlc3QgYW5kIG1vc3QgdXN1YWwgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZQorICAgIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEKKyAgICB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGVzZQorICAgIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIEdlbmVyYWwKKyAgICBQdWJsaWMgTGljZW5zZS4KKworICAgIGQpIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhCisgICAgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbgorICAgIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworTWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIGluZGVwZW5kZW50IHdvcmsgd2l0aCB0aGUgUHJvZ3JhbSAob3IgaXRzCitkZXJpdmF0aXZlKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZwordGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoZXNlIHRlcm1zLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YKK2l0LCB1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGIpIGFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IGZyZWUgKGV4Y2VwdCBmb3IgYSBub21pbmFsIGNoYXJnZQorICAgIGZvciB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24pIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBjKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHdoZXJlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSBhbG9uZS4pCisKK1NvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcKK21vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnM7IGJ1dCwgYXMgYSBzcGVjaWFsCitleGNlcHRpb24sIGl0IG5lZWQgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgd2hpY2ggYXJlIHN0YW5kYXJkCitsaWJyYXJpZXMgdGhhdCBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUKK2ZpbGUgcnVucywgb3IgZm9yIHN0YW5kYXJkIGhlYWRlciBmaWxlcyBvciBkZWZpbml0aW9ucyBmaWxlcyB0aGF0CithY2NvbXBhbnkgdGhhdCBvcGVyYXRpbmcgc3lzdGVtLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciB0aGUKK1Byb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyCit0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB0byB1c2UKK3RoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQKK2NvcGllcywgb3IgcmlnaHRzIHRvIHVzZSBjb3BpZXMsIGZyb20geW91IHVuZGVyIHRoaXMgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzCityZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIEJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSkgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UgdG8gZG8gc28sCithbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbAorbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0byB0aGVzZQordGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZQorcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKworICA3LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhlIGxpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDguIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgOS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEwLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICBBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIGh1bWFuaXR5LCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlCit0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdCB0bworYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkKK3RoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW1gcyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDE5eXkgIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAxLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgMTl4eCBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3YC4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGNgIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHdgIGFuZCBgc2hvdyBjYCBzaG91bGQgc2hvdyB0aGUKK2FwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUKK2NvbW1hbmRzIHlvdSB1c2UgbWF5IGJlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3YCBhbmQgYHNob3cKK2NgOyB0aGV5IGNvdWxkIGV2ZW4gYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIKK3Byb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIHByb2dyYW0gYEdub21vdmlzaW9uYCAoYSBwcm9ncmFtIHRvIGRpcmVjdCBjb21waWxlcnMgdG8gbWFrZSBwYXNzZXMKKyAgYXQgYXNzZW1ibGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXRgcyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTItd2l0aC1iaXNvbi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzNDI3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLXdpdGgtYmlzb24tZXhjZXB0aW9uCkBAIC0wLDAgKzEsNyBAQAorCitpbnNlcnQgR1BMIHYyIHRleHQgaGVyZQorCitCaXNvbiBFeGNlcHRpb24KK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucyBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuYHQgaXRzZWxmIGEgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YgYXMgYSBwYXJzZXIgc2tlbGV0b24uIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0aGUgcmVzdWx0aW5nIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2l0aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbiB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y1YWJiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAKQEAgLTAsMCArMSwxMzIgQEAKKworR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4gKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKK0Fsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnNgIHJlcHV0YXRpb25zLgorCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtIHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmVgcyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbWBzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKK2EpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCitiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKzcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKK05PIFdBUlJBTlRZCisKKzExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW1gcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeXl5eSAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2FzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCitvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCitHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKK0dub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMKK3R5cGUgYHNob3cgd2AuICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUKK3RvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgY2AgCitmb3IgZGV0YWlscy4KK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgd2AgYW5kIGBzaG93IGNgIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHdgIGFuZCBgc2hvdyBjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0CitpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbSBgR25vbW92aXNpb25gCisod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiAKK2J5IEphbWVzIEhhY2tlci4KKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGRlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDE3IEBACisKK2luc2VydCBHUEwgdjIgdGV4dCBoZXJlCisKK0dDQyBMaW5raW5nIEV4Y2VwdGlvbgorSW4gYWRkaXRpb24gdG8gdGhlIHBlcm1pc3Npb25zIGluIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMgeW91IHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGxpbmsgdGhlIGNvbXBpbGVkIHZlcnNpb24KK29mIHRoaXMgZmlsZSBpbnRvIGNvbWJpbmF0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zLCBhbmQgdG8gZGlzdHJpYnV0ZSB0aG9zZQorY29tYmluYXRpb25zIHdpdGhvdXQgYW55IHJlc3RyaWN0aW9uIGNvbWluZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBmaWxlLiAoVGhlCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucyBkbyBhcHBseSBpbiBvdGhlciByZXNwZWN0czsgZm9yIGV4YW1wbGUsCit0aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSwgYW5kIGRpc3RyaWJ1dGlvbiB3aGVuIG5vdCBsaW5rZWQgaW50byBhCitjb21iaW5lIGV4ZWN1dGFibGUuKQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLU9wZW5TU0wtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODZjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wLXdpdGgtT3BlblNTTC1leGNlcHRpb24KQEAgLTAsMCArMSwyODUgQEAKKworR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCitvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4gKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCitXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKK0Fsc28sIGZvciBlYWNoIGF1dGhvcmBzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsIGF1dGhvcnNgIHJlcHV0YXRpb25zLgorCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZSBwcm9ncmFtIHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmVgcyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbWBzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKK2EpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCitjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbiBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCitiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91ciBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzYCBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuCisKKzcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90IGV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKK05PIFdBUlJBTlRZCisKKzExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW1gcyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KK0NvcHlyaWdodCAoQykgeXl5eSAgbmFtZSBvZiBhdXRob3IKKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2FzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCitvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCitHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKK0dub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMKK3R5cGUgYHNob3cgd2AuICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUKK3RvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgY2AgCitmb3IgZGV0YWlscy4KK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgd2AgYW5kIGBzaG93IGNgIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkgYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHdgIGFuZCBgc2hvdyBjYDsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyIHNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCitZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0CitpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbSBgR25vbW92aXNpb25gCisod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiAKK2J5IEphbWVzIEhhY2tlci4KKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk4OQorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgorCisKK0luIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcgorZ2l2ZXMgcGVybWlzc2lvbiB0byBsaW5rIHRoZSBjb2RlIG9mIHRoaXMgcHJvZ3JhbSB3aXRoCithbnkgdmVyc2lvbiBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5IHdoaWNoIGlzIGRpc3RyaWJ1dGVkCit1bmRlciBhIGxpY2Vuc2UgaWRlbnRpY2FsIHRvIHRoYXQgbGlzdGVkIGluIHRoZSBpbmNsdWRlZAorQ09QWUlORy5PcGVuU1NMIGZpbGUsIGFuZCBkaXN0cmlidXRlIGxpbmtlZCBjb21iaW5hdGlvbnMKK2luY2x1ZGluZyB0aGUgdHdvLiBZb3UgbXVzdCBvYmV5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW4gYWxsIHJlc3BlY3RzIGZvciBhbGwgb2YgdGhlIGNvZGUgdXNlZCBvdGhlcgordGhhbiBPcGVuU1NMLiBJZiB5b3UgbW9kaWZ5IHRoaXMgZmlsZSwgeW91IG1heSBleHRlbmQgdGhpcworZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgZmlsZSwgYnV0IHlvdSBhcmUgbm90CitvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlCit0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKworICBMSUNFTlNFIElTU1VFUworICA9PT09PT09PT09PT09PQorCisgIFRoZSBPcGVuU1NMIHRvb2xraXQgc3RheXMgdW5kZXIgYSBkdWFsIGxpY2Vuc2UsIGkuZS4gYm90aCB0aGUgY29uZGl0aW9ucyBvZgorICB0aGUgT3BlblNTTCBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgU1NMZWF5IGxpY2Vuc2UgYXBwbHkgdG8gdGhlIHRvb2xraXQuCisgIFNlZSBiZWxvdyBmb3IgdGhlIGFjdHVhbCBsaWNlbnNlIHRleHRzLiBBY3R1YWxseSBib3RoIGxpY2Vuc2VzIGFyZSBCU0Qtc3R5bGUKKyAgT3BlbiBTb3VyY2UgbGljZW5zZXMuIEluIGNhc2Ugb2YgYW55IGxpY2Vuc2UgaXNzdWVzIHJlbGF0ZWQgdG8gT3BlblNTTAorICBwbGVhc2UgY29udGFjdCBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisKKyAgT3BlblNTTCBMaWNlbnNlCisgIC0tLS0tLS0tLS0tLS0tLQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyYWFkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24KQEAgLTAsMCArMSw2IEBACisKK2luc2VydCBHUEwgdjIgbGljZW5zZSB0ZXh0IGhlcmUKKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHJlc3BlY3RpdmUgQXV0b2NvbmYgTWFjcm9gcyBjb3B5cmlnaHQgb3duZXIgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZSBjb25maWd1cmUgc2NyaXB0cyB0aGF0IGFyZSB0aGUgb3V0cHV0IG9mIEF1dG9jb25mIHdoZW4gcHJvY2Vzc2luZyB0aGUgTWFjcm8uIFlvdSBuZWVkIG5vdCBmb2xsb3cgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB3aGVuIHVzaW5nICBvciAKK1RoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZSBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5IGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZCB2ZXJzaW9uIGFzIHdlbGwuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWNsYXNzcGF0aC1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZTljZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1jbGFzc3BhdGgtZXhjZXB0aW9uCkBAIC0wLDAgKzEsNyBAQAorCitpbnNlcnQgR1BMIHYyIGxpY2Vuc2UgdGV4dCBoZXJlCisKK0xpbmtpbmcgdGhpcyBsaWJyYXJ5IHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBvdGhlciBtb2R1bGVzIGlzIG1ha2luZyBhIGNvbWJpbmVkIHdvcmsgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiBUaHVzLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNvdmVyIHRoZSB3aG9sZSBjb21iaW5hdGlvbi4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdSBwZXJtaXNzaW9uIHRvIGxpbmsgdGhpcyBsaWJyYXJ5IHdpdGggaW5kZXBlbmRlbnQgbW9kdWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGxpY2Vuc2UgdGVybXMgb2YgdGhlc2UgaW5kZXBlbmRlbnQgbW9kdWxlcywgYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQsIGZvciBlYWNoIGxpbmtlZCBpbmRlcGVuZGVudCBtb2R1bGUsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBvZiB0aGF0IG1vZHVsZS4gQW4gaW5kZXBlbmRlbnQgbW9kdWxlIGlzIGEgbW9kdWxlIHdoaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiBJZiB5b3UgbW9kaWZ5IHRoaXMgbGlicmFyeSwgeW91IG1heSBleHRlbmQgdGhpcyBleGNlcHRpb24gdG8geW91ciB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZSB0aGlzIGV4Y2VwdGlvbiBzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjAtd2l0aC1mb250LWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmI0MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMTggQEAKKworaW5zZXJ0IEdQTCB2MiB0ZXh0IGhlcmUKKworRm9udCBFeGNlcHRpb24KK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIHlvdSBjcmVhdGUgYSBkb2N1bWVudCB3aGljaCB1c2VzIHRoaXMgZm9udCwgYW5kCitlbWJlZCB0aGlzIGZvbnQgb3IgdW5hbHRlcmVkIHBvcnRpb25zIG9mIHRoaXMgZm9udCBpbnRvIHRoZSBkb2N1bWVudCwgdGhpcyBmb250Citkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBkb2N1bWVudCB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgaW52YWxpZGF0ZSBhbnkgb3RoZXIKK3JlYXNvbnMgd2h5IHRoZSBkb2N1bWVudCBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSWYKK3lvdSBtb2RpZnkgdGhpcyBmb250LCB5b3UgbWF5IGV4dGVuZCB0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlCitmb250LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gZG8gc28sIGRlbGV0ZQordGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciB2ZXJzaW9uLgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2NjVhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAKQEAgLTAsMCArMSwyMjUgQEAKK0dOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKK0NvcHlyaWdodCDCqSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCitQcmVhbWJsZQorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvciBzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlIHNvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiBXZSwgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdXNlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0byBhbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gWW91IGNhbiBhcHBseSBpdCB0byB5b3VyIHByb2dyYW1zLCB0b28uCisKK1doZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdSB0aGVzZSByaWdodHMgb3IgYXNraW5nIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gVGhlcmVmb3JlLCB5b3UgaGF2ZSBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdDogcmVzcG9uc2liaWxpdGllcyB0byByZXNwZWN0IHRoZSBmcmVlZG9tIG9mIG90aGVycy4KKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBwYXNzIG9uIHRvIHRoZSByZWNpcGllbnRzIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZSBnaXZpbmcgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IGl0LgorCitGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlIHNvZnR3YXJlLiBGb3IgYm90aCB1c2VycycgYW5kIGF1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMgY2hhbmdlZCwgc28gdGhhdCB0aGVpciBwcm9ibGVtcyB3aWxsIG5vdCBiZSBhdHRyaWJ1dGVkIGVycm9uZW91c2x5IHRvIGF1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKK1NvbWUgZGV2aWNlcyBhcmUgZGVzaWduZWQgdG8gZGVueSB1c2VycyBhY2Nlc3MgdG8gaW5zdGFsbCBvciBydW4gbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyIGNhbiBkbyBzby4gVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YgcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiBUaGUgc3lzdGVtYXRpYyBwYXR0ZXJuIG9mIHN1Y2ggYWJ1c2Ugb2NjdXJzIGluIHRoZSBhcmVhIG9mIHByb2R1Y3RzIGZvciBpbmRpdmlkdWFscyB0byB1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0YWJsZS4gVGhlcmVmb3JlLCB3ZSBoYXZlIGRlc2lnbmVkIHRoaXMgdmVyc2lvbiBvZiB0aGUgR1BMIHRvIHByb2hpYml0IHRoZSBwcmFjdGljZSBmb3IgdGhvc2UgcHJvZHVjdHMuIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZSBzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCisKK0ZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIFN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZiBzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0byBhdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQgbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdCBwYXRlbnRzIGNhbm5vdCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgcHJvZ3JhbSBub24tZnJlZS4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KK1RFUk1TIEFORCBDT05ESVRJT05TCiswLiBEZWZpbml0aW9ucy4KKwor4oCcVGhpcyBMaWNlbnNl4oCdIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCivigJxDb3B5cmlnaHTigJ0gYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2Ygd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKwor4oCcVGhlIFByb2dyYW3igJ0gcmVmZXJzIHRvIGFueSBjb3B5cmlnaHRhYmxlIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyDigJx5b3XigJ0uIOKAnExpY2Vuc2Vlc+KAnSBhbmQg4oCccmVjaXBpZW50c+KAnSBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworVG8g4oCcbW9kaWZ54oCdIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsgaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuIGV4YWN0IGNvcHkuIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSDigJxtb2RpZmllZCB2ZXJzaW9u4oCdIG9mIHRoZSBlYXJsaWVyIHdvcmsgb3IgYSB3b3JrIOKAnGJhc2VkIG9u4oCdIHRoZSBlYXJsaWVyIHdvcmsuCisKK0Eg4oCcY292ZXJlZCB3b3Jr4oCdIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworVG8g4oCccHJvcGFnYXRl4oCdIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQgcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvciBpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEgY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLCBkaXN0cmlidXRpb24gKHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24pLCBtYWtpbmcgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKK1RvIOKAnGNvbnZleeKAnSBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyIHBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoIGEgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCisKK0FuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzIOKAnEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXPigJ0gdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZSBmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikgdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZSB3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIElmIHRoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhIG1lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisxLiBTb3VyY2UgQ29kZS4KKworVGhlIOKAnHNvdXJjZSBjb2Rl4oCdIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4g4oCcT2JqZWN0IGNvZGXigJ0gbWVhbnMgYW55IG5vbi1zb3VyY2UgZm9ybSBvZiBhIHdvcmsuCisKK0Eg4oCcU3RhbmRhcmQgSW50ZXJmYWNl4oCdIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbCBzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mIGludGVyZmFjZXMgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIG9uZSB0aGF0IGlzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCitUaGUg4oCcU3lzdGVtIExpYnJhcmllc+KAnSBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIgdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YgcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvciBDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQgTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uIEEg4oCcTWFqb3IgQ29tcG9uZW504oCdLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudCAoa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtIChpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvIHByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCitUaGUg4oCcQ29ycmVzcG9uZGluZyBTb3VyY2XigJ0gZm9yIGEgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlIHdvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8gY29udHJvbCB0aG9zZSBhY3Rpdml0aWVzLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MgU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZSBwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW5jbHVkZXMgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5IGxpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLCBzdWNoIGFzIGJ5IGludGltYXRlIGRhdGEgY29tbXVuaWNhdGlvbiBvciBjb250cm9sIGZsb3cgYmV0d2VlbiB0aG9zZSBzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKK1RoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgdXNlcnMgY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4KKworVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0IHNhbWUgd29yay4KKzIuIEJhc2ljIFBlcm1pc3Npb25zLgorCitBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZiBjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZCBjb25kaXRpb25zIGFyZSBtZXQuIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBydW4gdGhlIHVubW9kaWZpZWQgUHJvZ3JhbS4gVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYSBjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMgY29udGVudCwgY29uc3RpdHV0ZXMgYSBjb3ZlcmVkIHdvcmsuIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91ciByaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdCBjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucyBpbiBmb3JjZS4gWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91IHdpdGggZmFjaWxpdGllcyBmb3IgcnVubmluZyB0aG9zZSB3b3JrcywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90IGNvbnRyb2wgY29weXJpZ2h0LiBUaG9zZSB0aHVzIG1ha2luZyBvciBydW5uaW5nIHRoZSBjb3ZlcmVkIHdvcmtzIGZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24gYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mIHlvdXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgb3V0c2lkZSB0aGVpciByZWxhdGlvbnNoaXAgd2l0aCB5b3UuCisKK0NvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyIHRoZSBjb25kaXRpb25zIHN0YXRlZCBiZWxvdy4gU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwIG1ha2VzIGl0IHVubmVjZXNzYXJ5LgorMy4gUHJvdGVjdGluZyBVc2VycycgTGVnYWwgUmlnaHRzIEZyb20gQW50aS1DaXJjdW12ZW50aW9uIExhdy4KKworTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmUgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGZ1bGZpbGxpbmcgb2JsaWdhdGlvbnMgdW5kZXIgYXJ0aWNsZSAxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3Igc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaCBtZWFzdXJlcy4KKworV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdG8gdGhlIGV4dGVudCBzdWNoIGNpcmN1bXZlbnRpb24gaXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBhcyBhIG1lYW5zIG9mIGVuZm9yY2luZywgYWdhaW5zdCB0aGUgd29yaydzIHVzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorNC4gQ29udmV5aW5nIFZlcmJhdGltIENvcGllcy4KKworWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55IG5vbi1wZXJtaXNzaXZlIHRlcm1zIGFkZGVkIGluIGFjY29yZCB3aXRoIHNlY3Rpb24gNyBhcHBseSB0byB0aGUgY29kZTsga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwgcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwgYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKzUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCisKK1lvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8gcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICAqIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZCBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisgICAgKiBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBjb25kaXRpb25zIGFkZGVkIHVuZGVyIHNlY3Rpb24gNy4gVGhpcyByZXF1aXJlbWVudCBtb2RpZmllcyB0aGUgcmVxdWlyZW1lbnQgaW4gc2VjdGlvbiA0IHRvIOKAnGtlZXAgaW50YWN0IGFsbCBub3RpY2Vz4oCdLgorICAgICogYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuIFRoaXMgTGljZW5zZSB3aWxsIHRoZXJlZm9yZSBhcHBseSwgYWxvbmcgd2l0aCBhbnkgYXBwbGljYWJsZSBzZWN0aW9uIDcgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuIFRoaXMgTGljZW5zZSBnaXZlcyBubyBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90IGludmFsaWRhdGUgc3VjaCBwZXJtaXNzaW9uIGlmIHlvdSBoYXZlIHNlcGFyYXRlbHkgcmVjZWl2ZWQgaXQuCisgICAgKiBkKSBJZiB0aGUgd29yayBoYXMgaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2VzLCBlYWNoIG11c3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIgd29yayBuZWVkIG5vdCBtYWtlIHRoZW0gZG8gc28uCisKK0EgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MsIHdoaWNoIGFyZSBub3QgYnkgdGhlaXIgbmF0dXJlIGV4dGVuc2lvbnMgb2YgdGhlIGNvdmVyZWQgd29yaywgYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwgaW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiDigJxhZ2dyZWdhdGXigJ0gaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90IHVzZWQgdG8gbGltaXQgdGhlIGFjY2VzcyBvciBsZWdhbCByaWdodHMgb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsgaW4gYW4gYWdncmVnYXRlIGRvZXMgbm90IGNhdXNlIHRoaXMgTGljZW5zZSB0byBhcHBseSB0byB0aGUgb3RoZXIgcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKzYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCitZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUgbWFjaGluZS1yZWFkYWJsZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgICogYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdCAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmaXhlZCBvbiBhIGR1cmFibGUgcGh5c2ljYWwgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorICAgICogYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdCAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0IG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8gbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKyAgICAqIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIHdyaXR0ZW4gb2ZmZXIgdG8gcHJvdmlkZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UuIFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggc3Vic2VjdGlvbiA2Yi4KKyAgICAqIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlIChncmF0aXMgb3IgZm9yIGEgY2hhcmdlKSwgYW5kIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubyBmdXJ0aGVyIGNoYXJnZS4gWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gSWYgdGhlIHBsYWNlIHRvIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBtYXkgYmUgb24gYSBkaWZmZXJlbnQgc2VydmVyIChvcGVyYXRlZCBieSB5b3Ugb3IgYSB0aGlyZCBwYXJ0eSkgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSwgeW91IHJlbWFpbiBvYmxpZ2F0ZWQgdG8gZW5zdXJlIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KKyAgICAqIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGFyZSBiZWluZyBvZmZlcmVkIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBhdCBubyBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KKworQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkIGZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlIGluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KKworQSDigJxVc2VyIFByb2R1Y3TigJ0gaXMgZWl0aGVyICgxKSBhIOKAnGNvbnN1bWVyIHByb2R1Y3TigJ0sIHdoaWNoIG1lYW5zIGFueSB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LCBvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uIGludG8gYSBkd2VsbGluZy4gSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LCBkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gRm9yIGEgcGFydGljdWxhciBwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCDigJxub3JtYWxseSB1c2Vk4oCdIHJlZmVycyB0byBhIHR5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cyBvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlciBhY3R1YWxseSB1c2VzLCBvciBleHBlY3RzIG9yIGlzIGV4cGVjdGVkIHRvIHVzZSwgdGhlIHByb2R1Y3QuIEEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbCBjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudCB0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKwor4oCcSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9u4oCdIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywgcHJvY2VkdXJlcywgYXV0aG9yaXphdGlvbiBrZXlzLCBvciBvdGhlciBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBpbnN0YWxsIGFuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20gYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gVGhlIGluZm9ybWF0aW9uIG11c3Qgc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QgY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCisKK0lmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yIHNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZSBVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhIGZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uIEJ1dCB0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IGlmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsIG1vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMgYmVlbiBpbnN0YWxsZWQgaW4gUk9NKS4KKworVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSByZXF1aXJlbWVudCB0byBjb250aW51ZSB0byBwcm92aWRlIHN1cHBvcnQgc2VydmljZSwgd2FycmFudHksIG9yIHVwZGF0ZXMgZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IgdGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuIEFjY2VzcyB0byBhIG5ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kIGFkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZCBwcm90b2NvbHMgZm9yIGNvbW11bmljYXRpb24gYWNyb3NzIHRoZSBuZXR3b3JrLgorCitDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uIG11c3QgYmUgaW4gYSBmb3JtYXQgdGhhdCBpcyBwdWJsaWNseSBkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbiBzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IgdW5wYWNraW5nLCByZWFkaW5nIG9yIGNvcHlpbmcuCis3LiBBZGRpdGlvbmFsIFRlcm1zLgorCivigJxBZGRpdGlvbmFsIHBlcm1pc3Npb25z4oCdIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLiBBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsIGJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQgdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5IHVuZGVyIHRob3NlIHBlcm1pc3Npb25zLCBidXQgdGhlIGVudGlyZSBQcm9ncmFtIHJlbWFpbnMgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCitXaGVuIHlvdSBjb252ZXkgYSBjb3B5IG9mIGEgY292ZXJlZCB3b3JrLCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIHJlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZiBpdC4gKEFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbWF5IGJlIHdyaXR0ZW4gdG8gcmVxdWlyZSB0aGVpciBvd24gcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pIFlvdSBtYXkgcGxhY2UgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLCBmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKK05vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgorCisgICAgKiBhKSBEaXNjbGFpbWluZyB3YXJyYW50eSBvciBsaW1pdGluZyBsaWFiaWxpdHkgZGlmZmVyZW50bHkgZnJvbSB0aGUgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKyAgICAqIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvciBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCisgICAgKiBjKSBQcm9oaWJpdGluZyBtaXNyZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luIG9mIHRoYXQgbWF0ZXJpYWwsIG9yIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKyAgICAqIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IgYXV0aG9ycyBvZiB0aGUgbWF0ZXJpYWw7IG9yCisgICAgKiBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorICAgICogZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdCBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiBpdCkgd2l0aCBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBvZiBsaWFiaWxpdHkgdG8gdGhlIHJlY2lwaWVudCwgZm9yIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24gdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCitBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCDigJxmdXJ0aGVyIHJlc3RyaWN0aW9uc+KAnSB3aXRoaW4gdGhlIG1lYW5pbmcgb2Ygc2VjdGlvbiAxMC4gSWYgdGhlIFByb2dyYW0gYXMgeW91IHJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlciByZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMgYSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGJ1dCBwZXJtaXRzIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZyB1bmRlciB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcyBub3Qgc3Vydml2ZSBzdWNoIHJlbGljZW5zaW5nIG9yIGNvbnZleWluZy4KKworSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdSBtdXN0IHBsYWNlLCBpbiB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzLCBhIHN0YXRlbWVudCBvZiB0aGUgYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCisKK0FkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlIGZvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7IHRoZSBhYm92ZSByZXF1aXJlbWVudHMgYXBwbHkgZWl0aGVyIHdheS4KKzguIFRlcm1pbmF0aW9uLgorCitZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yIG1vZGlmeSBpdCBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkIHBhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpIHByb3Zpc2lvbmFsbHksIHVubGVzcyBhbmQgdW50aWwgdGhlIGNvcHlyaWdodCBob2xkZXIgZXhwbGljaXRseSBhbmQgZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0byA2MCBkYXlzIGFmdGVyIHRoZSBjZXNzYXRpb24uCisKK01vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZSByZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQgY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlciB5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworVGVybWluYXRpb24gb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBzZWN0aW9uIGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZS4gSWYgeW91ciByaWdodHMgaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgYW5kIG5vdCBwZXJtYW5lbnRseSByZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lIG1hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCis5LiBBY2NlcHRhbmNlIE5vdCBSZXF1aXJlZCBmb3IgSGF2aW5nIENvcGllcy4KKworWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yIHJ1biBhIGNvcHkgb2YgdGhlIFByb2dyYW0uIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yayBvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiB0byByZWNlaXZlIGEgY29weSBsaWtld2lzZSBkb2VzIG5vdCByZXF1aXJlIGFjY2VwdGFuY2UuIEhvd2V2ZXIsIG5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvciBtb2RpZnkgYW55IGNvdmVyZWQgd29yay4gVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBwcm9wYWdhdGluZyBhIGNvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKK0VhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kIHByb3BhZ2F0ZSB0aGF0IHdvcmssIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworQW4g4oCcZW50aXR5IHRyYW5zYWN0aW9u4oCdIGlzIGEgdHJhbnNhY3Rpb24gdHJhbnNmZXJyaW5nIGNvbnRyb2wgb2YgYW4gb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbiBvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gSWYgcHJvcGFnYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0IHRyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlciBsaWNlbnNlcyB0byB0aGUgd29yayB0aGUgcGFydHkncyBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCBoYWQgb3IgY291bGQgZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmIHRoZSBwcmVkZWNlc3NvciBoYXMgaXQgb3IgY2FuIGdldCBpdCB3aXRoIHJlYXNvbmFibGUgZWZmb3J0cy4KKworWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIG9yIGFmZmlybWVkIHVuZGVyIHRoaXMgTGljZW5zZS4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24gKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KKzExLiBQYXRlbnRzLgorCitBIOKAnGNvbnRyaWJ1dG9y4oCdIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcyBMaWNlbnNlIG9mIHRoZSBQcm9ncmFtIG9yIGEgd29yayBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBiYXNlZC4gVGhlIHdvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3Mg4oCcY29udHJpYnV0b3IgdmVyc2lvbuKAnS4KKworQSBjb250cmlidXRvcidzIOKAnGVzc2VudGlhbCBwYXRlbnQgY2xhaW1z4oCdIGFyZSBhbGwgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZCBieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sIGJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhIGNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCDigJxjb250cm9s4oCdIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudCBwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLgorCitFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kIHByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCisKK0luIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSDigJxwYXRlbnQgbGljZW5zZeKAnSBpcyBhbnkgZXhwcmVzcyBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQgKHN1Y2ggYXMgYW4gZXhwcmVzcyBwZXJtaXNzaW9uIHRvIHByYWN0aWNlIGEgcGF0ZW50IG9yIGNvdmVuYW50IG5vdCB0byBzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiBUbyDigJxncmFudOKAnSBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYSBwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQgYWdhaW5zdCB0aGUgcGFydHkuCisKK0lmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgaXMgbm90IGF2YWlsYWJsZSBmb3IgYW55b25lIHRvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEgcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywgdGhlbiB5b3UgbXVzdCBlaXRoZXIgKDEpIGNhdXNlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSB0byBiZSBzbyBhdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlIHBhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSwgdG8gZXh0ZW5kIHRoZSBwYXRlbnQgbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuIOKAnEtub3dpbmdseSByZWx5aW5n4oCdIG1lYW5zIHlvdSBoYXZlIGFjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZSBjb3ZlcmVkIHdvcmsgaW4gYSBjb3VudHJ5LCBvciB5b3VyIHJlY2lwaWVudCdzIHVzZSBvZiB0aGUgY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdCBjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCitJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yIGFycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEgY292ZXJlZCB3b3JrLCBhbmQgZ3JhbnQgYSBwYXRlbnQgbGljZW5zZSB0byBzb21lIG9mIHRoZSBwYXJ0aWVzIHJlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeSBvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlIHlvdSBncmFudCBpcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCitBIHBhdGVudCBsaWNlbnNlIGlzIOKAnGRpc2NyaW1pbmF0b3J54oCdIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluIHRoZSBzY29wZSBvZiBpdHMgY292ZXJhZ2UsIHByb2hpYml0cyB0aGUgZXhlcmNpc2Ugb2YsIG9yIGlzIGNvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgbm90IGNvbnZleSBhIGNvdmVyZWQgd29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudCB0byB0aGUgdGhpcmQgcGFydHkgYmFzZWQgb24gdGhlIGV4dGVudCBvZiB5b3VyIGFjdGl2aXR5IG9mIGNvbnZleWluZyB0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUgcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5IHBhdGVudCBsaWNlbnNlIChhKSBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBjb3ZlcmVkIHdvcmsgY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkgZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQgY29udGFpbiB0aGUgY292ZXJlZCB3b3JrLCB1bmxlc3MgeW91IGVudGVyZWQgaW50byB0aGF0IGFycmFuZ2VtZW50LCBvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgZXhjbHVkaW5nIG9yIGxpbWl0aW5nIGFueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5IG90aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKzEyLiBObyBTdXJyZW5kZXIgb2YgT3RoZXJzJyBGcmVlZG9tLgorCitJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGNvbnZleSBpdCBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UgdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5IHRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCisxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZSBwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUgY29tYmluZWQgd29yaywgYW5kIHRvIGNvbnZleSB0aGUgcmVzdWx0aW5nIHdvcmsuIFRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLCBidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gYXMgc3VjaC4KKzE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSDigJxvciBhbnkgbGF0ZXIgdmVyc2lvbuKAnSBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91IHRvIGNob29zZSB0aGF0IHZlcnNpb24gZm9yIHRoZSBQcm9ncmFtLgorCitMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBwZXJtaXNzaW9ucy4gSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkgYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYSBsYXRlciB2ZXJzaW9uLgorMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKK1RIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSDigJxBUyBJU+KAnSBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCitJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUyBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorMTcuIEludGVycHJldGF0aW9uIG9mIFNlY3Rpb25zIDE1IGFuZCAxNi4KKworSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkIGFib3ZlIGNhbm5vdCBiZSBnaXZlbiBsb2NhbCBsZWdhbCBlZmZlY3QgYWNjb3JkaW5nIHRvIHRoZWlyIHRlcm1zLCByZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMgYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBQcm9ncmFtLCB1bmxlc3MgYSB3YXJyYW50eSBvciBhc3N1bXB0aW9uIG9mIGxpYWJpbGl0eSBhY2NvbXBhbmllcyBhIGNvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCitIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdCBwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0IGZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCitUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gSXQgaXMgc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUg4oCcY29weXJpZ2h04oCdIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKyAgICBUaGlzIHByb2dyYW0gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcyBtaWdodCBiZSBkaWZmZXJlbnQ7IGZvciBhIEdVSSBpbnRlcmZhY2UsIHlvdSB3b3VsZCB1c2UgYW4g4oCcYWJvdXQgYm944oCdLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSDigJxjb3B5cmlnaHQgZGlzY2xhaW1lcuKAnSBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUgbGlicmFyeS4gSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gQnV0IGZpcnN0LCBwbGVhc2UgcmVhZCA8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzk2OGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24KQEAgLTAsMCArMSwyNyBAQAorCitpbnNlcnQgR1BMIHYzIHRleHQgaGVyZQorCitHQ0MgUlVOVElNRSBMSUJSQVJZIEVYQ0VQVElPTgorVmVyc2lvbiAzLjEsIDMxIE1hcmNoIDIwMDkKKworR2VuZXJhbCBpbmZvcm1hdGlvbjoKK2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9nY2MtZXhjZXB0aW9uLmh0bWwKK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KK1RoaXMgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gKCJFeGNlcHRpb24iKSBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4gSXQgYXBwbGllcyB0byBhIGdpdmVuIGZpbGUgKHRoZSAiUnVudGltZSBMaWJyYXJ5IikgdGhhdCBiZWFycyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIGZpbGUgc3RhdGluZyB0aGF0IHRoZSBmaWxlIGlzIGdvdmVybmVkIGJ5IEdQTHYzIGFsb25nIHdpdGggdGhpcyBFeGNlcHRpb24uCitXaGVuIHlvdSB1c2UgR0NDIHRvIGNvbXBpbGUgYSBwcm9ncmFtLCBHQ0MgbWF5IGNvbWJpbmUgcG9ydGlvbnMgb2YgY2VydGFpbiBHQ0MgaGVhZGVyIGZpbGVzIGFuZCBydW50aW1lIGxpYnJhcmllcyB3aXRoIHRoZSBjb21waWxlZCBwcm9ncmFtLiBUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBjb21waWxhdGlvbiBvZiBub24tR1BMIChpbmNsdWRpbmcgcHJvcHJpZXRhcnkpIHByb2dyYW1zIHRvIHVzZSwgaW4gdGhpcyB3YXksIHRoZSBoZWFkZXIgZmlsZXMgYW5kIHJ1bnRpbWUgbGlicmFyaWVzIGNvdmVyZWQgYnkgdGhpcyBFeGNlcHRpb24uCisKKzAuIERlZmluaXRpb25zLgorQSBmaWxlIGlzIGFuICJJbmRlcGVuZGVudCBNb2R1bGUiIGlmIGl0IGVpdGhlciByZXF1aXJlcyB0aGUgUnVudGltZSBMaWJyYXJ5IGZvciBleGVjdXRpb24gYWZ0ZXIgYSBDb21waWxhdGlvbiBQcm9jZXNzLCBvciBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBSdW50aW1lIExpYnJhcnksIGJ1dCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBSdW50aW1lIExpYnJhcnkuCisiR0NDIiBtZWFucyBhIHZlcnNpb24gb2YgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgZ292ZXJuZWQgYnkgdmVyc2lvbiAzIChvciBhIHNwZWNpZmllZCBsYXRlciB2ZXJzaW9uKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgd2l0aCB0aGUgb3B0aW9uIG9mIHVzaW5nIGFueSBzdWJzZXF1ZW50IHZlcnNpb25zIHB1Ymxpc2hlZCBieSB0aGUgRlNGLgorIkdQTC1jb21wYXRpYmxlIFNvZnR3YXJlIiBpcyBzb2Z0d2FyZSB3aG9zZSBjb25kaXRpb25zIG9mIHByb3BhZ2F0aW9uLCBtb2RpZmljYXRpb24gYW5kIHVzZSB3b3VsZCBwZXJtaXQgY29tYmluYXRpb24gd2l0aCBHQ0MgaW4gYWNjb3JkIHdpdGggdGhlIGxpY2Vuc2Ugb2YgR0NDLgorIlRhcmdldCBDb2RlIiByZWZlcnMgdG8gb3V0cHV0IGZyb20gYW55IGNvbXBpbGVyIGZvciBhIHJlYWwgb3IgdmlydHVhbCB0YXJnZXQgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZSwgaW4gZXhlY3V0YWJsZSBmb3JtIG9yIHN1aXRhYmxlIGZvciBpbnB1dCB0byBhbiBhc3NlbWJsZXIsIGxvYWRlciwgbGlua2VyIGFuZC9vciBleGVjdXRpb24gcGhhc2UuIE5vdHdpdGhzdGFuZGluZyB0aGF0LCBUYXJnZXQgQ29kZSBkb2VzIG5vdCBpbmNsdWRlIGRhdGEgaW4gYW55IGZvcm1hdCB0aGF0IGlzIHVzZWQgYXMgYSBjb21waWxlciBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24sIG9yIHVzZWQgZm9yIHByb2R1Y2luZyBhIGNvbXBpbGVyIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4KK1RoZSAiQ29tcGlsYXRpb24gUHJvY2VzcyIgdHJhbnNmb3JtcyBjb2RlIGVudGlyZWx5IHJlcHJlc2VudGVkIGluIG5vbi1pbnRlcm1lZGlhdGUgbGFuZ3VhZ2VzIGRlc2lnbmVkIGZvciBodW1hbi13cml0dGVuIGNvZGUsIGFuZC9vciBpbiBKYXZhIFZpcnR1YWwgTWFjaGluZSBieXRlIGNvZGUsIGludG8gVGFyZ2V0IENvZGUuIFRodXMsIGZvciBleGFtcGxlLCB1c2Ugb2Ygc291cmNlIGNvZGUgZ2VuZXJhdG9ycyBhbmQgcHJlcHJvY2Vzc29ycyBuZWVkIG5vdCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIENvbXBpbGF0aW9uIFByb2Nlc3MsIHNpbmNlIHRoZSBDb21waWxhdGlvbiBQcm9jZXNzIGNhbiBiZSB1bmRlcnN0b29kIGFzIHN0YXJ0aW5nIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgZ2VuZXJhdG9ycyBvciBwcmVwcm9jZXNzb3JzLgorQSBDb21waWxhdGlvbiBQcm9jZXNzIGlzICJFbGlnaWJsZSIgaWYgaXQgaXMgZG9uZSB1c2luZyBHQ0MsIGFsb25lIG9yIHdpdGggb3RoZXIgR1BMLWNvbXBhdGlibGUgc29mdHdhcmUsIG9yIGlmIGl0IGlzIGRvbmUgd2l0aG91dCB1c2luZyBhbnkgd29yayBiYXNlZCBvbiBHQ0MuIEZvciBleGFtcGxlLCB1c2luZyBub24tR1BMLWNvbXBhdGlibGUgU29mdHdhcmUgdG8gb3B0aW1pemUgYW55IEdDQyBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIHdvdWxkIG5vdCBxdWFsaWZ5IGFzIGFuIEVsaWdpYmxlIENvbXBpbGF0aW9uIFByb2Nlc3MuCisKKzEuIEdyYW50IG9mIEFkZGl0aW9uYWwgUGVybWlzc2lvbi4KK1lvdSBoYXZlIHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIGEgd29yayBvZiBUYXJnZXQgQ29kZSBmb3JtZWQgYnkgY29tYmluaW5nIHRoZSBSdW50aW1lIExpYnJhcnkgd2l0aCBJbmRlcGVuZGVudCBNb2R1bGVzLCBldmVuIGlmIHN1Y2ggcHJvcGFnYXRpb24gd291bGQgb3RoZXJ3aXNlIHZpb2xhdGUgdGhlIHRlcm1zIG9mIEdQTHYzLCBwcm92aWRlZCB0aGF0IGFsbCBUYXJnZXQgQ29kZSB3YXMgZ2VuZXJhdGVkIGJ5IEVsaWdpYmxlIENvbXBpbGF0aW9uIFByb2Nlc3Nlcy4gWW91IG1heSB0aGVuIGNvbnZleSBzdWNoIGEgY29tYmluYXRpb24gdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGljZW5zaW5nIG9mIHRoZSBJbmRlcGVuZGVudCBNb2R1bGVzLgorCisyLiBObyBXZWFrZW5pbmcgb2YgR0NDIENvcHlsZWZ0LgorVGhlIGF2YWlsYWJpbGl0eSBvZiB0aGlzIEV4Y2VwdGlvbiBkb2VzIG5vdCBpbXBseSBhbnkgZ2VuZXJhbCBwcmVzdW1wdGlvbiB0aGF0IHRoaXJkLXBhcnR5IHNvZnR3YXJlIGlzIHVuYWZmZWN0ZWQgYnkgdGhlIGNvcHlsZWZ0IHJlcXVpcmVtZW50cyBvZiB0aGUgbGljZW5zZSBvZiBHQ0MuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24gYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NmYwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMy4wLXdpdGgtYXV0b2NvbmYtZXhjZXB0aW9uCkBAIC0wLDAgKzEsMjggQEAKKworaW5zZXJ0IEdQTCB2MyB0ZXh0IGhlcmUKKworQVVUT0NPTkYgQ09ORklHVVJFIFNDUklQVCBFWENFUFRJT04KKworVmVyc2lvbiAzLjAsIDE4IEF1Z3VzdCAyMDA5CisKK0NvcHlyaWdodCAmIzE2OTsgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4gSXQgYXBwbGllcyB0byBhIGdpdmVuIGZpbGUgdGhhdCBiZWFycyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIGZpbGUgc3RhdGluZyB0aGF0IHRoZSBmaWxlIGlzIGdvdmVybmVkIGJ5IEdQTHYzIGFsb25nIHdpdGggdGhpcyBFeGNlcHRpb24uCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgRXhjZXB0aW9uIGlzIHRvIGFsbG93IGRpc3RyaWJ1dGlvbiBvZiBBdXRvY29uZmBzIHR5cGljYWwgb3V0cHV0IHVuZGVyIHRlcm1zIG9mIHRoZSByZWNpcGllbnRgcyBjaG9pY2UgKGluY2x1ZGluZyBwcm9wcmlldGFyeSkuCisKKzAuIERlZmluaXRpb25zLgorIkNvdmVyZWQgQ29kZSIgaXMgdGhlIHNvdXJjZSBvciBvYmplY3QgY29kZSBvZiBhIHZlcnNpb24gb2YgQXV0b2NvbmYgdGhhdCBpcyBhIGNvdmVyZWQgd29yayB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyJOb3JtYWxseSBDb3BpZWQgQ29kZSIgZm9yIGEgdmVyc2lvbiBvZiBBdXRvY29uZiBtZWFucyBhbGwgcGFydHMgb2YgaXRzIENvdmVyZWQgQ29kZSB3aGljaCB0aGF0IHZlcnNpb24gY2FuIGNvcHkgZnJvbSBpdHMgY29kZSAoaS5lLiwgbm90IGZyb20gaXRzIGlucHV0IGZpbGUpIGludG8gaXRzIG1pbmltYWxseSB2ZXJib3NlLCBub24tZGVidWdnaW5nIGFuZCBub24tdHJhY2luZyBvdXRwdXQuCisKKyJJbmVsaWdpYmxlIENvZGUiIGlzIENvdmVyZWQgQ29kZSB0aGF0IGlzIG5vdCBOb3JtYWxseSBDb3BpZWQgQ29kZS4KKworMS4gR3JhbnQgb2YgQWRkaXRpb25hbCBQZXJtaXNzaW9uLgorWW91IGhhdmUgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3V0cHV0IG9mIEF1dG9jb25mLCBldmVuIGlmIHN1Y2ggcHJvcGFnYXRpb24gd291bGQgb3RoZXJ3aXNlIHZpb2xhdGUgdGhlIHRlcm1zIG9mIEdQTHYzLiBIb3dldmVyLCBpZiBieSBtb2RpZnlpbmcgQXV0b2NvbmYgeW91IGNhdXNlIGFueSBJbmVsaWdpYmxlIENvZGUgb2YgdGhlIHZlcnNpb24geW91IHJlY2VpdmVkIHRvIGJlY29tZSBOb3JtYWxseSBDb3BpZWQgQ29kZSBvZiB5b3VyIG1vZGlmaWVkIHZlcnNpb24sIHRoZW4geW91IHZvaWQgdGhpcyBFeGNlcHRpb24gZm9yIHRoZSByZXN1bHRpbmcgY292ZXJlZCB3b3JrLiBJZiB5b3UgY29udmV5IHRoYXQgcmVzdWx0aW5nIGNvdmVyZWQgd29yaywgeW91IG11c3QgcmVtb3ZlIHRoaXMgRXhjZXB0aW9uIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc2Vjb25kIHBhcmFncmFwaCBvZiBTZWN0aW9uIDcgb2YgR1BMdjMuCisKKzIuIE5vIFdlYWtlbmluZyBvZiBBdXRvY29uZiBDb3B5bGVmdC4KK1RoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwgcHJlc3VtcHRpb24gdGhhdCB0aGlyZC1wYXJ0eSBzb2Z0d2FyZSBpcyB1bmFmZmVjdGVkIGJ5IHRoZSBjb3B5bGVmdCByZXF1aXJlbWVudHMgb2YgdGhlIGxpY2Vuc2Ugb2YgQXV0b2NvbmYuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0hQTkQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5ECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGJiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9IUE5ECkBAIC0wLDAgKzEsMTEgQEAKKworSGlzdG9yaWNhbCBQZXJtaXNzaW9uIE5vdGljZSBhbmQgRGlzY2xhaW1lcgorCis8Y29weXJpZ2h0IG5vdGljZT4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzWyxdIFthbmRdIHRoYXQgYm90aCBbdGhhdF0gW3RoZV0gY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uWywgYW5kIHRoYXQgdGhlIG5hbWUgW29mXSA8Y29weXJpZ2h0IGhvbGRlcj4gW29yIDxyZWxhdGVkIGVudGl0aWVzPl0gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb25dLiBbPGNvcHlyaWdodCBob2xkZXI+IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuXQorCitbPGNvcHlyaWdodCBob2xkZXI+IERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1NbLF1bLl0gSU4gTk8gRVZFTlQgU0hBTEwgPGNvcHlyaWdodCBob2xkZXI+IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5dCisKKy0tLQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JQ1UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5YjZmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lDVQpAQCAtMCwwICsxLDEzIEBACitDT1BZUklHSFQgQU5EIFBFUk1JU1NJT04gTk9USUNFCisKK0NvcHlyaWdodCAoYykgMTk5NS0yMDEyIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kIG90aGVycworCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgSE9MREVSUyBJTkNMVURFRCBJTiBUSElTIE5PVElDRSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworQWxsIHRyYWRlbWFya3MgYW5kIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBtZW50aW9uZWQgaGVyZWluIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuIApkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjViMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEEKQEAgLTAsMCArMSw5NSBAQAorCitJUEEgRm9udCBMaWNlbnNlIEFncmVlbWVudCB2MS4wIAorIAorCitUaGUgTGljZW5zb3IgcHJvdmlkZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gKGFzIGRlZmluZWQgaW4gQXJ0aWNsZSAxIGJlbG93KSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFncmVlbWVudCAoIkFncmVlbWVudCIpLiAgQW55IHVzZSwgcmVwcm9kdWN0aW9uIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgb3IgYW55IGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBieSBhIFJlY2lwaWVudCAoYXMgZGVmaW5lZCBpbiBBcnRpY2xlIDEgYmVsb3cpIGNvbnN0aXR1dGVzIHRoZSBSZWNpcGllbnRgcyBhY2NlcHRhbmNlIG9mIHRoaXMgQWdyZWVtZW50LgorCisKK0FydGljbGUgMSAoRGVmaW5pdGlvbnMpCisKKzEuICAgICAgICAgIkRpZ2l0YWwgRm9udCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgY29tcHV0ZXIgcHJvZ3JhbSBjb250YWluaW5nLCBvciB1c2VkIHRvIHJlbmRlciBvciBkaXNwbGF5IGZvbnRzLgorCisyLiAgICAgICAgICJMaWNlbnNlZCBQcm9ncmFtIiBzaGFsbCBtZWFuIGEgRGlnaXRhbCBGb250IFByb2dyYW0gbGljZW5zZWQgYnkgdGhlIExpY2Vuc29yIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorCiszLiAgICAgICAgICJEZXJpdmVkIFByb2dyYW0iIHNoYWxsIG1lYW4gYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIGEgbW9kaWZpY2F0aW9uLCBhZGRpdGlvbiwgZGVsZXRpb24sIHJlcGxhY2VtZW50IG9yIGFueSBvdGhlciBhZGFwdGF0aW9uIHRvIG9yIG9mIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0sIGFuZCBpbmNsdWRlcyBhIGNhc2Ugd2hlcmUgYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBuZXdseSBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgZm9udCBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgRW1iZWRkZWQgRm9udHMgZnJvbSBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIG9mIHRoZSByZXRyaWV2ZWQgZm9udCBpbmZvcm1hdGlvbi4gCisKKzQuICAgICAgICAgIkRpZ2l0YWwgQ29udGVudCIgc2hhbGwgbWVhbiBwcm9kdWN0cyBwcm92aWRlZCB0byBlbmQgdXNlcnMgaW4gdGhlIGZvcm0gb2YgZGlnaXRhbCBkYXRhLCBpbmNsdWRpbmcgdmlkZW8gY29udGVudCwgbW90aW9uIGFuZC9vciBzdGlsbCBwaWN0dXJlcywgVFYgcHJvZ3JhbXMgb3Igb3RoZXIgYnJvYWRjYXN0aW5nIGNvbnRlbnQgYW5kIHByb2R1Y3RzIGNvbnNpc3Rpbmcgb2YgY2hhcmFjdGVyIHRleHQsIHBpY3R1cmVzLCBwaG90b2dyYXBoaWMgaW1hZ2VzLCBncmFwaGljIHN5bWJvbHMgYW5kL29yIHRoZSBsaWtlLgorCis1LiAgICAgICAgICJEaWdpdGFsIERvY3VtZW50IEZpbGUiIHNoYWxsIG1lYW4gYSBQREYgZmlsZSBvciBvdGhlciBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBieSB2YXJpb3VzIHNvZnR3YXJlIHByb2dyYW1zIGluIHdoaWNoIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYmVjb21lcyBlbWJlZGRlZCBvciBjb250YWluZWQgaW4gdGhlIGZpbGUgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSBmb250ICgiRW1iZWRkZWQgRm9udHMiKS4gIEVtYmVkZGVkIEZvbnRzIGFyZSB1c2VkIG9ubHkgaW4gdGhlIGRpc3BsYXkgb2YgY2hhcmFjdGVycyBpbiB0aGUgcGFydGljdWxhciBEaWdpdGFsIERvY3VtZW50IEZpbGUgd2l0aGluIHdoaWNoIHRoZXkgYXJlIGVtYmVkZGVkLCBhbmQgc2hhbGwgYmUgZGlzdGluZ3Vpc2hlZCBmcm9tIHRob3NlIGluIGFueSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSwgd2hpY2ggbWF5IGJlIHVzZWQgZm9yIGRpc3BsYXkgb2YgY2hhcmFjdGVycyBvdXRzaWRlIHRoYXQgcGFydGljdWxhciBEaWdpdGFsIERvY3VtZW50IEZpbGUuCisKKzYuICAgICAgICAgIkNvbXB1dGVyIiBzaGFsbCBpbmNsdWRlIGEgc2VydmVyIGluIHRoaXMgQWdyZWVtZW50LgorCis3LiAgICAgICAgICJSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiIgc2hhbGwgbWVhbiByZXByb2R1Y3Rpb24sIHRyYW5zZmVyLCBkaXN0cmlidXRpb24sIGxlYXNlLCBwdWJsaWMgdHJhbnNtaXNzaW9uLCBwcmVzZW50YXRpb24sIGV4aGliaXRpb24sIGFkYXB0YXRpb24gYW5kIGFueSBvdGhlciBleHBsb2l0YXRpb24uCisKKzguICAgICAgICAgIlJlY2lwaWVudCIgc2hhbGwgbWVhbiBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgb25lIHRoYXQgcmVjZWl2ZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gZnJvbSBhIFJlY2lwaWVudC4KKworIAorCitBcnRpY2xlIDIgKEdyYW50IG9mIExpY2Vuc2UpCisKK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIFJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGluIGFueSBhbmQgYWxsIGNvdW50cmllcyBpbiBhY2NvcmRhbmNlIHdpdGggZWFjaCBvZiB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuIEhvd2V2ZXIsIGFueSBhbmQgYWxsIHJpZ2h0cyB1bmRlcmx5aW5nIGluIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHNoYWxsIGJlIGhlbGQgYnkgdGhlIExpY2Vuc29yLiBJbiBubyBzZW5zZSBpcyB0aGlzIEFncmVlbWVudCBpbnRlbmRlZCB0byB0cmFuc2ZlciBhbnkgcmlnaHQgcmVsYXRpbmcgdG8gdGhlIExpY2Vuc2VkIFByb2dyYW0gaGVsZCBieSB0aGUgTGljZW5zb3IgZXhjZXB0IGFzIHNwZWNpZmljYWxseSBzZXQgZm9ydGggaGVyZWluIG9yIGFueSByaWdodCByZWxhdGluZyB0byBhbnkgdHJhZGVtYXJrLCB0cmFkZSBuYW1lLCBvciBzZXJ2aWNlIG1hcmsgdG8gdGhlIFJlY2lwaWVudC4KKworIAorCisxLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IGluc3RhbGwgdGhlIExpY2Vuc2VkIFByb2dyYW0gb24gYW55IG51bWJlciBvZiBDb21wdXRlcnMgYW5kIHVzZSB0aGUgc2FtZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCisyLiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBpbiBwcmludGVkIG1hdGVyaWFscyBvciBpbiBEaWdpdGFsIENvbnRlbnQgYXMgYW4gZXhwcmVzc2lvbiBvZiBjaGFyYWN0ZXIgdGV4dHMgb3IgdGhlIGxpa2UuCisKKzMuICAgICAgICAgVGhlIFJlY2lwaWVudCBtYXkgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgcHJpbnRlZCBtYXRlcmlhbHMgYW5kIERpZ2l0YWwgQ29udGVudCBjcmVhdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYW5kIGluIGFueSBmb3JtIG9mIG1lZGlhIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYnJvYWRjYXN0aW5nLCBjb21tdW5pY2F0aW9uIGFuZCB2YXJpb3VzIHJlY29yZGluZyBtZWRpYS4KKworNC4gICAgICAgICBJZiBhbnkgUmVjaXBpZW50IGV4dHJhY3RzIEVtYmVkZGVkIEZvbnRzIGZyb20gYSBEaWdpdGFsIERvY3VtZW50IEZpbGUgdG8gY3JlYXRlIGEgRGVyaXZlZCBQcm9ncmFtLCBzdWNoIERlcml2ZWQgUHJvZ3JhbSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudC4gIAorCis1LiAgICAgICAgIElmIGFueSBSZWNpcGllbnQgcGVyZm9ybXMgUmVwcm9kdWN0aW9uIG9yIE90aGVyIEV4cGxvaXRhdGlvbiBvZiBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSBpbiB3aGljaCBFbWJlZGRlZCBGb250cyBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcmUgdXNlZCBvbmx5IGZvciByZW5kZXJpbmcgdGhlIERpZ2l0YWwgQ29udGVudCB3aXRoaW4gc3VjaCBEaWdpdGFsIERvY3VtZW50IEZpbGUgdGhlbiBzdWNoIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIGZ1cnRoZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gcmVsYXRpb24gdG8gc3VjaCBhY3Rpb25zLgorCis2LiAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IHJlcHJvZHVjZSB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcyBpcyB3aXRob3V0IG1vZGlmaWNhdGlvbiBhbmQgdHJhbnNmZXIgc3VjaCBjb3BpZXMsIHB1YmxpY2x5IHRyYW5zbWl0IG9yIG90aGVyd2lzZSByZWRpc3RyaWJ1dGUgdGhlIExpY2Vuc2VkIFByb2dyYW0gdG8gYSB0aGlyZCBwYXJ0eSBmb3IgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyAoIlJlZGlzdHJpYnV0ZSIpLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIEFydGljbGUgMyBQYXJhZ3JhcGggMi4KKworNy4gICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBjcmVhdGUsIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBSZWRpc3RyaWJ1dGUgYSBEZXJpdmVkIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIHN0YXRlZCBhYm92ZSBmb3IgdGhlIExpY2Vuc2VkIFByb2dyYW06IHByb3ZpZGVkLCB0aGF0IHRoZSBSZWNpcGllbnQgc2hhbGwgZm9sbG93IHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMgUGFyYWdyYXBoIDEgd2hlbiBSZWRpc3RyaWJ1dGluZyB0aGUgRGVyaXZlZCBQcm9ncmFtLiAKKworCitBcnRpY2xlIDMgKFJlc3RyaWN0aW9uKQorCitUaGUgbGljZW5zZSBncmFudGVkIGluIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisKKzEuICAgICAgICAgSWYgYSBEZXJpdmVkIFByb2dyYW0gaXMgUmVkaXN0cmlidXRlZCBwdXJzdWFudCB0byBQYXJhZ3JhcGggNCBhbmQgNyBvZiB0aGUgcHJlY2VkaW5nIEFydGljbGUsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCA6CisKKygxKSAgICAgICAgICAgICAgICBUaGUgZm9sbG93aW5nIG11c3QgYmUgYWxzbyBSZWRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggdGhlIERlcml2ZWQgUHJvZ3JhbSwgb3IgYmUgbWFkZSBhdmFpbGFibGUgb25saW5lIG9yIGJ5IG1lYW5zIG9mIG1haWxpbmcgbWVjaGFuaXNtcyBpbiBleGNoYW5nZSBmb3IgYSBjb3N0IHdoaWNoIGRvZXMgbm90IGV4Y2VlZCB0aGUgdG90YWwgY29zdHMgb2YgcG9zdGFnZSwgc3RvcmFnZSBtZWRpdW0gYW5kIGhhbmRsaW5nIGZlZXM6CisKKyhhKSAgICBhIGNvcHkgb2YgdGhlIERlcml2ZWQgUHJvZ3JhbTsgYW5kCisKKyhiKSAgICBhbnkgYWRkaXRpb25hbCBmaWxlIGNyZWF0ZWQgYnkgdGhlIGZvbnQgZGV2ZWxvcGluZyBwcm9ncmFtIGluIHRoZSBjb3Vyc2Ugb2YgY3JlYXRpbmcgdGhlIERlcml2ZWQgUHJvZ3JhbSB0aGF0IGNhbiBiZSB1c2VkIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbiBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtLCBpZiBhbnkuCisKKygyKSAgICAgICAgICAgICAgICBJdCBpcyByZXF1aXJlZCB0byBhbHNvIFJlZGlzdHJpYnV0ZSBtZWFucyB0byBlbmFibGUgcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtIHRvIHJlcGxhY2UgdGhlIERlcml2ZWQgUHJvZ3JhbSB3aXRoIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZpcnN0IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSAodGhlICJPcmlnaW5hbCBQcm9ncmFtIikuICBTdWNoIG1lYW5zIG1heSBiZSB0byBwcm92aWRlIGEgZGlmZmVyZW5jZSBmaWxlIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0sIG9yIGluc3RydWN0aW9ucyBzZXR0aW5nIG91dCBhIG1ldGhvZCB0byByZXBsYWNlIHRoZSBEZXJpdmVkIFByb2dyYW0gd2l0aCB0aGUgT3JpZ2luYWwgUHJvZ3JhbS4KKworKDMpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbXVzdCBsaWNlbnNlIHRoZSBEZXJpdmVkIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LgorCisoNCkgICAgICAgICAgICAgICAgTm8gb25lIG1heSB1c2Ugb3IgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcyBhIHByb2dyYW0gbmFtZSwgZm9udCBuYW1lIG9yIGZpbGUgbmFtZSBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtLgorCisoNSkgICAgICAgICAgICAgICAgQW55IG1hdGVyaWFsIHRvIGJlIG1hZGUgYXZhaWxhYmxlIG9ubGluZSBvciBieSBtZWFucyBvZiBtYWlsaW5nIGEgbWVkaXVtIHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIHBhcmFncmFwaCBtYXkgYmUgcHJvdmlkZWQsIHZlcmJhdGltLCBieSBhbnkgcGFydHkgd2lzaGluZyB0byBkbyBzby4KKworMi4gICAgICAgICBJZiB0aGUgUmVjaXBpZW50IFJlZGlzdHJpYnV0ZXMgdGhlIExpY2Vuc2VkIFByb2dyYW0gcHVyc3VhbnQgdG8gUGFyYWdyYXBoIDYgb2YgdGhlIHByZWNlZGluZyBBcnRpY2xlLCB0aGUgUmVjaXBpZW50IHNoYWxsIG1lZXQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworKDEpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbWF5IG5vdCBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0uCisKKygyKSAgICAgICAgICAgICAgICBUaGUgUmVjaXBpZW50IG1heSBub3QgYWx0ZXIgb3Igb3RoZXJ3aXNlIG1vZGlmeSB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKworKDMpICAgICAgICAgICAgICAgIFRoZSBSZWNpcGllbnQgbXVzdCBhdHRhY2ggYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtLgorCiszLiAgICAgICAgIFRISVMgTElDRU5TRUQgUFJPR1JBTSBJUyBQUk9WSURFRCBCWSBUSEUgTElDRU5TT1IgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRZIEFTIFRPIFRIRSBMSUNFTlNFRCBQUk9HUkFNIE9SIEFOWSBERVJJVkVEIFBST0dSQU0sIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBMSUNFTlNPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWFRFTkRFRCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFRCBHT09EUyBPUiBTRVJWSUNFOyBEQU1BR0VTIEFSSVNJTkcgRlJPTSBTWVNURU0gRkFJTFVSRTsgTE9TUyBPUiBDT1JSVVBUSU9OIE9GIEVYSVNUSU5HIERBVEEgT1IgUFJPR1JBTTsgTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgSU5TVEFMTEFUSU9OLCBVU0UsIFRIRSBSRVBST0RVQ1RJT04gT1IgT1RIRVIgRVhQTE9JVEFUSU9OIE9GIFRIRSBMSUNFTlNFRCBQUk9HUkFNIE9SIEFOWSBERVJJVkVEIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis0LiAgICAgICAgIFRoZSBMaWNlbnNvciBpcyB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHJlc3BvbmQgdG8gYW55IHRlY2huaWNhbCBxdWVzdGlvbnMgb3IgaW5xdWlyaWVzLCBvciBwcm92aWRlIGFueSBvdGhlciB1c2VyIHN1cHBvcnQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBpbnN0YWxsYXRpb24sIHVzZSBvciB0aGUgUmVwcm9kdWN0aW9uIGFuZCBPdGhlciBFeHBsb2l0YXRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgRGVyaXZlZCBQcm9ncmFtcyB0aGVyZW9mLgorCisKK0FydGljbGUgNCAoVGVybWluYXRpb24gb2YgQWdyZWVtZW50KQorCisxLiAgICAgICAgIFRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlZ2luIGZyb20gdGhlIHRpbWUgb2YgcmVjZWlwdCBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBieSB0aGUgUmVjaXBpZW50IGFuZCBzaGFsbCBjb250aW51ZSBhcyBsb25nIGFzIHRoZSBSZWNpcGllbnQgcmV0YWlucyBhbnkgc3VjaCBMaWNlbnNlZCBQcm9ncmFtIGluIGFueSB3YXkuCisKKzIuICAgICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBwcm92aXNpb24gc2V0IGZvcnRoIGluIHRoZSBwcmVjZWRpbmcgUGFyYWdyYXBoLCBpbiB0aGUgZXZlbnQgb2YgdGhlIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50IGJ5IHRoZSBSZWNpcGllbnQsIHRoaXMgQWdyZWVtZW50IHNoYWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHdpdGhvdXQgYW55IG5vdGljZS4gSW4gdGhlIGNhc2Ugb2Ygc3VjaCB0ZXJtaW5hdGlvbiwgdGhlIFJlY2lwaWVudCBtYXkgbm90IHVzZSBvciBjb25kdWN0IFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIGEgRGVyaXZlZCBQcm9ncmFtOiBwcm92aWRlZCB0aGF0IHN1Y2ggdGVybWluYXRpb24gc2hhbGwgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9mIGFueSBvdGhlciBSZWNpcGllbnQgcmVjZWl2aW5nIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIHRoZSBEZXJpdmVkIFByb2dyYW0gZnJvbSBzdWNoIFJlY2lwaWVudCB3aG8gYnJlYWNoZWQgdGhpcyBBZ3JlZW1lbnQuCisKKworQXJ0aWNsZSA1IChHb3Zlcm5pbmcgTGF3KQorCisxLiAgICAgICAgIElQQSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSW4gc3VjaCBhbiBldmVudCwgdGhlIFJlY2lwaWVudCBtYXkgc2VsZWN0IGVpdGhlciB0aGlzIEFncmVlbWVudCBvciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaW4gdXNpbmcsIGNvbmR1Y3RpbmcgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mLCBvciBSZWRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbS4gT3RoZXIgbWF0dGVycyBub3Qgc3BlY2lmaWVkIGFib3ZlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIENvcHlyaWdodCBMYXcgb2YgSmFwYW4gYW5kIG90aGVyIHJlbGF0ZWQgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgSmFwYW4uCisKKzIuICAgICAgICAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzIG9mIEphcGFuLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9JUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjEzNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVBMLTEuMApAQCAtMCwwICsxLDIxMyBAQAorCitJQk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIElCTQorUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgorT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKyJDb250cmlidXRpb24iIG1lYW5zOgorCitpbiB0aGUgY2FzZSBvZiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uICgiSUJNIiksIHRoZSBPcmlnaW5hbCBQcm9ncmFtLCBhbmQKK2luIHRoZSBjYXNlIG9mIGVhY2ggQ29udHJpYnV0b3IsCitjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKK2FkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKK3doZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIG9yaWdpbmF0ZSBmcm9tIGFuZAorYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KK2BvcmlnaW5hdGVzYCBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5CitzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcworYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDoKKyhpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoCit0aGUgUHJvZ3JhbSB1bmRlciB0aGVpciBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCAoaWkpIGFyZSBub3QKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyJDb250cmlidXRvciIgbWVhbnMgSUJNIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzICIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYQorQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzCitDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiT3JpZ2luYWwgUHJvZ3JhbSIgbWVhbnMgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlCithY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQgYXMgcmVsZWFzZWQgYnkgSUJNLCBpbmNsdWRpbmcgc291cmNlCitjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcworQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCitwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kCitvYmplY3QgY29kZSBmb3JtLgorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50CitsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLAoraW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLAoraWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZQorc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtCitpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKK2FkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieQordGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55CitvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIKK3NlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlCitsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZQorcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCitwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LgorRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcworYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlCityaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcworc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKK25lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcworcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzCitSZWNpcGllbnRgcyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUKK2Rpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KK0VhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzCitzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUKK2NvcHlyaWdodCBsaWNlbnNlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzMuIFJFUVVJUkVNRU5UUworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUKK3RoZSBQcm9ncmFtIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwKK3Byb3ZpZGVkIHRoYXQ6CisKK2l0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKK2l0cyBsaWNlbnNlIGFncmVlbWVudDoKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcworYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yCitjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5Citmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kCitjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlCitvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorCitzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaAorQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZQorbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2l0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlCitQcm9ncmFtLgorRWFjaCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiBhIGNvbnNwaWN1b3VzIGxvY2F0aW9uIGluIHRoZSBQcm9ncmFtOgorCitDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitJbiBhZGRpdGlvbiwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvcgorb2YgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzCitzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbgorcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlCitsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbAordXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEKK2NvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYSBtYW5uZXIgd2hpY2ggZG9lcyBub3QKK2NyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYQorQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsCitzdWNoIENvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8gZGVmZW5kCithbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKQorYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nCitmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkCitwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUKK2FjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGgKK2l0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuCitUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuCitJbiBvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseQorbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpCithbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlCitDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudAorbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueQorc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UKK2NsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yYHMKK3Jlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCit3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8KK3Rob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55CitvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTCitQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkKK09SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKK3Jlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCitleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KK3RoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlCitsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZAordW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQKK05PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKK0dSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgordGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB3aXRob3V0IGZ1cnRoZXIKK2FjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZQorbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aAorcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbQorb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5Cit0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsCit0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYKK1JlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nCithIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0KK2l0c2VsZiAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yCitoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMKK3JpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaAorbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQKK2ZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzCitBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YKK3RpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50YHMKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlCithbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4KK0hvd2V2ZXIsIFJlY2lwaWVudGBzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkKK2xpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlCithbmQgc3Vydml2ZS4KKworSUJNIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQKK2Zyb20gdGltZSB0byB0aW1lLiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKQorbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3VuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlCitBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUKK1Byb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUKK290aGVyIHRoYW4gSUJNIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQgYXMKK2V4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzCitubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IKK3VuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yCitvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyCit0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBhbmQKK3RoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObworcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzCitBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZSB5ZWFyIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UuIEVhY2gKK3BhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0lTQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2FmMTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvSVNDCkBAIC0wLDAgKzEsMTAgQEAKKworSVNDIExpY2Vuc2U6CisKK0NvcHlyaWdodCAmIzE2OTsgMjAwNC0yMDEwIGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitDb3B5cmlnaHQgJiMxNjk7IDE5OTUtMjAwMyBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MR1BMLTIuMApAQCAtMCwwICsxLDM0MiBAQAorR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCisKKworVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworCisKK0NvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisKK29mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgR1BMLiAgSXQgaXMKKworIG51bWJlcmVkIDIgYmVjYXVzZSBpdCBnb2VzIHdpdGggdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHUEwuXQorCitQcmVhbWJsZQorCisKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisKKworVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUgc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55IG90aGVyIGxpYnJhcmllcyB3aG9zZSBhdXRob3JzIGRlY2lkZSB0byB1c2UgaXQuIFlvdSBjYW4gdXNlIGl0IGZvciB5b3VyIGxpYnJhcmllcywgdG9vLgorCisKKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdCBwcmljZS4gT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisKKworVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisKKworRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUgY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0gd2l0aCB0aGUgbGlicmFyeSwgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nIGl0LiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKworCitPdXIgbWV0aG9kIG9mIHByb3RlY3RpbmcgeW91ciByaWdodHMgaGFzIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworCisKK0Fsc28sIGZvciBlYWNoIGRpc3RyaWJ1dG9yJ3MgcHJvdGVjdGlvbiwgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgbGlicmFyeS4gSWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwgYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKworCitGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLiBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUgc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QgdHJhbnNmb3JtaW5nIHRoZSBwcm9ncmFtIGludG8gcHJvcHJpZXRhcnkgc29mdHdhcmUuIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKworCitNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMuIFRoaXMgbGljZW5zZSBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzIHRoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgorCisKKworVGhlIHJlYXNvbiB3ZSBoYXZlIGEgc2VwYXJhdGUgcHVibGljIGxpY2Vuc2UgZm9yIHNvbWUgbGlicmFyaWVzIGlzIHRoYXQgdGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEgcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiBMaW5raW5nIGEgcHJvZ3JhbSB3aXRoIGEgbGlicmFyeSwgd2l0aG91dCBjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcyBhbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiBIb3dldmVyLCBpbiBhIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0cmVhdHMgaXQgYXMgc3VjaC4KKworCisKK0JlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZSBzaGFyaW5nLCBiZWNhdXNlIG1vc3QgZGV2ZWxvcGVycyBkaWQgbm90IHVzZSB0aGUgbGlicmFyaWVzLiBXZSBjb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgorCisKKworSG93ZXZlciwgdW5yZXN0cmljdGVkIGxpbmtpbmcgb2Ygbm9uLWZyZWUgcHJvZ3JhbXMgd291bGQgZGVwcml2ZSB0aGUgdXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlIGxpYnJhcmllcyB0aGVtc2VsdmVzLiBUaGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlIHByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZSBsaWJyYXJpZXMgdGhhdCBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZW0uIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlIHRoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIHRoZSBhY3R1YWwgZnVuY3Rpb25zIG9mIHRoZSBMaWJyYXJ5LikgVGhlIGhvcGUgaXMgdGhhdCB0aGlzIHdpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCisKKworCitUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LiBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSAid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGZvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5IHdvcmtzIHRvZ2V0aGVyIHdpdGggdGhlIGxpYnJhcnkuCisKKworCitOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCisKKworCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworCisKKzAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworCisKK0EgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEgcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zICh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKworCitUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yayB3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworCisKKyJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tIHN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvciB3cml0aW5nIGl0KS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMgYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisKKworCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KKworCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisKKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisKKworYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCitiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCitkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5IGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LCBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuIEJ1dCB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKKworCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisKKworMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuIFRvIGRvIHRoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28gdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeSB0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KKworCisKK09uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IgdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworCisKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZiB0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKworCis0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisKKworSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvIGRpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworCisKKzUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlIExpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKworCitIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IGNyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdCBjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiBTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworCisKK1doZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4gV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUgbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuIFRoZSB0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisKKworSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lIGZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QgZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZSB3b3JrLiAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKworCitPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKworCisKKzYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21waWxlIG9yIGxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhIHdvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQgbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisKKworWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgd29yayBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuIEFsc28sIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGVzZSB0aGluZ3M6CisKKworCithKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gKEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCitiKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKK2MpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKK2QpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZSBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yIHJlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworCisKK0l0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlIHJlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkgYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90IHVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UgZGlzdHJpYnV0ZS4KKworCisKKzcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKworCithKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMuIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLgorCitiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdCB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKzguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKworCis5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKworCisxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KKworCisKKzExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCisKKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKKworCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55IHN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCisKKworCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKworCisxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKworCisxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKworCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEgbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCisKKzE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLCB3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKworCitOTyBXQVJSQU5UWQorCisKKworMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgTElCUkFSWSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKworCisxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIExJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKworCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCisKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworCisKK0lmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0IGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nIHJlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworCisKK1RvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworCisKK29uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhbiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4KKworQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorCisKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKwordmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisKKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisKK0xpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisKKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKworRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsCisKK0Jvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKworCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZiBuZWNlc3NhcnkuIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworCisKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4KKwordGhlIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuCisKK2J5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKworCitzaWduYXR1cmUgb2YgVHkgQ29vbiwgMSBBcHJpbCAxOTkwCisKK1R5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBlNzM1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMi4xCkBAIC0wLDAgKzEsMTc2IEBACisKK0dOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDIuMSwgRmVicnVhcnkgMTk5OQorCitDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCis1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorUHJlYW1ibGUKKworVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCitUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lIHNwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiBZb3UgY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlciB0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlciBzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KKworV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLCBub3QgcHJpY2UuIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkIGRpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCitGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlIHlvdS4gWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUgY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nIGl0LiBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKK1dlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKK1RvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbCBhdXRob3JgcyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBieSBvdGhlcnMuCisKK0ZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mIGFueSBmcmVlIHByb2dyYW0uIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdCBlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEgcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdCBhbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgorCitNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZCBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gV2UgdXNlIHRoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UgbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCisKK1doZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nIGEgc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYSBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuIFRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZSBlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gVGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LgorCitXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0IGRvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyYHMgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzIG9mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gVGhlc2UgZGlzYWR2YW50YWdlcyBhcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkgbGlicmFyaWVzLiBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluIHNwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8gZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMgYSBkZS1mYWN0byBzdGFuZGFyZC4gVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlIGFsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZSBsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUgc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZiBmcmVlIHNvZnR3YXJlLiBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4gbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VIG9wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nIHN5c3RlbS4KKworQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUgdXNlcnNgIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMgbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuIHRoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCisKK1RoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBmb2xsb3cuIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhICJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiBUaGUgZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKzAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlciBwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0EgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEgcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zICh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKK1RoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrIHdoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiBBICJ3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYSBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIHN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdCBvZiBydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tIHN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvciB3cml0aW5nIGl0KS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMgYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisKKzEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnlgcyBjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBMaWJyYXJ5LgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCithKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCitiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KK2MpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KK2QpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYSB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvciB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gVG8gZG8gdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbyB0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGluc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbiB0aGVzZSBub3RpY2VzLgorCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKK1RoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZiB0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKzQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKzUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlIExpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKK0hvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0IGNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCitXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuIFdoZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlIGxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEgc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lIGZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QgZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZSB3b3JrLiAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKK090aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LiBBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwgd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorCis2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvciBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYSB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyYHMgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlIExpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgd29yayBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuIEFsc28sIHlvdSBtdXN0IGRvIG9uZSBvZiB0aGVzZSB0aGluZ3M6CisKK2EpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlciBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAoSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCitiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUgTGlicmFyeS4gQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYSBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcmBzIGNvbXB1dGVyIHN5c3RlbSwgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KK2UpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZSBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KK0ZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZSByZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdCB1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91IGRpc3RyaWJ1dGUuCisKKzcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKK2EpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcy4gVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2VjdGlvbnMgYWJvdmUuCitiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdCB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCis4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCis5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKzEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50c2AgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKzExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKzEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgTGlicmFyeSBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYSBsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlIHByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCitOTyBXQVJSQU5UWQorCisxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKK1RvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiBJdCBpcyBzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseSBjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworb25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeWBzIG5hbWUgYW5kIGFuIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLgorQ29weXJpZ2h0IChDKSB5ZWFyICBuYW1lIG9mIGF1dGhvcgorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKK3ZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKK1lveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4KK3RoZSBsaWJyYXJ5IGBGcm9iYCAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbgorYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworc2lnbmF0dXJlIG9mIFR5IENvb24sIDEgQXByaWwgMTk5MAorVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKK1RoYXRgcyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTEdQTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJlMjliZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xHUEwtMy4wCkBAIC0wLDAgKzEsNjUgQEAKK0dOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCitDb3B5cmlnaHQgwqkgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitUaGlzIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHN1cHBsZW1lbnRlZCBieSB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBsaXN0ZWQgYmVsb3cuCiswLiBBZGRpdGlvbmFsIERlZmluaXRpb25zLgorCitBcyB1c2VkIGhlcmVpbiwg4oCcdGhpcyBMaWNlbnNl4oCdIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSDigJxHTlUgR1BM4oCdIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCivigJxUaGUgTGlicmFyeeKAnSByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmluZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgorCitBbiDigJxBcHBsaWNhdGlvbuKAnSBpcyBhbnkgd29yayB0aGF0IG1ha2VzIHVzZSBvZiBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnksIGJ1dCB3aGljaCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LiBEZWZpbmluZyBhIHN1YmNsYXNzIG9mIGEgY2xhc3MgZGVmaW5lZCBieSB0aGUgTGlicmFyeSBpcyBkZWVtZWQgYSBtb2RlIG9mIHVzaW5nIGFuIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGUgTGlicmFyeS4KKworQSDigJxDb21iaW5lZCBXb3Jr4oCdIGlzIGEgd29yayBwcm9kdWNlZCBieSBjb21iaW5pbmcgb3IgbGlua2luZyBhbiBBcHBsaWNhdGlvbiB3aXRoIHRoZSBMaWJyYXJ5LiBUaGUgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHdpdGggd2hpY2ggdGhlIENvbWJpbmVkIFdvcmsgd2FzIG1hZGUgaXMgYWxzbyBjYWxsZWQgdGhlIOKAnExpbmtlZCBWZXJzaW9u4oCdLgorCitUaGUg4oCcTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZeKAnSBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgdGhlIENvbWJpbmVkIFdvcmssIGV4Y2x1ZGluZyBhbnkgc291cmNlIGNvZGUgZm9yIHBvcnRpb25zIG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9uLCBhcmUgYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBMaW5rZWQgVmVyc2lvbi4KKworVGhlIOKAnENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZeKAnSBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZSBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUgZm9yIHRoZSBBcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIENvbWJpbmVkIFdvcmsgZnJvbSB0aGUgQXBwbGljYXRpb24sIGJ1dCBleGNsdWRpbmcgdGhlIFN5c3RlbSBMaWJyYXJpZXMgb2YgdGhlIENvbWJpbmVkIFdvcmsuCisxLiBFeGNlcHRpb24gdG8gU2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLgorCitZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayB1bmRlciBzZWN0aW9ucyAzIGFuZCA0IG9mIHRoaXMgTGljZW5zZSB3aXRob3V0IGJlaW5nIGJvdW5kIGJ5IHNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KKzIuIENvbnZleWluZyBNb2RpZmllZCBWZXJzaW9ucy4KKworSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExpYnJhcnksIGFuZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhIGZhY2lsaXR5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSAob3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252ZXkgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCB2ZXJzaW9uOgorCisgICAgKiBhKSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgeW91IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIEFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSB0aGUgZnVuY3Rpb24gb3IgZGF0YSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwsIG9yCisgICAgKiBiKSB1bmRlciB0aGUgR05VIEdQTCwgd2l0aCBub25lIG9mIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9mIHRoaXMgTGljZW5zZSBhcHBsaWNhYmxlIHRvIHRoYXQgY29weS4KKworMy4gT2JqZWN0IENvZGUgSW5jb3Jwb3JhdGluZyBNYXRlcmlhbCBmcm9tIExpYnJhcnkgSGVhZGVyIEZpbGVzLgorCitUaGUgb2JqZWN0IGNvZGUgZm9ybSBvZiBhbiBBcHBsaWNhdGlvbiBtYXkgaW5jb3Jwb3JhdGUgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeS4gWW91IG1heSBjb252ZXkgc3VjaCBvYmplY3QgY29kZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCwgaWYgdGhlIGluY29ycG9yYXRlZCBtYXRlcmlhbCBpcyBub3QgbGltaXRlZCB0byBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBvciBzbWFsbCBtYWNyb3MsIGlubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlcyAodGVuIG9yIGZld2VyIGxpbmVzIGluIGxlbmd0aCksIHlvdSBkbyBib3RoIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAqIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgb2JqZWN0IGNvZGUgdGhhdCB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKyAgICAqIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KKworNC4gQ29tYmluZWQgV29ya3MuCisKK1lvdSBtYXkgY29udmV5IGEgQ29tYmluZWQgV29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSB0aGF0LCB0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLCBpZiB5b3UgYWxzbyBkbyBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAqIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgQ29tYmluZWQgV29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorICAgICogYikgQWNjb21wYW55IHRoZSBDb21iaW5lZCBXb3JrIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisgICAgKiBjKSBGb3IgYSBDb21iaW5lZCBXb3JrIHRoYXQgZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMgZHVyaW5nIGV4ZWN1dGlvbiwgaW5jbHVkZSB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlc2Ugbm90aWNlcywgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcGllcyBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorICAgICogZCkgRG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAgbyAwKSBDb252ZXkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHRoZSBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUgaW4gYSBmb3JtIHN1aXRhYmxlIGZvciwgYW5kIHVuZGVyIHRlcm1zIHRoYXQgcGVybWl0LCB0aGUgdXNlciB0byByZWNvbWJpbmUgb3IgcmVsaW5rIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24gdG8gcHJvZHVjZSBhIG1vZGlmaWVkIENvbWJpbmVkIFdvcmssIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLgorICAgICAgICAgIG8gMSkgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0IChhKSB1c2VzIGF0IHJ1biB0aW1lIGEgY29weSBvZiB0aGUgTGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sIGFuZCAoYikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHRoYXQgaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgTGlua2VkIFZlcnNpb24uCisgICAgKiBlKSBQcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiwgYnV0IG9ubHkgaWYgeW91IHdvdWxkIG90aGVyd2lzZSBiZSByZXF1aXJlZCB0byBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24gdW5kZXIgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBpcyBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIENvbWJpbmVkIFdvcmsgcHJvZHVjZWQgYnkgcmVjb21iaW5pbmcgb3IgcmVsaW5raW5nIHRoZSBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZiB5b3UgdXNlIG9wdGlvbiA0ZDAsIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gbXVzdCBhY2NvbXBhbnkgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgYW5kIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMIGZvciBjb252ZXlpbmcgQ29ycmVzcG9uZGluZyBTb3VyY2UuKQorCis1LiBDb21iaW5lZCBMaWJyYXJpZXMuCisKK1lvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSBzaWRlIGJ5IHNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBub3QgQXBwbGljYXRpb25zIGFuZCBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgY29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBpZiB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgKiBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMsIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgKiBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKzYuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSDigJxvciBhbnkgbGF0ZXIgdmVyc2lvbuKAnSBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgcHVibGlzaGVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoZXRoZXIgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2hhbGwgYXBwbHksIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMgcGVybWFuZW50IGF1dGhvcml6YXRpb24gZm9yIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgTGlicmFyeS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBMLTEuMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzMzc0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQTC0xLjAyCkBAIC0wLDAgKzEsNzYgQEAKKworTHVjZW50IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wMiAKKworVEhFIEFDQ09NUEFOWUlORyBQUk9HUkFNIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIFBVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UYFMgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCitpbiB0aGUgY2FzZSBvZiBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gKCJMVUNFTlQiKSwgdGhlIE9yaWdpbmFsIFByb2dyYW0sIGFuZAoraW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciwKK2NoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAorYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2VyZSBhZGRlZCB0byB0aGUgUHJvZ3JhbSBieSBzdWNoIENvbnRyaWJ1dG9yIGl0c2VsZiBvciBhbnlvbmUgYWN0aW5nIG9uIHN1Y2ggQ29udHJpYnV0b3JgcyBiZWhhbGYsIGFuZCB0aGUgQ29udHJpYnV0b3IgZXhwbGljaXRseSBjb25zZW50cywgaW4gYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gM0MsIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyBhcyBDb250cmlidXRpb25zLgorIkNvbnRyaWJ1dG9yIiBtZWFucyBMVUNFTlQgYW5kIGFueSBvdGhlciBlbnRpdHkgdGhhdCBoYXMgQ29udHJpYnV0ZWQgYSBDb250cmlidXRpb24gdG8gdGhlIFByb2dyYW0uCisKKyJEaXN0cmlidXRvciIgbWVhbnMgYSBSZWNpcGllbnQgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSwgbW9kaWZpY2F0aW9ucyB0byB0aGUgUHJvZ3JhbSwgb3IgYW55IHBhcnQgdGhlcmVvZi4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2ggYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIENvbnRyaWJ1dGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyJPcmlnaW5hbCBQcm9ncmFtIiBtZWFucyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IExVQ0VOVCwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMgb3IgYW55IHBhcnQgdGhlcmVvZgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGUgcGF0ZW50IGxpY2Vuc2UgZ3JhbnRlZCBieSBhIENvbnRyaWJ1dG9yIHNoYWxsIGFsc28gYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gb2YgdGhhdCBDb250cmlidXRvciBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBub3QgYXBwbHkgdG8gKGkpIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLCBub3IgdG8gKGlpKSBDb250cmlidXRpb25zIG9mIG90aGVyIENvbnRyaWJ1dG9ycy4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KK1JlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudGBzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCitFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorMy4gUkVRVUlSRU1FTlRTCisKK0EuIERpc3RyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybSB1bmRlciB0aGlzIEFncmVlbWVudCBvciB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCitpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsKK2lmIHRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIG9yIG90aGVyIHRhbmdpYmxlIGZvcm0sIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBvciBEaXN0cmlidXRvcmBzIG93biBsaWNlbnNlIGFncmVlbWVudCBpcyBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbTsgYW5kCitpZiBkaXN0cmlidXRlZCB1bmRlciBEaXN0cmlidXRvcmBzIG93biBsaWNlbnNlIGFncmVlbWVudCwgc3VjaCBsaWNlbnNlIGFncmVlbWVudDoKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CitlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsgYW5kCitzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LgorQi4gRWFjaCBEaXN0cmlidXRvciBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiBhIGNvbnNwaWN1b3VzIGxvY2F0aW9uIGluIHRoZSBQcm9ncmFtOgorCitDb3B5cmlnaHQgKEMpIDIwMDMsIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQy4gSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3Igb2YgaXRzIENvbnRyaWJ1dGlvbiBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLiBBbHNvLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgYWdyZWUgdGhhdCB0aGUgYWRkaXRpb25zIGFuZC9vciBjaGFuZ2VzIGFyZSBpbnRlbmRlZCB0byBiZSBhIENvbnRyaWJ1dGlvbi4gT25jZSBhIENvbnRyaWJ1dGlvbiBpcyBjb250cmlidXRlZCwgaXQgbWF5IG5vdCB0aGVyZWFmdGVyIGJlIHJldm9rZWQuCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgRGlzdHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3IgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgRGlzdHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggRGlzdHJpYnV0b3IgKCJDb21tZXJjaWFsIERpc3RyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIERpc3RyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBEaXN0cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBEaXN0cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3JgcyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBFWFBPUlQgQ09OVFJPTAorCitSZWNpcGllbnQgYWdyZWVzIHRoYXQgUmVjaXBpZW50IGFsb25lIGlzIHJlc3BvbnNpYmxlIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHJlZ3VsYXRpb24gb2YgYW55IG90aGVyIGNvdW50cmllcykuCisKKzguIEdFTkVSQUwKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyBoZXJldG8sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYSBDb250cmlidXRvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgdG8gc3VjaCBSZWNpcGllbnQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgUHJvZ3JhbSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50YHMgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50YHMgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyKGIpIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnRgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0IGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudGBzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMgc29vbiBhcyByZWFzb25hYmx5IHByYWN0aWNhYmxlLiBIb3dldmVyLCBSZWNpcGllbnRgcyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkgUmVjaXBpZW50IHJlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgorCitMVUNFTlQgbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gVGhlIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLCBDb250cmlidXRvciBtYXkgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIE5vIG9uZSBvdGhlciB0aGFuIExVQ0VOVCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZWYzNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMApAQCAtMCwwICsxLDIxMyBAQAorCitMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCitMUFBMIFZlcnNpb24gMS4wICAxOTk5LTAzLTAxCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIGlzIG5vdCBhbGxvd2VkLgorCisKK1ByZWFtYmxlCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlCitiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBpcyBkaXN0cmlidXRlZC4gQXMgZGVzY3JpYmVkIGJlbG93IHlvdSBtYXkgdXNlCit0aGlzIGxpY2VuY2UgZm9yIGFueSBzb2Z0d2FyZSB0aGF0IHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUuIAorCitJdCBtYXkgYmUgcGFydGljdWxhcmx5IHN1aXRhYmxlIGlmIHlvdXIgc29mdHdhcmUgaXMgVGVYIHJlbGF0ZWQgKHN1Y2gKK2FzIGEgTGFUZVggcGFja2FnZSBmaWxlKSBidXQgaXQgbWF5IGJlIHVzZWQgZm9yIGFueSBzb2Z0d2FyZSwgZXZlbiBpZgoraXQgaXMgdW5yZWxhdGVkIHRvIFRlWC4KKworVG8gdXNlIHRoaXMgbGljZW5zZSwgdGhlIGZpbGVzIG9mIHlvdXIgZGlzdHJpYnV0aW9uIHNob3VsZCBoYXZlIGFuCitleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGdpdmluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyLCB0b2dldGhlcgord2l0aCBhIHJlZmVyZW5jZSB0byB0aGlzIGxpY2Vuc2UuCisKK0EgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlCisKKyAgICUlIHBpZy5zdHkKKyAgICUlIENvcHlyaWdodCAyMDAxIE0uIFkuIE5hbWUKKworICAgJSBUaGlzIHByb2dyYW0gY2FuIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcworICAgJSBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSBEaXN0cmlidXRlZCBmcm9tIENUQU4KKyAgICUgYXJjaGl2ZXMgaW4gZGlyZWN0b3J5IG1hY3Jvcy9sYXRleC9iYXNlL2xwcGwudHh0OyBlaXRoZXIKKyAgICUgdmVyc2lvbiAxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitHaXZlbiBzdWNoIGEgbm90aWNlIGluIHRoZSBmaWxlLCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGRvY3VtZW50IHdvdWxkCithcHBseSwgd2l0aDoKKworYFRoZSBQcm9ncmFtYCByZWZlcnJpbmcgdG8gdGhlIHNvZnR3YXJlIGBwaWcuc3R5YCAgYW5kIAorYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZWAuCisKK1RvIHNlZSBhIHJlYWwgZXhhbXBsZSwgc2VlIHRoZSBmaWxlIGxlZ2FsLnR4dCB3aGljaCBjYXJyaWVzIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIGJhc2UgbGF0ZXggZGlzdHJpYnV0aW9uLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgdGVybXMgdW5kZXIgd2hpY2ggZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZCBhbmQgbW9kaWZpZWQuIEluZGl2aWR1YWwgZmlsZXMgbWF5IGhhdmUgc3BlY2lmaWMgZnVydGhlcgorY29uc3RyYWludHMgb24gbW9kaWZpY2F0aW9uLCBidXQgbm8gZmlsZSBzaG91bGQgaGF2ZSByZXN0cmljdGlvbnMgb24KK2Rpc3RyaWJ1dGlvbiBvdGhlciB0aGFuIHRob3NlIHNwZWNpZmllZCBiZWxvdy4gCitUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IGEgZGlzdHJpYnV0b3Igd2lzaGluZyB0byBkaXN0cmlidXRlIGEgY29tcGxldGUKK3VubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSBuZWVkIG9ubHkgY2hlY2sgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcworZmlsZSwgYW5kIGRvZXMgbm90IG5lZWQgdG8gY2hlY2sgZXZlcnkgZmlsZSBpbiBUaGUgUHJvZ3JhbSBmb3IgZXh0cmEKK3Jlc3RyaWN0aW9ucy4gSWYgeW91IGRvIG5lZWQgdG8gbW9kaWZ5IHRoZSBkaXN0cmlidXRpb24gdGVybXMgb2Ygc29tZQorZmlsZXMsIGRvIG5vdCByZWZlciB0byB0aGlzIGxpY2Vuc2UsIGluc3RlYWQgZGlzdHJpYnV0ZSBUaGUgUHJvZ3JhbQordW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gWW91IG1heSB1c2UgdGhlIHBhcnRzIG9mIHRoZSB0ZXh0IG9mIExQUEwgYXMKK2EgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCBkaXJlY3RseSByZWZlcgordG8gdGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdCBUaGUgUHJvZ3JhbSBpcworZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuIAorCisKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUZXJtcyBBbmQgQ29uZGl0aW9ucyBGb3IgQ29weWluZywgRGlzdHJpYnV0aW9uIEFuZCBNb2RpZmljYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK1dBUlJBTlRZCis9PT09PT09PQorCitUaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0sIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5CithcHBsaWNhYmxlIGxhdy4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZywgVGhlCitDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIFRoZSBQcm9ncmFtIGBhcyBpc2Agd2l0aG91dCB3YXJyYW50eSBvZiBhbnkKK2tpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZQoraW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyCitwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUKK3Byb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lCit0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZword2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IgYW55IG9mIHRoZSBpbmRpdmlkdWFsIGF1dGhvcnMgbmFtZWQgaW4KK3RoZSBzb3VyY2UgZm9yIFRoZSBQcm9ncmFtLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcKK2FueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dAorb2YgYW55IHVzZSBvZiBUaGUgUHJvZ3JhbSBvciBvdXQgb2YgaW5hYmlsaXR5IHRvIHVzZSBUaGUgUHJvZ3JhbQorKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQKK2luYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgYnkgdGhpcmQgcGFydGllcyBhcyBhIHJlc3VsdAorb2YgYSBmYWlsdXJlIG9mIFRoZSBQcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuCitpZiBzdWNoIGhvbGRlciBvciBvdGhlciBwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZgorc3VjaCBkYW1hZ2VzLgorCisKK0RJU1RSSUJVVElPTgorPT09PT09PT09PT09CisKK1JlZGlzdHJpYnV0aW9uIG9mIHVuY2hhbmdlZCBmaWxlcyBpcyBhbGxvd2VkIHByb3ZpZGVkIHRoYXQgYWxsIGZpbGVzCit0aGF0IG1ha2UgdXAgdGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUgUHJvZ3JhbSBhcmUgZGlzdHJpYnV0ZWQuCitJbiBwYXJ0aWN1bGFyIHRoaXMgbWVhbnMgdGhhdCBUaGUgUHJvZ3JhbSBoYXMgdG8gYmUgZGlzdHJpYnV0ZWQKK2luY2x1ZGluZyBpdHMgZG9jdW1lbnRhdGlvbiBpZiBkb2N1bWVudGF0aW9uIHdhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbAorZGlzdHJpYnV0aW9uLgorCitUaGUgZGlzdHJpYnV0aW9uIG9mIFRoZSBQcm9ncmFtIHdpbGwgY29udGFpbiBhIHByb21pbmVudCBmaWxlCitsaXN0aW5nIGFsbCB0aGUgZmlsZXMgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2UuCisKK0lmIHlvdSByZWNlaXZlIG9ubHkgc29tZSBvZiB0aGVzZSBmaWxlcyBmcm9tIHNvbWVvbmUsIGNvbXBsYWluIQorCitUaGUgZGlzdHJpYnV0aW9uIG9mIGNoYW5nZWQgdmVyc2lvbnMgb2YgY2VydGFpbiBmaWxlcyBpbmNsdWRlZCBpbiB0aGUKK1RoZSBQcm9ncmFtLCBhbmQgdGhlIHJldXNlIG9mIGNvZGUgZnJvbSBUaGUgUHJvZ3JhbSwgYXJlIGFsbG93ZWQKK3VuZGVyIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgKiBJdCBpcyBhbGxvd2VkIG9ubHkgaWYgdGhlIGxlZ2FsIG5vdGljZSBpbiB0aGUgZmlsZSBkb2VzIG5vdAorICAgZXhwcmVzc2x5IGZvcmJpZCBpdC4KKyAgIFNlZSBub3RlIGJlbG93LCB1bmRlciAiQ29uZGl0aW9ucyBvbiBpbmRpdmlkdWFsIGZpbGVzIi4KKyAKKyAqIFlvdSByZW5hbWUgdGhlIGZpbGUgYmVmb3JlIHlvdSBtYWtlIGFueSBjaGFuZ2VzIHRvIGl0LCB1bmxlc3MgdGhlCisgICBmaWxlIGV4cGxpY2l0bHkgc2F5cyB0aGF0IHJlbmFtaW5nIGlzIG5vdCByZXF1aXJlZC4gIEFueSBzdWNoIGNoYW5nZWQKKyAgIGZpbGVzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcyBkaXN0cmlidXRpb24KKyAgIG9mIHRob3NlIGZpbGVzLCBhbmQgYW55IGZpbGVzIGRlcml2ZWQgZnJvbSB0aGVtLCB1bmRlciB0aGUgbmFtZXMgdXNlZAorICAgYnkgdGhlIG9yaWdpbmFsIGZpbGVzIGluIHRoZSBkaXN0cmlidXRpb24gb2YgVGhlIFByb2dyYW0uCisKKyAqIFlvdSBjaGFuZ2UgYW55IGBpZGVudGlmaWNhdGlvbiBzdHJpbmdgIGluIFRoZSBQcm9ncmFtIHRvIGNsZWFybHkgCisgICBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBzeXN0ZW0uCisKKyAqIElmIFRoZSBQcm9ncmFtIGluY2x1ZGVzIGFuIGBlcnJvciByZXBvcnQgYWRkcmVzc2Agc28gdGhhdCBlcnJvcnMKKyAgIG1heSBiZSByZXBvcnRlZCB0byBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3Igb3RoZXIgc3BlY2lmaWVkCisgICBhZGRyZXNzZXMsIHRoaXMgYWRkcmVzcyBtdXN0IGJlIGNoYW5nZWQgaW4gYW55IG1vZGlmaWVkIHZlcnNpb25zIG9mCisgICBUaGUgUHJvZ3JhbSwgc28gdGhhdCByZXBvcnRzIGZvciBmaWxlcyBub3QgbWFpbnRhaW5lZCBieSB0aGUKKyAgIG9yaWdpbmFsIHByb2dyYW0gbWFpbnRhaW5lcnMgYXJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUKKyAgIGNoYW5nZWQgZmlsZXMuIAorCisgKiBZb3UgYWNrbm93bGVkZ2UgdGhlIHNvdXJjZSBhbmQgYXV0aG9yc2hpcCBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgaW4gdGhlIG1vZGlmaWVkIGZpbGUuCisKKyAqIFlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIHVubW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBvcgorICAgYWx0ZXJuYXRpdmVseSBwcm92aWRlIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gc28gdGhhdCB0aGUKKyAgIHVzZXIgb2YgeW91ciBtb2RpZmllZCBmaWxlIGNhbiBiZSByZWFzb25hYmx5IGV4cGVjdGVkIHRvIGJlCisgICBhYmxlIHRvIG9idGFpbiBhbiBvcmlnaW5hbCwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorICAgRm9yIGV4YW1wbGUsIHlvdSBtYXkgc3BlY2lmeSBhIFVSTCB0byBhIHNpdGUgdGhhdCB5b3UgZXhwZWN0CisgICB3aWxsIGZyZWVseSBwcm92aWRlIHRoZSB1c2VyIHdpdGggYSBjb3B5IG9mIFRoZSBQcm9ncmFtIChlaXRoZXIKKyAgIHRoZSB2ZXJzaW9uIG9uIHdoaWNoIHlvdXIgbW9kaWZpY2F0aW9uIGlzIGJhc2VkLCBvciBwZXJoYXBzIGEKKyAgIGxhdGVyIHZlcnNpb24pLgorCisgKiBJZiBUaGUgUHJvZ3JhbSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGgsIG9yIGlzIGJhc2VkIG9uLCBMYVRlWCwKKyAgIHRoZW4gZmlsZXMgd2l0aCB0aGUgZm9sbG93aW5nIGZpbGUgZXh0ZW5zaW9ucyB3aGljaCBoYXZlIHNwZWNpYWwKKyAgIG1lYW5pbmcgaW4gTGFUZVggU29mdHdhcmUsIGhhdmUgc3BlY2lhbCBtb2RpZmljYXRpb24gcnVsZXMgdW5kZXIgdGhlCisgICBsaWNlbnNlOgorIAorICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5pbnNgIChpbnN0YWxsYXRpb24gZmlsZXMpOiB0aGVzZSBmaWxlcyBtYXkKKyAgICAgIG5vdCBiZSBtb2RpZmllZCBhdCBhbGwgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGxlZ2FsIG5vdGljZXMKKyAgICAgIHRoYXQgYXJlIHBsYWNlZCBpbiB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorIAorICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbnMgZmlsZXMpOiB0aGVzZQorICAgICAgZmlsZXMgYXJlIGFsbG93ZWQgdG8gYmUgbW9kaWZpZWQgd2l0aG91dCBjaGFuZ2luZyB0aGUgbmFtZSwgYnV0CisgICAgICBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgYWxsIGF2YWlsYWJsZSBmb250cyBhbmQgdG8gcHJldmVudCBhdHRlbXB0cworICAgICAgdG8gYWNjZXNzIHVuYXZhaWxhYmxlIGZvbnRzLiBIb3dldmVyLCBtb2RpZmllZCBmaWxlcyBhcmUgbm90CisgICAgICBhbGxvd2VkIHRvIGJlIGRpc3RyaWJ1dGVkIGluIHBsYWNlIG9mIG9yaWdpbmFsIGZpbGVzLgorIAorICAgIC0gRmlsZXMgd2l0aCBleHRlbnNpb24gYC5jZmdgIChjb25maWd1cmF0aW9uIGZpbGVzKTogdGhlc2UgZmlsZXMKKyAgICAgIGNhbiBiZSBjcmVhdGVkIG9yIG1vZGlmaWVkIHRvIGVuYWJsZSBlYXN5IGNvbmZpZ3VyYXRpb24gb2YgdGhlCisgICAgICBzeXN0ZW0uICBUaGUgZG9jdW1lbnRhdGlvbiBpbiBjZmdndWlkZS50ZXggaW4gdGhlIGJhc2UgTGFUZVgKKyAgICAgIGRpc3RyaWJ1dGlvbiBkZXNjcmliZXMgd2hlbiBpdCBtYWtlcyBzZW5zZSB0byBtb2RpZnkgb3IgZ2VuZXJhdGUKKyAgICAgIHN1Y2ggZmlsZXMuCisgCisKK1RoZSBhYm92ZSByZXN0cmljdGlvbnMgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvCitub3QgYXBwbHkgdG8sIHRoZSB1cGRhdGluZywgYnkgYW55IG1ldGhvZCwgb2YgYSBmaWxlIHNvIHRoYXQgaXQKK2JlY29tZXMgaWRlbnRpY2FsIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGF0IGZpbGUgaW4gVGhlIFByb2dyYW0uCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOT1RFUworPT09PT0KKworV2UgYmVsaWV2ZSB0aGF0IHRoZXNlIHJlcXVpcmVtZW50cyBnaXZlIHlvdSB0aGUgZnJlZWRvbSB5b3UgdG8gbWFrZQorbW9kaWZpY2F0aW9ucyB0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91Cit3aXNoLCB3aGlsc3QgbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5IGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbHN0CithZGhlcmluZyB0byB0aGVzZSByZXF1aXJlbWVudHMgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBjZmdndWlkZS50ZXgKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuIAorCitCZWNhdXNlIG9mIHRoZSBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGFzcGVjdHMgb2Ygc3lzdGVtcworbGlrZSBMYVRlWCwgVGhlIExhVGVYMyBQcm9qZWN0IGRlcHJlY2F0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBvZgorbm9uLXN0YW5kYXJkIHZlcnNpb25zIG9mIGNvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZQorY29udHJpYnV0ZWQgY29kZSBmb3IgdGhlbSBidXQgc3VjaCBkaXN0cmlidXRpb25zIGFyZSBwZXJtaXR0ZWQgdW5kZXIgdGhlCithYm92ZSByZXN0cmljdGlvbnMuCisKK1RoZSBkb2N1bWVudCBtb2RndWlkZS50ZXggaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGRldGFpbHMKK3RoZSByZWFzb25zIGZvciB0aGUgbGVnYWwgcmVxdWlyZW1lbnRzIGRldGFpbGVkIGFib3ZlLgorRXZlbiBpZiBUaGUgUHJvZ3JhbSBpcyB1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBhcmd1bWVudCBpbgorbW9kZ3VpZGUudGV4IG1heSBzdGlsbCBhcHBseSwgYW5kIHNob3VsZCBiZSByZWFkIGJlZm9yZQorYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFRoZSBQcm9ncmFtIGlzIGRpc3RyaWJ1dGVkLgorCisKK0NvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBpbmRpdmlkdWFsIGZpbGVzIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB3aGljaCBzdXBlcnNlZGUKK3RoZSBnZW5lcmFsIGNvbmRpdGlvbnMgb24gZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gY29udGFpbmVkIGluCit0aGlzIGZpbGUuIElmIHRoZXJlIGFyZSBhbnkgc3VjaCBmaWxlcywgdGhlIGRpc3RyaWJ1dGlvbiBvZiBUaGUKK1Byb2dyYW0gd2lsbCBjb250YWluIGEgcHJvbWluZW50IGZpbGUgdGhhdCBsaXN0cyBhbGwgdGhlIGV4Y2VwdGlvbmFsCitmaWxlcy4KKworVHlwaWNhbCBleGFtcGxlcyBvZiBmaWxlcyB3aXRoIG1vcmUgcmVzdHJpY3RpdmUgbW9kaWZpY2F0aW9uCitjb25kaXRpb25zIHdvdWxkIGJlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgdGV4dCBvZiBjb3B5cmlnaHQgbm90aWNlcy4KKworICogVGhlIGNvbmRpdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcyBkaWZmZXIgb25seSBpbiB0aGUKKyAgIGV4dGVudCBvZiAqbW9kaWZpY2F0aW9uKiB0aGF0IGlzIGFsbG93ZWQuCisKKyAqIFRoZSBjb25kaXRpb25zIG9uICpkaXN0cmlidXRpb24qIGFyZSB0aGUgc2FtZSBmb3IgYWxsIHRoZSBmaWxlcy4KKyAgIFRodXMgYSAocmUpZGlzdHJpYnV0b3Igb2YgYSBjb21wbGV0ZSwgdW5jaGFuZ2VkIGNvcHkgb2YgVGhlIFByb2dyYW0KKyAgIG5lZWQgbWVldCBvbmx5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgZmlsZTsgaXQgaXMgbm90IG5lY2Vzc2FyeSB0bworICAgY2hlY2sgdGhlIGhlYWRlciBvZiBldmVyeSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gdG8gY2hlY2sgdGhhdCBhCisgICBkaXN0cmlidXRpb24gbWVldHMgdGhlc2UgcmVxdWlyZW1lbnRzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODMzMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuMQpAQCAtMCwwICsxLDMxNiBAQAorCisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4xICAxOTk5LTA3LTEwCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoCit0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91cgorcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQKK2V2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguICBUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XCitUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRWAsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsCitleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nCitkaXN0cmlidXRpbmcgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGBUaGUgUHJvZ3JhbWAgcmVmZXJzIHRvIGFueSBwcm9ncmFtCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZC4gIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeQorYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZW1zZWx2ZXMsIGJ1dCAqbm8qIGZpbGUgb2YgVGhlCitQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuICBBIGRpc3RyaWJ1dG9yIHdpc2hpbmcKK3RvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZQorbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbQordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC4KKworWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbAorbm90aWNlIGZvcmJpZGRpbmcgbW9kaWZpY2F0aW9uIG9mIHRoYXQgZmlsZS4KKworWW91IG1heSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpZiwgYW5kIG9ubHkgaWYsIHRoZQorZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiBZb3UgbXVzdCBtZWV0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYm9ybmUgYnkgdGhlIGZpbGUgb24gdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGJlbG93CisgICAgIGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZgorICAgICBUaGUgUHJvZ3JhbWAuCisgCisgIDIuIElmIHRoZSBmaWxlIGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSwgdGhlbiB5b3UgbXVzdCBtZWV0IGFueQorICAgICBhcHBsaWNhYmxlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQKKyAgICAgdmVyc2lvbiBvZiB0aGUgZmlsZSB0aGF0IGFyZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlc2AuCisgCisgIDMuIFlvdSBtdXN0IG5vdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICBvcmlnaW5hbCBmaWxlLgorIAorICA0LiBJbiB0aGUgbW9kaWZpZWQgZmlsZSwgeW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIGF1dGhvcnNoaXAgYW5kCisgICAgIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmFtZSAoaWYgYW55KSBvZiB0aGUgcHJvZ3JhbQorICAgICB3aGljaCBjb250YWlucyBpdC4KKyAKKyAgNS4gWW91IG11c3QgY2hhbmdlIGFueSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgaW4gdGhlIGZpbGUgdG8gaW5kaWNhdGUKKyAgICAgY2xlYXJseSB0aGF0IHRoZSBtb2RpZmllZCBmaWxlIGlzIG5vdCBwYXJ0IG9mIFRoZSBQcm9ncmFtLgorIAorICA2LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGFkZHJlc3NlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBmb3IgdGhlCisgICAgIHJlcG9ydGluZyBvZiBlcnJvcnMgaW4gdGhlIGZpbGUgb3IgaW4gVGhlIFByb2dyYW0gZ2VuZXJhbGx5IHRvCisgICAgIGVuc3VyZSB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vIGxvbmdlciBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICBtYWludGFpbmVycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUgbW9kaWZpZWQKKyAgICAgZmlsZXMuCisgCisgIDcuIFlvdSBtdXN0IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcworICAgICBkaXN0cmlidXRpb24gYm90aCBvZiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgb2YgYW55IGZpbGVzIGRlcml2ZWQKKyAgICAgZnJvbSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAKKyAgOC4gWW91IG11c3QgZG8gZWl0aGVyIChBKSBvciAoQik6CisKKyAgICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsCisgICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQKKyAgICAgICAgICAgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieQorICAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZAorICAgICAgICAgICBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtCisgICAgICAgICAgIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkCisgICAgICAgICAgIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICBtb2RpZmllZCBmaWxlOworCisgICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07CisgICAgICAgICAgIGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKKyAgICAgICAgICAgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgCisgICAgICAgICAgIFRoZSBQcm9ncmFtIGZyZWUgb2YgY2hhcmdlIChlaXRoZXIgdGhlIHZlcnNpb24gZnJvbSB3aGljaAorICAgICAgICAgICB5b3VyIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBvciBwZXJoYXBzIGEgbGF0ZXIgdmVyc2lvbikuCisKK05vdGUgdGhhdCBpbiB0aGUgYWJvdmUsIGBkaXN0cmlidXRpb25gIG9mIGEgZmlsZSBtZWFucyBtYWtpbmcgdGhlCitmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiAgVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLAoraW5zdGFsbGluZyB0aGUgZmlsZSBvbiBhbnkgbWFjaGluZSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGZpbGUgaXMKK2FjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gIGBNb2RpZmljYXRpb25gIG9mIGEgZmlsZQorbWVhbnMgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgZGVyaXZhdGl2ZSBmaWxlIHVuZGVyIGFueQorYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IKK2Egc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGZpbGUgaXMgY29uc2lkZXJlZCB0byBiZSBhIG1vZGlmaWNhdGlvbiBvZgordGhlIGZpbGUuCisKK1RoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUKK2FwcGxpZWQgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWJvdmUgY29uZGl0aW9ucy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8KK2FueSBzdWNoIG1vZGlmaWVkIGZpbGUuCisKK1RoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0IGJlY29tZXMKK2lkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLgorCisgCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBlaWdodCBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBmaWxlLiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWVkIGZpbGVzIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGU7IG9yIGl0IG1heQorbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUKK3RoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mCit0aGlzIGxpY2Vuc2UuICBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weQorb2YgVGhlIFByb2dyYW0gaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuICBNYW55IHByb2dyYW1zIHByb3ZpZGUKK3dheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzCitsaWNlbnNlZCBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gaW5kaXZpZHVhbCBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB0aGF0CitzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGlmLCBhbmQgb25seQoraWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZQorZmlsZSBvciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlIGNvbmRpdGlvbnMKK29uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoCityZXNwZWN0IHRvIHRoZSBraW5kIGFuZCBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9mIHRob3NlIGZpbGVzIHRoYXQKK2lzIGFsbG93ZWQsIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucworb2YgdGhvc2UgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywKK2lmIGl0IGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSksIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25kaXRpb25zLCB3aGljaCBzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMKK2Fib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjoKKworICAtIFlvdSBtYXkgbm90IG1vZGlmeSBhbnkgZmlsZSB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmluc2Agc2luY2UKKyAgICB0aGVzZSBhcmUgaW5zdGFsbGF0aW9uIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUKKyAgICBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuCisgCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5mZGAgKExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcykgdW5kZXIgdGhlIHN0YW5kYXJkCisgICAgY29uZGl0aW9ucyBvZiB0aGUgTFBQTCBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgIHN1Y2ggbW9kaWZpZWQgTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMKKyAgICBwcm92aWRlZCB0aGF0OgorICAgICgxKSB0aGUgb25seSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcyBlaXRoZXIgZW5hYmxlIHVzZSBvZgorICAgICAgICBhdmFpbGFibGUgZm9udHMgb3IgcHJldmVudCBhdHRlbXB0cyB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHM7CisgICAgKDIpIHlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZpbGVzIChUZVggaW5wdXQKKyAgICAgICAgcGF0aHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBzZXQgb2YgTGFUZVggZm9udCBkZWZpbml0aW9uCisgICAgICAgIGZpbGVzIGlzIGFjdHVhbGx5IHVzZWQgYnkgVGVYKS4KKworICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuY2ZnYCAoY29uZmlndXJhdGlvbiBmaWxlcykgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcy4KKyAgICBUaGUgUHJvZ3JhbSBtYXkgKGFuZCB1c3VhbGx5IHdpbGwpIHNwZWNpZnkgdGhlIHJhbmdlIG9mIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorIAorQmVjYXVzZSBvZiBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGlzc3VlcyBpbiBMYVRlWCBzb2Z0d2FyZSwKK1RoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YKK2NvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLAorYnV0IHN1Y2ggZGlzdHJpYnV0aW9uIGNhbiBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKK2EgcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgVGhlIFByb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UKK2Fzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IKK2FueSBhdXRob3IgbmFtZWQgaW4gdGhlIGZpbGVzIG9mIFRoZSBQcm9ncmFtLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBiZWxvdywgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCitwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdWAgaW4KK3RoaXMgc2VjdGlvbi4KKworCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHByb2dyYW0geW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvCit0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciBwcm9ncmFtIGJ1dCBpbnN0ZWFkIGRpc3RyaWJ1dGUgeW91cgorcHJvZ3JhbSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlCithcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8KK3RoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciBwcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHByb2dyYW0gaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGZpbGVzIG9mIHlvdXIgcHJvZ3JhbSBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvCithIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpcworY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4xCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMSBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYIAorICAlIHZlcnNpb24gMTk5OS8wNi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbgordGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIGBUaGUgUHJvZ3JhbWAgcmVmZXJyaW5nIHRvIHRoZQordHdvIGZpbGVzIGBwaWcuZHR4YCBhbmQgYHBpZy5pbnNgLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyYCByZWZlcnJpbmcKK3RvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgVGhlIFByb2dyYW0KKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIFRoZSBQcm9ncmFtIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0uICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgVGhlIFByb2dyYW0uCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgbGlrZQorCisgICAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLgorCisgTm90aW5nIEV4Y2VwdGlvbmFsIEZpbGVzCisgIAorICAgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24sIG9yIG9uIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgb2YgdGhvc2UKKyAgIGZpbGVzIChvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYCisgICBTb2Z0d2FyZSBGaWxlc2ApLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhCisgICBwcm9taW5lbnQgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMsIGFuZCBlaXRoZXIKKyAgIGxpc3RzIHRoZSBleGNlcHRpb25hbCBmaWxlcyBvciBkZWZpbmVzIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgb2YKKyAgIGV4Y2VwdGlvbmFsIGZpbGVzLgorCisgICBGaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZQorICAgb2Z0ZW4gZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbi4gIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uCisgICBgLmNmZ2ApIGFyZSBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIGxlc3MgcmVzdHJpY3RpdmUgY29uZGl0aW9ucworICAgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUKKyAgIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiBMYVRlWCBzb2Z0d2FyZSBnaXZlbiBhYm92ZSBhcmUgZXhhbXBsZXMgCisgICBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwKKyAgIGNvbmRpdGlvbnMuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5MWE0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0xQUEwtMS4yCkBAIC0wLDAgKzEsMzIwIEBACisKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK0xQUEwgVmVyc2lvbiAxLjIgIDE5OTktMDktMDMKKworQ29weXJpZ2h0IDE5OTkgTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIGxpY2Vuc2UgdW5kZXIgd2hpY2ggdGhlCitiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBpcyBkaXN0cmlidXRlZC4KKworWW91IG1heSB1c2UgdGhpcyBsaWNlbnNlIGZvciBhbnkgcHJvZ3JhbSB0aGF0IHlvdSBoYXZlIHdyaXR0ZW4gYW5kIHdpc2gKK3RvIGRpc3RyaWJ1dGUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseSBzdWl0YWJsZSBpZiB5b3VyCitwcm9ncmFtIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dCB5b3UgbWF5IHVzZSBpdAorZXZlbiBpZiB5b3VyIHByb2dyYW0gaXMgdW5yZWxhdGVkIHRvIFRlWC4gIFRoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cKK1RPIERJU1RSSUJVVEUgUFJPR1JBTVMgVU5ERVIgVEhJUyBMSUNFTlNFYCwgYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywKK2V4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcKK2Rpc3RyaWJ1dGluZyB0aGVpciBwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK0luIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYFRoZSBQcm9ncmFtYCByZWZlcnMgdG8gYW55IHByb2dyYW0KK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggVGhlIFByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkCithbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmUKK2Rpc3RyaWJ1dGVkLiAgSW5kaXZpZHVhbCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSBtYXkgYmVhciBzdXBwbGVtZW50YXJ5CithbmQvb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiBtb2RpZmljYXRpb24gb2YgdGhlbXNlbHZlcyBhbmQgb24gdGhlCitkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlbXNlbHZlcywgYnV0ICpubyogZmlsZSBvZiBUaGUKK1Byb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeSBvciBzdXBlcnNlZGluZyBjb25kaXRpb25zIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGUgZmlsZS4gIEEgZGlzdHJpYnV0b3Igd2lzaGluZwordG8gZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlCituZWVkcyB0byBjaGVjayB0aGUgY29uZGl0aW9ucyBvbmx5IGluIHRoaXMgbGljZW5zZSBhbmQgbm93aGVyZSBlbHNlLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgVGhlIFByb2dyYW0KK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgSW4KK3BhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyBUaGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZC4KKworV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91Cit0aGUgZnJlZWRvbSB0byBtYWtlIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoZSBQcm9ncmFtCit0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91IHdpc2ggd2hpbGUKK21haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mCitUaGUgUHJvZ3JhbS4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZSAKK21lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4YAoraW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitDT05ESVRJT05TIE9OIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgVGhlIFByb2dyYW0uCitEaXN0cmlidXRpb24gb2Ygb25seSBwYXJ0IG9mIFRoZSBQcm9ncmFtIGlzIG5vdCBhbGxvd2VkLgorCitZb3UgbWF5IG5vdCBtb2RpZnkgaW4gYW55IHdheSBhIGZpbGUgb2YgVGhlIFByb2dyYW0gdGhhdCBiZWFycyBhIGxlZ2FsCitub3RpY2UgZm9yYmlkZGluZyBtb2RpZmljYXRpb24gb2YgdGhhdCBmaWxlLgorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBtb2RpZmllZCBmaWxlIG9mIFRoZSBQcm9ncmFtIGlmLCBhbmQgb25seSBpZiwgdGhlCitmb2xsb3dpbmcgZWlnaHQgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgIDEuIFlvdSBtdXN0IG1lZXQgYW55IGFkZGl0aW9uYWwgY29uZGl0aW9ucyBib3JuZSBieSB0aGUgZmlsZSBvbiB0aGUKKyAgICAgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZSBhcyBkZXNjcmliZWQgYmVsb3cKKyAgICAgaW4gdGhlIHN1YnNlY3Rpb24gYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mCisgICAgIFRoZSBQcm9ncmFtYC4KKyAKKyAgMi4gSWYgdGhlIGZpbGUgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlLCB0aGVuIHlvdSBtdXN0IG1lZXQgYW55CisgICAgIGFwcGxpY2FibGUgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZAorICAgICB2ZXJzaW9uIG9mIHRoZSBmaWxlIHRoYXQgYXJlIGRlc2NyaWJlZCBiZWxvdyBpbiB0aGUgc3Vic2VjdGlvbgorICAgICBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzYC4KKyAKKyAgMy4gWW91IG11c3Qgbm90IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgd2l0aCB0aGUgZmlsZW5hbWUgb2YgdGhlCisgICAgIG9yaWdpbmFsIGZpbGUuCisgCisgIDQuIEluIHRoZSBtb2RpZmllZCBmaWxlLCB5b3UgbXVzdCBhY2tub3dsZWRnZSB0aGUgYXV0aG9yc2hpcCBhbmQKKyAgICAgbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZSwgYW5kIHRoZSBuYW1lIChpZiBhbnkpIG9mIHRoZSBwcm9ncmFtCisgICAgIHdoaWNoIGNvbnRhaW5zIGl0LgorIAorICA1LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGlkZW50aWZpY2F0aW9uIHN0cmluZyBpbiB0aGUgZmlsZSB0byBpbmRpY2F0ZQorICAgICBjbGVhcmx5IHRoYXQgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbm90IHBhcnQgb2YgVGhlIFByb2dyYW0uCisgCisgIDYuIFlvdSBtdXN0IGNoYW5nZSBhbnkgYWRkcmVzc2VzIGluIHRoZSBtb2RpZmllZCBmaWxlIGZvciB0aGUKKyAgICAgcmVwb3J0aW5nIG9mIGVycm9ycyBpbiB0aGUgZmlsZSBvciBpbiBUaGUgUHJvZ3JhbSBnZW5lcmFsbHkgdG8KKyAgICAgZW5zdXJlIHRoYXQgcmVwb3J0cyBmb3IgZmlsZXMgbm8gbG9uZ2VyIG1haW50YWluZWQgYnkgdGhlIG9yaWdpbmFsCisgICAgIG1haW50YWluZXJzIHdpbGwgYmUgZGlyZWN0ZWQgdG8gdGhlIG1haW50YWluZXJzIG9mIHRoZSBtb2RpZmllZAorICAgICBmaWxlcy4KKyAKKyAgNy4gWW91IG11c3QgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgZmlsZSB1bmRlciBhIGxpY2Vuc2UgdGhhdCBmb3JiaWRzCisgICAgIGRpc3RyaWJ1dGlvbiBib3RoIG9mIHRoZSBtb2RpZmllZCBmaWxlIGFuZCBvZiBhbnkgZmlsZXMgZGVyaXZlZAorICAgICBmcm9tIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorIAorICA4LiBZb3UgbXVzdCBkbyBlaXRoZXIgKEEpIG9yIChCKToKKworICAgICAgIChBKSBkaXN0cmlidXRlIGEgY29weSBvZiBUaGUgUHJvZ3JhbSAodGhhdCBpcywgYSBjb21wbGV0ZSwKKyAgICAgICAgICAgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtKSB0b2dldGhlciB3aXRoIHRoZSBtb2RpZmllZAorICAgICAgICAgICBmaWxlOyBpZiB5b3VyIGRpc3RyaWJ1dGlvbiBvZiB0aGUgbW9kaWZpZWQgZmlsZSBpcyBtYWRlIGJ5CisgICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBmaWxlIGZyb20gYSBkZXNpZ25hdGVkCisgICAgICAgICAgIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgVGhlIFByb2dyYW0KKyAgICAgICAgICAgZnJvbSB0aGUgc2FtZSBwbGFjZSBtZWV0cyB0aGlzIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQKKyAgICAgICAgICAgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IFRoZSBQcm9ncmFtIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgIG1vZGlmaWVkIGZpbGU7CisKKyAgICAgICAoQikgcHJvdmlkZSB0byB0aG9zZSB3aG8gcmVjZWl2ZSB0aGUgbW9kaWZpZWQgZmlsZSBpbmZvcm1hdGlvbgorICAgICAgICAgICB0aGF0IGlzIHN1ZmZpY2llbnQgZm9yIHRoZW0gdG8gb2J0YWluIGEgY29weSBvZiBUaGUgUHJvZ3JhbTsKKyAgICAgICAgICAgZm9yIGV4YW1wbGUsIHlvdSBtYXkgcHJvdmlkZSBhIFVuaWZvcm0gUmVzb3VyY2UgTG9jYXRvciAoVVJMKQorICAgICAgICAgICBmb3IgYSBzaXRlIHRoYXQgeW91IGV4cGVjdCB3aWxsIHByb3ZpZGUgdGhlbSB3aXRoIGEgY29weSBvZiAKKyAgICAgICAgICAgVGhlIFByb2dyYW0gZnJlZSBvZiBjaGFyZ2UgKGVpdGhlciB0aGUgdmVyc2lvbiBmcm9tIHdoaWNoCisgICAgICAgICAgIHlvdXIgbW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIG9yIHBlcmhhcHMgYSBsYXRlciB2ZXJzaW9uKS4KKworTm90ZSB0aGF0IGluIHRoZSBhYm92ZSwgYGRpc3RyaWJ1dGlvbmAgb2YgYSBmaWxlIG1lYW5zIG1ha2luZyB0aGUKK2ZpbGUgYXZhaWxhYmxlIHRvIG90aGVycyBieSBhbnkgbWVhbnMuICBUaGlzIGluY2x1ZGVzLCBmb3IgaW5zdGFuY2UsCitpbnN0YWxsaW5nIHRoZSBmaWxlIG9uIGFueSBtYWNoaW5lIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGUgZmlsZSBpcworYWNjZXNzaWJsZSBieSB1c2VycyBvdGhlciB0aGFuIHlvdXJzZWxmLiAgYE1vZGlmaWNhdGlvbmAgb2YgYSBmaWxlCittZWFucyBhbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBkZXJpdmF0aXZlIGZpbGUgdW5kZXIgYW55CithcHBsaWNhYmxlIGxhdyAtLSB0aGF0IGlzLCBhIGZpbGUgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgZmlsZSBvcgorYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zCithbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0NoYW5naW5nIHRoZSBuYW1lIG9mIGEgZmlsZSAob3RoZXIgdGhhbiBhcyBuZWNlc3NpdGF0ZWQgYnkgdGhlIGZpbGUKK2NvbnZlbnRpb25zIG9mIHRoZSB0YXJnZXQgZmlsZSBzeXN0ZW1zKSBpcyBjb25zaWRlcmVkIHRvIGJlIGEKK21vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZS4KKworVGhlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZSBkbyBub3QgaGF2ZSB0byBiZQorYXBwbGllZCB0byBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCithYm92ZSBjb25kaXRpb25zLiAgTm90ZSwgaG93ZXZlciwgdGhhdCBDb25kaXRpb24gNy4gZG9lcyBhcHBseSB0bworYW55IHN1Y2ggbW9kaWZpZWQgZmlsZS4KKworVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSB1cGRhdGluZywgYnkgYW55IG1ldGhvZCwgb2YgYSBmaWxlIHNvIHRoYXQgaXQgYmVjb21lcworaWRlbnRpY2FsIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGF0IGZpbGUgb2YgVGhlIFByb2dyYW0uCisKKyAKKworQSBSZWNvbW1lbmRhdGlvbiBvbiBNb2RpZmljYXRpb24gV2l0aG91dCBEaXN0cmlidXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHdpc2UgbmV2ZXIgdG8gbW9kaWZ5IGEgZmlsZSBvZiBUaGUgUHJvZ3JhbSwgZXZlbiBmb3IgeW91ciBvd24KK3BlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGVpZ2h0IGNvbmRpdGlvbnMgZm9yCitkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIGZpbGUuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpZWQgZmlsZXMgd2lsbCBuZXZlciBiZSBkaXN0cmlidXRlZCwgb2Z0ZW4gdGhpcyB3aWxsIGhhcHBlbiBieQorYWNjaWRlbnQgLS0geW91IG1heSBmb3JnZXQgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgZmlsZTsgb3IgaXQgbWF5Citub3Qgb2NjdXIgdG8geW91IHdoZW4gYWxsb3dpbmcgb3RoZXJzIHRvIGFjY2VzcyB0aGUgbW9kaWZpZWQgZmlsZQordGhhdCB5b3UgYXJlIHRodXMgZGlzdHJpYnV0aW5nIGl0IGFuZCB2aW9sYXRpbmcgdGhlIGNvbmRpdGlvbnMgb2YKK3RoaXMgbGljZW5zZS4gIEl0IGlzIHVzdWFsbHkgaW4geW91ciBiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5CitvZiBUaGUgUHJvZ3JhbSBpZGVudGljYWwgd2l0aCB0aGUgcHVibGljIG9uZS4gIE1hbnkgcHJvZ3JhbXMgcHJvdmlkZQord2F5cyB0byBjb250cm9sIHRoZSBiZWhhdmlvciBvZiB0aGF0IHByb2dyYW0gd2l0aG91dCBhbHRlcmluZyBpdHMKK2xpY2Vuc2VkIGZpbGVzLgorCisKK0FkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBJbmRpdmlkdWFsIEZpbGVzIG9mIFRoZSBQcm9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBpbmRpdmlkdWFsIGZpbGUgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgYWRkaXRpb25hbCBjb25kaXRpb25zIHRoYXQKK3N1cHBsZW1lbnQgYW5kL29yIHN1cGVyc2VkZSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgaWYsIGFuZCBvbmx5CitpZiwgc3VjaCBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgZXhjbHVzaXZlbHkgY29uY2VybiBtb2RpZmljYXRpb24gb2YgdGhlCitmaWxlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUgY29uZGl0aW9ucworb24gaW5kaXZpZHVhbCBmaWxlcyBvZiBUaGUgUHJvZ3JhbSB0aGVyZWZvcmUgbWF5IGRpZmZlciBvbmx5IHdpdGgKK3Jlc3BlY3QgdG8gdGhlIGtpbmQgYW5kIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb2YgdGhvc2UgZmlsZXMgdGhhdAoraXMgYWxsb3dlZCwgYW5kIHdpdGggcmVzcGVjdCB0byB0aGUgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zCitvZiB0aG9zZSBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVggU29mdHdhcmUgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhIGZpbGUgb2YgVGhlIFByb2dyYW0gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIExhVGVYICh0aGF0IGlzLAoraWYgaXQgaXMgYSBMYVRlWCBzb2Z0d2FyZSBmaWxlKSwgdGhlbiB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwKK2NvbmRpdGlvbnMsIHdoaWNoIHN1cHBsZW1lbnQgYW5kL29yIHN1cGVyc2VkZSB0aGUgY29uZGl0aW9ucworYWJvdmUsIGFwcGx5IHRvIHRoZSBmaWxlIGFjY29yZGluZyB0byBpdHMgZmlsZW5hbWUgZXh0ZW5zaW9uOgorCisgIC0gWW91IG1heSBub3QgbW9kaWZ5IGFueSBmaWxlIHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uIGAuaW5zYCBzaW5jZQorICAgIHRoZXNlIGFyZSBpbnN0YWxsYXRpb24gZmlsZXMgY29udGFpbmluZyB0aGUgbGVnYWwgbm90aWNlcyB0aGF0IGFyZQorICAgIHBsYWNlZCBpbiB0aGUgZmlsZXMgdGhleSBnZW5lcmF0ZS4KKyAKKyAgLSBZb3UgbWF5IGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZmlsZXMgd2l0aCBmaWxlbmFtZQorICAgIGV4dGVuc2lvbiBgLmZkYCAoTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzKSB1bmRlciB0aGUgc3RhbmRhcmQKKyAgICBjb25kaXRpb25zIG9mIHRoZSBMUFBMIGFzIGRlc2NyaWJlZCBhYm92ZS4gIFlvdSBtYXkgYWxzbyBkaXN0cmlidXRlCisgICAgc3VjaCBtb2RpZmllZCBMYVRlWCBmb250IGRlZmluaXRpb24gZmlsZXMgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcworICAgIHByb3ZpZGVkIHRoYXQ6CisgICAgKDEpIHRoZSBvbmx5IGNoYW5nZXMgdG8gdGhlIG9yaWdpbmFsIGZpbGVzIGVpdGhlciBlbmFibGUgdXNlIG9mCisgICAgICAgIGF2YWlsYWJsZSBmb250cyBvciBwcmV2ZW50IGF0dGVtcHRzIHRvIGFjY2VzcyB1bmF2YWlsYWJsZSBmb250czsKKyAgICAoMikgeW91IGFsc28gZGlzdHJpYnV0ZSB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgZmlsZXMgKFRlWCBpbnB1dAorICAgICAgICBwYXRocyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHdoaWNoIHNldCBvZiBMYVRlWCBmb250IGRlZmluaXRpb24KKyAgICAgICAgZmlsZXMgaXMgYWN0dWFsbHkgdXNlZCBieSBUZVgpLgorCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5jZmdgIChjb25maWd1cmF0aW9uIGZpbGVzKSB3aXRoIHRoZWlyIG9yaWdpbmFsIG5hbWVzLgorICAgIFRoZSBQcm9ncmFtIG1heSAoYW5kIHVzdWFsbHkgd2lsbCkgc3BlY2lmeSB0aGUgcmFuZ2Ugb2YgY29tbWFuZHMKKyAgICB0aGF0IGFyZSBhbGxvd2VkIGluIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGZpbGUuCisgCitCZWNhdXNlIG9mIHBvcnRhYmlsaXR5IGFuZCBleGNoYW5nZWFiaWxpdHkgaXNzdWVzIGluIExhVGVYIHNvZnR3YXJlLAorVGhlIExhVGVYMyBQcm9qZWN0IGRlcHJlY2F0ZXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZgorY29tcG9uZW50cyBvZiBMYVRlWCBvciBvZiBnZW5lcmFsbHkgYXZhaWxhYmxlIGNvbnRyaWJ1dGVkIGNvZGUgZm9yIHRoZW0sCitidXQgc3VjaCBkaXN0cmlidXRpb24gY2FuIG1lZXQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLgorCisKK05PIFdBUlJBTlRZCis9PT09PT09PT09PQorCitUaGVyZSBpcyBubyB3YXJyYW50eSBmb3IgVGhlIFByb2dyYW0uICBFeGNlcHQgd2hlbiBvdGhlcndpc2Ugc3RhdGVkIGluCit3cml0aW5nLCBUaGUgQ29weXJpZ2h0IEhvbGRlciBwcm92aWRlcyBUaGUgUHJvZ3JhbSBgYXMgaXNgLCB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QKK2xpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvcgorYSBwYXJ0aWN1bGFyIHB1cnBvc2UuICBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlCitvZiBUaGUgUHJvZ3JhbSBpcyB3aXRoIHlvdS4gIFNob3VsZCBUaGUgUHJvZ3JhbSBwcm92ZSBkZWZlY3RpdmUsIHlvdQorYXNzdW1lIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIsIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvcgorYW55IGF1dGhvciBuYW1lZCBpbiB0aGUgZmlsZXMgb2YgVGhlIFByb2dyYW0sIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5CitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgVGhlIFByb2dyYW0gYXMgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8KK3lvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yCitjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgYW55IHVzZSBvZiBUaGUgUHJvZ3JhbSBvciBvdXQgb2YKK2luYWJpbGl0eSB0byB1c2UgVGhlIFByb2dyYW0gKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBsb3NzIG9mCitkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgYW55b25lIGFzCithIHJlc3VsdCBvZiBhbnkgZmFpbHVyZSBvZiBUaGUgUHJvZ3JhbSB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyCitwcm9ncmFtcyksIGV2ZW4gaWYgVGhlIENvcHlyaWdodCBIb2xkZXIgb3Igc2FpZCBhdXRob3Igb3Igc2FpZCBvdGhlcgorcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3Byb2dyYW1zIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91YCBpbgordGhpcyBzZWN0aW9uLgorCisKK0Nob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgZm9yIGFueSBwYXJ0IG9mIHlvdXIgcHJvZ3JhbSB5b3Ugd2FudCBvciBuZWVkIHRvIHVzZSAqZGlzdHJpYnV0aW9uKgorY29uZGl0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbiBkbyBub3QgcmVmZXIgdG8KK3RoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHByb2dyYW0gYnV0IGluc3RlYWQgZGlzdHJpYnV0ZSB5b3VyCitwcm9ncmFtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UuICBZb3UgbWF5IHVzZSB0aGUgdGV4dCBvZiB0aGlzIGxpY2Vuc2UKK2FzIGEgbW9kZWwgZm9yIHlvdXIgb3duIGxpY2Vuc2UsIGJ1dCB5b3VyIGxpY2Vuc2Ugc2hvdWxkIG5vdCByZWZlciB0bwordGhlIExQUEwgb3Igb3RoZXJ3aXNlIGdpdmUgdGhlIGltcHJlc3Npb24gdGhhdCB5b3VyIHByb2dyYW0gaXMKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMLgorCitUaGUgZG9jdW1lbnQgYG1vZGd1aWRlLnRleGAgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGV4cGxhaW5zCit0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLiAgSXQgZXhwbGFpbnMsCitmb3IgZXhhbXBsZSwgd2h5IGRpc3RyaWJ1dGluZyBMYVRlWCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIChHUEwpIHdhcyBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUuICBFdmVuIGlmIHlvdXIgcHJvZ3JhbSBpcwordW5yZWxhdGVkIHRvIExhVGVYLCB0aGUgZGlzY3Vzc2lvbiBpbiBgbW9kZ3VpZGUudGV4YCBtYXkgc3RpbGwgYmUKK3JlbGV2YW50LCBhbmQgYXV0aG9ycyBpbnRlbmRpbmcgdG8gZGlzdHJpYnV0ZSB0aGVpciBwcm9ncmFtcyB1bmRlciBhbnkKK2xpY2Vuc2UgYXJlIGVuY291cmFnZWQgdG8gcmVhZCBpdC4KKworCitIb3cgdG8gVXNlIFRoaXMgTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIHRoaXMgbGljZW5zZSwgcGxhY2UgaW4gZWFjaCBvZiB0aGUgZmlsZXMgb2YgeW91ciBwcm9ncmFtIGJvdGgKK2FuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIgYW5kIGFsc28KK2Egc3RhdGVtZW50IHRoYXQgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGlzCitjb25zdHJhaW5lZCBieSB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQ6CisKKyAgJSUgcGlnLmR0eAorICAlJSBDb3B5cmlnaHQgMjAwMSBNLiBZLiBOYW1lCisgICUKKyAgJSBUaGlzIHByb2dyYW0gbWF5IGJlIGRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlciB0aGUKKyAgJSBjb25kaXRpb25zIG9mIHRoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlLCBlaXRoZXIgdmVyc2lvbiAxLjIKKyAgJSBvZiB0aGlzIGxpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgJSBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGluCisgICUgICBodHRwOi8vd3d3LmxhdGV4LXByb2plY3Qub3JnL2xwcGwudHh0CisgICUgYW5kIHZlcnNpb24gMS4yIG9yIGxhdGVyIGlzIHBhcnQgb2YgYWxsIGRpc3RyaWJ1dGlvbnMgb2YgTGFUZVggCisgICUgdmVyc2lvbiAxOTk5LzEyLzAxIG9yIGxhdGVyLgorICAlCisgICUgVGhpcyBwcm9ncmFtIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisKK0dpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zIGdpdmVuIGluCit0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgd291bGQgYXBwbHksIHdpdGggYFRoZSBQcm9ncmFtYCByZWZlcnJpbmcgdG8gdGhlCit0d28gZmlsZXMgYHBpZy5kdHhgIGFuZCBgcGlnLmluc2AsIGFuZCBgVGhlIENvcHlyaWdodCBIb2xkZXJgIHJlZmVycmluZwordG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZWAuCisKKworSW1wb3J0YW50IFJlY29tbWVuZGF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgRGVmaW5pbmcgV2hhdCBDb25zdGl0dXRlcyBUaGUgUHJvZ3JhbQorCisgICBUaGUgTFBQTCByZXF1aXJlcyB0aGF0IGRpc3RyaWJ1dGlvbnMgb2YgVGhlIFByb2dyYW0gY29udGFpbiBhbGwgdGhlCisgICBmaWxlcyBvZiBUaGUgUHJvZ3JhbS4gIEl0IGlzIHRoZXJlZm9yZSBpbXBvcnRhbnQgdGhhdCB5b3UgcHJvdmlkZSBhCisgICB3YXkgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgY29uc3RpdHV0ZSBUaGUgUHJvZ3JhbS4KKyAgIFRoaXMgY291bGQsIGZvciBleGFtcGxlLCBiZSBhY2hpZXZlZCBieSBleHBsaWNpdGx5IGxpc3RpbmcgYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0gbmVhciB0aGUgY29weXJpZ2h0IG5vdGljZSBvZiBlYWNoIGZpbGUgb3IgYnkKKyAgIHVzaW5nIGEgbGluZSBsaWtlCisKKyAgICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKworICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgVGhlIFByb2dyYW0uCisKKyBOb3RpbmcgRXhjZXB0aW9uYWwgRmlsZXMKKyAgCisgICBJZiBUaGUgUHJvZ3JhbSBjb250YWlucyBhbnkgZmlsZXMgYmVhcmluZyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbiwgb3Igb24gZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zLCBvZiB0aG9zZQorICAgZmlsZXMgKG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGluIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gTGFUZVgKKyAgIFNvZnR3YXJlIEZpbGVzYCksIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBUaGUgUHJvZ3JhbSBjb250YWluIGEKKyAgIHByb21pbmVudCBmaWxlIHRoYXQgZGVmaW5lcyB0aGUgZXhjZXB0aW9uYWwgY29uZGl0aW9ucywgYW5kIGVpdGhlcgorICAgbGlzdHMgdGhlIGV4Y2VwdGlvbmFsIGZpbGVzIG9yIGRlZmluZXMgb25lIG9yIG1vcmUgY2F0ZWdvcmllcyBvZgorICAgZXhjZXB0aW9uYWwgZmlsZXMuCisKKyAgIEZpbGVzIGNvbnRhaW5pbmcgdGhlIHRleHQgb2YgYSBsaWNlbnNlIChzdWNoIGFzIHRoaXMgZmlsZSkgYXJlCisgICBvZnRlbiBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIG1vcmUgcmVzdHJpY3RpdmUgY29uZGl0aW9ucyBvbgorICAgbW9kaWZpY2F0aW9uLiAgTGFUZVggY29uZmlndXJhdGlvbiBmaWxlcyAod2l0aCBmaWxlbmFtZSBleHRlbnNpb24KKyAgIGAuY2ZnYCkgYXJlIGV4YW1wbGVzIG9mIGZpbGVzIGJlYXJpbmcgbGVzcyByZXN0cmljdGl2ZSBjb25kaXRpb25zCisgICBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgZmlsZS4gIFRoZQorICAgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uIExhVGVYIHNvZnR3YXJlIGdpdmVuIGFib3ZlIGFyZSBleGFtcGxlcyAKKyAgIG9mIGRlY2xhcmluZyBhIGNhdGVnb3J5IG9mIGZpbGVzIGJlYXJpbmcgZXhjZXB0aW9uYWwgYWRkaXRpb25hbAorICAgY29uZGl0aW9ucy4KKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTFBQTC0xLjNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NWUzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MUFBMLTEuM2MKQEAgLTAsMCArMSw0MTggQEAKKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK0xQUEwgVmVyc2lvbiAxLjNjICAyMDA4LTA1LTA0CisKK0NvcHlyaWdodCAxOTk5IDIwMDItMjAwOCBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgcHJpbWFyeSBsaWNlbnNlIHVuZGVyCit3aGljaCB0aGUgTGFUZVgga2VybmVsIGFuZCB0aGUgYmFzZSBMYVRlWCBwYWNrYWdlcyBhcmUgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHdvcmsgb2Ygd2hpY2ggeW91IGhvbGQgdGhlIGNvcHlyaWdodAorYW5kIHdoaWNoIHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseQorc3VpdGFibGUgaWYgeW91ciB3b3JrIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dCAKK2l0IGlzIHdyaXR0ZW4gaW4gc3VjaCBhIHdheSB0aGF0IHlvdSBjYW4gdXNlIGl0IGV2ZW4gaWYgeW91ciB3b3JrIGlzIAordW5yZWxhdGVkIHRvIFRlWC4KKworVGhlIHNlY3Rpb24gYFdIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRWAsCitiZWxvdywgZ2l2ZXMgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycword2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIgd29ya3MgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitUaGlzIGxpY2Vuc2UgZ2l2ZXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhIHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkCithbmQgbW9kaWZpZWQsIGFzIHdlbGwgYXMgY29uZGl0aW9ucyB1bmRlciB3aGljaCBtb2RpZmllZCB2ZXJzaW9ucyBvZgordGhhdCB3b3JrIG1heSBiZSBkaXN0cmlidXRlZC4KKworV2UsIHRoZSBMYVRlWDMgUHJvamVjdCwgYmVsaWV2ZSB0aGF0IHRoZSBjb25kaXRpb25zIGJlbG93IGdpdmUgeW91Cit0aGUgZnJlZWRvbSB0byBtYWtlIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHlvdXIgd29yawordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgordGhhdCB3b3JrLiAgSWYgeW91IGRvIG5vdCBzZWUgaG93IHRvIGFjaGlldmUgeW91ciBnb2FsIHdoaWxlCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleGAKK2FuZCBgbW9kZ3VpZGUudGV4YCBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZm9yIHN1Z2dlc3Rpb25zLgorCisKK0RFRklOSVRJT05TCis9PT09PT09PT09PQorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgdGhlIGZvbGxvd2luZyB0ZXJtcyBhcmUgdXNlZDoKKworICAgYFdvcmtgCisgICAgQW55IHdvcmsgYmVpbmcgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgIAorICAgYERlcml2ZWQgV29ya2AKKyAgICBBbnkgd29yayB0aGF0IHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBpcyBkZXJpdmVkIGZyb20gdGhlIFdvcmsuCisKKyAgIGBNb2RpZmljYXRpb25gIAorICAgIEFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIERlcml2ZWQgV29yayB1bmRlciBhbnkgYXBwbGljYWJsZQorICAgIGxhdyAtLSBmb3IgZXhhbXBsZSwgdGhlIHByb2R1Y3Rpb24gb2YgYSBmaWxlIGNvbnRhaW5pbmcgYW4KKyAgICBvcmlnaW5hbCBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yayBvciBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YKKyAgICBzdWNoIGEgZmlsZSwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IKKyAgICB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKworICAgYE1vZGlmeWAKKyAgICBUbyBhcHBseSBhbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55CisgICAgYXBwbGljYWJsZSBsYXcuCisgICAgCisgICBgRGlzdHJpYnV0aW9uYAorICAgIE1ha2luZyBjb3BpZXMgb2YgdGhlIFdvcmsgYXZhaWxhYmxlIGZyb20gb25lIHBlcnNvbiB0byBhbm90aGVyLCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQuICBEaXN0cmlidXRpb24gaW5jbHVkZXMgKGJ1dCBpcyBub3QgbGltaXRlZCB0bykKKyAgICBtYWtpbmcgYW55IGVsZWN0cm9uaWMgY29tcG9uZW50cyBvZiB0aGUgV29yayBhY2Nlc3NpYmxlIGJ5CisgICAgZmlsZSB0cmFuc2ZlciBwcm90b2NvbHMgc3VjaCBhcyBGVFAgb3IgSFRUUCBvciBieSBzaGFyZWQgZmlsZQorICAgIHN5c3RlbXMgc3VjaCBhcyBTdW5gcyBOZXR3b3JrIEZpbGUgU3lzdGVtIChORlMpLgorCisgICBgQ29tcGlsZWQgV29ya2AKKyAgICBBIHZlcnNpb24gb2YgdGhlIFdvcmsgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgaW50byBhIGZvcm0gd2hlcmUgaXQKKyAgICBpcyBkaXJlY3RseSB1c2FibGUgb24gYSBjb21wdXRlciBzeXN0ZW0uICBUaGlzIHByb2Nlc3NpbmcgbWF5CisgICAgaW5jbHVkZSB1c2luZyBpbnN0YWxsYXRpb24gZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUgV29yaywKKyAgICB0cmFuc2Zvcm1hdGlvbnMgb2YgdGhlIFdvcmssIGNvcHlpbmcgb2YgY29tcG9uZW50cyBvZiB0aGUgV29yaywgb3IKKyAgICBvdGhlciBhY3Rpdml0aWVzLiAgTm90ZSB0aGF0IG1vZGlmaWNhdGlvbiBvZiBhbnkgaW5zdGFsbGF0aW9uCisgICAgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUgV29yayBjb25zdGl0dXRlcyBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsuCisKKyAgIGBDdXJyZW50IE1haW50YWluZXJgCisgICAgQSBwZXJzb24gb3IgcGVyc29ucyBub21pbmF0ZWQgYXMgc3VjaCB3aXRoaW4gdGhlIFdvcmsuICBJZiB0aGVyZSBpcworICAgIG5vIHN1Y2ggZXhwbGljaXQgbm9taW5hdGlvbiB0aGVuIGl0IGlzIHRoZSBgQ29weXJpZ2h0IEhvbGRlcmAgdW5kZXIKKyAgICBhbnkgYXBwbGljYWJsZSBsYXcuCisKKyAgIGBCYXNlIEludGVycHJldGVyYCAKKyAgICBBIHByb2dyYW0gb3IgcHJvY2VzcyB0aGF0IGlzIG5vcm1hbGx5IG5lZWRlZCBmb3IgcnVubmluZyBvcgorICAgIGludGVycHJldGluZyBhIHBhcnQgb3IgdGhlIHdob2xlIG9mIHRoZSBXb3JrLiAgICAKKworICAgIEEgQmFzZSBJbnRlcnByZXRlciBtYXkgZGVwZW5kIG9uIGV4dGVybmFsIGNvbXBvbmVudHMgYnV0IHRoZXNlCisgICAgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIEJhc2UgSW50ZXJwcmV0ZXIgcHJvdmlkZWQgdGhhdCBlYWNoCisgICAgZXh0ZXJuYWwgY29tcG9uZW50IGNsZWFybHkgaWRlbnRpZmllcyBpdHNlbGYgd2hlbmV2ZXIgaXQgaXMgdXNlZAorICAgIGludGVyYWN0aXZlbHkuICBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgd2hlbiBhcHBseWluZyB0aGUKKyAgICBsaWNlbnNlIHRvIHRoZSBXb3JrLCB0aGUgb25seSBhcHBsaWNhYmxlIEJhc2UgSW50ZXJwcmV0ZXIgaXMgYQorICAgIGBMYVRlWC1Gb3JtYXRgIG9yIGluIHRoZSBjYXNlIG9mIGZpbGVzIGJlbG9uZ2luZyB0byB0aGUgCisgICAgYExhVGVYLWZvcm1hdGAgYSBwcm9ncmFtIGltcGxlbWVudGluZyB0aGUgYFRlWCBsYW5ndWFnZWAuCisKKworCitDT05ESVRJT05TIE9OIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsKK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIGxpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgSW4KK3BhcnRpY3VsYXIsIHRoZSBhY3Qgb2YgcnVubmluZyB0aGUgV29yayBpcyBub3QgcmVzdHJpY3RlZCBhbmQgbm8KK3JlcXVpcmVtZW50cyBhcmUgbWFkZSBjb25jZXJuaW5nIGFueSBvZmZlcnMgb2Ygc3VwcG9ydCBmb3IgdGhlIFdvcmsuCisKKzIuICBZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIHlvdQorcmVjZWl2ZWQgaXQuICBEaXN0cmlidXRpb24gb2Ygb25seSBwYXJ0IG9mIHRoZSBXb3JrIGlzIGNvbnNpZGVyZWQKK21vZGlmaWNhdGlvbiBvZiB0aGUgV29yaywgYW5kIG5vIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgc3VjaCBhIERlcml2ZWQKK1dvcmsgbWF5IGJlIGFzc3VtZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgY2xhdXNlLgorCiszLiAgWW91IG1heSBkaXN0cmlidXRlIGEgQ29tcGlsZWQgV29yayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZCBmcm9tIGEKK2NvbXBsZXRlLCB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIFdvcmsgYXMgZGlzdHJpYnV0ZWQgdW5kZXIgQ2xhdXNlIDIKK2Fib3ZlLCBhcyBsb25nIGFzIHRoYXQgQ29tcGlsZWQgV29yayBpcyBkaXN0cmlidXRlZCBpbiBzdWNoIGEgd2F5IHRoYXQKK3RoZSByZWNpcGllbnRzIG1heSBpbnN0YWxsIHRoZSBDb21waWxlZCBXb3JrIG9uIHRoZWlyIHN5c3RlbSBleGFjdGx5CithcyBpdCB3b3VsZCBoYXZlIGJlZW4gaW5zdGFsbGVkIGlmIHRoZXkgZ2VuZXJhdGVkIGEgQ29tcGlsZWQgV29yaworZGlyZWN0bHkgZnJvbSB0aGUgV29yay4KKworNC4gIElmIHlvdSBhcmUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSwgd2l0aG91dAorcmVzdHJpY3Rpb24sIG1vZGlmeSB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yay4gIFlvdSBtYXkKK2Fsc28gZGlzdHJpYnV0ZSB0aGUgRGVyaXZlZCBXb3JrIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworQ29tcGlsZWQgV29ya3MgZ2VuZXJhdGVkIGZyb20gdGhlIERlcml2ZWQgV29yay4gIERlcml2ZWQgV29ya3MKK2Rpc3RyaWJ1dGVkIGluIHRoaXMgbWFubmVyIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIgYXJlIGNvbnNpZGVyZWQgdG8KK2JlIHVwZGF0ZWQgdmVyc2lvbnMgb2YgdGhlIFdvcmsuCisKKzUuICBJZiB5b3UgYXJlIG5vdCB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrLCB5b3UgbWF5IG1vZGlmeQoreW91ciBjb3B5IG9mIHRoZSBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgRGVyaXZlZCBXb3JrIGJhc2VkIG9uIHRoZSBXb3JrLAorYW5kIGNvbXBpbGUgdGhpcyBEZXJpdmVkIFdvcmssIHRodXMgY3JlYXRpbmcgYSBDb21waWxlZCBXb3JrIGJhc2VkIG9uCit0aGUgRGVyaXZlZCBXb3JrLgorCis2LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heQorZGlzdHJpYnV0ZSBhIERlcml2ZWQgV29yayBwcm92aWRlZCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldAorZm9yIGV2ZXJ5IGNvbXBvbmVudCBvZiB0aGUgV29yayB1bmxlc3MgdGhhdCBjb21wb25lbnQgY2xlYXJseSBzdGF0ZXMKK2luIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXQgaXMgZXhlbXB0IGZyb20gdGhhdCBjb25kaXRpb24uICBPbmx5Cit0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIGFsbG93ZWQgdG8gYWRkIHN1Y2ggc3RhdGVtZW50cyBvZiBleGVtcHRpb24gCit0byBhIGNvbXBvbmVudCBvZiB0aGUgV29yay4gCisKKyAgYS4gSWYgYSBjb21wb25lbnQgb2YgdGhpcyBEZXJpdmVkIFdvcmsgY2FuIGJlIGEgZGlyZWN0IHJlcGxhY2VtZW50CisgICAgIGZvciBhIGNvbXBvbmVudCBvZiB0aGUgV29yayB3aGVuIHRoYXQgY29tcG9uZW50IGlzIHVzZWQgd2l0aCB0aGUKKyAgICAgQmFzZSBJbnRlcnByZXRlciwgdGhlbiwgd2hlcmV2ZXIgdGhpcyBjb21wb25lbnQgb2YgdGhlIFdvcmsKKyAgICAgaWRlbnRpZmllcyBpdHNlbGYgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIGludGVyYWN0aXZlbHkgd2l0aCB0aGF0CisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZSByZXBsYWNlbWVudCBjb21wb25lbnQgb2YgdGhpcyBEZXJpdmVkIFdvcmsKKyAgICAgY2xlYXJseSBhbmQgdW5hbWJpZ3VvdXNseSBpZGVudGlmaWVzIGl0c2VsZiBhcyBhIG1vZGlmaWVkIHZlcnNpb24KKyAgICAgb2YgdGhpcyBjb21wb25lbnQgdG8gdGhlIHVzZXIgd2hlbiB1c2VkIGludGVyYWN0aXZlbHkgd2l0aCB0aGF0CisgICAgIEJhc2UgSW50ZXJwcmV0ZXIuCisgICAgIAorICBiLiBFdmVyeSBjb21wb25lbnQgb2YgdGhlIERlcml2ZWQgV29yayBjb250YWlucyBwcm9taW5lbnQgbm90aWNlcworICAgICBkZXRhaWxpbmcgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlcyB0byB0aGF0IGNvbXBvbmVudCwgb3IgYQorICAgICBwcm9taW5lbnQgcmVmZXJlbmNlIHRvIGFub3RoZXIgZmlsZSB0aGF0IGlzIGRpc3RyaWJ1dGVkIGFzIHBhcnQKKyAgICAgb2YgdGhlIERlcml2ZWQgV29yayBhbmQgdGhhdCBjb250YWlucyBhIGNvbXBsZXRlIGFuZCBhY2N1cmF0ZSBsb2cKKyAgICAgb2YgdGhlIGNoYW5nZXMuCisgIAorICBjLiBObyBpbmZvcm1hdGlvbiBpbiB0aGUgRGVyaXZlZCBXb3JrIGltcGxpZXMgdGhhdCBhbnkgcGVyc29ucywKKyAgICAgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pIHRoZSBhdXRob3JzIG9mIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCisgICAgIG9mIHRoZSBXb3JrLCBwcm92aWRlIGFueSBzdXBwb3J0LCBpbmNsdWRpbmcgKGJ1dCBub3QgbGltaXRlZCB0bykKKyAgICAgdGhlIHJlcG9ydGluZyBhbmQgaGFuZGxpbmcgb2YgZXJyb3JzLCB0byByZWNpcGllbnRzIG9mIHRoZQorICAgICBEZXJpdmVkIFdvcmsgdW5sZXNzIHRob3NlIHBlcnNvbnMgaGF2ZSBzdGF0ZWQgZXhwbGljaXRseSB0aGF0CisgICAgIHRoZXkgZG8gcHJvdmlkZSBzdWNoIHN1cHBvcnQgZm9yIHRoZSBEZXJpdmVkIFdvcmsuCisKKyAgZC4gWW91IGRpc3RyaWJ1dGUgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgd2l0aCB0aGUgRGVyaXZlZCBXb3JrOgorCisgICAgICAgMS4gQSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrOyAKKyAgICAgICAgICBpZiB5b3VyIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIGNvbXBvbmVudCBpcyBtYWRlIGJ5CisgICAgICAgICAgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgdGhlIG1vZGlmaWVkIGNvbXBvbmVudCBmcm9tIGEKKyAgICAgICAgICBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkKKyAgICAgICAgICB0aGUgV29yayBmcm9tIHRoZSBzYW1lIG9yIHNvbWUgc2ltaWxhciBwbGFjZSBtZWV0cyB0aGlzCisgICAgICAgICAgY29uZGl0aW9uLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvCisgICAgICAgICAgY29weSB0aGUgV29yayBhbG9uZyB3aXRoIHRoZSBtb2RpZmllZCBjb21wb25lbnQ7CisKKyAgICAgICAyLiBJbmZvcm1hdGlvbiB0aGF0IGlzIHN1ZmZpY2llbnQgdG8gb2J0YWluIGEgY29tcGxldGUsCisgICAgICAgICAgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrLgorCis3LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heQorZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgZ2VuZXJhdGVkIGZyb20gYSBEZXJpdmVkIFdvcmssIGFzIGxvbmcgYXMKK3RoZSBEZXJpdmVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIENvbXBpbGVkCitXb3JrLCBhbmQgYXMgbG9uZyBhcyB0aGUgY29uZGl0aW9ucyBvZiBDbGF1c2UgNiwgYWJvdmUsIGFyZSBtZXQgd2l0aAorcmVnYXJkIHRvIHRoZSBEZXJpdmVkIFdvcmsuCisKKzguICBUaGUgY29uZGl0aW9ucyBhYm92ZSBhcmUgbm90IGludGVuZGVkIHRvIHByb2hpYml0LCBhbmQgaGVuY2UgZG8gbm90CithcHBseSB0bywgdGhlIG1vZGlmaWNhdGlvbiwgYnkgYW55IG1ldGhvZCwgb2YgYW55IGNvbXBvbmVudCBzbyB0aGF0IGl0CitiZWNvbWVzIGlkZW50aWNhbCB0byBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhhdCBjb21wb25lbnQgb2YgdGhlIFdvcmsgYXMKK2l0IGlzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIgdW5kZXIgQ2xhdXNlIDQsIGFib3ZlLgorCis5LiAgRGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG9yIGFueSBEZXJpdmVkIFdvcmsgaW4gYW4gYWx0ZXJuYXRpdmUKK2Zvcm1hdCwgd2hlcmUgdGhlIFdvcmsgb3IgdGhhdCBEZXJpdmVkIFdvcmsgKGluIHdob2xlIG9yIGluIHBhcnQpIGlzCit0aGVuIHByb2R1Y2VkIGJ5IGFwcGx5aW5nIHNvbWUgcHJvY2VzcyB0byB0aGF0IGZvcm1hdCwgZG9lcyBub3QgcmVsYXggb3IKK251bGxpZnkgYW55IHNlY3Rpb25zIG9mIHRoaXMgbGljZW5zZSBhcyB0aGV5IHBlcnRhaW4gdG8gdGhlIHJlc3VsdHMgb2YKK2FwcGx5aW5nIHRoYXQgcHJvY2Vzcy4KKyAgICAgCisxMC4gYS4gQSBEZXJpdmVkIFdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UKKyAgICAgICBwcm92aWRlZCB0aGF0IGxpY2Vuc2UgaXRzZWxmIGhvbm9ycyB0aGUgY29uZGl0aW9ucyBsaXN0ZWQgaW4KKyAgICAgICBDbGF1c2UgNiBhYm92ZSwgaW4gcmVnYXJkIHRvIHRoZSBXb3JrLCB0aG91Z2ggaXQgZG9lcyBub3QgaGF2ZQorICAgICAgIHRvIGhvbm9yIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKyAgICAgIAorICAgIGIuIElmIGEgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIHRoYXQKKyAgICAgICBEZXJpdmVkIFdvcmsgbXVzdCBwcm92aWRlIHN1ZmZpY2llbnQgZG9jdW1lbnRhdGlvbiBhcyBwYXJ0IG9mCisgICAgICAgaXRzZWxmIHRvIGFsbG93IGVhY2ggcmVjaXBpZW50IG9mIHRoYXQgRGVyaXZlZCBXb3JrIHRvIGhvbm9yIHRoZSAKKyAgICAgICByZXN0cmljdGlvbnMgaW4gQ2xhdXNlIDYgYWJvdmUsIGNvbmNlcm5pbmcgY2hhbmdlcyBmcm9tIHRoZSBXb3JrLgorCisxMS4gVGhpcyBsaWNlbnNlIHBsYWNlcyBubyByZXN0cmljdGlvbnMgb24gd29ya3MgdGhhdCBhcmUgdW5yZWxhdGVkIHRvCit0aGUgV29yaywgbm9yIGRvZXMgdGhpcyBsaWNlbnNlIHBsYWNlIGFueSByZXN0cmljdGlvbnMgb24gYWdncmVnYXRpbmcKK3N1Y2ggd29ya3Mgd2l0aCB0aGUgV29yayBieSBhbnkgbWVhbnMuCisKKzEyLiAgTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8sIG9yIG1heSBiZSB1c2VkIHRvLCBwcmV2ZW50Citjb21wbGV0ZSBjb21wbGlhbmNlIGJ5IGFsbCBwYXJ0aWVzIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cy4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBXb3JrLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgdGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgdGhlIFdvcmsgYGFzIGlzYCwgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYQorcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgdGhlIFdvcmsgaXMgd2l0aCB5b3UuICBTaG91bGQgdGhlIFdvcmsgcHJvdmUgZGVmZWN0aXZlLCB5b3UgYXNzdW1lCit0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcKK3dpbGwgVGhlIENvcHlyaWdodCBIb2xkZXIsIG9yIGFueSBhdXRob3IgbmFtZWQgaW4gdGhlIGNvbXBvbmVudHMgb2YgdGhlCitXb3JrLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heSBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIFdvcmsgYXMKK3Blcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBnZW5lcmFsLAorc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgYW55IHVzZSBvZgordGhlIFdvcmsgb3Igb3V0IG9mIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkCit0bywgbG9zcyBvZiBkYXRhLCBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUsIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkKK2FueW9uZSBhcyBhIHJlc3VsdCBvZiBhbnkgZmFpbHVyZSBvZiB0aGUgV29yayB0byBvcGVyYXRlIHdpdGggYW55IG90aGVyCitwcm9ncmFtcyksIGV2ZW4gaWYgdGhlIENvcHlyaWdodCBIb2xkZXIgb3Igc2FpZCBhdXRob3Igb3Igc2FpZCBvdGhlcgorcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisKK01BSU5URU5BTkNFIE9GIFRIRSBXT1JLCis9PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgYXV0aG9yLW1haW50YWluZWRgIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyCitleHBsaWNpdGx5IGFuZCBwcm9taW5lbnRseSBzdGF0ZXMgbmVhciB0aGUgcHJpbWFyeSBjb3B5cmlnaHQgbm90aWNlIGluCit0aGUgV29yayB0aGF0IHRoZSBXb3JrIGNhbiBvbmx5IGJlIG1haW50YWluZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIKK29yIHNpbXBseSB0aGF0IGl0IGlzIGBhdXRob3ItbWFpbnRhaW5lZGAuCisKK1RoZSBXb3JrIGhhcyB0aGUgc3RhdHVzIGBtYWludGFpbmVkYCBpZiB0aGVyZSBpcyBhIEN1cnJlbnQgTWFpbnRhaW5lcgord2hvIGhhcyBpbmRpY2F0ZWQgaW4gdGhlIFdvcmsgdGhhdCB0aGV5IGFyZSB3aWxsaW5nIHRvIHJlY2VpdmUgZXJyb3IKK3JlcG9ydHMgZm9yIHRoZSBXb3JrIChmb3IgZXhhbXBsZSwgYnkgc3VwcGx5aW5nIGEgdmFsaWQgZS1tYWlsCithZGRyZXNzKS4gSXQgaXMgbm90IHJlcXVpcmVkIGZvciB0aGUgQ3VycmVudCBNYWludGFpbmVyIHRvIGFja25vd2xlZGdlCitvciBhY3QgdXBvbiB0aGVzZSBlcnJvciByZXBvcnRzLgorCitUaGUgV29yayBjaGFuZ2VzIGZyb20gc3RhdHVzIGBtYWludGFpbmVkYCB0byBgdW5tYWludGFpbmVkYCBpZiB0aGVyZQoraXMgbm8gQ3VycmVudCBNYWludGFpbmVyLCBvciB0aGUgcGVyc29uIHN0YXRlZCB0byBiZSBDdXJyZW50CitNYWludGFpbmVyIG9mIHRoZSB3b3JrIGNhbm5vdCBiZSByZWFjaGVkIHRocm91Z2ggdGhlIGluZGljYXRlZCBtZWFucworb2YgY29tbXVuaWNhdGlvbiBmb3IgYSBwZXJpb2Qgb2Ygc2l4IG1vbnRocywgYW5kIHRoZXJlIGFyZSBubyBvdGhlcgorc2lnbmlmaWNhbnQgc2lnbnMgb2YgYWN0aXZlIG1haW50ZW5hbmNlLgorCitZb3UgY2FuIGJlY29tZSB0aGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoZSBXb3JrIGJ5IGFncmVlbWVudCB3aXRoCithbnkgZXhpc3RpbmcgQ3VycmVudCBNYWludGFpbmVyIHRvIHRha2Ugb3ZlciB0aGlzIHJvbGUuCisKK0lmIHRoZSBXb3JrIGlzIHVubWFpbnRhaW5lZCwgeW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZgordGhlIFdvcmsgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0ZXBzOgorCisgMS4gIE1ha2UgYSByZWFzb25hYmxlIGF0dGVtcHQgdG8gdHJhY2UgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciAoYW5kCisgICAgIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBpZiB0aGUgdHdvIGRpZmZlcikgdGhyb3VnaCB0aGUgbWVhbnMgb2YKKyAgICAgYW4gSW50ZXJuZXQgb3Igc2ltaWxhciBzZWFyY2guCisKKyAyLiAgSWYgdGhpcyBzZWFyY2ggaXMgc3VjY2Vzc2Z1bCwgdGhlbiBlbnF1aXJlIHdoZXRoZXIgdGhlIFdvcmsKKyAgICAgaXMgc3RpbGwgbWFpbnRhaW5lZC4KKworICBhLiBJZiBpdCBpcyBiZWluZyBtYWludGFpbmVkLCB0aGVuIGFzayB0aGUgQ3VycmVudCBNYWludGFpbmVyCisgICAgIHRvIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKyAgICAgCisgIGIuIElmIHRoZSBzZWFyY2ggaXMgdW5zdWNjZXNzZnVsIG9yIG5vIGFjdGlvbiB0byByZXN1bWUgYWN0aXZlCisgICAgIG1haW50ZW5hbmNlIGlzIHRha2VuIGJ5IHRoZSBDdXJyZW50IE1haW50YWluZXIsIHRoZW4gYW5ub3VuY2UKKyAgICAgd2l0aGluIHRoZSBwZXJ0aW5lbnQgY29tbXVuaXR5IHlvdXIgaW50ZW50aW9uIHRvIHRha2Ugb3ZlcgorICAgICBtYWludGVuYW5jZS4gIChJZiB0aGUgV29yayBpcyBhIExhVGVYIHdvcmssIHRoaXMgY291bGQgYmUKKyAgICAgZG9uZSwgZm9yIGV4YW1wbGUsIGJ5IHBvc3RpbmcgdG8gY29tcC50ZXh0LnRleC4pCisKKyAzYS4gSWYgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyByZWFjaGFibGUgYW5kIGFncmVlcyB0byBwYXNzCisgICAgIG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIHRvIHlvdSwgdGhlbiB0aGlzIHRha2VzIGVmZmVjdAorICAgICBpbW1lZGlhdGVseSB1cG9uIGFubm91bmNlbWVudC4KKyAgICAgCisgIGIuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgbm90IHJlYWNoYWJsZSBhbmQgdGhlIENvcHlyaWdodAorICAgICBIb2xkZXIgYWdyZWVzIHRoYXQgbWFpbnRlbmFuY2Ugb2YgdGhlIFdvcmsgYmUgcGFzc2VkIHRvIHlvdSwKKyAgICAgdGhlbiB0aGlzIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseSB1cG9uIGFubm91bmNlbWVudC4gIAorICAgIAorIDQuICBJZiB5b3UgbWFrZSBhbiBgaW50ZW50aW9uIGFubm91bmNlbWVudGAgYXMgZGVzY3JpYmVkIGluIDJiLiBhYm92ZQorICAgICBhbmQgYWZ0ZXIgdGhyZWUgbW9udGhzIHlvdXIgaW50ZW50aW9uIGlzIGNoYWxsZW5nZWQgbmVpdGhlciBieQorICAgICB0aGUgQ3VycmVudCBNYWludGFpbmVyIG5vciBieSB0aGUgQ29weXJpZ2h0IEhvbGRlciBub3IgYnkgb3RoZXIKKyAgICAgcGVvcGxlLCB0aGVuIHlvdSBtYXkgYXJyYW5nZSBmb3IgdGhlIFdvcmsgdG8gYmUgY2hhbmdlZCBzbyBhcworICAgICB0byBuYW1lIHlvdSBhcyB0aGUgKG5ldykgQ3VycmVudCBNYWludGFpbmVyLgorICAgICAKKyA1LiAgSWYgdGhlIHByZXZpb3VzbHkgdW5yZWFjaGFibGUgQ3VycmVudCBNYWludGFpbmVyIGJlY29tZXMKKyAgICAgcmVhY2hhYmxlIG9uY2UgbW9yZSB3aXRoaW4gdGhyZWUgbW9udGhzIG9mIGEgY2hhbmdlIGNvbXBsZXRlZAorICAgICB1bmRlciB0aGUgdGVybXMgb2YgM2IpIG9yIDQpLCB0aGVuIHRoYXQgQ3VycmVudCBNYWludGFpbmVyIG11c3QKKyAgICAgYmVjb21lIG9yIHJlbWFpbiB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVwb24gcmVxdWVzdCBwcm92aWRlZAorICAgICB0aGV5IHRoZW4gdXBkYXRlIHRoZWlyIGNvbW11bmljYXRpb24gZGF0YSB3aXRoaW4gb25lIG1vbnRoLgorCitBIGNoYW5nZSBpbiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGRvZXMgbm90LCBvZiBpdHNlbGYsIGFsdGVyIHRoZSBmYWN0Cit0aGF0IHRoZSBXb3JrIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMUFBMIGxpY2Vuc2UuCisKK0lmIHlvdSBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IHNob3VsZAoraW1tZWRpYXRlbHkgcHJvdmlkZSwgd2l0aGluIHRoZSBXb3JrLCBhIHByb21pbmVudCBhbmQgdW5hbWJpZ3VvdXMKK3N0YXRlbWVudCBvZiB5b3VyIHN0YXR1cyBhcyBDdXJyZW50IE1haW50YWluZXIuICBZb3Ugc2hvdWxkIGFsc28KK2Fubm91bmNlIHlvdXIgbmV3IHN0YXR1cyB0byB0aGUgc2FtZSBwZXJ0aW5lbnQgY29tbXVuaXR5IGFzCitpbiAyYikgYWJvdmUuCisKKworV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgV09SS1MgVU5ERVIgVEhJUyBMSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGltcG9ydGFudCBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQKK3JlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpcgord29ya3MgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlc2UgYXV0aG9ycyBhcmUgYWRkcmVzc2VkIGFzIGB5b3VgIGluCit0aGlzIHNlY3Rpb24uCisKK0Nob29zaW5nIFRoaXMgTGljZW5zZSBvciBBbm90aGVyIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgZm9yIGFueSBwYXJ0IG9mIHlvdXIgd29yayB5b3Ugd2FudCBvciBuZWVkIHRvIHVzZSAqZGlzdHJpYnV0aW9uKgorY29uZGl0aW9ucyB0aGF0IGRpZmZlciBzaWduaWZpY2FudGx5IGZyb20gdGhvc2UgaW4gdGhpcyBsaWNlbnNlLCB0aGVuCitkbyBub3QgcmVmZXIgdG8gdGhpcyBsaWNlbnNlIGFueXdoZXJlIGluIHlvdXIgd29yayBidXQsIGluc3RlYWQsCitkaXN0cmlidXRlIHlvdXIgd29yayB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQKK29mIHRoaXMgbGljZW5zZSBhcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlCitzaG91bGQgbm90IHJlZmVyIHRvIHRoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQKK3lvdXIgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXhgIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHdvcmsgaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleGAgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgd29ya3MgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGNvbXBvbmVudCBvZiB0aGUgV29yaywgZXZlbiBmb3IgeW91ciBvd24KK3BlcnNvbmFsIHVzZSwgd2l0aG91dCBhbHNvIG1lZXRpbmcgdGhlIGFib3ZlIGNvbmRpdGlvbnMgZm9yCitkaXN0cmlidXRpbmcgdGhlIG1vZGlmaWVkIGNvbXBvbmVudC4gIFdoaWxlIHlvdSBtaWdodCBpbnRlbmQgdGhhdCBzdWNoCittb2RpZmljYXRpb25zIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhhdCBjb21wb25lbnQ7IG9yCitpdCBtYXkgbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkCit2ZXJzaW9uIHRoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zCitvZiB0aGlzIGxpY2Vuc2UgaW4gd2F5cyB0aGF0IGNvdWxkIGhhdmUgbGVnYWwgaW1wbGljYXRpb25zIGFuZCwgd29yc2UsCitjYXVzZSBwcm9ibGVtcyBmb3IgdGhlIGNvbW11bml0eS4gIEl0IGlzIHRoZXJlZm9yZSB1c3VhbGx5IGluIHlvdXIKK2Jlc3QgaW50ZXJlc3QgdG8ga2VlcCB5b3VyIGNvcHkgb2YgdGhlIFdvcmsgaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYworb25lLiAgTWFueSB3b3JrcyBwcm92aWRlIHdheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCB3b3JrCit3aXRob3V0IGFsdGVyaW5nIGFueSBvZiBpdHMgbGljZW5zZWQgY29tcG9uZW50cy4KKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGNvbXBvbmVudHMgb2YgeW91ciB3b3JrIGJvdGgKK2FuIGV4cGxpY2l0IGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHlvdXIgbmFtZSBhbmQgdGhlIHllYXIgdGhlIHdvcmsKK3dhcyBhdXRob3JlZCBhbmQvb3IgbGFzdCBzdWJzdGFudGlhbGx5IG1vZGlmaWVkLiAgSW5jbHVkZSBhbHNvIGEKK3N0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGF0Citjb21wb25lbnQgaXMgY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDUgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyB3b3JrIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4zCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMyBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYCisgICUgdmVyc2lvbiAyMDA1LzEyLzAxIG9yIGxhdGVyLgorICAlCisgICUgVGhpcyB3b3JrIGhhcyB0aGUgTFBQTCBtYWludGVuYW5jZSBzdGF0dXMgYG1haW50YWluZWRgLgorICAlIAorICAlIFRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhpcyB3b3JrIGlzIE0uIFkuIE5hbWUuCisgICUKKyAgJSBUaGlzIHdvcmsgY29uc2lzdHMgb2YgdGhlIGZpbGVzIHBpZy5kdHggYW5kIHBpZy5pbnMKKyAgJSBhbmQgdGhlIGRlcml2ZWQgZmlsZSBwaWcuc3R5LgorCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucworZ2l2ZW4gaW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIHRoZSBgV29ya2AgcmVmZXJyaW5nCit0byB0aGUgdGhyZWUgZmlsZXMgYHBpZy5kdHhgLCBgcGlnLmluc2AsIGFuZCBgcGlnLnN0eWAgKHRoZSBsYXN0IGJlaW5nCitnZW5lcmF0ZWQgZnJvbSBgcGlnLmR0eGAgdXNpbmcgYHBpZy5pbnNgKSwgdGhlIGBCYXNlIEludGVycHJldGVyYAorcmVmZXJyaW5nIHRvIGFueSBgTGFUZVgtRm9ybWF0YCwgYW5kIGJvdGggYENvcHlyaWdodCBIb2xkZXJgIGFuZAorYEN1cnJlbnQgTWFpbnRhaW5lcmAgcmVmZXJyaW5nIHRvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWVgLgorCitJZiB5b3UgZG8gbm90IHdhbnQgdGhlIE1haW50ZW5hbmNlIHNlY3Rpb24gb2YgTFBQTCB0byBhcHBseSB0byB5b3VyCitXb3JrLCBjaGFuZ2UgYG1haW50YWluZWRgIGFib3ZlIGludG8gYGF1dGhvci1tYWludGFpbmVkYC4gIAorSG93ZXZlciwgd2UgcmVjb21tZW5kIHRoYXQgeW91IHVzZSBgbWFpbnRhaW5lZGAsIGFzIHRoZSBNYWludGVuYW5jZQorc2VjdGlvbiB3YXMgYWRkZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgeW91ciBXb3JrIHJlbWFpbnMgdXNlZnVsIHRvCit0aGUgY29tbXVuaXR5IGV2ZW4gd2hlbiB5b3UgY2FuIG5vIGxvbmdlciBtYWludGFpbiBhbmQgc3VwcG9ydCBpdAoreW91cnNlbGYuCisKK0Rlcml2ZWQgV29ya3MgVGhhdCBBcmUgTm90IFJlcGxhY2VtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NldmVyYWwgY2xhdXNlcyBvZiB0aGUgTFBQTCBzcGVjaWZ5IG1lYW5zIHRvIHByb3ZpZGUgcmVsaWFiaWxpdHkgYW5kCitzdGFiaWxpdHkgZm9yIHRoZSB1c2VyIGNvbW11bml0eS4gVGhleSB0aGVyZWZvcmUgY29uY2VybiB0aGVtc2VsdmVzCit3aXRoIHRoZSBjYXNlIHRoYXQgYSBEZXJpdmVkIFdvcmsgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhCisoY29tcGF0aWJsZSBvciBpbmNvbXBhdGlibGUpIHJlcGxhY2VtZW50IG9mIHRoZSBvcmlnaW5hbCBXb3JrLiBJZgordGhpcyBpcyBub3QgdGhlIGNhc2UgKGUuZy4sIGlmIGEgZmV3IGxpbmVzIG9mIGNvZGUgYXJlIHJldXNlZCBmb3IgYQorY29tcGxldGVseSBkaWZmZXJlbnQgdGFzayksIHRoZW4gY2xhdXNlcyA2YiBhbmQgNmQgc2hhbGwgbm90IGFwcGx5LgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgdGhlIFdvcmsKKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIHRoZSBXb3JrIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgdGhlIFdvcmsuICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgdGhlIFdvcmsuCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgc3VjaCBhczoKKworICAgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIGFsbCBmaWxlcyBsaXN0ZWQgaW4gbWFuaWZlc3QudHh0LgorICAgCisgICBpbiB0aGF0IHBsYWNlLiAgSW4gdGhlIGFic2VuY2Ugb2YgYW4gdW5lcXVpdm9jYWwgbGlzdCBpdCBtaWdodCBiZQorICAgaW1wb3NzaWJsZSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGF0IGlzIGNvbnNpZGVyZWQgYnkgeW91CisgICB0byBjb21wcmlzZSB0aGUgV29yayBhbmQsIGluIHN1Y2ggYSBjYXNlLCB0aGUgbGljZW5zZWUgd291bGQgYmUKKyAgIGVudGl0bGVkIHRvIG1ha2UgcmVhc29uYWJsZSBjb25qZWN0dXJlcyBhcyB0byB3aGljaCBmaWxlcyBjb21wcmlzZQorICAgdGhlIFdvcmsuCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTGlicG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZDViMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9MaWJwbmcKQEAgLTAsMCArMSwxMTIgQEAKKworVGhpcyBjb3B5IG9mIHRoZSBsaWJwbmcgbm90aWNlcyBpcyBwcm92aWRlZCBmb3IgeW91ciBjb252ZW5pZW5jZS4gIEluIGNhc2Ugb2YKK2FueSBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoaXMgY29weSBhbmQgdGhlIG5vdGljZXMgaW4gdGhlIGZpbGUgcG5nLmggdGhhdCBpcworaW5jbHVkZWQgaW4gdGhlIGxpYnBuZyBkaXN0cmlidXRpb24sIHRoZSBsYXR0ZXIgc2hhbGwgcHJldmFpbC4KKworQ09QWVJJR0hUIE5PVElDRSwgRElTQ0xBSU1FUiwgYW5kIExJQ0VOU0U6CisKK0lmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKK3RoaXMgc2VudGVuY2UuCisKK1RoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgbGlicG5nIGxpY2Vuc2UuCisKK2xpYnBuZyB2ZXJzaW9ucyAxLjIuNiwgQXVndXN0IDE1LCAyMDA0LCB0aHJvdWdoIDEuNC41LCBEZWNlbWJlciA5LCAyMDEwLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwNCwgMjAwNi0yMDEwIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMi41Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycworCisgICBDb3NtaW4gVHJ1dGEKKworbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggMS4yLjUgLSBPY3RvYmVyIDMsIDIwMDIsIGFyZQorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4wLjYKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycworCisgICBTaW1vbi1QaWVycmUgQ2FkaWV1eAorICAgRXJpYyBTLiBSYXltb25kCisgICBHaWxsZXMgVm9sbGFudAorCithbmQgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9ucyB0byB0aGUgZGlzY2xhaW1lcjoKKworICAgVGhlcmUgaXMgbm8gd2FycmFudHkgYWdhaW5zdCBpbnRlcmZlcmVuY2Ugd2l0aCB5b3VyIGVuam95bWVudCBvZiB0aGUKKyAgIGxpYnJhcnkgb3IgYWdhaW5zdCBpbmZyaW5nZW1lbnQuICBUaGVyZSBpcyBubyB3YXJyYW50eSB0aGF0IG91cgorICAgZWZmb3J0cyBvciB0aGUgbGlicmFyeSB3aWxsIGZ1bGZpbGwgYW55IG9mIHlvdXIgcGFydGljdWxhciBwdXJwb3NlcworICAgb3IgbmVlZHMuICBUaGlzIGxpYnJhcnkgaXMgcHJvdmlkZWQgd2l0aCBhbGwgZmF1bHRzLCBhbmQgdGhlIGVudGlyZQorICAgcmlzayBvZiBzYXRpc2ZhY3RvcnkgcXVhbGl0eSwgcGVyZm9ybWFuY2UsIGFjY3VyYWN5LCBhbmQgZWZmb3J0IGlzIHdpdGgKKyAgIHRoZSB1c2VyLgorCitsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC42LCBNYXJjaCAyMCwgMjAwMCwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC45NiwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgVG9tIExhbmUKKyAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbgorICAgV2lsbGVtIHZhbiBTY2hhaWsKKworbGlicG5nIHZlcnNpb25zIDAuODksIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NywgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKK0Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjg4LAord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBKb2huIEJvd2xlcgorICAgS2V2aW4gQnJhY2V5CisgICBTYW0gQnVzaGVsbAorICAgTWFnbnVzIEhvbG1ncmVuCisgICBHcmVnIFJvZWxvZnMKKyAgIFRvbSBUYW5uZXIKKworbGlicG5nIHZlcnNpb25zIDAuNSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2LCBhcmUKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGNvcHlyaWdodCBhbmQgbGljZW5zZSwgIkNvbnRyaWJ1dGluZyBBdXRob3JzIgoraXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHNldCBvZiBpbmRpdmlkdWFsczoKKworICAgQW5kcmVhcyBEaWxnZXIKKyAgIERhdmUgTWFydGluZGFsZQorICAgR3V5IEVyaWMgU2NoYWxuYXQKKyAgIFBhdWwgU2NobWlkdAorICAgVGltIFdlZ25lcgorCitUaGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMKK2FuZCBHcm91cCA0MiwgSW5jLiBkaXNjbGFpbSBhbGwgd2FycmFudGllcywgZXhwcmVzc2VkIG9yIGltcGxpZWQsCitpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBvZgorZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuCithc3N1bWUgbm8gbGlhYmlsaXR5IGZvciBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksCitvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQTkcKK1JlZmVyZW5jZSBMaWJyYXJ5LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb3VyY2UgY29kZSwgb3IgcG9ydGlvbnMgaGVyZW9mLCBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0Cit0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLgorCisyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCBhbmQgbXVzdCBub3QKKyAgIGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuCisKKzMuIFRoaXMgQ29weXJpZ2h0IG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueQorICAgc291cmNlIG9yIGFsdGVyZWQgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLiBzcGVjaWZpY2FsbHkgcGVybWl0LCB3aXRob3V0CitmZWUsIGFuZCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGFzIGEgY29tcG9uZW50IHRvCitzdXBwb3J0aW5nIHRoZSBQTkcgZmlsZSBmb3JtYXQgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4gIElmIHlvdSB1c2UgdGhpcworc291cmNlIGNvZGUgaW4gYSBwcm9kdWN0LCBhY2tub3dsZWRnbWVudCBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGJlCithcHByZWNpYXRlZC4KKworCitBICJwbmdfZ2V0X2NvcHlyaWdodCIgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCBmb3IgY29udmVuaWVudCB1c2UgaW4gImFib3V0IgorYm94ZXMgYW5kIHRoZSBsaWtlOgorCisgICBwcmludGYoIiVzIixwbmdfZ2V0X2NvcHlyaWdodChOVUxMKSk7CisKK0Fsc28sIHRoZSBQTkcgbG9nbyAoaW4gUE5HIGZvcm1hdCwgb2YgY291cnNlKSBpcyBzdXBwbGllZCBpbiB0aGUKK2ZpbGVzICJwbmdiYXIucG5nIiBhbmQgInBuZ2Jhci5qcGcgKDg4eDMxKSBhbmQgInBuZ25vdy5wbmciICg5OHgzMSkuCisKK0xpYnBuZyBpcyBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIFNvZnR3YXJlLiAgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBpcyBhCitjZXJ0aWZpY2F0aW9uIG1hcmsgb2YgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuCisKK0dsZW5uIFJhbmRlcnMtUGVocnNvbgorZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKK0RlY2VtYmVyIDksIDIwMTAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZjhiZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NSVQKQEAgLTAsMCArMSwyMyBAQAorCitNSVQgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcnM+CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2RjM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMApAQCAtMCwwICsxLDEwOSBAQAorCitNT1pJTExBIFBVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMAorCisxLiBEZWZpbml0aW9ucy4KKworMS4xLiBgYENvbnRyaWJ1dG9yYGAgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiBgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGVgYCBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gYGBFeGVjdXRhYmxlYGAgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiBgYExhcmdlciBXb3JrYGAgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisxLjEwLiBgYE9yaWdpbmFsIENvZGVgYCBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiBgYFNvdXJjZSBDb2RlYGAgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3IgYSBsaXN0IG9mIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiBgYFlvdWBgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsIGBgWW91YGAgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sIGBgY29udHJvbGBgIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LiAKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBJbml0aWFsIERldmVsb3BlciwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKGBgVXRpbGl6ZWBgKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIAorRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIAorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLiAKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiAKK0lmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBgYExFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBZb3UgbWFrZSBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLiAKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIAorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLiAKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4gCitOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoYGBOZXRzY2FwZWBgKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIAorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4gCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyBgYE1vemlsbGFgYCwgYGBNT1pJTExBUExgYCwgYGBNT1pQTGBgLCBgYE5ldHNjYXBlYGAsIGBgTlBMYGAgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgYW55d2hlcmUgaW4geW91ciBsaWNlbnNlIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOIGBgQVMgSVNgYCBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorOC4gVEVSTUlOQVRJT04uCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgYGBjb21tZXJjaWFsIGl0ZW0sYGAgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZWBgIGFuZCBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbixgYCBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nIGFyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueSBhcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgdW5kZXIgdGhlIGF1c3BpY2VzIG9mIEpBTVMvRW5kRGlzcHV0ZTsgYW5kIChjKSBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgorRVhISUJJVCBBLgorYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18gX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy5gYAorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWE4YzRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTEuMQpAQCAtMCwwICsxLDE4NSBAQAorCitNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xCisKKzEuIERlZmluaXRpb25zLgorCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIgorbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKzEuMy4gIkNvdmVyZWQgQ29kZSIKK21lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iCittZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKzEuNS4gIkV4ZWN1dGFibGUiCittZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKzEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorMS43LiAiTGFyZ2VyIFdvcmsiCittZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorMS44LiAiTGljZW5zZSIKK21lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMS4gIkxpY2Vuc2FibGUiCittZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKzEuOS4gIk1vZGlmaWNhdGlvbnMiCittZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorMS4xMC4gIk9yaWdpbmFsIENvZGUiCittZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIKK21lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorMS4xMS4gIlNvdXJjZSBDb2RlIgorbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3JgcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyLiAiWW91IiAob3IgIllvdXIiKQorbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAordW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCit0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xIChhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xIChiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKK3VuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCit0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIgKGEpIGFuZCAyLjIgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIGRhdGUgQ29udHJpYnV0b3IgZmlyc3QgbWFrZXMgQ29tbWVyY2lhbCBVc2Ugb2YgdGhlIENvdmVyZWQgQ29kZS4KK05vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMiAoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zCisKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcworCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyhjKSBSZXByZXNlbnRhdGlvbnMuCisKK0NvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNCAoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zIDMuMSwgMy4yLCAzLjMsIDMuNCBhbmQgMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zCisKK05ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uICgiTmV0c2NhcGUiKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucworCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZSBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzCisKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICJNb3ppbGxhIiwgIk1PWklMTEFQTCIsICJNT1pQTCIsICJOZXRzY2FwZSIsICJNUEwiLCAiTlBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRlcm1pbmF0aW9uCisKKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKK3N1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KK2FueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBnb3Zlcm5tZW50IGVuZCB1c2VycworCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNaXNjZWxsYW5lb3VzCisKK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUmVzcG9uc2liaWxpdHkgZm9yIGNsYWltcworCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNdWx0aXBsZS1saWNlbnNlZCBjb2RlCisKK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyAiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIHBlcm1pdHMgeW91IHRvIHV0aWxpemUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgTVBMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisKK0V4aGliaXQgQSAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UuCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCitMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18KK19fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKK0FsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGUgX19fX18gbGljZW5zZSAodGhlICAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlIHRoZQorcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UKK2Fib3ZlLiBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Cit1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQoreW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5CitkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKK290aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIExpY2Vuc2UuIElmIHlvdSBkbyBub3QgZGVsZXRlCit0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCit1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgW19fX10gTGljZW5zZS4iCitOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUEwtMi4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUyZjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVBMLTIuMApAQCAtMCwwICsxLDM3MyBAQAorTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworMS4xLiAiQ29udHJpYnV0b3IiCisgICAgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSB0aGF0IGNyZWF0ZXMsIGNvbnRyaWJ1dGVzIHRvCisgICAgdGhlIGNyZWF0aW9uIG9mLCBvciBvd25zIENvdmVyZWQgU29mdHdhcmUuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCisgICAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIG9mIG90aGVycyAoaWYgYW55KSB1c2VkCisgICAgYnkgYSBDb250cmlidXRvciBhbmQgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yJ3MgQ29udHJpYnV0aW9uLgorCisxLjMuICJDb250cmlidXRpb24iCisgICAgbWVhbnMgQ292ZXJlZCBTb2Z0d2FyZSBvZiBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuNC4gIkNvdmVyZWQgU29mdHdhcmUiCisgICAgbWVhbnMgU291cmNlIENvZGUgRm9ybSB0byB3aGljaCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQKKyAgICB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgdGhlIEV4ZWN1dGFibGUgRm9ybSBvZiBzdWNoIFNvdXJjZSBDb2RlCisgICAgRm9ybSwgYW5kIE1vZGlmaWNhdGlvbnMgb2Ygc3VjaCBTb3VyY2UgQ29kZSBGb3JtLCBpbiBlYWNoIGNhc2UKKyAgICBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS41LiAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIgorICAgIG1lYW5zCisKKyAgICAoYSkgdGhhdCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBkZXNjcmliZWQKKyAgICAgICAgaW4gRXhoaWJpdCBCIHRvIHRoZSBDb3ZlcmVkIFNvZnR3YXJlOyBvcgorCisgICAgKGIpIHRoYXQgdGhlIENvdmVyZWQgU29mdHdhcmUgd2FzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgICAgICB2ZXJzaW9uIDEuMSBvciBlYXJsaWVyIG9mIHRoZSBMaWNlbnNlLCBidXQgbm90IGFsc28gdW5kZXIgdGhlCisgICAgICAgIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UuCisKKzEuNi4gIkV4ZWN1dGFibGUgRm9ybSIKKyAgICBtZWFucyBhbnkgZm9ybSBvZiB0aGUgd29yayBvdGhlciB0aGFuIFNvdXJjZSBDb2RlIEZvcm0uCisKKzEuNy4gIkxhcmdlciBXb3JrIgorICAgIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBtYXRlcmlhbCwgaW4gCisgICAgYSBzZXBhcmF0ZSBmaWxlIG9yIGZpbGVzLCB0aGF0IGlzIG5vdCBDb3ZlcmVkIFNvZnR3YXJlLgorCisxLjguICJMaWNlbnNlIgorICAgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIkxpY2Vuc2FibGUiCisgICAgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLAorICAgIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5LCBhbnkgYW5kCisgICAgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLiAiTW9kaWZpY2F0aW9ucyIKKyAgICBtZWFucyBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIChhKSBhbnkgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLAorICAgICAgICBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIENvdmVyZWQKKyAgICAgICAgU29mdHdhcmU7IG9yCisKKyAgICAoYikgYW55IG5ldyBmaWxlIGluIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBjb250YWlucyBhbnkgQ292ZXJlZAorICAgICAgICBTb2Z0d2FyZS4KKworMS4xMS4gIlBhdGVudCBDbGFpbXMiIG9mIGEgQ29udHJpYnV0b3IKKyAgICBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsCisgICAgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBzdWNoCisgICAgQ29udHJpYnV0b3IgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQsIGJ1dCBmb3IgdGhlIGdyYW50IG9mIHRoZQorICAgIExpY2Vuc2UsIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgaGF2aW5nCisgICAgbWFkZSwgaW1wb3J0LCBvciB0cmFuc2ZlciBvZiBlaXRoZXIgaXRzIENvbnRyaWJ1dGlvbnMgb3IgaXRzCisgICAgQ29udHJpYnV0b3IgVmVyc2lvbi4KKworMS4xMi4gIlNlY29uZGFyeSBMaWNlbnNlIgorICAgIG1lYW5zIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wLCB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4xLCB0aGUgR05VIEFmZmVybyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMy4wLCBvciBhbnkgbGF0ZXIgdmVyc2lvbnMgb2YgdGhvc2UKKyAgICBsaWNlbnNlcy4KKworMS4xMy4gIlNvdXJjZSBDb2RlIEZvcm0iCisgICAgbWVhbnMgdGhlIGZvcm0gb2YgdGhlIHdvcmsgcHJlZmVycmVkIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucy4KKworMS4xNC4gIllvdSIgKG9yICJZb3VyIikKKyAgICBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdAorICAgIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yCisgICAgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CisgICAgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKKyAgICB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4KKyAgICBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbAorICAgIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gTGljZW5zZSBHcmFudHMgYW5kIENvbmRpdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIuMS4gR3JhbnRzCisKK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCisgICAgTGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtYWtlIGF2YWlsYWJsZSwKKyAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgZXhwbG9pdCBpdHMKKyAgICBDb250cmlidXRpb25zLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBNb2RpZmljYXRpb25zLCBvcgorICAgIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG9mIHN1Y2ggQ29udHJpYnV0b3IgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlcgorICAgIGZvciBzYWxlLCBoYXZlIG1hZGUsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciBlaXRoZXIgaXRzCisgICAgQ29udHJpYnV0aW9ucyBvciBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbi4KKworMi4yLiBFZmZlY3RpdmUgRGF0ZQorCitUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gYW55IENvbnRyaWJ1dGlvbgorYmVjb21lIGVmZmVjdGl2ZSBmb3IgZWFjaCBDb250cmlidXRpb24gb24gdGhlIGRhdGUgdGhlIENvbnRyaWJ1dG9yIGZpcnN0CitkaXN0cmlidXRlcyBzdWNoIENvbnRyaWJ1dGlvbi4KKworMi4zLiBMaW1pdGF0aW9ucyBvbiBHcmFudCBTY29wZQorCitUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMiBhcmUgdGhlIG9ubHkgcmlnaHRzIGdyYW50ZWQgdW5kZXIKK3RoaXMgTGljZW5zZS4gTm8gYWRkaXRpb25hbCByaWdodHMgb3IgbGljZW5zZXMgd2lsbCBiZSBpbXBsaWVkIGZyb20gdGhlCitkaXN0cmlidXRpb24gb3IgbGljZW5zaW5nIG9mIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLgorTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIGJ5IGEKK0NvbnRyaWJ1dG9yOgorCisoYSkgZm9yIGFueSBjb2RlIHRoYXQgYSBDb250cmlidXRvciBoYXMgcmVtb3ZlZCBmcm9tIENvdmVyZWQgU29mdHdhcmU7CisgICAgb3IKKworKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIFlvdXIgYW5kIGFueSBvdGhlciB0aGlyZCBwYXJ0eSdzCisgICAgbW9kaWZpY2F0aW9ucyBvZiBDb3ZlcmVkIFNvZnR3YXJlLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBpdHMKKyAgICBDb250cmlidXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIGl0cyBDb250cmlidXRvcgorICAgIFZlcnNpb24pOyBvcgorCisoYykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZgorICAgIGl0cyBDb250cmlidXRpb25zLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyBpbiB0aGUgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywKK29yIGxvZ29zIG9mIGFueSBDb250cmlidXRvciAoZXhjZXB0IGFzIG1heSBiZSBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGgKK3RoZSBub3RpY2UgcmVxdWlyZW1lbnRzIGluIFNlY3Rpb24gMy40KS4KKworMi40LiBTdWJzZXF1ZW50IExpY2Vuc2VzCisKK05vIENvbnRyaWJ1dG9yIG1ha2VzIGFkZGl0aW9uYWwgZ3JhbnRzIGFzIGEgcmVzdWx0IG9mIFlvdXIgY2hvaWNlIHRvCitkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgKHNlZSBTZWN0aW9uIDEwLjIpIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlIChpZgorcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDMuMykuCisKKzIuNS4gUmVwcmVzZW50YXRpb24KKworRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdGhlIENvbnRyaWJ1dG9yIGJlbGlldmVzIGl0cworQ29udHJpYnV0aW9ucyBhcmUgaXRzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIG9yIGl0IGhhcyBzdWZmaWNpZW50IHJpZ2h0cwordG8gZ3JhbnQgdGhlIHJpZ2h0cyB0byBpdHMgQ29udHJpYnV0aW9ucyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzIuNi4gRmFpciBVc2UKKworVGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byBsaW1pdCBhbnkgcmlnaHRzIFlvdSBoYXZlIHVuZGVyCithcHBsaWNhYmxlIGNvcHlyaWdodCBkb2N0cmluZXMgb2YgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgb3Igb3RoZXIKK2VxdWl2YWxlbnRzLgorCisyLjcuIENvbmRpdGlvbnMKKworU2VjdGlvbnMgMy4xLCAzLjIsIDMuMywgYW5kIDMuNCBhcmUgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZAoraW4gU2VjdGlvbiAyLjEuCisKKzMuIFJlc3BvbnNpYmlsaXRpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworMy4xLiBEaXN0cmlidXRpb24gb2YgU291cmNlIEZvcm0KKworQWxsIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIEZvcm0sIGluY2x1ZGluZyBhbnkKK01vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlLCBtdXN0IGJlIHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IHRoZSBTb3VyY2UKK0NvZGUgRm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSwgYW5kIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QKK2F0dGVtcHQgdG8gYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUKK0Zvcm0uCisKKzMuMi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgRm9ybQorCitJZiBZb3UgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgRm9ybSB0aGVuOgorCisoYSkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZQorICAgIEZvcm0sIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMSwgYW5kIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIG9mCisgICAgdGhlIEV4ZWN1dGFibGUgRm9ybSBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiBzdWNoIFNvdXJjZSBDb2RlCisgICAgRm9ybSBieSByZWFzb25hYmxlIG1lYW5zIGluIGEgdGltZWx5IG1hbm5lciwgYXQgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHRvIHRoZSByZWNpcGllbnQ7IGFuZAorCisoYikgWW91IG1heSBkaXN0cmlidXRlIHN1Y2ggRXhlY3V0YWJsZSBGb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgTGljZW5zZSwgb3Igc3VibGljZW5zZSBpdCB1bmRlciBkaWZmZXJlbnQgdGVybXMsIHByb3ZpZGVkIHRoYXQgdGhlCisgICAgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgRm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyCisgICAgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgRm9ybSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuMy4gRGlzdHJpYnV0aW9uIG9mIGEgTGFyZ2VyIFdvcmsKKworWW91IG1heSBjcmVhdGUgYW5kIGRpc3RyaWJ1dGUgYSBMYXJnZXIgV29yayB1bmRlciB0ZXJtcyBvZiBZb3VyIGNob2ljZSwKK3Byb3ZpZGVkIHRoYXQgWW91IGFsc28gY29tcGx5IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgZm9yCit0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIExhcmdlciBXb3JrIGlzIGEgY29tYmluYXRpb24gb2YgQ292ZXJlZAorU29mdHdhcmUgd2l0aCBhIHdvcmsgZ292ZXJuZWQgYnkgb25lIG9yIG1vcmUgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQgdGhlCitDb3ZlcmVkIFNvZnR3YXJlIGlzIG5vdCBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMsIHRoaXMKK0xpY2Vuc2UgcGVybWl0cyBZb3UgdG8gYWRkaXRpb25hbGx5IGRpc3RyaWJ1dGUgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlCit1bmRlciB0aGUgdGVybXMgb2Ygc3VjaCBTZWNvbmRhcnkgTGljZW5zZShzKSwgc28gdGhhdCB0aGUgcmVjaXBpZW50IG9mCit0aGUgTGFyZ2VyIFdvcmsgbWF5LCBhdCB0aGVpciBvcHRpb24sIGZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZAorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGlzIExpY2Vuc2Ugb3Igc3VjaCBTZWNvbmRhcnkKK0xpY2Vuc2UocykuCisKKzMuNC4gTm90aWNlcworCitZb3UgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgdGhlIHN1YnN0YW5jZSBvZiBhbnkgbGljZW5zZSBub3RpY2VzCisoaW5jbHVkaW5nIGNvcHlyaWdodCBub3RpY2VzLCBwYXRlbnQgbm90aWNlcywgZGlzY2xhaW1lcnMgb2Ygd2FycmFudHksCitvciBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkpIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gb2YKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlLCBleGNlcHQgdGhhdCBZb3UgbWF5IGFsdGVyIGFueSBsaWNlbnNlIG5vdGljZXMgdG8KK3RoZSBleHRlbnQgcmVxdWlyZWQgdG8gcmVtZWR5IGtub3duIGZhY3R1YWwgaW5hY2N1cmFjaWVzLgorCiszLjUuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXMKKworWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorYmVoYWxmIG9mIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55CitzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHksIG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkKK2xpYWJpbGl0eSBpbmN1cnJlZCBieSBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuIFlvdSBtYXkgaW5jbHVkZSBhZGRpdGlvbmFsCitkaXNjbGFpbWVycyBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5IHNwZWNpZmljIHRvIGFueQoranVyaXNkaWN0aW9uLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgcGxhY2VkIGluIGEgdGV4dCBmaWxlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlCitvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhCityZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBUZXJtaW5hdGlvbgorLS0tLS0tLS0tLS0tLS0KKworNS4xLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBvZiBpdHMgdGVybXMuIEhvd2V2ZXIsIGlmIFlvdSBiZWNvbWUKK2NvbXBsaWFudCwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyCitDb250cmlidXRvciBhcmUgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCBzdWNoCitDb250cmlidXRvciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5IHRlcm1pbmF0ZXMgWW91ciBncmFudHMsIGFuZCAoYikgb24gYW4KK29uZ29pbmcgYmFzaXMsIGlmIHN1Y2ggQ29udHJpYnV0b3IgZmFpbHMgdG8gbm90aWZ5IFlvdSBvZiB0aGUKK25vbi1jb21wbGlhbmNlIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0byA2MCBkYXlzIGFmdGVyIFlvdSBoYXZlCitjb21lIGJhY2sgaW50byBjb21wbGlhbmNlLiBNb3Jlb3ZlciwgWW91ciBncmFudHMgZnJvbSBhIHBhcnRpY3VsYXIKK0NvbnRyaWJ1dG9yIGFyZSByZWluc3RhdGVkIG9uIGFuIG9uZ29pbmcgYmFzaXMgaWYgc3VjaCBDb250cmlidXRvcgorbm90aWZpZXMgWW91IG9mIHRoZSBub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlCitmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiBub24tY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZQorZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgWW91IGJlY29tZSBjb21wbGlhbnQgcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgorWW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKzUuMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IGJ5IGFzc2VydGluZyBhIHBhdGVudAoraW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucywKK2NvdW50ZXItY2xhaW1zLCBhbmQgY3Jvc3MtY2xhaW1zKSBhbGxlZ2luZyB0aGF0IGEgQ29udHJpYnV0b3IgVmVyc2lvbgorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8KK1lvdSBieSBhbnkgYW5kIGFsbCBDb250cmlidXRvcnMgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIFNlY3Rpb24KKzIuMSBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlLgorCis1LjMuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA1LjEgb3IgNS4yIGFib3ZlLCBhbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaAoraGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgWW91ciBkaXN0cmlidXRvcnMgdW5kZXIgdGhpcyBMaWNlbnNlCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgNi4gRGlzY2xhaW1lciBvZiBXYXJyYW50eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gImFzIGlzIiAgICAgICAqCisqICBiYXNpcywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCwgaW1wbGllZCwgb3IgICoKKyogIHN0YXR1dG9yeSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHdhcnJhbnRpZXMgdGhhdCB0aGUgICAgICAgKgorKiAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBmcmVlIG9mIGRlZmVjdHMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhICAgICAgICAqCisqICBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3Igbm9uLWluZnJpbmdpbmcuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgICAgICoKKyogIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIHdpdGggWW91LiAgICAgICAgKgorKiAgU2hvdWxkIGFueSBDb3ZlcmVkIFNvZnR3YXJlIHByb3ZlIGRlZmVjdGl2ZSBpbiBhbnkgcmVzcGVjdCwgWW91ICAgICAqCisqICAobm90IGFueSBDb250cmlidXRvcikgYXNzdW1lIHRoZSBjb3N0IG9mIGFueSBuZWNlc3Nhcnkgc2VydmljaW5nLCAgICoKKyogIHJlcGFpciwgb3IgY29ycmVjdGlvbi4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGNvbnN0aXR1dGVzIGFuICAgKgorKiAgZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyB1c2Ugb2YgYW55IENvdmVyZWQgU29mdHdhcmUgaXMgICAqCisqICBhdXRob3JpemVkIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLiAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICA3LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgdG9ydCAgICAgICoKKyogIChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIGFueSAgICAgICAgICAgKgorKiAgQ29udHJpYnV0b3IsIG9yIGFueW9uZSB3aG8gZGlzdHJpYnV0ZXMgQ292ZXJlZCBTb2Z0d2FyZSBhcyAgICAgICAgICAqCisqICBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byBZb3UgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCAgICAgICAgICoKKyogIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyICAgICAgKgorKiAgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3QgcHJvZml0cywgbG9zcyBvZiAgICAqCisqICBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55ICAgICoKKyogIGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcywgZXZlbiBpZiBzdWNoIHBhcnR5ICAgICAgKgorKiAgc2hhbGwgaGF2ZSBiZWVuIGluZm9ybWVkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIFRoaXMgICAqCisqICBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciAgICoKKyogIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBzdWNoIHBhcnR5J3MgbmVnbGlnZW5jZSB0byB0aGUgICAgICAgKgorKiAgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUgICAgICAgICAgICAgICAqCisqICBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgICAgICAgICAgICoKKyogIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgICAgICAgICAgKgorKiAgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis4LiBMaXRpZ2F0aW9uCistLS0tLS0tLS0tLS0tCisKK0FueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZQorY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlIHRoZSBkZWZlbmRhbnQgbWFpbnRhaW5zIGl0cyBwcmluY2lwYWwKK3BsYWNlIG9mIGJ1c2luZXNzIGFuZCBzdWNoIGxpdGlnYXRpb24gc2hhbGwgYmUgZ292ZXJuZWQgYnkgbGF3cyBvZiB0aGF0CitqdXJpc2RpY3Rpb24sIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KK05vdGhpbmcgaW4gdGhpcyBTZWN0aW9uIHNoYWxsIHByZXZlbnQgYSBwYXJ0eSdzIGFiaWxpdHkgdG8gYnJpbmcKK2Nyb3NzLWNsYWltcyBvciBjb3VudGVyLWNsYWltcy4KKworOS4gTWlzY2VsbGFuZW91cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcwordGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlcgorc2hhbGwgbm90IGJlIHVzZWQgdG8gY29uc3RydWUgdGhpcyBMaWNlbnNlIGFnYWluc3QgYSBDb250cmlidXRvci4KKworMTAuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMTAuMS4gTmV3IFZlcnNpb25zCisKK01vemlsbGEgRm91bmRhdGlvbiBpcyB0aGUgbGljZW5zZSBzdGV3YXJkLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbgorMTAuMywgbm8gb25lIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2Ugc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBvcgorcHVibGlzaCBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworMTAuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucworCitZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uCitvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwKK29yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZQorc3Rld2FyZC4KKworMTAuMy4gTW9kaWZpZWQgVmVyc2lvbnMKKworSWYgeW91IGNyZWF0ZSBzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdhbnQgdG8KK2NyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBzdWNoIHNvZnR3YXJlLCB5b3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEKK21vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlmIHlvdSByZW5hbWUgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZQorYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdAorc3VjaCBtb2RpZmllZCBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpLgorCisxMC40LiBEaXN0cmlidXRpbmcgU291cmNlIENvZGUgRm9ybSB0aGF0IGlzIEluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeQorTGljZW5zZXMKKworSWYgWW91IGNob29zZSB0byBkaXN0cmlidXRlIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aAorU2Vjb25kYXJ5IExpY2Vuc2VzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHRoZQorbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEIgb2YgdGhpcyBMaWNlbnNlIG11c3QgYmUgYXR0YWNoZWQuCisKK0V4aGliaXQgQSAtIFNvdXJjZSBDb2RlIEZvcm0gTGljZW5zZSBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKworSWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIKK2ZpbGUsIHRoZW4gWW91IG1heSBpbmNsdWRlIHRoZSBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIExJQ0VOU0UKK2ZpbGUgaW4gYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgcmVjaXBpZW50IHdvdWxkIGJlIGxpa2VseSB0byBsb29rCitmb3Igc3VjaCBhIG5vdGljZS4KKworWW91IG1heSBhZGQgYWRkaXRpb25hbCBhY2N1cmF0ZSBub3RpY2VzIG9mIGNvcHlyaWdodCBvd25lcnNoaXAuCisKK0V4aGliaXQgQiAtICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiIE5vdGljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiLCBhcworICBkZWZpbmVkIGJ5IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCB2LiAyLjAuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01TLVBMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MGQ2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1QTApAQCAtMCwwICsxLDE5IEBACisKK01pY3Jvc29mdCBQdWJsaWMgTGljZW5zZSAoTXMtUEwpCisgCisKK1RoaXMgbGljZW5zZSBnb3Zlcm5zIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoZSBzb2Z0d2FyZSwgeW91IGFjY2VwdCB0aGlzIGxpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBsaWNlbnNlLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKyAKKworRGVmaW5pdGlvbnMKK1RoZSB0ZXJtcyAicmVwcm9kdWNlLCIgInJlcHJvZHVjdGlvbiwiICJkZXJpdmF0aXZlIHdvcmtzLCIgYW5kICJkaXN0cmlidXRpb24iIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIHVuZGVyIFUuUy4gY29weXJpZ2h0IGxhdy4gQSAiY29udHJpYnV0aW9uIiBpcyB0aGUgb3JpZ2luYWwgc29mdHdhcmUsIG9yIGFueSBhZGRpdGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgc29mdHdhcmUuIEEgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzIGxpY2Vuc2UuICJMaWNlbnNlZCBwYXRlbnRzIiBhcmUgYSBjb250cmlidXRvcmBzIHBhdGVudCBjbGFpbXMgdGhhdCByZWFkIGRpcmVjdGx5IG9uIGl0cyBjb250cmlidXRpb24uCitHcmFudCBvZiBSaWdodHMKKyhBKSBDb3B5cmlnaHQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlIGl0cyBjb250cmlidXRpb24sIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdHMgY29udHJpYnV0aW9uLCBhbmQgZGlzdHJpYnV0ZSBpdHMgY29udHJpYnV0aW9uIG9yIGFueSBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgeW91IGNyZWF0ZS4KKyhCKSBQYXRlbnQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGNvbmRpdGlvbnMgYW5kIGxpbWl0YXRpb25zIGluIHNlY3Rpb24gMywgZWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciBpdHMgbGljZW5zZWQgcGF0ZW50cyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIGl0cyBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIGNvbnRyaWJ1dGlvbiBpbiB0aGUgc29mdHdhcmUuCitDb25kaXRpb25zIGFuZCBMaW1pdGF0aW9ucworKEEpIE5vIFRyYWRlbWFyayBMaWNlbnNlLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHJpZ2h0cyB0byB1c2UgYW55IGNvbnRyaWJ1dG9yc2AgbmFtZSwgbG9nbywgb3IgdHJhZGVtYXJrcy4gCisoQikgSWYgeW91IGJyaW5nIGEgcGF0ZW50IGNsYWltIGFnYWluc3QgYW55IGNvbnRyaWJ1dG9yIG92ZXIgcGF0ZW50cyB0aGF0IHlvdSBjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgdG8gdGhlIHNvZnR3YXJlIGVuZHMgYXV0b21hdGljYWxseS4gCisoQykgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlLCB5b3UgbXVzdCByZXRhaW4gYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIHNvZnR3YXJlLiAKKyhEKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gc291cmNlIGNvZGUgZm9ybSwgeW91IG1heSBkbyBzbyBvbmx5IHVuZGVyIHRoaXMgbGljZW5zZSBieSBpbmNsdWRpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgbGljZW5zZSB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLiBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgaW4gY29tcGlsZWQgb3Igb2JqZWN0IGNvZGUgZm9ybSwgeW91IG1heSBvbmx5IGRvIHNvIHVuZGVyIGEgbGljZW5zZSB0aGF0IGNvbXBsaWVzIHdpdGggdGhpcyBsaWNlbnNlLiAKKyhFKSBUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQgImFzLWlzLiIgWW91IGJlYXIgdGhlIHJpc2sgb2YgdXNpbmcgaXQuIFRoZSBjb250cmlidXRvcnMgZ2l2ZSBubyBleHByZXNzIHdhcnJhbnRpZXMsIGd1YXJhbnRlZXMsIG9yIGNvbmRpdGlvbnMuIFlvdSBtYXkgaGF2ZSBhZGRpdGlvbmFsIGNvbnN1bWVyIHJpZ2h0cyB1bmRlciB5b3VyIGxvY2FsIGxhd3Mgd2hpY2ggdGhpcyBsaWNlbnNlIGNhbm5vdCBjaGFuZ2UuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIHlvdXIgbG9jYWwgbGF3cywgdGhlIGNvbnRyaWJ1dG9ycyBleGNsdWRlIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhbmQgbm9uLWluZnJpbmdlbWVudC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NUy1STApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAzYzBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTVMtUkwKQEAgLTAsMCArMSwyMyBAQAorCitNaWNyb3NvZnQgUmVjaXByb2NhbCBMaWNlbnNlIChNcy1STCkKKyAKKworVGhpcyBsaWNlbnNlIGdvdmVybnMgdXNlIG9mIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhlIHNvZnR3YXJlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gSWYgeW91IGRvIG5vdCBhY2NlcHQgdGhlIGxpY2Vuc2UsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgorIAorCitEZWZpbml0aW9ucworVGhlIHRlcm1zICJyZXByb2R1Y2UsIiAicmVwcm9kdWN0aW9uLCIgImRlcml2YXRpdmUgd29ya3MsIiBhbmQgImRpc3RyaWJ1dGlvbiIgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LgorQSAiY29udHJpYnV0aW9uIiBpcyB0aGUgb3JpZ2luYWwgc29mdHdhcmUsIG9yIGFueSBhZGRpdGlvbnMgb3IgY2hhbmdlcyB0byB0aGUgc29mdHdhcmUuIAorQSAiY29udHJpYnV0b3IiIGlzIGFueSBwZXJzb24gdGhhdCBkaXN0cmlidXRlcyBpdHMgY29udHJpYnV0aW9uIHVuZGVyIHRoaXMgbGljZW5zZS4gCisiTGljZW5zZWQgcGF0ZW50cyIgYXJlIGEgY29udHJpYnV0b3JgcyBwYXRlbnQgY2xhaW1zIHRoYXQgcmVhZCBkaXJlY3RseSBvbiBpdHMgY29udHJpYnV0aW9uLgorR3JhbnQgb2YgUmlnaHRzCisoQSkgQ29weXJpZ2h0IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBpdHMgY29udHJpYnV0aW9uLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgaXRzIGNvbnRyaWJ1dGlvbiwgYW5kIGRpc3RyaWJ1dGUgaXRzIGNvbnRyaWJ1dGlvbiBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUuCisoQikgUGF0ZW50IEdyYW50LSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgaXRzIGxpY2Vuc2VkIHBhdGVudHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBjb250cmlidXRpb24gaW4gdGhlIHNvZnR3YXJlLgorQ29uZGl0aW9ucyBhbmQgTGltaXRhdGlvbnMKKyhBKSBSZWNpcHJvY2FsIEdyYW50cy0gRm9yIGFueSBmaWxlIHlvdSBkaXN0cmlidXRlIHRoYXQgY29udGFpbnMgY29kZSBmcm9tIHRoZSBzb2Z0d2FyZSAoaW4gc291cmNlIGNvZGUgb3IgYmluYXJ5IGZvcm1hdCksIHlvdSBtdXN0IHByb3ZpZGUgcmVjaXBpZW50cyB0aGUgc291cmNlIGNvZGUgdG8gdGhhdCBmaWxlIGFsb25nIHdpdGggYSBjb3B5IG9mIHRoaXMgbGljZW5zZSwgd2hpY2ggbGljZW5zZSB3aWxsIGdvdmVybiB0aGF0IGZpbGUuIFlvdSBtYXkgbGljZW5zZSBvdGhlciBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSB5b3VyIG93biB3b3JrIGFuZCBkbyBub3QgY29udGFpbiBjb2RlIGZyb20gdGhlIHNvZnR3YXJlIHVuZGVyIGFueSB0ZXJtcyB5b3UgY2hvb3NlLiAKKyhCKSBObyBUcmFkZW1hcmsgTGljZW5zZS0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSByaWdodHMgdG8gdXNlIGFueSBjb250cmlidXRvcnNgIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MuIAorKEMpIElmIHlvdSBicmluZyBhIHBhdGVudCBjbGFpbSBhZ2FpbnN0IGFueSBjb250cmlidXRvciBvdmVyIHBhdGVudHMgdGhhdCB5b3UgY2xhaW0gYXJlIGluZnJpbmdlZCBieSB0aGUgc29mdHdhcmUsIHlvdXIgcGF0ZW50IGxpY2Vuc2UgZnJvbSBzdWNoIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuIAorKEQpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSwgeW91IG11c3QgcmV0YWluIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyB0aGF0IGFyZSBwcmVzZW50IGluIHRoZSBzb2Z0d2FyZS4gCisoRSkgSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIGZvcm0sIHlvdSBtYXkgZG8gc28gb25seSB1bmRlciB0aGlzIGxpY2Vuc2UgYnkgaW5jbHVkaW5nIGEgY29tcGxldGUgY29weSBvZiB0aGlzIGxpY2Vuc2Ugd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlIHNvZnR3YXJlIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm0sIHlvdSBtYXkgb25seSBkbyBzbyB1bmRlciBhIGxpY2Vuc2UgdGhhdCBjb21wbGllcyB3aXRoIHRoaXMgbGljZW5zZS4gCisoRikgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkICJhcy1pcy4iIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUgY29udHJpYnV0b3JzIGdpdmUgbm8gZXhwcmVzcyB3YXJyYW50aWVzLCBndWFyYW50ZWVzLCBvciBjb25kaXRpb25zLiBZb3UgbWF5IGhhdmUgYWRkaXRpb25hbCBjb25zdW1lciByaWdodHMgdW5kZXIgeW91ciBsb2NhbCBsYXdzIHdoaWNoIHRoaXMgbGljZW5zZSBjYW5ub3QgY2hhbmdlLiBUbyB0aGUgZXh0ZW50IHBlcm1pdHRlZCB1bmRlciB5b3VyIGxvY2FsIGxhd3MsIHRoZSBjb250cmlidXRvcnMgZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTWlyT1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2NzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01pck9TCkBAIC0wLDAgKzEsNTggQEAKKworTWlyT1MgTGljZW5zZQorCisvKi0KKyogQ29weXJpZ2h0ICYjMTY5OyB5ZWFyLCB5ZWFyLCB5ZWFyLCAmIzgyMzA7CisqIEZpcnN0IE0uIExhc3QgPHVzZXJAaG9zdC5kb21haW4+CisqCisqIFByb3ZpZGVkIHRoYXQgdGhlc2UgdGVybXMgYW5kIGRpc2NsYWltZXIgYW5kIGFsbCBjb3B5cmlnaHQgbm90aWNlcworKiBhcmUgcmV0YWluZWQgb3IgcmVwcm9kdWNlZCBpbiBhbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnQsIHBlcm1pc3Npb24KKyogaXMgZ3JhbnRlZCB0byBkZWFsIGluIHRoaXMgd29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgdW4mIzgyMDg7CisqIGxpbWl0ZWQgcmlnaHRzIHRvIHVzZSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSwgc2VsbCwgbW9kaWZ5LAorKiBtZXJnZSwgZ2l2ZSBhd2F5LCBvciBzdWJsaWNlbmNlLgorKgorKiBUaGlzIHdvcmsgaXMgcHJvdmlkZWQgIkFTIElTIiBhbmQgV0lUSE9VVCBXQVJSQU5UWSBvZiBhbnkga2luZCwgdG8KKyogdGhlIHV0bW9zdCBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBuZWl0aGVyIGV4cHJlc3Mgbm9yCisqIGltcGxpZWQ7IHdpdGhvdXQgbWFsaWNpb3VzIGludGVudCBvciBncm9zcyBuZWdsaWdlbmNlLiBJbiBubyBldmVudAorKiBtYXkgYSBsaWNlbnNvciwgYXV0aG9yIG9yIGNvbnRyaWJ1dG9yIGJlIGhlbGQgbGlhYmxlIGZvciBpbmRpcmVjdCwKKyogZGlyZWN0LCBvdGhlciBkYW1hZ2UsIGxvc3MsIG9yIG90aGVyIGlzc3VlcyBhcmlzaW5nIGluIGFueSB3YXkgb3V0CisqIG9mIGRlYWxpbmcgaW4gdGhlIHdvcmssIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaAorKiBkYW1hZ2Ugb3IgZXhpc3RlbmNlIG9mIGEgZGVmZWN0LCBleGNlcHQgcHJvdmVuIHRoYXQgaXQgcmVzdWx0cyBvdXQKKyogb2Ygc2FpZCBwZXJzb25gcyBpbW1lZGlhdGUgZmF1bHQgd2hlbiB1c2luZyB0aGUgd29yayBhcyBpbnRlbmRlZC4KKyovCisKK0lfTl9TX1RfUl9VX0NfVF9JX09fTl9TXzpfCitUbyBhcHBseSB0aGUgdGVtcGxhdGUoJiMxODU7KSBzcGVjaWZ5IHRoZSB5ZWFycyBvZiBjb3B5cmlnaHQgKHNlcGFyYXRlZCBieQorY29tbWEsIG5vdCBhcyBhIHJhbmdlKSwgdGhlIGxlZ2FsIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycywgYW5kCit0aGUgcmVhbCBuYW1lcyBvZiB0aGUgYXV0aG9ycyBpZiBkaWZmZXJlbnQuIEF2b2lkIGFkZGluZyB0ZXh0LgorCitSX0FfVF9JX09fTl9BX0xfRV86XworVGhpcyBsaWNlbmNlIGlzIGFwdCBmb3IgYW55IGtpbmQgb2Ygd29yayAoc3VjaCBhcyBzb3VyY2UgY29kZSwgZm9udHMsCitkb2N1bWVudGF0aW9uLCBncmFwaGljcywgc291bmQgZXRjLikgYW5kIHRoZSBwcmVmZXJyZWQgdGVybXMgZm9yIHdvcmsKK2FkZGVkIHRvIE1pckJTRC4gSXQgaGFzIGJlZW4gZHJhZnRlZCBhcyB1bml2ZXJzYWxseSB1c2FibGUgZXF1aXZhbGVudAorb2YgdGhlICJoaXN0b3JpYyBwZXJtaXNzaW9uIG5vdGljZSImIzgzMTc7JiMxNzg7JiM4MzE4OyBhZGFwdGVkIHRvIEV1cm9wZW4gbGF3IGJlY2F1c2UKK2luIHNvbWUgKGRyb2l0IGRgYXV0ZXVyKSBjb3VudHJpZXMgYXV0aG9ycyBjYW5ub3QgZGlzY2xhaW0gYWxsIGxpYWJpJiM4MjA4OworbGl0aWVzLiBDb21wbGlhbmNlIHRvIERGU0cmIzgzMTc7JiMxNzk7JiM4MzE4OyAxLjEgaXMgZW5zdXJlZCwgYW5kIEdQTHYyIGNvbXBhdGliaWxpdHkKK2lzIGFzc2VydGVkIHVubGVzcyBhZHZlcnRpc2luZyBjbGF1c2VzIGFyZSB1c2VkLiBUaGUgTWlyT1MgTGljZW5jZSBpcworY2VydGlmaWVkIHRvIGNvbmZvcm0gdG8gT0tEJiM4MzE3OyYjODMwODsmIzgzMTg7IDEuMCBhbmQgT1NEJiM4MzE3OyYjODMwOTsmIzgzMTg7IDEuOSwgYW5kIHF1YWxpZmllcyBhcyBhCitGcmVlIFNvZnR3YXJlJiM4MzE3OyYjODMxMDsmIzgzMTg7IGFuZCBhbHNvIEZyZWUgRG9jdW1lbnRhdGlvbiYjODMxNzsmIzgzMTE7JiM4MzE4OyBsaWNlbmNlIGFuZCBpcyBpbmNsdSYjODIwODsKK2RlZCBpbiBzb21lIHJlbGV2YW50IGxpc3RzJiM4MzE3OyYjODMxMjsmIzgzMTg7JiM4MzE3OyYjODMxMzsmIzgzMTg7JiM4MzE3OyYjMTg1OyYjODMwNDsmIzgzMTg7LgorCitXZSBiZWxpZXZlIHlvdSBhcmUgbm90IGxpYWJsZSBmb3Igd29yayBpbnNlcnRlZCB3aGljaCBpcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IG9mIHRoaXJkIHBhcnRpZXMsIGlmIHlvdSB3ZXJlIG5vdCBhd2FyZSBvZiB0aGUgZmFjdCwgYWN0IGFwJiM4MjA4OworcHJvcHJpYXRlbHkgYXMgc29vbiBhcyB5b3UgYmVjb21lIGF3YXJlIG9mIHRoYXQgcHJvYmxlbSwgc2VlayBhbiBhbWkmIzgyMDg7CitjYWJsZSBzb2x1dGlvbiBmb3IgYWxsIHBhcnRpZXMsIGFuZCBuZXZlciBrbm93aW5nbHkgZGlzdHJpYnV0ZSBhIHdvcmsKK3dpdGhvdXQgYmVpbmcgYXV0aG9yaXNlZCB0byBkbyBzbyBieSBpdHMgbGljZW5zb3JzLgorCitSX0VfRl9FX1JfRV9OX0NfRV9TXzpfCismIzkzMTI7IGFsc28gYXQgaHR0cDovL21pcmJzZC5kZS9NaXJPUy1MaWNlbmNlCismIzkzMTM7IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvaGlzdG9yaWNhbC5waHAKKyYjOTMxNDsgaHR0cDovL3d3dy5kZWJpYW4ub3JnL3NvY2lhbF9jb250cmFjdCNndWlkZWxpbmVzCismIzkzMTU7IGh0dHA6Ly93d3cub3BlbmRlZmluaXRpb24ub3JnLzEuMAorJiM5MzE2OyBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2RvY3Mvb3NkCismIzkzMTc7IGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtc3cuaHRtbAorJiM5MzE4OyBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLWRvYy5odG1sCismIzkzMTk7IGh0dHA6Ly93d3cuaWZyb3NzLmRlL2lmcm9zc19odG1sL2xpemVuemNlbnRlci5odG1sCismIzkzMjA7IGh0dHA6Ly93d3cub3BlbmRlZmluaXRpb24ub3JnL2xpY2Vuc2VzCismIzkzMjE7IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXJvcy5odG1sCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTW90b3NvdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1MjRmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL01vdG9zb3RvCkBAIC0wLDAgKzEsNDIyIEBACisKK01PVE9TT1RPIE9QRU4gU09VUkNFIExJQ0VOU0UgLSBWZXJzaW9uIDAuOS4xCitUaGlzIE1vdG9zb3RvIE9wZW4gU291cmNlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gIkNvbW11bml0eQorUG9ydGFsIFNlcnZlciIgYW5kIHJlbGF0ZWQgc29mdHdhcmUgcHJvZHVjdHMgYXMgd2VsbCBhcyBhbnkgdXBkYXRlc29yCittYWludGVuYW5jZSByZWxlYXNlcyBvZiB0aGF0IHNvZnR3YXJlICgiTW90b3NvdG8gUHJvZHVjdHMiKSB0aGF0IGFyZQorZGlzdHJpYnV0ZWQgYnkgTW90b3NvdG8uQ29tIEIuVi4gKCJMaWNlbnNvciIpLiBBbnkgTW90b3NvdG8KK1Byb2R1Y3QgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIGlzIGEgIkxpY2Vuc2VkIFByb2R1Y3QuIiBMaWNlbnNlZAorUHJvZHVjdCwgaW4gaXRzIGVudGlyZXR5LCBpcyBwcm90ZWN0ZWQgYnkgRHV0Y2ggY29weXJpZ2h0IGxhdy4KK1RoaXMKK0xpY2Vuc2UgaWRlbnRpZmllcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggeW91IG1heSB1c2UsIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5CitMaWNlbnNlZCBQcm9kdWN0IGFuZCBoYXMgYmVlbiBzdWJtaXR0ZWQgdG8gdGhlIE9wZW4gU29mdHdhcmUgSW5pdGlhdGl2ZSAoT1NJKQorZm9yIGFwcHJvdmFsLgorCitQcmVhbWJsZQorCitUaGlzIFByZWFtYmxlIGlzIGludGVuZGVkIHRvIGRlc2NyaWJlLCBpbiBwbGFpbiBFbmdsaXNoLCB0aGUgbmF0dXJlIGFuZCBzY29wZSBvZgordGhpcyBMaWNlbnNlLiBIb3dldmVyLCB0aGlzIFByZWFtYmxlIGlzIG5vdCBhIHBhcnQgb2YgdGhpcyBsaWNlbnNlLiBUaGUgbGVnYWwKK2VmZmVjdCBvZiB0aGlzIExpY2Vuc2UgaXMgZGVwZW5kZW50IG9ubHkgdXBvbiB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgYW5kIG5vdAordGhpcyBQcmVhbWJsZS4KK1RoaXMgTGljZW5zZSBjb21wbGllcyB3aXRoIHRoZSBPcGVuIFNvdXJjZSBEZWZpbml0aW9uIGFuZCBoYXMgYmVlbiBhcHByb3ZlZCBieQorT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4gU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBiZSBtYXJrZWQKK2FzICJPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIFNvZnR3YXJlLiIKKworVGhpcyBMaWNlbnNlIHByb3ZpZGVzIHRoYXQ6CisKKzEuIFlvdSBtYXkgdXNlLCBzZWxsIG9yIGdpdmUgYXdheSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYWxvbmUgb3IgYXMgYQorY29tcG9uZW50IG9mIGFuIGFnZ3JlZ2F0ZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gY29udGFpbmluZworcHJvZ3JhbXMgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2VzLiBObyByb3lhbHR5IG9yIG90aGVyIGZlZSBpcworcmVxdWlyZWQuCisKKzIuIEJvdGggU291cmNlIENvZGUgYW5kIGV4ZWN1dGFibGUgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsCitpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHByZXZpb3VzIENvbnRyaWJ1dG9ycywgYXJlCithdmFpbGFibGUgZm9yIHlvdXIgdXNlLiAoVGhlIHRlcm1zICJMaWNlbnNlZCBQcm9kdWN0LCIgIk1vZGlmaWNhdGlvbnMsIgorIkNvbnRyaWJ1dG9ycyIgYW5kICJTb3VyY2UgQ29kZSIgYXJlIGRlZmluZWQgaW4gdGhlIExpY2Vuc2UuKQorCiszLiBZb3UgYXJlIGFsbG93ZWQgdG8gbWFrZSBNb2RpZmljYXRpb25zIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBhbmQgeW91CitjYW4gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgZnJvbSBpdC4gKFRoZSB0ZXJtICJEZXJpdmF0aXZlCitXb3JrcyIgaXMgZGVmaW5lZCBpbiB0aGUgTGljZW5zZS4pCisKKzQuIEJ5IGFjY2VwdGluZyB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UsCit5b3UgYWdyZWUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgbWFrZSB0byB0aGUgTGljZW5zZWQKK1Byb2R1Y3QgYW5kIHRoZW4gZGlzdHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcworTGljZW5zZS4gSW4gcGFydGljdWxhciwgeW91IG11c3QgbWFrZSB0aGUgU291cmNlIENvZGUgb2YgeW91cgorTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gb3RoZXJzLgorCis1LiBZb3UgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBmb3IgYW55IHB1cnBvc2UsIGJ1dCB0aGUgTGljZW5zb3IgaXMKK25vdCBwcm92aWRpbmcgeW91IGFueSB3YXJyYW50eSB3aGF0c29ldmVyLCBub3IgaXMgdGhlIExpY2Vuc29yCithY2NlcHRpbmcgYW55IGxpYWJpbGl0eSBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zZWQgUHJvZHVjdCBkb2VzbmB0Cit3b3JrIHByb3Blcmx5IG9yIGNhdXNlcyB5b3UgYW55IGluanVyeSBvciBkYW1hZ2VzLgorCis2LiBJZiB5b3Ugc3VibGljZW5zZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBvciBEZXJpdmF0aXZlIFdvcmtzLCB5b3UgbWF5CitjaGFyZ2UgZmVlcyBmb3Igd2FycmFudHkgb3Igc3VwcG9ydCwgb3IgZm9yIGFjY2VwdGluZyBpbmRlbW5pdHkKK29yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byB5b3VyIGN1c3RvbWVycy4gWW91IGNhbm5vdCBjaGFyZ2UgZm9yIHRoZQorU291cmNlIENvZGUuCisKKzcuIElmIHlvdSBhc3NlcnQgYW55IHBhdGVudCBjbGFpbXMgYWdhaW5zdCB0aGUgTGljZW5zb3IgcmVsYXRpbmcgdG8gdGhlCitMaWNlbnNlZCBQcm9kdWN0LCBvciBpZiB5b3UgYnJlYWNoIGFueSB0ZXJtcyBvZiB0aGUgTGljZW5zZSwgeW91cgorcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoaXMgTGljZW5zZSBhdXRvbWF0aWNhbGx5Cit0ZXJtaW5hdGUuCisKK1lvdSBtYXkgdXNlIHRoaXMgTGljZW5zZSB0byBkaXN0cmlidXRlIHlvdXIgb3duIERlcml2YXRpdmUgV29ya3MsIGluIHdoaWNoCitjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSB3aWxsIGFwcGx5IHRvIHlvdXIgRGVyaXZhdGl2ZQorV29ya3MganVzdCBhcyB0aGV5IGRvIHRvIHRoZSBvcmlnaW5hbCBMaWNlbnNlZCBQcm9kdWN0LgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IGRpc3RyaWJ1dGUgeW91ciBEZXJpdmF0aXZlIFdvcmtzIHVuZGVyIGFueSBvdGhlcgorT1NJLWFwcHJvdmVkIE9wZW4gU291cmNlIGxpY2Vuc2UsIG9yIHVuZGVyIGEgcHJvcHJpZXRhcnkgbGljZW5zZSBvZgoreW91ciBjaG9pY2UuIElmIHlvdSB1c2UgYW55IGxpY2Vuc2Ugb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHlvdSBtdXN0Citjb250aW51ZSB0byBmdWxmaWxsIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgdGhlCitwcm92aXNpb25zIHJlbGF0aW5nIHRvIHB1Ymxpc2hpbmcgdGhlIFNvdXJjZSBDb2RlKSBmb3IgdGhvc2UgcG9ydGlvbnMgb2YgeW91cgorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGNvbnNpc3Qgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZwordGhlIGZpbGVzIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucy4KKworTmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBtYXkgYmUgcHVibGlzaGVkIGZyb20gdGltZSB0byB0aW1lLiBZb3UgbWF5CitjaG9vc2UgdG8gY29udGludWUgdG8gdXNlIHRoZSBsaWNlbnNlIHRlcm1zIGluIHRoaXMgdmVyc2lvbiBvZiB0aGUKK0xpY2Vuc2Ugb3IgdGhvc2UgZnJvbSB0aGUgbmV3IHZlcnNpb24uIEhvd2V2ZXIsIG9ubHkgdGhlIExpY2Vuc29yIGhhcyB0aGUgcmlnaHQKK3RvIGNoYW5nZSB0aGUgTGljZW5zZSB0ZXJtcyBhcyB0aGV5IGFwcGx5IHRvIHRoZSBMaWNlbnNlZAorUHJvZHVjdC4KK1RoaXMgTGljZW5zZSByZWxpZXMgb24gcHJlY2lzZSBkZWZpbml0aW9ucyBmb3IgY2VydGFpbiB0ZXJtcy4gVGhvc2UgdGVybXMgYXJlCitkZWZpbmVkIHdoZW4gdGhleSBhcmUgZmlyc3QgdXNlZCwgYW5kIHRoZSBkZWZpbml0aW9ucyBhcmUgcmVwZWF0ZWQgZm9yCit5b3VyIGNvbnZlbmllbmNlIGluIGEgR2xvc3NhcnkgYXQgdGhlIGVuZCBvZiB0aGUgTGljZW5zZS4KKworTGljZW5zZSBUZXJtcworCisxLiBHcmFudCBvZiBMaWNlbnNlIEZyb20gTGljZW5zb3IuCisKK0xpY2Vuc29yCitoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvCit0aGlyZAorcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYS4gVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mIChpbmNsdWRpbmcKK01vZGlmaWNhdGlvbnMgYXMgaGVyZWluYWZ0ZXIgZGVmaW5lZCksIGluIGJvdGggU291cmNlIENvZGUgb3IgYXMKK2FuIGV4ZWN1dGFibGUgcHJvZ3JhbS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkCitmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nCithbGwgbW9kdWxlcyBjb250YWluZWQgdGhlcmVpbiwgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgb3IgYSBsaXN0IG9mCitkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCB0aGUgU291cmNlIENvZGUgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0LgorCitiLiBDcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgdW5kZXIgRHV0Y2gKK2NvcHlyaWdodCBsYXcpIG9mIExpY2Vuc2VkIFByb2R1Y3QgYnkgYWRkaW5nIHRvIG9yIGRlbGV0aW5nCitmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIHNhaWQgTGljZW5zZWQgUHJvZHVjdC4KKworYy4gVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkCitieSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLAorYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiwKK2J1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeSB0bworZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTGljZW5zZWQgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mIG9yCitEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKzIuIEdyYW50IG9mIExpY2Vuc2UgdG8gTW9kaWZpY2F0aW9ucyBGcm9tCitDb250cmlidXRvci4KKworIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbnMgdG8gb3IKK2RlbGV0aW9ucyBmcm9tIHRoZSBzdWJzdGFuY2Ugb3IKK3N0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgTGljZW5zZWQgUHJvZHVjdCwgb3IgKGlpKSBhbnkgbmV3IGZpbGUKK3RoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgTGljZW5zZWQgUHJvZHVjdC4gSGVyZWluYWZ0ZXIgaW4gdGhpcworTGljZW5zZSwgdGhlIHRlcm0gIkxpY2Vuc2VkIFByb2R1Y3QiIHNoYWxsIGluY2x1ZGUgYWxsIHByZXZpb3VzCitNb2RpZmljYXRpb25zIHRoYXQgeW91IHJlY2VpdmUgZnJvbSBhbnkgQ29udHJpYnV0b3IuIEJ5CithcHBsaWNhdGlvbiBvZiB0aGUgcHJvdmlzaW9ucyBpbiBTZWN0aW9uIDQoYSkgYmVsb3csIGVhY2ggcGVyc29uIG9yCitlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlIGNyZWF0aW9uIG9mLCBhbmQgZGlzdHJpYnV0ZWQsCithIE1vZGlmaWNhdGlvbiAoYSAiQ29udHJpYnV0b3IiKSBoZXJlYnkgZ3JhbnRzIHlvdSBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYS4gVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKK2Rpc3RyaWJ1dGUgYW55IE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIG9yCitwb3J0aW9ucyB0aGVyZW9mLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwKK2VpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzIG9yIGFzIHBhcnQgb2YgRGVyaXZhdGl2ZQorV29ya3MuCisKK2IuIFVuZGVyIGNsYWltcyBvZiBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieQorQ29udHJpYnV0b3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwKK2FuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dAorc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3IKK290aGVyd2lzZSBkaXNwb3NlIG9mIE1vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiBvcgorRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCiszLiBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4KKworTm90aGluZyBpbgordGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsCitwYXRlbnRzLAordHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueQorQ29udHJpYnV0b3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZCBzZXBhcmF0ZSBmcm9tIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBmb3IgY29kZSB0aGF0IHlvdSBkZWxldGUgZnJvbQordGhlIExpY2Vuc2VkIFByb2R1Y3QsIG9yIGZvciBjb21iaW5hdGlvbnMgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlCit0cmFkZW1hcmtzIG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlCitpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK2ludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudAordGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhCityaWdodCB0byBsaWNlbnNlLgorCis0LiBZb3VyIE9ibGlnYXRpb25zIFJlZ2FyZGluZyBEaXN0cmlidXRpb24uCisKK2EuIEFwcGxpY2F0aW9uIG9mIFRoaXMgTGljZW5zZSB0byBZb3VyCitNb2RpZmljYXRpb25zLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgeW91ciB1c2Ugb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0LCB5b3UKK2hlcmVieSBhZ3JlZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGNyZWF0ZSBvciB0byB3aGljaAoreW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UgZGlzdHJpYnV0ZSwgYXJlIGdvdmVybmVkIGJ5IHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBTZWN0aW9uIDIuCitBbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUKK21heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYQorZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNy4gWW91IG11c3QKK2luY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlCitNb2RpZmljYXRpb25zIHlvdSBkaXN0cmlidXRlLiBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZSBhbnkKK3Rlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSBvciBleGVjdXRhYmxlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IG9yIE1vZGlmaWNhdGlvbnMgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgYXBwbGljYWJsZQordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuCitIb3dldmVyLCB5b3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUKK2FkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDQoZSkuCisKK2IuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gWW91IG11c3QgbWFrZQorYXZhaWxhYmxlLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgU291cmNlIENvZGUgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IGFuZCBhbnkgTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBkaXN0cmlidXRlLCBlaXRoZXIgb24gdGhlCitzYW1lIG1lZGlhIGFzIHlvdSBkaXN0cmlidXRlIGFueSBleGVjdXRhYmxlIG9yIG90aGVyIGZvcm0KK29mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciB2aWEgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluCit0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYwordHJhbnNmZXIgb2YgZGF0YSAoYW4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIpLiBUaGUKK1NvdXJjZSBDb2RlIGZvciBhbnkgdmVyc2lvbiBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yCitNb2RpZmljYXRpb25zIHRoYXQgeW91IGRpc3RyaWJ1dGUgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdAorbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUKK2F2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24KK29mIHNhaWQgTGljZW5zZWQgUHJvZHVjdCBvciBNb2RpZmljYXRpb25zIGhhcyBiZWVuIG1hZGUKK2F2YWlsYWJsZS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUKK3ZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKK2MuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFueQorTW9kaWZpY2F0aW9ucyB0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaAoreW91IGRpc3RyaWJ1dGUsIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBhZGRpdGlvbnMsCitjaGFuZ2VzIG9yIGRlbGV0aW9ucyB5b3UgbWFkZSB0byBjcmVhdGUgb3IgY29udHJpYnV0ZSB0byB0aG9zZQorTW9kaWZpY2F0aW9ucywgYW5kIHRoZSBkYXRlcyBvZiBhbnkgc3VjaCBhZGRpdGlvbnMsIGNoYW5nZXMgb3IKK2RlbGV0aW9ucy4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUKK01vZGlmaWNhdGlvbnMgYXJlIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gdGhlCitMaWNlbnNlZCBQcm9kdWN0IGFuZCBpbmNsdWRlIHRoZSBuYW1lcyBvZiB0aGUgTGljZW5zb3IgYW5kIGFueQorQ29udHJpYnV0b3IgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QgaW4gKGkpIHRoZSBTb3VyY2UgQ29kZSBhbmQKKyhpaSkgaW4gYW55IG5vdGljZSBkaXNwbGF5ZWQgYnkgYSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCB5b3UgZGlzdHJpYnV0ZSBvciBpbiByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggeW91CitkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4KK1lvdSBtYXkgbm90IG1vZGlmeSBvciBkZWxldGUgYW55IHByZWV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGluCit0aGUgTGljZW5zZWQgUHJvZHVjdC4KKworZC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKK2kuIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgeW91IGhhdmUKK2tub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB0byBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IGlzCityZXF1aXJlZAordG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSwgeW91IG11c3QKK2luY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZAorIkxFR0FMIiB0aGF0IGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlCitjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdword2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIHlvdSBtYWtlCithbnkgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24KKzQoYiksIHlvdSBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcworeW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIKK3N0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yCituZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobworcmVjZWl2ZWQgdGhlIExpY2Vuc2VkIFByb2R1Y3QgZnJvbSB5b3UgdGhhdCBuZXcga25vd2xlZGdlCitoYXMgYmVlbiBvYnRhaW5lZC4KKworaWkuIENvbnRyaWJ1dG9yIEFQSXMuIElmIHlvdXIKK01vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKCJBUEkiKSBhbmQgeW91IGhhdmUKK2tub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgdGhhdCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkKK3RvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMKK2luZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCitpaWkuIFJlcHJlc2VudGF0aW9ucy4gWW91IHJlcHJlc2VudCB0aGF0LAorZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0byA0KGQpKGkpIGFib3ZlLCB5b3UgYmVsaWV2ZSB0aGF0IGFueQorTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbnMgYW5kCit0aGF0IHlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMKK2NvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworZS4gUmVxdWlyZWQgTm90aWNlcy4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMKK0xpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24geW91IHByb3ZpZGUgYWxvbmcgd2l0aCB0aGUgU291cmNlIENvZGUgb2YgYW55CitNb2RpZmljYXRpb25zIHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUsIGFuZCB3aGljaCB5b3UKK2Rpc3RyaWJ1dGUsIHdoZXJldmVyIHlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMKK3JlbGF0aW5nIHRvIExpY2Vuc2VkIFByb2R1Y3QuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlCitjb250YWluZWQgaW4gRXhoaWJpdCBBICh0aGUgIk5vdGljZSIpIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlIG9mIGFueSBjb3B5IHlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LiBJZiB5b3UKK2NyZWF0ZWQgYSBNb2RpZmljYXRpb24sIHlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhCitDb250cmlidXRvciB0byB0aGUgTm90aWNlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHRoZSBOb3RpY2UKK2luIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuCit5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggTm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudAorZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhCitub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlCityZWNpcGllbnRzIG9mIExpY2Vuc2VkIFByb2R1Y3QuIEhvd2V2ZXIsIHlvdSBtYXkgZG8gc28gb25seSBvbgoreW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgTGljZW5zb3Igb3IgYW55CitDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBjbGVhciB0aGF0IGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgeW91CithbG9uZSwgYW5kIHlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBMaWNlbnNvciBvciBzdWNoCitDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgdGVybXMgeW91IG9mZmVyLgorCitmLiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4gWW91IG1heQorZGlzdHJpYnV0ZSBMaWNlbnNlZCBQcm9kdWN0IGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSB1bmRlciBhIGxpY2Vuc2Ugb2YKK3lvdXIgY2hvaWNlIHRoYXQgbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlCitwcm92aWRlZCAoaSkgeW91IGhhdmUgc2F0aXNmaWVkIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbnMKKzQoYSkgdGhyb3VnaCA0KGUpIGZvciB0aGF0IGRpc3RyaWJ1dGlvbiwgKGlpKSB5b3UgaW5jbHVkZSBhCitjb25zcGljdW91cyBub3RpY2UgaW4gdGhlIGV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uCithbmQgY29sbGF0ZXJhbCBtYXRlcmlhbHMgc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZWQgUHJvZHVjdCBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgeW91IGhhdmUKK2Z1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiA0KGIpLCAoaWlpKSB5b3UgcmV0YWluIGFsbAorZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFuZCAoaXYpIHlvdQorbWFrZSBpdCBjbGVhciB0aGF0IGFueSB0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUKK29mZmVyZWQgYnkgeW91IGFsb25lLCBub3QgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UKK2hlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvcgorZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhCityZXN1bHQgb2YgYW55IHRlcm1zIHlvdSBvZmZlci4KKworZy4gRGlzdHJpYnV0aW9uIG9mIERlcml2YXRpdmUgV29ya3MuIFlvdSBtYXkKK2NyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIChlLmcuLCBjb21iaW5hdGlvbnMgb2Ygc29tZSBvciBhbGwgb2YgdGhlIExpY2Vuc2VkCitQcm9kdWN0IHdpdGggb3RoZXIgY29kZSkgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29ya3MgYXMKK3Byb2R1Y3RzIHVuZGVyIGFueSBvdGhlciBsaWNlbnNlIHlvdSBzZWxlY3QsIHdpdGggdGhlCitwcm92aXNvIHRoYXQgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IKK3Rob3NlIHBvcnRpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgY29uc2lzdCBvZiB0aGUKK0xpY2Vuc2VkIFByb2R1Y3Qgb3IgYW55IE1vZGlmaWNhdGlvbnMgdGhlcmV0by4KKworNS4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvcgorUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgeW91IHRvIGNvbXBseSB3aXRoIGFueSBvZgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoCityZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbAorb3JkZXIsIG9yIHJlZ3VsYXRpb24sIHRoZW4geW91IG11c3QgKGkpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgKGlpKSBjaXRlIHRoZSBzdGF0dXRlIG9yCityZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nIHRvIHRoZSBMaWNlbnNlLCBhbmQKKyhpaWkpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gNChkKSwKK2FuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8KK3RoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2gKK2Rlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeQorc2tpbGwgYXQgY29tcHV0ZXIgcHJvZ3JhbW1pbmcgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis2LiBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuCisKK1RoaXMgTGljZW5zZQorYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGhhcyBhdHRhY2hlZCB0aGUgTm90aWNlIGluCitFeGhpYml0IEEsCit3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHRoaXMgcmVmZXJlbmNlLgorCis3LiBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuCisKK2EuIFZlcnNpb24uIFRoZSBNb3Rvc290byBPcGVuIFNvdXJjZSBMaWNlbnNlIGlzCitkZXJpdmVkIGZyb20gdGhlIEphYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlLiBBbGwgY2hhbmdlcyBhcmUgcmVsYXRlZCB0bworYXBwbGljYWJsZSBsYXcgYW5kIHRoZSBsb2NhdGlvbiBvZiBjb3VydC4KKworYi4gTmV3IFZlcnNpb25zLiBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8KK3RpbWUgcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCitjLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiBPbmNlIExpY2Vuc2VkIFByb2R1Y3QKK2hhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgeW91IG1heSBhbHdheXMKK2NvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkKK3N1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuIE5vIG9uZQorb3RoZXIgdGhhbiBMaWMgZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zCithcHBsaWNhYmxlIHRvIExpY2Vuc2VkIFByb2R1Y3QgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKK2QuIERlcml2YXRpdmUgV29ya3Mgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UKK2NyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgd2hpY2ggeW91IG1heSBkbyBvbmx5IGluCitvcmRlciB0bworYXBwbHkgaXQgdG8gc29mdHdhcmUgdGhhdCBpcyBub3QgYWxyZWFkeSBhIExpY2Vuc2VkIFByb2R1Y3QgdW5kZXIKK3RoaXMgTGljZW5zZSwgeW91IG11c3QgcmVuYW1lIHlvdXIgbGljZW5zZSBzbyB0aGF0IGl0IGlzIG5vdAorY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdAoreW91ciBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLiBJbgorc28gbmFtaW5nIHlvdXIgbGljZW5zZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgTGljZW5zb3IKK29yIGFueSBDb250cmlidXRvci4KKworOC4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworTElDRU5TRUQgUFJPRFVDVCBJUworUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMKK1RIQVQgVEhFIExJQ0VOU0VEIFBST0RVQ1QgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIE9SCitOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQ0VOU0VEIFBST0RVQ1QgSVMKK1dJVEggWU9VLiBTSE9VTEQgTElDRU5TRUQgUFJPRFVDVCBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVQorKEFORCBOT1QgVEhFIExJQ0VOU09SIE9SCitBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSCitPUiBDT1JSRUNUSU9OLiBUSElTCitESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8KK1VTRSBPRiBMSUNFTlNFRAorUFJPRFVDVCBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis5LiBUZXJtaW5hdGlvbi4KKworYS4gQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzCitsaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgeW91CitmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaAord2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4KK0FsbCBzdWJsaWNlbnNlcyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB0aGF0IGFyZSBwcm9wZXJseSBncmFudGVkCitzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIGxpY2Vuc2UuIFByb3Zpc2lvbnMKK3RoYXQsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUKK3Rlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSwgc2hhbGwgc3Vydml2ZS4KKworYi4gVGVybWluYXRpb24gVXBvbiBBc3NlcnRpb24gb2YgUGF0ZW50CitJbmZyaW5nZW1lbnQuIElmIHlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudAoraW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgTGljZW5zb3Igb3IgYQorQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSB5b3UgZmlsZQorc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzICJSZXNwb25kZW50IikgYWxsZWdpbmcKK3RoYXQgTGljZW5zZWQgUHJvZHVjdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkKK3BhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFJlc3BvbmRlbnQgdG8geW91Cit1bmRlciBTZWN0aW9ucyAxIG9yIDIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZQorcHJvc3BlY3RpdmVseSB1cG9uIHNpeHR5ICg2MCkgZGF5cyBub3RpY2UgZnJvbSBSZXNwb25kZW50ICh0aGUKKyJOb3RpY2UgUGVyaW9kIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgeW91CitlaXRoZXIgYWdyZWUgaW4gd3JpdGluZyAoaSkgdG8gcGF5IFJlc3BvbmRlbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUKK3JlYXNvbmFibHkgcm95YWx0eSBmb3IgeW91ciBwYXN0IG9yIGZ1dHVyZSB1c2Ugb2YgTGljZW5zZWQKK1Byb2R1Y3QgbWFkZSBieSBzdWNoIFJlc3BvbmRlbnQsIG9yIChpaSkgd2l0aGRyYXcgeW91ciBsaXRpZ2F0aW9uCitjbGFpbSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgUHJvZHVjdCBhZ2FpbnN0IHN1Y2gKK1Jlc3BvbmRlbnQuIElmIHdpdGhpbiBzYWlkIE5vdGljZSBQZXJpb2QgYSByZWFzb25hYmxlIHJveWFsdHkgYW5kCitwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4KK3dyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwKK3RoZSByaWdodHMgZ3JhbnRlZCBieSBMaWNlbnNvciB0byB5b3UgdW5kZXIgU2VjdGlvbnMgMSBhbmQgMgorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc2FpZCBOb3RpY2UKK1BlcmlvZC4KKworYy4gUmVhc29uYWJsZSBWYWx1ZSBvZiBUaGlzIExpY2Vuc2UuIElmIHlvdSBhc3NlcnQgYQorcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFJlc3BvbmRlbnQgYWxsZWdpbmcgdGhhdCBMaWNlbnNlZAorUHJvZHVjdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2gKK2NsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8KK3RoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUKK3JlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc2FpZCBSZXNwb25kZW50IHVuZGVyCitTZWN0aW9ucyAxIGFuZCAyIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUKK2Ftb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCitkLiBObyBSZXRyb2FjdGl2ZSBFZmZlY3Qgb2YgVGVybWluYXRpb24uIEluIHRoZQorZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOShhKSBvciA5KGIpIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZQorYWdyZWVtZW50cyAoZXhjbHVkaW5nIGxpY2Vuc2VzIHRvIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZSBycykKK3RoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSB5b3Ugb3IgYW55IGRpc3RyaWJ1dG9yCitoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZQordGVybWluYXRpb24uCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworVU5ERVIgTk8KK0NJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgTElDRU5TT1IsIEFOWQorQ09OVFJJQlVUT1IsIE9SIEFOWQorRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgUFJPRFVDVCwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsCitCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTgorRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorQ0hBUkFDVEVSIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIKK0ZBSUxVUkUgT1IKK01BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGCitTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UCitBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNICitQQVJUWQorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9NdWx0aWNzIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDg3NjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTXVsdGljcwpAQCAtMCwwICsxLDQwIEBACisKK011bHRpY3MgTGljZW5zZQorCitIaXN0b3JpY2FsIEJhY2tncm91bmQKKworVGhpcyBlZGl0aW9uIG9mIHRoZSBNdWx0aWNzIHNvZnR3YXJlIG1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiBpcworcHJvdmlkZWQgYW5kIGRvbmF0ZWQgdG8gTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSBieSBHcm91cAorQlVMTCBpbmNsdWRpbmcgQlVMTCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4gYXMgYSBjb250cmlidXRpb24gdG8KK2NvbXB1dGVyIHNjaWVuY2Uga25vd2xlZGdlLiBUaGlzIGRvbmF0aW9uIGlzIG1hZGUgYWxzbyB0byBnaXZlIGV2aWRlbmNlCitvZiB0aGUgY29tbW9uIGNvbnRyaWJ1dGlvbnMgb2YgTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwKK0JlbGwgTGFib3JhdG9yaWVzLCBHZW5lcmFsIEVsZWN0cmljLCBIb25leXdlbGwgSW5mb3JtYXRpb24gU3lzdGVtcworSW5jLiwgSG9uZXl3ZWxsIEJVTEwgSW5jLiwgR3JvdXBlIEJVTEwgYW5kIEJVTEwgSE4gSW5mb3JtYXRpb24gU3lzdGVtcworSW5jLiB0byB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBvcGVyYXRpbmcgc3lzdGVtLiBNdWx0aWNzIGRldmVsb3BtZW50Cit3YXMgaW5pdGlhdGVkIGJ5IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgUHJvamVjdCBNQUMKKygxOTYzLTE5NzApLCByZW5hbWVkIHRoZSBNSVQgTGFib3JhdG9yeSBmb3IgQ29tcHV0ZXIgU2NpZW5jZSBhbmQKK0FydGlmaWNpYWwgSW50ZWxsaWdlbmNlIGluIHRoZSBtaWQgMTk3MHMsIHVuZGVyIHRoZSBsZWFkZXJzaGlwIG9mCitQcm9mZXNzb3IgRmVybmFuZG8gSm9zZSBDb3JiYXRvLiBVc2VycyBjb25zaWRlciB0aGF0IE11bHRpY3MgcHJvdmlkZWQgdGhlCitiZXN0IHNvZnR3YXJlIGFyY2hpdGVjdHVyZSBmb3IgbWFuYWdpbmcgY29tcHV0ZXIgaGFyZHdhcmUgcHJvcGVybHkgYW5kCitmb3IgZXhlY3V0aW5nIHByb2dyYW1zLiBNYW55IHN1YnNlcXVlbnQgb3BlcmF0aW5nIHN5c3RlbXMgaW5jb3Jwb3JhdGVkCitNdWx0aWNzIHByaW5jaXBsZXMuIE11bHRpY3Mgd2FzIGRpc3RyaWJ1dGVkIGluIDE5NzUgdG8gMjAwMCBieSBHcm91cAorQnVsbCBpbiBFdXJvcGUgLCBhbmQgaW4gdGhlIFUuUy4gYnkgQnVsbCBITiBJbmZvcm1hdGlvbiBTeXN0ZW1zIEluYy4sIGFzCitzdWNjZXNzb3IgaW4gaW50ZXJlc3QgYnkgY2hhbmdlIGluIG5hbWUgb25seSB0byBIb25leXdlbGwgQnVsbCBJbmMuIGFuZAorSG9uZXl3ZWxsIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLiAuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZXNlIHByb2dyYW1zIGFuZCB0aGVpcgorZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLHByb3ZpZGVkCit0aGF0IHRoZSBiZWxvdyBjb3B5cmlnaHQgbm90aWNlIGFuZCBoaXN0b3JpY2FsIGJhY2tncm91bmQgYXBwZWFyIGluIGFsbAorY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGhpc3RvcmljYWwgYmFja2dyb3VuZCBhbmQKK3RoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQKK3RoZSBuYW1lcyBvZiBNSVQsIEhJUywgQlVMTCBvciBCVUxMIEhOIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCitwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHByb2dyYW1zIHdpdGhvdXQgc3BlY2lmaWMKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK0NvcHlyaWdodCAxOTcyIGJ5IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgYW5kIEhvbmV5d2VsbCBJbmZvcm1hdGlvbgorU3lzdGVtcyBJbmMuCitDb3B5cmlnaHQgMjAwNiBieSBCVUxMIEhOIEluZm9ybWF0aW9uIFN5c3RlbXMgSW5jLgorQ29weXJpZ2h0IDIwMDYgYnkgQnVsbCBTQVMKK0FsbCBSaWdodHMgUmVzZXJ2ZWQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQVNBLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMxODJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkFTQS0xLjMKQEAgLTAsMCArMSw3OSBAQAorCitBU0EgT1BFTiBTT1VSQ0UgQUdSRUVNRU5UIFZFUlNJT04gMS4zCisKK1RISVMgT1BFTiBTT1VSQ0UgQUdSRUVNRU5UICgiQUdSRUVNRU5UIikgREVGSU5FUyBUSEUgUklHSFRTIE9GIFVTRSwgUkVQUk9EVUNUSU9OLCBESVNUUklCVVRJT04sIE1PRElGSUNBVElPTiBBTkQgUkVESVNUUklCVVRJT04gT0YgQ0VSVEFJTiBDT01QVVRFUiBTT0ZUV0FSRSBPUklHSU5BTExZIFJFTEVBU0VEIEJZIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQgQVMgUkVQUkVTRU5URUQgQlkgVEhFIEdPVkVSTk1FTlQgQUdFTkNZIExJU1RFRCBCRUxPVyAoIkdPVkVSTk1FTlQgQUdFTkNZIikuIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIEFTIFJFUFJFU0VOVEVEIEJZIEdPVkVSTk1FTlQgQUdFTkNZLCBJUyBBTiBJTlRFTkRFRCBUSElSRC1QQVJUWSBCRU5FRklDSUFSWSBPRiBBTEwgU1VCU0VRVUVOVCBESVNUUklCVVRJT05TIE9SIFJFRElTVFJJQlVUSU9OUyBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRS4gQU5ZT05FIFdITyBVU0VTLCBSRVBST0RVQ0VTLCBESVNUUklCVVRFUywgTU9ESUZJRVMgT1IgUkVESVNUUklCVVRFUyBUSEUgU1VCSkVDVCBTT0ZUV0FSRSwgQVMgREVGSU5FRCBIRVJFSU4sIE9SIEFOWSBQQVJUIFRIRVJFT0YsIElTLCBCWSBUSEFUIEFDVElPTiwgQUNDRVBUSU5HIElOIEZVTEwgVEhFIFJFU1BPTlNJQklMSVRJRVMgQU5EIE9CTElHQVRJT05TIENPTlRBSU5FRCBJTiBUSElTIEFHUkVFTUVOVC4KKworR292ZXJubWVudCBBZ2VuY3k6IF9fX19fIEdvdmVybm1lbnQgQWdlbmN5IE9yaWdpbmFsIFNvZnR3YXJlIERlc2lnbmF0aW9uOiBfXyBHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBUaXRsZTogX19fX18gVXNlciBSZWdpc3RyYXRpb24gUmVxdWVzdGVkLiBQbGVhc2UgVmlzaXQgaHR0cDovL19fXyBHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGZvciBPcmlnaW5hbCBTb2Z0d2FyZTogX19fX18KKworREVGSU5JVElPTlMKK0EuICJDb250cmlidXRvciIgbWVhbnMgR292ZXJubWVudCBBZ2VuY3ksIGFzIHRoZSBkZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBhbmQgYW55IGVudGl0eSB0aGF0IG1ha2VzIGEgTW9kaWZpY2F0aW9uLiBCLiAiQ292ZXJlZCBQYXRlbnRzIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIE1vZGlmaWNhdGlvbiBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFN1YmplY3QgU29mdHdhcmUuIEMuICJEaXNwbGF5IiBtZWFucyB0aGUgc2hvd2luZyBvZiBhIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVpdGhlciBkaXJlY3RseSBvciBieSBtZWFucyBvZiBhbiBpbWFnZSwgb3IgYW55IG90aGVyIGRldmljZS4gRC4gIkRpc3RyaWJ1dGlvbiIgbWVhbnMgY29udmV5YW5jZSBvciB0cmFuc2ZlciBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgcmVnYXJkbGVzcyBvZiBtZWFucywgdG8gYW5vdGhlci4gRS4gIkxhcmdlciBXb3JrIiBtZWFucyBjb21wdXRlciBzb2Z0d2FyZSB0aGF0IGNvbWJpbmVzIFN1YmplY3QgU29mdHdhcmUsIG9yIHBvcnRpb25zIHRoZXJlb2YsIHdpdGggc29mdHdhcmUgc2VwYXJhdGUgZnJvbSB0aGUgU3ViamVjdCBTb2Z0d2FyZSB0aGF0IGlzIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEYuICJNb2RpZmljYXRpb24iIG1lYW5zIGFueSBhbHRlcmF0aW9uIG9mLCBpbmNsdWRpbmcgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSwgdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBTdWJqZWN0IFNvZnR3YXJlLCBhbmQgaW5jbHVkZXMgZGVyaXZhdGl2ZSB3b3JrcywgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gdGhlIENvcHlyaWdodCBTdGF0dXRlLCAxNyBVU0MgMTAxLiBIb3dldmVyLCB0aGUgYWN0IG9mIGluY2x1ZGluZyBTdWJqZWN0IFNvZnR3YXJlIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yayBkb2VzIG5vdCBpbiBhbmQgb2YgaXRzZWxmIGNvbnN0aXR1dGUgYSBNb2RpZmljYXRpb24uIEcuICJPcmlnaW5hbCBTb2Z0d2FyZSIgbWVhbnMgdGhlIGNvbXB1dGVyIHNvZnR3YXJlIGZpcnN0IHJlbGVhc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGJ5IEdvdmVybm1lbnQgQWdlbmN5IHdpdGggR292ZXJubWVudCBBZ2VuY3kgZGVzaWduYXRpb24gX18gYW5kIGVudGl0bGVkIF9fX19fX19fXywgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24sIGlmIGFueS4gSC4gIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyBhY3F1aXJlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuIEkuICJSZWRpc3RyaWJ1dGlvbiIgbWVhbnMgRGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFmdGVyIGEgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuIEouICJSZXByb2R1Y3Rpb24iIG1lYW5zIHRoZSBtYWtpbmcgb2YgYSBjb3VudGVycGFydCwgaW1hZ2Ugb3IgY29weSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gSy4gIlNhbGUiIG1lYW5zIHRoZSBleGNoYW5nZSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSBmb3IgbW9uZXkgb3IgZXF1aXZhbGVudCB2YWx1ZS4gTC4gIlN1YmplY3QgU29mdHdhcmUiIG1lYW5zIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgTW9kaWZpY2F0aW9ucywgb3IgYW55IHJlc3BlY3RpdmUgcGFydHMgdGhlcmVvZi4gTS4gIlVzZSIgbWVhbnMgdGhlIGFwcGxpY2F0aW9uIG9yIGVtcGxveW1lbnQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgorCitHUkFOVCBPRiBSSUdIVFMKK0EuIFVuZGVyIE5vbi1QYXRlbnQgUmlnaHRzOiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciwgd2l0aCByZXNwZWN0IHRvIGl0cyBvd24gY29udHJpYnV0aW9uIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gZW5nYWdlIGluIHRoZSBmb2xsb3dpbmcgYWN0aXZpdGllcyBwZXJ0YWluaW5nIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlOgorCitVc2UKK0Rpc3RyaWJ1dGlvbgorUmVwcm9kdWN0aW9uCitNb2RpZmljYXRpb24KK1JlZGlzdHJpYnV0aW9uCitEaXNwbGF5CitCLiBVbmRlciBQYXRlbnQgUmlnaHRzOiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciwgd2l0aCByZXNwZWN0IHRvIGl0cyBvd24gY29udHJpYnV0aW9uIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50IHVuZGVyIENvdmVyZWQgUGF0ZW50cyBhIG5vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUgZm9sbG93aW5nIGFjdGl2aXRpZXMgcGVydGFpbmluZyB0byB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworVXNlCitEaXN0cmlidXRpb24KK1JlcHJvZHVjdGlvbgorU2FsZQorT2ZmZXIgZm9yIFNhbGUKK0MuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciBQYXJhZ3JhcGggQi4gYWxzbyBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgYSBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbiBhbmQgdGhlIFN1YmplY3QgU29mdHdhcmUgaWYsIGF0IHRoZSB0aW1lIHRoZSBNb2RpZmljYXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCB0aGUgYWRkaXRpb24gb2Ygc3VjaCBNb2RpZmljYXRpb24gY2F1c2VzIHRoZSBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBDb3ZlcmVkIFBhdGVudHMuIEl0IGRvZXMgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgdGhhdCBpbmNsdWRlIGEgTW9kaWZpY2F0aW9uLgorCitELiBUaGUgcmlnaHRzIGdyYW50ZWQgaW4gUGFyYWdyYXBocyBBLiBhbmQgQi4gYWxsb3cgdGhlIFJlY2lwaWVudCB0byBzdWJsaWNlbnNlIHRob3NlIHNhbWUgcmlnaHRzLiBTdWNoIHN1YmxpY2Vuc2UgbXVzdCBiZSB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworT0JMSUdBVElPTlMgT0YgUkVDSVBJRU5UCitBLiBEaXN0cmlidXRpb24gb3IgUmVkaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgbXVzdCBiZSBtYWRlIHVuZGVyIHRoaXMgQWdyZWVtZW50IGV4Y2VwdCBmb3IgYWRkaXRpb25zIGNvdmVyZWQgdW5kZXIgcGFyYWdyYXBoIDNILgorCitXaGVuZXZlciBhIFJlY2lwaWVudCBkaXN0cmlidXRlcyBvciByZWRpc3RyaWJ1dGVzIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZTsgYW5kCitJZiBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIHNvdXJjZSBjb2RlLCBSZWNpcGllbnQgbXVzdCBhbHNvIG1ha2UgdGhlIHNvdXJjZSBjb2RlIGZyZWVseSBhdmFpbGFibGUsIGFuZCBtdXN0IHByb3ZpZGUgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiB0aGUgc291cmNlIGNvZGUgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorQi4gRWFjaCBSZWNpcGllbnQgbXVzdCBlbnN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBwcm9taW5lbnRseSBpbiB0aGUgU3ViamVjdCBTb2Z0d2FyZToKKworW0dvdmVybm1lbnQgQWdlbmN5IHdpbGwgaW5zZXJ0IHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBub3RpY2UgaW4gZWFjaCBhZ3JlZW1lbnQgYWNjb21wYW55aW5nIHRoZSBpbml0aWFsIGRpc3RyaWJ1dGlvbiBvZiBvcmlnaW5hbCBzb2Z0d2FyZSBhbmQgcmVtb3ZlIHRoaXMgYnJhY2tldGVkIGxhbmd1YWdlLl0KKworW1RoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSB3aWxsIGJlIHVzZWQgaWYgY3JlYXRlZCBieSBhIGNvbnRyYWN0b3IgcHVyc3VhbnQgdG8gR292ZXJubWVudCBBZ2VuY3kgY29udHJhY3QgYW5kIHJpZ2h0cyBvYnRhaW5lZCBmcm9tIGNyZWF0b3IgYnkgYXNzaWdubWVudC4gR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIHllYXIgYW5kIGl0cyBBZ2VuY3kgZGVzaWduYXRpb24gYW5kIHJlbW92ZSB0aGUgYnJhY2tldGVkIGxhbmd1YWdlLl0gQ29weXJpZ2h0ICYjNjU1MzM7IHtZRUFSfSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgX19fIF9fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1tUaGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2Ugd2lsbCBiZSB1c2VkIGlmIGNyZWF0ZWQgYnkgY2l2aWwgc2VydmFudHMgb25seS4gR292ZXJubWVudCBBZ2VuY3kgd2lsbCBpbnNlcnQgdGhlIHllYXIgYW5kIGl0cyBBZ2VuY3kgZGVzaWduYXRpb24gYW5kIHJlbW92ZSB0aGUgYnJhY2tldGVkIGxhbmd1YWdlLl0gQ29weXJpZ2h0ICYjNjU1MzM7IHtZRUFSfSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgX19fXyBfX19fLiBObyBjb3B5cmlnaHQgaXMgY2xhaW1lZCBpbiB0aGUgVW5pdGVkIFN0YXRlcyB1bmRlciBUaXRsZSAxNywgVS5TLkNvZGUuIEFsbCBPdGhlciBSaWdodHMgUmVzZXJ2ZWQuCisKK0MuIEVhY2ggQ29udHJpYnV0b3IgbXVzdCBjaGFyYWN0ZXJpemUgaXRzIGFsdGVyYXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgYXMgYSBNb2RpZmljYXRpb24gYW5kIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBNb2RpZmljYXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4gSW4gZnVsZmlsbG1lbnQgb2YgdGhlc2UgcmVxdWlyZW1lbnRzLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSBmaWxlIChlLmcuLCBhIGNoYW5nZSBsb2cgZmlsZSkgdGhhdCBkZXNjcmliZXMgdGhlIGFsdGVyYXRpb25zIG1hZGUgYW5kIHRoZSBkYXRlIG9mIHRoZSBhbHRlcmF0aW9ucywgaWRlbnRpZmllcyBDb250cmlidXRvciBhcyBvcmlnaW5hdG9yIG9mIHRoZSBhbHRlcmF0aW9ucywgYW5kIGNvbnNlbnRzIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGFsdGVyYXRpb25zIGFzIGEgTW9kaWZpY2F0aW9uLCBmb3IgZXhhbXBsZSwgYnkgaW5jbHVkaW5nIGEgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIFNvZnR3YXJlIHByb3ZpZGVkIGJ5IEdvdmVybm1lbnQgQWdlbmN5LiBPbmNlIGNvbnNlbnQgaXMgZ3JhbnRlZCwgaXQgbWF5IG5vdCB0aGVyZWFmdGVyIGJlIHJldm9rZWQuCisKK0QuIEEgQ29udHJpYnV0b3IgbWF5IGFkZCBpdHMgb3duIGNvcHlyaWdodCBub3RpY2UgdG8gdGhlIFN1YmplY3QgU29mdHdhcmUuIE9uY2UgYSBjb3B5cmlnaHQgbm90aWNlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBhIFJlY2lwaWVudCBtYXkgbm90IHJlbW92ZSBpdCB3aXRob3V0IHRoZSBleHByZXNzIHBlcm1pc3Npb24gb2YgdGhlIENvbnRyaWJ1dG9yIHdobyBhZGRlZCB0aGUgbm90aWNlLgorCitFLiBBIFJlY2lwaWVudCBtYXkgbm90IG1ha2UgYW55IHJlcHJlc2VudGF0aW9uIGluIHRoZSBTdWJqZWN0IFNvZnR3YXJlIG9yIGluIGFueSBwcm9tb3Rpb25hbCwgYWR2ZXJ0aXNpbmcgb3Igb3RoZXIgbWF0ZXJpYWwgdGhhdCBtYXkgYmUgY29uc3RydWVkIGFzIGFuIGVuZG9yc2VtZW50IGJ5IEdvdmVybm1lbnQgQWdlbmN5IG9yIGJ5IGFueSBwcmlvciBSZWNpcGllbnQgb2YgYW55IHByb2R1Y3Qgb3Igc2VydmljZSBwcm92aWRlZCBieSBSZWNpcGllbnQsIG9yIHRoYXQgbWF5IHNlZWsgdG8gb2J0YWluIGNvbW1lcmNpYWwgYWR2YW50YWdlIGJ5IHRoZSBmYWN0IG9mIEdvdmVybm1lbnQgQWdlbmN5YHMgb3IgYSBwcmlvciBSZWNpcGllbnRgcyBwYXJ0aWNpcGF0aW9uIGluIHRoaXMgQWdyZWVtZW50LgorCitGLiBJbiBhbiBlZmZvcnQgdG8gdHJhY2sgdXNhZ2UgYW5kIG1haW50YWluIGFjY3VyYXRlIHJlY29yZHMgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGVhY2ggUmVjaXBpZW50LCB1cG9uIHJlY2VpcHQgb2YgdGhlIFN1YmplY3QgU29mdHdhcmUsIGlzIHJlcXVlc3RlZCB0byByZWdpc3RlciB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGJ5IHZpc2l0aW5nIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZTogX19fX19fLiBSZWNpcGllbnRgcyBuYW1lIGFuZCBwZXJzb25hbCBpbmZvcm1hdGlvbiBzaGFsbCBiZSB1c2VkIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcyBvbmx5LiBPbmNlIGEgUmVjaXBpZW50IG1ha2VzIGEgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSwgaXQgaXMgcmVxdWVzdGVkIHRoYXQgdGhlIFJlY2lwaWVudCBpbmZvcm0gR292ZXJubWVudCBBZ2VuY3kgYXQgdGhlIHdlYiBzaXRlIHByb3ZpZGVkIGFib3ZlIGhvdyB0byBhY2Nlc3MgdGhlIE1vZGlmaWNhdGlvbi4KKworW0FsdGVybmF0aXZlIHBhcmFncmFwaCBmb3IgdXNlIHdoZW4gYSB3ZWIgc2l0ZSBmb3IgcmVsZWFzZSBhbmQgbW9uaXRvcmluZyBvZiBzdWJqZWN0IHNvZnR3YXJlIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBieSByZWxlYXNpbmcgR292ZXJubWVudCBBZ2VuY3ldIEluIGFuIGVmZm9ydCB0byB0cmFjayB1c2FnZSBhbmQgbWFpbnRhaW4gYWNjdXJhdGUgcmVjb3JkcyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgZWFjaCBSZWNpcGllbnQsIHVwb24gcmVjZWlwdCBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZSwgaXMgcmVxdWVzdGVkIHRvIHByb3ZpZGUgR292ZXJubWVudCBBZ2VuY3ksIGJ5IGUtbWFpbCB0byB0aGUgR292ZXJubWVudCBBZ2VuY3kgUG9pbnQgb2YgQ29udGFjdCBsaXN0ZWQgaW4gY2xhdXNlIDUuRi4sIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246IF9fX19fXy4gUmVjaXBpZW50YHMgbmFtZSBhbmQgcGVyc29uYWwgaW5mb3JtYXRpb24gc2hhbGwgYmUgdXNlZCBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMgb25seS4gT25jZSBhIFJlY2lwaWVudCBtYWtlcyBhIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUsIGl0IGlzIHJlcXVlc3RlZCB0aGF0IHRoZSBSZWNpcGllbnQgaW5mb3JtIEdvdmVybm1lbnQgQWdlbmN5LCBieSBlLW1haWwgdG8gdGhlIEdvdmVybm1lbnQgQWdlbmN5IFBvaW50IG9mIENvbnRhY3QgbGlzdGVkIGluIGNsYXVzZSA1LkYuLCBob3cgdG8gYWNjZXNzIHRoZSBNb2RpZmljYXRpb24uCisKK0cuIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRoYXQgaXRzIE1vZGlmaWNhdGlvbiBpcyBiZWxpZXZlZCB0byBiZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uIGFuZCBkb2VzIG5vdCB2aW9sYXRlIGFueSBleGlzdGluZyBhZ3JlZW1lbnRzLCByZWd1bGF0aW9ucywgc3RhdHV0ZXMgb3IgcnVsZXMsIGFuZCBmdXJ0aGVyIHRoYXQgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBBZ3JlZW1lbnQuCisKK0guIEEgUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IGFuZC9vciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgb3RoZXIgUmVjaXBpZW50cyBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZS4gQSBSZWNpcGllbnQgbWF5IGRvIHNvLCBob3dldmVyLCBvbmx5IG9uIGl0cyBvd24gYmVoYWxmIGFuZCBub3Qgb24gYmVoYWxmIG9mIEdvdmVybm1lbnQgQWdlbmN5IG9yIGFueSBvdGhlciBSZWNpcGllbnQuIFN1Y2ggYSBSZWNpcGllbnQgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IGFuZC9vciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IHRoYXQgUmVjaXBpZW50IGFsb25lLiBGdXJ0aGVyLCBzdWNoIFJlY2lwaWVudCBhZ3JlZXMgdG8gaW5kZW1uaWZ5IEdvdmVybm1lbnQgQWdlbmN5IGFuZCBldmVyeSBvdGhlciBSZWNpcGllbnQgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlbSBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IGFuZC9vciBsaWFiaWxpdHkgb2ZmZXJlZCBieSBzdWNoIFJlY2lwaWVudC4KKworSS4gQSBSZWNpcGllbnQgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBTdWJqZWN0IFNvZnR3YXJlIHdpdGggc2VwYXJhdGUgc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudCBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBjYXNlLCB0aGUgUmVjaXBpZW50IG11c3QgbWFrZSBzdXJlIFN1YmplY3QgU29mdHdhcmUsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGVkIGluIHRoZSBMYXJnZXIgV29yayBpcyBzdWJqZWN0IHRvIHRoaXMgQWdyZWVtZW50LgorCitKLiBOb3R3aXRoc3RhbmRpbmcgYW55IHByb3Zpc2lvbnMgY29udGFpbmVkIGhlcmVpbiwgUmVjaXBpZW50IGlzIGhlcmVieSBwdXQgb24gbm90aWNlIHRoYXQgZXhwb3J0IG9mIGFueSBnb29kcyBvciB0ZWNobmljYWwgZGF0YSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIG1heSByZXF1aXJlIHNvbWUgZm9ybSBvZiBleHBvcnQgbGljZW5zZSBmcm9tIHRoZSBVLlMuIEdvdmVybm1lbnQuIEZhaWx1cmUgdG8gb2J0YWluIG5lY2Vzc2FyeSBleHBvcnQgbGljZW5zZXMgbWF5IHJlc3VsdCBpbiBjcmltaW5hbCBsaWFiaWxpdHkgdW5kZXIgVS5TLiBsYXdzLiBHb3Zlcm5tZW50IEFnZW5jeSBuZWl0aGVyIHJlcHJlc2VudHMgdGhhdCBhIGxpY2Vuc2Ugc2hhbGwgbm90IGJlIHJlcXVpcmVkIG5vciB0aGF0LCBpZiByZXF1aXJlZCwgaXQgc2hhbGwgYmUgaXNzdWVkLiBOb3RoaW5nIGdyYW50ZWQgaGVyZWluIHByb3ZpZGVzIGFueSBzdWNoIGV4cG9ydCBsaWNlbnNlLgorCitESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUSUVTOyBXQUlWRVIgQU5EIElOREVNTklGSUNBVElPTgorQS4gTm8gV2FycmFudHk6IFRIRSBTVUJKRUNUIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQsIElNUExJRUQsIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBTVUJKRUNUIFNPRlRXQVJFIFdJTEwgQ09ORk9STSBUTyBTUEVDSUZJQ0FUSU9OUywgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBGUkVFRE9NIEZST00gSU5GUklOR0VNRU5ULCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SIEZSRUUsIE9SIEFOWSBXQVJSQU5UWSBUSEFUIERPQ1VNRU5UQVRJT04sIElGIFBST1ZJREVELCBXSUxMIENPTkZPUk0gVE8gVEhFIFNVQkpFQ1QgU09GVFdBUkUuIFRISVMgQUdSRUVNRU5UIERPRVMgTk9ULCBJTiBBTlkgTUFOTkVSLCBDT05TVElUVVRFIEFOIEVORE9SU0VNRU5UIEJZIEdPVkVSTk1FTlQgQUdFTkNZIE9SIEFOWSBQUklPUiBSRUNJUElFTlQgT0YgQU5ZIFJFU1VMVFMsIFJFU1VMVElORyBERVNJR05TLCBIQVJEV0FSRSwgU09GVFdBUkUgUFJPRFVDVFMgT1IgQU5ZIE9USEVSIEFQUExJQ0FUSU9OUyBSRVNVTFRJTkcgRlJPTSBVU0UgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuIEZVUlRIRVIsIEdPVkVSTk1FTlQgQUdFTkNZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVMgUkVHQVJESU5HIFRISVJELVBBUlRZIFNPRlRXQVJFLCBJRiBQUkVTRU5UIElOIFRIRSBPUklHSU5BTCBTT0ZUV0FSRSwgQU5EIERJU1RSSUJVVEVTIElUICJBUyBJUy4iCisKK0IuIFdhaXZlciBhbmQgSW5kZW1uaXR5OiBSRUNJUElFTlQgQUdSRUVTIFRPIFdBSVZFIEFOWSBBTkQgQUxMIENMQUlNUyBBR0FJTlNUIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIElUUyBDT05UUkFDVE9SUyBBTkQgU1VCQ09OVFJBQ1RPUlMsIEFTIFdFTEwgQVMgQU5ZIFBSSU9SIFJFQ0lQSUVOVC4gSUYgUkVDSVBJRU5UYFMgVVNFIE9GIFRIRSBTVUJKRUNUIFNPRlRXQVJFIFJFU1VMVFMgSU4gQU5ZIExJQUJJTElUSUVTLCBERU1BTkRTLCBEQU1BR0VTLCBFWFBFTlNFUyBPUiBMT1NTRVMgQVJJU0lORyBGUk9NIFNVQ0ggVVNFLCBJTkNMVURJTkcgQU5ZIERBTUFHRVMgRlJPTSBQUk9EVUNUUyBCQVNFRCBPTiwgT1IgUkVTVUxUSU5HIEZST00sIFJFQ0lQSUVOVGBTIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSwgUkVDSVBJRU5UIFNIQUxMIElOREVNTklGWSBBTkQgSE9MRCBIQVJNTEVTUyBUSEUgVU5JVEVEIFNUQVRFUyBHT1ZFUk5NRU5ULCBJVFMgQ09OVFJBQ1RPUlMgQU5EIFNVQkNPTlRSQUNUT1JTLCBBUyBXRUxMIEFTIEFOWSBQUklPUiBSRUNJUElFTlQsIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4gUkVDSVBJRU5UYFMgU09MRSBSRU1FRFkgRk9SIEFOWSBTVUNIIE1BVFRFUiBTSEFMTCBCRSBUSEUgSU1NRURJQVRFLCBVTklMQVRFUkFMIFRFUk1JTkFUSU9OIE9GIFRISVMgQUdSRUVNRU5ULgorCitHRU5FUkFMIFRFUk1TCitBLiBUZXJtaW5hdGlvbjogVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBhIFJlY2lwaWVudCBmYWlscyB0byBjb21wbHkgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYW5kIGZhaWxzIHRvIGN1cmUgc3VjaCBub25jb21wbGlhbmNlIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gVXBvbiB0ZXJtaW5hdGlvbiwgYSBSZWNpcGllbnQgYWdyZWVzIHRvIGltbWVkaWF0ZWx5IGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIFN1YmplY3QgU29mdHdhcmUgcHJvcGVybHkgZ3JhbnRlZCBieSB0aGUgYnJlYWNoaW5nIFJlY2lwaWVudCBzaGFsbCBzdXJ2aXZlIGFueSBzdWNoIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCitCLiBTZXZlcmFiaWxpdHk6IElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworQy4gQXBwbGljYWJsZSBMYXc6IFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gVW5pdGVkIFN0YXRlcyBmZWRlcmFsIGxhdyBvbmx5IGZvciBhbGwgcHVycG9zZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBkZXRlcm1pbmluZyB0aGUgdmFsaWRpdHkgb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZSBtZWFuaW5nIG9mIGl0cyBwcm92aXNpb25zIGFuZCB0aGUgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgcmVtZWRpZXMgb2YgdGhlIHBhcnRpZXMuCisKK0QuIEVudGlyZSBVbmRlcnN0YW5kaW5nOiBUaGlzIEFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIHVuZGVyc3RhbmRpbmcgYW5kIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyByZWxhdGluZyB0byByZWxlYXNlIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFuZCBtYXkgbm90IGJlIHN1cGVyc2VkZWQsIG1vZGlmaWVkIG9yIGFtZW5kZWQgZXhjZXB0IGJ5IGZ1cnRoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgZHVseSBleGVjdXRlZCBieSB0aGUgcGFydGllcy4KKworRS4gQmluZGluZyBBdXRob3JpdHk6IEJ5IGFjY2VwdGluZyBhbmQgdXNpbmcgdGhlIFN1YmplY3QgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGEgUmVjaXBpZW50IGFmZmlybXMgaXRzIGF1dGhvcml0eSB0byBiaW5kIHRoZSBSZWNpcGllbnQgdG8gYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCB0aGF0IHRoYXQgUmVjaXBpZW50IGhlcmVieSBhZ3JlZXMgdG8gYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVpbi4KKworRi4gUG9pbnQgb2YgQ29udGFjdDogQW55IFJlY2lwaWVudCBjb250YWN0IHdpdGggR292ZXJubWVudCBBZ2VuY3kgaXMgdG8gYmUgZGlyZWN0ZWQgdG8gdGhlIGRlc2lnbmF0ZWQgcmVwcmVzZW50YXRpdmUgYXMgZm9sbG93czogX19fX19fX19fX18uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05DU0EgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGRjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OQ1NBCkBAIC0wLDAgKzEsMzQgQEAKKworVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy9OQ1NBIE9wZW4gU291cmNlIExpY2Vuc2UKK0NvcHlyaWdodCAoYykgPFllYXI+IDxPd25lciBPcmdhbml6YXRpb24gTmFtZT4gCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYnk6ICAgPE5hbWUgb2YgRGV2ZWxvcG1lbnQgR3JvdXA+CisgICAgICAgICAgICAgICAgICAgICAgIDxOYW1lIG9mIEluc3RpdHV0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPFVSTCBmb3IgRGV2ZWxvcG1lbnQgR3JvdXAvSW5zdGl0dXRpb24+CitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgd2l0aCB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVycy4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lcyBvZiA8TmFtZSBvZiBEZXZlbG9wbWVudCBHcm91cCwgTmFtZSBvZgorSW5zdGl0dXRpb24+LCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24uCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCitBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIFdJVEggVEhFIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OR1BMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDk2ZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTkdQTApAQCAtMCwwICsxLDQ1IEBACisKKworTkVUSEFDSyBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKKyhDb3B5cmlnaHQgMTk4OSBNLiBTdGVwaGVuc29uKSAKKyhCYXNlZCBvbiB0aGUgQklTT04gZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSwgY29weXJpZ2h0IDE5ODggUmljaGFyZCBNLiBTdGFsbG1hbikKKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgd29yZGluZyB0byBtYWtlIHRoZSB0ZXJtcyBmb3Igb3RoZXIgcHJvZ3JhbXMuCitUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIGtlZXAgeW91IGF0IHRoZSBtZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuIEJ5IGNvbnRyYXN0LCBvdXIgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBnaXZlIGV2ZXJ5b25lIHRoZSByaWdodCB0byBzaGFyZSBOZXRIYWNrLiBUbyBtYWtlIHN1cmUgdGhhdCB5b3UgZ2V0IHRoZSByaWdodHMgd2Ugd2FudCB5b3UgdG8gaGF2ZSwgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBhbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuIEhlbmNlIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuCisKK1NwZWNpZmljYWxseSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gZ2l2ZSBhd2F5IGNvcGllcyBvZiBOZXRIYWNrLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGVsc2UgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSBOZXRIYWNrIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitUbyBtYWtlIHN1cmUgdGhhdCBldmVyeW9uZSBoYXMgc3VjaCByaWdodHMsIHdlIGhhdmUgdG8gZm9yYmlkIHlvdSB0byBkZXByaXZlIGFueW9uZSBlbHNlIG9mIHRoZXNlIHJpZ2h0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBOZXRIYWNrLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgeW91IGhhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuCisKK0Fsc28sIGZvciBvdXIgb3duIHByb3RlY3Rpb24sIHdlIG11c3QgbWFrZSBjZXJ0YWluIHRoYXQgZXZlcnlvbmUgZmluZHMgb3V0IHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIE5ldEhhY2suIElmIE5ldEhhY2sgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB3aGF0IHdlIGRpc3RyaWJ1dGVkLgorCitUaGVyZWZvcmUgd2UgKE1pa2UgU3RlcGhlbnNvbiBhbmQgb3RoZXIgaG9sZGVycyBvZiBOZXRIYWNrIGNvcHlyaWdodHMpIG1ha2UgdGhlIGZvbGxvd2luZyB0ZXJtcyB3aGljaCBzYXkgd2hhdCB5b3UgbXVzdCBkbyB0byBiZSBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgb3IgY2hhbmdlIE5ldEhhY2suCisKK0NPUFlJTkcgUE9MSUNJRVMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiBOZXRIYWNrIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBrZWVwIGludGFjdCB0aGUgbm90aWNlcyBvbiBhbGwgZmlsZXMgdGhhdCByZWZlciB0byBjb3B5cmlnaHRzLCB0byB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgTmV0SGFjayBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFsb25nIHdpdGggdGhlIHByb2dyYW0uCitZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIE5ldEhhY2sgb3IgYW55IHBvcnRpb24gb2YgaXQsIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YgUGFyYWdyYXBoIDEgYWJvdmUgKGluY2x1ZGluZyBkaXN0cmlidXRpbmcgdGhpcyBMaWNlbnNlIEFncmVlbWVudCksIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKK2EpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGEgZGVyaXZhdGl2ZSBvZiBOZXRIYWNrIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyBvbiB0ZXJtcyBpZGVudGljYWwgdG8gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgKGV4Y2VwdCB0aGF0IHlvdSBtYXkgY2hvb3NlIHRvIGdyYW50IG1vcmUgZXh0ZW5zaXZlIHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pCisKK2MpIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIE5ldEhhY2sgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKK2EpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCitiKSBhY2NvbXBhbnkgaXQgd2l0aCBmdWxsIGluZm9ybWF0aW9uIGFzIHRvIGhvdyB0byBvYnRhaW4gdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZnJvbSBhbiBhcHByb3ByaWF0ZSBhcmNoaXZlIHNpdGUuIChUaGlzIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24uKQorCitGb3IgdGhlc2UgcHVycG9zZXMsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGVpdGhlciB0aGUgZnVsbCBzb3VyY2UgZGlzdHJpYnV0aW9uIGFzIG9yaWdpbmFsbHkgcmVsZWFzZWQgb3ZlciBVc2VuZXQgb3IgdXBkYXRlZCBjb3BpZXMgb2YgdGhlIGZpbGVzIGluIHRoaXMgZGlzdHJpYnV0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlLgorCitZb3UgbWF5IG5vdCBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIE5ldEhhY2sgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBOZXRIYWNrIGlzIHZvaWQgYW5kIHlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgYWdyZWVtZW50IHNoYWxsIGJlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZC4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlciBzb2Z0d2FyZSBwcm9ncmFtcyBmcm9tIHlvdSB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCitTdGF0ZWQgcGxhaW5seTogWW91IGFyZSBwZXJtaXR0ZWQgdG8gbW9kaWZ5IE5ldEhhY2ssIG9yIG90aGVyd2lzZSB1c2UgcGFydHMgb2YgTmV0SGFjaywgcHJvdmlkZWQgdGhhdCB5b3UgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgc3BlY2lmaWVkIGFib3ZlOyBpbiBwYXJ0aWN1bGFyLCB5b3VyIG1vZGlmaWVkIE5ldEhhY2sgb3IgcHJvZ3JhbSBjb250YWluaW5nIHBhcnRzIG9mIE5ldEhhY2sgbXVzdCByZW1haW4gZnJlZWx5IGF2YWlsYWJsZSBhcyBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBJbiBvdGhlciB3b3JkcywgZ28gYWhlYWQgYW5kIHNoYXJlIE5ldEhhY2ssIGJ1dCBkb25gdCB0cnkgdG8gc3RvcCBhbnlvbmUgZWxzZSBmcm9tIHNoYXJpbmcgaXQgZmFydGhlci4gCitbICBIb21lICB8ICBWZXJzaW9uIDMuNC4zICB8ICBDb250YWN0IFVzICBdCisKKworCitIb3N0ZWQgYnk6ICAgICAgIAorTmV0SGFjayBpcyBDb3B5cmlnaHQgMTk4NS0yMDAzIGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBhbmQgTS4gU3RlcGhlbnNvbi4gU2VlIG91ciBsaWNlbnNlIGZvciBkZXRhaWxzLgorVGhpcyBzaXRlIGlzIENvcHlyaWdodCAxOTk5LTIwMDkgYnkgS2VubmV0aCBMb3JiZXIsIEtlbnNpbmd0b24sIE1hcnlsYW5kLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OUE9TTC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYTY2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05QT1NMLTMuMApAQCAtMCwwICsxLDYxIEBACisKK05vbi1Qcm9maXQgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICgiTm9uLVByb2ZpdCBPU0wiKSAzLjAKKworVGhpcyBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk5vbi1Qcm9maXQgT1NMIikgdmVyc2lvbiAzLjAgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDMuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGNvcHlyaWdodCwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7CisKK2IpIHRvIHRyYW5zbGF0ZSwgYWRhcHQsIGFsdGVyLCB0cmFuc2Zvcm0sIG1vZGlmeSwgb3IgYXJyYW5nZSB0aGUgT3JpZ2luYWwgV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcms7CisKK2MpIHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSBvciBhcyBwcm92aWRlZCBpbiBzZWN0aW9uIDE3KGQpOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgc3VibGljZW5zYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHBhdGVudHMsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kIGltcG9ydCB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBkaXN0cmlidXRlcy4gTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQgY29udmVuaWVudCBhY2Nlc3MgYnkgWW91IGZvciBhcyBsb25nIGFzIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3JgcyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSwgZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhvc2Ugd29ya3MgYXJlIGRpc3RyaWJ1dGVkIG9yIGNvbW11bmljYXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgZ3JhbnRzIG9mIGxpY2Vuc2UgaGVyZXVuZGVyLCBZb3UgbXVzdCB0cmVhdCBhbnkgRXh0ZXJuYWwgRGVwbG95bWVudCBieSBZb3Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLgorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBUaGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueW9uZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgImZhaXIgdXNlIiBvciAiZmFpciBkZWFsaW5nIikuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgYXMgb2YgdGhlIGRhdGUgWW91IGNvbW1lbmNlIGFuIGFjdGlvbiwgaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZyB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24gc2hhbGwgbm90IGFwcGx5IGZvciBhbiBhY3Rpb24gYWxsZWdpbmcgcGF0ZW50IGluZnJpbmdlbWVudCBieSBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvciBwYXRlbnQgbGF3IGluIHRoZSBhcHByb3ByaWF0ZSBqdXJpc2RpY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBBdHRvcm5leXNgIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworMTYpIE1vZGlmaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBpcyBDb3B5cmlnaHQgJiMxNjk7IDIwMDUgTGF3cmVuY2UgUm9zZW4uIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlLCBvciBjb21tdW5pY2F0ZSB0aGlzIExpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHBlcm1pdHMgWW91IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UgYXMgYXBwbGllZCB0byB0aGUgT3JpZ2luYWwgV29yayBvciB0byBEZXJpdmF0aXZlIFdvcmtzLiBIb3dldmVyLCBZb3UgbWF5IG1vZGlmeSB0aGUgdGV4dCBvZiB0aGlzIExpY2Vuc2UgYW5kIGNvcHksIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgeW91ciBtb2RpZmllZCB2ZXJzaW9uICh0aGUgIk1vZGlmaWVkIExpY2Vuc2UiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGkpIFlvdSBtYXkgbm90IGluZGljYXRlIGluIGFueSB3YXkgdGhhdCB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaXMgdGhlICJPcGVuIFNvZnR3YXJlIExpY2Vuc2UiIG9yICJPU0wiIGFuZCB5b3UgbWF5IG5vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0IHJlcGxhY2UgdGhlIG5vdGljZSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBhYm92ZSB3aXRoIHRoZSBub3RpY2UgIkxpY2Vuc2VkIHVuZGVyIDxpbnNlcnQgeW91ciBsaWNlbnNlIG5hbWUgaGVyZT4iIG9yIHdpdGggYSBub3RpY2Ugb2YgeW91ciBvd24gdGhhdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGUgbm90aWNlIGluIHRoaXMgTGljZW5zZTsgYW5kIChpaWkpIFlvdSBtYXkgbm90IGNsYWltIHRoYXQgeW91ciBvcmlnaW5hbCB3b3JrcyBhcmUgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdW5sZXNzIHlvdXIgTW9kaWZpZWQgTGljZW5zZSBoYXMgYmVlbiBhcHByb3ZlZCBieSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIChPU0kpIGFuZCBZb3UgY29tcGx5IHdpdGggaXRzIGxpY2Vuc2UgcmV2aWV3IGFuZCBjZXJ0aWZpY2F0aW9uIHByb2Nlc3MuCisKKzE3KSBOb24tUHJvZml0IEFtZW5kbWVudC4gVGhlIG5hbWUgb2YgdGhpcyBhbWVuZGVkIHZlcnNpb24gb2YgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoIk9TTCAzLjAiKSBpcyAiTm9uLVByb2ZpdCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgMy4wIi4gVGhlIG9yaWdpbmFsIE9TTCAzLjAgbGljZW5zZSBoYXMgYmVlbiBhbWVuZGVkIGFzIGZvbGxvd3M6CisKKyhhKSBMaWNlbnNvciByZXByZXNlbnRzIGFuZCBkZWNsYXJlcyB0aGF0IGl0IGlzIGEgbm90LWZvci1wcm9maXQgb3JnYW5pemF0aW9uIHRoYXQgZGVyaXZlcyBubyByZXZlbnVlIHdoYXRzb2V2ZXIgZnJvbSB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgb3IgZnJvbSBzdXBwb3J0IG9yIHNlcnZpY2VzIHJlbGF0aW5nIHRoZXJldG8uCisKKyhiKSBUaGUgZmlyc3Qgc2VudGVuY2Ugb2YgU2VjdGlvbiA3IFsiV2FycmFudHkgb2YgUHJvdmVuYW5jZSJdIG9mIE9TTCAzLjAgaGFzIGJlZW4gc3RyaWNrZW4uIEZvciBPcmlnaW5hbCBXb3JrcyBsaWNlbnNlZCB1bmRlciB0aGlzIE5vbi1Qcm9maXQgT1NMIDMuMCwgTElDRU5TT1IgT0ZGRVJTIE5PIFdBUlJBTlRJRVMgV0hBVFNPRVZFUi4KKworKGMpIEluIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiBTZWN0aW9uIDggWyJMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSJdIG9mIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wLCB0aGUgbGlzdCBvZiBkYW1hZ2VzIGZvciB3aGljaCBMSUFCSUxJVFkgSVMgTElNSVRFRCBub3cgaW5jbHVkZXMgImRpcmVjdCIgZGFtYWdlcy4KKworKGQpIFRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBvZiB0aGlzIExpY2Vuc2Ugbm93IHJlZmVycyB0byB0aGlzICJOb24tUHJvZml0IE9wZW4gU29mdHdhcmUgTGljZW5zZSIgcmF0aGVyIHRoYW4gdGhlICJPcGVuIFNvZnR3YXJlIExpY2Vuc2UiLiBZb3UgbWF5IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIHVuZGVyIHRoaXMgTm9uLVByb2ZpdCBPU0wgMy4wIGxpY2Vuc2Ugb25seSBpZiBZb3UgbWFrZSB0aGUgcmVwcmVzZW50YXRpb24gYW5kIGRlY2xhcmF0aW9uIGluIHBhcmFncmFwaCAoYSkgb2YgdGhpcyBTZWN0aW9uIDE3LiBPdGhlcndpc2UsIFlvdSBzaGFsbCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBvbmx5IHVuZGVyIHRoZSBPU0wgMy4wIGxpY2Vuc2UgYW5kIFlvdSBzaGFsbCBwdWJsaXNoIGNsZWFyIGxpY2Vuc2luZyBub3RpY2VzIHNvIHN0YXRpbmcuIEFsc28gYnkgd2F5IG9mIGNsYXJpZmljYXRpb24sIHRoaXMgTGljZW5zZSBkb2VzIG5vdCBhdXRob3JpemUgWW91IHRvIGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgd29ya3MgdW5kZXIgdGhpcyBOb24tUHJvZml0IE9TTCAzLjAgaWYgWW91IHJlY2VpdmVkIHRoZW0gdW5kZXIgdGhlIG9yaWdpbmFsIE9TTCAzLjAgbGljZW5zZS4KKworKGUpIE9yaWdpbmFsIFdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoaXMgbGljZW5zZSBzaGFsbCByZWZlcmVuY2UgIk5vbi1Qcm9maXQgT1NMIDMuMCIgaW4gbGljZW5zaW5nIG5vdGljZXMgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHdvcmtzIGxpY2Vuc2VkIHVuZGVyIHRoZSBvcmlnaW5hbCBPU0wgMy4wIGxpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL05UUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzU3MmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTlRQCkBAIC0wLDAgKzEsNyBAQAorCitOVFAgTGljZW5zZSAoTlRQKQorCitDb3B5cmlnaHQgKGMpIChDb3B5cmlnaHRIb2xkZXJzTmFtZSkgKEZyb20gNC1kaWdpdC15ZWFyKS0oVG8gNC1kaWdpdC15ZWFyKQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSAoVHJhZGVtYXJrZWROYW1lKSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gKFRyYWRlbWFya2VkTmFtZSkgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTmF1bWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Y2U3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9OYXVtYW4KQEAgLTAsMCArMSw1MCBAQAorCitOQVVNRU4gUHVibGljIExpY2Vuc2UKK1RoaXMgc29mdHdhcmUgaXMgQ29weXJpZ2h0IChjKSBOQVVNRU4gKHRtKSBhbmQgQ29udHJpYnV0b3JzLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgord2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCitkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKK3Byb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgTkFVTUVOICh0bSkgbXVzdCBub3QgYmUgdXNlZCB0bworZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IKK3dyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIE5BVU1FTi4KKworNC4gVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBvciB0byB1c2UgaXQgZm9yIGFueQorcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcyAoc20pCitvciBUcmFkZW1hcmtzICh0bSkgb2YgTkFVTUVOLgorCis1LiBJZiBhbnkgZmlsZXMgb3JpZ2luYXRpbmcgZnJvbSBOQVVNRU4gb3IgQ29udHJpYnV0b3JzIGFyZSBtb2RpZmllZCwgeW91IG11c3QKK2NhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCit0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworRGlzY2xhaW1lcjoKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBOQVVNRU4gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRAorT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5BVU1FTgorT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBOQVVNRU4KK2FuZCBDb250cmlidXRvcnMuIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZQorYWNjb21wYW55aW5nIGNyZWRpdHMgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Ob2tpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM3NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvTm9raWEKQEAgLTAsMCArMSw0MjMgQEAKKworTm9raWEgT3BlbiBTb3VyY2UgTGljZW5zZSAoTk9LT1MKK0xpY2Vuc2UpIFZlcnNpb24gMS4wYQorIDEuIERFRklOSVRJT05TLgorCisiQWZmaWxpYXRlcyIgb2YgYSBwYXJ0eSBzaGFsbCBtZWFuIGFuIGVudGl0eQorCithKSB3aGljaCBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGNvbnRyb2xsaW5nIHN1Y2ggcGFydHk7CisKK2IpIHdoaWNoIGlzIHVuZGVyIHRoZSBzYW1lIGRpcmVjdCBvciBpbmRpcmVjdCBvd25lcnNoaXAgb3IgY29udHJvbAorYXMgc3VjaCBwYXJ0eTsgb3IKKworYykgd2hpY2ggaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBvd25lZCBvciBjb250cm9sbGVkIGJ5IHN1Y2ggcGFydHkuCisKK0ZvciB0aGVzZSBwdXJwb3NlcywgYW4gZW50aXR5IHNoYWxsIGJlIHRyZWF0ZWQgYXMgYmVpbmcgY29udHJvbGxlZAorYnkgYW5vdGhlciBpZiB0aGF0IG90aGVyIGVudGl0eSBoYXMgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQordm90ZXMgaW4gc3VjaCBlbnRpdHksIGlzIGFibGUgdG8gZGlyZWN0IGl0cyBhZmZhaXJzIGFuZC9vciB0byBjb250cm9sIHRoZQorY29tcG9zaXRpb24gb2YgaXRzIGJvYXJkIG9mIGRpcmVjdG9ycyBvciBlcXVpdmFsZW50IGJvZHkuCisKKyJDb21tZXJjaWFsIFVzZSIgc2hhbGwgbWVhbiBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZwordGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKK2BgQ29udHJpYnV0b3JgYCBzaGFsbCBtZWFuIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcwordG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK2BgQ29udHJpYnV0b3IgVmVyc2lvbmBgIHNoYWxsIG1lYW4gaW4gY2FzZSBvZiBhbnkgQ29udHJpYnV0b3IKK3RoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhCitDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yIAorYW5kIGluIGNhc2Ugb2YgTm9raWEgaW4gYWRkaXRpb24gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGluIGFueSBmb3JtLCBpbmNsdWRpbmcKK3RoZSBmb3JtIGFzIEV4Y2V1dGFibGUuCisKK2BgQ292ZXJlZCBTb2Z0d2FyZWBgIHNoYWxsIG1lYW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIE1vZGlmaWNhdGlvbnMKK29yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2gKK2Nhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKK2BgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgc2hhbGwgbWVhbiBhIG1lY2hhbmlzbQorZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCitgYEV4ZWN1dGFibGVgYCBzaGFsbCBtZWFuIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIKK3RoYW4gU291cmNlIENvZGUuCisKK2BgTm9raWFgYCBzaGFsbCBtZWFuIE5va2lhIENvcnBvcmF0aW9uIGFuZCBpdHMgQWZmaWxpYXRlcy4KKworYGBMYXJnZXIgV29ya2BgIHNoYWxsIG1lYW4gYSB3b3JrLCB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIFNvZnR3YXJlCitvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworYGBMaWNlbnNlYGAgc2hhbGwgbWVhbiB0aGlzIGRvY3VtZW50LgorCisiTGljZW5zYWJsZSIgc2hhbGwgbWVhbiBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseQorYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCitgYE1vZGlmaWNhdGlvbnNgYCBzaGFsbCBtZWFuIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tCit0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIFNvZnR3YXJlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLAorYSBNb2RpZmljYXRpb24gaXM6CisKK2EpIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZworT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworYikgQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yCitwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitgYE9yaWdpbmFsIFNvZnR3YXJlYGAgc2hhbGwgbWVhbiB0aGUgU291cmNlIENvZGUgb2YgY29tcHV0ZXIKK3NvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkKK0V4aGliaXQgQSBhcyBPcmlnaW5hbCBTb2Z0d2FyZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlcgordGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgU29mdHdhcmUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisiUGF0ZW50IENsYWltcyIgc2hhbGwgbWVhbiBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQKK29yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQKK2FwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCitgYFNvdXJjZSBDb2RlYGAgc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQKK1NvZnR3YXJlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLAorcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsCitjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgYW5vdGhlciB3ZWxsIGtub3duLAorYXZhaWxhYmxlIENvdmVyZWQgU29mdHdhcmUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUKK2NhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24KK29yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisKKyJZb3VgYCAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbAorZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwKK3RoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuCitGb3IgbGVnYWwgZW50aXRpZXMsICJZb3VgYCBpbmNsdWRlcyBBZmZpbGlhdGVzIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEgTm9raWEgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgTm9raWEgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBjbGFpbXM6CisKK2EpIHVuZGVyIGNvcHlyaWdodHMgTGljZW5zYWJsZSBieSBOb2tpYSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zCit0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsKKworYikgYW5kIHVuZGVyIFBhdGVudHMgQ2xhaW1zIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZworb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBTb2Z0d2FyZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLAorYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvcgorcG9ydGlvbnMgdGhlcmVvZikuCisKK2MpIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBOb2tpYSBmaXJzdCBkaXN0cmlidXRlcyBPcmlnaW5hbCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZS4KKworZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOgorMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlOyAyKSBzZXBhcmF0ZSBmcm9tCit0aGUgT3JpZ2luYWwgU29mdHdhcmU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbgorb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlCit3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMiBDb250cmlidXRvciBHcmFudC4KKworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbAorcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKK2EpIHVuZGVyIGNvcHlyaWdodHMgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieQorc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGgKK290aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsKK2FuZAorCitiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywKK29yIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vcgoraW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksCit0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZQorb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kCisyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IKK1ZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCitjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlCitvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOgorMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsKKzIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieToKK2kpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uCitvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMKK3BhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMKK2luZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvci4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEgQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZAorYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4KK1RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgU29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQKK3VuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkKK2NvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55Cit0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUKK3ZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UKK21heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZAoraW4gU2VjdGlvbiAzLjUuCisKKzMuMiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyCitvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uCithdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLAorbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQKK2luaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQKK3ZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoCityZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uCityZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZAorYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIFNvZnR3YXJlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4KK2EgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIFNvZnR3YXJlCithbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAordGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIFNvZnR3YXJlCitwcm92aWRlZCBieSBOb2tpYSBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIE5va2lhIGluIChhKSB0aGUgU291cmNlIENvZGUsCithbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCiszLjQgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisKK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUKK1NvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMYGAgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQKK3RoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93Cit3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbgoraXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseQorbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIKK2FuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzCitvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZAorU29mdHdhcmUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KKworSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlCithbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5Cit0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4KK3RoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbgorMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUKK0NvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cwordG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNSBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlCitmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbgorKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKK3N1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSBZb3UgbWF5IGFkZCB5b3VyCituYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvCitkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91CitkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIFNvZnR3YXJlLgorWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5CitvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLgorSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgTm9raWEKK29yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZAorWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgTm9raWEgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5CitpbmN1cnJlZCBieSBOb2tpYSBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBTb2Z0d2FyZSwKK2FuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlCitDb3ZlcmVkIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcKK2EgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24KKzMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlCit2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AKK3JpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlCit2ZXJzaW9uIG9mIENvdmVyZWQgU29mdHdhcmUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91cgorY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQKK1lvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UKK2ZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuCitJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91CittdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UKK2FyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IE5va2lhIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZQordG8gaW5kZW1uaWZ5IE5va2lhIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQorTm9raWEgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNyBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlcgorc29mdHdhcmUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlcgorV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMKK29mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworNC4gSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8gc3RhdHV0ZSwKK2p1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zCithbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwKK2ZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMKK29mIHRoZSBTb3VyY2UgQ29kZS4KKworRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlCit0byB1bmRlcnN0YW5kIGl0LgorCis1LiBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggTm9raWEgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UKK2luIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIFNvZnR3YXJlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworCis2LjEgTmV3IFZlcnNpb25zLgorCitOb2tpYSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lCit0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIgRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIFNvZnR3YXJlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbgorb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAordmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcworb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTm9raWEuIE5vIG9uZSBvdGhlcgordGhhbiBOb2tpYSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIFNvZnR3YXJlCitjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTYGAgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLAorRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRQorUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkKK0NPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBOT0tJQSwgSVRTIExJQ0VOU09SUworT1IgQUZGSUxJQVRFUyBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZCitTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgIFdBUlJBTlRZIENPTlNUSVRVVEVTCitBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVECitIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uCisKKzguMSBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseQoraWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluCiszMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZAorU29mdHdhcmUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kCit0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzguMiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltCisoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IE5va2lhIG9yIGEgQ29udHJpYnV0b3IgKE5va2lhCitvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikKK2FsbGVnaW5nIHRoYXQ6CisKK2EpIHN1Y2ggUGFydGljaXBhbnRgcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzCithbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91Cit1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UKK2Zyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlcgorcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEKK211dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zCittYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdAordG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cworb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5CithZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sCit0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkCithYm92ZS4KKworYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnRgcworQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbgorYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQKKzIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsCitkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LgorCis4LjMgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZwordGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcworYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkKK3ByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZQordmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IKKzIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkKK3BheW1lbnQgb3IgbGljZW5zZS4KKworOC40IEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaAoraGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0bwordGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIE5PS0lBLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsCitPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNICitQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sCitEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLAorT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OCitPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZCitSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUworU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTgorT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIEJVVCBNQVkgQUxMT1cgTElBQklMSVRZIFRPIEJFIExJTUlURUQ7CitJTiBTVUNIIENBU0VTLCBBIFBBUlRZYHMsIElUUyBFTVBMT1lFRVMsIExJQ0VOU09SUyBPUiBBRkZJTElBVEVTYCBMSUFCSUxJVFkKK1NIQUxMIEJFIExJTUlURUQgVE8gVS5TLiAkNTAuIE5vdGhpbmcgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBzaGFsbCBwcmVqdWRpY2UKK3RoZSBzdGF0dXRvcnkgcmlnaHRzIG9mIGFueSBwYXJ0eSBkZWFsaW5nIGFzIGEgY29uc3VtZXIuCisKKzEwLiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIKK2hlcmVvZi4gQWxsIHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIKK3RoaXMgTGljZW5zZSBhcmUgcmVzZXJ2ZWQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGdyYW50IFlvdSBhbnkKK3JpZ2h0cyB0byB1c2UgYW55IG9mIHRoZSB0cmFkZW1hcmtzIG9mIE5va2lhIG9yIGFueSBvZiBpdHMgQWZmaWxpYXRlcywKK2V2ZW4gaWYgYW55IG9mIHN1Y2ggdHJhZGVtYXJrcyBhcmUgaW5jbHVkZWQgaW4gYW55IHBhcnQgb2YgQ292ZXJlZCBTb2Z0d2FyZQorYW5kL29yIGRvY3VtZW50YXRpb24gdG8gaXQuCisKK1RoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBGaW5sYW5kIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3Citwcm92aXNpb25zLiBBbGwgZGlzcHV0ZXMgYXJpc2luZyBmcm9tIG9yIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsCitiZSBzZXR0bGVkIGJ5IGEgc2luZ2xlIGFyYml0cmF0b3IgYXBwb2ludGVkIGJ5IHRoZSBDZW50cmFsIENoYW1iZXIgb2YgQ29tbWVyY2UKK29mIEZpbmxhbmQuIFRoZSBhcmJpdHJhdGlvbiBwcm9jZWR1cmUgc2hhbGwgdGFrZSBwbGFjZSBpbiBIZWxzaW5raSwgRmlubGFuZAoraW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIElmIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHZvaWQgYW5kCit1bmVuZm9yY2VhYmxlLCBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSBiYWxhbmNlIG9mIHRoZSBBZ3JlZW1lbnQsCit3aGljaCBzaGFsbCByZW1haW4gdmFsaWQgYW5kIGVuZm9yY2VhYmxlIGFjY29yZGluZyB0byBpdHMgdGVybXMuCisKKzExLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIE5va2lhIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvcgorY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTm9raWEgYW5kIENvbnRyaWJ1dG9ycwordG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4KK2lzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisgCisKK0VYSElCSVQgQQorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBOT0tPUyBMaWNlbnNlIFZlcnNpb24gMS4wCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKK0xpY2Vuc2UuCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GICBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCit0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCit1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIFNvZnR3YXJlIGlzCisKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitDb3B5cmlnaHQgJiMxNjk7IDx5ZWFyPiBOb2tpYSBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzZGY3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09BU0lTCkBAIC0wLDAgKzEsMTMgQEAKKyAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBEVEQgYW5kCisgIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzCisgIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFwcGVhciBpbiBhbGwgY29waWVzLiAgVGhlIGNvcHlyaWdodAorICBob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCisgIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCisgIHdhcnJhbnR5LgorCisgIElmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorICByZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCisgIGFkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQorICB0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PQ0xDLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzllM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0NMQy0yLjAKQEAgLTAsMCArMSw3OCBAQAorCitPQ0xDIFJlc2VhcmNoIFB1YmxpYyBMaWNlbnNlIDIuMAorVGVybXMgJmFtcDsgQ29uZGl0aW9ucyBPZiBVc2UKK01heSwgMjAwMgorQ29weXJpZ2h0ICYjMTY5OyAyMDAyLiBPQ0xDIE9ubGluZSBDb21wdXRlciBMaWJyYXJ5IENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkCisKK1BMRUFTRSBSRUFEIFRISVMgRE9DVU1FTlQgQ0FSRUZVTExZLiBCWSBET1dOTE9BRElORyBPUiBVU0lORyBUSEUgQ09ERSBCQVNFIEFORC9PUiBET0NVTUVOVEFUSU9OIEFDQ09NUEFOWUlORyBUSElTIExJQ0VOU0UgKFRIRSAiTGljZW5zZSIpLCBZT1UgQUdSRUUgVE8gVEhFIEZPTExPV0lORyBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UuCisKK1NlY3Rpb24gMS4gWW91ciBSaWdodHMKKworU3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBPQ0xDIE9mZmljZSBvZiBSZXNlYXJjaCAodGhlICJPcmlnaW5hbCBDb250cmlidXRvciIpIGFuZCBlYWNoIHN1YnNlcXVlbnQgY29udHJpYnV0b3IgKGNvbGxlY3RpdmVseSB3aXRoIHRoZSBPcmlnaW5hbCBDb250cmlidXRvciwgdGhlICJDb250cmlidXRvcnMiKSBoZXJlYnkgZ3JhbnQgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCBuby1jaGFyZ2UsIHRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvIGV4ZWN1dGUsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgYW5kIGRpc3RyaWJ1dGUgKGludGVybmFsbHkgYW5kIGV4dGVybmFsbHkpLCBmb3IgY29tbWVyY2lhbCBhbmQgbm9uY29tbWVyY2lhbCBwdXJwb3NlcywgdGhlIG9yaWdpbmFsIGNvZGUgY29udHJpYnV0ZWQgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3IgYW5kIGFsbCBNb2RpZmljYXRpb25zIChjb2xsZWN0aXZlbHkgY2FsbGVkIHRoZSAiUHJvZ3JhbSIpLgorCitTZWN0aW9uIDIuIERlZmluaXRpb25zCisKK0EgIk1vZGlmaWNhdGlvbiIgdG8gdGhlIFByb2dyYW0gaXMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGFueSBmaWxlIG9mIHRoZSBQcm9ncmFtIGFuZCBhbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgUHJvZ3JhbS4gSWYgeW91IG1ha2UgYSBNb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXh0ZXJuYWxseSB5b3UgYXJlIGEgIkNvbnRyaWJ1dG9yLiIgVGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBtdXN0IGJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgaW5jbHVkaW5nIHRob3NlIGluIFNlY3Rpb24gMyBiZWxvdy4KKworQSAiQ29tYmluZWQgV29yayIgcmVzdWx0cyBmcm9tIGNvbWJpbmluZyBhbmQgaW50ZWdyYXRpbmcgYWxsIG9yIHBhcnRzIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgY29kZS4gQSBDb21iaW5lZCBXb3JrIG1heSBiZSB0aG91Z2h0IG9mIGFzIGhhdmluZyBtdWx0aXBsZSBwYXJlbnRzIG9yIGJlaW5nIHJlc3VsdCBvZiBtdWx0aXBsZSBsaW5lcyBvZiBjb2RlIGRldmVsb3BtZW50LgorCitTZWN0aW9uIDMuIERpc3RyaWJ1dGlvbiBMaWNlbnNpbmcgVGVybXMKKworQS4gR2VuZXJhbCBSZXF1aXJlbWVudHMKK0V4Y2VwdCBhcyBuZWNlc3NhcnkgdG8gcmVjb2duaXplIHRoaXJkLXBhcnR5IHJpZ2h0cyBvciB0aGlyZC1wYXJ0eSByZXN0cmljdGlvbiAoc2VlIGJlbG93KSwgYSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYW55IG9mIHRoZSBmb3JtcyBsaXN0ZWQgYmVsb3cgbXVzdCBub3QgcHV0IGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50JiM4MjE3O3MgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKworQXMgYSBDb250cmlidXRvciwgeW91IHJlcHJlc2VudCB0aGF0IHlvdXIgTW9kaWZpY2F0aW9uKHMpIGFyZSB5b3VyIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZCwgdG8gdGhlIGJlc3Qgb2YgeW91ciBrbm93bGVkZ2UsIG5vIHRoaXJkIHBhcnR5IGhhcyBhbnkgY2xhaW0gKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcykgcmVsYXRpbmcgdG8geW91ciBNb2RpZmljYXRpb24ocykuIFlvdSByZXByZXNlbnQgdGhhdCBlYWNoIG9mIHlvdXIgTW9kaWZpY2F0aW9ucyBpbmNsdWRlcyBjb21wbGV0ZSBkZXRhaWxzIG9mIGFueSB0aGlyZC1wYXJ0eSByaWdodCBvciBvdGhlciB0aGlyZC1wYXJ0eSByZXN0cmljdGlvbiBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnQgb2YgeW91ciBNb2RpZmljYXRpb24gKGluY2x1ZGluZyBhIGNvcHkgb2YgYW55IGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQpLgorCitUaGUgUHJvZ3JhbSBtdXN0IGJlIGRpc3RyaWJ1dGVkIHdpdGhvdXQgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YgcGh5c2ljYWxseSB0cmFuc2ZlcnJpbmcgdGhlIGZpbGVzIHRvIHRoZSByZWNpcGllbnQuCisKK1RoaXMgV2FycmFudHkgRGlzY2xhaW1lci9MaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBtdXN0IGJlIHByb21pbmVudGx5IGRpc3BsYXllZCB3aXRoIGV2ZXJ5IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybToKKworWU9VIEFHUkVFIFRIQVQgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgQVMtSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgKEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQpLiBBQ0NPUkRJTkdMWSwgT0NMQyBNQUtFUyBOTyBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMgT1IgR1VBUkFOVEVFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMgT1IgR1VBUkFOVEVFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLCBBUyBUTzogKEEpIFRIRSBGVU5DVElPTkFMSVRZIE9SIE5PTklORlJJTkdFTUVOVCBPRiBQUk9HUkFNLCBBTlkgTU9ESUZJQ0FUSU9OLCBBIENPTUJJTkVEIFdPUksgT1IgQU4gQUdHUkVHQVRFIFdPUks7IE9SIChCKSBUSEUgUkVTVUxUUyBPRiBBTlkgUFJPSkVDVCBVTkRFUlRBS0VOIFVTSU5HIFRIRSBQUk9HUkFNLCBBTlkgTU9ESUZJQ0FUSU9OLCBBIENPTUJJTkVEIFdPUksgT1IgQU4gQUdHUkVHQVRFIFdPUksuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBDT05TRVFVRU5USUFMIE9SIEFOWSBPVEhFUiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUFJPR1JBTSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFlPVSBIRVJFQlkgV0FJVkUgQU5ZIENMQUlNUyBGT1IgREFNQUdFUyBPRiBBTlkgS0lORCBBR0FJTlNUIENPTlRSSUJVVE9SUyBXSElDSCBNQVkgUkVTVUxUIEZST00gWU9VUiBVU0UgT0YgVEhFIFBST0dSQU0uCisKK0IuIFJlcXVpcmVtZW50cyBmb3IgYSBEaXN0cmlidXRpb24gb2YgTW9kaWZpYWJsZSBDb2RlCitJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBhIGZvcm0gdG8gd2hpY2ggdGhlIHJlY2lwaWVudCBjYW4gbWFrZSBNb2RpZmljYXRpb25zIChlLmcuIHNvdXJjZSBjb2RlKSwgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhcHBseSB0byB1c2UgYnkgcmVjaXBpZW50LiBJbiBhZGRpdGlvbiwgZWFjaCBzb3VyY2UgYW5kIGRhdGEgZmlsZSBvZiB0aGUgUHJvZ3JhbSBhbmQgYW55IE1vZGlmaWNhdGlvbiB5b3UgZGlzdHJpYnV0ZSBtdXN0IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBub3RpY2U6CisKKyJDb3B5cmlnaHQgKGMpIDIwMDAtIChpbnNlcnQgdGhlbiBjdXJyZW50IHllYXIpIE9DTEMgT25saW5lIENvbXB1dGVyIExpYnJhcnkgQ2VudGVyLCBJbmMuIGFuZCBvdGhlciBjb250cmlidXRvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUsIGFzIHVwZGF0ZWQgZnJvbSB0aW1lIHRvIHRpbWUgYnkgdGhlIE9DTEMgT2ZmaWNlIG9mIFJlc2VhcmNoLCBhcmUgc3ViamVjdCB0byBPQ0xDIFJlc2VhcmNoIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGN1cnJlbnQgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vcHVybC5vY2xjLm9yZy9vY2xjL3Jlc2VhcmNoL09SUEwvLiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIE9DTEMgUmVzZWFyY2guIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE9DTEMgUmVzZWFyY2gsIHBsZWFzZSBzZWUgaHR0cDovL3d3dy5vY2xjLm9yZy9yZXNlYXJjaC8uIFRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4gUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLiBDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIgorCitDLiBSZXF1aXJlbWVudHMgZm9yIGEgRGlzdHJpYnV0aW9uIG9mIE5vbi1tb2RpZmlhYmxlIENvZGUKK0lmIHlvdSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGEgZm9ybSB0byB3aGljaCB0aGUgcmVjaXBpZW50IGNhbm5vdCBtYWtlIE1vZGlmaWNhdGlvbnMgKGUuZy4gb2JqZWN0IGNvZGUpLCB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFwcGx5IHRvIHVzZSBieSByZWNpcGllbnQgYW5kIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgaW4gYXBwcm9wcmlhdGUgYW5kIGNvbnNwaWN1b3VzIGxvY2F0aW9uczoKKworIkNvcHlyaWdodCAoYykgMjAwMC0gKGluc2VydCB0aGVuIGN1cnJlbnQgeWVhcikgT0NMQyBPbmxpbmUgQ29tcHV0ZXIgTGlicmFyeSBDZW50ZXIsIEluYy4gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iCisKK0luIGFkZGl0aW9uLCB0aGUgc291cmNlIGNvZGUgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIHRoZSBvYmplY3QgY29kZSBkaXN0cmlidXRpb24gb3IgdGhlIGRpc3RyaWJ1dG9yIG11c3QgcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgdG8gdGhlIHJlY2lwaWVudCB1cG9uIHJlcXVlc3QuCisKK0QuIFJlcXVpcmVtZW50cyBmb3IgYSBDb21iaW5lZCBXb3JrIERpc3RyaWJ1dGlvbgorRGlzdHJpYnV0aW9ucyBvZiBDb21iaW5lZCBXb3JrcyBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFuZCBtdXN0IGJlIG1hZGUgYXQgbm8gY2hhcmdlIHRvIHRoZSByZWNpcGllbnQgYmV5b25kIHRoZSBjb3N0cyBvZiBwaHlzaWNhbGx5IHRyYW5zZmVycmluZyB0aGUgZmlsZXMgdG8gcmVjaXBpZW50LgorCitBIENvbWJpbmVkIFdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIGVpdGhlciBtb2RpZmlhYmxlIG9yIG5vbi1tb2RpZmlhYmxlIGNvZGUuIFRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLkIgb3IgMy5DIGFib3ZlIChhcyBhcHByb3ByaWF0ZSkgYXBwbHkgdG8gc3VjaCBkaXN0cmlidXRpb25zLgorCitBbiAiQWdncmVnYXRlIFdvcmsiIGlzIHdoZW4gdGhlIFByb2dyYW0gZXhpc3RzLCB3aXRob3V0IGludGVncmF0aW9uLCB3aXRoIG90aGVyIHByb2dyYW1zIG9uIGEgc3RvcmFnZSBtZWRpdW0uIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBwb3J0aW9ucyBvZiBhbiBBZ2dyZWdhdGUgV29yayB3aGljaCBhcmUgbm90IGNvdmVyZWQgYnkgdGhlIGRlZmluaXRpb24gb2YgIlByb2dyYW0iIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZS4gWW91IGFyZSBub3QgZm9yYmlkZGVuIGZyb20gc2VsbGluZyBhbiBBZ2dyZWdhdGUgV29yay4gSG93ZXZlciwgdGhlIFByb2dyYW0gY29udGFpbmVkIGluIGFuIEFnZ3JlZ2F0ZSBXb3JrIGlzIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBBbHNvLCBzaG91bGQgdGhlIFByb2dyYW0gYmUgZXh0cmFjdGVkIGZyb20gYW4gQWdncmVnYXRlIFdvcmssIHRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSB1c2Ugb2YgdGhlIFByb2dyYW0gYXBhcnQgZnJvbSB0aGUgQWdncmVnYXRlIFdvcmsuCisKK1NlY3Rpb24gNC4gTGljZW5zZSBHcmFudAorCitGb3IgcHVycG9zZXMgb2YgcGVybWl0dGluZyB1c2Ugb2YgeW91ciBNb2RpZmljYXRpb25zIGJ5IE9DTEMgYW5kIG90aGVyIGxpY2Vuc2VlcyBoZXJldW5kZXIsIHlvdSBoZXJlYnkgZ3JhbnQgdG8gT0NMQyBhbmQgc3VjaCBvdGhlciBsaWNlbnNlZXMgdGhlIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCB0cmFuc2ZlcmFibGUsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZXhlY3V0ZSwgY29weSwgYWx0ZXIsIGRlbGV0ZSwgbW9kaWZ5LCBhZGFwdCwgY2hhbmdlLCByZXZpc2UsIGVuaGFuY2UsIGRldmVsb3AsIHB1YmxpY2x5IGRpc3BsYXksIGRpc3RyaWJ1dGUgKGludGVybmFsbHkgYW5kIGV4dGVybmFsbHkpIGFuZC9vciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB5b3VyIE1vZGlmaWNhdGlvbnMgKGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YpIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVzZSBUZXJtcy4gVGhpcyBTZWN0aW9uIDQgc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgZm9yIGFueSByZWFzb24uCisKK1NlY3Rpb24gNS4gVGVybWluYXRpb24gb2YgUmlnaHRzCisKK1RoaXMgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlICh3aXRoIHJlc3BlY3QgdG8gdGhlIGdyYW50IGZyb20gYSBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yKSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZXMgZm9yIGFueSBlbnRpdHkgdGhhdCBpbml0aWF0ZXMgbGVnYWwgYWN0aW9uIGZvciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50ICh3aXRoIHJlc3BlY3QgdG8gdGhlIFByb2dyYW0pIGFnYWluc3Qgc3VjaCBDb250cmlidXRvciBhcyBvZiB0aGUgaW5pdGlhdGlvbiBvZiBzdWNoIGFjdGlvbi4KKworSWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhpcyBMaWNlbnNlLCB5b3VyIHJpZ2h0cyAoYnV0IG5vdCB5b3VyIG9ibGlnYXRpb25zKSB1bmRlciB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdW5sZXNzIHlvdSBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBub25jb21wbGlhbmNlLiBBbGwgc3VibGljZW5zZXMgZ3JhbnRlZCBieSB5b3Ugd2hpY2ggcHJlZXhpc3Qgc3VjaCB0ZXJtaW5hdGlvbiBhbmQgYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBzdWNoIHRlcm1pbmF0aW9uLgorCitTZWN0aW9uIDYuIE90aGVyIFRlcm1zCisKK0V4Y2VwdCBmb3IgdGhlIGNvcHlyaWdodCBub3RpY2VzIHJlcXVpcmVkIGFib3ZlLCB5b3UgbWF5IG5vdCB1c2UgYW55IHRyYWRlbWFyayBvZiBhbnkgb2YgdGhlIENvbnRyaWJ1dG9ycyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIHJlbGV2YW50IENvbnRyaWJ1dG9yLiBZb3UgYWdyZWUgbm90IHRvIHJlbW92ZSwgYWx0ZXIgb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0IG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0cyBub3RpY2UgY29udGFpbmVkIGluIHRoZSBQcm9ncmFtLgorCitBbGwgdHJhbnNmZXJzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwYXJ0IHRoZXJlb2Ygc2hhbGwgYmUgbWFkZSBpbiBjb21wbGlhbmNlIHdpdGggVS5TLiBpbXBvcnQvZXhwb3J0IHJlZ3VsYXRpb25zIG9yIG90aGVyIHJlc3RyaWN0aW9ucyBvZiB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlLCBhcyB3ZWxsIGFzIG90aGVyIHNpbWlsYXIgdHJhZGUgb3IgY29tbWVyY2UgcmVzdHJpY3Rpb25zIHdoaWNoIG1pZ2h0IGFwcGx5LgorCitBbnkgcGF0ZW50IG9idGFpbmVkIGJ5IGFueSBwYXJ0eSBjb3ZlcmluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mIG11c3QgaW5jbHVkZSBhIHByb3Zpc2lvbiBwcm92aWRpbmcgZm9yIHRoZSBmcmVlLCBwZXJwZXR1YWwgYW5kIHVucmVzdHJpY3RlZCBjb21tZXJjaWFsIGFuZCBub25jb21tZXJjaWFsIHVzZSBieSBhbnkgdGhpcmQgcGFydHkuCisKK0lmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3Igc2V0dGxlbWVudCByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50IG9yIGFueSBvdGhlciBjYXVzZSBvZiBhY3Rpb24sIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91IHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHN1Y2ggY29uZGl0aW9ucyBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBzbyBhcyB0byBzaW11bHRhbmVvdXNseSBzYXRpc2Z5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBzdWNoIG90aGVyIGNvbmRpdGlvbnMsIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHlvdSBjb3VsZCBub3Qgc2F0aXNmeSBib3RoIHRoZSBwYXRlbnQgbGljZW5zZSBhbmQgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdvdWxkIGJlIHJlcXVpcmVkIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIHlvdSBsZWFybiBvZiBhIHRoaXJkIHBhcnR5IGNsYWltIG9yIG90aGVyIHJlc3RyaWN0aW9uIHJlbGF0aW5nIHRvIGEgUHJvZ3JhbSB5b3UgaGF2ZSBhbHJlYWR5IGRpc3RyaWJ1dGVkIHlvdSBzaGFsbCBwcm9tcHRseSByZWRvIHlvdXIgUHJvZ3JhbSB0byBhZGRyZXNzIHRoZSBpc3N1ZSBhbmQgdGFrZSBhbGwgcmVhc29uYWJsZSBzdGVwcyB0byBpbmZvcm0gdGhvc2Ugd2hvIG1heSBoYXZlIHJlY2VpdmVkIHRoZSBQcm9ncmFtIGF0IGlzc3VlLiBBbiBleGFtcGxlIG9mIGFuIGFwcHJvcHJpYXRlIHJlYXNvbmFibGUgc3RlcCB0byBpbmZvcm0gd291bGQgYmUgcG9zdGluZyBhbiBhbm5vdW5jZW1lbnQgb24gYW4gYXBwcm9wcmlhdGUgd2ViIGJ1bGxldGluIGJvYXJkLgorCitUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXJlIGRlZW1lZCB0byBiZSBzZXZlcmFibGUsIGFuZCB0aGUgaW52YWxpZGl0eSBvciB1bmVuZm9yY2VhYmlsaXR5IG9mIGFueSBwcm92aXNpb24gc2hhbGwgbm90IGFmZmVjdCBvciBpbXBhaXIgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIHdoaWNoIHNoYWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gSW4gc3Vic3RpdHV0aW9uIGZvciBhbnkgcHJvdmlzaW9uIGhlbGQgdW5sYXdmdWwsIHRoZXJlIHNoYWxsIGJlIHN1YnN0aXR1dGVkIGEgcHJvdmlzaW9uIG9mIHNpbWlsYXIgaW1wb3J0IHJlZmxlY3RpbmcgdGhlIG9yaWdpbmFsIGludGVudCBvZiB0aGUgcGFydGllcyBoZXJldG8gdG8gdGhlIGV4dGVudCBwZXJtaXNzaWJsZSB1bmRlciBsYXcuCisKK1RoZSBPcmlnaW5hbCBDb250cmlidXRvciBmcm9tIHRpbWUgdG8gdGltZSBtYXkgY2hhbmdlIHRoaXMgTGljZW5zZSwgYW5kIHRoZSBhbWVuZGVkIGxpY2Vuc2Ugd2lsbCBhcHBseSB0byBhbGwgY29waWVzIG9mIHRoZSBQcm9ncmFtIGRvd25sb2FkZWQgYWZ0ZXIgdGhlIG5ldyBsaWNlbnNlIGlzIHBvc3RlZC4gVGhpcyBMaWNlbnNlIGdyYW50cyBvbmx5IHRoZSByaWdodHMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4gYW5kIHByb3ZpZGVzIHlvdSB3aXRoIG5vIGltcGxpZWQgcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yLgorCitUaGlzIExpY2Vuc2UgaXMgdGhlIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUgc3RhdGVtZW50IG9mIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyBjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YgYW5kIG1heSBub3QgYmUgYW1lbmRlZCBleGNlcHQgYnkgdGhlIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE9oaW8gYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIHByaW5jaXBsZXMgb2YgY29uZmxpY3RzIG9mIGxhdy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRGJMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWYxNDRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0RiTC0xLjAKQEAgLTAsMCArMSw1NDMgQEAKKworIyMgT0RDIE9wZW4gRGF0YWJhc2UgTGljZW5zZSAoT0RiTCkKKworIyMjIFByZWFtYmxlCisKK1RoZSBPcGVuIERhdGFiYXNlIExpY2Vuc2UgKE9EYkwpIGlzIGEgbGljZW5zZSBhZ3JlZW1lbnQgaW50ZW5kZWQgdG8KK2FsbG93IHVzZXJzIHRvIGZyZWVseSBzaGFyZSwgbW9kaWZ5LCBhbmQgdXNlIHRoaXMgRGF0YWJhc2Ugd2hpbGUKK21haW50YWluaW5nIHRoaXMgc2FtZSBmcmVlZG9tIGZvciBvdGhlcnMuIE1hbnkgZGF0YWJhc2VzIGFyZSBjb3ZlcmVkIGJ5Citjb3B5cmlnaHQsIGFuZCB0aGVyZWZvcmUgdGhpcyBkb2N1bWVudCBsaWNlbnNlcyB0aGVzZSByaWdodHMuIFNvbWUKK2p1cmlzZGljdGlvbnMsIG1haW5seSBpbiB0aGUgRXVyb3BlYW4gVW5pb24sIGhhdmUgc3BlY2lmaWMgcmlnaHRzIHRoYXQKK2NvdmVyIGRhdGFiYXNlcywgYW5kIHNvIHRoZSBPRGJMIGFkZHJlc3NlcyB0aGVzZSByaWdodHMsIHRvby4gRmluYWxseSwKK3RoZSBPRGJMIGlzIGFsc28gYW4gYWdyZWVtZW50IGluIGNvbnRyYWN0IGZvciB1c2VycyBvZiB0aGlzIERhdGFiYXNlIHRvCithY3QgaW4gY2VydGFpbiB3YXlzIGluIHJldHVybiBmb3IgYWNjZXNzaW5nIHRoaXMgRGF0YWJhc2UuCisKK0RhdGFiYXNlcyBjYW4gY29udGFpbiBhIHdpZGUgdmFyaWV0eSBvZiB0eXBlcyBvZiBjb250ZW50IChpbWFnZXMsCithdWRpb3Zpc3VhbCBtYXRlcmlhbCwgYW5kIHNvdW5kcyBhbGwgaW4gdGhlIHNhbWUgZGF0YWJhc2UsIGZvciBleGFtcGxlKSwKK2FuZCBzbyB0aGUgT0RiTCBvbmx5IGdvdmVybnMgdGhlIHJpZ2h0cyBvdmVyIHRoZSBEYXRhYmFzZSwgYW5kIG5vdCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBEYXRhYmFzZSBpbmRpdmlkdWFsbHkuIExpY2Vuc29ycyBzaG91bGQgdXNlIHRoZSBPRGJMCit0b2dldGhlciB3aXRoIGFub3RoZXIgbGljZW5zZSBmb3IgdGhlIGNvbnRlbnRzLCBpZiB0aGUgY29udGVudHMgaGF2ZSBhCitzaW5nbGUgc2V0IG9mIHJpZ2h0cyB0aGF0IHVuaWZvcm1seSBjb3ZlcnMgYWxsIG9mIHRoZSBjb250ZW50cy4gSWYgdGhlCitjb250ZW50cyBoYXZlIG11bHRpcGxlIHNldHMgb2YgZGlmZmVyZW50IHJpZ2h0cywgTGljZW5zb3JzIHNob3VsZAorZGVzY3JpYmUgd2hhdCByaWdodHMgZ292ZXJuIHdoYXQgY29udGVudHMgdG9nZXRoZXIgaW4gdGhlIGluZGl2aWR1YWwKK3JlY29yZCBvciBpbiBzb21lIG90aGVyIHdheSB0aGF0IGNsYXJpZmllcyB3aGF0IHJpZ2h0cyBhcHBseS4gCisKK1NvbWV0aW1lcyB0aGUgY29udGVudHMgb2YgYSBkYXRhYmFzZSwgb3IgdGhlIGRhdGFiYXNlIGl0c2VsZiwgY2FuIGJlCitjb3ZlcmVkIGJ5IG90aGVyIHJpZ2h0cyBub3QgYWRkcmVzc2VkIGhlcmUgKHN1Y2ggYXMgcHJpdmF0ZSBjb250cmFjdHMsCit0cmFkZSBtYXJrIG92ZXIgdGhlIG5hbWUsIG9yIHByaXZhY3kgcmlnaHRzIC8gZGF0YSBwcm90ZWN0aW9uIHJpZ2h0cworb3ZlciBpbmZvcm1hdGlvbiBpbiB0aGUgY29udGVudHMpLCBhbmQgc28geW91IGFyZSBhZHZpc2VkIHRoYXQgeW91IG1heQoraGF2ZSB0byBjb25zdWx0IG90aGVyIGRvY3VtZW50cyBvciBjbGVhciBvdGhlciByaWdodHMgYmVmb3JlIGRvaW5nCithY3Rpdml0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworLS0tLS0tCisKK1RoZSBMaWNlbnNvciAoYXMgZGVmaW5lZCBiZWxvdykgCisKK2FuZCAKKworWW91IChhcyBkZWZpbmVkIGJlbG93KSAKKworYWdyZWUgYXMgZm9sbG93czogCisKKyMjIyAxLjAgRGVmaW5pdGlvbnMgb2YgQ2FwaXRhbGlzZWQgV29yZHMKKworIkNvbGxlY3RpdmUgRGF0YWJhc2UiICYjODIxMTsgTWVhbnMgdGhpcyBEYXRhYmFzZSBpbiB1bm1vZGlmaWVkIGZvcm0gYXMgcGFydAorb2YgYSBjb2xsZWN0aW9uIG9mIGluZGVwZW5kZW50IGRhdGFiYXNlcyBpbiB0aGVtc2VsdmVzIHRoYXQgdG9nZXRoZXIgYXJlCithc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZQorRGF0YWJhc2Ugd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgRGF0YWJhc2UuCisKKyJDb252ZXkiICYjODIxMTsgQXMgYSB2ZXJiLCBtZWFucyBVc2luZyB0aGUgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwKK29yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSBpbiBhbnkgd2F5IHRoYXQgZW5hYmxlcworYSBQZXJzb24gdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcyBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlCitEYXRhYmFzZS4gIENvbnZleWluZyBkb2VzIG5vdCBpbmNsdWRlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2ggYQorY29tcHV0ZXIgbmV0d29yaywgb3IgY3JlYXRpbmcgYW5kIFVzaW5nIGEgUHJvZHVjZWQgV29yaywgd2hlcmUgbm8KK3RyYW5zZmVyIG9mIGEgY29weSBvZiB0aGUgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIG9jY3Vycy4KKyJDb250ZW50cyIgJiM4MjExOyBUaGUgY29udGVudHMgb2YgdGhpcyBEYXRhYmFzZSwgd2hpY2ggaW5jbHVkZXMgdGhlCitpbmZvcm1hdGlvbiwgaW5kZXBlbmRlbnQgd29ya3MsIG9yIG90aGVyIG1hdGVyaWFsIGNvbGxlY3RlZCBpbnRvIHRoZQorRGF0YWJhc2UuIEZvciBleGFtcGxlLCB0aGUgY29udGVudHMgb2YgdGhlIERhdGFiYXNlIGNvdWxkIGJlIGZhY3R1YWwKK2RhdGEgb3Igd29ya3Mgc3VjaCBhcyBpbWFnZXMsIGF1ZGlvdmlzdWFsIG1hdGVyaWFsLCB0ZXh0LCBvciBzb3VuZHMuCisKKyJEYXRhYmFzZSIgJiM4MjExOyBBIGNvbGxlY3Rpb24gb2YgbWF0ZXJpYWwgKHRoZSBDb250ZW50cykgYXJyYW5nZWQgaW4gYQorc3lzdGVtYXRpYyBvciBtZXRob2RpY2FsIHdheSBhbmQgaW5kaXZpZHVhbGx5IGFjY2Vzc2libGUgYnkgZWxlY3Ryb25pYworb3Igb3RoZXIgbWVhbnMgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisiRGF0YWJhc2UgRGlyZWN0aXZlIiAmIzgyMTE7IE1lYW5zIERpcmVjdGl2ZSA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbgorUGFybGlhbWVudCBhbmQgb2YgdGhlIENvdW5jaWwgb2YgMTEgTWFyY2ggMTk5NiBvbiB0aGUgbGVnYWwgcHJvdGVjdGlvbgorb2YgZGF0YWJhc2VzLCBhcyBhbWVuZGVkIG9yIHN1Y2NlZWRlZC4KKworIkRhdGFiYXNlIFJpZ2h0IiAmIzgyMTE7IE1lYW5zIHJpZ2h0cyByZXN1bHRpbmcgZnJvbSB0aGUgQ2hhcHRlciBJSUkgKCJzdWkKK2dlbmVyaXMiKSByaWdodHMgaW4gdGhlIERhdGFiYXNlIERpcmVjdGl2ZSAoYXMgYW1lbmRlZCBhbmQgYXMgdHJhbnNwb3NlZAorYnkgbWVtYmVyIHN0YXRlcyksIHdoaWNoIGluY2x1ZGVzIHRoZSBFeHRyYWN0aW9uIGFuZCBSZS11dGlsaXNhdGlvbiBvZgordGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMsIGFzIHdlbGwgYXMgYW55IHNpbWlsYXIKK3JpZ2h0cyBhdmFpbGFibGUgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiB1bmRlciBTZWN0aW9uIDEwLjQuIAorCisiRGVyaXZhdGl2ZSBEYXRhYmFzZSIgJiM4MjExOyBNZWFucyBhIGRhdGFiYXNlIGJhc2VkIHVwb24gdGhlIERhdGFiYXNlLCBhbmQKK2luY2x1ZGVzIGFueSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwgYXJyYW5nZW1lbnQsIG1vZGlmaWNhdGlvbiwgb3IgYW55CitvdGhlciBhbHRlcmF0aW9uIG9mIHRoZSBEYXRhYmFzZSBvciBvZiBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cy4gVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBFeHRyYWN0aW5nIG9yCitSZS11dGlsaXNpbmcgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgaW4gYSBuZXcKK0RhdGFiYXNlLgorCisiRXh0cmFjdGlvbiIgJiM4MjExOyBNZWFucyB0aGUgcGVybWFuZW50IG9yIHRlbXBvcmFyeSB0cmFuc2ZlciBvZiBhbGwgb3IgYQorU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgdG8gYW5vdGhlciBtZWRpdW0gYnkgYW55IG1lYW5zIG9yIGluCithbnkgZm9ybS4KKworIkxpY2Vuc2UiICYjODIxMTsgTWVhbnMgdGhpcyBsaWNlbnNlIGFncmVlbWVudCBhbmQgaXMgYm90aCBhIGxpY2Vuc2Ugb2YgcmlnaHRzCitzdWNoIGFzIGNvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzIGFuZCBhbiBhZ3JlZW1lbnQgaW4gY29udHJhY3QuCisKKyJMaWNlbnNvciIgJiM4MjExOyBNZWFucyB0aGUgUGVyc29uIHRoYXQgb2ZmZXJzIHRoZSBEYXRhYmFzZSB1bmRlciB0aGUgdGVybXMKK29mIHRoaXMgTGljZW5zZS4gCisKKyJQZXJzb24iICYjODIxMTsgTWVhbnMgYSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiBvciBhIGJvZHkgb2YgcGVyc29ucworY29ycG9yYXRlIG9yIGluY29ycG9yYXRlLgorCisiUHJvZHVjZWQgV29yayIgJiM4MjExOyAgYSB3b3JrIChzdWNoIGFzIGFuIGltYWdlLCBhdWRpb3Zpc3VhbCBtYXRlcmlhbCwgdGV4dCwKK29yIHNvdW5kcykgcmVzdWx0aW5nIGZyb20gdXNpbmcgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUKK0NvbnRlbnRzICh2aWEgYSBzZWFyY2ggb3Igb3RoZXIgcXVlcnkpIGZyb20gdGhpcyBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlCitEYXRhYmFzZSwgb3IgdGhpcyBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZS4gIAorCisiUHVibGljbHkiICYjODIxMTsgbWVhbnMgdG8gUGVyc29ucyBvdGhlciB0aGFuIFlvdSBvciB1bmRlciBZb3VyIGNvbnRyb2wgYnkKK2VpdGhlciBtb3JlIHRoYW4gNTAlIG93bmVyc2hpcCBvciBieSB0aGUgcG93ZXIgdG8gZGlyZWN0IHRoZWlyCithY3Rpdml0aWVzIChzdWNoIGFzIGNvbnRyYWN0aW5nIHdpdGggYW4gaW5kZXBlbmRlbnQgY29uc3VsdGFudCkuIAorCisiUmUtdXRpbGlzYXRpb24iICYjODIxMTsgbWVhbnMgYW55IGZvcm0gb2YgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGFsbAorb3IgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZSBDb250ZW50cyBieSB0aGUgZGlzdHJpYnV0aW9uIG9mIGNvcGllcywgYnkKK3JlbnRpbmcsIGJ5IG9ubGluZSBvciBvdGhlciBmb3JtcyBvZiB0cmFuc21pc3Npb24uCisKKyJTdWJzdGFudGlhbCIgJiM4MjExOyBNZWFucyBzdWJzdGFudGlhbCBpbiB0ZXJtcyBvZiBxdWFudGl0eSBvciBxdWFsaXR5IG9yIGEKK2NvbWJpbmF0aW9uIG9mIGJvdGguIFRoZSByZXBlYXRlZCBhbmQgc3lzdGVtYXRpYyBFeHRyYWN0aW9uIG9yCitSZS11dGlsaXNhdGlvbiBvZiBpbnN1YnN0YW50aWFsIHBhcnRzIG9mIHRoZSBDb250ZW50cyBtYXkgYW1vdW50IHRvIHRoZQorRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBvZiBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLgorCisiVXNlIiAmIzgyMTE7IEFzIGEgdmVyYiwgbWVhbnMgZG9pbmcgYW55IGFjdCB0aGF0IGlzIHJlc3RyaWN0ZWQgYnkgY29weXJpZ2h0CitvciBEYXRhYmFzZSBSaWdodHMgd2hldGhlciBpbiB0aGUgb3JpZ2luYWwgbWVkaXVtIG9yIGFueSBvdGhlcjsgYW5kCitpbmNsdWRlcyB3aXRob3V0IGxpbWl0YXRpb24gZGlzdHJpYnV0aW5nLCBjb3B5aW5nLCBwdWJsaWNseSBwZXJmb3JtaW5nLAorcHVibGljbHkgZGlzcGxheWluZywgYW5kIHByZXBhcmluZyBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEYXRhYmFzZSwgYXMKK3dlbGwgYXMgbW9kaWZ5aW5nIHRoZSBEYXRhYmFzZSBhcyBtYXkgYmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIHVzZSBpdAoraW4gYSBkaWZmZXJlbnQgbW9kZSBvciBmb3JtYXQuIAorCisiWW91IiAmIzgyMTE7IE1lYW5zIGEgUGVyc29uIGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdAorcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUKK0RhdGFiYXNlLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0bworZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEgcHJldmlvdXMgdmlvbGF0aW9uLgorCitXb3JkcyBpbiB0aGUgc2luZ3VsYXIgaW5jbHVkZSB0aGUgcGx1cmFsIGFuZCB2aWNlIHZlcnNhLgorCisjIyMgMi4wIFdoYXQgdGhpcyBMaWNlbnNlIGNvdmVycworCisyLjEuIExlZ2FsIGVmZmVjdCBvZiB0aGlzIGRvY3VtZW50LiBUaGlzIExpY2Vuc2UgaXM6CisKKyAgYS4gQSBsaWNlbnNlIG9mIGFwcGxpY2FibGUgY29weXJpZ2h0IGFuZCBuZWlnaGJvdXJpbmcgcmlnaHRzOworCisgIGIuIEEgbGljZW5zZSBvZiB0aGUgRGF0YWJhc2UgUmlnaHQ7IGFuZAorCisgIGMuIEFuIGFncmVlbWVudCBpbiBjb250cmFjdCBiZXR3ZWVuIFlvdSBhbmQgdGhlIExpY2Vuc29yLgorCisyLjIgTGVnYWwgcmlnaHRzIGNvdmVyZWQuIFRoaXMgTGljZW5zZSBjb3ZlcnMgdGhlIGxlZ2FsIHJpZ2h0cyBpbiB0aGUKK0RhdGFiYXNlLCBpbmNsdWRpbmc6CisKKyAgYS4gQ29weXJpZ2h0LiBBbnkgY29weXJpZ2h0IG9yIG5laWdoYm91cmluZyByaWdodHMgaW4gdGhlIERhdGFiYXNlLgorICBUaGUgY29weXJpZ2h0IGxpY2Vuc2VkIGluY2x1ZGVzIGFueSBpbmRpdmlkdWFsIGVsZW1lbnRzIG9mIHRoZQorICBEYXRhYmFzZSwgYnV0IGRvZXMgbm90IGNvdmVyIHRoZSBjb3B5cmlnaHQgb3ZlciB0aGUgQ29udGVudHMKKyAgaW5kZXBlbmRlbnQgb2YgdGhpcyBEYXRhYmFzZS4gU2VlIFNlY3Rpb24gMi40IGZvciBkZXRhaWxzLiBDb3B5cmlnaHQKKyAgbGF3IHZhcmllcyBiZXR3ZWVuIGp1cmlzZGljdGlvbnMsIGJ1dCBpcyBsaWtlbHkgdG8gY292ZXI6IHRoZSBEYXRhYmFzZQorICBtb2RlbCBvciBzY2hlbWEsIHdoaWNoIGlzIHRoZSBzdHJ1Y3R1cmUsIGFycmFuZ2VtZW50LCBhbmQgb3JnYW5pc2F0aW9uCisgIG9mIHRoZSBEYXRhYmFzZSwgYW5kIGNhbiBhbHNvIGluY2x1ZGUgdGhlIERhdGFiYXNlIHRhYmxlcyBhbmQgdGFibGUKKyAgaW5kZXhlczsgdGhlIGRhdGEgZW50cnkgYW5kIG91dHB1dCBzaGVldHM7IGFuZCB0aGUgRmllbGQgbmFtZXMgb2YKKyAgQ29udGVudHMgc3RvcmVkIGluIHRoZSBEYXRhYmFzZTsKKworICBiLiBEYXRhYmFzZSBSaWdodHMuIERhdGFiYXNlIFJpZ2h0cyBvbmx5IGV4dGVuZCB0byB0aGUgRXh0cmFjdGlvbiBhbmQKKyAgUmUtdXRpbGlzYXRpb24gb2YgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMuCisgIERhdGFiYXNlIFJpZ2h0cyBjYW4gYXBwbHkgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGNvcHlyaWdodCBvdmVyIHRoZQorICBEYXRhYmFzZS4gRGF0YWJhc2UgUmlnaHRzIGNhbiBhbHNvIGFwcGx5IHdoZW4gdGhlIENvbnRlbnRzIGFyZSByZW1vdmVkCisgIGZyb20gdGhlIERhdGFiYXNlIGFuZCBhcmUgc2VsZWN0ZWQgYW5kIGFycmFuZ2VkIGluIGEgd2F5IHRoYXQgd291bGQKKyAgbm90IGluZnJpbmdlIGFueSBhcHBsaWNhYmxlIGNvcHlyaWdodDsgYW5kCisKKyAgYy4gQ29udHJhY3QuIFRoaXMgaXMgYW4gYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCB0aGUgTGljZW5zb3IgZm9yCisgIGFjY2VzcyB0byB0aGUgRGF0YWJhc2UuIEluIHJldHVybiB5b3UgYWdyZWUgdG8gY2VydGFpbiBjb25kaXRpb25zIG9mCisgIHVzZSBvbiB0aGlzIGFjY2VzcyBhcyBvdXRsaW5lZCBpbiB0aGlzIExpY2Vuc2UuIAorCisyLjMgUmlnaHRzIG5vdCBjb3ZlcmVkLiAKKworICBhLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gY29tcHV0ZXIgcHJvZ3JhbXMgdXNlZCBpbiB0aGUgbWFraW5nCisgIG9yIG9wZXJhdGlvbiBvZiB0aGUgRGF0YWJhc2U7IAorCisgIGIuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgcGF0ZW50cyBvdmVyIHRoZSBDb250ZW50cyBvciB0aGUKKyAgRGF0YWJhc2U7IGFuZAorCisgIGMuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb3ZlciBhbnkgdHJhZGVtYXJrcyBhc3NvY2lhdGVkIHdpdGggdGhlCisgIERhdGFiYXNlLiAKKworMi40IFJlbGF0aW9uc2hpcCB0byBDb250ZW50cyBpbiB0aGUgRGF0YWJhc2UuIFRoZSBpbmRpdmlkdWFsIGl0ZW1zIG9mCit0aGUgQ29udGVudHMgY29udGFpbmVkIGluIHRoaXMgRGF0YWJhc2UgbWF5IGJlIGNvdmVyZWQgYnkgb3RoZXIgcmlnaHRzLAoraW5jbHVkaW5nIGNvcHlyaWdodCwgcGF0ZW50LCBkYXRhIHByb3RlY3Rpb24sIHByaXZhY3ksIG9yIHBlcnNvbmFsaXR5CityaWdodHMsIGFuZCB0aGlzIExpY2Vuc2UgZG9lcyBub3QgY292ZXIgYW55IHJpZ2h0cyAob3RoZXIgdGhhbiBEYXRhYmFzZQorUmlnaHRzIG9yIGluIGNvbnRyYWN0KSBpbiBpbmRpdmlkdWFsIENvbnRlbnRzIGNvbnRhaW5lZCBpbiB0aGUgRGF0YWJhc2UuCitGb3IgZXhhbXBsZSwgaWYgdXNlZCBvbiBhIERhdGFiYXNlIG9mIGltYWdlcyAodGhlIENvbnRlbnRzKSwgdGhpcworTGljZW5zZSB3b3VsZCBub3QgYXBwbHkgdG8gY29weXJpZ2h0IG92ZXIgaW5kaXZpZHVhbCBpbWFnZXMsIHdoaWNoIGNvdWxkCitoYXZlIHRoZWlyIG93biBzZXBhcmF0ZSBsaWNlbnNlcywgb3Igb25lIHNpbmdsZSBsaWNlbnNlIGNvdmVyaW5nIGFsbCBvZgordGhlIHJpZ2h0cyBvdmVyIHRoZSBpbWFnZXMuICAKKworIyMjIDMuMCBSaWdodHMgZ3JhbnRlZAorCiszLjEgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgTGljZW5zb3IKK2dyYW50cyB0byBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgdGVybWluYWJsZSAoYnV0Citvbmx5IHVuZGVyIFNlY3Rpb24gOSkgbGljZW5zZSB0byBVc2UgdGhlIERhdGFiYXNlIGZvciB0aGUgZHVyYXRpb24gb2YKK2FueSBhcHBsaWNhYmxlIGNvcHlyaWdodCBhbmQgRGF0YWJhc2UgUmlnaHRzLiBUaGVzZSByaWdodHMgZXhwbGljaXRseQoraW5jbHVkZSBjb21tZXJjaWFsIHVzZSwgYW5kIGRvIG5vdCBleGNsdWRlIGFueSBmaWVsZCBvZiBlbmRlYXZvdXIuIFRvCit0aGUgZXh0ZW50IHBvc3NpYmxlIGluIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24sIHRoZXNlIHJpZ2h0cyBtYXkgYmUKK2V4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgY3JlYXRlZCBpbiB0aGUKK2Z1dHVyZS4gCisKK1RoZSByaWdodHMgZ3JhbnRlZCBjb3ZlciwgZm9yIGV4YW1wbGU6CisKKyAgYS4gRXh0cmFjdGlvbiBhbmQgUmUtdXRpbGlzYXRpb24gb2YgdGhlIHdob2xlIG9yIGEgU3Vic3RhbnRpYWwgcGFydCBvZgorICB0aGUgQ29udGVudHM7CisKKyAgYi4gQ3JlYXRpb24gb2YgRGVyaXZhdGl2ZSBEYXRhYmFzZXM7CisKKyAgYy4gQ3JlYXRpb24gb2YgQ29sbGVjdGl2ZSBEYXRhYmFzZXM7CisKKyAgZC4gQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCByZXByb2R1Y3Rpb25zIGJ5IGFueSBtZWFucyBhbmQKKyAgaW4gYW55IGZvcm0sIGluIHdob2xlIG9yIGluIHBhcnQsIGluY2x1ZGluZyBvZiBhbnkgRGVyaXZhdGl2ZQorICBEYXRhYmFzZXMgb3IgYXMgYSBwYXJ0IG9mIENvbGxlY3RpdmUgRGF0YWJhc2VzOyBhbmQKKworICBlLiBEaXN0cmlidXRpb24sIGNvbW11bmljYXRpb24sIGRpc3BsYXksIGxlbmRpbmcsIG1ha2luZyBhdmFpbGFibGUsIG9yCisgIHBlcmZvcm1hbmNlIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIGFuZCBpbiBhbnkgZm9ybSwgaW4gd2hvbGUgb3IgaW4KKyAgcGFydCwgaW5jbHVkaW5nIG9mIGFueSBEZXJpdmF0aXZlIERhdGFiYXNlIG9yIGFzIGEgcGFydCBvZiBDb2xsZWN0aXZlCisgIERhdGFiYXNlcy4KKworMy4yIENvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidDoKKworICBhLiBOb24td2FpdmFibGUgY29tcHVsc29yeSBsaWNlbnNlIHNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4KKyAgd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvcgorICBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzCisgIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdQorICBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworCisgIGIuIFdhaXZhYmxlIGNvbXB1bHNvcnkgbGljZW5zZSBzY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluCisgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlCisgIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mCisgIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKKworICBjLiBWb2x1bnRhcnkgbGljZW5zZSBzY2hlbWVzLiBUaGUgTGljZW5zb3Igd2FpdmVzIHRoZSByaWdodCB0byBjb2xsZWN0CisgIHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNvciBpcworICBhIG1lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcKKyAgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMKKyAgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuMyBUaGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50IHRlcm1zLCBvciB0byBzdG9wCitkaXN0cmlidXRpbmcgb3IgbWFraW5nIGF2YWlsYWJsZSB0aGUgRGF0YWJhc2UsIGlzIHJlc2VydmVkLiBOb3RlIHRoYXQKK3RoaXMgRGF0YWJhc2UgbWF5IGJlIG11bHRpcGxlLWxpY2Vuc2VkLCBhbmQgc28gWW91IG1heSBoYXZlIHRoZSBjaG9pY2UKK29mIHVzaW5nIGFsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciB0aGlzIERhdGFiYXNlLiBTdWJqZWN0IHRvIFNlY3Rpb24KKzEwLjQsIGFsbCBvdGhlciByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSByZXNlcnZlZC4KKworIyMjIDQuMCBDb25kaXRpb25zIG9mIFVzZQorCis0LjEgVGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBhcmUgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0bworWW91ciBjb21wbHlpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgb2YgdXNlLiBUaGVzZSBhcmUgaW1wb3J0YW50Citjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgYW5kIGlmIFlvdSBmYWlsIHRvIGZvbGxvdyB0aGVtLCBZb3Ugd2lsbCBiZQoraW4gbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcy4KKworNC4yIE5vdGljZXMuIElmIFlvdSBQdWJsaWNseSBDb252ZXkgdGhpcyBEYXRhYmFzZSwgYW55IERlcml2YXRpdmUKK0RhdGFiYXNlLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UsIHRoZW4gWW91CittdXN0OiAKKworICBhLiBEbyBzbyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYW5vdGhlciBsaWNlbnNlCisgIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDQuNDsKKworICBiLiBJbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgKG9yLCBhcyBhcHBsaWNhYmxlLCBhIGxpY2Vuc2UKKyAgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNC40KSBvciBpdHMgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpCisgIHdpdGggdGhlIERhdGFiYXNlIG9yIERlcml2YXRpdmUgRGF0YWJhc2UsIGluY2x1ZGluZyBib3RoIGluIHRoZQorICBEYXRhYmFzZSBvciBEZXJpdmF0aXZlIERhdGFiYXNlIGFuZCBpbiBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbjsgYW5kCisKKyAgYy4gS2VlcCBpbnRhY3QgYW55IGNvcHlyaWdodCBvciBEYXRhYmFzZSBSaWdodCBub3RpY2VzIGFuZCBub3RpY2VzCisgIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLgorCisgIGQuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgdGhlIHJlcXVpcmVkIG5vdGljZXMgaW4gYSBwYXJ0aWN1bGFyCisgIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSB0aGUgbm90aWNlcyBpbiBhCisgIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSB1c2VycyB3b3VsZCBiZSBsaWtlbHkgdG8KKyAgbG9vayBmb3IgaXQuCisKKzQuMyBOb3RpY2UgZm9yIHVzaW5nIG91dHB1dCAoQ29udGVudHMpLiBDcmVhdGluZyBhbmQgVXNpbmcgYSBQcm9kdWNlZAorV29yayBkb2VzIG5vdCByZXF1aXJlIHRoZSBub3RpY2UgaW4gU2VjdGlvbiA0LjIuIEhvd2V2ZXIsIGlmIHlvdQorUHVibGljbHkgVXNlIGEgUHJvZHVjZWQgV29yaywgWW91IG11c3QgaW5jbHVkZSBhIG5vdGljZSBhc3NvY2lhdGVkIHdpdGgKK3RoZSBQcm9kdWNlZCBXb3JrIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBtYWtlIGFueSBQZXJzb24gdGhhdCB1c2VzLAordmlld3MsIGFjY2Vzc2VzLCBpbnRlcmFjdHMgd2l0aCwgb3IgaXMgb3RoZXJ3aXNlIGV4cG9zZWQgdG8gdGhlIFByb2R1Y2VkCitXb3JrIGF3YXJlIHRoYXQgQ29udGVudCB3YXMgb2J0YWluZWQgZnJvbSB0aGUgRGF0YWJhc2UsIERlcml2YXRpdmUKK0RhdGFiYXNlLCBvciB0aGUgRGF0YWJhc2UgYXMgcGFydCBvZiBhIENvbGxlY3RpdmUgRGF0YWJhc2UsIGFuZCB0aGF0IGl0CitpcyBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgIGEuIEV4YW1wbGUgbm90aWNlLiBUaGUgZm9sbG93aW5nIHRleHQgd2lsbCBzYXRpc2Z5IG5vdGljZSB1bmRlcgorICBTZWN0aW9uIDQuMzoKKworICAgICAgICBDb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIERBVEFCQVNFIE5BTUUsIHdoaWNoIGlzIG1hZGUgYXZhaWxhYmxlCisgICAgICAgIGhlcmUgdW5kZXIgdGhlIE9wZW4gRGF0YWJhc2UgTGljZW5zZSAoT0RiTCkuCisKK0RBVEFCQVNFIE5BTUUgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggdGhlIG5hbWUgb2YgdGhlIERhdGFiYXNlIGFuZCBhCitoeXBlcmxpbmsgdG8gdGhlIFVSSSBvZiB0aGUgRGF0YWJhc2UuICJPcGVuIERhdGFiYXNlIExpY2Vuc2UiIHNob3VsZAorY29udGFpbiBhIGh5cGVybGluayB0byB0aGUgVVJJIG9mIHRoZSB0ZXh0IG9mIHRoaXMgTGljZW5zZS4gSWYKK2h5cGVybGlua3MgYXJlIG5vdCBwb3NzaWJsZSwgWW91IHNob3VsZCBpbmNsdWRlIHRoZSBwbGFpbiB0ZXh0IG9mIHRoZQorcmVxdWlyZWQgVVJJYHMgd2l0aCB0aGUgYWJvdmUgbm90aWNlLgorIAorNC40IFNoYXJlIGFsaWtlLiAKKworICBhLiBBbnkgRGVyaXZhdGl2ZSBEYXRhYmFzZSB0aGF0IFlvdSBQdWJsaWNseSBVc2UgbXVzdCBiZSBvbmx5IHVuZGVyCisgIHRoZSB0ZXJtcyBvZjogCisKKyAgICBpLiBUaGlzIExpY2Vuc2U7CisKKyAgICBpaS4gQSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGlzCisgICAgICBMaWNlbnNlOyBvcgorCisgICAgaWlpLiBBIGNvbXBhdGlibGUgbGljZW5zZS4gCisKKyAgSWYgWW91IGxpY2Vuc2UgdGhlIERlcml2YXRpdmUgRGF0YWJhc2UgdW5kZXIgb25lIG9mIHRoZSBsaWNlbnNlcworICBtZW50aW9uZWQgaW4gKGlpaSksIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UuIAorCisgIGIuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBFeHRyYWN0aW9uIG9yIFJlLXV0aWxpc2F0aW9uIG9mIHRoZQorICB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzIGludG8gYSBuZXcgZGF0YWJhc2UgaXMgYQorICBEZXJpdmF0aXZlIERhdGFiYXNlIGFuZCBtdXN0IGNvbXBseSB3aXRoIFNlY3Rpb24gNC40LiAKKworICBjLiBEZXJpdmF0aXZlIERhdGFiYXNlcyBhbmQgUHJvZHVjZWQgV29ya3MuICBBIERlcml2YXRpdmUgRGF0YWJhc2UgaXMKKyAgUHVibGljbHkgVXNlZCBhbmQgc28gbXVzdCBjb21wbHkgd2l0aCBTZWN0aW9uIDQuNC4gaWYgYSBQcm9kdWNlZCBXb3JrCisgIGNyZWF0ZWQgZnJvbSB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpcyBQdWJsaWNseSBVc2VkLgorCisgIGQuIFNoYXJlIEFsaWtlIGFuZCBhZGRpdGlvbmFsIENvbnRlbnRzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwKKyAgWW91IG11c3Qgbm90IGFkZCBDb250ZW50cyB0byBEZXJpdmF0aXZlIERhdGFiYXNlcyB1bmRlciBTZWN0aW9uIDQuNCBhCisgIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIAorCisgIGUuIENvbXBhdGlibGUgbGljZW5zZXMuIExpY2Vuc29ycyBtYXkgYXV0aG9yaXNlIGEgcHJveHkgdG8gZGV0ZXJtaW5lCisgIGNvbXBhdGlibGUgbGljZW5zZXMgdW5kZXIgU2VjdGlvbiA0LjQgYSBpaWkuIElmIHRoZXkgZG8gc28sIHRoZQorICBhdXRob3Jpc2VkIHByb3h5YHMgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgY29tcGF0aWJsZQorICBsaWNlbnNlIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byB1c2UgdGhlIGNvbXBhdGlibGUgbGljZW5zZS4KKworCis0LjUgTGltaXRzIG9mIFNoYXJlIEFsaWtlLiAgVGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDQuNCBkbyBub3QgYXBwbHkKK2luIHRoZSBmb2xsb3dpbmc6CisKKyAgYS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGxpY2Vuc2UKKyAgQ29sbGVjdGl2ZSBEYXRhYmFzZXMgdW5kZXIgdGhpcyBMaWNlbnNlIGlmIFlvdSBpbmNvcnBvcmF0ZSB0aGlzCisgIERhdGFiYXNlIG9yIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbiB0aGUgY29sbGVjdGlvbiwgYnV0IHRoaXMgTGljZW5zZQorICBzdGlsbCBhcHBsaWVzIHRvIHRoaXMgRGF0YWJhc2Ugb3IgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGFzIGEgcGFydCBvZgorICB0aGUgQ29sbGVjdGl2ZSBEYXRhYmFzZTsgCisKKyAgYi4gVXNpbmcgdGhpcyBEYXRhYmFzZSwgYSBEZXJpdmF0aXZlIERhdGFiYXNlLCBvciB0aGlzIERhdGFiYXNlIGFzCisgIHBhcnQgb2YgYSBDb2xsZWN0aXZlIERhdGFiYXNlIHRvIGNyZWF0ZSBhIFByb2R1Y2VkIFdvcmsgZG9lcyBub3QKKyAgY3JlYXRlIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBmb3IgcHVycG9zZXMgb2YgIFNlY3Rpb24gNC40OyBhbmQKKworICBjLiBVc2Ugb2YgYSBEZXJpdmF0aXZlIERhdGFiYXNlIGludGVybmFsbHkgd2l0aGluIGFuIG9yZ2FuaXNhdGlvbiBpcworICBub3QgdG8gdGhlIHB1YmxpYyBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJlcXVpcmVtZW50cworICBvZiBTZWN0aW9uIDQuNC4KKworNC42IEFjY2VzcyB0byBEZXJpdmF0aXZlIERhdGFiYXNlcy4gSWYgWW91IFB1YmxpY2x5IFVzZSBhIERlcml2YXRpdmUKK0RhdGFiYXNlIG9yIGEgUHJvZHVjZWQgV29yayBmcm9tIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgWW91IG11c3QgYWxzbworb2ZmZXIgdG8gcmVjaXBpZW50cyBvZiB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZSBvciBQcm9kdWNlZCBXb3JrIGEgY29weQoraW4gYSBtYWNoaW5lIHJlYWRhYmxlIGZvcm0gb2Y6CisKKyAgYS4gVGhlIGVudGlyZSBEZXJpdmF0aXZlIERhdGFiYXNlOyBvcgorCisgIGIuIEEgZmlsZSBjb250YWluaW5nIGFsbCBvZiB0aGUgYWx0ZXJhdGlvbnMgbWFkZSB0byB0aGUgRGF0YWJhc2Ugb3IKKyAgdGhlIG1ldGhvZCBvZiBtYWtpbmcgdGhlIGFsdGVyYXRpb25zIHRvIHRoZSBEYXRhYmFzZSAoc3VjaCBhcyBhbgorICBhbGdvcml0aG0pLCBpbmNsdWRpbmcgYW55IGFkZGl0aW9uYWwgQ29udGVudHMsIHRoYXQgbWFrZSB1cCBhbGwgdGhlCisgIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIERhdGFiYXNlIGFuZCB0aGUgRGVyaXZhdGl2ZSBEYXRhYmFzZS4KKworVGhlIERlcml2YXRpdmUgRGF0YWJhc2UgKHVuZGVyIGEuKSBvciBhbHRlcmF0aW9uIGZpbGUgKHVuZGVyIGIuKSBtdXN0IGJlCithdmFpbGFibGUgYXQgbm8gbW9yZSB0aGFuIGEgcmVhc29uYWJsZSBwcm9kdWN0aW9uIGNvc3QgZm9yIHBoeXNpY2FsCitkaXN0cmlidXRpb25zIGFuZCBmcmVlIG9mIGNoYXJnZSBpZiBkaXN0cmlidXRlZCBvdmVyIHRoZSBpbnRlcm5ldC4KKworNC43IFRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgYW5kIGFkZGl0aW9uYWwgdGVybXMKKworICBhLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWxsb3cgWW91IHRvIGltcG9zZSAoZXhjZXB0IHN1YmplY3QgdG8KKyAgU2VjdGlvbiA0LjcgYi4pICBhbnkgdGVybXMgb3IgYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlCisgIERhdGFiYXNlLCBhIERlcml2YXRpdmUgRGF0YWJhc2UsIG9yIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YKKyAgdGhlIENvbnRlbnRzIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgb3IgYW55CisgIHJpZ2h0cyBncmFudGVkIHVuZGVyIGl0LCBvciBoYXZlIHRoZSBlZmZlY3Qgb3IgaW50ZW50IG9mIHJlc3RyaWN0aW5nCisgIHRoZSBhYmlsaXR5IG9mIGFueSBwZXJzb24gdG8gZXhlcmNpc2UgdGhvc2UgcmlnaHRzLgorCisgIGIuIFBhcmFsbGVsIGRpc3RyaWJ1dGlvbi4gWW91IG1heSBpbXBvc2UgdGVybXMgb3IgdGVjaG5vbG9naWNhbAorICBtZWFzdXJlcyBvbiB0aGUgRGF0YWJhc2UsIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSwgb3IgdGhlIHdob2xlIG9yIGEKKyAgU3Vic3RhbnRpYWwgcGFydCBvZiB0aGUgQ29udGVudHMgKGEgIlJlc3RyaWN0ZWQgRGF0YWJhc2UiKSBpbgorICBjb250cmF2ZW50aW9uIG9mIFNlY3Rpb24gNC43NCBhLiBvbmx5IGlmIFlvdSBhbHNvIG1ha2UgYSBjb3B5IG9mIHRoZQorICBEYXRhYmFzZSBvciBhIERlcml2YXRpdmUgRGF0YWJhc2UgYXZhaWxhYmxlIHRvIHRoZSByZWNpcGllbnQgb2YgdGhlCisgIFJlc3RyaWN0ZWQgRGF0YWJhc2U6CisKKyAgICBpLiBUaGF0IGlzIGF2YWlsYWJsZSB3aXRob3V0IGFkZGl0aW9uYWwgZmVlOworCisgICAgaWkuIFRoYXQgaXMgYXZhaWxhYmxlIGluIGEgbWVkaXVtIHRoYXQgZG9lcyBub3QgYWx0ZXIgb3IgcmVzdHJpY3QKKyAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBvciBhbnkgcmlnaHRzIGdyYW50ZWQgdW5kZXIgaXQsIG9yIGhhdmUKKyAgICB0aGUgZWZmZWN0IG9yIGludGVudCBvZiByZXN0cmljdGluZyB0aGUgYWJpbGl0eSBvZiBhbnkgcGVyc29uIHRvCisgICAgZXhlcmNpc2UgdGhvc2UgcmlnaHRzIChhbiAiVW5yZXN0cmljdGVkIERhdGFiYXNlIik7IGFuZAorCisgICAgaWlpLiBUaGUgVW5yZXN0cmljdGVkIERhdGFiYXNlIGlzIGF0IGxlYXN0IGFzIGFjY2Vzc2libGUgdG8gdGhlCisgICAgcmVjaXBpZW50IGFzIGEgcHJhY3RpY2FsIG1hdHRlciBhcyB0aGUgUmVzdHJpY3RlZCBEYXRhYmFzZS4KKworICBjLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgWW91IG1heSBwbGFjZSB0aGlzIERhdGFiYXNlIG9yIGEKKyAgRGVyaXZhdGl2ZSBEYXRhYmFzZSBpbiBhbiBhdXRoZW50aWNhdGVkIGVudmlyb25tZW50LCBiZWhpbmQgYQorICBwYXNzd29yZCwgb3Igd2l0aGluIGEgc2ltaWxhciBhY2Nlc3MgY29udHJvbCBzY2hlbWUgcHJvdmlkZWQgdGhhdCBZb3UKKyAgZG8gbm90IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYW55IHJpZ2h0cworICBncmFudGVkIHVuZGVyIGl0IG9yIGhhdmUgdGhlIGVmZmVjdCBvciBpbnRlbnQgb2YgcmVzdHJpY3RpbmcgdGhlCisgIGFiaWxpdHkgb2YgYW55IHBlcnNvbiB0byBleGVyY2lzZSB0aG9zZSByaWdodHMuIAorCis0LjggTGljZW5zaW5nIG9mIG90aGVycy4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgRGF0YWJhc2UuIEVhY2ggdGltZQorWW91IGNvbW11bmljYXRlIHRoZSBEYXRhYmFzZSwgdGhlIHdob2xlIG9yIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlCitDb250ZW50cywgb3IgYW55IERlcml2YXRpdmUgRGF0YWJhc2UgdG8gYW55b25lIGVsc2UgaW4gYW55IHdheSwgdGhlCitMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIERhdGFiYXNlIG9uIHRoZSBzYW1lCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGlzIExpY2Vuc2UuIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvcgorZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZSwgYnV0IFlvdSBtYXkKK2VuZm9yY2UgYW55IHJpZ2h0cyB0aGF0IFlvdSBoYXZlIG92ZXIgYSBEZXJpdmF0aXZlIERhdGFiYXNlLiBZb3UgYXJlCitzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBtb2RpZmljYXRpb25zIG9mIGEgRGVyaXZhdGl2ZSBEYXRhYmFzZSBtYWRlCitieSBZb3Ugb3IgYW5vdGhlciBQZXJzb24gYXQgWW91ciBkaXJlY3Rpb24uIFlvdSBtYXkgbm90IGltcG9zZSBhbnkKK2Z1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQKK3VuZGVyIHRoaXMgTGljZW5zZS4KKworIyMjIDUuMCBNb3JhbCByaWdodHMKKworNS4xIE1vcmFsIHJpZ2h0cy4gVGhpcyBzZWN0aW9uIGNvdmVycyBtb3JhbCByaWdodHMsIGluY2x1ZGluZyBhbnkgcmlnaHRzCit0byBiZSBpZGVudGlmaWVkIGFzIHRoZSBhdXRob3Igb2YgdGhlIERhdGFiYXNlIG9yIHRvIG9iamVjdCB0byB0cmVhdG1lbnQKK3RoYXQgd291bGQgb3RoZXJ3aXNlIHByZWp1ZGljZSB0aGUgYXV0aG9yYHMgaG9ub3VyIGFuZCByZXB1dGF0aW9uLCBvcgorYW55IG90aGVyIGRlcm9nYXRvcnkgdHJlYXRtZW50OgorCisgIGEuIEZvciBqdXJpc2RpY3Rpb25zIGFsbG93aW5nIHdhaXZlciBvZiBtb3JhbCByaWdodHMsIExpY2Vuc29yIHdhaXZlcworICBhbGwgbW9yYWwgcmlnaHRzIHRoYXQgTGljZW5zb3IgbWF5IGhhdmUgaW4gdGhlIERhdGFiYXNlIHRvIHRoZSBmdWxsZXN0CisgIGV4dGVudCBwb3NzaWJsZSBieSB0aGUgbGF3IG9mIHRoZSByZWxldmFudCBqdXJpc2RpY3Rpb24gdW5kZXIgU2VjdGlvbgorICAxMC40OyAKKworICBiLiBJZiB3YWl2ZXIgb2YgbW9yYWwgcmlnaHRzIHVuZGVyIFNlY3Rpb24gNS4xIGEgaW4gdGhlIHJlbGV2YW50CisgIGp1cmlzZGljdGlvbiBpcyBub3QgcG9zc2libGUsIExpY2Vuc29yIGFncmVlcyBub3QgdG8gYXNzZXJ0IGFueSBtb3JhbAorICByaWdodHMgb3ZlciB0aGUgRGF0YWJhc2UgYW5kIHdhaXZlcyBhbGwgY2xhaW1zIGluIG1vcmFsIHJpZ2h0cyB0byB0aGUKKyAgZnVsbGVzdCBleHRlbnQgcG9zc2libGUgYnkgdGhlIGxhdyBvZiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIHVuZGVyCisgIFNlY3Rpb24gMTAuNDsgYW5kCisKKyAgYy4gRm9yIGp1cmlzZGljdGlvbnMgbm90IGFsbG93aW5nIHdhaXZlciBvciBhbiBhZ3JlZW1lbnQgbm90IHRvIGFzc2VydAorICBtb3JhbCByaWdodHMgdW5kZXIgU2VjdGlvbiA1LjEgYSBhbmQgYiwgdGhlIGF1dGhvciBtYXkgcmV0YWluIHRoZWlyCisgIG1vcmFsIHJpZ2h0cyBvdmVyIGNlcnRhaW4gYXNwZWN0cyBvZiB0aGUgRGF0YWJhc2UuCisKK1BsZWFzZSBub3RlIHRoYXQgc29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyBmb3IgdGhlIHdhaXZlciBvZiBtb3JhbAorcmlnaHRzLCBhbmQgc28gbW9yYWwgcmlnaHRzIG1heSBzdGlsbCBzdWJzaXN0IG92ZXIgdGhlIERhdGFiYXNlIGluIHNvbWUKK2p1cmlzZGljdGlvbnMuCisKKyMjIyA2LjAgRmFpciBkZWFsaW5nLCBEYXRhYmFzZSBleGNlcHRpb25zLCBhbmQgb3RoZXIgcmlnaHRzIG5vdCBhZmZlY3RlZCAKKworNi4xIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyB0aGF0IFlvdSBvciBhbnlvbmUgZWxzZSBtYXkKK2luZGVwZW5kZW50bHkgaGF2ZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgdG8gbWFrZSBhbnkgdXNlIG9mIHRoaXMKK0RhdGFiYXNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uOgorCisgIGEuIEV4Y2VwdGlvbnMgdG8gdGhlIERhdGFiYXNlIFJpZ2h0IGluY2x1ZGluZzogRXh0cmFjdGlvbiBvZiBDb250ZW50cworICBmcm9tIG5vbi1lbGVjdHJvbmljIERhdGFiYXNlcyBmb3IgcHJpdmF0ZSBwdXJwb3NlcywgRXh0cmFjdGlvbiBmb3IKKyAgcHVycG9zZXMgb2YgaWxsdXN0cmF0aW9uIGZvciB0ZWFjaGluZyBvciBzY2llbnRpZmljIHJlc2VhcmNoLCBhbmQKKyAgRXh0cmFjdGlvbiBvciBSZS11dGlsaXNhdGlvbiBmb3IgcHVibGljIHNlY3VyaXR5IG9yIGFuIGFkbWluaXN0cmF0aXZlCisgIG9yIGp1ZGljaWFsIHByb2NlZHVyZS4gCisKKyAgYi4gRmFpciBkZWFsaW5nLCBmYWlyIHVzZSwgb3IgYW55IG90aGVyIGxlZ2FsbHkgcmVjb2duaXNlZCBsaW1pdGF0aW9uCisgIG9yIGV4Y2VwdGlvbiB0byBpbmZyaW5nZW1lbnQgb2YgY29weXJpZ2h0IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4gCisKKzYuMiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgYWZmZWN0IGFueSByaWdodHMgb2YgbGF3ZnVsIHVzZXJzIHRvIEV4dHJhY3QKK2FuZCBSZS11dGlsaXNlIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzLCBldmFsdWF0ZWQKK3F1YW50aXRhdGl2ZWx5IG9yIHF1YWxpdGF0aXZlbHksIGZvciBhbnkgcHVycG9zZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nCitjcmVhdGluZyBhIERlcml2YXRpdmUgRGF0YWJhc2UgKHN1YmplY3QgdG8gb3RoZXIgcmlnaHRzIG92ZXIgdGhlCitDb250ZW50cywgc2VlIFNlY3Rpb24gMi40KS4gVGhlIHJlcGVhdGVkIGFuZCBzeXN0ZW1hdGljIEV4dHJhY3Rpb24gb3IKK1JlLXV0aWxpc2F0aW9uIG9mIGluc3Vic3RhbnRpYWwgcGFydHMgb2YgdGhlIENvbnRlbnRzIG1heSBob3dldmVyIGFtb3VudAordG8gdGhlIEV4dHJhY3Rpb24gb3IgUmUtdXRpbGlzYXRpb24gb2YgYSBTdWJzdGFudGlhbCBwYXJ0IG9mIHRoZQorQ29udGVudHMuCisKKyMjIyA3LjAgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCis3LjEgVGhlIERhdGFiYXNlIGlzIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciAiYXMgaXMiIGFuZCB3aXRob3V0IGFueQord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzLCBpbXBsaWVkLCBvciBhcmlzaW5nIGJ5IHN0YXR1dGUsCitjdXN0b20sIGNvdXJzZSBvZiBkZWFsaW5nLCBvciB0cmFkZSB1c2FnZS4gTGljZW5zb3Igc3BlY2lmaWNhbGx5CitkaXNjbGFpbXMgYW55IGFuZCBhbGwgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUsCitub24taW5mcmluZ2VtZW50LCBhY2N1cmFjeSBvciBjb21wbGV0ZW5lc3MsIHRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mCitlcnJvcnMsIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBtZXJjaGFudGFiaWxpdHksIG9yIG90aGVyd2lzZS4KK1NvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMsIHNvCit0aGlzIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworIyMjIDguMCBMaW1pdGF0aW9uIG9mIGxpYWJpbGl0eQorCis4LjEgU3ViamVjdCB0byBhbnkgbGlhYmlsaXR5IHRoYXQgbWF5IG5vdCBiZSBleGNsdWRlZCBvciBsaW1pdGVkIGJ5IGxhdywKK3RoZSBMaWNlbnNvciBpcyBub3QgbGlhYmxlIGZvciwgYW5kIGV4cHJlc3NseSBleGNsdWRlcywgYWxsIGxpYWJpbGl0eQorZm9yIGxvc3Mgb3IgZGFtYWdlIGhvd2V2ZXIgYW5kIHdoZW5ldmVyIGNhdXNlZCB0byBhbnlvbmUgYnkgYW55IHVzZQordW5kZXIgdGhpcyBMaWNlbnNlLCB3aGV0aGVyIGJ5IFlvdSBvciBieSBhbnlvbmUgZWxzZSwgYW5kIHdoZXRoZXIgY2F1c2VkCitieSBhbnkgZmF1bHQgb24gdGhlIHBhcnQgb2YgdGhlIExpY2Vuc29yIG9yIG5vdC4gVGhpcyBleGNsdXNpb24gb2YKK2xpYWJpbGl0eSBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBhbnkgc3BlY2lhbCwgaW5jaWRlbnRhbCwKK2NvbnNlcXVlbnRpYWwsIHB1bml0aXZlLCBvciBleGVtcGxhcnkgZGFtYWdlcyBzdWNoIGFzIGxvc3Mgb2YgcmV2ZW51ZSwKK2RhdGEsIGFudGljaXBhdGVkIHByb2ZpdHMsIGFuZCBsb3N0IGJ1c2luZXNzLiBUaGlzIGV4Y2x1c2lvbiBhcHBsaWVzCitldmVuIGlmIHRoZSBMaWNlbnNvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoCitkYW1hZ2VzLgorCis4LjIgSWYgbGlhYmlsaXR5IG1heSBub3QgYmUgZXhjbHVkZWQgYnkgbGF3LCBpdCBpcyBsaW1pdGVkIHRvIGFjdHVhbCBhbmQKK2RpcmVjdCBmaW5hbmNpYWwgbG9zcyB0byB0aGUgZXh0ZW50IGl0IGlzIGNhdXNlZCBieSBwcm92ZWQgbmVnbGlnZW5jZSBvbgordGhlIHBhcnQgb2YgdGhlIExpY2Vuc29yLgorCisjIyMgOS4wIFRlcm1pbmF0aW9uIG9mIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZQorCis5LjEgQW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIHRoaXMgTGljZW5zZSB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgYW5kIHdpdGhvdXQKK25vdGljZSB0byBZb3UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBQZXJzb25zIHdobyBoYXZlIHJlY2VpdmVkIHRoZQorRGF0YWJhc2UsIHRoZSB3aG9sZSBvciBhIFN1YnN0YW50aWFsIHBhcnQgb2YgdGhlIENvbnRlbnRzLCBEZXJpdmF0aXZlCitEYXRhYmFzZXMsIG9yIHRoZSBEYXRhYmFzZSBhcyBwYXJ0IG9mIGEgQ29sbGVjdGl2ZSBEYXRhYmFzZSBmcm9tIFlvdQordW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZAordGhlaXIgdXNlIGlzIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZSBvciBhIGxpY2Vuc2UgZ3JhbnRlZAordW5kZXIgU2VjdGlvbiA0Ljggb2YgdGhpcyBMaWNlbnNlLiAgU2VjdGlvbnMgMSwgMiwgNywgOCwgOSBhbmQgMTAgd2lsbAorc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCis5LjIgSWYgWW91IGFyZSBub3QgaW4gYnJlYWNoIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBMaWNlbnNvcgord2lsbCBub3QgdGVybWluYXRlIFlvdXIgcmlnaHRzIHVuZGVyIGl0LiAKKworOS4zIFVubGVzcyB0ZXJtaW5hdGVkIHVuZGVyIFNlY3Rpb24gOS4xLCB0aGlzIExpY2Vuc2UgaXMgZ3JhbnRlZCB0byBZb3UKK2ZvciB0aGUgZHVyYXRpb24gb2YgYXBwbGljYWJsZSByaWdodHMgaW4gdGhlIERhdGFiYXNlLiAKKworOS40IFJlaW5zdGF0ZW1lbnQgb2YgcmlnaHRzLiBJZiB5b3UgY2Vhc2UgYW55IGJyZWFjaCBvZiB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyIGZ1bGwgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZQord2lsbCBiZSByZWluc3RhdGVkOgorCisgIGEuIFByb3Zpc2lvbmFsbHkgYW5kIHN1YmplY3QgdG8gcGVybWFuZW50IHRlcm1pbmF0aW9uIHVudGlsIHRoZSA2MHRoCisgIGRheSBhZnRlciBjZXNzYXRpb24gb2YgYnJlYWNoOyAKKworICBiLiBQZXJtYW5lbnRseSBvbiB0aGUgNjB0aCBkYXkgYWZ0ZXIgY2Vzc2F0aW9uIG9mIGJyZWFjaCB1bmxlc3MKKyAgb3RoZXJ3aXNlIHJlYXNvbmFibHkgbm90aWZpZWQgYnkgdGhlIExpY2Vuc29yOyBvcgorCisgIGMuICBQZXJtYW5lbnRseSBpZiByZWFzb25hYmx5IG5vdGlmaWVkIGJ5IHRoZSBMaWNlbnNvciBvZiB0aGUKKyAgdmlvbGF0aW9uLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZgorICB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIGZyb20gIHRoZSBMaWNlbnNvciwgYW5kIFlvdSBjdXJlIHRoZQorICB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlciB5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworUGVyc29ucyBzdWJqZWN0IHRvIHBlcm1hbmVudCB0ZXJtaW5hdGlvbiBvZiByaWdodHMgYXJlIG5vdCBlbGlnaWJsZSB0bworYmUgYSByZWNpcGllbnQgYW5kIHJlY2VpdmUgYSBsaWNlbnNlIHVuZGVyIFNlY3Rpb24gNC44LgorCis5LjUgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UKK3RoZSBEYXRhYmFzZSB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyBvcgorbWFraW5nIGF2YWlsYWJsZSB0aGUgRGF0YWJhc2UuIFJlbGVhc2luZyB0aGUgRGF0YWJhc2UgdW5kZXIgZGlmZmVyZW50CitsaWNlbnNlIHRlcm1zIG9yIHN0b3BwaW5nIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIERhdGFiYXNlIHdpbGwgbm90Cit3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzCityZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMKK3N0YXRlZCBhYm92ZS4KKworIyMjIDEwLjAgR2VuZXJhbAorCisxMC4xIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgaW52YWxpZCBvcgordW5lbmZvcmNlYWJsZSwgdGhhdCBtdXN0IG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mCit0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYW5kIGVhY2gKK3JlbWFpbmluZyBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHZhbGlkIGFuZCBlbmZvcmNlZCB0byB0aGUKK2Z1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIAorCisxMC4yIFRoaXMgTGljZW5zZSBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmUgb3ZlciB0aGUgRGF0YWJhc2UuIEl0IHJlcGxhY2VzIGFueQorZWFybGllciB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvCit0aGUgRGF0YWJhc2UuIAorCisxMC4zIElmIFlvdSBhcmUgaW4gYnJlYWNoIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIFlvdSB3aWxsIG5vdCBiZQorZW50aXRsZWQgdG8gcmVseSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRvIGNvbXBsYWluIG9mIGFueQorYnJlYWNoIGJ5IHRoZSBMaWNlbnNvci4gCisKKzEwLjQgQ2hvaWNlIG9mIGxhdy4gVGhpcyBMaWNlbnNlIHRha2VzIGVmZmVjdCBpbiBhbmQgd2lsbCBiZSBnb3Zlcm5lZCBieQordGhlIGxhd3Mgb2YgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUKK3NvdWdodCB0byBiZSBlbmZvcmNlZC4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyCithcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcgYW5kIERhdGFiYXNlIFJpZ2h0cyBpbiB0aGUgcmVsZXZhbnQKK2p1cmlzZGljdGlvbiBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsCit0aGVzZSBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZ3JhbnRlZCBpbiB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gbWVldCB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PRkwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQ0YmNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0ZMLTEuMQpAQCAtMCwwICsxLDg4IEBACisKK1NJTCBPUEVOIEZPTlQgTElDRU5TRQorCitWZXJzaW9uIDEuMSAtIDI2IEZlYnJ1YXJ5IDIwMDcKKworUFJFQU1CTEUKK1RoZSBnb2FscyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UgKE9GTCkgYXJlIHRvIHN0aW11bGF0ZSB3b3JsZHdpZGUKK2RldmVsb3BtZW50IG9mIGNvbGxhYm9yYXRpdmUgZm9udCBwcm9qZWN0cywgdG8gc3VwcG9ydCB0aGUgZm9udCBjcmVhdGlvbgorZWZmb3J0cyBvZiBhY2FkZW1pYyBhbmQgbGluZ3Vpc3RpYyBjb21tdW5pdGllcywgYW5kIHRvIHByb3ZpZGUgYSBmcmVlIGFuZAorb3BlbiBmcmFtZXdvcmsgaW4gd2hpY2ggZm9udHMgbWF5IGJlIHNoYXJlZCBhbmQgaW1wcm92ZWQgaW4gcGFydG5lcnNoaXAKK3dpdGggb3RoZXJzLgorCitUaGUgT0ZMIGFsbG93cyB0aGUgbGljZW5zZWQgZm9udHMgdG8gYmUgdXNlZCwgc3R1ZGllZCwgbW9kaWZpZWQgYW5kCityZWRpc3RyaWJ1dGVkIGZyZWVseSBhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBzb2xkIGJ5IHRoZW1zZWx2ZXMuIFRoZQorZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlIGJ1bmRsZWQsIGVtYmVkZGVkLCAKK3JlZGlzdHJpYnV0ZWQgYW5kL29yIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUgcHJvdmlkZWQgdGhhdCBhbnkgcmVzZXJ2ZWQKK25hbWVzIGFyZSBub3QgdXNlZCBieSBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgZm9udHMgYW5kIGRlcml2YXRpdmVzLAoraG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyIGFueSBvdGhlciB0eXBlIG9mIGxpY2Vuc2UuIFRoZQorcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvIHJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkKK3RvIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy4KKworREVGSU5JVElPTlMKKyJGb250IFNvZnR3YXJlIiByZWZlcnMgdG8gdGhlIHNldCBvZiBmaWxlcyByZWxlYXNlZCBieSB0aGUgQ29weXJpZ2h0CitIb2xkZXIocykgdW5kZXIgdGhpcyBsaWNlbnNlIGFuZCBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiBUaGlzIG1heQoraW5jbHVkZSBzb3VyY2UgZmlsZXMsIGJ1aWxkIHNjcmlwdHMgYW5kIGRvY3VtZW50YXRpb24uCisKKyJSZXNlcnZlZCBGb250IE5hbWUiIHJlZmVycyB0byBhbnkgbmFtZXMgc3BlY2lmaWVkIGFzIHN1Y2ggYWZ0ZXIgdGhlCitjb3B5cmlnaHQgc3RhdGVtZW50KHMpLgorCisiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cyBhcworZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykuCisKKyJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLAorb3Igc3Vic3RpdHV0aW5nIC0tIGluIHBhcnQgb3IgaW4gd2hvbGUgLS0gYW55IG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZQorT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEKK25ldyBlbnZpcm9ubWVudC4KKworIkF1dGhvciIgcmVmZXJzIHRvIGFueSBkZXNpZ25lciwgZW5naW5lZXIsIHByb2dyYW1tZXIsIHRlY2huaWNhbAord3JpdGVyIG9yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuCisKK1BFUk1JU1NJT04gJiBDT05ESVRJT05TCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSwgdG8gdXNlLCBzdHVkeSwgY29weSwgbWVyZ2UsIGVtYmVkLCBtb2RpZnksCityZWRpc3RyaWJ1dGUsIGFuZCBzZWxsIG1vZGlmaWVkIGFuZCB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUgRm9udAorU29mdHdhcmUsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisxKSBOZWl0aGVyIHRoZSBGb250IFNvZnR3YXJlIG5vciBhbnkgb2YgaXRzIGluZGl2aWR1YWwgY29tcG9uZW50cywKK2luIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zLCBtYXkgYmUgc29sZCBieSBpdHNlbGYuCisKKzIpIE9yaWdpbmFsIG9yIE1vZGlmaWVkIFZlcnNpb25zIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSBiZSBidW5kbGVkLAorcmVkaXN0cmlidXRlZCBhbmQvb3Igc29sZCB3aXRoIGFueSBzb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCBlYWNoIGNvcHkKK2NvbnRhaW5zIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGxpY2Vuc2UuIFRoZXNlIGNhbiBiZQoraW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IKK2luIHRoZSBhcHByb3ByaWF0ZSBtYWNoaW5lLXJlYWRhYmxlIG1ldGFkYXRhIGZpZWxkcyB3aXRoaW4gdGV4dCBvcgorYmluYXJ5IGZpbGVzIGFzIGxvbmcgYXMgdGhvc2UgZmllbGRzIGNhbiBiZSBlYXNpbHkgdmlld2VkIGJ5IHRoZSB1c2VyLgorCiszKSBObyBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSB1c2UgdGhlIFJlc2VydmVkIEZvbnQKK05hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCitDb3B5cmlnaHQgSG9sZGVyLiBUaGlzIHJlc3RyaWN0aW9uIG9ubHkgYXBwbGllcyB0byB0aGUgcHJpbWFyeSBmb250IG5hbWUgYXMKK3ByZXNlbnRlZCB0byB0aGUgdXNlcnMuCisKKzQpIFRoZSBuYW1lKHMpIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyKHMpIG9yIHRoZSBBdXRob3Iocykgb2YgdGhlIEZvbnQKK1NvZnR3YXJlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIHByb21vdGUsIGVuZG9yc2Ugb3IgYWR2ZXJ0aXNlIGFueQorTW9kaWZpZWQgVmVyc2lvbiwgZXhjZXB0IHRvIGFja25vd2xlZGdlIHRoZSBjb250cmlidXRpb24ocykgb2YgdGhlCitDb3B5cmlnaHQgSG9sZGVyKHMpIGFuZCB0aGUgQXV0aG9yKHMpIG9yIHdpdGggdGhlaXIgZXhwbGljaXQgd3JpdHRlbgorcGVybWlzc2lvbi4KKworNSkgVGhlIEZvbnQgU29mdHdhcmUsIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQsIGluIHBhcnQgb3IgaW4gd2hvbGUsCittdXN0IGJlIGRpc3RyaWJ1dGVkIGVudGlyZWx5IHVuZGVyIHRoaXMgbGljZW5zZSwgYW5kIG11c3Qgbm90IGJlCitkaXN0cmlidXRlZCB1bmRlciBhbnkgb3RoZXIgbGljZW5zZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0bworcmVtYWluIHVuZGVyIHRoaXMgbGljZW5zZSBkb2VzIG5vdCBhcHBseSB0byBhbnkgZG9jdW1lbnQgY3JlYXRlZAordXNpbmcgdGhlIEZvbnQgU29mdHdhcmUuCisKK1RFUk1JTkFUSU9OCitUaGlzIGxpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIGlmIGFueSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUKK25vdCBtZXQuCisKK0RJU0NMQUlNRVIKK1RIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAorT0YgQ09QWVJJR0hULCBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTQorT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0dUU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwY2FkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09HVFNMCkBAIC0wLDAgKzEsMTIwIEBACisKK1RoZSBPcGVuIEdyb3VwIFRlc3QgU3VpdGUgTGljZW5zZQorCitQcmVhbWJsZQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gKK2EgUGFja2FnZSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zCitzb21lIHNlbWJsYW5jZSBvZiBhcnRpc3RpYyBjb250cm9sIG92ZXIgdGhlIGRldmVsb3BtZW50IG9mIHRoZQorcGFja2FnZSwgd2hpbGUgZ2l2aW5nIHRoZSB1c2VycyBvZiB0aGUgcGFja2FnZSB0aGUgcmlnaHQgdG8gdXNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgUGFja2FnZSBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cwordGhlIHJpZ2h0IHRvIG1ha2UgcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLgorCitUZXN0aW5nIGlzIGVzc2VudGlhbCBmb3IgcHJvcGVyIGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBvZgorc3RhbmRhcmRzLWJhc2VkIHByb2R1Y3RzLgorCitGb3IgYnV5ZXJzOiBhZGVxdWF0ZSBjb25mb3JtYW5jZSB0ZXN0aW5nIGxlYWRzIHRvIHJlZHVjZWQKK2ludGVncmF0aW9uIGNvc3RzIGFuZCBwcm90ZWN0aW9uIG9mIGludmVzdG1lbnRzIGluIGFwcGxpY2F0aW9ucywKK3NvZnR3YXJlIGFuZCBwZW9wbGUuCisKK0ZvciBzb2Z0d2FyZSBkZXZlbG9wZXJzOiBjb25mb3JtYW5jZSB0ZXN0aW5nIG9mIHBsYXRmb3JtcyBhbmQKK21pZGRsZXdhcmUgZ3JlYXRseSByZWR1Y2VzIHRoZSBjb3N0IG9mIGRldmVsb3BpbmcgYW5kIG1haW50YWluaW5nCittdWx0aS1wbGF0Zm9ybSBhcHBsaWNhdGlvbiBzb2Z0d2FyZS4KKworRm9yIHN1cHBsaWVyczogSW4tZGVwdGggdGVzdGluZyBpbmNyZWFzZXMgY3VzdG9tZXIgc2F0aXNmYWN0aW9uIGFuZAora2VlcHMgZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQgY29zdHMgaW4gY2hlY2suIEFQSSBjb25mb3JtYW5jZSBpcworaGlnaGx5IG1lYXN1cmFibGUgYW5kIHN1cHBsaWVycyB3aG8gY2xhaW0gaXQgbXVzdCBiZSBhYmxlIHRvCitzdWJzdGFudGlhdGUgdGhhdCBjbGFpbS4KKworQXMgc3VjaCwgc2luY2UgdGhlc2UgYXJlIGJlbmNobWFyayBtZWFzdXJlcyBvZiBjb25mb3JtYW5jZSwgd2UgZmVlbAordGhlIGludGVncml0eSBvZiB0ZXN0IHRvb2xzIGlzIG9mIGltcG9ydGFuY2UuIEluIG9yZGVyIHRvIHByZXNlcnZlCit0aGUgaW50ZWdyaXR5IG9mIHRoZSBleGlzdGluZyBjb25mb3JtYW5jZSBtb2RlcyBvZiB0aGlzIHRlc3QKK3BhY2thZ2UgYW5kIHRvIHBlcm1pdCByZWNpcGllbnRzIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMKK3BhY2thZ2UgdG8gcnVuIHRoZSBvcmlnaW5hbCB0ZXN0IG1vZGVzLCB0aGlzIGxpY2Vuc2UgcmVxdWlyZXMgdGhhdAordGhlIG9yaWdpbmFsIHRlc3QgbW9kZXMgYmUgcHJlc2VydmVkLgorCitJZiB5b3UgZmluZCBhIGJ1ZyBpbiBvbmUgb2YgdGhlIHN0YW5kYXJkcyBtb2RlIHRlc3QgY2FzZXMsIHBsZWFzZQorbGV0IHVzIGtub3cgc28gd2UgY2FuIGZlZWQgdGhpcyBiYWNrIGludG8gdGhlIG9yaWdpbmFsLCBhbmQgYWxzbworcmFpc2UgYW55IHNwZWNpZmljYXRpb24gaXNzdWVzIHdpdGggdGhlIGFwcHJvcHJpYXRlIGJvZGllcyAoZm9yCitleGFtcGxlIHRoZSBQT1NJWCBjb21taXR0ZWVzKS4KKworRGVmaW5pdGlvbnM6IAorCisgICAgICJQYWNrYWdlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2YgZmlsZXMgZGlzdHJpYnV0ZWQgYnkgdGhlCisgICAgIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMKKyAgICAgY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLiAKKyAgICAgIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKyAgICAgbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzCisgICAgIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiAKKyAgICAgIkNvcHlyaWdodCBIb2xkZXIiIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvcgorICAgICBjb3B5cmlnaHRzIGZvciB0aGUgcGFja2FnZS4gIllvdSIgaXMgeW91LCBpZiB5b3VgcmUgdGhpbmtpbmcKKyAgICAgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhpcyBQYWNrYWdlLiAKKyAgICAgIlJlYXNvbmFibGUgY29weWluZyBmZWUiIGlzIHdoYXRldmVyIHlvdSBjYW4ganVzdGlmeSBvbiB0aGUKKyAgICAgYmFzaXMgb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUKKyAgICAgaW52b2x2ZWQsIGFuZCBzbyBvbi4gKFlvdSB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBqdXN0aWZ5IGl0CisgICAgIHRvIHRoZSBDb3B5cmlnaHQgSG9sZGVyLCBidXQgb25seSB0byB0aGUgY29tcHV0aW5nIGNvbW11bml0eQorICAgICBhdCBsYXJnZSBhcyBhIG1hcmtldCB0aGF0IG11c3QgYmVhciB0aGUgZmVlLikgCisgICAgICJGcmVlbHkgQXZhaWxhYmxlIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbQorICAgICBpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUKKyAgICAgaXRlbS4gSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5CisgICAgIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHRoZXkgcmVjZWl2ZWQgaXQuIAorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mCit0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQKK3RoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZAorYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworMi4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlcgorbW9kaWZpY2F0aW9ucyBkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0CitIb2xkZXIuIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQKK3RoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LAorcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZQorc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UKK2RvIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmc6CisKKyAgICAgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kIHRlc3RjYXNlcyBzbyB0aGUKKyAgICAgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kCisgICAgIHRlc3RjYXNlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLCBhbmQgcHJvdmlkZSBhCisgICAgIHNlcGFyYXRlIG1hbnVhbCBwYWdlIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIGFuZAorICAgICB0ZXN0Y2FzZSB0aGF0IGNsZWFybHkgZG9jdW1lbnRzIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlCisgICAgIFN0YW5kYXJkIFZlcnNpb24uCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlCitvciBleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmc6IAorCisgICAgIGFjY29tcGFueSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIGFuZCB0ZXN0Y2FzZXMgd2l0aAorICAgICB0aGVpciBjb3JyZXNwb25kaW5nIFN0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMgYW5kCisgICAgIHRlc3RjYXNlcywgZ2l2aW5nIHRoZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgYW5kCisgICAgIHRlc3RjYXNlcyBub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZQorICAgICBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlciB3aXRoCisgICAgIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzUuIFlvdSBtYXkgY2hhcmdlIGEgcmVhc29uYWJsZSBjb3B5aW5nIGZlZSBmb3IgYW55IGRpc3RyaWJ1dGlvbiBvZgordGhpcyBQYWNrYWdlLiBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcworUGFja2FnZS4gWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGlzIFBhY2thZ2UgaXRzZWxmLiBIb3dldmVyLAoreW91IG1heSBkaXN0cmlidXRlIHRoaXMgUGFja2FnZSBpbiBhZ2dyZWdhdGUgd2l0aCBvdGhlciAocG9zc2libHkKK2NvbW1lcmNpYWwpIHByb2dyYW1zIGFzIHBhcnQgb2YgYSBsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpCitzb2Z0d2FyZSBkaXN0cmlidXRpb24gcHJvdmlkZWQgdGhhdCB5b3UgZG8gbm90IGFkdmVydGlzZSB0aGlzCitQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KKworNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQKK2FzIG91dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkKK2ZhbGwgdW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIKK2dlbmVyYXRlZCB0aGVtLCBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQKK3dpdGggdGhpcyBQYWNrYWdlLgorCis3LlN1YnJvdXRpbmVzIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIHNoYWxsCitub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZS4gCisKKzguIFRoZSBuYW1lIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yCitwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKK3dyaXR0ZW4gcGVybWlzc2lvbi4KKworOS4gVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK1RoZSBFbmQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT0xEQVAtMi44Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjUzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PTERBUC0yLjgKQEAgLTAsMCArMSw0OSBAQAorCitUaGUgT3BlbkxEQVAgUHVibGljIExpY2Vuc2UKKyAgVmVyc2lvbiAyLjgsIDE3IEF1Z3VzdCAyMDAzCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisoIlNvZnR3YXJlIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgZm9ybSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cworICAgYW5kIG5vdGljZXMsCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhcHBsaWNhYmxlIGNvcHlyaWdodAorICAgc3RhdGVtZW50cyBhbmQgbm90aWNlcywgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kCisKKzMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGNvbnRhaW4gYSB2ZXJiYXRpbSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuCisKK1RoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorRWFjaCByZXZpc2lvbiBpcyBkaXN0aW5ndWlzaGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIuICBZb3UgbWF5IHVzZQordGhpcyBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlCit0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCByZXZpc2lvbiBvZiB0aGUgbGljZW5zZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBBTkQgSVRTCitDT05UUklCVVRPUlMgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OLCBJVFMgQ09OVFJJQlVUT1JTLCBPUiBUSEUgQVVUSE9SKFMpCitPUiBPV05FUihTKSBPRiBUSEUgU09GVFdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCitBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgYW5kIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZworaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaXRsZQordG8gY29weXJpZ2h0IGluIHRoaXMgU29mdHdhcmUgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodAoraG9sZGVycy4KKworT3BlbkxEQVAgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi4KKworQ29weXJpZ2h0IDE5OTktMjAwMyBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LAorQ2FsaWZvcm5pYSwgVVNBLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIFBlcm1pc3Npb24gdG8gY29weSBhbmQKK2Rpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTEuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhZDBkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0xLjAKQEAgLTAsMCArMSwxNjQgQEAKKworVGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZQordi4gMS4wCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbAord29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpCitoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOiAiTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUKK0xpY2Vuc2UgdmVyc2lvbiAxLjAiCisKK0xpY2Vuc2UgVGVybXMKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUKK2xpY2Vuc2UgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsKKworYikgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24gdGhlCitPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcwordG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yCitEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlCitPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorCitlKSB0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LgorCisyKSBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlLAordW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZQorZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciAoIkxpY2Vuc2VkCitDbGFpbXMiKSB0byBtYWtlLCB1c2UsIHNlbGwgYW5kIG9mZmVyIGZvciBzYWxlIHRoZSBPcmlnaW5hbCBXb3JrLgorTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsCitwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHVuZGVyIHRoZSBMaWNlbnNlZCBDbGFpbXMgdG8KK21ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUKK3ByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQKK2FsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBhY2Nlc3MgYW5kIG1vZGlmeSB0aGUKK09yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieSBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUKK2NvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mCit0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUKK3JpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YKK3RoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0bworcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMKK0xpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgYnkgcHVibGlzaGluZwordGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5Citmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK2RlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlCitzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsCitzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUKK0xpY2Vuc2VkIENsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUKK3RyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwKK1dvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0CitMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55CitPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZQorb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheQorc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIGFjY2Vzc2VkIG9yCit1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlCitXb3JrcyBhcmUgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGVyc29ucywgbWFkZSBhdmFpbGFibGUgYXMgYW4KK2FwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmssIG9yIHVzZWQgdG8KK3Byb3ZpZGUgc2VydmljZXMgb3Igb3RoZXJ3aXNlIGRlbGl2ZXIgY29udGVudCB0byBhbnlvbmUgb3RoZXIgdGhhbgorWW91LiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91CithZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBzaGFsbCBiZSBkZWVtZWQgYQorZGlzdHJpYnV0aW9uIGFuZCBzaGFsbCBiZSBsaWNlbnNlZCB0byBhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4KKworNikgV2FycmFudHkgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExJQ0VOU09SIFdBUlJBTlRTIFRIQVQgVEhFCitDT1BZUklHSFQgSU4gQU5EIFRPIFRIRSBPUklHSU5BTCBXT1JLIElTIE9XTkVEIEJZIFRIRSBMSUNFTlNPUiBPUiBUSEFUCitUSEUgT1JJR0lOQUwgV09SSyBJUyBESVNUUklCVVRFRCBCWSBMSUNFTlNPUiBVTkRFUiBBIFZBTElEIENVUlJFTlQKK0xJQ0VOU0UgRlJPTSBUSEUgQ09QWVJJR0hUIE9XTkVSLiBFWENFUFQgQVMgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSEUKK0lNTUVESUFURUxZIFBSRUNFRURJTkcgU0VOVEVOQ0UsIFRIRSBPUklHSU5BTCBXT1JLIElTIFBST1ZJREVEIFVOREVSCitUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSwgRUlUSEVSIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgV0FSUkFOVFkgT0YKK05PTi1JTkZSSU5HRU1FTlQgQU5EIFdBUlJBTlRJRVMgVEhBVCBUSEUgT1JJR0lOQUwgV09SSyBJUyBNRVJDSEFOVEFCTEUKK09SIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRgorVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUworQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBMSUNFTlNFIFRPIE9SSUdJTkFMIFdPUksgSVMKK0dSQU5URUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzcpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTAorVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwKK1NIQUxMIFRIRSBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HCitBUyBBIFJFU1VMVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsCitDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMCitEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBFUlNPTiBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UCitBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNICitQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SCitMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTgorQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzgpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IKK2Fub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91CitwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssCithbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yCithbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5Citwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlcgorY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkKK29mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbnMgMSBhbmQgMiBoZXJlaW4sIFlvdSBpbmRpY2F0ZQorWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK1RoaXMgbGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHlvdSBtYXkgbm8gbG9uZ2VyCitleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiBZb3VyCitmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzkpIE11dHVhbCBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZAordG8gWW91IGJ5IHRoaXMgTGljZW5zZSBpZiBZb3UgZmlsZSBhIGxhd3N1aXQgaW4gYW55IGNvdXJ0IGFsbGVnaW5nCit0aGF0IGFueSBPU0kgQ2VydGlmaWVkIG9wZW4gc291cmNlIHNvZnR3YXJlIHRoYXQgaXMgbGljZW5zZWQgdW5kZXIgYW55CitsaWNlbnNlIGNvbnRhaW5pbmcgdGhpcyAiTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uIiBjbGF1c2UKK2luZnJpbmdlcyBhbnkgcGF0ZW50IGNsYWltcyB0aGF0IGFyZSBlc3NlbnRpYWwgdG8gdXNlIHRoYXQgc29mdHdhcmUuCisKKzEwKSBKdXJpc2RpY3Rpb24sIFZlbnVlIGFuZCBHb3Zlcm5pbmcgTGF3LiBZb3UgYWdyZWUgdGhhdCBhbnkgbGF3c3VpdAorYXJpc2luZyB1bmRlciBvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgbWFpbnRhaW5lZCBpbiB0aGUKK2NvdXJ0cyBvZiB0aGUganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2gKK0xpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLCBhbmQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhhdAoranVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbgorb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbAorU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsKK291dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsCisxNyBVLlMuQy4gJiMxNjc7IDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kCitpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mCit0aGlzIExpY2Vuc2UuCisKKzExKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK29yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZQorZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQKK2xpbWl0YXRpb24sIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbgorY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcworc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEyKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50Citjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlCitpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8KK3RoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzEzKSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzCitMaWNlbnNlLCB3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYQorbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZQordGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5Cit0aGF0IGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4KK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3QKK29yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksCit3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcAorb2Ygc3VjaCBlbnRpdHkuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDIgTGF3cmVuY2UgRS4gUm9zZW4uIEFsbCByaWdodHMKK3Jlc2VydmVkLiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcworbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dAordGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL09TTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZTVjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMi4wCkBAIC0wLDAgKzEsNDggQEAKKworT3BlbiBTb2Z0d2FyZSBMaWNlbnNlCit2LiAyLjAKKworVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgdmVyc2lvbiAyLjAKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7CitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlOworCitkKSB0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIE9yaWdpbmFsIFdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0IGFuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbCBXb3JrLiBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5IHRoaXMgb2JsaWdhdGlvbiBieSBwbGFjaW5nIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kIGNvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlIGFkZHJlc3Mgb2YgdGhhdCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IGluIGEgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLCBub3IgYW55IG9mIHRoZWlyIHRyYWRlbWFya3Mgb3Igc2VydmljZSBtYXJrcywgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgTGljZW5zb3IuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsIG9yIG9mZmVyIHRvIHNlbGwgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsIHdoZXRoZXIgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBhcmUgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IGFncmVlIHRoYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIHNoYWxsIGJlIGRlZW1lZCBhIGRpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yaywgYXMgd2VsbCBhcyBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoaXMgTGljZW5zZS4gTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUgTGljZW5zb3IgYmUgbGlhYmxlIHRvIGFueSBwZXJzb24gZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcmBzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyB0byBvYnRhaW4gdGhlIGV4cHJlc3MgYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gTm90aGluZyBlbHNlIGJ1dCB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yayBvciB0byBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGluIFNlY3Rpb24gMSBoZXJlaW4sIGFuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IFUuUy4gY29weXJpZ2h0IGxhdywgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiBZb3VyIGZhaWx1cmUgdG8gaG9ub3IgdGhlIHByb3Zpc28gaW4gU2VjdGlvbiAxKGMpIGhlcmVpbi4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IChpKSBhZ2FpbnN0IExpY2Vuc29yIHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIG9yIChpaSkgYWdhaW5zdCBhbnkgZW50aXR5IHdpdGggcmVzcGVjdCB0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIChidXQgZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXNgIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UgcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMgbm90IHRvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAzIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBUaGlzIGxpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PU0wtMy4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTU3NzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT1NMLTMuMApAQCAtMCwwICsxLDI3IEBACisKK09wZW4gU29mdHdhcmUgTGljZW5zZSAoJiM4MjIwO09TTCYjODIyMTspIHYuIDMuMAorVGhpcyBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGFwcGxpZXMgdG8gYW55IG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsIFdvcms6CitMaWNlbnNlZCB1bmRlciB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIHZlcnNpb24gMy4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weXJpZ2h0LCB0byBkbyB0aGUgZm9sbG93aW5nOgorYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllcywgZWl0aGVyIGFsb25lIG9yIGFzIHBhcnQgb2YgYSBjb2xsZWN0aXZlIHdvcms7CitiKSB0byB0cmFuc2xhdGUsIGFkYXB0LCBhbHRlciwgdHJhbnNmb3JtLCBtb2RpZnksIG9yIGFycmFuZ2UgdGhlIE9yaWdpbmFsIFdvcmssIHRoZXJlYnkgY3JlYXRpbmcgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOworYykgdG8gZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSBzaGFsbCBiZSBsaWNlbnNlZCB1bmRlciB0aGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZTsKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZAorZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdW5kZXIgcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgV29yayBhcyBmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZCBpbXBvcnQgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsuCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLCBub3RoaW5nIGluIHRoaXMgTGljZW5zZSBncmFudHMgYW55IGxpY2Vuc2UgdG8gTGljZW5zb3ImIzgyMTc7cyB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkuIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgbGljZW5zZWQgY2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObyBsaWNlbnNlIGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlIGFueSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3Igb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorNSkgRXh0ZXJuYWwgRGVwbG95bWVudC4gVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGluIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRob3NlIHdvcmtzIGFyZSBkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiBhcHBsaWNhdGlvbiBpbnRlbmRlZCBmb3IgdXNlIG92ZXIgYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IG11c3QgdHJlYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrIGFzIGEgZGlzdHJpYnV0aW9uIHVuZGVyIHNlY3Rpb24gMShjKS4KKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiBZb3UgbXVzdCBjYXVzZSB0aGUgU291cmNlIENvZGUgZm9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUgbW9kaWZpZWQgdGhlIE9yaWdpbmFsIFdvcmsuCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cyB0aGF0IHRoZSBjb3B5cmlnaHQgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCB0aGUgcGF0ZW50IHJpZ2h0cyBncmFudGVkIGhlcmVpbiBieSBMaWNlbnNvciBhcmUgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIGFyZSBzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZSBjb250cmlidXRvcihzKSBvZiB0aG9zZSBjb3B5cmlnaHRzIGFuZCBwYXRlbnQgcmlnaHRzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVCBXQVJSQU5UWSwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSB3YXJyYW50aWVzIG9mIG5vbi1pbmZyaW5nZW1lbnQsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTCBXT1JLIElTIFdJVEggWU9VLiBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIHRoZSBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnlvbmUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLgorOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0byB0aGlzIExpY2Vuc2UsIHRoYXQgYXNzZW50IGluZGljYXRlcyB5b3VyIGNsZWFyIGFuZCBpcnJldm9jYWJsZSBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgWW91IGRpc3RyaWJ1dGUgb3IgY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBjb25kaXRpb25zIHlvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcgeW91ciByaWdodCB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrLCBhbmQgZG9pbmcgc28gd2l0aG91dCBob25vcmluZyB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBhZmZlY3QgY29weXJpZ2h0IGV4Y2VwdGlvbnMgYW5kIGxpbWl0YXRpb25zIChpbmNsdWRpbmcgJiM4MjIwO2ZhaXIgdXNlJiM4MjIxOyBvciAmIzgyMjA7ZmFpciBkZWFsaW5nJiM4MjIxOykuIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSB1cG9uIHlvdXIgZmFpbHVyZSB0byBob25vciB0aGUgY29uZGl0aW9ucyBpbiBTZWN0aW9uIDEoYykuCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgYWdhaW5zdCBMaWNlbnNvciBvciBhbnkgbGljZW5zZWUgYWxsZWdpbmcgdGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uIHNoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgY29weXJpZ2h0IG9yIHBhdGVudCBsYXcgaW4gdGhlIGFwcHJvcHJpYXRlIGp1cmlzZGljdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEyKSBBdHRvcm5leXMmIzgyMTc7IEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0ICYjMTY5OyAyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IgY29tbXVuaWNhdGUgdGhpcyBMaWNlbnNlIHdpdGhvdXQgbW9kaWZpY2F0aW9uLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBwZXJtaXRzIFlvdSB0byBtb2RpZnkgdGhpcyBMaWNlbnNlIGFzIGFwcGxpZWQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlIGFuZCBjb3B5LCBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiAodGhlICJNb2RpZmllZCBMaWNlbnNlIikgYW5kIGFwcGx5IGl0IHRvIG90aGVyIG9yaWdpbmFsIHdvcmtzIG9mIGF1dGhvcnNoaXAgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91ciBNb2RpZmllZCBMaWNlbnNlIGlzIHRoZSAiT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIiBvciAiT1NMIiBhbmQgeW91IG1heSBub3QgdXNlIHRob3NlIG5hbWVzIGluIHRoZSBuYW1lIG9mIHlvdXIgTW9kaWZpZWQgTGljZW5zZTsgKGlpKSBZb3UgbXVzdCByZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlICJMaWNlbnNlZCB1bmRlciA8aW5zZXJ0IHlvdXIgbGljZW5zZSBuYW1lIGhlcmU+IiBvciB3aXRoIGEgbm90aWNlIG9mIHlvdXIgb3duIHRoYXQgaXMgbm90IGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5vdGljZSBpbiB0aGlzIExpY2Vuc2U7IGFuZCAoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlIHVubGVzcyB5b3VyIE1vZGlmaWVkIExpY2Vuc2UgaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKSBhbmQgWW91IGNvbXBseSB3aXRoIGl0cyBsaWNlbnNlIHJldmlldyBhbmQgY2VydGlmaWNhdGlvbiBwcm9jZXNzLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9PcGVuU1NMIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3MGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvT3BlblNTTApAQCAtMCwwICsxLDEwNyBAQAorCitPcGVuU1NMIExpY2Vuc2UKKworID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIENvcHlyaWdodCAoYykgMTk5OC0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBtZXQ6CisgCisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgZGlzdHJpYnV0aW9uLgorIAorICAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAgICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAgICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorIAorICA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgCisgIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAKKyAgNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICAgICBhY2tub3dsZWRnbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVNgYCBBTkQgQU5ZCisgIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCisgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorIAorCisgT3JpZ2luYWwgU1NMZWF5IExpY2Vuc2UKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAKKyAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAgaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAKKyAgQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZ2BzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAgdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAgICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAgICAgVGhlIHdvcmQgYGNyeXB0b2dyYXBoaWNgIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbQorICAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorIAorICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgCisgIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZSBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmI4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QRApAQCAtMCwwICsxIEBACitUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBQdWJsaWMgRG9tYWluIExpY2Vuc2UKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1BIUC0zLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGIyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9QSFAtMy4wCkBAIC0wLDAgKzEsNzAgQEAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICBUaGUgUEhQIExpY2Vuc2UsIHZlcnNpb24gMy4wMQorQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAxMCBUaGUgUEhQIEdyb3VwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICBkaXN0cmlidXRpb24uCisgCisgIDMuIFRoZSBuYW1lICJQSFAiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3IKKyAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBncm91cEBwaHAubmV0LgorICAKKyAgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIlBIUCIsIG5vcgorICAgICBtYXkgIlBIUCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgICAgIGZyb20gZ3JvdXBAcGhwLm5ldC4gIFlvdSBtYXkgaW5kaWNhdGUgdGhhdCB5b3VyIHNvZnR3YXJlIHdvcmtzIGluCisgICAgIGNvbmp1bmN0aW9uIHdpdGggUEhQIGJ5IHNheWluZyAiRm9vIGZvciBQSFAiIGluc3RlYWQgb2YgY2FsbGluZworICAgICBpdCAiUEhQIEZvbyIgb3IgInBocGZvbyIKKyAKKyAgNS4gVGhlIFBIUCBHcm91cCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCisgICAgIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKKyAgICAgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisgICAgIE9uY2UgY292ZXJlZCBjb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbgorICAgICBvZiB0aGUgbGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcworICAgICBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggY292ZXJlZCBjb2RlCisgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgUEhQIEdyb3VwLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgUEhQIEdyb3VwIGhhcworICAgICB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIGNvdmVyZWQgY29kZSBjcmVhdGVkCisgICAgIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICAgIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIFBIUCBzb2Z0d2FyZSwgZnJlZWx5IGF2YWlsYWJsZSBmcm9tCisgICAgIDxodHRwOi8vd3d3LnBocC5uZXQvc29mdHdhcmUvPiIuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBIUCBERVZFTE9QTUVOVCBURUFNIGBgQVMgSVNgYCBBTkQgCitBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSAKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQSFAKK0RFVkVMT1BNRU5UIFRFQU0gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIAorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIAorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQoraW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBQSFAgR3JvdXAuCisKK1RoZSBQSFAgR3JvdXAgY2FuIGJlIGNvbnRhY3RlZCB2aWEgRW1haWwgYXQgZ3JvdXBAcGhwLm5ldC4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFBIUCBHcm91cCBhbmQgdGhlIFBIUCBwcm9qZWN0LCAKK3BsZWFzZSBzZWUgPGh0dHA6Ly93d3cucGhwLm5ldD4uCisKK1BIUCBpbmNsdWRlcyB0aGUgWmVuZCBFbmdpbmUsIGZyZWVseSBhdmFpbGFibGUgYXQKKzxodHRwOi8vd3d3LnplbmQuY29tPi4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUG9zdGdyZVNRTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2NThkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Bvc3RncmVTUUwKQEAgLTAsMCArMSwxNCBAQAorCitQb3N0Z3JlU1FMIERhdGFiYXNlIE1hbmFnZW1lbnQgU3lzdGVtCisoZm9ybWVybHkga25vd24gYXMgUG9zdGdyZXMsIHRoZW4gYXMgUG9zdGdyZXM5NSkKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTAsIFRoZSBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0IGZlZSwgYW5kIHdpdGhvdXQgYSB3cml0dGVuIGFncmVlbWVudCBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBJTkNMVURJTkcgTE9TVCBQUk9GSVRTLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUyBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSBIQVMgTk8gT0JMSUdBVElPTlMgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1Byb3ByaWV0YXJ5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MTg3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9Qcm9wcmlldGFyeQpAQCAtMCwwICsxIEBACitQcm9wcmlldGFyeSBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUHl0aG9uLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzZTg2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1B5dGhvbi0yLjAKQEAgLTAsMCArMSwxOTIgQEAKKworUFlUSE9OIFNPRlRXQVJFIEZPVU5EQVRJT04gTElDRU5TRSBWRVJTSU9OIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKygiUFNGIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQKK290aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlICgiUHl0aG9uIikgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZAoraXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAorcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24KK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRmBzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgUFNGYHMgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykKKzIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24KK3ByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbi4KKworNC4gUFNGIGlzIG1ha2luZyBQeXRob24gYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiBQU0YgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KK0ZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkKK3JlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gUFNGIGFuZAorTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGCit0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCis4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24sIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgorCitCRU9QRU4uQ09NIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMi4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JFT1BFTiBQWVRIT04gT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQgVkVSU0lPTiAxCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBCZU9wZW4uY29tICgiQmVPcGVuIiksIGhhdmluZyBhbgorb2ZmaWNlIGF0IDE2MCBTYXJhdG9nYSBBdmVudWUsIFNhbnRhIENsYXJhLCBDQSA5NTA1MSwgYW5kIHRoZQorSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nCit0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gKCJ0aGUgU29mdHdhcmUiKS4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UKK0FncmVlbWVudCwgQmVPcGVuIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtCithbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQKK290aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sCitwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGUgQmVPcGVuIFB5dGhvbiBMaWNlbnNlIGlzIHJldGFpbmVkIGluIHRoZQorU29mdHdhcmUsIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKzMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gQkVPUEVOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBCRU9QRU4gTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis0LiBCRU9QRU4gU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgVEhFCitTT0ZUV0FSRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTCitBUyBBIFJFU1VMVCBPRiBVU0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUsIE9SIEFOWQorREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFsbAorcmVzcGVjdHMgYnkgdGhlIGxhdyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mCitsYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0bworY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZQorYmV0d2VlbiBCZU9wZW4gYW5kIExpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50CitwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyaworc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKK3RoaXJkIHBhcnR5LiBBcyBhbiBleGNlcHRpb24sIHRoZSAiQmVPcGVuIFB5dGhvbiIgbG9nb3MgYXZhaWxhYmxlIGF0CitodHRwOi8vd3d3LnB5dGhvbmxhYnMuY29tL2xvZ29zLmh0bWwgbWF5IGJlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZQorcGVybWlzc2lvbnMgZ3JhbnRlZCBvbiB0aGF0IHdlYiBwYWdlLgorCis3LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyB0aGUgc29mdHdhcmUsIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgorCitDTlJJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbAorUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLAorUmVzdG9uLCBWQSAyMDE5MSAoIkNOUkkiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbgorKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSBzb2Z0d2FyZSBpbgorc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgorCisyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAorcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gMS42LjEKK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUklgcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUklgcyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cworUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKK3ZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuIEFsdGVybmF0ZWx5LCBpbiBsaWV1IG9mIENOUklgcyBMaWNlbnNlCitBZ3JlZW1lbnQsIExpY2Vuc2VlIG1heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlCitxdW90ZXMpOiAiUHl0aG9uIDEuNi4xIGlzIG1hZGUgYXZhaWxhYmxlIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBpbiBDTlJJYHMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IHRvZ2V0aGVyIHdpdGgKK1B5dGhvbiAxLjYuMSBtYXkgYmUgbG9jYXRlZCBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZwordW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDEzLiBUaGlzCitBZ3JlZW1lbnQgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQKK3VzaW5nIHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDEzIi4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gMS42LjEgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LjEuCisKKzQuIENOUkkgaXMgbWFraW5nIFB5dGhvbiAxLjYuMSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNi4xIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBDTlJJIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorMS42LjEgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUworQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEsCitPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGZlZGVyYWwKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIGNvcHlyaWdodCBsYXcsIGFuZCwgdG8gdGhlIGV4dGVudCBzdWNoCitVLlMuIGZlZGVyYWwgbGF3IGRvZXMgbm90IGFwcGx5LCBieSB0aGUgbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YKK1ZpcmdpbmlhLCBleGNsdWRpbmcgVmlyZ2luaWFgcyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4KK05vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aXRoIHJlZ2FyZCB0byBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkCitvbiBQeXRob24gMS42LjEgdGhhdCBpbmNvcnBvcmF0ZSBub24tc2VwYXJhYmxlIG1hdGVyaWFsIHRoYXQgd2FzCitwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdGhlCitsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBWaXJnaW5pYSBzaGFsbCBnb3Zlcm4gdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgb25seSBhcyB0byBpc3N1ZXMgYXJpc2luZyB1bmRlciBvciB3aXRoIHJlc3BlY3QgdG8KK1BhcmFncmFwaHMgNCwgNSwgYW5kIDcgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gTm90aGluZyBpbiB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YKK2FnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBDTlJJIGFuZCBMaWNlbnNlZS4gVGhpcworTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yCit0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvcgorc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY2xpY2tpbmcgb24gdGhlICJBQ0NFUFQiIGJ1dHRvbiB3aGVyZSBpbmRpY2F0ZWQsIG9yIGJ5IGNvcHlpbmcsCitpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEsIExpY2Vuc2VlIGFncmVlcyB0byBiZQorYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKK0FDQ0VQVAorCitDV0kgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAwLjkuMCBUSFJPVUdIIDEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkxIC0gMTk5NSwgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtIEFtc3RlcmRhbSwKK1RoZSBOZXRoZXJsYW5kcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Citib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAorQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTworVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQorRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1FQTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDMzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9RUEwtMS4wCkBAIC0wLDAgKzEsNDggQEAKKworVEhFIFEgUFVCTElDIExJQ0VOU0UgdmVyc2lvbiAxLjAKKworQ29weXJpZ2h0IChDKSAxOTk5LTIwMDUgVHJvbGx0ZWNoIEFTLCBOb3J3YXkuCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCitUaGUgaW50ZW50IG9mIHRoaXMgbGljZW5zZSBpcyB0byBlc3RhYmxpc2ggZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIHRoZSBzb2Z0d2FyZSByZWd1bGF0ZWQgYnkgdGhpcyBsaWNlbnNlIHVuZGVyIHRoZSBvcGVuIHNvdXJjZSBtb2RlbC4KKworVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGNvbnRhaW5pbmcgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyB0aGF0IGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFEgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAuIFN1Y2ggc29mdHdhcmUgaXMgaGVyZWluIHJlZmVycmVkIHRvIGFzIHRoZSBTb2Z0d2FyZS4gVGhpcyBsaWNlbnNlIGNvdmVycyBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUsIHVzZSBvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBiYXNlZCBvbiB0aGUgU29mdHdhcmUsIGFuZCBkZXZlbG9wbWVudCBvZiBmcmVlIHNvZnR3YXJlIHdoaWNoIHVzZXMgdGhlIFNvZnR3YXJlLgorCitHcmFudGVkIFJpZ2h0cworCisxLiBZb3UgYXJlIGdyYW50ZWQgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2UgcHJvdmlkZWQgeW91IGFncmVlIHRvIGFuZCBjb21wbHkgd2l0aCBhbnkgYW5kIGFsbCBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4gV2hvbGUgb3IgcGFydGlhbCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBvciBzb2Z0d2FyZSBpdGVtcyB0aGF0IGxpbmsgd2l0aCB0aGUgU29mdHdhcmUsIGluIGFueSBmb3JtIHNpZ25pZmllcyBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZS4KKworMi4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiB1bm1vZGlmaWVkIGZvcm0gcHJvdmlkZWQgdGhhdCB0aGUgZW50aXJlIHBhY2thZ2UsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGNvcHlyaWdodCwgdHJhZGVtYXJrIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLCBhcyByZWxlYXNlZCBieSB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlLCBpcyBkaXN0cmlidXRlZC4KKworMy4gWW91IG1heSBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFuZCBkaXN0cmlidXRlIHlvdXIgbW9kaWZpY2F0aW9ucywgaW4gYSBmb3JtIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgU29mdHdhcmUsIHN1Y2ggYXMgcGF0Y2hlcy4gVGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgYXBwbHkgdG8gbW9kaWZpY2F0aW9uczoKKworYS4gTW9kaWZpY2F0aW9ucyBtdXN0IG5vdCBhbHRlciBvciByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZS4KK2IuIFdoZW4gbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYXJlIHJlbGVhc2VkIHVuZGVyIHRoaXMgbGljZW5zZSwgYSBub24tZXhjbHVzaXZlIHJveWFsdHktZnJlZSByaWdodCBpcyBncmFudGVkIHRvIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgdG8gZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHN1Y2ggdmVyc2lvbnMgcmVtYWluIGF2YWlsYWJsZSB1bmRlciB0aGVzZSB0ZXJtcyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgbGljZW5zZShzKSBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wZXIuCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlIFNvZnR3YXJlIG9yIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBvZiBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgeW91IG1lZXQgdGhlc2UgcmVzdHJpY3Rpb25zOgorCithLiBZb3UgbXVzdCBpbmNsdWRlIHRoaXMgbGljZW5zZSBkb2N1bWVudCBpbiB0aGUgZGlzdHJpYnV0aW9uLgorYi4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGRpc3RyaWJ1dGVkIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCBwbGFjZSBwcm9taW5lbnQgbm90aWNlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmcgdGhpcy4KKworYy4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgaW5jbHVkZWQgaW4gdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKzUuIFlvdSBtYXkgdXNlIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGxlZ2FsbHkgZGV2ZWxvcGVkIGJ5IHlvdSBvciBieSBvdGhlcnMuCisKKzYuIFlvdSBtYXkgZGV2ZWxvcCBhcHBsaWNhdGlvbiBwcm9ncmFtcywgcmV1c2FibGUgY29tcG9uZW50cyBhbmQgb3RoZXIgc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZS4gVGhlc2UgaXRlbXMsIHdoZW4gZGlzdHJpYnV0ZWQsIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgorCithLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlc2UgaXRlbXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIGFuZCB1c2UgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGl0ZW1zIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIuCitiLiBZb3UgbXVzdCBleHBsaWNpdGx5IGxpY2Vuc2UgYWxsIHJlY2lwaWVudHMgb2YgeW91ciBpdGVtcyB0byB1c2UgYW5kIHJlLWRpc3RyaWJ1dGUgb3JpZ2luYWwgYW5kIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBpdGVtcyBpbiBib3RoIG1hY2hpbmUtZXhlY3V0YWJsZSBhbmQgc291cmNlIGNvZGUgZm9ybXMuIFRoZSByZWNpcGllbnRzIG11c3QgYmUgYWJsZSB0byBkbyBzbyB3aXRob3V0IGFueSBjaGFyZ2VzIHdoYXRzb2V2ZXIsIGFuZCB0aGV5IG11c3QgYmUgYWJsZSB0byByZS1kaXN0cmlidXRlIHRvIGFueW9uZSB0aGV5IGNob29zZS4KKworYy4gSWYgdGhlIGl0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYywgYW5kIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgcmVxdWVzdHMgYSBjb3B5IG9mIHRoZSBpdGVtcywgdGhlbiB5b3UgbXVzdCBzdXBwbHkgb25lLgorCitMaW1pdGF0aW9ucyBvZiBMaWFiaWxpdHkKKworSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGluaXRpYWwgZGV2ZWxvcGVycyBvciBjb3B5cmlnaHQgaG9sZGVycyBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGxvc3QgcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmIHRoZXkgaGF2ZSBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcywgZXhjZXB0IHRvIHRoZSBleHRlbnQgaW52YXJpYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlLgorCitObyBXYXJyYW50eQorCitUaGUgU29mdHdhcmUgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudCBhcmUgcHJvdmlkZWQgQVMgSVMgd2l0aCBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCwgSU5DTFVESU5HIFRIRSBXQVJSQU5UWSBPRiBERVNJR04sIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0Nob2ljZSBvZiBMYXcKKworVGhpcyBsaWNlbnNlIGlzIGdvdmVybmVkIGJ5IHRoZSBMYXdzIG9mIE5vcndheS4gRGlzcHV0ZXMgc2hhbGwgYmUgc2V0dGxlZCBieSBPc2xvIENpdHkgQ291cnQuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFiNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xCkBAIC0wLDAgKzEsNDAxIEBACisKK1JlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZSB2MS4xCisKKzEuIERFRklOSVRJT05TCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KK3RoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkKK3RoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcKK3BvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZgorZGF0YS4KKworMS41LiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCitDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMKK3RoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKK3N1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsCitDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzCitNb2RpZmljYXRpb25zLgorCisxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsCitDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeQorQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQKK2luc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsCitjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZQorQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhCitjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLQorYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cwordW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uCitjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMKKyhhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2gKK2VudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudAorKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisxLjEzLiAiUmVkIEhhdCBCcmFuZGVkIENvZGUiIGlzIGNvZGUgdGhhdCBSZWQgSGF0IGRpc3RyaWJ1dGVzIGFuZC9vcgorcGVybWl0cyBvdGhlcnMgdG8gZGlzdHJpYnV0ZSB1bmRlciBkaWZmZXJlbnQgdGVybXMgdGhhbiB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYworTGljZW5zZS4gUmVkIEhhdCdzIEJyYW5kZWQgQ29kZSBtYXkgY29udGFpbiBwYXJ0IG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisyLiBTT1VSQ0UgQ09ERSBMSUNFTlNFCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCitleGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUKK09yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0CitvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0bworbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJVdGlsaXplIikgdGhlIE9yaWdpbmFsIENvZGUgKG9yCitwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkKK25lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGFuZAorbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyCitNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCitNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuCit1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0bworVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudAordGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZQorQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQKK21heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IgY29tYmluYXRpb25zLgorCiszLiBESVNUUklCVVRJT04gT0JMSUdBVElPTlMKKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UKK211c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uCit0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlCityZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlCithdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHZpYSBhbiBhY2NlcHRlZAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUKK3ZlcnNpb24gYXZhaWxhYmxlIGFuZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXI7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEKK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUKKygxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpCittb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlCithdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMKK21haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4gWW91IGFyZSByZXNwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb2YgdGhlIE1vZGlmaWNhdGlvbiBhbmQgdGhlIGxvY2F0aW9uIG9mIHRoZSBTb3VyY2UgaWYgYSBjb250YWN0IG1lYW5zCitpcyBwcm92aWRlZC4gUmVkIEhhdCB3aWxsIGJlIGFjdGluZyBhcyBtYWludGFpbmVyIG9mIHRoZSBTb3VyY2UgYW5kIG1heSBwcm92aWRlCithbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBtZWNoYW5pc20gZm9yIHRoZSBNb2RpZmljYXRpb24gdG8gYmUgbWFkZSBhdmFpbGFibGUuCitZb3UgY2FuIGNvbnRhY3QgUmVkIEhhdCB0byBtYWtlIHRoZSBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFuZCB0byBub3RpZnkgdGhlCitJbml0aWFsIERldmVsb3Blci4gKGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vZWNvcy8pCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUKK2RvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YKK2FueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcworZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UKK0NvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uCitpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbgorcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UKK211c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkCisiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluCitzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4KK3N1Y2gga25vd2xlZGdlIGFmdGVyIFlvdSBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UKK2F2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZQorbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZAordGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyhiKSBDb250cmlidXRvciBBUElzLgorSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yCitjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QKK2Fsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kCit0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUgWW91IGRlc2NyaWJlCityZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZQorTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUuIElmCitpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0bworaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYQorcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhCitub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsCitpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLgorCitIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQKK2FueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UKK2Fsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeQorQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2gKK0NvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdQorb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YKK1NlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEKK25vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91CitoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5CitpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQKK0NvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2UKK29mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkCit0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UKK2ZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmCitZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZQoraXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQKK2J5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUKK3RvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5CitpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaAordGVybXMgWW91IG9mZmVyLgorCitJZiB5b3UgZGlzdHJpYnV0ZSBleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlLCB5b3UgbXVzdAorcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKK3Byb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSBvciByZWd1bGF0aW9uCit0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQKK3Bvc3NpYmxlOyAoYikgY2l0ZSB0aGUgc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nCit0byB0aGUgbGljZW5zZTsgYW5kIChjKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoCitkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQKK211c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUKK2V4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCitzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuIFlvdSBtdXN0IHN1Ym1pdCB0aGlzIExFR0FMIGZpbGUgdG8gUmVkIEhhdCBmb3IgcmV2aWV3LCBhbmQgWW91Cit3aWxsIG5vdCBiZSBhYmxlIHVzZSB0aGUgY292ZXJlZCBjb2RlIGluIGFueSBtZWFucyB1bnRpbCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQKK2Zyb20gUmVkIEhhdCB0byBhbGxvdyBmb3IgdGhlIGluYWJpbGl0eSB0byBjb21wbHkgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbi4KKworNS4gQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworUmVkIEhhdCBtYXkgaW5jbHVkZSBDb3ZlcmVkIENvZGUgaW4gcHJvZHVjdHMgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMKK2JlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggYWRkaXRpb25hbAorcHJvZHVjdHMgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4KKworUmVkIEhhdCBtYXkgbGljZW5zZSB0aGUgU291cmNlIENvZGUgb2YgUmVkIEhhdCBCcmFuZGVkIENvZGUgd2l0aG91dCBSZWQgSGF0CitCcmFuZGVkIENvZGUgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2UgUmVkCitIYXQgQnJhbmRlZCBDb2RlIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCitDb250YWN0IFJlZCBIYXQgZm9yIGRldGFpbHMgb2YgYWx0ZXJuYXRlIGxpY2Vuc2luZyB0ZXJtcyBhdmFpbGFibGUuCisKKzYuIFZFUlNJT05TIE9GIFRIRSBMSUNFTlNFCisKKzYuMS4gTmV3IFZlcnNpb25zLgorUmVkIEhhdCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvCit0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUmVkIEhhdC4gTm8gb25lIG90aGVyIHRoYW4gUmVkIEhhdCBoYXMgdGhlIHJpZ2h0IHRvCittb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlIGJleW9uZCB3aGF0IGlzIGdyYW50ZWQgdW5kZXIgdGhpcworYW5kIHN1YnNlcXVlbnQgTGljZW5zZXMuCisKKzYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIHlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbworaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMKKyJFQ09TIiwgImVDb3MiLCAiUmVkIEhhdCIsICJSSEVQTCIgb3IKK2FueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpCitvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHlvdXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBjb250YWlucyB0ZXJtcyB3aGljaAorZGlmZmVyIGZyb20gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbgorRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMKK0xpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRAorQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkKK09USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZgorWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwCitkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMKK3doaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0xpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSCitDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNICitQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwKK0lOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUgorTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSAorUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMCitJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SCitMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQKK0xJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTCisKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4KKzQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlcgorc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMKK3N1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4KKzEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLgorR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGgKK2hlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMKKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zCisoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nCitpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUKK3BhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLAordGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbAorZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8KK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcKK2FyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueQorYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueSBsaXRpZ2F0aW9uCityZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwKK0NvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYQorQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUKK2FwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKK1NhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdAordGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90CithcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbgorMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZgorWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZgorQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoCityaWdodHMsIGFuZCBvdGhlciByZWxldmFudCBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8KK2Rpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgorCisxMy4gQURESVRJT05BTCBURVJNUyBBUFBMSUNBQkxFIFRPIFRIRSBSRUQgSEFUIEVDT1MgUFVCTElDIExJQ0VOU0UKKworTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgUmVkIEhhdCBmcm9tIGxpY2Vuc2luZwordW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHdoaWNoIFJlZCBIYXQgb3RoZXJ3aXNlIHdvdWxkCitoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4KKworUmVkIEhhdCBhbmQgbG9nbyAtIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrCitSZWQgSGF0LCB0aGUgUmVkIEhhdCBsb2dvLCBlQ29zIGxvZ28sIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlCitPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IGNvbnRhY3QgUmVkIEhhdCBmb3IgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBSZWQgSGF0CithbmQgZUNvcyBtYXJrcyBpbiBlaXRoZXIgdGhlIGRvY3VtZW50YXRpb24gb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBiZXlvbmQKK3RoYXQgcmVxdWlyZWQgaW4gRXhoaWJpdCBCLgorCitJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uIC0gVG8gdGhlIGV4dGVudCB0aGF0IFJlZCBIYXQKK2lzIGxpbWl0ZWQgY29udHJhY3R1YWxseSBmcm9tIG1ha2luZyB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzCitMaWNlbnNlLCBSZWQgSGF0IG1heSBjaG9vc2UgdG8gaW50ZWdyYXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbnRvIENvdmVyZWQKK0NvZGUgd2l0aG91dCBiZWluZyByZXF1aXJlZCB0byBkaXN0cmlidXRlIHN1Y2ggdGhpcmQgcGFydHkgY29kZSBpbiBTb3VyY2UgQ29kZQorZm9ybSwgZXZlbiBpZiBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQKKyJNb2RpZmljYXRpb25zIiB1bmRlciB0aGlzIExpY2Vuc2UuCisKK0VYSElCSVQgQQorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlCitWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vCit3d3cucmVkaGF0LmNvbS8KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCByZWxlYXNlZAorU2VwdGVtYmVyIDMwLCAxOTk4LiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUmVkIEhhdC4KK1BvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuIgorCitFWEhJQklUIEIKKworUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGVDb3MgLSBFbWJlZGRlZCBDb25maWd1cmFibGUKK09wZXJhdGluZyBTeXN0ZW0sIGEgdHJhZGVtYXJrIG9mIFJlZCBIYXQuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIChodHRwOi8vd3d3LnJlZGhhdC5jb20vKS4gQWxsCitSaWdodHMgUmVzZXJ2ZWQuCisKK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgUkVEIEhBVCBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCitFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UCitPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCitJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkKK09GIFNVQ0ggREFNQUdFLgorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUkhlQ29zLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4OTAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JIZUNvcy0xLjEKQEAgLTAsMCArMSwxNTEgQEAKKworUmVkIEhhdCBlQ29zIFB1YmxpYyBMaWNlbnNlIHYxLjEKKworMS4gREVGSU5JVElPTlMKKworMS4xLiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorCisxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKK0IuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjExLiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzEuMTMuICJSZWQgSGF0IEJyYW5kZWQgQ29kZSIgaXMgY29kZSB0aGF0IFJlZCBIYXQgZGlzdHJpYnV0ZXMgYW5kL29yIHBlcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhlIFJlZCBIYXQgZUNvcyBQdWJsaWMgTGljZW5zZS4gUmVkIEhhdGBzIEJyYW5kZWQgQ29kZSBtYXkgY29udGFpbiBwYXJ0IG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisyLiBTT1VSQ0UgQ09ERSBMSUNFTlNFCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGUgYW5kIHRvIHRoZSBJbml0aWFsIERldmVsb3BlcjsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBNb2RpZmljYXRpb24gYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgU291cmNlIGlmIGEgY29udGFjdCBtZWFucyBpcyBwcm92aWRlZC4gUmVkIEhhdCB3aWxsIGJlIGFjdGluZyBhcyBtYWludGFpbmVyIG9mIHRoZSBTb3VyY2UgYW5kIG1heSBwcm92aWRlIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIG1lY2hhbmlzbSBmb3IgdGhlIE1vZGlmaWNhdGlvbiB0byBiZSBtYWRlIGF2YWlsYWJsZS4gWW91IGNhbiBjb250YWN0IFJlZCBIYXQgdG8gbWFrZSB0aGUgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhbmQgdG8gbm90aWZ5IHRoZSBJbml0aWFsIERldmVsb3Blci4gKGh0dHA6Ly9zb3VyY2V3YXJlLmN5Z251cy5jb20vZWNvcy8pCisKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KK1lvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIHBhcnR5IGNsYWltcyBhbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbiB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgWW91IG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91IHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4gCitJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIHlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSwgYW5kIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlLCB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgU291cmNlIENvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4KKworSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKK0lmIHlvdSBkaXN0cmlidXRlIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUsIHlvdSBtdXN0IHJlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJTkFCSUxJVFkgVE8gQ09NUExZIERVRSBUTyBTVEFUVVRFIE9SIFJFR1VMQVRJT04KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyAoYikgY2l0ZSB0aGUgc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nIHRvIHRoZSBsaWNlbnNlOyBhbmQgKGMpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuIFlvdSBtdXN0IHN1Ym1pdCB0aGlzIExFR0FMIGZpbGUgdG8gUmVkIEhhdCBmb3IgcmV2aWV3LCBhbmQgWW91IHdpbGwgbm90IGJlIGFibGUgdXNlIHRoZSBjb3ZlcmVkIGNvZGUgaW4gYW55IG1lYW5zIHVudGlsIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCBmcm9tIFJlZCBIYXQgdG8gYWxsb3cgZm9yIHRoZSBpbmFiaWxpdHkgdG8gY29tcGx5IGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24uCisKKzUuIEFQUExJQ0FUSU9OIE9GIFRISVMgTElDRU5TRQorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworUmVkIEhhdCBtYXkgaW5jbHVkZSBDb3ZlcmVkIENvZGUgaW4gcHJvZHVjdHMgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2Ugc3VjaCBhZGRpdGlvbmFsIHByb2R1Y3RzIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UuCisKK1JlZCBIYXQgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIFJlZCBIYXQgQnJhbmRlZCBDb2RlIHdpdGhvdXQgUmVkIEhhdCBCcmFuZGVkIENvZGUgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2UgUmVkIEhhdCBCcmFuZGVkIENvZGUgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4gQ29udGFjdCBSZWQgSGF0IGZvciBkZXRhaWxzIG9mIGFsdGVybmF0ZSBsaWNlbnNpbmcgdGVybXMgYXZhaWxhYmxlLgorCis2LiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRQorCis2LjEuIE5ldyBWZXJzaW9ucy4KK1JlZCBIYXQgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCis2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUmVkIEhhdC4gTm8gb25lIG90aGVyIHRoYW4gUmVkIEhhdCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgYmV5b25kIHdoYXQgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIGFuZCBzdWJzZXF1ZW50IExpY2Vuc2VzLgorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCitJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgeW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAiRUNPUyIsICJlQ29zIiwgIlJlZCBIYXQiLCAiUkhFUEwiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04KKworVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEFUIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMKKworVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUworCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4sIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2E6IChhKSB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nLCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIChleGNlcHRpbmcgYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cykgc2hhbGwgYmUgc3ViamVjdCB0byBmaW5hbCBhbmQgYmluZGluZyBhcmJpdHJhdGlvbiwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHBheWluZyBhbGwgY29zdHMgb2YgYXJiaXRyYXRpb247IChiKSBhbnkgYXJiaXRyYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiBKQU1TL0VuZERpc3B1dGU7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TCisKK0V4Y2VwdCBpbiBjYXNlcyB3aGVyZSBhbm90aGVyIENvbnRyaWJ1dG9yIGhhcyBmYWlsZWQgdG8gY29tcGx5IHdpdGggU2VjdGlvbiAzLjQsIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIFlvdXIgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiBjb3BpZXMgb2YgQ292ZXJlZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworMTMuIEFERElUSU9OQUwgVEVSTVMgQVBQTElDQUJMRSBUTyBUSEUgUkVEIEhBVCBFQ09TIFBVQkxJQyBMSUNFTlNFCisKK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IFJlZCBIYXQgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zIHRoYW4gdGhpcyBMaWNlbnNlIGFueSBjb2RlIHdoaWNoIFJlZCBIYXQgb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCitSZWQgSGF0IGFuZCBsb2dvIC0gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmsgUmVkIEhhdCwgdGhlIFJlZCBIYXQgbG9nbywgZUNvcyBsb2dvLCBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3UgbWF5IGNvbnRhY3QgUmVkIEhhdCBmb3IgcGVybWlzc2lvbiB0byBkaXNwbGF5IHRoZSBSZWQgSGF0IGFuZCBlQ29zIG1hcmtzIGluIGVpdGhlciB0aGUgZG9jdW1lbnRhdGlvbiBvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGJleW9uZCB0aGF0IHJlcXVpcmVkIGluIEV4aGliaXQgQi4KKworSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gQ29udHJhY3R1YWwgT2JsaWdhdGlvbiAtIFRvIHRoZSBleHRlbnQgdGhhdCBSZWQgSGF0IGlzIGxpbWl0ZWQgY29udHJhY3R1YWxseSBmcm9tIG1ha2luZyB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIFJlZCBIYXQgbWF5IGNob29zZSB0byBpbnRlZ3JhdGUgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGludG8gQ292ZXJlZCBDb2RlIHdpdGhvdXQgYmVpbmcgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgaW4gU291cmNlIENvZGUgZm9ybSwgZXZlbiBpZiBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgIk1vZGlmaWNhdGlvbnMiIHVuZGVyIHRoaXMgTGljZW5zZS4KKworRVhISUJJVCBBCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWQgSGF0IGVDb3MgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LnJlZGhhdC5jb20vCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBlQ29zIC0gRW1iZWRkZWQgQ29uZmlndXJhYmxlIE9wZXJhdGluZyBTeXN0ZW0sIHJlbGVhc2VkIFNlcHRlbWJlciAzMCwgMTk5OC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJlZCBIYXQuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmVkIEhhdCBhcmUgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwIFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4iCisKK0VYSElCSVQgQgorCitQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZUNvcyAtIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLCBhIHRyYWRlbWFyayBvZiBSZWQgSGF0LiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJlZCBIYXQgYXJlIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCBSZWQgSGF0LCBJbmMuIChodHRwOi8vd3d3LnJlZGhhdC5jb20vKS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBSRUQgSEFUIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1JQTC0xLjUgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTA4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUEwtMS41CkBAIC0wLDAgKzEsNTQ2IEBACisKK1JlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgMS41IChSUEwxLjUpCisKK1JlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UgKFJQTCkKKworVmVyc2lvbiAxLjUsIEp1bHkgMTUsIDIwMDcKKworQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcKK1RlY2huaWNhbCBQdXJzdWl0IEluYy4sCitBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQUkVBTUJMRQorCitUaGUgUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZSAoUlBMKSBpcyBiYXNlZCBvbiB0aGUgY29uY2VwdCBvZiByZWNpcHJvY2l0eSBvciwKK2lmIHlvdSBwcmVmZXIsIGZhaXJuZXNzLgorCitJbiBzaG9ydCwgdGhpcyBsaWNlbnNlIGdyZXcgb3V0IG9mIGEgZGVzaXJlIHRvIGNsb3NlIGxvb3Bob2xlcyBpbiBwcmV2aW91cyBvcGVuCitzb3VyY2UgbGljZW5zZXMsIGxvb3Bob2xlcyB0aGF0IGFsbG93ZWQgcGFydGllcyB0byBhY3F1aXJlIG9wZW4gc291cmNlIHNvZnR3YXJlCithbmQgZGVyaXZlIGZpbmFuY2lhbCBiZW5lZml0IGZyb20gaXQgd2l0aG91dCBoYXZpbmcgdG8gcmVsZWFzZSB0aGVpcgoraW1wcm92ZW1lbnRzIG9yIGRlcml2YXRpdmVzIHRvIHRoZSBjb21tdW5pdHkgd2hpY2ggZW5hYmxlZCB0aGVtLiBUaGlzIG9jY3VycmVkCithbnkgdGltZSBhbiBlbnRpdHkgZGlkIG5vdCByZWxlYXNlIHRoZWlyIGFwcGxpY2F0aW9uIHRvIGEgInRoaXJkIHBhcnR5Ii4KKworV2hpbGUgdGhlcmUgaXMgYSBjZXJ0YWluIGZyZWVkb20gaW4gdGhpcyBtb2RlbCBvZiBsaWNlbnNpbmcsIGl0IHN0cnVjayB0aGUKK2F1dGhvcnMgb2YgdGhlIFJQTCBhcyBiZWluZyB1bmZhaXIgdG8gdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBhdCBsYXJnZSBhbmQgdG8KK3RoZSBvcmlnaW5hbCBhdXRob3JzIG9mIHRoZSB3b3JrcyBpbiBwYXJ0aWN1bGFyLiBBZnRlciBhbGwsIGJ1ZyBmaXhlcywKK2V4dGVuc2lvbnMsIGFuZCBtZWFuaW5nZnVsIGFuZCB2YWx1YWJsZSBkZXJpdmF0aXZlcyB3ZXJlIG5vdCBjb25zaXN0ZW50bHkKK2ZpbmRpbmcgdGhlaXIgd2F5IGJhY2sgaW50byB0aGUgY29tbXVuaXR5IHdoZXJlIHRoZXkgY291bGQgZnVlbCBmdXJ0aGVyLCBhbmQKK2Zhc3RlciwgZ3Jvd3RoIGFuZCBleHBhbnNpb24gb2YgdGhlIG92ZXJhbGwgb3BlbiBzb3VyY2Ugc29mdHdhcmUgYmFzZS4KKworV2hpbGUgeW91IHNob3VsZCBjbGVhcmx5IHJlYWQgYW5kIHVuZGVyc3RhbmQgdGhlIGVudGlyZSBsaWNlbnNlLCB0aGUgZXNzZW5jZSBvZgordGhlIFJQTCBpcyBmb3VuZCBpbiB0d28gZGVmaW5pdGlvbnM6ICJEZXBsb3kiIGFuZCAiUmVxdWlyZWQgQ29tcG9uZW50cyIuCisKK1JlZ2FyZGluZyBkZXBsb3ltZW50LCB1bmRlciB0aGUgUlBMIHlvdXIgY2hhbmdlcywgYnVnIGZpeGVzLCBleHRlbnNpb25zLCBldGMuCittdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgYXQgbGFyZ2Ugd2hlbiB5b3UgRGVwbG95IGluCithbnkgZm9ybSAtLSBlaXRoZXIgaW50ZXJuYWxseSBvciB0byBhbiBvdXRzaWRlIHBhcnR5LiBPbmNlIHlvdSBzdGFydCBydW5uaW5nCit0aGUgc29mdHdhcmUgeW91IGhhdmUgdG8gc3RhcnQgc2hhcmluZyB0aGUgc29mdHdhcmUuCisKK0Z1cnRoZXIsIHVuZGVyIHRoZSBSUEwgYWxsIGNvbXBvbmVudHMgeW91IGF1dGhvciBpbmNsdWRpbmcgc2NoZW1hcywgc2NyaXB0cywKK3NvdXJjZSBjb2RlLCBldGMuIC0tIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5YHJlIGNvbXBpbGVkIGludG8gYSBzaW5nbGUKK2JpbmFyeSBvciB1c2VkIGFzIHR3byBoYWx2ZXMgb2YgY2xpZW50L3NlcnZlciBhcHBsaWNhdGlvbiAtLSBtdXN0IGJlIHNoYXJlZC4KK1lvdSBoYXZlIHRvIHNoYXJlIHRoZSB3aG9sZSBwaWUsIG5vdCBhbiBpc29sYXRlZCBzbGljZSBvZiBpdC4KKworSW4gYWRkaXRpb24gdG8gdGhlc2UgZ29hbHMsIHRoZSBSUEwgd2FzIGF1dGhvcmVkIHRvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZgordGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gYXMgbWFpbnRhaW5lZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSAoT1NJKS4KKworVGhlIHNwZWNpZmljIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIGFyZSBkZWZpbmVkIGluIHRoZSByZW1haW5kZXIKK29mIHRoaXMgZG9jdW1lbnQuCisKK0xJQ0VOU0UgVEVSTVMKKworMS4wIEdlbmVyYWw7IEFwcGxpY2FiaWxpdHkgJmFtcDsgRGVmaW5pdGlvbnMuIFRoaXMgUmVjaXByb2NhbCBQdWJsaWMgTGljZW5zZQorVmVyc2lvbiAxLjUgKCJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgcHJvZ3JhbXMgb3Igb3RoZXIgd29ya3MgYXMgd2VsbCBhcyBhbnkKK2FuZCBhbGwgdXBkYXRlcyBvciBtYWludGVuYW5jZSByZWxlYXNlcyBvZiBzYWlkIHByb2dyYW1zIG9yIHdvcmtzICgiU29mdHdhcmUiKQorbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hpY2ggdGhlIFNvZnR3YXJlIGNvcHlyaWdodCBob2xkZXIKKygiTGljZW5zb3IiKSBtYWtlcyBhdmFpbGFibGUgY29udGFpbmluZyBhIExpY2Vuc2UgTm90aWNlIChoZXJlaW5hZnRlciBkZWZpbmVkKQorZnJvbSB0aGUgTGljZW5zb3Igc3BlY2lmeWluZyBvciBhbGxvd2luZyB1c2Ugb3IgZGlzdHJpYnV0aW9uIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gdGhlCitjcmVhdGlvbiBvZiBhbiBFeHRlbnNpb24uCisKKzEuMiAiRGVwbG95IiBtZWFucyB0byB1c2UsIFNlcnZlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgTGljZW5zZWQgU29mdHdhcmUKK290aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgUmVzZWFyY2ggYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzCit3aXRob3V0IGxpbWl0YXRpb24sIGFueSBhbmQgYWxsIGludGVybmFsIHVzZSBvciBkaXN0cmlidXRpb24gb2YgTGljZW5zZWQKK1NvZnR3YXJlIHdpdGhpbiBZb3VyIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiBvdGhlciB0aGFuIGZvciBSZXNlYXJjaCBhbmQvb3IKK1BlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZgorTGljZW5zZWQgU29mdHdhcmUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuMyAiRGVyaXZhdGl2ZSBXb3JrcyIgYXMgdXNlZCBpbiB0aGlzIExpY2Vuc2UgaXMgZGVmaW5lZCB1bmRlciBVLlMuIGNvcHlyaWdodAorbGF3LgorCisxLjQgIkVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSIgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkCitpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhIHN1Y2gKK2FzIGRvd25sb2FkIGZyb20gYW4gRlRQIHNlcnZlciBvciB3ZWIgc2l0ZSwgd2hlcmUgc3VjaCBtZWNoYW5pc20gaXMgcHVibGljbHkKK2FjY2Vzc2libGUuCisKKzEuNSAiRXh0ZW5zaW9ucyIgbWVhbnMgYW55IE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIG9yIFJlcXVpcmVkCitDb21wb25lbnRzIGFzIHRob3NlIHRlcm1zIGFyZSBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4KKworMS42ICJMaWNlbnNlIiBtZWFucyB0aGlzIFJlY2lwcm9jYWwgUHVibGljIExpY2Vuc2UuCisKKzEuNyAiTGljZW5zZSBOb3RpY2UiIG1lYW5zIGFueSBub3RpY2UgY29udGFpbmVkIGluIEVYSElCSVQgQS4KKworMS44ICJMaWNlbnNlZCBTb2Z0d2FyZSIgbWVhbnMgYW55IFNvZnR3YXJlIGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZS4KK0xpY2Vuc2VkIFNvZnR3YXJlIGFsc28gaW5jbHVkZXMgYWxsIHByZXZpb3VzIEV4dGVuc2lvbnMgZnJvbSBhbnkgQ29udHJpYnV0b3IKK3RoYXQgWW91IHJlY2VpdmUuCisKKzEuOSAiTGljZW5zb3IiIG1lYW5zIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIGFueSBTb2Z0d2FyZSBwcmV2aW91c2x5IG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hvIHJlbGVhc2VzIHRoZSBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKworMS4xMCAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IGFkZGl0aW9ucyB0byBvciBkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yCitzdHJ1Y3R1cmUgb2YgKGkpIGEgZmlsZSBvciBvdGhlciBzdG9yYWdlIGNvbnRhaW5pbmcgTGljZW5zZWQgU29mdHdhcmUsIG9yIChpaSkKK2FueSBuZXcgZmlsZSBvciBzdG9yYWdlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgTGljZW5zZWQgU29mdHdhcmUsIG9yIChpaWkpCithbnkgZmlsZSBvciBzdG9yYWdlIHdoaWNoIHJlcGxhY2VzIG9yIG90aGVyd2lzZSBhbHRlcnMgdGhlIG9yaWdpbmFsCitmdW5jdGlvbmFsaXR5IG9mIExpY2Vuc2VkIFNvZnR3YXJlIGF0IHJ1bnRpbWUuCisKKzEuMTEgIlBlcnNvbmFsIFVzZSIgbWVhbnMgdXNlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvcgoraGlzIG9yIGhlciBwZXJzb25hbCwgcHJpdmF0ZSBhbmQgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMuIEFuIGluZGl2aWR1YWxgcyB1c2UKK29mIExpY2Vuc2VkIFNvZnR3YXJlIGluIGhpcyBvciBoZXIgY2FwYWNpdHkgYXMgYW4gb2ZmaWNlciwgZW1wbG95ZWUsIG1lbWJlciwKK2luZGVwZW5kZW50IGNvbnRyYWN0b3Igb3IgYWdlbnQgb2YgYSBjb3Jwb3JhdGlvbiwgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uCisoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKzEuMTIgIlJlcXVpcmVkIENvbXBvbmVudHMiIG1lYW5zIGFueSB0ZXh0LCBwcm9ncmFtcywgc2NyaXB0cywgc2NoZW1hLAoraW50ZXJmYWNlIGRlZmluaXRpb25zLCBjb250cm9sIGZpbGVzLCBvciBvdGhlciB3b3JrcyBjcmVhdGVkIGJ5IFlvdSB3aGljaCBhcmUKK3JlcXVpcmVkIGJ5IGEgdGhpcmQgcGFydHkgb2YgYXZlcmFnZSBza2lsbCB0byBzdWNjZXNzZnVsbHkgaW5zdGFsbCBhbmQgcnVuCitMaWNlbnNlZCBTb2Z0d2FyZSBjb250YWluaW5nIFlvdXIgTW9kaWZpY2F0aW9ucywgb3IgdG8gaW5zdGFsbCBhbmQgcnVuIFlvdXIKK0Rlcml2YXRpdmUgV29ya3MuCisKKzEuMTMgIlJlc2VhcmNoIiBtZWFucyBpbnZlc3RpZ2F0aW9uIG9yIGV4cGVyaW1lbnRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YKK3VuZGVyc3RhbmRpbmcgdGhlIG5hdHVyZSBhbmQgbGltaXRzIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgaXRzIHBvdGVudGlhbAordXNlcy4KKworMS4xNCAiU2VydmUiIG1lYW5zIHRvIGRlbGl2ZXIgTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucyBieQorbWVhbnMgb2YgYSBjb21wdXRlciBuZXR3b3JrIHRvIG9uZSBvciBtb3JlIGNvbXB1dGVycyBmb3IgcHVycG9zZXMgb2YgZXhlY3V0aW9uCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQvb3IgWW91ciBFeHRlbnNpb25zLgorCisxLjE1ICJTb2Z0d2FyZSIgbWVhbnMgYW55IGNvbXB1dGVyIHByb2dyYW1zIG9yIG90aGVyIHdvcmtzIGFzIHdlbGwgYXMgYW55Cit1cGRhdGVzIG9yIG1haW50ZW5hbmNlIHJlbGVhc2VzIG9mIHRob3NlIHByb2dyYW1zIG9yIHdvcmtzIHdoaWNoIGFyZQorZGlzdHJpYnV0ZWQgcHVibGljbHkgYnkgTGljZW5zb3IuCisKKzEuMTYgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIHRoZQorTGljZW5zZWQgU29mdHdhcmUgYW5kL29yIFlvdXIgRXh0ZW5zaW9ucywgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGNvbnRhaW5lZAordGhlcmVpbiwgcGx1cyBhbnkgYXNzb2NpYXRlZCB0ZXh0LCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIG9yIG90aGVyCitjb21wb25lbnRzIHJlcXVpcmVkIGJ5IGEgdGhpcmQgcGFydHkgb2YgYXZlcmFnZSBza2lsbCB0byBidWlsZCBhIHJ1bm5pbmcKK3ZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIFlvdXIgRXh0ZW5zaW9ucy4KKworMS4xNyAiVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSIgbWVhbnMgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBCLgorCisxLjE4ICJZb3UiIG9yICJZb3VyIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzCit1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkKK3doaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoLCBZb3UsIHdoZXJlCisiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yCittYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcAorb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbAorb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLjAgQWNjZXB0YW5jZSBPZiBMaWNlbnNlLiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlIHNpbmNlCit5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LCBob3dldmVyIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gdXNlLAorY29weSwgZGlzdHJpYnV0ZSwgbW9kaWZ5LCBvciBjcmVhdGUgZGVyaXZhdGl2ZXMgb2YgZWl0aGVyIHRoZSBTb2Z0d2FyZSBvciBhbnkKK0V4dGVuc2lvbnMgY3JlYXRlZCBieSBhIENvbnRyaWJ1dG9yLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZgoreW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IHBlcmZvcm1pbmcgYW55IG9mIHRoZXNlIGFjdGlvbnMKK1lvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBZb3VyIGFncmVlbWVudCB0byBiZSBib3VuZCBieQorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSUYgWU9VIERPIE5PVCBBR1JFRSBXSVRIIEFMTCBUSEUgVEVSTVMgQU5ECitDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBETyBOT1QgVVNFLCBNT0RJRlksIENSRUFURSBERVJJVkFUSVZFUywgT1IKK0RJU1RSSUJVVEUgVEhFIFNPRlRXQVJFLiBJRiBJVCBJUyBJTVBPU1NJQkxFIEZPUiBZT1UgVE8gQ09NUExZIFdJVEggQUxMIFRIRQorVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIFRIRU4gWU9VIENBTiBOT1QgVVNFLCBNT0RJRlksIENSRUFURQorREVSSVZBVElWRVMsIE9SIERJU1RSSUJVVEUgVEhFIFNPRlRXQVJFLgorCiszLjAgR3JhbnQgb2YgTGljZW5zZSBGcm9tIExpY2Vuc29yLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgordGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gTGljZW5zb3JgcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBhbmQgYW55Cit0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIGRlcml2ZWQgZnJvbSB0aGUgTGljZW5zZWQgU29mdHdhcmUKK3VuZGVyIHRoaXMgTGljZW5zZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworMy4xIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUKK0xpY2Vuc2VkIFNvZnR3YXJlIGFuZCBZb3VyIEV4dGVuc2lvbnMgaW4gYm90aCBTb3VyY2UgQ29kZSBmb3JtIG9yIGFzIGFuCitleGVjdXRhYmxlIHByb2dyYW0uCisKKzMuMiBDcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3KQorb2YgTGljZW5zZWQgU29mdHdhcmUgYnkgYWRkaW5nIHRvIG9yIGRlbGV0aW5nIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUKK29mIHNhaWQgTGljZW5zZWQgU29mdHdhcmUuCisKKzMuMyBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgTGljZW5zb3IsCit0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIExpY2Vuc2VkIFNvZnR3YXJlIG9yCitwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8KK2VuYWJsZSBZb3UgdG8gbWFrZSwgdXNlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBMaWNlbnNlZAorU29mdHdhcmUgb3IgcG9ydGlvbnMgdGhlcmVvZi4KKworMy40IExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgd2l0aAorZGlmZmVyZW50IGZlYXR1cmVzLCBzcGVjaWZpY2F0aW9ucywgY2FwYWJpbGl0aWVzLCBmdW5jdGlvbnMsIGxpY2Vuc2luZyB0ZXJtcywKK2dlbmVyYWwgYXZhaWxhYmlsaXR5IG9yIG90aGVyIGNoYXJhY3RlcmlzdGljcy4gVGl0bGUsIG93bmVyc2hpcCByaWdodHMsIGFuZAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiBhbmQgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHNoYWxsIHJlbWFpbiBpbgorTGljZW5zb3IgYW5kL29yIGl0cyBDb250cmlidXRvcnMuCisKKzQuMCBHcmFudCBvZiBMaWNlbnNlIEZyb20gQ29udHJpYnV0b3IuIEJ5IGFwcGxpY2F0aW9uIG9mIHRoZSBwcm92aXNpb25zIGluCitTZWN0aW9uIDYgYmVsb3csIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LQorZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHNhaWQgQ29udHJpYnV0b3JgcyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cywgYW5kIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIGRlcml2ZWQgZnJvbQordGhlIExpY2Vuc2VkIFNvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworNC4xIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgYW55CitFeHRlbnNpb25zIERlcGxveWVkIGJ5IHN1Y2ggQ29udHJpYnV0b3Igb3IgcG9ydGlvbnMgdGhlcmVvZiwgaW4gYm90aCBTb3VyY2UKK0NvZGUgZm9ybSBvciBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0sIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzIG9yIGFzCitwYXJ0IG9mIERlcml2YXRpdmUgV29ya3MuCisKKzQuMiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKK0NvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIEV4dGVuc2lvbnMKK29yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIGNsYWltIGlzIG5lY2Vzc2FyeQordG8gZW5hYmxlIFlvdSB0byBtYWtlLCB1c2UsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mCitMaWNlbnNlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mLgorCis1LjAgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0bworZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueQorb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgZXhwcmVzc2x5CitzdGF0ZWQgaGVyZWluLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAzIGFuZCA0LCBubyBvdGhlciBwYXRlbnQKK3JpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBhcmUgZ3JhbnRlZCBoZXJlaW4uIFlvdXIgRXh0ZW5zaW9ucyBtYXkgcmVxdWlyZQorYWRkaXRpb25hbCBwYXRlbnQgbGljZW5zZXMgZnJvbSBMaWNlbnNvciBvciBDb250cmlidXRvcnMgd2hpY2ggZWFjaCBtYXkgZ3JhbnQKK2luIGl0cyBzb2xlIGRpc2NyZXRpb24uIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3Igb3IKK2FueSBDb250cmlidXRvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZS4KK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20KK2xpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvcgorb3RoZXJ3aXNlIHdvdWxkIGhhdmUgYSByaWdodCB0byBsaWNlbnNlLgorCis1LjEgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBhbHRob3VnaCBMaWNlbnNvciBhbmQgZWFjaAorQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBMaWNlbnNlZAorU29mdHdhcmUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgYW55CitDb250cmlidXRvciB0aGF0IHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIExpY2Vuc29yIGFuZCBlYWNoCitDb250cmlidXRvciBkaXNjbGFpbSBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyCitlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcworYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgWW91CitoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMKK3JlcXVpcmVkIHRvIGFsbG93IFlvdSB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgaXQgaXMgWW91cgorcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQKK1NvZnR3YXJlLgorCis2LjAgWW91ciBPYmxpZ2F0aW9ucyBBbmQgR3JhbnRzLiBJbiBjb25zaWRlcmF0aW9uIG9mLCBhbmQgYXMgYW4gZXhwcmVzcworY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIFlvdSBoZXJlYnkgYWdyZWUKK3RoYXQgYW55IE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MsIG9yIFJlcXVpcmVkIENvbXBvbmVudHMgKGNvbGxlY3RpdmVseQorRXh0ZW5zaW9ucykgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgU2VjdGlvbiA0LiBBbnkgRXh0ZW5zaW9ucwordGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgRGVwbG95ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA3LiBZb3UKK2hlcmVieSBncmFudCB0byBMaWNlbnNvciBhbmQgYWxsIHRoaXJkIHBhcnRpZXMgYSB3b3JsZC13aWRlLCBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIGxpY2Vuc2UgdW5kZXIgdGhvc2UgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBZb3Ugb3duIG9yCitjb250cm9sIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlcywKK3N1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIExpY2Vuc2VkIFNvZnR3YXJlLCBpbiBhbnkgZm9ybS4gQW55IEV4dGVuc2lvbnMgWW91CittYWtlIGFuZCBEZXBsb3kgbXVzdCBoYXZlIGEgZGlzdGluY3QgdGl0bGUgc28gYXMgdG8gcmVhZGlseSB0ZWxsIGFueQorc3Vic2VxdWVudCB1c2VyIG9yIENvbnRyaWJ1dG9yIHRoYXQgdGhlIEV4dGVuc2lvbnMgYXJlIGJ5IFlvdS4gWW91IG11c3QKK2luY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBvciBkaXJlY3Rpb25zIG9uIGhvdyB0byBvYnRhaW4gYSBjb3B5IHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIEV4dGVuc2lvbnMgWW91IGRpc3RyaWJ1dGUuIFlvdSBhZ3JlZSBub3QgdG8gb2ZmZXIgb3IgaW1wb3NlCithbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUsCitvciBpdHMgRXh0ZW5zaW9ucyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4KKworNi4xIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4gWW91IG11c3QgbWFrZSBhdmFpbGFibGUsIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB0aGUgU291cmNlIENvZGUgb2YgYW55IEV4dGVuc2lvbnMgdGhhdCBZb3UgRGVwbG95LCB2aWEgYW4KK0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbS4gVGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgdmVyc2lvbiB0aGF0IFlvdQorRGVwbG95IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgd2l0aGluIG9uZSAoMSkgbW9udGggb2Ygd2hlbiB5b3UgRGVwbG95IGFuZCBtdXN0CityZW1haW4gYXZhaWxhYmxlIGZvciBubyBsZXNzIHRoYW4gdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIFlvdSBjZWFzZQordG8gRGVwbG95LiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB0byBlYWNoCit2ZXJzaW9uIFlvdSBEZXBsb3kgcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgYW55Citjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRlZCB1bmRlciB0aGlzIFNlY3Rpb24gaW4gZXhjZXNzIG9mIFlvdXIKK2FjdHVhbCBjb3N0IG9mIGR1cGxpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2Ygc2FpZCBjb3B5LgorCis2LjIgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UKK2NyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBiZSBkb2N1bWVudGVkIGluIHRoZSBTb3VyY2UgQ29kZSwgY2xlYXJseQorZGVzY3JpYmluZyB0aGUgYWRkaXRpb25zLCBjaGFuZ2VzIG9yIGRlbGV0aW9ucyBZb3UgbWFkZS4gWW91IG11c3QgaW5jbHVkZSBhCitwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbnMgYXJlIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCitmcm9tIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgaW5jbHVkZSB0aGUgbmFtZXMgb2YgdGhlIExpY2Vuc29yIGFuZCBhbnkKK0NvbnRyaWJ1dG9yIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBpbiAoaSkgdGhlIFNvdXJjZSBDb2RlIGFuZCAoaWkpIGluIGFueQorbm90aWNlIGRpc3BsYXllZCBieSB0aGUgTGljZW5zZWQgU29mdHdhcmUgWW91IGRpc3RyaWJ1dGUgb3IgaW4gcmVsYXRlZAorZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZS4gWW91IG1heSBub3QgbW9kaWZ5IG9yIGRlbGV0ZSBhbnkgcHJlLWV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzLAorY2hhbmdlIG5vdGljZXMgb3IgTGljZW5zZSB0ZXh0IGluIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRob3V0IHdyaXR0ZW4KK3Blcm1pc3Npb24gb2YgdGhlIHJlc3BlY3RpdmUgTGljZW5zb3Igb3IgQ29udHJpYnV0b3IuCisKKzYuMyBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworYS4gVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBZb3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdG8gYSB0aGlyZCBwYXJ0eWBzCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMKK0xpY2Vuc2UsIFlvdSBtdXN0IGluY2x1ZGUgYSBodW1hbi1yZWFkYWJsZSBmaWxlIHdpdGggWW91ciBkaXN0cmlidXRpb24gdGhhdAorZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhCityZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4KKworYi4gQ29udHJpYnV0b3IgQVBJcy4gSWYgWW91ciBFeHRlbnNpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKK2ludGVyZmFjZSAoIkFQSSIpIGFuZCBZb3UgaGF2ZSBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHRoYXQgYXJlCityZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIFlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGlzCitpbmZvcm1hdGlvbiBpbiBhIGh1bWFuLXJlYWRhYmxlIGZpbGUgc3VwcGxpZWQgd2l0aCBZb3VyIGRpc3RyaWJ1dGlvbi4KKworYy4gUmVwcmVzZW50YXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gNi4zKGEpCithYm92ZSwgWW91IGJlbGlldmUgdGhhdCBhbnkgRXh0ZW5zaW9ucyBZb3UgZGlzdHJpYnV0ZSBhcmUgWW91ciBvcmlnaW5hbAorY3JlYXRpb25zIGFuZCB0aGF0IFlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkKK3RoaXMgTGljZW5zZS4KKworNi40IFJlcXVpcmVkIE5vdGljZXMuCisKK2EuIExpY2Vuc2UgVGV4dC4gWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvCithY3F1aXJlIGEgY29weSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBZb3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UgQ29kZSBvZgorYW55IEV4dGVuc2lvbnMgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSwgd2hlcmV2ZXIgWW91IGRlc2NyaWJlCityZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gTGljZW5zZWQgU29mdHdhcmUuCisKK2IuIExpY2Vuc2UgTm90aWNlLiBZb3UgbXVzdCBkdXBsaWNhdGUgYW55IG5vdGljZSBjb250YWluZWQgaW4gRVhISUJJVCBBICh0aGUKKyJMaWNlbnNlIE5vdGljZSIpIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55IGNvcHkgWW91IGRpc3RyaWJ1dGUKK29mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zLiBJZiBZb3UgY3JlYXRlIGFuIEV4dGVuc2lvbiwgWW91CittYXkgYWRkIFlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBTb3VyY2UgQ29kZSBhbmQgYWNjb21wYW55aW5nCitkb2N1bWVudGF0aW9uIGFsb25nIHdpdGggYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udHJpYnV0aW9uLiBJZiBpdCBpcyBub3QKK3Bvc3NpYmxlIHRvIHB1dCB0aGUgTGljZW5zZSBOb3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cworc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBMaWNlbnNlIE5vdGljZSBpbiBhIGxvY2F0aW9uIHdoZXJlIGEKK3VzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuCisKK2MuIFNvdXJjZSBDb2RlIEF2YWlsYWJpbGl0eS4gWW91IG11c3Qgbm90aWZ5IHRoZSBzb2Z0d2FyZSBjb21tdW5pdHkgb2YgdGhlCithdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUgdG8gWW91ciBFeHRlbnNpb25zIHdpdGhpbiBvbmUgKDEpIG1vbnRoIG9mIHRoZSBkYXRlCitZb3UgaW5pdGlhbGx5IERlcGxveSBhbmQgaW5jbHVkZSBpbiBzdWNoIG5vdGlmaWNhdGlvbiBhIGRlc2NyaXB0aW9uIG9mIHRoZQorRXh0ZW5zaW9ucywgYW5kIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYWNxdWlyZSB0aGUgU291cmNlIENvZGUuIFNob3VsZCBzdWNoCitpbnN0cnVjdGlvbnMgY2hhbmdlIHlvdSBtdXN0IG5vdGlmeSB0aGUgc29mdHdhcmUgY29tbXVuaXR5IG9mIHJldmlzZWQKK2luc3RydWN0aW9ucyB3aXRoaW4gb25lICgxKSBtb250aCBvZiB0aGUgZGF0ZSBvZiBjaGFuZ2UuIFlvdSBtdXN0IHByb3ZpZGUKK25vdGlmaWNhdGlvbiBieSBwb3N0aW5nIHRvIGFwcHJvcHJpYXRlIG5ld3MgZ3JvdXBzLCBtYWlsaW5nIGxpc3RzLCB3ZWJsb2dzLCBvcgorb3RoZXIgc2l0ZXMgd2hlcmUgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIHNlYXJjaCBlbmdpbmUgd291bGQgcmVhc29uYWJseSBiZQorZXhwZWN0ZWQgdG8gaW5kZXggeW91ciBwb3N0IGluIHJlbGF0aW9uc2hpcCB0byBxdWVyaWVzIHJlZ2FyZGluZyB0aGUgTGljZW5zZWQKK1NvZnR3YXJlIGFuZC9vciBZb3VyIEV4dGVuc2lvbnMuCisKK2QuIFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbi4gWW91IG11c3QgZHVwbGljYXRlIGFueSBub3RpY2UgY29udGFpbmVkIGluCitFWEhJQklUIEIgKHRoZSAiVXNlci1WaXNpYmxlIEF0dHJpYnV0aW9uIE5vdGljZSIpIGluIGVhY2ggdXNlci12aXNpYmxlIGRpc3BsYXkKK29mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgWW91ciBFeHRlbnNpb25zIHdoaWNoIGRlbGluZWF0ZXMgY29weXJpZ2h0LAorb3duZXJzaGlwLCBvciBzaW1pbGFyIGF0dHJpYnV0aW9uIGluZm9ybWF0aW9uLiBJZiBZb3UgY3JlYXRlIGFuIEV4dGVuc2lvbiwKK1lvdSBtYXkgYWRkIFlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yLCBhbmQgYWRkIFlvdXIgYXR0cmlidXRpb24gbm90aWNlLCBhcyBhbgorZXF1YWxseSB2aXNpYmxlIGFuZCBmdW5jdGlvbmFsIGVsZW1lbnQgb2YgYW55IFVzZXItVmlzaWJsZSBBdHRyaWJ1dGlvbiBOb3RpY2UKK2NvbnRlbnQuIFRvIGVuc3VyZSBwcm9wZXIgYXR0cmlidXRpb24sIFlvdSBtdXN0IGFsc28gaW5jbHVkZSBzdWNoIFVzZXItVmlzaWJsZQorQXR0cmlidXRpb24gTm90aWNlIGluIGF0IGxlYXN0IG9uZSBsb2NhdGlvbiBpbiB0aGUgU29mdHdhcmUgZG9jdW1lbnRhdGlvbgord2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIG5vdGljZS4KKworNi41IEFkZGl0aW9uYWwgVGVybXMuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YKK0xpY2Vuc2VkIFNvZnR3YXJlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uCitiZWhhbGYgb2YgdGhlIExpY2Vuc29yIG9yIGFueSBDb250cmlidXRvciBleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIG90aGVyCithZ3JlZW1lbnRzIGJldHdlZW4geW91IGFuZCBMaWNlbnNvciBvciBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBjbGVhciB0aGF0Cithbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91CithbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBMaWNlbnNvciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yCithbnkgbGlhYmlsaXR5IHBsdXMgYXR0b3JuZXkgZmVlcywgY29zdHMsIGFuZCByZWxhdGVkIGV4cGVuc2VzIGR1ZSB0byBhbnkgc3VjaAorYWN0aW9uIG9yIGNsYWltIGluY3VycmVkIGJ5IHRoZSBMaWNlbnNvciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mCit3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzYuNiBDb25mbGljdHMgV2l0aCBPdGhlciBMaWNlbnNlcy4gV2hlcmUgYW55IHBvcnRpb24gb2YgWW91ciBFeHRlbnNpb25zLCBieQordmlydHVlIG9mIGJlaW5nIERlcml2YXRpdmUgV29ya3Mgb2YgYW5vdGhlciBwcm9kdWN0IG9yIHNpbWlsYXIgY2lyY3Vtc3RhbmNlLAorZmFsbCB1bmRlciB0aGUgdGVybXMgb2YgYW5vdGhlciBsaWNlbnNlLCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIHNob3VsZCBiZQoraG9ub3JlZCBob3dldmVyIFlvdSBtdXN0IGFsc28gbWFrZSBZb3VyIEV4dGVuc2lvbnMgYXZhaWxhYmxlIHVuZGVyIHRoaXMKK0xpY2Vuc2UuIElmIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgY29udGludWUgdG8gY29uZmxpY3Qgd2l0aCB0aGUgdGVybXMgb2YKK3RoZSBvdGhlciBsaWNlbnNlIHlvdSBtYXkgd3JpdGUgdGhlIExpY2Vuc29yIGZvciBwZXJtaXNzaW9uIHRvIHJlc29sdmUgdGhlCitjb25mbGljdCBpbiBhIGZhc2hpb24gdGhhdCByZW1haW5zIGNvbnNpc3RlbnQgd2l0aCB0aGUgaW50ZW50IG9mIHRoaXMgTGljZW5zZS4KK1N1Y2ggcGVybWlzc2lvbiB3aWxsIGJlIGdyYW50ZWQgYXQgdGhlIHNvbGUgZGlzY3JldGlvbiBvZiB0aGUgTGljZW5zb3IuCisKKzcuMCBWZXJzaW9ucyBvZiBUaGlzIExpY2Vuc2UuIExpY2Vuc29yIG1heSBwdWJsaXNoIGZyb20gdGltZSB0byB0aW1lIHJldmlzZWQKK3ZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBPbmNlIExpY2Vuc2VkIFNvZnR3YXJlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhCitwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlcgordGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObworb25lIG90aGVyIHRoYW4gTGljZW5zb3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8KK0xpY2Vuc2VkIFNvZnR3YXJlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis3LjEgSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgd2hpY2ggWW91IG1heSBkbworb25seSBpbiBvcmRlciB0byBhcHBseSBpdCB0byBzb2Z0d2FyZSB0aGF0IGlzIG5vdCBhbHJlYWR5IExpY2Vuc2VkIFNvZnR3YXJlCit1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtdXN0IHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QgY29uZnVzaW5nbHkKK3NpbWlsYXIgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciBsaWNlbnNlIGNvbnRhaW5zCit0ZXJtcyB0aGF0IGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4gSW4gc28gbmFtaW5nIFlvdXIgbGljZW5zZSwgWW91IG1heSBub3QKK3VzZSBhbnkgdHJhZGVtYXJrIG9mIExpY2Vuc29yIG9yIG9mIGFueSBDb250cmlidXRvci4gU2hvdWxkIFlvdXIgbW9kaWZpY2F0aW9ucwordG8gdGhpcyBMaWNlbnNlIGJlIGxpbWl0ZWQgdG8gYWx0ZXJhdGlvbiBvZiBhKSBTZWN0aW9uIDEzLjggc29sZWx5IHRvIG1vZGlmeQordGhlIGxlZ2FsIEp1cmlzZGljdGlvbiBvciBWZW51ZSBmb3IgZGlzcHV0ZXMsIGIpIEVYSElCSVQgQSBzb2xlbHkgdG8gZGVmaW5lCitMaWNlbnNlIE5vdGljZSB0ZXh0LCBvciBjKSB0byBFWEhJQklUIEIgc29sZWx5IHRvIGRlZmluZSBhIFVzZXItVmlzaWJsZQorQXR0cmlidXRpb24gTm90aWNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHJlZmVyIHRvIFlvdXIgTGljZW5zZSBhcyB0aGUKK1JlY2lwcm9jYWwgUHVibGljIExpY2Vuc2Ugb3Igc2ltcGx5IHRoZSBSUEwuCisKKzguMCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UKK09OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBGUkVFCitPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCitGVVJUSEVSIFRIRVJFIElTIE5PIFdBUlJBTlRZIE1BREUgQU5EIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgQVJFIERJU0NMQUlNRUQKK1RIQVQgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIE1FRVRTIE9SIENPTVBMSUVTIFdJVEggQU5ZIERFU0NSSVBUSU9OIE9GCitQRVJGT1JNQU5DRSBPUiBPUEVSQVRJT04sIFNBSUQgQ09NUEFUSUJJTElUWSBBTkQgU1VJVEFCSUxJVFkgQkVJTkcgWU9VUgorUkVTUE9OU0lCSUxJVFkuIExJQ0VOU09SIERJU0NMQUlNUyBBTlkgV0FSUkFOVFksIElNUExJRUQgT1IgRVhQUkVTU0VELCBUSEFUCitBTlkgQ09OVFJJQlVUT1JgUyBFWFRFTlNJT05TIE1FRVQgQU5ZIFNUQU5EQVJEIE9GIENPTVBBVElCSUxJVFkgT1IgREVTQ1JJUFRJT04KK09GIFBFUkZPUk1BTkNFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElDRU5TRUQgU09GVFdBUkUgSVMgV0lUSCBZT1UuIFNIT1VMRCBMSUNFTlNFRCBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZCitSRVNQRUNULCBZT1UgKEFORCBOT1QgVEhFIExJQ0VOU09SIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUCitPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFVOREVSIFRIRSBURVJNUyBPRiBUSElTCitMSUNFTlNPUiBXSUxMIE5PVCBTVVBQT1JUIFRISVMgU09GVFdBUkUgQU5EIElTIFVOREVSIE5PIE9CTElHQVRJT04gVE8gSVNTVUUKK1VQREFURVMgVE8gVEhJUyBTT0ZUV0FSRS4gTElDRU5TT1IgSEFTIE5PIEtOT1dMRURHRSBPRiBFUlJBTlQgQ09ERSBPUiBWSVJVUyBJTgorVEhJUyBTT0ZUV0FSRSwgQlVUIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgSVMgRlJFRSBGUk9NIFNVQ0ggRVJST1JTCitPUiBWSVJVU0VTLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUworTElDRU5TRS4gTk8gVVNFIE9GIExJQ0VOU0VEIFNPRlRXQVJFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis5LjAgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwKK1dIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUKK0xJQ0VOU09SLCBBTlkgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBMSUNFTlNFRCBTT0ZUV0FSRSwgT1IgQU5ZCitTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUgorRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywKK0VWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEgKK09SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZYFMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UCitBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQorRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMKK0VYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuMCBIaWdoIFJpc2sgQWN0aXZpdGllcy4gVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTIE5PVCBGQVVMVC1UT0xFUkFOVCBBTkQgSVMKK05PVCBERVNJR05FRCwgTUFOVUZBQ1RVUkVELCBPUiBJTlRFTkRFRCBGT1IgVVNFIE9SIERJU1RSSUJVVElPTiBBUyBPTi1MSU5FCitDT05UUk9MIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIFJFUVVJUklORyBGQUlMLVNBRkUgUEVSRk9STUFOQ0UsCitTVUNIIEFTIElOIFRIRSBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SCitDT01NVU5JQ0FUSU9OUyBTWVNURU1TLCBBSVIgVFJBRkZJQyBDT05UUk9MLCBESVJFQ1QgTElGRSBTVVBQT1JUIE1BQ0hJTkVTLCBPUgorV0VBUE9OUyBTWVNURU1TLCBJTiBXSElDSCBUSEUgRkFJTFVSRSBPRiBUSEUgTElDRU5TRUQgU09GVFdBUkUgQ09VTEQgTEVBRAorRElSRUNUTFkgVE8gREVBVEgsIFBFUlNPTkFMIElOSlVSWSwgT1IgU0VWRVJFIFBIWVNJQ0FMIE9SIEVOVklST05NRU5UQUwgREFNQUdFCisoIkhJR0ggUklTSyBBQ1RJVklUSUVTIikuIExJQ0VOU09SIEFORCBDT05UUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZIE9GIEZJVE5FU1MgRk9SIEhJR0ggUklTSyBBQ1RJVklUSUVTLgorCisxMS4wIFJlc3BvbnNpYmlsaXR5IGZvciBDbGFpbXMuIEFzIGJldHdlZW4gTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycywgZWFjaAorcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdoaWNoIHNwZWNpZmljYWxseQorZGlzY2xhaW1zIHdhcnJhbnRpZXMgYW5kIGxpbWl0cyBhbnkgbGlhYmlsaXR5IG9mIHRoZSBMaWNlbnNvci4gVGhpcyBwYXJhZ3JhcGgKK2lzIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhbmQgY29udHJvbGxlZCBieSB0aGUgRGlzY2xhaW1lciBPZgorV2FycmFudGllcyBvZiBTZWN0aW9uIDgsIHRoZSBMaW1pdGF0aW9uIE9mIERhbWFnZXMgaW4gU2VjdGlvbiA5LCBhbmQgdGhlCitkaXNjbGFpbWVyIGFnYWluc3QgdXNlIGZvciBIaWdoIFJpc2sgQWN0aXZpdGllcyBpbiBTZWN0aW9uIDEwLiBUaGUgTGljZW5zb3IKK2hhcyB0aGVyZWJ5IGRpc2NsYWltZWQgYWxsIHdhcnJhbnRpZXMgYW5kIGxpbWl0ZWQgYW55IGRhbWFnZXMgdGhhdCBpdCBpcyBvcgorbWF5IGJlIGxpYWJsZSBmb3IuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycyB0bworZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIFNlY3Rpb25zIDgsIDksIGFuZCAxMC4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMi4wIFRlcm1pbmF0aW9uLiBUaGlzIExpY2Vuc2UgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2ltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAxMy42IG9yIGlmCithcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZCBvciBzcGVjaWZpY2FsbHkKK2NvbXBseWluZyB3aXRoIFNlY3Rpb25zIDMsIDQgYW5kL29yIDYsIG9yIHByZXZlbnRzIHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBhbnkKK29mIHRob3NlIFNlY3Rpb25zLCBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZiBMaWNlbnNlZAorU29mdHdhcmUuCisKKzEyLjEgQXV0b21hdGljIFRlcm1pbmF0aW9uIFVwb24gQnJlYWNoLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZAoraGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zCitoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBiZWNvbWluZyBhd2FyZQorb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB0aGF0IGFyZSBwcm9wZXJseQorZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgdGhhdCwgYnkKK3RoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLAorc2hhbGwgc3Vydml2ZS4KKworMTIuMiBUZXJtaW5hdGlvbiBVcG9uIEFzc2VydGlvbiBvZiBQYXRlbnQgSW5mcmluZ2VtZW50LiBJZiBZb3UgaW5pdGlhdGUKK2xpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5CitqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEgQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yIENvbnRyaWJ1dG9yCithZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzICJSZXNwb25kZW50IikKK2FsbGVnaW5nIHRoYXQgTGljZW5zZWQgU29mdHdhcmUgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwKK3RoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBSZXNwb25kZW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAzIG9yCis0IG9mIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSB1cG9uIHNpeHR5ICg2MCkgZGF5cyBub3RpY2UKK2Zyb20gUmVzcG9uZGVudCAodGhlICJOb3RpY2UgUGVyaW9kIikgdW5sZXNzIHdpdGhpbiB0aGF0IE5vdGljZSBQZXJpb2QgWW91CitlaXRoZXIgYWdyZWUgaW4gd3JpdGluZyAoaSkgdG8gcGF5IFJlc3BvbmRlbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJseQorcm95YWx0eSBmb3IgWW91ciBwYXN0IG9yIGZ1dHVyZSB1c2Ugb2YgTGljZW5zZWQgU29mdHdhcmUgbWFkZSBieSBzdWNoCitSZXNwb25kZW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQKK1NvZnR3YXJlIGFnYWluc3Qgc3VjaCBSZXNwb25kZW50LiBJZiB3aXRoaW4gc2FpZCBOb3RpY2UgUGVyaW9kIGEgcmVhc29uYWJsZQorcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlCitwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sIHRoZSByaWdodHMgZ3JhbnRlZCBieQorTGljZW5zb3IgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDMgYW5kIDQgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlCitleHBpcmF0aW9uIG9mIHNhaWQgTm90aWNlIFBlcmlvZC4KKworMTIuMyBSZWFzb25hYmxlIFZhbHVlIG9mIFRoaXMgTGljZW5zZS4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQKK2NsYWltIGFnYWluc3QgUmVzcG9uZGVudCBhbGxlZ2luZyB0aGF0IExpY2Vuc2VkIFNvZnR3YXJlIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkKK2xpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudAorbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzYWlkCitSZXNwb25kZW50IHVuZGVyIFNlY3Rpb25zIDMgYW5kIDQgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nCit0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKzEyLjQgTm8gUmV0cm9hY3RpdmUgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIKK3RoaXMgU2VjdGlvbiBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8KK2Rpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueQorZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzEzLjAgTWlzY2VsbGFuZW91cy4KKworMTMuMSBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgTGljZW5zZWQgU29mdHdhcmUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIKK2FzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZgorImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZQorZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuCitDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00CisoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aXRoIG9ubHkKK3Rob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nCithbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlLCBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbgorYmV0d2VlbiBvciBhbW9uZyBZb3UsIExpY2Vuc29yLCBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50Cit0byB0aGUgY29udHJhcnksIHdoZXRoZXIgZXhwcmVzc2x5LCBieSBpbXBsaWNhdGlvbiwgYXBwZWFyYW5jZSwgb3Igb3RoZXJ3aXNlLgorCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBMaWNlbnNvcmBzCityaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBzdWJjb250cmFjdCwgbWFya2V0LCBvciBkaXN0cmlidXRlCit0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3IKK290aGVyd2lzZSBjb21wZXRlIHdpdGgsIEV4dGVuc2lvbnMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCwgb3IKK2Rpc3RyaWJ1dGUuCisKKzEzLjQgQ29uc2VudCBUbyBCcmVhY2ggTm90IFdhaXZlci4gRmFpbHVyZSBieSBMaWNlbnNvciBvciBDb250cmlidXRvciB0bworZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50CitvZiB0aGF0IG9yIGFueSBvdGhlciBwcm92aXNpb24uCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcKK3RoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkKK3RvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzEzLjYgSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLiBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvcgorWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yCithbGwgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiwKK3RoZW4gWW91IGNhbm5vdCB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUuCisKKzEzLjcgRXhwb3J0IFJlc3RyaWN0aW9ucy4gWW91IG1heSBiZSByZXN0cmljdGVkIHdpdGggcmVzcGVjdCB0byBkb3dubG9hZGluZyBvcgorb3RoZXJ3aXNlIGFjcXVpcmluZywgZXhwb3J0aW5nLCBvciByZWV4cG9ydGluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgYW55Cit1bmRlcmx5aW5nIGluZm9ybWF0aW9uIG9yIHRlY2hub2xvZ3kgYnkgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgYXBwbGljYWJsZQorbGF3cyBhbmQgcmVndWxhdGlvbnMuIEJ5IGRvd25sb2FkaW5nIG9yIGJ5IG90aGVyd2lzZSBvYnRhaW5pbmcgdGhlIExpY2Vuc2VkCitTb2Z0d2FyZSwgWW91IGFyZSBhZ3JlZWluZyB0byBiZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIGFsbAorYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucy4KKworMTMuOCBBcmJpdHJhdGlvbiwgSnVyaXNkaWN0aW9uICZhbXA7IFZlbnVlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKK0NvbG9yYWRvIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcworb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gWW91IGV4cHJlc3NseSBhZ3JlZSB0aGF0CithbnkgZGlzcHV0ZSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3VibWl0dGVkIHRvIGJpbmRpbmcgYXJiaXRyYXRpb24KK3VuZGVyIHRoZSBydWxlcyB0aGVuIHByZXZhaWxpbmcgb2YgdGhlIEFtZXJpY2FuIEFyYml0cmF0aW9uIEFzc29jaWF0aW9uLiBZb3UKK2Z1cnRoZXIgYWdyZWUgdGhhdCBBZGFtcyBDb3VudHksIENvbG9yYWRvIFVTQSBpcyBwcm9wZXIgdmVudWUgYW5kIGdyYW50IHN1Y2gKK2FyYml0cmF0aW9uIHByb2NlZWRpbmcganVyaXNkaWN0aW9uIGFzIG1heSBiZSBhcHByb3ByaWF0ZSBmb3IgcHVycG9zZXMgb2YKK3Jlc29sdmluZyBhbnkgZGlzcHV0ZSB1bmRlciB0aGlzIExpY2Vuc2UuIEp1ZGdlbWVudCB1cG9uIGFueSBhd2FyZCBtYWRlIGluCithcmJpdHJhdGlvbiBtYXkgYmUgZW50ZXJlZCBhbmQgZW5mb3JjZWQgaW4gYW55IGNvdXJ0IG9mIGNvbXBldGVudAoranVyaXNkaWN0aW9uLiBUaGUgYXJiaXRyYXRvciBzaGFsbCBhd2FyZCBhdHRvcm5leWBzIGZlZXMgYW5kIGNvc3RzIG9mCithcmJpdHJhdGlvbiB0byB0aGUgcHJldmFpbGluZyBwYXJ0eS4gU2hvdWxkIGVpdGhlciBwYXJ0eSBmaW5kIGl0IG5lY2Vzc2FyeSB0bworZW5mb3JjZSBpdHMgYXJiaXRyYXRpb24gYXdhcmQgb3Igc2VlayBzcGVjaWZpYyBwZXJmb3JtYW5jZSBvZiBzdWNoIGF3YXJkIGluIGEKK2NpdmlsIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkCit0byByZWFzb25hYmxlIGF0dG9ybmV5YHMgZmVlcyBhbmQgY29zdHMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMKK0NvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuIFlvdSBhbmQgTGljZW5zb3IgZXhwcmVzc2x5IHdhaXZlIGFueSByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueQorbGl0aWdhdGlvbiBjb25jZXJuaW5nIExpY2Vuc2VkIFNvZnR3YXJlIG9yIHRoaXMgTGljZW5zZS4gQW55IGxhdyBvciByZWd1bGF0aW9uCit0aGF0IHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlCitkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjkgRW50aXJlIEFncmVlbWVudC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4KK3RoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLgorCitFWEhJQklUIEEKKworVGhlIExpY2Vuc2UgTm90aWNlIGJlbG93IG11c3QgYXBwZWFyIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGUgb2YgYW55Citjb3B5IFlvdSBkaXN0cmlidXRlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBvciBhbnkgRXh0ZW5zaW9ucyB0aGVyZXRvOgorCitVbmxlc3MgZXhwbGljaXRseSBhY3F1aXJlZCBhbmQgbGljZW5zZWQgZnJvbSBMaWNlbnNvciB1bmRlciBhbm90aGVyCitsaWNlbnNlLCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSZWNpcHJvY2FsIFB1YmxpYworTGljZW5zZSAoIlJQTCIpIFZlcnNpb24gMS41LCBvciBzdWJzZXF1ZW50IHZlcnNpb25zIGFzIGFsbG93ZWQgYnkgdGhlIFJQTCwKK2FuZCBZb3UgbWF5IG5vdCBjb3B5IG9yIHVzZSB0aGlzIGZpbGUgaW4gZWl0aGVyIHNvdXJjZSBjb2RlIG9yIGV4ZWN1dGFibGUKK2Zvcm0sIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBSUEwuCisKK0FsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgUlBMIGlzIHByb3ZpZGVkIHN0cmljdGx5IG9uIGFuICJBUworSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQKK0xJQ0VOU09SIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQKK0xJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQsIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFNlZSB0aGUgUlBMIGZvciBzcGVjaWZpYworbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIFJQTC4KKworRVhISUJJVCBCCisKK1RoZSBVc2VyLVZpc2libGUgQXR0cmlidXRpb24gTm90aWNlIGJlbG93LCB3aGVuIHByb3ZpZGVkLCBtdXN0IGFwcGVhciBpbiBlYWNoCit1c2VyLXZpc2libGUgZGlzcGxheSBhcyBkZWZpbmVkIGluIFNlY3Rpb24gNi40IChkKToKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SUFNMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgxNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlBTTC0xLjAKQEAgLTAsMCArMSwxODIgQEAKKworUmVhbE5ldHdvcmtzIFB1YmxpYyBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMAorCisoUmV2LiBEYXRlIE9jdG9iZXIgMjgsIDIwMDIpCisKK0Fsc28gYXZhaWxhYmxlIGluIHRleHQgZm9ybWF0LgorCisxLiBHZW5lcmFsIERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIFJlYWxOZXR3b3JrcywgSW5jLiwgb3IgYW55IG90aGVyIGVudGl0eSB0aGF0IGVsZWN0cyB0byB1c2UgdGhpcyBsaWNlbnNlLCAoIkxpY2Vuc29yIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZCB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgTGljZW5zb3IgaWRlbnRpZnlpbmcgc3VjaCBwcm9ncmFtIG9yIHdvcmsgYXMgIk9yaWdpbmFsIENvZGUiIGFuZCBzdGF0aW5nIHRoYXQgaXQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlIHZlcnNpb24gMS4wIChvciBzdWJzZXF1ZW50IHZlcnNpb24gdGhlcmVvZikgKCJMaWNlbnNlIikuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIFlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcsIGNvcHlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBzb2Z0d2FyZSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIHNvZnR3YXJlKSwgWW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJbiBhZGRpdGlvbiwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYnkgY2xpY2tpbmcgdGhlIEFjY2VwdCBidXR0b24gb3IgZG93bmxvYWRpbmcgdGhlIHNvZnR3YXJlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBMaWNlbnNvciBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgKGkpIGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBMaWNlbnNvciBhbmQgKGlpKSBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHVzaW5nIG9yIG1ha2luZyB0aGUgT3JpZ2luYWwgQ29kZSBhbG9uZSBhbmQgbm90IGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmU7IGFuZCAoYikgaW4gdGhlIGNhc2Ugd2hlcmUgWW91IGFyZSB0aGUgZ3JhbnRvciBvZiByaWdodHMsIGNsYWltcyBvZiBwYXRlbnRzIHRoYXQgKGkpIGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBZb3UgYW5kIChpaSkgYXJlIGluZnJpbmdlZCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYnkgdXNpbmcgb3IgbWFraW5nIFlvdXIgTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbXBhdGlibGUgU291cmNlIExpY2Vuc2UiIG1lYW5zIGFueSBvbmUgb2YgdGhlIGxpY2Vuc2VzIGxpc3RlZCBvbiBFeGhpYml0IEIgb3IgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvY29tcGxpY2Vuc2Ugb3Igb3RoZXIgbGljZW5zZXMgc3BlY2lmaWNhbGx5IGlkZW50aWZpZWQgYnkgTGljZW5zb3IgaW4gd3JpdGluZy4gTm90d2l0aHN0YW5kaW5nIGFueSB0ZXJtIHRvIHRoZSBjb250cmFyeSBpbiBhbnkgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSwgYW55IGNvZGUgY292ZXJlZCBieSBhbnkgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZSB0aGF0IGlzIHVzZWQgd2l0aCBDb3ZlcmVkIENvZGUgbXVzdCBiZSBtYWRlIHJlYWRpbHkgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm1hdCBmb3Igcm95YWx0eS1mcmVlIHVzZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2Ugb3IgdGhpcyBMaWNlbnNlLgorCisxLjMgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuNCAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS41ICJEZXBsb3kiIG1lYW5zIHRvIHVzZSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBvdGhlciB0aGFuIGZvciBZb3VyIGludGVybmFsIHJlc2VhcmNoIGFuZCBkZXZlbG9wbWVudCAoUiZhbXA7RCkgYW5kL29yIFBlcnNvbmFsIFVzZSwgYW5kIGluY2x1ZGVzIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IGFuZCBhbGwgaW50ZXJuYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgd2l0aGluIFlvdXIgYnVzaW5lc3Mgb3Igb3JnYW5pemF0aW9uIGV4Y2VwdCBmb3IgUiZhbXA7RCB1c2UgYW5kL29yIFBlcnNvbmFsIFVzZSwgYXMgd2VsbCBhcyBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3VibGljZW5zaW5nIG9yIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIENvZGUgYnkgWW91IHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgZm9ybSBvciBtYW5uZXIuCisKKzEuNiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBlaXRoZXIgdGhlIENvdmVyZWQgQ29kZSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0IGxhdywgYW5kIGluY2x1ZGluZyBhbnkgd29yayBjb250YWluaW5nIG9yIGluY2x1ZGluZyBhbnkgcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiBEZXJpdmF0aXZlIFdvcmsgYWxzbyBpbmNsdWRlcyBhbnkgd29yayB3aGljaCBjb21iaW5lcyBhbnkgcG9ydGlvbiBvZiBDb3ZlcmVkIENvZGUgb3IgTW9kaWZpY2F0aW9ucyB3aXRoIGNvZGUgbm90IG90aGVyd2lzZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjcgIkV4dGVybmFsbHkgRGVwbG95IiBtZWFucyB0byBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBpbiBhbnkgd2F5IHRoYXQgbWF5IGJlIGFjY2Vzc2VkIG9yIHVzZWQgYnkgYW55b25lIG90aGVyIHRoYW4gWW91LCB1c2VkIHRvIHByb3ZpZGUgYW55IHNlcnZpY2VzIHRvIGFueW9uZSBvdGhlciB0aGFuIFlvdSwgb3IgdXNlZCBpbiBhbnkgd2F5IHRvIGRlbGl2ZXIgYW55IGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4gWW91LCB3aGV0aGVyIHRoZSBDb3ZlcmVkIENvZGUgaXMgZGlzdHJpYnV0ZWQgdG8gdGhvc2UgcGFydGllcywgbWFkZSBhdmFpbGFibGUgYXMgYW4gYXBwbGljYXRpb24gaW50ZW5kZWQgZm9yIHVzZSBvdmVyIGEgY29tcHV0ZXIgbmV0d29yaywgb3IgdXNlZCB0byBwcm92aWRlIHNlcnZpY2VzIG9yIG90aGVyd2lzZSBkZWxpdmVyIGNvbnRlbnQgdG8gYW55b25lIG90aGVyIHRoYW4gWW91LgorCisxLjguICJJbnRlcmZhY2UiIG1lYW5zIGludGVyZmFjZXMsIGZ1bmN0aW9ucywgcHJvcGVydGllcywgY2xhc3MgZGVmaW5pdGlvbnMsIEFQSXMsIGhlYWRlciBmaWxlcywgR1VJRHMsIFYtVGFibGVzLCBhbmQvb3IgcHJvdG9jb2xzIGFsbG93aW5nIG9uZSBwaWVjZSBvZiBzb2Z0d2FyZSwgZmlybXdhcmUgb3IgaGFyZHdhcmUgdG8gY29tbXVuaWNhdGUgb3IgaW50ZXJvcGVyYXRlIHdpdGggYW5vdGhlciBwaWVjZSBvZiBzb2Z0d2FyZSwgZmlybXdhcmUgb3IgaGFyZHdhcmUuCisKKzEuOSAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuMTAgIk9yaWdpbmFsIENvZGUiIG1lYW5zIChhKSB0aGUgU291cmNlIENvZGUgb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgU291cmNlIENvZGUgb2YgYW55IHVwZGF0ZXMgb3IgdXBncmFkZXMgdG8gc3VjaCBwcm9ncmFtcyBvciB3b3JrcyBtYWRlIGF2YWlsYWJsZSBieSBMaWNlbnNvciB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IExpY2Vuc29yIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2ggd29yazsgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIFNvdXJjZSBDb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUgYXZhaWxhYmxlIGJ5IExpY2Vuc29yIHVuZGVyIHRoaXMgTGljZW5zZS4KKworMS4xMSAiUGVyc29uYWwgVXNlIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbGBzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKzEuMTIgIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIgd29yayB0aGF0IGlzIHN1aXRhYmxlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUgKG9iamVjdCBjb2RlKS4KKworMS4xMyAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gUGVybWl0dGVkIFVzZXM7IENvbmRpdGlvbnMgJmFtcDsgUmVzdHJpY3Rpb25zLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgKHZpYSBkb3dubG9hZGluZyBvciB1c2luZyBDb3ZlcmVkIENvZGUgb3Igb3RoZXJ3aXNlIGluZGljYXRpbmcgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSksIGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgY29weXJpZ2h0IGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgTGljZW5zb3JgcyBjb3B5cmlnaHRzIGNvdmVyIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisyLjEgWW91IG1heSByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIExpY2Vuc29yIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7CisKKyhiKSBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZSBDb2RlIG9mIENvdmVyZWQgQ29kZSBhbmQgZG9jdW1lbnRhdGlvbiBZb3UgZGlzdHJpYnV0ZSwgYW5kIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gc3VjaCBTb3VyY2UgQ29kZSB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlciwgZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDY7CisKKyhjKSBZb3UgbXVzdCBkdXBsaWNhdGUsIHRvIHRoZSBleHRlbnQgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBhbmQgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7CisKKyhkKSBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIEV4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBwdWJsaWNseSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBsaWNlbnNlIGdyYW50cyBzZXQgZm9ydGggaW4gU2VjdGlvbiAzIGJlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRGVwbG95IHRoZSBDb3ZlcmVkIENvZGUgb3IgdHdlbHZlICgxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBZb3Ugc2hvdWxkIHByZWZlcmFibHkgZGlzdHJpYnV0ZSB0aGUgU291cmNlIENvZGUgb2YgWW91ciBEZXBsb3llZCBNb2RpZmljYXRpb25zIGVsZWN0cm9uaWNhbGx5IChlLmcuIGRvd25sb2FkIGZyb20gYSB3ZWIgc2l0ZSk7IGFuZAorCisoZSkgaWYgWW91IERlcGxveSBDb3ZlcmVkIENvZGUgaW4gb2JqZWN0IGNvZGUsIGV4ZWN1dGFibGUgZm9ybSBvbmx5LCBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IG5vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBzdGF0aW5nIHRoYXQgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIGluZm9ybWF0aW9uIG9uIGhvdyBhbmQgd2hlcmUgdG8gb2J0YWluIHN1Y2ggU291cmNlIENvZGUuIFlvdSBtdXN0IGFsc28gaW5jbHVkZSB0aGUgT2JqZWN0IENvZGUgTm90aWNlIHNldCBmb3J0aCBpbiBFeGhpYml0IEEgaW4gdGhlICJhYm91dCIgYm94IG9yIG90aGVyIGFwcHJvcHJpYXRlIHBsYWNlIHdoZXJlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzIGFyZSBwbGFjZWQsIGluY2x1ZGluZyBhbnkgcGFja2FnaW5nIG1hdGVyaWFscy4KKworMi4yIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGVpciByZXNwZWN0aXZlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gTGljZW5zb3IgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIG1ha2UsIHVzZSwgc2VsbCwgaW1wb3J0IG9yIG9mZmVyIGZvciBzYWxlIHRoZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSBzdWNoIGxpY2Vuc2UocykuCisKKzIuMyBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91LCBlZmZlY3RpdmUgb24gdGhlIGRhdGUgWW91IGFjY2VwdCB0aGlzIExpY2Vuc2UgKHZpYSBkb3dubG9hZGluZyBvciB1c2luZyBDb3ZlcmVkIENvZGUgb3Igb3RoZXJ3aXNlIGluZGljYXRpbmcgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSksIGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNvcmBzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlIGFuZCBpbXBvcnQgdGhlIENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlIHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlOgorCisoYSkgWW91IGdyYW50IHRvIExpY2Vuc29yIGFuZCBhbGwgdGhpcmQgcGFydGllcyBhIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUsIHJveWFsdHkgZnJlZSBsaWNlbnNlIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91LCB0byBtYWtlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgdXNlLCBpbXBvcnQsIHJlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgTGljZW5zb3JgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMjsgYW5kCisKKyhiKSBZb3UgZ3JhbnQgdG8gTGljZW5zb3IgYW5kIGl0cyBzdWJzaWRpYXJpZXMgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsIGFuZCBpcnJldm9jYWJsZSBsaWNlbnNlLCB1bmRlciBZb3VyIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0LCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUsIG1vZGlmeSBvciBoYXZlIG1vZGlmaWVkIChmb3IgTGljZW5zb3IgYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMpLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIFlvdXIgTW9kaWZpY2F0aW9ucywgaW4gYW55IGZvcm0gYW5kIGZvciBhbnkgcHVycG9zZSwgdGhyb3VnaCBtdWx0aXBsZSB0aWVycyBvZiBkaXN0cmlidXRpb24uCisKKyhjKSBZb3UgYWdyZWUgbm90IHVzZSBhbnkgaW5mb3JtYXRpb24gZGVyaXZlZCBmcm9tIFlvdXIgdXNlIGFuZCByZXZpZXcgb2YgdGhlIENvdmVyZWQgQ29kZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgYWxnb3JpdGhtcyBvciBpbnZlbnRpb25zIHRoYXQgbWF5IGJlIGNvbnRhaW5lZCBpbiB0aGUgQ292ZXJlZCBDb2RlLCBmb3IgdGhlIHB1cnBvc2Ugb2YgYXNzZXJ0aW5nIGFueSBvZiBZb3VyIHBhdGVudCByaWdodHMsIG9yIGFzc2lzdGluZyBhIHRoaXJkIHBhcnR5IHRvIGFzc2VydCBhbnkgb2YgaXRzIHBhdGVudCByaWdodHMsIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yLgorCis0LiBEZXJpdmF0aXZlIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3Qgb3RoZXJ3aXNlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIERlcml2YXRpdmUgV29yayBhcyBhbiBpbnRlZ3JhdGVkIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaW5jbHVkaW5nIGFsbCBNb2RpZmljYXRpb25zLgorCis0LjEgWW91IG11c3QgY2F1c2UgYW55IERlcml2YXRpdmUgV29yayB0aGF0IHlvdSBkaXN0cmlidXRlLCBwdWJsaXNoIG9yIEV4dGVybmFsbHkgRGVwbG95LCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgbm8gb3RoZXIgbGljZW5zZSBleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjIuIFlvdSBhbHNvIG11c3QgbWFrZSBTb3VyY2UgQ29kZSBhdmFpbGFibGUgZm9yIHRoZSBEZXJpdmF0aXZlIFdvcmsgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgTW9kaWZpY2F0aW9ucywgZGVzY3JpYmVkIGluIFNlY3Rpb25zIDIgYW5kIDMsIGFib3ZlLgorCis0LjIgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZXMuIFNvZnR3YXJlIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4gaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgd2l0aG91dCBhbnkgdXNlIG9mIENvdmVyZWQgQ29kZSBhbmQgd2hpY2ggY29udGFpbiBubyBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUsIE1vZGlmaWNhdGlvbnMgb3Igb3RoZXIgRGVyaXZhdGl2ZSBXb3JrcywgYnV0IGFyZSB1c2VkIG9yIGNvbWJpbmVkIGluIGFueSB3YXkgd2l0aCB0aGUgQ292ZXJlZCBDb2RlIG9yIGFueSBEZXJpdmF0aXZlIFdvcmsgdG8gZm9ybSBhIGxhcmdlciBEZXJpdmF0aXZlIFdvcmssIGFyZSBleGVtcHQgZnJvbSB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0LjEgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCB0aGF0OiB0aGUgc29mdHdhcmUgbW9kdWxlLCBpbmNsdWRpbmcgYW55IHNvZnR3YXJlIHRoYXQgaXMgbGlua2VkIHRvLCBpbnRlZ3JhdGVkIHdpdGgsIG9yIHBhcnQgb2YgdGhlIHNhbWUgYXBwbGljYXRpb25zIGFzLCB0aGUgc29mdHdhcmUgbW9kdWxlIGJ5IGFueSBtZXRob2QgbXVzdCBiZSB3aG9sbHkgc3ViamVjdCB0byBvbmUgb2YgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2VzLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgYWxsIENvdmVyZWQgQ29kZSBtdXN0IGJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGh1cywgdGhlIGVudGlyZSBEZXJpdmF0aXZlIFdvcmsgbXVzdCBiZSBsaWNlbnNlZCB1bmRlciBhIGNvbWJpbmF0aW9uIG9mIHRoZSBSUFNMIChmb3IgQ292ZXJlZCBDb2RlKSBhbmQgYSBDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlIGZvciBhbnkgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgc29mdHdhcmUgbW9kdWxlcyB3aXRoaW4gdGhlIERlcml2YXRpdmUgV29yay4gVGhlIGZvcmVnb2luZyByZXF1aXJlbWVudCBhcHBsaWVzIGV2ZW4gaWYgdGhlIENvbXBhdGlibGUgU291cmNlIExpY2Vuc2Ugd291bGQgb3JkaW5hcmlseSBhbGxvdyB0aGUgc29mdHdhcmUgbW9kdWxlIHRvIGxpbmsgd2l0aCwgb3IgZm9ybSBsYXJnZXIgd29ya3Mgd2l0aCwgb3RoZXIgc29mdHdhcmUgdGhhdCBpcyBub3Qgc3ViamVjdCB0byB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZS4gRm9yIGV4YW1wbGUsIGFsdGhvdWdoIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIHYxLjEgYWxsb3dzIE1vemlsbGEgY29kZSB0byBiZSBjb21iaW5lZCB3aXRoIHByb3ByaWV0YXJ5IHNvZnR3YXJlIHRoYXQgaXMgbm90IHN1YmplY3QgdG8gdGhlIE1QTCwgaWYgTVBMLWxpY2Vuc2VkIGNvZGUgaXMgdXNlZCB3aXRoIENvdmVyZWQgQ29kZSB0aGUgTVBMLWxpY2Vuc2VkIGNvZGUgY291bGQgbm90IGJlIGNvbWJpbmVkIG9yIGxpbmtlZCB3aXRoIGFueSBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgTVBMLiBUaGUgZ2VuZXJhbCBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIDQuMiBpcyB0byBlbmFibGUgdXNlIG9mIENvdmVyZWQgQ29kZSB3aXRoIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSB3aG9sbHkgc3ViamVjdCB0byBhbiBhY2NlcHRhYmxlIG9wZW4gc291cmNlIGxpY2Vuc2UuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgeW91ciB1c2Ugb2Ygc29mdHdhcmUgd2l0aCBDb3ZlcmVkIENvZGUgaXMgYWxsb3dlZCB1bmRlciBZb3VyIGxpY2Vuc2UgdG8gc3VjaCBzb2Z0d2FyZS4KKworNC4zIE1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgQ292ZXJlZCBDb2RlIHdpdGggdGhlIENvdmVyZWQgQ29kZSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIENvdmVyZWQgQ29kZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGRlbGl2ZXIgdGhlIENvdmVyZWQgQ29kZSBmb3IgY29tYmluYXRpb24gYW5kL29yIGludGVncmF0aW9uIHdpdGggYW4gYXBwbGljYXRpb24gcHJldmlvdXNseSBwcm92aWRlZCBieSBZb3UgKGZvciBleGFtcGxlLCB2aWEgYXV0b21hdGljIHVwZGF0aW5nIHRlY2hub2xvZ3kpLCBzdWNoIGNvbWJpbmF0aW9uIGFuZC9vciBpbnRlZ3JhdGlvbiBjb25zdGl0dXRlcyBhIERlcml2YXRpdmUgV29yayBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzUuIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgQ292ZXJlZCBDb2RlLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuIE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgV29ya3MgYW5kL29yIGFueSB1c2Ugb3IgY29tYmluYXRpb24gb2YgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgdGVjaG5vbG9neSBwcm92aWRlZCBieSBMaWNlbnNvciBvciB0aGlyZCBwYXJ0aWVzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgcGF0ZW50IGxpY2Vuc2VzIGZyb20gTGljZW5zb3Igd2hpY2ggTGljZW5zb3IgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZSBvciBjb21iaW5hdGlvbnMgb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKworNS4xLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgb3duZWQgYnkgTGljZW5zb3IgKCJMaWNlbnNvciBNYXJrcyIgZGVmaW5lZCBpbiBFeGhpYml0IEMpIG9yIHRvIGFueSB0cmFkZW1hcmsgb3IgdHJhZGUgbmFtZSBiZWxvbmdpbmcgdG8gYW55IENvbnRyaWJ1dG9yLiBObyBMaWNlbnNvciBNYXJrcyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IHRoZSBMaWNlbnNvciBUcmFkZW1hcmsgUG9saWN5IGRlZmluZWQgaW4gRXhoaWJpdCBDLgorCis2LiBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciBvdGhlciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbiAoIkFkZGl0aW9uYWwgVGVybXMiKSB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgYXMgWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG9idGFpbiB0aGUgcmVjaXBpZW50YHMgYWdyZWVtZW50IHRoYXQgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcyBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIExpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBMaWNlbnNvciBvciBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zLgorCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gTGljZW5zb3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gT25jZSBPcmlnaW5hbCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcHVibGlzaGVkIGJ5IExpY2Vuc29yLiBObyBvbmUgb3RoZXIgdGhhbiBMaWNlbnNvciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzguIE5PIFdBUlJBTlRZIE9SIFNVUFBPUlQuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gaW4gd2hvbGUgb3IgaW4gcGFydCBwcmUtcmVsZWFzZSwgdW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQgd29ya3MuIFRoZSBDb3ZlcmVkIENvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQgbWF5IGJlIGluY29tcGxldGUgb3IgY29udGFpbiBpbmFjY3VyYWNpZXMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIGlzIGF0IFlvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSwgVVBHUkFERVMgT1IgU1VQUE9SVCBPRiBBTlkgS0lORCBBTkQgTElDRU5TT1IgQU5EIExJQ0VOU09SYFMgTElDRU5TT1IoUykgKENPTExFQ1RJVkVMWSBSRUZFUlJFRCBUTyBBUyAiTElDRU5TT1IiIEZPUiBUSEUgUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBBQ0NVUkFDWSwgT0YgUVVJRVQgRU5KT1lNRU5ULCBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gTElDRU5TT1IgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIERPQ1VNRU5UQVRJT04sIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBMSUNFTlNPUiwgQSBMSUNFTlNPUiBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBpbiBoaWdoIHJpc2sgYWN0aXZpdGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiwgYWlyY3JhZnQgY29tbXVuaWNhdGlvbiBzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YgdGhlIENvdmVyZWQgQ29kZSBjb3VsZCBsZWFkIHRvIGRlYXRoLCBwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZS4gTGljZW5zb3IgZGlzY2xhaW1zIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgZml0bmVzcyBmb3Igc3VjaCB1c2VzLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIExJQ0VOU09SIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIFNUUklDVCBMSUFCSUxJVFkpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGIExJQ0VOU09SIE9SIFNVQ0ggQ09OVFJJQlVUT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgTGljZW5zb3JgcyB0b3RhbCBsaWFiaWxpdHkgdG8gWW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlZWQgdGhlIGFtb3VudCBvZiB0ZW4gZG9sbGFycyAoJDEwLjAwKS4KKworMTAuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gTGljZW5zb3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG9yIG9uIGJlaGFsZiBvZiBMaWNlbnNvciAoIkxpY2Vuc29yIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggTGljZW5zb3IgTW9kaWZpY2F0aW9ucyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiBMaWNlbnNvciBtYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggTGljZW5zb3IgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTEuIFRlcm1pbmF0aW9uLgorCisxMS4xIFRlcm0gYW5kIFRlcm1pbmF0aW9uLiBUaGUgdGVybSBvZiB0aGlzIExpY2Vuc2UgaXMgcGVycGV0dWFsIHVubGVzcyB0ZXJtaW5hdGVkIGFzIHByb3ZpZGVkIGJlbG93LiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gTGljZW5zb3IgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTIuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBMaWNlbnNvciBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIExpY2Vuc2UsIGNvbW1lbmNlIGFuIGFjdGlvbiBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCBhZ2FpbnN0IExpY2Vuc29yIChpbmNsdWRpbmcgYnkgY3Jvc3MtY2xhaW0gb3IgY291bnRlciBjbGFpbSBpbiBhIGxhd3N1aXQpOworCisoZCkgdXBvbiB3cml0dGVuIG5vdGljZSBmcm9tIExpY2Vuc29yIGlmIFlvdSwgYXQgYW55IHRpbWUgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgTGljZW5zZSwgY29tbWVuY2UgYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgYW55IHRoaXJkIHBhcnR5IGFsbGVnaW5nIHRoYXQgdGhlIENvdmVyZWQgQ29kZSBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIGFueSBwYXRlbnQgKGluY2x1ZGluZyBieSBjcm9zcy1jbGFpbSBvciBjb3VudGVyIGNsYWltIGluIGEgbGF3c3VpdCkuCisKKzExLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5IGdyYW50ZWQgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIHNob3VsZCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbnMgMywgNSwgOCwgOSwgMTAsIDExLCAxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sIGluZGVtbml0eSBvciBkYW1hZ2VzIG9mIGFueSBzb3J0IHNvbGVseSBhcyBhIHJlc3VsdCBvZiB0ZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0ZXJtcywgYW5kIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YgYW55IHBhcnR5LgorCisxMi4gTWlzY2VsbGFuZW91cy4KKworMTIuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTIuMiBSZWxhdGlvbnNoaXAgb2YgUGFydGllcy4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mIGxlZ2FsIGFzc29jaWF0aW9uIGJldHdlZW4gb3IgYW1vbmcgWW91LCBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTIuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIgTGljZW5zb3JgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBEZXJpdmF0aXZlIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heSBkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTIuNCBXYWl2ZXI7IENvbnN0cnVjdGlvbi4gRmFpbHVyZSBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgd2lsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi41IFNldmVyYWJpbGl0eS4gKGEpIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBzbyBhcyB0byBlZmZlY3QgdGhlIGVjb25vbWljIGJlbmVmaXRzIGFuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gKGIpIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgb3IgcmVzdHJpY3RzIFlvdSBmcm9tIGZ1bGx5IGFuZC9vciBzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUgZW5mb3JjZWFiaWxpdHkgb2YgZWl0aGVyIG9mIHRob3NlIFNlY3Rpb25zLCB0aGlzIExpY2Vuc2Ugd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgYW5kIFlvdSBtdXN0IGltbWVkaWF0ZWx5IGRpc2NvbnRpbnVlIGFueSB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLgorCisxMi42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBMaWNlbnNvciByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgdGFrZSBwbGFjZSBpbiB0aGUgU2VhdHRsZSwgV2FzaGluZ3RvbiwgYW5kIFlvdSBhbmQgTGljZW5zb3IgaGVyZWJ5IGNvbnNlbnQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHdpdGhpbiB0aGF0IERpc3RyaWN0IHdpdGggcmVzcGVjdCB0byB0aGlzIExpY2Vuc2UuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisxMi43IEV4cG9ydC9JbXBvcnQgTGF3cy4gVGhpcyBzb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGFsbCBleHBvcnQgYW5kIGltcG9ydCBsYXdzIGFuZCByZXN0cmljdGlvbnMgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIHlvdSByZWNlaXZlIHRoZSBDb3ZlcmVkIENvZGUgYW5kIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IFlvdSBkbyBub3QgZXhwb3J0LCByZS1leHBvcnQgb3IgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IGRpcmVjdCBwcm9kdWN0IHRoZXJlb2YgaW4gdmlvbGF0aW9uIG9mIGFueSBzdWNoIHJlc3RyaWN0aW9ucywgbGF3cyBvciByZWd1bGF0aW9ucywgb3Igd2l0aG91dCBhbGwgbmVjZXNzYXJ5IGF1dGhvcml6YXRpb25zLgorCisxMi44IEVudGlyZSBBZ3JlZW1lbnQ7IEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIHRoZSBTdGF0ZSBvZiBXYXNoaW5ndG9uLgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzM7IHF1ZSBsZSBwciYjMjMzO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMztkaWcmIzIzMztzIGVuIGFuZ2xhaXMuCisKKworRVhISUJJVCBBLgorCisiQ29weXJpZ2h0ICYjMTY5OyAxOTk1LTIwMDIgUmVhbE5ldHdvcmtzLCBJbmMuIGFuZC9vciBpdHMgbGljZW5zb3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlLCBhbmQgdGhlIGZpbGVzIGluY2x1ZGVkIHdpdGggdGhpcyBmaWxlLCBhcmUgc3ViamVjdCB0byB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBSZWFsTmV0d29ya3MgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIlJQU0wiKSBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuaGVsaXhjb21tdW5pdHkub3JnL2NvbnRlbnQvcnBzbCB1bmxlc3MgeW91IGhhdmUgbGljZW5zZWQgdGhlIGZpbGUgdW5kZXIgdGhlIFJlYWxOZXR3b3JrcyBDb21tdW5pdHkgU291cmNlIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiUkNTTCIpIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5oZWxpeGNvbW11bml0eS5vcmcvY29udGVudC9yY3NsLCBpbiB3aGljaCBjYXNlIHRoZSBSQ1NMIHdpbGwgYXBwbHkuIFlvdSBtYXkgYWxzbyBvYnRhaW4gdGhlIGxpY2Vuc2UgdGVybXMgZGlyZWN0bHkgZnJvbSBSZWFsTmV0d29ya3MuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUlBTTCBvciwgaWYgeW91IGhhdmUgYSB2YWxpZCBSQ1NMIHdpdGggUmVhbE5ldHdvcmtzIGFwcGxpY2FibGUgdG8gdGhpcyBmaWxlLCB0aGUgUkNTTC4gUGxlYXNlIHNlZSB0aGUgYXBwbGljYWJsZSBSUFNMIG9yIFJDU0wgZm9yIHRoZSByaWdodHMsIG9ibGlnYXRpb25zIGFuZCBsaW1pdGF0aW9ucyBnb3Zlcm5pbmcgdXNlIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhlbGl4IEROQSBUZWNobm9sb2d5LiBSZWFsTmV0d29ya3MgaXMgdGhlIGRldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgY29kZSBhbmQgb3ducyB0aGUgY29weXJpZ2h0cyBpbiB0aGUgcG9ydGlvbnMgaXQgY3JlYXRlZC4KKworVGhpcyBmaWxlLCBhbmQgdGhlIGZpbGVzIGluY2x1ZGVkIHdpdGggdGhpcyBmaWxlLCBpcyBkaXN0cmlidXRlZCBhbmQgbWFkZSBhdmFpbGFibGUgb24gYW4gYEFTIElTYCBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIFJFQUxORVRXT1JLUyBIRVJFQlkgRElTQ0xBSU1TIEFMTCBTVUNIIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK1RlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgVGVzdCBTdWl0ZShzKSBMb2NhdGlvbiAoaWYgbGljZW5zZWQgdW5kZXIgdGhlIFJDU0wpOgorCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyIKKworT2JqZWN0IENvZGUgTm90aWNlOiBIZWxpeCBETkEgQ2xpZW50IHRlY2hub2xvZ3kgaW5jbHVkZWQuIENvcHlyaWdodCAmIzE2OTsgUmVhbE5ldHdvcmtzLCBJbmMuLCAxOTk1LTIwMDIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0VYSElCSVQgQgorCitDb21wYXRpYmxlIFNvdXJjZSBMaWNlbnNlcyBmb3IgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UuIFRoZSBmb2xsb3dpbmcgbGlzdCBhcHBsaWVzIHRvIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGFzIG9mIE9jdG9iZXIgMjUsIDIwMDIsIHVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLgorCitBY2FkZW1pYyBGcmVlIExpY2Vuc2UKK0FwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlCitBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UKK0FydGlzdGljIGxpY2Vuc2UKK0F0dHJpYnV0aW9uIEFzc3VyYW5jZSBMaWNlbnNlcworQlNEIGxpY2Vuc2UKK0NvbW1vbiBQdWJsaWMgTGljZW5zZTEKK0VpZmZlbCBGb3J1bSBMaWNlbnNlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKTEKK0dOVSBMaWJyYXJ5IG9yICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpMQorSUJNIFB1YmxpYyBMaWNlbnNlCitJbnRlbCBPcGVuIFNvdXJjZSBMaWNlbnNlCitKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZQorTUlUIGxpY2Vuc2UKK01JVFJFIENvbGxhYm9yYXRpdmUgVmlydHVhbCBXb3Jrc3BhY2UgTGljZW5zZSAoQ1ZXIExpY2Vuc2UpCitNb3Rvc290byBMaWNlbnNlCitNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDEuMCAoTVBMKQorTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgKE1QTCkKK05va2lhIE9wZW4gU291cmNlIExpY2Vuc2UKK09wZW4gR3JvdXAgVGVzdCBTdWl0ZSBMaWNlbnNlCitQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBMaWNlbnNlCitSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZQorU3VuIEluZHVzdHJ5IFN0YW5kYXJkcyBTb3VyY2UgTGljZW5zZSAoU0lTU0wpCitTdW4gUHVibGljIExpY2Vuc2UKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMvTkNTQSBPcGVuIFNvdXJjZSBMaWNlbnNlCitWb3ZpZGEgU29mdHdhcmUgTGljZW5zZSB2LiAxLjAKK1czQyBMaWNlbnNlCitYLk5ldCBMaWNlbnNlCitab3BlIFB1YmxpYyBMaWNlbnNlCit6bGliL2xpYnBuZyBsaWNlbnNlCisxTm90ZTogYmVjYXVzZSB0aGlzIGxpY2Vuc2UgY29udGFpbnMgY2VydGFpbiByZWNpcHJvY2FsIGxpY2Vuc2luZyB0ZXJtcyB0aGF0IHB1cnBvcnQgdG8gZXh0ZW5kIHRvIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGNvZGUsIFlvdSBtYXkgYmUgcHJvaGliaXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBvdGhlcndpc2UgY29tcGF0aWJsZSBsaWNlbnNlIGZyb20gdXNpbmcgY29kZSBsaWNlbnNlZCB1bmRlciBpdHMgdGVybXMgd2l0aCBDb3ZlcmVkIENvZGUgYmVjYXVzZSBDb3ZlcmVkIENvZGUgbWF5IG9ubHkgYmUgbGljZW5zZWQgdW5kZXIgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlIExpY2Vuc2UuIEFueSBhdHRlbXB0IHRvIGFwcGx5IG5vbiBSUFNMIGxpY2Vuc2UgdGVybXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIEdQTCwgdG8gQ292ZXJlZCBDb2RlIGlzIGV4cHJlc3NseSBmb3JiaWRkZW4uIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgWW91ciB1c2Ugb2YgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZWQgY29kZSBkb2VzIG5vdCB2aW9sYXRlIGVpdGhlciB0aGUgUlBTTCBvciB0aGUgQ29tcGF0aWJsZSBTb3VyY2UgTGljZW5zZS4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGlzdCBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy9jb250ZW50L2NvbXBsaWNlbnNlCisKK0VYSElCSVQgQworCitSZWFsTmV0d29ya3NgIFRyYWRlbWFyayBwb2xpY3kuCisKK1JlYWxOZXR3b3JrcyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdHJhZGVtYXJrcyBjb2xsZWN0aXZlbHkgYXMgIkxpY2Vuc29yIFRyYWRlbWFya3MiOiAiUmVhbE5ldHdvcmtzIiwgIlJlYWxQbGF5ZXIiLCAiUmVhbEp1a2Vib3giLCAiUmVhbFN5c3RlbSIsICJSZWFsQXVkaW8iLCAiUmVhbFZpZGVvIiwgIlJlYWxPbmUgUGxheWVyIiwgIlJlYWxNZWRpYSIsICJIZWxpeCIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIFJlYWxOZXR3b3Jrcy4KKworUmVhbE5ldHdvcmtzICJMaWNlbnNvciBUcmFkZW1hcmsgUG9saWN5IiBmb3JiaWRzIGFueSB1c2Ugb2YgTGljZW5zb3IgVHJhZGVtYXJrcyBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IGFuZCBpbiBzdHJpY3QgY29tcGxpYW5jZSBhdCBhbGwgdGltZXMgd2l0aCBSZWFsTmV0d29ya3NgIHRoaXJkIHBhcnR5IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzIHdoaWNoIGFyZSBwb3N0ZWQgYXQgd3d3LnJlYWxuZXR3b3Jrcy5jb20vaW5mby9oZWxpeGxvZ28uaHRtbC4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SU0NQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWRiYmMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUlNDUEwKQEAgLTAsMCArMSwxOTMgQEAKKworUmljb2ggU291cmNlIENvZGUgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjAKKworCisxLiBEZWZpbml0aW9ucy4KKworCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworCisxLjMuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgd2Vic2l0ZSBvciBhbnkgb3RoZXIgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisKKzEuNC4gIkV4ZWN1dGFibGUgQ29kZSIgbWVhbnMgR292ZXJuZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisKKzEuNS4gIkdvdmVybmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKworMS42LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBHb3Zlcm5lZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisKKzEuNy4gIkxpY2Vuc2FibGUiIG1lYW5zIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKworMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworCisxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gR292ZXJuZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKKworKGEpIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyhiKSBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisKKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIHRoZSAiUGxhdGZvcm0gZm9yIEluZm9ybWF0aW9uIEFwcGxpY2F0aW9ucyIgU291cmNlIENvZGUgYXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5IFJTVi4KKworCisxLjExICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgdGhlIGdyYW50b3Igb2YgYSBsaWNlbnNlIHRoZXJldG8uCisKKzEuMTIuICJSU1YiIG1lYW5zIFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuLCBhIENhbGlmb3JuaWEgY29ycG9yYXRpb24gd2l0aCBvZmZpY2VzIGF0IDI4ODIgU2FuZCBIaWxsIFJvYWQsIFN1aXRlIDExNSwgTWVubG8gUGFyaywgQ0EgOTQwMjUtNzAyMi4KKworMS4xMy4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIEdvdmVybmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgRXhlY3V0YWJsZSBDb2RlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIgd2VsbCBrbm93biwgYXZhaWxhYmxlIEdvdmVybmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisKKzEuMTQuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisKKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworMi4xLiBHcmFudCBmcm9tIFJTVi4gUlNWIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisKKworMi4yLiBDb250cmlidXRvciBHcmFudC4gRWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKworCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YsIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBHb3Zlcm5lZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogKGkpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisKKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisKKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBHb3Zlcm5lZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSBDb2RlIHZlcnNpb24gb3IgdmlhIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgYW4gRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIFlvdSBtdXN0IGNhdXNlIGFsbCBHb3Zlcm5lZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IEdvdmVybmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgUlNWIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgUlNWIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIENvZGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBHb3Zlcm5lZCBDb2RlLgorCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisKKzMuNC4xLiBUaGlyZCBQYXJ0eSBDbGFpbXMuIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIFJTViBhbmQgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgR292ZXJuZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuIEluIHRoZSBldmVudCB0aGF0IFlvdSBhcmUgYSBDb250cmlidXRvciwgWW91IHJlcHJlc2VudCB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIGluIHRoZSBMRUdBTCBmaWxlLCB5b3VyIE1vZGlmaWNhdGlvbnMgYXJlIHlvdXIgb3JpZ2luYWwgY3JlYXRpb25zIGFuZCwgdG8gdGhlIGJlc3Qgb2YgeW91ciBrbm93bGVkZ2UsIG5vIHRoaXJkIHBhcnR5IGhhcyBhbnkgY2xhaW0gKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcykgcmVsYXRpbmcgdG8geW91ciBNb2RpZmljYXRpb25zLiBZb3UgcmVwcmVzZW50IHRoYXQgdGhlIExFR0FMIGZpbGUgaW5jbHVkZXMgY29tcGxldGUgZGV0YWlscyBvZiBhbnkgbGljZW5zZSBvciBvdGhlciByZXN0cmljdGlvbiBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnQgb2YgeW91ciBNb2RpZmljYXRpb25zLgorCiszLjQuMi4gQ29udHJpYnV0b3IgQVBJcy4gSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBZb3Ugb3duIG9yIGNvbnRyb2wgcGF0ZW50cyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuIFlvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gR292ZXJuZWQgQ29kZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpLCBZb3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIEdvdmVybmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIFJTViBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBSU1YgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IFJTViBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIENvZGUgVmVyc2lvbnMuIFlvdSBtYXkgZGlzdHJpYnV0ZSBHb3Zlcm5lZCBDb2RlIGluIEV4ZWN1dGFibGUgQ29kZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBHb3Zlcm5lZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgR292ZXJuZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBHb3Zlcm5lZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIG9mIEdvdmVybmVkIENvZGUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgQ29kZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSBSU1Ygb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSBSU1YgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IFJTViBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworCiszLjcuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgR292ZXJuZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIEdvdmVybmVkIENvZGUuCisKKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZXRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIEdvdmVybmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworCis1LiBUcmFkZW1hcmsgVXNhZ2UuCisKKworCis1LjEuIEFkdmVydGlzaW5nIE1hdGVyaWFscy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGUgR292ZXJuZWQgQ29kZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIgorCisKKzUuMi4gRW5kb3JzZW1lbnRzLiBUaGUgbmFtZXMgIlJpY29oLCIgIlJpY29oIFNpbGljb24gVmFsbGV5LCIgYW5kICJSU1YiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIENvbnRyaWJ1dG9yIFZlcnNpb25zIG9yIExhcmdlciBXb3JrcyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgUlNWLgorCisKKzUuMy4gUHJvZHVjdCBOYW1lcy4gQ29udHJpYnV0b3IgVmVyc2lvbnMgYW5kIExhcmdlciBXb3JrcyBtYXkgbm90IGJlIGNhbGxlZCAiUmljb2giIG5vciBtYXkgdGhlIHdvcmQgIlJpY29oIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFJTVi4KKworCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworCisKKzYuMS4gTmV3IFZlcnNpb25zLiBSU1YgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBHb3Zlcm5lZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggR292ZXJuZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgUlNWLiBObyBvbmUgb3RoZXIgdGhhbiBSU1YgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gR292ZXJuZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgorCitHT1ZFUk5FRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIEdPVkVSTkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIEdPVkVSTkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgR09WRVJORUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFJTViBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgR09WRVJORUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCisKKzguIFRlcm1pbmF0aW9uLgorCisKKworOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIEdvdmVybmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorCisKKzguMi4gSWYgWW91IGluaXRpYXRlIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IFJTViBvciBhIENvbnRyaWJ1dG9yIChSU1Ygb3IgdGhlIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIE9yaWdpbmFsIENvZGUgb3IgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UgcHJvdmlkZWQgdG8gWW91IGJ5IHRoZSBQYXJ0aWNpcGFudCwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgT3JpZ2luYWwgQ29kZSBvciB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKworCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4KKworCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworCis5LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgUlNWLCBBTlkgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBHT1ZFUk5FRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIFRPIFRIRSBFWFRFTlQgVEhBVCBBTlkgRVhDTFVTSU9OIE9GIERBTUFHRVMgQUJPVkUgSVMgTk9UIFZBTElELCBZT1UgQUdSRUUgVEhBVCBJTiBOTyBFVkVOVCBXSUxMIFJTVlMgTElBQklMSVRZIFVOREVSIE9SIFJFTEFURUQgVE8gVEhJUyBBR1JFRU1FTlQgRVhDRUVEIEZJVkUgVEhPVVNBTkQgRE9MTEFSUyAoJDUsMDAwKS4gVEhFIEdPVkVSTkVEIENPREUgSVMgTk9UIElOVEVOREVEIEZPUiBVU0UgSU4gQ09OTkVDVElPTiBXSVRIIEFOWSBOVUNMRVIsIEFWSUFUSU9OLCBNQVNTIFRSQU5TSVQgT1IgTUVESUNBTCBBUFBMSUNBVElPTiBPUiBBTlkgT1RIRVIgSU5IRVJFTlRMWSBEQU5HRVJPVVMgQVBQTElDQVRJT04gVEhBVCBDT1VMRCBSRVNVTFQgSU4gREVBVEgsIFBFUlNPTkFMIElOSlVSWSwgQ0FUQVNUUk9QSElDIERBTUFHRSBPUiBNQVNTIERFU1RSVUNUSU9OLCBBTkQgWU9VIEFHUkVFIFRIQVQgTkVJVEhFUiBSU1YgTk9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgT0YgQU5ZIE5BVFVSRSBBUyBBIFJFU1VMVCBPRiBBTlkgU1VDSCBVU0UgT0YgVEhFIEdPVkVSTkVEIENPREUuCisKKworMTAuIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuCisKK1RoZSBHb3Zlcm5lZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIEdvdmVybmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisKKzExLiBNaXNjZWxsYW5lb3VzLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBwYXJ0aWVzIHN1Ym1pdCB0byBwZXJzb25hbCBqdXJpc2RpY3Rpb24gaW4gQ2FsaWZvcm5pYSBhbmQgZnVydGhlciBhZ3JlZSB0aGF0IGFueSBjYXVzZSBvZiBhY3Rpb24gYXJpc2luZyB1bmRlciBvciByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGJyb3VnaHQgaW4gdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gVGhlIGxvc2luZyBwYXJ0eSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzIGFuZCBleHBlbnNlcy4gTm90d2l0aHN0YW5kaW5nIGFueXRoaW5nIHRvIHRoZSBjb250cmFyeSBoZXJlaW4sIFJTViBtYXkgc2VlayBpbmp1bmN0aXZlIHJlbGllZiByZWxhdGVkIHRvIGEgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworCisxMi4gUmVzcG9uc2liaWxpdHkgZm9yIENsYWltcy4KKworRXhjZXB0IGluIGNhc2VzIHdoZXJlIGFub3RoZXIgQ29udHJpYnV0b3IgaGFzIGZhaWxlZCB0byBjb21wbHkgd2l0aCBTZWN0aW9uIDMuNCwgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgWW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBHb3Zlcm5lZCBDb2RlIHlvdSBtYWRlIGF2YWlsYWJsZSwgdGhlIHJldmVudWVzIHlvdSByZWNlaXZlZCBmcm9tIHV0aWxpemluZyBzdWNoIHJpZ2h0cywgYW5kIG90aGVyIHJlbGV2YW50IGZhY3RvcnMuIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggYWZmZWN0ZWQgcGFydGllcyB0byBkaXN0cmlidXRlIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworCisKKyAKKworRVhISUJJVCBBCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBSaWNvaCBTb3VyY2UgQ29kZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IGh0dHA6Ly93d3cucmlzb3VyY2Uub3JnL1JQTAorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhpcyBjb2RlIHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IFJpY29oIFNpbGljb24gVmFsbGV5LCBJbmMuIFBvcnRpb25zIGNyZWF0ZWQgYnkgUmljb2ggU2lsaWNvbiBWYWxsZXksIEluYy4gYXJlIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9SdWJ5IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzJlNTdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvUnVieQpAQCAtMCwwICsxLDYwIEBACisKK1J1YnkgaXMgY29weXJpZ2h0ZWQgZnJlZSBzb2Z0d2FyZSBieSBZdWtpaGlybyBNYXRzdW1vdG8gPG1hdHpAbmV0bGFiLmNvLmpwPi4KK1lvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgZWl0aGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMCisoc2VlIENPUFlJTkcudHh0IGZpbGUpLCBvciB0aGUgY29uZGl0aW9ucyBiZWxvdzoKKworICAxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorICAgICBzb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZQorICAgICBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGluIGFueSB3YXksIHByb3ZpZGVkIHRoYXQKKyAgICAgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZQorICAgICAgICAgIG1ha2UgdGhlbSBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZAorICAgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIGJ5IGFsbG93aW5nCisgICB0aGUgYXV0aG9yIHRvIGluY2x1ZGUgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBzb2Z0d2FyZS4KKworICAgICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgc29mdHdhcmUgb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvcgorICAgICAgICAgIG9yZ2FuaXphdGlvbi4KKworICAgICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgIHdpdGggc3RhbmRhcmQgZXhlY3V0YWJsZXMsIHdoaWNoIG11c3QgYWxzbyBiZSBwcm92aWRlZC4KKworICAgICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBhdXRob3IuCisKKyAgMy4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlCisgICAgIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgYSkgZGlzdHJpYnV0ZSB0aGUgZXhlY3V0YWJsZXMgYW5kIGxpYnJhcnkgZmlsZXMgb2YgdGhlIHNvZnR3YXJlLAorICAgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KQorICAgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb24uCisKKyAgICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorICAgdGhlIHNvZnR3YXJlLgorCisgICAgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCB3aXRoCisgICAgICAgICAgaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgc29mdHdhcmUgZGlzdHJpYnV0aW9uLgorCisgICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworICA0LiBZb3UgbWF5IG1vZGlmeSBhbmQgaW5jbHVkZSB0aGUgcGFydCBvZiB0aGUgc29mdHdhcmUgaW50byBhbnkgb3RoZXIKKyAgICAgc29mdHdhcmUgKHBvc3NpYmx5IGNvbW1lcmNpYWwpLiAgQnV0IHNvbWUgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgorICAgICBhcmUgbm90IHdyaXR0ZW4gYnkgdGhlIGF1dGhvciwgc28gdGhhdCB0aGV5IGFyZSBub3QgdW5kZXIgdGhpcyB0ZXJtcy4KKworICAgICBUaGV5IGFyZSBnYy5jKHBhcnRseSksIHV0aWxzLmMocGFydGx5KSwgcmVnZXguW2NoXSwgc3QuW2NoXSBhbmQgc29tZQorICAgICBmaWxlcyB1bmRlciB0aGUgLi9taXNzaW5nIGRpcmVjdG9yeS4gIFNlZSBlYWNoIGZpbGUgZm9yIHRoZSBjb3B5aW5nCisgICAgIGNvbmRpdGlvbi4KKworICA1LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcyAKKyAgICAgb3V0cHV0IGZyb20gdGhlIHNvZnR3YXJlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlCisgICAgIGNvcHlyaWdodCBvZiB0aGUgc29mdHdhcmUsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIgZ2VuZXJhdGVkIHRoZW0sIAorICAgICBhbmQgbWF5IGJlIHNvbGQgY29tbWVyY2lhbGx5LCBhbmQgbWF5IGJlIGFnZ3JlZ2F0ZWQgd2l0aCB0aGlzCisgICAgIHNvZnR3YXJlLgorCisgIDYuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICAgICBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgIFBVUlBPU0UuCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBEIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0FYLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZmQxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TQVgtUEQKQEAgLTAsMCArMSwzMyBAQAorCitDb3B5cmlnaHQgU3RhdHVzIGZvciBTQVgKKworU0FYIGlzIGZyZWUhCisKK0luIGZhY3QsIGl0YHMgbm90IHBvc3NpYmxlIHRvIG93biBhIGxpY2Vuc2UgdG8gU0FYLCBzaW5jZSBpdGBzIGJlZW4gcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgorCitObyBXYXJyYW50eQorCitCZWNhdXNlIFNBWCBpcyByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBkZXNpZ24gb3IgZm9yIHRoZSBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZyB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kL29yIG90aGVyIHBhcnRpZXMgcHJvdmlkZSBTQVggImFzIGlzIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgU0FYIGlzIHdpdGggeW91LiBTaG91bGQgU0FYIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uCisKK0luIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIGFueSBjb3B5cmlnaHQgaG9sZGVyLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heSBtb2RpZnkgYW5kL29yIHJlZGlzdHJpYnV0ZSBTQVgsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIFNBWCAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3NzIG9mIGRhdGEgb3IgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIHRoaXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mIHRoZSBTQVggdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBwcm9ncmFtcyksIGV2ZW4gaWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgcGFydHkgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCitDb3B5cmlnaHQgRGlzY2xhaW1lcnMKKworVGhpcyBwYWdlIGluY2x1ZGVzIHN0YXRlbWVudHMgdG8gdGhhdCBlZmZlY3QgYnkgRGF2aWQgTWVnZ2luc29uLCB3aG8gd291bGQgaGF2ZSBiZWVuIGFibGUgdG8gY2xhaW0gY29weXJpZ2h0IGZvciB0aGUgb3JpZ2luYWwgd29yay4KKworU0FYIDEuMAorCitWZXJzaW9uIDEuMCBvZiB0aGUgU2ltcGxlIEFQSSBmb3IgWE1MIChTQVgpLCBjcmVhdGVkIGNvbGxlY3RpdmVseSBieSB0aGUgbWVtYmVyc2hpcCBvZiB0aGUgWE1MLURFViBtYWlsaW5nIGxpc3QsIGlzIGhlcmVieSByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorCitObyBvbmUgb3ducyBTQVg6IHlvdSBtYXkgdXNlIGl0IGZyZWVseSBpbiBib3RoIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYnVuZGxlIGl0IHdpdGggeW91ciBzb2Z0d2FyZSBkaXN0cmlidXRpb24sIGluY2x1ZGUgaXQgb24gYSBDRC1ST00sIGxpc3QgdGhlIHNvdXJjZSBjb2RlIGluIGEgYm9vaywgbWlycm9yIHRoZSBkb2N1bWVudGF0aW9uIGF0IHlvdXIgb3duIHdlYiBzaXRlLCBvciB1c2UgaXQgaW4gYW55IG90aGVyIHdheSB5b3Ugc2VlIGZpdC4KKworRGF2aWQgTWVnZ2luc29uLCBNZWdnaW5zb24gVGVjaG5vbG9naWVzIEx0ZC4KKzE5OTgtMDUtMTEKKworU0FYIDIuMAorCitJIGhlcmVieSBhYmFuZG9uIGFueSBwcm9wZXJ0eSByaWdodHMgdG8gU0FYIDIuMCAodGhlIFNpbXBsZSBBUEkgZm9yIFhNTCksIGFuZCByZWxlYXNlIGFsbCBvZiB0aGUgU0FYIDIuMCBzb3VyY2UgY29kZSwgY29tcGlsZWQgY29kZSwgYW5kIGRvY3VtZW50YXRpb24gY29udGFpbmVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGludG8gdGhlIFB1YmxpYyBEb21haW4uIFNBWCBjb21lcyB3aXRoIE5PIFdBUlJBTlRZIG9yIGd1YXJhbnRlZSBvZiBmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4KKworRGF2aWQgTWVnZ2luc29uLCBNZWdnaW5zb24gVGVjaG5vbG9naWVzIEx0ZC4KKzIwMDAtMDUtMDUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TR0ktMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzk5ODU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU0dJLTEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIChjKSBDb3B5cmlnaHQgMTk5MywgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICogQUxMIFJJR0hUUyBSRVNFUlZFRCAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIAorICogYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlCisgKiBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCAKKyAqIHRoZSBuYW1lIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKKyAqIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gCisgKgorICogVEhFIE1BVEVSSUFMIEVNQk9ESUVEIE9OIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgVE8gWU9VICJBUy1JUyIKKyAqIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwKKyAqIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgU0hBTEwgU0lMSUNPTgorICogR1JBUEhJQ1MsIElOQy4gIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZT05FIEVMU0UgRk9SIEFOWSBESVJFQ1QsCisgKiBTUEVDSUFMLCBJTkNJREVOVEFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCisgKiBLSU5ELCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLAorICogTE9TUyBPRiBQUk9GSVQsIExPU1MgT0YgVVNFLCBTQVZJTkdTIE9SIFJFVkVOVUUsIE9SIFRIRSBDTEFJTVMgT0YKKyAqIFRISVJEIFBBUlRJRVMsIFdIRVRIRVIgT1IgTk9UIFNJTElDT04gR1JBUEhJQ1MsIElOQy4gIEhBUyBCRUVOCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIExPU1MsIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFBPU1NFU1NJT04sIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICogCisgKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIAorICogVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvCisgKiByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIEZBUiA1Mi4yMjcuMTkoYykoMikgb3Igc3VicGFyYWdyYXBoCisgKiAoYykoMSkoaWkpIG9mIHRoZSBSaWdodHMgaW4gVGVjaG5pY2FsIERhdGEgYW5kIENvbXB1dGVyIFNvZnR3YXJlCisgKiBjbGF1c2UgYXQgREZBUlMgMjUyLjIyNy03MDEzIGFuZC9vciBpbiBzaW1pbGFyIG9yIHN1Y2Nlc3NvcgorICogY2xhdXNlcyBpbiB0aGUgRkFSIG9yIHRoZSBET0Qgb3IgTkFTQSBGQVIgU3VwcGxlbWVudC4KKyAqIFVucHVibGlzaGVkLS0gcmlnaHRzIHJlc2VydmVkIHVuZGVyIHRoZSBjb3B5cmlnaHQgbGF3cyBvZiB0aGUKKyAqIFVuaXRlZCBTdGF0ZXMuICBDb250cmFjdG9yL21hbnVmYWN0dXJlciBpcyBTaWxpY29uIEdyYXBoaWNzLAorICogSW5jLiwgMjAxMSBOLiAgU2hvcmVsaW5lIEJsdmQuLCBNb3VudGFpbiBWaWV3LCBDQSA5NDAzOS03MzExLgorICoKKyAqIE9wZW5HTChUTSkgaXMgYSB0cmFkZW1hcmsgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorICovCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TTUFJTF9HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjM2ZkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NNQUlMX0dQTApAQCAtMCwwICsxLDE2NCBAQAorVGhpcyBpcyB0aGUgRGViaWFuIEdOVS9MaW51eCBwYWNrYWdlIGRlYmlhbnV0aWxzLgorCitJdCBpcyBhbiBvcmlnaW5hbCBEZWJpYW4gcGFja2FnZS4gIFByb2dyYW1zIGluIGl0IHdlcmUgbWFpbnRhaW5lZCBieQorR3V5IE1hb3IgPG1hb3JAZGViaWFuLm9yZz4sIGFuZCBhcmUgbm93IG1haW50YWluZWQgYnkgQ2xpbnQgQWRhbXMKKzxzY2hpem9AZGViaWFuLm9yZz4uCisKK0FsbCBpdHMgcHJvZ3JhbXMgZXhjZXB0IHJlYWRsaW5rLCBzYXZlbG9nLCBhbmQgd2hpY2ggbWF5IGJlCityZWRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgVmVyc2lvbiAyIG9yIGxhdGVyLAorZm91bmQgb24gRGViaWFuIHN5c3RlbXMgaW4gdGhlIGZpbGUgL3Vzci9zaGFyZS9jb21tb24tbGljZW5zZXMvR1BMLgorCit3aGljaCBpcyBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworcmVhZGxpbmsgaXMgQ29weXJpZ2h0IChjKSAxOTk3IEtlbm5ldGggU3RhaWxleSwgYW5kIG1heSBhbHNvIGJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBjb3B5cmlnaHQuCisKK3NhdmVsb2cgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczogKFRoZSByZXN0IG9mCit0aGlzIGZpbGUgY29uc2lzdHMgb2Ygc2F2ZWxvZydzIGRpc3RyaWJ1dGlvbiB0ZXJtcy4pCisKKyNpZGVudAkiQCgjKXNtYWlsOlJFTEVBU0UtM18yOkNPUFlJTkcsdiAxLjIgMTk5Ni8wNi8xNCAxODo1OToxMCB3b29kcyBFeHAiCisKKwkJICAgICBTTUFJTCBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICAoQ2xhcmlmaWVkIDExIEZlYiAxOTg4KQorCisgQ29weXJpZ2h0IChDKSAgMTk4OCBMYW5kb24gQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIKKyBDb3B5cmlnaHQgKEMpICAxOTkyIFJvbmFsZCBTLiBLYXJyCisgQ29weWxlZnQgKEdOVSkgMTk4OCBMYW5kb24gQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIKKworIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLiAgWW91IGNhbiBhbHNvCisgdXNlIHRoaXMgd29yZGluZyB0byBtYWtlIHRoZSB0ZXJtcyBmb3Igb3RoZXIgcHJvZ3JhbXMuCisKKyAgVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyBrZWVwIHlvdSBhdCB0aGUKK21lcmN5IG9mIHRob3NlIGNvbXBhbmllcy4gIEJ5IGNvbnRyYXN0LCBvdXIgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBpcworaW50ZW5kZWQgdG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgU01BSUwuICBUbyBtYWtlIHN1cmUgdGhhdAoreW91IGdldCB0aGUgcmlnaHRzIHdlIHdhbnQgeW91IHRvIGhhdmUsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMKK3RoYXQgZm9yYmlkIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIKK3RoZSByaWdodHMuICBIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LgorCisgIFNwZWNpZmljYWxseSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gZ2l2ZQorYXdheSBjb3BpZXMgb2YgU01BSUwsIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgZWxzZSBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSBTTUFJTCBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldworZnJlZSBwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gbWFrZSBzdXJlIHRoYXQgZXZlcnlvbmUgaGFzIHN1Y2ggcmlnaHRzLCB3ZSBoYXZlIHRvIGZvcmJpZCB5b3UgdG8KK2RlcHJpdmUgYW55b25lIGVsc2Ugb2YgdGhlc2UgcmlnaHRzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlCitjb3BpZXMgb2YgU01BSUwsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UKK2hhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHRlbGwgdGhlbSB0aGVpciByaWdodHMuCisKKyAgQWxzbywgZm9yIG91ciBvd24gcHJvdGVjdGlvbiwgd2UgbXVzdCBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZQorZmluZHMgb3V0IHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFNNQUlMLiAgSWYgU01BSUwgaXMgbW9kaWZpZWQgYnkKK3NvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0Cit0aGV5IGhhdmUgaXMgbm90IHdoYXQgd2UgZGlzdHJpYnV0ZWQsIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQKK2J5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIG91ciByZXB1dGF0aW9uLgorCisgIFRoZXJlZm9yZSB3ZSAoTGFuZG9uIEN1cnQgTm9sbCBhbmQgUm9uYWxkIFMuIEthcnIpIG1ha2UgdGhlIGZvbGxvd2luZyAKK3Rlcm1zIHdoaWNoIHNheSB3aGF0IHlvdSBtdXN0IGRvIHRvIGJlIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSBvciBjaGFuZ2UgCitTTUFJTC4KKworCisJCQlDT1BZSU5HIFBPTElDSUVTCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiBTTUFJTCBzb3VyY2UgY29kZQorYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGEgdmFsaWQgY29weXJpZ2h0IG5vdGljZSAiQ29weXJpZ2h0CisoQykgMTk4OCBMYW5kb24gQ3VydCBOb2xsICYgUm9uYWxkIFMuIEthcnIiIChvciB3aXRoIHdoYXRldmVyIHllYXIgaXMKK2FwcHJvcHJpYXRlKTsga2VlcCBpbnRhY3QgdGhlIG5vdGljZXMgb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55CitvdGhlciByZWNpcGllbnRzIG9mIHRoZSBTTUFJTCBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLiAgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlCitmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgU01BSUwgb3IgYW55IHBvcnRpb24gb2YgaXQsCithbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGggMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcKKyAgICB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLAorICAgIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBhIGRlcml2YXRpdmUgb2YgU01BSUwgb3IKKyAgICBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyBvbiB0ZXJtcyBpZGVudGljYWwgdG8gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZQorICAgIEFncmVlbWVudCAoZXhjZXB0IHRoYXQgeW91IG1heSBjaG9vc2UgdG8gZ3JhbnQgbW9yZSBleHRlbnNpdmUKKyAgICB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKS4KKworICAgIGMpIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZgorICAgIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5CisgICAgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB1bnJlbGF0ZWQgcHJvZ3JhbSB3aXRoIHRoaXMgcHJvZ3JhbSAob3IgaXRzCitkZXJpdmF0aXZlKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZwordGhlIG90aGVyIHByb2dyYW0gdW5kZXIgdGhlIHNjb3BlIG9mIHRoZXNlIHRlcm1zLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBTTUFJTCAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsCit1bmRlciBQYXJhZ3JhcGggMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGIpIGFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5IGZyZWUgKGV4Y2VwdCBmb3IgYSBub21pbmFsCisgICAgc2hpcHBpbmcgY2hhcmdlKSBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYykgYWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB3aGVyZSB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZC4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub24tY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIGFsb25lLikKKworRm9yIGFuIGV4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IKK2FsbCBtb2R1bGVzIGl0IGNvbnRhaW5zOyBidXQsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGl0IG5lZWQgbm90IGluY2x1ZGUKK3NvdXJjZSBjb2RlIGZvciBtb2R1bGVzIHdoaWNoIGFyZSBzdGFuZGFyZCBsaWJyYXJpZXMgdGhhdCBhY2NvbXBhbnkgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIGZpbGUgcnVucy4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNNQUlMCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgU01BSUwgaXMgdm9pZCBhbmQKK3lvdXIgcmlnaHRzIHRvIHVzZSB0aGUgcHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UgYWdyZWVtZW50IHNoYWxsIGJlCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvbXB1dGVyCitzb2Z0d2FyZSBwcm9ncmFtcyBmcm9tIHlvdSB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBub3QgaGF2ZQordGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIFNNQUlMIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gTGFuZG9uCitDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FyciB2aWEgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhdCA1MQorRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gIFdlIGhhdmUgbm90IHlldAord29ya2VkIG91dCBhIHNpbXBsZSBydWxlIHRoYXQgY2FuIGJlIHN0YXRlZCBoZXJlLCBidXQgd2Ugd2lsbCBvZnRlbgorcGVybWl0IHRoaXMuICBXZSB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlCitmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZwordGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlLgorCitZb3VyIGNvbW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBhYm91dCBvdXIgbGljZW5zaW5nIHBvbGljaWVzIGFuZCBvdXIKK3NvZnR3YXJlIGFyZSB3ZWxjb21lISAgVGhpcyBjb250cmFjdCB3YXMgYmFzZWQgb24gdGhlIGNvbnRyYWN0IG1hZGUgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBQbGVhc2UgY29udGFjdCB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsCitVU0EsIG9yIGNhbGwgKDYxNykgNTQyLTU5NDIgZm9yIGRldGFpbHMgb24gY29weWxlZnRlZCBtYXRlcmlhbCBpbgorZ2VuZXJhbC4KKworCQkgICAgICAgTk8gV0FSUkFOVFkKKworICBCRUNBVVNFIFNNQUlMIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBXRSBQUk9WSURFIEFCU09MVVRFTFkgTk8KK1dBUlJBTlRZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIFNUQVRFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcsIExBTkRPTiBDVVJUIE5PTEwgJiBST05BTEQgUy4gS0FSUiBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBTTUFJTCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBTTUFJTCBJUyBXSVRICitZT1UuICBTSE9VTEQgU01BSUwgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTAorTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIFdJTEwgTEFORE9OIENVUlQgTk9MTCAmCitST05BTEQgUy4gS0FSUiBBTkQvT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORCBSRURJU1RSSUJVVEUKK1NNQUlMIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQorTE9TVCBQUk9GSVRTLCBMT1NUIE1PTklFUywgT1IgT1RIRVIgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRQorKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQKK0lOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUKK1BST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUykgU01BSUwsIEVWRU4gSUYgWU9VIEhBVkUKK0JFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBPUiBGT1IgQU5ZIENMQUlNIEJZCitBTlkgT1RIRVIgUEFSVFkuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TUEwtMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ4YjM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU1BMLTEuMApAQCAtMCwwICsxLDUwNyBAQAorCitTVU4gUFVCTElDIExJQ0VOU0UgVmVyc2lvbiAxLjAKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZQorQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCisxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCit0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLAorcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlCitieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKK2NvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKK2luY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mIGFuZCBjb3JyZXNwb25kaW5nIGRvY3VtZW50YXRpb24gcmVsZWFzZWQKK3dpdGggdGhlIHNvdXJjZSBjb2RlLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKK3RyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CitBLgorCisxLjcuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgorcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLgorCisxLjguICJMaWNlbnNlIiBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCitleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKK3N1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYQorTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKK09yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKK3ByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuMTAuICJPcmlnaW5hbCBDb2RlIi4uLyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCit3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKK09yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQKK2FwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisxLjExLiAiU291cmNlIENvZGUiLi4vIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlCitmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKK2FueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQKK3RvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UKK2NvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMKK2Nob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcword2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcworY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZgordGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIuLi8gbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LAordG8KK2NhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdAorb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CitjbGFpbXM6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgordHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvcgorcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEKK0xhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YKK09yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvcgorc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucwordGhlcmVvZikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZQorb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKK2dyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKQorc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCitieToKKworaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZQorT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvcgoraGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQKK29yCit0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQKK2J5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkCitiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYQorTGFyZ2VyIFdvcms7IGFuZAorCitiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZgorTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbgorY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaAorY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIChvcgorcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5Cit0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2gKK2NvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUKK29uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkCitDb2RlLgorCisoZCkgbm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUKK0NvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvcgoraW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IKK1ZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yCitWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieQorQ292ZXJlZCBDb2RlIGluIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlCitnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCitTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZQorZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYQorY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKK2Rpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlCit2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZQorYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluCitTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCittYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK2VpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCitFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYworRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKKyg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgoraGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCit0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK0NvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHlgcworaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzCitncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IKK211c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkCisiLi4vTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbgorc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZgorQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5Cittb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUKK3RoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlCittYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvCityZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisKK0lmIENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nCitpbnRlcmZhY2UgKCJBUEkiLi4vKSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMKK3doaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QKK2Fsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisoYykgUmVwcmVzZW50YXRpb25zLgorCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbgorMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucworYXJlIENvbnRyaWJ1dG9yYHMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcworc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzCitMaWNlbnNlCisKKy4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKK0NvZGUuIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZQorQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYQorbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkKK3RvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuIElmIFlvdSBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKQorWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KK0V4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uCitmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgb3Igb3duZXJzaGlwCityaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvCitjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eQorb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQorbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4KK2FueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKK29mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlCityZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgordGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCitpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzYCByaWdodHMgcmVsYXRpbmcgdG8gdGhlCitDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKK0NvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heQorY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzCityaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCitMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50CitsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIKK2Zyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKK0luaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieQordGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKK3Rlcm1zIFlvdSBvZmZlci4KKworMy43LiBMYXJnZXIgV29ya3MuCisKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyCitjb2RlCitub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCitXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCityZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24KK211c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CitiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUKK3N1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bwordW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICgiU3VuIikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mCit0aGUKK0xpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAordmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zCitvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTdW4uIE5vIG9uZQorb3RoZXIgdGhhbiBTdW4gaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZAorQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UKK21heQorb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQorZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3Q6IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQKK3RoZSBwaHJhc2VzICJTdW4sIiAiU3VuIFB1YmxpYyBMaWNlbnNlLCIgb3IgIlNQTCIuLi8gb3IgYW55IGNvbmZ1c2luZ2x5CitzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IHRvIG5vdGUgdGhhdCB5b3VyCitsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIKK3RoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZQorU3VuIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsCitPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQQorc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcworTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIi4uL0FTIElTYGAgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLgorVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCitJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULAorWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRQorQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKK0FOWSBDT1ZFUkVEIENPREUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMKK0RJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCitzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCituYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorc2hhbGwgc3Vydml2ZS4KKworOC4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50CitjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIKK29yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KK1lvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nCit0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseQoraW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaAorUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZQorc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwKK3VubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkKK2FncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUKK3JveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaAorUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0bwordGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cworb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90CittdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltCitpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyCitTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZgordGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50YHMKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KK2FueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikKK2FuZCAyLjIoYikgYXJlIHJldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLAorc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorUGFydGljaXBhbnQuCisKKzguMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudAorYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzCitieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzCitncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbgoraW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKK2xpY2Vuc2UuCisKKzguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsCithbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQord2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlcgorcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMCitERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwKK09SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IKK0FOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLAorV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIKK0NPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4KK0lORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKK0VYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTworVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCis0OAorQy5GLlIuIDIuMTAxIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIgorYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIi4uLyBhcyBzdWNoIHRlcm1zIGFyZQordXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLgorMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbAorVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzCitzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCithbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCitXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwKK29yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkCitTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCitzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybgorRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksCitDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzYCBmZWVzIGFuZAorZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KK0FueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0CitzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcworTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKK3Jlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKK291dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCit3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKK3Jlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKK3NoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIGFzCis/TXVsdGlwbGUtTGljZW5zZWQ/LiA/TXVsdGlwbGUtTGljZW5zZWQ/IG1lYW5zIHRoYXQgdGhlIEluaXRpYWwKK0RldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKK1lvdXIgY2hvaWNlIG9mIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFeGhpYml0IEEgLVN1biBQdWJsaWMgTGljZW5zZSBOb3RpY2UuCisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFN1biBQdWJsaWMgTGljZW5zZQorCitWZXJzaW9uIDEuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorCitjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBhdmFpbGFibGUgYXQKKworaHR0cDovL3d3dy5zdW4uY29tLworCitUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fXy4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZQorCitPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fXyBhcmUgQ29weXJpZ2h0CisKKyhDKV9fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcworCitvZiB0aGUgX19fX18gbGljZW5zZSAodGhlID9bX19fXSBMaWNlbnNlPyksIGluIHdoaWNoIGNhc2UgdGhlCisKK3Byb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlIGFib3ZlLgorCitJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZQorCit0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlIHlvdXIKKwordmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIFNQTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZworCit0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQgb3RoZXIKKworcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlCisKK3Byb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgorCitlaXRoZXIgdGhlIFNQTCBvciB0aGUgW19fX10gTGljZW5zZS4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKKwordGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkCisKK3VzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKKworT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU2ltcGxlLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4MzU3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NpbXBsZS0yLjAKQEAgLTAsMCArMSwyNyBAQAorCitTaW1wbGUgUHVibGljIExpY2Vuc2UgKFNpbVBMKQorCitQcmVhbWJsZQorVGhpcyBTaW1wbGUgUHVibGljIExpY2Vuc2UgMi4wIChTaW1QTCAyLjAgZm9yIHNob3J0KSBpcyBhIHBsYWluIGxhbmd1YWdlIGltcGxlbWVudGF0aW9uIG9mIEdQTCAyLjAuICBUaGUgd29yZHMgYXJlIGRpZmZlcmVudCwgYnV0IHRoZSBnb2FsIGlzIHRoZSBzYW1lIC0gdG8gZ3VhcmFudGVlIGZvciBhbGwgdXNlcnMgdGhlIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBzb2Z0d2FyZS4gIElmIGFueW9uZSB3b25kZXJzIGFib3V0IHRoZSBtZWFuaW5nIG9mIHRoZSBTaW1QTCwgdGhleSBzaG91bGQgaW50ZXJwcmV0IGl0IGFzIGNvbnNpc3RlbnQgd2l0aCBHUEwgMi4wLgorU2ltcGxlIFB1YmxpYyBMaWNlbnNlIChTaW1QTCkgMi4wCitUaGUgU2ltUEwgYXBwbGllcyB0byB0aGUgc29mdHdhcmVgcyBzb3VyY2UgYW5kIG9iamVjdCBjb2RlIGFuZCBjb21lcyB3aXRoIGFueSByaWdodHMgdGhhdCBJIGhhdmUgaW4gaXQgKG90aGVyIHRoYW4gdHJhZGVtYXJrcykuIFlvdSBhZ3JlZSB0byB0aGUgU2ltUEwgYnkgY29weWluZywgZGlzdHJpYnV0aW5nLCBvciBtYWtpbmcgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIHNvZnR3YXJlLgorCitZb3UgZ2V0IHRoZSByb3lhbHR5IGZyZWUgcmlnaHQgdG86CitVc2UgdGhlIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZTsKK01ha2UgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdCAodGhpcyBpcyBjYWxsZWQgYSAiRGVyaXZlZCBXb3JrIik7CitDb3B5IGFuZCBkaXN0cmlidXRlIGl0IGFuZCBhbnkgRGVyaXZlZCBXb3JrLgorSWYgeW91IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIG9yIGEgRGVyaXZlZCBXb3JrLCB5b3UgbXVzdCBnaXZlIGJhY2sgdG8gdGhlIGNvbW11bml0eSBieToKK1Byb21pbmVudGx5IG5vdGluZyB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlcyB5b3UgbWFrZTsKK0xlYXZpbmcgb3RoZXIgcGVvcGxlYHMgY29weXJpZ2h0IG5vdGljZXMsIHdhcnJhbnR5IGRpc2NsYWltZXJzLCBhbmQgbGljZW5zZSB0ZXJtcyAgaW4gcGxhY2U7CitQcm92aWRpbmcgdGhlIHNvdXJjZSBjb2RlLCBidWlsZCBzY3JpcHRzLCBpbnN0YWxsYXRpb24gc2NyaXB0cywgYW5kIGludGVyZmFjZSBkZWZpbml0aW9ucyBpbiBhIGZvcm0gdGhhdCBpcyBlYXN5IHRvIGdldCBhbmQgYmVzdCB0byBtb2RpZnk7CitMaWNlbnNpbmcgaXQgdG8gZXZlcnlvbmUgdW5kZXIgU2ltUEwsIG9yIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0ZXJtcyAoc3VjaCBhcyBHUEwgMi4wKSwgd2l0aG91dCBhZGRpbmcgZnVydGhlciByZXN0cmljdGlvbnMgdG8gdGhlIHJpZ2h0cyBwcm92aWRlZDsKK0NvbnNwaWN1b3VzbHkgYW5ub3VuY2luZyB0aGF0IGl0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGF0IGxpY2Vuc2UuCitUaGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCB5b3UgbXVzdCBzaG91bGRlcjoKK1lvdSBnZXQgTk8gV0FSUkFOVElFUy4gTm9uZSBvZiBhbnkga2luZDsKK0lmIHRoZSBzb2Z0d2FyZSBkYW1hZ2VzIHlvdSBpbiBhbnkgd2F5LCB5b3UgbWF5IG9ubHkgcmVjb3ZlciBkaXJlY3QgZGFtYWdlcyB1cCB0byB0aGUgYW1vdW50IHlvdSBwYWlkIGZvciBpdCAodGhhdCBpcyB6ZXJvIGlmIHlvdSBkaWQgbm90IHBheSBhbnl0aGluZykuIFlvdSBtYXkgbm90IHJlY292ZXIgYW55IG90aGVyIGRhbWFnZXMsIGluY2x1ZGluZyB0aG9zZSBjYWxsZWQgImNvbnNlcXVlbnRpYWwgZGFtYWdlcy4iIChUaGUgc3RhdGUgb3IgY291bnRyeSB3aGVyZSB5b3UgbGl2ZSBtYXkgbm90IGFsbG93IHlvdSB0byBsaW1pdCB5b3VyIGxpYWJpbGl0eSBpbiB0aGlzIHdheSwgc28gdGhpcyBtYXkgbm90IGFwcGx5IHRvIHlvdSk7CitUaGUgU2ltUEwgY29udGludWVzIHBlcnBldHVhbGx5LCBleGNlcHQgdGhhdCB5b3VyIGxpY2Vuc2UgcmlnaHRzIGVuZCBhdXRvbWF0aWNhbGx5IGlmOgorWW91IGRvIG5vdCBhYmlkZSBieSB0aGUgImdpdmUgYmFjayB0byB0aGUgY29tbXVuaXR5IiB0ZXJtcyAoeW91ciBsaWNlbnNlZXMgZ2V0IHRvIGtlZXAgdGhlaXIgcmlnaHRzIGlmIHRoZXkgYWJpZGUpOworQW55b25lIHByZXZlbnRzIHlvdSBmcm9tIGRpc3RyaWJ1dGluZyB0aGUgc29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBTaW1QTC4KK0xpY2Vuc2UgZm9yIHRoZSBMaWNlbnNlCitZb3UgbWF5IGRvIGFueXRoaW5nIHRoYXQgeW91IHdhbnQgd2l0aCB0aGUgU2ltUEwgdGV4dDsgaXRgcyBhIGxpY2Vuc2UgZm9ybSB0byB1c2UgaW4gYW55IHdheSB0aGF0IHlvdSBmaW5kIGhlbHBmdWwuICBUbyBhdm9pZCBjb25mdXNpb24sIGhvd2V2ZXIsIGlmIHlvdSBjaGFuZ2UgdGhlIHRlcm1zIGluIGFueSB3YXkgdGhlbiB5b3UgbWF5IG5vdCBjYWxsIHlvdXIgbGljZW5zZSB0aGUgU2ltcGxlIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBTaW1QTCAoYnV0IGZlZWwgZnJlZSB0byBhY2tub3dsZWRnZSB0aGF0IHlvdXIgbGljZW5zZSBpcyAiYmFzZWQgb24gdGhlIFNpbXBsZSBQdWJsaWMgTGljZW5zZSIpLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TbGVlcHljYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlOWQ4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1NsZWVweWNhdApAQCAtMCwwICsxLDkwIEBACisKK1RoZSBTbGVlcHljYXQgTGljZW5zZQorQ29weXJpZ2h0IChjKSAxOTkwLTE5OTkKK1NsZWVweWNhdCBTb2Z0d2FyZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK1JlZGlzdHJpYnV0aW9ucyBpbiBhbnkgZm9ybSBtdXN0IGJlIGFjY29tcGFuaWVkIGJ5IGluZm9ybWF0aW9uIG9uCitob3cgdG8gb2J0YWluIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGZvciB0aGUgREIgc29mdHdhcmUgYW5kIGFueQorYWNjb21wYW55aW5nIHNvZnR3YXJlIHRoYXQgdXNlcyB0aGUgREIgc29mdHdhcmUuIFRoZSBzb3VyY2UgY29kZQorbXVzdCBlaXRoZXIgYmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBvciBiZSBhdmFpbGFibGUgZm9yIG5vCittb3JlIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIG11c3QgYmUKK2ZyZWVseSByZWRpc3RyaWJ1dGFibGUgdW5kZXIgcmVhc29uYWJsZSBjb25kaXRpb25zLiBGb3IgYW4KK2V4ZWN1dGFibGUgZmlsZSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMuIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IKK2ZpbGVzIHRoYXQgdHlwaWNhbGx5IGFjY29tcGFueSB0aGUgbWFqb3IgY29tcG9uZW50cyBvZiB0aGUgb3BlcmF0aW5nCitzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBTTEVFUFlDQVQgU09GVFdBUkUgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK05PTi1JTkZSSU5HRU1FTlQsIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBTTEVFUFlDQVQgU09GVFdBUkUKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQsIDE5OTUKK1RoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCit3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTYGAgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2CitUaGUgUHJlc2lkZW50IGFuZCBGZWxsb3dzIG9mIEhhcnZhcmQgVW5pdmVyc2l0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCittYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKK3dpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBIQVJWQVJEIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVNgYCBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBIQVJWQVJEIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9TdWdhckNSTS0xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2JiNGUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMQpAQCAtMCwwICsxLDQzMSBAQAorCitTVUdBUkNSTSBQVUJMSUMgTElDRU5TRQorCitWZXJzaW9uIDEuMS4zCisKK1RoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uICgiU1BMIikgY29uc2lzdHMgb2YgdGhlIE1vemlsbGEKK1B1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLCBtb2RpZmllZCB0byBiZSBzcGVjaWZpYyB0byBTdWdhckNSTSwgd2l0aCB0aGUKK0FkZGl0aW9uYWwgVGVybXMgaW4gRXhoaWJpdCBCLiBUaGUgb3JpZ2luYWwgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgY2FuIGJlCitmb3VuZCBhdDogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sCisKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMC4xLiAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZQorQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xLiAnJ0NvbnRyaWJ1dG9yJycgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZQorY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiAnJ0NvbnRyaWJ1dG9yIFZlcnNpb24nJyBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yCitNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAnJ0NvdmVyZWQgQ29kZScnIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCitjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZworcG9ydGlvbnMgdGhlcmVvZi4KKworMS40LiAnJ0VsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbScnIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZAoraW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMgdHJhbnNmZXIgb2YgZGF0YS4KKworMS41LiAnJ0V4ZWN1dGFibGUnJyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAnJ0luaXRpYWwgRGV2ZWxvcGVyJycgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAnJ0xhcmdlciBXb3JrJycgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucwordGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gJydMaWNlbnNlJycgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseQorYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuICcnTW9kaWZpY2F0aW9ucycnIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3IKK3N0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4KK0NvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuCisxLjEwLiAnJ09yaWdpbmFsIENvZGUnJyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzCitkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kCit3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQKK0NvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCitoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kCithcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKworMS4xMS4gJydTb3VyY2UgQ29kZScnIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcKK21vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZAoraW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0CitlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZQorQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sCitwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5CithdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdScnIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKK2V4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlCitvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbAorZW50aXRpZXMsICJZb3UnJyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvcgoraXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisiY29udHJvbCcnIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbgorb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKQorb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IKK2JlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKQorTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLAorc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvcgord2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbAorQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vcgorb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlCitkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IKK2NvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsCitDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgorZGV2aWNlcy4KKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykKK0xpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IKK3BvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzCitDb3ZlcmVkIENvZGUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aAoraXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsCitvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZQorYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yCitwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlCitkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvcgorYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZQorZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eQorbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucworbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvcgorVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBDb2RlCitpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91CittdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbgordGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQKK29mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUKK2F2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZQorc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCitNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmCittYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yCithdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0CitsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uCitoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nCit0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yCit1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlCitDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMJycgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5CittYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8KK2NvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlCithdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlCitMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2UKK290aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3Citrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQKK0NvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTAorZmlsZS4KKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkKK2Fib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3Incworb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUKK3JpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZgorWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yCit0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbgorYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yCitvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lCitvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QKK21ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IKK2xpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkKK3RoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YKK1NlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEKK25vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91CitoYXZlIGZ1bGZpbGxlZCB0aGUgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5CitpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQKK0NvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAKK3JpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tCit0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0bworbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZQorcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24KK3VuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zCit3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsCitEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEKK3NpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcworTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3dpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlCittYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkKK2FmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbgorU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuCitFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0CitiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorCis2LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKzYuMS4gTmV3IFZlcnNpb25zLgorU3VnYXJDUk0gSW5jLiAoJydTdWdhckNSTScnKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCitMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24KK251bWJlci4KKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28KK2Nob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YKK3RoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTdWdhckNSTS4gTm8gb25lIG90aGVyIHRoYW4gU3VnYXJDUk0gaGFzIHRoZSByaWdodCB0bworbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAnJ1N1Z2FyQ1JNJycsCisnJ1NQTCcnIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0Cit0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQKK2NsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZQorU3VnYXJDUk0gUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwKK09yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZgordGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMnJyBCQVNJUywgV0lUSE9VVAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKK1FVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRAorQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkKK09USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMKK0xJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTCitESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKzguMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0KKyhleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYQorQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaAorYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkKK3BhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20KK1BhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZgorbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZQorcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlCitDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhCityZWFzb25hYmxlIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbgord3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzCitncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5Cit0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW50J3MKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55CityaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIDIuMihiKSBhcmUKK3Jldm9rZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIFlvdSBmaXJzdCBtYWRlLCB1c2VkLCBzb2xkLCBkaXN0cmlidXRlZCwgb3IKK2hhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nCit0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzCithbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KQorcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlCit2YWx1ZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIKK3NoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50CitvciBsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIKK2xpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4KK3ZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbAorc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWQorT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkKK09GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwKK09SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLAorREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKK09SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTAorSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcKK0ZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSAorTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UCitBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhICcnY29tbWVyY2lhbCBpdGVtLCcnIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLgorMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlJycgYW5kCisnJ2NvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwnJyBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4CitDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLgorMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzCithY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyCitoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zCisoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nCitpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUKK3BhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluCit0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK3N1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mCitDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nCitwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZAorcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkKK2V4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCitBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlCitmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24KK29mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZworaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KK0luaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZQorSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCitZb3VyIGNob2ljZSBvZiB0aGUgU1BMIG9yIHRoZSBhbHRlcm5hdGl2ZSBsaWNlbnNlcywgaWYgYW55LCBzcGVjaWZpZWQgYnkgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbgorMS4xLjMKKygiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCitMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5zdWdhcmNybS5jb20vU1BMCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IKK3RoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXM6IFN1Z2FyQ1JNIE9wZW4gU291cmNlCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBTdWdhckNSTSwgSW5jLgorUG9ydGlvbnMgY3JlYXRlZCBieSBTdWdhckNSTSBhcmUgQ29weXJpZ2h0IChDKSAyMDA0IFN1Z2FyQ1JNLCBJbmMuOworQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KK1tOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YgdGhlCitub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgQ29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQKK29mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlCitmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKworU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEIKKworQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBTdWdhckNSTSBQdWJsaWMgTGljZW5zZS4KKworSS4gRWZmZWN0LgorVGhlc2UgYWRkaXRpb25hbCB0ZXJtcyBkZXNjcmliZWQgaW4gdGhpcyBTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAmbmRhc2g7CitBZGRpdGlvbmFsIFRlcm1zIHNoYWxsIGFwcGx5IHRvIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitJSS4gU3VnYXJDUk0gYW5kIGxvZ28uCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3MKKyJTdWdhckNSTSIgYW5kIHRoZSAiU3VnYXJDUk0iIGxvZ29zIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUKK2luY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMuCisKK0hvd2V2ZXIsIGluIGFkZGl0aW9uIHRvIHRoZSBvdGhlciBub3RpY2Ugb2JsaWdhdGlvbnMsIGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQKK0NvZGUgaW4gRXhlY3V0YWJsZSBhbmQgU291cmNlIENvZGUgZm9ybSBkaXN0cmlidXRlZCBtdXN0LCBhcyBhIGZvcm0gb2YKK2F0dHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIGluY2x1ZGUgb24gZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4gKGkpCit0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gYW5kIChpaSkgdGhlIGNvcHlyaWdodCBub3RpY2UgaW4gdGhlCitzYW1lIGZvcm0gYXMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgZGlzdHJpYnV0ZWQgYnkgU3VnYXJDUk0sCitJbmMuIGF0IHRoZSB0aW1lIG9mIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcHkuIEluIGFkZGl0aW9uLCB0aGUgIlBvd2VyZWQKK2J5IFN1Z2FyQ1JNIiBsb2dvIG11c3QgYmUgdmlzaWJsZSB0byBhbGwgdXNlcnMgYW5kIGJlIGxvY2F0ZWQgYXQgdGhlIHZlcnkKK2JvdHRvbSBjZW50ZXIgb2YgZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4uIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIHRoZQorZGltZW5zaW9ucyBvZiB0aGUgIlBvd2VyZWQgQnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSBhdCBsZWFzdCAxMDYgeAorMjMgcGl4ZWxzLiBXaGVuIHVzZXJzIGNsaWNrIG9uIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBpdCBtdXN0CitkaXJlY3QgdGhlbSBiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJmb3JnZS5vcmcuIEluIGFkZGl0aW9uLCB0aGUgY29weXJpZ2h0Citub3RpY2UgbXVzdCByZW1haW4gdmlzaWJsZSB0byBhbGwgdXNlcnMgYXQgYWxsIHRpbWVzIGF0IHRoZSBib3R0b20gb2YgdGhlIHVzZXIKK2ludGVyZmFjZSBzY3JlZW4uIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlIGNvcHlyaWdodCBub3RpY2UsIGl0IG11c3QgZGlyZWN0IHRoZW0KK2JhY2sgdG8gaHR0cDovL3d3dy5zdWdhcmNybS5jb20KKworCisKKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvU3VnYXJDUk0tMS4xLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5NjgxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1N1Z2FyQ1JNLTEuMS4zCkBAIC0wLDAgKzEsMTYwIEBACisKK1NVR0FSQ1JNIFBVQkxJQyBMSUNFTlNFCisKK1ZlcnNpb24gMS4xLjMKKworVGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gKCJTUEwiKSBjb25zaXN0cyBvZiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSwgbW9kaWZpZWQgdG8gYmUgc3BlY2lmaWMgdG8gU3VnYXJDUk0sIHdpdGggdGhlIEFkZGl0aW9uYWwgVGVybXMgaW4gRXhoaWJpdCBCLiBUaGUgb3JpZ2luYWwgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAxLjEgY2FuIGJlIGZvdW5kIGF0OiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwKKworCisxLiBEZWZpbml0aW9ucy4KKworMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKzEuMS4gYGBDb250cmlidXRvcmBgIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4yLiBgYENvbnRyaWJ1dG9yIFZlcnNpb25gYCBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUsIHByaW9yIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGVgYCBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtYGAgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisKKzEuNS4gYGBFeGVjdXRhYmxlYGAgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisKKzEuNi4gYGBJbml0aWFsIERldmVsb3BlcmBgIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiBgYExhcmdlciBXb3JrYGAgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS44LiBgYExpY2Vuc2VgYCBtZWFucyB0aGlzIGRvY3VtZW50LgorCisxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisxLjkuIGBgTW9kaWZpY2F0aW9uc2BgIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorCitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisxLjEwLiBgYE9yaWdpbmFsIENvZGVgYCBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKzEuMTEuIGBgU291cmNlIENvZGVgYCBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcmBzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdWBgIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3VgYCBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2xgYCBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LiAKK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuIAorMi4yLiBDb250cmlidXRvciBHcmFudC4gCitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKyhkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4gCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50c2AgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiAKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIAorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuIAorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5YHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUxgYCB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLiAKKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3JgcyBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcmBzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4gCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHNgIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudGBzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLiAKK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCis2LjEuIE5ldyBWZXJzaW9ucy4gCitTdWdhckNSTSBJbmMuIChgYFN1Z2FyQ1JNYGApIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgU3VnYXJDUk0uIE5vIG9uZSBvdGhlciB0aGFuIFN1Z2FyQ1JNIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLiAKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzIGBgU3VnYXJDUk1gYCwgYGBTUExgYCBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJU2BgIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorOC4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsIERldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tIFlvdSBmaWxlIHN1Y2ggYWN0aW9uIGlzIHJlZmVycmVkIHRvIGFzICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyhhKSBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKworOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudGBzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorCis4LjQuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWWBTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhIGBgY29tbWVyY2lhbCBpdGVtLGBgIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiBgYGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmVgYCBhbmQgYGBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sYGAgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KK1RoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5c2AgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4KKworMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgJiM4MjIwO011bHRpcGxlLUxpY2Vuc2VkJiM4MjIxOy4gJiM4MjIwO011bHRpcGxlLUxpY2Vuc2VkJiM4MjIxOyBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIFNQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgMS4xLjMgLSBFeGhpYml0IEEKKworVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgU3VnYXJDUk0gUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEuMworKCJMaWNlbnNlIik7IFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgCitMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5zdWdhcmNybS5jb20vU1BMCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvcgordGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgT3JpZ2luYWwgQ29kZSBpczogU3VnYXJDUk0gT3BlbiBTb3VyY2UKKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFN1Z2FyQ1JNLCBJbmMuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IFN1Z2FyQ1JNIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDQgU3VnYXJDUk0sIEluYy47CitBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZiB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCitTdWdhckNSTSBQdWJsaWMgTGljZW5zZSAxLjEuMyAtIEV4aGliaXQgQgorCitBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlLgorCitJLiBFZmZlY3QuCitUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIFN1Z2FyQ1JNIFB1YmxpYyBMaWNlbnNlICYjODIxMTsgQWRkaXRpb25hbCBUZXJtcyBzaGFsbCBhcHBseSB0byB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSUkuIFN1Z2FyQ1JNIGFuZCBsb2dvLgorVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzICJTdWdhckNSTSIgYW5kIHRoZSAiU3VnYXJDUk0iIGxvZ29zIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucy4KKworSG93ZXZlciwgaW4gYWRkaXRpb24gdG8gdGhlIG90aGVyIG5vdGljZSBvYmxpZ2F0aW9ucywgYWxsIGNvcGllcyBvZiB0aGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgYW5kIFNvdXJjZSBDb2RlIGZvcm0gZGlzdHJpYnV0ZWQgbXVzdCwgYXMgYSBmb3JtIG9mIGF0dHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCBhdXRob3IsIGluY2x1ZGUgb24gZWFjaCB1c2VyIGludGVyZmFjZSBzY3JlZW4gKGkpIHRoZSAiUG93ZXJlZCBieSBTdWdhckNSTSIgbG9nbyBhbmQgKGlpKSB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiB0aGUgc2FtZSBmb3JtIGFzIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGRpc3RyaWJ1dGVkIGJ5IFN1Z2FyQ1JNLCBJbmMuIGF0IHRoZSB0aW1lIG9mIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvcHkuIEluIGFkZGl0aW9uLCB0aGUgIlBvd2VyZWQgYnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSB2aXNpYmxlIHRvIGFsbCB1c2VycyBhbmQgYmUgbG9jYXRlZCBhdCB0aGUgdmVyeSBib3R0b20gY2VudGVyIG9mIGVhY2ggdXNlciBpbnRlcmZhY2Ugc2NyZWVuLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgIlBvd2VyZWQgQnkgU3VnYXJDUk0iIGxvZ28gbXVzdCBiZSBhdCBsZWFzdCAxMDYgeCAyMyBwaXhlbHMuIFdoZW4gdXNlcnMgY2xpY2sgb24gdGhlICJQb3dlcmVkIGJ5IFN1Z2FyQ1JNIiBsb2dvIGl0IG11c3QgZGlyZWN0IHRoZW0gYmFjayB0byBodHRwOi8vd3d3LnN1Z2FyZm9yZ2Uub3JnLiBJbiBhZGRpdGlvbiwgdGhlIGNvcHlyaWdodCBub3RpY2UgbXVzdCByZW1haW4gdmlzaWJsZSB0byBhbGwgdXNlcnMgYXQgYWxsIHRpbWVzIGF0IHRoZSBib3R0b20gb2YgdGhlIHVzZXIgaW50ZXJmYWNlIHNjcmVlbi4gV2hlbiB1c2VycyBjbGljayBvbiB0aGUgY29weXJpZ2h0IG5vdGljZSwgaXQgbXVzdCBkaXJlY3QgdGhlbSBiYWNrIHRvIGh0dHA6Ly93d3cuc3VnYXJjcm0uY29tCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQiBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1VDQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWE3NTdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVUNCCkBAIC0wLDAgKzEsMjYgQEAKKyAgIENvcHlyaWdodCAoYykgMTk4NywgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NAorICAgICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAgIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAgIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgICBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ZTTC0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmFlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9WU0wtMS4wCkBAIC0wLDAgKzEsNDkgQEAKKworVm92aWRhIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMS4wCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFsbCBzb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlICJWb3ZpZGEKK09wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5IiBleGNlcHQgZm9yIHRob3NlIHBvcnRpb25zCitpbmNvcnBvcmF0aW5nIHRoaXJkIHBhcnR5IHNvZnR3YXJlIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGFzIGJlaW5nCitsaWNlbnNlZCB1bmRlciBzZXBhcmF0ZSBsaWNlbnNlLgorCitUaGUgVm92aWRhIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wCitDb3B5cmlnaHQgKGMpIDIwMDAgVm92aWRhIE5ldHdvcmtzLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCit0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lcyAiVk9DQUwiLCAiVm92aWRhIE9wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5IiwKK2FuZCAiVm92aWRhIE9wZW4gQ29tbXVuaWNhdGlvbiBBcHBsaWNhdGlvbiBMaWJyYXJ5IChWT0NBTCkiIG11c3QKK25vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCitwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCB2b2NhbEB2b3ZpZGEub3JnLgorCis0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiVk9DQUwiLCBub3IKK21heSAiVk9DQUwiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KK3Blcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5ECitOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBWT1ZJREEKK05FVFdPUktTLCBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUworSU4gRVhDRVNTIE9GICQxLDAwMCwgTk9SIEZPUiBBTlkgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKK09GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKK1VTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1czQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGI4YzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvVzNDCkBAIC0wLDAgKzEsMTcgQEAKKworVzNDIFNPRlRXQVJFIE5PVElDRSBBTkQgTElDRU5TRQorVGhpcyB3b3JrIChhbmQgaW5jbHVkZWQgc29mdHdhcmUsIGRvY3VtZW50YXRpb24gc3VjaCBhcyBSRUFETUVzLCBvciBvdGhlciByZWxhdGVkIGl0ZW1zKSBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLgorTGljZW5zZQorQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlIGxpY2Vuc2VlKSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCB3aWxsIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuCitQZXJtaXNzaW9uIHRvIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluY2x1ZGluZyBtb2RpZmljYXRpb25zOgorVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgd29yay4KK0FueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgdGhlIFczQyBTb2Z0d2FyZSBTaG9ydCBOb3RpY2Ugc2hvdWxkIGJlIGluY2x1ZGVkIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCB0ZXh0IGlzIHBlcm1pdHRlZCkgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZS4KK05vdGljZSBvZiBhbnkgY2hhbmdlcyBvciBtb2RpZmljYXRpb25zIHRvIHRoZSBmaWxlcywgaW5jbHVkaW5nIHRoZSBkYXRlIGNoYW5nZXMgd2VyZSBtYWRlLiAoV2UgcmVjb21tZW5kIHlvdSBwcm92aWRlIFVSSXMgdG8gdGhlIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMgZGVyaXZlZC4pCitEaXNjbGFpbWVycworVEhJUyBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMsIiBBTkQgQ09QWVJJR0hUIEhPTERFUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCitDT1BZUklHSFQgSE9MREVSUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OLgorVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodCBob2xkZXJzLgorTm90ZXMKK1RoaXMgdmVyc2lvbjogaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDAyL2NvcHlyaWdodC1zb2Z0d2FyZS0yMDAyMTIzMQorVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0NgcyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbiBEZWNlbWJlciAzMSAyMDAyLiBUaGlzIHZlcnNpb24gcmVtb3ZlcyB0aGUgY29weXJpZ2h0IG93bmVyc2hpcCBub3RpY2Ugc3VjaCB0aGF0IHRoaXMgbGljZW5zZSBjYW4gYmUgdXNlZCB3aXRoIG1hdGVyaWFscyBvdGhlciB0aGFuIHRob3NlIG93bmVkIGJ5IHRoZSBXM0MsIHJlZmxlY3RzIHRoYXQgRVJDSU0gaXMgbm93IGEgaG9zdCBvZiB0aGUgVzNDLCBpbmNsdWRlcyByZWZlcmVuY2VzIHRvIHRoaXMgc3BlY2lmaWMgZGF0ZWQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSwgYW5kIHJlbW92ZXMgdGhlIGFtYmlndW91cyBncmFudCBvZiAidXNlIi4gT3RoZXJ3aXNlLCB0aGlzIHZlcnNpb24gaXMgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gYW5kIGlzIHdyaXR0ZW4gc28gYXMgdG8gcHJlc2VydmUgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbmBzIGFzc2Vzc21lbnQgb2YgR1BMIGNvbXBhdGliaWxpdHkgYW5kIE9TSWBzIGNlcnRpZmljYXRpb24gdW5kZXIgdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24uCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1dYd2luZG93cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmUwOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV1h3aW5kb3dzCkBAIC0wLDAgKzEsNTUgQEAKKworICAgICAgICAgICAgICAgIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIFZlcnNpb24gMy4xCisgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNSBKdWxpYW4gU21hcnQsIFJvYmVydCBSb2VibGluZyBldCBhbAorCisgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICBvZiB0aGlzIGxpY2VuY2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICBXWFdJTkRPV1MgTElCUkFSWSBMSUNFTkNFCisgICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQKKyAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExpYnJhcnkKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLCB1c3VhbGx5IGluIGEgZmlsZSBuYW1lZCBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisKKyAgRVhDRVBUSU9OIE5PVElDRQorCisgIDEuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZQorICBwZXJtaXNzaW9uIGZvciBhZGRpdGlvbmFsIHVzZXMgb2YgdGhlIHRleHQgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSBvZgorICB0aGUgbGlicmFyeSBhcyBsaWNlbmNlZCB1bmRlciB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5jZSwgYXBwbHlpbmcKKyAgZWl0aGVyIHZlcnNpb24gMy4xIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uIG9mCisgIHRoZSBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdmVyc2lvbgorICAzLjEgb2YgdGhlIExpY2VuY2UgZG9jdW1lbnQuCisKKyAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUKKyAgdW5kZXIgeW91ciBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZAorICBvbiB0aGUgTGlicmFyeS4KKworICAzLiBJZiB5b3UgY29weSBjb2RlIGZyb20gZmlsZXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBpbnRvIGEKKyAgY29weSBvZiB0aGlzIGxpYnJhcnksIGFzIHRoaXMgbGljZW5jZSBwZXJtaXRzLCB0aGUgZXhjZXB0aW9uIGRvZXMgbm90CisgIGFwcGx5IHRvIHRoZSBjb2RlIHRoYXQgeW91IGFkZCBpbiB0aGlzIHdheS4gIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzCisgIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uCisgIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UKKyAgYWNjb3JkaW5nbHkuCisKKyAgNC4gSWYgeW91IHdyaXRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24gZm9yIHRoaXMgbGlicmFyeSwgaXQgaXMgeW91cgorICBjaG9pY2Ugd2hldGhlciB0byBwZXJtaXQgdGhpcyBleGNlcHRpb24gdG8gYXBwbHkgdG8geW91ciBtb2RpZmljYXRpb25zLiAKKyAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2gKKyAgY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9XYXRjb20tMS4wIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmI2MTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvV2F0Y29tLTEuMApAQCAtMCwwICsxLDE0MCBAQAorCitTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAKKworVVNFIE9GIFRIRSBTWUJBU0UgT1BFTiBXQVRDT00gU09GVFdBUkUgREVTQ1JJQkVEIEJFTE9XICgiU09GVFdBUkUiKSBJUyBTVUJKRUNUIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBTRVQgRk9SVEggSU4gVEhFIFNZQkFTRSBPUEVOIFdBVENPTSBQVUJMSUMgTElDRU5TRSBTRVQgRk9SVEggQkVMT1cgKCJMSUNFTlNFIikuIFlPVSBNQVkgTk9UIFVTRSBUSEUgU09GVFdBUkUgSU4gQU5ZIE1BTk5FUiBVTkxFU1MgWU9VIEFDQ0VQVCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIExJQ0VOU0UuIFlPVSBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgQlkgSU4gQU5ZIE1BTk5FUiBVU0lORyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBCWSBSRVBST0RVQ0lORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORykgVEhFIFNPRlRXQVJFLiBJRiBZT1UgRE8gTk9UIEFDQ0VQVCBBTEwgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBMSUNFTlNFLCBETyBOT1QgVVNFIFRIRSBTT0ZUV0FSRSBJTiBBTlkgTUFOTkVSLgorCitTeWJhc2UgT3BlbiBXYXRjb20gUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRoZSBmb2xsb3dpbmcgc29mdHdhcmUgcHJvZ3JhbXM6IHRoZSBvcGVuIHNvdXJjZSB2ZXJzaW9ucyBvZiBTeWJhc2VgcyBXYXRjb20gQy9DKysgYW5kIEZvcnRyYW4gY29tcGlsZXIgcHJvZHVjdHMgKCJTb2Z0d2FyZSIpLCB3aGljaCBhcmUgbW9kaWZpZWQgdmVyc2lvbnMgb2YsIHdpdGggc2lnbmlmaWNhbnQgY2hhbmdlcyBmcm9tLCB0aGUgbGFzdCB2ZXJzaW9ucyBtYWRlIGNvbW1lcmNpYWxseSBhdmFpbGFibGUgYnkgU3liYXNlLiBBcyB1c2VkIGluIHRoaXMgTGljZW5zZToKKworCisxLjEgIkFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyIgbWVhbjogKGEpIGluIHRoZSBjYXNlIHdoZXJlIFN5YmFzZSBpcyB0aGUgZ3JhbnRvciBvZiByaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBvd25lZCBieSBvciBhc3NpZ25lZCB0byBTeWJhc2UgYW5kIChpaSkgdGhhdCBjb3ZlciBzdWJqZWN0IG1hdHRlciBjb250YWluZWQgaW4gdGhlIE9yaWdpbmFsIENvZGUsIGJ1dCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGhvdXQgaW5mcmluZ2VtZW50OyBhbmQgKGIpIGluIHRoZSBjYXNlIHdoZXJlIFlvdSBhcmUgdGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlciBhY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91ciBNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKworMS4yICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisKKzEuMyAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mIE9yaWdpbmFsIENvZGUgYW5kIGFueSBNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworCisxLjQgIkRlcGxveSIgbWVhbnMgdG8gdXNlLCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gZm9yIFlvdXIgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IChSJmFtcDtEKSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhbmQgaW5jbHVkZXMgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgYW5kIGFsbCBpbnRlcm5hbCB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSB3aXRoaW4gWW91ciBidXNpbmVzcyBvciBvcmdhbml6YXRpb24gZXhjZXB0IGZvciBSJmFtcDtEIHVzZSBhbmQvb3IgUGVyc29uYWwgVXNlLCBhcyB3ZWxsIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJsaWNlbnNpbmcgb3IgZGlzdHJpYnV0aW9uIG9mIENvdmVyZWQgQ29kZSBieSBZb3UgdG8gYW55IHRoaXJkIHBhcnR5IGluIGFueSBmb3JtIG9yIG1hbm5lci4KKworCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisKKzEuNiAiTW9kaWZpY2F0aW9ucyIgbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20sIGFuZC9vciBjaGFuZ2UgdG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMsIHRoZSBjb21iaW5hdGlvbiBvZiBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFueSByZXNwZWN0aXZlIHBvcnRpb25zIHRoZXJlb2YuIFdoZW4gY29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlOyBhbmQvb3IgKGIpIGFueSBuZXcgZmlsZSBvciBvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKworMS43ICJPcmlnaW5hbCBDb2RlIiBtZWFucyAoYSkgdGhlIFNvdXJjZSBDb2RlIG9mIGEgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGFzIG9yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgU3liYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyB0byBzdWNoIHByb2dyYW1zIG9yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IFN5YmFzZSB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB0aGF0IGhhcyBiZWVuIGV4cHJlc3NseSBpZGVudGlmaWVkIGJ5IFN5YmFzZSBhcyBzdWNoIGluIHRoZSBoZWFkZXIgZmlsZShzKSBvZiBzdWNoIHdvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBTeWJhc2UgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisKKzEuOCAiUGVyc29uYWwgVXNlIiBtZWFucyB1c2Ugb2YgQ292ZXJlZCBDb2RlIGJ5IGFuIGluZGl2aWR1YWwgc29sZWx5IGZvciBoaXMgb3IgaGVyIHBlcnNvbmFsLCBwcml2YXRlIGFuZCBub24tY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW4gaW5kaXZpZHVhbGBzIHVzZSBvZiBDb3ZlcmVkIENvZGUgaW4gaGlzIG9yIGhlciBjYXBhY2l0eSBhcyBhbiBvZmZpY2VyLCBlbXBsb3llZSwgbWVtYmVyLCBpbmRlcGVuZGVudCBjb250cmFjdG9yIG9yIGFnZW50IG9mIGEgY29ycG9yYXRpb24sIGJ1c2luZXNzIG9yIG9yZ2FuaXphdGlvbiAoY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCkgZG9lcyBub3QgcXVhbGlmeSBhcyBQZXJzb25hbCBVc2UuCisKKworMS45ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGh1bWFuIHJlYWRhYmxlIGZvcm0gb2YgYSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlIChvYmplY3QgY29kZSkuCisKKworMS4xMCAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgb3IgIllvdXIiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworCisyLiBQZXJtaXR0ZWQgVXNlczsgQ29uZGl0aW9ucyAmYW1wOyBSZXN0cmljdGlvbnMuU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBTeWJhc2UgaGVyZWJ5IGdyYW50cyBZb3UsIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YgU3liYXNlYHMgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBjb3B5cmlnaHRzIGNvdmVyaW5nIHRoZSBPcmlnaW5hbCBDb2RlLCB0byBkbyB0aGUgZm9sbG93aW5nOgorCisKKzIuMSBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgT3JpZ2luYWwgQ29kZSwgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIHNvbGVseSBmb3IgWW91ciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZGV2ZWxvcG1lbnQgYW5kL29yIFBlcnNvbmFsIFVzZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3QgcmV0YWluIGFuZCByZXByb2R1Y2UgaW4gYWxsIGNvcGllcyBvZiBPcmlnaW5hbCBDb2RlIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIFN5YmFzZSBhcyB0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZSBPcmlnaW5hbCBDb2RlIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlOyBhbmQgCisKKyhiKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiBTb3VyY2UgQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUsIGFuZCBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHN1Y2ggU291cmNlIENvZGUgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHNgIHJpZ2h0cyBoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisoYykgV2hlbmV2ZXIgcmVhc29uYWJseSBmZWFzaWJsZSB5b3Ugc2hvdWxkIGluY2x1ZGUgdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGluIGEgY2xpY2std3JhcCBmb3JtYXQsIHdoaWNoIHJlcXVpcmVzIGFmZmlybWF0aXZlIGFjY2VwdGFuY2UgYnkgY2xpY2tpbmcgb24gYW4gIkkgYWNjZXB0IiBidXR0b24gb3Igc2ltaWxhciBtZWNoYW5pc20uIElmIGEgY2xpY2std3JhcCBmb3JtYXQgaXMgbm90IGluY2x1ZGVkLCB5b3UgbXVzdCBpbmNsdWRlIGEgc3RhdGVtZW50IHRoYXQgYW55IHVzZSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiBvciBkaXN0cmlidXRpb24pIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBvdGhlciBhZmZpcm1hdGl2ZSBhY3QgdGhhdCB5b3UgZGVmaW5lLCBjb25zdGl0dXRlcyBhY2NlcHRhbmNlIG9mIHRoZSBMaWNlbnNlLCBhbmQgaW5zdHJ1Y3RpbmcgdGhlIHVzZXIgbm90IHRvIHVzZSB0aGUgQ292ZXJlZCBDb2RlIGluIGFueSBtYW5uZXIgaWYgdGhlIHVzZXIgZG9lcyBub3QgYWNjZXB0IGFsbCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExpY2Vuc2UuCisKKworMi4yIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sIG1vZGlmeSBhbmQgRGVwbG95IENvdmVyZWQgQ29kZSwgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgQ292ZXJlZCBDb2RlOyAKKworKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgCisKKyhjKSBZb3UgbXVzdCBtYWtlIFNvdXJjZSBDb2RlIG9mIGFsbCBZb3VyIERlcGxveWVkIE1vZGlmaWNhdGlvbnMgcHVibGljbHkgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB0aGUgbGljZW5zZSBncmFudHMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMyBiZWxvdywgZm9yIGFzIGxvbmcgYXMgeW91IERlcGxveSB0aGUgQ292ZXJlZCBDb2RlIG9yIHR3ZWx2ZSAoMTIpIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGluaXRpYWwgRGVwbG95bWVudCwgd2hpY2hldmVyIGlzIGxvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEgd2ViIHNpdGUpOyAKKworKGQpIGlmIFlvdSBEZXBsb3kgQ292ZXJlZCBDb2RlIGluIG9iamVjdCBjb2RlLCBleGVjdXRhYmxlIGZvcm0gb25seSwgWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBub3RpY2UsIGluIHRoZSBjb2RlIGl0c2VsZiBhcyB3ZWxsIGFzIGluIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBpbmZvcm1hdGlvbiBvbiBob3cgYW5kIHdoZXJlIHRvIG9idGFpbiBzdWNoIFNvdXJjZSBDb2RlOyBhbmQgCisKKyhlKSB0aGUgb2JqZWN0IGNvZGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBZb3VyIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdCBzdWNoIGxpY2Vuc2UgYWdyZWVtZW50IGNvbnRhaW5zIHRlcm1zIG5vIGxlc3MgcHJvdGVjdGl2ZSBvZiBTeWJhc2UgYW5kIGVhY2ggQ29udHJpYnV0b3IgdGhhbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgc3RhdGluZyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHkuCisKKworMi4zIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgYWx0aG91Z2ggU3liYXNlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5IFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBTeWJhc2UgYW5kIGVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgWW91IHRvIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSwgaXQgaXMgWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBDb3ZlcmVkIENvZGUuCisKKworMy4gWW91ciBHcmFudHMuIEluIGNvbnNpZGVyYXRpb24gb2YsIGFuZCBhcyBhIGNvbmRpdGlvbiB0bywgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IGhlcmVieSBncmFudCB0byBTeWJhc2UgYW5kIGFsbCB0aGlyZCBwYXJ0aWVzIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UsIHVuZGVyIFlvdXIgQXBwbGljYWJsZSBQYXRlbnQgUmlnaHRzIGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBwZXJmb3JtLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIERlcGxveSBZb3VyIE1vZGlmaWNhdGlvbnMgb2YgdGhlIHNhbWUgc2NvcGUgYW5kIGV4dGVudCBhcyBTeWJhc2VgcyBsaWNlbnNlcyB1bmRlciBTZWN0aW9ucyAyLjEgYW5kIDIuMi4KKworCis0LiBMYXJnZXIgV29ya3MuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIGVhY2ggc3VjaCBpbnN0YW5jZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworCis1LiBMaW1pdGF0aW9ucyBvbiBQYXRlbnQgTGljZW5zZS4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbiAyLCBubyBvdGhlciBwYXRlbnQgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGFyZSBncmFudGVkIGJ5IFN5YmFzZSBoZXJlaW4uIE1vZGlmaWNhdGlvbnMgYW5kL29yIExhcmdlciBXb3JrcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHBhdGVudCBsaWNlbnNlcyBmcm9tIFN5YmFzZSB3aGljaCBTeWJhc2UgbWF5IGdyYW50IGluIGl0cyBzb2xlIGRpc2NyZXRpb24uCisKKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIExpY2Vuc2UgKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIGFzIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgU3liYXNlIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3Qgb2J0YWluIHRoZSByZWNpcGllbnRgcyBhZ3JlZW1lbnQgdGhhdCBhbnkgc3VjaCBBZGRpdGlvbmFsIFRlcm1zIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgU3liYXNlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCBTeWJhc2Ugb3Igc3VjaCBDb250cmlidXRvciBieSByZWFzb24gb2YgYW55IHN1Y2ggQWRkaXRpb25hbCBUZXJtcy4KKworCis3LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4gU3liYXNlIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHB1Ymxpc2hlZCBieSBTeWJhc2UuIE5vIG9uZSBvdGhlciB0aGFuIFN5YmFzZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworOC4gTk8gV0FSUkFOVFkgT1IgU1VQUE9SVC4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBpbiB3aG9sZSBvciBpbiBwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQgQ29kZSBtYXkgY29udGFpbiBlcnJvcnMgdGhhdCBjb3VsZCBjYXVzZSBmYWlsdXJlcyBvciBsb3NzIG9mIGRhdGEsIGFuZCBtYXkgYmUgaW5jb21wbGV0ZSBvciBjb250YWluIGluYWNjdXJhY2llcy4gWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQgWW91ciBzb2xlIGFuZCBlbnRpcmUgcmlzay4gVEhFIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLCBVUEdSQURFUyBPUiBTVVBQT1JUIE9GIEFOWSBLSU5EIEFORCBTWUJBU0UgQU5EIFNZQkFTRWBTIExJQ0VOU09SKFMpIChDT0xMRUNUSVZFTFkgUkVGRVJSRUQgVE8gQVMgIlNZQkFTRSIgRk9SIFRIRSBQVVJQT1NFUyBPRiBTRUNUSU9OUyA4IEFORCA5KSBBTkQgQUxMIENPTlRSSUJVVE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9GIEFDQ1VSQUNZLCBPRiBRVUlFVCBFTkpPWU1FTlQsIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBTWUJBU0UgQU5EIEVBQ0ggQ09OVFJJQlVUT1IgRE9FUyBOT1QgV0FSUkFOVCBBR0FJTlNUIElOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgQ09WRVJFRCBDT0RFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBTWUJBU0UsIEEgU1lCQVNFIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUgT1IgQU5ZIENPTlRSSUJVVE9SIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZLiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGlzIG5vdCBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uIHN5c3RlbXMsIG9yIGFpciB0cmFmZmljIGNvbnRyb2wgbWFjaGluZXMgaW4gd2hpY2ggY2FzZSB0aGUgZmFpbHVyZSBvZiB0aGUgQ292ZXJlZCBDb2RlIGNvdWxkIGxlYWQgdG8gZGVhdGgsIHBlcnNvbmFsIGluanVyeSwgb3Igc2V2ZXJlIHBoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgU1lCQVNFIE9SIEFOWSBDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNULCBDT05TRVFVRU5USUFMIE9SIE9USEVSIERBTUFHRVMgT0YgQU5ZIEtJTkQgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFBPUlRJT04gVEhFUkVPRiwgV0hFVEhFUiBVTkRFUiBBIFRIRU9SWSBPRiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgUFJPRFVDVFMgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgRVZFTiBJRiBTWUJBU0UgT1IgU1VDSCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMsIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIE9SIE9USEVSIERBTUFHRVMgT0YgQU5ZIEtJTkQsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgU3liYXNlYHMgb3IgYW55IENvbnRyaWJ1dG9yYHMgdG90YWwgbGlhYmlsaXR5IHRvIFlvdSBmb3IgYWxsIGRhbWFnZXMgKG90aGVyIHRoYW4gYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3KSB1bmRlciB0aGlzIExpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZml2ZSBodW5kcmVkIGRvbGxhcnMgKCQ1MDAuMDApLgorCisKKzEwLiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB0byB1c2UgdGhlIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIlN5YmFzZSIgb3IgYW55IG90aGVyIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgYmVsb25naW5nIHRvIFN5YmFzZSAoY29sbGVjdGl2ZWx5ICJTeWJhc2UgTWFya3MiKSBvciB0byBhbnkgdHJhZGVtYXJrIG9yIHRyYWRlIG5hbWUgYmVsb25naW5nIHRvIGFueSBDb250cmlidXRvcigiQ29udHJpYnV0b3IgTWFya3MiKS4gTm8gU3liYXNlIE1hcmtzIG9yIENvbnRyaWJ1dG9yIE1hcmtzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgQ292ZXJlZCBDb2RlIG90aGVyIHRoYW4gd2l0aCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFN5YmFzZSBvciB0aGUgQ29udHJpYnV0b3IsIGFzIGFwcGxpY2FibGUuCisKKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIGFueSBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBDb250cmlidXRvci4gU3liYXNlIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgU3liYXNlICgiU3liYXNlIE1vZGlmaWNhdGlvbnMiKSwgYW5kIHN1Y2ggU3liYXNlIE1vZGlmaWNhdGlvbnMgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gU3liYXNlIG1heSwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgY2hvb3NlIHRvIGxpY2Vuc2Ugc3VjaCBTeWJhc2UgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UsIG9yIG9uIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2Ugb3IgbWF5IGNob29zZSBub3QgdG8gbGljZW5zZSB0aGVtIGF0IGFsbC4KKworMTIuIFRlcm1pbmF0aW9uLgorCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZToKKworKGEpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaCBicmVhY2g7CisKKyhiKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgdGhlIGNpcmN1bXN0YW5jZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMTMuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgaWYgWW91LCBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGluY2x1ZGluZyBhcyBhIGNyb3NzIGNsYWltIG9yIGNvdW50ZXJjbGFpbSkgYWdhaW5zdCBTeWJhc2Ugb3IgYW55IENvbnRyaWJ1dG9yLgorCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkgc3RvcCBhbnkgZnVydGhlciB1c2UsIHJlcHJvZHVjdGlvbiwgbW9kaWZpY2F0aW9uLCBzdWJsaWNlbnNpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGFuZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIENvdmVyZWQgQ29kZSB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgc2hvdWxkIHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsIDEyLjIgYW5kIDEzLiBObyBwYXJ0eSB3aWxsIGJlIGxpYWJsZSB0byBhbnkgb3RoZXIgZm9yIGNvbXBlbnNhdGlvbiwgaW5kZW1uaXR5IG9yIGRhbWFnZXMgb2YgYW55IHNvcnQgc29sZWx5IGFzIGEgcmVzdWx0IG9mIHRlcm1pbmF0aW5nIHRoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0IG9yIHJlbWVkeSBvZiBhbnkgcGFydHkuCisKKworMTMuIE1pc2NlbGxhbmVvdXMuCisKKworMTMuMSBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLiBHb3Zlcm5tZW50IHNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSByaWdodHMgaW4gdGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZSBwdWJsaWMgYXMgZGVmaW5lZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgY3VzdG9tYXJ5IGNvbW1lcmNpYWwgbGljZW5zZSBpbiB0ZWNobmljYWwgZGF0YSBhbmQgc29mdHdhcmUgaXMgcHJvdmlkZWQgaW4gYWNjb3JkYW5jZSB3aXRoIEZBUiAxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIHB1cmNoYXNlcywgREZBUiAyNTIuMjI3LTcwMTUgKFRlY2huaWNhbCBEYXRhIC0tIENvbW1lcmNpYWwgSXRlbXMpIGFuZCAyMjcuNzIwMi0zIChSaWdodHMgaW4gQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiBvciBhbW9uZyB5b3UsIFN5YmFzZSBvciBhbnkgQ29udHJpYnV0b3IsIGFuZCBZb3Ugd2lsbCBub3QgcmVwcmVzZW50IHRvIHRoZSBjb250cmFyeSwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworCisxMy4zIEluZGVwZW5kZW50IERldmVsb3BtZW50LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciBTeWJhc2VgcyBvciBhbnkgQ29udHJpYnV0b3JgcyByaWdodCB0byBhY3F1aXJlLCBsaWNlbnNlLCBkZXZlbG9wLCBoYXZlIG90aGVycyBkZXZlbG9wIGZvciBpdCwgbWFya2V0IGFuZC9vciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBwZXJmb3JtIHRoZSBzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLCBNb2RpZmljYXRpb25zLCBMYXJnZXIgV29ya3MsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5IGRldmVsb3AsIHByb2R1Y2UsIG1hcmtldCBvciBkaXN0cmlidXRlLgorCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgU3liYXNlIG9yIGFueSBDb250cmlidXRvciB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZiBmdXR1cmUgZW5mb3JjZW1lbnQgb2YgdGhhdCBvciBhbnkgb3RoZXIgcHJvdmlzaW9uLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKworMTMuNSBTZXZlcmFiaWxpdHkuIChhKSBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYyBiZW5lZml0cyBhbmQgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgaWYgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIG9yIHJlc3RyaWN0cyBZb3UgZnJvbSBmdWxseSBhbmQvb3Igc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIgYW5kL29yIDMgb3IgcHJldmVudHMgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIGFuZCBZb3UgbXVzdCBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBpdCB0aGF0IGFyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbC4KKworCisxMy42IERpc3B1dGUgUmVzb2x1dGlvbi4gQW55IGxpdGlnYXRpb24gb3Igb3RoZXIgZGlzcHV0ZSByZXNvbHV0aW9uIGJldHdlZW4gWW91IGFuZCBTeWJhc2UgcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIHRha2UgcGxhY2UgaW4gdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIGFuZCBZb3UgYW5kIFN5YmFzZSBoZXJlYnkgY29uc2VudCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuCisKKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZiBDYWxpZm9ybmlhIGxhdyBjb25jZXJuaW5nIGNvbmZsaWN0cyBvZiBsYXcuCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJlYnkgY29uZmlybSB0aGF0IHRoZXkgaGF2ZSByZXF1ZXN0ZWQgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluIEVuZ2xpc2guIExlcyBwYXJ0aWVzIG9udCBleGlnJiMyMzI7IHF1ZSBsZSBwciYjMjMyO3NlbnQgY29udHJhdCBldCB0b3VzIGxlcyBkb2N1bWVudHMgY29ubmV4ZXMgc29pZW50IHImIzIzMjtkaSYjMjMyO3MgZW4gYW5nbGFpcy4KKworCitFWEhJQklUIEEuIAorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTgzLTIwMDIgU3liYXNlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIFN5YmFzZSBPcGVuIFdhdGNvbSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMCAodGhlIGBMaWNlbnNlYCkuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gQlkgVVNJTkcgVEhJUyBGSUxFIFlPVSBBR1JFRSBUTyBBTEwgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIExJQ0VOU0UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBwcm92aWRlZCB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBhbmQgaXMgYWxzbyBhdmFpbGFibGUgYXQgd3d3LnN5YmFzZS5jb20vZGV2ZWxvcGVyL29wZW5zb3VyY2UuIAorCitUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiBgQVMgSVNgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgU1lCQVNFIEFORCBBTEwgQ09OVFJJQlVUT1JTIEhFUkVCWSBESVNDTEFJTSBBTEwgU1VDSCBXQVJSQU5USUVTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBRVUlFVCBFTkpPWU1FTlQgT1IgTk9OLUlORlJJTkdFTUVOVC4gUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWYzYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjAKQEAgLTAsMCArMSwyMiBAQAorQ29weXJpZ2h0IChDKSAxOTk0LTIwMDMgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorWEZSRUU4NiBQUk9KRUNUIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYRnJlZTg2IFByb2plY3Qgc2hhbGwgbm90CitiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MKK2luIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWEZyZWU4NiBQcm9qZWN0LgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YRnJlZTg2LTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmE1Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWEZyZWU4Ni0xLjEKQEAgLTAsMCArMSwxOCBAQAorCitYRnJlZTg2IExpY2Vuc2UgKHZlcnNpb24gMS4xKQorCitDb3B5cmlnaHQgKEMpIDE5OTQtMjAwNiBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgaW4gdGhlIHNhbWUgcGxhY2UgYW5kIGZvcm0gYXMgb3RoZXIgY29weXJpZ2h0LCBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGluZm9ybWF0aW9uLgorCiszLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jIChodHRwOi8vd3d3LnhmcmVlODYub3JnLykgYW5kIGl0cyBjb250cmlidXRvcnMiLCBpbiB0aGUgc2FtZSBwbGFjZSBhbmQgZm9ybSBhcyBvdGhlciB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMuIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgaW4gdGhlIHNhbWUgZm9ybSBhbmQgbG9jYXRpb24gYXMgb3RoZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMuCisKKzQuIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFRoZSBYRnJlZTg2IFByb2plY3QsIEluYyBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBUaGUgWEZyZWU4NiBQcm9qZWN0LCBJbmMuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJU2BgIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFhGUkVFODYgUFJPSkVDVCwgSU5DIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1hTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTgyZDYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWFNMCkBAIC0wLDAgKzEsNDggQEAKK0NvcHlyaWdodAorLS0tLS0tLS0tCitDb3B5cmlnaHQgKEMpIDE5OTktMjAwNyBOb3JtYW4gV2Fsc2gKK0NvcHlyaWdodCAoQykgMjAwMyBKacWZw60gS29zZWsKK0NvcHlyaWdodCAoQykgMjAwNC0yMDA3IFN0ZXZlIEJhbGwKK0NvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRoZSBEb2NCb29rIFByb2plY3QKK0NvcHlyaWdodCAoQykgMjAxMS0yMDEyIE8nUmVpbGx5IE1lZGlhCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorZmlsZXMgKHRoZSBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0CityZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwKK2NvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lcyBvZiBpbmRpdmlkdWFscworY3JlZGl0ZWQgd2l0aCBjb250cmlidXRpb24gdG8gdGhpcyBzb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCBpbgorYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlcgorZGVhbGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbgorZnJvbSB0aGUgaW5kaXZpZHVhbHMgaW4gcXVlc3Rpb24uCisKK0FueSBzdHlsZXNoZWV0IGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHRoYXQgaXMgcHVibGljYWxseQorZGlzdHJpYnV0ZWQgd2lsbCBiZSBpZGVudGlmaWVkIHdpdGggYSBkaWZmZXJlbnQgbmFtZSBhbmQgdGhlCit2ZXJzaW9uIHN0cmluZ3MgaW4gYW55IGRlcml2ZWQgU29mdHdhcmUgd2lsbCBiZSBjaGFuZ2VkIHNvIHRoYXQKK25vIHBvc3NpYmlsaXR5IG9mIGNvbmZ1c2lvbiBiZXR3ZWVuIHRoZSBkZXJpdmVkIHBhY2thZ2UgYW5kIHRoaXMKK1NvZnR3YXJlIHdpbGwgZXhpc3QuCisKK1dhcnJhbnR5CistLS0tLS0tLQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBOT1JNQU4gV0FMU0ggT1IgQU5ZIE9USEVSCitDT05UUklCVVRPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworQ29udGFjdGluZyB0aGUgQXV0aG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBEb2NCb29rIFhTTCBzdHlsZXNoZWV0cyBhcmUgbWFpbnRhaW5lZCBieSBOb3JtYW4gV2Fsc2gsCis8bmR3QG53YWxzaC5jb20+LCBhbmQgbWVtYmVycyBvZiB0aGUgRG9jQm9vayBQcm9qZWN0LAorPGRvY2Jvb2stZGV2ZWxvcGVyc0BzZi5uZXQ+CmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9YbmV0IGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDQ0ZWRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWG5ldApAQCAtMCwwICsxLDI3IEBACisKK1RoZSBYLk5ldCwgSW5jLiBMaWNlbnNlCitUaGlzIExpY2Vuc2UgaGFzIGJlZW4gdm9sdW50YXJpbHkgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9yLgorCitDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMSBYLk5ldCwgSW5jLiBMYWZheWV0dGUsIENhbGlmb3JuaWEsIFVTQQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KKworVGhpcyBhZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZgorQ2FsaWZvcm5pYSBhbmQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWVBMLTEuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGExODgwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1lQTC0xLjEKQEAgLTAsMCArMSwzMCBAQAorCitZYWhvbyEgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMS4xIChZUEwpCitUaGlzIFlhaG9vISBQdWJsaWMgTGljZW5zZSAodGhpcyAiQWdyZWVtZW50IikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgdGhhdCBkZXNjcmliZXMgdGhlIHRlcm1zIHVuZGVyIHdoaWNoIFlhaG9vISBJbmMuLCBhIERlbGF3YXJlIGNvcnBvcmF0aW9uIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGF0IDcwMSBGaXJzdCBBdmVudWUsIFN1bm55dmFsZSwgQ2FsaWZvcm5pYSA5NDA4OSAoIllhaG9vISIpIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSB0byB5b3UgdmlhIGRvd25sb2FkIG9yIG90aGVyd2lzZSAoIlNvZnR3YXJlIikuIEJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91LCBhbiBpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSAoIllvdSIpIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3csIHRoZSBwYXJ0aWVzIGFncmVlIGFzIGZvbGxvd3M6CisKK0dyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlCisxLjEgLSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgWWFob28hIGhlcmVieSBncmFudHMgdG8gWW91LCB1bmRlciBhbnkgYW5kIGFsbCBvZiBpdHMgY29weXJpZ2h0IGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUsIGEgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gY29weSwgbW9kaWZ5LCBjb21waWxlLCBleGVjdXRlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBjaGFuZ2UgdG8sIGFkZGl0aW9uIHRvLCBvciBhYnJpZGdlbWVudCBvZiB0aGUgU29mdHdhcmUgbWFkZSBieSBZb3UgaXMgYSAiTW9kaWZpY2F0aW9uOyIgaG93ZXZlciwgYW55IGZpbGUgWW91IGFkZCB0byB0aGUgU29mdHdhcmUgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0IG9mIHRoZSBTb2Z0d2FyZSBpcyBub3QgYSAiTW9kaWZpY2F0aW9uLiIKKzEuMiAtIElmIFlvdSBhcmUgYW4gaW5kaXZpZHVhbCBhY3Rpbmcgb24gYmVoYWxmIG9mIGEgY29ycG9yYXRpb24gb3Igb3RoZXIgZW50aXR5LCBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFlvdXIgaGF2aW5nIHRoZSBhdXRob3JpdHkgdG8gYmluZCBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSB0byB0aGlzIEFncmVlbWVudC4gUHJvdmlkaW5nIGNvcGllcyB0byBwZXJzb25zIHdpdGhpbiBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSBpcyBub3QgY29uc2lkZXJlZCBkaXN0cmlidXRpb24gZm9yIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LgorMS4zIC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgWW91IG11c3QgZG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudCB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uLiBXaXRoIHJlc3BlY3QgdG8gYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIFlvdSBpbiB0aGUgc2FtZSB3YXkgdGhvc2UgdGVybXMgYXBwbHkgdG8gWWFob28hIHdpdGggcmVzcGVjdCB0byB0aGUgU29mdHdhcmUuIEluIG90aGVyIHdvcmRzLCB3aGVuIFlvdSBhcmUgZGlzdHJpYnV0aW5nIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBZYWhvbyEgaW4gdGVybXMgb2YgdGhlIHJpZ2h0cyBZb3UgZ3JhbnQgYW5kIGhvdyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gWW91IGFuZCB0aGUgbGljZW5zZWVzIG9mIFlvdXIgTW9kaWZpY2F0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdoZW4gWW91ICJzdGFuZCBpbiB0aGUgc2hvZXMiIG9mIFlhaG9vISwgWW91IGFyZSBub3Qgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIHByb3Zpc2lvbiB1bmRlciBTZWN0aW9uIDcsIHdoaWNoIHJlcXVpcmVzIGFsbCBkaXNwdXRlcyB1bmRlciB0aGlzIEFncmVlbWVudCB0byBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYS4KKzEuNCAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGFsc28gcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gaW4gc291cmNlIGNvZGUgZm9ybWF0IGFsb25nIHdpdGggYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCBtYXkgYmUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSW4gYWRkaXRpb24sIFlvdSBtdXN0IG1ha2UgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBsaWNlbnNlIHRlcm1zIGFwcGx5aW5nIHRvIHN1Y2ggU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgWWFob28hLCBhbmQgdGhhdCBzdWNoIGxpY2Vuc2UgZG9lcyBub3QgcmVzdHJpY3QgcmVjaXBpZW50cyBmcm9tIGV4ZXJjaXNpbmcgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgU29mdHdhcmUgZ3JhbnRlZCBieSBZYWhvbyEgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byBhbnkgTW9kaWZpY2F0aW9uIGdyYW50ZWQgYnkgWW91IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMy4KKzEuNSAtIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGxpbWl0IFlvdXIgcmlnaHQgdG8gZGlzdHJpYnV0ZSBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSBZb3VyIG93biB3b3JrIChpLmUuLCB3aGljaCBkbyBub3QgaW5jb3Jwb3JhdGUgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBhcmUgbm90IE1vZGlmaWNhdGlvbnMpIHVuZGVyIGFueSB0ZXJtcyBZb3UgY2hvb3NlLgorU3VwcG9ydAorWWFob28hIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgb3IgdXBkYXRlcyB0byBZb3UuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgcmVxdWlyZXMgWWFob28hIHRvIGVudGVyIGludG8gYW55IGxpY2Vuc2Ugd2l0aCBZb3UgZm9yIGFueSBvdGhlciBlZGl0aW9uIG9mIHRoZSBTb2Z0d2FyZS4KK0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMKKzMuMSAtIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgY29weXJpZ2h0IGluIFNlY3Rpb24gMS4xLCBubyByaWdodHMsIGxpY2Vuc2VzIG9yIGZvcmJlYXJhbmNlcyBhcmUgZ3JhbnRlZCBvciBtYXkgYXJpc2UgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBleGhhdXN0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgdGhhdCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCiszLjIgLSBJbiBhbnkgY29weSBvZiB0aGUgU29mdHdhcmUgb3IgaW4gYW55IE1vZGlmaWNhdGlvbiB5b3UgY3JlYXRlLCBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSwgYW55IGFuZCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFNvZnR3YXJlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhleSBhcHBlYXIgaW4gdGhlIFNvZnR3YXJlLiBUaGlzIGluY2x1ZGVzIHRoZSBwcmVzZXJ2YXRpb24gb2YgYXR0cmlidXRpb24gbm90aWNlcyBpbiB0aGUgZm9ybSBvZiB0cmFkZW1hcmtzIG9yIGxvZ29zIHRoYXQgZXhpc3Qgd2l0aGluIGEgdXNlciBpbnRlcmZhY2Ugb2YgdGhlIFNvZnR3YXJlLgorMy4zIC0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IFlvdSByaWdodHMgdG8gdXNlIGFueSBwYXJ0eWBzIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MsIGV4Y2VwdCBzb2xlbHkgYXMgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy4yLgorRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gWUFIT08hIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZIFJFR0FSRElORyBPUiBSRUxBVElORyBUTyBUSEUgU09GVFdBUkUuIFNQRUNJRklDQUxMWSwgWUFIT08hIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFIE9SIFdJTEwgUEVSRk9STSBJTiBBTiBVTklOVEVSUlVQVEVEIE1BTk5FUi4gVE8gVEhFIEdSRUFURVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgWUFIT08hIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIChFVkVOIElGIFlBSE9PISBIQUQgQkVFTiBJTkZPUk1FRCBPRiBTVUNIIFBVUlBPU0UpLCBBTkQgTk9OSU5GUklOR0VNRU5UIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIEFOWSBNT0RJRklDQVRJT05TIFRIRVJFVE8gQU5EIFdJVEggUkVTUEVDVCBUTyBUSEUgVVNFIE9GIFRIRSBGT1JFR09JTkcuCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorSU4gTk8gRVZFTlQgV0lMTCBZQUhPTyEgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBQUk9GSVRTLCBMT1NTIE9GIFVTRSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIENPU1QgT0YgQ09WRVIpIElOIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBBTlkgT1RIRVIgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBXSEVUSEVSIEFMTEVHRUQgQVMgQSBCUkVBQ0ggT0YgQ09OVFJBQ1QgT1IgVE9SVElPVVMgQ09ORFVDVCwgSU5DTFVESU5HIE5FR0xJR0VOQ0UsIEFORCBFVkVOIElGIFlBSE9PISBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCitUZXJtIGFuZCBUZXJtaW5hdGlvbgorNi4xIC0gVGhpcyBBZ3JlZW1lbnQgd2lsbCBjb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIGFuZCB1bnRpbCB0ZXJtaW5hdGVkIGVhcmxpZXIgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDYuCis2LjIgLSBJbiB0aGUgZXZlbnQgWW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBZYWhvbyEgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudC4KKzYuMyAtIEFsbCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCB0ZXJtaW5hdGUgdXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFRlcm1pbmF0aW9uIHdpbGwgYmUgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyBhbmQgcmVtZWRpZXMgYXZhaWxhYmxlIHRvIFlhaG9vISBhdCBsYXcgb3IgZXF1aXR5IG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorNi40IC0gVGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyByZXNlcnZhdGlvbiBvZiByaWdodHMgKFNlY3Rpb24gMy4xKSwgcHJvdmlzaW9ucyBkaXNjbGFpbWluZyBvciBsaW1pdGluZyBZYWhvbyFgcyBsaWFiaWxpdHkgKFNlY3Rpb25zIDQgYW5kIDUpLCBUZXJtaW5hdGlvbiAoU2VjdGlvbiA2KSBvciBNaXNjZWxsYW5lb3VzIChTZWN0aW9uIDcpLCB3aGljaCBwcm92aXNpb25zIHdpbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KK01pc2NlbGxhbmVvdXMKK1RoaXMgQWdyZWVtZW50IGNvbnRhaW5zIHRoZSBlbnRpcmUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHN1cGVyc2VkZXMgYWxsIHByZXZpb3VzIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byBzYWlkIHN1YmplY3QgbWF0dGVyLiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYXJ0aWVzIGhlcmV1bmRlciBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLCBhbmQgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcy4gSWYgYW55IHRlcm0sIGNvbmRpdGlvbiwgb3IgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHRvIGJlIGludmFsaWQsIHVubGF3ZnVsIG9yIHVuZW5mb3JjZWFibGUgdG8gYW55IGV4dGVudCwgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBjb25zdHJ1ZWQgaW4gYSBtYW5uZXIgdGhhdCBtb3N0IGNsb3NlbHkgZWZmZWN0dWF0ZXMgdGhlIGludGVudCBvZiB0aGlzIEFncmVlbWVudC4gU3VjaCBpbnZhbGlkIHRlcm0sIGNvbmRpdGlvbiBvciBwcm92aXNpb24gd2lsbCBiZSBzZXZlcmVkIGZyb20gdGhlIHJlbWFpbmluZyB0ZXJtcywgY29uZGl0aW9ucyBhbmQgcHJvdmlzaW9ucywgd2hpY2ggd2lsbCBjb250aW51ZSB0byBiZSB2YWxpZCBhbmQgZW5mb3JjZWFibGUgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIGNvbmZsaWN0IG9mIGxhdyBwcmluY2lwbGVzLiBUaGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBBZ3JlZW1lbnQuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBpbnZvbHZpbmcgWWFob28hIG9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIE5vIHJpZ2h0cyBtYXkgYmUgYXNzaWduZWQsIG5vIG9ibGlnYXRpb25zIG1heSBiZSBkZWxlZ2F0ZWQsIGFuZCB0aGlzIEFncmVlbWVudCBtYXkgbm90IGJlIHRyYW5zZmVycmVkIGJ5IFlvdSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2hldGhlciB2b2x1bnRhcnkgb3IgYnkgb3BlcmF0aW9uIG9mIGxhdywgaW5jbHVkaW5nIGJ5IHdheSBvZiBzYWxlIG9mIGFzc2V0cywgbWVyZ2VyIG9yIGNvbnNvbGlkYXRpb24sIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBZYWhvbyEsIGFuZCBhbnkgcHVycG9ydGVkIGFzc2lnbm1lbnQsIGRlbGVnYXRpb24gb3IgdHJhbnNmZXIgd2l0aG91dCBzdWNoIGNvbnNlbnQgc2hhbGwgYmUgdm9pZCBhYiBpbml0aW8uIEFueSB3YWl2ZXIgb2YgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3Igb2YgYSBwYXJ0eWBzIHJpZ2h0cyBvciByZW1lZGllcyB1bmRlciB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluIHdyaXRpbmcgdG8gYmUgZWZmZWN0aXZlLiBGYWlsdXJlLCBuZWdsZWN0IG9yIGRlbGF5IGJ5IGEgcGFydHkgdG8gZW5mb3JjZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIHJlbWVkaWVzIGF0IGFueSB0aW1lLCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgb3IgYmUgZGVlbWVkIHRvIGJlIGEgd2FpdmVyIG9mIHN1Y2ggcGFydHlgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIHdpbGwgbm90IGluIGFueSB3YXkgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcHJlanVkaWNlIHN1Y2ggcGFydHlgcyByaWdodCB0byB0YWtlIHN1YnNlcXVlbnQgYWN0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMS4xIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmFhYmVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTEuMQpAQCAtMCwwICsxLDI4IEBACisKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAxLjEKKworQ29weXJpZ2h0IChjKSBab3BlIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGxpY2Vuc2UgaGFzIGJlZW4gY2VydGlmaWVkIGFzIG9wZW4gc291cmNlLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBhbmQgZG9jdW1lbnRhdGlvbiBtZW50aW9uaW5nIGZlYXR1cmVzIGRlcml2ZWQgZnJvbSBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBab3BlIENvcnBvcmF0aW9uIGZvciB1c2UgaW4gdGhlIFogT2JqZWN0IFB1Ymxpc2hpbmcgRW52aXJvbm1lbnQgKGh0dHA6Ly93d3cuem9wZS5jb20vKS4iCisKK0luIHRoZSBldmVudCB0aGF0IHRoZSBwcm9kdWN0IGJlaW5nIGFkdmVydGlzZWQgaW5jbHVkZXMgYW4gaW50YWN0IFpvcGUgZGlzdHJpYnV0aW9uICh3aXRoIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmNsdWRlZCkgdGhlbiB0aGlzIGNsYXVzZSBpcyB3YWl2ZWQuCisKK05hbWVzIGFzc29jaWF0ZWQgd2l0aCBab3BlIG9yIFpvcGUgQ29ycG9yYXRpb24gbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBab3BlIENvcnBvcmF0aW9uLgorTW9kaWZpZWQgcmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFpvcGUgQ29ycG9yYXRpb24gZm9yIHVzZSBpbiB0aGUgWiBPYmplY3QgUHVibGlzaGluZyBFbnZpcm9ubWVudCAoaHR0cDovL3d3dy56b3BlLmNvbS8pLiIKKworSW50YWN0IChyZS0pZGlzdHJpYnV0aW9ucyBvZiBhbnkgb2ZmaWNpYWwgWm9wZSByZWxlYXNlIGRvIG5vdCByZXF1aXJlIGFuIGV4dGVybmFsIGFja25vd2xlZGdlbWVudC4KKworTW9kaWZpY2F0aW9ucyBhcmUgZW5jb3VyYWdlZCBidXQgbXVzdCBiZSBwYWNrYWdlZCBzZXBhcmF0ZWx5IGFzIHBhdGNoZXMgdG8gb2ZmaWNpYWwgWm9wZSByZWxlYXNlcy4gRGlzdHJpYnV0aW9ucyB0aGF0IGRvIG5vdCBjbGVhcmx5IHNlcGFyYXRlIHRoZSBwYXRjaGVzIGZyb20gdGhlIG9yaWdpbmFsIHdvcmsgbXVzdCBiZSBjbGVhcmx5IGxhYmVsZWQgYXMgdW5vZmZpY2lhbCBkaXN0cmlidXRpb25zLiBNb2RpZmljYXRpb25zIHdoaWNoIGRvIG5vdCBjYXJyeSB0aGUgbmFtZSBab3BlIG1heSBiZSBwYWNrYWdlZCBpbiBhbnkgZm9ybSwgYXMgbG9uZyBhcyB0aGV5IGNvbmZvcm0gdG8gYWxsIG9mIHRoZSBjbGF1c2VzIGFib3ZlLgorRGlzY2xhaW1lcgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBaT1BFIENPUlBPUkFUSU9OIGBgQVMgSVNgYCBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFpPUEUgQ09SUE9SQVRJT04gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiBjb250cmlidXRpb25zIG1hZGUgYnkgWm9wZSBDb3Jwb3JhdGlvbiBhbmQgbWFueSBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgWm9wZSBDb3Jwb3JhdGlvbi4gU3BlY2lmaWMgYXR0cmlidXRpb25zIGFyZSBsaXN0ZWQgaW4gdGhlIGFjY29tcGFueWluZyBjcmVkaXRzIGZpbGUuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjAgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZTIwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aUEwtMi4wCkBAIC0wLDAgKzEsNjEgQEAKKworWm9wZSBQdWJsaWMgTGljZW5zZSAoWlBMKSBWZXJzaW9uIDIuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb2Z0d2FyZSBpcyBDb3B5cmlnaHQgKGMpIFpvcGUgQ29ycG9yYXRpb24gKHRtKSBhbmQKK0NvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4gSXQgaGFzIGFsc28KK2JlZW4gZGVzaWduYXRlZCBhcyBHUEwgY29tcGF0aWJsZSBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiAoRlNGKS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgord2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUKK2ZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBpbiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIG5hbWUgWm9wZSBDb3Jwb3JhdGlvbiAodG0pIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBab3BlIENvcnBvcmF0aW9uLgorCis0LiBUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IKKyAgIGFueSBwdXJwb3NlIGRvZXMgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzCisgICAoc20pIG9yIFRyYWRlbWFya3MgKHRtKSBvZiBab3BlIENvcnBvcmF0aW9uLiBVc2Ugb2YgdGhlbSBpcworICAgY292ZXJlZCBpbiBhIHNlcGFyYXRlIGFncmVlbWVudCAoc2VlCisgICBodHRwOi8vd3d3LnpvcGUuY29tL01hcmtzKS4KKworNS4gSWYgYW55IGZpbGVzIGFyZSBtb2RpZmllZCwgeW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkCisgICBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQKKyAgIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworRGlzY2xhaW1lcgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgWk9QRSBDT1JQT1JBVElPTiBgYEFTIElTYGAKKyAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVAorICBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAgTk8gRVZFTlQgU0hBTEwgWk9QRSBDT1JQT1JBVElPTiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFCisgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAgREFNQUdFLgorCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2YgY29udHJpYnV0aW9ucyBtYWRlIGJ5IFpvcGUKK0NvcnBvcmF0aW9uIGFuZCBtYW55IGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBab3BlCitDb3Jwb3JhdGlvbi4gIFNwZWNpZmljIGF0dHJpYnV0aW9ucyBhcmUgbGlzdGVkIGluIHRoZQorYWNjb21wYW55aW5nIGNyZWRpdHMgZmlsZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWlBMLTIuMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5ZDQzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1pQTC0yLjEKQEAgLTAsMCArMSwxOCBAQAorCitaUEwgMi4xCitab3BlIFB1YmxpYyBMaWNlbnNlIChaUEwpIFZlcnNpb24gMi4xCisKK0EgY29weXJpZ2h0IG5vdGljZSBhY2NvbXBhbmllcyB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgdGhhdCBpZGVudGlmaWVzIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4gSXQgaGFzIGFsc28gYmVlbiBkZXNpZ25hdGVkIGFzIEdQTCBjb21wYXRpYmxlIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEZTRikuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFjY29tcGFueWluZyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KK05hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KK1RoZSByaWdodCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgb3IgdG8gdXNlIGl0IGZvciBhbnkgcHVycG9zZSBkb2VzIG5vdCBnaXZlIHlvdSB0aGUgcmlnaHQgdG8gdXNlIFNlcnZpY2VtYXJrcyAoc20pIG9yIFRyYWRlbWFya3MgKHRtKSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMuIFVzZSBvZiB0aGVtIGlzIGNvdmVyZWQgYnkgc2VwYXJhdGUgYWdyZWVtZW50IHdpdGggdGhlIGNvcHlyaWdodCBob2xkZXJzLgorSWYgYW55IGZpbGVzIGFyZSBtb2RpZmllZCwgeW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCitEaXNjbGFpbWVyCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTYGAgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL1ppbWJyYS0xLjMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjdiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9aaW1icmEtMS4zCkBAIC0wLDAgKzEsMzAgQEAKKworWmltYnJhIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMyAoWlBMKQorVGhpcyBaaW1icmEgUHVibGljIExpY2Vuc2UgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSB0ZXJtcyB1bmRlciB3aGljaCBWTXdhcmUsIEluYy4sIGEgRGVsYXdhcmUgY29ycG9yYXRpb24gaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgMzQwMSBIaWxsdmlldyBBdmVudWUsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwNCAoIlZNd2FyZSIpIHdpbGwgcHJvdmlkZSBzb2Z0d2FyZSB0byB5b3UgdmlhIGRvd25sb2FkIG9yIG90aGVyd2lzZSAoIlNvZnR3YXJlIikuIEJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91LCBhbiBpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSAoIllvdSIpIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3csIHRoZSBwYXJ0aWVzIGFncmVlIGFzIGZvbGxvd3M6CisKKzEuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlCisxLjEgLSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgVk13YXJlIGhlcmVieSBncmFudHMgdG8gWW91LCB1bmRlciBhbnkgYW5kIGFsbCBvZiBpdHMgY29weXJpZ2h0IGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUsIGEgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gY29weSwgbW9kaWZ5LCBjb21waWxlLCBleGVjdXRlLCBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIE1vZGlmaWNhdGlvbnMuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBjaGFuZ2UgdG8sIGFkZGl0aW9uIHRvLCBvciBhYnJpZGdlbWVudCBvZiB0aGUgU29mdHdhcmUgbWFkZSBieSBZb3UgaXMgYSAiTW9kaWZpY2F0aW9uOyIgaG93ZXZlciwgYW55IGZpbGUgWW91IGFkZCB0byB0aGUgU29mdHdhcmUgdGhhdCBkb2VzIG5vdCBjb250YWluIGFueSBwYXJ0IG9mIHRoZSBTb2Z0d2FyZSBpcyBub3QgYSAiTW9kaWZpY2F0aW9uLiIKKzEuMiAtIElmIFlvdSBhcmUgYW4gaW5kaXZpZHVhbCBhY3Rpbmcgb24gYmVoYWxmIG9mIGEgY29ycG9yYXRpb24gb3Igb3RoZXIgZW50aXR5LCBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFlvdXIgaGF2aW5nIHRoZSBhdXRob3JpdHkgdG8gYmluZCBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSB0byB0aGlzIEFncmVlbWVudC4gUHJvdmlkaW5nIGNvcGllcyB0byBwZXJzb25zIHdpdGhpbiBzdWNoIGNvcnBvcmF0aW9uIG9yIGVudGl0eSBpcyBub3QgY29uc2lkZXJlZCBkaXN0cmlidXRpb24gZm9yIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LgorMS4zIC0gRm9yIHRoZSBTb2Z0d2FyZSBvciBhbnkgTW9kaWZpY2F0aW9uIFlvdSBkaXN0cmlidXRlIGluIHNvdXJjZSBjb2RlIGZvcm1hdCwgWW91IG11c3QgZG8gc28gb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29tcGxldGUgY29weSBvZiB0aGlzIEFncmVlbWVudCB3aXRoIFlvdXIgZGlzdHJpYnV0aW9uLiBXaXRoIHJlc3BlY3QgdG8gYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBmb3JtYXQsIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIFlvdSBpbiB0aGUgc2FtZSB3YXkgdGhvc2UgdGVybXMgYXBwbHkgdG8gVk13YXJlIHdpdGggcmVzcGVjdCB0byB0aGUgU29mdHdhcmUuIEluIG90aGVyIHdvcmRzLCB3aGVuIFlvdSBhcmUgZGlzdHJpYnV0aW5nIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIFlvdSAic3RhbmQgaW4gdGhlIHNob2VzIiBvZiBWTXdhcmUgaW4gdGVybXMgb2YgdGhlIHJpZ2h0cyBZb3UgZ3JhbnQgYW5kIGhvdyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gWW91IGFuZCB0aGUgbGljZW5zZWVzIG9mIFlvdXIgTW9kaWZpY2F0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdoZW4gWW91ICJzdGFuZCBpbiB0aGUgc2hvZXMiIG9mIFZNd2FyZSwgWW91IGFyZSBub3Qgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIHByb3Zpc2lvbiB1bmRlciBTZWN0aW9uIDcsIHdoaWNoIHJlcXVpcmVzIGFsbCBkaXNwdXRlcyB1bmRlciB0aGlzIEFncmVlbWVudCB0byBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYS4KKzEuNCAtIEZvciB0aGUgU29mdHdhcmUgb3IgYW55IE1vZGlmaWNhdGlvbiBZb3UgZGlzdHJpYnV0ZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtYXQsIFlvdSBtdXN0IGFsc28gcHJvdmlkZSByZWNpcGllbnRzIHdpdGggYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb24gaW4gc291cmNlIGNvZGUgZm9ybWF0IGFsb25nIHdpdGggYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LiBUaGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBNb2RpZmljYXRpb25zIGluIGNvbXBpbGVkIG9yIG9iamVjdCBjb2RlIGZvcm1hdCBtYXkgYmUgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSW4gYWRkaXRpb24sIFlvdSBtdXN0IG1ha2UgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBsaWNlbnNlIHRlcm1zIGFwcGx5aW5nIHRvIHN1Y2ggU29mdHdhcmUgb3IgTW9kaWZpY2F0aW9uIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lIGFuZCBub3QgYnkgVk13YXJlLCBhbmQgdGhhdCBzdWNoIGxpY2Vuc2UgZG9lcyBub3QgcmVzdHJpY3QgcmVjaXBpZW50cyBmcm9tIGV4ZXJjaXNpbmcgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byB0aGUgU29mdHdhcmUgZ3JhbnRlZCBieSBWTXdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgcmlnaHRzIGluIHRoZSBzb3VyY2UgY29kZSB0byBhbnkgTW9kaWZpY2F0aW9uIGdyYW50ZWQgYnkgWW91IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDEuMy4KKzEuNSAtIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGxpbWl0IFlvdXIgcmlnaHQgdG8gZGlzdHJpYnV0ZSBmaWxlcyB0aGF0IGFyZSBlbnRpcmVseSBZb3VyIG93biB3b3JrIChpLmUuLCB3aGljaCBkbyBub3QgaW5jb3Jwb3JhdGUgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBhcmUgbm90IE1vZGlmaWNhdGlvbnMpIHVuZGVyIGFueSB0ZXJtcyBZb3UgY2hvb3NlLgorMi4gU3VwcG9ydAorVk13YXJlIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgb3IgdXBkYXRlcyB0byBZb3UuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgcmVxdWlyZXMgVk13YXJlIHRvIGVudGVyIGludG8gYW55IGxpY2Vuc2Ugd2l0aCBZb3UgZm9yIGFueSBvdGhlciBlZGl0aW9uIG9mIHRoZSBTb2Z0d2FyZS4KKzMuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMKKzMuMSAtIEV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgY29weXJpZ2h0IGluIFNlY3Rpb24gMS4xLCBubyByaWdodHMsIGxpY2Vuc2VzIG9yIGZvcmJlYXJhbmNlcyBhcmUgZ3JhbnRlZCBvciBtYXkgYXJpc2UgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBleGhhdXN0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgdGhhdCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCiszLjIgLSBJbiBhbnkgY29weSBvZiB0aGUgU29mdHdhcmUgb3IgaW4gYW55IE1vZGlmaWNhdGlvbiB5b3UgY3JlYXRlLCBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSwgYW55IGFuZCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFNvZnR3YXJlIGluIHRoZSBzYW1lIGZvcm0gYXMgdGhleSBhcHBlYXIgaW4gdGhlIFNvZnR3YXJlLiBUaGlzIGluY2x1ZGVzIHRoZSBwcmVzZXJ2YXRpb24gb2YgYXR0cmlidXRpb24gbm90aWNlcyBpbiB0aGUgZm9ybSBvZiB0cmFkZW1hcmtzIG9yIGxvZ29zIHRoYXQgZXhpc3Qgd2l0aGluIGEgdXNlciBpbnRlcmZhY2Ugb2YgdGhlIFNvZnR3YXJlLgorMy4zIC0gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IFlvdSByaWdodHMgdG8gdXNlIGFueSBwYXJ0eWBzIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MsIGV4Y2VwdCBzb2xlbHkgYXMgbmVjZXNzYXJ5IHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy4yLgorNC4gRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gVk1XQVJFIE1BS0VTIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZIFJFR0FSRElORyBPUiBSRUxBVElORyBUTyBUSEUgU09GVFdBUkUuIFNQRUNJRklDQUxMWSwgVk1XQVJFIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBCRSBFUlJPUiBGUkVFIE9SIFdJTEwgUEVSRk9STSBJTiBBTiBVTklOVEVSUlVQVEVEIE1BTk5FUi4gVE8gVEhFIEdSRUFURVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgVk1XQVJFIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIChFVkVOIElGIFZNV0FSRSBIQUQgQkVFTiBJTkZPUk1FRCBPRiBTVUNIIFBVUlBPU0UpLCBBTkQgTk9OSU5GUklOR0VNRU5UIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIEFOWSBNT0RJRklDQVRJT05TIFRIRVJFVE8gQU5EIFdJVEggUkVTUEVDVCBUTyBUSEUgVVNFIE9GIFRIRSBGT1JFR09JTkcuCis1LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorSU4gTk8gRVZFTlQgV0lMTCBWTVdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TUyBPRiBQUk9GSVRTLCBMT1NTIE9GIFVTRSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIENPU1QgT0YgQ09WRVIpIElOIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORyBUTyBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBBTlkgT1RIRVIgUklHSFRTIEdSQU5URUQgSEVSRVVOREVSLCBXSEVUSEVSIEFMTEVHRUQgQVMgQSBCUkVBQ0ggT0YgQ09OVFJBQ1QgT1IgVE9SVElPVVMgQ09ORFVDVCwgSU5DTFVESU5HIE5FR0xJR0VOQ0UsIEFORCBFVkVOIElGIFZNV0FSRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCis2LiBUZXJtIGFuZCBUZXJtaW5hdGlvbgorNi4xIC0gVGhpcyBBZ3JlZW1lbnQgd2lsbCBjb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIGFuZCB1bnRpbCB0ZXJtaW5hdGVkIGVhcmxpZXIgcHVyc3VhbnQgdG8gdGhpcyBTZWN0aW9uIDYuCis2LjIgLSBJbiB0aGUgZXZlbnQgWW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBWTXdhcmUgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudC4KKzYuMyAtIEFsbCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCB0ZXJtaW5hdGUgdXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFRlcm1pbmF0aW9uIHdpbGwgYmUgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyBhbmQgcmVtZWRpZXMgYXZhaWxhYmxlIHRvIFZNd2FyZSBhdCBsYXcgb3IgZXF1aXR5IG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorNi40IC0gVGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHRoZSBwcm92aXNpb25zIHJlZ2FyZGluZyByZXNlcnZhdGlvbiBvZiByaWdodHMgKFNlY3Rpb24gMy4xKSwgcHJvdmlzaW9ucyBkaXNjbGFpbWluZyBvciBsaW1pdGluZyBWTXdhcmVgcyBsaWFiaWxpdHkgKFNlY3Rpb25zIDQgYW5kIDUpLCBUZXJtaW5hdGlvbiAoU2VjdGlvbiA2KSBvciBNaXNjZWxsYW5lb3VzIChTZWN0aW9uIDcpLCB3aGljaCBwcm92aXNpb25zIHdpbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKzcuIE1pc2NlbGxhbmVvdXMKK1RoaXMgQWdyZWVtZW50IGNvbnRhaW5zIHRoZSBlbnRpcmUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHN1cGVyc2VkZXMgYWxsIHByZXZpb3VzIGNvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byBzYWlkIHN1YmplY3QgbWF0dGVyLiBUaGUgcmVsYXRpb25zaGlwIG9mIHRoZSBwYXJ0aWVzIGhlcmV1bmRlciBpcyB0aGF0IG9mIGluZGVwZW5kZW50IGNvbnRyYWN0b3JzLCBhbmQgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgY29uc3RydWVkIGFzIGNyZWF0aW5nIGFuIGFnZW5jeSwgcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgYW55IG90aGVyIGZvcm0gb2YgbGVnYWwgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcy4gSWYgYW55IHRlcm0sIGNvbmRpdGlvbiwgb3IgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHRvIGJlIGludmFsaWQsIHVubGF3ZnVsIG9yIHVuZW5mb3JjZWFibGUgdG8gYW55IGV4dGVudCwgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBjb25zdHJ1ZWQgaW4gYSBtYW5uZXIgdGhhdCBtb3N0IGNsb3NlbHkgZWZmZWN0dWF0ZXMgdGhlIGludGVudCBvZiB0aGlzIEFncmVlbWVudC4gU3VjaCBpbnZhbGlkIHRlcm0sIGNvbmRpdGlvbiBvciBwcm92aXNpb24gd2lsbCBiZSBzZXZlcmVkIGZyb20gdGhlIHJlbWFpbmluZyB0ZXJtcywgY29uZGl0aW9ucyBhbmQgcHJvdmlzaW9ucywgd2hpY2ggd2lsbCBjb250aW51ZSB0byBiZSB2YWxpZCBhbmQgZW5mb3JjZWFibGUgdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW50ZXJwcmV0ZWQgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIHdpdGhvdXQgcmVnYXJkIHRvIGNvbmZsaWN0IG9mIGxhdyBwcmluY2lwbGVzLiBUaGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBBZ3JlZW1lbnQuIEFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBpbnZvbHZpbmcgVk13YXJlIG9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBvciBzdGF0ZSBjb3VydHMgb2Ygbm9ydGhlcm4gQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuIE5vIHJpZ2h0cyBtYXkgYmUgYXNzaWduZWQsIG5vIG9ibGlnYXRpb25zIG1heSBiZSBkZWxlZ2F0ZWQsIGFuZCB0aGlzIEFncmVlbWVudCBtYXkgbm90IGJlIHRyYW5zZmVycmVkIGJ5IFlvdSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2hldGhlciB2b2x1bnRhcnkgb3IgYnkgb3BlcmF0aW9uIG9mIGxhdywgaW5jbHVkaW5nIGJ5IHdheSBvZiBzYWxlIG9mIGFzc2V0cywgbWVyZ2VyIG9yIGNvbnNvbGlkYXRpb24sIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBWTXdhcmUsIGFuZCBhbnkgcHVycG9ydGVkIGFzc2lnbm1lbnQsIGRlbGVnYXRpb24gb3IgdHJhbnNmZXIgd2l0aG91dCBzdWNoIGNvbnNlbnQgc2hhbGwgYmUgdm9pZCBhYiBpbml0aW8uIEFueSB3YWl2ZXIgb2YgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb3Igb2YgYSBwYXJ0eWBzIHJpZ2h0cyBvciByZW1lZGllcyB1bmRlciB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluIHdyaXRpbmcgdG8gYmUgZWZmZWN0aXZlLiBGYWlsdXJlLCBuZWdsZWN0IG9yIGRlbGF5IGJ5IGEgcGFydHkgdG8gZW5mb3JjZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBvciBpdHMgcmlnaHRzIG9yIHJlbWVkaWVzIGF0IGFueSB0aW1lLCB3aWxsIG5vdCBiZSBjb25zdHJ1ZWQgb3IgYmUgZGVlbWVkIHRvIGJlIGEgd2FpdmVyIG9mIHN1Y2ggcGFydHlgcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIHdpbGwgbm90IGluIGFueSB3YXkgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcHJlanVkaWNlIHN1Y2ggcGFydHlgcyByaWdodCB0byB0YWtlIHN1YnNlcXVlbnQgYWN0aW9uLgorCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9abGliIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGIzODg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvWmxpYgpAQCAtMCwwICsxLDIxIEBACisKK3psaWIgTGljZW5zZQorCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYXMtaXNgLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisKZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvYnppcDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNTk5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2J6aXAyCkBAIC0wLDAgKzEsNDEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcHJvZ3JhbSwgImJ6aXAyIiwgdGhlIGFzc29jaWF0ZWQgbGlicmFyeSAibGliYnppcDIiLCBhbmQgYWxsCitkb2N1bWVudGF0aW9uLCBhcmUgY29weXJpZ2h0IChDKSAxOTk2LTIwMTAgSnVsaWFuIFIgU2V3YXJkLiAgQWxsCityaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0CisgICBub3QgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiAgSWYgeW91IHVzZSB0aGlzCisgICBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0CisgICBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisKKzMuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3QKKyAgIG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCisKKzQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCitHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworSnVsaWFuIFNld2FyZCwganNld2FyZEBiemlwLm9yZworYnppcDIvbGliYnppcDIgdmVyc2lvbiAxLjAuNiBvZiA2IFNlcHRlbWJlciAyMDEwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMCBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2VDb3MtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YjVkNjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9lQ29zLTIuMApAQCAtMCwwICsxLDE4IEBACisKK1RoZSBlQ29zIGxpY2Vuc2UgdmVyc2lvbiAyLjAKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgZUNvcywgdGhlIEVtYmVkZGVkIENvbmZpZ3VyYWJsZSBPcGVyYXRpbmcgU3lzdGVtLiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorZUNvcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworZUNvcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCBlQ29zOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUgdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUgdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgd29yayB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gSG93ZXZlciB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBtdXN0IHN0aWxsIGJlIG1hZGUgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCBzZWN0aW9uICgzKSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK1RoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IGEgd29yayBiYXNlZCBvbiB0aGlzIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKK0FsdGVybmF0aXZlIGxpY2Vuc2VzIGZvciBlQ29zIG1heSBiZSBhcnJhbmdlZCBieSBjb250YWN0aW5nIFJlZCBIYXQsIEluYy4gYXQgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9lY29zL2Vjb3MtbGljZW5zZS8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIyMjRUNPU0dQTENPUFlSSUdIVEVORCMjIyMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMSBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4NjM4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL2dTT0FQLTEKQEAgLTAsMCArMSwzODAgQEAKKworZ1NPQVAgUHVibGljIExpY2Vuc2UKKworVmVyc2lvbiAxLjNiCisKK1RoZSBnU09BUCBwdWJsaWMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTDEuMSkuCitUaGUgc2VjdGlvbnMgdGhhdCB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgTVBMMS4xIHRleHQgYXJlIDEuMC4xLCAyLjEuCisoYyksKGQpLCAyLjIuKGMpLChkKSwgOC4yLihiKSwgMTAsIGFuZCAxMS4gU2VjdGlvbiAzLjggd2FzIGFkZGVkLiBUaGUgbW9kaWZpZWQKK3NlY3Rpb25zIGFyZSAyLjEuKGIpLCAyLjIuKGIpLCAzLjIgKHNpbXBsaWZpZWQpLCAzLjUgKGRlbGV0ZWQgdGhlIGxhc3QKK3NlbnRlbmNlKSwgYW5kIDMuNiAoc2ltcGxpZmllZCkuCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgZ1NPQVAgc29mdHdhcmUgcGFja2FnZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZQorc29hcGNwcDIgYW5kIHdzZGwyaCBzb3VyY2UgY29kZSBsb2NhdGVkIGluIGdzb2FwL3NyYyBhbmQgZ3NvYXAvd3NkbCwgYWxsIGNvZGUKK2dlbmVyYXRlZCBieSBzb2FwY3BwMiBhbmQgd3NkbDJoLCB0aGUgVURESSBzb3VyY2UgY29kZSBnc29hcC91ZGRpMiwgYW5kIHRoZSBXZWIKK3NlcnZlciBzYW1wbGUgc291cmNlIGNvZGUgc2FtcGxlcy93ZWJzZXJ2ZXIuIFRvIHVzZSBhbnkgb2YgdGhlc2Ugc29mdHdhcmUgdG9vbHMKK2FuZCBjb21wb25lbnRzIGNvbW1lcmNpYWxseSwgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgcmVxdWlyZWQgYW5kIGNhbiBiZQorb2J0YWluZWQgZnJvbSB3d3cuZ2VuaXZpYS5jb20uCisxIERFRklOSVRJT05TLgorCisxLjAuMS4KKzEuMS4gIkNvbnRyaWJ1dG9yIgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIKK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEKK0NvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMuICJDb3ZlcmVkIENvZGUiCittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCitDb2RlLCBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yCit0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorMS41LiAiRXhlY3V0YWJsZSIKK21lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiCittZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlCitTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBLgorMS43LiAiTGFyZ2VyIFdvcmsiCittZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZQordGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvciBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMKK2NvbnZleWVkIGhlcmVpbi4KKzEuOS4gIk1vZGlmaWNhdGlvbnMiCittZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlCitPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhCitzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOgorQS4KK0FueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbAorQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorQi4KK0FueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBvciBwcmV2aW91cworTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZQorQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YKK2l0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcworTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dAorbGltaXRhdGlvbiwgbWV0aG9kLCBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5CitncmFudG9yLgorMS4xMS4gIlNvdXJjZSBDb2RlIgorbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LAoraW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uCitmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLAorb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUKK1NvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlCitkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlIGZvciBubyBjaGFyZ2UuCisxLjEyLiAiWW91IiAob3IgIllvdXIiKQorbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZword2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UKK2lzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkKK2VudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuCitGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwKK2RpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAord2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyIFNPVVJDRSBDT0RFIExJQ0VOU0UuCisKKzIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi0KK2V4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZQorYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZQorYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dAorTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisoYikKK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0bworbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQiKSB0aGUKK09yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudAordGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvcgoraW4gY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueQorY29tYmluYXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZi4KKyhjKQorKGQpCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkKK2dyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorKGEpCit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUKK2J5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpCitlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yCithcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpCit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwKK2hhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIENvbnRyaWJ1dG9yCitWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzCityZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGgKK290aGVyIHNvZnR3YXJlLCB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisoYykKKyhkKQorMyBESVNUUklCVVRJT04gT0JMSUdBVElPTlMuCisKKzMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKworVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UKK211c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91CitkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uCit0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlCityZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gY3JlYXRlZCBieSBZb3Ugd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4KK1NvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4KKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlCitkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMKK2Rlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMuCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IKK3VuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UKK0NvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZQorcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvCitjb250YWN0LiBJZiBDb250cmlidXRvciBvYnRhaW5zIHN1Y2gga25vd2xlZGdlIGFmdGVyIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZQorYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZQorTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlCitvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldwora25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCitDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KK2ltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwKK2ZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpCithYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3MKK29yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlCityaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZgoraXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8KK2l0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEKK3JlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZgorWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yCit0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbgorYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yCitvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0bworY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lCitvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4KKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUKK0V4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91cgorY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91CithcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbgordGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdQorZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdAorYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIElmIHlvdSBkaXN0cmlidXRlCitleGVjdXRhYmxlIHZlcnNpb25zIGNvbnRhaW5pbmcgQ292ZXJlZCBDb2RlIGFzIHBhcnQgb2YgYSBwcm9kdWN0LCB5b3UgbXVzdAorcmVwcm9kdWNlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBCIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKK3Byb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuCisKKzMuNy4gTGFyZ2VyIFdvcmtzLgorCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYQorc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzCitMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuOC4gUmVzdHJpY3Rpb25zLgorCitZb3UgbWF5IG5vdCByZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCwgcHJvcHJpZXRhcnkgbm90aWNlcworb3IgbGFiZWxzIGZyb20gZ1NPQVAuCis0IElOQUJJTElUWSBUTyBDT01QTFkgRFVFIFRPIFNUQVRVVEUgT1IgUkVHVUxBVElPTi4KKworSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsCitvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZQorbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5CithZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4KK1NlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLgorRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvCit1bmRlcnN0YW5kIGl0LgorNSBBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UuCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNiBWRVJTSU9OUyBPRiBUSEUgTElDRU5TRS4KKworNi4xLiBOZXcgVmVyc2lvbnMuCisKK0dyYW50b3IgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0bwordGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorCitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorCitJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5IG9ubHkgZG8KK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMKK0xpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2UgImdTT0FQIgorb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZQordGhhdCB5b3VyIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhcgordGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIGdTT0FQCitQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yCitDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUKK2RlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCis3IERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKK1dJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIElOVEVMTEVDVFVBTCBQUk9QRVJUWQorUklHSFRTLCBBTkQgQU5ZIFdBUlJBTlRZIFRIQVQgTUFZIEFSSVNFIEJZIFJFQVNPTiBPRiBUUkFERSBVU0FHRSwgQ1VTVE9NLCBPUgorQ09VUlNFIE9GIERFQUxJTkcuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFCitTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEFUIFRIRSBBVVRIT1JTIERPIE5PVCBXQVJSQU5UIFRIRQorU09GVFdBUkUgV0lMTCBSVU4gVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFLiBMSU1JVEVEIExJQUJJTElUWSBUSEUgRU5USVJFCitSSVNLIEFTIFRPIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gVU5ERVIgTk8KK0NJUkNVTVNUQU5DRVMgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK0VYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgT1IgTkFUVVJFIFdIQVRTT0VWRVIsIFdIRVRIRVIKK0JBU0VEIE9OIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgT1VUIE9GIE9SIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUsIEVWRU4gSUYgVEhFCitBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9OIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRSBPUiBJRiBTVUNIIERBTUFHRQorQ09VTEQgSEFWRSBCRUVOIFJFQVNPTkFCTFkgRk9SRVNFRU4sIEFORCBOT1RXSVRIU1RBTkRJTkcgQU5ZIEZBSUxVUkUgT0YKK0VTU0VOVElBTCBQVVJQT1NFIE9GIEFOWSBFWENMVVNJVkUgUkVNRURZIFBST1ZJREVELiBTVUNIIExJTUlUQVRJT04gT04gREFNQUdFUworSU5DTFVERVMsIEJVVCBJUyBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgTE9TVCBQUk9GSVRTLAorTE9TUyBPRiBEQVRBIE9SIFNPRlRXQVJFLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OIE9SCitJTVBBSVJNRU5UIE9GIE9USEVSIEdPT0RTLiBJTiBOTyBFVkVOVCBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgVEhFIENPU1RTCitPRiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIFNPRlRXQVJFIE9SIFNFUlZJQ0VTLiBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSElTCitTT0ZUV0FSRSBJUyBOT1QgREVTSUdORUQgRk9SIFVTRSBJTiBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMgRU5WSVJPTk1FTlRTCitTVUNIIEFTIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsIEFJUkNSQUZUIE5BVklHQVRJT04gT1IgQ09OVFJPTCwgT1IKK0xJRkUtQ1JJVElDQUwgQVBQTElDQVRJT05TLiBUSEUgQVVUSE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZIExJQUJJTElUWQorUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTiBIQVpBUkRPVVMKK0VOVklST05NRU5UUyBBTkQgQUNDRVBUUyBOTyBMSUFCSUxJVFkgSU4gUkVTUEVDVCBPRiBBTlkgQUNUSU9OUyBPUiBDTEFJTVMgQkFTRUQKK09OIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUworRU5WSVJPTk1FTlRTIEJZIFlPVS4gRk9SIFBVUlBPU0VTIE9GIFRISVMgUEFSQUdSQVBILCBUSEUgVEVSTSAiTElGRS0KK0NSSVRJQ0FMIEFQUExJQ0FUSU9OIiBNRUFOUyBBTiBBUFBMSUNBVElPTiBJTiBXSElDSCBUSEUgRlVOQ1RJT05JTkcgT1IKK01BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwKK0lOSlVSWSBPUiBMT1NTIE9GIEhVTUFOIExJRkUuIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTgorRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVECitIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKzggVEVSTUlOQVRJT04uCisKKzguMS4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmCitZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2gKK2FyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucword2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yLgorOC4zLgorSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0CitzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkKK3BhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8KK3RoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZgordGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlCit0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorbGljZW5zZS4KKzguNC4KK0luIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIKK2xpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4KK3ZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbAorc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKzkgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZCitPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWQorT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sCitEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLAorT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMCitIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCitMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORworRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNICitMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRgorSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QKK0FQUExZIFRPIFlPVS4KKzEwIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKzExIE1JU0NFTExBTkVPVVMuCisKKzEyIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUKK2ZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbgorb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQKK0NvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nCitoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCitFWEhJQklUIEEuCisKKyJUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBnU09BUCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisxLjMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCit3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK2h0dHA6Ly93d3cuY3MuZnN1LmVkdS8gZW5nZWxlbi9zb2FwbGljZW5zZS5odG1sCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCitmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgb2YgdGhlIGdTT0FQIFNvZnR3YXJlIGlzOiBzdGRzb2FwLmgsIHN0ZHNvYXAyLmgsIHN0ZHNvYXAuYywKK3N0ZHNvYXAyLmMsIHN0ZHNvYXAuY3BwLCBzdGRzb2FwMi5jcHAsIHNvYXBjcHAyLmgsIHNvYXBjcHAyLmMsIHNvYXBjcHAyX2xleC5sLAorc29hcGNwcDJfeWFjYy55LCBlcnJvcjIuaCwgZXJyb3IyLmMsIHN5bWJvbDIuYywgaW5pdDIuYywgc29hcGRvYzIuaHRtbCwgYW5kCitzb2FwZG9jMi5wZGYsIGh0dHBnZXQuaCwgaHR0cGdldC5jLCBzdGwuaCwgc3RsZGVxdWUuaCwgc3RsbGlzdC5oLCBzdGx2ZWN0b3IuaCwKK3N0bHNldC5oLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIFJvYmVydCBBLiB2YW4gRW5nZWxlbi4gUG9ydGlvbnMKK2NyZWF0ZWQgYnkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBSb2JlcnQgQS4gdmFuCitFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOgorIl9fX19fX19fX19fX19fX19fX19fX19fXy4iCitbTm90ZTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmb3JtIHRoZSB0ZXh0IG9mIHRoZQorbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIGNvZGUuIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZQorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCitFWEhJQklUIEIuCisKKyJQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZ1NPQVAgc29mdHdhcmUuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IGdTT0FQIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sCitHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RIRSBTT0ZUV0FSRSBJTiBUSElTIFBST0RVQ1QgV0FTIElOIFBBUlQgUFJPVklERUQgQlkgR0VOSVZJQSBJTkMgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCitPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4iCisKKworCisKKworCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9nU09BUC0xLjNiIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM5NDJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvZ1NPQVAtMS4zYgpAQCAtMCwwICsxLDE1NyBAQAorCitnU09BUCBQdWJsaWMgTGljZW5zZQorCitWZXJzaW9uIDEuM2IKKworVGhlIGdTT0FQIHB1YmxpYyBsaWNlbnNlIGlzIGRlcml2ZWQgZnJvbSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSAoTVBMMS4xKS4gVGhlIHNlY3Rpb25zIHRoYXQgd2VyZSBkZWxldGVkIGZyb20gdGhlIG9yaWdpbmFsIE1QTDEuMSB0ZXh0IGFyZSAxLjAuMSwgMi4xLihjKSwoZCksIDIuMi4oYyksKGQpLCA4LjIuKGIpLCAxMCwgYW5kIDExLiBTZWN0aW9uIDMuOCB3YXMgYWRkZWQuIFRoZSBtb2RpZmllZCBzZWN0aW9ucyBhcmUgMi4xLihiKSwgMi4yLihiKSwgMy4yIChzaW1wbGlmaWVkKSwgMy41IChkZWxldGVkIHRoZSBsYXN0IHNlbnRlbmNlKSwgYW5kIDMuNiAoc2ltcGxpZmllZCkuCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB0aGUgZ1NPQVAgc29mdHdhcmUgcGFja2FnZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBzb2FwY3BwMiBhbmQgd3NkbDJoIHNvdXJjZSBjb2RlIGxvY2F0ZWQgaW4gZ3NvYXAvc3JjIGFuZCBnc29hcC93c2RsLCBhbGwgY29kZSBnZW5lcmF0ZWQgYnkgc29hcGNwcDIgYW5kIHdzZGwyaCwgdGhlIFVEREkgc291cmNlIGNvZGUgZ3NvYXAvdWRkaTIsIGFuZCB0aGUgV2ViIHNlcnZlciBzYW1wbGUgc291cmNlIGNvZGUgc2FtcGxlcy93ZWJzZXJ2ZXIuIFRvIHVzZSBhbnkgb2YgdGhlc2Ugc29mdHdhcmUgdG9vbHMgYW5kIGNvbXBvbmVudHMgY29tbWVyY2lhbGx5LCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyByZXF1aXJlZCBhbmQgY2FuIGJlIG9idGFpbmVkIGZyb20gd3d3Lmdlbml2aWEuY29tLgorMSAgREVGSU5JVElPTlMuCisKKzEuMC4xLgorMS4xLiAiQ29udHJpYnV0b3IiCittZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisxLjIuICJDb250cmlidXRvciBWZXJzaW9uIgorbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorMS4zLiAiQ292ZXJlZCBDb2RlIgorbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUuICJFeGVjdXRhYmxlIgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCisxLjYuICJJbml0aWFsIERldmVsb3BlciIKK21lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKzEuNy4gIkxhcmdlciBXb3JrIgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKzEuOC4gIkxpY2Vuc2UiCittZWFucyB0aGlzIGRvY3VtZW50LgorMS44LjEuICJMaWNlbnNhYmxlIgorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCisxLjkuICJNb2RpZmljYXRpb25zIgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cyBNb2RpZmljYXRpb25zLiBXaGVuIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBLgorQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KK0IuCitBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKzEuMTAuICJPcmlnaW5hbCBDb2RlIgorbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZSB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiCittZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KKzEuMTEuICJTb3VyY2UgQ29kZSIKK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwgaW5jbHVkaW5nIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yYHMgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCBmb3JtLCBwcm92aWRlZCB0aGUgYXBwcm9wcmlhdGUgZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMi4gIllvdSIgKG9yICJZb3VyIikKK21lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyICBTT1VSQ0UgQ09ERSBMSUNFTlNFLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKQordW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGggb3RoZXIgc29mdHdhcmUsIHRoZSBPcmlnaW5hbCBDb2RlLCBNb2RpZmljYXRpb25zLCBvciBhbnkgY29tYmluYXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZi4KKyhjKQorKGQpCisKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuCisKK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisoYSkKK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKQordW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIG90aGVyIHNvZnR3YXJlLCB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisoYykKKyhkKQorMyAgRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzYCByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LiAKKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisKK0FueSBNb2RpZmljYXRpb24gY3JlYXRlZCBieSBZb3Ugd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gU291cmNlIENvZGUgZm9ybSBhbmQgYXJlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiAKKworMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuIAorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLgorKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eWBzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcmBzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisoYykgUmVwcmVzZW50YXRpb25zLgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yYHMgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3JgcyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCiszLjUuIFJlcXVpcmVkIE5vdGljZXMuCisKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50c2AgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiAKKworMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnRgcyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIElmIHlvdSBkaXN0cmlidXRlIGV4ZWN1dGFibGUgdmVyc2lvbnMgY29udGFpbmluZyBDb3ZlcmVkIENvZGUgYXMgcGFydCBvZiBhIHByb2R1Y3QsIHlvdSBtdXN0IHJlcHJvZHVjZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHByb2R1Y3QuIAorCiszLjcuIExhcmdlciBXb3Jrcy4KKworWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLiAKKworMy44LiBSZXN0cmljdGlvbnMuCisKK1lvdSBtYXkgbm90IHJlbW92ZSBhbnkgcHJvZHVjdCBpZGVudGlmaWNhdGlvbiwgY29weXJpZ2h0LCBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGxhYmVscyBmcm9tIGdTT0FQLgorNCAgSU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorNSAgQVBQTElDQVRJT04gT0YgVEhJUyBMSUNFTlNFLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgYW5kIHRvIHJlbGF0ZWQgQ292ZXJlZCBDb2RlLgorNiAgVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorCitHcmFudG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UuIAorCis2LjMuIERlcml2YXRpdmUgV29ya3MuCisKK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2UgImdTT0FQIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCis3ICBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTLCBBTkQgQU5ZIFdBUlJBTlRZIFRIQVQgTUFZIEFSSVNFIEJZIFJFQVNPTiBPRiBUUkFERSBVU0FHRSwgQ1VTVE9NLCBPUiBDT1VSU0UgT0YgREVBTElORy4gV0lUSE9VVCBMSU1JVElORyBUSEUgRk9SRUdPSU5HLCBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhBVCBUSEUgQVVUSE9SUyBETyBOT1QgV0FSUkFOVCBUSEUgU09GVFdBUkUgV0lMTCBSVU4gVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFLiBMSU1JVEVEIExJQUJJTElUWSBUSEUgRU5USVJFIFJJU0sgQVMgVE8gUkVTVUxUUyBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIElTIEFTU1VNRUQgQlkgWU9VLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFdJTEwgVEhFIEFVVEhPUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIEVYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgT1IgTkFUVVJFIFdIQVRTT0VWRVIsIFdIRVRIRVIgQkFTRUQgT04gQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9OIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRSBPUiBJRiBTVUNIIERBTUFHRSBDT1VMRCBIQVZFIEJFRU4gUkVBU09OQUJMWSBGT1JFU0VFTiwgQU5EIE5PVFdJVEhTVEFORElORyBBTlkgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgRVhDTFVTSVZFIFJFTUVEWSBQUk9WSURFRC4gU1VDSCBMSU1JVEFUSU9OIE9OIERBTUFHRVMgSU5DTFVERVMsIEJVVCBJUyBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgTE9TVCBQUk9GSVRTLCBMT1NTIE9GIERBVEEgT1IgU09GVFdBUkUsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04gT1IgSU1QQUlSTUVOVCBPRiBPVEhFUiBHT09EUy4gSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIFRIRSBDT1NUUyBPRiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIFNPRlRXQVJFIE9SIFNFUlZJQ0VTLiBZT1UgQUNLTk9XTEVER0UgVEhBVCBUSElTIFNPRlRXQVJFIElTIE5PVCBERVNJR05FRCBGT1IgVVNFIElOIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgU1VDSCBBUyBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTlRST0wsIE9SIExJRkUtQ1JJVElDQUwgQVBQTElDQVRJT05TLiBUSEUgQVVUSE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZIExJQUJJTElUWSBSRVNVTFRJTkcgRlJPTSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgQU5EIEFDQ0VQVFMgTk8gTElBQklMSVRZIElOIFJFU1BFQ1QgT0YgQU5ZIEFDVElPTlMgT1IgQ0xBSU1TIEJBU0VEIE9OIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUyBFTlZJUk9OTUVOVFMgQlkgWU9VLiBGT1IgUFVSUE9TRVMgT0YgVEhJUyBQQVJBR1JBUEgsIFRIRSBURVJNICJMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OIiBNRUFOUyBBTiBBUFBMSUNBVElPTiBJTiBXSElDSCBUSEUgRlVOQ1RJT05JTkcgT1IgTUFMRlVOQ1RJT05JTkcgT0YgVEhFIFNPRlRXQVJFIE1BWSBSRVNVTFQgRElSRUNUTFkgT1IgSU5ESVJFQ1RMWSBJTiBQSFlTSUNBTCBJTkpVUlkgT1IgTE9TUyBPRiBIVU1BTiBMSUZFLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorOCAgVEVSTUlOQVRJT04uCisKKzguMS4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKzguMi4KKzguMy4KK0lmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50YHMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCis4LjQuCitJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCis5ICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlgUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorMTAgIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKzExICBNSVNDRUxMQU5FT1VTLgorCisxMiAgUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorRVhISUJJVCBBLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZ1NPQVAgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5jcy5mc3UuZWR1LyBlbmdlbGVuL3NvYXBsaWNlbnNlLmh0bWwKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgb2YgdGhlIGdTT0FQIFNvZnR3YXJlIGlzOiBzdGRzb2FwLmgsIHN0ZHNvYXAyLmgsIHN0ZHNvYXAuYywgc3Rkc29hcDIuYywgc3Rkc29hcC5jcHAsIHN0ZHNvYXAyLmNwcCwgc29hcGNwcDIuaCwgc29hcGNwcDIuYywgc29hcGNwcDJfbGV4LmwsIHNvYXBjcHAyX3lhY2MueSwgZXJyb3IyLmgsIGVycm9yMi5jLCBzeW1ib2wyLmMsIGluaXQyLmMsIHNvYXBkb2MyLmh0bWwsIGFuZCBzb2FwZG9jMi5wZGYsIGh0dHBnZXQuaCwgaHR0cGdldC5jLCBzdGwuaCwgc3RsZGVxdWUuaCwgc3RsbGlzdC5oLCBzdGx2ZWN0b3IuaCwgc3Rsc2V0LmguCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLiBQb3J0aW9ucyBjcmVhdGVkIGJ5IFJvYmVydCBBLiB2YW4gRW5nZWxlbiBhcmUgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLCBHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOgorIl9fX19fX19fX19fX19fX19fX19fX19fXy4iCitbTm90ZTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmb3JtIHRoZSB0ZXh0IG9mIHRoZSBub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgY29kZS4gWW91IHNob3VsZCB1c2UgdGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgcmF0aGVyIHRoYW4gdGhlIHRleHQgZm91bmQgaW4gdGhlIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCitFWEhJQklUIEIuCisKKyJQYXJ0IG9mIHRoZSBzb2Z0d2FyZSBlbWJlZGRlZCBpbiB0aGlzIHByb2R1Y3QgaXMgZ1NPQVAgc29mdHdhcmUuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IGdTT0FQIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sIEdlbml2aWEgaW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBHRU5JVklBIElOQyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDQ5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy90Y2wKQEAgLTAsMCArMSw0MCBAQAorVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBieSB0aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZgorQ2FsaWZvcm5pYSwgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgU2NyaXB0aWNzIENvcnBvcmF0aW9uLCBBY3RpdmVTdGF0ZQorQ29ycG9yYXRpb24gYW5kIG90aGVyIHBhcnRpZXMuICBUaGUgZm9sbG93aW5nIHRlcm1zIGFwcGx5IHRvIGFsbCBmaWxlcworYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2Z0d2FyZSB1bmxlc3MgZXhwbGljaXRseSBkaXNjbGFpbWVkIGluCitpbmRpdmlkdWFsIGZpbGVzLgorCitUaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwKK2FuZCBsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQKK3RoYXQgZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcworbm90aWNlIGlzIGluY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiBObyB3cml0dGVuIGFncmVlbWVudCwKK2xpY2Vuc2UsIG9yIHJveWFsdHkgZmVlIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIGF1dGhvcml6ZWQgdXNlcy4KK01vZGlmaWNhdGlvbnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycworYW5kIG5lZWQgbm90IGZvbGxvdyB0aGUgbGljZW5zaW5nIHRlcm1zIGRlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0Cit0aGUgbmV3IHRlcm1zIGFyZSBjbGVhcmx5IGluZGljYXRlZCBvbiB0aGUgZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUKK3RoZXkgYXBwbHkuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIERJU1RSSUJVVE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZCitGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCitBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIElUUyBET0NVTUVOVEFUSU9OLCBPUiBBTlkKK0RFUklWQVRJVkVTIFRIRVJFT0YsIEVWRU4gSUYgVEhFIEFVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuICBUSElTIFNPRlRXQVJFCitJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBIQVZFCitOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IKK01PRElGSUNBVElPTlMuCisKK0dPVkVSTk1FTlQgVVNFOiBJZiB5b3UgYXJlIGFjcXVpcmluZyB0aGlzIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUKK1UuUy4gZ292ZXJubWVudCwgdGhlIEdvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIKK2luIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIEZlZGVyYWwKK0FjcXVpc2l0aW9uIFJlZ3VsYXRpb25zIChGQVJzKSBpbiBDbGF1c2UgNTIuMjI3LjE5IChjKSAoMikuICBJZiB5b3UKK2FyZSBhY3F1aXJpbmcgdGhlIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlLCB0aGUKK3NvZnR3YXJlIHNoYWxsIGJlIGNsYXNzaWZpZWQgYXMgIkNvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUiIGFuZCB0aGUKK0dvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIgYXMgZGVmaW5lZCBpbiBDbGF1c2UKKzI1Mi4yMjctNzAxNCAoYikgKDMpIG9mIERGQVJzLiAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHRoZQorYXV0aG9ycyBncmFudCB0aGUgVS5TLiBHb3Zlcm5tZW50IGFuZCBvdGhlcnMgYWN0aW5nIGluIGl0cyBiZWhhbGYKK3Blcm1pc3Npb24gdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCit0ZXJtcyBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMgYi9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy91bmZzMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjJiNTNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9jb21tb24tbGljZW5zZXMvdW5mczMKQEAgLTAsMCArMSwyNCBAQAorVU5GUzMgdXNlci1zcGFjZSBORlN2MyBzZXJ2ZXIKKyhDKSAyMDAzLCBQYXNjYWwgU2NobWlkdCA8dW5mczMtc2VydmVyQGV3ZXRlbC5uZXQ+CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CitPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQgYi9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZWMxODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2RlcGxveWRpcl9yZWFkbWUudHh0CkBAIC0wLDAgKzEsOCBAQAorRmlsZXMgaW4gdGhlIGRlcGxveSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgcmUtY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGlmIHlvdQorZGVsZXRlIHRoZW0uIElmIHlvdSBkbyBkZWxldGUgYSBmaWxlLCB5b3Ugd2lsbCBuZWVkIHRvIHJ1bjoKKworICBiaXRiYWtlIC1jIGNsZWFuIFRBUkdFVAorICBiaXRiYWtlIFRBUkdFVAorCit3aGVyZSBUQVJHRVQgaXMgdGhlIG5hbWUgb2YgdGhlIGFwcHJvcHJpYXRlIHBhY2thZ2Ugb3IgdGFyZ2V0IGUuZy4KKyJ2aXJ0dWFsL2tlcm5lbCIgZm9yIHRoZSBrZXJuZWwsIGFuIGltYWdlLCBldGMuCmRpZmYgLS1naXQgYS9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCBiL21ldGEvZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ODkxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dApAQCAtMCwwICsxLDM1IEBACisjPHBhdGg+CTx0eXBlPiA8bW9kZT4JPHVpZD4JPGdpZD4JPG1ham9yPgk8bWlub3I+CTxzdGFydD4JPGluYz4JPGNvdW50PgorIy9kZXYvbWVtICAgIGMgICAgICA2NDAgICAgICAwICAgICAgIDAgICAgICAgMSAgICAgICAxICAgICAgIDAgICAgICAgIDAgICAgICAgIC0KKyMKKyN0eXBlIGNhbiBiZSBvbmUgb2Y6IAorIyAgICBmCUEgcmVndWxhciBmaWxlCisjICAgIGQJRGlyZWN0b3J5CisjICAgIGMJQ2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlIGZpbGUKKyMgICAgYglCbG9jayBzcGVjaWFsIGRldmljZSBmaWxlCisjICAgIHAJRmlmbyAobmFtZWQgcGlwZSkKKworL2RldgkJZAk3NTUJcm9vdAlyb290CS0JLQktCS0JLQorL2Rldi9jb25zb2xlCWMJNjYyCXJvb3QJdHR5CTUJMQktCS0JLQorL2Rldi9mYjAJYwk2MDAJcm9vdAlyb290CTI5CTAJLQktCS0KKy9kZXYvaGRhCWIJNjYwCXJvb3QJZGlzawkzCTAJLQktCS0KKy9kZXYvaGRhCWIJNjYwCXJvb3QJZGlzawkzCTEJMQkxCTQKKy9kZXYva21lbQljCTY0MAlyb290CWttZW0JMQkyCS0JLQktCisvZGV2L2ttc2cJYwk2MDAJcm9vdAlyb290CTEJMTEJLQktCS0KKy9kZXYvbWVtCWMJNjQwCXJvb3QJa21lbQkxCTEJLQktCS0KKy9kZXYvbW1jYmxrMAliCTY2MAlyb290CWRpc2sJMTc5CTAJLQktCS0KKy9kZXYvbW1jYmxrMHAJYgk2NjAJcm9vdAlkaXNrCTE3OQkxCTEJMQk0CisvZGV2L210ZAljCTY2MAlyb290CWRpc2sJOTAJMAkwCTIJOAorL2Rldi9tdGRibG9jawliCTY0MAlyb290CXJvb3QJMzEJMAkwCTEJOAorL2Rldi9udWxsCWMJNjY2CXJvb3QJcm9vdAkxCTMJLQktCS0KKy9kZXYvcmFtCWIJNjQwCXJvb3QJcm9vdAkxCTAJMAkxCTQKKy9kZXYvcmFuZG9tCWMJNjQ0CXJvb3QJcm9vdAkxCTgJLQktCS0KKy9kZXYvcnRjCWMJNjQ0CXJvb3QJcm9vdAkyNTQJMAkwCTEJMgorL2Rldi9zZGEJYgk2NjAJcm9vdAlkaXNrCTgJMAktCS0JLQorL2Rldi9zZGEJYgk2NjAJcm9vdAlkaXNrCTgJMQkxCTEJNAorL2Rldi9zZGIJYgk2NjAJcm9vdAlkaXNrCTgJMTYJLQktCS0KKy9kZXYvc2RiCWIJNjYwCXJvb3QJZGlzawk4CTE3CTEJMQk0CisvZGV2L3R0eQljCTY2Mglyb290CXR0eQk1CTAJLQktCS0KKy9kZXYvdHR5CWMJNjY2CXJvb3QJdHR5CTQJMAkwCTEJOAorL2Rldi90dHlTCWMJNjQwCXJvb3QJdHR5CTQJNjQJMAkxCTIKKy9kZXYvdXJhbmRvbQljCTY0NAlyb290CXJvb3QJMQk5CS0JLQktCisvZGV2L3plcm8JYwk2NDQJcm9vdAlyb290CTEJNQktCS0JLQpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQgYi9tZXRhL2ZpbGVzL2ZzLXBlcm1zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDljYmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy9mcy1wZXJtcy50eHQKQEAgLTAsMCArMSw2NyBAQAorIyBUaGlzIGZpbGUgY29udGFpbnMgYSBsaXN0IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIGtub3duIHBlcm1pc3Npb25zLgorIyBJdCBpcyB1c2VkIGJ5IHRoZSBwYWNrYWdpbmcgY2xhc3MgdG8gZW5zdXJlIHRoYXQgdGhlIHBlcm1pc3Npb25zLCBvd25lcnMgYW5kCisjIGdyb3VwIG9mIGxpc3RlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYXJlIGluIHN5bmMgYWNyb3NzIHRoZSBzeXN0ZW0uCisjCisjIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIAorIworIzxwYXRoPgk8bW9kZT4JPHVpZD4JPGdpZD4JPHdhbGs+CTxmbW9kZT4JPGZ1aWQ+CTxmZ2lkPgorIworIyBvcgorIworIzxwYXRoPiBsaW5rIDx0YXJnZXQ+CisjCisjIDxwYXRoPjogZGlyZWN0b3J5IHBhdGgKKyMgPG1vZGU+OiBtb2RlIGZvciBkaXJlY3RvcnkKKyMgPHVpZD46ICB1aWQgZm9yIGRpcmVjdG9yeQorIyA8Z2lkPjogIGdpZCBmb3IgZGlyZWN0b3J5CisjIDx3YWxrPjogcmVjdXJzaXZlbHkgd2FsayB0aGUgZGlyZWN0b3J5PyAgdHJ1ZSBvciBmYWxzZQorIyA8Zm1vZGU+OiBpZiB3YWxraW5nLCBuZXcgbW9kZSBmb3IgZmlsZXMKKyMgPGZ1aWQ+OiAgaWYgd2Fsa2luZywgbmV3IHVpZCBmb3IgZmlsZXMKKyMgPGZnaWQ+OiAgaWYgd2Fsa2luZywgbmV3IGdpZCBmb3IgZmlsZXMKKyMgPHRhcmdldD46IHR1cm4gdGhlIGRpcmVjdG9yeSBpbnRvIGEgc3ltbGluayBwb2ludCB0byB0YXJnZXQKKyMKKyMgaW4gbW9kZSwgdWlkIG9yIGdpZCwgYSAiLSIgbWVhbnMgZG9uJ3QgY2hhbmdlIGFueSBleGlzdGluZyB2YWx1ZXMKKyMKKyMgL3Vzci9zcmMJCTA3NTUJcm9vdAlyb290CWZhbHNlCS0JLQktCisjIC91c3Ivc2hhcmUvbWFuCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBOb3RlOiBhbGwgc3RhbmRhcmQgY29uZmlnIGRpcmVjdG9yaWVzIGFyZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkICIwNzU1IHJvb3Qgcm9vdCBmYWxzZSAtIC0gLSIKKworIyBEb2N1bWVudGF0aW9uIHNob3VsZCBhbHdheXMgYmUgY29ycmVjdGVkCiske21hbmRpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7aW5mb2Rpcn0JCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKyR7ZG9jZGlyfQkJMDc1NQlyb290CXJvb3QJdHJ1ZQkwNjQ0CXJvb3QJcm9vdAorJHtkYXRhZGlyfS9ndGstZG9jCTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBGaXh1cCBsb2NhbGVzCiske2RhdGFkaXJ9L2xvY2FsZQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290CisKKyMgQ2xlYW51cCBoZWFkZXJzCiske2luY2x1ZGVkaXJ9CQkwNzU1CXJvb3QJcm9vdAl0cnVlCTA2NDQJcm9vdAlyb290Ciske29sZGluY2x1ZGVkaXJ9CTA3NTUJcm9vdAlyb290CXRydWUJMDY0NAlyb290CXJvb3QKKworIyBDbGVhbnVwIGRlYnVnIHNyYworL3Vzci9zcmMvZGVidWcJCTA3NTUJcm9vdAlyb290CXRydWUJLQlyb290CXJvb3QKKworIyBJdGVtcyBmcm9tIGJhc2UtZmlsZXMKKyMgTGlua3MKKyR7bG9jYWxzdGF0ZWRpcn0vcnVuCWxpbmsJL3J1bgorJHtsb2NhbHN0YXRlZGlyfS9sb2cJbGluawl2b2xhdGlsZS9sb2cKKyR7bG9jYWxzdGF0ZWRpcn0vbG9jawlsaW5rCS9ydW4vbG9jaworJHtsb2NhbHN0YXRlZGlyfS90bXAJbGluawl2b2xhdGlsZS90bXAKKworL2hvbWUJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKy9zcnYJCQkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7cHJlZml4fS9zcmMJCQkwNzU1CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorJHtsb2NhbHN0YXRlZGlyfS9sb2NhbAkJMDc1NQlyb290CXJvb3QJZmFsc2UgLSAtIC0KKworIyBTcGVjaWFsIHBlcm1pc3Npb25zIGZyb20gYmFzZS1maWxlcworIyBTZXQgMTc3NworL3RtcAkJCQkwMTc3Nwlyb290CXJvb3QJZmFsc2UgLSAtIC0KKyR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wCTAxNzc3CXJvb3QJcm9vdAlmYWxzZSAtIC0gLQorCisjIFNldCA3NTUtbHNiCisvc3J2CQkJCTA3NTUJcm9vdAlyb290CWZhbHNlIC0gLSAtCisKKyMgU2V0IDI3NzUtbHNiCisvdmFyL21haWwJCQkwMjc3NQlyb290CW1haWwJZmFsc2UgLSAtIC0KZGlmZiAtLWdpdCBhL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaCBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItZXh0cmFjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDBhNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1leHRyYWN0LnNoCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vYmFzaAorCitJTlNUX0FSQ0g9JCh1bmFtZSAtbSB8IHNlZCAtZSAicy9pWzMtNl04Ni9peDg2LyIgLWUgInMveDg2Wy1fXTY0L3g4Nl82NC8iKQorU0RLX0FSQ0g9JChlY2hvIEBTREtfQVJDSEAgfCBzZWQgLWUgInMvaVszLTZdODYvaXg4Ni8iIC1lICJzL3g4NlstX102NC94ODZfNjQvIikKKwordmVybHRlICgpIHsKKwlbICAiJDEiID0gImBwcmludGYgIiQxXG4kMiIgfCBzb3J0IC1WIHwgaGVhZCAtbjFgIiBdCit9CisKK3Zlcmx0KCkgeworCVsgIiQxIiA9ICIkMiIgXSAmJiByZXR1cm4gMSB8fCB2ZXJsdGUgJDEgJDIKK30KKwordmVybHQgYHVuYW1lIC1yYCBAT0xERVNUX0tFUk5FTEAKK2lmIFsgJD8gPSAwIF07IHRoZW4KKwllY2hvICJFcnJvcjogVGhlIFNESyBuZWVkcyBhIGtlcm5lbCA+IEBPTERFU1RfS0VSTkVMQCIKKwlleGl0IDEKK2ZpCisKK2lmIFsgIiRJTlNUX0FSQ0giICE9ICIkU0RLX0FSQ0giIF07IHRoZW4KKwkjIEFsbG93IGZvciBpbnN0YWxsYXRpb24gb2YgaXg4NiBTREsgb24geDg2XzY0IGhvc3QKKwlpZiBbICIkSU5TVF9BUkNIIiAhPSB4ODZfNjQgLW8gIiRTREtfQVJDSCIgIT0gaXg4NiBdOyB0aGVuCisJCWVjaG8gIkVycm9yOiBJbnN0YWxsYXRpb24gbWFjaGluZSBub3Qgc3VwcG9ydGVkISIKKwkJZXhpdCAxCisJZmkKK2ZpCisKK0RFRkFVTFRfSU5TVEFMTF9ESVI9IkBTREtQQVRIQCIKK1NVRE9fRVhFQz0iIgordGFyZ2V0X3Nka19kaXI9IiIKK2Fuc3dlcj0iIgorcmVsb2NhdGU9MQorc2F2ZXNjcmlwdHM9MAordmVyYm9zZT0wCit3aGlsZSBnZXRvcHRzICI6eWQ6bkRSUyIgT1BUOyBkbworCWNhc2UgJE9QVCBpbgorCXkpCisJCWFuc3dlcj0iWSIKKwkJOzsKKwlkKQorCQl0YXJnZXRfc2RrX2Rpcj0kT1BUQVJHCisJCTs7CisJbikKKwkJcHJlcGFyZV9idWlsZHN5c3RlbT0ibm8iCisJCTs7CisJRCkKKwkJdmVyYm9zZT0xCisJCTs7CisJUikKKwkJcmVsb2NhdGU9MAorCQlzYXZlc2NyaXB0cz0xCisJCTs7CisJUykKKwkJc2F2ZXNjcmlwdHM9MQorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAkKGJhc2VuYW1lICQwKSBbLXldIFstZCA8ZGlyPl0iCisJCWVjaG8gIiAgLXkgICAgICAgICBBdXRvbWF0aWMgeWVzIHRvIGFsbCBwcm9tcHRzIgorCQllY2hvICIgIC1kIDxkaXI+ICAgSW5zdGFsbCB0aGUgU0RLIHRvIDxkaXI+IgorCQllY2hvICI9PT09PT09PSBFeHRlbnNpYmxlIFNESyBvbmx5IG9wdGlvbnMgPT09PT09PT09PT09IgorCQllY2hvICIgIC1uICAgICAgICAgRG8gbm90IHByZXBhcmUgdGhlIGJ1aWxkIHN5c3RlbSIKKwkJZWNobyAiPT09PT09PT0gQWR2YW5jZWQgREVCVUdHSU5HIE9OTFkgT1BUSU9OUyA9PT09PT09PSIKKwkJZWNobyAiICAtUyAgICAgICAgIFNhdmUgcmVsb2NhdGlvbiBzY3JpcHRzIgorCQllY2hvICIgIC1SICAgICAgICAgRG8gbm90IHJlbG9jYXRlIGV4ZWN1dGFibGVzIgorCQllY2hvICIgIC1EICAgICAgICAgdXNlIHNldCAteCB0byBzZWUgd2hhdCBpcyBnb2luZyBvbiIKKwkJZXhpdCAxCisJCTs7CisJZXNhYworZG9uZQorCitlY2hvICJAU0RLX1RJVExFQCBpbnN0YWxsZXIgdmVyc2lvbiBAU0RLX1ZFUlNJT05AIgorZWNobyAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisKK2lmIFsgJHZlcmJvc2UgPSAxIF0gOyB0aGVuCisJc2V0IC14CitmaQorCitAU0RLX1BSRV9JTlNUQUxMX0NPTU1BTkRACisKKyMgU0RLX0VYVEVOU0lCTEUgaXMgZXhwb3NlZCBmcm9tIHRoZSBTREtfUFJFX0lOU1RBTExfQ09NTUFORCBhYm92ZQoraWYgWyAiJFNES19FWFRFTlNJQkxFIiA9ICIxIiBdOyB0aGVuCisJREVGQVVMVF9JTlNUQUxMX0RJUj0iQFNES0VYVFBBVEhAIgorZmkKKworaWYgWyAiJHRhcmdldF9zZGtfZGlyIiA9ICIiIF07IHRoZW4KKwlpZiBbICIkYW5zd2VyIiA9ICJZIiBdOyB0aGVuCisJCXRhcmdldF9zZGtfZGlyPSIkREVGQVVMVF9JTlNUQUxMX0RJUiIKKwllbHNlCisJCXJlYWQgLWUgLXAgIkVudGVyIHRhcmdldCBkaXJlY3RvcnkgZm9yIFNESyAoZGVmYXVsdDogJERFRkFVTFRfSU5TVEFMTF9ESVIpOiAiIHRhcmdldF9zZGtfZGlyCisJCVsgIiR0YXJnZXRfc2RrX2RpciIgPSAiIiBdICYmIHRhcmdldF9zZGtfZGlyPSRERUZBVUxUX0lOU1RBTExfRElSCisJZmkKK2ZpCisKK2V2YWwgdGFyZ2V0X3Nka19kaXI9JChlY2hvICIkdGFyZ2V0X3Nka19kaXIifHNlZCAncy8gL1xcIC9nJykKK2lmIFsgLWQgIiR0YXJnZXRfc2RrX2RpciIgXTsgdGhlbgorCXRhcmdldF9zZGtfZGlyPSQoY2QgIiR0YXJnZXRfc2RrX2RpciI7IHB3ZCkKK2Vsc2UKKwl0YXJnZXRfc2RrX2Rpcj0kKHJlYWRsaW5rIC1tICIkdGFyZ2V0X3Nka19kaXIiKQorZmkKKworaWYgWyAiJFNES19FWFRFTlNJQkxFIiA9ICIxIiBdOyB0aGVuCisJIyBXZSdyZSBnb2luZyB0byBiZSBydW5uaW5nIHRoZSBidWlsZCBzeXN0ZW0sIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGFwcGx5CisJaWYgZWNobyAiJHRhcmdldF9zZGtfZGlyIiB8IGdyZXAgLXEgJ1srXCBAXSc7IHRoZW4KKwkJZWNobyAiVGhlIHRhcmdldCBkaXJlY3RvcnkgcGF0aCAoJHRhcmdldF9zZGtfZGlyKSBjb250YWlucyBpbGxlZ2FsIiBcCisJCSAgICAgImNoYXJhY3RlcnMgc3VjaCBhcyBzcGFjZXMsIEAgb3IgKy4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorZWxzZQorCWlmIFsgLW4gIiQoZWNobyAkdGFyZ2V0X3Nka19kaXJ8Z3JlcCAnICcpIiBdOyB0aGVuCisJCWVjaG8gIlRoZSB0YXJnZXQgZGlyZWN0b3J5IHBhdGggKCR0YXJnZXRfc2RrX2RpcikgY29udGFpbnMgc3BhY2VzLiBBYm9ydCEiCisJCWV4aXQgMQorCWZpCitmaQorCitpZiBbIC1lICIkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtQFJFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVNAIiBdOyB0aGVuCisJZWNobyAiVGhlIGRpcmVjdG9yeSBcIiR0YXJnZXRfc2RrX2RpclwiIGFscmVhZHkgY29udGFpbnMgYSBTREsgZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiIKKwlwcmludGYgIklmIHlvdSBjb250aW51ZSwgZXhpc3RpbmcgZmlsZXMgd2lsbCBiZSBvdmVyd3JpdHRlbiEgUHJvY2VlZFt5L05dPyAiCisKKwlkZWZhdWx0X2Fuc3dlcj0ibiIKK2Vsc2UKKwlwcmludGYgIllvdSBhcmUgYWJvdXQgdG8gaW5zdGFsbCB0aGUgU0RLIHRvIFwiJHRhcmdldF9zZGtfZGlyXCIuIFByb2NlZWRbWS9uXT8gIgorCisJZGVmYXVsdF9hbnN3ZXI9InkiCitmaQorCitpZiBbICIkYW5zd2VyIiA9ICIiIF07IHRoZW4KKwlyZWFkIGFuc3dlcgorCVsgIiRhbnN3ZXIiID0gIiIgXSAmJiBhbnN3ZXI9IiRkZWZhdWx0X2Fuc3dlciIKK2Vsc2UKKwllY2hvICRhbnN3ZXIKK2ZpCisKK2lmIFsgIiRhbnN3ZXIiICE9ICJZIiAtYSAiJGFuc3dlciIgIT0gInkiIF07IHRoZW4KKwllY2hvICJJbnN0YWxsYXRpb24gYWJvcnRlZCEiCisJZXhpdCAxCitmaQorCisjIFRyeSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSAodGhpcyB3aWxsIG5vdCBzdWNjZWVkIGlmIHVzZXIgZG9lc24ndCBoYXZlIHJpZ2h0cykKK21rZGlyIC1wICR0YXJnZXRfc2RrX2RpciA+L2Rldi9udWxsIDI+JjEKKworIyBpZiBkb24ndCBoYXZlIHRoZSByaWdodCB0byBhY2Nlc3MgZGlyLCBnYWluIGJ5IHN1ZG8gCitpZiBbICEgLXggJHRhcmdldF9zZGtfZGlyIC1vICEgLXcgJHRhcmdldF9zZGtfZGlyIC1vICEgLXIgJHRhcmdldF9zZGtfZGlyIF07IHRoZW4gCisJaWYgWyAiJFNES19FWFRFTlNJQkxFIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIlVuYWJsZSB0byBhY2Nlc3MgXCIkdGFyZ2V0X3Nka19kaXJcIiwgd2lsbCBub3QgYXR0ZW1wdCB0byB1c2UiIFwKKwkJICAgICAic3VkbyBhcyBhcyBleHRlbnNpYmxlIFNESyBjYW5ub3QgYmUgdXNlZCBhcyByb290LiIKKwkJZXhpdCAxCisJZmkKKworCVNVRE9fRVhFQz0kKHdoaWNoICJzdWRvIikKKwlpZiBbIC16ICRTVURPX0VYRUMgXTsgdGhlbgorCQllY2hvICJObyBjb21tYW5kICdzdWRvJyBmb3VuZCwgcGxlYXNlIGluc3RhbGwgc3VkbyBmaXJzdC4gQWJvcnQhIgorCQlleGl0IDEKKwlmaQorCisJIyB0ZXN0IHN1ZG8gY291bGQgZ2FpbiByb290IHJpZ2h0CisJJFNVRE9fRVhFQyBwd2QgPi9kZXYvbnVsbCAyPiYxCisJWyAkPyAtbmUgMCBdICYmIGVjaG8gIlNvcnJ5LCB5b3UgYXJlIG5vdCBhbGxvd2VkIHRvIGV4ZWN1dGUgYXMgcm9vdC4iICYmIGV4aXQgMQorCisJIyBub3cgdGhhdCB3ZSBoYXZlIHN1ZG8gcmlnaHRzLCBjcmVhdGUgdGhlIGRpcmVjdG9yeQorCSRTVURPX0VYRUMgbWtkaXIgLXAgJHRhcmdldF9zZGtfZGlyID4vZGV2L251bGwgMj4mMQorZmkKKworcGF5bG9hZF9vZmZzZXQ9JCgoJChncmVwIC1uYSAtbTEgIl5NQVJLRVI6JCIgJDB8Y3V0IC1kJzonIC1mMSkgKyAxKSkKKworcHJpbnRmICJFeHRyYWN0aW5nIFNESy4uLiIKK3RhaWwgLW4gKyRwYXlsb2FkX29mZnNldCAkMHwgJFNVRE9fRVhFQyB0YXIgeGogLUMgJHRhcmdldF9zZGtfZGlyCitlY2hvICJkb25lIgorCitwcmludGYgIlNldHRpbmcgaXQgdXAuLi4iCisjIGZpeCBlbnZpcm9ubWVudCBwYXRocworZm9yIGVudl9zZXR1cF9zY3JpcHQgaW4gYGxzICR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC0qYDsgZG8KKwkkU1VET19FWEVDIHNlZCAtZSAiczpAU0RLUEFUSEA6JHRhcmdldF9zZGtfZGlyOmciIC1pICRlbnZfc2V0dXBfc2NyaXB0Citkb25lCisKK0BTREtfUE9TVF9JTlNUQUxMX0NPTU1BTkRACisKKyMgZGVsZXRlIHRoZSByZWxvY2F0aW5nIHNjcmlwdCwgc28gdGhhdCB1c2VyIGlzIGZvcmNlZCB0byByZS1ydW4gdGhlIGluc3RhbGxlcgorIyBpZiBoZS9zaGUgd2FudHMgYW5vdGhlciBsb2NhdGlvbiBmb3IgdGhlIHNkaworaWYgWyAkc2F2ZXNjcmlwdHMgPSAwIF0gOyB0aGVuCisJJFNVRE9fRVhFQyBybSAtZiAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5weSAke2Vudl9zZXR1cF9zY3JpcHQlLyp9L3JlbG9jYXRlX3Nkay5zaAorZmkKKworZWNobyAiU0RLIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQgdXAgYW5kIGlzIHJlYWR5IHRvIGJlIHVzZWQuIgorZWNobyAiRWFjaCB0aW1lIHlvdSB3aXNoIHRvIHVzZSB0aGUgU0RLIGluIGEgbmV3IHNoZWxsIHNlc3Npb24sIHlvdSBuZWVkIHRvIHNvdXJjZSB0aGUgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IGUuZy4iCitlY2hvICIgXCQgLiAkdGFyZ2V0X3Nka19kaXIvZW52aXJvbm1lbnQtc2V0dXAtQFJFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVNAIgorCitleGl0IDAKKworTUFSS0VSOgpkaWZmIC0tZ2l0IGEvbWV0YS9maWxlcy90b29sY2hhaW4tc2hhci1yZWxvY2F0ZS5zaCBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiOGUxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvZmlsZXMvdG9vbGNoYWluLXNoYXItcmVsb2NhdGUuc2gKQEAgLTAsMCArMSw1MCBAQAorIyBmaXggZHluYW1pYyBsb2FkZXIgcGF0aHMgaW4gYWxsIEVMRiBTREsgYmluYXJpZXMKK25hdGl2ZV9zeXNyb290PSQoJFNVRE9fRVhFQyBjYXQgJGVudl9zZXR1cF9zY3JpcHQgfGdyZXAgJ09FQ09SRV9OQVRJVkVfU1lTUk9PVD0nfGN1dCAtZCc9JyAtZjJ8dHIgLWQgJyInKQorZGxfcGF0aD0kKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QvbGliIC1uYW1lICJsZC1saW51eCoiKQoraWYgWyAiJGRsX3BhdGgiID0gIiIgXSA7IHRoZW4KKwllY2hvICJTREsgY291bGQgbm90IGJlIHNldCB1cC4gUmVsb2NhdGUgc2NyaXB0IHVuYWJsZSB0byBmaW5kIGxkLWxpbnV4LnNvLiBBYm9ydCEiCisJZXhpdCAxCitmaQorZXhlY3V0YWJsZV9maWxlcz0kKCRTVURPX0VYRUMgZmluZCAkbmF0aXZlX3N5c3Jvb3QgLXR5cGUgZiBcCisJXCggLXBlcm0gLTAxMDAgLW8gLXBlcm0gLTAwMTAgLW8gLXBlcm0gLTAwMDEgXCkgLXByaW50ZiAiJyVoLyVmJyAiKQorCit0ZGlyPWBta3RlbXAgLWRgCitpZiBbIHgkdGRpciA9IHggXSA7IHRoZW4KKyAgIGVjaG8gIlNESyByZWxvY2F0ZSBmYWlsZWQsIGNvdWxkIG5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IgorICAgZXhpdCAxCitmaQorZWNobyAiIyEvYmluL2Jhc2giID4gJHRkaXIvcmVsb2NhdGVfc2RrLnNoCitlY2hvIGV4ZWMgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsucHkgJHRhcmdldF9zZGtfZGlyICRkbF9wYXRoICRleGVjdXRhYmxlX2ZpbGVzID4+ICR0ZGlyL3JlbG9jYXRlX3Nkay5zaAorJFNVRE9fRVhFQyBtdiAkdGRpci9yZWxvY2F0ZV9zZGsuc2ggJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKKyRTVURPX0VYRUMgY2htb2QgNzU1ICR7ZW52X3NldHVwX3NjcmlwdCUvKn0vcmVsb2NhdGVfc2RrLnNoCitybSAtcmYgJHRkaXIKK2lmIFsgJHJlbG9jYXRlID0gMSBdIDsgdGhlbgorCSRTVURPX0VYRUMgJHtlbnZfc2V0dXBfc2NyaXB0JS8qfS9yZWxvY2F0ZV9zZGsuc2gKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJZWNobyAiU0RLIGNvdWxkIG5vdCBiZSBzZXQgdXAuIFJlbG9jYXRlIHNjcmlwdCBmYWlsZWQuIEFib3J0ISIKKwkJZXhpdCAxCisJZmkKK2ZpCisKKyMgcmVwbGFjZSBAU0RLUEFUSEAgd2l0aCB0aGUgbmV3IHByZWZpeCBpbiBhbGwgdGV4dCBmaWxlczogY29uZmlncy9zY3JpcHRzL2V0YworZm9yIHJlcGxhY2UgaW4gIiR0YXJnZXRfc2RrX2RpciAtbWF4ZGVwdGggMSIgIiRuYXRpdmVfc3lzcm9vdCI7IGRvCisJJFNVRE9fRVhFQyBmaW5kICRyZXBsYWNlIC10eXBlIGYgLWV4ZWMgZmlsZSAne30nIFw7IHwgXAorCQlncmVwICI6LipcKEFTQ0lJXHxzY3JpcHRcfHNvdXJjZVwpLip0ZXh0IiB8IFwKKwkJYXdrIC1GJzonICd7cHJpbnRmICJcIiVzXCJcbiIsICQxfScgfCBcCisJCWdyZXAgLXYgIiR0YXJnZXRfc2RrX2Rpci9lbnZpcm9ubWVudC1zZXR1cC0qIiB8IFwKKwkJJFNVRE9fRVhFQyB4YXJncyAtbjMyIHNlZCAtaSAtZSAiczokREVGQVVMVF9JTlNUQUxMX0RJUjokdGFyZ2V0X3Nka19kaXI6ZyIKK2RvbmUKKworIyBjaGFuZ2UgYWxsIHN5bWxpbmtzIHBvaW50aW5nIHRvIEBTREtQQVRIQAorZm9yIGwgaW4gJCgkU1VET19FWEVDIGZpbmQgJG5hdGl2ZV9zeXNyb290IC10eXBlIGwpOyBkbworCSRTVURPX0VYRUMgbG4gLXNmbiAkKHJlYWRsaW5rICRsfCRTVURPX0VYRUMgc2VkIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRElSOiR0YXJnZXRfc2RrX2RpcjoiKSAkbAorZG9uZQorCisjIGZpbmQgb3V0IGFsbCBwZXJsIHNjcmlwdHMgaW4gJG5hdGl2ZV9zeXNyb290IGFuZCBtb2RpZnkgdGhlbSByZXBsYWNpbmcgdGhlCisjIGhvc3QgcGVybCB3aXRoIFNESyBwZXJsLgorZm9yIHBlcmxfc2NyaXB0IGluICQoJFNVRE9fRVhFQyBmaW5kICRuYXRpdmVfc3lzcm9vdCAtdHlwZSBmIC1leGVjIGdyZXAgLWwgIl4jIS4qcGVybCIgJ3t9JyBcOyk7IGRvCisJJFNVRE9fRVhFQyBzZWQgLWkgLWUgInM6XiMhICovdXNyL2Jpbi9wZXJsLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6ZyIgLWUgXAorCQkiczogL3Vzci9iaW4vcGVybDogL3Vzci9iaW4vZW52IHBlcmw6ZyIgJHBlcmxfc2NyaXB0Citkb25lCisKK2VjaG8gZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQ5NTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwyIEBACitmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weSBiL21ldGEvbGliL29lL2J1aWxkaGlzdG9yeV9hbmFseXNpcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk1Yzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvYnVpbGRoaXN0b3J5X2FuYWx5c2lzLnB5CkBAIC0wLDAgKzEsNDU2IEBACisjIFJlcG9ydCBzaWduaWZpY2FudCBkaWZmZXJlbmNlcyBpbiB0aGUgYnVpbGRoaXN0b3J5IHJlcG9zaXRvcnkgc2luY2UgYSBzcGVjaWZpYyByZXZpc2lvbgorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKyMgQXV0aG9yOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKyMKKyMgTm90ZTogcmVxdWlyZXMgR2l0UHl0aG9uIDAuMy4xKworIworIyBZb3UgY2FuIHVzZSB0aGlzIGZyb20gdGhlIGNvbW1hbmQgbGluZSBieSBydW5uaW5nIHNjcmlwdHMvYnVpbGRoaXN0b3J5LWRpZmYKKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgZ2l0CitpbXBvcnQgcmUKK2ltcG9ydCBiYi51dGlscworCisKKyMgSG93IHRvIGRpc3BsYXkgZmllbGRzCitsaXN0X2ZpZWxkcyA9IFsnREVQRU5EUycsICdSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlNVR0dFU1RTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ0ZJTEVTJywgJ0ZJTEVMSVNUJywgJ1VTRVJfQ0xBU1NFUycsICdJTUFHRV9DTEFTU0VTJywgJ0lNQUdFX0ZFQVRVUkVTJywgJ0lNQUdFX0xJTkdVQVMnLCAnSU1BR0VfSU5TVEFMTCcsICdCQURfUkVDT01NRU5EQVRJT05TJywgJ1BBQ0tBR0VfRVhDTFVERSddCitsaXN0X29yZGVyX2ZpZWxkcyA9IFsnUEFDS0FHRVMnXQorZGVmYXVsdHZhbF9tYXAgPSB7J1BLRyc6ICdQS0cnLCAnUEtHRSc6ICdQRScsICdQS0dWJzogJ1BWJywgJ1BLR1InOiAnUFInfQorbnVtZXJpY19maWVsZHMgPSBbJ1BLR1NJWkUnLCAnSU1BR0VTSVpFJ10KKyMgRmllbGRzIHRvIG1vbml0b3IKK21vbml0b3JfZmllbGRzID0gWydSUFJPVklERVMnLCAnUkRFUEVORFMnLCAnUlJFQ09NTUVORFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnLCAnUEFDS0FHRVMnLCAnRklMRUxJU1QnLCAnUEtHU0laRScsICdJTUFHRVNJWkUnLCAnUEtHJ10KK3Zlcl9tb25pdG9yX2ZpZWxkcyA9IFsnUEtHRScsICdQS0dWJywgJ1BLR1InXQorIyBQZXJjZW50YWdlIGNoYW5nZSB0byBhbGVydCBmb3IgbnVtZXJpYyBmaWVsZHMKK21vbml0b3JfbnVtZXJpY190aHJlc2hvbGQgPSAxMAorIyBJbWFnZSBmaWxlcyB0byBtb25pdG9yIChub3RlIHRoYXQgaW1hZ2UtaW5mby50eHQgaXMgaGFuZGxlZCBzZXBhcmF0ZWx5KQoraW1nX21vbml0b3JfZmlsZXMgPSBbJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCcsICdmaWxlcy1pbi1pbWFnZS50eHQnXQorIyBSZWxhdGVkIGNvbnRleHQgZmllbGRzIGZvciByZXBvcnRpbmcgKG5vdGU6IFBFLCBQViAmIFBSIGFyZSBhbHdheXMgcmVwb3J0ZWQgZm9yIG1vbml0b3JlZCBwYWNrYWdlIGZpZWxkcykKK3JlbGF0ZWRfZmllbGRzID0ge30KK3JlbGF0ZWRfZmllbGRzWydSREVQRU5EUyddID0gWydERVBFTkRTJ10KK3JlbGF0ZWRfZmllbGRzWydSUkVDT01NRU5EUyddID0gWydERVBFTkRTJ10KK3JlbGF0ZWRfZmllbGRzWydGSUxFTElTVCddID0gWydGSUxFUyddCityZWxhdGVkX2ZpZWxkc1snUEtHU0laRSddID0gWydGSUxFTElTVCddCityZWxhdGVkX2ZpZWxkc1snZmlsZXMtaW4taW1hZ2UudHh0J10gPSBbJ2luc3RhbGxlZC1wYWNrYWdlLW5hbWVzLnR4dCcsICdVU0VSX0NMQVNTRVMnLCAnSU1BR0VfQ0xBU1NFUycsICdST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCcsICdJTUFHRV9QT1NUUFJPQ0VTU19DT01NQU5EJ10KK3JlbGF0ZWRfZmllbGRzWydpbnN0YWxsZWQtcGFja2FnZS1uYW1lcy50eHQnXSA9IFsnSU1BR0VfRkVBVFVSRVMnLCAnSU1BR0VfTElOR1VBUycsICdJTUFHRV9JTlNUQUxMJywgJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCAnTk9fUkVDT01NRU5EQVRJT05TJywgJ1BBQ0tBR0VfRVhDTFVERSddCisKKworY2xhc3MgQ2hhbmdlUmVjb3JkOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBmaWVsZG5hbWUsIG9sZHZhbHVlLCBuZXd2YWx1ZSwgbW9uaXRvcmVkKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmZpZWxkbmFtZSA9IGZpZWxkbmFtZQorICAgICAgICBzZWxmLm9sZHZhbHVlID0gb2xkdmFsdWUKKyAgICAgICAgc2VsZi5uZXd2YWx1ZSA9IG5ld3ZhbHVlCisgICAgICAgIHNlbGYubW9uaXRvcmVkID0gbW9uaXRvcmVkCisgICAgICAgIHNlbGYucmVsYXRlZCA9IFtdCisgICAgICAgIHNlbGYuZmlsZWNoYW5nZXMgPSBOb25lCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0cl9pbnRlcm5hbChUcnVlKQorCisgICAgZGVmIF9zdHJfaW50ZXJuYWwoc2VsZiwgb3V0ZXIpOgorICAgICAgICBpZiBvdXRlcjoKKyAgICAgICAgICAgIGlmICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gJyVzOiAnICUgc2VsZi5wYXRoLnNwbGl0KCcvaW1hZ2UtZmlsZXMvJylbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJlZml4ID0gJyVzOiAnICUgc2VsZi5wYXRoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmVmaXggPSAnJworCisgICAgICAgIGRlZiBwa2dsaXN0X2NvbWJpbmUoZGVwdmVyKToKKyAgICAgICAgICAgIHBrZ2xpc3QgPSBbXQorICAgICAgICAgICAgZm9yIGssdiBpbiBkZXB2ZXIuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgdjoKKyAgICAgICAgICAgICAgICAgICAgcGtnbGlzdC5hcHBlbmQoIiVzICglcykiICUgKGssdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGtnbGlzdC5hcHBlbmQoaykKKyAgICAgICAgICAgIHJldHVybiBwa2dsaXN0CisKKyAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgaW4gbGlzdF9maWVsZHMgb3Igc2VsZi5maWVsZG5hbWUgaW4gbGlzdF9vcmRlcl9maWVsZHM6CisgICAgICAgICAgICBpZiBzZWxmLmZpZWxkbmFtZSBpbiBbJ1JQUk9WSURFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlJFUExBQ0VTJywgJ1JDT05GTElDVFMnXToKKyAgICAgICAgICAgICAgICAoZGVwdmVyYSwgZGVwdmVyYikgPSBjb21wYXJlX3BrZ19saXN0cyhzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICAgICAgICAgIGFpdGVtcyA9IHBrZ2xpc3RfY29tYmluZShkZXB2ZXJhKQorICAgICAgICAgICAgICAgIGJpdGVtcyA9IHBrZ2xpc3RfY29tYmluZShkZXB2ZXJiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhaXRlbXMgPSBzZWxmLm9sZHZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBiaXRlbXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgIHJlbW92ZWQgPSBsaXN0KHNldChhaXRlbXMpIC0gc2V0KGJpdGVtcykpCisgICAgICAgICAgICBhZGRlZCA9IGxpc3Qoc2V0KGJpdGVtcykgLSBzZXQoYWl0ZW1zKSkKKworICAgICAgICAgICAgaWYgcmVtb3ZlZCBvciBhZGRlZDoKKyAgICAgICAgICAgICAgICBpZiByZW1vdmVkIGFuZCBub3QgYml0ZW1zOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSAnJXM6IHJlbW92ZWQgYWxsIGl0ZW1zICIlcyInICUgKHNlbGYuZmllbGRuYW1lLCAnICcuam9pbihyZW1vdmVkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSAnJXM6JXMlcycgJSAoc2VsZi5maWVsZG5hbWUsICcgcmVtb3ZlZCAiJXMiJyAlICcgJy5qb2luKHJlbW92ZWQpIGlmIHJlbW92ZWQgZWxzZSAnJywgJyBhZGRlZCAiJXMiJyAlICcgJy5qb2luKGFkZGVkKSBpZiBhZGRlZCBlbHNlICcnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXQgPSAnJXMgY2hhbmdlZCBvcmRlcicgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICBlbGlmIHNlbGYuZmllbGRuYW1lIGluIG51bWVyaWNfZmllbGRzOgorICAgICAgICAgICAgYXZhbCA9IGludChzZWxmLm9sZHZhbHVlIG9yIDApCisgICAgICAgICAgICBidmFsID0gaW50KHNlbGYubmV3dmFsdWUgb3IgMCkKKyAgICAgICAgICAgIGlmIGF2YWwgIT0gMDoKKyAgICAgICAgICAgICAgICBwZXJjZW50Y2hnID0gKChidmFsIC0gYXZhbCkgLyBmbG9hdChhdmFsKSkgKiAxMDAKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9IDEwMAorICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgZnJvbSAlcyB0byAlcyAoJXMlZCUlKScgJSAoc2VsZi5maWVsZG5hbWUsIHNlbGYub2xkdmFsdWUgb3IgIicnIiwgc2VsZi5uZXd2YWx1ZSBvciAiJyciLCAnKycgaWYgcGVyY2VudGNoZyA+IDAgZWxzZSAnJywgcGVyY2VudGNoZykKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBkZWZhdWx0dmFsX21hcDoKKyAgICAgICAgICAgIG91dCA9ICclcyBjaGFuZ2VkIGZyb20gJXMgdG8gJXMnICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICAgICAgaWYgc2VsZi5maWVsZG5hbWUgPT0gJ1BLRycgYW5kICdbZGVmYXVsdF0nIGluIHNlbGYubmV3dmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ICs9ICcgLSBtYXkgaW5kaWNhdGUgZGViaWFuIHJlbmFtaW5nIGZhaWx1cmUnCisgICAgICAgIGVsaWYgc2VsZi5maWVsZG5hbWUgaW4gWydwa2dfcHJlaW5zdCcsICdwa2dfcG9zdGluc3QnLCAncGtnX3ByZXJtJywgJ3BrZ19wb3N0cm0nXToKKyAgICAgICAgICAgIGlmIHNlbGYub2xkdmFsdWUgYW5kIHNlbGYubmV3dmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgZWxpZiBzZWxmLm5ld3ZhbHVlOgorICAgICAgICAgICAgICAgIG91dCA9ICclcyBhZGRlZDpcbiAgJyAlIHNlbGYuZmllbGRuYW1lCisgICAgICAgICAgICBlbGlmIHNlbGYub2xkdmFsdWU6CisgICAgICAgICAgICAgICAgb3V0ID0gJyVzIGNsZWFyZWQ6XG4gICcgJSBzZWxmLmZpZWxkbmFtZQorICAgICAgICAgICAgYWxpbmVzID0gc2VsZi5vbGR2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIGJsaW5lcyA9IHNlbGYubmV3dmFsdWUuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoYWxpbmVzLCBibGluZXMsIHNlbGYuZmllbGRuYW1lLCBzZWxmLmZpZWxkbmFtZSwgbGluZXRlcm09JycpCisgICAgICAgICAgICBvdXQgKz0gJ1xuICAnLmpvaW4obGlzdChkaWZmKVsyOl0pCisgICAgICAgICAgICBvdXQgKz0gJ1xuICAtLScKKyAgICAgICAgZWxpZiBzZWxmLmZpZWxkbmFtZSBpbiBpbWdfbW9uaXRvcl9maWxlcyBvciAnL2ltYWdlLWZpbGVzLycgaW4gc2VsZi5wYXRoOgorICAgICAgICAgICAgZmllbGRuYW1lID0gc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGlmICcvaW1hZ2UtZmlsZXMvJyBpbiBzZWxmLnBhdGg6CisgICAgICAgICAgICAgICAgZmllbGRuYW1lID0gb3MucGF0aC5qb2luKCcvJyArIHNlbGYucGF0aC5zcGxpdCgnL2ltYWdlLWZpbGVzLycpWzFdLCBzZWxmLmZpZWxkbmFtZSkKKyAgICAgICAgICAgICAgICBvdXQgPSAnQ2hhbmdlcyB0byAlczpcbiAgJyAlIGZpZWxkbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvdXRlcjoKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gJ0NoYW5nZXMgdG8gJXMgJyAlIHNlbGYucGF0aAorICAgICAgICAgICAgICAgIG91dCA9ICcoJXMpOlxuICAnICUgc2VsZi5maWVsZG5hbWUKKyAgICAgICAgICAgIGlmIHNlbGYuZmlsZWNoYW5nZXM6CisgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgJy5qb2luKFsnJXMnICUgaSBmb3IgaSBpbiBzZWxmLmZpbGVjaGFuZ2VzXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWxpbmVzID0gc2VsZi5vbGR2YWx1ZS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBibGluZXMgPSBzZWxmLm5ld3ZhbHVlLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgIGRpZmYgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihhbGluZXMsIGJsaW5lcywgZmllbGRuYW1lLCBmaWVsZG5hbWUsIGxpbmV0ZXJtPScnKQorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gICcuam9pbihsaXN0KGRpZmYpKQorICAgICAgICAgICAgICAgIG91dCArPSAnXG4gIC0tJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0ID0gJyVzIGNoYW5nZWQgZnJvbSAiJXMiIHRvICIlcyInICUgKHNlbGYuZmllbGRuYW1lLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorCisgICAgICAgIGlmIHNlbGYucmVsYXRlZDoKKyAgICAgICAgICAgIGZvciBjaGcgaW4gc2VsZi5yZWxhdGVkOgorICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRlciBhbmQgY2hnLmZpZWxkbmFtZSBpbiBbJ1BFJywgJ1BWJywgJ1BSJ106CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gY2hnLl9zdHJfaW50ZXJuYWwoRmFsc2UpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcbiAgKiAlcycgJSBsaW5lCisKKyAgICAgICAgcmV0dXJuICclcyVzJyAlIChwcmVmaXgsIG91dCkKKworY2xhc3MgRmlsZUNoYW5nZToKKyAgICBjaGFuZ2V0eXBlX2FkZCA9ICdBJworICAgIGNoYW5nZXR5cGVfcmVtb3ZlID0gJ1InCisgICAgY2hhbmdldHlwZV90eXBlID0gJ1QnCisgICAgY2hhbmdldHlwZV9wZXJtcyA9ICdQJworICAgIGNoYW5nZXR5cGVfb3duZXJncm91cCA9ICdPJworICAgIGNoYW5nZXR5cGVfbGluayA9ICdMJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIGNoYW5nZXR5cGUsIG9sZHZhbHVlID0gTm9uZSwgbmV3dmFsdWUgPSBOb25lKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorICAgICAgICBzZWxmLmNoYW5nZXR5cGUgPSBjaGFuZ2V0eXBlCisgICAgICAgIHNlbGYub2xkdmFsdWUgPSBvbGR2YWx1ZQorICAgICAgICBzZWxmLm5ld3ZhbHVlID0gbmV3dmFsdWUKKworICAgIGRlZiBfZnR5cGVfc3RyKHNlbGYsIGZ0eXBlKToKKyAgICAgICAgaWYgZnR5cGUgPT0gJy0nOgorICAgICAgICAgICAgcmV0dXJuICdmaWxlJworICAgICAgICBlbGlmIGZ0eXBlID09ICdkJzoKKyAgICAgICAgICAgIHJldHVybiAnZGlyZWN0b3J5JworICAgICAgICBlbGlmIGZ0eXBlID09ICdsJzoKKyAgICAgICAgICAgIHJldHVybiAnc3ltbGluaycKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAnYyc6CisgICAgICAgICAgICByZXR1cm4gJ2NoYXIgZGV2aWNlJworICAgICAgICBlbGlmIGZ0eXBlID09ICdiJzoKKyAgICAgICAgICAgIHJldHVybiAnYmxvY2sgZGV2aWNlJworICAgICAgICBlbGlmIGZ0eXBlID09ICdwJzoKKyAgICAgICAgICAgIHJldHVybiAnZmlmbycKKyAgICAgICAgZWxpZiBmdHlwZSA9PSAncyc6CisgICAgICAgICAgICByZXR1cm4gJ3NvY2tldCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAndW5rbm93biAoJXMpJyAlIGZ0eXBlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV9hZGQ6CisgICAgICAgICAgICByZXR1cm4gJyVzIHdhcyBhZGRlZCcgJSBzZWxmLnBhdGgKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX3JlbW92ZToKKyAgICAgICAgICAgIHJldHVybiAnJXMgd2FzIHJlbW92ZWQnICUgc2VsZi5wYXRoCisgICAgICAgIGVsaWYgc2VsZi5jaGFuZ2V0eXBlID09IHNlbGYuY2hhbmdldHlwZV90eXBlOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIHR5cGUgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLl9mdHlwZV9zdHIoc2VsZi5vbGR2YWx1ZSksIHNlbGYuX2Z0eXBlX3N0cihzZWxmLm5ld3ZhbHVlKSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX3Blcm1zOgorICAgICAgICAgICAgcmV0dXJuICclcyBjaGFuZ2VkIHBlcm1pc3Npb25zIGZyb20gJXMgdG8gJXMnICUgKHNlbGYucGF0aCwgc2VsZi5vbGR2YWx1ZSwgc2VsZi5uZXd2YWx1ZSkKKyAgICAgICAgZWxpZiBzZWxmLmNoYW5nZXR5cGUgPT0gc2VsZi5jaGFuZ2V0eXBlX293bmVyZ3JvdXA6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgb3duZXIvZ3JvdXAgZnJvbSAlcyB0byAlcycgJSAoc2VsZi5wYXRoLCBzZWxmLm9sZHZhbHVlLCBzZWxmLm5ld3ZhbHVlKQorICAgICAgICBlbGlmIHNlbGYuY2hhbmdldHlwZSA9PSBzZWxmLmNoYW5nZXR5cGVfbGluazoKKyAgICAgICAgICAgIHJldHVybiAnJXMgY2hhbmdlZCBzeW1saW5rIHRhcmdldCBmcm9tICVzIHRvICVzJyAlIChzZWxmLnBhdGgsIHNlbGYub2xkdmFsdWUsIHNlbGYubmV3dmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJyVzIGNoYW5nZWQgKHVua25vd24pJyAlIHNlbGYucGF0aAorCisKK2RlZiBibG9iX3RvX2RpY3QoYmxvYik6CisgICAgYWxpbmVzID0gYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgYWRpY3QgPSB7fQorICAgIGZvciBsaW5lIGluIGFsaW5lczoKKyAgICAgICAgc3BsaXR2ID0gW2kuc3RyaXAoKSBmb3IgaSBpbiBsaW5lLnNwbGl0KCc9JywxKV0KKyAgICAgICAgaWYgbGVuKHNwbGl0dikgPiAxOgorICAgICAgICAgICAgYWRpY3Rbc3BsaXR2WzBdXSA9IHNwbGl0dlsxXQorICAgIHJldHVybiBhZGljdAorCisKK2RlZiBmaWxlX2xpc3RfdG9fZGljdChsaW5lcyk6CisgICAgYWRpY3QgPSB7fQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAjIExlYXZlIHRoZSBsYXN0IGZldyBmaWVsZHMgaW50YWN0IHNvIHdlIGhhbmRsZSBmaWxlIG5hbWVzIGNvbnRhaW5pbmcgc3BhY2VzCisgICAgICAgIHNwbGl0diA9IGxpbmUuc3BsaXQoTm9uZSw0KQorICAgICAgICAjIEdyYWIgdGhlIHBhdGggYW5kIHJlbW92ZSB0aGUgbGVhZGluZyAuCisgICAgICAgIHBhdGggPSBzcGxpdHZbNF1bMTpdLnN0cmlwKCkKKyAgICAgICAgIyBIYW5kbGUgc3ltbGlua3MKKyAgICAgICAgaWYoJyAtPiAnIGluIHBhdGgpOgorICAgICAgICAgICAgdGFyZ2V0ID0gcGF0aC5zcGxpdCgnIC0+ICcpWzFdCisgICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdCgnIC0+ICcpWzBdCisgICAgICAgICAgICBhZGljdFtwYXRoXSA9IHNwbGl0dlswOjNdICsgW3RhcmdldF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkaWN0W3BhdGhdID0gc3BsaXR2WzA6M10KKyAgICByZXR1cm4gYWRpY3QKKworCitkZWYgY29tcGFyZV9maWxlX2xpc3RzKGFsaW5lcywgYmxpbmVzKToKKyAgICBhZGljdCA9IGZpbGVfbGlzdF90b19kaWN0KGFsaW5lcykKKyAgICBiZGljdCA9IGZpbGVfbGlzdF90b19kaWN0KGJsaW5lcykKKyAgICBmaWxlY2hhbmdlcyA9IFtdCisgICAgZm9yIHBhdGgsIHNwbGl0diBpbiBhZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgbmV3c3BsaXR2ID0gYmRpY3QucG9wKHBhdGgsIE5vbmUpCisgICAgICAgIGlmIG5ld3NwbGl0djoKKyAgICAgICAgICAgICMgQ2hlY2sgdHlwZQorICAgICAgICAgICAgb2xkdmFsdWUgPSBzcGxpdHZbMF1bMF0KKyAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzBdWzBdCisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfdHlwZSwgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgICMgQ2hlY2sgcGVybWlzc2lvbnMKKyAgICAgICAgICAgIG9sZHZhbHVlID0gc3BsaXR2WzBdWzE6XQorICAgICAgICAgICAgbmV3dmFsdWUgPSBuZXdzcGxpdHZbMF1bMTpdCisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfcGVybXMsIG9sZHZhbHVlLCBuZXd2YWx1ZSkpCisgICAgICAgICAgICAjIENoZWNrIG93bmVyL2dyb3VwCisgICAgICAgICAgICBvbGR2YWx1ZSA9ICclcy8lcycgJSAoc3BsaXR2WzFdLCBzcGxpdHZbMl0pCisgICAgICAgICAgICBuZXd2YWx1ZSA9ICclcy8lcycgJSAobmV3c3BsaXR2WzFdLCBuZXdzcGxpdHZbMl0pCisgICAgICAgICAgICBpZiBvbGR2YWx1ZSAhPSBuZXd2YWx1ZToKKyAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfb3duZXJncm91cCwgb2xkdmFsdWUsIG5ld3ZhbHVlKSkKKyAgICAgICAgICAgICMgQ2hlY2sgc3ltbGluayB0YXJnZXQKKyAgICAgICAgICAgIGlmIG5ld3NwbGl0dlswXVswXSA9PSAnbCc6CisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dikgPiAzOgorICAgICAgICAgICAgICAgICAgICBvbGR2YWx1ZSA9IHNwbGl0dlszXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9sZHZhbHVlID0gTm9uZQorICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3c3BsaXR2WzNdCisgICAgICAgICAgICAgICAgaWYgb2xkdmFsdWUgIT0gbmV3dmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzLmFwcGVuZChGaWxlQ2hhbmdlKHBhdGgsIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9saW5rLCBvbGR2YWx1ZSwgbmV3dmFsdWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGF0aCwgRmlsZUNoYW5nZS5jaGFuZ2V0eXBlX3JlbW92ZSkpCisKKyAgICAjIFdoYXRldmVyIGlzIGxlZnQgb3ZlciBoYXMgYmVlbiBhZGRlZAorICAgIGZvciBwYXRoIGluIGJkaWN0OgorICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwYXRoLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfYWRkKSkKKworICAgIHJldHVybiBmaWxlY2hhbmdlcworCisKK2RlZiBjb21wYXJlX2xpc3RzKGFsaW5lcywgYmxpbmVzKToKKyAgICByZW1vdmVkID0gbGlzdChzZXQoYWxpbmVzKSAtIHNldChibGluZXMpKQorICAgIGFkZGVkID0gbGlzdChzZXQoYmxpbmVzKSAtIHNldChhbGluZXMpKQorCisgICAgZmlsZWNoYW5nZXMgPSBbXQorICAgIGZvciBwa2cgaW4gcmVtb3ZlZDoKKyAgICAgICAgZmlsZWNoYW5nZXMuYXBwZW5kKEZpbGVDaGFuZ2UocGtnLCBGaWxlQ2hhbmdlLmNoYW5nZXR5cGVfcmVtb3ZlKSkKKyAgICBmb3IgcGtnIGluIGFkZGVkOgorICAgICAgICBmaWxlY2hhbmdlcy5hcHBlbmQoRmlsZUNoYW5nZShwa2csIEZpbGVDaGFuZ2UuY2hhbmdldHlwZV9hZGQpKQorCisgICAgcmV0dXJuIGZpbGVjaGFuZ2VzCisKKworZGVmIGNvbXBhcmVfcGtnX2xpc3RzKGFzdHIsIGJzdHIpOgorICAgIGRlcHZlcmEgPSBiYi51dGlscy5leHBsb2RlX2RlcF92ZXJzaW9uczIoYXN0cikKKyAgICBkZXB2ZXJiID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGJzdHIpCisKKyAgICAjIFN0cmlwIG91dCBjaGFuZ2VzIHdoZXJlIHRoZSB2ZXJzaW9uIGhhcyBpbmNyZWFzZWQKKyAgICByZW1vdmUgPSBbXQorICAgIGZvciBrIGluIGRlcHZlcmE6CisgICAgICAgIGlmIGsgaW4gZGVwdmVyYjoKKyAgICAgICAgICAgIGR2YSA9IGRlcHZlcmFba10KKyAgICAgICAgICAgIGR2YiA9IGRlcHZlcmJba10KKyAgICAgICAgICAgIGlmIGR2YSBhbmQgZHZiIGFuZCBsZW4oZHZhKSA9PSBsZW4oZHZiKToKKyAgICAgICAgICAgICAgICAjIFNpbmNlIGxlbmd0aCBpcyB0aGUgc2FtZSwgc29ydCBzbyB0aGF0IHByZWZpeGVzIChlLmcuID49KSB3aWxsIGxpbmUgdXAKKyAgICAgICAgICAgICAgICBkdmEuc29ydCgpCisgICAgICAgICAgICAgICAgZHZiLnNvcnQoKQorICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkdmFpLCBkdmJpIGluIHppcChkdmEsIGR2Yik6CisgICAgICAgICAgICAgICAgICAgIGlmIGR2YWkgIT0gZHZiaToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFpcHJlZml4ID0gZHZhaS5zcGxpdCgnICcpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBiaXByZWZpeCA9IGR2Ymkuc3BsaXQoJyAnKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWlwcmVmaXggPT0gYmlwcmVmaXggYW5kIGFpcHJlZml4IGluIFsnPj0nLCAnPSddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJiLnV0aWxzLnZlcmNtcChiYi51dGlscy5zcGxpdF92ZXJzaW9uKGR2YWkpLCBiYi51dGlscy5zcGxpdF92ZXJzaW9uKGR2YmkpKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlaXQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgcmVtb3ZlaXQ6CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZS5hcHBlbmQoaykKKworICAgIGZvciBrIGluIHJlbW92ZToKKyAgICAgICAgZGVwdmVyYS5wb3AoaykKKyAgICAgICAgZGVwdmVyYi5wb3AoaykKKworICAgIHJldHVybiAoZGVwdmVyYSwgZGVwdmVyYikKKworCitkZWYgY29tcGFyZV9kaWN0X2Jsb2JzKHBhdGgsIGFibG9iLCBiYmxvYiwgcmVwb3J0X2FsbCwgcmVwb3J0X3Zlcik6CisgICAgYWRpY3QgPSBibG9iX3RvX2RpY3QoYWJsb2IpCisgICAgYmRpY3QgPSBibG9iX3RvX2RpY3QoYmJsb2IpCisKKyAgICBwa2duYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorCisgICAgZGVmYXVsdHZhbHMgPSB7fQorICAgIGRlZmF1bHR2YWxzWydQS0cnXSA9IHBrZ25hbWUKKyAgICBkZWZhdWx0dmFsc1snUEtHRSddID0gJzAnCisKKyAgICBjaGFuZ2VzID0gW10KKyAgICBrZXlzID0gbGlzdChzZXQoYWRpY3Qua2V5cygpKSB8IHNldChiZGljdC5rZXlzKCkpIHwgc2V0KGRlZmF1bHR2YWxfbWFwLmtleXMoKSkpCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICBhc3RyID0gYWRpY3QuZ2V0KGtleSwgJycpCisgICAgICAgIGJzdHIgPSBiZGljdC5nZXQoa2V5LCAnJykKKyAgICAgICAgaWYga2V5IGluIHZlcl9tb25pdG9yX2ZpZWxkczoKKyAgICAgICAgICAgIG1vbml0b3JlZCA9IHJlcG9ydF92ZXIgb3IgYXN0ciBvciBic3RyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb25pdG9yZWQgPSBrZXkgaW4gbW9uaXRvcl9maWVsZHMKKyAgICAgICAgbWFwcGVkX2tleSA9IGRlZmF1bHR2YWxfbWFwLmdldChrZXksICcnKQorICAgICAgICBpZiBtYXBwZWRfa2V5OgorICAgICAgICAgICAgaWYgbm90IGFzdHI6CisgICAgICAgICAgICAgICAgYXN0ciA9ICclcyBbZGVmYXVsdF0nICUgYWRpY3QuZ2V0KG1hcHBlZF9rZXksIGRlZmF1bHR2YWxzLmdldChrZXksICcnKSkKKyAgICAgICAgICAgIGlmIG5vdCBic3RyOgorICAgICAgICAgICAgICAgIGJzdHIgPSAnJXMgW2RlZmF1bHRdJyAlIGJkaWN0LmdldChtYXBwZWRfa2V5LCBkZWZhdWx0dmFscy5nZXQoa2V5LCAnJykpCisKKyAgICAgICAgaWYgYXN0ciAhPSBic3RyOgorICAgICAgICAgICAgaWYgKG5vdCByZXBvcnRfYWxsKSBhbmQga2V5IGluIG51bWVyaWNfZmllbGRzOgorICAgICAgICAgICAgICAgIGF2YWwgPSBpbnQoYXN0ciBvciAwKQorICAgICAgICAgICAgICAgIGJ2YWwgPSBpbnQoYnN0ciBvciAwKQorICAgICAgICAgICAgICAgIGlmIGF2YWwgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9ICgoYnZhbCAtIGF2YWwpIC8gZmxvYXQoYXZhbCkpICogMTAwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGVyY2VudGNoZyA9IDEwMAorICAgICAgICAgICAgICAgIGlmIGFicyhwZXJjZW50Y2hnKSA8IG1vbml0b3JfbnVtZXJpY190aHJlc2hvbGQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIChub3QgcmVwb3J0X2FsbCkgYW5kIGtleSBpbiBsaXN0X2ZpZWxkczoKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gIkZJTEVMSVNUIiBhbmQgcGF0aC5lbmRzd2l0aCgiLWRiZyIpIGFuZCBic3RyLnN0cmlwKCkgIT0gJyc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYga2V5IGluIFsnUlBST1ZJREVTJywgJ1JERVBFTkRTJywgJ1JSRUNPTU1FTkRTJywgJ1JTVUdHRVNUUycsICdSUkVQTEFDRVMnLCAnUkNPTkZMSUNUUyddOgorICAgICAgICAgICAgICAgICAgICAoZGVwdmVyYSwgZGVwdmVyYikgPSBjb21wYXJlX3BrZ19saXN0cyhhc3RyLCBic3RyKQorICAgICAgICAgICAgICAgICAgICBpZiBkZXB2ZXJhID09IGRlcHZlcmI6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGFsaXN0ID0gYXN0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgYWxpc3Quc29ydCgpCisgICAgICAgICAgICAgICAgYmxpc3QgPSBic3RyLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBibGlzdC5zb3J0KCkKKyAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlbW92YWwgb2Ygc2VsZi1kZXBlbmRlbmNpZXMKKyAgICAgICAgICAgICAgICBpZiBwa2duYW1lIGluIGFsaXN0IGFuZCBub3QgcGtnbmFtZSBpbiBibGlzdDoKKyAgICAgICAgICAgICAgICAgICAgYWxpc3QucmVtb3ZlKHBrZ25hbWUpCisgICAgICAgICAgICAgICAgaWYgJyAnLmpvaW4oYWxpc3QpID09ICcgJy5qb2luKGJsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGtleSwgYXN0ciwgYnN0ciwgbW9uaXRvcmVkKQorICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgIHJldHVybiBjaGFuZ2VzCisKKworZGVmIHByb2Nlc3NfY2hhbmdlcyhyZXBvcGF0aCwgcmV2aXNpb24xLCByZXZpc2lvbjI9J0hFQUQnLCByZXBvcnRfYWxsPUZhbHNlLCByZXBvcnRfdmVyPUZhbHNlKToKKyAgICByZXBvID0gZ2l0LlJlcG8ocmVwb3BhdGgpCisgICAgYXNzZXJ0IHJlcG8uYmFyZSA9PSBGYWxzZQorICAgIGNvbW1pdCA9IHJlcG8uY29tbWl0KHJldmlzaW9uMSkKKyAgICBkaWZmID0gY29tbWl0LmRpZmYocmV2aXNpb24yKQorCisgICAgY2hhbmdlcyA9IFtdCisgICAgZm9yIGQgaW4gZGlmZi5pdGVyX2NoYW5nZV90eXBlKCdNJyk6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgaWYgcGF0aC5zdGFydHN3aXRoKCdwYWNrYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2xhdGVzdCc6CisgICAgICAgICAgICAgICAgY2hhbmdlcy5leHRlbmQoY29tcGFyZV9kaWN0X2Jsb2JzKHBhdGgsIGQuYV9ibG9iLCBkLmJfYmxvYiwgcmVwb3J0X2FsbCwgcmVwb3J0X3ZlcikpCisgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKyAgICAgICAgZWxpZiBwYXRoLnN0YXJ0c3dpdGgoJ2ltYWdlcy8nKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShkLmFfYmxvYi5wYXRoKQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgaW4gaW1nX21vbml0b3JfZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2ZpbGVzLWluLWltYWdlLnR4dCc6CisgICAgICAgICAgICAgICAgICAgIGFsaW5lcyA9IGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxpbmVzID0gZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmaWxlY2hhbmdlcyA9IGNvbXBhcmVfZmlsZV9saXN0cyhhbGluZXMsYmxpbmVzKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWxlY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgTm9uZSwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5maWxlY2hhbmdlcyA9IGZpbGVjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgICAgICAgICAgZWxpZiBmaWxlbmFtZSA9PSAnaW5zdGFsbGVkLXBhY2thZ2UtbmFtZXMudHh0JzoKKyAgICAgICAgICAgICAgICAgICAgYWxpbmVzID0gZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBibGluZXMgPSBkLmJfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgIGZpbGVjaGFuZ2VzID0gY29tcGFyZV9saXN0cyhhbGluZXMsYmxpbmVzKQorICAgICAgICAgICAgICAgICAgICBpZiBmaWxlY2hhbmdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZyA9IENoYW5nZVJlY29yZChwYXRoLCBmaWxlbmFtZSwgTm9uZSwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5maWxlY2hhbmdlcyA9IGZpbGVjaGFuZ2VzCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lLCBkLmFfYmxvYi5kYXRhX3N0cmVhbS5yZWFkKCksIGQuYl9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgICAgICAgICAgZWxpZiBmaWxlbmFtZSA9PSAnaW1hZ2UtaW5mby50eHQnOgorICAgICAgICAgICAgICAgIGNoYW5nZXMuZXh0ZW5kKGNvbXBhcmVfZGljdF9ibG9icyhwYXRoLCBkLmFfYmxvYiwgZC5iX2Jsb2IsIHJlcG9ydF9hbGwsIHJlcG9ydF92ZXIpKQorICAgICAgICAgICAgZWxpZiAnL2ltYWdlLWZpbGVzLycgaW4gcGF0aDoKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWUsIGQuYV9ibG9iLmRhdGFfc3RyZWFtLnJlYWQoKSwgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKworICAgICMgTG9vayBmb3IgYWRkZWQgcHJlaW5zdC9wb3N0aW5zdC9wcmVybS9wb3N0cm0KKyAgICAjICh3aXRob3V0IHJlcG9ydGluZyBuZXdseSBhZGRlZCByZWNpcGVzKQorICAgIGFkZGVkcGtncyA9IFtdCisgICAgYWRkZWRjaGFuZ2VzID0gW10KKyAgICBmb3IgZCBpbiBkaWZmLml0ZXJfY2hhbmdlX3R5cGUoJ0EnKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShkLmJfYmxvYi5wYXRoKQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoJ3BhY2thZ2VzLycpOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGQuYl9ibG9iLnBhdGgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnbGF0ZXN0JzoKKyAgICAgICAgICAgICAgICBhZGRlZHBrZ3MuYXBwZW5kKHBhdGgpCisgICAgICAgICAgICBlbGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoJ2xhdGVzdC4nKToKKyAgICAgICAgICAgICAgICBjaGcgPSBDaGFuZ2VSZWNvcmQocGF0aCwgZmlsZW5hbWVbNzpdLCAnJywgZC5iX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCBUcnVlKQorICAgICAgICAgICAgICAgIGFkZGVkY2hhbmdlcy5hcHBlbmQoY2hnKQorICAgIGZvciBjaGcgaW4gYWRkZWRjaGFuZ2VzOgorICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBwa2cgaW4gYWRkZWRwa2dzOgorICAgICAgICAgICAgaWYgY2hnLnBhdGguc3RhcnRzd2l0aChwa2cpOgorICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIGNoYW5nZXMuYXBwZW5kKGNoZykKKworICAgICMgTG9vayBmb3IgY2xlYXJlZCBwcmVpbnN0L3Bvc3RpbnN0L3ByZXJtL3Bvc3RybQorICAgIGZvciBkIGluIGRpZmYuaXRlcl9jaGFuZ2VfdHlwZSgnRCcpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGQuYV9ibG9iLnBhdGgpCisgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJyk6CisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZC5hX2Jsb2IucGF0aCkKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lICE9ICdsYXRlc3QnIGFuZCBmaWxlbmFtZS5zdGFydHN3aXRoKCdsYXRlc3QuJyk6CisgICAgICAgICAgICAgICAgY2hnID0gQ2hhbmdlUmVjb3JkKHBhdGgsIGZpbGVuYW1lWzc6XSwgZC5hX2Jsb2IuZGF0YV9zdHJlYW0ucmVhZCgpLCAnJywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzLmFwcGVuZChjaGcpCisKKyAgICAjIExpbmsgcmVsYXRlZCBjaGFuZ2VzCisgICAgZm9yIGNoZyBpbiBjaGFuZ2VzOgorICAgICAgICBpZiBjaGcubW9uaXRvcmVkOgorICAgICAgICAgICAgZm9yIGNoZzIgaW4gY2hhbmdlczoKKyAgICAgICAgICAgICAgICAjIChDaGVjayBkaXJuYW1lIGluIHRoZSBjYXNlIG9mIGZpZWxkcyBmcm9tIHJlY2lwZSBpbmZvIGZpbGVzKQorICAgICAgICAgICAgICAgIGlmIGNoZy5wYXRoID09IGNoZzIucGF0aCBvciBvcy5wYXRoLmRpcm5hbWUoY2hnLnBhdGgpID09IGNoZzIucGF0aDoKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hnMi5maWVsZG5hbWUgaW4gcmVsYXRlZF9maWVsZHMuZ2V0KGNoZy5maWVsZG5hbWUsIFtdKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5yZWxhdGVkLmFwcGVuZChjaGcyKQorICAgICAgICAgICAgICAgICAgICBlbGlmIGNoZy5wYXRoID09IGNoZzIucGF0aCBhbmQgY2hnLnBhdGguc3RhcnRzd2l0aCgncGFja2FnZXMvJykgYW5kIGNoZzIuZmllbGRuYW1lIGluIFsnUEUnLCAnUFYnLCAnUFInXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZy5yZWxhdGVkLmFwcGVuZChjaGcyKQorCisgICAgaWYgcmVwb3J0X2FsbDoKKyAgICAgICAgcmV0dXJuIGNoYW5nZXMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gW2NoZyBmb3IgY2hnIGluIGNoYW5nZXMgaWYgY2hnLm1vbml0b3JlZF0KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2NhY2hlZHBhdGgucHkgYi9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDBjYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9jYWNoZWRwYXRoLnB5CkBAIC0wLDAgKzEsMjMzIEBACisjCisjIEJhc2VkIG9uIHN0YW5kYXJkIHB5dGhvbiBsaWJyYXJ5IGZ1bmN0aW9ucyBidXQgYXZvaWQKKyMgcmVwZWF0ZWQgc3RhdCBjYWxscy4gSXRzIGFzc3VtZWQgdGhlIGZpbGVzIHdpbGwgbm90IGNoYW5nZSBmcm9tIHVuZGVyIHVzCisjIHNvIHdlIGNhbiBjYWNoZSBzdGF0IGNhbGxzLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHN0YXQgYXMgc3RhdG1vZAorCitjbGFzcyBDYWNoZWRQYXRoKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnN0YXRjYWNoZSA9IHt9CisgICAgICAgIHNlbGYubHN0YXRjYWNoZSA9IHt9CisgICAgICAgIHNlbGYubm9ybXBhdGhjYWNoZSA9IHt9CisgICAgICAgIHJldHVybgorCisgICAgZGVmIHVwZGF0ZWNhY2hlKHNlbGYsIHgpOgorICAgICAgICB4ID0gc2VsZi5ub3JtcGF0aCh4KQorICAgICAgICBpZiB4IGluIHNlbGYuc3RhdGNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYuc3RhdGNhY2hlW3hdCisgICAgICAgIGlmIHggaW4gc2VsZi5sc3RhdGNhY2hlOgorICAgICAgICAgICAgZGVsIHNlbGYubHN0YXRjYWNoZVt4XQorCisgICAgZGVmIG5vcm1wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoIGluIHNlbGYubm9ybXBhdGhjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5vcm1wYXRoY2FjaGVbcGF0aF0KKyAgICAgICAgbmV3cGF0aCA9IG9zLnBhdGgubm9ybXBhdGgocGF0aCkKKyAgICAgICAgc2VsZi5ub3JtcGF0aGNhY2hlW3BhdGhdID0gbmV3cGF0aAorICAgICAgICByZXR1cm4gbmV3cGF0aAorCisgICAgZGVmIF9jYWxsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnN0YXRjYWNoZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN0YXRjYWNoZVtwYXRoXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gc3QKKyAgICAgICAgICAgIHJldHVybiBzdAorICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBzZWxmLnN0YXRjYWNoZVtwYXRoXSA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgV2UgbWlnaHQgYXMgd2VsbCBjYWxsIGxzdGF0IGFuZCB0aGVuIG9ubHkgCisgICAgIyBjYWxsIHN0YXQgYXMgd2VsbCBpbiB0aGUgc3ltYm9saWMgbGluayBjYXNlCisgICAgIyBzaW5jZSB0aGlzIHR1cm5zIG91dCB0byBiZSBtdWNoIG1vcmUgb3B0aW1hbAorICAgICMgaW4gcmVhbCB3b3JsZCB1c2FnZSBvZiB0aGlzIGNhY2hlCisgICAgZGVmIGNhbGxzdGF0KHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gc2VsZi5ub3JtcGF0aChwYXRoKQorICAgICAgICBzZWxmLmNhbGxsc3RhdChwYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5zdGF0Y2FjaGVbcGF0aF0KKworICAgIGRlZiBjYWxsbHN0YXQoc2VsZiwgcGF0aCk6CisgICAgICAgIHBhdGggPSBzZWxmLm5vcm1wYXRoKHBhdGgpCisgICAgICAgIGlmIHBhdGggaW4gc2VsZi5sc3RhdGNhY2hlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubHN0YXRjYWNoZVtwYXRoXQorICAgICAgICAjYmIuZXJyb3IoIkxTdGF0cGF0aDoiICsgcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbHN0ID0gb3MubHN0YXQocGF0aCkKKyAgICAgICAgICAgIHNlbGYubHN0YXRjYWNoZVtwYXRoXSA9IGxzdAorICAgICAgICAgICAgaWYgbm90IHN0YXRtb2QuU19JU0xOSyhsc3Quc3RfbW9kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0Y2FjaGVbcGF0aF0gPSBsc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY2FsbHN0YXQocGF0aCkKKyAgICAgICAgICAgIHJldHVybiBsc3QKKyAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sc3RhdGNhY2hlW3BhdGhdID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuc3RhdGNhY2hlW3BhdGhdID0gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBUaGlzIGZvbGxvd3Mgc3ltYm9saWMgbGlua3MsIHNvIGJvdGggaXNsaW5rKCkgYW5kIGlzZGlyKCkgY2FuIGJlIHRydWUKKyAgICAjIGZvciB0aGUgc2FtZSBwYXRoIG9ubyBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBzeW1saW5rcworICAgIGRlZiBpc2ZpbGUoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSByZWd1bGFyIGZpbGUiIiIKKyAgICAgICAgc3QgPSBzZWxmLmNhbGxzdGF0KHBhdGgpCisgICAgICAgIGlmIG5vdCBzdDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gc3RhdG1vZC5TX0lTUkVHKHN0LnN0X21vZGUpCisKKyAgICAjIElzIGEgcGF0aCBhIGRpcmVjdG9yeT8KKyAgICAjIFRoaXMgZm9sbG93cyBzeW1ib2xpYyBsaW5rcywgc28gYm90aCBpc2xpbmsoKSBhbmQgaXNkaXIoKQorICAgICMgY2FuIGJlIHRydWUgZm9yIHRoZSBzYW1lIHBhdGggb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltbGlua3MKKyAgICBkZWYgaXNkaXIoc2VsZiwgcyk6CisgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBwYXRobmFtZSByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LiIiIgorICAgICAgICBzdCA9IHNlbGYuY2FsbHN0YXQocykKKyAgICAgICAgaWYgbm90IHN0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdGF0bW9kLlNfSVNESVIoc3Quc3RfbW9kZSkKKworICAgIGRlZiBpc2xpbmsoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rIiIiCisgICAgICAgIHN0ID0gc2VsZi5jYWxsbHN0YXQocGF0aCkKKyAgICAgICAgaWYgbm90IHN0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBzdGF0bW9kLlNfSVNMTksoc3Quc3RfbW9kZSkKKworICAgICMgRG9lcyBhIHBhdGggZXhpc3Q/CisgICAgIyBUaGlzIGlzIGZhbHNlIGZvciBkYW5nbGluZyBzeW1ib2xpYyBsaW5rcyBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCB0aGVtLgorICAgIGRlZiBleGlzdHMoc2VsZiwgcGF0aCk6CisgICAgICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCisgICAgICAgIGlmIHNlbGYuY2FsbHN0YXQocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBsZXhpc3RzKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCisgICAgICAgIGlmIHNlbGYuY2FsbGxzdGF0KHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbHN0YXQocGF0aCkKKworICAgIGRlZiBsc3RhdChzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY2FsbGxzdGF0KHBhdGgpCisKKyAgICBkZWYgd2FsayhzZWxmLCB0b3AsIHRvcGRvd249VHJ1ZSwgb25lcnJvcj1Ob25lLCBmb2xsb3dsaW5rcz1GYWxzZSk6CisgICAgICAgICMgTWF0Y2hlcyBvcy53YWxrLCBub3Qgb3MucGF0aC53YWxrKCkKKworICAgICAgICAjIFdlIG1heSBub3QgaGF2ZSByZWFkIHBlcm1pc3Npb24gZm9yIHRvcCwgaW4gd2hpY2ggY2FzZSB3ZSBjYW4ndAorICAgICAgICAjIGdldCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoZSBkaXJlY3RvcnkgY29udGFpbnMuICBvcy5wYXRoLndhbGsKKyAgICAgICAgIyBhbHdheXMgc3VwcHJlc3NlZCB0aGUgZXhjZXB0aW9uIHRoZW4sIHJhdGhlciB0aGFuIGJsb3cgdXAgZm9yIGEKKyAgICAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAorICAgICAgICAjIGxlZnQgdG8gdmlzaXQuICBUaGF0IGxvZ2ljIGlzIGNvcGllZCBoZXJlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIodG9wKQorICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvbmVycm9yKGVycikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGRpcnMsIG5vbmRpcnMgPSBbXSwgW10KKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBpZiBzZWxmLmlzZGlyKG9zLnBhdGguam9pbih0b3AsIG5hbWUpKToKKyAgICAgICAgICAgICAgICBkaXJzLmFwcGVuZChuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBub25kaXJzLmFwcGVuZChuYW1lKQorCisgICAgICAgIGlmIHRvcGRvd246CisgICAgICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgIG5ld19wYXRoID0gb3MucGF0aC5qb2luKHRvcCwgbmFtZSkKKyAgICAgICAgICAgIGlmIGZvbGxvd2xpbmtzIG9yIG5vdCBzZWxmLmlzbGluayhuZXdfcGF0aCk6CisgICAgICAgICAgICAgICAgZm9yIHggaW4gc2VsZi53YWxrKG5ld19wYXRoLCB0b3Bkb3duLCBvbmVycm9yLCBmb2xsb3dsaW5rcyk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgaWYgbm90IHRvcGRvd246CisgICAgICAgICAgICB5aWVsZCB0b3AsIGRpcnMsIG5vbmRpcnMKKworICAgICMjIHJlYWxwYXRoKCkgcmVsYXRlZCBmdW5jdGlvbnMKKyAgICBkZWYgX19pc19wYXRoX2JlbG93KHNlbGYsIGZpbGUsIHJvb3QpOgorICAgICAgICByZXR1cm4gKGZpbGUgKyBvcy5wYXRoLnNlcCkuc3RhcnRzd2l0aChyb290KQorCisgICAgZGVmIF9fcmVhbHBhdGhfcmVsKHNlbGYsIHN0YXJ0LCByZWxfcGF0aCwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICAgICAiIiJDYWxjdWxhdGVzIHJlYWwgcGF0aCBvZiBzeW1saW5rICdzdGFydCcgKyAncmVsX3BhdGgnIGJlbG93CisgICAgICAgICdyb290Jzsgbm8gcGFydCBvZiAnc3RhcnQnIGJlbG93ICdyb290JyBtdXN0IGNvbnRhaW4gc3ltbGlua3MuICIiIgorICAgICAgICBoYXZlX2RpciA9IFRydWUKKworICAgICAgICBmb3IgZCBpbiByZWxfcGF0aC5zcGxpdChvcy5wYXRoLnNlcCk6CisgICAgICAgICAgICBpZiBub3QgaGF2ZV9kaXIgYW5kIG5vdCBhc3N1bWVfZGlyOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRU5PRU5ULCAibm8gc3VjaCBkaXJlY3RvcnkgJXMiICUgc3RhcnQpCisKKyAgICAgICAgICAgIGlmIGQgPT0gb3MucGF0aC5wYXJkaXI6ICMgJy4uJworICAgICAgICAgICAgICAgIGlmIGxlbihzdGFydCkgPj0gbGVuKHJvb3QpOgorICAgICAgICAgICAgICAgICAgICAjIGRvIG5vdCBmb2xsb3cgJy4uJyBiZWZvcmUgcm9vdAorICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG9zLnBhdGguZGlybmFtZShzdGFydCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGVtaXQgd2FybmluZz8KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAoc3RhcnQsIGhhdmVfZGlyKSA9IHNlbGYuX19yZWFscGF0aChvcy5wYXRoLmpvaW4oc3RhcnQsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorCisgICAgICAgICAgICBhc3NlcnQoc2VsZi5fX2lzX3BhdGhfYmVsb3coc3RhcnQsIHJvb3QpKQorCisgICAgICAgIHJldHVybiBzdGFydAorCisgICAgZGVmIF9fcmVhbHBhdGgoc2VsZiwgZmlsZSwgcm9vdCwgbG9vcF9jbnQsIGFzc3VtZV9kaXIpOgorICAgICAgICB3aGlsZSBzZWxmLmlzbGluayhmaWxlKSBhbmQgbGVuKGZpbGUpID49IGxlbihyb290KToKKyAgICAgICAgICAgIGlmIGxvb3BfY250ID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwgZmlsZSkKKworICAgICAgICAgICAgbG9vcF9jbnQgLT0gMQorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5ub3JtcGF0aChvcy5yZWFkbGluayhmaWxlKSkKKyAgICAKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICAgICAgdGRpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKQorICAgICAgICAgICAgICAgIGFzc2VydChzZWxmLl9faXNfcGF0aF9iZWxvdyh0ZGlyLCByb290KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGRpciA9IHJvb3QKKworICAgICAgICAgICAgZmlsZSA9IHNlbGYuX19yZWFscGF0aF9yZWwodGRpciwgdGFyZ2V0LCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpc19kaXIgPSBzZWxmLmlzZGlyKGZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlzX2RpciA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJuIChmaWxlLCBpc19kaXIpCisKKyAgICBkZWYgcmVhbHBhdGgoc2VsZiwgZmlsZSwgcm9vdCwgdXNlX3BoeXNkaXIgPSBUcnVlLCBsb29wX2NudCA9IDEwMCwgYXNzdW1lX2RpciA9IEZhbHNlKToKKyAgICAgICAgIiIiIFJldHVybnMgdGhlIGNhbm9uaWNhbCBwYXRoIG9mICdmaWxlJyB3aXRoIGFzc3VtaW5nIGEKKyAgICAgICAgdG9wbGV2ZWwgJ3Jvb3QnIGRpcmVjdG9yeS4gV2hlbiAndXNlX3BoeXNkaXInIGlzIHNldCwgYWxsCisgICAgICAgIHByZWNlZGluZyBwYXRoIGNvbXBvbmVudHMgb2YgJ2ZpbGUnIHdpbGwgYmUgcmVzb2x2ZWQgZmlyc3Q7CisgICAgICAgIHRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IHVubGVzcyBpdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlcmUgaXMKKyAgICAgICAgbm8gc3ltbGluayBpbiB0aGUgcGF0aC4gV2hlbiAnYXNzdW1lX2RpcicgaXMgbm90IHNldCwgbWlzc2luZworICAgICAgICBwYXRoIGNvbXBvbmVudHMgd2lsbCByYWlzZSBhbiBFTk9FTlQgZXJyb3IiIiIKKworICAgICAgICByb290ID0gb3MucGF0aC5ub3JtcGF0aChyb290KQorICAgICAgICBmaWxlID0gb3MucGF0aC5ub3JtcGF0aChmaWxlKQorCisgICAgICAgIGlmIG5vdCByb290LmVuZHN3aXRoKG9zLnBhdGguc2VwKToKKyAgICAgICAgICAgICMgbGV0dGluZyByb290IGVuZCB3aXRoICcvJyBtYWtlcyBzb21lIHRoaW5ncyBlYXNpZXIKKyAgICAgICAgICAgIHJvb3QgPSByb290ICsgb3MucGF0aC5zZXAKKworICAgICAgICBpZiBub3Qgc2VsZi5fX2lzX3BhdGhfYmVsb3coZmlsZSwgcm9vdCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlZBTCwgImZpbGUgJyVzJyBpcyBub3QgYmVsb3cgcm9vdCIgJSBmaWxlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHVzZV9waHlzZGlyOgorICAgICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9fcmVhbHBhdGhfcmVsKHJvb3QsIGZpbGVbKGxlbihyb290KSAtIDEpOl0sIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5fX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKVswXQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTE9PUDoKKyAgICAgICAgICAgICAgICAjIG1ha2UgRUxPT1AgbW9yZSByZWFkYWJsZTsgd2l0aG91dCBjYXRjaGluZyBpdCwgdGhlcmUgd2lsbAorICAgICAgICAgICAgICAgICMgYmUgcHJpbnRlZCBhIGJhY2t0cmFjZSB3aXRoIDEwMHMgb2YgT1NFcnJvciBleGNlcHRpb25zCisgICAgICAgICAgICAgICAgIyBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b28gbXVjaCByZWN1cnNpb25zIHdoaWxlIHJlc29sdmluZyAnJXMnOyBsb29wIGluICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxlLCBlLnN0cmVycm9yKSkKKworICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkgYi9tZXRhL2xpYi9vZS9jbGFzc2V4dGVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTA3ZWNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvY2xhc3NleHRlbmQucHkKQEAgLTAsMCArMSwxMjAgQEAKK2NsYXNzIENsYXNzRXh0ZW5kZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXh0bmFtZSwgZCk6CisgICAgICAgIHNlbGYuZXh0bmFtZSA9IGV4dG5hbWUKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnBrZ3NfbWFwcGluZyA9IFtdCisKKyAgICBkZWYgZXh0ZW5kX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgia2VybmVsLSIpIG9yIG5hbWUgPT0gInZpcnR1YWwva2VybmVsIjoKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgicnRsZCIpOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgiLWNyb3Nzc2RrIik6CisgICAgICAgICAgICByZXR1cm4gbmFtZQorICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCItIiArIHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKCItIiArIHNlbGYuZXh0bmFtZSwgIiIpCisgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgidmlydHVhbC8iKToKKyAgICAgICAgICAgIHN1YnMgPSBuYW1lLnNwbGl0KCIvIiwgMSlbMV0KKyAgICAgICAgICAgIGlmIG5vdCBzdWJzLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gInZpcnR1YWwvIiArIHNlbGYuZXh0bmFtZSArICItIiArIHN1YnMKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dG5hbWUgKyAiLSIgKyBuYW1lCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgbWFwX3ZhcmlhYmxlKHNlbGYsIHZhcm5hbWUsIHNldHZhciA9IFRydWUpOgorICAgICAgICB2YXIgPSBzZWxmLmQuZ2V0VmFyKHZhcm5hbWUsIFRydWUpCisgICAgICAgIGlmIG5vdCB2YXI6CisgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgdmFyID0gdmFyLnNwbGl0KCkKKyAgICAgICAgbmV3dmFyID0gW10KKyAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgbmV3dmFyLmFwcGVuZChzZWxmLmV4dGVuZF9uYW1lKHYpKQorICAgICAgICBuZXdkYXRhID0gICIgIi5qb2luKG5ld3ZhcikKKyAgICAgICAgaWYgc2V0dmFyOgorICAgICAgICAgICAgc2VsZi5kLnNldFZhcih2YXJuYW1lLCBuZXdkYXRhKQorICAgICAgICByZXR1cm4gbmV3ZGF0YQorCisgICAgZGVmIG1hcF9yZWdleHBfdmFyaWFibGUoc2VsZiwgdmFybmFtZSwgc2V0dmFyID0gVHJ1ZSk6CisgICAgICAgIHZhciA9IHNlbGYuZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHZhcjoKKyAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICB2YXIgPSB2YXIuc3BsaXQoKQorICAgICAgICBuZXd2YXIgPSBbXQorICAgICAgICBmb3IgdiBpbiB2YXI6CisgICAgICAgICAgICBpZiB2LnN0YXJ0c3dpdGgoIl4iICsgc2VsZi5leHRuYW1lKToKKyAgICAgICAgICAgICAgICBuZXd2YXIuYXBwZW5kKHYpCisgICAgICAgICAgICBlbGlmIHYuc3RhcnRzd2l0aCgiXiIpOgorICAgICAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoIl4iICsgc2VsZi5leHRuYW1lICsgIi0iICsgdlsxOl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5ld3Zhci5hcHBlbmQoc2VsZi5leHRlbmRfbmFtZSh2KSkKKyAgICAgICAgbmV3ZGF0YSA9ICAiICIuam9pbihuZXd2YXIpCisgICAgICAgIGlmIHNldHZhcjoKKyAgICAgICAgICAgIHNlbGYuZC5zZXRWYXIodmFybmFtZSwgbmV3ZGF0YSkKKyAgICAgICAgcmV0dXJuIG5ld2RhdGEKKworICAgIGRlZiBtYXBfZGVwZW5kcyhzZWxmLCBkZXApOgorICAgICAgICBpZiBkZXAuZW5kc3dpdGgoKCItbmF0aXZlIiwgIi1uYXRpdmUtcnVudGltZSIpKSBvciAoJ25hdGl2ZXNkay0nIGluIGRlcCkgb3IgKCdjcm9zcy1jYW5hZGlhbicgaW4gZGVwKSBvciAoJy1jcm9zc3Nkay0nIGluIGRlcCk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIERvIG5vdCBleHRlbmQgZm9yIHRoYXQgYWxyZWFkeSBoYXZlIG11bHRpbGliIHByZWZpeAorICAgICAgICAgICAgdmFyID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFyOgorICAgICAgICAgICAgICAgIHZhciA9IHZhci5zcGxpdCgpCisgICAgICAgICAgICAgICAgZm9yIHYgaW4gdmFyOgorICAgICAgICAgICAgICAgICAgICBpZiBkZXAuc3RhcnRzd2l0aCh2KToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXAKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dGVuZF9uYW1lKGRlcCkKKworICAgIGRlZiBtYXBfZGVwZW5kc192YXJpYWJsZShzZWxmLCB2YXJuYW1lLCBzdWZmaXggPSAiIik6CisgICAgICAgICMgV2UgbmVlZCB0byBwcmVzZXJ2ZSBFWFRFTkRQS0dWIHNvIGl0IGNhbiBiZSBleHBhbmRlZCBjb3JyZWN0bHkgbGF0ZXIKKyAgICAgICAgaWYgc3VmZml4OgorICAgICAgICAgICAgdmFybmFtZSA9IHZhcm5hbWUgKyAiXyIgKyBzdWZmaXgKKyAgICAgICAgb3JpZyA9IHNlbGYuZC5nZXRWYXIoIkVYVEVORFBLR1YiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kLnNldFZhcigiRVhURU5EUEtHViIsICJFWFRFTkRQS0dWIikKKyAgICAgICAgZGVwcyA9IHNlbGYuZC5nZXRWYXIodmFybmFtZSwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IGRlcHM6CisgICAgICAgICAgICBzZWxmLmQuc2V0VmFyKCJFWFRFTkRQS0dWIiwgb3JpZykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkZXBzID0gYmIudXRpbHMuZXhwbG9kZV9kZXBfdmVyc2lvbnMyKGRlcHMpCisgICAgICAgIG5ld2RlcHMgPSB7fQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBuZXdkZXBzW3NlbGYubWFwX2RlcGVuZHMoZGVwKV0gPSBkZXBzW2RlcF0KKworICAgICAgICBzZWxmLmQuc2V0VmFyKHZhcm5hbWUsIGJiLnV0aWxzLmpvaW5fZGVwcyhuZXdkZXBzLCBGYWxzZSkucmVwbGFjZSgiRVhURU5EUEtHViIsICIke0VYVEVORFBLR1Z9IikpCisgICAgICAgIHNlbGYuZC5zZXRWYXIoIkVYVEVORFBLR1YiLCBvcmlnKQorCisgICAgZGVmIG1hcF9wYWNrYWdldmFycyhzZWxmKToKKyAgICAgICAgZm9yIHBrZyBpbiAoc2VsZi5kLmdldFZhcigiUEFDS0FHRVMiLCBUcnVlKS5zcGxpdCgpICsgWyIiXSk6CisgICAgICAgICAgICBzZWxmLm1hcF9kZXBlbmRzX3ZhcmlhYmxlKCJSREVQRU5EUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlJSRUNPTU1FTkRTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlNVR0dFU1RTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlBST1ZJREVTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUlJFUExBQ0VTIiwgcGtnKQorICAgICAgICAgICAgc2VsZi5tYXBfZGVwZW5kc192YXJpYWJsZSgiUkNPTkZMSUNUUyIsIHBrZykKKyAgICAgICAgICAgIHNlbGYubWFwX2RlcGVuZHNfdmFyaWFibGUoIlBLRyIsIHBrZykKKworICAgIGRlZiByZW5hbWVfcGFja2FnZXMoc2VsZik6CisgICAgICAgIGZvciBwa2cgaW4gKHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCk6CisgICAgICAgICAgICBpZiBwa2cuc3RhcnRzd2l0aChzZWxmLmV4dG5hbWUpOgorICAgICAgICAgICAgICAgc2VsZi5wa2dzX21hcHBpbmcuYXBwZW5kKFtwa2cuc3BsaXQoc2VsZi5leHRuYW1lICsgIi0iKVsxXSwgcGtnXSkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLnBrZ3NfbWFwcGluZy5hcHBlbmQoW3BrZywgc2VsZi5leHRlbmRfbmFtZShwa2cpXSkKKworICAgICAgICBzZWxmLmQuc2V0VmFyKCJQQUNLQUdFUyIsICIgIi5qb2luKFtyb3dbMV0gZm9yIHJvdyBpbiBzZWxmLnBrZ3NfbWFwcGluZ10pKQorCisgICAgZGVmIHJlbmFtZV9wYWNrYWdlX3ZhcmlhYmxlcyhzZWxmLCB2YXJpYWJsZXMpOgorICAgICAgICBmb3IgcGtnX21hcHBpbmcgaW4gc2VsZi5wa2dzX21hcHBpbmc6CisgICAgICAgICAgICBmb3Igc3VicyBpbiB2YXJpYWJsZXM6CisgICAgICAgICAgICAgICAgc2VsZi5kLnJlbmFtZVZhcigiJXNfJXMiICUgKHN1YnMsIHBrZ19tYXBwaW5nWzBdKSwgIiVzXyVzIiAlIChzdWJzLCBwa2dfbWFwcGluZ1sxXSkpCisKK2NsYXNzIE5hdGl2ZXNka0NsYXNzRXh0ZW5kZXIoQ2xhc3NFeHRlbmRlcik6CisgICAgZGVmIG1hcF9kZXBlbmRzKHNlbGYsIGRlcCk6CisgICAgICAgIGlmIGRlcC5zdGFydHN3aXRoKHNlbGYuZXh0bmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZGVwCisgICAgICAgIGlmIGRlcC5lbmRzd2l0aCgoIi1nY2MtaW5pdGlhbCIsICItZ2NjIiwgIi1nKysiKSk6CisgICAgICAgICAgICByZXR1cm4gZGVwICsgIi1jcm9zc3NkayIKKyAgICAgICAgZWxpZiBkZXAuZW5kc3dpdGgoKCItbmF0aXZlIiwgIi1uYXRpdmUtcnVudGltZSIpKSBvciAoJ25hdGl2ZXNkay0nIGluIGRlcCkgb3IgKCctY3Jvc3MtJyBpbiBkZXApIG9yICgnLWNyb3Nzc2RrLScgaW4gZGVwKToKKyAgICAgICAgICAgIHJldHVybiBkZXAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmV4dGVuZF9uYW1lKGRlcCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2NsYXNzdXRpbHMucHkgYi9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTg4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9jbGFzc3V0aWxzLnB5CkBAIC0wLDAgKzEsNDMgQEAKK2NsYXNzIENsYXNzUmVnaXN0cnkodHlwZSk6CisgICAgIiIiTWFpbnRhaW4gYSByZWdpc3RyeSBvZiBjbGFzc2VzLCBpbmRleGVkIGJ5IG5hbWUuCisKK05vdGUgdGhhdCB0aGlzIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIG5hbWVzIGJlIHVuaXF1ZSwgYXMgaXQgdXNlcworYSBkaWN0aW9uYXJ5IHRvIGhvbGQgdGhlIGNsYXNzZXMgYnkgbmFtZS4KKworVGhlIG5hbWUgaW4gdGhlIHJlZ2lzdHJ5IGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgJ25hbWUnIGF0dHJpYnV0ZSBvZiB0aGUKK2NsYXNzLCBhbmQgdGhlICdwcmlvcml0eScgYXR0cmlidXRlIGNvbnRyb2xzIHByaW9yaXR5LiBUaGUgcHJpb3JpdGl6ZWQoKQorbWV0aG9kIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgY2xhc3NlcyBpbiBwcmlvcml0eSBvcmRlci4KKworU3ViY2xhc3NlcyBvZiBDbGFzc1JlZ2lzdHJ5IG1heSBkZWZpbmUgYW4gJ2ltcGxlbWVudGVkJyBwcm9wZXJ0eSB0byBleGVydAorY29udHJvbCBvdmVyIHdoZXRoZXIgdGhlIGNsYXNzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJlZ2lzdHJ5IChlLmcuIHRvIGtlZXAKK2Fic3RyYWN0IGJhc2UgY2xhc3NlcyBvdXQgb2YgdGhlIHJlZ2lzdHJ5KS4iIiIKKyAgICBwcmlvcml0eSA9IDAKKyAgICBjbGFzcyBfX21ldGFjbGFzc19fKHR5cGUpOgorICAgICAgICAiIiJHaXZlIGVhY2ggQ2xhc3NSZWdpc3RyeSB0aGVpciBvd24gcmVnaXN0cnkiIiIKKyAgICAgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgICAgIGNscy5yZWdpc3RyeSA9IHt9CisgICAgICAgICAgICB0eXBlLl9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKQorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGF0dHJzKToKKyAgICAgICAgc3VwZXIoQ2xhc3NSZWdpc3RyeSwgY2xzKS5fX2luaXRfXyhuYW1lLCBiYXNlcywgYXR0cnMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBjbHMuaW1wbGVtZW50ZWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjbHMubmFtZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBjbHMubmFtZSA9IG5hbWUKKyAgICAgICAgY2xzLnJlZ2lzdHJ5W2Nscy5uYW1lXSA9IGNscworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHByaW9yaXRpemVkKHRjbHMpOgorICAgICAgICByZXR1cm4gc29ydGVkKHRjbHMucmVnaXN0cnkudmFsdWVzKCksCisgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSB2OiB2LnByaW9yaXR5LCByZXZlcnNlPVRydWUpCisKKyAgICBkZWYgdW5yZWdpc3RlcihjbHMpOgorICAgICAgICBmb3Iga2V5IGluIGNscy5yZWdpc3RyeS5rZXlzKCk6CisgICAgICAgICAgICBpZiBjbHMucmVnaXN0cnlba2V5XSBpcyBjbHM6CisgICAgICAgICAgICAgICAgZGVsIGNscy5yZWdpc3RyeVtrZXldCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9jb3B5X2J1aWxkc3lzdGVtLnB5IGIvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk1NzhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvY29weV9idWlsZHN5c3RlbS5weQpAQCAtMCwwICsxLDEwMSBAQAorIyBUaGlzIGNsYXNzIHNob3VsZCBwcm92aWRlIGVhc3kgYWNjZXNzIHRvIHRoZSBkaWZmZXJlbnQgYXNwZWN0cyBvZiB0aGUKKyMgYnVpbGRzeXN0ZW0gc3VjaCBhcyBsYXllcnMsIGJpdGJha2UgbG9jYXRpb24sIGV0Yy4KK2ltcG9ydCBzdGF0CitpbXBvcnQgc2h1dGlsCisKK2RlZiBfc21hcnRfY29weShzcmMsIGRlc3QpOgorICAgICMgc21hcnRfY29weSB3aWxsIGNob29zZSB0aGUgY29ycmVjdCBmdW5jdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKKyAgICAjIHNvdXJjZSBpcyBhIGZpbGUgb3IgYSBkaXJlY3RvcnkuCisgICAgbW9kZSA9IG9zLnN0YXQoc3JjKS5zdF9tb2RlCisgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgorICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjLCBkZXN0LCBzeW1saW5rcz1UcnVlKQorICAgIGVsc2U6CisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRlc3QpCisgICAgICAgIHNodXRpbC5jb3B5bW9kZShzcmMsIGRlc3QpCisKK2NsYXNzIEJ1aWxkU3lzdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYubGF5ZXJkaXJzID0gZC5nZXRWYXIoJ0JCTEFZRVJTJywgVHJ1ZSkuc3BsaXQoKQorCisgICAgZGVmIGNvcHlfYml0YmFrZV9hbmRfbGF5ZXJzKHNlbGYsIGRlc3RkaXIpOgorICAgICAgICAjIENvcHkgaW4gYWxsIG1ldGFkYXRhIGxheWVycyArIGJpdGJha2UgKGFzIHJlcG9zaXRvcmllcykKKyAgICAgICAgbGF5ZXJzX2NvcGllZCA9IFtdCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihkZXN0ZGlyKQorICAgICAgICBsYXllcnMgPSBsaXN0KHNlbGYubGF5ZXJkaXJzKQorCisgICAgICAgIGNvcmViYXNlID0gc2VsZi5kLmdldFZhcignQ09SRUJBU0UnLCBUcnVlKQorICAgICAgICBsYXllcnMuYXBwZW5kKGNvcmViYXNlKQorCisgICAgICAgIGNvcmViYXNlX2ZpbGVzID0gc2VsZi5kLmdldFZhcignQ09SRUJBU0VfRklMRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgICAgIGNvcmViYXNlX2ZpbGVzID0gW2NvcmViYXNlICsgJy8nICt4IGZvciB4IGluIGNvcmViYXNlX2ZpbGVzXQorICAgICAgICAjIE1ha2Ugc3VyZSBiaXRiYWtlIGdvZXMgaW4KKyAgICAgICAgYml0YmFrZV9kaXIgPSBiYi5fX2ZpbGVfXy5yc3BsaXQoJy8nLCAzKVswXQorICAgICAgICBjb3JlYmFzZV9maWxlcy5hcHBlbmQoYml0YmFrZV9kaXIpCisKKyAgICAgICAgZm9yIGxheWVyIGluIGxheWVyczoKKyAgICAgICAgICAgIGxheWVyY29uZiA9IG9zLnBhdGguam9pbihsYXllciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmNvbmYpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllcmNvbmYsICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5yZWFkbGluZSgpLnN0YXJ0c3dpdGgoIiMgIyMjIHdvcmtzcGFjZSBsYXllciBhdXRvLWdlbmVyYXRlZCBieSBkZXZ0b29sICMjIyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiU2tpcHBpbmcgbG9jYWwgd29ya3NwYWNlIGxheWVyICVzIiAlIGxheWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBJZiB0aGUgbGF5ZXIgd2FzIGFscmVhZHkgdW5kZXIgY29yZWJhc2UsIGxlYXZlIGl0IHRoZXJlCisgICAgICAgICAgICAjIHNpbmNlIGxheWVycyBzdWNoIGFzIG1ldGEgaGF2ZSBpc3N1ZXMgd2hlbiBtb3ZlZC4KKyAgICAgICAgICAgIGxheWVyZGVzdHBhdGggPSBkZXN0ZGlyCisgICAgICAgICAgICBpZiBjb3JlYmFzZSA9PSBvcy5wYXRoLmRpcm5hbWUobGF5ZXIpOgorICAgICAgICAgICAgICAgIGxheWVyZGVzdHBhdGggKz0gJy8nICsgb3MucGF0aC5iYXNlbmFtZShjb3JlYmFzZSkKKyAgICAgICAgICAgIGxheWVyZGVzdHBhdGggKz0gJy8nICsgb3MucGF0aC5iYXNlbmFtZShsYXllcikKKworICAgICAgICAgICAgbGF5ZXJfcmVsYXRpdmUgPSBvcy5wYXRoLnJlbHBhdGgobGF5ZXJkZXN0cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RkaXIpCisgICAgICAgICAgICBsYXllcnNfY29waWVkLmFwcGVuZChsYXllcl9yZWxhdGl2ZSkKKworICAgICAgICAgICAgIyBUcmVhdCBjb3JlYmFzZSBhcyBzcGVjaWFsIHNpbmNlIGl0IHR5cGljYWxseSB3aWxsIGNvbnRhaW4KKyAgICAgICAgICAgICMgYnVpbGQgZGlyZWN0b3JpZXMgb3Igb3RoZXIgY3VzdG9tIGl0ZW1zLgorICAgICAgICAgICAgaWYgY29yZWJhc2UgPT0gbGF5ZXI6CisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGxheWVyZGVzdHBhdGgpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gY29yZWJhc2VfZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZfYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGYpCisgICAgICAgICAgICAgICAgICAgIGRlc3RuYW1lID0gb3MucGF0aC5qb2luKGxheWVyZGVzdHBhdGgsIGZfYmFzZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIF9zbWFydF9jb3B5KGYsIGRlc3RuYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsYXllcmRlc3RwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiU2tpcHBpbmcgbGF5ZXIgJXMsIGFscmVhZHkgaGFuZGxlZCIgJSBsYXllcikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBfc21hcnRfY29weShsYXllciwgbGF5ZXJkZXN0cGF0aCkKKworICAgICAgICByZXR1cm4gbGF5ZXJzX2NvcGllZAorCitkZWYgZ2VuZXJhdGVfbG9ja2VkX3NpZ3Moc2lnZmlsZSwgZCk6CisgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShzaWdmaWxlKSkKKyAgICBkZXBkID0gZC5nZXRWYXIoJ0JCX1RBU0tERVBEQVRBJywgVHJ1ZSkKKyAgICB0YXNrcyA9IFsnJXMuJXMnICUgKHZbMl0sIHZbMV0pIGZvciB2IGluIGRlcGQuaXRlcnZhbHVlcygpXQorICAgIGJiLnBhcnNlLnNpZ2dlbi5kdW1wX2xvY2tlZHNpZ3Moc2lnZmlsZSwgdGFza3MpCisKK2RlZiBwcnVuZV9sb2NrZWRzaWdzKGFsbG93ZWRfdGFza3MsIGV4Y2x1ZGVkX3RhcmdldHMsIGxvY2tlZHNpZ3MsIHBydW5lZF9vdXRwdXQpOgorICAgIHdpdGggb3Blbihsb2NrZWRzaWdzLCAncicpIGFzIGluZmlsZToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShwcnVuZWRfb3V0cHV0KSkKKyAgICAgICAgd2l0aCBvcGVuKHBydW5lZF9vdXRwdXQsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGludmFsdWUgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5maWxlOgorICAgICAgICAgICAgICAgIGlmIGludmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xcXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gbGluZS5zdHJpcCgpLnNwbGl0KCc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0dmFsWzFdIGluIGFsbG93ZWRfdGFza3MgYW5kIG5vdCBzcGxpdHZhbFswXSBpbiBleGNsdWRlZF90YXJnZXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGludmFsdWUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdTSUdHRU5fTE9DS0VEU0lHUycpOgorICAgICAgICAgICAgICAgICAgICBpbnZhbHVlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGxpbmUpCisKK2RlZiBjcmVhdGVfbG9ja2VkX3NzdGF0ZV9jYWNoZShsb2NrZWRzaWdzLCBpbnB1dF9zc3RhdGVfY2FjaGUsIG91dHB1dF9zc3RhdGVfY2FjaGUsIGQsIGZpeGVkbHNic3RyaW5nPSIiKToKKyAgICBiYi5ub3RlKCdHZW5lcmF0aW5nIHNzdGF0ZS1jYWNoZS4uLicpCisKKyAgICBiYi5wcm9jZXNzLnJ1bigiZ2VuLWxvY2tlZHNpZy1jYWNoZSAlcyAlcyAlcyIgJSAobG9ja2Vkc2lncywgaW5wdXRfc3N0YXRlX2NhY2hlLCBvdXRwdXRfc3N0YXRlX2NhY2hlKSkKKyAgICBpZiBmaXhlZGxzYnN0cmluZzoKKyAgICAgICAgb3MucmVuYW1lKG91dHB1dF9zc3RhdGVfY2FjaGUgKyAnLycgKyBkLmdldFZhcignTkFUSVZFTFNCU1RSSU5HJywgVHJ1ZSksCisgICAgICAgIG91dHB1dF9zc3RhdGVfY2FjaGUgKyAnLycgKyBmaXhlZGxzYnN0cmluZykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2RhdGEucHkgYi9tZXRhL2xpYi9vZS9kYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzBlMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9kYXRhLnB5CkBAIC0wLDAgKzEsMTcgQEAKK2ltcG9ydCBvZS5tYWtldHlwZQorCitkZWYgdHlwZWRfdmFsdWUoa2V5LCBkKToKKyAgICAiIiJDb25zdHJ1Y3QgYSB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBtZXRhZGF0YSB2YXJpYWJsZSwgdXNpbmcgaXRzIGZsYWdzCisgICAgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIGFuZCBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3Rpb24uIiIiCisgICAgdmFyX3R5cGUgPSBkLmdldFZhckZsYWcoa2V5LCAndHlwZScpCisgICAgZmxhZ3MgPSBkLmdldFZhckZsYWdzKGtleSkKKyAgICBpZiBmbGFncyBpcyBub3QgTm9uZToKKyAgICAgICAgZmxhZ3MgPSBkaWN0KChmbGFnLCBkLmV4cGFuZCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICBmb3IgZmxhZywgdmFsdWUgaW4gZmxhZ3MuaXRlcml0ZW1zKCkpCisgICAgZWxzZToKKyAgICAgICAgZmxhZ3MgPSB7fQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gb2UubWFrZXR5cGUuY3JlYXRlKGQuZ2V0VmFyKGtleSwgVHJ1ZSkgb3IgJycsIHZhcl90eXBlLCAqKmZsYWdzKQorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKSwgZXhjOgorICAgICAgICBiYi5tc2cuZmF0YWwoIkRhdGEiLCAiJXM6ICVzIiAlIChrZXksIHN0cihleGMpKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weSBiL21ldGEvbGliL29lL2Rpc3Ryb19jaGVjay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWQ1YjBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvZGlzdHJvX2NoZWNrLnB5CkBAIC0wLDAgKzEsMzgzIEBACitkZWYgZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCk6CisgICAgIlJldHVybiBhbGwgdGhlIGhyZWYgbGlua3MgZm91bmQgb24gdGhlIHdlYiBsb2NhdGlvbiIKKworICAgIGltcG9ydCB1cmxsaWIsIHNnbWxsaWIKKyAgICAKKyAgICBjbGFzcyBMaW5rc1BhcnNlcihzZ21sbGliLlNHTUxQYXJzZXIpOgorICAgICAgICBkZWYgcGFyc2Uoc2VsZiwgcyk6CisgICAgICAgICAgICAiUGFyc2UgdGhlIGdpdmVuIHN0cmluZyAncycuIgorICAgICAgICAgICAgc2VsZi5mZWVkKHMpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcmJvc2U9MCk6CisgICAgICAgICAgICAiSW5pdGlhbGlzZSBhbiBvYmplY3QgcGFzc2luZyAndmVyYm9zZScgdG8gdGhlIHN1cGVyY2xhc3MuIgorICAgICAgICAgICAgc2dtbGxpYi5TR01MUGFyc2VyLl9faW5pdF9fKHNlbGYsIHZlcmJvc2UpCisgICAgICAgICAgICBzZWxmLmh5cGVybGlua3MgPSBbXQorICAgIAorICAgICAgICBkZWYgc3RhcnRfYShzZWxmLCBhdHRyaWJ1dGVzKToKKyAgICAgICAgICAgICJQcm9jZXNzIGEgaHlwZXJsaW5rIGFuZCBpdHMgJ2F0dHJpYnV0ZXMnLiIKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gImhyZWYiOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmh5cGVybGlua3MuYXBwZW5kKHZhbHVlLnN0cmlwKCcvJykpCisgICAgCisgICAgICAgIGRlZiBnZXRfaHlwZXJsaW5rcyhzZWxmKToKKyAgICAgICAgICAgICJSZXR1cm4gdGhlIGxpc3Qgb2YgaHlwZXJsaW5rcy4iCisgICAgICAgICAgICByZXR1cm4gc2VsZi5oeXBlcmxpbmtzCisKKyAgICBzb2NrID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgIHdlYnBhZ2UgPSBzb2NrLnJlYWQoKQorICAgIHNvY2suY2xvc2UoKQorCisgICAgbGlua3NwYXJzZXIgPSBMaW5rc1BhcnNlcigpCisgICAgbGlua3NwYXJzZXIucGFyc2Uod2VicGFnZSkKKyAgICByZXR1cm4gbGlua3NwYXJzZXIuZ2V0X2h5cGVybGlua3MoKQorCitkZWYgZmluZF9sYXRlc3RfbnVtZXJpY19yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgbnVtZXJpYyByZWxlYXNlIG9uIHRoZSBnaXZlbiB1cmwiCisgICAgbWF4PTAKKyAgICBtYXhzdHI9IiIKKyAgICBmb3IgbGluayBpbiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVsZWFzZSA9IGZsb2F0KGxpbmspCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHJlbGVhc2UgPSAwCisgICAgICAgIGlmIHJlbGVhc2UgPiBtYXg6CisgICAgICAgICAgICBtYXggPSByZWxlYXNlCisgICAgICAgICAgICBtYXhzdHIgPSBsaW5rCisgICAgcmV0dXJuIG1heHN0cgorCitkZWYgaXNfc3JjX3JwbShuYW1lKToKKyAgICAiQ2hlY2sgaWYgdGhlIGxpbmsgaXMgcG9pbnRpbmcgdG8gYSBzcmMucnBtIGZpbGUiCisgICAgaWYgbmFtZVstODpdID09ICIuc3JjLnJwbSI6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBwYWNrYWdlX25hbWVfZnJvbV9zcnBtKHNycG0pOgorICAgICJTdHJpcCBvdXQgdGhlIHBhY2thZ2UgbmFtZSBmcm9tIHRoZSBzcmMucnBtIGZpbGVuYW1lIgorICAgIHN0cmluZ3MgPSBzcnBtLnNwbGl0KCctJykKKyAgICBwYWNrYWdlX25hbWUgPSBzdHJpbmdzWzBdCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuIChzdHJpbmdzKSAtIDEpOgorICAgICAgICBzdHIgPSBzdHJpbmdzW2ldCisgICAgICAgIGlmIG5vdCBzdHJbMF0uaXNkaWdpdCgpOgorICAgICAgICAgICAgcGFja2FnZV9uYW1lICs9ICctJyArIHN0cgorICAgIHJldHVybiBwYWNrYWdlX25hbWUKKworZGVmIGNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX2xpc3QpOgorICAgICJSZW1vdmVzIG11bHRpcGxlIGVudHJpZXMgb2YgcGFja2FnZXMgYW5kIHNvcnRzIHRoZSBsaXN0IgorICAgIHNldCA9IHt9CisgICAgbWFwKHNldC5fX3NldGl0ZW1fXywgcGFja2FnZV9saXN0LCBbXSkKKyAgICByZXR1cm4gc2V0LmtleXMoKQorCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX21lZWdvX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG1lZWdvIGRpc3RybyIKKworICAgIHBhY2thZ2VfbmFtZXMgPSBbXQorICAgIHRyeToKKyAgICAgICAgZiA9IG9wZW4oIi90bXAvTWVlZ28tMS4xIiwgInIiKQorICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgcGFja2FnZV9uYW1lcy5hcHBlbmQobGluZVs6LTFdICsgIjoiICsgIm1haW4iKSAjIEFsc28gc3RyaXAgdGhlICdcbicgYXQgdGhlIGVuZAorICAgIGV4Y2VwdCBJT0Vycm9yOiBwYXNzCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiAiMS4wIiwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCh1cmwsIHNlY3Rpb24pOgorICAgICJSZXR1cm4gYSBzZWN0aW9uZWQgbGlzdCBvZiBwYWNrYWdlIG5hbWVzIGZyb20gYSBVUkwgbGlzdCIKKworICAgIGJiLm5vdGUoIlJlYWRpbmcgJXM6ICVzIiAlICh1cmwsIHNlY3Rpb24pKQorICAgIGxpbmtzID0gZ2V0X2xpbmtzX2Zyb21fdXJsKHVybCkKKyAgICBzcnBtcyA9IGZpbHRlcihpc19zcmNfcnBtLCBsaW5rcykKKyAgICBuYW1lc19saXN0ID0gbWFwKHBhY2thZ2VfbmFtZV9mcm9tX3NycG0sIHNycG1zKQorCisgICAgbmV3X3BrZ3MgPSBbXQorICAgIGZvciBwa2dzIGluIG5hbWVzX2xpc3Q6CisgICAgICAgbmV3X3BrZ3MuYXBwZW5kKHBrZ3MgKyAiOiIgKyBzZWN0aW9uKQorCisgICAgcmV0dXJuIG5ld19wa2dzCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX2ZlZG9yYV9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBmZWRvcmEgZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSgiaHR0cDovL2FyY2hpdmUuZmVkb3JhcHJvamVjdC5vcmcvcHViL2ZlZG9yYS9saW51eC9yZWxlYXNlcy8iKQorCisgICAgcGFja2FnZV9uYW1lcyA9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vYXJjaGl2ZS5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhL2xpbnV4L3JlbGVhc2VzLyVzL0ZlZG9yYS9zb3VyY2UvU1JQTVMvIiAlIGxhdGVzdCwgIm1haW4iKQorCisjICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5mZWRvcmEucmVkaGF0LmNvbS9wdWIvZmVkb3JhL2xpbnV4L3JlbGVhc2VzLyVzL0V2ZXJ5dGhpbmcvc291cmNlL1NQUk1TLyIgJSBsYXRlc3QsICJldmVyeXRoaW5nIikKKyAgICBwYWNrYWdlX25hbWVzICs9IGdldF9zb3VyY2VfcGFja2FnZV9saXN0X2Zyb21fdXJsKCJodHRwOi8vYXJjaGl2ZS5mZWRvcmFwcm9qZWN0Lm9yZy9wdWIvZmVkb3JhL2xpbnV4L3VwZGF0ZXMvJXMvU1JQTVMvIiAlIGxhdGVzdCwgInVwZGF0ZXMiKQorCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgICAgICAKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGdldF9sYXRlc3RfcmVsZWFzZWRfb3BlbnN1c2Vfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3Qgb3BlbnN1c2UgZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X251bWVyaWNfcmVsZWFzZSgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy9zb3VyY2UvZGlzdHJpYnV0aW9uLyIpCisKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kb3dubG9hZC5vcGVuc3VzZS5vcmcvc291cmNlL2Rpc3RyaWJ1dGlvbi8lcy9yZXBvL29zcy9zdXNlL3NyYy8iICUgbGF0ZXN0LCAibWFpbiIpCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rvd25sb2FkLm9wZW5zdXNlLm9yZy91cGRhdGUvJXMvcnBtL3NyYy8iICUgbGF0ZXN0LCAidXBkYXRlcyIpCisKKyAgICBwYWNrYWdlX2xpc3Q9Y2xlYW5fcGFja2FnZV9saXN0KHBhY2thZ2VfbmFtZXMpCisgICAgcmV0dXJuIGxhdGVzdCwgcGFja2FnZV9saXN0CisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX21hbmRyaXZhX3NvdXJjZV9wYWNrYWdlX2xpc3QoKToKKyAgICAiUmV0dXJucyBsaXN0IG9mIGFsbCB0aGUgbmFtZSBvcyBwYWNrYWdlcyBpbiB0aGUgbGF0ZXN0IG1hbmRyaXZhIGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF9udW1lcmljX3JlbGVhc2UoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvIikKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvbWFpbi9yZWxlYXNlLyIgJSBsYXRlc3QsICJtYWluIikKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfc291cmNlX3BhY2thZ2VfbGlzdF9mcm9tX3VybCgiaHR0cDovL2Rpc3RyaWItY29mZmVlLmlwc2wuanVzc2lldS5mci9wdWIvbGludXgvTWFuZHJpdmFMaW51eC9vZmZpY2lhbC8lcy9TUlBNUy9jb250cmliL3JlbGVhc2UvIiAlIGxhdGVzdCwgImNvbnRyaWIiKQorICAgIHBhY2thZ2VfbmFtZXMgKz0gZ2V0X3NvdXJjZV9wYWNrYWdlX2xpc3RfZnJvbV91cmwoImh0dHA6Ly9kaXN0cmliLWNvZmZlZS5pcHNsLmp1c3NpZXUuZnIvcHViL2xpbnV4L01hbmRyaXZhTGludXgvb2ZmaWNpYWwvJXMvU1JQTVMvbWFpbi91cGRhdGVzLyIgJSBsYXRlc3QsICJ1cGRhdGVzIikKKworICAgIHBhY2thZ2VfbGlzdD1jbGVhbl9wYWNrYWdlX2xpc3QocGFja2FnZV9uYW1lcykKKyAgICByZXR1cm4gbGF0ZXN0LCBwYWNrYWdlX2xpc3QKKworZGVmIGZpbmRfbGF0ZXN0X2RlYmlhbl9yZWxlYXNlKHVybCk6CisgICAgIkZpbmQgdGhlIGxhdGVzdCBsaXN0ZWQgZGViaWFuIHJlbGVhc2Ugb24gdGhlIGdpdmVuIHVybCIKKworICAgIHJlbGVhc2VzID0gW10KKyAgICBmb3IgbGluayBpbiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAgICAgaWYgbGlua1s6Nl0gPT0gIkRlYmlhbiI6CisgICAgICAgICAgICBpZiAnOycgbm90IGluIGxpbms6CisgICAgICAgICAgICAgICAgcmVsZWFzZXMuYXBwZW5kKGxpbmspCisgICAgcmVsZWFzZXMuc29ydCgpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmVsZWFzZXMucG9wKClbNjpdCisgICAgZXhjZXB0OgorICAgICAgICByZXR1cm4gIl9Ob3RGb3VuZF8iCisKK2RlZiBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCBzZWN0aW9uKToKKyAgICAiUmV0dXJuIHRoZSBsaXN0IG9mIHBhY2thZ2UtbmFtZXMgc3RvcmVkIGluIHRoZSBkZWJpYW4gc3R5bGUgU291cmNlcy5neiBmaWxlIgorICAgIGltcG9ydCB1cmxsaWIKKyAgICBzb2NrID0gdXJsbGliLnVybG9wZW4odXJsKQorICAgIGltcG9ydCB0ZW1wZmlsZQorICAgIHRtcGZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0nd2InLCBwcmVmaXg9J29lY29yZS4nLCBzdWZmaXg9Jy50bXAnLCBkZWxldGU9RmFsc2UpCisgICAgdG1wZmlsZW5hbWU9dG1wZmlsZS5uYW1lCisgICAgdG1wZmlsZS53cml0ZShzb2NrLnJlYWQoKSkKKyAgICBzb2NrLmNsb3NlKCkKKyAgICB0bXBmaWxlLmNsb3NlKCkKKyAgICBpbXBvcnQgZ3ppcAorICAgIGJiLm5vdGUoIlJlYWRpbmcgJXM6ICVzIiAlICh1cmwsIHNlY3Rpb24pKQorCisgICAgZiA9IGd6aXAub3Blbih0bXBmaWxlbmFtZSkKKyAgICBwYWNrYWdlX25hbWVzID0gW10KKyAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICBpZiBsaW5lWzo5XSA9PSAiUGFja2FnZTogIjoKKyAgICAgICAgICAgIHBhY2thZ2VfbmFtZXMuYXBwZW5kKGxpbmVbOTotMV0gKyAiOiIgKyBzZWN0aW9uKSAjIEFsc28gc3RyaXAgdGhlICdcbicgYXQgdGhlIGVuZAorICAgIG9zLnVubGluayh0bXBmaWxlbmFtZSkKKworICAgIHJldHVybiBwYWNrYWdlX25hbWVzCisKK2RlZiBnZXRfbGF0ZXN0X3JlbGVhc2VkX2RlYmlhbl9zb3VyY2VfcGFja2FnZV9saXN0KCk6CisgICAgIlJldHVybnMgbGlzdCBvZiBhbGwgdGhlIG5hbWUgb3MgcGFja2FnZXMgaW4gdGhlIGxhdGVzdCBkZWJpYW4gZGlzdHJvIgorICAgIGxhdGVzdCA9IGZpbmRfbGF0ZXN0X2RlYmlhbl9yZWxlYXNlKCJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzLyIpCisgICAgdXJsID0gImh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vZGlzdHMvc3RhYmxlL21haW4vc291cmNlL1NvdXJjZXMuZ3oiIAorICAgIHBhY2thZ2VfbmFtZXMgPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAibWFpbiIpCisjICAgIHVybCA9ICJodHRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL2Rpc3RzL3N0YWJsZS9jb250cmliL3NvdXJjZS9Tb3VyY2VzLmd6IiAKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAiY29udHJpYiIpCisgICAgdXJsID0gImh0dHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vZGlzdHMvc3RhYmxlLXByb3Bvc2VkLXVwZGF0ZXMvbWFpbi9zb3VyY2UvU291cmNlcy5neiIgCisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAidXBkYXRlcyIpCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgZmluZF9sYXRlc3RfdWJ1bnR1X3JlbGVhc2UodXJsKToKKyAgICAiRmluZCB0aGUgbGF0ZXN0IGxpc3RlZCB1YnVudHUgcmVsZWFzZSBvbiB0aGUgZ2l2ZW4gdXJsIgorICAgIHVybCArPSAiP0M9TTtPPUQiICMgRGVzY2VuZGluZyBTb3J0IGJ5IExhc3QgTW9kaWZpZWQKKyAgICBmb3IgbGluayBpbiBnZXRfbGlua3NfZnJvbV91cmwodXJsKToKKyAgICAgICAgaWYgbGlua1stODpdID09ICItdXBkYXRlcyI6CisgICAgICAgICAgICByZXR1cm4gbGlua1s6LThdCisgICAgcmV0dXJuICJfTm90Rm91bmRfIgorCitkZWYgZ2V0X2xhdGVzdF9yZWxlYXNlZF91YnVudHVfc291cmNlX3BhY2thZ2VfbGlzdCgpOgorICAgICJSZXR1cm5zIGxpc3Qgb2YgYWxsIHRoZSBuYW1lIG9zIHBhY2thZ2VzIGluIHRoZSBsYXRlc3QgdWJ1bnR1IGRpc3RybyIKKyAgICBsYXRlc3QgPSBmaW5kX2xhdGVzdF91YnVudHVfcmVsZWFzZSgiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvIikKKyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvbWFpbi9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyAgICBwYWNrYWdlX25hbWVzID0gZ2V0X2RlYmlhbl9zdHlsZV9zb3VyY2VfcGFja2FnZV9saXN0KHVybCwgIm1haW4iKQorIyAgICB1cmwgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvZGlzdHMvJXMvbXVsdGl2ZXJzZS9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAibXVsdGl2ZXJzZSIpCisjICAgIHVybCA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8lcy91bml2ZXJzZS9zb3VyY2UvU291cmNlcy5neiIgJSBsYXRlc3QKKyMgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAidW5pdmVyc2UiKQorICAgIHVybCA9ICJodHRwOi8vYXJjaGl2ZS51YnVudHUuY29tL3VidW50dS9kaXN0cy8lcy11cGRhdGVzL21haW4vc291cmNlL1NvdXJjZXMuZ3oiICUgbGF0ZXN0CisgICAgcGFja2FnZV9uYW1lcyArPSBnZXRfZGViaWFuX3N0eWxlX3NvdXJjZV9wYWNrYWdlX2xpc3QodXJsLCAidXBkYXRlcyIpCisgICAgcGFja2FnZV9saXN0PWNsZWFuX3BhY2thZ2VfbGlzdChwYWNrYWdlX25hbWVzKQorICAgIHJldHVybiBsYXRlc3QsIHBhY2thZ2VfbGlzdAorCitkZWYgY3JlYXRlX2Rpc3Ryb19wYWNrYWdlc19saXN0KGRpc3Ryb19jaGVja19kaXIpOgorICAgIHBrZ2xzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGlzdHJvX2NoZWNrX2RpciwgInBhY2thZ2VfbGlzdHMiKQorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyIChwa2dsc3RfZGlyKToKKyAgICAgICAgb3MubWFrZWRpcnMocGtnbHN0X2RpcikKKyAgICAjIGZpcnN0IGNsZWFyIG9sZCBzdHVmZgorICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIocGtnbHN0X2Rpcik6CisgICAgICAgIG9zLnVubGluayhvcy5wYXRoLmpvaW4ocGtnbHN0X2RpciwgZmlsZSkpCisgCisgICAgcGVyX2Rpc3Ryb19mdW5jdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJEZWJpYW4iLCBnZXRfbGF0ZXN0X3JlbGVhc2VkX2RlYmlhbl9zb3VyY2VfcGFja2FnZV9saXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIlVidW50dSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfdWJ1bnR1X3NvdXJjZV9wYWNrYWdlX2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiRmVkb3JhIiwgZ2V0X2xhdGVzdF9yZWxlYXNlZF9mZWRvcmFfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJPcGVuU3VTRSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfb3BlbnN1c2Vfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJNYW5kcml2YSIsIGdldF9sYXRlc3RfcmVsZWFzZWRfbWFuZHJpdmFfc291cmNlX3BhY2thZ2VfbGlzdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJNZWVnbyIsIGdldF9sYXRlc3RfcmVsZWFzZWRfbWVlZ29fc291cmNlX3BhY2thZ2VfbGlzdF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorICAgIGJlZ2luID0gZGF0ZXRpbWUubm93KCkKKyAgICBmb3IgZGlzdHJvIGluIHBlcl9kaXN0cm9fZnVuY3Rpb25zOgorICAgICAgICBuYW1lID0gZGlzdHJvWzBdCisgICAgICAgIHJlbGVhc2UsIHBhY2thZ2VfbGlzdCA9IGRpc3Ryb1sxXSgpCisgICAgICAgIGJiLm5vdGUoIkRpc3RybzogJXMsIExhdGVzdCBSZWxlYXNlOiAlcywgIyBzcmMgcGFja2FnZXM6ICVkIiAlIChuYW1lLCByZWxlYXNlLCBsZW4ocGFja2FnZV9saXN0KSkpCisgICAgICAgIHBhY2thZ2VfbGlzdF9maWxlID0gb3MucGF0aC5qb2luKHBrZ2xzdF9kaXIsIG5hbWUgKyAiLSIgKyByZWxlYXNlKQorICAgICAgICBmID0gb3BlbihwYWNrYWdlX2xpc3RfZmlsZSwgIncrYiIpCisgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZV9saXN0OgorICAgICAgICAgICAgZi53cml0ZShwa2cgKyAiXG4iKQorICAgICAgICBmLmNsb3NlKCkKKyAgICBlbmQgPSBkYXRldGltZS5ub3coKQorICAgIGRlbHRhID0gZW5kIC0gYmVnaW4KKyAgICBiYi5ub3RlKCJwYWNrYWdlX2xpc3QgZ2VuZXJhdGlvc24gdG9vayB0aGlzIG11Y2ggdGltZTogJWQgc2Vjb25kcyIgJSBkZWx0YS5zZWNvbmRzKQorCitkZWYgdXBkYXRlX2Rpc3Ryb19kYXRhKGRpc3Ryb19jaGVja19kaXIsIGRhdGV0aW1lKToKKyAgICAiIiIKKyAgICAgICAgSWYgZGlzdHJvIHBhY2thZ2VzIGxpc3QgZGF0YSBpcyBvbGQgdGhlbiByZWJ1aWxkIGl0LgorICAgICAgICBUaGUgb3BlcmF0aW9ucyBoYXMgdG8gYmUgcHJvdGVjdGVkIGJ5IGEgbG9jayBzbyB0aGF0CisgICAgICAgIG9ubHkgb25lIHRocmVhZCBwZXJmb3JtZXMgaXQgYXQgYSB0aW1lLgorICAgICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyIChkaXN0cm9fY2hlY2tfZGlyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSAoIk1ha2luZyBuZXcgZGlyZWN0b3J5OiAlcyIgJSBkaXN0cm9fY2hlY2tfZGlyKQorICAgICAgICAgICAgb3MubWFrZWRpcnMgKGRpc3Ryb19jaGVja19kaXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcycgJSAoZGlzdHJvX2NoZWNrX2RpcikpCisKKworICAgIGRhdGV0aW1lX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGlzdHJvX2NoZWNrX2RpciwgImJ1aWxkX2RhdGV0aW1lIikKKyAgICBzYXZlZF9kYXRldGltZSA9ICJfaW52YWxpZF8iCisgICAgaW1wb3J0IGZjbnRsCisgICAgdHJ5OgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZGF0ZXRpbWVfZmlsZSk6CisgICAgICAgICAgICBvcGVuKGRhdGV0aW1lX2ZpbGUsICd3K2InKS5jbG9zZSgpICMgdG91Y2ggdGhlIGZpbGUgc28gdGhhdCB0aGUgbmV4dCBvcGVuIHdvbid0IGZhaWwKKworICAgICAgICBmID0gb3BlbihkYXRldGltZV9maWxlLCAicitiIikKKyAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19FWCkKKyAgICAgICAgc2F2ZWRfZGF0ZXRpbWUgPSBmLnJlYWQoKQorICAgICAgICBpZiBzYXZlZF9kYXRldGltZVswOjhdICE9IGRhdGV0aW1lWzA6OF06CisgICAgICAgICAgICBiYi5ub3RlKCJUaGUgYnVpbGQgZGF0ZXRpbWUgZGlkIG5vdCBtYXRjaDogc2F2ZWQ6JXMgY3VycmVudDolcyIgJSAoc2F2ZWRfZGF0ZXRpbWUsIGRhdGV0aW1lKSkKKyAgICAgICAgICAgIGJiLm5vdGUoIlJlZ2VuZXJhdGluZyBkaXN0cm8gcGFja2FnZSBsaXN0cyIpCisgICAgICAgICAgICBjcmVhdGVfZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpcikKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgZi53cml0ZShkYXRldGltZSkKKworICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuYWJsZSB0byByZWFkL3dyaXRlIHRoaXMgZmlsZTogJXMnICUgKGRhdGV0aW1lX2ZpbGUpKQorICAgIGZpbmFsbHk6CisgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfVU4pCisgICAgICAgIGYuY2xvc2UoKQorIAorZGVmIGNvbXBhcmVfaW5fZGlzdHJvX3BhY2thZ2VzX2xpc3QoZGlzdHJvX2NoZWNrX2RpciwgZCk6CisgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZGlzdHJvX2NoZWNrX2Rpcik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiY29tcGFyZV9pbl9kaXN0cm9fcGFja2FnZXNfbGlzdDogaW52YWxpZCBkaXN0cm9fY2hlY2tfZGlyIHBhc3NlZCIpCisgICAgICAgIAorICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIHBrZ2xzdF9kaXIgPSBvcy5wYXRoLmpvaW4oZGlzdHJvX2NoZWNrX2RpciwgInBhY2thZ2VfbGlzdHMiKQorICAgIG1hdGNoaW5nX2Rpc3Ryb3MgPSBbXQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICByZWNpcGVfbmFtZSA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgYmIubm90ZSgiQ2hlY2tpbmc6ICVzIiAlIHBuKQorCisgICAgdHJpbV9kaWN0ID0gZGljdCh7Ii1uYXRpdmUiOiItbmF0aXZlIiwgIi1jcm9zcyI6Ii1jcm9zcyIsICItaW5pdGlhbCI6Ii1pbml0aWFsIn0pCisKKyAgICBpZiBwbi5maW5kKCItbmF0aXZlIikgIT0gLTE6CisgICAgICAgIHBuc3RyaXBwZWQgPSBwbi5zcGxpdCgiLW5hdGl2ZSIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFswXQorCisgICAgaWYgcG4uc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIm5hdGl2ZXNkay0iKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAicG4tIiArIHBuc3RyaXBwZWRbMV0gKyAiOiIgKyBkLmdldFZhcignT1ZFUlJJREVTJywgVHJ1ZSkpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICByZWNpcGVfbmFtZSA9IHBuc3RyaXBwZWRbMV0KKworICAgIGlmIHBuLmZpbmQoIi1jcm9zcyIpICE9IC0xOgorICAgICAgICBwbnN0cmlwcGVkID0gcG4uc3BsaXQoIi1jcm9zcyIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFswXQorCisgICAgaWYgcG4uZmluZCgiLWluaXRpYWwiKSAhPSAtMToKKyAgICAgICAgcG5zdHJpcHBlZCA9IHBuLnNwbGl0KCItaW5pdGlhbCIpCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ09WRVJSSURFUycsICJwbi0iICsgcG5zdHJpcHBlZFswXSArICI6IiArIGQuZ2V0VmFyKCdPVkVSUklERVMnLCBUcnVlKSkKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIHJlY2lwZV9uYW1lID0gcG5zdHJpcHBlZFswXQorCisgICAgYmIubm90ZSgiUmVjaXBlOiAlcyIgJSByZWNpcGVfbmFtZSkKKyAgICB0bXAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdESVNUUk9fUE5fQUxJQVMnLCBUcnVlKQorCisgICAgZGlzdHJvX2V4Y2VwdGlvbnMgPSBkaWN0KHsiT0UtQ29yZSI6J09FLUNvcmUnLCAiT3BlbmVkSGFuZCI6J09wZW5lZEhhbmQnLCAiSW50ZWwiOidJbnRlbCcsICJVcHN0cmVhbSI6J1Vwc3RyZWFtJywgIldpbmRyaXZlciI6J1dpbmRyaXZlcicsICJPU1BEVCI6J09TUERUIEFwcHJvdmVkJywgIlBva3kiOidwb2t5J30pCisKKyAgICBpZiB0bXA6CisgICAgICAgIGxpc3QgPSB0bXAuc3BsaXQoJyAnKQorICAgICAgICBmb3Igc3RyIGluIGxpc3Q6CisgICAgICAgICAgICBpZiBzdHIgYW5kIHN0ci5maW5kKCI9IikgPT0gLTEgYW5kIGRpc3Ryb19leGNlcHRpb25zW3N0cl06CisgICAgICAgICAgICAgICAgbWF0Y2hpbmdfZGlzdHJvcy5hcHBlbmQoc3RyKQorCisgICAgZGlzdHJvX3BuX2FsaWFzZXMgPSB7fQorICAgIGlmIHRtcDoKKyAgICAgICAgbGlzdCA9IHRtcC5zcGxpdCgnICcpCisgICAgICAgIGZvciBzdHIgaW4gbGlzdDoKKyAgICAgICAgICAgIGlmIHN0ci5maW5kKCI9IikgIT0gLTE6CisgICAgICAgICAgICAgICAgKGRpc3QsIHBuX2FsaWFzKSA9IHN0ci5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgZGlzdHJvX3BuX2FsaWFzZXNbZGlzdC5zdHJpcCgpLmxvd2VyKCldID0gcG5fYWxpYXMuc3RyaXAoKQorIAorICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIocGtnbHN0X2Rpcik6CisgICAgICAgIChkaXN0cm8sIGRpc3Ryb19yZWxlYXNlKSA9IGZpbGUuc3BsaXQoIi0iKQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4ocGtnbHN0X2RpciwgZmlsZSksICJyYiIpCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAocGtnLCBzZWN0aW9uKSA9IGxpbmUuc3BsaXQoIjoiKQorICAgICAgICAgICAgaWYgZGlzdHJvLmxvd2VyKCkgaW4gZGlzdHJvX3BuX2FsaWFzZXM6CisgICAgICAgICAgICAgICAgcG4gPSBkaXN0cm9fcG5fYWxpYXNlc1tkaXN0cm8ubG93ZXIoKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcG4gPSByZWNpcGVfbmFtZQorICAgICAgICAgICAgaWYgcG4gPT0gcGtnOgorICAgICAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKGRpc3RybyArICItIiArIHNlY3Rpb25bOi0xXSkgIyBzdHJpcCB0aGUgXG4gYXQgdGhlIGVuZAorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgCisgICAgaWYgdG1wICE9IE5vbmU6CisJbGlzdCA9IHRtcC5zcGxpdCgnICcpCisJZm9yIGl0ZW0gaW4gbGlzdDoKKyAgICAgICAgICAgIG1hdGNoaW5nX2Rpc3Ryb3MuYXBwZW5kKGl0ZW0pCisgICAgYmIubm90ZSgiTWF0Y2hpbmc6ICVzIiAlIG1hdGNoaW5nX2Rpc3Ryb3MpCisgICAgcmV0dXJuIG1hdGNoaW5nX2Rpc3Ryb3MKKworZGVmIGNyZWF0ZV9sb2dfZmlsZShkLCBsb2duYW1lKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGxvZ3BhdGggPSBkLmdldFZhcignTE9HX0RJUicsIFRydWUpCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGxvZ3BhdGgpCisgICAgbG9nZm4sIGxvZ3N1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQobG9nbmFtZSkKKyAgICBsb2dmaWxlID0gb3MucGF0aC5qb2luKGxvZ3BhdGgsICIlcy4lcyVzIiAlIChsb2dmbiwgZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSksIGxvZ3N1ZmZpeCkpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGxvZ2ZpbGUpOgorICAgICAgICAgICAgc2xvZ2ZpbGUgPSBvcy5wYXRoLmpvaW4obG9ncGF0aCwgbG9nbmFtZSkKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNsb2dmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNsb2dmaWxlKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCJ0b3VjaCAlcyIgJSBsb2dmaWxlLCBzaGVsbD1UcnVlKQorICAgICAgICAgICAgb3Muc3ltbGluayhsb2dmaWxlLCBzbG9nZmlsZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCdMT0dfRklMRScsIGxvZ2ZpbGUpCisgICAgcmV0dXJuIGxvZ2ZpbGUKKworCitkZWYgc2F2ZV9kaXN0cm9fY2hlY2tfcmVzdWx0KHJlc3VsdCwgZGF0ZXRpbWUsIHJlc3VsdF9maWxlLCBkKToKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbG9nZGlyID0gZC5nZXRWYXIoJ0xPR19ESVInLCBUcnVlKQorICAgIGlmIG5vdCBsb2dkaXI6CisgICAgICAgIGJiLmVycm9yKCJMT0dfRElSIHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLCBjYW4ndCB3cml0ZSB0aGUgZGlzdHJvX2NoZWNrIHJlc3VsdHMiKQorICAgICAgICByZXR1cm4KKyAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihsb2dkaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhsb2dkaXIpCisgICAgbGluZSA9IHBuCisgICAgZm9yIGkgaW4gcmVzdWx0OgorICAgICAgICBsaW5lID0gbGluZSArICIsIiArIGkKKyAgICBmID0gb3BlbihyZXN1bHRfZmlsZSwgImEiKQorICAgIGltcG9ydCBmY250bAorICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVgpCisgICAgZi5zZWVrKDAsIG9zLlNFRUtfRU5EKSAjIHNlZWsgdG8gdGhlIGVuZCBvZiBmaWxlCisgICAgZi53cml0ZShsaW5lICsgIlxuIikKKyAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQorICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvaW1hZ2UucHkgYi9tZXRhL2xpYi9vZS9pbWFnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzYxOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvaW1hZ2UucHkKQEAgLTAsMCArMSwzODYgQEAKK2Zyb20gb2UudXRpbHMgaW1wb3J0IGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworCisKK2RlZiBnZW5lcmF0ZV9pbWFnZShhcmcpOgorICAgICh0eXBlLCBzdWJpbWFnZXMsIGNyZWF0ZV9pbWdfY21kKSA9IGFyZworCisgICAgYmIubm90ZSgiUnVubmluZyBpbWFnZSBjcmVhdGlvbiBzY3JpcHQgZm9yICVzOiAlcyAuLi4iICUKKyAgICAgICAgICAgICh0eXBlLCBjcmVhdGVfaW1nX2NtZCkpCisKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNyZWF0ZV9pbWdfY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybigiRXJyb3I6IFRoZSBpbWFnZSBjcmVhdGlvbiBzY3JpcHQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgYmIubm90ZSgiU2NyaXB0IG91dHB1dDpcbiVzIiAlIG91dHB1dCkKKworICAgIHJldHVybiBOb25lCisKKworIiIiCitUaGlzIGNsYXNzIHdpbGwgaGVscCBjb21wdXRlIElNQUdFX0ZTVFlQRSBkZXBlbmRlbmNpZXMgYW5kIGdyb3VwIHRoZW0gaW4gYmF0Y2hlcwordGhhdCBjYW4gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwuCisKK1RoZSBuZXh0IGV4YW1wbGUgaXMgZm9yIGlsbHVzdHJhdGlvbiBwdXJwb3NlcywgaGlnaGx5IHVubGlrZWx5IHRvIGhhcHBlbiBpbiByZWFsIGxpZmUuCitJdCdzIGp1c3Qgb25lIG9mIHRoZSB0ZXN0IGNhc2VzIEkgdXNlZCB0byB0ZXN0IHRoZSBhbGdvcml0aG06CisKK0ZvcjoKK0lNQUdFX0ZTVFlQRVMgPSAiaTEgaTIgaTMgaTQgaTUiCitJTUFHRV9UWVBFREVQX2k0ID0gImkyIgorSU1BR0VfVFlQRURFUF9pNSA9ICJpNiBpNCIKK0lNQUdFX1RZUEVERVBfaTYgPSAiaTciCitJTUFHRV9UWVBFREVQX2k3ID0gImkyIgorCitXZSBnZXQgdGhlIGZvbGxvd2luZyBsaXN0IG9mIGJhdGNoZXMgdGhhdCBjYW4gYmUgZXhlY3V0ZWQgaW4gcGFyYWxsZWwsIGhhdmluZyB0aGUKK2RlcGVuZGVuY2llcyBzYXRpc2ZpZWQ6CisKK1tbJ2kxJywgJ2kzJywgJ2kyJ10sIFsnaTQnLCAnaTcnXSwgWydpNiddLCBbJ2k1J11dCisiIiIKK2NsYXNzIEltYWdlRGVwR3JhcGgob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5ncmFwaCA9IGRpY3QoKQorICAgICAgICBzZWxmLmRlcHNfYXJyYXkgPSBkaWN0KCkKKworICAgIGRlZiBfY29uc3RydWN0X2RlcF9ncmFwaChzZWxmLCBpbWFnZV9mc3R5cGVzKToKKyAgICAgICAgZ3JhcGggPSBkaWN0KCkKKworICAgICAgICBkZWYgYWRkX25vZGUobm9kZSk6CisgICAgICAgICAgICBiYXNlX3R5cGUgPSBzZWxmLl9pbWFnZV9iYXNlX3R5cGUobm9kZSkKKyAgICAgICAgICAgIGRlcHMgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRURFUF8nICsgbm9kZSwgVHJ1ZSkgb3IgIiIpCisgICAgICAgICAgICBiYXNlX2RlcHMgPSAoc2VsZi5kLmdldFZhcignSU1BR0VfVFlQRURFUF8nICsgYmFzZV90eXBlLCBUcnVlKSBvciAiIikKKyAgICAgICAgICAgIGlmIGRlcHMgIT0gIiIgb3IgYmFzZV9kZXBzICE9ICIiOgorICAgICAgICAgICAgICAgIGdyYXBoW25vZGVdID0gZGVwcworCisgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiBkZXBzLnNwbGl0KCkgKyBiYXNlX2RlcHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlcCBpbiBncmFwaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9ub2RlKGRlcCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZ3JhcGhbbm9kZV0gPSAiIgorCisgICAgICAgIGZvciBmc3R5cGUgaW4gaW1hZ2VfZnN0eXBlczoKKyAgICAgICAgICAgIGFkZF9ub2RlKGZzdHlwZSkKKworICAgICAgICByZXR1cm4gZ3JhcGgKKworICAgIGRlZiBfY2xlYW5fZ3JhcGgoc2VsZik6CisgICAgICAgICMgTGl2ZSBhbmQgVk1ESy9WREkgaW1hZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkIHZpYSBpbmhlcml0aW5nCisgICAgICAgICMgYmJjbGFzcyBhbmQgZG9lcyBub3QgZ2V0IHByb2Nlc3NlZCBoZXJlLiBSZW1vdmUgdGhlbSBmcm9tIHRoZSBmc3R5cGVzCisgICAgICAgICMgZ3JhcGguIFRoZWlyIGRlcGVuZGVuY2llcyBhcmUgYWxyZWFkeSBhZGRlZCwgc28gbm8gd29ycmllcyBoZXJlLgorICAgICAgICByZW1vdmVfbGlzdCA9IChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9UWVBFU19NQVNLRUQnLCBUcnVlKSBvciAiIikuc3BsaXQoKQorCisgICAgICAgIGZvciBpdGVtIGluIHJlbW92ZV9saXN0OgorICAgICAgICAgICAgc2VsZi5ncmFwaC5wb3AoaXRlbSwgTm9uZSkKKworICAgIGRlZiBfaW1hZ2VfYmFzZV90eXBlKHNlbGYsIHR5cGUpOgorICAgICAgICBjdHlwZXMgPSBzZWxmLmQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBpZiB0eXBlIGluIFsidm1kayIsICJ2ZGkiLCAicWNvdzIiLCAibGl2ZSIsICJpc28iLCAiaGRkaW1nIl06CisgICAgICAgICAgICB0eXBlID0gImV4dDQiCisgICAgICAgIGJhc2V0eXBlID0gdHlwZQorICAgICAgICBmb3IgY3R5cGUgaW4gY3R5cGVzOgorICAgICAgICAgICAgaWYgdHlwZS5lbmRzd2l0aCgiLiIgKyBjdHlwZSk6CisgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHJldHVybiBiYXNldHlwZQorCisgICAgZGVmIF9jb21wdXRlX2RlcGVuZGVuY2llcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybnMgZGljdCBvYmplY3Qgb2Ygbm9kZXMgd2l0aCBbbm9fb2ZfZGVwZW5kc19vbiwgbm9fb2ZfZGVwZW5kZWRfYnldCisgICAgICAgIGZvciBlYWNoIG5vZGUKKyAgICAgICAgIiIiCisgICAgICAgIGRlcHNfYXJyYXkgPSBkaWN0KCkKKyAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ncmFwaDoKKyAgICAgICAgICAgIGRlcHNfYXJyYXlbbm9kZV0gPSBbMCwgMF0KKworICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgZGVwcyA9IHNlbGYuZ3JhcGhbbm9kZV0uc3BsaXQoKQorICAgICAgICAgICAgZGVwc19hcnJheVtub2RlXVswXSArPSBsZW4oZGVwcykKKyAgICAgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBkZXBzX2FycmF5W2RlcF1bMV0gKz0gMQorCisgICAgICAgIHJldHVybiBkZXBzX2FycmF5CisKKyAgICBkZWYgX3NvcnRfZ3JhcGgoc2VsZik6CisgICAgICAgIHNvcnRlZF9saXN0ID0gW10KKyAgICAgICAgZ3JvdXAgPSBbXQorICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLmdyYXBoOgorICAgICAgICAgICAgaWYgbm9kZSBub3QgaW4gc2VsZi5kZXBzX2FycmF5OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlcGVuZHNfb24gPSBzZWxmLmRlcHNfYXJyYXlbbm9kZV1bMF0KKworICAgICAgICAgICAgaWYgZGVwZW5kc19vbiA9PSAwOgorICAgICAgICAgICAgICAgIGdyb3VwLmFwcGVuZChub2RlKQorCisgICAgICAgIGlmIGxlbihncm91cCkgPT0gMCBhbmQgbGVuKHNlbGYuZGVwc19hcnJheSkgIT0gMDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCJwb3NzaWJsZSBmc3R5cGUgY2lyY3VsYXIgZGVwZW5kZW5jeS4uLiIpCisKKyAgICAgICAgc29ydGVkX2xpc3QuYXBwZW5kKGdyb3VwKQorCisgICAgICAgICMgcmVtb3ZlIGFkZGVkIG5vZGVzIGZyb20gZGVwc19hcnJheQorICAgICAgICBmb3IgaXRlbSBpbiBncm91cDoKKyAgICAgICAgICAgIGZvciBub2RlIGluIHNlbGYuZ3JhcGg6CisgICAgICAgICAgICAgICAgaWYgaXRlbSBpbiBzZWxmLmdyYXBoW25vZGVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVwc19hcnJheVtub2RlXVswXSAtPSAxCisKKyAgICAgICAgICAgIHNlbGYuZGVwc19hcnJheS5wb3AoaXRlbSwgTm9uZSkKKworICAgICAgICBpZiBsZW4oc2VsZi5kZXBzX2FycmF5KToKKyAgICAgICAgICAgICMgcmVjdXJzaXZlIGNhbGwsIHRvIGZpbmQgdGhlIG5leHQgZ3JvdXAKKyAgICAgICAgICAgIHNvcnRlZF9saXN0ICs9IHNlbGYuX3NvcnRfZ3JhcGgoKQorCisgICAgICAgIHJldHVybiBzb3J0ZWRfbGlzdAorCisgICAgZGVmIGdyb3VwX2ZzdHlwZXMoc2VsZiwgaW1hZ2VfZnN0eXBlcyk6CisgICAgICAgIHNlbGYuZ3JhcGggPSBzZWxmLl9jb25zdHJ1Y3RfZGVwX2dyYXBoKGltYWdlX2ZzdHlwZXMpCisKKyAgICAgICAgc2VsZi5fY2xlYW5fZ3JhcGgoKQorCisgICAgICAgIHNlbGYuZGVwc19hcnJheSA9IHNlbGYuX2NvbXB1dGVfZGVwZW5kZW5jaWVzKCkKKworICAgICAgICBhbGx0eXBlcyA9IFtub2RlIGZvciBub2RlIGluIHNlbGYuZ3JhcGhdCisKKyAgICAgICAgcmV0dXJuIChhbGx0eXBlcywgc2VsZi5fc29ydF9ncmFwaCgpKQorCisKK2NsYXNzIEltYWdlKEltYWdlRGVwR3JhcGgpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc2VsZi5kID0gZAorCisgICAgICAgIHN1cGVyKEltYWdlLCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgZGVmIF9nZXRfcm9vdGZzX3NpemUoc2VsZik6CisgICAgICAgICIiImNvbXB1dGUgdGhlIHJvb3RmcyBzaXplIiIiCisgICAgICAgIHJvb3Rmc19hbGlnbm1lbnQgPSBpbnQoc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX0FMSUdOTUVOVCcsIFRydWUpKQorICAgICAgICBvdmVyaGVhZF9mYWN0b3IgPSBmbG9hdChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9PVkVSSEVBRF9GQUNUT1InLCBUcnVlKSkKKyAgICAgICAgcm9vdGZzX3JlcV9zaXplID0gaW50KHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGU19TSVpFJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19leHRyYV9zcGFjZSA9IGV2YWwoc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFJywgVHJ1ZSkpCisgICAgICAgIHJvb3Rmc19tYXhzaXplID0gc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTX01BWFNJWkUnLCBUcnVlKQorCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnZHUnLCAnLWtzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpXSkKKyAgICAgICAgc2l6ZV9rYiA9IGludChvdXRwdXQuc3BsaXQoKVswXSkKKyAgICAgICAgYmFzZV9zaXplID0gc2l6ZV9rYiAqIG92ZXJoZWFkX2ZhY3RvcgorICAgICAgICBiYXNlX3NpemUgPSAoYmFzZV9zaXplLCByb290ZnNfcmVxX3NpemUpW2Jhc2Vfc2l6ZSA8IHJvb3Rmc19yZXFfc2l6ZV0gKyBcCisgICAgICAgICAgICByb290ZnNfZXh0cmFfc3BhY2UKKworICAgICAgICBpZiBiYXNlX3NpemUgIT0gaW50KGJhc2Vfc2l6ZSk6CisgICAgICAgICAgICBiYXNlX3NpemUgPSBpbnQoYmFzZV9zaXplICsgMSkKKworICAgICAgICBiYXNlX3NpemUgKz0gcm9vdGZzX2FsaWdubWVudCAtIDEKKyAgICAgICAgYmFzZV9zaXplIC09IGJhc2Vfc2l6ZSAlIHJvb3Rmc19hbGlnbm1lbnQKKworICAgICAgICAjIENoZWNrIHRoZSByb290ZnMgc2l6ZSBhZ2FpbnN0IElNQUdFX1JPT1RGU19NQVhTSVpFIChpZiBzZXQpCisgICAgICAgIGlmIHJvb3Rmc19tYXhzaXplOgorICAgICAgICAgICAgcm9vdGZzX21heHNpemVfaW50ID0gaW50KHJvb3Rmc19tYXhzaXplKQorICAgICAgICAgICAgaWYgYmFzZV9zaXplID4gcm9vdGZzX21heHNpemVfaW50OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJUaGUgcm9vdGZzIHNpemUgJWQoSykgb3ZlcnJpZGVzIHRoZSBtYXggc2l6ZSAlZChLKSIgJSBcCisgICAgICAgICAgICAgICAgICAgIChiYXNlX3NpemUsIHJvb3Rmc19tYXhzaXplX2ludCkpCisKKyAgICAgICAgcmV0dXJuIGJhc2Vfc2l6ZQorCisgICAgZGVmIF9jcmVhdGVfc3ltbGlua3Moc2VsZiwgc3ViaW1hZ2VzKToKKyAgICAgICAgIiIiY3JlYXRlIHN5bWxpbmtzIHRvIHRoZSBuZXdseSBjcmVhdGVkIGltYWdlIiIiCisgICAgICAgIGRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgaW1nX25hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9OQU1FJywgVHJ1ZSkKKyAgICAgICAgbGlua19uYW1lID0gc2VsZi5kLmdldFZhcignSU1BR0VfTElOS19OQU1FJywgVHJ1ZSkKKyAgICAgICAgbWFuaWZlc3RfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX01BTklGRVNUJywgVHJ1ZSkKKworICAgICAgICBvcy5jaGRpcihkZXBsb3lfZGlyKQorCisgICAgICAgIGlmIGxpbmtfbmFtZToKKyAgICAgICAgICAgIGZvciB0eXBlIGluIHN1YmltYWdlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhpbWdfbmFtZSArICIucm9vdGZzLiIgKyB0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgZHN0ID0gbGlua19uYW1lICsgIi4iICsgdHlwZQorICAgICAgICAgICAgICAgICAgICBzcmMgPSBpbWdfbmFtZSArICIucm9vdGZzLiIgKyB0eXBlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIkNyZWF0aW5nIHN5bWxpbms6ICVzIC0+ICVzIiAlIChkc3QsIHNyYykpCisgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkc3QpCisKKyAgICAgICAgICAgIGlmIG1hbmlmZXN0X25hbWUgaXMgbm90IE5vbmUgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5leGlzdHMobWFuaWZlc3RfbmFtZSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgbm90IG9zLnBhdGguZXhpc3RzKGxpbmtfbmFtZSArICIubWFuaWZlc3QiKToKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguYmFzZW5hbWUobWFuaWZlc3RfbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX25hbWUgKyAiLm1hbmlmZXN0IikKKworICAgIGRlZiBfcmVtb3ZlX29sZF9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIiIicmVtb3ZlIHRoZSBzeW1saW5rcyB0byBvbGQgYmluYXJpZXMiIiIKKworICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKToKKyAgICAgICAgICAgIGRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKyAgICAgICAgICAgIGZvciBpbWcgaW4gb3MubGlzdGRpcihkZXBsb3lfZGlyKToKKyAgICAgICAgICAgICAgICBpZiBpbWcuZmluZChzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5LX05BTUUnLCBUcnVlKSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgaW1nID0gb3MucGF0aC5qb2luKGRlcGxveV9kaXIsIGltZykKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoaW1nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JNX09MRF9JTUFHRScsIFRydWUpID09ICIxIiBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLnJlYWxwYXRoKGltZykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShvcy5wYXRoLnJlYWxwYXRoKGltZykpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShpbWcpCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwganVzdCBmaWx0ZXIgb3V0IHRoZSBjb21wcmVzc2VkIGltYWdlIHR5cGVzIGZyb20gdGhlCisgICAgZnN0eXBlIGdyb3VwcyByZXR1cm5pbmcgYSAoZmlsdGVyZWRfZnN0eXBlX2dyb3VwcywgY2ltYWdlcykgdHVwbGUuCisgICAgIiIiCisgICAgZGVmIF9maWx0ZXJfb3V0X2NvbW1wcmVzc2VkKHNlbGYsIGZzdHlwZV9ncm91cHMpOgorICAgICAgICBjdHlwZXMgPSBzZWxmLmQuZ2V0VmFyKCdDT01QUkVTU0lPTlRZUEVTJywgVHJ1ZSkuc3BsaXQoKQorICAgICAgICBjaW1hZ2VzID0ge30KKworICAgICAgICBmaWx0ZXJlZF9ncm91cHMgPSBbXQorICAgICAgICBmb3IgZ3JvdXAgaW4gZnN0eXBlX2dyb3VwczoKKyAgICAgICAgICAgIGZpbHRlcmVkX2dyb3VwID0gW10KKyAgICAgICAgICAgIGZvciB0eXBlIGluIGdyb3VwOgorICAgICAgICAgICAgICAgIGJhc2V0eXBlID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBjdHlwZSBpbiBjdHlwZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUuZW5kc3dpdGgoIi4iICsgY3R5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZXR5cGUgPSB0eXBlWzotbGVuKCIuIiArIGN0eXBlKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJhc2V0eXBlIG5vdCBpbiBmaWx0ZXJlZF9ncm91cDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cC5hcHBlbmQoYmFzZXR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBiYXNldHlwZSBub3QgaW4gY2ltYWdlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW1hZ2VzW2Jhc2V0eXBlXSA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdHlwZSBub3QgaW4gY2ltYWdlc1tiYXNldHlwZV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ltYWdlc1tiYXNldHlwZV0uYXBwZW5kKGN0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYmFzZXR5cGUgYW5kIHR5cGUgbm90IGluIGZpbHRlcmVkX2dyb3VwOgorICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZF9ncm91cC5hcHBlbmQodHlwZSkKKworICAgICAgICAgICAgZmlsdGVyZWRfZ3JvdXBzLmFwcGVuZChmaWx0ZXJlZF9ncm91cCkKKworICAgICAgICByZXR1cm4gKGZpbHRlcmVkX2dyb3VwcywgY2ltYWdlcykKKworICAgIGRlZiBfZ2V0X2ltYWdlX3R5cGVzKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIGEgKHR5cGVzLCBjaW1hZ2VzKSB0dXBsZSIiIgorCisgICAgICAgIGFsbHR5cGVzLCBmc3R5cGVfZ3JvdXBzID0gc2VsZi5ncm91cF9mc3R5cGVzKHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKS5zcGxpdCgpKQorCisgICAgICAgIGZpbHRlcmVkX2dyb3VwcywgY2ltYWdlcyA9IHNlbGYuX2ZpbHRlcl9vdXRfY29tbXByZXNzZWQoZnN0eXBlX2dyb3VwcykKKworICAgICAgICByZXR1cm4gKGFsbHR5cGVzLCBmaWx0ZXJlZF9ncm91cHMsIGNpbWFnZXMpCisKKyAgICBkZWYgX3dyaXRlX3NjcmlwdChzZWxmLCB0eXBlLCBjbWRzKToKKyAgICAgICAgdGVtcGRpciA9IHNlbGYuZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgICAgICBzY3JpcHRfbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAiY3JlYXRlX2ltYWdlLiIgKyB0eXBlKQorICAgICAgICByb290ZnNfc2l6ZSA9IHNlbGYuX2dldF9yb290ZnNfc2l6ZSgpCisKKyAgICAgICAgc2VsZi5kLnNldFZhcignaW1nX2NyZWF0aW9uX2Z1bmMnLCAnXG4nLmpvaW4oY21kcykpCisgICAgICAgIHNlbGYuZC5zZXRWYXJGbGFnKCdpbWdfY3JlYXRpb25fZnVuYycsICdmdW5jJywgMSkKKyAgICAgICAgc2VsZi5kLnNldFZhckZsYWcoJ2ltZ19jcmVhdGlvbl9mdW5jJywgJ2Zha2Vyb290JywgMSkKKyAgICAgICAgc2VsZi5kLnNldFZhcignUk9PVEZTX1NJWkUnLCBzdHIocm9vdGZzX3NpemUpKQorCisgICAgICAgIHdpdGggb3BlbihzY3JpcHRfbmFtZSwgIncrIikgYXMgc2NyaXB0OgorICAgICAgICAgICAgc2NyaXB0LndyaXRlKCIlcyIgJSBiYi5idWlsZC5zaGVsbF90cmFwX2NvZGUoKSkKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiZXhwb3J0IFJPT1RGU19TSVpFPSVkXG4iICUgcm9vdGZzX3NpemUpCisgICAgICAgICAgICBiYi5kYXRhLmVtaXRfZnVuYygnaW1nX2NyZWF0aW9uX2Z1bmMnLCBzY3JpcHQsIHNlbGYuZCkKKyAgICAgICAgICAgIHNjcmlwdC53cml0ZSgiaW1nX2NyZWF0aW9uX2Z1bmNcbiIpCisKKyAgICAgICAgb3MuY2htb2Qoc2NyaXB0X25hbWUsIDA3NzUpCisKKyAgICAgICAgcmV0dXJuIHNjcmlwdF9uYW1lCisKKyAgICBkZWYgX2dldF9pbWFnZWNtZHMoc2VsZik6CisgICAgICAgIG9sZF9vdmVycmlkZXMgPSBzZWxmLmQuZ2V0VmFyKCdPVkVSUklERVMnLCAwKQorCisgICAgICAgIGFsbHR5cGVzLCBmc3R5cGVfZ3JvdXBzLCBjaW1hZ2VzID0gc2VsZi5fZ2V0X2ltYWdlX3R5cGVzKCkKKworICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzID0gW10KKworICAgICAgICBiYi5ub3RlKCJUaGUgaW1hZ2UgY3JlYXRpb24gZ3JvdXBzIGFyZTogJXMiICUgc3RyKGZzdHlwZV9ncm91cHMpKQorICAgICAgICBmb3IgZnN0eXBlX2dyb3VwIGluIGZzdHlwZV9ncm91cHM6CisgICAgICAgICAgICBpbWFnZV9jbWRzID0gW10KKyAgICAgICAgICAgIGZvciB0eXBlIGluIGZzdHlwZV9ncm91cDoKKyAgICAgICAgICAgICAgICBjbWRzID0gW10KKyAgICAgICAgICAgICAgICBzdWJpbWFnZXMgPSBbXQorCisgICAgICAgICAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KHNlbGYuZCkKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdPVkVSUklERVMnLCAnJXM6JXMnICUgKHR5cGUsIG9sZF9vdmVycmlkZXMpKQorICAgICAgICAgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ3R5cGUnLCB0eXBlKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfY21kID0gbG9jYWxkYXRhLmdldFZhcigiSU1BR0VfQ01EIiwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBpbWFnZV9jbWQ6CisgICAgICAgICAgICAgICAgICAgIGNtZHMuYXBwZW5kKCJcdCIgKyBpbWFnZV9jbWQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIk5vIElNQUdFX0NNRCBkZWZpbmVkIGZvciBJTUFHRV9GU1RZUEVTIGVudHJ5ICclcycgLSBwb3NzaWJseSBpbnZhbGlkIHR5cGUgbmFtZSBvciBtaXNzaW5nIHN1cHBvcnQgY2xhc3MiICUgdHlwZSkKKyAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdGNkICR7REVQTE9ZX0RJUl9JTUFHRX0iKSkKKworICAgICAgICAgICAgICAgIGlmIHR5cGUgaW4gY2ltYWdlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGN0eXBlIGluIGNpbWFnZXNbdHlwZV06CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZCgiXHQiICsgbG9jYWxkYXRhLmdldFZhcigiQ09NUFJFU1NfQ01EXyIgKyBjdHlwZSwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZXMuYXBwZW5kKHR5cGUgKyAiLiIgKyBjdHlwZSkKKworICAgICAgICAgICAgICAgIGlmIHR5cGUgbm90IGluIGFsbHR5cGVzOgorICAgICAgICAgICAgICAgICAgICBjbWRzLmFwcGVuZChsb2NhbGRhdGEuZXhwYW5kKCJcdHJtICR7SU1BR0VfTkFNRX0ucm9vdGZzLiR7dHlwZX0iKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdWJpbWFnZXMuYXBwZW5kKHR5cGUpCisKKyAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX3dyaXRlX3NjcmlwdCh0eXBlLCBjbWRzKQorCisgICAgICAgICAgICAgICAgaW1hZ2VfY21kcy5hcHBlbmQoKHR5cGUsIHN1YmltYWdlcywgc2NyaXB0X25hbWUpKQorCisgICAgICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzLmFwcGVuZChpbWFnZV9jbWRzKQorCisgICAgICAgIHJldHVybiBpbWFnZV9jbWRfZ3JvdXBzCisKKyAgICBkZWYgX3dyaXRlX3dpY19lbnYoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdXNlZCBieSB3aWMKKyAgICAgICAgdG8gdG1wL3N5c3Jvb3RzLzxtYWNoaW5lPi9pbWdkYXRhLzxpbWFnZT4uZW52CisgICAgICAgICIiIgorICAgICAgICBzdGRpciA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIFRydWUpCisgICAgICAgIG91dGRpciA9IG9zLnBhdGguam9pbihzdGRpciwgJ2ltZ2RhdGEnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3V0ZGlyKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKG91dGRpcikKKyAgICAgICAgYmFzZW5hbWUgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9CQVNFTkFNRScsIFRydWUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4ob3V0ZGlyLCBiYXNlbmFtZSkgKyAnLmVudicsICd3JykgYXMgZW52ZjoKKyAgICAgICAgICAgIGZvciB2YXIgaW4gc2VsZi5kLmdldFZhcignV0lDVkFSUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgZW52Zi53cml0ZSgnJXM9IiVzIlxuJyAlICh2YXIsIHZhbHVlLnN0cmlwKCkpKQorCisgICAgZGVmIGNyZWF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiIyMjIyMjIEdlbmVyYXRlIGltYWdlcyAjIyMjIyMjIikKKyAgICAgICAgcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoIklNQUdFX1BSRVBST0NFU1NfQ09NTUFORCIsIFRydWUpCisgICAgICAgIHBvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcigiSU1BR0VfUE9TVFBST0NFU1NfQ09NTUFORCIsIFRydWUpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLl9yZW1vdmVfb2xkX3N5bWxpbmtzKCkKKworICAgICAgICBpbWFnZV9jbWRfZ3JvdXBzID0gc2VsZi5fZ2V0X2ltYWdlY21kcygpCisKKyAgICAgICAgc2VsZi5fd3JpdGVfd2ljX2VudigpCisKKyAgICAgICAgZm9yIGltYWdlX2NtZHMgaW4gaW1hZ2VfY21kX2dyb3VwczoKKyAgICAgICAgICAgICMgY3JlYXRlIHRoZSBpbWFnZXMgaW4gcGFyYWxsZWwKKyAgICAgICAgICAgIG5wcm9jID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBwb29sID0gYmIudXRpbHMubXVsdGlwcm9jZXNzaW5ncG9vbChucHJvYykKKyAgICAgICAgICAgIHJlc3VsdHMgPSBsaXN0KHBvb2wuaW1hcChnZW5lcmF0ZV9pbWFnZSwgaW1hZ2VfY21kcykpCisgICAgICAgICAgICBwb29sLmNsb3NlKCkKKyAgICAgICAgICAgIHBvb2wuam9pbigpCisKKyAgICAgICAgICAgIGZvciByZXN1bHQgaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKHJlc3VsdCkKKworICAgICAgICAgICAgZm9yIGltYWdlX3R5cGUsIHN1YmltYWdlcywgc2NyaXB0IGluIGltYWdlX2NtZHM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiQ3JlYXRpbmcgc3ltbGlua3MgZm9yICVzIGltYWdlIC4uLiIgJSBpbWFnZV90eXBlKQorICAgICAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9zeW1saW5rcyhzdWJpbWFnZXMpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF9wcm9jZXNzX2NtZHMpCisKKworZGVmIGNyZWF0ZV9pbWFnZShkKToKKyAgICBJbWFnZShkKS5jcmVhdGUoKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIEltYWdlIGNyZWF0aW9uIGNhbiBiZSBjYWxsZWQgaW5kZXBlbmRlbnQgZnJvbSBiaXRiYWtlIGVudmlyb25tZW50LgorICAgICIiIgorICAgICIiIgorICAgIFRCRAorICAgICIiIgpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvbGljZW5zZS5weSBiL21ldGEvbGliL29lL2xpY2Vuc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmNjYxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL2xpY2Vuc2UucHkKQEAgLTAsMCArMSwyMTcgQEAKKyMgdmk6c3RzPTQ6c3c9NDpldAorIiIiQ29kZSBmb3IgcGFyc2luZyBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmdzIiIiCisKK2ltcG9ydCBhc3QKK2ltcG9ydCByZQorZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoY2FzZSBhcyBmbm1hdGNoCisKK2RlZiBsaWNlbnNlX29rKGxpY2Vuc2UsIGRvbnRfd2FudF9saWNlbnNlcyk6CisgICAgIiIiIFJldHVybiBGYWxzZSBpZiBMaWNlbnNlIGV4aXN0IGluIGRvbnRfd2FudF9saWNlbnNlcyBlbHNlIFRydWUgIiIiCisgICAgZm9yIGR3bCBpbiBkb250X3dhbnRfbGljZW5zZXM6CisgICAgICAgICMgSWYgeW91IHdhbnQgdG8gZXhjbHVkZSBsaWNlbnNlIG5hbWVkIGdlbmVyaWNhbGx5ICdYJywgd2UKKyAgICAgICAgIyBzdXJlbHkgd2FudCB0byBleGNsdWRlICdYKycgYXMgd2VsbC4gIEluIGNvbnNlcXVlbmNlLCB3ZQorICAgICAgICAjIHdpbGwgZXhjbHVkZSBhIHRyYWlsaW5nICcrJyBjaGFyYWN0ZXIgZnJvbSBMSUNFTlNFIGluCisgICAgICAgICMgY2FzZSBJTkNPTVBBVElCTEVfTElDRU5TRSBpcyBub3QgYSAnWCsnIGxpY2Vuc2UuCisgICAgICAgIGxpYyA9IGxpY2Vuc2UKKyAgICAgICAgaWYgbm90IHJlLnNlYXJjaCgnXCskJywgZHdsKToKKyAgICAgICAgICAgIGxpYyA9IHJlLnN1YignXCsnLCAnJywgbGljZW5zZSkKKyAgICAgICAgaWYgZm5tYXRjaChsaWMsIGR3bCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBMaWNlbnNlRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIExpY2Vuc2VTeW50YXhFcnJvcihMaWNlbnNlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaWNlbnNlc3RyLCBleGMpOgorICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgPSBsaWNlbnNlc3RyCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIExpY2Vuc2VFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiZXJyb3IgaW4gJyVzJzogJXMiICUgKHNlbGYubGljZW5zZXN0ciwgc2VsZi5leGMpCisKK2NsYXNzIEludmFsaWRMaWNlbnNlKExpY2Vuc2VFcnJvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpY2Vuc2UpOgorICAgICAgICBzZWxmLmxpY2Vuc2UgPSBsaWNlbnNlCisgICAgICAgIExpY2Vuc2VFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGxpY2Vuc2UgJyVzJyIgJSBzZWxmLmxpY2Vuc2UKKworbGljZW5zZV9vcGVyYXRvcl9jaGFycyA9ICcmfCgpICcKK2xpY2Vuc2Vfb3BlcmF0b3IgPSByZS5jb21waWxlKCcoWycgKyBsaWNlbnNlX29wZXJhdG9yX2NoYXJzICsgJ10pJykKK2xpY2Vuc2VfcGF0dGVybiA9IHJlLmNvbXBpbGUoJ1thLXpBLVowLTkuK19cLV0rJCcpCisKK2NsYXNzIExpY2Vuc2VWaXNpdG9yKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgIiIiR2V0IGVsZW1lbnRzIGJhc2VkIG9uIE9wZW5FbWJlZGRlZCBsaWNlbnNlIHN0cmluZ3MiIiIKKyAgICBkZWYgZ2V0X2VsZW1lbnRzKHNlbGYsIGxpY2Vuc2VzdHIpOgorICAgICAgICBuZXdfZWxlbWVudHMgPSBbXQorICAgICAgICBlbGVtZW50cyA9IGZpbHRlcihsYW1iZGEgeDogeC5zdHJpcCgpLCBsaWNlbnNlX29wZXJhdG9yLnNwbGl0KGxpY2Vuc2VzdHIpKQorICAgICAgICBmb3IgcG9zLCBlbGVtZW50IGluIGVudW1lcmF0ZShlbGVtZW50cyk6CisgICAgICAgICAgICBpZiBsaWNlbnNlX3BhdHRlcm4ubWF0Y2goZWxlbWVudCk6CisgICAgICAgICAgICAgICAgaWYgcG9zID4gMCBhbmQgbGljZW5zZV9wYXR0ZXJuLm1hdGNoKGVsZW1lbnRzW3Bvcy0xXSk6CisgICAgICAgICAgICAgICAgICAgIG5ld19lbGVtZW50cy5hcHBlbmQoJyYnKQorICAgICAgICAgICAgICAgIGVsZW1lbnQgPSAnIicgKyBlbGVtZW50ICsgJyInCisgICAgICAgICAgICBlbGlmIG5vdCBsaWNlbnNlX29wZXJhdG9yLm1hdGNoKGVsZW1lbnQpOgorICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRMaWNlbnNlKGVsZW1lbnQpCisgICAgICAgICAgICBuZXdfZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpCisKKyAgICAgICAgcmV0dXJuIG5ld19lbGVtZW50cworCisgICAgIiIiU3ludGF4IHRyZWUgdmlzaXRvciB3aGljaCBjYW4gYWNjZXB0IGVsZW1lbnRzIHByZXZpb3VzbHkgZ2VuZXJhdGVkIHdpdGgKKyAgICBPcGVuRW1iZWRkZWQgbGljZW5zZSBzdHJpbmciIiIKKyAgICBkZWYgdmlzaXRfZWxlbWVudHMoc2VsZiwgZWxlbWVudHMpOgorICAgICAgICBzZWxmLnZpc2l0KGFzdC5wYXJzZSgnICcuam9pbihlbGVtZW50cykpKQorCisgICAgIiIiU3ludGF4IHRyZWUgdmlzaXRvciB3aGljaCBjYW4gYWNjZXB0IE9wZW5FbWJlZGRlZCBsaWNlbnNlIHN0cmluZ3MiIiIKKyAgICBkZWYgdmlzaXRfc3RyaW5nKHNlbGYsIGxpY2Vuc2VzdHIpOgorICAgICAgICBzZWxmLnZpc2l0X2VsZW1lbnRzKHNlbGYuZ2V0X2VsZW1lbnRzKGxpY2Vuc2VzdHIpKQorCitjbGFzcyBGbGF0dGVuVmlzaXRvcihMaWNlbnNlVmlzaXRvcik6CisgICAgIiIiRmxhdHRlbiBhIGxpY2Vuc2UgdHJlZSAocGFyc2VkIGZyb20gYSBzdHJpbmcpIGJ5IHNlbGVjdGluZyBvbmUgb2YgZWFjaAorICAgIHNldCBvZiBPUiBvcHRpb25zLCBpbiB0aGUgd2F5IHRoZSB1c2VyIHNwZWNpZmllcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaG9vc2VfbGljZW5zZXMpOgorICAgICAgICBzZWxmLmNob29zZV9saWNlbnNlcyA9IGNob29zZV9saWNlbnNlcworICAgICAgICBzZWxmLmxpY2Vuc2VzID0gW10KKyAgICAgICAgTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdF9TdHIoc2VsZiwgbm9kZSk6CisgICAgICAgIHNlbGYubGljZW5zZXMuYXBwZW5kKG5vZGUucykKKworICAgIGRlZiB2aXNpdF9CaW5PcChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLm9wLCBhc3QuQml0T3IpOgorICAgICAgICAgICAgbGVmdCA9IEZsYXR0ZW5WaXNpdG9yKHNlbGYuY2hvb3NlX2xpY2Vuc2VzKQorICAgICAgICAgICAgbGVmdC52aXNpdChub2RlLmxlZnQpCisKKyAgICAgICAgICAgIHJpZ2h0ID0gRmxhdHRlblZpc2l0b3Ioc2VsZi5jaG9vc2VfbGljZW5zZXMpCisgICAgICAgICAgICByaWdodC52aXNpdChub2RlLnJpZ2h0KQorCisgICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGYuY2hvb3NlX2xpY2Vuc2VzKGxlZnQubGljZW5zZXMsIHJpZ2h0LmxpY2Vuc2VzKQorICAgICAgICAgICAgc2VsZi5saWNlbnNlcy5leHRlbmQoc2VsZWN0ZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmdlbmVyaWNfdmlzaXQobm9kZSkKKworZGVmIGZsYXR0ZW5lZF9saWNlbnNlcyhsaWNlbnNlc3RyLCBjaG9vc2VfbGljZW5zZXMpOgorICAgICIiIkdpdmVuIGEgbGljZW5zZSBzdHJpbmcgYW5kIGNob29zZV9saWNlbnNlcyBmdW5jdGlvbiwgcmV0dXJuIGEgZmxhdCBsaXN0IG9mIGxpY2Vuc2VzIiIiCisgICAgZmxhdHRlbiA9IEZsYXR0ZW5WaXNpdG9yKGNob29zZV9saWNlbnNlcykKKyAgICB0cnk6CisgICAgICAgIGZsYXR0ZW4udmlzaXRfc3RyaW5nKGxpY2Vuc2VzdHIpCisgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGV4YzoKKyAgICAgICAgcmFpc2UgTGljZW5zZVN5bnRheEVycm9yKGxpY2Vuc2VzdHIsIGV4YykKKyAgICByZXR1cm4gZmxhdHRlbi5saWNlbnNlcworCitkZWYgaXNfaW5jbHVkZWQobGljZW5zZXN0ciwgd2hpdGVsaXN0PU5vbmUsIGJsYWNrbGlzdD1Ob25lKToKKyAgICAiIiJHaXZlbiBhIGxpY2Vuc2Ugc3RyaW5nIGFuZCB3aGl0ZWxpc3QgYW5kIGJsYWNrbGlzdCwgZGV0ZXJtaW5lIGlmIHRoZQorICAgIGxpY2Vuc2Ugc3RyaW5nIG1hdGNoZXMgdGhlIHdoaXRlbGlzdCBhbmQgZG9lcyBub3QgbWF0Y2ggdGhlIGJsYWNrbGlzdC4KKworICAgIFJldHVybnMgYSB0dXBsZSBob2xkaW5nIHRoZSBib29sZWFuIHN0YXRlIGFuZCBhIGxpc3Qgb2YgdGhlIGFwcGxpY2FibGUKKyAgICBsaWNlbnNlcyB3aGljaCB3ZXJlIGV4Y2x1ZGVkIChvciBOb25lLCBpZiB0aGUgc3RhdGUgaXMgVHJ1ZSkKKyAgICAiIiIKKworICAgIGRlZiBpbmNsdWRlX2xpY2Vuc2UobGljZW5zZSk6CisgICAgICAgIHJldHVybiBhbnkoZm5tYXRjaChsaWNlbnNlLCBwYXR0ZXJuKSBmb3IgcGF0dGVybiBpbiB3aGl0ZWxpc3QpCisKKyAgICBkZWYgZXhjbHVkZV9saWNlbnNlKGxpY2Vuc2UpOgorICAgICAgICByZXR1cm4gYW55KGZubWF0Y2gobGljZW5zZSwgcGF0dGVybikgZm9yIHBhdHRlcm4gaW4gYmxhY2tsaXN0KQorCisgICAgZGVmIGNob29zZV9saWNlbnNlcyhhbHBoYSwgYmV0YSk6CisgICAgICAgICIiIlNlbGVjdCB0aGUgb3B0aW9uIGluIGFuIE9SIHdoaWNoIGlzIHRoZSAnYmVzdCcgKGhhcyB0aGUgbW9zdAorICAgICAgICBpbmNsdWRlZCBsaWNlbnNlcykuIiIiCisgICAgICAgIGFscGhhX3dlaWdodCA9IGxlbihmaWx0ZXIoaW5jbHVkZV9saWNlbnNlLCBhbHBoYSkpCisgICAgICAgIGJldGFfd2VpZ2h0ID0gbGVuKGZpbHRlcihpbmNsdWRlX2xpY2Vuc2UsIGJldGEpKQorICAgICAgICBpZiBhbHBoYV93ZWlnaHQgPiBiZXRhX3dlaWdodDoKKyAgICAgICAgICAgIHJldHVybiBhbHBoYQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGJldGEKKworICAgIGlmIG5vdCB3aGl0ZWxpc3Q6CisgICAgICAgIHdoaXRlbGlzdCA9IFsnKiddCisKKyAgICBpZiBub3QgYmxhY2tsaXN0OgorICAgICAgICBibGFja2xpc3QgPSBbXQorCisgICAgbGljZW5zZXMgPSBmbGF0dGVuZWRfbGljZW5zZXMobGljZW5zZXN0ciwgY2hvb3NlX2xpY2Vuc2VzKQorICAgIGV4Y2x1ZGVkID0gZmlsdGVyKGxhbWJkYSBsaWM6IGV4Y2x1ZGVfbGljZW5zZShsaWMpLCBsaWNlbnNlcykKKyAgICBpbmNsdWRlZCA9IGZpbHRlcihsYW1iZGEgbGljOiBpbmNsdWRlX2xpY2Vuc2UobGljKSwgbGljZW5zZXMpCisgICAgaWYgZXhjbHVkZWQ6CisgICAgICAgIHJldHVybiBGYWxzZSwgZXhjbHVkZWQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gVHJ1ZSwgaW5jbHVkZWQKKworY2xhc3MgTWFuaWZlc3RWaXNpdG9yKExpY2Vuc2VWaXNpdG9yKToKKyAgICAiIiJXYWxrIGxpY2Vuc2UgdHJlZSAocGFyc2VkIGZyb20gYSBzdHJpbmcpIHJlbW92aW5nIHRoZSBpbmNvbXBhdGlibGUKKyAgICBsaWNlbnNlcyBzcGVjaWZpZWQiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCk6CisgICAgICAgIHNlbGYuX2RvbnRfd2FudF9saWNlbnNlcyA9IGRvbnRfd2FudF9saWNlbnNlcworICAgICAgICBzZWxmLl9jYW5vbmljYWxfbGljZW5zZSA9IGNhbm9uaWNhbF9saWNlbnNlCisgICAgICAgIHNlbGYuX2QgPSBkCisgICAgICAgIHNlbGYuX29wZXJhdG9ycyA9IFtdCisKKyAgICAgICAgc2VsZi5saWNlbnNlcyA9IFtdCisgICAgICAgIHNlbGYubGljZW5zZXN0ciA9ICcnCisKKyAgICAgICAgTGljZW5zZVZpc2l0b3IuX19pbml0X18oc2VsZikKKworICAgIGRlZiB2aXNpdChzZWxmLCBub2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLCBhc3QuU3RyKToKKyAgICAgICAgICAgIGxpYyA9IG5vZGUucworCisgICAgICAgICAgICBpZiBsaWNlbnNlX29rKHNlbGYuX2Nhbm9uaWNhbF9saWNlbnNlKHNlbGYuX2QsIGxpYyksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RvbnRfd2FudF9saWNlbnNlcykgPT0gVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgICAgIG9wcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBzZWxmLl9vcGVyYXRvcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcCA9PSAnWyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzLmFwcGVuZChvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgb3AgPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBvcHNbLTFdIGluIFsnWycsICddJ106CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcy5hcHBlbmQob3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BzWy0xXSA9IG9wIAorCisgICAgICAgICAgICAgICAgICAgIGZvciBvcCBpbiBvcHM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcCA9PSAnWycgb3Igb3AgPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSBvcAorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmxpY2Vuc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGljZW5zZXN0ciArPSAnICcgKyBvcCArICcgJworCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wZXJhdG9ycyA9IFtdCisKKyAgICAgICAgICAgICAgICBzZWxmLmxpY2Vuc2VzdHIgKz0gbGljCisgICAgICAgICAgICAgICAgc2VsZi5saWNlbnNlcy5hcHBlbmQobGljKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LkJpdEFuZCk6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCImIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5CaXRPcik6CisgICAgICAgICAgICBzZWxmLl9vcGVyYXRvcnMuYXBwZW5kKCJ8IikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIGFzdC5MaXN0KToKKyAgICAgICAgICAgIHNlbGYuX29wZXJhdG9ycy5hcHBlbmQoIlsiKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgYXN0LkxvYWQpOgorICAgICAgICAgICAgc2VsZi5saWNlbnNlc3RyICs9ICJdIgorCisgICAgICAgIHNlbGYuZ2VuZXJpY192aXNpdChub2RlKQorCitkZWYgbWFuaWZlc3RfbGljZW5zZXMobGljZW5zZXN0ciwgZG9udF93YW50X2xpY2Vuc2VzLCBjYW5vbmljYWxfbGljZW5zZSwgZCk6CisgICAgIiIiR2l2ZW4gYSBsaWNlbnNlIHN0cmluZyBhbmQgZG9udF93YW50X2xpY2Vuc2VzIGxpc3QsCisgICAgICAgcmV0dXJuIGxpY2Vuc2Ugc3RyaW5nIGZpbHRlcmVkIGFuZCBhIGxpc3Qgb2YgbGljZW5zZXMiIiIKKyAgICBtYW5pZmVzdCA9IE1hbmlmZXN0VmlzaXRvcihkb250X3dhbnRfbGljZW5zZXMsIGNhbm9uaWNhbF9saWNlbnNlLCBkKQorCisgICAgdHJ5OgorICAgICAgICBlbGVtZW50cyA9IG1hbmlmZXN0LmdldF9lbGVtZW50cyhsaWNlbnNlc3RyKQorCisgICAgICAgICMgUmVwbGFjZSAnKCknIHRvICdbXScgZm9yIGhhbmRsZSBpbiBhc3QgYXMgTGlzdCBhbmQgTG9hZCB0eXBlcy4KKyAgICAgICAgZWxlbWVudHMgPSBbJ1snIGlmIGUgPT0gJygnIGVsc2UgZSBmb3IgZSBpbiBlbGVtZW50c10KKyAgICAgICAgZWxlbWVudHMgPSBbJ10nIGlmIGUgPT0gJyknIGVsc2UgZSBmb3IgZSBpbiBlbGVtZW50c10KKworICAgICAgICBtYW5pZmVzdC52aXNpdF9lbGVtZW50cyhlbGVtZW50cykKKyAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICByYWlzZSBMaWNlbnNlU3ludGF4RXJyb3IobGljZW5zZXN0ciwgZXhjKQorCisgICAgIyBSZXBsYWNlICdbXScgdG8gJygpJyBmb3Igb3V0cHV0IGNvcnJlY3QgbGljZW5zZS4KKyAgICBtYW5pZmVzdC5saWNlbnNlc3RyID0gbWFuaWZlc3QubGljZW5zZXN0ci5yZXBsYWNlKCdbJywgJygnKS5yZXBsYWNlKCddJywgJyknKQorCisgICAgcmV0dXJuIChtYW5pZmVzdC5saWNlbnNlc3RyLCBtYW5pZmVzdC5saWNlbnNlcykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL2xzYi5weSBiL21ldGEvbGliL29lL2xzYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGZlNzFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvbHNiLnB5CkBAIC0wLDAgKzEsODMgQEAKK2RlZiByZWxlYXNlX2RpY3QoKToKKyAgICAiIiJSZXR1cm4gdGhlIG91dHB1dCBvZiBsc2JfcmVsZWFzZSAtaXIgYXMgYSBkaWN0aW9uYXJ5IiIiCisgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQSVBFCisKKyAgICB0cnk6CisgICAgICAgIG91dHB1dCwgZXJyID0gYmIucHJvY2Vzcy5ydW4oWydsc2JfcmVsZWFzZScsICctaXInXSwgc3RkZXJyPVBJUEUpCisgICAgZXhjZXB0IGJiLnByb2Nlc3MuQ21kRXJyb3IgYXMgZXhjOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGF0YSA9IHt9CisgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCItZSIpOiBsaW5lID0gbGluZVszOl0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmUuc3BsaXQoIjpcdCIsIDEpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIGRhdGEKKworZGVmIHJlbGVhc2VfZGljdF9maWxlKCk6CisgICAgIiIiIFRyeSB0byBnYXRoZXIgTFNCIHJlbGVhc2UgaW5mb3JtYXRpb24gbWFudWFsbHkgd2hlbiBsc2JfcmVsZWFzZSB0b29sIGlzIHVuYXZhaWxhYmxlICIiIgorICAgIGRhdGEgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy9sc2ItcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvbHNiLXJlbGVhc2UnKSBhcyBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBsaW5lLnNwbGl0KCI9IiwgMSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWUuc3RyaXAoKQorICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjL3JlZGhhdC1yZWxlYXNlJyk6CisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIHdpdGggb3BlbignL2V0Yy9yZWRoYXQtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZGlzdHJvID0gZi5yZWFkbGluZSgpLnN0cmlwKCkKKyAgICAgICAgICAgIGltcG9ydCByZQorICAgICAgICAgICAgbWF0Y2ggPSByZS5tYXRjaChyJyguKikgcmVsZWFzZSAoLiopIFwoKC4qKVwpJywgZGlzdHJvKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gbWF0Y2guZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IG1hdGNoLmdyb3VwKDIpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvb3MtcmVsZWFzZScpOgorICAgICAgICAgICAgZGF0YSA9IHt9CisgICAgICAgICAgICB3aXRoIG9wZW4oJy9ldGMvb3MtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdOQU1FPScpOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnRElTVFJJQl9JRCddID0gbGluZVs1Ol0ucnN0cmlwKCkuc3RyaXAoJyInKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1ZFUlNJT05fSUQ9Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IGxpbmVbMTE6XS5yc3RyaXAoKS5zdHJpcCgnIicpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy9ldGMvU3VTRS1yZWxlYXNlJyk6CisgICAgICAgICAgICBkYXRhID0ge30KKyAgICAgICAgICAgIGRhdGFbJ0RJU1RSSUJfSUQnXSA9ICdTVVNFIExJTlVYJworICAgICAgICAgICAgd2l0aCBvcGVuKCcvZXRjL1N1U0UtcmVsZWFzZScpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdWRVJTSU9OID0gJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydESVNUUklCX1JFTEVBU0UnXSA9IGxpbmVbMTA6XS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBkYXRhCisKK2RlZiBkaXN0cm9faWRlbnRpZmllcihhZGp1c3RfaG9vaz1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBkaXN0cm8gaWRlbnRpZmllciBzdHJpbmcgYmFzZWQgdXBvbiBsc2JfcmVsZWFzZSAtcmksCisgICAgICAgd2l0aCBvcHRpb25hbCBhZGp1c3RtZW50IHZpYSBhIGhvb2siIiIKKworICAgIGxzYl9kYXRhID0gcmVsZWFzZV9kaWN0KCkKKyAgICBpZiBsc2JfZGF0YToKKyAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gbHNiX2RhdGFbJ0Rpc3RyaWJ1dG9yIElEJ10sIGxzYl9kYXRhWydSZWxlYXNlJ10KKyAgICBlbHNlOgorICAgICAgICBsc2JfZGF0YV9maWxlID0gcmVsZWFzZV9kaWN0X2ZpbGUoKQorICAgICAgICBpZiBsc2JfZGF0YV9maWxlOgorICAgICAgICAgICAgZGlzdHJvX2lkLCByZWxlYXNlID0gbHNiX2RhdGFfZmlsZVsnRElTVFJJQl9JRCddLCBsc2JfZGF0YV9maWxlLmdldCgnRElTVFJJQl9SRUxFQVNFJywgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpc3Ryb19pZCwgcmVsZWFzZSA9IE5vbmUsIE5vbmUKKworICAgIGlmIGFkanVzdF9ob29rOgorICAgICAgICBkaXN0cm9faWQsIHJlbGVhc2UgPSBhZGp1c3RfaG9vayhkaXN0cm9faWQsIHJlbGVhc2UpCisgICAgaWYgbm90IGRpc3Ryb19pZDoKKyAgICAgICAgcmV0dXJuICJVbmtub3duIgorICAgIGlmIHJlbGVhc2U6CisgICAgICAgIGlkX3N0ciA9ICd7MH0tezF9Jy5mb3JtYXQoZGlzdHJvX2lkLCByZWxlYXNlKQorICAgIGVsc2U6CisgICAgICAgIGlkX3N0ciA9IGRpc3Ryb19pZAorICAgIHJldHVybiBpZF9zdHIucmVwbGFjZSgnICcsJy0nKS5yZXBsYWNlKCcvJywnLScpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9tYWtldHlwZS5weSBiL21ldGEvbGliL29lL21ha2V0eXBlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWYzMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9tYWtldHlwZS5weQpAQCAtMCwwICsxLDk5IEBACisiIiJPcGVuRW1iZWRkZWQgdmFyaWFibGUgdHlwaW5nIHN1cHBvcnQKKworVHlwZXMgYXJlIGRlZmluZWQgaW4gdGhlIG1ldGFkYXRhIGJ5IG5hbWUsIHVzaW5nIHRoZSAndHlwZScgZmxhZyBvbiBhCit2YXJpYWJsZS4gIE90aGVyIGZsYWdzIG1heSBiZSB1dGlsaXplZCBpbiB0aGUgY29uc3RydWN0aW9uIG9mIHRoZSB0eXBlcy4gIFNlZQordGhlIGFyZ3VtZW50cyBvZiB0aGUgdHlwZSdzIGZhY3RvcnkgZm9yIGRldGFpbHMuCisiIiIKKworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCB0eXBlcworCithdmFpbGFibGVfdHlwZXMgPSB7fQorCitjbGFzcyBNaXNzaW5nRmxhZyhUeXBlRXJyb3IpOgorICAgICIiIkEgcGFydGljdWxhciBmbGFnIGlzIHJlcXVpcmVkIHRvIGNvbnN0cnVjdCB0aGUgdHlwZSwgYnV0IGhhcyBub3QgYmVlbgorICAgIHByb3ZpZGVkLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGFnLCB0eXBlKToKKyAgICAgICAgc2VsZi5mbGFnID0gZmxhZworICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIFR5cGVFcnJvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiVHlwZSAnJXMnIHJlcXVpcmVzIGZsYWcgJyVzJyIgJSAoc2VsZi50eXBlLCBzZWxmLmZsYWcpCisKK2RlZiBmYWN0b3J5KHZhcl90eXBlKToKKyAgICAiIiJSZXR1cm4gdGhlIGZhY3RvcnkgZm9yIGEgc3BlY2lmaWVkIHR5cGUuIiIiCisgICAgaWYgdmFyX3R5cGUgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJObyB0eXBlIHNwZWNpZmllZC4gVmFsaWQgdHlwZXM6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oYXZhaWxhYmxlX3R5cGVzKSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBhdmFpbGFibGVfdHlwZXNbdmFyX3R5cGVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkludmFsaWQgdHlwZSAnJXMnOlxuICBWYWxpZCB0eXBlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICh2YXJfdHlwZSwgJywgJy5qb2luKGF2YWlsYWJsZV90eXBlcykpKQorCitkZWYgY3JlYXRlKHZhbHVlLCB2YXJfdHlwZSwgKipmbGFncyk6CisgICAgIiIiQ3JlYXRlIGFuIG9iamVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUsIGdpdmVuIHRoZSBzcGVjaWZpZWQgZmxhZ3MgYW5kCisgICAgc3RyaW5nIHZhbHVlLiIiIgorICAgIG9iaiA9IGZhY3RvcnkodmFyX3R5cGUpCisgICAgb2JqZmxhZ3MgPSB7fQorICAgIGZvciBmbGFnIGluIG9iai5mbGFnczoKKyAgICAgICAgaWYgZmxhZyBub3QgaW4gZmxhZ3M6CisgICAgICAgICAgICBpZiBmbGFnIG5vdCBpbiBvYmoub3B0ZmxhZ3M6CisgICAgICAgICAgICAgICAgcmFpc2UgTWlzc2luZ0ZsYWcoZmxhZywgdmFyX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvYmpmbGFnc1tmbGFnXSA9IGZsYWdzW2ZsYWddCisKKyAgICByZXR1cm4gb2JqKHZhbHVlLCAqKm9iamZsYWdzKQorCitkZWYgZ2V0X2NhbGxhYmxlX2FyZ3Mob2JqKToKKyAgICAiIiJHcmFiIGFsbCBidXQgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBzcGVjaWZpZWQgY2FsbGFibGUsIHJldHVybmluZworICAgIHRoZSBsaXN0LCBhcyB3ZWxsIGFzIGEgbGlzdCBvZiB3aGljaCBvZiB0aGUgYXJndW1lbnRzIGhhdmUgZGVmYXVsdAorICAgIHZhbHVlcy4iIiIKKyAgICBpZiB0eXBlKG9iaikgaXMgdHlwZToKKyAgICAgICAgb2JqID0gb2JqLl9faW5pdF9fCisKKyAgICBhcmdzLCB2YXJhcmdzLCBrZXl3b3JkcywgZGVmYXVsdHMgPSBpbnNwZWN0LmdldGFyZ3NwZWMob2JqKQorICAgIGZsYWdsaXN0ID0gW10KKyAgICBpZiBhcmdzOgorICAgICAgICBpZiBsZW4oYXJncykgPiAxIGFuZCBhcmdzWzBdID09ICdzZWxmJzoKKyAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzE6XQorICAgICAgICBmbGFnbGlzdC5leHRlbmQoYXJncykKKworICAgIG9wdGlvbmFsID0gc2V0KCkKKyAgICBpZiBkZWZhdWx0czoKKyAgICAgICAgb3B0aW9uYWwgfD0gc2V0KGZsYWdsaXN0Wy1sZW4oZGVmYXVsdHMpOl0pCisgICAgcmV0dXJuIGZsYWdsaXN0LCBvcHRpb25hbAorCitkZWYgZmFjdG9yeV9zZXR1cChuYW1lLCBvYmopOgorICAgICIiIlByZXBhcmUgYSBmYWN0b3J5IGZvciB1c2UuIiIiCisgICAgYXJncywgb3B0aW9uYWwgPSBnZXRfY2FsbGFibGVfYXJncyhvYmopCisgICAgZXh0cmFfYXJncyA9IGFyZ3NbMTpdCisgICAgaWYgZXh0cmFfYXJnczoKKyAgICAgICAgb2JqLmZsYWdzLCBvcHRpb25hbCA9IGV4dHJhX2FyZ3MsIG9wdGlvbmFsCisgICAgICAgIG9iai5vcHRmbGFncyA9IHNldChvcHRpb25hbCkKKyAgICBlbHNlOgorICAgICAgICBvYmouZmxhZ3MgPSBvYmoub3B0ZmxhZ3MgPSAoKQorCisgICAgaWYgbm90IGhhc2F0dHIob2JqLCAnbmFtZScpOgorICAgICAgICBvYmoubmFtZSA9IG5hbWUKKworZGVmIHJlZ2lzdGVyKG5hbWUsIGZhY3RvcnkpOgorICAgICIiIlJlZ2lzdGVyIGEgdHlwZSwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGEgZmFjdG9yeSBjYWxsYWJsZS4KKworICAgIERldGVybWluZXMgdGhlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBmbGFncyBmcm9tIHRoZSBmYWN0b3J5J3MKKyAgICBhcmd1bWVudHMuIiIiCisgICAgZmFjdG9yeV9zZXR1cChuYW1lLCBmYWN0b3J5KQorICAgIGF2YWlsYWJsZV90eXBlc1tmYWN0b3J5Lm5hbWVdID0gZmFjdG9yeQorCisKKyMgUmVnaXN0ZXIgYWxsIG91ciBpbmNsdWRlZCB0eXBlcworZm9yIG5hbWUgaW4gZGlyKHR5cGVzKToKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ18nKToKKyAgICAgICAgY29udGludWUKKworICAgIG9iaiA9IGdldGF0dHIodHlwZXMsIG5hbWUpCisgICAgaWYgbm90IGNhbGxhYmxlKG9iaik6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICByZWdpc3RlcihuYW1lLCBvYmopCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weSBiL21ldGEvbGliL29lL21hbmlmZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODMyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9tYW5pZmVzdC5weQpAQCAtMCwwICsxLDM0NSBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiCisKKworY2xhc3MgTWFuaWZlc3Qob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMID0gIm1pcCIKKyAgICBQS0dfVFlQRV9NVUxUSUxJQiA9ICJtbHAiCisgICAgUEtHX1RZUEVfTEFOR1VBR0UgPSAibGdwIgorICAgIFBLR19UWVBFX0FUVEVNUFRfT05MWSA9ICJhb3AiCisKKyAgICBNQU5JRkVTVF9UWVBFX0lNQUdFID0gImltYWdlIgorICAgIE1BTklGRVNUX1RZUEVfU0RLX0hPU1QgPSAic2RrX2hvc3QiCisgICAgTUFOSUZFU1RfVFlQRV9TREtfVEFSR0VUID0gInNka190YXJnZXQiCisKKyAgICB2YXJfbWFwcyA9IHsKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9JTUFHRTogeworICAgICAgICAgICAgIlBBQ0tBR0VfSU5TVEFMTCI6IFBLR19UWVBFX01VU1RfSU5TVEFMTCwKKyAgICAgICAgICAgICJQQUNLQUdFX0lOU1RBTExfQVRURU1QVE9OTFkiOiBQS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgICAgICAiTElOR1VBU19JTlNUQUxMIjogUEtHX1RZUEVfTEFOR1VBR0UKKyAgICAgICAgfSwKKyAgICAgICAgTUFOSUZFU1RfVFlQRV9TREtfSE9TVDogeworICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0siOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiVE9PTENIQUlOX0hPU1RfVEFTS19BVFRFTVBUT05MWSI6IFBLR19UWVBFX0FUVEVNUFRfT05MWQorICAgICAgICB9LAorICAgICAgICBNQU5JRkVTVF9UWVBFX1NES19UQVJHRVQ6IHsKKyAgICAgICAgICAgICJUT09MQ0hBSU5fVEFSR0VUX1RBU0siOiBQS0dfVFlQRV9NVVNUX0lOU1RBTEwsCisgICAgICAgICAgICAiVE9PTENIQUlOX1RBUkdFVF9UQVNLX0FUVEVNUFRPTkxZIjogUEtHX1RZUEVfQVRURU1QVF9PTkxZCisgICAgICAgIH0KKyAgICB9CisKKyAgICBJTlNUQUxMX09SREVSID0gWworICAgICAgICBQS0dfVFlQRV9MQU5HVUFHRSwKKyAgICAgICAgUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICBQS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgIFBLR19UWVBFX01VTFRJTElCCisgICAgXQorCisgICAgaW5pdGlhbF9tYW5pZmVzdF9maWxlX2hlYWRlciA9IFwKKyAgICAgICAgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBhbmQgY29udGFpbnMgdGhlIHBhY2thZ2VzXG4iIFwKKyAgICAgICAgIiMgcGFzc2VkIG9uIHRvIHRoZSBwYWNrYWdlIG1hbmFnZXIgaW4gb3JkZXIgdG8gY3JlYXRlIHRoZSByb290ZnMuXG5cbiIgXAorICAgICAgICAiIyBGb3JtYXQ6XG4iIFwKKyAgICAgICAgIiMgIDxwYWNrYWdlX3R5cGU+LDxwYWNrYWdlX25hbWU+XG4iIFwKKyAgICAgICAgIiMgd2hlcmU6XG4iIFwKKyAgICAgICAgIiMgICA8cGFja2FnZV90eXBlPiBjYW4gYmU6XG4iIFwKKyAgICAgICAgIiMgICAgICAnbWlwJyA9IG11c3QgaW5zdGFsbCBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnYW9wJyA9IGF0dGVtcHQgb25seSBwYWNrYWdlXG4iIFwKKyAgICAgICAgIiMgICAgICAnbWxwJyA9IG11bHRpbGliIHBhY2thZ2VcbiIgXAorICAgICAgICAiIyAgICAgICdsZ3AnID0gbGFuZ3VhZ2UgcGFja2FnZVxuXG4iCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUsIG1hbmlmZXN0X3R5cGU9TUFOSUZFU1RfVFlQRV9JTUFHRSk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5tYW5pZmVzdF90eXBlID0gbWFuaWZlc3RfdHlwZQorCisgICAgICAgIGlmIG1hbmlmZXN0X2RpciBpcyBOb25lOgorICAgICAgICAgICAgaWYgbWFuaWZlc3RfdHlwZSAhPSBzZWxmLk1BTklGRVNUX1RZUEVfSU1BR0U6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdTREtfRElSJywgVHJ1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3RfZGlyID0gbWFuaWZlc3RfZGlyCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYubWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYuaW5pdGlhbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2luaXRpYWxfbWFuaWZlc3QiICUgbWFuaWZlc3RfdHlwZSkKKyAgICAgICAgc2VsZi5maW5hbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2ZpbmFsX21hbmlmZXN0IiAlIG1hbmlmZXN0X3R5cGUpCisgICAgICAgIHNlbGYuZnVsbF9tYW5pZmVzdCA9IG9zLnBhdGguam9pbihzZWxmLm1hbmlmZXN0X2RpciwgIiVzX2Z1bGxfbWFuaWZlc3QiICUgbWFuaWZlc3RfdHlwZSkKKworICAgICAgICAjIHBhY2thZ2VzIGluIHRoZSBmb2xsb3dpbmcgdmFycyB3aWxsIGJlIHNwbGl0IGluICdtdXN0IGluc3RhbGwnIGFuZAorICAgICAgICAjICdtdWx0aWxpYicKKyAgICAgICAgc2VsZi52YXJzX3RvX3NwbGl0ID0gWyJQQUNLQUdFX0lOU1RBTEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRPT0xDSEFJTl9IT1NUX1RBU0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRPT0xDSEFJTl9UQVJHRVRfVEFTSyJdCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgYSBzdGFuZGFyZCBpbml0aWFsIG1hbmlmZXN0IGZvciBjb3JlLWltYWdlLShtaW5pbWFsfHNhdG98c2F0by1zZGspLgorICAgIFRoaXMgd2lsbCBiZSB1c2VkIGZvciB0ZXN0aW5nIHVudGlsIHRoZSBjbGFzcyBpcyBpbXBsZW1lbnRlZCBwcm9wZXJseSEKKyAgICAiIiIKKyAgICBkZWYgX2NyZWF0ZV9kdW1teV9pbml0aWFsKHNlbGYpOgorICAgICAgICBpbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICBwa2dfbGlzdCA9IGRpY3QoKQorICAgICAgICBpZiBpbWFnZV9yb290ZnMuZmluZCgiY29yZS1pbWFnZS1zYXRvLXNkayIpID4gMDoKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMXSA9IFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8tZ2FtZXMgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvIHBhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlICIgXAorICAgICAgICAgICAgICAgICJwYWNrYWdlZ3JvdXAtY29yZS1zZGsgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMgIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcgcGFja2FnZWdyb3VwLWNvcmUtcXQtZGVtb2FwcHMgIiBcCisgICAgICAgICAgICAgICAgImFwdCBwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBzcGxhc2ggIiBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldCAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2ggZHBrZyBrZXJuZWwtZGV2IgorICAgICAgICAgICAgcGtnX2xpc3Rbc2VsZi5QS0dfVFlQRV9MQU5HVUFHRV0gPSBcCisgICAgICAgICAgICAgICAgImxvY2FsZS1iYXNlLWVuLXVzIGxvY2FsZS1iYXNlLWVuLWdiIgorICAgICAgICBlbGlmIGltYWdlX3Jvb3Rmcy5maW5kKCJjb3JlLWltYWdlLXNhdG8iKSA+IDA6CisgICAgICAgICAgICBwa2dfbGlzdFtzZWxmLlBLR19UWVBFX01VU1RfSU5TVEFMTF0gPSBcCisgICAgICAgICAgICAgICAgInBhY2thZ2Vncm91cC1jb3JlLXNzaC1kcm9wYmVhciBwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by1nYW1lcyAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UgcHNwbGFzaCBhcHQgZHBrZyBwYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCAiIFwKKyAgICAgICAgICAgICAgICAicGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8gcGFja2FnZWdyb3VwLWNvcmUtYm9vdCIKKyAgICAgICAgICAgIHBrZ19saXN0WydsZ3AnXSA9IFwKKyAgICAgICAgICAgICAgICAibG9jYWxlLWJhc2UtZW4tdXMgbG9jYWxlLWJhc2UtZW4tZ2IiCisgICAgICAgIGVsaWYgaW1hZ2Vfcm9vdGZzLmZpbmQoImNvcmUtaW1hZ2UtbWluaW1hbCIpID4gMDoKKyAgICAgICAgICAgIHBrZ19saXN0W3NlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMXSA9ICJydW4tcG9zdGluc3RzIHBhY2thZ2Vncm91cC1jb3JlLWJvb3QiCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCwgIncrIikgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBtYW5pZmVzdC53cml0ZShzZWxmLmluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIpCisKKyAgICAgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dfbGlzdDoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0W3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICAiIiIKKyAgICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBpbml0aWFsIG1hbmlmZXN0IHdoaWNoIHdpbGwgYmUgdXNlZCBieSBSb290ZnMgY2xhc3MgdG8KKyAgICBnZW5lcmF0ZSB0aGUgcm9vdGZzCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGNyZWF0ZXMgdGhlIG1hbmlmZXN0IGFmdGVyIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gaW5zdGFsbGVkLgorICAgICIiIgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIFRoaXMgY3JlYXRlcyB0aGUgbWFuaWZlc3QgYWZ0ZXIgdGhlIHBhY2thZ2UgaW4gaW5pdGlhbCBtYW5pZmVzdCBoYXMgYmVlbgorICAgIGR1bW15IGluc3RhbGxlZC4gSXQgbGlzdHMgYWxsICp0byBiZSBpbnN0YWxsZWQqIHBhY2thZ2VzLiBUaGVyZSBpcyBubyByZWFsCisgICAgaW5zdGFsbGF0aW9uLCBqdXN0IGEgdGVzdC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHBhcnNlcyBhbiBpbml0aWFsIG1hbmlmZXN0IGFuZCByZXR1cm5zIGEgZGljdGlvbmFyeQorICAgIG9iamVjdCB3aXRoIHRoZSBtdXN0IGluc3RhbGwsIGF0dGVtcHQgb25seSwgbXVsdGlsaWIgYW5kIGxhbmd1YWdlIHBhY2thZ2VzLgorICAgICIiIgorICAgIGRlZiBwYXJzZV9pbml0aWFsX21hbmlmZXN0KHNlbGYpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCkgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBtYW5pZmVzdC5yZWFkKCkuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgY29tbWVudCA9IHJlLm1hdGNoKCJeIy4qIiwgbGluZSkKKyAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIl4oJXN8JXN8JXN8JXMpLCguKikkIiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9BVFRFTVBUX09OTFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLlBLR19UWVBFX01VTFRJTElCLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5QS0dfVFlQRV9MQU5HVUFHRSkKKyAgICAgICAgICAgICAgICBwa2cgPSByZS5tYXRjaChwYXR0ZXJuLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgY29tbWVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIHBrZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3R5cGUgPSBwa2cuZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgcGtnX25hbWUgPSBwa2cuZ3JvdXAoMikKKworICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX3R5cGVdID0gW3BrZ19uYW1lXQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0uYXBwZW5kKHBrZ19uYW1lKQorCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICAnJycKKyAgICBUaGlzIGZvbGxvd2luZyBmdW5jdGlvbiBwYXJzZXMgYSBmdWxsIG1hbmlmZXN0IGFuZCByZXR1cm4gYSBsaXN0CisgICAgb2JqZWN0IHdpdGggcGFja2FnZXMuCisgICAgJycnCisgICAgZGVmIHBhcnNlX2Z1bGxfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGluc3RhbGxlZF9wa2dzID0gbGlzdCgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmZ1bGxfbWFuaWZlc3QpOgorICAgICAgICAgICAgYmIubm90ZSgnZnVsbCBtYW5pZmVzdCBub3QgZXhpc3QnKQorICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZnVsbF9tYW5pZmVzdCwgJ3InKSBhcyBtYW5pZmVzdDoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLmFwcGVuZChwa2cuc3RyaXAoKSkKKworICAgICAgICByZXR1cm4gaW5zdGFsbGVkX3BrZ3MKKworCitjbGFzcyBScG1NYW5pZmVzdChNYW5pZmVzdCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgb2JqZWN0IHdpdGggbWlwIGFuZCBtbHAgcGFja2FnZXMuCisgICAgIiIiCisgICAgZGVmIF9zcGxpdF9tdWx0aWxpYihzZWxmLCBwa2dfbGlzdCk6CisgICAgICAgIHBrZ3MgPSBkaWN0KCkKKworICAgICAgICBmb3IgcGtnIGluIHBrZ19saXN0LnNwbGl0KCk6CisgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVTVF9JTlNUQUxMCisKKyAgICAgICAgICAgIG1sX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICAgICAgICAgIGZvciBtbF92YXJpYW50IGluIG1sX3ZhcmlhbnRzOgorICAgICAgICAgICAgICAgIGlmIHBrZy5zdGFydHN3aXRoKG1sX3ZhcmlhbnQgKyAnLScpOgorICAgICAgICAgICAgICAgICAgICBwa2dfdHlwZSA9IHNlbGYuUEtHX1RZUEVfTVVMVElMSUIKKworICAgICAgICAgICAgaWYgbm90IHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gPSBwa2cKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtnc1twa2dfdHlwZV0gKz0gIiAiICsgcGtnCisKKyAgICAgICAgcmV0dXJuIHBrZ3MKKworICAgIGRlZiBjcmVhdGVfaW5pdGlhbChzZWxmKToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBpZiB2YXIgaW4gc2VsZi52YXJzX3RvX3NwbGl0OgorICAgICAgICAgICAgICAgICAgICBzcGxpdF9wa2dzID0gc2VsZi5fc3BsaXRfbXVsdGlsaWIoc2VsZi5kLmdldFZhcih2YXIsIFRydWUpKQorICAgICAgICAgICAgICAgICAgICBpZiBzcGxpdF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtncyA9IGRpY3QocGtncy5pdGVtcygpICsgc3BsaXRfcGtncy5pdGVtcygpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBrZ19saXN0ID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGlmIHBrZ19saXN0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcGtnc1tzZWxmLnZhcl9tYXBzW3NlbGYubWFuaWZlc3RfdHlwZV1bdmFyXV0gPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3M6CisgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBwa2dzW3BrZ190eXBlXS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdC53cml0ZSgiJXMsJXNcbiIgJSAocGtnX3R5cGUsIHBrZykpCisKKyAgICBkZWYgY3JlYXRlX2ZpbmFsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgY3JlYXRlX2Z1bGwoc2VsZiwgcG0pOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT3BrZ01hbmlmZXN0KE1hbmlmZXN0KToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBvYmplY3Qgd2l0aCBtaXAgYW5kIG1scCBwYWNrYWdlcy4KKyAgICAiIiIKKyAgICBkZWYgX3NwbGl0X211bHRpbGliKHNlbGYsIHBrZ19saXN0KToKKyAgICAgICAgcGtncyA9IGRpY3QoKQorCisgICAgICAgIGZvciBwa2cgaW4gcGtnX2xpc3Quc3BsaXQoKToKKyAgICAgICAgICAgIHBrZ190eXBlID0gc2VsZi5QS0dfVFlQRV9NVVNUX0lOU1RBTEwKKworICAgICAgICAgICAgbWxfdmFyaWFudHMgPSBzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9WQVJJQU5UUycsIFRydWUpLnNwbGl0KCkKKworICAgICAgICAgICAgZm9yIG1sX3ZhcmlhbnQgaW4gbWxfdmFyaWFudHM6CisgICAgICAgICAgICAgICAgaWYgcGtnLnN0YXJ0c3dpdGgobWxfdmFyaWFudCArICctJyk6CisgICAgICAgICAgICAgICAgICAgIHBrZ190eXBlID0gc2VsZi5QS0dfVFlQRV9NVUxUSUxJQgorCisgICAgICAgICAgICBpZiBub3QgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSA9IHBrZworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzW3BrZ190eXBlXSArPSAiICIgKyBwa2cKKworICAgICAgICByZXR1cm4gcGtncworCisgICAgZGVmIGNyZWF0ZV9pbml0aWFsKHNlbGYpOgorICAgICAgICBwa2dzID0gZGljdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuaW5pdGlhbF9tYW5pZmVzdCwgIncrIikgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBtYW5pZmVzdC53cml0ZShzZWxmLmluaXRpYWxfbWFuaWZlc3RfZmlsZV9oZWFkZXIpCisKKyAgICAgICAgICAgIGZvciB2YXIgaW4gc2VsZi52YXJfbWFwc1tzZWxmLm1hbmlmZXN0X3R5cGVdOgorICAgICAgICAgICAgICAgIGlmIHZhciBpbiBzZWxmLnZhcnNfdG9fc3BsaXQ6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0X3BrZ3MgPSBzZWxmLl9zcGxpdF9tdWx0aWxpYihzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNwbGl0X3BrZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzID0gZGljdChwa2dzLml0ZW1zKCkgKyBzcGxpdF9wa2dzLml0ZW1zKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX2xpc3QgPSBzZWxmLmQuZ2V0VmFyKHZhciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3NlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXVt2YXJdXSA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnczoKKyAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ3NbcGtnX3R5cGVdLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgICAgIG1hbmlmZXN0LndyaXRlKCIlcywlc1xuIiAlIChwa2dfdHlwZSwgcGtnKSkKKworICAgIGRlZiBjcmVhdGVfZmluYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGVfZnVsbChzZWxmLCBwbSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmluaXRpYWxfbWFuaWZlc3QpOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfaW5pdGlhbCgpCisKKyAgICAgICAgaW5pdGlhbF9tYW5pZmVzdCA9IHNlbGYucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IGxpc3QoKQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gaW5pdGlhbF9tYW5pZmVzdDoKKyAgICAgICAgICAgIHBrZ3NfdG9faW5zdGFsbCArPSBpbml0aWFsX21hbmlmZXN0W3BrZ190eXBlXQorICAgICAgICBpZiBsZW4ocGtnc190b19pbnN0YWxsKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgb3V0cHV0ID0gcG0uZHVtbXlfaW5zdGFsbChwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZnVsbF9tYW5pZmVzdCwgJ3crJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBwa2dfcmUgPSByZS5jb21waWxlKCdeSW5zdGFsbGluZyAoW14gXSspIFteIF0uKicpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzZXQob3V0cHV0LnNwbGl0KCdcbicpKToKKyAgICAgICAgICAgICAgICBtID0gcGtnX3JlLm1hdGNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUobS5ncm91cCgxKSArICdcbicpCisKKyAgICAgICAgcmV0dXJuCisKKworY2xhc3MgRHBrZ01hbmlmZXN0KE1hbmlmZXN0KToKKyAgICBkZWYgY3JlYXRlX2luaXRpYWwoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzZWxmLmluaXRpYWxfbWFuaWZlc3QsICJ3KyIpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoc2VsZi5pbml0aWFsX21hbmlmZXN0X2ZpbGVfaGVhZGVyKQorCisgICAgICAgICAgICBmb3IgdmFyIGluIHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXToKKyAgICAgICAgICAgICAgICBwa2dfbGlzdCA9IHNlbGYuZC5nZXRWYXIodmFyLCBUcnVlKQorCisgICAgICAgICAgICAgICAgaWYgcGtnX2xpc3QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGtnX2xpc3Quc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgbWFuaWZlc3Qud3JpdGUoIiVzLCVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYudmFyX21hcHNbc2VsZi5tYW5pZmVzdF90eXBlXVt2YXJdLCBwa2cpKQorCisgICAgZGVmIGNyZWF0ZV9maW5hbChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGNyZWF0ZV9mdWxsKHNlbGYsIHBtKToKKyAgICAgICAgcGFzcworCisKK2RlZiBjcmVhdGVfbWFuaWZlc3QoZCwgZmluYWxfbWFuaWZlc3Q9RmFsc2UsIG1hbmlmZXN0X2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICBtYW5pZmVzdF90eXBlPU1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfSU1BR0UpOgorICAgIG1hbmlmZXN0X21hcCA9IHsncnBtJzogUnBtTWFuaWZlc3QsCisgICAgICAgICAgICAgICAgICAgICdpcGsnOiBPcGtnTWFuaWZlc3QsCisgICAgICAgICAgICAgICAgICAgICdkZWInOiBEcGtnTWFuaWZlc3R9CisKKyAgICBtYW5pZmVzdCA9IG1hbmlmZXN0X21hcFtkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpXShkLCBtYW5pZmVzdF9kaXIsIG1hbmlmZXN0X3R5cGUpCisKKyAgICBpZiBmaW5hbF9tYW5pZmVzdDoKKyAgICAgICAgbWFuaWZlc3QuY3JlYXRlX2ZpbmFsKCkKKyAgICBlbHNlOgorICAgICAgICBtYW5pZmVzdC5jcmVhdGVfaW5pdGlhbCgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYWNrYWdlLnB5IGIvbWV0YS9saWIvb2UvcGFja2FnZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc2NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcGFja2FnZS5weQpAQCAtMCwwICsxLDEyNSBAQAorZGVmIHJ1bnN0cmlwKGFyZyk6CisgICAgIyBGdW5jdGlvbiB0byBzdHJpcCBhIHNpbmdsZSBmaWxlLCBjYWxsZWQgZnJvbSBzcGxpdF9hbmRfc3RyaXBfZmlsZXMgYmVsb3cKKyAgICAjIEEgd29ya2luZyAnZmlsZScgKG9uZSB3aGljaCB3b3JrcyBvbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSkKKyAgICAjCisgICAgIyBUaGUgZWxmdHlwZSBpcyBhIGJpdCBwYXR0ZXJuIChleHBsYWluZWQgaW4gc3BsaXRfYW5kX3N0cmlwX2ZpbGVzKSB0byB0ZWxsCisgICAgIyB1cyB3aGF0IHR5cGUgb2YgZmlsZSB3ZSdyZSBwcm9jZXNzaW5nLi4uCisgICAgIyA0IC0gZXhlY3V0YWJsZQorICAgICMgOCAtIHNoYXJlZCBsaWJyYXJ5CisgICAgIyAxNiAtIGtlcm5lbCBtb2R1bGUKKworICAgIGltcG9ydCBjb21tYW5kcywgc3RhdCwgc3VicHJvY2VzcworCisgICAgKGZpbGUsIGVsZnR5cGUsIHN0cmlwKSA9IGFyZworCisgICAgbmV3bW9kZSA9IE5vbmUKKyAgICBpZiBub3Qgb3MuYWNjZXNzKGZpbGUsIG9zLldfT0spIG9yIG9zLmFjY2VzcyhmaWxlLCBvcy5SX09LKToKKyAgICAgICAgb3JpZ21vZGUgPSBvcy5zdGF0KGZpbGUpW3N0YXQuU1RfTU9ERV0KKyAgICAgICAgbmV3bW9kZSA9IG9yaWdtb2RlIHwgc3RhdC5TX0lXUklURSB8IHN0YXQuU19JUkVBRAorICAgICAgICBvcy5jaG1vZChmaWxlLCBuZXdtb2RlKQorCisgICAgZXh0cmFmbGFncyA9ICIiCisKKyAgICAjIGtlcm5lbCBtb2R1bGUgICAgCisgICAgaWYgZWxmdHlwZSAmIDE2OgorICAgICAgICBleHRyYWZsYWdzID0gIi0tc3RyaXAtZGVidWcgLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcHJlc2VydmUtZGF0ZXMiCisgICAgIyAuc28gYW5kIHNoYXJlZCBsaWJyYXJ5CisgICAgZWxpZiAiLnNvIiBpbiBmaWxlIGFuZCBlbGZ0eXBlICYgODoKKyAgICAgICAgZXh0cmFmbGFncyA9ICItLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50IC0tcmVtb3ZlLXNlY3Rpb249Lm5vdGUgLS1zdHJpcC11bm5lZWRlZCIKKyAgICAjIHNoYXJlZCBvciBleGVjdXRhYmxlOgorICAgIGVsaWYgZWxmdHlwZSAmIDggb3IgZWxmdHlwZSAmIDQ6CisgICAgICAgIGV4dHJhZmxhZ3MgPSAiLS1yZW1vdmUtc2VjdGlvbj0uY29tbWVudCAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIgorCisgICAgc3RyaXBjbWQgPSAiJyVzJyAlcyAnJXMnIiAlIChzdHJpcCwgZXh0cmFmbGFncywgZmlsZSkKKyAgICBiYi5kZWJ1ZygxLCAicnVuc3RyaXA6ICVzIiAlIHN0cmlwY21kKQorCisgICAgdHJ5OgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChzdHJpcGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICBiYi5lcnJvcigicnVuc3RyaXA6ICclcycgc3RyaXAgY29tbWFuZCBmYWlsZWQgd2l0aCAlcyAoJXMpIiAlIChzdHJpcGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICBpZiBuZXdtb2RlOgorICAgICAgICBvcy5jaG1vZChmaWxlLCBvcmlnbW9kZSkKKworICAgIHJldHVybgorCisKK2RlZiBmaWxlX3RyYW5zbGF0ZShmaWxlKToKKyAgICBmdCA9IGZpbGUucmVwbGFjZSgiQCIsICJAYXRAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIiAiLCAiQHNwYWNlQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJcdCIsICJAdGFiQCIpCisgICAgZnQgPSBmdC5yZXBsYWNlKCJbIiwgIkBvcGVuYnJhY2VAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIl0iLCAiQGNsb3NlYnJhY2VAIikKKyAgICBmdCA9IGZ0LnJlcGxhY2UoIl8iLCAiQHVuZGVyc2NvcmVAIikKKyAgICByZXR1cm4gZnQKKworZGVmIGZpbGVkZXBydW5uZXIoYXJnKToKKyAgICBpbXBvcnQgcmUsIHN1YnByb2Nlc3MsIHNobGV4CisKKyAgICAocGtnLCBwa2dmaWxlcywgcnBtZGVwcywgcGtnZGVzdCkgPSBhcmcKKyAgICBwcm92aWRlcyA9IHt9CisgICAgcmVxdWlyZXMgPSB7fQorCisgICAgciA9IHJlLmNvbXBpbGUocidbPD49XSsgK1teIF0qJykKKworICAgIGRlZiBwcm9jZXNzX2RlcHMocGlwZSwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpOgorICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgorICAgICAgICAgICAgZiA9IGxpbmUuc3BsaXQoIiAiLCAxKVswXS5zdHJpcCgpCisgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgiICIsIDEpWzFdLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJSZXF1aXJlczoiKToKKyAgICAgICAgICAgICAgICBpID0gcmVxdWlyZXMKKyAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCJQcm92aWRlczoiKToKKyAgICAgICAgICAgICAgICBpID0gcHJvdmlkZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZmlsZSA9IGYucmVwbGFjZShwa2dkZXN0ICsgIi8iICsgcGtnLCAiIikKKyAgICAgICAgICAgIGZpbGUgPSBmaWxlX3RyYW5zbGF0ZShmaWxlKQorICAgICAgICAgICAgdmFsdWUgPSBsaW5lLnNwbGl0KCI6IiwgMSlbMV0uc3RyaXAoKQorICAgICAgICAgICAgdmFsdWUgPSByLnN1YihyJyhcZzwwPiknLCB2YWx1ZSkKKworICAgICAgICAgICAgaWYgdmFsdWUuc3RhcnRzd2l0aCgicnBtbGliKCIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiB2YWx1ZSA9PSAicHl0aG9uIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlsZSBub3QgaW4gaToKKyAgICAgICAgICAgICAgICBpW2ZpbGVdID0gW10KKyAgICAgICAgICAgIGlbZmlsZV0uYXBwZW5kKHZhbHVlKQorCisgICAgICAgIHJldHVybiBwcm92aWRlcywgcmVxdWlyZXMKKworICAgIHRyeToKKyAgICAgICAgZGVwX3BvcGVuID0gc3VicHJvY2Vzcy5Qb3BlbihzaGxleC5zcGxpdChycG1kZXBzKSArIHBrZ2ZpbGVzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBwcm92aWRlcywgcmVxdWlyZXMgPSBwcm9jZXNzX2RlcHMoZGVwX3BvcGVuLnN0ZG91dCwgcGtnLCBwa2dkZXN0LCBwcm92aWRlcywgcmVxdWlyZXMpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgYmIuZXJyb3IoInJwbWRlcHM6ICclcycgY29tbWFuZCBmYWlsZWQsICclcyciICUgKHNobGV4LnNwbGl0KHJwbWRlcHMpICsgcGtnZmlsZXMsIGUpKQorICAgICAgICByYWlzZSBlCisKKyAgICByZXR1cm4gKHBrZywgcHJvdmlkZXMsIHJlcXVpcmVzKQorCisKK2RlZiByZWFkX3NobGliX3Byb3ZpZGVycyhkKToKKyAgICBpbXBvcnQgcmUKKworICAgIHNobGliX3Byb3ZpZGVyID0ge30KKyAgICBzaGxpYnNfZGlycyA9IGQuZ2V0VmFyKCdTSExJQlNESVJTJywgVHJ1ZSkuc3BsaXQoKQorICAgIGxpc3RfcmUgPSByZS5jb21waWxlKCdeKC4qKVwubGlzdCQnKQorICAgICMgR28gZnJvbSBsZWFzdCB0byBtb3N0IHNwZWNpZmljIHNpbmNlIHRoZSBsYXN0IG9uZSBmb3VuZCB3aW5zCisgICAgZm9yIGRpciBpbiByZXZlcnNlZChzaGxpYnNfZGlycyk6CisgICAgICAgIGJiLmRlYnVnKDIsICJSZWFkaW5nIHNobGliIHByb3ZpZGVycyBpbiAlcyIgJSAoZGlyKSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKGRpcik6CisgICAgICAgICAgICBtID0gbGlzdF9yZS5tYXRjaChmaWxlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkZXBfcGtnID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgIGZkID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKSkKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGZkLnJlYWRsaW5lcygpCisgICAgICAgICAgICAgICAgZmQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBzID0gbC5zdHJpcCgpLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICAgICAgaWYgc1swXSBub3QgaW4gc2hsaWJfcHJvdmlkZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBzaGxpYl9wcm92aWRlcltzWzBdXSA9IHt9CisgICAgICAgICAgICAgICAgICAgIHNobGliX3Byb3ZpZGVyW3NbMF1dW3NbMV1dID0gKGRlcF9wa2csIHNbMl0pCisgICAgcmV0dXJuIHNobGliX3Byb3ZpZGVyCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkgYi9tZXRhL2xpYi9vZS9wYWNrYWdlX21hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyZWQ0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhY2thZ2VfbWFuYWdlci5weQpAQCAtMCwwICsxLDE5MDAgQEAKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IG9zCitpbXBvcnQgZ2xvYgoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCByZQoraW1wb3J0IGJiCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBvZS51dGlscworCisKKyMgdGhpcyBjYW4gYmUgdXNlZCBieSBhbGwgUE0gYmFja2VuZHMgdG8gY3JlYXRlIHRoZSBpbmRleCBmaWxlcyBpbiBwYXJhbGxlbAorZGVmIGNyZWF0ZV9pbmRleChhcmcpOgorICAgIGluZGV4X2NtZCA9IGFyZworCisgICAgdHJ5OgorICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJyVzJyAuLi4iICUgaW5kZXhfY21kKQorICAgICAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChpbmRleF9jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuKCJJbmRleCBjcmVhdGlvbiBjb21tYW5kICclcycgZmFpbGVkIHdpdGggcmV0dXJuIGNvZGUgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGlmIHJlc3VsdDoKKyAgICAgICAgYmIubm90ZShyZXN1bHQpCisKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIEluZGV4ZXIob2JqZWN0KToKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIGRlcGxveV9kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IGRlcGxveV9kaXIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJwbUluZGV4ZXIoSW5kZXhlcik6CisgICAgZGVmIGdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3Qoc2VsZiwgYXJjaF92YXI9Tm9uZSwgb3NfdmFyPU5vbmUpOgorICAgICAgICBwYWNrYWdlX2FyY2hzID0geworICAgICAgICAgICAgJ2RlZmF1bHQnOiBbXSwKKyAgICAgICAgfQorCisgICAgICAgIHRhcmdldF9vcyA9IHsKKyAgICAgICAgICAgICdkZWZhdWx0JzogIiIsCisgICAgICAgIH0KKworICAgICAgICBpZiBhcmNoX3ZhciBpcyBub3QgTm9uZSBhbmQgb3NfdmFyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcihhcmNoX3ZhciwgVHJ1ZSkuc3BsaXQoKQorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddLnJldmVyc2UoKQorICAgICAgICAgICAgdGFyZ2V0X29zWydkZWZhdWx0J10gPSBzZWxmLmQuZ2V0VmFyKG9zX3ZhciwgVHJ1ZSkuc3RyaXAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFja2FnZV9hcmNoc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcigiUEFDS0FHRV9BUkNIUyIsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgICAgICMgYXJjaCBvcmRlciBpcyByZXZlcnNlZC4gIFRoaXMgZW5zdXJlcyB0aGUgLWJlc3QtIG1hdGNoIGlzCisgICAgICAgICAgICAjIGxpc3RlZCBmaXJzdCEKKyAgICAgICAgICAgIHBhY2thZ2VfYXJjaHNbJ2RlZmF1bHQnXS5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRhcmdldF9vc1snZGVmYXVsdCddID0gc2VsZi5kLmdldFZhcigiVEFSR0VUX09TIiwgVHJ1ZSkuc3RyaXAoKQorICAgICAgICAgICAgbXVsdGlsaWJzID0gc2VsZi5kLmdldFZhcignTVVMVElMSUJTJywgVHJ1ZSkgb3IgIiIKKyAgICAgICAgICAgIGZvciBleHQgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZWV4dCA9IGV4dC5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgaWYgbGVuKGVleHQpID4gMSBhbmQgZWV4dFswXSA9PSAnbXVsdGlsaWInOgorICAgICAgICAgICAgICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoc2VsZi5kKQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmVfa2V5ID0gIkRFRkFVTFRUVU5FX3ZpcnRjbGFzcy1tdWx0aWxpYi0iICsgZWV4dFsxXQorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3R1bmUgPSBsb2NhbGRhdGEuZ2V0VmFyKGRlZmF1bHRfdHVuZV9rZXksIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X3R1bmUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdHVuZV9rZXkgPSAiREVGQVVMVFRVTkVfTUxfIiArIGVleHRbMV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfdHVuZSA9IGxvY2FsZGF0YS5nZXRWYXIoZGVmYXVsdF90dW5lX2tleSwgRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGRlZmF1bHRfdHVuZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIkRFRkFVTFRUVU5FIiwgZGVmYXVsdF90dW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2FyY2hzW2VleHRbMV1dID0gbG9jYWxkYXRhLmdldFZhcignUEFDS0FHRV9BUkNIUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2FyY2hzW2VleHRbMV1dLnJldmVyc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X29zW2VleHRbMV1dID0gbG9jYWxkYXRhLmdldFZhcigiVEFSR0VUX09TIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkuc3RyaXAoKQorCisgICAgICAgIG1sX3ByZWZpeF9saXN0ID0gZGljdCgpCisgICAgICAgIGZvciBtbGliIGluIHBhY2thZ2VfYXJjaHM6CisgICAgICAgICAgICBpZiBtbGliID09ICdkZWZhdWx0JzoKKyAgICAgICAgICAgICAgICBtbF9wcmVmaXhfbGlzdFttbGliXSA9IHBhY2thZ2VfYXJjaHNbbWxpYl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0gPSBsaXN0KCkKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBwYWNrYWdlX2FyY2hzW21saWJdOgorICAgICAgICAgICAgICAgICAgICBpZiBhcmNoIGluIFsnYWxsJywgJ25vYXJjaCcsICdhbnknXToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1sX3ByZWZpeF9saXN0W21saWJdLmFwcGVuZChhcmNoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgbWxfcHJlZml4X2xpc3RbbWxpYl0uYXBwZW5kKG1saWIgKyAiXyIgKyBhcmNoKQorCisgICAgICAgIHJldHVybiAobWxfcHJlZml4X2xpc3QsIHRhcmdldF9vcykKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2RrX3BrZ19hcmNocyA9IChzZWxmLmQuZ2V0VmFyKCdTREtfUEFDS0FHRV9BUkNIUycsIFRydWUpIG9yICIiKS5yZXBsYWNlKCctJywgJ18nKS5zcGxpdCgpCisgICAgICAgIGFsbF9tbGJfcGtnX2FyY2hzID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKworICAgICAgICBtbGJfcHJlZml4X2xpc3QgPSBzZWxmLmdldF9tbF9wcmVmaXhfYW5kX29zX2xpc3QoKVswXQorCisgICAgICAgIGFyY2hzID0gc2V0KCkKKyAgICAgICAgZm9yIGl0ZW0gaW4gbWxiX3ByZWZpeF9saXN0OgorICAgICAgICAgICAgYXJjaHMgPSBhcmNocy51bmlvbihzZXQoaS5yZXBsYWNlKCctJywgJ18nKSBmb3IgaSBpbiBtbGJfcHJlZml4X2xpc3RbaXRlbV0pKQorCisgICAgICAgIGlmIGxlbihhcmNocykgPT0gMDoKKyAgICAgICAgICAgIGFyY2hzID0gYXJjaHMudW5pb24oc2V0KGFsbF9tbGJfcGtnX2FyY2hzKSkKKworICAgICAgICBhcmNocyA9IGFyY2hzLnVuaW9uKHNldChzZGtfcGtnX2FyY2hzKSkKKworICAgICAgICBycG1fY3JlYXRlcmVwbyA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiY3JlYXRlcmVwbyIpCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgcGtnZmVlZF9ncGdfbmFtZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfTkFNRScsIFRydWUpCisgICAgICAgICAgICBwa2dmZWVkX2dwZ19wYXNzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9GRUVEX0dQR19QQVNTUEhSQVNFX0ZJTEUnLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtnZmVlZF9ncGdfbmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHBrZ2ZlZWRfZ3BnX3Bhc3MgPSBOb25lCisgICAgICAgIGdwZ19iaW4gPSBzZWxmLmQuZ2V0VmFyKCdHUEdfQklOJywgVHJ1ZSkgb3IgXAorICAgICAgICAgICAgICAgICAgYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJncGciKQorCisgICAgICAgIGluZGV4X2NtZHMgPSBbXQorICAgICAgICByZXBvX3NpZ25fY21kcyA9IFtdCisgICAgICAgIHJwbV9kaXJzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBkYnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLCAncnBtZGInLCBhcmNoKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGJwYXRoKToKKyAgICAgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZGJwYXRoLCBUcnVlKQorICAgICAgICAgICAgYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJjaF9kaXIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGluZGV4X2NtZHMuYXBwZW5kKCIlcyAtLWRicGF0aCAlcyAtLXVwZGF0ZSAtcSAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChycG1fY3JlYXRlcmVwbywgZGJwYXRoLCBhcmNoX2RpcikpCisgICAgICAgICAgICBpZiBwa2dmZWVkX2dwZ19uYW1lOgorICAgICAgICAgICAgICAgIHJlcG9tZF9maWxlID0gb3MucGF0aC5qb2luKGFyY2hfZGlyLCAncmVwb2RhdGEnLCAncmVwb21kLnhtbCcpCisgICAgICAgICAgICAgICAgZ3BnX2NtZCA9ICIlcyAtLWRldGFjaC1zaWduIC0tYXJtb3IgLS1iYXRjaCAtLW5vLXR0eSAtLXllcyAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tcGFzc3BocmFzZS1maWxlICclcycgLXUgJyVzJyAlcyIgJSAoZ3BnX2JpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnZmVlZF9ncGdfcGFzcywgcGtnZmVlZF9ncGdfbmFtZSwgcmVwb21kX2ZpbGUpCisgICAgICAgICAgICAgICAgcmVwb19zaWduX2NtZHMuYXBwZW5kKGdwZ19jbWQpCisKKyAgICAgICAgICAgIHJwbV9kaXJzX2ZvdW5kID0gVHJ1ZQorCisgICAgICAgIGlmIG5vdCBycG1fZGlyc19mb3VuZDoKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZXJlIGFyZSBubyBwYWNrYWdlcyBpbiAlcyIgJSBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENyZWF0ZSByZXBvZGF0YQorICAgICAgICByZXN1bHQgPSBvZS51dGlscy5tdWx0aXByb2Nlc3NfZXhlYyhpbmRleF9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICAjIFNpZ24gcmVwb21kCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKHJlcG9fc2lnbl9jbWRzLCBjcmVhdGVfaW5kZXgpCisgICAgICAgIGlmIHJlc3VsdDoKKyAgICAgICAgICAgIGJiLmZhdGFsKCclcycgJSAoJ1xuJy5qb2luKHJlc3VsdCkpKQorICAgICAgICAjIENvcHkgcHVia2V5KHMpIHRvIHJlcG8KKyAgICAgICAgZGlzdHJvX3ZlcnNpb24gPSBzZWxmLmQuZ2V0VmFyKCdESVNUUk9fVkVSU0lPTicsIFRydWUpIG9yICJvZS4wIgorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdSUE1fU0lHTl9QQUNLQUdFUycsIFRydWUpID09ICcxJzoKKyAgICAgICAgICAgIHNodXRpbC5jb3B5MihzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSUE0tR1BHLUtFWS0lcycgJSBkaXN0cm9fdmVyc2lvbikpCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9TSUdOJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgc2h1dGlsLmNvcHkyKHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRkVFRF9HUEdfUFVCS0VZJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JFUE9EQVRBLUdQRy1LRVktJXMnICUgZGlzdHJvX3ZlcnNpb24pKQorCisKK2NsYXNzIE9wa2dJbmRleGVyKEluZGV4ZXIpOgorICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgYXJjaF92YXJzID0gWyJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsCisgICAgICAgICAgICAgICAgICAgICAiU0RLX1BBQ0tBR0VfQVJDSFMiLAorICAgICAgICAgICAgICAgICAgICAgIk1VTFRJTElCX0FSQ0hTIl0KKworICAgICAgICBvcGtnX2luZGV4X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1tYWtlLWluZGV4IikKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgIlBhY2thZ2VzIikpOgorICAgICAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCAiUGFja2FnZXMiKSwgInciKS5jbG9zZSgpCisKKyAgICAgICAgaW5kZXhfY21kcyA9IFtdCisgICAgICAgIGZvciBhcmNoX3ZhciBpbiBhcmNoX3ZhcnM6CisgICAgICAgICAgICBhcmNocyA9IHNlbGYuZC5nZXRWYXIoYXJjaF92YXIsIFRydWUpCisgICAgICAgICAgICBpZiBhcmNocyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcGtnc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgICAgIHBrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihwa2dzX2RpciwgIlBhY2thZ2VzIikKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBrZ3NfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwa2dzX2ZpbGUpOgorICAgICAgICAgICAgICAgICAgICBvcGVuKHBrZ3NfZmlsZSwgInciKS5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBpbmRleF9jbWRzLmFwcGVuZCgnJXMgLXIgJXMgLXAgJXMgLW0gJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BrZ19pbmRleF9jbWQsIHBrZ3NfZmlsZSwgcGtnc19maWxlLCBwa2dzX2RpcikpCisKKyAgICAgICAgaWYgbGVuKGluZGV4X2NtZHMpID09IDA6CisgICAgICAgICAgICBiYi5ub3RlKCJUaGVyZSBhcmUgbm8gcGFja2FnZXMgaW4gJXMhIiAlIHNlbGYuZGVwbG95X2RpcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIGNyZWF0ZV9pbmRleCkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIuZmF0YWwoJyVzJyAlICgnXG4nLmpvaW4ocmVzdWx0KSkpCisKKworCitjbGFzcyBEcGtnSW5kZXhlcihJbmRleGVyKToKKyAgICBkZWYgX2NyZWF0ZV9jb25maWdzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5hcHRfY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJsaXN0cyIsICJwYXJ0aWFsIikpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJhcHQuY29uZi5kIikpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5hcHRfY29uZl9kaXIsICJwcmVmZXJlbmNlcy5kIikpCisKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgInByZWZlcmVuY2VzIiksCisgICAgICAgICAgICAgICAgInciKSBhcyBwcmVmc19maWxlOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAic291cmNlcy5saXN0IiksCisgICAgICAgICAgICAgICAgIncrIikgYXMgc291cmNlc19maWxlOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggb3BlbihzZWxmLmFwdF9jb25mX2ZpbGUsICJ3IikgYXMgYXB0X2NvbmY6CisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZC5leHBhbmQoIiR7U1RBR0lOR19FVENESVJfTkFUSVZFfSIpLAorICAgICAgICAgICAgICAgICJhcHQiLCAiYXB0LmNvbmYuc2FtcGxlIikpIGFzIGFwdF9jb25mX3NhbXBsZToKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBhcHRfY29uZl9zYW1wbGUucmVhZCgpLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjUk9PVEZTIyIsICIvZGV2L251bGwiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcmUuc3ViKCIjQVBUQ09ORiMiLCBzZWxmLmFwdF9jb25mX2RpciwgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYXB0X2NvbmYud3JpdGUobGluZSArICJcbiIpCisKKyAgICBkZWYgd3JpdGVfaW5kZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5leHBhbmQoIiR7QVBUQ09ORl9UQVJHRVR9IiksCisgICAgICAgICAgICAgICAgImFwdC1mdHBhcmNoaXZlIikKKyAgICAgICAgc2VsZi5hcHRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAiYXB0LmNvbmYiKQorICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlncygpCisKKyAgICAgICAgb3MuZW52aXJvblsnQVBUX0NPTkZJRyddID0gc2VsZi5hcHRfY29uZl9maWxlCisKKyAgICAgICAgcGtnX2FyY2hzID0gc2VsZi5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgICAgIGlmIHBrZ19hcmNocyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyY2hfbGlzdCA9IHBrZ19hcmNocy5zcGxpdCgpCisgICAgICAgIHNka19wa2dfYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKCdTREtfUEFDS0FHRV9BUkNIUycsIFRydWUpCisgICAgICAgIGlmIHNka19wa2dfYXJjaHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgYSBpbiBzZGtfcGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgYSBub3QgaW4gcGtnX2FyY2hzOgorICAgICAgICAgICAgICAgICAgICBhcmNoX2xpc3QuYXBwZW5kKGEpCisKKyAgICAgICAgYWxsX21sYl9wa2dfYXJjaF9saXN0ID0gKHNlbGYuZC5nZXRWYXIoJ0FMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTJywgVHJ1ZSkgb3IgIiIpLnJlcGxhY2UoJy0nLCAnXycpLnNwbGl0KCkKKyAgICAgICAgYXJjaF9saXN0LmV4dGVuZChhcmNoIGZvciBhcmNoIGluIGFsbF9tbGJfcGtnX2FyY2hfbGlzdCBpZiBhcmNoIG5vdCBpbiBhcmNoX2xpc3QpCisKKyAgICAgICAgYXB0X2Z0cGFyY2hpdmUgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgImFwdC1mdHBhcmNoaXZlIikKKyAgICAgICAgZ3ppcCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiZ3ppcCIpCisKKyAgICAgICAgaW5kZXhfY21kcyA9IFtdCisgICAgICAgIGRlYl9kaXJzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgYXJjaF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoYXJjaF9kaXIpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGNtZCA9ICJjZCAlczsgUFNFVURPX1VOTE9BRD0xICVzIHBhY2thZ2VzIC4gPiBQYWNrYWdlczsiICUgKGFyY2hfZGlyLCBhcHRfZnRwYXJjaGl2ZSkKKworICAgICAgICAgICAgY21kICs9ICIlcyAtZmMgUGFja2FnZXMgPiBQYWNrYWdlcy5nejsiICUgZ3ppcAorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyY2hfZGlyLCAiUmVsZWFzZSIpLCAidysiKSBhcyByZWxlYXNlOgorICAgICAgICAgICAgICAgIHJlbGVhc2Uud3JpdGUoIkxhYmVsOiAlc1xuIiAlIGFyY2gpCisKKyAgICAgICAgICAgIGNtZCArPSAiUFNFVURPX1VOTE9BRD0xICVzIHJlbGVhc2UgLiA+PiBSZWxlYXNlIiAlIGFwdF9mdHBhcmNoaXZlCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluZGV4X2NtZHMuYXBwZW5kKGNtZCkKKworICAgICAgICAgICAgZGViX2RpcnNfZm91bmQgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IGRlYl9kaXJzX2ZvdW5kOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIGluICVzIiAlIHNlbGYuZGVwbG95X2RpcikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJlc3VsdCA9IG9lLnV0aWxzLm11bHRpcHJvY2Vzc19leGVjKGluZGV4X2NtZHMsIGNyZWF0ZV9pbmRleCkKKyAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgYmIuZmF0YWwoJyVzJyAlICgnXG4nLmpvaW4ocmVzdWx0KSkpCisKKworCitjbGFzcyBQa2dzTGlzdChvYmplY3QpOgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2Rpcik6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5yb290ZnNfZGlyID0gcm9vdGZzX2RpcgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUnBtUGtnc0xpc3QoUGtnc0xpc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCByb290ZnNfZGlyLCBhcmNoX3Zhcj1Ob25lLCBvc192YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJwbVBrZ3NMaXN0LCBzZWxmKS5fX2luaXRfXyhkLCByb290ZnNfZGlyKQorCisgICAgICAgIHNlbGYucnBtX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtIikKKyAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIgPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZnNfZGlyLCAndmFyL2xpYi9ycG0nKQorCisgICAgICAgIHNlbGYubWxfcHJlZml4X2xpc3QsIHNlbGYubWxfb3NfbGlzdCA9IFwKKyAgICAgICAgICAgIFJwbUluZGV4ZXIoZCwgcm9vdGZzX2RpcikuZ2V0X21sX3ByZWZpeF9hbmRfb3NfbGlzdChhcmNoX3Zhciwgb3NfdmFyKQorCisgICAgICAgICMgRGV0ZXJtaW5lIHJwbSB2ZXJzaW9uCisgICAgICAgIGNtZCA9ICIlcyAtLXZlcnNpb24iICUgc2VsZi5ycG1fY21kCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJHZXR0aW5nIHJwbSB2ZXJzaW9uIGZhaWxlZC4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorICAgICAgICBzZWxmLnJwbV92ZXJzaW9uID0gaW50KG91dHB1dC5zcGxpdCgpWy0xXS5zcGxpdCgnLicpWzBdKQorCisgICAgJycnCisgICAgVHJhbnNsYXRlIHRoZSBSUE0vU21hcnQgZm9ybWF0IG5hbWVzIHRvIHRoZSBPRSBtdWx0aWxpYiBmb3JtYXQgbmFtZXMKKyAgICAnJycKKyAgICBkZWYgX3BrZ190cmFuc2xhdGVfc21hcnRfdG9fb2Uoc2VsZiwgcGtnLCBhcmNoKToKKyAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICBuZXdfYXJjaCA9IGFyY2gKKyAgICAgICAgZml4ZWRfYXJjaCA9IGFyY2gucmVwbGFjZSgnXycsICctJykKKyAgICAgICAgZm91bmQgPSAwCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfcHJlZml4X2xpc3Q6CisgICAgICAgICAgICBmb3IgY21wX2FyY2ggaW4gc2VsZi5tbF9wcmVmaXhfbGlzdFttbGliXToKKyAgICAgICAgICAgICAgICBmaXhlZF9jbXBfYXJjaCA9IGNtcF9hcmNoLnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICAgICAgaWYgZml4ZWRfYXJjaCA9PSBmaXhlZF9jbXBfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gcGtnCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJjaCA9IGNtcF9hcmNoCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnID0gbWxpYiArICctJyArIHBrZworICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHN0cmlwIG9mZiB0aGUgJHttbGlifV8gcHJlZml4IG9uIHRoZSBhcmNoCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJjaCA9IGNtcF9hcmNoLnJlcGxhY2UobWxpYiArICdfJywgJycpCisKKyAgICAgICAgICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBidWcgMzU2NS4gU2ltcGx5IGxvb2sgdG8gc2VlIGlmIHdlCisgICAgICAgICAgICAgICAgICAgICMga25vdyBvZiBhIHBhY2thZ2Ugd2l0aCB0aGF0IG5hbWUsIGlmIG5vdCB0cnkgYWdhaW4hCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydW50aW1lLXJldmVyc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtnKQorICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGZvdW5kID09IDEgYW5kIGZpeGVkX2FyY2ggPT0gZml4ZWRfY21wX2FyY2g6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgI2JiLm5vdGUoJyVzLCAlcyAtPiAlcywgJXMnICUgKHBrZywgYXJjaCwgbmV3X3BrZywgbmV3X2FyY2gpKQorICAgICAgICByZXR1cm4gbmV3X3BrZywgbmV3X2FyY2gKKworICAgIGRlZiBfbGlzdF9wa2dfZGVwcyhzZWxmKToKKyAgICAgICAgY21kID0gW2JiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtcmVzb2x2ZSIpLAorICAgICAgICAgICAgICAgIi10Iiwgc2VsZi5pbWFnZV9ycG1saWJdCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgcGFja2FnZSBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCInZGVwcycgZm9ybWF0IGRlcGVuZGVuY3kgbGlzdGluZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBycG0gNCBzaW5jZSBycG1yZXNvbHZlIGRvZXMgbm90IHdvcmsiKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RfcGtnX2RlcHMoKQorCisgICAgICAgIGNtZCA9IHNlbGYucnBtX2NtZCArICcgLS1yb290ICcgKyBzZWxmLnJvb3Rmc19kaXIKKyAgICAgICAgY21kICs9ICcgLUQgIl9kYnBhdGggL3Zhci9saWIvcnBtIiAtcWEnCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNDoKKyAgICAgICAgICAgIGNtZCArPSAiIC0tcWYgJ1sle05BTUV9ICV7QVJDSH0gJXtWRVJTSU9OfVxuXSciCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgKz0gIiAtLXFmICdbJXtOQU1FfSAle0FSQ0h9ICV7VkVSU0lPTn0gJXtQQUNLQUdFT1JJR0lOfVxuXSciCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBiYi5ub3RlKGNtZCkKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkuc3RyaXAoKQorCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgb3V0cHV0ID0gbGlzdCgpCisgICAgICAgIGZvciBsaW5lIGluIHRtcF9vdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiBsZW4obGluZS5zdHJpcCgpKSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBwa2cgPSBsaW5lLnNwbGl0KClbMF0KKyAgICAgICAgICAgIGFyY2ggPSBsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgIHZlciA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgIyBTa2lwIEdQRyBrZXlzCisgICAgICAgICAgICBpZiBwa2cgPT0gJ2dwZy1wdWJrZXknOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICAgICAgcGtnb3JpZ2luID0gInVua25vd24iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ29yaWdpbiA9IGxpbmUuc3BsaXQoKVszXQorICAgICAgICAgICAgbmV3X3BrZywgbmV3X2FyY2ggPSBzZWxmLl9wa2dfdHJhbnNsYXRlX3NtYXJ0X3RvX29lKHBrZywgYXJjaCkKKworICAgICAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCclcyAlcycgJSAobmV3X3BrZywgbmV3X2FyY2gpKQorICAgICAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzICVzICVzJyAlIChuZXdfcGtnLCBwa2dvcmlnaW4sIG5ld19hcmNoKSkKKyAgICAgICAgICAgIGVsaWYgZm9ybWF0ID09ICJ2ZXIiOgorICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJyVzICVzICVzJyAlIChuZXdfcGtnLCBuZXdfYXJjaCwgdmVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJXMnICUgKG5ld19wa2cpKQorCisgICAgICAgICAgICBvdXRwdXQuc29ydCgpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihvdXRwdXQpCisKKworY2xhc3MgT3BrZ1BrZ3NMaXN0KFBrZ3NMaXN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcm9vdGZzX2RpciwgY29uZmlnX2ZpbGUpOgorICAgICAgICBzdXBlcihPcGtnUGtnc0xpc3QsIHNlbGYpLl9faW5pdF9fKGQsIHJvb3Rmc19kaXIpCisKKyAgICAgICAgc2VsZi5vcGtnX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZyIpCisgICAgICAgIHNlbGYub3BrZ19hcmdzID0gIi1mICVzIC1vICVzICIgJSAoY29uZmlnX2ZpbGUsIHJvb3Rmc19kaXIpCisgICAgICAgIHNlbGYub3BrZ19hcmdzICs9IHNlbGYuZC5nZXRWYXIoIk9QS0dfQVJHUyIsIFRydWUpCisKKyAgICBkZWYgbGlzdChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIG9wa2dfcXVlcnlfY21kID0gYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvcGtnLXF1ZXJ5LWhlbHBlci5weSIpCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJhcmNoIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtYSIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgY21kID0gIiVzICVzIHN0YXR1cyB8ICVzIC1mIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsIG9wa2dfcXVlcnlfY21kKQorICAgICAgICBlbGlmIGZvcm1hdCA9PSAidmVyIjoKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBzdGF0dXMgfCAlcyAtdiIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCBvcGtnX3F1ZXJ5X2NtZCkKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImRlcHMiOgorICAgICAgICAgICAgY21kID0gIiVzICVzIHN0YXR1cyB8ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsIG9wa2dfcXVlcnlfY21kKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gIiVzICVzIGxpc3RfaW5zdGFsbGVkIHwgY3V0IC1kJyAnIC1mMSIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKS5zdHJpcCgpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNhbm5vdCBnZXQgdGhlIGluc3RhbGxlZCBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgaWYgb3V0cHV0IGFuZCBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgdG1wX291dHB1dCA9ICIiCisgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgcGtnLCBwa2dfZmlsZSwgcGtnX2FyY2ggPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290ZnNfZGlyLCBwa2dfYXJjaCwgcGtnX2ZpbGUpCisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgdG1wX291dHB1dCArPSAiJXMgJXMgJXNcbiIgJSAocGtnLCBmdWxsX3BhdGgsIHBrZ19hcmNoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoKQorCisgICAgICAgICAgICBvdXRwdXQgPSB0bXBfb3V0cHV0CisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisKK2NsYXNzIERwa2dQa2dzTGlzdChQa2dzTGlzdCk6CisgICAgZGVmIGxpc3Qoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJkcGtnLXF1ZXJ5IiksCisgICAgICAgICAgICAgICAiLS1hZG1pbmRpcj0lcy92YXIvbGliL2Rwa2ciICUgc2VsZi5yb290ZnNfZGlyLAorICAgICAgICAgICAgICAgIi1XIl0KKworICAgICAgICBpZiBmb3JtYXQgPT0gImFyY2giOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2VBcmNofVxuIikKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gImZpbGUiOgorICAgICAgICAgICAgY21kLmFwcGVuZCgiLWY9JHtQYWNrYWdlfSAke1BhY2thZ2V9XyR7VmVyc2lvbn1fJHtBcmNoaXRlY3R1cmV9LmRlYiAke1BhY2thZ2VBcmNofVxuIikKKyAgICAgICAgZWxpZiBmb3JtYXQgPT0gInZlciI6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCItZj0ke1BhY2thZ2V9ICR7UGFja2FnZUFyY2h9ICR7VmVyc2lvbn1cbiIpCisgICAgICAgIGVsaWYgZm9ybWF0ID09ICJkZXBzIjoKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPVBhY2thZ2U6ICR7UGFja2FnZX1cbkRlcGVuZHM6ICR7RGVwZW5kc31cblJlY29tbWVuZHM6ICR7UmVjb21tZW5kc31cblxuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoIi1mPSR7UGFja2FnZX1cbiIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpLnN0cmlwKCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoJyAnLmpvaW4oY21kKSwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgaWYgZm9ybWF0ID09ICJmaWxlIjoKKyAgICAgICAgICAgIHRtcF9vdXRwdXQgPSAiIgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gdHVwbGUob3V0cHV0LnNwbGl0KCdcbicpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHBrZywgcGtnX2ZpbGUsIHBrZ19hcmNoID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYucm9vdGZzX2RpciwgcGtnX2FyY2gsIHBrZ19maWxlKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHRtcF9vdXRwdXQgKz0gIiVzICVzICVzXG4iICUgKHBrZywgZnVsbF9wYXRoLCBwa2dfYXJjaCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0bXBfb3V0cHV0ICs9ICIlcyAlcyAlc1xuIiAlIChwa2csIHBrZ19maWxlLCBwa2dfYXJjaCkKKworICAgICAgICAgICAgb3V0cHV0ID0gdG1wX291dHB1dAorICAgICAgICBlbGlmIGZvcm1hdCA9PSAiZGVwcyI6CisgICAgICAgICAgICBvcGtnX3F1ZXJ5X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAib3BrZy1xdWVyeS1oZWxwZXIucHkiKQorICAgICAgICAgICAgZmlsZV9vdXQgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQorICAgICAgICAgICAgZmlsZV9vdXQud3JpdGUob3V0cHV0KQorICAgICAgICAgICAgZmlsZV9vdXQuZmx1c2goKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImNhdCAlcyB8ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVfb3V0Lm5hbWUsIG9wa2dfcXVlcnlfY21kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGZpbGVfb3V0LmNsb3NlKCkKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGNvbXB1dGUgcGFja2FnZXMgZGVwZW5kZW5jaWVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgICAgIGZpbGVfb3V0LmNsb3NlKCkKKworICAgICAgICByZXR1cm4gb3V0cHV0CisKKworY2xhc3MgUGFja2FnZU1hbmFnZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBEbyBub3QgaW5zdGFudGlhdGUgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuZGVwbG95X2RpciA9IE5vbmUKKyAgICAgICAgc2VsZi5kZXBsb3lfbG9jayA9IE5vbmUKKyAgICAgICAgc2VsZi5mZWVkX3VyaXMgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfVVJJUycsIFRydWUpIG9yICIiCisgICAgICAgIHNlbGYuZmVlZF9wcmVmaXggPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0ZFRURfUFJFRklYJywgVHJ1ZSkgb3IgIiIKKworICAgICIiIgorICAgIFVwZGF0ZSB0aGUgcGFja2FnZSBtYW5hZ2VyIHBhY2thZ2UgZGF0YWJhc2UuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIiIiCisgICAgSW5zdGFsbCBhIGxpc3Qgb2YgcGFja2FnZXMuICdwa2dzJyBpcyBhIGxpc3Qgb2JqZWN0LiBJZiAnYXR0ZW1wdF9vbmx5JyBpcworICAgIFRydWUsIGluc3RhbGxhdGlvbiBmYWlsdXJlcyBhcmUgaWdub3JlZC4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBSZW1vdmUgYSBsaXN0IG9mIHBhY2thZ2VzLiAncGtncycgaXMgYSBsaXN0IG9iamVjdC4gSWYgJ3dpdGhfZGVwZW5kZW5jaWVzJworICAgIGlzIEZhbHNlLCB0aGUgYW55IGRlcGVuZGVuY2llcyBhcmUgbGVmdCBpbiBwbGFjZS4KKyAgICAiIiIKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVtb3ZlKHNlbGYsIHBrZ3MsIHdpdGhfZGVwZW5kZW5jaWVzPVRydWUpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGluZGV4IGZpbGVzCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgbGlzdF9pbnN0YWxsZWQoc2VsZiwgZm9ybWF0PU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICIiIgorICAgIEluc3RhbGwgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBiYXNlZCB1cG9uIHRoZSBsaXN0IG9mIGN1cnJlbnRseSBpbnN0YWxsZWQKKyAgICBwYWNrYWdlcyBlLmcuIGxvY2FsZXMsICotZGV2LCAqLWRiZywgZXRjLiBUaGlzIHdpbGwgb25seSBhdHRlbXB0IHRvIGluc3RhbGwKKyAgICB0aGVzZSBwYWNrYWdlcywgaWYgdGhleSBkb24ndCBleGlzdCB0aGVuIG5vIGVycm9yIHdpbGwgb2NjdXIuICBOb3RlOiBldmVyeQorICAgIGJhY2tlbmQgbmVlZHMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGV4cGxpY2l0bHkgYWZ0ZXIgdGhlIG5vcm1hbCBwYWNrYWdlCisgICAgaW5zdGFsbGF0aW9uCisgICAgIiIiCisgICAgZGVmIGluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLCBnbG9icz1Ob25lKToKKyAgICAgICAgIyB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyB0byBhIGZpbGUgYmVjYXVzZSB0aGUKKyAgICAgICAgIyBvZS1wa2dkYXRhLXV0aWwgcmVhZHMgaXQgZnJvbSBhIGZpbGUKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9wa2dzLnR4dCIpCisgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19maWxlLCAidysiKSBhcyBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLndyaXRlKHNlbGYubGlzdF9pbnN0YWxsZWQoImFyY2giKSkKKworICAgICAgICBpZiBnbG9icyBpcyBOb25lOgorICAgICAgICAgICAgZ2xvYnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKQorICAgICAgICAgICAgc3BsaXRfbGluZ3VhcyA9IHNldCgpCisKKyAgICAgICAgICAgIGZvciB0cmFuc2xhdGlvbiBpbiBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9MSU5HVUFTJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5ndWFzLmFkZCh0cmFuc2xhdGlvbikKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5ndWFzLmFkZCh0cmFuc2xhdGlvbi5zcGxpdCgnLScpWzBdKQorCisgICAgICAgICAgICBzcGxpdF9saW5ndWFzID0gc29ydGVkKHNwbGl0X2xpbmd1YXMpCisKKyAgICAgICAgICAgIGZvciBsYW5nIGluIHNwbGl0X2xpbmd1YXM6CisgICAgICAgICAgICAgICAgZ2xvYnMgKz0gIiAqLWxvY2FsZS0lcyIgJSBsYW5nCisKKyAgICAgICAgaWYgZ2xvYnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9IFtiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9lLXBrZ2RhdGEtdXRpbCIpLAorICAgICAgICAgICAgICAgIi1wIiwgc2VsZi5kLmdldFZhcignUEtHREFUQV9ESVInLCBUcnVlKSwgImdsb2IiLCBpbnN0YWxsZWRfcGtnc19maWxlLAorICAgICAgICAgICAgICAgZ2xvYnNdCisgICAgICAgIGV4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREVfQ09NUExFTUVOVEFSWScsIFRydWUpCisgICAgICAgIGlmIGV4Y2x1ZGU6CisgICAgICAgICAgICBjbWQuZXh0ZW5kKFsnLXgnLCBleGNsdWRlXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIC4uLiIpCisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGNvbXB1dGUgY29tcGxlbWVudGFyeSBwYWNrYWdlcyBsaXN0LiBDb21tYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICInJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICgnICcuam9pbihjbWQpLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmluc3RhbGwoY29tcGxlbWVudGFyeV9wa2dzLnNwbGl0KCksIGF0dGVtcHRfb25seT1UcnVlKQorCisgICAgZGVmIGRlcGxveV9kaXJfbG9jayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZXBsb3lfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImRlcGxveV9kaXIgaXMgbm90IHNldCEiKQorCisgICAgICAgIGxvY2tfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgImRlcGxveS5sb2NrIikKKworICAgICAgICBzZWxmLmRlcGxveV9sb2NrID0gYmIudXRpbHMubG9ja2ZpbGUobG9ja19maWxlX25hbWUpCisKKyAgICBkZWYgZGVwbG95X2Rpcl91bmxvY2soc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVwbG95X2xvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGJiLnV0aWxzLnVubG9ja2ZpbGUoc2VsZi5kZXBsb3lfbG9jaykKKworICAgICAgICBzZWxmLmRlcGxveV9sb2NrID0gTm9uZQorCisKK2NsYXNzIFJwbVBNKFBhY2thZ2VNYW5hZ2VyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgZCwKKyAgICAgICAgICAgICAgICAgdGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgdGFyZ2V0X3ZlbmRvciwKKyAgICAgICAgICAgICAgICAgdGFza19uYW1lPSd0YXJnZXQnLAorICAgICAgICAgICAgICAgICBwcm92aWRlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBhcmNoX3Zhcj1Ob25lLAorICAgICAgICAgICAgICAgICBvc192YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKFJwbVBNLCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMgPSB0YXJnZXRfcm9vdGZzCisgICAgICAgIHNlbGYudGFyZ2V0X3ZlbmRvciA9IHRhcmdldF92ZW5kb3IKKyAgICAgICAgc2VsZi50YXNrX25hbWUgPSB0YXNrX25hbWUKKyAgICAgICAgc2VsZi5wcm92aWRlbmFtZSA9IHByb3ZpZGVuYW1lCisgICAgICAgIHNlbGYuZnVsbHBrZ2xpc3QgPSBsaXN0KCkKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9SUE0nLCBUcnVlKQorICAgICAgICBzZWxmLmV0Y3JwbV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAiZXRjL3JwbSIpCisgICAgICAgIHNlbGYuaW5zdGFsbF9kaXJfbmFtZSA9ICJvZV9pbnN0YWxsIgorICAgICAgICBzZWxmLmluc3RhbGxfZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLmluc3RhbGxfZGlyX25hbWUpCisgICAgICAgIHNlbGYucnBtX2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAicnBtIikKKyAgICAgICAgc2VsZi5zbWFydF9jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgInNtYXJ0IikKKyAgICAgICAgc2VsZi5zbWFydF9vcHQgPSAiLS1sb2ctbGV2ZWw9d2FybmluZyAtLWRhdGEtZGlyPSIgKyBvcy5wYXRoLmpvaW4odGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXIvbGliL3NtYXJ0JykKKyAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vc2NyaXB0bGV0X3dyYXBwZXInKQorICAgICAgICBzZWxmLnNvbHV0aW9uX21hbmlmZXN0ID0gc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZC8lc19zb2x1dGlvbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhc2tfbmFtZSkKKyAgICAgICAgc2VsZi5zYXZlZF9ycG1saWIgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkLyVzJyAlIHNlbGYudGFza19uYW1lKQorICAgICAgICBzZWxmLmltYWdlX3JwbWxpYiA9IG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsICd2YXIvbGliL3JwbScpCisKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQnKSk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKQorCisgICAgICAgIHNlbGYuaW5kZXhlciA9IFJwbUluZGV4ZXIoc2VsZi5kLCBzZWxmLmRlcGxveV9kaXIpCisgICAgICAgIHNlbGYucGtnc19saXN0ID0gUnBtUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMsIGFyY2hfdmFyLCBvc192YXIpCisgICAgICAgIHNlbGYucnBtX3ZlcnNpb24gPSBzZWxmLnBrZ3NfbGlzdC5ycG1fdmVyc2lvbgorCisgICAgICAgIHNlbGYubWxfcHJlZml4X2xpc3QsIHNlbGYubWxfb3NfbGlzdCA9IHNlbGYuaW5kZXhlci5nZXRfbWxfcHJlZml4X2FuZF9vc19saXN0KGFyY2hfdmFyLCBvc192YXIpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBMaXN0IG11c3QgYmUgcHJlZmVyZWQgdG8gbGVhc3QgcHJlZmVycmVkIG9yZGVyCisgICAgICAgIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmEgPSBzZXQoKQorICAgICAgICBwbGF0Zm9ybV9leHRyYSA9IHNldCgpCisgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfb3NfbGlzdDoKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQorICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gYmJleHRlbmR2YXJpYW50OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9wbGF0Zm9ybV9leHRyYS5hZGQocGx0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9leHRyYS5hZGQocGx0KQorCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gcGxhdGZvcm1fZXh0cmEudW5pb24oZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSkKKworICAgICAgICBhcmNoX2xpc3QgPSBbXQorICAgICAgICBmb3IgY2Fub25pY2FsX2FyY2ggaW4gcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICBhcmNoID0gY2Fub25pY2FsX2FyY2guc3BsaXQoJy0nKVswXQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYXJjaF9saXN0LmFwcGVuZChhcmNoKQorCisgICAgICAgIHVyaV9pdGVyYXRvciA9IDAKKyAgICAgICAgY2hhbm5lbF9wcmlvcml0eSA9IDEwICsgNSAqIGxlbihzZWxmLmZlZWRfdXJpcy5zcGxpdCgpKSAqIGxlbihhcmNoX2xpc3QpCisKKyAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgZnVsbF91cmkgPSB1cmkKKyAgICAgICAgICAgIGlmIHNlbGYuZmVlZF9wcmVmaXg6CisgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBTbWFydCBjaGFubmVsIHVybCVkJXMgKCVzKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHVyaV9pdGVyYXRvciwgYXJjaCwgY2hhbm5lbF9wcmlvcml0eSkpCisgICAgICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tYWRkIHVybCVkLSVzIHR5cGU9cnBtLW1kIGJhc2V1cmw9JXMvJXMgLXknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHVyaV9pdGVyYXRvciwgYXJjaCwgZnVsbF91cmksIGFyY2gpKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY2hhbm5lbCAtLXNldCB1cmwlZC0lcyBwcmlvcml0eT0lZCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXJpX2l0ZXJhdG9yLCBhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBjaGFubmVsX3ByaW9yaXR5IC09IDUKKyAgICAgICAgICAgIHVyaV9pdGVyYXRvciArPSAxCisKKyAgICAnJycKKyAgICBDcmVhdGUgY29uZmlncyBmb3IgcnBtIGFuZCBzbWFydCwgYW5kIG11bHRpbGliIGlzIHN1cHBvcnRlZAorICAgICcnJworICAgIGRlZiBjcmVhdGVfY29uZmlncyhzZWxmKToKKyAgICAgICAgdGFyZ2V0X2FyY2ggPSBzZWxmLmQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgICAgIHBsYXRmb3JtID0gJyVzJXMtJXMnICUgKHRhcmdldF9hcmNoLnJlcGxhY2UoJy0nLCAnXycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF92ZW5kb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWxfb3NfbGlzdFsnZGVmYXVsdCddKQorCisgICAgICAgICMgTGlzdCBtdXN0IGJlIHByZWZlcmVkIHRvIGxlYXN0IHByZWZlcnJlZCBvcmRlcgorICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhID0gbGlzdCgpCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gbGlzdCgpCisgICAgICAgIGJiZXh0ZW5kdmFyaWFudCA9IHNlbGYuZC5nZXRWYXIoJ0JCRVhURU5EVkFSSUFOVCcsIFRydWUpIG9yICIiCisgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfb3NfbGlzdDoKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYubWxfcHJlZml4X2xpc3RbbWxpYl06CisgICAgICAgICAgICAgICAgcGx0ID0gYXJjaC5yZXBsYWNlKCctJywgJ18nKSArICctLiotJyArIHNlbGYubWxfb3NfbGlzdFttbGliXQorICAgICAgICAgICAgICAgIGlmIG1saWIgPT0gYmJleHRlbmR2YXJpYW50OgorICAgICAgICAgICAgICAgICAgICBpZiBwbHQgbm90IGluIGRlZmF1bHRfcGxhdGZvcm1fZXh0cmE6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3BsYXRmb3JtX2V4dHJhLmFwcGVuZChwbHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGx0IG5vdCBpbiBwbGF0Zm9ybV9leHRyYToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtX2V4dHJhLmFwcGVuZChwbHQpCisgICAgICAgIHBsYXRmb3JtX2V4dHJhID0gZGVmYXVsdF9wbGF0Zm9ybV9leHRyYSArIHBsYXRmb3JtX2V4dHJhCisKKyAgICAgICAgc2VsZi5fY3JlYXRlX2NvbmZpZ3MocGxhdGZvcm0sIHBsYXRmb3JtX2V4dHJhKQorCisgICAgZGVmIF9pbnZva2Vfc21hcnQoc2VsZiwgYXJncyk6CisgICAgICAgIGNtZCA9ICIlcyAlcyAlcyIgJSAoc2VsZi5zbWFydF9jbWQsIHNlbGYuc21hcnRfb3B0LCBhcmdzKQorICAgICAgICAjIGJiLm5vdGUoY21kKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21wbGVtZW50YXJ5X3BrZ3MgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAgICAgICAgIyBiYi5ub3RlKGNvbXBsZW1lbnRhcnlfcGtncykKKyAgICAgICAgICAgIHJldHVybiBjb21wbGVtZW50YXJ5X3BrZ3MKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiQ291bGQgbm90IGludm9rZSBzbWFydC4gQ29tbWFuZCAiCisgICAgICAgICAgICAgICAgICAgICAiJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgZGVmIF9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc2VsZiwgcGtnLCBmZWVkX2FyY2hzKToKKyAgICAgICAgZm9yIGFyY2ggaW4gZmVlZF9hcmNoczoKKyAgICAgICAgICAgIGFyY2ggPSBhcmNoLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICByZWdleF9tYXRjaCA9IHJlLmNvbXBpbGUociJeJXMtW14tXSotW14tXSpAJXMkIiAlIFwKKyAgICAgICAgICAgICAgICAocmUuZXNjYXBlKHBrZyksIHJlLmVzY2FwZShhcmNoKSkpCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bGxwa2dsaXN0OgorICAgICAgICAgICAgICAgIGlmIHJlZ2V4X21hdGNoLm1hdGNoKHApIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAjIEZpcnN0IGZvdW5kIGlzIGJlc3QgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgIyBiYi5ub3RlKCclcyAtPiAlcycgJSAocGtnLCBwa2cgKyAnQCcgKyBhcmNoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBrZyArICdAJyArIGFyY2gKKworICAgICAgICAjIFNlYXJjaCBwcm92aWRlcyBpZiBub3QgZm91bmQgYnkgcGtnbmFtZS4KKyAgICAgICAgYmIubm90ZSgnTm90IGZvdW5kICVzIGJ5IG5hbWUsIHNlYXJjaGluZyBwcm92aWRlcyAuLi4nICUgcGtnKQorICAgICAgICBjbWQgPSAiJXMgJXMgcXVlcnkgLS1wcm92aWRlcyAlcyAtLXNob3ctZm9ybWF0PSckbmFtZS0kdmVyc2lvbiciICUgXAorICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIHBrZykKKyAgICAgICAgY21kICs9ICIgfCBzZWQgLW5lICdzLyAqUHJvdmlkZXM6Ly9wJyIKKyAgICAgICAgYmIubm90ZSgnY21kOiAlcycgJSBjbWQpCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICAgICAjIEZvdW5kIGEgcHJvdmlkZXIKKyAgICAgICAgaWYgb3V0cHV0OgorICAgICAgICAgICAgYmIubm90ZSgnRm91bmQgcHJvdmlkZXJzIGZvciAlczogJXMnICUgKHBrZywgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvciBwIGluIG91dHB1dC5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZvciBhcmNoIGluIGZlZWRfYXJjaHM6CisgICAgICAgICAgICAgICAgICAgIGFyY2ggPSBhcmNoLnJlcGxhY2UoJy0nLCAnXycpCisgICAgICAgICAgICAgICAgICAgIGlmIHAucnN0cmlwKCkuZW5kc3dpdGgoJ0AnICsgYXJjaCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcAorCisgICAgICAgIHJldHVybiAiIgorCisgICAgJycnCisgICAgVHJhbnNsYXRlIHRoZSBPRSBtdWx0aWxpYiBmb3JtYXQgbmFtZXMgdG8gdGhlIFJQTS9TbWFydCBmb3JtYXQgbmFtZXMKKyAgICBJdCBzZWFyY2hlZCB0aGUgUlBNL1NtYXJ0IGZvcm1hdCBuYW1lcyBpbiBwcm9iYWJsZSBtdWx0aWxpYiBmZWVkcyBmaXJzdCwKKyAgICBhbmQgdGhlbiBzZWFyY2hlZCB0aGUgZGVmYXVsdCBiYXNlIGZlZWQuCisgICAgJycnCisgICAgZGVmIF9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIG5ld19wa2dzID0gbGlzdCgpCisKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAgICAgIyBTZWFyY2ggbmV3X3BrZyBpbiBwcm9iYWJsZSBtdWx0aWxpYnMgZmlyc3QKKyAgICAgICAgICAgIGZvciBtbGliIGluIHNlbGYubWxfcHJlZml4X2xpc3Q6CisgICAgICAgICAgICAgICAgIyBKdW1wIHRoZSBkZWZhdWx0IGFyY2hzCisgICAgICAgICAgICAgICAgaWYgbWxpYiA9PSAnZGVmYXVsdCc6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBzdWJzdCA9IHBrZy5yZXBsYWNlKG1saWIgKyAnLScsICcnKQorICAgICAgICAgICAgICAgICMgaWYgdGhlIHBrZyBpbiB0aGlzIG11bHRpbGliIGZlZWQKKyAgICAgICAgICAgICAgICBpZiBzdWJzdCAhPSBwa2c6CisgICAgICAgICAgICAgICAgICAgIGZlZWRfYXJjaHMgPSBzZWxmLm1sX3ByZWZpeF9saXN0W21saWJdCisgICAgICAgICAgICAgICAgICAgIG5ld19wa2cgPSBzZWxmLl9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMoc3Vic3QsIGZlZWRfYXJjaHMpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBGYWlsZWQgdG8gdHJhbnNsYXRlLCBwYWNrYWdlIG5vdCBmb3VuZCEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycl9tc2cgPSAnJXMgbm90IGZvdW5kIGluIHRoZSAlcyBmZWVkcyAoJXMpLlxuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCBtbGliLCAiICIuam9pbihmZWVkX2FyY2hzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhdHRlbXB0X29ubHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgICAgICBiYi53YXJuKGVycl9tc2cpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGtncy5hcHBlbmQobmV3X3BrZykKKworICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIEFwcGFyZW50bHkgbm90IGEgbXVsdGlsaWIgcGFja2FnZS4uLgorICAgICAgICAgICAgaWYgcGtnID09IG5ld19wa2c6CisgICAgICAgICAgICAgICAgIyBTZWFyY2ggbmV3X3BrZyBpbiBkZWZhdWx0IGFyY2hzCisgICAgICAgICAgICAgICAgZGVmYXVsdF9hcmNocyA9IHNlbGYubWxfcHJlZml4X2xpc3RbJ2RlZmF1bHQnXQorICAgICAgICAgICAgICAgIG5ld19wa2cgPSBzZWxmLl9zZWFyY2hfcGtnX25hbWVfaW5fZmVlZHMocGtnLCBkZWZhdWx0X2FyY2hzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdfcGtnOgorICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gJyVzIG5vdCBmb3VuZCBpbiB0aGUgYmFzZSBmZWVkcyAoJXMpLlxuJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csICcgJy5qb2luKGRlZmF1bHRfYXJjaHMpKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyArPSAiICIuam9pbihzZWxmLmZ1bGxwa2dsaXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoZXJyX21zZykKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybihlcnJfbXNnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG5ld19wa2dzLmFwcGVuZChuZXdfcGtnKQorCisgICAgICAgIHJldHVybiBuZXdfcGtncworCisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBwbGF0Zm9ybSwgcGxhdGZvcm1fZXh0cmEpOgorICAgICAgICAjIFNldHVwIGJhc2Ugc3lzdGVtIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgUlBNIHBsYXRmb3JtIHNldHRpbmdzIikKKworICAgICAgICAjIENvbmZpZ3VyZSBpbnRlcm5hbCBSUE0gZW52aXJvbm1lbnQgd2hlbiB1c2luZyBTbWFydAorICAgICAgICBvcy5lbnZpcm9uWydSUE1fRVRDUlBNJ10gPSBzZWxmLmV0Y3JwbV9kaXIKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZXRjcnBtX2RpcikKKworICAgICAgICAjIFNldHVwIHRlbXBvcmFyeSBkaXJlY3RvcnkgLS0gaW5zdGFsbC4uLgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmluc3RhbGxfZGlyX3BhdGgpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW5zdGFsbF9kaXJfcGF0aCwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyX3BhdGgsICd0bXAnKSkKKworICAgICAgICBjaGFubmVsX3ByaW9yaXR5ID0gNQorICAgICAgICBwbGF0Zm9ybV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5ldGNycG1fZGlyLCAicGxhdGZvcm0iKQorICAgICAgICBzZGtvcyA9IHNlbGYuZC5nZXRWYXIoIlNES19PUyIsIFRydWUpCisgICAgICAgIHdpdGggb3BlbihwbGF0Zm9ybV9kaXIsICJ3KyIpIGFzIHBsYXRmb3JtX2ZkOgorICAgICAgICAgICAgcGxhdGZvcm1fZmQud3JpdGUocGxhdGZvcm0gKyAnXG4nKQorICAgICAgICAgICAgZm9yIHB0IGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgKz0gNQorICAgICAgICAgICAgICAgIGlmIHNka29zOgorICAgICAgICAgICAgICAgICAgICB0bXAgPSByZS5zdWIoIi0lcyQiICUgc2Rrb3MsICItJXNcbiIgJSBzZGtvcywgcHQpCisgICAgICAgICAgICAgICAgdG1wID0gcmUuc3ViKCItbGludXguKiQiLCAiLWxpbnV4LipcbiIsIHRtcCkKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybV9mZC53cml0ZSh0bXApCisKKyAgICAgICAgIyBUZWxsIFJQTSB0aGF0IHRoZSAiLyIgZGlyZWN0b3J5IGV4aXN0IGFuZCBpcyBhdmFpbGFibGUKKyAgICAgICAgYmIubm90ZSgiY29uZmlndXJpbmcgUlBNIHN5c3RlbSBwcm92aWRlcyIpCisgICAgICAgIHN5c2luZm9fZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZXRjcnBtX2RpciwgInN5c2luZm8iKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3lzaW5mb19kaXIpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3lzaW5mb19kaXIsICJEaXJuYW1lcyIpLCAidysiKSBhcyBkaXJuYW1lczoKKyAgICAgICAgICAgIGRpcm5hbWVzLndyaXRlKCIvXG4iKQorCisgICAgICAgIGlmIHNlbGYucHJvdmlkZW5hbWU6CisgICAgICAgICAgICBwcm92aWRlbmFtZV9kaXIgPSBvcy5wYXRoLmpvaW4oc3lzaW5mb19kaXIsICJQcm92aWRlbmFtZSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocHJvdmlkZW5hbWVfZGlyKToKKyAgICAgICAgICAgICAgICBwcm92aWRlbmFtZV9jb250ZW50ID0gJ1xuJy5qb2luKHNlbGYucHJvdmlkZW5hbWUpCisgICAgICAgICAgICAgICAgcHJvdmlkZW5hbWVfY29udGVudCArPSAnXG4nCisgICAgICAgICAgICAgICAgb3Blbihwcm92aWRlbmFtZV9kaXIsICJ3KyIpLndyaXRlKHByb3ZpZGVuYW1lX2NvbnRlbnQpCisKKyAgICAgICAgIyBDb25maWd1cmUgUlBNLi4uIHdlIGVuZm9yY2UgdGhlc2Ugc2V0dGluZ3MhCisgICAgICAgIGJiLm5vdGUoImNvbmZpZ3VyaW5nIFJQTSBEQiBzZXR0aW5ncyIpCisgICAgICAgICMgQWZ0ZXIgY2hhbmdlIHRoZSBfX2RiLiogY2FjaGUgc2l6ZSwgbG9nIGZpbGUgd2lsbCBub3QgYmUKKyAgICAgICAgIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSwgdGhhdCB3aWxsIHJhaXNlIHNvbWUgd2FybmluZ3MsCisgICAgICAgICMgc28gdG91Y2ggYSBiYXJlIGxvZyBmb3IgcnBtIHdyaXRlIGludG8gaXQuCisgICAgICAgIGlmIHNlbGYucnBtX3ZlcnNpb24gPT0gNToKKyAgICAgICAgICAgIHJwbWxpYl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9ycG1saWIsICdsb2cnLCAnbG9nLjAwMDAwMDAwMDEnKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHJwbWxpYl9sb2cpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9ycG1saWIsICdsb2cnKSkKKyAgICAgICAgICAgICAgICBvcGVuKHJwbWxpYl9sb2csICd3KycpLmNsb3NlKCkKKworICAgICAgICAgICAgREJfQ09ORklHX0NPTlRFTlQgPSAiIyA9PT09PT09PT09PT09PT09IEVudmlyb25tZW50XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2RhdGFfZGlyIC5cbiIgXAorICAgICAgICAgICAgICAgICJzZXRfY3JlYXRlX2RpciAuXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2xnX2RpciAuL2xvZ1xuIiBcCisgICAgICAgICAgICAgICAgInNldF90bXBfZGlyIC4vdG1wXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2ZsYWdzIGRiX2xvZ19hdXRvcmVtb3ZlIG9uXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyAtLSB0aHJlYWRfY291bnQgbXVzdCBiZSA+PSA4XG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X3RocmVhZF9jb3VudCA2NFxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBMb2dnaW5nXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICAgICAiIyA9PT09PT09PT09PT09PT09IE1lbW9yeSBQb29sXG4iIFwKKyAgICAgICAgICAgICAgICAic2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMFxuIiBcCisgICAgICAgICAgICAgICAgInNldF9tcF9tbWFwc2l6ZSAyNjg0MzU0NTZcbiIgXAorICAgICAgICAgICAgICAgICJcbiIgXAorICAgICAgICAgICAgICAgICIjID09PT09PT09PT09PT09PT0gTG9ja2luZ1xuIiBcCisgICAgICAgICAgICAgICAgInNldF9sa19tYXhfbG9ja3MgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X2xvY2tlcnMgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJzZXRfbGtfbWF4X29iamVjdHMgMTYzODRcbiIgXAorICAgICAgICAgICAgICAgICJtdXRleF9zZXRfbWF4IDE2Mzg0MFxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIiMgPT09PT09PT09PT09PT09PSBSZXBsaWNhdGlvblxuIgorCisgICAgICAgICAgICBkYl9jb25maWdfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuaW1hZ2VfcnBtbGliLCAnREJfQ09ORklHJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkYl9jb25maWdfZGlyKToKKyAgICAgICAgICAgICAgICBvcGVuKGRiX2NvbmZpZ19kaXIsICd3KycpLndyaXRlKERCX0NPTkZJR19DT05URU5UKQorCisgICAgICAgICMgQ3JlYXRlIGRhdGFiYXNlIHNvIHRoYXQgc21hcnQgZG9lc24ndCBjb21wbGFpbiAobGF6eSBpbml0KQorICAgICAgICBvcHQgPSAiLXFhIgorICAgICAgICBpZiBzZWxmLnJwbV92ZXJzaW9uID09IDQ6CisgICAgICAgICAgICBvcHQgPSAiLS1pbml0ZGIiCisgICAgICAgIGNtZCA9ICIlcyAtLXJvb3QgJXMgLS1kYnBhdGggL3Zhci9saWIvcnBtICVzID4gL2Rldi9udWxsIiAlICgKKyAgICAgICAgICAgICAgc2VsZi5ycG1fY21kLCBzZWxmLnRhcmdldF9yb290ZnMsIG9wdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIkNyZWF0ZSBycG0gZGF0YWJhc2UgZmFpbGVkLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICMgSW1wb3J0IEdQRyBrZXkgdG8gUlBNIGRhdGFiYXNlIG9mIHRoZSB0YXJnZXQgc3lzdGVtCisgICAgICAgIGlmIHNlbGYuZC5nZXRWYXIoJ1JQTV9TSUdOX1BBQ0tBR0VTJywgVHJ1ZSkgPT0gJzEnOgorICAgICAgICAgICAgcHVia2V5X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdSUE1fR1BHX1BVQktFWScsIFRydWUpCisgICAgICAgICAgICBjbWQgPSAiJXMgLS1yb290ICVzIC0tZGJwYXRoIC92YXIvbGliL3JwbSAtLWltcG9ydCAlcyA+IC9kZXYvbnVsbCIgJSAoCisgICAgICAgICAgICAgICAgICBzZWxmLnJwbV9jbWQsIHNlbGYudGFyZ2V0X3Jvb3RmcywgcHVia2V5X3BhdGgpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKworICAgICAgICAjIENvbmZpZ3VyZSBzbWFydAorICAgICAgICBiYi5ub3RlKCJjb25maWd1cmluZyBTbWFydCBzZXR0aW5ncyIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLXJvb3Q9JXMnICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tZGJwYXRoPS92YXIvbGliL3JwbScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3Zhcj0lcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbG9jYWxzdGF0ZWRpcicsIFRydWUpKQorICAgICAgICBjbWQgPSAiY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX3RtcHBhdGg9LyVzL3RtcCIgJSAoc2VsZi5pbnN0YWxsX2Rpcl9uYW1lKQorCisgICAgICAgIHByZWZlcl9jb2xvciA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QUkVGRVJfRUxGX0FSQ0gnLCBUcnVlKQorICAgICAgICBpZiBwcmVmZXJfY29sb3I6CisgICAgICAgICAgICBpZiBwcmVmZXJfY29sb3Igbm90IGluIFsnMCcsICcxJywgJzInLCAnNCddOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIFJQTV9QUkVGRVJfRUxGX0FSQ0g6ICVzLCBpdCBzaG91bGQgYmUgb25lIG9mOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0MTogRUxGMzIgd2luc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0MjogRUxGNjQgd2luc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIlx0NDogRUxGNjQgTjMyIHdpbnMgKG1pcHM2NCBvciBtaXBzNjRlbCBvbmx5KSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmVyX2NvbG9yKQorICAgICAgICAgICAgaWYgcHJlZmVyX2NvbG9yID09ICI0IiBhbmQgc2VsZi5kLmdldFZhcigiVFVORV9BUkNIIiwgVHJ1ZSkgbm90IGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbWlwczY0JywgJ21pcHM2NGVsJ106CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoIlJQTV9QUkVGRVJfRUxGX0FSQ0ggPSBcIjRcIiBpcyBmb3IgbWlwczY0IG9yIG1pcHM2NGVsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib25seS4iKQorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWV4dHJhLW1hY3Jvcy5fcHJlZmVyX2NvbG9yPSVzJworICAgICAgICAgICAgICAgICAgICAgICAgJSBwcmVmZXJfY29sb3IpCisKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KGNtZCkKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zZXQgcnBtLWlnbm9yZXNpemU9MScpCisKKyAgICAgICAgIyBXcml0ZSBjb21tb24gY29uZmlndXJhdGlvbiBmb3IgaG9zdCBhbmQgdGFyZ2V0IHVzYWdlCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1ub2xpbmt0b3M9MScpCisgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1ub3BhcmVudGRpcnM9MScpCisgICAgICAgIGNoZWNrX3NpZ25hdHVyZSA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9DSEVDS19TSUdOQVRVUkVTJywgVHJ1ZSkKKyAgICAgICAgaWYgY2hlY2tfc2lnbmF0dXJlIGFuZCBjaGVja19zaWduYXR1cmUuc3RyaXAoKSA9PSAiMCI6CisgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tY2hlY2stc2lnbmF0dXJlcz1mYWxzZScpCisgICAgICAgIGZvciBpIGluIHNlbGYuZC5nZXRWYXIoJ0JBRF9SRUNPTU1FTkRBVElPTlMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdmbGFnIC0tc2V0IGlnbm9yZS1yZWNvbW1lbmRzICVzJyAlIGkpCisKKyAgICAgICAgIyBEbyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGhlcmUsIHRvIGF2b2lkIHRoZW0gYmVpbmcKKyAgICAgICAgIyBzYXZlZCBmb3IgZmllbGQgdXBncmFkZQorICAgICAgICBpZiBzZWxmLmQuZ2V0VmFyKCdOT19SRUNPTU1FTkRBVElPTlMnLCBUcnVlKS5zdHJpcCgpID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IGlnbm9yZS1hbGwtcmVjb21tZW5kcz0xJykKKyAgICAgICAgcGtnX2V4Y2x1ZGUgPSBzZWxmLmQuZ2V0VmFyKCdQQUNLQUdFX0VYQ0xVREUnLCBUcnVlKSBvciAiIgorICAgICAgICBmb3IgaSBpbiBwa2dfZXhjbHVkZS5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdmbGFnIC0tc2V0IGV4Y2x1ZGUtcGFja2FnZXMgJXMnICUgaSkKKworICAgICAgICAjIE9wdGlvbmFsIGRlYnVnZ2luZworICAgICAgICAjIHNlbGYuX2ludm9rZV9zbWFydCgnY29uZmlnIC0tc2V0IHJwbS1sb2ctbGV2ZWw9ZGVidWcnKQorICAgICAgICAjIGNtZCA9ICdjb25maWcgLS1zZXQgcnBtLWxvZy1maWxlPS90bXAvc21hcnQtZGVidWctbG9nZmlsZScKKyAgICAgICAgIyBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQorICAgICAgICBjaF9hbHJlYWR5X2FkZGVkID0gW10KKyAgICAgICAgZm9yIGNhbm9uaWNhbF9hcmNoIGluIHBsYXRmb3JtX2V4dHJhOgorICAgICAgICAgICAgYXJjaCA9IGNhbm9uaWNhbF9hcmNoLnNwbGl0KCctJylbMF0KKyAgICAgICAgICAgIGFyY2hfY2hhbm5lbCA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcmNoX2NoYW5uZWwpIGFuZCBub3QgYXJjaCBpbiBjaF9hbHJlYWR5X2FkZGVkOgorICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBTbWFydCBjaGFubmVsICVzICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCBjaGFubmVsX3ByaW9yaXR5KSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgJXMgdHlwZT1ycG0tbWQgYmFzZXVybD0lcyAteScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYXJjaCwgYXJjaF9jaGFubmVsKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1zZXQgJXMgcHJpb3JpdHk9JWQnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIGNoYW5uZWxfcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIGNoYW5uZWxfcHJpb3JpdHkgLT0gNQorCisgICAgICAgICAgICAgICAgY2hfYWxyZWFkeV9hZGRlZC5hcHBlbmQoYXJjaCkKKworICAgICAgICBiYi5ub3RlKCdhZGRpbmcgU21hcnQgUlBNIERCIGNoYW5uZWwnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgcnBtc3lzIHR5cGU9cnBtLXN5cyAteScpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgaW5zdGFsbCBzY3JpcHRsZXQgd3JhcHBlci4KKyAgICAgICAgIyBTY3JpcHRzIG5lZWQgdG8gYmUgb3JkZXJlZCB3aGVuIGV4ZWN1dGVkLCB0aGlzIGVuc3VyZXMgbnVtZXJpYyBvcmRlci4KKyAgICAgICAgIyBJZiB3ZSBldmVyIHJ1biBpbnRvIG5lZWRpbmcgbW9yZSB0aGUgODk5IHNjcmlwdHMsIHdlJ2xsIGhhdmUgdG8uCisgICAgICAgICMgY2hhbmdlIG51bSB0byBzdGFydCB3aXRoIDEwMDAuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5ycG1fdmVyc2lvbiA9PSA0OgorICAgICAgICAgICAgc2NyaXB0bGV0Y21kID0gIiQyICQzICQ0XG4iCisgICAgICAgICAgICBzY3JpcHRwYXRoID0gIiQzIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2NyaXB0bGV0Y21kID0gIiQyICQxLyQzICQ0XG4iCisgICAgICAgICAgICBzY3JpcHRwYXRoID0gIiQxLyQzIgorCisgICAgICAgIFNDUklQVExFVF9GT1JNQVQgPSAiIyEvYmluL2Jhc2hcbiIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAiZXhwb3J0IFBBVEg9JXNcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBEPSVzXG4iIFwKKyAgICAgICAgICAgICdleHBvcnQgT0ZGTElORV9ST09UPSIkRCJcbicgXAorICAgICAgICAgICAgJ2V4cG9ydCBJUEtHX09GRkxJTkVfUk9PVD0iJEQiXG4nIFwKKyAgICAgICAgICAgICdleHBvcnQgT1BLR19PRkZMSU5FX1JPT1Q9IiREIlxuJyBcCisgICAgICAgICAgICAiZXhwb3J0IElOVEVSQ0VQVF9ESVI9JXNcbiIgXAorICAgICAgICAgICAgImV4cG9ydCBOQVRJVkVfUk9PVD0lc1xuIiBcCisgICAgICAgICAgICAiXG4iIFwKKyAgICAgICAgICAgICsgc2NyaXB0bGV0Y21kICsgXAorICAgICAgICAgICAgImlmIFsgJD8gLW5lIDAgXTsgdGhlblxuIiBcCisgICAgICAgICAgICAiICBpZiBbICQ0IC1lcSAxIF07IHRoZW5cbiIgXAorICAgICAgICAgICAgIiAgICBta2RpciAtcCAkMS9ldGMvcnBtLXBvc3RpbnN0c1xuIiBcCisgICAgICAgICAgICAiICAgIG51bT0xMDBcbiIgXAorICAgICAgICAgICAgIiAgICB3aGlsZSBbIC1lICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0qIF07IGRvIG51bT0kKChudW0gKyAxKSk7IGRvbmVcbiIgXAorICAgICAgICAgICAgIiAgICBuYW1lPWBoZWFkIC0xICIgKyBzY3JpcHRwYXRoICsgIiB8IGN1dCAtZFwnIFwnIC1mIDJgXG4iIFwKKyAgICAgICAgICAgICcgICAgZWNobyAiIyEkMiIgPiAkMS9ldGMvcnBtLXBvc3RpbnN0cy8ke251bX0tJHtuYW1lfVxuJyBcCisgICAgICAgICAgICAnICAgIGVjaG8gIiMgQXJnOiAkNCIgPj4gJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbicgXAorICAgICAgICAgICAgIiAgICBjYXQgIiArIHNjcmlwdHBhdGggKyAiID4+ICQxL2V0Yy9ycG0tcG9zdGluc3RzLyR7bnVtfS0ke25hbWV9XG4iIFwKKyAgICAgICAgICAgICIgICAgY2htb2QgK3ggJDEvZXRjL3JwbS1wb3N0aW5zdHMvJHtudW19LSR7bmFtZX1cbiIgXAorICAgICAgICAgICAgIiAgZWxzZVxuIiBcCisgICAgICAgICAgICAnICAgIGVjaG8gIkVycm9yOiBwcmUvcG9zdCByZW1vdmUgc2NyaXB0bGV0IGZhaWxlZCJcbicgXAorICAgICAgICAgICAgIiAgZmlcbiIgXAorICAgICAgICAgICAgImZpXG4iCisKKyAgICAgICAgaW50ZXJjZXB0X2RpciA9IHNlbGYuZC5leHBhbmQoJyR7V09SS0RJUn0vaW50ZXJjZXB0X3NjcmlwdHMnKQorICAgICAgICBuYXRpdmVfcm9vdCA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisgICAgICAgIHNjcmlwdGxldF9jb250ZW50ID0gU0NSSVBUTEVUX0ZPUk1BVCAlIChvcy5lbnZpcm9uWydQQVRIJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhcmdldF9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmNlcHRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX3Jvb3QpCisgICAgICAgIG9wZW4oc2VsZi5zY3JpcHRsZXRfd3JhcHBlciwgJ3crJykud3JpdGUoc2NyaXB0bGV0X2NvbnRlbnQpCisKKyAgICAgICAgYmIubm90ZSgiTm90ZTogY29uZmlndXJpbmcgUlBNIGNyb3NzLWluc3RhbGwgc2NyaXB0bGV0X3dyYXBwZXIiKQorICAgICAgICBvcy5jaG1vZChzZWxmLnNjcmlwdGxldF93cmFwcGVyLCAwNzU1KQorICAgICAgICBjbWQgPSAnY29uZmlnIC0tc2V0IHJwbS1leHRyYS1tYWNyb3MuX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyPSVzJyAlIFwKKyAgICAgICAgICAgICAgc2VsZi5zY3JpcHRsZXRfd3JhcHBlcgorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoY21kKQorCisgICAgICAgICMgRGVidWcgdG8gc2hvdyBzbWFydCBjb25maWcgaW5mbworICAgICAgICAjIGJiLm5vdGUoc2VsZi5faW52b2tlX3NtYXJ0KCdjb25maWcgLS1zaG93JykpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ3VwZGF0ZSBycG1zeXMnKQorCisgICAgJycnCisgICAgSW5zdGFsbCBwa2dzIHdpdGggc21hcnQsIHRoZSBwa2cgbmFtZSBpcyBvZSBmb3JtYXQKKyAgICAnJycKKyAgICBkZWYgaW5zdGFsbChzZWxmLCBwa2dzLCBhdHRlbXB0X29ubHk9RmFsc2UpOgorCisgICAgICAgIGlmIG5vdCBwa2dzOgorICAgICAgICAgICAgYmIubm90ZSgiVGhlcmUgYXJlIG5vIHBhY2thZ2VzIHRvIGluc3RhbGwiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgdGhlIGZvbGxvd2luZyBwYWNrYWdlczogJXMiICUgJyAnLmpvaW4ocGtncykpCisgICAgICAgIHBrZ3MgPSBzZWxmLl9wa2dfdHJhbnNsYXRlX29lX3RvX3NtYXJ0KHBrZ3MsIGF0dGVtcHRfb25seSkKKworICAgICAgICBpZiBub3QgYXR0ZW1wdF9vbmx5OgorICAgICAgICAgICAgYmIubm90ZSgndG8gYmUgaW5zdGFsbGVkOiAlcycgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsIC15ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgYmIubm90ZShjbWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYi5ub3RlKCdpbnN0YWxsaW5nIGF0dGVtcHQgb25seSBwYWNrYWdlcy4uLicpCisgICAgICAgICAgICBiYi5ub3RlKCdBdHRlbXB0aW5nICVzJyAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLS1hdHRlbXB0IC15ICVzIiAlIFwKKyAgICAgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICAgICAgYmIubm90ZShvdXRwdXQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAnJycKKyAgICBSZW1vdmUgcGtncyB3aXRoIHNtYXJ0LCB0aGUgcGtnIG5hbWUgaXMgc21hcnQvcnBtIGZvcm1hdAorICAgICcnJworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGJiLm5vdGUoJ3RvIGJlIHJlbW92ZWQ6ICcgKyAnICcuam9pbihwa2dzKSkKKworICAgICAgICBpZiBub3Qgd2l0aF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBjbWQgPSAiJXMgLWUgLS1ub2RlcHMgIiAlIHNlbGYucnBtX2NtZAorICAgICAgICAgICAgY21kICs9ICItLXJvb3Q9JXMgIiAlIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICAgICAgY21kICs9ICItLWRicGF0aD0vdmFyL2xpYi9ycG0gIgorICAgICAgICAgICAgY21kICs9ICItLWRlZmluZT0nX2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyICVzJyAiICUgXAorICAgICAgICAgICAgICAgICAgIHNlbGYuc2NyaXB0bGV0X3dyYXBwZXIKKyAgICAgICAgICAgIGNtZCArPSAiLS1kZWZpbmU9J190bXBwYXRoIC8lcy90bXAnICVzIiAlIChzZWxmLmluc3RhbGxfZGlyX25hbWUsICcgJy5qb2luKHBrZ3MpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgcGtnIGluIHBrZ3M6CisgICAgICAgICAgICAjICAgYmIubm90ZSgnRGVidWc6IFdoYXQgcmVxdWlyZWQ6ICVzJyAlIHBrZykKKyAgICAgICAgICAgICMgICBiYi5ub3RlKHNlbGYuX2ludm9rZV9zbWFydCgncXVlcnkgJXMgLS1zaG93LXJlcXVpcmVkYnknICUgcGtnKSkKKworICAgICAgICAgICAgY21kID0gIiVzICVzIHJlbW92ZSAteSAlcyIgJSAoc2VsZi5zbWFydF9jbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0X29wdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICBiYi5ub3RlKG91dHB1dCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB1cGdyYWRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCdzbWFydCB1cGdyYWRlJykKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCd1cGdyYWRlJykKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbmRleGVyLndyaXRlX2luZGV4KCkKKworICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICBkZWYgcmVtb3ZlX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9ycG1saWIsIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnRhcmdldF9yb290ZnMsICd2YXIvbGliL29wa2cnKSwgVHJ1ZSkKKworICAgICAgICAjIHJlbW92ZSB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbnN0YWxsX2Rpcl9wYXRoLCBUcnVlKQorCisgICAgZGVmIGJhY2t1cF9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBTYXZlIHRoZSBycG1saWIgZm9yIGluY3JlbWVudCBycG0gaW1hZ2UgZ2VuZXJhdGlvbgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX3JwbWxpYik6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zYXZlZF9ycG1saWIsIFRydWUpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLmltYWdlX3JwbWxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZWRfcnBtbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiByZWNvdmVyeV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBNb3ZlIHRoZSBycG1saWIgYmFjaworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX3JwbWxpYik6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmltYWdlX3JwbWxpYik6CisgICAgICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuaW1hZ2VfcnBtbGliLCBUcnVlKQorCisgICAgICAgICAgICBiYi5ub3RlKCdSZWNvdmVyeSBwYWNrYWdpbmcgZGF0YScpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5zYXZlZF9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9ycG1saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBrZ3NfbGlzdC5saXN0KGZvcm1hdCkKKworICAgICcnJworICAgIElmIGluY3JlbWVudGFsIGluc3RhbGwsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgd2UndmUgZ290LAorICAgIHdoYXQgd2UgbmVlZCB0byBhZGQsIGFuZCB3aGF0IHRvIHJlbW92ZS4uLgorICAgIFRoZSBkdW1wX2luc3RhbGxfc29sdXRpb24gd2lsbCBkdW1wIGFuZCBzYXZlIHRoZSBuZXcgaW5zdGFsbAorICAgIHNvbHV0aW9uLgorICAgICcnJworICAgIGRlZiBkdW1wX2luc3RhbGxfc29sdXRpb24oc2VsZiwgcGtncyk6CisgICAgICAgIGJiLm5vdGUoJ2NyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsJykKKyAgICAgICAgaWYgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwa2dzID0gc2VsZi5fcGtnX3RyYW5zbGF0ZV9vZV90b19zbWFydChwa2dzLCBGYWxzZSkKKyAgICAgICAgaW5zdGFsbF9wa2dzID0gbGlzdCgpCisKKyAgICAgICAgY21kID0gIiVzICVzIGluc3RhbGwgLXkgLS1kdW1wICVzIDI+JXMiICUgIFwKKyAgICAgICAgICAgICAgKHNlbGYuc21hcnRfY21kLAorICAgICAgICAgICAgICAgc2VsZi5zbWFydF9vcHQsCisgICAgICAgICAgICAgICAnICcuam9pbihwa2dzKSwKKyAgICAgICAgICAgICAgIHNlbGYuc29sdXRpb25fbWFuaWZlc3QpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRGlzYWJsZSBycG1zeXMgY2hhbm5lbCBmb3IgdGhlIGZha2UgaW5zdGFsbAorICAgICAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBycG1zeXMnKQorCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvbHV0aW9uX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbF9wa2dzLmFwcGVuZChwa2cpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIubm90ZSgiVW5hYmxlIHRvIGR1bXAgaW5zdGFsbCBwYWNrYWdlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisgICAgICAgICMgUmVjb3ZlcnkgcnBtc3lzIGNoYW5uZWwKKyAgICAgICAgc2VsZi5faW52b2tlX3NtYXJ0KCdjaGFubmVsIC0tZW5hYmxlIHJwbXN5cycpCisgICAgICAgIHJldHVybiBpbnN0YWxsX3BrZ3MKKworICAgICcnJworICAgIElmIGluY3JlbWVudGFsIGluc3RhbGwsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgd2UndmUgZ290LAorICAgIHdoYXQgd2UgbmVlZCB0byBhZGQsIGFuZCB3aGF0IHRvIHJlbW92ZS4uLgorICAgIFRoZSBsb2FkX29sZF9pbnN0YWxsX3NvbHV0aW9uIHdpbGwgbG9hZCB0aGUgcHJldmlvdXMgaW5zdGFsbAorICAgIHNvbHV0aW9uCisgICAgJycnCisgICAgZGVmIGxvYWRfb2xkX2luc3RhbGxfc29sdXRpb24oc2VsZik6CisgICAgICAgIGJiLm5vdGUoJ2xvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGwnKQorICAgICAgICBpbnN0YWxsZWRfcGtncyA9IGxpc3QoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5zb2x1dGlvbl9tYW5pZmVzdCk6CisgICAgICAgICAgICBiYi5ub3RlKCdvbGQgaW5zdGFsbCBzb2x1dGlvbiBub3QgZXhpc3QnKQorICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc29sdXRpb25fbWFuaWZlc3QsICdyJykgYXMgbWFuaWZlc3Q6CisgICAgICAgICAgICBmb3IgcGtnIGluIG1hbmlmZXN0LnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQocGtnLnN0cmlwKCkpCisKKyAgICAgICAgcmV0dXJuIGluc3RhbGxlZF9wa2dzCisKKyAgICAnJycKKyAgICBEdW1wIGFsbCBhdmFpbGFibGUgcGFja2FnZXMgaW4gZmVlZHMsIGl0IHNob3VsZCBiZSBpbnZva2VkIGFmdGVyIHRoZQorICAgIG5ld2VzdCBycG0gaW5kZXggd2FzIGNyZWF0ZWQKKyAgICAnJycKKyAgICBkZWYgZHVtcF9hbGxfYXZhaWxhYmxlX3BrZ3Moc2VsZik6CisgICAgICAgIGF2YWlsYWJsZV9tYW5pZmVzdCA9IHNlbGYuZC5leHBhbmQoJyR7VH0vc2F2ZWQvYXZhaWxhYmxlX3BrZ3MudHh0JykKKyAgICAgICAgYXZhaWxhYmxlX3BrZ3MgPSBsaXN0KCkKKyAgICAgICAgY21kID0gIiVzICVzIHF1ZXJ5IC0tb3V0cHV0ICVzIiAlICBcCisgICAgICAgICAgICAgIChzZWxmLnNtYXJ0X2NtZCwgc2VsZi5zbWFydF9vcHQsIGF2YWlsYWJsZV9tYW5pZmVzdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYXZhaWxhYmxlX21hbmlmZXN0LCAncicpIGFzIG1hbmlmZXN0OgorICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gbWFuaWZlc3QucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgICAgICBpZiAnQCcgaW4gcGtnOgorICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX3BrZ3MuYXBwZW5kKHBrZy5zdHJpcCgpKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlVuYWJsZSB0byBsaXN0IGFsbCBhdmFpbGFibGUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHNlbGYuZnVsbHBrZ2xpc3QgPSBhdmFpbGFibGVfcGtncworCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNhdmVfcnBtcG9zdGluc3Qoc2VsZiwgcGtnKToKKyAgICAgICAgbWxpYnMgPSAoc2VsZi5kLmdldFZhcignTVVMVElMSUJfR0xPQkFMX1ZBUklBTlRTJywgRmFsc2UpIG9yICIiKS5zcGxpdCgpCisKKyAgICAgICAgbmV3X3BrZyA9IHBrZworICAgICAgICAjIFJlbW92ZSBhbnkgbXVsdGlsaWIgcHJlZml4IGZyb20gdGhlIHBhY2thZ2UgbmFtZQorICAgICAgICBmb3IgbWxpYiBpbiBtbGliczoKKyAgICAgICAgICAgIGlmIG1saWIgaW4gcGtnOgorICAgICAgICAgICAgICAgIG5ld19wa2cgPSBwa2cucmVwbGFjZShtbGliICsgJy0nLCAnJykKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGJiLm5vdGUoJyAgKiBwb3N0cG9uaW5nICVzJyAlIG5ld19wa2cpCisgICAgICAgIHNhdmVkX2RpciA9IHNlbGYudGFyZ2V0X3Jvb3RmcyArIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcnBtLXBvc3RpbnN0cy8nKSArIG5ld19wa2cKKworICAgICAgICBjbWQgPSBzZWxmLnJwbV9jbWQgKyAnIC1xIC0tc2NyaXB0cyAtLXJvb3QgJyArIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBjbWQgKz0gJyAtLWRicGF0aD0vdmFyL2xpYi9ycG0gJyArIG5ld19wa2cKKyAgICAgICAgY21kICs9ICcgfCBzZWQgLW4gLWUgIi9ecG9zdGluc3RhbGwgc2NyaXB0bGV0ICh1c2luZyAuKik6JC8sL14uKiBzY3JpcHRsZXQgKHVzaW5nIC4qKTokLyB7Ly4qL3B9IicKKyAgICAgICAgY21kICs9ICcgfCBzZWQgLWUgIi9wb3N0aW5zdGFsbCBzY3JpcHRsZXQgKHVzaW5nIFwoLipcKSk6JC9kIicKKyAgICAgICAgY21kICs9ICcgLWUgIi9eLiogc2NyaXB0bGV0ICh1c2luZyAuKik6JC9kIiA+ICVzJyAlIHNhdmVkX2RpcgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpLnN0cmlwKCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICAgICAgb3MuY2htb2Qoc2F2ZWRfZGlyLCAwNzU1KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZva2Ugc2F2ZV9ycG1wb3N0aW5zdCBmYWlsZWQuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICcnJ1dyaXRlIGNvbW1vbiBjb25maWd1cmF0aW9uIGZvciB0YXJnZXQgdXNhZ2UnJycKKyAgICBkZWYgcnBtX3NldHVwX3NtYXJ0X3RhcmdldF9jb25maWcoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLCAndmFyL2xpYi9zbWFydCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKKworICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9saW5rdG9zPTEnKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NvbmZpZyAtLXNldCBycG0tbm9wYXJlbnRkaXJzPTEnKQorICAgICAgICBmb3IgaSBpbiBzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYuX2ludm9rZV9zbWFydCgnZmxhZyAtLXNldCBpZ25vcmUtcmVjb21tZW5kcyAlcycgJSBpKQorICAgICAgICBzZWxmLl9pbnZva2Vfc21hcnQoJ2NoYW5uZWwgLS1hZGQgcnBtc3lzIHR5cGU9cnBtLXN5cyAteScpCisKKyAgICAnJycKKyAgICBUaGUgcnBtIGRiIGxvY2sgZmlsZXMgd2VyZSBwcm9kdWNlZCBhZnRlciBpbnZva2luZyBycG0gdG8gcXVlcnkgb24KKyAgICBidWlsZCBzeXN0ZW0sIGFuZCB0aGV5IGNhdXNlZCB0aGUgcnBtIG9uIHRhcmdldCBkaWRuJ3Qgd29yaywgc28gd2UKKyAgICBuZWVkIHRvIHVubG9jayB0aGUgcnBtIGRiIGJ5IHJlbW92aW5nIHRoZSBsb2NrIGZpbGVzLgorICAgICcnJworICAgIGRlZiB1bmxvY2tfcnBtX2RiKHNlbGYpOgorICAgICAgICAjIFJlbW92ZSBycG0gZGIgbG9jayBmaWxlcworICAgICAgICBycG1fZGJfbG9ja3MgPSBnbG9iLmdsb2IoJyVzL3Zhci9saWIvcnBtL19fZGIuKicgJSBzZWxmLnRhcmdldF9yb290ZnMpCisgICAgICAgIGZvciBmIGluIHJwbV9kYl9sb2NrczoKKyAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShmLCBUcnVlKQorCisKK2NsYXNzIE9wa2dQTShQYWNrYWdlTWFuYWdlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIHRhcmdldF9yb290ZnMsIGNvbmZpZ19maWxlLCBhcmNocywgdGFza19uYW1lPSd0YXJnZXQnKToKKyAgICAgICAgc3VwZXIoT3BrZ1BNLCBzZWxmKS5fX2luaXRfXyhkKQorCisgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3RmcyA9IHRhcmdldF9yb290ZnMKKyAgICAgICAgc2VsZi5jb25maWdfZmlsZSA9IGNvbmZpZ19maWxlCisgICAgICAgIHNlbGYucGtnX2FyY2hzID0gYXJjaHMKKyAgICAgICAgc2VsZi50YXNrX25hbWUgPSB0YXNrX25hbWUKKworICAgICAgICBzZWxmLmRlcGxveV9kaXIgPSBzZWxmLmQuZ2V0VmFyKCJERVBMT1lfRElSX0lQSyIsIFRydWUpCisgICAgICAgIHNlbGYuZGVwbG95X2xvY2tfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsICJkZXBsb3kubG9jayIpCisgICAgICAgIHNlbGYub3BrZ19jbWQgPSBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgIm9wa2ciKQorICAgICAgICBzZWxmLm9wa2dfYXJncyA9ICItLXZvbGF0aWxlLWNhY2hlIC1mICVzIC1vICVzICIgJSAoc2VsZi5jb25maWdfZmlsZSwgdGFyZ2V0X3Jvb3RmcykKKyAgICAgICAgc2VsZi5vcGtnX2FyZ3MgKz0gc2VsZi5kLmdldFZhcigiT1BLR19BUkdTIiwgVHJ1ZSkKKworICAgICAgICBvcGtnX2xpYl9kaXIgPSBzZWxmLmQuZ2V0VmFyKCdPUEtHTElCRElSJywgVHJ1ZSkKKyAgICAgICAgaWYgb3BrZ19saWJfZGlyWzBdID09ICIvIjoKKyAgICAgICAgICAgIG9wa2dfbGliX2RpciA9IG9wa2dfbGliX2RpclsxOl0KKworICAgICAgICBzZWxmLm9wa2dfZGlyID0gb3MucGF0aC5qb2luKHRhcmdldF9yb290ZnMsIG9wa2dfbGliX2RpciwgIm9wa2ciKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLm9wa2dfZGlyKQorCisgICAgICAgIHNlbGYuc2F2ZWRfb3BrZ19kaXIgPSBzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkLyVzJyAlIHNlbGYudGFza19uYW1lKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kLmV4cGFuZCgnJHtUfS9zYXZlZCcpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmQuZXhwYW5kKCcke1R9L3NhdmVkJykpCisKKyAgICAgICAgaWYgKHNlbGYuZC5nZXRWYXIoJ0JVSUxEX0lNQUdFU19GUk9NX0ZFRURTJywgVHJ1ZSkgb3IgIiIpICE9ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25maWcoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2N1c3RvbV9jb25maWcoKQorCisgICAgICAgIHNlbGYuaW5kZXhlciA9IE9wa2dJbmRleGVyKHNlbGYuZCwgc2VsZi5kZXBsb3lfZGlyKQorCisgICAgIiIiCisgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNoYW5nZSBhIHBhY2thZ2UncyBzdGF0dXMgaW4gL3Zhci9saWIvb3BrZy9zdGF0dXMgZmlsZS4KKyAgICBJZiAncGFja2FnZXMnIGlzIE5vbmUgdGhlbiB0aGUgbmV3X3N0YXR1cyB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsCisgICAgcGFja2FnZXMKKyAgICAiIiIKKyAgICBkZWYgbWFya19wYWNrYWdlcyhzZWxmLCBzdGF0dXNfdGFnLCBwYWNrYWdlcz1Ob25lKToKKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5vcGtnX2RpciwgInN0YXR1cyIpCisKKyAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlLCAiciIpIGFzIHNmOgorICAgICAgICAgICAgd2l0aCBvcGVuKHN0YXR1c19maWxlICsgIi50bXAiLCAidysiKSBhcyB0bXBfc2Y6CisgICAgICAgICAgICAgICAgaWYgcGFja2FnZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHJlLnN1YihyIlBhY2thZ2U6ICguKj8pXG4oKD86W15cbl0rXG4pKj8pU3RhdHVzOiAoLiopKD86dW5wYWNrZWR8aW5zdGFsbGVkKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJQYWNrYWdlOiBcMVxuXDJTdGF0dXM6IFwzJXMiICUgc3RhdHVzX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZi5yZWFkKCkpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHR5cGUocGFja2FnZXMpLl9fbmFtZV9fICE9ICJsaXN0IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJ3BhY2thZ2VzJyBzaG91bGQgYmUgYSBsaXN0IG9iamVjdCIpCisKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc2YucmVhZCgpCisgICAgICAgICAgICAgICAgICAgIGZvciBwa2cgaW4gcGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSByZS5zdWIociJQYWNrYWdlOiAlc1xuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiICUgcGtnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogJXNcblwxU3RhdHVzOiBcMiVzIiAlIChwa2csIHN0YXR1c190YWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cykKKworICAgICAgICAgICAgICAgICAgICB0bXBfc2Yud3JpdGUoc3RhdHVzKQorCisgICAgICAgIG9zLnJlbmFtZShzdGF0dXNfZmlsZSArICIudG1wIiwgc3RhdHVzX2ZpbGUpCisKKyAgICBkZWYgX2NyZWF0ZV9jdXN0b21fY29uZmlnKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJCdWlsZGluZyBmcm9tIGZlZWRzIGFjdGl2YXRlZCEiKQorCisgICAgICAgIHdpdGggb3BlbihzZWxmLmNvbmZpZ19maWxlLCAidysiKSBhcyBjb25maWdfZmlsZToKKyAgICAgICAgICAgIHByaW9yaXR5ID0gMQorICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgiYXJjaCAlcyAlZFxuIiAlIChhcmNoLCBwcmlvcml0eSkpCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgKz0gNQorCisgICAgICAgICAgICBmb3IgbGluZSBpbiAoc2VsZi5kLmdldFZhcignSVBLX0ZFRURfVVJJUycsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZlZWRfbWF0Y2ggPSByZS5tYXRjaCgiXlsgXHRdKiguKikjIyhbXiBcdF0qKVsgXHRdKiQiLCBsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgZmVlZF9tYXRjaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZmVlZF9uYW1lID0gZmVlZF9tYXRjaC5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBmZWVkX3VyaSA9IGZlZWRfbWF0Y2guZ3JvdXAoMikKKworICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJBZGQgJXMgZmVlZCB3aXRoIFVSTCAlcyIgJSAoZmVlZF9uYW1lLCBmZWVkX3VyaSkpCisKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYy9neiAlcyAlc1xuIiAlIChmZWVkX25hbWUsIGZlZWRfdXJpKSkKKworICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBBbGxvdyB0byB1c2UgcGFja2FnZSBkZXBsb3kgZGlyZWN0b3J5IGNvbnRlbnRzIGFzIHF1aWNrIGRldmVsLXRlc3RpbmcKKyAgICAgICAgICAgIGZlZWQuIFRoaXMgY3JlYXRlcyBpbmRpdmlkdWFsIGZlZWQgY29uZmlncyBmb3IgZWFjaCBhcmNoIHN1YmRpciBvZiB0aG9zZQorICAgICAgICAgICAgc3BlY2lmaWVkIGFzIGNvbXBhdGlibGUgZm9yIHRoZSBjdXJyZW50IG1hY2hpbmUuCisgICAgICAgICAgICBOT1RFOiBEZXZlbG9wbWVudC1oZWxwZXIgZmVhdHVyZSwgTk9UIGEgZnVsbC1mbGVkZ2VkIGZlZWQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsIFRydWUpIG9yICIiKSAhPSAiIjoKKyAgICAgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBjZmdfZmlsZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYudGFyZ2V0X3Jvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJzeXNjb25mZGlyIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wa2ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbC0lcy1mZWVkLmNvbmYiICUgYXJjaCkKKworICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2ZnX2ZpbGVfbmFtZSwgIncrIikgYXMgY2ZnX2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBjZmdfZmlsZS53cml0ZSgic3JjL2d6IGxvY2FsLSVzICVzLyVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdGRUVEX0RFUExPWURJUl9CQVNFX1VSSScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gpKQorCisgICAgZGVmIF9jcmVhdGVfY29uZmlnKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5jb25maWdfZmlsZSwgIncrIikgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgICAgICBwcmlvcml0eSA9IDEKKyAgICAgICAgICAgIGZvciBhcmNoIGluIHNlbGYucGtnX2FyY2hzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoImFyY2ggJXMgJWRcbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ICs9IDUKKworICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYyBvZSBmaWxlOiVzXG4iICUgc2VsZi5kZXBsb3lfZGlyKQorCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBzZWxmLnBrZ19hcmNocy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ3NfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGVwbG95X2RpciwgYXJjaCkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBrZ3NfZGlyKToKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGUud3JpdGUoInNyYyBvZS0lcyBmaWxlOiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyY2gsIHBrZ3NfZGlyKSkKKworICAgIGRlZiBpbnNlcnRfZmVlZHNfdXJpcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5mZWVkX3VyaXMgPT0gIiI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByb290ZnNfY29uZmlnID0gb3MucGF0aC5qb2luKCclcy9ldGMvb3BrZy9iYXNlLWZlZWRzLmNvbmYnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBzZWxmLnRhcmdldF9yb290ZnMpCisKKyAgICAgICAgd2l0aCBvcGVuKHJvb3Rmc19jb25maWcsICJ3KyIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgdXJpX2l0ZXJhdG9yID0gMAorICAgICAgICAgICAgZm9yIHVyaSBpbiBzZWxmLmZlZWRfdXJpcy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIGZ1bGxfdXJpID0gdXJpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5mZWVkX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZnVsbF91cmkgPSBvcy5wYXRoLmpvaW4odXJpLCBzZWxmLmZlZWRfcHJlZml4KQorCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gc2VsZi5wa2dfYXJjaHMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoJ05vdGU6IGFkZGluZyBvcGtnIGZlZWQgdXJsLSVzLSVkICglcyknICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIGZ1bGxfdXJpKSkKKworICAgICAgICAgICAgICAgICAgICBjb25maWdfZmlsZS53cml0ZSgic3JjL2d6IHVyaS0lcy0lZCAlcy8lc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmNoLCB1cmlfaXRlcmF0b3IsIGZ1bGxfdXJpLCBhcmNoKSkKKyAgICAgICAgICAgICAgICB1cmlfaXRlcmF0b3IgKz0gMQorCisgICAgZGVmIHVwZGF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyB1cGRhdGUiICUgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIHVwZGF0ZSB0aGUgcGFja2FnZSBpbmRleCBmaWxlcy4gQ29tbWFuZCAnJXMnICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChjbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl91bmxvY2soKQorCisgICAgZGVmIGluc3RhbGwoc2VsZiwgcGtncywgYXR0ZW1wdF9vbmx5PUZhbHNlKToKKyAgICAgICAgaWYgYXR0ZW1wdF9vbmx5IGFuZCBsZW4ocGtncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGNtZCA9ICIlcyAlcyBpbnN0YWxsICVzIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncywgJyAnLmpvaW4ocGtncykpCisKKyAgICAgICAgb3MuZW52aXJvblsnRCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lQS0dfT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT1BLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydJTlRFUkNFUFRfRElSJ10gPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKyAgICAgICAgb3MuZW52aXJvblsnTkFUSVZFX1JPT1QnXSA9IHNlbGYuZC5nZXRWYXIoJ1NUQUdJTkdfRElSX05BVElWRScsIFRydWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyB0aGUgZm9sbG93aW5nIHBhY2thZ2VzOiAlcyIgJSAnICcuam9pbihwa2dzKSkKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIChiYi5mYXRhbCwgYmIubm90ZSlbYXR0ZW1wdF9vbmx5XSgiVW5hYmxlIHRvIGluc3RhbGwgcGFja2FnZXMuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tbWFuZCAnJXMnIHJldHVybmVkICVkOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiByZW1vdmUoc2VsZiwgcGtncywgd2l0aF9kZXBlbmRlbmNpZXM9VHJ1ZSk6CisgICAgICAgIGlmIHdpdGhfZGVwZW5kZW5jaWVzOgorICAgICAgICAgICAgY21kID0gIiVzICVzIC0tZm9yY2UtZGVwZW5kcyAtLWZvcmNlLXJlbW92ZSAtLWZvcmNlLXJlbW92YWwtb2YtZGVwZW5kZW50LXBhY2thZ2VzIHJlbW92ZSAlcyIgJSBcCisgICAgICAgICAgICAgICAgKHNlbGYub3BrZ19jbWQsIHNlbGYub3BrZ19hcmdzLCAnICcuam9pbihwa2dzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICIlcyAlcyAtLWZvcmNlLWRlcGVuZHMgcmVtb3ZlICVzIiAlIFwKKyAgICAgICAgICAgICAgICAoc2VsZi5vcGtnX2NtZCwgc2VsZi5vcGtnX2FyZ3MsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJiLm5vdGUoY21kKQorICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGJiLm5vdGUob3V0cHV0KQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gcmVtb3ZlIHBhY2thZ2VzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiB3cml0ZV9pbmRleChzZWxmKToKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2xvY2soKQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYuaW5kZXhlci53cml0ZV9pbmRleCgpCisKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyX3VubG9jaygpCisKKyAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYmIuZmF0YWwocmVzdWx0KQorCisgICAgZGVmIHJlbW92ZV9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYub3BrZ19kaXIsIFRydWUpCisgICAgICAgICMgY3JlYXRlIHRoZSBkaXJlY3RvcnkgYmFjaywgaXQncyBuZWVkZWQgYnkgUE0gbG9jaworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5vcGtnX2RpcikKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMsIHNlbGYuY29uZmlnX2ZpbGUpLmxpc3QoZm9ybWF0KQorCisgICAgZGVmIGhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKHNlbGYpOgorICAgICAgICBiYWRfcmVjb21tZW5kYXRpb25zID0gc2VsZi5kLmdldFZhcigiQkFEX1JFQ09NTUVOREFUSU9OUyIsIFRydWUpIG9yICIiCisgICAgICAgIGlmIGJhZF9yZWNvbW1lbmRhdGlvbnMuc3RyaXAoKSA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHN0YXR1c19maWxlID0gb3MucGF0aC5qb2luKHNlbGYub3BrZ19kaXIsICJzdGF0dXMiKQorCisgICAgICAgICMgSWYgc3RhdHVzIGZpbGUgZXhpc3RlZCwgaXQgbWVhbnMgdGhlIGJhZCByZWNvbW1lbmRhdGlvbnMgaGFzIGFscmVhZHkKKyAgICAgICAgIyBiZWVuIGhhbmRsZWQKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdHVzX2ZpbGUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgY21kID0gIiVzICVzIGluZm8gIiAlIChzZWxmLm9wa2dfY21kLCBzZWxmLm9wa2dfYXJncykKKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJ3KyIpIGFzIHN0YXR1czoKKyAgICAgICAgICAgIGZvciBwa2cgaW4gYmFkX3JlY29tbWVuZGF0aW9ucy5zcGxpdCgpOgorICAgICAgICAgICAgICAgIHBrZ19pbmZvID0gY21kICsgcGtnCisKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHBrZ19pbmZvLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBiYi5mYXRhbCgiQ2Fubm90IGdldCBwYWNrYWdlIGluZm8uIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCAlZDpcbiVzIiAlIChwa2dfaW5mbywgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIGJiLm5vdGUoIklnbm9yZWQgYmFkIHJlY29tbWVuZGF0aW9uOiAnJXMnIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgcGFja2FnZSIgJSBwa2cpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiU3RhdHVzOiIpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKCJTdGF0dXM6IGRlaW5zdGFsbCBob2xkIG5vdC1pbnN0YWxsZWRcbiIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMud3JpdGUobGluZSArICJcbiIpCisKKyAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBwYWNrYWdlIGVudHJ5IHRvIGVuc3VyZSB0aGF0IGl0CisgICAgICAgICAgICAgICAgIyBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgZm9sbG93aW5nIGVudHJ5CisgICAgICAgICAgICAgICAgc3RhdHVzLndyaXRlKCJcbiIpCisKKyAgICAnJycKKyAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGR1bW15IGluc3RhbGxzIHBrZ3MgYW5kIHJldHVybnMgdGhlIGxvZyBvZiBvdXRwdXQuCisgICAgJycnCisgICAgZGVmIGR1bW15X2luc3RhbGwoc2VsZiwgcGtncyk6CisgICAgICAgIGlmIGxlbihwa2dzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBDcmVhdGUgYW4gdGVtcCBkaXIgYXMgb3BrZyByb290IGZvciBkdW1teSBpbnN0YWxsYXRpb24KKyAgICAgICAgdGVtcF9yb290ZnMgPSBzZWxmLmQuZXhwYW5kKCcke1R9L29wa2cnKQorICAgICAgICB0ZW1wX29wa2dfZGlyID0gb3MucGF0aC5qb2luKHRlbXBfcm9vdGZzLCAndmFyL2xpYi9vcGtnJykKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRlbXBfb3BrZ19kaXIpCisKKyAgICAgICAgb3BrZ19hcmdzID0gIi1mICVzIC1vICVzICIgJSAoc2VsZi5jb25maWdfZmlsZSwgdGVtcF9yb290ZnMpCisgICAgICAgIG9wa2dfYXJncyArPSBzZWxmLmQuZ2V0VmFyKCJPUEtHX0FSR1MiLCBUcnVlKQorCisgICAgICAgIGNtZCA9ICIlcyAlcyB1cGRhdGUiICUgKHNlbGYub3BrZ19jbWQsIG9wa2dfYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsIHNoZWxsPVRydWUpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byB1cGRhdGUuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICAjIER1bW15IGluc3RhbGxhdGlvbgorICAgICAgICBjbWQgPSAiJXMgJXMgLS1ub2FjdGlvbiBpbnN0YWxsICVzICIgJSAoc2VsZi5vcGtnX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wa2dfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgJy5qb2luKHBrZ3MpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICBiYi5mYXRhbCgiVW5hYmxlIHRvIGR1bW15IGluc3RhbGwgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUodGVtcF9yb290ZnMsIFRydWUpCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIGJhY2t1cF9wYWNrYWdpbmdfZGF0YShzZWxmKToKKyAgICAgICAgIyBTYXZlIHRoZSBvcGtnbGliIGZvciBpbmNyZW1lbnQgaXBrIGltYWdlIGdlbmVyYXRpb24KKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5zYXZlZF9vcGtnX2Rpcik6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zYXZlZF9vcGtnX2RpciwgVHJ1ZSkKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYub3BrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhdmVkX29wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworICAgIGRlZiByZWNvdmVyX3BhY2thZ2luZ19kYXRhKHNlbGYpOgorICAgICAgICAjIE1vdmUgdGhlIG9wa2dsaWIgYmFjaworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnNhdmVkX29wa2dfZGlyKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYub3BrZ19kaXIpOgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLm9wa2dfZGlyLCBUcnVlKQorCisgICAgICAgICAgICBiYi5ub3RlKCdSZWNvdmVyIHBhY2thZ2luZyBkYXRhJykKKyAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzZWxmLnNhdmVkX29wa2dfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3BrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9VHJ1ZSkKKworCitjbGFzcyBEcGtnUE0oUGFja2FnZU1hbmFnZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB0YXJnZXRfcm9vdGZzLCBhcmNocywgYmFzZV9hcmNocywgYXB0X2NvbmZfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihEcGtnUE0sIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYudGFyZ2V0X3Jvb3RmcyA9IHRhcmdldF9yb290ZnMKKyAgICAgICAgc2VsZi5kZXBsb3lfZGlyID0gc2VsZi5kLmdldFZhcignREVQTE9ZX0RJUl9ERUInLCBUcnVlKQorICAgICAgICBpZiBhcHRfY29uZl9kaXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtBUFRDT05GX1RBUkdFVH0vYXB0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXB0X2NvbmZfZGlyID0gYXB0X2NvbmZfZGlyCisgICAgICAgIHNlbGYuYXB0X2NvbmZfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmFwdF9jb25mX2RpciwgImFwdC5jb25mIikKKyAgICAgICAgc2VsZi5hcHRfZ2V0X2NtZCA9IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAiYXB0LWdldCIpCisKKyAgICAgICAgc2VsZi5hcHRfYXJncyA9IGQuZ2V0VmFyKCJBUFRfQVJHUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5hbGxfYXJjaF9saXN0ID0gYXJjaHMuc3BsaXQoKQorICAgICAgICBhbGxfbWxiX3BrZ19hcmNoX2xpc3QgPSAoc2VsZi5kLmdldFZhcignQUxMX01VTFRJTElCX1BBQ0tBR0VfQVJDSFMnLCBUcnVlKSBvciAiIikucmVwbGFjZSgnLScsICdfJykuc3BsaXQoKQorICAgICAgICBzZWxmLmFsbF9hcmNoX2xpc3QuZXh0ZW5kKGFyY2ggZm9yIGFyY2ggaW4gYWxsX21sYl9wa2dfYXJjaF9saXN0IGlmIGFyY2ggbm90IGluIHNlbGYuYWxsX2FyY2hfbGlzdCkKKworICAgICAgICBzZWxmLl9jcmVhdGVfY29uZmlncyhhcmNocywgYmFzZV9hcmNocykKKworICAgICAgICBzZWxmLmluZGV4ZXIgPSBEcGtnSW5kZXhlcihzZWxmLmQsIHNlbGYuZGVwbG95X2RpcikKKworICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGFuZ2UgYSBwYWNrYWdlJ3Mgc3RhdHVzIGluIC92YXIvbGliL2Rwa2cvc3RhdHVzIGZpbGUuCisgICAgSWYgJ3BhY2thZ2VzJyBpcyBOb25lIHRoZW4gdGhlIG5ld19zdGF0dXMgd2lsbCBiZSBhcHBsaWVkIHRvIGFsbAorICAgIHBhY2thZ2VzCisgICAgIiIiCisgICAgZGVmIG1hcmtfcGFja2FnZXMoc2VsZiwgc3RhdHVzX3RhZywgcGFja2FnZXM9Tm9uZSk6CisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi50YXJnZXRfcm9vdGZzICsgIi92YXIvbGliL2Rwa2cvc3RhdHVzIgorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSwgInIiKSBhcyBzZjoKKyAgICAgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSArICIudG1wIiwgIncrIikgYXMgdG1wX3NmOgorICAgICAgICAgICAgICAgIGlmIHBhY2thZ2VzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHRtcF9zZi53cml0ZShyZS5zdWIociJQYWNrYWdlOiAoLio/KVxuKCg/OlteXG5dK1xuKSo/KVN0YXR1czogKC4qKSg/OnVucGFja2VkfGluc3RhbGxlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiUGFja2FnZTogXDFcblwyU3RhdHVzOiBcMyVzIiAlIHN0YXR1c190YWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2YucmVhZCgpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlKHBhY2thZ2VzKS5fX25hbWVfXyAhPSAibGlzdCI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIidwYWNrYWdlcycgc2hvdWxkIGJlIGEgbGlzdCBvYmplY3QiKQorCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gcmUuc3ViKHIiUGFja2FnZTogJXNcbigoPzpbXlxuXStcbikqPylTdGF0dXM6ICguKikoPzp1bnBhY2tlZHxpbnN0YWxsZWQpIiAlIHBrZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlBhY2thZ2U6ICVzXG5cMVN0YXR1czogXDIlcyIgJSAocGtnLCBzdGF0dXNfdGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMpCisKKyAgICAgICAgICAgICAgICAgICAgdG1wX3NmLndyaXRlKHN0YXR1cykKKworICAgICAgICBvcy5yZW5hbWUoc3RhdHVzX2ZpbGUgKyAiLnRtcCIsIHN0YXR1c19maWxlKQorCisgICAgIiIiCisgICAgUnVuIHRoZSBwcmUvcG9zdCBpbnN0YWxscyBmb3IgcGFja2FnZSAicGFja2FnZV9uYW1lIi4gSWYgcGFja2FnZV9uYW1lIGlzCisgICAgTm9uZSwgdGhlbiBydW4gYWxsIHByZS9wb3N0IGluc3RhbGwgc2NyaXB0bGV0cy4KKyAgICAiIiIKKyAgICBkZWYgcnVuX3ByZV9wb3N0X2luc3RhbGxzKHNlbGYsIHBhY2thZ2VfbmFtZT1Ob25lKToKKyAgICAgICAgaW5mb19kaXIgPSBzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9pbmZvIgorICAgICAgICBzdWZmaXhlcyA9IFsoIi5wcmVpbnN0IiwgIlByZWluc3RhbGwiKSwgKCIucG9zdGluc3QiLCAiUG9zdGluc3RhbGwiKV0KKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9zdGF0dXMiCisgICAgICAgIGluc3RhbGxlZF9wa2dzID0gW10KKworICAgICAgICB3aXRoIG9wZW4oc3RhdHVzX2ZpbGUsICJyIikgYXMgc3RhdHVzOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzLnJlYWQoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl5QYWNrYWdlOiAoLiopIiwgbGluZSkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsZWRfcGtncy5hcHBlbmQobS5ncm91cCgxKSkKKworICAgICAgICBpZiBwYWNrYWdlX25hbWUgaXMgbm90IE5vbmUgYW5kIG5vdCBwYWNrYWdlX25hbWUgaW4gaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydEJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnT0ZGTElORV9ST09UJ10gPSBzZWxmLnRhcmdldF9yb290ZnMKKyAgICAgICAgb3MuZW52aXJvblsnSVBLR19PRkZMSU5FX1JPT1QnXSA9IHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBvcy5lbnZpcm9uWydPUEtHX09GRkxJTkVfUk9PVCddID0gc2VsZi50YXJnZXRfcm9vdGZzCisgICAgICAgIG9zLmVudmlyb25bJ0lOVEVSQ0VQVF9ESVInXSA9IG9zLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0X3NjcmlwdHMiKQorICAgICAgICBvcy5lbnZpcm9uWydOQVRJVkVfUk9PVCddID0gc2VsZi5kLmdldFZhcignU1RBR0lOR19ESVJfTkFUSVZFJywgVHJ1ZSkKKworICAgICAgICBmYWlsZWRfcGtncyA9IFtdCisgICAgICAgIGZvciBwa2dfbmFtZSBpbiBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgcF9mdWxsID0gb3MucGF0aC5qb2luKGluZm9fZGlyLCBwa2dfbmFtZSArIHN1ZmZpeFswXSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhwX2Z1bGwpOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCJFeGVjdXRpbmcgJXMgZm9yIHBhY2thZ2U6ICVzIC4uLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1ZmZpeFsxXS5sb3dlcigpLCBwa2dfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChwX2Z1bGwsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCIlcyBmb3IgcGFja2FnZSAlcyBmYWlsZWQgd2l0aCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWZmaXhbMV0sIHBrZ19uYW1lLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZF9wa2dzLmFwcGVuZChwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbGVuKGZhaWxlZF9wa2dzKToKKyAgICAgICAgICAgIHNlbGYubWFya19wYWNrYWdlcygidW5wYWNrZWQiLCBmYWlsZWRfcGtncykKKworICAgIGRlZiB1cGRhdGUoc2VsZik6CisgICAgICAgIG9zLmVudmlyb25bJ0FQVF9DT05GSUcnXSA9IHNlbGYuYXB0X2NvbmZfZmlsZQorCisgICAgICAgIHNlbGYuZGVwbG95X2Rpcl9sb2NrKCkKKworICAgICAgICBjbWQgPSAiJXMgdXBkYXRlIiAlIHNlbGYuYXB0X2dldF9jbWQKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJVbmFibGUgdG8gdXBkYXRlIHRoZSBwYWNrYWdlIGluZGV4IGZpbGVzLiBDb21tYW5kICclcycgIgorICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkICVkOlxuJXMiICUgKGUuY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgIGRlZiBpbnN0YWxsKHNlbGYsIHBrZ3MsIGF0dGVtcHRfb25seT1GYWxzZSk6CisgICAgICAgIGlmIGF0dGVtcHRfb25seSBhbmQgbGVuKHBrZ3MpID09IDA6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBjbWQgPSAiJXMgJXMgaW5zdGFsbCAtLWZvcmNlLXllcyAtLWFsbG93LXVuYXV0aGVudGljYXRlZCAlcyIgJSBcCisgICAgICAgICAgICAgIChzZWxmLmFwdF9nZXRfY21kLCBzZWxmLmFwdF9hcmdzLCAnICcuam9pbihwa2dzKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6ICVzIiAlICcgJy5qb2luKHBrZ3MpKQorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLnNwbGl0KCksIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICAoYmIuZmF0YWwsIGJiLm5vdGUpW2F0dGVtcHRfb25seV0oIlVuYWJsZSB0byBpbnN0YWxsIHBhY2thZ2VzLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgIyByZW5hbWUgKi5kcGtnLW5ldyBmaWxlcy9kaXJzCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGFyZ2V0X3Jvb3Rmcyk6CisgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgbmV3X2RpciA9IHJlLnN1YigiXC5kcGtnLW5ldyIsICIiLCBkaXIpCisgICAgICAgICAgICAgICAgaWYgZGlyICE9IG5ld19kaXI6CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShvcy5wYXRoLmpvaW4ocm9vdCwgZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCBuZXdfZGlyKSkKKworICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgbmV3X2ZpbGUgPSByZS5zdWIoIlwuZHBrZy1uZXciLCAiIiwgZmlsZSkKKyAgICAgICAgICAgICAgICBpZiBmaWxlICE9IG5ld19maWxlOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUob3MucGF0aC5qb2luKHJvb3QsIGZpbGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJvb3QsIG5ld19maWxlKSkKKworCisgICAgZGVmIHJlbW92ZShzZWxmLCBwa2dzLCB3aXRoX2RlcGVuZGVuY2llcz1UcnVlKToKKyAgICAgICAgaWYgd2l0aF9kZXBlbmRlbmNpZXM6CisgICAgICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKyAgICAgICAgICAgIGNtZCA9ICIlcyBwdXJnZSAlcyIgJSAoc2VsZi5hcHRfZ2V0X2NtZCwgJyAnLmpvaW4ocGtncykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAiJXMgLS1hZG1pbmRpcj0lcy92YXIvbGliL2Rwa2cgLS1pbnN0ZGlyPSVzIiBcCisgICAgICAgICAgICAgICAgICAiIC1QIC0tZm9yY2UtZGVwZW5kcyAlcyIgJSBcCisgICAgICAgICAgICAgICAgICAoYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJkcGtnIiksCisgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXRfcm9vdGZzLCBzZWxmLnRhcmdldF9yb290ZnMsICcgJy5qb2luKHBrZ3MpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZC5zcGxpdCgpLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgICAgICAgICAgYmIuZmF0YWwoIlVuYWJsZSB0byByZW1vdmUgcGFja2FnZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoZS5jbWQsIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgZGVmIHdyaXRlX2luZGV4KHNlbGYpOgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfbG9jaygpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5pbmRleGVyLndyaXRlX2luZGV4KCkKKworICAgICAgICBzZWxmLmRlcGxveV9kaXJfdW5sb2NrKCkKKworICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKKyAgICBkZWYgaW5zZXJ0X2ZlZWRzX3VyaXMoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmVlZF91cmlzID09ICIiOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc291cmNlc19jb25mID0gb3MucGF0aC5qb2luKCIlcy9ldGMvYXB0L3NvdXJjZXMubGlzdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi50YXJnZXRfcm9vdGZzKQorICAgICAgICBhcmNoX2xpc3QgPSBbXQorCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYWxsX2FyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB3aXRoIG9wZW4oc291cmNlc19jb25mLCAidysiKSBhcyBzb3VyY2VzX2ZpbGU6CisgICAgICAgICAgICBmb3IgdXJpIGluIHNlbGYuZmVlZF91cmlzLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgZnVsbF91cmkgPSB1cmkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmZlZWRfcHJlZml4OgorICAgICAgICAgICAgICAgICAgICBmdWxsX3VyaSA9IG9zLnBhdGguam9pbih1cmksIHNlbGYuZmVlZF9wcmVmaXgpCisgICAgICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaF9saXN0OgorICAgICAgICAgICAgICAgICAgICBiYi5ub3RlKCdOb3RlOiBhZGRpbmcgZHBrZyBjaGFubmVsIGF0ICglcyknICUgdXJpKQorICAgICAgICAgICAgICAgICAgICBzb3VyY2VzX2ZpbGUud3JpdGUoImRlYiAlcy8lcyAuL1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVsbF91cmksIGFyY2gpKQorCisgICAgZGVmIF9jcmVhdGVfY29uZmlncyhzZWxmLCBhcmNocywgYmFzZV9hcmNocyk6CisgICAgICAgIGJhc2VfYXJjaHMgPSByZS5zdWIoIl8iLCAiLSIsIGJhc2VfYXJjaHMpCisKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5hcHRfY29uZl9kaXIpOgorICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuYXB0X2NvbmZfZGlyLCBUcnVlKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpcikKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuYXB0X2NvbmZfZGlyICsgIi9saXN0cy9wYXJ0aWFsLyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmFwdF9jb25mX2RpciArICIvYXB0LmNvbmYuZC8iKQorCisgICAgICAgIGFyY2hfbGlzdCA9IFtdCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYWxsX2FyY2hfbGlzdDoKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oc2VsZi5kZXBsb3lfZGlyLCBhcmNoKSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFyY2hfbGlzdC5hcHBlbmQoYXJjaCkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAicHJlZmVyZW5jZXMiKSwgIncrIikgYXMgcHJlZnNfZmlsZToKKyAgICAgICAgICAgIHByaW9yaXR5ID0gODAxCisgICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgcHJlZnNfZmlsZS53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICpcbiIKKyAgICAgICAgICAgICAgICAgICAgIlBpbjogcmVsZWFzZSBsPSVzXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW4tUHJpb3JpdHk6ICVkXG5cbiIgJSAoYXJjaCwgcHJpb3JpdHkpKQorCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgKz0gNQorCisgICAgICAgICAgICBwa2dfZXhjbHVkZSA9IHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICIiCisgICAgICAgICAgICBmb3IgcGtnIGluIHBrZ19leGNsdWRlLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgcHJlZnNfZmlsZS53cml0ZSgKKyAgICAgICAgICAgICAgICAgICAgIlBhY2thZ2U6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICJQaW46IHJlbGVhc2UgKlxuIgorICAgICAgICAgICAgICAgICAgICAiUGluLVByaW9yaXR5OiAtMVxuXG4iICUgcGtnKQorCisgICAgICAgIGFyY2hfbGlzdC5yZXZlcnNlKCkKKworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuYXB0X2NvbmZfZGlyLCAic291cmNlcy5saXN0IiksICJ3KyIpIGFzIHNvdXJjZXNfZmlsZToKKyAgICAgICAgICAgIGZvciBhcmNoIGluIGFyY2hfbGlzdDoKKyAgICAgICAgICAgICAgICBzb3VyY2VzX2ZpbGUud3JpdGUoImRlYiBmaWxlOiVzLyAuL1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRlcGxveV9kaXIsIGFyY2gpKQorCisgICAgICAgIGJhc2VfYXJjaF9saXN0ID0gYmFzZV9hcmNocy5zcGxpdCgpCisgICAgICAgIG11bHRpbGliX3ZhcmlhbnRzID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKTsKKyAgICAgICAgZm9yIHZhcmlhbnQgaW4gbXVsdGlsaWJfdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgICAgIGlmIHZhcmlhbnQgPT0gImxpYjMyIjoKKyAgICAgICAgICAgICAgICBiYXNlX2FyY2hfbGlzdC5hcHBlbmQoImkzODYiKQorICAgICAgICAgICAgZWxpZiB2YXJpYW50ID09ICJsaWI2NCI6CisgICAgICAgICAgICAgICAgYmFzZV9hcmNoX2xpc3QuYXBwZW5kKCJhbWQ2NCIpCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuYXB0X2NvbmZfZmlsZSwgIncrIikgYXMgYXB0X2NvbmY6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5kLmV4cGFuZCgiJHtTVEFHSU5HX0VUQ0RJUl9OQVRJVkV9L2FwdC9hcHQuY29uZi5zYW1wbGUiKSkgYXMgYXB0X2NvbmZfc2FtcGxlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGFwdF9jb25mX3NhbXBsZS5yZWFkKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgIG1hdGNoX2FyY2ggPSByZS5tYXRjaCgiICBBcmNoaXRlY3R1cmUgXCIuKlwiOyQiLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBhcmNoaXRlY3R1cmVzID0gIiIKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hfYXJjaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiYXNlX2FyY2ggaW4gYmFzZV9hcmNoX2xpc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl0ZWN0dXJlcyArPSAiXCIlc1wiOyIgJSBiYXNlX2FyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKCIgIEFyY2hpdGVjdHVyZXMgeyVzfTtcbiIgJSBhcmNoaXRlY3R1cmVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwdF9jb25mLndyaXRlKCIgIEFyY2hpdGVjdHVyZSBcIiVzXCI7XG4iICUgYmFzZV9hcmNocykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoIiNST09URlMjIiwgc2VsZi50YXJnZXRfcm9vdGZzLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YigiI0FQVENPTkYjIiwgc2VsZi5hcHRfY29uZl9kaXIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBhcHRfY29uZi53cml0ZShsaW5lICsgIlxuIikKKworICAgICAgICB0YXJnZXRfZHBrZ19kaXIgPSAiJXMvdmFyL2xpYi9kcGtnIiAlIHNlbGYudGFyZ2V0X3Jvb3RmcworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgImluZm8iKSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInVwZGF0ZXMiKSkKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInN0YXR1cyIpKToKKyAgICAgICAgICAgIG9wZW4ob3MucGF0aC5qb2luKHRhcmdldF9kcGtnX2RpciwgInN0YXR1cyIpLCAidysiKS5jbG9zZSgpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGFyZ2V0X2Rwa2dfZGlyLCAiYXZhaWxhYmxlIikpOgorICAgICAgICAgICAgb3Blbihvcy5wYXRoLmpvaW4odGFyZ2V0X2Rwa2dfZGlyLCAiYXZhaWxhYmxlIiksICJ3KyIpLmNsb3NlKCkKKworICAgIGRlZiByZW1vdmVfcGFja2FnaW5nX2RhdGEoc2VsZik6CisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi50YXJnZXRfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ29wa2dsaWJkaXInLCBUcnVlKSksIFRydWUpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLnRhcmdldF9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy8iLCBUcnVlKQorCisgICAgZGVmIGZpeF9icm9rZW5fZGVwZW5kZW5jaWVzKHNlbGYpOgorICAgICAgICBvcy5lbnZpcm9uWydBUFRfQ09ORklHJ10gPSBzZWxmLmFwdF9jb25mX2ZpbGUKKworICAgICAgICBjbWQgPSAiJXMgJXMgLWYgaW5zdGFsbCIgJSAoc2VsZi5hcHRfZ2V0X2NtZCwgc2VsZi5hcHRfYXJncykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQuc3BsaXQoKSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDYW5ub3QgZml4IGJyb2tlbiBkZXBlbmRlbmNpZXMuIENvbW1hbmQgJyVzJyAiCisgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgJWQ6XG4lcyIgJSAoY21kLCBlLnJldHVybmNvZGUsIGUub3V0cHV0KSkKKworICAgIGRlZiBsaXN0X2luc3RhbGxlZChzZWxmLCBmb3JtYXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBEcGtnUGtnc0xpc3Qoc2VsZi5kLCBzZWxmLnRhcmdldF9yb290ZnMpLmxpc3QoKQorCisKK2RlZiBnZW5lcmF0ZV9pbmRleF9maWxlcyhkKToKKyAgICBjbGFzc2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VfQ0xBU1NFUycsIFRydWUpLnJlcGxhY2UoInBhY2thZ2VfIiwgIiIpLnNwbGl0KCkKKworICAgIGluZGV4ZXJfbWFwID0geworICAgICAgICAicnBtIjogKFJwbUluZGV4ZXIsIGQuZ2V0VmFyKCdERVBMT1lfRElSX1JQTScsIFRydWUpKSwKKyAgICAgICAgImlwayI6IChPcGtnSW5kZXhlciwgZC5nZXRWYXIoJ0RFUExPWV9ESVJfSVBLJywgVHJ1ZSkpLAorICAgICAgICAiZGViIjogKERwa2dJbmRleGVyLCBkLmdldFZhcignREVQTE9ZX0RJUl9ERUInLCBUcnVlKSkKKyAgICB9CisKKyAgICByZXN1bHQgPSBOb25lCisKKyAgICBmb3IgcGtnX2NsYXNzIGluIGNsYXNzZXM6CisgICAgICAgIGlmIG5vdCBwa2dfY2xhc3MgaW4gaW5kZXhlcl9tYXA6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGluZGV4ZXJfbWFwW3BrZ19jbGFzc11bMV0pOgorICAgICAgICAgICAgcmVzdWx0ID0gaW5kZXhlcl9tYXBbcGtnX2NsYXNzXVswXShkLCBpbmRleGVyX21hcFtwa2dfY2xhc3NdWzFdKS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbChyZXN1bHQpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgIiIiCisgICAgV2Ugc2hvdWxkIGJlIGFibGUgdG8gcnVuIHRoaXMgYXMgYSBzdGFuZGFsb25lIHNjcmlwdCwgZnJvbSBvdXRzaWRlIGJpdGJha2UKKyAgICBlbnZpcm9ubWVudC4KKyAgICAiIiIKKyAgICAiIiIKKyAgICBUQkQKKyAgICAiIiIKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5IGIvbWV0YS9saWIvb2UvcGFja2FnZWRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1ZjA0NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhY2thZ2VkYXRhLnB5CkBAIC0wLDAgKzEsOTQgQEAKK2ltcG9ydCBjb2RlY3MKKworZGVmIHBhY2thZ2VkKHBrZywgZCk6CisgICAgcmV0dXJuIG9zLmFjY2VzcyhnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKSArICcucGFja2FnZWQnLCBvcy5SX09LKQorCitkZWYgcmVhZF9wa2dkYXRhZmlsZShmbik6CisgICAgcGtnZGF0YSA9IHt9CisKKyAgICBkZWYgZGVjb2RlKHN0cik6CisgICAgICAgIGMgPSBjb2RlY3MuZ2V0ZGVjb2Rlcigic3RyaW5nX2VzY2FwZSIpCisgICAgICAgIHJldHVybiBjKHN0cilbMF0KKworICAgIGlmIG9zLmFjY2Vzcyhmbiwgb3MuUl9PSyk6CisgICAgICAgIGltcG9ydCByZQorICAgICAgICBmID0gb3BlbihmbiwgJ3InKQorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHIgPSByZS5jb21waWxlKCIoW146XSspOlxzKiguKikiKQorICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByLm1hdGNoKGwpCisgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgIHBrZ2RhdGFbbS5ncm91cCgxKV0gPSBkZWNvZGUobS5ncm91cCgyKSkKKworICAgIHJldHVybiBwa2dkYXRhCisKK2RlZiBnZXRfc3VicGtnZWRhdGFfZm4ocGtnLCBkKToKKyAgICByZXR1cm4gZC5leHBhbmQoJyR7UEtHREFUQV9ESVJ9L3J1bnRpbWUvJXMnICUgcGtnKQorCitkZWYgaGFzX3N1YnBrZ2RhdGEocGtnLCBkKToKKyAgICByZXR1cm4gb3MuYWNjZXNzKGdldF9zdWJwa2dlZGF0YV9mbihwa2csIGQpLCBvcy5SX09LKQorCitkZWYgcmVhZF9zdWJwa2dkYXRhKHBrZywgZCk6CisgICAgcmV0dXJuIHJlYWRfcGtnZGF0YWZpbGUoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkpCisKK2RlZiBoYXNfcGtnZGF0YShwbiwgZCk6CisgICAgZm4gPSBkLmV4cGFuZCgnJHtQS0dEQVRBX0RJUn0vJXMnICUgcG4pCisgICAgcmV0dXJuIG9zLmFjY2Vzcyhmbiwgb3MuUl9PSykKKworZGVmIHJlYWRfcGtnZGF0YShwbiwgZCk6CisgICAgZm4gPSBkLmV4cGFuZCgnJHtQS0dEQVRBX0RJUn0vJXMnICUgcG4pCisgICAgcmV0dXJuIHJlYWRfcGtnZGF0YWZpbGUoZm4pCisKKyMKKyMgQ29sbGFwc2UgRk9PX3BrZyB2YXJpYWJsZXMgaW50byBGT08KKyMKK2RlZiByZWFkX3N1YnBrZ2RhdGFfZGljdChwa2csIGQpOgorICAgIHJldCA9IHt9CisgICAgc3ViZCA9IHJlYWRfcGtnZGF0YWZpbGUoZ2V0X3N1YnBrZ2VkYXRhX2ZuKHBrZywgZCkpCisgICAgZm9yIHZhciBpbiBzdWJkOgorICAgICAgICBuZXd2YXIgPSB2YXIucmVwbGFjZSgiXyIgKyBwa2csICIiKQorICAgICAgICBpZiBuZXd2YXIgPT0gdmFyIGFuZCB2YXIgKyAiXyIgKyBwa2cgaW4gc3ViZDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHJldFtuZXd2YXJdID0gc3ViZFt2YXJdCisgICAgcmV0dXJuIHJldAorCitkZWYgX3BrZ21hcChkKToKKyAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcgcGFja2FnZSB0byByZWNpcGUgbmFtZS4iIiIKKworICAgIHBrZ2RhdGFkaXIgPSBkLmdldFZhcigiUEtHREFUQV9ESVIiLCBUcnVlKQorCisgICAgcGtnbWFwID0ge30KKyAgICB0cnk6CisgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihwa2dkYXRhZGlyKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBiYi53YXJuKCJObyBmaWxlcyBpbiAlcz8iICUgcGtnZGF0YWRpcikKKyAgICAgICAgZmlsZXMgPSBbXQorCisgICAgZm9yIHBuIGluIGZpbHRlcihsYW1iZGEgZjogbm90IG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHBrZ2RhdGFkaXIsIGYpKSwgZmlsZXMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwa2dkYXRhID0gcmVhZF9wa2dkYXRhZmlsZShvcy5wYXRoLmpvaW4ocGtnZGF0YWRpciwgcG4pKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgcGFja2FnZXMgPSBwa2dkYXRhLmdldCgiUEFDS0FHRVMiKSBvciAiIgorICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLnNwbGl0KCk6CisgICAgICAgICAgICBwa2dtYXBbcGtnXSA9IHBuCisKKyAgICByZXR1cm4gcGtnbWFwCisKK2RlZiBwa2dtYXAoZCk6CisgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSBtYXBwaW5nIHBhY2thZ2UgdG8gcmVjaXBlIG5hbWUuCisgICAgQ2FjaGUgdGhlIG1hcHBpbmcgaW4gdGhlIG1ldGFkYXRhIiIiCisKKyAgICBwa2dtYXBfZGF0YSA9IGQuZ2V0VmFyKCJfX3BrZ21hcF9kYXRhIiwgRmFsc2UpCisgICAgaWYgcGtnbWFwX2RhdGEgaXMgTm9uZToKKyAgICAgICAgcGtnbWFwX2RhdGEgPSBfcGtnbWFwKGQpCisgICAgICAgIGQuc2V0VmFyKCJfX3BrZ21hcF9kYXRhIiwgcGtnbWFwX2RhdGEpCisKKyAgICByZXR1cm4gcGtnbWFwX2RhdGEKKworZGVmIHJlY2lwZW5hbWUocGtnLCBkKToKKyAgICAiIiJSZXR1cm4gdGhlIHJlY2lwZSBuYW1lIGZvciB0aGUgZ2l2ZW4gYmluYXJ5IHBhY2thZ2UgbmFtZS4iIiIKKworICAgIHJldHVybiBwa2dtYXAoZCkuZ2V0KHBrZykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weSBiL21ldGEvbGliL29lL3BhY2thZ2Vncm91cC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmViNDIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcGFja2FnZWdyb3VwLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCBpdGVydG9vbHMKKworZGVmIGlzX29wdGlvbmFsKGZlYXR1cmUsIGQpOgorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoIkZFQVRVUkVfUEFDS0FHRVNfJXMiICUgZmVhdHVyZSwgVHJ1ZSkKKyAgICBpZiBwYWNrYWdlczoKKyAgICAgICAgcmV0dXJuIGJvb2woZC5nZXRWYXJGbGFnKCJGRUFUVVJFX1BBQ0tBR0VTXyVzIiAlIGZlYXR1cmUsICJvcHRpb25hbCIpKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBib29sKGQuZ2V0VmFyRmxhZygiUEFDS0FHRV9HUk9VUF8lcyIgJSBmZWF0dXJlLCAib3B0aW9uYWwiKSkKKworZGVmIHBhY2thZ2VzKGZlYXR1cmVzLCBkKToKKyAgICBmb3IgZmVhdHVyZSBpbiBmZWF0dXJlczoKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcigiRkVBVFVSRV9QQUNLQUdFU18lcyIgJSBmZWF0dXJlLCBUcnVlKQorICAgICAgICBpZiBub3QgcGFja2FnZXM6CisgICAgICAgICAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFX0dST1VQXyVzIiAlIGZlYXR1cmUsIFRydWUpCisgICAgICAgIGZvciBwa2cgaW4gKHBhY2thZ2VzIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgICAgeWllbGQgcGtnCisKK2RlZiByZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgcmVxID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBub3QgaXNfb3B0aW9uYWwoZmVhdHVyZSwgZCksIGZlYXR1cmVzKQorICAgIHJldHVybiBwYWNrYWdlcyhyZXEsIGQpCisKK2RlZiBvcHRpb25hbF9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgb3B0ID0gZmlsdGVyKGxhbWJkYSBmZWF0dXJlOiBpc19vcHRpb25hbChmZWF0dXJlLCBkKSwgZmVhdHVyZXMpCisgICAgcmV0dXJuIHBhY2thZ2VzKG9wdCwgZCkKKworZGVmIGFjdGl2ZV9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgcmV0dXJuIGl0ZXJ0b29scy5jaGFpbihyZXF1aXJlZF9wYWNrYWdlcyhmZWF0dXJlcywgZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wYWNrYWdlcyhmZWF0dXJlcywgZCkpCisKK2RlZiBhY3RpdmVfcmVjaXBlcyhmZWF0dXJlcywgZCk6CisgICAgaW1wb3J0IG9lLnBhY2thZ2VkYXRhCisKKyAgICBmb3IgcGtnIGluIGFjdGl2ZV9wYWNrYWdlcyhmZWF0dXJlcywgZCk6CisgICAgICAgIHJlY2lwZSA9IG9lLnBhY2thZ2VkYXRhLnJlY2lwZW5hbWUocGtnLCBkKQorICAgICAgICBpZiByZWNpcGU6CisgICAgICAgICAgICB5aWVsZCByZWNpcGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3BhdGNoLnB5IGIvbWV0YS9saWIvb2UvcGF0Y2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4YmYxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3BhdGNoLnB5CkBAIC0wLDAgKzEsNjU5IEBACitpbXBvcnQgb2UucGF0aAorCitjbGFzcyBOb3RGb3VuZEVycm9yKGJiLkJCSGFuZGxlZEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJFcnJvcjogJXMgbm90IGZvdW5kLiIgJSBzZWxmLnBhdGgKKworY2xhc3MgQ21kRXJyb3IoYmIuQkJIYW5kbGVkRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhpdHN0YXR1cywgb3V0cHV0KToKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBleGl0c3RhdHVzCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJDb21tYW5kIEVycm9yOiBleGl0IHN0YXR1czogJWQgIE91dHB1dDpcbiVzIiAlIChzZWxmLnN0YXR1cywgc2VsZi5vdXRwdXQpCisKKworZGVmIHJ1bmNtZChhcmdzLCBkaXIgPSBOb25lKToKKyAgICBpbXBvcnQgcGlwZXMKKworICAgIGlmIGRpcjoKKyAgICAgICAgb2xkZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmN1cmRpcikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKGRpcikKKyAgICAgICAgb3MuY2hkaXIoZGlyKQorICAgICAgICAjIHByaW50KCJjd2Q6ICVzIC0+ICVzIiAlIChvbGRkaXIsIGRpcikpCisKKyAgICB0cnk6CisgICAgICAgIGFyZ3MgPSBbIHBpcGVzLnF1b3RlKHN0cihhcmcpKSBmb3IgYXJnIGluIGFyZ3MgXQorICAgICAgICBjbWQgPSAiICIuam9pbihhcmdzKQorICAgICAgICAjIHByaW50KCJjbWQ6ICVzIiAlIGNtZCkKKyAgICAgICAgKGV4aXRzdGF0dXMsIG91dHB1dCkgPSBvZS51dGlscy5nZXRzdGF0dXNvdXRwdXQoY21kKQorICAgICAgICBpZiBleGl0c3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBDbWRFcnJvcihleGl0c3RhdHVzID4+IDgsIG91dHB1dCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZmluYWxseToKKyAgICAgICAgaWYgZGlyOgorICAgICAgICAgICAgb3MuY2hkaXIob2xkZGlyKQorCitjbGFzcyBQYXRjaEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJQYXRjaCBFcnJvcjogJXMiICUgc2VsZi5tc2cKKworY2xhc3MgUGF0Y2hTZXQob2JqZWN0KToKKyAgICBkZWZhdWx0cyA9IHsKKyAgICAgICAgInN0cmlwcGF0aCI6IDEKKyAgICB9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyLCBkKToKKyAgICAgICAgc2VsZi5kaXIgPSBkaXIKKyAgICAgICAgc2VsZi5kID0gZAorICAgICAgICBzZWxmLnBhdGNoZXMgPSBbXQorICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgZGVmIGN1cnJlbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jdXJyZW50CisKKyAgICBkZWYgQ2xlYW4oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDbGVhbiBvdXQgdGhlIHBhdGNoIHNldC4gIEdlbmVyYWxseSBpbmNsdWRlcyB1bmFwcGx5aW5nIGFsbAorICAgICAgICBwYXRjaGVzIGFuZCB3aXBpbmcgb3V0IGFsbCBhc3NvY2lhdGVkIG1ldGFkYXRhLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgSW1wb3J0KHNlbGYsIHBhdGNoLCBmb3JjZSk6CisgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoImZpbGUiKToKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlBhdGNoIGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgaW4gcGF0Y2ggaW1wb3J0LiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhdGNoWyJmaWxlIl0gPSBiYi5mZXRjaDIubG9jYWxwYXRoKHBhdGNoWyJyZW1vdGUiXSwgc2VsZi5kKQorCisgICAgICAgIGZvciBwYXJhbSBpbiBQYXRjaFNldC5kZWZhdWx0czoKKyAgICAgICAgICAgIGlmIG5vdCBwYXRjaC5nZXQocGFyYW0pOgorICAgICAgICAgICAgICAgIHBhdGNoW3BhcmFtXSA9IFBhdGNoU2V0LmRlZmF1bHRzW3BhcmFtXQorCisgICAgICAgIGlmIHBhdGNoLmdldCgicmVtb3RlIik6CisgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZGF0YS5leHBhbmQoYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCksIHNlbGYuZCkKKworICAgICAgICBwYXRjaFsiZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbImZpbGUiXSkKKworICAgIGRlZiBQdXNoKHNlbGYsIGZvcmNlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUG9wKHNlbGYsIGZvcmNlKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmVmcmVzaChzZWxmLCByZW1vdGUgPSBOb25lLCBhbGwgPSBOb25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldFBhdGNoZWRGaWxlcyhwYXRjaGZpbGUsIHN0cmlwbGV2ZWwsIHNyY2Rpcj1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlYWQgYSBwYXRjaCBmaWxlIGFuZCBkZXRlcm1pbmUgd2hpY2ggZmlsZXMgaXQgd2lsbCBtb2RpZnkuCisgICAgICAgIFBhcmFtczoKKyAgICAgICAgICAgIHBhdGNoZmlsZTogdGhlIHBhdGNoIGZpbGUgdG8gcmVhZAorICAgICAgICAgICAgc3RyaXBsZXZlbDogdGhlIHN0cmlwIGxldmVsIGF0IHdoaWNoIHRoZSBwYXRjaCBpcyBnb2luZyB0byBiZSBhcHBsaWVkCisgICAgICAgICAgICBzcmNkaXI6IG9wdGlvbmFsIHBhdGggdG8gam9pbiBvbnRvIHRoZSBwYXRjaGVkIGZpbGUgcGF0aHMKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgbGlzdCBvZiB0dXBsZXMgb2YgZmlsZSBwYXRoIGFuZCBjaGFuZ2UgbW9kZSAoJ0EnIGZvciBhZGQsCisgICAgICAgICAgICAnRCcgZm9yIGRlbGV0ZSBvciAnTScgZm9yIG1vZGlmeSkKKyAgICAgICAgIiIiCisKKyAgICAgICAgZGVmIHBhdGNoZWRwYXRoKHBhdGNobGluZSk6CisgICAgICAgICAgICBmaWxlcHRoID0gcGF0Y2hsaW5lLnNwbGl0KClbMV0KKyAgICAgICAgICAgIGlmIGZpbGVwdGguZW5kc3dpdGgoJy9kZXYvbnVsbCcpOgorICAgICAgICAgICAgICAgIHJldHVybiAnL2Rldi9udWxsJworICAgICAgICAgICAgZmlsZXNwbGl0ID0gZmlsZXB0aC5zcGxpdChvcy5zZXApCisgICAgICAgICAgICBpZiBzdHJpcGxldmVsID4gbGVuKGZpbGVzcGxpdCk6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoJ1BhdGNoICVzIGhhcyBpbnZhbGlkIHN0cmlwIGxldmVsICVkJyAlIChwYXRjaGZpbGUsIHN0cmlwbGV2ZWwpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICByZXR1cm4gb3Muc2VwLmpvaW4oZmlsZXNwbGl0W3N0cmlwbGV2ZWw6XSkKKworICAgICAgICBjb3BpZWRtb2RlID0gRmFsc2UKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICB3aXRoIG9wZW4ocGF0Y2hmaWxlKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy0tLSAnKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hwdGggPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcGF0Y2hwdGg6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBjb3BpZWRtb2RlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRmaWxlID0gcGF0Y2hwdGgKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRmaWxlID0gcGF0Y2hwdGgKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKysrICcpOgorICAgICAgICAgICAgICAgICAgICBhZGRlZGZpbGUgPSBwYXRjaGVkcGF0aChsaW5lKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYWRkZWRmaWxlOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKioqICcpOgorICAgICAgICAgICAgICAgICAgICBjb3BpZWRtb2RlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICByZW1vdmVkZmlsZSA9IHBhdGNoZWRwYXRoKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZW1vdmVkZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGFkZGVkZmlsZSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGlmIGFkZGVkZmlsZSBhbmQgcmVtb3ZlZGZpbGU6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWRmaWxlID09ICcvZGV2L251bGwnOgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9ICdBJworICAgICAgICAgICAgICAgICAgICBlbGlmIGFkZGVkZmlsZSA9PSAnL2Rldi9udWxsJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnRCcKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAnTScKKyAgICAgICAgICAgICAgICAgICAgaWYgc3JjZGlyOgorICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHNyY2RpciwgYWRkZWRmaWxlKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gYWRkZWRmaWxlCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaXN0LmFwcGVuZCgoZnVsbHBhdGgsIG1vZGUpKQorCisgICAgICAgIHJldHVybiBmaWxlbGlzdAorCisKK2NsYXNzIFBhdGNoVHJlZShQYXRjaFNldCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIFBhdGNoU2V0Ll9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5wYXRjaGRpciA9IG9zLnBhdGguam9pbihzZWxmLmRpciwgJ3BhdGNoZXMnKQorICAgICAgICBzZWxmLnNlcmllc3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJywgJ3NlcmllcycpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLnBhdGNoZGlyKQorCisgICAgZGVmIF9hcHBlbmRQYXRjaEZpbGUoc2VsZiwgcGF0Y2gsIHN0cmlwcGF0aCk6CisgICAgICAgIHdpdGggb3BlbihzZWxmLnNlcmllc3BhdGgsICdhJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MucGF0aC5iYXNlbmFtZShwYXRjaCkgKyAiLCIgKyBzdHJpcHBhdGggKyAiXG4iKQorICAgICAgICBzaGVsbGNtZCA9IFsiY2F0IiwgcGF0Y2gsICI+IiAsIHNlbGYucGF0Y2hkaXIgKyAiLyIgKyBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoKV0KKyAgICAgICAgcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgIGRlZiBfcmVtb3ZlUGF0Y2goc2VsZiwgcCk6CisgICAgICAgIHBhdGNoID0ge30KKyAgICAgICAgcGF0Y2hbJ2ZpbGUnXSA9IHAuc3BsaXQoIiwiKVswXQorICAgICAgICBwYXRjaFsnc3RyaXBwYXRoJ10gPSBwLnNwbGl0KCIsIilbMV0KKyAgICAgICAgc2VsZi5fYXBwbHlwYXRjaChwYXRjaCwgRmFsc2UsIFRydWUpCisKKyAgICBkZWYgX3JlbW92ZVBhdGNoRmlsZShzZWxmLCBhbGwgPSBGYWxzZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnNlcmllc3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNlcmllc3BhdGgsICdyKycpIGFzIGY6CisgICAgICAgICAgICBwYXRjaGVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBmb3IgcCBpbiByZXZlcnNlZChwYXRjaGVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVQYXRjaChvcy5wYXRoLmpvaW4oc2VsZi5wYXRjaGRpciwgcC5zdHJpcCgpKSkKKyAgICAgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlUGF0Y2gob3MucGF0aC5qb2luKHNlbGYucGF0Y2hkaXIsIHBhdGNoZXNbLTFdLnN0cmlwKCkpKQorICAgICAgICAgICAgcGF0Y2hlcy5wb3AoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zZXJpZXNwYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICBmb3IgcCBpbiBwYXRjaGVzOgorICAgICAgICAgICAgICAgIGYud3JpdGUocCkKKyAgICAgICAgIAorICAgIGRlZiBJbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlID0gTm9uZSk6CisgICAgICAgICIiIiIiIgorICAgICAgICBQYXRjaFNldC5JbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlKQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpID0gc2VsZi5fY3VycmVudCArIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgIHNlbGYucGF0Y2hlcy5pbnNlcnQoaSwgcGF0Y2gpCisKKyAgICBkZWYgX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlID0gRmFsc2UsIHJldmVyc2UgPSBGYWxzZSwgcnVuID0gVHJ1ZSk6CisgICAgICAgIHNoZWxsY21kID0gWyJjYXQiLCBwYXRjaFsnZmlsZSddLCAifCIsICJwYXRjaCIsICItcCIsIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgICAgIHNoZWxsY21kLmFwcGVuZCgnLVInKQorCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gInNoIiArICItYyIgKyAiICIuam9pbihzaGVsbGNtZCkKKworICAgICAgICBpZiBub3QgZm9yY2U6CisgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy0tZHJ5LXJ1bicpCisKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNoZWxsY21kLnBvcChsZW4oc2hlbGxjbWQpIC0gMSkKKyAgICAgICAgb3V0cHV0ID0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKworICAgICAgICBpZiBub3QgcmV2ZXJzZToKKyAgICAgICAgICAgIHNlbGYuX2FwcGVuZFBhdGNoRmlsZShwYXRjaFsnZmlsZSddLCBwYXRjaFsnc3RyaXBwYXRoJ10pCisKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgZGVmIFB1c2goc2VsZiwgZm9yY2UgPSBGYWxzZSwgYWxsID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICBiYi5ub3RlKCJzZWxmLl9jdXJyZW50IGlzICVzIiAlIHNlbGYuX2N1cnJlbnQpCisgICAgICAgIGJiLm5vdGUoInBhdGNoZXMgaXMgJXMiICUgc2VsZi5wYXRjaGVzKQorICAgICAgICBpZiBhbGw6CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLnBhdGNoZXM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgiYXBwbHlpbmcgcGF0Y2ggJXMiICUgaSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hcHBseXBhdGNoKGksIGZvcmNlKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG5leHQgPSBzZWxmLl9jdXJyZW50ICsgMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXh0ID0gMAorCisgICAgICAgICAgICBiYi5ub3RlKCJhcHBseWluZyBwYXRjaCAlcyIgJSBzZWxmLnBhdGNoZXNbbmV4dF0pCisgICAgICAgICAgICByZXQgPSBzZWxmLl9hcHBseXBhdGNoKHNlbGYucGF0Y2hlc1tuZXh0XSwgZm9yY2UpCisKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQgPSBuZXh0CisgICAgICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgUG9wKHNlbGYsIGZvcmNlID0gTm9uZSwgYWxsID0gTm9uZSk6CisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoRmlsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZVBhdGNoRmlsZShGYWxzZSkKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gc2VsZi5fY3VycmVudCAtIDEKKworICAgIGRlZiBDbGVhbihzZWxmKToKKyAgICAgICAgIiIiIiIiCisgICAgICAgIHNlbGYuUG9wKGFsbD1UcnVlKQorCitjbGFzcyBHaXRBcHBseVRyZWUoUGF0Y2hUcmVlKToKKyAgICBwYXRjaF9saW5lX3ByZWZpeCA9ICclJSBvcmlnaW5hbCBwYXRjaCcKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXIsIGQpOgorICAgICAgICBQYXRjaFRyZWUuX19pbml0X18oc2VsZiwgZGlyLCBkKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0UGF0Y2hIZWFkZXIocGF0Y2hmaWxlKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4dHJhY3QganVzdCB0aGUgaGVhZGVyIGxpbmVzIGZyb20gdGhlIHRvcCBvZiBhIHBhdGNoIGZpbGUKKyAgICAgICAgIiIiCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgd2l0aCBvcGVuKHBhdGNoZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0luZGV4OiAnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJ2RpZmYgLScpIG9yIGxpbmUuc3RhcnRzd2l0aCgnLS0tJyk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcmVwYXJlQ29tbWl0KHBhdGNoZmlsZSk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlIGEgZ2l0IGNvbW1pdCBjb21tYW5kIGxpbmUgYmFzZWQgb24gdGhlIGhlYWRlciBmcm9tIGEgcGF0Y2ggZmlsZQorICAgICAgICAodHlwaWNhbGx5IHRoaXMgaXMgdXNlZnVsIGZvciBwYXRjaGVzIHRoYXQgY2Fubm90IGJlIGFwcGxpZWQgd2l0aCAiZ2l0IGFtIiBkdWUgdG8gZm9ybWF0dGluZykKKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgYXV0aG9yX3JlID0gcmUuY29tcGlsZSgnW1xTIF0rIDxcUytAXFMrXC5cUys+JykKKyAgICAgICAgIyBQcm9jZXNzIHBhdGNoIGhlYWRlciBhbmQgZXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24KKyAgICAgICAgbGluZXMgPSBHaXRBcHBseVRyZWUuZXh0cmFjdFBhdGNoSGVhZGVyKHBhdGNoZmlsZSkKKyAgICAgICAgb3V0bGluZXMgPSBbXQorICAgICAgICBhdXRob3IgPSBOb25lCisgICAgICAgIGRhdGUgPSBOb25lCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdTdWJqZWN0OiAnKToKKyAgICAgICAgICAgICAgICBzdWJqZWN0ID0gbGluZS5zcGxpdCgnOicsIDEpWzFdCisgICAgICAgICAgICAgICAgIyBSZW1vdmUgYW55IFtQQVRDSF1bb2UtY29yZV0gZXRjLgorICAgICAgICAgICAgICAgIHN1YmplY3QgPSByZS5zdWIocidcWy4rP1xdXHMqJywgJycsIHN1YmplY3QpCisgICAgICAgICAgICAgICAgb3V0bGluZXMuaW5zZXJ0KDAsICclc1xuXG4nICUgc3ViamVjdC5zdHJpcCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0Zyb206ICcpIG9yIGxpbmUuc3RhcnRzd2l0aCgnQXV0aG9yOiAnKToKKyAgICAgICAgICAgICAgICBhdXRob3J2YWwgPSBsaW5lLnNwbGl0KCc6JywgMSlbMV0uc3RyaXAoKS5yZXBsYWNlKCciJywgJycpCisgICAgICAgICAgICAgICAgIyBnaXQgaXMgZnVzc3kgYWJvdXQgYXV0aG9yIGZvcm1hdHRpbmcgaS5lLiBpdCBtdXN0IGJlIE5hbWUgPGVtYWlsQGRvbWFpbj4KKyAgICAgICAgICAgICAgICBpZiBhdXRob3JfcmUubWF0Y2goYXV0aG9ydmFsKToKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gYXV0aG9ydmFsCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RhdGU6ICcpOgorICAgICAgICAgICAgICAgIGlmIGRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZGF0ZXZhbCA9IGxpbmUuc3BsaXQoJzonLCAxKVsxXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICMgVmVyeSBjcnVkZSBjaGVjayBmb3IgZGF0ZSBmb3JtYXQsIHNpbmNlIGdpdCB3aWxsIGJsb3cgdXAgaWYgaXQncyBub3QgaW4gdGhlIHJpZ2h0CisgICAgICAgICAgICAgICAgICAgICMgZm9ybWF0LiBXaXRob3V0IGUuZy4gYSBweXRob24tZGF0ZXV0aWxzIGRlcGVuZGVuY3kgd2UgY2FuJ3QgZG8gYSB3aG9sZSBsb3QgbW9yZQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZGF0ZXZhbCkgPiAxMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRldmFsCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU2lnbmVkLW9mZi1ieTogJyk6CisgICAgICAgICAgICAgICAgYXV0aG9ydmFsID0gbGluZS5zcGxpdCgnOicsIDEpWzFdLnN0cmlwKCkucmVwbGFjZSgnIicsICcnKQorICAgICAgICAgICAgICAgICMgZ2l0IGlzIGZ1c3N5IGFib3V0IGF1dGhvciBmb3JtYXR0aW5nIGkuZS4gaXQgbXVzdCBiZSBOYW1lIDxlbWFpbEBkb21haW4+CisgICAgICAgICAgICAgICAgaWYgYXV0aG9yX3JlLm1hdGNoKGF1dGhvcnZhbCk6CisgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9IGF1dGhvcnZhbAorICAgICAgICAgICAgb3V0bGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICMgV3JpdGUgb3V0IGNvbW1pdCBtZXNzYWdlIHRvIGEgZmlsZQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgICAgICB0bXBmaWxlID0gdGYubmFtZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0bGluZXM6CisgICAgICAgICAgICAgICAgdGYud3JpdGUobGluZSkKKyAgICAgICAgIyBQcmVwYXJlIGdpdCBjb21tYW5kCisgICAgICAgIGNtZCA9IFsiZ2l0IiwgImNvbW1pdCIsICItRiIsIHRtcGZpbGVdCisgICAgICAgICMgZ2l0IGRvZXNuJ3QgbGlrZSBwbGFpbiBlbWFpbCBhZGRyZXNzZXMgYXMgYXV0aG9ycworICAgICAgICBpZiBhdXRob3IgYW5kICc8JyBpbiBhdXRob3I6CisgICAgICAgICAgICBjbWQuYXBwZW5kKCctLWF1dGhvcj0iJXMiJyAlIGF1dGhvcikKKyAgICAgICAgaWYgZGF0ZToKKyAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tZGF0ZT0iJXMiJyAlIGRhdGUpCisgICAgICAgIHJldHVybiAodG1wZmlsZSwgY21kKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleHRyYWN0UGF0Y2hlcyh0cmVlLCBzdGFydGNvbW1pdCwgb3V0ZGlyKToKKyAgICAgICAgaW1wb3J0IHRlbXBmaWxlCisgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdvZXBhdGNoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJmb3JtYXQtcGF0Y2giLCBzdGFydGNvbW1pdCwgIi1vIiwgdGVtcGRpcl0KKyAgICAgICAgICAgIG91dCA9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgdHJlZSkKKyAgICAgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgICAgICBmb3Igc3JjZmlsZSBpbiBvdXQuc3BsaXQoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaW5lcyA9IFtdCisgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihzcmNmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gbGluZS5zcGxpdCgpWy0xXS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dGZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5iYXNlbmFtZShzcmNmaWxlKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKG91dGRpciwgb3V0ZmlsZSksICd3JykgYXMgb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBwYXRjaGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mLndyaXRlKGxpbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICBkZWYgX2FwcGx5cGF0Y2goc2VsZiwgcGF0Y2gsIGZvcmNlID0gRmFsc2UsIHJldmVyc2UgPSBGYWxzZSwgcnVuID0gVHJ1ZSk6CisgICAgICAgIGltcG9ydCBzaHV0aWwKKworICAgICAgICBkZWYgX2FwcGx5cGF0Y2hoZWxwZXIoc2hlbGxjbWQsIHBhdGNoLCBmb3JjZSA9IEZhbHNlLCByZXZlcnNlID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICAgICAgaWYgcmV2ZXJzZToKKyAgICAgICAgICAgICAgICBzaGVsbGNtZC5hcHBlbmQoJy1SJykKKworICAgICAgICAgICAgc2hlbGxjbWQuYXBwZW5kKHBhdGNoWydmaWxlJ10pCisKKyAgICAgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICAgICAgcmV0dXJuICJzaCIgKyAiLWMiICsgIiAiLmpvaW4oc2hlbGxjbWQpCisKKyAgICAgICAgICAgIHJldHVybiBydW5jbWQoWyJzaCIsICItYyIsICIgIi5qb2luKHNoZWxsY21kKV0sIHNlbGYuZGlyKQorCisgICAgICAgICMgQWRkIGhvb2tzIHdoaWNoIGFkZCBhIHBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIHBhdGNoIGZpbGUgbmFtZSBpbiB0aGUgY29tbWl0IG1lc3NhZ2UKKyAgICAgICAgcmVwb3Jvb3QgPSAocnVuY21kKCJnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCIuc3BsaXQoKSwgc2VsZi5kaXIpIG9yICcnKS5zdHJpcCgpCisgICAgICAgIGlmIG5vdCByZXBvcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2Fubm90IGdldCByZXBvc2l0b3J5IHJvb3QgZm9yIGRpcmVjdG9yeSAlcyIgJSBzZWxmLmRpcikKKyAgICAgICAgY29tbWl0aG9vayA9IG9zLnBhdGguam9pbihyZXBvcm9vdCwgJy5naXQnLCAnaG9va3MnLCAnY29tbWl0LW1zZycpCisgICAgICAgIGNvbW1pdGhvb2tfYmFja3VwID0gY29tbWl0aG9vayArICcuZGV2dG9vbC1vcmlnJworICAgICAgICBhcHBseWhvb2sgPSBvcy5wYXRoLmpvaW4ocmVwb3Jvb3QsICcuZ2l0JywgJ2hvb2tzJywgJ2FwcGx5cGF0Y2gtbXNnJykKKyAgICAgICAgYXBwbHlob29rX2JhY2t1cCA9IGFwcGx5aG9vayArICcuZGV2dG9vbC1vcmlnJworICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21taXRob29rKToKKyAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbW1pdGhvb2ssIGNvbW1pdGhvb2tfYmFja3VwKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhhcHBseWhvb2spOgorICAgICAgICAgICAgc2h1dGlsLm1vdmUoYXBwbHlob29rLCBhcHBseWhvb2tfYmFja3VwKQorICAgICAgICB3aXRoIG9wZW4oY29tbWl0aG9vaywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgIyBOT1RFOiB0aGUgZm9ybWF0dGluZyBoZXJlIGlzIHNpZ25pZmljYW50OyBpZiB5b3UgY2hhbmdlIGl0IHlvdSdsbCBhbHNvIG5lZWQgdG8KKyAgICAgICAgICAgICMgY2hhbmdlIG90aGVyIHBsYWNlcyB3aGljaCByZWFkIGl0IGJhY2sKKyAgICAgICAgICAgIGYud3JpdGUoJ2VjaG8gPj4gJDFcbicpCisgICAgICAgICAgICBmLndyaXRlKCdlY2hvICIlczogJFBBVENIRklMRSIgPj4gJDFcbicgJSBHaXRBcHBseVRyZWUucGF0Y2hfbGluZV9wcmVmaXgpCisgICAgICAgIG9zLmNobW9kKGNvbW1pdGhvb2ssIDA3NTUpCisgICAgICAgIHNodXRpbC5jb3B5Mihjb21taXRob29rLCBhcHBseWhvb2spCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGNoZmlsZXZhciA9ICdQQVRDSEZJTEU9IiVzIicgJSBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWydmaWxlJ10pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbcGF0Y2hmaWxldmFyLCAiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLTMiLCAiLS1rZWVwLWNyIiwgIi1wJXMiICUgcGF0Y2hbJ3N0cmlwcGF0aCddXQorICAgICAgICAgICAgICAgIHJldHVybiBfYXBwbHlwYXRjaGhlbHBlcihzaGVsbGNtZCwgcGF0Y2gsIGZvcmNlLCByZXZlcnNlLCBydW4pCisgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgIyBOZWVkIHRvIGFib3J0IHRoZSBnaXQgYW0sIG9yIHdlJ2xsIHN0aWxsIGJlIHdpdGhpbiBpdCBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgIi0td29yay10cmVlPSVzIiAlIHJlcG9yb290LCAiYW0iLCAiLS1hYm9ydCJdCisgICAgICAgICAgICAgICAgICAgIHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgZXhjZXB0IENtZEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgIyBGYWxsIGJhY2sgdG8gZ2l0IGFwcGx5CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICItLWdpdC1kaXI9JXMiICUgcmVwb3Jvb3QsICJhcHBseSIsICItcCVzIiAlIHBhdGNoWydzdHJpcHBhdGgnXV0KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IF9hcHBseXBhdGNoaGVscGVyKHNoZWxsY21kLCBwYXRjaCwgZm9yY2UsIHJldmVyc2UsIHJ1bikKKyAgICAgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIHBhdGNoCisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IFBhdGNoVHJlZS5fYXBwbHlwYXRjaChzZWxmLCBwYXRjaCwgZm9yY2UsIHJldmVyc2UsIHJ1bikKKyAgICAgICAgICAgICAgICAjIEFkZCBhbGwgZmlsZXMKKyAgICAgICAgICAgICAgICBzaGVsbGNtZCA9IFsiZ2l0IiwgImFkZCIsICItZiIsICItQSIsICIuIl0KKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKyAgICAgICAgICAgICAgICAjIEV4Y2x1ZGUgdGhlIHBhdGNoZXMgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgc2hlbGxjbWQgPSBbImdpdCIsICJyZXNldCIsICJIRUFEIiwgc2VsZi5wYXRjaGRpcl0KKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcnVuY21kKFsic2giLCAiLWMiLCAiICIuam9pbihzaGVsbGNtZCldLCBzZWxmLmRpcikKKyAgICAgICAgICAgICAgICAjIENvbW1pdCB0aGUgcmVzdWx0CisgICAgICAgICAgICAgICAgKHRtcGZpbGUsIHNoZWxsY21kKSA9IHNlbGYucHJlcGFyZUNvbW1pdChwYXRjaFsnZmlsZSddKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2hlbGxjbWQuaW5zZXJ0KDAsIHBhdGNoZmlsZXZhcikKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHJ1bmNtZChbInNoIiwgIi1jIiwgIiAiLmpvaW4oc2hlbGxjbWQpXSwgc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRtcGZpbGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbW1pdGhvb2spCisgICAgICAgICAgICBvcy5yZW1vdmUoYXBwbHlob29rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tbWl0aG9va19iYWNrdXApOgorICAgICAgICAgICAgICAgIHNodXRpbC5tb3ZlKGNvbW1pdGhvb2tfYmFja3VwLCBjb21taXRob29rKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwbHlob29rX2JhY2t1cCk6CisgICAgICAgICAgICAgICAgc2h1dGlsLm1vdmUoYXBwbHlob29rX2JhY2t1cCwgYXBwbHlob29rKQorCisKK2NsYXNzIFF1aWx0VHJlZShQYXRjaFNldCk6CisgICAgZGVmIF9ydW5jbWQoc2VsZiwgYXJncywgcnVuID0gVHJ1ZSk6CisgICAgICAgIHF1aWx0cmMgPSBzZWxmLmQuZ2V0VmFyKCdRVUlMVFJDRklMRScsIFRydWUpCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gWyJxdWlsdCJdICsgWyItLXF1aWx0cmMiXSArIFtxdWlsdHJjXSArIGFyZ3MKKyAgICAgICAgcnVuY21kKFsicXVpbHQiXSArIFsiLS1xdWlsdHJjIl0gKyBbcXVpbHRyY10gKyBhcmdzLCBzZWxmLmRpcikKKworICAgIGRlZiBfcXVpbHRwYXRjaHBhdGgoc2VsZiwgZmlsZSk6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwgb3MucGF0aC5iYXNlbmFtZShmaWxlKSkKKworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpciwgZCk6CisgICAgICAgIFBhdGNoU2V0Ll9faW5pdF9fKHNlbGYsIGRpciwgZCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IEZhbHNlCisgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHApOgorICAgICAgICAgICAgb3MubWFrZWRpcnMocCkKKworICAgIGRlZiBDbGVhbihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuY21kKFsicG9wIiwgIi1hIiwgIi1mIl0pCisgICAgICAgICAgICBvZS5wYXRoLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICJwYXRjaGVzIiwic2VyaWVzIikpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBUcnVlCisKKyAgICBkZWYgSW5pdEZyb21EaXIoc2VsZik6CisgICAgICAgICMgcmVhZCBzZXJpZXMgLT4gc2VsZi5wYXRjaGVzCisgICAgICAgIHNlcmllc3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdwYXRjaGVzJywgJ3NlcmllcycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRpcik6CisgICAgICAgICAgICByYWlzZSBOb3RGb3VuZEVycm9yKHNlbGYuZGlyKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZXJpZXNwYXRoKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZXJpZXNwYXRoLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2ggPSB7fQorICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IGxpbmUuc3RyaXAoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHBhdGNoWyJxdWlsdGZpbGUiXSA9IHNlbGYuX3F1aWx0cGF0Y2hwYXRoKHBhcnRzWzBdKQorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicXVpbHRmaWxlbWQ1Il0gPSBiYi51dGlscy5tZDVfZmlsZShwYXRjaFsicXVpbHRmaWxlIl0pCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXJ0cykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hbInN0cmlwcGF0aCJdID0gcGFydHNbMV1bMjpdCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hlcy5hcHBlbmQocGF0Y2gpCisKKyAgICAgICAgICAgICMgZGV0ZXJtaW5lIHdoaWNoIHBhdGNoZXMgYXJlIGFwcGxpZWQgLT4gc2VsZi5fY3VycmVudAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHJ1bmNtZChbInF1aWx0IiwgImFwcGxpZWQiXSwgc2VsZi5kaXIpCisgICAgICAgICAgICBleGNlcHQgQ21kRXJyb3I6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGlmIHN5cy5leGNfdmFsdWUub3V0cHV0LnN0cmlwKCkgPT0gIk5vIHBhdGNoZXMgYXBwbGllZCI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBvdXRwdXQgPSBbdmFsIGZvciB2YWwgaW4gb3V0cHV0LnNwbGl0KCdcbicpIGlmIG5vdCB2YWwuc3RhcnRzd2l0aCgnIycpXQorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNlbGYucGF0Y2hlczoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKHBhdGNoWyJxdWlsdGZpbGUiXSkgPT0gb3V0cHV0Wy0xXToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYucGF0Y2hlcy5pbmRleChwYXRjaCkKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgIGRlZiBJbXBvcnQoc2VsZiwgcGF0Y2gsIGZvcmNlID0gTm9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLmluaXRpYWxpemVkOgorICAgICAgICAgICAgc2VsZi5Jbml0RnJvbURpcigpCisgICAgICAgIFBhdGNoU2V0LkltcG9ydChzZWxmLCBwYXRjaCwgZm9yY2UpCisgICAgICAgIG9lLnBhdGguc3ltbGluayhwYXRjaFsiZmlsZSJdLCBzZWxmLl9xdWlsdHBhdGNocGF0aChwYXRjaFsiZmlsZSJdKSwgZm9yY2U9VHJ1ZSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgInBhdGNoZXMiLCAic2VyaWVzIiksICJhIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUob3MucGF0aC5iYXNlbmFtZShwYXRjaFsiZmlsZSJdKSArICIgLXAiICsgcGF0Y2hbInN0cmlwcGF0aCJdICsgIlxuIikKKyAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZSJdID0gc2VsZi5fcXVpbHRwYXRjaHBhdGgocGF0Y2hbImZpbGUiXSkKKyAgICAgICAgcGF0Y2hbInF1aWx0ZmlsZW1kNSJdID0gYmIudXRpbHMubWQ1X2ZpbGUocGF0Y2hbInF1aWx0ZmlsZSJdKQorCisgICAgICAgICMgVE9ETzogZGV0ZXJtaW5lIGlmIHRoZSBmaWxlIGJlaW5nIGltcG9ydGVkOgorICAgICAgICAjICAgICAgMSkgaXMgYWxyZWFkeSBpbXBvcnRlZCwgYW5kIGlzIHRoZSBzYW1lCisgICAgICAgICMgICAgICAyKSBpcyBhbHJlYWR5IGltcG9ydGVkLCBidXQgZGlmZmVycworCisgICAgICAgIHNlbGYucGF0Y2hlcy5pbnNlcnQoc2VsZi5fY3VycmVudCBvciAwLCBwYXRjaCkKKworCisgICAgZGVmIFB1c2goc2VsZiwgZm9yY2UgPSBGYWxzZSwgYWxsID0gRmFsc2UsIHJ1biA9IFRydWUpOgorICAgICAgICAjIHF1aWx0IHB1c2ggWy1mXQorCisgICAgICAgIGFyZ3MgPSBbInB1c2giXQorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItZiIpCisgICAgICAgIGlmIGFsbDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItYSIpCisgICAgICAgIGlmIG5vdCBydW46CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVuY21kKGFyZ3MsIHJ1bikKKworICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudCA9IHNlbGYuX2N1cnJlbnQgKyAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gMAorCisgICAgZGVmIFBvcChzZWxmLCBmb3JjZSA9IE5vbmUsIGFsbCA9IE5vbmUpOgorICAgICAgICAjIHF1aWx0IHBvcCBbLWZdCisgICAgICAgIGFyZ3MgPSBbInBvcCJdCisgICAgICAgIGlmIGZvcmNlOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1mIikKKyAgICAgICAgaWYgYWxsOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi1hIikKKworICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworICAgICAgICBpZiBzZWxmLl9jdXJyZW50ID09IDA6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gTm9uZQorCisgICAgICAgIGlmIHNlbGYuX2N1cnJlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jdXJyZW50ID0gc2VsZi5fY3VycmVudCAtIDEKKworICAgIGRlZiBSZWZyZXNoKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYga3dhcmdzLmdldCgicmVtb3RlIik6CisgICAgICAgICAgICBwYXRjaCA9IHNlbGYucGF0Y2hlc1trd2FyZ3NbInBhdGNoIl1dCisgICAgICAgICAgICBpZiBub3QgcGF0Y2g6CisgICAgICAgICAgICAgICAgcmFpc2UgUGF0Y2hFcnJvcigiTm8gcGF0Y2ggZm91bmQgYXQgaW5kZXggJXMgaW4gcGF0Y2hzZXQuIiAlIGt3YXJnc1sicGF0Y2giXSkKKyAgICAgICAgICAgICh0eXBlLCBob3N0LCBwYXRoLCB1c2VyLCBwc3dkLCBwYXJtKSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaFsicmVtb3RlIl0pCisgICAgICAgICAgICBpZiB0eXBlID09ICJmaWxlIjoKKyAgICAgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCisgICAgICAgICAgICAgICAgaWYgbm90IHBhdGNoLmdldCgiZmlsZSIpIGFuZCBwYXRjaC5nZXQoInJlbW90ZSIpOgorICAgICAgICAgICAgICAgICAgICBwYXRjaFsiZmlsZSJdID0gYmIuZmV0Y2gyLmxvY2FscGF0aChwYXRjaFsicmVtb3RlIl0sIHNlbGYuZCkKKworICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShwYXRjaFsicXVpbHRmaWxlIl0sIHBhdGNoWyJmaWxlIl0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlVuYWJsZSB0byBkbyBhIHJlbW90ZSByZWZyZXNoIG9mICVzLCB1bnN1cHBvcnRlZCByZW1vdGUgdXJsIHNjaGVtZSAlcy4iICUgKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbInF1aWx0ZmlsZSJdKSwgdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHF1aWx0IHJlZnJlc2gKKyAgICAgICAgICAgIGFyZ3MgPSBbInJlZnJlc2giXQorICAgICAgICAgICAgaWYga3dhcmdzLmdldCgicXVpbHRmaWxlIik6CisgICAgICAgICAgICAgICAgYXJncy5hcHBlbmQob3MucGF0aC5iYXNlbmFtZShrd2FyZ3NbInF1aWx0ZmlsZSJdKSkKKyAgICAgICAgICAgIGVsaWYga3dhcmdzLmdldCgicGF0Y2giKToKKyAgICAgICAgICAgICAgICBhcmdzLmFwcGVuZChvcy5wYXRoLmJhc2VuYW1lKHNlbGYucGF0Y2hlc1trd2FyZ3NbInBhdGNoIl1dWyJxdWlsdGZpbGUiXSkpCisgICAgICAgICAgICBzZWxmLl9ydW5jbWQoYXJncykKKworY2xhc3MgUmVzb2x2ZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2hzZXQsIHRlcm1pbmFsKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmVzb2x2ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgUmV2ZXJ0KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBGaW5hbGl6ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKK2NsYXNzIE5PT1BSZXNvbHZlcihSZXNvbHZlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGNoc2V0LCB0ZXJtaW5hbCk6CisgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBwYXRjaHNldAorICAgICAgICBzZWxmLnRlcm1pbmFsID0gdGVybWluYWwKKworICAgIGRlZiBSZXNvbHZlKHNlbGYpOgorICAgICAgICBvbGRkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihzZWxmLnBhdGNoc2V0LmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5wYXRjaHNldC5QdXNoKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZGRpcikKKyAgICAgICAgICAgIHJhaXNlCisKKyMgUGF0Y2ggcmVzb2x2ZXIgd2hpY2ggcmVsaWVzIG9uIHRoZSB1c2VyIGRvaW5nIGFsbCB0aGUgd29yayBpbnZvbHZlZCBpbiB0aGUKKyMgcmVzb2x1dGlvbiwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHJlZnJlc2hpbmcgdGhlIHJlbW90ZSBjb3B5IG9mIHRoZSBwYXRjaAorIyBmaWxlcyAodGhlIHVybHMpLgorY2xhc3MgVXNlclJlc29sdmVyKFJlc29sdmVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2hzZXQsIHRlcm1pbmFsKToKKyAgICAgICAgc2VsZi5wYXRjaHNldCA9IHBhdGNoc2V0CisgICAgICAgIHNlbGYudGVybWluYWwgPSB0ZXJtaW5hbAorCisgICAgIyBGb3JjZSBhIHB1c2ggaW4gdGhlIHBhdGNoc2V0LCB0aGVuIGRyb3AgdG8gYSBzaGVsbCBmb3IgdGhlIHVzZXIgdG8KKyAgICAjIHJlc29sdmUgYW55IHJlamVjdGVkIGh1bmtzCisgICAgZGVmIFJlc29sdmUoc2VsZik6CisgICAgICAgIG9sZGRpciA9IG9zLnBhdGguYWJzcGF0aChvcy5jdXJkaXIpCisgICAgICAgIG9zLmNoZGlyKHNlbGYucGF0Y2hzZXQuZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhdGNoc2V0LlB1c2goRmFsc2UpCisgICAgICAgIGV4Y2VwdCBDbWRFcnJvciBhcyB2OgorICAgICAgICAgICAgIyBQYXRjaCBhcHBsaWNhdGlvbiBmYWlsZWQKKyAgICAgICAgICAgIHBhdGNoY21kID0gc2VsZi5wYXRjaHNldC5QdXNoKFRydWUsIEZhbHNlLCBGYWxzZSkKKworICAgICAgICAgICAgdCA9IHNlbGYucGF0Y2hzZXQuZC5nZXRWYXIoJ1QnLCBUcnVlKQorICAgICAgICAgICAgaWYgbm90IHQ6CisgICAgICAgICAgICAgICAgYmIubXNnLmZhdGFsKCJCdWlsZCIsICJUIG5vdCBzZXQiKQorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHQpCisgICAgICAgICAgICBpbXBvcnQgcmFuZG9tCisgICAgICAgICAgICByY2ZpbGUgPSAiJXMvYmFzaHJjLiVzLiVzIiAlICh0LCBzdHIob3MuZ2V0cGlkKCkpLCByYW5kb20ucmFuZG9tKCkpCisgICAgICAgICAgICB3aXRoIG9wZW4ocmNmaWxlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiZWNobyAnKioqIE1hbnVhbCBwYXRjaCByZXNvbHV0aW9uIG1vZGUgKioqJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICdEcm9wcGluZyB0byBhIHNoZWxsLCBzbyBwYXRjaCByZWplY3RzIGNhbiBiZSBmaXhlZCBtYW51YWxseS4nXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoImVjaG8gJ1J1biBcInF1aWx0IHJlZnJlc2hcIiB3aGVuIHBhdGNoIGlzIGNvcnJlY3RlZCwgcHJlc3MgQ1RSTCtEIHRvIGV4aXQuJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJlY2hvICcnXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIiAiLmpvaW4ocGF0Y2hjbWQpICsgIlxuIikKKyAgICAgICAgICAgIG9zLmNobW9kKHJjZmlsZSwgMDc3NSkKKworICAgICAgICAgICAgc2VsZi50ZXJtaW5hbCgiYmFzaCAtLXJjZmlsZSAiICsgcmNmaWxlLCAnUGF0Y2ggUmVqZWN0czogUGxlYXNlIGZpeCBwYXRjaCByZWplY3RzIG1hbnVhbGx5Jywgc2VsZi5wYXRjaHNldC5kKQorCisgICAgICAgICAgICAjIENvbnN0cnVjdCBhIG5ldyBQYXRjaFNldCBhZnRlciB0aGUgdXNlcidzIGNoYW5nZXMsIGNvbXBhcmUgdGhlCisgICAgICAgICAgICAjIHNldHMsIGNoZWNraW5nIHBhdGNoZXMgZm9yIG1vZGlmaWNhdGlvbnMsIGFuZCBkb2luZyBhIHJlbW90ZQorICAgICAgICAgICAgIyByZWZyZXNoIG9uIGVhY2guCisgICAgICAgICAgICBvbGRwYXRjaHNldCA9IHNlbGYucGF0Y2hzZXQKKyAgICAgICAgICAgIHNlbGYucGF0Y2hzZXQgPSBvbGRwYXRjaHNldC5fX2NsYXNzX18oc2VsZi5wYXRjaHNldC5kaXIsIHNlbGYucGF0Y2hzZXQuZCkKKworICAgICAgICAgICAgZm9yIHBhdGNoIGluIHNlbGYucGF0Y2hzZXQucGF0Y2hlczoKKyAgICAgICAgICAgICAgICBvbGRwYXRjaCA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Igb3BhdGNoIGluIG9sZHBhdGNoc2V0LnBhdGNoZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIG9wYXRjaFsicXVpbHRmaWxlIl0gPT0gcGF0Y2hbInF1aWx0ZmlsZSJdOgorICAgICAgICAgICAgICAgICAgICAgICAgb2xkcGF0Y2ggPSBvcGF0Y2gKKworICAgICAgICAgICAgICAgIGlmIG9sZHBhdGNoOgorICAgICAgICAgICAgICAgICAgICBwYXRjaFsicmVtb3RlIl0gPSBvbGRwYXRjaFsicmVtb3RlIl0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0Y2hbInF1aWx0ZmlsZSJdID09IG9sZHBhdGNoWyJxdWlsdGZpbGUiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGNoWyJxdWlsdGZpbGVtZDUiXSAhPSBvbGRwYXRjaFsicXVpbHRmaWxlbWQ1Il06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIubm90ZSgiUGF0Y2ggJXMgaGFzIGNoYW5nZWQsIHVwZGF0aW5nIHJlbW90ZSB1cmwgJXMiICUgKG9zLnBhdGguYmFzZW5hbWUocGF0Y2hbInF1aWx0ZmlsZSJdKSwgcGF0Y2hbInJlbW90ZSJdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVzZXIgY2hhbmdlPyAgcmVtb3RlIHJlZnJlc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhdGNoc2V0LlJlZnJlc2gocmVtb3RlPVRydWUsIHBhdGNoPXNlbGYucGF0Y2hzZXQucGF0Y2hlcy5pbmRleChwYXRjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlciBkaWQgbm90IGZpeCB0aGUgcHJvYmxlbS4gIEFib3J0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBhdGNoRXJyb3IoIlBhdGNoIGFwcGxpY2F0aW9uIGZhaWxlZCwgYW5kIHVzZXIgZGlkIG5vdCBmaXggYW5kIHJlZnJlc2ggdGhlIHBhdGNoLiIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBvcy5jaGRpcihvbGRkaXIpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBvcy5jaGRpcihvbGRkaXIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wYXRoLnB5IGIvbWV0YS9saWIvb2UvcGF0aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTNlYmZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvcGF0aC5weQpAQCAtMCwwICsxLDI0MyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgZ2xvYgoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBvcy5wYXRoCisKK2RlZiBqb2luKCpwYXRocyk6CisgICAgIiIiTGlrZSBvcy5wYXRoLmpvaW4gYnV0IGRvZXNuJ3QgdHJlYXQgYWJzb2x1dGUgUkhTIHNwZWNpYWxseSIiIgorICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKCIvIi5qb2luKHBhdGhzKSkKKworZGVmIHJlbGF0aXZlKHNyYywgZGVzdCk6CisgICAgIiIiIFJldHVybiBhIHJlbGF0aXZlIHBhdGggZnJvbSBzcmMgdG8gZGVzdC4KKworICAgID4+PiByZWxhdGl2ZSgiL3Vzci9iaW4iLCAiL3RtcC9mb28vYmFyIikKKyAgICAuLi8uLi90bXAvZm9vL2JhcgorCisgICAgPj4+IHJlbGF0aXZlKCIvdXNyL2JpbiIsICIvdXNyL2xpYiIpCisgICAgLi4vbGliCisKKyAgICA+Pj4gcmVsYXRpdmUoIi90bXAiLCAiL3RtcC9mb28vYmFyIikKKyAgICBmb28vYmFyCisgICAgIiIiCisKKyAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKGRlc3QsIHNyYykKKworZGVmIG1ha2VfcmVsYXRpdmVfc3ltbGluayhwYXRoKToKKyAgICAiIiIgQ29udmVydCBhbiBhYnNvbHV0ZSBzeW1saW5rIHRvIGEgcmVsYXRpdmUgb25lICIiIgorICAgIGlmIG5vdCBvcy5wYXRoLmlzbGluayhwYXRoKToKKyAgICAgICAgcmV0dXJuCisgICAgbGluayA9IG9zLnJlYWRsaW5rKHBhdGgpCisgICAgaWYgbm90IG9zLnBhdGguaXNhYnMobGluayk6CisgICAgICAgIHJldHVybgorCisgICAgIyBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3IgZGlyZWN0b3J5CisgICAgYW5jZXN0b3IgPSBwYXRoCisgICAgZGVwdGggPSAwCisgICAgd2hpbGUgYW5jZXN0b3IgYW5kIG5vdCBsaW5rLnN0YXJ0c3dpdGgoYW5jZXN0b3IpOgorICAgICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnJwYXJ0aXRpb24oJy8nKVswXQorICAgICAgICBkZXB0aCArPSAxCisKKyAgICBpZiBub3QgYW5jZXN0b3I6CisgICAgICAgIHByaW50KCJtYWtlX3JlbGF0aXZlX3N5bWxpbmsoKSBFcnJvcjogdW5hYmxlIHRvIGZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiAlcyBhbmQgaXRzIHRhcmdldCIgJSBwYXRoKQorICAgICAgICByZXR1cm4KKworICAgIGJhc2UgPSBsaW5rLnBhcnRpdGlvbihhbmNlc3RvcilbMl0uc3RyaXAoJy8nKQorICAgIHdoaWxlIGRlcHRoID4gMToKKyAgICAgICAgYmFzZSA9ICIuLi8iICsgYmFzZQorICAgICAgICBkZXB0aCAtPSAxCisKKyAgICBvcy5yZW1vdmUocGF0aCkKKyAgICBvcy5zeW1saW5rKGJhc2UsIHBhdGgpCisKK2RlZiBmb3JtYXRfZGlzcGxheShwYXRoLCBtZXRhZGF0YSk6CisgICAgIiIiIFByZXBhcmUgYSBwYXRoIGZvciBkaXNwbGF5IHRvIHRoZSB1c2VyLiAiIiIKKyAgICByZWwgPSByZWxhdGl2ZShtZXRhZGF0YS5nZXRWYXIoIlRPUERJUiIsIFRydWUpLCBwYXRoKQorICAgIGlmIGxlbihyZWwpID4gbGVuKHBhdGgpOgorICAgICAgICByZXR1cm4gcGF0aAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZWwKKworZGVmIGNvcHl0cmVlKHNyYywgZHN0KToKKyAgICAjIFdlIGNvdWxkIHVzZSBzb21ldGhpbmcgbGlrZSBzaHV0aWwuY29weXRyZWUgaGVyZSBidXQgaXQgdHVybnMgb3V0IHRvCisgICAgIyB0byBiZSBzbG93LiBJdCB0YWtlcyB0d2ljZSBhcyBsb25nIGNvcHlpbmcgdG8gYW4gZW1wdHkgZGlyZWN0b3J5LiAKKyAgICAjIElmIGRzdCBhbHJlYWR5IGhhcyBjb250ZW50cyBwZXJmb3JtYW5jZSBjYW4gYmUgMTUgdGltZSBzbG93ZXIKKyAgICAjIFRoaXMgd2F5IHdlIGFsc28gcHJlc2VydmUgaGFyZGxpbmtzIGJldHdlZW4gZmlsZXMgaW4gdGhlIHRyZWUuCisKKyAgICBiYi51dGlscy5ta2RpcmhpZXIoZHN0KQorICAgIGNtZCA9ICd0YXIgLWNmIC0gLUMgJXMgLXAgLiB8IHRhciAteGYgLSAtQyAlcycgJSAoc3JjLCBkc3QpCisgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgY29weWhhcmRsaW5rdHJlZShzcmMsIGRzdCk6CisgICAgIiIiIE1ha2UgdGhlIGhhcmQgbGluayB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgY29weS4gIiIiCisgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdCkKKyAgICBpZiBvcy5wYXRoLmlzZGlyKHNyYykgYW5kIG5vdCBsZW4ob3MubGlzdGRpcihzcmMpKToKKyAgICAgICAgcmV0dXJuCQorCisgICAgaWYgKG9zLnN0YXQoc3JjKS5zdF9kZXYgPT0gIG9zLnN0YXQoZHN0KS5zdF9kZXYpOgorICAgICAgICAjIE5lZWQgdG8gY29weSBkaXJlY3RvcmllcyBvbmx5IHdpdGggdGFyIGZpcnN0IHNpbmNlIGNwIHdpbGwgZXJyb3IgaWYgdHdvIAorICAgICAgICAjIHdyaXRlcnMgdHJ5IGFuZCBjcmVhdGUgYSBkaXJlY3RvcnkgYXQgdGhlIHNhbWUgdGltZQorICAgICAgICBjbWQgPSAnY2QgJXM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8IHRhciAtY2YgLSAtQyAlcyAtcCAtLWZpbGVzLWZyb20gLSAtLW5vLXJlY3Vyc2lvbiB8IHRhciAteGYgLSAtQyAlcycgJSAoc3JjLCBzcmMsIGRzdCkKKyAgICAgICAgY2hlY2tfb3V0cHV0KGNtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBjbWQgPSAnY2QgJXM7IGZpbmQgLiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJXMnICUgKHNyYywgZHN0KQorICAgICAgICBjaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgZWxzZToKKyAgICAgICAgY29weXRyZWUoc3JjLCBkc3QpCisKK2RlZiByZW1vdmUocGF0aCwgcmVjdXJzZT1UcnVlKToKKyAgICAiIiJFcXVpdmFsZW50IHRvIHJtIC1mIG9yIHJtIC1yZiIiIgorICAgIGZvciBuYW1lIGluIGdsb2IuZ2xvYihwYXRoKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHJlY3Vyc2UgYW5kIGV4Yy5lcnJubyA9PSBlcnJuby5FSVNESVI6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShuYW1lKQorICAgICAgICAgICAgZWxpZiBleGMuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKK2RlZiBzeW1saW5rKHNvdXJjZSwgZGVzdGluYXRpb24sIGZvcmNlPUZhbHNlKToKKyAgICAiIiJDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIiIiCisgICAgdHJ5OgorICAgICAgICBpZiBmb3JjZToKKyAgICAgICAgICAgIHJlbW92ZShkZXN0aW5hdGlvbikKKyAgICAgICAgb3Muc3ltbGluayhzb3VyY2UsIGRlc3RpbmF0aW9uKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUIG9yIG9zLnJlYWRsaW5rKGRlc3RpbmF0aW9uKSAhPSBzb3VyY2U6CisgICAgICAgICAgICByYWlzZQorCitjbGFzcyBDYWxsZWRQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0Y29kZSwgY21kLCBvdXRwdXQgPSBOb25lKToKKyAgICAgICAgc2VsZi5yZXRjb2RlID0gcmV0Y29kZQorICAgICAgICBzZWxmLmNtZCA9IGNtZAorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIkNvbW1hbmQgJyVzJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAlZCB3aXRoIG91dHB1dCAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0Y29kZSwgc2VsZi5vdXRwdXQpCisKKyMgTm90IG5lZWRlZCB3aGVuIHdlIG1vdmUgdG8gcHl0aG9uIDIuNworZGVmIGNoZWNrX291dHB1dCgqcG9wZW5hcmdzLCAqKmt3YXJncyk6CisgICAgciIiIlJ1biBjb21tYW5kIHdpdGggYXJndW1lbnRzIGFuZCByZXR1cm4gaXRzIG91dHB1dCBhcyBhIGJ5dGUgc3RyaW5nLgorCisgICAgSWYgdGhlIGV4aXQgY29kZSB3YXMgbm9uLXplcm8gaXQgcmFpc2VzIGEgQ2FsbGVkUHJvY2Vzc0Vycm9yLiAgVGhlCisgICAgQ2FsbGVkUHJvY2Vzc0Vycm9yIG9iamVjdCB3aWxsIGhhdmUgdGhlIHJldHVybiBjb2RlIGluIHRoZSByZXR1cm5jb2RlCisgICAgYXR0cmlidXRlIGFuZCBvdXRwdXQgaW4gdGhlIG91dHB1dCBhdHRyaWJ1dGUuCisKKyAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIFBvcGVuIGNvbnN0cnVjdG9yLiAgRXhhbXBsZToKKworICAgID4+PiBjaGVja19vdXRwdXQoWyJscyIsICItbCIsICIvZGV2L251bGwiXSkKKyAgICAnY3J3LXJ3LXJ3LSAxIHJvb3Qgcm9vdCAxLCAzIE9jdCAxOCAgMjAwNyAvZGV2L251bGxcbicKKworICAgIFRoZSBzdGRvdXQgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQgYXMgaXQgaXMgdXNlZCBpbnRlcm5hbGx5LgorICAgIFRvIGNhcHR1cmUgc3RhbmRhcmQgZXJyb3IgaW4gdGhlIHJlc3VsdCwgdXNlIHN0ZGVycj1TVERPVVQuCisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsiL2Jpbi9zaCIsICItYyIsCisgICAgLi4uICAgICAgICAgICAgICAgImxzIC1sIG5vbl9leGlzdGVudF9maWxlIDsgZXhpdCAwIl0sCisgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQorICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKKyAgICAiIiIKKyAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgKnBvcGVuYXJncywgKiprd2FyZ3MpCisgICAgb3V0cHV0LCB1bnVzZWRfZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHByb2Nlc3MucG9sbCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgY21kID0ga3dhcmdzLmdldCgiYXJncyIpCisgICAgICAgIGlmIGNtZCBpcyBOb25lOgorICAgICAgICAgICAgY21kID0gcG9wZW5hcmdzWzBdCisgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBjbWQsIG91dHB1dD1vdXRwdXQpCisgICAgcmV0dXJuIG91dHB1dAorCitkZWYgZmluZChkaXIsICoqd2Fsa29wdGlvbnMpOgorICAgICIiIiBHaXZlbiBhIGRpcmVjdG9yeSwgcmVjdXJzZXMgaW50byB0aGF0IGRpcmVjdG9yeSwKKyAgICByZXR1cm5pbmcgYWxsIGZpbGVzIGFzIGFic29sdXRlIHBhdGhzLiAiIiIKKworICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGRpciwgKip3YWxrb3B0aW9ucyk6CisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgeWllbGQgb3MucGF0aC5qb2luKHJvb3QsIGZpbGUpCisKKworIyMgcmVhbHBhdGgoKSByZWxhdGVkIGZ1bmN0aW9ucworZGVmIF9faXNfcGF0aF9iZWxvdyhmaWxlLCByb290KToKKyAgICByZXR1cm4gKGZpbGUgKyBvcy5wYXRoLnNlcCkuc3RhcnRzd2l0aChyb290KQorCitkZWYgX19yZWFscGF0aF9yZWwoc3RhcnQsIHJlbF9wYXRoLCByb290LCBsb29wX2NudCwgYXNzdW1lX2Rpcik6CisgICAgIiIiQ2FsY3VsYXRlcyByZWFsIHBhdGggb2Ygc3ltbGluayAnc3RhcnQnICsgJ3JlbF9wYXRoJyBiZWxvdworICAgICdyb290Jzsgbm8gcGFydCBvZiAnc3RhcnQnIGJlbG93ICdyb290JyBtdXN0IGNvbnRhaW4gc3ltbGlua3MuICIiIgorICAgIGhhdmVfZGlyID0gVHJ1ZQorCisgICAgZm9yIGQgaW4gcmVsX3BhdGguc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICBpZiBub3QgaGF2ZV9kaXIgYW5kIG5vdCBhc3N1bWVfZGlyOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTk9FTlQsICJubyBzdWNoIGRpcmVjdG9yeSAlcyIgJSBzdGFydCkKKworICAgICAgICBpZiBkID09IG9zLnBhdGgucGFyZGlyOiAjICcuLicKKyAgICAgICAgICAgIGlmIGxlbihzdGFydCkgPj0gbGVuKHJvb3QpOgorICAgICAgICAgICAgICAgICMgZG8gbm90IGZvbGxvdyAnLi4nIGJlZm9yZSByb290CisgICAgICAgICAgICAgICAgc3RhcnQgPSBvcy5wYXRoLmRpcm5hbWUoc3RhcnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZW1pdCB3YXJuaW5nPworICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIChzdGFydCwgaGF2ZV9kaXIpID0gX19yZWFscGF0aChvcy5wYXRoLmpvaW4oc3RhcnQsIGQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKQorCisgICAgICAgIGFzc2VydChfX2lzX3BhdGhfYmVsb3coc3RhcnQsIHJvb3QpKQorCisgICAgcmV0dXJuIHN0YXJ0CisKK2RlZiBfX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKToKKyAgICB3aGlsZSBvcy5wYXRoLmlzbGluayhmaWxlKSBhbmQgbGVuKGZpbGUpID49IGxlbihyb290KToKKyAgICAgICAgaWYgbG9vcF9jbnQgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRUxPT1AsIGZpbGUpCisKKyAgICAgICAgbG9vcF9jbnQgLT0gMQorICAgICAgICB0YXJnZXQgPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnJlYWRsaW5rKGZpbGUpKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKHRhcmdldCk6CisgICAgICAgICAgICB0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpCisgICAgICAgICAgICBhc3NlcnQoX19pc19wYXRoX2JlbG93KHRkaXIsIHJvb3QpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGRpciA9IHJvb3QKKworICAgICAgICBmaWxlID0gX19yZWFscGF0aF9yZWwodGRpciwgdGFyZ2V0LCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKworICAgIHRyeToKKyAgICAgICAgaXNfZGlyID0gb3MucGF0aC5pc2RpcihmaWxlKQorICAgIGV4Y2VwdDoKKyAgICAgICAgaXNfZGlyID0gZmFsc2UKKworICAgIHJldHVybiAoZmlsZSwgaXNfZGlyKQorCitkZWYgcmVhbHBhdGgoZmlsZSwgcm9vdCwgdXNlX3BoeXNkaXIgPSBUcnVlLCBsb29wX2NudCA9IDEwMCwgYXNzdW1lX2RpciA9IEZhbHNlKToKKyAgICAiIiIgUmV0dXJucyB0aGUgY2Fub25pY2FsIHBhdGggb2YgJ2ZpbGUnIHdpdGggYXNzdW1pbmcgYQorICAgIHRvcGxldmVsICdyb290JyBkaXJlY3RvcnkuIFdoZW4gJ3VzZV9waHlzZGlyJyBpcyBzZXQsIGFsbAorICAgIHByZWNlZGluZyBwYXRoIGNvbXBvbmVudHMgb2YgJ2ZpbGUnIHdpbGwgYmUgcmVzb2x2ZWQgZmlyc3Q7CisgICAgdGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgdW5sZXNzIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBpcworICAgIG5vIHN5bWxpbmsgaW4gdGhlIHBhdGguIFdoZW4gJ2Fzc3VtZV9kaXInIGlzIG5vdCBzZXQsIG1pc3NpbmcKKyAgICBwYXRoIGNvbXBvbmVudHMgd2lsbCByYWlzZSBhbiBFTk9FTlQgZXJyb3IiIiIKKworICAgIHJvb3QgPSBvcy5wYXRoLm5vcm1wYXRoKHJvb3QpCisgICAgZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoZmlsZSkKKworICAgIGlmIG5vdCByb290LmVuZHN3aXRoKG9zLnBhdGguc2VwKToKKyAgICAgICAgIyBsZXR0aW5nIHJvb3QgZW5kIHdpdGggJy8nIG1ha2VzIHNvbWUgdGhpbmdzIGVhc2llcgorICAgICAgICByb290ID0gcm9vdCArIG9zLnBhdGguc2VwCisKKyAgICBpZiBub3QgX19pc19wYXRoX2JlbG93KGZpbGUsIHJvb3QpOgorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlZBTCwgImZpbGUgJyVzJyBpcyBub3QgYmVsb3cgcm9vdCIgJSBmaWxlKQorCisgICAgdHJ5OgorICAgICAgICBpZiB1c2VfcGh5c2RpcjoKKyAgICAgICAgICAgIGZpbGUgPSBfX3JlYWxwYXRoX3JlbChyb290LCBmaWxlWyhsZW4ocm9vdCkgLSAxKTpdLCByb290LCBsb29wX2NudCwgYXNzdW1lX2RpcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGUgPSBfX3JlYWxwYXRoKGZpbGUsIHJvb3QsIGxvb3BfY250LCBhc3N1bWVfZGlyKVswXQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUxPT1A6CisgICAgICAgICAgICAjIG1ha2UgRUxPT1AgbW9yZSByZWFkYWJsZTsgd2l0aG91dCBjYXRjaGluZyBpdCwgdGhlcmUgd2lsbAorICAgICAgICAgICAgIyBiZSBwcmludGVkIGEgYmFja3RyYWNlIHdpdGggMTAwcyBvZiBPU0Vycm9yIGV4Y2VwdGlvbnMKKyAgICAgICAgICAgICMgZWxzZQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FTE9PUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtdWNoIHJlY3Vyc2lvbnMgd2hpbGUgcmVzb2x2aW5nICclcyc7IGxvb3AgaW4gJyVzJyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZSwgZS5zdHJlcnJvcikpCisKKyAgICAgICAgcmFpc2UKKworICAgIHJldHVybiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkgYi9tZXRhL2xpYi9vZS9wcnNlcnZpY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjYmNiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyNiBAQAorCitkZWYgcHJzZXJ2X21ha2VfY29ubihkLCBjaGVjayA9IEZhbHNlKToKKyAgICBpbXBvcnQgcHJzZXJ2LnNlcnYKKyAgICBob3N0X3BhcmFtcyA9IGZpbHRlcihOb25lLCAoZC5nZXRWYXIoIlBSU0VSVl9IT1NUIiwgVHJ1ZSkgb3IgJycpLnNwbGl0KCc6JykpCisgICAgdHJ5OgorICAgICAgICBjb25uID0gTm9uZQorICAgICAgICBjb25uID0gcHJzZXJ2LnNlcnYuUFJTZXJ2ZXJDb25uZWN0aW9uKGhvc3RfcGFyYW1zWzBdLCBpbnQoaG9zdF9wYXJhbXNbMV0pKQorICAgICAgICBpZiBjaGVjazoKKyAgICAgICAgICAgIGlmIG5vdCBjb25uLnBpbmcoKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3NlcnZpY2Ugbm90IGF2YWlsYWJsZScpCisgICAgICAgIGQuc2V0VmFyKCJfX1BSU0VSVl9DT05OIixjb25uKQorICAgIGV4Y2VwdCBFeGNlcHRpb24sIGV4YzoKKyAgICAgICAgYmIuZmF0YWwoIkNvbm5lY3RpbmcgdG8gUFIgc2VydmljZSAlczolcyBmYWlsZWQ6ICVzIiAlIChob3N0X3BhcmFtc1swXSwgaG9zdF9wYXJhbXNbMV0sIHN0cihleGMpKSkKKworICAgIHJldHVybiBjb25uCisKK2RlZiBwcnNlcnZfZHVtcF9kYihkKToKKyAgICBpZiBub3QgZC5nZXRWYXIoJ1BSU0VSVl9IT1NUJywgVHJ1ZSk6CisgICAgICAgIGJiLmVycm9yKCJOb3QgdXNpbmcgbmV0d29yayBiYXNlZCBQUiBzZXJ2aWNlIikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGNvbm4gPSBkLmdldFZhcigiX19QUlNFUlZfQ09OTiIsIFRydWUpCisgICAgaWYgY29ubiBpcyBOb25lOgorICAgICAgICBjb25uID0gcHJzZXJ2X21ha2VfY29ubihkKQorICAgICAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgICAgICBiYi5lcnJvcigiTWFraW5nIGNvbm5lY3Rpb24gZmFpbGVkIHRvIHJlbW90ZSBQUiBzZXJ2aWNlIikKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjZHVtcCBkYgorICAgIG9wdF92ZXJzaW9uID0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1ZFUlNJT04nLCBUcnVlKQorICAgIG9wdF9wa2dhcmNoID0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX1BLR0FSQ0gnLCBUcnVlKQorICAgIG9wdF9jaGVja3N1bSA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUE9QVF9DSEVDS1NVTScsIFRydWUpCisgICAgb3B0X2NvbCA9ICgiMSIgPT0gZC5nZXRWYXIoJ1BSU0VSVl9EVU1QT1BUX0NPTCcsIFRydWUpKQorICAgIHJldHVybiBjb25uLmV4cG9ydChvcHRfdmVyc2lvbiwgb3B0X3BrZ2FyY2gsIG9wdF9jaGVja3N1bSwgb3B0X2NvbCkKKworZGVmIHByc2Vydl9pbXBvcnRfZGIoZCwgZmlsdGVyX3ZlcnNpb249Tm9uZSwgZmlsdGVyX3BrZ2FyY2g9Tm9uZSwgZmlsdGVyX2NoZWNrc3VtPU5vbmUpOgorICAgIGlmIG5vdCBkLmdldFZhcignUFJTRVJWX0hPU1QnLCBUcnVlKToKKyAgICAgICAgYmIuZXJyb3IoIk5vdCB1c2luZyBuZXR3b3JrIGJhc2VkIFBSIHNlcnZpY2UiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgY29ubiA9IGQuZ2V0VmFyKCJfX1BSU0VSVl9DT05OIiwgVHJ1ZSkKKyAgICBpZiBjb25uIGlzIE5vbmU6CisgICAgICAgIGNvbm4gPSBwcnNlcnZfbWFrZV9jb25uKGQpCisgICAgICAgIGlmIGNvbm4gaXMgTm9uZToKKyAgICAgICAgICAgIGJiLmVycm9yKCJNYWtpbmcgY29ubmVjdGlvbiBmYWlsZWQgdG8gcmVtb3RlIFBSIHNlcnZpY2UiKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAjZ2V0IHRoZSBlbnRyeSB2YWx1ZXMKKyAgICBpbXBvcnRlZCA9IFtdCisgICAgcHJlZml4ID0gIlBSQVVUTyQiCisgICAgZm9yIHYgaW4gZC5rZXlzKCk6CisgICAgICAgIGlmIHYuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgKHJlbWFpbiwgc2VwLCBjaGVja3N1bSkgPSB2LnJwYXJ0aXRpb24oJyQnKQorICAgICAgICAgICAgKHJlbWFpbiwgc2VwLCBwa2dhcmNoKSA9IHJlbWFpbi5ycGFydGl0aW9uKCckJykKKyAgICAgICAgICAgIChyZW1haW4sIHNlcCwgdmVyc2lvbikgPSByZW1haW4ucnBhcnRpdGlvbignJCcpCisgICAgICAgICAgICBpZiAocmVtYWluICsgJyQnICE9IHByZWZpeCkgb3IgXAorICAgICAgICAgICAgICAgKGZpbHRlcl92ZXJzaW9uIGFuZCBmaWx0ZXJfdmVyc2lvbiAhPSB2ZXJzaW9uKSBvciBcCisgICAgICAgICAgICAgICAoZmlsdGVyX3BrZ2FyY2ggYW5kIGZpbHRlcl9wa2dhcmNoICE9IHBrZ2FyY2gpIG9yIFwKKyAgICAgICAgICAgICAgIChmaWx0ZXJfY2hlY2tzdW0gYW5kIGZpbHRlcl9jaGVja3N1bSAhPSBjaGVja3N1bSk6CisgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gaW50KGQuZ2V0VmFyKHJlbWFpbiArICckJyArIHZlcnNpb24gKyAnJCcgKyBwa2dhcmNoICsgJyQnICsgY2hlY2tzdW0sIFRydWUpKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGJiLmRlYnVnKCJOb3QgdmFsaWQgdmFsdWUgb2YgJXM6JXMiICUgKHYsc3RyKGV4YykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXQgPSBjb25uLmltcG9ydG9uZSh2ZXJzaW9uLHBrZ2FyY2gsY2hlY2tzdW0sdmFsdWUpCisgICAgICAgICAgICBpZiByZXQgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgYmIuZXJyb3IoImltcG9ydGluZyglcywlcywlcywlZCkgZmFpbGVkLiBEQiBtYXkgaGF2ZSBsYXJnZXIgdmFsdWUgJWQiICUgKHZlcnNpb24scGtnYXJjaCxjaGVja3N1bSx2YWx1ZSxyZXQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIGltcG9ydGVkLmFwcGVuZCgodmVyc2lvbixwa2dhcmNoLGNoZWNrc3VtLHZhbHVlKSkKKyAgICByZXR1cm4gaW1wb3J0ZWQKKworZGVmIHByc2Vydl9leHBvcnRfdG9maWxlKGQsIG1ldGFpbmZvLCBkYXRhaW5mbywgbG9ja2Rvd24sIG5vbWF4PUZhbHNlKToKKyAgICBpbXBvcnQgYmIudXRpbHMKKyAgICAjaW5pdGlsaXplIHRoZSBvdXRwdXQgZmlsZQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihkLmdldFZhcignUFJTRVJWX0RVTVBESVInLCBUcnVlKSkKKyAgICBkZiA9IGQuZ2V0VmFyKCdQUlNFUlZfRFVNUEZJTEUnLCBUcnVlKQorICAgICN3cml0ZSBkYXRhCisgICAgbGYgPSBiYi51dGlscy5sb2NrZmlsZSgiJXMubG9jayIgJSBkZikKKyAgICBmID0gb3BlbihkZiwgImEiKQorICAgIGlmIG1ldGFpbmZvOgorICAgICAgICAjZHVtcCBjb2x1bW4gaW5mbyAKKyAgICAgICAgZi53cml0ZSgiI1BSX2NvcmVfdmVyID0gXCIlc1wiXG5cbiIgJSBtZXRhaW5mb1snY29yZV92ZXInXSk7CisgICAgICAgIGYud3JpdGUoIiNUYWJsZTogJXNcbiIgJSBtZXRhaW5mb1sndGJsX25hbWUnXSkKKyAgICAgICAgZi53cml0ZSgiI0NvbHVtbnM6XG4iKQorICAgICAgICBmLndyaXRlKCIjbmFtZSAgICAgIFx0IHR5cGUgICAgXHQgbm90biAgICBcdCBkZmx0ICAgIFx0IHBrXG4iKQorICAgICAgICBmLndyaXRlKCIjLS0tLS0tLS0tLVx0IC0tLS0tLS0tXHQgLS0tLS0tLS1cdCAtLS0tLS0tLVx0IC0tLS1cbiIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihtZXRhaW5mb1snY29sX2luZm8nXSkpOgorICAgICAgICAgICAgZi53cml0ZSgiIyUxMHNcdCAlOHNcdCAlOHNcdCAlOHNcdCAlNHNcbiIgJSAKKyAgICAgICAgICAgICAgICAgICAgKG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWyduYW1lJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ3R5cGUnXSwgCisgICAgICAgICAgICAgICAgICAgICBtZXRhaW5mb1snY29sX2luZm8nXVtpXVsnbm90bnVsbCddLCAKKyAgICAgICAgICAgICAgICAgICAgIG1ldGFpbmZvWydjb2xfaW5mbyddW2ldWydkZmx0X3ZhbHVlJ10sIAorICAgICAgICAgICAgICAgICAgICAgbWV0YWluZm9bJ2NvbF9pbmZvJ11baV1bJ3BrJ10pKQorICAgICAgICBmLndyaXRlKCJcbiIpCisKKyAgICBpZiBsb2NrZG93bjoKKyAgICAgICAgZi53cml0ZSgiUFJTRVJWX0xPQ0tET1dOID0gXCIxXCJcblxuIikKKworICAgIGlmIGRhdGFpbmZvOgorICAgICAgICBpZHggPSB7fQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oZGF0YWluZm8pKToKKyAgICAgICAgICAgIHBrZ2FyY2ggPSBkYXRhaW5mb1tpXVsncGtnYXJjaCddCisgICAgICAgICAgICB2YWx1ZSA9IGRhdGFpbmZvW2ldWyd2YWx1ZSddCisgICAgICAgICAgICBpZiBwa2dhcmNoIG5vdCBpbiBpZHg6CisgICAgICAgICAgICAgICAgaWR4W3BrZ2FyY2hdID0gaQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA+IGRhdGFpbmZvW2lkeFtwa2dhcmNoXV1bJ3ZhbHVlJ106CisgICAgICAgICAgICAgICAgaWR4W3BrZ2FyY2hdID0gaQorICAgICAgICAgICAgZi53cml0ZSgiUFJBVVRPJCVzJCVzJCVzID0gXCIlc1wiXG4iICUgCisgICAgICAgICAgICAgICAgKHN0cihkYXRhaW5mb1tpXVsndmVyc2lvbiddKSwgcGtnYXJjaCwgc3RyKGRhdGFpbmZvW2ldWydjaGVja3N1bSddKSwgc3RyKHZhbHVlKSkpCisgICAgICAgIGlmIG5vdCBub21heDoKKyAgICAgICAgICAgIGZvciBpIGluIGlkeDoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCJQUkFVVE9fJXNfJXMgPSBcIiVzXCJcbiIgJSAoc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3ZlcnNpb24nXSksc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3BrZ2FyY2gnXSksc3RyKGRhdGFpbmZvW2lkeFtpXV1bJ3ZhbHVlJ10pKSkKKyAgICBmLmNsb3NlKCkKKyAgICBiYi51dGlscy51bmxvY2tmaWxlKGxmKQorCitkZWYgcHJzZXJ2X2NoZWNrX2F2YWlsKGQpOgorICAgIGhvc3RfcGFyYW1zID0gZmlsdGVyKE5vbmUsIChkLmdldFZhcigiUFJTRVJWX0hPU1QiLCBUcnVlKSBvciAnJykuc3BsaXQoJzonKSkKKyAgICB0cnk6CisgICAgICAgIGlmIGxlbihob3N0X3BhcmFtcykgIT0gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW50KGhvc3RfcGFyYW1zWzFdKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGJiLmZhdGFsKCdVbmRlZmluZWQvaW5jb3JyZWN0IFBSU0VSVl9IT1NUIHZhbHVlLiBGb3JtYXQ6ICJob3N0OnBvcnQiJykKKyAgICBlbHNlOgorICAgICAgICBwcnNlcnZfbWFrZV9jb25uKGQsIFRydWUpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9xYS5weSBiL21ldGEvbGliL29lL3FhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1Y2RhYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS9xYS5weQpAQCAtMCwwICsxLDExMSBAQAorY2xhc3MgRUxGRmlsZToKKyAgICBFSV9OSURFTlQgPSAxNgorCisgICAgRUlfQ0xBU1MgICAgICA9IDQKKyAgICBFSV9EQVRBICAgICAgID0gNQorICAgIEVJX1ZFUlNJT04gICAgPSA2CisgICAgRUlfT1NBQkkgICAgICA9IDcKKyAgICBFSV9BQklWRVJTSU9OID0gOAorCisgICAgIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVJX0NMQVNTCisgICAgRUxGQ0xBU1NOT05FID0gMAorICAgIEVMRkNMQVNTMzIgICA9IDEKKyAgICBFTEZDTEFTUzY0ICAgPSAyCisKKyAgICAjIHBvc3NpYmxlIHZhbHVlIGZvciBFSV9WRVJTSU9OCisgICAgRVZfQ1VSUkVOVCAgID0gMQorCisgICAgIyBwb3NzaWJsZSB2YWx1ZXMgZm9yIEVJX0RBVEEKKyAgICBFTEZEQVRBTk9ORSAgPSAwCisgICAgRUxGREFUQTJMU0IgID0gMQorICAgIEVMRkRBVEEyTVNCICA9IDIKKworICAgIGRlZiBteV9hc3NlcnQoc2VsZiwgZXhwZWN0YXRpb24sIHJlc3VsdCk6CisgICAgICAgIGlmIG5vdCBleHBlY3RhdGlvbiA9PSByZXN1bHQ6CisgICAgICAgICAgICAjcHJpbnQgIicleCcsJyV4JyAlcyIgJSAob3JkKGV4cGVjdGF0aW9uKSwgb3JkKHJlc3VsdCksIHNlbGYubmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhpcyBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiaXRzID0gMCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5iaXRzID0gYml0cworICAgICAgICBzZWxmLm9iamR1bXBfb3V0cHV0ID0ge30KKworICAgIGRlZiBvcGVuKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlKHNlbGYubmFtZSwgInIiKQorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLmZpbGUucmVhZChFTEZGaWxlLkVJX05JREVOVCs0KQorCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KGxlbihzZWxmLmRhdGEpLCBFTEZGaWxlLkVJX05JREVOVCs0KQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMF0sIGNocigweDdmKSApCisgICAgICAgIHNlbGYubXlfYXNzZXJ0KHNlbGYuZGF0YVsxXSwgJ0UnKQorICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbMl0sICdMJykKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhWzNdLCAnRicpCisgICAgICAgIGlmIHNlbGYuYml0cyA9PSAwOgorICAgICAgICAgICAgaWYgc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdID09IGNocihFTEZGaWxlLkVMRkNMQVNTMzIpOgorICAgICAgICAgICAgICAgIHNlbGYuYml0cyA9IDMyCisgICAgICAgICAgICBlbGlmIHNlbGYuZGF0YVtFTEZGaWxlLkVJX0NMQVNTXSA9PSBjaHIoRUxGRmlsZS5FTEZDTEFTUzY0KToKKyAgICAgICAgICAgICAgICBzZWxmLmJpdHMgPSA2NAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE5vdCAzMi1iaXQgb3IgNjQuLiBsZXRzIGFzc2VydAorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRUxGIGJ1dCBub3QgMzIgb3IgNjQgYml0LiIpCisgICAgICAgIGVsaWYgc2VsZi5iaXRzID09IDMyOgorICAgICAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQ0xBU1NdLCBjaHIoRUxGRmlsZS5FTEZDTEFTUzMyKSkKKyAgICAgICAgZWxpZiBzZWxmLmJpdHMgPT0gNjQ6CisgICAgICAgICAgICBzZWxmLm15X2Fzc2VydChzZWxmLmRhdGFbRUxGRmlsZS5FSV9DTEFTU10sIGNocihFTEZGaWxlLkVMRkNMQVNTNjQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJNdXN0IHNwZWNpZnkgdW5rbm93biwgMzIgb3IgNjQgYml0IHNpemUuIikKKyAgICAgICAgc2VsZi5teV9hc3NlcnQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfVkVSU0lPTl0sIGNocihFTEZGaWxlLkVWX0NVUlJFTlQpICkKKworICAgICAgICBzZWxmLnNleCA9IHNlbGYuZGF0YVtFTEZGaWxlLkVJX0RBVEFdCisgICAgICAgIGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEFOT05FKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZi5zZXggPT0gRUxGREFUQU5PTkUiKQorICAgICAgICBlbGlmIHNlbGYuc2V4ID09IGNocihFTEZGaWxlLkVMRkRBVEEyTFNCKToKKyAgICAgICAgICAgIHNlbGYuc2V4ID0gIjwiCisgICAgICAgIGVsaWYgc2VsZi5zZXggPT0gY2hyKEVMRkZpbGUuRUxGREFUQTJNU0IpOgorICAgICAgICAgICAgc2VsZi5zZXggPSAiPiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBzZWxmLnNleCIpCisKKyAgICBkZWYgb3NBYmkoc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfT1NBQkldKQorCisgICAgZGVmIGFiaVZlcnNpb24oc2VsZik6CisgICAgICAgIHJldHVybiBvcmQoc2VsZi5kYXRhW0VMRkZpbGUuRUlfQUJJVkVSU0lPTl0pCisKKyAgICBkZWYgYWJpU2l6ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYml0cworCisgICAgZGVmIGlzTGl0dGxlRW5kaWFuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXggPT0gIjwiCisKKyAgICBkZWYgaXNCaWdFbmdpYW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNleCA9PSAiPiIKKworICAgIGRlZiBtYWNoaW5lKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2Uga25vdyB0aGUgc2V4IHN0b3JlZCBpbiBzZWxmLnNleCBhbmQgd2UKKyAgICAgICAga25vdyB0aGUgcG9zaXRpb24KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBzdHJ1Y3QKKyAgICAgICAgKGEsKSA9IHN0cnVjdC51bnBhY2soc2VsZi5zZXgrIkgiLCBzZWxmLmRhdGFbMTg6MjBdKQorICAgICAgICByZXR1cm4gYQorCisgICAgZGVmIHJ1bl9vYmpkdW1wKHNlbGYsIGNtZCwgZCk6CisgICAgICAgIGltcG9ydCBiYi5wcm9jZXNzCisgICAgICAgIGltcG9ydCBzeXMKKworICAgICAgICBpZiBjbWQgaW4gc2VsZi5vYmpkdW1wX291dHB1dDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamR1bXBfb3V0cHV0W2NtZF0KKworICAgICAgICBvYmpkdW1wID0gZC5nZXRWYXIoJ09CSkRVTVAnLCBUcnVlKQorCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsiTENfQUxMIl0gPSAiQyIKKyAgICAgICAgZW52WyJQQVRIIl0gPSBkLmdldFZhcignUEFUSCcsIFRydWUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmIubm90ZSgiJXMgJXMgJXMiICUgKG9iamR1bXAsIGNtZCwgc2VsZi5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYub2JqZHVtcF9vdXRwdXRbY21kXSA9IGJiLnByb2Nlc3MucnVuKFtvYmpkdW1wLCBjbWQsIHNlbGYubmFtZV0sIGVudj1lbnYsIHNoZWxsPUZhbHNlKVswXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqZHVtcF9vdXRwdXRbY21kXQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBiYi5ub3RlKCIlcyAlcyAlcyBmYWlsZWQ6ICVzIiAlIChvYmpkdW1wLCBjbWQsIHNlbGYubmFtZSwgZSkpCisgICAgICAgICAgICByZXR1cm4gIiIKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5IGIvbWV0YS9saWIvb2UvcmVjaXBldXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYTcyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3JlY2lwZXV0aWxzLnB5CkBAIC0wLDAgKzEsNzQwIEBACisjIFV0aWxpdHkgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCBtb2RpZnlpbmcgcmVjaXBlcworIworIyBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSB0aGUgT0UgbGF5ZXIgaW5kZXgKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgdXRpbHMKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCByZQoraW1wb3J0IGZubWF0Y2gKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0LCBkZWZhdWx0ZGljdAorCisKKyMgSGVscCB1cyB0byBmaW5kIHBsYWNlcyB0byBpbnNlcnQgdmFsdWVzCityZWNpcGVfcHJvZ3Jlc3Npb24gPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJywgJ0xJQ0VOU0UnLCAnTElDX0ZJTEVTX0NIS1NVTScsICdQUk9WSURFUycsICdERVBFTkRTJywgJ1BSJywgJ1BWJywgJ1NSQ1JFVicsICdTUkNfVVJJJywgJ1MnLCAnZG9fZmV0Y2gnLCAnZG9fdW5wYWNrJywgJ2RvX3BhdGNoJywgJ0VYVFJBX09FQ09ORicsICdkb19jb25maWd1cmUnLCAnRVhUUkFfT0VNQUtFJywgJ2RvX2NvbXBpbGUnLCAnZG9faW5zdGFsbCcsICdkb19wb3B1bGF0ZV9zeXNyb290JywgJ0lOSVRTQ1JJUFQnLCAnVVNFUkFERCcsICdHUk9VUEFERCcsICdQQUNLQUdFUycsICdGSUxFUycsICdSREVQRU5EUycsICdSUkVDT01NRU5EUycsICdSU1VHR0VTVFMnLCAnUlBST1ZJREVTJywgJ1JSRVBMQUNFUycsICdSQ09ORkxJQ1RTJywgJ0FMTE9XX0VNUFRZJywgJ2RvX3BhY2thZ2UnLCAnZG9fZGVwbG95J10KKyMgVmFyaWFibGVzIHRoYXQgc29tZXRpbWVzIGFyZSBhIGJpdCBsb25nIGJ1dCBzaG91bGRuJ3QgYmUgd3JhcHBlZAorbm93cmFwX3ZhcnMgPSBbJ1NVTU1BUlknLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUiddCitsaXN0X3ZhcnMgPSBbJ1NSQ19VUkknLCAnTElDX0ZJTEVTX0NIS1NVTSddCittZXRhX3ZhcnMgPSBbJ1NVTU1BUlknLCAnREVTQ1JJUFRJT04nLCAnSE9NRVBBR0UnLCAnQlVHVFJBQ0tFUicsICdTRUNUSU9OJ10KKworCitkZWYgcG5fdG9fcmVjaXBlKGNvb2tlciwgcG4pOgorICAgICIiIkNvbnZlcnQgYSByZWNpcGUgbmFtZSAoUE4pIHRvIHRoZSBwYXRoIHRvIHRoZSByZWNpcGUgZmlsZSIiIgorICAgIGltcG9ydCBiYi5wcm92aWRlcnMKKworICAgIGlmIHBuIGluIGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG46CisgICAgICAgIGZpbGVuYW1lcyA9IGNvb2tlci5yZWNpcGVjYWNoZS5wa2dfcG5bcG5dCisgICAgICAgIGJlc3QgPSBiYi5wcm92aWRlcnMuZmluZEJlc3RQcm92aWRlcihwbiwgY29va2VyLmRhdGEsIGNvb2tlci5yZWNpcGVjYWNoZSwgY29va2VyLnJlY2lwZWNhY2hlLnBrZ19wbikKKyAgICAgICAgcmV0dXJuIGJlc3RbM10KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2RlZiBnZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKToKKyAgICAiIiJJZiBhIHJlY2lwZSBjb3VsZCBub3QgYmUgZm91bmQsIGZpbmQgb3V0IHdoeSBpZiBwb3NzaWJsZSIiIgorICAgIGltcG9ydCBiYi50YXNrZGF0YQorICAgIHRhc2tkYXRhID0gYmIudGFza2RhdGEuVGFza0RhdGEoTm9uZSwgc2tpcGxpc3Q9Y29va2VyLnNraXBsaXN0KQorICAgIHJldHVybiB0YXNrZGF0YS5nZXRfcmVhc29ucyhwbikKKworCitkZWYgcGFyc2VfcmVjaXBlKGZuLCBhcHBlbmRmaWxlcywgZCk6CisgICAgIiIiCisgICAgUGFyc2UgYW4gaW5kaXZpZHVhbCByZWNpcGUgZmlsZSwgb3B0aW9uYWxseSB3aXRoIGEgbGlzdCBvZgorICAgIGJiYXBwZW5kIGZpbGVzLgorICAgICIiIgorICAgIGltcG9ydCBiYi5jYWNoZQorICAgIGVudmRhdGEgPSBiYi5jYWNoZS5DYWNoZS5sb2FkRGF0YUZ1bGwoZm4sIGFwcGVuZGZpbGVzLCBkKQorICAgIHJldHVybiBlbnZkYXRhCisKKworZGVmIHBhcnNlX3JlY2lwZV9zaW1wbGUoY29va2VyLCBwbiwgZCwgYXBwZW5kcz1UcnVlKToKKyAgICAiIiIKKyAgICBQYXJzZSBhIHJlY2lwZSBhbmQgb3B0aW9uYWxseSBhbGwgYmJhcHBlbmRzIHRoYXQgYXBwbHkgdG8gaXQKKyAgICBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICAgICIiIgorICAgIGltcG9ydCBiYi5wcm92aWRlcnMKKworICAgIHJlY2lwZWZpbGUgPSBwbl90b19yZWNpcGUoY29va2VyLCBwbikKKyAgICBpZiBub3QgcmVjaXBlZmlsZToKKyAgICAgICAgc2tpcHJlYXNvbnMgPSBnZXRfdW5hdmFpbGFibGVfcmVhc29ucyhjb29rZXIsIHBuKQorICAgICAgICAjIFdlIG1heSBhcyB3ZWxsIHJlLXVzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlciBoZXJlCisgICAgICAgIGlmIHNraXByZWFzb25zOgorICAgICAgICAgICAgcmFpc2UgYmIucHJvdmlkZXJzLk5vUHJvdmlkZXIoc2tpcHJlYXNvbnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiYi5wcm92aWRlcnMuTm9Qcm92aWRlcignVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICVzJyAlIHBuKQorICAgIGlmIGFwcGVuZHM6CisgICAgICAgIGFwcGVuZGZpbGVzID0gY29va2VyLmNvbGxlY3Rpb24uZ2V0X2ZpbGVfYXBwZW5kcyhyZWNpcGVmaWxlKQorICAgIHJldHVybiBwYXJzZV9yZWNpcGUocmVjaXBlZmlsZSwgYXBwZW5kZmlsZXMsIGQpCisKKworZGVmIGdldF92YXJfZmlsZXMoZm4sIHZhcmxpc3QsIGQpOgorICAgICIiIkZpbmQgdGhlIGZpbGUgaW4gd2hpY2ggZWFjaCBvZiBhIGxpc3Qgb2YgdmFyaWFibGVzIGlzIHNldC4KKyAgICBOb3RlOiByZXF1aXJlcyB2YXJpYWJsZSBoaXN0b3J5IHRvIGJlIGVuYWJsZWQgd2hlbiBwYXJzaW5nLgorICAgICIiIgorICAgIHZhcmZpbGVzID0ge30KKyAgICBmb3IgdiBpbiB2YXJsaXN0OgorICAgICAgICBoaXN0b3J5ID0gZC52YXJoaXN0b3J5LnZhcmlhYmxlKHYpCisgICAgICAgIGZpbGVzID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIGhpc3Rvcnk6CisgICAgICAgICAgICBpZiAnZmlsZScgaW4gZXZlbnQgYW5kIG5vdCAnZmxhZycgaW4gZXZlbnQ6CisgICAgICAgICAgICAgICAgZmlsZXMuYXBwZW5kKGV2ZW50WydmaWxlJ10pCisgICAgICAgIGlmIGZpbGVzOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZpbGVzWy0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWN0dWFsZmlsZSA9IE5vbmUKKyAgICAgICAgdmFyZmlsZXNbdl0gPSBhY3R1YWxmaWxlCisKKyAgICByZXR1cm4gdmFyZmlsZXMKKworCitkZWYgcGF0Y2hfcmVjaXBlX2ZpbGUoZm4sIHZhbHVlcywgcGF0Y2g9RmFsc2UsIHJlbHBhdGg9JycpOgorICAgICIiIlVwZGF0ZSBvciBpbnNlcnQgdmFyaWFibGUgdmFsdWVzIGludG8gYSByZWNpcGUgZmlsZSAoYXNzdW1pbmcgeW91CisgICAgICAgaGF2ZSBhbHJlYWR5IGlkZW50aWZpZWQgdGhlIGV4YWN0IGZpbGUgeW91IHdhbnQgdG8gdXBkYXRlLikKKyAgICAgICBOb3RlIHRoYXQgc29tZSBtYW51YWwgaW5zcGVjdGlvbi9pbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkCisgICAgICAgc2luY2UgdGhpcyBjYW5ub3QgaGFuZGxlIGFsbCBzaXR1YXRpb25zLgorICAgICIiIgorICAgIHJlbWFpbmluZ25hbWVzID0ge30KKyAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICByZW1haW5pbmduYW1lc1trXSA9IHJlY2lwZV9wcm9ncmVzc2lvbi5pbmRleChrKSBpZiBrIGluIHJlY2lwZV9wcm9ncmVzc2lvbiBlbHNlIC0xCisgICAgcmVtYWluaW5nbmFtZXMgPSBPcmRlcmVkRGljdChzb3J0ZWQocmVtYWluaW5nbmFtZXMuaXRlcml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFsxXSkpCisKKyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgndycsIGRlbGV0ZT1GYWxzZSkgYXMgdGY6CisgICAgICAgIGRlZiBvdXRwdXR2YWx1ZShuYW1lKToKKyAgICAgICAgICAgIHJhd3RleHQgPSAnJXMgPSAiJXMiXG4nICUgKG5hbWUsIHZhbHVlc1tuYW1lXSkKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gbm93cmFwX3ZhcnM6CisgICAgICAgICAgICAgICAgdGYud3JpdGUocmF3dGV4dCkKKyAgICAgICAgICAgIGVsaWYgbmFtZSBpbiBsaXN0X3ZhcnM6CisgICAgICAgICAgICAgICAgc3BsaXR2YWx1ZSA9IHZhbHVlc1tuYW1lXS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgbGVuKHNwbGl0dmFsdWUpID4gMToKKyAgICAgICAgICAgICAgICAgICAgbGluZXNwbGl0ID0gJyBcXFxuJyArICgnICcgKiAobGVuKG5hbWUpICsgNCkpCisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKCclcyA9ICIlcyVzIlxuJyAlIChuYW1lLCBsaW5lc3BsaXQuam9pbihzcGxpdHZhbHVlKSwgbGluZXNwbGl0KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShyYXd0ZXh0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3cmFwcGVkID0gdGV4dHdyYXAud3JhcChyYXd0ZXh0KQorICAgICAgICAgICAgICAgIGZvciB3cmFwbGluZSBpbiB3cmFwcGVkWzotMV06CisgICAgICAgICAgICAgICAgICAgIHRmLndyaXRlKCclcyBcXFxuJyAlIHdyYXBsaW5lKQorICAgICAgICAgICAgICAgIHRmLndyaXRlKCclc1xuJyAlIHdyYXBwZWRbLTFdKQorCisgICAgICAgIHRmbiA9IHRmLm5hbWUKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAjIEZpcnN0IHJ1bnRocm91Z2ggLSBmaW5kIGV4aXN0aW5nIG5hbWVzIChzbyB3ZSBrbm93IG5vdCB0byBpbnNlcnQgYmFzZWQgb24gcmVjaXBlX3Byb2dyZXNzaW9uKQorICAgICAgICAgICAgIyBTZWNvbmQgcnVudGhyb3VnaCAtIG1ha2UgdGhlIGNoYW5nZXMKKyAgICAgICAgICAgIGV4aXN0aW5nbmFtZXMgPSBbXQorICAgICAgICAgICAgZm9yIHJ1bnRocm91Z2ggaW4gWzEsIDJdOgorICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjdXJybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gcmVjaXBlX3Byb2dyZXNzaW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaCgnXiVzKF9wcmVwZW5kfF9hcHBlbmQpKlsgPzo9KF0nICUgcCwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmduYW1lc1trXSA+IC0xIGFuZCByZWNpcGVfcHJvZ3Jlc3Npb24uaW5kZXgocCkgPiByZW1haW5pbmduYW1lc1trXSBhbmQgcnVudGhyb3VnaCA+IDEgYW5kIG5vdCBrIGluIGV4aXN0aW5nbmFtZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmVtYWluaW5nbmFtZXNba10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJ14lc1sgPzo9XScgJSBrLCBsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycm5hbWUgPSBrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJ1bnRocm91Z2ggPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nbmFtZXMuYXBwZW5kKGspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcmVtYWluaW5nbmFtZXNba10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJuYW1lIGFuZCBydW50aHJvdWdoID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXR2YWx1ZShjdXJybmFtZSkKKworICAgICAgICAgICAgICAgICAgICBpZiBjdXJybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNsaW5lLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJuYW1lID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgcnVudGhyb3VnaCA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICB0Zi53cml0ZShsaW5lKQorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICBpZiByZW1haW5pbmduYW1lczoKKyAgICAgICAgICAgIHRmLndyaXRlKCdcbicpCisgICAgICAgICAgICBmb3IgayBpbiByZW1haW5pbmduYW1lcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgb3V0cHV0dmFsdWUoaykKKworICAgIHdpdGggb3Blbih0Zm4sICdVJykgYXMgZjoKKyAgICAgICAgdG9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICBpZiBwYXRjaDoKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAnVScpIGFzIGY6CisgICAgICAgICAgICBmcm9tbGluZXMgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIHJlbGZuID0gb3MucGF0aC5yZWxwYXRoKGZuLCByZWxwYXRoKQorICAgICAgICBkaWZmID0gZGlmZmxpYi51bmlmaWVkX2RpZmYoZnJvbWxpbmVzLCB0b2xpbmVzLCAnYS8lcycgJSByZWxmbiwgJ2IvJXMnICUgcmVsZm4pCisgICAgICAgIG9zLnJlbW92ZSh0Zm4pCisgICAgICAgIHJldHVybiBkaWZmCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlbGluZXModG9saW5lcykKKyAgICAgICAgb3MucmVtb3ZlKHRmbikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGxvY2FsaXNlX2ZpbGVfdmFycyhmbiwgdmFyZmlsZXMsIHZhcmxpc3QpOgorICAgICIiIkdpdmVuIGEgbGlzdCBvZiB2YXJpYWJsZXMgYW5kIHZhcmlhYmxlIGhpc3RvcnkgKGZldGNoZWQgd2l0aCBnZXRfdmFyX2ZpbGVzKCkpCisgICAgZmluZCB3aGVyZSBlYWNoIHZhcmlhYmxlIHNob3VsZCBiZSBzZXQvY2hhbmdlZC4gVGhpcyBoYW5kbGVzIGZvciBleGFtcGxlIHdoZXJlIGEKKyAgICByZWNpcGUgaW5jbHVkZXMgYW4gaW5jIGZpbGUgd2hlcmUgdmFyaWFibGVzIG1pZ2h0IGJlIGNoYW5nZWQgLSBpbiBtb3N0IGNhc2VzCisgICAgd2Ugd2FudCB0byB1cGRhdGUgdGhlIGluYyBmaWxlIHdoZW4gY2hhbmdpbmcgdGhlIHZhcmlhYmxlIHZhbHVlIHJhdGhlciB0aGFuIGFkZGluZworICAgIGl0IHRvIHRoZSByZWNpcGUgaXRzZWxmLgorICAgICIiIgorICAgIGZuZGlyID0gb3MucGF0aC5kaXJuYW1lKGZuKSArIG9zLnNlcAorCisgICAgZmlyc3RfbWV0YV9maWxlID0gTm9uZQorICAgIGZvciB2IGluIG1ldGFfdmFyczoKKyAgICAgICAgZiA9IHZhcmZpbGVzLmdldCh2LCBOb25lKQorICAgICAgICBpZiBmOgorICAgICAgICAgICAgYWN0dWFsZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpICsgb3Muc2VwCisgICAgICAgICAgICBpZiBhY3R1YWxkaXIuc3RhcnRzd2l0aChmbmRpcik6CisgICAgICAgICAgICAgICAgZmlyc3RfbWV0YV9maWxlID0gZgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBmaWxldmFycyA9IGRlZmF1bHRkaWN0KGxpc3QpCisgICAgZm9yIHYgaW4gdmFybGlzdDoKKyAgICAgICAgZiA9IHZhcmZpbGVzW3ZdCisgICAgICAgICMgT25seSByZXR1cm4gZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSByZWNpcGUgb3IgaW4gc29tZSBkaXJlY3RvcnkgYmVsb3cgdGhlcmUKKyAgICAgICAgIyAodGhpcyBleGNsdWRlcyBiYmNsYXNzIGZpbGVzIGFuZCBjb21tb24gaW5jIGZpbGVzIHRoYXQgd291bGRuJ3QgYmUgYXBwcm9wcmlhdGUgdG8gc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAjIGluIGlmIHdlIHdlcmUgZ29pbmcgdG8gc2V0IGEgdmFsdWUgc3BlY2lmaWMgdG8gdGhpcyByZWNpcGUpCisgICAgICAgIGlmIGY6CisgICAgICAgICAgICBhY3R1YWxmaWxlID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBWYXJpYWJsZSBpc24ndCBpbiBhIGZpbGUsIGlmIGl0J3Mgb25lIG9mIHRoZSAibWV0YSIgdmFycywgdXNlIHRoZSBmaXJzdCBmaWxlIHdpdGggYSBtZXRhIHZhciBpbiBpdAorICAgICAgICAgICAgaWYgZmlyc3RfbWV0YV9maWxlOgorICAgICAgICAgICAgICAgIGFjdHVhbGZpbGUgPSBmaXJzdF9tZXRhX2ZpbGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYWN0dWFsZmlsZSA9IGZuCisKKyAgICAgICAgYWN0dWFsZGlyID0gb3MucGF0aC5kaXJuYW1lKGFjdHVhbGZpbGUpICsgb3Muc2VwCisgICAgICAgIGlmIG5vdCBhY3R1YWxkaXIuc3RhcnRzd2l0aChmbmRpcik6CisgICAgICAgICAgICBhY3R1YWxmaWxlID0gZm4KKyAgICAgICAgZmlsZXZhcnNbYWN0dWFsZmlsZV0uYXBwZW5kKHYpCisKKyAgICByZXR1cm4gZmlsZXZhcnMKKworZGVmIHBhdGNoX3JlY2lwZShkLCBmbiwgdmFydmFsdWVzLCBwYXRjaD1GYWxzZSwgcmVscGF0aD0nJyk6CisgICAgIiIiTW9kaWZ5IGEgbGlzdCBvZiB2YXJpYWJsZSB2YWx1ZXMgaW4gdGhlIHNwZWNpZmllZCByZWNpcGUuIEhhbmRsZXMgaW5jIGZpbGVzIGlmCisgICAgdXNlZCBieSB0aGUgcmVjaXBlLgorICAgICIiIgorICAgIHZhcmxpc3QgPSB2YXJ2YWx1ZXMua2V5cygpCisgICAgdmFyZmlsZXMgPSBnZXRfdmFyX2ZpbGVzKGZuLCB2YXJsaXN0LCBkKQorICAgIGxvY3MgPSBsb2NhbGlzZV9maWxlX3ZhcnMoZm4sIHZhcmZpbGVzLCB2YXJsaXN0KQorICAgIHBhdGNoZXMgPSBbXQorICAgIGZvciBmLHYgaW4gbG9jcy5pdGVyaXRlbXMoKToKKyAgICAgICAgdmFscyA9IHtrOiB2YXJ2YWx1ZXNba10gZm9yIGsgaW4gdn0KKyAgICAgICAgcGF0Y2hkYXRhID0gcGF0Y2hfcmVjaXBlX2ZpbGUoZiwgdmFscywgcGF0Y2gsIHJlbHBhdGgpCisgICAgICAgIGlmIHBhdGNoOgorICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQocGF0Y2hkYXRhKQorCisgICAgaWYgcGF0Y2g6CisgICAgICAgIHJldHVybiBwYXRjaGVzCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCisKK2RlZiBjb3B5X3JlY2lwZV9maWxlcyhkLCB0Z3RfZGlyLCB3aG9sZV9kaXI9RmFsc2UsIGRvd25sb2FkPVRydWUpOgorICAgICIiIkNvcHkgKGxvY2FsKSByZWNpcGUgZmlsZXMsIGluY2x1ZGluZyBib3RoIGZpbGVzIGluY2x1ZGVkIHZpYSBpbmNsdWRlL3JlcXVpcmUsCisgICAgYW5kIGZpbGVzIHJlZmVycmVkIHRvIGluIHRoZSBTUkNfVVJJIHZhcmlhYmxlLiIiIgorICAgIGltcG9ydCBiYi5mZXRjaDIKKyAgICBpbXBvcnQgb2UucGF0aAorCisgICAgIyBGSVhNRSBuZWVkIGEgd2FybmluZyBpZiB0aGUgdW5leHBhbmRlZCBTUkNfVVJJIHZhbHVlIGNvbnRhaW5zIHZhcmlhYmxlIHJlZmVyZW5jZXMKKworICAgIHVyaXMgPSAoZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgIGZldGNoID0gYmIuZmV0Y2gyLkZldGNoKHVyaXMsIGQpCisgICAgaWYgZG93bmxvYWQ6CisgICAgICAgIGZldGNoLmRvd25sb2FkKCkKKworICAgICMgQ29weSBsb2NhbCBmaWxlcyB0byB0YXJnZXQgZGlyZWN0b3J5IGFuZCBnYXRoZXIgYW55IHJlbW90ZSBmaWxlcworICAgIGJiX2RpciA9IG9zLnBhdGguZGlybmFtZShkLmdldFZhcignRklMRScsIFRydWUpKSArIG9zLnNlcAorICAgIHJlbW90ZXMgPSBbXQorICAgIGluY2x1ZGVzID0gW3BhdGggZm9yIHBhdGggaW4gZC5nZXRWYXIoJ0JCSU5DTFVERUQnLCBUcnVlKS5zcGxpdCgpIGlmCisgICAgICAgICAgICAgICAgcGF0aC5zdGFydHN3aXRoKGJiX2RpcikgYW5kIG9zLnBhdGguZXhpc3RzKHBhdGgpXQorICAgIGZvciBwYXRoIGluIGZldGNoLmxvY2FscGF0aHMoKSArIGluY2x1ZGVzOgorICAgICAgICAjIE9ubHkgaW1wb3J0IGZpbGVzIHRoYXQgYXJlIHVuZGVyIHRoZSBtZXRhIGRpcmVjdG9yeQorICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgoYmJfZGlyKToKKyAgICAgICAgICAgIGlmIG5vdCB3aG9sZV9kaXI6CisgICAgICAgICAgICAgICAgcmVscGF0aCA9IG9zLnBhdGgucmVscGF0aChwYXRoLCBiYl9kaXIpCisgICAgICAgICAgICAgICAgc3ViZGlyID0gb3MucGF0aC5qb2luKHRndF9kaXIsIG9zLnBhdGguZGlybmFtZShyZWxwYXRoKSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc3ViZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoc3ViZGlyKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5MihwYXRoLCBvcy5wYXRoLmpvaW4odGd0X2RpciwgcmVscGF0aCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZW1vdGVzLmFwcGVuZChwYXRoKQorICAgICMgU2ltcGx5IGNvcHkgd2hvbGUgbWV0YSBkaXIsIGlmIHJlcXVlc3RlZAorICAgIGlmIHdob2xlX2RpcjoKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKGJiX2RpciwgdGd0X2RpcikKKworICAgIHJldHVybiByZW1vdGVzCisKKworZGVmIGdldF9yZWNpcGVfcGF0Y2hlcyhkKToKKyAgICAiIiJHZXQgYSBsaXN0IG9mIHRoZSBwYXRjaGVzIGluY2x1ZGVkIGluIFNSQ19VUkkgd2l0aGluIGEgcmVjaXBlLiIiIgorICAgIHBhdGNoZmlsZXMgPSBbXQorICAgICMgRXhlY3V0ZSBzcmNfcGF0Y2hlcygpIGRlZmluZWQgaW4gcGF0Y2guYmJjbGFzcyAtIHRoaXMgd29ya3Mgc2luY2UgdGhhdCBjbGFzcworICAgICMgaXMgaW5oZXJpdGVkIGdsb2JhbGx5CisgICAgcGF0Y2hlcyA9IGJiLnV0aWxzLmV4ZWNfZmxhdF9weXRob25fZnVuYygnc3JjX3BhdGNoZXMnLCBkKQorICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgorICAgICAgICBfLCBfLCBsb2NhbCwgXywgXywgcGFybSA9IGJiLmZldGNoLmRlY29kZXVybChwYXRjaCkKKyAgICAgICAgcGF0Y2hmaWxlcy5hcHBlbmQobG9jYWwpCisgICAgcmV0dXJuIHBhdGNoZmlsZXMKKworCitkZWYgZ2V0X3JlY2lwZV9wYXRjaGVkX2ZpbGVzKGQpOgorICAgICIiIgorICAgIEdldCB0aGUgbGlzdCBvZiBwYXRjaGVzIGZvciBhIHJlY2lwZSBhbG9uZyB3aXRoIHRoZSBmaWxlcyBlYWNoIHBhdGNoIG1vZGlmaWVzLgorICAgIFBhcmFtczoKKyAgICAgICAgZDogdGhlIGRhdGFzdG9yZSBmb3IgdGhlIHJlY2lwZQorICAgIFJldHVybnM6CisgICAgICAgIGEgZGljdCBtYXBwaW5nIHBhdGNoIGZpbGUgcGF0aCB0byBhIGxpc3Qgb2YgdHVwbGVzIG9mIGNoYW5nZWQgZmlsZXMgYW5kCisgICAgICAgIGNoYW5nZSBtb2RlICgnQScgZm9yIGFkZCwgJ0QnIGZvciBkZWxldGUgb3IgJ00nIGZvciBtb2RpZnkpCisgICAgIiIiCisgICAgaW1wb3J0IG9lLnBhdGNoCisgICAgIyBFeGVjdXRlIHNyY19wYXRjaGVzKCkgZGVmaW5lZCBpbiBwYXRjaC5iYmNsYXNzIC0gdGhpcyB3b3JrcyBzaW5jZSB0aGF0IGNsYXNzCisgICAgIyBpcyBpbmhlcml0ZWQgZ2xvYmFsbHkKKyAgICBwYXRjaGVzID0gYmIudXRpbHMuZXhlY19mbGF0X3B5dGhvbl9mdW5jKCdzcmNfcGF0Y2hlcycsIGQpCisgICAgcGF0Y2hlZGZpbGVzID0ge30KKyAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoKKyAgICAgICAgXywgXywgcGF0Y2hmaWxlLCBfLCBfLCBwYXJtID0gYmIuZmV0Y2guZGVjb2RldXJsKHBhdGNoKQorICAgICAgICBzdHJpcGxldmVsID0gaW50KHBhcm1bJ3N0cmlwbGV2ZWwnXSkKKyAgICAgICAgcGF0Y2hlZGZpbGVzW3BhdGNoZmlsZV0gPSBvZS5wYXRjaC5QYXRjaFNldC5nZXRQYXRjaGVkRmlsZXMocGF0Y2hmaWxlLCBzdHJpcGxldmVsLCBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ1MnLCBUcnVlKSwgcGFybS5nZXQoJ3BhdGNoZGlyJywgJycpKSkKKyAgICByZXR1cm4gcGF0Y2hlZGZpbGVzCisKKworZGVmIHZhbGlkYXRlX3BuKHBuKToKKyAgICAiIiJQZXJmb3JtIHZhbGlkYXRpb24gb24gYSByZWNpcGUgbmFtZSAoUE4pIGZvciBhIG5ldyByZWNpcGUuIiIiCisgICAgcmVzZXJ2ZWRfbmFtZXMgPSBbJ2ZvcmNldmFyaWFibGUnLCAnYXBwZW5kJywgJ3ByZXBlbmQnLCAncmVtb3ZlJ10KKyAgICBpZiBub3QgcmUubWF0Y2goJ1swLTlhLXotLl0rJywgcG4pOgorICAgICAgICByZXR1cm4gJ1JlY2lwZSBuYW1lICIlcyIgaXMgaW52YWxpZDogb25seSBjaGFyYWN0ZXJzIDAtOSwgYS16LCAtIGFuZCAuIGFyZSBhbGxvd2VkJyAlIHBuCisgICAgZWxpZiBwbiBpbiByZXNlcnZlZF9uYW1lczoKKyAgICAgICAgcmV0dXJuICdSZWNpcGUgbmFtZSAiJXMiIGlzIGludmFsaWQ6IGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcgJSBwbgorICAgIGVsaWYgcG4uc3RhcnRzd2l0aCgncG4tJyk6CisgICAgICAgIHJldHVybiAnUmVjaXBlIG5hbWUgIiVzIiBpcyBpbnZhbGlkOiBuYW1lcyBzdGFydGluZyB3aXRoICJwbi0iIGFyZSByZXNlcnZlZCcgJSBwbgorICAgIHJldHVybiAnJworCisKK2RlZiBnZXRfYmJhcHBlbmRfcGF0aChkLCBkZXN0bGF5ZXJkaXIsIHdpbGRjYXJkdmVyPUZhbHNlKToKKyAgICAiIiJEZXRlcm1pbmUgaG93IGEgYmJhcHBlbmQgZm9yIGEgcmVjaXBlIHNob3VsZCBiZSBuYW1lZCBhbmQgbG9jYXRlZCB3aXRoaW4gYW5vdGhlciBsYXllciIiIgorCisgICAgaW1wb3J0IGJiLmNvb2tlcmRhdGEKKworICAgIGRlc3RsYXllcmRpciA9IG9zLnBhdGguYWJzcGF0aChkZXN0bGF5ZXJkaXIpCisgICAgcmVjaXBlZmlsZSA9IGQuZ2V0VmFyKCdGSUxFJywgVHJ1ZSkKKyAgICByZWNpcGVmbiA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSlbMF0KKyAgICBpZiB3aWxkY2FyZHZlciBhbmQgJ18nIGluIHJlY2lwZWZuOgorICAgICAgICByZWNpcGVmbiA9IHJlY2lwZWZuLnNwbGl0KCdfJywgMSlbMF0gKyAnXyUnCisgICAgYXBwZW5kZm4gPSByZWNpcGVmbiArICcuYmJhcHBlbmQnCisKKyAgICAjIFBhcnNlIHRoZSBzcGVjaWZpZWQgbGF5ZXIncyBsYXllci5jb25mIGZpbGUgZGlyZWN0bHksIGluIGNhc2UgdGhlIGxheWVyIGlzbid0IGluIGJibGF5ZXJzLmNvbmYKKyAgICBjb25mZGF0YSA9IGQuY3JlYXRlQ29weSgpCisgICAgY29uZmRhdGEuc2V0VmFyKCdCQkZJTEVTJywgJycpCisgICAgY29uZmRhdGEuc2V0VmFyKCdMQVlFUkRJUicsIGRlc3RsYXllcmRpcikKKyAgICBkZXN0bGF5ZXJjb25mID0gb3MucGF0aC5qb2luKGRlc3RsYXllcmRpciwgImNvbmYiLCAibGF5ZXIuY29uZiIpCisgICAgY29uZmRhdGEgPSBiYi5jb29rZXJkYXRhLnBhcnNlX2NvbmZpZ19maWxlKGRlc3RsYXllcmNvbmYsIGNvbmZkYXRhKQorCisgICAgb3JpZ2xheWVyZGlyID0gZmluZF9sYXllcmRpcihyZWNpcGVmaWxlKQorICAgIGlmIG5vdCBvcmlnbGF5ZXJkaXI6CisgICAgICAgIHJldHVybiAoTm9uZSwgRmFsc2UpCisgICAgIyBOb3cgam9pbiB0aGlzIHRvIHRoZSBwYXRoIHdoZXJlIHRoZSBiYmFwcGVuZCBpcyBnb2luZyBhbmQgY2hlY2sgaWYgaXQgaXMgY292ZXJlZCBieSBCQkZJTEVTCisgICAgYXBwZW5kcGF0aCA9IG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsIG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIG9yaWdsYXllcmRpciksIGFwcGVuZGZuKQorICAgIGNsb3NlcGF0aCA9ICcnCisgICAgcGF0aG9rID0gVHJ1ZQorICAgIGZvciBiYmZpbGVzcGVjIGluIGNvbmZkYXRhLmdldFZhcignQkJGSUxFUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaGNhc2UoYXBwZW5kcGF0aCwgYmJmaWxlc3BlYyk6CisgICAgICAgICAgICAjIE91ciBhcHBlbmQgcGF0aCB3b3Jrcywgd2UncmUgZG9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiBiYmZpbGVzcGVjLnN0YXJ0c3dpdGgoZGVzdGxheWVyZGlyKSBhbmQgZm5tYXRjaC5mbm1hdGNoY2FzZSgndGVzdC5iYmFwcGVuZCcsIG9zLnBhdGguYmFzZW5hbWUoYmJmaWxlc3BlYykpOgorICAgICAgICAgICAgIyBUcnkgdG8gZmluZCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBwYXRoCisgICAgICAgICAgICBpZiBsZW4oYmJmaWxlc3BlYykgPiBsZW4oY2xvc2VwYXRoKToKKyAgICAgICAgICAgICAgICBjbG9zZXBhdGggPSBiYmZpbGVzcGVjCisgICAgZWxzZToKKyAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHRoZSBiYmFwcGVuZCBsYXllciBhbmQgdGhlIG9yaWdpbmFsIHJlY2lwZSdzIGxheWVyIGRvbid0IGhhdmUgdGhlIHNhbWUgc3RydWN0dXJlCisgICAgICAgIGlmIGNsb3NlcGF0aDoKKyAgICAgICAgICAgICMgYmJhcHBlbmQgbGF5ZXIncyBsYXllci5jb25mIGF0IGxlYXN0IGhhcyBhIHNwZWMgdGhhdCBwaWNrcyB1cCAuYmJhcHBlbmQgZmlsZXMKKyAgICAgICAgICAgICMgTm93IHdlIGp1c3QgbmVlZCB0byBzdWJzdGl0dXRlIG91dCBhbnkgd2lsZGNhcmRzCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5kaXJuYW1lKGNsb3NlcGF0aCksIGRlc3RsYXllcmRpcikKKyAgICAgICAgICAgIGlmICdyZWNpcGVzLSonIGluIGFwcGVuZHN1YmRpcjoKKyAgICAgICAgICAgICAgICAjIFRyeSB0byBjb3B5IHRoaXMgcGFydCBmcm9tIHRoZSBvcmlnaW5hbCByZWNpcGUgcGF0aAorICAgICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaCgnL3JlY2lwZXMtW14vXSsvJywgcmVjaXBlZmlsZSkKKyAgICAgICAgICAgICAgICBpZiByZXM6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZHN1YmRpciA9IGFwcGVuZHN1YmRpci5yZXBsYWNlKCcvcmVjaXBlcy0qLycsIHJlcy5ncm91cCgwKSkKKyAgICAgICAgICAgICMgVGhpcyBpcyBjcnVkZSwgYnV0IHdlIGhhdmUgdG8gZG8gc29tZXRoaW5nCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnKicsIHJlY2lwZWZuLnNwbGl0KCdfJylbMF0pCisgICAgICAgICAgICBhcHBlbmRzdWJkaXIgPSBhcHBlbmRzdWJkaXIucmVwbGFjZSgnPycsICdhJykKKyAgICAgICAgICAgIGFwcGVuZHBhdGggPSBvcy5wYXRoLmpvaW4oZGVzdGxheWVyZGlyLCBhcHBlbmRzdWJkaXIsIGFwcGVuZGZuKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aG9rID0gRmFsc2UKKyAgICByZXR1cm4gKGFwcGVuZHBhdGgsIHBhdGhvaykKKworCitkZWYgYmJhcHBlbmRfcmVjaXBlKHJkLCBkZXN0bGF5ZXJkaXIsIHNyY2ZpbGVzLCBpbnN0YWxsPU5vbmUsIHdpbGRjYXJkdmVyPUZhbHNlLCBtYWNoaW5lPU5vbmUsIGV4dHJhbGluZXM9Tm9uZSwgcmVtb3ZldmFsdWVzPU5vbmUpOgorICAgICIiIgorICAgIFdyaXRlcyBhIGJiYXBwZW5kIGZpbGUgZm9yIGEgcmVjaXBlCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgcmQ6IGRhdGEgZGljdGlvbmFyeSBmb3IgdGhlIHJlY2lwZQorICAgICAgICBkZXN0bGF5ZXJkaXI6IGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBsYXllciB0byBwbGFjZSB0aGUgYmJhcHBlbmQgaW4KKyAgICAgICAgICAgIChzdWJkaXJlY3RvcnkgcGF0aCBmcm9tIHRoZXJlIHdpbGwgYmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5KQorICAgICAgICBzcmNmaWxlczogZGljdCBvZiBzb3VyY2UgZmlsZXMgdG8gYWRkIHRvIFNSQ19VUkksIHdoZXJlIHRoZSB2YWx1ZQorICAgICAgICAgICAgaXMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBhZGRlZCwgYW5kIHRoZSB2YWx1ZSBpcyB0aGUKKyAgICAgICAgICAgIG9yaWdpbmFsIGZpbGVuYW1lIGFzIGl0IHdvdWxkIGFwcGVhciBpbiBTUkNfVVJJIG9yIE5vbmUgaWYgaXQKKyAgICAgICAgICAgIGlzbid0IGFscmVhZHkgcHJlc2VudC4gWW91IG1heSBwYXNzIE5vbmUgZm9yIHRoaXMgcGFyYW1ldGVyIGlmCisgICAgICAgICAgICB5b3Ugc2ltcGx5IHdhbnQgdG8gc3BlY2lmeSB5b3VyIG93biBjb250ZW50IHZpYSB0aGUgZXh0cmFsaW5lcworICAgICAgICAgICAgcGFyYW1ldGVyLgorICAgICAgICBpbnN0YWxsOiBkaWN0IG1hcHBpbmcgZW50cmllcyBpbiBzcmNmaWxlcyB0byBhIHR1cGxlIG9mIHR3byBlbGVtZW50czoKKyAgICAgICAgICAgIGluc3RhbGwgcGF0aCAoKndpdGhvdXQqICR7RH0gcHJlZml4KSBhbmQgcGVybWlzc2lvbiB2YWx1ZSAoYXMgYQorICAgICAgICAgICAgc3RyaW5nLCBlLmcuICcwNjQ0JykuCisgICAgICAgIHdpbGRjYXJkdmVyOiBUcnVlIHRvIHVzZSBhICUgd2lsZGNhcmQgaW4gdGhlIGJiYXBwZW5kIGZpbGVuYW1lLCBvcgorICAgICAgICAgICAgRmFsc2UgdG8gbWFrZSB0aGUgYmJhcHBlbmQgc3BlY2lmaWMgdG8gdGhlIHJlY2lwZSB2ZXJzaW9uLgorICAgICAgICBtYWNoaW5lOgorICAgICAgICAgICAgSWYgc3BlY2lmaWVkLCBtYWtlIHRoZSBjaGFuZ2VzIGluIHRoZSBiYmFwcGVuZCBzcGVjaWZpYyB0byB0aGlzCisgICAgICAgICAgICBtYWNoaW5lLiBUaGlzIHdpbGwgYWxzbyBjYXVzZSBQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorICAgICAgICAgICAgdG8gYmUgYWRkZWQgdG8gdGhlIGJiYXBwZW5kLgorICAgICAgICBleHRyYWxpbmVzOgorICAgICAgICAgICAgRXh0cmEgbGluZXMgdG8gYWRkIHRvIHRoZSBiYmFwcGVuZC4gVGhpcyBtYXkgYmUgYSBkaWN0IG9mIG5hbWUKKyAgICAgICAgICAgIHZhbHVlIHBhaXJzLCBvciBzaW1wbHkgYSBsaXN0IG9mIHRoZSBsaW5lcy4KKyAgICAgICAgcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgVmFyaWFibGUgdmFsdWVzIHRvIHJlbW92ZSAtIGEgZGljdCBvZiBuYW1lcy92YWx1ZXMuCisgICAgIiIiCisKKyAgICBpZiBub3QgcmVtb3ZldmFsdWVzOgorICAgICAgICByZW1vdmV2YWx1ZXMgPSB7fQorCisgICAgIyBEZXRlcm1pbmUgaG93IHRoZSBiYmFwcGVuZCBzaG91bGQgYmUgbmFtZWQKKyAgICBhcHBlbmRwYXRoLCBwYXRob2sgPSBnZXRfYmJhcHBlbmRfcGF0aChyZCwgZGVzdGxheWVyZGlyLCB3aWxkY2FyZHZlcikKKyAgICBpZiBub3QgYXBwZW5kcGF0aDoKKyAgICAgICAgYmIuZXJyb3IoJ1VuYWJsZSB0byBkZXRlcm1pbmUgbGF5ZXIgZGlyZWN0b3J5IGNvbnRhaW5pbmcgJXMnICUgcmVjaXBlZmlsZSkKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQorICAgIGlmIG5vdCBwYXRob2s6CisgICAgICAgIGJiLndhcm4oJ1VuYWJsZSB0byBkZXRlcm1pbmUgY29ycmVjdCBzdWJkaXJlY3RvcnkgcGF0aCBmb3IgYmJhcHBlbmQgZmlsZSAtIGNoZWNrIHRoYXQgd2hhdCAlcyBhZGRzIHRvIEJCRklMRVMgYWxzbyBtYXRjaGVzIC5iYmFwcGVuZCBmaWxlcy4gVXNpbmcgJXMgZm9yIG5vdywgYnV0IHVudGlsIHlvdSBmaXggdGhpcyB0aGUgYmJhcHBlbmQgd2lsbCBub3QgYmUgYXBwbGllZC4nICUgKG9zLnBhdGguam9pbihkZXN0bGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgb3MucGF0aC5kaXJuYW1lKGFwcGVuZHBhdGgpKSkKKworICAgIGFwcGVuZGRpciA9IG9zLnBhdGguZGlybmFtZShhcHBlbmRwYXRoKQorICAgIGJiLnV0aWxzLm1rZGlyaGllcihhcHBlbmRkaXIpCisKKyAgICAjIEZJWE1FIGNoZWNrIGlmIHRoZSBiYmFwcGVuZCBkb2Vzbid0IGdldCBvdmVycmlkZGVuIGJ5IGEgaGlnaGVyIHByaW9yaXR5IGxheWVyPworCisgICAgbGF5ZXJkaXJzID0gW29zLnBhdGguYWJzcGF0aChsYXllcmRpcikgZm9yIGxheWVyZGlyIGluIHJkLmdldFZhcignQkJMQVlFUlMnLCBUcnVlKS5zcGxpdCgpXQorICAgIGlmIG5vdCBvcy5wYXRoLmFic3BhdGgoZGVzdGxheWVyZGlyKSBpbiBsYXllcmRpcnM6CisgICAgICAgIGJiLndhcm4oJ1NwZWNpZmllZCBsYXllciBpcyBub3QgY3VycmVudGx5IGVuYWJsZWQgaW4gYmJsYXllcnMuY29uZiwgeW91IHdpbGwgbmVlZCB0byBhZGQgaXQgYmVmb3JlIHRoaXMgYmJhcHBlbmQgd2lsbCBiZSBhY3RpdmUnKQorCisgICAgYmJhcHBlbmRsaW5lcyA9IFtdCisgICAgaWYgZXh0cmFsaW5lczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleHRyYWxpbmVzLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBleHRyYWxpbmVzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKChuYW1lLCAnPScsIHZhbHVlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgRG8gb3VyIGJlc3QgdG8gc3BsaXQgaXQKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGV4dHJhbGluZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZVstMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoTm9uZSwgMikKKyAgICAgICAgICAgICAgICBpZiBsZW4oc3BsaXRsaW5lKSA9PSAzOgorICAgICAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCh0dXBsZShzcGxpdGxpbmUpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignSW52YWxpZCBleHRyYWxpbmVzIHZhbHVlIHBhc3NlZCcpCisKKyAgICBkZWYgcG9wbGluZSh2YXJuYW1lKToKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihiYmFwcGVuZGxpbmVzKSk6CisgICAgICAgICAgICBpZiBiYmFwcGVuZGxpbmVzW2ldWzBdID09IHZhcm5hbWU6CisgICAgICAgICAgICAgICAgbGluZSA9IGJiYXBwZW5kbGluZXMucG9wKGkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBhcHBlbmRsaW5lKHZhcm5hbWUsIG9wLCB2YWx1ZSk6CisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oYmJhcHBlbmRsaW5lcykpOgorICAgICAgICAgICAgaXRlbSA9IGJiYXBwZW5kbGluZXNbaV0KKyAgICAgICAgICAgIGlmIGl0ZW1bMF0gPT0gdmFybmFtZToKKyAgICAgICAgICAgICAgICBiYmFwcGVuZGxpbmVzW2ldID0gKGl0ZW1bMF0sIGl0ZW1bMV0sIGl0ZW1bMl0gKyAnICcgKyB2YWx1ZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmJhcHBlbmRsaW5lcy5hcHBlbmQoKHZhcm5hbWUsIG9wLCB2YWx1ZSkpCisKKyAgICBkZXN0c3ViZGlyID0gcmQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgaWYgc3JjZmlsZXM6CisgICAgICAgIGJiYXBwZW5kbGluZXMuYXBwZW5kKCgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQnLCAnOj0nLCAnJHtUSElTRElSfS8ke1BOfTonKSkKKworICAgIGFwcGVuZG92ZXJyaWRlID0gJycKKyAgICBpZiBtYWNoaW5lOgorICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ1BBQ0tBR0VfQVJDSCcsICc9JywgJyR7TUFDSElORV9BUkNIfScpKQorICAgICAgICBhcHBlbmRvdmVycmlkZSA9ICdfJXMnICUgbWFjaGluZQorICAgIGNvcHlmaWxlcyA9IHt9CisgICAgaWYgc3JjZmlsZXM6CisgICAgICAgIGluc3RmdW5jbGluZXMgPSBbXQorICAgICAgICBmb3IgbmV3ZmlsZSwgb3JpZ3NyY2ZpbGUgaW4gc3JjZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzcmNmaWxlID0gb3JpZ3NyY2ZpbGUKKyAgICAgICAgICAgIHNyY3VyaWVudHJ5ID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHNyY2ZpbGU6CisgICAgICAgICAgICAgICAgc3JjZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUobmV3ZmlsZSkKKyAgICAgICAgICAgICAgICBzcmN1cmllbnRyeSA9ICdmaWxlOi8vJXMnICUgc3JjZmlsZQorICAgICAgICAgICAgICAgICMgRG91YmxlLWNoZWNrIGl0J3Mgbm90IHRoZXJlIGFscmVhZHkKKyAgICAgICAgICAgICAgICAjIEZJWE1FIGRvIHdlIGNhcmUgaWYgdGhlIGVudHJ5IGlzIGFkZGVkIGJ5IGFub3RoZXIgYmJhcHBlbmQgdGhhdCBtaWdodCBnbyBhd2F5PworICAgICAgICAgICAgICAgIGlmIG5vdCBzcmN1cmllbnRyeSBpbiByZC5nZXRWYXIoJ1NSQ19VUkknLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kbGluZSgnU1JDX1VSSV9hcHBlbmQlcycgJSBhcHBlbmRvdmVycmlkZSwgJz0nLCAnICcgKyBzcmN1cmllbnRyeSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZGxpbmUoJ1NSQ19VUkknLCAnKz0nLCBzcmN1cmllbnRyeSkKKyAgICAgICAgICAgIGNvcHlmaWxlc1tuZXdmaWxlXSA9IHNyY2ZpbGUKKyAgICAgICAgICAgIGlmIGluc3RhbGw6CisgICAgICAgICAgICAgICAgaW5zdGl0ZW0gPSBpbnN0YWxsLnBvcChuZXdmaWxlLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIGluc3RpdGVtOgorICAgICAgICAgICAgICAgICAgICAoZGVzdHBhdGgsIHBlcm1zKSA9IGluc3RpdGVtCisgICAgICAgICAgICAgICAgICAgIGluc3RkZXN0cGF0aCA9IHJlcGxhY2VfZGlyX3ZhcnMoZGVzdHBhdGgsIHJkKQorICAgICAgICAgICAgICAgICAgICBpbnN0ZGlybGluZSA9ICdpbnN0YWxsIC1kICR7RH0lcycgJSBvcy5wYXRoLmRpcm5hbWUoaW5zdGRlc3RwYXRoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5zdGRpcmxpbmUgaW4gaW5zdGZ1bmNsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMuYXBwZW5kKGluc3RkaXJsaW5lKQorICAgICAgICAgICAgICAgICAgICBpbnN0ZnVuY2xpbmVzLmFwcGVuZCgnaW5zdGFsbCAtbSAlcyAke1dPUktESVJ9LyVzICR7RH0lcycgJSAocGVybXMsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSksIGluc3RkZXN0cGF0aCkpCisgICAgICAgIGlmIGluc3RmdW5jbGluZXM6CisgICAgICAgICAgICBiYmFwcGVuZGxpbmVzLmFwcGVuZCgoJ2RvX2luc3RhbGxfYXBwZW5kJXMoKScgJSBhcHBlbmRvdmVycmlkZSwgJycsIGluc3RmdW5jbGluZXMpKQorCisgICAgYmIubm90ZSgnV3JpdGluZyBhcHBlbmQgZmlsZSAlcycgJSBhcHBlbmRwYXRoKQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoYXBwZW5kcGF0aCk6CisgICAgICAgICMgV29yayBhcm91bmQgbGFjayBvZiBub25sb2NhbCBpbiBweXRob24gMgorICAgICAgICBleHR2YXJzID0geydkZXN0c3ViZGlyJzogZGVzdHN1YmRpcn0KKworICAgICAgICBkZWYgYXBwZW5kZmlsZV92YXJmdW5jKHZhcm5hbWUsIG9yaWd2YWx1ZSwgb3AsIG5ld2xpbmVzKToKKyAgICAgICAgICAgIGlmIHZhcm5hbWUgPT0gJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kJzoKKyAgICAgICAgICAgICAgICBpZiBvcmlndmFsdWUuc3RhcnRzd2l0aCgnJHtUSElTRElSfS8nKToKKyAgICAgICAgICAgICAgICAgICAgcG9wbGluZSgnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQnKQorICAgICAgICAgICAgICAgICAgICBleHR2YXJzWydkZXN0c3ViZGlyJ10gPSByZC5leHBhbmQob3JpZ3ZhbHVlLnNwbGl0KCcke1RISVNESVJ9LycsIDEpWzFdLnJzdHJpcCgnOicpKQorICAgICAgICAgICAgZWxpZiB2YXJuYW1lID09ICdQQUNLQUdFX0FSQ0gnOgorICAgICAgICAgICAgICAgIGlmIG1hY2hpbmU6CisgICAgICAgICAgICAgICAgICAgIHBvcGxpbmUoJ1BBQ0tBR0VfQVJDSCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWFjaGluZSwgTm9uZSwgNCwgRmFsc2UpCisgICAgICAgICAgICBlbGlmIHZhcm5hbWUuc3RhcnRzd2l0aCgnZG9faW5zdGFsbF9hcHBlbmQnKToKKyAgICAgICAgICAgICAgICBmdW5jID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgIGlmIGZ1bmM6CisgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIG9yaWd2YWx1ZS5zdHJpcCgnXG4nKS5zcGxpdGxpbmVzKCldCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZ1bmNbMl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZSBpbiBpbnN0ZnVuY2xpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RmdW5jbGluZXMuYXBwZW5kKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW5zdGZ1bmNsaW5lcywgTm9uZSwgNCwgRmFsc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwbGl0dmFsID0gb3JpZ3ZhbHVlLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZW1vdmV2YXIgPSB2YXJuYW1lCisgICAgICAgICAgICAgICAgaWYgdmFybmFtZSBpbiBbJ1NSQ19VUkknLCAnU1JDX1VSSV9hcHBlbmQlcycgJSBhcHBlbmRvdmVycmlkZV06CisgICAgICAgICAgICAgICAgICAgIHJlbW92ZXZhciA9ICdTUkNfVVJJJworICAgICAgICAgICAgICAgICAgICBsaW5lID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVsyXSBub3QgaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwuYXBwZW5kKGxpbmVbMl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gcG9wbGluZSh2YXJuYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwgPSBbbGluZVsyXV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisKKyAgICAgICAgICAgICAgICBpZiByZW1vdmV2YXIgaW4gcmVtb3ZldmFsdWVzOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSByZW1vdmV2YWx1ZXNbcmVtb3ZldmFyXQorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlbW92ZSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1vdmUgaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR2YWwucmVtb3ZlKHJlbW92ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJlbW92ZWl0ZW0gaW4gcmVtb3ZlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlbW92ZWl0ZW0gaW4gc3BsaXR2YWw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dmFsLnJlbW92ZShyZW1vdmVpdGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBzcGxpdHZhbAorICAgICAgICAgICAgICAgICAgICBpZiBsZW4obmV3dmFsdWUpID09IDE6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEVuc3VyZSBpdCdzIHdyaXR0ZW4gb3V0IGFzIG9uZSBsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnX2FwcGVuZCcgaW4gdmFybmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWx1ZSA9ICcgJyArIG5ld3ZhbHVlWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gbmV3dmFsdWVbMF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5ld3ZhbHVlIGFuZCAob3AgaW4gWycrPScsICcuPSddIG9yICdfYXBwZW5kJyBpbiB2YXJuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBwb2ludCBhcHBlbmRpbmcgbm90aGluZworICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdWUgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGlmIHZhcm5hbWUuZW5kc3dpdGgoJygpJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSA0CisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAtMQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG5ld3ZhbHVlLCBOb25lLCBpbmRlbnQsIFRydWUpCisgICAgICAgICAgICByZXR1cm4gKG9yaWd2YWx1ZSwgTm9uZSwgNCwgRmFsc2UpCisKKyAgICAgICAgdmFybmFtZXMgPSBbaXRlbVswXSBmb3IgaXRlbSBpbiBiYmFwcGVuZGxpbmVzXQorICAgICAgICBpZiByZW1vdmV2YWx1ZXM6CisgICAgICAgICAgICB2YXJuYW1lcy5leHRlbmQocmVtb3ZldmFsdWVzLmtleXMoKSkKKworICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3InKSBhcyBmOgorICAgICAgICAgICAgKHVwZGF0ZWQsIG5ld2xpbmVzKSA9IGJiLnV0aWxzLmVkaXRfbWV0YWRhdGEoZiwgdmFybmFtZXMsIGFwcGVuZGZpbGVfdmFyZnVuYykKKworICAgICAgICBkZXN0c3ViZGlyID0gZXh0dmFyc1snZGVzdHN1YmRpciddCisgICAgZWxzZToKKyAgICAgICAgdXBkYXRlZCA9IEZhbHNlCisgICAgICAgIG5ld2xpbmVzID0gW10KKworICAgIGlmIGJiYXBwZW5kbGluZXM6CisgICAgICAgIGZvciBsaW5lIGluIGJiYXBwZW5kbGluZXM6CisgICAgICAgICAgICBpZiBsaW5lWzBdLmVuZHN3aXRoKCcoKScpOgorICAgICAgICAgICAgICAgIG5ld2xpbmVzLmFwcGVuZCgnJXMge1xuICAgICVzXG59XG4nICUgKGxpbmVbMF0sICdcbiAgICAnLmpvaW4obGluZVsyXSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuZXdsaW5lcy5hcHBlbmQoJyVzICVzICIlcyJcblxuJyAlIGxpbmUpCisgICAgICAgIHVwZGF0ZWQgPSBUcnVlCisKKyAgICBpZiB1cGRhdGVkOgorICAgICAgICB3aXRoIG9wZW4oYXBwZW5kcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKG5ld2xpbmVzKQorCisgICAgaWYgY29weWZpbGVzOgorICAgICAgICBpZiBtYWNoaW5lOgorICAgICAgICAgICAgZGVzdHN1YmRpciA9IG9zLnBhdGguam9pbihkZXN0c3ViZGlyLCBtYWNoaW5lKQorICAgICAgICBmb3IgbmV3ZmlsZSwgc3JjZmlsZSBpbiBjb3B5ZmlsZXMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBmaWxlZGVzdCA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIGRlc3RzdWJkaXIsIG9zLnBhdGguYmFzZW5hbWUoc3JjZmlsZSkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmFic3BhdGgobmV3ZmlsZSkgIT0gb3MucGF0aC5hYnNwYXRoKGZpbGVkZXN0KToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdDb3B5aW5nICVzIHRvICVzJyAlIChuZXdmaWxlLCBmaWxlZGVzdCkpCisgICAgICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG9zLnBhdGguZGlybmFtZShmaWxlZGVzdCkpCisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG5ld2ZpbGUsIGZpbGVkZXN0KQorCisgICAgcmV0dXJuIChhcHBlbmRwYXRoLCBvcy5wYXRoLmpvaW4oYXBwZW5kZGlyLCBkZXN0c3ViZGlyKSkKKworCitkZWYgZmluZF9sYXllcmRpcihmbik6CisgICAgIiIiIEZpZ3VyZSBvdXQgcmVsYXRpdmUgcGF0aCB0byBiYXNlIG9mIGxheWVyIGZvciBhIGZpbGUgKGUuZy4gYSByZWNpcGUpIiIiCisgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKGZuKQorICAgIGxheWVyZGlyID0gJycKKyAgICB3aGlsZSBwdGg6CisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwdGgsICdjb25mJywgJ2xheWVyLmNvbmYnKSk6CisgICAgICAgICAgICBsYXllcmRpciA9IHB0aAorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHRoID0gb3MucGF0aC5kaXJuYW1lKHB0aCkKKyAgICByZXR1cm4gbGF5ZXJkaXIKKworCitkZWYgcmVwbGFjZV9kaXJfdmFycyhwYXRoLCBkKToKKyAgICAiIiJSZXBsYWNlIGNvbW1vbiBkaXJlY3RvcnkgcGF0aHMgd2l0aCBhcHByb3ByaWF0ZSB2YXJpYWJsZSByZWZlcmVuY2VzIChlLmcuIC9ldGMgYmVjb21lcyAke3N5c2NvbmZkaXJ9KSIiIgorICAgIGRpcnZhcnMgPSB7fQorICAgICMgU29ydCBieSBsZW5ndGggc28gd2UgZ2V0IHRoZSB2YXJpYWJsZXMgd2UncmUgaW50ZXJlc3RlZCBpbiBmaXJzdAorICAgIGZvciB2YXIgaW4gc29ydGVkKGQua2V5cygpLCBrZXk9bGVuKToKKyAgICAgICAgaWYgdmFyLmVuZHN3aXRoKCdkaXInKSBhbmQgdmFyLmxvd2VyKCkgPT0gdmFyOgorICAgICAgICAgICAgdmFsdWUgPSBkLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWx1ZS5zdGFydHN3aXRoKCcvJykgYW5kIG5vdCAnXG4nIGluIHZhbHVlIGFuZCB2YWx1ZSBub3QgaW4gZGlydmFyczoKKyAgICAgICAgICAgICAgICBkaXJ2YXJzW3ZhbHVlXSA9IHZhcgorICAgIGZvciBkaXJwYXRoIGluIHNvcnRlZChkaXJ2YXJzLmtleXMoKSwgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZShkaXJwYXRoLCAnJHslc30nICUgZGlydmFyc1tkaXJwYXRoXSkKKyAgICByZXR1cm4gcGF0aAorCitkZWYgZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2LCB1cmlfdHlwZSk6CisgICAgIiIiCisgICAgR2V0IFBWIHdpdGhvdXQgU1JDUFYgY29tbW9uIGluIFNDTSdzIGZvciBub3cgb25seQorICAgIHN1cHBvcnQgZ2l0LgorCisgICAgUmV0dXJucyB0dXBsZSB3aXRoIHB2LCBwcmVmaXggYW5kIHN1ZmZpeC4KKyAgICAiIiIKKyAgICBwZnggPSAnJworICAgIHNmeCA9ICcnCisKKyAgICBpZiB1cmlfdHlwZSA9PSAnZ2l0JzoKKyAgICAgICAgZ2l0X3JlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPHBmeD52PykoP1A8dmVyPlteXCtdKikoKD9QPHNmeD5cKyhnaXQpP3I/KEFVVE9JTkNcKykpKD9QPHJldj4uKikpPyIpCisgICAgICAgIG0gPSBnaXRfcmVnZXgubWF0Y2gocHYpCisKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHB2ID0gbS5ncm91cCgndmVyJykKKyAgICAgICAgICAgIHBmeCA9IG0uZ3JvdXAoJ3BmeCcpCisgICAgICAgICAgICBzZnggPSBtLmdyb3VwKCdzZngnKQorICAgIGVsc2U6CisgICAgICAgIHJlZ2V4ID0gcmUuY29tcGlsZSgiKD9QPHBmeD4odnxyKT8pKD9QPHZlcj4uKikiKQorICAgICAgICBtID0gcmVnZXgubWF0Y2gocHYpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBwdiA9IG0uZ3JvdXAoJ3ZlcicpCisgICAgICAgICAgICBwZnggPSBtLmdyb3VwKCdwZngnKQorCisgICAgcmV0dXJuIChwdiwgcGZ4LCBzZngpCisKK2RlZiBnZXRfcmVjaXBlX3Vwc3RyZWFtX3ZlcnNpb24ocmQpOgorICAgICIiIgorICAgICAgICBHZXQgdXBzdHJlYW0gdmVyc2lvbiBvZiByZWNpcGUgdXNpbmcgYmIuZmV0Y2gyIG1ldGhvZHMgd2l0aCBzdXBwb3J0IGZvcgorICAgICAgICBodHRwLCBodHRwcywgZnRwIGFuZCBnaXQuCisKKyAgICAgICAgYmIuZmV0Y2gyIGV4Y2VwdGlvbnMgY2FuIGJlIHJhaXNlZCwKKyAgICAgICAgICAgIEZldGNoRXJyb3Igd2hlbiBkb24ndCBoYXZlIG5ldHdvcmsgYWNjZXNzIG9yIHVwc3RyZWFtIHNpdGUgZG9uJ3QgcmVzcG9uc2UuCisgICAgICAgICAgICBOb01ldGhvZEVycm9yIHdoZW4gdXJpIGxhdGVzdF92ZXJzaW9uc3RyaW5nIG1ldGhvZCBpc24ndCBpbXBsZW1lbnRlZC4KKworICAgICAgICBSZXR1cm5zIGEgZGljdG9uYXJ5IHdpdGggdmVyc2lvbiwgdHlwZSBhbmQgZGF0ZXRpbWUuCisgICAgICAgIFR5cGUgY2FuIGJlIEEgZm9yIEF1dG9tYXRpYywgTSBmb3IgTWFudWFsIGFuZCBVIGZvciBVbmtub3duLgorICAgICIiIgorICAgIGZyb20gYmIuZmV0Y2gyIGltcG9ydCBkZWNvZGV1cmwKKyAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorCisgICAgcnUgPSB7fQorICAgIHJ1Wyd2ZXJzaW9uJ10gPSAnJworICAgIHJ1Wyd0eXBlJ10gPSAnVScKKyAgICBydVsnZGF0ZXRpbWUnXSA9ICcnCisKKyAgICAjIFhYWDogSWYgZG9uJ3QgaGF2ZSBTUkNfVVJJIG1lYW5zIHRoYXQgZG9uJ3QgaGF2ZSB1cHN0cmVhbSBzb3VyY2VzIHNvCisgICAgIyByZXR1cm5zIDEuMC4KKyAgICBzcmNfdXJpcyA9IHJkLmdldFZhcignU1JDX1VSSScsIFRydWUpCisgICAgaWYgbm90IHNyY191cmlzOgorICAgICAgICBydVsndmVyc2lvbiddID0gJzEuMCcKKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdNJworICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHJldHVybiBydQorCisgICAgIyBYWFg6IHdlIHN1cHBvc2UgdGhhdCB0aGUgZmlyc3QgZW50cnkgcG9pbnRzIHRvIHRoZSB1cHN0cmVhbSBzb3VyY2VzCisgICAgc3JjX3VyaSA9IHNyY191cmlzLnNwbGl0KClbMF0KKyAgICB1cmlfdHlwZSwgXywgXywgXywgXywgXyA9ICBkZWNvZGV1cmwoc3JjX3VyaSkKKworICAgIHB2ID0gcmQuZ2V0VmFyKCdQVicsIFRydWUpCisKKyAgICBtYW51YWxfdXBzdHJlYW1fdmVyc2lvbiA9IHJkLmdldFZhcigiUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04iLCBUcnVlKQorICAgIGlmIG1hbnVhbF91cHN0cmVhbV92ZXJzaW9uOgorICAgICAgICAjIG1hbnVhbCB0cmFja2luZyBvZiB1cHN0cmVhbSB2ZXJzaW9uLgorICAgICAgICBydVsndmVyc2lvbiddID0gbWFudWFsX3Vwc3RyZWFtX3ZlcnNpb24KKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdNJworCisgICAgICAgIG1hbnVhbF91cHN0cmVhbV9kYXRlID0gcmQuZ2V0VmFyKCJDSEVDS19EQVRFIiwgVHJ1ZSkKKyAgICAgICAgaWYgbWFudWFsX3Vwc3RyZWFtX2RhdGU6CisgICAgICAgICAgICBkYXRlID0gZGF0ZXRpbWUuc3RycHRpbWUobWFudWFsX3Vwc3RyZWFtX2RhdGUsICIlYiAlZCwgJVkiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLm5vdygpCisgICAgICAgIHJ1WydkYXRldGltZSddID0gZGF0ZQorCisgICAgZWxpZiB1cmlfdHlwZSA9PSAiZmlsZSI6CisgICAgICAgICMgZmlsZXMgYXJlIGFsd2F5cyB1cC10by1kYXRlCisgICAgICAgIHJ1Wyd2ZXJzaW9uJ10gPSAgcHYKKyAgICAgICAgcnVbJ3R5cGUnXSA9ICdBJworICAgICAgICBydVsnZGF0ZXRpbWUnXSA9IGRhdGV0aW1lLm5vdygpCisgICAgZWxzZToKKyAgICAgICAgdWQgPSBiYi5mZXRjaDIuRmV0Y2hEYXRhKHNyY191cmksIHJkKQorICAgICAgICBwdXB2ZXIgPSB1ZC5tZXRob2QubGF0ZXN0X3ZlcnNpb25zdHJpbmcodWQsIHJkKQorICAgICAgICAodXB2ZXJzaW9uLCByZXZpc2lvbikgPSBwdXB2ZXIKKworICAgICAgICAjIGZvcm1hdCBnaXQgdmVyc2lvbiB2ZXJzaW9uK2dpdEFVVE9JTkMrSEFTSAorICAgICAgICBpZiB1cmlfdHlwZSA9PSAnZ2l0JzoKKyAgICAgICAgICAgIChwdiwgcGZ4LCBzZngpID0gZ2V0X3JlY2lwZV9wdl93aXRob3V0X3NyY3B2KHB2LCB1cmlfdHlwZSkKKworICAgICAgICAgICAgIyBpZiBjb250YWlucyByZXZpc2lvbiBidXQgbm90IHVwdmVyc2lvbiB1c2UgY3VycmVudCBwdgorICAgICAgICAgICAgaWYgdXB2ZXJzaW9uID09ICcnIGFuZCByZXZpc2lvbjoKKyAgICAgICAgICAgICAgICB1cHZlcnNpb24gPSBwdgorCisgICAgICAgICAgICBpZiB1cHZlcnNpb246CisgICAgICAgICAgICAgICAgdG1wID0gdXB2ZXJzaW9uCisgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gJycKKworICAgICAgICAgICAgICAgIGlmIHBmeDoKKyAgICAgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gcGZ4ICsgdG1wCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdXB2ZXJzaW9uID0gdG1wCisKKyAgICAgICAgICAgICAgICBpZiBzZng6CisgICAgICAgICAgICAgICAgICAgIHVwdmVyc2lvbiA9IHVwdmVyc2lvbiArIHNmeCArIHJldmlzaW9uWzoxMF0KKworICAgICAgICBpZiB1cHZlcnNpb246CisgICAgICAgICAgICBydVsndmVyc2lvbiddID0gdXB2ZXJzaW9uCisgICAgICAgICAgICBydVsndHlwZSddID0gJ0EnCisKKyAgICAgICAgcnVbJ2RhdGV0aW1lJ10gPSBkYXRldGltZS5ub3coKQorCisgICAgcmV0dXJuIHJ1CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9yb290ZnMucHkgYi9tZXRhL2xpYi9vZS9yb290ZnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1M2ZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Jvb3Rmcy5weQpAQCAtMCwwICsxLDk4NCBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCAqCitmcm9tIG9lLm1hbmlmZXN0IGltcG9ydCAqCitpbXBvcnQgb2UucGF0aAoraW1wb3J0IGZpbGVjbXAKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCByZQorCisKK2NsYXNzIFJvb3RmcyhvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgaXMgYW4gYWJzdHJhY3QgY2xhc3MuIERvIG5vdCBpbnN0YW50aWF0ZSB0aGlzIGRpcmVjdGx5LgorICAgICIiIgorICAgIF9fbWV0YWNsYXNzX18gPSBBQkNNZXRhCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHNlbGYuZCA9IGQKKyAgICAgICAgc2VsZi5wbSA9IE5vbmUKKyAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgPSBzZWxmLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKQorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBzZWxmLmQuZ2V0VmFyKCdERVBMT1lfRElSX0lNQUdFJywgVHJ1ZSkKKworICAgICAgICBzZWxmLmluc3RhbGxfb3JkZXIgPSBNYW5pZmVzdC5JTlNUQUxMX09SREVSCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfbG9nX2NoZWNrKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2xvZ19jaGVja193YXJuKHNlbGYpOgorICAgICAgICByID0gcmUuY29tcGlsZSgnXih3YXJufFdhcm58Tk9URTogd2FybnxOT1RFOiBXYXJufFdBUk5JTkc6KScpCisgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19wYXRoLCAncicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxvZzoKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lIG9yICdOT1RFOicgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG0gPSByLnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhIHdhcm5pbmcgbWVzc2FnZSBpbiB0aGUgbG9nZmlsZSAoa2V5d29yZCBcJyVzXCcpOlxuW2xvZ19jaGVja10gJXMnCisJCQkJICAgICUgKHNlbGYuZC5nZXRWYXIoJ1BOJywgVHJ1ZSksIG0uZ3JvdXAoKSwgbGluZSkpCisKKyAgICBkZWYgX2xvZ19jaGVja19lcnJvcihzZWxmKToKKyAgICAgICAgciA9IHJlLmNvbXBpbGUoc2VsZi5sb2dfY2hlY2tfcmVnZXgpCisgICAgICAgIGxvZ19wYXRoID0gc2VsZi5kLmV4cGFuZCgiJHtUfS9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgd2l0aCBvcGVuKGxvZ19wYXRoLCAncicpIGFzIGxvZzoKKyAgICAgICAgICAgIGZvdW5kX2Vycm9yID0gMAorICAgICAgICAgICAgbWVzc2FnZSA9ICJcbiIKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxvZzoKKyAgICAgICAgICAgICAgICBpZiAnbG9nX2NoZWNrJyBpbiBsaW5lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ1tsb2dfY2hlY2tdICVzOiBmb3VuZCBhbiBlcnJvciBtZXNzYWdlIGluIHRoZSBsb2dmaWxlIChrZXl3b3JkIFwnJXNcJyk6XG5bbG9nX2NoZWNrXSAlcycKKwkJCQkgICAgJSAoc2VsZi5kLmdldFZhcignUE4nLCBUcnVlKSwgbS5ncm91cCgpLCBsaW5lKSkKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID49IDEgYW5kIGZvdW5kX2Vycm9yIDw9IDU6CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gbGluZSArICdcbicKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgKz0gMQorCisgICAgICAgICAgICAgICAgaWYgZm91bmRfZXJyb3IgPT0gNjoKKyAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwobWVzc2FnZSkKKworICAgIGRlZiBfaW5zZXJ0X2ZlZWRfdXJpcyhzZWxmKToKKyAgICAgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBzZWxmLnBtLmluc2VydF9mZWVkc191cmlzKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfaGFuZGxlX2ludGVyY2VwdF9mYWlsdXJlKHNlbGYsIGZhaWxlZF9zY3JpcHQpOgorICAgICAgICBwYXNzCisKKyAgICAiIiIKKyAgICBUaGUgX2NsZWFudXAoKSBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgdG8gY2xlYW4tdXAgc3R1ZmYgdGhhdCB3ZSBkb24ndCByZWFsbHkKKyAgICB3YW50IHRvIGVuZCB1cCBvbiB0YXJnZXQuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBSUE0sIHRoZSBEQiBsb2Nrcy4KKyAgICBUaGUgbWV0aG9kIGlzIGNhbGxlZCwgb25jZSwgYXQgdGhlIGVuZCBvZiBjcmVhdGUoKSBtZXRob2QuCisgICAgIiIiCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3NldHVwX2RiZ19yb290ZnMoc2VsZiwgZGlycyk6CisgICAgICAgIGdlbl9kZWJ1Z2ZzID0gc2VsZi5kLmdldFZhcignSU1BR0VfR0VOX0RFQlVHRlMnLCBUcnVlKSBvciAnMCcKKyAgICAgICAgaWYgZ2VuX2RlYnVnZnMgIT0gJzEnOgorICAgICAgICAgICByZXR1cm4KKworICAgICAgICBiYi5ub3RlKCIgIFJlbmFtaW5nIHRoZSBvcmlnaW5hbCByb290ZnMuLi4iKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMsIHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1vcmlnJykKKworICAgICAgICBiYi5ub3RlKCIgIENyZWF0aW5nIGRlYnVnIHJvb3Rmcy4uLiIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihzZWxmLmltYWdlX3Jvb3RmcykKKworICAgICAgICBiYi5ub3RlKCIgIENvcHlpbmcgYmFjayBwYWNrYWdlIGRhdGFiYXNlLi4uIikKKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuaW1hZ2Vfcm9vdGZzICsgb3MucGF0aC5kaXJuYW1lKGRpcikpCisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyLCBzZWxmLmltYWdlX3Jvb3RmcyArIGRpcikKKworICAgICAgICBjcGF0aCA9IG9lLmNhY2hlZHBhdGguQ2FjaGVkUGF0aCgpCisgICAgICAgICMgQ29weSBmaWxlcyBsb2NhdGVkIGluIC91c3IvbGliL2RlYnVnIG9yIC91c3Ivc3JjL2RlYnVnCisgICAgICAgIGZvciBkaXIgaW4gWyIvdXNyL2xpYi9kZWJ1ZyIsICIvdXNyL3NyYy9kZWJ1ZyJdOgorICAgICAgICAgICAgc3JjID0gc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnICsgZGlyCisgICAgICAgICAgICBpZiBjcGF0aC5leGlzdHMoc3JjKToKKyAgICAgICAgICAgICAgICBkc3QgPSBzZWxmLmltYWdlX3Jvb3RmcyArIGRpcgorICAgICAgICAgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihvcy5wYXRoLmRpcm5hbWUoZHN0KSkKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjLCBkc3QpCisKKyAgICAgICAgIyBDb3B5IGZpbGVzIHdpdGggc3VmZml4ICcuZGVidWcnIG9yIGxvY2F0ZWQgaW4gJy5kZWJ1ZycgZGlyLgorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gY3BhdGgud2FsayhzZWxmLmltYWdlX3Jvb3RmcyArICctb3JpZycpOgorICAgICAgICAgICAgcmVsYXRpdmVfZGlyID0gcm9vdFtsZW4oc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnKTpdCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmLmVuZHN3aXRoKCcuZGVidWcnKSBvciAnLy5kZWJ1ZycgaW4gcmVsYXRpdmVfZGlyOgorICAgICAgICAgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMgKyByZWxhdGl2ZV9kaXIpCisgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KG9zLnBhdGguam9pbihyb290LCBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbWFnZV9yb290ZnMgKyByZWxhdGl2ZV9kaXIpCisKKyAgICAgICAgYmIubm90ZSgiICBJbnN0YWxsIGNvbXBsZW1lbnRhcnkgJyotZGJnJyBwYWNrYWdlcy4uLiIpCisgICAgICAgIHNlbGYucG0uaW5zdGFsbF9jb21wbGVtZW50YXJ5KCcqLWRiZycpCisKKyAgICAgICAgYmIubm90ZSgiICBSZW5hbWUgZGVidWcgcm9vdGZzLi4uIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmltYWdlX3Jvb3RmcyArICctZGJnJykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMsIHNlbGYuaW1hZ2Vfcm9vdGZzICsgJy1kYmcnKQorCisgICAgICAgIGJiLm5vdGUoIiAgUmVzdG9yZWluZyBvcmlnaW5hbCByb290ZnMuLi4iKQorICAgICAgICBvcy5yZW5hbWUoc2VsZi5pbWFnZV9yb290ZnMgKyAnLW9yaWcnLCBzZWxmLmltYWdlX3Jvb3RmcykKKworICAgIGRlZiBfZXhlY19zaGVsbF9jbWQoc2VsZiwgY21kKToKKyAgICAgICAgZmFrZXJvb3RjbWQgPSBzZWxmLmQuZ2V0VmFyKCdGQUtFUk9PVCcsIFRydWUpCisgICAgICAgIGlmIGZha2Vyb290Y21kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZXhlY19jbWQgPSBbZmFrZXJvb3RjbWQsIGNtZF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4ZWNfY21kID0gY21kCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoZXhlY19jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4oIkNvbW1hbmQgJyVzJyByZXR1cm5lZCAlZDpcbiVzIiAlIChlLmNtZCwgZS5yZXR1cm5jb2RlLCBlLm91dHB1dCkpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgIGJiLm5vdGUoIiMjIyMjIyBHZW5lcmF0ZSByb290ZnMgIyMjIyMjIyIpCisgICAgICAgIHByZV9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUFJFUFJPQ0VTU19DT01NQU5EIiwgVHJ1ZSkKKyAgICAgICAgcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUE9TVFBST0NFU1NfQ09NTUFORCIsIFRydWUpCisKKyAgICAgICAgcG9zdGluc3RfaW50ZXJjZXB0c19kaXIgPSBzZWxmLmQuZ2V0VmFyKCJQT1NUSU5TVF9JTlRFUkNFUFRTX0RJUiIsIFRydWUpCisgICAgICAgIGlmIG5vdCBwb3N0aW5zdF9pbnRlcmNlcHRzX2RpcjoKKyAgICAgICAgICAgIHBvc3RpbnN0X2ludGVyY2VwdHNfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzIikKKyAgICAgICAgaW50ZXJjZXB0c19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcignV09SS0RJUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJjZXB0X3NjcmlwdHMiKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShpbnRlcmNlcHRzX2RpciwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi5pbWFnZV9yb290ZnMpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUocG9zdGluc3RfaW50ZXJjZXB0c19kaXIsIGludGVyY2VwdHNfZGlyKQorCisgICAgICAgIHNodXRpbC5jb3B5KHNlbGYuZC5leHBhbmQoIiR7Q09SRUJBU0V9L21ldGEvZmlsZXMvZGVwbG95ZGlyX3JlYWRtZS50eHQiKSwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXBsb3lfZGlyX2ltYWdlICsKKyAgICAgICAgICAgICAgICAgICAgIi9SRUFETUVfLV9ET19OT1RfREVMRVRFX0ZJTEVTX0lOX1RISVNfRElSRUNUT1JZLnR4dCIpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICAjIGNhbGwgdGhlIHBhY2thZ2UgbWFuYWdlciBkZXBlbmRlbnQgY3JlYXRlIG1ldGhvZAorICAgICAgICBzZWxmLl9jcmVhdGUoKQorCisgICAgICAgIHN5c2NvbmZkaXIgPSBzZWxmLmltYWdlX3Jvb3RmcyArIHNlbGYuZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc3lzY29uZmRpcikKKyAgICAgICAgd2l0aCBvcGVuKHN5c2NvbmZkaXIgKyAiL3ZlcnNpb24iLCAidysiKSBhcyB2ZXI6CisgICAgICAgICAgICB2ZXIud3JpdGUoc2VsZi5kLmdldFZhcignQlVJTEROQU1FJywgVHJ1ZSkgKyAiXG4iKQorCisgICAgICAgIHNlbGYuX3J1bl9pbnRlcmNlcHRzKCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBwb3N0X3Byb2Nlc3NfY21kcykKKworICAgICAgICBpZiBiYi51dGlscy5jb250YWlucygiSU1BR0VfRkVBVFVSRVMiLCAicmVhZC1vbmx5LXJvb3RmcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCk6CisgICAgICAgICAgICBkZWxheWVkX3Bvc3RpbnN0cyA9IHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpCisgICAgICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgY29uZmlndXJlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9mZmxpbmUgYW5kIHJvb3RmcyBpcyByZWFkLW9ubHk6ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignVVNFX0RFVkZTJywgVHJ1ZSkgIT0gIjEiOgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2RldmZzKCkKKworICAgICAgICBzZWxmLl91bmluc3RhbGxfdW5uZWVkZWQoKQorCisgICAgICAgIHNlbGYuX2luc2VydF9mZWVkX3VyaXMoKQorCisgICAgICAgIHNlbGYuX3J1bl9sZGNvbmZpZygpCisKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignVVNFX0RFUE1PRCcsIFRydWUpICE9ICIwIjoKKyAgICAgICAgICAgIHNlbGYuX2dlbmVyYXRlX2tlcm5lbF9tb2R1bGVfZGVwcygpCisKKyAgICAgICAgc2VsZi5fY2xlYW51cCgpCisgICAgICAgIHNlbGYuX2xvZ19jaGVjaygpCisKKyAgICBkZWYgX3VuaW5zdGFsbF91bm5lZWRlZChzZWxmKToKKyAgICAgICAgIyBSZW1vdmUgdW5uZWVkZWQgaW5pdCBzY3JpcHQgc3ltbGlua3MKKyAgICAgICAgZGVsYXllZF9wb3N0aW5zdHMgPSBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHMoKQorICAgICAgICBpZiBkZWxheWVkX3Bvc3RpbnN0cyBpcyBOb25lOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtzeXNjb25mZGlyfS9pbml0LmQvcnVuLXBvc3RpbnN0cyIpKToKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjX3NoZWxsX2NtZChbInVwZGF0ZS1yYy5kIiwgIi1mIiwgIi1yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignSU1BR0VfUk9PVEZTJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydW4tcG9zdGluc3RzIiwgInJlbW92ZSJdKQorCisgICAgICAgIHJ1bnRpbWVfcGtnbWFuYWdlID0gYmIudXRpbHMuY29udGFpbnMoIklNQUdFX0ZFQVRVUkVTIiwgInBhY2thZ2UtbWFuYWdlbWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIHNlbGYuZCkKKyAgICAgICAgc3lzdmNvbXBhdF9pbl9kaXN0cm8gPSBiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgWyAic3lzdGVtZCIsICJzeXN2aW5pdCIgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgc2VsZi5kKQorICAgICAgICBpbWFnZV9yb3JmcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCJJTUFHRV9GRUFUVVJFUyIsICJyZWFkLW9ubHktcm9vdGZzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgc2VsZi5kKQorICAgICAgICBpZiBzeXN2Y29tcGF0X2luX2Rpc3RybyBhbmQgbm90IGltYWdlX3JvcmZzOgorICAgICAgICAgICAgcGtnX3RvX3JlbW92ZSA9ICIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gInVwZGF0ZS1yYy5kIgorICAgICAgICBpZiBub3QgcnVudGltZV9wa2dtYW5hZ2U6CisgICAgICAgICAgICAjIFJlbW92ZSBjb21wb25lbnRzIHRoYXQgd2UgZG9uJ3QgbmVlZCBpZiB3ZSdyZSBub3QgZ29pbmcgdG8gaW5zdGFsbAorICAgICAgICAgICAgIyBhZGRpdGlvbmFsIHBhY2thZ2VzIGF0IHJ1bnRpbWUKKyAgICAgICAgICAgIGlmIGRlbGF5ZWRfcG9zdGluc3RzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZGlyID0gc2VsZi5kLmV4cGFuZCgnJHtXT1JLRElSfS9pbnN0YWxsZWRfcGtncy50eHQnKQorICAgICAgICAgICAgICAgIHBrZ3NfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGluc3RhbGxlZF9wa2dzX2RpciwgInIrIikgYXMgaW5zdGFsbGVkX3BrZ3M6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NfaW5zdGFsbGVkID0gaW5zdGFsbGVkX3BrZ3MucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgICAgICAgICBmb3IgcGtnX2luc3RhbGxlZCBpbiBwa2dzX2luc3RhbGxlZFs6XToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZyA9IHBrZ19pbnN0YWxsZWQuc3BsaXQoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIFsidXBkYXRlLXJjLmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFzZS1wYXNzd2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hhZG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZS1hbHRlcm5hdGl2ZXMiLCBwa2dfdG9fcmVtb3ZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJST09URlNfQk9PVFNUUkFQX0lOU1RBTEwiLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ3NfdG9fcmVtb3ZlLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnc19pbnN0YWxsZWQucmVtb3ZlKHBrZ19pbnN0YWxsZWQpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGtnc190b19yZW1vdmUpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnc190b19yZW1vdmUsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAjIFVwZGF0ZSBpbnN0YWxsZWRfcGtncy50eHQKKyAgICAgICAgICAgICAgICAgICAgb3BlbihpbnN0YWxsZWRfcGtnc19kaXIsICJ3KyIpLndyaXRlKCdcbicuam9pbihwa2dzX2luc3RhbGxlZCkpCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZV9wb3N0aW5zdHMoKQorCisgICAgICAgIHBvc3RfdW5pbnN0YWxsX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCJST09URlNfUE9TVFVOSU5TVEFMTF9DT01NQU5EIiwgVHJ1ZSkKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcG9zdF91bmluc3RhbGxfY21kcykKKworICAgICAgICBpZiBub3QgcnVudGltZV9wa2dtYW5hZ2U6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgcGFja2FnZSBtYW5hZ2VyIGRhdGEgZmlsZXMKKyAgICAgICAgICAgIHNlbGYucG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgIGRlZiBfcnVuX2ludGVyY2VwdHMoc2VsZik6CisgICAgICAgIGludGVyY2VwdHNfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyY2VwdF9zY3JpcHRzIikKKworICAgICAgICBiYi5ub3RlKCJSdW5uaW5nIGludGVyY2VwdCBzY3JpcHRzOiIpCisgICAgICAgIG9zLmVudmlyb25bJ0QnXSA9IHNlbGYuaW1hZ2Vfcm9vdGZzCisgICAgICAgIGZvciBzY3JpcHQgaW4gb3MubGlzdGRpcihpbnRlcmNlcHRzX2Rpcik6CisgICAgICAgICAgICBzY3JpcHRfZnVsbCA9IG9zLnBhdGguam9pbihpbnRlcmNlcHRzX2Rpciwgc2NyaXB0KQorCisgICAgICAgICAgICBpZiBzY3JpcHQgPT0gInBvc3RpbnN0X2ludGVyY2VwdCIgb3Igbm90IG9zLmFjY2VzcyhzY3JpcHRfZnVsbCwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYmIubm90ZSgiPiBFeGVjdXRpbmcgJXMgaW50ZXJjZXB0IC4uLiIgJSBzY3JpcHQpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoc2NyaXB0X2Z1bGwpCisgICAgICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi53YXJuKCJUaGUgcG9zdGluc3RhbGwgaW50ZXJjZXB0IGhvb2sgJyVzJyBmYWlsZWQgKGV4aXQgY29kZTogJWQpISBTZWUgbG9nIGZvciBkZXRhaWxzISIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHNjcmlwdCwgZS5yZXR1cm5jb2RlKSkKKworICAgICAgICAgICAgICAgIHdpdGggb3BlbihzY3JpcHRfZnVsbCkgYXMgaW50ZXJjZXB0OgorICAgICAgICAgICAgICAgICAgICByZWdpc3RlcmVkX3BrZ3MgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGludGVyY2VwdC5yZWFkKCkuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gcmUubWF0Y2goIl4jI1BLR1M6KC4qKSIsIGxpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRfcGtncyA9IG0uZ3JvdXAoMSkuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVnaXN0ZXJlZF9wa2dzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGhlIHBvc3RpbnN0YWxscyBmb3IgdGhlIGZvbGxvd2luZyBwYWNrYWdlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWxsIGJlIHBvc3Rwb25lZCBmb3IgZmlyc3QgYm9vdDogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJlZF9wa2dzKQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGNhbGwgdGhlIGJhY2tlbmQgZGVwZW5kZW50IGhhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShyZWdpc3RlcmVkX3BrZ3MpCisKKyAgICBkZWYgX3J1bl9sZGNvbmZpZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kLmdldFZhcignTERDT05GSUdERVBFTkQnLCBUcnVlKToKKyAgICAgICAgICAgIGJiLm5vdGUoIkV4ZWN1dGluZzogbGRjb25maWcgLXIiICsgc2VsZi5pbWFnZV9yb290ZnMgKyAiLWMgbmV3IC12IikKKyAgICAgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsnbGRjb25maWcnLCAnLXInLCBzZWxmLmltYWdlX3Jvb3RmcywgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3JywgJy12J10pCisKKyAgICBkZWYgX2NoZWNrX2Zvcl9rZXJuZWxfbW9kdWxlcyhzZWxmLCBtb2R1bGVzX2Rpcik6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKG1vZHVsZXNfZGlyLCB0b3Bkb3duPVRydWUpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgZm91bmRfa28gPSBuYW1lLmVuZHN3aXRoKCIua28iKQorICAgICAgICAgICAgICAgIGlmIGZvdW5kX2tvOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRfa28KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2dlbmVyYXRlX2tlcm5lbF9tb2R1bGVfZGVwcyhzZWxmKToKKyAgICAgICAgbW9kdWxlc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsICdsaWInLCAnbW9kdWxlcycpCisgICAgICAgICMgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9kdWxlcyBkb24ndCBib3RoZXIgdG8gZG8gdGhlIGRlcG1vZAorICAgICAgICBpZiBub3Qgc2VsZi5fY2hlY2tfZm9yX2tlcm5lbF9tb2R1bGVzKG1vZHVsZXNfZGlyKToKKyAgICAgICAgICAgIGJiLm5vdGUoIk5vIEtlcm5lbCBNb2R1bGVzIGZvdW5kLCBub3QgcnVubmluZyBkZXBtb2QiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAga2VybmVsX2FiaV92ZXJfZmlsZSA9IG9lLnBhdGguam9pbihzZWxmLmQuZ2V0VmFyKCdQS0dEQVRBX0RJUicsIFRydWUpLCAia2VybmVsLWRlcG1vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlcm5lbC1hYml2ZXJzaW9uJykKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGtlcm5lbF9hYmlfdmVyX2ZpbGUpOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIGtlcm5lbC1hYml2ZXJzaW9uIGZpbGUgZm91bmQgKCVzKSwgY2Fubm90IHJ1biBkZXBtb2QsIGFib3J0aW5nIiAlIGtlcm5lbF9hYmlfdmVyX2ZpbGUpCisKKyAgICAgICAga2VybmVsX3ZlciA9IG9wZW4oa2VybmVsX2FiaV92ZXJfZmlsZSkucmVhZCgpLnN0cmlwKCcgXG4nKQorICAgICAgICB2ZXJzaW9uZWRfbW9kdWxlc19kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsIG1vZHVsZXNfZGlyLCBrZXJuZWxfdmVyKQorCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcih2ZXJzaW9uZWRfbW9kdWxlc19kaXIpCisKKyAgICAgICAgc2VsZi5fZXhlY19zaGVsbF9jbWQoWydkZXBtb2R3cmFwcGVyJywgJy1hJywgJy1iJywgc2VsZi5pbWFnZV9yb290ZnMsIGtlcm5lbF92ZXJdKQorCisgICAgIiIiCisgICAgQ3JlYXRlIGRldmZzOgorICAgICogSU1BR0VfREVWSUNFX1RBQkxFIGlzIHRoZSBvbGQgbmFtZSB0byBhbiBhYnNvbHV0ZSBwYXRoIHRvIGEgZGV2aWNlIHRhYmxlIGZpbGUKKyAgICAqIElNQUdFX0RFVklDRV9UQUJMRVMgaXMgYSBuZXcgbmFtZSBmb3IgYSBmaWxlLCBvciBsaXN0IG9mIGZpbGVzLCBzZWFjaGVkCisgICAgICBmb3IgaW4gdGhlIEJCUEFUSAorICAgIElmIG5laXRoZXIgYXJlIHNwZWNpZmllZCB0aGVuIHRoZSBkZWZhdWx0IG5hbWUgb2YgZmlsZXMvZGV2aWNlX3RhYmxlLW1pbmltYWwudHh0CisgICAgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBCQlBBVEggKHNhbWUgYXMgdGhlIG9sZCB2ZXJzaW9uLikKKyAgICAiIiIKKyAgICBkZWYgX2NyZWF0ZV9kZXZmcyhzZWxmKToKKyAgICAgICAgZGV2dGFibGVfbGlzdCA9IFtdCisgICAgICAgIGRldnRhYmxlID0gc2VsZi5kLmdldFZhcignSU1BR0VfREVWSUNFX1RBQkxFJywgVHJ1ZSkKKyAgICAgICAgaWYgZGV2dGFibGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZXZ0YWJsZV9saXN0LmFwcGVuZChkZXZ0YWJsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRldnRhYmxlcyA9IHNlbGYuZC5nZXRWYXIoJ0lNQUdFX0RFVklDRV9UQUJMRVMnLCBUcnVlKQorICAgICAgICAgICAgaWYgZGV2dGFibGVzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGV2dGFibGVzID0gJ2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCcKKyAgICAgICAgICAgIGZvciBkZXZ0YWJsZSBpbiBkZXZ0YWJsZXMuc3BsaXQoKToKKyAgICAgICAgICAgICAgICBkZXZ0YWJsZV9saXN0LmFwcGVuZCgiJXMiICUgYmIudXRpbHMud2hpY2goc2VsZi5kLmdldFZhcignQkJQQVRIJywgVHJ1ZSksIGRldnRhYmxlKSkKKworICAgICAgICBmb3IgZGV2dGFibGUgaW4gZGV2dGFibGVfbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFsibWFrZWRldnMiLCAiLXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLCAiLUQiLCBkZXZ0YWJsZV0pCisKKworY2xhc3MgUnBtUm9vdGZzKFJvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKFJwbVJvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlJ1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfGV4aXQgMXxFUlJPUjogfEVycm9yOiB8RXJyb3IgfEVSUk9SICdcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3xGYWlsZWQgfEZhaWxlZDogfEZhaWxlZCR8RmFpbGVkXChcZCtcKTopJworICAgICAgICBzZWxmLm1hbmlmZXN0ID0gUnBtTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYucG0gPSBScG1QTShkLAorICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignVEFSR0VUX1ZFTkRPUicsIFRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiA9IHNlbGYuZC5nZXRWYXIoJ0lOQ19SUE1fSU1BR0VfR0VOJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5pbmNfcnBtX2ltYWdlX2dlbiAhPSAiMSI6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBtLnJlY292ZXJ5X3BhY2thZ2luZ19kYXRhKCkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1RFTVBfUk9PVEZTJywgVHJ1ZSksIFRydWUpCisKKyAgICAgICAgc2VsZi5wbS5jcmVhdGVfY29uZmlncygpCisKKyAgICAnJycKKyAgICBXaGlsZSBycG0gaW5jcmVtZW50YWwgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHJlbW92ZSB0aGUKKyAgICB1bm5lZWRlZCBwa2dzIGJ5IGNvbXBhcmluZyB0aGUgbmV3IGluc3RhbGwgc29sdXRpb24gbWFuaWZlc3QgYW5kIHRoZQorICAgIG9sZCBpbnN0YWxsZWQgbWFuaWZlc3QuCisgICAgJycnCisgICAgZGVmIF9jcmVhdGVfaW5jcmVtZW50YWwoc2VsZiwgcGtnc19pbml0aWFsX2luc3RhbGwpOgorICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKworICAgICAgICAgICAgcGtnc190b19pbnN0YWxsID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc19pbml0aWFsX2luc3RhbGw6CisgICAgICAgICAgICAgICAgcGtnc190b19pbnN0YWxsICs9IHBrZ3NfaW5pdGlhbF9pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgICAgICBpbnN0YWxsZWRfbWFuaWZlc3QgPSBzZWxmLnBtLmxvYWRfb2xkX2luc3RhbGxfc29sdXRpb24oKQorICAgICAgICAgICAgc29sdXRpb25fbWFuaWZlc3QgPSBzZWxmLnBtLmR1bXBfaW5zdGFsbF9zb2x1dGlvbihwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgICAgIHBrZ190b19yZW1vdmUgPSBsaXN0KCkKKyAgICAgICAgICAgIGZvciBwa2cgaW4gaW5zdGFsbGVkX21hbmlmZXN0OgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gc29sdXRpb25fbWFuaWZlc3Q6CisgICAgICAgICAgICAgICAgICAgIHBrZ190b19yZW1vdmUuYXBwZW5kKHBrZykKKworICAgICAgICAgICAgc2VsZi5wbS51cGRhdGUoKQorCisgICAgICAgICAgICBiYi5ub3RlKCdpbmNyZW1lbnRhbCB1cGRhdGUgLS0gdXBncmFkZSBwYWNrYWdlcyBpbiBwbGFjZSAnKQorICAgICAgICAgICAgc2VsZi5wbS51cGdyYWRlKCkKKyAgICAgICAgICAgIGlmIHBrZ190b19yZW1vdmUgIT0gW106CisgICAgICAgICAgICAgICAgYmIubm90ZSgnaW5jcmVtZW50YWwgcmVtb3ZlZDogJXMnICUgJyAnLmpvaW4ocGtnX3RvX3JlbW92ZSkpCisgICAgICAgICAgICAgICAgc2VsZi5wbS5yZW1vdmUocGtnX3RvX3JlbW92ZSkKKworICAgIGRlZiBfY3JlYXRlKHNlbGYpOgorICAgICAgICBwa2dzX3RvX2luc3RhbGwgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorICAgICAgICBycG1fcHJlX3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ1JQTV9QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgcnBtX3Bvc3RfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignUlBNX1BPU1RQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKworICAgICAgICAjIHVwZGF0ZSBQTSBpbmRleCBmaWxlcworICAgICAgICBzZWxmLnBtLndyaXRlX2luZGV4KCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcHJlX3Byb2Nlc3NfY21kcykKKworICAgICAgICBzZWxmLnBtLmR1bXBfYWxsX2F2YWlsYWJsZV9wa2dzKCkKKworICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9pbmNyZW1lbnRhbChwa2dzX3RvX2luc3RhbGwpCisKKyAgICAgICAgc2VsZi5wbS51cGRhdGUoKQorCisgICAgICAgIHBrZ3MgPSBbXQorICAgICAgICBwa2dzX2F0dGVtcHQgPSBbXQorICAgICAgICBmb3IgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgPT0gTWFuaWZlc3QuUEtHX1RZUEVfQVRURU1QVF9PTkxZOgorICAgICAgICAgICAgICAgIHBrZ3NfYXR0ZW1wdCArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBrZ3MgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvZXRjL3JwbScsICcvdmFyL2xpYi9ycG0nLCAnL3Zhci9saWIvc21hcnQnXSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBycG1fcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrKCkKKworICAgICAgICBpZiBzZWxmLmluY19ycG1faW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0uYmFja3VwX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICBzZWxmLnBtLnJwbV9zZXR1cF9zbWFydF90YXJnZXRfY29uZmlnKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgorICAgICAgICByZXR1cm4gWydERVBMT1lfRElSX1JQTScsICdJTkNfUlBNX0lNQUdFX0dFTicsICdSUE1fUFJFUFJPQ0VTU19DT01NQU5EUycsCisgICAgICAgICAgICAgICAgJ1JQTV9QT1NUUFJPQ0VTU19DT01NQU5EUycsICdSUE1fUFJFRkVSX0VMRl9BUkNIJ10KKworICAgIGRlZiBfZ2V0X2RlbGF5ZWRfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICBwb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L3JwbS1wb3N0aW5zdHMiKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBvc3RpbnN0X2Rpcik6CisgICAgICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIocG9zdGluc3RfZGlyKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgYmIubm90ZSgnRGVsYXllZCBwYWNrYWdlIHNjcmlwdGxldDogJXMnICUgZikKKyAgICAgICAgICAgIHJldHVybiBmaWxlcworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3NhdmVfcG9zdGluc3RzKHNlbGYpOgorICAgICAgICAjIHRoaXMgaXMganVzdCBhIHN0dWIuIEZvciBSUE0sIHRoZSBmYWlsZWQgcG9zdGluc3RhbGxzIGFyZQorICAgICAgICAjIGFscmVhZHkgc2F2ZWQgaW4gL2V0Yy9ycG0tcG9zdGluc3RzCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbG9nX2NoZWNrX2Vycm9yKHNlbGYpOgorICAgICAgICByID0gcmUuY29tcGlsZSgnKHVucGFja2luZyBvZiBhcmNoaXZlIGZhaWxlZHxDYW5ub3QgZmluZCBwYWNrYWdlfGV4aXQgMXxFUlJ8RmFpbCknKQorICAgICAgICBsb2dfcGF0aCA9IHNlbGYuZC5leHBhbmQoIiR7VH0vbG9nLmRvX3Jvb3RmcyIpCisgICAgICAgIHdpdGggb3Blbihsb2dfcGF0aCwgJ3InKSBhcyBsb2c6CisgICAgICAgICAgICBmb3VuZF9lcnJvciA9IDAKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiXG4iCisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2cucmVhZCgpLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIGlmICdsb2dfY2hlY2snIGluIGxpbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBzaCAteCBtYXkgZW1pdCBjb2RlIHdoaWNoIGlzbid0IGFjdHVhbGx5IGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrJyk6CisJCSAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgbSA9IHIuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZXJyb3IgPSAxCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ2xvZ19jaGVjazogVGhlcmUgd2VyZSBlcnJvciBtZXNzYWdlcyBpbiB0aGUgbG9nZmlsZScpCisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oJ2xvZ19jaGVjazogTWF0Y2hlZCBrZXl3b3JkOiBbJXNdXG5cbicgJSBtLmdyb3VwKCkpCisKKyAgICAgICAgICAgICAgICBpZiBmb3VuZF9lcnJvciA+PSAxIGFuZCBmb3VuZF9lcnJvciA8PSA1OgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IGxpbmUgKyAnXG4nCisgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Vycm9yICs9IDEKKworICAgICAgICAgICAgICAgIGlmIGZvdW5kX2Vycm9yID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJiLmZhdGFsKG1lc3NhZ2UpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9oYW5kbGVfaW50ZXJjZXB0X2ZhaWx1cmUoc2VsZiwgcmVnaXN0ZXJlZF9wa2dzKToKKyAgICAgICAgcnBtX3Bvc3RpbnN0c19kaXIgPSBzZWxmLmltYWdlX3Jvb3RmcyArIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcnBtLXBvc3RpbnN0cy8nKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIocnBtX3Bvc3RpbnN0c19kaXIpCisKKyAgICAgICAgIyBTYXZlIHRoZSBwYWNrYWdlIHBvc3RpbnN0YWxscyBpbiAvZXRjL3JwbS1wb3N0aW5zdHMKKyAgICAgICAgZm9yIHBrZyBpbiByZWdpc3RlcmVkX3BrZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIHNlbGYucG0uc2F2ZV9ycG1wb3N0aW5zdChwa2cpCisKKyAgICBkZWYgX2NsZWFudXAoc2VsZik6CisgICAgICAgICMgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgcG9zdHByb2Nlc3MgY29tbWFuZHMsIHJwbSBpcyBjYWxsZWQgc2V2ZXJhbAorICAgICAgICAjIHRpbWVzIHRvIGdldCB0aGUgZmlsZXMgaW5zdGFsbGVkLCBkZXBlbmRlbmNpZXMsIGV0Yy4gVGhpcyBjcmVhdGVzIHRoZQorICAgICAgICAjIF9fZGIuMDAqIChCZXJrZWxleSBEQiBmaWxlcyB0aGF0IGhvbGQgbG9ja3MsIHJwbSBzcGVjaWZpYyBlbnZpcm9ubWVudAorICAgICAgICAjIHNldHRpbmdzLCBldGMuKSwgdGhhdCBzaG91bGQgbm90IGdldCBpbnRvIHRoZSBmaW5hbCByb290ZnMKKyAgICAgICAgc2VsZi5wbS51bmxvY2tfcnBtX2RiKCkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGggKyAiL3RtcCIpIGFuZCBub3Qgb3MubGlzdGRpcihzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGggKyAiL3RtcCIpOgorICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5wbS5pbnN0YWxsX2Rpcl9wYXRoICsgIi90bXAiLCBUcnVlKQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCkgYW5kIG5vdCBvcy5saXN0ZGlyKHNlbGYucG0uaW5zdGFsbF9kaXJfcGF0aCk6CisgICAgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLnBtLmluc3RhbGxfZGlyX3BhdGgsIFRydWUpCisKK2NsYXNzIERwa2dPcGtnUm9vdGZzKFJvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihEcGtnT3BrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKworICAgIGRlZiBfZ2V0X3BrZ3NfcG9zdGluc3RzKHNlbGYsIHN0YXR1c19maWxlKToKKyAgICAgICAgZGVmIF9nZXRfcGtnX2RlcGVuZHNfbGlzdChwa2dfZGVwZW5kcyk6CisgICAgICAgICAgICBwa2dfZGVwZW5kc19saXN0ID0gW10KKyAgICAgICAgICAgICMgZmlsdGVyIHZlcnNpb24gcmVxdWlyZW1lbnRzIGxpa2UgbGliYyAoPj0gMS4xKQorICAgICAgICAgICAgZm9yIGRlcCBpbiBwa2dfZGVwZW5kcy5zcGxpdCgnLCAnKToKKyAgICAgICAgICAgICAgICBtX2RlcCA9IHJlLm1hdGNoKCJeKC4qKSBcKC4qXCkkIiwgZGVwKQorICAgICAgICAgICAgICAgIGlmIG1fZGVwOgorICAgICAgICAgICAgICAgICAgICBkZXAgPSBtX2RlcC5ncm91cCgxKQorICAgICAgICAgICAgICAgIHBrZ19kZXBlbmRzX2xpc3QuYXBwZW5kKGRlcCkKKworICAgICAgICAgICAgcmV0dXJuIHBrZ19kZXBlbmRzX2xpc3QKKworICAgICAgICBwa2dzID0ge30KKyAgICAgICAgcGtnX25hbWUgPSAiIgorICAgICAgICBwa2dfc3RhdHVzX21hdGNoID0gRmFsc2UKKyAgICAgICAgcGtnX2RlcGVuZHMgPSAiIgorCisgICAgICAgIHdpdGggb3BlbihzdGF0dXNfZmlsZSkgYXMgc3RhdHVzOgorICAgICAgICAgICAgZGF0YSA9IHN0YXR1cy5yZWFkKCkKKyAgICAgICAgICAgIHN0YXR1cy5jbG9zZSgpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBkYXRhLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIG1fcGtnID0gcmUubWF0Y2goIl5QYWNrYWdlOiAoLiopIiwgbGluZSkKKyAgICAgICAgICAgICAgICBtX3N0YXR1cyA9IHJlLm1hdGNoKCJeU3RhdHVzOi4qdW5wYWNrZWQiLCBsaW5lKQorICAgICAgICAgICAgICAgIG1fZGVwZW5kcyA9IHJlLm1hdGNoKCJeRGVwZW5kczogKC4qKSIsIGxpbmUpCisKKyAgICAgICAgICAgICAgICBpZiBtX3BrZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGtnX25hbWUgYW5kIHBrZ19zdGF0dXNfbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgICAgICBwa2dzW3BrZ19uYW1lXSA9IF9nZXRfcGtnX2RlcGVuZHNfbGlzdChwa2dfZGVwZW5kcykKKworICAgICAgICAgICAgICAgICAgICBwa2dfbmFtZSA9IG1fcGtnLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgICAgIHBrZ19zdGF0dXNfbWF0Y2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBwa2dfZGVwZW5kcyA9ICIiCisgICAgICAgICAgICAgICAgZWxpZiBtX3N0YXR1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX3N0YXR1c19tYXRjaCA9IFRydWUKKyAgICAgICAgICAgICAgICBlbGlmIG1fZGVwZW5kcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGtnX2RlcGVuZHMgPSBtX2RlcGVuZHMuZ3JvdXAoMSkKKworICAgICAgICAjIHJlbW92ZSBwYWNrYWdlIGRlcGVuZGVuY2llcyBub3QgaW4gcG9zdGluc3RzCisgICAgICAgIHBrZ19uYW1lcyA9IHBrZ3Mua2V5cygpCisgICAgICAgIGZvciBwa2dfbmFtZSBpbiBwa2dfbmFtZXM6CisgICAgICAgICAgICBkZXBzID0gcGtnc1twa2dfbmFtZV1bOl0KKworICAgICAgICAgICAgZm9yIGQgaW4gZGVwczoKKyAgICAgICAgICAgICAgICBpZiBkIG5vdCBpbiBwa2dfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHBrZ3NbcGtnX25hbWVdLnJlbW92ZShkKQorCisgICAgICAgIHJldHVybiBwa2dzCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0c19jb21tb24oc2VsZiwgc3RhdHVzX2ZpbGUpOgorICAgICAgICBkZWYgX2RlcF9yZXNvbHZlKGdyYXBoLCBub2RlLCByZXNvbHZlZCwgc2Vlbik6CisgICAgICAgICAgICBzZWVuLmFwcGVuZChub2RlKQorCisgICAgICAgICAgICBmb3IgZWRnZSBpbiBncmFwaFtub2RlXToKKyAgICAgICAgICAgICAgICBpZiBlZGdlIG5vdCBpbiByZXNvbHZlZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZWRnZSBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJQYWNrYWdlcyAlcyBhbmQgJXMgaGF2ZSAiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgY2lyY3VsYXIgZGVwZW5kZW5jeSBpbiBwb3N0aW5zdHMgc2NyaXB0cy4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobm9kZSwgZWRnZSkpCisgICAgICAgICAgICAgICAgICAgIF9kZXBfcmVzb2x2ZShncmFwaCwgZWRnZSwgcmVzb2x2ZWQsIHNlZW4pCisKKyAgICAgICAgICAgIHJlc29sdmVkLmFwcGVuZChub2RlKQorCisgICAgICAgIHBrZ19saXN0ID0gW10KKworICAgICAgICBwa2dzID0gc2VsZi5fZ2V0X3BrZ3NfcG9zdGluc3RzKHN0YXR1c19maWxlKQorICAgICAgICBpZiBwa2dzOgorICAgICAgICAgICAgcm9vdCA9ICJfX3BhY2thZ2Vncm91cF9wb3N0aW5zdF9fIgorICAgICAgICAgICAgcGtnc1tyb290XSA9IHBrZ3Mua2V5cygpCisgICAgICAgICAgICBfZGVwX3Jlc29sdmUocGtncywgcm9vdCwgcGtnX2xpc3QsIFtdKQorICAgICAgICAgICAgcGtnX2xpc3QucmVtb3ZlKHJvb3QpCisKKyAgICAgICAgaWYgbGVuKHBrZ19saXN0KSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gcGtnX2xpc3QKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHNfY29tbW9uKHNlbGYsIGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpOgorICAgICAgICBudW0gPSAwCisgICAgICAgIGZvciBwIGluIHNlbGYuX2dldF9kZWxheWVkX3Bvc3RpbnN0cygpOgorICAgICAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGRzdF9wb3N0aW5zdF9kaXIpCisKKyAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzcmNfcG9zdGluc3RfZGlyLCBwICsgIi5wb3N0aW5zdCIpKToKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShvcy5wYXRoLmpvaW4oc3JjX3Bvc3RpbnN0X2RpciwgcCArICIucG9zdGluc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZHN0X3Bvc3RpbnN0X2RpciwgIiUwM2QtJXMiICUgKG51bSwgcCkpKQorCisgICAgICAgICAgICBudW0gKz0gMQorCitjbGFzcyBEcGtnUm9vdGZzKERwa2dPcGtnUm9vdGZzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyKToKKyAgICAgICAgc3VwZXIoRHBrZ1Jvb3Rmcywgc2VsZikuX19pbml0X18oZCkKKyAgICAgICAgc2VsZi5sb2dfY2hlY2tfcmVnZXggPSAnXkU6JworCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmltYWdlX3Jvb3RmcywgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKHNlbGYuZC5nZXRWYXIoJ01VTFRJTElCX1RFTVBfUk9PVEZTJywgVHJ1ZSksIFRydWUpCisgICAgICAgIHNlbGYubWFuaWZlc3QgPSBEcGtnTWFuaWZlc3QoZCwgbWFuaWZlc3RfZGlyKQorICAgICAgICBzZWxmLnBtID0gRHBrZ1BNKGQsIGQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGQuZ2V0VmFyKCdEUEtHX0FSQ0gnLCBUcnVlKSkKKworCisgICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IHNlbGYubWFuaWZlc3QucGFyc2VfaW5pdGlhbF9tYW5pZmVzdCgpCisgICAgICAgIGRlYl9wcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignREVCX1BSRVBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorICAgICAgICBkZWJfcG9zdF9wcm9jZXNzX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdERUJfUE9TVFBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorCisgICAgICAgIGFsdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30vdmFyL2xpYi9kcGtnL2FsdGVybmF0aXZlcyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihhbHRfZGlyKQorCisgICAgICAgICMgdXBkYXRlIFBNIGluZGV4IGZpbGVzCisgICAgICAgIHNlbGYucG0ud3JpdGVfaW5kZXgoKQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIGRlYl9wcmVfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBmb3IgcGtnX3R5cGUgaW4gc2VsZi5pbnN0YWxsX29yZGVyOgorICAgICAgICAgICAgaWYgcGtnX3R5cGUgaW4gcGtnc190b19pbnN0YWxsOgorICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvdmFyL2xpYi9kcGtnJ10pCisKKyAgICAgICAgc2VsZi5wbS5maXhfYnJva2VuX2RlcGVuZGVuY2llcygpCisKKyAgICAgICAgc2VsZi5wbS5tYXJrX3BhY2thZ2VzKCJpbnN0YWxsZWQiKQorCisgICAgICAgIHNlbGYucG0ucnVuX3ByZV9wb3N0X2luc3RhbGxzKCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBkZWJfcG9zdF9wcm9jZXNzX2NtZHMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9kZXBlbmRzX2xpc3QoKToKKyAgICAgICAgcmV0dXJuIFsnREVQTE9ZX0RJUl9ERUInLCAnREVCX1NES19BUkNIJywgJ0FQVENPTkZfVEFSR0VUJywgJ0FQVF9BUkdTJywgJ0RQS0dfQVJDSCcsICdERUJfUFJFUFJPQ0VTU19DT01NQU5EUycsICdERUJfUE9TVFBST0NFU1NfQ09NTUFORFMnXQorCisgICAgZGVmIF9nZXRfZGVsYXllZF9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIHN0YXR1c19maWxlID0gc2VsZi5pbWFnZV9yb290ZnMgKyAiL3Zhci9saWIvZHBrZy9zdGF0dXMiCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRfZGVsYXllZF9wb3N0aW5zdHNfY29tbW9uKHN0YXR1c19maWxlKQorCisgICAgZGVmIF9zYXZlX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgZHN0X3Bvc3RpbnN0X2RpciA9IHNlbGYuZC5leHBhbmQoIiR7SU1BR0VfUk9PVEZTfSR7c3lzY29uZmRpcn0vZGViLXBvc3RpbnN0cyIpCisgICAgICAgIHNyY19wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30vdmFyL2xpYi9kcGtnL2luZm8iKQorICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9wb3N0aW5zdHNfY29tbW9uKGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpCisKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCByZWdpc3RlcmVkX3BrZ3MpOgorICAgICAgICBzZWxmLnBtLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT3BrZ1Jvb3RmcyhEcGtnT3BrZ1Jvb3Rmcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcik6CisgICAgICAgIHN1cGVyKE9wa2dSb290ZnMsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIHNlbGYubG9nX2NoZWNrX3JlZ2V4ID0gJyhleGl0IDF8Q29sbGVjdGVkIGVycm9ycyknCisKKyAgICAgICAgc2VsZi5tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBtYW5pZmVzdF9kaXIpCisgICAgICAgIHNlbGYub3BrZ19jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfVEFSR0VUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wa2dfYXJjaHMgPSBzZWxmLmQuZ2V0VmFyKCJBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIUyIsIFRydWUpCisKKyAgICAgICAgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPSBzZWxmLmQuZ2V0VmFyKCdJTkNfSVBLX0lNQUdFX0dFTicsIFRydWUpIG9yICIiCisgICAgICAgIGlmIHNlbGYuX3JlbW92ZV9vbGRfcm9vdGZzKCk6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5pbWFnZV9yb290ZnMsIFRydWUpCisgICAgICAgICAgICBzZWxmLnBtID0gT3BrZ1BNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dfYXJjaHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnBtID0gT3BrZ1BNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1hZ2Vfcm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wa2dfY29uZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wa2dfYXJjaHMpCisgICAgICAgICAgICBzZWxmLnBtLnJlY292ZXJfcGFja2FnaW5nX2RhdGEoKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShzZWxmLmQuZ2V0VmFyKCdNVUxUSUxJQl9URU1QX1JPT1RGUycsIFRydWUpLCBUcnVlKQorCisgICAgZGVmIF9wcmVsaW5rX2ZpbGUoc2VsZiwgcm9vdF9kaXIsIGZpbGVuYW1lKToKKyAgICAgICAgYmIubm90ZSgncHJlbGluayAlcyBpbiAlcycgJSAoZmlsZW5hbWUsIHJvb3RfZGlyKSkKKyAgICAgICAgcHJlbGlua19jZmcgPSBvZS5wYXRoLmpvaW4ocm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mJykpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwcmVsaW5rX2NmZyk6CisgICAgICAgICAgICBzaHV0aWwuY29weShzZWxmLmQuZXhwYW5kKCcke1NUQUdJTkdfRElSX05BVElWRX0ke3N5c2NvbmZkaXJfbmF0aXZlfS9wcmVsaW5rLmNvbmYnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWxpbmtfY2ZnKQorCisgICAgICAgIGNtZF9wcmVsaW5rID0gc2VsZi5kLmV4cGFuZCgnJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtzYmluZGlyX25hdGl2ZX0vcHJlbGluaycpCisgICAgICAgIHNlbGYuX2V4ZWNfc2hlbGxfY21kKFtjbWRfcHJlbGluaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXJvb3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWFtUicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLU4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5leHBhbmQoJyR7c3lzY29uZmRpcn0vcHJlbGluay5jb25mJyldKQorCisgICAgJycnCisgICAgQ29tcGFyZSB0d28gZmlsZXMgd2l0aCB0aGUgc2FtZSBrZXkgdHdpY2UgdG8gc2VlIGlmIHRoZXkgYXJlIGVxdWFsLgorICAgIElmIHRoZXkgYXJlIG5vdCBlcXVhbCwgaXQgbWVhbnMgdGhleSBhcmUgZHVwbGljYXRlZCBhbmQgY29tZSBmcm9tCisgICAgZGlmZmVyZW50IHBhY2thZ2VzLgorICAgIDFzdDogQ29tYXByZSB0aGVtIGRpcmVjdGx5OworICAgIDJuZDogV2hpbGUgaW5jcmVtZW50YWwgaW1hZ2UgY3JlYXRpb24gaXMgZW5hYmxlZCwgb25lIG9mIHRoZQorICAgICAgICAgZmlsZXMgY291bGQgYmUgcHJvYmFseSBwcmVsaW5rZWQgaW4gdGhlIHByZXZpb3VzIGltYWdlCisgICAgICAgICBjcmVhdGlvbiBhbmQgdGhlIGZpbGUgaGFzIGJlZW4gY2hhbmdlZCwgc28gd2UgbmVlZCB0bworICAgICAgICAgcHJlbGluayB0aGUgb3RoZXIgb25lIGFuZCBjb21wYXJlIHRoZW0uCisgICAgJycnCisgICAgZGVmIF9maWxlX2VxdWFsKHNlbGYsIGtleSwgZjEsIGYyKToKKworICAgICAgICAjIEJvdGggb2YgdGhlbSBhcmUgbm90IHByZWxpbmtlZAorICAgICAgICBpZiBmaWxlY21wLmNtcChmMSwgZjIpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBpZiBzZWxmLmltYWdlX3Jvb3RmcyBub3QgaW4gZjE6CisgICAgICAgICAgICBzZWxmLl9wcmVsaW5rX2ZpbGUoZjEucmVwbGFjZShrZXksICcnKSwgZjEpCisKKyAgICAgICAgaWYgc2VsZi5pbWFnZV9yb290ZnMgbm90IGluIGYyOgorICAgICAgICAgICAgc2VsZi5fcHJlbGlua19maWxlKGYyLnJlcGxhY2Uoa2V5LCAnJyksIGYyKQorCisgICAgICAgICMgQm90aCBvZiB0aGVtIGFyZSBwcmVsaW5rZWQKKyAgICAgICAgaWYgZmlsZWNtcC5jbXAoZjEsIGYyKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBOb3QgZXF1YWwKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAiIiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdhcyByZXVzZWQgZnJvbSB0aGUgb2xkIGltcGxlbWVudGF0aW9uLgorICAgIFNlZSBjb21taXQ6ICJpbWFnZS5iYmNsYXNzOiBBZGRlZCB2YXJpYWJsZXMgZm9yIG11bHRpbGliIHN1cHBvcnQuIiBieQorICAgIExpYW5oYW8gTHUuCisgICAgIiIiCisgICAgZGVmIF9tdWx0aWxpYl9zYW5pdHlfdGVzdChzZWxmLCBkaXJzKToKKworICAgICAgICBhbGxvd19yZXBsYWNlID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJSRV9BTExPV19SRVAiLCBUcnVlKQorICAgICAgICBpZiBhbGxvd19yZXBsYWNlIGlzIE5vbmU6CisgICAgICAgICAgICBhbGxvd19yZXBsYWNlID0gIiIKKworICAgICAgICBhbGxvd19yZXAgPSByZS5jb21waWxlKHJlLnN1YigiXHwkIiwgIiIsIGFsbG93X3JlcGxhY2UpKQorICAgICAgICBlcnJvcl9wcm9tcHQgPSAiTXVsdGlsaWIgY2hlY2sgZXJyb3I6IgorCisgICAgICAgIGZpbGVzID0ge30KKyAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgZm9yIHJvb3QsIHN1YmZvbGRlcnMsIHN1YmZpbGVzIGluIG9zLndhbGsoZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBzdWJmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9IG9zLnBhdGguam9pbihyb290LCBmaWxlKQorICAgICAgICAgICAgICAgICAgICBrZXkgPSBzdHIob3MucGF0aC5qb2luKCIvIiwgb3MucGF0aC5yZWxwYXRoKGl0ZW0sIGRpcikpKQorCisgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2sgd2hldGhlciB0aGUgZmlsZSBpcyBhbGxvdyB0byByZXBsYWNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbGxvd19yZXAubWF0Y2goa2V5KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZXNba2V5XSkgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmV4aXN0cyhpdGVtKSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9maWxlX2VxdWFsKGtleSwgZmlsZXNba2V5XSwgaXRlbSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIuZmF0YWwoIiVzIGR1cGxpY2F0ZSBmaWxlcyAlcyAlcyBpcyBub3QgdGhlIHNhbWVcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3JfcHJvbXB0LCBpdGVtLCBmaWxlc1trZXldKSkKKworICAgICAgICAgICAgICAgICAgICAjcGFzcyB0aGUgY2hlY2ssIGFkZCB0byBsaXN0CisgICAgICAgICAgICAgICAgICAgIGlmIHZhbGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IGl0ZW0KKworICAgIGRlZiBfbXVsdGlsaWJfdGVzdF9pbnN0YWxsKHNlbGYsIHBrZ3MpOgorICAgICAgICBtbF90ZW1wID0gc2VsZi5kLmdldFZhcigiTVVMVElMSUJfVEVNUF9ST09URlMiLCBUcnVlKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIobWxfdGVtcCkKKworICAgICAgICBkaXJzID0gW3NlbGYuaW1hZ2Vfcm9vdGZzXQorCisgICAgICAgIGZvciB2YXJpYW50IGluIHNlbGYuZC5nZXRWYXIoIk1VTFRJTElCX1ZBUklBTlRTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgICAgIG1sX3RhcmdldF9yb290ZnMgPSBvcy5wYXRoLmpvaW4obWxfdGVtcCwgdmFyaWFudCkKKworICAgICAgICAgICAgYmIudXRpbHMucmVtb3ZlKG1sX3RhcmdldF9yb290ZnMsIFRydWUpCisKKyAgICAgICAgICAgIG1sX29wa2dfY29uZiA9IG9zLnBhdGguam9pbihtbF90ZW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgKyAiLSIgKyBvcy5wYXRoLmJhc2VuYW1lKHNlbGYub3BrZ19jb25mKSkKKworICAgICAgICAgICAgbWxfcG0gPSBPcGtnUE0oc2VsZi5kLCBtbF90YXJnZXRfcm9vdGZzLCBtbF9vcGtnX2NvbmYsIHNlbGYucGtnX2FyY2hzKQorCisgICAgICAgICAgICBtbF9wbS51cGRhdGUoKQorICAgICAgICAgICAgbWxfcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgICAgICBkaXJzLmFwcGVuZChtbF90YXJnZXRfcm9vdGZzKQorCisgICAgICAgIHNlbGYuX211bHRpbGliX3Nhbml0eV90ZXN0KGRpcnMpCisKKyAgICAnJycKKyAgICBXaGlsZSBpcGsgaW5jcmVtZW50YWwgaW1hZ2UgZ2VuZXJhdGlvbiBpcyBlbmFibGVkLCBpdCB3aWxsIHJlbW92ZSB0aGUKKyAgICB1bm5lZWRlZCBwa2dzIGJ5IGNvbXBhcmluZyB0aGUgb2xkIGZ1bGwgbWFuaWZlc3QgaW4gcHJldmlvdXMgZXhpc3RpbmcKKyAgICBpbWFnZSBhbmQgdGhlIG5ldyBmdWxsIG1hbmlmZXN0IGluIHRoZSBjdXJyZW50IGltYWdlLgorICAgICcnJworICAgIGRlZiBfcmVtb3ZlX2V4dHJhX3BhY2thZ2VzKHNlbGYsIHBrZ3NfaW5pdGlhbF9pbnN0YWxsKToKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gPT0gIjEiOgorICAgICAgICAgICAgIyBQYXJzZSBmdWxsIG1hbmlmZXN0IGluIHByZXZpb3VzIGV4aXN0aW5nIGltYWdlIGNyZWF0aW9uIHNlc3Npb24KKyAgICAgICAgICAgIG9sZF9mdWxsX21hbmlmZXN0ID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9mdWxsX21hbmlmZXN0KCkKKworICAgICAgICAgICAgIyBDcmVhdGUgZnVsbCBtYW5pZmVzdCBmb3IgdGhlIGN1cnJlbnQgaW1hZ2Ugc2Vzc2lvbiwgdGhlIG9sZCBvbmUKKyAgICAgICAgICAgICMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbmV3IG9uZS4KKyAgICAgICAgICAgIHNlbGYubWFuaWZlc3QuY3JlYXRlX2Z1bGwoc2VsZi5wbSkKKworICAgICAgICAgICAgIyBQYXJzZSBmdWxsIG1hbmlmZXN0IGluIGN1cnJlbnQgaW1hZ2UgY3JlYXRpb24gc2Vzc2lvbgorICAgICAgICAgICAgbmV3X2Z1bGxfbWFuaWZlc3QgPSBzZWxmLm1hbmlmZXN0LnBhcnNlX2Z1bGxfbWFuaWZlc3QoKQorCisgICAgICAgICAgICBwa2dfdG9fcmVtb3ZlID0gbGlzdCgpCisgICAgICAgICAgICBmb3IgcGtnIGluIG9sZF9mdWxsX21hbmlmZXN0OgorICAgICAgICAgICAgICAgIGlmIHBrZyBub3QgaW4gbmV3X2Z1bGxfbWFuaWZlc3Q6CisgICAgICAgICAgICAgICAgICAgIHBrZ190b19yZW1vdmUuYXBwZW5kKHBrZykKKworICAgICAgICAgICAgaWYgcGtnX3RvX3JlbW92ZSAhPSBbXToKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCdkZWNyZW1lbnRhbCByZW1vdmVkOiAlcycgJSAnICcuam9pbihwa2dfdG9fcmVtb3ZlKSkKKyAgICAgICAgICAgICAgICBzZWxmLnBtLnJlbW92ZShwa2dfdG9fcmVtb3ZlKQorCisgICAgJycnCisgICAgQ29tcGFyZSB3aXRoIHByZXZpb3VzIGV4aXN0aW5nIGltYWdlIGNyZWF0aW9uLCBpZiBzb21lIGNvbmRpdGlvbnMKKyAgICB0cmlnZ2VyZWQsIHRoZSBwcmV2aW91cyBvbGQgaW1hZ2Ugc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgVGhlIGNvbmRpdGlvbnMgaW5jbHVkZSBhbnkgb2YgJ1BBQ0tBR0VfRVhDTFVERSwgTk9fUkVDT01NRU5EQVRJT05TCisgICAgYW5kIEJBRF9SRUNPTU1FTkRBVElPTlMnIGhhcyBiZWVuIGNoYW5nZWQuCisgICAgJycnCisgICAgZGVmIF9yZW1vdmVfb2xkX3Jvb3RmcyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbmNfb3BrZ19pbWFnZV9nZW4gIT0gIjEiOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB2YXJzX2xpc3RfZmlsZSA9IHNlbGYuZC5leHBhbmQoJyR7VH0vdmFyc19saXN0JykKKworICAgICAgICBvbGRfdmFyc19saXN0ID0gIiIKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHModmFyc19saXN0X2ZpbGUpOgorICAgICAgICAgICAgb2xkX3ZhcnNfbGlzdCA9IG9wZW4odmFyc19saXN0X2ZpbGUsICdyKycpLnJlYWQoKQorCisgICAgICAgIG5ld192YXJzX2xpc3QgPSAnJXM6JXM6JXNcbicgJSBcCisgICAgICAgICAgICAgICAgKChzZWxmLmQuZ2V0VmFyKCdCQURfUkVDT01NRU5EQVRJT05TJywgVHJ1ZSkgb3IgJycpLnN0cmlwKCksCisgICAgICAgICAgICAgICAgIChzZWxmLmQuZ2V0VmFyKCdOT19SRUNPTU1FTkRBVElPTlMnLCBUcnVlKSBvciAnJykuc3RyaXAoKSwKKyAgICAgICAgICAgICAgICAgKHNlbGYuZC5nZXRWYXIoJ1BBQ0tBR0VfRVhDTFVERScsIFRydWUpIG9yICcnKS5zdHJpcCgpKQorICAgICAgICBvcGVuKHZhcnNfbGlzdF9maWxlLCAndysnKS53cml0ZShuZXdfdmFyc19saXN0KQorCisgICAgICAgIGlmIG9sZF92YXJzX2xpc3QgIT0gbmV3X3ZhcnNfbGlzdDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICAgICAgcGtnc190b19pbnN0YWxsID0gc2VsZi5tYW5pZmVzdC5wYXJzZV9pbml0aWFsX21hbmlmZXN0KCkKKyAgICAgICAgb3BrZ19wcmVfcHJvY2Vzc19jbWRzID0gc2VsZi5kLmdldFZhcignT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgVHJ1ZSkKKyAgICAgICAgb3BrZ19wb3N0X3Byb2Nlc3NfY21kcyA9IHNlbGYuZC5nZXRWYXIoJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCBUcnVlKQorICAgICAgICByb290ZnNfcG9zdF9pbnN0YWxsX2NtZHMgPSBzZWxmLmQuZ2V0VmFyKCdST09URlNfUE9TVElOU1RBTExfQ09NTUFORCcsIFRydWUpCisKKyAgICAgICAgIyB1cGRhdGUgUE0gaW5kZXggZmlsZXMsIHVubGVzcyB1c2VycyBwcm92aWRlIHRoZWlyIG93biBmZWVkcworICAgICAgICBpZiAoc2VsZi5kLmdldFZhcignQlVJTERfSU1BR0VTX0ZST01fRkVFRFMnLCBUcnVlKSBvciAiIikgIT0gIjEiOgorICAgICAgICAgICAgc2VsZi5wbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgb3BrZ19wcmVfcHJvY2Vzc19jbWRzKQorCisgICAgICAgIHNlbGYucG0udXBkYXRlKCkKKworICAgICAgICBzZWxmLnBtLmhhbmRsZV9iYWRfcmVjb21tZW5kYXRpb25zKCkKKworICAgICAgICBpZiBzZWxmLmluY19vcGtnX2ltYWdlX2dlbiA9PSAiMSI6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfZXh0cmFfcGFja2FnZXMocGtnc190b19pbnN0YWxsKQorCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBzZWxmLmluc3RhbGxfb3JkZXI6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICAgICAgIyBGb3IgbXVsdGlsaWIsIHdlIHBlcmZvcm0gYSBzYW5pdHkgdGVzdCBiZWZvcmUgZmluYWwgaW5zdGFsbAorICAgICAgICAgICAgICAgICMgSWYgc2FuaXR5IHRlc3QgZmFpbHMsIGl0IHdpbGwgYXV0b21hdGljYWxseSBkbyBhIGJiLmZhdGFsKCkKKyAgICAgICAgICAgICAgICAjIGFuZCB0aGUgaW5zdGFsbGF0aW9uIHdpbGwgc3RvcAorICAgICAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX01VTFRJTElCOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdWx0aWxpYl90ZXN0X2luc3RhbGwocGtnc190b19pbnN0YWxsW3BrZ190eXBlXSkKKworICAgICAgICAgICAgICAgIHNlbGYucG0uaW5zdGFsbChwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRmFsc2UsIFRydWVdW3BrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWV0pCisKKyAgICAgICAgc2VsZi5wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoKQorCisgICAgICAgIHNlbGYuX3NldHVwX2RiZ19yb290ZnMoWycvdmFyL2xpYi9vcGtnJ10pCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgb3BrZ19wb3N0X3Byb2Nlc3NfY21kcykKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgcm9vdGZzX3Bvc3RfaW5zdGFsbF9jbWRzKQorCisgICAgICAgIGlmIHNlbGYuaW5jX29wa2dfaW1hZ2VfZ2VuID09ICIxIjoKKyAgICAgICAgICAgIHNlbGYucG0uYmFja3VwX3BhY2thZ2luZ19kYXRhKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2RlcGVuZHNfbGlzdCgpOgorICAgICAgICByZXR1cm4gWydJUEtHQ09ORl9TREsnLCAnSVBLX0ZFRURfVVJJUycsICdERVBMT1lfRElSX0lQSycsICdJUEtHQ09ORl9UQVJHRVQnLCAnSU5DX0lQS19JTUFHRV9HRU4nLCAnT1BLR19BUkdTJywgJ09QS0dMSUJESVInLCAnT1BLR19QUkVQUk9DRVNTX0NPTU1BTkRTJywgJ09QS0dfUE9TVFBST0NFU1NfQ09NTUFORFMnLCAnT1BLR0xJQkRJUiddCisKKyAgICBkZWYgX2dldF9kZWxheWVkX3Bvc3RpbnN0cyhzZWxmKToKKyAgICAgICAgc3RhdHVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5pbWFnZV9yb290ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ09QS0dMSUJESVInLCBUcnVlKS5zdHJpcCgnLycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BrZyIsICJzdGF0dXMiKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2RlbGF5ZWRfcG9zdGluc3RzX2NvbW1vbihzdGF0dXNfZmlsZSkKKworICAgIGRlZiBfc2F2ZV9wb3N0aW5zdHMoc2VsZik6CisgICAgICAgIGRzdF9wb3N0aW5zdF9kaXIgPSBzZWxmLmQuZXhwYW5kKCIke0lNQUdFX1JPT1RGU30ke3N5c2NvbmZkaXJ9L2lway1wb3N0aW5zdHMiKQorICAgICAgICBzcmNfcG9zdGluc3RfZGlyID0gc2VsZi5kLmV4cGFuZCgiJHtJTUFHRV9ST09URlN9JHtPUEtHTElCRElSfS9vcGtnL2luZm8iKQorICAgICAgICByZXR1cm4gc2VsZi5fc2F2ZV9wb3N0aW5zdHNfY29tbW9uKGRzdF9wb3N0aW5zdF9kaXIsIHNyY19wb3N0aW5zdF9kaXIpCisKKyAgICBkZWYgX2hhbmRsZV9pbnRlcmNlcHRfZmFpbHVyZShzZWxmLCByZWdpc3RlcmVkX3BrZ3MpOgorICAgICAgICBzZWxmLnBtLm1hcmtfcGFja2FnZXMoInVucGFja2VkIiwgcmVnaXN0ZXJlZF9wa2dzLnNwbGl0KCkpCisKKyAgICBkZWYgX2xvZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9nX2NoZWNrX3dhcm4oKQorICAgICAgICBzZWxmLl9sb2dfY2hlY2tfZXJyb3IoKQorCisgICAgZGVmIF9jbGVhbnVwKHNlbGYpOgorICAgICAgICBwYXNzCisKK2RlZiBnZXRfY2xhc3NfZm9yX3R5cGUoaW1ndHlwZSk6CisgICAgcmV0dXJuIHsicnBtIjogUnBtUm9vdGZzLAorICAgICAgICAgICAgImlwayI6IE9wa2dSb290ZnMsCisgICAgICAgICAgICAiZGViIjogRHBrZ1Jvb3Rmc31baW1ndHlwZV0KKworZGVmIHZhcmlhYmxlX2RlcGVuZHMoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGltZ190eXBlID0gZC5nZXRWYXIoJ0lNQUdFX1BLR1RZUEUnLCBUcnVlKQorICAgIGNscyA9IGdldF9jbGFzc19mb3JfdHlwZShpbWdfdHlwZSkKKyAgICByZXR1cm4gY2xzLl9kZXBlbmRzX2xpc3QoKQorCitkZWYgY3JlYXRlX3Jvb3RmcyhkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgZW52X2JrcCA9IG9zLmVudmlyb24uY29weSgpCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgUnBtUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBPcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICBEcGtnUm9vdGZzKGQsIG1hbmlmZXN0X2RpcikuY3JlYXRlKCkKKworICAgIG9zLmVudmlyb24uY2xlYXIoKQorICAgIG9zLmVudmlyb24udXBkYXRlKGVudl9ia3ApCisKKworZGVmIGltYWdlX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIGZvcm1hdD1Ob25lLCByb290ZnNfZGlyPU5vbmUpOgorICAgIGlmIG5vdCByb290ZnNfZGlyOgorICAgICAgICByb290ZnNfZGlyID0gZC5nZXRWYXIoJ0lNQUdFX1JPT1RGUycsIFRydWUpCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgcmV0dXJuIFJwbVBrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImlwayI6CisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgZC5nZXRWYXIoIklQS0dDT05GX1RBUkdFVCIsIFRydWUpKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJkZWIiOgorICAgICAgICByZXR1cm4gRHBrZ1BrZ3NMaXN0KGQsIHJvb3Rmc19kaXIpLmxpc3QoZm9ybWF0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgICIiIgorICAgIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJ1biB0aGlzIGFzIGEgc3RhbmRhbG9uZSBzY3JpcHQsIGZyb20gb3V0c2lkZSBiaXRiYWtlCisgICAgZW52aXJvbm1lbnQuCisgICAgIiIiCisgICAgIiIiCisgICAgVEJECisgICAgIiIiCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS9zZGsucHkgYi9tZXRhL2xpYi9vZS9zZGsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkYTBmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Nkay5weQpAQCAtMCwwICsxLDM0OSBAQAorZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIG9lLnV0aWxzIGltcG9ydCBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3MKK2Zyb20gb2UubWFuaWZlc3QgaW1wb3J0ICoKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCAqCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBnbG9iCisKKworY2xhc3MgU2RrKG9iamVjdCk6CisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYuc2RrX291dHB1dCA9IHNlbGYuZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKQorICAgICAgICBzZWxmLnNka19uYXRpdmVfcGF0aCA9IHNlbGYuZC5nZXRWYXIoJ1NES1BBVEhOQVRJVkUnLCBUcnVlKS5zdHJpcCgnLycpCisgICAgICAgIHNlbGYudGFyZ2V0X3BhdGggPSBzZWxmLmQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkuc3RyaXAoJy8nKQorICAgICAgICBzZWxmLnN5c2NvbmZkaXIgPSBzZWxmLmQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkuc3RyaXAoJy8nKQorCisgICAgICAgIHNlbGYuc2RrX3RhcmdldF9zeXNyb290ID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi50YXJnZXRfcGF0aCkKKyAgICAgICAgc2VsZi5zZGtfaG9zdF9zeXNyb290ID0gc2VsZi5zZGtfb3V0cHV0CisKKyAgICAgICAgaWYgbWFuaWZlc3RfZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLm1hbmlmZXN0X2RpciA9IHNlbGYuZC5nZXRWYXIoIlNES19ESVIiLCBUcnVlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5tYW5pZmVzdF9kaXIgPSBtYW5pZmVzdF9kaXIKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoc2VsZi5zZGtfb3V0cHV0LCBUcnVlKQorCisgICAgICAgIHNlbGYuaW5zdGFsbF9vcmRlciA9IE1hbmlmZXN0LklOU1RBTExfT1JERVIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcG9wdWxhdGUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYuc2RrX291dHB1dCkKKworICAgICAgICAjIGNhbGwgYmFja2VuZCBkZXBlbmRlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgc2VsZi5fcG9wdWxhdGUoKQorCisgICAgICAgICMgRG9uJ3Qgc2hpcCBhbnkgbGliR0wgaW4gdGhlIFNESworICAgICAgICBiYi51dGlscy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignbGliZGlyX25hdGl2ZXNkaycsIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYkdMKiIpKQorCisgICAgICAgICMgRml4IG9yIHJlbW92ZSBicm9rZW4gLmxhIGZpbGVzCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdsaWJkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKi5sYSIpKQorCisgICAgICAgICMgTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0cyBmaWxlc3lzdGVtCisgICAgICAgIGxpbmtfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zeXNjb25mZGlyLCAibGQuc28uY2FjaGUiKQorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIob3MucGF0aC5kaXJuYW1lKGxpbmtfbmFtZSkpCisgICAgICAgIG9zLnN5bWxpbmsoIi9ldGMvbGQuc28uY2FjaGUiLCBsaW5rX25hbWUpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcignU0RLX1BPU1RQUk9DRVNTX0NPTU1BTkQnLCBUcnVlKSkKKworCitjbGFzcyBScG1TZGsoU2RrKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgICAgICBzdXBlcihScG1TZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9tYW5pZmVzdCA9IFJwbU1hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX1RBUkdFVCkKKyAgICAgICAgc2VsZi5ob3N0X21hbmlmZXN0ID0gUnBtTWFuaWZlc3QoZCwgc2VsZi5tYW5pZmVzdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgdGFyZ2V0X3Byb3ZpZGVuYW1lID0gWycvYmluL3NoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvYmluL2Jhc2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL2VudicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9iaW4vcGVybCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGtnY29uZmlnJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtID0gUnBtUE0oZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNka190YXJnZXRfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Byb3ZpZGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNka19wcm92aWRlbmFtZSA9IFsnL2Jpbi9zaCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnL2Jpbi9iYXNoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2Jpbi9lbnYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvYmluL3BlcmwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZ2NvbmZpZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliR0wuc28oKSg2NGJpdCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpYkdMLnNvJworICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IFJwbVBNKGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignU0RLX1ZFTkRPUicsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNka19wcm92aWRlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNES19QQUNLQUdFX0FSQ0hTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNES19PUyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIHBtLmNyZWF0ZV9jb25maWdzKCkKKyAgICAgICAgcG0ud3JpdGVfaW5kZXgoKQorICAgICAgICBwbS5kdW1wX2FsbF9hdmFpbGFibGVfcGtncygpCisgICAgICAgIHBtLnVwZGF0ZSgpCisKKyAgICAgICAgcGtncyA9IFtdCisgICAgICAgIHBrZ3NfYXR0ZW1wdCA9IFtdCisgICAgICAgIGZvciBwa2dfdHlwZSBpbiBwa2dzX3RvX2luc3RhbGw6CisgICAgICAgICAgICBpZiBwa2dfdHlwZSA9PSBNYW5pZmVzdC5QS0dfVFlQRV9BVFRFTVBUX09OTFk6CisgICAgICAgICAgICAgICAgcGtnc19hdHRlbXB0ICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncyArPSBwa2dzX3RvX2luc3RhbGxbcGtnX3R5cGVdCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzKQorCisgICAgICAgIHBtLmluc3RhbGwocGtnc19hdHRlbXB0LCBUcnVlKQorCisgICAgZGVmIF9wb3B1bGF0ZShzZWxmKToKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBUQVJHRVQgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYudGFyZ2V0X3BtLCBzZWxmLnRhcmdldF9tYW5pZmVzdCkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5pbnN0YWxsX2NvbXBsZW1lbnRhcnkoc2VsZi5kLmdldFZhcignU0RLSU1BR0VfSU5TVEFMTF9DT01QTEVNRU5UQVJZJywgVHJ1ZSkpCisKKyAgICAgICAgZXhlY3V0ZV9wcmVfcG9zdF9wcm9jZXNzKHNlbGYuZCwgc2VsZi5kLmdldFZhcigiUE9QVUxBVEVfU0RLX1BPU1RfVEFSR0VUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLnRhcmdldF9wbS5yZW1vdmVfcGFja2FnaW5nX2RhdGEoKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICBzZWxmLmhvc3RfcG0ucmVtb3ZlX3BhY2thZ2luZ19kYXRhKCkKKworICAgICAgICAjIE1vdmUgaG9zdCBSUE0gbGlicmFyeSBkYXRhCisgICAgICAgIG5hdGl2ZV9ycG1fc3RhdGVfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZGtfbmF0aXZlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJycG0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKG5hdGl2ZV9ycG1fc3RhdGVfZGlyKQorICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGliIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnBtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiIpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLm1vdmVmaWxlKGYsIG5hdGl2ZV9ycG1fc3RhdGVfZGlyKQorCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiksIFRydWUpCisKKyAgICAgICAgIyBNb3ZlIGhvc3Qgc3lzY29uZmlnIGRhdGEKKyAgICAgICAgbmF0aXZlX3N5c2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuc2RrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcignc3lzY29uZmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpLnN0cmlwKCcvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfc3lzY29uZl9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAiZXRjIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfc3lzY29uZl9kaXIpCisgICAgICAgIGJiLnV0aWxzLnJlbW92ZShvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAiZXRjIiksIFRydWUpCisKKworY2xhc3MgT3BrZ1NkayhTZGspOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCBtYW5pZmVzdF9kaXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKE9wa2dTZGssIHNlbGYpLl9faW5pdF9fKGQsIG1hbmlmZXN0X2RpcikKKworICAgICAgICBzZWxmLnRhcmdldF9jb25mID0gc2VsZi5kLmdldFZhcigiSVBLR0NPTkZfVEFSR0VUIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5ob3N0X2NvbmYgPSBzZWxmLmQuZ2V0VmFyKCJJUEtHQ09ORl9TREsiLCBUcnVlKQorCisgICAgICAgIHNlbGYudGFyZ2V0X21hbmlmZXN0ID0gT3BrZ01hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IE9wa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0gPSBPcGtnUE0oZCwgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsIHNlbGYudGFyZ2V0X2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIkFMTF9NVUxUSUxJQl9QQUNLQUdFX0FSQ0hTIiwgVHJ1ZSkpCisKKyAgICAgICAgc2VsZi5ob3N0X3BtID0gT3BrZ1BNKGQsIHNlbGYuc2RrX2hvc3Rfc3lzcm9vdCwgc2VsZi5ob3N0X2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJTREtfUEFDS0FHRV9BUkNIUyIsIFRydWUpKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIGlmIChzZWxmLmQuZ2V0VmFyKCdCVUlMRF9JTUFHRVNfRlJPTV9GRUVEUycsIFRydWUpIG9yICIiKSAhPSAiMSI6CisgICAgICAgICAgICBwbS53cml0ZV9pbmRleCgpCisKKyAgICAgICAgcG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3MpCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIFRBUkdFVCBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi50YXJnZXRfcG0sIHNlbGYudGFyZ2V0X21hbmlmZXN0KQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtLmluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLmQuZ2V0VmFyKCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIGJiLm5vdGUoIkluc3RhbGxpbmcgTkFUSVZFU0RLIHBhY2thZ2VzIikKKyAgICAgICAgc2VsZi5fcG9wdWxhdGVfc3lzcm9vdChzZWxmLmhvc3RfcG0sIHNlbGYuaG9zdF9tYW5pZmVzdCkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9IT1NUX0NPTU1BTkQiLCBUcnVlKSkKKworICAgICAgICB0YXJnZXRfc3lzY29uZmRpciA9IG9zLnBhdGguam9pbihzZWxmLnNka190YXJnZXRfc3lzcm9vdCwgc2VsZi5zeXNjb25mZGlyKQorICAgICAgICBob3N0X3N5c2NvbmZkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfaG9zdF9zeXNyb290LCBzZWxmLnN5c2NvbmZkaXIpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHRhcmdldF9zeXNjb25mZGlyKQorICAgICAgICBzaHV0aWwuY29weShzZWxmLnRhcmdldF9jb25mLCB0YXJnZXRfc3lzY29uZmRpcikKKyAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKHRhcmdldF9zeXNjb25mZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzZWxmLnRhcmdldF9jb25mKSksIDA2NDQpCisKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKGhvc3Rfc3lzY29uZmRpcikKKyAgICAgICAgc2h1dGlsLmNvcHkoc2VsZi5ob3N0X2NvbmYsIGhvc3Rfc3lzY29uZmRpcikKKyAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKGhvc3Rfc3lzY29uZmRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5ob3N0X2NvbmYpKSwgMDY0NCkKKworICAgICAgICBuYXRpdmVfb3BrZ19zdGF0ZV9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoJ2xvY2Fsc3RhdGVkaXJfbmF0aXZlc2RrJywgVHJ1ZSkuc3RyaXAoJy8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAib3BrZyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfb3BrZ19zdGF0ZV9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiwgImxpYiIsICJvcGtnIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfb3BrZ19zdGF0ZV9kaXIpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsICJ2YXIiKSwgVHJ1ZSkKKworCitjbGFzcyBEcGtnU2RrKFNkayk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQsIG1hbmlmZXN0X2Rpcj1Ob25lKToKKyAgICAgICAgc3VwZXIoRHBrZ1Nkaywgc2VsZikuX19pbml0X18oZCwgbWFuaWZlc3RfZGlyKQorCisgICAgICAgIHNlbGYudGFyZ2V0X2NvbmZfZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZC5nZXRWYXIoIkFQVENPTkZfVEFSR0VUIiwgVHJ1ZSksICJhcHQiKQorICAgICAgICBzZWxmLmhvc3RfY29uZl9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kLmdldFZhcigiQVBUQ09ORl9UQVJHRVQiLCBUcnVlKSwgImFwdC1zZGsiKQorCisgICAgICAgIHNlbGYudGFyZ2V0X21hbmlmZXN0ID0gRHBrZ01hbmlmZXN0KGQsIHNlbGYubWFuaWZlc3RfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdC5NQU5JRkVTVF9UWVBFX1NES19UQVJHRVQpCisgICAgICAgIHNlbGYuaG9zdF9tYW5pZmVzdCA9IERwa2dNYW5pZmVzdChkLCBzZWxmLm1hbmlmZXN0X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0Lk1BTklGRVNUX1RZUEVfU0RLX0hPU1QpCisKKyAgICAgICAgc2VsZi50YXJnZXRfcG0gPSBEcGtnUE0oZCwgc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZC5nZXRWYXIoIlBBQ0tBR0VfQVJDSFMiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiRFBLR19BUkNIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGFyZ2V0X2NvbmZfZGlyKQorCisgICAgICAgIHNlbGYuaG9zdF9wbSA9IERwa2dQTShkLCBzZWxmLnNka19ob3N0X3N5c3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmQuZ2V0VmFyKCJTREtfUEFDS0FHRV9BUkNIUyIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kLmdldFZhcigiREVCX1NES19BUkNIIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvc3RfY29uZl9kaXIpCisKKyAgICBkZWYgX2NvcHlfYXB0X2Rpcl90byhzZWxmLCBkc3RfZGlyKToKKyAgICAgICAgc3RhZ2luZ19ldGNkaXJfbmF0aXZlID0gc2VsZi5kLmdldFZhcigiU1RBR0lOR19FVENESVJfTkFUSVZFIiwgVHJ1ZSkKKworICAgICAgICBiYi51dGlscy5yZW1vdmUoZHN0X2RpciwgVHJ1ZSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUob3MucGF0aC5qb2luKHN0YWdpbmdfZXRjZGlyX25hdGl2ZSwgImFwdCIpLCBkc3RfZGlyKQorCisgICAgZGVmIF9wb3B1bGF0ZV9zeXNyb290KHNlbGYsIHBtLCBtYW5pZmVzdCk6CisgICAgICAgIHBrZ3NfdG9faW5zdGFsbCA9IG1hbmlmZXN0LnBhcnNlX2luaXRpYWxfbWFuaWZlc3QoKQorCisgICAgICAgIHBtLndyaXRlX2luZGV4KCkKKyAgICAgICAgcG0udXBkYXRlKCkKKworICAgICAgICBwa2dzID0gW10KKyAgICAgICAgcGtnc19hdHRlbXB0ID0gW10KKyAgICAgICAgZm9yIHBrZ190eXBlIGluIHBrZ3NfdG9faW5zdGFsbDoKKyAgICAgICAgICAgIGlmIHBrZ190eXBlID09IE1hbmlmZXN0LlBLR19UWVBFX0FUVEVNUFRfT05MWToKKyAgICAgICAgICAgICAgICBwa2dzX2F0dGVtcHQgKz0gcGtnc190b19pbnN0YWxsW3BrZ190eXBlXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwa2dzICs9IHBrZ3NfdG9faW5zdGFsbFtwa2dfdHlwZV0KKworICAgICAgICBwbS5pbnN0YWxsKHBrZ3MpCisKKyAgICAgICAgcG0uaW5zdGFsbChwa2dzX2F0dGVtcHQsIFRydWUpCisKKyAgICBkZWYgX3BvcHVsYXRlKHNlbGYpOgorICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIFRBUkdFVCBwYWNrYWdlcyIpCisgICAgICAgIHNlbGYuX3BvcHVsYXRlX3N5c3Jvb3Qoc2VsZi50YXJnZXRfcG0sIHNlbGYudGFyZ2V0X21hbmlmZXN0KQorCisgICAgICAgIHNlbGYudGFyZ2V0X3BtLmluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLmQuZ2V0VmFyKCdTREtJTUFHRV9JTlNUQUxMX0NPTVBMRU1FTlRBUlknLCBUcnVlKSkKKworICAgICAgICBleGVjdXRlX3ByZV9wb3N0X3Byb2Nlc3Moc2VsZi5kLCBzZWxmLmQuZ2V0VmFyKCJQT1BVTEFURV9TREtfUE9TVF9UQVJHRVRfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfdGFyZ2V0X3N5c3Jvb3QsICJldGMiLCAiYXB0IikpCisKKyAgICAgICAgYmIubm90ZSgiSW5zdGFsbGluZyBOQVRJVkVTREsgcGFja2FnZXMiKQorICAgICAgICBzZWxmLl9wb3B1bGF0ZV9zeXNyb290KHNlbGYuaG9zdF9wbSwgc2VsZi5ob3N0X21hbmlmZXN0KQorCisgICAgICAgIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhzZWxmLmQsIHNlbGYuZC5nZXRWYXIoIlBPUFVMQVRFX1NES19QT1NUX0hPU1RfQ09NTUFORCIsIFRydWUpKQorCisgICAgICAgIHNlbGYuX2NvcHlfYXB0X2Rpcl90byhvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCBzZWxmLnNka19uYXRpdmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXRjIiwgImFwdCIpKQorCisgICAgICAgIG5hdGl2ZV9kcGtnX3N0YXRlX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsIHNlbGYuc2RrX25hdGl2ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhciIsICJsaWIiLCAiZHBrZyIpCisgICAgICAgIGJiLnV0aWxzLm1rZGlyaGllcihuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCisgICAgICAgIGZvciBmIGluIGdsb2IuZ2xvYihvcy5wYXRoLmpvaW4oc2VsZi5zZGtfb3V0cHV0LCAidmFyIiwgImxpYiIsICJkcGtnIiwgIioiKSk6CisgICAgICAgICAgICBiYi51dGlscy5tb3ZlZmlsZShmLCBuYXRpdmVfZHBrZ19zdGF0ZV9kaXIpCisKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKG9zLnBhdGguam9pbihzZWxmLnNka19vdXRwdXQsICJ2YXIiKSwgVHJ1ZSkKKworCitkZWYgc2RrX2xpc3RfaW5zdGFsbGVkX3BhY2thZ2VzKGQsIHRhcmdldCwgZm9ybWF0PU5vbmUsIHJvb3Rmc19kaXI9Tm9uZSk6CisgICAgaWYgcm9vdGZzX2RpciBpcyBOb25lOgorICAgICAgICBzZGtfb3V0cHV0ID0gZC5nZXRWYXIoJ1NES19PVVRQVVQnLCBUcnVlKQorICAgICAgICB0YXJnZXRfcGF0aCA9IGQuZ2V0VmFyKCdTREtUQVJHRVRTWVNST09UJywgVHJ1ZSkuc3RyaXAoJy8nKQorCisgICAgICAgIHJvb3Rmc19kaXIgPSBbc2RrX291dHB1dCwgb3MucGF0aC5qb2luKHNka19vdXRwdXQsIHRhcmdldF9wYXRoKV1bdGFyZ2V0IGlzIFRydWVdCisKKyAgICBpbWdfdHlwZSA9IGQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICBpZiBpbWdfdHlwZSA9PSAicnBtIjoKKyAgICAgICAgYXJjaF92YXIgPSBbIlNES19QQUNLQUdFX0FSQ0hTIiwgTm9uZV1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIG9zX3ZhciA9IFsiU0RLX09TIiwgTm9uZV1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIHJldHVybiBScG1Qa2dzTGlzdChkLCByb290ZnNfZGlyLCBhcmNoX3Zhciwgb3NfdmFyKS5saXN0KGZvcm1hdCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBjb25mX2ZpbGVfdmFyID0gWyJJUEtHQ09ORl9TREsiLCAiSVBLR0NPTkZfVEFSR0VUIl1bdGFyZ2V0IGlzIFRydWVdCisgICAgICAgIHJldHVybiBPcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpciwgZC5nZXRWYXIoY29uZl9maWxlX3ZhciwgVHJ1ZSkpLmxpc3QoZm9ybWF0KQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6CisgICAgICAgIHJldHVybiBEcGtnUGtnc0xpc3QoZCwgcm9vdGZzX2RpcikubGlzdChmb3JtYXQpCisKK2RlZiBwb3B1bGF0ZV9zZGsoZCwgbWFuaWZlc3RfZGlyPU5vbmUpOgorICAgIGVudl9ia3AgPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgaW1nX3R5cGUgPSBkLmdldFZhcignSU1BR0VfUEtHVFlQRScsIFRydWUpCisgICAgaWYgaW1nX3R5cGUgPT0gInJwbSI6CisgICAgICAgIFJwbVNkayhkLCBtYW5pZmVzdF9kaXIpLnBvcHVsYXRlKCkKKyAgICBlbGlmIGltZ190eXBlID09ICJpcGsiOgorICAgICAgICBPcGtnU2RrKGQsIG1hbmlmZXN0X2RpcikucG9wdWxhdGUoKQorICAgIGVsaWYgaW1nX3R5cGUgPT0gImRlYiI6CisgICAgICAgIERwa2dTZGsoZCwgbWFuaWZlc3RfZGlyKS5wb3B1bGF0ZSgpCisKKyAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICBvcy5lbnZpcm9uLnVwZGF0ZShlbnZfYmtwKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHBhc3MKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3NzdGF0ZXNpZy5weSBiL21ldGEvbGliL29lL3NzdGF0ZXNpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjQ2NzEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2Uvc3N0YXRlc2lnLnB5CkBAIC0wLDAgKzEsMjkxIEBACitpbXBvcnQgYmIuc2lnZ2VuCisKK2RlZiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNpZ2dlbiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKToKKyAgICAjIFJldHVybiBUcnVlIGlmIHdlIHNob3VsZCBrZWVwIHRoZSBkZXBlbmRlbmN5LCBGYWxzZSB0byBkcm9wIGl0CisgICAgZGVmIGlzTmF0aXZlKHgpOgorICAgICAgICByZXR1cm4geC5lbmRzd2l0aCgiLW5hdGl2ZSIpCisgICAgZGVmIGlzQ3Jvc3MoeCk6CisgICAgICAgIHJldHVybiAiLWNyb3NzLSIgaW4geAorICAgIGRlZiBpc05hdGl2ZVNESyh4KToKKyAgICAgICAgcmV0dXJuIHguc3RhcnRzd2l0aCgibmF0aXZlc2RrLSIpCisgICAgZGVmIGlzS2VybmVsKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gaW5oZXJpdHMuZmluZCgiL21vZHVsZS1iYXNlLmJiY2xhc3MiKSAhPSAtMSBvciBpbmhlcml0cy5maW5kKCIvbGludXgta2VybmVsLWJhc2UuYmJjbGFzcyIpICE9IC0xCisgICAgZGVmIGlzUGFja2FnZUdyb3VwKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gIi9wYWNrYWdlZ3JvdXAuYmJjbGFzcyIgaW4gaW5oZXJpdHMKKyAgICBkZWYgaXNBbGxBcmNoKGZuKToKKyAgICAgICAgaW5oZXJpdHMgPSAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorICAgICAgICByZXR1cm4gIi9hbGxhcmNoLmJiY2xhc3MiIGluIGluaGVyaXRzCisgICAgZGVmIGlzSW1hZ2UoZm4pOgorICAgICAgICByZXR1cm4gIi9pbWFnZS5iYmNsYXNzIiBpbiAiICIuam9pbihkYXRhQ2FjaGUuaW5oZXJpdHNbZm5dKQorCisgICAgIyBBbHdheXMgaW5jbHVkZSBvdXIgb3duIGludGVyLXRhc2sgZGVwZW5kZW5jaWVzCisgICAgaWYgcmVjaXBlbmFtZSA9PSBkZXBuYW1lOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBRdWlsdCAocGF0Y2ggYXBwbGljYXRpb24pIGNoYW5naW5nIGlzbid0IGxpa2VseSB0byBhZmZlY3QgYW55dGhpbmcKKyAgICBleGNsdWRlbGlzdCA9IFsncXVpbHQtbmF0aXZlJywgJ3N1YnZlcnNpb24tbmF0aXZlJywgJ2dpdC1uYXRpdmUnXQorICAgIGlmIGRlcG5hbWUgaW4gZXhjbHVkZWxpc3QgYW5kIHJlY2lwZW5hbWUgIT0gZGVwbmFtZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIEV4Y2x1ZGUgd2VsbCBkZWZpbmVkIHJlY2lwZS0+ZGVwZW5kZW5jeQorICAgIGlmICIlcy0+JXMiICUgKHJlY2lwZW5hbWUsIGRlcG5hbWUpIGluIHNpZ2dlbi5zYWZlcmVjaXBlZGVwczoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAjIERvbid0IGNoYW5nZSBuYXRpdmUvY3Jvc3MvbmF0aXZlc2RrIHJlY2lwZSBkZXBlbmRlbmNpZXMgYW55IGZ1cnRoZXIKKyAgICBpZiBpc05hdGl2ZShyZWNpcGVuYW1lKSBvciBpc0Nyb3NzKHJlY2lwZW5hbWUpIG9yIGlzTmF0aXZlU0RLKHJlY2lwZW5hbWUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBPbmx5IHRhcmdldCBwYWNrYWdlcyBiZXlvbmQgaGVyZQorCisgICAgIyBhbGxhcmNoIHBhY2thZ2Vncm91cHMgYXJlIGFzc3VtZWQgdG8gaGF2ZSB3ZWxsIGJlaGF2ZWQgbmFtZXMgd2hpY2ggZG9uJ3QgY2hhbmdlIGJldHdlZW4gYXJjaGl0ZWN1cmVzL3R1bmVzCisgICAgaWYgaXNQYWNrYWdlR3JvdXAoZm4pIGFuZCBpc0FsbEFyY2goZm4pOgorICAgICAgICByZXR1cm4gRmFsc2UgIAorCisgICAgIyBFeGNsdWRlIHdlbGwgZGVmaW5lZCBtYWNoaW5lIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdoaWNoIGRvbid0IGNoYW5nZSBBQkkKKyAgICBpZiBkZXBuYW1lIGluIHNpZ2dlbi5hYmlzYWZlcmVjaXBlcyBhbmQgbm90IGlzSW1hZ2UoZm4pOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgS2VybmVsIG1vZHVsZXMgYXJlIHdlbGwgbmFtZXNwYWNlZC4gV2UgZG9uJ3Qgd2FudCB0byBkZXBlbmQgb24gdGhlIGtlcm5lbCdzIGNoZWNrc3VtCisgICAgIyBpZiB3ZSdyZSBqdXN0IGRvaW5nIGFuIFJSRUNPTU1FTkRTX3h4eCA9ICJrZXJuZWwtbW9kdWxlLSoiLCBub3QgbGVhc3QgYmVjYXVzZSB0aGUgY2hlY2tzdW0KKyAgICAjIGlzIG1hY2hpbmUgc3BlY2lmaWMuCisgICAgIyBUaGVyZWZvcmUgaWYgd2UncmUgbm90IGEga2VybmVsIG9yIGEgbW9kdWxlIHJlY2lwZSAoaW5oZXJpdGluZyB0aGUga2VybmVsIGNsYXNzZXMpCisgICAgIyBhbmQgd2UgcmVjY29tZW5kIGEga2VybmVsLW1vZHVsZSwgd2UgZXhjbHVkZSB0aGUgZGVwZW5kZW5jeS4KKyAgICBkZXBmbiA9IGRlcC5yc3BsaXQoIi4iLCAxKVswXQorICAgIGlmIGRhdGFDYWNoZSBhbmQgaXNLZXJuZWwoZGVwZm4pIGFuZCBub3QgaXNLZXJuZWwoZm4pOgorICAgICAgICBmb3IgcGtnIGluIGRhdGFDYWNoZS5ydW5yZWNzW2ZuXToKKyAgICAgICAgICAgIGlmICIgIi5qb2luKGRhdGFDYWNoZS5ydW5yZWNzW2ZuXVtwa2ddKS5maW5kKCJrZXJuZWwtbW9kdWxlLSIpICE9IC0xOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgIyBEZWZhdWx0IHRvIGtlZXAgZGVwZW5kZW5jaWVzCisgICAgcmV0dXJuIFRydWUKKworZGVmIHNzdGF0ZV9sb2NrZWRzaWdzKGQpOgorICAgIHNpZ3MgPSB7fQorICAgIHR5cGVzID0gKGQuZ2V0VmFyKCJTSUdHRU5fTE9DS0VEU0lHU19UWVBFUyIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgZm9yIHQgaW4gdHlwZXM6CisgICAgICAgIGxvY2tlZHNpZ3MgPSAoZC5nZXRWYXIoIlNJR0dFTl9MT0NLRURTSUdTXyVzIiAlIHQsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBscyBpbiBsb2NrZWRzaWdzOgorICAgICAgICAgICAgcG4sIHRhc2ssIGggPSBscy5zcGxpdCgiOiIsIDIpCisgICAgICAgICAgICBpZiBwbiBub3QgaW4gc2lnczoKKyAgICAgICAgICAgICAgICBzaWdzW3BuXSA9IHt9CisgICAgICAgICAgICBzaWdzW3BuXVt0YXNrXSA9IGgKKyAgICByZXR1cm4gc2lncworCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpYyk6CisgICAgbmFtZSA9ICJPRUJhc2ljIgorICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFiaXNhZmVyZWNpcGVzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHNlbGYuc2FmZXJlY2lwZWRlcHMgPSAoZGF0YS5nZXRWYXIoIlNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBwYXNzCisgICAgZGVmIHJ1bmRlcF9jaGVjayhzZWxmLCBmbiwgcmVjaXBlbmFtZSwgdGFzaywgZGVwLCBkZXBuYW1lLCBkYXRhQ2FjaGUgPSBOb25lKToKKyAgICAgICAgcmV0dXJuIHNzdGF0ZV9ydW5kZXBmaWx0ZXIoc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlKQorCitjbGFzcyBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljSGFzaChiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoKToKKyAgICBuYW1lID0gIk9FQmFzaWNIYXNoIgorICAgIGRlZiBpbml0X3J1bmRlcGNoZWNrKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmFiaXNhZmVyZWNpcGVzID0gKGRhdGEuZ2V0VmFyKCJTSUdHRU5fRVhDTFVERVJFQ0lQRVNfQUJJU0FGRSIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIHNlbGYuc2FmZXJlY2lwZWRlcHMgPSAoZGF0YS5nZXRWYXIoIlNJR0dFTl9FWENMVURFX1NBRkVfUkVDSVBFX0RFUFMiLCBUcnVlKSBvciAiIikuc3BsaXQoKQorICAgICAgICBzZWxmLmxvY2tlZHNpZ3MgPSBzc3RhdGVfbG9ja2Vkc2lncyhkYXRhKQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hlcyA9IHt9CisgICAgICAgIHNlbGYubG9ja2VkcG5tYXAgPSB7fQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hmbiA9IHt9CisgICAgICAgIHNlbGYubWFjaGluZSA9IGRhdGEuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5taXNtYXRjaF9tc2dzID0gW10KKyAgICAgICAgcGFzcworICAgIGRlZiBydW5kZXBfY2hlY2soc2VsZiwgZm4sIHJlY2lwZW5hbWUsIHRhc2ssIGRlcCwgZGVwbmFtZSwgZGF0YUNhY2hlID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzc3RhdGVfcnVuZGVwZmlsdGVyKHNlbGYsIGZuLCByZWNpcGVuYW1lLCB0YXNrLCBkZXAsIGRlcG5hbWUsIGRhdGFDYWNoZSkKKworICAgIGRlZiBnZXRfdGFza2RhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5nZXRfdGFza2RhdGEoKQorICAgICAgICByZXR1cm4gKGRhdGEsIHNlbGYubG9ja2VkcG5tYXAsIHNlbGYubG9ja2VkaGFzaGZuKQorCisgICAgZGVmIHNldF90YXNrZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgY29yZWRhdGEsIHNlbGYubG9ja2VkcG5tYXAsIHNlbGYubG9ja2VkaGFzaGZuID0gZGF0YQorICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5zZXRfdGFza2RhdGEoY29yZWRhdGEpCisKKyAgICBkZWYgZHVtcF9zaWdzKHNlbGYsIGRhdGFDYWNoZSwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYuZHVtcF9sb2NrZWRzaWdzKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKGJiLnNpZ2dlbi5TaWduYXR1cmVHZW5lcmF0b3JCYXNpY0hhc2gsIHNlbGYpLmR1bXBfc2lncyhkYXRhQ2FjaGUsIG9wdGlvbnMpCisKKyAgICBkZWYgZ2V0X3Rhc2toYXNoKHNlbGYsIGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpOgorICAgICAgICBoID0gc3VwZXIoYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvckJhc2ljSGFzaCwgc2VsZikuZ2V0X3Rhc2toYXNoKGZuLCB0YXNrLCBkZXBzLCBkYXRhQ2FjaGUpCisKKyAgICAgICAgcmVjaXBlbmFtZSA9IGRhdGFDYWNoZS5wa2dfZm5bZm5dCisgICAgICAgIHNlbGYubG9ja2VkcG5tYXBbZm5dID0gcmVjaXBlbmFtZQorICAgICAgICBzZWxmLmxvY2tlZGhhc2hmbltmbl0gPSBkYXRhQ2FjaGUuaGFzaGZuW2ZuXQorICAgICAgICBpZiByZWNpcGVuYW1lIGluIHNlbGYubG9ja2Vkc2lnczoKKyAgICAgICAgICAgIGlmIHRhc2sgaW4gc2VsZi5sb2NrZWRzaWdzW3JlY2lwZW5hbWVdOgorICAgICAgICAgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgICAgICAgICBoX2xvY2tlZCA9IHNlbGYubG9ja2Vkc2lnc1tyZWNpcGVuYW1lXVt0YXNrXQorICAgICAgICAgICAgICAgIHNlbGYubG9ja2VkaGFzaGVzW2tdID0gaF9sb2NrZWQKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2toYXNoW2tdID0gaF9sb2NrZWQKKyAgICAgICAgICAgICAgICAjYmIud2FybigiVXNpbmcgJXMgJXMgJXMiICUgKHJlY2lwZW5hbWUsIHRhc2ssIGgpKQorCisgICAgICAgICAgICAgICAgaWYgaCAhPSBoX2xvY2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taXNtYXRjaF9tc2dzLmFwcGVuZCgnVGhlICVzOiVzIHNpZyAoJXMpIGNoYW5nZWQsIHVzZSBsb2NrZWQgc2lnICVzIHRvIGluc3RlYWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChyZWNpcGVuYW1lLCB0YXNrLCBoLCBoX2xvY2tlZCkpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gaF9sb2NrZWQKKyAgICAgICAgI2JiLndhcm4oIiVzICVzICVzIiAlIChyZWNpcGVuYW1lLCB0YXNrLCBoKSkKKyAgICAgICAgcmV0dXJuIGgKKworICAgIGRlZiBkdW1wX3NpZ3Rhc2soc2VsZiwgZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSk6CisgICAgICAgIGsgPSBmbiArICIuIiArIHRhc2sKKyAgICAgICAgaWYgayBpbiBzZWxmLmxvY2tlZGhhc2hlczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzdXBlcihiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yQmFzaWNIYXNoLCBzZWxmKS5kdW1wX3NpZ3Rhc2soZm4sIHRhc2ssIHN0YW1wYmFzZSwgcnVudGltZSkKKworICAgIGRlZiBkdW1wX2xvY2tlZHNpZ3Moc2VsZiwgc2lnZmlsZT1Ob25lLCB0YXNrZmlsdGVyPU5vbmUpOgorICAgICAgICBpZiBub3Qgc2lnZmlsZToKKyAgICAgICAgICAgIHNpZ2ZpbGUgPSBvcy5nZXRjd2QoKSArICIvbG9ja2VkLXNpZ3MuaW5jIgorCisgICAgICAgIGJiLnBsYWluKCJXcml0aW5nIGxvY2tlZCBzaWdzIHRvICVzIiAlIHNpZ2ZpbGUpCisgICAgICAgIHR5cGVzID0ge30KKyAgICAgICAgZm9yIGsgaW4gc2VsZi5ydW50YXNrZGVwczoKKyAgICAgICAgICAgIGlmIHRhc2tmaWx0ZXI6CisgICAgICAgICAgICAgICAgaWYgbm90IGsgaW4gdGFza2ZpbHRlcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZuID0gay5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICB0ID0gc2VsZi5sb2NrZWRoYXNoZm5bZm5dLnNwbGl0KCIgIilbMV0uc3BsaXQoIjoiKVs1XQorICAgICAgICAgICAgdCA9ICd0LScgKyB0LnJlcGxhY2UoJ18nLCAnLScpCisgICAgICAgICAgICBpZiB0IG5vdCBpbiB0eXBlczoKKyAgICAgICAgICAgICAgICB0eXBlc1t0XSA9IFtdCisgICAgICAgICAgICB0eXBlc1t0XS5hcHBlbmQoaykKKworICAgICAgICB3aXRoIG9wZW4oc2lnZmlsZSwgInciKSBhcyBmOgorICAgICAgICAgICAgZm9yIHQgaW4gdHlwZXM6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnU0lHR0VOX0xPQ0tFRFNJR1NfJXMgPSAiXFxcbicgJSB0KQorICAgICAgICAgICAgICAgIHR5cGVzW3RdLnNvcnQoKQorICAgICAgICAgICAgICAgIHNvcnRlZGsgPSBzb3J0ZWQodHlwZXNbdF0sIGtleT1sYW1iZGEgazogc2VsZi5sb2NrZWRwbm1hcFtrLnJzcGxpdCgiLiIsMSlbMF1dKQorICAgICAgICAgICAgICAgIGZvciBrIGluIHNvcnRlZGs6CisgICAgICAgICAgICAgICAgICAgIGZuID0gay5yc3BsaXQoIi4iLDEpWzBdCisgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBrLnJzcGxpdCgiLiIsMSlbMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gc2VsZi50YXNraGFzaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoIiAgICAiICsgc2VsZi5sb2NrZWRwbm1hcFtmbl0gKyAiOiIgKyB0YXNrICsgIjoiICsgc2VsZi50YXNraGFzaFtrXSArICIgXFxcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgnICAgICJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdTSUdHRU5fTE9DS0VEU0lHU19UWVBFU18lcyA9ICIlcyInICUgKHNlbGYubWFjaGluZSwgIiAiLmpvaW4odHlwZXMua2V5cygpKSkpCisKKyAgICBkZWYgY2hlY2toYXNoZXMoc2VsZiwgbWlzc2VkLCByZXQsIHNxX2ZuLCBzcV90YXNrLCBzcV9oYXNoLCBzcV9oYXNoZm4sIGQpOgorICAgICAgICBjaGVja2xldmVsID0gZC5nZXRWYXIoIlNJR0dFTl9MT0NLRURTSUdTX0NIRUNLX0xFVkVMIiwgVHJ1ZSkKKyAgICAgICAgZm9yIHRhc2sgaW4gcmFuZ2UobGVuKHNxX2ZuKSk6CisgICAgICAgICAgICBpZiB0YXNrIG5vdCBpbiByZXQ6CisgICAgICAgICAgICAgICAgZm9yIHBuIGluIHNlbGYubG9ja2Vkc2lnczoKKyAgICAgICAgICAgICAgICAgICAgaWYgc3FfaGFzaFt0YXNrXSBpbiBzZWxmLmxvY2tlZHNpZ3NbcG5dLml0ZXJ2YWx1ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWlzbWF0Y2hfbXNncy5hcHBlbmQoIkxvY2tlZCBzaWcgaXMgc2V0IGZvciAlczolcyAoJXMpIHlldCBub3QgaW4gc3N0YXRlIGNhY2hlPyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocG4sIHNxX3Rhc2tbdGFza10sIHNxX2hhc2hbdGFza10pKQorCisgICAgICAgIGlmIHNlbGYubWlzbWF0Y2hfbXNncyBhbmQgY2hlY2tsZXZlbCA9PSAnd2Fybic6CisgICAgICAgICAgICBiYi53YXJuKCJcbiIuam9pbihzZWxmLm1pc21hdGNoX21zZ3MpKQorICAgICAgICBlbGlmIHNlbGYubWlzbWF0Y2hfbXNncyBhbmQgY2hlY2tsZXZlbCA9PSAnZXJyb3InOgorICAgICAgICAgICAgYmIuZmF0YWwoIlxuIi5qb2luKHNlbGYubWlzbWF0Y2hfbXNncykpCisKKworIyBJbnNlcnQgdGhlc2UgY2xhc3NlcyBpbnRvIHNpZ2dlbidzIG5hbWVzcGFjZSBzbyBpdCBjYW4gc2VlIGFuZCBzZWxlY3QgdGhlbQorYmIuc2lnZ2VuLlNpZ25hdHVyZUdlbmVyYXRvck9FQmFzaWMgPSBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljCitiYi5zaWdnZW4uU2lnbmF0dXJlR2VuZXJhdG9yT0VCYXNpY0hhc2ggPSBTaWduYXR1cmVHZW5lcmF0b3JPRUJhc2ljSGFzaAorCisKK2RlZiBmaW5kX3NpZ2luZm8ocG4sIHRhc2tuYW1lLCB0YXNraGFzaGxpc3QsIGQpOgorICAgICIiIiBGaW5kIHNpZ25hdHVyZSBkYXRhIGZpbGVzIGZvciBjb21wYXJpc29uIHB1cnBvc2VzICIiIgorCisgICAgaW1wb3J0IGZubWF0Y2gKKyAgICBpbXBvcnQgZ2xvYgorCisgICAgaWYgdGFza2hhc2hsaXN0OgorICAgICAgICBoYXNoZmlsZXMgPSB7fQorCisgICAgaWYgbm90IHRhc2tuYW1lOgorICAgICAgICAjIFdlIGhhdmUgdG8gZGVyaXZlIHBuIGFuZCB0YXNrbmFtZQorICAgICAgICBrZXkgPSBwbgorICAgICAgICBzcGxpdGl0ID0ga2V5LnNwbGl0KCcuYmIuJykKKyAgICAgICAgdGFza25hbWUgPSBzcGxpdGl0WzFdCisgICAgICAgIHBuID0gb3MucGF0aC5iYXNlbmFtZShzcGxpdGl0WzBdKS5zcGxpdCgnXycpWzBdCisgICAgICAgIGlmIGtleS5zdGFydHN3aXRoKCd2aXJ0dWFsOm5hdGl2ZTonKToKKyAgICAgICAgICAgIHBuID0gcG4gKyAnLW5hdGl2ZScKKworICAgIGZpbGVkYXRlcyA9IHt9CisKKyAgICAjIEZpcnN0IHNlYXJjaCBpbiBzdGFtcHMgZGlyCisgICAgbG9jYWxkYXRhID0gZC5jcmVhdGVDb3B5KCkKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdNVUxUSU1BQ0hfVEFSR0VUX1NZUycsICcqJykKKyAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsIHBuKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BWJywgJyonKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BSJywgJyonKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0VYVEVORFBFJywgJycpCisgICAgc3RhbXAgPSBsb2NhbGRhdGEuZ2V0VmFyKCdTVEFNUCcsIFRydWUpCisgICAgZmlsZXNwZWMgPSAnJXMuJXMuc2lnZGF0YS4qJyAlIChzdGFtcCwgdGFza25hbWUpCisgICAgZm91bmRhbGwgPSBGYWxzZQorICAgIGltcG9ydCBnbG9iCisgICAgZm9yIGZ1bGxwYXRoIGluIGdsb2IuZ2xvYihmaWxlc3BlYyk6CisgICAgICAgIG1hdGNoID0gRmFsc2UKKyAgICAgICAgaWYgdGFza2hhc2hsaXN0OgorICAgICAgICAgICAgZm9yIHRhc2toYXNoIGluIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgICAgICBpZiBmdWxscGF0aC5lbmRzd2l0aCgnLiVzJyAlIHRhc2toYXNoKToKKyAgICAgICAgICAgICAgICAgICAgaGFzaGZpbGVzW3Rhc2toYXNoXSA9IGZ1bGxwYXRoCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihoYXNoZmlsZXMpID09IGxlbih0YXNraGFzaGxpc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRhbGwgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbGVkYXRlc1tmdWxscGF0aF0gPSBvcy5zdGF0KGZ1bGxwYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIGlmIG5vdCB0YXNraGFzaGxpc3Qgb3IgKGxlbihmaWxlZGF0ZXMpIDwgMiBhbmQgbm90IGZvdW5kYWxsKToKKyAgICAgICAgIyBUaGF0IGRpZG4ndCB3b3JrLCBsb29rIGluIHNzdGF0ZS1jYWNoZQorICAgICAgICBoYXNoZXMgPSB0YXNraGFzaGxpc3Qgb3IgWycqJ10KKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIGZvciBoYXNodmFsIGluIGhhc2hlczoKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1BBQ0tBR0VfQVJDSCcsICcqJykKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1RBUkdFVF9WRU5ET1InLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdUQVJHRVRfT1MnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQTicsIHBuKQorICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignUFYnLCAnKicpCisgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdQUicsICcqJykKKyAgICAgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoJ0JCX1RBU0tIQVNIJywgaGFzaHZhbCkKKyAgICAgICAgICAgIHN3c3BlYyA9IGxvY2FsZGF0YS5nZXRWYXIoJ1NTVEFURV9TV1NQRUMnLCBUcnVlKQorICAgICAgICAgICAgaWYgdGFza25hbWUgaW4gWydkb19mZXRjaCcsICdkb191bnBhY2snLCAnZG9fcGF0Y2gnLCAnZG9fcG9wdWxhdGVfbGljJywgJ2RvX3ByZWNvbmZpZ3VyZSddIGFuZCBzd3NwZWM6CisgICAgICAgICAgICAgICAgbG9jYWxkYXRhLnNldFZhcignU1NUQVRFX1BLR1NQRUMnLCAnJHtTU1RBVEVfU1dTUEVDfScpCisgICAgICAgICAgICBlbGlmIHBuLmVuZHN3aXRoKCctbmF0aXZlJykgb3IgIi1jcm9zcy0iIGluIHBuIG9yICItY3Jvc3NzZGstIiBpbiBwbjoKKyAgICAgICAgICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCdTU1RBVEVfRVhUUkFQQVRIJywgIiR7TkFUSVZFTFNCU1RSSU5HfS8iKQorICAgICAgICAgICAgc3N0YXRlbmFtZSA9IHRhc2tuYW1lWzM6XQorICAgICAgICAgICAgZmlsZXNwZWMgPSAnJXNfJXMuKi5zaWdpbmZvJyAlIChsb2NhbGRhdGEuZ2V0VmFyKCdTU1RBVEVfUEtHJywgVHJ1ZSksIHNzdGF0ZW5hbWUpCisKKyAgICAgICAgICAgIGlmIGhhc2h2YWwgIT0gJyonOgorICAgICAgICAgICAgICAgIHNzdGF0ZWRpciA9ICIlcy8lcyIgJSAoZC5nZXRWYXIoJ1NTVEFURV9ESVInLCBUcnVlKSwgaGFzaHZhbFs6Ml0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzdGF0ZWRpciA9IGQuZ2V0VmFyKCdTU1RBVEVfRElSJywgVHJ1ZSkKKworICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3N0YXRlZGlyKToKKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZnVsbHBhdGgsIGZpbGVzcGVjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoZmlsZXNbaGFzaHZhbF0gPSBmdWxscGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVkYXRlc1tmdWxscGF0aF0gPSBvcy5zdGF0KGZ1bGxwYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgIGlmIHRhc2toYXNobGlzdDoKKyAgICAgICAgcmV0dXJuIGhhc2hmaWxlcworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBmaWxlZGF0ZXMKKworYmIuc2lnZ2VuLmZpbmRfc2lnaW5mbyA9IGZpbmRfc2lnaW5mbworCisKK2RlZiBzc3RhdGVfZ2V0X21hbmlmZXN0X2ZpbGVuYW1lKHRhc2ssIGQpOgorICAgICIiIgorICAgIFJldHVybiB0aGUgc3N0YXRlIG1hbmlmZXN0IGZpbGUgcGF0aCBmb3IgYSBwYXJ0aWN1bGFyIHRhc2suCisgICAgQWxzbyByZXR1cm5zIHRoZSBkYXRhc3RvcmUgdGhhdCBjYW4gYmUgdXNlZCB0byBxdWVyeSByZWxhdGVkIHZhcmlhYmxlcy4KKyAgICAiIiIKKyAgICBkMiA9IGQuY3JlYXRlQ29weSgpCisgICAgZXh0cmFpbmYgPSBkLmdldFZhckZsYWcoImRvXyIgKyB0YXNrLCAnc3RhbXAtZXh0cmEtaW5mbycsIFRydWUpCisgICAgaWYgZXh0cmFpbmY6CisgICAgICAgIGQyLnNldFZhcigiU1NUQVRFX01BTk1BQ0giLCBleHRyYWluZikKKyAgICByZXR1cm4gKGQyLmV4cGFuZCgiJHtTU1RBVEVfTUFORklMRVBSRUZJWH0uJXMiICUgdGFzayksIGQyKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdGVybWluYWwucHkgYi9tZXRhL2xpYi9vZS90ZXJtaW5hbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE4OTEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdGVybWluYWwucHkKQEAgLTAsMCArMSwyNjMgQEAKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb2UuY2xhc3N1dGlscworaW1wb3J0IHNobGV4Citmcm9tIGJiLnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBFeGVjdXRpb25FcnJvcgorZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCisKK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdCaXRCYWtlLk9FLlRlcm1pbmFsJykKKworCitjbGFzcyBVbnN1cHBvcnRlZFRlcm1pbmFsKEV4Y2VwdGlvbik6CisgICAgcGFzcworCitjbGFzcyBOb1N1cHBvcnRlZFRlcm1pbmFscyhFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBSZWdpc3RyeShvZS5jbGFzc3V0aWxzLkNsYXNzUmVnaXN0cnkpOgorICAgIGNvbW1hbmQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICBzdXBlcihSZWdpc3RyeSwgY2xzKS5fX2luaXRfXyhuYW1lLmxvd2VyKCksIGJhc2VzLCBhdHRycykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbXBsZW1lbnRlZChjbHMpOgorICAgICAgICByZXR1cm4gYm9vbChjbHMuY29tbWFuZCkKKworCitjbGFzcyBUZXJtaW5hbChQb3Blbik6CisgICAgX19tZXRhY2xhc3NfXyA9IFJlZ2lzdHJ5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgZm10X3NoX2NtZCA9IHNlbGYuZm9ybWF0X2NvbW1hbmQoc2hfY21kLCB0aXRsZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgUG9wZW4uX19pbml0X18oc2VsZiwgZm10X3NoX2NtZCwgZW52PWVudikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGZvcm1hdF9jb21tYW5kKHNlbGYsIHNoX2NtZCwgdGl0bGUpOgorICAgICAgICBmbXQgPSB7J3RpdGxlJzogdGl0bGUgb3IgJ1Rlcm1pbmFsJywgJ2NvbW1hbmQnOiBzaF9jbWR9CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5jb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHJldHVybiBzaGxleC5zcGxpdChzZWxmLmNvbW1hbmQuZm9ybWF0KCoqZm10KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBbZWxlbWVudC5mb3JtYXQoKipmbXQpIGZvciBlbGVtZW50IGluIHNlbGYuY29tbWFuZF0KKworY2xhc3MgWFRlcm1pbmFsKFRlcm1pbmFsKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorICAgICAgICBpZiBub3Qgb3MuZW52aXJvbi5nZXQoJ0RJU1BMQVknKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoc2VsZi5uYW1lKQorCitjbGFzcyBHbm9tZShYVGVybWluYWwpOgorICAgIGNvbW1hbmQgPSAnZ25vbWUtdGVybWluYWwgLXQgInt0aXRsZX0iIC0tZGlzYWJsZS1mYWN0b3J5IC14IHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICAjIFJlY2VudCB2ZXJzaW9ucyBvZiBnbm9tZS10ZXJtaW5hbCBkb2VzIG5vdCBzdXBwb3J0IG5vbi1VVEY4IGNoYXJzZXQ6CisgICAgICAgICMgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczMjEyNzsgYXMgYSB3b3JrYXJvdW5kLAorICAgICAgICAjIGNsZWFyaW5nIHRoZSBMQ19BTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gaXQgdXNlcyB0aGUgbG9jYWxlLgorICAgICAgICAjIE9uY2UgZml4ZWQgb24gdGhlIGdub21lLXRlcm1pbmFsIHByb2plY3QsIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQuCisgICAgICAgIGlmIG9zLmdldGVudignTENfQUxMJyk6IG9zLnB1dGVudignTENfQUxMJywnJykKKworICAgICAgICAjIENoZWNrIHZlcnNpb24KKyAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigiZ25vbWUtdGVybWluYWwiKQorICAgICAgICBpZiB2ZXJudW0gYW5kIExvb3NlVmVyc2lvbih2ZXJudW0pID49ICczLjEwJzoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygxLCAnR25vbWUtVGVybWluYWwgMy4xMCBvciBsYXRlciBkb2VzIG5vdCBzdXBwb3J0IC0tZGlzYWJsZS1mYWN0b3J5JykKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICdnbm9tZS10ZXJtaW5hbCAtdCAie3RpdGxlfSIgLXgge2NvbW1hbmR9JworICAgICAgICBYVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBNYXRlKFhUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdtYXRlLXRlcm1pbmFsIC10ICJ7dGl0bGV9IiAteCB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIFhmY2UoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3hmY2U0LXRlcm1pbmFsIC1UICJ7dGl0bGV9IiAtZSAie2NvbW1hbmR9IicKKyAgICBwcmlvcml0eSA9IDIKKworY2xhc3MgVGVybWlub2xvZ3koWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3Rlcm1pbm9sb2d5IC1UPSJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAyCisKK2NsYXNzIEtvbnNvbGUoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ2tvbnNvbGUgLS1ub2ZvcmsgLXAgdGFidGl0bGU9Int0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICAjIENoZWNrIHZlcnNpb24KKyAgICAgICAgdmVybnVtID0gY2hlY2tfdGVybWluYWxfdmVyc2lvbigia29uc29sZSIpCisgICAgICAgIGlmIHZlcm51bSBhbmQgTG9vc2VWZXJzaW9uKHZlcm51bSkgPCAnMi4wLjAnOgorICAgICAgICAgICAgIyBLb25zb2xlIGZyb20gS0RFIDMueAorICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gJ2tvbnNvbGUgLVQgInt0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICAgICAgWFRlcm1pbmFsLl9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKworY2xhc3MgWFRlcm0oWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3h0ZXJtIC1UICJ7dGl0bGV9IiAtZSB7Y29tbWFuZH0nCisgICAgcHJpb3JpdHkgPSAxCisKK2NsYXNzIFJ4dnQoWFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3J4dnQgLVQgInt0aXRsZX0iIC1lIHtjb21tYW5kfScKKyAgICBwcmlvcml0eSA9IDEKKworY2xhc3MgU2NyZWVuKFRlcm1pbmFsKToKKyAgICBjb21tYW5kID0gJ3NjcmVlbiAtRCAtbSAtdCAie3RpdGxlfSIgLVMgZGV2c2hlbGwge2NvbW1hbmR9JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIHNfaWQgPSAiZGV2c2hlbGxfJWkiICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgc2VsZi5jb21tYW5kID0gInNjcmVlbiAtRCAtbSAtdCBcInt0aXRsZX1cIiAtUyAlcyB7Y29tbWFuZH0iICUgc19pZAorICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgIG1zZyA9ICdTY3JlZW4gc3RhcnRlZC4gUGxlYXNlIGNvbm5lY3QgaW4gYW5vdGhlciB0ZXJtaW5hbCB3aXRoICcgXAorICAgICAgICAgICAgJyJzY3JlZW4gLXIgJXMiJyAlIHNfaWQKKyAgICAgICAgaWYgKGQpOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Mb2dFeGVjVFRZKG1zZywgInNjcmVlbiAtciAlcyIgJSBzX2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuNSwgMTApLCBkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLndhcm4obXNnKQorCitjbGFzcyBUbXV4UnVubmluZyhUZXJtaW5hbCk6CisgICAgIiIiT3BlbiBhIG5ldyBwYW5lIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdG11eCB3aW5kb3ciIiIKKyAgICBuYW1lID0gJ3RtdXgtcnVubmluZycKKyAgICBjb21tYW5kID0gJ3RtdXggc3BsaXQtd2luZG93ICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMi43NQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IG9zLmdldGVudignVE1VWCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgcnVubmluZycpCisKKyAgICAgICAgaWYgbm90IGNoZWNrX3RtdXhfcGFuZV9zaXplKCd0bXV4Jyk6CisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZFRlcm1pbmFsKCd0bXV4IHBhbmUgdG9vIHNtYWxsJykKKworICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisKK2NsYXNzIFRtdXhOZXdXaW5kb3coVGVybWluYWwpOgorICAgICIiIk9wZW4gYSBuZXcgd2luZG93IGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdG11eCBzZXNzaW9uIiIiCisgICAgbmFtZSA9ICd0bXV4LW5ldy13aW5kb3cnCisgICAgY29tbWFuZCA9ICd0bXV4IG5ldy13aW5kb3cgLW4gInt0aXRsZX0iICJ7Y29tbWFuZH0iJworICAgIHByaW9yaXR5ID0gMi43MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNoX2NtZCwgdGl0bGU9Tm9uZSwgZW52PU5vbmUsIGQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBiYi51dGlscy53aGljaChvcy5nZXRlbnYoJ1BBVEgnKSwgJ3RtdXgnKToKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkVGVybWluYWwoJ3RtdXggaXMgbm90IGluc3RhbGxlZCcpCisKKyAgICAgICAgaWYgbm90IG9zLmdldGVudignVE1VWCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgcnVubmluZycpCisKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCitjbGFzcyBUbXV4KFRlcm1pbmFsKToKKyAgICAiIiJTdGFydCBhIG5ldyB0bXV4IHNlc3Npb24gYW5kIHdpbmRvdyIiIgorICAgIGNvbW1hbmQgPSAndG11eCBuZXcgLWQgLXMgZGV2c2hlbGwgLW4gZGV2c2hlbGwgIntjb21tYW5kfSInCisgICAgcHJpb3JpdHkgPSAwLjc1CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAgICAgaWYgbm90IGJiLnV0aWxzLndoaWNoKG9zLmdldGVudignUEFUSCcpLCAndG11eCcpOgorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgndG11eCBpcyBub3QgaW5zdGFsbGVkJykKKworICAgICAgICAjIFRPRE86IGNvbnNpZGVyIHVzaW5nIGEgJ2RldnNoZWxsJyBzZXNzaW9uIHNoYXJlZCBhbW9uZ3N0IGFsbAorICAgICAgICAjIGRldnNoZWxscywgaWYgaXQncyBhbHJlYWR5IHRoZXJlLCBhZGQgYSBuZXcgd2luZG93IHRvIGl0LgorICAgICAgICB3aW5kb3dfbmFtZSA9ICdkZXZzaGVsbC0laScgJSBvcy5nZXRwaWQoKQorCisgICAgICAgIHNlbGYuY29tbWFuZCA9ICd0bXV4IG5ldyAtZCAtcyB7MH0gLW4gezB9ICJ7e2NvbW1hbmR9fSInLmZvcm1hdCh3aW5kb3dfbmFtZSkKKyAgICAgICAgVGVybWluYWwuX19pbml0X18oc2VsZiwgc2hfY21kLCB0aXRsZSwgZW52LCBkKQorCisgICAgICAgIGF0dGFjaF9jbWQgPSAndG11eCBhdHQgLXQgezB9Jy5mb3JtYXQod2luZG93X25hbWUpCisgICAgICAgIG1zZyA9ICdUbXV4IHN0YXJ0ZWQuIFBsZWFzZSBjb25uZWN0IGluIGFub3RoZXIgdGVybWluYWwgd2l0aCBgdG11eCBhdHQgLXQgezB9YCcuZm9ybWF0KHdpbmRvd19uYW1lKQorICAgICAgICBpZiBkOgorICAgICAgICAgICAgYmIuZXZlbnQuZmlyZShiYi5ldmVudC5Mb2dFeGVjVFRZKG1zZywgYXR0YWNoX2NtZCwgMC41LCAxMCksIGQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIud2Fybihtc2cpCisKK2NsYXNzIEN1c3RvbShUZXJtaW5hbCk6CisgICAgY29tbWFuZCA9ICdmYWxzZScgIyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIKKyAgICBwcmlvcml0eSA9IDMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlPU5vbmUsIGVudj1Ob25lLCBkPU5vbmUpOgorICAgICAgICBzZWxmLmNvbW1hbmQgPSBkIGFuZCBkLmdldFZhcignT0VfVEVSTUlOQUxfQ1VTVE9NQ01EJywgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5jb21tYW5kOgorICAgICAgICAgICAgaWYgbm90ICd7Y29tbWFuZH0nIGluIHNlbGYuY29tbWFuZDoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmQgKz0gJyB7Y29tbWFuZH0nCisgICAgICAgICAgICBUZXJtaW5hbC5fX2luaXRfXyhzZWxmLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICBsb2dnZXIud2FybignQ3VzdG9tIHRlcm1pbmFsIHdhcyBzdGFydGVkLicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoMSwgJ05vIGN1c3RvbSB0ZXJtaW5hbCAoT0VfVEVSTUlOQUxfQ1VTVE9NQ01EKSBzZXQnKQorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbCgnT0VfVEVSTUlOQUxfQ1VTVE9NQ01EIG5vdCBzZXQnKQorCisKK2RlZiBwcmlvcml0aXplZCgpOgorICAgIHJldHVybiBSZWdpc3RyeS5wcmlvcml0aXplZCgpCisKK2RlZiBzcGF3bl9wcmVmZXJyZWQoc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAiIiJTcGF3biB0aGUgZmlyc3Qgc3VwcG9ydGVkIHRlcm1pbmFsLCBieSBwcmlvcml0eSIiIgorICAgIGZvciB0ZXJtaW5hbCBpbiBwcmlvcml0aXplZCgpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGF3bih0ZXJtaW5hbC5uYW1lLCBzaF9jbWQsIHRpdGxlLCBlbnYsIGQpCisgICAgICAgICAgICBicmVhaworICAgICAgICBleGNlcHQgVW5zdXBwb3J0ZWRUZXJtaW5hbDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgTm9TdXBwb3J0ZWRUZXJtaW5hbHMoKQorCitkZWYgc3Bhd24obmFtZSwgc2hfY21kLCB0aXRsZT1Ob25lLCBlbnY9Tm9uZSwgZD1Ob25lKToKKyAgICAiIiJTcGF3biB0aGUgc3BlY2lmaWVkIHRlcm1pbmFsLCBieSBuYW1lIiIiCisgICAgbG9nZ2VyLmRlYnVnKDEsICdBdHRlbXB0aW5nIHRvIHNwYXduIHRlcm1pbmFsICIlcyInLCBuYW1lKQorICAgIHRyeToKKyAgICAgICAgdGVybWluYWwgPSBSZWdpc3RyeS5yZWdpc3RyeVtuYW1lXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRUZXJtaW5hbChuYW1lKQorCisgICAgcGlwZSA9IHRlcm1pbmFsKHNoX2NtZCwgdGl0bGUsIGVudiwgZCkKKyAgICBvdXRwdXQgPSBwaXBlLmNvbW11bmljYXRlKClbMF0KKyAgICBpZiBwaXBlLnJldHVybmNvZGUgIT0gMDoKKyAgICAgICAgcmFpc2UgRXhlY3V0aW9uRXJyb3Ioc2hfY21kLCBwaXBlLnJldHVybmNvZGUsIG91dHB1dCkKKworZGVmIGNoZWNrX3RtdXhfcGFuZV9zaXplKHRtdXgpOgorICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHN1YgorICAgIHRyeToKKyAgICAgICAgcCA9IHN1Yi5Qb3BlbignJXMgbGlzdC1wYW5lcyAtRiAiI3s/cGFuZV9hY3RpdmUsI3twYW5lX2hlaWdodH0sfSInICUgdG11eCwKKyAgICAgICAgICAgICAgICBzaGVsbD1UcnVlLHN0ZG91dD1zdWIuUElQRSxzdGRlcnI9c3ViLlBJUEUpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNpemUgPSBpbnQob3V0LnN0cmlwKCkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICBpbXBvcnQgZXJybm8KKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorICAgIGlmIHNpemUvMiA+PSAxOToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIGNoZWNrX3Rlcm1pbmFsX3ZlcnNpb24odGVybWluYWxOYW1lKToKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBzdWIKKyAgICB0cnk6CisgICAgICAgIHAgPSBzdWIuUG9wZW4oWydzaCcsICctYycsICclcyAtLXZlcnNpb24nICUgdGVybWluYWxOYW1lXSxzdGRvdXQ9c3ViLlBJUEUsc3RkZXJyPXN1Yi5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICB2ZXJfaW5mbyA9IG91dC5yc3RyaXAoKS5zcGxpdCgnXG4nKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKyAgICB2ZXJudW0gPSBOb25lCisgICAgZm9yIHZlciBpbiB2ZXJfaW5mbzoKKyAgICAgICAgaWYgdmVyLnN0YXJ0c3dpdGgoJ0tvbnNvbGUnKToKKyAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgnICcpWy0xXQorICAgICAgICBpZiB2ZXIuc3RhcnRzd2l0aCgnR05PTUUgVGVybWluYWwnKToKKyAgICAgICAgICAgIHZlcm51bSA9IHZlci5zcGxpdCgnICcpWy0xXQorICAgIHJldHVybiB2ZXJudW0KKworZGVmIGRpc3Ryb19uYW1lKCk6CisgICAgdHJ5OgorICAgICAgICBwID0gUG9wZW4oWydsc2JfcmVsZWFzZScsICctaSddKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBkaXN0cm8gPSBvdXQuc3BsaXQoJzonKVsxXS5zdHJpcCgpLmxvd2VyKCkKKyAgICBleGNlcHQ6CisgICAgICAgIGRpc3RybyA9ICJ1bmtub3duIgorICAgIHJldHVybiBkaXN0cm8KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X2xpY2Vuc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4ODg4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfbGljZW5zZS5weQpAQCAtMCwwICsxLDY4IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvZS5saWNlbnNlCisKK2NsYXNzIFNlZW5WaXNpdG9yKG9lLmxpY2Vuc2UuTGljZW5zZVZpc2l0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zZWVuID0gW10KKyAgICAgICAgb2UubGljZW5zZS5MaWNlbnNlVmlzaXRvci5fX2luaXRfXyhzZWxmKQorCisgICAgZGVmIHZpc2l0X1N0cihzZWxmLCBub2RlKToKKyAgICAgICAgc2VsZi5zZWVuLmFwcGVuZChub2RlLnMpCisKK2NsYXNzIFRlc3RTaW5nbGVMaWNlbnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsaWNlbnNlcyA9IFsKKyAgICAgICAgIkdQTHYyIiwKKyAgICAgICAgIkxHUEwtMi4wIiwKKyAgICAgICAgIkFydGlzdGljIiwKKyAgICAgICAgIk1JVCIsCisgICAgICAgICJHUEx2MysiLAorICAgICAgICAiRk9PX0JBUiIsCisgICAgXQorICAgIGludmFsaWRfbGljZW5zZXMgPSBbIkdQTC9CU0QiXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXJzZShsaWNlbnNlc3RyKToKKyAgICAgICAgdmlzaXRvciA9IFNlZW5WaXNpdG9yKCkKKyAgICAgICAgdmlzaXRvci52aXNpdF9zdHJpbmcobGljZW5zZXN0cikKKyAgICAgICAgcmV0dXJuIHZpc2l0b3Iuc2VlbgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2xpY2Vuc2VzKHNlbGYpOgorICAgICAgICBmb3IgbGljZW5zZSBpbiBzZWxmLmxpY2Vuc2VzOgorICAgICAgICAgICAgbGljZW5zZXMgPSBzZWxmLnBhcnNlKGxpY2Vuc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaWNlbnNlcywgW2xpY2Vuc2VdKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9saWNlbnNlcyhzZWxmKToKKyAgICAgICAgZm9yIGxpY2Vuc2UgaW4gc2VsZi5pbnZhbGlkX2xpY2Vuc2VzOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhvZS5saWNlbnNlLkludmFsaWRMaWNlbnNlKSBhcyBjbToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKGxpY2Vuc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5saWNlbnNlLCBsaWNlbnNlKQorCitjbGFzcyBUZXN0U2ltcGxlQ29tYmluYXRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0ZXN0cyA9IHsKKyAgICAgICAgIkZPTyZCQVIiOiBbIkZPTyIsICJCQVIiXSwKKyAgICAgICAgIkJBWiAmIE1PTyI6IFsiQkFaIiwgIk1PTyJdLAorICAgICAgICAiQUxQSEF8QkVUQSI6IFsiQUxQSEEiXSwKKyAgICAgICAgIkJBWiZNT098Rk9PIjogWyJGT08iXSwKKyAgICAgICAgIkZPTyZCQVJ8QkFaIjogWyJGT08iLCAiQkFSIl0sCisgICAgfQorICAgIHByZWZlcnJlZCA9IFsiQUxQSEEiLCAiRk9PIiwgIkJBUiJdCisKKyAgICBkZWYgdGVzdF90ZXN0cyhzZWxmKToKKyAgICAgICAgZGVmIGNob29zZShhLCBiKToKKyAgICAgICAgICAgIGlmIGFsbChsaWMgaW4gc2VsZi5wcmVmZXJyZWQgZm9yIGxpYyBpbiBiKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYQorCisgICAgICAgIGZvciBsaWNlbnNlLCBleHBlY3RlZCBpbiBzZWxmLnRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBsaWNlbnNlcyA9IG9lLmxpY2Vuc2UuZmxhdHRlbmVkX2xpY2Vuc2VzKGxpY2Vuc2UsIGNob29zZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGxpY2Vuc2VzLCBleHBlY3RlZCkKKworY2xhc3MgVGVzdENvbXBsZXhDb21iaW5hdGlvbnMoVGVzdFNpbXBsZUNvbWJpbmF0aW9ucyk6CisgICAgdGVzdHMgPSB7CisgICAgICAgICJGT08gJiAoQkFSIHwgQkFaKSZNT08iOiBbIkZPTyIsICJCQVIiLCAiTU9PIl0sCisgICAgICAgICIoQUxQSEF8KEJFVEEmVEhFVEEpfE9NRUdBKSZERUxUQSI6IFsiT01FR0EiLCAiREVMVEEiXSwKKyAgICAgICAgIigoQUxQSEF8QkVUQSkmRk9PKXxCQVoiOiBbIkJFVEEiLCAiRk9PIl0sCisgICAgICAgICIoR1BMLTIuMHxQcm9wcmlldGFyeSkmQlNELTQtY2xhdXNlJk1JVCI6IFsiR1BMLTIuMCIsICJCU0QtNC1jbGF1c2UiLCAiTUlUIl0sCisgICAgfQorICAgIHByZWZlcnJlZCA9IFsiQkFSIiwgIk9NRUdBIiwgIkJFVEEiLCAiR1BMLTIuMCJdCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3BhdGgucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q0MWNlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfcGF0aC5weQpAQCAtMCwwICsxLDg5IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvZSwgb2UucGF0aAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgb3MKK2ltcG9ydCBlcnJubworaW1wb3J0IHNodXRpbAorCitjbGFzcyBUZXN0UmVhbFBhdGgodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIERJUlMgPSBbICJhIiwgImIiLCAiZXRjIiwgInNiaW4iLCAidXNyIiwgInVzci9iaW4iLCAidXNyL2JpblgiLCAidXNyL3NiaW4iLCAidXNyL2luY2x1ZGUiLCAidXNyL2luY2x1ZGUvZ2RibSIgXQorICAgIEZJTEVTID0gWyAiZXRjL3Bhc3N3ZCIsICJiL2ZpbGUiIF0KKyAgICBMSU5LUyA9IFsKKyAgICAgICAgKCAiYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiwgICAgICAgICAgICAgIi91c3IvYmluIiApLAorICAgICAgICAoICJiaW5YIiwgICAgICAgICAgICAidXNyL2JpblgiLCAgICAgICAgICAgICAiL3Vzci9iaW5YIiApLAorICAgICAgICAoICJjIiwgICAgICAgICAgICAgICAiYnJva2VuIiwgICAgICAgICAgICAgICAiL2Jyb2tlbiIgKSwKKyAgICAgICAgKCAiZXRjL3Bhc3N3ZC0xIiwgICAgInBhc3N3ZCIsICAgICAgICAgICAgICAgIi9ldGMvcGFzc3dkIiApLAorICAgICAgICAoICJldGMvcGFzc3dkLTIiLCAgICAicGFzc3dkLTEiLCAgICAgICAgICAgICAiL2V0Yy9wYXNzd2QiICksCisgICAgICAgICggImV0Yy9wYXNzd2QtMyIsICAgICIvZXRjL3Bhc3N3ZC0xIiwgICAgICAgICIvZXRjL3Bhc3N3ZCIgKSwKKyAgICAgICAgKCAiZXRjL3NoYWRvdy0xIiwgICAgIi9ldGMvc2hhZG93IiwgICAgICAgICAgIi9ldGMvc2hhZG93IiApLAorICAgICAgICAoICJldGMvc2hhZG93LTIiLCAgICAiL2V0Yy9zaGFkb3ctMSIsICAgICAgICAiL2V0Yy9zaGFkb3ciICksCisgICAgICAgICggInByb2ctQSIsICAgICAgICAgICJiaW4vcHJvZy1BIiwgICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUEiICksCisgICAgICAgICggInByb2ctQiIsICAgICAgICAgICIvYmluL3Byb2ctQiIsICAgICAgICAgICIvdXNyL2Jpbi9wcm9nLUIiICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1DIiwgICIuLi8uLi9zYmluL3Byb2ctQyIsICAgICIvc2Jpbi9wcm9nLUMiICksCisgICAgICAgICggInVzci9iaW4vcHJvZy1EIiwgICIvc2Jpbi9wcm9nLUQiLCAgICAgICAgICIvc2Jpbi9wcm9nLUQiICksCisgICAgICAgICggInVzci9iaW5YL3Byb2ctRSIsICIuLi9zYmluL3Byb2ctRSIsICAgICAgIE5vbmUgKSwKKyAgICAgICAgKCAidXNyL2Jpbi9wcm9nLUYiLCAgIi4uLy4uLy4uL3NiaW4vcHJvZy1GIiwgIi9zYmluL3Byb2ctRiIgKSwKKyAgICAgICAgKCAibG9vcCIsICAgICAgICAgICAgImEvbG9vcCIsICAgICAgICAgICAgICAgTm9uZSApLAorICAgICAgICAoICJhL2xvb3AiLCAgICAgICAgICAiLi4vbG9vcCIsICAgICAgICAgICAgICBOb25lICksCisgICAgICAgICggImIvdGVzdCIsICAgICAgICAgICJmaWxlL2ZvbyIsICAgICAgICAgICAgICIvYi9maWxlL2ZvbyIgKSwKKyAgICBdCisKKyAgICBMSU5LU19QSFlTID0gWworICAgICAgICAoICIuLyIsICAgICAgICAgICIvIiwgICAgICAgICAgICAgICAgIiIgKSwKKyAgICAgICAgKCAiYmluWC9wcm9nLUUiLCAiL3Vzci9zYmluL3Byb2ctRSIsICIvc2Jpbi9wcm9nLUUiICksCisgICAgXQorCisgICAgRVhDRVBUSU9OUyA9IFsKKyAgICAgICAgKCAibG9vcCIsICAgZXJybm8uRUxPT1AgKSwKKyAgICAgICAgKCAiYi90ZXN0IiwgZXJybm8uRU5PRU5UICksCisgICAgXQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICNvcy5zeXN0ZW0oInRyZWUgLUYgJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudG1wZGlyKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudG1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXggPSAib2UtdGVzdF9wYXRoIikKKyAgICAgICAgc2VsZi5yb290ID0gb3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiUiIpCisKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYudG1wZGlyLCAiX3JlYWwiKSkKKyAgICAgICAgb3Muc3ltbGluaygiX3JlYWwiLCBzZWxmLnJvb3QpCisKKyAgICAgICAgZm9yIGQgaW4gc2VsZi5ESVJTOgorICAgICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZCkpCisgICAgICAgIGZvciBmIGluIHNlbGYuRklMRVM6CisgICAgICAgICAgICBmaWxlKG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGYpLCAidyIpCisgICAgICAgIGZvciBsIGluIHNlbGYuTElOS1M6CisgICAgICAgICAgICBvcy5zeW1saW5rKGxbMV0sIG9zLnBhdGguam9pbihzZWxmLnJvb3QsIGxbMF0pKQorCisgICAgZGVmIF9fcmVhbHBhdGgoc2VsZiwgZmlsZSwgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBUcnVlKToKKyAgICAgICAgcmV0dXJuIG9lLnBhdGgucmVhbHBhdGgob3MucGF0aC5qb2luKHNlbGYucm9vdCwgZmlsZSksIHNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3BoeXNkaXIsIGFzc3VtZV9kaXIgPSBhc3N1bWVfZGlyKQorCisgICAgZGVmIHRlc3Rfbm9ybShzZWxmKToKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LUzoKKyAgICAgICAgICAgIGlmIGxbMl0gPT0gTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICB0YXJnZXRfcCA9IHNlbGYuX19yZWFscGF0aChsWzBdLCBUcnVlKQorICAgICAgICAgICAgdGFyZ2V0X2wgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgRmFsc2UpCisKKyAgICAgICAgICAgIGlmIGxbMl0gIT0gRmFsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJnZXRfcCwgdGFyZ2V0X2wpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsWzJdLCB0YXJnZXRfcFtsZW4oc2VsZi5yb290KTpdKQorCisgICAgZGVmIHRlc3RfcGh5cyhzZWxmKToKKyAgICAgICAgZm9yIGwgaW4gc2VsZi5MSU5LU19QSFlTOgorICAgICAgICAgICAgdGFyZ2V0X3AgPSBzZWxmLl9fcmVhbHBhdGgobFswXSwgVHJ1ZSkKKyAgICAgICAgICAgIHRhcmdldF9sID0gc2VsZi5fX3JlYWxwYXRoKGxbMF0sIEZhbHNlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMV0sIHRhcmdldF9wW2xlbihzZWxmLnJvb3QpOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxbMl0sIHRhcmdldF9sW2xlbihzZWxmLnJvb3QpOl0pCisKKyAgICBkZWYgdGVzdF9sb29wKHNlbGYpOgorICAgICAgICBmb3IgZSBpbiBzZWxmLkVYQ0VQVElPTlM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChPU0Vycm9yLCByJ1xbRXJybm8gJXVcXScgJSBlWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX3JlYWxwYXRoLCBlWzBdLCBGYWxzZSwgRmFsc2UpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3R5cGVzLnB5IGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF90eXBlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjdjYzMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdGVzdHMvdGVzdF90eXBlcy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2UubWFrZXR5cGUgaW1wb3J0IGNyZWF0ZSwgZmFjdG9yeQorCitjbGFzcyBUZXN0VHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBhc3NlcnRJc0luc3RhbmNlKHNlbGYsIG9iaiwgY2xzKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9iaiwgY2xzKSkKKworICAgIGRlZiBhc3NlcnRJc05vdChzZWxmLCBvYmosIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNzZXJ0RmFsc2Uob2JqIGlzIG90aGVyKQorCisgICAgZGVmIGFzc2VydEZhY3RvcnlDcmVhdGVkKHNlbGYsIHZhbHVlLCB0eXBlLCAqKmZsYWdzKToKKyAgICAgICAgY2xzID0gZmFjdG9yeSh0eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGNscywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNyZWF0ZSh2YWx1ZSwgdHlwZSwgKipmbGFncyksIGNscykKKworY2xhc3MgVGVzdEJvb2xlYW5UeXBlKFRlc3RUeXBlcyk6CisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY3JlYXRlLCAnJywgJ2Jvb2xlYW4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjcmVhdGUsICdmb28nLCAnYm9vbGVhbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlLCBvYmplY3QoKSwgJ2Jvb2xlYW4nKQorCisgICAgZGVmIHRlc3RfdHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgneScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ3llcycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJzEnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0JywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNyZWF0ZSgndHJ1ZScsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGUoJ1RSVUUnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3JlYXRlKCd0cnVFJywgJ2Jvb2xlYW4nKSkKKworICAgIGRlZiB0ZXN0X2ZhbHNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnbicsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCdubycsICdib29sZWFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3JlYXRlKCcwJywgJ2Jvb2xlYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjcmVhdGUoJ2YnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFsc2UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnRkFMU0UnLCAnYm9vbGVhbicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNyZWF0ZSgnZmFMc2UnLCAnYm9vbGVhbicpKQorCisgICAgZGVmIHRlc3RfYm9vbF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjcmVhdGUoJ24nLCAnYm9vbGVhbicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZSgneScsICdib29sZWFuJyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlKCd5JywgJ2Jvb2xlYW4nKSwgRmFsc2UpCisKK2NsYXNzIFRlc3RMaXN0KFRlc3RUeXBlcyk6CisgICAgZGVmIGFzc2VydExpc3RFcXVhbChzZWxmLCB2YWx1ZSwgdmFsaWQsIHNlcD1Ob25lKToKKyAgICAgICAgb2JqID0gY3JlYXRlKHZhbHVlLCAnbGlzdCcsIHNlcGFyYXRvcj1zZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLCB2YWxpZCkKKyAgICAgICAgaWYgc2VwIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc2VwYXJhdG9yLCBzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG9iaiksIG9iai5zZXBhcmF0b3Iuam9pbihvYmopKQorCisgICAgZGVmIHRlc3RfbGlzdF9ub3NlcChzZWxmKToKKyAgICAgICAgdGVzdGxpc3QgPSBbJ2FscGhhJywgJ2JldGEnLCAndGhldGEnXQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgYmV0YSB0aGV0YScsIHRlc3RsaXN0KQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnYWxwaGEgIGJldGFcdHRoZXRhJywgdGVzdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKCdhbHBoYScsIFsnYWxwaGEnXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfdXNlcnNlcChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoJ2ZvbzpiYXInLCBbJ2ZvbycsICdiYXInXSwgJzonKQorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCgnZm9vOmJhcjpiYXonLCBbJ2ZvbycsICdiYXInLCAnYmF6J10sICc6JykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lL3Rlc3RzL3Rlc3RfdXRpbHMucHkgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWFjNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90ZXN0cy90ZXN0X3V0aWxzLnB5CkBAIC0wLDAgKzEsNTEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZS51dGlscyBpbXBvcnQgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0KKworY2xhc3MgVGVzdFBhY2thZ2VzRmlsdGVyT3V0U3lzdGVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgb2UudXRpbHMucGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0gd29ya3MuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpbXBvcnQgYmIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ2Fubm90IGltcG9ydCBiYiIpCisKKyAgICAgICAgZCA9IGJiLmRhdGFfc21hcnQuRGF0YVNtYXJ0KCkKKyAgICAgICAgZC5zZXRWYXIoIlBOIiwgImZvbyIpCisKKyAgICAgICAgZC5zZXRWYXIoIlBBQ0tBR0VTIiwgImZvbyBmb28tZG9jIGZvby1kZXYiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kb2MgZm9vLWRhdGEgZm9vLWRldiIpCisgICAgICAgIHBrZ3MgPSBwYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ3MsIFsiZm9vLWRhdGEiXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1sb2NhbGUtZW4tZ2IiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbXSkKKworICAgICAgICBkLnNldFZhcigiUEFDS0FHRVMiLCAiZm9vIGZvby1kYXRhIGZvby1sb2NhbGUtZW4tZ2IiKQorICAgICAgICBwa2dzID0gcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwa2dzLCBbImZvby1kYXRhIl0pCisKKworY2xhc3MgVGVzdFRyaW1WZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF92ZXJzaW9uX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKE5vbmUsIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHRyaW1fdmVyc2lvbigoMSwgMiwgMyksIDIpCisKKyAgICBkZWYgdGVzdF9udW1fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0cmltX3ZlcnNpb24oIjEuMi4zIiwgLTEpCisKKyAgICBkZWYgdGVzdF92YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMSksICIxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgMiksICIxLjIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyaW1fdmVyc2lvbigiMS4yLjMiLCAzKSwgIjEuMi4zIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmltX3ZlcnNpb24oIjEuMi4zIiwgNCksICIxLjIuMyIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZS90eXBlcy5weSBiL21ldGEvbGliL29lL3R5cGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNDdjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZS90eXBlcy5weQpAQCAtMCwwICsxLDE1MyBAQAoraW1wb3J0IGVycm5vCitpbXBvcnQgcmUKK2ltcG9ydCBvcworCisKK2NsYXNzIE9FTGlzdChsaXN0KToKKyAgICAiIiJPcGVuRW1iZWRkZWQgJ2xpc3QnIHR5cGUKKworICAgIEFjdHMgYXMgYW4gb3JkaW5hcnkgbGlzdCwgYnV0IGlzIGNvbnN0cnVjdGVkIGZyb20gYSBzdHJpbmcgdmFsdWUgYW5kIGEKKyAgICBzZXBhcmF0b3IgKG9wdGlvbmFsKSwgYW5kIHJlLWpvaW5zIGl0c2VsZiB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZyB3aXRoCisgICAgc3RyKCkuICBTZXQgdGhlIHZhcmlhYmxlIHR5cGUgZmxhZyB0byAnbGlzdCcgdG8gdXNlIHRoaXMgdHlwZSwgYW5kIHRoZQorICAgICdzZXBhcmF0b3InIGZsYWcgbWF5IGJlIHNwZWNpZmllZCAoZGVmYXVsdGluZyB0byB3aGl0ZXNwYWNlKS4iIiIKKworICAgIG5hbWUgPSAibGlzdCIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgc2VwYXJhdG9yID0gTm9uZSk6CisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmLCB2YWx1ZS5zcGxpdChzZXBhcmF0b3IpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGlzdC5fX2luaXRfXyhzZWxmKQorCisgICAgICAgIGlmIHNlcGFyYXRvciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5zZXBhcmF0b3IgPSAiICIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2VwYXJhdG9yID0gc2VwYXJhdG9yCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VwYXJhdG9yLmpvaW4oc2VsZikKKworZGVmIGNob2ljZSh2YWx1ZSwgY2hvaWNlcyk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdjaG9pY2UnIHR5cGUKKworICAgIEFjdHMgYXMgYSBtdWx0aXBsZSBjaG9pY2UgZm9yIHRoZSB1c2VyLiAgVG8gdXNlIHRoaXMsIHNldCB0aGUgdmFyaWFibGUKKyAgICB0eXBlIGZsYWcgdG8gJ2Nob2ljZScsIGFuZCBzZXQgdGhlICdjaG9pY2VzJyBmbGFnIHRvIGEgc3BhY2Ugc2VwYXJhdGVkCisgICAgbGlzdCBvZiB2YWxpZCB2YWx1ZXMuIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNob2ljZSBhY2NlcHRzIGEgc3RyaW5nLCBub3QgJyVzJyIgJSB0eXBlKHZhbHVlKSkKKworICAgIHZhbHVlID0gdmFsdWUubG93ZXIoKQorICAgIGNob2ljZXMgPSBjaG9pY2VzLmxvd2VyKCkKKyAgICBpZiB2YWx1ZSBub3QgaW4gY2hvaWNlcy5zcGxpdCgpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGNob2ljZSAnJXMnLiAgVmFsaWQgY2hvaWNlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGNob2ljZXMpKQorICAgIHJldHVybiB2YWx1ZQorCitjbGFzcyBOb01hdGNoKG9iamVjdCk6CisgICAgIiIiU3R1YiBweXRob24gcmVnZXggcGF0dGVybiBvYmplY3Qgd2hpY2ggbmV2ZXIgbWF0Y2hlcyBhbnl0aGluZyIiIgorICAgIGRlZiBmaW5kYWxsKHNlbGYsIHN0cmluZywgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZmluZGl0ZXIoc2VsZiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBtYXRjaChzZWxmLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZWFyY2goc2VsZiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzcGxpdChzZWxmLCBzdHJpbmcsIG1heHNwbGl0PTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTApOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworTm9NYXRjaCA9IE5vTWF0Y2goKQorCitkZWYgcmVnZXgodmFsdWUsIHJlZ2V4ZmxhZ3M9Tm9uZSk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdyZWdleCcgdHlwZQorCisgICAgQWN0cyBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgcmV0dXJuaW5nIHRoZSBwcmUtY29tcGlsZWQgcmVndWxhcgorICAgIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3QuICBUbyB1c2UgdGhpcyB0eXBlLCBzZXQgdGhlIHZhcmlhYmxlIHR5cGUgZmxhZworICAgIHRvICdyZWdleCcsIGFuZCBvcHRpb25hbGx5LCBzZXQgdGhlICdyZWdleGZsYWdzJyB0eXBlIHRvIGEgc3BhY2Ugc2VwYXJhdGVkCisgICAgbGlzdCBvZiB0aGUgZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIChlLmcuCisgICAgRk9PW3JlZ2V4ZmxhZ3NdICs9ICdpZ25vcmVjYXNlJykuICBTZWUgdGhlIHB5dGhvbiBkb2N1bWVudGF0aW9uIG9uIHRoZQorICAgICdyZScgbW9kdWxlIGZvciBhIGxpc3Qgb2YgdmFsaWQgZmxhZ3MuIiIiCisKKyAgICBmbGFndmFsID0gMAorICAgIGlmIHJlZ2V4ZmxhZ3M6CisgICAgICAgIGZvciBmbGFnIGluIHJlZ2V4ZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgICAgIGZsYWcgPSBmbGFnLnVwcGVyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmbGFndmFsIHw9IGdldGF0dHIocmUsIGZsYWcpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCByZWdleCBmbGFnICclcyciICUgZmxhZykKKworICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgIyBMZXQncyBlbnN1cmUgdGhhdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYW4gdW5kZWZpbmVkIG9yIGVtcHR5CisgICAgICAgICMgdmFyaWFibGUgaXMgdG8gbWF0Y2ggbm90aGluZy4gSWYgdGhlIHVzZXIgZXhwbGljaXRseSB3YW50cyB0byBtYXRjaAorICAgICAgICAjIGFueXRoaW5nLCB0aGV5IGNhbiBtYXRjaCAnLionIGluc3RlYWQuCisgICAgICAgIHJldHVybiBOb01hdGNoCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiByZS5jb21waWxlKHZhbHVlLCBmbGFndmFsKQorICAgIGV4Y2VwdCByZS5lcnJvciBhcyBleGM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmVnZXggdmFsdWUgJyVzJzogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUsIGV4Yy5hcmdzWzBdKSkKKworZGVmIGJvb2xlYW4odmFsdWUpOgorICAgICIiIk9wZW5FbWJlZGRlZCAnYm9vbGVhbicgdHlwZQorCisgICAgVmFsaWQgdmFsdWVzIGZvciB0cnVlOiAneWVzJywgJ3knLCAndHJ1ZScsICd0JywgJzEnCisgICAgVmFsaWQgdmFsdWVzIGZvciBmYWxzZTogJ25vJywgJ24nLCAnZmFsc2UnLCAnZicsICcwJworICAgICIiIgorCisgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIGJhc2VzdHJpbmcpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImJvb2xlYW4gYWNjZXB0cyBhIHN0cmluZywgbm90ICclcyciICUgdHlwZSh2YWx1ZSkpCisKKyAgICB2YWx1ZSA9IHZhbHVlLmxvd2VyKCkKKyAgICBpZiB2YWx1ZSBpbiAoJ3llcycsICd5JywgJ3RydWUnLCAndCcsICcxJyk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxpZiB2YWx1ZSBpbiAoJ25vJywgJ24nLCAnZmFsc2UnLCAnZicsICcwJyk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgYm9vbGVhbiB2YWx1ZSAnJXMnIiAlIHZhbHVlKQorCitkZWYgaW50ZWdlcih2YWx1ZSwgbnVtYmVyYmFzZT0xMCk6CisgICAgIiIiT3BlbkVtYmVkZGVkICdpbnRlZ2VyJyB0eXBlCisKKyAgICBEZWZhdWx0cyB0byBiYXNlIDEwLCBidXQgdGhpcyBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBvcHRpb25hbAorICAgICdudW1iZXJiYXNlJyBmbGFnLiIiIgorCisgICAgcmV0dXJuIGludCh2YWx1ZSwgaW50KG51bWJlcmJhc2UpKQorCitfZmxvYXQgPSBmbG9hdAorZGVmIGZsb2F0KHZhbHVlLCBmcm9taGV4PSdmYWxzZScpOgorICAgICIiIk9wZW5FbWJlZGRlZCBmbG9hdGluZyBwb2ludCB0eXBlCisKKyAgICBUbyB1c2UgdGhpcyB0eXBlLCBzZXQgdGhlIHR5cGUgZmxhZyB0byAnZmxvYXQnLCBhbmQgb3B0aW9uYWxseSBzZXQgdGhlCisgICAgJ2Zyb21oZXgnIGZsYWcgdG8gYSB0cnVlIHZhbHVlIChvYmV5aW5nIHRoZSBzYW1lIHJ1bGVzIGFzIGZvciB0aGUKKyAgICAnYm9vbGVhbicgdHlwZSkgaWYgdGhlIHZhbHVlIGlzIGluIGJhc2UgMTYgcmF0aGVyIHRoYW4gYmFzZSAxMC4iIiIKKworICAgIGlmIGJvb2xlYW4oZnJvbWhleCk6CisgICAgICAgIHJldHVybiBfZmxvYXQuZnJvbWhleCh2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX2Zsb2F0KHZhbHVlKQorCitkZWYgcGF0aCh2YWx1ZSwgcmVsYXRpdmV0bz0nJywgbm9ybWFsaXplPSd0cnVlJywgbXVzdGV4aXN0PSdmYWxzZScpOgorICAgIHZhbHVlID0gb3MucGF0aC5qb2luKHJlbGF0aXZldG8sIHZhbHVlKQorCisgICAgaWYgYm9vbGVhbihub3JtYWxpemUpOgorICAgICAgICB2YWx1ZSA9IG9zLnBhdGgubm9ybXBhdGgodmFsdWUpCisKKyAgICBpZiBib29sZWFuKG11c3RleGlzdCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9wZW4odmFsdWUsICdyJykKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ7MH06IHsxfSIuZm9ybWF0KHZhbHVlLCBvcy5zdHJlcnJvcihlcnJuby5FTk9FTlQpKSkKKworICAgIHJldHVybiB2YWx1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2UvdXRpbHMucHkgYi9tZXRhL2xpYi9vZS91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWUwODdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2UvdXRpbHMucHkKQEAgLTAsMCArMSwyNzMgQEAKK3RyeToKKyAgICAjIFB5dGhvbiAyCisgICAgaW1wb3J0IGNvbW1hbmRzIGFzIGNtZHN0YXR1cworZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHl0aG9uIDMKKyAgICBpbXBvcnQgc3VicHJvY2VzcyBhcyBjbWRzdGF0dXMKKworZGVmIHJlYWRfZmlsZShmaWxlbmFtZSk6CisgICAgdHJ5OgorICAgICAgICBmID0gb3BlbiggZmlsZW5hbWUsICJyIiApCisgICAgZXhjZXB0IElPRXJyb3IgYXMgcmVhc29uOgorICAgICAgICByZXR1cm4gIiIgIyBXQVJOSU5HOiBjYW4ndCByYWlzZSBhbiBlcnJvciBub3cgYmVjYXVzZSBvZiB0aGUgbmV3IFJERVBFTkRTIGhhbmRsaW5nLiBUaGlzIGlzIGEgYml0IHVnbHkuIDpNOgorICAgIGVsc2U6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5zdHJpcCgpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJldHVybiBOb25lCisKK2RlZiBpZmVsc2UoY29uZGl0aW9uLCBpZnRydWUgPSBUcnVlLCBpZmZhbHNlID0gRmFsc2UpOgorICAgIGlmIGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIGlmdHJ1ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBpZmZhbHNlCisKK2RlZiBjb25kaXRpb25hbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICBpZiBkLmdldFZhcih2YXJpYWJsZSwxKSA9PSBjaGVja3ZhbHVlOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGxlc3Nfb3JfZXF1YWwodmFyaWFibGUsIGNoZWNrdmFsdWUsIHRydWV2YWx1ZSwgZmFsc2V2YWx1ZSwgZCk6CisgICAgaWYgZmxvYXQoZC5nZXRWYXIodmFyaWFibGUsMSkpIDw9IGZsb2F0KGNoZWNrdmFsdWUpOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIHZlcnNpb25fbGVzc19vcl9lcXVhbCh2YXJpYWJsZSwgY2hlY2t2YWx1ZSwgdHJ1ZXZhbHVlLCBmYWxzZXZhbHVlLCBkKToKKyAgICByZXN1bHQgPSBiYi51dGlscy52ZXJjbXBfc3RyaW5nKGQuZ2V0VmFyKHZhcmlhYmxlLFRydWUpLCBjaGVja3ZhbHVlKQorICAgIGlmIHJlc3VsdCA8PSAwOgorICAgICAgICByZXR1cm4gdHJ1ZXZhbHVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGZhbHNldmFsdWUKKworZGVmIGJvdGhfY29udGFpbih2YXJpYWJsZTEsIHZhcmlhYmxlMiwgY2hlY2t2YWx1ZSwgZCk6CisgICAgdmFsMSA9IGQuZ2V0VmFyKHZhcmlhYmxlMSwgVHJ1ZSkKKyAgICB2YWwyID0gZC5nZXRWYXIodmFyaWFibGUyLCBUcnVlKQorICAgIHZhbDEgPSBzZXQodmFsMS5zcGxpdCgpKQorICAgIHZhbDIgPSBzZXQodmFsMi5zcGxpdCgpKQorICAgIGlmIGlzaW5zdGFuY2UoY2hlY2t2YWx1ZSwgYmFzZXN0cmluZyk6CisgICAgICAgIGNoZWNrdmFsdWUgPSBzZXQoY2hlY2t2YWx1ZS5zcGxpdCgpKQorICAgIGVsc2U6CisgICAgICAgIGNoZWNrdmFsdWUgPSBzZXQoY2hlY2t2YWx1ZSkKKyAgICBpZiBjaGVja3ZhbHVlLmlzc3Vic2V0KHZhbDEpIGFuZCBjaGVja3ZhbHVlLmlzc3Vic2V0KHZhbDIpOgorICAgICAgICByZXR1cm4gIiAiLmpvaW4oY2hlY2t2YWx1ZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gIiIKKworZGVmIHNldF9pbnRlcnNlY3QodmFyaWFibGUxLCB2YXJpYWJsZTIsIGQpOgorICAgICIiIgorICAgIEV4cGFuZCBib3RoIHZhcmlhYmxlcywgaW50ZXJwcmV0IHRoZW0gYXMgbGlzdHMgb2Ygc3RyaW5ncywgYW5kIHJldHVybiB0aGUKKyAgICBpbnRlcnNlY3Rpb24gYXMgYSBmbGF0dGVuZWQgc3RyaW5nLgorCisgICAgRm9yIGV4YW1wbGU6CisgICAgczEgPSAiYSBiIGMiCisgICAgczIgPSAiYiBjIGQiCisgICAgczMgPSBzZXRfaW50ZXJzZWN0KHMxLCBzMikKKyAgICA9PiBzMyA9ICJiIGMiCisgICAgIiIiCisgICAgdmFsMSA9IHNldChkLmdldFZhcih2YXJpYWJsZTEsIFRydWUpLnNwbGl0KCkpCisgICAgdmFsMiA9IHNldChkLmdldFZhcih2YXJpYWJsZTIsIFRydWUpLnNwbGl0KCkpCisgICAgcmV0dXJuICIgIi5qb2luKHZhbDEgJiB2YWwyKQorCitkZWYgcHJ1bmVfc3VmZml4KHZhciwgc3VmZml4ZXMsIGQpOgorICAgICMgU2VlIGlmIHZhciBlbmRzIHdpdGggYW55IG9mIHRoZSBzdWZmaXhlcyBsaXN0ZWQgYW5kCisgICAgIyByZW1vdmUgaXQgaWYgZm91bmQKKyAgICBmb3Igc3VmZml4IGluIHN1ZmZpeGVzOgorICAgICAgICBpZiB2YXIuZW5kc3dpdGgoc3VmZml4KToKKyAgICAgICAgICAgIHZhciA9IHZhci5yZXBsYWNlKHN1ZmZpeCwgIiIpCisKKyAgICBwcmVmaXggPSBkLmdldFZhcigiTUxQUkVGSVgiLCBUcnVlKQorICAgIGlmIHByZWZpeCBhbmQgdmFyLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgdmFyID0gdmFyLnJlcGxhY2UocHJlZml4LCAiIikKKworICAgIHJldHVybiB2YXIKKworZGVmIHN0cl9maWx0ZXIoZiwgc3RyLCBkKToKKyAgICBmcm9tIHJlIGltcG9ydCBtYXRjaAorICAgIHJldHVybiAiICIuam9pbihmaWx0ZXIobGFtYmRhIHg6IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisKK2RlZiBzdHJfZmlsdGVyX291dChmLCBzdHIsIGQpOgorICAgIGZyb20gcmUgaW1wb3J0IG1hdGNoCisgICAgcmV0dXJuICIgIi5qb2luKGZpbHRlcihsYW1iZGEgeDogbm90IG1hdGNoKGYsIHgsIDApLCBzdHIuc3BsaXQoKSkpCisKK2RlZiBwYXJhbV9ib29sKGNmZywgZmllbGQsIGRmbHQgPSBOb25lKToKKyAgICAiIiJMb29rdXAgPGZpZWxkPiBpbiA8Y2ZnPiBtYXAgYW5kIGNvbnZlcnQgaXQgdG8gYSBib29sZWFuOyB0YWtlCisgICAgPGRmbHQ+IHdoZW4gdGhpcyA8ZmllbGQ+IGRvZXMgbm90IGV4aXN0IiIiCisgICAgdmFsdWUgPSBjZmcuZ2V0KGZpZWxkLCBkZmx0KQorICAgIHN0cnZhbHVlID0gc3RyKHZhbHVlKS5sb3dlcigpCisgICAgaWYgc3RydmFsdWUgaW4gKCd5ZXMnLCAneScsICd0cnVlJywgJ3QnLCAnMScpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGVsaWYgc3RydmFsdWUgaW4gKCdubycsICduJywgJ2ZhbHNlJywgJ2YnLCAnMCcpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIHZhbHVlIGZvciBib29sZWFuIHBhcmFtZXRlciAnJXMnOiAnJXMnIiAlIChmaWVsZCwgdmFsdWUpKQorCitkZWYgaW5oZXJpdHMoZCwgKmNsYXNzZXMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBtZXRhZGF0YSBpbmhlcml0cyBhbnkgb2YgdGhlIHNwZWNpZmllZCBjbGFzc2VzIiIiCisgICAgcmV0dXJuIGFueShiYi5kYXRhLmluaGVyaXRzX2NsYXNzKGNscywgZCkgZm9yIGNscyBpbiBjbGFzc2VzKQorCitkZWYgZmVhdHVyZXNfYmFja2ZpbGwodmFyLGQpOgorICAgICMgVGhpcyBjb25zdHJ1Y3QgYWxsb3dzIHRoZSBhZGRpdGlvbiBvZiBuZXcgZmVhdHVyZXMgdG8gdmFyaWFibGUgc3BlY2lmaWVkCisgICAgIyBhcyB2YXIKKyAgICAjIEV4YW1wbGUgZm9yIHZhciA9ICJESVNUUk9fRkVBVFVSRVMiCisgICAgIyBUaGlzIGNvbnN0cnVjdCBhbGxvd3MgdGhlIGFkZGl0aW9uIG9mIG5ldyBmZWF0dXJlcyB0byBESVNUUk9fRkVBVFVSRVMKKyAgICAjIHRoYXQgaWYgbm90IHByZXNlbnQgd291bGQgZGlzYWJsZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5LCB3aXRob3V0CisgICAgIyBkaXN0dXJiaW5nIGRpc3RyaWJ1dGlvbnMgdGhhdCBoYXZlIGFscmVhZHkgc2V0IERJU1RST19GRUFUVVJFUy4KKyAgICAjIERpc3RyaWJ1dGlvbnMgd2FudGluZyB0byBlbGlkZSBhIHZhbHVlIGluIERJU1RST19GRUFUVVJFU19CQUNLRklMTCBzaG91bGQKKyAgICAjIGFkZCB0aGUgZmVhdHVyZSB0byBESVNUUk9fRkVBVFVSRVNfQkFDS0ZJTExfQ09OU0lERVJFRAorICAgIGZlYXR1cmVzID0gKGQuZ2V0VmFyKHZhciwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBiYWNrZmlsbCA9IChkLmdldFZhcih2YXIrIl9CQUNLRklMTCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgY29uc2lkZXJlZCA9IChkLmdldFZhcih2YXIrIl9CQUNLRklMTF9DT05TSURFUkVEIiwgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKworICAgIGFkZGZlYXR1cmVzID0gW10KKyAgICBmb3IgZmVhdHVyZSBpbiBiYWNrZmlsbDoKKyAgICAgICAgaWYgZmVhdHVyZSBub3QgaW4gZmVhdHVyZXMgYW5kIGZlYXR1cmUgbm90IGluIGNvbnNpZGVyZWQ6CisgICAgICAgICAgICBhZGRmZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSkKKworICAgIGlmIGFkZGZlYXR1cmVzOgorICAgICAgICBkLmFwcGVuZFZhcih2YXIsICIgIiArICIgIi5qb2luKGFkZGZlYXR1cmVzKSkKKworCitkZWYgcGFja2FnZXNfZmlsdGVyX291dF9zeXN0ZW0oZCk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgbGlzdCBvZiBwYWNrYWdlcyBmcm9tIFBBQ0tBR0VTIHdpdGggdGhlICJzeXN0ZW0iIHBhY2thZ2VzIHN1Y2ggYXMKKyAgICBQTi1kYmcgUE4tZG9jIFBOLWxvY2FsZS1lYi1nYiByZW1vdmVkLgorICAgICIiIgorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBibGFja2xpc3QgPSBtYXAobGFtYmRhIHN1ZmZpeDogcG4gKyBzdWZmaXgsICgnJywgJy1kYmcnLCAnLWRldicsICctZG9jJywgJy1sb2NhbGUnLCAnLXN0YXRpY2RldicpKQorICAgIGxvY2FsZXBrZyA9IHBuICsgIi1sb2NhbGUtIgorICAgIHBrZ3MgPSBbXQorCisgICAgZm9yIHBrZyBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBpZiBwa2cgbm90IGluIGJsYWNrbGlzdCBhbmQgbG9jYWxlcGtnIG5vdCBpbiBwa2c6CisgICAgICAgICAgICBwa2dzLmFwcGVuZChwa2cpCisgICAgcmV0dXJuIHBrZ3MKKworZGVmIGdldHN0YXR1c291dHB1dChjbWQpOgorICAgIHJldHVybiBjbWRzdGF0dXMuZ2V0c3RhdHVzb3V0cHV0KGNtZCkKKworCitkZWYgdHJpbV92ZXJzaW9uKHZlcnNpb24sIG51bV9wYXJ0cz0yKToKKyAgICAiIiIKKyAgICBSZXR1cm4ganVzdCB0aGUgZmlyc3QgPG51bV9wYXJ0cz4gb2YgPHZlcnNpb24+LCBzcGxpdCBieSBwZXJpb2RzLiAgRm9yCisgICAgZXhhbXBsZSwgdHJpbV92ZXJzaW9uKCIxLjIuMyIsIDIpIHdpbGwgcmV0dXJuICIxLjIiLgorICAgICIiIgorICAgIGlmIHR5cGUodmVyc2lvbikgaXMgbm90IHN0cjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJWZXJzaW9uIHNob3VsZCBiZSBhIHN0cmluZyIpCisgICAgaWYgbnVtX3BhcnRzIDwgMToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHNwbGl0IHRvIHBhcnRzIDwgMSIpCisKKyAgICBwYXJ0cyA9IHZlcnNpb24uc3BsaXQoIi4iKQorICAgIHRyaW1tZWQgPSAiLiIuam9pbihwYXJ0c1s6bnVtX3BhcnRzXSkKKyAgICByZXR1cm4gdHJpbW1lZAorCitkZWYgY3B1X2NvdW50KCk6CisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKKworZGVmIGV4ZWN1dGVfcHJlX3Bvc3RfcHJvY2VzcyhkLCBjbWRzKToKKyAgICBpZiBjbWRzIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorCisgICAgZm9yIGNtZCBpbiBjbWRzLnN0cmlwKCkuc3BsaXQoJzsnKToKKyAgICAgICAgY21kID0gY21kLnN0cmlwKCkKKyAgICAgICAgaWYgY21kICE9ICcnOgorICAgICAgICAgICAgYmIubm90ZSgiRXhlY3V0aW5nICVzIC4uLiIgJSBjbWQpCisgICAgICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoY21kLCBkKQorCitkZWYgbXVsdGlwcm9jZXNzX2V4ZWMoY29tbWFuZHMsIGZ1bmN0aW9uKToKKyAgICBpbXBvcnQgc2lnbmFsCisgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworCisgICAgaWYgbm90IGNvbW1hbmRzOgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBpbml0X3dvcmtlcigpOgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorCisgICAgbnByb2MgPSBtaW4obXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpLCBsZW4oY29tbWFuZHMpKQorICAgIHBvb2wgPSBiYi51dGlscy5tdWx0aXByb2Nlc3Npbmdwb29sKG5wcm9jLCBpbml0X3dvcmtlcikKKyAgICBpbWFwID0gcG9vbC5pbWFwKGZ1bmN0aW9uLCBjb21tYW5kcykKKworICAgIHRyeToKKyAgICAgICAgcmVzID0gbGlzdChpbWFwKQorICAgICAgICBwb29sLmNsb3NlKCkKKyAgICAgICAgcG9vbC5qb2luKCkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGZvciByZXN1bHQgaW4gcmVzOgorICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcG9vbC50ZXJtaW5hdGUoKQorICAgICAgICBwb29sLmpvaW4oKQorICAgICAgICByYWlzZQorCitkZWYgc3F1YXNoc3BhY2VzKHN0cmluZyk6CisgICAgaW1wb3J0IHJlCisgICAgcmV0dXJuIHJlLnN1YigiXHMrIiwgIiAiLCBzdHJpbmcpLnN0cmlwKCkKKworIworIyBQeXRob24gMi43IGRvZXNuJ3QgaGF2ZSB0aHJlYWRlZCBwb29scyAoanVzdCBtdWx0aXByb2Nlc3NpbmcpCisjIHNvIGltcGxlbWVudCBhIHZlcnNpb24gaGVyZQorIworCitmcm9tIFF1ZXVlIGltcG9ydCBRdWV1ZQorZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorCitjbGFzcyBUaHJlYWRlZFdvcmtlcihUaHJlYWQpOgorICAgICIiIlRocmVhZCBleGVjdXRpbmcgdGFza3MgZnJvbSBhIGdpdmVuIHRhc2tzIHF1ZXVlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhc2tzLCB3b3JrZXJfaW5pdCwgd29ya2VyX2VuZCk6CisgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLnRhc2tzID0gdGFza3MKKyAgICAgICAgc2VsZi5kYWVtb24gPSBUcnVlCisKKyAgICAgICAgc2VsZi53b3JrZXJfaW5pdCA9IHdvcmtlcl9pbml0CisgICAgICAgIHNlbGYud29ya2VyX2VuZCA9IHdvcmtlcl9lbmQKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGZyb20gUXVldWUgaW1wb3J0IEVtcHR5CisKKyAgICAgICAgaWYgc2VsZi53b3JrZXJfaW5pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYud29ya2VyX2luaXQoc2VsZikKKworICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZ1bmMsIGFyZ3MsIGthcmdzID0gc2VsZi50YXNrcy5nZXQoYmxvY2s9RmFsc2UpCisgICAgICAgICAgICBleGNlcHQgRW1wdHk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi53b3JrZXJfZW5kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLndvcmtlcl9lbmQoc2VsZikKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCAqYXJncywgKiprYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgICAgICAgICAgICAgcHJpbnQgZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnRhc2tzLnRhc2tfZG9uZSgpCisKK2NsYXNzIFRocmVhZGVkUG9vbDoKKyAgICAiIiJQb29sIG9mIHRocmVhZHMgY29uc3VtaW5nIHRhc2tzIGZyb20gYSBxdWV1ZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fd29ya2VycywgbnVtX3Rhc2tzLCB3b3JrZXJfaW5pdD1Ob25lLAorICAgICAgICAgICAgd29ya2VyX2VuZD1Ob25lKToKKyAgICAgICAgc2VsZi50YXNrcyA9IFF1ZXVlKG51bV90YXNrcykKKyAgICAgICAgc2VsZi53b3JrZXJzID0gW10KKworICAgICAgICBmb3IgXyBpbiByYW5nZShudW1fd29ya2Vycyk6CisgICAgICAgICAgICB3b3JrZXIgPSBUaHJlYWRlZFdvcmtlcihzZWxmLnRhc2tzLCB3b3JrZXJfaW5pdCwgd29ya2VyX2VuZCkKKyAgICAgICAgICAgIHNlbGYud29ya2Vycy5hcHBlbmQod29ya2VyKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisKKyAgICBkZWYgYWRkX3Rhc2soc2VsZiwgZnVuYywgKmFyZ3MsICoqa2FyZ3MpOgorICAgICAgICAiIiJBZGQgYSB0YXNrIHRvIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLnB1dCgoZnVuYywgYXJncywga2FyZ3MpKQorCisgICAgZGVmIHdhaXRfY29tcGxldGlvbihzZWxmKToKKyAgICAgICAgIiIiV2FpdCBmb3IgY29tcGxldGlvbiBvZiBhbGwgdGhlIHRhc2tzIGluIHRoZSBxdWV1ZSIiIgorICAgICAgICBzZWxmLnRhc2tzLmpvaW4oKQorICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHdvcmtlci5qb2luKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWRhOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDMgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIG1vZHVsZXMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvbWFzdGVyaW1hZ2UucHkgYi9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmY5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL2NvbnRyb2xsZXJzL21hc3RlcmltYWdlLnB5CkBAIC0wLDAgKzEsMjAxIEBACisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgdG8gdGVzdGltYWdlLmJiY2xhc3MgdG8gZGVwbG95IGltYWdlcyBhbmQgcnVuCisjIHRlc3RzIHVzaW5nIGEgIm1hc3RlciBpbWFnZSIgLSB0aGlzIGlzIGEgImtub3duIGdvb2QiIGltYWdlIHRoYXQgaXMKKyMgaW5zdGFsbGVkIG9udG8gdGhlIGRldmljZSBhcyBwYXJ0IG9mIGluaXRpYWwgc2V0dXAgYW5kIHdpbGwgYmUgYm9vdGVkIGludG8KKyMgd2l0aCBubyBpbnRlcmFjdGlvbjsgd2UgY2FuIHRoZW4gdXNlIGl0IHRvIGRlcGxveSB0aGUgaW1hZ2UgdG8gYmUgdGVzdGVkCisjIHRvIGEgc2Vjb25kIHBhcnRpdGlvbiBiZWZvcmUgcnVubmluZyB0aGUgdGVzdHMuCisjCisjIEZvciBhbiBleGFtcGxlIG1hc3RlciBpbWFnZSwgc2VlIGNvcmUtaW1hZ2UtdGVzdG1hc3RlcgorIyAobWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIpCisKK2ltcG9ydCBvcworaW1wb3J0IGJiCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdGltZQoraW1wb3J0IHN1YnByb2Nlc3MKKworaW1wb3J0IG9lcWEudGFyZ2V0Y29udHJvbAoraW1wb3J0IG9lcWEudXRpbHMuc3NoY29udHJvbCBhcyBzc2hjb250cm9sCitpbXBvcnQgb2VxYS51dGlscy5jb21tYW5kcyBhcyBjb21tYW5kcworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKKworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQob2VxYS50YXJnZXRjb250cm9sLkJhc2VUYXJnZXQpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIHN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzID0gWyd0YXIuZ3onLCAndGFyLmJ6MiddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZCk6CisgICAgICAgIHN1cGVyKE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAgICAgIyB0YXJnZXQgaXAKKyAgICAgICAgYWRkciA9IGQuZ2V0VmFyKCJURVNUX1RBUkdFVF9JUCIsIFRydWUpIG9yIGJiLmZhdGFsKCdQbGVhc2Ugc2V0IFRFU1RfVEFSR0VUX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgeW91IHdhbnQgdG8gcnVuIHRoZSB0ZXN0cyBvbi4nKQorICAgICAgICBzZWxmLmlwID0gYWRkci5zcGxpdCgiOiIpWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IGFkZHIuc3BsaXQoIjoiKVsxXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IE5vbmUKKyAgICAgICAgYmIubm90ZSgiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IGQuZ2V0VmFyKCJURVNUX1NFUlZFUl9JUCIsIFRydWUpCisgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcl9pcDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsnaXAnLCAncm91dGUnLCAnZ2V0Jywgc2VsZi5pcCBdKS5zcGxpdCgiXG4iKVswXS5zcGxpdCgpWy0xXQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gZGV0ZXJtaW5lIHRoZSBob3N0IElQIGFkZHJlc3MgKGFsdGVybmF0aXZlbHkgeW91IGNhbiBzZXQgVEVTVF9TRVJWRVJfSVAgd2l0aCB0aGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUpOiAlcyIgJSBlKQorICAgICAgICBiYi5ub3RlKCJTZXJ2ZXIgSVA6ICVzIiAlIHNlbGYuc2VydmVyX2lwKQorCisgICAgICAgICMgdGVzdCByb290ZnMgKyBrZXJuZWwKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGUgPSBzZWxmLmdldF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwgZC5nZXRWYXIoIklNQUdFX0xJTktfTkFNRSIsIFRydWUpICsgJy4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFIiwgRmFsc2UpICsgJy0nICsgZC5nZXRWYXIoJ01BQ0hJTkUnLCBGYWxzZSkgKyAnLmJpbicpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICAjIHdlIGNvdWxkJ3ZlIGNoZWNrZWQgdGhhdCBJTUFHRV9GU1RZUEVTIGNvbnRhaW5zIHRhci5neiBidXQgdGhlIGNvbmZpZyBmb3IgcnVubmluZyB0ZXN0aW1hZ2UgbWlnaHQgbm90IGJlCisgICAgICAgICAgICAjIHRoZSBzYW1lIGFzIHRoZSBjb25maWcgd2l0aCB3aGljaCB0aGUgaW1hZ2Ugd2FzIGJ1aWxkLCBpZQorICAgICAgICAgICAgIyB5b3UgYml0YmFrZSBjb3JlLWltYWdlLXNhdG8gd2l0aCBJTUFHRV9GU1RZUEVTICs9ICJ0YXIuZ3oiCisgICAgICAgICAgICAjIGFuZCB5b3VyIGF1dG9idWlsZGVyIG92ZXJ3cml0ZXMgdGhlIGNvbmZpZywgYWRkcyB0aGUgdGVzdCBiaXRzIGFuZCBydW5zIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHJvb3RmcyBmb3VuZC4gRGlkIHlvdSBidWlsZCB0aGUgaW1hZ2UgP1xuSWYgeWVzLCBkaWQgeW91IGJ1aWxkIGl0IHdpdGggSU1BR0VfRlNUWVBFUyArPSBcInRhci5nelwiID8gXAorICAgICAgICAgICAgICAgICAgICAgIFxuRXhwZWN0ZWQgcGF0aDogJXMiICUgc2VsZi5yb290ZnMpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzZWxmLmtlcm5lbCk6CisgICAgICAgICAgICBiYi5mYXRhbCgiTm8ga2VybmVsIGZvdW5kLiBFeHBlY3RlZCBwYXRoOiAlcyIgJSBzZWxmLmtlcm5lbCkKKworICAgICAgICAjIG1hc3RlciBzc2ggY29ubmVjdGlvbgorICAgICAgICBzZWxmLm1hc3RlciA9IE5vbmUKKyAgICAgICAgIyBpZiB0aGUgdXNlciBrbm93cyB3aGF0IHRoZXkgYXJlIGRvaW5nLCB0aGVuIGJ5IGFsbCBtZWFucy4uLgorICAgICAgICBzZWxmLnVzZXJfY21kcyA9IGQuZ2V0VmFyKCJURVNUX0RFUExPWV9DTURTIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IE5vbmUKKworICAgICAgICAjIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgdGhhdCBjb250cm9scyB0aGUgcG93ZXIgZm9yIGEgYm9hcmQKKyAgICAgICAgIyBlLmc6IFRFU1RfUE9XRVJDT05UUk9MX0NNRCA9ICIvaG9tZS91c2VyL215c2NyaXB0cy9wb3dlcmNvbnRyb2wucHkgJHtNQUNISU5FfSB3aGF0LWV2ZXItb3RoZXItYXJncy10aGUtc2NyaXB0LXdhbnRzIgorICAgICAgICAjIHRoZSBjb21tYW5kIHNob3VsZCB0YWtlIGFzIHRoZSBsYXN0IGFyZ3VtZW50ICJvZmYiIGFuZCAib24iIGFuZCAiY3ljbGUiIChvZmYsIG9uKQorICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9jbWQgPSBkLmdldFZhcigiVEVTVF9QT1dFUkNPTlRST0xfQ01EIiwgVHJ1ZSkgb3IgTm9uZQorICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9hcmdzID0gZC5nZXRWYXIoIlRFU1RfUE9XRVJDT05UUk9MX0VYVFJBX0FSR1MiLCBGYWxzZSkgb3IgIiIKKworICAgICAgICBzZWxmLnNlcmlhbGNvbnRyb2xfY21kID0gZC5nZXRWYXIoIlRFU1RfU0VSSUFMQ09OVFJPTF9DTUQiLCBUcnVlKSBvciBOb25lCisgICAgICAgIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzID0gZC5nZXRWYXIoIlRFU1RfU0VSSUFMQ09OVFJPTF9FWFRSQV9BUkdTIiwgRmFsc2UpIG9yICIiCisKKyAgICAgICAgc2VsZi5vcmlnZW52ID0gb3MuZW52aXJvbgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQgb3Igc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgICMgdGhlIGV4dGVybmFsIHNjcmlwdCBmb3IgY29udHJvbGxpbmcgcG93ZXIgbWlnaHQgdXNlIHNzaAorICAgICAgICAgICAgIyBzc2ggKyBrZXlzIG1lYW5zIHdlIG5lZWQgdGhlIG9yaWdpbmFsIHVzZXIgZW52CisgICAgICAgICAgICBiYm9yaWdlbnYgPSBkLmdldFZhcigiQkJfT1JJR0VOViIsIEZhbHNlKSBvciB7fQorICAgICAgICAgICAgZm9yIGtleSBpbiBiYm9yaWdlbnY6CisgICAgICAgICAgICAgICAgdmFsID0gYmJvcmlnZW52LmdldFZhcihrZXksIFRydWUpCisgICAgICAgICAgICAgICAgaWYgdmFsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm9yaWdlbnZba2V5XSA9IHN0cih2YWwpCisKKyAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfY21kOgorICAgICAgICAgICAgaWYgc2VsZi5wb3dlcmNvbnRyb2xfYXJnczoKKyAgICAgICAgICAgICAgICBzZWxmLnBvd2VyY29udHJvbF9jbWQgPSAiJXMgJXMiICUgKHNlbGYucG93ZXJjb250cm9sX2NtZCwgc2VsZi5wb3dlcmNvbnRyb2xfYXJncykKKyAgICAgICAgaWYgc2VsZi5zZXJpYWxjb250cm9sX2NtZDoKKyAgICAgICAgICAgIGlmIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzOgorICAgICAgICAgICAgICAgIHNlbGYuc2VyaWFsY29udHJvbF9jbWQgPSAiJXMgJXMiICUgKHNlbGYuc2VyaWFsY29udHJvbF9jbWQsIHNlbGYuc2VyaWFsY29udHJvbF9hcmdzKQorCisgICAgZGVmIHBvd2VyX2N0bChzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQ6CisgICAgICAgICAgICBjbWQgPSAiJXMgJXMiICUgKHNlbGYucG93ZXJjb250cm9sX2NtZCwgbXNnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbW1hbmRzLnJ1bkNtZChjbWQsIGFzc2VydF9lcnJvcj1GYWxzZSwgcHJlZXhlY19mbj1vcy5zZXRzaWQsIGVudj1zZWxmLm9yaWdlbnYpCisgICAgICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoc3RyKGUpKQorCisgICAgZGVmIHBvd2VyX2N5Y2xlKHNlbGYsIGNvbm4pOgorICAgICAgICBpZiBzZWxmLnBvd2VyY29udHJvbF9jbWQ6CisgICAgICAgICAgICAjIGJlIG5pY2UsIGRvbid0IGp1c3QgY3V0IHBvd2VyCisgICAgICAgICAgICBjb25uLnJ1bigic2h1dGRvd24gLWggbm93IikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICBzZWxmLnBvd2VyX2N0bCgiY3ljbGUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBjb25uLnJ1bigicmVib290IikKKyAgICAgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgICAgIGJiLmVycm9yKCJGYWlsZWQgcmVib290aW5nIHRhcmdldCBhbmQgbm8gcG93ZXIgY29udHJvbCBjb21tYW5kIGRlZmluZWQuIFlvdSBuZWVkIHRvIG1hbnVhbGx5IHJlc2V0IHRoZSBkZXZpY2UuXG4lcyIgJSBvdXRwdXQpCisKKyAgICBkZWYgX3dhaXRfdW50aWxfYm9vdGVkKHNlbGYpOgorICAgICAgICAnJycgV2FpdHMgdW50aWwgdGhlIHRhcmdldCBkZXZpY2UgaGFzIGJvb3RlZCAoaWYgd2UgaGF2ZSBqdXN0IHBvd2VyIGN5Y2xlZCBpdCkgJycnCisgICAgICAgICMgU3ViY2xhc3NlcyB3aXRoIGJldHRlciBtZXRob2RzIG9mIGRldGVybWluaW5nIGJvb3QgY2FuIG92ZXJyaWRlIHRoaXMKKyAgICAgICAgdGltZS5zbGVlcCgxMjApCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICAjIGJhc2UgY2xhc3MganVzdCBzZXRzIHRoZSBzc2ggbG9nIGZpbGUgZm9yIHVzCisgICAgICAgIHN1cGVyKE1hc3RlckltYWdlSGFyZHdhcmVUYXJnZXQsIHNlbGYpLmRlcGxveSgpCisgICAgICAgIHNlbGYubWFzdGVyID0gc3NoY29udHJvbC5TU0hDb250cm9sKGlwPXNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHRpbWVvdXQ9NjAwLCBwb3J0PXNlbGYucG9ydCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzZWxmLm1hc3Rlci5ydW4oImNhdCAvZXRjL21hc3RlcmltYWdlIikKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICAjIFdlJ3JlIG5vdCBib290ZWQgaW50byB0aGUgbWFzdGVyIGltYWdlLCBzbyB0cnkgcmVib290aW5nCisgICAgICAgICAgICBiYi5wbGFpbigiJXMgLSBib290aW5nIGludG8gdGhlIG1hc3RlciBpbWFnZSIgJSBzZWxmLnBuKQorICAgICAgICAgICAgc2VsZi5wb3dlcl9jdGwoImN5Y2xlIikKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfdW50aWxfYm9vdGVkKCkKKworICAgICAgICBiYi5wbGFpbigiJXMgLSBkZXBsb3lpbmcgaW1hZ2Ugb24gdGFyZ2V0IiAlIHNlbGYucG4pCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi5tYXN0ZXIucnVuKCJjYXQgL2V0Yy9tYXN0ZXJpbWFnZSIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgYmIuZmF0YWwoIk5vIHNzaCBjb25uZWN0aXZpdHkgb3IgdGFyZ2V0IGlzbid0IHJ1bm5pbmcgYSBtYXN0ZXIgaW1hZ2UuXG4lcyIgJSBvdXRwdXQpCisgICAgICAgIGlmIHNlbGYudXNlcl9jbWRzOgorICAgICAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IHNlbGYudXNlcl9jbWRzLnNwbGl0KCJcbiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RlcGxveSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgZGVwbG95aW5nIHRlc3QgaW1hZ2U6ICVzIiAlIGUpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gYm9vdCB0ZXN0IGltYWdlIG9uIHRhcmdldCIgJSBzZWxmLnBuKQorICAgICAgICBzZWxmLl9zdGFydCgpCisgICAgICAgICMgc2V0IHRoZSBzc2ggb2JqZWN0IGZvciB0aGUgdGFyZ2V0L3Rlc3QgaW1hZ2UKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gc3NoY29udHJvbC5TU0hDb250cm9sKHNlbGYuaXAsIGxvZ2ZpbGU9c2VsZi5zc2hsb2csIHBvcnQ9c2VsZi5wb3J0KQorICAgICAgICBiYi5wbGFpbigiJXMgLSBzdGFydCBydW5uaW5nIHRlc3RzIiAlIHNlbGYucG4pCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX3N0YXJ0KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgYmIucGxhaW4oIiVzIC0gcmVib290L3Bvd2VyY3ljbGUgdGFyZ2V0IiAlIHNlbGYucG4pCisgICAgICAgIHNlbGYucG93ZXJfY3ljbGUoc2VsZi5jb25uZWN0aW9uKQorCisKK2NsYXNzIEd1bW1pYm9vdFRhcmdldChNYXN0ZXJJbWFnZUhhcmR3YXJlVGFyZ2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkKToKKyAgICAgICAgc3VwZXIoR3VtbWlib290VGFyZ2V0LCBzZWxmKS5fX2luaXRfXyhkKQorICAgICAgICAjIHRoaXMgdGhlIHZhbHVlIHdlIG5lZWQgdG8gc2V0IGluIHRoZSBMb2FkZXJFbnRyeU9uZVNob3QgRUZJIHZhcmlhYmxlCisgICAgICAgICMgc28gdGhlIHN5c3RlbSBib290cyB0aGUgJ3Rlc3QnIGJvb3Rsb2FkZXIgbGFiZWwgYW5kIG5vdCB0aGUgZGVmYXVsdAorICAgICAgICAjIFRoZSBmaXJzdCBmb3VyIGJ5dGVzIGFyZSBFRkkgYml0cywgYW5kIHRoZSByZXN0IGlzIGFuIHV0Zi0xNmxlIHN0cmluZworICAgICAgICAjIChFRkkgdmFycyB2YWx1ZXMgbmVlZCB0byBiZSB1dGYtMTYpCisgICAgICAgICMgJCBlY2hvIC1lbiAidGVzdFwwIiB8IGljb252IC1mIGFzY2lpIC10IHV0Zi0xNmxlIHwgaGV4ZHVtcCAtQworICAgICAgICAjIDAwMDAwMDAwICA3NCAwMCA2NSAwMCA3MyAwMCA3NCAwMCAgMDAgMDAgICAgICAgICAgICAgICAgICAgIHx0LmUucy50Li4ufAorICAgICAgICBzZWxmLmVmaXZhcnZhbHVlID0gcidceDA3XHgwMFx4MDBceDAwXHg3NFx4MDBceDY1XHgwMFx4NzNceDAwXHg3NFx4MDBceDAwXHgwMCcKKyAgICAgICAgc2VsZi5kZXBsb3lfY21kcyA9IFsKKyAgICAgICAgICAgICAgICAnbW91bnQgLUwgYm9vdCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ21rZGlyIC1wIC9tbnQvdGVzdHJvb3RmcycsCisgICAgICAgICAgICAgICAgJ21vdW50IC1MIHRlc3Ryb290ZnMgL21udC90ZXN0cm9vdGZzJywKKyAgICAgICAgICAgICAgICAnbW9kcHJvYmUgZWZpdmFyZnMnLAorICAgICAgICAgICAgICAgICdtb3VudCAtdCBlZml2YXJmcyBlZml2YXJmcyAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzJywKKyAgICAgICAgICAgICAgICAnY3Agfi90ZXN0LWtlcm5lbCAvYm9vdCcsCisgICAgICAgICAgICAgICAgJ3JtIC1yZiAvbW50L3Rlc3Ryb290ZnMvKicsCisgICAgICAgICAgICAgICAgJ3RhciB4dmYgfi90ZXN0LXJvb3Rmcy4lcyAtQyAvbW50L3Rlc3Ryb290ZnMnICUgc2VsZi5pbWFnZV9mc3R5cGUsCisgICAgICAgICAgICAgICAgJ3ByaW50ZiAiJXMiID4gL3N5cy9maXJtd2FyZS9lZmkvZWZpdmFycy9Mb2FkZXJFbnRyeU9uZVNob3QtNGE2N2IwODItMGE0Yy00MWNmLWI2YzctNDQwYjI5YmI4YzRmJyAlIHNlbGYuZWZpdmFydmFsdWUKKyAgICAgICAgICAgICAgICBdCisKKyAgICBkZWYgX2RlcGxveShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlbid0IG1vdW50ZWQKKyAgICAgICAgc2VsZi5tYXN0ZXIucnVuKCJ1bW91bnQgL2Jvb3Q7IHVtb3VudCAvbW50L3Rlc3Ryb290ZnM7IHVtb3VudCAvc3lzL2Zpcm13YXJlL2VmaS9lZml2YXJzOyIpCisgICAgICAgICMgZnJvbSBub3cgb24sIGV2ZXJ5IGRlcGxveSBjbWQgc2hvdWxkIHJldHVybiAwCisgICAgICAgICMgZWxzZSBhbiBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24gYnkgc3NoY29udHJvbAorICAgICAgICBzZWxmLm1hc3Rlci5pZ25vcmVfc3RhdHVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5tYXN0ZXIuY29weV90byhzZWxmLnJvb3RmcywgIn4vdGVzdC1yb290ZnMuIiArIHNlbGYuaW1hZ2VfZnN0eXBlKQorICAgICAgICBzZWxmLm1hc3Rlci5jb3B5X3RvKHNlbGYua2VybmVsLCAifi90ZXN0LWtlcm5lbCIpCisgICAgICAgIGZvciBjbWQgaW4gc2VsZi5kZXBsb3lfY21kczoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyLnJ1bihjbWQpCisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgc2VsZi5wb3dlcl9jeWNsZShzZWxmLm1hc3RlcikKKyAgICAgICAgIyB0aGVyZSBhcmUgYmV0dGVyIHdheXMgdGhhbiBhIHRpbWVvdXQgYnV0IHRoaXMgc2hvdWxkIHdvcmsgZm9yIG5vdworICAgICAgICB0aW1lLnNsZWVwKDEyMCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weSBiL21ldGEvbGliL29lcWEvY29udHJvbGxlcnMvdGVzdHRhcmdldGxvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWI3YjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9jb250cm9sbGVycy90ZXN0dGFyZ2V0bG9hZGVyLnB5CkBAIC0wLDAgKzEsNzAgQEAKK2ltcG9ydCB0eXBlcworaW1wb3J0IGJiCitpbXBvcnQgb3MKKworIyBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGEgdGVzdCB0YXJnZXQgY29udHJvbGxlcgorY2xhc3MgVGVzdFRhcmdldExvYWRlcjoKKworICAgICMgU2VhcmNoIG9lcWEuY29udHJvbGxlcnMgbW9kdWxlIGRpcmVjdG9yeSBmb3IgYW5kIHJldHVybiBhIGNvbnRyb2xsZXIgIAorICAgICMgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gdGFyZ2V0IG5hbWUuIAorICAgICMgQXR0cmlidXRlRXJyb3IgcmFpc2VkIGlmIG5vdCBmb3VuZC4KKyAgICAjIEltcG9ydEVycm9yIHJhaXNlZCBpZiBhIHByb3ZpZGVkIG1vZHVsZSBjYW4gbm90IGJlIGltcG9ydGVkLgorICAgIGRlZiBnZXRfY29udHJvbGxlcl9tb2R1bGUoc2VsZiwgdGFyZ2V0LCBiYnBhdGgpOgorICAgICAgICBjb250cm9sbGVyc2xpc3QgPSBzZWxmLmdldF9jb250cm9sbGVyX21vZHVsZW5hbWVzKGJicGF0aCkKKyAgICAgICAgYmIubm90ZSgiQXZhaWxhYmxlIGNvbnRyb2xsZXIgbW9kdWxlczogJXMiICUgc3RyKGNvbnRyb2xsZXJzbGlzdCkpCisgICAgICAgIGNvbnRyb2xsZXIgPSBzZWxmLmxvYWRfY29udHJvbGxlcl9mcm9tX25hbWUodGFyZ2V0LCBjb250cm9sbGVyc2xpc3QpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyCisKKyAgICAjIFJldHVybiBhIGxpc3Qgb2YgYWxsIHB5dGhvbiBtb2R1bGVzIGluIGxpYi9vZXFhL2NvbnRyb2xsZXJzIGZvciBlYWNoCisgICAgIyBsYXllciBpbiBiYnBhdGgKKyAgICBkZWYgZ2V0X2NvbnRyb2xsZXJfbW9kdWxlbmFtZXMoc2VsZiwgYmJwYXRoKToKKworICAgICAgICBjb250cm9sbGVyc2xpc3QgPSBbXQorCisgICAgICAgIGRlZiBhZGRfY29udHJvbGxlcl9saXN0KHBhdGgpOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihwYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgYmIuZmF0YWwoJ0NvbnRyb2xsZXJzIGRpcmVjdG9yeSAlcyBleGlzdHMgYnV0IGlzIG1pc3NpbmcgX19pbml0X18ucHknICUgcGF0aCkKKyAgICAgICAgICAgIGZpbGVzID0gc29ydGVkKFtmIGZvciBmIGluIG9zLmxpc3RkaXIocGF0aCkgaWYgZi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBmLnN0YXJ0c3dpdGgoJ18nKV0pCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSAnb2VxYS5jb250cm9sbGVycy4nICsgZls6LTNdCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBjb250cm9sbGVyc2xpc3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzbGlzdC5hcHBlbmQobW9kdWxlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIkR1cGxpY2F0ZSBjb250cm9sbGVyIG1vZHVsZSBmb3VuZCBmb3IgJXMsIG9ubHkgb25lIGFkZGVkLiBMYXllcnMgc2hvdWxkIGNyZWF0ZSB1bmlxdWUgY29udHJvbGxlciBtb2R1bGUgbmFtZXMiICUgbW9kdWxlKQorCisgICAgICAgIGZvciBwIGluIGJicGF0aDoKKyAgICAgICAgICAgIGNvbnRyb2xsZXJwYXRoID0gb3MucGF0aC5qb2luKHAsICdsaWInLCAnb2VxYScsICdjb250cm9sbGVycycpCisgICAgICAgICAgICBiYi5kZWJ1ZygyLCAnU2VhcmNoaW5nIGZvciB0YXJnZXQgY29udHJvbGxlcnMgaW4gJXMnICUgY29udHJvbGxlcnBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb250cm9sbGVycGF0aCk6CisgICAgICAgICAgICAgICAgYWRkX2NvbnRyb2xsZXJfbGlzdChjb250cm9sbGVycGF0aCkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJzbGlzdAorCisgICAgIyBTZWFyY2ggZm9yIGFuZCByZXR1cm4gYSBjb250cm9sbGVyIGZyb20gZ2l2ZW4gdGFyZ2V0IG5hbWUgYW5kCisgICAgIyBzZXQgb2YgbW9kdWxlIG5hbWVzLiAKKyAgICAjIFJhaXNlIEF0dHJpYnV0ZUVycm9yIGlmIG5vdCBmb3VuZC4KKyAgICAjIFJhaXNlIEltcG9ydEVycm9yIGlmIGEgcHJvdmlkZWQgbW9kdWxlIGNhbiBub3QgYmUgaW1wb3J0ZWQKKyAgICBkZWYgbG9hZF9jb250cm9sbGVyX2Zyb21fbmFtZShzZWxmLCB0YXJnZXQsIG1vZHVsZW5hbWVzKToKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlbmFtZXM6CisgICAgICAgICAgICBvYmogPSBzZWxmLmxvYWRfY29udHJvbGxlcl9mcm9tX21vZHVsZSh0YXJnZXQsIG5hbWUpCisgICAgICAgICAgICBpZiBvYmo6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiVW5hYmxlIHRvIGxvYWQgezB9IGZyb20gYXZhaWxhYmxlIG1vZHVsZXM6IHsxfSIuZm9ybWF0KHRhcmdldCwgc3RyKG1vZHVsZW5hbWVzKSkpCisKKyAgICAjIFNlYXJjaCBmb3IgYW5kIHJldHVybiBhIGNvbnRyb2xsZXIgb3IgTm9uZSBmcm9tIGdpdmVuIG1vZHVsZSBuYW1lCisgICAgZGVmIGxvYWRfY29udHJvbGxlcl9mcm9tX21vZHVsZShzZWxmLCB0YXJnZXQsIG1vZHVsZW5hbWUpOgorICAgICAgICBvYmogPSBOb25lCisgICAgICAgICMgaW1wb3J0IG1vZHVsZSwgYWxsb3dpbmcgaXQgdG8gcmFpc2UgaW1wb3J0IGV4Y2VwdGlvbgorICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG1vZHVsZW5hbWUsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFt0YXJnZXRdKQorICAgICAgICAjIGxvb2sgZm9yIHRhcmdldCBjbGFzcyBpbiB0aGUgbW9kdWxlLCBjYXRjaGluZyBhbnkgZXhjZXB0aW9ucyBhcyBpdAorICAgICAgICAjIGlzIHZhbGlkIHRoYXQgYSBtb2R1bGUgbWF5IG5vdCBoYXZlIHRoZSB0YXJnZXQgY2xhc3MuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCB0YXJnZXQpCisgICAgICAgICAgICBpZiBvYmo6IAorICAgICAgICAgICAgICAgIGZyb20gb2VxYS50YXJnZXRjb250cm9sIGltcG9ydCBCYXNlVGFyZ2V0CisgICAgICAgICAgICAgICAgaWYgKG5vdCBpc2luc3RhbmNlKG9iaiwgKHR5cGUsIHR5cGVzLkNsYXNzVHlwZSkpKToKKyAgICAgICAgICAgICAgICAgICAgYmIud2FybigiVGFyZ2V0IHswfSBmb3VuZCwgYnV0IG5vdCBvZiB0eXBlIENsYXNzIi5mb3JtYXQodGFyZ2V0KSkKKyAgICAgICAgICAgICAgICBpZiggbm90IGlzc3ViY2xhc3Mob2JqLCBCYXNlVGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRhcmdldCB7MH0gZm91bmQsIGJ1dCBzdWJjbGFzcyBpcyBub3QgQmFzZVRhcmdldCIuZm9ybWF0KHRhcmdldCkpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgcmV0dXJuIG9iagpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkgYi9tZXRhL2xpYi9vZXFhL29ldGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU2OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9vZXRlc3QucHkKQEAgLTAsMCArMSwyMTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIE1haW4gdW5pdHRlc3QgbW9kdWxlIHVzZWQgYnkgdGVzdGltYWdlLmJiY2xhc3MKKyMgVGhpcyBwcm92aWRlcyB0aGUgb2VSdW50aW1lVGVzdCBiYXNlIGNsYXNzIHdoaWNoIGlzIGluaGVyaXRlZCBieSBhbGwgdGVzdHMgaW4gbWV0YS9saWIvb2VxYS9ydW50aW1lLgorCisjIEl0IGFsc28gaGFzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBhbmQgaXQncyByZXNwb25zaWJsZSBmb3IgYWN0dWFsbHkgc3RhcnRpbmcgdGhlIHRlc3RzCisKK2ltcG9ydCBvcywgcmUsIG1tYXAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYmIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzLCBnZXR0YWcKK2Zyb20gc3lzIGltcG9ydCBleGNfaW5mbywgZXhjX2NsZWFyCisKK2RlZiBnZXRWYXIob2JqKToKKyAgICAjZXh0ZW5kIGZvcm0gZGljdCwgaWYgYSB2YXJpYWJsZSBkaWRuJ3QgZXhpc3RzLCBuZWVkIGZpbmQgaXQgaW4gdGVzdGNhc2UKKyAgICBjbGFzcyBWYXJEaWN0KGRpY3QpOgorICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgIHJldHVybiBnZXR0YWcob2JqLCBrZXkpCisgICAgcmV0dXJuIFZhckRpY3QoKQorCitkZWYgY2hlY2tUYWdzKHRjLCB0YWdleHApOgorICAgIHJldHVybiBldmFsKHRhZ2V4cCwgTm9uZSwgZ2V0VmFyKHRjKSkKKworCitkZWYgZmlsdGVyQnlUYWdFeHAodGVzdHN1aXRlLCB0YWdleHApOgorICAgIGlmIG5vdCB0YWdleHA6CisgICAgICAgIHJldHVybiB0ZXN0c3VpdGUKKyAgICBjYXNlTGlzdCA9IFtdCisgICAgZm9yIGVhY2ggaW4gdGVzdHN1aXRlOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlYWNoLCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlKToKKyAgICAgICAgICAgIGlmIGNoZWNrVGFncyhlYWNoLCB0YWdleHApOgorICAgICAgICAgICAgICAgIGNhc2VMaXN0LmFwcGVuZChlYWNoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FzZUxpc3QuYXBwZW5kKGZpbHRlckJ5VGFnRXhwKGVhY2gsIHRhZ2V4cCkpCisgICAgcmV0dXJuIHRlc3RzdWl0ZS5fX2NsYXNzX18oY2FzZUxpc3QpCisKK2RlZiBsb2FkVGVzdHModGMsIHR5cGU9InJ1bnRpbWUiKToKKyAgICBpZiB0eXBlID09ICJydW50aW1lIjoKKyAgICAgICAgIyBzZXQgdGhlIGNvbnRleHQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzCisgICAgICAgIHNldGF0dHIob2VUZXN0LCAidGMiLCB0YykKKyAgICAgICAgIyBzZXQgcHMgY29tbWFuZCB0byB1c2UKKyAgICAgICAgc2V0YXR0cihvZVJ1bnRpbWVUZXN0LCAicHNjbWQiLCAicHMgLWVmIiBpZiBvZVRlc3QuaGFzUGFja2FnZSgicHJvY3BzIikgZWxzZSAicHMiKQorICAgICAgICAjIHByZXBhcmUgdGVzdCBzdWl0ZSwgbG9hZGVyIGFuZCBydW5uZXIKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGVsaWYgdHlwZSA9PSAic2RrIjoKKyAgICAgICAgIyBzZXQgdGhlIGNvbnRleHQgb2JqZWN0IHBhc3NlZCBmcm9tIHRoZSB0ZXN0IGNsYXNzCisgICAgICAgIHNldGF0dHIob2VUZXN0LCAidGMiLCB0YykKKyAgICB0ZXN0bG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgdGVzdGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IE5vbmUKKyAgICBzdWl0ZXMgPSBbdGVzdGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lKSBmb3IgbmFtZSBpbiB0Yy50ZXN0c2xpc3RdCisgICAgc3VpdGVzID0gZmlsdGVyQnlUYWdFeHAoc3VpdGVzLCBnZXRhdHRyKHRjLCAidGFnZXhwIiwgTm9uZSkpCisKKyAgICBkZWYgZ2V0VGVzdHModGVzdCk6CisgICAgICAgICcnJ1JldHVybiBhbGwgaW5kaXZpZHVhbCB0ZXN0cyBleGVjdXRlZCB3aGVuIHJ1bm5pbmcgdGhlIHN1aXRlLicnJworICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdW5pdHRlc3QgZG9lcyBub3QgaGF2ZSBhbiBBUEkgZm9yIHRoaXMsIHNvIHdlIGhhdmUKKyAgICAgICAgIyB0byByZWx5IG9uIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIFRoaXMgb25seSBuZWVkcyB0byB3b3JrCisgICAgICAgICMgZm9yIFRlc3RTdWl0ZSBjb250YWluaW5nIFRlc3RDYXNlLgorICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHRlc3QsICdfdGVzdE1ldGhvZE5hbWUnLCBOb25lKQorICAgICAgICBpZiBtZXRob2Q6CisgICAgICAgICAgICAjIGxlYWYgY2FzZTogYSBUZXN0Q2FzZQorICAgICAgICAgICAgeWllbGQgdGVzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBMb29rIGludG8gVGVzdFN1aXRlLgorICAgICAgICAgICAgdGVzdHMgPSBnZXRhdHRyKHRlc3QsICdfdGVzdHMnLCBbXSkKKyAgICAgICAgICAgIGZvciB0MSBpbiB0ZXN0czoKKyAgICAgICAgICAgICAgICBmb3IgdDIgaW4gZ2V0VGVzdHModDEpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCB0MgorCisgICAgIyBEZXRlcm1pbmUgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VpdGVzIGJ5IGxvb2tpbmcgZm9yIEBza2lwVW5sZXNzUGFzc2VkCisgICAgIyBtZXRob2QgYW5ub3RhdGlvbnMuIFN1aXRlIEEgZGVwZW5kcyBvbiBzdWl0ZSBCIGlmIGFueSBtZXRob2QgaW4gQQorICAgICMgZGVwZW5kcyBvbiBhIG1ldGhvZCBvbiBCLgorICAgIGZvciBzdWl0ZSBpbiBzdWl0ZXM6CisgICAgICAgIHN1aXRlLmRlcGVuZGVuY2llcyA9IFtdCisgICAgICAgIHN1aXRlLmRlcHRoID0gMAorICAgICAgICBmb3IgdGVzdCBpbiBnZXRUZXN0cyhzdWl0ZSk6CisgICAgICAgICAgICBtZXRob2RuYW1lID0gZ2V0YXR0cih0ZXN0LCAnX3Rlc3RNZXRob2ROYW1lJywgTm9uZSkKKyAgICAgICAgICAgIGlmIG1ldGhvZG5hbWU6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cih0ZXN0LCBtZXRob2RuYW1lKQorICAgICAgICAgICAgICAgIGRlcGVuZHNfb24gPSBnZXRhdHRyKG1ldGhvZCwgJ19kZXBlbmRzX29uJywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBkZXBlbmRzX29uOgorICAgICAgICAgICAgICAgICAgICBmb3IgZGVwX3N1aXRlIGluIHN1aXRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcGVuZHNfb24gaW4gW2dldGF0dHIodCwgJ190ZXN0TWV0aG9kTmFtZScsIE5vbmUpIGZvciB0IGluIGdldFRlc3RzKGRlcF9zdWl0ZSldOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRlcF9zdWl0ZSBub3QgaW4gc3VpdGUuZGVwZW5kZW5jaWVzIGFuZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwX3N1aXRlIGlzIG5vdCBzdWl0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VpdGUuZGVwZW5kZW5jaWVzLmFwcGVuZChkZXBfc3VpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJiLndhcm4oIlRlc3QgJXMgd2FzIGRlY2xhcmVkIGFzIEBza2lwVW5sZXNzUGFzc2VkKCclcycpIGJ1dCB0aGF0IHRlc3QgaXMgZWl0aGVyIG5vdCBkZWZpbmVkIG9yIG5vdCBhY3RpdmUuIFdpbGwgcnVuIHRoZSB0ZXN0IGFueXdheS4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3QsIGRlcGVuZHNfb24pKQorICAgICMgVXNlIGJydXRlLWZvcmNlIHRvcG9sb2dpY2FsIHNvcnQgdG8gZGV0ZXJtaW5lIG9yZGVyaW5nLiBTb3J0IGJ5CisgICAgIyBkZXB0aCAoaGlnaGVyIGRlcHRoID0gbXVzdCBydW4gbGF0ZXIpLCB3aXRoIG9yaWdpbmFsIG9yZGVyaW5nIHRvCisgICAgIyBicmVhayB0aWVzLgorICAgIGRlZiBzZXRfc3VpdGVfZGVwdGgoc3VpdGUpOgorICAgICAgICBmb3IgZGVwIGluIHN1aXRlLmRlcGVuZGVuY2llczoKKyAgICAgICAgICAgIG5ld19kZXB0aCA9IHNldF9zdWl0ZV9kZXB0aChkZXApICsgMQorICAgICAgICAgICAgaWYgbmV3X2RlcHRoID4gc3VpdGUuZGVwdGg6CisgICAgICAgICAgICAgICAgc3VpdGUuZGVwdGggPSBuZXdfZGVwdGgKKyAgICAgICAgcmV0dXJuIHN1aXRlLmRlcHRoCisgICAgZm9yIGluZGV4LCBzdWl0ZSBpbiBlbnVtZXJhdGUoc3VpdGVzKToKKyAgICAgICAgc2V0X3N1aXRlX2RlcHRoKHN1aXRlKQorICAgICAgICBzdWl0ZS5pbmRleCA9IGluZGV4CisgICAgc3VpdGVzLnNvcnQoY21wPWxhbWJkYSBhLGI6IGNtcCgoYS5kZXB0aCwgYS5pbmRleCksIChiLmRlcHRoLCBiLmluZGV4KSkpCisgICAgcmV0dXJuIHRlc3Rsb2FkZXIuc3VpdGVDbGFzcyhzdWl0ZXMpCisKK2RlZiBydW5UZXN0cyh0YywgdHlwZT0icnVudGltZSIpOgorCisgICAgc3VpdGUgPSBsb2FkVGVzdHModGMsIHR5cGUpCisgICAgYmIubm90ZSgiVGVzdCBtb2R1bGVzICAlcyIgJSB0Yy50ZXN0c2xpc3QpCisgICAgaWYgaGFzYXR0cih0YywgInRhZ2V4cCIpIGFuZCB0Yy50YWdleHA6CisgICAgICAgIGJiLm5vdGUoIkZpbHRlciB0ZXN0IGNhc2VzIGJ5IHRhZ3M6ICVzIiAlIHRjLnRhZ2V4cCkKKyAgICBiYi5ub3RlKCJGb3VuZCAlcyB0ZXN0cyIgJSBzdWl0ZS5jb3VudFRlc3RDYXNlcygpKQorICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHZlcmJvc2l0eT0yKQorICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4oc3VpdGUpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFzUGFja2FnZShzZWxmLCBwa2cpOgorICAgICAgICBmb3IgaXRlbSBpbiBvZVRlc3QudGMucGtnbWFuaWZlc3Quc3BsaXQoJ1xuJyk6CisgICAgICAgICAgICBpZiByZS5tYXRjaChwa2csIGl0ZW0pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhc0ZlYXR1cmUoc2VsZixmZWF0dXJlKToKKworICAgICAgICBpZiBmZWF0dXJlIGluIG9lVGVzdC50Yy5pbWFnZWZlYXR1cmVzIG9yIFwKKyAgICAgICAgICAgICAgICBmZWF0dXJlIGluIG9lVGVzdC50Yy5kaXN0cm9mZWF0dXJlczoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3Mgb2VSdW50aW1lVGVzdChvZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIHNlbGYudGFyZ2V0ID0gb2VSdW50aW1lVGVzdC50Yy50YXJnZXQKKyAgICAgICAgc3VwZXIob2VSdW50aW1lVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBDaGVjayBpZiB0ZXN0IG5lZWRzIHRvIHJ1bgorICAgICAgICBpZiBzZWxmLnRjLnNpZ3Rlcm06CisgICAgICAgICAgICBzZWxmLmZhaWwoIkdvdCBTSUdURVJNIikKKyAgICAgICAgZWxpZiAodHlwZShzZWxmLnRhcmdldCkuX19uYW1lX18gPT0gIlFlbXVUYXJnZXQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRhcmdldC5jaGVjaygpLCBtc2cgPSAiUWVtdSBub3QgcnVubmluZz8iKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIElmIGEgdGVzdCBmYWlscyBvciB0aGVyZSBpcyBhbiBleGNlcHRpb24KKyAgICAgICAgaWYgbm90IGV4Y19pbmZvKCkgPT0gKE5vbmUsIE5vbmUsIE5vbmUpOgorICAgICAgICAgICAgZXhjX2NsZWFyKCkKKyAgICAgICAgICAgICNPbmx5IGR1bXAgZm9yIFFlbXVUYXJnZXQKKyAgICAgICAgICAgIGlmICh0eXBlKHNlbGYudGFyZ2V0KS5fX25hbWVfXyA9PSAiUWVtdVRhcmdldCIpOgorICAgICAgICAgICAgICAgIHNlbGYudGMuaG9zdF9kdW1wZXIuY3JlYXRlX2RpcihzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQudGFyZ2V0X2R1bXBlci5kdW1wX3RhcmdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGMuaG9zdF9kdW1wZXIuZHVtcF9kaXIpCisgICAgICAgICAgICAgICAgcHJpbnQgKCIlcyBkdW1wIGRhdGEgc3RvcmVkIGluICVzIiAlIChzZWxmLl90ZXN0TWV0aG9kTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRjLmhvc3RfZHVtcGVyLmR1bXBfZGlyKSkKKworICAgICNUT0RPOiB1c2UgcGFja2FnZV9tYW5hZ2VyLnB5IHRvIGluc3RhbGwgcGFja2FnZXMgb24gYW55IHR5cGUgb2YgaW1hZ2UKKyAgICBkZWYgaW5zdGFsbF9wYWNrYWdlcyhzZWxmLCBwYWNrYWdlbGlzdCk6CisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VsaXN0OgorICAgICAgICAgICAgKHN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bigic21hcnQgaW5zdGFsbCAteSAiK3BhY2thZ2UpCisgICAgICAgICAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKK2NsYXNzIG9lU0RLVGVzdChvZVRlc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CisgICAgICAgIHNlbGYuc2RrdGVzdGRpciA9IG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyCisgICAgICAgIHN1cGVyKG9lU0RLVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYXNIb3N0UGFja2FnZShzZWxmLCBwa2cpOgorCisgICAgICAgIGlmIHJlLnNlYXJjaChwa2csIG9lVGVzdC50Yy5ob3N0cGtnbWFuaWZlc3QpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX3J1bihzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY21kLCBzaGVsbD1UcnVlKQorCitkZWYgZ2V0bW9kdWxlKHBvcz0yKToKKyAgICAjIHN0YWNrIHJldHVybnMgYSBsaXN0IG9mIHR1cGxlcyBjb250YWluZyBmcmFtZSBpbmZvcm1hdGlvbgorICAgICMgRmlyc3QgZWxlbWVudCBvZiB0aGUgbGlzdCB0aGUgaXMgY3VycmVudCBmcmFtZSwgY2FsbGVyIGlzIDEKKyAgICBmcmFtZWluZm8gPSBpbnNwZWN0LnN0YWNrKClbcG9zXQorICAgIG1vZG5hbWUgPSBpbnNwZWN0LmdldG1vZHVsZW5hbWUoZnJhbWVpbmZvWzFdKQorICAgICNtb2RuYW1lID0gaW5zcGVjdC5nZXRtb2R1bGUoZnJhbWVpbmZvWzBdKS5fX25hbWVfXworICAgIHJldHVybiBtb2RuYW1lCisKK2RlZiBza2lwTW9kdWxlKHJlYXNvbiwgcG9zPTIpOgorICAgIG1vZG5hbWUgPSBnZXRtb2R1bGUocG9zKQorICAgIGlmIG1vZG5hbWUgbm90IGluIG9lVGVzdC50Yy50ZXN0c3JlcXVpcmVkOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiJXM6ICVzIiAlIChtb2RuYW1lLCByZWFzb24pKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiXG5UZXN0ICVzIHdhbnRzIHRvIGJlIHNraXBwZWQuXG5SZWFzb24gaXM6ICVzIiBcCisgICAgICAgICAgICAgICAgIlxuVGVzdCB3YXMgcmVxdWlyZWQgaW4gVEVTVF9TVUlURVMsIHNvIGVpdGhlciB0aGUgY29uZGl0aW9uIGZvciBza2lwcGluZyBpcyB3cm9uZyIgXAorICAgICAgICAgICAgICAgICJcbm9yIHRoZSBpbWFnZSByZWFsbHkgZG9lc24ndCBoYXZlIHRoZSByZXF1aXJlZCBmZWF0dXJlL3BhY2thZ2Ugd2hlbiBpdCBzaG91bGQuIiAlIChtb2RuYW1lLCByZWFzb24pKQorCitkZWYgc2tpcE1vZHVsZUlmKGNvbmQsIHJlYXNvbik6CisKKyAgICBpZiBjb25kOgorICAgICAgICBza2lwTW9kdWxlKHJlYXNvbiwgMykKKworZGVmIHNraXBNb2R1bGVVbmxlc3MoY29uZCwgcmVhc29uKToKKworICAgIGlmIG5vdCBjb25kOgorICAgICAgICBza2lwTW9kdWxlKHJlYXNvbiwgMykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVuZXhwb3J0ZWQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bmV4cG9ydGVkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2NDQyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bmV4cG9ydGVkLnB5CkBAIC0wLDAgKzEsMTQ2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKworCisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZSBidWlsZCBzeXN0ZW0gdG8gcnVuIGltYWdlIHRlc3RzLgorIyBJdCBuZWVkcyBhIGpzb24gZmlsZSBhcyBpbnB1dCBhcyBleHBvcnRlZCBieSB0aGUgYnVpbGQuCisjIEUuZyBmb3IgYW4gYWxyZWFkeSBidWlsdCBpbWFnZToKKyMtIGV4cG9ydCB0aGUgdGVzdHM6CisjICAgVEVTVF9FWFBPUlRfT05MWSA9ICIxIgorIyAgIFRFU1RfVEFSR0VUICA9ICJzaW1wbGVyZW1vdGUiCisjICAgVEVTVF9UQVJHRVRfSVAgPSAiMTkyLjE2OC43LjIiCisjICAgVEVTVF9TRVJWRVJfSVAgPSAiMTkyLjE2OC43LjEiCisjIGJpdGJha2UgY29yZS1pbWFnZS1zYXRvIC1jIHRlc3RpbWFnZQorIyBTZXR1cCB5b3VyIHRhcmdldCwgZS5nIGZvciBxZW11OiBydW5xZW11IGNvcmUtaW1hZ2Utc2F0bworIyBjZCBidWlsZC90bXAvdGVzdGltYWdlL2NvcmUtaW1hZ2Utc2F0bworIyAuL3J1bmV4cG9ydGVkLnB5IHRlc3RkYXRhLmpzb24KKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgdGltZQorZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCisKK3RyeToKKyAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IGpzb24KKworc3lzLnBhdGguYXBwZW5kKG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIm9lcWEiKSkpCisKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IHJ1blRlc3RzCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAorZnJvbSBvZXFhLnV0aWxzLmR1bXAgaW1wb3J0IGdldF9ob3N0X2R1bXBlcgorCisjIHRoaXMgaXNuJ3QgcHJldHR5IGJ1dCB3ZSBuZWVkIGEgZmFrZSB0YXJnZXQgb2JqZWN0CisjIGZvciBydW5uaW5nIHRoZSB0ZXN0cyBleHRlcm5hbGx5IGFzIHdlIGRvbid0IGNhcmUKKyMgYWJvdXQgZGVwbG95L3N0YXJ0IHdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY29ubmVjdGlvbiBtZXRob2RzIChydW4sIGNvcHkpCitjbGFzcyBGYWtlVGFyZ2V0KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJyx0aW1lLmdtdGltZSgpKQorICAgICAgICBzZWxmLnRlc3RkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5wbiA9IGQuZ2V0VmFyKCJQTiIsIFRydWUpCisKKyAgICBkZWYgZXhwb3J0U3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYuc3NobG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIHNzaGxvZ2xpbmsgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAic3NoX3RhcmdldF9sb2ciKQorICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhzc2hsb2dsaW5rKToKKyAgICAgICAgICAgIG9zLnVubGluayhzc2hsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYuc3NobG9nLCBzc2hsb2dsaW5rKQorICAgICAgICBwcmludCgiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woc2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKworICAgIGRlZiBydW4oc2VsZiwgY21kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLnJ1bihjbWQsIHRpbWVvdXQpCisKKyAgICBkZWYgY29weV90byhzZWxmLCBsb2NhbHBhdGgsIHJlbW90ZXBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfdG8obG9jYWxwYXRoLCByZW1vdGVwYXRoKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25uZWN0aW9uLmNvcHlfZnJvbShyZW1vdGVwYXRoLCBsb2NhbHBhdGgpCisKKworY2xhc3MgTXlEYXRhRGljdChkaWN0KToKKyAgICBkZWYgZ2V0VmFyKHNlbGYsIGtleSwgdW51c2VkID0gTm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldChrZXksICIiKQorCitjbGFzcyBUZXN0Q29udGV4dChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5kID0gTm9uZQorICAgICAgICBzZWxmLnRhcmdldCA9IE5vbmUKKworZGVmIG1haW4oKToKKworICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbb3B0aW9uc10gPGpzb24gZmlsZT4iCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRhcmdldC1pcCIsIGRlc3Q9ImlwIiwgaGVscD0iVGhlIElQIGFkZHJlc3Mgb2YgdGhlIHRhcmdldCBtYWNoaW5lLiBVc2UgdGhpcyB0byBcCisgICAgICAgICAgICBvdmVyd3JpdGUgdGhlIHZhbHVlIGRldGVybWluZWQgZnJvbSBURVNUX1RBUkdFVF9JUCBhdCBidWlsZCB0aW1lIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXMiLCAiLS1zZXJ2ZXItaXAiLCBkZXN0PSJzZXJ2ZXJfaXAiLCBoZWxwPSJUaGUgSVAgYWRkcmVzcyBvZiB0aGlzIG1hY2hpbmUuIFVzZSB0aGlzIHRvIFwKKyAgICAgICAgICAgIG92ZXJ3cml0ZSB0aGUgdmFsdWUgZGV0ZXJtaW5lZCBmcm9tIFRFU1RfU0VSVkVSX0lQIGF0IGJ1aWxkIHRpbWUuIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWQiLCAiLS1kZXBsb3ktZGlyIiwgZGVzdD0iZGVwbG95X2RpciIsIGhlbHA9IkZ1bGwgcGF0aCB0byB0aGUgcGFja2FnZSBmZWVkcywgdGhhdCB0aGlzIFwKKyAgICAgICAgICAgIHRoZSBjb250ZW50cyBvZiB3aGF0IHVzZWQgdG8gYmUgREVQTE9ZX0RJUiBvbiB0aGUgYnVpbGQgbWFjaGluZS4gSWYgbm90IHNwZWNpZmllZCBpdCB3aWxsIHVzZSB0aGUgdmFsdWUgXAorICAgICAgICAgICAgc3BlY2lmaWVkIGluIHRoZSBqc29uIGlmIHRoYXQgZGlyZWN0b3J5IGFjdHVhbGx5IGV4aXN0cyBvciBpdCB3aWxsIGVycm9yIG91dC4iKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItbCIsICItLWxvZy1kaXIiLCBkZXN0PSJsb2dfZGlyIiwgaGVscD0iVGhpcyBzZXRzIHRoZSBwYXRoIGZvciBURVNUX0xPR19ESVIuIElmIG5vdCBzcGVjaWZpZWQgXAorICAgICAgICAgICAgdGhlIGN1cnJlbnQgZGlyIGlzIHVzZWQuIFRoaXMgaXMgdXNlZCBmb3IgdXN1YWxseSBjcmVhdGluZyBhIHNzaCBsb2cgZmlsZSBhbmQgYSBzY3AgdGVzdCBmaWxlLiIpCisKKyAgICAob3B0aW9ucywgYXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHBhcnNlci5lcnJvcigiSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMuIFRoZSBvbmUgYW5kIG9ubHkgYXJndW1lbnQgc2hvdWxkIGJlIGEganNvbiBmaWxlIGV4cG9ydGVkIGJ5IHRoZSBidWlsZCBzeXN0ZW0iKQorCisgICAgd2l0aCBvcGVuKGFyZ3NbMF0sICJyIikgYXMgZjoKKyAgICAgICAgbG9hZGVkID0ganNvbi5sb2FkKGYpCisKKyAgICBpZiBvcHRpb25zLmlwOgorICAgICAgICBsb2FkZWRbInRhcmdldCJdWyJpcCJdID0gb3B0aW9ucy5pcAorICAgIGlmIG9wdGlvbnMuc2VydmVyX2lwOgorICAgICAgICBsb2FkZWRbInRhcmdldCJdWyJzZXJ2ZXJfaXAiXSA9IG9wdGlvbnMuc2VydmVyX2lwCisKKyAgICBkID0gTXlEYXRhRGljdCgpCisgICAgZm9yIGtleSBpbiBsb2FkZWRbImQiXS5rZXlzKCk6CisgICAgICAgIGRba2V5XSA9IGxvYWRlZFsiZCJdW2tleV0KKworICAgIGlmIG9wdGlvbnMubG9nX2RpcjoKKyAgICAgICAgZFsiVEVTVF9MT0dfRElSIl0gPSBvcHRpb25zLmxvZ19kaXIKKyAgICBlbHNlOgorICAgICAgICBkWyJURVNUX0xPR19ESVIiXSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKQorICAgIGlmIG9wdGlvbnMuZGVwbG95X2RpcjoKKyAgICAgICAgZFsiREVQTE9ZX0RJUiJdID0gb3B0aW9ucy5kZXBsb3lfZGlyCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZFsiREVQTE9ZX0RJUiJdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGhlIHBhdGggdG8gREVQTE9ZX0RJUiBkb2VzIG5vdCBleGlzdHM6ICVzIiAlIGRbIkRFUExPWV9ESVIiXSkKKworCisgICAgdGFyZ2V0ID0gRmFrZVRhcmdldChkKQorICAgIGZvciBrZXkgaW4gbG9hZGVkWyJ0YXJnZXQiXS5rZXlzKCk6CisgICAgICAgIHNldGF0dHIodGFyZ2V0LCBrZXksIGxvYWRlZFsidGFyZ2V0Il1ba2V5XSkKKworICAgIGhvc3RfZHVtcGVyID0gZ2V0X2hvc3RfZHVtcGVyKGQpCisgICAgaG9zdF9kdW1wZXIucGFyZW50X2RpciA9IGxvYWRlZFsiaG9zdF9kdW1wZXIiXVsicGFyZW50X2RpciJdCisgICAgaG9zdF9kdW1wZXIuY21kcyA9IGxvYWRlZFsiaG9zdF9kdW1wZXIiXVsiY21kcyJdCisKKyAgICB0YyA9IFRlc3RDb250ZXh0KCkKKyAgICBzZXRhdHRyKHRjLCAiZCIsIGQpCisgICAgc2V0YXR0cih0YywgInRhcmdldCIsIHRhcmdldCkKKyAgICBzZXRhdHRyKHRjLCAiaG9zdF9kdW1wZXIiLCBob3N0X2R1bXBlcikKKyAgICBmb3Iga2V5IGluIGxvYWRlZC5rZXlzKCk6CisgICAgICAgIGlmIGtleSAhPSAiZCIgYW5kIGtleSAhPSAidGFyZ2V0IiBhbmQga2V5ICE9ICJob3N0X2R1bXBlciI6CisgICAgICAgICAgICBzZXRhdHRyKHRjLCBrZXksIGxvYWRlZFtrZXldKQorCisgICAgdGFyZ2V0LmV4cG9ydFN0YXJ0KCkKKyAgICBydW5UZXN0cyh0YykKKworICAgIHJldHVybiAwCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdHJ5OgorICAgICAgICByZXQgPSBtYWluKCkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICByZXQgPSAxCisgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Yyg1KQorICAgIHN5cy5leGl0KHJldCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YzZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9fcHRlc3QucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzljNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3B0ZXN0LnB5CkBAIC0wLDAgKzEsMTI1IEBACitpbXBvcnQgdW5pdHRlc3QsIG9zLCBzaHV0aWwKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMubG9ncGFyc2VyIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMuaHR0cHNlcnZlciBpbXBvcnQgSFRUUFNlcnZpY2UKK2ltcG9ydCBiYgoraW1wb3J0IGdsb2IKK2Zyb20gb2UucGFja2FnZV9tYW5hZ2VyIGltcG9ydCBScG1Qa2dzTGlzdAoraW1wb3J0IHN1YnByb2Nlc3MKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBwYWNrYWdlIG1hbmFnZW1lbnQgZmVhdHVyZSIpCisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic21hcnQiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHNtYXJ0IGluc3RhbGxlZCIpCisgICAgaWYgInBhY2thZ2VfcnBtIiAhPSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJQQUNLQUdFX0NMQVNTRVMiLCBUcnVlKS5zcGxpdCgpWzBdOgorICAgICAgICBza2lwTW9kdWxlKCJScG0gaXMgbm90IHRoZSBwcmltYXJ5IHBhY2thZ2UgbWFuYWdlciIpCisKK2NsYXNzIFB0ZXN0UnVubmVyVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgICMgYSBwdGVzdCBsb2cgcGFyc2VyCisgICAgZGVmIHBhcnNlX3B0ZXN0KHNlbGYsIGxvZ2ZpbGUpOgorICAgICAgICBwYXJzZXIgPSBMcGFyc2VyKHRlc3RfMF9wYXNzX3JlZ2V4PSJeUEFTUzooLispIiwgdGVzdF8wX2ZhaWxfcmVnZXg9Il5GQUlMOiguKykiLCBzZWN0aW9uXzBfYmVnaW5fcmVnZXg9Il5CRUdJTjogLiovKC4rKS9wdGVzdCIsIHNlY3Rpb25fMF9lbmRfcmVnZXg9Il5FTkQ6IC4qLyguKykvcHRlc3QiKQorICAgICAgICBwYXJzZXIuaW5pdCgpCisgICAgICAgIHJlc3VsdCA9IFJlc3VsdCgpCisKKyAgICAgICAgd2l0aCBvcGVuKGxvZ2ZpbGUpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHJlc3VsdF90dXBsZSA9IHBhcnNlci5wYXJzZV9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdF90dXBsZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZXN1bHRfdHVwbGUgPSBsaW5lX3R5cGUsIGNhdGVnb3J5LCBzdGF0dXMsIG5hbWUgPSBwYXJzZXIucGFyc2VfbGluZShsaW5lKQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICdzZWN0aW9uJyBhbmQgc3RhdHVzID09ICdiZWdpbic6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfc2VjdGlvbiA9IG5hbWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGxpbmVfdHlwZSA9PSAnc2VjdGlvbicgYW5kIHN0YXR1cyA9PSAnZW5kJzoKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF9zZWN0aW9uID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICd0ZXN0JyBhbmQgc3RhdHVzID09ICdwYXNzJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3JlKGN1cnJlbnRfc2VjdGlvbiwgbmFtZSwgc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgbGluZV90eXBlID09ICd0ZXN0JyBhbmQgc3RhdHVzID09ICdmYWlsJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3JlKGN1cnJlbnRfc2VjdGlvbiwgbmFtZSwgc3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHJlc3VsdC5zb3J0X3Rlc3RzKCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgICNub3RlIHRoZSBleGlzdGluZyBjaGFubmVscyB0aGF0IGFyZSBvbiB0aGUgYm9hcmQgYmVmb3JlIGNyZWF0aW5nIG5ldyBvbmVzCisjICAgICAgICBzZWxmLmV4aXN0aW5nY2hhbm5lbHMgPSBzZXQoKQorIyAgICAgICAgKHN0YXR1cywgcmVzdWx0KSA9IG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAtLXNob3cgfCBncmVwICJcWyInLCAwKQorIyAgICAgICAgZm9yIHggaW4gcmVzdWx0LnNwbGl0KCJcbiIpOgorIyAgICAgICAgICAgIHNlbGYuZXhpc3RpbmdjaGFubmVscy5hZGQoeCkKKyAgICAgICAgc2VsZi5yZXBvX3NlcnZlciA9IEhUVFBTZXJ2aWNlKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuc2VydmVyX2lwKQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0YXJ0KCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcG9fc2VydmVyLnN0b3AoKQorICAgICAgICAjcmVtb3ZlIGNyZWF0ZWQgY2hhbm5lbHMgdG8gYmUgYWJsZSB0byByZXBlYXQgdGhlIHRlc3RzIG9uIHNhbWUgaW1hZ2UKKyMgICAgICAgIChzdGF0dXMsIHJlc3VsdCkgPSBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLS1zaG93IHwgZ3JlcCAiXFsiJywgMCkKKyMgICAgICAgIGZvciB4IGluIHJlc3VsdC5zcGxpdCgiXG4iKToKKyMgICAgICAgICAgICBpZiB4IG5vdCBpbiBzZWxmLmV4aXN0aW5nY2hhbm5lbHM6CisjICAgICAgICAgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LnJ1bignc21hcnQgY2hhbm5lbCAtLXJlbW92ZSAnK3hbMTotMV0rJyAteScsIDApCisKKyAgICBkZWYgYWRkX3NtYXJ0X2NoYW5uZWwoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1hZGQge2F9IHR5cGU9cnBtLW1kIGJhc2V1cmw9e3V9L3thfScuZm9ybWF0KGE9YXJjaCwgdT1kZXBsb3lfdXJsKSwgMCkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzbWFydCB1cGRhdGUnLCAwKQorCisgICAgZGVmIGluc3RhbGxfY29tcGxlbWVudGFyeShzZWxmLCBnbG9icz1Ob25lKToKKyAgICAgICAgaW5zdGFsbGVkX3BrZ3NfZmlsZSA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGxlZF9wa2dzLnR4dCIpCisgICAgICAgIHNlbGYucGtnc19saXN0ID0gUnBtUGtnc0xpc3Qob2VSdW50aW1lVGVzdC50Yy5kLCBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCdJTUFHRV9ST09URlMnLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignYXJjaF92YXInLCBUcnVlKSwgb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignb3NfdmFyJywgVHJ1ZSkpCisgICAgICAgIHdpdGggb3BlbihpbnN0YWxsZWRfcGtnc19maWxlLCAidysiKSBhcyBpbnN0YWxsZWRfcGtnczoKKyAgICAgICAgICAgIGluc3RhbGxlZF9wa2dzLndyaXRlKHNlbGYucGtnc19saXN0Lmxpc3QoImFyY2giKSkKKworICAgICAgICBjbWQgPSBbYmIudXRpbHMud2hpY2gob3MuZ2V0ZW52KCdQQVRIJyksICJvZS1wa2dkYXRhLXV0aWwiKSwKKyAgICAgICAgICAgICAgICItcCIsIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ1BLR0RBVEFfRElSJywgVHJ1ZSksICJnbG9iIiwgaW5zdGFsbGVkX3BrZ3NfZmlsZSwKKyAgICAgICAgICAgICAgIGdsb2JzXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi5ub3RlKCJJbnN0YWxsaW5nIGNvbXBsZW1lbnRhcnkgcGFja2FnZXMgLi4uIikKKyAgICAgICAgICAgIGNvbXBsZW1lbnRhcnlfcGtncyA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJDb3VsZCBub3QgY29tcHV0ZSBjb21wbGVtZW50YXJ5IHBhY2thZ2VzIGxpc3QuIENvbW1hbmQgIgorICAgICAgICAgICAgICAgICAgICAgIiclcycgcmV0dXJuZWQgJWQ6XG4lcyIgJQorICAgICAgICAgICAgICAgICAgICAgKCcgJy5qb2luKGNtZCksIGUucmV0dXJuY29kZSwgZS5vdXRwdXQpKQorCisgICAgICAgIHJldHVybiBjb21wbGVtZW50YXJ5X3BrZ3Muc3BsaXQoKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnB0ZXN0X2xvZyA9IG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJURVNUX0xPR19ESVIiLFRydWUpLCAicHRlc3QtJXMubG9nIiAlIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3B0ZXN0cnVubmVyKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9zbWFydF9jaGFubmVsKCkKKyAgICAgICAgKHJ1bm5lcnN0YXR1cywgcmVzdWx0KSA9IHNlbGYudGFyZ2V0LnJ1bignd2hpY2ggcHRlc3QtcnVubmVyJywgMCkKKyAgICAgICAgY29uZCA9IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgicHRlc3QtcnVubmVyIikgYW5kIG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicHRlc3QiKSBhbmQgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCItcHRlc3QiKSBhbmQgKHJ1bm5lcnN0YXR1cyAhPSAwKQorICAgICAgICBpZiBjb25kOgorICAgICAgICAgICAgc2VsZi5pbnN0YWxsX3BhY2thZ2VzKHNlbGYuaW5zdGFsbF9jb21wbGVtZW50YXJ5KCIqLXB0ZXN0IikpCisgICAgICAgICAgICBzZWxmLmluc3RhbGxfcGFja2FnZXMoWydwdGVzdC1ydW5uZXInXSkKKworICAgICAgICAocnVubmVyc3RhdHVzLCByZXN1bHQpID0gc2VsZi50YXJnZXQucnVuKCcvdXNyL2Jpbi9wdGVzdC1ydW5uZXIgPiAvdG1wL3B0ZXN0LmxvZyAyPiYxJywgMCkKKyAgICAgICAgI2V4aXQgY29kZSBpcyAhPTAgZXZlbiBpZiBwdGVzdC1ydW5uZXIgZXhlY3V0ZXMgYmVjYXVzZSBzb21lIHB0ZXN0IHRlc3RzIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXJzdGF0dXMgIT0gMTI3LCBtc2c9IkNhbm5vdCBleGVjdXRlIHB0ZXN0LXJ1bm5lciEiKQorICAgICAgICBzZWxmLnRhcmdldC5jb3B5X2Zyb20oJy90bXAvcHRlc3QubG9nJywgc2VsZi5wdGVzdF9sb2cpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnB0ZXN0X2xvZywgInB0ZXN0LmxvZyIpCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5wYXJzZV9wdGVzdCgicHRlc3QubG9nIikKKyAgICAgICAgbG9nX3Jlc3VsdHNfdG9fbG9jYXRpb24gPSAiLi9yZXN1bHRzIgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhsb2dfcmVzdWx0c190b19sb2NhdGlvbik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uKQorICAgICAgICBvcy5tYWtlZGlycyhsb2dfcmVzdWx0c190b19sb2NhdGlvbikKKworICAgICAgICByZXN1bHQubG9nX2FzX2ZpbGVzKGxvZ19yZXN1bHRzX3RvX2xvY2F0aW9uLCB0ZXN0X3N0YXR1cyA9IFsncGFzcycsJ2ZhaWwnXSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9fcWVtdXRpbnkucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3FlbXV0aW55LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYzI5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvX3FlbXV0aW55LnB5CkBAIC0wLDAgKzEsOSBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMucWVtdXRpbnlydW5uZXIgaW1wb3J0ICoKKworY2xhc3MgUWVtdVRpbnlUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHRlc3RfYm9vdF90aW55KHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuX3NlcmlhbCgndW5hbWUgLWEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoInlvY3RvLXRpbnkiIGluIG91dHB1dCwgbXNnPSJDYW5ub3QgZGV0ZWN0IHBva3kgdGlueSBib290ISIpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkY3ZzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmNiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRjdnMucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgQnVpbGRDdnNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfY3ZzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRpcHRhYmxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWUyNTJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2J1aWxkaXB0YWJsZXMucHkKQEAgLTAsMCArMSwzMSBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgVGFyZ2V0QnVpbGRQcm9qZWN0CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworY2xhc3MgQnVpbGRJcHRhYmxlc1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gVGFyZ2V0QnVpbGRQcm9qZWN0KG9lUnVudGltZVRlc3QudGMudGFyZ2V0LCBvZVJ1bnRpbWVUZXN0LnRjLmQsCisgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL25ldGZpbHRlci5vcmcvcHJvamVjdHMvaXB0YWJsZXMvZmlsZXMvaXB0YWJsZXMtMS40LjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfaXB0YWJsZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvYnVpbGRzdWRva3UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyYjA2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9idWlsZHN1ZG9rdS5weQpAQCAtMCwwICsxLDI4IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBUYXJnZXRCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBTdWRva3VUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFRhcmdldEJ1aWxkUHJvamVjdChvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldCwgb2VSdW50aW1lVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50L3N1ZG9rdS1zYXZhbnQtMS4zL3N1ZG9rdS1zYXZhbnQtMS4zLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBAdGVzdGNhc2UoMjA3KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2Nvbm5tYW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2OWU1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9jb25ubWFuLnB5CkBAIC0wLDAgKzEsNTQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgiY29ubm1hbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBjb25ubWFuIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIENvbm5tYW5UZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNlcnZpY2Vfc3RhdHVzKHNlbGYsIHNlcnZpY2UpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInN5c3RlbWQiKToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGF0dXMgLWwgJXMnICUgc2VydmljZSkKKyAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiVW5hYmxlIHRvIGdldCBzdGF0dXMgb3IgbG9ncyBmb3IgJXMiICUgc2VydmljZQorCisgICAgQHRlc3RjYXNlKDk2MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2Nvbm5tYW5kX2hlbHAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy91c3Ivc2Jpbi9jb25ubWFuZCAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgyMjEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfY29ubm1hbmRfaGVscCcpCisgICAgZGVmIHRlc3RfY29ubm1hbmRfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8IGdyZXAgW2Ndb25ubWFuZCcpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcHJpbnQgc2VsZi5zZXJ2aWNlX3N0YXR1cygiY29ubm1hbiIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGNvbm5tYW5kIHByb2Nlc3MgcnVubmluZyIpCisKKyAgICBAdGVzdGNhc2UoMjIzKQorICAgIGRlZiB0ZXN0X29ubHlfb25lX2Nvbm5tYW5kX2luX2JhY2tncm91bmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgT25seSBvbmUgY29ubm1hbmQgaW4gYmFja2dyb3VuZAorICAgICAgICBFeHBlY3RlZDogICAgVGhlcmUgd2lsbCBiZSBvbmx5IG9uZSBjb25ubWFuZCBpbnN0YW5jZSBpbiBiYWNrZ3JvdW5kLgorICAgICAgICBQcm9kdWN0OiAgICAgQlNQcworICAgICAgICBBdXRob3I6ICAgICAgQWxleGFuZHJ1IEdlb3JnZXNjdSA8YWxleGFuZHJ1LmMuZ2Vvcmdlc2N1QGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCAnY29ubm1hbmQnIGlzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZAorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gZmluZCAiY29ubm1hbmQiIHByb2Nlc3MgcnVubmluZyBpbiBiYWNrZ3JvdW5kLicpCisKKyAgICAgICAgIyBTdGFydCBhIG5ldyBpbnN0YW5jZSBvZiAnY29ubm1hbmQnCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2Nvbm5tYW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gc3RhcnQgYSBuZXcgImNvbm5tYW5kIiBwcm9jZXNzLicpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBvbmx5IG9uZSAnY29ubm1hbmQnIGlzIHJ1bm5pbmcgaW4gYmFja2dyb3VuZAorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbY11vbm5tYW5kIHwgd2MgLWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBmaW5kICJjb25ubWFuZCIgcHJvY2VzcyBydW5uaW5nIGluIGJhY2tncm91bmQuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBpbnQob3V0cHV0KSwgJ0ZvdW5kIHt9IGNvbm5tYW5kIHByb2Nlc3NlcyBydW5uaW5nLCBleHBlY3RlZCAxLicuZm9ybWF0KG91dHB1dCkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9kYXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGZlODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZGF0ZS5weQpAQCAtMCwwICsxLDMxIEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0Citmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgoraW1wb3J0IHJlCisKK2NsYXNzIERhdGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBpZiBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgVHJ1ZSkgPT0gInN5c3RlbWQiOgorICAgICAgICAgICAgc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgc3RvcCBzeXN0ZW1kLXRpbWVzeW5jZCcpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKSA9PSAic3lzdGVtZCI6CisgICAgICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3N5c3RlbWN0bCBzdGFydCBzeXN0ZW1kLXRpbWVzeW5jZCcpCisKKyAgICBAdGVzdGNhc2UoMjExKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfZGF0ZShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZGF0ZSArIiVZLSVtLSVkICVUIicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byBnZXQgaW5pdGlhbCBkYXRlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgb2xkRGF0ZSA9IG91dHB1dAorCisgICAgICAgIHNhbXBsZURhdGUgPSAnIjIwMTYtMDgtMDkgMTA6MDA6MDAiJworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCJkYXRlIC1zICVzIiAlIHNhbXBsZURhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkRhdGUgc2V0IGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGF0ZSAtUiIpCisgICAgICAgIHAgPSByZS5tYXRjaCgnVHVlLCAwOSBBdWcgMjAxNiAxMDowMDouLiBcKzAwMDAnLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLCBtc2c9IlRoZSBkYXRlIHdhcyBub3Qgc2V0IGNvcnJlY3RseSwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignZGF0ZSAtcyAiJXMiJyAlIG9sZERhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byByZXNldCBkYXRlLCBvdXRwdXQ6ICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9kZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTU2OWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2RmLnB5CkBAIC0wLDAgKzEsMTIgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworCitjbGFzcyBEZlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjM0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfZGYoc2VsZik6CisgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigiZGYgLyB8IHNlZCAtbiAnMnAnIHwgYXdrICd7cHJpbnQgJDR9JyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQob3V0cHV0KT41MTIwLCBtc2c9Ik5vdCBlbm91Z2ggc3BhY2Ugb24gaW1hZ2UuIEN1cnJlbnQgc2l6ZSBpcyAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZG1lc2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzMTQ3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9kbWVzZy5weQpAQCAtMCwwICsxLDEyIEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKKworY2xhc3MgRG1lc2dUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIxNSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2RtZXNnKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdkbWVzZyB8IGdyZXAgLXYgbW1jaS1wbDE4eCB8IGdyZXAgLXYgImVycm9yIGNoYW5naW5nIG5ldCBpbnRlcmZhY2UgbmFtZSIgfCBncmVwIC1pdiAiZG1hIHRpbWVvdXQiIHwgZ3JlcCAtdiB1c2JoaWQgfCBncmVwIC1pIGVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZyA9ICJFcnJvciBtZXNzYWdlcyBpbiBkbWVzZyBsb2c6ICVzIiAlIG91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4MzM5NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZC5jCkBAIC0wLDAgKzEsMTkgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK3N0YXRpYyBpbnQgX19pbml0IGhlbGxvX2luaXQodm9pZCkKK3sKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiSGVsbG8gd29ybGQhXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZWxsb19jbGVhbnVwKHZvaWQpCit7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gIkNsZWFuaW5nIHVwIGhlbGxvbW9kLlxuIik7Cit9CisKK21vZHVsZV9pbml0KGhlbGxvX2luaXQpOworbW9kdWxlX2V4aXQoaGVsbG9fY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZSBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy9oZWxsb21vZF9tYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTJkNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL2hlbGxvbW9kX21ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorb2JqLW0gOj0gaGVsbG9tb2QubworS0RJUiA6PSAvdXNyL3NyYy9rZXJuZWwKKworYWxsOgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKSBtb2R1bGVzCisKK2NsZWFuOgorCSQoTUFLRSkgLUMgJChLRElSKSBNPSQoUFdEKSBjbGVhbgpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuYyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ4Mzg5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmMKQEAgLTAsMCArMSwyNiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitkb3VibGUgY29udmVydChsb25nIGxvbmcgbCkKK3sKKyAgcmV0dXJuIChkb3VibGUpbDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pIHsKKworICBsb25nIGxvbmcgbCA9IDEwOworICBkb3VibGUgZjsKKyAgZG91YmxlIGNoZWNrID0gMTAuMDsKKworICBmID0gY29udmVydChsKTsKKyAgcHJpbnRmKCJjb252ZXJ0OiAlbGxkID0+ICVmXG4iLCBsLCBmKTsKKyAgaWYgKCBmICE9IGNoZWNrICkgZXhpdCgxKTsKKworICBmID0gMTIzNC42NzsKKyAgY2hlY2sgPSAxMjM0LjA7CisgIHByaW50ZigiZmxvb3JmKCVmKSA9ICVmXG4iLCBmLCBmbG9vcmYoZikpOworICBpZiAoIGZsb29yZihmKSAhPSBjaGVjaykgZXhpdCgxKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcCBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTFhNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QuY3BwCkBAIC0wLDAgKzEsMyBAQAorI2luY2x1ZGUgPGxpbWl0cz4KKworaW50IG1haW4oKSB7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5YzhmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0LnBsCkBAIC0wLDAgKzEsMiBAQAorJGEgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMTsKK3ByaW50ICgidGhlIHZhbHVlIG9mIGEgaXMgIiwgJGEsICJcbiIpOwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2EyMjczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL2ZpbGVzL3Rlc3QucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworb3Muc3lzdGVtKCd0b3VjaCAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisKK2EgPSA5LjAxZSsyMSAtIDkuMDFlKzIxICsgMC4wMQorcHJpbnQgInRoZSB2YWx1ZSBvZiBhIGlzICVzIiAlIGEKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9maWxlcy90ZXN0bWFrZWZpbGUgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdG1ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMTg0NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZmlsZXMvdGVzdG1ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAordGVzdDogdGVzdC5vCisJZ2NjIC1vIHRlc3QgdGVzdC5vIC1sbQordGVzdC5vOiB0ZXN0LmMKKwlnY2MgLWMgdGVzdC5jCisKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9nY2MucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZ2NjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MGNkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvZ2NjLnB5CkBAIC0wLDAgKzEsNDcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJ0b29scy1zZGsiKToKKyAgICAgICAgc2tpcE1vZHVsZSgiSW1hZ2UgZG9lc24ndCBoYXZlIHRvb2xzLXNkayBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgR2NjQ29tcGlsZVRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3QuYyIpLCAiL3RtcC90ZXN0LmMiKQorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAidGVzdG1ha2VmaWxlIiksICIvdG1wL3Rlc3RtYWtlZmlsZSIpCisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LmNwcCIpLCAiL3RtcC90ZXN0LmNwcCIpCisKKyAgICBAdGVzdGNhc2UoMjAzKQorICAgIGRlZiB0ZXN0X2djY19jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnY2MgL3RtcC90ZXN0LmMgLW8gL3RtcC90ZXN0IC1sbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9ImdjYyBjb21waWxlIGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy90bXAvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgY29tcGlsZWQgZmlsZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMjAwKQorICAgIGRlZiB0ZXN0X2dwcF9jb21waWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdnKysgL3RtcC90ZXN0LmMgLW8gL3RtcC90ZXN0IC1sbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9ImcrKyBjb21waWxlIGZhaWxlZCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJy90bXAvdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgY29tcGlsZWQgZmlsZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE0MikKKyAgICBkZWYgdGVzdF9ncHAyX2NvbXBpbGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2crKyAvdG1wL3Rlc3QuY3BwIC1vIC90bXAvdGVzdCAtbG0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJnKysgY29tcGlsZSBmYWlsZWQsIG91dHB1dDogJXMiICUgb3V0cHV0KQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvdG1wL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJydW5uaW5nIGNvbXBpbGVkIGZpbGUgZmFpbGVkLCBvdXRwdXQgJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIwNCkKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdjZCAvdG1wOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InJ1bm5pbmcgbWFrZSBmYWlsZWQsIG91dHB1dCAlcyIgJSBvdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QuYyAvdG1wL3Rlc3QubyAvdG1wL3Rlc3QgL3RtcC90ZXN0bWFrZWZpbGUiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2tlcm5lbG1vZHVsZS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9rZXJuZWxtb2R1bGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4MTcyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9rZXJuZWxtb2R1bGUucHkKQEAgLTAsMCArMSwzNCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInRvb2xzLXNkayIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgdG9vbHMtc2RrIGluIElNQUdFX0ZFQVRVUkVTIikKKworCitjbGFzcyBLZXJuZWxNb2R1bGVUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihvZVJ1bnRpbWVUZXN0LnRjLmZpbGVzZGlyLCAiaGVsbG9tb2QuYyIpLCAiL3RtcC9oZWxsb21vZC5jIikKKyAgICAgICAgc2VsZi50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgImhlbGxvbW9kX21ha2VmaWxlIiksICIvdG1wL01ha2VmaWxlIikKKworICAgIEB0ZXN0Y2FzZSgnMzE2JykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X2djY19jb21waWxlJykKKyAgICBkZWYgdGVzdF9rZXJuZWxfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbWRzID0gWworICAgICAgICAgICAgJ2NkIC91c3Ivc3JjL2tlcm5lbCAmJiBtYWtlIHNjcmlwdHMnLAorICAgICAgICAgICAgJ2NkIC90bXAgJiYgbWFrZScsCisgICAgICAgICAgICAnY2QgL3RtcCAmJiBpbnNtb2QgaGVsbG9tb2Qua28nLAorICAgICAgICAgICAgJ2xzbW9kIHwgZ3JlcCBoZWxsb21vZCcsCisgICAgICAgICAgICAnZG1lc2cgfCBncmVwIEhlbGxvJywKKyAgICAgICAgICAgICdybW1vZCBoZWxsb21vZCcsICdkbWVzZyB8IGdyZXAgIkNsZWFuaW5nIHVwIGhlbGxvbW9kIicKKyAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGNtZCBpbiBjbWRzOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihjbWQsIDkwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlxuIi5qb2luKFtjbWQsIG91dHB1dF0pKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ3JtIC1mIC90bXAvTWFrZWZpbGUgL3RtcC9oZWxsb21vZC5jJykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9sZGQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbGRkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YjM4ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvbGRkLnB5CkBAIC0wLDAgKzEsMjEgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgidG9vbHMtc2RrIik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSB0b29scy1zZGsgaW4gSU1BR0VfRkVBVFVSRVMiKQorCitjbGFzcyBMZGRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2MikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2xkZF9leGlzdHMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIGxkZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAibGRkIGRvZXMgbm90IGV4aXN0IGluIFBBVEg6IHdoaWNoIGxkZDogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDIzOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9sZGRfZXhpc3RzJykKKyAgICBkZWYgdGVzdF9sZGRfcnRsZGxpc3RfY2hlY2soc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2ZvciBpIGluICQod2hpY2ggbGRkIHwgeGFyZ3MgY2F0IHwgZ3JlcCAiXlJUTERMSVNUInxjdXQgLWRcJz1cJyAtZjJ8dHIgLWQgXCciXCcpOyBkbyB0ZXN0IC1mICRpICYmIGVjaG8gJGkgJiYgYnJlYWs7IGRvbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gImxkZCBwYXRoIG5vdCBjb3JyZWN0IG9yIFJUTERMSVNUIGZpbGVzIGRvbid0IGV4aXN0LiAiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL2xvZ3JvdGF0ZS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9sb2dyb3RhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkNzkxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9sb2dyb3RhdGUucHkKQEAgLTAsMCArMSwyOCBAQAorIyBUaGlzIHRlc3Qgc2hvdWxkIGNvdmVyIGh0dHBzOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy90cl9zaG93X2Nhc2UuY2dpP2Nhc2VfaWQ9Mjg5IHRlc3RjYXNlCisjIE5vdGUgdGhhdCB0aGUgaW1hZ2UgdW5kZXIgdGVzdCBtdXN0IGhhdmUgbG9ncm90YXRlIGluc3RhbGxlZAorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImxvZ3JvdGF0ZSIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBsb2dyb3RhdGUgcGFja2FnZSBpbiBpbWFnZSIpCisKKworY2xhc3MgTG9ncm90YXRlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfMV9sb2dyb3RhdGVfc2V0dXAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiQ291bGQgbm90IGNyZWF0ZSBsb2dyb3RhdGVfZGlyLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI3d0bXAgeyN3dG1wIHtcXG4gICAgb2xkZGlyIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpciMnIC9ldGMvbG9ncm90YXRlLmNvbmYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIkNvdWxkIG5vdCB3cml0ZSB0byBsb2dyb3RhdGUuY29uZiBmaWxlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzKSIgJSAoc3RhdHVzLCBvdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDI4OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF8xX2xvZ3JvdGF0ZV9zZXR1cCIpCisgICAgZGVmIHRlc3RfMl9sb2dyb3RhdGUoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ3JvdGF0ZSAtZiAvZXRjL2xvZ3JvdGF0ZS5jb25mJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJsb2dyb3RhdGUgc2VydmljZSBjb3VsZCBub3QgYmUgcmVsb2FkZWQuIFN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKCdscyAtbGEgL2hvbWUvcm9vdC9sb2dyb3RhdGVfZGlyLyB8IHdjIC1sJylbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludChvdXRwdXQpPj0zLCBtc2cgPSAibmV3IGxvZ2ZpbGUgY291bGQgbm90IGJlIGNyZWF0ZWQuIExpc3Qgb2YgZmlsZXMgd2l0aGluIGxvZyBkaXJlY3Rvcnk6ICVzIiAlKHNlbGYudGFyZ2V0LnJ1bignbHMgLWxhIC9ob21lL3Jvb3QvbG9ncm90YXRlX2RpcicpWzFdKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9tdWx0aWxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWJjYzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL211bHRpbGliLnB5CkBAIC0wLDAgKzEsNDggQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgbXVsdGlsaWJzID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiTVVMVElMSUJTIiwgVHJ1ZSkgb3IgIiIKKyAgICBpZiAibXVsdGlsaWI6bGliMzIiIG5vdCBpbiBtdWx0aWxpYnM6CisgICAgICAgIHNraXBNb2R1bGUoInRoaXMgaXNuJ3QgYSBtdWx0aWxpYjpsaWIzMiBpbWFnZSIpCisKKworY2xhc3MgTXVsdGlsaWJUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHBhcnNlKHNlbGYsIHMpOgorICAgICAgICAiIiIKKyAgICAgICAgUGFyc2UgdGhlIG91dHB1dCBvZiByZWFkZWxmIC1oIGFuZCByZXR1cm4gdGhlIGJpbmFyeSBjbGFzcywgb3IgZmFpbC4KKyAgICAgICAgIiIiCisgICAgICAgIGwgPSBbbC5zcGxpdCgpWzFdIGZvciBsIGluIHMuc3BsaXQoJ1xuJykgaWYgIkNsYXNzOiIgaW4gbF0KKyAgICAgICAgaWYgbDoKKyAgICAgICAgICAgIHJldHVybiBsWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNhbm5vdCBwYXJzZSByZWFkZWxmIG91dHB1dFxuIiArIHMpCisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X2NoZWNrX211bHRpbGliX2xpYmMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGF0IGEgbXVsdGlsaWIgaW1hZ2UgaGFzIGJvdGggMzItYml0IGFuZCA2NC1iaXQgbGliYyBpbi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvbGliL2xpYmMuc28uNiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL2xpYi9saWJjLnNvLjYiKQorICAgICAgICBjbGFzczMyID0gc2VsZi5wYXJzZShvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvbGliNjQvbGliYy5zby42IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICJGYWlsZWQgdG8gcmVhZGVsZiAvbGliNjQvbGliYy5zby42IikKKyAgICAgICAgY2xhc3M2NCA9IHNlbGYucGFyc2Uob3V0cHV0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3MzMiwgIkVMRjMyIiwgbXNnPSIvbGliL2xpYmMuc28uNiBpc24ndCBFTEYzMiAoaXMgJXMpIiAlIGNsYXNzMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xhc3M2NCwgIkVMRjY0IiwgbXNnPSIvbGliNjQvbGliYy5zby42IGlzbid0IEVMRjY0IChpcyAlcykiICUgY2xhc3M2NCkKKworICAgIEB0ZXN0Y2FzZSgnMjc5JykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9jaGVja19tdWx0aWxpYl9saWJjJykKKyAgICBkZWYgdGVzdF9maWxlX2Nvbm5tYW4oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoJ2xpYjMyLWNvbm5tYW4tZ25vbWUnKSwgbXNnPSJUaGlzIHRlc3QgYXNzdW1lcyBsaWIzMi1jb25ubWFuLWdub21lIGlzIGluc3RhbGxlZCIpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvdXNyL2Jpbi9jb25ubWFuLWFwcGxldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCAiRmFpbGVkIHRvIHJlYWRlbGYgL3Vzci9iaW4vY29ubm1hbi1hcHBsZXQiKQorICAgICAgICB0aGVjbGFzcyA9IHNlbGYucGFyc2Uob3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWNsYXNzLCAiRUxGMzIiLCBtc2c9ImNvbm5tYW4tYXBwbGV0IGlzbid0IEVMRjMyIChpcyAlcykiICUgdGhlY2xhc3MpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGFtLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhbS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODIwNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhbS5weQpAQCAtMCwwICsxLDI1IEBACisjIFRoaXMgdGVzdCBzaG91bGQgY292ZXIgaHR0cHM6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnL3RyX3Nob3dfY2FzZS5jZ2k/Y2FzZV9pZD0yODcgdGVzdGNhc2UKKyMgTm90ZSB0aGF0IHRoZSBpbWFnZSB1bmRlciB0ZXN0IG11c3QgaGF2ZSAicGFtIiBpbiBESVNUUk9fRkVBVFVSRVMKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNGZWF0dXJlKCJwYW0iKToKKyAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSAncGFtJyBpbiBESVNUUk9fRkVBVFVSRVMiKQorCisKK2NsYXNzIFBhbUJhc2ljVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyODcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9wYW0oc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2xvZ2luIC0taGVscCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAxLCBtc2cgPSAibG9naW4gY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdwYXNzd2QgLS1oZWxwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJwYXNzd2QgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdSAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInN1IGNvbW1hbmQgZG9lcyBub3Qgd29yayBhcyBleHBlY3RlZC4gU3RhdHVzIGFuZCBvdXRwdXQ6JXMgYW5kICVzIiAlKHN0YXR1cywgb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndXNlcmFkZCAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInVzZXJhZGQgY29tbWFuZCBkb2VzIG5vdCB3b3JrIGFzIGV4cGVjdGVkLiBTdGF0dXMgYW5kIG91dHB1dDolcyBhbmQgJXMiICUoc3RhdHVzLCBvdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BhcnNlbG9ncy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwOTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9wYXJzZWxvZ3MucHkKQEAgLTAsMCArMSwyNTcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdAorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworI2luIHRoZSBmdXR1cmUgdGhlc2UgbGlzdHMgY291bGQgYmUgbW92ZWQgb3V0c2lkZSBvZiBtb2R1bGUKK2Vycm9ycyA9IFsiZXJyb3IiLCAiY2Fubm90IiwgImNhblwndCIsICJmYWlsZWQiXQorCitjb21tb25fZXJyb3JzID0gWworICAgICIoV1cpIHdhcm5pbmcsIChFRSkgZXJyb3IsIChOSSkgbm90IGltcGxlbWVudGVkLCAoPz8pIHVua25vd24uIiwKKyAgICAiZG1hIHRpbWVvdXQiLAorICAgICJjYW5cJ3QgYWRkIGhpZCBkZXZpY2U6IiwKKyAgICAidXNiaGlkOiBwcm9iZSBvZiAiLAorICAgICJfT1NDIGZhaWxlZCAoQUVfRVJST1IpIiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX1NVUFBPUlQpIiwKKyAgICAiQUVfQUxSRUFEWV9FWElTVFMiLAorICAgICJBQ1BJIF9PU0MgcmVxdWVzdCBmYWlsZWQgKEFFX1NVUFBPUlQpIiwKKyAgICAiY2FuXCd0IGRpc2FibGUgQVNQTSIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcInZlc2FcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSB2ZXNhIiwKKyAgICAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlIFwibW9kZXNldHRpbmdcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBtb2Rlc2V0dGluZyIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBcImdseFwiIiwKKyAgICAiRmFpbGVkIHRvIGxvYWQgbW9kdWxlIFwiZmJkZXZcIiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBmYmRldiIsCisgICAgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSBnbHgiLAorICAgICJbZHJtXSBDYW5ub3QgZmluZCBhbnkgY3J0YyBvciBzaXplcyAtIGdvaW5nIDEwMjR4NzY4IiwKKyAgICAiX09TQyBmYWlsZWQgKEFFX05PVF9GT1VORCk7IGRpc2FibGluZyBBU1BNIiwKKyAgICAiT3BlbiBBQ1BJIGZhaWxlZCAoL3Zhci9ydW4vYWNwaWQuc29ja2V0KSAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkiLAorICAgICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uIGNhbm5vdCBiZSBlbmFibGVkOiBub24tUEFFIGtlcm5lbCEiLAorICAgICJoZC46IHBvc3NpYmx5IGZhaWxlZCBvcGNvZGUiLAorICAgICdORVRMSU5LIElOSVRJQUxJWkFUSU9OIEZBSUxFRCcsCisgICAgJ2tlcm5lbDogQ2Fubm90IGZpbmQgbWFwIGZpbGUnLAorICAgICdvbWFwX2h3bW9kOiBkZWJ1Z3NzOiBfd2FpdF90YXJnZXRfZGlzYWJsZSBmYWlsZWQnLAorICAgICdWR0EgYXJiaXRlcjogY2Fubm90IG9wZW4ga2VybmVsIGFyYml0ZXIsIG5vIG11bHRpLWNhcmQgc3VwcG9ydCcsCisgICAgJ0ZhaWxlZCB0byBmaW5kIFVSTDpodHRwOi8vaXB2NC5jb25ubWFuLm5ldC9vbmxpbmUvc3RhdHVzLmh0bWwnLAorICAgICdPbmxpbmUgY2hlY2sgZmFpbGVkIGZvcicsCisgICAgXQorCit4ODZfY29tbW9uID0gWworICAgICdbZHJtOnBzYl9kb19pbml0XSAqRVJST1IqIERlYnVnIGlzJywKKyAgICAnd3JvbmcgRUxGIGNsYXNzJywKKyAgICAnQ291bGQgbm90IGVuYWJsZSBQb3dlckJ1dHRvbiBldmVudCcsCisgICAgJ3Byb2JlIG9mIExOWFBXUkJOOjAwIGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCitdICsgY29tbW9uX2Vycm9ycworCitxZW11eDg2X2NvbW1vbiA9IFsKKyAgICAnRmFzdCBUU0MgY2FsaWJyYXRpb24nLCAKKyAgICAnd3JvbmcgRUxGIGNsYXNzJywKKyAgICAiZmFpbCB0byBhZGQgTU1DT05GSUcgaW5mb3JtYXRpb24sIGNhbid0IGFjY2VzcyBleHRlbmRlZCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSB1bmRlciB0aGlzIGJyaWRnZS4iLAorICAgICJjYW4ndCBjbGFpbSBCQVIgIiwKK10gKyBjb21tb25fZXJyb3JzCisKK2lnbm9yZV9lcnJvcnMgPSB7IAorICAgICdkZWZhdWx0JyA6IGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXV4ODYnIDogWworICAgICAgICAnRmFpbGVkIHRvIGFjY2VzcyBwZXJmY3RyIG1zciAoTVNSJywKKyAgICAgICAgXSArIHFlbXV4ODZfY29tbW9uLAorICAgICdxZW11eDg2LTY0JyA6IHFlbXV4ODZfY29tbW9uLAorICAgICdxZW11bWlwcycgOiBbCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInLAorICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCisgICAgJ3FlbXVtaXBzNjQnIDogWworICAgICAgICAncGNpIDAwMDA6MDA6MDAuMDogW0Zpcm13YXJlIEJ1Z106IHJlZyAweC4uOiBpbnZhbGlkIEJBUiAoY2FuXCd0IHNpemUpJywKKyAgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11cHBjJyA6IFsKKyAgICAgICAgJ1BDSSAwMDAwOjAwIENhbm5vdCByZXNlcnZlIExlZ2FjeSBJTyBbaW8gIDB4MDAwMC0weDBmZmZdJywKKyAgICAgICAgJ2hvc3Qgc2lkZSA4MC13aXJlIGNhYmxlIGRldGVjdGlvbiBmYWlsZWQsIGxpbWl0aW5nIG1heCBzcGVlZCcsCisgICAgICAgICdtb2RlICI2NDB4NDgwIiB0ZXN0IGZhaWxlZCcsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAncWVtdWFybScgOiBbCisgICAgICAgICdtbWNpLXBsMTh4OiBwcm9iZSBvZiBmcGdhOjA1IGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCisgICAgICAgICdtbWNpLXBsMTh4OiBwcm9iZSBvZiBmcGdhOjBiIGZhaWxlZCB3aXRoIGVycm9yIC0yMicsCisgICAgICAgICdGYWlsZWQgdG8gbG9hZCBtb2R1bGUgImdseCInCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdxZW11YXJtNjQnIDogWworICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCisgICAgICAgICcoRUUpIFNlcnZlciB0ZXJtaW5hdGVkIHdpdGggZXJyb3IgKDEpLiBDbG9zaW5nIGxvZyBmaWxlLicsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdlbWVubG93JyA6IFsKKyAgICAgICAgJ1tGaXJtd2FyZSBCdWddOiBBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlICJwc2JkcnYiJywKKyAgICAgICAgJyhFRSkgRmFpbGVkIHRvIGxvYWQgbW9kdWxlIHBzYmRydicsCisgICAgICAgICcoRUUpIG9wZW4gL2Rldi9mYjA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnknLAorICAgICAgICAnKEVFKSBBSUdMWDogcmV2ZXJ0aW5nIHRvIHNvZnR3YXJlIHJlbmRlcmluZycsCisgICAgICAgIF0gKyB4ODZfY29tbW9uLAorICAgICdjb3JlMl8zMicgOiBbCisgICAgICAgICdBQ1BJOiBObyBfQlFDIG1ldGhvZCwgY2Fubm90IGRldGVybWluZSBpbml0aWFsIGJyaWdodG5lc3MnLAorICAgICAgICAnW0Zpcm13YXJlIEJ1Z106IEFDUEk6IE5vIF9CUUMgbWV0aG9kLCBjYW5ub3QgZGV0ZXJtaW5lIGluaXRpYWwgYnJpZ2h0bmVzcycsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSAicHNiIicsCisgICAgICAgICcoRUUpIEZhaWxlZCB0byBsb2FkIG1vZHVsZSBwc2InLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgInBzYmRydiInLAorICAgICAgICAnKEVFKSBGYWlsZWQgdG8gbG9hZCBtb2R1bGUgcHNiZHJ2JywKKyAgICAgICAgJyhFRSkgb3BlbiAvZGV2L2ZiMDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeScsCisgICAgICAgICcoRUUpIEFJR0xYOiByZXZlcnRpbmcgdG8gc29mdHdhcmUgcmVuZGVyaW5nJywKKyAgICAgICAgXSArIHg4Nl9jb21tb24sCisgICAgJ2ludGVsLWNvcmVpNy02NCcgOiBbCisgICAgICAgICJjb250cm9sbGVyIGNhbid0IGRvIERFVlNMUCwgdHVybmluZyBvZmYiLAorICAgICAgICBdICsgY29tbW9uX2Vycm9ycywKKyAgICAnY3Jvd25iYXknIDogeDg2X2NvbW1vbiwKKyAgICAnZ2VuZXJpY3g4NicgOiB4ODZfY29tbW9uLAorICAgICdnZW5lcmljeDg2LTY0JyA6IHg4Nl9jb21tb24sCisgICAgJ2VkZ2Vyb3V0ZXInIDogWworICAgICAgICAnRmF0YWwgc2VydmVyIGVycm9yOicsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdtaW5ub3cnIDogWworICAgICAgICAnbmV0bGluayBpbml0IGZhaWxlZCcsCisgICAgICAgIF0gKyBjb21tb25fZXJyb3JzLAorICAgICdqYXNwZXJmb3Jlc3QnIDogWworICAgICAgICAnQWN0aXZhdGVkIHNlcnZpY2UgXCdvcmcuYmx1ZXpcJyBmYWlsZWQ6JywKKyAgICAgICAgJ1VuYWJsZSB0byBmaW5kIE5GQyBuZXRsaW5rIGZhbWlseScsCisgICAgICAgICduZXRsaW5rIGluaXQgZmFpbGVkJywKKyAgICAgICAgXSArIGNvbW1vbl9lcnJvcnMsCit9CisKK2xvZ19sb2NhdGlvbnMgPSBbIi92YXIvbG9nLyIsIi92YXIvbG9nL2RtZXNnIiwgIi90bXAvZG1lc2dfb3V0cHV0LmxvZyJdCisKK2NsYXNzIFBhcnNlTG9nc1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5pZ25vcmVfZXJyb3JzID0gaWdub3JlX2Vycm9ycworICAgICAgICBzZWxmLmxvZ19sb2NhdGlvbnMgPSBsb2dfbG9jYXRpb25zCisgICAgICAgIHNlbGYubXNnID0gIiIKKworICAgIGRlZiBnZXRNYWNoaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiTUFDSElORSIsIFRydWUpCisKKyAgICAjZ2V0IHNvbWUgaW5mb3JtYXRpb24gb24gdGhlIENQVSBvZiB0aGUgbWFjaGluZSB0byBkaXNwbGF5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG91dHB1dC4gVGhpcyBpbmZvIG1pZ2h0IGJlIHVzZWZ1bCBpbiBzb21lIGNhc2VzLgorICAgIGRlZiBnZXRIYXJkd2FyZUluZm8oc2VsZik6CisgICAgICAgIGh3aSA9ICIiCisgICAgICAgIChzdGF0dXMsIGNwdV9uYW1lKSA9IHNlbGYudGFyZ2V0LnJ1bigiY2F0IC9wcm9jL2NwdWluZm8gfCBncmVwIFwibW9kZWwgbmFtZVwiIHwgaGVhZCAtbjEgfCBhd2sgJ0JFR0lOe0ZTPVwiOlwifXtwcmludCAkMn0nIikKKyAgICAgICAgKHN0YXR1cywgY3B1X3BoeXNpY2FsX2NvcmVzKSA9IHNlbGYudGFyZ2V0LnJ1bigiY2F0IC9wcm9jL2NwdWluZm8gfCBncmVwIFwiY3B1IGNvcmVzXCIgfCBoZWFkIC1uMSB8IGF3ayB7J3ByaW50ICQ0J30iKQorICAgICAgICAoc3RhdHVzLCBjcHVfbG9naWNhbF9jb3JlcykgPSBzZWxmLnRhcmdldC5ydW4oImNhdCAvcHJvYy9jcHVpbmZvIHwgZ3JlcCBcInByb2Nlc3NvclwiIHwgd2MgLWwiKQorICAgICAgICAoc3RhdHVzLCBjcHVfYXJjaCkgPSBzZWxmLnRhcmdldC5ydW4oInVuYW1lIC1tIikKKyAgICAgICAgaHdpICs9ICJNYWNoaW5lIGluZm9ybWF0aW9uOiBcbiIKKyAgICAgICAgaHdpICs9ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgIGh3aSArPSAiTWFjaGluZSBuYW1lOiAiK3NlbGYuZ2V0TWFjaGluZSgpKyJcbiIKKyAgICAgICAgaHdpICs9ICJDUFU6ICIrc3RyKGNwdV9uYW1lKSsiXG4iCisgICAgICAgIGh3aSArPSAiQXJjaDogIitzdHIoY3B1X2FyY2gpKyJcbiIKKyAgICAgICAgaHdpICs9ICJQaHlzaWNhbCBjb3JlczogIitzdHIoY3B1X3BoeXNpY2FsX2NvcmVzKSsiXG4iCisgICAgICAgIGh3aSArPSAiTG9naWNhbCBjb3JlczogIitzdHIoY3B1X2xvZ2ljYWxfY29yZXMpKyJcbiIKKyAgICAgICAgaHdpICs9ICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iCisgICAgICAgIHJldHVybiBod2kKKworICAgICNnbyB0aHJvdWdoIHRoZSBsb2cgbG9jYXRpb25zIHByb3ZpZGVkIGFuZCBpZiBpdCdzIGEgZm9sZGVyIGNyZWF0ZSBhIGxpc3Qgd2l0aCBhbGwgdGhlIC5sb2cgZmlsZXMgaW4gaXQsIGlmIGl0J3MgYSBmaWxlIGp1c3QgYWRkIAorICAgICNpdCB0byB0aGF0IGxpc3QKKyAgICBkZWYgZ2V0TG9nTGlzdChzZWxmLCBsb2dfbG9jYXRpb25zKToKKyAgICAgICAgbG9ncyA9IFtdCisgICAgICAgIGZvciBsb2NhdGlvbiBpbiBsb2dfbG9jYXRpb25zOgorICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigidGVzdCAtZiAiK3N0cihsb2NhdGlvbikpCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IDApOgorICAgICAgICAgICAgICAgIGxvZ3MuYXBwZW5kKHN0cihsb2NhdGlvbikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oInRlc3QgLWQgIitzdHIobG9jYXRpb24pKQorICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oImZpbmQgIitzdHIobG9jYXRpb24pKyIvKi5sb2cgLW1heGRlcHRoIDEgLXR5cGUgZiIpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gMCk6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc3BsaXRsaW5lcygpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG9nZmlsZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ncy5hcHBlbmQob3MucGF0aC5qb2luKGxvY2F0aW9uLHN0cihsb2dmaWxlKSkpCisgICAgICAgIHJldHVybiBsb2dzCisKKyAgICAjY29weSB0aGUgbG9nIGZpbGVzIHRvIGJlIHBhcnNlZCBsb2NhbGx5CisgICAgZGVmIHRyYW5zZmVyX2xvZ3Moc2VsZiwgbG9nX2xpc3QpOgorICAgICAgICB0YXJnZXRfbG9ncyA9ICd0YXJnZXRfbG9ncycKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9sb2dzKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRhcmdldF9sb2dzKQorICAgICAgICBmb3IgZiBpbiBsb2dfbGlzdDoKKyAgICAgICAgICAgIHNlbGYudGFyZ2V0LmNvcHlfZnJvbShmLCB0YXJnZXRfbG9ncykKKworICAgICNnZXQgdGhlIGxvY2FsIGxpc3Qgb2YgbG9ncworICAgIGRlZiBnZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZiwgbG9nX2xvY2F0aW9ucyk6CisgICAgICAgIHNlbGYudHJhbnNmZXJfbG9ncyhzZWxmLmdldExvZ0xpc3QobG9nX2xvY2F0aW9ucykpCisgICAgICAgIGxvZ3MgPSBbIG9zLnBhdGguam9pbigndGFyZ2V0X2xvZ3MnLGYpIGZvciBmIGluIG9zLmxpc3RkaXIoJ3RhcmdldF9sb2dzJykgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKCd0YXJnZXRfbG9ncycsZikpIF0KKyAgICAgICAgcmV0dXJuIGxvZ3MKKworICAgICNidWlsZCB0aGUgZ3JlcCBjb21tYW5kIHRvIGJlIHVzZWQgd2l0aCBmaWx0ZXJzIGFuZCBleGNsdXNpb25zCisgICAgZGVmIGJ1aWxkX2dyZXBjbWQoc2VsZiwgZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2cpOgorICAgICAgICBncmVwY21kID0gImdyZXAgIgorICAgICAgICBncmVwY21kICs9Ii1FaSBcIiIKKyAgICAgICAgZm9yIGVycm9yIGluIGVycm9yczoKKyAgICAgICAgICAgIGdyZXBjbWQgKz0gZXJyb3IrInwiCisgICAgICAgIGdyZXBjbWQgPSBncmVwY21kWzotMV0KKyAgICAgICAgZ3JlcGNtZCArPSAiXCIgIitzdHIobG9nKSsiIHwgZ3JlcCAtRWl2IFwnIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlcnJvcmxpc3QgPSBpZ25vcmVfZXJyb3JzW3NlbGYuZ2V0TWFjaGluZSgpXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLm1zZyArPSAiTm8gaWdub3JlIGxpc3QgZm91bmQgZm9yIHRoaXMgbWFjaGluZSwgdXNpbmcgZGVmYXVsdFxuIgorICAgICAgICAgICAgZXJyb3JsaXN0ID0gaWdub3JlX2Vycm9yc1snZGVmYXVsdCddCisgICAgICAgIGZvciBpZ25vcmVfZXJyb3IgaW4gZXJyb3JsaXN0OgorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIigiLCAiXCgiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIikiLCAiXCkiKQorICAgICAgICAgICAgaWdub3JlX2Vycm9yID0gaWdub3JlX2Vycm9yLnJlcGxhY2UoIiciLCAiLiIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiPyIsICJcPyIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiWyIsICJcWyIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiXSIsICJcXSIpCisgICAgICAgICAgICBpZ25vcmVfZXJyb3IgPSBpZ25vcmVfZXJyb3IucmVwbGFjZSgiKiIsICJcKiIpCisgICAgICAgICAgICBncmVwY21kICs9IGlnbm9yZV9lcnJvcisifCIKKyAgICAgICAgZ3JlcGNtZCA9IGdyZXBjbWRbOi0xXQorICAgICAgICBncmVwY21kICs9ICJcJyIKKyAgICAgICAgcmV0dXJuIGdyZXBjbWQKKworICAgICNncmVwIG9ubHkgdGhlIGVycm9ycyBzbyB0aGF0IHRoZWlyIGNvbnRleHQgY291bGQgYmUgY29sbGVjdGVkLiBEZWZhdWx0IGNvbnRleHQgaXMgMTAgbGluZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgZXJyb3IgaXRzZWxmCisgICAgZGVmIHBhcnNlX2xvZ3Moc2VsZiwgZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2dzLCBsaW5lc19iZWZvcmUgPSAxMCwgbGluZXNfYWZ0ZXIgPSAxMCk6CisgICAgICAgIHJlc3VsdHMgPSB7fQorICAgICAgICByZXogPSBbXQorICAgICAgICBncmVwX291dHB1dCA9ICcnCisgICAgICAgIGZvciBsb2cgaW4gbG9nczoKKyAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgICAgIHRoZWdyZXAgPSBzZWxmLmJ1aWxkX2dyZXBjbWQoZXJyb3JzLCBpZ25vcmVfZXJyb3JzLCBsb2cpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQodGhlZ3JlcCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiAocmVzdWx0IGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICByZXN1bHRzW2xvZy5yZXBsYWNlKCd0YXJnZXRfbG9ncy8nLCcnKV0gPSB7fQorICAgICAgICAgICAgICAgIHJleiA9IHJlc3VsdC5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgICAgICBmb3IgeHJleiBpbiByZXo6CisgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSAiZ3JlcCBcIlxcIitzdHIoeHJleikrIlwiIC1CICIrc3RyKGxpbmVzX2JlZm9yZSkrIiAtQSAiK3N0cihsaW5lc19hZnRlcikrIiAiK3N0cihsb2cpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBfb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoY29tbWFuZCwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICByZXN1bHRzW2xvZy5yZXBsYWNlKCd0YXJnZXRfbG9ncy8nLCcnKV1beHJlel09Z3JlcF9vdXRwdXQKKyAgICAgICAgcmV0dXJuIHJlc3VsdHMKKworICAgICNnZXQgdGhlIG91dHB1dCBvZiBkbWVzZyBhbmQgd3JpdGUgaXQgaW4gYSBmaWxlLiBUaGlzIGZpbGUgaXMgYWRkZWQgdG8gbG9nX2xvY2F0aW9ucy4KKyAgICBkZWYgd3JpdGVfZG1lc2coc2VsZik6CisgICAgICAgIChzdGF0dXMsIGRtZXNnKSA9IHNlbGYudGFyZ2V0LnJ1bigiZG1lc2ciKQorICAgICAgICAoc3RhdHVzLCBkbWVzZzIpID0gc2VsZi50YXJnZXQucnVuKCJlY2hvIFwiIitzdHIoZG1lc2cpKyJcIiA+IC90bXAvZG1lc2dfb3V0cHV0LmxvZyIpCisKKyAgICBAdGVzdGNhc2UoMTA1OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3BhcnNlbG9ncyhzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9kbWVzZygpCisgICAgICAgIGxvZ19saXN0ID0gc2VsZi5nZXRfbG9jYWxfbG9nX2xpc3Qoc2VsZi5sb2dfbG9jYXRpb25zKQorICAgICAgICByZXN1bHQgPSBzZWxmLnBhcnNlX2xvZ3Moc2VsZi5lcnJvcnMsIHNlbGYuaWdub3JlX2Vycm9ycywgbG9nX2xpc3QpCisgICAgICAgIHByaW50IHNlbGYuZ2V0SGFyZHdhcmVJbmZvKCkKKyAgICAgICAgZXJyY291bnQgPSAwCisgICAgICAgIGZvciBsb2cgaW4gcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIkxvZzogIitsb2crIlxuIgorICAgICAgICAgICAgc2VsZi5tc2cgKz0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgICAgICBmb3IgZXJyb3IgaW4gcmVzdWx0W2xvZ106CisgICAgICAgICAgICAgICAgZXJyY291bnQgKz0gMQorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICJDZW50cmFsIGVycm9yOiAiK3N0cihlcnJvcikrIlxuIgorICAgICAgICAgICAgICAgIHNlbGYubXNnICs9ICAiKioqKioqKioqKioqKioqKioqKioqKipcbiIKKyAgICAgICAgICAgICAgICBzZWxmLm1zZyArPSAgcmVzdWx0W3N0cihsb2cpXVtzdHIoZXJyb3IpXSsiXG4iCisgICAgICAgICAgICAgICAgc2VsZi5tc2cgKz0gICIqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAgICAgICBzZWxmLm1zZyArPSAiJXMgZXJyb3JzIGZvdW5kIGluIGxvZ3MuIiAlIGVycmNvdW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyY291bnQsIDAsIG1zZz1zZWxmLm1zZykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BlcmwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0NGQwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9wZXJsLnB5CkBAIC0wLDAgKzEsMzAgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBpZiBub3Qgb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJwZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQorCisKK2NsYXNzIFBlcmxUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIG9lUnVudGltZVRlc3QudGMudGFyZ2V0LmNvcHlfdG8ob3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZmlsZXNkaXIsICJ0ZXN0LnBsIiksICIvdG1wL3Rlc3QucGwiKQorCisgICAgQHRlc3RjYXNlKDExNDEpCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3doaWNoIHBlcmwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQZXJsIGJpbmFyeSBub3QgaW4gUEFUSCBvciBub3Qgb24gdGFyZ2V0LiIpCisKKyAgICBAdGVzdGNhc2UoMjA4KQorICAgIGRlZiB0ZXN0X3Blcmxfd29ya3Moc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3BlcmwgL3RtcC90ZXN0LnBsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iRXhpdCBzdGF0dXMgd2FzIG5vdCAwLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICJ0aGUgdmFsdWUgb2YgYSBpcyAwLjAxIiwgbXNnPSJJbmNvcnJlY3Qgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QucGwiKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvcGluZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM0NjAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3BpbmcucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2NsYXNzIFBpbmdUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDk2NCkKKyAgICBkZWYgdGVzdF9waW5nKHNlbGYpOgorICAgICAgICBvdXRwdXQgPSAnJworICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZW5kdGltZSA9IHRpbWUudGltZSgpICsgNjAKKyAgICAgICAgd2hpbGUgY291bnQgPCA1IGFuZCB0aW1lLnRpbWUoKSA8IGVuZHRpbWU6CisgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigicGluZyAtYyAxICVzIiAlIHNlbGYudGFyZ2V0LmlwLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgb3V0cHV0ICs9IHByb2MuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgaWYgcHJvYy5wb2xsKCkgPT0gMDoKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvdW50ID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCA1LCBtc2cgPSAiRXhwZWN0ZWQgNSBjb25zZWN1dGl2ZSByZXBsaWVzLCBnb3QgJWQuXG5waW5nIG91dHB1dCBpczpcbiVzIiAlIChjb3VudCxvdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3B5dGhvbi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlZGI3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9weXRob24ucHkKQEAgLTAsMCArMSwzNSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInB5dGhvbiIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBweXRob24gcGFja2FnZSBpbiB0aGUgaW1hZ2UiKQorCisKK2NsYXNzIFB5dGhvblRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQuY29weV90byhvcy5wYXRoLmpvaW4ob2VSdW50aW1lVGVzdC50Yy5maWxlc2RpciwgInRlc3QucHkiKSwgIi90bXAvdGVzdC5weSIpCisKKyAgICBAdGVzdGNhc2UoMTE0NSkKKyAgICBkZWYgdGVzdF9weXRob25fZXhpc3RzKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd3aGljaCBweXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJQeXRob24gYmluYXJ5IG5vdCBpbiBQQVRIIG9yIG5vdCBvbiB0YXJnZXQuIikKKworICAgIEB0ZXN0Y2FzZSg5NjUpCisgICAgZGVmIHRlc3RfcHl0aG9uX3N0ZG91dChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncHl0aG9uIC90bXAvdGVzdC5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkV4aXQgc3RhdHVzIHdhcyBub3QgMC4gT3V0cHV0OiAlcyIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNDYpCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdscyAvdG1wL3Rlc3RmaWxlLnB5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IlB5dGhvbiB0ZXN0IGZpbGUgZ2VuZXJhdGUgZmFpbGVkLiIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgb2VSdW50aW1lVGVzdC50Yy50YXJnZXQucnVuKCJybSAvdG1wL3Rlc3QucHkgL3RtcC90ZXN0ZmlsZS5weXRob24iKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3JwbS5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhYWUyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9ycG0ucHkKQEAgLTAsMCArMSwxMDEgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgZm5tYXRjaAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgicGFja2FnZS1tYW5hZ2VtZW50Iik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJycG0gbW9kdWxlIHNraXBwZWQ6IHRhcmdldCBkb2Vzbid0IGhhdmUgcGFja2FnZS1tYW5hZ2VtZW50IGluIElNQUdFX0ZFQVRVUkVTIikKKyAgICBpZiAicGFja2FnZV9ycG0iICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlBBQ0tBR0VfQ0xBU1NFUyIsIFRydWUpLnNwbGl0KClbMF06CisgICAgICAgICAgICBza2lwTW9kdWxlKCJycG0gbW9kdWxlIHNraXBwZWQ6IHRhcmdldCBkb2Vzbid0IGhhdmUgcnBtIGFzIHByaW1hcnkgcGFja2FnZSBtYW5hZ2VyIikKKworCitjbGFzcyBScG1CYXNpY1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoOTYwKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3RfcnBtX2hlbHAoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxOTEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3RfcnBtX2hlbHAnKQorICAgIGRlZiB0ZXN0X3JwbV9xdWVyeShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1xIHJwbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9InN0YXR1cyBhbmQgb3V0cHV0OiAlcyBhbmQgJXMiICUgKHN0YXR1cyxvdXRwdXQpKQorCitjbGFzcyBScG1JbnN0YWxsUmVtb3ZlVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBwa2dhcmNoID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignVFVORV9QS0dBUkNIJywgVHJ1ZSkucmVwbGFjZSgiLSIsICJfIikKKyAgICAgICAgcnBtZGlyID0gb3MucGF0aC5qb2luKG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoJ0RFUExPWV9ESVInLCBUcnVlKSwgInJwbSIsIHBrZ2FyY2gpCisgICAgICAgICMgcGljayBycG0tZG9jIGFzIGEgdGVzdCBmaWxlIHRvIGdldCBpbnN0YWxsZWQsIGJlY2F1c2UgaXQncyBzbWFsbCBhbmQgaXQgd2lsbCBhbHdheXMgYmUgYnVpbHQgZm9yIHN0YW5kYXJkIHRhcmdldHMKKyAgICAgICAgZm9yIGYgaW4gZm5tYXRjaC5maWx0ZXIob3MubGlzdGRpcihycG1kaXIpLCAicnBtLWRvYy0qLiVzLnJwbSIgJSBwa2dhcmNoKToKKyAgICAgICAgICAgIHRlc3RycG1maWxlID0gZgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5jb3B5X3RvKG9zLnBhdGguam9pbihycG1kaXIsdGVzdHJwbWZpbGUpLCAiL3RtcC9ycG0tZG9jLnJwbSIpCisKKyAgICBAdGVzdGNhc2UoMTkyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3JwbV9oZWxwJykKKyAgICBkZWYgdGVzdF9ycG1faW5zdGFsbChzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigncnBtIC1pdmggL3RtcC9ycG0tZG9jLnJwbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byBpbnN0YWxsIHJwbS1kb2MgcGFja2FnZTogJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDE5NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faW5zdGFsbCcpCisgICAgZGVmIHRlc3RfcnBtX3JlbW92ZShzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWUgcnBtLWRvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkZhaWxlZCB0byByZW1vdmUgcnBtLWRvYyBwYWNrYWdlOiAlcyIgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA5NikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3JwbV9xdWVyeV9ub25yb290KHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd1c2VyYWRkIHRlc3QxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YXR1cyA9PSAwLCBtc2c9IkZhaWxlZCB0byBjcmVhdGUgbmV3IHVzZXIiKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdWRvIC11IHRlc3QxIGlkJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcodGVzdDEpJyBpbiBvdXRwdXQsIG1zZz0iRmFpbGVkIHRvIGV4ZWN1dGUgYXMgbmV3IHVzZXIiKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzdWRvIC11IHRlc3QxIHJwbSAtcWEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJzdGF0dXM6ICVzLiBDYW5ub3QgcnVuIHJwbSAtcWEiICUgc3RhdHVzKQorCisgICAgQHRlc3RjYXNlKDE5NSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9ycG1faW5zdGFsbCcpCisgICAgZGVmIHRlc3RfY2hlY2tfcnBtX2luc3RhbGxfcmVtb3ZhbF9sb2dfZmlsZV9zaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3VtbWFyeTogICAgIENoZWNrIHJwbSBpbnN0YWxsL3JlbW92YWwgbG9nIGZpbGUgc2l6ZQorICAgICAgICBFeHBlY3RlZDogICAgVGhlcmUgc2hvdWxkIGJlIHNvbWUgbWV0aG9kIHRvIGtlZXAgcnBtIGxvZyBpbiBhIHNtYWxsIHNpemUgLgorICAgICAgICBQcm9kdWN0OiAgICAgQlNQcworICAgICAgICBBdXRob3I6ICAgICAgQWxleGFuZHJ1IEdlb3JnZXNjdSA8YWxleGFuZHJ1LmMuZ2Vvcmdlc2N1QGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisgICAgICAgIGRiX2ZpbGVzX2NtZCA9ICdscyAvdmFyL2xpYi9ycG0vX19kYi4qJworICAgICAgICBnZXRfbG9nX3NpemVfY21kID0gImR1IC92YXIvbGliL3JwbS9sb2cvbG9nLiogfCBhd2sgJ3twcmludCAkMX0nIgorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgc29tZSBkYXRhYmFzZSBmaWxlcyBhcmUgdW5kZXIgL3Zhci9saWIvcnBtIGFzICdfX2RiLnh4eCcKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihkYl9maWxlc19jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGZpbmQgZGF0YWJhc2UgZmlsZXMgdW5kZXIgL3Zhci9saWIvcnBtLyBhcyBfX2RiLnh4eCcpCisKKyAgICAgICAgIyBSZW1vdmUgdGhlIHBhY2thZ2UganVzdCBpbiBjYXNlCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigncnBtIC1lIHJwbS1kb2MnKQorCisgICAgICAgICMgSW5zdGFsbC9SZW1vdmUgYSBwYWNrYWdlIDEwIHRpbWVzCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3JwbSAtaXZoIC90bXAvcnBtLWRvYy5ycG0nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICJGYWlsZWQgdG8gaW5zdGFsbCBycG0tZG9jIHBhY2thZ2UuIFJlYXNvbjoge30iLmZvcm1hdChvdXRwdXQpKQorCisgICAgICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdycG0gLWUgcnBtLWRvYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgIkZhaWxlZCB0byByZW1vdmUgcnBtLWRvYyBwYWNrYWdlLiBSZWFzb246IHt9Ii5mb3JtYXQob3V0cHV0KSkKKworICAgICAgICAjIEdldCB0aGUgc2l6ZSBvZiBsb2cgZmlsZQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKGdldF9sb2dfc2l6ZV9jbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzLCAnRmFpbGVkIHRvIGdldCB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgbG9nIGZpbGUuJykKKworICAgICAgICAjIENvbXBhcmUgZWFjaCBsb2cgc2l6ZQorICAgICAgICBmb3IgbG9nX2ZpbGVfc2l6ZSBpbiBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChpbnQobG9nX2ZpbGVfc2l6ZSksIDExMjY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTG9nIGZpbGUgc2l6ZSBpcyBncmVhdGVyIHRoYXQgZXhwZWN0ZWQgKH4xME1CKSwgZm91bmQge30gYnl0ZXMnLmZvcm1hdChsb2dfZmlsZV9zaXplKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3JtIC1mIC90bXAvcnBtLWRvYy5ycG0nKQorCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9zY2FuZWxmLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTAyNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2NhbmVsZi5weQpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInBheC11dGlscyIpOgorICAgICAgICBza2lwTW9kdWxlKCJwYXgtdXRpbHMgcGFja2FnZSBub3QgaW5zdGFsbGVkIikKKworY2xhc3MgU2NhbmVsZlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2NhbmNtZCA9ICdzY2FuZWxmIC0tcXVpZXQgLS1yZWN1cnNpdmUgLS1tb3VudCAtLWxkcGF0aCAtLXBhdGgnCisKKyAgICBAdGVzdGNhc2UoOTY2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc2NhbmVsZl90ZXh0cmVsKHNlbGYpOgorICAgICAgICAjIHByaW50IFRFWFRSRUwgaW5mb3JtYXRpb24KKyAgICAgICAgc2VsZi5zY2FuY21kICs9ICIgLS10ZXh0cmVsIgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKHNlbGYuc2NhbmNtZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuc3RyaXAoKSwgIiIsICJcbiIuam9pbihbc2VsZi5zY2FuY21kLCBvdXRwdXRdKSkKKworICAgIEB0ZXN0Y2FzZSg5NjcpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zY2FuZWxmX3JwYXRoKHNlbGYpOgorICAgICAgICAjIHByaW50IFJQQVRIIGluZm9ybWF0aW9uCisgICAgICAgIHNlbGYuc2NhbmNtZCArPSAiIC0tcnBhdGgiCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oc2VsZi5zY2FuY21kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAiIiwgIlxuIi5qb2luKFtzZWxmLnNjYW5jbWQsIG91dHB1dF0pKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3NjcC5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS9zY3AucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlODdkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9zY3AucHkKQEAgLTAsMCArMSwyMiBAQAoraW1wb3J0IG9zCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgc2tpcFVubGVzc1Bhc3NlZCwgdGVzdGNhc2UKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IChvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImRyb3BiZWFyIikgb3Igb2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJvcGVuc3NoLXNzaGQiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHNzaCBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU2NwVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMjApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zY3BfZmlsZShzZWxmKToKKyAgICAgICAgdGVzdF9sb2dfZGlyID0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgdGVzdF9maWxlX3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9sb2dfZGlyLCAndGVzdF9zY3BfZmlsZScpCisgICAgICAgIHdpdGggb3Blbih0ZXN0X2ZpbGVfcGF0aCwgJ3cnKSBhcyB0ZXN0X3NjcF9maWxlOgorICAgICAgICAgICAgdGVzdF9zY3BfZmlsZS5zZWVrKDIgKiogMjIgLSAxKQorICAgICAgICAgICAgdGVzdF9zY3BfZmlsZS53cml0ZShvcy5saW5lc2VwKQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byh0ZXN0X2ZpbGVfcGF0aCwgJy90bXAvdGVzdF9zY3BfZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiRmlsZSBjb3VsZCBub3QgYmUgY29waWVkLiBPdXRwdXQ6ICVzIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigibHMgLWxhIC90bXAvdGVzdF9zY3BfZmlsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2cgPSAiU0NQIHRlc3QgZmFpbGVkIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9za2VsZXRvbmluaXQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2tlbGV0b25pbml0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMGNiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc2tlbGV0b25pbml0LnB5CkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhpcyB0ZXN0IHNob3VsZCBjb3ZlciBodHRwczovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvdHJfc2hvd19jYXNlLmNnaT9jYXNlX2lkPTI4NCB0ZXN0Y2FzZQorIyBOb3RlIHRoYXQgdGhlIGltYWdlIHVuZGVyIHRlc3QgbXVzdCBoYXZlIG1ldGEtc2tlbGV0b24gbGF5ZXIgaW4gYmJsYXllcnMgYW5kIElNQUdFX0lOU1RBTExfYXBwZW5kID0gIiBzZXJ2aWNlIiBpbiBsb2NhbC5jb25mCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic2VydmljZSIpOgorICAgICAgICBza2lwTW9kdWxlKCJObyBzZXJ2aWNlIHBhY2thZ2UgaW4gaW1hZ2UiKQorCisKK2NsYXNzIFNrZWxldG9uQmFzaWNUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIGRlZiB0ZXN0X3NrZWxldG9uX2F2YWlsYWJpbGl0eShzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignbHMgL2V0Yy9pbml0LmQvc2tlbGV0b24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gInNrZWxldG9uIGluaXQgc2NyaXB0IG5vdCBmb3VuZC4gT3V0cHV0OlxuJXMgIiAlIG91dHB1dCkKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9ICBzZWxmLnRhcmdldC5ydW4oJ2xzIC91c3Ivc2Jpbi9za2VsZXRvbi10ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZyA9ICJza2VsZXRvbi10ZXN0IG5vdCBmb3VuZC4gT3V0cHV0OlxuJXMiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDI4NCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9za2VsZXRvbl9hdmFpbGFiaWxpdHknKQorICAgIEB1bml0dGVzdC5za2lwSWYoInN5c3RlbWQiID09IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBGYWxzZSksICJOb3QgYXBwcm9waWF0ZSBmb3Igc3lzdGVtZCBpbWFnZSIpCisgICAgZGVmIHRlc3Rfc2tlbGV0b25fc2NyaXB0KHNlbGYpOgorICAgICAgICBvdXRwdXQxID0gc2VsZi50YXJnZXQucnVuKCIvZXRjL2luaXQuZC9za2VsZXRvbiBzdGFydCIpWzFdCisgICAgICAgIChzdGF0dXMsIG91dHB1dDIpID0gc2VsZi50YXJnZXQucnVuKG9lUnVudGltZVRlc3QucHNjbWQgKyAnIHwgZ3JlcCBbc11rZWxldG9uLXRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnID0gIlNrZWxldG9uIHNjcmlwdCBjb3VsZCBub3QgYmUgc3RhcnRlZDpcbiVzXG4lcyIgJSAob3V0cHV0MSwgb3V0cHV0MikpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxNjY4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc21hcnQucHkKQEAgLTAsMCArMSwxNzUgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmh0dHBzZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2aWNlCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoInBhY2thZ2UtbWFuYWdlbWVudCIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgcGFja2FnZSBtYW5hZ2VtZW50IGZlYXR1cmUiKQorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoInNtYXJ0Iik6CisgICAgICAgIHNraXBNb2R1bGUoIkltYWdlIGRvZXNuJ3QgaGF2ZSBzbWFydCBpbnN0YWxsZWQiKQorICAgIGlmICJwYWNrYWdlX3JwbSIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiUEFDS0FHRV9DTEFTU0VTIiwgVHJ1ZSkuc3BsaXQoKVswXToKKyAgICAgICAgc2tpcE1vZHVsZSgiUnBtIGlzIG5vdCB0aGUgcHJpbWFyeSBwYWNrYWdlIG1hbmFnZXIiKQorCitjbGFzcyBTbWFydFRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9oZWxwJykKKyAgICBkZWYgc21hcnQoc2VsZiwgY29tbWFuZCwgZXhwZWN0ZWQgPSAwKToKKyAgICAgICAgY29tbWFuZCA9ICdzbWFydCAlcycgJSBjb21tYW5kCisgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc2VsZi50YXJnZXQucnVuKGNvbW1hbmQsIDE1MDApCisgICAgICAgIG1lc3NhZ2UgPSBvcy5saW5lc2VwLmpvaW4oW2NvbW1hbmQsIG91dHB1dF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCBleHBlY3RlZCwgbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSIgaW4gb3V0cHV0LCBtZXNzYWdlKQorICAgICAgICByZXR1cm4gb3V0cHV0CisKK2NsYXNzIFNtYXJ0QmFzaWNUZXN0KFNtYXJ0VGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzE2KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS1oZWxwJykKKworICAgIEB0ZXN0Y2FzZSg5NjgpCisgICAgZGVmIHRlc3Rfc21hcnRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnLS12ZXJzaW9uJykKKworICAgIEB0ZXN0Y2FzZSg3MjEpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5mbyBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNDIxKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3F1ZXJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdxdWVyeSBweXRob24tc21hcnRwbScpCisKKyAgICBAdGVzdGNhc2UoNzIwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X3NlYXJjaChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnc2VhcmNoIHB5dGhvbi1zbWFydHBtJykKKworICAgIEB0ZXN0Y2FzZSg3MjIpCisgICAgZGVmIHRlc3Rfc21hcnRfc3RhdHMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3N0YXRzJykKKworY2xhc3MgU21hcnRSZXBvVGVzdChTbWFydFRlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb2xpc3QgPSBbXQorICAgICAgICBzZWxmLnJlcG9fc2VydmVyID0gSFRUUFNlcnZpY2Uob2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcignREVQTE9ZX0RJUicsIFRydWUpLCBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5zZXJ2ZXJfaXApCisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RhcnQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucmVwb19zZXJ2ZXIuc3RvcCgpCisgICAgICAgIGZvciBpIGluIHNlbGYucmVwb2xpc3Q6CisgICAgICAgICAgICBvZVJ1bnRpbWVUZXN0LnRjLnRhcmdldC5ydW4oJ3NtYXJ0IGNoYW5uZWwgLXkgLS1yZW1vdmUgJytzdHIoaSkpCisKKyAgICBAdGVzdGNhc2UoMTE0MykKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsJywgMSkKKworICAgIEB0ZXN0Y2FzZSg3MTkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9hZGQoc2VsZik6CisgICAgICAgIGltYWdlX3BrZ3R5cGUgPSBzZWxmLnRjLmQuZ2V0VmFyKCdJTUFHRV9QS0dUWVBFJywgVHJ1ZSkKKyAgICAgICAgZGVwbG95X3VybCA9ICdodHRwOi8vJXM6JXMvJXMnICUoc2VsZi50YXJnZXQuc2VydmVyX2lwLCBzZWxmLnJlcG9fc2VydmVyLnBvcnQsIGltYWdlX3BrZ3R5cGUpCisgICAgICAgIHBrZ2FyY2hzID0gc2VsZi50Yy5kLmdldFZhcignUEFDS0FHRV9BUkNIUycsIFRydWUpLnJlcGxhY2UoIi0iLCJfIikuc3BsaXQoKQorICAgICAgICBmb3IgYXJjaCBpbiBvcy5saXN0ZGlyKCclcy8lcycgJSAoc2VsZi5yZXBvX3NlcnZlci5yb290X2RpciwgaW1hZ2VfcGtndHlwZSkpOgorICAgICAgICAgICAgaWYgYXJjaCBpbiBwa2dhcmNoczoKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC15IC0tYWRkIHthfSB0eXBlPXJwbS1tZCBiYXNldXJsPXt1fS97YX0nLmZvcm1hdChhPWFyY2gsIHU9ZGVwbG95X3VybCkpCisgICAgICAgICAgICAgICAgc2VsZi5yZXBvbGlzdC5hcHBlbmQoYXJjaCkKKyAgICAgICAgc2VsZi5zbWFydCgndXBkYXRlJykKKworICAgIEB0ZXN0Y2FzZSg5NjkpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9oZWxwKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0taGVscCcpCisKKyAgICBAdGVzdGNhc2UoOTcwKQorICAgIGRlZiB0ZXN0X3NtYXJ0X2NoYW5uZWxfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorCisgICAgQHRlc3RjYXNlKDk3MSkKKyAgICBkZWYgdGVzdF9zbWFydF9jaGFubmVsX3Nob3coc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93JykKKworICAgIEB0ZXN0Y2FzZSg3MTcpCisgICAgZGVmIHRlc3Rfc21hcnRfY2hhbm5lbF9ycG1zeXMoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1kaXNhYmxlIHJwbXN5cycpCisgICAgICAgIHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1lbmFibGUgcnBtc3lzJykKKworICAgIEB0ZXN0Y2FzZSgxMTQ0KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsKHNlbGYpOgorICAgICAgICBzZWxmLnNtYXJ0KCdyZW1vdmUgLXkgcHNwbGFzaC1kZWZhdWx0JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyOCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyMykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfaW5zdGFsbF9mcm9tX2Rpc2soc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoLWRlZmF1bHQnKQorICAgICAgICBzZWxmLnNtYXJ0KCdpbnN0YWxsIC15IC4vcHNwbGFzaC1kZWZhdWx0KicpCisKKyAgICBAdGVzdGNhc2UoNzI1KQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9pbnN0YWxsX2Zyb21faHR0cChzZWxmKToKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnZG93bmxvYWQgLS11cmxzIHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHVybCA9IHJlLnNlYXJjaCgnKGh0dHA6Ly8uKi9wc3BsYXNoLWRlZmF1bHQuKlwucnBtKScsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVybCwgbXNnPSJDb3Vsbid0IGZpbmQgZG93bmxvYWQgdXJsIGluICVzIiAlIG91dHB1dCkKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gtZGVmYXVsdCcpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgJXMnICUgdXJsLmdyb3VwKDApKQorCisgICAgQHRlc3RjYXNlKDcyOSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9pbnN0YWxsJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZWluc3RhbGwoc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3JlaW5zdGFsbCAteSBwc3BsYXNoLWRlZmF1bHQnKQorCisgICAgQHRlc3RjYXNlKDcyNykKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zbWFydF9jaGFubmVsX2FkZCcpCisgICAgZGVmIHRlc3Rfc21hcnRfcmVtb3RlX3JlcG8oc2VsZik6CisgICAgICAgIHNlbGYuc21hcnQoJ3VwZGF0ZScpCisgICAgICAgIHNlbGYuc21hcnQoJ2luc3RhbGwgLXkgcHNwbGFzaCcpCisgICAgICAgIHNlbGYuc21hcnQoJ3JlbW92ZSAteSBwc3BsYXNoJykKKworICAgIEB0ZXN0Y2FzZSg3MjYpCisgICAgZGVmIHRlc3Rfc21hcnRfbG9jYWxfZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2NkIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdkb3dubG9hZCBwc3BsYXNoJykKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5zbWFydCgnY2hhbm5lbCAtLWxpc3QnKQorICAgICAgICBmb3IgaSBpbiBvdXRwdXQuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiAoInJwbXN5cyIgIT0gc3RyKGkpKSBhbmQgKCJteXJwbWRpciIgIT0gc3RyKGkpKToKKyAgICAgICAgICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCdjZCAvaG9tZS9yb290JykKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCBwc3BsYXNoJykKKyAgICAgICAgZm9yIGkgaW4gb3V0cHV0LnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgaWYgKCJycG1zeXMiICE9IHN0cihpKSkgYW5kICgibXlycG1kaXIiICE9IHN0cihpKSk6CisgICAgICAgICAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLWVuYWJsZSAnK3N0cihpKSkKKyAgICAgICAgc2VsZi5zbWFydCgnY2hhbm5lbCAtLXJlbW92ZSBteXJwbWRpciAteScpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigicm0gLXJmIC90bXAvbXlycG1kaXIiKQorCisgICAgQHRlc3RjYXNlKDcxOCkKKyAgICBkZWYgdGVzdF9zbWFydF9hZGRfcnBtZGlyKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ21rZGlyIC90bXAvbXlycG1kaXInKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tYWRkIG15cnBtZGlyIHR5cGU9cnBtLWRpciBwYXRoPS90bXAvbXlycG1kaXIgLXknKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZGlzYWJsZSBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJkaXNhYmxlZCA9IHllcyIgaW4gb3V0cHV0LCBtc2c9IkZhaWxlZCB0byBkaXNhYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tZW5hYmxlICBteXJwbWRpciAteScpCisgICAgICAgIG91dHB1dCA9IHNlbGYuc21hcnQoJ2NoYW5uZWwgLS1zaG93IG15cnBtZGlyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiZGlzYWJsZWQgPSB5ZXMiIGluIG91dHB1dCwgbXNnPSJGYWlsZWQgdG8gZW5hYmxlIHJwbSBkaXIiKQorICAgICAgICBzZWxmLnNtYXJ0KCdjaGFubmVsIC0tcmVtb3ZlIG15cnBtZGlyIC15JykKKyAgICAgICAgc2VsZi50YXJnZXQucnVuKCJybSAtcmYgL3RtcC9teXJwbWRpciIpCisKKyAgICBAdGVzdGNhc2UoNzMxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NtYXJ0X2NoYW5uZWxfYWRkJykKKyAgICBkZWYgdGVzdF9zbWFydF9yZW1vdmVfcGFja2FnZShzZWxmKToKKyAgICAgICAgc2VsZi5zbWFydCgnaW5zdGFsbCAteSBwc3BsYXNoJykKKyAgICAgICAgc2VsZi5zbWFydCgncmVtb3ZlIC15IHBzcGxhc2gnKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9zc2gucHkgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzZkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3NoLnB5CkBAIC0wLDAgKzEsMTkgQEAKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJkcm9wYmVhciIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgib3BlbnNzaCIpKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gc3NoIHBhY2thZ2UgaW4gaW1hZ2UiKQorCitjbGFzcyBTc2hUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgQHRlc3RjYXNlKDIyNCkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9waW5nJykKKyAgICBkZWYgdGVzdF9zc2goc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ3VuYW1lIC1hJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iU1NIIFRlc3QgZmFpbGVkOiAlcyIgJSBvdXRwdXQpCisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2NhdCAvZXRjL21hc3RlcmltYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDEsIG1zZz0iVGhpcyBpc24ndCB0aGUgcmlnaHQgaW1hZ2UgIC0gL2V0Yy9tYXN0ZXJpbWFnZSBzaG91bGRuJ3QgYmUgaGVyZSAlcyIgJSBvdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUvc3lzbG9nLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAxZGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c2xvZy5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCAob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJidXN5Ym94LXN5c2xvZyIpIG9yIG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgic3lza2xvZ2QiKSk6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHN5c2xvZyBwYWNrYWdlIGluIGltYWdlIikKKworY2xhc3MgU3lzbG9nVGVzdChvZVJ1bnRpbWVUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgyMDEpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX2hlbHAiKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19ydW5uaW5nKHNlbGYpOgorICAgICAgICAoc3RhdHVzLG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZCArICcgfCBncmVwIC1pIFtzXXlzbG9nZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9Im5vIHN5c2xvZ2QgcHJvY2VzcywgcHMgb3V0cHV0OiAlcyIgJSBzZWxmLnRhcmdldC5ydW4ob2VSdW50aW1lVGVzdC5wc2NtZClbMV0pCisKK2NsYXNzIFN5c2xvZ1Rlc3RDb25maWcob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE0OSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfcnVubmluZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX2xvZ2dlcihzZWxmKToKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIHRlc3QgLWUgL3Zhci9sb2cvbWVzc2FnZXMgJiYgZ3JlcCBmb29iYXIgL3Zhci9sb2cvbWVzc2FnZXMgfHwgbG9ncmVhZCB8IGdyZXAgZm9vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsIG1zZz0iVGVzdCBsb2cgc3RyaW5nIG5vdCBmb3VuZCBpbiAvdmFyL2xvZy9tZXNzYWdlcy4gT3V0cHV0OiAlcyAiICUgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoInRlc3Rfc3lzbG9nX3J1bm5pbmciKQorICAgIGRlZiB0ZXN0X3N5c2xvZ19yZXN0YXJ0KHNlbGYpOgorICAgICAgICBpZiAic3lzdGVtZCIgIT0gb2VSdW50aW1lVGVzdC50Yy5kLmdldFZhcigiVklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlciIsIEZhbHNlKToKKyAgICAgICAgICAgIChzdGF0dXMsb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bignL2V0Yy9pbml0LmQvc3lzbG9nIHJlc3RhcnQnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdzeXN0ZW1jdGwgcmVzdGFydCBzeXNsb2cuc2VydmljZScpCisKKyAgICBAdGVzdGNhc2UoMjAyKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3N5c2xvZ19yZXN0YXJ0IikKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgidGVzdF9zeXNsb2dfbG9nZ2VyIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKCJzeXN0ZW1kIiA9PSBvZVJ1bnRpbWVUZXN0LnRjLmQuZ2V0VmFyKCJWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyIiwgRmFsc2UpLCAiTm90IGFwcHJvcGlhdGUgZm9yIHN5c3RlbWQgaW1hZ2UiKQorICAgIEB1bml0dGVzdC5za2lwSWYob2VSdW50aW1lVGVzdC5oYXNQYWNrYWdlKCJzeXNrbG9nZCIpIG9yIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc1BhY2thZ2UoImJ1c3lib3giKSwgIk5vbi1idXN5Ym94IHN5c2xvZyIpCisgICAgZGVmIHRlc3Rfc3lzbG9nX3N0YXJ0dXBfY29uZmlnKHNlbGYpOgorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJ2VjaG8gIkxPR0ZJTEU9L3Zhci9sb2cvdGVzdCIgPj4gL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mJykKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCcvZXRjL2luaXQuZC9zeXNsb2cgcmVzdGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IkNvdWxkIG5vdCByZXN0YXJ0IHN5c2xvZyBzZXJ2aWNlLiBTdGF0dXMgYW5kIG91dHB1dDogJXMgYW5kICVzIiAlIChzdGF0dXMsb3V0cHV0KSkKKyAgICAgICAgKHN0YXR1cyxvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCdsb2dnZXIgZm9vYmFyICYmIGdyZXAgZm9vYmFyIC92YXIvbG9nL3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJUZXN0IGxvZyBzdHJpbmcgbm90IGZvdW5kLiBPdXRwdXQ6ICVzICIgJSBvdXRwdXQpCisgICAgICAgIHNlbGYudGFyZ2V0LnJ1bigic2VkIC1pICdzI0xPR0ZJTEU9L3Zhci9sb2cvdGVzdCMjJyAvZXRjL3N5c2xvZy1zdGFydHVwLmNvbmYiKQorICAgICAgICBzZWxmLnRhcmdldC5ydW4oJy9ldGMvaW5pdC5kL3N5c2xvZyByZXN0YXJ0JykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5IGIvbWV0YS9saWIvb2VxYS9ydW50aW1lL3N5c3RlbWQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0Mzk0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS9zeXN0ZW1kLnB5CkBAIC0wLDAgKzEsMTAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lUnVudGltZVRlc3QuaGFzRmVhdHVyZSgic3lzdGVtZCIpOgorICAgICAgICAgICAgc2tpcE1vZHVsZSgidGFyZ2V0IGRvZXNuJ3QgaGF2ZSBzeXN0ZW1kIGluIERJU1RST19GRUFUVVJFUyIpCisgICAgaWYgInN5c3RlbWQiICE9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIlZJUlRVQUwtUlVOVElNRV9pbml0X21hbmFnZXIiLCBUcnVlKToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoInN5c3RlbWQgaXMgbm90IHRoZSBpbml0IG1hbmFnZXIgZm9yIHRoaXMgaW1hZ2UiKQorCisKK2NsYXNzIFN5c3RlbWRUZXN0KG9lUnVudGltZVRlc3QpOgorCisgICAgZGVmIHN5c3RlbWN0bChzZWxmLCBhY3Rpb24gPSAnJywgdGFyZ2V0ID0gJycsIGV4cGVjdGVkID0gMCwgdmVyYm9zZSA9IEZhbHNlKToKKyAgICAgICAgY29tbWFuZCA9ICdzeXN0ZW1jdGwgJXMgJXMnICUgKGFjdGlvbiwgdGFyZ2V0KQorICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bihjb21tYW5kKQorICAgICAgICBtZXNzYWdlID0gJ1xuJy5qb2luKFtjb21tYW5kLCBvdXRwdXRdKQorICAgICAgICBpZiBzdGF0dXMgIT0gZXhwZWN0ZWQgYW5kIHZlcmJvc2U6CisgICAgICAgICAgICBtZXNzYWdlICs9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIHN0YXR1cyAtLWZ1bGwgJXMnICUgdGFyZ2V0KVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgZXhwZWN0ZWQsIG1lc3NhZ2UpCisgICAgICAgIHJldHVybiBvdXRwdXQKKworCitjbGFzcyBTeXN0ZW1kQmFzaWNUZXN0cyhTeXN0ZW1kVGVzdCk6CisKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCctLXZlcnNpb24nKQorCisgICAgQHRlc3RjYXNlKDU1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zeXN0ZW1fYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2xpc3QtdW5pdC1maWxlcycpCisKKyAgICBkZWYgc2V0dGxlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQmxvY2sgdW50aWwgc3lzdGVtZCBoYXMgZmluaXNoZWQgYWN0aXZhdGluZyBhbnkgdW5pdHMgYmVpbmcgYWN0aXZhdGVkLAorICAgICAgICBvciB1bnRpbCB0d28gbWludXRlcyBoYXMgZWxhcHNlZC4KKworICAgICAgICBSZXR1cm5zIGEgdHVwbGUsIGVpdGhlciAoVHJ1ZSwgJycpIGlmIGFsbCB1bml0cyBoYXZlIGZpbmlzaGVkCisgICAgICAgIGFjdGl2YXRpbmcsIG9yIChGYWxzZSwgbWVzc2FnZSBzdHJpbmcpIGlmIHRoZXJlIGFyZSBzdGlsbCB1bml0cworICAgICAgICBhY3RpdmF0aW5nIChnZW5lcmFsbHksIGZhaWxpbmcgdW5pdHMgdGhhdCByZXN0YXJ0KS4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArICg2MCAqIDIpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHNlbGYudGFyZ2V0LnJ1bignc3lzdGVtY3RsIC0tc3RhdGU9YWN0aXZhdGluZycpCisgICAgICAgICAgICBpZiAiMCBsb2FkZWQgdW5pdHMgbGlzdGVkIiBpbiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIChUcnVlLCAnJykKKyAgICAgICAgICAgIGlmIHRpbWUudGltZSgpID49IGVuZHRpbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIChGYWxzZSwgb3V0cHV0KQorICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKKworICAgIEB0ZXN0Y2FzZSg1NTApCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9mYWlsZWQoc2VsZik6CisgICAgICAgIHNldHRsZWQsIG91dHB1dCA9IHNlbGYuc2V0dGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldHRsZWQsIG1zZz0iVGltZWQgb3V0IHdhaXRpbmcgZm9yIHN5c3RlbWQgdG8gc2V0dGxlOlxuIiArIG91dHB1dCkKKworICAgICAgICBvdXRwdXQgPSBzZWxmLnN5c3RlbWN0bCgnbGlzdC11bml0cycsICctLWZhaWxlZCcpCisgICAgICAgIG1hdGNoID0gcmUuc2VhcmNoKCIwIGxvYWRlZCB1bml0cyBsaXN0ZWQiLCBvdXRwdXQpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIG91dHB1dCArPSBzZWxmLnN5c3RlbWN0bCgnc3RhdHVzIC0tZnVsbCAtLWZhaWxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaCwgbXNnPSJTb21lIHN5c3RlbWQgdW5pdHMgZmFpbGVkOlxuJXMiICUgb3V0cHV0KQorCisKK2NsYXNzIFN5c3RlbWRTZXJ2aWNlVGVzdHMoU3lzdGVtZFRlc3QpOgorCisgICAgZGVmIGNoZWNrX2Zvcl9hdmFoaShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzUGFja2FnZSgnYXZhaGktZGFlbW9uJyk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiBuZWVkIGF2YWhpLWRhZW1vbiBpbnN0YWxsZWQgb24gdGFyZ2V0IikKKworICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3N5c3RlbWRfYmFzaWMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RhdHVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl9hdmFoaSgpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGF0dXMgLS1mdWxsJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworICAgIEB0ZXN0Y2FzZSg2OTUpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9zdGF0dXMnKQorICAgIGRlZiB0ZXN0X3N5c3RlbWRfc3RvcF9zdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnc3RvcCcsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1hY3RpdmUnLCAnYXZhaGktZGFlbW9uLnNlcnZpY2UnLCBleHBlY3RlZD0zLCB2ZXJib3NlPVRydWUpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdzdGFydCcsJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2lzLWFjdGl2ZScsICdhdmFoaS1kYWVtb24uc2VydmljZScsIHZlcmJvc2U9VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg2OTYpCisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3lzdGVtZF9iYXNpYycpCisgICAgZGVmIHRlc3Rfc3lzdGVtZF9kaXNhYmxlX2VuYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mb3JfYXZhaGkoKQorICAgICAgICBzZWxmLnN5c3RlbWN0bCgnZGlzYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJywgZXhwZWN0ZWQ9MSkKKyAgICAgICAgc2VsZi5zeXN0ZW1jdGwoJ2VuYWJsZScsICdhdmFoaS1kYWVtb24uc2VydmljZScpCisgICAgICAgIHNlbGYuc3lzdGVtY3RsKCdpcy1lbmFibGVkJywgJ2F2YWhpLWRhZW1vbi5zZXJ2aWNlJykKKworY2xhc3MgU3lzdGVtZEpvdXJuYWxUZXN0cyhTeXN0ZW1kVGVzdCk6CisgICAgQHNraXBVbmxlc3NQYXNzZWQoJ3Rlc3Rfc3NoJykKKyAgICBkZWYgdGVzdF9zeXN0ZW1kX2pvdXJuYWwoc2VsZik6CisgICAgICAgIChzdGF0dXMsIG91dHB1dCkgPSBzZWxmLnRhcmdldC5ydW4oJ2pvdXJuYWxjdGwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3ZuYy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS92bmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxZGVmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS92bmMucHkKQEAgLTAsMCArMSwyMCBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VSdW50aW1lVGVzdCwgc2tpcE1vZHVsZVVubGVzcworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2ltcG9ydCByZQorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBza2lwTW9kdWxlVW5sZXNzKG9lUnVudGltZVRlc3QuaGFzUGFja2FnZSgneDExdm5jJyksICJObyB4MTF2bmMgcGFja2FnZSBpbiBpbWFnZSIpCisKK2NsYXNzIFZOQ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjEzKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCd0ZXN0X3NzaCcpCisgICAgZGVmIHRlc3Rfdm5jKHNlbGYpOgorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCd4MTF2bmMgLWRpc3BsYXkgOjAgLWJnIC1vIHgxMXZuYy5sb2cnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJ4MTF2bmMgc2VydmVyIGZhaWxlZCB0byBzdGFydDogJXMiICUgb3V0cHV0KQorICAgICAgICBwb3J0ID0gcmUuc2VhcmNoKCdQT1JUPVswLTldKicsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvcnQsIG1zZz0iTGlzdGVuaW5nIHBvcnQgbm90IHNwZWNpZmllZCBpbiBjb21tYW5kIG91dHB1dDogJXMiICVvdXRwdXQpCisKKyAgICAgICAgdm5jcG9ydCA9IHBvcnQuZ3JvdXAoMCkuc3BsaXQoJz0nKVsxXQorICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGwgfCBncmVwICI6JXMiJyAlIHZuY3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAwLCBtc2c9IngxMXZuYyBzZXJ2ZXIgbm90IHJ1bm5pbmcgb24gcG9ydCAlc1xuXG4lcyIgJSAodm5jcG9ydCwgc2VsZi50YXJnZXQucnVuKCduZXRzdGF0IC1udGw7IGNhdCB4MTF2bmMubG9nJylbMV0pKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9ydW50aW1lL3gzMmxpYi5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS94MzJsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1ZTIxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvcnVudGltZS94MzJsaWIucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVJ1bnRpbWVUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgI2NoZWNrIGlmIERFRkFVTFRUVU5FIGlzIHNldCBhbmQgaXQncyB2YWx1ZSBpczogeDg2LTY0LXgzMgorICAgICAgICBkZWZhdWx0dHVuZSA9IG9lUnVudGltZVRlc3QudGMuZC5nZXRWYXIoIkRFRkFVTFRUVU5FIiwgVHJ1ZSkKKyAgICAgICAgaWYgIng4Ni02NC14MzIiIG5vdCBpbiBkZWZhdWx0dHVuZToKKyAgICAgICAgICAgIHNraXBNb2R1bGUoIkRFRkFVTFRUVU5FIGlzIG5vdCBzZXQgdG8geDg2LTY0LXgzMiIpCisKK2NsYXNzIFgzMmxpYlRlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjgxKQorICAgIEBza2lwVW5sZXNzUGFzc2VkKCJ0ZXN0X3NzaCIpCisgICAgZGVmIHRlc3RfeDMyX2ZpbGUoc2VsZik6CisgICAgICAgIHN0YXR1czEgPSBzZWxmLnRhcmdldC5ydW4oInJlYWRlbGYgLWggL2Jpbi9scyB8IGdyZXAgQ2xhc3MgfCBncmVwIEVMRjMyIilbMF0KKyAgICAgICAgc3RhdHVzMiA9IHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIHwgZ3JlcCBNYWNoaW5lIHwgZ3JlcCBYODYtNjQiKVswXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdHVzMSA9PSAwIGFuZCBzdGF0dXMyID09IDAsIG1zZz0iL2Jpbi9scyBpc24ndCBhbiBYODYtNjQgRUxGMzIgYmluYXJ5LiByZWFkZWxmIHNheXM6ICVzIiAlIHNlbGYudGFyZ2V0LnJ1bigicmVhZGVsZiAtaCAvYmluL2xzIilbMV0pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weSBiL21ldGEvbGliL29lcWEvcnVudGltZS94b3JnLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYmNkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3J1bnRpbWUveG9yZy5weQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lUnVudGltZVRlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVJ1bnRpbWVUZXN0Lmhhc0ZlYXR1cmUoIngxMS1iYXNlIik6CisgICAgICAgICAgICBza2lwTW9kdWxlKCJ0YXJnZXQgZG9lc24ndCBoYXZlIHgxMSBpbiBJTUFHRV9GRUFUVVJFUyIpCisKKworY2xhc3MgWG9yZ1Rlc3Qob2VSdW50aW1lVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMTE1MSkKKyAgICBAc2tpcFVubGVzc1Bhc3NlZCgndGVzdF9zc2gnKQorICAgIGRlZiB0ZXN0X3hvcmdfcnVubmluZyhzZWxmKToKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kICsgJyB8ICBncmVwIC12IHhpbml0IHwgZ3JlcCBbWF1vcmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgbXNnPSJYb3JnIGRvZXMgbm90IGFwcGVhciB0byBiZSBydW5uaW5nICVzIiAlIHNlbGYudGFyZ2V0LnJ1bihvZVJ1bnRpbWVUZXN0LnBzY21kKVsxXSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmM2ZhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2RrL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMyBAQAorIyBFbmFibGUgb3RoZXIgbGF5ZXJzIHRvIGhhdmUgdGVzdHMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRjdnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcxNDZmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2RrL2J1aWxkY3ZzLnB5CkBAIC0wLDAgKzEsMjUgQEAKK2Zyb20gb2VxYS5vZXRlc3QgaW1wb3J0IG9lU0RLVGVzdCwgc2tpcE1vZHVsZQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0ICoKK2Zyb20gb2VxYS51dGlscy50YXJnZXRidWlsZCBpbXBvcnQgU0RLQnVpbGRQcm9qZWN0CisKK2NsYXNzIEJ1aWxkQ3ZzVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdCA9IFNES0J1aWxkUHJvamVjdChvZVNES1Rlc3QudGMuc2RrdGVzdGRpciArICIvY3ZzLyIsIG9lU0RLVGVzdC50Yy5zZGtlbnYsIG9lU0RLVGVzdC50Yy5kLAorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9mdHAuZ251Lm9yZy9ub24tZ251L2N2cy9zb3VyY2UvZmVhdHVyZS8xLjEyLjEzL2N2cy0xLjEyLjEzLnRhci5iejIiKQorICAgICAgICBzZWxmLnByb2plY3QuZG93bmxvYWRfYXJjaGl2ZSgpCisKKyAgICBkZWYgdGVzdF9jdnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wcm9qZWN0LnJ1bl9jb25maWd1cmUoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBjb25maWd1cmUgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fbWFrZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgZmFpbGVkIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5faW5zdGFsbCgpLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJSdW5uaW5nIG1ha2UgaW5zdGFsbCBmYWlsZWQiKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYucHJvamVjdC5jbGVhbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZGlwdGFibGVzLnB5IGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjJlNTMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRpcHRhYmxlcy5weQpAQCAtMCwwICsxLDI2IEBACitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCitmcm9tIG9lcWEudXRpbHMudGFyZ2V0YnVpbGQgaW1wb3J0IFNES0J1aWxkUHJvamVjdAorCisKK2NsYXNzIEJ1aWxkSXB0YWJsZXNUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gU0RLQnVpbGRQcm9qZWN0KG9lU0RLVGVzdC50Yy5zZGt0ZXN0ZGlyICsgIi9pcHRhYmxlcy8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0xLjQuMTMudGFyLmJ6MiIpCisgICAgICAgIHNlbGYucHJvamVjdC5kb3dubG9hZF9hcmNoaXZlKCkKKworICAgIGRlZiB0ZXN0X2lwdGFibGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX2luc3RhbGwoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGluc3RhbGwgZmFpbGVkIikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QuY2xlYW4oKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9idWlsZHN1ZG9rdS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWE3N2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvYnVpbGRzdWRva3UucHkKQEAgLTAsMCArMSwyNiBAQAorZnJvbSBvZXFhLm9ldGVzdCBpbXBvcnQgb2VTREtUZXN0LCBza2lwTW9kdWxlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLnRhcmdldGJ1aWxkIGltcG9ydCBTREtCdWlsZFByb2plY3QKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgaWYgbm90IG9lU0RLVGVzdC5oYXNQYWNrYWdlKCJndGtcKyIpOgorICAgICAgICBza2lwTW9kdWxlKCJJbWFnZSBkb2Vzbid0IGhhdmUgZ3RrKyBpbiBtYW5pZmVzdCIpCisKK2NsYXNzIFN1ZG9rdVRlc3Qob2VTREtUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBTREtCdWlsZFByb2plY3Qob2VTREtUZXN0LnRjLnNka3Rlc3RkaXIgKyAiL3N1ZG9rdS8iLCBvZVNES1Rlc3QudGMuc2RrZW52LCBvZVNES1Rlc3QudGMuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3N1ZG9rdS1zYXZhbnQvc3Vkb2t1LXNhdmFudC9zdWRva3Utc2F2YW50LTEuMy9zdWRva3Utc2F2YW50LTEuMy50YXIuYnoyIikKKyAgICAgICAgc2VsZi5wcm9qZWN0LmRvd25sb2FkX2FyY2hpdmUoKQorCisgICAgZGVmIHRlc3Rfc3Vkb2t1KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucHJvamVjdC5ydW5fY29uZmlndXJlKCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9IlJ1bm5pbmcgY29uZmlndXJlIGZhaWxlZCIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnByb2plY3QucnVuX21ha2UoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iUnVubmluZyBtYWtlIGZhaWxlZCIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9qZWN0LmNsZWFuKCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL2djYy5weSBiL21ldGEvbGliL29lcWEvc2RrL2djYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk5NGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvZ2NjLnB5CkBAIC0wLDAgKzEsMzYgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIG1hY2hpbmUgPSBvZVNES1Rlc3QudGMuZC5nZXRWYXIoIk1BQ0hJTkUiLCBUcnVlKQorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoInBhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi0iICsgbWFjaGluZSk6CisgICAgICAgIHNraXBNb2R1bGUoIlNESyBkb2Vzbid0IGNvbnRhaW4gYSBjcm9zcy1jYW5hZGlhbiB0b29sY2hhaW4iKQorCisKK2NsYXNzIEdjY0NvbXBpbGVUZXN0KG9lU0RLVGVzdCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gWyd0ZXN0LmMnLCAndGVzdC5jcHAnLCAndGVzdG1ha2VmaWxlJ106CisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUob3MucGF0aC5qb2luKHNlbGYudGMuZmlsZXNkaXIsIGYpLCBzZWxmLnRjLnNka3Rlc3RkaXIgKyBmKQorCisgICAgZGVmIHRlc3RfZ2NjX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENDICVzL3Rlc3QuYyAtbyAlcy90ZXN0IC1sbScgJSAoc2VsZi50Yy5zZGt0ZXN0ZGlyLCBzZWxmLnRjLnNka3Rlc3RkaXIpKQorCisgICAgZGVmIHRlc3RfZ3BwX2NvbXBpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignJENYWCAlcy90ZXN0LmMgLW8gJXMvdGVzdCAtbG0nICUgKHNlbGYudGMuc2RrdGVzdGRpciwgc2VsZi50Yy5zZGt0ZXN0ZGlyKSkKKworICAgIGRlZiB0ZXN0X2dwcDJfY29tcGlsZShzZWxmKToKKyAgICAgICAgc2VsZi5fcnVuKCckQ1hYICVzL3Rlc3QuY3BwIC1vICVzL3Rlc3QgLWxtJyAlIChzZWxmLnRjLnNka3Rlc3RkaXIsIHNlbGYudGMuc2RrdGVzdGRpcikpCisKKyAgICBkZWYgdGVzdF9tYWtlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIC1mIHRlc3RtYWtlZmlsZScgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZiBmb3IgZiBpbiBbJ3Rlc3QuYycsICd0ZXN0LmNwcCcsICd0ZXN0Lm8nLCAndGVzdCcsICd0ZXN0bWFrZWZpbGUnXV0KKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICBiYi51dGlscy5yZW1vdmUoZikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL3BlcmwucHkgYi9tZXRhL2xpYi9vZXFhL3Nkay9wZXJsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZjQyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3Nkay9wZXJsLnB5CkBAIC0wLDAgKzEsMjggQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1wZXJsIik6CisgICAgICAgIHNraXBNb2R1bGUoIk5vIHBlcmwgcGFja2FnZSBpbiB0aGUgU0RLIikKKworCitjbGFzcyBQZXJsVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5wbCddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKyAgICAgICAgc2VsZi50ZXN0ZmlsZSA9IHNlbGYudGMuc2RrdGVzdGRpciArICJ0ZXN0LnBsIgorCisgICAgZGVmIHRlc3RfcGVybF9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcGVybCcpCisKKyAgICBkZWYgdGVzdF9wZXJsX3dvcmtzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3BlcmwgJXMvdGVzdC5wbCcgJSBzZWxmLnRjLnNka3Rlc3RkaXIpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhzZWxmKToKKyAgICAgICAgYmIudXRpbHMucmVtb3ZlKCIlcy90ZXN0LnBsIiAlIHNlbGYudGMuc2RrdGVzdGRpcikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2RrL3B5dGhvbi5weSBiL21ldGEvbGliL29lcWEvc2RrL3B5dGhvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTZmYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZGsvcHl0aG9uLnB5CkBAIC0wLDAgKzEsMzIgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCitmcm9tIG9lcWEub2V0ZXN0IGltcG9ydCBvZVNES1Rlc3QsIHNraXBNb2R1bGUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCAqCisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGlmIG5vdCBvZVNES1Rlc3QuaGFzSG9zdFBhY2thZ2UoIm5hdGl2ZXNkay1weXRob24iKToKKyAgICAgICAgc2tpcE1vZHVsZSgiTm8gcHl0aG9uIHBhY2thZ2UgaW4gdGhlIFNESyIpCisKKworY2xhc3MgUHl0aG9uVGVzdChvZVNES1Rlc3QpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIGZvciBmIGluIFsndGVzdC5weSddOgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLnRjLmZpbGVzZGlyLCBmKSwgc2VsZi50Yy5zZGt0ZXN0ZGlyICsgZikKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9leGlzdHMoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bignd2hpY2ggcHl0aG9uJykKKworICAgIGRlZiB0ZXN0X3B5dGhvbl9zdGRvdXQoc2VsZik6CisgICAgICAgIG91dHB1dCA9IHNlbGYuX3J1bigncHl0aG9uICVzL3Rlc3QucHknICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5zdHJpcCgpLCAidGhlIHZhbHVlIG9mIGEgaXMgMC4wMSIsIG1zZz0iSW5jb3JyZWN0IG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfcHl0aG9uX3Rlc3RmaWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ2xzIC90bXAvdGVzdGZpbGUucHl0aG9uJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKHNlbGYpOgorICAgICAgICBiYi51dGlscy5yZW1vdmUoIiVzL3Rlc3QucHkiICUgc2VsZi50Yy5zZGt0ZXN0ZGlyKQorICAgICAgICBiYi51dGlscy5yZW1vdmUoIi90bXAvdGVzdGZpbGUucHl0aG9uIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZDk1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMiBAQAorZnJvbSBwa2d1dGlsIGltcG9ydCBleHRlbmRfcGF0aAorX19wYXRoX18gPSBleHRlbmRfcGF0aChfX3BhdGhfXywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L19zc3RhdGV0ZXN0c19ub2F1dG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5YWU3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvX3NzdGF0ZXRlc3RzX25vYXV0by5weQpAQCAtMCwwICsxLDk1IEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorZnJvbSBvZXFhLnNlbGZ0ZXN0LnNzdGF0ZSBpbXBvcnQgU1N0YXRlQmFzZQorCisKK2NsYXNzIFJlYnVpbGRGcm9tU1N0YXRlKFNTdGF0ZUJhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJykpCisKKyAgICBkZWYgZ2V0X2RlcF90YXJnZXRzKHNlbGYsIHByaW1hcnlfdGFyZ2V0cyk6CisgICAgICAgIGZvdW5kX3RhcmdldHMgPSBbXQorICAgICAgICBiaXRiYWtlKCItZyAiICsgJyAnLmpvaW4obWFwKHN0ciwgcHJpbWFyeV90YXJnZXRzKSkpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpLCAncicpIGFzIHBuZmlsZToKKyAgICAgICAgICAgIGZvdW5kX3RhcmdldHMgPSBwbmZpbGUucmVhZCgpLnNwbGl0bGluZXMoKQorICAgICAgICByZXR1cm4gZm91bmRfdGFyZ2V0cworCisgICAgZGVmIGNvbmZpZ3VyZV9idWlsZGRpcihzZWxmLCBidWlsZGRpcik6CisgICAgICAgIG9zLm1rZGlyKGJ1aWxkZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGJ1aWxkZGlyKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mJykpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4ob3MuZW52aXJvbi5nZXQoJ0JVSUxERElSJyksICdjb25mL2xvY2FsLmNvbmYnKSwgb3MucGF0aC5qb2luKGJ1aWxkZGlyLCAnY29uZi9sb2NhbC5jb25mJykpCisgICAgICAgIGNvbmZpZyA9IHt9CisgICAgICAgIGNvbmZpZ1snZGVmYXVsdF9zc3RhdGVfZGlyJ10gPSAiU1NUQVRFX0RJUiA/PSBcIiR7VE9QRElSfS9zc3RhdGUtY2FjaGVcIiIKKyAgICAgICAgY29uZmlnWydudWxsX3NzdGF0ZV9taXJyb3JzJ10gPSAiU1NUQVRFX01JUlJPUlMgPSBcIlwiIgorICAgICAgICBjb25maWdbJ2RlZmF1bHRfdG1wX2RpciddID0gIlRNUERJUiA9IFwiJHtUT1BESVJ9L3RtcFwiIgorICAgICAgICBmb3Iga2V5IGluIGNvbmZpZzoKKyAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL3NlbGZ0ZXN0LmluYycpLCBjb25maWdba2V5XSkKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYmJsYXllcnMuY29uZicpLCBvcy5wYXRoLmpvaW4oYnVpbGRkaXIsICdjb25mL2JibGF5ZXJzLmNvbmYnKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ2NvbmYvYXV0by5jb25mJyksIG9zLnBhdGguam9pbihidWlsZGRpciwgJ2NvbmYvYXV0by5jb25mJykpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBoYXJkbGlua190cmVlKHNlbGYsIHNyYywgZHN0KToKKyAgICAgICAgb3MubWtkaXIoZHN0KQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGRzdCkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjKToKKyAgICAgICAgICAgIGlmIHJvb3QgPT0gc3JjOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oZHN0LCByb290LnNwbGl0KHNyYylbMV1bMTpdKSkKKyAgICAgICAgICAgIGZvciBzc3RhdGVfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5saW5rKG9zLnBhdGguam9pbihyb290LCBzc3RhdGVfZmlsZSksIG9zLnBhdGguam9pbihkc3QsIHJvb3Quc3BsaXQoc3JjKVsxXVsxOl0sIHNzdGF0ZV9maWxlKSkKKworICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmLCBwcmltYXJ5X3RhcmdldHMsIHJlbG9jYXRlPUZhbHNlLCByZWJ1aWxkX2RlcGVuZGVuY2llcz1GYWxzZSk6CisgICAgICAgIGJ1aWxkQSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnYnVpbGRBJykKKyAgICAgICAgaWYgcmVsb2NhdGU6CisgICAgICAgICAgICBidWlsZEIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2J1aWxkQicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBidWlsZEIgPSBidWlsZEEKKworICAgICAgICBpZiByZWJ1aWxkX2RlcGVuZGVuY2llczoKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHNlbGYuZ2V0X2RlcF90YXJnZXRzKHByaW1hcnlfdGFyZ2V0cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYnVpbGRfdGFyZ2V0cyA9IHByaW1hcnlfdGFyZ2V0cworCisgICAgICAgIHNlbGYuY29uZmlndXJlX2J1aWxkZGlyKGJ1aWxkQSkKKyAgICAgICAgcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQSkpICsgJ2JpdGJha2UgICcgKyAnICcuam9pbihtYXAoc3RyLCBwcmltYXJ5X3RhcmdldHMpKSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5oYXJkbGlua190cmVlKG9zLnBhdGguam9pbihidWlsZEEsICdzc3RhdGUtY2FjaGUnKSwgb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJykpCisgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRBKQorCisgICAgICAgIGZhaWxlZF9yZWJ1aWxkID0gW10KKyAgICAgICAgZmFpbGVkX2NsZWFuc3N0YXRlID0gW10KKyAgICAgICAgZm9yIHRhcmdldCBpbiByZWJ1aWxkX3RhcmdldHM6CisgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9idWlsZGRpcihidWlsZEIpCisgICAgICAgICAgICBzZWxmLmhhcmRsaW5rX3RyZWUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdzc3RhdGUtY2FjaGUtYnVpbGRBJyksIG9zLnBhdGguam9pbihidWlsZEIsICdzc3RhdGUtY2FjaGUnKSkKKworICAgICAgICAgICAgcmVzdWx0X2NsZWFuc3N0YXRlID0gcnVuQ21kKCgiLiAlcy9vZS1pbml0LWJ1aWxkLWVudiAlcyAmJiAiICUgKGdldF9iYl92YXIoJ0NPUkVCQVNFJyksIGJ1aWxkQikpICsgJ2JpdGJha2UgLWNjbGVhbnNzdGF0ZSAnICsgdGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUsIHNoZWxsPVRydWUsIGV4ZWN1dGFibGU9Jy9iaW4vYmFzaCcpCisgICAgICAgICAgICBpZiBub3QgcmVzdWx0X2NsZWFuc3N0YXRlLnN0YXR1cyA9PSAwOgorICAgICAgICAgICAgICAgIGZhaWxlZF9jbGVhbnNzdGF0ZS5hcHBlbmQodGFyZ2V0KQorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGRCKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHJlc3VsdF9idWlsZCA9IHJ1bkNtZCgoIi4gJXMvb2UtaW5pdC1idWlsZC1lbnYgJXMgJiYgIiAlIChnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCBidWlsZEIpKSArICdiaXRiYWtlICcgKyB0YXJnZXQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSwgc2hlbGw9VHJ1ZSwgZXhlY3V0YWJsZT0nL2Jpbi9iYXNoJykKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfYnVpbGQuc3RhdHVzID09IDA6CisgICAgICAgICAgICAgICAgZmFpbGVkX3JlYnVpbGQuYXBwZW5kKHRhcmdldCkKKworICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShidWlsZEIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfcmVidWlsZCwgbXNnPSJUaGUgZm9sbG93aW5nIHJlY2lwZXMgaGF2ZSBmYWlsZWQgdG8gcmVidWlsZDogJXMiICUgJyAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX3JlYnVpbGQpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmYWlsZWRfY2xlYW5zc3RhdGUsIG1zZz0iVGhlIGZvbGxvd2luZyByZWNpcGVzIGhhdmUgZmFpbGVkIGNsZWFuc3N0YXRlKGFsbCBvdGhlcnMgaGF2ZSBwYXNzZWQgYm90aCBjbGVhbnNzdGF0ZSBhbmQgcmVidWlsZCBmcm9tIHNzdGF0ZSB0ZXN0cyk6ICVzIiAlICcgJy5qb2luKG1hcChzdHIsIGZhaWxlZF9jbGVhbnNzdGF0ZSkpKQorCisgICAgZGVmIHRlc3Rfc3N0YXRlX3JlbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX3JlYnVpbGQoWydjb3JlLWltYWdlLXNhdG8tc2RrJ10sIHJlbG9jYXRlPVRydWUsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfcmVidWlsZChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfcmVidWlsZChbJ2NvcmUtaW1hZ2Utc2F0by1zZGsnXSwgcmVsb2NhdGU9RmFsc2UsIHJlYnVpbGRfZGVwZW5kZW5jaWVzPVRydWUpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L190b2FzdGVyLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fdG9hc3Rlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI0NjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9fdG9hc3Rlci5weQpAQCAtMCwwICsxLDMyMCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaGxleCwgc3VicHJvY2VzcworaW1wb3J0IHVybGxpYiwgY29tbWFuZHMsIHRpbWUsIGdldHBhc3MsIHJlLCBqc29uLCBzaGxleAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQKKworc3lzLnBhdGguaW5zZXJ0KDAsIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uLy4uLy4uLy4uLycsICdiaXRiYWtlL2xpYi90b2FzdGVyJykpKQorb3MuZW52aXJvbi5zZXRkZWZhdWx0KCJESkFOR09fU0VUVElOR1NfTU9EVUxFIiwgInRvYXN0ZXJtYWluLnNldHRpbmdzIikKKworaW1wb3J0IHRvYXN0ZXJtYWluLnNldHRpbmdzCitmcm9tIGRqYW5nby5kYi5tb2RlbHMgaW1wb3J0IFEKK2Zyb20gb3JtLm1vZGVscyBpbXBvcnQgKgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIFRvYXN0ZXJTZXR1cChvZVNlbGZUZXN0KToKKworICAgIGRlZiByZWNpcGVfcGFyc2Uoc2VsZiwgZmlsZV9wYXRoLCB2YXIpOgorICAgICAgICBmb3IgbGluZSBpbiBvcGVuKGZpbGVfcGF0aCwncicpOgorICAgICAgICAgICAgaWYgbGluZS5maW5kKHZhcikgPiAtMToKKyAgICAgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCIgPSAiKVsxXS5yZXBsYWNlKCJcIiIsICIiKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbAorCisgICAgZGVmIGZpeF9maWxlX3BhdGgoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAgaWYgIjoiIGluIGZpbGVfcGF0aDoKKyAgICAgICAgICAgIGZpbGVfcGF0aD1maWxlX3BhdGguc3BsaXQoIjoiKVsyXQorICAgICAgICByZXR1cm4gZmlsZV9wYXRoCisKK2NsYXNzIFRvYXN0ZXJfREJfVGVzdHMoVG9hc3RlclNldHVwKToKKworICAgICMgQ2hlY2sgaWYgYnVpbGQgbmFtZSBpcyB1bmlxdWUgLSB0Y19pZD03OTUKKyAgICBAdGVzdGNhc2UoNzk1KQorICAgIGRlZiB0ZXN0X0J1aWxkX1VuaXF1ZV9OYW1lKHNlbGYpOgorICAgICAgICBhbGxfYnVpbGRzID0gQnVpbGQub2JqZWN0cy5hbGwoKS5jb3VudCgpCisgICAgICAgIGRpc3RpbmN0X2J1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RpbmN0X2J1aWxkcywgYWxsX2J1aWxkcywgbXNnID0gJ0J1aWxkIG5hbWUgaXMgbm90IHVuaXF1ZScpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIGNvb2NrZXIgbG9nIHBhdGggaXMgdW5pcXVlIC0gdGNfaWQ9ODE5CisgICAgQHRlc3RjYXNlKDgxOSkKKyAgICBkZWYgdGVzdF9CdWlsZF9VbmlxdWVfQ29va2VyX0xvZ19QYXRoKHNlbGYpOgorICAgICAgICBkaXN0aW5jdF9wYXRoID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2Nvb2tlcl9sb2dfcGF0aCcpLmRpc3RpbmN0KCkuY291bnQoKQorICAgICAgICB0b3RhbF9idWlsZHMgPSBCdWlsZC5vYmplY3RzLnZhbHVlcygnaWQnKS5jb3VudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzdGluY3RfcGF0aCwgdG90YWxfYnVpbGRzLCBtc2cgPSAnQnVpbGQgY29vY2tlciBsb2cgcGF0aCBpcyBub3QgdW5pcXVlJykKKworICAgICMgQ2hlY2sgaWYgdGFzayBvcmRlciBpcyB1bmlxdWUgZm9yIG9uZSBidWlsZCAtIHRjPTgyNAorICAgIEB0ZXN0Y2FzZSg4MjQpCisgICAgZGVmIHRlc3RfVGFza19VbmlxdWVfT3JkZXIoc2VsZik6CisgICAgICAgIGJ1aWxkcyA9IEJ1aWxkLm9iamVjdHMudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdG90YWxfdGFza19vcmRlciA9IFRhc2sub2JqZWN0cy5maWx0ZXIoYnVpbGQgPSBidWlsZFsnaWQnXSkudmFsdWVzKCdvcmRlcicpLmNvdW50KCkKKyAgICAgICAgICAgIGRpc3RpbmN0X3Rhc2tfb3JkZXIgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGJ1aWxkID0gYnVpbGRbJ2lkJ10pLnZhbHVlcygnb3JkZXInKS5kaXN0aW5jdCgpLmNvdW50KCkKKyAgICAgICAgICAgIGlmICh0b3RhbF90YXNrX29yZGVyICE9IGRpc3RpbmN0X3Rhc2tfb3JkZXIpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGJ1aWxkWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgYnVpbGQgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRhc2sgb3JkZXIgc2VxdWVuY2UgZm9yIG9uZSBidWlsZCAtIHRjPTgyNQorICAgIEB0ZXN0Y2FzZSg4MjUpCisgICAgZGVmIHRlc3RfVGFza19PcmRlcl9TZXF1ZW5jZShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gYnVpbGRzID0gQnVpbGQub2JqZWN0cy52YWx1ZXMoJ2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBidWlsZCBpbiBidWlsZHM6CisgICAgICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIoUShidWlsZCA9IGJ1aWxkWydpZCddKSwgflEob3JkZXIgPSBOb25lKSwgflEodGFza19uYW1lX19jb250YWlucyA9ICdfc2V0c2NlbmUnKSkudmFsdWVzKCdpZCcsICdvcmRlcicpLm9yZGVyX2J5KCJvcmRlciIpCisgICAgICAgICAgICBjbnRfdGFza3MgPSAwCisgICAgICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgICAgICBjbnRfdGFza3MgKz0gMQorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvcmRlciddICE9IGNudF90YXNrcyk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBkaXNrX2lvIG1hdGNoZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBFbmRUaW1lSU8gYW5kIFN0YXJ0VGltZUlPIGluIGJ1aWxkIHN0YXRzIC0gdGM9ODI4CisgICAgIyMjIHRoaXMgbmVlZHMgdG8gYmUgdXBkYXRlZCAjIyMKKyAgICAjZGVmIHRlc3RfVGFza19EaXNrX0lPX1RDODI4KHNlbGYpOgorCisgICAgIyBDaGVjayBpZiBvdXRjb21lID0gMiAoU1NUQVRFKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAzIChSRVNUT1JFRCkgLSB0Yz04MzIKKyAgICBAdGVzdGNhc2UoODMyKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8yX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8zKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDIpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmIChyb3dbJ3NzdGF0ZV9yZXN1bHQnXSAhPSAzKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgb3V0Y29tZSA9IDEgKENPVkVSRUQpIG9yIDMgKEVYSVNUSU5HKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChTU1RBVEVfTkEpIC0gdGM9ODMzCisgICAgQHRlc3RjYXNlKDgzMykKKyAgICBkZWYgdGVzdF9UYXNrX0lmX091dGNvbWVfMV8zX1NzdGF0ZV9SZXN1bHRfTXVzdF9CZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMSwgMykpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gIT0gMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIG91dGNvbWUgaXMgMCAoU1VDQ0VTUykgb3IgNCAoRkFJTEVEKSB0aGVuIHNzdGF0ZV9yZXN1bHQgbXVzdCBiZSAwIChOQSksIDEgKE1JU1MpIG9yIDIgKEZBSUxFRCkgLSB0Yz04MzQKKyAgICBAdGVzdGNhc2UoODM0KQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfT3V0Y29tZV8wXzRfU3N0YXRlX1Jlc3VsdF9NdXN0X0JlXzBfMV8yKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIob3V0Y29tZV9faW4gPSAoMCwgNCkpLnZhbHVlcygnaWQnLCAnc3N0YXRlX3Jlc3VsdCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzc3RhdGVfcmVzdWx0J10gbm90IGluIFswLCAxLCAyXSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQodGFza1snaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhc2sgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIHRhc2tfZXhlY3V0ZWQgPSBUUlVFICgxKSwgc2NyaXB0X3R5cGUgbXVzdCBiZSAwIChDT0RJTkdfTkEpLCAyIChDT0RJTkdfUFlUSE9OKSwgMyAoQ09ESU5HX1NIRUxMKSAtIHRjPTg5MQorICAgIEB0ZXN0Y2FzZSg4OTEpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX1RydWVfU2NyaXB0X1R5cGVfMF8yXzMoc2VsZik6CisgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcih0YXNrX2V4ZWN1dGVkID0gMSkudmFsdWVzKCdpZCcsICdzY3JpcHRfdHlwZScpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgdGFzayBpbiB0YXNrczoKKyAgICAgICAgICAgIGlmICh0YXNrWydzY3JpcHRfdHlwZSddIG5vdCBpbiBbMCwgMiwgM10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gVFJVRSAoMSksIG91dGNvbWUgbXVzdCBiZSAwIChTVUNDRVNTKSBvciA0IChGQUlMRUQpIC0gdGM9ODM2CisgICAgQHRlc3RjYXNlKDgzNikKKyAgICBkZWYgdGVzdF9UYXNrX0lmX1Rhc2tfRXhlY3V0ZWRfVHJ1ZV9PdXRjb21lXzBfNChzZWxmKToKKyAgICAgICAgdGFza3MgPSBUYXNrLm9iamVjdHMuZmlsdGVyKHRhc2tfZXhlY3V0ZWQgPSAxKS52YWx1ZXMoJ2lkJywgJ291dGNvbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snb3V0Y29tZSddIG5vdCBpbiBbMCwgNF0pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiB0YXNrX2V4ZWN1dGVkID0gRkFMU0UgKDApLCBzY3JpcHRfdHlwZSBtdXN0IGJlIDAgLSB0Yz04OTAKKyAgICBAdGVzdGNhc2UoODkwKQorICAgIGRlZiB0ZXN0X1Rhc2tfSWZfVGFza19FeGVjdXRlZF9GYWxzZV9TY3JpcHRfVHlwZV8wKHNlbGYpOgorICAgICAgICB0YXNrcyA9IFRhc2sub2JqZWN0cy5maWx0ZXIodGFza19leGVjdXRlZCA9IDApLnZhbHVlcygnaWQnLCAnc2NyaXB0X3R5cGUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHRhc2sgaW4gdGFza3M6CisgICAgICAgICAgICBpZiAodGFza1snc2NyaXB0X3R5cGUnXSAhPSAwKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXNrWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFzayBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgdGFza19leGVjdXRlZCA9IEZBTFNFICgwKSBhbmQgYnVpbGQgb3V0Y29tZSA9IFNVQ0NFRURFRCAoMCksIHRhc2sgb3V0Y29tZSBtdXN0IGJlIDEgKENPVkVSRUQpLCAyIChDQUNIRUQpLCAzIChQUkVCVUlMVCksIDUgKEVNUFRZKSAtIHRjPTgzNworICAgIEB0ZXN0Y2FzZSg4MzcpCisgICAgZGVmIHRlc3RfVGFza19JZl9UYXNrX0V4ZWN1dGVkX0ZhbHNlX091dGNvbWVfMV8yXzNfNShzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkczoKKyAgICAgICAgICAgIHRhc2tzID0gVGFzay5vYmplY3RzLmZpbHRlcihidWlsZCA9IGJ1aWxkWydpZCddLCB0YXNrX2V4ZWN1dGVkID0gMCkudmFsdWVzKCdpZCcsICdvdXRjb21lJykKKyAgICAgICAgICAgIGZvciB0YXNrIGluIHRhc2tzOgorICAgICAgICAgICAgICAgIGlmICh0YXNrWydvdXRjb21lJ10gbm90IGluIFsxLCAyLCAzLCA1XSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhc2tbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg4CisgICAgQHRlc3RjYXNlKDg4OCkKKyAgICBkZWYgdGVzdF9UYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uoc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXJnZXRfSW5zdGFsbGVkX1BhY2thZ2Uub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3RhcmdldF9pZCcsICdwYWNrYWdlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciByb3cgaW4gcm93czoKKyAgICAgICAgICAgIHRhcmdldCA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFyZ2V0X2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgcGFja2FnZSA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoaWQgPSByb3dbJ3BhY2thZ2VfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IHRhcmdldCBvciBub3QgcGFja2FnZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocm93WydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgdGFyZ2V0IGluc3RhbGxlZCBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg5CisgICAgQHRlc3RjYXNlKDg4OSkKKyAgICBkZWYgdGVzdF9UYXNrX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIHJvd3MgPSBUYXNrX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3Rhc2tfaWQnLCAnZGVwZW5kc19vbl9pZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJvd3M6CisgICAgICAgICAgICB0YXNrX2lkID0gVGFzay5vYmplY3RzLmZpbHRlcihpZCA9IHJvd1sndGFza19pZCddKS52YWx1ZXMoJ2lkJykKKyAgICAgICAgICAgIGRlcGVuZHNfb25faWQgPSBUYXNrLm9iamVjdHMuZmlsdGVyKGlkID0gcm93WydkZXBlbmRzX29uX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCB0YXNrX2lkIG9yIG5vdCBkZXBlbmRzX29uX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChyb3dbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciB0YXNrIGRlcGVuZGVuY3kgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIGlmIGJ1aWxkIHRhcmdldCBmaWxlX25hbWUgaXMgcG9wdWxhdGVkIG9ubHkgaWYgaXNfaW1hZ2U9dHJ1ZSBBTkQgb3JtX2J1aWxkLm91dGNvbWU9MCB0aGVuIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgaXRzIHNpemUgbWF0Y2hlcyB0aGUgZmlsZV9zaXplIHZhbHVlCisgICAgIyMjIE5lZWQgdG8gYWRkIHRoZSB0YyBpbiB0aGUgdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzNykKKyAgICBkZWYgdGVzdF9UYXJnZXRfRmlsZV9OYW1lX1BvcHVsYXRlZChzZWxmKToKKyAgICAgICAgYnVpbGRzID0gQnVpbGQub2JqZWN0cy5maWx0ZXIob3V0Y29tZSA9IDApLnZhbHVlcygnaWQnKQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgorICAgICAgICAgICAgdGFyZ2V0cyA9IFRhcmdldC5vYmplY3RzLmZpbHRlcihidWlsZF9pZCA9IGJ1aWxkWydpZCddLCBpc19pbWFnZSA9IDEpLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgZm9yIHRhcmdldCBpbiB0YXJnZXRzOgorICAgICAgICAgICAgICAgIHRhcmdldF9maWxlcyA9IFRhcmdldF9JbWFnZV9GaWxlLm9iamVjdHMuZmlsdGVyKHRhcmdldF9pZCA9IHRhcmdldFsnaWQnXSkudmFsdWVzKCdpZCcsICdmaWxlX25hbWUnLCAnZmlsZV9zaXplJykKKyAgICAgICAgICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgICAgICAgICBmb3IgZmlsZV9pbmZvIGluIHRhcmdldF9maWxlczoKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lkID0gZmlsZV9pbmZvWydpZCddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX25hbWUgPSBmaWxlX2luZm9bJ2ZpbGVfbmFtZSddCisgICAgICAgICAgICAgICAgICAgIHRhcmdldF9maWxlX3NpemUgPSBmaWxlX2luZm9bJ2ZpbGVfc2l6ZSddCisgICAgICAgICAgICAgICAgICAgIGlmIChub3QgdGFyZ2V0X2ZpbGVfbmFtZSBvciBub3QgdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguZXhpc3RzKHRhcmdldF9maWxlX25hbWUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh0YXJnZXRfaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcy5wYXRoLmdldHNpemUodGFyZ2V0X2ZpbGVfbmFtZSkgIT0gdGFyZ2V0X2ZpbGVfc2l6ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHRhcmdldF9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHRhcmdldCBpbWFnZSBmaWxlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBLZXkgdmVyaWZpY2F0aW9uIC0gdGM9ODg0CisgICAgQHRlc3RjYXNlKDg4NCkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX0RlcGVuZGVuY3koc2VsZik6CisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBkZXBzID0gUGFja2FnZV9EZXBlbmRlbmN5Lm9iamVjdHMudmFsdWVzKCdpZCcsICdwYWNrYWdlX2lkJywgJ2RlcGVuZHNfb25faWQnKQorICAgICAgICBmb3IgZGVwIGluIGRlcHM6CisgICAgICAgICAgICBpZiAoZGVwWydwYWNrYWdlX2lkJ10gPT0gZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgZGVwZW5kZW5jeSBpZDogJXMnICUgY250X2VycikKKworICAgICMgUmVjaXBlIGtleSB2ZXJpZmljYXRpb24sIHJlY2lwZSBuYW1lIGRvZXMgbm90IGRlcGVuZHMgb24gYSByZWNpcGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgLSB0Yz04ODMKKyAgICBAdGVzdGNhc2UoODgzKQorICAgIGRlZiB0ZXN0X1JlY2lwZV9EZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBkZXBzID0gUmVjaXBlX0RlcGVuZGVuY3kub2JqZWN0cy52YWx1ZXMoJ2lkJywgJ3JlY2lwZV9pZCcsICdkZXBlbmRzX29uX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBkZXAgaW4gZGVwczoKKyAgICAgICAgICAgIGlmIChub3QgZGVwWydyZWNpcGVfaWQnXSBvciBub3QgZGVwWydkZXBlbmRzX29uX2lkJ10pOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSA9IFJlY2lwZS5vYmplY3RzLmZpbHRlcihpZCA9IGRlcFsncmVjaXBlX2lkJ10pLnZhbHVlcygnbmFtZScpCisgICAgICAgICAgICAgICAgZGVwX25hbWUgPSBSZWNpcGUub2JqZWN0cy5maWx0ZXIoaWQgPSBkZXBbJ2RlcGVuZHNfb25faWQnXSkudmFsdWVzKCduYW1lJykKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBkZXBfbmFtZSk6CisgICAgICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKGRlcFsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHJlY2lwZSBkZXBlbmRlbmN5IGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIG51bWJlciAoMC05KSAtIHRjPTg0NgorICAgIEB0ZXN0Y2FzZSg4NDYpCisgICAgZGVmIHRlc3RfUGFja2FnZV9OYW1lX0Zvcl9OdW1iZXIoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcih+UShzaXplID0gLTEpKS52YWx1ZXMoJ2lkJywgJ25hbWUnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBpZiAocGFja2FnZVsnbmFtZSddWzBdLmlzZGlnaXQoKSBpcyBUcnVlKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgcGFja2FnZSB2ZXJzaW9uIHN0YXJ0cyB3aXRoIGEgbnVtYmVyICgwLTkpIC0gdGM9ODQ3CisgICAgQHRlc3RjYXNlKDg0NykKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1ZlcnNpb25fU3RhcnRzX1dpdGhfTnVtYmVyKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICd2ZXJzaW9uJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgaWYgKHBhY2thZ2VbJ3ZlcnNpb24nXVswXS5pc2RpZ2l0KCkgaXMgRmFsc2UpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIHJldmlzaW9uIHN0YXJ0cyB3aXRoICdyJyAtIHRjPTg0OAorICAgIEB0ZXN0Y2FzZSg4NDgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9SZXZpc2lvbl9TdGFydHNfV2l0aF9yKHNlbGYpOgorICAgICAgICBwYWNrYWdlcyA9IFBhY2thZ2Uub2JqZWN0cy5maWx0ZXIoflEoc2l6ZSA9IC0xKSkudmFsdWVzKCdpZCcsICdyZXZpc2lvbicpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGlmIChwYWNrYWdlWydyZXZpc2lvbiddWzBdLnN0YXJ0c3dpdGgoInIiKSBpcyBGYWxzZSk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQocGFja2FnZVsnaWQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY250X2VyciksIDAsIG1zZyA9ICdFcnJvcnMgZm9yIHBhY2thZ2UgaWQ6ICVzJyAlIGNudF9lcnIpCisKKyAgICAjIENoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcGFja2FnZSBidWlsZF9pZAorICAgICMjIyBUQyBtdXN0IGJlIGFkZGVkIGluIHRlc3QgcnVuCisgICAgQHRlc3RjYXNlKDEwMzgpCisgICAgZGVmIHRlc3RfUGFja2FnZV9CdWlsZF9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAnYnVpbGRfaWQnKQorICAgICAgICBjbnRfZXJyID0gW10KKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6CisgICAgICAgICAgICBidWlsZF9pZCA9IEJ1aWxkLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsnYnVpbGRfaWQnXSkudmFsdWVzKCdpZCcpCisgICAgICAgICAgICBpZiAobm90IGJ1aWxkX2lkKToKKyAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZChwYWNrYWdlWydpZCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbnRfZXJyKSwgMCwgbXNnID0gJ0Vycm9ycyBmb3IgcGFja2FnZSBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHBhY2thZ2UgcmVjaXBlX2lkCisgICAgIyMjIFRDIG11c3QgYmUgYWRkZWQgaW4gdGVzdCBydW4KKyAgICBAdGVzdGNhc2UoMTAzOSkKKyAgICBkZWYgdGVzdF9QYWNrYWdlX1JlY2lwZV9JZChzZWxmKToKKyAgICAgICAgcGFja2FnZXMgPSBQYWNrYWdlLm9iamVjdHMuZmlsdGVyKH5RKHNpemUgPSAtMSkpLnZhbHVlcygnaWQnLCAncmVjaXBlX2lkJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBwYWNrYWdlIGluIHBhY2thZ2VzOgorICAgICAgICAgICAgcmVjaXBlX2lkID0gUmVjaXBlLm9iamVjdHMuZmlsdGVyKGlkID0gcGFja2FnZVsncmVjaXBlX2lkJ10pLnZhbHVlcygnaWQnKQorICAgICAgICAgICAgaWYgKG5vdCByZWNpcGVfaWQpOgorICAgICAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBwYWNrYWdlIGluc3RhbGxlZF9zaXplIGZpZWxkIGlzIG5vdCBudWxsCisgICAgIyMjIFRDIG11c3QgYmUgYWRlZCBpbiB0ZXN0IHJ1bgorICAgIEB0ZXN0Y2FzZSgxMDQwKQorICAgIGRlZiB0ZXN0X1BhY2thZ2VfSW5zdGFsbGVkX1NpemVfTm90X05VTEwoc2VsZik6CisgICAgICAgIHBhY2thZ2VzID0gUGFja2FnZS5vYmplY3RzLmZpbHRlcihpbnN0YWxsZWRfc2l6ZV9faXNudWxsID0gVHJ1ZSkudmFsdWVzKCdpZCcpCisgICAgICAgIGNudF9lcnIgPSBbXQorICAgICAgICBmb3IgcGFja2FnZSBpbiBwYWNrYWdlczoKKyAgICAgICAgICAgIGNudF9lcnIuYXBwZW5kKHBhY2thZ2VbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBwYWNrYWdlIGlkOiAlcycgJSBjbnRfZXJyKQorCisgICAgIyBDaGVjayBpZiBhbGwgbGF5ZXJzIHJlcXVlc3RzIHJldHVybiBleGl0IGNvZGUgaXMgMjAwIC0gdGM9ODQzCisgICAgQHRlc3RjYXNlKDg0MykKKyAgICBkZWYgdGVzdF9MYXllcnNfUmVxdWVzdHNfRXhpdF9Db2RlKHNlbGYpOgorICAgICAgICBsYXllcnMgPSBMYXllci5vYmplY3RzLnZhbHVlcygnaWQnLCAnbGF5ZXJfaW5kZXhfdXJsJykKKyAgICAgICAgY250X2VyciA9IFtdCisgICAgICAgIGZvciBsYXllciBpbiBsYXllcnM6CisgICAgICAgICAgICByZXNwID0gdXJsbGliLnVybG9wZW4obGF5ZXJbJ2xheWVyX2luZGV4X3VybCddKQorICAgICAgICAgICAgaWYgKHJlc3AuZ2V0Y29kZSgpICE9IDIwMCk6CisgICAgICAgICAgICAgICAgY250X2Vyci5hcHBlbmQobGF5ZXJbJ2lkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNudF9lcnIpLCAwLCBtc2cgPSAnRXJyb3JzIGZvciBsYXllciBpZDogJXMnICUgY250X2VycikKKworICAgICMgQ2hlY2sgaWYgZGphbmdvIHNlcnZlciBzdGFydHMgcmVnYXJkbGVzcyBvZiB0aGUgdGltZXpvbmUgc2V0IG9uIHRoZSBtYWNoaW5lIC0gdGM9OTA1CisgICAgQHRlc3RjYXNlKDkwNSkKKyAgICBkZWYgdGVzdF9TdGFydF9EamFuZ29fVGltZXpvbmUoc2VsZik6CisgICAgICAgIGN1cnJlbnRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIHpvbmVmaWxlbGlzdCA9IFtdCisgICAgICAgIFpPTkVJTkZPUEFUSCA9ICcvdXNyL3NoYXJlL3pvbmVpbmZvLycKKyAgICAgICAgb3MuY2hkaXIoIi4uL2JpdGJha2UvbGliL3RvYXN0ZXIvIikKKyAgICAgICAgY250X2VyciA9IDAKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoWk9ORUlORk9QQVRIKToKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihaT05FSU5GT1BBVEgsIGZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgem9uZWZpbGVsaXN0LmFwcGVuZChmaWxlbmFtZSkKKyAgICAgICAgZm9yIGsgaW4gcmFuZ2UobGVuKHpvbmVmaWxlbGlzdCkpOgorICAgICAgICAgICAgaWYgayA8PSA1OgorICAgICAgICAgICAgICAgIGZpbGVzID0gem9uZWZpbGVsaXN0W2tdCisgICAgICAgICAgICAgICAgb3Muc3lzdGVtKCJleHBvcnQgVFo9IitzdHIoZmlsZXMpKyI7IHB5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyID4gL2Rldi9udWxsIDI+JjEgJiIpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgzKQorICAgICAgICAgICAgICAgIHBpZCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KCJwcyBhdXggfCBncmVwICdbL3Vdc3IvYmluL3B5dGhvbiBtYW5hZ2UucHkgcnVuc2VydmVyJyB8IGF3ayAne3ByaW50ICQyfSciLCBzaGVsbCA9IFRydWUpCisgICAgICAgICAgICAgICAgaWYgcGlkOgorICAgICAgICAgICAgICAgICAgICBvcy5zeXN0ZW0oImtpbGwgLTkgIitzdHIocGlkKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjbnRfZXJyLmFwcGVuZCh6b25lZmlsZWxpc3Rba10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY250X2VyciwgMCwgbXNnID0gJ0Vycm9ycyBkamFuZ28gc2VydmVyIGRvZXMgbm90IHN0YXJ0IHdpdGggdGltZXpvbmU6ICVzJyAlIGNudF9lcnIpCisgICAgICAgIG9zLmNoZGlyKGN1cnJlbnRfcGF0aCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmFzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZhYTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYXNlLnB5CkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworCisjIERFU0NSSVBUSU9OCisjIEJhc2UgY2xhc3MgaW5oZXJpdGVkIGJ5IHRlc3QgY2xhc3NlcyBpbiBtZXRhL2xpYi9zZWxmdGVzdAorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBlcnJubworCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCBMb2dSZXN1bHRzCisKK0BMb2dSZXN1bHRzCitjbGFzcyBvZVNlbGZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzZWxmdGVzdC5iYXNlIikKKyAgICBsb25nTWVzc2FnZSA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSJydW5UZXN0Iik6CisgICAgICAgIHNlbGYuYnVpbGRkaXIgPSBvcy5lbnZpcm9uLmdldCgiQlVJTERESVIiKQorICAgICAgICBzZWxmLmxvY2FsY29uZl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2xvY2FsLmNvbmYiKQorICAgICAgICBzZWxmLnRlc3RpbmNfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAiY29uZi9zZWxmdGVzdC5pbmMiKQorICAgICAgICBzZWxmLmxvY2FsX2JibGF5ZXJzX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgImNvbmYvYmJsYXllcnMuY29uZiIpCisgICAgICAgIHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJjb25mL2JibGF5ZXJzLmluYyIpCisgICAgICAgIHNlbGYudGVzdGxheWVyX3BhdGggPSBvZVNlbGZUZXN0LnRlc3RsYXllcl9wYXRoCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcyA9IFtdCisgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKyAgICAgICAgc3VwZXIob2VTZWxmVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kTmFtZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZGRpcikKKyAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHByZXZpb3VzIHRlc3QgbGVmdCBhcm91bmQgaW4gY29uZmlnIG9yIGluYyBmaWxlcworICAgICAgICAjIGlmIGl0IGZhaWxlZCBzbyB3ZSBuZWVkIGEgZnJlc2ggc3RhcnQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYudGVzdGluY19wYXRoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZm9yIHJvb3QsIF8sIGZpbGVzIGluIG9zLndhbGsoc2VsZi50ZXN0bGF5ZXJfcGF0aCk6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBmID09ICd0ZXN0X3JlY2lwZS5pbmMnOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIGYpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAjIHRlc3RzIG1pZ2h0IG5lZWQgdGhlaXIgb3duIHNldHVwCisgICAgICAgICMgYnV0IGlmIHRoZXkgb3ZlcndyaXRlIHRoaXMgb25lIHRoZXkgaGF2ZSB0byBjYWxsCisgICAgICAgICMgc3VwZXIgZWFjaCB0aW1lLCBzbyBsZXQncyBnaXZlIHRoZW0gYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgc2VsZi5zZXRVcExvY2FsKCkKKworICAgIGRlZiBzZXRVcExvY2FsKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kczoKKyAgICAgICAgICAgIGZhaWxlZF9leHRyYV9jb21tYW5kcyA9IFtdCisgICAgICAgICAgICBmb3IgY29tbWFuZCBpbiBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0LnN0YXR1cyA9PSAgMDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbGVkX2V4dHJhX2NvbW1hbmRzLmFwcGVuZChjb21tYW5kKQorICAgICAgICAgICAgaWYgZmFpbGVkX2V4dHJhX2NvbW1hbmRzOgorICAgICAgICAgICAgICAgIHNlbGYubG9nLndhcm5pbmcoInRlYXJEb3duIGNvbW1hbmRzIGhhdmUgZmFpbGVkOiAlcyIgJSAnLCAnLmpvaW4obWFwKHN0ciwgZmFpbGVkX2V4dHJhX2NvbW1hbmRzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIlRyeWluZyB0byBtb3ZlIG9uLiIpCisgICAgICAgICAgICBzZWxmLl9leHRyYV90ZWFyX2Rvd25fY29tbWFuZHMgPSBbXQorCisgICAgICAgIGlmIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gc2VsZi5fdHJhY2tfZm9yX2NsZWFudXA6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIHNlbGYuX3RyYWNrX2Zvcl9jbGVhbnVwID0gW10KKworICAgICAgICBzZWxmLnRlYXJEb3duTG9jYWwoKQorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgYWRkIHRlc3Qgc3BlY2lmaWMgY29tbWFuZHMgdG8gdGhlIHRlYXJEb3duIG1ldGhvZC4KKyAgICBkZWYgYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBZGRpbmcgY29tbWFuZCAnJXMnIHRvIHRlYXJEb3duIGZvciB0aGlzIHRlc3QuIiAlIGNvbW1hbmQpCisgICAgICAgIHNlbGYuX2V4dHJhX3RlYXJfZG93bl9jb21tYW5kcy5hcHBlbmQoY29tbWFuZCkKKyAgICAjIGFkZCB0ZXN0IHNwZWNpZmljIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHJlbW92ZWQgaW4gdGhlIHRlYXJEb3duIG1ldGhvZAorICAgIGRlZiB0cmFja19mb3JfY2xlYW51cChzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFkZGluZyBwYXRoICclcycgdG8gYmUgY2xlYW5lZCB1cCB3aGVuIHRlc3QgaXMgb3ZlciIgJSBwYXRoKQorICAgICAgICBzZWxmLl90cmFja19mb3JfY2xlYW51cC5hcHBlbmQocGF0aCkKKworICAgICMgd3JpdGUgdG8gPGJ1aWxkZGlyPi9jb25mL3NlbGZ0ZXN0LmluYworICAgIGRlZiB3cml0ZV9jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJXcml0aW5nIHRvOiAlc1xuJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgYXBwZW5kIHRvIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgYXBwZW5kX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYudGVzdGluY19wYXRoLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIDxidWlsZGRpcj4vY29uZi9zZWxmdGVzdC5pbmMKKyAgICBkZWYgcmVtb3ZlX2NvbmZpZyhzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJlbW92aW5nIGZyb206ICVzXG5cJXNcbiIgJSAoc2VsZi50ZXN0aW5jX3BhdGgsIGRhdGEpKQorICAgICAgICBmdG9vbHMucmVtb3ZlX2Zyb21fZmlsZShzZWxmLnRlc3RpbmNfcGF0aCwgZGF0YSkKKworICAgICMgd3JpdGUgdG8gbWV0YS1zZWZsdGVzdC9yZWNpcGVzLXRlc3QvPHJlY2lwZT4vdGVzdF9yZWNpcGUuaW5jCisgICAgZGVmIHdyaXRlX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIldyaXRpbmcgdG86ICVzXG4lc1xuIiAlIChpbmNfZmlsZSwgZGF0YSkpCisgICAgICAgIGZ0b29scy53cml0ZV9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyBhcHBlbmQgZGF0YSB0byBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMKKyAgICBkZWYgYXBwZW5kX3JlY2lwZWluYyhzZWxmLCByZWNpcGUsIGRhdGEpOgorICAgICAgICBpbmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RsYXllcl9wYXRoLCAncmVjaXBlcy10ZXN0JywgcmVjaXBlLCAndGVzdF9yZWNpcGUuaW5jJykKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIkFwcGVuZGluZyB0bzogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKGluY19maWxlLCBkYXRhKQorCisgICAgIyByZW1vdmUgZGF0YSBmcm9tIG1ldGEtc2VmbHRlc3QvcmVjaXBlcy10ZXN0LzxyZWNpcGU+L3Rlc3RfcmVjaXBlLmluYworICAgIGRlZiByZW1vdmVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSwgZGF0YSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiUmVtb3ZpbmcgZnJvbTogJXNcbiVzXG4iICUgKGluY19maWxlLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoaW5jX2ZpbGUsIGRhdGEpCisKKyAgICAjIGRlbGV0ZSBtZXRhLXNlZmx0ZXN0L3JlY2lwZXMtdGVzdC88cmVjaXBlPi90ZXN0X3JlY2lwZS5pbmMgZmlsZQorICAgIGRlZiBkZWxldGVfcmVjaXBlaW5jKHNlbGYsIHJlY2lwZSk6CisgICAgICAgIGluY19maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxheWVyX3BhdGgsICdyZWNpcGVzLXRlc3QnLCByZWNpcGUsICd0ZXN0X3JlY2lwZS5pbmMnKQorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiRGVsZXRpbmcgZmlsZTogJXMiICUgaW5jX2ZpbGUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbmNfZmlsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAjIHdyaXRlIHRvIDxidWlsZGRpcj4vY29uZi9iYmxheWVycy5pbmMKKyAgICBkZWYgd3JpdGVfYmJsYXllcnNfY29uZmlnKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmxvZy5kZWJ1ZygiV3JpdGluZyB0bzogJXNcbiVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCisKKyAgICAjIGFwcGVuZCB0byA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIGFwcGVuZF9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJBcHBlbmRpbmcgdG86ICVzXG4lc1xuIiAlIChzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWxmLnRlc3RpbmNfYmJsYXllcnNfcGF0aCwgZGF0YSkKKworICAgICMgcmVtb3ZlIGRhdGEgZnJvbSA8YnVpbGRkaXI+L2NvbmYvYmJsYXllcnMuaW5jCisgICAgZGVmIHJlbW92ZV9iYmxheWVyc19jb25maWcoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJSZW1vdmluZyBmcm9tOiAlc1xuXCVzXG4iICUgKHNlbGYudGVzdGluY19iYmxheWVyc19wYXRoLCBkYXRhKSkKKyAgICAgICAgZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUoc2VsZi50ZXN0aW5jX2JibGF5ZXJzX3BhdGgsIGRhdGEpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2JibGF5ZXJzLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGMxN2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYmxheWVycy5weQpAQCAtMCwwICsxLDYyIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlTGF5ZXJzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc1NikKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3djcm9zc2RlcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhc3BlbGwnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBkZXBlbmRlbmNpZXMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1jcm9zcy1kZXBlbmRzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSg4MykKKyAgICBkZWYgdGVzdF9iaXRiYWtlbGF5ZXJzX3Nob3dsYXllcnMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21ldGEtc2VsZnRlc3QnIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJObyBsYXllcnMgd2VyZSBzaG93bi4gYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkzKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd2FwcGVuZHMoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1hcHBlbmRzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiYXBwZW5kJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9InhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmJhcHBlbmQgZmlsZSB3YXMgbm90IHJlY29nbmlzZWQuICBiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDkwKQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfc2hvd292ZXJsYXllZChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNwZWxsJyBpbiByZXN1bHQub3V0cHV0LCBtc2c9ImFzcGVsbCBvdmVybGF5ZWQgcmVjaXBlIHdhcyBub3QgcmVjb2duaXNlZCBiaXRiYWtlLWxheWVycyBzaG93LW92ZXJsYXllZCAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbihzZWxmKToKKyAgICAgICAgdGVzdG91dGRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNkaXIodGVzdG91dGRpciksIG1zZyA9ICJ0ZXN0X2JpdGJha2VsYXllcnNfZmxhdHRlbiBzaG91bGQgbm90IGV4aXN0IGF0IHRoaXMgcG9pbnQgaW4gdGltZSIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVzdG91dGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBmbGF0dGVuICVzJyAlIHRlc3RvdXRkaXIpCisgICAgICAgIGJiX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdG91dGRpciwgJ3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lXzAuMS4xLmJiJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGJiX2ZpbGUpLCBtc2cgPSAiQ2Fubm90IGZpbmQgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYiBpbiB0aGUgdGVzdF9iaXRiYWtlbGF5ZXJzX2ZsYXR0ZW4gbG9jYWwgZGlyLiIpCisgICAgICAgIGNvbnRlbnRzID0gZnRvb2xzLnJlYWRfZmlsZShiYl9maWxlKQorICAgICAgICBmaW5kX2luX2NvbnRlbnRzID0gcmUuc2VhcmNoKCIjIyMjIyBiYmFwcGVuZGVkIGZyb20gbWV0YS1zZWxmdGVzdCAjIyMjI1xuKC4qXG4pKmluY2x1ZGUgdGVzdF9yZWNpcGUuaW5jIiwgY29udGVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2luX2NvbnRlbnRzLCBtc2cgPSAiRmxhdHRlbmluZyBsYXllcnMgZGlkIG5vdCB3b3JrLiBiaXRiYWtlLWxheWVycyBmbGF0dGVuIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTk1KQorICAgIGRlZiB0ZXN0X2JpdGJha2VsYXllcnNfYWRkX3JlbW92ZShzZWxmKToKKyAgICAgICAgdGVzdF9sYXllciA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdDT1JFQkFTRScpLCAnbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgIlRoaXMgdGVzdCBjYW5ub3QgcnVuIHdpdGggbWV0YS1za2VsZXRvbiBpbiBiYmxheWVycy5jb25mLiBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlc3RfbGF5ZXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIlNvbWV0aGluZyB3cm9uZyBoYXBwZW5lZC4gbWV0YS1za2VsZXRvbiBsYXllciB3YXMgbm90IGFkZGVkIHRvIGNvbmYvYmJsYXllcnMuY29uZi4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVzdF9sYXllcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWxheWVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21ldGEtc2tlbGV0b24nLCByZXN1bHQub3V0cHV0LCBtc2cgPSAibWV0YS1za2VsZXRvbiBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYXQgdGhpcyBzdGVwLiAgYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMgb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIGFkZC1sYXllciAlcycgJSB0ZXN0X2xheWVyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWV0YS1za2VsZXRvbicsIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJTb21ldGhpbmcgd3JvbmcgaGFwcGVuZWQuIG1ldGEtc2tlbGV0b24gbGF5ZXIgd2FzIG5vdCBhZGRlZCB0byBjb25mL2JibGF5ZXJzLmNvbmYuICBiaXRiYWtlLWxheWVycyBzaG93LWxheWVycyBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovbWV0YS1za2VsZXRvbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgc2hvdy1sYXllcnMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtZXRhLXNrZWxldG9uJywgcmVzdWx0Lm91dHB1dCwgbXNnID0gIm1ldGEtc2tlbGV0b24gc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGF0IHRoaXMgc3RlcC4gIGJpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYmJ0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDY4NjBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9iYnRlc3RzLnB5CkBAIC0wLDAgKzEsMjAxIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoNzg5KQorICAgIGRlZiB0ZXN0X3J1bl9iaXRiYWtlX2Zyb21fZGlyXzEoc2VsZik6CisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpdGJha2UoJy1lJykuc3RhdHVzLCAwLCBtc2cgPSAiYml0YmFrZSBjb3VsZG4ndCBydW4gZnJvbSBcImNvbmZcIiBkaXIiKQorCisgICAgQHRlc3RjYXNlKDc5MCkKKyAgICBkZWYgdGVzdF9ydW5fYml0YmFrZV9mcm9tX2Rpcl8yKHNlbGYpOgorICAgICAgICBteV9lbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBteV9lbnZbJ0JCUEFUSCddID0gbXlfZW52WydCVUlMRERJUiddCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguZGlybmFtZShvcy5lbnZpcm9uWydCVUlMRERJUiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaXRiYWtlKCctZScsIGVudj1teV9lbnYpLnN0YXR1cywgMCwgbXNnID0gImJpdGJha2UgY291bGRuJ3QgcnVuIGZyb20gYnVpbGRkaXIiKQorCisgICAgQHRlc3RjYXNlKDgwNikKKyAgICBkZWYgdGVzdF9ldmVudF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiSU5IRVJJVCArPSBcInRlc3RfZXZlbnRzXCIiKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtNC1uYXRpdmUnKQorICAgICAgICBmaW5kX2J1aWxkX3N0YXJ0ZWQgPSByZS5zZWFyY2goIk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRTdGFydGVkKFxuLiopKk5PVEU6IFByZXBhcmluZyBSdW5RdWV1ZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZpbmRfYnVpbGRfY29tcGxldGVkID0gcmUuc2VhcmNoKCJUYXNrcyBTdW1tYXJ5Oi4qKFxuLiopKk5PVEU6IFRlc3QgZm9yIGJiXC5ldmVudFwuQnVpbGRDb21wbGV0ZWQiLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluZF9idWlsZF9zdGFydGVkLCBtc2cgPSAiTWF0Y2ggZmFpbGVkIGluOlxuJXMiICAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX2J1aWxkX2NvbXBsZXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ1Rlc3QgZm9yIGJiLmV2ZW50LkludmFsaWRFdmVudCcgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlwiVGVzdCBmb3IgYmIuZXZlbnQuSW52YWxpZEV2ZW50XCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBwcm9jZXNzLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMpCisgICAgZGVmIHRlc3RfbG9jYWxfc3N0YXRlKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCdtNC1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZSAtY2NsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnbTQtbmF0aXZlJykKKyAgICAgICAgZmluZF9zZXRzY2VuZSA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLipkb18uKl9zZXRzY2VuZSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kX3NldHNjZW5lLCBtc2cgPSAiTm8gXCJtNC1uYXRpdmUuKmRvXy4qX3NldHNjZW5lXCIgbWVzc2FnZSBmb3VuZCBkdXJpbmcgYml0YmFrZSBtNC1uYXRpdmUuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0ICkKKworICAgIEB0ZXN0Y2FzZSgxMDUpCisgICAgZGVmIHRlc3RfYml0YmFrZV9pbnZhbGlkX3JlY2lwZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogVW5hYmxlIHRvIGZpbmQgYW55IHJlY2lwZSBmaWxlIG1hdGNoaW5nICdhc2RmJyIgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIlRob3VnaCBhc2RmIHJlY2lwZSBkb2Vzbid0IGV4aXN0LCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA3KQorICAgIGRlZiB0ZXN0X2JpdGJha2VfaW52YWxpZF90YXJnZXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ2FzZGYnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRVJST1I6IE5vdGhpbmcgUFJPVklERVMgJ2FzZGYnIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vICdhc2RmJyB0YXJnZXQgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTA2KQorICAgIGRlZiB0ZXN0X3dhcm5pbmdzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLWIgYXNkZicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZmluZF93YXJuaW5ncyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogV0FSTklORyBtZXNzYWdlcyogc2hvd24iLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmaW5kX2Vycm9ycyA9IHJlLnNlYXJjaCgiU3VtbWFyeTogVGhlcmUgdy57MiwzfT8gWzEtOV1bMC05XSogRVJST1IgbWVzc2FnZXMqIHNob3duIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfd2FybmluZ3MsIG1zZz0iRGlkIG5vdCBmaW5kIHRoZSBtdW1iZXIgb2Ygd2FybmluZ3MgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQ6XG4iICsgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfZXJyb3JzLCBtc2c9IkRpZCBub3QgZmluZCB0aGUgbXVtYmVyIG9mIGVycm9ycyBhdCB0aGUgZW5kIG9mIHRoZSBidWlsZDpcbiIgKyByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwOCkKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3BhdGNoKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnbWFuJywgJ1NSQ19VUkkgKz0gImZpbGU6Ly9tYW4tMS41aDEtbWFrZS5wYXRjaCInKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCdtYW4gLWMgcGF0Y2gnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnbWFuJykKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbiBtYW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIkVSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IHBhdGNoX2RvX3BhdGNoIiBpbiByZXN1bHQub3V0cHV0LCBtc2cgPSAiVGhvdWdoIG5vIG1hbi0xLjVoMS1tYWtlLnBhdGNoIGZpbGUgZXhpc3RzLCBiaXRiYWtlIGRpZG4ndCBvdXRwdXQgYW55IGVyci4gbWVzc2FnZS4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTYzKQorICAgIGRlZiB0ZXN0X2ZvcmNlX3Rhc2soc2VsZik6CisgICAgICAgIGJpdGJha2UoJ200LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gbTQtbmF0aXZlJykKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZSgnLUMgY29tcGlsZSBtNC1uYXRpdmUnKQorICAgICAgICBsb29rX2Zvcl90YXNrcyA9IFsnZG9fY29tcGlsZScsICdkb19pbnN0YWxsJywgJ2RvX3BvcHVsYXRlX3N5c3Jvb3QnXQorICAgICAgICBmb3IgdGFzayBpbiBsb29rX2Zvcl90YXNrczoKKyAgICAgICAgICAgIGZpbmRfdGFzayA9IHJlLnNlYXJjaCgibTQtbmF0aXZlLiolcyIgJSB0YXNrLCByZXN1bHQub3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfdGFzaywgbXNnID0gIkNvdWxkbid0IGZpbmQgJXMgdGFzay4gYml0YmFrZSBvdXRwdXQgJXMiICUgKHRhc2ssIHJlc3VsdC5vdXRwdXQpKQorCisgICAgQHRlc3RjYXNlKDE2NykKKyAgICBkZWYgdGVzdF9iaXRiYWtlX2coc2VsZik6CisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1nIGNvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lJykKKyAgICAgICAgZm9yIGYgaW4gWydwbi1idWlsZGxpc3QnLCAncG4tZGVwZW5kcy5kb3QnLCAncGFja2FnZS1kZXBlbmRzLmRvdCcsICd0YXNrLWRlcGVuZHMuZG90J106CisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ05PVEU6IFBOIGJ1aWxkIGxpc3Qgc2F2ZWQgdG8gXCdwbi1idWlsZGxpc3RcJycgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gIk5vIGRlcGVuZGVuY3kgXCJwbi1idWlsZGxpc3RcIiBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiB0YXNrIHRhcmdldC4gYml0YmFrZSBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnb3BlbnNzaCcgaW4gZnRvb2xzLnJlYWRfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3BuLWJ1aWxkbGlzdCcpKSwgbXNnID0gIk5vIFwib3BlbnNzaFwiIGRlcGVuZGVuY3kgZm91bmQgaW4gcG4tYnVpbGRsaXN0IGZpbGUuIikKKworICAgIEB0ZXN0Y2FzZSg4OTkpCisgICAgZGVmIHRlc3RfaW1hZ2VfbWFuaWZlc3Qoc2VsZik6CisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoIkRFUExPWV9ESVJfSU1BR0UiLCB0YXJnZXQ9ImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGltYWdlbmFtZSA9IGdldF9iYl92YXIoIklNQUdFX0xJTktfTkFNRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbWFuaWZlc3QgPSBvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWFnZW5hbWUgKyAiLm1hbmlmZXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKG1hbmlmZXN0KSwgbXNnPSJObyBtYW5pZmVzdCBmaWxlIGNyZWF0ZWQgZm9yIGltYWdlLiBJdCBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gJXMiICUgbWFuaWZlc3QpCisKKyAgICBAdGVzdGNhc2UoMTY4KQorICAgIGRlZiB0ZXN0X2ludmFsaWRfcmVjaXBlX3NyY191cmkoc2VsZik6CisgICAgICAgIGRhdGEgPSAnU1JDX1VSSSA9ICJmaWxlOi8vaW52YWxpZCInCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCBkYXRhKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiIiJETF9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCitTU1RBVEVfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorIiIiKQorICAgICAgICBiaXRiYWtlKCctY2NsZWFuYWxsIG1hbicpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJy1jIGZldGNoIG1hbicsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBtYW4nKQorICAgICAgICBzZWxmLmRlbGV0ZV9yZWNpcGVpbmMoJ21hbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgbXNnPSJDb21tYW5kIHN1Y2NlZGVkIHdoZW4gaXQgc2hvdWxkIGhhdmUgZmFpbGVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdGZXRjaGVyIGZhaWx1cmU6IFVuYWJsZSB0byBmaW5kIGZpbGUgZmlsZTovL2ludmFsaWQgYW55d2hlcmUuIFRoZSBwYXRocyB0aGF0IHdlcmUgc2VhcmNoZWQgd2VyZTonIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBubyBlcnJvciBtZXNzYWdlIGVuY291bnRlcmVkLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBGZXRjaGVyIGZhaWx1cmUgZm9yIFVSTDogXCdmaWxlOi8vaW52YWxpZFwnLiBVbmFibGUgdG8gZmV0Y2ggVVJMIGZyb20gYW55IHNvdXJjZS4nIGluIHJlc3VsdC5vdXRwdXQsIG1zZyA9ICJcImludmFsaWRcIiBmaWxlIFwKK2RvZXNuJ3QgZXhpc3QsIHlldCBmZXRjaGVyIGRpZG4ndCByZXBvcnQgYW55IGVycm9yLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxNzEpCisgICAgZGVmIHRlc3RfcmVuYW1lX2Rvd25sb2FkZWRfZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiRExfRElSID0gXCIke1RPUERJUn0vZG93bmxvYWQtc2VsZnRlc3RcIgorU1NUQVRFX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKKyIiIikKKyAgICAgICAgZGF0YSA9ICdTUkNfVVJJX2FwcGVuZCA9ICI7ZG93bmxvYWRmaWxlbmFtZT10ZXN0LWFzcGVsbC50YXIuZ3oiJworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygnYXNwZWxsJywgZGF0YSkKKyAgICAgICAgYml0YmFrZSgnLWNjbGVhbmFsbCBhc3BlbGwnKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKCctYyBmZXRjaCBhc3BlbGwnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYygnYXNwZWxsJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJpdGJha2UsICctY2NsZWFuYWxsIGFzcGVsbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgbXNnID0gIkNvdWxkbid0IGZldGNoIGFzcGVsbC4gJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJETF9ESVIiKSwgJ3Rlc3QtYXNwZWxsLnRhci5neicpKSwgbXNnID0gIkZpbGUgcmVuYW1lIGZhaWxlZC4gTm8gY29ycmVzcG9uZGluZyB0ZXN0LWFzcGVsbC50YXIuZ3ogZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKGdldF9iYl92YXIoIkRMX0RJUiIpLCAndGVzdC1hc3BlbGwudGFyLmd6LmRvbmUnKSksICJGaWxlIHJlbmFtZSBmYWlsZWQuIE5vIGNvcnJlc3BvbmRpbmcgdGVzdC1hc3BlbGwudGFyLmd6LmRvbmUgZmlsZSBmb3VuZCB1bmRlciAlcyIgJSBzdHIoZ2V0X2JiX3ZhcigiRExfRElSIikpKQorCisgICAgQHRlc3RjYXNlKDEwMjgpCisgICAgZGVmIHRlc3RfZW52aXJvbm1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygiVEVTVF9FTlY9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX0VOVj1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1lIHwgZ3JlcCBURVNUX0VOVj0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2xvY2FsY29uZicgaW4gcmVzdWx0Lm91dHB1dCwgbXNnID0gImJpdGJha2UgZGlkbid0IHJlcG9ydCBhbnkgdmFsdWUgZm9yIFRFU1RfRU5WIHZhcmlhYmxlLiBUbyB0ZXN0LCBydW4gJ2JpdGJha2UgLWUgfCBncmVwIFRFU1RfRU5WPSciKQorCisgICAgQHRlc3RjYXNlKDEwMjkpCisgICAgZGVmIHRlc3RfZHJ5X3J1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1uIG00LW5hdGl2ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgImJpdGJha2UgZHJ5IHJ1biBkaWRuJ3QgcnVuIGFzIGV4cGVjdGVkLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzApCisgICAgZGVmIHRlc3RfanVzdF9wYXJzZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByZXN1bHQuc3RhdHVzLCAiZXJyb3JzIGVuY291bnRlcmVkIHdoZW4gcGFyc2luZyByZWNpcGVzLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzEpCisgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1zIHwgZ3JlcCB3Z2V0JykKKyAgICAgICAgZmluZCA9IHJlLnNlYXJjaCgid2dldCAqOihbMC05YS16QS1aXC5cLV0rKSIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5kLCAiTm8gdmVyc2lvbiByZXR1cm5lZCBmb3Igc2VhcmNoZWQgcmVjaXBlLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMDMyKQorICAgIGRlZiB0ZXN0X3ByZWZpbGUoc2VsZik6CisgICAgICAgIHByZWNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvcHJlZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwcmVjb25mKQorICAgICAgICBmdG9vbHMud3JpdGVfZmlsZShwcmVjb25mICwiVEVTVF9QUkVGSUxFPVwicHJlZmlsZVwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdwcmVmaWxlJyBpbiByZXN1bHQub3V0cHV0LCAiUHJlY29uZmlndXJlIGZpbGUgXCJwcmVmaWxlLmNvbmZcIndhcyBub3QgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiAiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucmVtb3ZlX2NvbmZpZywgIlRFU1RfUFJFRklMRT1cImxvY2FsY29uZlwiIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlIC1yIGNvbmYvcHJlZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BSRUZJTEU9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NhbGNvbmYnIGluIHJlc3VsdC5vdXRwdXQsICJQcmVjb25maWd1cmUgZmlsZSBcInByZWZpbGUuY29uZlwid2FzIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIikKKworICAgIEB0ZXN0Y2FzZSgxMDMzKQorICAgIGRlZiB0ZXN0X3Bvc3RmaWxlKHNlbGYpOgorICAgICAgICBwb3N0Y29uZiA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnY29uZi9wb3N0ZmlsZS5jb25mJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChwb3N0Y29uZikKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmYgLCAiVEVTVF9QT1NURklMRT1cInBvc3RmaWxlXCIiKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoIlRFU1RfUE9TVEZJTEU9XCJsb2NhbGNvbmZcIiIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnJlbW92ZV9jb25maWcsICJURVNUX1BPU1RGSUxFPVwibG9jYWxjb25mXCIiKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UgLVIgY29uZi9wb3N0ZmlsZS5jb25mIC1lIHwgZ3JlcCBURVNUX1BPU1RGSUxFPScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncG9zdGZpbGUnIGluIHJlc3VsdC5vdXRwdXQsICJQb3N0Y29uZmlndXJlIGZpbGUgXCJwb3N0ZmlsZS5jb25mXCJ3YXMgbm90IHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4iKQorCisgICAgQHRlc3RjYXNlKDEwMzQpCisgICAgZGVmIHRlc3RfY2hlY2t1cmkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSAtYyBjaGVja3VyaSBtNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcmVzdWx0LnN0YXR1cywgbXNnID0gIlwiY2hlY2t1cmlcIiB0YXNrIHdhcyBub3QgZXhlY3V0ZWQuIGJpdGJha2Ugb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEwMzUpCisgICAgZGVmIHRlc3RfY29udGludWUoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIkRMX0RJUiA9IFwiJHtUT1BESVJ9L2Rvd25sb2FkLXNlbGZ0ZXN0XCIKK1NTVEFURV9ESVIgPSBcIiR7VE9QRElSfS9kb3dubG9hZC1zZWxmdGVzdFwiCisiIiIpCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdtYW4nLCJcbmRvX2ZhaWxfdGFzayAoKSB7XG5leGl0IDEgXG59XG5cbmFkZHRhc2sgZG9fZmFpbF90YXNrIGJlZm9yZSBkb19mZXRjaFxuIiApCisgICAgICAgIHJ1bkNtZCgnYml0YmFrZSAtYyBjbGVhbmFsbCBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZSBtYW4geGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtaycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgZXJyb3Jwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ0VSUk9SOiBGdW5jdGlvbiBmYWlsZWQ6IGRvX2ZhaWxfdGFzaycpCisgICAgICAgIG1hbnZlciA9IHJlLnNlYXJjaCgiTk9URTogcmVjaXBlIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtKC4qPyk6IHRhc2sgZG9fdW5wYWNrOiBTdGFydGVkIiwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgY29udGludWVwb3MgPSByZXN1bHQub3V0cHV0LmZpbmQoJ05PVEU6IHJlY2lwZSB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLSVzOiB0YXNrIGRvX3VucGFjazogU3RhcnRlZCcgJSBtYW52ZXIuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlcnJvcnBvcyxjb250aW51ZXBvcywgbXNnID0gImJpdGJha2UgZGlkbid0IHBhc3MgZG9fZmFpbF90YXNrLiBiaXRiYWtlIG91dHB1dDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTE5KQorICAgIGRlZiB0ZXN0X25vbl9ncGx2MyhzZWxmKToKKyAgICAgICAgZGF0YSA9ICdJTkNPTVBBVElCTEVfTElDRU5TRSA9ICJHUEx2MyInCisgICAgICAgIGNvbmYgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ2NvbmYvbG9jYWwuY29uZicpCisgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShjb25mICxkYXRhKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZnRvb2xzLnJlbW92ZV9mcm9tX2ZpbGUsIGNvbmYgLGRhdGEpCisgICAgICAgIHJlc3VsdCA9IGJpdGJha2UoJ3JlYWRsaW5lJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICJCaXRiYWtlIGZhaWxlZCwgZXhpdCBjb2RlICVzLCBvdXRwdXQgJXMiICUgKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAndG1wL2RlcGxveS9saWNlbnNlcy9yZWFkbGluZS9nZW5lcmljX0dQTHYzJykpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd0bXAvZGVwbG95L2xpY2Vuc2VzL3JlYWRsaW5lL2dlbmVyaWNfR1BMdjInKSkpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvYnVpbGRoaXN0b3J5LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Y2FlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkaGlzdG9yeS5weQpAQCAtMCwwICsxLDQ1IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgZGF0ZXRpbWUKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgQ29tbWFuZCwgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIEJ1aWxkaGlzdG9yeUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgY29uZmlnX2J1aWxkaGlzdG9yeShzZWxmLCB0bXBfYmhfbG9jYXRpb249RmFsc2UpOgorICAgICAgICBpZiAobm90ICdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ1VTRVJfQ0xBU1NFUycpKSBhbmQgKG5vdCAnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdJTkhFUklUJykpOgorICAgICAgICAgICAgYWRkX2J1aWxkaGlzdG9yeV9jb25maWcgPSAnSU5IRVJJVCArPSAiYnVpbGRoaXN0b3J5IlxuQlVJTERISVNUT1JZX0NPTU1JVCA9ICIxIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhhZGRfYnVpbGRoaXN0b3J5X2NvbmZpZykKKworICAgICAgICBpZiB0bXBfYmhfbG9jYXRpb246CisgICAgICAgICAgICAjIFVzaW5nIGEgdGVtcG9yYXJ5IGJ1aWxkaGlzdG9yeSBsb2NhdGlvbiBmb3IgdGVzdGluZworICAgICAgICAgICAgdG1wX2JoX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAidG1wX2J1aWxkaGlzdG9yeV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBidWlsZGhpc3RvcnlfZGlyX2NvbmZpZyA9ICJCVUlMREhJU1RPUllfRElSID0gXCIlc1wiIiAlIHRtcF9iaF9kaXIKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhidWlsZGhpc3RvcnlfZGlyX2NvbmZpZykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG1wX2JoX2RpcikKKworICAgIGRlZiBydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbihzZWxmLCB0YXJnZXQsIGdsb2JhbF9jb25maWc9JycsIHRhcmdldF9jb25maWc9JycsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPUZhbHNlLCBlcnJvcl9yZWdleD0nJyk6CisgICAgICAgIGlmIGNoYW5nZV9iaF9sb2NhdGlvbjoKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRtcF9iaF9sb2NhdGlvbiA9IEZhbHNlCisgICAgICAgIHNlbGYuY29uZmlnX2J1aWxkaGlzdG9yeSh0bXBfYmhfbG9jYXRpb24pCisKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXBwZW5kX3JlY2lwZWluYyh0YXJnZXQsIHRhcmdldF9jb25maWcpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW4gJXMiICUgdGFyZ2V0KQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKHRhcmdldCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLnJlbW92ZV9jb25maWcoZ2xvYmFsX2NvbmZpZykKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZykKKworICAgICAgICBpZiBleHBlY3RfZXJyb3I6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsIG1zZz0iRXJyb3IgZXhwZWN0ZWQgZm9yIGdsb2JhbCBjb25maWcgJyVzJyBhbmQgdGFyZ2V0IGNvbmZpZyAnJXMnIiAlIChnbG9iYWxfY29uZmlnLCB0YXJnZXRfY29uZmlnKSkKKyAgICAgICAgICAgIHNlYXJjaF9mb3JfZXJyb3IgPSByZS5zZWFyY2goZXJyb3JfcmVnZXgsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VhcmNoX2Zvcl9lcnJvciwgbXNnPSJDb3VsZCBub3QgZmluZCBkZXNpcmVkIGVycm9yIGluIG91dHB1dDogJXMiICUgZXJyb3JfcmVnZXgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZz0iQ29tbWFuZCAnYml0YmFrZSAlcycgaGFzIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzIiAlICh0YXJnZXQsIHJlc3VsdC5vdXRwdXQpKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2J1aWxkb3B0aW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODM4MDNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9idWlsZG9wdGlvbnMucHkKQEAgLTAsMCArMSwxNDkgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgZ2xvYiBhcyBnCitpbXBvcnQgcGV4cGVjdCBhcyBwCisKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgoraW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIEltYWdlT3B0aW9uc1Rlc3RzKG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDc2MSkKKyAgICBkZWYgdGVzdF9pbmNyZW1lbnRhbF9pbWFnZV9nZW5lcmF0aW9uKHNlbGYpOgorICAgICAgICBpbWFnZV9wa2d0eXBlID0gZ2V0X2JiX3ZhcigiSU1BR0VfUEtHVFlQRSIpCisgICAgICAgIGlmIGltYWdlX3BrZ3R5cGUgIT0gJ3JwbSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdOb3QgdXNpbmcgUlBNIGFzIG1haW4gcGFja2FnZSBmb3JtYXQnKQorICAgICAgICBiaXRiYWtlKCItYyBjbGVhbmFsbCBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnSU5DX1JQTV9JTUFHRV9HRU4gPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ0lNQUdFX0ZFQVRVUkVTICs9ICJzc2gtc2VydmVyLW9wZW5zc2giJykKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgbG9nX2RhdGFfZmlsZSA9IG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwgImNvcmUtaW1hZ2UtbWluaW1hbCIpLCAidGVtcC9sb2cuZG9fcm9vdGZzIikKKyAgICAgICAgbG9nX2RhdGFfY3JlYXRlZCA9IGZ0b29scy5yZWFkX2ZpbGUobG9nX2RhdGFfZmlsZSkKKyAgICAgICAgaW5jcmVtZW50YWxfY3JlYXRlZCA9IHJlLnNlYXJjaCgiTk9URTogbG9hZCBvbGQgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbFxuTk9URTogb2xkIGluc3RhbGwgc29sdXRpb24gbm90IGV4aXN0XG5OT1RFOiBjcmVhdGluZyBuZXcgaW5zdGFsbCBzb2x1dGlvbiBmb3IgaW5jcmVtZW50YWwgaW5zdGFsbChcbi4qKSpOT1RFOiBJbnN0YWxsaW5nIHRoZSBmb2xsb3dpbmcgcGFja2FnZXM6LipwYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaCIsIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZygnSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfY3JlYXRlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX2NyZWF0ZWQpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2UtbWluaW1hbCIpCisgICAgICAgIGxvZ19kYXRhX3JlbW92ZWQgPSBmdG9vbHMucmVhZF9maWxlKGxvZ19kYXRhX2ZpbGUpCisgICAgICAgIGluY3JlbWVudGFsX3JlbW92ZWQgPSByZS5zZWFyY2goIk5PVEU6IGxvYWQgb2xkIGluc3RhbGwgc29sdXRpb24gZm9yIGluY3JlbWVudGFsIGluc3RhbGxcbk5PVEU6IGNyZWF0aW5nIG5ldyBpbnN0YWxsIHNvbHV0aW9uIGZvciBpbmNyZW1lbnRhbCBpbnN0YWxsKFxuLiopKk5PVEU6IGluY3JlbWVudGFsIHJlbW92ZWQ6LipvcGVuc3NoLXNzaGQtLioiLCBsb2dfZGF0YV9yZW1vdmVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5jcmVtZW50YWxfcmVtb3ZlZCwgbXNnID0gIk1hdGNoIGZhaWxlZCBpbjpcbiVzIiAlIGxvZ19kYXRhX3JlbW92ZWQpCisKKyAgICBAdGVzdGNhc2UoOTI1KQorICAgIGRlZiB0ZXN0X3JtX29sZF9pbWFnZShzZWxmKToKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgZGVwbG95ZGlyID0gZ2V0X2JiX3ZhcigiREVQTE9ZX0RJUl9JTUFHRSIsIHRhcmdldD0iY29yZS1pbWFnZS1taW5pbWFsIikKKyAgICAgICAgaW1hZ2VuYW1lID0gZ2V0X2JiX3ZhcigiSU1BR0VfTElOS19OQU1FIiwgdGFyZ2V0PSJjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgdHJhY2tfb3JpZ2luYWxfZmlsZXMgPSBbXQorICAgICAgICBmb3IgaW1hZ2VfZmlsZSBpbiBkZXBsb3lkaXJfZmlsZXM6CisgICAgICAgICAgICBpZiBpbWFnZW5hbWUgaW4gaW1hZ2VfZmlsZSBhbmQgb3MucGF0aC5pc2xpbmsob3MucGF0aC5qb2luKGRlcGxveWRpciwgaW1hZ2VfZmlsZSkpOgorICAgICAgICAgICAgICAgIHRyYWNrX29yaWdpbmFsX2ZpbGVzLmFwcGVuZChvcy5wYXRoLnJlYWxwYXRoKG9zLnBhdGguam9pbihkZXBsb3lkaXIsIGltYWdlX2ZpbGUpKSkKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCJSTV9PTERfSU1BR0UgPSBcIjFcIiIpCisgICAgICAgIGJpdGJha2UoIi1DIHJvb3RmcyBjb3JlLWltYWdlLW1pbmltYWwiKQorICAgICAgICBkZXBsb3lkaXJfZmlsZXMgPSBvcy5saXN0ZGlyKGRlcGxveWRpcikKKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFtwYXRoIGZvciBwYXRoIGluIHRyYWNrX29yaWdpbmFsX2ZpbGVzIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgaW4gZGVwbG95ZGlyX2ZpbGVzXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQsIG1zZz0iXG5UaGUgZm9sbG93aW5nIGltYWdlIGZpbGVzIHdlcmUgbm90IHJlbW92ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCByZW1haW5pbmdfbm90X2V4cGVjdGVkKSkpCisKKyAgICBAdGVzdGNhc2UoMjg2KQorICAgIGRlZiB0ZXN0X2NjYWNoZV90b29sKHNlbGYpOgorICAgICAgICBiaXRiYWtlKCJjY2FjaGUtbmF0aXZlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpLCAiY2NhY2hlIikpLCBtc2cgPSAiTm8gY2NhY2hlIGZvdW5kIHVuZGVyICVzIiAlIHN0cihnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnLCAnY2NhY2hlLW5hdGl2ZScpKSkKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoJ0lOSEVSSVQgKz0gImNjYWNoZSInKQorICAgICAgICBiaXRiYWtlKCJtNCAtYyBjbGVhbnNzdGF0ZSIpCisgICAgICAgIGJpdGJha2UoIm00IC1jIGNvbXBpbGUiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYml0YmFrZSwgJ2NjYWNoZS1uYXRpdmUgLWNjbGVhbnNzdGF0ZScpCisgICAgICAgIHJlcyA9IHJ1bkNtZCgiZ3JlcCBjY2FjaGUgJXMiICUgKG9zLnBhdGguam9pbihnZXRfYmJfdmFyKCJXT1JLRElSIiwibTQiKSwidGVtcC9sb2cuZG9fY29tcGlsZSIpKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJlcy5zdGF0dXMsIG1zZz0iTm8gbWF0Y2ggZm9yIGNjYWNoZSBpbiBtNCBsb2cuZG9fY29tcGlsZS4gRm9yIGZ1cnRoZXIgZGV0YWlsczogJXMiICUgb3MucGF0aC5qb2luKGdldF9iYl92YXIoIldPUktESVIiLCJtNCIpLCJ0ZW1wL2xvZy5kb19jb21waWxlIikpCisKKworY2xhc3MgRGlza01vblRlc3Qob2VTZWxmVGVzdCk6CisKKyAgICBAdGVzdGNhc2UoMjc3KQorICAgIGRlZiB0ZXN0X3N0b3B0YXNrX2JlaGF2aW9yKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIlNUT1BUQVNLUywke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IiwgaWdub3JlX3N0YXR1cyA9IFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRVJST1I6IE5vIG5ldyB0YXNrcyBjYW4gYmUgZXhlY3V0ZWQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIlNUT1BUQVNLUyIhJyBpbiByZXMub3V0cHV0LCBtc2cgPSAiVGFza3Mgc2hvdWxkIGhhdmUgc3RvcHBlZC4gRGlzayBtb25pdG9yIGlzIHNldCB0byBTVE9QVEFTSzogJXMiICUgcmVzLm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAxLCBtc2cgPSAiYml0YmFrZSByZXBvcnRlZCBleGl0IGNvZGUgJXMuIEl0IHNob3VsZCBoYXZlIGJlZW4gMS4gQml0YmFrZSBvdXRwdXQ6ICVzIiAlIChzdHIocmVzLnN0YXR1cyksIHJlcy5vdXRwdXQpKQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygnQkJfRElTS01PTl9ESVJTID0gIkFCT1JULCR7VE1QRElSfSwxMDAwMDBHLDEwMEsiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgibTQiLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdFUlJPUjogSW1tZWRpYXRlbHkgYWJvcnQgc2luY2UgdGhlIGRpc2sgc3BhY2UgbW9uaXRvciBhY3Rpb24gaXMgIkFCT1JUIiEnIGluIHJlcy5vdXRwdXQsICJUYXNrcyBzaG91bGQgaGF2ZSBiZWVuIGFib3J0ZWQgaW1tZWRpYXRlbGx5LiBEaXNrIG1vbml0b3IgaXMgc2V0IHRvIEFCT1JUOiAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDEsIG1zZyA9ICJiaXRiYWtlIHJlcG9ydGVkIGV4aXQgY29kZSAlcy4gSXQgc2hvdWxkIGhhdmUgYmVlbiAxLiBCaXRiYWtlIG91dHB1dDogJXMiICUgKHN0cihyZXMuc3RhdHVzKSwgcmVzLm91dHB1dCkpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCdCQl9ESVNLTU9OX0RJUlMgPSAiV0FSTiwke1RNUERJUn0sMTAwMDAwRywxMDBLIicpCisgICAgICAgIHJlcyA9IGJpdGJha2UoIm00IikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdXQVJOSU5HOiBUaGUgZnJlZSBzcGFjZScgaW4gcmVzLm91dHB1dCwgbXNnID0gIkEgd2FybmluZyBzaG91bGQgaGF2ZSBiZWVuIGRpc3BsYXllZCBmb3IgZGlzayBtb25pdG9yIGlzIHNldCB0byBXQVJOOiAlcyIgJXJlcy5vdXRwdXQpCisKK2NsYXNzIFNhbml0eU9wdGlvbnNUZXN0KG9lU2VsZlRlc3QpOgorCisgICAgQHRlc3RjYXNlKDkyNykKKyAgICBkZWYgdGVzdF9vcHRpb25zX3dhcm5xYV9lcnJvcnFhX3N3aXRjaChzZWxmKToKKyAgICAgICAgYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSAtY2NsZWFuc3N0YXRlIikKKworICAgICAgICBpZiAicGFja2FnZXMtbGlzdCIgbm90IGluIGdldF9iYl92YXIoIkVSUk9SX1FBIik6CisgICAgICAgICAgICBzZWxmLndyaXRlX2NvbmZpZygiRVJST1JfUUFfYXBwZW5kID0gXCIgcGFja2FnZXMtbGlzdFwiIikKKworICAgICAgICBzZWxmLndyaXRlX3JlY2lwZWluYygneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScsICdQQUNLQUdFUyArPSBcIiR7UE59LWRiZ1wiJykKKyAgICAgICAgcmVzID0gYml0YmFrZSgieGN1cnNvci10cmFuc3BhcmVudC10aGVtZSIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJFUlJPUjogUUEgSXNzdWU6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtZGJnIGlzIGxpc3RlZCBpbiBQQUNLQUdFUyBtdWx0aXBsZSB0aW1lcywgdGhpcyBsZWFkcyB0byBwYWNrYWdpbmcgZXJyb3JzLiIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMSwgbXNnID0gImJpdGJha2UgcmVwb3J0ZWQgZXhpdCBjb2RlICVzLiBJdCBzaG91bGQgaGF2ZSBiZWVuIDEuIEJpdGJha2Ugb3V0cHV0OiAlcyIgJSAoc3RyKHJlcy5zdGF0dXMpLCByZXMub3V0cHV0KSkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnUEFDS0FHRVMgKz0gXCIke1BOfS1kYmdcIicpCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZygnRVJST1JfUUFfcmVtb3ZlID0gInBhY2thZ2VzLWxpc3QiJykKKyAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKCdXQVJOX1FBX2FwcGVuZCA9ICIgcGFja2FnZXMtbGlzdCInKQorICAgICAgICBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIC1jY2xlYW5zc3RhdGUiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJ4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lIikKKyAgICAgICAgc2VsZi5kZWxldGVfcmVjaXBlaW5jKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJXQVJOSU5HOiBRQSBJc3N1ZTogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS1kYmcgaXMgbGlzdGVkIGluIFBBQ0tBR0VTIG11bHRpcGxlIHRpbWVzLCB0aGlzIGxlYWRzIHRvIHBhY2thZ2luZyBlcnJvcnMuIiBpbiByZXMub3V0cHV0LCBtc2c9cmVzLm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgyNzgpCisgICAgZGVmIHRlc3Rfc2FuaXR5X3VzZXJzcGFjZV9kZXBlbmRlbmN5KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoJ1dBUk5fUUFfYXBwZW5kID0gIiB1bnNhZmUtcmVmZXJlbmNlcy1pbi1iaW5hcmllcyB1bnNhZmUtcmVmZXJlbmNlcy1pbi1zY3JpcHRzIicpCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgZ3ppcCBuZnMtdXRpbHMiKQorICAgICAgICByZXMgPSBiaXRiYWtlKCJnemlwIG5mcy11dGlscyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IGd6aXAiIGluIHJlcy5vdXRwdXQsICJXQVJOSU5HOiBRQSBJc3N1ZTogZ3ppcCBtZXNzYWdlIGlzIG5vdCBwcmVzZW50IGluIGJpdGJha2UncyBvdXRwdXQ6ICVzIiAlIHJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiV0FSTklORzogUUEgSXNzdWU6IG5mcy11dGlscyIgaW4gcmVzLm91dHB1dCwgIldBUk5JTkc6IFFBIElzc3VlOiBuZnMtdXRpbHMgbWVzc2FnZSBpcyBub3QgcHJlc2VudCBpbiBiaXRiYWtlJ3Mgb3V0cHV0OiAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBCdWlsZGhpc3RvcnlUZXN0cyhCdWlsZGhpc3RvcnlCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgyOTMpCisgICAgZGVmIHRlc3RfYnVpbGRoaXN0b3J5X2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKCd4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKSwgImJ1aWxkaGlzdG9yeSBkaXIgd2FzIG5vdCBjcmVhdGVkLiIpCisKKyAgICBAdGVzdGNhc2UoMjk0KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9idWlsZHRpbWVfcHJfYmFja3dhcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgZXJyb3IgPSAiRVJST1I6IFFBIElzc3VlOiBQYWNrYWdlIHZlcnNpb24gZm9yIHBhY2thZ2UgJXMgd2VudCBiYWNrd2FyZHMgd2hpY2ggd291bGQgYnJlYWsgcGFja2FnZSBmZWVkcyBmcm9tICguKi1yMSB0byAuKi1yMCkiICUgdGFyZ2V0CisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjFcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1UcnVlKQorICAgICAgICBzZWxmLnJ1bl9idWlsZGhpc3Rvcnlfb3BlcmF0aW9uKHRhcmdldCwgdGFyZ2V0X2NvbmZpZz0iUFIgPSBcInIwXCIiLCBjaGFuZ2VfYmhfbG9jYXRpb249RmFsc2UsIGV4cGVjdF9lcnJvcj1UcnVlLCBlcnJvcl9yZWdleD1lcnJvcikKKworY2xhc3MgQnVpbGRJbWFnZXNUZXN0KG9lU2VsZlRlc3QpOgorICAgIEB0ZXN0Y2FzZSg1NjMpCisgICAgZGVmIHRlc3RfZGlyZWN0ZmIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHRlc3QgdGhlIGJ1aWxkIG9mIGRpcmVjdGZiIGltYWdlIGZvciBhcm0gYXJjaC4KKyAgICAgICAgSW4gZXNzZW5jZSB3ZSBidWlsZCBhIGNvcmVpbWFnZWRpcmVjdGZiIGFuZCB0ZXN0IHRoZSBleGl0Y29kZSBvZiBiaXRiYWtlIHRoYXQgaW4gY2FzZSBvZiBzdWNjZXNzIGlzIDAuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJESVNUUk9fRkVBVFVSRVNfcmVtb3ZlID0gXCJ4MTFcIlxuRElTVFJPX0ZFQVRVUkVTX2FwcGVuZCA9IFwiIGRpcmVjdGZiXCJcbk1BQ0hJTkUgPz89IFwicWVtdWFybVwiIikKKyAgICAgICAgcmVzID0gYml0YmFrZSgiY29yZS1pbWFnZS1kaXJlY3RmYiIsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCAwLCAiXG5jb3JlaW1hZ2VkaXJlY3RmYiBmYWlsZWQgdG8gYnVpbGQuIFBsZWFzZSBjaGVjayBsb2dzIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorCitjbGFzcyBBcmNoaXZlclRlc3Qob2VTZWxmVGVzdCk6CisgICAgQHRlc3RjYXNlKDkyNikKKyAgICBkZWYgdGVzdF9hcmNoX3dvcmtfZGlyX2FuZF9leHBvcnRfc291cmNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBmb3IgYXJjaGl2aW5nIHRoZSB3b3JrIGRpcmVjdG9yeSBhbmQgZXhwb3J0aW5nIHRoZSBzb3VyY2UgZmlsZXMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwd29ya2RpcicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCJJTkhFUklUID0gXCJhcmNoaXZlclwiXG5BUkNISVZFUl9NT0RFW3NyY10gPSBcIm9yaWdpbmFsXCJcbkFSQ0hJVkVSX01PREVbc3JwbV0gPSBcIjFcIiIpCisgICAgICAgIHJlcyA9IGJpdGJha2UoInhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUiLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgIlxuQ291bGRuJ3QgYnVpbGQgeGN1cnNvcnRyYW5zcGFyZW50dGhlbWUuXG5iaXRiYWtlIG91dHB1dCAlcyIgJSByZXMub3V0cHV0KQorICAgICAgICBwa2dzX3BhdGggPSBnLmdsb2Ioc3RyKHNlbGYuYnVpbGRkaXIpICsgIi90bXAvZGVwbG95L3NvdXJjZXMvYWxsYXJjaCoveGN1cnMqIikKKyAgICAgICAgc3JjX2ZpbGVfZ2xvYiA9IHN0cihwa2dzX3BhdGhbMF0pICsgIi94Y3Vyc29yKi5zcmMucnBtIgorICAgICAgICB0YXJfZmlsZV9nbG9iID0gc3RyKHBrZ3NfcGF0aFswXSkgKyAiL3hjdXJzb3IqLnRhci5neiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChnLmdsb2Ioc3JjX2ZpbGVfZ2xvYikgYW5kIGcuZ2xvYih0YXJfZmlsZV9nbG9iKSksICJDb3VsZG4ndCBmaW5kIC5zcmMucnBtIGFuZCAudGFyLmd6IGZpbGVzIHVuZGVyIHRtcC9kZXBsb3kvc291cmNlcy9hbGxhcmNoKi94Y3Vyc29yKiIpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2RldnRvb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU3MzFkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvZGV2dG9vbC5weQpAQCAtMCwwICsxLDk3MSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGdsb2IKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllciwgcnVucWVtdQorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIERldnRvb2xCYXNlKG9lU2VsZlRlc3QpOgorCisgICAgZGVmIF90ZXN0X3JlY2lwZV9jb250ZW50cyhzZWxmLCByZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGNoZWNraW5oZXJpdHMpOgorICAgICAgICB3aXRoIG9wZW4ocmVjaXBlZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiAnPScgaW4gbGluZToKKyAgICAgICAgICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICAgICAgICAgIHZhciA9IHNwbGl0bGluZVswXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0bGluZVsxXS5zdHJpcCgpLnN0cmlwKCciJykKKyAgICAgICAgICAgICAgICAgICAgaWYgdmFyIGluIGNoZWNrdmFyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5lZWR2YWx1ZSA9IGNoZWNrdmFycy5wb3AodmFyKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgbmVlZHZhbHVlLCAndmFsdWVzIGZvciAlcyBkbyBub3QgbWF0Y2gnICUgdmFyKQorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaW5oZXJpdCAnKToKKyAgICAgICAgICAgICAgICAgICAgaW5oZXJpdHMgPSBsaW5lLnNwbGl0KClbMTpdCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGVja3ZhcnMsIHt9LCAnU29tZSB2YXJpYWJsZXMgbm90IGZvdW5kOiAlcycgJSBjaGVja3ZhcnMpCisKKyAgICAgICAgZm9yIGluaGVyaXQgaW4gY2hlY2tpbmhlcml0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5oZXJpdCwgaW5oZXJpdHMsICdNaXNzaW5nIGluaGVyaXQgb2YgJXMnICUgaW5oZXJpdCkKKworICAgIGRlZiBfY2hlY2tfYmJhcHBlbmQoc2VsZiwgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyBzaG93LWFwcGVuZHMnLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0bGluZXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBpbnJlY2lwZSA9IEZhbHNlCisgICAgICAgIGJiYXBwZW5kcyA9IFtdCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVzdWx0bGluZXM6CisgICAgICAgICAgICBpZiBpbnJlY2lwZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyAnKToKKyAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRzLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgbGluZSA9PSAnJXM6JyAlIG9zLnBhdGguYmFzZW5hbWUocmVjaXBlZmlsZSk6CisgICAgICAgICAgICAgICAgaW5yZWNpcGUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGxlbihiYmFwcGVuZHMpLCAyLCAnJXMgcmVjaXBlIGlzIGJlaW5nIGJiYXBwZW5kZWQgYnkgYW5vdGhlciBsYXllciAtIGJiYXBwZW5kcyBmb3VuZDpcbiAgJXMnICUgKHRlc3RyZWNpcGUsICdcbiAgJy5qb2luKGJiYXBwZW5kcykpKQorICAgICAgICBmb3IgYmJhcHBlbmQgaW4gYmJhcHBlbmRzOgorICAgICAgICAgICAgaWYgYmJhcHBlbmQuc3RhcnRzd2l0aChhcHBlbmRkaXIpOgorICAgICAgICAgICAgICAgIGJiYXBwZW5kZmlsZSA9IGJiYXBwZW5kCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYmJhcHBlbmQgZm9yIHJlY2lwZSAlcyBkb2VzIG5vdCBzZWVtIHRvIGJlIGNyZWF0ZWQgaW4gdGVzdCBsYXllcicgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXR1cm4gYmJhcHBlbmRmaWxlCisKKyAgICBkZWYgX2NyZWF0ZV90ZW1wX2xheWVyKHNlbGYsIHRlbXBsYXllcmRpciwgYWRkbGF5ZXIsIHRlbXBsYXllcm5hbWUsIHByaW9yaXR5PTk5OSwgcmVjaXBlcGF0aHNwZWM9J3JlY2lwZXMtKi8qJyk6CisgICAgICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgdGVtcGxheWVybmFtZSwgcHJpb3JpdHksIHJlY2lwZXBhdGhzcGVjKQorICAgICAgICBpZiBhZGRsYXllcjoKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAlcyB8fCB0cnVlJyAlIHRlbXBsYXllcmRpcikKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisKKyAgICBkZWYgX3Byb2Nlc3NfbHNfb3V0cHV0KHNlbGYsIG91dHB1dCk6CisgICAgICAgICIiIgorICAgICAgICBDb252ZXJ0IGxzIC1sIG91dHB1dCB0byBhIGZvcm1hdCB3ZSBjYW4gcmVhc29uYWJseSBjb21wYXJlIGZyb20gb25lIGNvbnRleHQKKyAgICAgICAgdG8gYW5vdGhlciAoZS5nLiBmcm9tIGhvc3QgdG8gdGFyZ2V0KQorICAgICAgICAiIiIKKyAgICAgICAgZmlsZWxpc3QgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgc3BsaXRsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAjIFJlbW92ZSB0cmFpbGluZyAuIG9uIHBlcm1zCisgICAgICAgICAgICBzcGxpdGxpbmVbMF0gPSBzcGxpdGxpbmVbMF0ucnN0cmlwKCcuJykKKyAgICAgICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgLiBvbiBwYXRocworICAgICAgICAgICAgc3BsaXRsaW5lWy0xXSA9IHNwbGl0bGluZVstMV0ubHN0cmlwKCcuJykKKyAgICAgICAgICAgICMgRHJvcCBmaWVsZHMgd2UgZG9uJ3Qgd2FudCB0byBjb21wYXJlCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzddCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzZdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzVdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzRdCisgICAgICAgICAgICBkZWwgc3BsaXRsaW5lWzFdCisgICAgICAgICAgICBmaWxlbGlzdC5hcHBlbmQoJyAnLmpvaW4oc3BsaXRsaW5lKSkKKyAgICAgICAgcmV0dXJuIGZpbGVsaXN0CisKKworY2xhc3MgRGV2dG9vbFRlc3RzKERldnRvb2xCYXNlKToKKworICAgIEB0ZXN0Y2FzZSgxMTU4KQorICAgIGRlZiB0ZXN0X2NyZWF0ZV93b3Jrc3BhY2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcvd29ya3NwYWNlJyBub3QgaW4gcmVzdWx0Lm91dHB1dCwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgbGF5ZXIgaW4gYmJsYXllcnMuY29uZicpCisgICAgICAgICMgVHJ5IGNyZWF0aW5nIGEgd29ya3NwYWNlIGxheWVyIHdpdGggYSBzcGVjaWZpYyBwYXRoCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgY3JlYXRlLXdvcmtzcGFjZSAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFRyeSBjcmVhdGluZyBhIHdvcmtzcGFjZSBsYXllciB3aXRoIHRoZSBkZWZhdWx0IHBhdGgKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBjcmVhdGUtd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksIG1zZyA9ICJObyB3b3Jrc3BhY2UgY3JlYXRlZC4gZGV2dG9vbCBvdXRwdXQ6ICVzICIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctbGF5ZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHdvcmtzcGFjZWRpciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTU5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBGZXRjaCBzb3VyY2UKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHVybCA9ICdodHRwOi8vd3d3Lml2YXJjaC5jb20vcHJvZ3JhbXMvc291cmNlcy9wdi0xLjUuMy50YXIuYnoyJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3dnZXQgJXMnICUgdXJsLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd0YXIgeGZ2IHB2LTEuNS4zLnRhci5iejInLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdwdi0xLjUuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnY29uZmlndXJlJykpLCAnVW5hYmxlIHRvIGZpbmQgY29uZmlndXJlIHNjcmlwdCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlIHB2JykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGFkZCBwdiAlcycgJSBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncHYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHNyY2RpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZSAoaGF2ZSB0byBkbyB0aGlzICphZnRlciogZGV2dG9vbCBhZGQgc2luY2UgdGhlIHJlY2lwZSBvbmx5IGV4aXN0cyB0aGVuKQorICAgICAgICBiaXRiYWtlKCdwdiAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBwdicpCisgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgJ3B2JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3RhbGxkaXIsICdDb3VsZCBub3QgcXVlcnkgaW5zdGFsbGRpciB2YXJpYWJsZScpCisgICAgICAgIGJpbmRpciA9IGdldF9iYl92YXIoJ2JpbmRpcicsICdwdicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiaW5kaXIsICdDb3VsZCBub3QgcXVlcnkgYmluZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgYmluZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIGJpbmRpciA9IGJpbmRpclsxOl0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihpbnN0YWxsZGlyLCBiaW5kaXIsICdwdicpKSwgJ3B2IGJpbmFyeSBub3QgZm91bmQgaW4gRCcpCisKKyAgICBAdGVzdGNhc2UoMTE2MikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9saWJyYXJ5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBXZSBkb24ndCBoYXZlIHRoZSBhYmlsaXR5IHRvIHBpY2sgdXAgdGhpcyBkZXBlbmRlbmN5IGF1dG9tYXRpY2FsbHkgeWV0Li4uCisgICAgICAgIGJpdGJha2UoJ2xpYnVzYjEnKQorICAgICAgICAjIEZldGNoIHNvdXJjZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cuaW50cmEybmV0LmNvbS9lbi9kZXZlbG9wZXIvbGliZnRkaS9kb3dubG9hZC9saWJmdGRpMS0xLjEudGFyLmJ6MicKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCd3Z2V0ICVzJyAlIHVybCwgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgndGFyIHhmdiBsaWJmdGRpMS0xLjEudGFyLmJ6MicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ2xpYmZ0ZGkxLTEuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3JjZGlyLCAnQ01ha2VMaXN0cy50eHQnKSksICdVbmFibGUgdG8gZmluZCBDTWFrZUxpc3RzLnR4dCBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkIChhbmQgdXNlIC1WIHNvIHdlIHRlc3QgdGhhdCB0b28pCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkIGxpYmZ0ZGkgJXMgLVYgMS4xJyAlIHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJmdGRpJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUgKGhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIGRldnRvb2wgYWRkIHNpbmNlIHRoZSByZWNpcGUgb25seSBleGlzdHMgdGhlbikKKyAgICAgICAgYml0YmFrZSgnbGliZnRkaSAtYyBjbGVhbnNzdGF0ZScpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGJ1aWxkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBidWlsZCBsaWJmdGRpJykKKyAgICAgICAgc3RhZ2luZ19saWJkaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0xJQkRJUicsICdsaWJmdGRpJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YWdpbmdfbGliZGlyLCAnQ291bGQgbm90IHF1ZXJ5IFNUQUdJTkdfTElCRElSIHZhcmlhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzdGFnaW5nX2xpYmRpciwgJ2xpYmZ0ZGkxLnNvLjIuMS4wJykpLCAibGliZnRkaSBiaW5hcnkgbm90IGZvdW5kIGluIFNUQUdJTkdfTElCRElSLiBPdXRwdXQgb2YgZGV2dG9vbCBidWlsZCBsaWJmdGRpICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHJlc2V0CisgICAgICAgIHN0YW1wcHJlZml4ID0gZ2V0X2JiX3ZhcignU1RBTVAnLCAnbGliZnRkaScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCBsaWJmdGRpJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYmZ0ZGknLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhbXBwcmVmaXgsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgbGliZnRkaScpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Ioc3RhbXBwcmVmaXggKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlcywgJ1N0YW1wIGZpbGVzIGV4aXN0IGZvciByZWNpcGUgbGliZnRkaSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHN0YWdpbmdfbGliZGlyLCAnbGliZnRkaTEuc28uMi4xLjAnKSksICdsaWJmdGRpIGJpbmFyeSBzdGlsbCBmb3VuZCBpbiBTVEFHSU5HX0xJQkRJUiBhZnRlciBjbGVhbmluZycpCisKKyAgICBAdGVzdGNhc2UoMTE2MCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2FkZF9mZXRjaChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB0ZXN0dmVyID0gJzAuMjMnCisgICAgICAgIHVybCA9ICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvTS9NYXJrdXBTYWZlL01hcmt1cFNhZmUtJXMudGFyLmd6JyAlIHRlc3R2ZXIKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdweXRob24tbWFya3Vwc2FmZScKKyAgICAgICAgc3JjZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIGFkZAorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbnNzdGF0ZSAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICVzJyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZC4gJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXMuYmInICUgdGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgJ1JlY2lwZSBmaWxlIGluY29ycmVjdGx5IG5hbWVkJykKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydTJ10gPSAnJHtXT1JLRElSfS9NYXJrdXBTYWZlLSVzJyAlIHRlc3R2ZXIKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKyAgICAgICAgIyBUcnkgd2l0aCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMgLVYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsLCB0ZXN0dmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihzcmNkaXIsICdzZXR1cC5weScpKSwgJ1VuYWJsZSB0byBmaW5kIHNldHVwLnB5IGluIHNvdXJjZSBkaXJlY3RvcnknKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCBzdGF0dXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzcmNkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgcmVjaXBlCisgICAgICAgIHJlY2lwZWZpbGUgPSBnZXRfYmJfdmFyKCdGSUxFJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJXNfJXMuYmInICUgKHRlc3RyZWNpcGUsIHRlc3R2ZXIpLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L01hcmt1cFNhZmUtJHtQVn0nCisgICAgICAgIGNoZWNrdmFyc1snU1JDX1VSSSddID0gdXJsLnJlcGxhY2UodGVzdHZlciwgJyR7UFZ9JykKKyAgICAgICAgc2VsZi5fdGVzdF9yZWNpcGVfY29udGVudHMocmVjaXBlZmlsZSwgY2hlY2t2YXJzLCBbXSkKKworICAgIEB0ZXN0Y2FzZSgxMTYxKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfYWRkX2ZldGNoX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgRmV0Y2ggc291cmNlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICB1cmwgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIGNoZWNrcmV2ID0gJzQ2MmYwNjUyMDU1ZDg5YzY0OGRkZDU0ZmQ3YjAzZjE3NWMyYzY5NzMnCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbGlibWF0Y2hib3gyJworICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgYWRkCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuc3N0YXRlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBhZGQgJXMgJXMgLWYgJXMnICUgKHRlc3RyZWNpcGUsIHNyY2RpciwgdXJsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSksICdXb3Jrc3BhY2UgZGlyZWN0b3J5IG5vdCBjcmVhdGVkOiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuMCtnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9ICcke0FVVE9SRVZ9JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorICAgICAgICAjIFRyeSB3aXRoIHJldmlzaW9uIGFuZCB2ZXJzaW9uIHNwZWNpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgLW4gJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzcmNkaXIpCisgICAgICAgIHVybF9yZXYgPSAnJXM7cmV2PSVzJyAlICh1cmwsIGNoZWNrcmV2KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYWRkICVzICVzIC1mICIlcyIgLVYgMS41JyAlICh0ZXN0cmVjaXBlLCBzcmNkaXIsIHVybF9yZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHNyY2RpciwgJ2NvbmZpZ3VyZS5hYycpKSwgJ1VuYWJsZSB0byBmaW5kIGNvbmZpZ3VyZS5hYyBpbiBzb3VyY2UgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3JjZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19naXQuYmInLCByZWNpcGVmaWxlLCAnUmVjaXBlIGZpbGUgaW5jb3JyZWN0bHkgbmFtZWQnKQorICAgICAgICBjaGVja3ZhcnMgPSB7fQorICAgICAgICBjaGVja3ZhcnNbJ1MnXSA9ICcke1dPUktESVJ9L2dpdCcKKyAgICAgICAgY2hlY2t2YXJzWydQViddID0gJzEuNStnaXQke1NSQ1BWfScKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSB1cmwKKyAgICAgICAgY2hlY2t2YXJzWydTUkNSRVYnXSA9IGNoZWNrcmV2CisgICAgICAgIHNlbGYuX3Rlc3RfcmVjaXBlX2NvbnRlbnRzKHJlY2lwZWZpbGUsIGNoZWNrdmFycywgW10pCisKKyAgICBAdGVzdGNhc2UoMTE2NCkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgY2xlYW5zc3RhdGUnKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuIG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSBtZGFkbSAteCAlcycgJSB0ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdNYWtlZmlsZScpKSwgJ0V4dHJhY3RlZCBzb3VyY2UgY291bGQgbm90IGJlIGZvdW5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnbWRhZG1fKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbWRhZG0nLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBUcnkgYnVpbGRpbmcKKyAgICAgICAgYml0YmFrZSgnbWRhZG0nKQorICAgICAgICAjIFRyeSBtYWtpbmcgKG1pbm9yKSBtb2RpZmljYXRpb25zIHRvIHRoZSBzb3VyY2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgLWkgJ3MhXlwuVEguKiEuVEggTURBRE0gOCBcIlwiIHY5Ljk5OS1jdXN0b20hJyAlcyIgJSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ21kYWRtLjguaW4nKSkKKyAgICAgICAgYml0YmFrZSgnbWRhZG0gLWMgcGFja2FnZScpCisgICAgICAgIHBrZ2QgPSBnZXRfYmJfdmFyKCdQS0dEJywgJ21kYWRtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBrZ2QsICdDb3VsZCBub3QgcXVlcnkgUEtHRCB2YXJpYWJsZScpCisgICAgICAgIG1hbmRpciA9IGdldF9iYl92YXIoJ21hbmRpcicsICdtZGFkbScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5kaXIsICdDb3VsZCBub3QgcXVlcnkgbWFuZGlyIHZhcmlhYmxlJykKKyAgICAgICAgaWYgbWFuZGlyWzBdID09ICcvJzoKKyAgICAgICAgICAgIG1hbmRpciA9IG1hbmRpclsxOl0KKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihwa2dkLCBtYW5kaXIsICdtYW44JywgJ21kYWRtLjgnKSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy5USCcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUucnN0cmlwKCksICcuVEggTURBRE0gOCAiIiB2OS45OTktY3VzdG9tJywgJ21hbiBmaWxlIG5vdCBtb2RpZmllZC4gbWFuIHNlYXJjaGVkIGZpbGUgcGF0aDogJXMnICUgb3MucGF0aC5qb2luKHBrZ2QsIG1hbmRpciwgJ21hbjgnLCAnbWRhZG0uOCcpKQorICAgICAgICAjIFRlc3QgZGV2dG9vbCByZXNldAorICAgICAgICBzdGFtcHByZWZpeCA9IGdldF9iYl92YXIoJ1NUQU1QJywgJ21kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHJlc2V0IG1kYWRtJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21kYWRtJywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wcHJlZml4LCAnVW5hYmxlIHRvIGdldCBTVEFNUCB2YWx1ZSBmb3IgcmVjaXBlIG1kYWRtJykKKyAgICAgICAgbWF0Y2hlcyA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeCArICcqJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRjaGVzLCAnU3RhbXAgZmlsZXMgZXhpc3QgZm9yIHJlY2lwZSBtZGFkbSB0aGF0IHNob3VsZCBoYXZlIGJlZW4gY2xlYW5lZCcpCisKKyAgICBAdGVzdGNhc2UoMTE2NikKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9pbnZhbGlkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgdGVzdHJlY2lwZXMgPSAncGVyZiBrZXJuZWwtZGV2c3JjIHBhY2thZ2UtaW5kZXggY29yZS1pbWFnZS1taW5pbWFsIG1ldGEtdG9vbGNoYWluIHBhY2thZ2Vncm91cC1jb3JlLXNkayBtZXRhLWlkZS1zdXBwb3J0Jy5zcGxpdCgpCisgICAgICAgICMgRmluZCBhY3R1YWwgbmFtZSBvZiBnY2Mtc291cmNlIHNpbmNlIGl0IG5vdyBpbmNsdWRlcyB0aGUgdmVyc2lvbiAtIGNydWRlLCBidXQgZ29vZCBlbm91Z2ggZm9yIHRoaXMgcHVycG9zZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2JpdGJha2UtbGF5ZXJzIHNob3ctcmVjaXBlcyBnY2Mtc291cmNlKicpCisgICAgICAgIHJlYWRpbmcgPSBGYWxzZQorICAgICAgICBmb3IgbGluZSBpbiByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnPT0nKToKKyAgICAgICAgICAgICAgICByZWFkaW5nID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiByZWFkaW5nIGFuZCBub3QgbGluZS5zdGFydHN3aXRoKCcgJyk6CisgICAgICAgICAgICAgICAgdGVzdHJlY2lwZXMuYXBwZW5kKGxpbmUuc3BsaXQoJzonKVswXSkKKyAgICAgICAgZm9yIHRlc3RyZWNpcGUgaW4gdGVzdHJlY2lwZXM6CisgICAgICAgICAgICAjIENoZWNrIGl0J3MgYSB2YWxpZCByZWNpcGUKKyAgICAgICAgICAgIGJpdGJha2UoJyVzIC1lJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgZXh0cmFjdCBzaG91bGQgZmFpbAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgJXMgJXMnICUgKHRlc3RyZWNpcGUsIG9zLnBhdGguam9pbih0ZW1wZGlyLCB0ZXN0cmVjaXBlKSksIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ2RldnRvb2wgZXh0cmFjdCBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAodGVzdHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdGZXRjaGluZyAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGVycm9yZWQgb3V0IGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2gnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnZGV2dG9vbCBleHRyYWN0IG9uICVzIHNob3VsZCBoYXZlIGdpdmVuIGFuIEVSUk9SJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICAgICAjIGRldnRvb2wgbW9kaWZ5IHNob3VsZCBmYWlsCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBmYWlsZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSAgKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdkZXZ0b29sIG1vZGlmeSBvbiAlcyBzaG91bGQgaGF2ZSBnaXZlbiBhbiBFUlJPUicgJSB0ZXN0cmVjaXBlKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9tb2RpZnlfbmF0aXZlKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIHNvbWUgcmVjaXBlcworICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisKKyAgICAgICAgYmJjbGFzc2V4dGVuZGVkID0gRmFsc2UKKyAgICAgICAgaW5oZXJpdG5hdGl2ZSA9IEZhbHNlCisgICAgICAgIHRlc3RyZWNpcGVzID0gJ210b29scy1uYXRpdmUgYXB0LW5hdGl2ZSBkZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlJy5zcGxpdCgpCisgICAgICAgIGZvciB0ZXN0cmVjaXBlIGluIHRlc3RyZWNpcGVzOgorICAgICAgICAgICAgY2hlY2tleHRlbmQgPSAnbmF0aXZlJyBpbiAoZ2V0X2JiX3ZhcignQkJDTEFTU0VYVEVORCcsIHRlc3RyZWNpcGUpIG9yICcnKS5zcGxpdCgpCisgICAgICAgICAgICBpZiBub3QgYmJjbGFzc2V4dGVuZGVkOgorICAgICAgICAgICAgICAgIGJiY2xhc3NleHRlbmRlZCA9IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICBpZiBub3QgaW5oZXJpdG5hdGl2ZToKKyAgICAgICAgICAgICAgICBpbmhlcml0bmF0aXZlID0gbm90IGNoZWNrZXh0ZW5kCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignRVJST1I6ICcsIHJlc3VsdC5vdXRwdXQsICdFUlJPUiBpbiBkZXZ0b29sIG1vZGlmeSBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCBidWlsZCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgcmVzZXQgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0VSUk9SOiAnLCByZXN1bHQub3V0cHV0LCAnRVJST1IgaW4gZGV2dG9vbCByZXNldCBvdXRwdXQ6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJiY2xhc3NleHRlbmRlZCwgJ05vbmUgb2YgdGhlc2UgcmVjaXBlcyBhcmUgQkJDTEFTU0VYVEVORGVkIHRvIG5hdGl2ZSAtIG5lZWQgdG8gYWRqdXN0IHRlc3RyZWNpcGVzIGxpc3Q6ICVzJyAlICcsICcuam9pbih0ZXN0cmVjaXBlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbmhlcml0bmF0aXZlLCAnTm9uZSBvZiB0aGVzZSByZWNpcGVzIGRvICJpbmhlcml0IG5hdGl2ZSIgLSBuZWVkIHRvIGFkanVzdCB0ZXN0cmVjaXBlcyBsaXN0OiAlcycgJSAnLCAnLmpvaW4odGVzdHJlY2lwZXMpKQorCisKKyAgICBAdGVzdGNhc2UoMTE2NSkKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21rZWxmaW1hZ2UnCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2xlYW4gdXAgYW55dGhpbmcgaW4gdGhlIHdvcmtkaXIvc3lzcm9vdC9zc3RhdGUgY2FjaGUKKyAgICAgICAgYml0YmFrZSgnJXMgLWMgY2xlYW5zc3RhdGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgbW9kaWZ5aW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnTWFrZWZpbGUnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0ZW1wZGlyLCAnLmdpdCcpKSwgJ2dpdCByZXBvc2l0b3J5IGZvciBleHRlcm5hbCBzb3VyY2UgdHJlZSBub3QgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpKSwgJ1dvcmtzcGFjZSBkaXJlY3Rvcnkgbm90IGNyZWF0ZWQuIGRldnRvb2wgb3V0cHV0OiAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgJ21rZWxmaW1hZ2VfKi5iYmFwcGVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlcywgJ2JiYXBwZW5kIG5vdCBjcmVhdGVkJykKKyAgICAgICAgIyBUZXN0IGRldnRvb2wgc3RhdHVzCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHRlc3RyZWNpcGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVtcGRpciwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnQ3JlYXRlZCBnaXQgcmVwbyBpcyBub3QgY2xlYW4nKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzeW1ib2xpYy1yZWYgSEVBRCcsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgInJlZnMvaGVhZHMvZGV2dG9vbCIsICdXcm9uZyBicmFuY2ggaW4gZ2l0IHJlcG8nKQorICAgICAgICAjIFRyeSBidWlsZGluZworICAgICAgICBiaXRiYWtlKHRlc3RyZWNpcGUpCisKKyAgICBAdGVzdGNhc2UoMTE2NykKKyAgICBkZWYgdGVzdF9kZXZ0b29sX21vZGlmeV9sb2NhbGZpbGVzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdsaWdodHRwZCcKKyAgICAgICAgc3JjX3VyaSA9IChnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkgb3IgJycpLnNwbGl0KCkKKyAgICAgICAgZm91bmRsb2NhbCA9IEZhbHNlCisgICAgICAgIGZvciBpdGVtIGluIHNyY191cmk6CisgICAgICAgICAgICBpZiBpdGVtLnN0YXJ0c3dpdGgoJ2ZpbGU6Ly8nKSBhbmQgJy5wYXRjaCcgbm90IGluIGl0ZW06CisgICAgICAgICAgICAgICAgZm91bmRsb2NhbCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm91bmRsb2NhbCwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gZmV0Y2ggbG9jYWwgZmlsZXMgYW5kIGl0IHNlZW1zIHRoYXQgaXQgbm8gbG9uZ2VyIGRvZXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDbGVhbiB1cCBhbnl0aGluZyBpbiB0aGUgd29ya2Rpci9zeXNyb290L3NzdGF0ZSBjYWNoZQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbnNzdGF0ZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIFRyeSBtb2RpZnlpbmcgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKHRlbXBkaXIsICdjb25maWd1cmUuYWMnKSksICdFeHRyYWN0ZWQgc291cmNlIGNvdWxkIG5vdCBiZSBmb3VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCAnY29uZicsICdsYXllci5jb25mJykpLCAnV29ya3NwYWNlIGRpcmVjdG9yeSBub3QgY3JlYXRlZCcpCisgICAgICAgIG1hdGNoZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHdvcmtzcGFjZWRpciwgJ2FwcGVuZHMnLCAnJXNfKi5iYmFwcGVuZCcgJSB0ZXN0cmVjaXBlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoZXMsICdiYmFwcGVuZCBub3QgY3JlYXRlZCcpCisgICAgICAgICMgVGVzdCBkZXZ0b29sIHN0YXR1cworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgc3RhdHVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0cmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKHRlbXBkaXIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgVHJ5IGJ1aWxkaW5nCisgICAgICAgIGJpdGJha2UodGVzdHJlY2lwZSkKKworICAgIEB0ZXN0Y2FzZSgxMTY5KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbWluaWNvbScKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIE5PVCBiZSBhIGdpdCByZWNpcGUnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb3VwbGUgb2YgY29tbWl0cworICAgICAgICAjIEZJWE1FOiB0aGlzIG9ubHkgdGVzdHMgYWRkaW5nLCBuZWVkIHRvIGFsc28gdGVzdCB1cGRhdGUgYW5kIHJlbW92ZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkFkZGl0aW9uYWwgbGluZSIgPj4gUkVBRE1FJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBSRUFETUUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiQSBuZXcgZmlsZSIgPiBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGFkZCBkZXZ0b29sLW5ldy1maWxlJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtbSAiQWRkIGEgbmV3IGZpbGUiJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2NkICVzOyBybSAlcy8qLnBhdGNoOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIHNob3VsZCBiZSBtb2RpZmllZCcgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzdGF0dXMgPSByZXN1bHQub3V0cHV0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0dXMpLCAzLCAnTGVzcy9tb3JlIGZpbGVzIG1vZGlmaWVkIHRoYW4gZXhwZWN0ZWQuIEVudGlyZSBzdGF0dXM6XG4lcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCcwMDAxLUNoYW5nZS10aGUtUkVBRE1FLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKCcwMDAyLUFkZC1hLW5ldy1maWxlLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lWzozXSwgJz8/ICcsICdVbmV4cGVjdGVkIHN0YXR1cyBpbiBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiByZS5zZWFyY2goJyVzX1teX10qLmJiJCcgJSB0ZXN0cmVjaXBlLCBsaW5lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVbOjNdLCAnIE0gJywgJ1VuZXhwZWN0ZWQgc3RhdHVzIGluIGxpbmU6ICVzJyAlIGxpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gc3RhdHVzOiAlcycgJSBsaW5lKQorCisgICAgQHRlc3RjYXNlKDExNzIpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2dpdChzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgIHRlc3RyZWNpcGUgPSAnbXRkLXV0aWxzJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gYmUgYSBnaXQgcmVjaXBlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHBhdGNoZXMgPSBbXQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZmlsZTovLycpIGFuZCBlbnRyeS5lbmRzd2l0aCgnLnBhdGNoJyk6CisgICAgICAgICAgICAgICAgcGF0Y2hlcy5hcHBlbmQoZW50cnlbNzpdLnNwbGl0KCc7JylbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ocGF0Y2hlcyksIDAsICdUaGUgJXMgcmVjaXBlIGRvZXMgbm90IGFwcGVhciB0byBjb250YWluIGFueSBwYXRjaGVzLCBzbyB0aGlzIHRlc3Qgd2lsbCBub3QgYmUgZWZmZWN0aXZlJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICIiLCAnJXMgcmVjaXBlIGlzIG5vdCBjbGVhbicgJSB0ZXN0cmVjaXBlKQorICAgICAgICAjIEZpcnN0LCBtb2RpZnkgYSByZWNpcGUKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGRpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY291cGxlIG9mIGNvbW1pdHMKKyAgICAgICAgIyBGSVhNRTogdGhpcyBvbmx5IHRlc3RzIGFkZGluZywgbmVlZCB0byBhbHNvIHRlc3QgdXBkYXRlIGFuZCByZW1vdmUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdlY2hvICIjIEFkZGl0aW9uYWwgbGluZSIgPj4gTWFrZWZpbGUnLCBjd2Q9dGVtcGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgdGhlIE1ha2VmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2VjaG8gIkEgbmV3IGZpbGUiID4gZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBhZGQgZGV2dG9vbC1uZXctZmlsZScsIGN3ZD10ZW1wZGlyKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLW0gIkFkZCBhIG5ldyBmaWxlIicsIGN3ZD10ZW1wZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLXJmICVzOyBnaXQgY2hlY2tvdXQgJXMgJXMnICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSwgdGVzdHJlY2lwZSwgb3MucGF0aC5iYXNlbmFtZShyZWNpcGVmaWxlKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBzaG91bGQgYmUgbW9kaWZpZWQnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgZm9yIGxpbmUgaW4gc3RhdHVzOgorICAgICAgICAgICAgZm9yIHBhdGNoIGluIHBhdGNoZXM6CisgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChwYXRjaCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgRCAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCclc19bXl9dKi5iYiQnICUgdGVzdHJlY2lwZSwgbGluZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZVs6M10sICcgTSAnLCAnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignVW5leHBlY3RlZCBtb2RpZmllZCBmaWxlIGluIHN0YXR1czogJXMnICUgbGluZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgZGlmZiAlcycgJSBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBhZGRsaW5lcyA9IFsnU1JDUkVWID0gIi4qIicsICdTUkNfVVJJID0gImdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC11dGlscy5naXQiJ10KKyAgICAgICAgc3JjdXJpbGluZXMgPSBzcmNfdXJpLnNwbGl0KCkKKyAgICAgICAgc3JjdXJpbGluZXNbMF0gPSAnU1JDX1VSSSA9ICInICsgc3JjdXJpbGluZXNbMF0KKyAgICAgICAgc3JjdXJpbGluZXMuYXBwZW5kKCciJykKKyAgICAgICAgcmVtb3ZlbGluZXMgPSBbJ1NSQ1JFViA9ICIuKiInXSArIHNyY3VyaWxpbmVzCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcrKysnKSBvciBsaW5lLnN0YXJ0c3dpdGgoJy0tLScpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIGxpbmUuc3RhcnRzd2l0aCgnKycpOgorICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGFkZGxpbmVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChpdGVtLCBsaW5lWzE6XS5zdHJpcCgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRjaGVkLCAnVW5leHBlY3RlZCBkaWZmIGFkZCBsaW5lOiAlcycgJSBsaW5lKQorICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiByZW1vdmVsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goaXRlbSwgbGluZVsxOl0uc3RyaXAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2hlZCwgJ1VuZXhwZWN0ZWQgZGlmZiByZW1vdmUgbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgIyBOb3cgdHJ5IHdpdGggYXV0byBtb2RlCisgICAgICAgIHJ1bkNtZCgnY2QgJXM7IGdpdCBjaGVja291dCAlcyAlcycgJSAob3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLCB0ZXN0cmVjaXBlLCBvcy5wYXRoLmJhc2VuYW1lKHJlY2lwZWZpbGUpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgJXMnICUgdGVzdHJlY2lwZSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCcpCisgICAgICAgIHRvcGxldmVsZGlyID0gcmVzdWx0Lm91dHB1dC5zdHJpcCgpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAuIC0tcG9yY2VsYWluJywgY3dkPW9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSkKKyAgICAgICAgc3RhdHVzID0gcmVzdWx0Lm91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgcmVscGF0Y2hwYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRvcGxldmVsZGlyKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZXhwZWN0ZWRzdGF0dXMgPSBbKCdNJywgb3MucGF0aC5yZWxwYXRoKHJlY2lwZWZpbGUsIHRvcGxldmVsZGlyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMS1DaGFuZ2UtdGhlLU1ha2VmaWxlLnBhdGNoJyAlIHJlbHBhdGNocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPz8nLCAnJXMvMDAwMi1BZGQtYS1uZXctZmlsZS5wYXRjaCcgJSByZWxwYXRjaHBhdGgpXQorICAgICAgICBmb3IgbGluZSBpbiBzdGF0dXM6CisgICAgICAgICAgICBzdGF0dXNsaW5lID0gbGluZS5zcGxpdChOb25lLCAxKQorICAgICAgICAgICAgZm9yIGZzdGF0dXMsIGZuIGluIGV4cGVjdGVkc3RhdHVzOgorICAgICAgICAgICAgICAgIGlmIGZuID09IHN0YXR1c2xpbmVbMV06CisgICAgICAgICAgICAgICAgICAgIGlmIGZzdGF0dXMgIT0gc3RhdHVzbGluZVswXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnVW5leHBlY3RlZCBzdGF0dXMgaW4gbGluZTogJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIG1vZGlmaWVkIGZpbGUgaW4gbGluZTogJXMnICUgbGluZSkKKworICAgIEB0ZXN0Y2FzZSgxMTcwKQorICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBkYXRlX3JlY2lwZV9hcHBlbmQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNyY191cmkgPSBnZXRfYmJfdmFyKCdTUkNfVVJJJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZ2l0Oi8vJywgc3JjX3VyaSwgJ1RoaXMgdGVzdCBleHBlY3RzIHRoZSAlcyByZWNpcGUgdG8gTk9UIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBGaXJzdCwgbW9kaWZ5IGEgcmVjaXBlCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgdGVtcHNyY2RpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnc291cmNlJykKKyAgICAgICAgdGVtcGxheWVyZGlyID0gb3MucGF0aC5qb2luKHRlbXBkaXIsICdsYXllcicpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh3b3Jrc3BhY2VkaXIpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UtbGF5ZXJzIHJlbW92ZS1sYXllciAqL3dvcmtzcGFjZScpCisgICAgICAgICMgKGRvbid0IGJvdGhlciB3aXRoIGNsZWFuaW5nIHRoZSByZWNpcGUgb24gdGVhcmRvd24sIHdlIHdvbid0IGJlIGJ1aWxkaW5nIGl0KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5ICVzIC14ICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wc3JjZGlyKSkKKyAgICAgICAgIyBDaGVjayBnaXQgcmVwbworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcHNyY2RpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJ0NyZWF0ZWQgZ2l0IHJlcG8gaXMgbm90IGNsZWFuJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3ltYm9saWMtcmVmIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LnN0cmlwKCksICJyZWZzL2hlYWRzL2RldnRvb2wiLCAnV3JvbmcgYnJhbmNoIGluIGdpdCByZXBvJykKKyAgICAgICAgIyBBZGQgYSBjb21taXQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCJzZWQgJ3MhXFwoI2RlZmluZSBWRVJTSU9OXFxXKlwiW15cIl0qXFwpXCIhXFwxLWN1c3RvbVwiIScgLWkgUmVhZE1lLmMiLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgY29tbWl0IC1hIC1tICJBZGQgb3VyIGN1c3RvbSB2ZXJzaW9uIicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjZCAlczsgcm0gLWYgJXMvKi5wYXRjaDsgZ2l0IGNoZWNrb3V0IC4nICUgKG9zLnBhdGguZGlybmFtZShyZWNpcGVmaWxlKSwgdGVzdHJlY2lwZSkpCisgICAgICAgICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGxheWVyIGFuZCBhZGQgaXQgdG8gYmJsYXllcnMuY29uZgorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcih0ZW1wbGF5ZXJkaXIsIFRydWUsICdzZWxmdGVzdHVwZGF0ZXJlY2lwZScpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzonLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHJlY2lwZSBpcyBzdGlsbCBjbGVhbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBzdGF0dXMgLiAtLXBvcmNlbGFpbicsIGN3ZD1vcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAiIiwgJyVzIHJlY2lwZSBpcyBub3QgY2xlYW4nICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBDaGVjayBiYmFwcGVuZCB3YXMgY3JlYXRlZAorICAgICAgICBzcGxpdHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSkuc3BsaXQob3Muc2VwKQorICAgICAgICBhcHBlbmRkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCBzcGxpdHBhdGhbLTJdLCBzcGxpdHBhdGhbLTFdKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBhcHBlbmRkaXIpCisgICAgICAgIHBhdGNoZmlsZSA9IG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUsICcwMDAxLUFkZC1vdXItY3VzdG9tLXZlcnNpb24ucGF0Y2gnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1BZGQtb3VyLWN1c3RvbS12ZXJzaW9uLnBhdGNoIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICB3aXRoIG9wZW4oYmJhcHBlbmRmaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkbGluZXMsIGYucmVhZGxpbmVzKCkpCisKKyAgICAgICAgIyBDaGVjayB3ZSBjYW4gcnVuIGl0IGFnYWluIGFuZCBiYmFwcGVuZCBpc24ndCBtb2RpZmllZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgcGF0Y2ggZ2V0cyBkZWxldGVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHJlc2V0IEhFQUReJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGNoZmlsZSksICdQYXRjaCBmaWxlIG5vdCBkZWxldGVkJykKKyAgICAgICAgZXhwZWN0ZWRsaW5lczIgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzMiwgZi5yZWFkbGluZXMoKSkKKyAgICAgICAgIyBQdXQgY29tbWl0IGJhY2sgYW5kIGNoZWNrIHdlIGNhbiBydW4gaXQgaWYgbGF5ZXIgaXNuJ3QgaW4gYmJsYXllcnMuY29uZgorICAgICAgICBvcy5yZW1vdmUoYmJhcHBlbmRmaWxlKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCBjb21taXQgLWEgLW0gIkFkZCBvdXIgY3VzdG9tIHZlcnNpb24iJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocGF0Y2hmaWxlKSwgJ1BhdGNoIGZpbGUgbm90IGNyZWF0ZWQgKHdpdGggZGlzYWJsZWQgbGF5ZXIpJykKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNzEpCisgICAgZGVmIHRlc3RfZGV2dG9vbF91cGRhdGVfcmVjaXBlX2FwcGVuZF9naXQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICB0ZXN0cmVjaXBlID0gJ210ZC11dGlscycKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2dpdDovLycsIHNyY191cmksICdUaGlzIHRlc3QgZXhwZWN0cyB0aGUgJXMgcmVjaXBlIHRvIGJlIGEgZ2l0IHJlY2lwZScgJSB0ZXN0cmVjaXBlKQorICAgICAgICBmb3IgZW50cnkgaW4gc3JjX3VyaS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgZW50cnkuc3RhcnRzd2l0aCgnZ2l0Oi8vJyk6CisgICAgICAgICAgICAgICAgZ2l0X3VyaSA9IGVudHJ5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QsIG1vZGlmeSBhIHJlY2lwZQorICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J2RldnRvb2xxYScpCisgICAgICAgIHRlbXBzcmNkaXIgPSBvcy5wYXRoLmpvaW4odGVtcGRpciwgJ3NvdXJjZScpCisgICAgICAgIHRlbXBsYXllcmRpciA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAnbGF5ZXInKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICAjIChkb24ndCBib3RoZXIgd2l0aCBjbGVhbmluZyB0aGUgcmVjaXBlIG9uIHRlYXJkb3duLCB3ZSB3b24ndCBiZSBidWlsZGluZyBpdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAodGVzdHJlY2lwZSwgdGVtcHNyY2RpcikpCisgICAgICAgICMgQ2hlY2sgZ2l0IHJlcG8KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKHRlbXBzcmNkaXIsICcuZ2l0JykpLCAnZ2l0IHJlcG9zaXRvcnkgZm9yIGV4dGVybmFsIHNvdXJjZSB0cmVlIG5vdCBmb3VuZCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICdDcmVhdGVkIGdpdCByZXBvIGlzIG5vdCBjbGVhbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IHN5bWJvbGljLXJlZiBIRUFEJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dC5zdHJpcCgpLCAicmVmcy9oZWFkcy9kZXZ0b29sIiwgJ1dyb25nIGJyYW5jaCBpbiBnaXQgcmVwbycpCisgICAgICAgICMgQWRkIGEgY29tbWl0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZWNobyAiIyBBZGRpdGlvbmFsIGxpbmUiID4+IE1ha2VmaWxlJywgY3dkPXRlbXBzcmNkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignY2QgJXM7IHJtIC1mICVzLyoucGF0Y2g7IGdpdCBjaGVja291dCAuJyAlIChvcy5wYXRoLmRpcm5hbWUocmVjaXBlZmlsZSksIHRlc3RyZWNpcGUpKQorICAgICAgICAjIENyZWF0ZSBhIHRlbXBvcmFyeSBsYXllcgorICAgICAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4odGVtcGxheWVyZGlyLCAnY29uZicpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgJ2NvbmYnLCAnbGF5ZXIuY29uZicpLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVTICs9ICIke0xBWUVSRElSfS9yZWNpcGVzLSovKi8qLmJiYXBwZW5kIlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAib2VzZWxmdGVzdHRlbXBsYXllciJcbicpCisgICAgICAgICAgICBmLndyaXRlKCdCQkZJTEVfUEFUVEVSTl9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIl4ke0xBWUVSRElSfS8iXG4nKQorICAgICAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BSSU9SSVRZX29lc2VsZnRlc3R0ZW1wbGF5ZXIgPSAiOTk5IlxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ0JCRklMRV9QQVRURVJOX0lHTk9SRV9FTVBUWV9vZXNlbGZ0ZXN0dGVtcGxheWVyID0gIjEiXG4nKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMgfHwgdHJ1ZScgJSB0ZW1wbGF5ZXJkaXIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgYWRkLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgY3dkPXNlbGYuYnVpbGRkaXIpCisgICAgICAgICMgQ3JlYXRlIHRoZSBiYmFwcGVuZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBkYXRlLXJlY2lwZSAtbSBzcmNyZXYgJXMgLWEgJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBsYXllcmRpcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6JywgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBDaGVjayByZWNpcGUgaXMgc3RpbGwgY2xlYW4KKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgc3RhdHVzIC4gLS1wb3JjZWxhaW4nLCBjd2Q9b3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQuc3RyaXAoKSwgIiIsICclcyByZWNpcGUgaXMgbm90IGNsZWFuJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgd2FzIGNyZWF0ZWQKKyAgICAgICAgc3BsaXRwYXRoID0gb3MucGF0aC5kaXJuYW1lKHJlY2lwZWZpbGUpLnNwbGl0KG9zLnNlcCkKKyAgICAgICAgYXBwZW5kZGlyID0gb3MucGF0aC5qb2luKHRlbXBsYXllcmRpciwgc3BsaXRwYXRoWy0yXSwgc3BsaXRwYXRoWy0xXSkKKyAgICAgICAgYmJhcHBlbmRmaWxlID0gc2VsZi5fY2hlY2tfYmJhcHBlbmQodGVzdHJlY2lwZSwgcmVjaXBlZmlsZSwgYXBwZW5kZGlyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorCisgICAgICAgICMgQ2hlY2sgYmJhcHBlbmQgY29udGVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnU1JDUkVWID0gIiVzIlxuJyAlIHJlc3VsdC5vdXRwdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU1JDX1VSSSA9ICIlcyJcbicgJSBnaXRfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIHdpdGggb3BlbihiYmFwcGVuZGZpbGUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSkKKworICAgICAgICAjIENoZWNrIHdlIGNhbiBydW4gaXQgYWdhaW4gYW5kIGJiYXBwZW5kIGlzbid0IG1vZGlmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCB1cGRhdGUtcmVjaXBlIC1tIHNyY3JldiAlcyAtYSAlcycgJSAodGVzdHJlY2lwZSwgdGVtcGxheWVyZGlyKSkKKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERyb3AgbmV3IGNvbW1pdCBhbmQgY2hlY2sgU1JDUkVWIGNoYW5nZXMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdnaXQgcmVzZXQgSEVBRF4nLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIFB1dCBjb21taXQgYmFjayBhbmQgY2hlY2sgd2UgY2FuIHJ1biBpdCBpZiBsYXllciBpc24ndCBpbiBiYmxheWVycy5jb25mCisgICAgICAgIG9zLnJlbW92ZShiYmFwcGVuZGZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIHRoZSBNYWtlZmlsZSInLCBjd2Q9dGVtcHNyY2RpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyLCBjd2Q9c2VsZi5idWlsZGRpcikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVwZGF0ZS1yZWNpcGUgLW0gc3JjcmV2ICVzIC1hICVzJyAlICh0ZXN0cmVjaXBlLCB0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdXQVJOSU5HOiBTcGVjaWZpZWQgbGF5ZXIgaXMgbm90IGN1cnJlbnRseSBlbmFibGVkIGluIGJibGF5ZXJzLmNvbmYnLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihhcHBlbmRkaXIsIHRlc3RyZWNpcGUpKSwgJ1BhdGNoIGRpcmVjdG9yeSBzaG91bGQgbm90IGJlIGNyZWF0ZWQnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2dpdCByZXYtcGFyc2UgSEVBRCcsIGN3ZD10ZW1wc3JjZGlyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydTUkNSRVYgPSAiJXMiXG4nICUgcmVzdWx0Lm91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJID0gIiVzIlxuJyAlIGdpdF91cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZGxpbmVzLCBmLnJlYWRsaW5lcygpKQorICAgICAgICAjIERlbGV0aW5nIGlzbid0IGV4cGVjdGVkIHRvIHdvcmsgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcworCisgICAgQHRlc3RjYXNlKDExNjMpCisgICAgZGVmIHRlc3RfZGV2dG9vbF9leHRyYWN0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICAjIFRyeSBkZXZ0b29sIGV4dHJhY3QKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGV4dHJhY3QgcmVtYWtlICVzJyAlIHRlbXBkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4odGVtcGRpciwgJ01ha2VmaWxlLmFtJykpLCAnRXh0cmFjdGVkIHNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGVtcGRpciwgJy5naXQnKSksICdnaXQgcmVwb3NpdG9yeSBmb3IgZXh0ZXJuYWwgc291cmNlIHRyZWUgbm90IGZvdW5kJykKKworICAgIEB0ZXN0Y2FzZSgxMTY4KQorICAgIGRlZiB0ZXN0X2RldnRvb2xfcmVzZXRfYWxsKHNlbGYpOgorICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICB0ZXN0cmVjaXBlMSA9ICdtZGFkbScKKyAgICAgICAgdGVzdHJlY2lwZTIgPSAnY3JvbmllJworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgbW9kaWZ5IC14ICVzICVzJyAlICh0ZXN0cmVjaXBlMSwgb3MucGF0aC5qb2luKHRlbXBkaXIsIHRlc3RyZWNpcGUxKSkpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgLXggJXMgJXMnICUgKHRlc3RyZWNpcGUyLCBvcy5wYXRoLmpvaW4odGVtcGRpciwgdGVzdHJlY2lwZTIpKSkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgYnVpbGQgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHN0YW1wcHJlZml4MSA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDEsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTEpCisgICAgICAgIHN0YW1wcHJlZml4MiA9IGdldF9iYl92YXIoJ1NUQU1QJywgdGVzdHJlY2lwZTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGFtcHByZWZpeDIsICdVbmFibGUgdG8gZ2V0IFNUQU1QIHZhbHVlIGZvciByZWNpcGUgJXMnICUgdGVzdHJlY2lwZTIpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAtYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTEsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGVzdHJlY2lwZTIsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUxLCByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHRlc3RyZWNpcGUyLCByZXN1bHQub3V0cHV0KQorICAgICAgICBtYXRjaGVzMSA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDEgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczEsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUxKQorICAgICAgICBtYXRjaGVzMiA9IGdsb2IuZ2xvYihzdGFtcHByZWZpeDIgKyAnKicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0Y2hlczIsICdTdGFtcCBmaWxlcyBleGlzdCBmb3IgcmVjaXBlICVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBjbGVhbmVkJyAlIHRlc3RyZWNpcGUyKQorCisgICAgZGVmIHRlc3RfZGV2dG9vbF9kZXBsb3lfdGFyZ2V0KHNlbGYpOgorICAgICAgICAjIE5PVEU6IFdoaWxzdCB0aGlzIHRlc3Qgd291bGQgc2VlbWluZ2x5IGJlIGJldHRlciBwbGFjZWQgYXMgYSBydW50aW1lIHRlc3QsCisgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgcnVudGltZSB0ZXN0cyBydW4gdW5kZXIgYml0YmFrZSBhbmQgeW91IGNhbid0IHJ1bgorICAgICAgICAjIGRldnRvb2wgd2l0aGluIGJpdGJha2UgKHNpbmNlIGRldnRvb2wgbmVlZHMgdG8gcnVuIGJpdGJha2UgaXRzZWxmKS4KKyAgICAgICAgIyBBZGRpdGlvbmFsbHkgd2UgYXJlIHRlc3RpbmcgYnVpbGQtdGltZSBmdW5jdGlvbmFsaXR5IGFzIHdlbGwsIHNvCisgICAgICAgICMgcmVhbGx5IHRoaXMgaGFzIHRvIGJlIGRvbmUgYXMgYW4gb2Utc2VsZnRlc3QgdGVzdC4KKyAgICAgICAgIworICAgICAgICAjIENoZWNrIHByZWNvbmRpdGlvbnMKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBpZiBub3QgbWFjaGluZS5zdGFydHN3aXRoKCdxZW11Jyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdUaGlzIHRlc3Qgb25seSB3b3JrcyB3aXRoIHFlbXUgbWFjaGluZXMnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoJy9ldGMvcnVucWVtdS1ub3N1ZG8nKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ1lvdSBtdXN0IHNldCB1cCB0YXAgZGV2aWNlcyB3aXRoIHNjcmlwdHMvcnVucWVtdS1nZW4tdGFwZGV2cyBiZWZvcmUgcnVubmluZyB0aGlzIHRlc3QnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ1BBVEg9IiRQQVRIOi9zYmluOi91c3Ivc2JpbiIgaXAgdHVudGFwIHNob3cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnUEFUSD0iJFBBVEg6L3NiaW46L3Vzci9zYmluIiBpZmNvbmZpZyAtYScsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHJlc3VsdC5zdGF0dXMgIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGlmIHRhcCBkZXZpY2VzIGV4aXN0IHdpdGggaWZjb25maWcgb3IgaXA6ICVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5vdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCd0YXAnKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnTm8gdGFwIGRldmljZXMgZm91bmQgLSB5b3UgbXVzdCBzZXQgdXAgdGFwIGRldmljZXMgd2l0aCBzY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgYmVmb3JlIHJ1bm5pbmcgdGhpcyB0ZXN0JykKKyAgICAgICAgd29ya3NwYWNlZGlyID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICd3b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IG9zLnBhdGguZXhpc3RzKHdvcmtzcGFjZWRpciksICdUaGlzIHRlc3QgY2Fubm90IGJlIHJ1biB3aXRoIGEgd29ya3NwYWNlIGRpcmVjdG9yeSB1bmRlciB0aGUgYnVpbGQgZGlyZWN0b3J5JykKKyAgICAgICAgIyBEZWZpbml0aW9ucworICAgICAgICB0ZXN0cmVjaXBlID0gJ21kYWRtJworICAgICAgICB0ZXN0ZmlsZSA9ICcvc2Jpbi9tZGFkbScKKyAgICAgICAgdGVzdGltYWdlID0gJ29lLXNlbGZ0ZXN0LWltYWdlJworICAgICAgICB0ZXN0Y29tbWFuZCA9ICcvc2Jpbi9tZGFkbSAtLWhlbHAnCisgICAgICAgICMgQnVpbGQgYW4gaW1hZ2UgdG8gcnVuCisgICAgICAgIGJpdGJha2UoIiVzIHFlbXUtbmF0aXZlIHFlbXUtaGVscGVyLW5hdGl2ZSIgJSB0ZXN0aW1hZ2UpCisgICAgICAgIGRlcGxveV9kaXJfaW1hZ2UgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZSAtYyBjbGVhbiAlcycgJSB0ZXN0aW1hZ2UpCisgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ3JtIC1mICVzLyVzKicgJSAoZGVwbG95X2Rpcl9pbWFnZSwgdGVzdGltYWdlKSkKKyAgICAgICAgIyBDbGVhbiByZWNpcGUgc28gdGhlIGZpcnN0IGRlcGxveSB3aWxsIGZhaWwKKyAgICAgICAgYml0YmFrZSgiJXMgLWMgY2xlYW4iICUgdGVzdHJlY2lwZSkKKyAgICAgICAgIyBUcnkgZGV2dG9vbCBtb2RpZnkKKyAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdkZXZ0b29scWEnKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRlbXBkaXIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBtb2RpZnkgJXMgLXggJXMnICUgKHRlc3RyZWNpcGUsIHRlbXBkaXIpKQorICAgICAgICAjIFRlc3QgdGhhdCBkZXBsb3ktdGFyZ2V0IGF0IHRoaXMgcG9pbnQgZmFpbHMgKHByb3Blcmx5KQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgZGVwbG95LXRhcmdldCAtbiAlcyByb290QGxvY2FsaG9zdCcgJSB0ZXN0cmVjaXBlLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0Lm91dHB1dCwgMCwgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQsIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihyZXN1bHQub3V0cHV0LCAnVHJhY2ViYWNrJywgJ2RldnRvb2wgZGVwbG95LXRhcmdldCBzaG91bGQgaGF2ZSBmYWlsZWQgd2l0aCBhIHByb3BlciBlcnJvciBub3QgYSB0cmFjZWJhY2ssIG91dHB1dDogJXMnICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkICVzJyAlIHRlc3RyZWNpcGUpCisgICAgICAgICMgRmlyc3QgdHJ5IGEgZHJ5LXJ1biBvZiBkZXBsb3ktdGFyZ2V0CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1uICVzIHJvb3RAbG9jYWxob3N0JyAlIHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyAgJXMnICUgdGVzdGZpbGUsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgQm9vdCB0aGUgaW1hZ2UKKyAgICAgICAgd2l0aCBydW5xZW11KHRlc3RpbWFnZSwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgTm93IHJlYWxseSB0ZXN0IGRlcGxveS10YXJnZXQKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBkZXBsb3ktdGFyZ2V0IC1jICVzIHJvb3RAJXMnICUgKHRlc3RyZWNpcGUsIHFlbXUuaXApKQorICAgICAgICAgICAgIyBSdW4gYSB0ZXN0IGNvbW1hbmQgdG8gc2VlIGlmIGl0IHdhcyBpbnN0YWxsZWQgcHJvcGVybHkKKyAgICAgICAgICAgIHNzaGFyZ3MgPSAnLW8gVXNlcktub3duSG9zdHNGaWxlPS9kZXYvbnVsbCAtbyBTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3NzaCAlcyByb290QCVzICVzJyAlIChzc2hhcmdzLCBxZW11LmlwLCB0ZXN0Y29tbWFuZCkpCisgICAgICAgICAgICAjIENoZWNrIGlmIGl0IGRlcGxveWVkIGFsbCBvZiB0aGUgZmlsZXMgd2l0aCB0aGUgcmlnaHQgb3duZXJzaGlwL3Blcm1zCisgICAgICAgICAgICAjIEZpcnN0IGxvb2sgb24gdGhlIGhvc3QgLSBuZWVkIHRvIGRvIHRoaXMgdW5kZXIgcHNldWRvIHRvIGdldCB0aGUgY29ycmVjdCBvd25lcnNoaXAvcGVybXMKKyAgICAgICAgICAgIGluc3RhbGxkaXIgPSBnZXRfYmJfdmFyKCdEJywgdGVzdHJlY2lwZSkKKyAgICAgICAgICAgIGZha2Vyb290ZW52ID0gZ2V0X2JiX3ZhcignRkFLRVJPT1RFTlYnLCB0ZXN0cmVjaXBlKQorICAgICAgICAgICAgZmFrZXJvb3RjbWQgPSBnZXRfYmJfdmFyKCdGQUtFUk9PVENNRCcsIHRlc3RyZWNpcGUpCisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJyVzICVzIGZpbmQgLiAtdHlwZSBmIC1leGVjIGxzIC1sIHt9IFw7JyAlIChmYWtlcm9vdGVudiwgZmFrZXJvb3RjbWQpLCBjd2Q9aW5zdGFsbGRpcikKKyAgICAgICAgICAgIGZpbGVsaXN0MSA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgICAgICMgTm93IGxvb2sgb24gdGhlIHRhcmdldAorICAgICAgICAgICAgdGVtcGRpcjIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcjIpCisgICAgICAgICAgICB0bXBmaWxlbGlzdCA9IG9zLnBhdGguam9pbih0ZW1wZGlyMiwgJ2ZpbGVzLnR4dCcpCisgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZWxpc3QsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlbGlzdDE6CisgICAgICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNwbGl0bGluZVstMV0gKyAnXG4nKQorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdjYXQgJXMgfCBzc2ggLXEgJXMgcm9vdEAlcyBcJ3hhcmdzIGxzIC1sXCcnICUgKHRtcGZpbGVsaXN0LCBzc2hhcmdzLCBxZW11LmlwKSkKKyAgICAgICAgICAgIGZpbGVsaXN0MiA9IHNlbGYuX3Byb2Nlc3NfbHNfb3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBmaWxlbGlzdDEuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBmaWxlbGlzdDIuc29ydChrZXk9bGFtYmRhIGl0ZW06IGl0ZW0uc3BsaXQoKVstMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVsaXN0MSwgZmlsZWxpc3QyKQorICAgICAgICAgICAgIyBUZXN0IHVuZGVwbG95LXRhcmdldAorICAgICAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHVuZGVwbG95LXRhcmdldCAtYyAlcyByb290QCVzJyAlICh0ZXN0cmVjaXBlLCBxZW11LmlwKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnc3NoICVzIHJvb3RAJXMgJXMnICUgKHNzaGFyZ3MsIHFlbXUuaXAsIHRlc3Rjb21tYW5kKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQsIDAsICd1bmRlcGxveS10YXJnZXQgZGlkIG5vdCByZW1vdmUgY29tbWFuZCBhcyBpdCBzaG91bGQgaGF2ZScpCisKKyAgICBkZWYgdGVzdF9kZXZ0b29sX2J1aWxkX2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGRldnRvb2wgYnVpbGQtaW1hZ2UgcGx1Z2luIiIiCisgICAgICAgICMgQ2hlY2sgcHJlY29uZGl0aW9ucworICAgICAgICB3b3Jrc3BhY2VkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZGRpciwgJ3dvcmtzcGFjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMod29ya3NwYWNlZGlyKSwgJ1RoaXMgdGVzdCBjYW5ub3QgYmUgcnVuIHdpdGggYSB3b3Jrc3BhY2UgZGlyZWN0b3J5IHVuZGVyIHRoZSBidWlsZCBkaXJlY3RvcnknKQorICAgICAgICBpbWFnZSA9ICdjb3JlLWltYWdlLW1pbmltYWwnCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAod29ya3NwYWNlZGlyKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlLWxheWVycyByZW1vdmUtbGF5ZXIgKi93b3Jrc3BhY2UnKQorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdiaXRiYWtlIC1jIGNsZWFuICVzJyAlIGltYWdlKQorICAgICAgICBiaXRiYWtlKCclcyAtYyBjbGVhbicgJSBpbWFnZSkKKyAgICAgICAgIyBBZGQgdGFyZ2V0IGFuZCBuYXRpdmUgcmVjaXBlcyB0byB3b3Jrc3BhY2UKKyAgICAgICAgZm9yIHJlY2lwZSBpbiAoJ21kYWRtJywgJ3BhcnRlZC1uYXRpdmUnKToKKyAgICAgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodGVtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYWRkX2NvbW1hbmRfdG9fdGVhckRvd24oJ2JpdGJha2UgLWMgY2xlYW4gJXMnICUgcmVjaXBlKQorICAgICAgICAgICAgcnVuQ21kKCdkZXZ0b29sIG1vZGlmeSAlcyAteCAlcycgJSAocmVjaXBlLCB0ZW1wZGlyKSkKKyAgICAgICAgIyBUcnkgdG8gYnVpbGQgaW1hZ2UKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIGJ1aWxkLWltYWdlICVzJyAlIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdCwgMCwgJ2RldnRvb2wgYnVpbGQtaW1hZ2UgZmFpbGVkJykKKyAgICAgICAgIyBDaGVjayBpZiBpbWFnZS5iYmFwcGVuZCBoYXMgcmVxdWlyZWQgY29udGVudAorICAgICAgICBiYmFwcGVuZCA9IG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsICdhcHBlbmRzJywgaW1hZ2UrJy5iYmFwcGVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShiYmFwcGVuZCksICdiYmFwcGVuZCBub3QgY3JlYXRlZCAlcycgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIE5PVEU6IG5hdGl2ZSByZWNpcGUgcGFydGVkLW5hdGl2ZSBzaG91bGQgbm90IGJlIGluIElNQUdFX0lOU1RBTExfYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG1kYWRtIlxuJyBpbiBvcGVuKGJiYXBwZW5kKS5yZWFkbGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdJTUFHRV9JTlNUQUxMX2FwcGVuZCA9ICIgbWRhZG0iIG5vdCBmb3VuZCBpbiAlcycgJSBiYmFwcGVuZCkKKworICAgIGRlZiB0ZXN0X2RldnRvb2xfdXBncmFkZShzZWxmKToKKyAgICAgICAgIyBDaGVjayBwcmVjb25kaXRpb25zCisgICAgICAgIHdvcmtzcGFjZWRpciA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkZGlyLCAnd29ya3NwYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBvcy5wYXRoLmV4aXN0cyh3b3Jrc3BhY2VkaXIpLCAnVGhpcyB0ZXN0IGNhbm5vdCBiZSBydW4gd2l0aCBhIHdvcmtzcGFjZSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgICAgICMgQ2hlY2sgcGFyYW1ldGVycworICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAtaCcpCisgICAgICAgIGZvciBwYXJhbSBpbiAncmVjaXBlbmFtZSBzcmN0cmVlIC0tdmVyc2lvbiAtViAtLWJyYW5jaCAtYiAtLWtlZXAtdGVtcCAtLW5vLXBhdGNoJy5zcGxpdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJhbSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBGb3IgdGhlIG1vbWVudCwgd2UgYXJlIHVzaW5nIGEgcmVhbCByZWNpcGUuCisgICAgICAgIHJlY2lwZT0nZGV2dG9vbC11cGdyYWRlJworICAgICAgICB2ZXJzaW9uPScwLjInCisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nZGV2dG9vbHFhJykKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlY2lwZSBpcyBub3QgYWxyZWFkeSB1bmRlciBkZXZ0b29sIGNvbnRyb2wKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdkZXZ0b29sIHN0YXR1cycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocmVjaXBlLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIHVwZ3JhZGUuIENvZGUgZG9lcyBub3QgY2hlY2sgaWYgbmV3IFBWIGlzIG9sZGVyIG9yIG5ld2VyIHRoYXQgY3VycmVudCBQViwgc28sIGl0IG1heSBiZSB0aGF0CisgICAgICAgICMgd2UgYXJlIGRvd25ncmFkaW5nIGluc3RlYWQgb2YgdXBncmFkaW5nLgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ2RldnRvb2wgdXBncmFkZSAlcyAlcyAtViAlcycgJSAocmVjaXBlLCB0ZW1wZGlyLCB2ZXJzaW9uKSkKKyAgICAgICAgIyBDaGVjayBpZiBzcmN0cmVlIGF0IGxlYXN0IGlzIHBvcHVsYXRlZAorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG9zLmxpc3RkaXIodGVtcGRpcikpID4gMCwgJ3NjcnRyZWUgKCVzKSBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggbmV3ICglcykgc291cmNlIGNvZGUnICUgKHRlbXBkaXIsIHZlcnNpb24pKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZm9sZGVyIGlzIHByZXNlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbih3b3Jrc3BhY2VkaXIsJ3JlY2lwZXMnLHJlY2lwZSkpLCAnUmVjaXBlIGZvbGRlciBzaG91bGQgZXhpc3QnKQorICAgICAgICAjIENoZWNrIG5ldyByZWNpcGUgZmlsZSBpcyBwcmVzZW50CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4od29ya3NwYWNlZGlyLCdyZWNpcGVzJyxyZWNpcGUsIiVzXyVzLmJiIiAlIChyZWNpcGUsdmVyc2lvbikpKSwgJ1JlY2lwZSBmb2xkZXIgc2hvdWxkIGV4aXN0JykKKyAgICAgICAgIyBDaGVjayBkZXZ0b29sIHN0YXR1cyBhbmQgbWFrZSBzdXJlIHJlY2lwZSBpcyBwcmVzZW50CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZW1wZGlyLCByZXN1bHQub3V0cHV0KQorICAgICAgICAjIENoZWNrIGRldnRvb2wgcmVzZXQgcmVjaXBlCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCByZXNldCAlcyAtbicgJSByZWNpcGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGV2dG9vbCBzdGF0dXMnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHJlY2lwZSwgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHdvcmtzcGFjZWRpcikKKyAgICAgICAgc2VsZi5hZGRfY29tbWFuZF90b190ZWFyRG93bignYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICovd29ya3NwYWNlJykKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvaW1hZ2VmZWF0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ZmYzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9pbWFnZWZlYXR1cmVzLnB5CkBAIC0wLDAgKzEsMTY4IEBACitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIHJ1bnFlbXUKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorZnJvbSBvZXFhLnV0aWxzLnNzaGNvbnRyb2wgaW1wb3J0IFNTSENvbnRyb2wKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKKworY2xhc3MgSW1hZ2VGZWF0dXJlcyhvZVNlbGZUZXN0KToKKworICAgIHRlc3RfdXNlciA9ICd0ZXN0ZXInCisgICAgcm9vdF91c2VyID0gJ3Jvb3QnCisKKyAgICBAdGVzdGNhc2UoMTEwNykKKyAgICBkZWYgdGVzdF9ub25fcm9vdF91c2VyX2Nhbl9jb25uZWN0X3ZpYV9zc2hfd2l0aG91dF9wYXNzd29yZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6IENoZWNrIGlmIG5vbiByb290IHVzZXIgY2FuIGNvbm5lY3QgdmlhIHNzaCB3aXRob3V0IHBhc3N3b3JkCisgICAgICAgIEV4cGVjdGVkOiAxLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHJvb3QgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICAgICAgICAgICAgMi4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyB0ZXN0ZXIgdXNlciB3aXRob3V0IHByb3ZpZGluZyBhIHBhc3N3b3JkIHNob3VsZCBiZSBhbGxvd2VkLgorICAgICAgICBQcm9kdWN0OiBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogSW9udXQgQ2hpc2Fub3ZpY2kgPGlvbnV0eC5jaGlzYW5vdmljaUBpbnRlbC5jb20+CisgICAgICAgIEF1dG9tYXRlZEJ5OiBEYW5pZWwgSXN0cmF0ZSA8ZGFuaWVsLmFsZXhhbmRydXguaXN0cmF0ZUBpbnRlbC5jb20+CisgICAgICAgICIiIgorCisgICAgICAgIGZlYXR1cmVzID0gJ0VYVFJBX0lNQUdFX0ZFQVRVUkVTID0gInNzaC1zZXJ2ZXItb3BlbnNzaCBlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDAsICdzc2ggdG8gdXNlciAlcyBmYWlsZWQgd2l0aCAlcycgJSAodXNlciwgb3V0cHV0KSkKKworICAgIEB0ZXN0Y2FzZSgxMTE1KQorICAgIGRlZiB0ZXN0X2FsbF91c2Vyc19jYW5fY29ubmVjdF92aWFfc3NoX3dpdGhvdXRfcGFzc3dvcmQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgYWxsIHVzZXJzIGNhbiBjb25uZWN0IHZpYSBzc2ggd2l0aG91dCBwYXNzd29yZAorICAgICAgICBFeHBlY3RlZDogMS4gQ29ubmVjdGlvbiB0byB0aGUgaW1hZ2UgdmlhIHNzaCB1c2luZyByb290IHVzZXIgd2l0aG91dCBwcm92aWRpbmcgYSBwYXNzd29yZCBzaG91bGQgTk9UIGJlIGFsbG93ZWQuCisgICAgICAgICAgICAgICAgICAyLiBDb25uZWN0aW9uIHRvIHRoZSBpbWFnZSB2aWEgc3NoIHVzaW5nIHRlc3RlciB1c2VyIHdpdGhvdXQgcHJvdmlkaW5nIGEgcGFzc3dvcmQgc2hvdWxkIGJlIGFsbG93ZWQuCisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnRVhUUkFfSU1BR0VfRkVBVFVSRVMgPSAic3NoLXNlcnZlci1vcGVuc3NoIGFsbG93LWVtcHR5LXBhc3N3b3JkIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnSU5IRVJJVCArPSAiZXh0cmF1c2VycyJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ0VYVFJBX1VTRVJTX1BBUkFNUyA9ICJ1c2VyYWRkIC1wIFwnXCcge307IHVzZXJtb2QgLXMgL2Jpbi9zaCB7fTsiJy5mb3JtYXQoc2VsZi50ZXN0X3VzZXIsIHNlbGYudGVzdF91c2VyKQorCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgIHdpdGggcnVucWVtdSgiY29yZS1pbWFnZS1taW5pbWFsIiwgc2VsZikgYXMgcWVtdToKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzc2ggd2l0aCBlYWNoIHVzZXIgaW50byBxZW11IHdpdGggZW1wdHkgcGFzc3dvcmQKKyAgICAgICAgICAgIGZvciB1c2VyIGluIFtzZWxmLnJvb3RfdXNlciwgc2VsZi50ZXN0X3VzZXJdOgorICAgICAgICAgICAgICAgIHNzaCA9IFNTSENvbnRyb2woaXA9cWVtdS5pcCwgbG9nZmlsZT1xZW11LnNzaGxvZywgdXNlcj11c2VyKQorICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3NoLnJ1bigidHJ1ZSIpCisgICAgICAgICAgICAgICAgaWYgdXNlciA9PSAncm9vdCc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RhdHVzLCAwLCAnc3NoIHRvIHVzZXIgcm9vdCB3YXMgYWxsb3dlZCB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSBiZWVuJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgJ3NzaCB0byB1c2VyIHRlc3RlciBmYWlsZWQgd2l0aCAlcycgJSBvdXRwdXQpCisKKworICAgIEB0ZXN0Y2FzZSgxMTE0KQorICAgIGRlZiB0ZXN0X3JwbV92ZXJzaW9uXzRfc3VwcG9ydF9vbl9pbWFnZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN1bW1hcnk6ICAgICBDaGVjayBycG0gdmVyc2lvbiA0IHN1cHBvcnQgb24gaW1hZ2UKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIFJwbSB2ZXJzaW9uIG11c3QgYmUgNC54CisgICAgICAgIFByb2R1Y3Q6ICAgICBvZS1jb3JlCisgICAgICAgIEF1dGhvcjogICAgICBJb251dCBDaGlzYW5vdmljaSA8aW9udXR4LmNoaXNhbm92aWNpQGludGVsLmNvbT4KKyAgICAgICAgQXV0b21hdGVkQnk6IERhbmllbCBJc3RyYXRlIDxkYW5pZWwuYWxleGFuZHJ1eC5pc3RyYXRlQGludGVsLmNvbT4KKyAgICAgICAgIiIiCisKKyAgICAgICAgZmVhdHVyZXMgPSAnUFJFRkVSUkVEX1ZFUlNJT05fcnBtID0gIjQuJSJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1BSRUZFUlJFRF9WRVJTSU9OX3JwbS1uYXRpdmUgPSAiNC4lIlxuJworICAgICAgICAjIFVzZSBvcGVuc3NoIGluIElNQUdFX0lOU1RBTEwgaW5zdGVhZCBvZiBzc2gtc2VydmVyLW9wZW5zc2ggaW4gRVhUUkFfSU1BR0VfRkVBVFVSRVMgYXMgYSB3b3JrYXJvdW5kIGZvciBidWcgODA0NworICAgICAgICBmZWF0dXJlcyArPSAnSU1BR0VfSU5TVEFMTF9hcHBlbmQgPSAiIG9wZW5zc2giXG4nCisgICAgICAgIGZlYXR1cmVzICs9ICdFWFRSQV9JTUFHRV9GRUFUVVJFUyA9ICJlbXB0eS1yb290LXBhc3N3b3JkIGFsbG93LWVtcHR5LXBhc3N3b3JkIHBhY2thZ2UtbWFuYWdlbWVudCJcbicKKyAgICAgICAgZmVhdHVyZXMgKz0gJ1JQTVJPT1RGU0RFUEVORFNfcmVtb3ZlID0gInJwbXJlc29sdmUtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiJworCisgICAgICAgICMgQXBwZW5kICdmZWF0dXJlcycgdG8gbG9jYWwuY29uZgorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisKKyAgICAgICAgIyBCdWlsZCBhIGNvcmUtaW1hZ2UtbWluaW1hbAorICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorCisgICAgICAgICMgQ2hlY2sgdGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIHJwbSBpcyBjb3JyZWN0CisgICAgICAgIG5hdGl2ZV9iaW5kaXIgPSBnZXRfYmJfdmFyKCdTVEFHSU5HX0JJTkRJUl9OQVRJVkUnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQob3MucGF0aC5qb2luKG5hdGl2ZV9iaW5kaXIsICdycG0nKSArICcgLS12ZXJzaW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndmVyc2lvbiA0LicsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayBtYW5pZmVzdCBmb3IgdGhlIHJwbSBwYWNrYWdlCisgICAgICAgIGRlcGxveWRpciA9IGdldF9iYl92YXIoJ0RFUExPWV9ESVJfSU1BR0UnKQorICAgICAgICBpbWduYW1lID0gZ2V0X2JiX3ZhcignSU1BR0VfTElOS19OQU1FJywgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGVwbG95ZGlyLCBpbWduYW1lKSArICcubWFuaWZlc3QnLCAncicpIGFzIGY6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihzcGxpdGxpbmUpID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcnBtX3ZlcnNpb24gPSBzcGxpdGxpbmVbMl0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRsaW5lWzBdID09ICdycG0nOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJwbV92ZXJzaW9uLnN0YXJ0c3dpdGgoJzQuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdycG0gdmVyc2lvbiAlcyBmb3VuZCBpbiBpbWFnZSwgZXhwZWN0ZWQgNC54JyAlIHJwbV92ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBycG0gcGFja2FnZSBmb3VuZCBpbiBpbWFnZScpCisKKyAgICAgICAgIyBOb3cgZG8gYSBjb3VwbGUgb2YgcnVudGltZSB0ZXN0cworICAgICAgICB3aXRoIHJ1bnFlbXUoImNvcmUtaW1hZ2UtbWluaW1hbCIsIHNlbGYpIGFzIHFlbXU6CisgICAgICAgICAgICBjb21tYW5kID0gInJwbSAtLXZlcnNpb24iCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHFlbXUucnVuKGNvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cywgJ0ZhaWxlZCB0byBydW4gY29tbWFuZCAiJXMiOiAlcycgJSAoY29tbWFuZCwgb3V0cHV0KSkKKyAgICAgICAgICAgIGZvdW5kX3JwbV92ZXJzaW9uID0gb3V0cHV0LnN0cmlwKCkKKworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHJldHJpZXZlZCBycG0gdmVyc2lvbiBpcyB0aGUgZXhwZWN0ZWQgb25lCisgICAgICAgICAgICBpZiBycG1fdmVyc2lvbiBub3QgaW4gZm91bmRfcnBtX3ZlcnNpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSUE0gdmVyc2lvbiBpcyBub3Qge30sIGZvdW5kIGluc3RlYWQge30uJy5mb3JtYXQocnBtX3ZlcnNpb24sIGZvdW5kX3JwbV92ZXJzaW9uKSkKKworICAgICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIHJwbSBkYXRhYmFzZSBpcyB0aGVyZSBhbmQgd29ya2luZworICAgICAgICAgICAgY29tbWFuZCA9ICJycG0gLXFhIgorICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBxZW11LnJ1bihjb21tYW5kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMsICdGYWlsZWQgdG8gcnVuIGNvbW1hbmQgIiVzIjogJXMnICUgKGNvbW1hbmQsIG91dHB1dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwYWNrYWdlZ3JvdXAtY29yZS1ib290Jywgb3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignYnVzeWJveCcsIG91dHB1dCkKKworCisgICAgQHRlc3RjYXNlKDExMTYpCisgICAgZGVmIHRlc3RfY2x1dHRlcl9pbWFnZV9jYW5fYmVfYnVpbHQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgaWYgY2x1dHRlciBpbWFnZSBjYW4gYmUgYnVpbHQKKyAgICAgICAgRXhwZWN0ZWQ6ICAgIDEuIGNvcmUtaW1hZ2UtY2x1dHRlciBjYW4gYmUgYnVpbHQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS1jbHV0dGVyCisgICAgICAgIGJpdGJha2UoJ2NvcmUtaW1hZ2UtY2x1dHRlcicpCisKKyAgICBAdGVzdGNhc2UoMTExNykKKyAgICBkZWYgdGVzdF93YXlsYW5kX3N1cHBvcnRfaW5faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTdW1tYXJ5OiAgICAgQ2hlY2sgV2F5bGFuZCBzdXBwb3J0IGluIGltYWdlCisgICAgICAgIEV4cGVjdGVkOiAgICAxLiBXYXlsYW5kIGltYWdlIGNhbiBiZSBidWlsZAorICAgICAgICAgICAgICAgICAgICAgMi4gV2F5bGFuZCBmZWF0dXJlIGNhbiBiZSBpbnN0YWxsZWQKKyAgICAgICAgUHJvZHVjdDogICAgIG9lLWNvcmUKKyAgICAgICAgQXV0aG9yOiAgICAgIElvbnV0IENoaXNhbm92aWNpIDxpb251dHguY2hpc2Fub3ZpY2lAaW50ZWwuY29tPgorICAgICAgICBBdXRvbWF0ZWRCeTogRGFuaWVsIElzdHJhdGUgPGRhbmllbC5hbGV4YW5kcnV4LmlzdHJhdGVAaW50ZWwuY29tPgorICAgICAgICAiIiIKKworICAgICAgICBmZWF0dXJlcyA9ICdESVNUUk9fRkVBVFVSRVNfYXBwZW5kID0gIiB3YXlsYW5kIlxuJworICAgICAgICBmZWF0dXJlcyArPSAnQ09SRV9JTUFHRV9FWFRSQV9JTlNUQUxMICs9ICJ3YXlsYW5kIHdlc3RvbiInCisKKyAgICAgICAgIyBBcHBlbmQgJ2ZlYXR1cmVzJyB0byBsb2NhbC5jb25mCisgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhmZWF0dXJlcykKKworICAgICAgICAjIEJ1aWxkIGEgY29yZS1pbWFnZS13ZXN0b24KKyAgICAgICAgYml0YmFrZSgnY29yZS1pbWFnZS13ZXN0b24nKQorCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xheWVyYXBwZW5kLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODJhNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9sYXllcmFwcGVuZC5weQpAQCAtMCwwICsxLDk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnNlbGZ0ZXN0LmJ1aWxkaGlzdG9yeSBpbXBvcnQgQnVpbGRoaXN0b3J5QmFzZQorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMYXllckFwcGVuZFRlc3RzKG9lU2VsZlRlc3QpOgorICAgIGxheWVyY29uZiA9ICIiIgorIyBXZSBoYXZlIGEgY29uZiBhbmQgY2xhc3NlcyBkaXJlY3RvcnksIGFwcGVuZCB0byBCQlBBVEgKK0JCUEFUSCAuPSAiOiR7TEFZRVJESVJ9IgorCisjIFdlIGhhdmUgYSByZWNpcGVzIGRpcmVjdG9yeSwgYWRkIHRvIEJCRklMRVMKK0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9L3JlY2lwZXMqLyouYmIgJHtMQVlFUkRJUn0vcmVjaXBlcyovKi5iYmFwcGVuZCIKKworQkJGSUxFX0NPTExFQ1RJT05TICs9ICJtZXRhLWxheWVySU5UIgorQkJGSUxFX1BBVFRFUk5fbWV0YS1sYXllcklOVCA6PSAiXiR7TEFZRVJESVJ9LyIKK0JCRklMRV9QUklPUklUWV9tZXRhLWxheWVySU5UID0gIjYiCisiIiIKKyAgICByZWNpcGUgPSAiIiIKK0xJQ0VOU0U9IkNMT1NFRCIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK3B5dGhvbiBkb19idWlsZCgpIHsKKyAgICBiYi5wbGFpbignQnVpbGRpbmcgLi4uJykKK30KK2FkZHRhc2sgYnVpbGQKKyIiIgorICAgIGFwcGVuZCA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCA9ICIgZmlsZTovL2FwcGVuZHRlc3QudHh0IgorCitzeXNyb290X3N0YWdlX2FsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9hcHBlbmR0ZXN0LnR4dCAke1NZU1JPT1RfREVTVERJUn0vCit9CisKKyIiIgorCisgICAgYXBwZW5kMiA9ICIiIgorRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IgorCitTUkNfVVJJX2FwcGVuZCArPSAiZmlsZTovL2FwcGVuZHRlc3QudHh0IgorIiIiCisgICAgbGF5ZXJhcHBlbmQgPSAiQkJMQVlFUlMgKz0gXCJDT1JFQkFTRS9tZXRhLWxheWVydGVzdDAgQ09SRUJBU0UvbWV0YS1sYXllcnRlc3QxIENPUkVCQVNFL21ldGEtbGF5ZXJ0ZXN0MlwiIgorCisgICAgZGVmIHRlYXJEb3duTG9jYWwoc2VsZik6CisgICAgICAgIGZ0b29scy5yZW1vdmVfZnJvbV9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorCisgICAgQHRlc3RjYXNlKDExOTYpCisgICAgZGVmIHRlc3RfbGF5ZXJfYXBwZW5kcyhzZWxmKToKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCJDT1JFQkFTRSIpCisgICAgICAgIHN0YWdpbmdkaXIgPSBnZXRfYmJfdmFyKCJTVEFHSU5HX0RJUl9UQVJHRVQiKQorICAgICAgICBmb3IgbCBpbiBbIjAiLCAiMSIsICIyIl06CisgICAgICAgICAgICBsYXllciA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgIm1ldGEtbGF5ZXJ0ZXN0IiArIGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGxheWVyKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyKQorICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL2NvbmYiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9jb25mL2xheWVyLmNvbmYiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLmxheWVyY29uZi5yZXBsYWNlKCJJTlQiLCBsKSkKKyAgICAgICAgICAgIG9zLm1rZGlyKGxheWVyICsgIi9yZWNpcGVzLXRlc3QiKQorICAgICAgICAgICAgaWYgbCA9PSAiMCI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYucmVjaXBlKQorICAgICAgICAgICAgZWxpZiBsID09ICIxIjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4obGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QuYmJhcHBlbmQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5hcHBlbmQpCisgICAgICAgICAgICAgICAgb3MubWtkaXIobGF5ZXIgKyAiL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QiKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdC9hcHBlbmR0ZXN0LnR4dCIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiTGF5ZXIgMSB0ZXN0IikKKyAgICAgICAgICAgIGVsaWYgbCA9PSAiMiI6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0LmJiYXBwZW5kIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXBwZW5kMikKKyAgICAgICAgICAgICAgICBvcy5ta2RpcihsYXllciArICIvcmVjaXBlcy10ZXN0L2xheWVyYXBwZW5kdGVzdCIpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGxheWVyICsgIi9yZWNpcGVzLXRlc3QvbGF5ZXJhcHBlbmR0ZXN0L2FwcGVuZHRlc3QudHh0IiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cChsYXllcikKKyAgICAgICAgZnRvb2xzLmFwcGVuZF9maWxlKHNlbGYuYnVpbGRkaXIgKyAiL2NvbmYvYmJsYXllcnMuY29uZiIsIHNlbGYubGF5ZXJhcHBlbmQucmVwbGFjZSgiQ09SRUJBU0UiLCBzZWxmLmJ1aWxkZGlyICsgIi8uLiIpKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisgICAgICAgIG9zLnJlbW92ZShjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDEgdGVzdCIpCisgICAgICAgIHdpdGggb3Blbihjb3JlYmFzZSArICIvbWV0YS1sYXllcnRlc3QyL3JlY2lwZXMtdGVzdC9sYXllcmFwcGVuZHRlc3QvYXBwZW5kdGVzdC50eHQiLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJMYXllciAyIHRlc3QiKQorICAgICAgICBiaXRiYWtlKCJsYXllcmFwcGVuZHRlc3QiKQorICAgICAgICBkYXRhID0gZnRvb2xzLnJlYWRfZmlsZShzdGFnaW5nZGlyICsgIi9hcHBlbmR0ZXN0LnR4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIkxheWVyIDIgdGVzdCIpCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L2xpYy1jaGVja3N1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNiOWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9saWMtY2hlY2tzdW0ucHkKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgdGVtcGZpbGUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgYml0YmFrZQorZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBMaWNlbnNlVGVzdHMob2VTZWxmVGVzdCk6CisKKyAgICAjIFZlcmlmeSB0aGF0IGNoYW5naW5nIGEgbGljZW5zZSBmaWxlIHRoYXQgaGFzIGFuIGFic29sdXRlIHBhdGggY2F1c2VzCisgICAgIyB0aGUgbGljZW5zZSBxYSB0byBmYWlsIGR1ZSB0byBhIG1pc21hdGNoZWQgbWQ1c3VtLgorICAgIEB0ZXN0Y2FzZSgxMTk3KQorICAgIGRlZiB0ZXN0X25vbm1hdGNoaW5nX2NoZWNrc3VtKHNlbGYpOgorICAgICAgICBiaXRiYWtlX2NtZCA9ICctYyBjb25maWd1cmUgZW1wdHl0ZXN0JworICAgICAgICBlcnJvcl9tc2cgPSAnRVJST1I6IGVtcHR5dGVzdDogVGhlIG5ldyBtZDUgY2hlY2tzdW0gaXMgOGQ3NzdmMzg1ZDNkZmVjODgxNWQyMGY3NDk2MDI2ZGMnCisKKyAgICAgICAgbGljX2ZpbGUsIGxpY19wYXRoID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9zLmNsb3NlKGxpY19maWxlKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKGxpY19wYXRoKQorCisgICAgICAgIHNlbGYud3JpdGVfcmVjaXBlaW5jKCdlbXB0eXRlc3QnLCAnSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSInKQorICAgICAgICBzZWxmLmFwcGVuZF9yZWNpcGVpbmMoJ2VtcHR5dGVzdCcsICdMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8lczttZDU9ZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UiJyAlIGxpY19wYXRoKQorICAgICAgICByZXN1bHQgPSBiaXRiYWtlKGJpdGJha2VfY21kKQorCisgICAgICAgIHdpdGggb3BlbihsaWNfcGF0aCwgInciKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCisKKyAgICAgICAgcmVzdWx0ID0gYml0YmFrZShiaXRiYWtlX2NtZCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBpZiBlcnJvcl9tc2cgbm90IGluIHJlc3VsdC5vdXRwdXQ6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihyZXN1bHQub3V0cHV0KQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L29lc2NyaXB0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNkNTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9vZXNjcmlwdHMucHkKQEAgLTAsMCArMSw1NCBAQAoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEuc2VsZnRlc3QuYnVpbGRoaXN0b3J5IGltcG9ydCBCdWlsZGhpc3RvcnlCYXNlCitmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IENvbW1hbmQsIHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhciwgZ2V0X3Rlc3RfbGF5ZXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBUZXN0U2NyaXB0cyhvZVNlbGZUZXN0KToKKworICAgIEB0ZXN0Y2FzZSgzMDApCisgICAgZGVmIHRlc3RfY2xlYW51cF93b3JrZGlyKHNlbGYpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorICAgICAgICBvbGRfdmVyc2lvbl9yZWNpcGUgPSBvcy5wYXRoLmpvaW4oZ2V0X2JiX3ZhcignQ09SRUJBU0UnKSwgJ21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS4zLjEyLmJiJykKKyAgICAgICAgb2xkX3ZlcnNpb24gPSAnMS4zLjEyJworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIGd6aXAiKQorICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlIC1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZ2V0X2JiX3ZhcignV09SS0RJUicsICItYiAlcyIgJSBvbGRfdmVyc2lvbl9yZWNpcGUpKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhnZXRfYmJfdmFyKCdXT1JLRElSJywgJ2d6aXAnKSk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGdldF9iYl92YXIoJ1dPUktESVInLCAnZ3ppcCcpKQorCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICAgICAgaW5pdGlhbF9jb250ZW50cyA9IG9zLmxpc3RkaXIocGF0aCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluaXRpYWxfY29udGVudHMgPSBbXQorCisgICAgICAgIGJpdGJha2UoJ2d6aXAnKQorICAgICAgICBpbnRlcm1lZGlhcnlfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisgICAgICAgIGJpdGJha2UoIi1iICVzIiAlIG9sZF92ZXJzaW9uX3JlY2lwZSkKKyAgICAgICAgcnVuQ21kKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICByZW1haW5pbmdfY29udGVudHMgPSBvcy5saXN0ZGlyKHBhdGgpCisKKyAgICAgICAgZXhwZWN0ZWRfY29udGVudHMgPSBbeCBmb3IgeCBpbiBpbnRlcm1lZGlhcnlfY29udGVudHMgaWYgeCBub3QgaW4gaW5pdGlhbF9jb250ZW50c10KKyAgICAgICAgcmVtYWluaW5nX25vdF9leHBlY3RlZCA9IFt4IGZvciB4IGluIHJlbWFpbmluZ19jb250ZW50cyBpZiB4IG5vdCBpbiBleHBlY3RlZF9jb250ZW50c10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfbm90X2V4cGVjdGVkLCBtc2c9Ik5vdCBhbGwgbmVjZXNzYXJ5IGNvbnRlbnQgaGFzIGJlZW4gZGVsZXRlZCBmcm9tICVzOiAlcyIgJSAocGF0aCwgJywgJy5qb2luKG1hcChzdHIsIHJlbWFpbmluZ19ub3RfZXhwZWN0ZWQpKSkpCisgICAgICAgIGV4cGVjdGVkX25vdF9yZW1haW5pbmcgPSBbeCBmb3IgeCBpbiBleHBlY3RlZF9jb250ZW50cyBpZiB4IG5vdCBpbiByZW1haW5pbmdfY29udGVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X3JlbWFpbmluZywgbXNnPSJUaGUgc2NyaXB0IHJlbW92ZWQgZXh0cmEgY29udGVudHMgZnJvbSAlczogJXMiICUgKHBhdGgsICcsICcuam9pbihtYXAoc3RyLCBleHBlY3RlZF9ub3RfcmVtYWluaW5nKSkpKQorCitjbGFzcyBCdWlsZGhpc3RvcnlEaWZmVGVzdHMoQnVpbGRoaXN0b3J5QmFzZSk6CisKKyAgICBAdGVzdGNhc2UoMjk1KQorICAgIGRlZiB0ZXN0X2J1aWxkaGlzdG9yeV9kaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFkZF9jb21tYW5kX3RvX3RlYXJEb3duKCdjbGVhbnVwLXdvcmtkaXInKQorICAgICAgICB0YXJnZXQgPSAneGN1cnNvci10cmFuc3BhcmVudC10aGVtZScKKyAgICAgICAgc2VsZi5ydW5fYnVpbGRoaXN0b3J5X29wZXJhdGlvbih0YXJnZXQsIHRhcmdldF9jb25maWc9IlBSID0gXCJyMVwiIiwgY2hhbmdlX2JoX2xvY2F0aW9uPVRydWUpCisgICAgICAgIHNlbGYucnVuX2J1aWxkaGlzdG9yeV9vcGVyYXRpb24odGFyZ2V0LCB0YXJnZXRfY29uZmlnPSJQUiA9IFwicjBcIiIsIGNoYW5nZV9iaF9sb2NhdGlvbj1GYWxzZSwgZXhwZWN0X2Vycm9yPVRydWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgiYnVpbGRoaXN0b3J5LWRpZmYgLXAgJXMiICUgZ2V0X2JiX3ZhcignQlVJTERISVNUT1JZX0RJUicpKQorICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAnUFIgY2hhbmdlZCBmcm9tICJyMSIgdG8gInIwIicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX291dHB1dCBpbiByZXN1bHQub3V0cHV0LCBtc2c9IkRpZCBub3QgZmluZCBleHBlY3RlZCBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3BrZ2RhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM4YjAzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcGtnZGF0YS5weQpAQCAtMCwwICsxLDIyNiBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBmbm1hdGNoCisKK2ltcG9ydCBvZXFhLnV0aWxzLmZ0b29scyBhcyBmdG9vbHMKK2Zyb20gb2VxYS5zZWxmdGVzdC5iYXNlIGltcG9ydCBvZVNlbGZUZXN0Citmcm9tIG9lcWEudXRpbHMuY29tbWFuZHMgaW1wb3J0IHJ1bkNtZCwgYml0YmFrZSwgZ2V0X2JiX3ZhcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCisKK2NsYXNzIE9lUGtnZGF0YVV0aWxUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICMgRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGRhdGEgaW4gcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCdnbGliYyBidXN5Ym94IHpsaWIgYmFzaCcpCisKKyAgICBAdGVzdGNhc2UoMTIwMykKKyAgICBkZWYgdGVzdF9sb29rdXBfcGtnKHNlbGYpOgorICAgICAgICAjIEZvcndhcmQgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAiZ2xpYmMgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNlxuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgemxpYi1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJ6LWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorICAgICAgICAjIFJldmVyc2UgdGVzdHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXBrZyAtciAibGliYzYgYnVzeWJveCInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliY1xuYnVzeWJveCcpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbGliei1kZXYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICd6bGliLWRldicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1wa2cgLXIgbm9uZXhpc3RlbnRwa2cnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBUaGUgZm9sbG93aW5nIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBmb3VuZDogbm9uZXhpc3RlbnRwa2cnKQorCisgICAgQHRlc3RjYXNlKDEyMDUpCisgICAgZGVmIHRlc3RfcmVhZF92YWx1ZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgcmVhZC12YWx1ZSBQTiBsaWJ6MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCByZWFkLXZhbHVlIFBLR1NJWkUgYmFzaCcpCisgICAgICAgIHBrZ3NpemUgPSBpbnQocmVzdWx0Lm91dHB1dC5zdHJpcCgpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGtnc2l6ZSwgMSwgIlNpemUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAxLiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExOTgpCisgICAgZGVmIHRlc3RfZmluZF9wYXRoKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2xpYi9saWJjLnNvLjYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdnbGliYzogL2xpYi9saWJjLnNvLjYnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBmaW5kLXBhdGggL2Jpbi9iYXNoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQub3V0cHV0LCAnYmFzaDogL2Jpbi9iYXNoJykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZmluZC1wYXRoIC9ub3QvZXhpc3QnLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnN0YXR1cywgMSwgIlN0YXR1cyBkaWZmZXJlbnQgdGhhbiAxLiBvdXRwdXQ6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ0VSUk9SOiBVbmFibGUgdG8gZmluZCBhbnkgcGFja2FnZSBwcm9kdWNpbmcgcGF0aCAvbm90L2V4aXN0JykKKworICAgIEB0ZXN0Y2FzZSgxMjA0KQorICAgIGRlZiB0ZXN0X2xvb2t1cF9yZWNpcGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxvb2t1cC1yZWNpcGUgImxpYmM2LXN0YXRpY2RldiBidXN5Ym94IicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ2dsaWJjXG5idXN5Ym94JykKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbG9va3VwLXJlY2lwZSBsaWJ6LWRiZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJ3psaWInKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsb29rdXAtcmVjaXBlIG5vbmV4aXN0ZW50cGtnJywgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDEsICJTdGF0dXMgZGlmZmVyZW50IHRoYW4gMS4gb3V0cHV0OiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdFUlJPUjogVGhlIGZvbGxvd2luZyBwYWNrYWdlcyBjb3VsZCBub3QgYmUgZm91bmQ6IG5vbmV4aXN0ZW50cGtnJykKKworICAgIEB0ZXN0Y2FzZSgxMjAyKQorICAgIGRlZiB0ZXN0X2xpc3RfcGtncyhzZWxmKToKKyAgICAgICAgIyBObyBhcmd1bWVudHMKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzJykKKyAgICAgICAgcGtnbGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdnbGliYy11dGlscycsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3psaWItZGV2JywgcGtnbGlzdCwgIkxpc3RlZCBwYWNrYWdlczogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBObyBwa2dzcGVjLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcicpCisgICAgICAgIHBrZ2xpc3QgPSByZXN1bHQub3V0cHV0LnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliYzYtdXRpbHMnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBrZ2xpc3QucmVtb3ZlKCd6bGliLXB0ZXN0JykgIyBpbiBjYXNlIHB0ZXN0IGlzIGRpc2FibGVkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYicsICd6bGliLWRiZycsICd6bGliLWRldicsICd6bGliLWRvYycsICd6bGliLXN0YXRpY2RldiddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXInKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnbGlzdC5yZW1vdmUoJ2xpYnotcHRlc3QnKSAjIGluIGNhc2UgcHRlc3QgaXMgZGlzYWJsZWQKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYycsICdsaWJ6LXN0YXRpY2RldicsICdsaWJ6MSddLCAiUGFja2FnZXMgbGlzdGVkIGFmdGVyIHJlbW92ZTogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXUnKQorICAgICAgICBwa2dsaXN0ID0gc29ydGVkKHJlc3VsdC5vdXRwdXQuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1sb2NhbGUnLCBwa2dsaXN0LCAiTGlzdGVkIHBhY2thZ2VzOiAlcyIgJSByZXN1bHQub3V0cHV0KQorICAgICAgICAjIFdpdGggcmVjaXBlIHNwZWNpZmllZCBhbmQgdW5wYWNrYWdlZCwgcnVudGltZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZ3MgLXAgemxpYiAtdSAtcicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIHBrZ2xpc3QsICJMaXN0ZWQgcGFja2FnZXM6ICVzIiAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICMgV2l0aCByZWNpcGUgc3BlY2lmaWVkIGFuZCBwa2dzcGVjCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtncyAtcCB6bGliICIqLWQqIicpCisgICAgICAgIHBrZ2xpc3QgPSBzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBrZ2xpc3QsIFsnemxpYi1kYmcnLCAnemxpYi1kZXYnLCAnemxpYi1kb2MnXSwgIlBhY2thZ2VzIGxpc3RlZDogJXMiICUgcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgIyBXaXRoIHJlY2lwZSBzcGVjaWZpZWQgYW5kIHBrZ3NwZWMsIHJ1bnRpbWUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2dzIC1wIHpsaWIgLXIgIiotZCoiJykKKyAgICAgICAgcGtnbGlzdCA9IHNvcnRlZChyZXN1bHQub3V0cHV0LnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGtnbGlzdCwgWydsaWJ6LWRiZycsICdsaWJ6LWRldicsICdsaWJ6LWRvYyddLCAiUGFja2FnZXMgbGlzdGVkOiAlcyIgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDEyMDEpCisgICAgZGVmIHRlc3RfbGlzdF9wa2dfZmlsZXMoc2VsZik6CisgICAgICAgIGRlZiBzcGxpdG91dHB1dChvdXRwdXQpOgorICAgICAgICAgICAgZmlsZXMgPSB7fQorICAgICAgICAgICAgY3VycGtnID0gTm9uZQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3V0cHV0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1x0Jyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdXJwa2csICdVbmV4cGVjdGVkIG5vbi1wYWNrYWdlIGxpbmU6XG4lcycgJSBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddLmFwcGVuZChsaW5lLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmUucnN0cmlwKCkuZW5kc3dpdGgoJzonKSwgJ0ludmFsaWQgcGFja2FnZSBsaW5lIGluIG91dHB1dDpcbiVzJyAlIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGN1cnBrZyA9IGxpbmUuc3BsaXQoJzonKVswXQorICAgICAgICAgICAgICAgICAgICBmaWxlc1tjdXJwa2ddID0gW10KKyAgICAgICAgICAgIHJldHVybiBmaWxlcworICAgICAgICBiYXNlX2xpYmRpciA9IGdldF9iYl92YXIoJ2Jhc2VfbGliZGlyJykKKyAgICAgICAgbGliZGlyID0gZ2V0X2JiX3ZhcignbGliZGlyJykKKyAgICAgICAgaW5jbHVkZWRpciA9IGdldF9iYl92YXIoJ2luY2x1ZGVkaXInKQorICAgICAgICBtYW5kaXIgPSBnZXRfYmJfdmFyKCdtYW5kaXInKQorICAgICAgICAjIFRlc3QgcmVjaXBlLXNwYWNlIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyB6bGliLWRldiB6bGliLWRvYycpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgICMgVGVzdCBydW50aW1lIHBhY2thZ2UgbmFtZQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtciBsaWJ6MSBsaWJ6LWRldicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliejEnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbGliei1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlc1snbGliejEnXSksIDEpCisgICAgICAgIGxpYnNwZWMgPSBvcy5wYXRoLmpvaW4oYmFzZV9saWJkaXIsICdsaWJ6LnNvLjEuKicpCisgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIGZpbGVpdGVtIGluIGZpbGVzWydsaWJ6MSddOgorICAgICAgICAgICAgaWYgZm5tYXRjaC5mbm1hdGNoY2FzZShmaWxlaXRlbSwgbGlic3BlYyk6CisgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvdW5kLCAnQ291bGQgbm90IGZpbmQgemxpYiBsaWJyYXJ5IGZpbGUgJXMgaW4gbGliejEgcGFja2FnZSBmaWxlIGxpc3Q6ICVzJyAlIChsaWJzcGVjLCBmaWxlc1snbGliejEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYicpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICAjIChpZ25vcmUgcHRlc3QsIG1pZ2h0IG5vdCBiZSB0aGVyZSBkZXBlbmRpbmcgb24gY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihpbmNsdWRlZGlyLCAnemxpYi5oJyksIGZpbGVzWyd6bGliLWRldiddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihtYW5kaXIsICdtYW4zL3psaWIuMycpLCBmaWxlc1snemxpYi1kb2MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obGliZGlyLCAnbGliei5hJyksIGZpbGVzWyd6bGliLXN0YXRpY2RldiddKQorICAgICAgICAjIFRlc3QgcmVjaXBlLCBydW50aW1lCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGxpc3QtcGtnLWZpbGVzIC1wIHpsaWIgLXInKQorICAgICAgICBmaWxlcyA9IHNwbGl0b3V0cHV0KHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGJnJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZG9jJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnotc3RhdGljZGV2JywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xpYnoxJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotbG9jYWxlJywgZmlsZXMua2V5cygpLCAibGlzdGVkIHBrZ3MuIGZpbGVzOiAlcyIgJXJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGluY2x1ZGVkaXIsICd6bGliLmgnKSwgZmlsZXNbJ2xpYnotZGV2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKG1hbmRpciwgJ21hbjMvemxpYi4zJyksIGZpbGVzWydsaWJ6LWRvYyddKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLnBhdGguam9pbihsaWJkaXIsICdsaWJ6LmEnKSwgZmlsZXNbJ2xpYnotc3RhdGljZGV2J10pCisgICAgICAgICMgVGVzdCByZWNpcGUsIHVucGFja2FnZWQKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgbGlzdC1wa2ctZmlsZXMgLXAgemxpYiAtdScpCisgICAgICAgIGZpbGVzID0gc3BsaXRvdXRwdXQocmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kYmcnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kb2MnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1kZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYi1zdGF0aWNkZXYnLCBmaWxlcy5rZXlzKCksICJsaXN0ZWQgcGtncy4gZmlsZXM6ICVzIiAlcmVzdWx0Lm91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignemxpYicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCd6bGliLWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snemxpYi1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ3psaWItZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snemxpYi1zdGF0aWNkZXYnXSkKKyAgICAgICAgIyBUZXN0IHJlY2lwZSwgcnVudGltZSwgdW5wYWNrYWdlZAorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBsaXN0LXBrZy1maWxlcyAtcCB6bGliIC1yIC11JykKKyAgICAgICAgZmlsZXMgPSBzcGxpdG91dHB1dChyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRiZycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRvYycsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWRldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LXN0YXRpY2RldicsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6MScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKCdsaWJ6LWxvY2FsZScsIGZpbGVzLmtleXMoKSwgImxpc3RlZCBwa2dzLiBmaWxlczogJXMiICVyZXN1bHQub3V0cHV0KSAjIHRoaXMgaXMgdGhlIGtleSBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4oaW5jbHVkZWRpciwgJ3psaWIuaCcpLCBmaWxlc1snbGliei1kZXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLmpvaW4obWFuZGlyLCAnbWFuMy96bGliLjMnKSwgZmlsZXNbJ2xpYnotZG9jJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5qb2luKGxpYmRpciwgJ2xpYnouYScpLCBmaWxlc1snbGliei1zdGF0aWNkZXYnXSkKKworICAgIEB0ZXN0Y2FzZSgxMjAwKQorICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0ncGtnZGF0YXFhJykKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wZGlyKQorICAgICAgICBwa2dsaXN0ZmlsZSA9IG9zLnBhdGguam9pbih0ZW1wZGlyLCAncGtnbGlzdCcpCisgICAgICAgIHdpdGggb3Blbihwa2dsaXN0ZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSgnbGliYzZcbicpCisgICAgICAgICAgICBmLndyaXRlKCdsaWJ6MVxuJykKKyAgICAgICAgICAgIGYud3JpdGUoJ2J1c3lib3hcbicpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnb2UtcGtnZGF0YS11dGlsIGdsb2IgJXMgIiotZGV2IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgZGVzaXJlZHJlc3VsdCA9IFsnbGliYzYtZGV2JywgJ2xpYnotZGV2JywgJ2J1c3lib3gtZGV2J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmVzdWx0Lm91dHB1dC5zcGxpdCgpKSwgc29ydGVkKGRlc2lyZWRyZXN1bHQpKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIG5vdCBlcnJvciAoYmVjYXVzZSB3aGVuIHdlIHVzZSB0aGlzIGR1cmluZyByb290ZnMgY29uc3RydWN0aW9uLCBzb21ldGltZXMgdGhlIGNvbXBsZW1lbnRhcnkgcGFja2FnZSB3b24ndCBleGlzdCkKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgZ2xvYiAlcyAiKi1ub25leGlzdGVudCInICUgcGtnbGlzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Lm91dHB1dCwgJycpCisgICAgICAgICMgVGVzdCBleGNsdWRlIG9wdGlvbgorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ29lLXBrZ2RhdGEtdXRpbCBnbG9iICVzICIqLWRldiAqLWRiZyIgLXggIl5saWJ6IicgJSBwa2dsaXN0ZmlsZSkKKyAgICAgICAgcmVzdWx0bGlzdCA9IHJlc3VsdC5vdXRwdXQuc3BsaXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsaWJ6LWRldicsIHJlc3VsdGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2xpYnotZGJnJywgcmVzdWx0bGlzdCkKKworICAgIEB0ZXN0Y2FzZSgxMjA2KQorICAgIGRlZiB0ZXN0X3NwZWNpZnlfcGtnZGF0YWRpcihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdvZS1wa2dkYXRhLXV0aWwgLXAgJXMgbG9va3VwLXBrZyBnbGliYycgJSBnZXRfYmJfdmFyKCdQS0dEQVRBX0RJUicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5vdXRwdXQsICdsaWJjNicpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3QvcHJzZXJ2aWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxODdmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3Byc2VydmljZS5weQpAQCAtMCwwICsxLDEyMSBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBkYXRldGltZQorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIKK2Zyb20gb2VxYS51dGlscy5kZWNvcmF0b3JzIGltcG9ydCB0ZXN0Y2FzZQorCitjbGFzcyBCaXRiYWtlUHJUZXN0cyhvZVNlbGZUZXN0KToKKworICAgIGRlZiBnZXRfcHJfdmVyc2lvbihzZWxmLCBwYWNrYWdlX25hbWUpOgorICAgICAgICBwa2dkYXRhX2RpciA9IGdldF9iYl92YXIoJ1BLR0RBVEFfRElSJykKKyAgICAgICAgcGFja2FnZV9kYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4ocGtnZGF0YV9kaXIsICdydW50aW1lJywgcGFja2FnZV9uYW1lKQorICAgICAgICBwYWNrYWdlX2RhdGEgPSBmdG9vbHMucmVhZF9maWxlKHBhY2thZ2VfZGF0YV9maWxlKQorICAgICAgICBmaW5kX3ByID0gcmUuc2VhcmNoKCJQS0dSOiByWzAtOV0rXC4oWzAtOV0rKSIsIHBhY2thZ2VfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmRfcHIsICJObyBQS0cgcmV2aXNpb24gZm91bmQgaW4gJXMiICUgcGFja2FnZV9kYXRhX2ZpbGUpCisgICAgICAgIHJldHVybiBpbnQoZmluZF9wci5ncm91cCgxKSkKKworICAgIGRlZiBnZXRfdGFza19zdGFtcChzZWxmLCBwYWNrYWdlX25hbWUsIHJlY2lwZV90YXNrKToKKyAgICAgICAgc3RhbXBkYXRhID0gZ2V0X2JiX3ZhcignU1RBTVAnLCB0YXJnZXQ9cGFja2FnZV9uYW1lKS5zcGxpdCgnLycpCisgICAgICAgIHByZWZpeCA9IHN0YW1wZGF0YVstMV0KKyAgICAgICAgcGFja2FnZV9zdGFtcHNfcGF0aCA9ICIvIi5qb2luKHN0YW1wZGF0YVs6LTFdKQorICAgICAgICBzdGFtcHMgPSBbXQorICAgICAgICBmb3Igc3RhbXAgaW4gb3MubGlzdGRpcihwYWNrYWdlX3N0YW1wc19wYXRoKToKKyAgICAgICAgICAgIGZpbmRfc3RhbXAgPSByZS5tYXRjaCgiJXNcLiVzXC4oW2EtejAtOV17MzJ9KSIgJSAocHJlZml4LCByZWNpcGVfdGFzayksIHN0YW1wKQorICAgICAgICAgICAgaWYgZmluZF9zdGFtcDoKKyAgICAgICAgICAgICAgICBzdGFtcHMuYXBwZW5kKGZpbmRfc3RhbXAuZ3JvdXAoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKHN0YW1wcykgPT0gMCwgbXNnPSJDb3VuZCBub3QgZmluZCBzdGFtcCBmb3IgdGFzayAlcyBmb3IgcmVjaXBlICVzIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsZW4oc3RhbXBzKSA+IDEsIG1zZz0iRm91bmQgbXVsdGlwbGUgJXMgc3RhbXBzIGZvciB0aGUgJXMgcmVjaXBlIGluIHRoZSAlcyBkaXJlY3RvcnkuIiAlIChyZWNpcGVfdGFzaywgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3N0YW1wc19wYXRoKSkKKyAgICAgICAgcmV0dXJuIHN0cihzdGFtcHNbMF0pCisKKyAgICBkZWYgaW5jcmVtZW50X3BhY2thZ2VfcHIoc2VsZiwgcGFja2FnZV9uYW1lKToKKyAgICAgICAgaW5jX2RhdGEgPSAiZG9fcGFja2FnZV9hcHBlbmQoKSB7XG5iYi5idWlsZC5leGVjX2Z1bmMoJ2RvX3Rlc3RfcHJzZXJ2JywgZClcbn1cbmRvX3Rlc3RfcHJzZXJ2KCkge1xuZWNobyBcIlRoZSBjdXJyZW50IGRhdGUgaXM6ICVzXCJcbn0iICUgZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkKKyAgICAgICAgc2VsZi53cml0ZV9yZWNpcGVpbmMocGFja2FnZV9uYW1lLCBpbmNfZGF0YSkKKyAgICAgICAgYml0YmFrZSgiLWNjbGVhbnNzdGF0ZSAlcyIgJSBwYWNrYWdlX25hbWUpCisgICAgICAgIHJlcyA9IGJpdGJha2UocGFja2FnZV9uYW1lLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuZGVsZXRlX3JlY2lwZWluYyhwYWNrYWdlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgMCwgbXNnPXJlcy5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiTk9URTogU3RhcnRlZCBQUlNlcnZlciB3aXRoIERCZmlsZSIgaW4gcmVzLm91dHB1dCwgbXNnPXJlcy5vdXRwdXQpCisKKyAgICBkZWYgY29uZmlnX3ByX3Rlc3RzKHNlbGYsIHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlPSdycG0nLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIGNvbmZpZ19wYWNrYWdlX2RhdGEgPSAnUEFDS0FHRV9DTEFTU0VTID0gInBhY2thZ2VfJXMiJyAlIHBhY2thZ2VfdHlwZQorICAgICAgICBzZWxmLndyaXRlX2NvbmZpZyhjb25maWdfcGFja2FnZV9kYXRhKQorICAgICAgICBjb25maWdfc2VydmVyX2RhdGEgPSAnUFJTRVJWX0hPU1QgPSAiJXMiJyAlIHByX3NvY2tldAorICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3NlcnZlcl9kYXRhKQorCisgICAgZGVmIHJ1bl90ZXN0X3ByX3NlcnZpY2Uoc2VsZiwgcGFja2FnZV9uYW1lLCBwYWNrYWdlX3R5cGU9J3JwbScsIHRyYWNrX3Rhc2s9J2RvX3BhY2thZ2UnLCBwcl9zb2NrZXQ9J2xvY2FsaG9zdDowJyk6CisgICAgICAgIHNlbGYuY29uZmlnX3ByX3Rlc3RzKHBhY2thZ2VfbmFtZSwgcGFja2FnZV90eXBlLCBwcl9zb2NrZXQpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc3RhbXBfMSA9IHNlbGYuZ2V0X3Rhc2tfc3RhbXAocGFja2FnZV9uYW1lLCB0cmFja190YXNrKQorCisgICAgICAgIHNlbGYuaW5jcmVtZW50X3BhY2thZ2VfcHIocGFja2FnZV9uYW1lKQorICAgICAgICBwcl8yID0gc2VsZi5nZXRfcHJfdmVyc2lvbihwYWNrYWdlX25hbWUpCisgICAgICAgIHN0YW1wXzIgPSBzZWxmLmdldF90YXNrX3N0YW1wKHBhY2thZ2VfbmFtZSwgdHJhY2tfdGFzaykKKworICAgICAgICBiaXRiYWtlKCItY2NsZWFuc3N0YXRlICVzIiAlIHBhY2thZ2VfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByXzIgLSBwcl8xID09IDEsICJTdGVwIGJldHdlZW4gc2FtZSBwa2cuIHJldmlzaW9uIGlzIGdyZWF0ZXIgdGhhbiAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0YW1wXzEgIT0gc3RhbXBfMiwgIkRpZmZlcmVudCBwa2cgcmV2LiBidXQgc2FtZSBzdGFtcDogJXMiICUgc3RhbXBfMSkKKworICAgIGRlZiBydW5fdGVzdF9wcl9leHBvcnRfaW1wb3J0KHNlbGYsIHBhY2thZ2VfbmFtZSwgcmVwbGFjZV9jdXJyZW50X2RiPVRydWUpOgorICAgICAgICBzZWxmLmNvbmZpZ19wcl90ZXN0cyhwYWNrYWdlX25hbWUpCisKKyAgICAgICAgc2VsZi5pbmNyZW1lbnRfcGFja2FnZV9wcihwYWNrYWdlX25hbWUpCisgICAgICAgIHByXzEgPSBzZWxmLmdldF9wcl92ZXJzaW9uKHBhY2thZ2VfbmFtZSkKKworICAgICAgICBleHBvcnRlZF9kYl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICdleHBvcnQuaW5jJykKKyAgICAgICAgZXhwb3J0X3Jlc3VsdCA9IHJ1bkNtZCgiYml0YmFrZS1wcnNlcnYtdG9vbCBleHBvcnQgJXMiICUgZXhwb3J0ZWRfZGJfcGF0aCwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cG9ydF9yZXN1bHQuc3RhdHVzLCAwLCBtc2c9IlBSIFNlcnZpY2UgZGF0YWJhc2UgZXhwb3J0IGZhaWxlZDogJXMiICUgZXhwb3J0X3Jlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgaWYgcmVwbGFjZV9jdXJyZW50X2RiOgorICAgICAgICAgICAgY3VycmVudF9kYl9wYXRoID0gb3MucGF0aC5qb2luKGdldF9iYl92YXIoJ1BFUlNJU1RFTlRfRElSJyksICdwcnNlcnYuc3FsaXRlMycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY3VycmVudF9kYl9wYXRoKSwgbXNnPSJQYXRoIHRvIGN1cnJlbnQgUFIgU2VydmljZSBkYXRhYmFzZSBpcyBpbnZhbGlkOiAlcyIgJSBjdXJyZW50X2RiX3BhdGgpCisgICAgICAgICAgICBvcy5yZW1vdmUoY3VycmVudF9kYl9wYXRoKQorCisgICAgICAgIGltcG9ydF9yZXN1bHQgPSBydW5DbWQoImJpdGJha2UtcHJzZXJ2LXRvb2wgaW1wb3J0ICVzIiAlIGV4cG9ydGVkX2RiX3BhdGgsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgb3MucmVtb3ZlKGV4cG9ydGVkX2RiX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3Jlc3VsdC5zdGF0dXMsIDAsIG1zZz0iUFIgU2VydmljZSBkYXRhYmFzZSBpbXBvcnQgZmFpbGVkOiAlcyIgJSBpbXBvcnRfcmVzdWx0Lm91dHB1dCkKKworICAgICAgICBzZWxmLmluY3JlbWVudF9wYWNrYWdlX3ByKHBhY2thZ2VfbmFtZSkKKyAgICAgICAgcHJfMiA9IHNlbGYuZ2V0X3ByX3ZlcnNpb24ocGFja2FnZV9uYW1lKQorCisgICAgICAgIGJpdGJha2UoIi1jY2xlYW5zc3RhdGUgJXMiICUgcGFja2FnZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJfMiAtIHByXzEgPT0gMSwgIlN0ZXAgYmV0d2VlbiBzYW1lIHBrZy4gcmV2aXNpb24gaXMgZ3JlYXRlciB0aGFuIDEiKQorCisgICAgQHRlc3RjYXNlKDkzMCkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X3JlcGxhY2VfZGIoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfZXhwb3J0X2ltcG9ydCgnbTQnKQorCisgICAgQHRlc3RjYXNlKDkzMSkKKyAgICBkZWYgdGVzdF9pbXBvcnRfZXhwb3J0X292ZXJyaWRlX2RiKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX2V4cG9ydF9pbXBvcnQoJ200JywgcmVwbGFjZV9jdXJyZW50X2RiPUZhbHNlKQorCisgICAgQHRlc3RjYXNlKDkzMikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2RlcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9wcl9zZXJ2aWNlKCdtNCcsICdycG0nLCAnZG9fcGFja2FnZScpCisKKyAgICBAdGVzdGNhc2UoOTM0KQorICAgIGRlZiB0ZXN0X3ByX3NlcnZpY2VfZGViX2FyY2hfZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ200JywgJ2RlYicsICdkb19wYWNrYWdlJykKKworICAgIEB0ZXN0Y2FzZSg5MzMpCisgICAgZGVmIHRlc3RfcHJfc2VydmljZV9pcGtfYXJjaF9kZXAoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfcHJfc2VydmljZSgnbTQnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNSkKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX3JwbV9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAncnBtJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNykKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2RlYl9hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnZGViJywgJ2RvX3BhY2thZ2UnKQorCisgICAgQHRlc3RjYXNlKDkzNikKKyAgICBkZWYgdGVzdF9wcl9zZXJ2aWNlX2lwa19hcmNoX2luZGVwKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3ByX3NlcnZpY2UoJ3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUnLCAnaXBrJywgJ2RvX3BhY2thZ2UnKQpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9yZWNpcGV0b29sLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNGFkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3JlY2lwZXRvb2wucHkKQEAgLTAsMCArMSw1NTQgQEAKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVybHBhcnNlCisKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBjcmVhdGVfdGVtcF9sYXllcgorZnJvbSBvZXFhLnV0aWxzLmRlY29yYXRvcnMgaW1wb3J0IHRlc3RjYXNlCitmcm9tIG9lcWEuc2VsZnRlc3QgaW1wb3J0IGRldnRvb2wKKworCit0ZW1wbGF5ZXJkaXIgPSBOb25lCisKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgZ2xvYmFsIHRlbXBsYXllcmRpcgorICAgIHRlbXBsYXllcmRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdyZWNpcGV0b29scWEnKQorICAgIGNyZWF0ZV90ZW1wX2xheWVyKHRlbXBsYXllcmRpciwgJ3NlbGZ0ZXN0cmVjaXBldG9vbCcpCisgICAgcnVuQ21kKCdiaXRiYWtlLWxheWVycyBhZGQtbGF5ZXIgJXMnICUgdGVtcGxheWVyZGlyKQorCisKK2RlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgIHJ1bkNtZCgnYml0YmFrZS1sYXllcnMgcmVtb3ZlLWxheWVyICVzJyAlIHRlbXBsYXllcmRpciwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgIHJ1bkNtZCgncm0gLXJmICVzJyAlIHRlbXBsYXllcmRpcikKKworCitjbGFzcyBSZWNpcGV0b29sQmFzZShkZXZ0b29sLkRldnRvb2xCYXNlKToKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wbGF5ZXJkaXIgPSB0ZW1wbGF5ZXJkaXIKKyAgICAgICAgc2VsZi50ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3JlY2lwZXRvb2xxYScpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAoc2VsZi50ZW1wZGlyKQorICAgICAgICBzZWxmLnRlc3RmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3RmaWxlJykKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1Rlc3QgZmlsZVxuJykKKworICAgIGRlZiB0ZWFyRG93bkxvY2FsKHNlbGYpOgorICAgICAgICBydW5DbWQoJ3JtIC1yZiAlcy9yZWNpcGVzLSonICUgc2VsZi50ZW1wbGF5ZXJkaXIpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGNtZChzZWxmLCBjbWQsIHRlc3RyZWNpcGUsIGV4cGVjdGVkZmlsZXMsIGV4cGVjdGVkbGluZXM9Tm9uZSk6CisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisKKyAgICAgICAgIyBDaGVjayB0aGUgYmJhcHBlbmQgd2FzIGNyZWF0ZWQgYW5kIGFwcGxpZXMgcHJvcGVybHkKKyAgICAgICAgcmVjaXBlZmlsZSA9IGdldF9iYl92YXIoJ0ZJTEUnLCB0ZXN0cmVjaXBlKQorICAgICAgICBiYmFwcGVuZGZpbGUgPSBzZWxmLl9jaGVja19iYmFwcGVuZCh0ZXN0cmVjaXBlLCByZWNpcGVmaWxlLCBzZWxmLnRlbXBsYXllcmRpcikKKworICAgICAgICAjIENoZWNrIHRoZSBiYmFwcGVuZCBjb250ZW50cworICAgICAgICBpZiBleHBlY3RlZGxpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJiYXBwZW5kZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRsaW5lcywgZi5yZWFkbGluZXMoKSwgIkV4cGVjdGVkIGxpbmVzIGFyZSBub3QgcHJlc2VudCBpbiAlcyIgJSBiYmFwcGVuZGZpbGUpCisKKyAgICAgICAgIyBDaGVjayBmaWxlIHdhcyBjb3BpZWQKKyAgICAgICAgZmlsZXNkaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGJiYXBwZW5kZmlsZSksIHRlc3RyZWNpcGUpCisgICAgICAgIGZvciBleHBlY3RlZGZpbGUgaW4gZXhwZWN0ZWRmaWxlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZmlsZXNkaXIsIGV4cGVjdGVkZmlsZSkpLCAnRXhwZWN0ZWQgZmlsZSAlcyB0byBiZSBjb3BpZWQgbmV4dCB0byBiYmFwcGVuZCwgYnV0IGl0IHdhc25cJ3QnICUgZXhwZWN0ZWRmaWxlKQorCisgICAgICAgICMgQ2hlY2sgbm8gb3RoZXIgZmlsZXMgY3JlYXRlZAorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhmaWxlc2Rpcik6CisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBjcmVhdGVkZmlsZXMuYXBwZW5kKG9zLnBhdGgucmVscGF0aChvcy5wYXRoLmpvaW4ocm9vdCwgZiksIGZpbGVzZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvcnRlZChjcmVhdGVkZmlsZXMpLCBzb3J0ZWQoZXhwZWN0ZWRmaWxlcykpCisKKyAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZSwgcmVzdWx0Lm91dHB1dAorCisKK2NsYXNzIFJlY2lwZXRvb2xUZXN0cyhSZWNpcGV0b29sQmFzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZGF0YSBpbiBzaGxpYnMvcGtnZGF0YQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2VsZnRlc3QiKQorICAgICAgICBsb2dnZXIuaW5mbygnUnVubmluZyBiaXRiYWtlIHRvIGdlbmVyYXRlIHBrZ2RhdGEnKQorICAgICAgICBiaXRiYWtlKCctYyBwYWNrYWdlZGF0YSBiYXNlLWZpbGVzIGNvcmV1dGlscyBidXN5Ym94IHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAjIFNob3VsZG4ndCBsZWF2ZSBhbnkgdHJhY2VzIG9mIHRoaXMgYXJ0aWZpY2lhbCByZWNpcGUgYmVoaW5kCisgICAgICAgIGJpdGJha2UoJy1jIGNsZWFuc3N0YXRlIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScpCisKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUsIG9wdGlvbnMpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ZhaWwoc2VsZiwgZGVzdGZpbGUsIG5ld2ZpbGUsIGNoZWNrZXJyb3IpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRmaWxlICVzICVzICVzJyAlIChzZWxmLnRlbXBsYXllcmRpciwgZGVzdGZpbGUsIG5ld2ZpbGUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZXN1bHQuc3RhdHVzLCAwLCAnQ29tbWFuZCAiJXMiIHNob3VsZCBoYXZlIGZhaWxlZCBidXQgZGlkblwndCcgJSBjbWQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGZvciBlcnJvcnN0ciBpbiBjaGVja2Vycm9yOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlcnJvcnN0ciwgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTc3KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9iYXNpYyhzZWxmKToKKyAgICAgICAgIyBCYXNpYyB0ZXN0CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdiYXNlLWZpbGVzJywgJy9ldGMvbW90ZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ21vdGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODMpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2ludmFsaWQoc2VsZik6CisgICAgICAgICMgVGVzdCBzb21lIGNvbW1hbmRzIHRoYXQgc2hvdWxkIGVycm9yCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy9wYXNzd2QnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3Bhc3N3ZCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnLCAndXNlcmFkZCcsICdleHRyYXVzZXJzJ10pCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL2V0Yy90aW1lc3RhbXAnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZXRjL3RpbWVzdGFtcCBjYW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIHRvb2wnXSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvZGV2L2NvbnNvbGUnLCBzZWxmLnRlc3RmaWxlLCBbJ0VSUk9SOiAvZGV2L2NvbnNvbGUgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyB0b29sJ10pCisKKyAgICBAdGVzdGNhc2UoMTE3NikKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWx0ZXJuYXRpdmVzKHNlbGYpOgorICAgICAgICAjIE5vdyB0cnkgd2l0aCBhIGZpbGUgd2Uga25vdyBzaG91bGQgYmUgYW4gYWx0ZXJuYXRpdmUKKyAgICAgICAgIyAodGhpcyBpcyB2ZXJ5IG11Y2ggYSBmYWtlIGV4YW1wbGUsIGJ1dCBvbmUgd2Uga25vdyBpcyByZWxpYWJseSBhbiBhbHRlcm5hdGl2ZSkKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9mYWlsKCcvYmluL2xzJywgc2VsZi50ZXN0ZmlsZSwgWydFUlJPUjogRmlsZSAvYmluL2xzIGlzIGFuIGFsdGVybmF0aXZlIHBvc3NpYmx5IHByb3ZpZGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVjaXBlczonLCAnY29yZXV0aWxzJywgJ2J1c3lib3gnXSkKKyAgICAgICAgY29yZWJhc2UgPSBnZXRfYmJfdmFyKCdDT1JFQkFTRScpCisgICAgICAgICMgTmVlZCBhIHRlc3QgZmlsZSAtIHNob3VsZCBiZSBleGVjdXRhYmxlCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly8lcyJcbicgJSB0ZXN0ZmlsZTJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnY29yZXV0aWxzJywgJy9iaW4vbHMnLCB0ZXN0ZmlsZTIsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgTm93IHRyeSBiYmFwcGVuZGluZyB0aGUgc2FtZSBmaWxlIGFnYWluLCBjb250ZW50cyBzaG91bGQgbm90IGNoYW5nZQorICAgICAgICBiYmFwcGVuZGZpbGUsIF8gPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdjb3JldXRpbHMnLCAnL2Jpbi9scycsIHNlbGYudGVzdGZpbGUsICctciBjb3JldXRpbHMnLCBleHBlY3RlZGxpbmVzLCBbdGVzdGZpbGUybmFtZV0pCisgICAgICAgICMgQnV0IGZpbGUgc2hvdWxkIGhhdmUKKyAgICAgICAgY29waWVkZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgJ2NvcmV1dGlscycsIHRlc3RmaWxlMm5hbWUpCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgnZGlmZiAtcSAlcyAlcycgJSAodGVzdGZpbGUyLCBjb3BpZWRmaWxlKSwgaWdub3JlX3N0YXR1cz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsICdOZXcgZmlsZSBzaG91bGQgaGF2ZSBiZWVuIGNvcGllZCBidXQgd2FzIG5vdCAlcycgJSByZXN1bHQub3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExNzgpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX2JpbmFyeShzZWxmKToKKyAgICAgICAgIyBUcnkgYXBwZW5kaW5nIGEgYmluYXJ5IGZpbGUKKyAgICAgICAgIyAvYmluL2xzIGNhbiBiZSBhIHN5bWxpbmsgdG8gL3Vzci9iaW4vbHMKKyAgICAgICAgbHMgPSBvcy5wYXRoLnJlYWxwYXRoKCIvYmluL2xzIikKKyAgICAgICAgcmVzdWx0ID0gcnVuQ21kKCdyZWNpcGV0b29sIGFwcGVuZGZpbGUgJXMgL2Jpbi9scyAlcyAtciBjb3JldXRpbHMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBscykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1dBUk5JTkc6ICcsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGEgYmluYXJ5JywgcmVzdWx0Lm91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTczKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGQoc2VsZik6CisgICAgICAgIGNvcmViYXNlID0gZ2V0X2JiX3ZhcignQ09SRUJBU0UnKQorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zb21ldGhpbmdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zb21ldGhpbmcnLCBzZWxmLnRlc3RmaWxlLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKyAgICAgICAgIyBUcnkgYWRkaW5nIGFub3RoZXIgZmlsZSwgdGhpcyB0aW1lIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBpcyBleGVjdXRhYmxlCisgICAgICAgICMgKHNvIHdlJ3JlIHRlc3RpbmcgdGhhdCwgcGx1cyBtb2RpZnlpbmcgYW4gZXhpc3RpbmcgYmJhcHBlbmQpCisgICAgICAgIHRlc3RmaWxlMiA9IG9zLnBhdGguam9pbihjb3JlYmFzZSwgJ29lLWluaXQtYnVpbGQtZW52JykKKyAgICAgICAgdGVzdGZpbGUybmFtZSA9IG9zLnBhdGguYmFzZW5hbWUodGVzdGZpbGUyKQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSBcXFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgZmlsZTovLyVzIFxcXG4nICUgdGVzdGZpbGUybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgICAgICAgICAgIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZCgpIHtcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdGVzdGZpbGUgJHtEfSR7ZGF0YWRpcn0vc29tZXRoaW5nXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJXMgJHtEfSR7ZGF0YWRpcn0vc2NyaXB0bmFtZVxuJyAlIHRlc3RmaWxlMm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ25ldGJhc2UnLCAnL3Vzci9zaGFyZS9zY3JpcHRuYW1lJywgdGVzdGZpbGUyLCAnLXIgbmV0YmFzZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnLCB0ZXN0ZmlsZTJuYW1lXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9hZGRfYmluZGlyKHNlbGYpOgorICAgICAgICAjIFRyeSBhcmJpdHJhcnkgZmlsZSBhZGQgdG8gYSByZWNpcGUsIHRoaXMgdGltZSB0byBhIGxvY2F0aW9uIHN1Y2ggdGhhdCBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGV4ZWN1dGFibGUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2JpbmRpcn0vc2VsZnRlc3QtcmVjaXBldG9vbC10ZXN0YmluXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICd9XG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCduZXRiYXNlJywgJy91c3IvYmluL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtdGVzdGJpbicsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE3NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfYWRkX21hY2hpbmUoc2VsZik6CisgICAgICAgICMgVHJ5IGFyYml0cmFyeSBmaWxlIGFkZCB0byBhIHJlY2lwZSwgdGhpcyB0aW1lIHRvIGEgbG9jYXRpb24gc3VjaCB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgZXhlY3V0YWJsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUklfYXBwZW5kX215bWFjaGluZSA9ICIgZmlsZTovL3Rlc3RmaWxlIlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdkb19pbnN0YWxsX2FwcGVuZF9teW1hY2hpbmUoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NvbWV0aGluZ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnbmV0YmFzZScsICcvdXNyL3NoYXJlL3NvbWV0aGluZycsIHNlbGYudGVzdGZpbGUsICctciBuZXRiYXNlIC1tIG15bWFjaGluZScsIGV4cGVjdGVkbGluZXMsIFsnbXltYWNoaW5lL3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTg0KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9vcmlnKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBhbmQgaW4gZG9faW5zdGFsbCB3aXRoIHRoZSBzYW1lIG5hbWUKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTkxKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV90b2RpcihzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgYW5kIGluIGRvX2luc3RhbGwgd2l0aCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gZmlsZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpcicsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS10b2RpciddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcmVuYW1lZChzZWxmKToKKyAgICAgICAgIyBBIGZpbGUgdGhhdCdzIGluIFNSQ19VUkkgd2l0aCBhIGRpZmZlcmVudCBuYW1lIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWxlCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXJlbmFtZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydmaWxlMSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE5MCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3ViZGlyKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gU1JDX1VSSSBpbiBhIHN1YmRpcgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zdWJkaXInLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc3JjX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGFzIGEgZ2xvYgorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGVcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zcmMtZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4MSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfaW5zdF9nbG9iKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgaW4gZG9faW5zdGFsbCBhcyBhIGdsb2IKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nXQorICAgICAgICBfLCBvdXRwdXQgPSBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRmaWxlKCdzZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUnLCAnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC1nbG9iZmlsZScsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWdsb2JmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X3RvZGlyX2dsb2Ioc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbiBkb19pbnN0YWxsIGFzIGEgZ2xvYiB3aXRoIGRlc3RpbmF0aW9uIGFzIGEgZGlyZWN0b3J5CisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtdG9kaXItZ2xvYmZpbGUnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWydzZWxmdGVzdC1yZXBsYWNlbWUtaW5zdC10b2Rpci1nbG9iZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdXQVJOSU5HOiAnLCBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4NSkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfcGF0Y2goc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBhZGRlZCBieSBhIHBhdGNoIGluIFNSQ19VUkkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtzeXNjb25mZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtcGF0Y2hlZFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy9ldGMvc2VsZnRlc3QtcmVwbGFjZW1lLXBhdGNoZWQnLCBzZWxmLnRlc3RmaWxlLCAnJywgZXhwZWN0ZWRsaW5lcywgWyd0ZXN0ZmlsZSddKQorICAgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdXQVJOSU5HOiAnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGQtZmlsZS5wYXRjaCcsIGxpbmUsICdVbmV4cGVjdGVkIHdhcm5pbmcgZm91bmQgaW4gb3V0cHV0OlxuJXMnICUgbGluZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdQYXRjaCB3YXJuaW5nIG5vdCBmb3VuZCBpbiBvdXRwdXQ6XG4lcycgJSBvdXRwdXQpCisKKyAgICBAdGVzdGNhc2UoMTE4OCkKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZGZpbGVfc2NyaXB0KHNlbGYpOgorICAgICAgICAjIE5vdywgYSBmaWxlIHRoYXQncyBpbiBTUkNfVVJJIGJ1dCBpbnN0YWxsZWQgYnkgYSBzY3JpcHQgKHNvIG5vIG1lbnRpb24gaW4gZG9faW5zdGFsbCkKKyAgICAgICAgZXhwZWN0ZWRsaW5lcyA9IFsnRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vJHtQTn06IlxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTUkNfVVJJICs9ICJmaWxlOi8vdGVzdGZpbGUiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvX2luc3RhbGxfYXBwZW5kKCkge1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn1cbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90ZXN0ZmlsZSAke0R9JHtkYXRhZGlyfS9zZWxmdGVzdC1yZXBsYWNlbWUtc2NyaXB0ZWRcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ31cbiddCisgICAgICAgIF8sIG91dHB1dCA9IHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGUoJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsICcvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1zY3JpcHRlZCcsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3Rlc3RmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1dBUk5JTkc6ICcsIG91dHB1dCkKKworICAgIEB0ZXN0Y2FzZSgxMTgwKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9pbnN0X2Z1bmMoc2VsZik6CisgICAgICAgICMgQSBmaWxlIHRoYXQncyBpbnN0YWxsZWQgZnJvbSBhIGZ1bmN0aW9uIGNhbGxlZCBieSBkb19pbnN0YWxsCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLWluc3QtZnVuYycsIHNlbGYudGVzdGZpbGUsICcnLCBleHBlY3RlZGxpbmVzLCBbJ3NlbGZ0ZXN0LXJlcGxhY2VtZS1pbnN0LWZ1bmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignV0FSTklORzogJywgb3V0cHV0KQorCisgICAgQHRlc3RjYXNlKDExODYpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRmaWxlX3Bvc3RpbnN0YWxsKHNlbGYpOgorICAgICAgICAjIEEgZmlsZSB0aGF0J3MgY3JlYXRlZCBieSBhIHBvc3RpbnN0YWxsIHNjcmlwdCAoYW5kIGV4cGxpY2l0bHkgbWVudGlvbmVkIGluIGl0KQorICAgICAgICAjIEZpcnN0IHRyeSB3aXRob3V0IHNwZWNpZnlpbmcgcmVjaXBlCisgICAgICAgIHNlbGYuX3RyeV9yZWNpcGV0b29sX2FwcGVuZGZpbGVfZmFpbCgnL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QnLCBzZWxmLnRlc3RmaWxlLCBbJ0ZpbGUgL3Vzci9zaGFyZS9zZWxmdGVzdC1yZXBsYWNlbWUtcG9zdGluc3QgbWF5IGJlIHdyaXR0ZW4gb3V0IGluIGEgcHJlL3Bvc3RpbnN0YWxsIHNjcmlwdCBvZiB0aGUgZm9sbG93aW5nIHJlY2lwZXM6JywgJ3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZSddKQorICAgICAgICAjIE5vdyBzcGVjaWZ5IHJlY2lwZQorICAgICAgICBleHBlY3RlZGxpbmVzID0gWydGSUxFU0VYVFJBUEFUSFNfcHJlcGVuZCA6PSAiJHtUSElTRElSfS8ke1BOfToiXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NSQ19VUkkgKz0gImZpbGU6Ly90ZXN0ZmlsZSJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9faW5zdGFsbF9hcHBlbmQoKSB7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfVxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Rlc3RmaWxlICR7RH0ke2RhdGFkaXJ9L3NlbGZ0ZXN0LXJlcGxhY2VtZS1wb3N0aW5zdFxuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnfVxuJ10KKyAgICAgICAgXywgb3V0cHV0ID0gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kZmlsZSgnc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlJywgJy91c3Ivc2hhcmUvc2VsZnRlc3QtcmVwbGFjZW1lLXBvc3RpbnN0Jywgc2VsZi50ZXN0ZmlsZSwgJy1yIHNlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZScsIGV4cGVjdGVkbGluZXMsIFsndGVzdGZpbGUnXSkKKworICAgIEB0ZXN0Y2FzZSgxMTc5KQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV9leHRsYXllcihzZWxmKToKKyAgICAgICAgIyBUcnkgY3JlYXRpbmcgYSBiYmFwcGVuZCBpbiBhIGxheWVyIHRoYXQncyBub3QgaW4gYmJsYXllcnMuY29uZiBhbmQgaGFzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICAgICAgICBleHR0ZW1wbGF5ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnZXh0bGF5ZXInKQorICAgICAgICBzZWxmLl9jcmVhdGVfdGVtcF9sYXllcihleHR0ZW1wbGF5ZXJkaXIsIEZhbHNlLCAnb2VzZWxmdGVzdGV4dGxheWVyJywgcmVjaXBlcGF0aHNwZWM9J21ldGFkYXRhL3JlY2lwZXMvcmVjaXBlcy0qLyonKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvdXNyL3NoYXJlL3NlbGZ0ZXN0LXJlcGxhY2VtZS1vcmlnICVzJyAlIChleHR0ZW1wbGF5ZXJkaXIsIHNlbGYudGVzdGZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBjcmVhdGVkZmlsZXMgPSBbXQorICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhleHR0ZW1wbGF5ZXJkaXIpOgorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgY3JlYXRlZGZpbGVzLmFwcGVuZChvcy5wYXRoLnJlbHBhdGgob3MucGF0aC5qb2luKHJvb3QsIGYpLCBleHR0ZW1wbGF5ZXJkaXIpKQorICAgICAgICBjcmVhdGVkZmlsZXMucmVtb3ZlKCdjb25mL2xheWVyLmNvbmYnKQorICAgICAgICBleHBlY3RlZGZpbGVzID0gWydtZXRhZGF0YS9yZWNpcGVzL3JlY2lwZXMtdGVzdC9zZWxmdGVzdC1yZWNpcGV0b29sLWFwcGVuZGZpbGUvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlLmJiYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWV0YWRhdGEvcmVjaXBlcy9yZWNpcGVzLXRlc3Qvc2VsZnRlc3QtcmVjaXBldG9vbC1hcHBlbmRmaWxlL3NlbGZ0ZXN0LXJlY2lwZXRvb2wtYXBwZW5kZmlsZS9zZWxmdGVzdC1yZXBsYWNlbWUtb3JpZyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGNyZWF0ZWRmaWxlcyksIHNvcnRlZChleHBlY3RlZGZpbGVzKSkKKworICAgIEB0ZXN0Y2FzZSgxMTkyKQorICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kZmlsZV93aWxkY2FyZChzZWxmKToKKworICAgICAgICBkZWYgdHJ5X2FwcGVuZGZpbGVfd2Mob3B0aW9ucyk6CisgICAgICAgICAgICByZXN1bHQgPSBydW5DbWQoJ3JlY2lwZXRvb2wgYXBwZW5kZmlsZSAlcyAvZXRjL3Byb2ZpbGUgJXMgJXMnICUgKHNlbGYudGVtcGxheWVyZGlyLCBzZWxmLnRlc3RmaWxlLCBvcHRpb25zKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1RyYWNlYmFjaycsIHJlc3VsdC5vdXRwdXQpCisgICAgICAgICAgICBiYmFwcGVuZGZpbGUgPSBOb25lCisgICAgICAgICAgICBmb3Igcm9vdCwgXywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnRlbXBsYXllcmRpcik6CisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIGYuZW5kc3dpdGgoJy5iYmFwcGVuZCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmJhcHBlbmRmaWxlID0gZgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBiYmFwcGVuZGZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdObyBiYmFwcGVuZCBmaWxlIGNyZWF0ZWQnKQorICAgICAgICAgICAgcnVuQ21kKCdybSAtcmYgJXMvcmVjaXBlcy0qJyAlIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICAgICAgcmV0dXJuIGJiYXBwZW5kZmlsZQorCisgICAgICAgICMgQ2hlY2sgd2l0aG91dCB3aWxkY2FyZCBvcHRpb24KKyAgICAgICAgcmVjaXBlZm4gPSBvcy5wYXRoLmJhc2VuYW1lKGdldF9iYl92YXIoJ0ZJTEUnLCAnYmFzZS1maWxlcycpKQorICAgICAgICBmaWxlbmFtZSA9IHRyeV9hcHBlbmRmaWxlX3djKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVuYW1lLCByZWNpcGVmbi5yZXBsYWNlKCcuYmInLCAnLmJiYXBwZW5kJykpCisgICAgICAgICMgTm93IGNoZWNrIHdpdGggd2lsZGNhcmQgb3B0aW9uCisgICAgICAgIGZpbGVuYW1lID0gdHJ5X2FwcGVuZGZpbGVfd2MoJy13JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgcmVjaXBlZm4uc3BsaXQoJ18nKVswXSArICdfJS5iYmFwcGVuZCcpCisKKyAgICBAdGVzdGNhc2UoMTE5MykKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2NyZWF0ZShzZWxmKToKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbG9ncm90YXRlXzMuOC43LmJiJykKKyAgICAgICAgc3JjdXJpID0gJ2h0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0zLjguNy50YXIuZ3onCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSkKKyAgICAgICAgY2hlY2t2YXJzID0ge30KKyAgICAgICAgY2hlY2t2YXJzWydMSUNFTlNFJ10gPSAnR1BMdjInCisgICAgICAgIGNoZWNrdmFyc1snTElDX0ZJTEVTX0NIS1NVTSddID0gJ2ZpbGU6Ly9DT1BZSU5HO21kNT0xODgxMDY2OWYxM2I4NzM0ODQ1OWU2MTFkMzFhYjc2MCcKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJJ10gPSAnaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvby9sb2dyb3RhdGUvbG9ncm90YXRlLSR7UFZ9LnRhci5neicKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW21kNXN1bV0nXSA9ICc5OWUwODUwM2VmMjRjM2UyZTNmZjc0Y2M1ZjNiZTIxMycKKyAgICAgICAgY2hlY2t2YXJzWydTUkNfVVJJW3NoYTI1NnN1bV0nXSA9ICdmNmJhNjkxZjQwZTMwZTY0MGVmYTI3NTJjMWY5NDk5YTNmOTczODI1NzY2MDk5NGRlNzBhNDVmZTAwZDEyYjY0JworICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIFtdKQorCisgICAgQHRlc3RjYXNlKDExOTQpCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9jcmVhdGVfZ2l0KHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBkYXRhIGluIHNobGlicy9wa2dkYXRhCisgICAgICAgIGJpdGJha2UoJ2xpYnBuZyBwYW5nbyBsaWJ4MTEgbGlieGV4dCBqcGVnJykKKyAgICAgICAgIyBUcnkgYWRkaW5nIGEgcmVjaXBlCisgICAgICAgIHRlbXBzcmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnc3JjdHJlZScpCisgICAgICAgIG9zLm1ha2VkaXJzKHRlbXBzcmMpCisgICAgICAgIHJlY2lwZWZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLCAnbGlibWF0Y2hib3guYmInKQorICAgICAgICBzcmN1cmkgPSAnZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGlibWF0Y2hib3gnCisgICAgICAgIHJlc3VsdCA9IHJ1bkNtZCgncmVjaXBldG9vbCBjcmVhdGUgLW8gJXMgJXMgLXggJXMnICUgKHJlY2lwZWZpbGUsIHNyY3VyaSwgdGVtcHNyYykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZWNpcGVmaWxlKSwgJ3JlY2lwZXRvb2wgZGlkIG5vdCBjcmVhdGUgcmVjaXBlIGZpbGU7IG91dHB1dDpcbiVzJyAlIHJlc3VsdC5vdXRwdXQpCisgICAgICAgIGNoZWNrdmFycyA9IHt9CisgICAgICAgIGNoZWNrdmFyc1snTElDRU5TRSddID0gJ0xHUEx2Mi4xJworICAgICAgICBjaGVja3ZhcnNbJ0xJQ19GSUxFU19DSEtTVU0nXSA9ICdmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQnCisgICAgICAgIGNoZWNrdmFyc1snUyddID0gJyR7V09SS0RJUn0vZ2l0JworICAgICAgICBjaGVja3ZhcnNbJ1BWJ10gPSAnMS4wK2dpdCR7U1JDUFZ9JworICAgICAgICBjaGVja3ZhcnNbJ1NSQ19VUkknXSA9IHNyY3VyaQorICAgICAgICBjaGVja3ZhcnNbJ0RFUEVORFMnXSA9ICdsaWJwbmcgcGFuZ28gbGlieDExIGxpYnhleHQganBlZycKKyAgICAgICAgaW5oZXJpdHMgPSBbJ2F1dG90b29scycsICdwa2djb25maWcnXQorICAgICAgICBzZWxmLl90ZXN0X3JlY2lwZV9jb250ZW50cyhyZWNpcGVmaWxlLCBjaGVja3ZhcnMsIGluaGVyaXRzKQorCisKK2NsYXNzIFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKFJlY2lwZXRvb2xCYXNlKToKKyAgICBkZWYgX3RyeV9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUsIG9wdGlvbnMsIGV4cGVjdGVkbGluZXMsIGV4cGVjdGVkZmlsZXMpOgorICAgICAgICBjbWQgPSAncmVjaXBldG9vbCBhcHBlbmRzcmNmaWxlICVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgbmV3ZmlsZSwgZGVzdGZpbGUpCisgICAgICAgIHJldHVybiBzZWxmLl90cnlfcmVjaXBldG9vbF9hcHBlbmRjbWQoY21kLCB0ZXN0cmVjaXBlLCBleHBlY3RlZGZpbGVzLCBleHBlY3RlZGxpbmVzKQorCisgICAgZGVmIF90cnlfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRsaW5lcz1Ob25lLCBleHBlY3RlZGZpbGVzPU5vbmUsIGRlc3RkaXI9Tm9uZSwgb3B0aW9ucz0nJyk6CisKKyAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgIG9wdGlvbnMgKz0gJyAtRCAlcycgJSBkZXN0ZGlyCisKKyAgICAgICAgaWYgZXhwZWN0ZWRmaWxlcyBpcyBOb25lOgorICAgICAgICAgICAgZXhwZWN0ZWRmaWxlcyA9IFtvcy5wYXRoLmJhc2VuYW1lKGYpIGZvciBmIGluIG5ld2ZpbGVzXQorCisgICAgICAgIGNtZCA9ICdyZWNpcGV0b29sIGFwcGVuZHNyY2ZpbGVzICVzICVzICVzICVzJyAlIChvcHRpb25zLCBzZWxmLnRlbXBsYXllcmRpciwgdGVzdHJlY2lwZSwgJyAnLmpvaW4obmV3ZmlsZXMpKQorICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kY21kKGNtZCwgdGVzdHJlY2lwZSwgZXhwZWN0ZWRmaWxlcywgZXhwZWN0ZWRsaW5lcykKKworICAgIGRlZiBfdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9mYWlsKHNlbGYsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlLCBjaGVja2Vycm9yKToKKyAgICAgICAgY21kID0gJ3JlY2lwZXRvb2wgYXBwZW5kc3JjZmlsZSAlcyAlcyAlcyAlcycgJSAoc2VsZi50ZW1wbGF5ZXJkaXIsIHRlc3RyZWNpcGUsIG5ld2ZpbGUsIGRlc3RmaWxlIG9yICcnKQorICAgICAgICByZXN1bHQgPSBydW5DbWQoY21kLCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmVzdWx0LnN0YXR1cywgMCwgJ0NvbW1hbmQgIiVzIiBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG5cJ3QnICUgY21kKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdUcmFjZWJhY2snLCByZXN1bHQub3V0cHV0KQorICAgICAgICBmb3IgZXJyb3JzdHIgaW4gY2hlY2tlcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3JzdHIsIHJlc3VsdC5vdXRwdXQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfZmlyc3RfZmlsZV91cmkocmVjaXBlKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmaXJzdCBmaWxlOi8vIGluIFNSQ19VUkkgZm9yIHRoZSBzcGVjaWZpZWQgcmVjaXBlLicnJworICAgICAgICBzcmNfdXJpID0gZ2V0X2JiX3ZhcignU1JDX1VSSScsIHJlY2lwZSkuc3BsaXQoKQorICAgICAgICBmb3IgdXJpIGluIHNyY191cmk6CisgICAgICAgICAgICBwID0gdXJscGFyc2UudXJscGFyc2UodXJpKQorICAgICAgICAgICAgaWYgcC5zY2hlbWUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBwLm5ldGxvYyArIHAucGF0aAorCisgICAgZGVmIF90ZXN0X2FwcGVuZHNyY2ZpbGUoc2VsZiwgdGVzdHJlY2lwZSwgZmlsZW5hbWU9Tm9uZSwgZGVzdGRpcj1Ob25lLCBoYXNfc3JjX3VyaT1UcnVlLCBzcmNkaXI9Tm9uZSwgbmV3ZmlsZT1Ob25lLCBvcHRpb25zPScnKToKKyAgICAgICAgaWYgbmV3ZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgbmV3ZmlsZSA9IHNlbGYudGVzdGZpbGUKKworICAgICAgICBpZiBzcmNkaXI6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IG9zLnBhdGguam9pbihzcmNkaXIsIGRlc3RkaXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3N1YmRpciA9IHNyY2RpcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3B0aW9ucyArPSAiIC1XIgorICAgICAgICAgICAgZXhwZWN0ZWRfc3ViZGlyID0gZGVzdGRpcgorCisgICAgICAgIGlmIGZpbGVuYW1lOgorICAgICAgICAgICAgaWYgZGVzdGRpcjoKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdHBhdGggPSBmaWxlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG5ld2ZpbGUpCisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIGRlc3RwYXRoID0gZGVzdGRpciArIG9zLnNlcAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZXN0cGF0aCA9ICcuJyArIG9zLnNlcAorCisgICAgICAgIGV4cGVjdGVkbGluZXMgPSBbJ0ZJTEVTRVhUUkFQQVRIU19wcmVwZW5kIDo9ICIke1RISVNESVJ9LyR7UE59OiJcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKyAgICAgICAgaWYgaGFzX3NyY191cmk6CisgICAgICAgICAgICB1cmkgPSAnZmlsZTovLyVzJyAlIGZpbGVuYW1lCisgICAgICAgICAgICBpZiBleHBlY3RlZF9zdWJkaXI6CisgICAgICAgICAgICAgICAgdXJpICs9ICc7c3ViZGlyPSVzJyAlIGV4cGVjdGVkX3N1YmRpcgorICAgICAgICAgICAgZXhwZWN0ZWRsaW5lc1swOjBdID0gWydTUkNfVVJJICs9ICIlcyJcbicgJSB1cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJ10KKworICAgICAgICByZXR1cm4gc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCBuZXdmaWxlLCBkZXN0cGF0aCwgb3B0aW9ucywgZXhwZWN0ZWRsaW5lcywgW2ZpbGVuYW1lXSkKKworICAgIGRlZiBfdGVzdF9hcHBlbmRzcmNmaWxlcyhzZWxmLCB0ZXN0cmVjaXBlLCBuZXdmaWxlcywgZXhwZWN0ZWRmaWxlcz1Ob25lLCBkZXN0ZGlyPU5vbmUsIG9wdGlvbnM9JycpOgorICAgICAgICBpZiBleHBlY3RlZGZpbGVzIGlzIE5vbmU6CisgICAgICAgICAgICBleHBlY3RlZGZpbGVzID0gW29zLnBhdGguYmFzZW5hbWUobikgZm9yIG4gaW4gbmV3ZmlsZXNdCisKKyAgICAgICAgc2VsZi5fdHJ5X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXModGVzdHJlY2lwZSwgbmV3ZmlsZXMsIGV4cGVjdGVkZmlsZXM9ZXhwZWN0ZWRmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPW9wdGlvbnMpCisKKyAgICAgICAgc3JjX3VyaSA9IGdldF9iYl92YXIoJ1NSQ19VUkknLCB0ZXN0cmVjaXBlKS5zcGxpdCgpCisgICAgICAgIGZvciBmIGluIGV4cGVjdGVkZmlsZXM6CisgICAgICAgICAgICBpZiBkZXN0ZGlyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZpbGU6Ly8lcztzdWJkaXI9JXMnICUgKGYsIGRlc3RkaXIpLCBzcmNfdXJpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmaWxlOi8vJXMnICUgZiwgc3JjX3VyaSkKKworICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBmaWxlc2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmJhcHBlbmRmaWxlKSwgdGVzdHJlY2lwZSkKKyAgICAgICAgZmlsZXNleHRyYXBhdGhzID0gZ2V0X2JiX3ZhcignRklMRVNFWFRSQVBBVEhTJywgdGVzdHJlY2lwZSkuc3BsaXQoJzonKQorICAgICAgICBzZWxmLmFzc2VydEluKGZpbGVzZGlyLCBmaWxlc2V4dHJhcGF0aHMpCisKKworY2xhc3MgUmVjaXBldG9vbEFwcGVuZHNyY1Rlc3RzKFJlY2lwZXRvb2xBcHBlbmRzcmNCYXNlKToKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsICdhLWZpbGUnKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2Jhc2ljX3dpbGRjYXJkKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgb3B0aW9ucz0nLXcnKQorICAgICAgICByZWNpcGVmaWxlID0gZ2V0X2JiX3ZhcignRklMRScsIHRlc3RyZWNpcGUpCisgICAgICAgIGJiYXBwZW5kZmlsZSA9IHNlbGYuX2NoZWNrX2JiYXBwZW5kKHRlc3RyZWNpcGUsIHJlY2lwZWZpbGUsIHNlbGYudGVtcGxheWVyZGlyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoYmJhcHBlbmRmaWxlKSwgJyVzXyUlLmJiYXBwZW5kJyAlIHRlc3RyZWNpcGUpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUoJ2Jhc2UtZmlsZXMnLCAnYS1maWxlJywgJ3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3ViZGlyX2Jhc2ljX2RpcmRlc3Qoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSgnYmFzZS1maWxlcycsIGRlc3RkaXI9J3RtcCcpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfc3JjZGlyX2Jhc2ljKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2gnCisgICAgICAgIHNyY2RpciA9IGdldF9iYl92YXIoJ1MnLCB0ZXN0cmVjaXBlKQorICAgICAgICB3b3JrZGlyID0gZ2V0X2JiX3ZhcignV09SS0RJUicsIHRlc3RyZWNpcGUpCisgICAgICAgIHN1YmRpciA9IG9zLnBhdGgucmVscGF0aChzcmNkaXIsIHdvcmtkaXIpCisgICAgICAgIHNlbGYuX3Rlc3RfYXBwZW5kc3JjZmlsZSh0ZXN0cmVjaXBlLCAnYS1maWxlJywgc3JjZGlyPXN1YmRpcikKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZV9leGlzdGluZ19pbl9zcmNfdXJpKHNlbGYpOgorICAgICAgICB0ZXN0cmVjaXBlID0gJ2Jhc2UtZmlsZXMnCisgICAgICAgIGZpbGVwYXRoID0gc2VsZi5fZ2V0X2ZpcnN0X2ZpbGVfdXJpKHRlc3RyZWNpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlcGF0aCwgJ1VuYWJsZSB0byB0ZXN0LCBubyBmaWxlOi8vIHVyaSBmb3VuZCBpbiBTUkNfVVJJIGZvciAlcycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIGhhc19zcmNfdXJpPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVjaXBldG9vbF9hcHBlbmRzcmNmaWxlX2V4aXN0aW5nX2luX3NyY191cmlfZGlmZl9wYXJhbXMoc2VsZik6CisgICAgICAgIHRlc3RyZWNpcGUgPSAnYmFzZS1maWxlcycKKyAgICAgICAgc3ViZGlyID0gJ3RtcCcKKyAgICAgICAgZmlsZXBhdGggPSBzZWxmLl9nZXRfZmlyc3RfZmlsZV91cmkodGVzdHJlY2lwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVwYXRoLCAnVW5hYmxlIHRvIHRlc3QsIG5vIGZpbGU6Ly8gdXJpIGZvdW5kIGluIFNSQ19VUkkgZm9yICVzJyAlIHRlc3RyZWNpcGUpCisKKyAgICAgICAgb3V0cHV0ID0gc2VsZi5fdGVzdF9hcHBlbmRzcmNmaWxlKHRlc3RyZWNpcGUsIGZpbGVwYXRoLCBzdWJkaXIsIGhhc19zcmNfdXJpPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KCd3aXRoIGRpZmZlcmVudCBwYXJhbWV0ZXJzJyBpbiBsIGZvciBsIGluIG91dHB1dCkpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVfcmVwbGFjZV9maWxlX3NyY2RpcihzZWxmKToKKyAgICAgICAgdGVzdHJlY2lwZSA9ICdiYXNoJworICAgICAgICBmaWxlcGF0aCA9ICdNYWtlZmlsZS5pbicKKyAgICAgICAgc3JjZGlyID0gZ2V0X2JiX3ZhcignUycsIHRlc3RyZWNpcGUpCisgICAgICAgIHdvcmtkaXIgPSBnZXRfYmJfdmFyKCdXT1JLRElSJywgdGVzdHJlY2lwZSkKKyAgICAgICAgc3ViZGlyID0gb3MucGF0aC5yZWxwYXRoKHNyY2Rpciwgd29ya2RpcikKKworICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGUodGVzdHJlY2lwZSwgZmlsZXBhdGgsIHNyY2Rpcj1zdWJkaXIpCisgICAgICAgIGJpdGJha2UoJyVzOmRvX3VucGFjaycgJSB0ZXN0cmVjaXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3InKS5yZWFkKCksIG9wZW4ob3MucGF0aC5qb2luKHNyY2RpciwgZmlsZXBhdGgpLCAncicpLnJlYWQoKSkKKworICAgIGRlZiB0ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoc2VsZiwgZGVzdGRpcj1Ob25lKToKKyAgICAgICAgbmV3ZmlsZXMgPSBbc2VsZi50ZXN0ZmlsZV0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgNSk6CisgICAgICAgICAgICB0ZXN0ZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlbXBkaXIsICd0ZXN0ZmlsZSVkJyAlIGkpCisgICAgICAgICAgICB3aXRoIG9wZW4odGVzdGZpbGUsICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCdUZXN0IGZpbGUgJWRcbicgJSBpKQorICAgICAgICAgICAgbmV3ZmlsZXMuYXBwZW5kKHRlc3RmaWxlKQorICAgICAgICBzZWxmLl90ZXN0X2FwcGVuZHNyY2ZpbGVzKCdnY2MnLCBuZXdmaWxlcywgZGVzdGRpcj1kZXN0ZGlyLCBvcHRpb25zPSctVycpCisKKyAgICBkZWYgdGVzdF9yZWNpcGV0b29sX2FwcGVuZHNyY2ZpbGVzX2Jhc2ljX3N1YmRpcihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3JlY2lwZXRvb2xfYXBwZW5kc3JjZmlsZXNfYmFzaWMoZGVzdGRpcj0ndGVzdGRpcicpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ODk3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3NlbGZ0ZXN0L3NzdGF0ZS5weQpAQCAtMCwwICsxLDUzIEBACitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKKworaW1wb3J0IG9lcWEudXRpbHMuZnRvb2xzIGFzIGZ0b29scworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyLCBnZXRfdGVzdF9sYXllcgorCisKK2NsYXNzIFNTdGF0ZUJhc2Uob2VTZWxmVGVzdCk6CisKKyAgICBkZWYgc2V0VXBMb2NhbChzZWxmKToKKyAgICAgICAgc2VsZi50ZW1wX3NzdGF0ZV9sb2NhdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5zc3RhdGVfcGF0aCA9IGdldF9iYl92YXIoJ1NTVEFURV9ESVInKQorICAgICAgICBzZWxmLmRpc3RybyA9IGdldF9iYl92YXIoJ05BVElWRUxTQlNUUklORycpCisgICAgICAgIHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSA9IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoLCBzZWxmLmRpc3RybykKKworICAgICMgQ3JlYXRlcyBhIHNwZWNpYWwgc3N0YXRlIGNvbmZpZ3VyYXRpb24gd2l0aCB0aGUgb3B0aW9uIHRvIGFkZCBzc3RhdGUgbWlycm9ycworICAgIGRlZiBjb25maWdfc3N0YXRlKHNlbGYsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPUZhbHNlLCBhZGRfbG9jYWxfbWlycm9ycz1bXSk6CisgICAgICAgIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb24gPSB0ZW1wX3NzdGF0ZV9sb2NhdGlvbgorCisgICAgICAgIGlmIHNlbGYudGVtcF9zc3RhdGVfbG9jYXRpb246CisgICAgICAgICAgICB0ZW1wX3NzdGF0ZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuYnVpbGRkaXIsICJ0ZW1wX3NzdGF0ZV8lcyIgJSBkYXRldGltZS5kYXRldGltZS5ub3coKS5zdHJmdGltZSgnJVklbSVkJUglTSVTJykpCisgICAgICAgICAgICBjb25maWdfdGVtcF9zc3RhdGUgPSAiU1NUQVRFX0RJUiA9IFwiJXNcIiIgJSB0ZW1wX3NzdGF0ZV9wYXRoCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoY29uZmlnX3RlbXBfc3N0YXRlKQorICAgICAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0ZW1wX3NzdGF0ZV9wYXRoKQorICAgICAgICBzZWxmLnNzdGF0ZV9wYXRoID0gZ2V0X2JiX3ZhcignU1NUQVRFX0RJUicpCisgICAgICAgIHNlbGYuZGlzdHJvID0gZ2V0X2JiX3ZhcignTkFUSVZFTFNCU1RSSU5HJykKKyAgICAgICAgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlID0gb3MucGF0aC5qb2luKHNlbGYuc3N0YXRlX3BhdGgsIHNlbGYuZGlzdHJvKQorCisgICAgICAgIGlmIGFkZF9sb2NhbF9taXJyb3JzOgorICAgICAgICAgICAgY29uZmlnX3NldF9zc3RhdGVfaWZfbm90X3NldCA9ICdTU1RBVEVfTUlSUk9SUyA/PSAiIicKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kX2NvbmZpZyhjb25maWdfc2V0X3NzdGF0ZV9pZl9ub3Rfc2V0KQorICAgICAgICAgICAgZm9yIGxvY2FsX21pcnJvciBpbiBhZGRfbG9jYWxfbWlycm9yczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguam9pbihsb2NhbF9taXJyb3IpID09IG9zLnBhdGguam9pbihzZWxmLnNzdGF0ZV9wYXRoKSwgbXNnPSdDYW5ub3QgYWRkIHRoZSBjdXJyZW50IHNzdGF0ZSBwYXRoIGFzIGEgc3N0YXRlIG1pcnJvcicpCisgICAgICAgICAgICAgICAgY29uZmlnX3NzdGF0ZV9taXJyb3IgPSAiU1NUQVRFX01JUlJPUlMgKz0gXCJmaWxlOi8vLiogZmlsZTovLy8lcy9QQVRIXCIiICUgbG9jYWxfbWlycm9yCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKGNvbmZpZ19zc3RhdGVfbWlycm9yKQorCisgICAgIyBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHNzdGF0ZSBmaWxlcworICAgIGRlZiBzZWFyY2hfc3N0YXRlKHNlbGYsIGZpbGVuYW1lX3JlZ2V4LCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUpOgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzZWxmLnNzdGF0ZV9wYXRoKToKKyAgICAgICAgICAgIGlmIGRpc3Ryb19zcGVjaWZpYyBhbmQgcmUuc2VhcmNoKCIlcy9bYS16MC05XXsyfSQiICUgc2VsZi5kaXN0cm8sIHJvb3QpOgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiByZS5zZWFyY2goZmlsZW5hbWVfcmVnZXgsIGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmKQorICAgICAgICAgICAgaWYgZGlzdHJvX25vbnNwZWNpZmljIGFuZCByZS5zZWFyY2goIiVzL1thLXowLTldezJ9JCIgJSBzZWxmLnNzdGF0ZV9wYXRoLCByb290KToKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKGZpbGVuYW1lX3JlZ2V4LCBmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZikKKyAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC9zc3RhdGV0ZXN0cy5weSBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwNmIyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvc3N0YXRldGVzdHMucHkKQEAgLTAsMCArMSwzMDggQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAorCitpbXBvcnQgb2VxYS51dGlscy5mdG9vbHMgYXMgZnRvb2xzCitmcm9tIG9lcWEuc2VsZnRlc3QuYmFzZSBpbXBvcnQgb2VTZWxmVGVzdAorZnJvbSBvZXFhLnV0aWxzLmNvbW1hbmRzIGltcG9ydCBydW5DbWQsIGJpdGJha2UsIGdldF9iYl92YXIsIGdldF90ZXN0X2xheWVyCitmcm9tIG9lcWEuc2VsZnRlc3Quc3N0YXRlIGltcG9ydCBTU3RhdGVCYXNlCitmcm9tIG9lcWEudXRpbHMuZGVjb3JhdG9ycyBpbXBvcnQgdGVzdGNhc2UKKworY2xhc3MgU1N0YXRlVGVzdHMoU1N0YXRlQmFzZSk6CisKKyAgICAjIFRlc3Qgc3N0YXRlIGZpbGVzIGNyZWF0aW9uIGFuZCB0aGVpciBsb2NhdGlvbgorICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBzaG91bGRfcGFzcz1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGlmICBzZWxmLnRlbXBfc3N0YXRlX2xvY2F0aW9uOgorICAgICAgICAgICAgYml0YmFrZShbJy1jY2xlYW4nXSArIHRhcmdldHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIGZpbGVfdHJhY2tlciA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSksIGRpc3Ryb19zcGVjaWZpYywgZGlzdHJvX25vbnNwZWNpZmljKQorICAgICAgICBpZiBzaG91bGRfcGFzczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlX3RyYWNrZXIgLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSBmaWxlcyBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZpbGVfdHJhY2tlciAsIG1zZz0iRm91bmQgc3N0YXRlIGZpbGVzIGluIHRoZSB3cm9uZyBwbGFjZSBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICBAdGVzdGNhc2UoOTc1KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgdGFyZ2V0YXJjaCA9IGdldF9iYl92YXIoJ1RVTkVfQVJDSCcpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NyZWF0aW9uKFsnYmludXRpbHMtY3Jvc3MtJysgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCBkaXN0cm9fc3BlY2lmaWM9VHJ1ZSwgZGlzdHJvX25vbnNwZWNpZmljPUZhbHNlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDk3NSkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY3JlYXRpb25fZGlzdHJvX3NwZWNpZmljX2ZhaWwoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X3NzdGF0ZV9jcmVhdGlvbihbJ2JpbnV0aWxzLWNyb3NzLScrIHRhcmdldGFyY2gsICdiaW51dGlscy1uYXRpdmUnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSwgc2hvdWxkX3Bhc3M9RmFsc2UpCisKKyAgICBAdGVzdGNhc2UoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfcGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1GYWxzZSwgZGlzdHJvX25vbnNwZWNpZmljPVRydWUsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoOTc2KQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9jcmVhdGlvbl9kaXN0cm9fbm9uc3BlY2lmaWNfZmFpbChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY3JlYXRpb24oWydnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UsIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUsIHNob3VsZF9wYXNzPUZhbHNlKQorCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZSBmaWxlcyBkZWxldGlvbiBwYXJ0IG9mIHRoZSBkb19jbGVhbnNzdGF0ZSB0YXNrCisgICAgZGVmIHJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soc2VsZiwgdGFyZ2V0cywgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKToKKyAgICAgICAgc2VsZi5jb25maWdfc3N0YXRlKHRlbXBfc3N0YXRlX2xvY2F0aW9uKQorCisgICAgICAgIGJpdGJha2UoWyctY2NsZWFuc3N0YXRlJ10gKyB0YXJnZXRzKQorCisgICAgICAgIGJpdGJha2UodGFyZ2V0cykKKyAgICAgICAgdGd6X2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRnel9jcmVhdGVkLCBtc2c9IkNvdWxkIG5vdCBmaW5kIHNzdGF0ZSAudGd6IGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzaWdpbmZvX2NyZWF0ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC5zaWdpbmZvJCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljLCBkaXN0cm9fbm9uc3BlY2lmaWMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaWdpbmZvX2NyZWF0ZWQsIG1zZz0iQ291bGQgbm90IGZpbmQgc3N0YXRlIC5zaWdpbmZvIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKyAgICAgICAgdGd6X3JlbW92ZWQgPSBzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWMsIGRpc3Ryb19ub25zcGVjaWZpYykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0Z3pfcmVtb3ZlZCwgbXNnPSJkb19jbGVhbnNzdGF0ZSBkaWRuJ3QgcmVtb3ZlIC50Z3ogc3N0YXRlIGZpbGVzIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWNfbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZScsICdnbGliYy1pbml0aWFsJ10sIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fbm9uc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3RfY2xlYW5zc3RhdGVfdGFzayhbJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPUZhbHNlLCBkaXN0cm9fbm9uc3BlY2lmaWM9VHJ1ZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworICAgIEB0ZXN0Y2FzZSg5NzcpCisgICAgZGVmIHRlc3RfY2xlYW5zc3RhdGVfdGFza19kaXN0cm9fc3BlY2lmaWMoc2VsZik6CisgICAgICAgIHRhcmdldGFyY2ggPSBnZXRfYmJfdmFyKCdUVU5FX0FSQ0gnKQorICAgICAgICBzZWxmLnJ1bl90ZXN0X2NsZWFuc3N0YXRlX3Rhc2soWydiaW51dGlscy1jcm9zcy0nKyB0YXJnZXRhcmNoLCAnYmludXRpbHMtbmF0aXZlJywgJ2dsaWJjLWluaXRpYWwnXSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSwgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSkKKworCisgICAgIyBUZXN0IHJlYnVpbGRpbmcgb2YgZGlzdHJvLXNwZWNpZmljIHNzdGF0ZSBmaWxlcworICAgIGRlZiBydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoc2VsZiwgdGFyZ2V0cywgdGVtcF9zc3RhdGVfbG9jYXRpb249VHJ1ZSk6CisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbikKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbnNzdGF0ZSddICsgdGFyZ2V0cykKKworICAgICAgICBiaXRiYWtlKHRhcmdldHMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNlYXJjaF9zc3RhdGUoJ3wnLmpvaW4obWFwKHN0ciwgW3MgKyAnLio/XC50Z3okJyBmb3IgcyBpbiB0YXJnZXRzXSkpLCBkaXN0cm9fc3BlY2lmaWM9RmFsc2UsIGRpc3Ryb19ub25zcGVjaWZpYz1UcnVlKSA9PSBbXSwgbXNnPSJGb3VuZCBkaXN0cm8gbm9uLXNwZWNpZmljIHNzdGF0ZSBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisgICAgICAgIGZpbGVfdHJhY2tlcl8xID0gc2VsZi5zZWFyY2hfc3N0YXRlKCd8Jy5qb2luKG1hcChzdHIsIFtzICsgJy4qP1wudGd6JCcgZm9yIHMgaW4gdGFyZ2V0c10pKSwgZGlzdHJvX3NwZWNpZmljPVRydWUsIGRpc3Ryb19ub25zcGVjaWZpYz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihmaWxlX3RyYWNrZXJfMSkgPj0gbGVuKHRhcmdldHMpLCBtc2cgPSAiTm90IGFsbCBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIGZvcjogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIHRhcmdldHMpKSkKKworICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSArICJfb2xkIikKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSwgc2VsZi5kaXN0cm9fc3BlY2lmaWNfc3N0YXRlICsgIl9vbGQiKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlzdHJvX3NwZWNpZmljX3NzdGF0ZSkKKworICAgICAgICBiaXRiYWtlKFsnLWNjbGVhbiddICsgdGFyZ2V0cykKKyAgICAgICAgYml0YmFrZSh0YXJnZXRzKQorICAgICAgICBmaWxlX3RyYWNrZXJfMiA9IHNlbGYuc2VhcmNoX3NzdGF0ZSgnfCcuam9pbihtYXAoc3RyLCBbcyArICcuKj9cLnRneiQnIGZvciBzIGluIHRhcmdldHNdKSksIGRpc3Ryb19zcGVjaWZpYz1UcnVlLCBkaXN0cm9fbm9uc3BlY2lmaWM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZV90cmFja2VyXzIpID49IGxlbih0YXJnZXRzKSwgbXNnID0gIk5vdCBhbGwgc3N0YXRlIGZpbGVzIHdhcmUgY3JlYXRlZCBmb3I6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCB0YXJnZXRzKSkpCisKKyAgICAgICAgbm90X3JlY3JlYXRlZCA9IFt4IGZvciB4IGluIGZpbGVfdHJhY2tlcl8xIGlmIHggbm90IGluIGZpbGVfdHJhY2tlcl8yXQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90X3JlY3JlYXRlZCA9PSBbXSwgbXNnPSJUaGUgZm9sbG93aW5nIHNzdGF0ZSBmaWxlcyB3YXJlIG5vdCByZWNyZWF0ZWQ6ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBub3RfcmVjcmVhdGVkKSkpCisKKyAgICAgICAgY3JlYXRlZF9vbmNlID0gW3ggZm9yIHggaW4gZmlsZV90cmFja2VyXzIgaWYgeCBub3QgaW4gZmlsZV90cmFja2VyXzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcmVhdGVkX29uY2UgPT0gW10sIG1zZz0iVGhlIGZvbGxvd2luZyBzc3RhdGUgZmlsZXMgd2FyZSBjcmVhdGVkIG9ubHkgaW4gdGhlIHNlY29uZCBydW46ICVzIiAlICcsICcuam9pbihtYXAoc3RyLCBjcmVhdGVkX29uY2UpKSkKKworICAgIEB0ZXN0Y2FzZSgxNzUpCisgICAgZGVmIHRlc3RfcmVidWlsZF9kaXN0cm9fc3BlY2lmaWNfc3N0YXRlX2Nyb3NzX25hdGl2ZV90YXJnZXRzKHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaCwgJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisgICAgQHRlc3RjYXNlKDE3NSkKKyAgICBkZWYgdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGVfY3Jvc3NfdGFyZ2V0KHNlbGYpOgorICAgICAgICB0YXJnZXRhcmNoID0gZ2V0X2JiX3ZhcignVFVORV9BUkNIJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9yZWJ1aWxkX2Rpc3Ryb19zcGVjaWZpY19zc3RhdGUoWydiaW51dGlscy1jcm9zcy0nICsgdGFyZ2V0YXJjaF0sIHRlbXBfc3N0YXRlX2xvY2F0aW9uPVRydWUpCisKKyAgICBAdGVzdGNhc2UoMTc1KQorICAgIGRlZiB0ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZV9uYXRpdmVfdGFyZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLnJ1bl90ZXN0X3JlYnVpbGRfZGlzdHJvX3NwZWNpZmljX3NzdGF0ZShbJ2JpbnV0aWxzLW5hdGl2ZSddLCB0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlKQorCisKKyAgICAjIFRlc3QgdGhlIHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50IHNjcmlwdC4gRWFjaCBlbGVtZW50IGluIHRoZSBnbG9iYWxfY29uZmlnIGxpc3QgaXMgdXNlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaW4gdGhlIHRhcmdldF9jb25maWcgbGlzdAorICAgICMgZ2xvYmFsX2NvbmZpZyBlbGVtZW50cyBhcmUgZXhwZWN0ZWQgdG8gbm90IGdlbmVyYXRlIGFueSBzc3RhdGUgZmlsZXMgdGhhdCB3b3VsZCBiZSByZW1vdmVkIGJ5IHNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIChzdWNoIGFzIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBNQUNISU5FKQorICAgIGRlZiBydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoc2VsZiwgdGFyZ2V0LCBnbG9iYWxfY29uZmlnPVsnJ10sIHRhcmdldF9jb25maWc9WycnXSwgaWdub3JlX3BhdHRlcm5zPVtdKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdsb2JhbF9jb25maWcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJnZXRfY29uZmlnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGdsb2JhbF9jb25maWcpID09IGxlbih0YXJnZXRfY29uZmlnKSwgbXNnPSdMaXN0cyBnbG9iYWxfY29uZmlnIGFuZCB0YXJnZXRfY29uZmlnIHNob3VsZCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cycpCisgICAgICAgIHNlbGYuY29uZmlnX3NzdGF0ZSh0ZW1wX3NzdGF0ZV9sb2NhdGlvbj1UcnVlLCBhZGRfbG9jYWxfbWlycm9ycz1bc2VsZi5zc3RhdGVfcGF0aF0pCisKKyAgICAgICAgIyBJZiBidWlsZGhpc3RvcnkgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlIHZlcnNpb24tZ29pbmctYmFja3dhcmRzIFFBIGNoZWNrcyBmb3IgdGhpcyB0ZXN0LiBJdCBtYXkgcmVwb3J0IGVycm9ycyBvdGhlcndpc2UuCisgICAgICAgIGlmICgnYnVpbGRoaXN0b3J5JyBpbiBnZXRfYmJfdmFyKCdVU0VSX0NMQVNTRVMnKSkgb3IgKCdidWlsZGhpc3RvcnknIGluIGdldF9iYl92YXIoJ0lOSEVSSVQnKSk6CisgICAgICAgICAgICByZW1vdmVfZXJyb3JzX2NvbmZpZyA9ICdFUlJPUl9RQV9yZW1vdmUgPSAidmVyc2lvbi1nb2luZy1iYWNrd2FyZHMiJworICAgICAgICAgICAgc2VsZi5hcHBlbmRfY29uZmlnKHJlbW92ZV9lcnJvcnNfY29uZmlnKQorCisgICAgICAgICMgRm9yIG5vdCB0aGlzIG9ubHkgY2hlY2tzIGlmIHJhbmRvbSBzc3RhdGUgdGFza3MgYXJlIGhhbmRsZWQgY29ycmVjdGx5IGFzIGEgZ3JvdXAuCisgICAgICAgICMgSW4gdGhlIGZ1dHVyZSB3ZSBzaG91bGQgYWRkIGNvbnRyb2wgb3ZlciB3aGF0IHRhc2tzIHdlIGNoZWNrIGZvci4KKworICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdCA9IFtdCisgICAgICAgIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgPSBbXQorICAgICAgICBmb3IgaWR4IGluIHJhbmdlKGxlbih0YXJnZXRfY29uZmlnKSk6CisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZ2xvYmFsX2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc2VsZi5hcHBlbmRfcmVjaXBlaW5jKHRhcmdldCwgdGFyZ2V0X2NvbmZpZ1tpZHhdKQorICAgICAgICAgICAgc3N0YXRlX2FyY2ggPSBnZXRfYmJfdmFyKCdTU1RBVEVfUEtHQVJDSCcsIHRhcmdldCkKKyAgICAgICAgICAgIGlmIG5vdCBzc3RhdGVfYXJjaCBpbiBzc3RhdGVfYXJjaHNfbGlzdDoKKyAgICAgICAgICAgICAgICBzc3RhdGVfYXJjaHNfbGlzdC5hcHBlbmQoc3N0YXRlX2FyY2gpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgPSBzZWxmLnNlYXJjaF9zc3RhdGUodGFyZ2V0ICsgJy4qP1wudGd6JCcpCisgICAgICAgICAgICBiaXRiYWtlKCItY2NsZWFuICVzIiAlIHRhcmdldCkKKyAgICAgICAgICAgIHJlc3VsdCA9IGJpdGJha2UodGFyZ2V0LCBpZ25vcmVfc3RhdHVzPVRydWUpCisgICAgICAgICAgICBpZiB0YXJnZXRfY29uZmlnW2lkeF0gPT0gdGFyZ2V0X2NvbmZpZ1stMV06CisgICAgICAgICAgICAgICAgdGFyZ2V0X3NzdGF0ZV9hZnRlcl9idWlsZCA9IHNlbGYuc2VhcmNoX3NzdGF0ZSh0YXJnZXQgKyAnLio/XC50Z3okJykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlICs9IFt4IGZvciB4IGluIHRhcmdldF9zc3RhdGVfYWZ0ZXJfYnVpbGQgaWYgeCBub3QgaW4gdGFyZ2V0X3NzdGF0ZV9iZWZvcmVfYnVpbGQgaWYgbm90IGFueShwYXR0ZXJuIGluIHggZm9yIHBhdHRlcm4gaW4gaWdub3JlX3BhdHRlcm5zKV0KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX2NvbmZpZyhnbG9iYWxfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLnJlbW92ZV9yZWNpcGVpbmModGFyZ2V0LCB0YXJnZXRfY29uZmlnW2lkeF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdGF0dXMsIDAsIG1zZyA9ICJidWlsZCBvZiAlcyBmYWlsZWQgd2l0aCAlcyIgJSAodGFyZ2V0LCByZXN1bHQub3V0cHV0KSkKKworICAgICAgICBydW5DbWQoInNzdGF0ZS1jYWNoZS1tYW5hZ2VtZW50LnNoIC15IC0tY2FjaGUtZGlyPSVzIC0tcmVtb3ZlLWR1cGxpY2F0ZWQgLS1leHRyYS1hcmNocz0lcyIgJSAoc2VsZi5zc3RhdGVfcGF0aCwgJywnLmpvaW4obWFwKHN0ciwgc3N0YXRlX2FyY2hzX2xpc3QpKSkpCisgICAgICAgIGFjdHVhbF9yZW1haW5pbmdfc3N0YXRlID0gW3ggZm9yIHggaW4gc2VsZi5zZWFyY2hfc3N0YXRlKHRhcmdldCArICcuKj9cLnRneiQnKSBpZiBub3QgYW55KHBhdHRlcm4gaW4geCBmb3IgcGF0dGVybiBpbiBpZ25vcmVfcGF0dGVybnMpXQorCisgICAgICAgIGFjdHVhbF9ub3RfZXhwZWN0ZWQgPSBbeCBmb3IgeCBpbiBhY3R1YWxfcmVtYWluaW5nX3NzdGF0ZSBpZiB4IG5vdCBpbiBleHBlY3RlZF9yZW1haW5pbmdfc3N0YXRlXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFjdHVhbF9ub3RfZXhwZWN0ZWQsIG1zZz0iRmlsZXMgc2hvdWxkIGhhdmUgYmVlbiByZW1vdmVkIGJ1dCB3YXJlIG5vdDogJXMiICUgJywgJy5qb2luKG1hcChzdHIsIGFjdHVhbF9ub3RfZXhwZWN0ZWQpKSkKKyAgICAgICAgZXhwZWN0ZWRfbm90X2FjdHVhbCA9IFt4IGZvciB4IGluIGV4cGVjdGVkX3JlbWFpbmluZ19zc3RhdGUgaWYgeCBub3QgaW4gYWN0dWFsX3JlbWFpbmluZ19zc3RhdGVdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXhwZWN0ZWRfbm90X2FjdHVhbCwgbXNnPSJFeHRyYSBmaWxlcyB3YXJlIHJlbW92ZWQ6ICVzIiAnLCAnLmpvaW4obWFwKHN0ciwgZXhwZWN0ZWRfbm90X2FjdHVhbCkpKQorCisgICAgQHRlc3RjYXNlKDk3MykKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMShzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDk3OCkKKyAgICBkZWYgdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHRfdXNpbmdfcHJfMihzZWxmKToKKyAgICAgICAgZ2xvYmFsX2NvbmZpZyA9IFtdCisgICAgICAgIHRhcmdldF9jb25maWcgPSBbXQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgdGFyZ2V0X2NvbmZpZy5hcHBlbmQoJ1BSID0gIjAiJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJycpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzkpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX3ByXzMoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMCInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZChnbG9iYWxfY29uZmlnWzBdKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnUFIgPSAiMSInKQorICAgICAgICBnbG9iYWxfY29uZmlnLmFwcGVuZCgnTUFDSElORSA9ICJxZW11eDg2IicpCisgICAgICAgIHRhcmdldF9jb25maWcuYXBwZW5kKCdQUiA9ICIxIicpCisgICAgICAgIHNlbGYucnVuX3Rlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0KCdtNCcsIGdsb2JhbF9jb25maWcsICB0YXJnZXRfY29uZmlnLCBpZ25vcmVfcGF0dGVybnM9Wydwb3B1bGF0ZV9saWMnXSkKKworICAgIEB0ZXN0Y2FzZSg5NzQpCisgICAgZGVmIHRlc3Rfc3N0YXRlX2NhY2hlX21hbmFnZW1lbnRfc2NyaXB0X3VzaW5nX21hY2hpbmUoc2VsZik6CisgICAgICAgIGdsb2JhbF9jb25maWcgPSBbXQorICAgICAgICB0YXJnZXRfY29uZmlnID0gW10KKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4Ni02NCInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgZ2xvYmFsX2NvbmZpZy5hcHBlbmQoJ01BQ0hJTkUgPSAicWVtdXg4NiInKQorICAgICAgICB0YXJnZXRfY29uZmlnLmFwcGVuZCgnJykKKyAgICAgICAgc2VsZi5ydW5fdGVzdF9zc3RhdGVfY2FjaGVfbWFuYWdlbWVudF9zY3JpcHQoJ200JywgZ2xvYmFsX2NvbmZpZywgIHRhcmdldF9jb25maWcsIGlnbm9yZV9wYXR0ZXJucz1bJ3BvcHVsYXRlX2xpYyddKQorCisgICAgQHRlc3RjYXNlKDEyNzApCisgICAgZGVmIHRlc3Rfc3N0YXRlXzMyXzY0X3NhbWVfaGFzaChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIGZvciBib3RoIG5hdGl2ZSBhbmQgdGFyZ2V0IHNob3VsZCBub3QgdmFyeSB3aGV0aGVyCisgICAgICAgIHRoZXkncmUgYnVpbHQgb24gYSAzMiBvciA2NCBiaXQgc3lzdGVtLiBSYXRoZXIgdGhhbiByZXF1aXJpbmcgdHdvIGRpZmZlcmVudCAKKyAgICAgICAgYnVpbGQgbWFjaGluZXMgYW5kIHJ1bm5pbmcgYSBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgY2FsbGluZyB1bmFtZSgpCisgICAgICAgIG1hbnVhbGx5IGFuZCBjaGVjayB1c2luZyBiaXRiYWtlIC1TLgorICAgICAgICAiIiIKKworICAgICAgICB0b3BkaXIgPSBnZXRfYmJfdmFyKCdUT1BESVInKQorICAgICAgICB0YXJnZXR2ZW5kb3IgPSBnZXRfYmJfdmFyKCdUQVJHRVRfVkVORE9SJykKKyAgICAgICAgc2VsZi53cml0ZV9jb25maWcoIiIiCitUTVBESVIgPSBcIiR7VE9QRElSfS90bXAtc3N0YXRlc2FtZWhhc2hcIgorQlVJTERfQVJDSCA9IFwieDg2XzY0XCIKK0JVSUxEX09TID0gXCJsaW51eFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitCVUlMRF9BUkNIID0gXCJpNjg2XCIKK0JVSUxEX09TID0gXCJsaW51eFwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyIikKKyAgICAgICAgYml0YmFrZSgiY29yZS1pbWFnZS1zYXRvIC1TIG5vbmUiKQorCisgICAgICAgIGRlZiBnZXRfZmlsZXMoZCk6CisgICAgICAgICAgICBmID0gW10KKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGQpOgorICAgICAgICAgICAgICAgIGYuZXh0ZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSBmb3IgbmFtZSBpbiBmaWxlcykKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gZ2V0X2ZpbGVzKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMi9zdGFtcHMvIikKKyAgICAgICAgZmlsZXMyID0gW3gucmVwbGFjZSgidG1wLXNzdGF0ZXNhbWVoYXNoMiIsICJ0bXAtc3N0YXRlc2FtZWhhc2giKS5yZXBsYWNlKCJpNjg2LWxpbnV4IiwgIng4Nl82NC1saW51eCIpLnJlcGxhY2UoImk2ODYiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICJ4ODZfNjQiICsgdGFyZ2V0dmVuZG9yICsgIi1saW51eCIsICkgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKworICAgIEB0ZXN0Y2FzZSgxMjcxKQorICAgIGRlZiB0ZXN0X3NzdGF0ZV9uYXRpdmVsc2JzdHJpbmdfc2FtZV9oYXNoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIHNzdGF0ZSBjaGVja3N1bXMgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHdoaWNoZXZlciBOQVRJVkVMU0JTVFJJTkcgaXMKKyAgICAgICAgZGV0ZWN0ZWQuIFJhdGhlciB0aGFuIHJlcXVpcmluZyB0d28gZGlmZmVyZW50IGJ1aWxkIG1hY2hpbmVzIGFuZCBydW5uaW5nIAorICAgICAgICBidWlsZHMsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZXMgbWFudWFsbHkgYW5kIGNoZWNrIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK05BVElWRUxTQlNUUklORyA9IFwiRGlzdHJvQVwiCisiIiIpCisgICAgICAgIHNlbGYudHJhY2tfZm9yX2NsZWFudXAodG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2giKQorICAgICAgICBiaXRiYWtlKCJjb3JlLWltYWdlLXNhdG8gLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitOQVRJVkVMU0JTVFJJTkcgPSBcIkRpc3Ryb0JcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoMiIpCisgICAgICAgIGJpdGJha2UoImNvcmUtaW1hZ2Utc2F0byAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmLmV4dGVuZChvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkgZm9yIG5hbWUgaW4gZmlsZXMpCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmaWxlczEgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIvc3RhbXBzLyIpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLmFzc2VydEl0ZW1zRXF1YWwoZmlsZXMxLCBmaWxlczIpCisKKyAgICBkZWYgdGVzdF9zc3RhdGVfYWxsYXJjaF9zYW1lc2lncyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBzc3RhdGUgY2hlY2tzdW1zIG9mZiBhbGxhcmNoIHBhY2thZ2VzIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB3aGljaGV2ZXIgCisgICAgICAgIE1BQ0hJTkUgaXMgc2V0LiBDaGVjayB0aGlzIHVzaW5nIGJpdGJha2UgLVMuCisgICAgICAgICIiIgorCisgICAgICAgIHRvcGRpciA9IGdldF9iYl92YXIoJ1RPUERJUicpCisgICAgICAgIHRhcmdldG9zID0gZ2V0X2JiX3ZhcignVEFSR0VUX09TJykKKyAgICAgICAgdGFyZ2V0dmVuZG9yID0gZ2V0X2JiX3ZhcignVEFSR0VUX1ZFTkRPUicpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoXCIKK01BQ0hJTkUgPSBcInFlbXV4ODZcIgorIiIiKQorICAgICAgICBzZWxmLnRyYWNrX2Zvcl9jbGVhbnVwKHRvcGRpciArICIvdG1wLXNzdGF0ZXNhbWVoYXNoIikKKyAgICAgICAgYml0YmFrZSgid29ybGQgLVMgbm9uZSIpCisgICAgICAgIHNlbGYud3JpdGVfY29uZmlnKCIiIgorVE1QRElSID0gXCIke1RPUERJUn0vdG1wLXNzdGF0ZXNhbWVoYXNoMlwiCitNQUNISU5FID0gXCJxZW11YXJtXCIKKyIiIikKKyAgICAgICAgc2VsZi50cmFja19mb3JfY2xlYW51cCh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaDIiKQorICAgICAgICBiaXRiYWtlKCJ3b3JsZCAtUyBub25lIikKKworICAgICAgICBkZWYgZ2V0X2ZpbGVzKGQpOgorICAgICAgICAgICAgZiA9IFtdCisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgImRvX2J1aWxkIiBub3QgaW4gbmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuYXBwZW5kKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIGZpbGVzMSA9IGdldF9maWxlcyh0b3BkaXIgKyAiL3RtcC1zc3RhdGVzYW1laGFzaC9zdGFtcHMvYWxsIiArIHRhcmdldHZlbmRvciArICItIiArIHRhcmdldG9zKQorICAgICAgICBmaWxlczIgPSBnZXRfZmlsZXModG9wZGlyICsgIi90bXAtc3N0YXRlc2FtZWhhc2gyL3N0YW1wcy9hbGwiICsgdGFyZ2V0dmVuZG9yICsgIi0iICsgdGFyZ2V0b3MpCisgICAgICAgIGZpbGVzMiA9IFt4LnJlcGxhY2UoInRtcC1zc3RhdGVzYW1laGFzaDIiLCAidG1wLXNzdGF0ZXNhbWVoYXNoIikgZm9yIHggaW4gZmlsZXMyXQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0SXRlbXNFcXVhbChmaWxlczEsIGZpbGVzMikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5IGIvbWV0YS9saWIvb2VxYS9zZWxmdGVzdC93aWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjNTRhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvc2VsZnRlc3Qvd2ljLnB5CkBAIC0wLDAgKzEsMjM2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgZXg6dHM9NDpzdz00OnN0cz00OmV0CisjIC0qLSB0YWItd2lkdGg6IDQ7IGMtYmFzaWMtb2Zmc2V0OiA0OyBpbmRlbnQtdGFicy1tb2RlOiBuaWwgLSotCisjCisjIENvcHlyaWdodCAoYykgMjAxNSwgSW50ZWwgQ29ycG9yYXRpb24uCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworIyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorIworIyBBVVRIT1JTCisjIEVkIEJhcnRvc2ggPGVkLmJhcnRvc2hAbGludXguaW50ZWwuY29tPgorCisiIiJUZXN0IGNhc2VzIGZvciB3aWMuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitmcm9tIGdsb2IgaW1wb3J0IGdsb2IKK2Zyb20gc2h1dGlsIGltcG9ydCBybXRyZWUKKworZnJvbSBvZXFhLnNlbGZ0ZXN0LmJhc2UgaW1wb3J0IG9lU2VsZlRlc3QKK2Zyb20gb2VxYS51dGlscy5jb21tYW5kcyBpbXBvcnQgcnVuQ21kLCBiaXRiYWtlLCBnZXRfYmJfdmFyCisKK2NsYXNzIFdpYyhvZVNlbGZUZXN0KToKKyAgICAiIiJXaWMgdGVzdCBjbGFzcy4iIiIKKworICAgIHJlc3VsdGRpciA9ICIvdmFyL3RtcC93aWMvYnVpbGQvIgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIiIiQnVpbGQgd2ljIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLiIiIgorICAgICAgICBiaXRiYWtlKCdzeXNsaW51eCBzeXNsaW51eC1uYXRpdmUgcGFydGVkLW5hdGl2ZSBncHRmZGlzay1uYXRpdmUgJworICAgICAgICAgICAgICAgICdkb3Nmc3Rvb2xzLW5hdGl2ZSBtdG9vbHMtbmF0aXZlJykKKyAgICAgICAgV2ljLmltYWdlX2lzX3JlYWR5ID0gRmFsc2UKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiVGhpcyBjb2RlIGlzIGV4ZWN1dGVkIGJlZm9yZSBlYWNoIHRlc3QgbWV0aG9kLiIiIgorICAgICAgICBpZiBub3QgV2ljLmltYWdlX2lzX3JlYWR5OgorICAgICAgICAgICAgIyBidWlsZCBjb3JlLWltYWdlLW1pbmltYWwgd2l0aCByZXF1aXJlZCBmZWF0dXJlcworICAgICAgICAgICAgZmVhdHVyZXMgPSAnSU1BR0VfRlNUWVBFUyArPSAiIGhkZGltZyJcbk1BQ0hJTkVfRkVBVFVSRVNfYXBwZW5kID0gIiBlZmkiXG4nCisgICAgICAgICAgICBzZWxmLmFwcGVuZF9jb25maWcoZmVhdHVyZXMpCisgICAgICAgICAgICBiaXRiYWtlKCdjb3JlLWltYWdlLW1pbmltYWwnKQorICAgICAgICAgICAgIyBzZXQgdGhpcyBjbGFzcyB2YXJpYWJsZSB0byBhdm9pZCBidWlkaW5nIGltYWdlIG1hbnkgdGltZXMKKyAgICAgICAgICAgIFdpYy5pbWFnZV9pc19yZWFkeSA9IFRydWUKKworICAgICAgICBybXRyZWUoc2VsZi5yZXN1bHRkaXIsIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0MDFfaGVscChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgLS1oZWxwJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwMl9jcmVhdGVoZWxwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyBjcmVhdGUgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgY3JlYXRlIC0taGVscCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MDNfbGlzdGhlbHAoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGxpc3QgLS1oZWxwIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgbGlzdCAtLWhlbHAnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDA0X2J1aWxkX2ltYWdlX25hbWUoc2VsZik6CisgICAgICAgICIiIlRlc3Qgd2ljIGNyZWF0ZSBkaXJlY3RkaXNrIC0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgImRpcmVjdGRpc2stKi5kaXJlY3QiKSkpCisKKyAgICBkZWYgdGVzdDA1X2J1aWxkX2FydGlmYWN0cyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgY3JlYXRlIGRpcmVjdGRpc2sgcHJvdmlkaW5nIGFsbCBhcnRpZmFjdHMuIiIiCisgICAgICAgIHZhcnMgPSBkaWN0KCh2YXIubG93ZXIoKSwgZ2V0X2JiX3Zhcih2YXIsICdjb3JlLWltYWdlLW1pbmltYWwnKSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHZhciBpbiAoJ1NUQUdJTkdfREFUQURJUicsICdERVBMT1lfRElSX0lNQUdFJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVEFHSU5HX0RJUl9OQVRJVkUnLCAnSU1BR0VfUk9PVEZTJykpCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShzdGFnaW5nX2Rpcl9uYXRpdmUpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLXIgJShpbWFnZV9yb290ZnMpcyIgJSB2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDZfZ3B0X2ltYWdlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNyZWF0aW9uIG9mIGNvcmUtaW1hZ2UtbWluaW1hbCB3aXRoIGdwdCB0YWJsZSBhbmQgVVVJRCBib290IiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlIGRpcmVjdGRpc2stZ3B0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiZGlyZWN0ZGlzay0qLmRpcmVjdCIpKSkKKworICAgIGRlZiB0ZXN0MDdfdW5zdXBwb3J0ZWRfc3ViY29tbWFuZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB1bnN1cHBvcnRlZCBzdWJjb21tYW5kIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcnVuQ21kKCd3aWMgdW5zdXBwb3J0ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwOF9ub19jb21tYW5kKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdpYyB3aXRob3V0IGNvbW1hbmQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBydW5DbWQoJ3dpYycsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkuc3RhdHVzKQorCisgICAgZGVmIHRlc3QwOV9oZWxwX2tpY2tzdGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBvdmVydmlldyIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgnd2ljIGhlbHAgb3ZlcnZpZXcnKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDEwX2hlbHBfcGx1Z2lucyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBwbHVnaW5zIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCd3aWMgaGVscCBwbHVnaW5zJykuc3RhdHVzKQorCisgICAgZGVmIHRlc3QxMV9oZWxwX2tpY2tzdGFydChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aWMgaGVscCBraWNrc3RhcnQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoJ3dpYyBoZWxwIGtpY2tzdGFydCcpLnN0YXR1cykKKworICAgIGRlZiB0ZXN0MTJfY29tcHJlc3NfZ3ppcChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb21wcmVzc2luZyBhbiBpbWFnZSB3aXRoIGd6aXAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGd6aXAiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0Lmd6IikpKQorCisgICAgZGVmIHRlc3QxM19jb21wcmVzc19nemlwKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvbXByZXNzaW5nIGFuIGltYWdlIHdpdGggYnppcDIiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIGJ6aXAyIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0ZGlzay0qLmRpcmVjdC5iejIiKSkpCisKKyAgICBkZWYgdGVzdDE0X2NvbXByZXNzX2d6aXAoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29tcHJlc3NpbmcgYW4gaW1hZ2Ugd2l0aCB4eiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBkaXJlY3RkaXNrICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMgeHoiKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RkaXNrLSouZGlyZWN0Lnh6IikpKQorCisgICAgZGVmIHRlc3QxNV93cm9uZ19jb21wcmVzc29yKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGhvdyB3aWMgYnJlYWtzIGlmIHdyb25nIGNvbXByZXNzb3IgaXMgcHJvdmlkZWQiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBydW5DbWQoIndpYyBjcmVhdGUgZGlyZWN0ZGlzayAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIHdyb25nIiwgaWdub3JlX3N0YXR1cz1UcnVlKS5zdGF0dXMpCisKKyAgICBkZWYgdGVzdDE2X3Jvb3Rmc19pbmRpcmVjdF9yZWNpcGVzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcmVjaXBlcyIiIgorICAgICAgICB3a3MgPSAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0taW1hZ2UtbmFtZSBjb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMT1jb3JlLWltYWdlLW1pbmltYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMgcm9vdGZzMj1jb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB3a3MpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcyouZGlyZWN0IiAlIHdrcykpKQorCisgICAgZGVmIHRlc3QxN19yb290ZnNfYXJ0aWZhY3RzKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHVzYWdlIG9mIHJvb3RmcyBwbHVnaW4gd2l0aCByb290ZnMgcGF0aHMiIiIKKyAgICAgICAgdmFycyA9IGRpY3QoKHZhci5sb3dlcigpLCBnZXRfYmJfdmFyKHZhciwgJ2NvcmUtaW1hZ2UtbWluaW1hbCcpKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdmFyIGluICgnU1RBR0lOR19EQVRBRElSJywgJ0RFUExPWV9ESVJfSU1BR0UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUQUdJTkdfRElSX05BVElWRScsICdJTUFHRV9ST09URlMnKSkKKyAgICAgICAgdmFyc1snd2tzJ10gPSAiZGlyZWN0ZGlzay1tdWx0aS1yb290ZnMiCisgICAgICAgIHN0YXR1cyA9IHJ1bkNtZCgid2ljIGNyZWF0ZSAlKHdrcylzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItYiAlKHN0YWdpbmdfZGF0YWRpcilzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICItayAlKGRlcGxveV9kaXJfaW1hZ2UpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLW4gJShzdGFnaW5nX2Rpcl9uYXRpdmUpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMtZGlyIHJvb3RmczE9JShpbWFnZV9yb290ZnMpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiLS1yb290ZnMtZGlyIHJvb3RmczI9JShpbWFnZV9yb290ZnMpcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgJSB2YXJzKS5zdGF0dXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUod2tzKXMtKi5kaXJlY3QiICUgdmFycykpKQorCisgICAgZGVmIHRlc3QxOF9pc29faW1hZ2Uoc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgaHlicmlkIGlzbyBpbWFnZXdpdGggbGVnYWN5IGFuZCBFRkkgYm9vdCIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSBta2h5YnJpZGlzbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWltYWdlLW5hbWUgY29yZS1pbWFnZS1taW5pbWFsIikuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouZGlyZWN0IikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIkhZQlJJRF9JU09fSU1HLSouaXNvIikpKQorCisgICAgZGVmIHRlc3QxOV9pbWFnZV9lbnYoc2VsZik6CisgICAgICAgICIiIlRlc3QgZ2VuZXJhdGlvbiBvZiA8aW1hZ2U+LmVudiBmaWxlcy4iIiIKKyAgICAgICAgaW1hZ2UgPSAnY29yZS1pbWFnZS1taW5pbWFsJworICAgICAgICBzdGRpciA9IGdldF9iYl92YXIoJ1NUQUdJTkdfRElSX1RBUkdFVCcsIGltYWdlKQorICAgICAgICBpbWdkYXRhZGlyID0gb3MucGF0aC5qb2luKHN0ZGlyLCAnaW1nZGF0YScpCisKKyAgICAgICAgYmFzZW5hbWUgPSBnZXRfYmJfdmFyKCdJTUFHRV9CQVNFTkFNRScsIGltYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2VuYW1lLCBpbWFnZSkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihpbWdkYXRhZGlyLCBiYXNlbmFtZSkgKyAnLmVudicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHBhdGgpKQorCisgICAgICAgIHdpY3ZhcnMgPSBzZXQoZ2V0X2JiX3ZhcignV0lDVkFSUycsIGltYWdlKS5zcGxpdCgpKQorICAgICAgICAjIGZpbHRlciBvdXQgb3B0aW9uYWwgdmFyaWFibGVzCisgICAgICAgIHdpY3ZhcnMgPSB3aWN2YXJzLmRpZmZlcmVuY2UoKCdIRERESVInLCAnSU1BR0VfQk9PVF9GSUxFUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJTklUUkQnLCAnSVNPRElSJykpCisgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBlbnZmaWxlOgorICAgICAgICAgICAgY29udGVudCA9IGRpY3QobGluZS5zcGxpdCgiPSIsIDEpIGZvciBsaW5lIGluIGVudmZpbGUpCisgICAgICAgICAgICAjIHRlc3QgaWYgdmFyaWFibGVzIHVzZWQgYnkgd2ljIHByZXNlbnQgaW4gdGhlIC5lbnYgZmlsZQorICAgICAgICAgICAgZm9yIHZhciBpbiB3aWN2YXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2YXIgaW4gY29udGVudCwgIiVzIGlzIG5vdCBpbiAuZW52IGZpbGUiICUgdmFyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZW50W3Zhcl0pCisKKyAgICBkZWYgdGVzdDIwX3dpY19pbWFnZV90eXBlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGJ1aWxkaW5nIHdpYyBpbWFnZXMgYnkgYml0YmFrZSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGJpdGJha2UoJ3dpYy1pbWFnZS1taW5pbWFsJykuc3RhdHVzKQorCisgICAgICAgIGRlcGxveV9kaXIgPSBnZXRfYmJfdmFyKCdERVBMT1lfRElSX0lNQUdFJykKKyAgICAgICAgbWFjaGluZSA9IGdldF9iYl92YXIoJ01BQ0hJTkUnKQorICAgICAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4oZGVwbG95X2RpciwgJ3dpYy1pbWFnZS1taW5pbWFsLSVzLicgJSBtYWNoaW5lKQorICAgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgcmVzdWx0IGltYWdlIGFuZCBtYW5pZmVzdHMgc3ltbGlua3MKKyAgICAgICAgIyBwb2ludGluZyB0byBleGlzdGluZyBmaWxlcworICAgICAgICBmb3Igc3VmZml4IGluICgnd2ljLmJ6MicsICdtYW5pZmVzdCcpOgorICAgICAgICAgICAgcGF0aCA9IHByZWZpeCArIHN1ZmZpeAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKHBhdGgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGgucmVhbHBhdGgocGF0aCkpKQorCisgICAgZGVmIHRlc3QyMV9xZW11eDg2X2RpcmVjdGRpc2soc2VsZik6CisgICAgICAgICIiIlRlc3QgY3JlYXRpb24gb2YgcWVtdXgtODYtZGlyZWN0ZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJxZW11eDg2LWRpcmVjdGRpc2siCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcnVuQ21kKCJ3aWMgY3JlYXRlICVzIC1lIGNvcmUtaW1hZ2UtbWluaW1hbCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGltYWdlKS5zdGF0dXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGdsb2Ioc2VsZi5yZXN1bHRkaXIgKyAiJXMtKmRpcmVjdCIgJSBpbWFnZSkpKQorCisgICAgZGVmIHRlc3QyMl9ta2d1bW1pZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2d1bW1pZGlzayBpbWFnZSIiIgorICAgICAgICBpbWFnZSA9ICJta2d1bW1pZGlzayIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBydW5DbWQoIndpYyBjcmVhdGUgJXMgLWUgY29yZS1pbWFnZS1taW5pbWFsIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaW1hZ2UpLnN0YXR1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZ2xvYihzZWxmLnJlc3VsdGRpciArICIlcy0qZGlyZWN0IiAlIGltYWdlKSkpCisKKyAgICBkZWYgdGVzdDIzX21rZWZpZGlzayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjcmVhdGlvbiBvZiBta2VmaWRpc2sgaW1hZ2UiIiIKKyAgICAgICAgaW1hZ2UgPSAibWtlZmlkaXNrIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHJ1bkNtZCgid2ljIGNyZWF0ZSAlcyAtZSBjb3JlLWltYWdlLW1pbmltYWwiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbWFnZSkuc3RhdHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihnbG9iKHNlbGYucmVzdWx0ZGlyICsgIiVzLSpkaXJlY3QiICUgaW1hZ2UpKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weSBiL21ldGEvbGliL29lcWEvdGFyZ2V0Y29udHJvbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGMwZDAxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS90YXJnZXRjb250cm9sLnB5CkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBUaGlzIG1vZHVsZSBpcyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGZvciBzZXR0aW5nIHVwIGFuZCBjb250cm9sbGluZyBhIHRhcmdldCBtYWNoaW5lLgorCitpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgYmIKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKK2ltcG9ydCBsb2dnaW5nCitmcm9tIG9lcWEudXRpbHMuc3NoY29udHJvbCBpbXBvcnQgU1NIQ29udHJvbAorZnJvbSBvZXFhLnV0aWxzLnFlbXVydW5uZXIgaW1wb3J0IFFlbXVSdW5uZXIKK2Zyb20gb2VxYS51dGlscy5xZW11dGlueXJ1bm5lciBpbXBvcnQgUWVtdVRpbnlSdW5uZXIKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBUYXJnZXREdW1wZXIKK2Zyb20gb2VxYS5jb250cm9sbGVycy50ZXN0dGFyZ2V0bG9hZGVyIGltcG9ydCBUZXN0VGFyZ2V0TG9hZGVyCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKKworZGVmIGdldF90YXJnZXRfY29udHJvbGxlcihkKToKKyAgICB0ZXN0dGFyZ2V0ID0gZC5nZXRWYXIoIlRFU1RfVEFSR0VUIiwgVHJ1ZSkKKyAgICAjIG9sZCwgc2ltcGxlIG5hbWVzCisgICAgaWYgdGVzdHRhcmdldCA9PSAicWVtdSI6CisgICAgICAgIHJldHVybiBRZW11VGFyZ2V0KGQpCisgICAgZWxpZiB0ZXN0dGFyZ2V0ID09ICJzaW1wbGVyZW1vdGUiOgorICAgICAgICByZXR1cm4gU2ltcGxlUmVtb3RlVGFyZ2V0KGQpCisgICAgZWxzZToKKyAgICAgICAgIyB1c2UgdGhlIGNsYXNzIG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpcyBpdCBhIGNvcmUgY2xhc3MgZGVmaW5lZCBoZXJlPworICAgICAgICAgICAgY29udHJvbGxlciA9IGdldGF0dHIoc3lzLm1vZHVsZXNbX19uYW1lX19dLCB0ZXN0dGFyZ2V0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIG5vcGUsIHBlcmhhcHMgYSBsYXllciBkZWZpbmVkIG9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGJicGF0aCA9IGQuZ2V0VmFyKCJCQlBBVEgiLCBUcnVlKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgdGVzdHRhcmdldGxvYWRlciA9IFRlc3RUYXJnZXRMb2FkZXIoKQorICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIgPSB0ZXN0dGFyZ2V0bG9hZGVyLmdldF9jb250cm9sbGVyX21vZHVsZSh0ZXN0dGFyZ2V0LCBiYnBhdGgpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGltcG9ydCB7MH0gZnJvbSBhdmFpbGFibGUgY29udHJvbGxlciBtb2R1bGVzOlxuezF9Ii5mb3JtYXQodGVzdHRhcmdldCx0cmFjZWJhY2suZm9ybWF0X2V4YygpKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJJbnZhbGlkIFRFU1RfVEFSR0VUIC0gIiArIHN0cihlKSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIoZCkKKworCitjbGFzcyBCYXNlVGFyZ2V0KG9iamVjdCk6CisKKyAgICBfX21ldGFjbGFzc19fID0gQUJDTWV0YQorCisgICAgc3VwcG9ydGVkX2ltYWdlX2ZzdHlwZXMgPSBbXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuaXAgPSBOb25lCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorICAgICAgICBzZWxmLmRhdGV0aW1lID0gZC5nZXRWYXIoJ0RBVEVUSU1FJywgVHJ1ZSkKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gZC5nZXRWYXIoIlRFU1RfTE9HX0RJUiIsIFRydWUpCisgICAgICAgIHNlbGYucG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGRlcGxveShzZWxmKToKKworICAgICAgICBzZWxmLnNzaGxvZyA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJzc2hfdGFyZ2V0X2xvZy4lcyIgJSBzZWxmLmRhdGV0aW1lKQorICAgICAgICBzc2hsb2dsaW5rID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInNzaF90YXJnZXRfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3NobG9nbGluayk6CisgICAgICAgICAgICBvcy51bmxpbmsoc3NobG9nbGluaykKKyAgICAgICAgb3Muc3ltbGluayhzZWxmLnNzaGxvZywgc3NobG9nbGluaykKKyAgICAgICAgYmIubm90ZSgiU1NIIGxvZyBmaWxlOiAlcyIgJSAgc2VsZi5zc2hsb2cpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc3RhcnQoc2VsZiwgcGFyYW1zPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9leHRyYV9maWxlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYXRjaF9pbWFnZV9mc3R5cGUoc2VsZiwgZCwgaW1hZ2VfZnN0eXBlcz1Ob25lKToKKyAgICAgICAgaWYgbm90IGltYWdlX2ZzdHlwZXM6CisgICAgICAgICAgICBpbWFnZV9mc3R5cGVzID0gZC5nZXRWYXIoJ0lNQUdFX0ZTVFlQRVMnLCBUcnVlKS5zcGxpdCgnICcpCisgICAgICAgIHBvc3NpYmxlX2ltYWdlX2ZzdHlwZXMgPSBbZnN0eXBlIGZvciBmc3R5cGUgaW4gc2VsZi5zdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyBpZiBmc3R5cGUgaW4gaW1hZ2VfZnN0eXBlc10KKyAgICAgICAgaWYgcG9zc2libGVfaW1hZ2VfZnN0eXBlczoKKyAgICAgICAgICAgIHJldHVybiBwb3NzaWJsZV9pbWFnZV9mc3R5cGVzWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldF9pbWFnZV9mc3R5cGUoc2VsZiwgZCk6CisgICAgICAgIGltYWdlX2ZzdHlwZSA9IHNlbGYubWF0Y2hfaW1hZ2VfZnN0eXBlKGQpCisgICAgICAgIGlmIGltYWdlX2ZzdHlwZToKKyAgICAgICAgICAgIHJldHVybiBpbWFnZV9mc3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJJTUFHRV9GU1RZUEVTIHNob3VsZCBjb250YWluIGEgVGFyZ2V0IENvbnRyb2xsZXIgc3VwcG9ydGVkIGltYWdlIGZzdHlwZTogJXMgIiAlICcsICcuam9pbihtYXAoc3RyLCBzZWxmLnN1cHBvcnRlZF9pbWFnZV9mc3R5cGVzKSkpCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgIHNlbGYuc3RhcnQocGFyYW1zKQorCisgICAgZGVmIHJ1bihzZWxmLCBjbWQsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24ucnVuKGNtZCwgdGltZW91dCkKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29weV90byhsb2NhbHBhdGgsIHJlbW90ZXBhdGgpCisKKyAgICBkZWYgY29weV9mcm9tKHNlbGYsIHJlbW90ZXBhdGgsIGxvY2FscGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uY29weV9mcm9tKHJlbW90ZXBhdGgsIGxvY2FscGF0aCkKKworCisKK2NsYXNzIFFlbXVUYXJnZXQoQmFzZVRhcmdldCk6CisKKyAgICBzdXBwb3J0ZWRfaW1hZ2VfZnN0eXBlcyA9IFsnZXh0MycsICdleHQ0JywgJ2NwaW8uZ3onXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorCisgICAgICAgIHN1cGVyKFFlbXVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisKKyAgICAgICAgc2VsZi5pbWFnZV9mc3R5cGUgPSBzZWxmLmdldF9pbWFnZV9mc3R5cGUoZCkKKyAgICAgICAgc2VsZi5xZW11bG9nID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRpciwgInFlbXVfYm9vdF9sb2cuJXMiICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgc2VsZi5vcmlncm9vdGZzID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksICBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAnLicgKyBzZWxmLmltYWdlX2ZzdHlwZSkKKyAgICAgICAgc2VsZi5yb290ZnMgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCBkLmdldFZhcigiSU1BR0VfTElOS19OQU1FIiwgVHJ1ZSkgKyAnLXRlc3RpbWFnZS4nICsgc2VsZi5pbWFnZV9mc3R5cGUpCisgICAgICAgIHNlbGYua2VybmVsID0gb3MucGF0aC5qb2luKGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksIGQuZ2V0VmFyKCJLRVJORUxfSU1BR0VUWVBFIiwgRmFsc2UpICsgJy0nICsgZC5nZXRWYXIoJ01BQ0hJTkUnLCBGYWxzZSkgKyAnLmJpbicpCisgICAgICAgIGR1bXBfdGFyZ2V0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfdGFyZ2V0IiwgVHJ1ZSkKKyAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpCisgICAgICAgIGR1bXBfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisKKyAgICAgICAgIyBMb2cgUWVtdVJ1bm5lciBsb2cgb3V0cHV0IHRvIGEgZmlsZQorICAgICAgICBpbXBvcnQgb2UucGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQorICAgICAgICBzZWxmLnFlbXVydW5uZXJsb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGlyLCAncWVtdXJ1bm5lcl9sb2cuJXMnICUgc2VsZi5kYXRldGltZSkKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ0JpdEJha2UuUWVtdVJ1bm5lcicpCisgICAgICAgIGxvZ2dlcmhhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKHNlbGYucWVtdXJ1bm5lcmxvZykKKyAgICAgICAgbG9nZ2VyaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoIiUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIikpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGxvZ2dlcmhhbmRsZXIpCisgICAgICAgIG9lLnBhdGguc3ltbGluayhvcy5wYXRoLmJhc2VuYW1lKHNlbGYucWVtdXJ1bm5lcmxvZyksIG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICdxZW11cnVubmVyX2xvZycpLCBmb3JjZT1UcnVlKQorCisgICAgICAgIGlmIGQuZ2V0VmFyKCJESVNUUk8iLCBUcnVlKSA9PSAicG9reS10aW55IjoKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gUWVtdVRpbnlSdW5uZXIobWFjaGluZT1kLmdldFZhcigiTUFDSElORSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Rmcz1zZWxmLnJvb3RmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBkaXIgPSBkLmdldFZhcigiVE1QRElSIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwbG95X2Rpcl9pbWFnZSA9IGQuZ2V0VmFyKCJERVBMT1lfRElSX0lNQUdFIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheSA9IGQuZ2V0VmFyKCJCQl9PUklHRU5WIiwgRmFsc2UpLmdldFZhcigiRElTUExBWSIsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ZpbGUgPSBzZWxmLnFlbXVsb2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsID0gc2VsZi5rZXJuZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vdHRpbWUgPSBpbnQoZC5nZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsIFRydWUpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucnVubmVyID0gUWVtdVJ1bm5lcihtYWNoaW5lPWQuZ2V0VmFyKCJNQUNISU5FIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGZzPXNlbGYucm9vdGZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcGRpciA9IGQuZ2V0VmFyKCJUTVBESVIiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3lfZGlyX2ltYWdlID0gZC5nZXRWYXIoIkRFUExPWV9ESVJfSU1BR0UiLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZC5nZXRWYXIoIkJCX09SSUdFTlYiLCBGYWxzZSkuZ2V0VmFyKCJESVNQTEFZIiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZmlsZSA9IHNlbGYucWVtdWxvZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib290dGltZSA9IGludChkLmdldFZhcigiVEVTVF9RRU1VQk9PVF9USU1FT1VUIiwgVHJ1ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBfZGlyID0gZHVtcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcF9ob3N0X2NtZHMgPSBkLmdldFZhcigidGVzdGltYWdlX2R1bXBfaG9zdCIsIFRydWUpKQorCisgICAgICAgIHNlbGYudGFyZ2V0X2R1bXBlciA9IFRhcmdldER1bXBlcihkdW1wX3RhcmdldF9jbWRzLCBkdW1wX2Rpciwgc2VsZi5ydW5uZXIpCisKKyAgICBkZWYgZGVwbG95KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoc2VsZi50ZXN0ZGlyKQorICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYub3JpZ3Jvb3Rmcywgc2VsZi5yb290ZnMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGJiLmZhdGFsKCJFcnJvciBjb3B5aW5nIHJvb3RmczogJXMiICUgZSkKKworICAgICAgICBxZW11bG9nbGluayA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkaXIsICJxZW11X2Jvb3RfbG9nIikKKyAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsocWVtdWxvZ2xpbmspOgorICAgICAgICAgICAgb3MudW5saW5rKHFlbXVsb2dsaW5rKQorICAgICAgICBvcy5zeW1saW5rKHNlbGYucWVtdWxvZywgcWVtdWxvZ2xpbmspCisKKyAgICAgICAgYmIubm90ZSgicm9vdGZzIGZpbGU6ICVzIiAlICBzZWxmLnJvb3RmcykKKyAgICAgICAgYmIubm90ZSgiUWVtdSBsb2cgZmlsZTogJXMiICUgc2VsZi5xZW11bG9nKQorICAgICAgICBzdXBlcihRZW11VGFyZ2V0LCBzZWxmKS5kZXBsb3koKQorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHBhcmFtcz1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5ydW5uZXIuc3RhcnQocGFyYW1zKToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBzZWxmLnJ1bm5lci5pcAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzZWxmLnJ1bm5lci5zZXJ2ZXJfaXAKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woaXA9c2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLnFlbXVsb2cpOgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnFlbXVsb2csICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgYmIuZXJyb3IoIlFlbXUgbG9nIG91dHB1dCBmcm9tICVzOlxuJXMiICUgKHNlbGYucWVtdWxvZywgZi5yZWFkKCkpKQorICAgICAgICAgICAgcmFpc2UgYmIuYnVpbGQuRnVuY0ZhaWxlZCgiJXMgLSBGQUlMRUQgdG8gc3RhcnQgcWVtdSAtIGNoZWNrIHRoZSB0YXNrIGxvZyBhbmQgdGhlIGJvb3QgbG9nIiAlIHNlbGYucG4pCisKKyAgICBkZWYgY2hlY2soc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5ydW5uZXIuc3RvcCgpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBOb25lCisKKyAgICBkZWYgcmVzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucnVubmVyLnJlc3RhcnQocGFyYW1zKToKKyAgICAgICAgICAgIHNlbGYuaXAgPSBzZWxmLnJ1bm5lci5pcAorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzZWxmLnJ1bm5lci5zZXJ2ZXJfaXAKKyAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woaXA9c2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGJiLmJ1aWxkLkZ1bmNGYWlsZWQoIiVzIC0gRkFJTEVEIHRvIHJlLXN0YXJ0IHFlbXUgLSBjaGVjayB0aGUgdGFzayBsb2cgYW5kIHRoZSBib290IGxvZyIgJSBzZWxmLnBuKQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bm5lci5ydW5fc2VyaWFsKGNvbW1hbmQpCisKKworY2xhc3MgU2ltcGxlUmVtb3RlVGFyZ2V0KEJhc2VUYXJnZXQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGQpOgorICAgICAgICBzdXBlcihTaW1wbGVSZW1vdGVUYXJnZXQsIHNlbGYpLl9faW5pdF9fKGQpCisgICAgICAgIGFkZHIgPSBkLmdldFZhcigiVEVTVF9UQVJHRVRfSVAiLCBUcnVlKSBvciBiYi5mYXRhbCgnUGxlYXNlIHNldCBURVNUX1RBUkdFVF9JUCB3aXRoIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBtYWNoaW5lIHlvdSB3YW50IHRvIHJ1biB0aGUgdGVzdHMgb24uJykKKyAgICAgICAgc2VsZi5pcCA9IGFkZHIuc3BsaXQoIjoiKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBhZGRyLnNwbGl0KCI6IilbMV0KKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBOb25lCisgICAgICAgIGJiLm5vdGUoIlRhcmdldCBJUDogJXMiICUgc2VsZi5pcCkKKyAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBkLmdldFZhcigiVEVTVF9TRVJWRVJfSVAiLCBUcnVlKQorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaXA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ2lwJywgJ3JvdXRlJywgJ2dldCcsIHNlbGYuaXAgXSkuc3BsaXQoIlxuIilbMF0uc3BsaXQoKVstMV0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBiYi5mYXRhbCgiRmFpbGVkIHRvIGRldGVybWluZSB0aGUgaG9zdCBJUCBhZGRyZXNzIChhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gc2V0IFRFU1RfU0VSVkVSX0lQIHdpdGggdGhlIElQIGFkZHJlc3Mgb2YgdGhpcyBtYWNoaW5lKTogJXMiICUgZSkKKyAgICAgICAgYmIubm90ZSgiU2VydmVyIElQOiAlcyIgJSBzZWxmLnNlcnZlcl9pcCkKKworICAgIGRlZiBkZXBsb3koc2VsZik6CisgICAgICAgIHN1cGVyKFNpbXBsZVJlbW90ZVRhcmdldCwgc2VsZikuZGVwbG95KCkKKworICAgIGRlZiBzdGFydChzZWxmLCBwYXJhbXM9Tm9uZSk6CisgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IFNTSENvbnRyb2woc2VsZi5pcCwgbG9nZmlsZT1zZWxmLnNzaGxvZywgcG9ydD1zZWxmLnBvcnQpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzZWxmLnNlcnZlcl9pcCA9IE5vbmUKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvX19pbml0X18ucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNjAwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgRW5hYmxlIG90aGVyIGxheWVycyB0byBoYXZlIG1vZHVsZXMgaW4gdGhlIHNhbWUgbmFtZWQgZGlyZWN0b3J5Citmcm9tIHBrZ3V0aWwgaW1wb3J0IGV4dGVuZF9wYXRoCitfX3BhdGhfXyA9IGV4dGVuZF9wYXRoKF9fcGF0aF9fLCBfX25hbWVfXykKKworCisjIEJvcnJvd2VkIGZyb20gQ2FsbGVkUHJvY2Vzc0Vycm9yCisKK2NsYXNzIENvbW1hbmRFcnJvcihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXRjb2RlLCBjbWQsIG91dHB1dCA9IE5vbmUpOgorICAgICAgICBzZWxmLnJldGNvZGUgPSByZXRjb2RlCisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkIHdpdGggb3V0cHV0OiAlcyIgJSAoc2VsZi5jbWQsIHNlbGYucmV0Y29kZSwgc2VsZi5vdXRwdXQpCisKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvY29tbWFuZHMucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2NvbW1hbmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTJjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2NvbW1hbmRzLnB5CkBAIC0wLDAgKzEsMjI0IEBACisjIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIERFU0NSSVBUSU9OCisjIFRoaXMgbW9kdWxlIGlzIG1haW5seSB1c2VkIGJ5IHNjcmlwdHMvb2Utc2VsZnRlc3QgYW5kIG1vZHVsZXMgdW5kZXIgbWV0YS9vZXFhL3NlbGZ0ZXN0CisjIEl0IHByb3ZpZGVzIGEgY2xhc3MgYW5kIG1ldGhvZHMgZm9yIHJ1bm5pbmcgY29tbWFuZHMgb24gdGhlIGhvc3QgaW4gYSBjb252aWVuZW50IHdheSBmb3IgdGVzdHMuCisKKworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgbG9nZ2luZworZnJvbSBvZXFhLnV0aWxzIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gb2VxYS51dGlscyBpbXBvcnQgZnRvb2xzCitpbXBvcnQgcmUKK2ltcG9ydCBjb250ZXh0bGliCisKK2NsYXNzIENvbW1hbmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZCwgYmc9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgZGF0YT1Ob25lLCAqKm9wdGlvbnMpOgorCisgICAgICAgIHNlbGYuZGVmYXVsdG9wdHMgPSB7CisgICAgICAgICAgICAic3Rkb3V0Ijogc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgInN0ZGVyciI6IHN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgInN0ZGluIjogTm9uZSwKKyAgICAgICAgICAgICJzaGVsbCI6IEZhbHNlLAorICAgICAgICAgICAgImJ1ZnNpemUiOiAtMSwKKyAgICAgICAgfQorCisgICAgICAgIHNlbGYuY21kID0gY29tbWFuZAorICAgICAgICBzZWxmLmJnID0gYmcKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCisKKyAgICAgICAgc2VsZi5vcHRpb25zID0gZGljdChzZWxmLmRlZmF1bHRvcHRzKQorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuY21kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgICAgIHNlbGYub3B0aW9uc1sic2hlbGwiXSA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5kYXRhOgorICAgICAgICAgICAgc2VsZi5vcHRpb25zWydzdGRpbiddID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKworICAgICAgICBzZWxmLnN0YXR1cyA9IE5vbmUKKyAgICAgICAgc2VsZi5vdXRwdXQgPSBOb25lCisgICAgICAgIHNlbGYuZXJyb3IgPSBOb25lCisgICAgICAgIHNlbGYudGhyZWFkID0gTm9uZQorCisgICAgICAgIHNlbGYubG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInV0aWxzLmNvbW1hbmRzIikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oc2VsZi5jbWQsICoqc2VsZi5vcHRpb25zKQorCisgICAgICAgIGRlZiBjb21tVGhyZWFkKCk6CisgICAgICAgICAgICBzZWxmLm91dHB1dCwgc2VsZi5lcnJvciA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZShzZWxmLmRhdGEpCisKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jb21tVGhyZWFkKQorICAgICAgICBzZWxmLnRocmVhZC5zdGFydCgpCisKKyAgICAgICAgc2VsZi5sb2cuZGVidWcoIlJ1bm5pbmcgY29tbWFuZCAnJXMnIiAlIHNlbGYuY21kKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmJnOgorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbihzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICBzZWxmLnN0b3AoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIGlmIHNlbGYudGhyZWFkLmlzQWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICAgICAgIyBsZXQncyBnaXZlIGl0IG1vcmUgdGltZSB0byB0ZXJtaW5hdGUgZ3JhY2VmdWxseSBiZWZvcmUga2lsbGluZyBpdAorICAgICAgICAgICAgc2VsZi50aHJlYWQuam9pbig1KQorICAgICAgICAgICAgaWYgc2VsZi50aHJlYWQuaXNBbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKworICAgICAgICBzZWxmLm91dHB1dCA9IHNlbGYub3V0cHV0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuc3RhdHVzID0gc2VsZi5wcm9jZXNzLnBvbGwoKQorCisgICAgICAgIHNlbGYubG9nLmRlYnVnKCJDb21tYW5kICclcycgcmV0dXJuZWQgJWQgYXMgZXhpdCBjb2RlLiIgJSAoc2VsZi5jbWQsIHNlbGYuc3RhdHVzKSkKKyAgICAgICAgIyBsb2dnaW5nIHRoZSBjb21wbGV0ZSBvdXRwdXQgaXMgaW5zYW5lCisgICAgICAgICMgYml0YmFrZSAtZSBvdXRwdXQgaXMgcmVhbGx5IGJpZworICAgICAgICAjIGFuZCBtYWtlcyB0aGUgbG9nIGZpbGUgdXNlbGVzcworICAgICAgICBpZiBzZWxmLnN0YXR1czoKKyAgICAgICAgICAgIGxvdXQgPSAiXG4iLmpvaW4oc2VsZi5vdXRwdXQuc3BsaXRsaW5lcygpWy0yMDpdKQorICAgICAgICAgICAgc2VsZi5sb2cuZGVidWcoIkxhc3QgMjAgbGluZXM6XG4lcyIgJSBsb3V0KQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorICAgIHBhc3MKKworCitkZWYgcnVuQ21kKGNvbW1hbmQsIGlnbm9yZV9zdGF0dXM9RmFsc2UsIHRpbWVvdXQ9Tm9uZSwgYXNzZXJ0X2Vycm9yPVRydWUsICoqb3B0aW9ucyk6CisgICAgcmVzdWx0ID0gUmVzdWx0KCkKKworICAgIGNtZCA9IENvbW1hbmQoY29tbWFuZCwgdGltZW91dD10aW1lb3V0LCAqKm9wdGlvbnMpCisgICAgY21kLnJ1bigpCisKKyAgICByZXN1bHQuY29tbWFuZCA9IGNvbW1hbmQKKyAgICByZXN1bHQuc3RhdHVzID0gY21kLnN0YXR1cworICAgIHJlc3VsdC5vdXRwdXQgPSBjbWQub3V0cHV0CisgICAgcmVzdWx0LnBpZCA9IGNtZC5wcm9jZXNzLnBpZAorCisgICAgaWYgcmVzdWx0LnN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgIGlmIGFzc2VydF9lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQ6XG4lcyIgJSAoY29tbWFuZCwgcmVzdWx0LnN0YXR1cywgcmVzdWx0Lm91dHB1dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3IocmVzdWx0LnN0YXR1cywgY29tbWFuZCwgcmVzdWx0Lm91dHB1dCkKKworICAgIHJldHVybiByZXN1bHQKKworCitkZWYgYml0YmFrZShjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlLCB0aW1lb3V0PU5vbmUsIHBvc3Rjb25maWc9Tm9uZSwgKipvcHRpb25zKToKKworICAgIGlmIHBvc3Rjb25maWc6CisgICAgICAgIHBvc3Rjb25maWdfZmlsZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgnQlVJTERESVInKSwgJ29lcWEtcG9zdC5jb25mJykKKyAgICAgICAgZnRvb2xzLndyaXRlX2ZpbGUocG9zdGNvbmZpZ19maWxlLCBwb3N0Y29uZmlnKQorICAgICAgICBleHRyYV9hcmdzID0gIi1SICVzIiAlIHBvc3Rjb25maWdfZmlsZQorICAgIGVsc2U6CisgICAgICAgIGV4dHJhX2FyZ3MgPSAiIgorCisgICAgaWYgaXNpbnN0YW5jZShjb21tYW5kLCBiYXNlc3RyaW5nKToKKyAgICAgICAgY21kID0gImJpdGJha2UgIiArIGV4dHJhX2FyZ3MgKyAiICIgKyBjb21tYW5kCisgICAgZWxzZToKKyAgICAgICAgY21kID0gWyAiYml0YmFrZSIgXSArIFthIGZvciBhIGluIChjb21tYW5kICsgZXh0cmFfYXJncy5zcGxpdCgiICIpKSBpZiBhIG5vdCBpbiBbIiJdXQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcnVuQ21kKGNtZCwgaWdub3JlX3N0YXR1cywgdGltZW91dCwgKipvcHRpb25zKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHBvc3Rjb25maWc6CisgICAgICAgICAgICBvcy5yZW1vdmUocG9zdGNvbmZpZ19maWxlKQorCisKK2RlZiBnZXRfYmJfZW52KHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIGlmIHRhcmdldDoKKyAgICAgICAgcmV0dXJuIGJpdGJha2UoIi1lICVzIiAlIHRhcmdldCwgcG9zdGNvbmZpZz1wb3N0Y29uZmlnKS5vdXRwdXQKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYml0YmFrZSgiLWUiLCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpLm91dHB1dAorCitkZWYgZ2V0X2JiX3Zhcih2YXIsIHRhcmdldD1Ob25lLCBwb3N0Y29uZmlnPU5vbmUpOgorICAgIHZhbCA9IE5vbmUKKyAgICBiYmVudiA9IGdldF9iYl9lbnYodGFyZ2V0LCBwb3N0Y29uZmlnPXBvc3Rjb25maWcpCisgICAgbGFzdGxpbmUgPSBOb25lCisgICAgZm9yIGxpbmUgaW4gYmJlbnYuc3BsaXRsaW5lcygpOgorICAgICAgICBpZiByZS5zZWFyY2goIl4oZXhwb3J0ICk/JXM9IiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICB2YWwgPSBsaW5lLnNwbGl0KCc9JywgMSlbMV0KKyAgICAgICAgICAgIHZhbCA9IHZhbC5zdHJpcCgnXCInKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxpZiByZS5tYXRjaCgidW5zZXQgJXMkIiAlIHZhciwgbGluZSk6CisgICAgICAgICAgICAjIEhhbmRsZSBbdW5leHBvcnRdIHZhcmlhYmxlcworICAgICAgICAgICAgaWYgbGFzdGxpbmUuc3RhcnRzd2l0aCgnIyAgICInKToKKyAgICAgICAgICAgICAgICB2YWwgPSBsYXN0bGluZS5zcGxpdCgnXCInKVsxXQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxhc3RsaW5lID0gbGluZQorICAgIHJldHVybiB2YWwKKworZGVmIGdldF90ZXN0X2xheWVyKCk6CisgICAgbGF5ZXJzID0gZ2V0X2JiX3ZhcigiQkJMQVlFUlMiKS5zcGxpdCgpCisgICAgdGVzdGxheWVyID0gTm9uZQorICAgIGZvciBsIGluIGxheWVyczoKKyAgICAgICAgaWYgJ34nIGluIGw6CisgICAgICAgICAgICBsID0gb3MucGF0aC5leHBhbmR1c2VyKGwpCisgICAgICAgIGlmICIvbWV0YS1zZWxmdGVzdCIgaW4gbCBhbmQgb3MucGF0aC5pc2RpcihsKToKKyAgICAgICAgICAgIHRlc3RsYXllciA9IGwKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHRlc3RsYXllcgorCitkZWYgY3JlYXRlX3RlbXBfbGF5ZXIodGVtcGxheWVyZGlyLCB0ZW1wbGF5ZXJuYW1lLCBwcmlvcml0eT05OTksIHJlY2lwZXBhdGhzcGVjPSdyZWNpcGVzLSovKicpOgorICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJykpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wbGF5ZXJkaXIsICdjb25mJywgJ2xheWVyLmNvbmYnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCdCQlBBVEggLj0gIjoke0xBWUVSRElSfSJcbicpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRVMgKz0gIiR7TEFZRVJESVJ9LyVzLyouYmIgXFwnICUgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGYud3JpdGUoJyAgICAgICAgICAgICR7TEFZRVJESVJ9LyVzLyouYmJhcHBlbmQiXG4nICUgcmVjaXBlcGF0aHNwZWMpCisgICAgICAgIGYud3JpdGUoJ0JCRklMRV9DT0xMRUNUSU9OUyArPSAiJXMiXG4nICUgdGVtcGxheWVybmFtZSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fJXMgPSAiXiR7TEFZRVJESVJ9LyJcbicgJSB0ZW1wbGF5ZXJuYW1lKQorICAgICAgICBmLndyaXRlKCdCQkZJTEVfUFJJT1JJVFlfJXMgPSAiJWQiXG4nICUgKHRlbXBsYXllcm5hbWUsIHByaW9yaXR5KSkKKyAgICAgICAgZi53cml0ZSgnQkJGSUxFX1BBVFRFUk5fSUdOT1JFX0VNUFRZXyVzID0gIjEiXG4nICUgdGVtcGxheWVybmFtZSkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bnFlbXUocG4sIHRlc3QpOgorCisgICAgaW1wb3J0IGJiLnRpbmZvaWwKKyAgICBpbXBvcnQgYmIuYnVpbGQKKworICAgIHRpbmZvaWwgPSBiYi50aW5mb2lsLlRpbmZvaWwoKQorICAgIHRpbmZvaWwucHJlcGFyZShGYWxzZSkKKyAgICB0cnk6CisgICAgICAgIHRpbmZvaWwubG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgaW1wb3J0IG9lcWEudGFyZ2V0Y29udHJvbAorICAgICAgICB0aW5mb2lsLmNvbmZpZ19kYXRhLnNldFZhcigiVEVTVF9MT0dfRElSIiwgIiR7V09SS0RJUn0vdGVzdGltYWdlIikKKyAgICAgICAgdGluZm9pbC5jb25maWdfZGF0YS5zZXRWYXIoIlRFU1RfUUVNVUJPT1RfVElNRU9VVCIsICIxMDAwIikKKyAgICAgICAgaW1wb3J0IG9lLnJlY2lwZXV0aWxzCisgICAgICAgIHJlY2lwZWZpbGUgPSBvZS5yZWNpcGV1dGlscy5wbl90b19yZWNpcGUodGluZm9pbC5jb29rZXIsIHBuKQorICAgICAgICByZWNpcGVkYXRhID0gb2UucmVjaXBldXRpbHMucGFyc2VfcmVjaXBlKHJlY2lwZWZpbGUsIFtdLCB0aW5mb2lsLmNvbmZpZ19kYXRhKQorCisgICAgICAgICMgVGhlIFFlbXVSdW5uZXIgbG9nIGlzIHNhdmVkIG91dCwgYnV0IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzIGF0IHRoZSByaWdodAorICAgICAgICAjIGxvZyBsZXZlbCAoYW5kIHRoZW4gZW5zdXJlIHRoYXQgc2luY2UgaXQncyBhIGNoaWxkIG9mIHRoZSBCaXRCYWtlIGxvZ2dlciwKKyAgICAgICAgIyB3ZSBkaXNhYmxlIHByb3BhZ2F0aW9uIHNvIHdlIGRvbid0IHRoZW4gc2VlIHRoZSBsb2cgZXZlbnRzIG9uIHRoZSBjb25zb2xlKQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignQml0QmFrZS5RZW11UnVubmVyJykKKyAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBGYWxzZQorICAgICAgICBsb2dkaXIgPSByZWNpcGVkYXRhLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKworICAgICAgICBxZW11ID0gb2VxYS50YXJnZXRjb250cm9sLlFlbXVUYXJnZXQocmVjaXBlZGF0YSkKKyAgICBmaW5hbGx5OgorICAgICAgICAjIFdlIG5lZWQgdG8gc2h1dCBkb3duIHRpbmZvaWwgZWFybHkgaGVyZSBpbiBjYXNlIHdlIGFjdHVhbGx5IHdhbnQKKyAgICAgICAgIyB0byBydW4gdGluZm9pbC11c2luZyB1dGlsaXRpZXMgd2l0aCB0aGUgcnVubmluZyBRRU1VIGluc3RhbmNlLgorICAgICAgICAjIEx1Y2tpbHkgUWVtdVRhcmdldCBkb2Vzbid0IG5lZWQgaXQgYWZ0ZXIgdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICB0aW5mb2lsLnNodXRkb3duKCkKKworICAgIHRyeToKKyAgICAgICAgcWVtdS5kZXBsb3koKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBxZW11LnN0YXJ0KCkKKyAgICAgICAgZXhjZXB0IGJiLmJ1aWxkLkZ1bmNGYWlsZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0byBzdGFydCBRRU1VIC0gc2VlIHRoZSBsb2dzIGluICVzJyAlIGxvZ2RpcikKKworICAgICAgICB5aWVsZCBxZW11CisKKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBxZW11LnN0b3AoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2RlY29yYXRvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyYTg4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvZGVjb3JhdG9ycy5weQpAQCAtMCwwICsxLDIyMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgU29tZSBjdXN0b20gZGVjb3JhdG9ycyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHVuaXR0ZXN0cworIyBNb3N0IHVzZWZ1bCBpcyBza2lwVW5sZXNzUGFzc2VkIHdoaWNoIGNhbiBiZSB1c2VkIGZvcgorIyBjcmVhdGluZyBkZXBlbmRlY2llcyBiZXR3ZWVuIHR3byB0ZXN0IG1ldGhvZHMuCisKK2ltcG9ydCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHNpZ25hbAorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCisKKyNnZXQgdGhlICJyZXN1bHQiIG9iamVjdCBmcm9tIG9uZSBvZiB0aGUgdXBwZXIgZnJhbWVzIHByb3ZpZGVkIHRoYXQgb25lIG9mIHRoZXNlIHVwcGVyIGZyYW1lcyBpcyBhIHVuaXR0ZXN0LmNhc2UgZnJhbWUKK2NsYXNzIGdldFJlc3VsdHMob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICNkeW5hbWljYWxseSBkZXRlcm1pbmUgdGhlIHVuaXR0ZXN0LmNhc2UgZnJhbWUgYW5kIHVzZSBpdCB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIHRlc3QgbWV0aG9kCisgICAgICAgIGlkZW50ID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQKKyAgICAgICAgdXBwZXJmID0gc3lzLl9jdXJyZW50X2ZyYW1lcygpW2lkZW50XQorICAgICAgICB3aGlsZSAodXBwZXJmLmZfZ2xvYmFsc1snX19uYW1lX18nXSAhPSAndW5pdHRlc3QuY2FzZScpOgorICAgICAgICAgICAgdXBwZXJmID0gdXBwZXJmLmZfYmFjaworCisgICAgICAgIGRlZiBoYW5kbGVMaXN0KGl0ZW1zKToKKyAgICAgICAgICAgIHJldCA9IFtdCisgICAgICAgICAgICAjIGl0ZW1zIGlzIGEgbGlzdCBvZiB0dXBsZXMsICh0ZXN0LCBmYWlsdXJlKSBvciAoX0Vycm9ySGFuZGxlcigpLCBFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIGZvciBpIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIHMgPSBpWzBdLmlkKCkKKyAgICAgICAgICAgICAgICAjSGFuZGxlIHRoZSBfRXJyb3JIb2xkZXIgb2JqZWN0cyBmcm9tIHNraXBNb2R1bGUgZmFpbHVyZXMKKyAgICAgICAgICAgICAgICBpZiAic2V0VXBNb2R1bGUgKCIgaW4gczoKKyAgICAgICAgICAgICAgICAgICAgcmV0LmFwcGVuZChzLnJlcGxhY2UoInNldFVwTW9kdWxlICgiLCAiIikucmVwbGFjZSgiKSIsIiIpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldC5hcHBlbmQocykKKyAgICAgICAgICAgIHJldHVybiByZXQKKyAgICAgICAgc2VsZi5mYWlsbGlzdCA9IGhhbmRsZUxpc3QodXBwZXJmLmZfbG9jYWxzWydyZXN1bHQnXS5mYWlsdXJlcykKKyAgICAgICAgc2VsZi5lcnJvcmxpc3QgPSBoYW5kbGVMaXN0KHVwcGVyZi5mX2xvY2Fsc1sncmVzdWx0J10uZXJyb3JzKQorICAgICAgICBzZWxmLnNraXBsaXN0ID0gaGFuZGxlTGlzdCh1cHBlcmYuZl9sb2NhbHNbJ3Jlc3VsdCddLnNraXBwZWQpCisKKyAgICBkZWYgZ2V0RmFpbExpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZhaWxsaXN0CisKKyAgICBkZWYgZ2V0RXJyb3JMaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lcnJvcmxpc3QKKworICAgIGRlZiBnZXRTa2lwTGlzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2tpcGxpc3QKKworY2xhc3Mgc2tpcElmRmFpbHVyZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdGVzdGNhc2UpOgorICAgICAgICBzZWxmLnRlc3RjYXNlID0gdGVzdGNhc2UKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLGYpOgorICAgICAgICBkZWYgd3JhcHBlZF9mKCphcmdzKToKKyAgICAgICAgICAgIHJlcyA9IGdldFJlc3VsdHMoKQorICAgICAgICAgICAgaWYgc2VsZi50ZXN0Y2FzZSBpbiAocmVzLmdldEZhaWxMaXN0KCkgb3IgcmVzLmdldEVycm9yTGlzdCgpKToKKyAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVGVzdGNhc2UgZGVwZW5kZW5jeSBub3QgbWV0OiAlcyIgJSBzZWxmLnRlc3RjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi5fX25hbWVfXyA9IGYuX19uYW1lX18KKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyBza2lwSWZTa2lwcGVkKG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZix0ZXN0Y2FzZSk6CisgICAgICAgIHNlbGYudGVzdGNhc2UgPSB0ZXN0Y2FzZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsZik6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmVzID0gZ2V0UmVzdWx0cygpCisgICAgICAgICAgICBpZiBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRTa2lwTGlzdCgpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJUZXN0Y2FzZSBkZXBlbmRlbmN5IG5vdCBtZXQ6ICVzIiAlIHNlbGYudGVzdGNhc2UpCisgICAgICAgICAgICByZXR1cm4gZigqYXJncykKKyAgICAgICAgd3JhcHBlZF9mLl9fbmFtZV9fID0gZi5fX25hbWVfXworICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisKK2NsYXNzIHNraXBVbmxlc3NQYXNzZWQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZixmKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZigqYXJncyk6CisgICAgICAgICAgICByZXMgPSBnZXRSZXN1bHRzKCkKKyAgICAgICAgICAgIGlmIHNlbGYudGVzdGNhc2UgaW4gcmVzLmdldFNraXBMaXN0KCkgb3IgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RjYXNlIGluIHJlcy5nZXRGYWlsTGlzdCgpIG9yIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0Y2FzZSBpbiByZXMuZ2V0RXJyb3JMaXN0KCk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlRlc3RjYXNlIGRlcGVuZGVuY3kgbm90IG1ldDogJXMiICUgc2VsZi50ZXN0Y2FzZSkKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzKQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmLl9fbmFtZV9fCisgICAgICAgIHdyYXBwZWRfZi5fZGVwZW5kc19vbiA9IHNlbGYudGVzdGNhc2UKKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZgorCitjbGFzcyB0ZXN0Y2FzZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYyk6CisgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MpCisgICAgICAgIHdyYXBwZWRfZi50ZXN0X2Nhc2UgPSBzZWxmLnRlc3RfY2FzZQorICAgICAgICB3cmFwcGVkX2YuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgICAgIHJldHVybiB3cmFwcGVkX2YKKworY2xhc3MgTm9QYXJzaW5nRmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKyAgICBkZWYgZmlsdGVyKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiByZWNvcmQubGV2ZWxubyA9PSAxMDAKKworZGVmIExvZ1Jlc3VsdHMob3JpZ2luYWxfY2xhc3MpOgorICAgIG9yaWdfbWV0aG9kID0gb3JpZ2luYWxfY2xhc3MucnVuCisKKyAgICAjcmV3cml0ZSB0aGUgcnVuIG1ldGhvZCBvZiB1bml0dGVzdC5UZXN0Q2FzZSB0byBhZGQgdGVzdGNhc2UgbG9nZ2luZworICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0LCAqYXJncywgKiprd3MpOgorICAgICAgICBvcmlnX21ldGhvZChzZWxmLCByZXN1bHQsICphcmdzLCAqKmt3cykKKyAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKyAgICAgICAgI2lmIHRlc3QgY2FzZSBpcyBkZWNvcmF0ZWQgdGhlbiB1c2UgaXQncyBudW1iZXIsIGVsc2UgdXNlIGl0J3MgbmFtZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0X2Nhc2UgPSB0ZXN0TWV0aG9kLnRlc3RfY2FzZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB0ZXN0X2Nhc2UgPSBzZWxmLl90ZXN0TWV0aG9kTmFtZQorCisgICAgICAgIGNsYXNzX25hbWUgPSBzdHIodGVzdE1ldGhvZC5pbV9jbGFzcykuc3BsaXQoIiciKVsxXQorCisgICAgICAgICNjcmVhdGUgY3VzdG9tIGxvZ2dpbmcgbGV2ZWwgZm9yIGZpbHRlcmluZy4KKyAgICAgICAgY3VzdG9tX2xvZ19sZXZlbCA9IDEwMAorICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShjdXN0b21fbG9nX2xldmVsLCAnUkVTVUxUUycpCisgICAgICAgIGNhbGxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisKKyAgICAgICAgZGVmIHJlc3VsdHMoc2VsZiwgbWVzc2FnZSwgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgICAgIGlmIHNlbGYuaXNFbmFibGVkRm9yKGN1c3RvbV9sb2dfbGV2ZWwpOgorICAgICAgICAgICAgICAgIHNlbGYubG9nKGN1c3RvbV9sb2dfbGV2ZWwsIG1lc3NhZ2UsICphcmdzLCAqKmt3cykKKyAgICAgICAgbG9nZ2luZy5Mb2dnZXIucmVzdWx0cyA9IHJlc3VsdHMKKworICAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPW9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwncmVzdWx0cy0nK2NhbGxlcisnLmxvZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSd3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyVIOiVNOiVTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD1jdXN0b21fbG9nX2xldmVsKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBsb2dnaW5nLnJvb3QuaGFuZGxlcnM6CisgICAgICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcihOb1BhcnNpbmdGaWx0ZXIoKSkKKyAgICAgICAgbG9jYWxfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoY2FsbGVyKQorCisgICAgICAgICNjaGVjayBzdGF0dXMgb2YgdGVzdHMgYW5kIHJlY29yZCBpdAorCisgICAgICAgIGZvciAobmFtZSwgbXNnKSBpbiByZXN1bHQuZXJyb3JzOgorICAgICAgICAgICAgaWYgKHNlbGYuX3Rlc3RNZXRob2ROYW1lID09IHN0cihuYW1lKS5zcGxpdCgnICcpWzBdKSBhbmQgKGNsYXNzX25hbWUgaW4gc3RyKG5hbWUpLnNwbGl0KCcgJylbMV0pOgorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6IEVSUk9SIikKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOlxuIittc2cpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgZm9yIChuYW1lLCBtc2cpIGluIHJlc3VsdC5mYWlsdXJlczoKKyAgICAgICAgICAgIGlmIChzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBzdHIobmFtZSkuc3BsaXQoJyAnKVswXSkgYW5kIChjbGFzc19uYW1lIGluIHN0cihuYW1lKS5zcGxpdCgnICcpWzFdKToKKyAgICAgICAgICAgICAgICBsb2NhbF9sb2cucmVzdWx0cygiVGVzdGNhc2UgIitzdHIodGVzdF9jYXNlKSsiOiBGQUlMRUQiKQorICAgICAgICAgICAgICAgIGxvY2FsX2xvZy5yZXN1bHRzKCJUZXN0Y2FzZSAiK3N0cih0ZXN0X2Nhc2UpKyI6XG4iK21zZykKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorICAgICAgICBmb3IgKG5hbWUsIG1zZykgaW4gcmVzdWx0LnNraXBwZWQ6CisgICAgICAgICAgICBpZiAoc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gc3RyKG5hbWUpLnNwbGl0KCcgJylbMF0pIGFuZCAoY2xhc3NfbmFtZSBpbiBzdHIobmFtZSkuc3BsaXQoJyAnKVsxXSk6CisgICAgICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogU0tJUFBFRCIpCisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgaWYgcGFzc2VkOgorICAgICAgICAgICAgbG9jYWxfbG9nLnJlc3VsdHMoIlRlc3RjYXNlICIrc3RyKHRlc3RfY2FzZSkrIjogUEFTU0VEIikKKworICAgIG9yaWdpbmFsX2NsYXNzLnJ1biA9IHJ1bgorICAgIHJldHVybiBvcmlnaW5hbF9jbGFzcworCitjbGFzcyBUaW1lT3V0KEJhc2VFeGNlcHRpb24pOgorICAgIHBhc3MKKworZGVmIHRpbWVvdXQoc2Vjb25kcyk6CisgICAgZGVmIGRlY29yYXRvcihmbik6CisgICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKToKKyAgICAgICAgICAgIEB3cmFwcyhmbikKKyAgICAgICAgICAgIGRlZiB3cmFwcGVkX2YoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIGN1cnJlbnRfZnJhbWUgPSBzeXMuX2dldGZyYW1lKCkKKyAgICAgICAgICAgICAgICBkZWYgcmFpc2VUaW1lT3V0KHNpZ25hbCwgZnJhbWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBmcmFtZSBpcyBub3QgY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVPdXQoJyVzIHNlY29uZHMnICUgc2Vjb25kcykKKyAgICAgICAgICAgICAgICBwcmV2X2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCByYWlzZVRpbWVPdXQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBwcmV2X2hhbmRsZXIpCisgICAgICAgICAgICByZXR1cm4gd3JhcHBlZF9mCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZm4KKyAgICByZXR1cm4gZGVjb3JhdG9yCisKK19fdGFnX3ByZWZpeCA9ICJ0YWdfXyIKK2RlZiB0YWcoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAiIiJEZWNvcmF0b3IgdGhhdCBhZGRzIGF0dHJpYnV0ZXMgdG8gY2xhc3NlcyBvciBmdW5jdGlvbnMKKyAgICBmb3IgdXNlIHdpdGggdGhlIEF0dHJpYnV0ZSAoLWEpIHBsdWdpbi4KKyAgICAiIiIKKyAgICBkZWYgd3JhcF9vYihvYik6CisgICAgICAgIGZvciBuYW1lIGluIGFyZ3M6CisgICAgICAgICAgICBzZXRhdHRyKG9iLCBfX3RhZ19wcmVmaXggKyBuYW1lLCBUcnVlKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4ga3dhcmdzLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYiwgX190YWdfcHJlZml4ICsgbmFtZSwgdmFsdWUpCisgICAgICAgIHJldHVybiBvYgorICAgIHJldHVybiB3cmFwX29iCisKK2RlZiBnZXR0YWcob2JqLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAga2V5ID0gX190YWdfcHJlZml4ICsga2V5CisgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwga2V5LCBkZWZhdWx0KQorICAgIHRjX21ldGhvZCA9IGdldGF0dHIob2JqLCBvYmouX3Rlc3RNZXRob2ROYW1lKQorICAgIHJldCA9IGdldGF0dHIodGNfbWV0aG9kLCBrZXksIGdldGF0dHIob2JqLCBrZXksIGRlZmF1bHQpKQorICAgIHJldHVybiByZXQKKworZGVmIGdldEFsbFRhZ3Mob2JqKToKKyAgICBkZWYgX19nZXR0YWdzKG8pOgorICAgICAgICByID0ge2tbbGVuKF9fdGFnX3ByZWZpeCk6XTpnZXRhdHRyKG8saykgZm9yIGsgaW4gZGlyKG8pIGlmIGsuc3RhcnRzd2l0aChfX3RhZ19wcmVmaXgpfQorICAgICAgICByZXR1cm4gcgorICAgIGlmIG5vdCBpc2luc3RhbmNlKG9iaiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICByZXR1cm4gX19nZXR0YWdzKG9iaikKKyAgICB0Y19tZXRob2QgPSBnZXRhdHRyKG9iaiwgb2JqLl90ZXN0TWV0aG9kTmFtZSkKKyAgICByZXQgPSBfX2dldHRhZ3Mob2JqKQorICAgIHJldC51cGRhdGUoX19nZXR0YWdzKHRjX21ldGhvZCkpCisgICAgcmV0dXJuIHJldApkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9kdW1wLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZTg3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2R1bXAucHkKQEAgLTAsMCArMSw4NyBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgZXJybm8KK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGl0ZXJ0b29scworZnJvbSBjb21tYW5kcyBpbXBvcnQgcnVuQ21kCisKK2RlZiBnZXRfaG9zdF9kdW1wZXIoZCk6CisgICAgY21kcyA9IGQuZ2V0VmFyKCJ0ZXN0aW1hZ2VfZHVtcF9ob3N0IiwgVHJ1ZSkKKyAgICBwYXJlbnRfZGlyID0gZC5nZXRWYXIoIlRFU1RJTUFHRV9EVU1QX0RJUiIsIFRydWUpCisgICAgcmV0dXJuIEhvc3REdW1wZXIoY21kcywgcGFyZW50X2RpcikKKworCitjbGFzcyBCYXNlRHVtcGVyKG9iamVjdCk6CisgICAgIiIiIEJhc2UgY2xhc3MgdG8gZHVtcCBjb21tYW5kcyBmcm9tIGhvc3QvdGFyZ2V0ICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIpOgorICAgICAgICBzZWxmLmNtZHMgPSBbXQorICAgICAgICBzZWxmLnBhcmVudF9kaXIgPSBwYXJlbnRfZGlyCisgICAgICAgIGlmIG5vdCBjbWRzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGZvciBjbWQgaW4gY21kcy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGNtZCA9IGNtZC5sc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGNtZCBvciBjbWRbMF0gPT0gJyMnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmNtZHMuYXBwZW5kKGNtZCkKKworICAgIGRlZiBjcmVhdGVfZGlyKHNlbGYsIGRpcl9zdWZmaXgpOgorICAgICAgICBkdW1wX3N1YmRpciA9ICgiJXNfJXMiICUgKAorICAgICAgICAgICAgICAgIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnN0cmZ0aW1lKCclWSVtJWQlSCVNJyksCisgICAgICAgICAgICAgICAgZGlyX3N1ZmZpeCkpCisgICAgICAgIGR1bXBfZGlyID0gb3MucGF0aC5qb2luKHNlbGYucGFyZW50X2RpciwgZHVtcF9zdWJkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKGR1bXBfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgorICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKworICAgIGRlZiBfd3JpdGVfZHVtcChzZWxmLCBjb21tYW5kLCBvdXRwdXQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIEhvc3REdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gImhvc3QiCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLCBUYXJnZXREdW1wZXIpOgorICAgICAgICAgICAgcHJlZml4ID0gInRhcmdldCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICJ1bmtub3duIgorICAgICAgICBmb3IgaSBpbiBpdGVydG9vbHMuY291bnQoKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gIiVzXyUwMmRfJXMiICUgKHByZWZpeCwgaSwgY29tbWFuZCkKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHNlbGYuZHVtcF9kaXIsIGZpbGVuYW1lKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICd3JykgYXMgZHVtcF9maWxlOgorICAgICAgICAgICAgZHVtcF9maWxlLndyaXRlKG91dHB1dCkKKworCitjbGFzcyBIb3N0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0aGUgaG9zdCBydW5uaW5nIHRoZSB0ZXN0cyAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbWRzLCBwYXJlbnRfZGlyKToKKyAgICAgICAgc3VwZXIoSG9zdER1bXBlciwgc2VsZikuX19pbml0X18oY21kcywgcGFyZW50X2RpcikKKworICAgIGRlZiBkdW1wX2hvc3Qoc2VsZiwgZHVtcF9kaXI9IiIpOgorICAgICAgICBpZiBkdW1wX2RpcjoKKyAgICAgICAgICAgIHNlbGYuZHVtcF9kaXIgPSBkdW1wX2RpcgorICAgICAgICBmb3IgY21kIGluIHNlbGYuY21kczoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bkNtZChjbWQsIGlnbm9yZV9zdGF0dXM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIHJlc3VsdC5vdXRwdXQpCisKKworY2xhc3MgVGFyZ2V0RHVtcGVyKEJhc2VEdW1wZXIpOgorICAgICIiIiBDbGFzcyB0byBnZXQgZHVtcHMgZnJvbSB0YXJnZXQsIGl0IG9ubHkgd29ya3Mgd2l0aCBRZW11UnVubmVyICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMsIHBhcmVudF9kaXIsIHFlbXVydW5uZXIpOgorICAgICAgICBzdXBlcihUYXJnZXREdW1wZXIsIHNlbGYpLl9faW5pdF9fKGNtZHMsIHBhcmVudF9kaXIpCisgICAgICAgIHNlbGYucnVubmVyID0gcWVtdXJ1bm5lcgorCisgICAgZGVmIGR1bXBfdGFyZ2V0KHNlbGYsIGR1bXBfZGlyPSIiKToKKyAgICAgICAgaWYgZHVtcF9kaXI6CisgICAgICAgICAgICBzZWxmLmR1bXBfZGlyID0gZHVtcF9kaXIKKyAgICAgICAgZm9yIGNtZCBpbiBzZWxmLmNtZHM6CisgICAgICAgICAgICAjIFdlIGNhbiBjb250aW51ZSB3aXRoIHRoZSB0ZXN0aW5nIGlmIHNlcmlhbCBjb21tYW5kcyBmYWlsCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVubmVyLnJ1bl9zZXJpYWwoY21kKQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2R1bXAoY21kLnNwbGl0KClbMF0sIG91dHB1dCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwcmludCgiVHJpZWQgdG8gZHVtcCBpbmZvIGZyb20gdGFyZ2V0IGJ1dCAiCisgICAgICAgICAgICAgICAgICAgICAgICAic2VyaWFsIGNvbnNvbGUgZmFpbGVkIikKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5IGIvbWV0YS9saWIvb2VxYS91dGlscy9mdG9vbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlYmUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvZnRvb2xzLnB5CkBAIC0wLDAgKzEsMjcgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCisKK2RlZiB3cml0ZV9maWxlKHBhdGgsIGRhdGEpOgorICAgIHdkYXRhID0gZGF0YS5yc3RyaXAoKSArICJcbiIKKyAgICB3aXRoIG9wZW4ocGF0aCwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgYXBwZW5kX2ZpbGUocGF0aCwgZGF0YSk6CisgICAgd2RhdGEgPSBkYXRhLnJzdHJpcCgpICsgIlxuIgorICAgIHdpdGggb3BlbihwYXRoLCAiYSIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHdkYXRhKQorCitkZWYgcmVhZF9maWxlKHBhdGgpOgorICAgIGRhdGEgPSBOb25lCisgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGY6CisgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgIHJldHVybiBkYXRhCisKK2RlZiByZW1vdmVfZnJvbV9maWxlKHBhdGgsIGRhdGEpOgorICAgIGxpbmVzID0gcmVhZF9maWxlKHBhdGgpLnNwbGl0bGluZXMoKQorICAgIHJtZGF0YSA9IGRhdGEuc3RyaXAoKS5zcGxpdGxpbmVzKCkKKyAgICBmb3IgbCBpbiBybWRhdGE6CisgICAgICAgIGZvciBjIGluIHJhbmdlKDAsIGxpbmVzLmNvdW50KGwpKToKKyAgICAgICAgICAgIGkgPSBsaW5lcy5pbmRleChsKQorICAgICAgICAgICAgZGVsKGxpbmVzW2ldKQorICAgIHdyaXRlX2ZpbGUocGF0aCwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvaHR0cHNlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjUxOGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9saWIvb2VxYS91dGlscy9odHRwc2VydmVyLnB5CkBAIC0wLDAgKzEsMzUgQEAKK2ltcG9ydCBTaW1wbGVIVFRQU2VydmVyCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKKworY2xhc3MgSFRUUFNlcnZlcihTaW1wbGVIVFRQU2VydmVyLkJhc2VIVFRQU2VydmVyLkhUVFBTZXJ2ZXIpOgorCisgICAgZGVmIHNlcnZlcl9zdGFydChzZWxmLCByb290X2Rpcik6CisgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgc2lnbmFsLlNJR19ERkwpCisgICAgICAgIG9zLmNoZGlyKHJvb3RfZGlyKQorICAgICAgICBzZWxmLnNlcnZlX2ZvcmV2ZXIoKQorCitjbGFzcyBIVFRQUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdF9zdHIsICphcmdzKToKKyAgICAgICAgcGFzcworCitjbGFzcyBIVFRQU2VydmljZShvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RfZGlyLCBob3N0PScnKToKKyAgICAgICAgc2VsZi5yb290X2RpciA9IHJvb3RfZGlyCisgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKKyAgICAgICAgc2VsZi5wb3J0ID0gMAorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IEhUVFBTZXJ2ZXIoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwgSFRUUFJlcXVlc3RIYW5kbGVyKQorICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0CisgICAgICAgIHNlbGYucHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZWxmLnNlcnZlci5zZXJ2ZXJfc3RhcnQsIGFyZ3M9W3NlbGYucm9vdF9kaXJdKQorICAgICAgICBzZWxmLnByb2Nlc3Muc3RhcnQoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9jbG9zZSgpCisgICAgICAgIHNlbGYucHJvY2Vzcy50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLnByb2Nlc3Muam9pbigpCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvbG9ncGFyc2VyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3YjUwMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL2xvZ3BhcnNlci5weQpAQCAtMCwwICsxLDEyNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgZnRvb2xzCisKKworIyBBIHBhcnNlciB0aGF0IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5IHdlYXRoZXIgYSBsaW5lIGlzIGEgdGVzdCByZXN1bHQgb3IgYSBzZWN0aW9uIHN0YXRlbWVudC4KK2NsYXNzIExwYXJzZXIob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0XzBfcGFzc19yZWdleCwgdGVzdF8wX2ZhaWxfcmVnZXgsIHNlY3Rpb25fMF9iZWdpbl9yZWdleD1Ob25lLCBzZWN0aW9uXzBfZW5kX3JlZ2V4PU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBhcmd1bWVudHMgZGljdGlvbmFyeQorICAgICAgICBpZiBrd2FyZ3M6CisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBrd2FyZ3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IHt9CisKKyAgICAgICAgIyBBZGQgdGhlIGRlZmF1bHQgYXJncyB0byB0aGUgZGljdGlvbmFyeQorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9wYXNzX3JlZ2V4J10gPSB0ZXN0XzBfcGFzc19yZWdleAorICAgICAgICBzZWxmLmFyZ3NbJ3Rlc3RfMF9mYWlsX3JlZ2V4J10gPSB0ZXN0XzBfZmFpbF9yZWdleAorICAgICAgICBpZiBzZWN0aW9uXzBfYmVnaW5fcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9iZWdpbl9yZWdleCddID0gc2VjdGlvbl8wX2JlZ2luX3JlZ2V4CisgICAgICAgIGlmIHNlY3Rpb25fMF9lbmRfcmVnZXg6CisgICAgICAgICAgICBzZWxmLmFyZ3NbJ3NlY3Rpb25fMF9lbmRfcmVnZXgnXSA9IHNlY3Rpb25fMF9lbmRfcmVnZXgKKworICAgICAgICBzZWxmLnRlc3RfcG9zc2libGVfc3RhdHVzID0gWydwYXNzJywgJ2ZhaWwnLCAnZXJyb3InXQorICAgICAgICBzZWxmLnNlY3Rpb25fcG9zc2libGVfc3RhdHVzID0gWydiZWdpbicsICdlbmQnXQorCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSBGYWxzZQorCisKKyAgICAjIEluaXRpYWxpemUgdGhlIHBhcnNlciB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAgICBkZWYgaW5pdChzZWxmKToKKworICAgICAgICAjIGV4dHJhIGFyZ3VtZW50cyBjYW4gYmUgYWRkZWQgYnkgdGhlIHVzZXIgdG8gZGVmaW5lIG5ldyB0ZXN0IGFuZCBzZWN0aW9uIGNhdGVnb3JpZXMuIFRoZXkgbXVzdCBmb2xsb3cgYSBwcmUtZGVmaW5lZCBwYXR0ZXJuOiA8dHlwZT5fPGNhdGVnb3J5X25hbWU+XzxzdGF0dXM+X3JlZ2V4CisgICAgICAgIHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuID0gIl50ZXN0XyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi50ZXN0X3Bvc3NpYmxlX3N0YXR1cykpCisgICAgICAgIHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuID0gIl5zZWN0aW9uXyguKz8pXyglcylfcmVnZXgiICUgJ3wnLmpvaW4obWFwKHN0ciwgc2VsZi5zZWN0aW9uX3Bvc3NpYmxlX3N0YXR1cykpCisKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSB0ZXN0IGFuZCBzZWN0aW9uIHJlZ2V4IGRpY3Rpb25hcmllcworICAgICAgICBzZWxmLnRlc3RfcmVnZXggPSB7fQorICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXggPXt9CisKKyAgICAgICAgZm9yIGFyZywgdmFsdWUgaW4gc2VsZi5hcmdzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaGUgdmFsdWUgb2YgcHJvdmlkZWQgYXJndW1lbnQgJXMgaXMgJXMuIFNob3VsZCBoYXZlIGEgdmFsaWQgdmFsdWUuJyAlIChrZXksIHZhbHVlKSkKKyAgICAgICAgICAgIGlzX3Rlc3QgPSAgcmUuc2VhcmNoKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpc19zZWN0aW9uID0gcmUuc2VhcmNoKHNlbGYuc2VjdGlvbl9hcmd1bWVudF9wYXR0ZXJuLCBhcmcpCisgICAgICAgICAgICBpZiBpc190ZXN0OgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc190ZXN0Lmdyb3VwKDEpIGluIHNlbGYudGVzdF9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3JlZ2V4W2lzX3Rlc3QuZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcmVnZXhbaXNfdGVzdC5ncm91cCgxKV1baXNfdGVzdC5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxpZiBpc19zZWN0aW9uOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19zZWN0aW9uLmdyb3VwKDEpIGluIHNlbGYuc2VjdGlvbl9yZWdleDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWN0aW9uX3JlZ2V4W2lzX3NlY3Rpb24uZ3JvdXAoMSldID0ge30KKyAgICAgICAgICAgICAgICBzZWxmLnNlY3Rpb25fcmVnZXhbaXNfc2VjdGlvbi5ncm91cCgxKV1baXNfc2VjdGlvbi5ncm91cCgyKV0gPSByZS5jb21waWxlKHZhbHVlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRPRE86IE1ha2UgdGhlc2UgY2FsbCBhIHRyYWNlYmFjayBpbnN0ZWFkIG9mIGEgc2ltcGxlIGV4Y2VwdGlvbi4uCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUaGUgcHJvdmlkZWQgYXJndW1lbnQgbmFtZSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSB2YWxpZCB0eXBlLiBQbGVhc2UgZ2l2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczpcbmZvciB0ZXN0czogJXNcbmZvciBzZWN0aW9uczogJXMiICUgKHNlbGYudGVzdF9hcmd1bWVudF9wYXR0ZXJuLCBzZWxmLnNlY3Rpb25fYXJndW1lbnRfcGF0dGVybikpCisKKyAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IFRydWUKKworICAgICMgUGFyc2UgYSBsaW5lIGFuZCByZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHRoZSB0eXBlIG9mIHJlc3VsdCAodGVzdC9zZWN0aW9uKSBhbmQgaXRzIGNhdGVnb3J5LCBzdGF0dXMgYW5kIG5hbWUKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5pdGlhbGl6ZWQ6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoZSBwYXJzZXIgaXMgbm90IGluaXRpYWxpemVkLi4iKQorCisgICAgICAgIGZvciB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1c19saXN0IGluIHNlbGYudGVzdF9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHRlc3Rfc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gdGVzdF9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRlc3RfbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0X25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3Rlc3QnLCB0ZXN0X2NhdGVnb3J5LCB0ZXN0X3N0YXR1cywgdGVzdF9uYW1lLmdyb3VwKDEpXQorCisgICAgICAgIGZvciBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1c19saXN0IGluIHNlbGYuc2VjdGlvbl9yZWdleC5pdGVtcygpOgorICAgICAgICAgICAgZm9yIHNlY3Rpb25fc3RhdHVzLCBzdGF0dXNfcmVnZXggaW4gc2VjdGlvbl9zdGF0dXNfbGlzdC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25fbmFtZSA9IHN0YXR1c19yZWdleC5zZWFyY2gobGluZSkKKyAgICAgICAgICAgICAgICBpZiBzZWN0aW9uX25hbWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ3NlY3Rpb24nLCBzZWN0aW9uX2NhdGVnb3J5LCBzZWN0aW9uX3N0YXR1cywgc2VjdGlvbl9uYW1lLmdyb3VwKDEpXQorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFJlc3VsdChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdF9kaWN0ID0ge30KKworICAgIGRlZiBzdG9yZShzZWxmLCBzZWN0aW9uLCB0ZXN0LCBzdGF0dXMpOgorICAgICAgICBpZiBub3Qgc2VjdGlvbiBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXSA9IFtdCisKKyAgICAgICAgc2VsZi5yZXN1bHRfZGljdFtzZWN0aW9uXS5hcHBlbmQoKHRlc3QsIHN0YXR1cykpCisKKyAgICAjIHNvcnQgdGVzdHMgYnkgdGhlIHRlc3QgbmFtZSh0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUpLCBmb3IgZWFjaCBzZWN0aW9uLiBUaGlzIGNhbiBiZSBoZWxwZnVsIHdoZW4gdXNpbmcgZ2l0IHRvIGRpZmYgZm9yIGNoYW5nZXMgYnkgbWFraW5nIHN1cmUgdGhleSBhcmUgYWx3YXlzIGluIHRoZSBzYW1lIG9yZGVyLgorICAgIGRlZiBzb3J0X3Rlc3RzKHNlbGYpOgorICAgICAgICBmb3IgcGFja2FnZSBpbiBzZWxmLnJlc3VsdF9kaWN0OgorICAgICAgICAgICAgc29ydGVkX3Jlc3VsdHMgPSBzb3J0ZWQoc2VsZi5yZXN1bHRfZGljdFtwYWNrYWdlXSwga2V5PWxhbWJkYSB0dXA6IHR1cFswXSkKKyAgICAgICAgICAgIHNlbGYucmVzdWx0X2RpY3RbcGFja2FnZV0gPSBzb3J0ZWRfcmVzdWx0cworCisgICAgIyBMb2cgdGhlIHJlc3VsdHMgYXMgZmlsZXMuIFRoZSBmaWxlIG5hbWUgaXMgdGhlIHNlY3Rpb24gbmFtZSBhbmQgdGhlIGNvbnRlbnRzIGFyZSB0aGUgdGVzdHMgaW4gdGhhdCBzZWN0aW9uLgorICAgIGRlZiBsb2dfYXNfZmlsZXMoc2VsZiwgdGFyZ2V0X2RpciwgdGVzdF9zdGF0dXMpOgorICAgICAgICBzdGF0dXNfcmVnZXggPSByZS5jb21waWxlKCd8Jy5qb2luKG1hcChzdHIsIHRlc3Rfc3RhdHVzKSkpCisgICAgICAgIGlmIG5vdCB0eXBlKHRlc3Rfc3RhdHVzKSA9PSB0eXBlKFtdKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidGVzdF9zdGF0dXMgc2hvdWxkIGJlIGEgbGlzdC4gR290ICIgKyBzdHIodGVzdF9zdGF0dXMpICsgIiBpbnN0ZWFkLiIpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfZGlyKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVGFyZ2V0IGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJXMiICUgdGFyZ2V0X2RpcikKKworICAgICAgICBmb3Igc2VjdGlvbiwgdGVzdF9yZXN1bHRzIGluIHNlbGYucmVzdWx0X2RpY3QuaXRlbXMoKToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgICAgICBmb3IgeCBpbiB0ZXN0X3N0YXR1czoKKyAgICAgICAgICAgICAgICBwcmVmaXggKz14KycuJworICAgICAgICAgICAgaWYgKHNlY3Rpb24gIT0gJycpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzZWN0aW9uCisgICAgICAgICAgICBzZWN0aW9uX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGFyZ2V0X2RpciwgcHJlZml4KQorICAgICAgICAgICAgIyBwdXJnZSB0aGUgZmlsZSBjb250ZW50cyBpZiBpdCBleGlzdHMKKyAgICAgICAgICAgIG9wZW4oc2VjdGlvbl9maWxlLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIGZvciB0ZXN0X3Jlc3VsdCBpbiB0ZXN0X3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgKHRlc3RfbmFtZSwgc3RhdHVzKSA9IHRlc3RfcmVzdWx0CisgICAgICAgICAgICAgICAgIyB3ZSBsb2cgb25seSB0aGUgdGVzdHMgd2l0aCBzdGF0dXMgaW4gdGhlIHRlc3Rfc3RhdHVzIGxpc3QKKyAgICAgICAgICAgICAgICBtYXRjaF9zdGF0dXMgPSBzdGF0dXNfcmVnZXguc2VhcmNoKHN0YXR1cykKKyAgICAgICAgICAgICAgICBpZiBtYXRjaF9zdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIGZ0b29scy5hcHBlbmRfZmlsZShzZWN0aW9uX2ZpbGUsIHN0YXR1cyArICI6ICIgKyB0ZXN0X25hbWUpCisKKyAgICAjIE5vdCB5ZXQgaW1wbGVtZW50ZWQhCisgICAgZGVmIGxvZ190b19sYXZhKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3FlbXVydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyYzlkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXJ1bm5lci5weQpAQCAtMCwwICsxLDUxOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyBmb3Igc3RhcnRpbmcgcWVtdSBpbWFnZXMgdXNpbmcgcnVucWVtdS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgZXJybm8KK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gb2VxYS51dGlscy5kdW1wIGltcG9ydCBIb3N0RHVtcGVyCisKK2ltcG9ydCBsb2dnaW5nCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiQml0QmFrZS5RZW11UnVubmVyIikKKworY2xhc3MgUWVtdVJ1bm5lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwgYm9vdHRpbWUsIGR1bXBfZGlyLCBkdW1wX2hvc3RfY21kcyk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisgICAgICAgIHNlbGYubG9nZ2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi50aHJlYWQgPSBOb25lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuaG9zdF9kdW1wZXIgPSBIb3N0RHVtcGVyKGR1bXBfaG9zdF9jbWRzLCBkdW1wX2RpcikKKworICAgIGRlZiBjcmVhdGVfc29ja2V0KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgc29jay5iaW5kKCgiMTI3LjAuMC4xIiwwKSkKKyAgICAgICAgICAgIHNvY2subGlzdGVuKDIpCisgICAgICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ3JlYXRlZCBsaXN0ZW5pbmcgc29ja2V0IGZvciBxZW11IHNlcmlhbCBjb25zb2xlIG9uOiAxMjcuMC4wLjE6JXMiICUgcG9ydCkKKyAgICAgICAgICAgIHJldHVybiAoc29jaywgcG9ydCkKKworICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIGxvZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLmxvZ2ZpbGU6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5sb2dmaWxlLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiJXMiICUgbXNnKQorCisgICAgZGVmIGdldE91dHB1dChzZWxmLCBvKToKKyAgICAgICAgaW1wb3J0IGZjbnRsCisgICAgICAgIGZsID0gZmNudGwuZmNudGwobywgZmNudGwuRl9HRVRGTCkKKyAgICAgICAgZmNudGwuZmNudGwobywgZmNudGwuRl9TRVRGTCwgZmwgfCBvcy5PX05PTkJMT0NLKQorICAgICAgICByZXR1cm4gb3MucmVhZChvLmZpbGVubygpLCAxMDAwMDAwKQorCisKKyAgICBkZWYgaGFuZGxlU0lHQ0hMRChzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaWYgc2VsZi5ydW5xZW11IGFuZCBzZWxmLnJ1bnFlbXUucG9sbCgpOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnJldHVybmNvZGU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KHNlbGYucnVucWVtdS5zdGRvdXQpKQorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBpZiBzZWxmLmRpc3BsYXk6CisgICAgICAgICAgICBvcy5lbnZpcm9uWyJESVNQTEFZIl0gPSBzZWxmLmRpc3BsYXkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiVG8gc3RhcnQgcWVtdSBJIG5lZWQgYSBYIGRlc2t0b3AsIHBsZWFzZSBzZXQgRElTUExBWSBjb3JyZWN0bHkgKGUuZy4gRElTUExBWT06MSkiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnJvb3Rmcyk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgVE1QRElSIHBhdGggJXMiICUgc2VsZi50bXBkaXIpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIk9FX1RNUERJUiJdID0gc2VsZi50bXBkaXIKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGVwbG95X2Rpcl9pbWFnZSk6CisgICAgICAgICAgICBsb2dnZXIuZXJyb3IoIkludmFsaWQgREVQTE9ZX0RJUl9JTUFHRSBwYXRoICVzIiAlIHNlbGYuZGVwbG95X2Rpcl9pbWFnZSkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiREVQTE9ZX0RJUl9JTUFHRSJdID0gc2VsZi5kZXBsb3lfZGlyX2ltYWdlCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGhyZWFkc29jaywgdGhyZWFkcG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQsIHNlbGYuc2VydmVycG9ydCA9IHNlbGYuY3JlYXRlX3NvY2tldCgpCisgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0OiAlcyIgJSBtc2dbMV0pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIFNldCB0aGlzIGZsYWcgc28gdGhhdCBRZW11IGRvZXNuJ3QgZG8gYW55IGdyYWJzIGFzIFNETCBncmFicyBpbnRlcmFjdAorICAgICAgICAjIGJhZGx5IHdpdGggc2NyZWVuc2F2ZXJzLgorICAgICAgICBvcy5lbnZpcm9uWyJRRU1VX0RPTlRfR1JBQiJdID0gIjEiCisgICAgICAgIHNlbGYucWVtdXBhcmFtcyA9ICdib290cGFyYW1zPSJjb25zb2xlPXR0eTEgY29uc29sZT10dHlTMCwxMTUyMDBuOCIgcWVtdXBhcmFtcz0iLXNlcmlhbCB0Y3A6MTI3LjAuMC4xOnt9IicuZm9ybWF0KHRocmVhZHBvcnQpCisgICAgICAgIGlmIHFlbXVwYXJhbXM6CisgICAgICAgICAgICBzZWxmLnFlbXVwYXJhbXMgPSBzZWxmLnFlbXVwYXJhbXNbOi0xXSArICIgIiArIHFlbXVwYXJhbXMgKyAiICIgKyAnXCInCisKKyAgICAgICAgc2VsZi5vcmlnY2hsZGhhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdDSExEKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLmhhbmRsZVNJR0NITEQpCisKKyAgICAgICAgbGF1bmNoX2NtZCA9ICdydW5xZW11IHRjcHNlcmlhbD0lcyAlcyAlcyAlcycgJSAoc2VsZi5zZXJ2ZXJwb3J0LCBzZWxmLm1hY2hpbmUsIHNlbGYucm9vdGZzLCBzZWxmLnFlbXVwYXJhbXMpCisgICAgICAgICMgRklYTUU6IFdlIHBhc3MgaW4gc3RkaW49c3VicHJvY2Vzcy5QSVBFIGhlcmUgdG8gd29yayBhcm91bmQgc3R0eQorICAgICAgICAjIGJsb2NraW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnFlbXUgc2NyaXB0IHdoZW4gdXNpbmcgdGhpcyB3aXRoaW4KKyAgICAgICAgIyBvZS1zZWxmdGVzdCAodGhpcyBtYWtlcyBzdHR5IGVycm9yIG91dCBpbW1lZGlhdGVseSkuIFRoZXJlIG91Z2h0CisgICAgICAgICMgdG8gYmUgYSBwcm9wZXIgZml4IGJ1dCB0aGlzIHdpbGwgc3VmZmljZSBmb3Igbm93LgorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsIHNoZWxsPVRydWUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBwcmVleGVjX2ZuPW9zLnNldHBncnApCisgICAgICAgIG91dHB1dCA9IHNlbGYucnVucWVtdS5zdGRvdXQKKworICAgICAgICAjCisgICAgICAgICMgV2UgbmVlZCB0aGUgcHJlZXhlY19mbiBhYm92ZSBzbyB0aGF0IGFsbCBydW5xZW11IHByb2Nlc3NlcyBjYW4gZWFzaWx5IGJlIGtpbGxlZCAKKyAgICAgICAgIyAoYnkga2lsbGluZyB0aGVpciBwcm9jZXNzIGdyb3VwKS4gVGhpcyBwcmVzZW50cyBhIHByb2JsZW0gaWYgdGhpcyBjb250cm9sbGluZworICAgICAgICAjIHByb2Nlc3MgaXRzZWxmIGlzIGtpbGxlZCBob3dldmVyIHNpbmNlIHRob3NlIHByb2Nlc3NlcyBkb24ndCBub3RpY2UgdGhlIGRlYXRoIAorICAgICAgICAjIG9mIHRoZSBwYXJlbnQgYW5kIG1lcnJpbHkgY29udGludWUgb24uCisgICAgICAgICMKKyAgICAgICAgIyBSYXRoZXIgdGhhbiBoYWNrIHJ1bnFlbXUgdG8gZGVhbCB3aXRoIHRoaXMsIHdlIGFkZCBzb21ldGhpbmcgaGVyZSBpbnN0ZWFkLiAKKyAgICAgICAgIyBCYXNpY2FsbHkgd2UgZm9yayBvZmYgYW5vdGhlciBwcm9jZXNzIHdoaWNoIGhvbGRzIGFuIG9wZW4gcGlwZSB0byB0aGUgcGFyZW50CisgICAgICAgICMgYW5kIGFsc28gaXMgc2V0cGdycC4gSWYvd2hlbiB0aGUgcGlwZSBzZWVzIEVPRiBmcm9tIHRoZSBwYXJlbnQgZGllaW5nLCBpdCBraWxscworICAgICAgICAjIHRoZSBwcm9jZXNzIGdyb3VwLiBUaGlzIGlzIGxpa2UgcGN0cmwncyBQREVBVEhTSUcgYnV0IGZvciBhIHByb2Nlc3MgZ3JvdXAKKyAgICAgICAgIyByYXRoZXIgdGhhbiBhIHNpbmdsZSBwcm9jZXNzLgorICAgICAgICAjCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5tb25pdG9ycGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYubW9uaXRvcnBpZDoKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBzZWxmLm1vbml0b3JwaXBlID0gb3MuZmRvcGVuKHcsICJ3IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY2hpbGQgcHJvY2VzcworICAgICAgICAgICAgb3Muc2V0cGdycCgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgciA9IG9zLmZkb3BlbihyKQorICAgICAgICAgICAgeCA9IHIucmVhZCgpCisgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgICAgIGxvZ2dlci5pbmZvKCJydW5xZW11IHN0YXJ0ZWQsIHBpZCBpcyAlcyIgJSBzZWxmLnJ1bnFlbXUucGlkKQorICAgICAgICBsb2dnZXIuaW5mbygid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgaWYgc2VsZi5ydW5xZW11LnBvbGwoKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZToKKyAgICAgICAgICAgICAgICAgICAgIyBObyBwb2ludCB3YWl0aW5nIGFueSBsb25nZXIKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3J1bnFlbXUgZXhpdGVkIHdpdGggY29kZSAlZCcgJSBzZWxmLnJ1bnFlbXUucmV0dXJuY29kZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIk91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSBzZWxmLmdldE91dHB1dChvdXRwdXQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAgICAgICBpZiBzZWxmLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygicWVtdSBzdGFydGVkIC0gcWVtdSBwcm9jY2VzIHBpZCBpcyAlcyIgJSBzZWxmLnFlbXVwaWQpCisgICAgICAgICAgICBjbWRsaW5lID0gJycKKyAgICAgICAgICAgIHdpdGggb3BlbignL3Byb2MvJXMvY21kbGluZScgJSBzZWxmLnFlbXVwaWQpIGFzIHA6CisgICAgICAgICAgICAgICAgY21kbGluZSA9IHAucmVhZCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXBzID0gcmUuZmluZGFsbCgiKCg/OlswLTldezEsM31cLil7M31bMC05XXsxLDN9KSIsIGNtZGxpbmUuc3BsaXQoImlwPSIpWzFdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBpcHMgb3IgbGVuKGlwcykgIT0gMzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaXAgPSBpcHNbMF0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfaXAgPSBpcHNbMV0KKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yLCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDb3VsZG4ndCBnZXQgaXAgZnJvbSBxZW11IHByb2Nlc3MgYXJndW1lbnRzISBIZXJlIGlzIHRoZSBxZW11IGNvbW1hbmQgbGluZSB1c2VkOlxuJXNcbmFuZCBvdXRwdXQgZnJvbSBydW5xZW11OlxuJXMiICUgKGNtZGxpbmUsIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpKQorICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfaG9zdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJxZW11IGNtZGxpbmUgdXNlZDpcbnt9Ii5mb3JtYXQoY21kbGluZSkpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiVGFyZ2V0IElQOiAlcyIgJSBzZWxmLmlwKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlcnZlciBJUDogJXMiICUgc2VsZi5zZXJ2ZXJfaXApCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJTdGFydGluZyBsb2dnaW5nIHRocmVhZCIpCisgICAgICAgICAgICBzZWxmLnRocmVhZCA9IExvZ2dpbmdUaHJlYWQoc2VsZi5sb2csIHRocmVhZHNvY2ssIGxvZ2dlcikKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRocmVhZC5jb25uZWN0aW9uX2VzdGFibGlzaGVkLndhaXQoc2VsZi5ib290dGltZSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCJEaWRuJ3QgcmVjZWl2ZSBhIGNvbnNvbGUgY29ubmVjdGlvbiBmcm9tIHFlbXUuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlcmUgaXMgdGhlIHFlbXUgY29tbWFuZCBsaW5lIHVzZWQ6XG4lc1xuYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91dHB1dCBmcm9tIHJ1bnFlbXU6XG4lcyIgJSAoY21kbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRPdXRwdXQob3V0cHV0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJXYWl0aW5nIGF0IG1vc3QgJWQgc2Vjb25kcyBmb3IgbG9naW4gYmFubmVyIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLmJvb3R0aW1lCisgICAgICAgICAgICBzb2NrbGlzdCA9IFtzZWxmLnNlcnZlcl9zb2NrZXRdCisgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBGYWxzZQorICAgICAgICAgICAgc3RvcHJlYWQgPSBGYWxzZQorICAgICAgICAgICAgcWVtdXNvY2sgPSBOb25lCisgICAgICAgICAgICBib290bG9nID0gJycKKyAgICAgICAgICAgIHdoaWxlIHRpbWUudGltZSgpIDwgZW5kdGltZSBhbmQgbm90IHN0b3ByZWFkOgorICAgICAgICAgICAgICAgIHNyZWFkLCBzd3JpdGUsIHNlcnJvciA9IHNlbGVjdC5zZWxlY3Qoc29ja2xpc3QsIFtdLCBbXSwgNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBzZWxmLnNlcnZlcl9zb2NrZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBxZW11c29jaywgYWRkciA9IHNlbGYuc2VydmVyX3NvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAgICAgcWVtdXNvY2suc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LmFwcGVuZChxZW11c29jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzZWxmLnNlcnZlcl9zb2NrZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiAlIGFkZHIpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb3Rsb2cgKz0gZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlLnNlYXJjaCgiLiogbG9naW46IiwgYm9vdGxvZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IHFlbXVzb2NrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaGVkbG9naW4gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJSZWFjaGVkIGxvZ2luIGJhbm5lciIpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsaXN0LnJlbW92ZShzb2NrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorCisgICAgICAgICAgICBpZiBub3QgcmVhY2hlZGxvZ2luOgorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJUYXJnZXQgZGlkbid0IHJlYWNoZWQgbG9naW4gYm9vdCBpbiAlZCBzZWNvbmRzIiAlIHNlbGYuYm9vdHRpbWUpCisgICAgICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4oYm9vdGxvZy5zcGxpdGxpbmVzKClbLTI1Ol0pCisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkxhc3QgMjUgbGluZXMgb2YgdGV4dDpcbiVzIiAlIGxpbmVzKQorICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJDaGVjayBmdWxsIGJvb3QgbG9nOiAlcyIgJSBzZWxmLmxvZ2ZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAjIElmIHdlIGFyZSBub3QgYWJsZSB0byBsb2dpbiB0aGUgdGVzdHMgY2FuIGNvbnRpbnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYucnVuX3NlcmlhbCgicm9vdFxuIiwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJyb290QFthLXpBLVowLTlcLV0rOn4jIiwgb3V0cHV0KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJMb2dnZWQgYXMgcm9vdCBpbiBzZXJpYWwgY29uc29sZSIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIkNvdWxkbid0IGxvZ2luIGludG8gc2VyaWFsIGNvbnNvbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBhcyByb290IHVzaW5nIGJsYW5rIHBhc3N3b3JkIikKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiU2VyaWFsIGNvbnNvbGUgZmFpbGVkIHdoaWxlIHRyeWluZyB0byBsb2dpbiIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJRZW11IHBpZCBkaWRuJ3QgYXBwZWFyZWQgaW4gJXMgc2Vjb25kcyIgJSBzZWxmLnJ1bnFlbXV0aW1lKQorICAgICAgICAgICAgc2VsZi5fZHVtcF9ob3N0KCkKKyAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBsb2dnZXIuaW5mbygiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIHNlbGYuZ2V0T3V0cHV0KG91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wX3RocmVhZCgpCisgICAgICAgIGlmIHNlbGYucnVucWVtdToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNlbGYub3JpZ2NobGRoYW5kbGVyKQorICAgICAgICAgICAgb3Mua2lsbChzZWxmLm1vbml0b3JwaWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHVEVSTSB0byBydW5xZW11IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVNSQ0g6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyBzZWxmLnJ1bnFlbXV0aW1lCisgICAgICAgICAgICB3aGlsZSBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmUgYW5kIHRpbWUudGltZSgpIDwgZW5kdGltZToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEpCisgICAgICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIlNlbmRpbmcgU0lHS0lMTCB0byBydW5xZW11IikKKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChzZWxmLnJ1bnFlbXUucGlkKSwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAgICAgICBzZWxmLnJ1bnFlbXUgPSBOb25lCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcnZlcl9zb2NrZXQnKSBhbmQgc2VsZi5zZXJ2ZXJfc29ja2V0OgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5xZW11cGlkID0gTm9uZQorICAgICAgICBzZWxmLmlwID0gTm9uZQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdDSExELCBzZWxmLm9yaWdjaGxkaGFuZGxlcikKKworICAgIGRlZiBzdG9wX3RocmVhZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50aHJlYWQgYW5kIHNlbGYudGhyZWFkLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLnRocmVhZC5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYudGhyZWFkLmpvaW4oKQorCisgICAgZGVmIHJlc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorICAgICAgICBsb2dnZXIuaW5mbygiUmVzdGFydGluZyBxZW11IHByb2Nlc3MiKQorICAgICAgICBpZiBzZWxmLnJ1bnFlbXUucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICBpZiBzZWxmLnN0YXJ0KHFlbXVwYXJhbXMpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgaXNfYWxpdmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bnFlbXU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcWVtdV9jaGlsZCA9IHNlbGYuZmluZF9jaGlsZChzdHIoc2VsZi5ydW5xZW11LnBpZCkpCisgICAgICAgIGlmIHFlbXVfY2hpbGQ6CisgICAgICAgICAgICBzZWxmLnFlbXVwaWQgPSBxZW11X2NoaWxkWzBdCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygiL3Byb2MvIiArIHN0cihzZWxmLnFlbXVwaWQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB0Y3AiIGluIGNvbW1hbmRzW3BdOgorICAgICAgICAgICAgICAgIHJldHVybiBbaW50KHApLGNvbW1hbmRzW3BdXQorCisgICAgZGVmIHJ1bl9zZXJpYWwoc2VsZiwgY29tbWFuZCwgcmF3PUZhbHNlKToKKyAgICAgICAgIyBXZSBhc3N1bWUgdGFyZ2V0IHN5c3RlbSBoYXZlIGVjaG8gdG8gZ2V0IGNvbW1hbmQgc3RhdHVzCisgICAgICAgIGlmIG5vdCByYXc6CisgICAgICAgICAgICBjb21tYW5kID0gIiVzOyBlY2hvICQ/XG4iICUgY29tbWFuZAorICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuc2VuZGFsbChjb21tYW5kKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgIHNyZWFkLCBfLCBfID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zZXJ2ZXJfc29ja2V0XSxbXSxbXSw1KQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc3JlYWQ6CisgICAgICAgICAgICAgICAgYW5zd2VyID0gc29jay5yZWN2KDEwMjQpCisgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAjIFNlYXJjaCB0aGUgcHJvbXB0IHRvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgaWYgcmUuc2VhcmNoKCJbYS16QS1aMC05XStAW2EtekEtWjAtOVwtXSs6fiMiLCBkYXRhKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gc2VyaWFsIGNvbnNvbGUgc29ja2V0IikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIGlmIHJhdzoKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUmVtb3ZlIGZpcnN0IGxpbmUgKGNvbW1hbmQgbGluZSkgYW5kIGxhc3QgbGluZSAocHJvbXB0KQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW2RhdGEuZmluZCgnJD9cclxuJykrNDpkYXRhLnJmaW5kKCdcclxuJyldCisgICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhLnJmaW5kKCdcclxuJykKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA9PSAtMToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9ICIiCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NtZCA9IGRhdGFbaW5kZXgrMjpdCisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzppbmRleF0KKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX2NtZCA9PSAiMCIpOgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAxCisgICAgICAgIHJldHVybiAoc3RhdHVzLCBzdHIoZGF0YSkpCisKKworICAgIGRlZiBfZHVtcF9ob3N0KHNlbGYpOgorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmNyZWF0ZV9kaXIoInFlbXUiKQorICAgICAgICBsb2dnZXIud2FybigiUWVtdSBlbmRlZCB1bmV4cGVjdGVkbHksIGR1bXAgZGF0YSBmcm9tIGhvc3QiCisgICAgICAgICAgICAgICAgIiBpcyBpbiAlcyIgJSBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfZGlyKQorICAgICAgICBzZWxmLmhvc3RfZHVtcGVyLmR1bXBfaG9zdCgpCisKKyMgVGhpcyBjbGFzcyBpcyBmb3IgcmVhZGluZyBkYXRhIGZyb20gYSBzb2NrZXQgYW5kIHBhc3NpbmcgaXQgdG8gbG9nZnVuYworIyB0byBiZSBwcm9jZXNzZWQuIEl0J3MgY29tcGxldGVseSBldmVudCBkcml2ZW4gYW5kIGhhcyBhIHN0cmFpZ2h0Zm9yd2FyZAorIyBldmVudCBsb29wLiBUaGUgbWVjaGFuaXNtIGZvciBzdG9wcGluZyB0aGUgdGhyZWFkIGlzIGEgc2ltcGxlIHBpcGUgd2hpY2gKKyMgd2lsbCB3YWtlIHVwIHRoZSBwb2xsIGFuZCBhbGxvdyBmb3IgdGVhcmluZyBldmVyeXRoaW5nIGRvd24uCitjbGFzcyBMb2dnaW5nVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dmdW5jLCBzb2NrLCBsb2dnZXIpOgorICAgICAgICBzZWxmLmNvbm5lY3Rpb25fZXN0YWJsaXNoZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzZWxmLnNlcnZlcnNvY2sgPSBzb2NrCisgICAgICAgIHNlbGYubG9nZnVuYyA9IGxvZ2Z1bmMKKyAgICAgICAgc2VsZi5sb2dnZXIgPSBsb2dnZXIKKyAgICAgICAgc2VsZi5yZWFkc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKworICAgICAgICBzZWxmLmVycm9yZXZlbnRzID0gc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMTlZBTAorICAgICAgICBzZWxmLnJlYWRldmVudHMgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKKworICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYsIHRhcmdldD1zZWxmLnRocmVhZHRhcmdldCkKKworICAgIGRlZiB0aHJlYWR0YXJnZXQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRsb29wKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYudGVhcmRvd24oKQorCisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU3RhcnRpbmcgbG9nZ2luZyB0aHJlYWQiKQorICAgICAgICBzZWxmLnJlYWRwaXBlLCBzZWxmLndyaXRlcGlwZSA9IG9zLnBpcGUoKQorICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnJ1bihzZWxmKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3BwaW5nIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgb3Mud3JpdGUoc2VsZi53cml0ZXBpcGUsICJzdG9wIikKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiVGVhcmluZyBkb3duIGxvZ2dpbmcgdGhyZWFkIikKKyAgICAgICAgc2VsZi5jbG9zZV9zb2NrZXQoc2VsZi5zZXJ2ZXJzb2NrKQorCisgICAgICAgIGlmIHNlbGYucmVhZHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNsb3NlX3NvY2tldChzZWxmLnJlYWRzb2NrKQorCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYucmVhZHBpcGUpCisgICAgICAgIHNlbGYuY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYud3JpdGVwaXBlKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorCisgICAgZGVmIGV2ZW50bG9vcChzZWxmKToKKyAgICAgICAgcG9sbCA9IHNlbGVjdC5wb2xsKCkKKyAgICAgICAgZXZlbnRtYXNrID0gc2VsZi5lcnJvcmV2ZW50cyB8IHNlbGYucmVhZGV2ZW50cworICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYuc2VydmVyc29jay5maWxlbm8oKSkKKyAgICAgICAgcG9sbC5yZWdpc3RlcihzZWxmLnJlYWRwaXBlLCBldmVudG1hc2spCisKKyAgICAgICAgYnJlYWtvdXQgPSBGYWxzZQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0YXJ0aW5nIHRocmVhZCBldmVudCBsb29wIikKKyAgICAgICAgd2hpbGUgbm90IGJyZWFrb3V0OgorICAgICAgICAgICAgZXZlbnRzID0gcG9sbC5wb2xsKCkKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBldmVudHM6CisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBvY2N1cnJlZCwgYmFpbCBvdXQKKyAgICAgICAgICAgICAgICBpZiBldmVudFsxXSAmIHNlbGYuZXJyb3JldmVudHM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihzZWxmLnN0cmluZ2lmeV9ldmVudChldmVudFsxXSkpCisKKyAgICAgICAgICAgICAgICAjIEV2ZW50IHRvIHN0b3AgdGhlIHRocmVhZAorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVhZHBpcGUgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIlN0b3AgZXZlbnQgcmVjZWl2ZWQiKQorICAgICAgICAgICAgICAgICAgICBicmVha291dCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgQSBjb25uZWN0aW9uIHJlcXVlc3Qgd2FzIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLnNlcnZlcnNvY2suZmlsZW5vKCkgPT0gZXZlbnRbMF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oIkNvbm5lY3Rpb24gcmVxdWVzdCByZWNlaXZlZCIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHNvY2ssIF8gPSBzZWxmLnNlcnZlcnNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkc29jay5zZXRibG9ja2luZygwKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnVucmVnaXN0ZXIoc2VsZi5zZXJ2ZXJzb2NrLmZpbGVubygpKQorICAgICAgICAgICAgICAgICAgICBwb2xsLnJlZ2lzdGVyKHNlbGYucmVhZHNvY2suZmlsZW5vKCkpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiU2V0dGluZyBjb25uZWN0aW9uIGVzdGFibGlzaGVkIGV2ZW50IikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0aW9uX2VzdGFibGlzaGVkLnNldCgpCisKKyAgICAgICAgICAgICAgICAjIEFjdHVhbCBkYXRhIHRvIGJlIGxvZ2dlZAorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5yZWFkc29jay5maWxlbm8oKSA9PSBldmVudFswXToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2Z1bmMoZGF0YSkKKworICAgICMgU2luY2UgdGhlIHNvY2tldCBpcyBub24tYmxvY2tpbmcgbWFrZSBzdXJlIHRvIGhvbm9yIEVBR0FJTgorICAgICMgYW5kIEVXT1VMREJMT0NLLgorICAgIGRlZiByZWN2KHNlbGYsIGNvdW50KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZHNvY2sucmVjdihjb3VudCkKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUdBSU4gb3IgZS5lcnJubyA9PSBlcnJuby5FV09VTERCTE9DSzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk5vIGRhdGEgb24gcmVhZCByZWFkeSBzb2NrZXQiKQorICAgICAgICBlbGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgIyBUaGlzIGFjdHVhbGx5IG1lYW5zIGFuIG9yZGVybHkgc2h1dGRvd24KKyAgICAgICAgICAgICMgaGFwcGVuZWQuIEJ1dCBmb3IgdGhpcyBjb2RlIGl0IGNvdW50cyBhcyBhbgorICAgICAgICAgICAgIyBlcnJvciBzaW5jZSB0aGUgY29ubmVjdGlvbiBzaG91bGRuJ3QgZ28gYXdheQorICAgICAgICAgICAgIyB1bnRpbCBxZW11IGV4aXRzLgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb25zb2xlIGNvbm5lY3Rpb24gY2xvc2VkIHVuZXhwZWN0ZWRseSIpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBzdHJpbmdpZnlfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICB2YWwgPSAnJworICAgICAgICBpZiBzZWxlY3QuUE9MTEVSUiA9PSBldmVudDoKKyAgICAgICAgICAgIHZhbCA9ICdQT0xMRVInCisgICAgICAgIGVsaWYgc2VsZWN0LlBPTExIVVAgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTEhVUCcKKyAgICAgICAgZWxpZiBzZWxlY3QuUE9MTE5WQUwgPT0gZXZlbnQ6CisgICAgICAgICAgICB2YWwgPSAnUE9MTE5WQUwnCisgICAgICAgIHJldHVybiB2YWwKKworICAgIGRlZiBjbG9zZV9zb2NrZXQoc2VsZiwgc29jayk6CisgICAgICAgIHNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgY2xvc2VfaWdub3JlX2Vycm9yKHNlbGYsIGZkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvbWV0YS9saWIvb2VxYS91dGlscy9xZW11dGlueXJ1bm5lci5weSBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXRpbnlydW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5NTEwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvcWVtdXRpbnlydW5uZXIucHkKQEAgLTAsMCArMSwxNzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEludGVsIENvcnBvcmF0aW9uCisjCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUKQorCisjIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgZm9yIHN0YXJ0aW5nIHFlbXUgaW1hZ2VzIG9mIHBva3kgdGlueS4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgdGltZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc2VsZWN0CitpbXBvcnQgYmIKK2Zyb20gcWVtdXJ1bm5lciBpbXBvcnQgUWVtdVJ1bm5lcgorCitjbGFzcyBRZW11VGlueVJ1bm5lcihRZW11UnVubmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYWNoaW5lLCByb290ZnMsIGRpc3BsYXksIHRtcGRpciwgZGVwbG95X2Rpcl9pbWFnZSwgbG9nZmlsZSwga2VybmVsLCBib290dGltZSk6CisKKyAgICAgICAgIyBQb3BlbiBvYmplY3QgZm9yIHJ1bnFlbXUKKyAgICAgICAgc2VsZi5ydW5xZW11ID0gTm9uZQorICAgICAgICAjIHBpZCBvZiB0aGUgcWVtdSBwcm9jZXNzIHRoYXQgcnVucWVtdSB3aWxsIHN0YXJ0CisgICAgICAgIHNlbGYucWVtdXBpZCA9IE5vbmUKKyAgICAgICAgIyB0YXJnZXQgaXAgLSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKyAgICAgICAgc2VsZi5pcCA9IE5vbmUKKyAgICAgICAgIyBob3N0IGlwIC0gd2hlcmUgcWVtdSBpcyBydW5uaW5nCisgICAgICAgIHNlbGYuc2VydmVyX2lwID0gTm9uZQorCisgICAgICAgIHNlbGYubWFjaGluZSA9IG1hY2hpbmUKKyAgICAgICAgc2VsZi5yb290ZnMgPSByb290ZnMKKyAgICAgICAgc2VsZi5kaXNwbGF5ID0gZGlzcGxheQorICAgICAgICBzZWxmLnRtcGRpciA9IHRtcGRpcgorICAgICAgICBzZWxmLmRlcGxveV9kaXJfaW1hZ2UgPSBkZXBsb3lfZGlyX2ltYWdlCisgICAgICAgIHNlbGYubG9nZmlsZSA9IGxvZ2ZpbGUKKyAgICAgICAgc2VsZi5ib290dGltZSA9IGJvb3R0aW1lCisKKyAgICAgICAgc2VsZi5ydW5xZW11dGltZSA9IDYwCisgICAgICAgIHNlbGYuc29ja2V0ZmlsZSA9ICJjb25zb2xlLnNvY2siCisgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldCA9IE5vbmUKKyAgICAgICAgc2VsZi5rZXJuZWwgPSBrZXJuZWwKKworCisgICAgZGVmIGNyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHRyaWVzID0gMworICAgICAgICB3aGlsZSB0cmllcyA+IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX3NvY2tldC5jb25uZWN0KHNlbGYuc29ja2V0ZmlsZSkKKyAgICAgICAgICAgICAgICBiYi5ub3RlKCJDcmVhdGVkIGxpc3RlbmluZyBzb2NrZXQgZm9yIHFlbXUgc2VyaWFsIGNvbnNvbGUuIikKKyAgICAgICAgICAgICAgICB0cmllcyA9IDAKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIG1zZzoKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgICAgIGJiLmZhdGFsKCJGYWlsZWQgdG8gY3JlYXRlIGxpc3RlbmluZyBzb2NrZXQuIikKKyAgICAgICAgICAgICAgICB0cmllcyAtPSAxCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKCIlcyIgJSBtc2cpCisKKyAgICBkZWYgc3RhcnQoc2VsZiwgcWVtdXBhcmFtcyA9IE5vbmUpOgorCisgICAgICAgIGlmIHNlbGYuZGlzcGxheToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRJU1BMQVkiXSA9IHNlbGYuZGlzcGxheQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoIlRvIHN0YXJ0IHFlbXUgSSBuZWVkIGEgWCBkZXNrdG9wLCBwbGVhc2Ugc2V0IERJU1BMQVkgY29ycmVjdGx5IChlLmcuIERJU1BMQVk9OjEpIikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5yb290ZnMpOgorICAgICAgICAgICAgYmIuZXJyb3IoIkludmFsaWQgcm9vdGZzICVzIiAlIHNlbGYucm9vdGZzKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLnRtcGRpcik6CisgICAgICAgICAgICBiYi5lcnJvcigiSW52YWxpZCBUTVBESVIgcGF0aCAlcyIgJSBzZWxmLnRtcGRpcikKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuZW52aXJvblsiT0VfVE1QRElSIl0gPSBzZWxmLnRtcGRpcgorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZXBsb3lfZGlyX2ltYWdlKToKKyAgICAgICAgICAgIGJiLmVycm9yKCJJbnZhbGlkIERFUExPWV9ESVJfSU1BR0UgcGF0aCAlcyIgJSBzZWxmLmRlcGxveV9kaXJfaW1hZ2UpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bIkRFUExPWV9ESVJfSU1BR0UiXSA9IHNlbGYuZGVwbG95X2Rpcl9pbWFnZQorCisgICAgICAgICMgU2V0IHRoaXMgZmxhZyBzbyB0aGF0IFFlbXUgZG9lc24ndCBkbyBhbnkgZ3JhYnMgYXMgU0RMIGdyYWJzIGludGVyYWN0CisgICAgICAgICMgYmFkbHkgd2l0aCBzY3JlZW5zYXZlcnMuCisgICAgICAgIG9zLmVudmlyb25bIlFFTVVfRE9OVF9HUkFCIl0gPSAiMSIKKyAgICAgICAgc2VsZi5xZW11cGFyYW1zID0gJy0tYXBwZW5kICJyb290PS9kZXYvcmFtMCBjb25zb2xlPXR0eVMwIiAtbm9ncmFwaGljIC1zZXJpYWwgdW5peDolcyxzZXJ2ZXIsbm93YWl0JyAlIHNlbGYuc29ja2V0ZmlsZQorCisgICAgICAgIGxhdW5jaF9jbWQgPSAncWVtdS1zeXN0ZW0taTM4NiAta2VybmVsICVzIC1pbml0cmQgJXMgJXMnICUgKHNlbGYua2VybmVsLCBzZWxmLnJvb3Rmcywgc2VsZi5xZW11cGFyYW1zKQorICAgICAgICBzZWxmLnJ1bnFlbXUgPSBzdWJwcm9jZXNzLlBvcGVuKGxhdW5jaF9jbWQsc2hlbGw9VHJ1ZSxzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCxwcmVleGVjX2ZuPW9zLnNldHBncnApCisKKyAgICAgICAgYmIubm90ZSgicnVucWVtdSBzdGFydGVkLCBwaWQgaXMgJXMiICUgc2VsZi5ydW5xZW11LnBpZCkKKyAgICAgICAgYmIubm90ZSgid2FpdGluZyBhdCBtb3N0ICVzIHNlY29uZHMgZm9yIHFlbXUgcGlkIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSArIHNlbGYucnVucWVtdXRpbWUKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuaXNfYWxpdmUoKSBhbmQgdGltZS50aW1lKCkgPCBlbmR0aW1lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgxKQorCisgICAgICAgIGlmIHNlbGYuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIGJiLm5vdGUoInFlbXUgc3RhcnRlZCAtIHFlbXUgcHJvY2NlcyBwaWQgaXMgJXMiICUgc2VsZi5xZW11cGlkKQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJiLm5vdGUoIlFlbXUgcGlkIGRpZG4ndCBhcHBlYXJlZCBpbiAlcyBzZWNvbmRzIiAlIHNlbGYucnVucWVtdXRpbWUpCisgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLnJ1bnFlbXUuc3Rkb3V0CisgICAgICAgICAgICBzZWxmLnN0b3AoKQorICAgICAgICAgICAgYmIubm90ZSgiT3V0cHV0IGZyb20gcnVucWVtdTpcbiVzIiAlIG91dHB1dC5yZWFkKCkpCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gc2VsZi5pc19hbGl2ZSgpCisKKyAgICBkZWYgcnVuX3NlcmlhbChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgc2VsZi5zZXJ2ZXJfc29ja2V0LnNlbmRhbGwoY29tbWFuZCsnXG4nKQorICAgICAgICBkYXRhID0gJycKKyAgICAgICAgc3RhdHVzID0gMAorICAgICAgICBzdG9wcmVhZCA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSB0aW1lLnRpbWUoKSs1CisgICAgICAgIHdoaWxlIHRpbWUudGltZSgpPGVuZHRpbWUgYW5kIG5vdCBzdG9wcmVhZDoKKyAgICAgICAgICAgICAgICBzcmVhZCwgXywgXyA9IHNlbGVjdC5zZWxlY3QoW3NlbGYuc2VydmVyX3NvY2tldF0sW10sW10sNSkKKyAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlciA9IHNvY2sucmVjdigxMDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYW5zd2VyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGFuc3dlcgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3ByZWFkID0gVHJ1ZQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHN0YXR1cyA9IDEKKyAgICAgICAgcmV0dXJuIChzdGF0dXMsIHN0cihkYXRhKSkKKworICAgIGRlZiBmaW5kX2NoaWxkKHNlbGYscGFyZW50X3BpZCk6CisgICAgICAgICMKKyAgICAgICAgIyBXYWxrIHRoZSBwcm9jZXNzIHRyZWUgZnJvbSB0aGUgcHJvY2VzcyBzcGVjaWZpZWQgbG9va2luZyBmb3IgYSBxZW11LXN5c3RlbS4gUmV0dXJuIGl0cyBbcGlkJ2NtZF0KKyAgICAgICAgIworICAgICAgICBwcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwcycsICdheHd3JywgJy1vJywgJ3BpZCxwcGlkLGNvbW1hbmQnXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBwcm9jZXNzZXMgPSBwcy5zcGxpdCgnXG4nKQorICAgICAgICBuZmllbGRzID0gbGVuKHByb2Nlc3Nlc1swXS5zcGxpdCgpKSAtIDEKKyAgICAgICAgcGlkcyA9IHt9CisgICAgICAgIGNvbW1hbmRzID0ge30KKyAgICAgICAgZm9yIHJvdyBpbiBwcm9jZXNzZXNbMTpdOgorICAgICAgICAgICAgZGF0YSA9IHJvdy5zcGxpdChOb25lLCBuZmllbGRzKQorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICE9IDM6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGRhdGFbMV0gbm90IGluIHBpZHM6CisgICAgICAgICAgICAgICAgcGlkc1tkYXRhWzFdXSA9IFtdCisKKyAgICAgICAgICAgIHBpZHNbZGF0YVsxXV0uYXBwZW5kKGRhdGFbMF0pCisgICAgICAgICAgICBjb21tYW5kc1tkYXRhWzBdXSA9IGRhdGFbMl0KKworICAgICAgICBpZiBwYXJlbnRfcGlkIG5vdCBpbiBwaWRzOgorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcGFyZW50cyA9IFtdCisgICAgICAgIG5ld3BhcmVudHMgPSBwaWRzW3BhcmVudF9waWRdCisgICAgICAgIHdoaWxlIG5ld3BhcmVudHM6CisgICAgICAgICAgICBuZXh0ID0gW10KKyAgICAgICAgICAgIGZvciBwIGluIG5ld3BhcmVudHM6CisgICAgICAgICAgICAgICAgaWYgcCBpbiBwaWRzOgorICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBwaWRzW3BdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbiBub3QgaW4gcGFyZW50cyBhbmQgbiBub3QgaW4gbmV4dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LmFwcGVuZChuKQorICAgICAgICAgICAgICAgIGlmIHAgbm90IGluIHBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudHMuYXBwZW5kKHApCisgICAgICAgICAgICAgICAgICAgIG5ld3BhcmVudHMgPSBuZXh0CisgICAgICAgICNwcmludCAiQ2hpbGRyZW4gbWF0Y2hpbmcgJXM6IiAlIHN0cihwYXJlbnRzKQorICAgICAgICBmb3IgcCBpbiBwYXJlbnRzOgorICAgICAgICAgICAgIyBOZWVkIHRvIGJlIGNhcmVmdWwgaGVyZSBzaW5jZSBydW5xZW11LWludGVybmFsIHJ1bnMgImxkZCBxZW11LXN5c3RlbS14eHh4IgorICAgICAgICAgICAgIyBBbHNvLCBvbGQgdmVyc2lvbnMgb2YgbGRkICgyLjExKSBydW4gIkxEX1hYWFggcWVtdS1zeXN0ZW0teHh4eCIKKyAgICAgICAgICAgIGJhc2VjbWQgPSBjb21tYW5kc1twXS5zcGxpdCgpWzBdCisgICAgICAgICAgICBiYXNlY21kID0gb3MucGF0aC5iYXNlbmFtZShiYXNlY21kKQorICAgICAgICAgICAgaWYgInFlbXUtc3lzdGVtIiBpbiBiYXNlY21kIGFuZCAiLXNlcmlhbCB1bml4IiBpbiBjb21tYW5kc1twXToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2ludChwKSxjb21tYW5kc1twXV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3NzaGNvbnRyb2wucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmNTA1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvbGliL29lcWEvdXRpbHMvc3NoY29udHJvbC5weQpAQCAtMCwwICsxLDE1NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KKyMKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQpCisKKyMgUHJvdmlkZXMgYSBjbGFzcyBmb3Igc2V0dGluZyB1cCBzc2ggY29ubmVjdGlvbnMsCisjIHJ1bm5pbmcgY29tbWFuZHMgYW5kIGNvcHlpbmcgZmlsZXMgdG8vZnJvbSBhIHRhcmdldC4KKyMgSXQncyB1c2VkIGJ5IHRlc3RpbWFnZS5iYmNsYXNzIGFuZCB0ZXN0cyBpbiBsaWIvb2VxYS9ydW50aW1lLgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdAorCisKK2NsYXNzIFNTSFByb2Nlc3Mob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKipvcHRpb25zKToKKworICAgICAgICBzZWxmLmRlZmF1bHRvcHRzID0geworICAgICAgICAgICAgInN0ZG91dCI6IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICJzdGRlcnIiOiBzdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICJzdGRpbiI6IE5vbmUsCisgICAgICAgICAgICAic2hlbGwiOiBGYWxzZSwKKyAgICAgICAgICAgICJidWZzaXplIjogLTEsCisgICAgICAgICAgICAicHJlZXhlY19mbiI6IG9zLnNldHNpZCwKKyAgICAgICAgfQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBkaWN0KHNlbGYuZGVmYXVsdG9wdHMpCisgICAgICAgIHNlbGYub3B0aW9ucy51cGRhdGUob3B0aW9ucykKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBOb25lCisgICAgICAgIHNlbGYub3V0cHV0ID0gTm9uZQorICAgICAgICBzZWxmLnByb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc3RhcnR0aW1lID0gTm9uZQorICAgICAgICBzZWxmLmxvZ2ZpbGUgPSBOb25lCisKKyAgICAgICAgIyBVbnNldCBESVNQTEFZIHdoaWNoIG1lYW5zIHdlIHdvbid0IHRyaWdnZXIgU1NIX0FTS1BBU1MKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgaWYgIkRJU1BMQVkiIGluIGVudjoKKyAgICAgICAgICAgIGRlbCBlbnZbJ0RJU1BMQVknXQorICAgICAgICBzZWxmLm9wdGlvbnNbJ2VudiddID0gZW52CisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzIiAlIG1zZykKKworICAgIGRlZiBfcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIHNlbGYucHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgKipzZWxmLm9wdGlvbnMpCisgICAgICAgIGlmIHRpbWVvdXQ6CisgICAgICAgICAgICBlbmR0aW1lID0gc2VsZi5zdGFydHRpbWUgKyB0aW1lb3V0CisgICAgICAgICAgICBlb2YgPSBGYWxzZQorICAgICAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgPCBlbmR0aW1lIGFuZCBub3QgZW9mOgorICAgICAgICAgICAgICAgIGlmIHNlbGVjdC5zZWxlY3QoW3NlbGYucHJvY2Vzcy5zdGRvdXRdLCBbXSwgW10sIDUpWzBdICE9IFtdOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLnByb2Nlc3Muc3Rkb3V0LmZpbGVubygpLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisKKworICAgICAgICAgICAgIyBwcm9jZXNzIGhhc24ndCByZXR1cm5lZCB5ZXQKKyAgICAgICAgICAgIGlmIG5vdCBlb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLnRlcm1pbmF0ZSgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzLmtpbGwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbGFzdGxpbmUgPSAiXG5Qcm9jZXNzIGtpbGxlZCAtIG5vIG91dHB1dCBmb3IgJWQgc2Vjb25kcy4gVG90YWwgcnVubmluZyB0aW1lOiAlZCBzZWNvbmRzLiIgJSAodGltZW91dCwgdGltZS50aW1lKCkgLSBzZWxmLnN0YXJ0dGltZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZyhsYXN0bGluZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQgKz0gbGFzdGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dCA9IHNlbGYucHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICBzZWxmLmxvZyhvdXRwdXQucnN0cmlwKCkpCisKKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzZWxmLnByb2Nlc3Mud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0LnJzdHJpcCgpCisKKyAgICBkZWYgcnVuKHNlbGYsIGNvbW1hbmQsIHRpbWVvdXQ9Tm9uZSwgbG9nZmlsZT1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcnVuKGNvbW1hbmQsIHRpbWVvdXQsIGxvZ2ZpbGUpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgTmVlZCB0byBndWFyZCBhZ2FpbnN0IGEgU3lzdGVtRXhpdCBvciBvdGhlciBleGNlcHRpb24gb2NjdXJpbmcgd2hpbHN0IHJ1bm5pbmcKKyAgICAgICAgICAgICMgYW5kIGVuc3VyZSB3ZSBkb24ndCBsZWF2ZSBhIHByb2Nlc3MgYmVoaW5kLgorICAgICAgICAgICAgaWYgc2VsZi5wcm9jZXNzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzcy5raWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXR1cyA9IHNlbGYucHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiAoc2VsZi5zdGF0dXMsIHNlbGYub3V0cHV0KQorCitjbGFzcyBTU0hDb250cm9sKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlwLCBsb2dmaWxlPU5vbmUsIHRpbWVvdXQ9MzAwLCB1c2VyPSdyb290JywgcG9ydD1Ob25lKToKKyAgICAgICAgc2VsZi5pcCA9IGlwCisgICAgICAgIHNlbGYuZGVmYXVsdHRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuaWdub3JlX3N0YXR1cyA9IFRydWUKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gbG9nZmlsZQorICAgICAgICBzZWxmLnVzZXIgPSB1c2VyCisgICAgICAgIHNlbGYuc3NoX29wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgJy1vJywgJ1VzZXJLbm93bkhvc3RzRmlsZT0vZGV2L251bGwnLAorICAgICAgICAgICAgICAgICctbycsICdTdHJpY3RIb3N0S2V5Q2hlY2tpbmc9bm8nLAorICAgICAgICAgICAgICAgICctbycsICdMb2dMZXZlbD1FUlJPUicKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuc3NoID0gWydzc2gnLCAnLWwnLCBzZWxmLnVzZXIgXSArIHNlbGYuc3NoX29wdGlvbnMKKyAgICAgICAgc2VsZi5zY3AgPSBbJ3NjcCddICsgc2VsZi5zc2hfb3B0aW9ucworICAgICAgICBpZiBwb3J0OgorICAgICAgICAgICAgc2VsZi5zc2ggPSBzZWxmLnNzaCArIFsgJy1wJywgcG9ydCBdCisgICAgICAgICAgICBzZWxmLnNjcCA9IHNlbGYuc2NwICsgWyAnLVAnLCBwb3J0IF0KKworICAgIGRlZiBsb2coc2VsZiwgbXNnKToKKyAgICAgICAgaWYgc2VsZi5sb2dmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYubG9nZmlsZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9pbnRlcm5hbF9ydW4oc2VsZiwgY29tbWFuZCwgdGltZW91dD1Ob25lLCBpZ25vcmVfc3RhdHVzID0gVHJ1ZSk6CisgICAgICAgIHNlbGYubG9nKCJbUnVubmluZ10kICVzIiAlICIgIi5qb2luKGNvbW1hbmQpKQorCisgICAgICAgIHByb2MgPSBTU0hQcm9jZXNzKCkKKyAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBwcm9jLnJ1bihjb21tYW5kLCB0aW1lb3V0LCBsb2dmaWxlPXNlbGYubG9nZmlsZSkKKworICAgICAgICBzZWxmLmxvZygiW0NvbW1hbmQgcmV0dXJuZWQgJyVkJyBhZnRlciAlLjJmIHNlY29uZHNdIiAlIChzdGF0dXMsIHRpbWUudGltZSgpIC0gcHJvYy5zdGFydHRpbWUpKQorCisgICAgICAgIGlmIHN0YXR1cyBhbmQgbm90IGlnbm9yZV9zdGF0dXM6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiQ29tbWFuZCAnJXMnIHJldHVybmVkIG5vbi16ZXJvIGV4aXQgc3RhdHVzICVkOlxuJXMiICUgKGNvbW1hbmQsIHN0YXR1cywgb3V0cHV0KSkKKworICAgICAgICByZXR1cm4gKHN0YXR1cywgb3V0cHV0KQorCisgICAgZGVmIHJ1bihzZWxmLCBjb21tYW5kLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZCAtIHNzaCBjb21tYW5kIHRvIHJ1bgorICAgICAgICB0aW1lb3V0PTx2YWw+IC0ga2lsbCBjb21tYW5kIGlmIHRoZXJlIGlzIG5vIG91dHB1dCBhZnRlciA8dmFsPiBzZWNvbmRzCisgICAgICAgIHRpbWVvdXQ9Tm9uZSAtIGtpbGwgY29tbWFuZCBpZiB0aGVyZSBpcyBubyBvdXRwdXQgYWZ0ZXIgYSBkZWZhdWx0IHZhbHVlIHNlY29uZHMKKyAgICAgICAgdGltZW91dD0wIC0gbm8gdGltZW91dCwgbGV0IGNvbW1hbmQgcnVuIHVudGlsIGl0IHJldHVybnMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHNvdXJjZSAvZXRjL3Byb2ZpbGUgZm9yIGEgcHJvcGVyIFBBVEggb24gdGhlIHRhcmdldAorICAgICAgICBjb21tYW5kID0gc2VsZi5zc2ggKyBbc2VsZi5pcCwgJyAuIC9ldGMvcHJvZmlsZTsgJyArIGNvbW1hbmRdCisKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBzZWxmLmRlZmF1bHR0aW1lb3V0LCBzZWxmLmlnbm9yZV9zdGF0dXMpCisgICAgICAgIGlmIHRpbWVvdXQgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgTm9uZSwgc2VsZi5pZ25vcmVfc3RhdHVzKQorICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJuYWxfcnVuKGNvbW1hbmQsIHRpbWVvdXQsIHNlbGYuaWdub3JlX3N0YXR1cykKKworICAgIGRlZiBjb3B5X3RvKHNlbGYsIGxvY2FscGF0aCwgcmVtb3RlcGF0aCk6CisgICAgICAgIGNvbW1hbmQgPSBzZWxmLnNjcCArIFtsb2NhbHBhdGgsICclc0AlczolcycgJSAoc2VsZi51c2VyLCBzZWxmLmlwLCByZW1vdGVwYXRoKV0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2ludGVybmFsX3J1bihjb21tYW5kLCBpZ25vcmVfc3RhdHVzPUZhbHNlKQorCisgICAgZGVmIGNvcHlfZnJvbShzZWxmLCByZW1vdGVwYXRoLCBsb2NhbHBhdGgpOgorICAgICAgICBjb21tYW5kID0gc2VsZi5zY3AgKyBbJyVzQCVzOiVzJyAlIChzZWxmLnVzZXIsIHNlbGYuaXAsIHJlbW90ZXBhdGgpLCBsb2NhbHBhdGhdCisgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcm5hbF9ydW4oY29tbWFuZCwgaWdub3JlX3N0YXR1cz1GYWxzZSkKZGlmZiAtLWdpdCBhL21ldGEvbGliL29lcWEvdXRpbHMvdGFyZ2V0YnVpbGQucHkgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3RhcmdldGJ1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTBkNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL2xpYi9vZXFhL3V0aWxzL3RhcmdldGJ1aWxkLnB5CkBAIC0wLDAgKzEsMTM3IEBACisjIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorIworIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCkKKworIyBQcm92aWRlcyBhIGNsYXNzIGZvciBhdXRvbWF0aW5nIGJ1aWxkIHRlc3RzIGZvciBwcm9qZWN0cworCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IGJiLnV0aWxzCitpbXBvcnQgc3VicHJvY2VzcworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCisKK2NsYXNzIEJ1aWxkUHJvamVjdCgpOgorCisgICAgX19tZXRhY2xhc3NfXyA9IEFCQ01ldGEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWU9Tm9uZSwgdG1wZGlyPSIvdG1wLyIpOgorICAgICAgICBzZWxmLmQgPSBkCisgICAgICAgIHNlbGYudXJpID0gdXJpCisgICAgICAgIHNlbGYuYXJjaGl2ZSA9IG9zLnBhdGguYmFzZW5hbWUodXJpKQorICAgICAgICBzZWxmLmxvY2FsYXJjaGl2ZSA9IG9zLnBhdGguam9pbih0bXBkaXIsc2VsZi5hcmNoaXZlKQorICAgICAgICBzZWxmLmZuYW1lID0gcmUuc3ViKHInLnRhci5iejJ8dGFyLmd6JCcsICcnLCBzZWxmLmFyY2hpdmUpCisgICAgICAgIGlmIGZvbGRlcm5hbWU6CisgICAgICAgICAgICBzZWxmLmZuYW1lID0gZm9sZGVybmFtZQorCisgICAgIyBEb3dubG9hZCBzZWxmLmFyY2hpdmUgdG8gc2VsZi5sb2NhbGFyY2hpdmUKKyAgICBkZWYgX2Rvd25sb2FkX2FyY2hpdmUoc2VsZik6CisKKyAgICAgICAgZGxfZGlyID0gc2VsZi5kLmdldFZhcigiRExfRElSIiwgVHJ1ZSkKKyAgICAgICAgaWYgZGxfZGlyIGFuZCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGxfZGlyLCBzZWxmLmFyY2hpdmUpKToKKyAgICAgICAgICAgIGJiLnV0aWxzLmNvcHlmaWxlKG9zLnBhdGguam9pbihkbF9kaXIsIHNlbGYuYXJjaGl2ZSksIHNlbGYubG9jYWxhcmNoaXZlKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZXhwb3J0dmFycyA9IFsnSFRUUF9QUk9YWScsICdodHRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnSFRUUFNfUFJPWFknLCAnaHR0cHNfcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdGVFBfUFJPWFknLCAnZnRwX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnRlRQU19QUk9YWScsICdmdHBzX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnTk9fUFJPWFknLCAnbm9fcHJveHknLAorICAgICAgICAgICAgICAgICAgICAgICdBTExfUFJPWFknLCAnYWxsX3Byb3h5JywKKyAgICAgICAgICAgICAgICAgICAgICAnU09DS1M1X1VTRVInLCAnU09DS1M1X1BBU1NXRCddCisKKyAgICAgICAgY21kID0gJycKKyAgICAgICAgZm9yIHZhciBpbiBleHBvcnR2YXJzOgorICAgICAgICAgICAgdmFsID0gc2VsZi5kLmdldFZhcih2YXIsIFRydWUpCisgICAgICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICAgICAgY21kID0gJ2V4cG9ydCAnICsgdmFyICsgJz1cIiVzXCI7ICVzJyAlICh2YWwsIGNtZCkKKworICAgICAgICBjbWQgPSBjbWQgKyAid2dldCAtTyAlcyAlcyIgJSAoc2VsZi5sb2NhbGFyY2hpdmUsIHNlbGYudXJpKQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoY21kLCBzaGVsbD1UcnVlKQorCisgICAgIyBUaGlzIG1ldGhvZCBzaG91bGQgcHJvdmlkZSBhIHdheSB0byBydW4gYSBjb21tYW5kIGluIHRoZSBkZXNpcmVkIGVudmlyb25tZW50LgorICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHBhc3MKKworICAgICMgVGhlIHRpbWVvdXQgcGFyYW1ldGVyIG9mIHRhcmdldC5ydW4gaXMgc2V0IHRvIDAgdG8gbWFrZSB0aGUgc3NoIGNvbW1hbmQKKyAgICAjIHJ1biB3aXRoIG5vIHRpbWVvdXQuCisgICAgZGVmIHJ1bl9jb25maWd1cmUoc2VsZiwgY29uZmlndXJlX2FyZ3M9JycsIGV4dHJhX2NtZHM9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuKCdjZCAlczsgJXMgLi9jb25maWd1cmUgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBleHRyYV9jbWRzLCBjb25maWd1cmVfYXJncykpCisKKyAgICBkZWYgcnVuX21ha2Uoc2VsZiwgbWFrZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bignY2QgJXM7IG1ha2UgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBtYWtlX2FyZ3MpKQorCisgICAgZGVmIHJ1bl9pbnN0YWxsKHNlbGYsIGluc3RhbGxfYXJncz0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9ydW4oJ2NkICVzOyBtYWtlIGluc3RhbGwgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBpbnN0YWxsX2FyZ3MpKQorCisgICAgZGVmIGNsZWFuKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW4oJ3JtIC1yZiAlcycgJSBzZWxmLnRhcmdldGRpcikKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKCdybSAtZiAlcycgJSBzZWxmLmxvY2FsYXJjaGl2ZSwgc2hlbGw9VHJ1ZSkKKyAgICAgICAgcGFzcworCitjbGFzcyBUYXJnZXRCdWlsZFByb2plY3QoQnVpbGRQcm9qZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YXJnZXQsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi50YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSAifi8iCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj0iL3RtcCIpCisKKyAgICBkZWYgZG93bmxvYWRfYXJjaGl2ZShzZWxmKToKKworICAgICAgICBzZWxmLl9kb3dubG9hZF9hcmNoaXZlKCkKKworICAgICAgICAoc3RhdHVzLCBvdXRwdXQpID0gc2VsZi50YXJnZXQuY29weV90byhzZWxmLmxvY2FsYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29weSBhcmNoaXZlIHRvIHRhcmdldCwgb3V0cHV0OiAlcyIgJSBvdXRwdXQpCisKKyAgICAgICAgKHN0YXR1cywgb3V0cHV0KSA9IHNlbGYudGFyZ2V0LnJ1bigndGFyIHhmICVzJXMgLUMgJXMnICUgKHNlbGYudGFyZ2V0ZGlyLCBzZWxmLmFyY2hpdmUsIHNlbGYudGFyZ2V0ZGlyKSkKKyAgICAgICAgaWYgc3RhdHVzICE9IDA6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBleHRyYWN0IGFyY2hpdmUsIG91dHB1dDogJXMiICUgb3V0cHV0KQorCisgICAgICAgICNDaGFuZ2UgdGFyZ2V0ZGlyIHRvIHByb2plY3QgZm9sZGVyCisgICAgICAgIHNlbGYudGFyZ2V0ZGlyID0gc2VsZi50YXJnZXRkaXIgKyBzZWxmLmZuYW1lCisKKyAgICAjIFRoZSB0aW1lb3V0IHBhcmFtZXRlciBvZiB0YXJnZXQucnVuIGlzIHNldCB0byAwIHRvIG1ha2UgdGhlIHNzaCBjb21tYW5kCisgICAgIyBydW4gd2l0aCBubyB0aW1lb3V0LgorICAgIGRlZiBfcnVuKHNlbGYsIGNtZCk6CisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5ydW4oY21kLCAwKVswXQorCisKK2NsYXNzIFNES0J1aWxkUHJvamVjdChCdWlsZFByb2plY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RwYXRoLCBzZGtlbnYsIGQsIHVyaSwgZm9sZGVybmFtZT1Ob25lKToKKyAgICAgICAgc2VsZi5zZGtlbnYgPSBzZGtlbnYKKyAgICAgICAgc2VsZi50ZXN0ZGlyID0gdGVzdHBhdGgKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSB0ZXN0cGF0aAorICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIodGVzdHBhdGgpCisgICAgICAgIHNlbGYuZGF0ZXRpbWUgPSBkLmdldFZhcignREFURVRJTUUnLCBUcnVlKQorICAgICAgICBzZWxmLnRlc3Rsb2dkaXIgPSBkLmdldFZhcigiVEVTVF9MT0dfRElSIiwgVHJ1ZSkKKyAgICAgICAgYmIudXRpbHMubWtkaXJoaWVyKHNlbGYudGVzdGxvZ2RpcikKKyAgICAgICAgc2VsZi5sb2dmaWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGxvZ2RpciwgInNka190YXJnZXRfbG9nLiVzIiAlIHNlbGYuZGF0ZXRpbWUpCisgICAgICAgIEJ1aWxkUHJvamVjdC5fX2luaXRfXyhzZWxmLCBkLCB1cmksIGZvbGRlcm5hbWUsIHRtcGRpcj10ZXN0cGF0aCkKKworICAgIGRlZiBkb3dubG9hZF9hcmNoaXZlKHNlbGYpOgorCisgICAgICAgIHNlbGYuX2Rvd25sb2FkX2FyY2hpdmUoKQorCisgICAgICAgIGNtZCA9ICd0YXIgeGYgJXMlcyAtQyAlcycgJSAoc2VsZi50YXJnZXRkaXIsIHNlbGYuYXJjaGl2ZSwgc2VsZi50YXJnZXRkaXIpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHNoZWxsPVRydWUpCisKKyAgICAgICAgI0NoYW5nZSB0YXJnZXRkaXIgdG8gcHJvamVjdCBmb2xkZXIKKyAgICAgICAgc2VsZi50YXJnZXRkaXIgPSBzZWxmLnRhcmdldGRpciArIHNlbGYuZm5hbWUKKworICAgIGRlZiBydW5fY29uZmlndXJlKHNlbGYsIGNvbmZpZ3VyZV9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2NvbmZpZ3VyZShjb25maWd1cmVfYXJncz0oY29uZmlndXJlX2FyZ3Mgb3IgJyRDT05GSUdVUkVfRkxBR1MnKSwgZXh0cmFfY21kcz0nIGdudS1jb25maWdpemU7ICcpCisKKyAgICBkZWYgcnVuX2luc3RhbGwoc2VsZiwgaW5zdGFsbF9hcmdzPScnKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFNES0J1aWxkUHJvamVjdCwgc2VsZikucnVuX2luc3RhbGwoaW5zdGFsbF9hcmdzPShpbnN0YWxsX2FyZ3Mgb3IgIkRFU1RESVI9JXMvLi4vaW5zdGFsbCIgJSBzZWxmLnRhcmdldGRpcikpCisKKyAgICBkZWYgbG9nKHNlbGYsIG1zZyk6CisgICAgICAgIGlmIHNlbGYubG9nZmlsZToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmxvZ2ZpbGUsICJhIikgYXMgZjoKKyAgICAgICAgICAgICAgIGYud3JpdGUoIiVzXG4iICUgbXNnKQorCisgICAgZGVmIF9ydW4oc2VsZiwgY21kKToKKyAgICAgICAgc2VsZi5sb2coIlJ1bm5pbmcgLiAlczsgIiAlIHNlbGYuc2RrZW52ICsgY21kKQorICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jYWxsKCIuICVzOyAiICUgc2VsZi5zZGtlbnYgKyBjbWQsIHNoZWxsPVRydWUpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxNTYxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQuaW5jCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQSBkYWVtb24gZm9yIGRlbGl2ZXJpbmcgQUNQSSBldmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjcGlkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0zMzE0MCZhdGlkPTQwNzM0MSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9hY3BpZDIvYWNwaWQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vYWNwaWQuc2VydmljZSBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJhY3BpZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYWNwaWQuc2VydmljZSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC91c3Ivc2Jpbiwke3NiaW5kaXJ9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hY3BpZAorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvYWNwaWQKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9ldmVudHMKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hY3BpZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FjcGlkLnNlcnZpY2UKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvYWNwaWQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1ic3AvYWNwaWQvYWNwaWQvYWNwaWQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzBlNzQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9hY3BpZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QUNQSSBFdmVudCBEYWVtb24KK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitUeXBlPWZvcmtpbmcKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYWNwaWQKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9pbml0IGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwZmYzODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkL2luaXQKQEAgLTAsMCArMSwzMSBAQAorIyEgL2Jpbi9zaCAtZQorCit0ZXN0IC14IC91c3Ivc2Jpbi9hY3BpZCB8fCBleGl0IDAKK3Rlc3QgLWQgL3Byb2MvYWNwaSB8fCBleGl0IDAKK21rZGlyIC1wIC9ldGMvYWNwaS9ldmVudHMKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIGVjaG8gLW4gIlN0YXJ0aW5nIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSBkYWVtb246ICIKKyAgICBpZiBbICEgLWQgL2V0Yy9hY3BpL2V2ZW50cyBdOyB0aGVuCisgICAgICAgIGVjaG8gIlRoZXJlIGlzIG5vdCBhbnkgcnVsZSBjb25maWd1cmF0aW9uIGZpbGUuIgorICAgIGVsc2UKKyAgICAgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLVMgLXggL3Vzci9zYmluL2FjcGlkIC0tIC1jIC9ldGMvYWNwaS9ldmVudHMKKyAgICAgICAgZWNobyAiYWNwaWQuIgorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvIC1uICJTdG9wcGluZyBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBQb3dlciBJbnRlcmZhY2UgZGFlbW9uOiAiCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLUsgLXggL3Vzci9zYmluL2FjcGlkCisgICAgZWNobyAiYWNwaWQuIgorICAgIDs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKSAKKyAgICAkMCBzdG9wCisgICAgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9hY3BpZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2FjcGlkL2FjcGlkXzIuMC4yMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTMxN2E0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hY3BpZC9hY3BpZF8yLjAuMjMuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGFjcGlkLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Y2E0M2NiYzg0MmMyMzM2ZTgzNTkyNmMyMTY2YzI4YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hY3BpZC5oO2VuZGxpbmU9MjQ7bWQ1PTMyNGE5Y2YyMjVhZTY5ZGRhYWQxYmY5ZDk0MjExNWI1IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdiY2RjZGVmY2Q1M2IwMzczMGU1MGJhODQyNTU0ZWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDM5NmFhZWMxMzUxMGMzYTFmYWE5NDFhMTVhNGI1MzM1YjZhZTRmYmVjODQzOGI5MjQ5Yjg4YzNiNjYxODdlZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmN2JiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLmJiCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IE1hdHRoaWFzIEhlbnRnZXMgPGRldmVsQGhlbnRnZXMubmV0PiAoYykgMjAwNworIyBMaWNlbnNlOiBNSVQgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAorIyAgICAgICAgICAgICAgIGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UpCisjCisjIEZpbGVuYW1lOiBhbHNhLXN0YXRlLmJiCisKK1NVTU1BUlkgPSAiQWxzYSBzY2VuYXJpbyBmaWxlcyB0byBlbmFibGUgYWxzYSBzdGF0ZSByZXN0b3JhdGlvbiIKK0RFU0NSSVBUSU9OID0gIkFsc2EgU2NlbmFyaW8gRmlsZXMgLSBhbiBpbml0IHNjcmlwdCBhbmQgc3RhdGUgZmlsZXMgdG8gcmVzdG9yZSBcCitzb3VuZCBzdGF0ZSBhdCBzeXN0ZW0gYm9vdCBhbmQgc2F2ZSBpdCBhdCBzeXN0ZW0gc2h1dCBkb3duLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQViA9ICIwLjIuMCIKK1BSID0gInI1IgorCitTUkNfVVJJID0gIlwKKyAgZmlsZTovL2Fzb3VuZC5jb25mIFwKKyAgZmlsZTovL2Fzb3VuZC5zdGF0ZSBcCisgIGZpbGU6Ly9hbHNhLXN0YXRlLWluaXQgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgQXMgdGhlIHJlY2lwZSBkb2Vzbid0IGluaGVyaXQgc3lzdGVtZC5iYmNsYXNzLCB3ZSBuZWVkIHRvIHNldCB0aGlzIHZhcmlhYmxlCisjIG1hbnVhbGx5IHRvIGF2b2lkIHVubmVjZXNzYXJ5IHBvc3RpbnN0L3ByZWluc3QgZ2VuZXJhdGVkLgorcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYWxzYS1zdGF0ZSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDM5IFMgLiBzdG9wIDMxIDAgNiAuIgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIHRoZSBpbml0IHNjcmlwdCB3aGVuICdzeXN2aW5pdCcgaXMgaW4gRElTVFJPX0ZFQVRVUkVTLgorICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJc2VkIC1pIC1lICJzOiNTVEFURURJUiM6JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYTpnIiAke1dPUktESVJ9L2Fsc2Etc3RhdGUtaW5pdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYWxzYS1zdGF0ZS1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hbHNhLXN0YXRlCisgICAgZmkKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Fzb3VuZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5zdGF0ZSAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYQorfQorCitQQUNLQUdFUyArPSAiYWxzYS1zdGF0ZXMiCisKK1JSRUNPTU1FTkRTX2Fsc2Etc3RhdGUgPSAiYWxzYS1zdGF0ZXMiCisKK1JERVBFTkRTXyR7UE59ID0gImFsc2EtdXRpbHMtYWxzYWN0bCIKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kICR7c3lzY29uZmRpcn0vYXNvdW5kLmNvbmYiCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9hc291bmQuY29uZiIKKworRklMRVNfYWxzYS1zdGF0ZXMgPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS8qLnN0YXRlIgorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisJaWYgdGVzdCAteiAiJEQiCisJdGhlbgorCQlpZiB0ZXN0IC14ICR7c2JpbmRpcn0vYWxzYWN0bAorCQl0aGVuCisJCQkke3NiaW5kaXJ9L2Fsc2FjdGwgLWYgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWxzYS9hc291bmQuc3RhdGUgcmVzdG9yZQorCQlmaQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLWluaXQgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlLWluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWVlNTljYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYWxzYS1zdGF0ZS9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUtaW5pdApAQCAtMCwwICsxLDM5IEBACisjISAvYmluL3NoCisjCisjIENvcHlyaWdodCBNYXR0aGlhcyBIZW50Z2VzIDxkZXZlbEBoZW50Z2VzLm5ldD4gKGMpIDIwMDcKKyMgTGljZW5zZTogR1BMIChzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQgZm9yIGEgY29weSBvZiB0aGUgbGljZW5zZSkKKyMKKyMgRmlsZW5hbWU6IGFsc2Etc3RhdGUKKyMgRGF0ZTogMjAwNzAzMDggKFlNRCkKKworIyBzb3VyY2UgZnVuY3Rpb24gbGlicmFyeQorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworYXNvdW5kX3Jlc3RvcmUoKXsKKwllY2hvICJBTFNBOiBSZXN0b3JpbmcgbWl4ZXIgc2V0dGluZ3MuLi4iCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vYWxzYWN0bCAtYSAtZSAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZQorCXRoZW4KKwkJL3Vzci9zYmluL2Fsc2FjdGwgLWYgI1NUQVRFRElSIy9hc291bmQuc3RhdGUgcmVzdG9yZSAmCisJZmkKK30KKworYXNvdW5kX3N0b3JlKCl7CisJZWNobyAiQUxTQTogU3RvcmluZyBtaXhlciBzZXR0aW5ncy4uLiIKKwlpZiB0ZXN0IC14IC91c3Ivc2Jpbi9hbHNhY3RsCisJdGhlbgorCQkvdXNyL3NiaW4vYWxzYWN0bCAtZiAjU1RBVEVESVIjL2Fzb3VuZC5zdGF0ZSBzdG9yZQorCWZpCit9CisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCQlhc291bmRfcmVzdG9yZSA7Oworc3RvcCkJCWFzb3VuZF9zdG9yZSA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9hbHNhY3RsOworICAgIGV4aXQgJD8KKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYWxzYS1zdGF0ZSB7c3RhcnR8c3RvcHxzdGF0dXN9IgorICAgIGV4aXQgMQorICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY1M2NmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLmNvbmYKQEAgLTAsMCArMSBAQAorIyBHbG9iYWwgYWxzYS1saWIgY29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLnN0YXRlIGIvbWV0YS9yZWNpcGVzLWJzcC9hbHNhLXN0YXRlL2Fsc2Etc3RhdGUvYXNvdW5kLnN0YXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDFjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Fsc2Etc3RhdGUvYWxzYS1zdGF0ZS9hc291bmQuc3RhdGUKQEAgLTAsMCArMSBAQAorIyBEdW1teSBmaWxlLCBkbyBub3QgZGVsZXRlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhYjgyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWQuc2VydmljZQpAQCAtMCwwICsxLDcgQEAKK1tVbml0XQorRGVzY3JpcHRpb249QWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KK0FmdGVyPXJlbW90ZS1mcy50YXJnZXQKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9kZWZhdWx0L2FwbWQKK0V4ZWNTdGFydD1AU0JJTkRJUkAvYXBtZCAtUCBAU1lTQ09ORkRJUkAvYXBtL2FwbWRfcHJveHkgJEFQTUQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OGVlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5CkBAIC0wLDAgKzEsOTEgQEAKKyMhL2Jpbi9zaAorIyAKKyMgYXBtZF9wcm94eSAtIHByb2dyYW0gZGlzcGF0Y2hlciBmb3IgQVBNIGRhZW1vbgorIworIyBXcml0dGVuIGJ5IENyYWlnIE1hcmt3YXJkdCAoY3JhaWdtQGxoZWFtYWlsLmdzZmMubmFzYS5nb3YpIDIxIE1heSAxOTk5CisjIE1vZGlmaWVkIGZvciBEZWJpYW4gYnkgQXZlcnkgUGVubmFydW4KKyMKKyMgVGhpcyBzaGVsbCBzY3JpcHQgaXMgY2FsbGVkIGJ5IHRoZSBBUE0gZGFlbW9uIChhcG1kKSB3aGVuIGEgcG93ZXIKKyMgbWFuYWdlbWVudCBldmVudCBvY2N1cnMuICBJdHMgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudHMgZGVzY3JpYmUgdGhlCisjIGV2ZW50LiAgRm9yIGV4YW1wbGUsIGFwbWQgd2lsbCBjYWxsICJhcG1kX3Byb3h5IHN1c3BlbmQgc3lzdGVtIiBqdXN0CisjIGJlZm9yZSB0aGUgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyMKKyMgSGVyZSBhcmUgdGhlIHBvc3NpYmxlIGFyZ3VtZW50czoKKyMKKyMgc3RhcnQgICAgICAgICAgICAgIC0gQVBNIGRhZW1vbiBoYXMgc3RhcnRlZAorIyBzdG9wICAgICAgICAgICAgICAgLSBBUE0gZGFlbW9uIGlzIHNodXR0aW5nIGRvd24KKyMgc3VzcGVuZCBjcml0aWNhbCAgIC0gQVBNIHN5c3RlbSBpbmRpY2F0ZXMgY3JpdGljYWwgc3VzcGVuZCAoKyspCisjIHN1c3BlbmQgc3lzdGVtICAgICAtIEFQTSBzeXN0ZW0gaGFzIHJlcXVlc3RlZCBzdXNwZW5kIG1vZGUKKyMgc3VzcGVuZCB1c2VyICAgICAgIC0gVXNlciBoYXMgcmVxdWVzdGVkIHN1c3BlbmQgbW9kZQorIyBzdGFuZGJ5IHN5c3RlbSAgICAgLSBBUE0gc3lzdGVtIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlIAorIyBzdGFuZGJ5IHVzZXIgICAgICAgLSBVc2VyIGhhcyByZXF1ZXN0ZWQgc3RhbmRieSBtb2RlCisjIHJlc3VtZSBzdXNwZW5kICAgICAtIFN5c3RlbSBoYXMgcmVzdW1lZCBmcm9tIHN1c3BlbmQgbW9kZQorIyByZXN1bWUgc3RhbmRieSAgICAgLSBTeXN0ZW0gaGFzIHJlc3VtZWQgZnJvbSBzdGFuZGJ5IG1vZGUKKyMgcmVzdW1lIGNyaXRpY2FsICAgIC0gU3lzdGVtIGhhcyByZXN1bWVkIGZyb20gY3JpdGljYWwgc3VzcGVuZAorIyBjaGFuZ2UgYmF0dGVyeSAgICAgLSBBUE0gc3lzdGVtIHJlcG9ydGVkIGxvdyBiYXR0ZXJ5CisjIGNoYW5nZSBwb3dlciAgICAgICAtIEFQTSBzeXN0ZW0gcmVwb3J0ZWQgQUMvYmF0dGVyeSBjaGFuZ2UKKyMgY2hhbmdlIHRpbWUgICAgICAgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCB0aW1lIGNoYW5nZSAoKikKKyMgY2hhbmdlIGNhcGFiaWxpdHkgIC0gQVBNIHN5c3RlbSByZXBvcnRlZCBjb25maWcuIGNoYW5nZSAoKykKKyMKKyMgKCopIC0gQVBNIGRhZW1vbiBtYXkgYmUgY29uZmlndXJlZCB0byBub3QgY2FsbCB0aGVzZSBzZXF1ZW5jZXMKKyMgKCspIC0gQXZhaWxhYmxlIGlmIEFQTSBrZXJuZWwgc3VwcG9ydHMgaXQuCisjICgrKykgLSAic3VzcGVuZCBjcml0aWNhbCIgaXMgbmV2ZXIgcGFzc2VkIHRvIGFwbWQgZnJvbSB0aGUga2VybmVsLAorIyAgIHNvIHdlIHdpbGwgbmV2ZXIgc2VlIGl0IGhlcmUuICBTY3JpcHRzIHRoYXQgcHJvY2VzcyAicmVzdW1lCisjICAgY3JpdGljYWwiIGV2ZW50cyBuZWVkIHRvIHRha2UgdGhpcyBpbnRvIGFjY291bnQuCisjCisjIEl0IGlzIHRoZSBwcm94eSBzY3JpcHQncyByZXNwb25zaWJpbGl0eSB0byBleGFtaW5lIHRoZSBBUE0gc3RhdHVzCisjICh2aWEgL3Byb2MvYXBtKSBvciBvdGhlciBzdGF0dXMgYW5kIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9ucy4KKyMgRm9yIGV4YW1wbGUsIHRoZSBzY3JpcHQgbWlnaHQgdW5tb3VudCBuZXR3b3JrIGRyaXZlcyBiZWZvcmUgdGhlCisjIG1hY2hpbmUgaXMgc3VzcGVuZGVkLgorIworIyBJbiBEZWJpYW4sIHRoZSB1c3VhbCB3YXkgb2YgYWRkaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHByb3h5IGlzIHRvCisjIGFkZCBhIHNjcmlwdCB0byAvZXRjL2FwbS9ldmVudC5kLiAgVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgYnkKKyMgYXBtZF9wcm94eSAodmlhIHJ1bi1wYXJ0cykgd2l0aCB0aGUgc2FtZSBhcmd1bWVudHMuCisjCisjIElmIGl0IGlzIGltcG9ydGFudCB0aGF0IGEgY2VydGFpbiBzZXQgb2Ygc2NyaXB0IGJlIHJ1biBpbiBhIGNlcnRhaW4KKyMgb3JkZXIgb24gc3VzcGVuZCBhbmQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgb24gcmVzdW1lLCB0aGVuIHB1dCBhbGwKKyMgdGhlIHNjcmlwdHMgaW4gL2V0Yy9hcG0vc2NyaXB0cy5kIGluc3RlYWQgb2YgL2V0Yy9hcG0vZXZlbnQuZCBhbmQKKyMgc3ltbGluayB0byB0aGVzZSBmcm9tIC9ldGMvYXBtL3N1c3BlbmQuZCwgL2V0Yy9hcG0vcmVzdW1lLmQgYW5kCisjIC9ldGMvYXBtL290aGVyLmQgdXNpbmcgbmFtZXMgd2hvc2UgbGV4aWNvZ3JhcGhpY2FsIG9yZGVyIGlzIHRoZSBzYW1lCisjIGFzIHRoZSBkZXNpcmVkIG9yZGVyIG9mIGV4ZWN1dGlvbi4KKyMKKyMgSWYgdGhlIGtlcm5lbCdzIEFQTSBkcml2ZXIgc3VwcG9ydHMgaXQsIGFwbWRfcHJveHkgY2FuIHJldHVybiBhIG5vbi16ZXJvCisjIGV4aXQgc3RhdHVzIG9uIHN1c3BlbmQgYW5kIHN0YW5kYnkgZXZlbnRzLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1c3BlbmQKKyMgb3Igc3RhbmRieSBldmVudCBzaG91bGQgYmUgcmVqZWN0ZWQuCisjCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc2V0IC1lCisKKyMgVGhlIGZvbGxvd2luZyBkb2Vzbid0IHlldCB3b3JrLCBiZWNhdXNlIGN1cnJlbnQga2VybmVscyAodXAgdG8gYXQgbGVhc3QKKyMgMi40LjIwKSBkbyBub3Qgc3VwcG9ydCByZWplY3Rpb24gb2YgQVBNIGV2ZW50cy4gIFN1cHBvcnRpbmcgdGhpcyB3b3VsZAorIyByZXF1aXJlIHN1YnN0YW50aWFsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEFQTSBkcml2ZXIuICBXZSB3aWxsIHJlLWVuYWJsZQorIyB0aGlzIGZlYXR1cmUgaWYgdGhlIGRyaXZlciBpcyBldmVyIG1vZGlmaWVkLiAgICAgICAtLSBjcGhAZGViaWFuLm9yZworIworI1NVU1BFTkRfT05fQUM9ZmFsc2UKKyNbIC1yIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZiBdICYmIC4gL2V0Yy9hcG0vYXBtZF9wcm94eS5jb25mCisjCisjaWYgWyAiJHtTVVNQRU5EX09OX0FDfSIgPSAiZmFsc2UiIC1hICIkezJ9IiA9ICJzeXN0ZW0iIF0gXAorIwkmJiBvbl9hY19wb3dlciA+L2Rldi9udWxsOyB0aGVuCisjICAgICMgUmVqZWN0IHN5c3RlbSBzdXNwZW5kcyBhbmQgc3RhbmRieXMgaWYgd2UgYXJlIG9uIEFDIHBvd2VyCisjICAgIGV4aXQgMSAgIyBSZWplY3QgKE5PVEUga2VybmVsIHN1cHBvcnQgbXVzdCBiZSBlbmFibGVkKQorI2ZpCisKK2lmIFsgIiR7MX0iID0gInN1c3BlbmQiIC1vICIkezF9IiA9ICJzdGFuZGJ5IiBdOyB0aGVuCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vc3VzcGVuZC5kIF07IHRoZW4KKyAgICAgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vc3VzcGVuZC5kCisgICAgZmkKK2VsaWYgWyAiJHsxfSIgPSAicmVzdW1lIiBdOyB0aGVuCisgICAgaWYgWyAtZCAvZXRjL2FwbS9yZXN1bWUuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL3Jlc3VtZS5kCisgICAgZmkKKyAgICBydW4tcGFydHMgLWEgIiR7MX0iIC1hICIkezJ9IiAvZXRjL2FwbS9ldmVudC5kCitlbHNlCisgICAgcnVuLXBhcnRzIC1hICIkezF9IiAtYSAiJHsyfSIgL2V0Yy9hcG0vZXZlbnQuZAorICAgIGlmIFsgLWQgL2V0Yy9hcG0vb3RoZXIuZCBdOyB0aGVuCisgICAgICAgIHJ1bi1wYXJ0cyAtYSAiJHsxfSIgLWEgIiR7Mn0iIC9ldGMvYXBtL290aGVyLmQKKyAgICBmaQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5LmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9hcG1kX3Byb3h5LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2FwbWRfcHJveHkuY29uZgpAQCAtMCwwICsxLDE2IEBACisjIC9ldGMvYXBtL2FwbWRfcHJveHkuY29uZjogY29uZmlndXJhdGlvbiBmaWxlIGZvciBhcG1kLgorIworIyBUaGlzIGZpbGUgaXMgbWFuYWdlZCBieSBkZWJjb25mIHdoZW4gaW5zdGFsbGluZyBvciByZWNvbmZpZ3VyaW5nIHRoZQorIyBwYWNrYWdlLiAgSXQgaXMgZ2VuZXJhdGVkIGJ5IG1lcmdpbmcgdGhlIGFuc3dlcnMgZ2F0aGVyZWQgYnkgZGViY29uZgorIyBpbnRvIHRoZSB0ZW1wbGF0ZSBmaWxlICIvdXNyL3NoYXJlL2FwbWQvYXBtZF9wcm94eS5jb25mIi4KKworIyBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgeWV0IHdvcmssIGJlY2F1c2UgY3VycmVudCBrZXJuZWxzICh1cCB0byBhdCBsZWFzdAorIyAyLjQuMjApIGRvIG5vdCBzdXBwb3J0IHJlamVjdGlvbiBvZiBBUE0gZXZlbnRzLiAgU3VwcG9ydGluZyB0aGlzIHdvdWxkCisjIHJlcXVpcmUgc3Vic3RhbnRpYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgQVBNIGRyaXZlci4gIFdlIHdpbGwgcmUtZW5hYmxlCisjIHRoaXMgZmVhdHVyZSBpZiB0aGUgZHJpdmVyIGlzIGV2ZXIgbW9kaWZpZWQuICAgICAgIC0tIGNwaEBkZWJpYW4ub3JnCisjCisjIFNldCB0aGUgZm9sbG93aW5nIHRvICJmYWxzZSIgaWYgeW91IHdhbnQgdG8gcmVqZWN0IHN5c3RlbSBzdXNwZW5kIG9yCisjIHN5c3RlbSBzdGFuZGJ5IHJlcXVlc3RzIHdoZW4gdGhlIGNvbXB1dGVyIGlzIHJ1bm5pbmcgb24gQUMgcG93ZXIuCisjIE90aGVyd2lzZSBzZXQgdGhpcyB0byAidHJ1ZSIuICBTdWNoIHJlcXVlc3RzIGFyZSBuZXZlciByZWplY3RlZCB3aGVuCisjIHRoZSBjb21wdXRlciBpcyBydW5uaW5nIG9uIGJhdHRlcnkgcG93ZXIuCisjU1VTUEVORF9PTl9BQz10cnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yjc5NjVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMKKyMgRGVmYXVsdCBmb3IgL2V0Yy9pbml0LmQvYXBtZAorIworCisjIEFzIGFwbWQgY2FuIGJlIGNhbGxlZCB3aXRoIGFyZ3VtZW50cywgd2UgdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUKKyMgdG8gc3RvcmUgdGhlbSwgZS5nLiwgQVBNRD0iLXcgNSAtcCAyIi4KKyMgU2VlIHRoZSBtYW51YWwgcGFnZSBhcG1kKDgpIGZvciBkZXRhaWxzLgorQVBNRD0iLS1wcm94eS10aW1lb3V0IDMwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvaW5pdCBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzBiNDFhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL2luaXQKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBhcG1kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBkYWVtb24KKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluCisKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworWyAtZiAvZXRjL2RlZmF1bHQvYXBtZCBdICYmIC4gL2V0Yy9kZWZhdWx0L2FwbWQKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgYWR2YW5jZWQgcG93ZXIgbWFuYWdlbWVudCBkYWVtb246ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAteCAvdXNyL3NiaW4vYXBtZCAtLSBcCisJCS1QIC9ldGMvYXBtL2FwbWRfcHJveHkgJEFQTUQKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJICAgIGVjaG8gImFwbWQuIgorCWVsc2UKKwkgICAgZWNobyAiKGZhaWxlZC4pIgorCWZpCisJOzsKKyAgICBzdG9wKQorCWVjaG8gLW4gIlN0b3BwaW5nIGFkdmFuY2VkIHBvd2VyIG1hbmFnZW1lbnQgZGFlbW9uOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgXAorCQkteCAvdXNyL3NiaW4vYXBtZAorCWVjaG8gImFwbWQuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4vYXBtZDsKKwlleGl0ICQ/CisJOzsKKyAgICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkgCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJZXhpdAorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvYXBtZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGVnYWN5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGVnYWN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYjg5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSwxMzMgQEAKK0Zyb20gMzU5NTkzM2QyMjFmMGJhODM2OTE3ZGViYzA3NzZiODcyMzk3MmVjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogVHVlLCAxMSBBdWcgMjAxNSAxNzo0MDo1MCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gUGF0Y2ggd2l0aCBmaXhlcyBwcm92aWRlZCBieSBEZWJpYW4uCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi0xNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIE1ha2VmaWxlIHwgIDIgKy0KKyBhcG0uYyAgICB8ICAzICsrLQorIGFwbS5oICAgIHwgIDkgKysrKysrKysrCisgYXBtZC5jICAgfCAxNSArKysrKysrKy0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBiZjM0NmQ5Li45MmZjMGZkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtNDMsNyArNDMsNyBAQCBERVNURElSPQorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSBcCisrWFRSQUNGTEFHUz0tV2FsbCAtcGlwZSAtSS4gLUkvdXNyL3NyYy9saW51eC9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlIFwKKyAJCS1JL3Vzci9zcmMvbGludXgtMi4yL2luY2x1ZGUgLUkgL3Vzci9zcmMvbGludXgtMi4wL2luY2x1ZGUgXAorIAkJLURWRVJTSU9OPVwiJChWRVJTSU9OKVwiIFwKKyAJCS1EREVGQVVMVF9QUk9YWV9OQU1FPVwiJChQUk9YWV9ESVIpL2FwbWRfcHJveHlcIgorZGlmZiAtLWdpdCBhL2FwbS5jIGIvYXBtLmMKK2luZGV4IGIyMWMwNTcuLjAzNTliMWMgMTAwNjQ0CistLS0gYS9hcG0uYworKysrIGIvYXBtLmMKK0BAIC0yMTksMTIgKzIxOSwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl9CisgCX0KKyAJCQkJCQkJCQkJCQkJICAgIAorLQorKyNpZiAwCisgICAgIGlmICghKGkuYXBtX2ZsYWdzICYgQVBNXzMyX0JJVF9TVVBQT1JUKSkKKyAgICAgeworIAlmcHJpbnRmKHN0ZGVyciwgIjMyLWJpdCBBUE0gaW50ZXJmYWNlIG5vdCBzdXBwb3J0ZWRcbiIpOworIAlleGl0KDEpOworICAgICB9CisrI2VuZGlmCisgCisgICAgIGlmICh2ZXJib3NlICYmIChpLmFwbV9mbGFncyAmIDB4MTApKQorIAlwcmludGYoIkFQTSBCSU9TIFBvd2VyIE1hbmFnZW1lbnQgaXMgY3VycmVudGx5IGRpc2FibGVkXG4iKTsKK2RpZmYgLS1naXQgYS9hcG0uaCBiL2FwbS5oCitpbmRleCBmYjI0ZGZkLi44MjRjYzA2IDEwMDY0NAorLS0tIGEvYXBtLmgKKysrKyBiL2FwbS5oCitAQCAtMjAsNiArMjAsMTMgQEAKKyAgKiAkSWQ6IGFwbS5oLHYgMS43IDE5OTkvMDcvMDUgMjI6MzE6MTEgYXBlbndhcnIgRXhwICQKKyAgKiAKKyAgKi8KKysjaWZuZGVmIF9BUE1fSAorKyNkZWZpbmUgX0FQTV9IIDEKKysKKysjaWZuZGVmIF9fS0VSTkVMX1NUUklDVF9OQU1FUworKyNkZWZpbmUgX19LRVJORUxfU1RSSUNUX05BTUVTCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorQEAgLTkzLDMgKzEwMCw1IEBAIGV4dGVybiBpbnQgYXBtX3JlamVjdChpbnQgZmQpOworICNlbHNlCisgI2RlZmluZSBhcG1fcmVqZWN0KGZkKSAgICgtRUlOVkFMKQorICNlbmRpZgorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2FwbWQuYyBiL2FwbWQuYworaW5kZXggNDllZDNhMS4uNTYwZjUzNiAxMDA2NDQKKy0tLSBhL2FwbWQuYworKysrIGIvYXBtZC5jCitAQCAtMzQzLDcgKzM0Myw3IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCS8qIHBhcmVudCAqLworIAkJaW50IHN0YXR1cywgcmV0dmFsOworIAkJc3NpemVfdCBsZW47CistCQl0aW1lX3QgdGltZV9saW1pdDsKKysJCXRpbWVfdCBjb3VudGRvd247CisgCisgCQlpZiAocGlkIDwgMCkgeworIAkJCS8qIENvdWxkbid0IGZvcmsgKi8KK0BAIC0zNTYsOCArMzU2LDkgQEAgc3RhdGljIGludCBjYWxsX3Byb3h5KGFwbV9ldmVudF90IGV2ZW50KQorIAkJLyogQ2FwdHVyZSB0aGUgY2hpbGQncyBvdXRwdXQsIGlmIGFueSwgYnV0IG9ubHkgdW50aWwgaXQgdGVybWluYXRlcyAqLworIAkJY2xvc2UoZmRzWzFdKTsKKyAJCWZjbnRsKGZkc1swXSwgRl9TRVRGTCwgT19SRE9OTFl8T19OT05CTE9DSyk7CistCQl0aW1lX2xpbWl0ID0gdGltZSgwKSArIHByb3h5X3RpbWVvdXQ7CisrCQljb3VudGRvd24gPSBwcm94eV90aW1lb3V0OworIAkJZG8geworKwkJCWNvdW50ZG93biAtPSAxOworIAkJCXdoaWxlICgobGVuID0gcmVhZChmZHNbMF0sIGxpbmUsIHNpemVvZihsaW5lKS0xKSkgPiAwKSB7CisgCQkJCWxpbmVbbGVuXSA9IDA7CisgCQkJCUFQTURfU1lTTE9HKExPR19JTkZPLCAiKyAlcyIsIGxpbmUpOworQEAgLTM3MiwxNiArMzczLDE2IEBAIHN0YXRpYyBpbnQgY2FsbF9wcm94eShhcG1fZXZlbnRfdCBldmVudCkKKyAJCQkJZ290byBwcm94eV9kb25lOworIAkJCX0KKyAJCQkJCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAkJfSB3aGlsZSAoCistCQkJKHRpbWUoMCkgPCB0aW1lX2xpbWl0KQorKwkJCShjb3VudGRvd24gPj0gMCkKKyAJCQl8fCAocHJveHlfdGltZW91dCA8IDApCisgCQkpOworIAorIAkJQVBNRF9TWVNMT0coTE9HX05PVElDRSwgIlByb3h5IGhhcyBiZWVuIHJ1bm5pbmcgbW9yZSB0aGFuICVkIHNlY29uZHM7IGtpbGxpbmcgaXQiLCBwcm94eV90aW1lb3V0KTsKKyAKKyAJCWtpbGwocGlkLCBTSUdURVJNKTsKKy0JCXRpbWVfbGltaXQgPSB0aW1lKDApICsgNTsKKysJCWNvdW50ZG93biA9IDU7CisgCQlkbyB7CisgCQkJcmV0dmFsID0gd2FpdHBpZChwaWQsICZzdGF0dXMsIFdOT0hBTkcpOworIAkJCWlmIChyZXR2YWwgPT0gcGlkKQorQEAgLTM5Miw5ICszOTMsOSBAQCBzdGF0aWMgaW50IGNhbGxfcHJveHkoYXBtX2V2ZW50X3QgZXZlbnQpCisgCQkJCWdvdG8gcHJveHlfZG9uZTsKKyAJCQl9CisgCistCQkJc2xlZXAoMSk7CisrCQkJd2hpbGUgKHNsZWVwKDEpID4gMCkgOworIAorLQkJfSB3aGlsZSAodGltZSgwKSA8IHRpbWVfbGltaXQpOworKwkJfSB3aGlsZSAoY291bnRkb3duID49IDApOworIAorIAkJa2lsbChwaWQsIFNJR0tJTEwpOworIAkJc3RhdHVzID0gX19XX0VYSVRDT0RFKDAsIFNJR0tJTEwpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2FwbWQvYXBtZC9saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRlZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgYnkgUlAgdG8gYWRkcmVzcyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIiBlcnJvcjoKKyAgIGNvbW1pdCAzNWRlMDVlNjFiODhjMDgwOGE1ZTg4NWJiMGVmZGY0MjA1NTVkNWFkCisgICBBdXRob3I6IFJpY2hhcmQgUHVyZGllIDxycHVyZGllQHJwc3lzLm5ldD4KKyAgIERhdGU6ICAgU3VuIEp1biAxIDE2OjEzOjM4IDIwMDggKzAwMDAKKworICAgYXBtZDogVXNlIGxpYnRvb2wgLS10YWcgb3B0aW9ucyB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxpYnRvb2wgMi4yLjQgKGZyb20gcG9reSkKKworSG93ZXZlciBJIGRpZG4ndCBzZWUgc2FtZSBpc3N1ZSB3aXRoIGN1cnJlbnQgbGlidG9vbC0yLjIuMTAuIEFsc28gcGVyIG15IHVuZGVyc3RhbmRpbmcsCit0aGUgZGVmYXVsdCB0YWcsIGlmIG5vdCBzcGVjaWZpZWQsIGZhbGxzIGJhY2sgdG8gQ0MuIFNvIGRpc2FibGUgaXQgZnJvbSBwYXRjaGluZywgYnV0CitrZWVwIGl0IGhlcmUuIElmIHdlIGVuY291bnRlciBzaW1pbGFyIGlzc3VlIGluIHRoZSBmdXR1cmUsIHdlIGNvdWxkIHRoZW4gcHVzaCB1cHN0cmVhbQorCitDb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcG1kLTMuMi4yLm9yaWcub3JpZy9NYWtlZmlsZQkyMDA0LTAxLTA0IDA4OjEzOjE4LjAwMDAwMDAwMCArMDAwMAorKysrIGFwbWQtMy4yLjIub3JpZy9NYWtlZmlsZQkyMDA4LTA0LTIxIDE3OjEwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTU4LDkgKzU3LDggQEAKKyAjQ0ZMQUdTPS1PMyAtbTQ4NiAtZm9taXQtZnJhbWUtcG9pbnRlcgorICNMREZMQUdTPS1zCisgCistTElCVE9PTD1saWJ0b29sIC0tcXVpZXQKKy1MVF9DT01QSUxFID0gJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENDKQorLUxUX0xJTksgPSAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpCisrTFRfQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykKKytMVF9MSU5LID0gJChMSUJUT09MKSAgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQykKKyBMVF9JTlNUQUxMID0gJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBpbnN0YWxsCisgTFRfQ0xFQU4gPSAkKExJQlRPT0wpIC0tbW9kZT1jbGVhbiBybQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWQvdW5saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL3VubGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4MjA2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kL3VubGludXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorY29weSBPRSBjb21taXQgbWVzc2FnZSBoZXJlOgorICAgY29tbWl0IDk0NTZjZGMxY2Y0M2UzYmE5ZTZkODhjNjM1NjBjMWI2ZmRlZTQzNTkKKyAgIEF1dGhvcjogTWljaGFlbCBLcmVsaW4gPGhhY2tlckBrbGV2ZXIubmV0PgorICAgRGF0ZTogICBUdWUgTWF5IDI5IDEyOjI3OjQ1IDIwMDcgKzAwMDAKKworICAgYXBtZDogcHJldmVudCBidWlsZCBmcm9tIGludGVyZmVycmluZyB3aXRoIGhvc3Qga2VybmVsIGhlYWRlcnMuIENsb3NlcyAjMTI1NworCitjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0xMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBhcG1kLTMuMi4yLm9yaWcvTWFrZWZpbGUKKysrKyBhcG1kLTMuMi4yL01ha2VmaWxlCitAQCAtNDMsOCArNDMsNyBAQAorIAorIENDPWdjYworIENGTEFHUz0tTyAtZworLVhUUkFDRkxBR1M9LVdhbGwgLXBpcGUgLUkuIC1JL3Vzci9zcmMvbGludXgvaW5jbHVkZSAtSS91c3IvWDExUjYvaW5jbHVkZSBcCistCQktSS91c3Ivc3JjL2xpbnV4LTIuMi9pbmNsdWRlIC1JIC91c3Ivc3JjL2xpbnV4LTIuMC9pbmNsdWRlIFwKKytYVFJBQ0ZMQUdTPS1XYWxsIC1waXBlIC1JLiBcCisgCQktRFZFUlNJT049XCIkKFZFUlNJT04pXCIgXAorIAkJLURERUZBVUxUX1BST1hZX05BTUU9XCIkKFBST1hZX0RJUikvYXBtZF9wcm94eVwiCisgTERGTEFHUz0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9hcG1kL2FwbWRfMy4yLjItMTUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExMDUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvYXBtZC9hcG1kXzMuMi4yLTE1LmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IgorREVTQ1JJUFRJT04gPSAiVGhlIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQgKEFQTSkgc3VwcG9ydCBwcm92aWRlcyBcCithY2Nlc3MgdG8gYmF0dGVyeSBzdGF0dXMgaW5mb3JtYXRpb24gYW5kIGEgc2V0IG9mIHRvb2xzIGZvciBtYW5hZ2luZyBcCitub3RlYm9vayBwb3dlciBjb25zdW1wdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vYXBlbndhcnIuY2EvYXBtZC8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwbS5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTdkNGFjYzEyNTA5MTBhODlmODRjZTNjYzY1NTdjNGMyIgorREVQRU5EUyA9ICJsaWJ0b29sLWNyb3NzIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9hL2FwbWQvYXBtZF8zLjIuMi5vcmlnLnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICBmaWxlOi8vbGVnYWN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnRvb2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5saW51eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vYXBtZF9wcm94eSBcCisgICAgICAgICAgIGZpbGU6Ly9hcG1kX3Byb3h5LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXBtZC5zZXJ2aWNlIgorCitTUkNfVVJJW3RhcmJhbGwubWQ1c3VtXSA9ICJiMWU2MzA5ZTgzMzFlMGY0ZTZlZmQzMTFjMmQ5N2ZhOCIKK1NSQ19VUklbdGFyYmFsbC5zaGEyNTZzdW1dID0gIjdmN2Q5ZjYwYjc3NjZiODUyODgxZDQwYjhmZjkxZDhlMzlmY2NiMGQxZDkxMzEwMmE1Yzc1YTJkYmI1MjMzMmQiCisKK1MgPSAiJHtXT1JLRElSfS9hcG1kLTMuMi4yLm9yaWciCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXBtZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYXBtZC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitkb19jb21waWxlKCkgeworCSMgYXBtZCBkb2Vzbid0IHVzZSB3aG9sZSBhdXRvdG9vbHMuIEp1c3QgbGlidG9vbCBmb3IgaW5zdGFsbGF0aW9uCisJb2VfcnVubWFrZSAiTElCVE9PTD0ke1NUQUdJTkdfQklORElSX0NST1NTfS8ke0hPU1RfU1lTfS1saWJ0b29sIiBhcG0gYXBtZAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbQorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXBtL2V2ZW50LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9vdGhlci5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vc3VzcGVuZC5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcG0vcmVzdW1lLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS9zY3JpcHRzLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FwbWQKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlpbnN0YWxsIC1tIDQ3NTUgJHtTfS8ubGlicy9hcG0gJHtEfSR7YmluZGlyfS9hcG0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS8ubGlicy9hcG1kICR7RH0ke3NiaW5kaXJ9L2FwbWQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9hcG1kX3Byb3h5ICR7RH0ke3N5c2NvbmZkaXJ9L2FwbS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hcG1kX3Byb3h5LmNvbmYgJHtEfSR7ZGF0YWRpcn0vYXBtZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvYXBtZAorCW9lX2xpYmluc3RhbGwgLXNvIGxpYmFwbSAke0R9JHtsaWJkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IGFwbS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwlzZWQgLWUgJ3MsL3Vzci9zYmluLCR7c2JpbmRpcn0sZzsgcywvZXRjLCR7c3lzY29uZmRpcn0sZzsnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisJY2htb2QgNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9hcG1kCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXBtZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2FwbWQuc2VydmljZQorfQorCitQQUNLQUdFUyA9KyAibGliYXBtIGFwbSIKKworRklMRVNfbGliYXBtID0gIiR7bGliZGlyfS9saWJhcG0ke1NPTElCU30iCitGSUxFU19hcG0gPSAiJHtiaW5kaXJ9L2FwbSoiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZWVlLWFjcGktc2NyaXB0c19naXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZWVlLWFjcGktc2NyaXB0c19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJhMDJhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9lZWUtYWNwaS1zY3JpcHRzX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gImVlZVBDIHNwZWNpZmljIEFDUEkgc2NyaXB0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9kZWJpYW4tZWVlcGMvIgorU0VDVElPTiA9ICJiYXNlIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9NzdlZjgzYWI1ZjRhZjkzOGE5M2VkYjYxZjdiNzRmMmMiCisKK1NSQ1JFViA9ICI5ZDRjZGVkY2EyNWIzOTY0MDVmODU4N2Y5YzRmYmY4MjI5ZTA0MWMyIgorUFYgPSAiMS4xLjEyK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5kZWJpYW4ub3JnL2dpdC9kZWJpYW4tZWVlcGMvZWVlcGMtYWNwaS1zY3JpcHRzLmdpdCBcCisJICAgZmlsZTovL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9wb3dlcmJ0bi5wYXRjaCBcCisJICAgZmlsZTovL3BvbGljeS1mdW5jcyAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vYWNwaS1zdXBwb3J0LyBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2VlZXBjLWFjcGktc2NyaXB0cyBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQvIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vYWNwaS8iCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvYWN0aW9ucy8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FjcGkvZXZlbnRzLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYWNwaS9saWIvdWRldi9ydWxlcy5kCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9lZWVwYy1hY3BpLXNjcmlwdHMvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSA2NDQgJHtTfS9ldmVudHMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2V2ZW50cy8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2xpYi91ZGV2L3J1bGVzLmQvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2xpYi91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAke1N9L2FjdGlvbnMvKiAke0R9JHtzeXNjb25mZGlyfS9hY3BpL2FjdGlvbnMvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vYWNwaWxpYi9mdW5jdGlvbnMuc2ggJHtEfSR7ZGF0YWRpcn0vZWVlcGMtYWNwaS1zY3JpcHRzLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvbGljeS1mdW5jcyAke0R9JHtkYXRhZGlyfS9hY3BpLXN1cHBvcnQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZGViaWFuL2VlZXBjLWFjcGktc2NyaXB0cy5kZWZhdWx0KiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwbS11dGlscyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3BvbGljeS1mdW5jcyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb2xpY3ktZnVuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwOTlkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9wb2xpY3ktZnVuY3MKQEAgLTAsMCArMSw4IEBACitDaGVja1BvbGljeSgpIHsKKwlpZiBwaWRvZiBnbm9tZS1wb3dlci1tYW5hZ2VyIGtwb3dlcnNhdmUgPiAvZGV2L251bGwgfHwKKwkgICAocGlkb2YgZGNvcHNlcnZlciA+IC9kZXYvbnVsbCAmJiB0ZXN0IC14IC91c3IvYmluL2Rjb3AgJiYgL3Vzci9iaW4vZGNvcCBrZGVkIGtkZWQgbG9hZGVkTW9kdWxlcyB8IGdyZXAgLXEga2xhcHRvcGRhZW1vbikgOyB0aGVuCisJCWVjaG8gMDsKKwllbHNlCisJCWVjaG8gMTsKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3Bvd2VyYnRuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3Bvd2VyYnRuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2U1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2VlZS1hY3BpLXNjcmlwdHMvZmlsZXMvcG93ZXJidG4ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorLS0tCisgYWN0aW9ucy9wb3dlci5zaCB8ICAgIDMgKysrCisgZXZlbnRzL3Bvd2VyYnRuICB8ICAgIDIgKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCitJbmRleDogZ2l0L2V2ZW50cy9wb3dlcmJ0bgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9ldmVudHMvcG93ZXJidG4JMjAwOC0xMC0wOCAxNzo0MzozNS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMiBAQAorK2V2ZW50PWJ1dHRvbi9wb3dlciBQV1JGCisrYWN0aW9uPS9ldGMvYWNwaS9hY3Rpb25zL3Bvd2VyLnNoCitJbmRleDogZ2l0L2FjdGlvbnMvcG93ZXIuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnaXQvYWN0aW9ucy9wb3dlci5zaAkyMDA4LTEwLTA4IDE3OjQ1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwzIEBACisrIyEvYmluL3NoCisrCisrL3NiaW4vc2h1dGRvd24gLWggbm93ICJQb3dlciBidXR0b24gcHJlc3NlZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9lZWUtYWNwaS1zY3JpcHRzL2ZpbGVzL3JlbW92ZS1kb2MtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZiM2RjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZWVlLWFjcGktc2NyaXB0cy9maWxlcy9yZW1vdmUtZG9jLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKKy0tLQorIGFjdGlvbnMvaG90a2V5LnNoICAgICB8ICAgIDMgLS0tCisgYWN0aW9ucy9zdXNwZW5kLnNoICAgIHwgICAgMyAtLS0KKyBhY3Rpb25zL3ZnYS10b2dnbGUuc2ggfCAgICAzIC0tLQorIGFjdGlvbnMvdm9sdW1lLnNoICAgICB8ICAgIDMgLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9lZWVwYy1hY3BpLXNjcmlwdHMvdm9sdW1lLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92b2x1bWUuc2gJMjAxMS0xMS0yOSAxOTo0MTozNi4wMDAwMDAwMDAgKzA4MDAKK0BAIC0zLDEyICszLDEwIEBACisgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMgXSB8fCBbIC1kIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy13bWkgXSB8fCBleGl0IDAKKyAjIFZvbHVtZSBjb250cm9scworIAorLSMgZG8gbm90aGluZyBpZiBwYWNrYWdlIGlzIHJlbW92ZWQKKyBQS0c9ZWVlcGMtYWNwaS1zY3JpcHRzCisgUEtHX0RJUj0vdXNyL3NoYXJlL2FjcGktc3VwcG9ydC8kUEtHCisgRlVOQ19MSUI9JFBLR19ESVIvbGliL2Z1bmN0aW9ucy5zaAorIERFRkFVTFQ9L2V0Yy9kZWZhdWx0LyRQS0cKKy1bIC1lICIkRlVOQ19MSUIiIF0gfHwgZXhpdCAwCisgCisgLiAkRlVOQ19MSUIKKyAuICRQS0dfRElSL2xpYi9zb3VuZC5zaAorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZWVlcGMtYWNwaS1zY3JpcHRzL2hvdGtleS5zaAkyMDExLTExLTI5IDE5OjIxOjU1LjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvaG90a2V5LnNoCTIwMTEtMTEtMjkgMTk6Mzk6NTEuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBjYXNlICQocnVubGV2ZWwpIGluCisgICAgICowfCo2KQorSW5kZXg6IGdpdC9lZWVwYy1hY3BpLXNjcmlwdHMvdmdhLXRvZ2dsZS5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6MjE6NTUuMDAwMDAwMDAwICswODAwCisrKysgZ2l0L2VlZXBjLWFjcGktc2NyaXB0cy92Z2EtdG9nZ2xlLnNoCTIwMTEtMTEtMjkgMTk6NDA6MjQuMDAwMDAwMDAwICswODAwCitAQCAtMSwxMiArMSwxMCBAQAorICMhL2Jpbi9zaAorIAorIFsgLWQgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjIF0gfHwgWyAtZCAvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtd21pIF0gfHwgZXhpdCAwCistIyBkbyBub3RoaW5nIGlmIHBhY2thZ2UgaXMgcmVtb3ZlZAorIFBLRz1lZWVwYy1hY3BpLXNjcmlwdHMKKyBQS0dfRElSPS91c3Ivc2hhcmUvYWNwaS1zdXBwb3J0LyRQS0cKKyBGVU5DX0xJQj0kUEtHX0RJUi9saWIvZnVuY3Rpb25zLnNoCisgREVGQVVMVD0vZXRjL2RlZmF1bHQvJFBLRworLVsgLWUgIiRGVU5DX0xJQiIgXSB8fCBleGl0IDAKKyAKKyBpZiBbIC1lICIkREVGQVVMVCIgXTsgdGhlbiAuICIkREVGQVVMVCI7IGZpCisgLiAkRlVOQ19MSUIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9jb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMDY2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvY29uZmlnCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCitpZiBbIC1lIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnIF07IHRoZW4KKyAgICAuIC9ldGMvZm9ybWZhY3Rvci9tYWNoY29uZmlnCitmaQorCitpZiBbIC16ICIkSEFWRV9UT1VDSFNDUkVFTiIgXTsgdGhlbgorICAgIEhBVkVfVE9VQ0hTQ1JFRU49MAorZmkKKworaWYgWyAteiAiJEhBVkVfS0VZQk9BUkQiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEPTAKK2ZpCisKK2lmIFsgLXogIiRIQVZFX0tFWUJPQVJEX1BPUlRSQUlUIiBdOyB0aGVuCisgICAgSEFWRV9LRVlCT0FSRF9QT1JUUkFJVD0wCitmaQorCitpZiBbIC16ICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiIF07IHRoZW4KKyAgICBIQVZFX0tFWUJPQVJEX0xBTkRTQ0FQRT0wCitmaQorCitpZiBbIC16ICIkRElTUExBWV9DQU5fUk9UQVRFIiBdOyB0aGVuCisgICAgRElTUExBWV9DQU5fUk9UQVRFPTAKK2ZpCisKK2lmIFsgLXogIiRESVNQTEFZX09SSUVOVEFUSU9OIiBdOyB0aGVuCisgICAgRElTUExBWV9PUklFTlRBVElPTj0wCitmaQorCitpZiBbIC1lICIvZGV2L2ZiIiBdOyB0aGVuCisgICAgaWYgWyAteiAiJERJU1BMQVlfV0lEVEhfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfV0lEVEhfUElYRUxTPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQyIH0nYAorICAgIGZpCisKKyAgICBpZiBbIC16ICIkRElTUExBWV9IRUlHSFRfUElYRUxTIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfSEVJR0hUX1BJWEVMUz1gL3Vzci9zYmluL2Zic2V0IHwgZ3JlcCBnZW9tZXRyeSB8IGF3ayAneyBwcmludCAkMyB9J2AKKyAgICBmaQorCisgICAgaWYgWyAteiAiJERJU1BMQVlfQlBQIiBdOyB0aGVuCisgICAgICAgIERJU1BMQVlfQlBQPWAvdXNyL3NiaW4vZmJzZXQgfCBncmVwIGdlb21ldHJ5IHwgYXdrICd7IHByaW50ICQ2IH0nYAorICAgIGZpCitmaQorCisjIAorIyBObyB3YXkgdG8gZ3Vlc3MgdGhlc2Ugb3IgaGF2ZSBhbnkgZGVmYXVsdHMKKyMKKyNESVNQTEFZX1dJRFRIX01NCisjRElTUExBWV9IRUlHSFRfTU0KKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL21hY2hjb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybS9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybS9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCisjRElTUExBWV9XSURUSF9QSVhFTFM9NjQwCisjRElTUExBWV9IRUlHSFRfUElYRUxTPTQ4MAorI0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ni9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVhcm12Ni9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU2YTJhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY2L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY3L21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdWFybXY3L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11YXJtdjcvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXVtaXBzL21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTY3NzdiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11bWlwcy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKKyNESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11cHBjL21hY2hjb25maWcgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXBwYy9tYWNoY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlYTIyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXBwYy9tYWNoY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK0hBVkVfVE9VQ0hTQ1JFRU49MQorSEFWRV9LRVlCT0FSRD0xCisgCitESVNQTEFZX0NBTl9ST1RBVEU9MAorRElTUExBWV9PUklFTlRBVElPTj0wCitESVNQTEFZX1dJRFRIX1BJWEVMUz04MDAKK0RJU1BMQVlfSEVJR0hUX1BJWEVMUz02MDAKK0RJU1BMQVlfQlBQPTE2CitESVNQTEFZX0RQST0xNTAKK0RJU1BMQVlfU1VCUElYRUxfT1JERVI9dnJnYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYtNjQvbWFjaGNvbmZpZyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2LTY0L21hY2hjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTZhMmFlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9maWxlcy9xZW11eDg2LTY0L21hY2hjb25maWcKQEAgLTAsMCArMSwxMCBAQAorSEFWRV9UT1VDSFNDUkVFTj0xCitIQVZFX0tFWUJPQVJEPTEKKyAKK0RJU1BMQVlfQ0FOX1JPVEFURT0wCitESVNQTEFZX09SSUVOVEFUSU9OPTAKKyNESVNQTEFZX1dJRFRIX1BJWEVMUz02NDAKKyNESVNQTEFZX0hFSUdIVF9QSVhFTFM9NDgwCisjRElTUExBWV9CUFA9MTYKK0RJU1BMQVlfRFBJPTE1MAorRElTUExBWV9TVUJQSVhFTF9PUkRFUj12cmdiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2Zvcm1mYWN0b3IvZmlsZXMvcWVtdXg4Ni9tYWNoY29uZmlnIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYvbWFjaGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NmEyYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2ZpbGVzL3FlbXV4ODYvbWFjaGNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitIQVZFX1RPVUNIU0NSRUVOPTEKK0hBVkVfS0VZQk9BUkQ9MQorIAorRElTUExBWV9DQU5fUk9UQVRFPTAKK0RJU1BMQVlfT1JJRU5UQVRJT049MAorI0RJU1BMQVlfV0lEVEhfUElYRUxTPTY0MAorI0RJU1BMQVlfSEVJR0hUX1BJWEVMUz00ODAKKyNESVNQTEFZX0JQUD0xNgorRElTUExBWV9EUEk9MTUwCitESVNQTEFZX1NVQlBJWEVMX09SREVSPXZyZ2IKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZm9ybWZhY3Rvci9mb3JtZmFjdG9yXzAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzMwYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9mb3JtZmFjdG9yL2Zvcm1mYWN0b3JfMC4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiRGV2aWNlIGZvcm1mYWN0b3IgaW5mb3JtYXRpb24iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUFIgPSAicjQ1IgorCitTUkNfVVJJID0gImZpbGU6Ly9jb25maWcgZmlsZTovL21hY2hjb25maWciCitTID0gIiR7V09SS0RJUn0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCSMgSW5zdGFsbCBmaWxlIG9ubHkgaWYgaXQgaGFzIGNvbnRlbnRzCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZm9ybWZhY3Rvci8KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7U30vY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJaWYgWyAtcyAiJHtTfS9tYWNoY29uZmlnIiBdOyB0aGVuCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9tYWNoY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Zvcm1mYWN0b3IvCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDEyOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaS9nbnUtZWZpLU1ha2Utc2V0am1wLlMtcG9ydGFibGUtdG8tQVJNLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gOGEzNTZkNGI2YTI0MmNlNjNiNzM5MjBkM2VkMzNmODhmOWUxMmZlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogU3VuLCA2IFNlcCAyMDE1IDA1OjIwOjQzIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudS1lZmk6IE1ha2Ugc2V0am1wLlMgcG9ydGFibGUgdG8gQVJNCisKK1RoaXMgcGF0Y2ggZml4ZXMgdGhlIGZvbGxvd2luZyBlcnJvcjoKKworICAuLi4vbGliL2FybS9zZXRqbXAuUzoxODogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorICAuLi4vbGliL2FybS9zZXRqbXAuUzoyNjogRXJyb3I6IHVucmVjb2duaXplZCBzeW1ib2wgdHlwZSAiIgorCitUaGUgcHJvYmxlbSBpcyB0aGUgYXNzZW1ibHkgc3ludGF4IHRoYXQgaXMgdXNlZCBpcyBub3QgcG9ydGFibGUgdG8gQVJNLAord2hlcmUgdGhlICdAJyBzeW1ib2wgaXMgYSBjb21tZW50OgorCisgID4gTm90ZSBvbiB0YXJnZXRzIHdoZXJlIHRoZSBAIGNoYXJhY3RlciBpcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50CisgID4gKGVnIEFSTSkgdGhlbiBhbm90aGVyIGNoYXJhY3RlciBpcyB1c2VkIGluc3RlYWQuIEZvciBleGFtcGxlIHRoZQorICA+IEFSTSBwb3J0IHVzZXMgdGhlICUgY2hhcmFjdGVyLgorCisoRnJvbSBodHRwczovL3NvdXJjZXdhcmUub3JnL2JpbnV0aWxzL2RvY3MtMi4yNS9hcy9TZWN0aW9uLmh0bWwjU2VjdGlvbikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2FybS9zZXRqbXAuUyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvYXJtL3NldGptcC5TIGIvbGliL2FybS9zZXRqbXAuUworaW5kZXggNmUzZmJmMC4uODVjODcwNSAxMDA2NDQKKy0tLSBhL2xpYi9hcm0vc2V0am1wLlMKKysrKyBiL2xpYi9hcm0vc2V0am1wLlMKK0BAIC0xNSw3ICsxNSw3IEBAIEJBU0lTLAorIAkudGV4dAorIAkuYXJtCisgCS5nbG9ibAlzZXRqbXAKKy0JLnR5cGUJc2V0am1wLCBAZnVuY3Rpb24KKysJLnR5cGUJc2V0am1wLCAlZnVuY3Rpb24KKyBzZXRqbXA6CisgCW1vdglyMywgcjEzCisgCXN0bWlhCXIwLCB7cjMtcjEyLHIxNH0KK0BAIC0yMyw2ICsyMyw2IEBAIHNldGptcDoKKyAJYngJbHIKKyAKKyAJLmdsb2JsCWxvbmdqbXAKKy0JLnR5cGUJbG9uZ2ptcCwgQGZ1bmN0aW9uCisrCS50eXBlCWxvbmdqbXAsICVmdW5jdGlvbgorIGxvbmdqbXA6CisgCWxkbWlhCXIwLCB7cjMtcjEyLHIxNH0KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvbGliLU1ha2VmaWxlLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyYWUxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL2xpYi1NYWtlZmlsZS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSAwZGFhMzU0YTE2YWEzY2FkZTU2ZWQ0MjNkMGY4YTA0Y2YxYzIyZjlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDIzIEFwciAyMDE1IDAxOjQ5OjMxIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYi9NYWtlZmlsZTogZml4IHBhcmFsbGVsIGlzc3VlCisKK0ZpeGVkOgorQXNzZW1ibGVyIG1lc3NhZ2VzOgorRmF0YWwgZXJyb3I6IGNhbid0IGNyZWF0ZSBydW50aW1lL3J0bG9jay5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvcnRkYXRhLm86IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0Fzc2VtYmxlciBtZXNzYWdlczoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgcnVudGltZS92bS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIHJ1bnRpbWUvZWZpcnRsaWIubzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvTWFrZWZpbGUgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCitpbmRleCBkYzRiOTRhLi5mNjRkMWVkIDEwMDY0NAorLS0tIGEvbGliL01ha2VmaWxlCisrKysgYi9saWIvTWFrZWZpbGUKK0BAIC03Myw2ICs3Myw4IEBAIGFsbDogbGlic3ViZGlycyBsaWJlZmkuYQorIGxpYnN1YmRpcnM6CisgCWZvciBzZGlyIGluICQoU1VCRElSUyk7IGRvIG1rZGlyIC1wICQkc2RpcjsgZG9uZQorIAorKyQoT0JKUyk6IGxpYnN1YmRpcnMKKysKKyBsaWJlZmkuYTogJChPQkpTKQorIAkkKEFSKSBydiAkQCAkKE9CSlMpCisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmkvcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViNDdjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ251LWVmaS9nbnUtZWZpL3BhcmFsbGVsLW1ha2UtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorRml4IHBhcmFsbGVsIG1ha2UgZmFpbHVyZSBmb3IgYXJjaGl2ZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBsaWIgYW5kIGdudWVmaSBtYWtlZmlsZXMgd2VyZSB1c2luZyB0aGUgbGliLmEoKSBmb3JtIHdoaWNoIGNvbXBpbGVzCithbmQgYXIncyBhcyBhIHBhaXIgaW5zdGVhZCBvZiBjb21waWxpbmcgYWxsIGFuZCB0aGVuIGFyJ2luZyB3aGljaCBjYW4KK3BhcmFsbGVsaXplIGJldHRlci4gVGhpcyB3YXMgcmVzdWx0aW5nIGluIGJ1aWxkIGZhaWx1cmVzIG9uIGxhcmdlciB2YWx1ZXMKK29mIC1qLgorCitTZWUgaHR0cDovL3d3dy5jaGVtaWUuZnUtYmVybGluLmRlL2NoZW1uZXQvdXNlL2luZm8vbWFrZS9tYWtlX3RvYy5odG1sI1RPQzEwNQorZm9yIGRldGFpbHMuCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCistLS0KKyBnbnVlZmkvTWFrZWZpbGUgfCAgICAzICsrLQorIGxpYi9NYWtlZmlsZSAgICB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnbnUtZWZpLTMuMC9saWIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtZWZpLTMuMC5vcmlnL2xpYi9NYWtlZmlsZQorKysrIGdudS1lZmktMy4wL2xpYi9NYWtlZmlsZQorQEAgLTY2LDcgKzY2LDggQEAgYWxsOiBsaWJzdWJkaXJzIGxpYmVmaS5hCisgbGlic3ViZGlyczoKKyAJZm9yIHNkaXIgaW4gJChTVUJESVJTKTsgZG8gbWtkaXIgLXAgJCRzZGlyOyBkb25lCisgCistbGliZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJlZmkuYSglKSwkKE9CSlMpKQorK2xpYmVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgbGliZWZpLmEgKn4gJChPQkpTKSAqLyoubworSW5kZXg6IGdudS1lZmktMy4wL2dudWVmaS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudS1lZmktMy4wLm9yaWcvZ251ZWZpL01ha2VmaWxlCisrKysgZ251LWVmaS0zLjAvZ251ZWZpL01ha2VmaWxlCitAQCAtNTEsNyArNTEsOCBAQCBUQVJHRVRTCT0gY3J0MC1lZmktJChBUkNIKS5vIGxpYmdudWVmaS5hCisgCisgYWxsOgkkKFRBUkdFVFMpCisgCistbGliZ251ZWZpLmE6ICQocGF0c3Vic3QgJSxsaWJnbnVlZmkuYSglKSwkKE9CSlMpKQorK2xpYmdudWVmaS5hOiAkKE9CSlMpCisrCSQoQVIpIHJ2ICRAICQoT0JKUykKKyAKKyBjbGVhbjoKKyAJcm0gLWYgJChUQVJHRVRTKSAqfiAqLm8gJChPQkpTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2dudS1lZmkvZ251LWVmaV8zLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFiYTQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9nbnUtZWZpL2dudS1lZmlfMy4wLjMuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJMaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBFRkkgYmluYXJpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2dudS1lZmkvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFybS5TO2JlZ2lubGluZT00O2VuZGxpbmU9OTttZDU9MjI0MGQ3YmJkZjA5MjgyOTRjMmY0YTY4YjE0ZDY1OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ251ZWZpL2NydDAtZWZpLWFhcmNoNjQuUztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT1lNTgyNzY0YTQ3NzZlNjBjOTViZjlhYjYxNzM0M2QzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmMvZWZpc2hlbGxpbnRmLmg7YmVnaW5saW5lPTEzO2VuZGxpbmU9MjA7bWQ1PTIwMjc2NmI3OWQ3MDhlZmYzY2M3MGZjZTE1ZmI4MGM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luYy9lZmlzaGVsbHBhcm0uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTExO21kNT00NjhiMTIzMWIwNWJiYzg0YmFlM2EwZDU3NzRlM2JiNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvYXJtL2RpdjY0LlM7YmVnaW5saW5lPTY7ZW5kbGluZT0xMjttZDU9YTk2Yzg0ZjVhZDEyYjRmMDExZjk4YjVkMDM5MjQyZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9tYXRoLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMDttZDU9NjRkZDE5ODdjZWUxZGNmNTlkMTFhYTU3MmNmYTY0NGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FybS9pbml0cGxhdC5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTA7bWQ1PTY0ZGQxOTg3Y2VlMWRjZjU5ZDExYWE1NzJjZmE2NDRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hcm0vbGliMWZ1bmNzLlM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9ZjU2ZDVlYmJjODcxMzZiYzY2Y2ZlMjRkYjgyYmNmMDEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2FhcmNoNjQvbWF0aC5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzM7bWQ1PWNmYWRlNGM1NjBlMDMzYTdiYjAyZGFiMjgyODcyYzdkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9hYXJjaDY0L2luaXRwbGF0LmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zMzttZDU9OTAwY2IxZmZiZTNlMWRlZDM0NDEwMmJlOTIxODMwZjEgXAorICAgICAgICAgICAgICAgICAgICIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZS1hcmNoaXZlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWItTWFrZWZpbGUtZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudS1lZmktTWFrZS1zZXRqbXAuUy1wb3J0YWJsZS10by1BUk0ucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjE1YTRiY2JjMThhOWE1ZTgxMTBlZDk1NTk3MDYyMmU2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1MzBmMjFhMTVmZDljMjE0ZGQ5MmQyOWE2Y2FhMjBmYWM5ODkyODkyNjc1MTIwMjBiNmRhMWY1ZTZmNWI0Y2IiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qfGFhcmNoNjQuKnxhcm0uKiktbGludXgiCisKK2RlZiBnbnVfZWZpX2FyY2goZCk6CisgICAgaW1wb3J0IHJlCisgICAgdGFyY2ggPSBkLmdldFZhcigiVEFSR0VUX0FSQ0giLCBUcnVlKQorICAgIGlmIHJlLm1hdGNoKCJpWzM0NTY3ODldODYiLCB0YXJjaCk6CisgICAgICAgIHJldHVybiAiaWEzMiIKKyAgICByZXR1cm4gdGFyY2gKKworRVhUUkFfT0VNQUtFID0gIidBUkNIPSR7QGdudV9lZmlfYXJjaChkKX0nICdDQz0ke0NDfScgJ0FTPSR7QVN9JyAnTEQ9JHtMRH0nICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyAnT0JKQ09QWT0ke09CSkNPUFl9JyAnUFJFRklYPSR7cHJlZml4fScgJ0xJQkRJUj0ke2xpYmRpcn0nIFwKKyAgICAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0iJHtEfSIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLmxkcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1GaXgtYnVpbGQtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmFhYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDI3NWZlMDI2OWVjYzAwYWY0Nzg4YWZhZjlkYzE1MWE1MGIyNTY0NWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyOCBBdWcgMjAxNCAxOToyNjoxNCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgd2l0aCBnbGliYyAyLjIwCisKKyogZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jOiBzcXVhaGVzIGJlbG93IHdhcm5pbmcKKyAgd2FybmluZzogI3dhcm5pbmcgIl9CU0RfU09VUkNFIGFuZCBfU1ZJRF9TT1VSQ0UgYXJlIGRlcHJlY2F0ZWQsIHVzZSBfREVGQVVMVF9TT1VSQ0UiCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKy0tLQorIGdydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYyBiL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworaW5kZXggN2U3MjVmNi4uOGRkOGU2NSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VtdS9ob3N0ZnMuYworKysrIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitAQCAtMTksNyArMTksNyBAQAorIAorICNpbmNsdWRlIDxjb25maWctdXRpbC5oPgorIAorLSNkZWZpbmUgX0JTRF9TT1VSQ0UKKysjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRQorICNpbmNsdWRlIDxncnViL2ZzLmg+CisgI2luY2x1ZGUgPGdydWIvZmlsZS5oPgorICNpbmNsdWRlIDxncnViL2Rpc2suaD4KKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RjMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9ncnViLWNvcmUvZ251bGliL01ha2VmaWxlLmFtCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9nbnVsaWIvTWFrZWZpbGUuYW0KK0BAIC00MTAsNyArNDEwLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy8wMDAxLXBhcnNlX2RoY3BfdmVuZG9yLUFkZC1taXNzaW5nLWNvbnN0LXF1YWxpZmllcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NWUzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvMDAwMS1wYXJzZV9kaGNwX3ZlbmRvci1BZGQtbWlzc2luZy1jb25zdC1xdWFsaWZpZXJzLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT3JpZ2luYWwgY29tbWl0OiBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvY2dpdC9ncnViLmdpdC9jb21taXQvZ3J1Yi1jb3JlL25ldC9ib290cC5jP2lkPWYwNmMyMTcyYzBiMzIwNTJmMjJlMzc1MjM0NDVjZjhlN2FmZmFlYTMKKworRnJvbSAxNDlkMmExNGY0NzIzNzc4Y2VkMjNmNDM5NDg3MjAxY2NiZjFhMmM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjMgQXByIDIwMTUgMDc6MDM6MzQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFyc2VfZGhjcF92ZW5kb3I6IEFkZCBtaXNzaW5nIGNvbnN0IHF1YWxpZmllcnMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBncnViLWNvcmUvbmV0L2Jvb3RwLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jIGIvZ3J1Yi1jb3JlL25ldC9ib290cC5jCitpbmRleCBiYzA3ZDUzLi40NDEzMWVkIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC9ib290cC5jCisrKysgYi9ncnViLWNvcmUvbmV0L2Jvb3RwLmMKK0BAIC01Miw5ICs1Miw5IEBAIHNldF9lbnZfbGltbl9ybyAoY29uc3QgY2hhciAqaW50ZXJuYW1lLCBjb25zdCBjaGFyICpzdWZmaXgsCisgfQorIAorIHN0YXRpYyB2b2lkCistcGFyc2VfZGhjcF92ZW5kb3IgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZlbmQsIGludCBsaW1pdCwgaW50ICptYXNrKQorK3BhcnNlX2RoY3BfdmVuZG9yIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICp2ZW5kLCBpbnQgbGltaXQsIGludCAqbWFzaykKKyB7CistICBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisrICBjb25zdCBncnViX3VpbnQ4X3QgKnB0ciwgKnB0cjA7CisgCisgICBwdHIgPSBwdHIwID0gdmVuZDsKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NmZyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNhNTNkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9jZmcKQEAgLTAsMCArMSwyIEBACitzZWFyY2guZmlsZSAoJGNtZHBhdGgpL0VGSS9CT09UL2dydWIuY2ZnIHJvb3QKK3NldCBwcmVmaXg9KCRyb290KS9FRkkvQk9PVApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWVjZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2NoZWNrLWlmLWxpYmx6bWEtaXMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRGlzYWJsZSBsaWJsem1hIGlmIC0tZW5hYmxlLWxpYmx6bWE9bm8KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTAyOSwxMCArMTAyOSwyMCBAQCBmaQorIAorIEFDX1NVQlNUKFtMSUJHRU9NXSkKKyAKKy1BQ19DSEVDS19MSUIoW2x6bWFdLCBbbHptYV9jb2RlXSwKKy0gICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKy0gICAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9MSUJMWk1BXSwgWzFdLAorLSAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgTFpNQSBsaWJyYXJ5Ll0pXSwpCisrQUNfQVJHX0VOQUJMRShbbGlibHptYV0sCisrICAgICAgICAgICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmx6bWFdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgbGlibHptYSBpbnRlZ3JhdGlvbiAoZGVmYXVsdD1ndWVzc2VkKV0pXSkKKytpZiB0ZXN0IHgiJGVuYWJsZV9saWJsem1hIiA9IHhubyA7IHRoZW4KKysgIGxpYmx6bWFfZXhjdXNlPSJleHBsaWNpdGx5IGRpc2FibGVkIgorK2ZpCisrCisraWYgdGVzdCB4IiRsaWJsem1hX2V4Y3VzZSIgPSB4IDsgdGhlbgorKyAgQUNfQ0hFQ0tfTElCKFtsem1hXSwgW2x6bWFfY29kZV0sCisrICAgICAgICAgICAgICAgW0xJQkxaTUE9Ii1sbHptYSIKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0xJQkxaTUFdLCBbMV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIExaTUEgbGlicmFyeS5dKV0sKQorK2ZpCisrCisgQUNfU1VCU1QoW0xJQkxaTUFdKQorIAorIEFDX0FSR19FTkFCTEUoW2xpYnpmc10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtZW5kaWFubmVzcy1wcm9ibGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTk5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitncnViLWNvcmUvbmV0L3RmdHAuYzogZml4IGVuZGlhbm5lc3MgcHJvYmxlbS4KKworCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisJKHRmdHBfcmVjZWl2ZSk6IExpa2V3aXNlLgorCVJlcG9ydGVkIGJ5OiBNaWNoYWVsIERhdmlkc2F2ZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggODFiZGFlOS4uYzJmNDJkNSAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDkgQEAKKysyMDEyLTA3LTAyICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisrCisrCSogZ3J1Yi1jb3JlL25ldC90ZnRwLmMgKGFjayk6IEZpeCBlbmRpYW5uZXNzIHByb2JsZW0uCisrCSh0ZnRwX3JlY2VpdmUpOiBMaWtld2lzZS4KKysJUmVwb3J0ZWQgYnk6IE1pY2hhZWwgRGF2aWRzYXZlci4KKysKKyAyMDEyLTA2LTI3ICBWbGFkaW1pciBTZXJiaW5lbmtvICA8cGhjb2RlckBnbWFpbC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi4wMC4KK2RpZmYgLS1naXQgYS9ncnViLWNvcmUvbmV0L3RmdHAuYyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitpbmRleCA5YzcwZWZiLi5kMGYzOWVhIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL25ldC90ZnRwLmMKKysrKyBiL2dydWItY29yZS9uZXQvdGZ0cC5jCitAQCAtMTQzLDcgKzE0Myw3IEBAIGFjayAodGZ0cF9kYXRhX3QgZGF0YSwgZ3J1Yl91aW50MTZfdCBibG9jaykKKyAKKyAgIHRmdHBoX2FjayA9IChzdHJ1Y3QgdGZ0cGhkciAqKSBuYl9hY2suZGF0YTsKKyAgIHRmdHBoX2Fjay0+b3Bjb2RlID0gZ3J1Yl9jcHVfdG9fYmUxNiAoVEZUUF9BQ0spOworLSAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGJsb2NrOworKyAgdGZ0cGhfYWNrLT51LmFjay5ibG9jayA9IGdydWJfY3B1X3RvX2JlMTYgKGJsb2NrKTsKKyAKKyAgIGVyciA9IGdydWJfbmV0X3NlbmRfdWRwX3BhY2tldCAoZGF0YS0+c29jaywgJm5iX2Fjayk7CisgICBpZiAoZXJyKQorQEAgLTIyNSw3ICsyMjUsNyBAQCB0ZnRwX3JlY2VpdmUgKGdydWJfbmV0X3VkcF9zb2NrZXRfdCBzb2NrIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJICAgIGdydWJfcHJpb3JpdHlfcXVldWVfcG9wIChkYXRhLT5wcSk7CisgCisgCSAgICBpZiAoZmlsZS0+ZGV2aWNlLT5uZXQtPnBhY2tzLmNvdW50IDwgNTApCistCSAgICAgIGVyciA9IGFjayAoZGF0YSwgdGZ0cGgtPnUuZGF0YS5ibG9jayk7CisrCSAgICAgIGVyciA9IGFjayAoZGF0YSwgZGF0YS0+YmxvY2sgKyAxKTsKKyAJICAgIGVsc2UKKyAJICAgICAgeworIAkJZmlsZS0+ZGV2aWNlLT5uZXQtPnN0YWxsID0gMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWFlMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2ZpeC1pc3N1ZS13aXRoLWZsZXgtMi41LjM3LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworVGhpcyBmaXhlcyBjb21waWxhdGlvbiBpc3N1ZXMgd2hlbiB1c2luZyBmbGV4LTIuNS4zNy4gSXQgd2FzIHRha2VuIGZyb20gdXBzdHJlYW0uCisKK09yaWdpbmFsIGF1dGhvciBpczogVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBncnViLTIuMDAvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0yLjAwLm9yaWcvZ3J1Yi1jb3JlL3NjcmlwdC95eWxleC5sCTIwMTItMDYtMDggMjM6MjQ6MTUuMDAwMDAwMDAwICswMzAwCisrKysgZ3J1Yi0yLjAwL2dydWItY29yZS9zY3JpcHQveXlsZXgubAkyMDEzLTA3LTMxIDE0OjM0OjQwLjcwODEwMDk4MiArMDMwMAorQEAgLTI5LDYgKzI5LDggQEAKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1wcm90b3R5cGVzIgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIKKysjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLWZ1bmN0aW9uIgorKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzaWduLWNvbXBhcmUiCisgCisgI2RlZmluZSB5eWZyZWUgICAgZ3J1Yl9sZXhlcl95eWZyZWUKKyAjZGVmaW5lIHl5YWxsb2MgICBncnViX2xleGVyX3l5YWxsb2MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjg5MTZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gN2FiNTc2YTdjNjE0MDZiN2U2MzczOWQxYjExMDE3YWUzMzZiOTAwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAzIE1hciAyMDE0IDAzOjM0OjQ4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdydWIuZC8xMF9saW51eC5pbjogYWRkIG9lJ3Mga2VybmVsIG5hbWUKKworT3VyIGtlcm5lbCdzIG5hbWUgaXMgYnpJbWFnZSwgd2UgbmVlZCBhZGQgaXQgdG8gZ3J1Yi5kLzEwX2xpbnV4LmluIHNvCit0aGF0IHRoZSBncnViLW1rY29uZmlnIGFuZCBncnViLWluc3RhbGwgY2FuIHdvcmsgY29ycmVjdGx5LgorCitXZSBvbmx5IG5lZWQgYWRkIHRoZSBiekltYWdlIHRvIHV0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluLCBidXQgYWxzbyBhZGQgaXQKK3RvIHV0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiB0byBrZWVwIGNvbXBhdGliaWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdXRpbC9ncnViLmQvMTBfbGludXguaW4gICAgIHwgICAgNCArKy0tCisgdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXRpbC9ncnViLmQvMTBfbGludXguaW4gYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgoraW5kZXggMTQ0MDJlOC4uYzU4ZjQxNyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzEwX2xpbnV4LmluCisrKysgYi91dGlsL2dydWIuZC8xMF9saW51eC5pbgorQEAgLTE1MywxMSArMTUzLDExIEBAIEVPRgorIG1hY2hpbmU9YHVuYW1lIC1tYAorIGNhc2UgIngkbWFjaGluZSIgaW4KKyAgICAgeGk/ODYgfCB4eDg2XzY0KQorLQlsaXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnV6LSogL3ZtbGludXotKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisrCWxpc3Q9YGZvciBpIGluIC9ib290L2J6SW1hZ2UtKiAvYnpJbWFnZS0qIC9ib290L3ZtbGludXotKiAvdm1saW51ei0qIC9ib290L2tlcm5lbC0qIDsgZG8KKyAgICAgICAgICAgICAgICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIiA7IHRoZW4gZWNobyAtbiAiJGkgIiA7IGZpCisgICAgICAgICAgICAgICBkb25lYCA7OworICAgICAqKSAKKy0JbGlzdD1gZm9yIGkgaW4gL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvdm1saW51ei0qIC92bWxpbnV4LSogL2Jvb3Qva2VybmVsLSogOyBkbworKwlsaXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlLSogL2Jvb3Qvdm1saW51ei0qIC9ib290L3ZtbGludXgtKiAvYnpJbWFnZS0qIC92bWxpbnV6LSogL3ZtbGludXgtKiAvYm9vdC9rZXJuZWwtKiA7IGRvCisgICAgICAgICAgICAgICAgICAgaWYgZ3J1Yl9maWxlX2lzX25vdF9nYXJiYWdlICIkaSIgOyB0aGVuIGVjaG8gLW4gIiRpICIgOyBmaQorIAkgICAgIGRvbmVgIDs7CisgZXNhYworZGlmZiAtLWdpdCBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbiBiL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgoraW5kZXggMWQ5NDUwMi4uYjJkZWNmMyAxMDA2NDQKKy0tLSBhL3V0aWwvZ3J1Yi5kLzIwX2xpbnV4X3hlbi5pbgorKysrIGIvdXRpbC9ncnViLmQvMjBfbGludXhfeGVuLmluCitAQCAtMTM4LDcgKzEzOCw3IEBAIEVPRgorIEVPRgorIH0KKyAKKy1saW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC92bWxpbnVbeHpdLSogL3ZtbGludVt4el0tKiAvYm9vdC9rZXJuZWwtKjsgZG8KKytsaW51eF9saXN0PWBmb3IgaSBpbiAvYm9vdC9iekltYWdlW3h6XS0qIC9iekltYWdlW3h6XS0qIC9ib290L3ZtbGludVt4el0tKiAvdm1saW51W3h6XS0qIC9ib290L2tlcm5lbC0qOyBkbworICAgICBpZiBncnViX2ZpbGVfaXNfbm90X2dhcmJhZ2UgIiRpIjsgdGhlbgorICAgICAJYmFzZW5hbWU9JChiYXNlbmFtZSAkaSkKKyAJdmVyc2lvbj0kKGVjaG8gJGJhc2VuYW1lIHwgc2VkIC1lICJzLF5bXjAtOV0qLSwsZyIpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1maXgtZW5hYmxlX2V4ZWN1dGVfc3RhY2stY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllZjRkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZml4LWVuYWJsZV9leGVjdXRlX3N0YWNrLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgY29uZmlndXJlIGZhaWx1cmUKKworY29uZmlndXJlOjIwMzA2OiBjaGVja2luZyB3aGV0aGVyIGBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cnIGdlbmVyYXRlcyBjYWxscyB0byBgX19lbmFibGVfZXhlY3V0ZV9zdGFjaygpJworY29uZmlndXJlOjIwMzIwOiBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgICAtbWFyY2g9Y29yZTIgLW1zc2UzIC1tdHVuZT1nZW5lcmljIC1tZnBtYXRoPXNzZSAtLXN5c3Jvb3Q9L2J1aWxkZGlzay9idWlsZC9idWlsZDAvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtbWZwbWF0aD0zODcgLWZuby1kd2FyZjItY2ZpLWFzbSAtbTMyIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1tbm8tc3RhY2stYXJnLXByb2JlIC1XZXJyb3IgLVduby10cmFtcG9saW5lcyAtZmFsaWduLWxvb3BzPTEgLVMgY29uZnRlc3QuYworY29uZnRlc3QuYzozMDg6NjogZXJyb3I6IG5vIHByZXZpb3VzIHByb3RvdHlwZSBmb3IgJ2cnIFstV2Vycm9yPW1pc3NpbmctcHJvdG90eXBlc10KK2NjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCitjb25maWd1cmU6MjAzMjM6ICQ/ID0gMQorY29uZmlndXJlOjIwMzI3OiBlcnJvcjogY2NhY2hlIGk1ODYtcG9reS1saW51eC1nY2MgIC1tMzIgICAgLW1hcmNoPWNvcmUyIC1tc3NlMyAtbXR1bmU9Z2VuZXJpYyAtbWZwbWF0aD1zc2UgLS1zeXNyb290PS9idWlsZGRpc2svYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9lbWVubG93IGZhaWxlZCB0byBwcm9kdWNlIGFzc2VtYmx5IGNvZGUKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMTMKKworSW5kZXg6IGdydWItMi4wMC9hY2luY2x1ZGUubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9hY2luY2x1ZGUubTQKKysrKyBncnViLTIuMDAvYWNpbmNsdWRlLm00CitAQCAtMzE3LDYgKzMxNyw3IEBAIGRubCBDaGVjayBpZiB0aGUgQyBjb21waWxlciBnZW5lcmF0ZXMgY2EKKyBBQ19ERUZVTihbZ3J1Yl9DSEVDS19FTkFCTEVfRVhFQ1VURV9TVEFDS10sWworIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBgJENDJyBnZW5lcmF0ZXMgY2FsbHMgdG8gYF9fZW5hYmxlX2V4ZWN1dGVfc3RhY2soKSddKQorIEFDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfU09VUkNFKFtbCisrdm9pZCBnIChpbnQpOworIHZvaWQgZiAoaW50ICgqcCkgKHZvaWQpKTsKKyB2b2lkIGcgKGludCBpKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU1N2YxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLTIuMDAtZnBtYXRoLXNzZS0zODctZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29uZmlndXJlIGlzc3VlIGZvciBncnViIHdoZW4gLW1mcG1hdGg9c3NlIGlzIGluIHRoZSBnY2MgcGFyYW1ldGVycy4KKworY29uZmlndXJlOjIwNTc0OiBpNTg2LXBva3ktbGludXgtZ2NjICAtbTMyICAgIC1tYXJjaD1jb3JlMiAtbXNzZTMgLW10dW5lPWdlbmVyaWMgLW1mcG1hdGg9c3NlIC0tc3lzcm9vdD0vdXNyL2xvY2FsL2Rldi95b2N0by9ncnVidGVzdDIvYnVpbGQvdG1wL3N5c3Jvb3RzL2VtZW5sb3cgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtVyAtV3NoYWRvdyAtV3BvaW50ZXItYXJpdGggLVdtaXNzaW5nLXByb3RvdHlwZXMgLVd1bmRlZiAtV3N0cmljdC1wcm90b3R5cGVzIC1nIC1mYWxpZ24tanVtcHM9MSAtZmFsaWduLWxvb3BzPTEgLWZhbGlnbi1mdW5jdGlvbnM9MSAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyAtZm5vLWR3YXJmMi1jZmktYXNtIC1tMzIgLWZuby1zdGFjay1wcm90ZWN0b3IgLW1uby1zdGFjay1hcmctcHJvYmUgLVdlcnJvciAtbm9zdGRsaWIgLVdsLC0tZGVmc3ltLF9fX21haW49MHg4MTAwICAtV2FsbCAtVyAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX2J1aWxkZGlyKS9pbmNsdWRlICAtREdSVUJfTUFDSElORV9QQ0JJT1M9MSAtREdSVUJfTUFDSElORT1JMzg2X1BDIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIGNvbmZ0ZXN0LmMgID4mNQorY29uZnRlc3QuYzoxOjA6IGVycm9yOiBTU0UgaW5zdHJ1Y3Rpb24gc2V0IGRpc2FibGVkLCB1c2luZyAzODcgYXJpdGhtZXRpY3MgWy1XZXJyb3JdCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNC8xMworCitJbmRleDogZ3J1Yi0xLjk5L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdydWItMS45OS9jb25maWd1cmUuYWMKK0BAIC0zNzgsNyArMzc4LDcgQEAgaWYgdGVzdCAieCR0YXJnZXRfY3B1IiA9IHhpMzg2OyB0aGVuCisgCisgICAjIFNvbWUgdG9vbGNoYWlucyBlbmFibGUgdGhlc2UgZmVhdHVyZXMgYnkgZGVmYXVsdCwgYnV0IHRoZXkgbmVlZAorICAgIyByZWdpc3RlcnMgdGhhdCBhcmVuJ3Qgc2V0IHVwIHByb3Blcmx5IGluIEdSVUIuCistICBUQVJHRVRfQ0ZMQUdTPSIkVEFSR0VUX0NGTEFHUyAtbW5vLW1teCAtbW5vLXNzZSAtbW5vLXNzZTIgLW1uby0zZG5vdyIKKysgIFRBUkdFVF9DRkxBR1M9IiRUQVJHRVRfQ0ZMQUdTIC1tbm8tbW14IC1tbm8tc3NlIC1tbm8tc3NlMiAtbW5vLTNkbm93IC1tZnBtYXRoPTM4NyIKKyBmaQorIAorICMgQnkgZGVmYXVsdCwgR0NDIDQuNCBnZW5lcmF0ZXMgLmVoX2ZyYW1lIHNlY3Rpb25zIGNvbnRhaW5pbmcgdW53aW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU4OGZjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1hbGxvdy1hLWNvbXBpbGF0aW9uLXdpdGhvdXQtbWNtb2RlbC1sYXJnZS5wYXRjaApAQCAtMCwwICsxLDEzMSBAQAorQWxsb3cgYSBjb21waWxhdGlvbiB3aXRob3V0IC1tY21vZGVsPWxhcmdlCisKK0l0J3MgcHJvdmlkZWQgYnkgVmxhZGltaXIgU2VyYmluZW5rbywgYW5kIGhlIHdpbGwgY29tbWl0CitpdCB1cHN0cmVhbSBzbyBpdCBzaG91bGQgYmUgYmFja3BvcnQgcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKworLS0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmOGZiOGEuLjJjNWU2ZWQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcyMyw5ICs3MjMsNyBAQCBpZiB0ZXN0ICIkdGFyZ2V0X2NwdSIgPSB4ODZfNjQ7IHRoZW4KKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9eWVzXSwKKyAJCSAgICAgIFtncnViX2N2X2NjX21jbW9kZWw9bm9dKQorICAgXSkKKy0gIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHhubzsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoWy1tY21vZGVsPWxhcmdlIG5vdCBzdXBwb3J0ZWQuIFVwZ3JhZGUgeW91ciBnY2MuXSkKKy0gIGVsc2UKKysgIGlmIHRlc3QgIngkZ3J1Yl9jdl9jY19tY21vZGVsIiA9IHh5ZXM7IHRoZW4KKyAgICAgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgLW1jbW9kZWw9bGFyZ2UiCisgICBmaQorIGZpCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZWZpL21tLmMgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworaW5kZXggMTQwOWI1ZC4uNmU5ZGFjZSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL2VmaS9tbS5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lZmkvbW0uYworQEAgLTMyLDYgKzMyLDEyIEBACisgI2RlZmluZSBCWVRFU19UT19QQUdFUyhieXRlcykJKCgoYnl0ZXMpICsgMHhmZmYpID4+IDEyKQorICNkZWZpbmUgUEFHRVNfVE9fQllURVMocGFnZXMpCSgocGFnZXMpIDw8IDEyKQorCisrI2lmIGRlZmluZWQgKF9fY29kZV9tb2RlbF9sYXJnZV9fKSB8fCAhZGVmaW5lZCAoX194ODZfNjRfXykKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweGZmZmZmZmZmCisrI2Vsc2UKKysjZGVmaW5lIE1BWF9VU0FCTEVfQUREUkVTUyAweDdmZmZmZmZmCisrI2VuZGlmCisrCisgLyogVGhlIHNpemUgb2YgYSBtZW1vcnkgbWFwIG9idGFpbmVkIGZyb20gdGhlIGZpcm13YXJlLiBUaGlzIG11c3QgYmUKKyAgICBhIG11bHRpcGxpZXIgb2YgNEtCLiAgKi8KKyAjZGVmaW5lIE1FTU9SWV9NQVBfU0laRQkweDMwMDAKK0BAIC01OCw3ICs2NCw3IEBAIGdydWJfZWZpX2FsbG9jYXRlX3BhZ2VzIChncnViX2VmaV9waHlzaWNhbF9hZGRyZXNzX3QgYWRkcmVzcywKKworICNpZiAxCisgICAvKiBMaW1pdCB0aGUgbWVtb3J5IGFjY2VzcyB0byBsZXNzIHRoYW4gNEdCIGZvciAzMi1iaXQgcGxhdGZvcm1zLiAgKi8KKy0gIGlmIChhZGRyZXNzID4gMHhmZmZmZmZmZikKKysgIGlmIChhZGRyZXNzID4gTUFYX1VTQUJMRV9BRERSRVNTKQorICAgICByZXR1cm4gMDsKKyAjZW5kaWYKKworQEAgLTY2LDcgKzcyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgaWYgKGFkZHJlc3MgPT0gMCkKKyAgICAgeworICAgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9NQVhfQUREUkVTUzsKKy0gICAgICBhZGRyZXNzID0gMHhmZmZmZmZmZjsKKysgICAgICBhZGRyZXNzID0gTUFYX1VTQUJMRV9BRERSRVNTOworICAgICB9CisgICBlbHNlCisgICAgIHR5cGUgPSBHUlVCX0VGSV9BTExPQ0FURV9BRERSRVNTOworQEAgLTg2LDcgKzkyLDcgQEAgZ3J1Yl9lZmlfYWxsb2NhdGVfcGFnZXMgKGdydWJfZWZpX3BoeXNpY2FsX2FkZHJlc3NfdCBhZGRyZXNzLAorICAgICB7CisgICAgICAgLyogVWdnaCwgdGhlIGFkZHJlc3MgMCB3YXMgYWxsb2NhdGVkLi4uIFRoaXMgaXMgdG9vIGFubm95aW5nLAorIAkgc28gcmVhbGxvY2F0ZSBhbm90aGVyIG9uZS4gICovCistICAgICAgYWRkcmVzcyA9IDB4ZmZmZmZmZmY7CisrICAgICAgYWRkcmVzcyA9IE1BWF9VU0FCTEVfQUREUkVTUzsKKyAgICAgICBzdGF0dXMgPSBlZmlfY2FsbF80IChiLT5hbGxvY2F0ZV9wYWdlcywgdHlwZSwgR1JVQl9FRklfTE9BREVSX0RBVEEsIHBhZ2VzLCAmYWRkcmVzcyk7CisgICAgICAgZ3J1Yl9lZmlfZnJlZV9wYWdlcyAoMCwgcGFnZXMpOworICAgICAgIGlmIChzdGF0dXMgIT0gR1JVQl9FRklfU1VDQ0VTUykKK0BAIC0zMTksNyArMzI1LDcgQEAgZmlsdGVyX21lbW9yeV9tYXAgKGdydWJfZWZpX21lbW9yeV9kZXNjcmlwdG9yX3QgKm1lbW9yeV9tYXAsCisgICAgIHsKKyAgICAgICBpZiAoZGVzYy0+dHlwZSA9PSBHUlVCX0VGSV9DT05WRU5USU9OQUxfTUVNT1JZCisgI2lmIDEKKy0JICAmJiBkZXNjLT5waHlzaWNhbF9zdGFydCA8PSAweGZmZmZmZmZmCisrCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgPD0gTUFYX1VTQUJMRV9BRERSRVNTCisgI2VuZGlmCisgCSAgJiYgZGVzYy0+cGh5c2ljYWxfc3RhcnQgKyBQQUdFU19UT19CWVRFUyAoZGVzYy0+bnVtX3BhZ2VzKSA+IDB4MTAwMDAwCisgCSAgJiYgZGVzYy0+bnVtX3BhZ2VzICE9IDApCitAQCAtMzM3LDkgKzM0Myw5IEBAIGZpbHRlcl9tZW1vcnlfbWFwIChncnViX2VmaV9tZW1vcnlfZGVzY3JpcHRvcl90ICptZW1vcnlfbWFwLAorICNpZiAxCisgCSAgaWYgKEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkKKyAJICAgICAgKyBmaWx0ZXJlZF9kZXNjLT5udW1fcGFnZXMKKy0JICAgICAgPiBCWVRFU19UT19QQUdFUyAoMHgxMDAwMDAwMDBMTCkpCisrCSAgICAgID4gQllURVNfVE9fUEFHRVMgKE1BWF9VU0FCTEVfQUREUkVTUysxTEwpKQorIAkgICAgZmlsdGVyZWRfZGVzYy0+bnVtX3BhZ2VzCistCSAgICAgID0gKEJZVEVTX1RPX1BBR0VTICgweDEwMDAwMDAwMExMKQorKwkgICAgICA9IChCWVRFU19UT19QQUdFUyAoTUFYX1VTQUJMRV9BRERSRVNTKzFMTCkKKyAJCSAtIEJZVEVTX1RPX1BBR0VTIChmaWx0ZXJlZF9kZXNjLT5waHlzaWNhbF9zdGFydCkpOworICNlbmRpZgorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4veDg2XzY0L2RsLmMgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworaW5kZXggNjVmMDllZi4uMTdjMTIxNSAxMDA2NDQKKy0tLSBhL2dydWItY29yZS9rZXJuL3g4Nl82NC9kbC5jCisrKysgYi9ncnViLWNvcmUva2Vybi94ODZfNjQvZGwuYworQEAgLTEwMCwxNCArMTAwLDMyIEBAIGdydWJfYXJjaF9kbF9yZWxvY2F0ZV9zeW1ib2xzIChncnViX2RsX3QgbW9kLCB2b2lkICplaGRyKQorIAkJICAgIGJyZWFrOworCisgCQkgIGNhc2UgUl9YODZfNjRfUEMzMjoKKy0JCSAgICAqYWRkcjMyICs9IHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlIC0KKy0JCSAgICAgICAgICAgICAgKEVsZjY0X1h3b3JkKSBzZWctPmFkZHIgLSByZWwtPnJfb2Zmc2V0OworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZTsKKysJCSAgICAgIHZhbHVlID0gKChncnViX2ludDMyX3QpICphZGRyMzIpICsgcmVsLT5yX2FkZGVuZCArIHN5bS0+c3RfdmFsdWUgLQorKwkJCShFbGY2NF9Yd29yZCkgc2VnLT5hZGRyIC0gcmVsLT5yX29mZnNldDsKKysJCSAgICAgIGlmICh2YWx1ZSAhPSAoZ3J1Yl9pbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorIAkJICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgY2FzZSBSX1g4Nl82NF8zMjoKKysJCSAgICB7CisrCQkgICAgICBncnViX3VpbnQ2NF90IHZhbHVlID0gKmFkZHIzMiArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX3VpbnQzMl90KSB2YWx1ZSkKKysJCQlyZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX01PRFVMRSwgInJlbG9jYXRpb24gb3V0IG9mIHJhbmdlIik7CisrCQkgICAgICAqYWRkcjMyID0gdmFsdWU7CisrCQkgICAgfQorKwkJICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgIGNhc2UgUl9YODZfNjRfMzJTOgorLSAgICAgICAgICAgICAgICAgICAgKmFkZHIzMiArPSByZWwtPnJfYWRkZW5kICsgc3ltLT5zdF92YWx1ZTsKKy0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworKwkJICAgIHsKKysJCSAgICAgIGdydWJfaW50NjRfdCB2YWx1ZSA9ICgoZ3J1Yl9pbnQzMl90KSAqYWRkcjMyKSArIHJlbC0+cl9hZGRlbmQgKyBzeW0tPnN0X3ZhbHVlOworKwkJICAgICAgaWYgKHZhbHVlICE9IChncnViX2ludDMyX3QpIHZhbHVlKQorKwkJCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfTU9EVUxFLCAicmVsb2NhdGlvbiBvdXQgb2YgcmFuZ2UiKTsKKysJCSAgICAgICphZGRyMzIgPSB2YWx1ZTsKKysJCSAgICB9CisrCQkgICAgYnJlYWs7CisKKyAJCSAgZGVmYXVsdDoKKyAJCSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItZWZpLWZpeC13aXRoLWdsaWJjLTIuMjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxMjYyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWVmaS1maXgtd2l0aC1nbGliYy0yLjIwLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gZWI2MzY4ZTY1ZjY5ODhlZWJhZDI2Y2ViZGVjMDU3Zjc5N2JjZWI0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IFNlcCAyMDE0IDAwOjAyOjMwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBidWlsZCB3aXRoIGdsaWJjIDIuMjAKKworKiBncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmM6IHNxdWFoZXMgYmVsb3cgd2FybmluZworICB3YXJuaW5nOiAjd2FybmluZyAiX0JTRF9TT1VSQ0UgYW5kIF9TVklEX1NPVVJDRSBhcmUgZGVwcmVjYXRlZCwgdXNlIF9ERUZBVUxUX1NPVVJDRSIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jIGIvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCitpbmRleCAzY2IwODljLi5hNTFlZTMyIDEwMDY0NAorLS0tIGEvZ3J1Yi1jb3JlL2tlcm4vZW11L2hvc3Rmcy5jCisrKysgYi9ncnViLWNvcmUva2Vybi9lbXUvaG9zdGZzLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAgKi8KKy0jZGVmaW5lIF9CU0RfU09VUkNFCisrI2RlZmluZSBfREVGQVVMVF9TT1VSQ0UKKyAjaW5jbHVkZSA8Z3J1Yi9mcy5oPgorICNpbmNsdWRlIDxncnViL2ZpbGUuaD4KKyAjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWItaW5zdGFsbC5pbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2OTUxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLWluc3RhbGwuaW4ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworT3VyIHVzZSBvZiBncnViLWluc3RhbGwgZG9lc24ndCByZXF1aXJlIHRoZSAteCBvcHRpb24sIHNvIHdlIHNob3VsZCBiZQorYmUgYWJsZSBtYWtlIHVzZSBvZiBncmVwIHZlcnNpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdC4KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IGdydWItMS45OS91dGlsL2dydWItaW5zdGFsbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdydWItMS45OS5vcmlnL3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MjAuMDkzOTA2Njc5IC0wNTAwCisrKysgZ3J1Yi0xLjk5L3V0aWwvZ3J1Yi1pbnN0YWxsLmluCTIwMTEtMDktMDkgMjI6Mzc6MzAuODU0NzM3ODgyIC0wNTAwCitAQCAtNTEwLDcgKzUxMCw3IEBACisgCisgaWYgWyAieCR7ZGV2YWJzdHJhY3Rpb25fbW9kdWxlfSIgPSAieCIgXSA7IHRoZW4KKyAgICAgaWYgWyB4IiR7aW5zdGFsbF9kZXZpY2V9IiAhPSB4IF07IHRoZW4KKy0gICAgICBpZiBlY2hvICIke2luc3RhbGxfZGV2aWNlfSIgfCBncmVwIC1xeCAiKC4qKSIgOyB0aGVuCisrICAgICAgaWYgZWNobyAiJHtpbnN0YWxsX2RldmljZX0iIHwgZ3JlcCAtcSAiKC4qKSIgOyB0aGVuCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSIke2luc3RhbGxfZGV2aWNlfSIKKyAgICAgICBlbHNlCisgICAgICAgICBpbnN0YWxsX2RyaXZlPSJgIiRncnViX3Byb2JlIiAtLWRldmljZS1tYXA9IiR7ZGV2aWNlX21hcH0iIC0tdGFyZ2V0PWRyaXZlIC0tZGV2aWNlICIke2luc3RhbGxfZGV2aWNlfSJgIiB8fCBleGl0IDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYmQwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1Yi1uby11bnVzZWQtcmVzdWx0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1NpZ25lZC1vZmYtYnk6IFJhZHUgTW9pc2FuIDxyYWR1Lm1vaXNhbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSSBoYWQgYW4gZXJyb3IgYmVjYXVzZSBvZiBhbiB1bnVzZWQgcmV0dXJuIHZhbHVlIGZvciByZWFkKCkuCitJIGFkZGVkIC1Xbm8tdW51c2VkLXJlc3VsdC4KKworSW5kZXg6IGdydWItMi4wMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTIuMDAub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wOC0xMyAxNjozMjozMy4wMDAwMDAwMDAgKzAzMDAKKysrKyBncnViLTIuMDAvY29uZmlndXJlLmFjCTIwMTItMDgtMTMgMTY6Mzg6MjIuMDAwMDAwMDAwICswMzAwCitAQCAtMzk0LDcgKzM5NCw3IEBACisgTElCUz0iIgorIAorICMgZGVidWcgZmxhZ3MuCistV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1XdmFyaWFkaWMtbWFjcm9zIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdwb2ludGVyLXNpZ24iCisrV0FSTl9GTEFHUz0iLVdhbGwgLVcgLVdzaGFkb3cgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV3BvaW50ZXItYXJpdGggLVd1bmRlZiAtV2V4dHJhIC1XYWRkcmVzcyAtV2F0dHJpYnV0ZXMgLVdjYXN0LWFsaWduIC1XY2hhci1zdWJzY3JpcHRzIC1XY29tbWVudCAtV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIC1XZGlzYWJsZWQtb3B0aW1pemF0aW9uIC1XZGl2LWJ5LXplcm8gLVdlbXB0eS1ib2R5IC1XZW5kaWYtbGFiZWxzIC1XZmxvYXQtZXF1YWwgLVdmb3JtYXQtZXh0cmEtYXJncyAtV2Zvcm1hdC1zZWN1cml0eSAtV2Zvcm1hdC15MmsgLVdpbXBsaWNpdCAtV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1XaW1wbGljaXQtaW50IC1XaW5pdC1zZWxmIC1XaW50LXRvLXBvaW50ZXItY2FzdCAtV2ludmFsaWQtcGNoIC1XbWFpbiAtV21pc3NpbmctYnJhY2VzIC1XbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdtaXNzaW5nLW5vcmV0dXJuIC1XbXVsdGljaGFyIC1Xbm9ubnVsbCAtV292ZXJmbG93IC1XcGFyZW50aGVzZXMgLVdwb2ludGVyLWFyaXRoIC1XcG9pbnRlci10by1pbnQtY2FzdCAtV3JldHVybi10eXBlIC1Xc2VxdWVuY2UtcG9pbnQgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUgLVdzdHJpY3QtYWxpYXNpbmcgLVdzd2l0Y2ggLVd0cmlncmFwaHMgLVd1bmRlZiAtV3Vua25vd24tcHJhZ21hcyAtV3VudXNlZCAtV3VudXNlZC1mdW5jdGlvbiAtV3VudXNlZC1sYWJlbCAtV3VudXNlZC1wYXJhbWV0ZXIgLVd1bnVzZWQtdmFsdWUgIC1XdW51c2VkLXZhcmlhYmxlIC1Xbm8tdW51c2VkLXJlc3VsdCAtV3ZhcmlhZGljLW1hY3JvcyAtV3ZvbGF0aWxlLXJlZ2lzdGVyLXZhciAtV3dyaXRlLXN0cmluZ3MgLVduZXN0ZWQtZXh0ZXJucyAtV3N0cmljdC1wcm90b3R5cGVzIC1XcG9pbnRlci1zaWduIgorIEhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgJFdBUk5fRkxBR1MiCisgVEFSR0VUX0NGTEFHUz0iJFRBUkdFVF9DRkxBR1MgJFdBUk5fRkxBR1MgLWcgLVdyZWR1bmRhbnQtZGVjbHMgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyBUQVJHRVRfQ0NBU0ZMQUdTPSIkVEFSR0VUX0NDQVNGTEFHUyAtZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLWZpeC1pbml0cmQtc2l6ZS1idWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExNGY0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gOGZiYjE1MGE1Njk2NmVkZGU0ZGMwN2I4ZDAxYmU1ZWIxNDliNjVhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvbGluIFdhdHNvbiA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KK0RhdGU6IFN1biwgMjAgSmFuIDIwMTMgMjM6MDM6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdICogZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMgKGdydWJfY21kX2luaXRyZCk6IERvbid0CisgYWRkIHRoZSBpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorIHRoaXMgYWRkcmVzcy4KKworY29tbWl0IDZhMGRlYmJkOTE2N2U4Zjc5Y2RlZjU0OTdhNzNkMjNlNTgwYzBjZDQgdXBzdHJlYW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTaGFuIEhhaSA8c2hhbi5oYWlAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyB8IDMgKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGMyZjQyZDUuLjQwY2I1MDggMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTEsMyArMSw5IEBACisrMjAxMy0wMS0yMCAgQ29saW4gV2F0c29uICA8Y2p3YXRzb25AdWJ1bnR1LmNvbT4KKysKKysJKiBncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYyAoZ3J1Yl9jbWRfaW5pdHJkKTogRG9uJ3QgYWRkIHRoZQorKwlpbml0cmQgc2l6ZSB0byBhZGRyX21pbiwgc2luY2UgdGhlIGluaXRyZCB3aWxsIGJlIGFsbG9jYXRlZCBhZnRlcgorKwl0aGlzIGFkZHJlc3MuCisrCisgMjAxMi0wNy0wMiAgVmxhZGltaXIgU2VyYmluZW5rbyAgPHBoY29kZXJAZ21haWwuY29tPgorIAorIAkqIGdydWItY29yZS9uZXQvdGZ0cC5jIChhY2spOiBGaXggZW5kaWFubmVzcyBwcm9ibGVtLgorZGlmZiAtLWdpdCBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni9saW51eC5jIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK2luZGV4IDYyMDg3Y2YuLmUyNDI1YzggMTAwNjQ0CistLS0gYS9ncnViLWNvcmUvbG9hZGVyL2kzODYvbGludXguYworKysrIGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2xpbnV4LmMKK0BAIC0xMDk4LDggKzEwOTgsNyBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICB3b3JzZSB0aGFuIHRoYXQgb2YgTGludXggMi4zLnh4LCBzbyBhdm9pZCB0aGUgbGFzdCA2NGtiLiAgKi8KKyAgIGFkZHJfbWF4IC09IDB4MTAwMDA7CisgCistICBhZGRyX21pbiA9IChncnViX2FkZHJfdCkgcHJvdF9tb2RlX3RhcmdldCArIHByb3RfaW5pdF9zcGFjZQorLSAgICAgICAgICAgICArIHBhZ2VfYWxpZ24gKHNpemUpOworKyAgYWRkcl9taW4gPSAoZ3J1Yl9hZGRyX3QpIHByb3RfbW9kZV90YXJnZXQgKyBwcm90X2luaXRfc3BhY2U7CisgCisgICAvKiBQdXQgdGhlIGluaXRyZCBhcyBoaWdoIGFzIHBvc3NpYmxlLCA0S2lCIGFsaWduZWQuICAqLworICAgYWRkciA9IChhZGRyX21heCAtIHNpemUpICYgfjB4RkZGOworLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvZ3J1YjItcmVtb3ZlLXNwYXJjNjQtc2V0dXAtZnJvbS14ODYtYnVpbGRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjU5YTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2ZpbGVzL2dydWIyLXJlbW92ZS1zcGFyYzY0LXNldHVwLWZyb20teDg2LWJ1aWxkcy5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworcmVtb3ZlIHRoZSBncnViLXNwYXJjNjQtc2V0dXAgZmlsZXMgZnJvbSB0aGUgeDg2IGJ1aWxkcy4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworLS0tIGEvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQxOjAyLjQ0MTAxMTI3OCAtMDcwMAorKysrIGIvTWFrZWZpbGUudXRpbC5hbQkyMDE0LTA4LTE1IDExOjQ0OjI2LjI0NTAyMTE0MiAtMDcwMAorQEAgLTQ2OTIsOSArNDY5Miw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2VtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3MTUsOSArNDcxNSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcGMKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00NzM4LDkgKzQ3MzgsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X2VmaQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3NjEsOSArNDc2MSw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfcWVtdQorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ3ODQsOSArNDc4NCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfY29yZWJvb3QKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODA3LDkgKzQ4MDcsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF9pMzg2X211bHRpYm9vdAorLXNiaW5fUFJPR1JBTVMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwCisrc2Jpbl9QUk9HUkFNUyArPQorIGlmIENPTkRfTUFOX1BBR0VTCistbWFuX01BTlMgKz0gZ3J1Yi1zcGFyYzY0LXNldHVwLjgKKyttYW5fTUFOUyArPQorIAorIGdydWItc3BhcmM2NC1zZXR1cC44OiBncnViLXNwYXJjNjQtc2V0dXAKKyAJY2htb2QgYSt4IGdydWItc3BhcmM2NC1zZXR1cAorQEAgLTQ4MzAsOSArNDgzMCw5IEBACisgZW5kaWYKKyAKKyBpZiBDT05EX2kzODZfaWVlZTEyNzUKKy1zYmluX1BST0dSQU1TICs9IGdydWItc3BhcmM2NC1zZXR1cAorK3NiaW5fUFJPR1JBTVMgKz0KKyBpZiBDT05EX01BTl9QQUdFUworLW1hbl9NQU5TICs9IGdydWItc3BhcmM2NC1zZXR1cC44CisrbWFuX01BTlMgKz0KKyAKKyBncnViLXNwYXJjNjQtc2V0dXAuODogZ3J1Yi1zcGFyYzY0LXNldHVwCisgCWNobW9kIGEreCBncnViLXNwYXJjNjQtc2V0dXAKK0BAIC00ODUzLDkgKzQ4NTMsOSBAQAorIGVuZGlmCisgCisgaWYgQ09ORF94ODZfNjRfZWZpCistc2Jpbl9QUk9HUkFNUyArPSBncnViLXNwYXJjNjQtc2V0dXAKKytzYmluX1BST0dSQU1TICs9CisgaWYgQ09ORF9NQU5fUEFHRVMKKy1tYW5fTUFOUyArPSBncnViLXNwYXJjNjQtc2V0dXAuOAorK21hbl9NQU5TICs9CisgCisgZ3J1Yi1zcGFyYzY0LXNldHVwLjg6IGdydWItc3BhcmM2NC1zZXR1cAorIAljaG1vZCBhK3ggZ3J1Yi1zcGFyYzY0LXNldHVwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZmlsZXMvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzZjc4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9maWxlcy9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdydWItMS45OS9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncnViLTEuOTkub3JpZy9ncnViLWNvcmUvZ251bGliL3N0ZGlvLmluLmgJMjAxMC0xMi0wMSAwNjo0NTo0My4wMDAwMDAwMDAgLTA4MDAKKysrKyBncnViLTEuOTkvZ3J1Yi1jb3JlL2dudWxpYi9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MjU6MDIuMDU3MDk5MTA3IC0wNzAwCitAQCAtMTQwLDggKzE0MCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2F1dG9oZWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9hdXRvaGVsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYyMDdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9hdXRvaGVsbC5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBncnViLTAuOTcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3J1Yi0wLjk3Lm9yaWcvY29uZmlndXJlLmFjCTIwMDgtMDktMTIgMTc6Mzk6NTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3J1Yi0wLjk3L2NvbmZpZ3VyZS5hYwkyMDA4LTA5LTEyIDE3OjQwOjIxLjAwMDAwMDAwMCArMDIwMAorQEAgLTYwLDggKzYwLDggQEAgQUNfUFJPR19DQworIF9BTV9ERVBFTkRFTkNJRVMoQ0MpCisgCisgZG5sIEJlY2F1c2UgcmVjZW50IGF1dG9tYWtlIGNvbXBsYWlucyBhYm91dCBBUywgc2V0IGl0IGhlcmUuCistQ0NBUz0iJENDIgorLUFDX1NVQlNUKENDQVMpCisrQU1fUFJPR19BUworK0FDX1NVQlNUKEFTKQorIAorIEFDX0FSR19XSVRIKGJpbnV0aWxzLAorICAgWyAgLS13aXRoLWJpbnV0aWxzPURJUiAgICAgc2VhcmNoIHRoZSBkaXJlY3RvcnkgRElSIHRvIGZpbmQgYmludXRpbHNdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyNWQxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvZ3J1Yi1zdXBwb3J0LTI1NmJ5dGUtaW5vZGUucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbTm8gTG9uZ2VyIE1haW50YWluZWRdCisKK2RpZmYgLU5hdXIgZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYyBncnViLTAuOTctODEwL3N0YWdlMi9mc3lzX2V4dDJmcy5jCistLS0gZ3J1Yi0wLjk3LTgwMC9zdGFnZTIvZnN5c19leHQyZnMuYwkyMDA4LTA3LTIxIDAwOjQwOjIxLjY2ODg3OTQ3NSAtMDYwMAorKysrIGdydWItMC45Ny04MTAvc3RhZ2UyL2ZzeXNfZXh0MmZzLmMJMjAwOC0wNy0yMSAwMTowMToxMS4wNjM5NTM3NzMgLTA2MDAKK0BAIC03OSw3ICs3OSw1MiBAQAorICAgICBfX3UzMiBzX3Jldl9sZXZlbDsJCS8qIFJldmlzaW9uIGxldmVsICovCisgICAgIF9fdTE2IHNfZGVmX3Jlc3VpZDsJCS8qIERlZmF1bHQgdWlkIGZvciByZXNlcnZlZCBibG9ja3MgKi8KKyAgICAgX191MTYgc19kZWZfcmVzZ2lkOwkJLyogRGVmYXVsdCBnaWQgZm9yIHJlc2VydmVkIGJsb2NrcyAqLworLSAgICBfX3UzMiBzX3Jlc2VydmVkWzIzNV07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KKysgICAgLyoKKysgICAgICogVGhlc2UgZmllbGRzIGFyZSBmb3IgRVhUMl9EWU5BTUlDX1JFViBzdXBlcmJsb2NrcyBvbmx5LgorKyAgICAgKgorKyAgICAgKiBOb3RlOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjb21wYXRpYmxlIGZlYXR1cmUgc2V0IGFuZAorKyAgICAgKiB0aGUgaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0IGlzIHRoYXQgaWYgdGhlcmUgaXMgYSBiaXQgc2V0CisrICAgICAqIGluIHRoZSBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgdGhhdCB0aGUga2VybmVsIGRvZXNuJ3QKKysgICAgICoga25vdyBhYm91dCwgaXQgc2hvdWxkIHJlZnVzZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbS4KKysgICAgICoKKysgICAgICogZTJmc2NrJ3MgcmVxdWlyZW1lbnRzIGFyZSBtb3JlIHN0cmljdDsgaWYgaXQgZG9lc24ndCBrbm93CisrICAgICAqIGFib3V0IGEgZmVhdHVyZSBpbiBlaXRoZXIgdGhlIGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlCisrICAgICAqIGZlYXR1cmUgc2V0LCBpdCBtdXN0IGFib3J0IGFuZCBub3QgdHJ5IHRvIG1lZGRsZSB3aXRoCisrICAgICAqIHRoaW5ncyBpdCBkb2Vzbid0IHVuZGVyc3RhbmQuLi4KKysgICAgICovCisrICAgIF9fdTMyIHNfZmlyc3RfaW5vOwkJLyogRmlyc3Qgbm9uLXJlc2VydmVkIGlub2RlICovCisrICAgIF9fdTE2IHNfaW5vZGVfc2l6ZTsJCS8qIHNpemUgb2YgaW5vZGUgc3RydWN0dXJlICovCisrICAgIF9fdTE2IHNfYmxvY2tfZ3JvdXBfbnI7CS8qIGJsb2NrIGdyb3VwICMgb2YgdGhpcyBzdXBlcmJsb2NrICovCisrICAgIF9fdTMyIHNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKysgICAgX191MzIgc19mZWF0dXJlX3JvX2NvbXBhdDsJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLworKyAgICBfX3U4ICBzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciB2b2x1bWUgKi8KKysgICAgY2hhciAgc192b2x1bWVfbmFtZVsxNl07CS8qIHZvbHVtZSBuYW1lICovCisrICAgIGNoYXIgIHNfbGFzdF9tb3VudGVkWzY0XTsJLyogZGlyZWN0b3J5IHdoZXJlIGxhc3QgbW91bnRlZCAqLworKyAgICBfX3UzMiBzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7IC8qIEZvciBjb21wcmVzc2lvbiAqLworKyAgICAvKgorKyAgICAgKiBQZXJmb3JtYW5jZSBoaW50cy4gIERpcmVjdG9yeSBwcmVhbGxvY2F0aW9uIHNob3VsZCBvbmx5CisrICAgICAqIGhhcHBlbiBpZiB0aGUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgZmxhZyBpcyBvbi4KKysgICAgICovCisrICAgIF9fdTggIHNfcHJlYWxsb2NfYmxvY2tzOwkvKiBOciBvZiBibG9ja3MgdG8gdHJ5IHRvIHByZWFsbG9jYXRlKi8KKysgICAgX191OCAgc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX2dkdF9ibG9ja3M7LyogUGVyIGdyb3VwIHRhYmxlIGZvciBvbmxpbmUgZ3Jvd3RoICovCisrICAgIC8qCisrICAgICAqIEpvdXJuYWxpbmcgc3VwcG9ydCB2YWxpZCBpZiBFWFQyX0ZFQVRVUkVfQ09NUEFUX0hBU19KT1VSTkFMIHNldC4KKysgICAgICovCisrICAgIF9fdTggc19qb3VybmFsX3V1aWRbMTZdOwkvKiB1dWlkIG9mIGpvdXJuYWwgc3VwZXJibG9jayAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfaW51bTsJLyogaW5vZGUgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2pvdXJuYWxfZGV2OwkvKiBkZXZpY2UgbnVtYmVyIG9mIGpvdXJuYWwgZmlsZSAqLworKyAgICBfX3UzMiBzX2xhc3Rfb3JwaGFuOwkvKiBzdGFydCBvZiBsaXN0IG9mIGlub2RlcyB0byBkZWxldGUgKi8KKysgICAgX191MzIgc19oYXNoX3NlZWRbNF07CS8qIEhUUkVFIGhhc2ggc2VlZCAqLworKyAgICBfX3U4ICBzX2RlZl9oYXNoX3ZlcnNpb247CS8qIERlZmF1bHQgaGFzaCB2ZXJzaW9uIHRvIHVzZSAqLworKyAgICBfX3U4ICBzX2pubF9iYWNrdXBfdHlwZTsgCS8qIERlZmF1bHQgdHlwZSBvZiBqb3VybmFsIGJhY2t1cCAqLworKyAgICBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOworKyAgICBfX3UzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKysgICAgX191MzIgc19maXJzdF9tZXRhX2JnOwkvKiBGaXJzdCBtZXRhYmxvY2sgZ3JvdXAgKi8KKysgICAgX191MzIgc19ta2ZzX3RpbWU7CQkvKiBXaGVuIHRoZSBmaWxlc3lzdGVtIHdhcyBjcmVhdGVkICovCisrICAgIF9fdTMyIHNfam5sX2Jsb2Nrc1sxN107IAkvKiBCYWNrdXAgb2YgdGhlIGpvdXJuYWwgaW5vZGUgKi8KKysgICAgX191MzIgc19yZXNlcnZlZFsxNzJdOwkvKiBQYWRkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGJsb2NrICovCisgICB9OworIAorIHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MKK0BAIC0yMTgsNiArMjYzLDE0IEBACisgI2RlZmluZSBFWFQyX0FERFJfUEVSX0JMT0NLKHMpICAgICAgICAgIChFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyAjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0tfQklUUyhzKQkJKGxvZzIoRVhUMl9BRERSX1BFUl9CTE9DSyhzKSkpCisgCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX1JFViAgIDAgICAvKiBUaGUgZ29vZCBvbGQgKG9yaWdpbmFsKSBmb3JtYXQgKi8KKysjZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYgICAgMSAgIC8qIFYyIGZvcm1hdCB3LyBkeW5hbWljIGlub2RlIHNpemVzICovCisrI2RlZmluZSBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgMTI4CisrI2RlZmluZSBFWFQyX0lOT0RFX1NJWkUocykgICgoKHMpLT5zX3Jldl9sZXZlbCA9PSBFWFQyX0dPT0RfT0xEX1JFVikgPyBcCisrICAgICAgICAgICAgICAgICBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiBcCisrICAgICAgICAgICAgICAgICAocyktPnNfaW5vZGVfc2l6ZSkKKysjZGVmaW5lIEVYVDJfSU5PREVTX1BFUl9CTE9DSyhzKQkoRVhUMl9CTE9DS19TSVpFKHMpL0VYVDJfSU5PREVfU0laRShzKSkKKysKKyAvKiBsaW51eC9leHQyX2ZzLmggKi8KKyAjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRV9CSVRTKHMpICAgICAgICAoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCisgLyoga2luZCBvZiBmcm9tIGV4dDIvc3VwZXIuYyAqLworQEAgLTU1Myw3ICs2MDYsNyBAQAorICAgICAgIGdkcCA9IEdST1VQX0RFU0M7CisgICAgICAgaW5vX2JsayA9IGdkcFtkZXNjXS5iZ19pbm9kZV90YWJsZSArCisgCSgoKGN1cnJlbnRfaW5vIC0gMSkgJSAoU1VQRVJCTE9DSy0+c19pbm9kZXNfcGVyX2dyb3VwKSkKKy0JID4+IGxvZzIgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSkpOworKwkgPj4gbG9nMiAoRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSkpOworICNpZmRlZiBFMkRFQlVHCisgICAgICAgcHJpbnRmICgiaW5vZGUgdGFibGUgZnNibG9jaz0lZFxuIiwgaW5vX2Jsayk7CisgI2VuZGlmIC8qIEUyREVCVUcgKi8KK0BAIC01NjUsMTMgKzYxOCwxMiBAQAorICAgICAgIC8qIHJlc2V0IGluZGlyZWN0IGJsb2NrcyEgKi8KKyAgICAgICBtYXBibG9jazIgPSBtYXBibG9jazEgPSAtMTsKKyAKKy0gICAgICByYXdfaW5vZGUgPSBJTk9ERSArCistCSgoY3VycmVudF9pbm8gLSAxKQorLQkgJiAoRVhUMl9CTE9DS19TSVpFIChTVVBFUkJMT0NLKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpIC0gMSkpOworKyAgICAgIHJhd19pbm9kZSA9IChzdHJ1Y3QgZXh0Ml9pbm9kZSAqKSgoY2hhciAqKUlOT0RFICsKKysJKChjdXJyZW50X2lubyAtIDEpICYgKEVYVDJfSU5PREVTX1BFUl9CTE9DSyAoU1VQRVJCTE9DSykgLSAxKSkgKgorKwlFWFQyX0lOT0RFX1NJWkUgKFNVUEVSQkxPQ0spKTsKKyAjaWZkZWYgRTJERUJVRworICAgICAgIHByaW50ZiAoImlwYj0lZCwgc2l6ZW9mKGlub2RlKT0lZFxuIiwKKy0JICAgICAgKEVYVDJfQkxPQ0tfU0laRSAoU1VQRVJCTE9DSykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2lub2RlKSksCistCSAgICAgIHNpemVvZiAoc3RydWN0IGV4dDJfaW5vZGUpKTsKKysJICAgICAgRVhUMl9JTk9ERVNfUEVSX0JMT0NLIChTVVBFUkJMT0NLKSwgRVhUMl9JTk9ERV9TSVpFIChTVVBFUkJMT0NLKSk7CisgICAgICAgcHJpbnRmICgiaW5vZGU9JXgsIHJhd19pbm9kZT0leFxuIiwgSU5PREUsIHJhd19pbm9kZSk7CisgICAgICAgcHJpbnRmICgib2Zmc2V0IGludG8gaW5vZGUgdGFibGUgYmxvY2s9JWRcbiIsIChpbnQpIHJhd19pbm9kZSAtIChpbnQpIElOT0RFKTsKKyAgICAgICBmb3IgKGkgPSAodW5zaWduZWQgY2hhciAqKSBJTk9ERTsgaSA8PSAodW5zaWduZWQgY2hhciAqKSByYXdfaW5vZGU7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L2dydWJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Y3ZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9ncnViX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDc0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU3ViamVjdDogW1BBVENIXSBncnViOiBmaXggZm9yIGF1dG9tYWtlLTEuMTIKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBzdGFnZTEvTWFrZWZpbGUuYW06MjogZXJyb3I6ICdwa2dsaWJkaXInIGlzIG5vdCBhIGxlZ2l0aW1hdGUgZGlyZWN0b3J5IGZvciAnREFUQScKK3wgc3RhZ2UyL01ha2VmaWxlLmFtOjM1OiBlcnJvcjogJ3BrZ2xpYmRpcicgaXMgbm90IGEgbGVnaXRpbWF0ZSBkaXJlY3RvcnkgZm9yICdEQVRBJworfCBzdGFnZTIvTWFrZWZpbGUuYW06NDY6IGVycm9yOiAncGtnbGliZGlyJyBpcyBub3QgYSBsZWdpdGltYXRlIGRpcmVjdG9yeSBmb3IgJ0RBVEEnCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IEVSUk9SOiBhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuCisKK1RoZSB1cHN0cmVhbSBzdGF0dXMgaXMgbWFya2VkIGFzICdJbmFwcHJvcHJpYXRlJyBiZWNhdXNlIHRoaXMgcHJvYmxlbSBpcyBub3QgdW5jb21tb24sCitpdCBoYXMgYmVlbiB0aGVyZSBmb3IgYSBsb25nIHRpbWUgYW5kIG5vIGNoYW5nZSBpbiB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ3J1Yi0wLjk3L3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xLDcgKzEsNyBAQAorLXBrZ2xpYmRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCistbm9kaXN0X3BrZ2xpYl9EQVRBID0gc3RhZ2UxCisrcGtnZGF0YWRpciA9ICQobGliZGlyKS8kKFBBQ0tBR0UpLyQoaG9zdF9jcHUpLSQoaG9zdF92ZW5kb3IpCisrbm9kaXN0X3BrZ2RhdGFfREFUQSA9IHN0YWdlMQorIAorLUNMRUFORklMRVMgPSAkKG5vZGlzdF9wa2dsaWJfREFUQSkKKytDTEVBTkZJTEVTID0gJChub2Rpc3RfcGtnZGF0YV9EQVRBKQorIAorICMgV2UgY2FuJ3QgdXNlIGJ1aWx0aW5zIG9yIHN0YW5kYXJkIGluY2x1ZGVzLgorIEFNX0NDQVNGTEFHUyA9ICQoU1RBR0UxX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYworSW5kZXg6IGdydWItMC45Ny9zdGFnZTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL3N0YWdlMi9NYWtlZmlsZS5hbQorKysrIGIvc3RhZ2UyL01ha2VmaWxlLmFtCitAQCAtMjcsMTIgKzI3LDEyIEBAIGxpYmdydWJfYV9DRkxBR1MgPSAkKEdSVUJfQ0ZMQUdTKSAtSSQodG9wX3NyY2RpcikvbGliIFwKKyAJLURVU0VfTUQ1X1BBU1NXT1JEUz0xIC1EU1VQUE9SVF9TRVJJQUw9MSAtRFNVUFBPUlRfSEVSQ1VMRVM9MQorIAorICMgU3RhZ2UgMiBhbmQgU3RhZ2UgMS41J3MuCistcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKytwa2dkYXRhZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkvJChob3N0X2NwdSktJChob3N0X3ZlbmRvcikKKyAKKyBFWFRSQV9QUk9HUkFNUyA9IG5ibG9hZGVyLmV4ZWMgcHhlbG9hZGVyLmV4ZWMgZGlza2xlc3MuZXhlYworIAorIGlmIERJU0tMRVNTX1NVUFBPUlQKKy1wa2dsaWJfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorK3BrZ2RhdGFfREFUQSA9IHN0YWdlMiBzdGFnZTJfZWx0b3JpdG8gZTJmc19zdGFnZTFfNSBmYXRfc3RhZ2UxXzUgXAorIAlmZnNfc3RhZ2UxXzUgaXNvOTY2MF9zdGFnZTFfNSBqZnNfc3RhZ2UxXzUgbWluaXhfc3RhZ2UxXzUgXAorIAlyZWlzZXJmc19zdGFnZTFfNSB1ZnMyX3N0YWdlMV81IHZzdGFmc19zdGFnZTFfNSB4ZnNfc3RhZ2UxXzUgXAorIAluYmdydWIgcHhlZ3J1YgorQEAgLTQzLDcgKzQzLDcgQEAgbm9pbnN0X1BST0dSQU1TID0gcHJlX3N0YWdlMi5leGVjIHN0YXJ0LmV4ZWMgc3RhcnRfZWx0b3JpdG8uZXhlYyBcCisgCXJlaXNlcmZzX3N0YWdlMV81LmV4ZWMgdWZzMl9zdGFnZTFfNS5leGVjIHZzdGFmc19zdGFnZTFfNS5leGVjIFwKKyAJeGZzX3N0YWdlMV81LmV4ZWMgbmJsb2FkZXIuZXhlYyBweGVsb2FkZXIuZXhlYyBkaXNrbGVzcy5leGVjCisgZWxzZQorLXBrZ2xpYl9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisrcGtnZGF0YV9EQVRBID0gc3RhZ2UyIHN0YWdlMl9lbHRvcml0byBlMmZzX3N0YWdlMV81IGZhdF9zdGFnZTFfNSBcCisgCWZmc19zdGFnZTFfNSBpc285NjYwX3N0YWdlMV81IGpmc19zdGFnZTFfNSBtaW5peF9zdGFnZTFfNSBcCisgCXJlaXNlcmZzX3N0YWdlMV81IHVmczJfc3RhZ2UxXzUgdnN0YWZzX3N0YWdlMV81IHhmc19zdGFnZTFfNQorIG5vaW5zdF9EQVRBID0gcHJlX3N0YWdlMiBzdGFydCBzdGFydF9lbHRvcml0bworQEAgLTEwNSw3ICsxMDUsNyBAQCBlbHNlCisgQlVJTFRfU09VUkNFUyA9IHN0YWdlMl9zaXplLmgKKyBlbmRpZgorIAorLUNMRUFORklMRVMgPSAkKHBrZ2xpYl9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisrQ0xFQU5GSUxFUyA9ICQocGtnZGF0YV9EQVRBKSAkKG5vaW5zdF9EQVRBKSAkKEJVSUxUX1NPVVJDRVMpCisgCisgc3RhZ2UyX3NpemUuaDogcHJlX3N0YWdlMgorIAktcm0gLWYgc3RhZ2UyX3NpemUuaAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLTAuOTcvbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMDM3ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L25vLXJlb3JkZXItZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitBZnRlciB0aGUgY29tbWl0ICJ0Y21vZGUtZGVmYXVsdDogc3dpdGNoIHRvIGdjYyA0LjYuMCBmb3IgeDg2LCB4ODYtNjQgJiBhcm0iLAord2UgZ290IGJ1ZyAxMDk5IChodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5OSk6CisKK1J1bm5pbmcgImluc3RhbGwgLS1zdGFnZTI9L3NzZC9ib290L2dydWIvc3RhZ2UyIC9ib290L2dydWIvc3RhZ2UxKGhkMCkKKyAgICAgL2Jvb3QvZ3J1Yi9zdGFnZTIgcCAvYm9vdC9ncnViL21lbnUgbGlzdCIgZmFpbGVkCitFcnJvciA2OiBNaXNtYXRjaGVkIG9yIGNvcnJ1cHQgdmVyc2lvbiBvZiBzdGFnZTEvc3RhZ2UyCisKK1RoaXMgdHVybmVkIG91dCB0byBiZSBhIGdjYydzIGJ1Zy4gU2VlCitodHRwczovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYwNTEzCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM5MzMzCisKK1Vwc3RyZWFtIGdjYyBzZWVtcyB1bmludGVyZXN0ZWQgaW4gdGhlIGJ1Zywgc28gYXQgcHJlc2VudCB3ZSBjYW4gZGlzYWJsZSB0aGUKK29wdGlvbiBhcyBhIHdvcmthcm91bmQuIFRoYW5rcyBSeWFuIEhpbGwgZm9yIHRoZSBpbnZlc3RpZ2F0aW9uIGFuZCB0aGUKK3dvcmthcm91bmQgcGF0Y2guCisKK0RleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorV2VkIEp1biAyOSAyMDoyMTozOSBDU1QgMjAxMQorCistLS0gZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbS5vcmlnCisrKysgZ3J1Yi0wLjk3L3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTc5LDcgKzc5LDcgQEAKKyBIRVJDVUxFU19GTEFHUyA9CisgZW5kaWYKKyAKKy1TVEFHRTJfQ09NUElMRSA9ICQoU1RBR0UyX0NGTEFHUykgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisrU1RBR0UyX0NPTVBJTEUgPSAkKFNUQUdFMl9DRkxBR1MpIC1mbm8tcmVvcmRlci1mdW5jdGlvbnMgLWZuby1idWlsdGluIC1ub3N0ZGluYyBcCisgCSQoTkVUQk9PVF9GTEFHUykgJChTRVJJQUxfRkxBR1MpICQoSEVSQ1VMRVNfRkxBR1MpCisgCisgU1RBR0UxXzVfTElOSyA9IC1ub3N0ZGxpYiAtV2wsLU4gLVdsLC1UdGV4dCAtV2wsMjAwMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9vYmpjb3B5LWFic29sdXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWItMC45Ny9vYmpjb3B5LWFic29sdXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOGUwYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi0wLjk3L29iamNvcHktYWJzb2x1dGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorCitUaGlzIHBhdGNoIGlzIGZyb20gdWJ1bnR1OgorICAqIG9iamNvcHktYWJzb2x1dGUuZGlmZiAodXBkYXRlKTogUmVtb3ZlIC5ub3RlLCAuY29tbWVudCwgYW5kCisgICAgLm5vdGUuZ251LmJ1aWxkLWlkIHNlY3Rpb25zIGZyb20gaW1hZ2VzIChMUDogIzQ0NDcwMykuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gbG9uZ2VyIG1haW50YWluZWRdCisKK0luZGV4OiBiL2FjaW5jbHVkZS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvYWNpbmNsdWRlLm00CisrKysgYi9hY2luY2x1ZGUubTQKK0BAIC02MSw3ICs2MSw3IEBACisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbJHtDQy1jY30gY2Fubm90IGxpbmsgYXQgYWRkcmVzcyAkbGlua19hZGRyXSkKKyAgIGZpCistICBpZiBBQ19UUllfQ09NTUFORChbJHtPQkpDT1BZLW9iamNvcHl9IC1PIGJpbmFyeSBjb25mdGVzdC5leGVjIGNvbmZ0ZXN0XSk7IHRoZW4gOgorKyAgaWYgQUNfVFJZX0NPTU1BTkQoWyR7T0JKQ09QWS1vYmpjb3B5fSAtLW9ubHktc2VjdGlvbj0udGV4dCAtTyBiaW5hcnkgY29uZnRlc3QuZXhlYyBjb25mdGVzdF0pOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFske09CSkNPUFktb2JqY29weX0gY2Fubm90IGNyZWF0ZSBiaW5hcnkgZmlsZXNdKQorICAgZmkKK0luZGV4OiBiL3N0YWdlMS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvc3RhZ2UxL01ha2VmaWxlLmFtCisrKysgYi9zdGFnZTEvTWFrZWZpbGUuYW0KK0BAIC0xMiw0ICsxMiw0IEBACisKKyBTVUZGSVhFUyA9IC5leGVjCisgLmV4ZWM6CistCSQoT0JKQ09QWSkgLU8gYmluYXJ5ICQ8ICRACisrCSQoT0JKQ09QWSkgLU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5jb21tZW50IC1SIC5ub3RlLmdudS5idWlsZC1pZCAkPCAkQAorSW5kZXg6IGIvc3RhZ2UyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9zdGFnZTIvTWFrZWZpbGUuYW0KKysrKyBiL3N0YWdlMi9NYWtlZmlsZS5hbQorQEAgLTI5Myw0ICsyOTMsNCBAQAorICMgR2VuZXJhbCBydWxlIGZvciBtYWtpbmcgYSByYXcgYmluYXJ5LgorIFNVRkZJWEVTID0gLmV4ZWMKKyAuZXhlYzoKKy0JJChPQkpDT1BZKSAtTyBiaW5hcnkgJDwgJEAKKysJJChPQkpDT1BZKSAtTyBiaW5hcnkgLVIgLm5vdGUgLVIgLmNvbW1lbnQgLVIgLm5vdGUuZ251LmJ1aWxkLWlkICQ8ICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViLWVmaV8yLjAwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDRlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yi1lZmlfMi4wMC5iYgpAQCAtMCwwICsxLDY2IEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTX2NsYXNzLXRhcmdldCA9ICJncnViLWVmaS1uYXRpdmUiCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjMiCisKK1NSQ19VUkkgKz0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9jZmcgXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dydWItJHtQVn0iCisKKyMgRGV0ZXJtaW5lIHRoZSB0YXJnZXQgYXJjaCBmb3IgdGhlIGdydWIgbW9kdWxlcworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpbXBvcnQgcmUKKyAgICB0YXJnZXQgPSBkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKQorICAgIGlmIHRhcmdldCA9PSAieDg2XzY0IjoKKyAgICAgICAgZ3J1YnRhcmdldCA9ICd4ODZfNjQnCisgICAgICAgIGdydWJpbWFnZSA9ICJib290eDY0LmVmaSIKKyAgICBlbGlmIHJlLm1hdGNoKCdpLjg2JywgdGFyZ2V0KToKKyAgICAgICAgZ3J1YnRhcmdldCA9ICdpMzg2JworICAgICAgICBncnViaW1hZ2UgPSAiYm9vdGlhMzIuZWZpIgorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJncnViLWVmaSBpcyBpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUgdGFyZ2V0KQorICAgIGQuc2V0VmFyKCJHUlVCX1RBUkdFVCIsIGdydWJ0YXJnZXQpCisgICAgZC5zZXRWYXIoIkdSVUJfSU1BR0UiLCBncnViaW1hZ2UpCit9CisKK2luaGVyaXQgZGVwbG95CisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0hFTFAyTUFOPSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGxhdGZvcm09ZWZpIC0tZGlzYWJsZS1ncnViLW1rZm9udCBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZWZpZW11PW5vIC0tcHJvZ3JhbS1wcmVmaXg9JycgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gNzU1IGdydWItbWtpbWFnZSAke0R9JHtiaW5kaXJ9Cit9CisKK0dSVUJfQlVJTERJTiA/PSAiYm9vdCBsaW51eCBleHQyIGZhdCBzZXJpYWwgcGFydF9tc2RvcyBwYXJ0X2dwdCBub3JtYWwgZWZpX2dvcCBpc285NjYwIHNlYXJjaCIKKworZG9fZGVwbG95KCkgeworCSMgU2VhcmNoIGZvciB0aGUgZ3J1Yi5jZmcgb24gdGhlIGxvY2FsIGJvb3QgbWVkaWEgYnkgdXNpbmcgdGhlCisJIyBidWlsdCBpbiBjZmcgZmlsZSBwcm92aWRlZCB2aWEgdGhpcyByZWNpcGUKKwlncnViLW1raW1hZ2UgLWMgLi4vY2ZnIC1wIC9FRkkvQk9PVCAtZCAuL2dydWItY29yZS8gXAorCSAgICAgICAgICAgICAgIC1PICR7R1JVQl9UQVJHRVR9LWVmaSAtbyAuLyR7R1JVQl9JTUFHRX0gXAorCSAgICAgICAgICAgICAgICR7R1JVQl9CVUlMRElOfQorCWluc3RhbGwgLW0gNjQ0ICR7Qn0vJHtHUlVCX0lNQUdFfSAke0RFUExPWURJUn0KK30KKworZG9fZGVwbG95X2NsYXNzLW5hdGl2ZSgpIHsKKwk6Cit9CisKK2FkZHRhc2sgZGVwbG95IGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2J1aWxkCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgL2Jvb3QvZWZpL0VGSS9CT09ULyR7R1JVQl9UQVJHRVR9LWVmaS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dydWIvJHtHUlVCX1RBUkdFVH0tZWZpIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dydWIgXAorICAgICAgICAgICAgICAgICIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViL2F1dG9nZW4uc2gtZXhjbHVkZS1wYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzVhYTRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIvYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZmY4ZjY4Y2M0OGZkM2MzMGQ1NWUxZDU3MGQ1MWYyZTA5NTJjOTY4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyNSBKYW4gMjAxNCAyMzo0OTo0NCAtMDUwMAorU3ViamVjdDogW1BBVENIXSBhdXRvZ2VuLnNoOiBleGNsdWRlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluCisKK0V4Y2x1ZGUgdGhlIC5wYyBmcm9tIHBvL1BPVEZJTEVTLmluIHNpbmNlIHF1aWx0IHVzZXMgInBhdGNoIC0tYmFja3VwIiwKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSBiYWNrdXAgZmlsZSB1bmRlciAucGMsIHRoaXMgbWF5IGNhdXNlIHVuZXhwZWN0ZWQKK2Vycm9ycywgZm9yIGV4YW1wbGUsIG9uIENlbnRPUyA1LngsIGlmIHRoZSBiYWNrdXAgZmlsZSBpcyBudWxsCisobmV3ZmlsZSksIGl0J3MgbW9kZSB3aWxsIGJlIDAwMCwgdGhlbiB3ZSB3aWxsIGdldCBlcnJvcnMgd2hlbiB4Z2V0dGV4dAordHJ5IHRvIHJlYWQgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYXV0b2dlbi5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2F1dG9nZW4uc2ggYi9hdXRvZ2VuLnNoCitpbmRleCA3NDI0NDI4Li44NDM2MTllIDEwMDc1NQorLS0tIGEvYXV0b2dlbi5zaAorKysrIGIvYXV0b2dlbi5zaAorQEAgLTUsNyArNSw3IEBAIHNldCAtZQorIGV4cG9ydCBMQ19DT0xMQVRFPUMKKyB1bnNldCBMQ19BTEwKKyAKKy1maW5kIC4gLWluYW1lICcqLltjaF0nICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0LWdydWIvKicgISAtaXBhdGggJy4vYnVpbGQtYXV4LyonICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9taXNjLmMnICEgLWlwYXRoICcuL2dydWItY29yZS9saWIvbGliZ2NyeXB0L3NyYy9nbG9iYWwuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL3NlY21lbS5jJyAgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi13aWR0aHNwZWMuYycgISAtaXBhdGggJy4vdXRpbC9ncnViLWdlbi1hc2NpaWguYycgfHNvcnQgPiBwby9QT1RGSUxFUy5pbgorK2ZpbmQgLiAtaW5hbWUgJyouW2NoXScgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQtZ3J1Yi8qJyAhIC1pcGF0aCAnLi9idWlsZC1hdXgvKicgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL21pc2MuYycgISAtaXBhdGggJy4vZ3J1Yi1jb3JlL2xpYi9saWJnY3J5cHQvc3JjL2dsb2JhbC5jJyAhIC1pcGF0aCAnLi9ncnViLWNvcmUvbGliL2xpYmdjcnlwdC9zcmMvc2VjbWVtLmMnICAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLXdpZHRoc3BlYy5jJyAhIC1pcGF0aCAnLi91dGlsL2dydWItZ2VuLWFzY2lpaC5jJyAhIC1wYXRoICcuLy5wYy8qJyB8IHNvcnQgPiBwby9QT1RGSUxFUy5pbgorIGZpbmQgdXRpbCAtaW5hbWUgJyouaW4nICEgLW5hbWUgTWFrZWZpbGUuaW4gIHxzb3J0ID4gcG8vUE9URklMRVMtc2hlbGwuaW4KKyAKKyBlY2hvICJJbXBvcnRpbmcgdW5pY29kZS4uLiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWIyLmluYyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyNzcxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViMi5pbmMKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJHUlVCMiBpcyB0aGUgbmV4dC1nZW5lcmF0aW9uIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlciIKKworREVTQ1JJUFRJT04gPSAiR1JVQjIgaXMgdGhlIG5leHQgZ2VuZXJhaW9uIG9mIGEgR1BMZWQgYm9vdGxvYWRlciBcCitpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IG9wZXJhdGluZyBzeXN0ZW1zLiBJbiBcCithZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dydWIvIgorU0VDVElPTiA9ICJib290bG9hZGVycyIKKworTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnUub3JnL2dudS9ncnViL2dydWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2staWYtbGlibHptYS1pcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaXNzdWUtd2l0aC1mbGV4LTIuNS4zNy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLTIuMDAtYWRkLW9lLWtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLWluc3RhbGwuaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWVuZGlhbm5lc3MtcHJvYmxlbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1yZW1vdmUtc3BhcmM2NC1zZXR1cC1mcm9tLXg4Ni1idWlsZHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi0yLjAwLWZpeC1lbmFibGVfZXhlY3V0ZV9zdGFjay1jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLW5vLXVudXNlZC1yZXN1bHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktYWxsb3ctYS1jb21waWxhdGlvbi13aXRob3V0LW1jbW9kZWwtbGFyZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yi1lZmktZml4LXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFyc2VfZGhjcF92ZW5kb3ItQWRkLW1pc3NpbmctY29uc3QtcXVhbGlmaWVycy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViMi1maXgtaW5pdHJkLXNpemUtYnVnLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgeHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlOTI3NTQwYjZlZGE4YjAyNGZiMDM5MWVlYWE0MDkxYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NWIzOWEwNTU4ZjhjODAyMjA5YzU3NGY0ZDAyY2EyNjNhODA0ZThhNTY0YmM2Y2FmMWNkMGZkM2IzY2MxMWUzIgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tncnViLW1vdW50XSA9ICItLWVuYWJsZS1ncnViLW1vdW50LC0tZGlzYWJsZS1ncnViLW1vdW50LGZ1c2UiCitQQUNLQUdFQ09ORklHW2RldmljZS1tYXBwZXJdID0gIi0tZW5hYmxlLWRldmljZS1tYXBwZXIsLS1kaXNhYmxlLWRldmljZS1tYXBwZXIsbHZtMiIKKworIyBncnViIGFuZCBncnViLWVmaSdzIHN5c3Jvb3QvJHtkYXRhZGlyfS9ncnViL2dydWItbWtjb25maWdfbGliIGFyZQorIyBjb25mbGljdGVkLCByZW1vdmUgaXQgc2luY2Ugbm8gb25lIHVzZXMgaXQuCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1NfY2xhc3MtdGFyZ2V0ICs9ICJyZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIiCityZW1vdmVfc3lzcm9vdF9ta2NvbmZpZ19saWIoKSB7CisgICAgcm0gLXIgIiR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZ3J1Yi9ncnViLW1rY29uZmlnX2xpYiIKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMC45Ny5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzAuOTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3YTA0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzAuOTcuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJHUlVCIGlzIHRoZSBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIiCitERVNDUklQVElPTiA9ICJHUlVCIGlzIGEgR1BMZWQgYm9vdGxvYWRlciBpbnRlbmRlZCB0byB1bmlmeSBib290bG9hZGluZyBhY3Jvc3MgeDg2IFwKK29wZXJhdGluZyBzeXN0ZW1zLiBJbiBhZGRpdGlvbiB0byBsb2FkaW5nIHRoZSBMaW51eCBrZXJuZWwsIGl0IGltcGxlbWVudHMgdGhlIE11bHRpYm9vdCBcCitzdGFuZGFyZCwgd2hpY2ggYWxsb3dzIGZvciBmbGV4aWJsZSBsb2FkaW5nIG9mIG11bHRpcGxlIGJvb3QgaW1hZ2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9ncnViLyIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlcnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3J1Yi9tYWluLmM7YmVnaW5saW5lPTM7ZW5kbGluZT05O21kNT0yMmE1ZjI4ZDIxMzBmZmY5ZjJhMTdlZDU0YmU5MGVkNiIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiZnRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvZ3J1Yi9ncnViLSR7UFZ9LnRhci5nejsgXAorICAgICAgICAgICBmaWxlOi8vbm8tcmVvcmRlci1mdW5jdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2hlbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3J1Yl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqY29weS1hYnNvbHV0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncnViLXN1cHBvcnQtMjU2Ynl0ZS1pbm9kZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZDNmM2ViNTQ0NDZiZTYwMDMxNTYxNThkNTFmNDg4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZTFkMTVkMTJkYmQzZTkyMDgxMTFkNmI4MDZhZDVhOTg1N2NhODg1MGM0Nzg3N2QzNjU3NWI5MDQ1NTkyNjBiIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0NPTVBBVElCTEVfSE9TVCA9ICJpLjg2LiotbGludXgiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtY3Vyc2VzIgorCitkb19pbnN0YWxsX2FwcGVuZF92bXdhcmUoKSB7CisJbWtkaXIgLXAgJHtEfS9ib290LworCWxuIC1zZiAuLi91c3IvbGliL2dydWIveyRUQVJHRVRfQVJDSH17JFRBUkdFVF9WRU5ET1J9LyAke0R9L2Jvb3QvZ3J1YgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ncnViL2dydWJfMi4wMC5iYiBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhhNzA5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViXzIuMDAuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBncnViMi5pbmMKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorUFIgPSAicjEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9pMzg2LXBjLy5kZWJ1ZyIKKworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXBsYXRmb3JtPXBjIC0tZGlzYWJsZS1ncnViLW1rZm9udCAtLXByb2dyYW0tcHJlZml4PSIiIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2dydWIuZAorfQorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2dydWIvZ3J1Yl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3NjBjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3J1Yi9ncnViX2dpdC5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGdydWIyLmluYworCitERVBFTkRTICs9ICJhdXRvZ2VuLW5hdGl2ZSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorREVGQVVMVF9QUkVGRVJFTkNFX2FybSA9ICIxIgorCitQViA9ICIyLjAwKyR7U1JDUFZ9IgorU1JDUkVWID0gIjg3ZGU2NmQ5ZDgzNDQ2ZWNkZGIyOWNmYmRmNzM2OTEwMmM4ZTIwOWUiCitTUkNfVVJJID0gImdpdDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dydWIuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1mcG1hdGgtc3NlLTM4Ny1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b2dlbi5zaC1leGNsdWRlLXBjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dydWItMi4wMC1hZGQtb2Uta2VybmVsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLXdpdGgtZ2xpYmMtMi4yMC5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0LiopLShsaW51eC4qfGZyZWVic2QuKiknCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCisjIGNvbmZpZ3VyZS5hYyBoYXMgY29kZSB0byBzZXQgdGhpcyBhdXRvbWFnaWNhbGx5IGZyb20gdGhlIHRhcmdldCB0dXBsZQorIyBidXQgdGhlIE9FIGZyZWVmb3JtIG9uZSAoY29yZTItZm9vLWJhci1saW51eCkgZG9uJ3Qgd29yayB3aXRoIHRoYXQuCisKK0dSVUJQTEFURk9STV9hcm0gPSAidWJvb3QiCitHUlVCUExBVEZPUk1fYWFyY2g2NCA9ICJlZmkiCitHUlVCUExBVEZPUk0gPz89ICJwYyIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wbGF0Zm9ybT0ke0dSVUJQTEFURk9STX0gLS1kaXNhYmxlLWdydWItbWtmb250IC0tcHJvZ3JhbS1wcmVmaXg9IiIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYmx6bWE9bm8gLS1lbmFibGUtZGV2aWNlLW1hcHBlcj1ubyAtLWVuYWJsZS1saWJ6ZnM9bm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICggY2QgJHtTfQorICAgICAgJHtTfS9hdXRvZ2VuLnNoICkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ3J1Yi5kCisgCit9CisKKyMgZGVidWdlZGl0IGNob2tlcyBvbiBiYXJlIG1ldGFsIGJpbmFyaWVzCitJTkhJQklUX1BBQ0tBR0VfREVCVUdfU1BMSVQgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAiZGlmZnV0aWxzIGZyZWV0eXBlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59LyovLmRlYnVnIgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhcmNoIgorSU5TQU5FX1NLSVBfJHtQTn0tZGJnID0gImFyY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3QvZml4LW9iamNvcHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3QvZml4LW9iamNvcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmNTU5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdC9maXgtb2JqY29weS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDBmN2Y5ZTNiYjFkMGUxYjkzZjNhZDhhMWQ1ZDdiZGQzZmJmMjc0OTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgMjcgTWFyIDIwMTQgMDc6MjA6MzMgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gTWFrZWZpbGUuYW06IHVzZSBvYmpjb3B5IGZyb20gdGhlIGVudgorCitJdCB1c2VzIHRoZSAib2JqY29weSIgZGlyZWN0bHksIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSBmb3IgY3Jvc3MgY29tcGlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTE5LDYgKzE5LDggQEAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAke0FDTE9DQUxfRkxBR1N9CisgQU1fTUFLRUZMQUdTID0gLS1uby1wcmludC1kaXJlY3RvcnkKKyAKKytPQkpDT1BZID89IG9iamNvcHkKKysKKyBndW1taWJvb3RsaWJkaXIgPSAkKHByZWZpeCkvbGliL2d1bW1pYm9vdAorIAorIEFNX0NQUEZMQUdTID0gLWluY2x1ZGUgY29uZmlnLmgKK0BAIC0xNDgsNyArMTUwLDcgQEAgJChndW1taWJvb3Rfc29saWIpOiAkKGd1bW1pYm9vdF9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChndW1taWJvb3QpOiAkKGd1bW1pYm9vdF9zb2xpYikKKy0JJChBTV9WX0dFTikgb2JqY29weSAtaiAudGV4dCAtaiAuc2RhdGEgLWogLmRhdGEgLWogLmR5bmFtaWMgXAorKwkkKEFNX1ZfR0VOKSAkKE9CSkNPUFkpIC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisgCSAgLWogLmR5bnN5bSAtaiAucmVsIC1qIC5yZWxhIC1qIC5yZWxvYyBcCisgCSAgLS10YXJnZXQ9ZWZpLWFwcC0kKEFSQ0gpICQ8ICRACisgCitAQCAtMTgzLDcgKzE4NSw3IEBAICQoc3R1Yl9zb2xpYik6ICQoc3R1Yl9vYmplY3RzKQorIC5ERUxFVEVfT05fRVJST1I6ICQoZ3VtbWJvb3Rfc29saWIpCisgCisgJChzdHViKTogJChzdHViX3NvbGliKQorLQkkKEFNX1ZfR0VOKSBvYmpjb3B5IC1qIC50ZXh0IC1qIC5zZGF0YSAtaiAuZGF0YSAtaiAuZHluYW1pYyBcCisrCSQoQU1fVl9HRU4pICQoT0JKQ09QWSkgLWogLnRleHQgLWogLnNkYXRhIC1qIC5kYXRhIC1qIC5keW5hbWljIFwKKyAJICAtaiAuZHluc3ltIC1qIC5yZWwgLWogLnJlbGEgLWogLnJlbG9jIFwKKyAJICAtLXRhcmdldD1lZmktYXBwLSQoQVJDSCkgJDwgJEAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvZ3VtbWlib290L2d1bW1pYm9vdF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzNkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2d1bW1pYm9vdC9ndW1taWJvb3RfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiR3VtbWlib290IGlzIGEgc2ltcGxlIFVFRkkgYm9vdCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIGNvbmZpZ3VyZWQgRUZJIGltYWdlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZ3VtbWlib290IgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ251LWVmaSB1dGlsLWxpbnV4IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKK2luaGVyaXQgZGVwbG95CisKK1BWID0gIjQ4K2dpdCR7U1JDUFZ9IgorU1JDUkVWID0gIjJiY2Q5MTljNjgxYzk1MmViODY3ZWYxYmRiNDU4ZjFiYzQ5YzJkNTUiCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2d1bW1pYm9vdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtb2JqY29weS5wYXRjaCBcCisgICAgICAgICAgIgorCisjIE5vdGU6IEFkZCBDT01QQVRJQkxFX0hPU1QgaGVyZSBpcyBvbmx5IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBnbnUtZWZpCisjIHdoaWNoIGhhcyBzZXQgdGhlIENPTVBBVElCTEVfSE9TVCwgdGhlIGd1bW1pYm9vdCBpdHNlbGYgbWF5IHdvcmsgb24KKyMgbW9yZSBob3N0cy4KK0NPTVBBVElCTEVfSE9TVCA9ICIoeDg2XzY0Lip8aS44Ni4qKS1saW51eCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1tYW5wYWdlcyAtLXdpdGgtZWZpLWluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1lZmktbGRzZGlyPSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZWZpLWxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSIKKworRVhUUkFfT0VNQUtFICs9ICJndW1taWJvb3RsaWJkaXI9JHtsaWJkaXJ9L2d1bW1pYm9vdCIKKworZG9fZGVwbG95ICgpIHsKKyAgICAgICAgaW5zdGFsbCAke0J9L2d1bW1pYm9vdCouZWZpICR7REVQTE9ZRElSfQorfQorYWRkdGFzayBkZXBsb3kgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2NvbXBpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL0NPUFlJTkcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9DT1BZSU5HLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzcwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9DT1BZSU5HLnBhdGNoCkBAIC0wLDAgKzEsMzQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorCitkaWZmIC1ydU4gaG9zdGFwLWNvbmYtMS4wLW9yaWcvQ09QWUlORyBob3N0YXAtY29uZi0xLjAvQ09QWUlORworLS0tIGhvc3RhcC1jb25mLTEuMC1vcmlnL0NPUFlJTkcJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBob3N0YXAtY29uZi0xLjAvQ09QWUlORwkyMDEwLTEyLTA5IDE2OjM2OjQ4LjAwMDAwMDAwMCArMDgwMAorQEAgLTAsMCArMSwzNDAgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKwwKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysMCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysMCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysMCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysMCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXAtZnctbG9hZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTBiZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwLWZ3LWxvYWQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWR+aG9zdGFwLWZ3LWxvYWQKKysrKyBob3N0YXAtdXRpbHMtMC4yLjQvaG9zdGFwX2Z3X2xvYWQKK0BAIC02LDkgKzYsOSBAQAorICMgRmlybXdhcmUgaW1hZ2VzIGZvciB0aGUgY2FyZAorICMgVE9ETzogY291bGQgdHJ5IHRvIHNlbGVjdCBjb3JyZWN0IGZpcm13YXJlIHR5cGUgYXV0b21hdGljYWxseQorIAorLVBSST0vZXRjL3BjbWNpYS9QTTAxMDEwMi5IRVgKKy1TVEE9L2V0Yy9wY21jaWEvUkYwMTA4MDIuSEVYCistUFJJU00yX1NSRUM9L3Vzci9sb2NhbC9iaW4vcHJpc20yX3NyZWMKKytQUkk9L2V0Yy9wY21jaWEvcG0wMTAxMDIuaGV4CisrU1RBPS9ldGMvcGNtY2lhL3JmMDEwODA0LmhleAorK1BSSVNNMl9TUkVDPS91c3Ivc2Jpbi9wcmlzbTJfc3JlYworIAorIHNldCAtZQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGRhODJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvZmlsZXMvaG9zdGFwX2NzLmNvbmYKQEAgLTAsMCArMSwxOTMgQEAKK21vZHVsZSAiaG9zdGFwX2NzIiBvcHRzICJjaGFubmVsPTMgaXdfbW9kZT0yIGVzc2lkPWFueSBpZ25vcmVfY2lzX3ZjYz0xIgorCitjYXJkICJBY3Rpb250ZWMgODAyQ0kyIgorICBtYW5maWQgMHgxNjY4LCAweDAxMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJXYXkgODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgICN2ZXJzaW9uICJBaXJXYXkiLCAiODAyLjExIEFkYXB0ZXIgKFBDTUNJQSkiCisgIG1hbmZpZCAweDAyNjEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkFzdXMgU3BhY2VMaW5rIFdMMTEwIgorICAgbWFuZmlkIDB4MDJhYSwweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworIyMgaGFuZGhlbGRzLm9yZyBidWcgOTY0CitjYXJkICJCZWxraW4gRjVENjA2MCBFdGhlcm5ldCIKKyAgICN2ZXJzaW9uICJQQ01DSUEiLCAiMTFNIFdMQU4gQ2FyZCB2Mi41IiwgIklTTDM3MzAwUCIsICJSZXZBIgorICAgbWFuZmlkIDB4MDI3NCwgMHgxNjEyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkNvbXBhcSAxMU1icHMgV2lyZWxlc3MgUEMgQ2FyZCIKKyAgbWFuZmlkIDB4MDI4YSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIFdMMTAwIDExIE1icHMgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4MDEzOCwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQ29tcGFxIEhOVy0xMDAgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFdMLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERXTC02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRFJDLTY1MCIKKyAgdmVyc2lvbiAiRCIsICJMaW5rIERSQy02NTAgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJELUxpbmsgRENGNjYwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDUKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJGYXJhbGxvbiBTa3lMSU5FIgorICB2ZXJzaW9uICJJTlRFUlNJTCIsICJIRkEzODR4L0lFRUUiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiSHlwZXJMaW5rIFdpcmVsZXNzIFBDIENhcmQgMTFNYnBzIgorICB2ZXJzaW9uICJIeXBlckxpbmsiLCAiV2lyZWxlc3MgUEMgQ2FyZCAxMU1icHMiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBjYXJkICJJbnRlcnNpbCBQUklTTTIgMTEgTWJwcyBXaXJlbGVzcyBBZGFwdGVyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorIyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMQTQxMTEgU3BlY3RydW0yNCBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIKKyAgdmVyc2lvbiAiU3ltYm9sIFRlY2hub2xvZ2llcyIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIDExTWJwcyA4MDIuMTFiIFdMQU4gQ2FyZCIKKyAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0NGMTEgMTFNYnBzIDgwMi4xMWIgV0xBTiBDYXJkIgorICAgbWFuZmlkIDB4MDI3NCwgMHgzMzAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGJpbmQgImhvc3RhcF9jcyIgCisKKyMjIGhhbmRoZWxkcy5vcmcgYnVnICM3OTAKK2NhcmQgIkxpbmtzeXMgV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQgV0NGMTIiCisgIG1hbmZpZCAweDAyOGEsIDB4MDY3MworICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgV0xBTiBDRiBDYXJkIgorICBtYW5maWQgMHgwMjc0LCAweDMzMDEKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJORVRHRUFSIE1BNzAxIFdpcmVsZXNzIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5vcnRlbCBOZXR3b3JrcyBlTW9iaWxpdHkgODAyLjExIFdpcmVsZXNzIEFkYXB0ZXIiCisgIG1hbmZpZCAweDAxZWIsIDB4MDgwYQorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlBMQU5FWCBHZW9XYXZlIEdXLUNGMTEwIgorICB2ZXJzaW9uICJQTEFORVgiLCAiR2VvV2F2ZS9HVy1DRjExMCIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQUk9YSU0gTEFOIFBDIENBUkQgSEFSTU9OWSA4MDIxMUIiCisgIHZlcnNpb24gIlBST1hJTSIsICJMQU4gUEMgQ0FSRCBIQVJNT05ZIDgwMjExQiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJQcm94aW0gUmFuZ2VMQU4vRFMiCisgIHZlcnNpb24gIlBST1hJTSIsIlJhbmdlTEFOLURTL0xBTiBQQyBDQVJEIgorICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYWZld2F5IDgwMi4xMWIgV2lyZWxlc3MgQWRhcHRlciIKKyAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU0FNU1VORyAxMU1icHMgV0xBTiBDYXJkIgorICB2ZXJzaW9uICJTQU1TVU5HIiwgIjExTWJwcyBXTEFOIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworIyBuZWVkcyBmaXJtd2FyZSB1cGxvYWQgdmlhIGhvc3RhcF9md19sb2FkCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIE9FTSAoME1CKSIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAxMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisjIG5lZWRzIHNwZWNpYWwgYWN0aXZhdGlvbiAoPj1ob3N0YXAgMC4zLjIgb25seSkgcGx1cyBmaXJtd2FyZSB1cGxvYWQKK2NhcmQgIlNhbkRpc2sgQ29ubmVjdFBsdXMgdy8gTWVtb3J5IgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisjICAgYmluZCAiaWRlLWNzIiB0byAxCisKK2NhcmQgIlNlbmFvL09yaWdvIDgwMjExYiBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMDBiLDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTaXRlY29tIFdMLTAwNyBXTEFOIENGIENhcmQiCisgIG1hbmZpZCAweGQ2MDEsIDB4MDAwNAorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNNQzI2MzIgODAyLjExIChwcmlzbTIpIENhcmQiCisgIHZlcnNpb24gIlNNQyIsICJTTUMyNjMyVyIsICJWZXJzaW9uIDAxLjAyIiwgIiIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTcGVlZFN0cmVhbSBTUzEwMjEgV2lyZWxlc3MgQWRhcHRlciIKKyAgI3ZlcnNpb24gIlNpZW1lbnMiLCAiU3BlZWRTdHJlYW0gV2lyZWxlc3MgUENNQ0lBIgorICBtYW5maWQgMHgwMmFjLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaQ09NQVggQWlyUnVubmVyL1hJLTMwMCIKKyAgI3ZlcnNpb24gIlpDT01BWCIsICJBaXJSdW5uZXIvWEktMzAwIgorICBtYW5maWQgMHhkNjAxLCAweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJab25ldCBaQ0YxMTAwIgorICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgYmluZCAiaG9zdGFwX2NzIgorICAKK2NhcmQgIldpcmVsZXNzIExBTiBBZGFwdGVyIFZlcnNpb24gMDEuMDIiCisgICB2ZXJzaW9uICJXaXJlbGVzcyIsICJMQU4gQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICB2ZXJzaW9uICJBbWJpQ29tIiwgIldMMTEwMEMgODAyLjExYiBDRi1DYXJkIiwgIjIuMiIKKyAgbWFuZmlkIDB4ZDYwMSwweDAwMDIKKyAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBbWJpY29tIFdMMTEwMEMgMTFNYnMgQ2FyZCA4MDIuMTFiIgorICBtYW5maWQgMHhkNjAxLDB4MDAwMgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbmRpc2sgQ29ubmVjdCBTRFdDRkItMDAwIgorICBtYW5maWQgMHhkNjAxLDB4MDAwNQorICBiaW5kICJob3N0YXBfY3MiCisKKyMgQ2FyZHMgd2l0aCBJbnRlcnNpbCBmaXJtd2FyZSAoUHJpc20gY2hpcHNldCkKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgODAyLjExYiBXTEFOIENhcmQiCisgIHZlcnNpb24gIlRoZSBMaW5rc3lzIEdyb3VwLCBJbmMuIiwgIkluc3RhbnQgV2lyZWxlc3MgTmV0d29yayBQQyBDYXJkIiwgIklTTDM3MzAwUCIsICJSZXZBIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkxpbmtzeXMgQ29tcGFjdEZsYXNoIFdpcmVsZXNzIENhcmQiCisgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQUNUSU9OVEVDIFBSSVNNIFdpcmVsZXNzIExBTiBQQyBDYXJkIgorICB2ZXJzaW9uICJBQ1RJT05URUMiLCAiUFJJU00gV2lyZWxlc3MgTEFOIFBDIENhcmQiCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSBWZXJzaW9uIDMiCisgIG1hbmZpZCAweDAyNzQsMHgxNjEzCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQkVOUSBBV0wxMDAiCisgIHZlcnNpb24gIkJFTlEiLCAiQVdMMTAwIFBDTUNJQSBBREFQVEVSIgorICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByZXRlYyBXTEFOIgorICB2ZXJzaW9uICJQcmV0ZWMiLCAiQ29tcGFjdFdMQU4gQ2FyZCA4MDIuMTFiIiwgIjIuNSIKKyAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiVHJlbmROZXQgVEVXIFBDMTYiCisgIG1hbmZpZCAweDAyNzQsIDB4MTYwMQorICBiaW5kICJob3N0YXBfY3MiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbSBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5jb25mLXVwc3RyZWFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNzM4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MuY29uZi11cHN0cmVhbQpAQCAtMCwwICsxLDE5MSBAQAorZGV2aWNlICJob3N0YXBfY3MiCisgICBjbGFzcyAibmV0d29yayIgbW9kdWxlICJob3N0YXAiLCAiaG9zdGFwX2NzIgorCitjYXJkICJJbnRlcnNpbCBQUklTTTIgUmVmZXJlbmNlIERlc2lnbiAxMU1iL3MgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wxMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAxMzgsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJDb21wYXEgV0wyMDAiCisgICB2ZXJzaW9uICJDb21wYXEiLCAiV0wyMDBfMTFNYnBzX1dpcmVsZXNzX1BDSV9DYXJkIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJFTVRBQyBBMjQyNGkgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGMyNTAsIDB4MDAwMgorIyAgIGNpcyAiY2lzL0VtdGFjLmRhdCIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXUEMxMSAxMU1icHMgV0xBTiBDYXJkIgorICAgdmVyc2lvbiAiSW5zdGFudCBXaXJlbGVzcyAiLCAiIE5ldHdvcmsgUEMgQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAyLjUgMTFNYnBzIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweDAyNzQsIDB4MTYxMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMaW5rc3lzIFdQQzExIFZlciAzIDExTWJwcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjc0LCAweDE2MTMKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGlua3N5cyBXQ0YxMiBXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIKKyAgIHZlcnNpb24gIkxpbmtzeXMiLCAiV2lyZWxlc3MgQ29tcGFjdEZsYXNoIENhcmQiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEV0wtNjUwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJEIiwgIkxpbmsgRFdMLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIkQtTGluayBEUkMtNjUwIDExTWJwcyBXTEFOIENhcmQiCisjICB2ZXJzaW9uICJEIiwgIkxpbmsgRFJDLTY1MCAxMU1icHMgV0xBTiBDYXJkIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMjhhLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWm9vbUFpciA0MTAwIDExTWIvcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJab29tQWlyIDExTWJwcyBIaWdoIiwgIlJhdGUgd2lyZWxlc3MgTmV0d29ya2luZyIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWRkdHJvbiBBV1AtMTAwIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJBZGR0cm9uIiwgIkFXUC0xMDAgV2lyZWxlc3MgUENNQ0lBIiwgIlZlcnNpb24gMDEuMDIiCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNhbXN1bmcgU1dMMjAwMC1OIDExTWIvcyBXTEFOIENhcmQiCisgICBtYW5maWQgMHgwMjUwLCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU01DIDI2MzJXIDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJTTUMiLCAiU01DMjYzMlciLCAiVmVyc2lvbiAwMS4wMiIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnJvTWF4IEZyZWVwb3J0IDExTWJwcyBXTEFOIENhcmQiCisgICB2ZXJzaW9uICJJbnRlcnNpbCIsICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAiSVNMMzczMDBQIiwgIkV2YWwtUmV2QSIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiWi1Db20gWEkzMDAgMTFNYi9zIFdMQU4gQ2FyZCIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaY29tYXggWEktMzI1SCAyMDBtVyIKKyMgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDA1CisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIjNDb20gQWlyQ29ubmVjdCBQQ0kgNzc3QSIKKyAgIG1hbmZpZCAweDAxMDEsIDB4MDc3NworICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJVLlMuIFJvYm90aWNzIElFRUUgODAyLjExYiBQQy1DQVJEIgorICAgdmVyc2lvbiAiVS5TLiBSb2JvdGljcyIsICJJRUVFIDgwMi4xMWIgUEMtQ0FSRCIsICJWZXJzaW9uIDAxLjAyIgorIyAgIG1hbmZpZCAweDAxNTYsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJMb25nc2hpbmUgTENSLTg1MzEgMTFNYnBzIFdMQU4gUENNQ0lBIENBUkQiCisgICB2ZXJzaW9uICJPRU0iLCAiUFJJU00yIElFRUUgODAyLjExIFBDLUNhcmQiLCAiVmVyc2lvbiAwMS4wMiIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiUGhpbGlwcyA4MDIuMTFiIFdMQU4gUENNQ0lBIgorICAgbWFuZmlkIDB4MDAwYiwgMHg3MzAwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlByb3hpbSBSYW5nZUxBTiIKKyMgICB2ZXJzaW9uICJQUk9YSU0iLCAiUmFuZ2VMQU4tRFMvTEFOIFBDIENBUkQiCisgICBtYW5maWQgMHgwMTI2LCAweDgwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQnVmZmFsbyBXTEktQ0YtUzExRyIKKyAgIHZlcnNpb24gIkJVRkZBTE8iLCAiV0xJLUNGLVMxMUciCisjICBtYW5maWQgMHgwMjZmLCAweDAzMGIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiTGV2ZWwtT25lIFdQQy0wMTAwIgorICAgdmVyc2lvbiAiRGlnaXRhbCBEYXRhIENvbW11bmljYXRpb25zIiwgIldQQy0wMTAwIiwgIlZlcnNpb24gMDAuMDAiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQmVsa2luIDgwMi4xMWIgV0xBTiBQQ01DSUEiCisgICB2ZXJzaW9uICJCZWxraW4iLCAiMTFNYnBzIFdpcmVsZXNzIE5vdGVib29rIE5ldHdvcmsgQWRhcHRlciIsICJWZXJzaW9uIDAxLjAyIgorICAgbWFuZmlkIDB4MDE1NiwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNlbmFvIFNMLTIwMTFDRC9TTC0yMDExQ0RQTFVTIgorICAgdmVyc2lvbiAiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIiwgIlZlcnNpb24gMDEuMDIiCisgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRnVsYm9uZCBBaXJib25kIFhJLTMwMEIiCisgICB2ZXJzaW9uICIgIiwgIklFRUUgODAyLjExIFdpcmVsZXNzIExBTi9QQyBDYXJkIgorICAgbWFuZmlkIDB4ZDYwMSwgMHgwMDAyCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5ldGdlYXIgTUE0MDEiCisgICB2ZXJzaW9uICJORVRHRUFSIE1BNDAxIFdpcmVsZXNzIFBDIiwgIkNhcmQiLCAiVmVyc2lvbiAwMS4wMCIKKyMgICBtYW5maWQgMHgwMTU2LCAweDAwMDIKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiRC1MaW5rIERXTC02NTAgUmV2LiBQMSIKKyAgIHZlcnNpb24gIkQtTGluayIsICJEV0wtNjUwIFdpcmVsZXNzIFBDIENhcmQgUmV2UCIsICJJU0wzNzEwMVAtMTAiLCAiQTMiCisjICAgbWFuZmlkIDB4MDAwYiwgMHg3MTEwCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIlNvbmljV0FMTCBMb25nIFJhbmdlIFdpcmVsZXNzIENhcmQiCisgICB2ZXJzaW9uICJTb25pY1dBTEwiLCAiTG9uZyBSYW5nZSBXaXJlbGVzcyBDYXJkIiwgIklTTDM3MTAwUCIsICIxLjAiCisgICBtYW5maWQgMHgwMDBiLCAweDcxMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiU2VuYW8gTkwtMjAxMUNEIFBMVVMgRXh0MiBNZXJjdXJ5IgorICAgdmVyc2lvbiAiV0xBTiIsICIxMU1icHNfUEMtQ2FyZF8zLjAiLCAiSVNMMzcxMDBQIiwgIkV2YWwtUmV2QSIKKyAgIG1hbmZpZCAweDAwMGIsIDB4NzEwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJBaXJ2YXN0IFdMMTAwIgorICAgdmVyc2lvbiAiQUlSVkFTVCIsICJJRUVFIDgwMi4xMWIgV2lyZWxlc3MgUENNQ0lBIENhcmQiLCAiSEZBMzg2MyIKKyAgIG1hbmZpZCAweDUwYzIsIDB4MDAwMQorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJNaWNyb3NvZnQgV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAgMS4wLjMiCisgICB2ZXJzaW9uICJNaWNyb3NvZnQiLCAiV2lyZWxlc3MgTm90ZWJvb2sgQWRhcHRlciBNTi01MjAiLCAiIiwgIjEuMC4zIgorICAgbWFuZmlkIDB4MDJkMiwgMHgwMDAxCisgICBiaW5kICJob3N0YXBfY3MiCisKK2NhcmQgIk5FVEdFQVIgTUE0MDFSQSIKKyAgIHZlcnNpb24gIk5FVEdFQVIgTUE0MDFSQSBXaXJlbGVzcyBQQyIsICJDYXJkIiwgIklTTDM3MzAwUCIsICJFdmFsLVJldkEiCisgICBtYW5maWQgMHgwMDBiLCAweDczMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiQWxsaWVkIFRlbGVzeW4gQVQtV0NMNDUyIgorICAgdmVyc2lvbiAiQWxsaWVkIFRlbGVzeW4iLCAiQVQtV0NMNDUyIFdpcmVsZXNzIFBDTUNJQSBSYWRpbyIsICJWZXIuIDEuMDAiCisgICBtYW5maWQgMHhjMDBmLCAweDAwMDAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiY29yZWdhIFdMIFBDQ0wtMTEiCisgICB2ZXJzaW9uICJjb3JlZ2EiLCAiV0wgUENDTC0xMSIsICJJU0wzNzMwMFAiLCAiUmV2QSIKKyAgIG1hbmZpZCAweGMwMGYsIDB4MDAwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJTYW5EaXNrIENvbm5lY3RQbHVzIgorICAgdmVyc2lvbiAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIKKyAgIG1hbmZpZCAweGQ2MDEsIDB4MDEwMQorICAgYmluZCAiaG9zdGFwX2NzIiB0byAwCisgICBiaW5kICJpZGUtY3MiIHRvIDEKKworY2FyZCAiQVNVUyBXTC0xMDAgODAxMWIgV0xBTiBQQyBDYXJkIgorICAgdmVyc2lvbiAiQVNVUyIsICI4MDJfMTFiX1BDX0NBUkRfMjUiLCAiVmVyc2lvbiAwMS4wMCIKKyAgIG1hbmZpZCAweDAyYWEsIDB4MDAwMgorICAgYmluZCAiaG9zdGFwX2NzIgorCitjYXJkICJaeVhlbCBaeWFpciBCLTEwMSA4MDIuMTFiIFdMQU4gY2FyZCIKKyAgIHZlcnNpb24gIiAiLCAiSUVFRSA4MDIuMTEgV2lyZWxlc3MgTEFOL1BDIENhcmQiCisgICBtYW5maWQgMHhkNjAxLCAweDAwMTAKKyAgIGJpbmQgImhvc3RhcF9jcyIKKworY2FyZCAiV0xBTiBQUklTTSBQQ01DSUEgQ0FSRCAzNzMwMFAgUmV2QjYiCisgICB2ZXJzaW9uICJXTEFOIiwgIlBSSVNNIFBDTUNJQSBDQVJEIiwgIjM3MzAwUCIsICJSZXZpc2lvbiBCNiIKKyAgIG1hbmZpZCAweDUwYzIsIDB4NzMwMAorICAgYmluZCAiaG9zdGFwX2NzIgorCisKKyMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBob3N0YXBfY3MubworIyBtb2R1bGUgImhvc3RhcF9jcyIgb3B0cyAiY2hhbm5lbD0zIGl3X21vZGU9MyBlc3NpZD10ZXN0IGlnbm9yZV9jaXNfdmNjPTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MubW9kYWxpYXMgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9maWxlcy9ob3N0YXBfY3MubW9kYWxpYXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0ODM1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2ZpbGVzL2hvc3RhcF9jcy5tb2RhbGlhcwpAQCAtMCwwICsxLDI4IEBACisjIHByb2R1Y3QgaW5mbzogIlByZXRlYyIsICJDb21wYWN0V0xBTiBDYXJkIDgwMi4xMWIiLCAiMi41IgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYTFDQUREM0U1cGJFNjk3NjM2Q3BjN0E1QkZDRjFwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIG1hbnVmYWN0dXJlciBJRCB3aGljaCBleGlzdCBpbiBvcmlub2NvX2NzIEFORCBpbiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDAwQmM3MTAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMDBCYzczMDBmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAxMjZjODAwMGYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDEzOGMwMDAyZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjUwYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyNzRjMTYxMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptMDI3NGMxNjEzZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm0wMjhBYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bTAyQUFjMDAwMmYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKK2FsaWFzIHBjbWNpYTptNTBDMmM3MzAwZjA2Zm4wMHBmbjAwcGEqcGIqcGMqcGQqIGhvc3RhcF9jcworYWxpYXMgcGNtY2lhOm1ENjAxYzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYypwZCogaG9zdGFwX2NzCithbGlhcyBwY21jaWE6bUQ2MDFjMDAwNWYwNmZuMDBwZm4wMHBhKnBiKnBjKnBkKiBob3N0YXBfY3MKKworIyBwcm9kdWN0IGluZm86ICJMaW5rc3lzIiwgIldpcmVsZXNzIENvbXBhY3RGbGFzaCBDYXJkIiwgIiIsICIiCithbGlhcyBwY21jaWE6bTAyOEFjMDY3M2YwNmZuMDBwZm4wMHBhMDczM0NDODFwYjBDNTJGMzk1cGMwMDAwMDAwMHBkMDAwMDAwMDAgaG9zdGFwX2NzCisKKyMgcHJvZHVjdCBpbmZvOiJQTEFORVggQ09NTVVOSUNBVElPTiBJTkMiLCJQTEFORVggR1ctQ0YxMVggV2lyZWxlc3MgQ0YgQ2FyZCIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm1ENjAxYzAwMTBmMDZmbjAwcGZuMDBwYTQ3MDNDRjY4cGJGQUQ3MzE4RHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcworCisjIDB4MDE1NiwgMHgwMDAyIGFuZCAiVmVyc2lvbiAwMS4wMiIgb25seSBhcHBlYXIgZm9yIFByaXNtIGJhc2VkIGNhcmRzLgorYWxpYXMgcGNtY2lhOm0wMTU2YzAwMDJmMDZmbjAwcGZuMDBwYSpwYipwYzRCNzRCQUEwcGQwMDAwMDAwMCBob3N0YXBfY3MKKworIyAiQlVGRkFMTyIsICJXTEktQ0YtUzExRyIsICIiLCAiIgorYWxpYXMgcGNtY2lhOm0wMjZGYzAzMEJmMDZmbjAwcGZuMDBwYTJERUNFQ0UzcGI4MjA2N0MxOHBjMDAwMDAwMDBwZDAwMDAwMDAwIGhvc3RhcF9jcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLWNvbmZfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLWNvbmZfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZDRjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtY29uZl8xLjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIGZpbGVzIGZvciBIb3N0QVAgKHdpZmkpIGRyaXZlciIKK0RFU0NSSVBUSU9OID0gIlBDTUNJQS1jcyBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB3aXJlbGVzcyBMQU4gY2FyZHMgYmFzZWQgb24gSW50ZXJzaWwncyBQcmlzbTIvMi41LzMgY2hpcHNldC4iCitTRUNUSU9OID0gImtlcm5lbC9tb2R1bGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorUFIgPSAicjE1IgorCitTUkNfVVJJID0gImZpbGU6Ly9ob3N0YXBfY3MubW9kYWxpYXMgXAorICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5wYXRjaCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9fY29tcGlsZSgpIHsKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHByb2JlLmQKKworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3RhcF9jcy5tb2RhbGlhcyAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kL2hvc3RhcF9jcy5jb25mCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzLTAuNC43L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U5OWQwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy0wLjQuNy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBob3N0YXAtdXRpbHMtMC40Ljcub3JpZy9NYWtlZmlsZQorKysrIGhvc3RhcC11dGlscy0wLjQuNy9NYWtlZmlsZQorQEAgLTE0LDE3ICsxNCwxNyBAQCBwcmlzbTJfc3JlYy5vOiBwcmlzbTJfc3JlYy5jIHV0aWwuaAorIGhvc3RhcF9jcnlwdF9jb25mOiBob3N0YXBfY3J5cHRfY29uZi5jCisKKyBob3N0YXBfZGlhZzogaG9zdGFwX2RpYWcubyB1dGlsLm8KKy0JJChDQykgLW8gaG9zdGFwX2RpYWcgJChDRkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisrCSQoQ0MpIC1vIGhvc3RhcF9kaWFnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9kaWFnLm8gdXRpbC5vCisKKyBob3N0YXBfZGlhZy5vOiBob3N0YXBfZGlhZy5jIHV0aWwuaAorCisgdXRpbC5vOiB1dGlsLmMgdXRpbC5oCisKKyBob3N0YXBfaW9fZGVidWc6IGhvc3RhcF9pb19kZWJ1Zy5jCistCSQoQ0MpIC1vIGhvc3RhcF9pb19kZWJ1ZyAkKENGTEFHUykgaG9zdGFwX2lvX2RlYnVnLmMKKysJJChDQykgLW8gaG9zdGFwX2lvX2RlYnVnICQoQ0ZMQUdTKSAkKExERkxBR1MpIGhvc3RhcF9pb19kZWJ1Zy5jCisKKyBob3N0YXBfcmlkOiBob3N0YXBfcmlkLm8gdXRpbC5vCistCSQoQ0MpIC1vIGhvc3RhcF9yaWQgJChDRkxBR1MpIGhvc3RhcF9yaWQubyB1dGlsLm8KKysJJChDQykgLW8gaG9zdGFwX3JpZCAkKENGTEFHUykgJChMREZMQUdTKSBob3N0YXBfcmlkLm8gdXRpbC5vCisKKyBob3N0YXBfcmlkLm86IGhvc3RhcF9yaWQuYyB1dGlsLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvaG9zdGFwL2hvc3RhcC11dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDk3N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiVXNlciBtb2RlIGhlbHBlcnMgZm9yIHRoZSBob3N0YXAgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIGhvc3RhcCBkcml2ZXIgc3VwcG9ydHMgSG9zdCBBUCBtb2RlLCBpdCBhbGxvd3MgZm9yIElFRUUgODAyLjExIFwKK21hbmFnZW1lbnQgZnVuY3Rpb25zIG9uIHRoZSBob3N0IGNvbXB1dGVyIGFuZCBhbGxvd3MgdGhlIHN5c3RlbSB0byBhY3QgYXMgYW4gYWNjZXNzIHBvaW50LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL2J1Z3ovIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly91dGlsLmM7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT1kM2I5MjgwODUxMzAyZTViYTM0ZTVmYjcxNzQ4OWI2ZCIKK1NFQ1RJT04gPSAia2VybmVsL3VzZXJsYW5kIgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2hvc3RhcC5lcGl0ZXN0LmZpL3JlbGVhc2VzL2hvc3RhcC11dGlscy0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9ob3N0YXAtZnctbG9hZC5wYXRjaCIKK1MgPSAiJHtXT1JLRElSfS9ob3N0YXAtdXRpbHMtJHtQVn0iCisKK0JJTkFSSUVTID0gImhvc3RhcF9jcnlwdF9jb25mIGhvc3RhcF9kaWFnIGhvc3RhcF9md19sb2FkIGhvc3RhcF9pb19kZWJ1ZyBcCisJICAgIGhvc3RhcF9yaWQgcHJpc20yX3BhcmFtIHByaXNtMl9zcmVjIHNwbGl0X2NvbWJpbmVkX2hleCIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9LworCWZvciBmIGluICR7QklOQVJJRVN9CisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRmICR7RH0ke3NiaW5kaXJ9LworCWRvbmUKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzXzAuNC43LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9ob3N0YXAvaG9zdGFwLXV0aWxzXzAuNC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTQ4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2hvc3RhcC9ob3N0YXAtdXRpbHNfMC40LjcuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGhvc3RhcC11dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL2xkZmxhZ3MucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiYWZlMDQxNTgxYjhmMDE2NjZlMzUzYmVjMjA5MTdjODUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzZmNTk4ZDhlMzU2YzE2MjBmYTAwOWVjYTBhNzAwYmYxMTA1ZTE2ODE3ZWVmZDc3ZDg5MTk5NDI2MTAwOTM1NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9HUEx2Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9HUEx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU4MTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL0dQTHYyLnBhdGNoCkBAIC0wLDAgKzEsMzQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDUxMTkwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvQ09QWUlORworQEAgLTAsMCArMSwzMzkgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCisreW91ciBwcm9ncmFtcywgdG9vLgorKworKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKKytoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCisrdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CisraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKKytpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisrCisrICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCisrYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CisrZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorKworKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAorK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCisrc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorK3JpZ2h0cy4KKysKKysgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKysoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisrCisrICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgorK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCisrc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCisrd2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KKyt0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorKworKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKKytwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisrcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisrCisrICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorK21vZGlmaWNhdGlvbiBmb2xsb3cuCisrCisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKysKKysgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKKythIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAorK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKKytyZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKKyttZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgorK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCisrZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKKytsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCisrdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisrCisrQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKKytjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCisrcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQorK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KKytXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKysKKysgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKytjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCisrbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKKythbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorKworK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAorK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisrCisrICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCisrb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisrCisrICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorKworKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKysgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisrICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisrICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKysKKysgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisrICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKysgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisrICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisrICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisrICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisrICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKysgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisrCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysKKysgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKKytvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKKyt2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisrSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKKyt0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKysKKysgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCisrZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCisrcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCisrYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZworK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorKworKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCisrb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bworK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCisrcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCisrdGhpcyBMaWNlbnNlLgorKworKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAorK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCisrY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKKytleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKKytMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CisrbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKKythbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KKyt0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCisrcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKysKKytJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKythbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisrYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKKytjaXJjdW1zdGFuY2VzLgorKworK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKKytwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKKytpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKKytpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKKytnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCisrdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKKytzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCisrdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CisraW1wb3NlIHRoYXQgY2hvaWNlLgorKworK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KKytjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKKytvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCisrbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCisrdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcworK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKKytvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKKytiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KKythZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKysKKytFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCisrc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKKytsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisrZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCisrdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24uCisrCisrICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCisrcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgorK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCisrb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorKworKwkJCSAgICBOTyBXQVJSQU5UWQorKworKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCisrRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCisrT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECisrT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCisrVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorKworKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKKytSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKKytUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKytZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKysKKysJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisrCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorKworK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorKworK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKKyt3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorKworKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKysgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisrICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKysKKytUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKKytwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CisrYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCisrbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKysKKytZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCisrbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorKworKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisrCisrICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKysgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisrCisrVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCisrcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKKytjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKKytsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2ZpbGVzL2tleW1hcC5zaCBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9rZXltYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmViYzYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9maWxlcy9rZXltYXAuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisjCisjIGxvYWQga2V5bWFwLCBpZiBleGlzdGluZworCitLRVJORUxfTUFKTUlOPWB1bmFtZSAtciB8IGN1dCAtZCAnLicgLWYgMSwyYAoraWYgWyAtZSAvZXRjL2tleW1hcC0kS0VSTkVMX01BSk1JTi5tYXAgXTsgdGhlbgorCWxvYWRrZXlzIC9ldGMva2V5bWFwLSRLRVJORUxfTUFKTUlOLm1hcAorZmkKKworaWYgKCBscyAiL2V0YyIgfCBncmVwIC1xICJrZXltYXAtZXh0ZW5zaW9uLSR7S0VSTkVMX01BSk1JTn0iICkKK3RoZW4KKwlmb3IgZXh0ZW5zaW9uIGluIGBscyAtMSAvZXRjL2tleW1hcC1leHRlbnNpb24tJEtFUk5FTF9NQUpNSU4qYCAKKwlkbwkKKwkJbG9hZGtleXMgIiRleHRlbnNpb24iCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9rZXltYXBzXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1ic3Ava2V5bWFwcy9rZXltYXBzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzkzYTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9rZXltYXBzL2tleW1hcHNfMS4wLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiS2V5Ym9hcmQgbWFwcyIKK0RFU0NSSVBUSU9OID0gIktleW1hcHMgYW5kIGluaXRzY3JpcHQgdG8gc2V0IHRoZSBrZXltYXAgb24gYm9vdHVwLiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUkRFUEVORFNfJHtQTn0gPSAia2JkIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorUFIgPSAicjMxIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworU1JDX1VSSSA9ICJmaWxlOi8va2V5bWFwLnNoIFwKKwkgICBmaWxlOi8vR1BMdjIucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJrZXltYXAuc2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCAwMSBTIC4iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgIyBPbmx5IGluc3RhbGwgdGhlIHNjcmlwdCBpZiAnc3lzdmluaXQnIGlzIGluIERJU1RST19GRUFUVVJFUworICAgICMgVEhlIHVsaXRpdHkgdGhpcyBzY3JpcHQgcHJvdmlkZXMgY291bGQgYmUgYWNoaWV2ZWQgYnkgc3lzdGVtZC12Y29uc29sZS1zZXR1cC5zZXJ2aWNlCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9rZXltYXAuc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGZpCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCBzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIGtleW1hcC5zZXJ2aWNlCisJZmkKK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2ZpbGVzL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc0MjRjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2xpYmFjcGk6IFJlbW92ZSBRQSB3YXJuaW5nOiBObyBHTlVfSEFTSCBpbiB0aGUgZWxmIGJpbmFyeQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXQorICBVc2VmdWwgd2l0aGluIGJpdGJha2UgZW52aXJvbm1lbnQgb25seS4KKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0KKyBNYWtlZmlsZSAgfCAgICAzICsrLQorIGNvbmZpZy5tayB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0xOSw2ICsxOSw3IEBAIG9wdGlvbnM6CisgCUBlY2hvICJDRkxBR1MgICA9ICR7Q0ZMQUdTfSIKKyAJQGVjaG8gIkNDICAgICAgID0gJHtDQ30iCisgCUBlY2hvICJTT0ZMQUdTICA9ICR7U09GTEFHU30iCisrCUBlY2hvICJMREZMQUdTICA9ICR7TERGTEFHU30iCisgCUBlY2hvICJMRCAgICAgICA9ICR7TER9IgorIAorIC5jLm86CitAQCAtMzQsNyArMzUsNyBAQCBsaWJhY3BpLmE6ICR7T0JKfQorIAorIGxpYmFjcGkuc286ICR7T0JKfQorIAlAZWNobyBMRCAkQAorLQlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisrCUAke0NDfSAke1NPRkxBR1N9ICR7TERGTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorIAorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5taworKysrIGxpYmFjcGktMC4yL2NvbmZpZy5taworQEAgLTEwLDYgKzEwLDcgQEAgTUFOUFJFRklYID0gJHtQUkVGSVh9L3NoYXJlL21hbgorIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKyBBUkZMQUdTID0gY3IKKytMREZMQUdTID0KKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9saWJhY3BpX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZWQzNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworRml4IGxpYmFjcGkgZm9yIHgzMgorICAgIAorICAgIGxpYmFjcGkgZG9lc24ndCB1c2UgYmFzZV9saWJkaXIgZm9yIGluc3RhbGwuICBUaGlzIHBhdGNoIGFkZHMKKyAgICBiYXNlX2xpYmRpciBzdXBwb3J0IHNvIHRoYXQgeDMyIGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkIHByb3Blcmx5LgorCitQYXRjaCBSZWNlaXZlZCBmcm9tOiAgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNQorCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC04LDYgKzgsMTAgQEAgU1JDX3Rlc3QgPSB0ZXN0LWxpYmFjcGkuYyBsaWJhY3BpLmMgbGlzdAorIE9CSiA9ICR7U1JDOi5jPS5vfQorIE9CSl90ZXN0ID0gJHtTUkNfdGVzdDouYz0ub30KKyAKKytpZm5kZWYgYmFzZV9saWJkaXIKKytiYXNlX2xpYmRpcj0vbGliCisrZW5kaWYKKysKKyBhbGw6IG9wdGlvbnMgbGliYWNwaS5hIGxpYmFjcGkuc28gdGVzdC1saWJhY3BpCisgCisgb3B0aW9uczoKK0BAIC00MiwxMyArNDYsMTMgQEAgaW5zdGFsbDogYWxsCisgCUBta2RpciAtcCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNwIC1mIGxpYmFjcGkuaCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKKyAJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUvbGliYWNwaS5oCistCUBlY2hvIGluc3RhbGxpbmcgbGlicmFyeSB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfS9saWIKKy0JQGNwIC1mIGxpYmFjcGkuYSAke0RFU1RESVJ9JHtQUkVGSVh9L2xpYgorLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuYQorLQlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLworLQlAY2htb2QgNjQ0ICR7REVTVERJUn0ke1BSRUZJWH0vbGliLyR7U09OQU1FfQorLQlAbG4gLXMgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0vbGliL2xpYmFjcGkuc28KKysJQGVjaG8gaW5zdGFsbGluZyBsaWJyYXJ5IHRvICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfQorKwlAbWtkaXIgLXAgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjcCAtZiBsaWJhY3BpLmEgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9CisrCUBjaG1vZCA2NDQgJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuYQorKwlAY3AgLWYgJHtTT05BTUV9ICR7REVTVERJUn0ke1BSRUZJWH0ke2Jhc2VfbGliZGlyfS8KKysJQGNobW9kIDY0NCAke0RFU1RESVJ9JHtQUkVGSVh9JHtiYXNlX2xpYmRpcn0vJHtTT05BTUV9CisrCUBsbiAtcyAke1NPTkFNRX0gJHtERVNURElSfSR7UFJFRklYfSR7YmFzZV9saWJkaXJ9L2xpYmFjcGkuc28KKyAJQGVjaG8gaW5zdGFsbGluZyB0ZXN0LWxpYmFjcGkgdG8gJHtERVNURElSfSR7UFJFRklYfS9iaW4KKyAJQG1rZGlyIC1wICR7REVTVERJUn0ke1BSRUZJWH0vYmluCisgCUBjcCAtZiB0ZXN0LWxpYmFjcGkgJHtERVNURElSfSR7UFJFRklYfS9iaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy9tYWtlZmlsZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbWFrZWZpbGUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNGVmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvbWFrZWZpbGUtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBNYWtlZmlsZSAgfCAgICA2ICsrKy0tLQorIGNvbmZpZy5tayB8ICAgIDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsaWJhY3BpLTAuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFjcGktMC4yLm9yaWcvTWFrZWZpbGUJMjAwNy0wNy0yOSAxNDowOTozNC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJhY3BpLTAuMi9NYWtlZmlsZQkyMDA4LTA5LTI2IDEwOjM0OjUzLjAwMDAwMDAwMCArMDIwMAorQEAgLTI1LDE2ICsyNSwxNiBAQCAke09CSn06IGNvbmZpZy5tayBsaWJhY3BpLmgKKyAKKyBsaWJhY3BpLmE6ICR7T0JKfQorIAlAZWNobyBBUiAkQAorLQlAJHtBUn0gJEAgJHtPQkp9CisrCSR7QVJ9ICR7QVJGTEFHU30gJEAgJHtPQkp9CisgCUAke1JBTkxJQn0gJEAKKyAKKyBsaWJhY3BpLnNvOiAke09CSn0KKyAJQGVjaG8gTEQgJEAKKy0JQCR7TER9ICR7U09GTEFHU30gLW8gJEAuJHtTT1ZFUlNJT059ICR7T0JKfQorKwlAJHtDQ30gJHtTT0ZMQUdTfSAtbyAkQC4ke1NPVkVSU0lPTn0gJHtPQkp9CisgCisgdGVzdC1saWJhY3BpOiAke09CSl90ZXN0fQorIAlAZWNobyBMRCAkQAorLQlAJHtMRH0gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorKwlAJHtDQ30gLW8gJEAgJHtPQkpfdGVzdH0gJHtMREZMQUdTfQorIAlAc3RyaXAgJEAKKyAKKyBpbnN0YWxsOiBhbGwKK0luZGV4OiBsaWJhY3BpLTAuMi9jb25maWcubWsKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL2NvbmZpZy5tawkyMDA3LTA3LTI5IDE0OjA5OjM0LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmFjcGktMC4yL2NvbmZpZy5tawkyMDA4LTA5LTI2IDEwOjM0OjMzLjAwMDAwMDAwMCArMDIwMAorQEAgLTksOSArOSwxMCBAQCBNQU5QUkVGSVggPSAke1BSRUZJWH0vc2hhcmUvbWFuCisgIyBmbGFncworIFNPRkxBR1MgPSAtc2hhcmVkIC1XbCwtc29uYW1lLCR7U09OQU1FfQorIENGTEFHUyArPSAtZlBJQyAtZyAtLXBlZGFudGljIC1XYWxsIC1XZXh0cmEKKytBUkZMQUdTID0gY3IKKyAKKyAjIENvbXBpbGVyIGFuZCBsaW5rZXIKKyBDQyA9IGNjCisgTEQgPSAke0NDfQorLUFSID0gYXIgY3IKKytBUiA9IGFyCisgUkFOTElCID0gcmFubGliCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xpYmFjcGkvZmlsZXMvdXNlX2NvcnJlY3Rfc3RyaXBfaW5fY3Jvc3NfZW52aXJvbm1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhNzVmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9maWxlcy91c2VfY29ycmVjdF9zdHJpcF9pbl9jcm9zc19lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXNlZCB0aGUgY3Jvc3Mgc3RyaXAgaW5zdGVhZCBvZiBob3N0IHN0cmlwIHRvIGF2b2lkIHRoaXMgYnVpbGQgZXJyb3I6CisKK3wgc3RyaXA6IFVuYWJsZSB0byByZWNvZ25pc2UgdGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQgZmlsZSBgdGVzdC1saWJhY3BpJworfCBtYWtlOiAqKiogW3Rlc3QtbGliYWNwaV0gRXJyb3IgMQorfCBFUlJPUjogb2VfcnVubWFrZSBmYWlsZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbGliYWNwaS0wLjIvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhY3BpLTAuMi5vcmlnL01ha2VmaWxlCisrKysgbGliYWNwaS0wLjIvTWFrZWZpbGUKK0BAIC0zOSw3ICszOSw3IEBAIGxpYmFjcGkuc286ICR7T0JKfQorIHRlc3QtbGliYWNwaTogJHtPQkpfdGVzdH0KKyAJQGVjaG8gTEQgJEAKKyAJQCR7Q0N9IC1vICRAICR7T0JKX3Rlc3R9ICR7TERGTEFHU30KKy0JQHN0cmlwICRACisrCUAke1NUUklQfSAkQAorIAorIGluc3RhbGw6IGFsbAorIAlAZWNobyBpbnN0YWxsaW5nIGhlYWRlciB0byAke0RFU1RESVJ9JHtQUkVGSVh9L2luY2x1ZGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9saWJhY3BpXzAuMi5iYiBiL21ldGEvcmVjaXBlcy1ic3AvbGliYWNwaS9saWJhY3BpXzAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjMwMmYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9saWJhY3BpL2xpYmFjcGlfMC4yLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiQUNQSSBkYXRhIGdhdGhlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR2VuZXJhbCBwdXJwb3NlIHNoYXJlZCBsaWJyYXJ5IGZvciBwcm9ncmFtcyBnYXRoZXJpbmcgQUNQSSBkYXRhIG9uIExpbnV4LiBcCitUaGVybWFsIHpvbmVzLCBiYXR0ZXJ5IGluZm9tcmF0aW9uLCBmYW4gaW5mb3JtYXRpb24gYW5kIEFDIHN0YXRlcyBhcmUgaW1wbGVtZW50ZWQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5uZ29sZGUuZGUvbGliYWNwaS5odG1sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mZWMxN2Y4MmYxNjYzMGFkZjJkZmI3ZDJhNDZmMjFjNSIKK1BSID0gInI2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubmdvbGRlLmRlL2Rvd25sb2FkL2xpYmFjcGktJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbWFrZWZpbGUtZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vbGliYWNwaV9maXhfZm9yX3gzMi5wYXRjaCBcCisJICAgZmlsZTovL3VzZV9jb3JyZWN0X3N0cmlwX2luX2Nyb3NzX2Vudmlyb25tZW50LnBhdGNoIFwKKwkgICBmaWxlOi8vbGRmbGFncy5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNWI1M2RkN2JlYWQ2NmRkYTM1ZmVjNTAyYjkxMDY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMzA4NmUzMWQ0MjhiOWMxMjU5NTRkNDhhYzQ5N2I3NTRiYmJjZTJlZjM0ZWEyOWVjZDkwM2U4MmUyNWJhZDI5IgorCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKK0NGTEFHUyArPSAiLWZQSUMiCitFWFRSQV9PRU1BS0UgKz0gJ1NUUklQPSJlY2hvIicKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtleGVjX3ByZWZpeH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hY2RlZmluZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9hY2RlZmluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODJjZjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2FjZGVmaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0FkZCBhIGRlc2NyaXB0aW9uIHRvIHRoZSBBQ19ERUZJTkUgZm9yIExPQ0FMRURJUiBzbyB0aGF0IGl0IGFwcGVhcnMgaW4gY29uZmlnLmgKK2FuZCBzaWxlbmNlcyBhIGZhdGFsIHdhcm5pbmcuCisKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBjMTA0NjBjLi5hYTIwMjYzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yNTgsNyArMjU4LDcgQEAgQUNfU1VCU1QoTElCUykKKyAKKyBBTV9HTlVfR0VUVEVYVAorIAorLUFDX0RFRklORV9VTlFVT1RFRChMT0NBTEVESVIsIiRwcmVmaXgvJERBVEFESVJOQU1FIikKKytBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIsW2xvY2FsZSBkaXJlY3RvcnldKQorIAorIEFDX09VVFBVVChbTWFrZWZpbGUgaW50bC9NYWtlZmlsZSBsaWIvTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlICBtNC9NYWtlZmlsZSBcCisgbWFuL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIHNyYy9NYWtlZmlsZSBkZWJpYW4vcnVsZXMgU3BlY2ZpbGUgc3lzdHlwZSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvYXV0b3Rvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQ1MTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLSBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNH5hdXRvdG9vbHMJMTk5OC0xMi0yNyAxNzowODo1OS4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2FjaW5jbHVkZS5tNAkyMDA0LTA1LTA5IDIyOjI2OjE5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTEsMTIgKzEsMTEgQEAKKyBkbmwgQUNfUkVQTEFDRV9HTlVfR0VUT1BUCistQUNfREVGVU4oQUNfUkVQTEFDRV9HTlVfR0VUT1BULAorLVtBQ19DSEVDS19GVU5DKGdldG9wdF9sb25nLCAsIFtMSUJPQkpTPSIkTElCT0JKUyBnZXRvcHQxLm8gZ2V0b3B0Lm8iXSkKKy1BQ19TVUJTVChMSUJPQkpTKWRubAorLV0pCisrQUNfREVGVU4oW0FDX1JFUExBQ0VfR05VX0dFVE9QVF0sCisrW0FDX0NIRUNLX0ZVTkMoZ2V0b3B0X2xvbmcsICwgW0FDX0xJQk9CSihbZ2V0b3B0MV0pCisrQUNfTElCT0JKKFtnZXRvcHRdKWRubF0pXSkKKyAKKyBkbmwKKyBkbmwgdGFrZW4gZnJvbSB0YXlsb3IgdXVjcAorLUFDX0RFRlVOKExSWlNaX0VSUk5PX0RFQ0wsWworK0FDX0RFRlVOKFtMUlpTWl9FUlJOT19ERUNMXSxbCisgQUNfTVNHX0NIRUNLSU5HKGZvciBlcnJubyBkZWNsYXJhdGlvbikKKyBBQ19DQUNIRV9WQUwobHJ6c3pfY3ZfZGVjbF9lcnJubywKKyBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxlcnJuby5oPl0sIFtpbnQgaSA9IGVycm5vOyBlcnJubyA9IDE7XSwKK0BAIC0yMyw3ICsyMSw3IEBACisgXSkKKyAKKyBkbmwgTFJaU1pfVFlQRV9TUEVFRF9UCistQUNfREVGVU4oTFJaU1pfVFlQRV9TUEVFRF9ULFsKKytBQ19ERUZVTihbTFJaU1pfVFlQRV9TUEVFRF9UXSxbCisgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKWRubAorIEFDX1JFUVVJUkUoW0xSWlNaX0hFQURFUlNfVEVSTV9JT10pZG5sCisgQUNfTVNHX0NIRUNLSU5HKGZvciBzcGVlZF90KQorQEAgLTYxLDcgKzU5LDcgQEAKKyBmaQorIF0pCisgCistQUNfREVGVU4obHJ6c3pfSEVBREVSX1NZU19TRUxFQ1QsCisrQUNfREVGVU4oW2xyenN6X0hFQURFUl9TWVNfU0VMRUNUXSwKKyBbQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3lzL3RpbWUuaCBhbmQgc3lzL3NlbGVjdC5oIG1heSBib3RoIGJlIGluY2x1ZGVkXSwKKyAgIGxyenN6X2N2X2hlYWRlcl9zeXNfc2VsZWN0LAorIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvZ2V0dGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTI0YTFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2dldHRleHQucGF0Y2gKQEAgLTAsMCArMSwyMTg4NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL0FCT1VULU5MUwkxOTk4LTA0LTI2IDA5OjIyOjMwLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvQUJPVVQtTkxTCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzIzNzUyOTUyIC0wNDAwCitAQCAtMSwxNCArMSwxNCBAQAorIE5vdGVzIG9uIHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgCistICAgRnJlZSBzb2Z0d2FyZSBpcyBnb2luZyBpbnRlcm5hdGlvbmFsISAgVGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdAorLWlzIGEgd2F5IHRvIGdldCBtYWludGFpbmVycyBvZiBmcmVlIHNvZnR3YXJlLCB0cmFuc2xhdG9ycywgYW5kIHVzZXJzIGFsbAorK0ZyZWUgc29mdHdhcmUgaXMgZ29pbmcgaW50ZXJuYXRpb25hbCEgIFRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMKKythIHdheSB0byBnZXQgbWFpbnRhaW5lcnMgb2YgZnJlZSBzb2Z0d2FyZSwgdHJhbnNsYXRvcnMsIGFuZCB1c2VycyBhbGwKKyB0b2dldGhlciwgc28gdGhhdCB3aWxsIGdyYWR1YWxseSBiZWNvbWUgYWJsZSB0byBzcGVhayBtYW55IGxhbmd1YWdlcy4KKyBBIGZldyBwYWNrYWdlcyBhbHJlYWR5IHByb3ZpZGUgdHJhbnNsYXRpb25zIGZvciB0aGVpciBtZXNzYWdlcy4KKyAKKyAgICBJZiB5b3UgZm91bmQgdGhpcyBgQUJPVVQtTkxTJyBmaWxlIGluc2lkZSBhIGRpc3RyaWJ1dGlvbiwgeW91IG1heQorIGFzc3VtZSB0aGF0IHRoZSBkaXN0cmlidXRlZCBwYWNrYWdlIGRvZXMgdXNlIEdOVSBgZ2V0dGV4dCcgaW50ZXJuYWxseSwKKy1pdHNlbGYgYXZhaWxhYmxlIGF0IHlvdXIgbmVhcmVzdCBHTlUgYXJjaGl2ZSBzaXRlLiAgQnV0IHlvdSBkbyAqbm90KgorK2l0c2VsZiBhdmFpbGFibGUgYXQgeW91ciBuZWFyZXN0IEdOVSBhcmNoaXZlIHNpdGUuICBCdXQgeW91IGRvIF9ub3RfCisgbmVlZCB0byBpbnN0YWxsIEdOVSBgZ2V0dGV4dCcgcHJpb3IgdG8gY29uZmlndXJpbmcsIGluc3RhbGxpbmcgb3IgdXNpbmcKKyB0aGlzIHBhY2thZ2Ugd2l0aCBtZXNzYWdlcyB0cmFuc2xhdGVkLgorIAorQEAgLTIyLDEwICsyMiwxMCBAQAorIGBnZXR0ZXh0JyB3aGljaCBpcyB1c2VkLiAgVGhlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUKKyBgaW50bC9WRVJTSU9OJyBmaWxlLCBpbiBpbnRlcm5hdGlvbmFsaXplZCBwYWNrYWdlcy4KKyAKKy1PbmUgYWR2aXNlIGluIGFkdmFuY2UKKy09PT09PT09PT09PT09PT09PT09PT0KKytRdWljayBjb25maWd1cmF0aW9uIGFkdmljZQorKz09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistICAgSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91CisrSWYgeW91IHdhbnQgdG8gZXhwbG9pdCB0aGUgZnVsbCBwb3dlciBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgeW91Cisgc2hvdWxkIGNvbmZpZ3VyZSBpdCB1c2luZworIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKK0BAIC0zNCw0MiArMzQsNDAgQEAKKyBwYWNrYWdlLCBkZXNwaXRlIHRoZSBleGlzdGVuY2Ugb2YgaW50ZXJuYXRpb25hbGl6aW5nIGNhcGFiaWxpdGllcyBpbiB0aGUKKyBvcGVyYXRpbmcgc3lzdGVtIHdoZXJlIHRoaXMgcGFja2FnZSBpcyBiZWluZyBpbnN0YWxsZWQuICBTbyBmYXIsIG9ubHkKKyB0aGUgYGdldHRleHQnIGltcGxlbWVudGF0aW9uIGluIHRoZSBHTlUgQyBsaWJyYXJ5IHZlcnNpb24gMiBwcm92aWRlcyBhcworLW1hbnkgZmVhdHVyZXMgKHN1Y2ggYXMgbG9jYWxlIGFsaWFzIG9yIG1lc3NhZ2UgaW5oZXJpdGFuY2UpIGFzIHRoZQorLWltcGxlbWVudGF0aW9uIGhlcmUuICBJdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBvZmZlciB0aGlzIGFkZGl0aW9uYWwKKy1mdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhIGBjYXRnZXRzJyBpbXBsZW1lbnRhdGlvbi4gIEZ1dHVyZSB2ZXJzaW9ucyBvZgorLUdOVSBgZ2V0dGV4dCcgd2lsbCB2ZXJ5IGxpa2VseSBjb252ZXkgZXZlbiBtb3JlIGZ1bmN0aW9uYWxpdHkuICBTbyBpdAorLW1pZ2h0IGJlIGEgZ29vZCBpZGVhIHRvIGNoYW5nZSB0byBHTlUgYGdldHRleHQnIGFzIHNvb24gYXMgcG9zc2libGUuCisrbWFueSBmZWF0dXJlcyAoc3VjaCBhcyBsb2NhbGUgYWxpYXMsIG1lc3NhZ2UgaW5oZXJpdGFuY2UsIGF1dG9tYXRpYworK2NoYXJzZXQgY29udmVyc2lvbiBvciBwbHVyYWwgZm9ybSBoYW5kbGluZykgYXMgdGhlIGltcGxlbWVudGF0aW9uIGhlcmUuCisrSXQgaXMgYWxzbyBub3QgcG9zc2libGUgdG8gb2ZmZXIgdGhpcyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkgb24gdG9wCisrb2YgYSBgY2F0Z2V0cycgaW1wbGVtZW50YXRpb24uICBGdXR1cmUgdmVyc2lvbnMgb2YgR05VIGBnZXR0ZXh0JyB3aWxsCisrdmVyeSBsaWtlbHkgY29udmV5IGV2ZW4gbW9yZSBmdW5jdGlvbmFsaXR5LiAgU28gaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEKKyt0byBjaGFuZ2UgdG8gR05VIGBnZXR0ZXh0JyBhcyBzb29uIGFzIHBvc3NpYmxlLgorIAorLSAgIFNvIHlvdSBuZWVkIG5vdCBwcm92aWRlIHRoaXMgb3B0aW9uIGlmIHlvdSBhcmUgdXNpbmcgR05VIGxpYmMgMiBvcgorKyAgIFNvIHlvdSBuZWVkIF9ub3RfIHByb3ZpZGUgdGhpcyBvcHRpb24gaWYgeW91IGFyZSB1c2luZyBHTlUgbGliYyAyIG9yCisgeW91IGhhdmUgaW5zdGFsbGVkIGEgcmVjZW50IGNvcHkgb2YgdGhlIEdOVSBnZXR0ZXh0IHBhY2thZ2Ugd2l0aCB0aGUKKyBpbmNsdWRlZCBgbGliaW50bCcuCisgCisgSU5TVEFMTCBNYXR0ZXJzCisgPT09PT09PT09PT09PT09CisgCistICAgU29tZSBwYWNrYWdlcyBhcmUgImxvY2FsaXphYmxlIiB3aGVuIHByb3Blcmx5IGluc3RhbGxlZDsgdGhlCistcHJvZ3JhbXMgdGhleSBjb250YWluIGNhbiBiZSBtYWRlIHRvIHNwZWFrIHlvdXIgb3duIG5hdGl2ZSBsYW5ndWFnZS4KKy1Nb3N0IHN1Y2ggcGFja2FnZXMgdXNlIEdOVSBgZ2V0dGV4dCcuICBPdGhlciBwYWNrYWdlcyBoYXZlIHRoZWlyIG93bgorLXdheXMgdG8gaW50ZXJuYXRpb25hbGl6YXRpb24sIHByZWRhdGluZyBHTlUgYGdldHRleHQnLgorK1NvbWUgcGFja2FnZXMgYXJlICJsb2NhbGl6YWJsZSIgd2hlbiBwcm9wZXJseSBpbnN0YWxsZWQ7IHRoZSBwcm9ncmFtcworK3RoZXkgY29udGFpbiBjYW4gYmUgbWFkZSB0byBzcGVhayB5b3VyIG93biBuYXRpdmUgbGFuZ3VhZ2UuICBNb3N0IHN1Y2gKKytwYWNrYWdlcyB1c2UgR05VIGBnZXR0ZXh0Jy4gIE90aGVyIHBhY2thZ2VzIGhhdmUgdGhlaXIgb3duIHdheXMgdG8KKytpbnRlcm5hdGlvbmFsaXphdGlvbiwgcHJlZGF0aW5nIEdOVSBgZ2V0dGV4dCcuCisgCisgICAgQnkgZGVmYXVsdCwgdGhpcyBwYWNrYWdlIHdpbGwgYmUgaW5zdGFsbGVkIHRvIGFsbG93IHRyYW5zbGF0aW9uIG9mCistbWVzc2FnZXMuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZXRoZXIgdGhlIHN5c3RlbSBwcm92aWRlcworLXVzYWJsZSBgY2F0Z2V0cycgKGlmIHVzaW5nIHRoaXMgaXMgc2VsZWN0ZWQgYnkgdGhlIGluc3RhbGxlcikgb3IKKy1gZ2V0dGV4dCcgZnVuY3Rpb25zLiAgSWYgbmVpdGhlciBpcyBhdmFpbGFibGUsIHRoZSBHTlUgYGdldHRleHQnIG93bgorK21lc3NhZ2VzLiAgSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRoZSBzeXN0ZW0gYWxyZWFkeQorK3Byb3ZpZGVzIHRoZSBHTlUgYGdldHRleHQnIGZ1bmN0aW9ucy4gIElmIG5vdCwgdGhlIEdOVSBgZ2V0dGV4dCcgb3duCisgbGlicmFyeSB3aWxsIGJlIHVzZWQuICBUaGlzIGxpYnJhcnkgaXMgd2hvbGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhpcworIHBhY2thZ2UsIHVzdWFsbHkgaW4gdGhlIGBpbnRsLycgc3ViZGlyZWN0b3J5LCBzbyBwcmlvciBpbnN0YWxsYXRpb24gb2YKKy10aGUgR05VIGBnZXR0ZXh0JyBwYWNrYWdlIGlzICpub3QqIHJlcXVpcmVkLiAgSW5zdGFsbGVycyBtYXkgdXNlCisrdGhlIEdOVSBgZ2V0dGV4dCcgcGFja2FnZSBpcyBfbm90XyByZXF1aXJlZC4gIEluc3RhbGxlcnMgbWF5IHVzZQorIHNwZWNpYWwgb3B0aW9ucyBhdCBjb25maWd1cmF0aW9uIHRpbWUgZm9yIGNoYW5naW5nIHRoZSBkZWZhdWx0CisgYmVoYXZpb3VyLiAgVGhlIGNvbW1hbmRzOgorIAorICAgICAgLi9jb25maWd1cmUgLS13aXRoLWluY2x1ZGVkLWdldHRleHQKKy0gICAgIC4vY29uZmlndXJlIC0td2l0aC1jYXRnZXRzCisgICAgICAuL2NvbmZpZ3VyZSAtLWRpc2FibGUtbmxzCisgCistd2lsbCByZXNwZWN0aXZlbHkgYnlwYXNzIGFueSBwcmUtZXhpc3RpbmcgYGNhdGdldHMnIG9yIGBnZXR0ZXh0JyB0byB1c2UKKy10aGUgaW50ZXJuYXRpb25hbGl6aW5nIHJvdXRpbmVzIHByb3ZpZGVkIHdpdGhpbiB0aGlzIHBhY2thZ2UsIGVuYWJsZQorLXRoZSB1c2Ugb2YgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgKGlmIGZvdW5kIG9uIHRoZSBsb2NhbGUgc3lzdGVtKSwgb3IKKy1lbHNlLCAqdG90YWxseSogZGlzYWJsZSB0cmFuc2xhdGlvbiBvZiBtZXNzYWdlcy4KKyt3aWxsIHJlc3BlY3RpdmVseSBieXBhc3MgYW55IHByZS1leGlzdGluZyBgZ2V0dGV4dCcgdG8gdXNlIHRoZQorK2ludGVybmF0aW9uYWxpemluZyByb3V0aW5lcyBwcm92aWRlZCB3aXRoaW4gdGhpcyBwYWNrYWdlLCBvciBlbHNlLAorK190b3RhbGx5XyBkaXNhYmxlIHRyYW5zbGF0aW9uIG9mIG1lc3NhZ2VzLgorIAorICAgIFdoZW4geW91IGFscmVhZHkgaGF2ZSBHTlUgYGdldHRleHQnIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSBhbmQgcnVuCisgY29uZmlndXJlIHdpdGhvdXQgYW4gb3B0aW9uIGZvciB5b3VyIG5ldyBwYWNrYWdlLCBgY29uZmlndXJlJyB3aWxsCitAQCAtODMsMTggKzgxLDEwIEBACisgCisgdG8gcHJldmVudCBhdXRvLWRldGVjdGlvbi4KKyAKKy0gICBCeSBkZWZhdWx0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgdGVzdCBmb3IgdGhlIGBjYXRnZXRzJworLWZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgdGhleSB3aWxsIG5vdCBiZSB1c2VkLiAgVGhlIHJlYXNvbnMgYXJlIGFscmVhZHkKKy1naXZlbiBhYm92ZTogdGhlIGVtdWxhdGlvbiBvbiB0b3Agb2YgYGNhdGdldHMnIGNhbm5vdCBwcm92aWRlIGFsbCB0aGUKKy1leHRlbnNpb25zIHByb3ZpZGVkIGJ5IHRoZSBHTlUgYGdldHRleHQnIGxpYnJhcnkuICBJZiB5b3UgbmV2ZXJ0aGVsZXNzCistd2FudCB0byB1c2UgdGhlIGBjYXRnZXRzJyBmdW5jdGlvbnMgdXNlCistCistICAgICAuL2NvbmZpZ3VyZSAtLXdpdGgtY2F0Z2V0cworLQorLXRvIGVuYWJsZSB0aGUgdGVzdCBmb3IgYGNhdGdldHMnICh0aGlzIGNhdXNlcyBubyBoYXJtIGlmIGBjYXRnZXRzJyBpcworLW5vdCBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0pLiAgSWYgeW91IHJlYWxseSBzZWxlY3QgdGhpcyBvcHRpb24gd2UKKy13b3VsZCBsaWtlIHRvIGhlYXIgYWJvdXQgdGhlIHJlYXNvbnMgYmVjYXVzZSB3ZSBjYW5ub3QgdGhpbmsgb2YgYW55CistZ29vZCBvbmUgb3Vyc2VsZi4KKysgICBUaGUgY29uZmlndXJhdGlvbiBwcm9jZXNzIHdpbGwgbm90IHRlc3QgZm9yIHRoZSBgY2F0Z2V0cycgZnVuY3Rpb24KKythbmQgdGhlcmVmb3JlIGl0IHdpbGwgbm90IGJlIHVzZWQuICBUaGUgcmVhc29uIGlzIHRoYXQgZXZlbiBhbgorK2VtdWxhdGlvbiBvZiBgZ2V0dGV4dCcgb24gdG9wIG9mIGBjYXRnZXRzJyBjb3VsZCBub3QgcHJvdmlkZSBhbGwgdGhlCisrZXh0ZW5zaW9ucyBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LgorIAorICAgIEludGVybmF0aW9uYWxpemVkIHBhY2thZ2VzIGhhdmUgdXN1YWxseSBtYW55IGBwby9MTC5wbycgZmlsZXMsIHdoZXJlCisgTEwgZ2l2ZXMgYW4gSVNPIDYzOSB0d28tbGV0dGVyIGNvZGUgaWRlbnRpZnlpbmcgdGhlIGxhbmd1YWdlLiAgVW5sZXNzCitAQCAtMTA4LDU3ICs5OCw3MyBAQAorIFVzaW5nIFRoaXMgUGFja2FnZQorID09PT09PT09PT09PT09PT09PQorIAorLSAgIEFzIGEgdXNlciwgaWYgeW91ciBsYW5ndWFnZSBoYXMgYmVlbiBpbnN0YWxsZWQgZm9yIHRoaXMgcGFja2FnZSwgeW91CisrQXMgYSB1c2VyLCBpZiB5b3VyIGxhbmd1YWdlIGhhcyBiZWVuIGluc3RhbGxlZCBmb3IgdGhpcyBwYWNrYWdlLCB5b3UKKyBvbmx5IGhhdmUgdG8gc2V0IHRoZSBgTEFORycgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGFwcHJvcHJpYXRlCistSVNPIDYzOSBgTEwnIHR3by1sZXR0ZXIgY29kZSBwcmlvciB0byB1c2luZyB0aGUgcHJvZ3JhbXMgaW4gdGhlCistcGFja2FnZS4gIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIHRoYXQgeW91IHNwZWFrIEdlcm1hbi4gIEF0IHRoZQorLXNoZWxsIHByb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlJyAoaW4gYGNzaCcpLAorLWBleHBvcnQgTEFORzsgTEFORz1kZScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZScgKGluIGBiYXNoJykuICBUaGlzCistY2FuIGJlIGRvbmUgZnJvbSB5b3VyIGAubG9naW4nIG9yIGAucHJvZmlsZScgZmlsZSwgb25jZSBhbmQgZm9yIGFsbC4KKytgTExfQ0MnIGNvbWJpbmF0aW9uLiAgSGVyZSBgTEwnIGlzIGFuIElTTyA2MzkgdHdvLWxldHRlciBsYW5ndWFnZSBjb2RlLAorK2FuZCBgQ0MnIGlzIGFuIElTTyAzMTY2IHR3by1sZXR0ZXIgY291bnRyeSBjb2RlLiAgRm9yIGV4YW1wbGUsIGxldCdzCisrc3VwcG9zZSB0aGF0IHlvdSBzcGVhayBHZXJtYW4gYW5kIGxpdmUgaW4gR2VybWFueS4gIEF0IHRoZSBzaGVsbAorK3Byb21wdCwgbWVyZWx5IGV4ZWN1dGUgYHNldGVudiBMQU5HIGRlX0RFJyAoaW4gYGNzaCcpLAorK2BleHBvcnQgTEFORzsgTEFORz1kZV9ERScgKGluIGBzaCcpIG9yIGBleHBvcnQgTEFORz1kZV9ERScgKGluIGBiYXNoJykuCisrVGhpcyBjYW4gYmUgZG9uZSBmcm9tIHlvdXIgYC5sb2dpbicgb3IgYC5wcm9maWxlJyBmaWxlLCBvbmNlIGFuZCBmb3IKKythbGwuCisgCistICAgQW4gb3BlcmF0aW5nIHN5c3RlbSBtaWdodCBhbHJlYWR5IG9mZmVyIG1lc3NhZ2UgbG9jYWxpemF0aW9uIGZvcgorLW1hbnkgb2YgaXRzIHByb2dyYW1zLCB3aGlsZSBvdGhlciBwcm9ncmFtcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGxvY2FsbHkKKy13aXRoIHRoZSBmdWxsIGNhcGFiaWxpdGllcyBvZiBHTlUgYGdldHRleHQnLiAgSnVzdCB1c2luZyBgZ2V0dGV4dCcKKy1leHRlbmRlZCBzeW50YXggZm9yIGBMQU5HJyB3b3VsZCBicmVhayBwcm9wZXIgbG9jYWxpemF0aW9uIG9mIGFscmVhZHkKKy1hdmFpbGFibGUgb3BlcmF0aW5nIHN5c3RlbSBwcm9ncmFtcy4gIEluIHRoaXMgY2FzZSwgdXNlcnMgc2hvdWxkIHNldAorLWJvdGggYExBTkdVQUdFJyBhbmQgYExBTkcnIHZhcmlhYmxlcyBpbiB0aGVpciBlbnZpcm9ubWVudCwgYXMgcHJvZ3JhbXMKKy11c2luZyBHTlUgYGdldHRleHQnIGdpdmUgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnLiAgRm9yIGV4YW1wbGUsIHNvbWUKKy1Td2VkaXNoIHVzZXJzIHdvdWxkIHJhdGhlciByZWFkIHRyYW5zbGF0aW9ucyBpbiBHZXJtYW4gdGhhbiBFbmdsaXNoIGZvcgorLXdoZW4gU3dlZGlzaCBpcyBub3QgYXZhaWxhYmxlLiAgVGhpcyBpcyBlYXNpbHkgYWNjb21wbGlzaGVkIGJ5IHNldHRpbmcKKy1gTEFOR1VBR0UnIHRvIGBzdjpkZScgd2hpbGUgbGVhdmluZyBgTEFORycgdG8gYHN2Jy4KKysgICBZb3UgbWlnaHQgdGhpbmsgdGhhdCB0aGUgY291bnRyeSBjb2RlIHNwZWNpZmljYXRpb24gaXMgcmVkdW5kYW50LgorK0J1dCBpbiBmYWN0LCBzb21lIGxhbmd1YWdlcyBoYXZlIGRpYWxlY3RzIGluIGRpZmZlcmVudCBjb3VudHJpZXMuICBGb3IKKytleGFtcGxlLCBgZGVfQVQnIGlzIHVzZWQgZm9yIEF1c3RyaWEsIGFuZCBgcHRfQlInIGZvciBCcmF6aWwuICBUaGUKKytjb3VudHJ5IGNvZGUgc2VydmVzIHRvIGRpc3Rpbmd1aXNoIHRoZSBkaWFsZWN0cy4KKysKKysgICBUaGUgbG9jYWxlIG5hbWluZyBjb252ZW50aW9uIG9mIGBMTF9DQycsIHdpdGggYExMJyBkZW5vdGluZyB0aGUKKytsYW5ndWFnZSBhbmQgYENDJyBkZW5vdGluZyB0aGUgY291bnRyeSwgaXMgdGhlIG9uZSB1c2Ugb24gc3lzdGVtcyBiYXNlZAorK29uIEdOVSBsaWJjLiAgT24gb3RoZXIgc3lzdGVtcywgc29tZSB2YXJpYXRpb25zIG9mIHRoaXMgc2NoZW1lIGFyZQorK3VzZWQsIHN1Y2ggYXMgYExMJyBvciBgTExfQ0MuRU5DT0RJTkcnLiAgWW91IGNhbiBnZXQgdGhlIGxpc3Qgb2YKKytsb2NhbGVzIHN1cHBvcnRlZCBieSB5b3VyIHN5c3RlbSBmb3IgeW91ciBjb3VudHJ5IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQKKytgbG9jYWxlIC1hIHwgZ3JlcCAnXkxMJycuCisrCisrICAgTm90IGFsbCBwcm9ncmFtcyBoYXZlIHRyYW5zbGF0aW9ucyBmb3IgYWxsIGxhbmd1YWdlcy4gIEJ5IGRlZmF1bHQsIGFuCisrRW5nbGlzaCBtZXNzYWdlIGlzIHNob3duIGluIHBsYWNlIG9mIGEgbm9uZXhpc3RlbnQgdHJhbnNsYXRpb24uICBJZiB5b3UKKyt1bmRlcnN0YW5kIG90aGVyIGxhbmd1YWdlcywgeW91IGNhbiBzZXQgdXAgYSBwcmlvcml0eSBsaXN0IG9mIGxhbmd1YWdlcy4KKytUaGlzIGlzIGRvbmUgdGhyb3VnaCBhIGRpZmZlcmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgY2FsbGVkCisrYExBTkdVQUdFJy4gIEdOVSBgZ2V0dGV4dCcgZ2l2ZXMgcHJlZmVyZW5jZSB0byBgTEFOR1VBR0UnIG92ZXIgYExBTkcnCisrZm9yIHRoZSBwdXJwb3NlIG9mIG1lc3NhZ2UgaGFuZGxpbmcsIGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBoYXZlIGBMQU5HJworK3NldCB0byB0aGUgcHJpbWFyeSBsYW5ndWFnZTsgdGhpcyBpcyByZXF1aXJlZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUKKytzeXN0ZW0gbGlicmFyaWVzLiAgRm9yIGV4YW1wbGUsIHNvbWUgU3dlZGlzaCB1c2VycyB3aG8gd291bGQgcmF0aGVyCisrcmVhZCB0cmFuc2xhdGlvbnMgaW4gR2VybWFuIHRoYW4gRW5nbGlzaCBmb3Igd2hlbiBTd2VkaXNoIGlzIG5vdAorK2F2YWlsYWJsZSwgc2V0IGBMQU5HVUFHRScgdG8gYHN2OmRlJyB3aGlsZSBsZWF2aW5nIGBMQU5HJyB0byBgc3ZfU0UnLgorKworKyAgIFNwZWNpYWwgYWR2aWNlIGZvciBOb3J3ZWdpYW4gdXNlcnM6IFRoZSBsYW5ndWFnZSBjb2RlIGZvciBOb3J3ZWdpYW4KKytib2ttYSpsIGNoYW5nZWQgZnJvbSBgbm8nIHRvIGBuYicgcmVjZW50bHkgKGluIDIwMDMpLiAgRHVyaW5nIHRoZQorK3RyYW5zaXRpb24gcGVyaW9kLCB3aGlsZSBzb21lIG1lc3NhZ2UgY2F0YWxvZ3MgZm9yIHRoaXMgbGFuZ3VhZ2UgYXJlCisraW5zdGFsbGVkIHVuZGVyIGBuYicgYW5kIHNvbWUgb2xkZXIgb25lcyB1bmRlciBgbm8nLCBpdCdzIHJlY29tbWVuZGVkCisrZm9yIE5vcndlZ2lhbiB1c2VycyB0byBzZXQgYExBTkdVQUdFJyB0byBgbmI6bm8nIHNvIHRoYXQgYm90aCBuZXdlciBhbmQKKytvbGRlciB0cmFuc2xhdGlvbnMgYXJlIHVzZWQuCisrCisrICAgSW4gdGhlIGBMQU5HVUFHRScgZW52aXJvbm1lbnQgdmFyaWFibGUsIGJ1dCBub3QgaW4gdGhlIGBMQU5HJworK2Vudmlyb25tZW50IHZhcmlhYmxlLCBgTExfQ0MnIGNvbWJpbmF0aW9ucyBjYW4gYmUgYWJicmV2aWF0ZWQgYXMgYExMJworK3RvIGRlbm90ZSB0aGUgbGFuZ3VhZ2UncyBtYWluIGRpYWxlY3QuICBGb3IgZXhhbXBsZSwgYGRlJyBpcyBlcXVpdmFsZW50CisrdG8gYGRlX0RFJyAoR2VybWFuIGFzIHNwb2tlbiBpbiBHZXJtYW55KSwgYW5kIGBwdCcgdG8gYHB0X1BUJworKyhQb3J0dWd1ZXNlIGFzIHNwb2tlbiBpbiBQb3J0dWdhbCkgaW4gdGhpcyBjb250ZXh0LgorIAorIFRyYW5zbGF0aW5nIFRlYW1zCisgPT09PT09PT09PT09PT09PT0KKyAKKy0gICBGb3IgdGhlIEZyZWUgVHJhbnNsYXRpb24gUHJvamVjdCB0byBiZSBhIHN1Y2Nlc3MsIHdlIG5lZWQgaW50ZXJlc3RlZAorK0ZvciB0aGUgRnJlZSBUcmFuc2xhdGlvbiBQcm9qZWN0IHRvIGJlIGEgc3VjY2Vzcywgd2UgbmVlZCBpbnRlcmVzdGVkCisgcGVvcGxlIHdobyBsaWtlIHRoZWlyIG93biBsYW5ndWFnZSBhbmQgd3JpdGUgaXQgd2VsbCwgYW5kIHdobyBhcmUgYWxzbworIGFibGUgdG8gc3luZXJnaXplIHdpdGggb3RoZXIgdHJhbnNsYXRvcnMgc3BlYWtpbmcgdGhlIHNhbWUgbGFuZ3VhZ2UuCistRWFjaCB0cmFuc2xhdGlvbiB0ZWFtIGhhcyBpdHMgb3duIG1haWxpbmcgbGlzdCwgY291cnRlc3kgb2YgTGludXgKKy1JbnRlcm5hdGlvbmFsLiAgWW91IG1heSByZWFjaCB5b3VyIHRyYW5zbGF0aW9uIHRlYW0gYXQgdGhlIGFkZHJlc3MKKy1gTExAbGkub3JnJywgcmVwbGFjaW5nIExMIGJ5IHRoZSB0d28tbGV0dGVyIElTTyA2MzkgY29kZSBmb3IgeW91cgorLWxhbmd1YWdlLiAgTGFuZ3VhZ2UgY29kZXMgYXJlICpub3QqIHRoZSBzYW1lIGFzIHRoZSBjb3VudHJ5IGNvZGVzIGdpdmVuCistaW4gSVNPIDMxNjYuICBUaGUgZm9sbG93aW5nIHRyYW5zbGF0aW9uIHRlYW1zIGV4aXN0LCBhcyBvZiBBdWd1c3QgMTk5NzoKKy0KKy0gICAgIENoaW5lc2UgYHpoJywgQ3plY2ggYGNzJywgRGFuaXNoIGBkYScsIER1dGNoIGBubCcsIEVuZ2xpc2ggYGVuJywKKy0gICAgIEVzcGVyYW50byBgZW8nLCBGaW5uaXNoIGBmaScsIEZyZW5jaCBgZnInLCBHZXJtYW4gYGRlJywgSHVuZ2FyaWFuCistICAgICBgaHUnLCBJcmlzaCBgZ2EnLCBJdGFsaWFuIGBpdCcsIEluZG9uZXNpYW4gYGlkJywgSmFwYW5lc2UgYGphJywKKy0gICAgIEtvcmVhbiBga28nLCBMYXRpbiBgbGEnLCBOb3J3ZWdpYW4gYG5vJywgUGVyc2lhbiBgZmEnLCBQb2xpc2gKKy0gICAgIGBwbCcsIFBvcnR1Z3Vlc2UgYHB0JywgUnVzc2lhbiBgcnUnLCBTbG92ZW5pYW4gYHNsJywgU3BhbmlzaCBgZXMnLAorLSAgICAgU3dlZGlzaCBgc3YnLCBhbmQgVHVya2lzaCBgdHInLgorLQorLUZvciBleGFtcGxlLCB5b3UgbWF5IHJlYWNoIHRoZSBDaGluZXNlIHRyYW5zbGF0aW9uIHRlYW0gYnkgd3JpdGluZyB0bworLWB6aEBsaS5vcmcnLgorK0VhY2ggdHJhbnNsYXRpb24gdGVhbSBoYXMgaXRzIG93biBtYWlsaW5nIGxpc3QuICBUaGUgdXAtdG8tZGF0ZSBsaXN0IG9mCisrdGVhbXMgY2FuIGJlIGZvdW5kIGF0IHRoZSBGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QncyBob21lcGFnZSwKKytgaHR0cDovL3d3dy5pcm8udW1vbnRyZWFsLmNhL2NvbnRyaWIvcG8vSFRNTC8nLCBpbiB0aGUgIk5hdGlvbmFsIHRlYW1zIgorK2FyZWEuCisgCistICAgSWYgeW91J2QgbGlrZSB0byB2b2x1bnRlZXIgdG8gKndvcmsqIGF0IHRyYW5zbGF0aW5nIG1lc3NhZ2VzLCB5b3UKKysgICBJZiB5b3UnZCBsaWtlIHRvIHZvbHVudGVlciB0byBfd29ya18gYXQgdHJhbnNsYXRpbmcgbWVzc2FnZXMsIHlvdQorIHNob3VsZCBiZWNvbWUgYSBtZW1iZXIgb2YgdGhlIHRyYW5zbGF0aW5nIHRlYW0gZm9yIHlvdXIgb3duIGxhbmd1YWdlLgorLVRoZSBzdWJzY3JpYmluZyBhZGRyZXNzIGlzICpub3QqIHRoZSBzYW1lIGFzIHRoZSBsaXN0IGl0c2VsZiwgaXQgaGFzCisrVGhlIHN1YnNjcmliaW5nIGFkZHJlc3MgaXMgX25vdF8gdGhlIHNhbWUgYXMgdGhlIGxpc3QgaXRzZWxmLCBpdCBoYXMKKyBgLXJlcXVlc3QnIGFwcGVuZGVkLiAgRm9yIGV4YW1wbGUsIHNwZWFrZXJzIG9mIFN3ZWRpc2ggY2FuIHNlbmQgYQorIG1lc3NhZ2UgdG8gYHN2LXJlcXVlc3RAbGkub3JnJywgaGF2aW5nIHRoaXMgbWVzc2FnZSBib2R5OgorIAorICAgICAgc3Vic2NyaWJlCisgCisgICAgS2VlcCBpbiBtaW5kIHRoYXQgdGVhbSBtZW1iZXJzIGFyZSBleHBlY3RlZCB0byBwYXJ0aWNpcGF0ZQorLSphY3RpdmVseSogaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorK19hY3RpdmVseV8gaW4gdHJhbnNsYXRpb25zLCBvciBhdCBzb2x2aW5nIHRyYW5zbGF0aW9uYWwgZGlmZmljdWx0aWVzLAorIHJhdGhlciB0aGFuIG1lcmVseSBsdXJraW5nIGFyb3VuZC4gIElmIHlvdXIgdGVhbSBkb2VzIG5vdCBleGlzdCB5ZXQgYW5kCisgeW91IHdhbnQgdG8gc3RhcnQgb25lLCBvciBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB3aGF0IHRvIGRvIG9yIGhvdyB0bworIGdldCBzdGFydGVkLCBwbGVhc2Ugd3JpdGUgdG8gYHRyYW5zbGF0aW9uQGlyby51bW9udHJlYWwuY2EnIHRvIHJlYWNoIHRoZQorQEAgLTE3MSw0MyArMTc3LDU1OSBAQAorIEF2YWlsYWJsZSBQYWNrYWdlcworID09PT09PT09PT09PT09PT09PQorIAorLSAgIExhbmd1YWdlcyBhcmUgbm90IGVxdWFsbHkgc3VwcG9ydGVkIGluIGFsbCBwYWNrYWdlcy4gIFRoZSBmb2xsb3dpbmcKKy1tYXRyaXggc2hvd3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgaW50ZXJuYXRpb25hbGl6YXRpb24sIGFzIG9mIEF1Z3VzdAorLTE5OTcuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCistUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24uCisrTGFuZ3VhZ2VzIGFyZSBub3QgZXF1YWxseSBzdXBwb3J0ZWQgaW4gYWxsIHBhY2thZ2VzLiAgVGhlIGZvbGxvd2luZworK21hdHJpeCBzaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBpbnRlcm5hdGlvbmFsaXphdGlvbiwgYXMgb2YgSmFudWFyeQorKzIwMDQuICBUaGUgbWF0cml4IHNob3dzLCBpbiByZWdhcmQgb2YgZWFjaCBwYWNrYWdlLCBmb3Igd2hpY2ggbGFuZ3VhZ2VzCisrUE8gZmlsZXMgaGF2ZSBiZWVuIHN1Ym1pdHRlZCB0byB0cmFuc2xhdGlvbiBjb29yZGluYXRpb24sIHdpdGggYQorK3RyYW5zbGF0aW9uIHBlcmNlbnRhZ2Ugb2YgYXQgbGVhc3QgNTAlLgorIAorLSAgICAgUmVhZHkgUE8gZmlsZXMgICAgY3MgZGEgZGUgZW4gZXMgZmkgZnIgaXQgamEga28gbmwgbm8gcGwgcHQgc2wgc3YKKy0gICAgICAgICAgICAgICAgICAgICAuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKy0gICAgIGJhc2ggICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGJpc29uICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIHwgIDMKKy0gICAgIGNsaXNwICAgICAgICAgICB8ICAgICAgIFtdIFtdIFtdICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKy0gICAgIGNwaW8gICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgICAgIHwgIDUKKy0gICAgIGRpZmZ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGVuc2NyaXB0ICAgICAgICB8ICAgICAgIFtdICAgIFtdIFtdIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwgIDYKKy0gICAgIGZpbGV1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGZpbmR1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdIFtdICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDgKKy0gICAgIGZsZXggICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIHwgIDQKKy0gICAgIGdjYWwgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgICAgIFtdIHwgIDUKKy0gICAgIGdldHRleHQgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTEKKy0gICAgIGdyZXAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIFtdIHwgIDkKKy0gICAgIGhlbGxvICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIGlkLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDMKKy0gICAgIGluZGVudCAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgIHwgIDQKKy0gICAgIGxpYmMgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgIFtdIHwgIDcKKy0gICAgIG00ICAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIG1ha2UgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgIFtdICAgICAgICAgIHwgIDYKKy0gICAgIG11c2ljICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgIHwgIDIKKy0gICAgIHB0eCAgICAgICAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDgKKy0gICAgIHJlY29kZSAgICAgICAgICB8ICAgIFtdIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgIFtdIFtdIFtdIFtdIHwgIDkKKy0gICAgIHNoLXV0aWxzICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIFtdIFtdICAgIFtdIHwgIDcKKy0gICAgIHNoYXJ1dGlscyAgICAgICB8ICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwgIDUKKy0gICAgIHRhciAgICAgICAgICAgICB8ICAgICAgIFtdICAgICAgICAgIFtdIFtdICAgIFtdIFtdIFtdIFtdIFtdIFtdIFtdIHwgMTAKKy0gICAgIHRleGluZm8gICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKy0gICAgIHRleHR1dGlscyAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgIFtdIFtdIFtdIFtdICAgICAgIFtdIHwgIDkKKy0gICAgIHdkaWZmICAgICAgICAgICB8IFtdICAgIFtdICAgIFtdICAgIFtdICAgICAgICAgIFtdIFtdIFtdICAgICAgIFtdIHwgIDgKKy0gICAgICAgICAgICAgICAgICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKy0gICAgICAgMTYgbGFuZ3VhZ2VzICAgIGNzIGRhIGRlIGVuIGVzIGZpIGZyIGl0IGphIGtvIG5sIG5vIHBsIHB0IHNsIHN2CistICAgICAgIDI3IHBhY2thZ2VzICAgICAgMyAgMiAyNCAgMSAxNyAgMSAyNiAgMiAgMSAxMSAyMCAgOSAxOSAgNyAgNyAxNyAgMTY3CisrICAgICBSZWFkeSBQTyBmaWxlcyAgICAgICBhZiBhbSBhciBheiBiZSBiZyBicyBjYSBjcyBkYSBkZSBlbCBlbiBlbl9HQiBlbyBlcworKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgYTJwcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgYWVnaXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYW51YmlzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXAtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmFzaCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgYmF0Y2hlbG9yICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmludXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmlzb24gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY2xpc3AgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgW10gfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29yZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgY3BpbyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZGlmZnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZTJmc3Byb2dzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgICAgfAorKyAgICAgZXJyb3IgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZmV0Y2htYWlsICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZmluZHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZmxleCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2FzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2F3ayAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NhbCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2NjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1leGFtcGxlcyAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC1ydW50aW1lICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ2ltcC1wcmludCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ2xpdiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251YmlmZiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ251Y2FzaCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgKCkgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ251cGcgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ3BlLWFlcmlhbCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNhbGVuZGFyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNsb2NrICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWNvbnRhY3RzICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWVkaXQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLWxvZ2luICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLW93bmVyaW5mbyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXN1ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRhc2ttYW5hZ2VyICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZGF5ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3BlLXRvZG8gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3Byb2YgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3BzZHJpdmUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgKCkgICAgICAgICAgKCkgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3JlcCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gW10gICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgZ3JldGwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaGVsbG8gICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaWQtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjYgICAgICAgICAgIHwgICAgICAgICAgW10gICAgW10gW10gW10gW10gW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgaXNvXzMxNjZfMSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzQyMTcgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAganBpbG90ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAganRhZyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAga2JkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGF0cmluZSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbGliYyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgbGliZ3Bld2lkZ2V0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgbGlmZWxpbmVzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGlseXBvbmQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaF9sZXNzb25zIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbHlueCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgfAorKyAgICAgbWFpbHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFrZSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgKCkgfAorKyAgICAgbWluaWNvbSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbXlzZWNyZXRkaWFyeSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgbmFub18xXzAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gKCkgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgb3Bjb2RlcyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgcHR4ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgcHl0aG9uICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgcmVjb2RlICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgW10gW10gW10gICAgICAgICAgW10gW10gfAorKyAgICAgcnBtICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2Nyb2xsa2VlcGVyICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2VkICAgICAgICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgW10gW10gfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2hhcmVkLW1pbWUtaW5mbyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2hhcnV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgc2tlbmNpbCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2tldGNoICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gKCkgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgc3AgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfAorKyAgICAgdGFyICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgW10gICAgfAorKyAgICAgdGV4dHV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdGluICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICgpICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHV4cGFpbnQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gW10gICAgIFtdICAgICAgW10gfAorKyAgICAgdW5pY29kZS1oYW4tdHJhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdXRpbC1saW51eCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gW10gW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgdm9yYmlzLXRvb2xzICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgfAorKyAgICAgd2RpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgW10gW10gICAgICAgICAgICAgICAgW10gfAorKyAgICAgd2dldCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgW10gICAgW10gICAgW10gW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgW10gW10gICAgICAgICAgICAgW10gfAorKyAgICAgeGZyZWU4Nl94a2JfeG1sICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgeHBhZCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWYgYW0gYXIgYXogYmUgYmcgYnMgY2EgY3MgZGEgZGUgZWwgZW4gZW5fR0IgZW8gZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICAwICAwICAxICA5ICA0ICAxIDQwIDQxIDYwIDc4IDE3ICAxICAgNSAgIDEzIDY4CisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGV0IGV1IGZhIGZpIGZyIGdhIGdsIGhlIGhyIGh1IGlkIGlzIGl0IGphIGtvIGxnCisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICBhMnBzICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnQtcGhvbmUgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhbnViaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBhc3BlbGwgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXNoICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiZmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBiaW51dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBibHVlei1waW4gICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb25zb2xlLXRvb2xzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjb3JldXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICBbXSAgICB8CisrICAgICBkYXJrc3RhdCAgICAgICAgICAgfCAgICAgICAgICAgICAoKSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBkaWZmdXRpbHMgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlbnNjcmlwdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBlcnJvciAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBmaWxldXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBmaW5kdXRpbHMgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBmc2xpbnQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnYmlmZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2FsICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnZXR0ZXh0ICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LWV4YW1wbGVzICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICB8CisrICAgICBnZXR0ZXh0LXRvb2xzICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBnaW1wLXByaW50ICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbHVuYXJjbG9jayAgICAgICAgfCAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnViaWZmICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVjYXNoLWdsb3NzYXJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBnbnVwZyAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtYmVhbSAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2FsZW5kYXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29uZiAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtY29udGFjdHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtZ28gICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtbG9naW4gICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc2tldGNoYm9vayAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtc3UgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdGltZXNoZWV0ICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kYXkgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncGhvdG8yICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBncHJvZiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBncmFtYWRvaXIgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBncmVwICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBndGljayAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBoZWxsbyAgICAgICAgICAgICAgfCBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpbmRlbnQgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fMzE2NiAgICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8yICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8zICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBpc29fNjM5ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqcGlsb3QgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqd2hvaXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBrYmQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsZCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWJjICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaWJpY29udiAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICBbXSBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBsaWZlbGluZXMgICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBsaW5nb3RlYWNoX2xlc3NvbnMgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBtNCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICAgICBbXSAgICAgICB8CisrICAgICBtYWlsdXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSBbXSAgICAgICAgICAgICBbXSBbXSAgICB8CisrICAgICBtYW4tZGIgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAoKSAgICAgICB8CisrICAgICBtaW5pY29tICAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICB8CisrICAgICBuYW5vICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBuYW5vXzFfMCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBwYXJ0ZWQgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICBwdHggICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByYWRpdXMgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICByZWNvZGUgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSBbXSAgICBbXSBbXSAgICBbXSAgICAgICAgICB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBzY3JlZW0gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzY3JvbGxrZWVwZXIgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICBzaC11dGlscyAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSBbXSAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICB8CisrICAgICBzaGFyZWQtbWltZS1pbmZvICAgfCAgICAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCBbXSAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICBzaWxreSAgICAgICAgICAgICAgfCAgICAgICAgICAoKSBbXSAgICAgICAgICAgICAoKSAgICAgICAoKSAgICAgICAgICB8CisrICAgICBza2VuY2lsICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzb3VuZHRyYWNrZXIgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICB8CisrICAgICBzcCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSBbXSAgICBbXSBbXSAgICAgICB8CisrICAgICB0ZXhpbmZvICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICB8CisrICAgICB0ZXh0dXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSAgICAgICAgICBbXSBbXSAgICB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0cC1yb2JvdCAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0dXhwYWludCAgICAgICAgICAgfCAgICAgICAgICBbXSBbXSAgICAgICBbXSAgICBbXSBbXSBbXSBbXSBbXSBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1bmljb2RlLXRyYW5zbGEuLi4gfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB1dGlsLWxpbnV4ICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAoKSBbXSAgICAgICB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3YXN0ZXNlZGdlICAgICAgICAgfCAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB3ZGlmZiAgICAgICAgICAgICAgfCBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICBbXSAgICBbXSBbXSAgICAgICAgICBbXSAgICAgICB8CisrICAgICB4Y2hhdCAgICAgICAgICAgICAgfCBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB4ZnJlZTg2X3hrYl94bWwgICAgfCAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrICAgICAgICAgICAgICAgICAgICAgICAgICBldCBldSBmYSBmaSBmciBnYSBnbCBoZSBociBodSBpZCBpcyBpdCBqYSBrbyBsZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgMjIgIDIgIDEgMjYgMTA2IDI4IDI0ICA4IDEwIDQxIDMzICAxIDI2IDMzIDEyICAwCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICgpICAgICAoKSAgICAgW10gICBbXSBbXSB8CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgKCkgKCkgfAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgKCkgICAgICAgICAgW10gICAgfAorKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSBbXSB8CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICBbXSB8CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdICAgIHwKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgfAorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGVycm9yICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICgpICAgICAgW10gfAorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gW10gfAorKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgIFtdICAgIHwKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICgpICAgICAgW10gfAorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgICAgIHwKKysgICAgIGdudXBnICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICB8CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgIFtdIFtdIHwKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICBbXSAgICAgICBbXSBbXSB8CisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gW10gfAorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICBbXSAgICB8CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgIFtdIFtdIHwKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8ICAgIFtdICAgICAgIFtdICAgIFtdIFtdIFtdIFtdICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gW10gfAorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSBbXSAgICAgW10gW10gIFtdICAgICAgW10gfAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICgpICAgICgpICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdICgpIHwKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSAgICB8CisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgIFtdICAgICBbXSAgICAgW10gICAgICAgICB8CisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgW10gICAgICAgW10gICAgfAorKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgW10gfAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICBbXSAgIFtdIFtdIHwKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgIFtdICAgICAgW10gfAorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgIHwKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgW10gICAgfAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgIFtdICAgIFtdICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgIFtdIFtdICBbXSAgICAgICAgIHwKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgIFtdICAgICBbXSBbXSAgW10gICBbXSBbXSB8CisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgIFtdIHwKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gW10gICAgICAgICAgW10gfAorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICBbXSAgICAgICAgICBbXSBbXSB8CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgW10gfAorKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIHwKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgW10gICAgICAgICB8CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gIFtdICAgICAgICAgfAorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrICAgICB0YXIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICBbXSAgICBbXSAgICAgICBbXSAgICAgW10gICAgIFtdICAgW10gICAgfAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgIFtdICAgICAgICAgIFtdIFtdIHwKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICBbXSBbXSAgW10gICBbXSAgICB8CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICBbXSB8CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gW10gfAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgW10gICBbXSBbXSB8CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgW10gW10gfAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgIFtdIHwKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8ICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICBbXSB8CisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgW10gICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGx0IGx2IG1rIG1uIG1zIG10IG5iIG5sIG5uIG5vIG5zbyBwbCBwdCBwdF9CUiBybyBydQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIDIgIDAgIDMgMTIgIDAgMTAgNjkgIDYgIDcgIDEgIDQwIDI2ICAzNiAgIDc2IDYzCisrICAgICAKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgIGEycHMgICAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE2CisrICAgICBhZWdpcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgYW50LXBob25lICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGFudWJpcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBhcC11dGlscyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYXNwZWxsICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGJhc2ggICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBiYXRjaGVsb3IgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgYmZkICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYKKysgICAgIGJpbnV0aWxzICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8ICA4CisrICAgICBiaXNvbiAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgYmx1ZXotcGluICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIGNsaXNwICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAwCisrICAgICBjbGlzcCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgY29uc29sZS10b29scyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGNvcmV1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICBjcGlvICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNAorKyAgICAgZGFya3N0YXQgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAoKSAgICAoKSAgICAgIHwgMTIKKysgICAgIGRpZmZ1dGlscyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDIzCisrICAgICBlMmZzcHJvZ3MgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgZW5zY3JpcHQgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIKKysgICAgIGVycm9yICAgICAgICAgICAgICB8IFtdICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE1CisrICAgICBmZXRjaG1haWwgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMQorKyAgICAgZmlsZXV0aWxzICAgICAgICAgIHwgICAgW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICBbXSAgICAgIHwgMTcKKysgICAgIGZpbmR1dGlscyAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICBmbGV4ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgZnNsaW50ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIGdhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnYXdrICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgZ2JpZmYgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIGdjYWwgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0CisrICAgICBnY2MgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNAorKyAgICAgZ2V0dGV4dCAgICAgICAgICAgIHwgW10gW10gICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTYKKysgICAgIGdldHRleHQtZXhhbXBsZXMgICB8IFtdICAgIFtdIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDE0CisrICAgICBnZXR0ZXh0LXJ1bnRpbWUgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyMgorKyAgICAgZ2V0dGV4dC10b29scyAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIGdpbXAtcHJpbnQgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBnbGl2ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ2x1bmFyY2xvY2sgICAgICAgIHwgICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgIHwgMTMKKysgICAgIGdudWJpZmYgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICBnbnVjYXNoICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAgOQorKyAgICAgZ251Y2FzaC1nbG9zc2FyeSAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgIDgKKysgICAgIGdudXBnICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE3CisrICAgICBncGUtYWVyaWFsICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNworKyAgICAgZ3BlLWJlYW0gICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDgKKysgICAgIGdwZS1jYWxlbmRhciAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtY2xvY2sgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLWNvbmYgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1jb250YWN0cyAgICAgICB8IFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDExCisrICAgICBncGUtZWRpdCAgICAgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3BlLWdvICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdwZS1sb2dpbiAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtb3duZXJpbmZvICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxMworKyAgICAgZ3BlLXNrZXRjaGJvb2sgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDkKKysgICAgIGdwZS1zdSAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwCisrICAgICBncGUtdGFza21hbmFnZXIgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgZ3BlLXRpbWVzaGVldCAgICAgIHwgW10gICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTIKKysgICAgIGdwZS10b2RheSAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgW10gICAgICB8IDEzCisrICAgICBncGUtdG9kbyAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgIFtdICAgICAgfCAxMgorKyAgICAgZ3Bob3RvMiAgICAgICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTEKKysgICAgIGdwcm9mICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5CisrICAgICBncHNkcml2ZSAgICAgICAgICAgfCBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3JhbWFkb2lyICAgICAgICAgIHwgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGdyZXAgICAgICAgICAgICAgICB8ICAgIFtdIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDI2CisrICAgICBncmV0bCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgZ3RpY2sgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIGhlbGxvICAgICAgICAgICAgICB8IFtdICAgIFtdIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDM0CisrICAgICBpZC11dGlscyAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMgorKyAgICAgaW5kZW50ICAgICAgICAgICAgIHwgW10gICAgW10gW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjEKKysgICAgIGlzb18zMTY2ICAgICAgICAgICB8IFtdIFtdIFtdIFtdICAgICAgIFtdICAgIFtdICAgICBbXSAgICAgICAgICAgICAgICAgICB8IDI3CisrICAgICBpc29fMzE2Nl8xICAgICAgICAgfCBbXSBbXSAgICAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgorKyAgICAgaXNvXzMxNjZfMiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIGlzb18zMTY2XzMgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBpc29fNDIxNyAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgaXNvXzYzOSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEKKysgICAgIGpwaWxvdCAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICBbXSAgICAgICAgW10gICAgW10gICAgICB8ICA5CisrICAgICBqdGFnICAgICAgICAgICAgICAgfCBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgandob2lzICAgICAgICAgICAgIHwgICAgICAgICAgKCkgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgIHwgMTEKKysgICAgIGtiZCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBsYXRyaW5lICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMgorKyAgICAgbGQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIGxpYmMgICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDIwCisrICAgICBsaWJncGV3aWRnZXQgICAgICAgfCBbXSAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgfCAxMworKyAgICAgbGliaWNvbnYgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgW10gW10gICAgICAgIFtdICAgICBbXSAgICAgICAgICAgIHwgMjcKKysgICAgIGxpZmVsaW5lcyAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyCisrICAgICBsaWx5cG9uZCAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMworKyAgICAgbGluZ290ZWFjaCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIGxpbmdvdGVhY2hfbGVzc29ucyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCkgICAgICAgICAgICB8ICAwCisrICAgICBseW54ICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNAorKyAgICAgbTQgICAgICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIG1haWx1dGlscyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1CisrICAgICBtYWtlICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAxNgorKyAgICAgbWFuLWRiICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUKKysgICAgIG1pbmljb20gICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDExCisrICAgICBteXNlY3JldGRpYXJ5ICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMAorKyAgICAgbmFubyAgICAgICAgICAgICAgIHwgICAgICAgW10gW10gICAgICAgW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTcKKysgICAgIG5hbm9fMV8wICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE3CisrICAgICBvcGNvZGVzICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgcGFydGVkICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHB0eCAgICAgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIyCisrICAgICBweXRob24gICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgcmFkaXVzICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQKKysgICAgIHJlY29kZSAgICAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwCisrICAgICBycG0gICAgICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOQorKyAgICAgc2NyZWVtICAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgIDIKKysgICAgIHNjcm9sbGtlZXBlciAgICAgICB8IFtdICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICBzZWQgICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNAorKyAgICAgc2gtdXRpbHMgICAgICAgICAgIHwgICAgW10gICAgICAgICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTQKKysgICAgIHNoYXJlZC1taW1lLWluZm8gICB8ICAgICAgIFtdIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3CisrICAgICBzaGFydXRpbHMgICAgICAgICAgfCAgICAgICBbXSBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgIFtdICAgICAgfCAxNworKyAgICAgc2lsa3kgICAgICAgICAgICAgIHwgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMKKysgICAgIHNrZW5jaWwgICAgICAgICAgICB8ICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA2CisrICAgICBza2V0Y2ggICAgICAgICAgICAgfCAgICAgICAgICBbXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNgorKyAgICAgc291bmR0cmFja2VyICAgICAgIHwgW10gICAgICAgW10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcKKysgICAgIHNwICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzCisrICAgICB0YXIgICAgICAgICAgICAgICAgfCBbXSBbXSAgICBbXSAgICAgICBbXSAgICAgICAgICAgICAgICAgIFtdICAgICAgICAgICAgfCAyNAorKyAgICAgdGV4aW5mbyAgICAgICAgICAgIHwgICAgICAgICAgW10gICAgICAgW10gICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTQKKysgICAgIHRleHR1dGlscyAgICAgICAgICB8ICAgIFtdICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgW10gICAgICB8IDE2CisrICAgICB0aW4gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMQorKyAgICAgdHAtcm9ib3QgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHR1eHBhaW50ICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICBbXSAgICAgW10gICAgICAgICAgICB8IDI5CisrICAgICB1bmljb2RlLWhhbi10cmEuLi4gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMAorKyAgICAgdW5pY29kZS10cmFuc2xhLi4uIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIKKysgICAgIHV0aWwtbGludXggICAgICAgICB8ICAgICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE1CisrICAgICB2b3JiaXMtdG9vbHMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOAorKyAgICAgd2FzdGVzZWRnZSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDAKKysgICAgIHdkaWZmICAgICAgICAgICAgICB8IFtdICAgICAgIFtdICAgICAgIFtdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE4CisrICAgICB3Z2V0ICAgICAgICAgICAgICAgfCBbXSBbXSBbXSBbXSAgICAgICBbXSBbXSAgICAgICAgICAgICAgIFtdICAgIFtdICAgICAgfCAyNAorKyAgICAgeGNoYXQgICAgICAgICAgICAgIHwgW10gW10gW10gW10gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAgICAgICAgICAgIHwgMTUKKysgICAgIHhmcmVlODZfeGtiX3htbCAgICB8IFtdICAgIFtdICAgICAgICAgIFtdIFtdICAgICAgICAgICAgICAgW10gICAgICAgICAgICB8IDExCisrICAgICB4cGFkICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNQorKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKysgICAgICAgNjMgdGVhbXMgICAgICAgICAgIHNrIHNsIHNyIHN2IHRhIHRoIHRyIHVrIHZlbiB2aSB3YSB4aCB6aF9DTiB6aF9UVyB6dQorKyAgICAgIDEzMSBkb21haW5zICAgICAgICAgNDcgMTkgMjggODMgIDAgIDAgNTkgMTMgIDEgICAxIDExICAwICAyMiAgICAyMiAgICAwICAxMzczCisgCisgICAgU29tZSBjb3VudGVycyBpbiB0aGUgcHJlY2VkaW5nIG1hdHJpeCBhcmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZgorIHZpc2libGUgYmxvY2tzIGxldCB1cyBleHBlY3QuICBUaGlzIGlzIGJlY2F1c2UgYSBmZXcgZXh0cmEgUE8gZmlsZXMgYXJlCitAQCAtMjIwLDYgKzc0MiwyNyBAQAorIGxhZyBiZXR3ZWVuIHRoZSBtZXJlIGV4aXN0ZW5jZSBhIFBPIGZpbGUgYW5kIGl0cyB3aWRlIGF2YWlsYWJpbGl0eSBpbiBhCisgZGlzdHJpYnV0aW9uLgorIAorLSAgIElmIEF1Z3VzdCAxOTk3IHNlZW1zIHRvIGJlIG9sZCwgeW91IG1heSBmZXRjaCBhIG1vcmUgcmVjZW50IGNvcHkgb2YKKy10aGlzIGBBQk9VVC1OTFMnIGZpbGUgb24gbW9zdCBHTlUgYXJjaGl2ZSBzaXRlcy4KKysgICBJZiBKYW51YXJ5IDIwMDQgc2VlbXMgdG8gYmUgb2xkLCB5b3UgbWF5IGZldGNoIGEgbW9yZSByZWNlbnQgY29weSBvZgorK3RoaXMgYEFCT1VULU5MUycgZmlsZSBvbiBtb3N0IEdOVSBhcmNoaXZlIHNpdGVzLiAgVGhlIG1vc3QgdXAtdG8tZGF0ZQorK21hdHJpeCB3aXRoIGZ1bGwgcGVyY2VudGFnZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBhdAorK2BodHRwOi8vd3d3Lmlyby51bW9udHJlYWwuY2EvY29udHJpYi9wby9IVE1ML21hdHJpeC5odG1sJy4KKysKKytVc2luZyBgZ2V0dGV4dCcgaW4gbmV3IHBhY2thZ2VzCisrPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKworK0lmIHlvdSBhcmUgd3JpdGluZyBhIGZyZWVseSBhdmFpbGFibGUgcHJvZ3JhbSBhbmQgd2FudCB0bworK2ludGVybmF0aW9uYWxpemUgaXQgeW91IGFyZSB3ZWxjb21lIHRvIHVzZSBHTlUgYGdldHRleHQnIGluIHlvdXIKKytwYWNrYWdlLiAgT2YgY291cnNlIHlvdSBoYXZlIHRvIHJlc3BlY3QgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrTGljZW5zZSB3aGljaCBjb3ZlcnMgdGhlIHVzZSBvZiB0aGUgR05VIGBnZXR0ZXh0JyBsaWJyYXJ5LiAgVGhpcyBtZWFucworK2luIHBhcnRpY3VsYXIgdGhhdCBldmVuIG5vbi1mcmVlIHByb2dyYW1zIGNhbiB1c2UgYGxpYmludGwnIGFzIGEgc2hhcmVkCisrbGlicmFyeSwgd2hlcmVhcyBvbmx5IGZyZWUgc29mdHdhcmUgY2FuIHVzZSBgbGliaW50bCcgYXMgYSBzdGF0aWMKKytsaWJyYXJ5IG9yIHVzZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBgbGliaW50bCcuCisrCisrICAgT25jZSB0aGUgc291cmNlcyBhcmUgY2hhbmdlZCBhcHByb3ByaWF0ZWx5IGFuZCB0aGUgc2V0dXAgY2FuIGhhbmRsZQorK3RoZSB1c2Ugb2YgYGdldHRleHQnIHRoZSBvbmx5IHRoaW5nIG1pc3NpbmcgYXJlIHRoZSB0cmFuc2xhdGlvbnMuICBUaGUKKytGcmVlIFRyYW5zbGF0aW9uIFByb2plY3QgaXMgYWxzbyBhdmFpbGFibGUgZm9yIHBhY2thZ2VzIHdoaWNoIGFyZSBub3QKKytkZXZlbG9wZWQgaW5zaWRlIHRoZSBHTlUgcHJvamVjdC4gIFRoZXJlZm9yZSB0aGUgaW5mb3JtYXRpb24gZ2l2ZW4gYWJvdmUKKythcHBsaWVzIGFsc28gZm9yIGV2ZXJ5IG90aGVyIEZyZWUgU29mdHdhcmUgUHJvamVjdC4gIENvbnRhY3QKKytgdHJhbnNsYXRpb25AaXJvLnVtb250cmVhbC5jYScgdG8gbWFrZSB0aGUgYC5wb3QnIGZpbGVzIGF2YWlsYWJsZSB0bworK3RoZSB0cmFuc2xhdGlvbiB0ZWFtcy4KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvQ2hhbmdlTG9nCTE5OTgtMTItMjkgMTc6NDk6NTYuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNS44NDY1MjE0NTYgLTA0MDAKK0BAIC0xLDMgKzEsMTEgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IE5ldyB2YXJpYWJsZS4KKysJKEVYVFJBX0RJU1QpOiBBZGQgY29uZmlnLnJwYXRoLgorKwkqIGNvbmZpZ3VyZS5pbiAoQUNfT1VUUFVUKTogQWRkIG00L01ha2VmaWxlLgorKwkoQUNfT1VUUFVUKTogUmVtb3ZlIGNvbW1hbmQgdGhhdCBjcmVhdGVkIHBvL01ha2VmaWxlLgorKwkoQUNfTElOS19GSUxFUyk6IFJlbW92ZSBpbnZvY2F0aW9uLgorKworIDE5OTgtMTItMjkJVXdlIE9oc2UgIDx1d2VAb2hzZS5kZT4KKyAKKyAJKiBzcmMvbHJ6LmM6IHJlbW92ZWQgc3RwY3B5IGNhbGwuCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2NvbmZpZy5ycGF0aAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvY29uZmlnLnJwYXRoCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzI5NzUyMDQwIC0wNDAwCitAQCAtMCwwICsxLDU0OCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorKyMgcnVuIHRpbWUgc2VhcmNoIHBhdGggb2Ygc2hhcmVkIGxpYnJhcmllcyBpbiBhbiBleGVjdXRhYmxlLgorKyMKKysjICAgQ29weXJpZ2h0IDE5OTYtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgVGFrZW4gZnJvbSBHTlUgbGlidG9vbCwgMjAwMQorKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorKyMKKysjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorKyMKKysjICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorKyMgICBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKysjICAgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKysjICAgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyMKKysjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKysjIG9yCisrIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKysjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisrIyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIuCisrIworKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorKworKyMgS25vd24gbGltaXRhdGlvbnM6CisrIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKysjICAgdGhhbiAyNTYgYnl0ZXMsIG90aGVyd2lzZSB0aGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgZHVtcCBjb3JlLiBUaGUgb25seQorKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisrIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisrCisrIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE0kVkMsCisrIyB3aGljaCBuZWVkcyAnLmxpYicpLgorK2xpYmV4dD1hCisrc2hyZXh0PS5zbworKworK2hvc3Q9IiQxIgorK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAorK2hvc3Rfb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisrCisrIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisrCisrd2w9CisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgIHdsPSctV2wsJworK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKysgICAgICA7OworKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisrICAgIG5ld3NvczYpCisrICAgICAgOzsKKysgICAgbGludXgqKQorKyAgICAgIGNhc2UgJENDIGluCisrICAgICAgICBpY2N8ZWNjKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICAgIGNjYykKKysgICAgICAgICAgd2w9Jy1XbCwnCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzY28zLjJ2NSopCisrICAgICAgOzsKKysgICAgc29sYXJpcyopCisrICAgICAgd2w9Jy1XbCwnCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICB3bD0nLVFvcHRpb24gbGQgJworKyAgICAgIDs7CisrICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgICB3bD0nLVdsLCcKKysgICAgICA7OworKyAgICBzeXN2NCpNUCopCisrICAgICAgOzsKKysgICAgdXRzNCopCisrICAgICAgOzsKKysgIGVzYWMKKytmaQorKworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorKworK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKytoYXJkY29kZV9kaXJlY3Q9bm8KKytoYXJkY29kZV9taW51c19MPW5vCisrCisrY2FzZSAiJGhvc3Rfb3MiIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKysgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKysgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgd2l0aF9nbnVfbGQ9bm8KKysgICAgZmkKKysgICAgOzsKKysgIG9wZW5ic2QqKQorKyAgICB3aXRoX2dudV9sZD1ubworKyAgICA7OworK2VzYWMKKysKKytsZF9zaGxpYnM9eWVzCisraWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKKysgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisrICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIGFtaWdhb3MqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisrICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKysgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKysgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbiB1c2UKKysgICAgICAjIHRoZW0uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYmVvcyopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgOgorKyAgICAgIGVsc2UKKysgICAgICAgIGxkX3NobGlicz1ubworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgbmV0YnNkKikKKysgICAgICA7OworKyAgICBzb2xhcmlzKiB8IHN5c3Y1KikKKysgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKysgICAgICAgIDoKKysgICAgICBlbHNlCisrICAgICAgICBsZF9zaGxpYnM9bm8KKysgICAgICBmaQorKyAgICAgIDs7CisrICAgIHN1bm9zNCopCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIDs7CisrICAgICopCisrICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisrICAgICAgICA6CisrICAgICAgZWxzZQorKyAgICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgZXNhYworKyAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSB5ZXM7IHRoZW4KKysgICAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKysgICAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICBmaQorK2Vsc2UKKysgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICBhaXgzKikKKysgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICAgICAjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKysgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhaXg0KiB8IGFpeDUqKQorKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisrICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisrICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKysgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKysgICAgICBlbHNlCisrICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisrICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKysgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorKyAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgICAgICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorKyAgICAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKysgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCisrICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisrICAgICAgICAgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKysgICAgICAgICAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKysgICAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorKyAgICAgICAgICBmaQorKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgIyBCZWdpbiBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworKyAgICAgICR7Q0N9ICR7TERGTEFHU30gY29uZnRlc3QuYyAtbyBjb25mdGVzdAorKyAgICAgIGFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0IDI+L2Rldi9udWxsIHwgc2VkIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KKyt9J2AKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9CisrfSdgCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisrICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LmMgY29uZnRlc3QKKysgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICBlbHNlCisrICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBhbWlnYW9zKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisrICAgICAgbGRfc2hsaWJzPW5vCisrICAgICAgOzsKKysgICAgYnNkaTQqKQorKyAgICAgIDs7CisrICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisrICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysgICAgICBsaWJleHQ9bGliCisrICAgICAgOzsKKysgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKysgICAgICBpZiAkQ0MgLXYgMj4mMSB8IGdyZXAgJ0FwcGxlJyA+L2Rldi9udWxsIDsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBkZ3V4KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgOzsKKysgICAgZnJlZWJzZDEqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICAgIGZyZWVic2QyLjIqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgZnJlZWJzZDIqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgIDs7CisrICAgIGZyZWVic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDkqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisrICAgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisrICAgICAgICAgIGhwcGEqNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgIGlhNjQqKQorKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKysgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorKyAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgICAgICAgOzsKKysgICAgICAgICAgKikKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKysgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKysgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKysgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworKyAgICAgICAgICAgIDs7CisrICAgICAgICBlc2FjCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKysgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKysgICAgICA7OworKyAgICBuZXRic2QqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgOzsKKysgICAgbmV3c29zNikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIG9wZW5ic2QqKQorKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKysgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKysgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgZWxzZQorKyAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworKyAgICAgICAgICAgIDs7CisrICAgICAgICAgICopCisrICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICAgICAgICA7OworKyAgICAgICAgZXNhYworKyAgICAgIGZpCisrICAgICAgOzsKKysgICAgb3MyKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKysgICAgICA7OworKyAgICBvc2YzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisrICAgICAgOzsKKysgICAgb3NmNCogfCBvc2Y1KikKKysgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworKyAgICAgIGVsc2UKKysgICAgICAgICMgQm90aCBjYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisrICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKKysgICAgICBmaQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorKyAgICAgIDs7CisrICAgIHNjbzMuMnY1KikKKysgICAgICA7OworKyAgICBzb2xhcmlzKikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgOzsKKysgICAgc3Vub3M0KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisrICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisrICAgICAgOzsKKysgICAgc3lzdjQpCisrICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKysgICAgICAgIHNuaSkKKysgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKysgICAgICAgICAgOzsKKysgICAgICAgIHNpZW1lbnMpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworKyAgICAgICAgICA7OworKyAgICAgICAgbW90b3JvbGEpCisrICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIDs7CisrICAgIHN5c3Y0LjMqKQorKyAgICAgIDs7CisrICAgIHN5c3Y0Kk1QKikKKysgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisrICAgICAgICBsZF9zaGxpYnM9eWVzCisrICAgICAgZmkKKysgICAgICA7OworKyAgICBzeXN2NC4ydXcyKikKKysgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisrICAgICAgaGFyZGNvZGVfbWludXNfTD1ubworKyAgICAgIDs7CisrICAgIHN5c3Y1T3BlblVOSVg4KiB8IHN5c3Y1VW5peFdhcmU3KiB8ICBzeXN2NXV3Wzc4XSogfCB1bml4d2FyZTcqKQorKyAgICAgIDs7CisrICAgIHN5c3Y1KikKKysgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorKyAgICAgIDs7CisrICAgIHV0czQqKQorKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIGxkX3NobGlicz1ubworKyAgICAgIDs7CisrICBlc2FjCisrZmkKKysKKysjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKytsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworK2Nhc2UgIiRob3N0X29zIiBpbgorKyAgYWl4MyopCisrICAgIDs7CisrICBhaXg0KiB8IGFpeDUqKQorKyAgICA7OworKyAgYW1pZ2FvcyopCisrICAgIDs7CisrICBiZW9zKikKKysgICAgOzsKKysgIGJzZGk0KikKKysgICAgOzsKKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKysgICAgc2hyZXh0PS5kbGwKKysgICAgOzsKKysgIGRhcndpbiogfCByaGFwc29keSopCisrICAgIHNocmV4dD0uZHlsaWIKKysgICAgOzsKKysgIGRndXgqKQorKyAgICA7OworKyAgZnJlZWJzZDEqKQorKyAgICA7OworKyAgZnJlZWJzZCopCisrICAgIDs7CisrICBnbnUqKQorKyAgICA7OworKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisrICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICBpYTY0KikKKysgICAgICAgIHNocmV4dD0uc28KKysgICAgICAgIDs7CisrICAgICAgaHBwYSo2NCopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICAgICopCisrICAgICAgICBzaHJleHQ9LnNsCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorKyAgICBjYXNlICIkaG9zdF9vcyIgaW4KKysgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorKyAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorKyAgICAgICAgOzsKKysgICAgICAqKQorKyAgICAgICAgY2FzZSAkTEQgaW4KKysgICAgICAgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikgbGlic3VmZj0gc2hsaWJzdWZmPSA7OworKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKysgICAgICAgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IDs7CisrICAgICAgICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgIGxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisrICAgIDs7CisrICBsaW51eCopCisrICAgIDs7CisrICBuZXRic2QqKQorKyAgICA7OworKyAgbmV3c29zNikKKysgICAgOzsKKysgIG50by1xbngpCisrICAgIDs7CisrICBvcGVuYnNkKikKKysgICAgOzsKKysgIG9zMiopCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNocmV4dD0uZGxsCisrICAgIDs7CisrICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIDs7CisrICBzY28zLjJ2NSopCisrICAgIDs7CisrICBzb2xhcmlzKikKKysgICAgOzsKKysgIHN1bm9zNCopCisrICAgIDs7CisrICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCisrICAgIDs7CisrICBzeXN2NCpNUCopCisrICAgIDs7CisrICB1dHM0KikKKysgICAgOzsKKytlc2FjCisrCisrc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKytlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKworK3NlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorKworKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0iJGVzY2FwZWRfd2wiCisrCisrIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCisrbGliZXh0PSIkbGliZXh0IgorKworKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KKytzaGxpYmV4dD0iJHNobGliZXh0IgorKworKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKytoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKworKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCisraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrCisrIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FLnNvIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKysjIHJlc3VsdGluZyBiaW5hcnkuCisraGFyZGNvZGVfZGlyZWN0PSIkaGFyZGNvZGVfZGlyZWN0IgorKworKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrIyByZXN1bHRpbmcgYmluYXJ5LgorK2hhcmRjb2RlX21pbnVzX0w9IiRoYXJkY29kZV9taW51c19MIgorKworK0VPRgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9jb25maWd1cmUuaW4JMjAwNC0wOS0xMiAxNDozOTo1NS4xNjE3MDY0ODggLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM1LjgxNjUyNjAxNiAtMDQwMAorQEAgLTI2MCwxMSArMjYwLDEwIEBACisgQU1fR05VX0dFVFRFWFQKKyAKKyBBQ19ERUZJTkVfVU5RVU9URUQoTE9DQUxFRElSLCIkcHJlZml4LyREQVRBRElSTkFNRSIpCistQUNfTElOS19GSUxFUygkbmxzX2N2X2hlYWRlcl9saWJndCwgJG5sc19jdl9oZWFkZXJfaW50bCkKKyAKKy1BQ19PVVRQVVQoW01ha2VmaWxlIGludGwvTWFrZWZpbGUgbGliL01ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBcCisrQUNfT1VUUFVUKFtNYWtlZmlsZSBpbnRsL01ha2VmaWxlIGxpYi9NYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgIG00L01ha2VmaWxlIFwKKyBtYW4vTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gc3JjL01ha2VmaWxlIGRlYmlhbi9ydWxlcyBTcGVjZmlsZSBzeXN0eXBlIFwKKyBzcmMvbHJ6c3pidWddLAorLVtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IAorK1sKKyBjaG1vZCAreCBkZWJpYW4vcnVsZXM7CisgdGVzdCAteiAiJENPTkZJR19IRUFERVJTIiB8fCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2JpbmR0ZXh0ZG9tLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvYmluZHRleHRkb20uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjM0Mzc0OTkxMiAtMDQwMAorQEAgLTEsNTkgKzEsNzUgQEAKKyAvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmluZHRleHRkb21haW4oMykgZnVuY3Rpb24KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTgsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9NQUxMT0NfSAorLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgorLSMgZWxzZQorLXZvaWQgZnJlZSAoKTsKKy0jIGVuZGlmCistI2VuZGlmCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kaXJuYW1lIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lCisrIyBkZWZpbmUgX25sX2RvbWFpbl9iaW5kaW5ncyBsaWJpbnRsX25sX2RvbWFpbl9iaW5kaW5ncworKyNlbmRpZgorKworKy8qIFNvbWUgY29tcGlsZXJzLCBsaWtlIFN1bk9TNCBjYywgZG9uJ3QgaGF2ZSBvZmZzZXRvZiBpbiA8c3RkZGVmLmg+LiAgKi8KKysjaWZuZGVmIG9mZnNldG9mCisrIyBkZWZpbmUgb2Zmc2V0b2YodHlwZSxpZGVudCkgKChzaXplX3QpJigoKHR5cGUqKTApLT5pZGVudCkpCisgI2VuZGlmCistI2luY2x1ZGUgImdldHRleHQuaCIKKy0jaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogQ29udGFpbnMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIG1lc3NhZ2UgY2F0YWxvZ3MuICAqLworIGV4dGVybiBjb25zdCBjaGFyIF9ubF9kZWZhdWx0X2Rpcm5hbWVbXTsKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lX2ludGVybmFsW10gYXR0cmlidXRlX2hpZGRlbjsKKysjZWxzZQorKyMgZGVmaW5lIElOVFVTRShuYW1lKSBuYW1lCisrI2VuZGlmCisgCisgLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMuICAqLworIGV4dGVybiBzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKyAKKysvKiBMb2NrIHZhcmlhYmxlIHRvIHByb3RlY3QgdGhlIGdsb2JhbCBkYXRhIGluIHRoZSBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLiAgKi8KKytfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfbmxfc3RhdGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorKworIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKyAgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCitAQCAtNjEsMjMgKzc3LDQxIEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBCSU5EVEVYVERPTUFJTiBfX2JpbmR0ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisrIyBpZm5kZWYgc3RyZHVwCisrIyAgZGVmaW5lIHN0cmR1cChzdHIpIF9fc3RyZHVwIChzdHIpCisrIyBlbmRpZgorICNlbHNlCistIyBkZWZpbmUgQklORFRFWFRET01BSU4gYmluZHRleHRkb21haW5fXworKyMgZGVmaW5lIEJJTkRURVhURE9NQUlOIGxpYmludGxfYmluZHRleHRkb21haW4KKysjIGRlZmluZSBCSU5EX1RFWFRET01BSU5fQ09ERVNFVCBsaWJpbnRsX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CisgI2VuZGlmCisgCistLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCistICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworLWNoYXIgKgorLUJJTkRURVhURE9NQUlOIChkb21haW5uYW1lLCBkaXJuYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRpcm5hbWU7CisrLyogU3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgbmFtZSAqRElSTkFNRVAgYW5kIHRoZSBvdXRwdXQgY29kZXNldCAqQ09ERVNFVFAKKysgICB0byBiZSB1c2VkIGZvciB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cuCisrICAgSWYgKkRJUk5BTUVQIG9yICpDT0RFU0VUUCBpcyBOVUxMLCB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgaXMgbm90CisrICAgbW9kaWZpZWQsIG9ubHkgdGhlIGN1cnJlbnQgdmFsdWUgaXMgcmV0dXJuZWQuCisrICAgSWYgRElSTkFNRVAgb3IgQ09ERVNFVFAgaXMgTlVMTCwgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGlzIG5laXRoZXIKKysgICBtb2RpZmllZCBub3IgcmV0dXJuZWQuICAqLworK3N0YXRpYyB2b2lkCisrc2V0X2JpbmRpbmdfdmFsdWVzIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJICAgIGNvbnN0IGNoYXIgKipkaXJuYW1lcCwgY29uc3QgY2hhciAqKmNvZGVzZXRwKQorIHsKKyAgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgaW50IG1vZGlmaWVkOworIAorICAgLyogU29tZSBzYW5pdHkgY2hlY2tzLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwgfHwgZG9tYWlubmFtZVswXSA9PSAnXDAnKQorLSAgICByZXR1cm4gTlVMTDsKKysgICAgeworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJKmRpcm5hbWVwID0gTlVMTDsKKysgICAgICBpZiAoY29kZXNldHApCisrCSpjb2Rlc2V0cCA9IE5VTEw7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3dybG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgbW9kaWZpZWQgPSAwOworIAorICAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKyAgICAgeworQEAgLTkzLDgxICsxMjcsMTczIEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKy0gICAgLyogVGhlIGN1cnJlbnQgYmluZGluZyBoYXMgYmUgdG8gcmV0dXJuZWQuICAqLworLSAgICByZXR1cm4gYmluZGluZyA9PSBOVUxMID8gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZSA6IGJpbmRpbmctPmRpcm5hbWU7CistCisgICBpZiAoYmluZGluZyAhPSBOVUxMKQorICAgICB7CistICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorLQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorLQkgb2xkIGJpbmRpbmcuICAqLworLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIGJpbmRpbmctPmRpcm5hbWUpICE9IDApCisrICAgICAgaWYgKGRpcm5hbWVwKQorIAl7CistCSAgY2hhciAqbmV3X2Rpcm5hbWU7CisrCSAgY29uc3QgY2hhciAqZGlybmFtZSA9ICpkaXJuYW1lcDsKKyAKKy0JICBpZiAoc3RyY21wIChkaXJuYW1lLCBfbmxfZGVmYXVsdF9kaXJuYW1lKSA9PSAwKQorLQkgICAgbmV3X2Rpcm5hbWUgPSAoY2hhciAqKSBfbmxfZGVmYXVsdF9kaXJuYW1lOworKwkgIGlmIChkaXJuYW1lID09IE5VTEwpCisrCSAgICAvKiBUaGUgY3VycmVudCBiaW5kaW5nIGhhcyBiZSB0byByZXR1cm5lZC4gICovCisrCSAgICAqZGlybmFtZXAgPSBiaW5kaW5nLT5kaXJuYW1lOworIAkgIGVsc2UKKyAJICAgIHsKKysJICAgICAgLyogVGhlIGRvbWFpbiBpcyBhbHJlYWR5IGJvdW5kLiAgSWYgdGhlIG5ldyB2YWx1ZSBhbmQgdGhlIG9sZAorKwkJIG9uZSBhcmUgZXF1YWwgd2Ugc2ltcGx5IGRvIG5vdGhpbmcuICBPdGhlcndpc2UgcmVwbGFjZSB0aGUKKysJCSBvbGQgYmluZGluZy4gICovCisrCSAgICAgIGNoYXIgKnJlc3VsdCA9IGJpbmRpbmctPmRpcm5hbWU7CisrCSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIHJlc3VsdCkgIT0gMCkKKysJCXsKKysJCSAgaWYgKHN0cmNtcCAoZGlybmFtZSwgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpKSA9PSAwKQorKwkJICAgIHJlc3VsdCA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysJCSAgZWxzZQorKwkJICAgIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgICAgIG5ld19kaXJuYW1lID0gc3RyZHVwIChkaXJuYW1lKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoZGlybmFtZSk7CisgI2Vsc2UKKy0JICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZGlybmFtZSkgKyAxOworLQkgICAgICBuZXdfZGlybmFtZSA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKG5ld19kaXJuYW1lID09IE5VTEwpCistCQlyZXR1cm4gTlVMTDsKKy0KKy0JICAgICAgbWVtY3B5IChuZXdfZGlybmFtZSwgZGlybmFtZSwgbGVuKTsKKysJCSAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgIT0gTlVMTCwgMSkpCisrCQkJbWVtY3B5IChyZXN1bHQsIGRpcm5hbWUsIGxlbik7CisgI2VuZGlmCisrCQkgICAgfQorKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ICE9IE5VTEwsIDEpKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChiaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJCQlmcmVlIChiaW5kaW5nLT5kaXJuYW1lKTsKKysKKysJCSAgICAgIGJpbmRpbmctPmRpcm5hbWUgPSByZXN1bHQ7CisrCQkgICAgICBtb2RpZmllZCA9IDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICAqZGlybmFtZXAgPSByZXN1bHQ7CisgCSAgICB9CisrCX0KKyAKKy0JICBpZiAoYmluZGluZy0+ZGlybmFtZSAhPSBfbmxfZGVmYXVsdF9kaXJuYW1lKQorLQkgICAgZnJlZSAoYmluZGluZy0+ZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwl7CisrCSAgY29uc3QgY2hhciAqY29kZXNldCA9ICpjb2Rlc2V0cDsKKyAKKy0JICBiaW5kaW5nLT5kaXJuYW1lID0gbmV3X2Rpcm5hbWU7CisrCSAgaWYgKGNvZGVzZXQgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBjdXJyZW50IGJpbmRpbmcgaGFzIGJlIHRvIHJldHVybmVkLiAgKi8KKysJICAgICpjb2Rlc2V0cCA9IGJpbmRpbmctPmNvZGVzZXQ7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICAvKiBUaGUgZG9tYWluIGlzIGFscmVhZHkgYm91bmQuICBJZiB0aGUgbmV3IHZhbHVlIGFuZCB0aGUgb2xkCisrCQkgb25lIGFyZSBlcXVhbCB3ZSBzaW1wbHkgZG8gbm90aGluZy4gIE90aGVyd2lzZSByZXBsYWNlIHRoZQorKwkJIG9sZCBiaW5kaW5nLiAgKi8KKysJICAgICAgY2hhciAqcmVzdWx0ID0gYmluZGluZy0+Y29kZXNldDsKKysJICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8IHN0cmNtcCAoY29kZXNldCwgcmVzdWx0KSAhPSAwKQorKwkJeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChjb2Rlc2V0KTsKKysjZWxzZQorKwkJICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCQkgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICBtZW1jcHkgKHJlc3VsdCwgY29kZXNldCwgbGVuKTsKKysjZW5kaWYKKysKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCAhPSBOVUxMLCAxKSkKKysJCSAgICB7CisrCQkgICAgICBpZiAoYmluZGluZy0+Y29kZXNldCAhPSBOVUxMKQorKwkJCWZyZWUgKGJpbmRpbmctPmNvZGVzZXQpOworKworKwkJICAgICAgYmluZGluZy0+Y29kZXNldCA9IHJlc3VsdDsKKysJCSAgICAgIGJpbmRpbmctPmNvZGVzZXRfY250cisrOworKwkJICAgICAgbW9kaWZpZWQgPSAxOworKwkJICAgIH0KKysJCX0KKysJICAgICAgKmNvZGVzZXRwID0gcmVzdWx0OworKwkgICAgfQorIAl9CisgICAgIH0KKysgIGVsc2UgaWYgKChkaXJuYW1lcCA9PSBOVUxMIHx8ICpkaXJuYW1lcCA9PSBOVUxMKQorKwkgICAmJiAoY29kZXNldHAgPT0gTlVMTCB8fCAqY29kZXNldHAgPT0gTlVMTCkpCisrICAgIHsKKysgICAgICAvKiBTaW1wbHkgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcy4gICovCisrICAgICAgaWYgKGRpcm5hbWVwKQorKwkqZGlybmFtZXAgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrICAgICAgaWYgKGNvZGVzZXRwKQorKwkqY29kZXNldHAgPSBOVUxMOworKyAgICB9CisgICBlbHNlCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNyZWF0ZSBhIG5ldyBiaW5kaW5nLiAgKi8KKy0gICAgICBzaXplX3QgbGVuOworKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRvbWFpbm5hbWUpICsgMTsKKyAgICAgICBzdHJ1Y3QgYmluZGluZyAqbmV3X2JpbmRpbmcgPQorLQkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChzaXplb2YgKCpuZXdfYmluZGluZykpOworKwkoc3RydWN0IGJpbmRpbmcgKikgbWFsbG9jIChvZmZzZXRvZiAoc3RydWN0IGJpbmRpbmcsIGRvbWFpbm5hbWUpICsgbGVuKTsKKyAKKy0gICAgICBpZiAobmV3X2JpbmRpbmcgPT0gTlVMTCkKKy0JcmV0dXJuIE5VTEw7CisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKG5ld19iaW5kaW5nID09IE5VTEwsIDApKQorKwlnb3RvIGZhaWxlZDsKKyAKKysgICAgICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lLCBkb21haW5uYW1lLCBsZW4pOworKworKyAgICAgIGlmIChkaXJuYW1lcCkKKysJeworKwkgIGNvbnN0IGNoYXIgKmRpcm5hbWUgPSAqZGlybmFtZXA7CisrCisrCSAgaWYgKGRpcm5hbWUgPT0gTlVMTCkKKysJICAgIC8qIFRoZSBkZWZhdWx0IHZhbHVlLiAgKi8KKysJICAgIGRpcm5hbWUgPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSk7CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoc3RyY21wIChkaXJuYW1lLCBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpID09IDApCisrCQlkaXJuYW1lID0gSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGNoYXIgKnJlc3VsdDsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSBzdHJkdXAgKGRvbWFpbm5hbWUpOworLSAgICAgIGlmIChuZXdfYmluZGluZy0+ZG9tYWlubmFtZSA9PSBOVUxMKQorLQlyZXR1cm4gTlVMTDsKKysJCSAgcmVzdWx0ID0gc3RyZHVwIChkaXJuYW1lKTsKKysJCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCSAgICBnb3RvIGZhaWxlZF9kaXJuYW1lOworICNlbHNlCistICAgICAgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgbmV3X2JpbmRpbmctPmRvbWFpbm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKG5ld19iaW5kaW5nLT5kb21haW5uYW1lID09IE5VTEwpCistCXJldHVybiBOVUxMOworLSAgICAgIG1lbWNweSAobmV3X2JpbmRpbmctPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGxlbik7CisrCQkgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGRpcm5hbWUpICsgMTsKKysJCSAgcmVzdWx0ID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAocmVzdWx0ID09IE5VTEwsIDApKQorKwkJICAgIGdvdG8gZmFpbGVkX2Rpcm5hbWU7CisrCQkgIG1lbWNweSAocmVzdWx0LCBkaXJuYW1lLCBsZW4pOworICNlbmRpZgorLQorLSAgICAgIGlmIChzdHJjbXAgKGRpcm5hbWUsIF9ubF9kZWZhdWx0X2Rpcm5hbWUpID09IDApCistCW5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgX25sX2RlZmF1bHRfZGlybmFtZTsKKysJCSAgZGlybmFtZSA9IHJlc3VsdDsKKysJCX0KKysJICAgIH0KKysJICAqZGlybmFtZXAgPSBkaXJuYW1lOworKwkgIG5ld19iaW5kaW5nLT5kaXJuYW1lID0gKGNoYXIgKikgZGlybmFtZTsKKysJfQorICAgICAgIGVsc2UKKysJLyogVGhlIGRlZmF1bHQgdmFsdWUuICAqLworKwluZXdfYmluZGluZy0+ZGlybmFtZSA9IChjaGFyICopIElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKTsKKysKKysgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyID0gMDsKKysKKysgICAgICBpZiAoY29kZXNldHApCisgCXsKKysJICBjb25zdCBjaGFyICpjb2Rlc2V0ID0gKmNvZGVzZXRwOworKworKwkgIGlmIChjb2Rlc2V0ICE9IE5VTEwpCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnJlc3VsdDsKKysKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSRFVQCistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSBzdHJkdXAgKGRpcm5hbWUpOworLQkgIGlmIChuZXdfYmluZGluZy0+ZGlybmFtZSA9PSBOVUxMKQorLQkgICAgcmV0dXJuIE5VTEw7CisrCSAgICAgIHJlc3VsdCA9IHN0cmR1cCAoY29kZXNldCk7CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChyZXN1bHQgPT0gTlVMTCwgMCkpCisrCQlnb3RvIGZhaWxlZF9jb2Rlc2V0OworICNlbHNlCistCSAgbGVuID0gc3RybGVuIChkaXJuYW1lKSArIDE7CistCSAgbmV3X2JpbmRpbmctPmRpcm5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lID09IE5VTEwpCistCSAgICByZXR1cm4gTlVMTDsKKy0JICBtZW1jcHkgKG5ld19iaW5kaW5nLT5kaXJuYW1lLCBkaXJuYW1lLCBsZW4pOworKwkgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChjb2Rlc2V0KSArIDE7CisrCSAgICAgIHJlc3VsdCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKHJlc3VsdCA9PSBOVUxMLCAwKSkKKysJCWdvdG8gZmFpbGVkX2NvZGVzZXQ7CisrCSAgICAgIG1lbWNweSAocmVzdWx0LCBjb2Rlc2V0LCBsZW4pOworICNlbmRpZgorKwkgICAgICBjb2Rlc2V0ID0gcmVzdWx0OworKwkgICAgICBuZXdfYmluZGluZy0+Y29kZXNldF9jbnRyKys7CisrCSAgICB9CisrCSAgKmNvZGVzZXRwID0gY29kZXNldDsKKysJICBuZXdfYmluZGluZy0+Y29kZXNldCA9IChjaGFyICopIGNvZGVzZXQ7CisgCX0KKysgICAgICBlbHNlCisrCW5ld19iaW5kaW5nLT5jb2Rlc2V0ID0gTlVMTDsKKyAKKyAgICAgICAvKiBOb3cgZW5xdWV1ZSBpdC4gICovCisgICAgICAgaWYgKF9ubF9kb21haW5fYmluZGluZ3MgPT0gTlVMTAorQEAgLTE4NywxMyArMzEzLDUxIEBACisgCSAgYmluZGluZy0+bmV4dCA9IG5ld19iaW5kaW5nOworIAl9CisgCistICAgICAgYmluZGluZyA9IG5ld19iaW5kaW5nOworKyAgICAgIG1vZGlmaWVkID0gMTsKKysKKysgICAgICAvKiBIZXJlIHdlIGRlYWwgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4gICovCisrICAgICAgaWYgKDApCisrCXsKKysJZmFpbGVkX2NvZGVzZXQ6CisrCSAgaWYgKG5ld19iaW5kaW5nLT5kaXJuYW1lICE9IElOVFVTRShfbmxfZGVmYXVsdF9kaXJuYW1lKSkKKysJICAgIGZyZWUgKG5ld19iaW5kaW5nLT5kaXJuYW1lKTsKKysJZmFpbGVkX2Rpcm5hbWU6CisrCSAgZnJlZSAobmV3X2JpbmRpbmcpOworKwlmYWlsZWQ6CisrCSAgaWYgKGRpcm5hbWVwKQorKwkgICAgKmRpcm5hbWVwID0gTlVMTDsKKysJICBpZiAoY29kZXNldHApCisrCSAgICAqY29kZXNldHAgPSBOVUxMOworKwl9CisgICAgIH0KKyAKKy0gIHJldHVybiBiaW5kaW5nLT5kaXJuYW1lOworKyAgLyogSWYgd2UgbW9kaWZpZWQgYW55IGJpbmRpbmcsIHdlIGZsdXNoIHRoZSBjYWNoZXMuICAqLworKyAgaWYgKG1vZGlmaWVkKQorKyAgICArK19ubF9tc2dfY2F0X2NudHI7CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworK30KKysKKysvKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKysgICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCisrY2hhciAqCisrQklORFRFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmRpcm5hbWUpCisreworKyAgc2V0X2JpbmRpbmdfdmFsdWVzIChkb21haW5uYW1lLCAmZGlybmFtZSwgTlVMTCk7CisrICByZXR1cm4gKGNoYXIgKikgZGlybmFtZTsKKyt9CisrCisrLyogU3BlY2lmeSB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGluIHdoaWNoIHRoZSBtZXNzYWdlcyBmcm9tIHRoZQorKyAgIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgcmV0dXJuZWQuICAqLworK2NoYXIgKgorK0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpjb2Rlc2V0KQorK3sKKysgIHNldF9iaW5kaW5nX3ZhbHVlcyAoZG9tYWlubmFtZSwgTlVMTCwgJmNvZGVzZXQpOworKyAgcmV0dXJuIChjaGFyICopIGNvZGVzZXQ7CisgfQorIAorICNpZmRlZiBfTElCQworLS8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworKy8qIEFsaWFzZXMgZm9yIGZ1bmN0aW9uIG5hbWVzIGluIEdOVSBDIExpYnJhcnkuICAqLworIHdlYWtfYWxpYXMgKF9fYmluZHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKTsKKyt3ZWFrX2FsaWFzIChfX2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0LCBiaW5kX3RleHRkb21haW5fY29kZXNldCk7CisgI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvY2F0LWNvbXBhdC5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NhdC1jb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMjYyICswLDAgQEAKKy0vKiBDb21wYXRpYmlsaXR5IGNvZGUgZm9yIGdldHRleHQtdXNpbmctY2F0Z2V0cyBpbnRlcmZhY2UuCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistICAgYW55IGxhdGVyIHZlcnNpb24uCistCistICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0KKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZmRlZiBTVERDX0hFQURFUlMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZmRlZiBIQVZFX05MX1RZUEVTX0gKKy0jIGluY2x1ZGUgPG5sX3R5cGVzLmg+CistI2VuZGlmCistCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgYHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKy0gICBgYERpcmVjdHMgYHNldGxvY2FsZSgpJyB0byBxdWVyeSBgY2F0ZWdvcnknIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQKKy0gICAgIHNldHRpbmcgb2YgYGxvY2FsJy4nJworLSAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgQW5kIGV2ZW4gd29yc2U6IFBPU0lYCistICAgZGVmaW5lcyB0aGlzIG5vdCBhdCBhbGwuICBTbyB3ZSBjYW4gdXNlIHRoaXMgZmVhdHVyZSBvbmx5IG9uIHNlbGVjdGVkCistICAgc3lzdGVtIChlLmcuIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKy0jaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBIQVZFX0xPQ0FMRV9OVUxMCistI2VuZGlmCistCistLyogVGhlIGNhdGFsb2cgZGVzY3JpcHRvci4gICovCistc3RhdGljIG5sX2NhdGQgY2F0YWxvZyA9IChubF9jYXRkKSAtMTsKKy0KKy0vKiBOYW1lIG9mIHRoZSBkZWZhdWx0IGNhdGFsb2cuICAqLworLXN0YXRpYyBjb25zdCBjaGFyIGRlZmF1bHRfY2F0YWxvZ19uYW1lW10gPSAibWVzc2FnZXMiOworLQorLS8qIE5hbWUgb2YgY3VycmVudGx5IHVzZWQgY2F0YWxvZy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNhdGFsb2dfbmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLS8qIEdldCBJRCBmb3IgZ2l2ZW4gc3RyaW5nLiAgSWYgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludCBtc2dfdG9fY2F0X2lkIFBBUkFNUyAoKGNvbnN0IGNoYXIgKm1zZykpOworLQorLS8qIFN1YnN0aXR1dGlvbiBmb3Igc3lzdGVtcyBsYWNraW5nIHRoaXMgZnVuY3Rpb24gaW4gdGhlaXIgQyBsaWJyYXJ5LiAgKi8KKy0jaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7CistI2VuZGlmCistCistCistLyogU2V0IGN1cnJlbnRseSB1c2VkIGRvbWFpbi9jYXRhbG9nLiAgKi8KKy1jaGFyICoKKy10ZXh0ZG9tYWluIChkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy17CistICBubF9jYXRkIG5ld19jYXRhbG9nOworLSAgY2hhciAqbmV3X25hbWU7CistICBzaXplX3QgbmV3X25hbWVfbGVuOworLSAgY2hhciAqbGFuZzsKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgXAorLSAgICAmJiBkZWZpbmVkIEhBVkVfTE9DQUxFX05VTEwKKy0gIGxhbmcgPSBzZXRsb2NhbGUgKExDX01FU1NBR0VTLCBOVUxMKTsKKy0jZWxzZQorLSAgbGFuZyA9IGdldGVudiAoIkxDX0FMTCIpOworLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBsYW5nID0gZ2V0ZW52ICgiTENfTUVTU0FHRVMiKTsKKy0gICAgICBpZiAobGFuZyA9PSBOVUxMIHx8IGxhbmdbMF0gPT0gJ1wwJykKKy0JbGFuZyA9IGdldGVudiAoIkxBTkciKTsKKy0gICAgfQorLSNlbmRpZgorLSAgaWYgKGxhbmcgPT0gTlVMTCB8fCBsYW5nWzBdID09ICdcMCcpCistICAgIGxhbmcgPSAiQyI7CistCistICAvKiBTZWUgd2hldGhlciBuYW1lIG9mIGN1cnJlbnRseSB1c2VkIGRvbWFpbiBpcyBhc2tlZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLQorLSAgaWYgKGRvbWFpbm5hbWVbMF0gPT0gJ1wwJykKKy0gICAgZG9tYWlubmFtZSA9IGRlZmF1bHRfY2F0YWxvZ19uYW1lOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgKi8KKy0gIG5ld19uYW1lX2xlbiA9IHNpemVvZiAoTE9DQUxFRElSKSAtIDEgKyAxICsgc3RybGVuIChsYW5nKQorLQkJICsgc2l6ZW9mICgiL0xDX01FU1NBR0VTLyIpIC0gMSArIHNpemVvZiAoUEFDS0FHRSkgLSAxCistCQkgKyBzaXplb2YgKCIuY2F0Iik7CistCistICBuZXdfbmFtZSA9IChjaGFyICopIG1hbGxvYyAobmV3X25hbWVfbGVuKTsKKy0gIGlmIChuZXdfbmFtZSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIHN0cmNweSAobmV3X25hbWUsIFBBQ0tBR0UpOworLSAgbmV3X2NhdGFsb2cgPSBjYXRvcGVuIChuZXdfbmFtZSwgMCk7CistCistICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLSAgICB7CistICAgICAgLyogTkxTUEFUSCBzZWFyY2ggZGlkbid0IHdvcmssIHRyeSBhYnNvbHV0ZSBwYXRoICovCistICAgICAgc3ByaW50ZiAobmV3X25hbWUsICIlcy8lcy9MQ19NRVNTQUdFUy8lcy5jYXQiLCBMT0NBTEVESVIsIGxhbmcsCistCSAgICAgICBQQUNLQUdFKTsKKy0gICAgICBuZXdfY2F0YWxvZyA9IGNhdG9wZW4gKG5ld19uYW1lLCAwKTsKKy0KKy0gICAgICBpZiAobmV3X2NhdGFsb2cgPT0gKG5sX2NhdGQpIC0xKQorLQl7CistCSAgZnJlZSAobmV3X25hbWUpOworLQkgIHJldHVybiAoY2hhciAqKSBjYXRhbG9nX25hbWU7CistCX0KKy0gICAgfQorLQorLSAgLyogQ2xvc2Ugb2xkIGNhdGFsb2cuICAqLworLSAgaWYgKGNhdGFsb2cgIT0gKG5sX2NhdGQpIC0xKQorLSAgICBjYXRjbG9zZSAoY2F0YWxvZyk7CistICBpZiAoY2F0YWxvZ19uYW1lICE9IGRlZmF1bHRfY2F0YWxvZ19uYW1lKQorLSAgICBmcmVlICgoY2hhciAqKSBjYXRhbG9nX25hbWUpOworLQorLSAgY2F0YWxvZyA9IG5ld19jYXRhbG9nOworLSAgY2F0YWxvZ19uYW1lID0gbmV3X25hbWU7CistCistICByZXR1cm4gKGNoYXIgKikgY2F0YWxvZ19uYW1lOworLX0KKy0KKy1jaGFyICoKKy1iaW5kdGV4dGRvbWFpbiAoZG9tYWlubmFtZSwgZGlybmFtZSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICpkaXJuYW1lOworLXsKKy0jaWYgSEFWRV9TRVRFTlYgfHwgSEFWRV9QVVRFTlYKKy0gIGNoYXIgKm9sZF92YWwsICpuZXdfdmFsLCAqY3A7CistICBzaXplX3QgbmV3X3ZhbF9sZW47CistCistICAvKiBUaGlzIGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZSBoZXJlIGJ1dCB0byBiZSBjb21wYXRpYmxlIGRvIGl0LiAgKi8KKy0gIGlmIChkb21haW5uYW1lID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogQ29tcHV0ZSBsZW5ndGggb2YgYWRkZWQgcGF0aCBlbGVtZW50LiAgSWYgd2UgdXNlIHNldGVudiB3ZSBkb24ndCBuZWVkCistICAgICB0aGUgZmlyc3QgYnl0cyBmb3IgTkxTUEFUSD0sIGJ1dCB3aHkgY29tcGxpY2F0ZSB0aGUgY29kZSBmb3IgdGhpcworLSAgICAgcGVhbnV0cy4gICovCistICBuZXdfdmFsX2xlbiA9IHNpemVvZiAoIk5MU1BBVEg9IikgLSAxICsgc3RybGVuIChkaXJuYW1lKQorLQkJKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistCistICBvbGRfdmFsID0gZ2V0ZW52ICgiTkxTUEFUSCIpOworLSAgaWYgKG9sZF92YWwgPT0gTlVMTCB8fCBvbGRfdmFsWzBdID09ICdcMCcpCistICAgIHsKKy0gICAgICBvbGRfdmFsID0gTlVMTDsKKy0gICAgICBuZXdfdmFsX2xlbiArPSAxICsgc2l6ZW9mIChMT0NBTEVESVIpIC0gMQorLQkgICAgICAgICAgICAgKyBzaXplb2YgKCIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistICAgIH0KKy0gIGVsc2UKKy0gICAgbmV3X3ZhbF9sZW4gKz0gc3RybGVuIChvbGRfdmFsKTsKKy0KKy0gIG5ld192YWwgPSAoY2hhciAqKSBtYWxsb2MgKG5ld192YWxfbGVuKTsKKy0gIGlmIChuZXdfdmFsID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIGNwID0gbmV3X3ZhbDsKKy0jIGVsc2UKKy0gIGNwID0gc3RwY3B5IChuZXdfdmFsLCAiTkxTUEFUSD0iKTsKKy0jIGVuZGlmCistCistICBjcCA9IHN0cGNweSAoY3AsIGRpcm5hbWUpOworLSAgY3AgPSBzdHBjcHkgKGNwLCAiLyVML0xDX01FU1NBR0VTLyVOLmNhdDoiKTsKKy0KKy0gIGlmIChvbGRfdmFsID09IE5VTEwpCistICAgIHsKKy0jIGlmIF9fU1REQ19fCistICAgICAgc3RwY3B5IChjcCwgTE9DQUxFRElSICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbHNlCistCistICAgICAgY3AgPSBzdHBjcHkgKGNwLCBMT0NBTEVESVIpOworLSAgICAgIHN0cGNweSAoY3AsICIvJUwvTENfTUVTU0FHRVMvJU4uY2F0Iik7CistIyBlbmRpZgorLSAgICB9CistICBlbHNlCistICAgIHN0cGNweSAoY3AsIG9sZF92YWwpOworLQorLSMgaWYgSEFWRV9TRVRFTlYKKy0gIHNldGVudiAoIk5MU1BBVEgiLCBuZXdfdmFsLCAxKTsKKy0gIGZyZWUgKG5ld192YWwpOworLSMgZWxzZQorLSAgcHV0ZW52IChuZXdfdmFsKTsKKy0gIC8qIERvICpub3QqIGZyZWUgdGhlIGVudmlyb25tZW50IGVudHJ5IHdlIGp1c3QgZW50ZXJlZC4gIEl0IGlzIHVzZWQKKy0gICAgIGZyb20gbm93IG9uLiAgICovCistIyBlbmRpZgorLQorLSNlbmRpZgorLQorLSAgcmV0dXJuIChjaGFyICopIGRvbWFpbm5hbWU7CistfQorLQorLSN1bmRlZiBnZXR0ZXh0CistY2hhciAqCistZ2V0dGV4dCAobXNnKQorLSAgICAgY29uc3QgY2hhciAqbXNnOworLXsKKy0gIGludCBtc2dpZDsKKy0KKy0gIGlmIChtc2cgPT0gTlVMTCB8fCBjYXRhbG9nID09IChubF9jYXRkKSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIC8qIEdldCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBjYXRhbG9nLiAgV2UgYWx3YXlzIHVzZSBzZXQgbnVtYmVyIDEuCistICAgICBUaGUgbWVzc2FnZSBJRCBpcyBjb21wdXRlZCBieSB0aGUgZnVuY3Rpb24gYG1zZ190b19jYXRfaWQnCistICAgICB3aGljaCB3b3JrcyBvbiB0aGUgdGFibGUgZ2VuZXJhdGVkIGJ5IGBwby10by10YmwnLiAgKi8KKy0gIG1zZ2lkID0gbXNnX3RvX2NhdF9pZCAobXNnKTsKKy0gIGlmIChtc2dpZCA9PSAtMSkKKy0gICAgcmV0dXJuIChjaGFyICopIG1zZzsKKy0KKy0gIHJldHVybiBjYXRnZXRzIChjYXRhbG9nLCAxLCBtc2dpZCwgKGNoYXIgKikgbXNnKTsKKy19CistCistLyogTG9vayB0aHJvdWdoIHRoZSB0YWJsZSBgX21zZ190YmwnIHdoaWNoIGhhcyBgX21zZ190YmxfbGVuZ3RoJyBlbnRyaWVzCistICAgZm9yIHRoZSBvbmUgZXF1YWwgdG8gbXNnLiAgSWYgaXQgaXMgZm91bmQgcmV0dXJuIHRoZSBJRC4gIEluIGNhc2Ugd2hlbgorLSAgIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kIHJldHVybiAtMS4gICovCistc3RhdGljIGludAorLW1zZ190b19jYXRfaWQgKG1zZykKKy0gICAgIGNvbnN0IGNoYXIgKm1zZzsKKy17CistICBpbnQgY250OworLQorLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBfbXNnX3RibF9sZW5ndGg7ICsrY250KQorLSAgICBpZiAoc3RyY21wIChtc2csIF9tc2dfdGJsW2NudF0uX21zZykgPT0gMCkKKy0gICAgICByZXR1cm4gX21zZ190YmxbY250XS5fbXNnX251bWJlcjsKKy0KKy0gIHJldHVybiAtMTsKKy19CistCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9DaGFuZ2VMb2cJMTk5OC0wNC0yNiAwOToyMjozNS4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzQ5NzQ5MDAwIC0wNDAwCitAQCAtMSwxMDIyICsxLDQgQEAKKy0xOTk3LTA5LTA2IDAyOjEwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBSZWZvcm1hdCBjb3B5cmlnaHQuCistCistMTk5Ny0wOC0xOSAxNToyMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IFJlbW92ZSB3cm9uZyBjb21tZW50LgorLQorLTE5OTctMDgtMTYgMDA6MTMgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLWRhdGEpOiBEb24ndCBjaGFuZ2UgZGlyZWN0b3J5IHRvIGluc3RhbGwuCistCistMTk5Ny0wOC0wMSAxNDozMCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogY2F0LWNvbXBhdC5jOiBGaXggY29weXJpZ2h0LgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IFVwZGF0ZSBjb3B5cmlnaHQuICBGaXggdHlwb3MuCistCistCSogbDEwbmZsaXN0LmM6IERvbid0IGRlZmluZSBzdHJjaHIgdW5sZXNzICFIQVZFX1NUUkNIUi4KKy0JKF9ubF9tYWtlX2wxMG5mbGlzdCk6IEhhbmRsZSBzcG9uc29yIGFuZCByZXZpc2lvbiBjb3JyZWN0bHkuCistCistCSogZ2V0dGV4dC5jOiBVcGRhdGUgY29weXJpZ2h0LgorLQkqIGdldHRleHQuaDogTGlrZXdpc2UuCistCSogaGFzaC1zdHJpbmcuaDogTGlrZXdpc2UuCistCistCSogZmluZGRvbWFpbi5jOiBSZW1vYXZlIGRlYWQgY29kZS4gIERlZmluZSBzdHJjaHIgb25seSBpZgorLQkhSEFWRV9TVFJDSFIuCistCistCSogZXhwbG9kZW5hbWUuYzogSW5jbHVkZSA8c3lzL3R5cGVzLmg+LgorLQorLQkqIGV4cGxvZGVuYW1lLmM6IFJlZm9ybWF0IGNvcHlyaWdodCB0ZXh0LgorLQkoX25sX2V4cGxvZGVfbmFtZSk6IEZpeCB0eXBvLgorLQorLQkqIGRjZ2V0dGV4dC5jOiBEZWZpbmUgYW5kIHVzZSBfX3NldF9lcnJuby4KKy0JKGd1ZXNzX2NhdGVnb3J5X3ZhbHVlKTogRG9uJ3QgdXNlIHNldGxvY2FsZSBpZiBIQVZFX0xDX01FU1NBR0VTIGlzCistCW5vdCBkZWZpbmVkLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmM6IFByZXR0eSBwcmludGluZy4KKy0KKy0xOTk3LTA1LTAxIDAyOjI1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUpOiBEb24ndCBkZXBlbmQgb24KKy0JSEFWRV9MQ19NRVNTQUdFUy4gIFdlIGRvbid0IG5lZWQgdGhlIG1hY3JvIGhlcmUuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6IERvTid0IHJlZmVyIHRvIEhBVkVfU0VUTE9DQUxFX05VTEwKKy0JbWFjcm8uICBJbnN0ZWFkIHVzZSBIQVZFX0xPQ0FMRV9OVUxMIGFuZCBkZWZpbmUgaXQgd2hlbiB1c2luZworLQlnbGliYywgYXMgaW4gZGNnZXR0ZXh0LmMuCistCVBhdGNoIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGlsb2cuZnI+LgorLQorLQkqIE1ha2VmaWxlLmluIChDUFBGTEFHUyk6IE5ldyB2YXJpYWJsZS4gIFJlcG9ydGVkIGJ5IEZyYW5jLG9pcworLQlQaW5hcmQuCistCistTW9uIE1hciAxMCAwNjo1MToxNyAxOTk3ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogSW1wbGVtZW50IGhhbmRsaW5nIG9mIGxpYnRvb2wuCistCistCSogZ2V0dGV4dFAuaDogQ2hhbmdlIGRhdGEgc3RydWN0dXJlcyBmb3IgdXNlIG9mIGdlbmVyaWMgbG93bGV2ZWwKKy0JaTE4biBmaWxlIGhhbmRsaW5nLgorLQorLVdlZCBEZWMgIDQgMjA6MjE6MTggMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBQdXQgcGFyZW50aGVzZXMgYXJvdW5kIGFyZ3VtZW50cyBvZiBtZW1jcHkgbWFjcm8KKy0JZGVmaW5pdGlvbi4KKy0JKiBsb2NhbGVhbGlhcy5jOiBMaWtld2lzZS4KKy0JKiBsMTBuZmxpc3QuYzogTGlrZXdpc2UuCistCSogZmluZGRvbWFpbi5jOiBMaWtld2lzZS4KKy0JKiBiaW5kdGV4dGRvbS5jOiBMaWtld2lzZS4KKy0JUmVwb3J0ZWQgYnkgVGhvbWFzIEVza2VuLgorLQorLU1vbiBOb3YgMjUgMjI6NTc6NTEgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogdGV4dGRvbWFpbi5jOiBNb3ZlIGRlZmluaXRpb24gb2YgYG1lbWNweWAgbWFjcm8gdG8gcmlnaHQKKy0JcG9zaXRpb24uCistCistRnJpIE5vdiAyMiAwNDowMTo1OCAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgWyFIQVZFX1NUUklOR19IICYmICFfTElCQ106IERlZmluZSBtZW1jcHkgdXNpbmcKKy0gCWJjb3B5IGlmIG5vdCBhbHJlYWR5IGRlZmluZWQuICBSZXBvcnRlZCBieSBUaG9tYXMgRXNrZW4uCistCSogYmluZHRleHRkb20uYzogTGlrZXdpc2UuCistCSogbDEwbmZsaXN0LmM6IExpa2V3aXNlLgorLQkqIGxvY2FsZWFsaWFzLmM6IExpa2V3aXNlLgorLQkqIHRleHRkb21haW4uYzogTGlrZXdpc2UuCistCistVHVlIE9jdCAyOSAxMToxMDoyNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyKTogQ2hhbmdlIHRvIHVzZSBleGVjX3ByZWZpeCBpbnN0ZWFkIG9mCistIAlwcmVmaXguICBSZXBvcnRlZCBieSBLbnV0LUjldmFyZEFrc25lcyA8ZXRva25hQGV0by5lcmljc3Nvbi5zZT4uCistCistU2F0IEF1ZyAzMSAwMzowNzowOSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX25sX25vcm1hbGl6ZV9jb2Rlc2V0KTogV2UgY29udmVydCB0byBsb3dlciBjYXNlLAorLQlzbyBkb24ndCBwcmVwZW5kIHVwcGVyY2FzZSBgSVNPJyBmb3Igb25seSBudW1lcmljIGFyZy4KKy0KKy1GcmkgSnVsIDE5IDAwOjE1OjQ2IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIGwxMG5mbGlzdC5jOiBNb3ZlIGluY2x1c2lvbiBvZiBhcmd6LmgsIGN0eXBlLmgsIHN0ZGxpYi5oIGFmdGVyCistCWRlZmluaXRpb24gb2YgX0dOVV9TT1VSQ0UuICBQYXRjaCBieSBSb2xhbmQgTWNHcmF0aC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAodW5pbnN0YWxsKTogRml4IGFub3RoZXIgYnVnIHdpdGggYGZvcicgbG9vcCBhbmQKKy0JZW1wdHkgYXJndW1lbnRzLiAgUGF0Y2ggYnkgSmltIE1leWVyaW5nLiAgQ29ycmVjdCBuYW1lIG9zCistCXVuaW5zdGFsbGVkIGZpbGVzOiBubyBpbnRsLSBwcmVmaXggYW55bW9yZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1kYXRhKTogQWdhaW4gd29yayBhcm91bmQgc2hlbGxzIHdoaWNoCistCWNhbm5vdCBoYW5kbGUgbXB0eSBmb3IgbGlzdC4gIFJlcG9ydGVkIGJ5IEppbSBNZXllcmluZy4KKy0KKy1TYXQgSnVsIDEzIDE4OjExOjM1IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogU3BsaXQgZ29hbC4gIE5vdyBkZXBlbmQgb24gaW5zdGFsbC1leGVjCistICAgICAgICBhbmQgaW5zdGFsbC1kYXRhLgorLQkoaW5zdGFsbC1leGVjLCBpbnN0YWxsLWRhdGEpOiBOZXcgZ29hbHMuICBDcmVhdGVkIGZyb20gZm9ybWVyCistCWluc3RhbGwgZ29hbC4KKy0JUmVwb3J0ZWQgYnkgS2FybCBCZXJyeS4KKy0KKy1TYXQgSnVuIDIyIDA0OjU4OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChNS0lOU1RBTExESVJTKTogTmV3IHZhcmlhYmxlLiAgUGF0aCB0bworLSAgICAgICAgbWtpbnN0YWxsZGlycyBzY3JpcHQuCistCShpbnN0YWxsKTogdXNlIE1LSU5TVEFMTERJUlMgdmFyaWFibGUgb3IgaWYgdGhlIHNjcmlwdCBpcyBub3QgcHJlc2VudAorLQl0cnkgdG8gZmluZCBpdCBpbiB0aGUgJHRvcF9zY3JkaXIpLgorLQorLVdlZCBKdW4gMTkgMDI6NTY6NTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbDEwbmZsaXN0LmM6IExpbnV4IGxpYmMgKnBhcnRseSogaW5jbHVkZXMgdGhlIGFyZ3pfKiBmdW5jdGlvbnMuCistCUdyci4gIFdvcmsgYXJvdW5kIGJ5IHJlbmFtaW5nIHRoZSBzdGF0aWMgdmVyc2lvbiBhbmQgdXNlIG1hY3JvcworLQlmb3IgcmVuYW1pbmcuCistCistVHVlIEp1biAxOCAyMDoxMToxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYzogQ29ycmVjdCBwcmVzZW5jZSB0ZXN0IG1hY3JvcyBvZiBfX2FyZ3pfKiBmdW5jdGlvbnMuCistCistCSogbDEwbmZsaXN0LmM6IEluY2x1ZGUgPGFyZ3ouaD4gYmFzZWQgb24gdGVzdCBvZiBpdCBpbnN0ZWFkIHdoZW4KKy0JX19hcmd6XyogZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUuCistCVJlcG9ydGVkIGJ5IEFuZHJlYXMgU2Nod2FiLgorLQorLVRodSBKdW4gMTMgMTU6MTc6NDQgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogZXhwbG9kZW5hbWUuYywgbDEwbmZsaXN0LmM6IERlZmluZSBOVUxMIGZvciBkdW1iIHN5c3RlbXMuCistCistVHVlIEp1biAxMSAxNzowNToxMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluLCBsaWJnZXR0ZXh0LmggKGRjZ2V0dGV4dCk6IFJlbmFtZSBsb2NhbCB2YXJpYWJsZQorLQlyZXN1bHQgdG8gX19yZXN1bHQgdG8gcHJldmVudCBuYW1lIGNsYXNoLgorLQorLQkqIGwxMG5mbGlzdC5jLCBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYzogRGVmaW5lIF9HTlVfU09VUkNFIHRvCistICAgICAgICBnZXQgcHJvdG90eXBlIGZvciBzdHBjcHkgYW5kIHN0cmNhc2VjbXAuCistCistCSogaW50bGguaW5zdC5pbiwgbGliZ2V0dGV4dC5oOiBNb3ZlIGRlY2xhcmF0aW9uIG9mCistCWBfbmxfbXNnX2NhdF9jbnRyJyBvdXRzaWRlIF9fZXh0ZW5zaW9uX18gYmxvY2sgdG8gcHJldmVudCB3YXJuaW5nCistCWZyb20gZ2NjJ3MgLVduZXN0ZWQtZXh0ZXJuIG9wdGlvbi4KKy0KKy1GcmkgSnVuICA3IDAxOjU4OjAwIDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVtb3ZlIGNvbW1lbnQuCistCistVGh1IEp1biAgNiAxNzoyODoxNyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IFdvcmsgYXJvdW5kIGZvciBhbm90aGVyIEJ1Z2xpeCBzdHVwaWRpdHkuCistCUFsd2F5cyB1c2UgYW4gYGVsc2UnIGNsb3NlIGZvciBgaWYncy4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW50bGguaW5zdCk6IENvcnJlY3QgdHlwbyBpbiBwaG9ueSBydWxlLgorLQlSZXBvcnRlZCBieSBOZWxzb24gQmVlYmUuCistCistVGh1IEp1biAgNiAwMTo0OTo1MiAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBkY2dldHRleHQuYyAocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcmlhYmxlIGFsbG9jYV9saXN0IHRvCistCWJsb2NrX2xpc3QgYXMgdGhlIG1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbG9jYWxlYWxpYXMuYyBbIUhBVkVfQUxMT0NBXTogRGVmaW5lIGFsbG9jYSBhcyBtYWNybyB1c2luZworLSAgICAgICAgbWFsbG9jLgorLQkocmVhZF9hbGlhc19maWxlKTogUmVuYW1lIHZhcnJpYWJlIGFsbG9jYV9saXN0IHRvIGJsb2NrX2xpc3QgYXMgdGhlCistCW1hY3JvIGNhbGxzIGFzc3VtZS4KKy0JUGF0Y2ggYnkgRXJpYyBCYWNrdXMuCistCistCSogbDEwbmZsaXN0LmM6IENvcnJlY3QgY29uZGl0aW9uYWwgZm9yIDxhcmd6Lmg+IGluY2x1c2lvbi4KKy0JUmVwb3J0ZWQgYnkgUm9sYW5kIE1jR3JhdGguCistCistCSogTWFrZWZpbGUuaW4gKGFsbCk6IERlcGVuZCBvbiBhbGwtQFVTRV9JTkNMVURFRF9MSUJJTlRMQCwgbm90CistICAgICAgICBhbGwtQFVTRV9OTFNALgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogaW50bGguaW5zdCBjb21lcyBmcm9tIGxvY2FsIGRpciwgbm90CistICAgICAgICAkKHNyY2RpcikuCistCistCSogTWFrZWZpbGUuaW4gKGludGxoLmluc3QpOiBTcGVjaWFsIGhhbmRsaW5nIG9mIHRoaXMgZ29hbC4gIElmCistCXVzZWQgaW4gZ2V0dGV4dCwgdGhpcyBpcyByZWFsbHkgYSBydWwgdG8gY29uc3RydWN0IHRoaXMgZmlsZS4gIElmCistCXVzZWQgaW4gYW55IG90aGVyIHBhY2thZ2UgaXQgaXMgZGVmaW5lZCBhcyBhIC5QSE9OWSBydWxlIHdpdGgKKy0JZW1wdHkgYm9keS4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEV4dHJhY3QgbG9jYWxlIGZpbGUgaW5mb3JtYXRpb24gaGFuZGxpbmcgaW50bworLQlsMTBuZmlsZS5jLiAgUmVuYW1lIGxvY2FsIHN0cGNweV9fIGZ1bmN0aW9uIHRvIHN0cGNweS4KKy0KKy0JKiBkY2dldHRleHQuYyAoc3RwY3B5KTogQWRkIGxvY2FsIGRlZmluaXRpb24uCistCistCSogbDEwbmZsaXN0LmM6IFNvbHZlIHNvbWUgcG9ydGFiaWxpdHkgcHJvYmxlbXMuICBQYXRjaGVzIHBhcnRseSBieQorLQlUaG9tYXMgRXNrZW4uICBBZGQgbG9jYWwgZGVmaW5pdGlvbiBvZiBzdHBjcHkuCistCistVHVlIEp1biAgNCAwMjo0Nzo0OSAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBpbnRsaC5pbnN0LmluOiBEb24ndCBkZXBlbmQgaW5jbHVkaW5nIDxsb2NhbGUuaD4gb24KKy0JSEFWRV9MT0NBTEVfSC4gIEluc3RlYWQgY29uZmlndXJlIG11c3QgcmV3cml0ZSB0aGlzIGZpaWxlCistCWRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjb25maWd1cmUgcnVuLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogbGliaW50bC5pbnN0IGlzIG5vdyBjYWxsZWQgaW50bGguaW5zdC4KKy0JQWRkIHJ1bGVzIGZvciB1cGRhdGluZyBpbnRsaC5pbnN0IGZyb20gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsaWJpbnRsLmluc3Q6IFJlbmFtZWQgdG8gaW50bGguaW5zdC5pbi4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBkY2dldHRleHQuYyBbX19HTlVDX19dOiBEZWZpbmUgSEFWRV9BTExPQ0EgdG8gMQorLSAgICAgICAgYmVjYXVzZSBnY2MgaGFzIF9fYnVpdGxpbl9hbGxvY2EuCistCVJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLU1vbiBKdW4gIDMgMDA6MzI6MTYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGxjaGVjayk6IE5ldyBnb2FsIHRvIGZ1bGZpbGwgbmVlZHMgb2YKKy0gICAgICAgIGF1dG9tYWtlJ3MgZGlzdGNoZWNrLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsKTogUmVvcmRlciBjb21tYW5kcyBzbyB0aGF0IFZFUlNJT04gaXMKKy0gICAgICAgIGZvdW5kLgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogTm93IHVzZSBzdWJkaXJlY3RvcnkgaW50bC8gaW4KKy0gICAgICAgIEBkYXRhZGlyQC9nZXR0ZXh0LgorLQkoQ09NU1JDUyk6IEFkZCBsMTBuZmlsZS5jLgorLQkoT0JKRUNUUyk6IEFkZCBsMTBuZmlsZS5vLgorLQkoRElTVEZJTEVTKTogUmVuYW1lIHRvIERJU1RGSUxFLm5vcm1hbC4gIFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoRElTVEZJTEUuZ2V0dGV4dCk6IFJlbW92ZSAkKERJU1RGSUxFUy5jb21tb24pLgorLQkoYWxsLWdldHRleHQpOiBSZW1vdmUgZ29hbC4KKy0JKGluc3RhbGwpOiBJZiAkKFBBQ0tBR0UpID0gZ2V0dGV4dCBpbnN0YWxsLCBvdGhlcndvc2UgZG8gbm90aGluZy4gIE5vCistCXBhY2thZ2UgYnV0IGdldHRleHQgaXRzZWxmIHNob3VsZCBpbnN0YWxsIGxpYmludGwuaCArIGhlYWRlcnMuCistCShkaXN0KTogRXh0ZW5kIGdvYWwgdG8gd29yayBmb3IgZ2V0dGV4dCwgdG9vLgorLQkoZGlzdC1nZXR0ZXh0KTogUmVtb3ZlIGdvYWwuCistCistCSogZGNnZXR0ZXh0LmMgWyFIQVZFX0FMTE9DQV06IERlZmluZSBtYWNybyBhbGxvY2EgYnkgdXNpbmcgbWFsbG9jLgorLQorLVN1biBKdW4gIDIgMTc6MzM6MDYgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CistCistCSogbG9hZG1zZ2NhdC5jIChfbmxfbG9hZF9kb21haW4pOiBQYXJhbWV0ZXIgaXMgbm93IGNvbWVzIGZyb20KKy0gICAgICAgIGZpbmRfbDEwbmZpbGUuCistCistU2F0IEp1biAgMSAwMjoyMzowMyAxOTk2ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KKy0KKy0JKiBsMTBuZmxpc3QuYyAoX19hcmd6X25leHQpOiBBZGQgZGVmaW5pdGlvbi4KKy0KKy0JKiBkY2dldHRleHQuYyBbIUhBVkVfQUxMT0NBXTogQWRkIGNvZGUgZm9yIGhhbmRsaW5nIG1pc3NpbmcgYWxsb2NhCistCWNvZGUuICBVc2UgbmV3IGwxMG5maWxlIGhhbmRsaW5nLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgWyFIQVZFX0FMTE9DQV06IEFkZCBjb2RlIGZvciBoYW5kbGluZyBtaXNzaW5nCistICAgICAgICBhbGxvY2EgY29kZS4KKy0KKy0JKiBsMTBuZmxpc3QuYzogSW5pdGlhbCByZXZpc2lvbi4KKy0KKy1UdWUgQXByICAyIDE4OjUxOjE4IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGFsbC1nZXR0ZXh0KTogTmV3IGdvYWwuICBTYW1lIGFzIGFsbC15ZXMuCistCistVGh1IE1hciAyOCAyMzowMToyMiAxOTk2ICBLYXJsIEVpY2h3YWxkZXIgIDxrZUBrZS5jZW50cmFsLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChnZXR0ZXh0c3JjZGlyKTogRGVmaW5lIHVzaW5nIEBkYXRhZGlyQC4KKy0KKy1UdWUgTWFyIDI2IDEyOjM5OjE0IDE5OTYgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZmluZGRvbWFpbi5jOiBJbmNsdWRlIDxjdHlwZS5oPi4gIFJlcG9ydGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVNhdCBNYXIgMjMgMDI6MDA6MzUgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IFJlbmFtZSB0byBzdHBjcHlfXyB0byBwcmV2ZW50IGNsYXNoaW5nCistICAgICAgICB3aXRoIGV4dGVybmFsIGRlY2xhcmF0aW9uLgorLQorLVNhdCBNYXIgIDIgMDA6NDc6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsLW5vKTogUmVuYW1lIGZyb20gYWxsX25vLgorLQorLVNhdCBGZWIgMTcgMDA6MjU6NTkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIFtsb2FkZWRfZG9tYWluXTogQXJyYXkgYHN1Y2Nlc3NvcicgbXVzdCBub3cgY29udGFpbiB1cAorLSAgICAgICAgdG8gNjMgZWxlbWVudHMgKGJlY2F1c2Ugb2YgY29kZXNldCBuYW1lIG5vcm1hbGl6YXRpb24pLgorLQorLQkqIGZpbmRkb21haW4uYzogSW1wbGVtZW50IGNvZGVzZXQgbmFtZSBub3JtYWxpemF0aW9uLgorLQorLVRodSBGZWIgMTUgMDQ6Mzk6MDkgMTk5NiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoYWxsKTogRGVmaW5lIHRvIGBhbGwtQFVTRV9OTFNAJy4KKy0JKGFsbC15ZXMsIGFsbF9ubyk6IE5ldyBnb2Fscy4gIGBhbGwtbm8nIGlzIG5vb3AsIGBhbGwteWVzJworLQlpcyBmb3JtZXIgYWxsLgorLQorLU1vbiBKYW4gMTUgMjE6NDY6MDEgMTk5NiAgSG93YXJkIEdheWxlICA8aG93YXJkQGhhbC5jb20+CistCistCSogbG9jYWxlYWxpYXMuYyAoYWxpYXNfY29tcGFyZSk6IEluY3JlbWVudCBzdHJpbmcgcG9pbnRlcnMgaW4gbG9vcAorLSAgICAgICAgb2Ygc3RyY2FzZWNtcCByZXBsYWNlbWVudC4KKy0KKy1GcmkgRGVjIDI5IDIxOjE2OjM0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtc3JjKTogV2hvIGNvbW1lbnRlZCB0aGlzIGdvYWwgb3V0ID8gOi0pCistCistRnJpIERlYyAyOSAxNTowODoxNiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOiBTYXZlIGBlcnJubycuICBGYWlsaW5nIHN5c3RlbSBjYWxscworLQlzaG91bGQgbm90IGVmZmVjdCBpdCBiZWNhdXNlIGEgbWlzc2luZyBjYXRhbG9nIGlzIG5vIGVycm9yLgorLQlSZXBvcnRlZCBieSBIYXJhbGQgSzxvOj5uaWcgPGtvZW5pZ0B0YXQucGh5c2lrLnVuaS10dWViaW5nZW4uZGU+LgorLQorLVR1ZSBEZWMgMTkgMjI6MDk6MTMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoTWFrZWZpbGUpOiBFeHBsaWNpdGx5IHVzZSAkKFNIRUxMKSBmb3IgcnVubmluZworLSAgICAgICAgc2hlbGwgc2NyaXB0cy4KKy0KKy1GcmkgRGVjIDE1IDE3OjM0OjU5IDE5OTUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6IE9ubHkgaW5zdGFsbCBsaWJyYXJ5IGFuZCBoZWFkZXIgd2hlbgorLQl3ZSB1c2UgdGhlIG93biBpbXBsZW1lbnRhdGlvbi4gIERvbid0IGRvIGl0IHdoZW4gdXNpbmcgdGhlCistCXN5c3RlbSdzIGdldHRleHQgb3IgY2F0Z2V0cyBmdW5jdGlvbnMuCistCistCSogZGNnZXR0ZXh0LmMgKGZpbmRfbXNnKTogTXVzdCBub3Qgc3dhcCBkb21haW4tPmhhc2hfc2l6ZSBoZXJlLgorLQorLVNhdCBEZWMgIDkgMTY6MjQ6MzcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jLCBsaWJpbnRsLmluc3QsIGxpYmdldHRleHQuaCwgaGFzaC1zdHJpbmcuaCwKKy0JZ2V0dGV4dFAuaCwgZmluZGRvbWFpbi5jLCBkY2dldHRleHQuYywgY2F0LWNvbXBhdC5jOgorLQlVc2UgUEFSQU1TIGluc3RlYWQgb2YgX19QLiAgU3VnZ2VzdGVkIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBEZWMgIDUgMTE6Mzk6MTQgMTk5NSAgTGFycnkgU2Nod2ltbWVyICA8cm9zZWJ1ZEBjeWNsb25lLnN0YW5mb3JkLmVkdT4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFVzZSBgI2lmICFkZWZpbmVkIChfTElCSU5UTF9IKScgaW5zdGVhZCBvZiBgI2lmCistCSFfTElCSU5UTF9IJyBiZWNhdXNlIFNvbGFyaXMgZGVmaW5lcyBfTElCSU5UTF9IIGFzIGVtcHR5LgorLQorLU1vbiBEZWMgIDQgMTU6NDI6MDcgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOgorLQlJbnN0YWxsIGxpYmludGwuaW5zdCBpbnN0ZWFkIG9mIGxpYmludGwuaC5pbnN0YWxsLgorLQorLVNhdCBEZWMgIDIgMjI6NTE6MzggMTk5NSAgTWFyY3VzIERhbmllbHMgIDxtYXJjdXNAc3lzYy5wZHguZWR1PgorLQorLQkqIGNhdC1jb21wYXQuYyAodGV4dGRvbWFpbik6CistCVJldmVyc2Ugb3JkZXIgaW4gd2hpY2ggZmlsZXMgYXJlIHRyaWVkIHlvdSBsb2FkLiAgRmlyc3QKKy0JdHJ5IGxvY2FsIGZpbGUsIHdoZW4gdGhpcyBmYWlsZWQgYWJzb2x1dGUgcGF0aC4KKy0KKy1XZWQgTm92IDI5IDAyOjAzOjUzIDE5OTUgIE5lbHNvbiBILiBGLiBCZWViZSAgPGJlZWJlQG1hdGgudXRhaC5lZHU+CistCistCSogY2F0LWNvbXBhdC5jIChiaW5kdGV4dGRvbWFpbik6IEFkZCBtaXNzaW5nIHsgfS4KKy0KKy1TdW4gTm92IDI2IDE4OjIxOjQxIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliaW50bC5pbnN0OiBBZGQgbWlzc2luZyBfX1AgZGVmaW5pdGlvbi4gIFJlcG9ydGVkIGJ5IE5lbHNvbiBCZWViZS4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JQWRkIGR1bW15IGBhbGwnIGFuZCBgZHZpJyBnb2Fscy4gIFJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistU2F0IE5vdiAyNSAxNjoxMjowMSAxOTk1ICBGcmFuYyxvaXMgUGluYXJkICA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+CistCistCSogaGFzaC1zdHJpbmcuaDogQ2FwaXRhbGl6ZSBhcmd1bWVudHMgb2YgbWFjcm9zLgorLQorLVNhdCBOb3YgMjUgMTI6MDE6MzYgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogUHJldmVudCBmaWxlcyBuYW1lcyBsb25nZXIgdGhhbiAxMworLQljaGFyYWN0ZXJzLiAgbGliaW50bC5oLmdsaWJjLT5saWJpbnRsLmdsaWJjLAorLQlsaWJpbnRsLmguaW5zdGFsbC0+bGliaW50bC5pbnN0LiAgUmVwb3J0ZWQgYnkgSm9zaHVhIFIuIFBvdWxzb24uCistCistU2F0IE5vdiAyNSAxMTozMToxMiAxOTk1ICBFcmljIEJhY2t1cyAgPGVyaWNiQGxzaWQuaHAuY29tPgorLQorLQkqIGRjZ2V0dGV4dC5jOiBGaXggYnVnIGluIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMuCistCistU2F0IE5vdiAyNSAwMjozNToyNyAxOTk1ICBOZWxzb24gSC4gRi4gQmVlYmUgIDxiZWViZUBtYXRoLnV0YWguZWR1PgorLQorLQkqIGxpYmdldHRleHQuaDogU29sYXJpcyBjYyBkb2VzIG5vdCB1bmRlcnN0YW5kCistCSAjaWYgIVNZTUJPTDEgJiYgIVNZTUJPTDIuICBTYWQJYnV0IHRydWUuCistCistVGh1IE5vdiAyMyAxNjoyMjoxNCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGhhc2gtc3RyaW5nLmggKGhhc2hfc3RyaW5nKToKKy0JRml4IGZvciBtYWNoaW5lIHdpdGggPjMyIGJpdCBgdW5zaWduZWQgbG9uZydzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChEQ0dFVFRFWFQpOgorLQlGaXggaG9ycmlibGUgYnVnIGluIGxvb3AgZm9yIGFsdGVybmF0aXZlIHRyYW5zbGF0aW9uLgorLQorLVRodSBOb3YgMjMgMDE6NDU6MjkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluLCBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOgorLQlTb21lIGZ1cnRoZXIgc2ltcGxpZmljYXRpb25zIGluIG1lc3NhZ2UgbnVtYmVyIGdlbmVyYXRpb24uCistCistTW9uIE5vdiAyMCAyMTowODo0MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmludGwuaC5nbGliYzogVXNlIF9fY29uc3QgaW5zdGVhZCBvZiBjb25zdCBpbiBwcm90b3R5cGVzLgorLQorLQkqIE1ha2VmaWxlLmluIChpbnN0YWxsLXNyYyk6CistCUluc3RhbGwgbGliaW50bC5oLmluc3RhbGwgaW5zdGVhZCBvZiBsaWJpbnRsLmguICBUaGlzCistCWlzIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uLiAgU3VnZ2VzdGVkIGJ5IFBldGVyIE1pbGxlci4KKy0KKy0JKiBsaWJpbnRsLmguaW5zdGFsbCwgbGliaW50bC5oLmdsaWJjOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKF9ubF9leHBhbmRfYWxpYXMsIHJlYWRfYWxpYXNfZmlsZSk6CistCVByb3RlY3QgcHJvdG90eXBlcyBpbiB0eXBlIGNhc3RzIGJ5IF9fUC4KKy0KKy1UdWUgTm92IDE0IDE2OjQzOjU4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogaGFzaC1zdHJpbmcuaDogQ29ycmVjdCBwcm90b3R5cGUgZm9yIGhhc2hfc3RyaW5nLgorLQorLVN1biBOb3YgMTIgMTI6NDI6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6IEFkZCBwcm90b3R5cGUuCistCistCSogZ2V0dGV4dFAuaDogRml4IGNvcHlyaWdodC4KKy0JKFNXQVApOiBBZGQgcHJvdG90eXBlLgorLQorLVdlZCBOb3YgIDggMjI6NTY6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOiBGb3Jnb3Qgc2l6ZW9mLgorLQlBdm9pZCBjYWxsaW5nICpwcmludGYgZnVuY3Rpb24uICBUaGlzIGludHJvZHVjZXMgYSBiaWcgb3ZlcmhlYWQuCistCVBhdGNoIGJ5IFJvbGFuZCBNY0dyYXRoLgorLQorLVR1ZSBOb3YgIDcgMTQ6MjE6MDggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMsIGNhdC1jb21wYXQuYzogV3JvbmcgaW5kZW50YXRpb24gaW4gI2lmIGZvciBzdHBjcHkuCistCistCSogZmluZGRvbWFpbi5jIChzdHBjcHkpOgorLQlEZWZpbmUgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uIGxvY2FsLiAgVGhlIG1hY3JvIHdhcyB0byBmbGFreS4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEZpeCB0eXBvLgorLQorLQkqIHhvcGVuLW1zZy5zZWQsIGxpbnV4LW1zZy5zZWQ6CistCVdoaWxlIGJyaW5naW5nIG1lc3NhZ2UgbnVtYmVyIHRvIHJpZ2h0IHBsYWNlIG9ubHkgYWNjZXB0IGRpZ2l0cy4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBOb3cgdGhhdCB0aGUgY291bnRlciBkb2VzIG5vdCBoYXZlCistCWxlYWRpbmcgMHMgd2UgZG9uJ3QgbmVlZCB0byByZW1vdmUgdGhlbS4gIFJlcG9ydGVkIGJ5IE1hcmN1cworLQlEYW5pZWxzLgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOiBVc2UgJCh0b3Bfc3JkaXIpIGluCistCWRlcGVuZGVuY3kuICBSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IChzdHBjcHkpIFshX0xJQkMgJiYgIUhBVkVfU1RQQ1BZXTogRGVmaW5lIHJlcGxhY2VtZW50LgorLQlHZW5lcmFsbHkgY2xlYW51cCB1c2luZyAjaWYgaW5zdGVhZCBvZiAjaWZuZGVmLgorLQorLQkqIE1ha2VmaWxlLmluOiBDb3JyZWN0IHR5cG9zIGluIGNvbW1lbnQuICBCeSBGcmFuYyxvaXMgUGluYXJkLgorLQorLU1vbiBOb3YgIDYgMDA6Mjc6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1zcmMpOiBEb24ndCBpbnN0YWxsIGxpYmludGwuaCBhbmQgbGliaW50bC5hCistCWlmIHdlIHVzZSBhbiBhdmFpbGFibGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4KKy0KKy1TdW4gTm92ICA1IDIyOjAyOjA4IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbGliZ2V0dGV4dC5oOiBGaXggdHlwbzogSEFWRV9DQVRHRVRUUyAtPiBIQVZFX0NBVEdFVFMuICBSZXBvcnRlZAorLQlieSBGcmFuYyxvaXMgUGluYXJkLgorLQorLQkqIGxpYmdldHRleHQuaDogVXNlICNpZiBpbnN0ZWFkIG9mICNpZmRlZi8jaWZuZGVmLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JQ29tbWVudHMgZGVzY3JpYmluZyB3aGF0IGhhcyB0byBiZSBkb25lIHNob3VsZCBzdGFydCB3aXRoIEZJWE1FLgorLQorLVN1biBOb3YgIDUgMTk6Mzg6MDEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogU3BsaXQuICBVc2UgRElTVEZJTEVTIHdpdGggbm9ybWFsIG1lYW5pbmcuCistCURJU1RGSUxFUy5jb21tb24gbmFtZXMgdGhlIGZpbGVzIGNvbW1vbiB0byBib3RoIGRpc3QgZ29hbHMuCistCURJU1RGSUxFUy5nZXR0ZXh0IGFyZSB0aGUgZmlsZXMgb25seSBkaXN0cmlidXRlZCBpbiBHTlUgZ2V0dGV4dC4KKy0KKy1TdW4gTm92ICA1IDE3OjMyOjU0IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogZGNnZXR0ZXh0LmMgKERDR0VUVEVYVCk6IENvcnJlY3Qgc2VhcmNoaW5nIGluIGRlcml2ZWQgbG9jYWxlcy4KKy0JVGhpcyB3YXMgbmVjZXNzYXJ5IHNpbmNlIGEgY2hhbmdlIGluIF9ubF9maW5kX21zZyBzZXZlcmFsIHdlZWtzCistCWFnby4gIEkgcmVhbGx5IGRvbid0IGtub3cgdGhpcyBpcyBzdGlsbCBub3QgZml4ZWQuCistCistU3VuIE5vdiAgNSAxMjo0MzoxMiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKTogVGVzdCBmb3IgRklMRU5BTUUgPT0gTlVMTC4gIFRoaXMKKy0JbWlnaHQgbWFyayBhIHNwZWNpYWwgY29uZGl0aW9uLgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOiBEb24ndCBtYWtlIGlsbGVnYWwgZW50cnkgYXMgZGVjaWRlZC4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZGlzdCk6IFN1cHByZXNzIGVycm9yIG1lc3NhZ2Ugd2hlbiBsbiBmYWlsZWQuCistCUdldCBmaWxlcyBmcm9tICQoc3JjZGlyKSBleHBsaWNpdGx5LgorLQorLQkqIGxpYmdldHRleHQuaCAoZ2V0dGV4dF9jb25zdCk6IFJlbmFtZSB0byBnZXR0ZXh0X25vb3AuCistCistRnJpIE5vdiAgMyAwNzozNjo1MCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAobWFrZV9lbnRyeV9yZWMpOgorLQlQcm90ZWN0IGFnYWluc3Qgd3JvbmcgbG9jYWxlIG5hbWVzIGJ5IHRlc3RpbmcgbWFzay4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKGdldHRleHRfY29uc3QpOiBBZGQgbWFjcm8gZGVmaW5pdGlvbi4KKy0JQ2FwaXRhbGl6ZSBtYWNybyBhcmd1bWVudHMuCistCistVGh1IE5vdiAgMiAyMzoxNTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2ZpbmRfZG9tYWluKToKKy0JVGVzdCBmb3IgcG9pbnRlciAhPSBOVUxMIGJlZm9yZSBhY2Nlc3NpbmcgdmFsdWUuCistCVJlcG9ydGVkIGJ5IFRvbSBUcm9tZXkuCistCistCSogZ2V0dGV4dC5jIChOVUxMKToKKy0JRGVmaW5lIGFzICh2b2lkKikwIGluc3RhZCBvZiAwLiAgUmVwb3J0ZWQgYnkgRnJhbmMsb2lzIFBpbmFyZC4KKy0KKy1Nb24gT2N0IDMwIDIxOjI4OjUyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogcG8ydGJsLnNlZC5pbjogU2VyaW91cyB0eXBvIGJ1ZyBmaXhlZCBieSBKaW0gTWV5ZXJpbmcuCistCistU2F0IE9jdCAyOCAyMzoyMDo0NyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxpYmdldHRleHQuaDogRGlzYWJsZSBkY2dldHRleHQgb3B0aW1pemF0aW9uIGZvciBTb2xhcmlzIDIuMy4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChhbGlhc19jb21wYXJlKToKKy0JUGV0ZXIgTWlsbGVyIHJlcG9ydGVkIHRoYXQgdG9sb3dlciBpbiBzb21lIHN5c3RlbXMgaXMKKy0JZXZlbiBkdW1iZXIgdGhhbiBJIHRob3VnaHQuICBQcm90ZWN0IGNhbGwgYnkgYGlzdXBwZXInLgorLQorLUZyaSBPY3QgMjcgMjI6MjI6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAobGliZGlyLCBpbmNsdWRlZGlyKTogTmV3IHZhcmlhYmxlcy4KKy0JKGluc3RhbGwtc3JjKTogSW5zdGFsbCBsaWJpbnRsLmEgYW5kIGxpYmludGwuaCBpbiBjb3JyZWN0IGRpcnMuCistCistRnJpIE9jdCAyNyAyMjowNzoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogRml4IHR5cG86IGludHJsLmNvbXBhdC5jIC0+IGludGwtY29tcGF0LmMuCistCistCSogcG8ydGJsLnNlZC5pbjogUGF0Y2ggZm9yIGJ1Z2d5IFNFRHMgYnkgQ2hyaXN0aWFuIHZvbiBSb3F1ZXMuCistCistCSogbG9jYWxlYWxpYXMuYzoKKy0JRml4IHR5cG8gYW5kIHN1cGVyZmxvdXMgdGVzdC4gIFJlcG9ydGVkIGJ5IENocmlzdGlhbiB2b24gUm9xdWVzLgorLQorLUZyaSBPY3QgIDYgMTE6NTI6MDUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUNvcnJlY3Qgc29tZSByZW1haW5kZXIgZnJvbSB0aGUgcHJlLUNFTiBzeW50YXguICBOb3cKKy0Jd2UgZG9uJ3QgaGF2ZSBhIGNvbnN0YW50IG51bWJlciBvZiBzdWNjZXNzb3JzIGFueW1vcmUuCistCistV2VkIFNlcCAyNyAyMTo0MToxMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBBZGQgbGliaW50bC5oLmdsaWJjLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0LWxpYmMpOiBBZGQgZ29hbCBmb3IgcGFja2luZyBzb3VyY2VzIGZvciBnbGliYy4KKy0JKENPTVNSQ1MsIENPTUhEUlMpOiBTcGxpdHRlZCB0byBzZXBhcmF0ZSBzb3VyY2VzIHNoYXJlZCB3aXRoIGdsaWJjLgorLQorLQkqIGxvYWRtc2djYXQuYzogRm9yZ2V0IHRvIGNvbnRpbnVlICNpZiBsaW5lLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6CistCVtfTElCQ106IFJlbmFtZSBzdHJjYXNlY21wIHRvIF9fc3RyY2FzZWNtcCB0byBrZWVwIEFOU0kgQyBuYW1lCistCXNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jLCBmaW5kZG9tYWluLmM6IEJldHRlciBjb21tZW50IHRvIGxhc3QgY2hhbmdlLgorLQorLQkqIGxvYWRtc2djYXQuYzoKKy0JW19MSUJDXTogUmVuYW1lIGZzdGF0LCBvcGVuLCBjbG9zZSwgcmVhZCwgbW1hcCwgYW5kIG11bm1hcCB0bworLQlfX2ZzdGF0LCBfX29wZW4sIF9fY2xvc2UsIF9fcmVhZCwgX19tbWFwLCBhbmQgX19tdW5tYXAgcmVzcAorLQl0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGZpbmRkb21haW4uYzoKKy0JW19MSUJDXTogUmVuYW1lIHN0cGNweSB0byBfX3N0cGNweSB0byBrZWVwIEFOU0kgQyBuYW1lIHNwYWNlIGNsZWFuLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlbX0xJQkNdOiBSZW5hbWUgZ2V0Y2VkIGFuZCBzdHBjcHkgdG8gX19nZXRjd2QgYW5kIF9fc3RwY3B5IHJlc3AgdG8KKy0Ja2VlcCBBTlNJIEMgbmFtZSBzcGFjZSBjbGVhbi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCUluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIHRob3NlIG9sZCBTeXNWIHN5c3RlbXMgb3V0IHRoZXJlLgorLQlSZXBvcnRlZCBieSBGcmFuY2VzY28gUG90b3J0aWAuCistCistCSogbG9hZG1zZ2NhdC5jICh1c2VfbW1hcCk6IERlZmluZSBpZiBjb21waWxlZCBmb3IgZ2xpYmMuCistCistCSogYmluZHRleHRkb20uYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEZpeCAyIHRpbWVzIGRlZmllbmQgLT4gZGVmaW5lZC4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IEluY2x1ZGUgbGliaW50bC5oIGluc3RlYWQgb2YgbGliZ2V0dGV4dC5oIHdoZW4KKy0JY29tcGlsaW5nIGZvciBnbGliYy4gIEluY2x1ZGUgYWxsIHRob3NlIHN0YW5kYXJkIGhlYWRlcnMKKy0JdW5jb25kaXRpb25hbGx5IGlmIF9MSUJDIGlzIGRlZmluZWQuCistCistCSogbG9jYWxlYWxpYXMuYywgbG9hZG1zZ2NhdC5jOiBQcmVwYXJlIHRvIGJlIGNvbXBpbGVkIGluIGdsaWJjLgorLQorLQkqIGdldHRleHQuYzoKKy0JSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbiBjb21waWxpbmcgZm9yIGdsaWJjLgorLQlHZXQgTlVMTCBmcm9tIHN0ZGRlZi5oIGlmIHdlIGNvbXBpbGUgZm9yIGdsaWJjLgorLQorLQkqIGZpbmRkb21haW4uYzogSW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZiBsaWJnZXR0ZXh0Lmggd2hlbgorLQljb21waWxpbmcgZm9yIGdsaWJjLiAgSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycworLQl1bmNvbmRpdGlvbmFsbHkgaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkY2dldHRleHQuYzogSW5jbHVkZSBhbGwgdGhvc2Ugc3RhbmRhcmQgaGVhZGVycyB1bmNvbmRpdGlvbmFsbHkKKy0JaWYgX0xJQkMgaXMgZGVmaW5lZC4KKy0KKy0JKiBkZ2V0dGV4dC5jOiBJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mCistCWxpYmdldHRleHQuaC4KKy0JKGxvY2FsZS5oKTogRG9uJ3QgcmVseSBvbiBIQVZFX0xPQ0FMRV9IIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBkY2dldHRleHQuYzogSWYgY29tcGlsZWQgaW4gZ2xpYmMgaW5jbHVkZSBsaWJpbnRsLmggaW5zdGVhZCBvZgorLQlsaWJnZXR0ZXh0LmguCistCShnZXRjd2QpOiBEb24ndCByZWx5IG9uIEhBVkVfR0VUQ1dEIHdoZW4gY29tcGlsaW5nIGZvciBnbGliYy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOgorLQlJZiBjb21waWxlZCBpbiBnbGliYyBpbmNsdWRlIGxpYmludGwuaCBpbnN0ZWFkIG9mIGxpYmdldHRleHQuaC4KKy0KKy1Nb24gU2VwIDI1IDIyOjIzOjA2IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogbG9jYWxlYWxpYXMuYyAoX25sX2V4cGFuZF9hbGlhcyk6IERvbid0IGNhbGwgYnNlYXJjaCBpZiBOTUFQIDw9IDAuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlTdHJpbmcgdXNlZCBpbiBwdXRlbnYgbXVzdCBub3QgYmUgcmVjeWNsZWQuCistCVJlcG9ydGVkIGJ5IE1hcmN1cyBEYW5pZWxzLgorLQorLQkqIGxpYmdldHRleHQuaCAoX19VU0VfR05VX0dFVFRFWFQpOgorLQlBZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgR05VIGdldHRleHQKKy0JbGlicmFyeS4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKGJpbmR0ZXh0ZG9tYWluKToKKy0JRml4IGJ1ZyB3aXRoIHRoZSBzdHJhbmdlIHN0cGNweSByZXBsYWNlbWVudC4KKy0JUmVwb3J0ZWQgYnkgTmVsc29uIEJlZWJlLgorLQorLVNhdCBTZXAgMjMgMDg6MjM6NTEgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IEluY2x1ZGUgPHN0cmluZy5oPiBmb3Igc3RwY3B5IHByb3RvdHlwZS4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlXaGlsZSBleHBhbmQgc3RyZHVwIGNvZGUgdGVtcG9yYXJ5IHZhcmlhYmxlIGBjcCcgaGlkZWQKKy0JaGlnaGVyIGxldmVsIHZhcmlhYmxlIHdpdGggc2FtZSBuYW1lLiAgUmVuYW1lIHRvIGB0cCcuCistCistCSogdGV4dGRvbWFpbi5jICh0ZXh0ZG9tYWluKToKKy0JQXZvaWQgd2FybmluZyBieSB1c2luZyB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gc3RyZHVwIGNvZGUuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBhcHBsaWNhdGlvbicuCistCistVGh1IFNlcCAyMSAxNTo1MTo0NCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvY2FsZWFsaWFzLmMgKGFsaWFzX2NvbXBhcmUpOgorLQlVc2Ugc3RyY2FzZWNtcCgpIG9ubHkgaWYgYXZhaWxhYmxlLiAgRWxzZSB1c2UKKy0JaW1wbGVtZW50YXRpb24gaW4gcGxhY2UuCistCistCSogaW50bC1jb21wYXQuYzoKKy0JV3JhcHBlciBmdW5jdGlvbnMgbm93IGNhbGwgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIF9fKi4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IERlY2xhcmUgcHJvdG90eXBlcyBmb3IgKl9fIGZ1bmN0aW9ucyBpbnN0ZWFkIGZvciBfXyouCistCistCSogY2F0LWNvbXBhdC5jLCBsb2FkbXNnY2F0LmM6CistCURvbid0IHVzZSB4bWFsbG9jLCB4c3RyZHVwLCBhbmQgc3RwY3B5LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcGFydAorLQlvZiB0aGUgc3RhbmRhcmQgbGliYyBhbmQgc28gcHJldmVudCBsaWJpbnRsLmEgZnJvbSBiZWluZyB1c2VkCistCXN0YW5kYWxvbmUuCistCistCSogYmluZHRleHRkb20uYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JUmVuYW1lIHRvIGJpbmR0ZXh0ZG9tYWluX18gaWYgbm90IHVzZWQgaW4gR05VIEMgTGlicmFyeS4KKy0KKy0JKiBkZ2V0dGV4dC5jOgorLQlSZW5hbWUgZnVuY3Rpb24gdG8gZGdldHRleHRfXyBpZiBub3QgdXNlZCBpbiBHTlUgQyBMaWJyYXJ5LgorLQorLQkqIGdldHRleHQuYzoKKy0JRG9uJ3QgdXNlIHhtYWxsb2MsIHhzdHJkdXAsIGFuZCBzdHBjcHkuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBwYXJ0CistCW9mIHRoZSBzdGFuZGFyZCBsaWJjIGFuZCBzbyBwcmV2ZW50IGxpYmludGwuYSBmcm9tIGJlaW5nIHVzZWQKKy0Jc3RhbmRhbG9uZS4KKy0JRnVuY3Rpb25zIG5vdyBjYWxsZWQgZ2V0dGV4dF9fIGlmIG5vdCB1c2VkIGluIEdOVSBDIExpYnJhcnkuCistCistCSogZGNnZXR0ZXh0LmMsIGxvY2FsZWFsaWFzLmMsIHRleHRkb21haW4uYywgZmluZGRvbWFpbi5jOgorLQlEb24ndCB1c2UgeG1hbGxvYywgeHN0cmR1cCwgYW5kIHN0cGNweS4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQKKy0Jb2YgdGhlIHN0YW5kYXJkIGxpYmMgYW5kIHNvIHByZXZlbnQgbGliaW50bC5hIGZyb20gYmVpbmcgdXNlZAorLQlzdGFuZGFsb25lLgorLQorLVN1biBTZXAgMTcgMjM6MTQ6NDkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IENvcnJlY3Qgc29tZSBidWdzIGluIGhhbmRsaW5nIG9mIENFTiBzdGFuZGFyZAorLSAJbG9jYWxlIGRlZmluaXRpb25zLgorLQorLVRodSBTZXAgIDcgMDE6NDk6MjggMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEltcGxlbWVudCBDRU4gc3ludGF4LgorLQorLQkqIGdldHRleHRQLmggKGxvYWRlZF9kb21haW4pOiBFeHRlbmQgbnVtYmVyIG9mIHN1Y2Nlc3NvcnMgdG8gMzEuCistCistU2F0IEF1ZyAxOSAxOToyNToyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBSZW1vdmUgcGF0aCB0byBYMTEgbG9jYWxlIGRpci4KKy0KKy0JKiBNYWtlZmlsZS5pbjogTWFrZSBpbnN0YWxsLXNyYyBkZXBlbmQgb24gaW5zdGFsbC4gIFRoaXMgaGVscHMKKy0gCWdldHRleHQgdG8gaW5zdGFsbCB0aGUgc291cmNlcyBhbmQgb3RoZXIgcGFja2FnZXMgY2FuIHVzZSB0aGUKKy0gCWluc3RhbGwgZ29hbC4KKy0KKy1TYXQgQXVnIDE5IDE1OjE5OjMzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKHVuaW5zdGFsbCk6IFJlbW92ZSBzdHVmZiBpbnN0YWxsZWQgYnkgaW5zdGFsbC1zcmMuCistCistVHVlIEF1ZyAxNSAxMzoxMzo1MyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIFZFUlNJT04uaW46IEluaXRpYWwgcmV2aXNpb24uCistCistCSogTWFrZWZpbGUuaW4gKERJU1RGSUxFUyk6CistCUFkZCBWRVJTSU9OIGZpbGUuICBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGdldHRleHQsIGJ1dAorLQlmb3Igb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhpcyBsaWJyYXJ5LgorLQorLVR1ZSBBdWcgMTUgMDY6MTY6NDQgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBnZXR0ZXh0UC5oIChfbmxfZmluZF9kb21haW4pOgorLQlOZXcgcHJvdG90eXBlIGFmdGVyIGNoYW5naW5nIHNlYXJjaCBzdHJhdGVneS4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCVdlIG5vdyB0cnkgb25seSB0byBmaW5kIGEgc3BlY2lmaWVkIGNhdGFsb2cuICBGYWxsIGJhY2sgdG8gb3RoZXIKKy0JY2F0YWxvZ3MgbGlzdGVkIGluIHRoZSBsb2NhbGUgbGlzdCBpcyBub3cgZG9uZSBpbiBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkY2dldHRleHQuYyAoX19kY2dldHRleHQpOgorLQlOb3cgd2UgcHJvdmlkZSBtZXNzYWdlIGZhbGwgYmFjayBldmVuIHRvIGRpZmZlcmVudCBsYW5ndWFnZXMuCistCUkuZS4gaWYgYSBtZXNzYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gb25lIGxhbmd1YWdlIGFsbCB0aGUgb3RoZXIKKy0gCWluIHRoZSBsb2NhbGUgbGlzdCBhIHRyaWVkLiAgRm9ybWVybHkgZmFsbCBiYWNrIHdhcyBvbmx5IHBvc3NpYmxlCistIAl3aXRoaW4gb25lIGxhbmd1YWdlLiAgSW1wbGVtZW50ZWQgYnkgbW92aW5nIG9uZSBsb29wIGZyb20KKy0gCV9ubF9maW5kX2RvbWFpbiB0byBoZXJlLgorLQorLU1vbiBBdWcgMTQgMjM6NDU6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoZ2V0dGV4dHNyY2Rpcik6CistCURpcmVjdG9yeSB3aGVyZSBzb3VyY2Ugb2YgR05VIGdldHRleHQgbGlicmFyeSBhcmUgbWFkZQorLQlhdmFpbGFibGUuCistCShJTlNUQUxMLCBJTlNUQUxMX0RBVEEpOiBQcm9ncmFtcyB1c2VkIGZvciBpbnN0YWxsaW5nIHNvdXJjZXMuCistCShnZXR0ZXh0LXNyYyk6IE5ldy4gIFJ1bGUgdG8gaW5zdGFsbCBHTlUgZ2V0dGV4dCBzb3VyY2VzIGZvciB1c2UgaW4KKy0JZ2V0dGV4dGl6ZSBzaGVsbCBzY3JpcHQuCistCistU3VuIEF1ZyAxMyAxNDo0MDo0OCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYyAoX25sX2xvYWRfZG9tYWluKToKKy0JVXNlIG1tYXAgZm9yIGxvYWRpbmcgb25seSB3aGVuIG11bm1hcCBmdW5jdGlvbiBpcworLQlhbHNvIGF2YWlsYWJsZS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoaW5zdGFsbCk6IERlcGVuZCBvbiBgYWxsJyBnb2FsLgorLQorLVdlZCBBdWcgIDkgMTE6MDQ6MzMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsb2NhbGVhbGlhcy5jIChyZWFkX2FsaWFzX2ZpbGUpOgorLQlEbyBub3Qgb3ZlcndyaXRlICdcbicgd2hlbiB0ZXJtaW5hdGluZyBhbGlhcyB2YWx1ZSBzdHJpbmcuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JSGFuZGxlIGxvbmcgbGluZXMuICBJZ25vcmUgdGhlIHJlc3Qgbm90IGZpdHRpbmcgaW4KKy0JdGhlIGJ1ZmZlciBhZnRlciB0aGUgaW5pdGlhbCBgZmdldHMnIGNhbGwuCistCistV2VkIEF1ZyAgOSAwMDo1NDoyOSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGdldHRleHRQLmggKF9ubF9sb2FkX2RvbWFpbik6CistCUFkZCBwcm90b3R5cGUsIHJlcGxhY2luZyBwcm90b3R5cGUgZm9yIF9ubF9sb2FkX21zZ19jYXQuCistCistCSogZmluZGRvbWFpbi5jIChfbmxfZmluZF9kb21haW4pOgorLQlSZW1vdmUgdW5uZWVkZWQgdmFyaWFibGUgZmlsZW5hbWUgYW5kIGZpbGVuYW1lX2xlbi4KKy0JKGV4cGFuZF9hbGlhcyk6IFJlbW92ZSBwcm90b3R5cGUgYmVjYXVzZSBmdW5jdGlvbnMgZG9lcyBub3QKKy0gCWV4aXN0IGFueW1vcmUuCistCistCSogbG9jYWxlYWxpYXMuYyAocmVhZF9hbGlhc19maWxlKToKKy0JQ2hhbmdlIHR5cGUgb2YgZm5hbWVfbGVuIHBhcmFtZXRlciB0byBpbnQuCistCSh4bWFsbG9jKTogQWRkIHByb3RvdHlwZS4KKy0KKy0JKiBsb2FkbXNnY2F0LmM6IEJldHRlciBwcm90b3R5cGVzIGZvciB4bWFsbG9jLgorLQorLVR1ZSBBdWcgIDggMjI6MzA6MzkgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKF9ubF9maW5kX2RvbWFpbik6CistCUFsbG93IGFsaWFzIG5hbWUgdG8gYmUgY29uc3RydWN0ZWQgZnJvbSB0aGUgZm91ciBjb21wb25lbnRzLgorLQorLQkqIE1ha2VmaWxlLmluIChhbGlhc3BhdGgpOiBOZXcgdmFyaWFibGUuICBTZXQgdG8gcHJlbGltaW5hcnkgdmFsdWUuCistCShTT1VSQ0VTKTogQWRkIGxvY2FsZWFsaWFzLmMuCistCShPQkpFQ1RTKTogQWRkIGxvY2FsZWFsaWFzLm8uCistCistCSogZ2V0dGV4dFAuaDogQWRkIHByb3RvdHlwZSBmb3IgX25sX2V4cGFuZF9hbGlhcy4KKy0KKy0JKiBmaW5kZG9tYWluLmM6IEFsaWFzaW5nIGhhbmRsZWQgaW4gaW50bC9sb2NhbGVhbGlhcy5jLgorLQorLQkqIGxvY2FsZWFsaWFzLmM6IEFsaWFzaW5nIGZvciBsb2NhbGUgbmFtZXMuCistCistCSogYmluZHRleHRkb20uYzogQmV0dGVyIHByb3RvdHlwZXMgZm9yIHhtYWxsb2MgYW5kIHhzdHJkdXAuCistCistTW9uIEF1ZyAgNyAyMzo0Nzo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOiBnZXR0ZXh0LnBlcmwgaXMgbm93IGZvdW5kIGluIG1pc2MvLgorLQorLQkqIGNhdC1jb21wYXQuYyAoYmluZHRleHRkb21haW4pOgorLQlDb3JyZWN0IGltcGxlbWVudGF0aW9uLiAgZGlybmFtZSBwYXJhbWV0ZXIgd2FzIG5vdCB1c2VkLgorLQlSZXBvcnRlZCBieSBNYXJjdXMgRGFuaWVscy4KKy0KKy0JKiBnZXR0ZXh0UC5oIChsb2FkZWRfZG9tYWluKToKKy0JTmV3IGZpZWxkcyBgc3VjY2Vzc29yJyBhbmQgYGRlY2lkZWQnIGZvciBvbywgbGF6eQorLQltZXNzYWdlIGhhbmRsaW5nIGltcGxlbWVudGF0aW9uLgorLQorLQkqIGRjZ2V0dGV4dC5jOgorLQlBZG9wdCBmb3Igb28sIGxhenkgbWVzc2FnZSBoYW5kbGlpbmcuCistICAJTm93IHdlIGNhbiBpbmhlcml0IHRyYW5zbGF0aW9ucyBmcm9tIGxlc3Mgc3BlY2lmaWMgbG9jYWxlcy4KKy0JKGZpbmRfbXNnKTogTmV3IGZ1bmN0aW9uLgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOgorLQlDb21wbGV0ZSByZXdyaXRlLiAgSW1wbGVtZW50IG9vLCBsYXp5IG1lc3NhZ2UgaGFuZGxpbmcgOi0pLgorLSAgCVdlIG5vdyBoYXZlIGFuIGFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgYExBTkdVQUdFJyB3aXRoCistIAlhIGhpZ2hlciBwcmlvcml0eSB0aGFuIExDX0FMTCBmb3IgdGhlIExDX01FU1NBR0UgbG9jYWxlLgorLSAgCUhlcmUgd2UgY2FuIHNldCBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHNwZWNpZmljYXRpb25zIGVhY2gKKy0gCW9mIHRoZSBmb3JtIGBsYW5ndWFnZVtfdGVycml0b3J5Wy5jb2Rlc2V0XV1bQG1vZGlmaWVyXScuCistCistU2F0IEF1ZyAgNSAwOTo1NTo0MiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGZpbmRkb21haW4uYyAodW5pc3RkLmgpOgorLQlJbmNsdWRlIHRvIGdldCBfUENfUEFUSF9NQVggZGVmaW5lZCBvbiBzeXN0ZW0gaGF2aW5nIGl0LgorLQorLUZyaSBBdWcgIDQgMjI6NDI6MDAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBmaW5kZG9tYWluLmMgKHN0cGNweSk6IEluY2x1ZGUgcHJvdG90eXBlLgorLQorLQkqIE1ha2VmaWxlLmluIChkaXN0KTogUmVtb3ZlIGBjb3B5aW5nIGluc3RlYWQnIG1lc3NhZ2UuCistCistV2VkIEF1ZyAgMiAxODo1MjowMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChJRCwgVEFHUyk6IERvIG5vdCB1c2UgJF4uCistCistVHVlIEF1ZyAgMSAyMDowNzoxMSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChUQUdTLCBJRCk6IFVzZSAkXiBhcyBjb21tYW5kIGFyZ3VtZW50LgorLQkoVEFHUyk6IEdpdmUgZXRhZ3MgLW8gb3B0aW9uIHQgd3JpdGUgdG8gY3VycmVudCBkaXJlY3RvcnksCistIAlub3QgJChzcmNkaXIpLgorLQkoSUQpOiBVc2UgJChzcmNkaXIpIGluc3RlYWQgb3MgJCh0b3Bfc3JjZGlyKS9zcmMuCistCShkaXN0Y2xlYW4pOiBSZW1vdmUgSUQuCistCistU3VuIEp1bCAzMCAxMTo1MTo0NiAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChnbnVsb2NhbGVkaXIpOgorLQlOZXcgdmFyaWFibGUsIGFsd2F5cyB1c2luZyBzaGFyZS8gZm9yIGRhdGEgZGlyZWN0b3J5LgorLQkoREVGUyk6IEFkZCBHTlVMT0NBTEVESVIsIHVzZWQgaW4gZmluZGRvbWFpbi5jLgorLQorLQkqIGZpbmRkb21haW4uYyAoX25sX2RlZmF1bHRfZGlybmFtZSk6CistCVNldCB0byBHTlVMT0NBTEVESVIsIGJlY2F1c2UgaXQgYWx3YXlzIGhhcyB0byBwb2ludAorLQl0byB0aGUgZGlyZWN0b3J5IHdoZXJlIEdOVSBnZXR0ZXh0IExpYnJhcnkgd3JpdGVzIGl0IHRvLgorLQorLQkqIGludGwtY29tcGF0LmMgKHRleHRkb21haW4sIGJpbmR0ZXh0ZG9tYWluKToKKy0JVW5kZWZpbmUgbWFjcm9zIGJlZm9yZSBmdW5jdGlvbiBkZWZpbml0aW9uLgorLQorLVNhdCBKdWwgMjIgMDE6MTA6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBsaWJnZXR0ZXh0LmggKF9MSUJJTlRMX0gpOgorLQlQcm90ZWN0IGRlZmluaXRpb24gaW4gY2FzZSB3aGVyZSB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYXMKKy0JbGliZ2V0dGV4dC5oIG9uIFNvbGFyaXMgbWFjaGluZXMuICBBZGQgY29tbWVudCBhYm91dCB0aGlzLgorLQorLVdlZCBKdWwgMTkgMDI6MzY6NDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jICh0ZXh0ZG9tYWluKTogQ29ycmVjdCB0eXBvLgorLQorLVdlZCBKdWwgMTkgMDE6NTE6MzUgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBkY2dldHRleHQuYyAoZGNnZXR0ZXh0KTogRnVuY3Rpb24gbm93IGNhbGxlZCBfX2RjZ2V0dGV4dC4KKy0KKy0JKiBkZ2V0dGV4dC5jIChkZ2V0dGV4dCk6IE5vdyBjYWxsZWQgX19kZ2V0dGV4dCBhbmQgY2FsbHMKKy0gCV9fZGNnZXR0ZXh0LgorLQorLQkqIGdldHRleHQuYyAoZ2V0dGV4dCk6CistCUZ1bmN0aW9uIG5vdyBjYWxsZWQgX19nZXR0ZXh0IGFuZCBjYWxscyBfX2RnZXR0ZXh0LgorLQorLQkqIHRleHRkb21haW4uYyAodGV4dGRvbWFpbik6IEZ1bmN0aW9uIG5vdyBjYWxsZWQgX190ZXh0ZG9tYWluLgorLQorLQkqIGJpbmR0ZXh0ZG9tLmMgKGJpbmR0ZXh0ZG9tYWluKTogRnVuY3Rpb24gbm93IGNhbGxlZAorLSAJX19iaW5kdGV4dGRvbWFpbi4KKy0KKy0JKiBpbnRsLWNvbXBhdC5jOiBJbml0aWFsIHJldmlzaW9uLgorLQorLQkqIE1ha2VmaWxlLmluIChTT1VSQ0VTKTogQWRkIGludGwtY29tcGF0LmMuCistCShPQkpFQ1RTKTogV2UgYWx3YXlzIGNvbXBpbGUgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgZnVuY3Rpb25zLgorLSAgCU9CSkVDVFMgY29udGFpbnMgYWxsIG9iamVjdHMgYnV0IGNhdC1jb21wYXQubywgLi4vcG8vY2F0LWlmLXRibC5vLAorLSAJYW5kIGludGwtY29tcGF0Lm8uCistICAJKEdFVFRPQkpTKTogQ29udGFpbnMgbm93IG9ubHkgaW50bC1jb21wYXQuby4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6CistCVJlLWluY2x1ZGUgcHJvdGVjdGlvbiBtYXRjaGVzIGR1YWxpc3RpYyBjaGFyYWN0ZXIgb2YgbGliZ2V0dGV4dC5oLgorLQlGb3IgYWxsIGZ1bmN0aW9ucyBpbiBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGRlZmluZSBfXyBjb3VudGVyIHBhcnQuCistCistCSogZmluZGRvbWFpbi5jIChzdHJjaHIpOiBEZWZpbmUgYXMgaW5kZXggaWYgbm90IGZvdW5kIGluIEMgbGlicmFyeS4KKy0JKF9ubF9maW5kX2RvbWFpbik6IEZvciByZWxhdGl2ZSBwYXRocyBwYXN0ZSAvIGluIGJldHdlZW4uCistCistVHVlIEp1bCAxOCAxNjozNzo0NSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGxvYWRtc2djYXQuYywgZmluZGRvbWFpbi5jOiBBZGQgaW5jbHVzaW9uIG9mIHN5cy90eXBlcy5oLgorLQorLQkqIHhvcGVuLW1zZy5zZWQ6IEZpeCBidWcgd2l0aCBgbXNnc3RyICIiJyBsaW5lcy4KKy0JQSBsaXR0bGUgYml0IGJldHRlciBjb21tZW50cy4KKy0KKy1UdWUgSnVsIDE4IDAxOjE4OjI3IDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW46CistCXBvLW1vZGUuZWwsIG1ha2VsaW5rcywgY29tYmluZS1zaCBhcmUgbm93IGZvdW5kIGluIC4uL21pc2MuCistCistCSogcG8tbW9kZS5lbCwgbWFrZWxpbmtzLCBjb21iaW5lLXNoLCBlbGlzcC1jb21wOgorLQlNb3ZlZCB0byAuLi9taXNjLy4KKy0KKy0JKiBsaWJnZXR0ZXh0LmgsIGdldHRleHRQLmgsIGdldHRleHQuaDogVW5pZm9ybSB0ZXN0IGZvciBfX1NURENfXy4KKy0KKy1TdW4gSnVsIDE2IDIyOjMzOjAyIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogTWFrZWZpbGUuaW4gKElOU1RBTEwsIElOU1RBTExfREFUQSk6IE5ldyB2YXJpYWJsZXMuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEluc3RhbGwvdW5pbnN0YWxsIC5lbGMgZmlsZS4KKy0KKy0JKiBwby1tb2RlLmVsIChJbnN0YWxsYXRpb24gY29tbWVudCk6CistCUFkZCAucG94IGFzIHBvc3NpYmxlIGV4dGVuc2lvbiBvZiAucG8gZmlsZXMuCistCistU3VuIEp1bCAxNiAxMzoyMzoyNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIGVsaXNwLWNvbXA6IENvbXBsZXRlIG5ldyB2ZXJzaW9uIGJ5IEZyYW5jLG9pczogVGhpcyBkb2VzIG5vdAorLSAJZmFpbCB3aGVuIG5vdCBjb21waWxpbmcgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistCistU3VuIEp1bCAxNiAwMDoxMjoxNyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluICguLi9wby9jYXQtaWQtdGJsLm8pOgorLQlVc2UgJChNQUtFKSBpbnN0ZWFkIG9mIG1ha2UgZm9yIHJlY3Vyc2l2ZSBtYWtlLgorLQorLQkqIE1ha2VmaWxlLmluICguZWwuZWxjKTogVXNlICQoU0hFTEwpIGluc3RlYWQgb2YgL2Jpbi9zaC4KKy0JKGluc3RhbGwtZXhlYyk6IEFkZCBtaXNzaW5nIGR1bW15IGdvYWwuCistCShpbnN0YWxsLWRhdGEsIHVuaW5zdGFsbCk6IEAgaW4gbXVsdGktbGluZSBzaGVsbCBjb21tYW5kIGF0CistIAliZWdpbm5pbmcsIG5vdCBpbiBmcm9udCBvZiBlY2hvLiAgUmVwb3J0ZWQgYnkgRXJpYyBCYWNrdXMuCistCistU2F0IEp1bCAxNSAwMDoyMToyOCAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChESVNURklMRVMpOgorLQlSZW5hbWUgbGliZ2V0dGV4dC5wZXJsIHRvIGdldHRleHQucGVybCB0byBmaXQgaW4gMTQgY2hhcnMKKy0JZmlsZSBzeXN0ZW1zLgorLQorLQkqIGdldHRleHQucGVybDoKKy0gCVJlbmFtZSB0byBnZXR0ZXh0LnBlcmwgdG8gZml0IGluIDE0IGNoYXJzIGZpbGUgc3lzdGVtcy4KKy0KKy1UaHUgSnVsIDEzIDIzOjE3OjIwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogY2F0LWNvbXBhdC5jOiBJZiAhU1REQ19IRUFERVJTIHRyeSB0byBpbmNsdWRlIG1hbGxvYy5oLgorLQorLVRodSBKdWwgMTMgMjA6NTU6MDIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBwbzJ0Ymwuc2VkLmluOiBQcmV0dHkgcHJpbnRpbmcuCistCistCSogbGludXgtbXNnLnNlZCwgeG9wZW4tbXNnLnNlZDoKKy0JQ29ycmVjdCBidWdzIHdpdGggaGFuZGxpbmcgc3Vic3RpdHV0ZSBmbGFncyBpbiBicmFuY2hlcy4KKy0KKy0JKiBoYXNoLXN0cmluZy5oIChoYXNoX3N0cmluZyk6CistCU9sZCBLJlIgY29tcGlsZXJzIGRvbid0IHVuZGVyIHN0YW5kIGB1bnNpZ25lZCBjaGFyJy4KKy0KKy0JKiBnZXR0ZXh0LmggKG5sc191aW50MzIpOgorLQlTb21lIG9sZCBLJlIgY29tcGlsZXJzIChlZyBIUCkgZG9uJ3QgdW5kZXJzdGFuZCBgdW5zaWduZWQgaW50Jy4KKy0KKy0JKiBjYXQtY29tcGF0LmMgKG1zZ190b19jYXRfaWQpOiBEZS1BTlNJLWZ5IHByb3RvdHlwZXMuCistCistVGh1IEp1bCAxMyAwMTozNDozMyAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIE1ha2VmaWxlLmluIChFTENGSUxFUyk6IE5ldyB2YXJpYWJsZS4KKy0JKERJU1RGSUxFUyk6IEFkZCBlbGlzcC1jb21wLgorLQlBZGQgaW1wbGljaXQgcnVsZSBmb3IgLmVsIC0+IC5lbGMgY29tcGlsYXRpb24uCistCShpbnN0YWxsLWRhdGEpOiBpbnN0YWxsICRFTENGSUxFUworLQkoY2xlYW4pOiByZW5hbWVkIHBvLXRvLXRibCBhbmQgcG8tdG8tbXNnIHRvIHBvMnRibCBhbmQgcG8ybXNnIHJlc3AuCistCistCSogZWxpc3AtY29tcDogSW5pdGlhbCByZXZpc2lvbgorLQorLVdlZCBKdWwgMTIgMTY6MTQ6NTIgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjoKKy0JY2F0LWlkLXRibC5jIGlzIG5vdyBmb3VuZCBpbiBwby8uICBUaGlzIGVuYWJsZXMgdXMgdG8gdXNlIGFuIGlkZW50aWNhbAorLQlpbnRsLyBkaXJlY3RvcnkgaW4gYWxsIHBhY2thZ2VzLgorLQorLQkqIGRjZ2V0dGV4dC5jIChkY2dldHRleHQpOiBoYXNoaW5nIGRvZXMgbm90IHdvcmsgZm9yIHRhYmxlIHNpemUgPD0gMi4KKy0KKy0JKiB0ZXh0ZG9tYWluLmM6IGZpeCB0eXBvICgjaWYgZGVmIC0+ICNpZiBkZWZpbmVkKQorLQorLVR1ZSBKdWwgMTEgMTg6NDQ6NDMgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoc3RhbXAtY2F0LWlkKTogdXNlIHRvcF9zcmNkaXIgdG8gYWRkcmVzcyBzb3VyY2UgZmlsZXMKKy0JKERJU1RGSUxFUyxkaXN0Y2xlYW4pOiBtb3ZlIHR1cGRhdGUucGVybCB0byBzcmMvCistCistCSogcG8tdG8tdGJsLnNlZC5pbjoKKy0JYWRkIGFkZGl0aW9uYWwganVtcCB0byBjbGVhciBjaGFuZ2UgZmxhZyB0byByZWNvZ25pemUgbXVsdGlsaW5lIHN0cmluZ3MKKy0KKy1UdWUgSnVsIDExIDAxOjMyOjUwIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdGV4dGRvbWFpbi5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaCBhbmQgc3RyaW5nLmguCistCistCSogbG9hZG1zZ2NhdC5jOiBQcm90ZWN0IGluY2x1c2lvbiBvZiBzdGRsaWIuaC4KKy0KKy0JKiBsaWJnZXR0ZXh0Lmg6IFByb3RlY3QgaW5jbHVzaW9uIG9mIGxvY2FsZS5oLgorLQlBbGxvdyB1c2UgaW4gQysrIHByb2dyYW1zLgorLQlEZWZpbmUgTlVMTCBpcyBub3QgaGFwcGVuZWQgYWxyZWFkeS4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoRElTVEZJTEVTKTogc2hpcCBwby10by10Ymwuc2VkLmluIGluc3RlYWQgb2YKKy0JcG8tdG8tdGJsLnNlZC4KKy0JKGRpc3RjbGVhbik6IHJlbW92ZSBwby10by10Ymwuc2VkIGFuZCB0dXBkYXRlLnBlcmwuCistCistCSogdHVwZGF0ZS5wZXJsLmluOiBTdWJzdGl0dXRlIFBlcmwgcGF0aCBldmVuIGluIGV4ZWMgbGluZS4KKy0JRG9uJ3QgaW5jbHVkZSBlbnRyaWVzIHdpdGhvdXQgdHJhbnNsYXRpb24gZnJvbSBvbGQgLnBvIGZpbGUuCistCistVHVlIEp1bCAgNCAwMDo0MTo1MSAxOTk1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAbXl3YXJlPgorLQorLQkqIHR1cGRhdGUucGVybC5pbjogdXNlICJVcGRhdGVkOiAiIGluIG1zZ2lkICIiLgorLQorLQkqIGNhdC1jb21wYXQuYzogRml4IHR5cG8gKExPQ0FMRElSIC0+IExPQ0FMRURJUikuCistIAlEZWZpbmUgZ2V0ZW52IGlmICFfX1NURENfXy4KKy0KKy0JKiBiaW5kdGV4dGRvbS5jOiBQcm90ZWN0IHN0ZGxpYi5oIGFuZCBzdHJpbmcuaCBpbmNsdXNpb24uCistIAlEZWZpbmUgZnJlZSBpZiAhX19TVERDX18uCistCistCSogZmluZGRvbWFpbi5jOiBDaGFuZ2UgREVGX01TR19ET01fRElSIHRvIExPQ0FMRURJUi4KKy0gCURlZmluZSBmcmVlIGlmICFfX1NURENfXy4KKy0KKy0JKiBjYXQtY29tcGF0LmM6IENoYW5nZSBERUZfTVNHX0RPTV9ESVIgdG8gTE9DQUxFRElSLgorLQorLU1vbiBKdWwgIDMgMjM6NTY6MzAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKy0KKy0JKiBNYWtlZmlsZS5pbjogVXNlIExPQ0FMRURJUiBpbnN0ZWFkIG9mIERFRl9NU0dfRE9NX0RJUi4KKy0JUmVtb3ZlIHVubmVlZGVkICQoc3JjZGlyKSBmcm9tIE1ha2VmaWxlLmluIGRlcGVuZGVuY3kuCistCistCSogbWFrZWxpbmtzOiBBZGQgY29weXJpZ2h0IGFuZCBzaG9ydCBkZXNjcmlwdGlvbi4KKy0KKy0JKiBwby1tb2RlLmVsOiBMYXN0IHZlcnNpb24gZm9yIDAuNy4KKy0KKy0JKiB0dXBkYXRlLnBlcmwuaW46IEZpeCBkaWUgbWVzc2FnZS4KKy0KKy0JKiBkY2dldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0cmluZy5oLgorLQorLQkqIGdldHRleHQuYzogUHJvdGVjdCBpbmNsdWRlIG9mIHN0ZGxpYi5oIGFuZCBmdXJ0aGVyIHRyaWVzIHRvIGdldCBOVUxMLgorLQorLQkqIGZpbmRkb21haW4uYzogU29tZSBjb3JyZWN0aW9ucyBpbiBpbmNsdWRlcy4KKy0KKy0JKiBNYWtlZmlsZS5pbiAoSU5DTFVERVMpOiBQcnVuZSBsaXN0IGNvcnJlY3QgcGF0aCB0byBNYWtlZmlsZS5pbi4KKy0KKy0JKiBwby10by10Ymwuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy0JKiBsaW51eC1tc2cuc2VkLCB4b3Blbi1tc2cuc2VkOiBBZG9wdCBmb3IgbmV3IC5wbyBmaWxlIGZvcm1hdC4KKy0KKy1TdW4gSnVsICAyIDIzOjU1OjAzIDE5OTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBteXdhcmU+CistCistCSogdHVwZGF0ZS5wZXJsLmluOiBDb21wbGV0ZSByZXdyaXRlIGZvciBuZXcgLnBvIGZpbGUgZm9ybWF0LgorKzIwMDQtMDEtMjkgIEdOVSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorIAorLVN1biBKdWwgIDIgMDI6MDY6NTAgMTk5NSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQG15d2FyZT4KKysJKiBWZXJzaW9uIDAuMTQuMSByZWxlYXNlZC4KKyAKKy0JKiBGaXJzdCBvZmZpY2lhbCByZWxlYXNlLiAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBjb2RlCistCW5lZWRlZCB0byBpbnRlcm5hdGlvbmFsaXplIG93biBwYWNrYWdlcy4gIEl0IHByb3ZpZGVzIGZ1bmN0aW9ucworLQl3aGljaCBhbGxvdyB0byB1c2UgdGhlIFgvT3BlbiBjYXRnZXRzIGZ1bmN0aW9uIHdpdGggYW4gaW50ZXJmYWNlCistCWxpa2UgdGhlIFVuaWZvcnVtIGdldHRleHQgZnVuY3Rpb24uICBGb3Igc3lzdGVtIHdoaWNoIGRvZXMgbm90CistCWhhdmUgbmVpdGhlciBvZiB0aG9zZSBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2NvbmZpZy5jaGFyc2V0CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2NvbmZpZy5jaGFyc2V0CTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU0NzQ4MjQwIC0wNDAwCitAQCAtMCwwICsxLDYwOCBAQAorKyMhIC9iaW4vc2gKKysjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMuCisrIworKyMgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBUaGUgdGFibGUgY29uc2lzdHMgb2YgbGluZXMgb2YgdGhlIGZvcm0KKysjICAgIEFMSUFTICBDQU5PTklDQUwKKysjCisrIyBBTElBUyBpcyB0aGUgKHN5c3RlbSBkZXBlbmRlbnQpIHJlc3VsdCBvZiAibmxfbGFuZ2luZm8gKENPREVTRVQpIi4KKysjIEFMSUFTIGlzIGNvbXBhcmVkIGluIGEgY2FzZSBzZW5zaXRpdmUgd2F5LgorKyMKKysjIENBTk9OSUNBTCBpcyB0aGUgR05VIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIGNoYXJhY3RlciBlbmNvZGluZy4KKysjIEl0IG11c3QgYmUgYW4gZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IGxpYmljb252LiBTdXBwb3J0IGJ5IEdOVSBsaWJjIGlzCisrIyBhbHNvIGRlc2lyYWJsZS4gQ0FOT05JQ0FMIGlzIGNhc2UgaW5zZW5zaXRpdmUuIFVzdWFsbHkgYW4gdXBwZXIgY2FzZQorKyMgTUlNRSBjaGFyc2V0IG5hbWUgaXMgcHJlZmVycmVkLgorKyMgVGhlIGN1cnJlbnQgbGlzdCBvZiBHTlUgY2Fub25pY2FsIGNoYXJzZXQgbmFtZXMgaXMgYXMgZm9sbG93cy4KKysjCisrIyAgICAgICBuYW1lICAgICAgICAgICAgICBNSU1FPyAgICAgICAgICAgICB1c2VkIGJ5IHdoaWNoIHN5c3RlbXMKKysjICAgQVNDSUksIEFOU0lfWDMuNC0xOTY4ICAgICAgIGdsaWJjIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMSAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMiAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSVNPLTg4NTktMyAgICAgICAgICAgICAgWSAgIGdsaWJjIHNvbGFyaXMKKysjICAgSVNPLTg4NTktNCAgICAgICAgICAgICAgWSAgIG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTUgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzIGZyZWVic2QgZGFyd2luCisrIyAgIElTTy04ODU5LTYgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBzb2xhcmlzCisrIyAgIElTTy04ODU5LTcgICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBpcml4IG9zZiBzb2xhcmlzCisrIyAgIElTTy04ODU5LTggICAgICAgICAgICAgIFkgICBnbGliYyBhaXggaHB1eCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS05ICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBJU08tODg1OS0xMyAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgSVNPLTg4NTktMTQgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIElTTy04ODU5LTE1ICAgICAgICAgICAgICAgICBnbGliYyBhaXggb3NmIHNvbGFyaXMgZnJlZWJzZAorKyMgICBLT0k4LVIgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBLT0k4LVUgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgZnJlZWJzZCBkYXJ3aW4KKysjICAgS09JOC1UICAgICAgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIENQNDM3ICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A3NzUgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1MCAgICAgICAgICAgICAgICAgICAgICAgYWl4IG9zZiBkb3MKKysjICAgQ1A4NTIgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg1NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODU2ICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A4NTcgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2MSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODYyICAgICAgICAgICAgICAgICAgICAgICBkb3MKKysjICAgQ1A4NjQgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg2NSAgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQODY2ICAgICAgICAgICAgICAgICAgICAgICBmcmVlYnNkIGRhcndpbiBkb3MKKysjICAgQ1A4NjkgICAgICAgICAgICAgICAgICAgICAgIGRvcworKyMgICBDUDg3NCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQOTIyICAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1A5MzIgICAgICAgICAgICAgICAgICAgICAgIGFpeCB3b2UzMiBkb3MKKysjICAgQ1A5NDMgICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDk0OSAgICAgICAgICAgICAgICAgICAgICAgb3NmIHdvZTMyIGRvcworKyMgICBDUDk1MCAgICAgICAgICAgICAgICAgICAgICAgd29lMzIgZG9zCisrIyAgIENQMTA0NiAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMTI0ICAgICAgICAgICAgICAgICAgICAgIGFpeAorKyMgICBDUDExMjUgICAgICAgICAgICAgICAgICAgICAgZG9zCisrIyAgIENQMTEyOSAgICAgICAgICAgICAgICAgICAgICBhaXgKKysjICAgQ1AxMjUwICAgICAgICAgICAgICAgICAgICAgIHdvZTMyCisrIyAgIENQMTI1MSAgICAgICAgICAgICAgICAgICAgICBnbGliYyBzb2xhcmlzIGRhcndpbiB3b2UzMgorKyMgICBDUDEyNTIgICAgICAgICAgICAgICAgICAgICAgYWl4IHdvZTMyCisrIyAgIENQMTI1MyAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTQgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgQ1AxMjU1ICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHdvZTMyCisrIyAgIENQMTI1NiAgICAgICAgICAgICAgICAgICAgICB3b2UzMgorKyMgICBDUDEyNTcgICAgICAgICAgICAgICAgICAgICAgd29lMzIKKysjICAgR0IyMzEyICAgICAgICAgICAgICAgICAgWSAgIGdsaWJjIGFpeCBocHV4IGlyaXggc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtSlAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtS1IgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcyBmcmVlYnNkIGRhcndpbgorKyMgICBFVUMtVFcgICAgICAgICAgICAgICAgICAgICAgZ2xpYmMgYWl4IGhwdXggaXJpeCBvc2Ygc29sYXJpcworKyMgICBCSUc1ICAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgQklHNS1IS1NDUyAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgR0JLICAgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBvc2Ygc29sYXJpcyB3b2UzMiBkb3MKKysjICAgR0IxODAzMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMKKysjICAgU0hJRlRfSklTICAgICAgICAgICAgICAgWSAgIGhwdXggb3NmIHNvbGFyaXMgZnJlZWJzZCBkYXJ3aW4KKysjICAgSk9IQUIgICAgICAgICAgICAgICAgICAgICAgIGdsaWJjIHNvbGFyaXMgd29lMzIKKysjICAgVElTLTYyMCAgICAgICAgICAgICAgICAgICAgIGdsaWJjIGFpeCBocHV4IG9zZiBzb2xhcmlzCisrIyAgIFZJU0NJSSAgICAgICAgICAgICAgICAgIFkgICBnbGliYworKyMgICBUQ1ZONTcxMi0xICAgICAgICAgICAgICAgICAgZ2xpYmMKKysjICAgR0VPUkdJQU4tUFMgICAgICAgICAgICAgICAgIGdsaWJjCisrIyAgIEhQLVJPTUFOOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUFSQUJJQzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUdSRUVLOCAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUhFQlJFVzggICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLVRVUktJU0g4ICAgICAgICAgICAgICAgICBocHV4CisrIyAgIEhQLUtBTkE4ICAgICAgICAgICAgICAgICAgICBocHV4CisrIyAgIERFQy1LQU5KSSAgICAgICAgICAgICAgICAgICBvc2YKKysjICAgREVDLUhBTllVICAgICAgICAgICAgICAgICAgIG9zZgorKyMgICBVVEYtOCAgICAgICAgICAgICAgICAgICBZICAgZ2xpYmMgYWl4IGhwdXggb3NmIHNvbGFyaXMKKysjCisrIyBOb3RlOiBOYW1lcyB3aGljaCBhcmUgbm90IG1hcmtlZCBhcyBiZWluZyBhIE1JTUUgbmFtZSBzaG91bGQgbm90IGJlIHVzZWQgaW4KKysjIEludGVybmV0IHByb3RvY29scyBmb3IgaW5mb3JtYXRpb24gaW50ZXJjaGFuZ2UgKG1haWwsIG5ld3MsIGV0Yy4pLgorKyMKKysjIE5vdGU6IEFTQ0lJIGFuZCBBTlNJX1gzLjQtMTk2OCBhcmUgc3lub255bW91cyBjYW5vbmljYWwgbmFtZXMuIEFwcGxpY2F0aW9ucworKyMgbXVzdCB1bmRlcnN0YW5kIGJvdGggbmFtZXMgYW5kIHRyZWF0IHRoZW0gYXMgZXF1aXZhbGVudC4KKysjCisrIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKysjICAgIENQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisrIyBvcgorKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisrCisraG9zdD0iJDEiCisrb3M9YGVjaG8gIiRob3N0IiB8IHNlZCAtZSAncy9eW14tXSotW14tXSotXCguKlwpJC9cMS8nYAorK2VjaG8gIiMgVGhpcyBmaWxlIGNvbnRhaW5zIGEgdGFibGUgb2YgY2hhcmFjdGVyIGVuY29kaW5nIGFsaWFzZXMsIgorK2VjaG8gIiMgc3VpdGFibGUgZm9yIG9wZXJhdGluZyBzeXN0ZW0gJyR7b3N9Jy4iCisrZWNobyAiIyBJdCB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb25maWcuY2hhcnNldC4iCisrIyBMaXN0IG9mIHJlZmVyZW5jZXMsIHVwZGF0ZWQgZHVyaW5nIGluc3RhbGxhdGlvbjoKKytlY2hvICIjIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogIgorK2Nhc2UgIiRvcyIgaW4KKysgICAgbGludXgtZ251bGliYzEqKQorKwkjIExpbnV4IGxpYmM1IGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiQyBBU0NJSSIKKysJZWNobyAiUE9TSVggQVNDSUkiCisrCWZvciBsIGluIGFmIGFmX1pBIGNhIGNhX0VTIGRhIGRhX0RLIGRlIGRlX0FUIGRlX0JFIGRlX0NIIGRlX0RFIGRlX0xVIFwKKysJICAgICAgICAgZW4gZW5fQVUgZW5fQlcgZW5fQ0EgZW5fREsgZW5fR0IgZW5fSUUgZW5fTlogZW5fVVMgZW5fWkEgXAorKwkgICAgICAgICBlbl9aVyBlcyBlc19BUiBlc19CTyBlc19DTCBlc19DTyBlc19ETyBlc19FQyBlc19FUyBlc19HVCBcCisrCSAgICAgICAgIGVzX0hOIGVzX01YIGVzX1BBIGVzX1BFIGVzX1BZIGVzX1NWIGVzX1VTIGVzX1VZIGVzX1ZFIGV0IFwKKysJICAgICAgICAgZXRfRUUgZXUgZXVfRVMgZmkgZmlfRkkgZm8gZm9fRk8gZnIgZnJfQkUgZnJfQ0EgZnJfQ0ggZnJfRlIgXAorKwkgICAgICAgICBmcl9MVSBnYSBnYV9JRSBnbCBnbF9FUyBpZCBpZF9JRCBpbiBpbl9JRCBpcyBpc19JUyBpdCBpdF9DSCBcCisrCSAgICAgICAgIGl0X0lUIGtsIGtsX0dMIG5sIG5sX0JFIG5sX05MIG5vIG5vX05PIHB0IHB0X0JSIHB0X1BUIHN2IFwKKysJICAgICAgICAgc3ZfRkkgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5pc28tODg1OS0xIElTTy04ODU5LTEiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTUgSVNPLTg4NTktMTUiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktMTVAZXVybyBJU08tODg1OS0xNSIKKysJICBlY2hvICIkbEBldXJvIElTTy04ODU5LTE1IgorKwkgIGVjaG8gIiRsLmNwLTQzNyBDUDQzNyIKKysJICBlY2hvICIkbC5jcC04NTAgQ1A4NTAiCisrCSAgZWNobyAiJGwuY3AtMTI1MiBDUDEyNTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MkBldXJvIENQMTI1MiIKKysJICAjZWNobyAiJGwuYXRhcmktc3QgQVRBUkktU1QiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gY3MgY3NfQ1ogaHIgaHJfSFIgaHUgaHVfSFUgcGwgcGxfUEwgcm8gcm9fUk8gc2sgc2tfU0sgc2wgXAorKwkgICAgICAgICBzbF9TSSBzciBzcl9DUyBzcl9ZVTsgZG8KKysJICBlY2hvICIkbCBJU08tODg1OS0yIgorKwkgIGVjaG8gIiRsLmlzby04ODU5LTIgSVNPLTg4NTktMiIKKysJICBlY2hvICIkbC5jcC04NTIgQ1A4NTIiCisrCSAgZWNobyAiJGwuY3AtMTI1MCBDUDEyNTAiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gbWsgbWtfTUsgcnUgcnVfUlU7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5pc28tODg1OS01IElTTy04ODU5LTUiCisrCSAgZWNobyAiJGwua29pOC1yIEtPSTgtUiIKKysJICBlY2hvICIkbC5jcC04NjYgQ1A4NjYiCisrCSAgZWNobyAiJGwuY3AtMTI1MSBDUDEyNTEiCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gYXIgYXJfU0E7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktNiIKKysJICBlY2hvICIkbC5pc28tODg1OS02IElTTy04ODU5LTYiCisrCSAgZWNobyAiJGwuY3AtODY0IENQODY0IgorKwkgICNlY2hvICIkbC5jcC04NjggQ1A4NjgiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZworKwkgIGVjaG8gIiRsLmNwLTEyNTYgQ1AxMjU2IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIGVsIGVsX0dSIGdyIGdyX0dSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTciCisrCSAgZWNobyAiJGwuaXNvLTg4NTktNyBJU08tODg1OS03IgorKwkgIGVjaG8gIiRsLmNwLTg2OSBDUDg2OSIKKysJICBlY2hvICIkbC5jcC0xMjUzIENQMTI1MyIKKysJICBlY2hvICIkbC5jcC0xMjUzQGV1cm8gQ1AxMjUzIgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwkgIGVjaG8gIiRsLnV0Zi04QGV1cm8gVVRGLTgiCisrCWRvbmUKKysJZm9yIGwgaW4gaGUgaGVfSUwgaXcgaXdfSUw7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktOCIKKysJICBlY2hvICIkbC5pc28tODg1OS04IElTTy04ODU5LTgiCisrCSAgZWNobyAiJGwuY3AtODYyIENQODYyIgorKwkgIGVjaG8gIiRsLmNwLTEyNTUgQ1AxMjU1IgorKwkgIGVjaG8gIiRsLnV0Zi04IFVURi04IgorKwlkb25lCisrCWZvciBsIGluIHRyIHRyX1RSOyBkbworKwkgIGVjaG8gIiRsIElTTy04ODU5LTkiCisrCSAgZWNobyAiJGwuaXNvLTg4NTktOSBJU08tODg1OS05IgorKwkgIGVjaG8gIiRsLmNwLTg1NyBDUDg1NyIKKysJICBlY2hvICIkbC5jcC0xMjU0IENQMTI1NCIKKysJICBlY2hvICIkbC51dGYtOCBVVEYtOCIKKysJZG9uZQorKwlmb3IgbCBpbiBsdCBsdF9MVCBsdiBsdl9MVjsgZG8KKysJICAjZWNobyAiJGwgQkFMVElDIiAjIG5vdCBhIGNvbW1vbmx5IHVzZWQgZW5jb2RpbmcsIHdyb25nIGVuY29kaW5nIG5hbWUKKysJICBlY2hvICIkbCBJU08tODg1OS0xMyIKKysJZG9uZQorKwlmb3IgbCBpbiBydV9VQSB1ayB1a19VQTsgZG8KKysJICBlY2hvICIkbCBLT0k4LVUiCisrCWRvbmUKKysJZm9yIGwgaW4gemggemhfQ047IGRvCisrCSAgI2VjaG8gIiRsIEdCXzIzMTItODAiICMgbm90IGEgY29tbW9ubHkgdXNlZCBlbmNvZGluZywgd3JvbmcgZW5jb2RpbmcgbmFtZQorKwkgIGVjaG8gIiRsIEdCMjMxMiIKKysJZG9uZQorKwlmb3IgbCBpbiBqYSBqYV9KUCBqYV9KUC5FVUM7IGRvCisrCSAgZWNobyAiJGwgRVVDLUpQIgorKwlkb25lCisrCWZvciBsIGluIGtvIGtvX0tSOyBkbworKwkgIGVjaG8gIiRsIEVVQy1LUiIKKysJZG9uZQorKwlmb3IgbCBpbiB0aCB0aF9USDsgZG8KKysJICBlY2hvICIkbCBUSVMtNjIwIgorKwlkb25lCisrCWZvciBsIGluIGZhIGZhX0lSOyBkbworKwkgICNlY2hvICIkbCBJU0lSSS0zMzQyIiAjIGEgYnJva2VuIGVuY29kaW5nCisrCSAgZWNobyAiJGwudXRmLTggVVRGLTgiCisrCWRvbmUKKysJOzsKKysgICAgbGludXgqIHwgKi1nbnUqKQorKwkjIFdpdGggZ2xpYmMtMi4xIG9yIG5ld2VyLCB3ZSBkb24ndCBuZWVkIGFueSBjYW5vbmljYWxpemF0aW9uLAorKwkjIGJlY2F1c2UgZ2xpYmMgaGFzIGljb252IGFuZCBib3RoIGdsaWJjIGFuZCBsaWJpY29udiBzdXBwb3J0IGFsbAorKwkjIEdOVSBjYW5vbmljYWwgbmFtZXMgZGlyZWN0bHkuIFRoZXJlZm9yZSwgdGhlIE1ha2VmaWxlIGRvZXMgbm90CisrCSMgbmVlZCB0byBpbnN0YWxsIHRoZSBhbGlhcyBmaWxlIGF0IGFsbC4KKysJIyBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSB0byBnbGliYy0yLjAueCBhbmQgb2xkZXIgbGliY3MuCisrCWVjaG8gIklTT182NDYuSVJWOjE5ODMgQVNDSUkiCisrCTs7CisrICAgIGFpeCopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJJQk0tODUwIENQODUwIgorKwllY2hvICJJQk0tODU2IENQODU2IgorKwllY2hvICJJQk0tOTIxIElTTy04ODU5LTEzIgorKwllY2hvICJJQk0tOTIyIENQOTIyIgorKwllY2hvICJJQk0tOTMyIENQOTMyIgorKwllY2hvICJJQk0tOTQzIENQOTQzIgorKwllY2hvICJJQk0tMTA0NiBDUDEwNDYiCisrCWVjaG8gIklCTS0xMTI0IENQMTEyNCIKKysJZWNobyAiSUJNLTExMjkgQ1AxMTI5IgorKwllY2hvICJJQk0tMTI1MiBDUDEyNTIiCisrCWVjaG8gIklCTS1ldWNDTiBHQjIzMTIiCisrCWVjaG8gIklCTS1ldWNKUCBFVUMtSlAiCisrCWVjaG8gIklCTS1ldWNLUiBFVUMtS1IiCisrCWVjaG8gIklCTS1ldWNUVyBFVUMtVFciCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiVElTLTYyMCBUSVMtNjIwIgorKwllY2hvICJVVEYtOCBVVEYtOCIKKysJOzsKKysgICAgaHB1eCopCisrCWVjaG8gImlzbzg4NTkxIElTTy04ODU5LTEiCisrCWVjaG8gImlzbzg4NTkyIElTTy04ODU5LTIiCisrCWVjaG8gImlzbzg4NTk1IElTTy04ODU5LTUiCisrCWVjaG8gImlzbzg4NTk2IElTTy04ODU5LTYiCisrCWVjaG8gImlzbzg4NTk3IElTTy04ODU5LTciCisrCWVjaG8gImlzbzg4NTk4IElTTy04ODU5LTgiCisrCWVjaG8gImlzbzg4NTk5IElTTy04ODU5LTkiCisrCWVjaG8gImlzbzg4NTkxNSBJU08tODg1OS0xNSIKKysJZWNobyAicm9tYW44IEhQLVJPTUFOOCIKKysJZWNobyAiYXJhYmljOCBIUC1BUkFCSUM4IgorKwllY2hvICJncmVlazggSFAtR1JFRUs4IgorKwllY2hvICJoZWJyZXc4IEhQLUhFQlJFVzgiCisrCWVjaG8gInR1cmtpc2g4IEhQLVRVUktJU0g4IgorKwllY2hvICJrYW5hOCBIUC1LQU5BOCIKKysJZWNobyAidGlzNjIwIFRJUy02MjAiCisrCWVjaG8gImJpZzUgQklHNSIKKysJZWNobyAiZXVjSlAgRVVDLUpQIgorKwllY2hvICJldWNLUiBFVUMtS1IiCisrCWVjaG8gImV1Y1RXIEVVQy1UVyIKKysJZWNobyAiaHAxNUNOIEdCMjMxMiIKKysJI2VjaG8gImNjZGMgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwllY2hvICJ1dGY4IFVURi04IgorKwk7OworKyAgICBpcml4KikKKysJZWNobyAiSVNPODg1OS0xIElTTy04ODU5LTEiCisrCWVjaG8gIklTTzg4NTktMiBJU08tODg1OS0yIgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS03IElTTy04ODU5LTciCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJldWNDTiBHQjIzMTIiCisrCWVjaG8gImV1Y0pQIEVVQy1KUCIKKysJZWNobyAiZXVjS1IgRVVDLUtSIgorKwllY2hvICJldWNUVyBFVUMtVFciCisrCTs7CisrICAgIG9zZiopCisrCWVjaG8gIklTTzg4NTktMSBJU08tODg1OS0xIgorKwllY2hvICJJU084ODU5LTIgSVNPLTg4NTktMiIKKysJZWNobyAiSVNPODg1OS00IElTTy04ODU5LTQiCisrCWVjaG8gIklTTzg4NTktNSBJU08tODg1OS01IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJjcDg1MCBDUDg1MCIKKysJZWNobyAiYmlnNSBCSUc1IgorKwllY2hvICJkZWNoYW55dSBERUMtSEFOWVUiCisrCWVjaG8gImRlY2hhbnppIEdCMjMxMiIKKysJZWNobyAiZGVja2FuamkgREVDLUtBTkpJIgorKwllY2hvICJkZWNrb3JlYW4gRVVDLUtSIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJHQksgR0JLIgorKwllY2hvICJLU0M1NjAxIENQOTQ5IgorKwllY2hvICJzZGVja2FuamkgRVVDLUpQIgorKwllY2hvICJTSklTIFNISUZUX0pJUyIKKysJZWNobyAiVEFDVElTIFRJUy02MjAiCisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBzb2xhcmlzKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktMyBJU08tODg1OS0zIgorKwllY2hvICJJU084ODU5LTQgSVNPLTg4NTktNCIKKysJZWNobyAiSVNPODg1OS01IElTTy04ODU5LTUiCisrCWVjaG8gIklTTzg4NTktNiBJU08tODg1OS02IgorKwllY2hvICJJU084ODU5LTcgSVNPLTg4NTktNyIKKysJZWNobyAiSVNPODg1OS04IElTTy04ODU5LTgiCisrCWVjaG8gIklTTzg4NTktOSBJU08tODg1OS05IgorKwllY2hvICJJU084ODU5LTE1IElTTy04ODU5LTE1IgorKwllY2hvICJrb2k4LXIgS09JOC1SIgorKwllY2hvICJhbnNpLTEyNTEgQ1AxMjUxIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIkJpZzUtSEtTQ1MgQklHNS1IS1NDUyIKKysJZWNobyAiZ2IyMzEyIEdCMjMxMiIKKysJZWNobyAiR0JLIEdCSyIKKysJZWNobyAiR0IxODAzMCBHQjE4MDMwIgorKwllY2hvICJjbnMxMTY0MyBFVUMtVFciCisrCWVjaG8gIjU2MDEgRVVDLUtSIgorKwllY2hvICJrb19LUi5qb2hhcDkyIEpPSEFCIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gIlBDSyBTSElGVF9KSVMiCisrCWVjaG8gIlRJUzYyMC4yNTMzIFRJUy02MjAiCisrCSNlY2hvICJzdW5fZXVfZ3JlZWsgPyIgIyB3aGF0IGlzIHRoaXM/CisrCWVjaG8gIlVURi04IFVURi04IgorKwk7OworKyAgICBmcmVlYnNkKiB8IG9zMiopCisrCSMgRnJlZUJTRCA0LjIgZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwkjIExpa2V3aXNlIGZvciBPUy8yLiBPUy8yIGhhcyBYRnJlZTg2IGp1c3QgbGlrZSBGcmVlQlNELiBKdXN0CisrCSMgcmV1c2UgRnJlZUJTRCdzIGxvY2FsZSBkYXRhIGZvciBPUy8yLgorKwllY2hvICJDIEFTQ0lJIgorKwllY2hvICJVUy1BU0NJSSBBU0NJSSIKKysJZm9yIGwgaW4gbGFfTE4gbHRfTE47IGRvCisrCSAgZWNobyAiJGwuQVNDSUkgQVNDSUkiCisrCWRvbmUKKysJZm9yIGwgaW4gZGFfREsgZGVfQVQgZGVfQ0ggZGVfREUgZW5fQVUgZW5fQ0EgZW5fR0IgZW5fVVMgZXNfRVMgXAorKwkgICAgICAgICBmaV9GSSBmcl9CRSBmcl9DQSBmcl9DSCBmcl9GUiBpc19JUyBpdF9DSCBpdF9JVCBsYV9MTiBcCisrCSAgICAgICAgIGx0X0xOIG5sX0JFIG5sX05MIG5vX05PIHB0X1BUIHN2X1NFOyBkbworKwkgIGVjaG8gIiRsLklTT184ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5ESVNfODg1OS0xNSBJU08tODg1OS0xNSIKKysJZG9uZQorKwlmb3IgbCBpbiBjc19DWiBocl9IUiBodV9IVSBsYV9MTiBsdF9MTiBwbF9QTCBzbF9TSTsgZG8KKysJICBlY2hvICIkbC5JU09fODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNCBJU08tODg1OS00IgorKwlkb25lCisrCWZvciBsIGluIHJ1X1JVIHJ1X1NVOyBkbworKwkgIGVjaG8gIiRsLktPSTgtUiBLT0k4LVIiCisrCSAgZWNobyAiJGwuSVNPXzg4NTktNSBJU08tODg1OS01IgorKwkgIGVjaG8gIiRsLkNQODY2IENQODY2IgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAiamFfSlAuU2hpZnRfSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgbmV0YnNkKikKKysJZWNobyAiNjQ2IEFTQ0lJIgorKwllY2hvICJJU084ODU5LTEgSVNPLTg4NTktMSIKKysJZWNobyAiSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWVjaG8gIklTTzg4NTktNCBJU08tODg1OS00IgorKwllY2hvICJJU084ODU5LTUgSVNPLTg4NTktNSIKKysJZWNobyAiSVNPODg1OS0xNSBJU08tODg1OS0xNSIKKysJZWNobyAiZXVjQ04gR0IyMzEyIgorKwllY2hvICJldWNKUCBFVUMtSlAiCisrCWVjaG8gImV1Y0tSIEVVQy1LUiIKKysJZWNobyAiZXVjVFcgRVVDLVRXIgorKwllY2hvICJCSUc1IEJJRzUiCisrCWVjaG8gIlNKSVMgU0hJRlRfSklTIgorKwk7OworKyAgICBkYXJ3aW4qKQorKwkjIERhcndpbiA2LjggZG9lc24ndCBoYXZlIG5sX2xhbmdpbmZvKENPREVTRVQpOyB0aGVyZWZvcmUKKysJIyBsb2NhbGNoYXJzZXQuYyBmYWxscyBiYWNrIHRvIHVzaW5nIHRoZSBmdWxsIGxvY2FsZSBuYW1lCisrCSMgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorKwllY2hvICJDIEFTQ0lJIgorKwlmb3IgbCBpbiBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBsYV9MTjsgZG8KKysJICBlY2hvICIkbC5VUy1BU0NJSSBBU0NJSSIKKysJZG9uZQorKwlmb3IgbCBpbiBkYV9ESyBkZV9BVCBkZV9DSCBkZV9ERSBlbl9BVSBlbl9DQSBlbl9HQiBlbl9VUyBlc19FUyBcCisrCSAgICAgICAgIGZpX0ZJIGZyX0JFIGZyX0NBIGZyX0NIIGZyX0ZSIGlzX0lTIGl0X0NIIGl0X0lUIG5sX0JFIFwKKysJICAgICAgICAgbmxfTkwgbm9fTk8gcHRfUFQgc3ZfU0U7IGRvCisrCSAgZWNobyAiJGwgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTEgSVNPLTg4NTktMSIKKysJICBlY2hvICIkbC5JU084ODU5LTE1IElTTy04ODU5LTE1IgorKwlkb25lCisrCWZvciBsIGluIGxhX0xOOyBkbworKwkgIGVjaG8gIiRsLklTTzg4NTktMSBJU08tODg1OS0xIgorKwkgIGVjaG8gIiRsLklTTzg4NTktMTUgSVNPLTg4NTktMTUiCisrCWRvbmUKKysJZm9yIGwgaW4gY3NfQ1ogaHJfSFIgaHVfSFUgbGFfTE4gcGxfUEwgc2xfU0k7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS0yIElTTy04ODU5LTIiCisrCWRvbmUKKysJZm9yIGwgaW4gbGFfTE4gbHRfTFQ7IGRvCisrCSAgZWNobyAiJGwuSVNPODg1OS00IElTTy04ODU5LTQiCisrCWRvbmUKKysJZm9yIGwgaW4gcnVfUlU7IGRvCisrCSAgZWNobyAiJGwuS09JOC1SIEtPSTgtUiIKKysJICBlY2hvICIkbC5JU084ODU5LTUgSVNPLTg4NTktNSIKKysJICBlY2hvICIkbC5DUDg2NiBDUDg2NiIKKysJZG9uZQorKwlmb3IgbCBpbiBiZ19CRzsgZG8KKysJICBlY2hvICIkbC5DUDEyNTEgQ1AxMjUxIgorKwlkb25lCisrCWVjaG8gInVrX1VBLktPSTgtVSBLT0k4LVUiCisrCWVjaG8gInpoX1RXLkJJRzUgQklHNSIKKysJZWNobyAiemhfVFcuQmlnNSBCSUc1IgorKwllY2hvICJ6aF9DTi5FVUMgR0IyMzEyIgorKwllY2hvICJqYV9KUC5FVUMgRVVDLUpQIgorKwllY2hvICJqYV9KUC5TSklTIFNISUZUX0pJUyIKKysJZWNobyAia29fS1IuRVVDIEVVQy1LUiIKKysJOzsKKysgICAgYmVvcyopCisrCSMgQmVPUyBoYXMgYSBzaW5nbGUgbG9jYWxlLCBhbmQgaXQgaGFzIFVURi04IGVuY29kaW5nLgorKwllY2hvICIqIFVURi04IgorKwk7OworKyAgICBtc2Rvc2RqZ3BwKikKKysJIyBESkdQUCAyLjAzIGRvZXNuJ3QgaGF2ZSBubF9sYW5naW5mbyhDT0RFU0VUKTsgdGhlcmVmb3JlCisrCSMgbG9jYWxjaGFyc2V0LmMgZmFsbHMgYmFjayB0byB1c2luZyB0aGUgZnVsbCBsb2NhbGUgbmFtZQorKwkjIGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKysJZWNobyAiIyIKKysJZWNobyAiIyBUaGUgZW5jb2RpbmdzIGdpdmVuIGhlcmUgbWF5IG5vdCBhbGwgYmUgY29ycmVjdC4iCisrCWVjaG8gIiMgSWYgeW91IGZpbmQgdGhhdCB0aGUgZW5jb2RpbmcgZ2l2ZW4gZm9yIHlvdXIgbGFuZ3VhZ2UgYW5kIgorKwllY2hvICIjIGNvdW50cnkgaXMgbm90IHRoZSBvbmUgeW91ciBET1MgbWFjaGluZSBhY3R1YWxseSB1c2VzLCBqdXN0IgorKwllY2hvICIjIGNvcnJlY3QgaXQgaW4gdGhpcyBmaWxlLCBhbmQgc2VuZCBhIG1haWwgdG8iCisrCWVjaG8gIiMgSnVhbiBNYW51ZWwgR3VlcnJlcm8gPHN0MDAxOTA2QGhyejEuaHJ6LnR1LWRhcm1zdGFkdC5kZT4iCisrCWVjaG8gIiMgYW5kIEJydW5vIEhhaWJsZSA8YnJ1bm9AY2xpc3Aub3JnPi4iCisrCWVjaG8gIiMiCisrCWVjaG8gIkMgQVNDSUkiCisrCSMgSVNPLTg4NTktMSBsYW5ndWFnZXMKKysJZWNobyAiY2EgQ1A4NTAiCisrCWVjaG8gImNhX0VTIENQODUwIgorKwllY2hvICJkYSBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAiZGFfREsgQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gImRlIENQODUwIgorKwllY2hvICJkZV9BVCBDUDg1MCIKKysJZWNobyAiZGVfQ0ggQ1A4NTAiCisrCWVjaG8gImRlX0RFIENQODUwIgorKwllY2hvICJlbiBDUDg1MCIKKysJZWNobyAiZW5fQVUgQ1A4NTAiICMgbm90IENQNDM3ID8/CisrCWVjaG8gImVuX0NBIENQODUwIgorKwllY2hvICJlbl9HQiBDUDg1MCIKKysJZWNobyAiZW5fTlogQ1A0MzciCisrCWVjaG8gImVuX1VTIENQNDM3IgorKwllY2hvICJlbl9aQSBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiZXMgQ1A4NTAiCisrCWVjaG8gImVzX0FSIENQODUwIgorKwllY2hvICJlc19CTyBDUDg1MCIKKysJZWNobyAiZXNfQ0wgQ1A4NTAiCisrCWVjaG8gImVzX0NPIENQODUwIgorKwllY2hvICJlc19DUiBDUDg1MCIKKysJZWNobyAiZXNfQ1UgQ1A4NTAiCisrCWVjaG8gImVzX0RPIENQODUwIgorKwllY2hvICJlc19FQyBDUDg1MCIKKysJZWNobyAiZXNfRVMgQ1A4NTAiCisrCWVjaG8gImVzX0dUIENQODUwIgorKwllY2hvICJlc19ITiBDUDg1MCIKKysJZWNobyAiZXNfTVggQ1A4NTAiCisrCWVjaG8gImVzX05JIENQODUwIgorKwllY2hvICJlc19QQSBDUDg1MCIKKysJZWNobyAiZXNfUFkgQ1A4NTAiCisrCWVjaG8gImVzX1BFIENQODUwIgorKwllY2hvICJlc19TViBDUDg1MCIKKysJZWNobyAiZXNfVVkgQ1A4NTAiCisrCWVjaG8gImVzX1ZFIENQODUwIgorKwllY2hvICJldCBDUDg1MCIKKysJZWNobyAiZXRfRUUgQ1A4NTAiCisrCWVjaG8gImV1IENQODUwIgorKwllY2hvICJldV9FUyBDUDg1MCIKKysJZWNobyAiZmkgQ1A4NTAiCisrCWVjaG8gImZpX0ZJIENQODUwIgorKwllY2hvICJmciBDUDg1MCIKKysJZWNobyAiZnJfQkUgQ1A4NTAiCisrCWVjaG8gImZyX0NBIENQODUwIgorKwllY2hvICJmcl9DSCBDUDg1MCIKKysJZWNobyAiZnJfRlIgQ1A4NTAiCisrCWVjaG8gImdhIENQODUwIgorKwllY2hvICJnYV9JRSBDUDg1MCIKKysJZWNobyAiZ2QgQ1A4NTAiCisrCWVjaG8gImdkX0dCIENQODUwIgorKwllY2hvICJnbCBDUDg1MCIKKysJZWNobyAiZ2xfRVMgQ1A4NTAiCisrCWVjaG8gImlkIENQODUwIiAgICAjIG5vdCBDUDQzNyA/PworKwllY2hvICJpZF9JRCBDUDg1MCIgIyBub3QgQ1A0MzcgPz8KKysJZWNobyAiaXMgQ1A4NjEiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gImlzX0lTIENQODYxIiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJpdCBDUDg1MCIKKysJZWNobyAiaXRfQ0ggQ1A4NTAiCisrCWVjaG8gIml0X0lUIENQODUwIgorKwllY2hvICJsdCBDUDc3NSIKKysJZWNobyAibHRfTFQgQ1A3NzUiCisrCWVjaG8gImx2IENQNzc1IgorKwllY2hvICJsdl9MViBDUDc3NSIKKysJZWNobyAibmIgQ1A4NjUiICAgICMgbm90IENQODUwID8/CisrCWVjaG8gIm5iX05PIENQODY1IiAjIG5vdCBDUDg1MCA/PworKwllY2hvICJubCBDUDg1MCIKKysJZWNobyAibmxfQkUgQ1A4NTAiCisrCWVjaG8gIm5sX05MIENQODUwIgorKwllY2hvICJubiBDUDg2NSIgICAgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAibm5fTk8gQ1A4NjUiICMgbm90IENQODUwID8/CisrCWVjaG8gIm5vIENQODY1IiAgICAjIG5vdCBDUDg1MCA/PworKwllY2hvICJub19OTyBDUDg2NSIgIyBub3QgQ1A4NTAgPz8KKysJZWNobyAicHQgQ1A4NTAiCisrCWVjaG8gInB0X0JSIENQODUwIgorKwllY2hvICJwdF9QVCBDUDg1MCIKKysJZWNobyAic3YgQ1A4NTAiCisrCWVjaG8gInN2X1NFIENQODUwIgorKwkjIElTTy04ODU5LTIgbGFuZ3VhZ2VzCisrCWVjaG8gImNzIENQODUyIgorKwllY2hvICJjc19DWiBDUDg1MiIKKysJZWNobyAiaHIgQ1A4NTIiCisrCWVjaG8gImhyX0hSIENQODUyIgorKwllY2hvICJodSBDUDg1MiIKKysJZWNobyAiaHVfSFUgQ1A4NTIiCisrCWVjaG8gInBsIENQODUyIgorKwllY2hvICJwbF9QTCBDUDg1MiIKKysJZWNobyAicm8gQ1A4NTIiCisrCWVjaG8gInJvX1JPIENQODUyIgorKwllY2hvICJzayBDUDg1MiIKKysJZWNobyAic2tfU0sgQ1A4NTIiCisrCWVjaG8gInNsIENQODUyIgorKwllY2hvICJzbF9TSSBDUDg1MiIKKysJZWNobyAic3EgQ1A4NTIiCisrCWVjaG8gInNxX0FMIENQODUyIgorKwllY2hvICJzciBDUDg1MiIgICAgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9DUyBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwllY2hvICJzcl9ZVSBDUDg1MiIgIyBDUDg1MiBvciBDUDg2NiBvciBDUDg1NSA/PworKwkjIElTTy04ODU5LTMgbGFuZ3VhZ2VzCisrCWVjaG8gIm10IENQODUwIgorKwllY2hvICJtdF9NVCBDUDg1MCIKKysJIyBJU08tODg1OS01IGxhbmd1YWdlcworKwllY2hvICJiZSBDUDg2NiIKKysJZWNobyAiYmVfQkUgQ1A4NjYiCisrCWVjaG8gImJnIENQODY2IiAgICAjIG5vdCBDUDg1NSA/PworKwllY2hvICJiZ19CRyBDUDg2NiIgIyBub3QgQ1A4NTUgPz8KKysJZWNobyAibWsgQ1A4NjYiICAgICMgbm90IENQODU1ID8/CisrCWVjaG8gIm1rX01LIENQODY2IiAjIG5vdCBDUDg1NSA/PworKwllY2hvICJydSBDUDg2NiIKKysJZWNobyAicnVfUlUgQ1A4NjYiCisrCWVjaG8gInVrIENQMTEyNSIKKysJZWNobyAidWtfVUEgQ1AxMTI1IgorKwkjIElTTy04ODU5LTYgbGFuZ3VhZ2VzCisrCWVjaG8gImFyIENQODY0IgorKwllY2hvICJhcl9BRSBDUDg2NCIKKysJZWNobyAiYXJfRFogQ1A4NjQiCisrCWVjaG8gImFyX0VHIENQODY0IgorKwllY2hvICJhcl9JUSBDUDg2NCIKKysJZWNobyAiYXJfSVIgQ1A4NjQiCisrCWVjaG8gImFyX0pPIENQODY0IgorKwllY2hvICJhcl9LVyBDUDg2NCIKKysJZWNobyAiYXJfTUEgQ1A4NjQiCisrCWVjaG8gImFyX09NIENQODY0IgorKwllY2hvICJhcl9RQSBDUDg2NCIKKysJZWNobyAiYXJfU0EgQ1A4NjQiCisrCWVjaG8gImFyX1NZIENQODY0IgorKwkjIElTTy04ODU5LTcgbGFuZ3VhZ2VzCisrCWVjaG8gImVsIENQODY5IgorKwllY2hvICJlbF9HUiBDUDg2OSIKKysJIyBJU08tODg1OS04IGxhbmd1YWdlcworKwllY2hvICJoZSBDUDg2MiIKKysJZWNobyAiaGVfSUwgQ1A4NjIiCisrCSMgSVNPLTg4NTktOSBsYW5ndWFnZXMKKysJZWNobyAidHIgQ1A4NTciCisrCWVjaG8gInRyX1RSIENQODU3IgorKwkjIEphcGFuZXNlCisrCWVjaG8gImphIENQOTMyIgorKwllY2hvICJqYV9KUCBDUDkzMiIKKysJIyBDaGluZXNlCisrCWVjaG8gInpoX0NOIEdCSyIKKysJZWNobyAiemhfVFcgQ1A5NTAiICMgbm90IENQOTM4ID8/CisrCSMgS29yZWFuCisrCWVjaG8gImtyIENQOTQ5IiAgICAjIG5vdCBDUDkzNCA/PworKwllY2hvICJrcl9LUiBDUDk0OSIgIyBub3QgQ1A5MzQgPz8KKysJIyBUaGFpCisrCWVjaG8gInRoIENQODc0IgorKwllY2hvICJ0aF9USCBDUDg3NCIKKysJIyBPdGhlcgorKwllY2hvICJlbyBDUDg1MCIKKysJZWNobyAiZW9fRU8gQ1A4NTAiCisrCTs7CisrZXNhYworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2RjZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2RjZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzU5NzQ3NDgwIC0wNDAwCitAQCAtMSw1OTMgKzEsNTYgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGNnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSBkY2dldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorLSMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKy0jZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKy0jIGVsc2UKKy0jICBpZmRlZiBfQUlYCistICNwcmFnbWEgYWxsb2NhCistIyAgZWxzZQorLSMgICBpZm5kZWYgYWxsb2NhCistY2hhciAqYWxsb2NhICgpOworLSMgICBlbmRpZgorLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpbmNsdWRlIDxlcnJuby5oPgorLSNpZm5kZWYgZXJybm8KKy1leHRlcm4gaW50IGVycm5vOworLSNlbmRpZgorLSNpZm5kZWYgX19zZXRfZXJybm8KKy0jIGRlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5vID0gKHZhbCkKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy1jaGFyICpnZXRlbnYgKCk7CistIyBpZmRlZiBIQVZFX01BTExPQ19ICistIyAgaW5jbHVkZSA8bWFsbG9jLmg+CistIyBlbHNlCistdm9pZCBmcmVlICgpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1NUUklOR19IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBfR05VX1NPVVJDRQorLSMgIGRlZmluZSBfR05VX1NPVVJDRQkxCistIyBlbmRpZgorLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0jaWYgZGVmaW5lZCBIQVZFX1VOSVNURF9IIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHVuaXN0ZC5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKy0jaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmZGVmIF9MSUJDCistLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCistICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorLSAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKy0jIGRlZmluZSBzdHBjcHkgX19zdHBjcHkKKy0jZWxzZQorLSMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKy1jaGFyICpnZXR3ZCAoKTsKKy0jICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorLSMgZWxzZQorLWNoYXIgKmdldGN3ZCAoKTsKKy0jIGVuZGlmCistIyBpZm5kZWYgSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqc3RwY3B5IFBBUkFNUyAoKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBBbW91bnQgdG8gaW5jcmVhc2UgYnVmZmVyIHNpemUgYnkgaW4gZWFjaCB0cnkuICAqLworLSNkZWZpbmUgUEFUSF9JTkNSIDMyCistCistLyogVGhlIGZvbGxvd2luZyBpcyBmcm9tIHBhdGhtYXguaC4gICovCistLyogTm9uLVBPU0lYIEJTRCBzeXN0ZW1zIG1pZ2h0IGhhdmUgZ2NjJ3MgbGltaXRzLmgsIHdoaWNoIGRvZXNuJ3QgZGVmaW5lCistICAgUEFUSF9NQVggYnV0IG1pZ2h0IGNhdXNlIHJlZGVmaW5pdGlvbiB3YXJuaW5ncyB3aGVuIHN5cy9wYXJhbS5oIGlzCistICAgbGF0ZXIgaW5jbHVkZWQgKGFzIG9uIE1PUkUvQlNEIDQuMykuICAqLworLSNpZiBkZWZpbmVkKF9QT1NJWF9WRVJTSU9OKSB8fCAoZGVmaW5lZChIQVZFX0xJTUlUU19IKSAmJiAhZGVmaW5lZChfX0dOVUNfXykpCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0jaWZuZGVmIF9QT1NJWF9QQVRIX01BWAorLSMgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTUKKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoX1BDX1BBVEhfTUFYKQorLSMgZGVmaW5lIFBBVEhfTUFYIChwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpIDwgMSA/IDEwMjQgOiBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpKQorLSNlbmRpZgorLQorLS8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCistI2lmIGRlZmluZWQoSEFWRV9TWVNfUEFSQU1fSCkgJiYgIWRlZmluZWQoUEFUSF9NQVgpICYmICFkZWZpbmVkKE1BWFBBVEhMRU4pCistIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKy0jZW5kaWYKKy0KKy0jaWYgIWRlZmluZWQoUEFUSF9NQVgpICYmIGRlZmluZWQoTUFYUEFUSExFTikKKy0jIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCistI2VuZGlmCistCistI2lmbmRlZiBQQVRIX01BWAorLSMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorLSNlbmRpZgorLQorLS8qIFhQRzMgZGVmaW5lcyB0aGUgcmVzdWx0IG9mIGBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKScgYXM6CistICAgYGBEaXJlY3RzIGBzZXRsb2NhbGUoKScgdG8gcXVlcnkgYGNhdGVnb3J5JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50CistICAgICBzZXR0aW5nIG9mIGBsb2NhbCcuJycKKy0gICBIb3dldmVyIGl0IGRvZXMgbm90IHNwZWNpZnkgdGhlIGV4YWN0IGZvcm1hdC4gIEFuZCBldmVuIHdvcnNlOiBQT1NJWAorLSAgIGRlZmluZXMgdGhpcyBub3QgYXQgYWxsLiAgU28gd2UgY2FuIHVzZSB0aGlzIGZlYXR1cmUgb25seSBvbiBzZWxlY3RlZAorLSAgIHN5c3RlbSAoZS5nLiB0aG9zZSB1c2luZyBHTlUgQyBMaWJyYXJ5KS4gICovCistI2lmZGVmIF9MSUJDCistIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorLSNlbmRpZgorLQorLS8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKy0gICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdID0gIm1lc3NhZ2VzIjsKKy0KKy0vKiBWYWx1ZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGRvbWFpbiBmb3IgZ2V0dGV4dCgzKS4gICovCistY29uc3QgY2hhciAqX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKy0KKy0vKiBDb250YWlucyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbWVzc2FnZSBjYXRhbG9ncy4gICovCistY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBHTlVMT0NBTEVESVI7CistCistLyogTGlzdCB3aXRoIGJpbmRpbmdzIG9mIHNwZWNpZmljIGRvbWFpbnMgY3JlYXRlZCBieSBiaW5kdGV4dGRvbWFpbigpCistICAgY2FsbHMuICAqLworLXN0cnVjdCBiaW5kaW5nICpfbmxfZG9tYWluX2JpbmRpbmdzOworLQorLS8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCistc3RhdGljIGNoYXIgKmZpbmRfbXNnIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorLQkJCSAgICAgICBjb25zdCBjaGFyICptc2dpZCkpOworLXN0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIFBBUkFNUyAoKGludCBjYXRlZ29yeSkpOworLXN0YXRpYyBjb25zdCBjaGFyICpndWVzc19jYXRlZ29yeV92YWx1ZSBQQVJBTVMgKChpbnQgY2F0ZWdvcnksCistCQkJCQkJIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkpOworLQorLQorLS8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorLSAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCistI2lmZGVmIEhBVkVfQUxMT0NBCistLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHJlc3MpIC8qIG5vdGhpbmcgKi8KKy0jIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KSAvKiBub3RoaW5nICovCistI2Vsc2UKKy1zdHJ1Y3QgYmxvY2tfbGlzdAorLXsKKy0gIHZvaWQgKmFkZHJlc3M7CistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV4dDsKKy19OworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyKQkJCQkJCSAgICAgIFwKKy0gIGRvIHsJCQkJCQkJCQkgICAgICBcCistICAgIHN0cnVjdCBibG9ja19saXN0ICpuZXdwID0gKHN0cnVjdCBibG9ja19saXN0ICopIG1hbGxvYyAoc2l6ZW9mICgqbmV3cCkpOyAgXAorLSAgICAvKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgZnJlZSBibG9jayB3ZSBjYW5ub3QgYWRkIHRoZSBuZXcgZWxlbWVudCB0bwkgICAgICBcCistICAgICAgIHRoZSBsaXN0LiAgKi8JCQkJCQkJICAgICAgXAorLSAgICBpZiAobmV3cCAhPSBOVUxMKSB7CQkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5hZGRyZXNzID0gKGFkZHIpOwkJCQkJCSAgICAgIFwKKy0gICAgICBuZXdwLT5uZXh0ID0gKGxpc3QpOwkJCQkJCSAgICAgIFwKKy0gICAgICAobGlzdCkgPSBuZXdwOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgZGVmaW5lIEZSRUVfQkxPQ0tTKGxpc3QpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgewkJCQkJCSAgICAgIFwKKy0gICAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqb2xkID0gbGlzdDsJCQkJCSAgICAgIFwKKy0gICAgICBsaXN0ID0gbGlzdC0+bmV4dDsJCQkJCQkgICAgICBcCistICAgICAgZnJlZSAob2xkKTsJCQkJCQkJICAgICAgXAorLSAgICB9CQkJCQkJCQkJICAgICAgXAorLSAgfSB3aGlsZSAoMCkKKy0jIHVuZGVmIGFsbG9jYQorLSMgZGVmaW5lIGFsbG9jYShzaXplKSAobWFsbG9jIChzaXplKSkKKy0jZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKy0KKy0KKyAvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisgICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorICAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworICAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKyAjZWxzZQorLSMgZGVmaW5lIERDR0VUVEVYVCBkY2dldHRleHRfXworKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisgICAgbG9jYWxlLiAgKi8KKyBjaGFyICoKKy1EQ0dFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKy0gICAgIGludCBjYXRlZ29yeTsKKytEQ0dFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpCisgeworLSNpZm5kZWYgSEFWRV9BTExPQ0EKKy0gIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKy0jZW5kaWYKKy0gIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKy0gIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLSAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKy0gIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKy0gIGNoYXIgKnNpbmdsZV9sb2NhbGU7CistICBjaGFyICpyZXR2YWw7CistICBpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKy0KKy0gIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworLSAgaWYgKG1zZ2lkID09IE5VTEwpCistICAgIHJldHVybiBOVUxMOworLQorLSAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorLSAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCistICAgICBkZWZpbnRpb24gbGVmdCB0aGlzIHVuZGVmaW5lZC4gICovCistICBpZiAoZG9tYWlubmFtZSA9PSBOVUxMKQorLSAgICBkb21haW5uYW1lID0gX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW47CistCistICAvKiBGaXJzdCBmaW5kIG1hdGNoaW5nIGJpbmRpbmcuICAqLworLSAgZm9yIChiaW5kaW5nID0gX25sX2RvbWFpbl9iaW5kaW5nczsgYmluZGluZyAhPSBOVUxMOyBiaW5kaW5nID0gYmluZGluZy0+bmV4dCkKKy0gICAgeworLSAgICAgIGludCBjb21wYXJlID0gc3RyY21wIChkb21haW5uYW1lLCBiaW5kaW5nLT5kb21haW5uYW1lKTsKKy0gICAgICBpZiAoY29tcGFyZSA9PSAwKQorLQkvKiBXZSBmb3VuZCBpdCEgICovCistCWJyZWFrOworLSAgICAgIGlmIChjb21wYXJlIDwgMCkKKy0JeworLQkgIC8qIEl0IGlzIG5vdCBpbiB0aGUgbGlzdC4gICovCistCSAgYmluZGluZyA9IE5VTEw7CistCSAgYnJlYWs7CistCX0KKy0gICAgfQorLQorLSAgaWYgKGJpbmRpbmcgPT0gTlVMTCkKKy0gICAgZGlybmFtZSA9IChjaGFyICopIF9ubF9kZWZhdWx0X2Rpcm5hbWU7CistICBlbHNlIGlmIChiaW5kaW5nLT5kaXJuYW1lWzBdID09ICcvJykKKy0gICAgZGlybmFtZSA9IGJpbmRpbmctPmRpcm5hbWU7CistICBlbHNlCistICAgIHsKKy0gICAgICAvKiBXZSBoYXZlIGEgcmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUgbm93LiAgKi8KKy0gICAgICBzaXplX3QgZGlybmFtZV9sZW4gPSBzdHJsZW4gKGJpbmRpbmctPmRpcm5hbWUpICsgMTsKKy0gICAgICBzaXplX3QgcGF0aF9tYXg7CistICAgICAgY2hhciAqcmV0OworLQorLSAgICAgIHBhdGhfbWF4ID0gKHVuc2lnbmVkKSBQQVRIX01BWDsKKy0gICAgICBwYXRoX21heCArPSAyOwkJLyogVGhlIGdldGN3ZCBkb2NzIHNheSB0byBkbyB0aGlzLiAgKi8KKy0KKy0gICAgICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0gICAgICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQorLSAgICAgIF9fc2V0X2Vycm5vICgwKTsKKy0gICAgICB3aGlsZSAoKHJldCA9IGdldGN3ZCAoZGlybmFtZSwgcGF0aF9tYXgpKSA9PSBOVUxMICYmIGVycm5vID09IEVSQU5HRSkKKy0JeworLQkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKy0JICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKy0JICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworLQkgIF9fc2V0X2Vycm5vICgwKTsKKy0JfQorLQorLSAgICAgIGlmIChyZXQgPT0gTlVMTCkKKy0JeworLQkgIC8qIFdlIGNhbm5vdCBnZXQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuICBEb24ndCBzaWduYWwgYW4KKy0JICAgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworLQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgIHJldHVybiAoY2hhciAqKSBtc2dpZDsKKy0JfQorLQorLSAgICAgIHN0cGNweSAoc3RwY3B5IChzdHJjaHIgKGRpcm5hbWUsICdcMCcpLCAiLyIpLCBiaW5kaW5nLT5kaXJuYW1lKTsKKy0gICAgfQorLQorLSAgLyogTm93IGRldGVybWluZSB0aGUgc3ltYm9saWMgbmFtZSBvZiBDQVRFR09SWSBhbmQgaXRzIHZhbHVlLiAgKi8KKy0gIGNhdGVnb3J5bmFtZSA9IGNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KTsKKy0gIGNhdGVnb3J5dmFsdWUgPSBndWVzc19jYXRlZ29yeV92YWx1ZSAoY2F0ZWdvcnksIGNhdGVnb3J5bmFtZSk7CistCistICB4ZG9tYWlubmFtZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeW5hbWUpCistCQkJCSArIHN0cmxlbiAoZG9tYWlubmFtZSkgKyA1KTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworLQorLSAgc3RwY3B5IChzdHBjcHkgKHN0cGNweSAoc3RwY3B5ICh4ZG9tYWlubmFtZSwgY2F0ZWdvcnluYW1lKSwgIi8iKSwKKy0JCSAgZG9tYWlubmFtZSksCistCSAgIi5tbyIpOworLQorLSAgLyogQ3JlYXRpbmcgd29ya2luZyBhcmVhLiAgKi8KKy0gIHNpbmdsZV9sb2NhbGUgPSAoY2hhciAqKSBhbGxvY2EgKHN0cmxlbiAoY2F0ZWdvcnl2YWx1ZSkgKyAxKTsKKy0gIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgc2luZ2xlX2xvY2FsZSk7CistCistCistICAvKiBTZWFyY2ggZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBUaGlzIGlzIGEgbG9vcCBiZWNhdXNlIHdlIHBlcmhhcHMKKy0gICAgIGdvdCBhbiBvcmRlcmVkIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGNvbnNpZGVyIGZvciB0aCB0cmFuc2xhdGlvbi4gICovCistICB3aGlsZSAoMSkKKy0gICAgeworLSAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKy0gICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorLQkrK2NhdGVnb3J5dmFsdWU7CistICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKy0JeworLQkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorLQkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKy0JICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorLQkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCistCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKy0JICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKy0JfQorLSAgICAgIGVsc2UKKy0JeworLQkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKy0JICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorLQkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworLQkgICpjcCA9ICdcMCc7CistCX0KKy0KKy0gICAgICAvKiBJZiB0aGUgY3VycmVudCBsb2NhbGUgdmFsdWUgaXMgQyAob3IgUE9TSVgpIHdlIGRvbid0IGxvYWQgYQorLQkgZG9tYWluLiAgUmV0dXJuIHRoZSBNU0dJRC4gICovCistICAgICAgaWYgKHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIkMiKSA9PSAwCistCSAgfHwgc3RyY21wIChzaW5nbGVfbG9jYWxlLCAiUE9TSVgiKSA9PSAwKQorLQl7CistCSAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CistCSAgcmV0dXJuIChjaGFyICopIG1zZ2lkOworLQl9CistCistCistICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorLQkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworLSAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUpOworLQorLSAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKy0JeworLQkgIHJldHZhbCA9IGZpbmRfbXNnIChkb21haW4sIG1zZ2lkKTsKKy0KKy0JICBpZiAocmV0dmFsID09IE5VTEwpCistCSAgICB7CistCSAgICAgIGludCBjbnQ7CistCistCSAgICAgIGZvciAoY250ID0gMDsgZG9tYWluLT5zdWNjZXNzb3JbY250XSAhPSBOVUxMOyArK2NudCkKKy0JCXsKKy0JCSAgcmV0dmFsID0gZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIG1zZ2lkKTsKKy0KKy0JCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorLQkJICAgIGJyZWFrOworLQkJfQorLQkgICAgfQorLQorLQkgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JICAgIHsKKy0JICAgICAgRlJFRV9CTE9DS1MgKGJsb2NrX2xpc3QpOworLQkgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworLQkgICAgICByZXR1cm4gcmV0dmFsOworLQkgICAgfQorLQl9CistICAgIH0KKy0gIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiBEQ0lHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCwgTlVMTCwgMCwgMCwgY2F0ZWdvcnkpOworIH0KKyAKKyAjaWZkZWYgX0xJQkMKKyAvKiBBbGlhcyBmb3IgZnVuY3Rpb24gbmFtZSBpbiBHTlUgQyBMaWJyYXJ5LiAgKi8KKytJTlRERUYoX19kY2dldHRleHQpCisgd2Vha19hbGlhcyAoX19kY2dldHRleHQsIGRjZ2V0dGV4dCk7CisgI2VuZGlmCistCistCistc3RhdGljIGNoYXIgKgorLWZpbmRfbXNnIChkb21haW5fZmlsZSwgbXNnaWQpCistICAgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLXsKKy0gIHNpemVfdCB0b3AsIGFjdCwgYm90dG9tOworLSAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKGRvbWFpbl9maWxlKTsKKy0KKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKy0KKy0gIC8qIExvY2F0ZSB0aGUgTVNHSUQgYW5kIGl0cyB0cmFuc2xhdGlvbi4gICovCistICBpZiAoZG9tYWluLT5oYXNoX3NpemUgPiAyICYmIGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKy0gICAgeworLSAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCistICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKy0gICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CistICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKy0gICAgICBubHNfdWludDMyIG5zdHIgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKy0KKy0gICAgICBpZiAobnN0ciA9PSAwKQorLQkvKiBIYXNoIHRhYmxlIGVudHJ5IGlzIGVtcHR5LiAgKi8KKy0JcmV0dXJuIE5VTEw7CistCistICAgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICYmIHN0cmNtcCAobXNnaWQsCistCQkgICAgIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkgICAgICAgZG9tYWluLT5vcmlnX3RhYltuc3RyIC0gMV0ub2Zmc2V0KSkgPT0gMCkKKy0JcmV0dXJuIChjaGFyICopIGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorLQkJCQkJICBkb21haW4tPnRyYW5zX3RhYltuc3RyIC0gMV0ub2Zmc2V0KTsKKy0KKy0gICAgICB3aGlsZSAoMSkKKy0JeworLQkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorLQkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKy0JICBlbHNlCistCSAgICBpZHggKz0gaW5jcjsKKy0KKy0JICBuc3RyID0gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+aGFzaF90YWJbaWR4XSk7CistCSAgaWYgKG5zdHIgPT0gMCkKKy0JICAgIC8qIEhhc2ggdGFibGUgZW50cnkgaXMgZW1wdHkuICAqLworLQkgICAgcmV0dXJuIE5VTEw7CistCistCSAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPm9yaWdfdGFiW25zdHIgLSAxXS5sZW5ndGgpID09IGxlbgorLQkgICAgICAmJiBzdHJjbXAgKG1zZ2lkLAorLQkJCSBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJCSAgIGRvbWFpbi0+b3JpZ190YWJbbnN0ciAtIDFdLm9mZnNldCkpCistCSAgICAgICAgID09IDApCistCSAgICByZXR1cm4gKGNoYXIgKikgZG9tYWluLT5kYXRhCistCSAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+dHJhbnNfdGFiW25zdHIgLSAxXS5vZmZzZXQpOworLQl9CistICAgICAgLyogTk9UUkVBQ0hFRCAqLworLSAgICB9CistCistICAvKiBOb3cgd2UgdHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZAorLSAgICAgYXJyYXkgb2YgbWVzc2FnZXMuICAqLworLSAgYm90dG9tID0gMDsKKy0gIHRvcCA9IGRvbWFpbi0+bnN0cmluZ3M7CistICB3aGlsZSAoYm90dG9tIDwgdG9wKQorLSAgICB7CistICAgICAgaW50IGNtcF92YWw7CistCistICAgICAgYWN0ID0gKGJvdHRvbSArIHRvcCkgLyAyOworLSAgICAgIGNtcF92YWwgPSBzdHJjbXAgKG1zZ2lkLCBkb21haW4tPmRhdGEKKy0JCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKy0JCQkJICAgIGRvbWFpbi0+b3JpZ190YWJbYWN0XS5vZmZzZXQpKTsKKy0gICAgICBpZiAoY21wX3ZhbCA8IDApCistCXRvcCA9IGFjdDsKKy0gICAgICBlbHNlIGlmIChjbXBfdmFsID4gMCkKKy0JYm90dG9tID0gYWN0ICsgMTsKKy0gICAgICBlbHNlCistCWJyZWFrOworLSAgICB9CistCistICAvKiBJZiBhbiB0cmFuc2xhdGlvbiBpcyBmb3VuZCByZXR1cm4gdGhpcy4gICovCistICByZXR1cm4gYm90dG9tID49IHRvcCA/IE5VTEwgOiAoY2hhciAqKSBkb21haW4tPmRhdGEKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCistCQkJCSAgICAgZG9tYWluLT50cmFuc190YWJbYWN0XS5vZmZzZXQpOworLX0KKy0KKy0KKy0vKiBSZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxvY2FsZSBDQVRFR09SWS4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWNhdGVnb3J5X3RvX25hbWUgKGNhdGVnb3J5KQorLSAgICAgaW50IGNhdGVnb3J5OworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIHN3aXRjaCAoY2F0ZWdvcnkpCistICB7CistI2lmZGVmIExDX0NPTExBVEUKKy0gIGNhc2UgTENfQ09MTEFURToKKy0gICAgcmV0dmFsID0gIkxDX0NPTExBVEUiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQ1RZUEUKKy0gIGNhc2UgTENfQ1RZUEU6CistICAgIHJldHZhbCA9ICJMQ19DVFlQRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NT05FVEFSWQorLSAgY2FzZSBMQ19NT05FVEFSWToKKy0gICAgcmV0dmFsID0gIkxDX01PTkVUQVJZIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX05VTUVSSUMKKy0gIGNhc2UgTENfTlVNRVJJQzoKKy0gICAgcmV0dmFsID0gIkxDX05VTUVSSUMiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfVElNRQorLSAgY2FzZSBMQ19USU1FOgorLSAgICByZXR2YWwgPSAiTENfVElNRSI7CistICAgIGJyZWFrOworLSNlbmRpZgorLSNpZmRlZiBMQ19NRVNTQUdFUworLSAgY2FzZSBMQ19NRVNTQUdFUzoKKy0gICAgcmV0dmFsID0gIkxDX01FU1NBR0VTIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistI2lmZGVmIExDX1JFU1BPTlNFCistICBjYXNlIExDX1JFU1BPTlNFOgorLSAgICByZXR2YWwgPSAiTENfUkVTUE9OU0UiOworLSAgICBicmVhazsKKy0jZW5kaWYKKy0jaWZkZWYgTENfQUxMCistICBjYXNlIExDX0FMTDoKKy0gICAgLyogVGhpcyBtaWdodCBub3QgbWFrZSBzZW5zZSBidXQgaXMgcGVyaGFwcyBiZXR0ZXIgdGhhbiBhbnkgb3RoZXIKKy0gICAgICAgdmFsdWUuICAqLworLSAgICByZXR2YWwgPSAiTENfQUxMIjsKKy0gICAgYnJlYWs7CistI2VuZGlmCistICBkZWZhdWx0OgorLSAgICAvKiBJZiB5b3UgaGF2ZSBhIGJldHRlciBpZGVhIGZvciBhIGRlZmF1bHQgdmFsdWUgbGV0IG1lIGtub3cuICAqLworLSAgICByZXR2YWwgPSAiTENfWFhYIjsKKy0gIH0KKy0KKy0gIHJldHVybiByZXR2YWw7CistfQorLQorLS8qIEd1ZXNzIHZhbHVlIG9mIGN1cnJlbnQgbG9jYWxlIGZyb20gdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKgorLWd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKQorLSAgICAgaW50IGNhdGVnb3J5OworLSAgICAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworLXsKKy0gIGNvbnN0IGNoYXIgKnJldHZhbDsKKy0KKy0gIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CistICAgICB2YXJpYWJsZS4gIFRoaXMgaXMgYSBHTlUgZXh0ZW5zaW9uLiAgKi8KKy0gIHJldHZhbCA9IGdldGVudiAoIkxBTkdVQUdFIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBgTEFOR1VBR0UnIGlzIG5vdCBzZXQuICBTbyB3ZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVgKKy0gICAgIG1ldGhvZHMgb2YgbG9va2luZyB0byBgTENfQUxMJywgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lCistICAgICBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCistI2lmIGRlZmluZWQgSEFWRV9TRVRMT0NBTEUgJiYgZGVmaW5lZCBIQVZFX0xDX01FU1NBR0VTICYmIGRlZmluZWQgSEFWRV9MT0NBTEVfTlVMTAorLSAgcmV0dXJuIHNldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpOworLSNlbHNlCistICAvKiBTZXR0aW5nIG9mIExDX0FMTCBvdmVyd3JpdGVzIGFsbCBvdGhlci4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKy0gIGlmIChyZXR2YWwgIT0gTlVMTCAmJiByZXR2YWxbMF0gIT0gJ1wwJykKKy0gICAgcmV0dXJuIHJldHZhbDsKKy0KKy0gIC8qIE5leHQgY29tZXMgdGhlIG5hbWUgb2YgdGhlIGRlc2lyZWQgY2F0ZWdvcnkuICAqLworLSAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworLSAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorLSAgICByZXR1cm4gcmV0dmFsOworLQorLSAgLyogTGFzdCBwb3NzaWJpbGl0eSBpcyB0aGUgTEFORyBlbnZpcm9ubWVudCB2YXJpYWJsZS4gICovCistICByZXR2YWwgPSBnZXRlbnYgKCJMQU5HIik7CistICBpZiAocmV0dmFsICE9IE5VTEwgJiYgcmV0dmFsWzBdICE9ICdcMCcpCistICAgIHJldHVybiByZXR2YWw7CistCistICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMgaW1wbGVtZW50YXRpb24KKy0gICAgIGRlZmluZWQuICAqLworLSAgcmV0dXJuICJDIjsKKy0jZW5kaWYKKy19CistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistLyogV2UgZG9uJ3Qgd2FudCBsaWJpbnRsLmEgdG8gZGVwZW5kIG9uIGFueSBvdGhlciBsaWJyYXJ5LiAgU28gd2UKKy0gICBhdm9pZCB0aGUgbm9uLXN0YW5kYXJkIGZ1bmN0aW9uIHN0cGNweS4gIEluIEdOVSBDIExpYnJhcnkgdGhpcworLSAgIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSwgdGhvdWdoLiAgQWxzbyBhbGxvdyB0aGUgc3ltYm9sIEhBVkVfU1RQQ1BZCistICAgdG8gYmUgZGVmaW5lZC4gICovCistI2lmICFfTElCQyAmJiAhSEFWRV9TVFBDUFkKKy1zdGF0aWMgY2hhciAqCistc3RwY3B5IChkZXN0LCBzcmMpCistICAgICBjaGFyICpkZXN0OworLSAgICAgY29uc3QgY2hhciAqc3JjOworLXsKKy0gIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKy0gICAgLyogRG8gbm90aGluZy4gKi8gOworLSAgcmV0dXJuIGRlc3QgLSAxOworLX0KKy0jZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY2lnZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNpZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzY5NzQ1OTYwIC0wNDAwCitAQCAtMCwwICsxLDEyMTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaW50ZXJuYWwgZGNpZ2V0dGV4dCBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaWZkZWYgX19HTlVDX18KKysjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorKyMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKysjZWxzZQorKyMgaWZkZWYgX01TQ19WRVIKKysjICBpbmNsdWRlIDxtYWxsb2MuaD4KKysjICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKysjIGVsc2UKKysjICBpZiBkZWZpbmVkIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICBlbHNlCisrIyAgIGlmZGVmIF9BSVgKKysgI3ByYWdtYSBhbGxvY2EKKysjICAgZWxzZQorKyMgICAgaWZuZGVmIGFsbG9jYQorK2NoYXIgKmFsbG9jYSAoKTsKKysjICAgIGVuZGlmCisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmbmRlZiBlcnJubworK2V4dGVybiBpbnQgZXJybm87CisrI2VuZGlmCisrI2lmbmRlZiBfX3NldF9lcnJubworKyMgZGVmaW5lIF9fc2V0X2Vycm5vKHZhbCkgZXJybm8gPSAodmFsKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZmRlZiBfTElCQworKyAgLyogR3Vlc3Mgd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHNpZ25hbCBTSUdGUEUuCisrICAgICBTZXQgdG8gMSBvbmx5IGlmIHlvdSBrbm93IGZvciBzdXJlLiAgSW4gY2FzZSBvZiBkb3VidCwgc2V0IHRvIDAuICAqLworKyMgaWYgZGVmaW5lZCBfX2FscGhhX18gfHwgZGVmaW5lZCBfX2FybV9fIHx8IGRlZmluZWQgX19pMzg2X18gXAorKyAgICAgfHwgZGVmaW5lZCBfX202OGtfXyB8fCBkZWZpbmVkIF9fczM5MF9fCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAxCisrIyBlbHNlCisrIyAgZGVmaW5lIElOVERJVjBfUkFJU0VTX1NJR0ZQRSAwCisrIyBlbmRpZgorKyNlbmRpZgorKyNpZiAhSU5URElWMF9SQUlTRVNfU0lHRlBFCisrIyBpbmNsdWRlIDxzaWduYWwuaD4KKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IIHx8IGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysjaW5jbHVkZSAiaGFzaC1zdHJpbmcuaCIKKysKKysvKiBUaHJlYWQgc2FmZXR5bmVzcy4gICovCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKyNlbHNlCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZChDTEFTUywgTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfbG9ja19sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQoQ0xBU1MsIE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja19yZGxvY2soTkFNRSkKKysjIGRlZmluZSBfX2xpYmNfcndsb2NrX3VubG9jayhOQU1FKQorKyNlbmRpZgorKworKy8qIEFsaWdubWVudCBvZiB0eXBlcy4gICovCisrI2lmIGRlZmluZWQgX19HTlVDX18gJiYgX19HTlVDX18gPj0gMgorKyMgZGVmaW5lIGFsaWdub2YoVFlQRSkgX19hbGlnbm9mX18gKFRZUEUpCisrI2Vsc2UKKysjIGRlZmluZSBhbGlnbm9mKFRZUEUpIFwKKysgICAgKChpbnQpICYoKHN0cnVjdCB7IGNoYXIgZHVtbXkxOyBUWVBFIGR1bW15MjsgfSAqKSAwKS0+ZHVtbXkyKQorKyNlbmRpZgorKworKy8qIFRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYWxvbmUgbGliaW50bC5hIG11c3QgaGF2ZSBkaWZmZXJlbnQKKysgICBuYW1lcyB0aGFuIHRoZSBpbnRlcm5hbCB2YXJpYWJsZXMgaW4gR05VIGxpYmMsIG90aGVyd2lzZSBwcm9ncmFtcworKyAgIHVzaW5nIGxpYmludGwuYSBjYW5ub3QgYmUgbGlua2VkIHN0YXRpY2FsbHkuICAqLworKyNpZiAhZGVmaW5lZCBfTElCQworKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluIGxpYmludGxfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbgorKyMgZGVmaW5lIF9ubF9kZWZhdWx0X2Rpcm5hbWUgbGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUKKysjIGRlZmluZSBfbmxfZG9tYWluX2JpbmRpbmdzIGxpYmludGxfbmxfZG9tYWluX2JpbmRpbmdzCisrI2VuZGlmCisrCisrLyogU29tZSBjb21waWxlcnMsIGxpa2UgU3VuT1M0IGNjLCBkb24ndCBoYXZlIG9mZnNldG9mIGluIDxzdGRkZWYuaD4uICAqLworKyNpZm5kZWYgb2Zmc2V0b2YKKysjIGRlZmluZSBvZmZzZXRvZih0eXBlLGlkZW50KSAoKHNpemVfdCkmKCgodHlwZSopMCktPmlkZW50KSkKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrI2lmZGVmIF9MSUJDCisrLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisrICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorKyAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKysjIGRlZmluZSBnZXRjd2QgX19nZXRjd2QKKysjIGlmbmRlZiBzdHBjcHkKKysjICBkZWZpbmUgc3RwY3B5IF9fc3RwY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIHRmaW5kIF9fdGZpbmQKKysjZWxzZQorKyMgaWYgIWRlZmluZWQgSEFWRV9HRVRDV0QKKytjaGFyICpnZXR3ZCAoKTsKKysjICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSBnZXR3ZCAoYnVmKQorKyMgZWxzZQorKyMgIGlmIFZNUworKyMgICBkZWZpbmUgZ2V0Y3dkKGJ1ZiwgbWF4KSAoZ2V0Y3dkKSAoYnVmLCBtYXgsIDApCisrIyAgZWxzZQorK2NoYXIgKmdldGN3ZCAoKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX1NUUENQWQorK3N0YXRpYyBjaGFyICpzdHBjcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYyk7CisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfTUVNUENQWQorK3N0YXRpYyB2b2lkICptZW1wY3B5ICh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogQW1vdW50IHRvIGluY3JlYXNlIGJ1ZmZlciBzaXplIGJ5IGluIGVhY2ggdHJ5LiAgKi8KKysjZGVmaW5lIFBBVEhfSU5DUiAzMgorKworKy8qIFRoZSBmb2xsb3dpbmcgaXMgZnJvbSBwYXRobWF4LmguICAqLworKy8qIE5vbi1QT1NJWCBCU0Qgc3lzdGVtcyBtaWdodCBoYXZlIGdjYydzIGxpbWl0cy5oLCB3aGljaCBkb2Vzbid0IGRlZmluZQorKyAgIFBBVEhfTUFYIGJ1dCBtaWdodCBjYXVzZSByZWRlZmluaXRpb24gd2FybmluZ3Mgd2hlbiBzeXMvcGFyYW0uaCBpcworKyAgIGxhdGVyIGluY2x1ZGVkIChhcyBvbiBNT1JFL0JTRCA0LjMpLiAgKi8KKysjaWYgZGVmaW5lZCBfUE9TSVhfVkVSU0lPTiB8fCAoZGVmaW5lZCBIQVZFX0xJTUlUU19IICYmICFkZWZpbmVkIF9fR05VQ19fKQorKyMgaW5jbHVkZSA8bGltaXRzLmg+CisrI2VuZGlmCisrCisrI2lmbmRlZiBfUE9TSVhfUEFUSF9NQVgKKysjIGRlZmluZSBfUE9TSVhfUEFUSF9NQVggMjU1CisrI2VuZGlmCisrCisrI2lmICFkZWZpbmVkIFBBVEhfTUFYICYmIGRlZmluZWQgX1BDX1BBVEhfTUFYCisrIyBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCisrI2VuZGlmCisrCisrLyogRG9uJ3QgaW5jbHVkZSBzeXMvcGFyYW0uaCBpZiBpdCBhbHJlYWR5IGhhcyBiZWVuLiAgKi8KKysjaWYgZGVmaW5lZCBIQVZFX1NZU19QQVJBTV9IICYmICFkZWZpbmVkIFBBVEhfTUFYICYmICFkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNlbmRpZgorKworKyNpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIE1BWFBBVEhMRU4KKysjIGRlZmluZSBQQVRIX01BWCBNQVhQQVRITEVOCisrI2VuZGlmCisrCisrI2lmbmRlZiBQQVRIX01BWAorKyMgZGVmaW5lIFBBVEhfTUFYIF9QT1NJWF9QQVRIX01BWAorKyNlbmRpZgorKworKy8qIFBhdGhuYW1lIHN1cHBvcnQuCisrICAgSVNTTEFTSChDKSAgICAgICAgICAgdGVzdHMgd2hldGhlciBDIGlzIGEgZGlyZWN0b3J5IHNlcGFyYXRvciBjaGFyYWN0ZXIuCisrICAgSVNfQUJTT0xVVEVfUEFUSChQKSAgdGVzdHMgd2hldGhlciBQIGlzIGFuIGFic29sdXRlIHBhdGguICBJZiBpdCBpcyBub3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgaXQgbWF5IGJlIGNvbmNhdGVuYXRlZCB0byBhIGRpcmVjdG9yeSBwYXRobmFtZS4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIChJU1NMQVNIICgoUClbMF0pIHx8IEhBU19ERVZJQ0UgKFApKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgXAorKyAgICAoc3RyY2hyIChQLCAnLycpICE9IE5VTEwgfHwgc3RyY2hyIChQLCAnXFwnKSAhPSBOVUxMIHx8IEhBU19ERVZJQ0UgKFApKQorKyNlbHNlCisrICAvKiBVbml4ICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJykKKysjIGRlZmluZSBJU19BQlNPTFVURV9QQVRIKFApIElTU0xBU0ggKChQKVswXSkKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIChzdHJjaHIgKFAsICcvJykgIT0gTlVMTCkKKysjZW5kaWYKKysKKysvKiBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIHRoZSBzZWFyY2ggdHJlZSB3aGVyZSBrbm93biB0cmFuc2xhdGlvbnMKKysgICBhcmUgc3RvcmVkLiAgKi8KKytzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdAorK3sKKysgIC8qIERvbWFpbiBpbiB3aGljaCB0byBzZWFyY2guICAqLworKyAgY2hhciAqZG9tYWlubmFtZTsKKysKKysgIC8qIFRoZSBjYXRlZ29yeS4gICovCisrICBpbnQgY2F0ZWdvcnk7CisrCisrICAvKiBTdGF0ZSBvZiB0aGUgY2F0YWxvZyBjb3VudGVyIGF0IHRoZSBwb2ludCB0aGUgc3RyaW5nIHdhcyBmb3VuZC4gICovCisrICBpbnQgY291bnRlcjsKKysKKysgIC8qIENhdGFsb2cgd2hlcmUgdGhlIHN0cmluZyB3YXMgZm91bmQuICAqLworKyAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluOworKworKyAgLyogQW5kIGZpbmFsbHkgdGhlIHRyYW5zbGF0aW9uLiAgKi8KKysgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uOworKyAgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbmd0aDsKKysKKysgIC8qIFBvaW50ZXIgdG8gdGhlIHN0cmluZyBpbiBxdWVzdGlvbi4gICovCisrICBjaGFyIG1zZ2lkW1pFUk9dOworK307CisrCisrLyogUm9vdCBvZiB0aGUgc2VhcmNoIHRyZWUgd2l0aCBrbm93biB0cmFuc2xhdGlvbnMuICBXZSBjYW4gdXNlIHRoaXMKKysgICBvbmx5IGlmIHRoZSBzeXN0ZW0gcHJvdmlkZXMgdGhlIGB0c2VhcmNoJyBmdW5jdGlvbiBmYW1pbHkuICAqLworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzZWFyY2guaD4KKysKKytzdGF0aWMgdm9pZCAqcm9vdDsKKysKKysjIGlmZGVmIF9MSUJDCisrIyAgZGVmaW5lIHRzZWFyY2ggX190c2VhcmNoCisrIyBlbmRpZgorKworKy8qIEZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIG9mIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrc3RhdGljIGludAorK3RyYW5zY21wIChjb25zdCB2b2lkICpwMSwgY29uc3Qgdm9pZCAqcDIpCisreworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMxOworKyAgY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKnMyOworKyAgaW50IHJlc3VsdDsKKysKKysgIHMxID0gKGNvbnN0IHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90ICopIHAxOworKyAgczIgPSAoY29uc3Qgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKikgcDI7CisrCisrICByZXN1bHQgPSBzdHJjbXAgKHMxLT5tc2dpZCwgczItPm1zZ2lkKTsKKysgIGlmIChyZXN1bHQgPT0gMCkKKysgICAgeworKyAgICAgIHJlc3VsdCA9IHN0cmNtcCAoczEtPmRvbWFpbm5hbWUsIHMyLT5kb21haW5uYW1lKTsKKysgICAgICBpZiAocmVzdWx0ID09IDApCisrCS8qIFdlIGNvbXBhcmUgdGhlIGNhdGVnb3J5IGxhc3QgKHRob3VnaCB0aGlzIGlzIHRoZSBjaGVhcGVzdAorKwkgICBvcGVyYXRpb24pIHNpbmNlIGl0IGlzIGhvcGVmdWxseSBhbHdheXMgdGhlIHNhbWUgKG5hbWVseQorKwkgICBMQ19NRVNTQUdFUykuICAqLworKwlyZXN1bHQgPSBzMS0+Y2F0ZWdvcnkgLSBzMi0+Y2F0ZWdvcnk7CisrICAgIH0KKysKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyNlbmRpZgorKworKyNpZm5kZWYgSU5UVkFSREVGCisrIyBkZWZpbmUgSU5UVkFSREVGKG5hbWUpCisrI2VuZGlmCisrI2lmbmRlZiBJTlRVU0UKKysjIGRlZmluZSBJTlRVU0UobmFtZSkgbmFtZQorKyNlbmRpZgorKworKy8qIE5hbWUgb2YgdGhlIGRlZmF1bHQgZG9tYWluIHVzZWQgZm9yIGdldHRleHQoMykgcHJpb3IgYW55IGNhbGwgdG8KKysgICB0ZXh0ZG9tYWluKDMpLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgIm1lc3NhZ2VzIi4gICovCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW4gPSAibWVzc2FnZXMiOworKworKy8qIFZhbHVlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZG9tYWluIGZvciBnZXR0ZXh0KDMpLiAgKi8KKytjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuCisrICAgICA9IF9ubF9kZWZhdWx0X2RlZmF1bHRfZG9tYWluOworKworKy8qIENvbnRhaW5zIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBtZXNzYWdlIGNhdGFsb2dzLiAgKi8KKysjaWYgZGVmaW5lZCBfX0VNWF9fCisrZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGlybmFtZVtdOworKyNlbHNlCisrY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kaXJuYW1lW10gPSBMT0NBTEVESVI7CisrSU5UVkFSREVGIChfbmxfZGVmYXVsdF9kaXJuYW1lKQorKyNlbmRpZgorKworKy8qIExpc3Qgd2l0aCBiaW5kaW5ncyBvZiBzcGVjaWZpYyBkb21haW5zIGNyZWF0ZWQgYnkgYmluZHRleHRkb21haW4oKQorKyAgIGNhbGxzLiAgKi8KKytzdHJ1Y3QgYmluZGluZyAqX25sX2RvbWFpbl9iaW5kaW5nczsKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBjaGFyICpwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sCisrCQkJICAgIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCQkJICAgIGNvbnN0IGNoYXIgKnRyYW5zbGF0aW9uLCBzaXplX3QgdHJhbnNsYXRpb25fbGVuKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIGNvbnN0IGNoYXIgKmd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksCisrCQkJCQkgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9sb2NhbGUvbG9jYWxlaW5mby5oIgorKyMgZGVmaW5lIGNhdGVnb3J5X3RvX25hbWUoY2F0ZWdvcnkpCV9ubF9jYXRlZ29yeV9uYW1lc1tjYXRlZ29yeV0KKysjZWxzZQorK3N0YXRpYyBjb25zdCBjaGFyICpjYXRlZ29yeV90b19uYW1lIChpbnQgY2F0ZWdvcnkpIGludGVybmFsX2Z1bmN0aW9uOworKyNlbmRpZgorKworKworKy8qIEZvciB0aG9zZSBsb29zaW5nIHN5c3RlbXMgd2hpY2ggZG9uJ3QgaGF2ZSBgYWxsb2NhJyB3ZSBoYXZlIHRvIGFkZAorKyAgIHNvbWUgYWRkaXRpb25hbCBjb2RlIGVtdWxhdGluZyBpdC4gICovCisrI2lmZGVmIEhBVkVfQUxMT0NBCisrLyogTm90aGluZyBoYXMgdG8gYmUgZG9uZS4gICovCisrIyBkZWZpbmUgZnJlZWEocCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCisrIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyNlbHNlCisrc3RydWN0IGJsb2NrX2xpc3QKKyt7CisrICB2b2lkICphZGRyZXNzOworKyAgc3RydWN0IGJsb2NrX2xpc3QgKm5leHQ7CisrfTsKKysjIGRlZmluZSBBRERfQkxPQ0sobGlzdCwgYWRkcikJCQkJCQkgICAgICBcCisrICBkbyB7CQkJCQkJCQkJICAgICAgXAorKyAgICBzdHJ1Y3QgYmxvY2tfbGlzdCAqbmV3cCA9IChzdHJ1Y3QgYmxvY2tfbGlzdCAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsgIFwKKysgICAgLyogSWYgd2UgY2Fubm90IGdldCBhIGZyZWUgYmxvY2sgd2UgY2Fubm90IGFkZCB0aGUgbmV3IGVsZW1lbnQgdG8JICAgICAgXAorKyAgICAgICB0aGUgbGlzdC4gICovCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKG5ld3AgIT0gTlVMTCkgewkJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+YWRkcmVzcyA9IChhZGRyKTsJCQkJCQkgICAgICBcCisrICAgICAgbmV3cC0+bmV4dCA9IChsaXN0KTsJCQkJCQkgICAgICBcCisrICAgICAgKGxpc3QpID0gbmV3cDsJCQkJCQkJICAgICAgXAorKyAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysjIGRlZmluZSBGUkVFX0JMT0NLUyhsaXN0KQkJCQkJCSAgICAgIFwKKysgIGRvIHsJCQkJCQkJCQkgICAgICBcCisrICAgIHdoaWxlIChsaXN0ICE9IE5VTEwpIHsJCQkJCQkgICAgICBcCisrICAgICAgc3RydWN0IGJsb2NrX2xpc3QgKm9sZCA9IGxpc3Q7CQkJCQkgICAgICBcCisrICAgICAgbGlzdCA9IGxpc3QtPm5leHQ7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZC0+YWRkcmVzcyk7CQkJCQkJICAgICAgXAorKyAgICAgIGZyZWUgKG9sZCk7CQkJCQkJCSAgICAgIFwKKysgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrIyB1bmRlZiBhbGxvY2EKKysjIGRlZmluZSBhbGxvY2Eoc2l6ZSkgKG1hbGxvYyAoc2l6ZSkpCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYJLyogaGF2ZSBhbGxvY2EgKi8KKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBMaXN0IG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRyYW5zbGF0aW9ucy4gICovCisrdHlwZWRlZiBzdHJ1Y3QgdHJhbnNtZW1fbGlzdAorK3sKKysgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpuZXh0OworKyAgY2hhciBkYXRhW1pFUk9dOworK30gdHJhbnNtZW1fYmxvY2tfdDsKKytzdGF0aWMgc3RydWN0IHRyYW5zbWVtX2xpc3QgKnRyYW5zbWVtX2xpc3Q7CisrI2Vsc2UKKyt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHJhbnNtZW1fYmxvY2tfdDsKKysjZW5kaWYKKysKKysKKysvKiBOYW1lcyBmb3IgdGhlIGxpYmludGwgZnVuY3Rpb25zIGFyZSBhIHByb2JsZW0uICBUaGV5IG11c3Qgbm90IGNsYXNoCisrICAgd2l0aCBleGlzdGluZyBuYW1lcyBhbmQgdGhleSBzaG91bGQgZm9sbG93IEFOU0kgQy4gIEJ1dCB0aGlzIHNvdXJjZQorKyAgIGNvZGUgaXMgYWxzbyB1c2VkIGluIEdOVSBDIExpYnJhcnkgd2hlcmUgdGhlIG5hbWVzIGhhdmUgYSBfXworKyAgIHByZWZpeC4gIFNvIHdlIGhhdmUgdG8gbWFrZSBhIGRpZmZlcmVuY2UgaGVyZS4gICovCisrI2lmZGVmIF9MSUJDCisrIyBkZWZpbmUgRENJR0VUVEVYVCBfX2RjaWdldHRleHQKKysjZWxzZQorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrI2lmZGVmIF9MSUJDCisrX19saWJjX3J3bG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKCwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysjZW5kaWYKKysKKysvKiBDaGVja2luZyB3aGV0aGVyIHRoZSBiaW5hcmllcyBydW5zIFNVSUQgbXVzdCBiZSBkb25lIGFuZCBnbGliYyBwcm92aWRlcworKyAgIGVhc2llciBtZXRob2RzIHRoZXJlZm9yZSB3ZSBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBFTkFCTEVfU0VDVVJFIF9fbGliY19lbmFibGVfc2VjdXJlCisrIyBkZWZpbmUgREVURVJNSU5FX1NFQ1VSRQorKyNlbHNlCisrIyBpZm5kZWYgSEFWRV9HRVRVSUQKKysjICBkZWZpbmUgZ2V0dWlkKCkgMAorKyMgZW5kaWYKKysjIGlmbmRlZiBIQVZFX0dFVEdJRAorKyMgIGRlZmluZSBnZXRnaWQoKSAwCisrIyBlbmRpZgorKyMgaWZuZGVmIEhBVkVfR0VURVVJRAorKyMgIGRlZmluZSBnZXRldWlkKCkgZ2V0dWlkKCkKKysjIGVuZGlmCisrIyBpZm5kZWYgSEFWRV9HRVRFR0lECisrIyAgZGVmaW5lIGdldGVnaWQoKSBnZXRnaWQoKQorKyMgZW5kaWYKKytzdGF0aWMgaW50IGVuYWJsZV9zZWN1cmU7CisrIyBkZWZpbmUgRU5BQkxFX1NFQ1VSRSAoZW5hYmxlX3NlY3VyZSA9PSAxKQorKyMgZGVmaW5lIERFVEVSTUlORV9TRUNVUkUgXAorKyAgaWYgKGVuYWJsZV9zZWN1cmUgPT0gMCkJCQkJCQkgICAgICBcCisrICAgIHsJCQkJCQkJCQkgICAgICBcCisrICAgICAgaWYgKGdldHVpZCAoKSAhPSBnZXRldWlkICgpIHx8IGdldGdpZCAoKSAhPSBnZXRlZ2lkICgpKQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gMTsJCQkJCQkgICAgICBcCisrICAgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKwllbmFibGVfc2VjdXJlID0gLTE7CQkJCQkJICAgICAgXAorKyAgICB9CisrI2VuZGlmCisrCisrLyogR2V0IHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSB0aGUgcGx1cmFsIGV4cHJlc3Npb24uICAqLworKyNpbmNsdWRlICJldmFsLXBsdXJhbC5oIgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIENBVEVHT1JZIGxvY2FsZSBhbmQsIGlmIFBMVVJBTCBpcyBub256ZXJvLCBzZWFyY2ggb3ZlciBzdHJpbmcKKysgICBkZXBlbmRpbmcgb24gdGhlIHBsdXJhbCBmb3JtIGRldGVybWluZWQgYnkgTi4gICovCisrY2hhciAqCisrRENJR0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsCisrCSAgICBpbnQgcGx1cmFsLCB1bnNpZ25lZCBsb25nIGludCBuLCBpbnQgY2F0ZWdvcnkpCisreworKyNpZm5kZWYgSEFWRV9BTExPQ0EKKysgIHN0cnVjdCBibG9ja19saXN0ICpibG9ja19saXN0ID0gTlVMTDsKKysjZW5kaWYKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbjsKKysgIHN0cnVjdCBiaW5kaW5nICpiaW5kaW5nOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lOworKyAgY29uc3QgY2hhciAqY2F0ZWdvcnl2YWx1ZTsKKysgIGNoYXIgKmRpcm5hbWUsICp4ZG9tYWlubmFtZTsKKysgIGNoYXIgKnNpbmdsZV9sb2NhbGU7CisrICBjaGFyICpyZXR2YWw7CisrICBzaXplX3QgcmV0bGVuOworKyAgaW50IHNhdmVkX2Vycm5vOworKyNpZiBkZWZpbmVkIEhBVkVfVFNFQVJDSCB8fCBkZWZpbmVkIF9MSUJDCisrICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqc2VhcmNoOworKyAgc3RydWN0IGtub3duX3RyYW5zbGF0aW9uX3QgKipmb3VuZHAgPSBOVUxMOworKyAgc2l6ZV90IG1zZ2lkX2xlbjsKKysjZW5kaWYKKysgIHNpemVfdCBkb21haW5uYW1lX2xlbjsKKysKKysgIC8qIElmIG5vIHJlYWwgTVNHSUQgaXMgZ2l2ZW4gcmV0dXJuIE5VTEwuICAqLworKyAgaWYgKG1zZ2lkMSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysjaWZkZWYgX0xJQkMKKysgIGlmIChjYXRlZ29yeSA8IDAgfHwgY2F0ZWdvcnkgPj0gX19MQ19MQVNUIHx8IGNhdGVnb3J5ID09IExDX0FMTCkKKysgICAgLyogQm9ndXMuICAqLworKyAgICByZXR1cm4gKHBsdXJhbCA9PSAwCisrCSAgICA/IChjaGFyICopIG1zZ2lkMQorKwkgICAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgICA6IG4gPT0gMSA/IChjaGFyICopIG1zZ2lkMSA6IChjaGFyICopIG1zZ2lkMik7CisrI2VuZGlmCisrCisrICBfX2xpYmNfcndsb2NrX3JkbG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgLyogSWYgRE9NQUlOTkFNRSBpcyBOVUxMLCB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgZGVmYXVsdCBkb21haW4uICBJZgorKyAgICAgQ0FURUdPUlkgaXMgbm90IExDX01FU1NBR0VTIHRoaXMgbWlnaHQgbm90IG1ha2UgbXVjaCBzZW5zZSBidXQgdGhlCisrICAgICBkZWZpbml0aW9uIGxlZnQgdGhpcyB1bmRlZmluZWQuICAqLworKyAgaWYgKGRvbWFpbm5hbWUgPT0gTlVMTCkKKysgICAgZG9tYWlubmFtZSA9IF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKworKyAgLyogT1MvMiBzcGVjaWZpYzogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpYmludGwgdmVyc2lvbnMgICovCisrI2lmZGVmIExDX01FU1NBR0VTX0NPTVBBVAorKyAgaWYgKGNhdGVnb3J5ID09IExDX01FU1NBR0VTX0NPTVBBVCkKKysgICAgY2F0ZWdvcnkgPSBMQ19NRVNTQUdFUzsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBIQVZFX1RTRUFSQ0ggfHwgZGVmaW5lZCBfTElCQworKyAgbXNnaWRfbGVuID0gc3RybGVuIChtc2dpZDEpICsgMTsKKysKKysgIC8qIFRyeSB0byBmaW5kIHRoZSB0cmFuc2xhdGlvbiBhbW9uZyB0aG9zZSB3aGljaCB3ZSBmb3VuZCBhdAorKyAgICAgc29tZSB0aW1lLiAgKi8KKysgIHNlYXJjaCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkgICBhbGxvY2EgKG9mZnNldG9mIChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCwgbXNnaWQpICsgbXNnaWRfbGVuKTsKKysgIG1lbWNweSAoc2VhcmNoLT5tc2dpZCwgbXNnaWQxLCBtc2dpZF9sZW4pOworKyAgc2VhcmNoLT5kb21haW5uYW1lID0gKGNoYXIgKikgZG9tYWlubmFtZTsKKysgIHNlYXJjaC0+Y2F0ZWdvcnkgPSBjYXRlZ29yeTsKKysKKysgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikgdGZpbmQgKHNlYXJjaCwgJnJvb3QsIHRyYW5zY21wKTsKKysgIGZyZWVhIChzZWFyY2gpOworKyAgaWYgKGZvdW5kcCAhPSBOVUxMICYmICgqZm91bmRwKS0+Y291bnRlciA9PSBfbmxfbXNnX2NhdF9jbnRyKQorKyAgICB7CisrICAgICAgLyogTm93IGRlYWwgd2l0aCBwbHVyYWwuICAqLworKyAgICAgIGlmIChwbHVyYWwpCisrCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKCgqZm91bmRwKS0+ZG9tYWluLCBuLCAoKmZvdW5kcCktPnRyYW5zbGF0aW9uLAorKwkJCQkoKmZvdW5kcCktPnRyYW5zbGF0aW9uX2xlbmd0aCk7CisrICAgICAgZWxzZQorKwlyZXR2YWwgPSAoY2hhciAqKSAoKmZvdW5kcCktPnRyYW5zbGF0aW9uOworKworKyAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKyNlbmRpZgorKworKyAgLyogUHJlc2VydmUgdGhlIGBlcnJubycgdmFsdWUuICAqLworKyAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysKKysgIC8qIFNlZSB3aGV0aGVyIHRoaXMgaXMgYSBTVUlEIGJpbmFyeSBvciBub3QuICAqLworKyAgREVURVJNSU5FX1NFQ1VSRTsKKysKKysgIC8qIEZpcnN0IGZpbmQgbWF0Y2hpbmcgYmluZGluZy4gICovCisrICBmb3IgKGJpbmRpbmcgPSBfbmxfZG9tYWluX2JpbmRpbmdzOyBiaW5kaW5nICE9IE5VTEw7IGJpbmRpbmcgPSBiaW5kaW5nLT5uZXh0KQorKyAgICB7CisrICAgICAgaW50IGNvbXBhcmUgPSBzdHJjbXAgKGRvbWFpbm5hbWUsIGJpbmRpbmctPmRvbWFpbm5hbWUpOworKyAgICAgIGlmIChjb21wYXJlID09IDApCisrCS8qIFdlIGZvdW5kIGl0ISAgKi8KKysJYnJlYWs7CisrICAgICAgaWYgKGNvbXBhcmUgPCAwKQorKwl7CisrCSAgLyogSXQgaXMgbm90IGluIHRoZSBsaXN0LiAgKi8KKysJICBiaW5kaW5nID0gTlVMTDsKKysJICBicmVhazsKKysJfQorKyAgICB9CisrCisrICBpZiAoYmluZGluZyA9PSBOVUxMKQorKyAgICBkaXJuYW1lID0gKGNoYXIgKikgSU5UVVNFKF9ubF9kZWZhdWx0X2Rpcm5hbWUpOworKyAgZWxzZSBpZiAoSVNfQUJTT0xVVEVfUEFUSCAoYmluZGluZy0+ZGlybmFtZSkpCisrICAgIGRpcm5hbWUgPSBiaW5kaW5nLT5kaXJuYW1lOworKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogV2UgaGF2ZSBhIHJlbGF0aXZlIHBhdGguICBNYWtlIGl0IGFic29sdXRlIG5vdy4gICovCisrICAgICAgc2l6ZV90IGRpcm5hbWVfbGVuID0gc3RybGVuIChiaW5kaW5nLT5kaXJuYW1lKSArIDE7CisrICAgICAgc2l6ZV90IHBhdGhfbWF4OworKyAgICAgIGNoYXIgKnJldDsKKysKKysgICAgICBwYXRoX21heCA9ICh1bnNpZ25lZCBpbnQpIFBBVEhfTUFYOworKyAgICAgIHBhdGhfbWF4ICs9IDI7CQkvKiBUaGUgZ2V0Y3dkIGRvY3Mgc2F5IHRvIGRvIHRoaXMuICAqLworKworKyAgICAgIGZvciAoOzspCisrCXsKKysJICBkaXJuYW1lID0gKGNoYXIgKikgYWxsb2NhIChwYXRoX21heCArIGRpcm5hbWVfbGVuKTsKKysJICBBRERfQkxPQ0sgKGJsb2NrX2xpc3QsIGRpcm5hbWUpOworKworKwkgIF9fc2V0X2Vycm5vICgwKTsKKysJICByZXQgPSBnZXRjd2QgKGRpcm5hbWUsIHBhdGhfbWF4KTsKKysJICBpZiAocmV0ICE9IE5VTEwgfHwgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgYnJlYWs7CisrCisrCSAgcGF0aF9tYXggKz0gcGF0aF9tYXggLyAyOworKwkgIHBhdGhfbWF4ICs9IFBBVEhfSU5DUjsKKysJfQorKworKyAgICAgIGlmIChyZXQgPT0gTlVMTCkKKysJLyogV2UgY2Fubm90IGdldCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIERvbid0IHNpZ25hbCBhbgorKwkgICBlcnJvciBidXQgc2ltcGx5IHJldHVybiB0aGUgZGVmYXVsdCBzdHJpbmcuICAqLworKwlnb3RvIHJldHVybl91bnRyYW5zbGF0ZWQ7CisrCisrICAgICAgc3RwY3B5IChzdHBjcHkgKHN0cmNociAoZGlybmFtZSwgJ1wwJyksICIvIiksIGJpbmRpbmctPmRpcm5hbWUpOworKyAgICB9CisrCisrICAvKiBOb3cgZGV0ZXJtaW5lIHRoZSBzeW1ib2xpYyBuYW1lIG9mIENBVEVHT1JZIGFuZCBpdHMgdmFsdWUuICAqLworKyAgY2F0ZWdvcnluYW1lID0gY2F0ZWdvcnlfdG9fbmFtZSAoY2F0ZWdvcnkpOworKyAgY2F0ZWdvcnl2YWx1ZSA9IGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysKKysgIGRvbWFpbm5hbWVfbGVuID0gc3RybGVuIChkb21haW5uYW1lKTsKKysgIHhkb21haW5uYW1lID0gKGNoYXIgKikgYWxsb2NhIChzdHJsZW4gKGNhdGVnb3J5bmFtZSkKKysJCQkJICsgZG9tYWlubmFtZV9sZW4gKyA1KTsKKysgIEFERF9CTE9DSyAoYmxvY2tfbGlzdCwgeGRvbWFpbm5hbWUpOworKworKyAgc3RwY3B5IChtZW1wY3B5IChzdHBjcHkgKHN0cGNweSAoeGRvbWFpbm5hbWUsIGNhdGVnb3J5bmFtZSksICIvIiksCisrCQkgIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuKSwKKysJICAiLm1vIik7CisrCisrICAvKiBDcmVhdGluZyB3b3JraW5nIGFyZWEuICAqLworKyAgc2luZ2xlX2xvY2FsZSA9IChjaGFyICopIGFsbG9jYSAoc3RybGVuIChjYXRlZ29yeXZhbHVlKSArIDEpOworKyAgQUREX0JMT0NLIChibG9ja19saXN0LCBzaW5nbGVfbG9jYWxlKTsKKysKKysKKysgIC8qIFNlYXJjaCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gIFRoaXMgaXMgYSBsb29wIGJlY2F1c2Ugd2UgcGVyaGFwcworKyAgICAgZ290IGFuIG9yZGVyZWQgbGlzdCBvZiBsYW5ndWFnZXMgdG8gY29uc2lkZXIgZm9yIHRoZSB0cmFuc2xhdGlvbi4gICovCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIE1ha2UgQ0FURUdPUllWQUxVRSBwb2ludCB0byB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBsaXN0LiAgKi8KKysgICAgICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gPT0gJzonKQorKwkrK2NhdGVnb3J5dmFsdWU7CisrICAgICAgaWYgKGNhdGVnb3J5dmFsdWVbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIFRoZSB3aG9sZSBjb250ZW50cyBvZiBDQVRFR09SWVZBTFVFIGhhcyBiZWVuIHNlYXJjaGVkIGJ1dAorKwkgICAgIG5vIHZhbGlkIGVudHJ5IGhhcyBiZWVuIGZvdW5kLiAgV2Ugc29sdmUgdGhpcyBzaXR1YXRpb24KKysJICAgICBieSBpbXBsaWNpdGx5IGFwcGVuZGluZyBhICJDIiBlbnRyeSwgaS5lLiBubyB0cmFuc2xhdGlvbgorKwkgICAgIHdpbGwgdGFrZSBwbGFjZS4gICovCisrCSAgc2luZ2xlX2xvY2FsZVswXSA9ICdDJzsKKysJICBzaW5nbGVfbG9jYWxlWzFdID0gJ1wwJzsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmNwID0gc2luZ2xlX2xvY2FsZTsKKysJICB3aGlsZSAoY2F0ZWdvcnl2YWx1ZVswXSAhPSAnXDAnICYmIGNhdGVnb3J5dmFsdWVbMF0gIT0gJzonKQorKwkgICAgKmNwKysgPSAqY2F0ZWdvcnl2YWx1ZSsrOworKwkgICpjcCA9ICdcMCc7CisrCisrCSAgLyogV2hlbiB0aGlzIGlzIGEgU1VJRCBiaW5hcnkgd2UgbXVzdCBub3QgYWxsb3cgYWNjZXNzaW5nIGZpbGVzCisrCSAgICAgb3V0c2lkZSB0aGUgZGVkaWNhdGVkIGRpcmVjdG9yaWVzLiAgKi8KKysJICBpZiAoRU5BQkxFX1NFQ1VSRSAmJiBJU19QQVRIX1dJVEhfRElSIChzaW5nbGVfbG9jYWxlKSkKKysJICAgIC8qIEluZ29yZSB0aGlzIGVudHJ5LiAgKi8KKysJICAgIGNvbnRpbnVlOworKwl9CisrCisrICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbG9jYWxlIHZhbHVlIGlzIEMgKG9yIFBPU0lYKSB3ZSBkb24ndCBsb2FkIGEKKysJIGRvbWFpbi4gIFJldHVybiB0aGUgTVNHSUQuICAqLworKyAgICAgIGlmIChzdHJjbXAgKHNpbmdsZV9sb2NhbGUsICJDIikgPT0gMAorKwkgIHx8IHN0cmNtcCAoc2luZ2xlX2xvY2FsZSwgIlBPU0lYIikgPT0gMCkKKysJYnJlYWs7CisrCisrICAgICAgLyogRmluZCBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBjYXRhbG9nIG1hdGNoaW5nIHRoZQorKwkgRE9NQUlOTkFNRSBhbmQgQ0FURUdPUlkuICAqLworKyAgICAgIGRvbWFpbiA9IF9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgc2luZ2xlX2xvY2FsZSwgeGRvbWFpbm5hbWUsIGJpbmRpbmcpOworKworKyAgICAgIGlmIChkb21haW4gIT0gTlVMTCkKKysJeworKwkgIHJldHZhbCA9IF9ubF9maW5kX21zZyAoZG9tYWluLCBiaW5kaW5nLCBtc2dpZDEsICZyZXRsZW4pOworKworKwkgIGlmIChyZXR2YWwgPT0gTlVMTCkKKysJICAgIHsKKysJICAgICAgaW50IGNudDsKKysKKysJICAgICAgZm9yIChjbnQgPSAwOyBkb21haW4tPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorKwkJeworKwkJICByZXR2YWwgPSBfbmxfZmluZF9tc2cgKGRvbWFpbi0+c3VjY2Vzc29yW2NudF0sIGJpbmRpbmcsCisrCQkJCQkgbXNnaWQxLCAmcmV0bGVuKTsKKysKKysJCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIGRvbWFpbiA9IGRvbWFpbi0+c3VjY2Vzc29yW2NudF07CisrCQkgICAgICBicmVhazsKKysJCSAgICB9CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHJldHZhbCAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICAvKiBGb3VuZCB0aGUgdHJhbnNsYXRpb24gb2YgTVNHSUQxIGluIGRvbWFpbiBET01BSU46CisrCQkgc3RhcnRpbmcgYXQgUkVUVkFMLCBSRVRMRU4gYnl0ZXMuICAqLworKwkgICAgICBGUkVFX0JMT0NLUyAoYmxvY2tfbGlzdCk7CisrI2lmIGRlZmluZWQgSEFWRV9UU0VBUkNIIHx8IGRlZmluZWQgX0xJQkMKKysJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMKQorKwkJeworKwkJICAvKiBDcmVhdGUgYSBuZXcgZW50cnkgYW5kIGFkZCBpdCB0byB0aGUgc2VhcmNoIHRyZWUuICAqLworKwkJICBzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqbmV3cDsKKysKKysJCSAgbmV3cCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKQorKwkJICAgIG1hbGxvYyAob2Zmc2V0b2YgKHN0cnVjdCBrbm93bl90cmFuc2xhdGlvbl90LCBtc2dpZCkKKysJCQkgICAgKyBtc2dpZF9sZW4gKyBkb21haW5uYW1lX2xlbiArIDEpOworKwkJICBpZiAobmV3cCAhPSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIG5ld3AtPmRvbWFpbm5hbWUgPQorKwkJCW1lbXBjcHkgKG5ld3AtPm1zZ2lkLCBtc2dpZDEsIG1zZ2lkX2xlbik7CisrCQkgICAgICBtZW1jcHkgKG5ld3AtPmRvbWFpbm5hbWUsIGRvbWFpbm5hbWUsIGRvbWFpbm5hbWVfbGVuICsgMSk7CisrCQkgICAgICBuZXdwLT5jYXRlZ29yeSA9IGNhdGVnb3J5OworKwkJICAgICAgbmV3cC0+Y291bnRlciA9IF9ubF9tc2dfY2F0X2NudHI7CisrCQkgICAgICBuZXdwLT5kb21haW4gPSBkb21haW47CisrCQkgICAgICBuZXdwLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgICAgIG5ld3AtPnRyYW5zbGF0aW9uX2xlbmd0aCA9IHJldGxlbjsKKysKKysJCSAgICAgIC8qIEluc2VydCB0aGUgZW50cnkgaW4gdGhlIHNlYXJjaCB0cmVlLiAgKi8KKysJCSAgICAgIGZvdW5kcCA9IChzdHJ1Y3Qga25vd25fdHJhbnNsYXRpb25fdCAqKikKKysJCQl0c2VhcmNoIChuZXdwLCAmcm9vdCwgdHJhbnNjbXApOworKwkJICAgICAgaWYgKGZvdW5kcCA9PSBOVUxMCisrCQkJICB8fCBfX2J1aWx0aW5fZXhwZWN0ICgqZm91bmRwICE9IG5ld3AsIDApKQorKwkJCS8qIFRoZSBpbnNlcnQgZmFpbGVkLiAgKi8KKysJCQlmcmVlIChuZXdwKTsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLyogV2UgY2FuIHVwZGF0ZSB0aGUgZXhpc3RpbmcgZW50cnkuICAqLworKwkJICAoKmZvdW5kcCktPmNvdW50ZXIgPSBfbmxfbXNnX2NhdF9jbnRyOworKwkJICAoKmZvdW5kcCktPmRvbWFpbiA9IGRvbWFpbjsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbiA9IHJldHZhbDsKKysJCSAgKCpmb3VuZHApLT50cmFuc2xhdGlvbl9sZW5ndGggPSByZXRsZW47CisrCQl9CisrI2VuZGlmCisrCSAgICAgIF9fc2V0X2Vycm5vIChzYXZlZF9lcnJubyk7CisrCisrCSAgICAgIC8qIE5vdyBkZWFsIHdpdGggcGx1cmFsLiAgKi8KKysJICAgICAgaWYgKHBsdXJhbCkKKysJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRvbWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOworKworKwkgICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKwkgICAgICByZXR1cm4gcmV0dmFsOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgcmV0dXJuX3VudHJhbnNsYXRlZDoKKysgIC8qIFJldHVybiB0aGUgdW50cmFuc2xhdGVkIE1TR0lELiAgKi8KKysgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisrI2lmbmRlZiBfTElCQworKyAgaWYgKCFFTkFCTEVfU0VDVVJFKQorKyAgICB7CisrICAgICAgZXh0ZXJuIHZvaWQgX25sX2xvZ191bnRyYW5zbGF0ZWQgKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLAorKwkJCQkJY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorKwkJCQkJaW50IHBsdXJhbCk7CisrICAgICAgY29uc3QgY2hhciAqbG9nZmlsZW5hbWUgPSBnZXRlbnYgKCJHRVRURVhUX0xPR19VTlRSQU5TTEFURUQiKTsKKysKKysgICAgICBpZiAobG9nZmlsZW5hbWUgIT0gTlVMTCAmJiBsb2dmaWxlbmFtZVswXSAhPSAnXDAnKQorKwlfbmxfbG9nX3VudHJhbnNsYXRlZCAobG9nZmlsZW5hbWUsIGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBwbHVyYWwpOworKyAgICB9CisrI2VuZGlmCisrICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworKyAgcmV0dXJuIChwbHVyYWwgPT0gMAorKwkgID8gKGNoYXIgKikgbXNnaWQxCisrCSAgLyogVXNlIHRoZSBHZXJtYW5pYyBwbHVyYWwgcnVsZS4gICovCisrCSAgOiBuID09IDEgPyAoY2hhciAqKSBtc2dpZDEgOiAoY2hhciAqKSBtc2dpZDIpOworK30KKysKKysKKytjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9maW5kX21zZyAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqZG9tYWluX2ZpbGUsCisrCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJICAgICAgc2l6ZV90ICpsZW5ndGhwKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfZG9tYWluICpkb21haW47CisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgc2l6ZV90IGFjdDsKKysgIGNoYXIgKnJlc3VsdDsKKysgIHNpemVfdCByZXN1bHRsZW47CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRlY2lkZWQgPT0gMCkKKysgICAgX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSwgZG9tYWluYmluZGluZyk7CisrCisrICBpZiAoZG9tYWluX2ZpbGUtPmRhdGEgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBkb21haW4gPSAoc3RydWN0IGxvYWRlZF9kb21haW4gKikgZG9tYWluX2ZpbGUtPmRhdGE7CisrCisrICBuc3RyaW5ncyA9IGRvbWFpbi0+bnN0cmluZ3M7CisrCisrICAvKiBMb2NhdGUgdGhlIE1TR0lEIGFuZCBpdHMgdHJhbnNsYXRpb24uICAqLworKyAgaWYgKGRvbWFpbi0+aGFzaF90YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIC8qIFVzZSB0aGUgaGFzaGluZyB0YWJsZS4gICovCisrICAgICAgbmxzX3VpbnQzMiBsZW4gPSBzdHJsZW4gKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGhhc2hfdmFsID0gaGFzaF9zdHJpbmcgKG1zZ2lkKTsKKysgICAgICBubHNfdWludDMyIGlkeCA9IGhhc2hfdmFsICUgZG9tYWluLT5oYXNoX3NpemU7CisrICAgICAgbmxzX3VpbnQzMiBpbmNyID0gMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysgICAgICB3aGlsZSAoMSkKKysJeworKwkgIG5sc191aW50MzIgbnN0ciA9CisrCSAgICBXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpZHhdKTsKKysKKysJICBpZiAobnN0ciA9PSAwKQorKwkgICAgLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gICovCisrCSAgICByZXR1cm4gTlVMTDsKKysKKysJICBuc3RyLS07CisrCisrCSAgLyogQ29tcGFyZSBtc2dpZCB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcgYXQgaW5kZXggbnN0ci4KKysJICAgICBXZSBjb21wYXJlIHRoZSBsZW5ndGhzIHdpdGggPj0sIG5vdCA9PSwgYmVjYXVzZSBwbHVyYWwgZW50cmllcworKwkgICAgIGFyZSByZXByZXNlbnRlZCBieSBzdHJpbmdzIHdpdGggYW4gZW1iZWRkZWQgTlVMLiAgKi8KKysJICBpZiAobnN0ciA8IG5zdHJpbmdzCisrCSAgICAgID8gVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ubGVuZ3RoKSA+PSBsZW4KKysJCSYmIChzdHJjbXAgKG1zZ2lkLAorKwkJCSAgICBkb21haW4tPmRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJCSAgICAgIGRvbWFpbi0+b3JpZ190YWJbbnN0cl0ub2Zmc2V0KSkKKysJCSAgICA9PSAwKQorKwkgICAgICA6IGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiW25zdHIgLSBuc3RyaW5nc10ubGVuZ3RoID4gbGVuCisrCQkmJiAoc3RyY21wIChtc2dpZCwKKysJCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWJbbnN0ciAtIG5zdHJpbmdzXS5wb2ludGVyKQorKwkJICAgID09IDApKQorKwkgICAgeworKwkgICAgICBhY3QgPSBuc3RyOworKwkgICAgICBnb3RvIGZvdW5kOworKwkgICAgfQorKworKwkgIGlmIChpZHggPj0gZG9tYWluLT5oYXNoX3NpemUgLSBpbmNyKQorKwkgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJICBlbHNlCisrCSAgICBpZHggKz0gaW5jcjsKKysJfQorKyAgICAgIC8qIE5PVFJFQUNIRUQgKi8KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogVHJ5IHRoZSBkZWZhdWx0IG1ldGhvZDogIGJpbmFyeSBzZWFyY2ggaW4gdGhlIHNvcnRlZCBhcnJheSBvZgorKwkgbWVzc2FnZXMuICAqLworKyAgICAgIHNpemVfdCB0b3AsIGJvdHRvbTsKKysKKysgICAgICBib3R0b20gPSAwOworKyAgICAgIHRvcCA9IG5zdHJpbmdzOworKyAgICAgIHdoaWxlIChib3R0b20gPCB0b3ApCisrCXsKKysJICBpbnQgY21wX3ZhbDsKKysKKysJICBhY3QgPSAoYm90dG9tICsgdG9wKSAvIDI7CisrCSAgY21wX3ZhbCA9IHN0cmNtcCAobXNnaWQsIChkb21haW4tPmRhdGEKKysJCQkJICAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsCisrCQkJCQkgZG9tYWluLT5vcmlnX3RhYlthY3RdLm9mZnNldCkpKTsKKysJICBpZiAoY21wX3ZhbCA8IDApCisrCSAgICB0b3AgPSBhY3Q7CisrCSAgZWxzZSBpZiAoY21wX3ZhbCA+IDApCisrCSAgICBib3R0b20gPSBhY3QgKyAxOworKwkgIGVsc2UKKysJICAgIGdvdG8gZm91bmQ7CisrCX0KKysgICAgICAvKiBObyB0cmFuc2xhdGlvbiB3YXMgZm91bmQuICAqLworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrIGZvdW5kOgorKyAgLyogVGhlIHRyYW5zbGF0aW9uIHdhcyBmb3VuZCBhdCBpbmRleCBBQ1QuICBJZiB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlCisrICAgICBzdHJpbmcgdG8gdXNlIGEgZGlmZmVyZW50IGNoYXJhY3RlciBzZXQsIHRoaXMgaXMgdGhlIHRpbWUuICAqLworKyAgaWYgKGFjdCA8IG5zdHJpbmdzKQorKyAgICB7CisrICAgICAgcmVzdWx0ID0gKGNoYXIgKikKKysJKGRvbWFpbi0+ZGF0YSArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLm9mZnNldCkpOworKyAgICAgIHJlc3VsdGxlbiA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkb21haW4tPnRyYW5zX3RhYlthY3RdLmxlbmd0aCkgKyAxOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICByZXN1bHQgPSAoY2hhciAqKSBkb21haW4tPnRyYW5zX3N5c2RlcF90YWJbYWN0IC0gbnN0cmluZ3NdLnBvaW50ZXI7CisrICAgICAgcmVzdWx0bGVuID0gZG9tYWluLT50cmFuc19zeXNkZXBfdGFiW2FjdCAtIG5zdHJpbmdzXS5sZW5ndGg7CisrICAgIH0KKysKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICBpZiAoZG9tYWluLT5jb2Rlc2V0X2NudHIKKysgICAgICAhPSAoZG9tYWluYmluZGluZyAhPSBOVUxMID8gZG9tYWluYmluZGluZy0+Y29kZXNldF9jbnRyIDogMCkpCisrICAgIHsKKysgICAgICAvKiBUaGUgZG9tYWluJ3MgY29kZXNldCBoYXMgY2hhbmdlZCB0aHJvdWdoIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KCkKKysJIHNpbmNlIHRoZSBtZXNzYWdlIGNhdGFsb2cgd2FzIGluaXRpYWxpemVkIG9yIGxhc3QgYWNjZXNzZWQuICBXZQorKwkgaGF2ZSB0byByZWluaXRpYWxpemUgdGhlIGNvbnZlcnRlci4gICovCisrICAgICAgX25sX2ZyZWVfZG9tYWluX2NvbnYgKGRvbWFpbik7CisrICAgICAgX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKyAgICB9CisrCisrICBpZiAoCisrIyBpZmRlZiBfTElCQworKyAgICAgIGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMQorKyMgZWxzZQorKyMgIGlmIEhBVkVfSUNPTlYKKysgICAgICBkb21haW4tPmNvbnYgIT0gKGljb252X3QpIC0xCisrIyAgZW5kaWYKKysjIGVuZGlmCisrICAgICAgKQorKyAgICB7CisrICAgICAgLyogV2UgYXJlIHN1cHBvc2VkIHRvIGRvIGEgY29udmVyc2lvbi4gIEZpcnN0IGFsbG9jYXRlIGFuCisrCSBhcHByb3ByaWF0ZSB0YWJsZSB3aXRoIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyB0aGUgdGFibGUKKysJIG9mIHRyYW5zbGF0aW9ucyBpbiB0aGUgZmlsZSwgd2hlcmUgd2UgY2FuIHB1dCB0aGUgcG9pbnRlcnMKKysJIHRvIHRoZSBjb252ZXJ0ZWQgc3RyaW5ncyBpbi4KKysJIFRoZXJlIGlzIGEgc2xpZ2h0IGNvbXBsaWNhdGlvbiB3aXRoIHBsdXJhbCBlbnRyaWVzLiAgVGhleQorKwkgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnNlY3V0aXZlIE5VTCB0ZXJtaW5hdGVkIHN0cmluZ3MuICBXZQorKwkgaGFuZGxlIHRoaXMgY2FzZSBieSBjb252ZXJ0aW5nIFJFU1VMVExFTiBieXRlcywgaW5jbHVkaW5nCisrCSBOVUxzLiAgKi8KKysKKysgICAgICBpZiAoZG9tYWluLT5jb252X3RhYiA9PSBOVUxMCisrCSAgJiYgKChkb21haW4tPmNvbnZfdGFiID0KKysJCSAoY2hhciAqKikgY2FsbG9jIChuc3RyaW5ncyArIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncywKKysJCQkJICAgc2l6ZW9mIChjaGFyICopKSkKKysJICAgICAgPT0gTlVMTCkpCisrCS8qIE1hcmsgdGhhdCB3ZSBkaWRuJ3Qgc3VjY2VlZCBhbGxvY2F0aW5nIGEgdGFibGUuICAqLworKwlkb21haW4tPmNvbnZfdGFiID0gKGNoYXIgKiopIC0xOworKworKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChkb21haW4tPmNvbnZfdGFiID09IChjaGFyICoqKSAtMSwgMCkpCisrCS8qIE5vdGhpbmcgd2UgY2FuIGRvLCBubyBtb3JlIG1lbW9yeS4gICovCisrCWdvdG8gY29udmVydGVkOworKworKyAgICAgIGlmIChkb21haW4tPmNvbnZfdGFiW2FjdF0gPT0gTlVMTCkKKysJeworKwkgIC8qIFdlIGhhdmVuJ3QgdXNlZCB0aGlzIHN0cmluZyBzbyBmYXIsIHNvIGl0IGlzIG5vdAorKwkgICAgIHRyYW5zbGF0ZWQgeWV0LiAgRG8gdGhpcyBub3cuICAqLworKwkgIC8qIFdlIHVzZSBhIGJpdCBtb3JlIGVmZmljaWVudCBtZW1vcnkgaGFuZGxpbmcuCisrCSAgICAgV2UgYWxsb2NhdGUgYWx3YXlzIGxhcmdlciBibG9ja3Mgd2hpY2ggZ2V0IHVzZWQgb3ZlcgorKwkgICAgIHRpbWUuICBUaGlzIGlzIGZhc3RlciB0aGFuIG1hbnkgc21hbGwgYWxsb2NhdGlvbnMuICAgKi8KKysJICBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jaykKKysjIGRlZmluZSBJTklUSUFMX0JMT0NLX1NJWkUJNDA4MAorKwkgIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpmcmVlbWVtOworKwkgIHN0YXRpYyBzaXplX3QgZnJlZW1lbV9zaXplOworKworKwkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluYnVmOworKwkgIHVuc2lnbmVkIGNoYXIgKm91dGJ1ZjsKKysJICBpbnQgbWFsbG9jX2NvdW50OworKyMgaWZuZGVmIF9MSUJDCisrCSAgdHJhbnNtZW1fYmxvY2tfdCAqdHJhbnNtZW1fbGlzdCA9IE5VTEw7CisrIyBlbmRpZgorKworKwkgIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKworKwkgIGluYnVmID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgcmVzdWx0OworKwkgIG91dGJ1ZiA9IGZyZWVtZW0gKyBzaXplb2YgKHNpemVfdCk7CisrCisrCSAgbWFsbG9jX2NvdW50ID0gMDsKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgdHJhbnNtZW1fYmxvY2tfdCAqbmV3bWVtOworKyMgaWZkZWYgX0xJQkMKKysJICAgICAgc2l6ZV90IG5vbl9yZXZlcnNpYmxlOworKwkgICAgICBpbnQgcmVzOworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgcmVzID0gX19nY29udiAoZG9tYWluLT5jb252LAorKwkJCSAgICAgJmluYnVmLCBpbmJ1ZiArIHJlc3VsdGxlbiwKKysJCQkgICAgICZvdXRidWYsCisrCQkJICAgICBvdXRidWYgKyBmcmVlbWVtX3NpemUgLSBzaXplb2YgKHNpemVfdCksCisrCQkJICAgICAmbm9uX3JldmVyc2libGUpOworKworKwkgICAgICBpZiAocmVzID09IF9fR0NPTlZfT0sgfHwgcmVzID09IF9fR0NPTlZfRU1QVFlfSU5QVVQpCisrCQlicmVhazsKKysKKysJICAgICAgaWYgKHJlcyAhPSBfX0dDT05WX0ZVTExfT1VUUFVUKQorKwkJeworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysJICAgICAgaW5idWYgPSByZXN1bHQ7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgICAgICBjb25zdCBjaGFyICppbnB0ciA9IChjb25zdCBjaGFyICopIGluYnVmOworKwkgICAgICBzaXplX3QgaW5sZWZ0ID0gcmVzdWx0bGVuOworKwkgICAgICBjaGFyICpvdXRwdHIgPSAoY2hhciAqKSBvdXRidWY7CisrCSAgICAgIHNpemVfdCBvdXRsZWZ0OworKworKwkgICAgICBpZiAoZnJlZW1lbV9zaXplIDwgc2l6ZW9mIChzaXplX3QpKQorKwkJZ290byByZXNpemVfZnJlZW1lbTsKKysKKysJICAgICAgb3V0bGVmdCA9IGZyZWVtZW1fc2l6ZSAtIHNpemVvZiAoc2l6ZV90KTsKKysJICAgICAgaWYgKGljb252IChkb21haW4tPmNvbnYsCisrCQkJIChJQ09OVl9DT05TVCBjaGFyICoqKSAmaW5wdHIsICZpbmxlZnQsCisrCQkJICZvdXRwdHIsICZvdXRsZWZ0KQorKwkJICAhPSAoc2l6ZV90KSAoLTEpKQorKwkJeworKwkJICBvdXRidWYgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdHI7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBpZiAoZXJybm8gIT0gRTJCSUcpCisrCQl7CisrCQkgIF9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisrCQkgIGdvdG8gY29udmVydGVkOworKwkJfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKwkgICAgcmVzaXplX2ZyZWVtZW06CisrCSAgICAgIC8qIFdlIG11c3QgYWxsb2NhdGUgYSBuZXcgYnVmZmVyIG9yIHJlc2l6ZSB0aGUgb2xkIG9uZS4gICovCisrCSAgICAgIGlmIChtYWxsb2NfY291bnQgPiAwKQorKwkJeworKwkJICArK21hbGxvY19jb3VudDsKKysJCSAgZnJlZW1lbV9zaXplID0gbWFsbG9jX2NvdW50ICogSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSByZWFsbG9jICh0cmFuc21lbV9saXN0LAorKwkJCQkJCQkgZnJlZW1lbV9zaXplKTsKKysjIGlmZGVmIF9MSUJDCisrCQkgIGlmIChuZXdtZW0gIT0gTlVMTCkKKysJCSAgICB0cmFuc21lbV9saXN0ID0gdHJhbnNtZW1fbGlzdC0+bmV4dDsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIHN0cnVjdCB0cmFuc21lbV9saXN0ICpvbGQgPSB0cmFuc21lbV9saXN0OworKworKwkJICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrCQkgICAgICBmcmVlIChvbGQpOworKwkJICAgIH0KKysjIGVuZGlmCisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgbWFsbG9jX2NvdW50ID0gMTsKKysJCSAgZnJlZW1lbV9zaXplID0gSU5JVElBTF9CTE9DS19TSVpFOworKwkJICBuZXdtZW0gPSAodHJhbnNtZW1fYmxvY2tfdCAqKSBtYWxsb2MgKGZyZWVtZW1fc2l6ZSk7CisrCQl9CisrCSAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChuZXdtZW0gPT0gTlVMTCwgMCkpCisrCQl7CisrCQkgIGZyZWVtZW0gPSBOVUxMOworKwkJICBmcmVlbWVtX3NpemUgPSAwOworKwkJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwkJICBnb3RvIGNvbnZlcnRlZDsKKysJCX0KKysKKysjIGlmZGVmIF9MSUJDCisrCSAgICAgIC8qIEFkZCB0aGUgYmxvY2sgdG8gdGhlIGxpc3Qgb2YgYmxvY2tzIHdlIGhhdmUgdG8gZnJlZQorKyAgICAgICAgICAgICAgICAgYXQgc29tZSBwb2ludC4gICovCisrCSAgICAgIG5ld21lbS0+bmV4dCA9IHRyYW5zbWVtX2xpc3Q7CisrCSAgICAgIHRyYW5zbWVtX2xpc3QgPSBuZXdtZW07CisrCisrCSAgICAgIGZyZWVtZW0gPSBuZXdtZW0tPmRhdGE7CisrCSAgICAgIGZyZWVtZW1fc2l6ZSAtPSBvZmZzZXRvZiAoc3RydWN0IHRyYW5zbWVtX2xpc3QsIGRhdGEpOworKyMgZWxzZQorKwkgICAgICB0cmFuc21lbV9saXN0ID0gbmV3bWVtOworKwkgICAgICBmcmVlbWVtID0gbmV3bWVtOworKyMgZW5kaWYKKysKKysJICAgICAgb3V0YnVmID0gZnJlZW1lbSArIHNpemVvZiAoc2l6ZV90KTsKKysJICAgIH0KKysKKysJICAvKiBXZSBoYXZlIG5vdyBpbiBvdXIgYnVmZmVyIGEgY29udmVydGVkIHN0cmluZy4gIFB1dCB0aGlzCisrCSAgICAgaW50byB0aGUgdGFibGUgb2YgY29udmVyc2lvbnMuICAqLworKwkgICooc2l6ZV90ICopIGZyZWVtZW0gPSBvdXRidWYgLSBmcmVlbWVtIC0gc2l6ZW9mIChzaXplX3QpOworKwkgIGRvbWFpbi0+Y29udl90YWJbYWN0XSA9IChjaGFyICopIGZyZWVtZW07CisrCSAgLyogU2hyaW5rIGZyZWVtZW0sIGJ1dCBrZWVwIGl0IGFsaWduZWQuICAqLworKwkgIGZyZWVtZW1fc2l6ZSAtPSBvdXRidWYgLSBmcmVlbWVtOworKwkgIGZyZWVtZW0gPSBvdXRidWY7CisrCSAgZnJlZW1lbSArPSBmcmVlbWVtX3NpemUgJiAoYWxpZ25vZiAoc2l6ZV90KSAtIDEpOworKwkgIGZyZWVtZW1fc2l6ZSA9IGZyZWVtZW1fc2l6ZSAmIH4gKGFsaWdub2YgKHNpemVfdCkgLSAxKTsKKysKKysJICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKwl9CisrCisrICAgICAgLyogTm93IGRvbWFpbi0+Y29udl90YWJbYWN0XSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24gb2YgYWxsCisrCSB0aGUgcGx1cmFsIHZhcmlhbnRzLiAgKi8KKysgICAgICByZXN1bHQgPSBkb21haW4tPmNvbnZfdGFiW2FjdF0gKyBzaXplb2YgKHNpemVfdCk7CisrICAgICAgcmVzdWx0bGVuID0gKihzaXplX3QgKikgZG9tYWluLT5jb252X3RhYlthY3RdOworKyAgICB9CisrCisrIGNvbnZlcnRlZDoKKysgIC8qIFRoZSByZXN1bHQgc3RyaW5nIGlzIGNvbnZlcnRlZC4gICovCisrCisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysKKysgICpsZW5ndGhwID0gcmVzdWx0bGVuOworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrLyogTG9vayB1cCBhIHBsdXJhbCB2YXJpYW50LiAgKi8KKytzdGF0aWMgY2hhciAqCisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfbG9va3VwIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW4sIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICAgICBjb25zdCBjaGFyICp0cmFuc2xhdGlvbiwgc2l6ZV90IHRyYW5zbGF0aW9uX2xlbikKKyt7CisrICBzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluZGF0YSA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW4tPmRhdGE7CisrICB1bnNpZ25lZCBsb25nIGludCBpbmRleDsKKysgIGNvbnN0IGNoYXIgKnA7CisrCisrICBpbmRleCA9IHBsdXJhbF9ldmFsIChkb21haW5kYXRhLT5wbHVyYWwsIG4pOworKyAgaWYgKGluZGV4ID49IGRvbWFpbmRhdGEtPm5wbHVyYWxzKQorKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uICBJdCBtZWFucyB0aGUgcGx1cmFsIGV4cHJlc3Npb24gYW5kIHRoZQorKyAgICAgICBnaXZlbiBtYXhpbXVtIHZhbHVlIGRvIG5vdCBtYXRjaC4gICovCisrICAgIGluZGV4ID0gMDsKKysKKysgIC8qIFNraXAgSU5ERVggc3RyaW5ncyBhdCBUUkFOU0xBVElPTi4gICovCisrICBwID0gdHJhbnNsYXRpb247CisrICB3aGlsZSAoaW5kZXgtLSA+IDApCisrICAgIHsKKysjaWZkZWYgX0xJQkMKKysgICAgICBwID0gX19yYXdtZW1jaHIgKHAsICdcMCcpOworKyNlbHNlCisrICAgICAgcCA9IHN0cmNociAocCwgJ1wwJyk7CisrI2VuZGlmCisrICAgICAgLyogQW5kIHNraXAgb3ZlciB0aGUgTlVMIGJ5dGUuICAqLworKyAgICAgIHArKzsKKysKKysgICAgICBpZiAocCA+PSB0cmFuc2xhdGlvbiArIHRyYW5zbGF0aW9uX2xlbikKKysJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSXQgbWVhbnMgdGhlIHBsdXJhbCBleHByZXNzaW9uCisrCSAgIGV2YWx1YXRlZCB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgdmFyaWFudHMKKysJICAgYXZhaWxhYmxlIGZvciBNU0dJRDEuICAqLworKwlyZXR1cm4gKGNoYXIgKikgdHJhbnNsYXRpb247CisrICAgIH0KKysgIHJldHVybiAoY2hhciAqKSBwOworK30KKysKKysjaWZuZGVmIF9MSUJDCisrLyogUmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBsb2NhbGUgQ0FURUdPUlkuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2NhdGVnb3J5X3RvX25hbWUgKGludCBjYXRlZ29yeSkKKyt7CisrICBjb25zdCBjaGFyICpyZXR2YWw7CisrCisrICBzd2l0Y2ggKGNhdGVnb3J5KQorKyAgeworKyNpZmRlZiBMQ19DT0xMQVRFCisrICBjYXNlIExDX0NPTExBVEU6CisrICAgIHJldHZhbCA9ICJMQ19DT0xMQVRFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0NUWVBFCisrICBjYXNlIExDX0NUWVBFOgorKyAgICByZXR2YWwgPSAiTENfQ1RZUEUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTU9ORVRBUlkKKysgIGNhc2UgTENfTU9ORVRBUlk6CisrICAgIHJldHZhbCA9ICJMQ19NT05FVEFSWSI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19OVU1FUklDCisrICBjYXNlIExDX05VTUVSSUM6CisrICAgIHJldHZhbCA9ICJMQ19OVU1FUklDIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX1RJTUUKKysgIGNhc2UgTENfVElNRToKKysgICAgcmV0dmFsID0gIkxDX1RJTUUiOworKyAgICBicmVhazsKKysjZW5kaWYKKysjaWZkZWYgTENfTUVTU0FHRVMKKysgIGNhc2UgTENfTUVTU0FHRVM6CisrICAgIHJldHZhbCA9ICJMQ19NRVNTQUdFUyI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyNpZmRlZiBMQ19SRVNQT05TRQorKyAgY2FzZSBMQ19SRVNQT05TRToKKysgICAgcmV0dmFsID0gIkxDX1JFU1BPTlNFIjsKKysgICAgYnJlYWs7CisrI2VuZGlmCisrI2lmZGVmIExDX0FMTAorKyAgY2FzZSBMQ19BTEw6CisrICAgIC8qIFRoaXMgbWlnaHQgbm90IG1ha2Ugc2Vuc2UgYnV0IGlzIHBlcmhhcHMgYmV0dGVyIHRoYW4gYW55IG90aGVyCisrICAgICAgIHZhbHVlLiAgKi8KKysgICAgcmV0dmFsID0gIkxDX0FMTCI7CisrICAgIGJyZWFrOworKyNlbmRpZgorKyAgZGVmYXVsdDoKKysgICAgLyogSWYgeW91IGhhdmUgYSBiZXR0ZXIgaWRlYSBmb3IgYSBkZWZhdWx0IHZhbHVlIGxldCBtZSBrbm93LiAgKi8KKysgICAgcmV0dmFsID0gIkxDX1hYWCI7CisrICB9CisrCisrICByZXR1cm4gcmV0dmFsOworK30KKysjZW5kaWYKKysKKysvKiBHdWVzcyB2YWx1ZSBvZiBjdXJyZW50IGxvY2FsZSBmcm9tIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK2d1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyt7CisrICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKysgIGNvbnN0IGNoYXIgKnJldHZhbDsKKysKKysgIC8qIFRoZSBoaWdoZXN0IHByaW9yaXR5IHZhbHVlIGlzIHRoZSBgTEFOR1VBR0UnIGVudmlyb25tZW50CisrICAgICB2YXJpYWJsZS4gIEJ1dCB3ZSBkb24ndCB1c2UgdGhlIHZhbHVlIGlmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQKKysgICAgIGxvY2FsZSBpcyB0aGUgQyBsb2NhbGUuICBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbi4gICovCisrICBsYW5ndWFnZSA9IGdldGVudiAoIkxBTkdVQUdFIik7CisrICBpZiAobGFuZ3VhZ2UgIT0gTlVMTCAmJiBsYW5ndWFnZVswXSA9PSAnXDAnKQorKyAgICBsYW5ndWFnZSA9IE5VTEw7CisrCisrICAvKiBXZSBoYXZlIHRvIHByb2NlZWQgd2l0aCB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvIGBMQ19BTEwnLAorKyAgICAgYExDX3h4eCcsIGFuZCBgTEFORycuICBPbiBzb21lIHN5c3RlbXMgdGhpcyBjYW4gYmUgZG9uZSBieSB0aGUKKysgICAgIGBzZXRsb2NhbGUnIGZ1bmN0aW9uIGl0c2VsZi4gICovCisrI2lmZGVmIF9MSUJDCisrICByZXR2YWwgPSBfX2N1cnJlbnRfbG9jYWxlX25hbWUgKGNhdGVnb3J5KTsKKysjZWxzZQorKyAgcmV0dmFsID0gX25sX2xvY2FsZV9uYW1lIChjYXRlZ29yeSwgY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKysgIC8qIElnbm9yZSBMQU5HVUFHRSBpZiB0aGUgbG9jYWxlIGlzIHNldCB0byAiQyIgYmVjYXVzZQorKyAgICAgMS4gIkMiIGxvY2FsZSB1c3VhbGx5IHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nLCBhbmQgbW9zdCBpbnRlcm5hdGlvbmFsCisrCW1lc3NhZ2VzIHVzZSBub24tQVNDSUkgY2hhcmFjdGVycy4gVGhlc2UgY2hhcmFjdGVycyBnZXQgZGlzcGxheWVkCisrCWFzIHF1ZXN0aW9uIG1hcmtzIChpZiB1c2luZyBnbGliYydzIGljb252KCkpIG9yIGFzIGludmFsaWQgOC1iaXQKKysJY2hhcmFjdGVycyAoYmVjYXVzZSBvdGhlciBpY29udigpcyByZWZ1c2UgdG8gY29udmVydCBtb3N0IG5vbi1BU0NJSQorKwljaGFyYWN0ZXJzIHRvIEFTQ0lJKS4gSW4gYW55IGNhc2UsIHRoZSBvdXRwdXQgaXMgdWdseS4KKysgICAgIDIuIFRoZSBwcmVjaXNlIG91dHB1dCBvZiBzb21lIHByb2dyYW1zIGluIHRoZSAiQyIgbG9jYWxlIGlzIHNwZWNpZmllZAorKwlieSBQT1NJWCBhbmQgc2hvdWxkIG5vdCBkZXBlbmQgb24gZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UKKysJIkxBTkdVQUdFIi4gIFdlIGFsbG93IHN1Y2ggcHJvZ3JhbXMgdG8gdXNlIGdldHRleHQoKS4gICovCisrICByZXR1cm4gbGFuZ3VhZ2UgIT0gTlVMTCAmJiBzdHJjbXAgKHJldHZhbCwgIkMiKSAhPSAwID8gbGFuZ3VhZ2UgOiByZXR2YWw7CisrfQorKworKy8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworKworKy8qIFdlIGRvbid0IHdhbnQgbGliaW50bC5hIHRvIGRlcGVuZCBvbiBhbnkgb3RoZXIgbGlicmFyeS4gIFNvIHdlCisrICAgYXZvaWQgdGhlIG5vbi1zdGFuZGFyZCBmdW5jdGlvbiBzdHBjcHkuICBJbiBHTlUgQyBMaWJyYXJ5IHRoaXMKKysgICBmdW5jdGlvbiBpcyBhdmFpbGFibGUsIHRob3VnaC4gIEFsc28gYWxsb3cgdGhlIHN5bWJvbCBIQVZFX1NUUENQWQorKyAgIHRvIGJlIGRlZmluZWQuICAqLworKyNpZiAhX0xJQkMgJiYgIUhBVkVfU1RQQ1BZCisrc3RhdGljIGNoYXIgKgorK3N0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKQorK3sKKysgIHdoaWxlICgoKmRlc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKysgICAgLyogRG8gbm90aGluZy4gKi8gOworKyAgcmV0dXJuIGRlc3QgLSAxOworK30KKysjZW5kaWYKKysKKysjaWYgIV9MSUJDICYmICFIQVZFX01FTVBDUFkKKytzdGF0aWMgdm9pZCAqCisrbWVtcGNweSAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikKKyt7CisrICByZXR1cm4gKHZvaWQgKikgKChjaGFyICopIG1lbWNweSAoZGVzdCwgc3JjLCBuKSArIG4pOworK30KKysjZW5kaWYKKysKKysKKysjaWZkZWYgX0xJQkMKKysvKiBJZiB3ZSB3YW50IHRvIGZyZWUgYWxsIHJlc291cmNlcyB3ZSBoYXZlIHRvIGRvIHNvbWUgd29yayBhdAorKyAgIHByb2dyYW0ncyBlbmQuICAqLworK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCisreworKyAgdm9pZCAqb2xkOworKworKyAgd2hpbGUgKF9ubF9kb21haW5fYmluZGluZ3MgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cnVjdCBiaW5kaW5nICpvbGRwID0gX25sX2RvbWFpbl9iaW5kaW5nczsKKysgICAgICBfbmxfZG9tYWluX2JpbmRpbmdzID0gX25sX2RvbWFpbl9iaW5kaW5ncy0+bmV4dDsKKysgICAgICBpZiAob2xkcC0+ZGlybmFtZSAhPSBJTlRVU0UoX25sX2RlZmF1bHRfZGlybmFtZSkpCisrCS8qIFllcywgdGhpcyBpcyBhIHBvaW50ZXIgY29tcGFyaXNvbi4gICovCisrCWZyZWUgKG9sZHAtPmRpcm5hbWUpOworKyAgICAgIGZyZWUgKG9sZHAtPmNvZGVzZXQpOworKyAgICAgIGZyZWUgKG9sZHApOworKyAgICB9CisrCisrICBpZiAoX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrICAgIC8qIFllcywgYWdhaW4gYSBwb2ludGVyIGNvbXBhcmlzb24uICAqLworKyAgICBmcmVlICgoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbik7CisrCisrICAvKiBSZW1vdmUgdGhlIHNlYXJjaCB0cmVlIHdpdGggdGhlIGtub3duIHRyYW5zbGF0aW9ucy4gICovCisrICBfX3RkZXN0cm95IChyb290LCBmcmVlKTsKKysgIHJvb3QgPSBOVUxMOworKworKyAgd2hpbGUgKHRyYW5zbWVtX2xpc3QgIT0gTlVMTCkKKysgICAgeworKyAgICAgIG9sZCA9IHRyYW5zbWVtX2xpc3Q7CisrICAgICAgdHJhbnNtZW1fbGlzdCA9IHRyYW5zbWVtX2xpc3QtPm5leHQ7CisrICAgICAgZnJlZSAob2xkKTsKKysgICAgfQorK30KKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9kY25nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZGNuZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzc1NzQ1MDQ4IC0wNDAwCitAQCAtMCwwICsxLDU3IEBACisrLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRjbmdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTksIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bGliaW50bC5oPgorKyNlbHNlCisrIyBpbmNsdWRlICJsaWJnbnVpbnRsLmgiCisrI2VuZGlmCisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKKysgICB3aXRoIGV4aXN0aW5nIG5hbWVzIGFuZCB0aGV5IHNob3VsZCBmb2xsb3cgQU5TSSBDLiAgQnV0IHRoaXMgc291cmNlCisrICAgY29kZSBpcyBhbHNvIHVzZWQgaW4gR05VIEMgTGlicmFyeSB3aGVyZSB0aGUgbmFtZXMgaGF2ZSBhIF9fCisrICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgX19kY2lnZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyMgZGVmaW5lIERDSUdFVFRFWFQgbGliaW50bF9kY2lnZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50IENBVEVHT1JZCisrICAgbG9jYWxlLiAgKi8KKytjaGFyICoKKytEQ05HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4sCisrCSAgICBpbnQgY2F0ZWdvcnkpCisreworKyAgcmV0dXJuIERDSUdFVFRFWFQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCAxLCBuLCBjYXRlZ29yeSk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fZGNuZ2V0dGV4dCwgZGNuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZGdldHRleHQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9kZ2V0dGV4dC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzgwNzQ0Mjg4IC0wNDAwCitAQCAtMSwzMiArMSwzMyBAQAorLS8qIGRnZXR0ZXh0LmMgLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIGRnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgSEFWRV9MT0NBTEVfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgI2lmZGVmIF9MSUJDCisgIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisgI2Vsc2UKKy0jIGluY2x1ZGUgImxpYmdldHRleHQuaCIKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCitAQCAtMzcsMTggKzM4LDE2IEBACisgICAgcHJlZml4LiAgU28gd2UgaGF2ZSB0byBtYWtlIGEgZGlmZmVyZW5jZSBoZXJlLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGRlZmluZSBER0VUVEVYVCBfX2RnZXR0ZXh0CistIyBkZWZpbmUgRENHRVRURVhUIF9fZGNnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIElOVFVTRShfX2RjZ2V0dGV4dCkKKyAjZWxzZQorLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKy0jIGRlZmluZSBEQ0dFVFRFWFQgZGNnZXR0ZXh0X18KKysjIGRlZmluZSBER0VUVEVYVCBsaWJpbnRsX2RnZXR0ZXh0CisrIyBkZWZpbmUgRENHRVRURVhUIGxpYmludGxfZGNnZXR0ZXh0CisgI2VuZGlmCisgCisgLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgb2YgdGhlIGN1cnJlbnQKKyAgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworIGNoYXIgKgorLURHRVRURVhUIChkb21haW5uYW1lLCBtc2dpZCkKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytER0VUVEVYVCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwgY29uc3QgY2hhciAqbXNnaWQpCisgeworICAgcmV0dXJuIERDR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQsIExDX01FU1NBR0VTKTsKKyB9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZG5nZXR0ZXh0LmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZG5nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zODU3NDM1MjggLTA0MDAKK0BAIC0wLDAgKzEsNTkgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG5nZXR0ZXh0KDMpIGZ1bmN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKysjZW5kaWYKKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIEROR0VUVEVYVCBfX2RuZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgX19kY25nZXR0ZXh0CisrI2Vsc2UKKysjIGRlZmluZSBETkdFVFRFWFQgbGliaW50bF9kbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorKworKy8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIG9mIHRoZSBjdXJyZW50CisrICAgTENfTUVTU0FHRVMgbG9jYWxlIGFuZCBza2lwIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZSBwbHVyYWwgZm9ybS4gICovCisrY2hhciAqCisrRE5HRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgbikKKyt7CisrICByZXR1cm4gRENOR0VUVEVYVCAoZG9tYWlubmFtZSwgbXNnaWQxLCBtc2dpZDIsIG4sIExDX01FU1NBR0VTKTsKKyt9CisrCisrI2lmZGVmIF9MSUJDCisrLyogQWxpYXMgZm9yIGZ1bmN0aW9uIG5hbWUgaW4gR05VIEMgTGlicmFyeS4gICovCisrd2Vha19hbGlhcyAoX19kbmdldHRleHQsIGRuZ2V0dGV4dCk7CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZXZhbC1wbHVyYWwuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9ldmFsLXBsdXJhbC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuMzkwNzQyNzY4IC0wNDAwCitAQCAtMCwwICsxLDEwOCBAQAorKy8qIFBsdXJhbCBleHByZXNzaW9uIGV2YWx1YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgU1RBVElDCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrI2VuZGlmCisrCisrLyogRXZhbHVhdGUgdGhlIHBsdXJhbCBleHByZXNzaW9uIGFuZCByZXR1cm4gYW4gaW5kZXggdmFsdWUuICAqLworK1NUQVRJQworK3Vuc2lnbmVkIGxvbmcgaW50CisraW50ZXJuYWxfZnVuY3Rpb24KKytwbHVyYWxfZXZhbCAoc3RydWN0IGV4cHJlc3Npb24gKnBleHAsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgc3dpdGNoIChwZXhwLT5uYXJncykKKysgICAgeworKyAgICBjYXNlIDA6CisrICAgICAgc3dpdGNoIChwZXhwLT5vcGVyYXRpb24pCisrCXsKKysJY2FzZSB2YXI6CisrCSAgcmV0dXJuIG47CisrCWNhc2UgbnVtOgorKwkgIHJldHVybiBwZXhwLT52YWwubnVtOworKwlkZWZhdWx0OgorKwkgIGJyZWFrOworKwl9CisrICAgICAgLyogTk9UUkVBQ0hFRCAqLworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIDE6CisrICAgICAgeworKwkvKiBwZXhwLT5vcGVyYXRpb24gbXVzdCBiZSBsbm90LiAgKi8KKysJdW5zaWduZWQgbG9uZyBpbnQgYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuICEgYXJnOworKyAgICAgIH0KKysgICAgY2FzZSAyOgorKyAgICAgIHsKKysJdW5zaWduZWQgbG9uZyBpbnQgbGVmdGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1swXSwgbik7CisrCWlmIChwZXhwLT5vcGVyYXRpb24gPT0gbG9yKQorKwkgIHJldHVybiBsZWZ0YXJnIHx8IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UgaWYgKHBleHAtPm9wZXJhdGlvbiA9PSBsYW5kKQorKwkgIHJldHVybiBsZWZ0YXJnICYmIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCWVsc2UKKysJICB7CisrCSAgICB1bnNpZ25lZCBsb25nIGludCByaWdodGFyZyA9IHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1sxXSwgbik7CisrCisrCSAgICBzd2l0Y2ggKHBleHAtPm9wZXJhdGlvbikKKysJICAgICAgeworKwkgICAgICBjYXNlIG11bHQ6CisrCQlyZXR1cm4gbGVmdGFyZyAqIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGRpdmlkZToKKysjaWYgIUlOVERJVjBfUkFJU0VTX1NJR0ZQRQorKwkJaWYgKHJpZ2h0YXJnID09IDApCisrCQkgIHJhaXNlIChTSUdGUEUpOworKyNlbmRpZgorKwkJcmV0dXJuIGxlZnRhcmcgLyByaWdodGFyZzsKKysJICAgICAgY2FzZSBtb2R1bGU6CisrI2lmICFJTlRESVYwX1JBSVNFU19TSUdGUEUKKysJCWlmIChyaWdodGFyZyA9PSAwKQorKwkJICByYWlzZSAoU0lHRlBFKTsKKysjZW5kaWYKKysJCXJldHVybiBsZWZ0YXJnICUgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgcGx1czoKKysJCXJldHVybiBsZWZ0YXJnICsgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgbWludXM6CisrCQlyZXR1cm4gbGVmdGFyZyAtIHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGxlc3NfdGhhbjoKKysJCXJldHVybiBsZWZ0YXJnIDwgcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl90aGFuOgorKwkJcmV0dXJuIGxlZnRhcmcgPiByaWdodGFyZzsKKysJICAgICAgY2FzZSBsZXNzX29yX2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPD0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2UgZ3JlYXRlcl9vcl9lcXVhbDoKKysJCXJldHVybiBsZWZ0YXJnID49IHJpZ2h0YXJnOworKwkgICAgICBjYXNlIGVxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgPT0gcmlnaHRhcmc7CisrCSAgICAgIGNhc2Ugbm90X2VxdWFsOgorKwkJcmV0dXJuIGxlZnRhcmcgIT0gcmlnaHRhcmc7CisrCSAgICAgIGRlZmF1bHQ6CisrCQlicmVhazsKKysJICAgICAgfQorKwkgIH0KKysJLyogTk9UUkVBQ0hFRCAqLworKwlicmVhazsKKysgICAgICB9CisrICAgIGNhc2UgMzoKKysgICAgICB7CisrCS8qIHBleHAtPm9wZXJhdGlvbiBtdXN0IGJlIHFtb3AuICAqLworKwl1bnNpZ25lZCBsb25nIGludCBib29sYXJnID0gcGx1cmFsX2V2YWwgKHBleHAtPnZhbC5hcmdzWzBdLCBuKTsKKysJcmV0dXJuIHBsdXJhbF9ldmFsIChwZXhwLT52YWwuYXJnc1tib29sYXJnID8gMSA6IDJdLCBuKTsKKysgICAgICB9CisrICAgIH0KKysgIC8qIE5PVFJFQUNIRUQgKi8KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9leHBsb2RlbmFtZS5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2V4cGxvZGVuYW1lLmMJMjAwNC0wOS0xMiAxNDo0MDozNC4zOTU3NDIwMDggLTA0MDAKK0BAIC0xLDE5ICsxLDIwIEBACistLyogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CitAQCAtMzYsMTggKzM3LDIzIEBACisgCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorK2NoYXIgKgorK19ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHdoaWxlIChuYW1lWzBdICE9ICdcMCcgJiYgbmFtZVswXSAhPSAnXycgJiYgbmFtZVswXSAhPSAnQCcKKysJICYmIG5hbWVbMF0gIT0gJysnICYmIG5hbWVbMF0gIT0gJywnKQorKyAgICArK25hbWU7CisrCisrICByZXR1cm4gKGNoYXIgKikgbmFtZTsKKyt9CisrCisrCisgaW50CistX25sX2V4cGxvZGVfbmFtZSAobmFtZSwgbGFuZ3VhZ2UsIG1vZGlmaWVyLCB0ZXJyaXRvcnksIGNvZGVzZXQsCistCQkgIG5vcm1hbGl6ZWRfY29kZXNldCwgc3BlY2lhbCwgc3BvbnNvciwgcmV2aXNpb24pCistICAgICBjaGFyICpuYW1lOworLSAgICAgY29uc3QgY2hhciAqKmxhbmd1YWdlOworLSAgICAgY29uc3QgY2hhciAqKm1vZGlmaWVyOworLSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0OworLSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldDsKKy0gICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsOworLSAgICAgY29uc3QgY2hhciAqKnNwb25zb3I7CistICAgICBjb25zdCBjaGFyICoqcmV2aXNpb247CisrX25sX2V4cGxvZGVfbmFtZSAoY2hhciAqbmFtZSwKKysJCSAgY29uc3QgY2hhciAqKmxhbmd1YWdlLCBjb25zdCBjaGFyICoqbW9kaWZpZXIsCisrCQkgIGNvbnN0IGNoYXIgKip0ZXJyaXRvcnksIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LCBjb25zdCBjaGFyICoqc3BlY2lhbCwKKysJCSAgY29uc3QgY2hhciAqKnNwb25zb3IsIGNvbnN0IGNoYXIgKipyZXZpc2lvbikKKyB7CisgICBlbnVtIHsgdW5kZWNpZGVkLCB4cGcsIGNlbiB9IHN5bnRheDsKKyAgIGNoYXIgKmNwOworQEAgLTY3LDkgKzczLDcgQEAKKyAgIG1hc2sgPSAwOworICAgc3ludGF4ID0gdW5kZWNpZGVkOworICAgKmxhbmd1YWdlID0gY3AgPSBuYW1lOworLSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgY3BbMF0gIT0gJ18nICYmIGNwWzBdICE9ICdAJworLQkgJiYgY3BbMF0gIT0gJysnICYmIGNwWzBdICE9ICcsJykKKy0gICAgKytjcDsKKysgIGNwID0gX25sX2ZpbmRfbGFuZ3VhZ2UgKCpsYW5ndWFnZSk7CisgCisgICBpZiAoKmxhbmd1YWdlID09IGNwKQorICAgICAvKiBUaGlzIGRvZXMgbm90IG1ha2Ugc2Vuc2U6IGxhbmd1YWdlIGhhcyB0byBiZSBzcGVjaWZpZWQuICBVc2UKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9maW5kZG9tYWluLmMJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvZmluZGRvbWFpbi5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDE1NzM4OTY4IC0wNDAwCitAQCAtMSw2NCArMSw0MCBAQAorIC8qIEhhbmRsZSBsaXN0IG9mIG5lZWRlZCBtZXNzYWdlIGNhdGFsb2dzCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorKyAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAwLTIwMDEsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUub3JnPiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLSNpbmNsdWRlIDxjdHlwZS5oPgorLSNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CistI2Vsc2UKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorIAorICNpZiBkZWZpbmVkIEhBVkVfVU5JU1REX0ggfHwgZGVmaW5lZCBfTElCQworICMgaW5jbHVkZSA8dW5pc3RkLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKyAjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC03MCwxMCArNDYsOSBAQAorICAgIHRoZSBET01BSU5OQU1FIGFuZCBDQVRFR09SWSBwYXJhbWV0ZXJzIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudGx5CisgICAgZXN0YWJsaXNoZWQgYmluZGluZ3MuICAqLworIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9maW5kX2RvbWFpbiAoZGlybmFtZSwgbG9jYWxlLCBkb21haW5uYW1lKQorLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKy0gICAgIGNoYXIgKmxvY2FsZTsKKy0gICAgIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWU7CisraW50ZXJuYWxfZnVuY3Rpb24KKytfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNoYXIgKmxvY2FsZSwKKysJCSBjb25zdCBjaGFyICpkb21haW5uYW1lLCBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpyZXR2YWw7CisgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKK0BAIC05NSw5ICs3MCw5IEBACisgCisgCWxhbmd1YWdlW190ZXJyaXRvcnldWythdWRpZW5jZV1bK3NwZWNpYWxdWyxbc3BvbnNvcl1bX3JldmlzaW9uXV0KKyAKKy0gICAgIEJlc2lkZSB0aGUgZmlyc3QgYWxsIG9mIHRoZW0gYXJlIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gIElmIHRoZQorLSAgICAgZnVsbCBzcGVjaWZpZWQgbG9jYWxlIGlzIG5vdCBmb3VuZCwgdGhlIGxlc3Mgc3BlY2lmaWMgb25lIGFyZQorLSAgICAgbG9va2VkIGZvci4gIFRoZSB2YXJpb3VzIHBhcnQgd2lsbCBiZSBzdHJpcHBlZCBvZiBhY2NvcmRpbmcgdG8KKysgICAgIEJlc2lkZSB0aGUgZmlyc3QgcGFydCBhbGwgb2YgdGhlbSBhcmUgYWxsb3dlZCB0byBiZSBtaXNzaW5nLiAgSWYKKysgICAgIHRoZSBmdWxsIHNwZWNpZmllZCBsb2NhbGUgaXMgbm90IGZvdW5kLCB0aGUgbGVzcyBzcGVjaWZpYyBvbmUgYXJlCisrICAgICBsb29rZWQgZm9yLiAgVGhlIHZhcmlvdXMgcGFydHMgd2lsbCBiZSBzdHJpcHBlZCBvZmYgYWNjb3JkaW5nIHRvCisgICAgICB0aGUgZm9sbG93aW5nIG9yZGVyOgorIAkJKDEpIHJldmlzaW9uCisgCQkoMikgc3BvbnNvcgorQEAgLTExOSw3ICs5NCw3IEBACisgICAgICAgaW50IGNudDsKKyAKKyAgICAgICBpZiAocmV0dmFsLT5kZWNpZGVkID09IDApCistCV9ubF9sb2FkX2RvbWFpbiAocmV0dmFsKTsKKysJX25sX2xvYWRfZG9tYWluIChyZXR2YWwsIGRvbWFpbmJpbmRpbmcpOworIAorICAgICAgIGlmIChyZXR2YWwtPmRhdGEgIT0gTlVMTCkKKyAJcmV0dXJuIHJldHZhbDsKK0BAIC0xMjcsNyArMTAyLDcgQEAKKyAgICAgICBmb3IgKGNudCA9IDA7IHJldHZhbC0+c3VjY2Vzc29yW2NudF0gIT0gTlVMTDsgKytjbnQpCisgCXsKKyAJICBpZiAocmV0dmFsLT5zdWNjZXNzb3JbY250XS0+ZGVjaWRlZCA9PSAwKQorLQkgICAgX25sX2xvYWRfZG9tYWluIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdKTsKKysJICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSwgZG9tYWluYmluZGluZyk7CisgCisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRhdGEgIT0gTlVMTCkKKyAJICAgIGJyZWFrOworQEAgLTE0MiwxMiArMTE3LDE4IEBACisgICBhbGlhc192YWx1ZSA9IF9ubF9leHBhbmRfYWxpYXMgKGxvY2FsZSk7CisgICBpZiAoYWxpYXNfdmFsdWUgIT0gTlVMTCkKKyAgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKysgICAgICBsb2NhbGUgPSBzdHJkdXAgKGFsaWFzX3ZhbHVlKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbHNlCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoYWxpYXNfdmFsdWUpICsgMTsKKyAgICAgICBsb2NhbGUgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CisgICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgICBtZW1jcHkgKGxvY2FsZSwgYWxpYXNfdmFsdWUsIGxlbik7CisrI2VuZGlmCisgICAgIH0KKyAKKyAgIC8qIE5vdyB3ZSBkZXRlcm1pbmUgdGhlIHNpbmdsZSBwYXJ0cyBvZiB0aGUgbG9jYWxlIG5hbWUuICBGaXJzdAorQEAgLTE2OCwxNCArMTQ5LDE0IEBACisgICAgIHJldHVybiBOVUxMOworIAorICAgaWYgKHJldHZhbC0+ZGVjaWRlZCA9PSAwKQorLSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbCk7CisrICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLCBkb21haW5iaW5kaW5nKTsKKyAgIGlmIChyZXR2YWwtPmRhdGEgPT0gTlVMTCkKKyAgICAgeworICAgICAgIGludCBjbnQ7CisgICAgICAgZm9yIChjbnQgPSAwOyByZXR2YWwtPnN1Y2Nlc3NvcltjbnRdICE9IE5VTEw7ICsrY250KQorIAl7CisgCSAgaWYgKHJldHZhbC0+c3VjY2Vzc29yW2NudF0tPmRlY2lkZWQgPT0gMCkKKy0JICAgIF9ubF9sb2FkX2RvbWFpbiAocmV0dmFsLT5zdWNjZXNzb3JbY250XSk7CisrCSAgICBfbmxfbG9hZF9kb21haW4gKHJldHZhbC0+c3VjY2Vzc29yW2NudF0sIGRvbWFpbmJpbmRpbmcpOworIAkgIGlmIChyZXR2YWwtPnN1Y2Nlc3NvcltjbnRdLT5kYXRhICE9IE5VTEwpCisgCSAgICBicmVhazsKKyAJfQorQEAgLTE4NSw1ICsxNjYsMjcgQEAKKyAgIGlmIChhbGlhc192YWx1ZSAhPSBOVUxMKQorICAgICBmcmVlIChsb2NhbGUpOworIAorKyAgLyogVGhlIHNwYWNlIGZvciBub3JtYWxpemVkX2NvZGVzZXQgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiAgRnJlZSBpdC4gICovCisrICBpZiAobWFzayAmIFhQR19OT1JNX0NPREVTRVQpCisrICAgIGZyZWUgKCh2b2lkICopIG5vcm1hbGl6ZWRfY29kZXNldCk7CisrCisgICByZXR1cm4gcmV0dmFsOworIH0KKysKKysKKysjaWZkZWYgX0xJQkMKKytsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorK3sKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJ1bnAgPSBfbmxfbG9hZGVkX2RvbWFpbnM7CisrCisrICB3aGlsZSAocnVucCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqaGVyZSA9IHJ1bnA7CisrICAgICAgaWYgKHJ1bnAtPmRhdGEgIT0gTlVMTCkKKysJX25sX3VubG9hZF9kb21haW4gKChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBydW5wLT5kYXRhKTsKKysgICAgICBydW5wID0gcnVucC0+bmV4dDsKKysgICAgICBmcmVlICgoY2hhciAqKSBoZXJlLT5maWxlbmFtZSk7CisrICAgICAgZnJlZSAoaGVyZSk7CisrICAgIH0KKyt9CisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dC5jCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2dldHRleHQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQyMDczODIwOCAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0KDMpIGZ1bmN0aW9uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIEltcGxlbWVudGF0aW9uIG9mIGdldHRleHQoMykgZnVuY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZmRlZiBIQVZFX0NPTkZJR19ICisgIyBpbmNsdWRlIDxjb25maWcuaD4KK0BAIC0yMywyMSArMjQsMTQgQEAKKyAjIGRlZmluZSBfX25lZWRfTlVMTAorICMgaW5jbHVkZSA8c3RkZGVmLmg+CisgI2Vsc2UKKy0jIGlmZGVmIFNURENfSEVBREVSUworLSMgIGluY2x1ZGUgPHN0ZGxpYi5oPgkJLyogSnVzdCBmb3IgTlVMTC4gICovCistIyBlbHNlCistIyAgaWZkZWYgSEFWRV9TVFJJTkdfSAorLSMgICBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jICBlbHNlCistIyAgIGRlZmluZSBOVUxMICgodm9pZCAqKSAwKQorLSMgIGVuZGlmCistIyBlbmRpZgorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKyAjZW5kaWYKKyAKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSAibGliZ2V0dGV4dC5oIgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KK0BAIC00OCwyMCArNDIsMTkgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIEdFVFRFWFQgX19nZXR0ZXh0CistIyBkZWZpbmUgREdFVFRFWFQgX19kZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBJTlRVU0UoX19kY2dldHRleHQpCisgI2Vsc2UKKy0jIGRlZmluZSBHRVRURVhUIGdldHRleHRfXworLSMgZGVmaW5lIERHRVRURVhUIGRnZXR0ZXh0X18KKysjIGRlZmluZSBHRVRURVhUIGxpYmludGxfZ2V0dGV4dAorKyMgZGVmaW5lIERDR0VUVEVYVCBsaWJpbnRsX2RjZ2V0dGV4dAorICNlbmRpZgorIAorIC8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CisgICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgSWYgbm90IGZvdW5kLCByZXR1cm5zIE1TR0lEIGl0c2VsZiAodGhlIGRlZmF1bHQKKyAgICB0ZXh0KS4gICovCisgY2hhciAqCistR0VUVEVYVCAobXNnaWQpCistICAgICBjb25zdCBjaGFyICptc2dpZDsKKytHRVRURVhUIChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gREdFVFRFWFQgKE5VTEwsIG1zZ2lkKTsKKysgIHJldHVybiBEQ0dFVFRFWFQgKE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUyk7CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2dldHRleHQuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0LmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwNSArMCwwIEBACistLyogSW50ZXJuYWwgaGVhZGVyIGZvciBHTlUgZ2V0dGV4dCBpbnRlcm5hdGlvbmFsaXphdGlvbiBmdW5jdGlvbnMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCistICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsCistICAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorLSAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0jaWZuZGVmIF9HRVRURVhUX0gKKy0jZGVmaW5lIF9HRVRURVhUX0ggMQorLQorLSNpbmNsdWRlIDxzdGRpby5oPgorLQorLSNpZiBIQVZFX0xJTUlUU19IIHx8IF9MSUJDCistIyBpbmNsdWRlIDxsaW1pdHMuaD4KKy0jZW5kaWYKKy0KKy0vKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCistCistLyogVGhlIG1hZ2ljIG51bWJlciBvZiB0aGUgR05VIG1lc3NhZ2UgY2F0YWxvZyBmb3JtYXQuICAqLworLSNkZWZpbmUgX01BR0lDIDB4OTUwNDEyZGUKKy0jZGVmaW5lIF9NQUdJQ19TV0FQUEVEIDB4ZGUxMjA0OTUKKy0KKy0vKiBSZXZpc2lvbiBudW1iZXIgb2YgdGhlIGN1cnJlbnRseSB1c2VkIC5tbyAoYmluYXJ5KSBmaWxlIGZvcm1hdC4gICovCistI2RlZmluZSBNT19SRVZJU0lPTl9OVU1CRVIgMAorLQorLS8qIFRoZSBmb2xsb3dpbmcgY29udG9ydGlvbnMgYXJlIGFuIGF0dGVtcHQgdG8gdXNlIHRoZSBDIHByZXByb2Nlc3NvcgorLSAgIHRvIGRldGVybWluZSBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHRoYXQgaXMgMzIgYml0cyB3aWRlLiAgQW4KKy0gICBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgYXV0b2NvbmYncyBBQ19DSEVDS19TSVpFT0YgbWFjcm8sIGJ1dAorLSAgIGRvaW5nIHRoYXQgd291bGQgcmVxdWlyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGNvbXBpbGUgYW5kICpydW4qCistICAgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlLiAgTG9jYWxseSBydW5uaW5nIGNyb3NzLWNvbXBpbGVkIGV4ZWN1dGFibGVzCistICAgaXMgdXN1YWxseSBub3QgcG9zc2libGUuICAqLworLQorLSNpZiBfX1NURENfXworLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKy0jZWxzZQorLSMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorLSNlbmRpZgorLQorLS8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCistICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCistICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCistICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKy0KKy0jaWZuZGVmIFVJTlRfTUFYCistIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworLSNlbmRpZgorLQorLSNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCistdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworLSNlbHNlCistIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKy0jIGVsc2UKKy0jICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworLSMgIGVsc2UKKy0gIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworLSAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCistICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKy0jICBlbmRpZgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKy0vKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworLXN0cnVjdCBtb19maWxlX2hlYWRlcgorLXsKKy0gIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworLSAgbmxzX3VpbnQzMiBtYWdpYzsKKy0gIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKy0gIG5sc191aW50MzIgcmV2aXNpb247CistICAvKiBUaGUgbnVtYmVyIG9mIHN0cmluZ3MgcGFpcnMuICAqLworLSAgbmxzX3VpbnQzMiBuc3RyaW5nczsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3RyaW5ncy4gICovCistICBubHNfdWludDMyIG9yaWdfdGFiX29mZnNldDsKKy0gIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2YgdHJhbnNsYXRpb24gc3RyaW5ncy4gICovCistICBubHNfdWludDMyIHRyYW5zX3RhYl9vZmZzZXQ7CistICAvKiBTaXplIG9mIGhhc2hpbmcgdGFibGUuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9zaXplOworLSAgLyogT2Zmc2V0IG9mIGZpcnN0IGhhc2hpbmcgZW50cnkuICAqLworLSAgbmxzX3VpbnQzMiBoYXNoX3RhYl9vZmZzZXQ7CistfTsKKy0KKy1zdHJ1Y3Qgc3RyaW5nX2Rlc2MKKy17CistICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZy4gICovCistICBubHNfdWludDMyIGxlbmd0aDsKKy0gIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCistICBubHNfdWludDMyIG9mZnNldDsKKy19OworLQorLS8qIEBAIGJlZ2luIG9mIGVwaWxvZyBAQCAqLworLQorLSNlbmRpZgkvKiBnZXR0ZXh0LmggICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvZ2V0dGV4dFAuaAkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nZXR0ZXh0UC5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDI2NzM3Mjk2IC0wNDAwCitAQCAtMSwzMyArMSw1MyBAQAorLS8qIEhlYWRlciBkZXNjcmliaW5nIGludGVybmFscyBvZiBnZXR0ZXh0IGxpYnJhcnkKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogSGVhZGVyIGRlc2NyaWJpbmcgaW50ZXJuYWxzIG9mIGxpYmludGwgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICAgYW55IGxhdGVyIHZlcnNpb24uCisgCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIAorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorICNpZm5kZWYgX0dFVFRFWFRQX0gKKyAjZGVmaW5lIF9HRVRURVhUUF9ICisgCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgkJLyogR2V0IHNpemVfdC4gICovCisrCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlICIuLi9pY29udi9nY29udl9pbnQuaCIKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyMgIGluY2x1ZGUgPGljb252Lmg+CisrIyBlbmRpZgorKyNlbmRpZgorKworICNpbmNsdWRlICJsb2FkaW5mby5oIgorIAorKyNpbmNsdWRlICJnbW8uaCIJCS8qIEdldCBubHNfdWludDMyLiAgKi8KKysKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCistI2lmbmRlZiBQQVJBTVMKKy0jIGlmIF9fU1REQ19fCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSBhcmdzCistIyBlbHNlCistIyAgZGVmaW5lIFBBUkFNUyhhcmdzKSAoKQorLSMgZW5kaWYKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKysjZW5kaWYKKysKKysjaWZuZGVmIGF0dHJpYnV0ZV9oaWRkZW4KKysjIGRlZmluZSBhdHRyaWJ1dGVfaGlkZGVuCisrI2VuZGlmCisrCisrLyogVGVsbCB0aGUgY29tcGlsZXIgd2hlbiBhIGNvbmRpdGlvbmFsIG9yIGludGVnZXIgZXhwcmVzc2lvbiBpcworKyAgIGFsbW9zdCBhbHdheXMgdHJ1ZSBvciBhbG1vc3QgYWx3YXlzIGZhbHNlLiAgKi8KKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9FWFBFQ1QKKysjIGRlZmluZSBfX2J1aWx0aW5fZXhwZWN0KGV4cHIsIHZhbCkgKGV4cHIpCisgI2VuZGlmCisgCisgI2lmbmRlZiBXCitAQCAtMzUsMzggKzU1LDE2MCBAQAorICNlbmRpZgorIAorIAorLXN0YXRpYyBubHNfdWludDMyIFNXQVAgUEFSQU1TICgobmxzX3VpbnQzMiBpKSk7CistCisrI2lmZGVmIF9MSUJDCisrIyBpbmNsdWRlIDxieXRlc3dhcC5oPgorKyMgZGVmaW5lIFNXQVAoaSkgYnN3YXBfMzIgKGkpCisrI2Vsc2UKKyBzdGF0aWMgaW5saW5lIG5sc191aW50MzIKKyBTV0FQIChpKQorICAgICAgbmxzX3VpbnQzMiBpOworIHsKKyAgIHJldHVybiAoaSA8PCAyNCkgfCAoKGkgJiAweGZmMDApIDw8IDgpIHwgKChpID4+IDgpICYgMHhmZjAwKSB8IChpID4+IDI0KTsKKyB9CisrI2VuZGlmCisrCisgCisrLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjCisreworKyAgLyogTGVuZ3RoIG9mIGFkZHJlc3NlZCBzdHJpbmcsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHNpemVfdCBsZW5ndGg7CisrICAvKiBQb2ludGVyIHRvIGFkZHJlc3NlZCBzdHJpbmcuICAqLworKyAgY29uc3QgY2hhciAqcG9pbnRlcjsKKyt9OworIAorKy8qIFRoZSByZXByZXNlbnRhdGlvbiBvZiBhbiBvcGVuZWQgbWVzc2FnZSBjYXRhbG9nLiAgKi8KKyBzdHJ1Y3QgbG9hZGVkX2RvbWFpbgorIHsKKysgIC8qIFBvaW50ZXIgdG8gbWVtb3J5IGNvbnRhaW5pbmcgdGhlIC5tbyBmaWxlLiAgKi8KKyAgIGNvbnN0IGNoYXIgKmRhdGE7CisrICAvKiAxIGlmIHRoZSBtZW1vcnkgaXMgbW1hcCgpZWQsIDAgaWYgdGhlIG1lbW9yeSBpcyBtYWxsb2MoKWVkLiAgKi8KKysgIGludCB1c2VfbW1hcDsKKysgIC8qIFNpemUgb2YgbW1hcCgpZWQgbWVtb3J5LiAgKi8KKysgIHNpemVfdCBtbWFwX3NpemU7CisrICAvKiAxIGlmIHRoZSAubW8gZmlsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworICAgaW50IG11c3Rfc3dhcDsKKysgIC8qIFBvaW50ZXIgdG8gYWRkaXRpb25hbCBtYWxsb2MoKWVkIG1lbW9yeS4gICovCisrICB2b2lkICptYWxsb2NlZDsKKysKKysgIC8qIE51bWJlciBvZiBzdGF0aWMgc3RyaW5ncyBwYWlycy4gICovCisgICBubHNfdWludDMyIG5zdHJpbmdzOworLSAgc3RydWN0IHN0cmluZ19kZXNjICpvcmlnX3RhYjsKKy0gIHN0cnVjdCBzdHJpbmdfZGVzYyAqdHJhbnNfdGFiOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzdHJpbmdzIGluIHRoZSBmaWxlLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBzdHJpbmdfZGVzYyAqb3JpZ190YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3RyaW5ncyBpbiB0aGUgZmlsZS4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKnRyYW5zX3RhYjsKKysKKysgIC8qIE51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MgcGFpcnMuICAqLworKyAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKyAgLyogUG9pbnRlciB0byBkZXNjcmlwdG9ycyBvZiBvcmlnaW5hbCBzeXNkZXAgc3RyaW5ncy4gICovCisrICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZ19kZXNjICpvcmlnX3N5c2RlcF90YWI7CisrICAvKiBQb2ludGVyIHRvIGRlc2NyaXB0b3JzIG9mIHRyYW5zbGF0ZWQgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqdHJhbnNfc3lzZGVwX3RhYjsKKysKKysgIC8qIFNpemUgb2YgaGFzaCB0YWJsZS4gICovCisgICBubHNfdWludDMyIGhhc2hfc2l6ZTsKKy0gIG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogUG9pbnRlciB0byBoYXNoIHRhYmxlLiAgKi8KKysgIGNvbnN0IG5sc191aW50MzIgKmhhc2hfdGFiOworKyAgLyogMSBpZiB0aGUgaGFzaCB0YWJsZSB1c2VzIGEgZGlmZmVyZW50IGVuZGlhbm5lc3MgdGhhbiB0aGlzIG1hY2hpbmUuICAqLworKyAgaW50IG11c3Rfc3dhcF9oYXNoX3RhYjsKKysKKysgIGludCBjb2Rlc2V0X2NudHI7CisrI2lmZGVmIF9MSUJDCisrICBfX2djb252X3QgY29udjsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWNvbnZfdCBjb252OworKyMgZW5kaWYKKysjZW5kaWYKKysgIGNoYXIgKipjb252X3RhYjsKKysKKysgIHN0cnVjdCBleHByZXNzaW9uICpwbHVyYWw7CisrICB1bnNpZ25lZCBsb25nIGludCBucGx1cmFsczsKKyB9OworIAorKy8qIFdlIHdhbnQgdG8gYWxsb2NhdGUgYSBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3RydWN0LiAgQnV0IElTTyBDCisrICAgZG9lc24ndCBhbGxvdyB6ZXJvIHNpemVkIGFycmF5cy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgWkVSTyAwCisrI2Vsc2UKKysjIGRlZmluZSBaRVJPIDEKKysjZW5kaWYKKysKKysvKiBBIHNldCBvZiBzZXR0aW5ncyBib3VuZCB0byBhIG1lc3NhZ2UgZG9tYWluLiAgVXNlZCB0byBzdG9yZSBzZXR0aW5ncworKyAgIGZyb20gYmluZHRleHRkb21haW4oKSBhbmQgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQoKS4gICovCisgc3RydWN0IGJpbmRpbmcKKyB7CisgICBzdHJ1Y3QgYmluZGluZyAqbmV4dDsKKy0gIGNoYXIgKmRvbWFpbm5hbWU7CisgICBjaGFyICpkaXJuYW1lOworKyAgaW50IGNvZGVzZXRfY250cjsJLyogSW5jcmVtZW50ZWQgZWFjaCB0aW1lIGNvZGVzZXQgY2hhbmdlcy4gICovCisrICBjaGFyICpjb2Rlc2V0OworKyAgY2hhciBkb21haW5uYW1lW1pFUk9dOworIH07CisgCistc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX25sX2ZpbmRfZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwKKy0JCQkJCQkgY2hhciAqX19sb2NhbGUsCistCQkJCQkJIGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkpOworLXZvaWQgX25sX2xvYWRfZG9tYWluIFBBUkFNUyAoKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluKSk7CisrLyogQSBjb3VudGVyIHdoaWNoIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBzb21lIHByZXZpb3VzIHRyYW5zbGF0aW9ucworKyAgIGJlY29tZSBpbnZhbGlkLgorKyAgIFRoaXMgdmFyaWFibGUgaXMgcGFydCBvZiB0aGUgZXh0ZXJuYWwgQUJJIG9mIHRoZSBHTlUgbGliaW50bC4gICovCisrZXh0ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOworKworKyNpZm5kZWYgX0xJQkMKKytjb25zdCBjaGFyICpfbmxfbG9jYWxlX25hbWUgKGludCBjYXRlZ29yeSwgY29uc3QgY2hhciAqY2F0ZWdvcnluYW1lKTsKKysjZW5kaWYKKysKKytzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpfbmxfZmluZF9kb21haW4gKGNvbnN0IGNoYXIgKl9fZGlybmFtZSwgY2hhciAqX19sb2NhbGUsCisrCQkJCQkgY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqX19kb21haW4sCisrCQkgICAgICBzdHJ1Y3QgYmluZGluZyAqX19kb21haW5iaW5kaW5nKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247Cisrdm9pZCBfbmxfdW5sb2FkX2RvbWFpbiAoc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrY29uc3QgY2hhciAqX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKl9fZG9tYWluX2ZpbGUsCisrCQkJCSAgc3RydWN0IGxvYWRlZF9kb21haW4gKl9fZG9tYWluLAorKwkJCQkgIHN0cnVjdCBiaW5kaW5nICpfX2RvbWFpbmJpbmRpbmcpCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyt2b2lkIF9ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqX19kb21haW4pCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKytjaGFyICpfbmxfZmluZF9tc2cgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nLCBjb25zdCBjaGFyICptc2dpZCwKKysJCSAgICBzaXplX3QgKmxlbmd0aHApCisrICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKysKKysjaWZkZWYgX0xJQkMKKytleHRlcm4gY2hhciAqX19nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytleHRlcm4gY2hhciAqX19kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19uZ2V0dGV4dCAoY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSB1bnNpZ25lZCBsb25nIGludCBfX24pOworK2V4dGVybiBjaGFyICpfX2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrZXh0ZXJuIGNoYXIgKl9fZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCSAgIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX19kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCSAgIGludCBfX3BsdXJhbCwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAorKwkJCSAgIGludCBfX2NhdGVnb3J5KTsKKytleHRlcm4gY2hhciAqX190ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpOworK2V4dGVybiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJICAgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7CisrZXh0ZXJuIGNoYXIgKl9fYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCWNvbnN0IGNoYXIgKl9fY29kZXNldCk7CisrI2Vsc2UKKysvKiBEZWNsYXJlIHRoZSBleHBvcnRlZCBsaWJpbnRsXyogZnVuY3Rpb25zLCBpbiBhIHdheSB0aGF0IGFsbG93cyB1cyB0bworKyAgIGNhbGwgdGhlbSB1bmRlciB0aGVpciByZWFsIG5hbWUuICAqLworKyMgdW5kZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrIyB1bmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGluY2x1ZGUgImxpYmdudWludGwuaCIKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2lnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSBpbnQgX19wbHVyYWwsIHVuc2lnbmVkIGxvbmcgaW50IF9fbiwKKysJCQkJIGludCBfX2NhdGVnb3J5KTsKKysjZW5kaWYKKyAKKyAvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKyAKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9nbW8uaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9nbW8uaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzMTczNjUzNiAtMDQwMAorQEAgLTAsMCArMSwxNDkgQEAKKysvKiBEZXNjcmlwdGlvbiBvZiBHTlUgbWVzc2FnZSBjYXRhbG9nIGZvcm1hdDogZ2VuZXJhbCBmaWxlIGxheW91dC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMiwgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfR0VUVEVYVF9ICisrI2RlZmluZSBfR0VUVEVYVF9IIDEKKysKKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworKworKy8qIFRoZSBtYWdpYyBudW1iZXIgb2YgdGhlIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0LiAgKi8KKysjZGVmaW5lIF9NQUdJQyAweDk1MDQxMmRlCisrI2RlZmluZSBfTUFHSUNfU1dBUFBFRCAweGRlMTIwNDk1CisrCisrLyogUmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjdXJyZW50bHkgdXNlZCAubW8gKGJpbmFyeSkgZmlsZSBmb3JtYXQuICAqLworKyNkZWZpbmUgTU9fUkVWSVNJT05fTlVNQkVSIDAKKysjZGVmaW5lIE1PX1JFVklTSU9OX05VTUJFUl9XSVRIX1NZU0RFUF9JIDEKKysKKysvKiBUaGUgZm9sbG93aW5nIGNvbnRvcnRpb25zIGFyZSBhbiBhdHRlbXB0IHRvIHVzZSB0aGUgQyBwcmVwcm9jZXNzb3IKKysgICB0byBkZXRlcm1pbmUgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSB0aGF0IGlzIDMyIGJpdHMgd2lkZS4gIEFuCisrICAgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggaXMgdG8gdXNlIGF1dG9jb25mJ3MgQUNfQ0hFQ0tfU0laRU9GIG1hY3JvLCBidXQKKysgICBhcyBvZiB2ZXJzaW9uIGF1dG9jb25mLTIuMTMsIHRoZSBBQ19DSEVDS19TSVpFT0YgbWFjcm8gZG9lc24ndCB3b3JrCisrICAgd2hlbiBjcm9zcy1jb21waWxpbmcuICAqLworKworKyNpZiBfX1NURENfXworKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgNDI5NDk2NzI5NVUKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRfTUFYXzMyX0JJVFMgMHhGRkZGRkZGRgorKyNlbmRpZgorKworKy8qIElmIFVJTlRfTUFYIGlzbid0IGRlZmluZWQsIGFzc3VtZSBpdCdzIGEgMzItYml0IHR5cGUuCisrICAgVGhpcyBzaG91bGQgYmUgdmFsaWQgZm9yIGFsbCBzeXN0ZW1zIEdOVSBjYXJlcyBhYm91dCBiZWNhdXNlCisrICAgdGhhdCBkb2Vzbid0IGluY2x1ZGUgMTYtYml0IHN5c3RlbXMsIGFuZCBvbmx5IG1vZGVybiBzeXN0ZW1zCisrICAgKHRoYXQgY2VydGFpbmx5IGhhdmUgPGxpbWl0cy5oPikgaGF2ZSA2NCstYml0IGludGVncmFsIHR5cGVzLiAgKi8KKysKKysjaWZuZGVmIFVJTlRfTUFYCisrIyBkZWZpbmUgVUlOVF9NQVggVUlOVF9NQVhfMzJfQklUUworKyNlbmRpZgorKworKyNpZiBVSU5UX01BWCA9PSBVSU5UX01BWF8zMl9CSVRTCisrdHlwZWRlZiB1bnNpZ25lZCBubHNfdWludDMyOworKyNlbHNlCisrIyBpZiBVU0hSVF9NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgbmxzX3VpbnQzMjsKKysjIGVsc2UKKysjICBpZiBVTE9OR19NQVggPT0gVUlOVF9NQVhfMzJfQklUUworK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBubHNfdWludDMyOworKyMgIGVsc2UKKysgIC8qIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBpbnRlbmRlZCB0byB0aHJvdyBhbiBlcnJvci4gIFVzaW5nICNlcnJvciBpcworKyAgICAgbm90IHBvcnRhYmxlIGVub3VnaC4gICovCisrICAiQ2Fubm90IGRldGVybWluZSB1bnNpZ25lZCAzMi1iaXQgZGF0YSB0eXBlLiIKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysKKysvKiBIZWFkZXIgZm9yIGJpbmFyeSAubW8gZmlsZSBmb3JtYXQuICAqLworK3N0cnVjdCBtb19maWxlX2hlYWRlcgorK3sKKysgIC8qIFRoZSBtYWdpYyBudW1iZXIuICAqLworKyAgbmxzX3VpbnQzMiBtYWdpYzsKKysgIC8qIFRoZSByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGZpbGUgZm9ybWF0LiAgKi8KKysgIG5sc191aW50MzIgcmV2aXNpb247CisrCisrICAvKiBUaGUgZm9sbG93aW5nIGFyZSBvbmx5IHVzZWQgaW4gLm1vIGZpbGVzIHdpdGggbWFqb3IgcmV2aXNpb24gMCBvciAxLiAgKi8KKysKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3RyaW5ncyBwYWlycy4gICovCisrICBubHNfdWludDMyIG5zdHJpbmdzOworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiBvcmlnaW5hbCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgb3JpZ190YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiB0cmFuc190YWJfb2Zmc2V0OworKyAgLyogU2l6ZSBvZiBoYXNoIHRhYmxlLiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfc2l6ZTsKKysgIC8qIE9mZnNldCBvZiBmaXJzdCBoYXNoIHRhYmxlIGVudHJ5LiAgKi8KKysgIG5sc191aW50MzIgaGFzaF90YWJfb2Zmc2V0OworKworKyAgLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKyAgLyogVGhlIG51bWJlciBvZiBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc2VnbWVudHM7CisrICAvKiBPZmZzZXQgb2YgdGFibGUgZGVzY3JpYmluZyBzeXN0ZW0gZGVwZW5kZW50IHNlZ21lbnRzLiAgKi8KKysgIG5sc191aW50MzIgc3lzZGVwX3NlZ21lbnRzX29mZnNldDsKKysgIC8qIFRoZSBudW1iZXIgb2Ygc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIHBhaXJzLiAgKi8KKysgIG5sc191aW50MzIgbl9zeXNkZXBfc3RyaW5nczsKKysgIC8qIE9mZnNldCBvZiB0YWJsZSB3aXRoIHN0YXJ0IG9mZnNldHMgb2Ygb3JpZ2luYWwgc3lzZGVwIHN0cmluZ3MuICAqLworKyAgbmxzX3VpbnQzMiBvcmlnX3N5c2RlcF90YWJfb2Zmc2V0OworKyAgLyogT2Zmc2V0IG9mIHRhYmxlIHdpdGggc3RhcnQgb2Zmc2V0cyBvZiB0cmFuc2xhdGVkIHN5c2RlcCBzdHJpbmdzLiAgKi8KKysgIG5sc191aW50MzIgdHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQ7CisrfTsKKysKKysvKiBEZXNjcmlwdG9yIGZvciBzdGF0aWMgc3RyaW5nIGNvbnRhaW5lZCBpbiB0aGUgYmluYXJ5IC5tbyBmaWxlLiAgKi8KKytzdHJ1Y3Qgc3RyaW5nX2Rlc2MKKyt7CisrICAvKiBMZW5ndGggb2YgYWRkcmVzc2VkIHN0cmluZywgbm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIG5sc191aW50MzIgbGVuZ3RoOworKyAgLyogT2Zmc2V0IG9mIHN0cmluZyBpbiBmaWxlLiAgKi8KKysgIG5sc191aW50MzIgb2Zmc2V0OworK307CisrCisrLyogVGhlIGZvbGxvd2luZyBhcmUgb25seSB1c2VkIGluIC5tbyBmaWxlcyB3aXRoIG1pbm9yIHJldmlzaW9uID49IDEuICAqLworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQuICAqLworK3N0cnVjdCBzeXNkZXBfc2VnbWVudAorK3sKKysgIC8qIExlbmd0aCBvZiBhZGRyZXNzZWQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIE5VTC4gICovCisrICBubHNfdWludDMyIGxlbmd0aDsKKysgIC8qIE9mZnNldCBvZiBzdHJpbmcgaW4gZmlsZS4gICovCisrICBubHNfdWludDMyIG9mZnNldDsKKyt9OworKworKy8qIERlc2NyaXB0b3IgZm9yIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nLiAgKi8KKytzdHJ1Y3Qgc3lzZGVwX3N0cmluZworK3sKKysgIC8qIE9mZnNldCBvZiBzdGF0aWMgc3RyaW5nIHNlZ21lbnRzIGluIGZpbGUuICAqLworKyAgbmxzX3VpbnQzMiBvZmZzZXQ7CisrICAvKiBBbHRlcm5hdGluZyBzZXF1ZW5jZSBvZiBzdGF0aWMgYW5kIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuCisrICAgICBUaGUgbGFzdCBzZWdtZW50IGlzIGEgc3RhdGljIHNlZ21lbnQsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgKi8KKysgIHN0cnVjdCBzZWdtZW50X3BhaXIKKysgIHsKKysgICAgLyogU2l6ZSBvZiBzdGF0aWMgc2VnbWVudC4gICovCisrICAgIG5sc191aW50MzIgc2Vnc2l6ZTsKKysgICAgLyogUmVmZXJlbmNlIHRvIHN5c3RlbSBkZXBlbmRlbnQgc3RyaW5nIHNlZ21lbnQsIG9yIH4wIGF0IHRoZSBlbmQuICAqLworKyAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysgIH0gc2VnbWVudHNbMV07CisrfTsKKysKKysvKiBNYXJrZXIgZm9yIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnRzW10gYXJyYXkuICBUaGlzIGhhcyB0aGUgdmFsdWUgMHhGRkZGRkZGRiwKKysgICByZWdhcmRsZXNzIHdoZXRoZXIgJ2ludCcgaXMgMTYgYml0LCAzMiBiaXQsIG9yIDY0IGJpdC4gICovCisrI2RlZmluZSBTRUdNRU5UU19FTkQgKChubHNfdWludDMyKSB+MCkKKysKKysvKiBAQCBiZWdpbiBvZiBlcGlsb2cgQEAgKi8KKysKKysjZW5kaWYJLyogZ2V0dGV4dC5oICAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2hhc2gtc3RyaW5nLmgJMTk5OC0wNC0yNiAwOToyMjozNi4wMDAwMDAwMDAgLTA0MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvaGFzaC1zdHJpbmcuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQzNjczNTc3NiAtMDQwMAorQEAgLTEsMzUgKzEsMjMgQEAKKy0vKiBJbXBsZW1lbnRzIGEgc3RyaW5nIGhhc2hpbmcgZnVuY3Rpb24uCistICAgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIERlc2NyaXB0aW9uIG9mIEdOVSBtZXNzYWdlIGNhdGFsb2cgZm9ybWF0OiBzdHJpbmcgaGFzaGluZyBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTctMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworLSAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorLSAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKy0gICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCistCistI2lmZGVmIEhBVkVfVkFMVUVTX0gKKy0jIGluY2x1ZGUgPHZhbHVlcy5oPgorLSNlbmRpZgorKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworIAorIC8qIEBAIGVuZCBvZiBwcm9sb2cgQEAgKi8KKyAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpIEFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKEFyZ3MpICgpCistIyBlbmRpZgorLSNlbmRpZgorLQorIC8qIFdlIGFzc3VtZSB0byBoYXZlIGB1bnNpZ25lZCBsb25nIGludCcgdmFsdWUgd2l0aCBhdCBsZWFzdCAzMiBiaXRzLiAgKi8KKyAjZGVmaW5lIEhBU0hXT1JEQklUUyAzMgorIAorQEAgLTM3LDExICsyNSw4IEBACisgLyogRGVmaW5lcyB0aGUgc28gY2FsbGVkIGBoYXNocGp3JyBmdW5jdGlvbiBieSBQLkouIFdlaW5iZXJnZXIKKyAgICBbc2VlIEFoby9TZXRoaS9VbGxtYW4sIENPTVBJTEVSUzogUHJpbmNpcGxlcywgVGVjaG5pcXVlcyBhbmQgVG9vbHMsCisgICAgMTk4NiwgMTk4NyBCZWxsIFRlbGVwaG9uZSBMYWJvcmF0b3JpZXMsIEluYy5dICAqLworLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhhc2hfc3RyaW5nIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fc3RyX3BhcmFtKSk7CistCistc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCistaGFzaF9zdHJpbmcgKHN0cl9wYXJhbSkKKy0gICAgIGNvbnN0IGNoYXIgKnN0cl9wYXJhbTsKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CisraGFzaF9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cl9wYXJhbSkKKyB7CisgICB1bnNpZ25lZCBsb25nIGludCBodmFsLCBnOworICAgY29uc3QgY2hhciAqc3RyID0gc3RyX3BhcmFtOworQEAgLTUxLDggKzM2LDggQEAKKyAgIHdoaWxlICgqc3RyICE9ICdcMCcpCisgICAgIHsKKyAgICAgICBodmFsIDw8PSA0OworLSAgICAgIGh2YWwgKz0gKHVuc2lnbmVkIGxvbmcpICpzdHIrKzsKKy0gICAgICBnID0gaHZhbCAmICgodW5zaWduZWQgbG9uZykgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisrICAgICAgaHZhbCArPSAodW5zaWduZWQgY2hhcikgKnN0cisrOworKyAgICAgIGcgPSBodmFsICYgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmIDw8IChIQVNIV09SREJJVFMgLSA0KSk7CisgICAgICAgaWYgKGcgIT0gMCkKKyAJeworIAkgIGh2YWwgXj0gZyA+PiAoSEFTSFdPUkRCSVRTIC0gOCk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvaW50bC1jb21wYXQuYwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9pbnRsLWNvbXBhdC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDQxNzM1MDE2IC0wNDAwCitAQCAtMSw3NiArMSwxMzEgQEAKKyAvKiBpbnRsLWNvbXBhdC5jIC0gU3R1YiBmdW5jdGlvbnMgdG8gY2FsbCBnZXR0ZXh0IGZ1bmN0aW9ucyBmcm9tIEdOVSBnZXR0ZXh0CisgICAgTGlicmFyeS4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5NSwgMjAwMC0yMDAzIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLWFueSBsYXRlciB2ZXJzaW9uLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKy1UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy1idXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLU1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy1HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy1Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2luY2x1ZGUgImxpYmdldHRleHQuaCIKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisrLyogVGhpcyBmaWxlIHJlZGlyZWN0cyB0aGUgZ2V0dGV4dCBmdW5jdGlvbnMgKHdpdGhvdXQgcHJlZml4KSB0byB0aG9zZQorKyAgIGRlZmluZWQgaW4gdGhlIGluY2x1ZGVkIEdOVSBsaWJpbnRsIGxpYnJhcnkgKHdpdGggImxpYmludGxfIiBwcmVmaXgpLgorKyAgIEl0IGlzIGNvbXBpbGVkIGludG8gbGliaW50bCBpbiBvcmRlciB0byBtYWtlIHRoZSBBTV9HTlVfR0VUVEVYVCB0ZXN0CisrICAgb2YgZ2V0dGV4dCA8PSAwLjExLjIgd29yayB3aXRoIHRoZSBsaWJpbnRsIGxpYnJhcnkgPj0gMC4xMS4zIHdoaWNoCisrICAgaGFzIHRoZSByZWRpcmVjdGlvbnMgcHJpbWFyaWx5IGluIHRoZSA8bGliaW50bC5oPiBpbmNsdWRlIGZpbGUuCisrICAgSXQgaXMgYWxzbyBjb21waWxlZCBpbnRvIGxpYmdudWludGwgc28gdGhhdCBsaWJnbnVpbnRsLnNvIGNhbiBiZSB1c2VkCisrICAgYXMgTERfUFJFTE9BRGFibGUgbGlicmFyeSBvbiBnbGliYyBzeXN0ZW1zLCB0byBwcm92aWRlIHRoZSBleHRyYQorKyAgIGZlYXR1cmVzIHRoYXQgdGhlIGZ1bmN0aW9ucyBpbiB0aGUgbGliYyBkb24ndCBoYXZlIChuYW1lbHksIGxvZ2dpbmcpLiAgKi8KKysKKyAKKyAjdW5kZWYgZ2V0dGV4dAorICN1bmRlZiBkZ2V0dGV4dAorICN1bmRlZiBkY2dldHRleHQKKysjdW5kZWYgbmdldHRleHQKKysjdW5kZWYgZG5nZXR0ZXh0CisrI3VuZGVmIGRjbmdldHRleHQKKyAjdW5kZWYgdGV4dGRvbWFpbgorICN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kX3RleHRkb21haW5fY29kZXNldAorKworKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisgCisgCisrRExMX0VYUE9SVEVECisgY2hhciAqCistYmluZHRleHRkb21haW4gKGRvbWFpbm5hbWUsIGRpcm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqZGlybmFtZTsKKytnZXR0ZXh0IChjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gYmluZHRleHRkb21haW5fXyAoZG9tYWlubmFtZSwgZGlybmFtZSk7CisrICByZXR1cm4gbGliaW50bF9nZXR0ZXh0IChtc2dpZCk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWRjZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQsIGNhdGVnb3J5KQorLSAgICAgY29uc3QgY2hhciAqZG9tYWlubmFtZTsKKy0gICAgIGNvbnN0IGNoYXIgKm1zZ2lkOworLSAgICAgaW50IGNhdGVnb3J5OworK2RnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCkKKyB7CistICByZXR1cm4gZGNnZXR0ZXh0X18gKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisrICByZXR1cm4gbGliaW50bF9kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpOworIH0KKyAKKyAKKytETExfRVhQT1JURUQKKyBjaGFyICoKKy1kZ2V0dGV4dCAoZG9tYWlubmFtZSwgbXNnaWQpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrZGNnZXR0ZXh0IChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KQorIHsKKy0gIHJldHVybiBkZ2V0dGV4dF9fIChkb21haW5uYW1lLCBtc2dpZCk7CisrICByZXR1cm4gbGliaW50bF9kY2dldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkLCBjYXRlZ29yeSk7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLWdldHRleHQgKG1zZ2lkKQorLSAgICAgY29uc3QgY2hhciAqbXNnaWQ7CisrbmdldHRleHQgKGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuKQorIHsKKy0gIHJldHVybiBnZXR0ZXh0X18gKG1zZ2lkKTsKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChtc2dpZDEsIG1zZ2lkMiwgbik7CisgfQorIAorIAorK0RMTF9FWFBPUlRFRAorIGNoYXIgKgorLXRleHRkb21haW4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK2RuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisgeworLSAgcmV0dXJuIHRleHRkb21haW5fXyAoZG9tYWlubmFtZSk7CisrICByZXR1cm4gbGliaW50bF9kbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrZGNuZ2V0dGV4dCAoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJICAgIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBuLAorKwkgICAgaW50IGNhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKGRvbWFpbm5hbWUsIG1zZ2lkMSwgbXNnaWQyLCBuLCBjYXRlZ29yeSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK3RleHRkb21haW4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoZG9tYWlubmFtZSk7CisrfQorKworKworK0RMTF9FWFBPUlRFRAorK2NoYXIgKgorK2JpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICpkaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChkb21haW5uYW1lLCBkaXJuYW1lKTsKKyt9CisrCisrCisrRExMX0VYUE9SVEVECisrY2hhciAqCisrYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKmNvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGRvbWFpbm5hbWUsIGNvZGVzZXQpOworIH0KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sMTBuZmxpc3QuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sMTBuZmxpc3QuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ1NzczMjU4NCAtMDQwMAorQEAgLTEsNTIgKzEsNDAgQEAKKy0vKiBIYW5kbGUgbGlzdCBvZiBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncworLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKyAKKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorLSAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogVGVsbCBnbGliYydzIDxzdHJpbmcuaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc3RwY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRQkxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorLQorLSNpZiBkZWZpbmVkIEhBVkVfU1RSSU5HX0ggfHwgZGVmaW5lZCBfTElCQworLSMgaWZuZGVmIF9HTlVfU09VUkNFCistIyAgZGVmaW5lIF9HTlVfU09VUkNFCTEKKy0jIGVuZGlmCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKy0jZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorLSNlbmRpZgorLSNpZiAhSEFWRV9TVFJDSFIgJiYgIWRlZmluZWQgX0xJQkMKKy0jIGlmbmRlZiBzdHJjaHIKKy0jICBkZWZpbmUgc3RyY2hyIGluZGV4CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfQVJHWl9ICisgIyBpbmNsdWRlIDxhcmd6Lmg+CisgI2VuZGlmCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLQorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZW5kaWYKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgCisgI2luY2x1ZGUgImxvYWRpbmZvLmgiCisgCitAQCAtNjUsMjMgKzUzLDM5IEBACisgLyogUmVuYW1lIHRoZSBub24gQU5TSSBDIGZ1bmN0aW9ucy4gIFRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkCisgICAgYmVjYXVzZSBzb21lIEFOU0kgQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBzdHBjcHkoZGVzdCwgc3JjKSBfX3N0cGNweShkZXN0LCBzcmMpCisrIyBpZm5kZWYgc3RwY3B5CisrIyAgZGVmaW5lIHN0cGNweShkZXN0LCBzcmMpIF9fc3RwY3B5KGRlc3QsIHNyYykKKysjIGVuZGlmCisgI2Vsc2UKKyAjIGlmbmRlZiBIQVZFX1NUUENQWQorLXN0YXRpYyBjaGFyICpzdHBjcHkgUEFSQU1TICgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKSk7Cisrc3RhdGljIGNoYXIgKnN0cGNweSAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjKTsKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19BQlNPTFVURV9QQVRIKFApICB0ZXN0cyB3aGV0aGVyIFAgaXMgYW4gYWJzb2x1dGUgcGF0aC4gIElmIGl0IGlzIG5vdCwKKysgICAgICAgICAgICAgICAgICAgICAgICBpdCBtYXkgYmUgY29uY2F0ZW5hdGVkIHRvIGEgZGlyZWN0b3J5IHBhdGhuYW1lLgorKyAqLworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXyB8fCBkZWZpbmVkIF9fRU1YX18gfHwgZGVmaW5lZCBfX0RKR1BQX18KKysgIC8qIFdpbjMyLCBPUy8yLCBET1MgKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nIHx8IChDKSA9PSAnXFwnKQorKyMgZGVmaW5lIEhBU19ERVZJQ0UoUCkgXAorKyAgICAoKCgoUClbMF0gPj0gJ0EnICYmIChQKVswXSA8PSAnWicpIHx8ICgoUClbMF0gPj0gJ2EnICYmIChQKVswXSA8PSAneicpKSBcCisrICAgICAmJiAoUClbMV0gPT0gJzonKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgKElTU0xBU0ggKChQKVswXSkgfHwgSEFTX0RFVklDRSAoUCkpCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX0FCU09MVVRFX1BBVEgoUCkgSVNTTEFTSCAoKFApWzBdKQorKyNlbmRpZgorKworIC8qIERlZmluZSBmdW5jdGlvbiB3aGljaCBhcmUgdXN1YWxseSBub3QgYXZhaWxhYmxlLiAgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfQ09VTlQKKyAvKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyBpbiBBUkdaLiAgKi8KKy1zdGF0aWMgc2l6ZV90IGFyZ3pfY291bnRfXyBQQVJBTVMgKChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKSk7CistCisgc3RhdGljIHNpemVfdAorLWFyZ3pfY291bnRfXyAoYXJneiwgbGVuKQorLSAgICAgY29uc3QgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CisrYXJnel9jb3VudF9fIChjb25zdCBjaGFyICphcmd6LCBzaXplX3QgbGVuKQorIHsKKyAgIHNpemVfdCBjb3VudCA9IDA7CisgICB3aGlsZSAobGVuID4gMCkKK0BAIC05NSwxOCArOTksMTcgQEAKKyB9CisgIyB1bmRlZiBfX2FyZ3pfY291bnQKKyAjIGRlZmluZSBfX2FyZ3pfY291bnQoYXJneiwgbGVuKSBhcmd6X2NvdW50X18gKGFyZ3osIGxlbikKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X2NvdW50KGFyZ3osIGxlbikgSU5UVVNFKF9fYXJnel9jb3VudCkgKGFyZ3osIGxlbikKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfQ09VTlQgKi8KKyAKKyAjaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9fX0FSR1pfU1RSSU5HSUZZCisgLyogTWFrZSAnXDAnIHNlcGFyYXRlZCBhcmcgdmVjdG9yIEFSR1ogcHJpbnRhYmxlIGJ5IGNvbnZlcnRpbmcgYWxsIHRoZSAnXDAncworICAgIGV4Y2VwdCB0aGUgbGFzdCBpbnRvIHRoZSBjaGFyYWN0ZXIgU0VQLiAgKi8KKy1zdGF0aWMgdm9pZCBhcmd6X3N0cmluZ2lmeV9fIFBBUkFNUyAoKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApKTsKKy0KKyBzdGF0aWMgdm9pZAorLWFyZ3pfc3RyaW5naWZ5X18gKGFyZ3osIGxlbiwgc2VwKQorLSAgICAgY2hhciAqYXJnejsKKy0gICAgIHNpemVfdCBsZW47CistICAgICBpbnQgc2VwOworK2FyZ3pfc3RyaW5naWZ5X18gKGNoYXIgKmFyZ3osIHNpemVfdCBsZW4sIGludCBzZXApCisgeworICAgd2hpbGUgKGxlbiA+IDApCisgICAgIHsKK0BAIC0xMTksMTcgKzEyMiwxNiBAQAorIH0KKyAjIHVuZGVmIF9fYXJnel9zdHJpbmdpZnkKKyAjIGRlZmluZSBfX2FyZ3pfc3RyaW5naWZ5KGFyZ3osIGxlbiwgc2VwKSBhcmd6X3N0cmluZ2lmeV9fIChhcmd6LCBsZW4sIHNlcCkKKysjZWxzZQorKyMgaWZkZWYgX0xJQkMKKysjICBkZWZpbmUgX19hcmd6X3N0cmluZ2lmeShhcmd6LCBsZW4sIHNlcCkgXAorKyAgSU5UVVNFKF9fYXJnel9zdHJpbmdpZnkpIChhcmd6LCBsZW4sIHNlcCkKKysjIGVuZGlmCisgI2VuZGlmCS8qICFfTElCQyAmJiAhSEFWRV9fX0FSR1pfU1RSSU5HSUZZICovCisgCisgI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfX19BUkdaX05FWFQKKy1zdGF0aWMgY2hhciAqYXJnel9uZXh0X18gUEFSQU1TICgoY2hhciAqYXJneiwgc2l6ZV90IGFyZ3pfbGVuLAorLQkJCQkgIGNvbnN0IGNoYXIgKmVudHJ5KSk7CistCisgc3RhdGljIGNoYXIgKgorLWFyZ3pfbmV4dF9fIChhcmd6LCBhcmd6X2xlbiwgZW50cnkpCistICAgICBjaGFyICphcmd6OworLSAgICAgc2l6ZV90IGFyZ3pfbGVuOworLSAgICAgY29uc3QgY2hhciAqZW50cnk7CisrYXJnel9uZXh0X18gKGNoYXIgKmFyZ3osIHNpemVfdCBhcmd6X2xlbiwgY29uc3QgY2hhciAqZW50cnkpCisgeworICAgaWYgKGVudHJ5KQorICAgICB7CitAQCAtMTUwLDExICsxNTIsOCBAQAorIAorIAorIC8qIFJldHVybiBudW1iZXIgb2YgYml0cyBzZXQgaW4gWC4gICovCistc3RhdGljIGludCBwb3AgUEFSQU1TICgoaW50IHgpKTsKKy0KKyBzdGF0aWMgaW5saW5lIGludAorLXBvcCAoeCkKKy0gICAgIGludCB4OworK3BvcCAoaW50IHgpCisgeworICAgLyogV2UgYXNzdW1lIHRoYXQgbm8gbW9yZSB0aGFuIDE2IGJpdHMgYXJlIHVzZWQuICAqLworICAgeCA9ICgoeCAmIH4weDU1NTUpID4+IDEpICsgKHggJiAweDU1NTUpOworQEAgLTE2NywzMSArMTY2LDI3IEBACisgCisgDAorIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCAobDEwbmZpbGVfbGlzdCwgZGlybGlzdCwgZGlybGlzdF9sZW4sIG1hc2ssIGxhbmd1YWdlLAorLQkJICAgIHRlcnJpdG9yeSwgY29kZXNldCwgbm9ybWFsaXplZF9jb2Rlc2V0LCBtb2RpZmllciwgc3BlY2lhbCwKKy0JCSAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIGRvX2FsbG9jYXRlKQorLSAgICAgc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKmwxMG5maWxlX2xpc3Q7CistICAgICBjb25zdCBjaGFyICpkaXJsaXN0OworLSAgICAgc2l6ZV90IGRpcmxpc3RfbGVuOworLSAgICAgaW50IG1hc2s7CistICAgICBjb25zdCBjaGFyICpsYW5ndWFnZTsKKy0gICAgIGNvbnN0IGNoYXIgKnRlcnJpdG9yeTsKKy0gICAgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQ7CistICAgICBjb25zdCBjaGFyICptb2RpZmllcjsKKy0gICAgIGNvbnN0IGNoYXIgKnNwZWNpYWw7CistICAgICBjb25zdCBjaGFyICpzcG9uc29yOworLSAgICAgY29uc3QgY2hhciAqcmV2aXNpb247CistICAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKy0gICAgIGludCBkb19hbGxvY2F0ZTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwKKysJCSAgICBpbnQgbWFzaywgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSkKKyB7CisgICBjaGFyICphYnNfZmlsZW5hbWU7CistICBzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpsYXN0ID0gTlVMTDsKKysgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsYXN0cDsKKyAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKnJldHZhbDsKKyAgIGNoYXIgKmNwOworKyAgc2l6ZV90IGRpcmxpc3RfY291bnQ7CisgICBzaXplX3QgZW50cmllczsKKyAgIGludCBjbnQ7CisgCisrICAvKiBJZiBMQU5HVUFHRSBjb250YWlucyBhbiBhYnNvbHV0ZSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbiwgd2UgaWdub3JlCisrICAgICBESVJMSVNULiAgKi8KKysgIGlmIChJU19BQlNPTFVURV9QQVRIIChsYW5ndWFnZSkpCisrICAgIGRpcmxpc3RfbGVuID0gMDsKKysKKyAgIC8qIEFsbG9jYXRlIHJvb20gZm9yIHRoZSBmdWxsIGZpbGUgbmFtZS4gICovCisgICBhYnNfZmlsZW5hbWUgPSAoY2hhciAqKSBtYWxsb2MgKGRpcmxpc3RfbGVuCisgCQkJCSAgKyBzdHJsZW4gKGxhbmd1YWdlKQorQEAgLTIwOSw3ICsyMDQsNyBAQAorIAkJCQkgICsgKCgobWFzayAmIENFTl9TUE9OU09SKSAhPSAwCisgCQkJCSAgICAgIHx8IChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwKQorIAkJCQkgICAgID8gKDEgKyAoKG1hc2sgJiBDRU5fU1BPTlNPUikgIT0gMAorLQkJCQkJICAgICA/IHN0cmxlbiAoc3BvbnNvcikgKyAxIDogMCkKKysJCQkJCSAgICAgPyBzdHJsZW4gKHNwb25zb3IpIDogMCkKKyAJCQkJCSsgKChtYXNrICYgQ0VOX1JFVklTSU9OKSAhPSAwCisgCQkJCQkgICA/IHN0cmxlbiAocmV2aXNpb24pICsgMSA6IDApKSA6IDApCisgCQkJCSAgKyAxICsgc3RybGVuIChmaWxlbmFtZSkgKyAxKTsKK0BAIC0yMTcsMTQgKzIxMiwxNiBAQAorICAgaWYgKGFic19maWxlbmFtZSA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIHJldHZhbCA9IE5VTEw7CistICBsYXN0ID0gTlVMTDsKKy0KKyAgIC8qIENvbnN0cnVjdCBmaWxlIG5hbWUuICAqLworLSAgbWVtY3B5IChhYnNfZmlsZW5hbWUsIGRpcmxpc3QsIGRpcmxpc3RfbGVuKTsKKy0gIF9fYXJnel9zdHJpbmdpZnkgKGFic19maWxlbmFtZSwgZGlybGlzdF9sZW4sICc6Jyk7CistICBjcCA9IGFic19maWxlbmFtZSArIChkaXJsaXN0X2xlbiAtIDEpOworLSAgKmNwKysgPSAnLyc7CisrICBjcCA9IGFic19maWxlbmFtZTsKKysgIGlmIChkaXJsaXN0X2xlbiA+IDApCisrICAgIHsKKysgICAgICBtZW1jcHkgKGNwLCBkaXJsaXN0LCBkaXJsaXN0X2xlbik7CisrICAgICAgX19hcmd6X3N0cmluZ2lmeSAoY3AsIGRpcmxpc3RfbGVuLCBQQVRIX1NFUEFSQVRPUik7CisrICAgICAgY3AgKz0gZGlybGlzdF9sZW47CisrICAgICAgY3BbLTFdID0gJy8nOworKyAgICB9CisrCisgICBjcCA9IHN0cGNweSAoY3AsIGxhbmd1YWdlKTsKKyAKKyAgIGlmICgobWFzayAmIFRFUlJJVE9SWSkgIT0gMCkKK0BAIC0yNzEsNyArMjY4LDcgQEAKKyAKKyAgIC8qIExvb2sgaW4gbGlzdCBvZiBhbHJlYWR5IGxvYWRlZCBkb21haW5zIHdoZXRoZXIgaXQgaXMgYWxyZWFkeQorICAgICAgYXZhaWxhYmxlLiAgKi8KKy0gIGxhc3QgPSBOVUxMOworKyAgbGFzdHAgPSBsMTBuZmlsZV9saXN0OworICAgZm9yIChyZXR2YWwgPSAqbDEwbmZpbGVfbGlzdDsgcmV0dmFsICE9IE5VTEw7IHJldHZhbCA9IHJldHZhbC0+bmV4dCkKKyAgICAgaWYgKHJldHZhbC0+ZmlsZW5hbWUgIT0gTlVMTCkKKyAgICAgICB7CitAQCAtMjg2LDcgKzI4Myw3IEBACisgCSAgICBicmVhazsKKyAJICB9CisgCistCWxhc3QgPSByZXR2YWw7CisrCWxhc3RwID0gJnJldHZhbC0+bmV4dDsKKyAgICAgICB9CisgCisgICBpZiAocmV0dmFsICE9IE5VTEwgfHwgZG9fYWxsb2NhdGUgPT0gMCkKK0BAIC0yOTUsNDggKzI5Miw2NiBAQAorICAgICAgIHJldHVybiByZXR2YWw7CisgICAgIH0KKyAKKy0gIHJldHZhbCA9IChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopCistICAgIG1hbGxvYyAoc2l6ZW9mICgqcmV0dmFsKSArIChfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKQorLQkJCQkqICgxIDw8IHBvcCAobWFzaykpCistCQkJCSogc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICopKSk7CisrICBkaXJsaXN0X2NvdW50ID0gKGRpcmxpc3RfbGVuID4gMCA/IF9fYXJnel9jb3VudCAoZGlybGlzdCwgZGlybGlzdF9sZW4pIDogMSk7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBsb2FkZWRfbDEwbmZpbGUuICAqLworKyAgcmV0dmFsID0KKysgICAgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKikKKysgICAgbWFsbG9jIChzaXplb2YgKCpyZXR2YWwpCisrCSAgICArICgoKGRpcmxpc3RfY291bnQgPDwgcG9wIChtYXNrKSkgKyAoZGlybGlzdF9jb3VudCA+IDEgPyAxIDogMCkpCisrCSAgICAgICAqIHNpemVvZiAoc3RydWN0IGxvYWRlZF9sMTBuZmlsZSAqKSkpOworICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKyAgIHJldHZhbC0+ZmlsZW5hbWUgPSBhYnNfZmlsZW5hbWU7CistICByZXR2YWwtPmRlY2lkZWQgPSAoX19hcmd6X2NvdW50IChkaXJsaXN0LCBkaXJsaXN0X2xlbikgIT0gMQorKworKyAgLyogV2Ugc2V0IHJldHZhbC0+ZGF0YSB0byBOVUxMIGhlcmU7IGl0IGlzIGZpbGxlZCBpbiBsYXRlci4KKysgICAgIFNldHRpbmcgcmV0dmFsLT5kZWNpZGVkIHRvIDEgaGVyZSBtZWFucyB0aGF0IHJldHZhbCBkb2VzIG5vdAorKyAgICAgY29ycmVzcG9uZCB0byBhIHJlYWwgZmlsZSAoZGlybGlzdF9jb3VudCA+IDEpIG9yIGlzIG5vdCB3b3J0aAorKyAgICAgbG9va2luZyB1cCAoaWYgYW4gdW5ub3JtYWxpemVkIGNvZGVzZXQgd2FzIHNwZWNpZmllZCkuICAqLworKyAgcmV0dmFsLT5kZWNpZGVkID0gKGRpcmxpc3RfY291bnQgPiAxCisgCQkgICAgIHx8ICgobWFzayAmIFhQR19DT0RFU0VUKSAhPSAwCisgCQkJICYmIChtYXNrICYgWFBHX05PUk1fQ09ERVNFVCkgIT0gMCkpOworICAgcmV0dmFsLT5kYXRhID0gTlVMTDsKKyAKKy0gIGlmIChsYXN0ID09IE5VTEwpCistICAgIHsKKy0gICAgICByZXR2YWwtPm5leHQgPSAqbDEwbmZpbGVfbGlzdDsKKy0gICAgICAqbDEwbmZpbGVfbGlzdCA9IHJldHZhbDsKKy0gICAgfQorLSAgZWxzZQorLSAgICB7CistICAgICAgcmV0dmFsLT5uZXh0ID0gbGFzdC0+bmV4dDsKKy0gICAgICBsYXN0LT5uZXh0ID0gcmV0dmFsOworLSAgICB9CisrICByZXR2YWwtPm5leHQgPSAqbGFzdHA7CisrICAqbGFzdHAgPSByZXR2YWw7CisgCisgICBlbnRyaWVzID0gMDsKKy0gIC8qIElmIHRoZSBESVJMSVNUIGlzIGEgcmVhbCBsaXN0IHRoZSBSRVRWQUwgZW50cnkgY29ycmVzcG9uZHMgbm90IHRvCistICAgICBhIHJlYWwgZmlsZS4gIFNvIHdlIGhhdmUgdG8gdXNlIHRoZSBESVJMSVNUIHNlcGFyYXRpb24gbWVjaGFuaXNtCistICAgICBvZiB0aGUgaW5uZXIgbG9vcC4gICovCistICBjbnQgPSBfX2FyZ3pfY291bnQgKGRpcmxpc3QsIGRpcmxpc3RfbGVuKSA9PSAxID8gbWFzayAtIDEgOiBtYXNrOworLSAgZm9yICg7IGNudCA+PSAwOyAtLWNudCkKKysgIC8qIFJlY3Vyc2UgdG8gZmlsbCB0aGUgaW5oZXJpdGFuY2UgbGlzdCBvZiBSRVRWQUwuCisrICAgICBJZiB0aGUgRElSTElTVCBpcyBhIHJlYWwgbGlzdCAoaS5lLiBESVJMSVNUX0NPVU5UID4gMSksIHRoZSBSRVRWQUwKKysgICAgIGVudHJ5IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSByZWFsIGZpbGU7IHJldHZhbC0+ZmlsZW5hbWUgY29udGFpbnMKKysgICAgIGNvbG9ucy4gIEluIHRoaXMgY2FzZSB3ZSBsb29wIGFjcm9zcyBhbGwgZWxlbWVudHMgb2YgRElSTElTVCBhbmQKKysgICAgIGFjcm9zcyBhbGwgYml0IHBhdHRlcm5zIGRvbWluYXRlZCBieSBNQVNLLgorKyAgICAgSWYgdGhlIERJUkxJU1QgaXMgYSBzaW5nbGUgZGlyZWN0b3J5IG9yIGVudGlyZWx5IHJlZHVuZGFudCAoaS5lLgorKyAgICAgRElSTElTVF9DT1VOVCA9PSAxKSwgd2UgbG9vcCBhY3Jvc3MgYWxsIGJpdCBwYXR0ZXJucyBkb21pbmF0ZWQgYnkKKysgICAgIE1BU0ssIGV4Y2x1ZGluZyBNQVNLIGl0c2VsZi4KKysgICAgIEluIGVpdGhlciBjYXNlLCB3ZSBsb29wIGRvd24gZnJvbSBNQVNLIHRvIDAuICBUaGlzIGhhcyB0aGUgZWZmZWN0CisrICAgICB0aGF0IHRoZSBleHRyYSBiaXRzIGluIHRoZSBsb2NhbGUgbmFtZSBhcmUgZHJvcHBlZCBpbiB0aGlzIG9yZGVyOgorKyAgICAgZmlyc3QgdGhlIG1vZGlmaWVyLCB0aGVuIHRoZSB0ZXJyaXRvcnksIHRoZW4gdGhlIGNvZGVzZXQsIHRoZW4gdGhlCisrICAgICBub3JtYWxpemVkX2NvZGVzZXQuICAqLworKyAgZm9yIChjbnQgPSBkaXJsaXN0X2NvdW50ID4gMSA/IG1hc2sgOiBtYXNrIC0gMTsgY250ID49IDA7IC0tY250KQorICAgICBpZiAoKGNudCAmIH5tYXNrKSA9PSAwCisgCSYmICgoY250ICYgQ0VOX1NQRUNJRklDKSA9PSAwIHx8IChjbnQgJiBYUEdfU1BFQ0lGSUMpID09IDApCisgCSYmICgoY250ICYgWFBHX0NPREVTRVQpID09IDAgfHwgKGNudCAmIFhQR19OT1JNX0NPREVTRVQpID09IDApKQorICAgICAgIHsKKy0JLyogSXRlcmF0ZSBvdmVyIGFsbCBlbGVtZW50cyBvZiB0aGUgRElSTElTVC4gICovCistCWNoYXIgKmRpciA9IE5VTEw7CisrCWlmIChkaXJsaXN0X2NvdW50ID4gMSkKKysJICB7CisrCSAgICAvKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIHRoZSBESVJMSVNULiAgKi8KKysJICAgIGNoYXIgKmRpciA9IE5VTEw7CisgCistCXdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorLQkgICAgICAgIT0gTlVMTCkKKysJICAgIHdoaWxlICgoZGlyID0gX19hcmd6X25leHQgKChjaGFyICopIGRpcmxpc3QsIGRpcmxpc3RfbGVuLCBkaXIpKQorKwkJICAgIT0gTlVMTCkKKysJICAgICAgcmV0dmFsLT5zdWNjZXNzb3JbZW50cmllcysrXQorKwkJPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpciwgc3RybGVuIChkaXIpICsgMSwKKysJCQkJICAgICAgY250LCBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkJCQkgICAgICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorKwkJCQkgICAgICBzcG9uc29yLCByZXZpc2lvbiwgZmlsZW5hbWUsIDEpOworKwkgIH0KKysJZWxzZQorIAkgIHJldHZhbC0+c3VjY2Vzc29yW2VudHJpZXMrK10KKy0JICAgID0gX25sX21ha2VfbDEwbmZsaXN0IChsMTBuZmlsZV9saXN0LCBkaXIsIHN0cmxlbiAoZGlyKSArIDEsIGNudCwKKy0JCQkJICBsYW5ndWFnZSwgdGVycml0b3J5LCBjb2Rlc2V0LAorKwkgICAgPSBfbmxfbWFrZV9sMTBuZmxpc3QgKGwxMG5maWxlX2xpc3QsIGRpcmxpc3QsIGRpcmxpc3RfbGVuLAorKwkJCQkgIGNudCwgbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY29kZXNldCwKKyAJCQkJICBub3JtYWxpemVkX2NvZGVzZXQsIG1vZGlmaWVyLCBzcGVjaWFsLAorIAkJCQkgIHNwb25zb3IsIHJldmlzaW9uLCBmaWxlbmFtZSwgMSk7CisgICAgICAgfQorQEAgLTM0NywxMSArMzYyLDEwIEBACisgDAorIC8qIE5vcm1hbGl6ZSBjb2Rlc2V0IG5hbWUuICBUaGVyZSBpcyBubyBzdGFuZGFyZCBmb3IgdGhlIGNvZGVzZXQKKyAgICBuYW1lcy4gIE5vcm1hbGl6YXRpb24gYWxsb3dzIHRoZSB1c2VyIHRvIHVzZSBhbnkgb2YgdGhlIGNvbW1vbgorLSAgIG5hbWVzLiAgKi8KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKyBjb25zdCBjaGFyICoKKy1fbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvZGVzZXQsIG5hbWVfbGVuKQorLSAgICAgY29uc3QgY2hhciAqY29kZXNldDsKKy0gICAgIHNpemVfdCBuYW1lX2xlbjsKKytfbmxfbm9ybWFsaXplX2NvZGVzZXQgKGNvbnN0IGNoYXIgKmNvZGVzZXQsIHNpemVfdCBuYW1lX2xlbikKKyB7CisgICBpbnQgbGVuID0gMDsKKyAgIGludCBvbmx5X2RpZ2l0ID0gMTsKK0BAIC0zNjAsMTEgKzM3NCwxMSBAQAorICAgc2l6ZV90IGNudDsKKyAKKyAgIGZvciAoY250ID0gMDsgY250IDwgbmFtZV9sZW47ICsrY250KQorLSAgICBpZiAoaXNhbG51bSAoY29kZXNldFtjbnRdKSkKKysgICAgaWYgKGlzYWxudW0gKCh1bnNpZ25lZCBjaGFyKSBjb2Rlc2V0W2NudF0pKQorICAgICAgIHsKKyAJKytsZW47CisgCistCWlmIChpc2FscGhhIChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgb25seV9kaWdpdCA9IDA7CisgICAgICAgfQorIAorQEAgLTM3OCw5ICszOTIsOSBAQAorIAl3cCA9IHJldHZhbDsKKyAKKyAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IG5hbWVfbGVuOyArK2NudCkKKy0JaWYgKGlzYWxwaGEgKGNvZGVzZXRbY250XSkpCistCSAgKndwKysgPSB0b2xvd2VyIChjb2Rlc2V0W2NudF0pOworLQllbHNlIGlmIChpc2RpZ2l0IChjb2Rlc2V0W2NudF0pKQorKwlpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisrCSAgKndwKysgPSB0b2xvd2VyICgodW5zaWduZWQgY2hhcikgY29kZXNldFtjbnRdKTsKKysJZWxzZSBpZiAoaXNkaWdpdCAoKHVuc2lnbmVkIGNoYXIpIGNvZGVzZXRbY250XSkpCisgCSAgKndwKysgPSBjb2Rlc2V0W2NudF07CisgCisgICAgICAgKndwID0gJ1wwJzsKK0BAIC0zOTgsOSArNDEyLDcgQEAKKyAgICB0byBiZSBkZWZpbmVkLiAgKi8KKyAjaWYgIV9MSUJDICYmICFIQVZFX1NUUENQWQorIHN0YXRpYyBjaGFyICoKKy1zdHBjcHkgKGRlc3QsIHNyYykKKy0gICAgIGNoYXIgKmRlc3Q7CistICAgICBjb25zdCBjaGFyICpzcmM7Cisrc3RwY3B5IChjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMpCisgeworICAgd2hpbGUgKCgqZGVzdCsrID0gKnNyYysrKSAhPSAnXDAnKQorICAgICAvKiBEbyBub3RoaW5nLiAqLyA7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGliZ2V0dGV4dC5oCTE5OTgtMDQtMjYgMDk6MjI6MzYuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xpYmdldHRleHQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorQEAgLTEsMTgyICswLDAgQEAKKy0vKiBNZXNzYWdlIGNhdGFsb2dzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKy0gICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKy0KKy0vKiBCZWNhdXNlIG9uIHNvbWUgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKSB3ZSBzb21ldGltZXMgaGF2ZSB0byBpbmNsdWRlCistICAgdGhlIHN5c3RlbXMgbGliaW50bC5oIGFzIHdlbGwgYXMgdGhpcyBmaWxlIHdlIGhhdmUgbW9yZSBjb21wbGV4CistICAgaW5jbHVkZSBwcm90ZWN0aW9uIGFib3ZlLiAgQnV0IHRoZSBzeXN0ZW1zIGhlYWRlciBtaWdodCBwZXJoYXBzIGFsc28KKy0gICBkZWZpbmUgX0xJQklOVExfSCBhbmQgdGhlcmVmb3JlIHdlIGhhdmUgdG8gcHJvdGVjdCB0aGUgZGVmaW5pdGlvbiBoZXJlLiAgKi8KKy0KKy0jaWYgIWRlZmluZWQgKF9MSUJJTlRMX0gpIHx8ICFkZWZpbmVkIChfTElCR0VUVEVYVF9IKQorLSNpZiAhZGVmaW5lZCAoX0xJQklOVExfSCkKKy0jIGRlZmluZSBfTElCSU5UTF9ICTEKKy0jZW5kaWYKKy0jZGVmaW5lIF9MSUJHRVRURVhUX0gJMQorLQorLS8qIFdlIGRlZmluZSBhbiBhZGRpdGlvbmFsIHN5bWJvbCB0byBzaWduYWwgdGhhdCB3ZSB1c2UgdGhlIEdOVQorLSAgIGltcGxlbWVudGF0aW9uIG9mIGdldHRleHQuICAqLworLSNkZWZpbmUgX19VU0VfR05VX0dFVFRFWFQgMQorLQorLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0KKy0jaWYgSEFWRV9MT0NBTEVfSAorLSMgaW5jbHVkZSA8bG9jYWxlLmg+CistI2VuZGlmCistCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7CistI2VuZGlmCistCistLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworLQorLSNpZm5kZWYgUEFSQU1TCistIyBpZiBfX1NURENfXworLSMgIGRlZmluZSBQQVJBTVMoYXJncykgYXJncworLSMgZWxzZQorLSMgIGRlZmluZSBQQVJBTVMoYXJncykgKCkKKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmbmRlZiBOVUxMCistIyBpZiAhZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9fR05VQ19fCistIyAgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCistIyBlbHNlCistIyAgZGVmaW5lIE5VTEwgKDApCistIyBlbmRpZgorLSNlbmRpZgorLQorLSNpZiAhSEFWRV9MQ19NRVNTQUdFUworLS8qIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBnZXR0ZXh0KCkgYW5kIGRnZXR0ZXh0KCkKKy0gICBmdW5jdGlvbi4gIEJ1dCBzb21lIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoaXMgZGVmaW5lZC4gIERlZmluZSBpdAorLSAgIHRvIGEgZGVmYXVsdCB2YWx1ZS4gICovCistIyBkZWZpbmUgTENfTUVTU0FHRVMgKC0xKQorLSNlbmRpZgorLQorLQorLS8qIERlY2xhcmF0aW9ucyBmb3IgZ2V0dGV4dC11c2luZy1jYXRnZXRzIGludGVyZmFjZS4gIERlcml2ZWQgZnJvbQorLSAgIEppbSBNZXllcmluZydzIGxpYmludGwuaC4gICovCistc3RydWN0IF9tc2dfZW50CisteworLSAgY29uc3QgY2hhciAqX21zZzsKKy0gIGludCBfbXNnX251bWJlcjsKKy19OworLQorLQorLSNpZiBIQVZFX0NBVEdFVFMKKy0vKiBUaGVzZSB0d28gdmFyaWFibGVzIGFyZSBkZWZpbmVkIGluIHRoZSBhdXRvbWF0aWNhbGx5IGJ5IHBvLXRvLXRibC5zZWQKKy0gICBnZW5lcmF0ZWQgZmlsZSBgY2F0LWlkLXRibC5jJy4gICovCistZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXNnX2VudCBfbXNnX3RibFtdOworLWV4dGVybiBpbnQgX21zZ190YmxfbGVuZ3RoOworLSNlbmRpZgorLQorLQorLS8qIEZvciBhdXRvbWF0aWNhbCBleHRyYWN0aW9uIG9mIG1lc3NhZ2VzIHNvbWV0aW1lcyBubyByZWFsCistICAgdHJhbnNsYXRpb24gaXMgbmVlZGVkLiAgSW5zdGVhZCB0aGUgc3RyaW5nIGl0c2VsZiBpcyB0aGUgcmVzdWx0LiAgKi8KKy0jZGVmaW5lIGdldHRleHRfbm9vcChTdHIpIChTdHIpCistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKy0gICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorLSAgIHRleHQpLiAgKi8KKy1leHRlcm4gY2hhciAqZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmdldHRleHRfXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX21zZ2lkKSk7CistCistLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgRE9NQUlOTkFNRSBtZXNzYWdlIGNhdGFsb2cgZm9yIHRoZSBjdXJyZW50CistICAgTENfTUVTU0FHRVMgbG9jYWxlLiAgKi8KKy1leHRlcm4gY2hhciAqZGdldHRleHQgUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKSk7CistZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0X18gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorLQkJCQkgY29uc3QgY2hhciAqX19tc2dpZCkpOworLQorLS8qIExvb2sgdXAgTVNHSUQgaW4gdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudCBDQVRFR09SWQorLSAgIGxvY2FsZS4gICovCistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCistCQkJCWludCBfX2NhdGVnb3J5KSk7CistZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dF9fIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX21zZ2lkLCBpbnQgX19jYXRlZ29yeSkpOworLQorLQorLS8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorLSAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCistICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCistZXh0ZXJuIGNoYXIgKnRleHRkb21haW4gUEFSQU1TICgoY29uc3QgY2hhciAqX19kb21haW5uYW1lKSk7CistZXh0ZXJuIGNoYXIgKnRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpKTsKKy0KKy0vKiBTcGVjaWZ5IHRoYXQgdGhlIERPTUFJTk5BTUUgbWVzc2FnZSBjYXRhbG9nIHdpbGwgYmUgZm91bmQKKy0gICBpbiBESVJOQU1FIHJhdGhlciB0aGFuIGluIHRoZSBzeXN0ZW0gbG9jYWxlIGRhdGEgYmFzZS4gICovCistZXh0ZXJuIGNoYXIgKmJpbmR0ZXh0ZG9tYWluIFBBUkFNUyAoKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKy0JCQkJICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy1leHRlcm4gY2hhciAqYmluZHRleHRkb21haW5fXyBQQVJBTVMgKChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCistCQkJCSAgICBjb25zdCBjaGFyICpfX2Rpcm5hbWUpKTsKKy0KKy0jaWYgRU5BQkxFX05MUworLQorLS8qIFNvbGFyaXMgMi4zIGhhcyB0aGUgZ2V0dGV4dCBmdW5jdGlvbiBidXQgZGNnZXR0ZXh0IGlzIG1pc3NpbmcuCistICAgU28gd2Ugb21pdCB0aGlzIG9wdGltaXphdGlvbiBmb3IgU29sYXJpcyAyLjMuICBCVFcsIFNvbGFyaXMgMi40CistICAgaGFzIGRjZ2V0dGV4dC4gICovCistIyBpZiAhSEFWRV9DQVRHRVRTICYmICghSEFWRV9HRVRURVhUIHx8IEhBVkVfRENHRVRURVhUKQorLQorLSMgIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKQkJCQkJCSAgICAgIFwKKy0gICAgIGRnZXR0ZXh0IChOVUxMLCBNc2dpZCkKKy0KKy0jICBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpCQkJCQkgICAgICBcCistICAgICBkY2dldHRleHQgKERvbWFpbm5hbWUsIE1zZ2lkLCBMQ19NRVNTQUdFUykKKy0KKy0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gNworLS8qIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIGRlZmluZWQgaW4gbG9hZG1zZ2NhdC5jLiAgV2UgbmVlZCBhIHNpZ24sCistICAgd2hldGhlciBhIG5ldyBjYXRhbG9nIHdhcyBsb2FkZWQsIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYWxsCistICAgdHJhbnNsYXRpb25zLiAgKi8KKy1leHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CistCistIyAgIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KQkJCSAgICAgIFwKKy0gIChfX2V4dGVuc2lvbl9fCQkJCQkJCSAgICAgIFwKKy0gICAoewkJCQkJCQkJCSAgICAgIFwKKy0gICAgIGNoYXIgKl9fcmVzdWx0OwkJCQkJCQkgICAgICBcCistICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKE1zZ2lkKSkJCQkJCSAgICAgIFwKKy0gICAgICAgewkJCQkJCQkJICAgICAgXAorLQkgc3RhdGljIGNoYXIgKl9fdHJhbnNsYXRpb25fXzsJCQkJCSAgICAgIFwKKy0JIHN0YXRpYyBpbnQgX19jYXRhbG9nX2NvdW50ZXJfXzsJCQkJICAgICAgXAorLQkgaWYgKCEgX190cmFuc2xhdGlvbl9fIHx8IF9fY2F0YWxvZ19jb3VudGVyX18gIT0gX25sX21zZ19jYXRfY250cikgICAgXAorLQkgICB7CQkJCQkJCQkgICAgICBcCistCSAgICAgX190cmFuc2xhdGlvbl9fID0JCQkJCQkgICAgICBcCistCSAgICAgICBkY2dldHRleHRfXyAoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KTsJCSAgICAgIFwKKy0JICAgICBfX2NhdGFsb2dfY291bnRlcl9fID0gX25sX21zZ19jYXRfY250cjsJCQkgICAgICBcCistCSAgIH0JCQkJCQkJCSAgICAgIFwKKy0JIF9fcmVzdWx0ID0gX190cmFuc2xhdGlvbl9fOwkJCQkJICAgICAgXAorLSAgICAgICB9CQkJCQkJCQkgICAgICBcCistICAgICBlbHNlCQkJCQkJCQkgICAgICBcCistICAgICAgIF9fcmVzdWx0ID0gZGNnZXR0ZXh0X18gKERvbWFpbm5hbWUsIE1zZ2lkLCBDYXRlZ29yeSk7CQkgICAgICBcCistICAgICBfX3Jlc3VsdDsJCQkJCQkJCSAgICAgIFwKKy0gICAgfSkpCistIyAgZW5kaWYKKy0jIGVuZGlmCistCistI2Vsc2UKKy0KKy0jIGRlZmluZSBnZXR0ZXh0KE1zZ2lkKSAoTXNnaWQpCistIyBkZWZpbmUgZGdldHRleHQoRG9tYWlubmFtZSwgTXNnaWQpIChNc2dpZCkKKy0jIGRlZmluZSBkY2dldHRleHQoRG9tYWlubmFtZSwgTXNnaWQsIENhdGVnb3J5KSAoTXNnaWQpCistIyBkZWZpbmUgdGV4dGRvbWFpbihEb21haW5uYW1lKSB3aGlsZSAoMCkgLyogbm90aGluZyAqLworLSMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluKERvbWFpbm5hbWUsIERpcm5hbWUpIHdoaWxlICgwKSAvKiBub3RoaW5nICovCistCistI2VuZGlmCistCistLyogQEAgYmVnaW4gb2YgZXBpbG9nIEBAICovCistCistI2lmZGVmIF9fY3BsdXNwbHVzCistfQorLSNlbmRpZgorLQorLSNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xpYmdudWludGwuaC5pbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saWJnbnVpbnRsLmguaW4JMjAwNC0wOS0xMiAxNDo0MDozNC40NjI3MzE4MjQgLTA0MDAKK0BAIC0wLDAgKzEsMzgzIEBACisrLyogTWVzc2FnZSBjYXRhbG9ncyBmb3IgaW50ZXJuYXRpb25hbGl6YXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfTElCSU5UTF9ICisrI2RlZmluZSBfTElCSU5UTF9ICTEKKysKKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrLyogVGhlIExDX01FU1NBR0VTIGxvY2FsZSBjYXRlZ29yeSBpcyB0aGUgY2F0ZWdvcnkgdXNlZCBieSB0aGUgZnVuY3Rpb25zCisrICAgZ2V0dGV4dCgpIGFuZCBkZ2V0dGV4dCgpLiAgSXQgaXMgc3BlY2lmaWVkIGluIFBPU0lYLCBidXQgbm90IGluIEFOU0kgQy4KKysgICBPbiBzeXN0ZW1zIHRoYXQgZG9uJ3QgZGVmaW5lIGl0LCB1c2UgYW4gYXJiaXRyYXJ5IHZhbHVlIGluc3RlYWQuCisrICAgT24gU29sYXJpcywgPGxvY2FsZS5oPiBkZWZpbmVzIF9fTE9DQUxFX0ggKG9yIF9MT0NBTEVfSCBpbiBTb2xhcmlzIDIuNSkKKysgICB0aGVuIGluY2x1ZGVzIDxsaWJpbnRsLmg+IChpLmUuIHRoaXMgZmlsZSEpIGFuZCB0aGVuIG9ubHkgZGVmaW5lcworKyAgIExDX01FU1NBR0VTLiAgVG8gYXZvaWQgYSByZWRlZmluaXRpb24gd2FybmluZywgZG9uJ3QgZGVmaW5lIExDX01FU1NBR0VTCisrICAgaW4gdGhpcyBjYXNlLiAgKi8KKysjaWYgIWRlZmluZWQgTENfTUVTU0FHRVMgJiYgIShkZWZpbmVkIF9fTE9DQUxFX0ggfHwgKGRlZmluZWQgX0xPQ0FMRV9IICYmIGRlZmluZWQgX19zdW4pKQorKyMgZGVmaW5lIExDX01FU1NBR0VTIDE3MjkKKysjZW5kaWYKKysKKysvKiBXZSBkZWZpbmUgYW4gYWRkaXRpb25hbCBzeW1ib2wgdG8gc2lnbmFsIHRoYXQgd2UgdXNlIHRoZSBHTlUKKysgICBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0ZXh0LiAgKi8KKysjZGVmaW5lIF9fVVNFX0dOVV9HRVRURVhUIDEKKysKKysvKiBQcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdXBwb3J0ZWQgZmlsZSBmb3JtYXRzLiAgUmV0dXJucyB0aGUKKysgICBtYXhpbXVtIG1pbm9yIHJldmlzaW9uIG51bWJlciBzdXBwb3J0ZWQgZm9yIGEgZ2l2ZW4gbWFqb3IgcmV2aXNpb24uICAqLworKyNkZWZpbmUgX19HTlVfR0VUVEVYVF9TVVBQT1JURURfUkVWSVNJT04obWFqb3IpIFwKKysgICgobWFqb3IpID09IDAgPyAxIDogLTEpCisrCisrLyogUmVzb2x2ZSBhIHBsYXRmb3JtIHNwZWNpZmljIGNvbmZsaWN0IG9uIERKR1BQLiAgR05VIGdldHRleHQgdGFrZXMKKysgICBwcmVjZWRlbmNlIG92ZXIgX2NvbmlvX2dldHRleHQuICAqLworKyNpZmRlZiBfX0RKR1BQX18KKysjIHVuZGVmIGdldHRleHQKKysjZW5kaWYKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBXZSByZWRpcmVjdCB0aGUgZnVuY3Rpb25zIHRvIHRob3NlIHByZWZpeGVkIHdpdGggImxpYmludGxfIi4gIFRoaXMgaXMKKysgICBuZWNlc3NhcnksIGJlY2F1c2Ugc29tZSBzeXN0ZW1zIGRlZmluZSBnZXR0ZXh0L3RleHRkb21haW4vLi4uIGluIHRoZSBDCisrICAgbGlicmFyeSAobmFtZWx5LCBTb2xhcmlzIDIuNCBhbmQgbmV3ZXIsIGFuZCBHTlUgbGliYyAyLjAgYW5kIG5ld2VyKS4KKysgICBJZiB3ZSB1c2VkIHRoZSB1bnByZWZpeGVkIG5hbWVzLCB0aGVyZSB3b3VsZCBiZSBjYXNlcyB3aGVyZSB0aGUKKysgICBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiB0aGUgbGliaW50bC5zbworKyAgIHNoYXJlZCBsaWJyYXJ5LiAgUmVjYWxsIHRoYXQgb24gRUxGIHN5c3RlbXMsIHRoZSBzeW1ib2xzIGFyZSBsb29rZWQKKysgICB1cCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorKyAgICAgMS4gaW4gdGhlIGV4ZWN1dGFibGUsCisrICAgICAyLiBpbiB0aGUgc2hhcmVkIGxpYnJhcmllcyBzcGVjaWZpZWQgb24gdGhlIGxpbmsgY29tbWFuZCBsaW5lLCBpbiBvcmRlciwKKysgICAgIDMuIGluIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJpZXMgc3BlY2lmaWVkIG9uIHRoZSBsaW5rCisrICAgICAgICBjb21tYW5kIGxpbmUsCisrICAgICA0LiBpbiB0aGUgZGxvcGVuKCllZCBzaGFyZWQgbGlicmFyaWVzLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCisrICAgICAgICBkbG9wZW4oKWVkLgorKyAgIFRoZSBkZWZpbml0aW9uIGluIHRoZSBDIGxpYnJhcnkgd291bGQgb3ZlcnJpZGUgdGhlIG9uZSBpbiBsaWJpbnRsLnNvIGlmCisrICAgZWl0aGVyCisrICAgICAqIC1sYyBpcyBnaXZlbiBvbiB0aGUgbGluayBjb21tYW5kIGxpbmUgYW5kIC1saW50bCBpc24ndCwgb3IKKysgICAgICogLWxjIGlzIGdpdmVuIG9uIHRoZSBsaW5rIGNvbW1hbmQgbGluZSBiZWZvcmUgLWxpbnRsLCBvcgorKyAgICAgKiBsaWJpbnRsLnNvIGlzIGEgZGVwZW5kZW5jeSBvZiBhIGRsb3BlbigpZWQgc2hhcmVkIGxpYnJhcnkgYnV0IG5vdAorKyAgICAgICBsaW5rZWQgdG8gdGhlIGV4ZWN1dGFibGUgYXQgbGluayB0aW1lLgorKyAgIFNpbmNlIFNvbGFyaXMgZ2V0dGV4dCgpIGJlaGF2ZXMgZGlmZmVyZW50bHkgdGhhbiBHTlUgZ2V0dGV4dCgpLCB0aGlzCisrICAgd291bGQgYmUgdW5hY2NlcHRhYmxlLgorKworKyAgIFRoZSByZWRpcmVjdGlvbiBoYXBwZW5zIGJ5IGRlZmF1bHQgdGhyb3VnaCBtYWNyb3MgaW4gQywgc28gdGhhdCAmZ2V0dGV4dAorKyAgIGlzIGluZGVwZW5kZW50IG9mIHRoZSBjb21waWxhdGlvbiB1bml0LCBidXQgdGhyb3VnaCBpbmxpbmUgZnVuY3Rpb25zIGluCisrICAgQysrLCBpbiBvcmRlciBub3QgdG8gaW50ZXJmZXJlIHdpdGggdGhlIG5hbWUgbWFuZ2xpbmcgb2YgY2xhc3MgZmllbGRzIG9yCisrICAgY2xhc3MgbWV0aG9kcyBjYWxsZWQgJ2dldHRleHQnLiAgKi8KKysKKysvKiBUaGUgdXNlciBjYW4gZGVmaW5lIF9JTlRMX1JFRElSRUNUX0lOTElORSBvciBfSU5UTF9SRURJUkVDVF9NQUNST1MuCisrICAgSWYgaGUgZG9lc24ndCwgd2UgY2hvb3NlIHRoZSBtZXRob2QuICBBIHRoaXJkIHBvc3NpYmxlIG1ldGhvZCBpcworKyAgIF9JTlRMX1JFRElSRUNUX0FTTSwgc3VwcG9ydGVkIG9ubHkgYnkgR0NDLiAgKi8KKysjaWYgIShkZWZpbmVkIF9JTlRMX1JFRElSRUNUX0lOTElORSB8fCBkZWZpbmVkIF9JTlRMX1JFRElSRUNUX01BQ1JPUykKKysjIGlmIF9fR05VQ19fID49IDIgJiYgIWRlZmluZWQgX19BUFBMRV9DQ19fICYmICFkZWZpbmVkIF9fTUlOR1czMl9fICYmICEoX19HTlVDX18gPT0gMiAmJiBkZWZpbmVkIF9BSVgpICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIF9JTlRMX1JFRElSRUNUX0FTTQorKyMgZWxzZQorKyMgIGlmZGVmIF9fY3BsdXNwbHVzCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKysjICBlbHNlCisrIyAgIGRlZmluZSBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysvKiBBdXhpbGlhcnkgbWFjcm9zLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfQVNNCisrIyBkZWZpbmUgX0lOVExfQVNNKGNuYW1lKSBfX2FzbV9fIChfSU5UTF9BU01OQU1FIChfX1VTRVJfTEFCRUxfUFJFRklYX18sICNjbmFtZSkpCisrIyBkZWZpbmUgX0lOVExfQVNNTkFNRShwcmVmaXgsY25hbWVzdHJpbmcpIF9JTlRMX1NUUklOR0lGWSAocHJlZml4KSBjbmFtZXN0cmluZworKyMgZGVmaW5lIF9JTlRMX1NUUklOR0lGWShwcmVmaXgpICNwcmVmaXgKKysjZWxzZQorKyMgZGVmaW5lIF9JTlRMX0FTTShjbmFtZSkKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBjdXJyZW50IGRlZmF1bHQgbWVzc2FnZSBjYXRhbG9nIGZvciB0aGUgY3VycmVudAorKyAgIExDX01FU1NBR0VTIGxvY2FsZS4gIElmIG5vdCBmb3VuZCwgcmV0dXJucyBNU0dJRCBpdHNlbGYgKHRoZSBkZWZhdWx0CisrICAgdGV4dCkuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZ2V0dGV4dCAoX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGdldHRleHQgbGliaW50bF9nZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCisreworKyAgcmV0dXJuIGxpYmludGxfZGdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZCk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRnZXR0ZXh0IGxpYmludGxfZGdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqZGdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBMb29rIHVwIE1TR0lEIGluIHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQgQ0FURUdPUlkKKysgICBsb2NhbGUuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY2dldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZCwKKysJCQkJaW50IF9fY2F0ZWdvcnkpOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZGNnZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQsCisrCQkJICAgICAgIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkLCBfX2NhdGVnb3J5KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgZGNnZXR0ZXh0IGxpYmludGxfZGNnZXR0ZXh0CisrI2VuZGlmCisrZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFyICpfX21zZ2lkLAorKwkJCWludCBfX2NhdGVnb3J5KQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZGNnZXR0ZXh0KTsKKysjZW5kaWYKKysKKysKKysvKiBTaW1pbGFyIHRvIGBnZXR0ZXh0JyBidXQgc2VsZWN0IHRoZSBwbHVyYWwgZm9ybSBjb3JyZXNwb25kaW5nIHRvIHRoZQorKyAgIG51bWJlciBOLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKm5nZXR0ZXh0IChjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX25nZXR0ZXh0IChfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIG5nZXR0ZXh0IGxpYmludGxfbmdldHRleHQKKysjZW5kaWYKKytleHRlcm4gY2hhciAqbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9uZ2V0dGV4dCk7CisrI2VuZGlmCisrCisrLyogU2ltaWxhciB0byBgZGdldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCisrCQkJCWNvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24pOworK3N0YXRpYyBpbmxpbmUgY2hhciAqZG5nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAorKwkJCSAgICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RuZ2V0dGV4dCAoX19kb21haW5uYW1lLCBfX21zZ2lkMSwgX19tc2dpZDIsIF9fbik7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGRuZ2V0dGV4dCBsaWJpbnRsX2RuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQljb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJdW5zaWduZWQgbG9uZyBpbnQgX19uKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfZG5nZXR0ZXh0KTsKKysjZW5kaWYKKysKKysvKiBTaW1pbGFyIHRvIGBkY2dldHRleHQnIGJ1dCBzZWxlY3QgdGhlIHBsdXJhbCBmb3JtIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisrICAgbnVtYmVyIE4uICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9kY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJCSBjb25zdCBjaGFyICpfX21zZ2lkMSwgY29uc3QgY2hhciAqX19tc2dpZDIsCisrCQkJCSB1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KTsKKytzdGF0aWMgaW5saW5lIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJY29uc3QgY2hhciAqX19tc2dpZDEsIGNvbnN0IGNoYXIgKl9fbXNnaWQyLAorKwkJCQl1bnNpZ25lZCBsb25nIGludCBfX24sIGludCBfX2NhdGVnb3J5KQorK3sKKysgIHJldHVybiBsaWJpbnRsX2RjbmdldHRleHQgKF9fZG9tYWlubmFtZSwgX19tc2dpZDEsIF9fbXNnaWQyLCBfX24sIF9fY2F0ZWdvcnkpOworK30KKysjZWxzZQorKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9NQUNST1MKKysjIGRlZmluZSBkY25nZXR0ZXh0IGxpYmludGxfZGNuZ2V0dGV4dAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpkY25nZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCisrCQkJIGNvbnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKKysJCQkgdW5zaWduZWQgbG9uZyBpbnQgX19uLCBpbnQgX19jYXRlZ29yeSkKKysgICAgICAgX0lOVExfQVNNIChsaWJpbnRsX2RjbmdldHRleHQpOworKyNlbmRpZgorKworKworKy8qIFNldCB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyB0byBET01BSU5OQU1FLgorKyAgIElmIERPTUFJTk5BTUUgaXMgbnVsbCwgcmV0dXJuIHRoZSBjdXJyZW50IGRlZmF1bHQuCisrICAgSWYgRE9NQUlOTkFNRSBpcyAiIiwgcmVzZXQgdG8gdGhlIGRlZmF1bHQgb2YgIm1lc3NhZ2VzIi4gICovCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX0lOTElORQorK2V4dGVybiBjaGFyICpsaWJpbnRsX3RleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpCisreworKyAgcmV0dXJuIGxpYmludGxfdGV4dGRvbWFpbiAoX19kb21haW5uYW1lKTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgdGV4dGRvbWFpbiBsaWJpbnRsX3RleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfdGV4dGRvbWFpbik7CisrI2VuZGlmCisrCisrLyogU3BlY2lmeSB0aGF0IHRoZSBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIGZvdW5kCisrICAgaW4gRElSTkFNRSByYXRoZXIgdGhhbiBpbiB0aGUgc3lzdGVtIGxvY2FsZSBkYXRhIGJhc2UuICAqLworKyNpZmRlZiBfSU5UTF9SRURJUkVDVF9JTkxJTkUKKytleHRlcm4gY2hhciAqbGliaW50bF9iaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgIGNvbnN0IGNoYXIgKl9fZGlybmFtZSk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kdGV4dGRvbWFpbiAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKQorK3sKKysgIHJldHVybiBsaWJpbnRsX2JpbmR0ZXh0ZG9tYWluIChfX2RvbWFpbm5hbWUsIF9fZGlybmFtZSk7CisrfQorKyNlbHNlCisrI2lmZGVmIF9JTlRMX1JFRElSRUNUX01BQ1JPUworKyMgZGVmaW5lIGJpbmR0ZXh0ZG9tYWluIGxpYmludGxfYmluZHRleHRkb21haW4KKysjZW5kaWYKKytleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4gKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19kaXJuYW1lKQorKyAgICAgICBfSU5UTF9BU00gKGxpYmludGxfYmluZHRleHRkb21haW4pOworKyNlbmRpZgorKworKy8qIFNwZWNpZnkgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBpbiB3aGljaCB0aGUgbWVzc2FnZXMgZnJvbSB0aGUKKysgICBET01BSU5OQU1FIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIGJlIHJldHVybmVkLiAgKi8KKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfSU5MSU5FCisrZXh0ZXJuIGNoYXIgKmxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKGNvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKKysJCQkJCSAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCk7Cisrc3RhdGljIGlubGluZSBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkJICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisreworKyAgcmV0dXJuIGxpYmludGxfYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fZG9tYWlubmFtZSwgX19jb2Rlc2V0KTsKKyt9CisrI2Vsc2UKKysjaWZkZWYgX0lOVExfUkVESVJFQ1RfTUFDUk9TCisrIyBkZWZpbmUgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgbGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldAorKyNlbmRpZgorK2V4dGVybiBjaGFyICpiaW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAorKwkJCQkgICAgICBjb25zdCBjaGFyICpfX2NvZGVzZXQpCisrICAgICAgIF9JTlRMX0FTTSAobGliaW50bF9iaW5kX3RleHRkb21haW5fY29kZXNldCk7CisrI2VuZGlmCisrCisrCisrLyogU3VwcG9ydCBmb3IgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMgaW4gKnByaW50ZigpLCBmb2xsb3dpbmcgdGhlCisrICAgUE9TSVgvWFNJIHNwZWNpZmljYXRpb24uCisrICAgTm90ZTogVGhlc2UgcmVwbGFjZW1lbnRzIGZvciB0aGUgKnByaW50ZigpIGZ1bmN0aW9ucyBhcmUgdmlzaWJsZSBvbmx5CisrICAgaW4gc291cmNlIGZpbGVzIHRoYXQgI2luY2x1ZGUgPGxpYmludGwuaD4gb3IgI2luY2x1ZGUgImdldHRleHQuaCIuCisrICAgUGFja2FnZXMgdGhhdCB1c2UgKnByaW50ZigpIGluIHNvdXJjZSBmaWxlcyB0aGF0IGRvbid0IHJlZmVyIHRvIF8oKQorKyAgIG9yIGdldHRleHQoKSBidXQgZm9yIHdoaWNoIHRoZSBmb3JtYXQgc3RyaW5nIGNvdWxkIGJlIHRoZSByZXR1cm4gdmFsdWUKKysgICBvZiBfKCkgb3IgZ2V0dGV4dCgpIG5lZWQgdG8gYWRkIHRoaXMgI2luY2x1ZGUuICBPaCB3ZWxsLiAgKi8KKysKKysjaWYgIUBIQVZFX1BPU0lYX1BSSU5URkAKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIKKysjIGluY2x1ZGUgPHN0ZGFyZy5oPgorKyNlbHNlCisrIyBpbmNsdWRlIDx2YXJhcmdzLmg+CisrI2VuZGlmCisrCisrI3VuZGVmIGZwcmludGYKKysjZGVmaW5lIGZwcmludGYgbGliaW50bF9mcHJpbnRmCisrZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdmZwcmludGYKKysjZGVmaW5lIHZmcHJpbnRmIGxpYmludGxfdmZwcmludGYKKytleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHByaW50ZgorKyNkZWZpbmUgcHJpbnRmIGxpYmludGxfcHJpbnRmCisrZXh0ZXJuIGludCBwcmludGYgKGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnByaW50ZgorKyNkZWZpbmUgdnByaW50ZiBsaWJpbnRsX3ZwcmludGYKKytleHRlcm4gaW50IHZwcmludGYgKGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI3VuZGVmIHNwcmludGYKKysjZGVmaW5lIHNwcmludGYgbGliaW50bF9zcHJpbnRmCisrZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKysjdW5kZWYgdnNwcmludGYKKysjZGVmaW5lIHZzcHJpbnRmIGxpYmludGxfdnNwcmludGYKKytleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2lmIEBIQVZFX1NOUFJJTlRGQAorKworKyN1bmRlZiBzbnByaW50ZgorKyNkZWZpbmUgc25wcmludGYgbGliaW50bF9zbnByaW50ZgorK2V4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZzbnByaW50ZgorKyNkZWZpbmUgdnNucHJpbnRmIGxpYmludGxfdnNucHJpbnRmCisrZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNpZiBASEFWRV9BU1BSSU5URkAKKysKKysjdW5kZWYgYXNwcmludGYKKysjZGVmaW5lIGFzcHJpbnRmIGxpYmludGxfYXNwcmludGYKKytleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqLCBjb25zdCBjaGFyICosIC4uLik7CisrI3VuZGVmIHZhc3ByaW50ZgorKyNkZWZpbmUgdmFzcHJpbnRmIGxpYmludGxfdmFzcHJpbnRmCisrZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CisrCisrI2VuZGlmCisrCisrI2lmIEBIQVZFX1dQUklOVEZACisrCisrI3VuZGVmIGZ3cHJpbnRmCisrI2RlZmluZSBmd3ByaW50ZiBsaWJpbnRsX2Z3cHJpbnRmCisrZXh0ZXJuIGludCBmd3ByaW50ZiAoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZmd3ByaW50ZgorKyNkZWZpbmUgdmZ3cHJpbnRmIGxpYmludGxfdmZ3cHJpbnRmCisrZXh0ZXJuIGludCB2ZndwcmludGYgKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKKysKKysjdW5kZWYgd3ByaW50ZgorKyNkZWZpbmUgd3ByaW50ZiBsaWJpbnRsX3dwcmludGYKKytleHRlcm4gaW50IHdwcmludGYgKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKysjdW5kZWYgdndwcmludGYKKysjZGVmaW5lIHZ3cHJpbnRmIGxpYmludGxfdndwcmludGYKKytleHRlcm4gaW50IHZ3cHJpbnRmIChjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyN1bmRlZiBzd3ByaW50ZgorKyNkZWZpbmUgc3dwcmludGYgbGliaW50bF9zd3ByaW50ZgorK2V4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CisrI3VuZGVmIHZzd3ByaW50ZgorKyNkZWZpbmUgdnN3cHJpbnRmIGxpYmludGxfdnN3cHJpbnRmCisrZXh0ZXJuIGludCB2c3dwcmludGYgKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworKworKyNlbmRpZgorKworKyNlbmRpZgorKworKworKy8qIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIHBhY2thZ2VzLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrI2RlZmluZSBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeAorK2V4dGVybiB2b2lkCisrICAgICAgIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4IChjb25zdCBjaGFyICpvcmlnX3ByZWZpeCwKKysJCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysjZW5kaWYgLyogbGliaW50bC5oICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbGludXgtbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9saW51eC1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDAgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gTGludXggc3R5bGUgLm1zZyBmaWxlCistIyBDb3B5cmlnaHQgKEMpIDE5OTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCistIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLSMKKy0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKy0jCistIworLSMgVGhlIGZpcnN0IGRpcmVjdGl2ZSBpbiB0aGUgLm1zZyBzaG91bGQgYmUgdGhlIGRlZmluaXRpb24gb2YgdGhlCistIyBtZXNzYWdlIHNldCBudW1iZXIuICBXZSB1c2UgYWx3YXlzIHNldCBudW1iZXIgMS4KKy0jCistMSB7CistICBpXAorLSRzZXQgMSAjIEF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSBwbzJtc2cuc2VkCistICBoCistICBzLy4qLzAvCistICB4CistfQorLSMKKy0jIE1pdGNoJ3Mgb2xkIGNhdGFsb2cgZm9ybWF0IGRvZXMgbm90IGFsbG93IGNvbW1lbnRzLgorLSMKKy0jIFdlIGNvcHkgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgYXMgYSBjb21tZW50IGludG8gdGhlIC5tc2cgZmlsZS4KKy0jCistL15tc2dpZC8geworLSAgcy9tc2dpZFsgCV0qIi8vCistIworLSMgVGhpcyBkb2VzIG5vdCB3b3JrIG5vdyB3aXRoIHRoZSBuZXcgZm9ybWF0LgorLSMgLyIkLyEgeworLSMgICBzL1xcJC8vCistIyAgIHMvJC8gLi4uIChtb3JlIGxpbmVzIGZvbGxvd2luZykiLworLSMgfQorLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSAgRworLSAgcy9cKC4qXCkiXG5cKFswLTldKlwpLyQgI1wyIE9yaWdpbmFsIE1lc3NhZ2U6KFwxKS9wCistfQorLSMKKy0jIFRoZSAubXNnIGZpbGUgY29udGFpbnMsIG90aGVyIHRoZW4gdGhlIC5wbyBmaWxlLCBvbmx5IHRoZSB0cmFuc2xhdGlvbnMKKy0jIGJ1dCBlYWNoIGdpdmVuIGEgdW5pcXVlIElELiAgU3RhcnRpbmcgZnJvbSAxIGFuZCBpbmNyZW1lbnRpbmcgYnkgMSBmb3IKKy0jIGVhY2ggbWVzc2FnZSB3ZSBhc3NpZ24gdGhlbSB0byB0aGUgbWVzc2FnZXMuCistIyBJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgLnBvIGZpbGUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgY2F0LWlkLXRibC5jIGZpbGUKKy0jICh3aXRoIHBvLXRvLXRibCkgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSB1c2VkIGhlcmUuICAoQXQgbGVhc3QgdGhlIG9yZGVyCistIyBvZiBkZWNsYXJhdGlvbnMgbXVzdCBub3QgYmUgY2hhbmdlZC4pCistIworLS9ebXNnc3RyLyB7CistICBzL21zZ3N0clsgCV0qIlwoLipcKSIvIyBcMS8KKy0jIENsZWFyIHN1YnN0aXR1dGlvbiBmbGFnLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBjb250aW51YXRpb24gbGluZS4KKy0gIHMvXCguKlxuXCkiXCguKlwpIi9cMVwyLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistICBQCistICBECistIyBOb3RlIHRoYXQgRCBpbmNsdWRlcyBhIGp1bXAgdG8gdGhlIHN0YXJ0ISEKKy0jIFdlIGZvdW5kIGEgY29udGludWF0aW9uIGxpbmUuICBCdXQgYmVmb3JlIHByaW50aW5nIGluc2VydCAnXCcuCistICA6YQorLSAgcy9cKC4qXClcKFxuLipcKS9cMVxcXDIvCistICBQCistIyBXZSBjYW5ub3QgdXNlIEQgaGVyZS4KKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2FkaW5mby5oCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvYWRpbmZvLmgJMjAwNC0wOS0xMiAxNDo0MDozNC40Njg3MzA5MTIgLTA0MDAKK0BAIC0xLDkgKzEsNTQgQEAKKy0jaWZuZGVmIFBBUkFNUworLSMgaWYgX19TVERDX18KKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpIGFyZ3MKKy0jIGVsc2UKKy0jICBkZWZpbmUgUEFSQU1TKGFyZ3MpICgpCistIyBlbmRpZgorKy8qIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgQ29udHJpYnV0ZWQgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTYuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQURJTkZPX0gKKysjZGVmaW5lIF9MT0FESU5GT19ICTEKKysKKysvKiBEZWNsYXJhdGlvbnMgb2YgbG9jYWxlIGRlcGVuZGVudCBjYXRhbG9nIGxvb2t1cCBmdW5jdGlvbnMuCisrICAgSW1wbGVtZW50ZWQgaW4KKysKKysgICAgIGxvY2FsZWFsaWFzLmMgICAgUG9zc2libHkgcmVwbGFjZSBhIGxvY2FsZSBuYW1lIGJ5IGFub3RoZXIuCisrICAgICBleHBsb2RlbmFtZS5jICAgIFNwbGl0IGEgbG9jYWxlIG5hbWUgaW50byBpdHMgdmFyaW91cyBmaWVsZHMuCisrICAgICBsMTBuZmxpc3QuYyAgICAgIEdlbmVyYXRlIGEgbGlzdCBvZiBmaWxlbmFtZXMgb2YgcG9zc2libGUgbWVzc2FnZSBjYXRhbG9ncy4KKysgICAgIGZpbmRkb21haW4uYyAgICAgRmluZCBhbmQgb3BlbiB0aGUgcmVsZXZhbnQgbWVzc2FnZSBjYXRhbG9ncy4KKysKKysgICBUaGUgbWFpbiBmdW5jdGlvbiBfbmxfZmluZF9kb21haW4oKSBpbiBmaW5kZG9tYWluLmMgaXMgZGVjbGFyZWQKKysgICBpbiBnZXR0ZXh0UC5oLgorKyAqLworKworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKy8qIFRlbGwgdGhlIGNvbXBpbGVyIHdoZW4gYSBjb25kaXRpb25hbCBvciBpbnRlZ2VyIGV4cHJlc3Npb24gaXMKKysgICBhbG1vc3QgYWx3YXlzIHRydWUgb3IgYWxtb3N0IGFsd2F5cyBmYWxzZS4gICovCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fRVhQRUNUCisrIyBkZWZpbmUgX19idWlsdGluX2V4cGVjdChleHByLCB2YWwpIChleHByKQorKyNlbmRpZgorKworKy8qIFNlcGFyYXRvciBpbiBQQVRIIGxpa2UgbGlzdHMgb2YgcGF0aG5hbWVzLiAgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzsnCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyAjZW5kaWYKKyAKKyAvKiBFbmNvZGluZyBvZiBsb2NhbGUgbmFtZSBwYXJ0cy4gICovCitAQCAtMzIsMjcgKzc3LDY5IEBACisgfTsKKyAKKyAKKy1leHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IFBBUkFNUyAoKGNvbnN0IGNoYXIgKmNvZGVzZXQsCistCQkJCQkJICBzaXplX3QgbmFtZV9sZW4pKTsKKysvKiBOb3JtYWxpemUgY29kZXNldCBuYW1lLiAgVGhlcmUgaXMgbm8gc3RhbmRhcmQgZm9yIHRoZSBjb2Rlc2V0CisrICAgbmFtZXMuICBOb3JtYWxpemF0aW9uIGFsbG93cyB0aGUgdXNlciB0byB1c2UgYW55IG9mIHRoZSBjb21tb24KKysgICBuYW1lcy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUKKysgICBmcmVlZCBieSB0aGUgY2FsbGVyLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX25vcm1hbGl6ZV9jb2Rlc2V0IChjb25zdCBjaGFyICpjb2Rlc2V0LAorKwkJCQkJICBzaXplX3QgbmFtZV9sZW4pOworIAorKy8qIExvb2t1cCBhIGxvY2FsZSBkZXBlbmRlbnQgZmlsZS4KKysgICAqTDEwTkZJTEVfTElTVCBkZW5vdGVzIGEgcG9vbCBvZiBsb29rdXAgcmVzdWx0cyBvZiBsb2NhbGUgZGVwZW5kZW50CisrICAgZmlsZXMgb2YgdGhlIHNhbWUga2luZCwgc29ydGVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgLT5maWxlbmFtZS4KKysgICBESVJMSVNUIGFuZCBESVJMSVNUX0xFTiBhcmUgYW4gYXJneiBsaXN0IG9mIGRpcmVjdG9yaWVzIGluIHdoaWNoIHRvCisrICAgbG9vaywgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgZGlyZWN0b3J5IChpLmUuIERJUkxJU1RfTEVOID4gMCkuCisrICAgTUFTSywgTEFOR1VBR0UsIFRFUlJJVE9SWSwgQ09ERVNFVCwgTk9STUFMSVpFRF9DT0RFU0VULCBNT0RJRklFUiwKKysgICBTUEVDSUFMLCBTUE9OU09SLCBSRVZJU0lPTiBhcmUgdGhlIHBpZWNlcyBvZiB0aGUgbG9jYWxlIG5hbWUsIGFzCisrICAgcHJvZHVjZWQgYnkgX25sX2V4cGxvZGVfbmFtZSgpLiAgRklMRU5BTUUgaXMgdGhlIGZpbGVuYW1lIHN1ZmZpeC4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBsb29rdXAgcmVzdWx0LCBlaXRoZXIgZm91bmQgaW4gKkwxME5GSUxFX0xJU1QsCisrICAgb3IgLSBpZiBET19BTExPQ0FURSBpcyBub256ZXJvIC0gZnJlc2hseSBhbGxvY2F0ZWQsIG9yIHBvc3NpYmx5IE5VTEwuCisrICAgSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBub24tTlVMTCwgaXQgaXMgYWRkZWQgdG8gKkwxME5GSUxFX0xJU1QsIGFuZAorKyAgIGl0cyAtPm5leHQgZmllbGQgZGVub3RlcyB0aGUgY2hhaW5pbmcgaW5zaWRlICpMMTBORklMRV9MSVNULCBhbmQKKysgICBmdXJ0aGVybW9yZSBpdHMgLT5zdWNjZXNzb3JbXSBmaWVsZCBjb250YWlucyBhIGxpc3Qgb2Ygb3RoZXIgbG9va3VwCisrICAgcmVzdWx0cyBmcm9tIHdoaWNoIHRoaXMgbG9va3VwIHJlc3VsdCBpbmhlcml0cy4gICovCisgZXh0ZXJuIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKgorLV9ubF9tYWtlX2wxMG5mbGlzdCBQQVJBTVMgKChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICoqbDEwbmZpbGVfbGlzdCwKKy0JCQkgICAgY29uc3QgY2hhciAqZGlybGlzdCwgc2l6ZV90IGRpcmxpc3RfbGVuLCBpbnQgbWFzaywKKy0JCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKy0JCQkgICAgY29uc3QgY2hhciAqY29kZXNldCwKKy0JCQkgICAgY29uc3QgY2hhciAqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCSAgICBjb25zdCBjaGFyICptb2RpZmllciwgY29uc3QgY2hhciAqc3BlY2lhbCwKKy0JCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCistCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZG9fYWxsb2NhdGUpKTsKKytfbmxfbWFrZV9sMTBuZmxpc3QgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKipsMTBuZmlsZV9saXN0LAorKwkJICAgIGNvbnN0IGNoYXIgKmRpcmxpc3QsIHNpemVfdCBkaXJsaXN0X2xlbiwgaW50IG1hc2ssCisrCQkgICAgY29uc3QgY2hhciAqbGFuZ3VhZ2UsIGNvbnN0IGNoYXIgKnRlcnJpdG9yeSwKKysJCSAgICBjb25zdCBjaGFyICpjb2Rlc2V0LCBjb25zdCBjaGFyICpub3JtYWxpemVkX2NvZGVzZXQsCisrCQkgICAgY29uc3QgY2hhciAqbW9kaWZpZXIsIGNvbnN0IGNoYXIgKnNwZWNpYWwsCisrCQkgICAgY29uc3QgY2hhciAqc3BvbnNvciwgY29uc3QgY2hhciAqcmV2aXNpb24sCisrCQkgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBkb19hbGxvY2F0ZSk7CisgCisrLyogTG9va3VwIHRoZSByZWFsIGxvY2FsZSBuYW1lIGZvciBhIGxvY2FsZSBhbGlhcyBOQU1FLCBvciBOVUxMIGlmCisrICAgTkFNRSBpcyBub3QgYSBsb2NhbGUgYWxpYXMgKGJ1dCBwb3NzaWJseSBhIHJlYWwgbG9jYWxlIG5hbWUpLgorKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQgYW5kIG11c3Qgbm90IGJlIGZyZWVkLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqbmFtZSk7CisgCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9leHBhbmRfYWxpYXMgUEFSQU1TICgoY29uc3QgY2hhciAqbmFtZSkpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGl0cyBwaWVjZXM6IGxhbmd1YWdlLCBtb2RpZmllciwKKysgICB0ZXJyaXRvcnksIGNvZGVzZXQsIHNwZWNpYWwsIHNwb25zb3IsIHJldmlzaW9uLgorKyAgIE5BTUUgZ2V0cyBkZXN0cnVjdGl2ZWx5IG1vZGlmaWVkOiBOVUwgYnl0ZXMgYXJlIGluc2VydGVkIGhlcmUgYW5kCisrICAgdGhlcmUuICAqTEFOR1VBR0UgZ2V0cyBhc3NpZ25lZCBOQU1FLiAgRWFjaCBvZiAqTU9ESUZJRVIsICpURVJSSVRPUlksCisrICAgKkNPREVTRVQsICpTUEVDSUFMLCAqU1BPTlNPUiwgKlJFVklTSU9OIGdldHMgYXNzaWduZWQgZWl0aGVyIGEKKysgICBwb2ludGVyIGludG8gdGhlIG9sZCBOQU1FIHN0cmluZywgb3IgTlVMTC4gICpOT1JNQUxJWkVEX0NPREVTRVQKKysgICBnZXRzIGFzc2lnbmVkIHRoZSBleHBhbmRlZCAqQ09ERVNFVCwgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gKkNPREVTRVQ7CisrICAgdGhpcyBvbmUgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBoYXMgdG8gYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKysgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYml0bWFzaywgd2hlcmUgZWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gb25lCisrICAgZmlsbGVkLWluIHZhbHVlOgorKyAgICAgWFBHX01PRElGSUVSLCBDRU5fQVVESUVOQ0UgIGZvciAqTU9ESUZJRVIsCisrICAgICBURVJSSVRPUlkgICAgICAgICAgICAgICAgICAgZm9yICpURVJSSVRPUlksCisrICAgICBYUEdfQ09ERVNFVCAgICAgICAgICAgICAgICAgZm9yICpDT0RFU0VULAorKyAgICAgWFBHX05PUk1fQ09ERVNFVCAgICAgICAgICAgIGZvciAqTk9STUFMSVpFRF9DT0RFU0VULAorKyAgICAgQ0VOX1NQRUNJQUwgICAgICAgICAgICAgICAgIGZvciAqU1BFQ0lBTCwKKysgICAgIENFTl9TUE9OU09SICAgICAgICAgICAgICAgICBmb3IgKlNQT05TT1IsCisrICAgICBDRU5fUkVWSVNJT04gICAgICAgICAgICAgICAgZm9yICpSRVZJU0lPTi4KKysgKi8KKytleHRlcm4gaW50IF9ubF9leHBsb2RlX25hbWUgKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKiptb2RpZmllciwgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipjb2Rlc2V0LAorKwkJCSAgICAgY29uc3QgY2hhciAqKm5vcm1hbGl6ZWRfY29kZXNldCwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLCBjb25zdCBjaGFyICoqc3BvbnNvciwKKysJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbik7CisgCistZXh0ZXJuIGludCBfbmxfZXhwbG9kZV9uYW1lIFBBUkFNUyAoKGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKipsYW5ndWFnZSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbW9kaWZpZXIsCistCQkJCSAgICAgY29uc3QgY2hhciAqKnRlcnJpdG9yeSwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqY29kZXNldCwKKy0JCQkJICAgICBjb25zdCBjaGFyICoqbm9ybWFsaXplZF9jb2Rlc2V0LAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcGVjaWFsLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipzcG9uc29yLAorLQkJCQkgICAgIGNvbnN0IGNoYXIgKipyZXZpc2lvbikpOworKy8qIFNwbGl0IGEgbG9jYWxlIG5hbWUgTkFNRSBpbnRvIGEgbGVhZGluZyBsYW5ndWFnZSBwYXJ0IGFuZCBhbGwgdGhlCisrICAgcmVzdC4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgbGFuZ3VhZ2UsCisrICAgaS5lLiB0byB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzdC4gICovCisrZXh0ZXJuIGNoYXIgKl9ubF9maW5kX2xhbmd1YWdlIChjb25zdCBjaGFyICpuYW1lKTsKKysKKysjZW5kaWYJLyogbG9hZGluZm8uaCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvYWRtc2djYXQuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2FkbXNnY2F0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC40NzM3MzAxNTIgLTA0MDAKK0BAIC0xLDQyICsxLDQ1NSBAQAorLS8qIExvYWQgbmVlZGVkIG1lc3NhZ2UgY2F0YWxvZ3MKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLyogTG9hZCBuZWVkZWQgbWVzc2FnZSBjYXRhbG9ncy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKy0jaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworLSMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiAgYWxsb2NhCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbmRpZgorIAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisgI2lmIGRlZmluZWQgSEFWRV9VTklTVERfSCB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAjZW5kaWYKKyAKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVApIHx8IGRlZmluZWQgX0xJQkMKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBpbmNsdWRlIDxsb2NhbGUuaD4KKysjZW5kaWYKKysKKysjaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorKyAgICB8fCAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIF9QT1NJWF9NQVBQRURfRklMRVMpCisgIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorKyMgdW5kZWYgSEFWRV9NTUFQCisrIyBkZWZpbmUgSEFWRV9NTUFQCTEKKysjZWxzZQorKyMgdW5kZWYgSEFWRV9NTUFQCisgI2VuZGlmCisgCistI2luY2x1ZGUgImdldHRleHQuaCIKKysjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCB8fCBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxzdGRpbnQuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0ggfHwgZGVmaW5lZCBfTElCQworKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ21vLmgiCisgI2luY2x1ZGUgImdldHRleHRQLmgiCisrI2luY2x1ZGUgImhhc2gtc3RyaW5nLmgiCisrI2luY2x1ZGUgInBsdXJhbC1leHAuaCIKKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgIi4uL2xvY2FsZS9sb2NhbGVpbmZvLmgiCisrI2VuZGlmCisrCisrLyogUHJvdmlkZSBmYWxsYmFjayB2YWx1ZXMgZm9yIG1hY3JvcyB0aGF0IG91Z2h0IHRvIGJlIGRlZmluZWQgaW4gPGludHR5cGVzLmg+LgorKyAgIE5vdGUgdGhhdCBvdXIgZmFsbGJhY2sgdmFsdWVzIG5lZWQgbm90IGJlIGxpdGVyYWwgc3RyaW5ncywgYmVjYXVzZSB3ZSBkb24ndAorKyAgIHVzZSB0aGVtIHdpdGggcHJlcHJvY2Vzc29yIHN0cmluZyBjb25jYXRlbmF0aW9uLiAgKi8KKysjaWYgIWRlZmluZWQgUFJJZDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWQ4CisrIyBkZWZpbmUgUFJJZDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWk4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpOAorKyMgZGVmaW5lIFBSSWk4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJbzgKKysjIGRlZmluZSBQUklvOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXU4CisrIyBkZWZpbmUgUFJJdTggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXg4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4OAorKyMgZGVmaW5lIFBSSXg4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWDgKKysjIGRlZmluZSBQUklYOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMTYKKysjIGRlZmluZSBQUklkMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTE2CisrIyBkZWZpbmUgUFJJaTE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8xNgorKyMgZGVmaW5lIFBSSW8xNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MTYKKysjIGRlZmluZSBQUkl1MTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDE2CisrIyBkZWZpbmUgUFJJeDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgxNgorKyMgZGVmaW5lIFBSSVgxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkMzIKKysjIGRlZmluZSBQUklkMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWkzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaTMyCisrIyBkZWZpbmUgUFJJaTMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW8zMgorKyMgZGVmaW5lIFBSSW8zMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1MzIKKysjIGRlZmluZSBQUkl1MzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXgzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeDMyCisrIyBkZWZpbmUgUFJJeDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVgzMgorKyMgZGVmaW5lIFBSSVgzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkNjQKKysjIGRlZmluZSBQUklkNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsZCIgOiAibGxkIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJaTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpNjQKKysjIGRlZmluZSBQUklpNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsaSIgOiAibGxpIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJbzY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvNjQKKysjIGRlZmluZSBQUklvNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdTY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1NjQKKysjIGRlZmluZSBQUkl1NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsdSIgOiAibGx1IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJeDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4NjQKKysjIGRlZmluZSBQUkl4NjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJseCIgOiAibGx4IikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJWDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYNjQKKysjIGRlZmluZSBQUklYNjQgKHNpemVvZiAobG9uZykgPT0gOCA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZExFQVNUOAorKyMgZGVmaW5lIFBSSWRMRUFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlMRUFTVDgKKysjIGRlZmluZSBQUklpTEVBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvTEVBU1Q4CisrIyBkZWZpbmUgUFJJb0xFQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUxFQVNUOAorKyMgZGVmaW5lIFBSSXVMRUFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhMRUFTVDgKKysjIGRlZmluZSBQUkl4TEVBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYTEVBU1Q4CisrIyBkZWZpbmUgUFJJWExFQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDE2CisrIyBkZWZpbmUgUFJJZExFQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QxNgorKyMgZGVmaW5lIFBSSWlMRUFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMTYKKysjIGRlZmluZSBQUklvTEVBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDE2CisrIyBkZWZpbmUgUFJJdUxFQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QxNgorKyMgZGVmaW5lIFBSSXhMRUFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMTYKKysjIGRlZmluZSBQUklYTEVBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDMyCisrIyBkZWZpbmUgUFJJZExFQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1QzMgorKyMgZGVmaW5lIFBSSWlMRUFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUMzIKKysjIGRlZmluZSBQUklvTEVBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDMyCisrIyBkZWZpbmUgUFJJdUxFQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1QzMgorKyMgZGVmaW5lIFBSSXhMRUFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUMzIKKysjIGRlZmluZSBQUklYTEVBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZExFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWRMRUFTVDY0CisrIyBkZWZpbmUgUFJJZExFQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTEVBU1Q2NAorKyMgZGVmaW5lIFBSSWlMRUFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJb0xFQVNUNjQKKysjIGRlZmluZSBQUklvTEVBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUxFQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXVMRUFTVDY0CisrIyBkZWZpbmUgUFJJdUxFQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhMRUFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TEVBU1Q2NAorKyMgZGVmaW5lIFBSSXhMRUFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYTEVBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJWExFQVNUNjQKKysjIGRlZmluZSBQUklYTEVBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklkRkFTVDgKKysjIGRlZmluZSBQUklkRkFTVDggImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJaUZBU1Q4CisrIyBkZWZpbmUgUFJJaUZBU1Q4ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9GQVNUOAorKyMgZGVmaW5lIFBSSW9GQVNUOCAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q4IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl1RkFTVDgKKysjIGRlZmluZSBQUkl1RkFTVDggInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUOCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJeEZBU1Q4CisrIyBkZWZpbmUgUFJJeEZBU1Q4ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhGQVNUOAorKyMgZGVmaW5lIFBSSVhGQVNUOCAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QxNgorKyMgZGVmaW5lIFBSSWRGQVNUMTYgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMTYKKysjIGRlZmluZSBQUklpRkFTVDE2ICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDE2CisrIyBkZWZpbmUgUFJJb0ZBU1QxNiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QxNiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QxNgorKyMgZGVmaW5lIFBSSXVGQVNUMTYgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMTYgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMTYKKysjIGRlZmluZSBQUkl4RkFTVDE2ICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDE2IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDE2CisrIyBkZWZpbmUgUFJJWEZBU1QxNiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1QzMgorKyMgZGVmaW5lIFBSSWRGQVNUMzIgImQiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUMzIKKysjIGRlZmluZSBQUklpRkFTVDMyICJpIgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDMyCisrIyBkZWZpbmUgUFJJb0ZBU1QzMiAibyIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1QzMiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1QzMgorKyMgZGVmaW5lIFBSSXVGQVNUMzIgInUiCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUMzIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUMzIKKysjIGRlZmluZSBQUkl4RkFTVDMyICJ4IgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDMyIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDMyCisrIyBkZWZpbmUgUFJJWEZBU1QzMiAiWCIKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZEZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZEZBU1Q2NAorKyMgZGVmaW5lIFBSSWRGQVNUNjQgUFJJZDY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSWlGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSWlGQVNUNjQKKysjIGRlZmluZSBQUklpRkFTVDY0IFBSSWk2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklvRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklvRkFTVDY0CisrIyBkZWZpbmUgUFJJb0ZBU1Q2NCBQUklvNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdUZBU1Q2NCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdUZBU1Q2NAorKyMgZGVmaW5lIFBSSXVGQVNUNjQgUFJJdTY0CisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSXhGQVNUNjQgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSXhGQVNUNjQKKysjIGRlZmluZSBQUkl4RkFTVDY0IFBSSXg2NAorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklYRkFTVDY0IHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklYRkFTVDY0CisrIyBkZWZpbmUgUFJJWEZBU1Q2NCBQUklYNjQKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZE1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZE1BWAorKyMgZGVmaW5lIFBSSWRNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6ICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpTUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpTUFYCisrIyBkZWZpbmUgUFJJaU1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibGkiIDogImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9NQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9NQVgKKysjIGRlZmluZSBQUklvTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdU1BWCB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdU1BWAorKyMgZGVmaW5lIFBSSXVNQVggKHNpemVvZiAodWludG1heF90KSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6ICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4TUFYIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4TUFYCisrIyBkZWZpbmUgUFJJeE1BWCAoc2l6ZW9mICh1aW50bWF4X3QpID09IHNpemVvZiAobG9uZykgPyAibHgiIDogImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhNQVggfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhNQVgKKysjIGRlZmluZSBQUklYTUFYIChzaXplb2YgKHVpbnRtYXhfdCkgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiAibGxYIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJZFBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJZFBUUgorKyMgZGVmaW5lIFBSSWRQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImxkIiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gImQiIDogXAorKyAgICJsbGQiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUklpUFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUklpUFRSCisrIyBkZWZpbmUgUFJJaVBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibGkiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAiaSIgOiBcCisrICAgImxsaSIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSW9QVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSW9QVFIKKysjIGRlZmluZSBQUklvUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsbyIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJvIiA6IFwKKysgICAibGxvIikKKysjZW5kaWYKKysjaWYgIWRlZmluZWQgUFJJdVBUUiB8fCBQUklfTUFDUk9TX0JST0tFTgorKyMgdW5kZWYgUFJJdVBUUgorKyMgZGVmaW5lIFBSSXVQVFIgXAorKyAgKHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGxvbmcpID8gImx1IiA6IFwKKysgICBzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChpbnQpID8gInUiIDogXAorKyAgICJsbHUiKQorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBQUkl4UFRSIHx8IFBSSV9NQUNST1NfQlJPS0VOCisrIyB1bmRlZiBQUkl4UFRSCisrIyBkZWZpbmUgUFJJeFBUUiBcCisrICAoc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAobG9uZykgPyAibHgiIDogXAorKyAgIHNpemVvZiAodm9pZCAqKSA9PSBzaXplb2YgKGludCkgPyAieCIgOiBcCisrICAgImxseCIpCisrI2VuZGlmCisrI2lmICFkZWZpbmVkIFBSSVhQVFIgfHwgUFJJX01BQ1JPU19CUk9LRU4KKysjIHVuZGVmIFBSSVhQVFIKKysjIGRlZmluZSBQUklYUFRSIFwKKysgIChzaXplb2YgKHZvaWQgKikgPT0gc2l6ZW9mIChsb25nKSA/ICJsWCIgOiBcCisrICAgc2l6ZW9mICh2b2lkICopID09IHNpemVvZiAoaW50KSA/ICJYIiA6IFwKKysgICAibGxYIikKKysjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCitAQCAtNDQsNyArNDU3LDYgQEAKKyAvKiBSZW5hbWUgdGhlIG5vbiBJU08gQyBmdW5jdGlvbnMuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IHRoZSBzdGFuZGFyZAorICAgIGJlY2F1c2Ugc29tZSBJU08gQyBmdW5jdGlvbnMgd2lsbCByZXF1aXJlIGxpbmtpbmcgd2l0aCB0aGlzIG9iamVjdAorICAgIGZpbGUgYW5kIHRoZSBuYW1lIHNwYWNlIG11c3Qgbm90IGJlIHBvbGx1dGVkLiAgKi8KKy0jIGRlZmluZSBmc3RhdCAgX19mc3RhdAorICMgZGVmaW5lIG9wZW4gICBfX29wZW4KKyAjIGRlZmluZSBjbG9zZSAgX19jbG9zZQorICMgZGVmaW5lIHJlYWQgICBfX3JlYWQKK0BAIC01MiwzMCArNDY0LDQ3MSBAQAorICMgZGVmaW5lIG11bm1hcCBfX211bm1hcAorICNlbmRpZgorIAorKy8qIEZvciB0aG9zZSBsb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrICAgc29tZSBhZGRpdGlvbmFsIGNvZGUgZW11bGF0aW5nIGl0LiAgKi8KKysjaWZkZWYgSEFWRV9BTExPQ0EKKysjIGRlZmluZSBmcmVlYShwKSAvKiBub3RoaW5nICovCisrI2Vsc2UKKysjIGRlZmluZSBhbGxvY2EobikgbWFsbG9jIChuKQorKyMgZGVmaW5lIGZyZWVhKHApIGZyZWUgKHApCisrI2VuZGlmCisrCisrLyogRm9yIHN5c3RlbXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBJL08uCisrICAgT19CSU5BUlkgaXMgdXN1YWxseSBkZWNsYXJlZCBpbiA8ZmNudGwuaD4uICovCisrI2lmICFkZWZpbmVkIE9fQklOQVJZICYmIGRlZmluZWQgX09fQklOQVJZCisrICAvKiBGb3IgTVNDLWNvbXBhdGlibGUgY29tcGlsZXJzLiAgKi8KKysjIGRlZmluZSBPX0JJTkFSWSBfT19CSU5BUlkKKysjIGRlZmluZSBPX1RFWFQgX09fVEVYVAorKyNlbmRpZgorKyNpZmRlZiBfX0JFT1NfXworKyAgLyogQmVPUyA1IGhhcyBPX0JJTkFSWSBhbmQgT19URVhULCBidXQgdGhleSBoYXZlIG5vIGVmZmVjdC4gICovCisrIyB1bmRlZiBPX0JJTkFSWQorKyMgdW5kZWYgT19URVhUCisrI2VuZGlmCisrLyogT24gcmVhc29uYWJsZSBzeXN0ZW1zLCBiaW5hcnkgSS9PIGlzIHRoZSBkZWZhdWx0LiAgKi8KKysjaWZuZGVmIE9fQklOQVJZCisrIyBkZWZpbmUgT19CSU5BUlkgMAorKyNlbmRpZgorKworKworIC8qIFdlIG5lZWQgYSBzaWduLCB3aGV0aGVyIGEgbmV3IGNhdGFsb2cgd2FzIGxvYWRlZCwgd2hpY2ggY2FuIGJlIGFzc29jaWF0ZWQKKyAgICB3aXRoIGFsbCB0cmFuc2xhdGlvbnMuICBUaGlzIGlzIGltcG9ydGFudCBpZiB0aGUgdHJhbnNsYXRpb25zIGFyZQorICAgIGNhY2hlZCBieSBvbmUgb2YgR0NDJ3MgZmVhdHVyZXMuICAqLworLWludCBfbmxfbXNnX2NhdF9jbnRyID0gMDsKKytpbnQgX25sX21zZ19jYXRfY250cjsKKyAKKyAKKysvKiBFeHBhbmQgYSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZyBzZWdtZW50LiAgUmV0dXJuIE5VTEwgaWYgdW5zdXBwb3J0ZWQuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfc3lzZGVwX3NlZ21lbnRfdmFsdWUgKGNvbnN0IGNoYXIgKm5hbWUpCisreworKyAgLyogVGVzdCBmb3IgYW4gSVNPIEMgOTkgc2VjdGlvbiA3LjguMSBmb3JtYXQgc3RyaW5nIGRpcmVjdGl2ZS4KKysgICAgIFN5bnRheDoKKysgICAgIFAgUiBJIHsgZCB8IGkgfCBvIHwgdSB8IHggfCBYIH0KKysgICAgIHsgeyB8IExFQVNUIHwgRkFTVCB9IHsgOCB8IDE2IHwgMzIgfCA2NCB9IHwgTUFYIHwgUFRSIH0gICovCisrICAvKiBXZSBkb24ndCB1c2UgYSB0YWJsZSBvZiAxNCB0aW1lcyA2ICdjb25zdCBjaGFyIConIHN0cmluZ3MgaGVyZSwgYmVjYXVzZQorKyAgICAgZGF0YSByZWxvY2F0aW9ucyBjb3N0IHN0YXJ0dXAgdGltZS4gICovCisrICBpZiAobmFtZVswXSA9PSAnUCcgJiYgbmFtZVsxXSA9PSAnUicgJiYgbmFtZVsyXSA9PSAnSScpCisrICAgIHsKKysgICAgICBpZiAobmFtZVszXSA9PSAnZCcgfHwgbmFtZVszXSA9PSAnaScgfHwgbmFtZVszXSA9PSAnbycgfHwgbmFtZVszXSA9PSAndScKKysJICB8fCBuYW1lWzNdID09ICd4JyB8fCBuYW1lWzNdID09ICdYJykKKysJeworKwkgIGlmIChuYW1lWzRdID09ICc4JyAmJiBuYW1lWzVdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJcmV0dXJuIFBSSWk4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJbzg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1ODsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJcmV0dXJuIFBSSXg4OworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWDg7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICcxJyAmJiBuYW1lWzVdID09ICc2JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MTY7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMTY7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICczJyAmJiBuYW1lWzVdID09ICcyJyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvMzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4MzI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYMzI7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICc2JyAmJiBuYW1lWzVdID09ICc0JyAmJiBuYW1lWzZdID09ICdcMCcpCisrCSAgICB7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdkJykKKysJCXJldHVybiBQUklkNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdvJykKKysJCXJldHVybiBQUklvNjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd1JykKKysJCXJldHVybiBQUkl1NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4NjQ7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdYJykKKysJCXJldHVybiBQUklYNjQ7CisrCSAgICAgIGFib3J0ICgpOworKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdMJyAmJiBuYW1lWzVdID09ICdFJyAmJiBuYW1lWzZdID09ICdBJworKwkgICAgICAmJiBuYW1lWzddID09ICdTJyAmJiBuYW1lWzhdID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOV0gPT0gJzgnICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpTEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9MRUFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4TEVBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhMRUFTVDg7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMScgJiYgbmFtZVsxMF0gPT0gJzYnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMTY7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnMycgJiYgbmFtZVsxMF0gPT0gJzInICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs5XSA9PSAnNicgJiYgbmFtZVsxMF0gPT0gJzQnICYmIG5hbWVbMTFdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0xFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUxFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeExFQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWExFQVNUNjQ7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgfQorKwkgIGlmIChuYW1lWzRdID09ICdGJyAmJiBuYW1lWzVdID09ICdBJyAmJiBuYW1lWzZdID09ICdTJworKwkgICAgICAmJiBuYW1lWzddID09ICdUJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzgnICYmIG5hbWVbOV0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUODsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDg7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1Q4OworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUODsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICAgIGlmIChuYW1lWzhdID09ICcxJyAmJiBuYW1lWzldID09ICc2JyAmJiBuYW1lWzEwXSA9PSAnXDAnKQorKwkJeworKwkJICBpZiAobmFtZVszXSA9PSAnZCcpCisrCQkgICAgcmV0dXJuIFBSSWRGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICdpJykKKysJCSAgICByZXR1cm4gUFJJaUZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ28nKQorKwkJICAgIHJldHVybiBQUklvRkFTVDE2OworKwkJICBpZiAobmFtZVszXSA9PSAndScpCisrCQkgICAgcmV0dXJuIFBSSXVGQVNUMTY7CisrCQkgIGlmIChuYW1lWzNdID09ICd4JykKKysJCSAgICByZXR1cm4gUFJJeEZBU1QxNjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ1gnKQorKwkJICAgIHJldHVybiBQUklYRkFTVDE2OworKwkJICBhYm9ydCAoKTsKKysJCX0KKysJICAgICAgaWYgKG5hbWVbOF0gPT0gJzMnICYmIG5hbWVbOV0gPT0gJzInICYmIG5hbWVbMTBdID09ICdcMCcpCisrCQl7CisrCQkgIGlmIChuYW1lWzNdID09ICdkJykKKysJCSAgICByZXR1cm4gUFJJZEZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2knKQorKwkJICAgIHJldHVybiBQUklpRkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnbycpCisrCQkgICAgcmV0dXJuIFBSSW9GQVNUMzI7CisrCQkgIGlmIChuYW1lWzNdID09ICd1JykKKysJCSAgICByZXR1cm4gUFJJdUZBU1QzMjsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3gnKQorKwkJICAgIHJldHVybiBQUkl4RkFTVDMyOworKwkJICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQkgICAgcmV0dXJuIFBSSVhGQVNUMzI7CisrCQkgIGFib3J0ICgpOworKwkJfQorKwkgICAgICBpZiAobmFtZVs4XSA9PSAnNicgJiYgbmFtZVs5XSA9PSAnNCcgJiYgbmFtZVsxMF0gPT0gJ1wwJykKKysJCXsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJICAgIHJldHVybiBQUklkRkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAnaScpCisrCQkgICAgcmV0dXJuIFBSSWlGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdvJykKKysJCSAgICByZXR1cm4gUFJJb0ZBU1Q2NDsKKysJCSAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJICAgIHJldHVybiBQUkl1RkFTVDY0OworKwkJICBpZiAobmFtZVszXSA9PSAneCcpCisrCQkgICAgcmV0dXJuIFBSSXhGQVNUNjQ7CisrCQkgIGlmIChuYW1lWzNdID09ICdYJykKKysJCSAgICByZXR1cm4gUFJJWEZBU1Q2NDsKKysJCSAgYWJvcnQgKCk7CisrCQl9CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ00nICYmIG5hbWVbNV0gPT0gJ0EnICYmIG5hbWVbNl0gPT0gJ1gnCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpTUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb01BWDsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVNQVg7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4TUFYOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWE1BWDsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCSAgaWYgKG5hbWVbNF0gPT0gJ1AnICYmIG5hbWVbNV0gPT0gJ1QnICYmIG5hbWVbNl0gPT0gJ1InCisrCSAgICAgICYmIG5hbWVbN10gPT0gJ1wwJykKKysJICAgIHsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ2QnKQorKwkJcmV0dXJuIFBSSWRQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICdpJykKKysJCXJldHVybiBQUklpUFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnbycpCisrCQlyZXR1cm4gUFJJb1BUUjsKKysJICAgICAgaWYgKG5hbWVbM10gPT0gJ3UnKQorKwkJcmV0dXJuIFBSSXVQVFI7CisrCSAgICAgIGlmIChuYW1lWzNdID09ICd4JykKKysJCXJldHVybiBQUkl4UFRSOworKwkgICAgICBpZiAobmFtZVszXSA9PSAnWCcpCisrCQlyZXR1cm4gUFJJWFBUUjsKKysJICAgICAgYWJvcnQgKCk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgLyogVGVzdCBmb3IgYSBnbGliYyBzcGVjaWZpYyBwcmludGYoKSBmb3JtYXQgZGlyZWN0aXZlIGZsYWcuICAqLworKyAgaWYgKG5hbWVbMF0gPT0gJ0knICYmIG5hbWVbMV0gPT0gJ1wwJykKKysgICAgeworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKQorKyAgICAgIC8qIFRoZSAnSScgZmxhZywgaW4gbnVtZXJpYyBmb3JtYXQgZGlyZWN0aXZlcywgcmVwbGFjZXMgQVNDSUkgZGlnaXRzCisrCSB3aXRoIHRoZSAnb3V0ZGlnaXRzJyBkZWZpbmVkIGluIHRoZSBMQ19DVFlQRSBsb2NhbGUgZmFjZXQuICBUaGlzIGlzCisrCSB1c2VkIGZvciBGYXJzaSAoUGVyc2lhbikgYW5kIG1heWJlIEFyYWJpYy4gICovCisrICAgICAgcmV0dXJuICJJIjsKKysjZWxzZQorKyAgICAgIHJldHVybiAiIjsKKysjZW5kaWYKKysgICAgfQorKyAgLyogT3RoZXIgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFyZSBub3QgdmFsaWQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEluaXRpYWxpemUgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuCisrICAgUmV0dXJuIHRoZSBoZWFkZXIgZW50cnkuICAqLworK2NvbnN0IGNoYXIgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2luaXRfZG9tYWluX2NvbnYgKHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlLAorKwkJICAgICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbiwKKysJCSAgICAgIHN0cnVjdCBiaW5kaW5nICpkb21haW5iaW5kaW5nKQorK3sKKysgIC8qIEZpbmQgb3V0IGFib3V0IHRoZSBjaGFyYWN0ZXIgc2V0IHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4KKysgICAgIFRoaXMgY2FuIGJlIGZvdW5kIChpbiB0ZXh0dWFsIGZvcm0pIGluIHRoZSBlbnRyeSAiIi4gIElmIHRoaXMKKysgICAgIGVudHJ5IGRvZXMgbm90IGV4aXN0IG9yIGlmIHRoaXMgZG9lcyBub3QgY29udGFpbiB0aGUgYGNoYXJzZXQ9JworKyAgICAgaW5mb3JtYXRpb24sIHdlIHdpbGwgYXNzdW1lIHRoZSBjaGFyc2V0IG1hdGNoZXMgdGhlIG9uZSB0aGUKKysgICAgIGN1cnJlbnQgbG9jYWxlIGFuZCB3ZSBkb24ndCBoYXZlIHRvIHBlcmZvcm0gYW55IGNvbnZlcnNpb24uICAqLworKyAgY2hhciAqbnVsbGVudHJ5OworKyAgc2l6ZV90IG51bGxlbnRyeWxlbjsKKysKKysgIC8qIFByZWluaXRpYWxpemUgZmllbGRzLCB0byBhdm9pZCByZWN1cnNpb24gZHVyaW5nIF9ubF9maW5kX21zZy4gICovCisrICBkb21haW4tPmNvZGVzZXRfY250ciA9CisrICAgIChkb21haW5iaW5kaW5nICE9IE5VTEwgPyBkb21haW5iaW5kaW5nLT5jb2Rlc2V0X2NudHIgOiAwKTsKKysjaWZkZWYgX0xJQkMKKysgIGRvbWFpbi0+Y29udiA9IChfX2djb252X3QpIC0xOworKyNlbHNlCisrIyBpZiBIQVZFX0lDT05WCisrICBkb21haW4tPmNvbnYgPSAoaWNvbnZfdCkgLTE7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgZG9tYWluLT5jb252X3RhYiA9IE5VTEw7CisrCisrICAvKiBHZXQgdGhlIGhlYWRlciBlbnRyeS4gICovCisrICBudWxsZW50cnkgPSBfbmxfZmluZF9tc2cgKGRvbWFpbl9maWxlLCBkb21haW5iaW5kaW5nLCAiIiwgJm51bGxlbnRyeWxlbik7CisrCisrICBpZiAobnVsbGVudHJ5ICE9IE5VTEwpCisrICAgIHsKKysjaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0lDT05WCisrICAgICAgY29uc3QgY2hhciAqY2hhcnNldHN0cjsKKysKKysgICAgICBjaGFyc2V0c3RyID0gc3Ryc3RyIChudWxsZW50cnksICJjaGFyc2V0PSIpOworKyAgICAgIGlmIChjaGFyc2V0c3RyICE9IE5VTEwpCisrCXsKKysJICBzaXplX3QgbGVuOworKwkgIGNoYXIgKmNoYXJzZXQ7CisrCSAgY29uc3QgY2hhciAqb3V0Y2hhcnNldDsKKysKKysJICBjaGFyc2V0c3RyICs9IHN0cmxlbiAoImNoYXJzZXQ9Iik7CisrCSAgbGVuID0gc3RyY3NwbiAoY2hhcnNldHN0ciwgIiBcdFxuIik7CisrCisrCSAgY2hhcnNldCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrIyBpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfTUVNUENQWQorKwkgICooKGNoYXIgKikgbWVtcGNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKSkgPSAnXDAnOworKyMgZWxzZQorKwkgIG1lbWNweSAoY2hhcnNldCwgY2hhcnNldHN0ciwgbGVuKTsKKysJICBjaGFyc2V0W2xlbl0gPSAnXDAnOworKyMgZW5kaWYKKysKKysJICAvKiBUaGUgb3V0cHV0IGNoYXJzZXQgc2hvdWxkIG5vcm1hbGx5IGJlIGRldGVybWluZWQgYnkgdGhlCisrCSAgICAgbG9jYWxlLiAgQnV0IHNvbWV0aW1lcyB0aGUgbG9jYWxlIGlzIG5vdCB1c2VkIG9yIG5vdCBjb3JyZWN0bHkKKysJICAgICBzZXQgdXAsIHNvIHdlIHByb3ZpZGUgYSBwb3NzaWJpbGl0eSBmb3IgdGhlIHVzZXIgdG8gb3ZlcnJpZGUKKysJICAgICB0aGlzLiAgTW9yZW92ZXIsIHRoZSB2YWx1ZSBzcGVjaWZpZWQgdGhyb3VnaAorKwkgICAgIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IG92ZXJyaWRlcyBib3RoLiAgKi8KKysJICBpZiAoZG9tYWluYmluZGluZyAhPSBOVUxMICYmIGRvbWFpbmJpbmRpbmctPmNvZGVzZXQgIT0gTlVMTCkKKysJICAgIG91dGNoYXJzZXQgPSBkb21haW5iaW5kaW5nLT5jb2Rlc2V0OworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgb3V0Y2hhcnNldCA9IGdldGVudiAoIk9VVFBVVF9DSEFSU0VUIik7CisrCSAgICAgIGlmIChvdXRjaGFyc2V0ID09IE5VTEwgfHwgb3V0Y2hhcnNldFswXSA9PSAnXDAnKQorKwkJeworKyMgaWZkZWYgX0xJQkMKKysJCSAgb3V0Y2hhcnNldCA9IF9OTF9DVVJSRU5UIChMQ19DVFlQRSwgQ09ERVNFVCk7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkJICBleHRlcm4gY29uc3QgY2hhciAqbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKwkJICBvdXRjaGFyc2V0ID0gbG9jYWxlX2NoYXJzZXQgKCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCQl9CisrCSAgICB9CisrCisrIyBpZmRlZiBfTElCQworKwkgIC8qIFdlIGFsd2F5cyB3YW50IHRvIHVzZSB0cmFuc2xpdGVyYXRpb24uICAqLworKwkgIG91dGNoYXJzZXQgPSBub3JtX2FkZF9zbGFzaGVzIChvdXRjaGFyc2V0LCAiVFJBTlNMSVQiKTsKKysJICBjaGFyc2V0ID0gbm9ybV9hZGRfc2xhc2hlcyAoY2hhcnNldCwgTlVMTCk7CisrCSAgaWYgKF9fZ2NvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCwgJmRvbWFpbi0+Y29udiwKKysJCQkgICAgR0NPTlZfQVZPSURfTk9DT05WKQorKwkgICAgICAhPSBfX0dDT05WX09LKQorKwkgICAgZG9tYWluLT5jb252ID0gKF9fZ2NvbnZfdCkgLTE7CisrIyBlbHNlCisrIyAgaWYgSEFWRV9JQ09OVgorKwkgIC8qIFdoZW4gdXNpbmcgR05VIGxpYmMgPj0gMi4yIG9yIEdOVSBsaWJpY29udiA+PSAxLjUsCisrCSAgICAgd2Ugd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysjICAgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSB8fCBfX0dMSUJDX18gPiAyIFwKKysgICAgICAgfHwgX0xJQklDT05WX1ZFUlNJT04gPj0gMHgwMTA1CisrCSAgaWYgKHN0cmNociAob3V0Y2hhcnNldCwgJy8nKSA9PSBOVUxMKQorKwkgICAgeworKwkgICAgICBjaGFyICp0bXA7CisrCisrCSAgICAgIGxlbiA9IHN0cmxlbiAob3V0Y2hhcnNldCk7CisrCSAgICAgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMTAgKyAxKTsKKysJICAgICAgbWVtY3B5ICh0bXAsIG91dGNoYXJzZXQsIGxlbik7CisrCSAgICAgIG1lbWNweSAodG1wICsgbGVuLCAiLy9UUkFOU0xJVCIsIDEwICsgMSk7CisrCSAgICAgIG91dGNoYXJzZXQgPSB0bXA7CisrCisrCSAgICAgIGRvbWFpbi0+Y29udiA9IGljb252X29wZW4gKG91dGNoYXJzZXQsIGNoYXJzZXQpOworKworKwkgICAgICBmcmVlYSAob3V0Y2hhcnNldCk7CisrCSAgICB9CisrCSAgZWxzZQorKyMgICBlbmRpZgorKwkgICAgZG9tYWluLT5jb252ID0gaWNvbnZfb3BlbiAob3V0Y2hhcnNldCwgY2hhcnNldCk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrCisrCSAgZnJlZWEgKGNoYXJzZXQpOworKwl9CisrI2VuZGlmIC8qIF9MSUJDIHx8IEhBVkVfSUNPTlYgKi8KKysgICAgfQorKworKyAgcmV0dXJuIG51bGxlbnRyeTsKKyt9CisrCisrLyogRnJlZXMgdGhlIGNvZGVzZXQgZGVwZW5kZW50IHBhcnRzIG9mIGFuIG9wZW5lZCBtZXNzYWdlIGNhdGFsb2cuICAqLworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF9mcmVlX2RvbWFpbl9jb252IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPmNvbnZfdGFiICE9IE5VTEwgJiYgZG9tYWluLT5jb252X3RhYiAhPSAoY2hhciAqKikgLTEpCisrICAgIGZyZWUgKGRvbWFpbi0+Y29udl90YWIpOworKworKyNpZmRlZiBfTElCQworKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoX19nY29udl90KSAtMSkKKysgICAgX19nY29udl9jbG9zZSAoZG9tYWluLT5jb252KTsKKysjZWxzZQorKyMgaWYgSEFWRV9JQ09OVgorKyAgaWYgKGRvbWFpbi0+Y29udiAhPSAoaWNvbnZfdCkgLTEpCisrICAgIGljb252X2Nsb3NlIChkb21haW4tPmNvbnYpOworKyMgZW5kaWYKKysjZW5kaWYKKyt9CisrCisgLyogTG9hZCB0aGUgbWVzc2FnZSBjYXRhbG9ncyBzcGVjaWZpZWQgYnkgRklMRU5BTUUuICBJZiBpdCBpcyBubyB2YWxpZAorICAgIG1lc3NhZ2UgY2F0YWxvZyBkbyBub3RoaW5nLiAgKi8KKyB2b2lkCistX25sX2xvYWRfZG9tYWluIChkb21haW5fZmlsZSkKKy0gICAgIHN0cnVjdCBsb2FkZWRfbDEwbmZpbGUgKmRvbWFpbl9maWxlOworK2ludGVybmFsX2Z1bmN0aW9uCisrX25sX2xvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2wxMG5maWxlICpkb21haW5fZmlsZSwKKysJCSBzdHJ1Y3QgYmluZGluZyAqZG9tYWluYmluZGluZykKKyB7CisgICBpbnQgZmQ7CisrICBzaXplX3Qgc2l6ZTsKKysjaWZkZWYgX0xJQkMKKysgIHN0cnVjdCBzdGF0NjQgc3Q7CisrI2Vsc2UKKyAgIHN0cnVjdCBzdGF0IHN0OworKyNlbmRpZgorICAgc3RydWN0IG1vX2ZpbGVfaGVhZGVyICpkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMTsKKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisgICBpbnQgdXNlX21tYXAgPSAwOworLSNlbmRpZgorICAgc3RydWN0IGxvYWRlZF9kb21haW4gKmRvbWFpbjsKKysgIGludCByZXZpc2lvbjsKKysgIGNvbnN0IGNoYXIgKm51bGxlbnRyeTsKKyAKKyAgIGRvbWFpbl9maWxlLT5kZWNpZGVkID0gMTsKKyAgIGRvbWFpbl9maWxlLT5kYXRhID0gTlVMTDsKKyAKKysgIC8qIE5vdGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VsZXNzIHRvIHN0b3JlIGRvbWFpbmJpbmRpbmcgaW4gZG9tYWluX2ZpbGUKKysgICAgIGJlY2F1c2UgZG9tYWluYmluZGluZyBtaWdodCBiZSA9PSBOVUxMIG5vdyBidXQgIT0gTlVMTCBsYXRlciAoYWZ0ZXIKKysgICAgIGEgY2FsbCB0byBiaW5kX3RleHRkb21haW5fY29kZXNldCkuICAqLworKworICAgLyogSWYgdGhlIHJlY29yZCBkb2VzIG5vdCByZXByZXNlbnQgYSB2YWxpZCBsb2NhbGUgdGhlIEZJTEVOQU1FCisgICAgICBtaWdodCBiZSBOVUxMLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgorICAgICAgc3BlY2lmaWNhdGlvbiB0aGUgbG9jYWxlIGZpbGUgbmFtZSBpcyBkaWZmZXJlbnQgZm9yIFhQRyBhbmQgQ0VOCitAQCAtODQsMjcgKzkzNywzMiBAQAorICAgICByZXR1cm47CisgCisgICAvKiBUcnkgdG8gb3BlbiB0aGUgYWRkcmVzc2VkIGZpbGUuICAqLworLSAgZmQgPSBvcGVuIChkb21haW5fZmlsZS0+ZmlsZW5hbWUsIE9fUkRPTkxZKTsKKysgIGZkID0gb3BlbiAoZG9tYWluX2ZpbGUtPmZpbGVuYW1lLCBPX1JET05MWSB8IE9fQklOQVJZKTsKKyAgIGlmIChmZCA9PSAtMSkKKyAgICAgcmV0dXJuOworIAorICAgLyogV2UgbXVzdCBrbm93IGFib3V0IHRoZSBzaXplIG9mIHRoZSBmaWxlLiAgKi8KKy0gIGlmIChmc3RhdCAoZmQsICZzdCkgIT0gMAorLSAgICAgICYmIHN0LnN0X3NpemUgPCAob2ZmX3QpIHNpemVvZiAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyKSkKKysgIGlmICgKKysjaWZkZWYgX0xJQkMKKysgICAgICBfX2J1aWx0aW5fZXhwZWN0IChmc3RhdDY0IChmZCwgJnN0KSAhPSAwLCAwKQorKyNlbHNlCisrICAgICAgX19idWlsdGluX2V4cGVjdCAoZnN0YXQgKGZkLCAmc3QpICE9IDAsIDApCisrI2VuZGlmCisrICAgICAgfHwgX19idWlsdGluX2V4cGVjdCAoKHNpemUgPSAoc2l6ZV90KSBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplLCAwKQorKyAgICAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKHNpemUgPCBzaXplb2YgKHN0cnVjdCBtb19maWxlX2hlYWRlciksIDApKQorICAgICB7CisgICAgICAgLyogU29tZXRoaW5nIHdlbnQgd3JvbmcuICAqLworICAgICAgIGNsb3NlIChmZCk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyNpZmRlZiBIQVZFX01NQVAKKyAgIC8qIE5vdyB3ZSBhcmUgcmVhZHkgdG8gbG9hZCB0aGUgZmlsZS4gIElmIG1tYXAoKSBpcyBhdmFpbGFibGUgd2UgdHJ5CisgICAgICB0aGlzIGZpcnN0LiAgSWYgbm90IGF2YWlsYWJsZSBvciBpdCBmYWlsZWQgd2UgdHJ5IHRvIGxvYWQgaXQuICAqLworLSAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFELAorKyAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFELAorIAkJCQkJIE1BUF9QUklWQVRFLCBmZCwgMCk7CisgCistICBpZiAoZGF0YSAhPSAoc3RydWN0IG1vX2ZpbGVfaGVhZGVyICopIC0xKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEgIT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSwgMSkpCisgICAgIHsKKyAgICAgICAvKiBtbWFwKCkgY2FsbCB3YXMgc3VjY2Vzc2Z1bC4gICovCisgICAgICAgY2xvc2UgKGZkKTsKK0BAIC0xMTYsMjQgKzk3NCwyNyBAQAorICAgICAgaXQgbWFudWFsbHkuICAqLworICAgaWYgKGRhdGEgPT0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSAtMSkKKyAgICAgeworLSAgICAgIG9mZl90IHRvX3JlYWQ7CisrICAgICAgc2l6ZV90IHRvX3JlYWQ7CisgICAgICAgY2hhciAqcmVhZF9wdHI7CisgCistICAgICAgZGF0YSA9IChzdHJ1Y3QgbW9fZmlsZV9oZWFkZXIgKikgbWFsbG9jIChzdC5zdF9zaXplKTsKKysgICAgICBkYXRhID0gKHN0cnVjdCBtb19maWxlX2hlYWRlciAqKSBtYWxsb2MgKHNpemUpOworICAgICAgIGlmIChkYXRhID09IE5VTEwpCisgCXJldHVybjsKKyAKKy0gICAgICB0b19yZWFkID0gc3Quc3Rfc2l6ZTsKKysgICAgICB0b19yZWFkID0gc2l6ZTsKKyAgICAgICByZWFkX3B0ciA9IChjaGFyICopIGRhdGE7CisgICAgICAgZG8KKyAJeworIAkgIGxvbmcgaW50IG5iID0gKGxvbmcgaW50KSByZWFkIChmZCwgcmVhZF9wdHIsIHRvX3JlYWQpOworLQkgIGlmIChuYiA9PSAtMSkKKysJICBpZiAobmIgPD0gMCkKKyAJICAgIHsKKysjaWZkZWYgRUlOVFIKKysJICAgICAgaWYgKG5iID09IC0xICYmIGVycm5vID09IEVJTlRSKQorKwkJY29udGludWU7CisrI2VuZGlmCisgCSAgICAgIGNsb3NlIChmZCk7CisgCSAgICAgIHJldHVybjsKKyAJICAgIH0KKy0KKyAJICByZWFkX3B0ciArPSBuYjsKKyAJICB0b19yZWFkIC09IG5iOworIAl9CitAQCAtMTQ0LDQ3ICsxMDA1LDM3OCBAQAorIAorICAgLyogVXNpbmcgdGhlIG1hZ2ljIG51bWJlciB3ZSBjYW4gdGVzdCB3aGV0aGVyIGl0IHJlYWxseSBpcyBhIG1lc3NhZ2UKKyAgICAgIGNhdGFsb2cgZmlsZS4gICovCistICBpZiAoZGF0YS0+bWFnaWMgIT0gX01BR0lDICYmIGRhdGEtPm1hZ2ljICE9IF9NQUdJQ19TV0FQUEVEKQorKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGRhdGEtPm1hZ2ljICE9IF9NQUdJQyAmJiBkYXRhLT5tYWdpYyAhPSBfTUFHSUNfU1dBUFBFRCwKKysJCQkwKSkKKyAgICAgeworICAgICAgIC8qIFRoZSBtYWdpYyBudW1iZXIgaXMgd3Jvbmc6IG5vdCBhIG1lc3NhZ2UgY2F0YWxvZyBmaWxlLiAgKi8KKy0jaWYgKGRlZmluZWQgSEFWRV9NTUFQICYmIGRlZmluZWQgSEFWRV9NVU5NQVAgJiYgIWRlZmluZWQgRElTQUxMT1dfTU1BUCkgXAorLSAgICB8fCBkZWZpbmVkIF9MSUJDCisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CisgICAgICAgcmV0dXJuOworICAgICB9CisgCistICBkb21haW5fZmlsZS0+ZGF0YQorLSAgICA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBtYWxsb2MgKHNpemVvZiAoc3RydWN0IGxvYWRlZF9kb21haW4pKTsKKy0gIGlmIChkb21haW5fZmlsZS0+ZGF0YSA9PSBOVUxMKQorKyAgZG9tYWluID0gKHN0cnVjdCBsb2FkZWRfZG9tYWluICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbikpOworKyAgaWYgKGRvbWFpbiA9PSBOVUxMKQorICAgICByZXR1cm47CisrICBkb21haW5fZmlsZS0+ZGF0YSA9IGRvbWFpbjsKKyAKKy0gIGRvbWFpbiA9IChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqKSBkb21haW5fZmlsZS0+ZGF0YTsKKyAgIGRvbWFpbi0+ZGF0YSA9IChjaGFyICopIGRhdGE7CisrICBkb21haW4tPnVzZV9tbWFwID0gdXNlX21tYXA7CisrICBkb21haW4tPm1tYXBfc2l6ZSA9IHNpemU7CisgICBkb21haW4tPm11c3Rfc3dhcCA9IGRhdGEtPm1hZ2ljICE9IF9NQUdJQzsKKysgIGRvbWFpbi0+bWFsbG9jZWQgPSBOVUxMOworIAorICAgLyogRmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF2YWlsYWJsZSB0YWJsZXMuICAqLworLSAgc3dpdGNoIChXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pKQorKyAgcmV2aXNpb24gPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+cmV2aXNpb24pOworKyAgLyogV2Ugc3VwcG9ydCBvbmx5IHRoZSBtYWpvciByZXZpc2lvbnMgMCBhbmQgMS4gICovCisrICBzd2l0Y2ggKHJldmlzaW9uID4+IDE2KQorICAgICB7CisgICAgIGNhc2UgMDoKKysgICAgY2FzZSAxOgorICAgICAgIGRvbWFpbi0+bnN0cmluZ3MgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bnN0cmluZ3MpOworLSAgICAgIGRvbWFpbi0+b3JpZ190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT5vcmlnX3RhYiA9IChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2Rlc2MgKikKKyAJKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+b3JpZ190YWJfb2Zmc2V0KSk7CistICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoc3RydWN0IHN0cmluZ19kZXNjICopCisrICAgICAgZG9tYWluLT50cmFuc190YWIgPSAoY29uc3Qgc3RydWN0IHN0cmluZ19kZXNjICopCisgCSgoY2hhciAqKSBkYXRhICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPnRyYW5zX3RhYl9vZmZzZXQpKTsKKyAgICAgICBkb21haW4tPmhhc2hfc2l6ZSA9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5oYXNoX3RhYl9zaXplKTsKKy0gICAgICBkb21haW4tPmhhc2hfdGFiID0gKG5sc191aW50MzIgKikKKy0JKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSk7CisrICAgICAgZG9tYWluLT5oYXNoX3RhYiA9CisrCShkb21haW4tPmhhc2hfc2l6ZSA+IDIKKysJID8gKGNvbnN0IG5sc191aW50MzIgKikKKysJICAgKChjaGFyICopIGRhdGEgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+aGFzaF90YWJfb2Zmc2V0KSkKKysJIDogTlVMTCk7CisrICAgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSBkb21haW4tPm11c3Rfc3dhcDsKKysKKysgICAgICAvKiBOb3cgZGlzcGF0Y2ggb24gdGhlIG1pbm9yIHJldmlzaW9uLiAgKi8KKysgICAgICBzd2l0Y2ggKHJldmlzaW9uICYgMHhmZmZmKQorKwl7CisrCWNhc2UgMDoKKysJICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkgIGJyZWFrOworKwljYXNlIDE6CisrCWRlZmF1bHQ6CisrCSAgeworKwkgICAgbmxzX3VpbnQzMiBuX3N5c2RlcF9zdHJpbmdzOworKworKwkgICAgaWYgKGRvbWFpbi0+aGFzaF90YWIgPT0gTlVMTCkKKysJICAgICAgLyogVGhpcyBpcyBpbnZhbGlkLiAgVGhlc2UgbWlub3IgcmV2aXNpb25zIG5lZWQgYSBoYXNoIHRhYmxlLiAgKi8KKysJICAgICAgZ290byBpbnZhbGlkOworKworKwkgICAgbl9zeXNkZXBfc3RyaW5ncyA9CisrCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBkYXRhLT5uX3N5c2RlcF9zdHJpbmdzKTsKKysJICAgIGlmIChuX3N5c2RlcF9zdHJpbmdzID4gMCkKKysJICAgICAgeworKwkJbmxzX3VpbnQzMiBuX3N5c2RlcF9zZWdtZW50czsKKysJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqc3lzZGVwX3NlZ21lbnRzOworKwkJY29uc3QgY2hhciAqKnN5c2RlcF9zZWdtZW50X3ZhbHVlczsKKysJCWNvbnN0IG5sc191aW50MzIgKm9yaWdfc3lzZGVwX3RhYjsKKysJCWNvbnN0IG5sc191aW50MzIgKnRyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyIG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQlzaXplX3QgbWVtbmVlZDsKKysJCWNoYXIgKm1lbTsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX29yaWdfc3lzZGVwX3RhYjsKKysJCXN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKmlubWVtX3RyYW5zX3N5c2RlcF90YWI7CisrCQlubHNfdWludDMyICppbm1lbV9oYXNoX3RhYjsKKysJCXVuc2lnbmVkIGludCBpLCBqOworKworKwkJLyogR2V0IHRoZSB2YWx1ZXMgb2YgdGhlIHN5c3RlbSBkZXBlbmRlbnQgc2VnbWVudHMuICAqLworKwkJbl9zeXNkZXBfc2VnbWVudHMgPQorKwkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+bl9zeXNkZXBfc2VnbWVudHMpOworKwkJc3lzZGVwX3NlZ21lbnRzID0gKGNvbnN0IHN0cnVjdCBzeXNkZXBfc2VnbWVudCAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+c3lzZGVwX3NlZ21lbnRzX29mZnNldCkpOworKwkJc3lzZGVwX3NlZ21lbnRfdmFsdWVzID0KKysJCSAgYWxsb2NhIChuX3N5c2RlcF9zZWdtZW50cyAqIHNpemVvZiAoY29uc3QgY2hhciAqKSk7CisrCQlmb3IgKGkgPSAwOyBpIDwgbl9zeXNkZXBfc2VnbWVudHM7IGkrKykKKysJCSAgeworKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUgPQorKwkJICAgICAgKGNoYXIgKikgZGF0YQorKwkJICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgc3lzZGVwX3NlZ21lbnRzW2ldLm9mZnNldCk7CisrCQkgICAgbmxzX3VpbnQzMiBuYW1lbGVuID0KKysJCSAgICAgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBzeXNkZXBfc2VnbWVudHNbaV0ubGVuZ3RoKTsKKysKKysJCSAgICBpZiAoIShuYW1lbGVuID4gMCAmJiBuYW1lW25hbWVsZW4gLSAxXSA9PSAnXDAnKSkKKysJCSAgICAgIHsKKysJCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJCQlnb3RvIGludmFsaWQ7CisrCQkgICAgICB9CisrCisrCQkgICAgc3lzZGVwX3NlZ21lbnRfdmFsdWVzW2ldID0gZ2V0X3N5c2RlcF9zZWdtZW50X3ZhbHVlIChuYW1lKTsKKysJCSAgfQorKworKwkJb3JpZ19zeXNkZXBfdGFiID0gKGNvbnN0IG5sc191aW50MzIgKikKKysJCSAgKChjaGFyICopIGRhdGEKKysJCSAgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIGRhdGEtPm9yaWdfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysJCXRyYW5zX3N5c2RlcF90YWIgPSAoY29uc3QgbmxzX3VpbnQzMiAqKQorKwkJICAoKGNoYXIgKikgZGF0YQorKwkJICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwgZGF0YS0+dHJhbnNfc3lzZGVwX3RhYl9vZmZzZXQpKTsKKysKKysJCS8qIENvbXB1dGUgdGhlIGFtb3VudCBvZiBhZGRpdGlvbmFsIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorKwkJICAgc3lzdGVtIGRlcGVuZGVudCBzdHJpbmdzIGFuZCB0aGUgYXVnbWVudGVkIGhhc2ggdGFibGUuCisrCQkgICBBdCB0aGUgc2FtZSB0aW1lLCBhbHNvIGRyb3Agc3RyaW5nIHBhaXJzIHdoaWNoIHJlZmVyIHRvCisrCQkgICBhbiB1bmRlZmluZWQgc3lzdGVtIGRlcGVuZGVudCBzZWdtZW50LiAgKi8KKysJCW5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJbWVtbmVlZCA9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysJCWZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgIHsKKysJCSAgICBpbnQgdmFsaWQgPSAxOworKwkJICAgIHNpemVfdCBuZWVkc1syXTsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJICAgICAgeworKwkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkgIChjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqKQorKwkJCSAgKChjaGFyICopIGRhdGEKKysJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQlqID09IDAKKysJCQkJPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJc2l6ZV90IG5lZWQgPSAwOworKwkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQlpZiAoVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnN5c2RlcHJlZikgIT0gU0VHTUVOVFNfRU5EKQorKwkJCSAgZm9yIChwID0gc3lzZGVwX3N0cmluZy0+c2VnbWVudHM7OyBwKyspCisrCQkJICAgIHsKKysJCQkgICAgICBubHNfdWludDMyIHN5c2RlcHJlZjsKKysKKysJCQkgICAgICBuZWVkICs9IFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zZWdzaXplKTsKKysKKysJCQkgICAgICBzeXNkZXByZWYgPSBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkgICAgICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJYnJlYWs7CisrCisrCQkJICAgICAgaWYgKHN5c2RlcHJlZiA+PSBuX3N5c2RlcF9zZWdtZW50cykKKysJCQkJeworKwkJCQkgIC8qIEludmFsaWQuICAqLworKwkJCQkgIGZyZWVhIChzeXNkZXBfc2VnbWVudF92YWx1ZXMpOworKwkJCQkgIGdvdG8gaW52YWxpZDsKKysJCQkJfQorKworKwkJCSAgICAgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQl7CisrCQkJCSAgLyogVGhpcyBwYXJ0aWN1bGFyIHN0cmluZyBwYWlyIGlzIGludmFsaWQuICAqLworKwkJCQkgIHZhbGlkID0gMDsKKysJCQkJICBicmVhazsKKysJCQkJfQorKworKwkJCSAgICAgIG5lZWQgKz0gc3RybGVuIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSk7CisrCQkJICAgIH0KKysKKysJCQluZWVkc1tqXSA9IG5lZWQ7CisrCQkJaWYgKCF2YWxpZCkKKysJCQkgIGJyZWFrOworKwkJICAgICAgfQorKworKwkJICAgIGlmICh2YWxpZCkKKysJCSAgICAgIHsKKysJCQluX2lubWVtX3N5c2RlcF9zdHJpbmdzKys7CisrCQkJbWVtbmVlZCArPSBuZWVkc1swXSArIG5lZWRzWzFdOworKwkJICAgICAgfQorKwkJICB9CisrCQltZW1uZWVkICs9IDIgKiBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKworKwkJaWYgKG5faW5tZW1fc3lzZGVwX3N0cmluZ3MgPiAwKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgaW50IGs7CisrCisrCQkgICAgLyogQWxsb2NhdGUgYWRkaXRpb25hbCBtZW1vcnkuICAqLworKwkJICAgIG1lbSA9IChjaGFyICopIG1hbGxvYyAobWVtbmVlZCk7CisrCQkgICAgaWYgKG1lbSA9PSBOVUxMKQorKwkJICAgICAgZ290byBpbnZhbGlkOworKworKwkJICAgIGRvbWFpbi0+bWFsbG9jZWQgPSBtZW07CisrCQkgICAgaW5tZW1fb3JpZ19zeXNkZXBfdGFiID0gKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MgKikgbWVtOworKwkJICAgIG1lbSArPSBuX2lubWVtX3N5c2RlcF9zdHJpbmdzCisrCQkJICAgKiBzaXplb2YgKHN0cnVjdCBzeXNkZXBfc3RyaW5nX2Rlc2MpOworKwkJICAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWIgPSAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqKSBtZW07CisrCQkgICAgbWVtICs9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3MKKysJCQkgICAqIHNpemVvZiAoc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyk7CisrCQkgICAgaW5tZW1faGFzaF90YWIgPSAobmxzX3VpbnQzMiAqKSBtZW07CisrCQkgICAgbWVtICs9IGRvbWFpbi0+aGFzaF9zaXplICogc2l6ZW9mIChubHNfdWludDMyKTsKKysKKysJCSAgICAvKiBDb21wdXRlIHRoZSBzeXN0ZW0gZGVwZW5kZW50IHN0cmluZ3MuICAqLworKwkJICAgIGsgPSAwOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCBuX3N5c2RlcF9zdHJpbmdzOyBpKyspCisrCQkgICAgICB7CisrCQkJaW50IHZhbGlkID0gMTsKKysKKysJCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKQorKwkJCSAgeworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc3lzZGVwX3N0cmluZyAqc3lzZGVwX3N0cmluZyA9CisrCQkJICAgICAgKGNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICopCisrCQkJICAgICAgKChjaGFyICopIGRhdGEKKysJCQkgICAgICAgKyBXIChkb21haW4tPm11c3Rfc3dhcCwKKysJCQkJICAgIGogPT0gMAorKwkJCQkgICAgPyBvcmlnX3N5c2RlcF90YWJbaV0KKysJCQkJICAgIDogdHJhbnNfc3lzZGVwX3RhYltpXSkpOworKwkJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnbWVudF9wYWlyICpwID0KKysJCQkgICAgICBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czsKKysKKysJCQkgICAgaWYgKFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpCisrCQkJCSE9IFNFR01FTlRTX0VORCkKKysJCQkgICAgICBmb3IgKHAgPSBzeXNkZXBfc3RyaW5nLT5zZWdtZW50czs7IHArKykKKysJCQkJeworKwkJCQkgIG5sc191aW50MzIgc3lzZGVwcmVmOworKworKwkJCQkgIHN5c2RlcHJlZiA9CisrCQkJCSAgICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKTsKKysJCQkJICBpZiAoc3lzZGVwcmVmID09IFNFR01FTlRTX0VORCkKKysJCQkJICAgIGJyZWFrOworKworKwkJCQkgIGlmIChzeXNkZXBfc2VnbWVudF92YWx1ZXNbc3lzZGVwcmVmXSA9PSBOVUxMKQorKwkJCQkgICAgeworKwkJCQkgICAgICAvKiBUaGlzIHBhcnRpY3VsYXIgc3RyaW5nIHBhaXIgaXMKKysJCQkJCSBpbnZhbGlkLiAgKi8KKysJCQkJICAgICAgdmFsaWQgPSAwOworKwkJCQkgICAgICBicmVhazsKKysJCQkJICAgIH0KKysJCQkJfQorKworKwkJCSAgICBpZiAoIXZhbGlkKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgfQorKworKwkJCWlmICh2YWxpZCkKKysJCQkgIHsKKysJCQkgICAgZm9yIChqID0gMDsgaiA8IDI7IGorKykKKysJCQkgICAgICB7CisrCQkJCWNvbnN0IHN0cnVjdCBzeXNkZXBfc3RyaW5nICpzeXNkZXBfc3RyaW5nID0KKysJCQkJICAoY29uc3Qgc3RydWN0IHN5c2RlcF9zdHJpbmcgKikKKysJCQkJICAoKGNoYXIgKikgZGF0YQorKwkJCQkgICArIFcgKGRvbWFpbi0+bXVzdF9zd2FwLAorKwkJCQkJaiA9PSAwCisrCQkJCQk/IG9yaWdfc3lzZGVwX3RhYltpXQorKwkJCQkJOiB0cmFuc19zeXNkZXBfdGFiW2ldKSk7CisrCQkJCWNvbnN0IGNoYXIgKnN0YXRpY19zZWdtZW50cyA9CisrCQkJCSAgKGNoYXIgKikgZGF0YQorKwkJCQkgICsgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHN5c2RlcF9zdHJpbmctPm9mZnNldCk7CisrCQkJCWNvbnN0IHN0cnVjdCBzZWdtZW50X3BhaXIgKnAgPQorKwkJCQkgIHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOworKworKwkJCQkvKiBDb25jYXRlbmF0ZSB0aGUgc2VnbWVudHMsIGFuZCBmaWxsCisrCQkJCSAgIGlubWVtX29yaWdfc3lzZGVwX3RhYltrXSAoZm9yIGogPT0gMCkgYW5kCisrCQkJCSAgIGlubWVtX3RyYW5zX3N5c2RlcF90YWJba10gKGZvciBqID09IDEpLiAgKi8KKysKKysJCQkJc3RydWN0IHN5c2RlcF9zdHJpbmdfZGVzYyAqaW5tZW1fdGFiX2VudHJ5ID0KKysJCQkJICAoaiA9PSAwCisrCQkJCSAgID8gaW5tZW1fb3JpZ19zeXNkZXBfdGFiCisrCQkJCSAgIDogaW5tZW1fdHJhbnNfc3lzZGVwX3RhYikKKysJCQkJICArIGs7CisrCisrCQkJCWlmIChXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c3lzZGVwcmVmKQorKwkJCQkgICAgPT0gU0VHTUVOVFNfRU5EKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIE9ubHkgb25lIHN0YXRpYyBzZWdtZW50LiAgKi8KKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+bGVuZ3RoID0KKysJCQkJICAgICAgVyAoZG9tYWluLT5tdXN0X3N3YXAsIHAtPnNlZ3NpemUpOworKwkJCQkgICAgaW5tZW1fdGFiX2VudHJ5LT5wb2ludGVyID0gc3RhdGljX3NlZ21lbnRzOworKwkJCQkgIH0KKysJCQkJZWxzZQorKwkJCQkgIHsKKysJCQkJICAgIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlciA9IG1lbTsKKysKKysJCQkJICAgIGZvciAocCA9IHN5c2RlcF9zdHJpbmctPnNlZ21lbnRzOzsgcCsrKQorKwkJCQkgICAgICB7CisrCQkJCQlubHNfdWludDMyIHNlZ3NpemUgPQorKwkJCQkJICBXIChkb21haW4tPm11c3Rfc3dhcCwgcC0+c2Vnc2l6ZSk7CisrCQkJCQlubHNfdWludDMyIHN5c2RlcHJlZiA9CisrCQkJCQkgIFcgKGRvbWFpbi0+bXVzdF9zd2FwLCBwLT5zeXNkZXByZWYpOworKwkJCQkJc2l6ZV90IG47CisrCisrCQkJCQlpZiAoc2Vnc2l6ZSA+IDApCisrCQkJCQkgIHsKKysJCQkJCSAgICBtZW1jcHkgKG1lbSwgc3RhdGljX3NlZ21lbnRzLCBzZWdzaXplKTsKKysJCQkJCSAgICBtZW0gKz0gc2Vnc2l6ZTsKKysJCQkJCSAgICBzdGF0aWNfc2VnbWVudHMgKz0gc2Vnc2l6ZTsKKysJCQkJCSAgfQorKworKwkJCQkJaWYgKHN5c2RlcHJlZiA9PSBTRUdNRU5UU19FTkQpCisrCQkJCQkgIGJyZWFrOworKworKwkJCQkJbiA9IHN0cmxlbiAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzW3N5c2RlcHJlZl0pOworKwkJCQkJbWVtY3B5IChtZW0sIHN5c2RlcF9zZWdtZW50X3ZhbHVlc1tzeXNkZXByZWZdLCBuKTsKKysJCQkJCW1lbSArPSBuOworKwkJCQkgICAgICB9CisrCisrCQkJCSAgICBpbm1lbV90YWJfZW50cnktPmxlbmd0aCA9CisrCQkJCSAgICAgIG1lbSAtIGlubWVtX3RhYl9lbnRyeS0+cG9pbnRlcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKworKwkJCSAgICBrKys7CisrCQkJICB9CisrCQkgICAgICB9CisrCQkgICAgaWYgKGsgIT0gbl9pbm1lbV9zeXNkZXBfc3RyaW5ncykKKysJCSAgICAgIGFib3J0ICgpOworKworKwkJICAgIC8qIENvbXB1dGUgdGhlIGF1Z21lbnRlZCBoYXNoIHRhYmxlLiAgKi8KKysJCSAgICBmb3IgKGkgPSAwOyBpIDwgZG9tYWluLT5oYXNoX3NpemU7IGkrKykKKysJCSAgICAgIGlubWVtX2hhc2hfdGFiW2ldID0KKysJCQlXIChkb21haW4tPm11c3Rfc3dhcF9oYXNoX3RhYiwgZG9tYWluLT5oYXNoX3RhYltpXSk7CisrCQkgICAgZm9yIChpID0gMDsgaSA8IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7IGkrKykKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICptc2dpZCA9IGlubWVtX29yaWdfc3lzZGVwX3RhYltpXS5wb2ludGVyOworKwkJCW5sc191aW50MzIgaGFzaF92YWwgPSBoYXNoX3N0cmluZyAobXNnaWQpOworKwkJCW5sc191aW50MzIgaWR4ID0gaGFzaF92YWwgJSBkb21haW4tPmhhc2hfc2l6ZTsKKysJCQlubHNfdWludDMyIGluY3IgPQorKwkJCSAgMSArIChoYXNoX3ZhbCAlIChkb21haW4tPmhhc2hfc2l6ZSAtIDIpKTsKKysKKysJCQlmb3IgKDs7KQorKwkJCSAgeworKwkJCSAgICBpZiAoaW5tZW1faGFzaF90YWJbaWR4XSA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogSGFzaCB0YWJsZSBlbnRyeSBpcyBlbXB0eS4gIFVzZSBpdC4gICovCisrCQkJCWlubWVtX2hhc2hfdGFiW2lkeF0gPSAxICsgZG9tYWluLT5uc3RyaW5ncyArIGk7CisrCQkJCWJyZWFrOworKwkJCSAgICAgIH0KKysKKysJCQkgICAgaWYgKGlkeCA+PSBkb21haW4tPmhhc2hfc2l6ZSAtIGluY3IpCisrCQkJICAgICAgaWR4IC09IGRvbWFpbi0+aGFzaF9zaXplIC0gaW5jcjsKKysJCQkgICAgZWxzZQorKwkJCSAgICAgIGlkeCArPSBpbmNyOworKwkJCSAgfQorKwkJICAgICAgfQorKworKwkJICAgIGRvbWFpbi0+bl9zeXNkZXBfc3RyaW5ncyA9IG5faW5tZW1fc3lzZGVwX3N0cmluZ3M7CisrCQkgICAgZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBpbm1lbV9vcmlnX3N5c2RlcF90YWI7CisrCQkgICAgZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gaW5tZW1fdHJhbnNfc3lzZGVwX3RhYjsKKysKKysJCSAgICBkb21haW4tPmhhc2hfdGFiID0gaW5tZW1faGFzaF90YWI7CisrCQkgICAgZG9tYWluLT5tdXN0X3N3YXBfaGFzaF90YWIgPSAwOworKwkJICB9CisrCQllbHNlCisrCQkgIHsKKysJCSAgICBkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJICAgIGRvbWFpbi0+b3JpZ19zeXNkZXBfdGFiID0gTlVMTDsKKysJCSAgICBkb21haW4tPnRyYW5zX3N5c2RlcF90YWIgPSBOVUxMOworKwkJICB9CisrCisrCQlmcmVlYSAoc3lzZGVwX3NlZ21lbnRfdmFsdWVzKTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlkb21haW4tPm5fc3lzZGVwX3N0cmluZ3MgPSAwOworKwkJZG9tYWluLT5vcmlnX3N5c2RlcF90YWIgPSBOVUxMOworKwkJZG9tYWluLT50cmFuc19zeXNkZXBfdGFiID0gTlVMTDsKKysJICAgICAgfQorKwkgIH0KKysJICBicmVhazsKKysJfQorICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorLSAgICAgIC8qIFRoaXMgaXMgYW4gaWxsZWdhbCByZXZpc2lvbi4gICovCistI2lmIChkZWZpbmVkIEhBVkVfTU1BUCAmJiBkZWZpbmVkIEhBVkVfTVVOTUFQICYmICFkZWZpbmVkIERJU0FMTE9XX01NQVApIFwKKy0gICAgfHwgZGVmaW5lZCBfTElCQworKyAgICAgIC8qIFRoaXMgaXMgYW4gaW52YWxpZCByZXZpc2lvbi4gICovCisrICAgIGludmFsaWQ6CisrICAgICAgLyogVGhpcyBpcyBhbiBpbnZhbGlkIC5tbyBmaWxlLiAgKi8KKysgICAgICBpZiAoZG9tYWluLT5tYWxsb2NlZCkKKysJZnJlZSAoZG9tYWluLT5tYWxsb2NlZCk7CisrI2lmZGVmIEhBVkVfTU1BUAorICAgICAgIGlmICh1c2VfbW1hcCkKKy0JbXVubWFwICgoY2FkZHJfdCkgZGF0YSwgc3Quc3Rfc2l6ZSk7CisrCW11bm1hcCAoKGNhZGRyX3QpIGRhdGEsIHNpemUpOworICAgICAgIGVsc2UKKyAjZW5kaWYKKyAJZnJlZSAoZGF0YSk7CitAQCAtMTkzLDcgKzEzODUsMzYgQEAKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIC8qIFNob3cgdGhhdCBvbmUgZG9tYWluIGlzIGNoYW5nZWQuICBUaGlzIG1pZ2h0IG1ha2Ugc29tZSBjYWNoZWQKKy0gICAgIHRyYW5zbGF0aW9ucyBpbnZhbGlkLiAgKi8KKy0gICsrX25sX21zZ19jYXRfY250cjsKKysgIC8qIE5vdyBpbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgc2V0IGNvbnZlcnRlciBmcm9tIHRoZSBjaGFyYWN0ZXIgc2V0CisrICAgICB0aGUgZmlsZSBpcyBlbmNvZGVkIHdpdGggKGZvdW5kIGluIHRoZSBoZWFkZXIgZW50cnkpIHRvIHRoZSBkb21haW4ncworKyAgICAgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQgb3IgdGhlIGxvY2FsZSdzIGNoYXJhY3RlciBzZXQuICAqLworKyAgbnVsbGVudHJ5ID0gX25sX2luaXRfZG9tYWluX2NvbnYgKGRvbWFpbl9maWxlLCBkb21haW4sIGRvbWFpbmJpbmRpbmcpOworKworKyAgLyogQWxzbyBsb29rIGZvciBhIHBsdXJhbCBzcGVjaWZpY2F0aW9uLiAgKi8KKysgIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gKG51bGxlbnRyeSwgJmRvbWFpbi0+cGx1cmFsLCAmZG9tYWluLT5ucGx1cmFscyk7CisgfQorKworKworKyNpZmRlZiBfTElCQworK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19ubF91bmxvYWRfZG9tYWluIChzdHJ1Y3QgbG9hZGVkX2RvbWFpbiAqZG9tYWluKQorK3sKKysgIGlmIChkb21haW4tPnBsdXJhbCAhPSAmX19nZXR0ZXh0X2dlcm1hbmljX3BsdXJhbCkKKysgICAgX19nZXR0ZXh0X2ZyZWVfZXhwIChkb21haW4tPnBsdXJhbCk7CisrCisrICBfbmxfZnJlZV9kb21haW5fY29udiAoZG9tYWluKTsKKysKKysgIGlmIChkb21haW4tPm1hbGxvY2VkKQorKyAgICBmcmVlIChkb21haW4tPm1hbGxvY2VkKTsKKysKKysjIGlmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKysgIGlmIChkb21haW4tPnVzZV9tbWFwKQorKyAgICBtdW5tYXAgKChjYWRkcl90KSBkb21haW4tPmRhdGEsIGRvbWFpbi0+bW1hcF9zaXplKTsKKysgIGVsc2UKKysjIGVuZGlmCS8qIF9QT1NJWF9NQVBQRURfRklMRVMgKi8KKysgICAgZnJlZSAoKHZvaWQgKikgZG9tYWluLT5kYXRhKTsKKysKKysgIGZyZWUgKGRvbWFpbik7CisrfQorKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvY2FsY2hhcnNldC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsY2hhcnNldC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNDc4NzI5MzkyIC0wNDAwCitAQCAtMCwwICsxLDM5OCBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogU3BlY2lmaWNhdGlvbi4gICovCisrI2luY2x1ZGUgImxvY2FsY2hhcnNldC5oIgorKworKyNpZiBIQVZFX1NURERFRl9ICisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaWYgSEFWRV9TVFJJTkdfSAorKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisrI2Vsc2UKKysjIGluY2x1ZGUgPHN0cmluZ3MuaD4KKysjZW5kaWYKKysjaWYgSEFWRV9TVERMSUJfSAorKyMgaW5jbHVkZSA8c3RkbGliLmg+CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrIyB1bmRlZiBXSU4zMiAgIC8qIGF2b2lkIHdhcm5pbmcgb24gbWluZ3czMiAqLworKyMgZGVmaW5lIFdJTjMyCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX19FTVhfXworKy8qIEFzc3VtZSBFTVggcHJvZ3JhbSBydW5zIG9uIE9TLzIsIGV2ZW4gaWYgY29tcGlsZWQgdW5kZXIgRE9TLiAgKi8KKysjIGRlZmluZSBPUzIKKysjZW5kaWYKKysKKysjaWYgIWRlZmluZWQgV0lOMzIKKysjIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorKyMgIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrIyBlbHNlCisrIyAgaWYgSEFWRV9TRVRMT0NBTEUKKysjICAgaW5jbHVkZSA8bG9jYWxlLmg+CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZCBPUzIKKysjIGRlZmluZSBJTkNMX0RPUworKyMgaW5jbHVkZSA8b3MyLmg+CisrI2VuZGlmCisrCisrI2lmIEVOQUJMRV9SRUxPQ0FUQUJMRQorKyMgaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysjZWxzZQorKyMgZGVmaW5lIHJlbG9jYXRlKHBhdGhuYW1lKSAocGF0aG5hbWUpCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fIHx8IGRlZmluZWQgX19FTVhfXyB8fCBkZWZpbmVkIF9fREpHUFBfXworKyAgLyogV2luMzIsIE9TLzIsIERPUyAqLworKyMgZGVmaW5lIElTU0xBU0goQykgKChDKSA9PSAnLycgfHwgKEMpID09ICdcXCcpCisrI2VuZGlmCisrCisrI2lmbmRlZiBESVJFQ1RPUllfU0VQQVJBVE9SCisrIyBkZWZpbmUgRElSRUNUT1JZX1NFUEFSQVRPUiAnLycKKysjZW5kaWYKKysKKysjaWZuZGVmIElTU0xBU0gKKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gRElSRUNUT1JZX1NFUEFSQVRPUikKKysjZW5kaWYKKysKKysjaWYgSEFWRV9ERUNMX0dFVENfVU5MT0NLRUQKKysjIHVuZGVmIGdldGMKKysjIGRlZmluZSBnZXRjIGdldGNfdW5sb2NrZWQKKysjZW5kaWYKKysKKysvKiBUaGUgZm9sbG93aW5nIHN0YXRpYyB2YXJpYWJsZSBpcyBkZWNsYXJlZCAndm9sYXRpbGUnIHRvIGF2b2lkIGEKKysgICBwb3NzaWJsZSBtdWx0aXRocmVhZCBwcm9ibGVtIGluIHRoZSBmdW5jdGlvbiBnZXRfY2hhcnNldF9hbGlhc2VzLiBJZiB3ZQorKyAgIGFyZSBydW5uaW5nIGluIGEgdGhyZWFkZWQgZW52aXJvbm1lbnQsIGFuZCBpZiB0d28gdGhyZWFkcyBpbml0aWFsaXplCisrICAgJ2NoYXJzZXRfYWxpYXNlcycgc2ltdWx0YW5lb3VzbHksIGJvdGggd2lsbCBwcm9kdWNlIHRoZSBzYW1lIHZhbHVlLAorKyAgIGFuZCBldmVyeXRoaW5nIHdpbGwgYmUgb2sgaWYgdGhlIHR3byBhc3NpZ25tZW50cyB0byAnY2hhcnNldF9hbGlhc2VzJworKyAgIGFyZSBhdG9taWMuIEJ1dCBJIGRvbid0IGtub3cgd2hhdCB3aWxsIGhhcHBlbiBpZiB0aGUgdHdvIGFzc2lnbm1lbnRzIG1peC4gICovCisrI2lmIF9fU1REQ19fICE9IDEKKysjIGRlZmluZSB2b2xhdGlsZSAvKiBlbXB0eSAqLworKyNlbmRpZgorKy8qIFBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUsIGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4KKysgICByZWFkLCBlbHNlIE5VTEwuICBJdHMgZm9ybWF0IGlzOgorKyAgIEFMSUFTXzEgJ1wwJyBDQU5PTklDQUxfMSAnXDAnIC4uLiBBTElBU19uICdcMCcgQ0FOT05JQ0FMX24gJ1wwJyAnXDAnICAqLworK3N0YXRpYyBjb25zdCBjaGFyICogdm9sYXRpbGUgY2hhcnNldF9hbGlhc2VzOworKworKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICoKKytnZXRfY2hhcnNldF9hbGlhc2VzICgpCisreworKyAgY29uc3QgY2hhciAqY3A7CisrCisrICBjcCA9IGNoYXJzZXRfYWxpYXNlczsKKysgIGlmIChjcCA9PSBOVUxMKQorKyAgICB7CisrI2lmICEoZGVmaW5lZCBWTVMgfHwgZGVmaW5lZCBXSU4zMikKKysgICAgICBGSUxFICpmcDsKKysgICAgICBjb25zdCBjaGFyICpkaXIgPSByZWxvY2F0ZSAoTElCRElSKTsKKysgICAgICBjb25zdCBjaGFyICpiYXNlID0gImNoYXJzZXQuYWxpYXMiOworKyAgICAgIGNoYXIgKmZpbGVfbmFtZTsKKysKKysgICAgICAvKiBDb25jYXRlbmF0ZSBkaXIgYW5kIGJhc2UgaW50byBmcmVzaGx5IGFsbG9jYXRlZCBmaWxlX25hbWUuICAqLworKyAgICAgIHsKKysJc2l6ZV90IGRpcl9sZW4gPSBzdHJsZW4gKGRpcik7CisrCXNpemVfdCBiYXNlX2xlbiA9IHN0cmxlbiAoYmFzZSk7CisrCWludCBhZGRfc2xhc2ggPSAoZGlyX2xlbiA+IDAgJiYgIUlTU0xBU0ggKGRpcltkaXJfbGVuIC0gMV0pKTsKKysJZmlsZV9uYW1lID0gKGNoYXIgKikgbWFsbG9jIChkaXJfbGVuICsgYWRkX3NsYXNoICsgYmFzZV9sZW4gKyAxKTsKKysJaWYgKGZpbGVfbmFtZSAhPSBOVUxMKQorKwkgIHsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lLCBkaXIsIGRpcl9sZW4pOworKwkgICAgaWYgKGFkZF9zbGFzaCkKKysJICAgICAgZmlsZV9uYW1lW2Rpcl9sZW5dID0gRElSRUNUT1JZX1NFUEFSQVRPUjsKKysJICAgIG1lbWNweSAoZmlsZV9uYW1lICsgZGlyX2xlbiArIGFkZF9zbGFzaCwgYmFzZSwgYmFzZV9sZW4gKyAxKTsKKysJICB9CisrICAgICAgfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBmb3BlbiAoZmlsZV9uYW1lLCAiciIpKSA9PSBOVUxMKQorKwkvKiBPdXQgb2YgbWVtb3J5IG9yIGZpbGUgbm90IGZvdW5kLCB0cmVhdCBpdCBhcyBlbXB0eS4gICovCisrCWNwID0gIiI7CisrICAgICAgZWxzZQorKwl7CisrCSAgLyogUGFyc2UgdGhlIGZpbGUncyBjb250ZW50cy4gICovCisrCSAgaW50IGM7CisrCSAgY2hhciBidWYxWzUwKzFdOworKwkgIGNoYXIgYnVmMls1MCsxXTsKKysJICBjaGFyICpyZXNfcHRyID0gTlVMTDsKKysJICBzaXplX3QgcmVzX3NpemUgPSAwOworKwkgIHNpemVfdCBsMSwgbDI7CisrCisrCSAgZm9yICg7OykKKysJICAgIHsKKysJICAgICAgYyA9IGdldGMgKGZwKTsKKysJICAgICAgaWYgKGMgPT0gRU9GKQorKwkJYnJlYWs7CisrCSAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorKwkJY29udGludWU7CisrCSAgICAgIGlmIChjID09ICcjJykKKysJCXsKKysJCSAgLyogU2tpcCBjb21tZW50LCB0byBlbmQgb2YgbGluZS4gICovCisrCQkgIGRvCisrCQkgICAgYyA9IGdldGMgKGZwKTsKKysJCSAgd2hpbGUgKCEoYyA9PSBFT0YgfHwgYyA9PSAnXG4nKSk7CisrCQkgIGlmIChjID09IEVPRikKKysJCSAgICBicmVhazsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICAgIHVuZ2V0YyAoYywgZnApOworKwkgICAgICBpZiAoZnNjYW5mIChmcCwgIiU1MHMgJTUwcyIsIGJ1ZjEsIGJ1ZjIpIDwgMikKKysJCWJyZWFrOworKwkgICAgICBsMSA9IHN0cmxlbiAoYnVmMSk7CisrCSAgICAgIGwyID0gc3RybGVuIChidWYyKTsKKysJICAgICAgaWYgKHJlc19zaXplID09IDApCisrCQl7CisrCQkgIHJlc19zaXplID0gbDEgKyAxICsgbDIgKyAxOworKwkJICByZXNfcHRyID0gKGNoYXIgKikgbWFsbG9jIChyZXNfc2l6ZSArIDEpOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHJlc19zaXplICs9IGwxICsgMSArIGwyICsgMTsKKysJCSAgcmVzX3B0ciA9IChjaGFyICopIHJlYWxsb2MgKHJlc19wdHIsIHJlc19zaXplICsgMSk7CisrCQl9CisrCSAgICAgIGlmIChyZXNfcHRyID09IE5VTEwpCisrCQl7CisrCQkgIC8qIE91dCBvZiBtZW1vcnkuICovCisrCQkgIHJlc19zaXplID0gMDsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSkgLSAobDEgKyAxKSwgYnVmMSk7CisrCSAgICAgIHN0cmNweSAocmVzX3B0ciArIHJlc19zaXplIC0gKGwyICsgMSksIGJ1ZjIpOworKwkgICAgfQorKwkgIGZjbG9zZSAoZnApOworKwkgIGlmIChyZXNfc2l6ZSA9PSAwKQorKwkgICAgY3AgPSAiIjsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICoocmVzX3B0ciArIHJlc19zaXplKSA9ICdcMCc7CisrCSAgICAgIGNwID0gcmVzX3B0cjsKKysJICAgIH0KKysJfQorKworKyAgICAgIGlmIChmaWxlX25hbWUgIT0gTlVMTCkKKysJZnJlZSAoZmlsZV9uYW1lKTsKKysKKysjZWxzZQorKworKyMgaWYgZGVmaW5lZCBWTVMKKysgICAgICAvKiBUbyBhdm9pZCB0aGUgdHJvdWJsZXMgb2YgYW4gZXh0cmEgZmlsZSBjaGFyc2V0LmFsaWFzX3ZtcyBpbiB0aGUKKysJIHNvdXJjZXMgb2YgbWFueSBHTlUgcGFja2FnZXMsIHNpbXBseSBpbmxpbmUgdGhlIGFsaWFzZXMgaGVyZS4gICovCisrICAgICAgLyogVGhlIGxpc3Qgb2YgZW5jb2RpbmdzIGlzIHRha2VuIGZyb20gdGhlIE9wZW5WTVMgNy4zLTEgZG9jdW1lbnRhdGlvbgorKwkgIkNvbXBhcSBDIFJ1bi1UaW1lIExpYnJhcnkgUmVmZXJlbmNlIE1hbnVhbCBmb3IgT3BlblZNUyBzeXN0ZW1zIgorKwkgc2VjdGlvbiAxMC43ICJIYW5kbGluZyBEaWZmZXJlbnQgQ2hhcmFjdGVyIFNldHMiLiAgKi8KKysgICAgICBjcCA9ICJJU084ODU5LTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIklTTzg4NTktMiIgIlwwIiAiSVNPLTg4NTktMiIgIlwwIgorKwkgICAiSVNPODg1OS01IiAiXDAiICJJU08tODg1OS01IiAiXDAiCisrCSAgICJJU084ODU5LTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIklTTzg4NTktOCIgIlwwIiAiSVNPLTg4NTktOCIgIlwwIgorKwkgICAiSVNPODg1OS05IiAiXDAiICJJU08tODg1OS05IiAiXDAiCisrCSAgIC8qIEphcGFuZXNlICovCisrCSAgICJldWNKUCIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgICJTSklTIiAiXDAiICJTSElGVF9KSVMiICJcMCIKKysJICAgIkRFQ0tBTkpJIiAiXDAiICJERUMtS0FOSkkiICJcMCIKKysJICAgIlNERUNLQU5KSSIgIlwwIiAiRVVDLUpQIiAiXDAiCisrCSAgIC8qIENoaW5lc2UgKi8KKysJICAgImV1Y1RXIiAiXDAiICJFVUMtVFciICJcMCIKKysJICAgIkRFQ0hBTllVIiAiXDAiICJERUMtSEFOWVUiICJcMCIKKysJICAgIkRFQ0hBTlpJIiAiXDAiICJHQjIzMTIiICJcMCIKKysJICAgLyogS29yZWFuICovCisrCSAgICJERUNLT1JFQU4iICJcMCIgIkVVQy1LUiIgIlwwIjsKKysjIGVuZGlmCisrCisrIyBpZiBkZWZpbmVkIFdJTjMyCisrICAgICAgLyogVG8gYXZvaWQgdGhlIHRyb3VibGVzIG9mIGluc3RhbGxpbmcgYSBzZXBhcmF0ZSBmaWxlIGluIHRoZSBzYW1lCisrCSBkaXJlY3RvcnkgYXMgdGhlIERMTCBhbmQgb2YgcmV0cmlldmluZyB0aGUgRExMJ3MgZGlyZWN0b3J5IGF0CisrCSBydW50aW1lLCBzaW1wbHkgaW5saW5lIHRoZSBhbGlhc2VzIGhlcmUuICAqLworKworKyAgICAgIGNwID0gIkNQOTM2IiAiXDAiICJHQksiICJcMCIKKysJICAgIkNQMTM2MSIgIlwwIiAiSk9IQUIiICJcMCIKKysJICAgIkNQMjAxMjciICJcMCIgIkFTQ0lJIiAiXDAiCisrCSAgICJDUDIwODY2IiAiXDAiICJLT0k4LVIiICJcMCIKKysJICAgIkNQMjE4NjYiICJcMCIgIktPSTgtUlUiICJcMCIKKysJICAgIkNQMjg1OTEiICJcMCIgIklTTy04ODU5LTEiICJcMCIKKysJICAgIkNQMjg1OTIiICJcMCIgIklTTy04ODU5LTIiICJcMCIKKysJICAgIkNQMjg1OTMiICJcMCIgIklTTy04ODU5LTMiICJcMCIKKysJICAgIkNQMjg1OTQiICJcMCIgIklTTy04ODU5LTQiICJcMCIKKysJICAgIkNQMjg1OTUiICJcMCIgIklTTy04ODU5LTUiICJcMCIKKysJICAgIkNQMjg1OTYiICJcMCIgIklTTy04ODU5LTYiICJcMCIKKysJICAgIkNQMjg1OTciICJcMCIgIklTTy04ODU5LTciICJcMCIKKysJICAgIkNQMjg1OTgiICJcMCIgIklTTy04ODU5LTgiICJcMCIKKysJICAgIkNQMjg1OTkiICJcMCIgIklTTy04ODU5LTkiICJcMCIKKysJICAgIkNQMjg2MDUiICJcMCIgIklTTy04ODU5LTE1IiAiXDAiOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjaGFyc2V0X2FsaWFzZXMgPSBjcDsKKysgICAgfQorKworKyAgcmV0dXJuIGNwOworK30KKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytjb25zdCBjaGFyICoKKytsb2NhbGVfY2hhcnNldCAoKQorK3sKKysgIGNvbnN0IGNoYXIgKmNvZGVzZXQ7CisrICBjb25zdCBjaGFyICphbGlhc2VzOworKworKyNpZiAhKGRlZmluZWQgV0lOMzIgfHwgZGVmaW5lZCBPUzIpCisrCisrIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysKKysgIC8qIE1vc3Qgc3lzdGVtcyBzdXBwb3J0IG5sX2xhbmdpbmZvIChDT0RFU0VUKSBub3dhZGF5cy4gICovCisrICBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOworKworKyMgZWxzZQorKworKyAgLyogT24gb2xkIHN5c3RlbXMgd2hpY2ggbGFjayBpdCwgdXNlIHNldGxvY2FsZSBvciBnZXRlbnYuICAqLworKyAgY29uc3QgY2hhciAqbG9jYWxlID0gTlVMTDsKKysKKysgIC8qIEJ1dCBtb3N0IG9sZCBzeXN0ZW1zIGRvbid0IGhhdmUgYSBjb21wbGV0ZSBzZXQgb2YgbG9jYWxlcy4gIFNvbWUKKysgICAgIChsaWtlIFN1bk9TIDQgb3IgREpHUFApIGhhdmUgb25seSB0aGUgQyBsb2NhbGUuICBUaGVyZWZvcmUgd2UgZG9uJ3QKKysgICAgIHVzZSBzZXRsb2NhbGUgaGVyZTsgaXQgd291bGQgcmV0dXJuICJDIiB3aGVuIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUKKysgICAgIGxvY2FsZSBuYW1lIHRoZSB1c2VyIGhhcyBzZXQuICAqLworKyMgIGlmIEhBVkVfU0VUTE9DQUxFICYmIDAKKysgIGxvY2FsZSA9IHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpOworKyMgIGVuZGlmCisrICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrICAgIHsKKysgICAgICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgICAgICBpZiAobG9jYWxlID09IE5VTEwgfHwgbG9jYWxlWzBdID09ICdcMCcpCisrCXsKKysJICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19DVFlQRSIpOworKwkgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysJICAgIGxvY2FsZSA9IGdldGVudiAoIkxBTkciKTsKKysJfQorKyAgICB9CisrCisrICAvKiBPbiBzb21lIG9sZCBzeXN0ZW1zLCBvbmUgdXNlZCB0byBzZXQgbG9jYWxlID0gImlzbzg4NTlfMSIuIE9uIG90aGVycywKKysgICAgIHlvdSBzZXQgaXQgdG8gImxhbmd1YWdlX0NPVU5UUlkuY2hhcnNldCIuIEluIGFueSBjYXNlLCB3ZSByZXNvbHZlIGl0CisrICAgICB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgY29kZXNldCA9IGxvY2FsZTsKKysKKysjIGVuZGlmCisrCisrI2VsaWYgZGVmaW5lZCBXSU4zMgorKworKyAgc3RhdGljIGNoYXIgYnVmWzIgKyAxMCArIDFdOworKworKyAgLyogV29lMzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICBzcHJpbnRmIChidWYsICJDUCV1IiwgR2V0QUNQICgpKTsKKysgIGNvZGVzZXQgPSBidWY7CisrCisrI2VsaWYgZGVmaW5lZCBPUzIKKysKKysgIGNvbnN0IGNoYXIgKmxvY2FsZTsKKysgIHN0YXRpYyBjaGFyIGJ1ZlsyICsgMTAgKyAxXTsKKysgIFVMT05HIGNwWzNdOworKyAgVUxPTkcgY3BsZW47CisrCisrICAvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBjb2Rlc2V0LCBhcyBzZXQgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0sCisrICAgICB3aXRoIHN0YW5kYXJkIGxhbmd1YWdlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gICovCisrICBsb2NhbGUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKysgIGlmIChsb2NhbGUgPT0gTlVMTCB8fCBsb2NhbGVbMF0gPT0gJ1wwJykKKysgICAgeworKyAgICAgIGxvY2FsZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisrICAgICAgaWYgKGxvY2FsZSA9PSBOVUxMIHx8IGxvY2FsZVswXSA9PSAnXDAnKQorKwlsb2NhbGUgPSBnZXRlbnYgKCJMQU5HIik7CisrICAgIH0KKysgIGlmIChsb2NhbGUgIT0gTlVMTCAmJiBsb2NhbGVbMF0gIT0gJ1wwJykKKysgICAgeworKyAgICAgIC8qIElmIHRoZSBsb2NhbGUgbmFtZSBjb250YWlucyBhbiBlbmNvZGluZyBhZnRlciB0aGUgZG90LCByZXR1cm4gaXQuICAqLworKyAgICAgIGNvbnN0IGNoYXIgKmRvdCA9IHN0cmNociAobG9jYWxlLCAnLicpOworKworKyAgICAgIGlmIChkb3QgIT0gTlVMTCkKKysJeworKwkgIGNvbnN0IGNoYXIgKm1vZGlmaWVyOworKworKwkgIGRvdCsrOworKwkgIC8qIExvb2sgZm9yIHRoZSBwb3NzaWJsZSBALi4uIHRyYWlsZXIgYW5kIHJlbW92ZSBpdCwgaWYgYW55LiAgKi8KKysJICBtb2RpZmllciA9IHN0cmNociAoZG90LCAnQCcpOworKwkgIGlmIChtb2RpZmllciA9PSBOVUxMKQorKwkgICAgcmV0dXJuIGRvdDsKKysJICBpZiAobW9kaWZpZXIgLSBkb3QgPCBzaXplb2YgKGJ1ZikpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAoYnVmLCBkb3QsIG1vZGlmaWVyIC0gZG90KTsKKysJICAgICAgYnVmIFttb2RpZmllciAtIGRvdF0gPSAnXDAnOworKwkgICAgICByZXR1cm4gYnVmOworKwkgICAgfQorKwl9CisrCisrICAgICAgLyogUmVzb2x2ZSB0aHJvdWdoIHRoZSBjaGFyc2V0LmFsaWFzIGZpbGUuICAqLworKyAgICAgIGNvZGVzZXQgPSBsb2NhbGU7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIE9TLzIgaGFzIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBsb2NhbGUncyBjb2RlcGFnZSBhcyBhIG51bWJlci4gICovCisrICAgICAgaWYgKERvc1F1ZXJ5Q3AgKHNpemVvZiAoY3ApLCBjcCwgJmNwbGVuKSkKKysJY29kZXNldCA9ICIiOworKyAgICAgIGVsc2UKKysJeworKwkgIHNwcmludGYgKGJ1ZiwgIkNQJXUiLCBjcFswXSk7CisrCSAgY29kZXNldCA9IGJ1ZjsKKysJfQorKyAgICB9CisrCisrI2VuZGlmCisrCisrICBpZiAoY29kZXNldCA9PSBOVUxMKQorKyAgICAvKiBUaGUgY2Fub25pY2FsIG5hbWUgY2Fubm90IGJlIGRldGVybWluZWQuICAqLworKyAgICBjb2Rlc2V0ID0gIiI7CisrCisrICAvKiBSZXNvbHZlIGFsaWFzLiAqLworKyAgZm9yIChhbGlhc2VzID0gZ2V0X2NoYXJzZXRfYWxpYXNlcyAoKTsKKysgICAgICAgKmFsaWFzZXMgIT0gJ1wwJzsKKysgICAgICAgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSwgYWxpYXNlcyArPSBzdHJsZW4gKGFsaWFzZXMpICsgMSkKKysgICAgaWYgKHN0cmNtcCAoY29kZXNldCwgYWxpYXNlcykgPT0gMAorKwl8fCAoYWxpYXNlc1swXSA9PSAnKicgJiYgYWxpYXNlc1sxXSA9PSAnXDAnKSkKKysgICAgICB7CisrCWNvZGVzZXQgPSBhbGlhc2VzICsgc3RybGVuIChhbGlhc2VzKSArIDE7CisrCWJyZWFrOworKyAgICAgIH0KKysKKysgIC8qIERvbid0IHJldHVybiBhbiBlbXB0eSBzdHJpbmcuICBHTlUgbGliYyBhbmQgR05VIGxpYmljb252IGludGVycHJldAorKyAgICAgdGhlIGVtcHR5IHN0cmluZyBhcyBkZW5vdGluZyAidGhlIGxvY2FsZSdzIGNoYXJhY3RlciBlbmNvZGluZyIsCisrICAgICB0aHVzIEdOVSBsaWJpY29udiB3b3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gYSBzZWNvbmQgdGltZS4gICovCisrICBpZiAoY29kZXNldFswXSA9PSAnXDAnKQorKyAgICBjb2Rlc2V0ID0gIkFTQ0lJIjsKKysKKysgIHJldHVybiBjb2Rlc2V0OworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9sb2NhbGNoYXJzZXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGNoYXJzZXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ4MzcyODYzMiAtMDQwMAorQEAgLTAsMCArMSw0MiBAQAorKy8qIERldGVybWluZSBhIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgY3VycmVudCBsb2NhbGUncyBjaGFyYWN0ZXIgZW5jb2RpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDSEFSU0VUIExpYnJhcnkuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX0xPQ0FMQ0hBUlNFVF9ICisrI2RlZmluZSBfTE9DQUxDSEFSU0VUX0gKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysKKysvKiBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgbG9jYWxlJ3MgY2hhcmFjdGVyIGVuY29kaW5nLCBhbmQgY2Fub25pY2FsaXplIGl0CisrICAgaW50byBvbmUgb2YgdGhlIGNhbm9uaWNhbCBuYW1lcyBsaXN0ZWQgaW4gY29uZmlnLmNoYXJzZXQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuCisrICAgSWYgdGhlIGNhbm9uaWNhbCBuYW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCB0aGUgcmVzdWx0IGlzIGEgbm9uLWNhbm9uaWNhbAorKyAgIG5hbWUuICAqLworK2V4dGVybiBjb25zdCBjaGFyICogbG9jYWxlX2NoYXJzZXQgKHZvaWQpOworKworKworKyNpZmRlZiBfX2NwbHVzcGx1cworK30KKysjZW5kaWYKKysKKysKKysjZW5kaWYgLyogX0xPQ0FMQ0hBUlNFVF9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlLmFsaWFzCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZS5hbGlhcwkyMDA0LTA5LTEyIDE0OjQwOjM0LjQ5OTcyNjIwMCAtMDQwMAorQEAgLTAsMCArMSw3OCBAQAorKyMgTG9jYWxlIG5hbWUgYWxpYXMgZGF0YSBiYXNlLgorKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEsMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyMKKysjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysjIFVTQS4KKysKKysjIFRoZSBmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgY29ycmVzcG9uZGluZyBmaWxlIG9mCisrIyB0aGUgWCBXaW5kb3cgU3lzdGVtLCB3aGljaCBub3JtYWxseSBjYW4gYmUgZm91bmQgaW4KKysjCS91c3IvbGliL1gxMS9sb2NhbGUvbG9jYWxlLmFsaWFzCisrIyBBIHNpbmdsZSBsaW5lIGNvbnRhaW5zIHR3byBmaWVsZHM6IGFuIGFsaWFzIGFuZCBhIHN1YnN0aXR1dGlvbiB2YWx1ZS4KKysjIEFsbCBlbnRyaWVzIGFyZSBjYXNlIGluZGVwZW5kZW50LgorKworKyMgTm90ZTogVGhpcyBmaWxlIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiAgSWYgeW91IGhhdmUgYSB2YWx1ZSBmb3IKKysjIHlvdXIgb3duIHNpdGUgd2hpY2ggeW91IHRoaW5rIG1pZ2h0IGJlIHVzZWZ1bCBmb3Igb3RoZXJzIHRvbywgc2hhcmUKKysjIGl0IHdpdGggdGhlIHJlc3Qgb2YgdXMuICBTZW5kIGl0IHVzaW5nIHRoZSBgZ2xpYmNidWcnIHNjcmlwdCB0bworKyMgYnVnc0BnbnUub3JnLgorKworKyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAKKysKKytib2ttYWwJCW5iX05PLklTTy04ODU5LTEKKytib2tt5WwJCW5iX05PLklTTy04ODU5LTEKKytjYXRhbGFuCQljYV9FUy5JU08tODg1OS0xCisrY3JvYXRpYW4JaHJfSFIuSVNPLTg4NTktMgorK2N6ZWNoCQljc19DWi5JU08tODg1OS0yCisrZGFuaXNoICAgICAgICAgIGRhX0RLLklTTy04ODU5LTEKKytkYW5zawkJZGFfREsuSVNPLTg4NTktMQorK2RldXRzY2gJCWRlX0RFLklTTy04ODU5LTEKKytkdXRjaAkJbmxfTkwuSVNPLTg4NTktMQorK2Vlc3RpCQlldF9FRS5JU08tODg1OS0xCisrZXN0b25pYW4JZXRfRUUuSVNPLTg4NTktMQorK2Zpbm5pc2ggICAgICAgICBmaV9GSS5JU08tODg1OS0xCisrZnJhbudhaXMJZnJfRlIuSVNPLTg4NTktMQorK2ZyZW5jaAkJZnJfRlIuSVNPLTg4NTktMQorK2dhbGVnbwkJZ2xfRVMuSVNPLTg4NTktMQorK2dhbGljaWFuCWdsX0VTLklTTy04ODU5LTEKKytnZXJtYW4JCWRlX0RFLklTTy04ODU5LTEKKytncmVlayAgICAgICAgICAgZWxfR1IuSVNPLTg4NTktNworK2hlYnJldyAgICAgICAgICBoZV9JTC5JU08tODg1OS04CisraHJ2YXRza2kJaHJfSFIuSVNPLTg4NTktMgorK2h1bmdhcmlhbiAgICAgICBodV9IVS5JU08tODg1OS0yCisraWNlbGFuZGljICAgICAgIGlzX0lTLklTTy04ODU5LTEKKytpdGFsaWFuICAgICAgICAgaXRfSVQuSVNPLTg4NTktMQorK2phcGFuZXNlCWphX0pQLmV1Y0pQCisramFwYW5lc2UuZXVjCWphX0pQLmV1Y0pQCisramFfSlAJCWphX0pQLmV1Y0pQCisramFfSlAudWppcwlqYV9KUC5ldWNKUAorK2phcGFuZXNlLnNqaXMJamFfSlAuU0pJUworK2tvcmVhbgkJa29fS1IuZXVjS1IKKytrb3JlYW4uZXVjIAlrb19LUi5ldWNLUgorK2tvX0tSCQlrb19LUi5ldWNLUgorK2xpdGh1YW5pYW4gICAgICBsdF9MVC5JU08tODg1OS0xMworK25vX05PCQluYl9OTy5JU08tODg1OS0xCisrbm9fTk8uSVNPLTg4NTktMSBuYl9OTy5JU08tODg1OS0xCisrbm9yd2VnaWFuICAgICAgIG5iX05PLklTTy04ODU5LTEKKytueW5vcnNrCQlubl9OTy5JU08tODg1OS0xCisrcG9saXNoICAgICAgICAgIHBsX1BMLklTTy04ODU5LTIKKytwb3J0dWd1ZXNlICAgICAgcHRfUFQuSVNPLTg4NTktMQorK3JvbWFuaWFuICAgICAgICByb19STy5JU08tODg1OS0yCisrcnVzc2lhbiAgICAgICAgIHJ1X1JVLklTTy04ODU5LTUKKytzbG92YWsgICAgICAgICAgc2tfU0suSVNPLTg4NTktMgorK3Nsb3ZlbmUgICAgICAgICBzbF9TSS5JU08tODg1OS0yCisrc2xvdmVuaWFuICAgICAgIHNsX1NJLklTTy04ODU5LTIKKytzcGFuaXNoICAgICAgICAgZXNfRVMuSVNPLTg4NTktMQorK3N3ZWRpc2ggICAgICAgICBzdl9TRS5JU08tODg1OS0xCisrdGhhaQkJdGhfVEguVElTLTYyMAorK3R1cmtpc2ggICAgICAgICB0cl9UUi5JU08tODg1OS05CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlYWxpYXMuYwkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTA1NzI1Mjg4IC0wNDAwCitAQCAtMSwyMCArMSwyNyBAQAorLS8qIEhhbmRsZSBhbGlhc2VzIGZvciBsb2NhbGUgbmFtZXMKKy0gICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIDE5OTUuCisrLyogSGFuZGxlIGFsaWFzZXMgZm9yIGxvY2FsZSBuYW1lcy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBUZWxsIGdsaWJjJ3MgPHN0cmluZy5oPiB0byBwcm92aWRlIGEgcHJvdG90eXBlIGZvciBtZW1wY3B5KCkuCisrICAgVGhpcyBtdXN0IGNvbWUgYmVmb3JlIDxjb25maWcuaD4gYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlCisrICAgPGZlYXR1cmVzLmg+LCBhbmQgb25jZSA8ZmVhdHVyZXMuaD4gaGFzIGJlZW4gaW5jbHVkZWQsIGl0J3MgdG9vIGxhdGUuICAqLworKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAgICAxCisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorQEAgLTIyLDU2ICsyOSw0NSBAQAorIAorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9fX0ZTRVRMT0NLSU5HCisrIyBpbmNsdWRlIDxzdGRpb19leHQuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCisgI2lmZGVmIF9fR05VQ19fCisrIyB1bmRlZiBhbGxvY2EKKyAjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorICMgZGVmaW5lIEhBVkVfQUxMT0NBIDEKKyAjZWxzZQorLSMgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKy0jICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisgIyBlbHNlCistIyAgaWZkZWYgX0FJWAorLSAjcHJhZ21hIGFsbG9jYQorKyMgIGlmIGRlZmluZWQgSEFWRV9BTExPQ0FfSCB8fCBkZWZpbmVkIF9MSUJDCisrIyAgIGluY2x1ZGUgPGFsbG9jYS5oPgorICMgIGVsc2UKKy0jICAgaWZuZGVmIGFsbG9jYQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKyBjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorICMgICBlbmRpZgorICMgIGVuZGlmCisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdGRsaWIuaD4KKy0jZWxzZQorLWNoYXIgKmdldGVudiAoKTsKKy0jIGlmZGVmIEhBVkVfTUFMTE9DX0gKKy0jICBpbmNsdWRlIDxtYWxsb2MuaD4KKy0jIGVsc2UKKy12b2lkIGZyZWUgKCk7CistIyBlbmRpZgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgX0dOVV9TT1VSQ0UKKy0jICBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorLSMgZW5kaWYKKy0jIGluY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorKworKyNpZiBFTkFCTEVfUkVMT0NBVEFCTEUKKysjIGluY2x1ZGUgInJlbG9jYXRhYmxlLmgiCisgI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jIGlmbmRlZiBtZW1jcHkKKy0jICBkZWZpbmUgbWVtY3B5KERzdCwgU3JjLCBOdW0pIGJjb3B5IChTcmMsIERzdCwgTnVtKQorLSMgZW5kaWYKKy0jZW5kaWYKKy0jaWYgIUhBVkVfU1RSQ0hSICYmICFkZWZpbmVkIF9MSUJDCistIyBpZm5kZWYgc3RyY2hyCistIyAgZGVmaW5lIHN0cmNociBpbmRleAorLSMgZW5kaWYKKysjIGRlZmluZSByZWxvY2F0ZShwYXRobmFtZSkgKHBhdGhuYW1lKQorICNlbmRpZgorIAorLSNpbmNsdWRlICJnZXR0ZXh0LmgiCistI2luY2x1ZGUgImdldHRleHRQLmgiCistCisgLyogQEAgZW5kIG9mIHByb2xvZyBAQCAqLworIAorICNpZmRlZiBfTElCQworQEAgLTc5LDQzICs3NSw0OSBAQAorICAgIGJlY2F1c2Ugc29tZSBBTlNJIEMgZnVuY3Rpb25zIHdpbGwgcmVxdWlyZSBsaW5raW5nIHdpdGggdGhpcyBvYmplY3QKKyAgICBmaWxlIGFuZCB0aGUgbmFtZSBzcGFjZSBtdXN0IG5vdCBiZSBwb2xsdXRlZC4gICovCisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKysKKysjIGlmbmRlZiBtZW1wY3B5CisrIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyBlbmRpZgorKyMgZGVmaW5lIEhBVkVfTUVNUENQWQkxCisrIyBkZWZpbmUgSEFWRV9fX0ZTRVRMT0NLSU5HCTEKKysKKysvKiBXZSBuZWVkIGxvY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYW4gYmUgY2FsbGVkIGZyb20gZGlmZmVyZW50IHBsYWNlcy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKworK19fbGliY19sb2NrX2RlZmluZV9pbml0aWFsaXplZCAoc3RhdGljLCBsb2NrKTsKKysjZW5kaWYKKysKKysjaWZuZGVmIGludGVybmFsX2Z1bmN0aW9uCisrIyBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKyAjZW5kaWYKKyAKKysvKiBTb21lIG9wdGltaXphdGlvbnMgZm9yIGdsaWJjLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZl91bmxvY2tlZCAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHNfdW5sb2NrZWQgKGJ1ZiwgbiwgZnApCisrI2Vsc2UKKysjIGRlZmluZSBGRU9GKGZwKQkJZmVvZiAoZnApCisrIyBkZWZpbmUgRkdFVFMoYnVmLCBuLCBmcCkJZmdldHMgKGJ1ZiwgbiwgZnApCisrI2VuZGlmCisgCistLyogRm9yIHRob3NlIGxvb3Npbmcgc3lzdGVtcyB3aGljaCBkb24ndCBoYXZlIGBhbGxvY2EnIHdlIGhhdmUgdG8gYWRkCisrLyogRm9yIHRob3NlIGxvc2luZyBzeXN0ZW1zIHdoaWNoIGRvbid0IGhhdmUgYGFsbG9jYScgd2UgaGF2ZSB0byBhZGQKKyAgICBzb21lIGFkZGl0aW9uYWwgY29kZSBlbXVsYXRpbmcgaXQuICAqLworICNpZmRlZiBIQVZFX0FMTE9DQQorLS8qIE5vdGhpbmcgaGFzIHRvIGJlIGRvbmUuICAqLworLSMgZGVmaW5lIEFERF9CTE9DSyhsaXN0LCBhZGRyZXNzKSAvKiBub3RoaW5nICovCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkgLyogbm90aGluZyAqLworKyMgZGVmaW5lIGZyZWVhKHApIC8qIG5vdGhpbmcgKi8KKyAjZWxzZQorLXN0cnVjdCBibG9ja19saXN0CisteworLSAgdm9pZCAqYWRkcmVzczsKKy0gIHN0cnVjdCBibG9ja19saXN0ICpuZXh0OworLX07CistIyBkZWZpbmUgQUREX0JMT0NLKGxpc3QsIGFkZHIpCQkJCQkJICAgICAgXAorLSAgZG8gewkJCQkJCQkJCSAgICAgIFwKKy0gICAgc3RydWN0IGJsb2NrX2xpc3QgKm5ld3AgPSAoc3RydWN0IGJsb2NrX2xpc3QgKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7ICBcCistICAgIC8qIElmIHdlIGNhbm5vdCBnZXQgYSBmcmVlIGJsb2NrIHdlIGNhbm5vdCBhZGQgdGhlIG5ldyBlbGVtZW50IHRvCSAgICAgIFwKKy0gICAgICAgdGhlIGxpc3QuICAqLwkJCQkJCQkgICAgICBcCistICAgIGlmIChuZXdwICE9IE5VTEwpIHsJCQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPmFkZHJlc3MgPSAoYWRkcik7CQkJCQkJICAgICAgXAorLSAgICAgIG5ld3AtPm5leHQgPSAobGlzdCk7CQkJCQkJICAgICAgXAorLSAgICAgIChsaXN0KSA9IG5ld3A7CQkJCQkJCSAgICAgIFwKKy0gICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0gd2hpbGUgKDApCistIyBkZWZpbmUgRlJFRV9CTE9DS1MobGlzdCkJCQkJCQkgICAgICBcCistICBkbyB7CQkJCQkJCQkJICAgICAgXAorLSAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7CQkJCQkJICAgICAgXAorLSAgICAgIHN0cnVjdCBibG9ja19saXN0ICpvbGQgPSBsaXN0OwkJCQkJICAgICAgXAorLSAgICAgIGxpc3QgPSBsaXN0LT5uZXh0OwkJCQkJCSAgICAgIFwKKy0gICAgICBmcmVlIChvbGQpOwkJCQkJCQkgICAgICBcCistICAgIH0JCQkJCQkJCQkgICAgICBcCistICB9IHdoaWxlICgwKQorLSMgdW5kZWYgYWxsb2NhCistIyBkZWZpbmUgYWxsb2NhKHNpemUpIChtYWxsb2MgKHNpemUpKQorLSNlbmRpZgkvKiBoYXZlIGFsbG9jYSAqLworKyMgZGVmaW5lIGFsbG9jYShuKSBtYWxsb2MgKG4pCisrIyBkZWZpbmUgZnJlZWEocCkgZnJlZSAocCkKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfTElCQ19SRUVOVFJBTlQgfHwgSEFWRV9ERUNMX0ZHRVRTX1VOTE9DS0VECisrIyB1bmRlZiBmZ2V0cworKyMgZGVmaW5lIGZnZXRzKGJ1ZiwgbGVuLCBzKSBmZ2V0c191bmxvY2tlZCAoYnVmLCBsZW4sIHMpCisrI2VuZGlmCisrI2lmIGRlZmluZWQgX0xJQkNfUkVFTlRSQU5UIHx8IEhBVkVfREVDTF9GRU9GX1VOTE9DS0VECisrIyB1bmRlZiBmZW9mCisrIyBkZWZpbmUgZmVvZihzKSBmZW9mX3VubG9ja2VkIChzKQorKyNlbmRpZgorIAorIAorIHN0cnVjdCBhbGlhc19tYXAKK0BAIC0xMjUsMjYgKzEyNyw0MSBAQAorIH07CisgCisgCistc3RhdGljIHN0cnVjdCBhbGlhc19tYXAgKm1hcDsKKy1zdGF0aWMgc2l6ZV90IG5tYXAgPSAwOworLXN0YXRpYyBzaXplX3QgbWF4bWFwID0gMDsKKysjaWZuZGVmIF9MSUJDCisrIyBkZWZpbmUgbGliY19mcmVlcmVzX3B0cihkZWNsKSBkZWNsCisrI2VuZGlmCisrCisrbGliY19mcmVlcmVzX3B0ciAoc3RhdGljIGNoYXIgKnN0cmluZ19zcGFjZSk7Cisrc3RhdGljIHNpemVfdCBzdHJpbmdfc3BhY2VfYWN0OworK3N0YXRpYyBzaXplX3Qgc3RyaW5nX3NwYWNlX21heDsKKytsaWJjX2ZyZWVyZXNfcHRyIChzdGF0aWMgc3RydWN0IGFsaWFzX21hcCAqbWFwKTsKKytzdGF0aWMgc2l6ZV90IG5tYXA7Cisrc3RhdGljIHNpemVfdCBtYXhtYXA7CisgCisgCisgLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKy1zdGF0aWMgc2l6ZV90IHJlYWRfYWxpYXNfZmlsZSBQQVJBTVMgKChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikpOworLXN0YXRpYyB2b2lkIGV4dGVuZF9hbGlhc190YWJsZSBQQVJBTVMgKCh2b2lkKSk7Cistc3RhdGljIGludCBhbGlhc19jb21wYXJlIFBBUkFNUyAoKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCistCQkJCSAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMikpOworK3N0YXRpYyBzaXplX3QgcmVhZF9hbGlhc19maWxlIChjb25zdCBjaGFyICpmbmFtZSwgaW50IGZuYW1lX2xlbikKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK3N0YXRpYyBpbnQgZXh0ZW5kX2FsaWFzX3RhYmxlICh2b2lkKTsKKytzdGF0aWMgaW50IGFsaWFzX2NvbXBhcmUgKGNvbnN0IHN0cnVjdCBhbGlhc19tYXAgKm1hcDEsCisrCQkJICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKTsKKyAKKyAKKyBjb25zdCBjaGFyICoKKy1fbmxfZXhwYW5kX2FsaWFzIChuYW1lKQorLSAgICBjb25zdCBjaGFyICpuYW1lOworK19ubF9leHBhbmRfYWxpYXMgKGNvbnN0IGNoYXIgKm5hbWUpCisgeworLSAgc3RhdGljIGNvbnN0IGNoYXIgKmxvY2FsZV9hbGlhc19wYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICBzdGF0aWMgY29uc3QgY2hhciAqbG9jYWxlX2FsaWFzX3BhdGg7CisgICBzdHJ1Y3QgYWxpYXNfbWFwICpyZXR2YWw7CisrICBjb25zdCBjaGFyICpyZXN1bHQgPSBOVUxMOworICAgc2l6ZV90IGFkZGVkOworIAorKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrI2VuZGlmCisrCisrICBpZiAobG9jYWxlX2FsaWFzX3BhdGggPT0gTlVMTCkKKysgICAgbG9jYWxlX2FsaWFzX3BhdGggPSBMT0NBTEVfQUxJQVNfUEFUSDsKKysKKyAgIGRvCisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYWxpYXNfbWFwIGl0ZW07CitAQCAtMTU0LDE1ICsxNzEsMTggQEAKKyAgICAgICBpZiAobm1hcCA+IDApCisgCXJldHZhbCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIGJzZWFyY2ggKCZpdGVtLCBtYXAsIG5tYXAsCisgCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgYWxpYXNfbWFwKSwKKy0JCQkJCSAgICAgICAoaW50ICgqKSBQQVJBTVMgKChjb25zdCB2b2lkICosCistCQkJCQkJCQkgY29uc3Qgdm9pZCAqKSkKKysJCQkJCSAgICAgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLAorKwkJCQkJCQkgY29uc3Qgdm9pZCAqKQorIAkJCQkJCSkgYWxpYXNfY29tcGFyZSk7CisgICAgICAgZWxzZQorIAlyZXR2YWwgPSBOVUxMOworIAorICAgICAgIC8qIFdlIHJlYWxseSBmb3VuZCBhbiBhbGlhcy4gIFJldHVybiB0aGUgdmFsdWUuICAqLworICAgICAgIGlmIChyZXR2YWwgIT0gTlVMTCkKKy0JcmV0dXJuIHJldHZhbC0+dmFsdWU7CisrCXsKKysJICByZXN1bHQgPSByZXR2YWwtPnZhbHVlOworKwkgIGJyZWFrOworKwl9CisgCisgICAgICAgLyogUGVyaGFwcyB3ZSBjYW4gZmluZCBhbm90aGVyIGFsaWFzIGZpbGUuICAqLworICAgICAgIGFkZGVkID0gMDsKK0BAIC0xNzAsMTEgKzE5MCwxMiBAQAorIAl7CisgCSAgY29uc3QgY2hhciAqc3RhcnQ7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdID09ICc6JykKKysJICB3aGlsZSAobG9jYWxlX2FsaWFzX3BhdGhbMF0gPT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAkgIHN0YXJ0ID0gbG9jYWxlX2FsaWFzX3BhdGg7CisgCistCSAgd2hpbGUgKGxvY2FsZV9hbGlhc19wYXRoWzBdICE9ICdcMCcgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gJzonKQorKwkgIHdoaWxlIChsb2NhbGVfYWxpYXNfcGF0aFswXSAhPSAnXDAnCisrCQkgJiYgbG9jYWxlX2FsaWFzX3BhdGhbMF0gIT0gUEFUSF9TRVBBUkFUT1IpCisgCSAgICArK2xvY2FsZV9hbGlhc19wYXRoOworIAorIAkgIGlmIChzdGFydCA8IGxvY2FsZV9hbGlhc19wYXRoKQorQEAgLTE4Myw3OCArMjA0LDg3IEBACisgICAgIH0KKyAgIHdoaWxlIChhZGRlZCAhPSAwKTsKKyAKKy0gIHJldHVybiBOVUxMOworKyNpZmRlZiBfTElCQworKyAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysjZW5kaWYKKysKKysgIHJldHVybiByZXN1bHQ7CisgfQorIAorIAorIHN0YXRpYyBzaXplX3QKKy1yZWFkX2FsaWFzX2ZpbGUgKGZuYW1lLCBmbmFtZV9sZW4pCistICAgICBjb25zdCBjaGFyICpmbmFtZTsKKy0gICAgIGludCBmbmFtZV9sZW47CisraW50ZXJuYWxfZnVuY3Rpb24KKytyZWFkX2FsaWFzX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgZm5hbWVfbGVuKQorIHsKKy0jaWZuZGVmIEhBVkVfQUxMT0NBCistICBzdHJ1Y3QgYmxvY2tfbGlzdCAqYmxvY2tfbGlzdCA9IE5VTEw7CistI2VuZGlmCisgICBGSUxFICpmcDsKKyAgIGNoYXIgKmZ1bGxfZm5hbWU7CisgICBzaXplX3QgYWRkZWQ7CisgICBzdGF0aWMgY29uc3QgY2hhciBhbGlhc2ZpbGVbXSA9ICIvbG9jYWxlLmFsaWFzIjsKKyAKKyAgIGZ1bGxfZm5hbWUgPSAoY2hhciAqKSBhbGxvY2EgKGZuYW1lX2xlbiArIHNpemVvZiBhbGlhc2ZpbGUpOworLSAgQUREX0JMT0NLIChibG9ja19saXN0LCBmdWxsX2ZuYW1lKTsKKysjaWZkZWYgSEFWRV9NRU1QQ1BZCisrICBtZW1wY3B5IChtZW1wY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKSwKKysJICAgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZWxzZQorICAgbWVtY3B5IChmdWxsX2ZuYW1lLCBmbmFtZSwgZm5hbWVfbGVuKTsKKyAgIG1lbWNweSAoJmZ1bGxfZm5hbWVbZm5hbWVfbGVuXSwgYWxpYXNmaWxlLCBzaXplb2YgYWxpYXNmaWxlKTsKKysjZW5kaWYKKyAKKy0gIGZwID0gZm9wZW4gKGZ1bGxfZm5hbWUsICJyIik7CisrICBmcCA9IGZvcGVuIChyZWxvY2F0ZSAoZnVsbF9mbmFtZSksICJyIik7CisrICBmcmVlYSAoZnVsbF9mbmFtZSk7CisgICBpZiAoZnAgPT0gTlVMTCkKKy0gICAgeworLSAgICAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorKyAgICByZXR1cm4gMDsKKysKKysjaWZkZWYgSEFWRV9fX0ZTRVRMT0NLSU5HCisrICAvKiBObyB0aHJlYWRzIHByZXNlbnQuICAqLworKyAgX19mc2V0bG9ja2luZyAoZnAsIEZTRVRMT0NLSU5HX0JZQ0FMTEVSKTsKKysjZW5kaWYKKyAKKyAgIGFkZGVkID0gMDsKKy0gIHdoaWxlICghZmVvZiAoZnApKQorKyAgd2hpbGUgKCFGRU9GIChmcCkpCisgICAgIHsKKyAgICAgICAvKiBJdCBpcyBhIHJlYXNvbmFibGUgYXBwcm9hY2ggdG8gdXNlIGEgZml4IGJ1ZmZlciBoZXJlIGJlY2F1c2UKKyAJIGEpIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGZpcnN0IHR3byBmaWVsZHMKKyAJIGIpIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHVzYWJsZSBhcyBmaWxlIG5hbWVzIGFuZCBzbyBtdXN0IG5vdAorIAkgICAgYmUgdGhhdCBsb25nCistICAgICAgICovCistICAgICAgY2hhciBidWZbQlVGU0laXTsKKysJIFdlIGF2b2lkIGEgbXVsdGkta2lsb2J5dGUgYnVmZmVyIGhlcmUgc2luY2UgdGhpcyB3b3VsZCB1c2UgdXAKKysJIHN0YWNrIHNwYWNlIHdoaWNoIHdlIG1pZ2h0IG5vdCBoYXZlIGlmIHRoZSBwcm9ncmFtIHJhbiBvdXQgb2YKKysJIG1lbW9yeS4gICovCisrICAgICAgY2hhciBidWZbNDAwXTsKKyAgICAgICBjaGFyICphbGlhczsKKyAgICAgICBjaGFyICp2YWx1ZTsKKyAgICAgICBjaGFyICpjcDsKKyAKKy0gICAgICBpZiAoZmdldHMgKGJ1ZiwgQlVGU0laLCBmcCkgPT0gTlVMTCkKKysgICAgICBpZiAoRkdFVFMgKGJ1Ziwgc2l6ZW9mIGJ1ZiwgZnApID09IE5VTEwpCisgCS8qIEVPRiByZWFjaGVkLiAgKi8KKyAJYnJlYWs7CisgCisgICAgICAgY3AgPSBidWY7CisgICAgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2UuICAqLworLSAgICAgIHdoaWxlIChpc3NwYWNlIChjcFswXSkpCisrICAgICAgd2hpbGUgKGlzc3BhY2UgKCh1bnNpZ25lZCBjaGFyKSBjcFswXSkpCisgCSsrY3A7CisgCisgICAgICAgLyogQSBsZWFkaW5nICcjJyBzaWduYWxzIGEgY29tbWVudCBsaW5lLiAgKi8KKyAgICAgICBpZiAoY3BbMF0gIT0gJ1wwJyAmJiBjcFswXSAhPSAnIycpCisgCXsKKyAJICBhbGlhcyA9IGNwKys7CistCSAgd2hpbGUgKGNwWzBdICE9ICdcMCcgJiYgIWlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoY3BbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCSAgLyogVGVybWluYXRlIGFsaWFzIG5hbWUuICAqLworIAkgIGlmIChjcFswXSAhPSAnXDAnKQorIAkgICAgKmNwKysgPSAnXDAnOworIAorIAkgIC8qIE5vdyBsb29rIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB2YWx1ZS4gICovCistCSAgd2hpbGUgKGlzc3BhY2UgKGNwWzBdKSkKKysJICB3aGlsZSAoaXNzcGFjZSAoKHVuc2lnbmVkIGNoYXIpIGNwWzBdKSkKKyAJICAgICsrY3A7CisgCisgCSAgaWYgKGNwWzBdICE9ICdcMCcpCisgCSAgICB7CistCSAgICAgIGNoYXIgKnRwOworLQkgICAgICBzaXplX3QgbGVuOworKwkgICAgICBzaXplX3QgYWxpYXNfbGVuOworKwkgICAgICBzaXplX3QgdmFsdWVfbGVuOworIAorIAkgICAgICB2YWx1ZSA9IGNwKys7CistCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlIChjcFswXSkpCisrCSAgICAgIHdoaWxlIChjcFswXSAhPSAnXDAnICYmICFpc3NwYWNlICgodW5zaWduZWQgY2hhcikgY3BbMF0pKQorIAkJKytjcDsKKyAJICAgICAgLyogVGVybWluYXRlIHZhbHVlLiAgKi8KKyAJICAgICAgaWYgKGNwWzBdID09ICdcbicpCitAQCAtMjY5LDI4ICsyOTksNDQgQEAKKyAJCSpjcCsrID0gJ1wwJzsKKyAKKyAJICAgICAgaWYgKG5tYXAgPj0gbWF4bWFwKQorLQkJZXh0ZW5kX2FsaWFzX3RhYmxlICgpOworLQorLQkgICAgICAvKiBXZSBjYW5ub3QgZGVwZW5kIG9uIHN0cmR1cCBhdmFpbGFibGUgaW4gdGhlIGxpYmMuICBTaWdoISAgKi8KKy0JICAgICAgbGVuID0gc3RybGVuIChhbGlhcykgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCistCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKysJCWlmIChfX2J1aWx0aW5fZXhwZWN0IChleHRlbmRfYWxpYXNfdGFibGUgKCksIDApKQorIAkJICByZXR1cm4gYWRkZWQ7CistCQl9CistCSAgICAgIG1lbWNweSAodHAsIGFsaWFzLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0uYWxpYXMgPSB0cDsKKyAKKy0JICAgICAgbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworLQkgICAgICB0cCA9IChjaGFyICopIG1hbGxvYyAobGVuKTsKKy0JICAgICAgaWYgKHRwID09IE5VTEwpCisrCSAgICAgIGFsaWFzX2xlbiA9IHN0cmxlbiAoYWxpYXMpICsgMTsKKysJICAgICAgdmFsdWVfbGVuID0gc3RybGVuICh2YWx1ZSkgKyAxOworKworKwkgICAgICBpZiAoc3RyaW5nX3NwYWNlX2FjdCArIGFsaWFzX2xlbiArIHZhbHVlX2xlbiA+IHN0cmluZ19zcGFjZV9tYXgpCisgCQl7CistCQkgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0JCSAgcmV0dXJuIGFkZGVkOworKwkJICAvKiBJbmNyZWFzZSBzaXplIG9mIG1lbW9yeSBwb29sLiAgKi8KKysJCSAgc2l6ZV90IG5ld19zaXplID0gKHN0cmluZ19zcGFjZV9tYXgKKysJCQkJICAgICArIChhbGlhc19sZW4gKyB2YWx1ZV9sZW4gPiAxMDI0CisrCQkJCQk/IGFsaWFzX2xlbiArIHZhbHVlX2xlbiA6IDEwMjQpKTsKKysJCSAgY2hhciAqbmV3X3Bvb2wgPSAoY2hhciAqKSByZWFsbG9jIChzdHJpbmdfc3BhY2UsIG5ld19zaXplKTsKKysJCSAgaWYgKG5ld19wb29sID09IE5VTEwpCisrCQkgICAgcmV0dXJuIGFkZGVkOworKworKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoc3RyaW5nX3NwYWNlICE9IG5ld19wb29sLCAwKSkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgaTsKKysKKysJCSAgICAgIGZvciAoaSA9IDA7IGkgPCBubWFwOyBpKyspCisrCQkJeworKwkJCSAgbWFwW2ldLmFsaWFzICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCSAgbWFwW2ldLnZhbHVlICs9IG5ld19wb29sIC0gc3RyaW5nX3NwYWNlOworKwkJCX0KKysJCSAgICB9CisrCisrCQkgIHN0cmluZ19zcGFjZSA9IG5ld19wb29sOworKwkJICBzdHJpbmdfc3BhY2VfbWF4ID0gbmV3X3NpemU7CisgCQl9CistCSAgICAgIG1lbWNweSAodHAsIHZhbHVlLCBsZW4pOworLQkgICAgICBtYXBbbm1hcF0udmFsdWUgPSB0cDsKKysKKysJICAgICAgbWFwW25tYXBdLmFsaWFzID0gbWVtY3B5ICgmc3RyaW5nX3NwYWNlW3N0cmluZ19zcGFjZV9hY3RdLAorKwkJCQkJYWxpYXMsIGFsaWFzX2xlbik7CisrCSAgICAgIHN0cmluZ19zcGFjZV9hY3QgKz0gYWxpYXNfbGVuOworKworKwkgICAgICBtYXBbbm1hcF0udmFsdWUgPSBtZW1jcHkgKCZzdHJpbmdfc3BhY2Vbc3RyaW5nX3NwYWNlX2FjdF0sCisrCQkJCQl2YWx1ZSwgdmFsdWVfbGVuKTsKKysJICAgICAgc3RyaW5nX3NwYWNlX2FjdCArPSB2YWx1ZV9sZW47CisgCisgCSAgICAgICsrbm1hcDsKKyAJICAgICAgKythZGRlZDsKK0BAIC0yOTksMTQgKzM0NSwxMSBAQAorIAorICAgICAgIC8qIFBvc3NpYmx5IG5vdCB0aGUgd2hvbGUgbGluZSBmaXRzIGludG8gdGhlIGJ1ZmZlci4gIElnbm9yZQorIAkgdGhlIHJlc3Qgb2YgdGhlIGxpbmUuICAqLworLSAgICAgIHdoaWxlIChzdHJjaHIgKGNwLCAnXG4nKSA9PSBOVUxMKQorLQl7CistCSAgY3AgPSBidWY7CistCSAgaWYgKGZnZXRzIChidWYsIEJVRlNJWiwgZnApID09IE5VTEwpCistCSAgICAvKiBNYWtlIHN1cmUgdGhlIGlubmVyIGxvb3Agd2lsbCBiZSBsZWZ0LiAgVGhlIG91dGVyIGxvb3AKKy0JICAgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworLQkgICAgKmNwID0gJ1xuJzsKKy0JfQorKyAgICAgIHdoaWxlIChzdHJjaHIgKGJ1ZiwgJ1xuJykgPT0gTlVMTCkKKysJaWYgKEZHRVRTIChidWYsIHNpemVvZiBidWYsIGZwKSA9PSBOVUxMKQorKwkgIC8qIE1ha2Ugc3VyZSB0aGUgaW5uZXIgbG9vcCB3aWxsIGJlIGxlZnQuICBUaGUgb3V0ZXIgbG9vcAorKwkgICAgIHdpbGwgZXhpdCBhdCB0aGUgYGZlb2YnIHRlc3QuICAqLworKwkgIGJyZWFrOworICAgICB9CisgCisgICAvKiBTaG91bGQgd2UgdGVzdCBmb3IgZmVycm9yKCk/ICBJIHRoaW5rIHdlIGhhdmUgdG8gc2lsZW50bHkgaWdub3JlCitAQCAtMzE1LDQwICszNTgsMzMgQEAKKyAKKyAgIGlmIChhZGRlZCA+IDApCisgICAgIHFzb3J0IChtYXAsIG5tYXAsIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCksCistCSAgIChpbnQgKCopIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkpIGFsaWFzX2NvbXBhcmUpOworKwkgICAoaW50ICgqKSAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKSBhbGlhc19jb21wYXJlKTsKKyAKKy0gIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKyAgIHJldHVybiBhZGRlZDsKKyB9CisgCisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgaW50CisgZXh0ZW5kX2FsaWFzX3RhYmxlICgpCisgeworICAgc2l6ZV90IG5ld19zaXplOworICAgc3RydWN0IGFsaWFzX21hcCAqbmV3X21hcDsKKyAKKyAgIG5ld19zaXplID0gbWF4bWFwID09IDAgPyAxMDAgOiAyICogbWF4bWFwOworLSAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIG1hbGxvYyAobmV3X3NpemUKKy0JCQkJCSAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworKyAgbmV3X21hcCA9IChzdHJ1Y3QgYWxpYXNfbWFwICopIHJlYWxsb2MgKG1hcCwgKG5ld19zaXplCisrCQkJCQkJKiBzaXplb2YgKHN0cnVjdCBhbGlhc19tYXApKSk7CisgICBpZiAobmV3X21hcCA9PSBOVUxMKQorICAgICAvKiBTaW1wbHkgZG9uJ3QgZXh0ZW5kOiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGNvcmUuICAqLworLSAgICByZXR1cm47CistCistICBtZW1jcHkgKG5ld19tYXAsIG1hcCwgbm1hcCAqIHNpemVvZiAoc3RydWN0IGFsaWFzX21hcCkpOworLQorLSAgaWYgKG1heG1hcCAhPSAwKQorLSAgICBmcmVlIChtYXApOworKyAgICByZXR1cm4gLTE7CisgCisgICBtYXAgPSBuZXdfbWFwOworICAgbWF4bWFwID0gbmV3X3NpemU7CisrICByZXR1cm4gMDsKKyB9CisgCisgCisgc3RhdGljIGludAorLWFsaWFzX2NvbXBhcmUgKG1hcDEsIG1hcDIpCistICAgICBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxOworLSAgICAgY29uc3Qgc3RydWN0IGFsaWFzX21hcCAqbWFwMjsKKythbGlhc19jb21wYXJlIChjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAxLCBjb25zdCBzdHJ1Y3QgYWxpYXNfbWFwICptYXAyKQorIHsKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIEhBVkVfU1RSQ0FTRUNNUAorICAgcmV0dXJuIHN0cmNhc2VjbXAgKG1hcDEtPmFsaWFzLCBtYXAyLT5hbGlhcyk7CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvbG9jYWxlbmFtZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvY2FsZW5hbWUuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUxMDcyNDUyOCAtMDQwMAorQEAgLTAsMCArMSwxMTQyIEBACisrLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxvY2FsZS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMC0yMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysvKiBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5vcmc+LCAxOTk1LiAgKi8KKysvKiBXaW4zMiBjb2RlIHdyaXR0ZW4gYnkgVG9yIExpbGxxdmlzdCA8dG1sQGlraS5maT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKworKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXworKyMgdW5kZWYgV0lOMzIgICAvKiBhdm9pZCB3YXJuaW5nIG9uIG1pbmd3MzIgKi8KKysjIGRlZmluZSBXSU4zMgorKyNlbmRpZgorKworKyNpZmRlZiBXSU4zMgorKyMgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKysjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKysvKiBMaXN0IG9mIGxhbmd1YWdlIGNvZGVzLCBzb3J0ZWQgYnkgdmFsdWU6CisrICAgMHgwMSBMQU5HX0FSQUJJQworKyAgIDB4MDIgTEFOR19CVUxHQVJJQU4KKysgICAweDAzIExBTkdfQ0FUQUxBTgorKyAgIDB4MDQgTEFOR19DSElORVNFCisrICAgMHgwNSBMQU5HX0NaRUNICisrICAgMHgwNiBMQU5HX0RBTklTSAorKyAgIDB4MDcgTEFOR19HRVJNQU4KKysgICAweDA4IExBTkdfR1JFRUsKKysgICAweDA5IExBTkdfRU5HTElTSAorKyAgIDB4MGEgTEFOR19TUEFOSVNICisrICAgMHgwYiBMQU5HX0ZJTk5JU0gKKysgICAweDBjIExBTkdfRlJFTkNICisrICAgMHgwZCBMQU5HX0hFQlJFVworKyAgIDB4MGUgTEFOR19IVU5HQVJJQU4KKysgICAweDBmIExBTkdfSUNFTEFORElDCisrICAgMHgxMCBMQU5HX0lUQUxJQU4KKysgICAweDExIExBTkdfSkFQQU5FU0UKKysgICAweDEyIExBTkdfS09SRUFOCisrICAgMHgxMyBMQU5HX0RVVENICisrICAgMHgxNCBMQU5HX05PUldFR0lBTgorKyAgIDB4MTUgTEFOR19QT0xJU0gKKysgICAweDE2IExBTkdfUE9SVFVHVUVTRQorKyAgIDB4MTcgTEFOR19SSEFFVE9fUk9NQU5DRQorKyAgIDB4MTggTEFOR19ST01BTklBTgorKyAgIDB4MTkgTEFOR19SVVNTSUFOCisrICAgMHgxYSBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKyAgIDB4MWIgTEFOR19TTE9WQUsKKysgICAweDFjIExBTkdfQUxCQU5JQU4KKysgICAweDFkIExBTkdfU1dFRElTSAorKyAgIDB4MWUgTEFOR19USEFJCisrICAgMHgxZiBMQU5HX1RVUktJU0gKKysgICAweDIwIExBTkdfVVJEVQorKyAgIDB4MjEgTEFOR19JTkRPTkVTSUFOCisrICAgMHgyMiBMQU5HX1VLUkFJTklBTgorKyAgIDB4MjMgTEFOR19CRUxBUlVTSUFOCisrICAgMHgyNCBMQU5HX1NMT1ZFTklBTgorKyAgIDB4MjUgTEFOR19FU1RPTklBTgorKyAgIDB4MjYgTEFOR19MQVRWSUFOCisrICAgMHgyNyBMQU5HX0xJVEhVQU5JQU4KKysgICAweDI4IExBTkdfVEFKSUsKKysgICAweDI5IExBTkdfRkFSU0kKKysgICAweDJhIExBTkdfVklFVE5BTUVTRQorKyAgIDB4MmIgTEFOR19BUk1FTklBTgorKyAgIDB4MmMgTEFOR19BWkVSSQorKyAgIDB4MmQgTEFOR19CQVNRVUUKKysgICAweDJlIExBTkdfU09SQklBTgorKyAgIDB4MmYgTEFOR19NQUNFRE9OSUFOCisrICAgMHgzMCBMQU5HX1NVVFUKKysgICAweDMxIExBTkdfVFNPTkdBCisrICAgMHgzMiBMQU5HX1RTV0FOQQorKyAgIDB4MzMgTEFOR19WRU5EQQorKyAgIDB4MzQgTEFOR19YSE9TQQorKyAgIDB4MzUgTEFOR19aVUxVCisrICAgMHgzNiBMQU5HX0FGUklLQUFOUworKyAgIDB4MzcgTEFOR19HRU9SR0lBTgorKyAgIDB4MzggTEFOR19GQUVST0VTRQorKyAgIDB4MzkgTEFOR19ISU5ESQorKyAgIDB4M2EgTEFOR19NQUxURVNFCisrICAgMHgzYiBMQU5HX1NBQU1JCisrICAgMHgzYyBMQU5HX0dBRUxJQworKyAgIDB4M2QgTEFOR19ZSURESVNICisrICAgMHgzZSBMQU5HX01BTEFZCisrICAgMHgzZiBMQU5HX0tBWkFLCisrICAgMHg0MCBMQU5HX0tZUkdZWgorKyAgIDB4NDEgTEFOR19TV0FISUxJCisrICAgMHg0MiBMQU5HX1RVUktNRU4KKysgICAweDQzIExBTkdfVVpCRUsKKysgICAweDQ0IExBTkdfVEFUQVIKKysgICAweDQ1IExBTkdfQkVOR0FMSQorKyAgIDB4NDYgTEFOR19QVU5KQUJJCisrICAgMHg0NyBMQU5HX0dVSkFSQVRJCisrICAgMHg0OCBMQU5HX09SSVlBCisrICAgMHg0OSBMQU5HX1RBTUlMCisrICAgMHg0YSBMQU5HX1RFTFVHVQorKyAgIDB4NGIgTEFOR19LQU5OQURBCisrICAgMHg0YyBMQU5HX01BTEFZQUxBTQorKyAgIDB4NGQgTEFOR19BU1NBTUVTRQorKyAgIDB4NGUgTEFOR19NQVJBVEhJCisrICAgMHg0ZiBMQU5HX1NBTlNLUklUCisrICAgMHg1MCBMQU5HX01PTkdPTElBTgorKyAgIDB4NTEgTEFOR19USUJFVEFOCisrICAgMHg1MiBMQU5HX1dFTFNICisrICAgMHg1MyBMQU5HX0NBTUJPRElBTgorKyAgIDB4NTQgTEFOR19MQU8KKysgICAweDU1IExBTkdfQlVSTUVTRQorKyAgIDB4NTYgTEFOR19HQUxJQ0lBTgorKyAgIDB4NTcgTEFOR19LT05LQU5JCisrICAgMHg1OCBMQU5HX01BTklQVVJJCisrICAgMHg1OSBMQU5HX1NJTkRISQorKyAgIDB4NWEgTEFOR19TWVJJQUMKKysgICAweDViIExBTkdfU0lOSEFMRVNFCisrICAgMHg1YyBMQU5HX0NIRVJPS0VFCisrICAgMHg1ZCBMQU5HX0lOVUtUSVRVVAorKyAgIDB4NWUgTEFOR19BTUhBUklDCisrICAgMHg1ZiBMQU5HX1RBTUFaSUdIVAorKyAgIDB4NjAgTEFOR19LQVNITUlSSQorKyAgIDB4NjEgTEFOR19ORVBBTEkKKysgICAweDYyIExBTkdfRlJJU0lBTgorKyAgIDB4NjMgTEFOR19QQVNIVE8KKysgICAweDY0IExBTkdfVEFHQUxPRworKyAgIDB4NjUgTEFOR19ESVZFSEkKKysgICAweDY2IExBTkdfRURPCisrICAgMHg2NyBMQU5HX0ZVTEZVTERFCisrICAgMHg2OCBMQU5HX0hBVVNBCisrICAgMHg2OSBMQU5HX0lCSUJJTworKyAgIDB4NmEgTEFOR19ZT1JVQkEKKysgICAweDcwIExBTkdfSUdCTworKyAgIDB4NzEgTEFOR19LQU5VUkkKKysgICAweDcyIExBTkdfT1JPTU8KKysgICAweDczIExBTkdfVElHUklOWUEKKysgICAweDc0IExBTkdfR1VBUkFOSQorKyAgIDB4NzUgTEFOR19IQVdBSUlBTgorKyAgIDB4NzYgTEFOR19MQVRJTgorKyAgIDB4NzcgTEFOR19TT01BTEkKKysgICAweDc4IExBTkdfWUkKKysgICAweDc5IExBTkdfUEFQSUFNRU5UVQorKyovCisrLyogTWluZ3cgaGVhZGVycyBkb24ndCBoYXZlIGxhdGVzdCBsYW5ndWFnZSBhbmQgc3VibGFuZ3VhZ2UgY29kZXMuICAqLworKyMgaWZuZGVmIExBTkdfQUZSSUtBQU5TCisrIyBkZWZpbmUgTEFOR19BRlJJS0FBTlMgMHgzNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FMQkFOSUFOCisrIyBkZWZpbmUgTEFOR19BTEJBTklBTiAweDFjCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQU1IQVJJQworKyMgZGVmaW5lIExBTkdfQU1IQVJJQyAweDVlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVJBQklDCisrIyBkZWZpbmUgTEFOR19BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0FSTUVOSUFOCisrIyBkZWZpbmUgTEFOR19BUk1FTklBTiAweDJiCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQVNTQU1FU0UKKysjIGRlZmluZSBMQU5HX0FTU0FNRVNFIDB4NGQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19BWkVSSQorKyMgZGVmaW5lIExBTkdfQVpFUkkgMHgyYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0JBU1FVRQorKyMgZGVmaW5lIExBTkdfQkFTUVVFIDB4MmQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRUxBUlVTSUFOCisrIyBkZWZpbmUgTEFOR19CRUxBUlVTSUFOIDB4MjMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CRU5HQUxJCisrIyBkZWZpbmUgTEFOR19CRU5HQUxJIDB4NDUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19CVVJNRVNFCisrIyBkZWZpbmUgTEFOR19CVVJNRVNFIDB4NTUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19DQU1CT0RJQU4KKysjIGRlZmluZSBMQU5HX0NBTUJPRElBTiAweDUzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0FUQUxBTgorKyMgZGVmaW5lIExBTkdfQ0FUQUxBTiAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfQ0hFUk9LRUUKKysjIGRlZmluZSBMQU5HX0NIRVJPS0VFIDB4NWMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ESVZFSEkKKysjIGRlZmluZSBMQU5HX0RJVkVISSAweDY1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRURPCisrIyBkZWZpbmUgTEFOR19FRE8gMHg2NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0VTVE9OSUFOCisrIyBkZWZpbmUgTEFOR19FU1RPTklBTiAweDI1CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfRkFFUk9FU0UKKysjIGRlZmluZSBMQU5HX0ZBRVJPRVNFIDB4MzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19GQVJTSQorKyMgZGVmaW5lIExBTkdfRkFSU0kgMHgyOQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZSSVNJQU4KKysjIGRlZmluZSBMQU5HX0ZSSVNJQU4gMHg2MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0ZVTEZVTERFCisrIyBkZWZpbmUgTEFOR19GVUxGVUxERSAweDY3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0FFTElDCisrIyBkZWZpbmUgTEFOR19HQUVMSUMgMHgzYworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0dBTElDSUFOCisrIyBkZWZpbmUgTEFOR19HQUxJQ0lBTiAweDU2CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfR0VPUkdJQU4KKysjIGRlZmluZSBMQU5HX0dFT1JHSUFOIDB4MzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUFSQU5JCisrIyBkZWZpbmUgTEFOR19HVUFSQU5JIDB4NzQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19HVUpBUkFUSQorKyMgZGVmaW5lIExBTkdfR1VKQVJBVEkgMHg0NworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0hBVVNBCisrIyBkZWZpbmUgTEFOR19IQVVTQSAweDY4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSEFXQUlJQU4KKysjIGRlZmluZSBMQU5HX0hBV0FJSUFOIDB4NzUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19IRUJSRVcKKysjIGRlZmluZSBMQU5HX0hFQlJFVyAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSElOREkKKysjIGRlZmluZSBMQU5HX0hJTkRJIDB4MzkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19JQklCSU8KKysjIGRlZmluZSBMQU5HX0lCSUJJTyAweDY5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSUdCTworKyMgZGVmaW5lIExBTkdfSUdCTyAweDcwCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5ET05FU0lBTgorKyMgZGVmaW5lIExBTkdfSU5ET05FU0lBTiAweDIxCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfSU5VS1RJVFVUCisrIyBkZWZpbmUgTEFOR19JTlVLVElUVVQgMHg1ZAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTk5BREEKKysjIGRlZmluZSBMQU5HX0tBTk5BREEgMHg0YgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBTlVSSQorKyMgZGVmaW5lIExBTkdfS0FOVVJJIDB4NzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19LQVNITUlSSQorKyMgZGVmaW5lIExBTkdfS0FTSE1JUkkgMHg2MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0tBWkFLCisrIyBkZWZpbmUgTEFOR19LQVpBSyAweDNmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS09OS0FOSQorKyMgZGVmaW5lIExBTkdfS09OS0FOSSAweDU3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfS1lSR1laCisrIyBkZWZpbmUgTEFOR19LWVJHWVogMHg0MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBTworKyMgZGVmaW5lIExBTkdfTEFPIDB4NTQKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19MQVRJTgorKyMgZGVmaW5lIExBTkdfTEFUSU4gMHg3NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xBVFZJQU4KKysjIGRlZmluZSBMQU5HX0xBVFZJQU4gMHgyNgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX0xJVEhVQU5JQU4KKysjIGRlZmluZSBMQU5HX0xJVEhVQU5JQU4gMHgyNworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BQ0VET05JQU4KKysjIGRlZmluZSBMQU5HX01BQ0VET05JQU4gMHgyZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTEFZCisrIyBkZWZpbmUgTEFOR19NQUxBWSAweDNlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFMQVlBTEFNCisrIyBkZWZpbmUgTEFOR19NQUxBWUFMQU0gMHg0YworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTFRFU0UKKysjIGRlZmluZSBMQU5HX01BTFRFU0UgMHgzYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX01BTklQVVJJCisrIyBkZWZpbmUgTEFOR19NQU5JUFVSSSAweDU4CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTUFSQVRISQorKyMgZGVmaW5lIExBTkdfTUFSQVRISSAweDRlCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfTU9OR09MSUFOCisrIyBkZWZpbmUgTEFOR19NT05HT0xJQU4gMHg1MAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX05FUEFMSQorKyMgZGVmaW5lIExBTkdfTkVQQUxJIDB4NjEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19PUklZQQorKyMgZGVmaW5lIExBTkdfT1JJWUEgMHg0OAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX09ST01PCisrIyBkZWZpbmUgTEFOR19PUk9NTyAweDcyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFQSUFNRU5UVQorKyMgZGVmaW5lIExBTkdfUEFQSUFNRU5UVSAweDc5CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfUEFTSFRPCisrIyBkZWZpbmUgTEFOR19QQVNIVE8gMHg2MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1BVTkpBQkkKKysjIGRlZmluZSBMQU5HX1BVTkpBQkkgMHg0NgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1JIQUVUT19ST01BTkNFCisrIyBkZWZpbmUgTEFOR19SSEFFVE9fUk9NQU5DRSAweDE3CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0FBTUkKKysjIGRlZmluZSBMQU5HX1NBQU1JIDB4M2IKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TQU5TS1JJVAorKyMgZGVmaW5lIExBTkdfU0FOU0tSSVQgMHg0ZgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NFUkJJQU4KKysjIGRlZmluZSBMQU5HX1NFUkJJQU4gMHgxYQorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NJTkRISQorKyMgZGVmaW5lIExBTkdfU0lOREhJIDB4NTkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TSU5IQUxFU0UKKysjIGRlZmluZSBMQU5HX1NJTkhBTEVTRSAweDViCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfU0xPVkFLCisrIyBkZWZpbmUgTEFOR19TTE9WQUsgMHgxYgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1NPTUFMSQorKyMgZGVmaW5lIExBTkdfU09NQUxJIDB4NzcKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TT1JCSUFOCisrIyBkZWZpbmUgTEFOR19TT1JCSUFOIDB4MmUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TVVRVCisrIyBkZWZpbmUgTEFOR19TVVRVIDB4MzAKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TV0FISUxJCisrIyBkZWZpbmUgTEFOR19TV0FISUxJIDB4NDEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19TWVJJQUMKKysjIGRlZmluZSBMQU5HX1NZUklBQyAweDVhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFHQUxPRworKyMgZGVmaW5lIExBTkdfVEFHQUxPRyAweDY0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFKSUsKKysjIGRlZmluZSBMQU5HX1RBSklLIDB4MjgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQU1BWklHSFQKKysjIGRlZmluZSBMQU5HX1RBTUFaSUdIVCAweDVmCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVEFNSUwKKysjIGRlZmluZSBMQU5HX1RBTUlMIDB4NDkKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UQVRBUgorKyMgZGVmaW5lIExBTkdfVEFUQVIgMHg0NAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RFTFVHVQorKyMgZGVmaW5lIExBTkdfVEVMVUdVIDB4NGEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USEFJCisrIyBkZWZpbmUgTEFOR19USEFJIDB4MWUKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUJFVEFOCisrIyBkZWZpbmUgTEFOR19USUJFVEFOIDB4NTEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19USUdSSU5ZQQorKyMgZGVmaW5lIExBTkdfVElHUklOWUEgMHg3MworKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1RTT05HQQorKyMgZGVmaW5lIExBTkdfVFNPTkdBIDB4MzEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19UU1dBTkEKKysjIGRlZmluZSBMQU5HX1RTV0FOQSAweDMyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVFVSS01FTgorKyMgZGVmaW5lIExBTkdfVFVSS01FTiAweDQyCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVUtSQUlOSUFOCisrIyBkZWZpbmUgTEFOR19VS1JBSU5JQU4gMHgyMgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VSRFUKKysjIGRlZmluZSBMQU5HX1VSRFUgMHgyMAorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1VaQkVLCisrIyBkZWZpbmUgTEFOR19VWkJFSyAweDQzCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfVkVOREEKKysjIGRlZmluZSBMQU5HX1ZFTkRBIDB4MzMKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19WSUVUTkFNRVNFCisrIyBkZWZpbmUgTEFOR19WSUVUTkFNRVNFIDB4MmEKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19XRUxTSAorKyMgZGVmaW5lIExBTkdfV0VMU0ggMHg1MgorKyMgZW5kaWYKKysjIGlmbmRlZiBMQU5HX1hIT1NBCisrIyBkZWZpbmUgTEFOR19YSE9TQSAweDM0CisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWUkKKysjIGRlZmluZSBMQU5HX1lJIDB4NzgKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZSURESVNICisrIyBkZWZpbmUgTEFOR19ZSURESVNIIDB4M2QKKysjIGVuZGlmCisrIyBpZm5kZWYgTEFOR19ZT1JVQkEKKysjIGRlZmluZSBMQU5HX1lPUlVCQSAweDZhCisrIyBlbmRpZgorKyMgaWZuZGVmIExBTkdfWlVMVQorKyMgZGVmaW5lIExBTkdfWlVMVSAweDM1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NBVURJX0FSQUJJQSAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0lSQVEKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19JUkFRIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfRUdZUFQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19FR1lQVCAweDAzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX0xJQllBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfTElCWUEgMHgwNAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19BTEdFUklBCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQUxHRVJJQSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19NT1JPQ0NPIDB4MDYKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfVFVOSVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1RVTklTSUEgMHgwNworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19PTUFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfT01BTiAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1lFTUVOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfWUVNRU4gMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19TWVJJQQorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX1NZUklBIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfSk9SREFOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfSk9SREFOIDB4MGIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19BUkFCSUNfTEVCQU5PTgorKyMgZGVmaW5lIFNVQkxBTkdfQVJBQklDX0xFQkFOT04gMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19LVVdBSVQKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19LVVdBSVQgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19VQUUKKysjIGRlZmluZSBTVUJMQU5HX0FSQUJJQ19VQUUgMHgwZQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfQkFIUkFJTiAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVJBQklDX1FBVEFSCisrIyBkZWZpbmUgU1VCTEFOR19BUkFCSUNfUUFUQVIgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0FaRVJJX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19BWkVSSV9MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX0FaRVJJX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19CRU5HQUxJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0gKKysjIGRlZmluZSBTVUJMQU5HX0JFTkdBTElfQkFOR0xBREVTSCAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVQorKyMgZGVmaW5lIFNVQkxBTkdfQ0hJTkVTRV9NQUNBVSAweDA1CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TT1VUSF9BRlJJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU09VVEhfQUZSSUNBIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0EKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfSkFNQUlDQSAweDA4CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU4KKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfQ0FSSUJCRUFOIDB4MDkKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19FTkdMSVNIX0JFTElaRQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9CRUxJWkUgMHgwYQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfVFJJTklEQUQgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfWklNQkFCV0UgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVMgMHgwZAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0VOR0xJU0hfSU5ET05FU0lBCisrIyBkZWZpbmUgU1VCTEFOR19FTkdMSVNIX0lORE9ORVNJQSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORworKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORyAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9JTkRJQSAweDEwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQQorKyMgZGVmaW5lIFNVQkxBTkdfRU5HTElTSF9NQUxBWVNJQSAweDExCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkUKKysjIGRlZmluZSBTVUJMQU5HX0VOR0xJU0hfU0lOR0FQT1JFIDB4MTIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRworKyMgZGVmaW5lIFNVQkxBTkdfRlJFTkNIX0xVWEVNQk9VUkcgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NT05BQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT05BQ08gMHgwNgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfV0VTVElORElFUyAweDA3CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1JFVU5JT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9SRVVOSU9OIDB4MDgKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ09OR08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DT05HTyAweDA5CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX1NFTkVHQUwKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfQ0FNRVJPT04KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTiAweDBiCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX0NPVEVESVZPSVJFCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkUgMHgwYworKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0ZSRU5DSF9NQUxJCisrIyBkZWZpbmUgU1VCTEFOR19GUkVOQ0hfTUFMSSAweDBkCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfRlJFTkNIX01PUk9DQ08KKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9NT1JPQ0NPIDB4MGUKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19GUkVOQ0hfSEFJVEkKKysjIGRlZmluZSBTVUJMQU5HX0ZSRU5DSF9IQUlUSSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfR0VSTUFOX0xVWEVNQk9VUkcKKysjIGRlZmluZSBTVUJMQU5HX0dFUk1BTl9MVVhFTUJPVVJHIDB4MDQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTgorKyMgZGVmaW5lIFNVQkxBTkdfR0VSTUFOX0xJRUNIVEVOU1RFSU4gMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX0tBU0hNSVJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19LQVNITUlSSV9JTkRJQSAweDAyCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfTUFMQVlfTUFMQVlTSUEKKysjIGRlZmluZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19NQUxBWV9CUlVORUlfREFSVVNTQUxBTQorKyMgZGVmaW5lIFNVQkxBTkdfTUFMQVlfQlJVTkVJX0RBUlVTU0FMQU0gMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX05FUEFMSV9JTkRJQQorKyMgZGVmaW5lIFNVQkxBTkdfTkVQQUxJX0lORElBIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX0lORElBCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX0lORElBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19QVU5KQUJJX1BBS0lTVEFOIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9ST01BTklBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9ST01BTklBIDB4MDAKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBCisrIyBkZWZpbmUgU1VCTEFOR19ST01BTklBTl9NT0xET1ZBIDB4MDEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDCisrIyBkZWZpbmUgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDIDB4MDMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TSU5ESElfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1NJTkRISV9JTkRJQSAweDAwCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU0lOREhJX1BBS0lTVEFOCisrIyBkZWZpbmUgU1VCTEFOR19TSU5ESElfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfR1VBVEVNQUxBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0dVQVRFTUFMQSAweDA0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NPU1RBX1JJQ0EgMHgwNQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX1BBTkFNQSAweDA2CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9ET01JTklDQU5fUkVQVUJMSUMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDIDB4MDcKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1ZFTkVaVUVMQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9WRU5FWlVFTEEgMHgwOAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUEgMHgwOQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfUEVSVQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QRVJVIDB4MGEKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0FSR0VOVElOQQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9BUkdFTlRJTkEgMHgwYgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUgorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9FQ1VBRE9SIDB4MGMKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX0NISUxFCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0NISUxFIDB4MGQKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19TUEFOSVNIX1VSVUdVQVkKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWSAweDBlCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWQorKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QQVJBR1VBWSAweDBmCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9CT0xJVklBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX0JPTElWSUEgMHgxMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfRUxfU0FMVkFET1IgMHgxMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMKKysjIGRlZmluZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVMgMHgxMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1NQQU5JU0hfTklDQVJBR1VBCisrIyBkZWZpbmUgU1VCTEFOR19TUEFOSVNIX05JQ0FSQUdVQSAweDEzCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTworKyMgZGVmaW5lIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTyAweDE0CisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfU1dFRElTSF9GSU5MQU5ECisrIyBkZWZpbmUgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMKKysjIGRlZmluZSBTVUJMQU5HX1RBTUFaSUdIVF9BUkFCSUMgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RBTUFaSUdIVF9MQVRJTgorKyMgZGVmaW5lIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOIDB4MDIKKysjIGVuZGlmCisrIyBpZm5kZWYgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQQorKyMgZGVmaW5lIFNVQkxBTkdfVElHUklOWUFfRVRISU9QSUEgMHgwMAorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEKKysjIGRlZmluZSBTVUJMQU5HX1RJR1JJTllBX0VSSVRSRUEgMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfUEFLSVNUQU4KKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU4gMHgwMQorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VSRFVfSU5ESUEKKysjIGRlZmluZSBTVUJMQU5HX1VSRFVfSU5ESUEgMHgwMgorKyMgZW5kaWYKKysjIGlmbmRlZiBTVUJMQU5HX1VaQkVLX0xBVElOCisrIyBkZWZpbmUgU1VCTEFOR19VWkJFS19MQVRJTiAweDAxCisrIyBlbmRpZgorKyMgaWZuZGVmIFNVQkxBTkdfVVpCRUtfQ1lSSUxMSUMKKysjIGRlZmluZSBTVUJMQU5HX1VaQkVLX0NZUklMTElDIDB4MDIKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogWFBHMyBkZWZpbmVzIHRoZSByZXN1bHQgb2YgJ3NldGxvY2FsZSAoY2F0ZWdvcnksIE5VTEwpJyBhczoKKysgICAiRGlyZWN0cyAnc2V0bG9jYWxlKCknIHRvIHF1ZXJ5ICdjYXRlZ29yeScgYW5kIHJldHVybiB0aGUgY3VycmVudAorKyAgICBzZXR0aW5nIG9mICdsb2NhbCcuIgorKyAgIEhvd2V2ZXIgaXQgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZXhhY3QgZm9ybWF0LiAgTmVpdGhlciBkbyBTVVNWMiBhbmQKKysgICBJU08gQyA5OS4gIFNvIHdlIGNhbiB1c2UgdGhpcyBmZWF0dXJlIG9ubHkgb24gc2VsZWN0ZWQgc3lzdGVtcyAoZS5nLgorKyAgIHRob3NlIHVzaW5nIEdOVSBDIExpYnJhcnkpLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID49IDIpCisrIyBkZWZpbmUgSEFWRV9MT0NBTEVfTlVMTAorKyNlbmRpZgorKworKy8qIERldGVybWluZSB0aGUgY3VycmVudCBsb2NhbGUncyBuYW1lLCBhbmQgY2Fub25pY2FsaXplIGl0IGludG8gWFBHIHN5bnRheAorKyAgICAgbGFuZ3VhZ2VbX3RlcnJpdG9yeVsuY29kZXNldF1dW0Btb2RpZmllcl0KKysgICBUaGUgY29kZXNldCBwYXJ0IGluIHRoZSByZXN1bHQgaXMgbm90IHJlbGlhYmxlOyB0aGUgbG9jYWxlX2NoYXJzZXQoKQorKyAgIHNob3VsZCBiZSB1c2VkIGZvciBjb2Rlc2V0IGluZm9ybWF0aW9uIGluc3RlYWQuCisrICAgVGhlIHJlc3VsdCBtdXN0IG5vdCBiZSBmcmVlZDsgaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuICAqLworKworK2NvbnN0IGNoYXIgKgorK19ubF9sb2NhbGVfbmFtZSAoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpjYXRlZ29yeW5hbWUpCisreworKyAgY29uc3QgY2hhciAqcmV0dmFsOworKworKyNpZm5kZWYgV0lOMzIKKysKKysgIC8qIFVzZSB0aGUgUE9TSVggbWV0aG9kcyBvZiBsb29raW5nIHRvICdMQ19BTEwnLCAnTENfeHh4JywgYW5kICdMQU5HJy4KKysgICAgIE9uIHNvbWUgc3lzdGVtcyB0aGlzIGNhbiBiZSBkb25lIGJ5IHRoZSAnc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworKyMgaWYgZGVmaW5lZCBIQVZFX1NFVExPQ0FMRSAmJiBkZWZpbmVkIEhBVkVfTENfTUVTU0FHRVMgJiYgZGVmaW5lZCBIQVZFX0xPQ0FMRV9OVUxMCisrICByZXR2YWwgPSBzZXRsb2NhbGUgKGNhdGVnb3J5LCBOVUxMKTsKKysjIGVsc2UKKysgIC8qIFNldHRpbmcgb2YgTENfQUxMIG92ZXJ3cml0ZXMgYWxsIG90aGVyLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCA9PSBOVUxMIHx8IHJldHZhbFswXSA9PSAnXDAnKQorKyAgICB7CisrICAgICAgLyogTmV4dCBjb21lcyB0aGUgbmFtZSBvZiB0aGUgZGVzaXJlZCBjYXRlZ29yeS4gICovCisrICAgICAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCB8fCByZXR2YWxbMF0gPT0gJ1wwJykKKysJeworKwkgIC8qIExhc3QgcG9zc2liaWxpdHkgaXMgdGhlIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuICAqLworKwkgIHJldHZhbCA9IGdldGVudiAoIkxBTkciKTsKKysJICBpZiAocmV0dmFsID09IE5VTEwgfHwgcmV0dmFsWzBdID09ICdcMCcpCisrCSAgICAvKiBXZSB1c2UgQyBhcyB0aGUgZGVmYXVsdCBkb21haW4uICBQT1NJWCBzYXlzIHRoaXMgaXMKKysJICAgICAgIGltcGxlbWVudGF0aW9uIGRlZmluZWQuICAqLworKwkgICAgcmV0dmFsID0gIkMiOworKwl9CisrICAgIH0KKysjIGVuZGlmCisrCisrICByZXR1cm4gcmV0dmFsOworKworKyNlbHNlIC8qIFdJTjMyICovCisrCisrICAvKiBSZXR1cm4gYW4gWFBHIHN0eWxlIGxvY2FsZSBuYW1lIGxhbmd1YWdlW190ZXJyaXRvcnldW0Btb2RpZmllcl0uCisrICAgICBEb24ndCBldmVuIGJvdGhlciBkZXRlcm1pbmluZyB0aGUgY29kZXNldDsgaXQncyBub3QgdXNlZnVsIGluIHRoaXMKKysgICAgIGNvbnRleHQsIGJlY2F1c2UgbWVzc2FnZSBjYXRhbG9ncyBhcmUgbm90IHNwZWNpZmljIHRvIGEgc2luZ2xlCisrICAgICBjb2Rlc2V0LiAgKi8KKysKKysgIExDSUQgbGNpZDsKKysgIExBTkdJRCBsYW5naWQ7CisrICBpbnQgcHJpbWFyeSwgc3ViOworKworKyAgLyogTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSBzeXN0ZW0gc2V0dGluZ3MgdGhyb3VnaCBlbnZpcm9ubWVudAorKyAgICAgdmFyaWFibGVzLCBhcyBvbiBQT1NJWCBzeXN0ZW1zLiAgKi8KKysgIHJldHZhbCA9IGdldGVudiAoIkxDX0FMTCIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52IChjYXRlZ29yeW5hbWUpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKyAgcmV0dmFsID0gZ2V0ZW52ICgiTEFORyIpOworKyAgaWYgKHJldHZhbCAhPSBOVUxMICYmIHJldHZhbFswXSAhPSAnXDAnKQorKyAgICByZXR1cm4gcmV0dmFsOworKworKyAgLyogVXNlIG5hdGl2ZSBXaW4zMiBBUEkgbG9jYWxlIElELiAgKi8KKysgIGxjaWQgPSBHZXRUaHJlYWRMb2NhbGUgKCk7CisrCisrICAvKiBTdHJpcCBvZmYgdGhlIHNvcnRpbmcgcnVsZXMsIGtlZXAgb25seSB0aGUgbGFuZ3VhZ2UgcGFydC4gICovCisrICBsYW5naWQgPSBMQU5HSURGUk9NTENJRCAobGNpZCk7CisrCisrICAvKiBTcGxpdCBpbnRvIGxhbmd1YWdlIGFuZCB0ZXJyaXRvcnkgcGFydC4gICovCisrICBwcmltYXJ5ID0gUFJJTUFSWUxBTkdJRCAobGFuZ2lkKTsKKysgIHN1YiA9IFNVQkxBTkdJRCAobGFuZ2lkKTsKKysKKysgIC8qIERpc3BhdGNoIG9uIGxhbmd1YWdlLgorKyAgICAgU2VlIGFsc28gaHR0cDovL3d3dy51bmljb2RlLm9yZy91bmljb2RlL29ubGluZWRhdC9sYW5ndWFnZXMuaHRtbCAuCisrICAgICBGb3IgZGV0YWlscyBhYm91dCBsYW5ndWFnZXMsIHNlZSBodHRwOi8vd3d3LmV0aG5vbG9ndWUuY29tLyAuICAqLworKyAgc3dpdGNoIChwcmltYXJ5KQorKyAgICB7CisrICAgIGNhc2UgTEFOR19BRlJJS0FBTlM6IHJldHVybiAiYWZfWkEiOworKyAgICBjYXNlIExBTkdfQUxCQU5JQU46IHJldHVybiAic3FfQUwiOworKyAgICBjYXNlIExBTkdfQU1IQVJJQzogcmV0dXJuICJhbV9FVCI7CisrICAgIGNhc2UgTEFOR19BUkFCSUM6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19TQVVESV9BUkFCSUE6IHJldHVybiAiYXJfU0EiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0lSQVE6IHJldHVybiAiYXJfSVEiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0VHWVBUOiByZXR1cm4gImFyX0VHIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19MSUJZQTogcmV0dXJuICJhcl9MWSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfQUxHRVJJQTogcmV0dXJuICJhcl9EWiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfTU9ST0NDTzogcmV0dXJuICJhcl9NQSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVFVOSVNJQTogcmV0dXJuICJhcl9UTiI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfT01BTjogcmV0dXJuICJhcl9PTSI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfWUVNRU46IHJldHVybiAiYXJfWUUiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX1NZUklBOiByZXR1cm4gImFyX1NZIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19KT1JEQU46IHJldHVybiAiYXJfSk8iOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0xFQkFOT046IHJldHVybiAiYXJfTEIiOworKwljYXNlIFNVQkxBTkdfQVJBQklDX0tVV0FJVDogcmV0dXJuICJhcl9LVyI7CisrCWNhc2UgU1VCTEFOR19BUkFCSUNfVUFFOiByZXR1cm4gImFyX0FFIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19CQUhSQUlOOiByZXR1cm4gImFyX0JIIjsKKysJY2FzZSBTVUJMQU5HX0FSQUJJQ19RQVRBUjogcmV0dXJuICJhcl9RQSI7CisrCX0KKysgICAgICByZXR1cm4gImFyIjsKKysgICAgY2FzZSBMQU5HX0FSTUVOSUFOOiByZXR1cm4gImh5X0FNIjsKKysgICAgY2FzZSBMQU5HX0FTU0FNRVNFOiByZXR1cm4gImFzX0lOIjsKKysgICAgY2FzZSBMQU5HX0FaRVJJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCS8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIEF6ZXJiYWlqYW5pIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKwljYXNlIFNVQkxBTkdfQVpFUklfTEFUSU46IHJldHVybiAiYXpfQVpAbGF0aW4iOworKwljYXNlIFNVQkxBTkdfQVpFUklfQ1lSSUxMSUM6IHJldHVybiAiYXpfQVpAY3lyaWxsaWMiOworKwl9CisrICAgICAgcmV0dXJuICJheiI7CisrICAgIGNhc2UgTEFOR19CQVNRVUU6CisrICAgICAgcmV0dXJuICJldSI7IC8qIEFtYmlndW91czogY291bGQgYmUgImV1X0VTIiBvciAiZXVfRlIiLiAgKi8KKysgICAgY2FzZSBMQU5HX0JFTEFSVVNJQU46IHJldHVybiAiYmVfQlkiOworKyAgICBjYXNlIExBTkdfQkVOR0FMSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQkVOR0FMSV9JTkRJQTogcmV0dXJuICJibl9JTiI7CisrCWNhc2UgU1VCTEFOR19CRU5HQUxJX0JBTkdMQURFU0g6IHJldHVybiAiYm5fQkQiOworKwl9CisrICAgICAgcmV0dXJuICJibiI7CisrICAgIGNhc2UgTEFOR19CVUxHQVJJQU46IHJldHVybiAiYmdfQkciOworKyAgICBjYXNlIExBTkdfQlVSTUVTRTogcmV0dXJuICJteV9NTSI7CisrICAgIGNhc2UgTEFOR19DQU1CT0RJQU46IHJldHVybiAia21fS0giOworKyAgICBjYXNlIExBTkdfQ0FUQUxBTjogcmV0dXJuICJjYV9FUyI7CisrICAgIGNhc2UgTEFOR19DSEVST0tFRTogcmV0dXJuICJjaHJfVVMiOworKyAgICBjYXNlIExBTkdfQ0hJTkVTRToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9UUkFESVRJT05BTDogcmV0dXJuICJ6aF9UVyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQ6IHJldHVybiAiemhfQ04iOworKwljYXNlIFNVQkxBTkdfQ0hJTkVTRV9IT05HS09ORzogcmV0dXJuICJ6aF9ISyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX1NJTkdBUE9SRTogcmV0dXJuICJ6aF9TRyI7CisrCWNhc2UgU1VCTEFOR19DSElORVNFX01BQ0FVOiByZXR1cm4gInpoX01PIjsKKysJfQorKyAgICAgIHJldHVybiAiemgiOworKyAgICBjYXNlIExBTkdfQ1JPQVRJQU46CQkvKiBMQU5HX0NST0FUSUFOID09IExBTkdfU0VSQklBTgorKwkJCQkgKiBXaGF0IHVzZWQgdG8gYmUgY2FsbGVkIFNlcmJvLUNyb2F0aWFuCisrCQkJCSAqIHNob3VsZCByZWFsbHkgbm93IGJlIHR3byBzZXBhcmF0ZQorKwkJCQkgKiBsYW5ndWFnZXMgYmVjYXVzZSBvZiBwb2xpdGljYWwgcmVhc29ucy4KKysJCQkJICogKFNheXMgdG1sLCB3aG8ga25vd3Mgbm90aGluZyBhYm91dCBTZXJiaWFuCisrCQkJCSAqIG9yIENyb2F0aWFuLikKKysJCQkJICogKEkgY2FuIGZlZWwgdGhvc2UgZmxhbWVzIGNvbWluZyBhbHJlYWR5LikKKysJCQkJICovCisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAiaHJfSFIiOworKwljYXNlIFNVQkxBTkdfU0VSQklBTl9MQVRJTjogcmV0dXJuICJzcl9DUyI7CisrCWNhc2UgU1VCTEFOR19TRVJCSUFOX0NZUklMTElDOiByZXR1cm4gInNyX0NTQGN5cmlsbGljIjsKKysJfQorKyAgICAgIHJldHVybiAiaHIiOworKyAgICBjYXNlIExBTkdfQ1pFQ0g6IHJldHVybiAiY3NfQ1oiOworKyAgICBjYXNlIExBTkdfREFOSVNIOiByZXR1cm4gImRhX0RLIjsKKysgICAgY2FzZSBMQU5HX0RJVkVISTogcmV0dXJuICJkdl9NViI7CisrICAgIGNhc2UgTEFOR19EVVRDSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRFVUQ0g6IHJldHVybiAibmxfTkwiOworKwljYXNlIFNVQkxBTkdfRFVUQ0hfQkVMR0lBTjogLyogRkxFTUlTSCwgVkxBQU1TICovIHJldHVybiAibmxfQkUiOworKwl9CisrICAgICAgcmV0dXJuICJubCI7CisrICAgIGNhc2UgTEFOR19FRE86IHJldHVybiAiYmluX05HIjsKKysgICAgY2FzZSBMQU5HX0VOR0xJU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJLyogU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gSGVoLiBJIHRob3VnaHQKKysJICogRW5nbGlzaCB3YXMgdGhlIGxhbmd1YWdlIHNwb2tlbiBpbiBFbmdsYW5kLgorKwkgKiBPaCB3ZWxsLgorKwkgKi8KKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfVVM6IHJldHVybiAiZW5fVVMiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9VSzogcmV0dXJuICJlbl9HQiI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0FVUzogcmV0dXJuICJlbl9BVSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0NBTjogcmV0dXJuICJlbl9DQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX05aOiByZXR1cm4gImVuX05aIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfRUlSRTogcmV0dXJuICJlbl9JRSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1NPVVRIX0FGUklDQTogcmV0dXJuICJlbl9aQSI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0pBTUFJQ0E6IHJldHVybiAiZW5fSk0iOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9DQVJJQkJFQU46IHJldHVybiAiZW5fR0QiOyAvKiBHcmVuYWRhPyAqLworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9CRUxJWkU6IHJldHVybiAiZW5fQloiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9UUklOSURBRDogcmV0dXJuICJlbl9UVCI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX1pJTUJBQldFOiByZXR1cm4gImVuX1pXIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfUEhJTElQUElORVM6IHJldHVybiAiZW5fUEgiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9JTkRPTkVTSUE6IHJldHVybiAiZW5fSUQiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9IT05HS09ORzogcmV0dXJuICJlbl9ISyI7CisrCWNhc2UgU1VCTEFOR19FTkdMSVNIX0lORElBOiByZXR1cm4gImVuX0lOIjsKKysJY2FzZSBTVUJMQU5HX0VOR0xJU0hfTUFMQVlTSUE6IHJldHVybiAiZW5fTVkiOworKwljYXNlIFNVQkxBTkdfRU5HTElTSF9TSU5HQVBPUkU6IHJldHVybiAiZW5fU0ciOworKwl9CisrICAgICAgcmV0dXJuICJlbiI7CisrICAgIGNhc2UgTEFOR19FU1RPTklBTjogcmV0dXJuICJldF9FRSI7CisrICAgIGNhc2UgTEFOR19GQUVST0VTRTogcmV0dXJuICJmb19GTyI7CisrICAgIGNhc2UgTEFOR19GQVJTSTogcmV0dXJuICJmYV9JUiI7CisrICAgIGNhc2UgTEFOR19GSU5OSVNIOiByZXR1cm4gImZpX0ZJIjsKKysgICAgY2FzZSBMQU5HX0ZSRU5DSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfRlJFTkNIOiByZXR1cm4gImZyX0ZSIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9CRUxHSUFOOiAvKiBXQUxMT09OICovIHJldHVybiAiZnJfQkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NBTkFESUFOOiByZXR1cm4gImZyX0NBIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TV0lTUzogcmV0dXJuICJmcl9DSCI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTFVYRU1CT1VSRzogcmV0dXJuICJmcl9MVSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfTU9OQUNPOiByZXR1cm4gImZyX01DIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9XRVNUSU5ESUVTOiByZXR1cm4gImZyIjsgLyogQ2FyaWJiZWFuPyAqLworKwljYXNlIFNVQkxBTkdfRlJFTkNIX1JFVU5JT046IHJldHVybiAiZnJfUkUiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0NPTkdPOiByZXR1cm4gImZyX0NHIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9TRU5FR0FMOiByZXR1cm4gImZyX1NOIjsKKysJY2FzZSBTVUJMQU5HX0ZSRU5DSF9DQU1FUk9PTjogcmV0dXJuICJmcl9DTSI7CisrCWNhc2UgU1VCTEFOR19GUkVOQ0hfQ09URURJVk9JUkU6IHJldHVybiAiZnJfQ0kiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01BTEk6IHJldHVybiAiZnJfTUwiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX01PUk9DQ086IHJldHVybiAiZnJfTUEiOworKwljYXNlIFNVQkxBTkdfRlJFTkNIX0hBSVRJOiByZXR1cm4gImZyX0hUIjsKKysJfQorKyAgICAgIHJldHVybiAiZnIiOworKyAgICBjYXNlIExBTkdfRlJJU0lBTjogcmV0dXJuICJmeV9OTCI7CisrICAgIGNhc2UgTEFOR19GVUxGVUxERToKKysgICAgICAvKiBTcG9rZW4gaW4gTmlnZXJpYSwgR3VpbmVhLCBTZW5lZ2FsLCBNYWxpLCBOaWdlciwgQ2FtZXJvb24sIEJlbmluLiAqLworKyAgICAgIHJldHVybiAiZmZfTkciOworKyAgICBjYXNlIExBTkdfR0FFTElDOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgMHgwMTogLyogU0NPVFRJU0ggKi8gcmV0dXJuICJnZF9HQiI7CisrCWNhc2UgMHgwMjogLyogSVJJU0ggKi8gcmV0dXJuICJnYV9JRSI7CisrCX0KKysgICAgICByZXR1cm4gIkMiOworKyAgICBjYXNlIExBTkdfR0FMSUNJQU46IHJldHVybiAiZ2xfRVMiOworKyAgICBjYXNlIExBTkdfR0VPUkdJQU46IHJldHVybiAia2FfR0UiOworKyAgICBjYXNlIExBTkdfR0VSTUFOOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19HRVJNQU46IHJldHVybiAiZGVfREUiOworKwljYXNlIFNVQkxBTkdfR0VSTUFOX1NXSVNTOiByZXR1cm4gImRlX0NIIjsKKysJY2FzZSBTVUJMQU5HX0dFUk1BTl9BVVNUUklBTjogcmV0dXJuICJkZV9BVCI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTFVYRU1CT1VSRzogcmV0dXJuICJkZV9MVSI7CisrCWNhc2UgU1VCTEFOR19HRVJNQU5fTElFQ0hURU5TVEVJTjogcmV0dXJuICJkZV9MSSI7CisrCX0KKysgICAgICByZXR1cm4gImRlIjsKKysgICAgY2FzZSBMQU5HX0dSRUVLOiByZXR1cm4gImVsX0dSIjsKKysgICAgY2FzZSBMQU5HX0dVQVJBTkk6IHJldHVybiAiZ25fUFkiOworKyAgICBjYXNlIExBTkdfR1VKQVJBVEk6IHJldHVybiAiZ3VfSU4iOworKyAgICBjYXNlIExBTkdfSEFVU0E6IHJldHVybiAiaGFfTkciOworKyAgICBjYXNlIExBTkdfSEFXQUlJQU46CisrICAgICAgLyogRklYTUU6IERvIHRoZXkgbWVhbiBIYXdhaWlhbiAoImhhd19VUyIsIDEwMDAgc3BlYWtlcnMpCisrCSBvciBIYXdhaWkgQ3Jlb2xlIEVuZ2xpc2ggKCJjcGVfVVMiLCA2MDAwMDAgc3BlYWtlcnMpPyAgKi8KKysgICAgICByZXR1cm4gImNwZV9VUyI7CisrICAgIGNhc2UgTEFOR19IRUJSRVc6IHJldHVybiAiaGVfSUwiOworKyAgICBjYXNlIExBTkdfSElOREk6IHJldHVybiAiaGlfSU4iOworKyAgICBjYXNlIExBTkdfSFVOR0FSSUFOOiByZXR1cm4gImh1X0hVIjsKKysgICAgY2FzZSBMQU5HX0lCSUJJTzogcmV0dXJuICJuaWNfTkciOworKyAgICBjYXNlIExBTkdfSUNFTEFORElDOiByZXR1cm4gImlzX0lTIjsKKysgICAgY2FzZSBMQU5HX0lHQk86IHJldHVybiAiaWdfTkciOworKyAgICBjYXNlIExBTkdfSU5ET05FU0lBTjogcmV0dXJuICJpZF9JRCI7CisrICAgIGNhc2UgTEFOR19JTlVLVElUVVQ6IHJldHVybiAiaXVfQ0EiOworKyAgICBjYXNlIExBTkdfSVRBTElBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfSVRBTElBTjogcmV0dXJuICJpdF9JVCI7CisrCWNhc2UgU1VCTEFOR19JVEFMSUFOX1NXSVNTOiByZXR1cm4gIml0X0NIIjsKKysJfQorKyAgICAgIHJldHVybiAiaXQiOworKyAgICBjYXNlIExBTkdfSkFQQU5FU0U6IHJldHVybiAiamFfSlAiOworKyAgICBjYXNlIExBTkdfS0FOTkFEQTogcmV0dXJuICJrbl9JTiI7CisrICAgIGNhc2UgTEFOR19LQU5VUkk6IHJldHVybiAia3JfTkciOworKyAgICBjYXNlIExBTkdfS0FTSE1JUkk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX0RFRkFVTFQ6IHJldHVybiAia3NfUEsiOworKwljYXNlIFNVQkxBTkdfS0FTSE1JUklfSU5ESUE6IHJldHVybiAia3NfSU4iOworKwl9CisrICAgICAgcmV0dXJuICJrcyI7CisrICAgIGNhc2UgTEFOR19LQVpBSzogcmV0dXJuICJra19LWiI7CisrICAgIGNhc2UgTEFOR19LT05LQU5JOgorKyAgICAgIC8qIEZJWE1FOiBBZGp1c3QgdGhpcyB3aGVuIHN1Y2ggbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrICAgICAgcmV0dXJuICJrb2tfSU4iOworKyAgICBjYXNlIExBTkdfS09SRUFOOiByZXR1cm4gImtvX0tSIjsKKysgICAgY2FzZSBMQU5HX0tZUkdZWjogcmV0dXJuICJreV9LRyI7CisrICAgIGNhc2UgTEFOR19MQU86IHJldHVybiAibG9fTEEiOworKyAgICBjYXNlIExBTkdfTEFUSU46IHJldHVybiAibGFfVkEiOworKyAgICBjYXNlIExBTkdfTEFUVklBTjogcmV0dXJuICJsdl9MViI7CisrICAgIGNhc2UgTEFOR19MSVRIVUFOSUFOOiByZXR1cm4gImx0X0xUIjsKKysgICAgY2FzZSBMQU5HX01BQ0VET05JQU46IHJldHVybiAibWtfTUsiOworKyAgICBjYXNlIExBTkdfTUFMQVk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX01BTEFZX01BTEFZU0lBOiByZXR1cm4gIm1zX01ZIjsKKysJY2FzZSBTVUJMQU5HX01BTEFZX0JSVU5FSV9EQVJVU1NBTEFNOiByZXR1cm4gIm1zX0JOIjsKKysJfQorKyAgICAgIHJldHVybiAibXMiOworKyAgICBjYXNlIExBTkdfTUFMQVlBTEFNOiByZXR1cm4gIm1sX0lOIjsKKysgICAgY2FzZSBMQU5HX01BTFRFU0U6IHJldHVybiAibXRfTVQiOworKyAgICBjYXNlIExBTkdfTUFOSVBVUkk6CisrICAgICAgLyogRklYTUU6IEFkanVzdCB0aGlzIHdoZW4gc3VjaCBsb2NhbGVzIGFwcGVhciBvbiBVbml4LiAgKi8KKysgICAgICByZXR1cm4gIm1uaV9JTiI7CisrICAgIGNhc2UgTEFOR19NQVJBVEhJOiByZXR1cm4gIm1yX0lOIjsKKysgICAgY2FzZSBMQU5HX01PTkdPTElBTjoKKysgICAgICByZXR1cm4gIm1uIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAibW5fQ04iIG9yICJtbl9NTiIuICAqLworKyAgICBjYXNlIExBTkdfTkVQQUxJOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19ERUZBVUxUOiByZXR1cm4gIm5lX05QIjsKKysJY2FzZSBTVUJMQU5HX05FUEFMSV9JTkRJQTogcmV0dXJuICJuZV9JTiI7CisrCX0KKysgICAgICByZXR1cm4gIm5lIjsKKysgICAgY2FzZSBMQU5HX05PUldFR0lBTjoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfTk9SV0VHSUFOX0JPS01BTDogcmV0dXJuICJub19OTyI7CisrCWNhc2UgU1VCTEFOR19OT1JXRUdJQU5fTllOT1JTSzogcmV0dXJuICJubl9OTyI7CisrCX0KKysgICAgICByZXR1cm4gIm5vIjsKKysgICAgY2FzZSBMQU5HX09SSVlBOiByZXR1cm4gIm9yX0lOIjsKKysgICAgY2FzZSBMQU5HX09ST01POiByZXR1cm4gIm9tX0VUIjsKKysgICAgY2FzZSBMQU5HX1BBUElBTUVOVFU6IHJldHVybiAicGFwX0FOIjsKKysgICAgY2FzZSBMQU5HX1BBU0hUTzoKKysgICAgICByZXR1cm4gInBzIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAicHNfUEsiIG9yICJwc19BRiIuICAqLworKyAgICBjYXNlIExBTkdfUE9MSVNIOiByZXR1cm4gInBsX1BMIjsKKysgICAgY2FzZSBMQU5HX1BPUlRVR1VFU0U6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0U6IHJldHVybiAicHRfUFQiOworKwkvKiBIbW0uIFNVQkxBTkdfUE9SVFVHVUVTRV9CUkFaSUxJQU4gPT0gU1VCTEFOR19ERUZBVUxULgorKwkgICBTYW1lIHBoZW5vbWVub24gYXMgU1VCTEFOR19FTkdMSVNIX1VTID09IFNVQkxBTkdfREVGQVVMVC4gKi8KKysJY2FzZSBTVUJMQU5HX1BPUlRVR1VFU0VfQlJBWklMSUFOOiByZXR1cm4gInB0X0JSIjsKKysJfQorKyAgICAgIHJldHVybiAicHQiOworKyAgICBjYXNlIExBTkdfUFVOSkFCSToKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9JTkRJQTogcmV0dXJuICJwYV9JTiI7IC8qIEd1cm11a2hpIHNjcmlwdCAqLworKwljYXNlIFNVQkxBTkdfUFVOSkFCSV9QQUtJU1RBTjogcmV0dXJuICJwYV9QSyI7IC8qIEFyYWJpYyBzY3JpcHQgKi8KKysJfQorKyAgICAgIHJldHVybiAicGEiOworKyAgICBjYXNlIExBTkdfUkhBRVRPX1JPTUFOQ0U6IHJldHVybiAicm1fQ0giOworKyAgICBjYXNlIExBTkdfUk9NQU5JQU46CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1JPTUFOSUFOX1JPTUFOSUE6IHJldHVybiAicm9fUk8iOworKwljYXNlIFNVQkxBTkdfUk9NQU5JQU5fTU9MRE9WQTogcmV0dXJuICJyb19NRCI7CisrCX0KKysgICAgICByZXR1cm4gInJvIjsKKysgICAgY2FzZSBMQU5HX1JVU1NJQU46CisrICAgICAgcmV0dXJuICJydSI7IC8qIEFtYmlndW91czogY291bGQgYmUgInJ1X1JVIiBvciAicnVfVUEiIG9yICJydV9NRCIuICAqLworKyAgICBjYXNlIExBTkdfU0FBTUk6IC8qIGFjdHVhbGx5IE5vcnRoZXJuIFNhbWkgKi8gcmV0dXJuICJzZV9OTyI7CisrICAgIGNhc2UgTEFOR19TQU5TS1JJVDogcmV0dXJuICJzYV9JTiI7CisrICAgIGNhc2UgTEFOR19TSU5ESEk6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NJTkRISV9JTkRJQTogcmV0dXJuICJzZF9JTiI7CisrCWNhc2UgU1VCTEFOR19TSU5ESElfUEFLSVNUQU46IHJldHVybiAic2RfUEsiOworKwl9CisrICAgICAgcmV0dXJuICJzZCI7CisrICAgIGNhc2UgTEFOR19TSU5IQUxFU0U6IHJldHVybiAic2lfTEsiOworKyAgICBjYXNlIExBTkdfU0xPVkFLOiByZXR1cm4gInNrX1NLIjsKKysgICAgY2FzZSBMQU5HX1NMT1ZFTklBTjogcmV0dXJuICJzbF9TSSI7CisrICAgIGNhc2UgTEFOR19TT01BTEk6IHJldHVybiAic29fU08iOworKyAgICBjYXNlIExBTkdfU09SQklBTjoKKysgICAgICAvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBzdWNoIGxvY2FsZXMgYXBwZWFyIG9uIFVuaXguICAqLworKyAgICAgIHJldHVybiAid2VuX0RFIjsKKysgICAgY2FzZSBMQU5HX1NQQU5JU0g6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0g6IHJldHVybiAiZXNfRVMiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9NRVhJQ0FOOiByZXR1cm4gImVzX01YIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfTU9ERVJOOgorKwkgIHJldHVybiAiZXNfRVNAbW9kZXJuIjsJLyogbm90IHNlZW4gb24gVW5peCAqLworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9HVUFURU1BTEE6IHJldHVybiAiZXNfR1QiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9DT1NUQV9SSUNBOiByZXR1cm4gImVzX0NSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfUEFOQU1BOiByZXR1cm4gImVzX1BBIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRE9NSU5JQ0FOX1JFUFVCTElDOiByZXR1cm4gImVzX0RPIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVkVORVpVRUxBOiByZXR1cm4gImVzX1ZFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQ09MT01CSUE6IHJldHVybiAiZXNfQ08iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QRVJVOiByZXR1cm4gImVzX1BFIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQVJHRU5USU5BOiByZXR1cm4gImVzX0FSIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfRUNVQURPUjogcmV0dXJuICJlc19FQyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0NISUxFOiByZXR1cm4gImVzX0NMIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfVVJVR1VBWTogcmV0dXJuICJlc19VWSI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX1BBUkFHVUFZOiByZXR1cm4gImVzX1BZIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfQk9MSVZJQTogcmV0dXJuICJlc19CTyI7CisrCWNhc2UgU1VCTEFOR19TUEFOSVNIX0VMX1NBTFZBRE9SOiByZXR1cm4gImVzX1NWIjsKKysJY2FzZSBTVUJMQU5HX1NQQU5JU0hfSE9ORFVSQVM6IHJldHVybiAiZXNfSE4iOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9OSUNBUkFHVUE6IHJldHVybiAiZXNfTkkiOworKwljYXNlIFNVQkxBTkdfU1BBTklTSF9QVUVSVE9fUklDTzogcmV0dXJuICJlc19QUiI7CisrCX0KKysgICAgICByZXR1cm4gImVzIjsKKysgICAgY2FzZSBMQU5HX1NVVFU6IHJldHVybiAiYm50X1RaIjsgLyogb3IgInN0X0xTIiBvciAibnNvX1pBIj8gKi8KKysgICAgY2FzZSBMQU5HX1NXQUhJTEk6IHJldHVybiAic3dfS0UiOworKyAgICBjYXNlIExBTkdfU1dFRElTSDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwljYXNlIFNVQkxBTkdfREVGQVVMVDogcmV0dXJuICJzdl9TRSI7CisrCWNhc2UgU1VCTEFOR19TV0VESVNIX0ZJTkxBTkQ6IHJldHVybiAic3ZfRkkiOworKwl9CisrICAgICAgcmV0dXJuICJzdiI7CisrICAgIGNhc2UgTEFOR19TWVJJQUM6IHJldHVybiAic3lyX1RSIjsgLyogQW4gZXh0aW5jdCBsYW5ndWFnZS4gICovCisrICAgIGNhc2UgTEFOR19UQUdBTE9HOiByZXR1cm4gInRsX1BIIjsKKysgICAgY2FzZSBMQU5HX1RBSklLOiByZXR1cm4gInRnX1RKIjsKKysgICAgY2FzZSBMQU5HX1RBTUFaSUdIVDoKKysgICAgICBzd2l0Y2ggKHN1YikKKysJeworKwkvKiBGSVhNRTogQWRqdXN0IHRoaXMgd2hlbiBUYW1hemlnaHQgbG9jYWxlcyBhcHBlYXIgb24gVW5peC4gICovCisrCWNhc2UgU1VCTEFOR19UQU1BWklHSFRfQVJBQklDOiByZXR1cm4gImJlcl9NQUBhcmFiaWMiOworKwljYXNlIFNVQkxBTkdfVEFNQVpJR0hUX0xBVElOOiByZXR1cm4gImJlcl9NQUBsYXRpbiI7CisrCX0KKysgICAgICByZXR1cm4gImJlcl9NQSI7CisrICAgIGNhc2UgTEFOR19UQU1JTDoKKysgICAgICByZXR1cm4gInRhIjsgLyogQW1iaWd1b3VzOiBjb3VsZCBiZSAidGFfSU4iIG9yICJ0YV9MSyIgb3IgInRhX1NHIi4gICovCisrICAgIGNhc2UgTEFOR19UQVRBUjogcmV0dXJuICJ0dF9SVSI7CisrICAgIGNhc2UgTEFOR19URUxVR1U6IHJldHVybiAidGVfSU4iOworKyAgICBjYXNlIExBTkdfVEhBSTogcmV0dXJuICJ0aF9USCI7CisrICAgIGNhc2UgTEFOR19USUJFVEFOOiByZXR1cm4gImJvX0NOIjsKKysgICAgY2FzZSBMQU5HX1RJR1JJTllBOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FVEhJT1BJQTogcmV0dXJuICJ0aV9FVCI7CisrCWNhc2UgU1VCTEFOR19USUdSSU5ZQV9FUklUUkVBOiByZXR1cm4gInRpX0VSIjsKKysJfQorKyAgICAgIHJldHVybiAidGkiOworKyAgICBjYXNlIExBTkdfVFNPTkdBOiByZXR1cm4gInRzX1pBIjsKKysgICAgY2FzZSBMQU5HX1RTV0FOQTogcmV0dXJuICJ0bl9CVyI7CisrICAgIGNhc2UgTEFOR19UVVJLSVNIOiByZXR1cm4gInRyX1RSIjsKKysgICAgY2FzZSBMQU5HX1RVUktNRU46IHJldHVybiAidGtfVE0iOworKyAgICBjYXNlIExBTkdfVUtSQUlOSUFOOiByZXR1cm4gInVrX1VBIjsKKysgICAgY2FzZSBMQU5HX1VSRFU6CisrICAgICAgc3dpdGNoIChzdWIpCisrCXsKKysJY2FzZSBTVUJMQU5HX1VSRFVfUEFLSVNUQU46IHJldHVybiAidXJfUEsiOworKwljYXNlIFNVQkxBTkdfVVJEVV9JTkRJQTogcmV0dXJuICJ1cl9JTiI7CisrCX0KKysgICAgICByZXR1cm4gInVyIjsKKysgICAgY2FzZSBMQU5HX1VaQkVLOgorKyAgICAgIHN3aXRjaCAoc3ViKQorKwl7CisrCWNhc2UgU1VCTEFOR19VWkJFS19MQVRJTjogcmV0dXJuICJ1el9VWiI7CisrCWNhc2UgU1VCTEFOR19VWkJFS19DWVJJTExJQzogcmV0dXJuICJ1el9VWkBjeXJpbGxpYyI7CisrCX0KKysgICAgICByZXR1cm4gInV6IjsKKysgICAgY2FzZSBMQU5HX1ZFTkRBOiByZXR1cm4gInZlX1pBIjsKKysgICAgY2FzZSBMQU5HX1ZJRVROQU1FU0U6IHJldHVybiAidmlfVk4iOworKyAgICBjYXNlIExBTkdfV0VMU0g6IHJldHVybiAiY3lfR0IiOworKyAgICBjYXNlIExBTkdfWEhPU0E6IHJldHVybiAieGhfWkEiOworKyAgICBjYXNlIExBTkdfWUk6IHJldHVybiAic2l0X0NOIjsKKysgICAgY2FzZSBMQU5HX1lJRERJU0g6IHJldHVybiAieWlfSUwiOworKyAgICBjYXNlIExBTkdfWU9SVUJBOiByZXR1cm4gInlvX05HIjsKKysgICAgY2FzZSBMQU5HX1pVTFU6IHJldHVybiAienVfWkEiOworKyAgICBkZWZhdWx0OiByZXR1cm4gIkMiOworKyAgICB9CisrCisrI2VuZGlmCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL2xvZy5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL2xvZy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTE1NzIzNzY4IC0wNDAwCitAQCAtMCwwICsxLDk4IEBACisrLyogTG9nIGZpbGUgb3V0cHV0LgorKyAgIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFByaW50IGFuIEFTQ0lJIHN0cmluZyB3aXRoIHF1b3RlcyBhbmQgZXNjYXBlIHNlcXVlbmNlcyB3aGVyZSBuZWVkZWQuICAqLworK3N0YXRpYyB2b2lkCisrcHJpbnRfZXNjYXBlZCAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzdHIpCisreworKyAgcHV0YyAoJyInLCBzdHJlYW0pOworKyAgZm9yICg7ICpzdHIgIT0gJ1wwJzsgc3RyKyspCisrICAgIGlmICgqc3RyID09ICdcbicpCisrICAgICAgeworKwlmcHV0cyAoIlxcblwiIiwgc3RyZWFtKTsKKysJaWYgKHN0clsxXSA9PSAnXDAnKQorKwkgIHJldHVybjsKKysJZnB1dHMgKCJcblwiIiwgc3RyZWFtKTsKKysgICAgICB9CisrICAgIGVsc2UKKysgICAgICB7CisrCWlmICgqc3RyID09ICciJyB8fCAqc3RyID09ICdcXCcpCisrCSAgcHV0YyAoJ1xcJywgc3RyZWFtKTsKKysJcHV0YyAoKnN0ciwgc3RyZWFtKTsKKysgICAgICB9CisrICBwdXRjICgnIicsIHN0cmVhbSk7CisrfQorKworKy8qIEFkZCB0byB0aGUgbG9nIGZpbGUgYW4gZW50cnkgZGVub3RpbmcgYSBmYWlsZWQgdHJhbnNsYXRpb24uICAqLworK3ZvaWQKKytfbmxfbG9nX3VudHJhbnNsYXRlZCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkgICAgICBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwgaW50IHBsdXJhbCkKKyt7CisrICBzdGF0aWMgY2hhciAqbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrICBzdGF0aWMgRklMRSAqbGFzdF9sb2dmaWxlID0gTlVMTDsKKysgIEZJTEUgKmxvZ2ZpbGU7CisrCisrICAvKiBDYW4gd2UgcmV1c2UgdGhlIGxhc3Qgb3BlbmVkIGxvZ2ZpbGU/ICAqLworKyAgaWYgKGxhc3RfbG9nZmlsZW5hbWUgPT0gTlVMTCB8fCBzdHJjbXAgKGxvZ2ZpbGVuYW1lLCBsYXN0X2xvZ2ZpbGVuYW1lKSAhPSAwKQorKyAgICB7CisrICAgICAgLyogQ2xvc2UgdGhlIGxhc3QgdXNlZCBsb2dmaWxlLiAgKi8KKysgICAgICBpZiAobGFzdF9sb2dmaWxlbmFtZSAhPSBOVUxMKQorKwl7CisrCSAgaWYgKGxhc3RfbG9nZmlsZSAhPSBOVUxMKQorKwkgICAgeworKwkgICAgICBmY2xvc2UgKGxhc3RfbG9nZmlsZSk7CisrCSAgICAgIGxhc3RfbG9nZmlsZSA9IE5VTEw7CisrCSAgICB9CisrCSAgZnJlZSAobGFzdF9sb2dmaWxlbmFtZSk7CisrCSAgbGFzdF9sb2dmaWxlbmFtZSA9IE5VTEw7CisrCX0KKysgICAgICAvKiBPcGVuIHRoZSBsb2dmaWxlLiAgKi8KKysgICAgICBsYXN0X2xvZ2ZpbGVuYW1lID0gKGNoYXIgKikgbWFsbG9jIChzdHJsZW4gKGxvZ2ZpbGVuYW1lKSArIDEpOworKyAgICAgIGlmIChsYXN0X2xvZ2ZpbGVuYW1lID09IE5VTEwpCisrCXJldHVybjsKKysgICAgICBzdHJjcHkgKGxhc3RfbG9nZmlsZW5hbWUsIGxvZ2ZpbGVuYW1lKTsKKysgICAgICBsYXN0X2xvZ2ZpbGUgPSBmb3BlbiAobG9nZmlsZW5hbWUsICJhIik7CisrICAgICAgaWYgKGxhc3RfbG9nZmlsZSA9PSBOVUxMKQorKwlyZXR1cm47CisrICAgIH0KKysgIGxvZ2ZpbGUgPSBsYXN0X2xvZ2ZpbGU7CisrCisrICBmcHJpbnRmIChsb2dmaWxlLCAiZG9tYWluICIpOworKyAgcHJpbnRfZXNjYXBlZCAobG9nZmlsZSwgZG9tYWlubmFtZSk7CisrICBmcHJpbnRmIChsb2dmaWxlLCAiXG5tc2dpZCAiKTsKKysgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMSk7CisrICBpZiAocGx1cmFsKQorKyAgICB7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnaWRfcGx1cmFsICIpOworKyAgICAgIHByaW50X2VzY2FwZWQgKGxvZ2ZpbGUsIG1zZ2lkMik7CisrICAgICAgZnByaW50ZiAobG9nZmlsZSwgIlxubXNnc3RyWzBdIFwiXCJcbiIpOworKyAgICB9CisrICBlbHNlCisrICAgIGZwcmludGYgKGxvZ2ZpbGUsICJcbm1zZ3N0ciBcIlwiXG4iKTsKKysgIHB1dGMgKCdcbicsIGxvZ2ZpbGUpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9NYWtlZmlsZS5pbgkxOTk4LTA0LTI2IDA5OjIyOjM1LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9NYWtlZmlsZS5pbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjUyMTcyMjg1NiAtMDQwMAorQEAgLTEsMTkgKzEsMjAgQEAKKy0jIE1ha2VmaWxlIGZvciBkaXJlY3Rvcnkgd2l0aCBtZXNzYWdlIGNhdGFsb2cgaGFuZGxpbmcgaW4gR05VIE5MUyBVdGlsaXRpZXMuCistIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBNYWtlZmlsZSBmb3IgZGlyZWN0b3J5IHdpdGggbWVzc2FnZSBjYXRhbG9nIGhhbmRsaW5nIGxpYnJhcnkgb2YgR05VIGdldHRleHQKKysjIENvcHlyaWdodCAoQykgMTk5NS0xOTk4LCAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgIworLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICMgYW55IGxhdGVyIHZlcnNpb24uCisgIworICMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrIyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAjCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyBVU0EuCisgCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKK0BAIC0yMywxMTggKzI0LDM0MSBAQAorIHNyY2RpciA9IEBzcmNkaXJACisgdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorIHRvcF9idWlsZGRpciA9IC4uCistVlBBVEggPSBAc3JjZGlyQAorKyNWUEFUSCA9ICQoc3JjZGlyKQorIAorIHByZWZpeCA9IEBwcmVmaXhACisgZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACisgdHJhbnNmb3JtID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACistbGliZGlyID0gJChleGVjX3ByZWZpeCkvbGliCistaW5jbHVkZWRpciA9ICQocHJlZml4KS9pbmNsdWRlCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrbGliZGlyID0gQGxpYmRpckAKKytpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACisrZGF0YWRpciA9IEBkYXRhZGlyQAorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCistZ251bG9jYWxlZGlyID0gJChwcmVmaXgpL3NoYXJlL2xvY2FsZQorLWdldHRleHRzcmNkaXIgPSBAZGF0YWRpckAvZ2V0dGV4dC9pbnRsCistYWxpYXNwYXRoID0gJChsb2NhbGVkaXIpOi4KKytnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L2ludGwKKythbGlhc3BhdGggPSAkKGxvY2FsZWRpcikKKyBzdWJkaXIgPSBpbnRsCisgCisgSU5TVEFMTCA9IEBJTlNUQUxMQAorIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACisgTUtJTlNUQUxMRElSUyA9IEBNS0lOU1RBTExESVJTQAorK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKE1LSU5TVEFMTERJUlMpCisgCistbCA9IEBsQAorK2wgPSBASU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVhACisgCisgQVIgPSBhcgorIENDID0gQENDQAorIExJQlRPT0wgPSBATElCVE9PTEAKKyBSQU5MSUIgPSBAUkFOTElCQAorK1lBQ0MgPSBASU5UTEJJU09OQCAteSAtZAorK1lGTEFHUyA9IC0tbmFtZS1wcmVmaXg9X19nZXR0ZXh0CisgCistREVGUyA9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIgLURHTlVMT0NBTEVESVI9XCIkKGdudWxvY2FsZWRpcilcIiBcCistLURMT0NBTEVfQUxJQVNfUEFUSD1cIiQoYWxpYXNwYXRoKVwiIEBERUZTQAorK0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ETE9DQUxFX0FMSUFTX1BBVEg9XCIkKGFsaWFzcGF0aClcIiBcCisrLURMSUJESVI9XCIkKGxpYmRpcilcIiAtRElOX0xJQklOVEwgXAorKy1ERU5BQkxFX1JFTE9DQVRBQkxFPTEgLURJTl9MSUJSQVJZIC1ESU5TVEFMTERJUj1cIiQobGliZGlyKVwiIC1ETk9fWE1BTExPQyBcCisrLURzZXRfcmVsb2NhdGlvbl9wcmVmaXg9bGliaW50bF9zZXRfcmVsb2NhdGlvbl9wcmVmaXggXAorKy1EcmVsb2NhdGU9bGliaW50bF9yZWxvY2F0ZSBcCisrLURERVBFTkRTX09OX0xJQklDT05WPTEgQERFRlNACisgQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisrTElCUyA9IEBMSUJTQAorIAorIENPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpCisgCistSEVBREVSUyA9ICQoQ09NSERSUykgbGliZ2V0dGV4dC5oIGxvYWRpbmZvLmgKKy1DT01IRFJTID0gZ2V0dGV4dC5oIGdldHRleHRQLmggaGFzaC1zdHJpbmcuaAorLVNPVVJDRVMgPSAkKENPTVNSQ1MpIGludGwtY29tcGF0LmMgY2F0LWNvbXBhdC5jCistQ09NU1JDUyA9IGJpbmR0ZXh0ZG9tLmMgZGNnZXR0ZXh0LmMgZGdldHRleHQuYyBnZXR0ZXh0LmMgXAorLWZpbmRkb21haW4uYyBsb2FkbXNnY2F0LmMgbG9jYWxlYWxpYXMuYyB0ZXh0ZG9tYWluLmMgbDEwbmZsaXN0LmMgXAorLWV4cGxvZGVuYW1lLmMKKy1PQkpFQ1RTID0gQElOVExPQkpTQCBiaW5kdGV4dGRvbS4kbG8gZGNnZXR0ZXh0LiRsbyBkZ2V0dGV4dC4kbG8gZ2V0dGV4dC4kbG8gXAorLWZpbmRkb21haW4uJGxvIGxvYWRtc2djYXQuJGxvIGxvY2FsZWFsaWFzLiRsbyB0ZXh0ZG9tYWluLiRsbyBsMTBuZmxpc3QuJGxvIFwKKy1leHBsb2RlbmFtZS4kbG8KKy1DQVRPQkpTID0gY2F0LWNvbXBhdC4kbG8gLi4vcG8vY2F0LWlkLXRibC4kbG8KKy1HRVRUT0JKUyA9IGludGwtY29tcGF0LiRsbworLURJU1RGSUxFUy5jb21tb24gPSBDaGFuZ2VMb2cgTWFrZWZpbGUuaW4gbGludXgtbXNnLnNlZCBwbzJ0Ymwuc2VkLmluIFwKKy14b3Blbi1tc2cuc2VkICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0hFQURFUlMgPSBcCisrICBnbW8uaCBcCisrICBnZXR0ZXh0UC5oIFwKKysgIGhhc2gtc3RyaW5nLmggXAorKyAgbG9hZGluZm8uaCBcCisrICBwbHVyYWwtZXhwLmggXAorKyAgZXZhbC1wbHVyYWwuaCBcCisrICBsb2NhbGNoYXJzZXQuaCBcCisrICByZWxvY2F0YWJsZS5oIFwKKysgIHhzaXplLmggXAorKyAgcHJpbnRmLWFyZ3MuaCBwcmludGYtYXJncy5jIFwKKysgIHByaW50Zi1wYXJzZS5oIHdwcmludGYtcGFyc2UuaCBwcmludGYtcGFyc2UuYyBcCisrICB2YXNucHJpbnRmLmggdmFzbndwcmludGYuaCB2YXNucHJpbnRmLmMgXAorKyAgb3MyY29tcGF0LmggXAorKyAgbGliZ251aW50bC5oLmluCisrU09VUkNFUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLmMgXAorKyAgZGNnZXR0ZXh0LmMgXAorKyAgZGdldHRleHQuYyBcCisrICBnZXR0ZXh0LmMgXAorKyAgZmluZGRvbWFpbi5jIFwKKysgIGxvYWRtc2djYXQuYyBcCisrICBsb2NhbGVhbGlhcy5jIFwKKysgIHRleHRkb21haW4uYyBcCisrICBsMTBuZmxpc3QuYyBcCisrICBleHBsb2RlbmFtZS5jIFwKKysgIGRjaWdldHRleHQuYyBcCisrICBkY25nZXR0ZXh0LmMgXAorKyAgZG5nZXR0ZXh0LmMgXAorKyAgbmdldHRleHQuYyBcCisrICBwbHVyYWwueSBcCisrICBwbHVyYWwtZXhwLmMgXAorKyAgbG9jYWxjaGFyc2V0LmMgXAorKyAgcmVsb2NhdGFibGUuYyBcCisrICBsb2NhbGVuYW1lLmMgXAorKyAgbG9nLmMgXAorKyAgcHJpbnRmLmMgXAorKyAgb3NkZXAuYyBcCisrICBvczJjb21wYXQuYyBcCisrICBpbnRsLWNvbXBhdC5jCisrT0JKRUNUUyA9IFwKKysgIGJpbmR0ZXh0ZG9tLiRsbyBcCisrICBkY2dldHRleHQuJGxvIFwKKysgIGRnZXR0ZXh0LiRsbyBcCisrICBnZXR0ZXh0LiRsbyBcCisrICBmaW5kZG9tYWluLiRsbyBcCisrICBsb2FkbXNnY2F0LiRsbyBcCisrICBsb2NhbGVhbGlhcy4kbG8gXAorKyAgdGV4dGRvbWFpbi4kbG8gXAorKyAgbDEwbmZsaXN0LiRsbyBcCisrICBleHBsb2RlbmFtZS4kbG8gXAorKyAgZGNpZ2V0dGV4dC4kbG8gXAorKyAgZGNuZ2V0dGV4dC4kbG8gXAorKyAgZG5nZXR0ZXh0LiRsbyBcCisrICBuZ2V0dGV4dC4kbG8gXAorKyAgcGx1cmFsLiRsbyBcCisrICBwbHVyYWwtZXhwLiRsbyBcCisrICBsb2NhbGNoYXJzZXQuJGxvIFwKKysgIHJlbG9jYXRhYmxlLiRsbyBcCisrICBsb2NhbGVuYW1lLiRsbyBcCisrICBsb2cuJGxvIFwKKysgIHByaW50Zi4kbG8gXAorKyAgb3NkZXAuJGxvIFwKKysgIGludGwtY29tcGF0LiRsbworK0RJU1RGSUxFUy5jb21tb24gPSBNYWtlZmlsZS5pbiBcCisrY29uZmlnLmNoYXJzZXQgbG9jYWxlLmFsaWFzIHJlZi1hZGQuc2luIHJlZi1kZWwuc2luICQoSEVBREVSUykgJChTT1VSQ0VTKQorK0RJU1RGSUxFUy5nZW5lcmF0ZWQgPSBwbHVyYWwuYworIERJU1RGSUxFUy5ub3JtYWwgPSBWRVJTSU9OCistRElTVEZJTEVTLmdldHRleHQgPSBsaWJpbnRsLmdsaWJjIGludGxoLmluc3QuaW4KKytESVNURklMRVMuZ2V0dGV4dCA9IENPUFlJTkcuTElCLTIuMCBDT1BZSU5HLkxJQi0yLjEgbGliaW50bC5nbGliYyBcCisrbGliZ251aW50bC5oX3ZtcyBNYWtlZmlsZS52bXMgXAorK2xpYmdudWludGwuaC5tc3ZjLXN0YXRpYyBsaWJnbnVpbnRsLmgubXN2Yy1zaGFyZWQgUkVBRE1FLndvZTMyIE1ha2VmaWxlLm1zdmMKKytESVNURklMRVMub2Jzb2xldGUgPSB4b3Blbi1tc2cuc2VkIGxpbnV4LW1zZy5zZWQgcG8ydGJsLnNlZC5pbiBjYXQtY29tcGF0LmMgXAorK0NPUFlJTkcuTElCLTIgZ2V0dGV4dC5oIGxpYmdldHRleHQuaCBwbHVyYWwtZXZhbC5jIGxpYmdudWludGwuaAorKworK2FsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKythbGwteWVzOiBsaWJpbnRsLiRsYSBsaWJpbnRsLmggY2hhcnNldC5hbGlhcyByZWYtYWRkLnNlZCByZWYtZGVsLnNlZAorK2FsbC1ubzogYWxsLW5vLUBCVUlMRF9JTkNMVURFRF9MSUJJTlRMQAorK2FsbC1uby15ZXM6IGxpYmdudWludGwuJGxhCisrYWxsLW5vLW5vOgorKworK2xpYmludGwuYSBsaWJnbnVpbnRsLmE6ICQoT0JKRUNUUykKKysJcm0gLWYgJEAKKysJJChBUikgY3J1ICRAICQoT0JKRUNUUykKKysJJChSQU5MSUIpICRACisrCisrbGliaW50bC5sYSBsaWJnbnVpbnRsLmxhOiAkKE9CSkVDVFMpCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgXAorKwkgICQoQ0MpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAkKFhDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgXAorKwkgICQoT0JKRUNUUykgQExUTElCSUNPTlZAICQoTElCUykgLWxjIFwKKysJICAtdmVyc2lvbi1pbmZvICQoTFRWX0NVUlJFTlQpOiQoTFRWX1JFVklTSU9OKTokKExUVl9BR0UpIFwKKysJICAtcnBhdGggJChsaWJkaXIpIFwKKysJICAtbm8tdW5kZWZpbmVkCisrCisrIyBMaWJ0b29sJ3MgbGlicmFyeSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciBsaWJpbnRsLgorKyMgQmVmb3JlIG1ha2luZyBhIGdldHRleHQgcmVsZWFzZSwgdGhlIGdldHRleHQgbWFpbnRhaW5lciBtdXN0IGNoYW5nZSB0aGlzCisrIyBhY2NvcmRpbmcgdG8gdGhlIGxpYnRvb2wgZG9jdW1lbnRhdGlvbiwgc2VjdGlvbiAiTGlicmFyeSBpbnRlcmZhY2UgdmVyc2lvbnMiLgorKyMgTWFpbnRhaW5lcnMgb2Ygb3RoZXIgcGFja2FnZXMgdGhhdCBpbmNsdWRlIHRoZSBpbnRsIGRpcmVjdG9yeSBtdXN0ICpub3QqCisrIyBjaGFuZ2UgdGhlc2UgdmFsdWVzLgorK0xUVl9DVVJSRU5UPTcKKytMVFZfUkVWSVNJT049MAorK0xUVl9BR0U9NAorIAorIC5TVUZGSVhFUzoKKy0uU1VGRklYRVM6IC5jIC5vIC5sbworKy5TVUZGSVhFUzogLmMgLnkgLm8gLmxvIC5zaW4gLnNlZAorKworIC5jLm86CisgCSQoQ09NUElMRSkgJDwKKy0uYy5sbzoKKy0JJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQ8CisgCistSU5DTFVERVMgPSAtSS4uIC1JLiAtSSQodG9wX3NyY2RpcikvaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisrLnkuYzoKKysJJChZQUNDKSAkKFlGTEFHUykgLS1vdXRwdXQgJEAgJDwKKysJcm0gLWYgJCouaAorIAorLWFsbDogYWxsLUBVU0VfSU5DTFVERURfTElCSU5UTEAKKytiaW5kdGV4dGRvbS5sbzogJChzcmNkaXIpL2JpbmR0ZXh0ZG9tLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9iaW5kdGV4dGRvbS5jCisrZGNnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGNnZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY2dldHRleHQuYworK2RnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZGdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RnZXR0ZXh0LmMKKytnZXR0ZXh0LmxvOiAkKHNyY2RpcikvZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvZ2V0dGV4dC5jCisrZmluZGRvbWFpbi5sbzogJChzcmNkaXIpL2ZpbmRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2ZpbmRkb21haW4uYworK2xvYWRtc2djYXQubG86ICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2FkbXNnY2F0LmMKKytsb2NhbGVhbGlhcy5sbzogJChzcmNkaXIpL2xvY2FsZWFsaWFzLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGVhbGlhcy5jCisrdGV4dGRvbWFpbi5sbzogJChzcmNkaXIpL3RleHRkb21haW4uYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3RleHRkb21haW4uYworK2wxMG5mbGlzdC5sbzogJChzcmNkaXIpL2wxMG5mbGlzdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbDEwbmZsaXN0LmMKKytleHBsb2RlbmFtZS5sbzogJChzcmNkaXIpL2V4cGxvZGVuYW1lLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9leHBsb2RlbmFtZS5jCisrZGNpZ2V0dGV4dC5sbzogJChzcmNkaXIpL2RjaWdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RjaWdldHRleHQuYworK2RjbmdldHRleHQubG86ICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9kY25nZXR0ZXh0LmMKKytkbmdldHRleHQubG86ICQoc3JjZGlyKS9kbmdldHRleHQuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL2RuZ2V0dGV4dC5jCisrbmdldHRleHQubG86ICQoc3JjZGlyKS9uZ2V0dGV4dC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbmdldHRleHQuYworK3BsdXJhbC5sbzogJChzcmNkaXIpL3BsdXJhbC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLmMKKytwbHVyYWwtZXhwLmxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcGx1cmFsLWV4cC5jCisrbG9jYWxjaGFyc2V0LmxvOiAkKHNyY2RpcikvbG9jYWxjaGFyc2V0LmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2NhbGNoYXJzZXQuYworK3JlbG9jYXRhYmxlLmxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuYworKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ09NUElMRSkgJChzcmNkaXIpL3JlbG9jYXRhYmxlLmMKKytsb2NhbGVuYW1lLmxvOiAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvbG9jYWxlbmFtZS5jCisrbG9nLmxvOiAkKHNyY2RpcikvbG9nLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9sb2cuYworK3ByaW50Zi5sbzogJChzcmNkaXIpL3ByaW50Zi5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvcHJpbnRmLmMKKytvc2RlcC5sbzogJChzcmNkaXIpL29zZGVwLmMKKysJJChMSUJUT09MKSAtLW1vZGU9Y29tcGlsZSAkKENPTVBJTEUpICQoc3JjZGlyKS9vc2RlcC5jCisraW50bC1jb21wYXQubG86ICQoc3JjZGlyKS9pbnRsLWNvbXBhdC5jCisrCSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDT01QSUxFKSAkKHNyY2RpcikvaW50bC1jb21wYXQuYworIAorLWFsbC15ZXM6IGxpYmludGwuJGxhIGludGxoLmluc3QKKy1hbGwtbm86CisrcmVmLWFkZC5zZWQ6ICQoc3JjZGlyKS9yZWYtYWRkLnNpbgorKwlzZWQgLWUgJy9eIy9kJyAtZSAncy9AJydQQUNLQUdFJydAL0BQQUNLQUdFQC9nJyAkKHNyY2RpcikvcmVmLWFkZC5zaW4gPiB0LXJlZi1hZGQuc2VkCisrCW12IHQtcmVmLWFkZC5zZWQgcmVmLWFkZC5zZWQKKytyZWYtZGVsLnNlZDogJChzcmNkaXIpL3JlZi1kZWwuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0AnJ1BBQ0tBR0UnJ0AvQFBBQ0tBR0VAL2cnICQoc3JjZGlyKS9yZWYtZGVsLnNpbiA+IHQtcmVmLWRlbC5zZWQKKysJbXYgdC1yZWYtZGVsLnNlZCByZWYtZGVsLnNlZAorIAorLWxpYmludGwuYTogJChPQkpFQ1RTKQorLQlybSAtZiAkQAorLQkkKEFSKSBjcnUgJEAgJChPQkpFQ1RTKQorLQkkKFJBTkxJQikgJEAKKytJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSS4uCisgCistbGliaW50bC5sYTogJChPQkpFQ1RTKQorLQkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJEAgJChPQkpFQ1RTKSBcCistCQkgICAtdmVyc2lvbi1pbmZvIDE6MCAtcnBhdGggJChsaWJkaXIpCisrbGliZ251aW50bC5oOiAkKHNyY2RpcikvbGliZ251aW50bC5oLmluCisrCXNlZCAtZSAncyxAJydIQVZFX1BPU0lYX1BSSU5URicnQCxASEFWRV9QT1NJWF9QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfQVNQUklOVEYnJ0AsQEhBVkVfQVNQUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfU05QUklOVEYnJ0AsQEhBVkVfU05QUklOVEZALGcnIFwKKysJICAgIC1lICdzLEAnJ0hBVkVfV1BSSU5URicnQCxASEFWRV9XUFJJTlRGQCxnJyBcCisrCSAgPCAkKHNyY2RpcikvbGliZ251aW50bC5oLmluID4gbGliZ251aW50bC5oCisgCistLi4vcG8vY2F0LWlkLXRibC4kbG86IC4uL3BvL2NhdC1pZC10YmwuYyAkKHRvcF9zcmNkaXIpL3BvLyQoUEFDS0FHRSkucG90CistCWNkIC4uL3BvICYmICQoTUFLRSkgY2F0LWlkLXRibC4kbG8KKytsaWJpbnRsLmg6IGxpYmdudWludGwuaAorKwljcCBsaWJnbnVpbnRsLmggbGliaW50bC5oCisgCistY2hlY2s6IGFsbAorK2NoYXJzZXQuYWxpYXM6ICQoc3JjZGlyKS9jb25maWcuY2hhcnNldAorKwkkKFNIRUxMKSAkKHNyY2RpcikvY29uZmlnLmNoYXJzZXQgJ0Bob3N0QCcgPiB0LSRACisrCW12IHQtJEAgJEAKKyAKKy0jIFRoaXMgaW5zdGFsbGF0aW9uIGdvYWwgaXMgb25seSB1c2VkIGluIEdOVSBnZXR0ZXh0LiAgUGFja2FnZXMgd2hpY2gKKy0jIG9ubHkgdXNlIHRoZSBsaWJyYXJ5IHNob3VsZCB1c2UgaW5zdGFsbCBpbnN0ZWFkLgorK2NoZWNrOiBhbGwKKyAKKyAjIFdlIG11c3Qgbm90IGluc3RhbGwgdGhlIGxpYmludGwuaC9saWJpbnRsLmEgZmlsZXMgaWYgd2UgYXJlIG9uIGEKKy0jIHN5c3RlbSB3aGljaCBoYXMgdGhlIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKy0jIHNlcGFyYXRlIGxpYnJhcnkgb3IgdXNlIHRoZSBjYXRnZXRzIGludGVyZmFjZS4gIEEgc3BlY2lhbCBjYXNlIGlzCistIyB3aGVyZSBjb25maWd1cmUgZm91bmQgYSBwcmV2aW91c2x5IGluc3RhbGxlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyMgc3lzdGVtIHdoaWNoIGhhcyB0aGUgR05VIGdldHRleHQoKSBmdW5jdGlvbiBpbiBpdHMgQyBsaWJyYXJ5IG9yIGluIGEKKysjIHNlcGFyYXRlIGxpYnJhcnkuCisgIyBJZiB5b3Ugd2FudCB0byB1c2UgdGhlIG9uZSB3aGljaCBjb21lcyB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUKKyAjIHBhY2thZ2UsIHlvdSBoYXZlIHRvIHVzZSBgY29uZmlndXJlIC0td2l0aC1pbmNsdWRlZC1nZXR0ZXh0Jy4KKyBpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCisgaW5zdGFsbC1leGVjOiBhbGwKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCIgXAorLQkgICAmJiB0ZXN0ICdASU5UTE9CSlNAJyA9ICckKEdFVFRPQkpTKSc7IHRoZW4gXAorLQkgIGlmIHRlc3QgLXIgJChNS0lOU1RBTExESVJTKTsgdGhlbiBcCistCSAgICAkKE1LSU5TVEFMTERJUlMpICQobGliZGlyKSAkKGluY2x1ZGVkaXIpOyBcCistCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChsaWJkaXIpICQoaW5jbHVkZWRpcik7IFwKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvbGliaW50bC5oOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliaW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLiRsYTsgXAorKwkgIGlmIHRlc3QgIkBSRUxPQ0FUQUJMRUAiID0geWVzOyB0aGVuIFwKKysJICAgIGRlcGVuZGVuY2llcz1gc2VkIC1uIC1lICdzLF5kZXBlbmRlbmN5X2xpYnM9XCguKlwpLFwxLHAnIDwgJChERVNURElSKSQobGliZGlyKS9saWJpbnRsLmxhIHwgc2VkIC1lICJzLF4nLCwiIC1lICJzLCdcJCQsLCJgOyBcCisrCSAgICBpZiB0ZXN0IC1uICIkJGRlcGVuZGVuY2llcyI7IHRoZW4gXAorKwkgICAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwubGE7IFwKKysJICAgIGZpOyBcCisgCSAgZmk7IFwKKy0JICAkKElOU1RBTExfREFUQSkgaW50bGguaW5zdCAkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBsaWJpbnRsLmEgJChsaWJkaXIpL2xpYmludGwuYTsgXAorIAllbHNlIFwKKyAJICA6IDsgXAorIAlmaQorLWluc3RhbGwtZGF0YTogYWxsCistCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQiOyB0aGVuIFwKKy0JICBpZiB0ZXN0IC1yICQoTUtJTlNUQUxMRElSUyk7IHRoZW4gXAorLQkgICAgJChNS0lOU1RBTExESVJTKSAkKGdldHRleHRzcmNkaXIpOyBcCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCBcCisrCSAgICAkKElOU1RBTExfREFUQSkgbGliZ251aW50bC4kbGEgJChERVNURElSKSQobGliZGlyKS9saWJnbnVpbnRsLiRsYTsgXAorKwkgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvcHJlbG9hZGFibGVfbGliaW50bC5zbzsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdudWludGwuc28gJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIFwKKysJICAgIHJtIC1mICQoREVTVERJUikkKGxpYmRpcikvbGliZ251aW50bC4kbGE7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKysJaWYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHRlc3QgQEdMSUJDMjFAICE9IG5vIHx8ICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwkgIHRlbXA9JChERVNURElSKSQobGliZGlyKS90LWNoYXJzZXQuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyB0aGVuIFwKKysJICAgIG9yaWc9JChERVNURElSKSQobGliZGlyKS9jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgcm0gLWYgJCR0ZW1wOyBcCisgCSAgZWxzZSBcCistCSAgICAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChnZXR0ZXh0c3JjZGlyKTsgXAorKwkgICAgaWYgdGVzdCBAR0xJQkMyMUAgPSBubzsgdGhlbiBcCisrCSAgICAgIG9yaWc9Y2hhcnNldC5hbGlhczsgXAorKwkgICAgICBzZWQgLWYgcmVmLWFkZC5zZWQgJCRvcmlnID4gJCR0ZW1wOyBcCisrCSAgICAgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgICAgIHJtIC1mICQkdGVtcDsgXAorKwkgICAgZmk7IFwKKyAJICBmaTsgXAorLQkgICQoSU5TVEFMTF9EQVRBKSBWRVJTSU9OICQoZ2V0dGV4dHNyY2RpcikvVkVSU0lPTjsgXAorLQkgIGRpc3RzPSIkKERJU1RGSUxFUy5jb21tb24pIjsgXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobG9jYWxlZGlyKTsgXAorKwkgIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXMgXAorKwkgICAgJiYgb3JpZz0kKERFU1RESVIpJChsb2NhbGVkaXIpL2xvY2FsZS5hbGlhcyBcCisrCSAgICB8fCBvcmlnPSQoc3JjZGlyKS9sb2NhbGUuYWxpYXM7IFwKKysJICB0ZW1wPSQoREVTVERJUikkKGxvY2FsZWRpcikvdC1sb2NhbGUuYWxpYXM7IFwKKysJICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgc2VkIC1mIHJlZi1hZGQuc2VkICQkb3JpZyA+ICQkdGVtcDsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJHRlbXAgJCRkZXN0OyBcCisrCSAgcm0gLWYgJCR0ZW1wOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisraW5zdGFsbC1kYXRhOiBhbGwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQoZ2V0dGV4dHNyY2Rpcik7IFwKKysJICAkKElOU1RBTExfREFUQSkgVkVSU0lPTiAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9WRVJTSU9OOyBcCisrCSAgJChJTlNUQUxMX0RBVEEpIENoYW5nZUxvZy5pbnN0ICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpL0NoYW5nZUxvZzsgXAorKwkgIGRpc3RzPSJDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikiOyBcCisgCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kJGZpbGUgJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKysJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisgCSAgZG9uZTsgXAorKwkgIGNobW9kIGEreCAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS9jb25maWcuY2hhcnNldDsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5nZW5lcmF0ZWQpIjsgXAorKwkgIGZvciBmaWxlIGluICQkZGlzdHM7IGRvIFwKKysJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIGRpcj0uOyBlbHNlIGRpcj0kKHNyY2Rpcik7IGZpOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRkaXIvJCRmaWxlIFwKKysJCQkgICAgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwkgIGRpc3RzPSIkKERJU1RGSUxFUy5vYnNvbGV0ZSkiOyBcCisrCSAgZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKworK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKysKKytpbnN0YWxsZGlyczoKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIiBcCisrCSAgICYmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0gbm87IHRoZW4gXAorKwkgICQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQobGliZGlyKTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorKwlpZiB0ZXN0ICdAVVNFX0lOQ0xVREVEX0xJQklOVExAJyA9IHllczsgdGhlbiBcCisrCSAgdGVzdCBAR0xJQkMyMUAgIT0gbm8gfHwgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpOyBcCisrCSAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsb2NhbGVkaXIpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisgCWVsc2UgXAorIAkgIDogOyBcCisgCWZpCitAQCAtMTQzLDIyICszNjcsNzYgQEAKKyBpbnN0YWxsY2hlY2s6CisgCisgdW5pbnN0YWxsOgorLQlkaXN0cz0iJChESVNURklMRVMuY29tbW9uKSI7IFwKKy0JZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorLQkgIHJtIC1mICQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCistCWRvbmUKKysJaWYgeyB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXJ1bnRpbWUiIHx8IHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB9IFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSB5ZXM7IHRoZW4gXAorKwkgIHJtIC1mICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYmludGwuaDsgXAorKwkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBcCisrCSAgICBybSAtZiAkKERFU1RESVIpJChsaWJkaXIpL2xpYmludGwuJGxhOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiIFwKKysJICAgJiYgdGVzdCAnQFVTRV9JTkNMVURFRF9MSUJJTlRMQCcgPSBubzsgdGhlbiBcCisrCSAgcm0gLWYgJChERVNURElSKSQobGliZGlyKS9wcmVsb2FkYWJsZV9saWJpbnRsLnNvOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgJ0BVU0VfSU5DTFVERURfTElCSU5UTEAnID0geWVzOyB0aGVuIFwKKysJICBpZiB0ZXN0IC1mICQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgdGhlbiBcCisrCSAgICB0ZW1wPSQoREVTVERJUikkKGxpYmRpcikvdC1jaGFyc2V0LmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxpYmRpcikvY2hhcnNldC5hbGlhczsgXAorKwkgICAgc2VkIC1mIHJlZi1kZWwuc2VkICQkZGVzdCA+ICQkdGVtcDsgXAorKwkgICAgaWYgZ3JlcCAnXiMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOiAkJCcgJCR0ZW1wID4gL2Rldi9udWxsOyB0aGVuIFwKKysJICAgICAgcm0gLWYgJCRkZXN0OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgJChJTlNUQUxMX0RBVEEpICQkdGVtcCAkJGRlc3Q7IFwKKysJICAgIGZpOyBcCisrCSAgICBybSAtZiAkJHRlbXA7IFwKKysJICBmaTsgXAorKwkgIGlmIHRlc3QgLWYgJChERVNURElSKSQobG9jYWxlZGlyKS9sb2NhbGUuYWxpYXM7IHRoZW4gXAorKwkgICAgdGVtcD0kKERFU1RESVIpJChsb2NhbGVkaXIpL3QtbG9jYWxlLmFsaWFzOyBcCisrCSAgICBkZXN0PSQoREVTVERJUikkKGxvY2FsZWRpcikvbG9jYWxlLmFsaWFzOyBcCisrCSAgICBzZWQgLWYgcmVmLWRlbC5zZWQgJCRkZXN0ID4gJCR0ZW1wOyBcCisrCSAgICBpZiBncmVwICdeIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6ICQkJyAkJHRlbXAgPiAvZGV2L251bGw7IHRoZW4gXAorKwkgICAgICBybSAtZiAkJGRlc3Q7IFwKKysJICAgIGVsc2UgXAorKwkgICAgICAkKElOU1RBTExfREFUQSkgJCR0ZW1wICQkZGVzdDsgXAorKwkgICAgZmk7IFwKKysJICAgIHJtIC1mICQkdGVtcDsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIDogOyBcCisrCWZpCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICBmb3IgZmlsZSBpbiBWRVJTSU9OIENoYW5nZUxvZyBDT1BZSU5HLkxJQi0yLjAgQ09QWUlORy5MSUItMi4xICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKTsgZG8gXAorKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisrCSAgZG9uZTsgXAorKwllbHNlIFwKKysJICA6IDsgXAorKwlmaQorIAorLWluZm8gZHZpOgorK2luZm8gZHZpIHBzIHBkZiBodG1sOgorIAorLSQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdldHRleHQuaAorLWJpbmR0ZXh0ZG9tLiRsbyBmaW5kZG9tYWluLiRsbyBsb2FkbXNnY2F0LiRsbzogZ2V0dGV4dFAuaCBnZXR0ZXh0LmggbG9hZGluZm8uaAorLWRjZ2V0dGV4dC4kbG86IGdldHRleHRQLmggZ2V0dGV4dC5oIGhhc2gtc3RyaW5nLmggbG9hZGluZm8uaAorKyQoT0JKRUNUUyk6IC4uL2NvbmZpZy5oIGxpYmdudWludGwuaAorK2JpbmR0ZXh0ZG9tLiRsbyBkY2dldHRleHQuJGxvIGRjaWdldHRleHQuJGxvIGRjbmdldHRleHQuJGxvIGRnZXR0ZXh0LiRsbyBkbmdldHRleHQuJGxvIGZpbmRkb21haW4uJGxvIGdldHRleHQuJGxvIGludGwtY29tcGF0LiRsbyBsb2FkbXNnY2F0LiRsbyBsb2NhbGVhbGlhcy4kbG8gbmdldHRleHQuJGxvIHRleHRkb21haW4uJGxvOiAkKHNyY2RpcikvZ2V0dGV4dFAuaCAkKHNyY2RpcikvZ21vLmggJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbzogJChzcmNkaXIpL2hhc2gtc3RyaW5nLmgKKytleHBsb2RlbmFtZS4kbG8gbDEwbmZsaXN0LiRsbzogJChzcmNkaXIpL2xvYWRpbmZvLmgKKytkY2lnZXR0ZXh0LiRsbyBsb2FkbXNnY2F0LiRsbyBwbHVyYWwuJGxvIHBsdXJhbC1leHAuJGxvOiAkKHNyY2RpcikvcGx1cmFsLWV4cC5oCisrZGNpZ2V0dGV4dC4kbG86ICQoc3JjZGlyKS9ldmFsLXBsdXJhbC5oCisrbG9jYWxjaGFyc2V0LiRsbzogJChzcmNkaXIpL2xvY2FsY2hhcnNldC5oCisrbG9jYWxlYWxpYXMuJGxvIGxvY2FsY2hhcnNldC4kbG8gcmVsb2NhdGFibGUuJGxvOiAkKHNyY2RpcikvcmVsb2NhdGFibGUuaAorK3ByaW50Zi4kbG86ICQoc3JjZGlyKS9wcmludGYtYXJncy5oICQoc3JjZGlyKS9wcmludGYtYXJncy5jICQoc3JjZGlyKS9wcmludGYtcGFyc2UuaCAkKHNyY2Rpcikvd3ByaW50Zi1wYXJzZS5oICQoc3JjZGlyKS94c2l6ZS5oICQoc3JjZGlyKS9wcmludGYtcGFyc2UuYyAkKHNyY2RpcikvdmFzbnByaW50Zi5oICQoc3JjZGlyKS92YXNud3ByaW50Zi5oICQoc3JjZGlyKS92YXNucHJpbnRmLmMKKyAKKyB0YWdzOiBUQUdTCisgCisgVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisgCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBldGFncyAtbyAkJGhlcmUvVEFHUyAkKEhFQURFUlMpICQoU09VUkNFUykKKyAKKytjdGFnczogQ1RBR1MKKysKKytDVEFHUzogJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCWhlcmU9YHB3ZGA7IGNkICQoc3JjZGlyKSAmJiBjdGFncyAtbyAkJGhlcmUvQ1RBR1MgJChIRUFERVJTKSAkKFNPVVJDRVMpCisrCisgaWQ6IElECisgCisgSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKQorQEAgLTE2NiwxMiArNDQ0LDE5IEBACisgCisgCisgbW9zdGx5Y2xlYW46CistCXJtIC1mICouYSAqLm8gKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiAqLmEgKi5sYSAqLm8gKi5vYmogKi5sbyBjb3JlIGNvcmUuKgorKwlybSAtZiBsaWJnbnVpbnRsLmggbGliaW50bC5oIGNoYXJzZXQuYWxpYXMgcmVmLWFkZC5zZWQgcmVmLWRlbC5zZWQKKysJcm0gLWYgLXIgLmxpYnMgX2xpYnMKKyAKKyBjbGVhbjogbW9zdGx5Y2xlYW4KKyAKKyBkaXN0Y2xlYW46IGNsZWFuCistCXJtIC1mIE1ha2VmaWxlIElEIFRBR1MgcG8ybXNnLnNlZCBwbzJ0Ymwuc2VkIGxpYmludGwuaAorKwlybSAtZiBNYWtlZmlsZSBJRCBUQUdTCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtcnVudGltZSIgfHwgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorKwkgIHJtIC1mIENoYW5nZUxvZy5pbnN0ICQoRElTVEZJTEVTLm5vcm1hbCk7IFwKKysJZWxzZSBcCisrCSAgOiA7IFwKKysJZmkKKyAKKyBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKyAJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlOyIKK0BAIC0xODEsMzMgKzQ2NiwyNyBAQAorICMgR05VIGdldHRleHQgbmVlZHMgbm90IGNvbnRhaW4gdGhlIGZpbGUgYFZFUlNJT04nIGJ1dCBjb250YWlucyBzb21lCisgIyBvdGhlciBmaWxlcyB3aGljaCBzaG91bGQgbm90IGJlIGRpc3RyaWJ1dGVkIGluIG90aGVyIHBhY2thZ2VzLgorIGRpc3RkaXIgPSAuLi8kKFBBQ0tBR0UpLSQoVkVSU0lPTikvJChzdWJkaXIpCistZGlzdCBkaXN0ZGlyOiBNYWtlZmlsZSAkKERJU1RGSUxFUykKKy0JaWYgdGVzdCAiJChQQUNLQUdFKSIgPSBnZXR0ZXh0OyB0aGVuIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKytkaXN0IGRpc3RkaXI6IE1ha2VmaWxlCisrCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKysJICA6IDsgXAorIAllbHNlIFwKKy0JICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5ub3JtYWwpIjsgXAorLQlmaTsgXAorLQlmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pICQkYWRkaXRpb25hbDsgZG8gXAorLQkgIGxuICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSAyPiAvZGV2L251bGwgXAorLQkgICAgfHwgY3AgLXAgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpOyBcCistCWRvbmUKKy0KKy1kaXN0LWxpYmM6CistCXRhciB6Y3ZmIGludGwtZ2xpYmMudGFyLmd6ICQoQ09NU1JDUykgJChDT01IRFJTKSBsaWJpbnRsLmguZ2xpYmMKKy0KKy1NYWtlZmlsZTogTWFrZWZpbGUuaW4gLi4vY29uZmlnLnN0YXR1cworLQljZCAuLiBcCistCSAgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisrCSAgaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC1ydW50aW1lIjsgdGhlbiBcCisrCSAgICBhZGRpdGlvbmFsPSIkKERJU1RGSUxFUy5nZXR0ZXh0KSI7IFwKKysJICBlbHNlIFwKKysJICAgIGFkZGl0aW9uYWw9IiQoRElTVEZJTEVTLm5vcm1hbCkiOyBcCisrCSAgZmk7IFwKKysJICAkKE1BS0UpICQoRElTVEZJTEVTLmNvbW1vbikgJChESVNURklMRVMuZ2VuZXJhdGVkKSAkJGFkZGl0aW9uYWw7IFwKKysJICBmb3IgZmlsZSBpbiBDaGFuZ2VMb2cgJChESVNURklMRVMuY29tbW9uKSAkKERJU1RGSUxFUy5nZW5lcmF0ZWQpICQkYWRkaXRpb25hbDsgZG8gXAorKwkgICAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gZGlyPS47IGVsc2UgZGlyPSQoc3JjZGlyKTsgZmk7IFwKKysJICAgIGNwIC1wICQkZGlyLyQkZmlsZSAkKGRpc3RkaXIpOyBcCisrCSAgZG9uZTsgXAorKwlmaQorIAorLSMgVGhlIGRlcGVuZGVuY3kgZm9yIGludGxoLmluc3QgaXMgZGlmZmVyZW50IGluIGdldHRleHQgYW5kIGFsbCBvdGhlcgorLSMgcGFja2FnZXMuICBCZWNhdXNlIHdlIGNhbm5vdCB5b3UgR05VIG1ha2UgZmVhdHVyZXMgd2UgaGF2ZSB0byBzb2x2ZQorLSMgdGhlIHByb2JsZW0gd2hpbGUgcmV3cml0aW5nIE1ha2VmaWxlLmluLgorLUBHVF9ZRVNAaW50bGguaW5zdDogaW50bGguaW5zdC5pbiAuLi9jb25maWcuc3RhdHVzCistQEdUX1lFU0AJY2QgLi4gXAorLUBHVF9ZRVNACSYmIENPTkZJR19GSUxFUz0kKHN1YmRpcikvJEAgQ09ORklHX0hFQURFUlM9IFwKKy1AR1RfWUVTQAkgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cworLUBHVF9OT0AuUEhPTlk6IGludGxoLmluc3QKKy1AR1RfTk9AaW50bGguaW5zdDoKKytNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisrCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKysjIFRoaXMgd291bGQgYmUgbW9yZSBlZmZpY2llbnQsIGJ1dCBkb2Vzbid0IHdvcmsgYW55IG1vcmUgd2l0aCBhdXRvY29uZi0yLjU3LAorKyMgd2hlbiBBQ19DT05GSUdfRklMRVMoW2ludGwvTWFrZWZpbGU6c29tZWRpci9NYWtlZmlsZS5pbl0pIGlzIHVzZWQuCisrIwljZCAkKHRvcF9idWlsZGRpcikgJiYgQ09ORklHX0ZJTEVTPSQoc3ViZGlyKS8kQCBDT05GSUdfSEVBREVSUz0gJChTSEVMTCkgLi9jb25maWcuc3RhdHVzCisgCisgIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9uZ2V0dGV4dC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL25nZXR0ZXh0LmMJMjAwNC0wOS0xMiAxNDo0MDozNC41MzM3MjEwMzIgLTA0MDAKK0BAIC0wLDAgKzEsNjUgQEAKKysvKiBJbXBsZW1lbnRhdGlvbiBvZiBuZ2V0dGV4dCgzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTcsIDIwMDAtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIF9fbmVlZF9OVUxMCisrIyBpbmNsdWRlIDxzdGRkZWYuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBKdXN0IGZvciBOVUxMLiAgKi8KKysjZW5kaWYKKysKKysjaW5jbHVkZSAiZ2V0dGV4dFAuaCIKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKysjZWxzZQorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsb2NhbGUuaD4KKysKKysvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisrCisrLyogTmFtZXMgZm9yIHRoZSBsaWJpbnRsIGZ1bmN0aW9ucyBhcmUgYSBwcm9ibGVtLiAgVGhleSBtdXN0IG5vdCBjbGFzaAorKyAgIHdpdGggZXhpc3RpbmcgbmFtZXMgYW5kIHRoZXkgc2hvdWxkIGZvbGxvdyBBTlNJIEMuICBCdXQgdGhpcyBzb3VyY2UKKysgICBjb2RlIGlzIGFsc28gdXNlZCBpbiBHTlUgQyBMaWJyYXJ5IHdoZXJlIHRoZSBuYW1lcyBoYXZlIGEgX18KKysgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworKyNpZmRlZiBfTElCQworKyMgZGVmaW5lIE5HRVRURVhUIF9fbmdldHRleHQKKysjIGRlZmluZSBEQ05HRVRURVhUIF9fZGNuZ2V0dGV4dAorKyNlbHNlCisrIyBkZWZpbmUgTkdFVFRFWFQgbGliaW50bF9uZ2V0dGV4dAorKyMgZGVmaW5lIERDTkdFVFRFWFQgbGliaW50bF9kY25nZXR0ZXh0CisrI2VuZGlmCisrCisrLyogTG9vayB1cCBNU0dJRCBpbiB0aGUgY3VycmVudCBkZWZhdWx0IG1lc3NhZ2UgY2F0YWxvZyBmb3IgdGhlIGN1cnJlbnQKKysgICBMQ19NRVNTQUdFUyBsb2NhbGUuICBJZiBub3QgZm91bmQsIHJldHVybnMgTVNHSUQgaXRzZWxmICh0aGUgZGVmYXVsdAorKyAgIHRleHQpLiAgKi8KKytjaGFyICoKKytOR0VUVEVYVCAoY29uc3QgY2hhciAqbXNnaWQxLCBjb25zdCBjaGFyICptc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IG4pCisreworKyAgcmV0dXJuIERDTkdFVFRFWFQgKE5VTEwsIG1zZ2lkMSwgbXNnaWQyLCBuLCBMQ19NRVNTQUdFUyk7CisrfQorKworKyNpZmRlZiBfTElCQworKy8qIEFsaWFzIGZvciBmdW5jdGlvbiBuYW1lIGluIEdOVSBDIExpYnJhcnkuICAqLworK3dlYWtfYWxpYXMgKF9fbmdldHRleHQsIG5nZXR0ZXh0KTsKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjUzOTcyMDEyMCAtMDQwMAorQEAgLTAsMCArMSw5OCBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNkZWZpbmUgT1MyX0FXQVJFCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisrCisrLyogQSB2ZXJzaW9uIG9mIGdldGVudigpIHRoYXQgd29ya3MgZnJvbSBETExzICovCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgRG9zU2NhbkVudiAoY29uc3QgdW5zaWduZWQgY2hhciAqcHN6TmFtZSwgdW5zaWduZWQgY2hhciAqKnBwc3pWYWx1ZSk7CisrCisrY2hhciAqCisrX25sX2dldGVudiAoY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICB1bnNpZ25lZCBjaGFyICp2YWx1ZTsKKysgIGlmIChEb3NTY2FuRW52IChuYW1lLCAmdmFsdWUpKQorKyAgICByZXR1cm4gTlVMTDsKKysgIGVsc2UKKysgICAgcmV0dXJuIHZhbHVlOworK30KKysKKysvKiBBIGZpeGVkIHNpemUgYnVmZmVyLiAgKi8KKytjaGFyIGxpYmludGxfbmxfZGVmYXVsdF9kaXJuYW1lW01BWFBBVEhMRU4rMV07CisrCisrY2hhciAqX25sb3MyX2xpYmRpciA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IE5VTEw7CisrY2hhciAqX25sb3MyX2xvY2FsZWRpciA9IE5VTEw7CisrCisrc3RhdGljIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZAorK25sb3MyX2luaXRpYWxpemUgKCkKKyt7CisrICBjaGFyICpyb290ID0gZ2V0ZW52ICgiVU5JWFJPT1QiKTsKKysgIGNoYXIgKmdudWxvY2FsZWRpciA9IGdldGVudiAoIkdOVUxPQ0FMRURJUiIpOworKworKyAgX25sb3MyX2xpYmRpciA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xpYmRpcikKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbGliZGlyID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTElCRElSKSArIDEpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9saWJkaXIsIHJvb3QsIHNsKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbGliZGlyICsgc2wsIExJQkRJUiwgc3RybGVuIChMSUJESVIpICsgMSk7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgX25sb3MyX2xpYmRpciA9IExJQkRJUjsKKysgICAgfQorKworKyAgX25sb3MyX2xvY2FsZWFsaWFzcGF0aCA9IGdudWxvY2FsZWRpcjsKKysgIGlmICghX25sb3MyX2xvY2FsZWFsaWFzcGF0aCkKKysgICAgeworKyAgICAgIGlmIChyb290KQorKyAgICAgICAgeworKyAgICAgICAgICBzaXplX3Qgc2wgPSBzdHJsZW4gKHJvb3QpOworKyAgICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gKGNoYXIgKikgbWFsbG9jIChzbCArIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWFsaWFzcGF0aCwgcm9vdCwgc2wpOworKyAgICAgICAgICBtZW1jcHkgKF9ubG9zMl9sb2NhbGVhbGlhc3BhdGggKyBzbCwgTE9DQUxFX0FMSUFTX1BBVEgsIHN0cmxlbiAoTE9DQUxFX0FMSUFTX1BBVEgpICsgMSk7CisrICAgICAgICB9CisrICAgICBlbHNlCisrICAgICAgICBfbmxvczJfbG9jYWxlYWxpYXNwYXRoID0gTE9DQUxFX0FMSUFTX1BBVEg7CisrICAgIH0KKysKKysgIF9ubG9zMl9sb2NhbGVkaXIgPSBnbnVsb2NhbGVkaXI7CisrICBpZiAoIV9ubG9zMl9sb2NhbGVkaXIpCisrICAgIHsKKysgICAgICBpZiAocm9vdCkKKysgICAgICAgIHsKKysgICAgICAgICAgc2l6ZV90IHNsID0gc3RybGVuIChyb290KTsKKysgICAgICAgICAgX25sb3MyX2xvY2FsZWRpciA9IChjaGFyICopIG1hbGxvYyAoc2wgKyBzdHJsZW4gKExPQ0FMRURJUikgKyAxKTsKKysgICAgICAgICAgbWVtY3B5IChfbmxvczJfbG9jYWxlZGlyLCByb290LCBzbCk7CisrICAgICAgICAgIG1lbWNweSAoX25sb3MyX2xvY2FsZWRpciArIHNsLCBMT0NBTEVESVIsIHN0cmxlbiAoTE9DQUxFRElSKSArIDEpOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIF9ubG9zMl9sb2NhbGVkaXIgPSBMT0NBTEVESVI7CisrICAgIH0KKysKKysgIGlmIChzdHJsZW4gKF9ubG9zMl9sb2NhbGVkaXIpIDw9IE1BWFBBVEhMRU4pCisrICAgIHN0cmNweSAobGliaW50bF9ubF9kZWZhdWx0X2Rpcm5hbWUsIF9ubG9zMl9sb2NhbGVkaXIpOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9vczJjb21wYXQuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vczJjb21wYXQuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjU0NDcxOTM2MCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKy8qIE9TLzIgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgorKyAgIFRoaXMgZmlsZSBpcyBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBmcm9tIGNvbmZpZy5oCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFdoZW4gaW5jbHVkZWQgZnJvbSBvczJjb21wYXQuaCB3ZSBuZWVkIGFsbCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbnMgKi8KKysjaWZuZGVmIE9TMl9BV0FSRQorKworKyN1bmRlZiBMSUJESVIKKysjZGVmaW5lIExJQkRJUgkJCV9ubG9zMl9saWJkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xpYmRpcjsKKysKKysjdW5kZWYgTE9DQUxFRElSCisrI2RlZmluZSBMT0NBTEVESVIJCV9ubG9zMl9sb2NhbGVkaXIKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWRpcjsKKysKKysjdW5kZWYgTE9DQUxFX0FMSUFTX1BBVEgKKysjZGVmaW5lIExPQ0FMRV9BTElBU19QQVRICV9ubG9zMl9sb2NhbGVhbGlhc3BhdGgKKytleHRlcm4gY2hhciAqX25sb3MyX2xvY2FsZWFsaWFzcGF0aDsKKysKKysjZW5kaWYKKysKKysjdW5kZWYgSEFWRV9TVFJDQVNFQ01QCisrI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMQorKyNkZWZpbmUgc3RyY2FzZWNtcCBzdHJpY21wCisrI2RlZmluZSBzdHJuY2FzZWNtcCBzdHJuaWNtcAorKworKy8qIFdlIGhhdmUgb3VyIG93biBnZXRlbnYoKSB3aGljaCB3b3JrcyBldmVuIGlmIGxpYnJhcnkgaXMgY29tcGlsZWQgYXMgRExMICovCisrI2RlZmluZSBnZXRlbnYgX25sX2dldGVudgorKworKy8qIE9sZGVyIHZlcnNpb25zIG9mIGdldHRleHQgdXNlZCAtMSBhcyB0aGUgdmFsdWUgb2YgTENfTUVTU0FHRVMgKi8KKysjZGVmaW5lIExDX01FU1NBR0VTX0NPTVBBVCAoLTEpCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvb3NkZXAuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9vc2RlcC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTUwNzE4NDQ4IC0wNDAwCitAQCAtMCwwICsxLDI0IEBACisrLyogT1MgZGVwZW5kZW50IHBhcnRzIG9mIGxpYmludGwuCisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZiBkZWZpbmVkIF9fRU1YX18KKysjIGluY2x1ZGUgIm9zMmNvbXBhdC5jIgorKyNlbHNlCisrLyogQXZvaWQgQUlYIGNvbXBpbGVyIHdhcm5pbmcuICAqLworK3R5cGVkZWYgaW50IGR1bW15OworKyNlbmRpZgorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BsdXJhbC5jCTIwMDQtMDktMTIgMTQ6NDA6MzYuNTcxNDExMjU2IC0wNDAwCitAQCAtMCwwICsxLDE0OTAgQEAKKysvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBmcm9tIHBsdXJhbC55CisrICAgYnkgR05VIGJpc29uIDEuMzUuICAqLworKworKyNkZWZpbmUgWVlCSVNPTiAxICAvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworKworKyNkZWZpbmUgeXlwYXJzZSBfX2dldHRleHRwYXJzZQorKyNkZWZpbmUgeXlsZXggX19nZXR0ZXh0bGV4CisrI2RlZmluZSB5eWVycm9yIF9fZ2V0dGV4dGVycm9yCisrI2RlZmluZSB5eWx2YWwgX19nZXR0ZXh0bHZhbAorKyNkZWZpbmUgeXljaGFyIF9fZ2V0dGV4dGNoYXIKKysjZGVmaW5lIHl5ZGVidWcgX19nZXR0ZXh0ZGVidWcKKysjZGVmaW5lIHl5bmVycnMgX19nZXR0ZXh0bmVycnMKKysjIGRlZmluZQlFUVVPUDIJMjU3CisrIyBkZWZpbmUJQ01QT1AyCTI1OAorKyMgZGVmaW5lCUFERE9QMgkyNTkKKysjIGRlZmluZQlNVUxPUDIJMjYwCisrIyBkZWZpbmUJTlVNQkVSCTI2MQorKworKyNsaW5lIDEgInBsdXJhbC55IgorKworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKworKyNsaW5lIDQ5ICJwbHVyYWwueSIKKysjaWZuZGVmIFlZU1RZUEUKKyt0eXBlZGVmIHVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30geXlzdHlwZTsKKysjIGRlZmluZSBZWVNUWVBFIHl5c3R5cGUKKysjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorKyNlbmRpZgorKyNsaW5lIDU1ICJwbHVyYWwueSIKKysKKysvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMuICAqLworK3N0YXRpYyBpbnQgeXlsZXggKFlZU1RZUEUgKmx2YWwsIGNvbnN0IGNoYXIgKipwZXhwKTsKKytzdGF0aWMgdm9pZCB5eWVycm9yIChjb25zdCBjaGFyICpzdHIpOworKworKy8qIEFsbG9jYXRpb24gb2YgZXhwcmVzc2lvbnMuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cCAoaW50IG5hcmdzLCBlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqIGNvbnN0ICphcmdzKQorK3sKKysgIGludCBpOworKyAgc3RydWN0IGV4cHJlc3Npb24gKm5ld3A7CisrCisrICAvKiBJZiBhbnkgb2YgdGhlIGFyZ3VtZW50IGNvdWxkIG5vdCBiZSBtYWxsb2MnZWQsIGp1c3QgcmV0dXJuIE5VTEwuICAqLworKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgaWYgKGFyZ3NbaV0gPT0gTlVMTCkKKysgICAgICBnb3RvIGZhaWw7CisrCisrICAvKiBBbGxvY2F0ZSBhIG5ldyBleHByZXNzaW9uLiAgKi8KKysgIG5ld3AgPSAoc3RydWN0IGV4cHJlc3Npb24gKikgbWFsbG9jIChzaXplb2YgKCpuZXdwKSk7CisrICBpZiAobmV3cCAhPSBOVUxMKQorKyAgICB7CisrICAgICAgbmV3cC0+bmFyZ3MgPSBuYXJnczsKKysgICAgICBuZXdwLT5vcGVyYXRpb24gPSBvcDsKKysgICAgICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKwluZXdwLT52YWwuYXJnc1tpXSA9IGFyZ3NbaV07CisrICAgICAgcmV0dXJuIG5ld3A7CisrICAgIH0KKysKKysgZmFpbDoKKysgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrICAgIEZSRUVfRVhQUkVTU0lPTiAoYXJnc1tpXSk7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8wIChlbnVtIG9wZXJhdG9yIG9wKQorK3sKKysgIHJldHVybiBuZXdfZXhwICgwLCBvcCwgTlVMTCk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMSAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKnJpZ2h0KQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzFdOworKworKyAgYXJnc1swXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDEsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzIgKGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICpsZWZ0LCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMl07CisrCisrICBhcmdzWzBdID0gbGVmdDsKKysgIGFyZ3NbMV0gPSByaWdodDsKKysgIHJldHVybiBuZXdfZXhwICgyLCBvcCwgYXJncyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMyAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmJleHAsCisrCSAgIHN0cnVjdCBleHByZXNzaW9uICp0YnJhbmNoLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqZmJyYW5jaCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsKKysKKysgIGFyZ3NbMF0gPSBiZXhwOworKyAgYXJnc1sxXSA9IHRicmFuY2g7CisrICBhcmdzWzJdID0gZmJyYW5jaDsKKysgIHJldHVybiBuZXdfZXhwICgzLCBvcCwgYXJncyk7CisrfQorKworKyNpZm5kZWYgWVlERUJVRworKyMgZGVmaW5lIFlZREVCVUcgMAorKyNlbmRpZgorKworKworKworKyNkZWZpbmUJWVlGSU5BTAkJMjcKKysjZGVmaW5lCVlZRkxBRwkJLTMyNzY4CisrI2RlZmluZQlZWU5UQkFTRQkxNgorKworKy8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gKi8KKysjZGVmaW5lIFlZVFJBTlNMQVRFKHgpICgodW5zaWduZWQpKHgpIDw9IDI2MSA/IHl5dHJhbnNsYXRlW3hdIDogMTgpCisrCisrLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAqLworK3N0YXRpYyBjb25zdCBjaGFyIHl5dHJhbnNsYXRlW10gPQorK3sKKysgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAxMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA1LCAgICAgMiwKKysgICAgICAxNCwgICAgMTUsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgIDEyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAxMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKysgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgMTEKKyt9OworKworKyNpZiBZWURFQlVHCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cHJoc1tdID0KKyt7CisrICAgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDgsICAgIDEyLCAgICAxNiwgICAgMjAsICAgIDI0LCAgICAyOCwgICAgMzIsCisrICAgICAgMzUsICAgIDM3LCAgICAzOQorK307Cisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmhzW10gPQorK3sKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgMywgICAgMTcsICAgIDEyLCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNCwKKysgICAgICAxNywgICAgIDAsICAgIDE3LCAgICAgNSwgICAgMTcsICAgICAwLCAgICAxNywgICAgIDYsICAgIDE3LCAgICAgMCwKKysgICAgICAxNywgICAgIDcsICAgIDE3LCAgICAgMCwgICAgMTcsICAgICA4LCAgICAxNywgICAgIDAsICAgIDE3LCAgICAgOSwKKysgICAgICAxNywgICAgIDAsICAgIDEwLCAgICAxNywgICAgIDAsICAgIDEzLCAgICAgMCwgICAgMTEsICAgICAwLCAgICAxNCwKKysgICAgICAxNywgICAgMTUsICAgICAwCisrfTsKKysKKysjZW5kaWYKKysKKysjaWYgWVlERUJVRworKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cmxpbmVbXSA9CisreworKyAgICAgICAwLCAgIDE1MCwgICAxNTgsICAgMTYyLCAgIDE2NiwgICAxNzAsICAgMTc0LCAgIDE3OCwgICAxODIsICAgMTg2LAorKyAgICAgMTkwLCAgIDE5NCwgICAxOTkKKyt9OworKyNlbmRpZgorKworKworKyNpZiAoWVlERUJVRykgfHwgZGVmaW5lZCBZWUVSUk9SX1ZFUkJPU0UKKysKKysvKiBZWVROQU1FW1RPS0VOX05VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHRva2VuIFRPS0VOX05VTS4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KKyt7CisrICAiJCIsICJlcnJvciIsICIkdW5kZWZpbmVkLiIsICInPyciLCAiJ3wnIiwgIicmJyIsICJFUVVPUDIiLCAiQ01QT1AyIiwgCisrICAiQURET1AyIiwgIk1VTE9QMiIsICInISciLCAiTlVNQkVSIiwgIic6JyIsICInbiciLCAiJygnIiwgIicpJyIsIAorKyAgInN0YXJ0IiwgImV4cCIsIDAKKyt9OworKyNlbmRpZgorKworKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cjFbXSA9CisreworKyAgICAgICAwLCAgICAxNiwgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LCAgICAxNywgICAgMTcsICAgIDE3LAorKyAgICAgIDE3LCAgICAxNywgICAgMTcKKyt9OworKworKy8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAqLworK3N0YXRpYyBjb25zdCBzaG9ydCB5eXIyW10gPQorK3sKKysgICAgICAgMCwgICAgIDEsICAgICA1LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKysgICAgICAgMSwgICAgIDEsICAgICAzCisrfTsKKysKKysvKiBZWURFRkFDVFtTXSAtLSBkZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGggaW4gc3RhdGUgUyB3aGVuIFlZVEFCTEUKKysgICBkb2Vzbid0IHNwZWNpZnkgc29tZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuCisrICAgZXJyb3IuICovCisrc3RhdGljIGNvbnN0IHNob3J0IHl5ZGVmYWN0W10gPQorK3sKKysgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMCwgICAgIDAsICAgICAxLCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwKKysgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMCwgICAgIDAKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWRlZmdvdG9bXSA9CisreworKyAgICAgIDI1LCAgICAgNQorK307CisrCisrc3RhdGljIGNvbnN0IHNob3J0IHl5cGFjdFtdID0KKyt7CisrICAgICAgLTksICAgIC05LC0zMjc2OCwtMzI3NjgsICAgIC05LCAgICAzNCwtMzI3NjgsICAgIDExLCAgICAtOSwgICAgLTksCisrICAgICAgLTksICAgIC05LCAgICAtOSwgICAgLTksICAgIC05LC0zMjc2OCwgICAgMjQsICAgIDM5LCAgICA0MywgICAgMTYsCisrICAgICAgMjYsICAgIC0zLC0zMjc2OCwgICAgLTksICAgIDM0LCAgICAyMSwgICAgNTMsLTMyNzY4CisrfTsKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXlwZ290b1tdID0KKyt7CisrICAtMzI3NjgsICAgIC0xCisrfTsKKysKKysKKysjZGVmaW5lCVlZTEFTVAkJNTMKKysKKysKKytzdGF0aWMgY29uc3Qgc2hvcnQgeXl0YWJsZVtdID0KKyt7CisrICAgICAgIDYsICAgICAxLCAgICAgMiwgICAgIDcsICAgICAzLCAgICAgNCwgICAgMTQsICAgIDE2LCAgICAxNywgICAgMTgsCisrICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisrICAgICAgMTQsICAgIDI2LCAgICAyNCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEzLCAgICAxNCwgICAgMjMsICAgICA4LCAgICAgOSwgICAgMTAsCisrICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTEsCisrICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMjcKKyt9OworKworK3N0YXRpYyBjb25zdCBzaG9ydCB5eWNoZWNrW10gPQorK3sKKysgICAgICAgMSwgICAgMTAsICAgIDExLCAgICAgNCwgICAgMTMsICAgIDE0LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMCwKKysgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKysgICAgICAgOSwgICAgIDAsICAgIDIzLCAgICAgNywgICAgIDgsICAgICA5LCAgICAxNSwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDgsICAgICA5LCAgICAxMiwgICAgIDMsICAgICA0LCAgICAgNSwKKysgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAgNiwKKysgICAgICAgNywgICAgIDgsICAgICA5LCAgICAgMAorK307CisrI2RlZmluZSBZWVBVUkUgMQorKworKy8qIC0qLUMtKi0gIE5vdGUgc29tZSBjb21waWxlcnMgY2hva2Ugb24gY29tbWVudHMgb24gYCNsaW5lJyBsaW5lcy4gICovCisrI2xpbmUgMyAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrLyogU2tlbGV0b24gb3V0cHV0IHBhcnNlciBmb3IgYmlzb24sCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisrICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworKworKy8qIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIGNvcGllZCBieSBCaXNvbiBpbnRvIGEKKysgICBCaXNvbiBvdXRwdXQgZmlsZSwgeW91IG1heSB1c2UgdGhhdCBvdXRwdXQgZmlsZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKysgICBpbiB2ZXJzaW9uIDEuMjQgb2YgQmlzb24uICAqLworKworKy8qIFRoaXMgaXMgdGhlIHBhcnNlciBjb2RlIHRoYXQgaXMgd3JpdHRlbiBpbnRvIGVhY2ggYmlzb24gcGFyc2VyIHdoZW4KKysgICB0aGUgJXNlbWFudGljX3BhcnNlciBkZWNsYXJhdGlvbiBpcyBub3Qgc3BlY2lmaWVkIGluIHRoZSBncmFtbWFyLgorKyAgIEl0IHdhcyB3cml0dGVuIGJ5IFJpY2hhcmQgU3RhbGxtYW4gYnkgc2ltcGxpZnlpbmcgdGhlIGhhaXJ5IHBhcnNlcgorKyAgIHVzZWQgd2hlbiAlc2VtYW50aWNfcGFyc2VyIGlzIHNwZWNpZmllZC4gICovCisrCisrLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKysgICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKysgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorKyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8KKysgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworKworKyNpZiAhIGRlZmluZWQgKHl5b3ZlcmZsb3cpIHx8IGRlZmluZWQgKFlZRVJST1JfVkVSQk9TRSkKKysKKysvKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovCisrCisrIyBpZiBZWVNUQUNLX1VTRV9BTExPQ0EKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKKysjIGVsc2UKKysjICBpZm5kZWYgWVlTVEFDS19VU0VfQUxMT0NBCisrIyAgIGlmIGRlZmluZWQgKGFsbG9jYSkgfHwgZGVmaW5lZCAoX0FMTE9DQV9IKQorKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmZGVmIF9fR05VQ19fCisrIyAgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKysgICAvKiBQYWNpZnkgR0NDJ3MgYGVtcHR5IGlmLWJvZHknIHdhcm5pbmcuICovCisrIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCAoX19TVERDX18pIHx8IGRlZmluZWQgKF9fY3BsdXNwbHVzKQorKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisrIyAgZW5kaWYKKysjICBkZWZpbmUgWVlTVEFDS19BTExPQyBtYWxsb2MKKysjICBkZWZpbmUgWVlTVEFDS19GUkVFIGZyZWUKKysjIGVuZGlmCisrI2VuZGlmIC8qICEgZGVmaW5lZCAoeXlvdmVyZmxvdykgfHwgZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKworKworKyNpZiAoISBkZWZpbmVkICh5eW92ZXJmbG93KSBcCisrICAgICAmJiAoISBkZWZpbmVkIChfX2NwbHVzcGx1cykgXAorKwkgfHwgKFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKysKKysvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8KKyt1bmlvbiB5eWFsbG9jCisreworKyAgc2hvcnQgeXlzczsKKysgIFlZU1RZUEUgeXl2czsKKysjIGlmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxzOworKyMgZW5kaWYKKyt9OworKworKy8qIFRoZSBzaXplIG9mIHRoZSBtYXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisrIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkKKysKKysvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKysgICBOIGVsZW1lbnRzLiAgKi8KKysjIGlmIFlZTFNQX05FRURFRAorKyMgIGRlZmluZSBZWVNUQUNLX0JZVEVTKE4pIFwKKysgICAgICgoTikgKiAoc2l6ZW9mIChzaG9ydCkgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mIChZWUxUWVBFKSkJXAorKyAgICAgICsgMiAqIFlZU1RBQ0tfR0FQX01BWCkKKysjIGVsc2UKKysjICBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisrICAgICAoKE4pICogKHNpemVvZiAoc2hvcnQpICsgc2l6ZW9mIChZWVNUWVBFKSkJCQkJXAorKyAgICAgICsgWVlTVEFDS19HQVBfTUFYKQorKyMgZW5kaWYKKysKKysvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9NIHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKysgICBub3Qgb3ZlcmxhcC4gICovCisrIyBpZm5kZWYgWVlDT1BZCisrIyAgaWYgMSA8IF9fR05VQ19fCisrIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisrICAgICAgX19idWlsdGluX21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisrICAgICAgZG8JCQkJCVwKKysJewkJCQkJXAorKwkgIHJlZ2lzdGVyIFlZU0laRV9UIHl5aTsJCVwKKysJICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKQlcCisrCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlpXTsJCVwKKysJfQkJCQkJXAorKyAgICAgIHdoaWxlICgwKQorKyMgIGVuZGlmCisrIyBlbmRpZgorKworKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQorKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCisrICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKKysgICBzdGFjay4gICovCisrIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKysgICAgZG8JCQkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisrCVlZQ09QWSAoJnl5cHRyLT5TdGFjaywgU3RhY2ssIHl5c2l6ZSk7CQkJCVwKKysJU3RhY2sgPSAmeXlwdHItPlN0YWNrOwkJCQkJCVwKKysJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYOwlcCisrCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgICB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysKKysKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkgJiYgZGVmaW5lZCAoX19TSVpFX1RZUEVfXykKKysjIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpICYmIGRlZmluZWQgKHNpemVfdCkKKysjIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjZW5kaWYKKysjaWYgISBkZWZpbmVkIChZWVNJWkVfVCkKKysjIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKysjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKysjIGVuZGlmCisrI2VuZGlmCisrI2lmICEgZGVmaW5lZCAoWVlTSVpFX1QpCisrIyBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisrI2VuZGlmCisrCisrI2RlZmluZSB5eWVycm9rCQkoeXllcnJzdGF0dXMgPSAwKQorKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorKyNkZWZpbmUgWVlFTVBUWQkJLTIKKysjZGVmaW5lIFlZRU9GCQkwCisrI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisrI2RlZmluZSBZWUFCT1JUIAlnb3RvIHl5YWJvcnRsYWIKKysjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJsYWIxCisrLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorKyAgIHRvIGVhc2UgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCisrICAgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uICAqLworKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5ZXJybGFiCisrI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisrI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpCQkJCQlcCisrZG8JCQkJCQkJCVwKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSAmJiB5eWxlbiA9PSAxKQkJCQlcCisrICAgIHsJCQkJCQkJCVwKKysgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKysgICAgICB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJCVwKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CQkJCVwKKysgICAgICBZWVBPUFNUQUNLOwkJCQkJCVwKKysgICAgICBnb3RvIHl5YmFja3VwOwkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorKyAgZWxzZQkJCQkJCQkJXAorKyAgICB7IAkJCQkJCQkJXAorKyAgICAgIHl5ZXJyb3IgKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIik7CQkJXAorKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKysgICAgfQkJCQkJCQkJXAorK3doaWxlICgwKQorKworKyNkZWZpbmUgWVlURVJST1IJMQorKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgorKworKworKy8qIFlZTExPQ19ERUZBVUxUIC0tIENvbXB1dGUgdGhlIGRlZmF1bHQgbG9jYXRpb24gKGJlZm9yZSB0aGUgYWN0aW9ucworKyAgIGFyZSBydW4pLgorKworKyAgIFdoZW4gWVlMTE9DX0RFRkFVTFQgaXMgcnVuLCBDVVJSRU5UIGlzIHNldCB0aGUgbG9jYXRpb24gb2YgdGhlCisrICAgZmlyc3QgdG9rZW4uICBCeSBkZWZhdWx0LCB0byBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgcmFuZ2VzLCBleHRlbmQKKysgICBpdHMgcmFuZ2UgdG8gdGhlIGxhc3Qgc3ltYm9sLiAgKi8KKysKKysjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisrIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAJXAorKyAgIEN1cnJlbnQubGFzdF9saW5lICAgPSBSaHNbTl0ubGFzdF9saW5lOwlcCisrICAgQ3VycmVudC5sYXN0X2NvbHVtbiA9IFJoc1tOXS5sYXN0X2NvbHVtbjsKKysjZW5kaWYKKysKKysKKysvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUgcmlnaHQgYXJndW1lbnRzLiAgKi8KKysKKysjaWYgWVlQVVJFCisrIyBpZiBZWUxTUF9ORUVERUQKKysjICBpZmRlZiBZWUxFWF9QQVJBTQorKyMgICBkZWZpbmUgWVlMRVgJCXl5bGV4ICgmeXlsdmFsLCAmeXlsbG9jLCBZWUxFWF9QQVJBTSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsICZ5eWxsb2MpCisrIyAgZW5kaWYKKysjIGVsc2UgLyogIVlZTFNQX05FRURFRCAqLworKyMgIGlmZGVmIFlZTEVYX1BBUkFNCisrIyAgIGRlZmluZSBZWUxFWAkJeXlsZXggKCZ5eWx2YWwsIFlZTEVYX1BBUkFNKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFlZTEVYCQl5eWxleCAoJnl5bHZhbCkKKysjICBlbmRpZgorKyMgZW5kaWYgLyogIVlZTFNQX05FRURFRCAqLworKyNlbHNlIC8qICFZWVBVUkUgKi8KKysjIGRlZmluZSBZWUxFWAkJCXl5bGV4ICgpCisrI2VuZGlmIC8qICFZWVBVUkUgKi8KKysKKysKKysvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovCisrI2lmIFlZREVCVUcKKysKKysjIGlmbmRlZiBZWUZQUklOVEYKKysjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisrIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisrIyBlbmRpZgorKworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKKytkbyB7CQkJCQkJXAorKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisrICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCisrfSB3aGlsZSAoMCkKKysvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKysgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KKytpbnQgeXlkZWJ1ZzsKKysjZWxzZSAvKiAhWVlERUJVRyAqLworKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQorKyNlbmRpZiAvKiAhWVlERUJVRyAqLworKworKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKysjaWZuZGVmCVlZSU5JVERFUFRICisrIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisrI2VuZGlmCisrCisrLyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKKysgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKysKKysgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgorKyAgIFNJWkVfTUFYIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKKysgICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAgKi8KKysKKysjaWYgWVlNQVhERVBUSCA9PSAwCisrIyB1bmRlZiBZWU1BWERFUFRICisrI2VuZGlmCisrCisrI2lmbmRlZiBZWU1BWERFUFRICisrIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorKyNlbmRpZgorKwwKKysjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisrCisrIyBpZm5kZWYgeXlzdHJsZW4KKysjICBpZiBkZWZpbmVkIChfX0dMSUJDX18pICYmIGRlZmluZWQgKF9TVFJJTkdfSCkKKysjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorKyMgIGVsc2UKKysvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisrc3RhdGljIFlZU0laRV9UCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCisrIyAgIGVsc2UKKyt5eXN0cmxlbiAoeXlzdHIpCisrICAgICBjb25zdCBjaGFyICp5eXN0cjsKKysjICAgZW5kaWYKKyt7CisrICByZWdpc3RlciBjb25zdCBjaGFyICp5eXMgPSB5eXN0cjsKKysKKysgIHdoaWxlICgqeXlzKysgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlzIC0geXlzdHIgLSAxOworK30KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmbmRlZiB5eXN0cGNweQorKyMgIGlmIGRlZmluZWQgKF9fR0xJQkNfXykgJiYgZGVmaW5lZCAoX1NUUklOR19IKSAmJiBkZWZpbmVkIChfR05VX1NPVVJDRSkKKysjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorKyMgIGVsc2UKKysvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluCisrICAgWVlERVNULiAgKi8KKytzdGF0aWMgY2hhciAqCisrIyAgIGlmIGRlZmluZWQgKF9fU1REQ19fKSB8fCBkZWZpbmVkIChfX2NwbHVzcGx1cykKKyt5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKKysjICAgZWxzZQorK3l5c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQorKyAgICAgY2hhciAqeXlkZXN0OworKyAgICAgY29uc3QgY2hhciAqeXlzcmM7CisrIyAgIGVuZGlmCisreworKyAgcmVnaXN0ZXIgY2hhciAqeXlkID0geXlkZXN0OworKyAgcmVnaXN0ZXIgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisrCisrICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKysgICAgY29udGludWU7CisrCisrICByZXR1cm4geXlkIC0gMTsKKyt9CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrDAorKyNsaW5lIDMxNSAiL3Vzci9sb2NhbC9zaGFyZS9iaXNvbi9iaXNvbi5zaW1wbGUiCisrCisrCisrLyogVGhlIHVzZXIgY2FuIGRlZmluZSBZWVBBUlNFX1BBUkFNIGFzIHRoZSBuYW1lIG9mIGFuIGFyZ3VtZW50IHRvIGJlIHBhc3NlZAorKyAgIGludG8geXlwYXJzZS4gIFRoZSBhcmd1bWVudCBzaG91bGQgaGF2ZSB0eXBlIHZvaWQgKi4KKysgICBJdCBzaG91bGQgYWN0dWFsbHkgcG9pbnQgdG8gYW4gb2JqZWN0LgorKyAgIEdyYW1tYXIgYWN0aW9ucyBjYW4gYWNjZXNzIHRoZSB2YXJpYWJsZSBieSBjYXN0aW5nIGl0CisrICAgdG8gdGhlIHByb3BlciBwb2ludGVyIHR5cGUuICAqLworKworKyNpZmRlZiBZWVBBUlNFX1BBUkFNCisrIyBpZiBkZWZpbmVkIChfX1NURENfXykgfHwgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIHZvaWQgKllZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMCisrIyBlbHNlCisrIyAgZGVmaW5lIFlZUEFSU0VfUEFSQU1fQVJHIFlZUEFSU0VfUEFSQU0KKysjICBkZWZpbmUgWVlQQVJTRV9QQVJBTV9ERUNMIHZvaWQgKllZUEFSU0VfUEFSQU07CisrIyBlbmRpZgorKyNlbHNlIC8qICFZWVBBUlNFX1BBUkFNICovCisrIyBkZWZpbmUgWVlQQVJTRV9QQVJBTV9BUkcKKysjIGRlZmluZSBZWVBBUlNFX1BBUkFNX0RFQ0wKKysjZW5kaWYgLyogIVlZUEFSU0VfUEFSQU0gKi8KKysKKysvKiBQcmV2ZW50IHdhcm5pbmcgaWYgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisrI2lmZGVmIF9fR05VQ19fCisrIyBpZmRlZiBZWVBBUlNFX1BBUkFNCisraW50IHl5cGFyc2UgKHZvaWQgKik7CisrIyBlbHNlCisraW50IHl5cGFyc2UgKHZvaWQpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBZWV9ERUNMX1ZBUklBQkxFUyAtLSBkZXBlbmRpbmcgd2hldGhlciB3ZSB1c2UgYSBwdXJlIHBhcnNlciwKKysgICB2YXJpYWJsZXMgYXJlIGdsb2JhbCwgb3IgbG9jYWwgdG8gWVlQQVJTRS4gICovCisrCisrI2RlZmluZSBZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCQkJXAorKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8JCQkJXAorK2ludCB5eWNoYXI7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogVGhlIHNlbWFudGljIHZhbHVlIG9mIHRoZSBsb29rYWhlYWQgc3ltYm9sLiAqLwlcCisrWVlTVFlQRSB5eWx2YWw7CQkJCQkJXAorKwkJCQkJCQlcCisrLyogTnVtYmVyIG9mIHBhcnNlIGVycm9ycyBzbyBmYXIuICAqLwkJCVwKKytpbnQgeXluZXJyczsKKysKKysjaWYgWVlMU1BfTkVFREVECisrIyBkZWZpbmUgWVlfREVDTF9WQVJJQUJMRVMJCQlcCisrWVlfREVDTF9OT05fTFNQX1ZBUklBQkxFUwkJCVwKKysJCQkJCQlcCisrLyogTG9jYXRpb24gZGF0YSBmb3IgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLwlcCisrWVlMVFlQRSB5eWxsb2M7CisrI2Vsc2UKKysjIGRlZmluZSBZWV9ERUNMX1ZBUklBQkxFUwkJCVwKKytZWV9ERUNMX05PTl9MU1BfVkFSSUFCTEVTCisrI2VuZGlmCisrCisrCisrLyogSWYgbm9ucmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrCisrI2lmICFZWVBVUkUKKytZWV9ERUNMX1ZBUklBQkxFUworKyNlbmRpZiAgLyogIVlZUFVSRSAqLworKworK2ludAorK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU1fQVJHKQorKyAgICAgWVlQQVJTRV9QQVJBTV9ERUNMCisreworKyAgLyogSWYgcmVlbnRyYW50LCBnZW5lcmF0ZSB0aGUgdmFyaWFibGVzIGhlcmUuICovCisrI2lmIFlZUFVSRQorKyAgWVlfREVDTF9WQVJJQUJMRVMKKysjZW5kaWYgIC8qICFZWVBVUkUgKi8KKysKKysgIHJlZ2lzdGVyIGludCB5eXN0YXRlOworKyAgcmVnaXN0ZXIgaW50IHl5bjsKKysgIGludCB5eXJlc3VsdDsKKysgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworKyAgaW50IHl5ZXJyc3RhdHVzOworKyAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworKyAgaW50IHl5Y2hhcjEgPSAwOworKworKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKysgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMsCisrICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLAorKyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKysKKysgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVycywgdG8gYWxsb3cgeXlvdmVyZmxvdworKyAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisrCisrICAvKiBUaGUgc3RhdGUgc3RhY2suICovCisrICBzaG9ydAl5eXNzYVtZWUlOSVRERVBUSF07CisrICBzaG9ydCAqeXlzcyA9IHl5c3NhOworKyAgcmVnaXN0ZXIgc2hvcnQgKnl5c3NwOworKworKyAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKysgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworKyAgWVlTVFlQRSAqeXl2cyA9IHl5dnNhOworKyAgcmVnaXN0ZXIgWVlTVFlQRSAqeXl2c3A7CisrCisrI2lmIFlZTFNQX05FRURFRAorKyAgLyogVGhlIGxvY2F0aW9uIHN0YWNrLiAgKi8KKysgIFlZTFRZUEUgeXlsc2FbWVlJTklUREVQVEhdOworKyAgWVlMVFlQRSAqeXlscyA9IHl5bHNhOworKyAgWVlMVFlQRSAqeXlsc3A7CisrI2VuZGlmCisrCisrI2lmIFlZTFNQX05FRURFRAorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSwgeXlsc3AtLSkKKysjZWxzZQorKyMgZGVmaW5lIFlZUE9QU1RBQ0sgICAoeXl2c3AtLSwgeXlzc3AtLSkKKysjZW5kaWYKKysKKysgIFlZU0laRV9UIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7CisrCisrCisrICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKysgIFlZU1RZUEUgeXl2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgWVlMVFlQRSB5eWxvYzsKKysjZW5kaWYKKysKKysgIC8qIFdoZW4gcmVkdWNpbmcsIHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2VkCisrICAgICBydWxlLiAqLworKyAgaW50IHl5bGVuOworKworKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKKysKKysgIHl5c3RhdGUgPSAwOworKyAgeXllcnJzdGF0dXMgPSAwOworKyAgeXluZXJycyA9IDA7CisrICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKysKKysgIC8qIEluaXRpYWxpemUgc3RhY2sgcG9pbnRlcnMuCisrICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sKKysgICAgIHNvIHRoYXQgdGhleSBzdGF5IG9uIHRoZSBzYW1lIGxldmVsIGFzIHRoZSBzdGF0ZSBzdGFjay4KKysgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGluaXRpYWxpemVkLiAgKi8KKysKKysgIHl5c3NwID0geXlzczsKKysgIHl5dnNwID0geXl2czsKKysjaWYgWVlMU1BfTkVFREVECisrICB5eWxzcCA9IHl5bHM7CisrI2VuZGlmCisrICBnb3RvIHl5c2V0c3RhdGU7CisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrIHl5bmV3c3RhdGU6CisrICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiBzbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLgorKyAgICAgKi8KKysgIHl5c3NwKys7CisrCisrIHl5c2V0c3RhdGU6CisrICAqeXlzc3AgPSB5eXN0YXRlOworKworKyAgaWYgKHl5c3NwID49IHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEpCisrICAgIHsKKysgICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8KKysgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOworKworKyNpZmRlZiB5eW92ZXJmbG93CisrICAgICAgeworKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suIFVzZSBjb3BpZXMgb2YKKysJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworKwkgICBtZW1vcnkuICAqLworKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCisrCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gICovCisrIyBpZiBZWUxTUF9ORUVERUQKKysJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworKwkvKiBUaGlzIHVzZWQgdG8gYmUgYSBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsCisrCSAgIGJ1dCB0aGF0IG1pZ2h0IGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworKwl5eW92ZXJmbG93ICgicGFyc2VyIHN0YWNrIG92ZXJmbG93IiwKKysJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKysJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKKysJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKysJCSAgICAmeXlzdGFja3NpemUpOworKwl5eWxzID0geXlsczE7CisrIyBlbHNlCisrCXl5b3ZlcmZsb3cgKCJwYXJzZXIgc3RhY2sgb3ZlcmZsb3ciLAorKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisrIyBlbmRpZgorKwl5eXNzID0geXlzczE7CisrCXl5dnMgPSB5eXZzMTsKKysgICAgICB9CisrI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLworKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKysgICAgICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrIyBlbHNlCisrICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisrICAgICAgaWYgKHl5c3RhY2tzaXplID49IFlZTUFYREVQVEgpCisrCWdvdG8geXlvdmVyZmxvd2xhYjsKKysgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworKyAgICAgIGlmICh5eXN0YWNrc2l6ZSA+IFlZTUFYREVQVEgpCisrCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKysKKysgICAgICB7CisrCXNob3J0ICp5eXNzMSA9IHl5c3M7CisrCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKysJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworKwlpZiAoISB5eXB0cikKKysJICBnb3RvIHl5b3ZlcmZsb3dsYWI7CisrCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3MpOworKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKysjIGlmIFlZTFNQX05FRURFRAorKwlZWVNUQUNLX1JFTE9DQVRFICh5eWxzKTsKKysjIGVuZGlmCisrIyB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisrCWlmICh5eXNzMSAhPSB5eXNzYSkKKysJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKysgICAgICB9CisrIyBlbmRpZgorKyNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisrCisrICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsKKysgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworKyNpZiBZWUxTUF9ORUVERUQKKysgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOworKyNlbmRpZgorKworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKysJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworKworKyAgICAgIGlmICh5eXNzcCA+PSB5eXNzICsgeXlzdGFja3NpemUgLSAxKQorKwlZWUFCT1JUOworKyAgICB9CisrCisrICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOworKworKyAgZ290byB5eWJhY2t1cDsKKysKKysKKysvKi0tLS0tLS0tLS0tLgorK3wgeXliYWNrdXAuICB8CisrYC0tLS0tLS0tLS0tKi8KKyt5eWJhY2t1cDoKKysKKysvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgKi8KKysvKiBSZWFkIGEgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysvKiB5eXJlc3VtZTogKi8KKysKKysgIC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLworKworKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworKyAgaWYgKHl5biA9PSBZWUZMQUcpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKysKKysgIC8qIHl5Y2hhciBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRgorKyAgICAgb3IgYSB2YWxpZCB0b2tlbiBpbiBleHRlcm5hbCBmb3JtLiAgKi8KKysKKysgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKysgICAgeworKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworKyAgICAgIHl5Y2hhciA9IFlZTEVYOworKyAgICB9CisrCisrICAvKiBDb252ZXJ0IHRva2VuIHRvIGludGVybmFsIGZvcm0gKGluIHl5Y2hhcjEpIGZvciBpbmRleGluZyB0YWJsZXMgd2l0aCAqLworKworKyAgaWYgKHl5Y2hhciA8PSAwKQkJLyogVGhpcyBtZWFucyBlbmQgb2YgaW5wdXQuICovCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gMDsKKysgICAgICB5eWNoYXIgPSBZWUVPRjsJCS8qIERvbid0IGNhbGwgWVlMRVggYW55IG1vcmUgKi8KKysKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICB5eWNoYXIxID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisrCisrI2lmIFlZREVCVUcKKysgICAgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMKKysJd2hpY2ggYXJlIGRlZmluZWQgb25seSBpZiBgWVlERUJVRycgaXMgc2V0LiAgKi8KKysgICAgICBpZiAoeXlkZWJ1ZykKKysJeworKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiTmV4dCB0b2tlbiBpcyAlZCAoJXMiLAorKwkJICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pOworKwkgIC8qIEdpdmUgdGhlIGluZGl2aWR1YWwgcGFyc2VyIGEgd2F5IHRvIHByaW50IHRoZSBwcmVjaXNlCisrCSAgICAgbWVhbmluZyBvZiBhIHRva2VuLCBmb3IgZnVydGhlciBkZWJ1Z2dpbmcgaW5mby4gICovCisrIyBpZmRlZiBZWVBSSU5UCisrCSAgWVlQUklOVCAoc3RkZXJyLCB5eWNoYXIsIHl5bHZhbCk7CisrIyBlbmRpZgorKwkgIFlZRlBSSU5URiAoc3RkZXJyLCAiKVxuIik7CisrCX0KKysjZW5kaWYKKysgICAgfQorKworKyAgeXluICs9IHl5Y2hhcjE7CisrICBpZiAoeXluIDwgMCB8fCB5eW4gPiBZWUxBU1QgfHwgeXljaGVja1t5eW5dICE9IHl5Y2hhcjEpCisrICAgIGdvdG8geXlkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKworKyAgLyogeXluIGlzIHdoYXQgdG8gZG8gZm9yIHRoaXMgdG9rZW4gdHlwZSBpbiB0aGlzIHN0YXRlLgorKyAgICAgTmVnYXRpdmUgPT4gcmVkdWNlLCAteXluIGlzIHJ1bGUgbnVtYmVyLgorKyAgICAgUG9zaXRpdmUgPT4gc2hpZnQsIHl5biBpcyBuZXcgc3RhdGUuCisrICAgICAgIE5ldyBzdGF0ZSBpcyBmaW5hbCBzdGF0ZSA9PiBkb24ndCBib3RoZXIgdG8gc2hpZnQsCisrICAgICAgIGp1c3QgcmV0dXJuIHN1Y2Nlc3MuCisrICAgICAwLCBvciBtb3N0IG5lZ2F0aXZlIG51bWJlciA9PiBlcnJvci4gICovCisrCisrICBpZiAoeXluIDwgMCkKKysgICAgeworKyAgICAgIGlmICh5eW4gPT0gWVlGTEFHKQorKwlnb3RvIHl5ZXJybGFiOworKyAgICAgIHl5biA9IC15eW47CisrICAgICAgZ290byB5eXJlZHVjZTsKKysgICAgfQorKyAgZWxzZSBpZiAoeXluID09IDApCisrICAgIGdvdG8geXllcnJsYWI7CisrCisrICBpZiAoeXluID09IFlZRklOQUwpCisrICAgIFlZQUNDRVBUOworKworKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovCisrICBZWURQUklOVEYgKChzdGRlcnIsICJTaGlmdGluZyB0b2tlbiAlZCAoJXMpLCAiLAorKwkgICAgICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysKKysgIC8qIERpc2NhcmQgdGhlIHRva2VuIGJlaW5nIHNoaWZ0ZWQgdW5sZXNzIGl0IGlzIGVvZi4gICovCisrICBpZiAoeXljaGFyICE9IFlZRU9GKQorKyAgICB5eWNoYXIgPSBZWUVNUFRZOworKworKyAgKisreXl2c3AgPSB5eWx2YWw7CisrI2lmIFlZTFNQX05FRURFRAorKyAgKisreXlsc3AgPSB5eWxsb2M7CisrI2VuZGlmCisrCisrICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisrICAgICBzdGF0dXMuICAqLworKyAgaWYgKHl5ZXJyc3RhdHVzKQorKyAgICB5eWVycnN0YXR1cy0tOworKworKyAgeXlzdGF0ZSA9IHl5bjsKKysgIGdvdG8geXluZXdzdGF0ZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8CisrYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyt5eWRlZmF1bHQ6CisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gMCkKKysgICAgZ290byB5eWVycmxhYjsKKysgIGdvdG8geXlyZWR1Y2U7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlyZWR1Y2U6CisrICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworKyAgeXlsZW4gPSB5eXIyW3l5bl07CisrCisrICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKysgICAgIGAkJCA9ICQxJy4KKysKKysgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gdGhlIHNlbWFudGljIHZhbHVlIG9mCisrICAgICB0aGUgbG9va2FoZWFkIHRva2VuLiAgVGhpcyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisrICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorKyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCisrICAgICBHQ0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKysKKysjaWYgWVlMU1BfTkVFREVECisrICAvKiBTaW1pbGFybHkgZm9yIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgTGV0IHRoZSB1c2VyIHJ1biBhZGRpdGlvbmFsCisrICAgICBjb21tYW5kcyBpZiBmb3IgaW5zdGFuY2UgbG9jYXRpb25zIGFyZSByYW5nZXMuICAqLworKyAgeXlsb2MgPSB5eWxzcFsxLXl5bGVuXTsKKysgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5bHNwIC0geXlsZW4pLCB5eWxlbik7CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIC8qIFdlIGhhdmUgdG8ga2VlcCB0aGlzIGAjaWYgWVlERUJVRycsIHNpbmNlIHdlIHVzZSB2YXJpYWJsZXMgd2hpY2gKKysgICAgIGFyZSBkZWZpbmVkIG9ubHkgaWYgYFlZREVCVUcnIGlzIHNldC4gICovCisrICBpZiAoeXlkZWJ1ZykKKysgICAgeworKyAgICAgIGludCB5eWk7CisrCisrICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyB2aWEgcnVsZSAlZCAobGluZSAlZCksICIsCisrCQkgeXluLCB5eXJsaW5lW3l5bl0pOworKworKyAgICAgIC8qIFByaW50IHRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQsIGFuZCB0aGVpciByZXN1bHQuICAqLworKyAgICAgIGZvciAoeXlpID0geXlwcmhzW3l5bl07IHl5cmhzW3l5aV0gPiAwOyB5eWkrKykKKysJWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCB5eXRuYW1lW3l5cmhzW3l5aV1dKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAtPiAlc1xuIiwgeXl0bmFtZVt5eXIxW3l5bl1dKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgc3dpdGNoICh5eW4pIHsKKysKKytjYXNlIDE6CisrI2xpbmUgMTUxICJwbHVyYWwueSIKKyt7CisrCSAgICBpZiAoeXl2c3BbMF0uZXhwID09IE5VTEwpCisrCSAgICAgIFlZQUJPUlQ7CisrCSAgICAoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPnJlcyA9IHl5dnNwWzBdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMjoKKysjbGluZSAxNTkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMyAocW1vcCwgeXl2c3BbLTRdLmV4cCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgMzoKKysjbGluZSAxNjMgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAobG9yLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA0OgorKyNsaW5lIDE2NyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yIChsYW5kLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA1OgorKyNsaW5lIDE3MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDY6CisrI2xpbmUgMTc1ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzIgKHl5dnNwWy0xXS5vcCwgeXl2c3BbLTJdLmV4cCwgeXl2c3BbMF0uZXhwKTsKKysJICB9CisrICAgIGJyZWFrOworK2Nhc2UgNzoKKysjbGluZSAxNzkgInBsdXJhbC55IgorK3sKKysJICAgIHl5dmFsLmV4cCA9IG5ld19leHBfMiAoeXl2c3BbLTFdLm9wLCB5eXZzcFstMl0uZXhwLCB5eXZzcFswXS5leHApOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSA4OgorKyNsaW5lIDE4MyAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8yICh5eXZzcFstMV0ub3AsIHl5dnNwWy0yXS5leHAsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDk6CisrI2xpbmUgMTg3ICJwbHVyYWwueSIKKyt7CisrCSAgICB5eXZhbC5leHAgPSBuZXdfZXhwXzEgKGxub3QsIHl5dnNwWzBdLmV4cCk7CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEwOgorKyNsaW5lIDE5MSAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0gbmV3X2V4cF8wICh2YXIpOworKwkgIH0KKysgICAgYnJlYWs7CisrY2FzZSAxMToKKysjbGluZSAxOTUgInBsdXJhbC55IgorK3sKKysJICAgIGlmICgoeXl2YWwuZXhwID0gbmV3X2V4cF8wIChudW0pKSAhPSBOVUxMKQorKwkgICAgICB5eXZhbC5leHAtPnZhbC5udW0gPSB5eXZzcFswXS5udW07CisrCSAgfQorKyAgICBicmVhazsKKytjYXNlIDEyOgorKyNsaW5lIDIwMCAicGx1cmFsLnkiCisreworKwkgICAgeXl2YWwuZXhwID0geXl2c3BbLTFdLmV4cDsKKysJICB9CisrICAgIGJyZWFrOworK30KKysKKysjbGluZSA3MDUgIi91c3IvbG9jYWwvc2hhcmUvYmlzb24vYmlzb24uc2ltcGxlIgorKworKwwKKysgIHl5dnNwIC09IHl5bGVuOworKyAgeXlzc3AgLT0geXlsZW47CisrI2lmIFlZTFNQX05FRURFRAorKyAgeXlsc3AgLT0geXlsZW47CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAic3RhdGUgc3RhY2sgbm93Iik7CisrICAgICAgd2hpbGUgKHl5c3NwMSAhPSB5eXNzcCkKKysJWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCAqKyt5eXNzcDEpOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKKysgICAgfQorKyNlbmRpZgorKworKyAgKisreXl2c3AgPSB5eXZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bG9jOworKyNlbmRpZgorKworKyAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKysgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworKworKyAgeXluID0geXlyMVt5eW5dOworKworKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVEJBU0VdICsgKnl5c3NwOworKyAgaWYgKHl5c3RhdGUgPj0gMCAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKysgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07CisrICBlbHNlCisrICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVEJBU0VdOworKworKyAgZ290byB5eW5ld3N0YXRlOworKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJybGFiOgorKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisrICBpZiAoIXl5ZXJyc3RhdHVzKQorKyAgICB7CisrICAgICAgKyt5eW5lcnJzOworKworKyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKysgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisrCisrICAgICAgaWYgKHl5biA+IFlZRkxBRyAmJiB5eW4gPCBZWUxBU1QpCisrCXsKKysJICBZWVNJWkVfVCB5eXNpemUgPSAwOworKwkgIGNoYXIgKnl5bXNnOworKwkgIGludCB5eXgsIHl5Y291bnQ7CisrCisrCSAgeXljb3VudCA9IDA7CisrCSAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorKwkgICAgIFlZQ0hFQ0suICAqLworKwkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkgICAgICAgeXl4IDwgKGludCkgKHNpemVvZiAoeXl0bmFtZSkgLyBzaXplb2YgKGNoYXIgKikpOyB5eXgrKykKKysJICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4KQorKwkgICAgICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbeXl4XSkgKyAxNSwgeXljb3VudCsrOworKwkgIHl5c2l6ZSArPSB5eXN0cmxlbiAoInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpICsgMTsKKysJICB5eXNpemUgKz0geXlzdHJsZW4gKHl5dG5hbWVbWVlUUkFOU0xBVEUgKHl5Y2hhcildKTsKKysJICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5c2l6ZSk7CisrCSAgaWYgKHl5bXNnICE9IDApCisrCSAgICB7CisrCSAgICAgIGNoYXIgKnl5cCA9IHl5c3RwY3B5ICh5eW1zZywgInBhcnNlIGVycm9yLCB1bmV4cGVjdGVkICIpOworKwkgICAgICB5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXRuYW1lW1lZVFJBTlNMQVRFICh5eWNoYXIpXSk7CisrCisrCSAgICAgIGlmICh5eWNvdW50IDwgNSkKKysJCXsKKysJCSAgeXljb3VudCA9IDA7CisrCQkgIGZvciAoeXl4ID0geXluIDwgMCA/IC15eW4gOiAwOworKwkJICAgICAgIHl5eCA8IChpbnQpIChzaXplb2YgKHl5dG5hbWUpIC8gc2l6ZW9mIChjaGFyICopKTsKKysJCSAgICAgICB5eXgrKykKKysJCSAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCkKKysJCSAgICAgIHsKKysJCQljb25zdCBjaGFyICp5eXEgPSAhIHl5Y291bnQgPyAiLCBleHBlY3RpbmcgIiA6ICIgb3IgIjsKKysJCQl5eXAgPSB5eXN0cGNweSAoeXlwLCB5eXEpOworKwkJCXl5cCA9IHl5c3RwY3B5ICh5eXAsIHl5dG5hbWVbeXl4XSk7CisrCQkJeXljb3VudCsrOworKwkJICAgICAgfQorKwkJfQorKwkgICAgICB5eWVycm9yICh5eW1zZyk7CisrCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHl5ZXJyb3IgKCJwYXJzZSBlcnJvcjsgYWxzbyB2aXJ0dWFsIG1lbW9yeSBleGhhdXN0ZWQiKTsKKysJfQorKyAgICAgIGVsc2UKKysjZW5kaWYgLyogZGVmaW5lZCAoWVlFUlJPUl9WRVJCT1NFKSAqLworKwl5eWVycm9yICgicGFyc2UgZXJyb3IiKTsKKysgICAgfQorKyAgZ290byB5eWVycmxhYjE7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KKyt8IHl5ZXJybGFiMSAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBhbiBhY3Rpb24gfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJsYWIxOgorKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisrICAgIHsKKysgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCisrCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisrCisrICAgICAgLyogcmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0ICovCisrICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKysJWVlBQk9SVDsKKysgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJEaXNjYXJkaW5nIHRva2VuICVkICglcykuXG4iLAorKwkJICB5eWNoYXIsIHl5dG5hbWVbeXljaGFyMV0pKTsKKysgICAgICB5eWNoYXIgPSBZWUVNUFRZOworKyAgICB9CisrCisrICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKKysgICAgIHRva2VuLiAgKi8KKysKKysgIHl5ZXJyc3RhdHVzID0gMzsJCS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcyAqLworKworKyAgZ290byB5eWVycmhhbmRsZTsKKysKKysKKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWVycmRlZmF1bHQgLS0gY3VycmVudCBzdGF0ZSBkb2VzIG5vdCBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciB0aGUgfAorK3wgZXJyb3IgdG9rZW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXllcnJkZWZhdWx0OgorKyNpZiAwCisrICAvKiBUaGlzIGlzIHdyb25nOyBvbmx5IHN0YXRlcyB0aGF0IGV4cGxpY2l0bHkgd2FudCBlcnJvciB0b2tlbnMKKysgICAgIHNob3VsZCBzaGlmdCB0aGVtLiAgKi8KKysKKysgIC8qIElmIGl0cyBkZWZhdWx0IGlzIHRvIGFjY2VwdCBhbnkgdG9rZW4sIG9rLiAgT3RoZXJ3aXNlIHBvcCBpdC4gICovCisrICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4pCisrICAgIGdvdG8geXlkZWZhdWx0OworKyNlbmRpZgorKworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJwb3AgLS0gcG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgfAorK3wgZXJyb3IgdG9rZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5ZXJycG9wOgorKyAgaWYgKHl5c3NwID09IHl5c3MpCisrICAgIFlZQUJPUlQ7CisrICB5eXZzcC0tOworKyAgeXlzdGF0ZSA9ICotLXl5c3NwOworKyNpZiBZWUxTUF9ORUVERUQKKysgIHl5bHNwLS07CisrI2VuZGlmCisrCisrI2lmIFlZREVCVUcKKysgIGlmICh5eWRlYnVnKQorKyAgICB7CisrICAgICAgc2hvcnQgKnl5c3NwMSA9IHl5c3MgLSAxOworKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiRXJyb3I6IHN0YXRlIHN0YWNrIG5vdyIpOworKyAgICAgIHdoaWxlICh5eXNzcDEgIT0geXlzc3ApCisrCVlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKisreXlzc3AxKTsKKysgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CisrICAgIH0KKysjZW5kaWYKKysKKysvKi0tLS0tLS0tLS0tLS0tLgorK3wgeXllcnJoYW5kbGUuICB8CisrYC0tLS0tLS0tLS0tLS0tKi8KKyt5eWVycmhhbmRsZToKKysgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKysgIGlmICh5eW4gPT0gWVlGTEFHKQorKyAgICBnb3RvIHl5ZXJyZGVmYXVsdDsKKysKKysgIHl5biArPSBZWVRFUlJPUjsKKysgIGlmICh5eW4gPCAwIHx8IHl5biA+IFlZTEFTVCB8fCB5eWNoZWNrW3l5bl0gIT0gWVlURVJST1IpCisrICAgIGdvdG8geXllcnJkZWZhdWx0OworKworKyAgeXluID0geXl0YWJsZVt5eW5dOworKyAgaWYgKHl5biA8IDApCisrICAgIHsKKysgICAgICBpZiAoeXluID09IFlZRkxBRykKKysJZ290byB5eWVycnBvcDsKKysgICAgICB5eW4gPSAteXluOworKyAgICAgIGdvdG8geXlyZWR1Y2U7CisrICAgIH0KKysgIGVsc2UgaWYgKHl5biA9PSAwKQorKyAgICBnb3RvIHl5ZXJycG9wOworKworKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorKyAgICBZWUFDQ0VQVDsKKysKKysgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlNoaWZ0aW5nIGVycm9yIHRva2VuLCAiKSk7CisrCisrICAqKyt5eXZzcCA9IHl5bHZhbDsKKysjaWYgWVlMU1BfTkVFREVECisrICAqKyt5eWxzcCA9IHl5bGxvYzsKKysjZW5kaWYKKysKKysgIHl5c3RhdGUgPSB5eW47CisrICBnb3RvIHl5bmV3c3RhdGU7CisrCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlhY2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisreXlhY2NlcHRsYWI6CisrICB5eXJlc3VsdCA9IDA7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCisrfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKKytgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5YWJvcnRsYWI6CisrICB5eXJlc3VsdCA9IDE7CisrICBnb3RvIHl5cmV0dXJuOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorK3wgeXlvdmVyZmxvd2FiIC0tIHBhcnNlciBvdmVyZmxvdyBjb21lcyBoZXJlLiAgfAorK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK3l5b3ZlcmZsb3dsYWI6CisrICB5eWVycm9yICgicGFyc2VyIHN0YWNrIG92ZXJmbG93Iik7CisrICB5eXJlc3VsdCA9IDI7CisrICAvKiBGYWxsIHRocm91Z2guICAqLworKworK3l5cmV0dXJuOgorKyNpZm5kZWYgeXlvdmVyZmxvdworKyAgaWYgKHl5c3MgIT0geXlzc2EpCisrICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisrI2VuZGlmCisrICByZXR1cm4geXlyZXN1bHQ7CisrfQorKyNsaW5lIDIwNSAicGx1cmFsLnkiCisrCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwtZXhwLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcGx1cmFsLWV4cC5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTc4NzE0MTkyIC0wNDAwCitAQCAtMCwwICsxLDE1NCBAQAorKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrI2lmIChkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIF9fQVBQTEVfQ0NfXykgXAorKyAgICB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKysKKysvKiBUaGVzZSBzdHJ1Y3RzIGFyZSB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiBmb3IgdGhlIGdlcm1hbmljIHBsdXJhbAorKyAgIGZvcm0gZGV0ZXJtaW5hdGlvbi4gIEl0IHJlcHJlc2VudHMgdGhlIGV4cHJlc3Npb24gICJuICE9IDEiLiAgKi8KKytzdGF0aWMgY29uc3Qgc3RydWN0IGV4cHJlc3Npb24gcGx2YXIgPQorK3sKKysgIC5uYXJncyA9IDAsCisrICAub3BlcmF0aW9uID0gdmFyLAorK307Cisrc3RhdGljIGNvbnN0IHN0cnVjdCBleHByZXNzaW9uIHBsb25lID0KKyt7CisrICAubmFyZ3MgPSAwLAorKyAgLm9wZXJhdGlvbiA9IG51bSwKKysgIC52YWwgPQorKyAgeworKyAgICAubnVtID0gMQorKyAgfQorK307Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMID0KKyt7CisrICAubmFyZ3MgPSAyLAorKyAgLm9wZXJhdGlvbiA9IG5vdF9lcXVhbCwKKysgIC52YWwgPQorKyAgeworKyAgICAuYXJncyA9CisrICAgIHsKKysgICAgICBbMF0gPSAoc3RydWN0IGV4cHJlc3Npb24gKikgJnBsdmFyLAorKyAgICAgIFsxXSA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSAmcGxvbmUKKysgICAgfQorKyAgfQorK307CisrCisrIyBkZWZpbmUgSU5JVF9HRVJNQU5JQ19QTFVSQUwoKQorKworKyNlbHNlCisrCisrLyogRm9yIGNvbXBpbGVycyB3aXRob3V0IHN1cHBvcnQgZm9yIElTTyBDIDk5IHN0cnVjdC91bmlvbiBpbml0aWFsaXplcnM6CisrICAgSW5pdGlhbGl6YXRpb24gYXQgcnVuLXRpbWUuICAqLworKworK3N0YXRpYyBzdHJ1Y3QgZXhwcmVzc2lvbiBwbHZhcjsKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gcGxvbmU7Cisrc3RydWN0IGV4cHJlc3Npb24gR0VSTUFOSUNfUExVUkFMOworKworK3N0YXRpYyB2b2lkCisraW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKyt7CisrICBpZiAocGxvbmUudmFsLm51bSA9PSAwKQorKyAgICB7CisrICAgICAgcGx2YXIubmFyZ3MgPSAwOworKyAgICAgIHBsdmFyLm9wZXJhdGlvbiA9IHZhcjsKKysKKysgICAgICBwbG9uZS5uYXJncyA9IDA7CisrICAgICAgcGxvbmUub3BlcmF0aW9uID0gbnVtOworKyAgICAgIHBsb25lLnZhbC5udW0gPSAxOworKworKyAgICAgIEdFUk1BTklDX1BMVVJBTC5uYXJncyA9IDI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLm9wZXJhdGlvbiA9IG5vdF9lcXVhbDsKKysgICAgICBHRVJNQU5JQ19QTFVSQUwudmFsLmFyZ3NbMF0gPSAmcGx2YXI7CisrICAgICAgR0VSTUFOSUNfUExVUkFMLnZhbC5hcmdzWzFdID0gJnBsb25lOworKyAgICB9CisrfQorKworKyMgZGVmaW5lIElOSVRfR0VSTUFOSUNfUExVUkFMKCkgaW5pdF9nZXJtYW5pY19wbHVyYWwgKCkKKysKKysjZW5kaWYKKysKKyt2b2lkCisraW50ZXJuYWxfZnVuY3Rpb24KKytFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksIHN0cnVjdCBleHByZXNzaW9uICoqcGx1cmFscCwKKysJCQkgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorK3sKKysgIGlmIChudWxsZW50cnkgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnBsdXJhbDsKKysgICAgICBjb25zdCBjaGFyICpucGx1cmFsczsKKysKKysgICAgICBwbHVyYWwgPSBzdHJzdHIgKG51bGxlbnRyeSwgInBsdXJhbD0iKTsKKysgICAgICBucGx1cmFscyA9IHN0cnN0ciAobnVsbGVudHJ5LCAibnBsdXJhbHM9Iik7CisrICAgICAgaWYgKHBsdXJhbCA9PSBOVUxMIHx8IG5wbHVyYWxzID09IE5VTEwpCisrCWdvdG8gbm9fcGx1cmFsOworKyAgICAgIGVsc2UKKysJeworKwkgIGNoYXIgKmVuZHA7CisrCSAgdW5zaWduZWQgbG9uZyBpbnQgbjsKKysJICBzdHJ1Y3QgcGFyc2VfYXJncyBhcmdzOworKworKwkgIC8qIEZpcnN0IGdldCB0aGUgbnVtYmVyLiAgKi8KKysJICBucGx1cmFscyArPSA5OworKwkgIHdoaWxlICgqbnBsdXJhbHMgIT0gJ1wwJyAmJiBpc3NwYWNlICgodW5zaWduZWQgY2hhcikgKm5wbHVyYWxzKSkKKysJICAgICsrbnBsdXJhbHM7CisrCSAgaWYgKCEoKm5wbHVyYWxzID49ICcwJyAmJiAqbnBsdXJhbHMgPD0gJzknKSkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKyNpZiBkZWZpbmVkIEhBVkVfU1RSVE9VTCB8fCBkZWZpbmVkIF9MSUJDCisrCSAgbiA9IHN0cnRvdWwgKG5wbHVyYWxzLCAmZW5kcCwgMTApOworKyNlbHNlCisrCSAgZm9yIChlbmRwID0gbnBsdXJhbHMsIG4gPSAwOyAqZW5kcCA+PSAnMCcgJiYgKmVuZHAgPD0gJzknOyBlbmRwKyspCisrCSAgICBuID0gbiAqIDEwICsgKCplbmRwIC0gJzAnKTsKKysjZW5kaWYKKysJICBpZiAobnBsdXJhbHMgPT0gZW5kcCkKKysJICAgIGdvdG8gbm9fcGx1cmFsOworKwkgICpucGx1cmFsc3AgPSBuOworKworKwkgIC8qIER1ZSB0byB0aGUgcmVzdHJpY3Rpb25zIGJpc29uIGltcG9zZXMgb250byB0aGUgaW50ZXJmYWNlIG9mIHRoZQorKwkgICAgIHNjYW5uZXIgZnVuY3Rpb24gd2UgaGF2ZSB0byBwdXQgdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIHJlc3VsdAorKwkgICAgIHBhc3NlZCB1cCBmcm9tIHRoZSBwYXJzZXIgaW50byB0aGUgc2FtZSBzdHJ1Y3R1cmUgd2hpY2ggYWRkcmVzcworKwkgICAgIGlzIHBhc3NlZCBkb3duIHRvIHRoZSBwYXJzZXIuICAqLworKwkgIHBsdXJhbCArPSA3OworKwkgIGFyZ3MuY3AgPSBwbHVyYWw7CisrCSAgaWYgKFBMVVJBTF9QQVJTRSAoJmFyZ3MpICE9IDApCisrCSAgICBnb3RvIG5vX3BsdXJhbDsKKysJICAqcGx1cmFscCA9IGFyZ3MucmVzOworKwl9CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIC8qIEJ5IGRlZmF1bHQgd2UgYXJlIHVzaW5nIHRoZSBHZXJtYW5pYyBmb3JtOiBzaW5ndWxhciBmb3JtIG9ubHkKKysgICAgICAgICBmb3IgYG9uZScsIHRoZSBwbHVyYWwgZm9ybSBvdGhlcndpc2UuICBZZXMsIHRoaXMgaXMgYWxzbyB3aGF0CisrICAgICAgICAgRW5nbGlzaCBpcyB1c2luZyBzaW5jZSBFbmdsaXNoIGlzIGEgR2VybWFuaWMgbGFuZ3VhZ2UuICAqLworKyAgICBub19wbHVyYWw6CisrICAgICAgSU5JVF9HRVJNQU5JQ19QTFVSQUwgKCk7CisrICAgICAgKnBsdXJhbHAgPSAmR0VSTUFOSUNfUExVUkFMOworKyAgICAgICpucGx1cmFsc3AgPSAyOworKyAgICB9CisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3BsdXJhbC1leHAuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwtZXhwLmgJMjAwNC0wOS0xMiAxNDo0MDozNC41ODQ3MTMyODAgLTA0MDAKK0BAIC0wLDAgKzEsMTE4IEBACisrLyogRXhwcmVzc2lvbiBwYXJzaW5nIGFuZCBldmFsdWF0aW9uIGZvciBwbHVyYWwgZm9ybSBzZWxlY3Rpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMjAwMC4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUExVUkFMX0VYUF9ICisrI2RlZmluZSBfUExVUkFMX0VYUF9ICisrCisrI2lmbmRlZiBpbnRlcm5hbF9mdW5jdGlvbgorKyMgZGVmaW5lIGludGVybmFsX2Z1bmN0aW9uCisrI2VuZGlmCisrCisrI2lmbmRlZiBhdHRyaWJ1dGVfaGlkZGVuCisrIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorKyNlbmRpZgorKworKworKy8qIFRoaXMgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleHByZXNzaW9ucyB0byBkZXRlcm1pbmUgdGhlCisrICAgcGx1cmFsIGZvcm0uICAqLworK3N0cnVjdCBleHByZXNzaW9uCisreworKyAgaW50IG5hcmdzOwkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMuICAqLworKyAgZW51bSBvcGVyYXRvcgorKyAgeworKyAgICAvKiBXaXRob3V0IGFyZ3VtZW50czogICovCisrICAgIHZhciwJCQkvKiBUaGUgdmFyaWFibGUgIm4iLiAgKi8KKysgICAgbnVtLAkJCS8qIERlY2ltYWwgbnVtYmVyLiAgKi8KKysgICAgLyogVW5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgbG5vdCwJCQkvKiBMb2dpY2FsIE5PVC4gICovCisrICAgIC8qIEJpbmFyeSBvcGVyYXRvcnM6ICAqLworKyAgICBtdWx0LAkJCS8qIE11bHRpcGxpY2F0aW9uLiAgKi8KKysgICAgZGl2aWRlLAkJCS8qIERpdmlzaW9uLiAgKi8KKysgICAgbW9kdWxlLAkJCS8qIE1vZHVsbyBvcGVyYXRpb24uICAqLworKyAgICBwbHVzLAkJCS8qIEFkZGl0aW9uLiAgKi8KKysgICAgbWludXMsCQkJLyogU3VidHJhY3Rpb24uICAqLworKyAgICBsZXNzX3RoYW4sCQkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfdGhhbiwJCS8qIENvbXBhcmlzb24uICAqLworKyAgICBsZXNzX29yX2VxdWFsLAkJLyogQ29tcGFyaXNvbi4gICovCisrICAgIGdyZWF0ZXJfb3JfZXF1YWwsCQkvKiBDb21wYXJpc29uLiAgKi8KKysgICAgZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgZXF1YWxpdHkuICAqLworKyAgICBub3RfZXF1YWwsCQkJLyogQ29tcGFyaXNvbiBmb3IgaW5lcXVhbGl0eS4gICovCisrICAgIGxhbmQsCQkJLyogTG9naWNhbCBBTkQuICAqLworKyAgICBsb3IsCQkJLyogTG9naWNhbCBPUi4gICovCisrICAgIC8qIFRlcm5hcnkgb3BlcmF0b3JzOiAgKi8KKysgICAgcW1vcAkJCS8qIFF1ZXN0aW9uIG1hcmsgb3BlcmF0b3IuICAqLworKyAgfSBvcGVyYXRpb247CisrICB1bmlvbgorKyAgeworKyAgICB1bnNpZ25lZCBsb25nIGludCBudW07CS8qIE51bWJlciB2YWx1ZSBmb3IgYG51bScuICAqLworKyAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1szXTsJLyogVXAgdG8gdGhyZWUgYXJndW1lbnRzLiAgKi8KKysgIH0gdmFsOworK307CisrCisrLyogVGhpcyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgcGFyc2VyIGFuZCBnZXQKKysgICB0aGUgcmVzdWx0IGluIGEgdGhyZWFkLXNhZmUgd2F5LiAgKi8KKytzdHJ1Y3QgcGFyc2VfYXJncworK3sKKysgIGNvbnN0IGNoYXIgKmNwOworKyAgc3RydWN0IGV4cHJlc3Npb24gKnJlczsKKyt9OworKworKworKy8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoaXMgc291cmNlIGNvZGUgaXMgdXNlZAorKyAgIDEuIGluIHRoZSBHTlUgQyBMaWJyYXJ5IGxpYnJhcnksCisrICAgMi4gaW4gdGhlIEdOVSBsaWJpbnRsIGxpYnJhcnksCisrICAgMy4gaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLgorKyAgIFRoZSBmdW5jdGlvbiBuYW1lcyBpbiBlYWNoIHNpdHVhdGlvbiBtdXN0IGJlIGRpZmZlcmVudCwgdG8gYWxsb3cgZm9yCisrICAgYmluYXJ5IGluY29tcGF0aWJsZSBjaGFuZ2VzIGluICdzdHJ1Y3QgZXhwcmVzc2lvbicuICBGdXJ0aGVybW9yZSwKKysgICAxLiBpbiB0aGUgR05VIEMgTGlicmFyeSBsaWJyYXJ5LCB0aGUgbmFtZXMgaGF2ZSBhIF9fIHByZWZpeCwKKysgICAyLiszLiBpbiB0aGUgR05VIGxpYmludGwgbGlicmFyeSBhbmQgaW4gdGhlIEdOVSBnZXR0ZXh0IHRvb2xzLCB0aGUgbmFtZXMKKysgICAgICAgICBtdXN0IGZvbGxvdyBBTlNJIEMgYW5kIG5vdCBzdGFydCB3aXRoIF9fLgorKyAgIFNvIHdlIGhhdmUgdG8gZGlzdGluZ3Vpc2ggdGhlIHRocmVlIGNhc2VzLiAgKi8KKysjaWZkZWYgX0xJQkMKKysjIGRlZmluZSBGUkVFX0VYUFJFU1NJT04gX19nZXR0ZXh0X2ZyZWVfZXhwCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIF9fZ2V0dGV4dHBhcnNlCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIF9fZ2V0dGV4dF9nZXJtYW5pY19wbHVyYWwKKysjIGRlZmluZSBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIF9fZ2V0dGV4dF9leHRyYWN0X3BsdXJhbAorKyNlbGlmIGRlZmluZWQgKElOX0xJQklOVEwpCisrIyBkZWZpbmUgRlJFRV9FWFBSRVNTSU9OIGxpYmludGxfZ2V0dGV4dF9mcmVlX2V4cAorKyMgZGVmaW5lIFBMVVJBTF9QQVJTRSBsaWJpbnRsX2dldHRleHRwYXJzZQorKyMgZGVmaW5lIEdFUk1BTklDX1BMVVJBTCBsaWJpbnRsX2dldHRleHRfZ2VybWFuaWNfcGx1cmFsCisrIyBkZWZpbmUgRVhUUkFDVF9QTFVSQUxfRVhQUkVTU0lPTiBsaWJpbnRsX2dldHRleHRfZXh0cmFjdF9wbHVyYWwKKysjZWxzZQorKyMgZGVmaW5lIEZSRUVfRVhQUkVTU0lPTiBmcmVlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgUExVUkFMX1BBUlNFIHBhcnNlX3BsdXJhbF9leHByZXNzaW9uCisrIyBkZWZpbmUgR0VSTUFOSUNfUExVUkFMIGdlcm1hbmljX3BsdXJhbAorKyMgZGVmaW5lIEVYVFJBQ1RfUExVUkFMX0VYUFJFU1NJT04gZXh0cmFjdF9wbHVyYWxfZXhwcmVzc2lvbgorKyNlbmRpZgorKworK2V4dGVybiB2b2lkIEZSRUVfRVhQUkVTU0lPTiAoc3RydWN0IGV4cHJlc3Npb24gKmV4cCkKKysgICAgIGludGVybmFsX2Z1bmN0aW9uOworK2V4dGVybiBpbnQgUExVUkFMX1BBUlNFICh2b2lkICphcmcpOworK2V4dGVybiBzdHJ1Y3QgZXhwcmVzc2lvbiBHRVJNQU5JQ19QTFVSQUwgYXR0cmlidXRlX2hpZGRlbjsKKytleHRlcm4gdm9pZCBFWFRSQUNUX1BMVVJBTF9FWFBSRVNTSU9OIChjb25zdCBjaGFyICpudWxsZW50cnksCisrCQkJCSAgICAgICBzdHJ1Y3QgZXhwcmVzc2lvbiAqKnBsdXJhbHAsCisrCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGludCAqbnBsdXJhbHNwKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrI2lmICFkZWZpbmVkIChfTElCQykgJiYgIWRlZmluZWQgKElOX0xJQklOVEwpCisrZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHBsdXJhbF9ldmFsIChzdHJ1Y3QgZXhwcmVzc2lvbiAqcGV4cCwKKysJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnQgbik7CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9QTFVSQUxfRVhQX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbHVyYWwueQkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wbHVyYWwueQkyMDA0LTA5LTEyIDE0OjQwOjM0LjU4OTcxMjUyMCAtMDQwMAorQEAgLTAsMCArMSwzODEgQEAKKysleworKy8qIEV4cHJlc3Npb24gcGFyc2luZyBmb3IgcGx1cmFsIGZvcm0gc2VsZWN0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDIwMDAuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRoZSBiaXNvbiBnZW5lcmF0ZWQgcGFyc2VyIHVzZXMgYWxsb2NhLiAgQUlYIDMgZm9yY2VzIHVzIHRvIHB1dCB0aGlzCisrICAgZGVjbGFyYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gIFRoZSBkZWNsYXJhdGlvbiBpbiBiaXNvbidzCisrICAgc2tlbGV0b24gZmlsZSBjb21lcyB0b28gbGF0ZS4gIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+CisrICAgYmVjYXVzZSA8Y29uZmlnLmg+IG1heSBpbmNsdWRlIGFyYml0cmFyeSBzeXN0ZW0gaGVhZGVycy4gICovCisrI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dOVUNfXworKyAjcHJhZ21hIGFsbG9jYQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJwbHVyYWwtZXhwLmgiCisrCisrLyogVGhlIG1haW4gZnVuY3Rpb24gZ2VuZXJhdGVkIGJ5IHRoZSBwYXJzZXIgaXMgY2FsbGVkIF9fZ2V0dGV4dHBhcnNlLAorKyAgIGJ1dCB3ZSB3YW50IGl0IHRvIGJlIGNhbGxlZCBQTFVSQUxfUEFSU0UuICAqLworKyNpZm5kZWYgX0xJQkMKKysjIGRlZmluZSBfX2dldHRleHRwYXJzZSBQTFVSQUxfUEFSU0UKKysjZW5kaWYKKysKKysjZGVmaW5lIFlZTEVYX1BBUkFNCSYoKHN0cnVjdCBwYXJzZV9hcmdzICopIGFyZyktPmNwCisrI2RlZmluZSBZWVBBUlNFX1BBUkFNCWFyZworKyV9CisrJXB1cmVfcGFyc2VyCisrJWV4cGVjdCA3CisrCisrJXVuaW9uIHsKKysgIHVuc2lnbmVkIGxvbmcgaW50IG51bTsKKysgIGVudW0gb3BlcmF0b3Igb3A7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwOworK30KKysKKysleworKy8qIFByb3RvdHlwZXMgZm9yIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIGludCB5eWxleCAoWVlTVFlQRSAqbHZhbCwgY29uc3QgY2hhciAqKnBleHApOworK3N0YXRpYyB2b2lkIHl5ZXJyb3IgKGNvbnN0IGNoYXIgKnN0cik7CisrCisrLyogQWxsb2NhdGlvbiBvZiBleHByZXNzaW9ucy4gICovCisrCisrc3RhdGljIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwIChpbnQgbmFyZ3MsIGVudW0gb3BlcmF0b3Igb3AsIHN0cnVjdCBleHByZXNzaW9uICogY29uc3QgKmFyZ3MpCisreworKyAgaW50IGk7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqbmV3cDsKKysKKysgIC8qIElmIGFueSBvZiB0aGUgYXJndW1lbnQgY291bGQgbm90IGJlIG1hbGxvYydlZCwganVzdCByZXR1cm4gTlVMTC4gICovCisrICBmb3IgKGkgPSBuYXJncyAtIDE7IGkgPj0gMDsgaS0tKQorKyAgICBpZiAoYXJnc1tpXSA9PSBOVUxMKQorKyAgICAgIGdvdG8gZmFpbDsKKysKKysgIC8qIEFsbG9jYXRlIGEgbmV3IGV4cHJlc3Npb24uICAqLworKyAgbmV3cCA9IChzdHJ1Y3QgZXhwcmVzc2lvbiAqKSBtYWxsb2MgKHNpemVvZiAoKm5ld3ApKTsKKysgIGlmIChuZXdwICE9IE5VTEwpCisrICAgIHsKKysgICAgICBuZXdwLT5uYXJncyA9IG5hcmdzOworKyAgICAgIG5ld3AtPm9wZXJhdGlvbiA9IG9wOworKyAgICAgIGZvciAoaSA9IG5hcmdzIC0gMTsgaSA+PSAwOyBpLS0pCisrCW5ld3AtPnZhbC5hcmdzW2ldID0gYXJnc1tpXTsKKysgICAgICByZXR1cm4gbmV3cDsKKysgICAgfQorKworKyBmYWlsOgorKyAgZm9yIChpID0gbmFyZ3MgLSAxOyBpID49IDA7IGktLSkKKysgICAgRlJFRV9FWFBSRVNTSU9OIChhcmdzW2ldKTsKKysKKysgIHJldHVybiBOVUxMOworK30KKysKKytzdGF0aWMgaW5saW5lIHN0cnVjdCBleHByZXNzaW9uICoKKytuZXdfZXhwXzAgKGVudW0gb3BlcmF0b3Igb3ApCisreworKyAgcmV0dXJuIG5ld19leHAgKDAsIG9wLCBOVUxMKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8xIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqcmlnaHQpCisreworKyAgc3RydWN0IGV4cHJlc3Npb24gKmFyZ3NbMV07CisrCisrICBhcmdzWzBdID0gcmlnaHQ7CisrICByZXR1cm4gbmV3X2V4cCAoMSwgb3AsIGFyZ3MpOworK30KKysKKytzdGF0aWMgc3RydWN0IGV4cHJlc3Npb24gKgorK25ld19leHBfMiAoZW51bSBvcGVyYXRvciBvcCwgc3RydWN0IGV4cHJlc3Npb24gKmxlZnQsIHN0cnVjdCBleHByZXNzaW9uICpyaWdodCkKKyt7CisrICBzdHJ1Y3QgZXhwcmVzc2lvbiAqYXJnc1syXTsKKysKKysgIGFyZ3NbMF0gPSBsZWZ0OworKyAgYXJnc1sxXSA9IHJpZ2h0OworKyAgcmV0dXJuIG5ld19leHAgKDIsIG9wLCBhcmdzKTsKKyt9CisrCisrc3RhdGljIGlubGluZSBzdHJ1Y3QgZXhwcmVzc2lvbiAqCisrbmV3X2V4cF8zIChlbnVtIG9wZXJhdG9yIG9wLCBzdHJ1Y3QgZXhwcmVzc2lvbiAqYmV4cCwKKysJICAgc3RydWN0IGV4cHJlc3Npb24gKnRicmFuY2gsIHN0cnVjdCBleHByZXNzaW9uICpmYnJhbmNoKQorK3sKKysgIHN0cnVjdCBleHByZXNzaW9uICphcmdzWzNdOworKworKyAgYXJnc1swXSA9IGJleHA7CisrICBhcmdzWzFdID0gdGJyYW5jaDsKKysgIGFyZ3NbMl0gPSBmYnJhbmNoOworKyAgcmV0dXJuIG5ld19leHAgKDMsIG9wLCBhcmdzKTsKKyt9CisrCisrJX0KKysKKysvKiBUaGlzIGRlY2xhcmVzIHRoYXQgYWxsIG9wZXJhdG9ycyBoYXZlIHRoZSBzYW1lIGFzc29jaWF0aXZpdHkgYW5kIHRoZQorKyAgIHByZWNlZGVuY2Ugb3JkZXIgYXMgaW4gQy4gIFNlZSBbSGFyYmlzb24sIFN0ZWVsZTogQywgQSBSZWZlcmVuY2UgTWFudWFsXS4KKysgICBUaGVyZSBpcyBubyB1bmFyeSBtaW51cyBhbmQgbm8gYml0d2lzZSBvcGVyYXRvcnMuCisrICAgT3BlcmF0b3JzIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIGJlaGF2aW91ciBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYSBzaW5nbGUKKysgICB0b2tlbiwgdG8gc2F2ZSBzcGFjZSBpbiB0aGUgYXJyYXkgZ2VuZXJhdGVkIGJ5IGJpc29uLiAgKi8KKyslcmlnaHQgJz8nCQkvKiAgID8JCSovCisrJWxlZnQgJ3wnCQkvKiAgIHx8CQkqLworKyVsZWZ0ICcmJwkJLyogICAmJgkJKi8KKyslbGVmdCBFUVVPUDIJCS8qICAgPT0gIT0JKi8KKyslbGVmdCBDTVBPUDIJCS8qICAgPCA+IDw9ID49CSovCisrJWxlZnQgQURET1AyCQkvKiAgICsgLQkqLworKyVsZWZ0IE1VTE9QMgkJLyogICAqIC8gJQkqLworKyVyaWdodCAnIScJCS8qICAgIQkJKi8KKysKKysldG9rZW4gPG9wPiBFUVVPUDIgQ01QT1AyIEFERE9QMiBNVUxPUDIKKysldG9rZW4gPG51bT4gTlVNQkVSCisrJXR5cGUgPGV4cD4gZXhwCisrCisrJSUKKysKKytzdGFydDoJICBleHAKKysJICB7CisrCSAgICBpZiAoJDEgPT0gTlVMTCkKKysJICAgICAgWVlBQk9SVDsKKysJICAgICgoc3RydWN0IHBhcnNlX2FyZ3MgKikgYXJnKS0+cmVzID0gJDE7CisrCSAgfQorKwk7CisrCisrZXhwOgkgIGV4cCAnPycgZXhwICc6JyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMyAocW1vcCwgJDEsICQzLCAkNSk7CisrCSAgfQorKwl8IGV4cCAnfCcgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKGxvciwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwICcmJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAobGFuZCwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIEVRVU9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8IGV4cCBDTVBPUDIgZXhwCisrCSAgeworKwkgICAgJCQgPSBuZXdfZXhwXzIgKCQyLCAkMSwgJDMpOworKwkgIH0KKysJfCBleHAgQURET1AyIGV4cAorKwkgIHsKKysJICAgICQkID0gbmV3X2V4cF8yICgkMiwgJDEsICQzKTsKKysJICB9CisrCXwgZXhwIE1VTE9QMiBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMiAoJDIsICQxLCAkMyk7CisrCSAgfQorKwl8ICchJyBleHAKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMSAobG5vdCwgJDIpOworKwkgIH0KKysJfCAnbicKKysJICB7CisrCSAgICAkJCA9IG5ld19leHBfMCAodmFyKTsKKysJICB9CisrCXwgTlVNQkVSCisrCSAgeworKwkgICAgaWYgKCgkJCA9IG5ld19leHBfMCAobnVtKSkgIT0gTlVMTCkKKysJICAgICAgJCQtPnZhbC5udW0gPSAkMTsKKysJICB9CisrCXwgJygnIGV4cCAnKScKKysJICB7CisrCSAgICAkJCA9ICQyOworKwkgIH0KKysJOworKworKyUlCisrCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrRlJFRV9FWFBSRVNTSU9OIChzdHJ1Y3QgZXhwcmVzc2lvbiAqZXhwKQorK3sKKysgIGlmIChleHAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgLyogSGFuZGxlIHRoZSByZWN1cnNpdmUgY2FzZS4gICovCisrICBzd2l0Y2ggKGV4cC0+bmFyZ3MpCisrICAgIHsKKysgICAgY2FzZSAzOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1syXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAyOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1sxXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgY2FzZSAxOgorKyAgICAgIEZSRUVfRVhQUkVTU0lPTiAoZXhwLT52YWwuYXJnc1swXSk7CisrICAgICAgLyogRkFMTFRIUk9VR0ggKi8KKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgZnJlZSAoZXhwKTsKKyt9CisrCisrCisrc3RhdGljIGludAorK3l5bGV4IChZWVNUWVBFICpsdmFsLCBjb25zdCBjaGFyICoqcGV4cCkKKyt7CisrICBjb25zdCBjaGFyICpleHAgPSAqcGV4cDsKKysgIGludCByZXN1bHQ7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChleHBbMF0gPT0gJ1wwJykKKysJeworKwkgICpwZXhwID0gZXhwOworKwkgIHJldHVybiBZWUVPRjsKKysJfQorKworKyAgICAgIGlmIChleHBbMF0gIT0gJyAnICYmIGV4cFswXSAhPSAnXHQnKQorKwlicmVhazsKKysKKysgICAgICArK2V4cDsKKysgICAgfQorKworKyAgcmVzdWx0ID0gKmV4cCsrOworKyAgc3dpdGNoIChyZXN1bHQpCisrICAgIHsKKysgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorKyAgICBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgeworKwl1bnNpZ25lZCBsb25nIGludCBuID0gcmVzdWx0IC0gJzAnOworKwl3aGlsZSAoZXhwWzBdID49ICcwJyAmJiBleHBbMF0gPD0gJzknKQorKwkgIHsKKysJICAgIG4gKj0gMTA7CisrCSAgICBuICs9IGV4cFswXSAtICcwJzsKKysJICAgICsrZXhwOworKwkgIH0KKysJbHZhbC0+bnVtID0gbjsKKysJcmVzdWx0ID0gTlVNQkVSOworKyAgICAgIH0KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnPSc6CisrICAgICAgaWYgKGV4cFswXSA9PSAnPScpCisrCXsKKysJICArK2V4cDsKKysJICBsdmFsLT5vcCA9IGVxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICchJzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbm90X2VxdWFsOworKwkgIHJlc3VsdCA9IEVRVU9QMjsKKysJfQorKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcmJzoKKysgICAgY2FzZSAnfCc6CisrICAgICAgaWYgKGV4cFswXSA9PSByZXN1bHQpCisrCSsrZXhwOworKyAgICAgIGVsc2UKKysJcmVzdWx0ID0gWVlFUlJDT0RFOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc8JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gbGVzc19vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBsZXNzX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICc+JzoKKysgICAgICBpZiAoZXhwWzBdID09ICc9JykKKysJeworKwkgICsrZXhwOworKwkgIGx2YWwtPm9wID0gZ3JlYXRlcl9vcl9lcXVhbDsKKysJfQorKyAgICAgIGVsc2UKKysJbHZhbC0+b3AgPSBncmVhdGVyX3RoYW47CisrICAgICAgcmVzdWx0ID0gQ01QT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcqJzoKKysgICAgICBsdmFsLT5vcCA9IG11bHQ7CisrICAgICAgcmVzdWx0ID0gTVVMT1AyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICcvJzoKKysgICAgICBsdmFsLT5vcCA9IGRpdmlkZTsKKysgICAgICByZXN1bHQgPSBNVUxPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJyUnOgorKyAgICAgIGx2YWwtPm9wID0gbW9kdWxlOworKyAgICAgIHJlc3VsdCA9IE1VTE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnKyc6CisrICAgICAgbHZhbC0+b3AgPSBwbHVzOworKyAgICAgIHJlc3VsdCA9IEFERE9QMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnLSc6CisrICAgICAgbHZhbC0+b3AgPSBtaW51czsKKysgICAgICByZXN1bHQgPSBBRERPUDI7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgJ24nOgorKyAgICBjYXNlICc/JzoKKysgICAgY2FzZSAnOic6CisrICAgIGNhc2UgJygnOgorKyAgICBjYXNlICcpJzoKKysgICAgICAvKiBOb3RoaW5nLCBqdXN0IHJldHVybiB0aGUgY2hhcmFjdGVyLiAgKi8KKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAnOyc6CisrICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXDAnOgorKyAgICAgIC8qIEJlIHNhZmUgYW5kIGxldCB0aGUgdXNlciBjYWxsIHRoaXMgZnVuY3Rpb24gYWdhaW4uICAqLworKyAgICAgIC0tZXhwOworKyAgICAgIHJlc3VsdCA9IFlZRU9GOworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJlc3VsdCA9IFlZRVJSQ09ERTsKKysjaWYgWVlERUJVRyAhPSAwCisrICAgICAgLS1leHA7CisrI2VuZGlmCisrICAgICAgYnJlYWs7CisrICAgIH0KKysKKysgICpwZXhwID0gZXhwOworKworKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQKKyt5eWVycm9yIChjb25zdCBjaGFyICpzdHIpCisreworKyAgLyogRG8gbm90aGluZy4gIFdlIGRvbid0IHByaW50IGVycm9yIG1lc3NhZ2VzIGhlcmUuICAqLworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wbzJ0Ymwuc2VkLmluCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3BvMnRibC5zZWQuaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDEwMiArMCwwIEBACistIyBwbzJ0Ymwuc2VkIC0gQ29udmVydCBVbmlmb3J1bSBzdHlsZSAucG8gZmlsZSB0byBsb29rdXAgdGFibGUgZm9yIGNhdGdldHMKKy0jIENvcHlyaWdodCAoQykgMTk5NSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKy0jCistIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy0jIGFueSBsYXRlciB2ZXJzaW9uLgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistIworLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCistIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorLSMKKy0xIHsKKy0gIGlcCistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIEBQQUNLQUdFIE5BTUVALnBvdC4gICovXAorLVwKKy0jaWYgSEFWRV9DT05GSUdfSFwKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPlwKKy0jZW5kaWZcCistXAorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiXAorLVwKKy1jb25zdCBzdHJ1Y3QgX21zZ19lbnQgX21zZ190YmxbXSA9IHsKKy0gIGgKKy0gIHMvLiovMC8KKy0gIHgKKy19CistIworLSMgV3JpdGUgbXNnaWQgZW50cmllcyBpbiBDIGFycmF5IGZvcm0uCistIworLS9ebXNnaWQvIHsKKy0gIHMvbXNnaWRbIAldKlwoIi4qIlwpLyAge1wxLworLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lCistICA6YgorLSAgTgorLSMgTG9vayB3aGV0aGVyIHNlY29uZCBwYXJ0IGlzIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXCkiXChcblwpIlwoLioiXCkvXDFcMlwzLworLSMgWWVzLCB0aGVuIGJyYW5jaC4KKy0gIHRhCistIyBCZWNhdXNlIHdlIGFzc3VtZSB0aGF0IHRoZSBpbnB1dCBmaWxlIGNvcnJlY3RseSBmb3JtZWQgdGhlIGxpbmUKKy0jIGp1c3QgcmVhZCBjYW5ub3QgYmUgYWdhaW4gYmUgYSBtc2dpZCBsaW5lLiAgU28gaXQncyBzYWZlIHRvIGlnbm9yZQorLSMgaXQuCistICBzL1woLipcKVxuLiovXDEvCistICBiYworLSMgV2UgZm91bmQgYSBjb250aW51YXRpb24gbGluZS4gIEJ1dCBiZWZvcmUgcHJpbnRpbmcgaW5zZXJ0ICdcJy4KKy0gIDphCistICBzL1woLipcKVwoXG4uKlwpL1wxXFxcMi8KKy0gIFAKKy0jIFdlIGNhbm5vdCB1c2UgRCBoZXJlLgorLSAgcy8uKlxuXCguKlwpL1wxLworLSMgU29tZSBidWdneSBzZWRzIGRvIG5vdCBjbGVhciB0aGUgYHN1Y2Nlc3NmdWwgc3Vic3RpdHV0aW9uIHNpbmNlIGxhc3QgYGB0JycnCistIyBmbGFnIG9uIGBOJywgc28gd2UgZG8gYSBgdCcgaGVyZSB0byBjbGVhciBpdC4KKy0gIHRiCistIyBOb3QgcmVhY2hlZAorLSAgOmMKKy0gIHgKKy0jIFRoZSBmb2xsb3dpbmcgbmljZSBzb2x1dGlvbiBpcyBieQorLSMgQnJ1bm8gPEhhaWJsZUBtYTJzMi5tYXRoZW1hdGlrLnVuaS1rYXJsc3J1aGUuZGU+CistICB0ZAorLSMgSW5jcmVtZW50IGEgZGVjaW1hbCBudW1iZXIgaW4gcGF0dGVybiBzcGFjZS4KKy0jIEZpcnN0IGhpZGUgdHJhaWxpbmcgYDknIGRpZ2l0cy4KKy0gIDpkCistICBzLzlcKF8qXCkkL19cMS8KKy0gIHRkCistIyBBc3N1cmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGlzIGF2YWlsYWJsZS4KKy0gIHMvXlwoXypcKSQvMFwxLworLSMgSW5jcmVtZW50IHRoZSBsYXN0IGRpZ2l0LgorLSAgcy84XChfKlwpJC85XDEvCistICBzLzdcKF8qXCkkLzhcMS8KKy0gIHMvNlwoXypcKSQvN1wxLworLSAgcy81XChfKlwpJC82XDEvCistICBzLzRcKF8qXCkkLzVcMS8KKy0gIHMvM1woXypcKSQvNFwxLworLSAgcy8yXChfKlwpJC8zXDEvCistICBzLzFcKF8qXCkkLzJcMS8KKy0gIHMvMFwoXypcKSQvMVwxLworLSMgQ29udmVydCB0aGUgaGlkZGVuIGA5JyBkaWdpdHMgdG8gYDAncy4KKy0gIHMvXy8wL2cKKy0gIHgKKy0gIEcKKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wxLCBcMn0sLworLSAgcy9cKC4qXCkiJC9cMS8KKy0gIHAKKy19CistIworLSMgTGFzdCBsaW5lLgorLSMKKy0kIHsKKy0gIGlcCistfTtcCistCistICBnCistICBzLzAqXCguKlwpL2ludCBfbXNnX3RibF9sZW5ndGggPSBcMTsvcAorLX0KKy1kCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLWFyZ3MuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtYXJncy5jCTIwMDQtMDktMTIgMTQ6NDA6MzQuNTk1NzExNjA4IC0wNDAwCitAQCAtMCwwICsxLDExOSBAQAorKy8qIERlY29tcG9zZWQgcHJpbnRmIGFyZ3VtZW50IGxpc3QuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuaCIKKysKKysjaWZkZWYgU1RBVElDCisrU1RBVElDCisrI2VuZGlmCisraW50CisrcHJpbnRmX2ZldGNoYXJncyAodmFfbGlzdCBhcmdzLCBhcmd1bWVudHMgKmEpCisreworKyAgc2l6ZV90IGk7CisrICBhcmd1bWVudCAqYXA7CisrCisrICBmb3IgKGkgPSAwLCBhcCA9ICZhLT5hcmdbMF07IGkgPCBhLT5jb3VudDsgaSsrLCBhcCsrKQorKyAgICBzd2l0Y2ggKGFwLT50eXBlKQorKyAgICAgIHsKKysgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCWFwLT5hLmFfc2NoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qc2lnbmVkIGNoYXIqLyBpbnQpOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCWFwLT5hLmFfdWNoYXIgPSB2YV9hcmcgKGFyZ3MsIC8qdW5zaWduZWQgY2hhciovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9TSE9SVDoKKysJYXAtPmEuYV9zaG9ydCA9IHZhX2FyZyAoYXJncywgLypzaG9ydCovIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VU0hPUlQ6CisrCWFwLT5hLmFfdXNob3J0ID0gdmFfYXJnIChhcmdzLCAvKnVuc2lnbmVkIHNob3J0Ki8gaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0lOVDoKKysJYXAtPmEuYV9pbnQgPSB2YV9hcmcgKGFyZ3MsIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VSU5UOgorKwlhcC0+YS5hX3VpbnQgPSB2YV9hcmcgKGFyZ3MsIHVuc2lnbmVkIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwlhcC0+YS5hX2xvbmdpbnQgPSB2YV9hcmcgKGFyZ3MsIGxvbmcgaW50KTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX1VMT05HSU5UOgorKwlhcC0+YS5hX3Vsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGludCk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICAgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJYXAtPmEuYV9sb25nbG9uZ2ludCA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCWFwLT5hLmFfdWxvbmdsb25naW50ID0gdmFfYXJnIChhcmdzLCB1bnNpZ25lZCBsb25nIGxvbmcgaW50KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX0RPVUJMRToKKysJYXAtPmEuYV9kb3VibGUgPSB2YV9hcmcgKGFyZ3MsIGRvdWJsZSk7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgICAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCWFwLT5hLmFfbG9uZ2RvdWJsZSA9IHZhX2FyZyAoYXJncywgbG9uZyBkb3VibGUpOworKwlicmVhazsKKysjZW5kaWYKKysgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJYXAtPmEuYV9jaGFyID0gdmFfYXJnIChhcmdzLCBpbnQpOworKwlicmVhazsKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKwlhcC0+YS5hX3dpZGVfY2hhciA9IHZhX2FyZyAoYXJncywgd2ludF90KTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgY2FzZSBUWVBFX1NUUklORzoKKysJYXAtPmEuYV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IGNoYXIgKik7CisrCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysgICAgICBjYXNlIFRZUEVfV0lERV9TVFJJTkc6CisrCWFwLT5hLmFfd2lkZV9zdHJpbmcgPSB2YV9hcmcgKGFyZ3MsIGNvbnN0IHdjaGFyX3QgKik7CisrCWJyZWFrOworKyNlbmRpZgorKyAgICAgIGNhc2UgVFlQRV9QT0lOVEVSOgorKwlhcC0+YS5hX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHZvaWQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X3NjaGFyX3BvaW50ZXIgPSB2YV9hcmcgKGFyZ3MsIHNpZ25lZCBjaGFyICopOworKwlicmVhazsKKysgICAgICBjYXNlIFRZUEVfQ09VTlRfU0hPUlRfUE9JTlRFUjoKKysJYXAtPmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBzaG9ydCAqKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0lOVF9QT0lOVEVSOgorKwlhcC0+YS5hX2NvdW50X2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBpbnQgKik7CisrCWJyZWFrOworKyAgICAgIGNhc2UgVFlQRV9DT1VOVF9MT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2ludF9wb2ludGVyID0gdmFfYXJnIChhcmdzLCBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICAgICAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCWFwLT5hLmFfY291bnRfbG9uZ2xvbmdpbnRfcG9pbnRlciA9IHZhX2FyZyAoYXJncywgbG9uZyBsb25nIGludCAqKTsKKysJYnJlYWs7CisrI2VuZGlmCisrICAgICAgZGVmYXVsdDoKKysJLyogVW5rbm93biB0eXBlLiAgKi8KKysJcmV0dXJuIC0xOworKyAgICAgIH0KKysgIHJldHVybiAwOworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtYXJncy5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3ByaW50Zi1hcmdzLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42MDE3MTA2OTYgLTA0MDAKK0BAIC0wLDAgKzEsMTM3IEBACisrLyogRGVjb21wb3NlZCBwcmludGYgYXJndW1lbnQgbGlzdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX0FSR1NfSAorKyNkZWZpbmUgX1BSSU5URl9BUkdTX0gKKysKKysvKiBHZXQgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IHdjaGFyX3QuICAqLworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGluY2x1ZGUgPHN0ZGRlZi5oPgorKyNlbmRpZgorKworKy8qIEdldCB3aW50X3QuICAqLworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKworKy8qIEFyZ3VtZW50IHR5cGVzICovCisrdHlwZWRlZiBlbnVtCisreworKyAgVFlQRV9OT05FLAorKyAgVFlQRV9TQ0hBUiwKKysgIFRZUEVfVUNIQVIsCisrICBUWVBFX1NIT1JULAorKyAgVFlQRV9VU0hPUlQsCisrICBUWVBFX0lOVCwKKysgIFRZUEVfVUlOVCwKKysgIFRZUEVfTE9OR0lOVCwKKysgIFRZUEVfVUxPTkdJTlQsCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrICBUWVBFX0xPTkdMT05HSU5ULAorKyAgVFlQRV9VTE9OR0xPTkdJTlQsCisrI2VuZGlmCisrICBUWVBFX0RPVUJMRSwKKysjaWZkZWYgSEFWRV9MT05HX0RPVUJMRQorKyAgVFlQRV9MT05HRE9VQkxFLAorKyNlbmRpZgorKyAgVFlQRV9DSEFSLAorKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgVFlQRV9XSURFX0NIQVIsCisrI2VuZGlmCisrICBUWVBFX1NUUklORywKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICBUWVBFX1dJREVfU1RSSU5HLAorKyNlbmRpZgorKyAgVFlQRV9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSLAorKyAgVFlQRV9DT1VOVF9JTlRfUE9JTlRFUiwKKysgIFRZUEVfQ09VTlRfTE9OR0lOVF9QT0lOVEVSCisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrLCBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVIKKysjZW5kaWYKKyt9IGFyZ190eXBlOworKworKy8qIFBvbHltb3JwaGljIGFyZ3VtZW50ICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBhcmdfdHlwZSB0eXBlOworKyAgdW5pb24KKysgIHsKKysgICAgc2lnbmVkIGNoYXIJCQlhX3NjaGFyOworKyAgICB1bnNpZ25lZCBjaGFyCQlhX3VjaGFyOworKyAgICBzaG9ydAkJCWFfc2hvcnQ7CisrICAgIHVuc2lnbmVkIHNob3J0CQlhX3VzaG9ydDsKKysgICAgaW50CQkJCWFfaW50OworKyAgICB1bnNpZ25lZCBpbnQJCWFfdWludDsKKysgICAgbG9uZyBpbnQJCQlhX2xvbmdpbnQ7CisrICAgIHVuc2lnbmVkIGxvbmcgaW50CQlhX3Vsb25naW50OworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKyAgICBsb25nIGxvbmcgaW50CQlhX2xvbmdsb25naW50OworKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50CWFfdWxvbmdsb25naW50OworKyNlbmRpZgorKyAgICBmbG9hdAkJCWFfZmxvYXQ7CisrICAgIGRvdWJsZQkJCWFfZG91YmxlOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrICAgIGxvbmcgZG91YmxlCQkJYV9sb25nZG91YmxlOworKyNlbmRpZgorKyAgICBpbnQJCQkJYV9jaGFyOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKyAgICB3aW50X3QJCQlhX3dpZGVfY2hhcjsKKysjZW5kaWYKKysgICAgY29uc3QgY2hhcioJCQlhX3N0cmluZzsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrICAgIGNvbnN0IHdjaGFyX3QqCQlhX3dpZGVfc3RyaW5nOworKyNlbmRpZgorKyAgICB2b2lkKgkJCWFfcG9pbnRlcjsKKysgICAgc2lnbmVkIGNoYXIgKgkJYV9jb3VudF9zY2hhcl9wb2ludGVyOworKyAgICBzaG9ydCAqCQkJYV9jb3VudF9zaG9ydF9wb2ludGVyOworKyAgICBpbnQgKgkJCWFfY291bnRfaW50X3BvaW50ZXI7CisrICAgIGxvbmcgaW50ICoJCQlhX2NvdW50X2xvbmdpbnRfcG9pbnRlcjsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysgICAgbG9uZyBsb25nIGludCAqCQlhX2NvdW50X2xvbmdsb25naW50X3BvaW50ZXI7CisrI2VuZGlmCisrICB9CisrICBhOworK30KKythcmd1bWVudDsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGFyZ3VtZW50ICphcmc7CisrfQorK2FyZ3VtZW50czsKKysKKysKKysvKiBGZXRjaCB0aGUgYXJndW1lbnRzLCBwdXR0aW5nIHRoZW0gaW50byBhLiAqLworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZWxzZQorK2V4dGVybgorKyNlbmRpZgorK2ludCBwcmludGZfZmV0Y2hhcmdzICh2YV9saXN0IGFyZ3MsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfQVJHU19IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42MDc3MDk3ODQgLTA0MDAKK0BAIC0wLDAgKzEsMzcxIEBACisrLyogRm9ybWF0dGVkIG91dHB1dCB0byBzdHJpbmdzLCB1c2luZyBQT1NJWC9YU0kgZm9ybWF0IHN0cmluZ3Mgd2l0aCBwb3NpdGlvbnMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFdyaXR0ZW4gYnkgQnJ1bm8gSGFpYmxlIDxicnVub0BjbGlzcC5vcmc+LCAyMDAzLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2lmZGVmIF9fR05VQ19fCisrIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjIGRlZmluZSBIQVZFX0FMTE9DQSAxCisrI2Vsc2UKKysjIGlmZGVmIF9NU0NfVkVSCisrIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisrIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisrIyBlbHNlCisrIyAgaWYgZGVmaW5lZCBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisrIyAgZWxzZQorKyMgICBpZmRlZiBfQUlYCisrICNwcmFnbWEgYWxsb2NhCisrIyAgIGVsc2UKKysjICAgIGlmbmRlZiBhbGxvY2EKKytjaGFyICphbGxvY2EgKCk7CisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZiAhSEFWRV9QT1NJWF9QUklOVEYKKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKworKy8qIFdoZW4gYnVpbGRpbmcgYSBETEwsIHdlIG11c3QgZXhwb3J0IHNvbWUgZnVuY3Rpb25zLiAgTm90ZSB0aGF0IGJlY2F1c2UKKysgICB0aGUgZnVuY3Rpb25zIGFyZSBvbmx5IGRlZmluZWQgZm9yIGJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZQorKyAgIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBpbiBhbnkgY2FzZS4gICovCisrI2lmIGRlZmluZWQgX01TQ19WRVIgJiYgQlVJTERJTkdfRExMCisrIyBkZWZpbmUgRExMX0VYUE9SVEVEIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorKyNlbHNlCisrIyBkZWZpbmUgRExMX0VYUE9SVEVECisrI2VuZGlmCisrCisrI2RlZmluZSBTVEFUSUMgc3RhdGljCisrCisrLyogRGVmaW5lIGF1eGlsaWFyeSBmdW5jdGlvbnMgZGVjbGFyZWQgaW4gInByaW50Zi1hcmdzLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLWFyZ3MuYyIKKysKKysvKiBEZWZpbmUgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAicHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNucHJpbnRmIGxpYmludGxfdmFzbnByaW50ZgorKyNpbmNsdWRlICJ2YXNucHJpbnRmLmMiCisrI2lmIDAgLyogbm90IG5lZWRlZCAqLworKyNkZWZpbmUgYXNucHJpbnRmIGxpYmludGxfYXNucHJpbnRmCisrI2luY2x1ZGUgImFzbnByaW50Zi5jIgorKyNlbmRpZgorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdmZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHN0cmNociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKE5VTEwsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaW50IHJldHZhbCA9IC0xOworKyAgICAgIGlmIChyZXN1bHQgIT0gTlVMTCkKKysJeworKwkgIGlmIChmd3JpdGUgKHJlc3VsdCwgMSwgbGVuZ3RoLCBzdHJlYW0pID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2ZwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92ZnByaW50ZiAoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfdnByaW50ZiAoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZwcmludGYgKHN0ZG91dCwgZm9ybWF0LCBhcmdzKTsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF9wcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzcHJpbnRmIChjaGFyICpyZXN1bHRidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorK3sKKysgIGlmIChzdHJjaHIgKGZvcm1hdCwgJyQnKSA9PSBOVUxMKQorKyAgICByZXR1cm4gdnNwcmludGYgKHJlc3VsdGJ1ZiwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGggPSAoc2l6ZV90KSB+MCAvICg0ICogc2l6ZW9mIChjaGFyKSk7CisrICAgICAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3NwcmludGYgKGNoYXIgKnJlc3VsdGJ1ZiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c3ByaW50ZiAocmVzdWx0YnVmLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNpZiBIQVZFX1NOUFJJTlRGCisrCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c25wcmludGYgX3ZzbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBzeXN0ZW1fdnNucHJpbnRmIHZzbnByaW50ZgorKyMgZW5kaWYKKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3ZzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAoc3RyY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICBjaGFyICpyZXN1bHQgPSBsaWJpbnRsX3Zhc25wcmludGYgKHJlc3VsdGJ1ZiwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdGJ1ZikKKysJeworKwkgIGlmIChtYXhsZW5ndGggPiAwKQorKwkgICAgeworKwkgICAgICBpZiAobGVuZ3RoIDwgbWF4bGVuZ3RoKQorKwkJYWJvcnQgKCk7CisrCSAgICAgIG1lbWNweSAocmVzdWx0YnVmLCByZXN1bHQsIG1heGxlbmd0aCAtIDEpOworKwkgICAgICByZXN1bHRidWZbbWF4bGVuZ3RoIC0gMV0gPSAnXDAnOworKwkgICAgfQorKwkgIGZyZWUgKHJlc3VsdCk7CisrCSAgcmV0dXJuIC0xOworKwl9CisrICAgICAgZWxzZQorKwlyZXR1cm4gbGVuZ3RoOworKyAgICB9CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfc25wcmludGYgKGNoYXIgKnJlc3VsdGJ1Ziwgc2l6ZV90IGxlbmd0aCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92c25wcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgdmFfZW5kIChhcmdzKTsKKysgIHJldHVybiByZXR2YWw7CisrfQorKworKyNlbmRpZgorKworKyNpZiBIQVZFX0FTUFJJTlRGCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92YXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBzaXplX3QgbGVuZ3RoOworKyAgY2hhciAqcmVzdWx0ID0gbGliaW50bF92YXNucHJpbnRmIChOVUxMLCAmbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgaWYgKHJlc3VsdCA9PSBOVUxMKQorKyAgICByZXR1cm4gLTE7CisrICAqcmVzdWx0cCA9IHJlc3VsdDsKKysgIHJldHVybiBsZW5ndGg7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfYXNwcmludGYgKGNoYXIgKipyZXN1bHRwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpbnQgcmV0dmFsOworKworKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisrICByZXR2YWwgPSBsaWJpbnRsX3Zhc3ByaW50ZiAocmVzdWx0cCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjaWYgSEFWRV9GV1BSSU5URgorKworKyNpbmNsdWRlIDx3Y2hhci5oPgorKworKyNkZWZpbmUgV0lERV9DSEFSX1ZFUlNJT04gMQorKworKy8qIERlZmluZSBhdXhpbGlhcnkgZnVuY3Rpb25zIGRlY2xhcmVkIGluICJ3cHJpbnRmLXBhcnNlLmgiLiAgKi8KKysjaW5jbHVkZSAicHJpbnRmLXBhcnNlLmMiCisrCisrLyogRGVmaW5lIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbiAidmFzbnByaW50Zi5oIi4gICovCisrI2RlZmluZSB2YXNud3ByaW50ZiBsaWJpbnRsX3Zhc253cHJpbnRmCisrI2luY2x1ZGUgInZhc25wcmludGYuYyIKKysjaWYgMCAvKiBub3QgbmVlZGVkICovCisrI2RlZmluZSBhc253cHJpbnRmIGxpYmludGxfYXNud3ByaW50ZgorKyNpbmNsdWRlICJhc25wcmludGYuYyIKKysjZW5kaWYKKysKKysjIGlmIEhBVkVfREVDTF9fU05XUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIHN5c3RlbV92c3dwcmludGYgX3ZzbndwcmludGYKKysjIGVsc2UKKysgICAvKiBVbml4LiAgKi8KKysjICBkZWZpbmUgc3lzdGVtX3Zzd3ByaW50ZiB2c3dwcmludGYKKysjIGVuZGlmCisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92ZndwcmludGYgKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgaWYgKHdjc2NociAoZm9ybWF0LCAnJCcpID09IE5VTEwpCisrICAgIHJldHVybiB2ZndwcmludGYgKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIHNpemVfdCBsZW5ndGg7CisrICAgICAgd2NoYXJfdCAqcmVzdWx0ID0gbGliaW50bF92YXNud3ByaW50ZiAoTlVMTCwgJmxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgICAgICBpbnQgcmV0dmFsID0gLTE7CisrICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKwl7CisrCSAgc2l6ZV90IGk7CisrCSAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorKwkgICAgaWYgKGZwdXR3YyAocmVzdWx0W2ldLCBzdHJlYW0pID09IFdFT0YpCisrCSAgICAgIGJyZWFrOworKwkgIGlmIChpID09IGxlbmd0aCkKKysJICAgIHJldHZhbCA9IGxlbmd0aDsKKysJICBmcmVlIChyZXN1bHQpOworKwl9CisrICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX2Z3cHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdmZ3cHJpbnRmIChzdHJlYW0sIGZvcm1hdCwgYXJncyk7CisrICB2YV9lbmQgKGFyZ3MpOworKyAgcmV0dXJuIHJldHZhbDsKKyt9CisrCisrRExMX0VYUE9SVEVECisraW50CisrbGliaW50bF92d3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgcmV0dXJuIGxpYmludGxfdmZ3cHJpbnRmIChzdGRvdXQsIGZvcm1hdCwgYXJncyk7CisrfQorKworK0RMTF9FWFBPUlRFRAorK2ludAorK2xpYmludGxfd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCisreworKyAgdmFfbGlzdCBhcmdzOworKyAgaW50IHJldHZhbDsKKysKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgcmV0dmFsID0gbGliaW50bF92d3ByaW50ZiAoZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3Zzd3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgbGVuZ3RoLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJncykKKyt7CisrICBpZiAod2NzY2hyIChmb3JtYXQsICckJykgPT0gTlVMTCkKKysgICAgcmV0dXJuIHN5c3RlbV92c3dwcmludGYgKHJlc3VsdGJ1ZiwgbGVuZ3RoLCBmb3JtYXQsIGFyZ3MpOworKyAgZWxzZQorKyAgICB7CisrICAgICAgc2l6ZV90IG1heGxlbmd0aCA9IGxlbmd0aDsKKysgICAgICB3Y2hhcl90ICpyZXN1bHQgPSBsaWJpbnRsX3Zhc253cHJpbnRmIChyZXN1bHRidWYsICZsZW5ndGgsIGZvcm1hdCwgYXJncyk7CisrICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYpCisrCXsKKysJICBpZiAobWF4bGVuZ3RoID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGxlbmd0aCA8IG1heGxlbmd0aCkKKysJCWFib3J0ICgpOworKwkgICAgICBtZW1jcHkgKHJlc3VsdGJ1ZiwgcmVzdWx0LCAobWF4bGVuZ3RoIC0gMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysJICAgICAgcmVzdWx0YnVmW21heGxlbmd0aCAtIDFdID0gMDsKKysJICAgIH0KKysJICBmcmVlIChyZXN1bHQpOworKwkgIHJldHVybiAtMTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGxlbmd0aDsKKysgICAgfQorK30KKysKKytETExfRVhQT1JURUQKKytpbnQKKytsaWJpbnRsX3N3cHJpbnRmICh3Y2hhcl90ICpyZXN1bHRidWYsIHNpemVfdCBsZW5ndGgsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIGludCByZXR2YWw7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIHJldHZhbCA9IGxpYmludGxfdnN3cHJpbnRmIChyZXN1bHRidWYsIGxlbmd0aCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrICByZXR1cm4gcmV0dmFsOworK30KKysKKysjZW5kaWYKKysKKysjZW5kaWYKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9wcmludGYtcGFyc2UuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9wcmludGYtcGFyc2UuYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjYyMjcwNzUwNCAtMDQwMAorQEAgLTAsMCArMSw1MzcgQEAKKysvKiBGb3JtYXR0ZWQgb3V0cHV0IHRvIHN0cmluZ3MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAsIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKy8qIFNwZWNpZmljYXRpb24uICAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBHZXQgc2l6ZV90LCBOVUxMLiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrLyogR2V0IGludG1heF90LiAgKi8KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjIGluY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZiBIQVZFX0lOVFRZUEVTX0hfV0lUSF9VSU5UTUFYCisrIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNlbmRpZgorKworKy8qIG1hbGxvYygpLCByZWFsbG9jKCksIGZyZWUoKS4gICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKy8qIENoZWNrZWQgc2l6ZV90IGNvbXB1dGF0aW9ucy4gICovCisrI2luY2x1ZGUgInhzaXplLmgiCisrCisrI2lmIFdJREVfQ0hBUl9WRVJTSU9OCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrI2Vsc2UKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgQ0hBUl9UIGNoYXIKKysjIGRlZmluZSBESVJFQ1RJVkUgY2hhcl9kaXJlY3RpdmUKKysjIGRlZmluZSBESVJFQ1RJVkVTIGNoYXJfZGlyZWN0aXZlcworKyNlbmRpZgorKworKyNpZmRlZiBTVEFUSUMKKytTVEFUSUMKKysjZW5kaWYKKytpbnQKKytQUklOVEZfUEFSU0UgKGNvbnN0IENIQVJfVCAqZm9ybWF0LCBESVJFQ1RJVkVTICpkLCBhcmd1bWVudHMgKmEpCisreworKyAgY29uc3QgQ0hBUl9UICpjcCA9IGZvcm1hdDsJCS8qIHBvaW50ZXIgaW50byBmb3JtYXQgKi8KKysgIHNpemVfdCBhcmdfcG9zbiA9IDA7CQkvKiBudW1iZXIgb2YgcmVndWxhciBhcmd1bWVudHMgY29uc3VtZWQgKi8KKysgIHNpemVfdCBkX2FsbG9jYXRlZDsJCQkvKiBhbGxvY2F0ZWQgZWxlbWVudHMgb2YgZC0+ZGlyICovCisrICBzaXplX3QgYV9hbGxvY2F0ZWQ7CQkJLyogYWxsb2NhdGVkIGVsZW1lbnRzIG9mIGEtPmFyZyAqLworKyAgc2l6ZV90IG1heF93aWR0aF9sZW5ndGggPSAwOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoID0gMDsKKysKKysgIGQtPmNvdW50ID0gMDsKKysgIGRfYWxsb2NhdGVkID0gMTsKKysgIGQtPmRpciA9IG1hbGxvYyAoZF9hbGxvY2F0ZWQgKiBzaXplb2YgKERJUkVDVElWRSkpOworKyAgaWYgKGQtPmRpciA9PSBOVUxMKQorKyAgICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8KKysgICAgcmV0dXJuIC0xOworKworKyAgYS0+Y291bnQgPSAwOworKyAgYV9hbGxvY2F0ZWQgPSAwOworKyAgYS0+YXJnID0gTlVMTDsKKysKKysjZGVmaW5lIFJFR0lTVEVSX0FSRyhfaW5kZXhfLF90eXBlXykgXAorKyAgewkJCQkJCQkJCVwKKysgICAgc2l6ZV90IG4gPSAoX2luZGV4Xyk7CQkJCQkJXAorKyAgICBpZiAobiA+PSBhX2FsbG9jYXRlZCkJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJc2l6ZV90IG1lbW9yeV9zaXplOwkJCQkJCVwKKysJYXJndW1lbnQgKm1lbW9yeTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwlhX2FsbG9jYXRlZCA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIDIpOwkJCQlcCisrCWlmIChhX2FsbG9jYXRlZCA8PSBuKQkJCQkJCVwKKysJICBhX2FsbG9jYXRlZCA9IHhzdW0gKG4sIDEpOwkJCQkJXAorKwltZW1vcnlfc2l6ZSA9IHh0aW1lcyAoYV9hbGxvY2F0ZWQsIHNpemVvZiAoYXJndW1lbnQpKTsJCVwKKysJaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQkJCQlcCisrCSAgLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCQkJXAorKwkgIGdvdG8gZXJyb3I7CQkJCQkJCVwKKysJbWVtb3J5ID0gKGEtPmFyZwkJCQkJCVwKKysJCSAgPyByZWFsbG9jIChhLT5hcmcsIG1lbW9yeV9zaXplKQkJCVwKKysJCSAgOiBtYWxsb2MgKG1lbW9yeV9zaXplKSk7CQkJCVwKKysJaWYgKG1lbW9yeSA9PSBOVUxMKQkJCQkJCVwKKysJICAvKiBPdXQgb2YgbWVtb3J5LiAgKi8JCQkJCQlcCisrCSAgZ290byBlcnJvcjsJCQkJCQkJXAorKwlhLT5hcmcgPSBtZW1vcnk7CQkJCQkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICAgIHdoaWxlIChhLT5jb3VudCA8PSBuKQkJCQkJCVwKKysgICAgICBhLT5hcmdbYS0+Y291bnQrK10udHlwZSA9IFRZUEVfTk9ORTsJCQkJXAorKyAgICBpZiAoYS0+YXJnW25dLnR5cGUgPT0gVFlQRV9OT05FKQkJCQkJXAorKyAgICAgIGEtPmFyZ1tuXS50eXBlID0gKF90eXBlXyk7CQkJCQlcCisrICAgIGVsc2UgaWYgKGEtPmFyZ1tuXS50eXBlICE9IChfdHlwZV8pKQkJCQlcCisrICAgICAgLyogQW1iaWd1b3VzIHR5cGUgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLwkJCVwKKysgICAgICBnb3RvIGVycm9yOwkJCQkJCQlcCisrICB9CisrCisrICB3aGlsZSAoKmNwICE9ICdcMCcpCisrICAgIHsKKysgICAgICBDSEFSX1QgYyA9ICpjcCsrOworKyAgICAgIGlmIChjID09ICclJykKKysJeworKwkgIHNpemVfdCBhcmdfaW5kZXggPSBBUkdfTk9ORTsKKysJICBESVJFQ1RJVkUgKmRwID0gJmQtPmRpcltkLT5jb3VudF07LyogcG9pbnRlciB0byBuZXh0IGRpcmVjdGl2ZSAqLworKworKwkgIC8qIEluaXRpYWxpemUgdGhlIG5leHQgZGlyZWN0aXZlLiAgKi8KKysJICBkcC0+ZGlyX3N0YXJ0ID0gY3AgLSAxOworKwkgIGRwLT5mbGFncyA9IDA7CisrCSAgZHAtPndpZHRoX3N0YXJ0ID0gTlVMTDsKKysJICBkcC0+d2lkdGhfZW5kID0gTlVMTDsKKysJICBkcC0+d2lkdGhfYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IE5VTEw7CisrCSAgZHAtPnByZWNpc2lvbl9lbmQgPSBOVUxMOworKwkgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gQVJHX05PTkU7CisrCSAgZHAtPmFyZ19pbmRleCA9IEFSR19OT05FOworKworKwkgIC8qIFRlc3QgZm9yIHBvc2l0aW9uYWwgYXJndW1lbnQuICAqLworKwkgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCSAgICAgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJOworKwkgICAgICBpZiAoKm5wID09ICckJykKKysJCXsKKysJCSAgc2l6ZV90IG4gPSAwOworKworKwkJICBmb3IgKG5wID0gY3A7ICpucCA+PSAnMCcgJiYgKm5wIDw9ICc5JzsgbnArKykKKysJCSAgICBuID0geHN1bSAoeHRpbWVzIChuLCAxMCksICpucCAtICcwJyk7CisrCQkgIGlmIChuID09IDApCisrCQkgICAgLyogUG9zaXRpb25hbCBhcmd1bWVudCAwLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCSAgICAvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJICBhcmdfaW5kZXggPSBuIC0gMTsKKysJCSAgY3AgPSBucCArIDE7CisrCQl9CisrCSAgICB9CisrCisrCSAgLyogUmVhZCB0aGUgZmxhZ3MuICAqLworKwkgIGZvciAoOzspCisrCSAgICB7CisrCSAgICAgIGlmICgqY3AgPT0gJ1wnJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfR1JPVVA7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnLScpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX0xFRlQ7CisrCQkgIGNwKys7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKCpjcCA9PSAnKycpCisrCQl7CisrCQkgIGRwLT5mbGFncyB8PSBGTEFHX1NIT1dTSUdOOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJyAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19TUEFDRTsKKysJCSAgY3ArKzsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoKmNwID09ICcjJykKKysJCXsKKysJCSAgZHAtPmZsYWdzIHw9IEZMQUdfQUxUOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlIGlmICgqY3AgPT0gJzAnKQorKwkJeworKwkJICBkcC0+ZmxhZ3MgfD0gRkxBR19aRVJPOworKwkJICBjcCsrOworKwkJfQorKwkgICAgICBlbHNlCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgZmllbGQgd2lkdGguICAqLworKwkgIGlmICgqY3AgPT0gJyonKQorKwkgICAgeworKwkgICAgICBkcC0+d2lkdGhfc3RhcnQgPSBjcDsKKysJICAgICAgY3ArKzsKKysJICAgICAgZHAtPndpZHRoX2VuZCA9IGNwOworKwkgICAgICBpZiAobWF4X3dpZHRoX2xlbmd0aCA8IDEpCisrCQltYXhfd2lkdGhfbGVuZ3RoID0gMTsKKysKKysJICAgICAgLyogVGVzdCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudC4gICovCisrCSAgICAgIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCQl7CisrCQkgIGNvbnN0IENIQVJfVCAqbnA7CisrCisrCQkgIGZvciAobnAgPSBjcDsgKm5wID49ICcwJyAmJiAqbnAgPD0gJzknOyBucCsrKQorKwkJICAgIDsKKysJCSAgaWYgKCpucCA9PSAnJCcpCisrCQkgICAgeworKwkJICAgICAgc2l6ZV90IG4gPSAwOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJbiA9IHhzdW0gKHh0aW1lcyAobiwgMTApLCAqbnAgLSAnMCcpOworKwkJICAgICAgaWYgKG4gPT0gMCkKKysJCQkvKiBQb3NpdGlvbmFsIGFyZ3VtZW50IDAuICAqLworKwkJCWdvdG8gZXJyb3I7CisrCQkgICAgICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkvKiBuIHRvbyBsYXJnZSwgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5IGxhdGVyLiAgKi8KKysJCQlnb3RvIGVycm9yOworKwkJICAgICAgZHAtPndpZHRoX2FyZ19pbmRleCA9IG4gLSAxOworKwkJICAgICAgY3AgPSBucCArIDE7CisrCQkgICAgfQorKwkJfQorKwkgICAgICBpZiAoZHAtPndpZHRoX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCXsKKysJCSAgZHAtPndpZHRoX2FyZ19pbmRleCA9IGFyZ19wb3NuKys7CisrCQkgIGlmIChkcC0+d2lkdGhfYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIC8qIGFyZ19wb3NuIHdyYXBwZWQgYXJvdW5kLiAgKi8KKysJCSAgICBnb3RvIGVycm9yOworKwkJfQorKwkgICAgICBSRUdJU1RFUl9BUkcgKGRwLT53aWR0aF9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJICAgIH0KKysJICBlbHNlIGlmICgqY3AgPj0gJzAnICYmICpjcCA8PSAnOScpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCB3aWR0aF9sZW5ndGg7CisrCisrCSAgICAgIGRwLT53aWR0aF9zdGFydCA9IGNwOworKwkgICAgICBmb3IgKDsgKmNwID49ICcwJyAmJiAqY3AgPD0gJzknOyBjcCsrKQorKwkJOworKwkgICAgICBkcC0+d2lkdGhfZW5kID0gY3A7CisrCSAgICAgIHdpZHRoX2xlbmd0aCA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCSAgICAgIGlmIChtYXhfd2lkdGhfbGVuZ3RoIDwgd2lkdGhfbGVuZ3RoKQorKwkJbWF4X3dpZHRoX2xlbmd0aCA9IHdpZHRoX2xlbmd0aDsKKysJICAgIH0KKysKKysJICAvKiBQYXJzZSB0aGUgcHJlY2lzaW9uLiAgKi8KKysJICBpZiAoKmNwID09ICcuJykKKysJICAgIHsKKysJICAgICAgY3ArKzsKKysJICAgICAgaWYgKCpjcCA9PSAnKicpCisrCQl7CisrCQkgIGRwLT5wcmVjaXNpb25fc3RhcnQgPSBjcCAtIDE7CisrCQkgIGNwKys7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IDIpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSAyOworKworKwkJICAvKiBUZXN0IGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50LiAgKi8KKysJCSAgaWYgKCpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JykKKysJCSAgICB7CisrCQkgICAgICBjb25zdCBDSEFSX1QgKm5wOworKworKwkJICAgICAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJOworKwkJICAgICAgaWYgKCpucCA9PSAnJCcpCisrCQkJeworKwkJCSAgc2l6ZV90IG4gPSAwOworKworKwkJCSAgZm9yIChucCA9IGNwOyAqbnAgPj0gJzAnICYmICpucCA8PSAnOSc7IG5wKyspCisrCQkJICAgIG4gPSB4c3VtICh4dGltZXMgKG4sIDEwKSwgKm5wIC0gJzAnKTsKKysJCQkgIGlmIChuID09IDApCisrCQkJICAgIC8qIFBvc2l0aW9uYWwgYXJndW1lbnQgMC4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBpZiAoc2l6ZV9vdmVyZmxvd19wIChuKSkKKysJCQkgICAgLyogbiB0b28gbGFyZ2UsIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeQorKwkJCSAgICAgICBsYXRlci4gICovCisrCQkJICAgIGdvdG8gZXJyb3I7CisrCQkJICBkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9IG4gLSAxOworKwkJCSAgY3AgPSBucCArIDE7CisrCQkJfQorKwkJICAgIH0KKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgIHsKKysJCSAgICAgIGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ID0gYXJnX3Bvc24rKzsKKysJCSAgICAgIGlmIChkcC0+cHJlY2lzaW9uX2FyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCQkvKiBhcmdfcG9zbiB3cmFwcGVkIGFyb3VuZC4gICovCisrCQkJZ290byBlcnJvcjsKKysJCSAgICB9CisrCQkgIFJFR0lTVEVSX0FSRyAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXgsIFRZUEVfSU5UKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBzaXplX3QgcHJlY2lzaW9uX2xlbmd0aDsKKysKKysJCSAgZHAtPnByZWNpc2lvbl9zdGFydCA9IGNwIC0gMTsKKysJCSAgZm9yICg7ICpjcCA+PSAnMCcgJiYgKmNwIDw9ICc5JzsgY3ArKykKKysJCSAgICA7CisrCQkgIGRwLT5wcmVjaXNpb25fZW5kID0gY3A7CisrCQkgIHByZWNpc2lvbl9sZW5ndGggPSBkcC0+cHJlY2lzaW9uX2VuZCAtIGRwLT5wcmVjaXNpb25fc3RhcnQ7CisrCQkgIGlmIChtYXhfcHJlY2lzaW9uX2xlbmd0aCA8IHByZWNpc2lvbl9sZW5ndGgpCisrCQkgICAgbWF4X3ByZWNpc2lvbl9sZW5ndGggPSBwcmVjaXNpb25fbGVuZ3RoOworKwkJfQorKwkgICAgfQorKworKwkgIHsKKysJICAgIGFyZ190eXBlIHR5cGU7CisrCisrCSAgICAvKiBQYXJzZSBhcmd1bWVudCB0eXBlL3NpemUgc3BlY2lmaWVycy4gICovCisrCSAgICB7CisrCSAgICAgIGludCBmbGFncyA9IDA7CisrCisrCSAgICAgIGZvciAoOzspCisrCQl7CisrCQkgIGlmICgqY3AgPT0gJ2gnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9ICgxIDw8IChmbGFncyAmIDEpKTsKKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ0wnKQorKwkJICAgIHsKKysJCSAgICAgIGZsYWdzIHw9IDQ7CisrCQkgICAgICBjcCsrOworKwkJICAgIH0KKysJCSAgZWxzZSBpZiAoKmNwID09ICdsJykKKysJCSAgICB7CisrCQkgICAgICBmbGFncyArPSA4OworKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2lmZGVmIEhBVkVfSU5UTUFYX1QKKysJCSAgZWxzZSBpZiAoKmNwID09ICdqJykKKysJCSAgICB7CisrCQkgICAgICBpZiAoc2l6ZW9mIChpbnRtYXhfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIGludG1heF90ID0gbG9uZyBsb25nICovCisrCQkJICBmbGFncyArPSAxNjsKKysJCQl9CisrCQkgICAgICBlbHNlIGlmIChzaXplb2YgKGludG1heF90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBpbnRtYXhfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrI2VuZGlmCisrCQkgIGVsc2UgaWYgKCpjcCA9PSAneicgfHwgKmNwID09ICdaJykKKysJCSAgICB7CisrCQkgICAgICAvKiAneicgaXMgc3RhbmRhcmRpemVkIGluIElTTyBDIDk5LCBidXQgZ2xpYmMgdXNlcyAnWicKKysJCQkgYmVjYXVzZSB0aGUgd2FybmluZyBmYWNpbGl0eSBpbiBnY2MtMi45NS4yIHVuZGVyc3RhbmRzCisrCQkJIG9ubHkgJ1onIChzZWUgZ2NjLTIuOTUuMi9nY2MvYy1jb21tb24uYzoxNzg0KS4gICovCisrCQkgICAgICBpZiAoc2l6ZW9mIChzaXplX3QpID4gc2l6ZW9mIChsb25nKSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nIGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDE2OworKwkJCX0KKysJCSAgICAgIGVsc2UgaWYgKHNpemVvZiAoc2l6ZV90KSA+IHNpemVvZiAoaW50KSkKKysJCQl7CisrCQkJICAvKiBzaXplX3QgPSBsb25nICovCisrCQkJICBmbGFncyArPSA4OworKwkJCX0KKysJCSAgICAgIGNwKys7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICgqY3AgPT0gJ3QnKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChzaXplb2YgKHB0cmRpZmZfdCkgPiBzaXplb2YgKGxvbmcpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgbG9uZyAqLworKwkJCSAgZmxhZ3MgKz0gMTY7CisrCQkJfQorKwkJICAgICAgZWxzZSBpZiAoc2l6ZW9mIChwdHJkaWZmX3QpID4gc2l6ZW9mIChpbnQpKQorKwkJCXsKKysJCQkgIC8qIHB0cmRpZmZfdCA9IGxvbmcgKi8KKysJCQkgIGZsYWdzICs9IDg7CisrCQkJfQorKwkJICAgICAgY3ArKzsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICBicmVhazsKKysJCX0KKysKKysJICAgICAgLyogUmVhZCB0aGUgY29udmVyc2lvbiBjaGFyYWN0ZXIuICAqLworKwkgICAgICBjID0gKmNwKys7CisrCSAgICAgIHN3aXRjaCAoYykKKysJCXsKKysJCWNhc2UgJ2QnOiBjYXNlICdpJzoKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdJTlQ7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMikKKysJCSAgICB0eXBlID0gVFlQRV9TQ0hBUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAxKQorKwkJICAgIHR5cGUgPSBUWVBFX1NIT1JUOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ28nOiBjYXNlICd1JzogY2FzZSAneCc6IGNhc2UgJ1gnOgorKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICBpZiAoZmxhZ3MgPj0gMTYgfHwgKGZsYWdzICYgNCkpCisrCQkgICAgdHlwZSA9IFRZUEVfVUxPTkdMT05HSU5UOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX1VMT05HSU5UOworKwkJICBlbHNlIGlmIChmbGFncyAmIDIpCisrCQkgICAgdHlwZSA9IFRZUEVfVUNIQVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9VU0hPUlQ7CisrCQkgIGVsc2UKKysJCSAgICB0eXBlID0gVFlQRV9VSU5UOworKwkJICBicmVhazsKKysJCWNhc2UgJ2YnOiBjYXNlICdGJzogY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQljYXNlICdhJzogY2FzZSAnQSc6CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgaWYgKGZsYWdzID49IDE2IHx8IChmbGFncyAmIDQpKQorKwkJICAgIHR5cGUgPSBUWVBFX0xPTkdET1VCTEU7CisrCQkgIGVsc2UKKysjZW5kaWYKKysJCSAgdHlwZSA9IFRZUEVfRE9VQkxFOworKwkJICBicmVhazsKKysJCWNhc2UgJ2MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XSU5UX1QKKysJCSAgICB0eXBlID0gVFlQRV9XSURFX0NIQVI7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ0hBUjsKKysJCSAgYnJlYWs7CisrI2lmZGVmIEhBVkVfV0lOVF9UCisrCQljYXNlICdDJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9DSEFSOworKwkJICBjID0gJ2MnOworKwkJICBicmVhazsKKysjZW5kaWYKKysJCWNhc2UgJ3MnOgorKwkJICBpZiAoZmxhZ3MgPj0gOCkKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQkgICAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrI2Vsc2UKKysJCSAgICBnb3RvIGVycm9yOworKyNlbmRpZgorKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfU1RSSU5HOworKwkJICBicmVhazsKKysjaWZkZWYgSEFWRV9XQ0hBUl9UCisrCQljYXNlICdTJzoKKysJCSAgdHlwZSA9IFRZUEVfV0lERV9TVFJJTkc7CisrCQkgIGMgPSAncyc7CisrCQkgIGJyZWFrOworKyNlbmRpZgorKwkJY2FzZSAncCc6CisrCQkgIHR5cGUgPSBUWVBFX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnbic6CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGlmIChmbGFncyA+PSAxNiB8fCAoZmxhZ3MgJiA0KSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9MT05HTE9OR0lOVF9QT0lOVEVSOworKwkJICBlbHNlCisrI2VuZGlmCisrCQkgIGlmIChmbGFncyA+PSA4KQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjsKKysJCSAgZWxzZSBpZiAoZmxhZ3MgJiAyKQorKwkJICAgIHR5cGUgPSBUWVBFX0NPVU5UX1NDSEFSX1BPSU5URVI7CisrCQkgIGVsc2UgaWYgKGZsYWdzICYgMSkKKysJCSAgICB0eXBlID0gVFlQRV9DT1VOVF9TSE9SVF9QT0lOVEVSOworKwkJICBlbHNlCisrCQkgICAgdHlwZSA9IFRZUEVfQ09VTlRfSU5UX1BPSU5URVI7CisrCQkgIGJyZWFrOworKwkJY2FzZSAnJSc6CisrCQkgIHR5cGUgPSBUWVBFX05PTkU7CisrCQkgIGJyZWFrOworKwkJZGVmYXVsdDoKKysJCSAgLyogVW5rbm93biBjb252ZXJzaW9uIGNoYXJhY3Rlci4gICovCisrCQkgIGdvdG8gZXJyb3I7CisrCQl9CisrCSAgICB9CisrCisrCSAgICBpZiAodHlwZSAhPSBUWVBFX05PTkUpCisrCSAgICAgIHsKKysJCWRwLT5hcmdfaW5kZXggPSBhcmdfaW5kZXg7CisrCQlpZiAoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkKKysJCSAgeworKwkJICAgIGRwLT5hcmdfaW5kZXggPSBhcmdfcG9zbisrOworKwkJICAgIGlmIChkcC0+YXJnX2luZGV4ID09IEFSR19OT05FKQorKwkJICAgICAgLyogYXJnX3Bvc24gd3JhcHBlZCBhcm91bmQuICAqLworKwkJICAgICAgZ290byBlcnJvcjsKKysJCSAgfQorKwkJUkVHSVNURVJfQVJHIChkcC0+YXJnX2luZGV4LCB0eXBlKTsKKysJICAgICAgfQorKwkgICAgZHAtPmNvbnZlcnNpb24gPSBjOworKwkgICAgZHAtPmRpcl9lbmQgPSBjcDsKKysJICB9CisrCisrCSAgZC0+Y291bnQrKzsKKysJICBpZiAoZC0+Y291bnQgPj0gZF9hbGxvY2F0ZWQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtZW1vcnlfc2l6ZTsKKysJICAgICAgRElSRUNUSVZFICptZW1vcnk7CisrCisrCSAgICAgIGRfYWxsb2NhdGVkID0geHRpbWVzIChkX2FsbG9jYXRlZCwgMik7CisrCSAgICAgIG1lbW9yeV9zaXplID0geHRpbWVzIChkX2FsbG9jYXRlZCwgc2l6ZW9mIChESVJFQ1RJVkUpKTsKKysJICAgICAgaWYgKHNpemVfb3ZlcmZsb3dfcCAobWVtb3J5X3NpemUpKQorKwkJLyogT3ZlcmZsb3csIHdvdWxkIGxlYWQgdG8gb3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBtZW1vcnkgPSByZWFsbG9jIChkLT5kaXIsIG1lbW9yeV9zaXplKTsKKysJICAgICAgaWYgKG1lbW9yeSA9PSBOVUxMKQorKwkJLyogT3V0IG9mIG1lbW9yeS4gICovCisrCQlnb3RvIGVycm9yOworKwkgICAgICBkLT5kaXIgPSBtZW1vcnk7CisrCSAgICB9CisrCX0KKysgICAgfQorKyAgZC0+ZGlyW2QtPmNvdW50XS5kaXJfc3RhcnQgPSBjcDsKKysKKysgIGQtPm1heF93aWR0aF9sZW5ndGggPSBtYXhfd2lkdGhfbGVuZ3RoOworKyAgZC0+bWF4X3ByZWNpc2lvbl9sZW5ndGggPSBtYXhfcHJlY2lzaW9uX2xlbmd0aDsKKysgIHJldHVybiAwOworKworK2Vycm9yOgorKyAgaWYgKGEtPmFyZykKKysgICAgZnJlZSAoYS0+YXJnKTsKKysgIGlmIChkLT5kaXIpCisrICAgIGZyZWUgKGQtPmRpcik7CisrICByZXR1cm4gLTE7CisrfQorKworKyN1bmRlZiBESVJFQ1RJVkVTCisrI3VuZGVmIERJUkVDVElWRQorKyN1bmRlZiBDSEFSX1QKKysjdW5kZWYgUFJJTlRGX1BBUlNFCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvcHJpbnRmLXBhcnNlLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42Mjg3MDY1OTIgLTA0MDAKK0BAIC0wLDAgKzEsNzUgQEAKKysvKiBQYXJzZSBwcmludGYgZm9ybWF0IHN0cmluZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDItMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKyAgIFVTQS4gICovCisrCisrI2lmbmRlZiBfUFJJTlRGX1BBUlNFX0gKKysjZGVmaW5lIF9QUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCBjaGFyKiBkaXJfc3RhcnQ7CisrICBjb25zdCBjaGFyKiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3QgY2hhciogd2lkdGhfc3RhcnQ7CisrICBjb25zdCBjaGFyKiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3QgY2hhciogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgY2hhciBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK2NoYXJfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgY2hhcl9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKytjaGFyX2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHByaW50Zl9wYXJzZSAoY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyX2RpcmVjdGl2ZXMgKmQsIGFyZ3VtZW50cyAqYSk7CisrCisrI2VuZGlmIC8qIF9QUklOVEZfUEFSU0VfSCAqLworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3JlZi1hZGQuc2luCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlZi1hZGQuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjMzNzA1ODMyIC0wNDAwCitAQCAtMCwwICsxLDMxIEBACisrIyBBZGQgdGhpcyBwYWNrYWdlIHRvIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICB0YQorKyAgOmEKKysgIHMvIEBQQUNLQUdFQCAvIEBQQUNLQUdFQCAvCisrICB0YgorKyAgcy8gJC8gQFBBQ0tBR0VAIC8KKysgIDpiCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWYtZGVsLnNpbgkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWYtZGVsLnNpbgkyMDA0LTA5LTEyIDE0OjQwOjM0LjYzODcwNTA3MiAtMDQwMAorQEAgLTAsMCArMSwyNiBAQAorKyMgUmVtb3ZlIHRoaXMgcGFja2FnZSBmcm9tIGEgbGlzdCBvZiByZWZlcmVuY2VzIHN0b3JlZCBpbiBhIHRleHQgZmlsZS4KKysjCisrIyAgIENvcHlyaWdodCAoQykgMjAwMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysjICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysjCisrIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrIyAgIFVTQS4KKysjCisrIyBXcml0dGVuIGJ5IEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPi4KKysjCisrL14jIFBhY2thZ2VzIHVzaW5nIHRoaXMgZmlsZTogLyB7CisrICBzLyMgUGFja2FnZXMgdXNpbmcgdGhpcyBmaWxlOi8vCisrICBzLyBAUEFDS0FHRUAgLyAvCisrICBzL14vIyBQYWNrYWdlcyB1c2luZyB0aGlzIGZpbGU6LworK30KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC9yZWxvY2F0YWJsZS5jCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3JlbG9jYXRhYmxlLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NDQ3MDQxNjAgLTA0MDAKK0BAIC0wLDAgKzEsNDQ5IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3IgZ2V0bGluZSgpLgorKyAgIFRoaXMgbXVzdCBjb21lIGJlZm9yZSA8Y29uZmlnLmg+IGJlY2F1c2UgPGNvbmZpZy5oPiBtYXkgaW5jbHVkZQorKyAgIDxmZWF0dXJlcy5oPiwgYW5kIG9uY2UgPGZlYXR1cmVzLmg+IGhhcyBiZWVuIGluY2x1ZGVkLCBpdCdzIHRvbyBsYXRlLiAgKi8KKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UJMQorKyNlbmRpZgorKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaW5jbHVkZSAicmVsb2NhdGFibGUuaCIKKysKKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrCisrI2lmZGVmIE5PX1hNQUxMT0MKKysjIGRlZmluZSB4bWFsbG9jIG1hbGxvYworKyNlbHNlCisrIyBpbmNsdWRlICJ4YWxsb2MuaCIKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18KKysjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisrIyBpbmNsdWRlIDx3aW5kb3dzLmg+CisrI2VuZGlmCisrCisrI2lmIERFUEVORFNfT05fTElCQ0hBUlNFVAorKyMgaW5jbHVkZSA8bGliY2hhcnNldC5oPgorKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklDT05WICYmIEhBVkVfSUNPTlYKKysjIGluY2x1ZGUgPGljb252Lmg+CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSU5UTCAmJiBFTkFCTEVfTkxTCisrIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisrI2VuZGlmCisrCisrLyogRmFrZWQgY2hlYXAgJ2Jvb2wnLiAgKi8KKysjdW5kZWYgYm9vbAorKyN1bmRlZiBmYWxzZQorKyN1bmRlZiB0cnVlCisrI2RlZmluZSBib29sIGludAorKyNkZWZpbmUgZmFsc2UgMAorKyNkZWZpbmUgdHJ1ZSAxCisrCisrLyogUGF0aG5hbWUgc3VwcG9ydC4KKysgICBJU1NMQVNIKEMpICAgICAgICAgICB0ZXN0cyB3aGV0aGVyIEMgaXMgYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIGNoYXJhY3Rlci4KKysgICBJU19QQVRIX1dJVEhfRElSKFApICB0ZXN0cyB3aGV0aGVyIFAgY29udGFpbnMgYSBkaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKysgKi8KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrICAvKiBXaW4zMiwgT1MvMiwgRE9TICovCisrIyBkZWZpbmUgSVNTTEFTSChDKSAoKEMpID09ICcvJyB8fCAoQykgPT0gJ1xcJykKKysjIGRlZmluZSBIQVNfREVWSUNFKFApIFwKKysgICAgKCgoKFApWzBdID49ICdBJyAmJiAoUClbMF0gPD0gJ1onKSB8fCAoKFApWzBdID49ICdhJyAmJiAoUClbMF0gPD0gJ3onKSkgXAorKyAgICAgJiYgKFApWzFdID09ICc6JykKKysjIGRlZmluZSBJU19QQVRIX1dJVEhfRElSKFApIFwKKysgICAgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMIHx8IHN0cmNociAoUCwgJ1xcJykgIT0gTlVMTCB8fCBIQVNfREVWSUNFIChQKSkKKysjIGRlZmluZSBGSUxFU1lTVEVNX1BSRUZJWF9MRU4oUCkgKEhBU19ERVZJQ0UgKFApID8gMiA6IDApCisrI2Vsc2UKKysgIC8qIFVuaXggKi8KKysjIGRlZmluZSBJU1NMQVNIKEMpICgoQykgPT0gJy8nKQorKyMgZGVmaW5lIElTX1BBVEhfV0lUSF9ESVIoUCkgKHN0cmNociAoUCwgJy8nKSAhPSBOVUxMKQorKyMgZGVmaW5lIEZJTEVTWVNURU1fUFJFRklYX0xFTihQKSAwCisrI2VuZGlmCisrCisrLyogT3JpZ2luYWwgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKm9yaWdfcHJlZml4OworK3N0YXRpYyBzaXplX3Qgb3JpZ19wcmVmaXhfbGVuOworKy8qIEN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeC4gICovCisrc3RhdGljIGNoYXIgKmN1cnJfcHJlZml4OworK3N0YXRpYyBzaXplX3QgY3Vycl9wcmVmaXhfbGVuOworKy8qIFRoZXNlIHByZWZpeGVzIGRvIG5vdCBlbmQgaW4gYSBzbGFzaC4gIEFueXRoaW5nIHRoYXQgd2lsbCBiZSBjb25jYXRlbmF0ZWQKKysgICB0byB0aGVtIG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoLiAgKi8KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGlzIG1vZHVsZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrc3RhdGljIHZvaWQKKytzZXRfdGhpc19yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLAorKwkJCSAgICBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgaWYgKG9yaWdfcHJlZml4X2FyZyAhPSBOVUxMICYmIGN1cnJfcHJlZml4X2FyZyAhPSBOVUxMCisrICAgICAgLyogT3B0aW1pemF0aW9uOiBpZiBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggYXJlIGVxdWFsLCB0aGUKKysJIHJlbG9jYXRpb24gaXMgYSBub3AuICAqLworKyAgICAgICYmIHN0cmNtcCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpICE9IDApCisrICAgIHsKKysgICAgICAvKiBEdXBsaWNhdGUgdGhlIGFyZ3VtZW50IHN0cmluZ3MuICAqLworKyAgICAgIGNoYXIgKm1lbW9yeTsKKysKKysgICAgICBvcmlnX3ByZWZpeF9sZW4gPSBzdHJsZW4gKG9yaWdfcHJlZml4X2FyZyk7CisrICAgICAgY3Vycl9wcmVmaXhfbGVuID0gc3RybGVuIChjdXJyX3ByZWZpeF9hcmcpOworKyAgICAgIG1lbW9yeSA9IChjaGFyICopIHhtYWxsb2MgKG9yaWdfcHJlZml4X2xlbiArIDEgKyBjdXJyX3ByZWZpeF9sZW4gKyAxKTsKKysjaWZkZWYgTk9fWE1BTExPQworKyAgICAgIGlmIChtZW1vcnkgIT0gTlVMTCkKKysjZW5kaWYKKysJeworKwkgIG1lbWNweSAobWVtb3J5LCBvcmlnX3ByZWZpeF9hcmcsIG9yaWdfcHJlZml4X2xlbiArIDEpOworKwkgIG9yaWdfcHJlZml4ID0gbWVtb3J5OworKwkgIG1lbW9yeSArPSBvcmlnX3ByZWZpeF9sZW4gKyAxOworKwkgIG1lbWNweSAobWVtb3J5LCBjdXJyX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2xlbiArIDEpOworKwkgIGN1cnJfcHJlZml4ID0gbWVtb3J5OworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrICBvcmlnX3ByZWZpeCA9IE5VTEw7CisrICBjdXJyX3ByZWZpeCA9IE5VTEw7CisrICAvKiBEb24ndCB3b3JyeSBhYm91dCB3YXN0ZWQgbWVtb3J5IGhlcmUgLSB0aGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgb25seQorKyAgICAgY2FsbGVkIG9uY2UuICAqLworK30KKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrdm9pZAorK3NldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXhfYXJnLCBjb25zdCBjaGFyICpjdXJyX3ByZWZpeF9hcmcpCisreworKyAgc2V0X3RoaXNfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfcHJlZml4X2FyZywgY3Vycl9wcmVmaXhfYXJnKTsKKysKKysgIC8qIE5vdyBub3RpZnkgYWxsIGRlcGVuZGVudCBsaWJyYXJpZXMuICAqLworKyNpZiBERVBFTkRTX09OX0xJQkNIQVJTRVQKKysgIGxpYmNoYXJzZXRfc2V0X3JlbG9jYXRpb25fcHJlZml4IChvcmlnX3ByZWZpeF9hcmcsIGN1cnJfcHJlZml4X2FyZyk7CisrI2VuZGlmCisrI2lmIERFUEVORFNfT05fTElCSUNPTlYgJiYgSEFWRV9JQ09OViAmJiBfTElCSUNPTlZfVkVSU0lPTiA+PSAweDAxMDkKKysgIGxpYmljb252X3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorKyNpZiBERVBFTkRTX09OX0xJQklOVEwgJiYgRU5BQkxFX05MUyAmJiBkZWZpbmVkIGxpYmludGxfc2V0X3JlbG9jYXRpb25fcHJlZml4CisrICBsaWJpbnRsX3NldF9yZWxvY2F0aW9uX3ByZWZpeCAob3JpZ19wcmVmaXhfYXJnLCBjdXJyX3ByZWZpeF9hcmcpOworKyNlbmRpZgorK30KKysKKysjaWYgIWRlZmluZWQgSU5fTElCUkFSWSB8fCAoZGVmaW5lZCBQSUMgJiYgZGVmaW5lZCBJTlNUQUxMRElSKQorKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKysjaWZkZWYgSU5fTElCUkFSWQorKyNkZWZpbmUgY29tcHV0ZV9jdXJyX3ByZWZpeCBsb2NhbF9jb21wdXRlX2N1cnJfcHJlZml4Cisrc3RhdGljCisrI2VuZGlmCisrY29uc3QgY2hhciAqCisrY29tcHV0ZV9jdXJyX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4LAorKwkJICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkgICAgIGNvbnN0IGNoYXIgKmN1cnJfcGF0aG5hbWUpCisreworKyAgY29uc3QgY2hhciAqY3Vycl9pbnN0YWxsZGlyOworKyAgY29uc3QgY2hhciAqcmVsX2luc3RhbGxkaXI7CisrCisrICBpZiAoY3Vycl9wYXRobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIERldGVybWluZSB0aGUgcmVsYXRpdmUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSwgcmVsYXRpdmUgdG8gdGhlIHByZWZpeC4KKysgICAgIFRoaXMgaXMgc2ltcGx5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gb3JpZ19pbnN0YWxscHJlZml4IGFuZAorKyAgICAgb3JpZ19pbnN0YWxsZGlyLiAgKi8KKysgIGlmIChzdHJuY21wIChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpKQorKyAgICAgICE9IDApCisrICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gLSBub3RoaW5nIHNob3VsZCBiZSBpbnN0YWxsZWQgb3V0c2lkZSAkKHByZWZpeCkuICAqLworKyAgICByZXR1cm4gTlVMTDsKKysgIHJlbF9pbnN0YWxsZGlyID0gb3JpZ19pbnN0YWxsZGlyICsgc3RybGVuIChvcmlnX2luc3RhbGxwcmVmaXgpOworKworKyAgLyogRGV0ZXJtaW5lIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuICAqLworKyAgeworKyAgICBjb25zdCBjaGFyICpwX2Jhc2UgPSBjdXJyX3BhdGhuYW1lICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX3BhdGhuYW1lKTsKKysgICAgY29uc3QgY2hhciAqcCA9IGN1cnJfcGF0aG5hbWUgKyBzdHJsZW4gKGN1cnJfcGF0aG5hbWUpOworKyAgICBjaGFyICpxOworKworKyAgICB3aGlsZSAocCA+IHBfYmFzZSkKKysgICAgICB7CisrCXAtLTsKKysJaWYgKElTU0xBU0ggKCpwKSkKKysJICBicmVhazsKKysgICAgICB9CisrCisrICAgIHEgPSAoY2hhciAqKSB4bWFsbG9jIChwIC0gY3Vycl9wYXRobmFtZSArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgIGlmIChxID09IE5VTEwpCisrICAgICAgcmV0dXJuIE5VTEw7CisrI2VuZGlmCisrICAgIG1lbWNweSAocSwgY3Vycl9wYXRobmFtZSwgcCAtIGN1cnJfcGF0aG5hbWUpOworKyAgICBxW3AgLSBjdXJyX3BhdGhuYW1lXSA9ICdcMCc7CisrICAgIGN1cnJfaW5zdGFsbGRpciA9IHE7CisrICB9CisrCisrICAvKiBDb21wdXRlIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXggYnkgcmVtb3ZpbmcgdGhlIHRyYWlsaW5nCisrICAgICByZWxfaW5zdGFsbGRpciBmcm9tIGl0LiAgKi8KKysgIHsKKysgICAgY29uc3QgY2hhciAqcnAgPSByZWxfaW5zdGFsbGRpciArIHN0cmxlbiAocmVsX2luc3RhbGxkaXIpOworKyAgICBjb25zdCBjaGFyICpjcCA9IGN1cnJfaW5zdGFsbGRpciArIHN0cmxlbiAoY3Vycl9pbnN0YWxsZGlyKTsKKysgICAgY29uc3QgY2hhciAqY3BfYmFzZSA9CisrICAgICAgY3Vycl9pbnN0YWxsZGlyICsgRklMRVNZU1RFTV9QUkVGSVhfTEVOIChjdXJyX2luc3RhbGxkaXIpOworKworKyAgICB3aGlsZSAocnAgPiByZWxfaW5zdGFsbGRpciAmJiBjcCA+IGNwX2Jhc2UpCisrICAgICAgeworKwlib29sIHNhbWUgPSBmYWxzZTsKKysJY29uc3QgY2hhciAqcnBpID0gcnA7CisrCWNvbnN0IGNoYXIgKmNwaSA9IGNwOworKworKwl3aGlsZSAocnBpID4gcmVsX2luc3RhbGxkaXIgJiYgY3BpID4gY3BfYmFzZSkKKysJICB7CisrCSAgICBycGktLTsKKysJICAgIGNwaS0tOworKwkgICAgaWYgKElTU0xBU0ggKCpycGkpIHx8IElTU0xBU0ggKCpjcGkpKQorKwkgICAgICB7CisrCQlpZiAoSVNTTEFTSCAoKnJwaSkgJiYgSVNTTEFTSCAoKmNwaSkpCisrCQkgIHNhbWUgPSB0cnVlOworKwkJYnJlYWs7CisrCSAgICAgIH0KKysjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18gfHwgZGVmaW5lZCBfX0VNWF9fIHx8IGRlZmluZWQgX19ESkdQUF9fCisrCSAgICAvKiBXaW4zMiwgT1MvMiwgRE9TIC0gY2FzZSBpbnNpZ25pZmljYW50IGZpbGVzeXN0ZW0gKi8KKysJICAgIGlmICgoKnJwaSA+PSAnYScgJiYgKnJwaSA8PSAneicgPyAqcnBpIC0gJ2EnICsgJ0EnIDogKnJwaSkKKysJCSE9ICgqY3BpID49ICdhJyAmJiAqY3BpIDw9ICd6JyA/ICpjcGkgLSAnYScgKyAnQScgOiAqY3BpKSkKKysJICAgICAgYnJlYWs7CisrI2Vsc2UKKysJICAgIGlmICgqcnBpICE9ICpjcGkpCisrCSAgICAgIGJyZWFrOworKyNlbmRpZgorKwkgIH0KKysJaWYgKCFzYW1lKQorKwkgIGJyZWFrOworKwkvKiBUaGUgbGFzdCBwYXRobmFtZSBjb21wb25lbnQgd2FzIHRoZSBzYW1lLiAgb3BpIGFuZCBjcGkgbm93IHBvaW50CisrCSAgIHRvIHRoZSBzbGFzaCBiZWZvcmUgaXQuICAqLworKwlycCA9IHJwaTsKKysJY3AgPSBjcGk7CisrICAgICAgfQorKworKyAgICBpZiAocnAgPiByZWxfaW5zdGFsbGRpcikKKysgICAgICAvKiBVbmV4cGVjdGVkOiBUaGUgY3Vycl9pbnN0YWxsZGlyIGRvZXMgbm90IGVuZCB3aXRoIHJlbF9pbnN0YWxsZGlyLiAgKi8KKysgICAgICByZXR1cm4gTlVMTDsKKysKKysgICAgeworKyAgICAgIHNpemVfdCBjdXJyX3ByZWZpeF9sZW4gPSBjcCAtIGN1cnJfaW5zdGFsbGRpcjsKKysgICAgICBjaGFyICpjdXJyX3ByZWZpeDsKKysKKysgICAgICBjdXJyX3ByZWZpeCA9IChjaGFyICopIHhtYWxsb2MgKGN1cnJfcHJlZml4X2xlbiArIDEpOworKyNpZmRlZiBOT19YTUFMTE9DCisrICAgICAgaWYgKGN1cnJfcHJlZml4ID09IE5VTEwpCisrCXJldHVybiBOVUxMOworKyNlbmRpZgorKyAgICAgIG1lbWNweSAoY3Vycl9wcmVmaXgsIGN1cnJfaW5zdGFsbGRpciwgY3Vycl9wcmVmaXhfbGVuKTsKKysgICAgICBjdXJyX3ByZWZpeFtjdXJyX3ByZWZpeF9sZW5dID0gJ1wwJzsKKysKKysgICAgICByZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgIH0KKysgIH0KKyt9CisrCisrI2VuZGlmIC8qICFJTl9MSUJSQVJZIHx8IFBJQyAqLworKworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysKKysvKiBGdWxsIHBhdGhuYW1lIG9mIHNoYXJlZCBsaWJyYXJ5LCBvciBOVUxMLiAgKi8KKytzdGF0aWMgY2hhciAqc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrCisrI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fCisrCisrLyogRGV0ZXJtaW5lIHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB3aGVuIGl0IGlzIGxvYWRlZC4gICovCisrCisrQk9PTCBXSU5BUEkKKytEbGxNYWluIChISU5TVEFOQ0UgbW9kdWxlX2hhbmRsZSwgRFdPUkQgZXZlbnQsIExQVk9JRCByZXNlcnZlZCkKKyt7CisrICAodm9pZCkgcmVzZXJ2ZWQ7CisrCisrICBpZiAoZXZlbnQgPT0gRExMX1BST0NFU1NfQVRUQUNIKQorKyAgICB7CisrICAgICAgLyogVGhlIERMTCBpcyBiZWluZyBsb2FkZWQgaW50byBhbiBhcHBsaWNhdGlvbidzIGFkZHJlc3MgcmFuZ2UuICAqLworKyAgICAgIHN0YXRpYyBjaGFyIGxvY2F0aW9uW01BWF9QQVRIXTsKKysKKysgICAgICBpZiAoIUdldE1vZHVsZUZpbGVOYW1lIChtb2R1bGVfaGFuZGxlLCBsb2NhdGlvbiwgc2l6ZW9mIChsb2NhdGlvbikpKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIGlmICghSVNfUEFUSF9XSVRIX0RJUiAobG9jYXRpb24pKQorKwkvKiBTaG91bGRuJ3QgaGFwcGVuLiAgKi8KKysJcmV0dXJuIEZBTFNFOworKworKyAgICAgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gc3RyZHVwIChsb2NhdGlvbik7CisrICAgIH0KKysKKysgIHJldHVybiBUUlVFOworK30KKysKKysjZWxzZSAvKiBVbml4ICovCisrCisrc3RhdGljIHZvaWQKKytmaW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lICgpCisreworKyNpZiBkZWZpbmVkIF9fbGludXhfXyAmJiBfX0dMSUJDX18gPj0gMgorKyAgLyogTGludXggaGFzIC9wcm9jL3NlbGYvbWFwcy4gZ2xpYmMgMiBoYXMgdGhlIGdldGxpbmUoKSBmdW5jdGlvbi4gICovCisrICBGSUxFICpmcDsKKysKKysgIC8qIE9wZW4gdGhlIGN1cnJlbnQgcHJvY2VzcycgbWFwcyBmaWxlLiAgSXQgZGVzY3JpYmVzIG9uZSBWTUEgcGVyIGxpbmUuICAqLworKyAgZnAgPSBmb3BlbiAoIi9wcm9jL3NlbGYvbWFwcyIsICJyIik7CisrICBpZiAoZnApCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJmZpbmRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWU7CisrICAgICAgZm9yICg7OykKKysJeworKwkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKysJICBpbnQgYzsKKysKKysJICBpZiAoZnNjYW5mIChmcCwgIiVseC0lbHgiLCAmc3RhcnQsICZlbmQpICE9IDIpCisrCSAgICBicmVhazsKKysJICBpZiAoYWRkcmVzcyA+PSBzdGFydCAmJiBhZGRyZXNzIDw9IGVuZCAtIDEpCisrCSAgICB7CisrCSAgICAgIC8qIEZvdW5kIGl0LiAgTm93IHNlZSBpZiB0aGlzIGxpbmUgY29udGFpbnMgYSBmaWxlbmFtZS4gICovCisrCSAgICAgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicgJiYgYyAhPSAnLycpCisrCQljb250aW51ZTsKKysJICAgICAgaWYgKGMgPT0gJy8nKQorKwkJeworKwkJICBzaXplX3Qgc2l6ZTsKKysJCSAgaW50IGxlbjsKKysKKysJCSAgdW5nZXRjIChjLCBmcCk7CisrCQkgIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gTlVMTDsgc2l6ZSA9IDA7CisrCQkgIGxlbiA9IGdldGxpbmUgKCZzaGFyZWRfbGlicmFyeV9mdWxsbmFtZSwgJnNpemUsIGZwKTsKKysJCSAgaWYgKGxlbiA+PSAwKQorKwkJICAgIHsKKysJCSAgICAgIC8qIFN1Y2Nlc3M6IGZpbGxlZCBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZS4gICovCisrCQkgICAgICBpZiAobGVuID4gMCAmJiBzaGFyZWRfbGlicmFyeV9mdWxsbmFtZVtsZW4gLSAxXSA9PSAnXG4nKQorKwkJCXNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lW2xlbiAtIDFdID0gJ1wwJzsKKysJCSAgICB9CisrCQl9CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIHdoaWxlIChjID0gZ2V0YyAoZnApLCBjICE9IEVPRiAmJiBjICE9ICdcbicpCisrCSAgICBjb250aW51ZTsKKysJfQorKyAgICAgIGZjbG9zZSAoZnApOworKyAgICB9CisrI2VuZGlmCisrfQorKworKyNlbmRpZiAvKiBXSU4zMiAvIFVuaXggKi8KKysKKysvKiBSZXR1cm4gdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGN1cnJlbnQgc2hhcmVkIGxpYnJhcnkuCisrICAgUmV0dXJuIE5VTEwgaWYgdW5rbm93bi4KKysgICBHdWFyYW50ZWVkIHRvIHdvcmsgb25seSBvbiBMaW51eCBhbmQgV29lMzIuICAqLworK3N0YXRpYyBjaGFyICoKKytnZXRfc2hhcmVkX2xpYnJhcnlfZnVsbG5hbWUgKCkKKyt7CisrI2lmICEoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pCisrICBzdGF0aWMgYm9vbCB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworKyAgaWYgKCF0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lKQorKyAgICB7CisrICAgICAgZmluZF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKTsKKysgICAgICB0cmllZF9maW5kX3NoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lID0gdHJ1ZTsKKysgICAgfQorKyNlbmRpZgorKyAgcmV0dXJuIHNoYXJlZF9saWJyYXJ5X2Z1bGxuYW1lOworK30KKysKKysjZW5kaWYgLyogUElDICovCisrCisrLyogUmV0dXJucyB0aGUgcGF0aG5hbWUsIHJlbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uCisrICAgZGlyZWN0b3J5LiAgKi8KKytjb25zdCBjaGFyICoKKytyZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpCisreworKyNpZiBkZWZpbmVkIFBJQyAmJiBkZWZpbmVkIElOU1RBTExESVIKKysgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQ7CisrCisrICAvKiBJbml0aWFsaXphdGlvbiBjb2RlIGZvciBhIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKysgIGlmICghaW5pdGlhbGl6ZWQpCisrICAgIHsKKysgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvcmlnX3ByZWZpeCBhbmQgY3Vycl9wcmVmaXggbGlrZWx5IGhhdmUgYWxyZWFkeSBiZWVuCisrCSBzZXQgdGhyb3VnaCB0aGUgbWFpbiBwcm9ncmFtJ3Mgc2V0X3Byb2dyYW1fbmFtZV9hbmRfaW5zdGFsbGRpcgorKwkgZnVuY3Rpb24uICBUaGlzIGlzIHN1ZmZpY2llbnQgaW4gdGhlIGNhc2UgdGhhdCB0aGUgbGlicmFyeSBoYXMKKysJIGluaXRpYWxseSBiZWVuIGluc3RhbGxlZCBpbiB0aGUgc2FtZSBvcmlnX3ByZWZpeC4gIEJ1dCB3ZSBjYW4gZG8KKysJIGJldHRlciwgdG8gYWxzbyBjb3ZlciB0aGUgY2FzZXMgdGhhdCAxLiBpdCBoYXMgYmVlbiBpbnN0YWxsZWQKKysJIGluIGEgZGlmZmVyZW50IHByZWZpeCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gb3JpZ19wcmVmaXggYW5kIChsYXRlcikKKysJIHRvIGN1cnJfcHJlZml4LCAyLiB1bmxpa2UgdGhlIHByb2dyYW0sIGl0IGhhcyBub3QgbW92ZWQgYXdheSBmcm9tCisrCSBvcmlnX3ByZWZpeC4gICovCisrICAgICAgY29uc3QgY2hhciAqb3JpZ19pbnN0YWxscHJlZml4ID0gSU5TVEFMTFBSRUZJWDsKKysgICAgICBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIgPSBJTlNUQUxMRElSOworKyAgICAgIGNvbnN0IGNoYXIgKmN1cnJfcHJlZml4X2JldHRlcjsKKysKKysgICAgICBjdXJyX3ByZWZpeF9iZXR0ZXIgPQorKwljb21wdXRlX2N1cnJfcHJlZml4IChvcmlnX2luc3RhbGxwcmVmaXgsIG9yaWdfaW5zdGFsbGRpciwKKysJCQkgICAgIGdldF9zaGFyZWRfbGlicmFyeV9mdWxsbmFtZSAoKSk7CisrICAgICAgaWYgKGN1cnJfcHJlZml4X2JldHRlciA9PSBOVUxMKQorKwljdXJyX3ByZWZpeF9iZXR0ZXIgPSBjdXJyX3ByZWZpeDsKKysKKysgICAgICBzZXRfcmVsb2NhdGlvbl9wcmVmaXggKG9yaWdfaW5zdGFsbHByZWZpeCwgY3Vycl9wcmVmaXhfYmV0dGVyKTsKKysKKysgICAgICBpbml0aWFsaXplZCA9IDE7CisrICAgIH0KKysjZW5kaWYKKysKKysgIC8qIE5vdGU6IEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gcGVyZm9ybSBjYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gaGVyZSwKKysgICAgIGV2ZW4gZm9yIERPUy1saWtlIGZpbGVzeXN0ZW1zLCBiZWNhdXNlIHRoZSBwYXRobmFtZSBhcmd1bWVudCB3YXMKKysgICAgIHR5cGljYWxseSBjcmVhdGVkIGZyb20gdGhlIHNhbWUgTWFrZWZpbGUgdmFyaWFibGUgYXMgb3JpZ19wcmVmaXggY2FtZQorKyAgICAgZnJvbS4gICovCisrICBpZiAob3JpZ19wcmVmaXggIT0gTlVMTCAmJiBjdXJyX3ByZWZpeCAhPSBOVUxMCisrICAgICAgJiYgc3RybmNtcCAocGF0aG5hbWUsIG9yaWdfcHJlZml4LCBvcmlnX3ByZWZpeF9sZW4pID09IDApCisrICAgIHsKKysgICAgICBpZiAocGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXSA9PSAnXDAnKQorKwkvKiBwYXRobmFtZSBlcXVhbHMgb3JpZ19wcmVmaXguICAqLworKwlyZXR1cm4gY3Vycl9wcmVmaXg7CisrICAgICAgaWYgKElTU0xBU0ggKHBhdGhuYW1lW29yaWdfcHJlZml4X2xlbl0pKQorKwl7CisrCSAgLyogcGF0aG5hbWUgc3RhcnRzIHdpdGggb3JpZ19wcmVmaXguICAqLworKwkgIGNvbnN0IGNoYXIgKnBhdGhuYW1lX3RhaWwgPSAmcGF0aG5hbWVbb3JpZ19wcmVmaXhfbGVuXTsKKysJICBjaGFyICpyZXN1bHQgPQorKwkgICAgKGNoYXIgKikgeG1hbGxvYyAoY3Vycl9wcmVmaXhfbGVuICsgc3RybGVuIChwYXRobmFtZV90YWlsKSArIDEpOworKworKyNpZmRlZiBOT19YTUFMTE9DCisrCSAgaWYgKHJlc3VsdCAhPSBOVUxMKQorKyNlbmRpZgorKwkgICAgeworKwkgICAgICBtZW1jcHkgKHJlc3VsdCwgY3Vycl9wcmVmaXgsIGN1cnJfcHJlZml4X2xlbik7CisrCSAgICAgIHN0cmNweSAocmVzdWx0ICsgY3Vycl9wcmVmaXhfbGVuLCBwYXRobmFtZV90YWlsKTsKKysJICAgICAgcmV0dXJuIHJlc3VsdDsKKysJICAgIH0KKysJfQorKyAgICB9CisrICAvKiBOb3RoaW5nIHRvIHJlbG9jYXRlLiAgKi8KKysgIHJldHVybiBwYXRobmFtZTsKKyt9CisrCisrI2VuZGlmCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvcmVsb2NhdGFibGUuaAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9yZWxvY2F0YWJsZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjUxNzAzMDk2IC0wNDAwCitAQCAtMCwwICsxLDc3IEBACisrLyogUHJvdmlkZSByZWxvY2F0YWJsZSBwYWNrYWdlcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1JFTE9DQVRBQkxFX0gKKysjZGVmaW5lIF9SRUxPQ0FUQUJMRV9ICisrCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrCisrLyogVGhpcyBjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmUgLS1lbmFibGUtcmVsb2NhdGFibGUgb3B0aW9uLiAgKi8KKysjaWYgRU5BQkxFX1JFTE9DQVRBQkxFCisrCisrLyogV2hlbiBidWlsZGluZyBhIERMTCwgd2UgbXVzdCBleHBvcnQgc29tZSBmdW5jdGlvbnMuICBOb3RlIHRoYXQgYmVjYXVzZQorKyAgIHRoaXMgaXMgYSBwcml2YXRlIC5oIGZpbGUsIHdlIGRvbid0IG5lZWQgdG8gdXNlIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorKyAgIGluIGFueSBjYXNlLiAgKi8KKysjaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiBCVUlMRElOR19ETEwKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQgX19kZWNsc3BlYyhkbGxleHBvcnQpCisrI2Vsc2UKKysjIGRlZmluZSBSRUxPQ0FUQUJMRV9ETExfRVhQT1JURUQKKysjZW5kaWYKKysKKysvKiBTZXRzIHRoZSBvcmlnaW5hbCBhbmQgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uIHByZWZpeCBvZiB0aGUgcGFja2FnZS4KKysgICBSZWxvY2F0aW9uIHNpbXBseSByZXBsYWNlcyBhIHBhdGhuYW1lIHN0YXJ0aW5nIHdpdGggdGhlIG9yaWdpbmFsIHByZWZpeAorKyAgIGJ5IHRoZSBjb3JyZXNwb25kaW5nIHBhdGhuYW1lIHdpdGggdGhlIGN1cnJlbnQgcHJlZml4IGluc3RlYWQuICBCb3RoCisrICAgcHJlZml4ZXMgc2hvdWxkIGJlIGRpcmVjdG9yeSBuYW1lcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoIChpLmUuIHVzZSAiIgorKyAgIGluc3RlYWQgb2YgIi8iKS4gICovCisrZXh0ZXJuIFJFTE9DQVRBQkxFX0RMTF9FWFBPUlRFRCB2b2lkCisrICAgICAgIHNldF9yZWxvY2F0aW9uX3ByZWZpeCAoY29uc3QgY2hhciAqb3JpZ19wcmVmaXgsCisrCQkJICAgICAgY29uc3QgY2hhciAqY3Vycl9wcmVmaXgpOworKworKy8qIFJldHVybnMgdGhlIHBhdGhuYW1lLCByZWxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbgorKyAgIGRpcmVjdG9yeS4gICovCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiByZWxvY2F0ZSAoY29uc3QgY2hhciAqcGF0aG5hbWUpOworKworKy8qIE1lbW9yeSBtYW5hZ2VtZW50OiByZWxvY2F0ZSgpIGxlYWtzIG1lbW9yeSwgYmVjYXVzZSBpdCBoYXMgdG8gY29uc3RydWN0CisrICAgYSBmcmVzaCBwYXRobmFtZS4gIElmIHRoaXMgaXMgYSBwcm9ibGVtIGJlY2F1c2UgeW91ciBwcm9ncmFtIGNhbGxzCisrICAgcmVsb2NhdGUoKSBmcmVxdWVudGx5LCB0aGluayBhYm91dCBjYWNoaW5nIHRoZSByZXN1bHQuICAqLworKworKy8qIENvbnZlbmllbmNlIGZ1bmN0aW9uOgorKyAgIENvbXB1dGVzIHRoZSBjdXJyZW50IGluc3RhbGxhdGlvbiBwcmVmaXgsIGJhc2VkIG9uIHRoZSBvcmlnaW5hbAorKyAgIGluc3RhbGxhdGlvbiBwcmVmaXgsIHRoZSBvcmlnaW5hbCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IG9mIGEgcGFydGljdWxhcgorKyAgIGZpbGUsIGFuZCB0aGUgY3VycmVudCBwYXRobmFtZSBvZiB0aGlzIGZpbGUuICBSZXR1cm5zIE5VTEwgdXBvbiBmYWlsdXJlLiAgKi8KKytleHRlcm4gY29uc3QgY2hhciAqIGNvbXB1dGVfY3Vycl9wcmVmaXggKGNvbnN0IGNoYXIgKm9yaWdfaW5zdGFsbHByZWZpeCwKKysJCQkJCSBjb25zdCBjaGFyICpvcmlnX2luc3RhbGxkaXIsCisrCQkJCQkgY29uc3QgY2hhciAqY3Vycl9wYXRobmFtZSk7CisrCisrI2Vsc2UKKysKKysvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgdGhlIGhhcmR3aXJlZCBwYXRobmFtZXMuICAqLworKyNkZWZpbmUgcmVsb2NhdGUocGF0aG5hbWUpIChwYXRobmFtZSkKKysKKysjZW5kaWYKKysKKysKKysjaWZkZWYgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9SRUxPQ0FUQUJMRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdGV4dGRvbWFpbi5jCTE5OTgtMDQtMjYgMDk6MjI6MzcuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3RleHRkb21haW4uYwkyMDA0LTA5LTEyIDE0OjQwOjM0LjY1NjcwMjMzNiAtMDQwMAorQEAgLTEsNTEgKzEsNjAgQEAKKy0vKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbgorLSAgIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0gICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgMTk5NS4KKysvKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgdGV4dGRvbWFpbigzKSBmdW5jdGlvbi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgMjAwMC0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIAorLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorIAorICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAKKy0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCistICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKyAKKyAjaWZkZWYgSEFWRV9DT05GSUdfSAorICMgaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgX0xJQkMKKy0jIGluY2x1ZGUgPHN0ZGxpYi5oPgorLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIF9MSUJDCistIyBpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjZWxzZQorLSMgaW5jbHVkZSA8c3RyaW5ncy5oPgorLSMgaWZuZGVmIG1lbWNweQorLSMgIGRlZmluZSBtZW1jcHkoRHN0LCBTcmMsIE51bSkgYmNvcHkgKFNyYywgRHN0LCBOdW0pCistIyBlbmRpZgorKyMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorKyNpbmNsdWRlICJnZXR0ZXh0UC5oIgorIAorICNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8bGliaW50bC5oPgorKy8qIFdlIGhhdmUgdG8gaGFuZGxlIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucy4gICovCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNlbHNlCistIyBpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCisrLyogUHJvdmlkZSBkdW1teSBpbXBsZW1lbnRhdGlvbiBpZiB0aGlzIGlzIG91dHNpZGUgZ2xpYmMuICAqLworKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfZGVmaW5lKENMQVNTLCBOQU1FKQorKyMgZGVmaW5lIF9fbGliY19yd2xvY2tfd3Jsb2NrKE5BTUUpCisrIyBkZWZpbmUgX19saWJjX3J3bG9ja191bmxvY2soTkFNRSkKKysjZW5kaWYKKysKKysvKiBUaGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIHRoZSBzdGFuZGFsb25lIGxpYmludGwuYSBtdXN0IGhhdmUgZGlmZmVyZW50CisrICAgbmFtZXMgdGhhbiB0aGUgaW50ZXJuYWwgdmFyaWFibGVzIGluIEdOVSBsaWJjLCBvdGhlcndpc2UgcHJvZ3JhbXMKKysgICB1c2luZyBsaWJpbnRsLmEgY2Fubm90IGJlIGxpbmtlZCBzdGF0aWNhbGx5LiAgKi8KKysjaWYgIWRlZmluZWQgX0xJQkMKKysjIGRlZmluZSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4KKysjIGRlZmluZSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBsaWJpbnRsX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4KKyAjZW5kaWYKKyAKKyAvKiBAQCBlbmQgb2YgcHJvbG9nIEBAICovCisgCisgLyogTmFtZSBvZiB0aGUgZGVmYXVsdCB0ZXh0IGRvbWFpbi4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW5bXTsKKytleHRlcm4gY29uc3QgY2hhciBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbltdIGF0dHJpYnV0ZV9oaWRkZW47CisgCisgLyogRGVmYXVsdCB0ZXh0IGRvbWFpbiBpbiB3aGljaCBlbnRyaWVzIGZvciBnZXR0ZXh0KDMpIGFyZSB0byBiZSBmb3VuZC4gICovCistZXh0ZXJuIGNvbnN0IGNoYXIgKl9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICpfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiBhdHRyaWJ1dGVfaGlkZGVuOworIAorIAorIC8qIE5hbWVzIGZvciB0aGUgbGliaW50bCBmdW5jdGlvbnMgYXJlIGEgcHJvYmxlbS4gIFRoZXkgbXVzdCBub3QgY2xhc2gKK0BAIC01NCw1MCArNjMsNzYgQEAKKyAgICBwcmVmaXguICBTbyB3ZSBoYXZlIHRvIG1ha2UgYSBkaWZmZXJlbmNlIGhlcmUuICAqLworICNpZmRlZiBfTElCQworICMgZGVmaW5lIFRFWFRET01BSU4gX190ZXh0ZG9tYWluCistIyBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGlmbmRlZiBzdHJkdXAKKysjICBkZWZpbmUgc3RyZHVwKHN0cikgX19zdHJkdXAgKHN0cikKKysjIGVuZGlmCisgI2Vsc2UKKy0jIGRlZmluZSBURVhURE9NQUlOIHRleHRkb21haW5fXworKyMgZGVmaW5lIFRFWFRET01BSU4gbGliaW50bF90ZXh0ZG9tYWluCisgI2VuZGlmCisgCisrLyogTG9jayB2YXJpYWJsZSB0byBwcm90ZWN0IHRoZSBnbG9iYWwgZGF0YSBpbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbi4gICovCisrX19saWJjX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX25sX3N0YXRlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKysKKyAvKiBTZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBtZXNzYWdlIGNhdGFsb2cgdG8gRE9NQUlOTkFNRS4KKyAgICBJZiBET01BSU5OQU1FIGlzIG51bGwsIHJldHVybiB0aGUgY3VycmVudCBkZWZhdWx0LgorICAgIElmIERPTUFJTk5BTUUgaXMgIiIsIHJlc2V0IHRvIHRoZSBkZWZhdWx0IG9mICJtZXNzYWdlcyIuICAqLworIGNoYXIgKgorLVRFWFRET01BSU4gKGRvbWFpbm5hbWUpCistICAgICBjb25zdCBjaGFyICpkb21haW5uYW1lOworK1RFWFRET01BSU4gKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCisgeworLSAgY2hhciAqb2xkOworKyAgY2hhciAqbmV3X2RvbWFpbjsKKysgIGNoYXIgKm9sZF9kb21haW47CisgCisgICAvKiBBIE5VTEwgcG9pbnRlciByZXF1ZXN0cyB0aGUgY3VycmVudCBzZXR0aW5nLiAgKi8KKyAgIGlmIChkb21haW5uYW1lID09IE5VTEwpCisgICAgIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKy0gIG9sZCA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgX19saWJjX3J3bG9ja193cmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKysKKysgIG9sZF9kb21haW4gPSAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKyAKKyAgIC8qIElmIGRvbWFpbiBuYW1lIGlzIHRoZSBudWxsIHN0cmluZyBzZXQgdG8gZGVmYXVsdCBkb21haW4gIm1lc3NhZ2VzIi4gICovCisgICBpZiAoZG9tYWlubmFtZVswXSA9PSAnXDAnCisgICAgICAgfHwgc3RyY21wIChkb21haW5uYW1lLCBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbikgPT0gMCkKKy0gICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBfbmxfZGVmYXVsdF9kZWZhdWx0X2RvbWFpbjsKKysgICAgeworKyAgICAgIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluID0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW47CisrICAgICAgbmV3X2RvbWFpbiA9IChjaGFyICopIF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluOworKyAgICB9CisrICBlbHNlIGlmIChzdHJjbXAgKGRvbWFpbm5hbWUsIG9sZF9kb21haW4pID09IDApCisrICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBhbmQgcGVvcGxlIHdpbGwgdXNlIGl0IHRvIHNpZ25hbCB0aGF0IHNvbWUKKysgICAgICAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlZC4gICovCisrICAgIG5ld19kb21haW4gPSBvbGRfZG9tYWluOworICAgZWxzZQorICAgICB7CisgICAgICAgLyogSWYgdGhlIGZvbGxvd2luZyBtYWxsb2MgZmFpbHMgYF9ubF9jdXJyZW50X2RlZmF1bHRfZG9tYWluJworIAkgd2lsbCBiZSBOVUxMLiAgVGhpcyB2YWx1ZSB3aWxsIGJlIHJldHVybmVkIGFuZCBzbyBzaWduYWxzIHdlCisgCSBhcmUgb3V0IG9mIGNvcmUuICAqLworICNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9TVFJEVVAKKy0gICAgICBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisrICAgICAgbmV3X2RvbWFpbiA9IHN0cmR1cCAoZG9tYWlubmFtZSk7CisgI2Vsc2UKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChkb21haW5uYW1lKSArIDE7CistICAgICAgY2hhciAqY3AgPSAoY2hhciAqKSBtYWxsb2MgKGxlbik7CistICAgICAgaWYgKGNwICE9IE5VTEwpCistCW1lbWNweSAoY3AsIGRvbWFpbm5hbWUsIGxlbik7CistICAgICAgX25sX2N1cnJlbnRfZGVmYXVsdF9kb21haW4gPSBjcDsKKysgICAgICBuZXdfZG9tYWluID0gKGNoYXIgKikgbWFsbG9jIChsZW4pOworKyAgICAgIGlmIChuZXdfZG9tYWluICE9IE5VTEwpCisrCW1lbWNweSAobmV3X2RvbWFpbiwgZG9tYWlubmFtZSwgbGVuKTsKKyAjZW5kaWYKKysKKysgICAgICBpZiAobmV3X2RvbWFpbiAhPSBOVUxMKQorKwlfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbiA9IG5ld19kb21haW47CisgICAgIH0KKyAKKy0gIGlmIChvbGQgIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCistICAgIGZyZWUgKG9sZCk7CisrICAvKiBXZSB1c2UgdGhpcyBwb3NzaWJpbGl0eSB0byBzaWduYWwgYSBjaGFuZ2Ugb2YgdGhlIGxvYWRlZCBjYXRhbG9ncworKyAgICAgc2luY2UgdGhpcyBpcyBtb3N0IGxpa2VseSB0aGUgY2FzZSBhbmQgdGhlcmUgaXMgbm8gb3RoZXIgZWFzeSB3ZQorKyAgICAgdG8gZG8gaXQuICBEbyBpdCBvbmx5IHdoZW4gdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwuICAqLworKyAgaWYgKG5ld19kb21haW4gIT0gTlVMTCkKKysgICAgeworKyAgICAgICsrX25sX21zZ19jYXRfY250cjsKKyAKKy0gIHJldHVybiAoY2hhciAqKSBfbmxfY3VycmVudF9kZWZhdWx0X2RvbWFpbjsKKysgICAgICBpZiAob2xkX2RvbWFpbiAhPSBuZXdfZG9tYWluICYmIG9sZF9kb21haW4gIT0gX25sX2RlZmF1bHRfZGVmYXVsdF9kb21haW4pCisrCWZyZWUgKG9sZF9kb21haW4pOworKyAgICB9CisrCisrICBfX2xpYmNfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworKworKyAgcmV0dXJuIG5ld19kb21haW47CisgfQorIAorICNpZmRlZiBfTElCQworLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9pbnRsL3Zhc25wcmludGYuYwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC92YXNucHJpbnRmLmMJMjAwNC0wOS0xMiAxNDo0MDozNC42NjI3MDE0MjQgLTA0MDAKK0BAIC0wLDAgKzEsODg3IEBACisrLyogdnNwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKy8qIFRlbGwgZ2xpYmMncyA8c3RkaW8uaD4gdG8gcHJvdmlkZSBhIHByb3RvdHlwZSBmb3Igc25wcmludGYoKS4KKysgICBUaGlzIG11c3QgY29tZSBiZWZvcmUgPGNvbmZpZy5oPiBiZWNhdXNlIDxjb25maWcuaD4gbWF5IGluY2x1ZGUKKysgICA8ZmVhdHVyZXMuaD4sIGFuZCBvbmNlIDxmZWF0dXJlcy5oPiBoYXMgYmVlbiBpbmNsdWRlZCwgaXQncyB0b28gbGF0ZS4gICovCisrI2lmbmRlZiBfR05VX1NPVVJDRQorKyMgZGVmaW5lIF9HTlVfU09VUkNFICAgIDEKKysjZW5kaWYKKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrI2lmbmRlZiBJTl9MSUJJTlRMCisrIyBpbmNsdWRlIDxhbGxvY2EuaD4KKysjZW5kaWYKKysKKysvKiBTcGVjaWZpY2F0aW9uLiAgKi8KKysjaWYgV0lERV9DSEFSX1ZFUlNJT04KKysjIGluY2x1ZGUgInZhc253cHJpbnRmLmgiCisrI2Vsc2UKKysjIGluY2x1ZGUgInZhc25wcmludGYuaCIKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4JLyogc25wcmludGYoKSwgc3ByaW50ZigpICovCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgkvKiBhYm9ydCgpLCBtYWxsb2MoKSwgcmVhbGxvYygpLCBmcmVlKCkgKi8KKysjaW5jbHVkZSA8c3RyaW5nLmg+CS8qIG1lbWNweSgpLCBzdHJsZW4oKSAqLworKyNpbmNsdWRlIDxlcnJuby5oPgkvKiBlcnJubyAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4JLyogQ0hBUl9CSVQgKi8KKysjaW5jbHVkZSA8ZmxvYXQuaD4JLyogREJMX01BWF9FWFAsIExEQkxfTUFYX0VYUCAqLworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgaW5jbHVkZSAid3ByaW50Zi1wYXJzZS5oIgorKyNlbHNlCisrIyBpbmNsdWRlICJwcmludGYtcGFyc2UuaCIKKysjZW5kaWYKKysKKysvKiBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuICAqLworKyNpbmNsdWRlICJ4c2l6ZS5oIgorKworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysjIGlmZGVmIEhBVkVfV0NTTEVOCisrIyAgZGVmaW5lIGxvY2FsX3djc2xlbiB3Y3NsZW4KKysjIGVsc2UKKysgICAvKiBTb2xhcmlzIDIuNS4xIGhhcyB3Y3NsZW4oKSBpbiBhIHNlcGFyYXRlIGxpYnJhcnkgbGlidy5zby4gVG8gYXZvaWQKKysgICAgICBhIGRlcGVuZGVuY3kgdG93YXJkcyB0aGlzIGxpYnJhcnksIGhlcmUgaXMgYSBsb2NhbCBzdWJzdGl0dXRlLgorKyAgICAgIERlZmluZSB0aGlzIHN1YnN0aXR1dGUgb25seSBvbmNlLCBldmVuIGlmIHRoaXMgZmlsZSBpcyBpbmNsdWRlZAorKyAgICAgIHR3aWNlIGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuICAqLworKyMgIGlmbmRlZiBsb2NhbF93Y3NsZW5fZGVmaW5lZAorKyMgICBkZWZpbmUgbG9jYWxfd2NzbGVuX2RlZmluZWQgMQorK3N0YXRpYyBzaXplX3QKKytsb2NhbF93Y3NsZW4gKGNvbnN0IHdjaGFyX3QgKnMpCisreworKyAgY29uc3Qgd2NoYXJfdCAqcHRyOworKworKyAgZm9yIChwdHIgPSBzOyAqcHRyICE9ICh3Y2hhcl90KSAwOyBwdHIrKykKKysgICAgOworKyAgcmV0dXJuIHB0ciAtIHM7CisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpZiBXSURFX0NIQVJfVkVSU0lPTgorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbndwcmludGYKKysjIGRlZmluZSBDSEFSX1Qgd2NoYXJfdAorKyMgZGVmaW5lIERJUkVDVElWRSB3Y2hhcl90X2RpcmVjdGl2ZQorKyMgZGVmaW5lIERJUkVDVElWRVMgd2NoYXJfdF9kaXJlY3RpdmVzCisrIyBkZWZpbmUgUFJJTlRGX1BBUlNFIHdwcmludGZfcGFyc2UKKysjIGRlZmluZSBVU0VfU05QUklOVEYgMQorKyMgaWYgSEFWRV9ERUNMX19TTldQUklOVEYKKysgICAvKiBPbiBXaW5kb3dzLCB0aGUgZnVuY3Rpb24gc3dwcmludGYoKSBoYXMgYSBkaWZmZXJlbnQgc2lnbmF0dXJlIHRoYW4KKysgICAgICBvbiBVbml4OyB3ZSB1c2UgdGhlIF9zbndwcmludGYoKSBmdW5jdGlvbiBpbnN0ZWFkLiAgKi8KKysjICBkZWZpbmUgU05QUklOVEYgX3Nud3ByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzd3ByaW50ZgorKyMgZW5kaWYKKysjZWxzZQorKyMgZGVmaW5lIFZBU05QUklOVEYgdmFzbnByaW50ZgorKyMgZGVmaW5lIENIQVJfVCBjaGFyCisrIyBkZWZpbmUgRElSRUNUSVZFIGNoYXJfZGlyZWN0aXZlCisrIyBkZWZpbmUgRElSRUNUSVZFUyBjaGFyX2RpcmVjdGl2ZXMKKysjIGRlZmluZSBQUklOVEZfUEFSU0UgcHJpbnRmX3BhcnNlCisrIyBkZWZpbmUgVVNFX1NOUFJJTlRGIChIQVZFX0RFQ0xfX1NOUFJJTlRGIHx8IEhBVkVfU05QUklOVEYpCisrIyBpZiBIQVZFX0RFQ0xfX1NOUFJJTlRGCisrICAgLyogV2luZG93cy4gICovCisrIyAgZGVmaW5lIFNOUFJJTlRGIF9zbnByaW50ZgorKyMgZWxzZQorKyAgIC8qIFVuaXguICAqLworKyMgIGRlZmluZSBTTlBSSU5URiBzbnByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKytDSEFSX1QgKgorK1ZBU05QUklOVEYgKENIQVJfVCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCisreworKyAgRElSRUNUSVZFUyBkOworKyAgYXJndW1lbnRzIGE7CisrCisrICBpZiAoUFJJTlRGX1BBUlNFIChmb3JtYXQsICZkLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgZXJybm8gPSBFSU5WQUw7CisrICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysjZGVmaW5lIENMRUFOVVAoKSBcCisrICBmcmVlIChkLmRpcik7CQkJCQkJCQlcCisrICBpZiAoYS5hcmcpCQkJCQkJCQlcCisrICAgIGZyZWUgKGEuYXJnKTsKKysKKysgIGlmIChwcmludGZfZmV0Y2hhcmdzIChhcmdzLCAmYSkgPCAwKQorKyAgICB7CisrICAgICAgQ0xFQU5VUCAoKTsKKysgICAgICBlcnJubyA9IEVJTlZBTDsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgeworKyAgICBzaXplX3QgYnVmX25lZWRlZGxlbmd0aDsKKysgICAgQ0hBUl9UICpidWY7CisrICAgIENIQVJfVCAqYnVmX21hbGxvY2VkOworKyAgICBjb25zdCBDSEFSX1QgKmNwOworKyAgICBzaXplX3QgaTsKKysgICAgRElSRUNUSVZFICpkcDsKKysgICAgLyogT3V0cHV0IHN0cmluZyBhY2N1bXVsYXRvci4gICovCisrICAgIENIQVJfVCAqcmVzdWx0OworKyAgICBzaXplX3QgYWxsb2NhdGVkOworKyAgICBzaXplX3QgbGVuZ3RoOworKworKyAgICAvKiBBbGxvY2F0ZSBhIHNtYWxsIGJ1ZmZlciB0aGF0IHdpbGwgaG9sZCBhIGRpcmVjdGl2ZSBwYXNzZWQgdG8KKysgICAgICAgc3ByaW50ZiBvciBzbnByaW50Zi4gICovCisrICAgIGJ1Zl9uZWVkZWRsZW5ndGggPQorKyAgICAgIHhzdW00ICg3LCBkLm1heF93aWR0aF9sZW5ndGgsIGQubWF4X3ByZWNpc2lvbl9sZW5ndGgsIDYpOworKyNpZiBIQVZFX0FMTE9DQQorKyAgICBpZiAoYnVmX25lZWRlZGxlbmd0aCA8IDQwMDAgLyBzaXplb2YgKENIQVJfVCkpCisrICAgICAgeworKwlidWYgPSAoQ0hBUl9UICopIGFsbG9jYSAoYnVmX25lZWRlZGxlbmd0aCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCWJ1Zl9tYWxsb2NlZCA9IE5VTEw7CisrICAgICAgfQorKyAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKwlzaXplX3QgYnVmX21lbXNpemUgPSB4dGltZXMgKGJ1Zl9uZWVkZWRsZW5ndGgsIHNpemVvZiAoQ0hBUl9UKSk7CisrCWlmIChzaXplX292ZXJmbG93X3AgKGJ1Zl9tZW1zaXplKSkKKysJICBnb3RvIG91dF9vZl9tZW1vcnlfMTsKKysJYnVmID0gKENIQVJfVCAqKSBtYWxsb2MgKGJ1Zl9tZW1zaXplKTsKKysJaWYgKGJ1ZiA9PSBOVUxMKQorKwkgIGdvdG8gb3V0X29mX21lbW9yeV8xOworKwlidWZfbWFsbG9jZWQgPSBidWY7CisrICAgICAgfQorKworKyAgICBpZiAocmVzdWx0YnVmICE9IE5VTEwpCisrICAgICAgeworKwlyZXN1bHQgPSByZXN1bHRidWY7CisrCWFsbG9jYXRlZCA9ICpsZW5ndGhwOworKyAgICAgIH0KKysgICAgZWxzZQorKyAgICAgIHsKKysJcmVzdWx0ID0gTlVMTDsKKysJYWxsb2NhdGVkID0gMDsKKysgICAgICB9CisrICAgIGxlbmd0aCA9IDA7CisrICAgIC8qIEludmFyaWFudHM6CisrICAgICAgIHJlc3VsdCBpcyBlaXRoZXIgPT0gcmVzdWx0YnVmIG9yID09IE5VTEwgb3IgbWFsbG9jLWFsbG9jYXRlZC4KKysgICAgICAgSWYgbGVuZ3RoID4gMCwgdGhlbiByZXN1bHQgIT0gTlVMTC4gICovCisrCisrICAgIC8qIEVuc3VyZXMgdGhhdCBhbGxvY2F0ZWQgPj0gbmVlZGVkLiAgQWJvcnRzIHRocm91Z2ggYSBqdW1wIHRvCisrICAgICAgIG91dF9vZl9tZW1vcnkgaWYgbmVlZGVkIGlzIFNJWkVfTUFYIG9yIG90aGVyd2lzZSB0b28gYmlnLiAgKi8KKysjZGVmaW5lIEVOU1VSRV9BTExPQ0FUSU9OKG5lZWRlZCkgXAorKyAgICBpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkJICAgICBcCisrICAgICAgewkJCQkJCQkJCSAgICAgXAorKwlzaXplX3QgbWVtb3J5X3NpemU7CQkJCQkJICAgICBcCisrCUNIQVJfVCAqbWVtb3J5OwkJCQkJCQkgICAgIFwKKysJCQkJCQkJCQkgICAgIFwKKysJYWxsb2NhdGVkID0gKGFsbG9jYXRlZCA+IDAgPyB4dGltZXMgKGFsbG9jYXRlZCwgMikgOiAxMik7CSAgICAgXAorKwlpZiAoKG5lZWRlZCkgPiBhbGxvY2F0ZWQpCQkJCQkgICAgIFwKKysJICBhbGxvY2F0ZWQgPSAobmVlZGVkKTsJCQkJCQkgICAgIFwKKysJbWVtb3J5X3NpemUgPSB4dGltZXMgKGFsbG9jYXRlZCwgc2l6ZW9mIChDSEFSX1QpKTsJCSAgICAgXAorKwlpZiAoc2l6ZV9vdmVyZmxvd19wIChtZW1vcnlfc2l6ZSkpCQkJCSAgICAgXAorKwkgIGdvdG8gb3V0X29mX21lbW9yeTsJCQkJCQkgICAgIFwKKysJaWYgKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSBtYWxsb2MgKG1lbW9yeV9zaXplKTsJCQkgICAgIFwKKysJZWxzZQkJCQkJCQkJICAgICBcCisrCSAgbWVtb3J5ID0gKENIQVJfVCAqKSByZWFsbG9jIChyZXN1bHQsIG1lbW9yeV9zaXplKTsJCSAgICAgXAorKwlpZiAobWVtb3J5ID09IE5VTEwpCQkJCQkJICAgICBcCisrCSAgZ290byBvdXRfb2ZfbWVtb3J5OwkJCQkJCSAgICAgXAorKwlpZiAocmVzdWx0ID09IHJlc3VsdGJ1ZiAmJiBsZW5ndGggPiAwKQkJCQkgICAgIFwKKysJICBtZW1jcHkgKG1lbW9yeSwgcmVzdWx0LCBsZW5ndGggKiBzaXplb2YgKENIQVJfVCkpOwkJICAgICBcCisrCXJlc3VsdCA9IG1lbW9yeTsJCQkJCQkgICAgIFwKKysgICAgICB9CisrCisrICAgIGZvciAoY3AgPSBmb3JtYXQsIGkgPSAwLCBkcCA9ICZkLmRpclswXTsgOyBjcCA9IGRwLT5kaXJfZW5kLCBpKyssIGRwKyspCisrICAgICAgeworKwlpZiAoY3AgIT0gZHAtPmRpcl9zdGFydCkKKysJICB7CisrCSAgICBzaXplX3QgbiA9IGRwLT5kaXJfc3RhcnQgLSBjcDsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoID0geHN1bSAobGVuZ3RoLCBuKTsKKysKKysJICAgIEVOU1VSRV9BTExPQ0FUSU9OIChhdWdtZW50ZWRfbGVuZ3RoKTsKKysJICAgIG1lbWNweSAocmVzdWx0ICsgbGVuZ3RoLCBjcCwgbiAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCSAgICBsZW5ndGggPSBhdWdtZW50ZWRfbGVuZ3RoOworKwkgIH0KKysJaWYgKGkgPT0gZC5jb3VudCkKKysJICBicmVhazsKKysKKysJLyogRXhlY3V0ZSBhIHNpbmdsZSBkaXJlY3RpdmUuICAqLworKwlpZiAoZHAtPmNvbnZlcnNpb24gPT0gJyUnKQorKwkgIHsKKysJICAgIHNpemVfdCBhdWdtZW50ZWRfbGVuZ3RoOworKworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCA9PSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKwkgICAgYXVnbWVudGVkX2xlbmd0aCA9IHhzdW0gKGxlbmd0aCwgMSk7CisrCSAgICBFTlNVUkVfQUxMT0NBVElPTiAoYXVnbWVudGVkX2xlbmd0aCk7CisrCSAgICByZXN1bHRbbGVuZ3RoXSA9ICclJzsKKysJICAgIGxlbmd0aCA9IGF1Z21lbnRlZF9sZW5ndGg7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgaWYgKCEoZHAtPmFyZ19pbmRleCAhPSBBUkdfTk9ORSkpCisrCSAgICAgIGFib3J0ICgpOworKworKwkgICAgaWYgKGRwLT5jb252ZXJzaW9uID09ICduJykKKysJICAgICAgeworKwkJc3dpdGNoIChhLmFyZ1tkcC0+YXJnX2luZGV4XS50eXBlKQorKwkJICB7CisrCQkgIGNhc2UgVFlQRV9DT1VOVF9TQ0hBUl9QT0lOVEVSOgorKwkJICAgICphLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfY291bnRfc2NoYXJfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX1NIT1JUX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9zaG9ydF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKwkJICBjYXNlIFRZUEVfQ09VTlRfSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9pbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdJTlRfUE9JTlRFUjoKKysJCSAgICAqYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NvdW50X2xvbmdpbnRfcG9pbnRlciA9IGxlbmd0aDsKKysJCSAgICBicmVhazsKKysjaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgY2FzZSBUWVBFX0NPVU5UX0xPTkdMT05HSU5UX1BPSU5URVI6CisrCQkgICAgKmEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9jb3VudF9sb25nbG9uZ2ludF9wb2ludGVyID0gbGVuZ3RoOworKwkJICAgIGJyZWFrOworKyNlbmRpZgorKwkJICBkZWZhdWx0OgorKwkJICAgIGFib3J0ICgpOworKwkJICB9CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJYXJnX3R5cGUgdHlwZSA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLnR5cGU7CisrCQlDSEFSX1QgKnA7CisrCQl1bnNpZ25lZCBpbnQgcHJlZml4X2NvdW50OworKwkJaW50IHByZWZpeGVzWzJdOworKyNpZiAhVVNFX1NOUFJJTlRGCisrCQlzaXplX3QgdG1wX2xlbmd0aDsKKysJCUNIQVJfVCB0bXBidWZbNzAwXTsKKysJCUNIQVJfVCAqdG1wOworKworKwkJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIG9mIHN1ZmZpY2llbnQgc2l6ZSBmb3IgY2FsbGluZworKwkJICAgc3ByaW50Zi4gICovCisrCQl7CisrCQkgIHNpemVfdCB3aWR0aDsKKysJCSAgc2l6ZV90IHByZWNpc2lvbjsKKysKKysJCSAgd2lkdGggPSAwOworKwkJICBpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT53aWR0aF9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkJeworKwkJCSAgaW50IGFyZzsKKysKKysJCQkgIGlmICghKGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLnR5cGUgPT0gVFlQRV9JTlQpKQorKwkJCSAgICBhYm9ydCAoKTsKKysJCQkgIGFyZyA9IGEuYXJnW2RwLT53aWR0aF9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICB3aWR0aCA9IChhcmcgPCAwID8gKHVuc2lnbmVkIGludCkgKC1hcmcpIDogYXJnKTsKKysJCQl9CisrCQkgICAgICBlbHNlCisrCQkJeworKwkJCSAgY29uc3QgQ0hBUl9UICpkaWdpdHAgPSBkcC0+d2lkdGhfc3RhcnQ7CisrCisrCQkJICBkbworKwkJCSAgICB3aWR0aCA9IHhzdW0gKHh0aW1lcyAod2lkdGgsIDEwKSwgKmRpZ2l0cCsrIC0gJzAnKTsKKysJCQkgIHdoaWxlIChkaWdpdHAgIT0gZHAtPndpZHRoX2VuZCk7CisrCQkJfQorKwkJICAgIH0KKysKKysJCSAgcHJlY2lzaW9uID0gNjsKKysJCSAgaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgICAgeworKwkJICAgICAgaWYgKGRwLT5wcmVjaXNpb25fYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJCXsKKysJCQkgIGludCBhcmc7CisrCisrCQkJICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkJICAgIGFib3J0ICgpOworKwkJCSAgYXJnID0gYS5hcmdbZHAtPnByZWNpc2lvbl9hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBwcmVjaXNpb24gPSAoYXJnIDwgMCA/IDAgOiBhcmcpOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQl7CisrCQkJICBjb25zdCBDSEFSX1QgKmRpZ2l0cCA9IGRwLT5wcmVjaXNpb25fc3RhcnQgKyAxOworKworKwkJCSAgcHJlY2lzaW9uID0gMDsKKysJCQkgIGRvCisrCQkJICAgIHByZWNpc2lvbiA9IHhzdW0gKHh0aW1lcyAocHJlY2lzaW9uLCAxMCksICpkaWdpdHArKyAtICcwJyk7CisrCQkJICB3aGlsZSAoZGlnaXRwICE9IGRwLT5wcmVjaXNpb25fZW5kKTsKKysJCQl9CisrCQkgICAgfQorKworKwkJICBzd2l0Y2ggKGRwLT5jb252ZXJzaW9uKQorKwkJICAgIHsKKysKKysJCSAgICBjYXNlICdkJzogY2FzZSAnaSc6IGNhc2UgJ3UnOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDE7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0lOVCB8fCB0eXBlID09IFRZUEVfVUxPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSAqIENIQVJfQklUCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduICovCisrCQkgICAgICBlbHNlCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjMwMTAzIC8qIGJpbmFyeSAtPiBkZWNpbWFsICovCisrCQkJCQkgICogMiAvKiBlc3RpbWF0ZSBmb3IgRkxBR19HUk9VUCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ28nOgorKyMgaWZkZWYgSEFWRV9MT05HX0xPTkcKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfTE9OR0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HTE9OR0lOVCkKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGxvbmcgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGVsc2UKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChzaXplb2YgKHVuc2lnbmVkIGludCkgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMzMzMzM0IC8qIGJpbmFyeSAtPiBvY3RhbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAxOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gKi8KKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3gnOiBjYXNlICdYJzoKKysjIGlmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdMT05HSU5UIHx8IHR5cGUgPT0gVFlQRV9VTE9OR0xPTkdJTlQpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcpICogQ0hBUl9CSVQKKysJCQkJCSAgKiAwLjI1IC8qIGJpbmFyeSAtPiBoZXhhZGVjaW1hbCAqLworKwkJCQkJICkKKysJCQkgICsgMSAvKiB0dXJuIGZsb29yIGludG8gY2VpbCAqLworKwkJCSAgKyAyOyAvKiBhY2NvdW50IGZvciBsZWFkaW5nIHNpZ24gb3IgYWx0ZXJuYXRlIGZvcm0gKi8KKysJCSAgICAgIGVsc2UKKysjIGVuZGlmCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdJTlQgfHwgdHlwZSA9PSBUWVBFX1VMT05HSU5UKQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgbG9uZykgKiBDSEFSX0JJVAorKwkJCQkJICAqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDI7IC8qIGFjY291bnQgZm9yIGxlYWRpbmcgc2lnbiBvciBhbHRlcm5hdGUgZm9ybSAqLworKwkJICAgICAgZWxzZQorKwkJCXRtcF9sZW5ndGggPQorKwkJCSAgKHVuc2lnbmVkIGludCkgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUCisrCQkJCQkgICogMC4yNSAvKiBiaW5hcnkgLT4gaGV4YWRlY2ltYWwgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyBzaWduIG9yIGFsdGVybmF0ZSBmb3JtICovCisrCQkgICAgICBicmVhazsKKysKKysJCSAgICBjYXNlICdmJzogY2FzZSAnRic6CisrIyBpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBpZiAodHlwZSA9PSBUWVBFX0xPTkdET1VCTEUpCisrCQkJdG1wX2xlbmd0aCA9CisrCQkJICAodW5zaWduZWQgaW50KSAoTERCTF9NQVhfRVhQCisrCQkJCQkgICogMC4zMDEwMyAvKiBiaW5hcnkgLT4gZGVjaW1hbCAqLworKwkJCQkJICAqIDIgLyogZXN0aW1hdGUgZm9yIEZMQUdfR1JPVVAgKi8KKysJCQkJCSApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMTA7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQgZXRjLiAqLworKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0KKysJCQkgICh1bnNpZ25lZCBpbnQpIChEQkxfTUFYX0VYUAorKwkJCQkJICAqIDAuMzAxMDMgLyogYmluYXJ5IC0+IGRlY2ltYWwgKi8KKysJCQkJCSAgKiAyIC8qIGVzdGltYXRlIGZvciBGTEFHX0dST1VQICovCisrCQkJCQkgKQorKwkJCSAgKyAxIC8qIHR1cm4gZmxvb3IgaW50byBjZWlsICovCisrCQkJICArIDEwOyAvKiBzaWduLCBkZWNpbWFsIHBvaW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnZSc6IGNhc2UgJ0UnOiBjYXNlICdnJzogY2FzZSAnRyc6CisrCQkgICAgY2FzZSAnYSc6IGNhc2UgJ0EnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJMTI7IC8qIHNpZ24sIGRlY2ltYWwgcG9pbnQsIGV4cG9uZW50IGV0Yy4gKi8KKysJCSAgICAgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCBwcmVjaXNpb24pOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAnYyc6CisrIyBpZiBkZWZpbmVkIEhBVkVfV0lOVF9UICYmICFXSURFX0NIQVJfVkVSU0lPTgorKwkJICAgICAgaWYgKHR5cGUgPT0gVFlQRV9XSURFX0NIQVIpCisrCQkJdG1wX2xlbmd0aCA9IE1CX0NVUl9NQVg7CisrCQkgICAgICBlbHNlCisrIyBlbmRpZgorKwkJCXRtcF9sZW5ndGggPSAxOworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgY2FzZSAncyc6CisrIyBpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGlmICh0eXBlID09IFRZUEVfV0lERV9TVFJJTkcpCisrCQkJeworKwkJCSAgdG1wX2xlbmd0aCA9CisrCQkJICAgIGxvY2FsX3djc2xlbiAoYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfc3RyaW5nKTsKKysKKysjICBpZiAhV0lERV9DSEFSX1ZFUlNJT04KKysJCQkgIHRtcF9sZW5ndGggPSB4dGltZXMgKHRtcF9sZW5ndGgsIE1CX0NVUl9NQVgpOworKyMgIGVuZGlmCisrCQkJfQorKwkJICAgICAgZWxzZQorKyMgZW5kaWYKKysJCQl0bXBfbGVuZ3RoID0gc3RybGVuIChhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfc3RyaW5nKTsKKysJCSAgICAgIGJyZWFrOworKworKwkJICAgIGNhc2UgJ3AnOgorKwkJICAgICAgdG1wX2xlbmd0aCA9CisrCQkJKHVuc2lnbmVkIGludCkgKHNpemVvZiAodm9pZCAqKSAqIENIQVJfQklUCisrCQkJCQkqIDAuMjUgLyogYmluYXJ5IC0+IGhleGFkZWNpbWFsICovCisrCQkJCSAgICAgICApCisrCQkJICArIDEgLyogdHVybiBmbG9vciBpbnRvIGNlaWwgKi8KKysJCQkgICsgMjsgLyogYWNjb3VudCBmb3IgbGVhZGluZyAweCAqLworKwkJICAgICAgYnJlYWs7CisrCisrCQkgICAgZGVmYXVsdDoKKysJCSAgICAgIGFib3J0ICgpOworKwkJICAgIH0KKysKKysJCSAgaWYgKHRtcF9sZW5ndGggPCB3aWR0aCkKKysJCSAgICB0bXBfbGVuZ3RoID0gd2lkdGg7CisrCisrCQkgIHRtcF9sZW5ndGggPSB4c3VtICh0bXBfbGVuZ3RoLCAxKTsgLyogYWNjb3VudCBmb3IgdHJhaWxpbmcgTlVMICovCisrCQl9CisrCisrCQlpZiAodG1wX2xlbmd0aCA8PSBzaXplb2YgKHRtcGJ1ZikgLyBzaXplb2YgKENIQVJfVCkpCisrCQkgIHRtcCA9IHRtcGJ1ZjsKKysJCWVsc2UKKysJCSAgeworKwkJICAgIHNpemVfdCB0bXBfbWVtc2l6ZSA9IHh0aW1lcyAodG1wX2xlbmd0aCwgc2l6ZW9mIChDSEFSX1QpKTsKKysKKysJCSAgICBpZiAoc2l6ZV9vdmVyZmxvd19wICh0bXBfbWVtc2l6ZSkpCisrCQkgICAgICAvKiBPdmVyZmxvdywgd291bGQgbGVhZCB0byBvdXQgb2YgbWVtb3J5LiAgKi8KKysJCSAgICAgIGdvdG8gb3V0X29mX21lbW9yeTsKKysJCSAgICB0bXAgPSAoQ0hBUl9UICopIG1hbGxvYyAodG1wX21lbXNpemUpOworKwkJICAgIGlmICh0bXAgPT0gTlVMTCkKKysJCSAgICAgIC8qIE91dCBvZiBtZW1vcnkuICAqLworKwkJICAgICAgZ290byBvdXRfb2ZfbWVtb3J5OworKwkJICB9CisrI2VuZGlmCisrCisrCQkvKiBDb25zdHJ1Y3QgdGhlIGZvcm1hdCBzdHJpbmcgZm9yIGNhbGxpbmcgc25wcmludGYgb3IKKysJCSAgIHNwcmludGYuICAqLworKwkJcCA9IGJ1ZjsKKysJCSpwKysgPSAnJSc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19HUk9VUCkKKysJCSAgKnArKyA9ICdcJyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19MRUZUKQorKwkJICAqcCsrID0gJy0nOworKwkJaWYgKGRwLT5mbGFncyAmIEZMQUdfU0hPV1NJR04pCisrCQkgICpwKysgPSAnKyc7CisrCQlpZiAoZHAtPmZsYWdzICYgRkxBR19TUEFDRSkKKysJCSAgKnArKyA9ICcgJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX0FMVCkKKysJCSAgKnArKyA9ICcjJzsKKysJCWlmIChkcC0+ZmxhZ3MgJiBGTEFHX1pFUk8pCisrCQkgICpwKysgPSAnMCc7CisrCQlpZiAoZHAtPndpZHRoX3N0YXJ0ICE9IGRwLT53aWR0aF9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT53aWR0aF9lbmQgLSBkcC0+d2lkdGhfc3RhcnQ7CisrCQkgICAgbWVtY3B5IChwLCBkcC0+d2lkdGhfc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKwkJaWYgKGRwLT5wcmVjaXNpb25fc3RhcnQgIT0gZHAtPnByZWNpc2lvbl9lbmQpCisrCQkgIHsKKysJCSAgICBzaXplX3QgbiA9IGRwLT5wcmVjaXNpb25fZW5kIC0gZHAtPnByZWNpc2lvbl9zdGFydDsKKysJCSAgICBtZW1jcHkgKHAsIGRwLT5wcmVjaXNpb25fc3RhcnQsIG4gKiBzaXplb2YgKENIQVJfVCkpOworKwkJICAgIHAgKz0gbjsKKysJCSAgfQorKworKwkJc3dpdGNoICh0eXBlKQorKwkJICB7CisrI2lmZGVmIEhBVkVfTE9OR19MT05HCisrCQkgIGNhc2UgVFlQRV9MT05HTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HTE9OR0lOVDoKKysJCSAgICAqcCsrID0gJ2wnOworKwkJICAgIC8qRkFMTFRIUk9VR0gqLworKyNlbmRpZgorKwkJICBjYXNlIFRZUEVfTE9OR0lOVDoKKysJCSAgY2FzZSBUWVBFX1VMT05HSU5UOgorKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICBjYXNlIFRZUEVfV0lERV9DSEFSOgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgY2FzZSBUWVBFX1dJREVfU1RSSU5HOgorKyNlbmRpZgorKwkJICAgICpwKysgPSAnbCc7CisrCQkgICAgYnJlYWs7CisrI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKKysJCSAgY2FzZSBUWVBFX0xPTkdET1VCTEU6CisrCQkgICAgKnArKyA9ICdMJzsKKysJCSAgICBicmVhazsKKysjZW5kaWYKKysJCSAgZGVmYXVsdDoKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkJKnAgPSBkcC0+Y29udmVyc2lvbjsKKysjaWYgVVNFX1NOUFJJTlRGCisrCQlwWzFdID0gJyUnOworKwkJcFsyXSA9ICduJzsKKysJCXBbM10gPSAnXDAnOworKyNlbHNlCisrCQlwWzFdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCS8qIENvbnN0cnVjdCB0aGUgYXJndW1lbnRzIGZvciBjYWxsaW5nIHNucHJpbnRmIG9yIHNwcmludGYuICAqLworKwkJcHJlZml4X2NvdW50ID0gMDsKKysJCWlmIChkcC0+d2lkdGhfYXJnX2luZGV4ICE9IEFSR19OT05FKQorKwkJICB7CisrCQkgICAgaWYgKCEoYS5hcmdbZHAtPndpZHRoX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+d2lkdGhfYXJnX2luZGV4XS5hLmFfaW50OworKwkJICB9CisrCQlpZiAoZHAtPnByZWNpc2lvbl9hcmdfaW5kZXggIT0gQVJHX05PTkUpCisrCQkgIHsKKysJCSAgICBpZiAoIShhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0udHlwZSA9PSBUWVBFX0lOVCkpCisrCQkgICAgICBhYm9ydCAoKTsKKysJCSAgICBwcmVmaXhlc1twcmVmaXhfY291bnQrK10gPSBhLmFyZ1tkcC0+cHJlY2lzaW9uX2FyZ19pbmRleF0uYS5hX2ludDsKKysJCSAgfQorKworKyNpZiBVU0VfU05QUklOVEYKKysJCS8qIFByZXBhcmUgY2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIHRoZSBjb3VudAorKwkJICAgdmlhICVuLiAgKi8KKysJCUVOU1VSRV9BTExPQ0FUSU9OICh4c3VtIChsZW5ndGgsIDEpKTsKKysJCXJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysjZW5kaWYKKysKKysJCWZvciAoOzspCisrCQkgIHsKKysJCSAgICBzaXplX3QgbWF4bGVuOworKwkJICAgIGludCBjb3VudDsKKysJCSAgICBpbnQgcmV0Y291bnQ7CisrCisrCQkgICAgbWF4bGVuID0gYWxsb2NhdGVkIC0gbGVuZ3RoOworKwkJICAgIGNvdW50ID0gLTE7CisrCQkgICAgcmV0Y291bnQgPSAwOworKworKyNpZiBVU0VfU05QUklOVEYKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBhcmcsICZjb3VudCk7CQkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDE6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgYXJnLCAmY291bnQpOwkgICAgXAorKwkJCWJyZWFrOwkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDI6CQkJCQkJICAgIFwKKysJCQlyZXRjb3VudCA9IFNOUFJJTlRGIChyZXN1bHQgKyBsZW5ndGgsIG1heGxlbiwgYnVmLCAgXAorKwkJCQkJICAgICBwcmVmaXhlc1swXSwgcHJlZml4ZXNbMV0sIGFyZywgXAorKwkJCQkJICAgICAmY291bnQpOwkJCSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGRlZmF1bHQ6CQkJCQkJICAgIFwKKysJCQlhYm9ydCAoKTsJCQkJCSAgICBcCisrCQkgICAgICB9CisrI2Vsc2UKKysjIGRlZmluZSBTTlBSSU5URl9CVUYoYXJnKSBcCisrCQkgICAgc3dpdGNoIChwcmVmaXhfY291bnQpCQkJCSAgICBcCisrCQkgICAgICB7CQkJCQkJCSAgICBcCisrCQkgICAgICBjYXNlIDA6CQkJCQkJICAgIFwKKysJCQljb3VudCA9IHNwcmludGYgKHRtcCwgYnVmLCBhcmcpOwkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgY2FzZSAxOgkJCQkJCSAgICBcCisrCQkJY291bnQgPSBzcHJpbnRmICh0bXAsIGJ1ZiwgcHJlZml4ZXNbMF0sIGFyZyk7CSAgICBcCisrCQkJYnJlYWs7CQkJCQkJICAgIFwKKysJCSAgICAgIGNhc2UgMjoJCQkJCQkgICAgXAorKwkJCWNvdW50ID0gc3ByaW50ZiAodG1wLCBidWYsIHByZWZpeGVzWzBdLCBwcmVmaXhlc1sxXSxcCisrCQkJCQkgYXJnKTsJCQkJICAgIFwKKysJCQlicmVhazsJCQkJCQkgICAgXAorKwkJICAgICAgZGVmYXVsdDoJCQkJCQkgICAgXAorKwkJCWFib3J0ICgpOwkJCQkJICAgIFwKKysJCSAgICAgIH0KKysjZW5kaWYKKysKKysJCSAgICBzd2l0Y2ggKHR5cGUpCisrCQkgICAgICB7CisrCQkgICAgICBjYXNlIFRZUEVfU0NIQVI6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVUNIQVI6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91Y2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfU0hPUlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zaG9ydDsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrCQkgICAgICBjYXNlIFRZUEVfVVNIT1JUOgorKwkJCXsKKysJCQkgIHVuc2lnbmVkIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdXNob3J0OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9JTlQ6CisrCQkJeworKwkJCSAgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9pbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgY2FzZSBUWVBFX1VJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV91aW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9MT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgaW50IGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9sb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0lOVDoKKysJCQl7CisrCQkJICB1bnNpZ25lZCBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdpbnQ7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworKwkJICAgICAgY2FzZSBUWVBFX0xPTkdMT05HSU5UOgorKwkJCXsKKysJCQkgIGxvbmcgbG9uZyBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2xvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysJCSAgICAgIGNhc2UgVFlQRV9VTE9OR0xPTkdJTlQ6CisrCQkJeworKwkJCSAgdW5zaWduZWQgbG9uZyBsb25nIGludCBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfdWxvbmdsb25naW50OworKwkJCSAgU05QUklOVEZfQlVGIChhcmcpOworKwkJCX0KKysJCQlicmVhazsKKysjZW5kaWYKKysJCSAgICAgIGNhc2UgVFlQRV9ET1VCTEU6CisrCQkJeworKwkJCSAgZG91YmxlIGFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9kb3VibGU7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX0xPTkdfRE9VQkxFCisrCQkgICAgICBjYXNlIFRZUEVfTE9OR0RPVUJMRToKKysJCQl7CisrCQkJICBsb25nIGRvdWJsZSBhcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfbG9uZ2RvdWJsZTsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfQ0hBUjoKKysJCQl7CisrCQkJICBpbnQgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX2NoYXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dJTlRfVAorKwkJICAgICAgY2FzZSBUWVBFX1dJREVfQ0hBUjoKKysJCQl7CisrCQkJICB3aW50X3QgYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3dpZGVfY2hhcjsKKysJCQkgIFNOUFJJTlRGX0JVRiAoYXJnKTsKKysJCQl9CisrCQkJYnJlYWs7CisrI2VuZGlmCisrCQkgICAgICBjYXNlIFRZUEVfU1RSSU5HOgorKwkJCXsKKysJCQkgIGNvbnN0IGNoYXIgKmFyZyA9IGEuYXJnW2RwLT5hcmdfaW5kZXhdLmEuYV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNpZmRlZiBIQVZFX1dDSEFSX1QKKysJCSAgICAgIGNhc2UgVFlQRV9XSURFX1NUUklORzoKKysJCQl7CisrCQkJICBjb25zdCB3Y2hhcl90ICphcmcgPSBhLmFyZ1tkcC0+YXJnX2luZGV4XS5hLmFfd2lkZV9zdHJpbmc7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKyNlbmRpZgorKwkJICAgICAgY2FzZSBUWVBFX1BPSU5URVI6CisrCQkJeworKwkJCSAgdm9pZCAqYXJnID0gYS5hcmdbZHAtPmFyZ19pbmRleF0uYS5hX3BvaW50ZXI7CisrCQkJICBTTlBSSU5URl9CVUYgKGFyZyk7CisrCQkJfQorKwkJCWJyZWFrOworKwkJICAgICAgZGVmYXVsdDoKKysJCQlhYm9ydCAoKTsKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogUG9ydGFiaWxpdHk6IE5vdCBhbGwgaW1wbGVtZW50YXRpb25zIG9mIHNucHJpbnRmKCkKKysJCSAgICAgICBhcmUgSVNPIEMgOTkgY29tcGxpYW50LiAgRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKKysJCSAgICAgICBieXRlcyB0aGF0IHNucHJpbnRmKCkgaGFzIHByb2R1Y2VkIG9yIHdvdWxkIGhhdmUKKysJCSAgICAgICBwcm9kdWNlZC4gICovCisrCQkgICAgaWYgKGNvdW50ID49IDApCisrCQkgICAgICB7CisrCQkJLyogVmVyaWZ5IHRoYXQgc25wcmludGYoKSBoYXMgTlVMLXRlcm1pbmF0ZWQgaXRzCisrCQkJICAgcmVzdWx0LiAgKi8KKysJCQlpZiAoY291bnQgPCBtYXhsZW4gJiYgcmVzdWx0W2xlbmd0aCArIGNvdW50XSAhPSAnXDAnKQorKwkJCSAgYWJvcnQgKCk7CisrCQkJLyogUG9ydGFiaWxpdHkgaGFjay4gICovCisrCQkJaWYgKHJldGNvdW50ID4gY291bnQpCisrCQkJICBjb3VudCA9IHJldGNvdW50OworKwkJICAgICAgfQorKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQkvKiBzbnByaW50ZigpIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJworKwkJCSAgIGRpcmVjdGl2ZS4gICovCisrCQkJaWYgKHBbMV0gIT0gJ1wwJykKKysJCQkgIHsKKysJCQkgICAgLyogRG9uJ3QgdXNlIHRoZSAnJW4nIGRpcmVjdGl2ZTsgaW5zdGVhZCwgbG9vaworKwkJCSAgICAgICBhdCB0aGUgc25wcmludGYoKSByZXR1cm4gdmFsdWUuICAqLworKwkJCSAgICBwWzFdID0gJ1wwJzsKKysJCQkgICAgY29udGludWU7CisrCQkJICB9CisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICAvKiBMb29rIGF0IHRoZSBzbnByaW50ZigpIHJldHVybiB2YWx1ZS4gICovCisrCQkJICAgIGlmIChyZXRjb3VudCA8IDApCisrCQkJICAgICAgeworKwkJCQkvKiBIUC1VWCAxMC4yMCBzbnByaW50ZigpIGlzIGRvdWJseSBkZWZpY2llbnQ6CisrCQkJCSAgIEl0IGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgJyVuJyBkaXJlY3RpdmUsCisrCQkJCSAgICphbmQqIGl0IHJldHVybnMgLTEgKHJhdGhlciB0aGFuIHRoZSBsZW5ndGgKKysJCQkJICAgdGhhdCB3b3VsZCBoYXZlIGJlZW4gcmVxdWlyZWQpIHdoZW4gdGhlCisrCQkJCSAgIGJ1ZmZlciBpcyB0b28gc21hbGwuICAqLworKwkJCQlzaXplX3QgYmlnZ2VyX25lZWQgPQorKwkJCQkgIHhzdW0gKHh0aW1lcyAoYWxsb2NhdGVkLCAyKSwgMTIpOworKwkJCQlFTlNVUkVfQUxMT0NBVElPTiAoYmlnZ2VyX25lZWQpOworKwkJCQljb250aW51ZTsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UKKysJCQkgICAgICBjb3VudCA9IHJldGNvdW50OworKwkJCSAgfQorKwkJICAgICAgfQorKyNlbmRpZgorKworKwkJICAgIC8qIEF0dGVtcHQgdG8gaGFuZGxlIGZhaWx1cmUuICAqLworKwkJICAgIGlmIChjb3VudCA8IDApCisrCQkgICAgICB7CisrCQkJaWYgKCEocmVzdWx0ID09IHJlc3VsdGJ1ZiB8fCByZXN1bHQgPT0gTlVMTCkpCisrCQkJICBmcmVlIChyZXN1bHQpOworKwkJCWlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysJCQkgIGZyZWUgKGJ1Zl9tYWxsb2NlZCk7CisrCQkJQ0xFQU5VUCAoKTsKKysJCQllcnJubyA9IEVJTlZBTDsKKysJCQlyZXR1cm4gTlVMTDsKKysJCSAgICAgIH0KKysKKysjaWYgIVVTRV9TTlBSSU5URgorKwkJICAgIGlmIChjb3VudCA+PSB0bXBfbGVuZ3RoKQorKwkJICAgICAgLyogdG1wX2xlbmd0aCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCAtIGZpeCB0aGUKKysJCQkgY29kZSBhYm92ZSEgICovCisrCQkgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysKKysJCSAgICAvKiBNYWtlIHJvb20gZm9yIHRoZSByZXN1bHQuICAqLworKwkJICAgIGlmIChjb3VudCA+PSBtYXhsZW4pCisrCQkgICAgICB7CisrCQkJLyogTmVlZCBhdCBsZWFzdCBjb3VudCBieXRlcy4gIEJ1dCBhbGxvY2F0ZQorKwkJCSAgIHByb3BvcnRpb25hbGx5LCB0byBhdm9pZCBsb29waW5nIGV0ZXJuYWxseSBpZgorKwkJCSAgIHNucHJpbnRmKCkgcmVwb3J0cyBhIHRvbyBzbWFsbCBjb3VudC4gICovCisrCQkJc2l6ZV90IG4gPQorKwkJCSAgeG1heCAoeHN1bSAobGVuZ3RoLCBjb3VudCksIHh0aW1lcyAoYWxsb2NhdGVkLCAyKSk7CisrCisrCQkJRU5TVVJFX0FMTE9DQVRJT04gKG4pOworKyNpZiBVU0VfU05QUklOVEYKKysJCQljb250aW51ZTsKKysjZW5kaWYKKysJCSAgICAgIH0KKysKKysjaWYgVVNFX1NOUFJJTlRGCisrCQkgICAgLyogVGhlIHNucHJpbnRmKCkgcmVzdWx0IGRpZCBmaXQuICAqLworKyNlbHNlCisrCQkgICAgLyogQXBwZW5kIHRoZSBzcHJpbnRmKCkgcmVzdWx0LiAgKi8KKysJCSAgICBtZW1jcHkgKHJlc3VsdCArIGxlbmd0aCwgdG1wLCBjb3VudCAqIHNpemVvZiAoQ0hBUl9UKSk7CisrCQkgICAgaWYgKHRtcCAhPSB0bXBidWYpCisrCQkgICAgICBmcmVlICh0bXApOworKyNlbmRpZgorKworKwkJICAgIGxlbmd0aCArPSBjb3VudDsKKysJCSAgICBicmVhazsKKysJCSAgfQorKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysgICAgLyogQWRkIHRoZSBmaW5hbCBOVUwuICAqLworKyAgICBFTlNVUkVfQUxMT0NBVElPTiAoeHN1bSAobGVuZ3RoLCAxKSk7CisrICAgIHJlc3VsdFtsZW5ndGhdID0gJ1wwJzsKKysKKysgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRidWYgJiYgbGVuZ3RoICsgMSA8IGFsbG9jYXRlZCkKKysgICAgICB7CisrCS8qIFNocmluayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpZiBwb3NzaWJsZS4gICovCisrCUNIQVJfVCAqbWVtb3J5OworKworKwltZW1vcnkgPSAoQ0hBUl9UICopIHJlYWxsb2MgKHJlc3VsdCwgKGxlbmd0aCArIDEpICogc2l6ZW9mIChDSEFSX1QpKTsKKysJaWYgKG1lbW9yeSAhPSBOVUxMKQorKwkgIHJlc3VsdCA9IG1lbW9yeTsKKysgICAgICB9CisrCisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgICBDTEVBTlVQICgpOworKyAgICAqbGVuZ3RocCA9IGxlbmd0aDsKKysgICAgcmV0dXJuIHJlc3VsdDsKKysKKysgIG91dF9vZl9tZW1vcnk6CisrICAgIGlmICghKHJlc3VsdCA9PSByZXN1bHRidWYgfHwgcmVzdWx0ID09IE5VTEwpKQorKyAgICAgIGZyZWUgKHJlc3VsdCk7CisrICAgIGlmIChidWZfbWFsbG9jZWQgIT0gTlVMTCkKKysgICAgICBmcmVlIChidWZfbWFsbG9jZWQpOworKyAgb3V0X29mX21lbW9yeV8xOgorKyAgICBDTEVBTlVQICgpOworKyAgICBlcnJubyA9IEVOT01FTTsKKysgICAgcmV0dXJuIE5VTEw7CisrICB9CisrfQorKworKyN1bmRlZiBTTlBSSU5URgorKyN1bmRlZiBVU0VfU05QUklOVEYKKysjdW5kZWYgUFJJTlRGX1BBUlNFCisrI3VuZGVmIERJUkVDVElWRVMKKysjdW5kZWYgRElSRUNUSVZFCisrI3VuZGVmIENIQVJfVAorKyN1bmRlZiBWQVNOUFJJTlRGCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvdmFzbnByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc25wcmludGYuaAkyMDA0LTA5LTEyIDE0OjQwOjM0LjY2NzcwMDY2NCAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKy8qIHZzcHJpbnRmIHdpdGggYXV0b21hdGljIG1lbW9yeSBhbGxvY2F0aW9uLgorKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9WQVNOUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOUFJJTlRGX0gKKysKKysvKiBHZXQgdmFfbGlzdC4gICovCisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysjaWZuZGVmIF9fYXR0cmlidXRlX18KKysvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpIHx8IF9fU1RSSUNUX0FOU0lfXworKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisrIyBlbmRpZgorKy8qIFRoZSBfXy1wcm90ZWN0ZWQgdmFyaWFudHMgb2YgYGZvcm1hdCcgYW5kIGBwcmludGYnIGF0dHJpYnV0ZXMKKysgICBhcmUgYWNjZXB0ZWQgYnkgZ2NjIHZlcnNpb25zIDIuNi40IChlZmZlY3RpdmVseSAyLjcpIGFuZCBsYXRlci4gICovCisrIyBpZiBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA3KQorKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKysvKiBXcml0ZSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGEgc3RyaW5nIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB3aXRoIG1hbGxvYygpLgorKyAgIFlvdSBjYW4gcGFzcyBhIHByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXN1bHQgaW4gUkVTVUxUQlVGIGFuZCBpdHMKKysgICBzaXplIGluICpMRU5HVEhQOyBvdGhlcndpc2UgeW91IHBhc3MgUkVTVUxUQlVGID0gTlVMTC4KKysgICBJZiBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIHN0cmluZyAodGhpcyBtYXkgYmUgPSBSRVNVTFRCVUYKKysgICBpZiBubyBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIHdhcyBuZWNlc3NhcnkpIGFuZCBzZXQgKkxFTkdUSFAgdG8gdGhlCisrICAgbnVtYmVyIG9mIHJlc3VsdGluZyBieXRlcywgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBOVUwuICBVcG9uIGVycm9yLCBzZXQKKysgICBlcnJubyBhbmQgcmV0dXJuIE5VTEwuICAqLworK2V4dGVybiBjaGFyICogYXNucHJpbnRmIChjaGFyICpyZXN1bHRidWYsIHNpemVfdCAqbGVuZ3RocCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisrICAgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOworK2V4dGVybiBjaGFyICogdmFzbnByaW50ZiAoY2hhciAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQorKyAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOUFJJTlRGX0ggKi8KKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC92YXNud3ByaW50Zi5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3Zhc253cHJpbnRmLmgJMjAwNC0wOS0xMiAxNDo0MDozNC42NzM2OTk3NTIgLTA0MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysvKiB2c3dwcmludGYgd2l0aCBhdXRvbWF0aWMgbWVtb3J5IGFsbG9jYXRpb24uCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1ZBU05XUFJJTlRGX0gKKysjZGVmaW5lIF9WQVNOV1BSSU5URl9ICisrCisrLyogR2V0IHZhX2xpc3QuICAqLworKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysvKiBHZXQgd2NoYXJfdCwgc2l6ZV90LiAgKi8KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2lmZGVmCV9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrLyogV3JpdGUgZm9ybWF0dGVkIG91dHB1dCB0byBhIHN0cmluZyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKS4KKysgICBZb3UgY2FuIHBhc3MgYSBwcmVhbGxvY2F0ZWQgYnVmZmVyIGZvciB0aGUgcmVzdWx0IGluIFJFU1VMVEJVRiBhbmQgaXRzCisrICAgc2l6ZSBpbiAqTEVOR1RIUDsgb3RoZXJ3aXNlIHlvdSBwYXNzIFJFU1VMVEJVRiA9IE5VTEwuCisrICAgSWYgc3VjY2Vzc2Z1bCwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdHJpbmcgKHRoaXMgbWF5IGJlID0gUkVTVUxUQlVGCisrICAgaWYgbm8gZHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbiB3YXMgbmVjZXNzYXJ5KSBhbmQgc2V0ICpMRU5HVEhQIHRvIHRoZQorKyAgIG51bWJlciBvZiByZXN1bHRpbmcgYnl0ZXMsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgTlVMLiAgVXBvbiBlcnJvciwgc2V0CisrICAgZXJybm8gYW5kIHJldHVybiBOVUxMLiAgKi8KKytleHRlcm4gd2NoYXJfdCAqIGFzbndwcmludGYgKHdjaGFyX3QgKnJlc3VsdGJ1Ziwgc2l6ZV90ICpsZW5ndGhwLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLik7CisrZXh0ZXJuIHdjaGFyX3QgKiB2YXNud3ByaW50ZiAod2NoYXJfdCAqcmVzdWx0YnVmLCBzaXplX3QgKmxlbmd0aHAsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKTsKKysKKysjaWZkZWYJX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9WQVNOV1BSSU5URl9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwvVkVSU0lPTgkxOTk4LTA0LTI2IDA5OjIyOjM3LjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC9WRVJTSU9OCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjc5Njk4ODQwIC0wNDAwCitAQCAtMSArMSBAQAorLUdOVSBnZXR0ZXh0IGxpYnJhcnkgZnJvbSBnZXR0ZXh0LTAuMTAuMzIKKytHTlUgZ2V0dGV4dCBsaWJyYXJ5IGZyb20gZ2V0dGV4dC0wLjE0LjEKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC93cHJpbnRmLXBhcnNlLmgJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL2ludGwvd3ByaW50Zi1wYXJzZS5oCTIwMDQtMDktMTIgMTQ6NDA6MzQuNjk1Njk2NDA4IC0wNDAwCitAQCAtMCwwICsxLDc1IEBACisrLyogUGFyc2UgcHJpbnRmIGZvcm1hdCBzdHJpbmcuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisrICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysgICBVU0EuICAqLworKworKyNpZm5kZWYgX1dQUklOVEZfUEFSU0VfSAorKyNkZWZpbmUgX1dQUklOVEZfUEFSU0VfSAorKworKyNpbmNsdWRlICJwcmludGYtYXJncy5oIgorKworKworKy8qIEZsYWdzICovCisrI2RlZmluZSBGTEFHX0dST1VQCSAxCS8qICcgZmxhZyAqLworKyNkZWZpbmUgRkxBR19MRUZUCSAyCS8qIC0gZmxhZyAqLworKyNkZWZpbmUgRkxBR19TSE9XU0lHTgkgNAkvKiArIGZsYWcgKi8KKysjZGVmaW5lIEZMQUdfU1BBQ0UJIDgJLyogc3BhY2UgZmxhZyAqLworKyNkZWZpbmUgRkxBR19BTFQJMTYJLyogIyBmbGFnICovCisrI2RlZmluZSBGTEFHX1pFUk8JMzIKKysKKysvKiBhcmdfaW5kZXggdmFsdWUgaW5kaWNhdGluZyB0aGF0IG5vIGFyZ3VtZW50IGlzIGNvbnN1bWVkLiAgKi8KKysjZGVmaW5lIEFSR19OT05FCSh+KHNpemVfdCkwKQorKworKy8qIEEgcGFyc2VkIGRpcmVjdGl2ZS4gICovCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiBkaXJfZW5kOworKyAgaW50IGZsYWdzOworKyAgY29uc3Qgd2NoYXJfdCogd2lkdGhfc3RhcnQ7CisrICBjb25zdCB3Y2hhcl90KiB3aWR0aF9lbmQ7CisrICBzaXplX3Qgd2lkdGhfYXJnX2luZGV4OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX3N0YXJ0OworKyAgY29uc3Qgd2NoYXJfdCogcHJlY2lzaW9uX2VuZDsKKysgIHNpemVfdCBwcmVjaXNpb25fYXJnX2luZGV4OworKyAgd2NoYXJfdCBjb252ZXJzaW9uOyAvKiBkIGkgbyB1IHggWCBmIGUgRSBnIEcgYyBzIHAgbiBVICUgYnV0IG5vdCBDIFMgKi8KKysgIHNpemVfdCBhcmdfaW5kZXg7CisrfQorK3djaGFyX3RfZGlyZWN0aXZlOworKworKy8qIEEgcGFyc2VkIGZvcm1hdCBzdHJpbmcuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgc2l6ZV90IGNvdW50OworKyAgd2NoYXJfdF9kaXJlY3RpdmUgKmRpcjsKKysgIHNpemVfdCBtYXhfd2lkdGhfbGVuZ3RoOworKyAgc2l6ZV90IG1heF9wcmVjaXNpb25fbGVuZ3RoOworK30KKyt3Y2hhcl90X2RpcmVjdGl2ZXM7CisrCisrCisrLyogUGFyc2VzIHRoZSBmb3JtYXQgc3RyaW5nLiAgRmlsbHMgaW4gdGhlIG51bWJlciBOIG9mIGRpcmVjdGl2ZXMsIGFuZCBmaWxscworKyAgIGluIGRpcmVjdGl2ZXNbMF0sIC4uLiwgZGlyZWN0aXZlc1tOLTFdLCBhbmQgc2V0cyBkaXJlY3RpdmVzW05dLmRpcl9zdGFydAorKyAgIHRvIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCBzdHJpbmcuICBBbHNvIGZpbGxzIGluIHRoZSBhcmdfdHlwZSBmaWVsZHMgb2YgdGhlCisrICAgYXJndW1lbnRzIGFuZCB0aGUgbmVlZGVkIGNvdW50IG9mIGFyZ3VtZW50cy4gICovCisrI2lmZGVmIFNUQVRJQworK1NUQVRJQworKyNlbHNlCisrZXh0ZXJuCisrI2VuZGlmCisraW50IHdwcmludGZfcGFyc2UgKGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgd2NoYXJfdF9kaXJlY3RpdmVzICpkLCBhcmd1bWVudHMgKmEpOworKworKyNlbmRpZiAvKiBfV1BSSU5URl9QQVJTRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL2ludGwveG9wZW4tbXNnLnNlZAkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvaW50bC94b3Blbi1tc2cuc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSwxMDQgKzAsMCBAQAorLSMgcG8ybXNnLnNlZCAtIENvbnZlcnQgVW5pZm9ydW0gc3R5bGUgLnBvIGZpbGUgdG8gWC9PcGVuIHN0eWxlIC5tc2cgZmlsZQorLSMgQ29weXJpZ2h0IChDKSAxOTk1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLSMgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+LCAxOTk1LgorLSMKKy0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CistIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorLSMgYW55IGxhdGVyIHZlcnNpb24uCistIworLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy0jCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCistIworLSMKKy0jIFRoZSBmaXJzdCBkaXJlY3RpdmUgaW4gdGhlIC5tc2cgc2hvdWxkIGJlIHRoZSBkZWZpbml0aW9uIG9mIHRoZQorLSMgbWVzc2FnZSBzZXQgbnVtYmVyLiAgV2UgdXNlIGFsd2F5cyBzZXQgbnVtYmVyIDEuCistIworLTEgeworLSAgaVwKKy0kc2V0IDEgIyBBdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgcG8ybXNnLnNlZAorLSAgaAorLSAgcy8uKi8wLworLSAgeAorLX0KKy0jCistIyBXZSBjb3B5IGFsbCBjb21tZW50cyBpbnRvIHRoZSAubXNnIGZpbGUuICBQZXJoYXBzIHRoZXkgY2FuIGhlbHAuCistIworLS9eIy8gcy9eI1sgCV0qLyQgL3AKKy0jCistIyBXZSBjb3B5IHRoZSBvcmlnaW5hbCBtZXNzYWdlIGFzIGEgY29tbWVudCBpbnRvIHRoZSAubXNnIGZpbGUuCistIworLS9ebXNnaWQvIHsKKy0jIERvZXMgbm90IHdvcmsgbm93CistIyAgLyIkLyEgeworLSMgICAgcy9cXCQvLworLSMgICAgcy8kLyAuLi4gKG1vcmUgbGluZXMgZm9sbG93aW5nKSIvCistIyAgfQorLSAgcy9ebXNnaWRbIAldKiJcKC4qXCkiJC8kIE9yaWdpbmFsIE1lc3NhZ2U6IFwxLworLSAgcAorLX0KKy0jCistIyBUaGUgLm1zZyBmaWxlIGNvbnRhaW5zLCBvdGhlciB0aGVuIHRoZSAucG8gZmlsZSwgb25seSB0aGUgdHJhbnNsYXRpb25zCistIyBidXQgZWFjaCBnaXZlbiBhIHVuaXF1ZSBJRC4gIFN0YXJ0aW5nIGZyb20gMSBhbmQgaW5jcmVtZW50aW5nIGJ5IDEgZm9yCistIyBlYWNoIG1lc3NhZ2Ugd2UgYXNzaWduIHRoZW0gdG8gdGhlIG1lc3NhZ2VzLgorLSMgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIC5wbyBmaWxlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGNhdC1pZC10YmwuYyBmaWxlCistIyAod2l0aCBwby10by10YmwpIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgdXNlZCBoZXJlLiAgKEF0IGxlYXN0IHRoZSBvcmRlcgorLSMgb2YgZGVjbGFyYXRpb25zIG11c3Qgbm90IGJlIGNoYW5nZWQuKQorLSMKKy0vXm1zZ3N0ci8geworLSAgcy9tc2dzdHJbIAldKiJcKC4qXCkiL1wxLworLSAgeAorLSMgVGhlIGZvbGxvd2luZyBuaWNlIHNvbHV0aW9uIGlzIGJ5CistIyBCcnVubyA8SGFpYmxlQG1hMnMyLm1hdGhlbWF0aWsudW5pLWthcmxzcnVoZS5kZT4KKy0gIHRkCistIyBJbmNyZW1lbnQgYSBkZWNpbWFsIG51bWJlciBpbiBwYXR0ZXJuIHNwYWNlLgorLSMgRmlyc3QgaGlkZSB0cmFpbGluZyBgOScgZGlnaXRzLgorLSAgOmQKKy0gIHMvOVwoXypcKSQvX1wxLworLSAgdGQKKy0jIEFzc3VyZSBhdCBsZWFzdCBvbmUgZGlnaXQgaXMgYXZhaWxhYmxlLgorLSAgcy9eXChfKlwpJC8wXDEvCistIyBJbmNyZW1lbnQgdGhlIGxhc3QgZGlnaXQuCistICBzLzhcKF8qXCkkLzlcMS8KKy0gIHMvN1woXypcKSQvOFwxLworLSAgcy82XChfKlwpJC83XDEvCistICBzLzVcKF8qXCkkLzZcMS8KKy0gIHMvNFwoXypcKSQvNVwxLworLSAgcy8zXChfKlwpJC80XDEvCistICBzLzJcKF8qXCkkLzNcMS8KKy0gIHMvMVwoXypcKSQvMlwxLworLSAgcy8wXChfKlwpJC8xXDEvCistIyBDb252ZXJ0IHRoZSBoaWRkZW4gYDknIGRpZ2l0cyB0byBgMCdzLgorLSAgcy9fLzAvZworLSAgeAorLSMgQnJpbmcgdGhlIGxpbmUgaW4gdGhlIGZvcm1hdCBgPG51bWJlcj4gPG1lc3NhZ2U+JworLSAgRworLSAgcy9eW15cbl0qJC8mIC8KKy0gIHMvXCguKlwpXG5cKFswLTldKlwpL1wyIFwxLworLSMgQ2xlYXIgZmxhZyBmcm9tIGxhc3Qgc3Vic3RpdHV0aW9uLgorLSAgdGIKKy0jIEFwcGVuZCB0aGUgbmV4dCBsaW5lLgorLSAgOmIKKy0gIE4KKy0jIExvb2sgd2hldGhlciBzZWNvbmQgcGFydCBpcyBhIGNvbnRpbnVhdGlvbiBsaW5lLgorLSAgcy9cKC4qXG5cKSJcKC4qXCkiL1wxXDIvCistIyBZZXMsIHRoZW4gYnJhbmNoLgorLSAgdGEKKy0gIFAKKy0gIEQKKy0jIE5vdGUgdGhhdCBgRCcgaW5jbHVkZXMgYSBqdW1wIHRvIHRoZSBzdGFydCEhCistIyBXZSBmb3VuZCBhIGNvbnRpbnVhdGlvbiBsaW5lLiAgQnV0IGJlZm9yZSBwcmludGluZyBpbnNlcnQgJ1wnLgorLSAgOmEKKy0gIHMvXCguKlwpXChcbi4qXCkvXDFcXFwyLworLSAgUAorLSMgV2UgY2Fubm90IHVzZSB0aGUgc2VkIGNvbW1hbmQgYEQnIGhlcmUKKy0gIHMvLipcblwoLipcKS9cMS8KKy0gIHRiCistfQorLWQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvaW50bC94c2l6ZS5oCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9pbnRsL3hzaXplLmgJMjAwNC0wOS0xMiAxNDo0MDozNC43MDA2OTU2NDggLTA0MDAKK0BAIC0wLDAgKzEsMTA5IEBACisrLyogeHNpemUuaCAtLSBDaGVja2VkIHNpemVfdCBjb21wdXRhdGlvbnMuCisrCisrICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrICAgVVNBLiAgKi8KKysKKysjaWZuZGVmIF9YU0laRV9ICisrI2RlZmluZSBfWFNJWkVfSAorKworKy8qIEdldCBzaXplX3QuICAqLworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysKKysvKiBHZXQgU0laRV9NQVguICAqLworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaWYgSEFWRV9TVERJTlRfSAorKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrCisrLyogVGhlIHNpemUgb2YgbWVtb3J5IG9iamVjdHMgaXMgb2Z0ZW4gY29tcHV0ZWQgdGhyb3VnaCBleHByZXNzaW9ucyBvZgorKyAgIHR5cGUgc2l6ZV90LiBFeGFtcGxlOgorKyAgICAgIHZvaWQqIHAgPSBtYWxsb2MgKGhlYWRlcl9zaXplICsgbiAqIGVsZW1lbnRfc2l6ZSkuCisrICAgVGhlc2UgY29tcHV0YXRpb25zIGNhbiBsZWFkIHRvIG92ZXJmbG93LiAgV2hlbiB0aGlzIGhhcHBlbnMsIG1hbGxvYygpCisrICAgcmV0dXJucyBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IGlzIHdheSB0b28gc21hbGwsIGFuZCB0aGUgcHJvZ3JhbSB0aGVuCisrICAgY3Jhc2hlcyB3aGlsZSBhdHRlbXB0aW5nIHRvIGZpbGwgdGhlIG1lbW9yeS4KKysgICBUbyBhdm9pZCB0aGlzLCB0aGUgZnVuY3Rpb25zIGFuZCBtYWNyb3MgaW4gdGhpcyBmaWxlIGNoZWNrIGZvciBvdmVyZmxvdy4KKysgICBUaGUgY29udmVudGlvbiBpcyB0aGF0IFNJWkVfTUFYIHJlcHJlc2VudHMgb3ZlcmZsb3cuCisrICAgbWFsbG9jIChTSVpFX01BWCkgaXMgbm90IGd1YXJhbnRlZWQgdG8gZmFpbCAtLSB0aGluayBvZiBhIG1hbGxvYworKyAgIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyBtbWFwIC0tLCBpdCdzIHJlY29tbWVuZGVkIHRvIHVzZSBzaXplX292ZXJmbG93X3AoKQorKyAgIG9yIHNpemVfaW5fYm91bmRzX3AoKSBiZWZvcmUgaW52b2tpbmcgbWFsbG9jKCkuCisrICAgVGhlIGV4YW1wbGUgdGh1cyBiZWNvbWVzOgorKyAgICAgIHNpemVfdCBzaXplID0geHN1bSAoaGVhZGVyX3NpemUsIHh0aW1lcyAobiwgZWxlbWVudF9zaXplKSk7CisrICAgICAgdm9pZCAqcCA9IChzaXplX2luX2JvdW5kc19wIChzaXplKSA/IG1hbGxvYyAoc2l6ZSkgOiBOVUxMKTsKKysqLworKworKy8qIENvbnZlcnQgYW4gYXJiaXRyYXJ5IHZhbHVlID49IDAgdG8gdHlwZSBzaXplX3QuICAqLworKyNkZWZpbmUgeGNhc3Rfc2l6ZV90KE4pIFwKKysgICgoTikgPD0gU0laRV9NQVggPyAoc2l6ZV90KSAoTikgOiBTSVpFX01BWCkKKysKKysvKiBTdW0gb2YgdHdvIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMikKKyt7CisrICBzaXplX3Qgc3VtID0gc2l6ZTEgKyBzaXplMjsKKysgIHJldHVybiAoc3VtID49IHNpemUxID8gc3VtIDogU0laRV9NQVgpOworK30KKysKKysvKiBTdW0gb2YgdGhyZWUgc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3hzdW0zIChzaXplX3Qgc2l6ZTEsIHNpemVfdCBzaXplMiwgc2l6ZV90IHNpemUzKQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyk7CisrfQorKworKy8qIFN1bSBvZiBmb3VyIHNpemVzLCB3aXRoIG92ZXJmbG93IGNoZWNrLiAgKi8KKytzdGF0aWMgaW5saW5lIHNpemVfdAorKyNpZiBfX0dOVUNfXyA+PSAzCisrX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKysjZW5kaWYKKyt4c3VtNCAoc2l6ZV90IHNpemUxLCBzaXplX3Qgc2l6ZTIsIHNpemVfdCBzaXplMywgc2l6ZV90IHNpemU0KQorK3sKKysgIHJldHVybiB4c3VtICh4c3VtICh4c3VtIChzaXplMSwgc2l6ZTIpLCBzaXplMyksIHNpemU0KTsKKyt9CisrCisrLyogTWF4aW11bSBvZiB0d28gc2l6ZXMsIHdpdGggb3ZlcmZsb3cgY2hlY2suICAqLworK3N0YXRpYyBpbmxpbmUgc2l6ZV90CisrI2lmIF9fR05VQ19fID49IDMKKytfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorKyNlbmRpZgorK3htYXggKHNpemVfdCBzaXplMSwgc2l6ZV90IHNpemUyKQorK3sKKysgIC8qIE5vIGV4cGxpY2l0IGNoZWNrIGlzIG5lZWRlZCBoZXJlLCBiZWNhdXNlIGZvciBhbnkgbjoKKysgICAgIG1heCAoU0laRV9NQVgsIG4pID09IFNJWkVfTUFYIGFuZCBtYXggKG4sIFNJWkVfTUFYKSA9PSBTSVpFX01BWC4gICovCisrICByZXR1cm4gKHNpemUxID49IHNpemUyID8gc2l6ZTEgOiBzaXplMik7CisrfQorKworKy8qIE11bHRpcGxpY2F0aW9uIG9mIGEgY291bnQgd2l0aCBhbiBlbGVtZW50IHNpemUsIHdpdGggb3ZlcmZsb3cgY2hlY2suCisrICAgVGhlIGNvdW50IG11c3QgYmUgPj0gMCBhbmQgdGhlIGVsZW1lbnQgc2l6ZSBtdXN0IGJlID4gMC4KKysgICBUaGlzIGlzIGEgbWFjcm8sIG5vdCBhbiBpbmxpbmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgd29ya3MgY29ycmVjdGx5IGV2ZW4KKysgICB3aGVuIE4gaXMgb2YgYSB3aWRlciB0dXBlIGFuZCBOID4gU0laRV9NQVguICAqLworKyNkZWZpbmUgeHRpbWVzKE4sIEVMU0laRSkgXAorKyAgKChOKSA8PSBTSVpFX01BWCAvIChFTFNJWkUpID8gKHNpemVfdCkgKE4pICogKEVMU0laRSkgOiBTSVpFX01BWCkKKysKKysvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICAqLworKyNkZWZpbmUgc2l6ZV9vdmVyZmxvd19wKFNJWkUpIFwKKysgICgoU0laRSkgPT0gU0laRV9NQVgpCisrLyogQ2hlY2sgYWdhaW5zdCBvdmVyZmxvdy4gICovCisrI2RlZmluZSBzaXplX2luX2JvdW5kc19wKFNJWkUpIFwKKysgICgoU0laRSkgIT0gU0laRV9NQVgpCisrCisrI2VuZGlmIC8qIF9YU0laRV9IICovCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L0NoYW5nZUxvZwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvQ2hhbmdlTG9nCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDU0NjQxODQwIC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrMjAwNC0wOS0xMiAgZ2V0dGV4dGl6ZSAgPGJ1Zy1nbnUtZ2V0dGV4dEBnbnUub3JnPgorKworKwkqIGNvZGVzZXQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdldHRleHQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGdsaWJjMjEubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGljb252Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRkaXYwLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnRtYXgubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGludHR5cGVzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlc19oLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnR0eXBlcy1wcmkubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGlzYy1wb3NpeC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbGNtZXNzYWdlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItbGQubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGxpYi1saW5rLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsaWItcHJlZml4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nZG91YmxlLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBsb25nbG9uZy5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogbmxzLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwby5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcHJpbnRmLXBvc2l4Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBwcm9ndGVzdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc2lnbmVkLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBzaXplX21heC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogc3RkaW50X2gubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHVpbnRtYXhfdC5tNDogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogdWxvbmdsb25nLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3Y2hhcl90Lm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiB3aW50X3QubTQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHhzaXplLm00OiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBNYWtlZmlsZS5hbTogTmV3IGZpbGUuCisrCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2NvZGVzZXQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2NvZGVzZXQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjA2Nzc0MDggLTA0MDAKK0BAIC0wLDAgKzEsMjMgQEAKKysjIGNvZGVzZXQubTQgc2VyaWFsIEFNMSAoZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbQU1fTEFOR0lORk9fQ09ERVNFVF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVF0sIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQsCisrICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxhbmdpbmZvLmg+XSwKKysgICAgICBbY2hhciogY3MgPSBubF9sYW5naW5mbyhDT0RFU0VUKTtdLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9eWVzLAorKyAgICAgIGFtX2N2X2xhbmdpbmZvX2NvZGVzZXQ9bm8pCisrICAgIF0pCisrICBpZiB0ZXN0ICRhbV9jdl9sYW5naW5mb19jb2Rlc2V0ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xBTkdJTkZPX0NPREVTRVQsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSA8bGFuZ2luZm8uaD4gYW5kIG5sX2xhbmdpbmZvKENPREVTRVQpLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2dldHRleHQubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2dldHRleHQubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44MjY2NzY0OTYgLTA0MDAKK0BAIC0wLDAgKzEsNDg3IEBACisrIyBnZXR0ZXh0Lm00IHNlcmlhbCAyOCAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUtMjAwMC4KKytkbmwgICBCcnVubyBIYWlibGUgPGhhaWJsZUBjbGlzcC5jb25zLm9yZz4sIDIwMDAtMjAwMy4KKysKKytkbmwgTWFjcm8gdG8gYWRkIGZvciB1c2luZyBHTlUgZ2V0dGV4dC4KKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUKFtJTlRMU1lNQk9MXSwgW05FRURTWU1CT0xdLCBbSU5UTERJUl0pLgorK2RubCBJTlRMU1lNQk9MIGNhbiBiZSBvbmUgb2YgJ2V4dGVybmFsJywgJ25vLWxpYnRvb2wnLCAndXNlLWxpYnRvb2wnLiBUaGUKKytkbmwgICAgZGVmYXVsdCAoaWYgaXQgaXMgbm90IHNwZWNpZmllZCBvciBlbXB0eSkgaXMgJ25vLWxpYnRvb2wnLgorK2RubCAgICBJTlRMU1lNQk9MIHNob3VsZCBiZSAnZXh0ZXJuYWwnIGZvciBwYWNrYWdlcyB3aXRoIG5vIGludGwgZGlyZWN0b3J5LAorK2RubCAgICBhbmQgJ25vLWxpYnRvb2wnIG9yICd1c2UtbGlidG9vbCcgZm9yIHBhY2thZ2VzIHdpdGggYW4gaW50bCBkaXJlY3RvcnkuCisrZG5sICAgIElmIElOVExTWU1CT0wgaXMgJ3VzZS1saWJ0b29sJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmxhIHdpbGwgYmUgY3JlYXRlZCAoc2hhcmVkIGFuZC9vciBzdGF0aWMsCisrZG5sICAgIGRlcGVuZGluZyBvbiAtLXtlbmFibGUsZGlzYWJsZX0te3NoYXJlZCxzdGF0aWN9IGFuZCBvbiB0aGUgcHJlc2VuY2Ugb2YKKytkbmwgICAgQU0tRElTQUJMRS1TSEFSRUQpLiBJZiBJTlRMU1lNQk9MIGlzICduby1saWJ0b29sJywgYSBzdGF0aWMgbGlicmFyeQorK2RubCAgICAkKHRvcF9idWlsZGRpcikvaW50bC9saWJpbnRsLmEgd2lsbCBiZSBjcmVhdGVkLgorK2RubCBJZiBORUVEU1lNQk9MIGlzIHNwZWNpZmllZCBhbmQgaXMgJ25lZWQtbmdldHRleHQnLCB0aGVuIEdOVSBnZXR0ZXh0CisrZG5sICAgIGltcGxlbWVudGF0aW9ucyAoaW4gbGliYyBvciBsaWJpbnRsKSB3aXRob3V0IHRoZSBuZ2V0dGV4dCgpIGZ1bmN0aW9uCisrZG5sICAgIHdpbGwgYmUgaWdub3JlZC4gIElmIE5FRURTWU1CT0wgaXMgc3BlY2lmaWVkIGFuZCBpcworK2RubCAgICAnbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zJywgdGhlbiBHTlUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkb24ndAorK2RubCAgICBzdXBwb3J0IHRoZSBJU08gQyA5OSA8aW50dHlwZXMuaD4gZm9ybWF0c3RyaW5nIG1hY3JvcyB3aWxsIGJlIGlnbm9yZWQuCisrZG5sIElOVExESVIgaXMgdXNlZCB0byBmaW5kIHRoZSBpbnRsIGxpYnJhcmllcy4gIElmIGVtcHR5LAorK2RubCAgICB0aGUgdmFsdWUgYCQodG9wX2J1aWxkZGlyKS9pbnRsLycgaXMgdXNlZC4KKytkbmwKKytkbmwgVGhlIHJlc3VsdCBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvbmUgb2YgdGhyZWUgY2FzZXM6CisrZG5sIDEpIEdOVSBnZXR0ZXh0LCBhcyBpbmNsdWRlZCBpbiB0aGUgaW50bCBzdWJkaXJlY3RvcnksIHdpbGwgYmUgY29tcGlsZWQKKytkbmwgICAgYW5kIHVzZWQuCisrZG5sICAgIENhdGFsb2cgZm9ybWF0OiBHTlUgLS0+IGluc3RhbGwgaW4gJChkYXRhZGlyKQorK2RubCAgICBDYXRhbG9nIGV4dGVuc2lvbjogLm1vIGFmdGVyIGluc3RhbGxhdGlvbiwgLmdtbyBpbiBzb3VyY2UgdHJlZQorK2RubCAyKSBHTlUgZ2V0dGV4dCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3lzdGVtJ3MgQyBsaWJyYXJ5LgorK2RubCAgICBDYXRhbG9nIGZvcm1hdDogR05VIC0tPiBpbnN0YWxsIGluICQoZGF0YWRpcikKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IC5tbyBhZnRlciBpbnN0YWxsYXRpb24sIC5nbW8gaW4gc291cmNlIHRyZWUKKytkbmwgMykgTm8gaW50ZXJuYXRpb25hbGl6YXRpb24sIGFsd2F5cyB1c2UgRW5nbGlzaCBtc2dpZC4KKytkbmwgICAgQ2F0YWxvZyBmb3JtYXQ6IG5vbmUKKytkbmwgICAgQ2F0YWxvZyBleHRlbnNpb246IG5vbmUKKytkbmwgSWYgSU5UTFNZTUJPTCBpcyAnZXh0ZXJuYWwnLCBvbmx5IGNhc2VzIDIgYW5kIDMgY2FuIG9jY3VyLgorK2RubCBUaGUgdXNlIG9mIC5nbW8gaXMgaGlzdG9yaWNhbCAoaXQgd2FzIG5lZWRlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUKKytkbmwgR05VIGZvcm1hdCBjYXRhbG9ncyB3aGVuIGJ1aWxkaW5nIG9uIGEgcGxhdGZvcm0gd2l0aCBhbiBYL09wZW4gZ2V0dGV4dCksCisrZG5sIGJ1dCB3ZSBrZWVwIGl0IGluIG9yZGVyIG5vdCB0byBmb3JjZSBpcnJlbGV2YW50IGZpbGVuYW1lIGNoYW5nZXMgb24gdGhlCisrZG5sIG1haW50YWluZXJzLgorK2RubAorK0FDX0RFRlVOKFtBTV9HTlVfR0VUVEVYVF0sCisrWworKyAgZG5sIEFyZ3VtZW50IGNoZWNraW5nLgorKyAgaWZlbHNlKFskMV0sIFtdLCAsIFtpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgLCBbaWZlbHNlKFskMV0sIFtuby1saWJ0b29sXSwgLCBbaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sICwKKysgICAgW2VycnByaW50KFtFUlJPUjogaW52YWxpZCBmaXJzdCBhcmd1bWVudCB0byBBTV9HTlVfR0VUVEVYVAorK10pXSldKV0pXSkKKysgIGlmZWxzZShbJDJdLCBbXSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgLCBbaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLCAsCisrICAgIFtlcnJwcmludChbRVJST1I6IGludmFsaWQgc2Vjb25kIGFyZ3VtZW50IHRvIEFNX0dOVV9HRVRURVhUCisrXSldKV0pXSkKKysgIGRlZmluZShndF9pbmNsdWRlZF9pbnRsLCBpZmVsc2UoWyQxXSwgW2V4dGVybmFsXSwgW25vXSwgW3llc10pKQorKyAgZGVmaW5lKGd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeCwgaWZlbHNlKFskMV0sIFt1c2UtbGlidG9vbF0sIFtsXSwgW10pKQorKworKyAgQUNfUkVRVUlSRShbQU1fUE9fU1VCRElSU10pZG5sCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIEFDX1JFUVVJUkUoW0FNX0lOVExfU1VCRElSXSlkbmwKKysgIF0pCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTb21ldGltZXMgbGliaW50bCByZXF1aXJlcyBsaWJpY29udiwgc28gZmlyc3Qgc2VhcmNoIGZvciBsaWJpY29udi4KKysgIGRubCBJZGVhbGx5IHdlIHdvdWxkIGRvIHRoaXMgc2VhcmNoIG9ubHkgYWZ0ZXIgdGhlCisrICBkbmwgICAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsgdGhlbgorKyAgZG5sICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmMiICE9ICJ5ZXMiOyB0aGVuCisrICBkbmwgdGVzdHMuIEJ1dCBpZiBjb25maWd1cmUuaW4gaW52b2tlcyBBTV9JQ09OViBhZnRlciBBTV9HTlVfR0VUVEVYVAorKyAgZG5sIHRoZSBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG5lZWQgdG8gY29udGFpbiB0aGUgc2FtZSBzaGVsbCBjb2RlCisrICBkbmwgYWdhaW4sIG91dHNpZGUgYW55ICdpZicuIFRoZXJlIGFyZSB0d28gc29sdXRpb25zOgorKyAgZG5sIC0gSW52b2tlIEFNX0lDT05WX0xJTktGTEFHU19CT0RZIGhlcmUsIG91dHNpZGUgYW55ICdpZicuCisrICBkbmwgLSBDb250cm9sIHRoZSBleHBhbnNpb25zIGluIG1vcmUgZGV0YWlsIHVzaW5nIEFDX1BST1ZJREVfSUZFTFNFLgorKyAgZG5sIFNpbmNlIEFDX1BST1ZJREVfSUZFTFNFIGlzIG9ubHkgaW4gYXV0b2NvbmYgPj0gMi41MiBhbmQgbm90CisrICBkbmwgZG9jdW1lbnRlZCwgd2UgYXZvaWQgaXQuCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCAsIFsKKysgICAgQUNfUkVRVUlSRShbQU1fSUNPTlZfTElOS0ZMQUdTX0JPRFldKQorKyAgXSkKKysKKysgIGRubCBTZXQgVVNFX05MUy4KKysgIEFNX05MUworKworKyAgaWZlbHNlKGd0X2luY2x1ZGVkX2ludGwsIHllcywgWworKyAgICBCVUlMRF9JTkNMVURFRF9MSUJJTlRMPW5vCisrICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPW5vCisrICBdKQorKyAgTElCSU5UTD0KKysgIExUTElCSU5UTD0KKysgIFBPU1VCPQorKworKyAgZG5sIElmIHdlIHVzZSBOTFMgZmlndXJlIG91dCB3aGF0IG1ldGhvZAorKyAgaWYgdGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4KKysgICAgZ3RfdXNlX3ByZWluc3RhbGxlZF9nbnVnZXR0ZXh0PW5vCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgaW5jbHVkZWQgZ2V0dGV4dCBpcyByZXF1ZXN0ZWRdKQorKyAgICAgIEFDX0FSR19XSVRIKGluY2x1ZGVkLWdldHRleHQsCisrICAgICAgICBbICAtLXdpdGgtaW5jbHVkZWQtZ2V0dGV4dCB1c2UgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaW5jbHVkZWQgaGVyZV0sCisrICAgICAgICBubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0PSR3aXRodmFsLAorKyAgICAgICAgbmxzX2N2X2ZvcmNlX3VzZV9nbnVfZ2V0dGV4dD1ubykKKysgICAgICBBQ19NU0dfUkVTVUxUKCRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0KQorKworKyAgICAgIG5sc19jdl91c2VfZ251X2dldHRleHQ9IiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IgorKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfZm9yY2VfdXNlX2dudV9nZXR0ZXh0IiAhPSAieWVzIjsgdGhlbgorKyAgICBdKQorKyAgICAgICAgZG5sIFVzZXIgZG9lcyBub3QgaW5zaXN0IG9uIHVzaW5nIEdOVSBOTFMgbGlicmFyeS4gIEZpZ3VyZSBvdXQgd2hhdAorKyAgICAgICAgZG5sIHRvIHVzZS4gIElmIEdOVSBnZXR0ZXh0IGlzIGF2YWlsYWJsZSB3ZSB1c2UgdGhpcy4gIEVsc2Ugd2UgaGF2ZQorKyAgICAgICAgZG5sIHRvIGZhbGwgYmFjayB0byBHTlUgTkxTIGxpYnJhcnkuCisrCisrICAgICAgICBkbmwgQWRkIGEgdmVyc2lvbiBudW1iZXIgdG8gdGhlIGNhY2hlIG1hY3Jvcy4KKysgICAgICAgIGRlZmluZShbZ3RfYXBpX3ZlcnNpb25dLCBpZmVsc2UoWyQyXSwgW25lZWQtZm9ybWF0c3RyaW5nLW1hY3Jvc10sIDMsIGlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIDIsIDEpKSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmNdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJjXSkKKysgICAgICAgIGRlZmluZShbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGxdLCBbZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0XWd0X2FwaV92ZXJzaW9uW19saWJpbnRsXSkKKysKKysgICAgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgR05VIGdldHRleHQgaW4gbGliY10sIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjLAorKyAgICAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuIGludCAqX25sX2RvbWFpbl9iaW5kaW5ncztdLAorKyAgICAgICAgICAgIFtiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsKKytyZXR1cm4gKGludCkgZ2V0dGV4dCAoIiIpXWlmZWxzZShbJDJdLCBbbmVlZC1uZ2V0dGV4dF0sIFsgKyAoaW50KSBuZ2V0dGV4dCAoIiIsICIiLCAwKV0sIFtdKVsgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9kb21haW5fYmluZGluZ3NdLAorKyAgICAgICAgICAgIGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjPXllcywKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliYz1ubyldKQorKworKyAgICAgICAgaWYgdGVzdCAiJGd0X2N2X2Z1bmNfZ251Z2V0dGV4dF9saWJjIiAhPSAieWVzIjsgdGhlbgorKyAgICAgICAgICBkbmwgU29tZXRpbWVzIGxpYmludGwgcmVxdWlyZXMgbGliaWNvbnYsIHNvIGZpcnN0IHNlYXJjaCBmb3IgbGliaWNvbnYuCisrICAgICAgICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsICwgWworKyAgICAgICAgICAgIEFNX0lDT05WX0xJTksKKysgICAgICAgICAgXSkKKysgICAgICAgICAgZG5sIFNlYXJjaCBmb3IgbGliaW50bCBhbmQgZGVmaW5lIExJQklOVEwsIExUTElCSU5UTCBhbmQgSU5DSU5UTAorKyAgICAgICAgICBkbmwgYWNjb3JkaW5nbHkuIERvbid0IHVzZSBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ludGxdLFtpY29udl0pCisrICAgICAgICAgIGRubCBiZWNhdXNlIHRoYXQgd291bGQgYWRkICItbGljb252IiB0byBMSUJJTlRMIGFuZCBMVExJQklOVEwKKysgICAgICAgICAgZG5sIGV2ZW4gaWYgbGliaWNvbnYgZG9lc24ndCBleGlzdC4KKysgICAgICAgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFtpbnRsXSkKKysgICAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBHTlUgZ2V0dGV4dCBpbiBsaWJpbnRsXSwKKysgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCwKKysgICAgICAgICAgIFtndF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkSU5DSU5UTCIKKysgICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIgorKyAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJTlRMIgorKyAgICAgICAgICAgIGRubCBOb3cgc2VlIHdoZXRoZXIgbGliaW50bCBleGlzdHMgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgW2JpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOworK3JldHVybiAoaW50KSBnZXR0ZXh0ICgiIildaWZlbHNlKFskMl0sIFtuZWVkLW5nZXR0ZXh0XSwgWyArIChpbnQpIG5nZXR0ZXh0ICgiIiwgIiIsIDApXSwgW10pWyArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25sX2V4cGFuZF9hbGlhcyAoMCldLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9eWVzLAorKyAgICAgICAgICAgICAgZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9bm8pCisrICAgICAgICAgICAgZG5sIE5vdyBzZWUgd2hldGhlciBsaWJpbnRsIGV4aXN0cyBhbmQgZGVwZW5kcyBvbiBsaWJpY29udi4KKysgICAgICAgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiICE9IHllcyAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuCisrICAgICAgICAgICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYiCisrICAgICAgICAgICAgICBBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxpYmludGwuaD4KKytdaWZlbHNlKFskMl0sIFtuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3NdLAorK1sjaWZuZGVmIF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OCisrI2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikgPT0gMCA/IDAgOiAtMSkKKysjZW5kaWYKKytjaGFuZ2VxdW90ZSgsKWRubAorK3R5cGVkZWYgaW50IGFycmF5IFsyICogKF9fR05VX0dFVFRFWFRfU1VQUE9SVEVEX1JFVklTSU9OKDApID49IDEpIC0gMV07CisrY2hhbmdlcXVvdGUoWyxdKWRubAorK10sIFtdKVtleHRlcm4gaW50IF9ubF9tc2dfY2F0X2NudHI7CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoKTtdLAorKyAgICAgICAgICAgICAgICBbYmluZHRleHRkb21haW4gKCIiLCAiIik7CisrcmV0dXJuIChpbnQpIGdldHRleHQgKCIiKV1pZmVsc2UoWyQyXSwgW25lZWQtbmdldHRleHRdLCBbICsgKGludCkgbmdldHRleHQgKCIiLCAiIiwgMCldLCBbXSlbICsgX25sX21zZ19jYXRfY250ciArICpfbmxfZXhwYW5kX2FsaWFzICgwKV0sCisrICAgICAgICAgICAgICAgW0xJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09OViIKKysgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRMVExJQklDT05WIgorKyAgICAgICAgICAgICAgICBndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bD15ZXMKKysgICAgICAgICAgICAgICBdKQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIgorKyAgICAgICAgICAgIExJQlM9IiRndF9zYXZlX0xJQlMiXSkKKysgICAgICAgIGZpCisrCisrICAgICAgICBkbmwgSWYgYW4gYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZCBHTlUgZ2V0dGV4dCgpIGlzIGZvdW5kLAorKyAgICAgICAgZG5sIHVzZSBpdC4gIEJ1dCBpZiB0aGlzIG1hY3JvIGlzIHVzZWQgaW4gR05VIGdldHRleHQsIGFuZCBHTlUKKysgICAgICAgIGRubCBnZXR0ZXh0IGlzIGFscmVhZHkgcHJlaW5zdGFsbGVkIGluIGxpYmludGwsIHdlIHVwZGF0ZSB0aGlzCisrICAgICAgICBkbmwgbGliaW50bC4gIChDZi4gdGhlIGluc3RhbGwgcnVsZSBpbiBpbnRsL01ha2VmaWxlLmluLikKKysgICAgICAgIGlmIHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliYyIgPSAieWVzIiBcCisrICAgICAgICAgICB8fCB7IHRlc3QgIiRndF9jdl9mdW5jX2dudWdldHRleHRfbGliaW50bCIgPSAieWVzIiBcCisrICAgICAgICAgICAgICAgICYmIHRlc3QgIiRQQUNLQUdFIiAhPSBnZXR0ZXh0LXJ1bnRpbWUgXAorKyAgICAgICAgICAgICAgICAmJiB0ZXN0ICIkUEFDS0FHRSIgIT0gZ2V0dGV4dC10b29sczsgfTsgdGhlbgorKyAgICAgICAgICBndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBSZXNldCB0aGUgdmFsdWVzIHNldCBieSBzZWFyY2hpbmcgZm9yIGxpYmludGwuCisrICAgICAgICAgIExJQklOVEw9CisrICAgICAgICAgIExUTElCSU5UTD0KKysgICAgICAgICAgSU5DSU5UTD0KKysgICAgICAgIGZpCisrCisrICAgIGlmZWxzZShndF9pbmNsdWRlZF9pbnRsLCB5ZXMsIFsKKysgICAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiICE9ICJ5ZXMiOyB0aGVuCisrICAgICAgICAgIGRubCBHTlUgZ2V0dGV4dCBpcyBub3QgZm91bmQgaW4gdGhlIEMgbGlicmFyeS4KKysgICAgICAgICAgZG5sIEZhbGwgYmFjayBvbiBpbmNsdWRlZCBHTlUgZ2V0dGV4dCBsaWJyYXJ5LgorKyAgICAgICAgICBubHNfY3ZfdXNlX2dudV9nZXR0ZXh0PXllcworKyAgICAgICAgZmkKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHVzZWQgdG8gZ2VuZXJhdGUgR05VIE5MUyBsaWJyYXJ5LgorKyAgICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgICAgIFVTRV9JTkNMVURFRF9MSUJJTlRMPXllcworKyAgICAgICAgTElCSU5UTD0iaWZlbHNlKFskM10sW10sXCR7dG9wX2J1aWxkZGlyfS9pbnRsLFskM10pL2xpYmludGwuW11ndF9saWJ0b29sX3N1ZmZpeF9wcmVmaXhbXWEgJExJQklDT05WIgorKyAgICAgICAgTFRMSUJJTlRMPSJpZmVsc2UoWyQzXSxbXSxcJHt0b3BfYnVpbGRkaXJ9L2ludGwsWyQzXSkvbGliaW50bC5bXWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeFtdYSAkTFRMSUJJQ09OViIKKysgICAgICAgIExJQlM9YGVjaG8gIiAkTElCUyAiIHwgc2VkIC1lICdzLyAtbGludGwgLyAvJyAtZSAncy9eIC8vJyAtZSAncy8gJC8vJ2AKKysgICAgICBmaQorKworKyAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyIgXAorKyAgICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgICBkbmwgTWFyayBhY3Rpb25zIHRvIHVzZSBHTlUgZ2V0dGV4dCB0b29scy4KKysgICAgICAgIENBVE9CSkVYVD0uZ21vCisrICAgICAgZmkKKysgICAgXSkKKysKKysgICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dCIgPSAieWVzIiBcCisrICAgICAgIHx8IHRlc3QgIiRubHNfY3ZfdXNlX2dudV9nZXR0ZXh0IiA9ICJ5ZXMiOyB0aGVuCisrICAgICAgQUNfREVGSU5FKEVOQUJMRV9OTFMsIDEsCisrICAgICAgICBbRGVmaW5lIHRvIDEgaWYgdHJhbnNsYXRpb24gb2YgcHJvZ3JhbSBtZXNzYWdlcyB0byB0aGUgdXNlcidzIG5hdGl2ZSBsYW5ndWFnZQorKyAgIGlzIHJlcXVlc3RlZC5dKQorKyAgICBlbHNlCisrICAgICAgVVNFX05MUz1ubworKyAgICBmaQorKyAgZmkKKysKKysgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgTkxTXSkKKysgIEFDX01TR19SRVNVTFQoWyRVU0VfTkxTXSkKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbd2hlcmUgdGhlIGdldHRleHQgZnVuY3Rpb24gY29tZXMgZnJvbV0pCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIGd0X3NvdXJjZT0iZXh0ZXJuYWwgbGliaW50bCIKKysgICAgICBlbHNlCisrICAgICAgICBndF9zb3VyY2U9ImxpYmMiCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGd0X3NvdXJjZT0iaW5jbHVkZWQgaW50bCBkaXJlY3RvcnkiCisrICAgIGZpCisrICAgIEFDX01TR19SRVNVTFQoWyRndF9zb3VyY2VdKQorKyAgZmkKKysKKysgIGlmIHRlc3QgIiRVU0VfTkxTIiA9ICJ5ZXMiOyB0aGVuCisrCisrICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0X2xpYmludGwiID0gInllcyI7IHRoZW4KKysgICAgICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpbnRsXSkKKysgICAgICAgIEFDX01TR19SRVNVTFQoWyRMSUJJTlRMXSkKKysgICAgICAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ0lOVExdKQorKyAgICAgIGZpCisrCisrICAgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIHBhY2thZ2VzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICAgIEFDX0RFRklORShIQVZFX0dFVFRFWFQsIDEsCisrICAgICAgIFtEZWZpbmUgaWYgdGhlIEdOVSBnZXR0ZXh0KCkgZnVuY3Rpb24gaXMgYWxyZWFkeSBwcmVzZW50IG9yIHByZWluc3RhbGxlZC5dKQorKyAgICAgIEFDX0RFRklORShIQVZFX0RDR0VUVEVYVCwgMSwKKysgICAgICAgW0RlZmluZSBpZiB0aGUgR05VIGRjZ2V0dGV4dCgpIGZ1bmN0aW9uIGlzIGFscmVhZHkgcHJlc2VudCBvciBwcmVpbnN0YWxsZWQuXSkKKysgICAgZmkKKysKKysgICAgZG5sIFdlIG5lZWQgdG8gcHJvY2VzcyB0aGUgcG8vIGRpcmVjdG9yeS4KKysgICAgUE9TVUI9cG8KKysgIGZpCisrCisrICBpZmVsc2UoZ3RfaW5jbHVkZWRfaW50bCwgeWVzLCBbCisrICAgIGRubCBJZiB0aGlzIGlzIHVzZWQgaW4gR05VIGdldHRleHQgd2UgaGF2ZSB0byBzZXQgQlVJTERfSU5DTFVERURfTElCSU5UTAorKyAgICBkbmwgdG8gJ3llcycgYmVjYXVzZSBzb21lIG9mIHRoZSB0ZXN0c3VpdGUgcmVxdWlyZXMgaXQuCisrICAgIGlmIHRlc3QgIiRQQUNLQUdFIiA9IGdldHRleHQtcnVudGltZSB8fCB0ZXN0ICIkUEFDS0FHRSIgPSBnZXR0ZXh0LXRvb2xzOyB0aGVuCisrICAgICAgQlVJTERfSU5DTFVERURfTElCSU5UTD15ZXMKKysgICAgZmkKKysKKysgICAgZG5sIE1ha2UgYWxsIHZhcmlhYmxlcyB3ZSB1c2Uga25vd24gdG8gYXV0b2NvbmYuCisrICAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCisrICAgIEFDX1NVQlNUKFVTRV9JTkNMVURFRF9MSUJJTlRMKQorKyAgICBBQ19TVUJTVChDQVRPQkpFWFQpCisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBjb25maWd1cmUuaW5zIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBubHNfY3ZfaGVhZGVyX2ludGw9CisrICAgIG5sc19jdl9oZWFkZXJfbGliZ3Q9CisrCisrICAgIGRubCBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gU29tZSBNYWtlZmlsZXMgbWF5IGJlIHVzaW5nIHRoaXMuCisrICAgIERBVEFESVJOQU1FPXNoYXJlCisrICAgIEFDX1NVQlNUKERBVEFESVJOQU1FKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBJTlNUT0JKRVhUPS5tbworKyAgICBBQ19TVUJTVChJTlNUT0JKRVhUKQorKworKyAgICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgICBHRU5DQVQ9Z2VuY2F0CisrICAgIEFDX1NVQlNUKEdFTkNBVCkKKysKKysgICAgZG5sIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBTb21lIE1ha2VmaWxlcyBtYXkgYmUgdXNpbmcgdGhpcy4KKysgICAgaWYgdGVzdCAiJFVTRV9JTkNMVURFRF9MSUJJTlRMIiA9IHllczsgdGhlbgorKyAgICAgIElOVExPQkpTPSJcJChHRVRUT0JKUykiCisrICAgIGZpCisrICAgIEFDX1NVQlNUKElOVExPQkpTKQorKworKyAgICBkbmwgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBpZiB0aGUgc3Vycm91bmRpbmcgcGFja2FnZSB3aXNoZXMgaXQuCisrICAgIElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYPWd0X2xpYnRvb2xfc3VmZml4X3ByZWZpeAorKyAgICBBQ19TVUJTVChJTlRMX0xJQlRPT0xfU1VGRklYX1BSRUZJWCkKKysgIF0pCisrCisrICBkbmwgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFNvbWUgTWFrZWZpbGVzIG1heSBiZSB1c2luZyB0aGlzLgorKyAgSU5UTExJQlM9IiRMSUJJTlRMIgorKyAgQUNfU1VCU1QoSU5UTExJQlMpCisrCisrICBkbmwgTWFrZSBhbGwgZG9jdW1lbnRlZCB2YXJpYWJsZXMga25vd24gdG8gYXV0b2NvbmYuCisrICBBQ19TVUJTVChMSUJJTlRMKQorKyAgQUNfU1VCU1QoTFRMSUJJTlRMKQorKyAgQUNfU1VCU1QoUE9TVUIpCisrXSkKKysKKysKKytkbmwgQ2hlY2tzIGZvciBhbGwgcHJlcmVxdWlzaXRlcyBvZiB0aGUgaW50bCBzdWJkaXJlY3RvcnksCisrZG5sIGV4Y2VwdCBmb3IgSU5UTF9MSUJUT09MX1NVRkZJWF9QUkVGSVggKGFuZCBwb3NzaWJseSBMSUJUT09MKSwgSU5UTE9CSlMsCisrZG5sICAgICAgICAgICAgVVNFX0lOQ0xVREVEX0xJQklOVEwsIEJVSUxEX0lOQ0xVREVEX0xJQklOVEwuCisrQUNfREVGVU4oW0FNX0lOVExfU1VCRElSXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTUtJTlNUQUxMRElSU10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0lTQ19QT1NJWF0pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DX0NPTlNUXSlkbmwKKysgIEFDX1JFUVVJUkUoW2JoX0NfU0lHTkVEXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FDX1RZUEVfT0ZGX1RdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfVFlQRV9TSVpFX1RdKWRubAorKyAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9MT05HX0xPTkddKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9MT05HRE9VQkxFXSlkbmwKKysgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9UWVBFX1dJTlRfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgQUNfUkVRVUlSRShbZ3RfVFlQRV9JTlRNQVhfVF0pCisrICBBQ19SRVFVSVJFKFtndF9QUklOVEZfUE9TSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19BTExPQ0FdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19NTUFQXSlkbmwKKysgIEFDX1JFUVVJUkUoW2ptX0dMSUJDMjFdKWRubAorKyAgQUNfUkVRVUlSRShbZ3RfSU5URElWMF0pZG5sCisrICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pZG5sCisrICBBQ19SRVFVSVJFKFtndF9JTlRUWVBFU19QUkldKWRubAorKyAgQUNfUkVRVUlSRShbZ2xfWFNJWkVdKWRubAorKworKyAgQUNfQ0hFQ0tfVFlQRShbcHRyZGlmZl90XSwgLAorKyAgICBbQUNfREVGSU5FKFtwdHJkaWZmX3RdLCBbbG9uZ10sCisrICAgICAgIFtEZWZpbmUgYXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyB0d28gcG9pbnRlcnMsIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBkZWZpbmUgaXQuXSkKKysgICAgXSkKKysgIEFDX0NIRUNLX0hFQURFUlMoW2FyZ3ouaCBsaW1pdHMuaCBsb2NhbGUuaCBubF90eXBlcy5oIG1hbGxvYy5oIHN0ZGRlZi5oIFwKKytzdGRsaWIuaCBzdHJpbmcuaCB1bmlzdGQuaCBzeXMvcGFyYW0uaF0pCisrICBBQ19DSEVDS19GVU5DUyhbYXNwcmludGYgZndwcmludGYgZ2V0Y3dkIGdldGVnaWQgZ2V0ZXVpZCBnZXRnaWQgZ2V0dWlkIFwKKyttZW1wY3B5IG11bm1hcCBwdXRlbnYgc2V0ZW52IHNldGxvY2FsZSBzbnByaW50ZiBzdHBjcHkgc3RyY2FzZWNtcCBzdHJkdXAgXAorK3N0cnRvdWwgdHNlYXJjaCB3Y3NsZW4gX19hcmd6X2NvdW50IF9fYXJnel9zdHJpbmdpZnkgX19hcmd6X25leHQgXAorK19fZnNldGxvY2tpbmddKQorKworKyAgZG5sIFVzZSB0aGUgX3NucHJpbnRmIGZ1bmN0aW9uIG9ubHkgaWYgaXQgaXMgZGVjbGFyZWQgKGJlY2F1c2Ugb24gTmV0QlNEIGl0CisrICBkbmwgaXMgZGVmaW5lZCBhcyBhIHdlYWsgYWxpYXMgb2Ygc25wcmludGY7IHdlIHByZWZlciB0byB1c2UgdGhlIGxhdHRlcikuCisrICBndF9DSEVDS19ERUNMKF9zbnByaW50ZiwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKF9zbndwcmludGYsIFsjaW5jbHVkZSA8c3RkaW8uaD5dKQorKworKyAgZG5sIFVzZSB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgb25seSBpZiB0aGV5IGFyZSBkZWNsYXJlZC4KKysgIGRubCAoYmVjYXVzZSBzb21lIG9mIHRoZW0gd2VyZSBkZWZpbmVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgaW4gU29sYXJpcworKyAgZG5sIDIuNS4xIGJ1dCB3ZXJlIHJlbW92ZWQgaW4gU29sYXJpcyAyLjYsIHdoZXJlYXMgd2Ugd2FudCBiaW5hcmllcyBidWlsdAorKyAgZG5sIG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuIG9uIFNvbGFyaXMgMi42KS4KKysgIGRubCBEb24ndCB1c2UgQUNfQ0hFQ0tfREVDTFMgYmVjYXVzZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gYXV0b2NvbmYtMi4xMy4KKysgIGd0X0NIRUNLX0RFQ0woZmVvZl91bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrICBndF9DSEVDS19ERUNMKGZnZXRzX3VubG9ja2VkLCBbI2luY2x1ZGUgPHN0ZGlvLmg+XSkKKysgIGd0X0NIRUNLX0RFQ0woZ2V0Y191bmxvY2tlZCwgWyNpbmNsdWRlIDxzdGRpby5oPl0pCisrCisrICBjYXNlICRndF9jdl9mdW5jX3ByaW50Zl9wb3NpeCBpbgorKyAgICAqeWVzKSBIQVZFX1BPU0lYX1BSSU5URj0xIDs7CisrICAgICopIEhBVkVfUE9TSVhfUFJJTlRGPTAgOzsKKysgIGVzYWMKKysgIEFDX1NVQlNUKFtIQVZFX1BPU0lYX1BSSU5URl0pCisrICBpZiB0ZXN0ICIkYWNfY3ZfZnVuY19hc3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9BU1BSSU5URj0xCisrICBlbHNlCisrICAgIEhBVkVfQVNQUklOVEY9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0FTUFJJTlRGXSkKKysgIGlmIHRlc3QgIiRhY19jdl9mdW5jX3NucHJpbnRmIiA9IHllczsgdGhlbgorKyAgICBIQVZFX1NOUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9TTlBSSU5URj0wCisrICBmaQorKyAgQUNfU1VCU1QoW0hBVkVfU05QUklOVEZdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfd3ByaW50ZiIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9XUFJJTlRGPTEKKysgIGVsc2UKKysgICAgSEFWRV9XUFJJTlRGPTAKKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9XUFJJTlRGXSkKKysKKysgIEFNX0lDT05WCisrICBBTV9MQU5HSU5GT19DT0RFU0VUCisrICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbG9jYWxlX2ggPSB5ZXM7IHRoZW4KKysgICAgQU1fTENfTUVTU0FHRVMKKysgIGZpCisrCisrICBkbmwgaW50bC9wbHVyYWwuYyBpcyBnZW5lcmF0ZWQgZnJvbSBpbnRsL3BsdXJhbC55LiBJdCByZXF1aXJlcyBiaXNvbiwKKysgIGRubCBiZWNhdXNlIHBsdXJhbC55IHVzZXMgYmlzb24gc3BlY2lmaWMgZmVhdHVyZXMuIEl0IHJlcXVpcmVzIGF0IGxlYXN0CisrICBkbmwgYmlzb24tMS4yNiBiZWNhdXNlIGVhcmxpZXIgdmVyc2lvbnMgZ2VuZXJhdGUgYSBwbHVyYWwuYyB0aGF0IGRvZXNuJ3QKKysgIGRubCBjb21waWxlLgorKyAgZG5sIGJpc29uIGlzIG9ubHkgbmVlZGVkIGZvciB0aGUgbWFpbnRhaW5lciAod2hvIHRvdWNoZXMgcGx1cmFsLnkpLiBCdXQgaW4KKysgIGRubCBvcmRlciB0byBhdm9pZCBzZXBhcmF0ZSBNYWtlZmlsZXMgb3IgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlLCB3ZSBwdXQKKysgIGRubCB0aGUgcnVsZSBpbiBnZW5lcmFsIE1ha2VmaWxlLiBOb3csIHNvbWUgcGVvcGxlIGNhcmVsZXNzbHkgdG91Y2ggdGhlCisrICBkbmwgZmlsZXMgb3IgaGF2ZSBhIGJyb2tlbiAibWFrZSIgcHJvZ3JhbSwgaGVuY2UgdGhlIHBsdXJhbC5jIHJ1bGUgd2lsbAorKyAgZG5sIHNvbWV0aW1lcyBmaXJlLiBUbyBhdm9pZCBhbiBlcnJvciwgZGVmaW5lcyBCSVNPTiB0byAiOiIgaWYgaXQgaXMgbm90CisrICBkbmwgcHJlc2VudCBvciB0b28gb2xkLgorKyAgQUNfQ0hFQ0tfUFJPR1MoW0lOVExCSVNPTl0sIFtiaXNvbl0pCisrICBpZiB0ZXN0IC16ICIkSU5UTEJJU09OIjsgdGhlbgorKyAgICBhY192ZXJjX2ZhaWw9eWVzCisrICBlbHNlCisrICAgIGRubCBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3ZlcnNpb24gb2YgYmlzb25dKQorK2NoYW5nZXF1b3RlKDw8LD4+KWRubAorKyAgICBhY19wcm9nX3ZlcnNpb249YCRJTlRMQklTT04gLS12ZXJzaW9uIDI+JjEgfCBzZWQgLW4gJ3MvXi4qR05VIEJpc29uLiogXChbMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKysgICAgY2FzZSAkYWNfcHJvZ192ZXJzaW9uIGluCisrICAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgICAgMS4yWzYtOV0qIHwgMS5bMy05XVswLTldKiB8IFsyLTldLiopCisrY2hhbmdlcXVvdGUoWyxdKWRubAorKyAgICAgICAgIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgb2siOyBhY192ZXJjX2ZhaWw9bm87OworKyAgICAgICopIGFjX3Byb2dfdmVyc2lvbj0iJGFjX3Byb2dfdmVyc2lvbiwgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisrICAgIGVzYWMKKysgICAgQUNfTVNHX1JFU1VMVChbJGFjX3Byb2dfdmVyc2lvbl0pCisrICBmaQorKyAgaWYgdGVzdCAkYWNfdmVyY19mYWlsID0geWVzOyB0aGVuCisrICAgIElOVExCSVNPTj06CisrICBmaQorK10pCisrCisrCisrZG5sIGd0X0NIRUNLX0RFQ0woRlVOQywgSU5DTFVERVMpCisrZG5sIENoZWNrIHdoZXRoZXIgYSBmdW5jdGlvbiBpcyBkZWNsYXJlZC4KKytBQ19ERUZVTihbZ3RfQ0hFQ0tfREVDTF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJDEgaXMgZGVjbGFyZWRdLCBhY19jdl9oYXZlX2RlY2xfJDEsCisrICAgIFtBQ19UUllfQ09NUElMRShbJDJdLCBbCisrI2lmbmRlZiAkMQorKyAgY2hhciAqcCA9IChjaGFyICopICQxOworKyNlbmRpZgorK10sIGFjX2N2X2hhdmVfZGVjbF8kMT15ZXMsIGFjX2N2X2hhdmVfZGVjbF8kMT1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsXyQxID0geWVzOyB0aGVuCisrICAgIGd0X3ZhbHVlPTEKKysgIGVsc2UKKysgICAgZ3RfdmFsdWU9MAorKyAgZmkKKysgIEFDX0RFRklORV9VTlFVT1RFRChbSEFWRV9ERUNMX110cmFuc2xpdCgkMSwgW2Etel0sIFtBLVpdKSwgWyRndF92YWx1ZV0sCisrICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYCQxJywgYW5kIHRvIDAgaWYgeW91IGRvbid0Ll0pCisrXSkKKysKKysKKytkbmwgVXNhZ2U6IEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oW2dldHRleHQtdmVyc2lvbl0pCisrQUNfREVGVU4oW0FNX0dOVV9HRVRURVhUX1ZFUlNJT05dLCBbXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvZ2xpYmMyMS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvZ2xpYmMyMS5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0LjgzMzY3NTQzMiAtMDQwMAorQEAgLTAsMCArMSwzMiBAQAorKyMgZ2xpYmMyMS5tNCBzZXJpYWwgMiAoZmlsZXV0aWxzLTQuMS4zLCBnZXR0ZXh0LTAuMTAuNDApCisrZG5sIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUZXN0IGZvciB0aGUgR05VIEMgTGlicmFyeSwgdmVyc2lvbiAyLjEgb3IgbmV3ZXIuCisrIyBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbam1fR0xJQkMyMV0sCisrICBbCisrICAgIEFDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5IDIuMSBvciBuZXdlciwKKysgICAgICBhY19jdl9nbnVfbGlicmFyeV8yXzEsCisrICAgICAgW0FDX0VHUkVQX0NQUChbTHVja3kgR05VIHVzZXJdLAorKwlbCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fR05VX0xJQlJBUllfXworKyAjaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ19fID4gMikKKysgIEx1Y2t5IEdOVSB1c2VyCisrICNlbmRpZgorKyNlbmRpZgorKwldLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9eWVzLAorKwlhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8pCisrICAgICAgXQorKyAgICApCisrICAgIEFDX1NVQlNUKEdMSUJDMjEpCisrICAgIEdMSUJDMjE9IiRhY19jdl9nbnVfbGlicmFyeV8yXzEiCisrICBdCisrKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pY29udi5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaWNvbnYubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44Mzk2NzQ1MjAgLTA0MDAKK0BAIC0wLDAgKzEsMTAzIEBACisrIyBpY29udi5tNCBzZXJpYWwgQU00IChnZXR0ZXh0LTAuMTEuMykKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBBQ19MSUJfTElOS0ZMQUdTX0JPRFkuCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysKKysgIGRubCBTZWFyY2ggZm9yIGxpYmljb252IGFuZCBkZWZpbmUgTElCSUNPTlYsIExUTElCSUNPTlYgYW5kIElOQ0lDT05WCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoW2ljb252XSkKKytdKQorKworK0FDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKytbCisrICBkbmwgU29tZSBzeXN0ZW1zIGhhdmUgaWNvbnYgaW4gbGliYywgc29tZSBoYXZlIGl0IGluIGxpYmljb252IChPU0YvMSBhbmQKKysgIGRubCB0aG9zZSB3aXRoIHRoZSBzdGFuZGFsb25lIHBvcnRhYmxlIEdOVSBsaWJpY29udiBpbnN0YWxsZWQpLgorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliaWNvbnYgYW5kIGRlZmluZSBMSUJJQ09OViwgTFRMSUJJQ09OViBhbmQgSU5DSUNPTlYKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX1JFUVVJUkUoW0FNX0lDT05WX0xJTktGTEFHU19CT0RZXSkKKysKKysgIGRubCBBZGQgJElOQ0lDT05WIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJpY29udiBhbmQgbm90IGRpc2FibGVkIGl0cyB1c2UKKysgIGRubCB2aWEgLS13aXRob3V0LWxpYmljb252LXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LiBUaGUgZmlyc3QKKysgIGRubCBBQ19UUllfTElOSyB3aWxsIHRoZW4gZmFpbCwgdGhlIHNlY29uZCBBQ19UUllfTElOSyB3aWxsIHN1Y2NlZWQuCisrICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNJQ09OVl0pCisrCisrICBBQ19DQUNIRV9DSEVDSyhmb3IgaWNvbnYsIGFtX2N2X2Z1bmNfaWNvbnYsIFsKKysgICAgYW1fY3ZfZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252IgorKyAgICBhbV9jdl9saWJfaWNvbnY9bm8KKysgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8aWNvbnYuaD5dLAorKyAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgIGljb252KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOworKyAgICAgICBpY29udl9jbG9zZShjZCk7XSwKKysgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgaWYgdGVzdCAiJGFtX2N2X2Z1bmNfaWNvbnYiICE9IHllczsgdGhlbgorKyAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiCisrICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIgorKyAgICAgIEFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+XSwKKysgICAgICAgIFtpY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7CisrICAgICAgICAgaWNvbnYoY2QsTlVMTCxOVUxMLE5VTEwsTlVMTCk7CisrICAgICAgICAgaWNvbnZfY2xvc2UoY2QpO10sCisrICAgICAgICBhbV9jdl9saWJfaWNvbnY9eWVzCisrICAgICAgICBhbV9jdl9mdW5jX2ljb252PXllcykKKysgICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIgorKyAgICBmaQorKyAgXSkKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9JQ09OViwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaWNvbnYoKSBmdW5jdGlvbi5dKQorKyAgZmkKKysgIGlmIHRlc3QgIiRhbV9jdl9saWJfaWNvbnYiID0geWVzOyB0aGVuCisrICAgIEFDX01TR19DSEVDS0lORyhbaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udl0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJJQ09OVl0pCisrICBlbHNlCisrICAgIGRubCBJZiAkTElCSUNPTlYgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZCAkSU5DSUNPTlYKKysgICAgZG5sIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJJQ09OVj0KKysgICAgTFRMSUJJQ09OVj0KKysgIGZpCisrICBBQ19TVUJTVChMSUJJQ09OVikKKysgIEFDX1NVQlNUKExUTElCSUNPTlYpCisrXSkKKysKKytBQ19ERUZVTihbQU1fSUNPTlZdLAorK1sKKysgIEFNX0lDT05WX0xJTksKKysgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbgorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBkZWNsYXJhdGlvbl0pCisrICAgIEFDX0NBQ0hFX1ZBTChhbV9jdl9wcm90b19pY29udiwgWworKyAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGljb252Lmg+CisrZXh0ZXJuCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrIkMiCisrI2VuZGlmCisrI2lmIGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpCisrc2l6ZV90IGljb252IChpY29udl90IGNkLCBjaGFyICogKmluYnVmLCBzaXplX3QgKmluYnl0ZXNsZWZ0LCBjaGFyICogKm91dGJ1Ziwgc2l6ZV90ICpvdXRieXRlc2xlZnQpOworKyNlbHNlCisrc2l6ZV90IGljb252KCk7CisrI2VuZGlmCisrXSwgW10sIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiIsIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9ImNvbnN0IikKKysgICAgICBhbV9jdl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3Byb3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiXSkKKysgICAgYW1fY3ZfcHJvdG9faWNvbnY9YGVjaG8gIlskXWFtX2N2X3Byb3RvX2ljb252IiB8IHRyIC1zICcgJyB8IHNlZCAtZSAncy8oIC8oLydgCisrICAgIEFDX01TR19SRVNVTFQoWyRde2FjX3Q6LQorKyAgICAgICAgIH1bJF1hbV9jdl9wcm90b19pY29udikKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKElDT05WX0NPTlNULCAkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSwKKysgICAgICBbRGVmaW5lIGFzIGNvbnN0IGlmIHRoZSBkZWNsYXJhdGlvbiBvZiBpY29udigpIG5lZWRzIGNvbnN0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludGRpdjAubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2ludGRpdjAubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NDU2NzM2MDggLTA0MDAKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2ludG1heC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50bWF4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODU1NjcyMDg4IC0wNDAwCitAQCAtMCwwICsxLDMyIEBACisrIyBpbnRtYXgubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciB0aGUgc3lzdGVtIGhhcyB0aGUgJ2ludG1heF90JyB0eXBlLCBidXQgZG9uJ3QgYXR0ZW1wdCB0bworK2RubCBmaW5kIGEgcmVwbGFjZW1lbnQgaWYgaXQgaXMgbGFja2luZy4KKysKKytBQ19ERUZVTihbZ3RfVFlQRV9JTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIEFDX0NBQ0hFX0NIRUNLKGZvciBpbnRtYXhfdCwgZ3RfY3ZfY19pbnRtYXhfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3RkZGVmLmg+IAorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaWYgSEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrI2VuZGlmCisrI2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgKKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysjZW5kaWYKKytdLCBbaW50bWF4X3QgeCA9IC0xO10sIGd0X2N2X2NfaW50bWF4X3Q9eWVzLCBndF9jdl9jX2ludG1heF90PW5vKV0pCisrICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0lOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbnRtYXhfdCcgdHlwZSBpbiA8c3RkaW50Lmg+IG9yIDxpbnR0eXBlcy5oPi5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlc19oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlc19oLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuODY4NjcwMTEyIC0wNDAwCitAQCAtMCwwICsxLDI4IEBACisrIyBpbnR0eXBlc19oLm00IHNlcmlhbCA1IChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgICAgICBhbmQgZGVjbGFyZXMgdWludG1heF90LiBdKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9pbnR0eXBlcy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvaW50dHlwZXMubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NjE2NzExNzYgLTA0MDAKK0BAIC0wLDAgKzEsMjcgQEAKKysjIGludHR5cGVzLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTEuNCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX0lOVFRZUEVTX0ggaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoCisrIyA8c3lzL3R5cGVzLmg+LgorKworK0FDX0RFRlVOKFtndF9IRUFERVJfSU5UVFlQRVNfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBpbnR0eXBlcy5oXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2gsCisrICBbCisrICAgIEFDX1RSWV9DT01QSUxFKAorKyAgICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGludHR5cGVzLmg+XSwKKysgICAgICBbXSwgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9eWVzLCBndF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubykKKysgIF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19ILCAxLAorKyAgICAgIFtEZWZpbmUgaWYgPGludHR5cGVzLmg+IGV4aXN0cyBhbmQgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaW50dHlwZXMtcHJpLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pbnR0eXBlcy1wcmkubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44NzQ2NjkyMDAgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGludHR5cGVzLXByaS5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworKyMgRGVmaW5lIFBSSV9NQUNST1NfQlJPS0VOIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdGhlIFBSSSoKKysjIG1hY3JvcyB0byBub24tc3RyaW5nIHZhbHVlcy4gIFRoaXMgaXMgdGhlIGNhc2Ugb24gQUlYIDQuMy4zLgorKworK0FDX0RFRlVOKFtndF9JTlRUWVBFU19QUkldLAorK1sKKysgIEFDX1JFUVVJUkUoW2d0X0hFQURFUl9JTlRUWVBFU19IXSkKKysgIGlmIHRlc3QgJGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuCisrICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBpbnR0eXBlcy5oIFBSSXhOTiBtYWNyb3MgYXJlIGJyb2tlbl0sCisrICAgICAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jyb2tlbiwKKysgICAgICBbCisrICAgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2lmZGVmIFBSSWQzMgorK2NoYXIgKnAgPSBQUklkMzI7CisrI2VuZGlmCisrXSwgW10sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49bm8sIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW49eWVzKQorKyAgICAgIF0pCisrICBmaQorKyAgaWYgdGVzdCAiJGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4iID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChQUklfTUFDUk9TX0JST0tFTiwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRlZmluZXMgdW51c2FibGUgUFJJKiBtYWNyb3MuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvaXNjLXBvc2l4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9pc2MtcG9zaXgubTQJMjAwNC0wOS0xMiAxNDo0MDozNC44ODU2Njc1MjggLTA0MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysjIGlzYy1wb3NpeC5tNCBzZXJpYWwgMiAoZ2V0dGV4dC0wLjExLjIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrIyBUaGlzIGZpbGUgaXMgbm90IG5lZWRlZCB3aXRoIGF1dG9jb25mLTIuNTMgYW5kIG5ld2VyLiAgUmVtb3ZlIGl0IGluIDIwMDUuCisrCisrIyBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9uZSBpbiBhdXRvY29uZi4KKysjIEN1cnJlbnRseSB0aGlzIG1hY3JvIHNob3VsZCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF1dG9jb25mIG1hY3JvCisrIyBiZWNhdXNlIGdldHRleHQncyBnZXR0ZXh0Lm00IChkaXN0cmlidXRlZCBpbiB0aGUgYXV0b21ha2UgcGFja2FnZSkKKysjIHN0aWxsIHVzZXMgaXQuICBPdGhlcndpc2UsIHRoZSB1c2UgaW4gZ2V0dGV4dC5tNCBtYWtlcyBhdXRvaGVhZGVyCisrIyBnaXZlIHRoZXNlIGRpYWdub3N0aWNzOgorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfQ09NUElMRSB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX1JVTiB3YXMgY2FsbGVkIGJlZm9yZSBBQ19JU0NfUE9TSVgKKysKKyt1bmRlZmluZShbQUNfSVNDX1BPU0lYXSkKKysKKytBQ19ERUZVTihbQUNfSVNDX1BPU0lYXSwKKysgIFsKKysgICAgZG5sIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb2Jzb2xlc2NlbnQgQUNfSVNDX1BPU0lYIGtsdWRnZS4KKysgICAgQUNfQ0hFQ0tfTElCKGNwb3NpeCwgc3RyZXJyb3IsIFtMSUJTPSIkTElCUyAtbGNwb3NpeCJdKQorKyAgXQorKykKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGNtZXNzYWdlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sY21lc3NhZ2UubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45MDI2NjQ5NDQgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L2xpYi1sZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbGliLWxkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTA4NjY0MDMyIC0wNDAwCitAQCAtMCwwICsxLDExMiBAQAorKyMgbGliLWxkLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFN1YnJvdXRpbmVzIG9mIGxpYnRvb2wubTQsCisrZG5sIHdpdGggcmVwbGFjZW1lbnRzIHMvQUNfL0FDX0xJQi8gYW5kIHMvbHRfY3YvYWNsX2N2LyB0byBhdm9pZCBjb2xsaXNpb24KKytkbmwgd2l0aCBsaWJ0b29sLm00LgorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSB3aXRoX2dudV9sZCB0byB5ZXMgb3Igbm8uCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEX0dOVV0sCisrW0FDX0NBQ0hFX0NIRUNLKFtpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZF0sIGFjbF9jdl9wcm9nX2dudV9sZCwKKytbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKytjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKypHTlUqIHwgKid3aXRoIEJGRCcqKQorKyAgYWNsX2N2X3Byb2dfZ251X2xkPXllcyA7OworKyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9bm8gOzsKKytlc2FjXSkKKyt3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251X2xkCisrXSkKKysKKytkbmwgRnJvbSBsaWJ0b29sLTEuNC4gU2V0cyB0aGUgdmFyaWFibGUgTEQuCisrQUNfREVGVU4oW0FDX0xJQl9QUk9HX0xEXSwKKytbQUNfQVJHX1dJVEgoZ251LWxkLAorK1sgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub11dLAorK3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcywgd2l0aF9nbnVfbGQ9bm8pCisrQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKyMgUHJlcGFyZSBQQVRIX1NFUEFSQVRPUi4KKysjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KKytpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorKyAgY2htb2QgK3ggY29uZiQkLnNoCisrICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKysgIGVsc2UKKysgICAgUEFUSF9TRVBBUkFUT1I9OgorKyAgZmkKKysgIHJtIC1mIGNvbmYkJC5zaAorK2ZpCisrYWNfcHJvZz1sZAorK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgR0NDXSkKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyopCisrICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworKyAgKikKKysgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworKyAgZXNhYworKyAgY2FzZSAkYWNfcHJvZyBpbgorKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKysgICAgW1tcXC9dKiB8IFtBLVphLXpdOltcXC9dKildCisrICAgICAgW3JlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLyddCisrICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGggb2YgbGQKKysgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgJ3MlXFxcXCUvJWcnYAorKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworKwlhY19wcm9nPWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgCisrICAgICAgZG9uZQorKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorKyAgICAgIDs7CisrICAiIikKKysgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisrICAgIGFjX3Byb2c9bGQKKysgICAgOzsKKysgICopCisrICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKysgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorKyAgICA7OworKyAgZXNhYworK2VsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKKytlbHNlCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKKytmaQorK0FDX0NBQ0hFX1ZBTChhY2xfY3ZfcGF0aF9MRCwKKytbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorKyAgSUZTPSIke0lGUz0gCX0iOyBhY19zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JHtQQVRIX1NFUEFSQVRPUi06fSIKKysgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisrICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisrICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorKyAgICAgIGFjbF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgorKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKysgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkJ3Mgb25seSBhY2NlcHQgLXYuCisrICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisrICAgICAgY2FzZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4KKysgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhayA7OworKyAgICAgICopCisrCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKyAgZG9uZQorKyAgSUZTPSIkYWNfc2F2ZV9pZnMiCisrZWxzZQorKyAgYWNsX2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisrZmldKQorK0xEPSIkYWNsX2N2X3BhdGhfTEQiCisraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorKyAgQUNfTVNHX1JFU1VMVCgkTEQpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCisrQUNfTElCX1BST0dfTERfR05VCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvbGliLWxpbmsubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L2xpYi1saW5rLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTE0NjYzMTIwIC0wNDAwCitAQCAtMCwwICsxLDU1MSBAQAorKyMgbGliLWxpbmsubTQgc2VyaWFsIDQgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1MobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKytkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQKKytkbmwgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIGRlZmluZShbTmFtZV0sW3RyYW5zbGl0KFskMV0sWy4vLV0sIFtfX19dKV0pCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lW11fbGlic10sIFsKKysgICAgQUNfTElCX0xJTktGTEFHU19CT0RZKFskMV0sIFskMl0pCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2xpYnM9IiRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicz0iJExUTElCW11OQU1FIgorKyAgICBhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncz0iJElOQ1tdTkFNRSIKKysgIF0pCisrICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorKyAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisrICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorKyAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisrICBIQVZFX0xJQltdTkFNRT15ZXMKKysgIHVuZGVmaW5lKFtOYW1lXSkKKysgIHVuZGVmaW5lKFtOQU1FXSkKKytdKQorKworK2RubCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MobmFtZSwgZGVwZW5kZW5jaWVzLCBpbmNsdWRlcywgdGVzdGNvZGUpCisrZG5sIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kCisrZG5sIGltcGxpY2l0IGRlcGVuZGVuY2llcywgdG9nZXRoZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGluY2x1ZGUgZmlsZXMgYW5kCisrZG5sIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGxpbmsgdGhlIHNwZWNpZmllZCB0ZXN0Y29kZS4gSWYgZm91bmQsIGl0CisrZG5sIHNldHMgYW5kIEFDX1NVQlNUcyBIQVZFX0xJQiR7TkFNRX09eWVzIGFuZCB0aGUgTElCJHtOQU1FfSBhbmQKKytkbmwgTFRMSUIke05BTUV9IHZhcmlhYmxlcyBhbmQgYXVnbWVudHMgdGhlIENQUEZMQUdTIHZhcmlhYmxlLCBhbmQKKytkbmwgI2RlZmluZXMgSEFWRV9MSUIke05BTUV9IHRvIDEuIE90aGVyd2lzZSwgaXQgc2V0cyBhbmQgQUNfU1VCU1RzCisrZG5sIEhBVkVfTElCJHtOQU1FfT1ubyBhbmQgTElCJHtOQU1FfSBhbmQgTFRMSUIke05BTUV9IHRvIGVtcHR5LgorK0FDX0RFRlVOKFtBQ19MSUJfSEFWRV9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKworKyAgZG5sIFNlYXJjaCBmb3IgbGliW11OYW1lIGFuZCBkZWZpbmUgTElCW11OQU1FLCBMVExJQltdTkFNRSBhbmQgSU5DW11OQU1FCisrICBkbmwgYWNjb3JkaW5nbHkuCisrICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysKKysgIGRubCBBZGQgJElOQ1tdTkFNRSB0byBDUFBGTEFHUyBiZWZvcmUgcGVyZm9ybWluZyB0aGUgZm9sbG93aW5nIGNoZWNrcywKKysgIGRubCBiZWNhdXNlIGlmIHRoZSB1c2VyIGhhcyBpbnN0YWxsZWQgbGliW11OYW1lIGFuZCBub3QgZGlzYWJsZWQgaXRzIHVzZQorKyAgZG5sIHZpYSAtLXdpdGhvdXQtbGliW11OYW1lLXByZWZpeCwgaGUgd2FudHMgdG8gdXNlIGl0LgorKyAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYltdJDFdLCBbYWNfY3ZfbGliW11OYW1lXSwgWworKyAgICBhY19zYXZlX0xJQlM9IiRMSUJTIgorKyAgICBMSUJTPSIkTElCUyAkTElCW11OQU1FIgorKyAgICBBQ19UUllfTElOSyhbJDNdLCBbJDRdLCBbYWNfY3ZfbGliW11OYW1lPXllc10sIFthY19jdl9saWJbXU5hbWU9bm9dKQorKyAgICBMSUJTPSIkYWNfc2F2ZV9MSUJTIgorKyAgXSkKKysgIGlmIHRlc3QgIiRhY19jdl9saWJbXU5hbWUiID0geWVzOyB0aGVuCisrICAgIEhBVkVfTElCW11OQU1FPXllcworKyAgICBBQ19ERUZJTkUoW0hBVkVfTElCXU5BTUUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICQxIGxpYnJhcnkuXSkKKysgICAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gbGluayB3aXRoIGxpYltdJDFdKQorKyAgICBBQ19NU0dfUkVTVUxUKFskTElCW11OQU1FXSkKKysgIGVsc2UKKysgICAgSEFWRV9MSUJbXU5BTUU9bm8KKysgICAgZG5sIElmICRMSUJbXU5BTUUgZGlkbid0IGxlYWQgdG8gYSB1c2FibGUgbGlicmFyeSwgd2UgZG9uJ3QgbmVlZAorKyAgICBkbmwgJElOQ1tdTkFNRSBlaXRoZXIuCisrICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKysgICAgTElCW11OQU1FPQorKyAgICBMVExJQltdTkFNRT0KKysgIGZpCisrICBBQ19TVUJTVChbSEFWRV9MSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMVExJQl1OQU1FKQorKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIERldGVybWluZSB0aGUgcGxhdGZvcm0gZGVwZW5kZW50IHBhcmFtZXRlcnMgbmVlZGVkIHRvIHVzZSBycGF0aDoKKytkbmwgbGliZXh0LCBzaGxpYmV4dCwgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgaGFyZGNvZGVfZGlyZWN0LCBoYXJkY29kZV9taW51c19MLgorK0FDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKSAgICAgICAgICAgICAgICBkbmwgd2UgdXNlICRDQywgJEdDQywgJExERkxBR1MKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUk9HX0xEXSkgICAgICAgICAgICBkbmwgd2UgdXNlICRMRCwgJHdpdGhfZ251X2xkCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pICAgICAgICAgZG5sIHdlIHVzZSAkaG9zdAorKyAgQUNfUkVRVUlSRShbQUNfQ09ORklHX0FVWF9ESVJfREVGQVVMVF0pIGRubCB3ZSB1c2UgJGFjX2F1eF9kaXIKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luXSwgYWNsX2N2X3JwYXRoLCBbCisrICAgIENDPSIkQ0MiIEdDQz0iJEdDQyIgTERGTEFHUz0iJExERkxBR1MiIExEPSIkTEQiIHdpdGhfZ251X2xkPSIkd2l0aF9nbnVfbGQiIFwKKysgICAgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoCisrICAgIC4gLi9jb25mdGVzdC5zaAorKyAgICBybSAtZiAuL2NvbmZ0ZXN0LnNoCisrICAgIGFjbF9jdl9ycGF0aD1kb25lCisrICBdKQorKyAgd2w9IiRhY2xfY3Zfd2wiCisrICBsaWJleHQ9IiRhY2xfY3ZfbGliZXh0IgorKyAgc2hsaWJleHQ9IiRhY2xfY3Zfc2hsaWJleHQiCisrICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiCisrICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisrICBoYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgaGFyZGNvZGVfbWludXNfTD0iJGFjbF9jdl9oYXJkY29kZV9taW51c19MIgorKyAgZG5sIERldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIHdhbnRzIHJwYXRoIGhhbmRsaW5nIGF0IGFsbC4KKysgIEFDX0FSR19FTkFCTEUocnBhdGgsCisrICAgIFsgIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxpYnJhcnkgcGF0aHNdLAorKyAgICA6LCBlbmFibGVfcnBhdGg9eWVzKQorK10pCisrCisrZG5sIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyB0aGUgTElCJHtOQU1FfSwgTFRMSUIke05BTUV9IGFuZCBJTkMke05BTUV9IHZhcmlhYmxlcy4KKytBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKytbCisrICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBCeSBkZWZhdWx0LCBsb29rIGluICRpbmNsdWRlZGlyIGFuZCAkbGliZGlyLgorKyAgdXNlX2FkZGl0aW9uYWw9eWVzCisrICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgXSkKKysgIEFDX0xJQl9BUkdfV0lUSChbbGliJDEtcHJlZml4XSwKKytbICAtLXdpdGgtbGliJDEtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYiQxIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliJDEtcHJlZml4ICAgICBkb24ndCBzZWFyY2ggZm9yIGxpYiQxIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcl0sCisrWworKyAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhubyI7IHRoZW4KKysgICAgICB1c2VfYWRkaXRpb25hbD1ubworKyAgICBlbHNlCisrICAgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbgorKyAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgICAgICAgIF0pCisrICAgICAgZWxzZQorKyAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkd2l0aHZhbC9pbmNsdWRlIgorKyAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsL2xpYiIKKysgICAgICBmaQorKyAgICBmaQorK10pCisrICBkbmwgU2VhcmNoIHRoZSBsaWJyYXJ5IGFuZCBpdHMgZGVwZW5kZW5jaWVzIGluICRhZGRpdGlvbmFsX2xpYmRpciBhbmQKKysgIGRubCAkTERGTEFHUy4gVXNpbmcgYnJlYWR0aC1maXJzdC1zZWFjaC4KKysgIExJQltdTkFNRT0KKysgIExUTElCW11OQU1FPQorKyAgSU5DW11OQU1FPQorKyAgcnBhdGhkaXJzPQorKyAgbHRycGF0aGRpcnM9CisrICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9CisrICBuYW1lc19uZXh0X3JvdW5kPSckMSAkMicKKysgIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsgZG8KKysgICAgbmFtZXNfdGhpc19yb3VuZD0iJG5hbWVzX25leHRfcm91bmQiCisrICAgIG5hbWVzX25leHRfcm91bmQ9CisrICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbworKyAgICAgIGFscmVhZHlfaGFuZGxlZD0KKysgICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFkeV9oYW5kbGVkOyBkbworKyAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbgorKyAgICAgICAgICBhbHJlYWR5X2hhbmRsZWQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbgorKyAgICAgICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIgorKyAgICAgICAgZG5sIFNlZSBpZiBpdCB3YXMgYWxyZWFkeSBsb2NhdGVkIGJ5IGFuIGVhcmxpZXIgQUNfTElCX0xJTktGTEFHUworKyAgICAgICAgZG5sIG9yIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYWxsLgorKyAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy18QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX198J2AKKysgICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwiCisrICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgIiR2YWx1ZSIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExUTElCJHVwcGVybmFtZVwiCisrICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSR2YWx1ZSIKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBBbiBlYXJsaWVyIGNhbGwgdG8gQUNfTElCX0hBVkVfTElOS0ZMQUdTIGhhcyBkZXRlcm1pbmVkCisrICAgICAgICAgICAgZG5sIHRoYXQgdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZXhpc3QuIFNvIGp1c3QgZHJvcCBpdC4KKysgICAgICAgICAgICA6CisrICAgICAgICAgIGZpCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgbGliJG5hbWUgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZCAkTERGTEFHUworKyAgICAgICAgICBkbmwgYW5kIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FLyRMVExJQk5BTUUuCisrICAgICAgICAgIGZvdW5kX2Rpcj0KKysgICAgICAgICAgZm91bmRfbGE9CisrICAgICAgICAgIGZvdW5kX3NvPQorKyAgICAgICAgICBmb3VuZF9hPQorKyAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgZm91bmRfc289IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisrICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiICYmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJGxpYmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyL2xpYiRuYW1lLiRsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvbGliJG5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICBmaQorKyAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgZG5sIEZvdW5kIHRoZSBsaWJyYXJ5LgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9zbyIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBkbmwgTGlua2luZyB3aXRoIGEgc2hhcmVkIGxpYnJhcnkuIFdlIGF0dGVtcHQgdG8gaGFyZGNvZGUgaXRzCisrICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5IGludG8gdGhlIGV4ZWN1dGFibGUncyBydW5wYXRoLCB1bmxlc3MgaXQncyB0aGUKKysgICAgICAgICAgICAgIGRubCBzdGFuZGFyZCAvdXNyL2xpYi4KKysgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiID0gbm8gfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIE5vIGhhcmRjb2RpbmcgaXMgbmVlZGVkLgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworKyAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZG5sIFRoZSBoYXJkY29kaW5nIGludG8gJExJQk5BTUUgaXMgc3lzdGVtIGRlcGVuZGVudC4KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgICAgICAgICBkbmwgVXNpbmcgRElSL2xpYk5BTUUuc28gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorKyAgICAgICAgICAgICAgICAgIGRubCByZXN1bHRpbmcgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgICAgICBkbmwgYmluYXJ5LgorKyAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICBkbmwgVGhlIHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJzPSIkcnBhdGhkaXJzICRmb3VuZF9kaXIiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGRubCBSZWx5IG9uICItTCRmb3VuZF9kaXIiLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQgaWYgaXQncyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgTERGTEFHUworKyAgICAgICAgICAgICAgICAgICAgZG5sIG9yIHRoZSBhbHJlYWR5IGNvbnN0cnVjdGVkICRMSUJOQU1FCisrICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKysgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorKyAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfYSIKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZG5sIFdlIHNob3VsZG4ndCBjb21lIGhlcmUsIGJ1dCBhbnl3YXkgaXQncyBnb29kIHRvIGhhdmUgYQorKyAgICAgICAgICAgICAgICBkbmwgZmFsbGJhY2suCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIEFzc3VtZSB0aGUgaW5jbHVkZSBmaWxlcyBhcmUgbmVhcmJ5LgorKyAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0KKysgICAgICAgICAgICBjYXNlICIkZm91bmRfZGlyIiBpbgorKyAgICAgICAgICAgICAgKi9saWIgfCAqL2xpYi8pCisrICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAncywvbGliLyokLCwnYAorKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiCisrICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkSU5DTkFNRS4KKysgICAgICAgICAgICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgICAgICAgICAgICBkbmwgICAxLiBpZiBpdCdzIHRoZSBzdGFuZGFyZCAvdXNyL2luY2x1ZGUsCisrICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRDUFBGTEFHUyBvciB0aGUgYWxyZWFkeQorKyAgICAgICAgICAgICAgZG5sICAgICAgY29uc3RydWN0ZWQgJElOQ05BTUUsCisrICAgICAgICAgICAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRlIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1tdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICBJTkNbXU5BTUU9IiR7SU5DW11OQU1FfSR7SU5DW11OQU1FOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgTG9vayBmb3IgZGVwZW5kZW5jaWVzLgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBSZWFkIHRoZSAubGEgZmlsZS4gSXQgZGVmaW5lcyB0aGUgdmFyaWFibGVzCisrICAgICAgICAgICAgICBkbmwgZGxuYW1lLCBsaWJyYXJ5X25hbWVzLCBvbGRfbGlicmFyeSwgZGVwZW5kZW5jeV9saWJzLCBjdXJyZW50LAorKyAgICAgICAgICAgICAgZG5sIGFnZSwgcmV2aXNpb24sIGluc3RhbGxlZCwgZGxvcGVuLCBkbHByZW9wZW4sIGxpYmRpci4KKysgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2xhIiBpbgorKyAgICAgICAgICAgICAgICAqLyogfCAqXFwqKSAuICIkZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICBkbmwgV2UgdXNlIG9ubHkgZGVwZW5kZW5jeV9saWJzLgorKyAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworKyAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbgorKyAgICAgICAgICAgICAgICAgIC1MKikKKysgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FIGFuZCAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMi4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDMuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkTElCTkFNRSwKKysgICAgICAgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExUTElCTkFNRS4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRhZGRpdGlvbmFsX2xpYmRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1SKikKKysgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCBESVIgdG8gbHRycGF0aGRpcnMuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgbHRycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTFRMSUJOQU1FIGF0IHRoZSBlbmQuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAtbCopCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8nYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqLmxhKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIEhhbmRsZSB0aGlzIGluIHRoZSBuZXh0IHJvdW5kLiBUaHJvdyBhd2F5IHRoZSAubGEncworKyAgICAgICAgICAgICAgICAgICAgZG5sIGRpcmVjdG9yeTsgaXQgaXMgYWxyZWFkeSBjb250YWluZWQgaW4gYSBwcmVjZWRpbmcgLUwKKysgICAgICAgICAgICAgICAgICAgIGRubCBvcHRpb24uCisrICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncyxeWC4qLywsJyAtZSAncyxebGliLCwnIC1lICdzLFwubGEkLCwnYAorKyAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgZG5sIE1vc3QgbGlrZWx5IGFuIGltbWVkaWF0ZSBsaWJyYXJ5IG5hbWUuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfSRkZXAiCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGRubCBEaWRuJ3QgZmluZCB0aGUgbGlicmFyeTsgYXNzdW1lIGl0IGlzIGluIHRoZSBzeXN0ZW0gZGlyZWN0b3JpZXMKKysgICAgICAgICAgICBkbmwga25vd24gdG8gdGhlIGxpbmtlciBhbmQgcnVudGltZSBsb2FkZXIuIChBbGwgdGhlIHN5c3RlbQorKyAgICAgICAgICAgIGRubCBkaXJlY3RvcmllcyBrbm93biB0byB0aGUgbGlua2VyIHNob3VsZCBhbHNvIGJlIGtub3duIHRvIHRoZQorKyAgICAgICAgICAgIGRubCBydW50aW1lIGxvYWRlciwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMgc2V2ZXJlbHkgbWlzY29uZmlndXJlZC4pCisrICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZG9uZQorKyAgZG9uZQorKyAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKysgICAgICBkbmwgV2VpcmQgcGxhdGZvcm06IG9ubHkgdGhlIGxhc3QgLXJwYXRoIG9wdGlvbiBjb3VudHMsIHRoZSB1c2VyIG11c3QKKysgICAgICBkbmwgcGFzcyBhbGwgcGF0aCBlbGVtZW50cyBpbiBvbmUgb3B0aW9uLiBXZSBjYW4gYXJyYW5nZSB0aGF0IGZvciBhCisrICAgICAgZG5sIHNpbmdsZSBsaWJyYXJ5LCBidXQgbm90IHdoZW4gbW9yZSB0aGFuIG9uZSAkTElCTkFNRXMgYXJlIHVzZWQuCisrICAgICAgYWxsZGlycz0KKysgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICBhbGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorKyAgICAgIGRvbmUKKysgICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgIGVsc2UKKysgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgIGxpYmRpcj0iJGZvdW5kX2RpciIKKysgICAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisrICAgICAgZG9uZQorKyAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIlgkbHRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICBkbmwgV2hlbiB1c2luZyBsaWJ0b29sLCB0aGUgb3B0aW9uIHRoYXQgd29ya3MgZm9yIGJvdGggbGlicmFyaWVzIGFuZAorKyAgICBkbmwgZXhlY3V0YWJsZXMgaXMgLVIuIFRoZSAtUiBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1SJGZvdW5kX2RpciIKKysgICAgZG9uZQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfQVBQRU5EVE9WQVIoVkFSLCBDT05URU5UUykgYXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgQ09OVEVOVFMgdG8gVkFSLAorK2RubCB1bmxlc3MgYWxyZWFkeSBwcmVzZW50IGluIFZBUi4KKytkbmwgV29ya3Mgb25seSBmb3IgQ1BQRkxBR1MsIG5vdCBmb3IgTElCKiB2YXJpYWJsZXMgYmVjYXVzZSB0aGF0IHNvbWV0aW1lcworK2RubCBjb250YWlucyB0d28gb3IgdGhyZWUgY29uc2VjdXRpdmUgZWxlbWVudHMgdGhhdCBiZWxvbmcgdG9nZXRoZXIuCisrQUNfREVGVU4oW0FDX0xJQl9BUFBFTkRUT1ZBUl0sCisrWworKyAgZm9yIGVsZW1lbnQgaW4gWyQyXTsgZG8KKysgICAgaGF2ZWl0PQorKyAgICBmb3IgeCBpbiAkWyQxXTsgZG8KKysgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50IjsgdGhlbgorKyAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgYnJlYWsKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgWyQxXT0iJHtbJDFdfSR7WyQxXTorIH0kZWxlbWVudCIKKysgICAgZmkKKysgIGRvbmUKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9saWItcHJlZml4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9saWItcHJlZml4Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTIxNjYyMDU2IC0wNDAwCitAQCAtMCwwICsxLDE1NSBAQAorKyMgbGliLXByZWZpeC5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjEzKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0FSR19XSVRIIGlzIHN5bm9ueW1vdXMgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYtMi4xMywgYW5kCisrZG5sIHNpbWlsYXIgdG8gQUNfQVJHX1dJVEggaW4gYXV0b2NvbmYgMi41Mi4uLjIuNTcgZXhjZXB0IHRoYXQgaXMgZG9lc24ndAorK2RubCByZXF1aXJlIGV4Y2Vzc2l2ZSBicmFja2V0aW5nLgorK2lmZGVmKFtBQ19IRUxQX1NUUklOR10sCisrW0FDX0RFRlVOKFtBQ19MSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbWyQyXV0sWyQzXSxbJDRdKV0pXSwKKytbQUNfREVGVU4oW0FDX11bTElCX0FSR19XSVRIXSwgW0FDX0FSR19XSVRIKFskMV0sWyQyXSxbJDNdLFskNF0pXSldKQorKworK2RubCBBQ19MSUJfUFJFRklYIGFkZHMgdG8gdGhlIENQUEZMQUdTIGFuZCBMREZMQUdTIHRoZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQKKytkbmwgdG8gYWNjZXNzIHByZXZpb3VzbHkgaW5zdGFsbGVkIGxpYnJhcmllcy4gVGhlIGJhc2ljIGFzc3VtcHRpb24gaXMgdGhhdAorK2RubCBhIHVzZXIgd2lsbCB3YW50IHBhY2thZ2VzIHRvIHVzZSBvdGhlciBwYWNrYWdlcyBoZSBwcmV2aW91c2x5IGluc3RhbGxlZAorK2RubCB3aXRoIHRoZSBzYW1lIC0tcHJlZml4IG9wdGlvbi4KKytkbmwgVGhpcyBtYWNybyBpcyBub3QgbmVlZGVkIGlmIG9ubHkgQUNfTElCX0xJTktGTEFHUyBpcyB1c2VkIHRvIGxvY2F0ZQorK2RubCBsaWJyYXJpZXMsIGJ1dCBpcyBvdGhlcndpc2UgdmVyeSBjb252ZW5pZW50LgorK0FDX0RFRlVOKFtBQ19MSUJfUFJFRklYXSwKKytbCisrICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xJQl9MSU5LRkxBR1NdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWItcHJlZml4XSwKKytbICAtLXdpdGgtbGliLXByZWZpeFs9RElSXSBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYi1wcmVmaXggICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJyYXJpZXMgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgIGRubCBQb3RlbnRpYWxseSBhZGQgJGFkZGl0aW9uYWxfaW5jbHVkZWRpciB0byAkQ1BQRkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgZG5sICAgMi4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgIGJyZWFrCisrICAgICAgICBmaQorKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICBkbmwgUmVhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgICAgICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExERkxBR1MuCisrICAgIGRubCBCdXQgZG9uJ3QgYWRkIGl0CisrICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvbGliLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkTERGTEFHUywKKysgICAgZG5sICAgMy4gaWYgaXQncyAvdXNyL2xvY2FsL2xpYiBhbmQgd2UgYXJlIHVzaW5nIEdDQyBvbiBMaW51eCwKKysgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyL2xpYiI7IHRoZW4KKysgICAgICBoYXZlaXQ9CisrICAgICAgZm9yIHggaW4gJExERkxBR1M7IGRvCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC9saWIiOyB0aGVuCisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorKyAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgICAgICAgICBMREZMQUdTPSIke0xERkxBR1N9JHtMREZMQUdTOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgZmkKKytdKQorKworK2RubCBBQ19MSUJfUFJFUEFSRV9QUkVGSVggY3JlYXRlcyB2YXJpYWJsZXMgYWNsX2ZpbmFsX3ByZWZpeCwKKytkbmwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4LCBjb250YWluaW5nIHRoZSB2YWx1ZXMgdG8gd2hpY2ggJHByZWZpeCBhbmQKKytkbmwgJGV4ZWNfcHJlZml4IHdpbGwgZXhwYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0sCisrWworKyAgZG5sIFVuZm9ydHVuYXRlbHksIHByZWZpeCBhbmQgZXhlY19wcmVmaXggZ2V0IG9ubHkgZmluYWxseSBkZXRlcm1pbmVkCisrICBkbmwgYXQgdGhlIGVuZCBvZiBjb25maWd1cmUuCisrICBpZiB0ZXN0ICJYJHByZWZpeCIgPSAiWE5PTkUiOyB0aGVuCisrICAgIGFjbF9maW5hbF9wcmVmaXg9IiRhY19kZWZhdWx0X3ByZWZpeCIKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJHByZWZpeCIKKysgIGZpCisrICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PScke3ByZWZpeH0nCisrICBlbHNlCisrICAgIGFjbF9maW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZmkKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBldmFsIGFjbF9maW5hbF9leGVjX3ByZWZpeD1cIiRhY2xfZmluYWxfZXhlY19wcmVmaXhcIgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrZG5sIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbc3RhdGVtZW50XSkgZXZhbHVhdGVzIHN0YXRlbWVudCwgd2l0aCB0aGUKKytkbmwgdmFyaWFibGVzIHByZWZpeCBhbmQgZXhlY19wcmVmaXggYm91bmQgdG8gdGhlIHZhbHVlcyB0aGV5IHdpbGwgaGF2ZQorK2RubCBhdCB0aGUgZW5kIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0LgorK0FDX0RFRlVOKFtBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVhdLAorK1sKKysgIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiCisrICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4IgorKyAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiCisrICAkMQorKyAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIKKysgIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nZG91YmxlLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9sb25nZG91YmxlLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTQyNjU4ODY0IC0wNDAwCitAQCAtMCwwICsxLDMwIEBACisrIyBsb25nZG91YmxlLm00IHNlcmlhbCAxIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAnbG9uZyBkb3VibGUnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX0xPTkdET1VCTEVdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbG9uZyBkb3VibGVdLCBndF9jdl9jX2xvbmdfZG91YmxlLAorKyAgICBbaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgICAgZ3RfY3ZfY19sb25nX2RvdWJsZT15ZXMKKysgICAgIGVsc2UKKysgICAgICAgQUNfVFJZX0NPTVBJTEUoWworKyAgICAgICAgIC8qIFRoZSBTdGFyZGVudCBWaXN0cmEga25vd3Mgc2l6ZW9mKGxvbmcgZG91YmxlKSwgYnV0IGRvZXMgbm90IHN1cHBvcnQgaXQuICAqLworKyAgICAgICAgIGxvbmcgZG91YmxlIGZvbyA9IDAuMDsKKysgICAgICAgICAvKiBPbiBVbHRyaXggNC4zIGNjLCBsb25nIGRvdWJsZSBpcyA0IGFuZCBkb3VibGUgaXMgOC4gICovCisrICAgICAgICAgaW50IGFycmF5IFsyKihzaXplb2YobG9uZyBkb3VibGUpID49IHNpemVvZihkb3VibGUpKSAtIDFdOworKyAgICAgICAgIF0sICwKKysgICAgICAgICBndF9jdl9jX2xvbmdfZG91YmxlPXllcywgZ3RfY3ZfY19sb25nX2RvdWJsZT1ubykKKysgICAgIGZpXSkKKysgIGlmIHRlc3QgJGd0X2N2X2NfbG9uZ19kb3VibGUgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGRvdWJsZScgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9sb25nbG9uZy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45NDk2NTc4MDAgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIGxvbmdsb25nLm00IHNlcmlhbCA0CisrZG5sIENvcHlyaWdodCAoQykgMTk5OS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9MT05HX0xPTkcgaWYgJ2xvbmcgbG9uZycgd29ya3MuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfTE9OR19MT05HXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGxvbmcgbG9uZ10sIGFjX2N2X3R5cGVfbG9uZ19sb25nLAorKyAgW0FDX1RSWV9MSU5LKFtsb25nIGxvbmcgbGwgPSAxTEw7IGludCBpID0gNjM7XSwKKysgICAgW2xvbmcgbG9uZyBsbG1heCA9IChsb25nIGxvbmcpIC0xOworKyAgICAgcmV0dXJuIGxsIDw8IGkgfCBsbCA+PiBpIHwgbGxtYXggLyBsbCB8IGxsbWF4ICUgbGw7XSwKKysgICAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzLAorKyAgICBhY19jdl90eXBlX2xvbmdfbG9uZz1ubyldKQorKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmcgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTE9OR19MT05HLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsb25nIGxvbmcnIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvTWFrZWZpbGUuYW0JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQ4NjQyNzUyIC0wNDAwCitAQCAtMCwwICsxIEBACisrRVhUUkFfRElTVCA9IGNvZGVzZXQubTQgZ2V0dGV4dC5tNCBnbGliYzIxLm00IGljb252Lm00IGludGRpdjAubTQgaW50bWF4Lm00IGludHR5cGVzLm00IGludHR5cGVzX2gubTQgaW50dHlwZXMtcHJpLm00IGlzYy1wb3NpeC5tNCBsY21lc3NhZ2UubTQgbGliLWxkLm00IGxpYi1saW5rLm00IGxpYi1wcmVmaXgubTQgbG9uZ2RvdWJsZS5tNCBsb25nbG9uZy5tNCBubHMubTQgcG8ubTQgcHJpbnRmLXBvc2l4Lm00IHByb2d0ZXN0Lm00IHNpZ25lZC5tNCBzaXplX21heC5tNCBzdGRpbnRfaC5tNCB1aW50bWF4X3QubTQgdWxvbmdsb25nLm00IHdjaGFyX3QubTQgd2ludF90Lm00IHhzaXplLm00CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L25scy5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvbmxzLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTU1NjU2ODg4IC0wNDAwCitAQCAtMCwwICsxLDQ5IEBACisrIyBubHMubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlICpub3QqIGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCAgIFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGN5Z251cy5jb20+LCAxOTk1LTIwMDAuCisrZG5sICAgQnJ1bm8gSGFpYmxlIDxoYWlibGVAY2xpc3AuY29ucy5vcmc+LCAyMDAwLTIwMDMuCisrCisrQUNfREVGVU4oW0FNX05MU10sCisrWworKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorKyAgZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKysgIEFDX0FSR19FTkFCTEUobmxzLAorKyAgICBbICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0XSwKKysgICAgVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKysgIEFDX01TR19SRVNVTFQoJFVTRV9OTFMpCisrICBBQ19TVUJTVChVU0VfTkxTKQorK10pCisrCisrQUNfREVGVU4oW0FNX01LSU5TVEFMTERJUlNdLAorK1sKKysgIGRubCBJZiB0aGUgQUNfQ09ORklHX0FVWF9ESVIgbWFjcm8gZm9yIGF1dG9jb25mIGlzIHVzZWQgd2UgcG9zc2libHkKKysgIGRubCBmaW5kIHRoZSBta2luc3RhbGxkaXJzIHNjcmlwdCBpbiBhbm90aGVyIHN1YmRpciBidXQgJCh0b3Bfc3JjZGlyKS4KKysgIGRubCBUcnkgdG8gbG9jYXRlIGl0LgorKyAgTUtJTlNUQUxMRElSUz0KKysgIGlmIHRlc3QgLW4gIiRhY19hdXhfZGlyIjsgdGhlbgorKyAgICBjYXNlICIkYWNfYXV4X2RpciIgaW4KKysgICAgICAvKikgTUtJTlNUQUxMRElSUz0iJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyIgOzsKKysgICAgICAqKSBNS0lOU1RBTExESVJTPSJcJCh0b3BfYnVpbGRkaXIpLyRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiIDs7CisrICAgIGVzYWMKKysgIGZpCisrICBpZiB0ZXN0IC16ICIkTUtJTlNUQUxMRElSUyI7IHRoZW4KKysgICAgTUtJTlNUQUxMRElSUz0iXCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIKKysgIGZpCisrICBBQ19TVUJTVChNS0lOU1RBTExESVJTKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3BvLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9wby5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk2MTY1NTk3NiAtMDQwMAorQEAgLTAsMCArMSw0MjYgQEAKKysjIHBvLm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS0yMDAwLgorK2RubCAgIEJydW5vIEhhaWJsZSA8aGFpYmxlQGNsaXNwLmNvbnMub3JnPiwgMjAwMC0yMDAzLgorKworK2RubCBDaGVja3MgZm9yIGFsbCBwcmVyZXF1aXNpdGVzIG9mIHRoZSBwbyBzdWJkaXJlY3RvcnkuCisrQUNfREVGVU4oW0FNX1BPX1NVQkRJUlNdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKKysgIEFDX1JFUVVJUkUoW0FNX01LSU5TVEFMTERJUlNdKWRubAorKyAgQUNfUkVRVUlSRShbQU1fTkxTXSlkbmwKKysKKysgIGRubCBQZXJmb3JtIHRoZSBmb2xsb3dpbmcgdGVzdHMgYWxzbyBpZiAtLWRpc2FibGUtbmxzIGhhcyBiZWVuIGdpdmVuLAorKyAgZG5sIGJlY2F1c2UgdGhleSBhcmUgbmVlZGVkIGZvciAibWFrZSBkaXN0IiB0byB3b3JrLgorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIG1zZ2ZtdCBpbiB0aGUgUEFUSC4KKysgIGRubCBUaGUgZmlyc3QgdGVzdCBleGNsdWRlcyBTb2xhcmlzIG1zZ2ZtdCBhbmQgZWFybHkgR05VIG1zZ2ZtdCB2ZXJzaW9ucy4KKysgIGRubCBUaGUgc2Vjb25kIHRlc3QgZXhjbHVkZXMgRnJlZUJTRCBtc2dmbXQuCisrICBBTV9QQVRIX1BST0dfV0lUSF9URVNUKE1TR0ZNVCwgbXNnZm10LAorKyAgICBbJGFjX2Rpci8kYWNfd29yZCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNzIC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4gZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpXSwKKysgICAgOikKKysgIEFDX1BBVEhfUFJPRyhHTVNHRk1ULCBnbXNnZm10LCAkTVNHRk1UKQorKworKyAgZG5sIFNlYXJjaCBmb3IgR05VIHhnZXR0ZXh0IDAuMTIgb3IgbmV3ZXIgaW4gdGhlIFBBVEguCisrICBkbmwgVGhlIGZpcnN0IHRlc3QgZXhjbHVkZXMgU29sYXJpcyB4Z2V0dGV4dCBhbmQgZWFybHkgR05VIHhnZXR0ZXh0IHZlcnNpb25zLgorKyAgZG5sIFRoZSBzZWNvbmQgdGVzdCBleGNsdWRlcyBGcmVlQlNEIHhnZXR0ZXh0LgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChYR0VUVEVYVCwgeGdldHRleHQsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1vbWl0LWhlYWRlciAtLWNvcHlyaWdodC1ob2xkZXI9IC0tbXNnaWQtYnVncy1hZGRyZXNzPSAvZGV2L251bGwgMj4mMSA+L2Rldi9udWxsIHwgZ3JlcCB1c2FnZSA+L2Rldi9udWxsOyB0aGVuIGV4aXQgMTsgZWxzZSBleGl0IDA7IGZpKV0sCisrICAgIDopCisrICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgcm0gLWYgbWVzc2FnZXMucG8KKysKKysgIGRubCBTZWFyY2ggZm9yIEdOVSBtc2dtZXJnZSAwLjExIG9yIG5ld2VyIGluIHRoZSBQQVRILgorKyAgQU1fUEFUSF9QUk9HX1dJVEhfVEVTVChNU0dNRVJHRSwgbXNnbWVyZ2UsCisrICAgIFskYWNfZGlyLyRhY193b3JkIC0tdXBkYXRlIC1xIC9kZXYvbnVsbCAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxXSwgOikKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSBtc2dmbXQuCisrICBpZiB0ZXN0ICIkR01TR0ZNVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgbXNnZm10IHdlIGRlZmluZSBpdCBhcyA6IHNvIHRoYXQgdGhlCisrICAgIGRubCBNYWtlZmlsZXMgc3RpbGwgY2FuIHdvcmsuCisrICAgIGlmICRHTVNHRk1UIC0tc3RhdGlzdGljcyAvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYmCisrICAgICAgIChpZiAkR01TR0ZNVCAtLXN0YXRpc3RpY3MgL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEdNU0dGTVQ9YGVjaG8gIiRHTVNHRk1UIiB8IHNlZCAtZSAncyxeLiovLCwnYAorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgJEdNU0dGTVQgcHJvZ3JhbSBpcyBub3QgR05VIG1zZ2ZtdDsgaWdub3JlIGl0XSkKKysgICAgICBHTVNHRk1UPSI6IgorKyAgICBmaQorKyAgZmkKKysKKysgIGRubCBUaGlzIGNvdWxkIGdvIGF3YXkgc29tZSBkYXk7IHRoZSBQQVRIX1BST0dfV0lUSF9URVNUIGFscmVhZHkgZG9lcyBpdC4KKysgIGRubCBUZXN0IHdoZXRoZXIgd2UgcmVhbGx5IGZvdW5kIEdOVSB4Z2V0dGV4dC4KKysgIGlmIHRlc3QgIiRYR0VUVEVYVCIgIT0gIjoiOyB0aGVuCisrICAgIGRubCBJZiBpdCBpcyBubyBHTlUgeGdldHRleHQgd2UgZGVmaW5lIGl0IGFzIDogc28gdGhhdCB0aGUKKysgICAgZG5sIE1ha2VmaWxlcyBzdGlsbCBjYW4gd29yay4KKysgICAgaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmJgorKyAgICAgICAoaWYgJFhHRVRURVhUIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsgdGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4KKysgICAgICA6IDsKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19SRVNVTFQoCisrICAgICAgICBbZm91bmQgeGdldHRleHQgcHJvZ3JhbSBpcyBub3QgR05VIHhnZXR0ZXh0OyBpZ25vcmUgaXRdKQorKyAgICAgIFhHRVRURVhUPSI6IgorKyAgICBmaQorKyAgICBkbmwgUmVtb3ZlIGxlZnRvdmVyIGZyb20gRnJlZUJTRCB4Z2V0dGV4dCBjYWxsLgorKyAgICBybSAtZiBtZXNzYWdlcy5wbworKyAgZmkKKysKKysgIEFDX09VVFBVVF9DT01NQU5EUyhbCisrICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklMRVM7IGRvCisrICAgICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIgorKyAgICAgIGNhc2UgIiRhY19maWxlIiBpbgorKyAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNfZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsKKysgICAgICBlc2FjCisrICAgICAgIyBQTyBkaXJlY3RvcmllcyBoYXZlIGEgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGZyb20gTWFrZWZpbGUuaW4uaW4uCisrICAgICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pCisrICAgICAgICAjIEFkanVzdCBhIHJlbGF0aXZlIHNyY2Rpci4KKysgICAgICAgIGFjX2Rpcj1gZWNobyAiJGFjX2ZpbGUifHNlZCAncyUvW14vXVteL10qJCUlJ2AKKysgICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8c2VkICdzJV5cLi8lJSdgIgorKyAgICAgICAgYWNfZG90cz1gZWNobyAiJGFjX2Rpcl9zdWZmaXgifHNlZCAncyUvW14vXSolLi4vJWcnYAorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjEzIGl0IGlzIGNhbGxlZCAkYWNfZ2l2ZW5fc3JjZGlyLgorKyAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlzIGNhbGxlZCAkc3JjZGlyLgorKyAgICAgICAgdGVzdCAtbiAiJGFjX2dpdmVuX3NyY2RpciIgfHwgYWNfZ2l2ZW5fc3JjZGlyPSIkc3JjZGlyIgorKyAgICAgICAgY2FzZSAiJGFjX2dpdmVuX3NyY2RpciIgaW4KKysgICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUnYCA7OworKyAgICAgICAgICAvKikgdG9wX3NyY2Rpcj0iJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgICAgKikgIHRvcF9zcmNkaXI9IiRhY19kb3RzJGFjX2dpdmVuX3NyY2RpciIgOzsKKysgICAgICAgIGVzYWMKKysgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKysgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorKyAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bIAldKlwkL2QiIC1lICJzLC4qLCAgICAgJHRvcF9zcmNkaXIvJiBcXFxcLCIgfCBzZWQgLWUgIlwkcy9cKC4qXCkgXFxcXC9cMS8iID4gIiRhY19kaXIvUE9URklMRVMiCisrICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSJQT1RGSUxFUy5pbiIKKysgICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBEQVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQKKysgICAgICAgICAgIyBvbiAkYWNfZGlyIGJ1dCBkb24ndCBkZXBlbmQgb24gdXNlci1zcGVjaWZpZWQgY29uZmlndXJhdGlvbgorKyAgICAgICAgICAjIHBhcmFtZXRlcnMuCisrICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJE9CU09MRVRFX0FMTF9MSU5HVUFTIjsgdGhlbgorKyAgICAgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMgaW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgICAgICAgICAjIEhpZGUgdGhlIEFMTF9MSU5HVUFTIGFzc2lnbWVudCBmcm9tIGF1dG9tYWtlLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iJFBPTUFLRUZJTEVERVBTIExJTkdVQVMiCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIFRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLgorKyAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5HVUFTJworKyAgICAgICAgICBmaQorKyAgICAgICAgICAjIENvbXB1dGUgUE9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICAgICAgICAgIyBDb21wdXRlIFVQREFURVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5wby11cGRhdGUpCisrICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICAgICAgICAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChsYW5nKS5ub3ApCisrICAgICAgICAgICMgQ29tcHV0ZSBHTU9GSUxFUworKyAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAgICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgICAgICAgICAgLikgc3JjZGlycHJlPSA7OworKyAgICAgICAgICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgICBQT0ZJTEVTPQorKyAgICAgICAgICBVUERBVEVQT0ZJTEVTPQorKyAgICAgICAgICBEVU1NWVBPRklMRVM9CisrICAgICAgICAgIEdNT0ZJTEVTPQorKyAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgICAgICAgICAgUE9GSUxFUz0iJFBPRklMRVMgJHNyY2RpcnByZSRsYW5nLnBvIgorKyAgICAgICAgICAgIFVQREFURVBPRklMRVM9IiRVUERBVEVQT0ZJTEVTICRsYW5nLnBvLXVwZGF0ZSIKKysgICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICAgICAgICAgIEdNT0ZJTEVTPSIkR01PRklMRVMgJHNyY2RpcnByZSRsYW5nLmdtbyIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNfZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMKKysgICAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKysgICAgICAgICAgSU5TVF9MSU5HVUFTPQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIHByZXNlbnRsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIHVzZWl0PW5vCisrICAgICAgICAgICAgICBpZiB0ZXN0ICIlVU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGRlc2lyZWRsYW5ndWFnZXM9IiRMSU5HVUFTIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkZXNpcmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcworKyAgICAgICAgICAgICAgICAjICAgYS4gZXF1YWwgdG8gcHJlc2VudGxhbmcsIG9yCisrICAgICAgICAgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBmYWxsYmFjayBmb3IgbWVzc2FnZXMKKysgICAgICAgICAgICAgICAgIyAgICAgIHdoaWNoIGFyZSBub3QgdHJhbnNsYXRlZCBpbiB0aGUgZGVzaXJlZGxhbmcgY2F0YWxvZykuCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5nIiopIHVzZWl0PXllczs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIElOU1RfTElOR1VBUz0iJElOU1RfTElOR1VBUyAkcHJlc2VudGxhbmciCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgQ0FUQUxPR1M9CisrICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgICAgICAgICAgZm9yIGxhbmcgaW4gJElOU1RfTElOR1VBUzsgZG8KKysgICAgICAgICAgICAgIENBVEFMT0dTPSIkQ0FUQUxPR1MgJGxhbmcuZ21vIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiIHx8IGVjaG8gImNyZWF0aW5nICRhY19kaXIvTWFrZWZpbGUiCisrICAgICAgICAgIHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFycy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQT0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xARFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2VmaWxlIgorKyAgICAgICAgICBmb3IgZiBpbiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyIi9SdWxlcy0qOyBkbworKyAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorKyAgICAgICAgICAgICAgY2FzZSAiJGYiIGluCisrICAgICAgICAgICAgICAgICoub3JpZyB8ICouYmFrIHwgKn4pIDs7CisrICAgICAgICAgICAgICAgICopIGNhdCAiJGYiID4+ICIkYWNfZGlyL01ha2VmaWxlIiA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGRvbmUKKysgICAgICAgIGZpCisrICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgZG9uZV0sCisrICAgWyMgQ2FwdHVyZSB0aGUgdmFsdWUgb2Ygb2Jzb2xldGUgQUxMX0xJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUKKysgICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklMRVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQKKysgICAgIyBmcm9tIGF1dG9tYWtlLgorKyAgICBldmFsICdPQlNPTEVURV9BTExfTElOR1VBUycnPSIkQUxMX0xJTkdVQVMiJworKyAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGNvbXB1dGUgQ0FUQUxPR1MuCisrICAgIExJTkdVQVM9IiR7TElOR1VBUy0lVU5TRVQlfSIKKysgICBdKQorK10pCisrCisrZG5sIFBvc3Rwcm9jZXNzZXMgYSBNYWtlZmlsZSBpbiBhIGRpcmVjdG9yeSBjb250YWluaW5nIFBPIGZpbGVzLgorK0FDX0RFRlVOKFtBTV9QT1NUUFJPQ0VTU19QT19NQUtFRklMRV0sCisrWworKyAgIyBXaGVuIHRoaXMgY29kZSBpcyBydW4sIGluIGNvbmZpZy5zdGF0dXMsIHR3byB2YXJpYWJsZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKysgICMgc2V0OgorKyAgIyAtIE9CU09MRVRFX0FMTF9MSU5HVUFTIGlzIHRoZSB2YWx1ZSBvZiBMSU5HVUFTIHNldCBpbiBjb25maWd1cmUuaW4sCisrICAjIC0gTElOR1VBUyBpcyB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExJTkdVQVMgYXQgY29uZmlndXJlCisrICAjICAgdGltZS4KKysKKytjaGFuZ2VxdW90ZSgsKWRubAorKyAgIyBBZGp1c3QgYSByZWxhdGl2ZSBzcmNkaXIuCisrICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3MlL1teL11bXi9dKiQlJSdgCisrICBhY19kaXJfc3VmZml4PSIvYGVjaG8gIiRhY19kaXIifHNlZCAncyVeXC4vJSUnYCIKKysgIGFjX2RvdHM9YGVjaG8gIiRhY19kaXJfc3VmZml4InxzZWQgJ3MlL1teL10qJS4uLyVnJ2AKKysgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBjYWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4KKysgICMgSW4gYXV0b2NvbmYtMi41MCBpdCBpcyBjYWxsZWQgJHNyY2Rpci4KKysgIHRlc3QgLW4gIiRhY19naXZlbl9zcmNkaXIiIHx8IGFjX2dpdmVuX3NyY2Rpcj0iJHNyY2RpciIKKysgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIiIGluCisrICAgIC4pICB0b3Bfc3JjZGlyPWBlY2hvICRhY19kb3RzfHNlZCAncyUvJCUlJ2AgOzsKKysgICAgLyopIHRvcF9zcmNkaXI9IiRhY19naXZlbl9zcmNkaXIiIDs7CisrICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7CisrICBlc2FjCisrCisrICAjIEZpbmQgYSB3YXkgdG8gZWNobyBzdHJpbmdzIHdpdGhvdXQgaW50ZXJwcmV0aW5nIGJhY2tzbGFzaC4KKysgIGlmIHRlc3QgIlhgKGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgIGd0X2VjaG89J2VjaG8nCisrICBlbHNlCisrICAgIGlmIHRlc3QgIlhgKHByaW50ZiAnJXNcbicgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisrICAgICAgZ3RfZWNobz0ncHJpbnRmICVzXG4nCisrICAgIGVsc2UKKysgICAgICBlY2hvX2Z1bmMgKCkgeworKyAgICAgICAgY2F0IDw8RU9UCisrJCoKKytFT1QKKysgICAgICB9CisrICAgICAgZ3RfZWNobz0nZWNob19mdW5jJworKyAgICBmaQorKyAgZmkKKysKKysgICMgQSBzZWQgc2NyaXB0IHRoYXQgZXh0cmFjdHMgdGhlIHZhbHVlIG9mIFZBUklBQkxFIGZyb20gYSBNYWtlZmlsZS4KKysgIHNlZF94X3ZhcmlhYmxlPScKKysjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisreAorK3MvUC9QLworK3gKKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gTG9vayBpZiB3ZSBoYXZlIHRoZSBleHBlY3RlZCB2YXJpYWJsZSBkZWZpbml0aW9uLgorKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisrICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrICBzL15bCSBdKlZBUklBQkxFWwkgXSo9Ly8KKysgIGJhCisrfQorK2JkCisrOmEKKysjIEhlcmUgd2UgYXJlIHByb2Nlc3NpbmcgYSBsaW5lIGZyb20gdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCisrIyBSZW1vdmUgY29tbWVudCwgbW9yZSBwcmVjaXNlbHkgcmVwbGFjZSBpdCB3aXRoIGEgc3BhY2UuCisrcy8jLiokLyAvCisrIyBTZWUgaWYgdGhlIGxpbmUgZW5kcyBpbiBhIGJhY2tzbGFzaC4KKyt0YgorKzpiCisrcy9cXCQvLworKyMgUHJpbnQgdGhlIGxpbmUsIHdpdGhvdXQgdGhlIHRyYWlsaW5nIGJhY2tzbGFzaC4KKytwCisrdGMKKysjIFRoZXJlIHdhcyBubyB0cmFpbGluZyBiYWNrc2xhc2guIFRoZSBlbmQgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gaXMKKysjIHJlYWNoZWQuIENsZWFyIHRoZSBob2xkIHNwYWNlLgorK3MvXi4qJC8vCisreAorK2JkCisrOmMKKysjIEEgdHJhaWxpbmcgYmFja3NsYXNoIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24gY29udGludWVzIGluIHRoZQorKyMgbmV4dCBsaW5lLiBQdXQgYSBub25lbXB0eSBzdHJpbmcgaW50byB0aGUgaG9sZCBzcGFjZSB0byBpbmRpY2F0ZSB0aGlzLgorK3MvXi4qJC9QLworK3gKKys6ZAorKycKKytjaGFuZ2VxdW90ZShbLF0pZG5sCisrCisrICAjIFNldCBQT1RGSUxFUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIFBPVEZJTEVTLgorKyAgc2VkX3hfUE9URklMRVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9QT1RGSUxFUy9nJ2AiCisrICBQT1RGSUxFUz1gc2VkIC1uIC1lICIkc2VkX3hfUE9URklMRVMiIDwgIiRhY19maWxlImAKKysgICMgQ29tcHV0ZSBQT1RGSUxFU19ERVBTIGFzCisrICAjICAgJChmb3JlYWNoIGZpbGUsICQoUE9URklMRVMpLCAkKHRvcF9zcmNkaXIpLyQoZmlsZSkpCisrICBQT1RGSUxFU19ERVBTPQorKyAgZm9yIGZpbGUgaW4gJFBPVEZJTEVTOyBkbworKyAgICBQT1RGSUxFU19ERVBTPSIkUE9URklMRVNfREVQUyAiJyQodG9wX3NyY2RpcikvJyIkZmlsZSIKKysgIGRvbmUKKysgIFBPTUFLRUZJTEVERVBTPSIiCisrCisrICBpZiB0ZXN0IC1uICIkT0JTT0xFVEVfQUxMX0xJTkdVQVMiOyB0aGVuCisrICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBzZXR0aW5nIEFMTF9MSU5HVUFTIGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSIgfHwgZWNobyAic2V0dGluZyBBTExfTElOR1VBUyBpbiBjb25maWd1cmUuaW4gaXMgb2Jzb2xldGUiCisrICBmaQorKyAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL0xJTkdVQVMiOyB0aGVuCisrICAgICMgVGhlIExJTkdVQVMgZmlsZSBjb250YWlucyB0aGUgc2V0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMuCisrICAgIEFMTF9MSU5HVUFTXz1gc2VkIC1lICIvXiMvZCIgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTImAKKysgICAgUE9NQUtFRklMRURFUFM9IiRQT01BS0VGSUxFREVQUyBMSU5HVUFTIgorKyAgZWxzZQorKyAgICAjIFNldCBBTExfTElOR1VBUyB0byB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJTkdVQVMuCisrICAgIHNlZF94X0xJTkdVQVM9ImAkZ3RfZWNobyBcIiRzZWRfeF92YXJpYWJsZVwiIHwgc2VkIC1lICcvXiAqIy9kJyAtZSAncy9WQVJJQUJMRS9MSU5HVUFTL2cnYCIKKysgICAgQUxMX0xJTkdVQVNfPWBzZWQgLW4gLWUgIiRzZWRfeF9MSU5HVUFTIiA8ICIkYWNfZmlsZSJgCisrICBmaQorKyAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZS4KKysgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JEFMTF9MSU5HVUFTXycKKysgICMgQ29tcHV0ZSBQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5wbykKKysgICMgQ29tcHV0ZSBVUERBVEVQT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLnBvLXVwZGF0ZSkKKysgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykubm9wKQorKyAgIyBDb21wdXRlIEdNT0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pCisrICAjIENvbXB1dGUgUFJPUEVSVElFU0ZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHRvcF9zcmNkaXIpLyQoRE9NQUlOKV8kKGxhbmcpLnByb3BlcnRpZXMpCisrICAjIENvbXB1dGUgQ0xBU1NGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJCh0b3Bfc3JjZGlyKS8kKERPTUFJTilfJChsYW5nKS5jbGFzcykKKysgICMgQ29tcHV0ZSBRTUZJTEVTCisrICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5xbSkKKysgICMgQ29tcHV0ZSBNU0dGSUxFUworKyAgIyBhcyAgICAgICQoZm9yZWFjaCBsYW5nLCAkKEFMTF9MSU5HVUFTKSwgJChzcmNkaXIpLyQoZnJvYiAkKGxhbmcpKS5tc2cpCisrICAjIENvbXB1dGUgUkVTT1VSQ0VTRExMRklMRVMKKysgICMgYXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQoc3JjZGlyKS8kKGZyb2IgJChsYW5nKSkvJChET01BSU4pLnJlc291cmNlcy5kbGwpCisrICBjYXNlICIkYWNfZ2l2ZW5fc3JjZGlyIiBpbgorKyAgICAuKSBzcmNkaXJwcmU9IDs7CisrICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsKKysgIGVzYWMKKysgIFBPRklMRVM9CisrICBVUERBVEVQT0ZJTEVTPQorKyAgRFVNTVlQT0ZJTEVTPQorKyAgR01PRklMRVM9CisrICBQUk9QRVJUSUVTRklMRVM9CisrICBDTEFTU0ZJTEVTPQorKyAgUU1GSUxFUz0KKysgIE1TR0ZJTEVTPQorKyAgUkVTT1VSQ0VTRExMRklMRVM9CisrICBmb3IgbGFuZyBpbiAkQUxMX0xJTkdVQVM7IGRvCisrICAgIFBPRklMRVM9IiRQT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5wbyIKKysgICAgVVBEQVRFUE9GSUxFUz0iJFVQREFURVBPRklMRVMgJGxhbmcucG8tdXBkYXRlIgorKyAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9wIgorKyAgICBHTU9GSUxFUz0iJEdNT0ZJTEVTICRzcmNkaXJwcmUkbGFuZy5nbW8iCisrICAgIFBST1BFUlRJRVNGSUxFUz0iJFBST1BFUlRJRVNGSUxFUyBcJCh0b3Bfc3JjZGlyKS9cJChET01BSU4pXyRsYW5nLnByb3BlcnRpZXMiCisrICAgIENMQVNTRklMRVM9IiRDTEFTU0ZJTEVTIFwkKHRvcF9zcmNkaXIpL1wkKERPTUFJTilfJGxhbmcuY2xhc3MiCisrICAgIFFNRklMRVM9IiRRTUZJTEVTICRzcmNkaXJwcmUkbGFuZy5xbSIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXC4uKiQvLycgLWUgJ3kvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovJ2AKKysgICAgTVNHRklMRVM9IiRNU0dGSUxFUyAkc3JjZGlycHJlJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgZnJvYmJlZGxhbmc9YGVjaG8gJGxhbmcgfCBzZWQgLWUgJ3MvXy8tL2cnYAorKyAgICBSRVNPVVJDRVNETExGSUxFUz0iJFJFU09VUkNFU0RMTEZJTEVTICRzcmNkaXJwcmUkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgZG9uZQorKyAgIyBDQVRBTE9HUyBkZXBlbmRzIG9uIGJvdGggJGFjX2RpciBhbmQgdGhlIHVzZXIncyBMSU5HVUFTCisrICAjIGVudmlyb25tZW50IHZhcmlhYmxlLgorKyAgSU5TVF9MSU5HVUFTPQorKyAgaWYgdGVzdCAtbiAiJEFMTF9MSU5HVUFTIjsgdGhlbgorKyAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIHVzZWl0PW5vCisrICAgICAgaWYgdGVzdCAiJVVOU0VUJSIgIT0gIiRMSU5HVUFTIjsgdGhlbgorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJExJTkdVQVMiCisrICAgICAgZWxzZQorKyAgICAgICAgZGVzaXJlZGxhbmd1YWdlcz0iJEFMTF9MSU5HVUFTIgorKyAgICAgIGZpCisrICAgICAgZm9yIGRlc2lyZWRsYW5nIGluICRkZXNpcmVkbGFuZ3VhZ2VzOyBkbworKyAgICAgICAgIyBVc2UgdGhlIHByZXNlbnRsYW5nIGNhdGFsb2cgaWYgZGVzaXJlZGxhbmcgaXMKKysgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3IKKysgICAgICAgICMgICBiLiBhIHZhcmlhbnQgb2YgcHJlc2VudGxhbmcgKGJlY2F1c2UgaW4gdGhpcyBjYXNlLAorKyAgICAgICAgIyAgICAgIHByZXNlbnRsYW5nIGNhbiBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIG1lc3NhZ2VzCisrICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5vdCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4KKysgICAgICAgIGNhc2UgIiRkZXNpcmVkbGFuZyIgaW4KKysgICAgICAgICAgIiRwcmVzZW50bGFuZyIqKSB1c2VpdD15ZXM7OworKyAgICAgICAgZXNhYworKyAgICAgIGRvbmUKKysgICAgICBpZiB0ZXN0ICR1c2VpdCA9IHllczsgdGhlbgorKyAgICAgICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyIKKysgICAgICBmaQorKyAgICBkb25lCisrICBmaQorKyAgQ0FUQUxPR1M9CisrICBKQVZBQ0FUQUxPR1M9CisrICBRVENBVEFMT0dTPQorKyAgVENMQ0FUQUxPR1M9CisrICBDU0hBUlBDQVRBTE9HUz0KKysgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuCisrICAgIGZvciBsYW5nIGluICRJTlNUX0xJTkdVQVM7IGRvCisrICAgICAgQ0FUQUxPR1M9IiRDQVRBTE9HUyAkbGFuZy5nbW8iCisrICAgICAgSkFWQUNBVEFMT0dTPSIkSkFWQUNBVEFMT0dTIFwkKERPTUFJTilfJGxhbmcucHJvcGVydGllcyIKKysgICAgICBRVENBVEFMT0dTPSIkUVRDQVRBTE9HUyAkbGFuZy5xbSIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorKyAgICAgIFRDTENBVEFMT0dTPSIkVENMQ0FUQUxPR1MgJGZyb2JiZWRsYW5nLm1zZyIKKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgQ1NIQVJQQ0FUQUxPR1M9IiRDU0hBUlBDQVRBTE9HUyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsIgorKyAgICBkb25lCisrICBmaQorKworKyAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorKyAgaWYgZ3JlcCAtbCAnQFRDTENBVEFMT0dTQCcgIiRhY19maWxlIiA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICAjIEFkZCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUgZm9ybXVsYXRlZCBhcyBhIHNpbXBsZSBzdWZmaXggcnVsZS4KKysgICAgZm9yIGxhbmcgaW4gJEFMTF9MSU5HVUFTOyBkbworKyAgICAgIGZyb2JiZWRsYW5nPWBlY2hvICRsYW5nIHwgc2VkIC1lICdzL1wuLiokLy8nIC1lICd5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nLm1zZzogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCisrCVwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgIlwkKHNyY2RpcikiIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIGdyZXAgLWwgJ0BDU0hBUlBDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKysgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisrICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKysgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZydgCisrICAgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrJGZyb2JiZWRsYW5nL1wkKERPTUFJTikucmVzb3VyY2VzLmRsbDogJGxhbmcucG8KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKytFT0YKKysgICAgZG9uZQorKyAgZmkKKysgIGlmIHRlc3QgLW4gIiRQT01BS0VGSUxFREVQUyI7IHRoZW4KKysgICAgY2F0ID4+ICIkYWNfZmlsZS50bXAiIDw8RU9GCisrTWFrZWZpbGU6ICRQT01BS0VGSUxFREVQUworK0VPRgorKyAgZmkKKysgIG12ICIkYWNfZmlsZS50bXAiICIkYWNfZmlsZSIKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcmludGYtcG9zaXgubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3ByaW50Zi1wb3NpeC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljk3NDY1NDAwMCAtMDQwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgcHJpbnRmLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTMuMSkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgdGhlIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoCisrZG5sIHBvc2l0aW9ucy4KKysKKytBQ19ERUZVTihbZ3RfUFJJTlRGX1BPU0lYXSwKKytbCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHByaW50ZigpIHN1cHBvcnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5nc10sCisrICAgIGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4LAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKy8qIFRoZSBzdHJpbmcgIiUyJGQgJTEkZCIsIHdpdGggZG9sbGFyIGNoYXJhY3RlcnMgcHJvdGVjdGVkIGZyb20gdGhlIHNoZWxsJ3MKKysgICBkb2xsYXIgZXhwYW5zaW9uIChwb3NzaWJseSBhbiBhdXRvY29uZiBidWcpLiAgKi8KKytzdGF0aWMgY2hhciBmb3JtYXRbXSA9IHsgJyUnLCAnMicsICckJywgJ2QnLCAnICcsICclJywgJzEnLCAnJCcsICdkJywgJ1wwJyB9OworK3N0YXRpYyBjaGFyIGJ1ZlsxMDBdOworK2ludCBtYWluICgpCisreworKyAgc3ByaW50ZiAoYnVmLCBmb3JtYXQsIDMzLCA1NSk7CisrICByZXR1cm4gKHN0cmNtcCAoYnVmLCAiNTUgMzMiKSAhPSAwKTsKKyt9XSwgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9eWVzLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD1ubywKKysgICAgICBbCisrICAgICAgICBBQ19FR1JFUF9DUFAobm90cG9zaXgsIFsKKysjaWYgZGVmaW5lZCBfX05ldEJTRF9fIHx8IGRlZmluZWQgX01TQ19WRVIgfHwgZGVmaW5lZCBfX01JTkdXMzJfXyB8fCBkZWZpbmVkIF9fQ1lHV0lOX18KKysgIG5vdHBvc2l4CisrI2VuZGlmCisrICAgICAgICBdLCBndF9jdl9mdW5jX3ByaW50Zl9wb3NpeD0iZ3Vlc3Npbmcgbm8iLAorKyAgICAgICAgICAgZ3RfY3ZfZnVuY19wcmludGZfcG9zaXg9Imd1ZXNzaW5nIHllcyIpCisrICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgJGd0X2N2X2Z1bmNfcHJpbnRmX3Bvc2l4IGluCisrICAgICp5ZXMpCisrICAgICAgQUNfREVGSU5FKEhBVkVfUE9TSVhfUFJJTlRGLCAxLAorKyAgICAgICAgW0RlZmluZSBpZiB5b3VyIHByaW50ZigpIGZ1bmN0aW9uIHN1cHBvcnRzIGZvcm1hdCBzdHJpbmdzIHdpdGggcG9zaXRpb25zLl0pCisrICAgICAgOzsKKysgIGVzYWMKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC9wcm9ndGVzdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvcHJvZ3Rlc3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNC45OTA2NTE1NjggLTA0MDAKK0BAIC0wLDAgKzEsOTEgQEAKKysjIHByb2d0ZXN0Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTIpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ni0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5Ni4KKysKKysjIFNlYXJjaCBwYXRoIGZvciBhIHByb2dyYW0gd2hpY2ggcGFzc2VzIHRoZSBnaXZlbiB0ZXN0LgorKworK2RubCBBTV9QQVRIX1BST0dfV0lUSF9URVNUKFZBUklBQkxFLCBQUk9HLVRPLUNIRUNLLUZPUiwKKytkbmwgICBURVNULVBFUkZPUk1FRC1PTi1GT1VORF9QUk9HUkFNIFssIFZBTFVFLUlGLU5PVC1GT1VORCBbLCBQQVRIXV0pCisrQUNfREVGVU4oW0FNX1BBVEhfUFJPR19XSVRIX1RFU1RdLAorK1sKKysjIFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuCisrIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCisraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKysgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKysgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKysgIGNobW9kICt4IGNvbmYkJC5zaAorKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisrICBlbHNlCisrICAgIFBBVEhfU0VQQVJBVE9SPToKKysgIGZpCisrICBybSAtZiBjb25mJCQuc2gKKytmaQorKworKyMgRmluZCBvdXQgaG93IHRvIHRlc3QgZm9yIGV4ZWN1dGFibGUgZmlsZXMuIERvbid0IHVzZSBhIHplcm8tYnl0ZSBmaWxlLAorKyMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuCisrY2F0ID5jb25mJCQuZmlsZSA8PF9BU0VPRgorKyMhIC9iaW4vc2gKKytleGl0IDAKKytfQVNFT0YKKytjaG1vZCAreCBjb25mJCQuZmlsZQorK2lmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICBhY19leGVjdXRhYmxlX3A9InRlc3QgLXgiCisrZWxzZQorKyAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorK2ZpCisrcm0gLWYgY29uZiQkLmZpbGUKKysKKysjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiQyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJDI7IGFjX3dvcmQ9WyRdMgorK0FDX01TR19DSEVDS0lORyhbZm9yICRhY193b3JkXSkKKytBQ19DQUNIRV9WQUwoYWNfY3ZfcGF0aF8kMSwKKytbY2FzZSAiWyRdJDEiIGluCisrICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisrICAgIGFjX2N2X3BhdGhfJDE9IlskXSQxIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKysgICAgOzsKKysgICopCisrICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICBmb3IgYWNfZGlyIGluIGlmZWxzZShbJDVdLCAsICRQQVRILCBbJDVdKTsgZG8KKysgICAgICBJRlM9IiRhY19zYXZlX0lGUyIKKysgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKysgICAgICAgICAgaWYgWyQzXTsgdGhlbgorKyAgICAgICAgICAgIGFjX2N2X3BhdGhfJDE9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisrICAgICAgICAgICAgYnJlYWsgMgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgIGRvbmUKKysgICAgSUZTPSIkYWNfc2F2ZV9JRlMiCisrZG5sIElmIG5vIDR0aCBhcmcgaXMgZ2l2ZW4sIGxlYXZlIHRoZSBjYWNoZSB2YXJpYWJsZSB1bnNldCwKKytkbmwgc28gQUNfUEFUSF9QUk9HUyB3aWxsIGtlZXAgbG9va2luZy4KKytpZmVsc2UoWyQ0XSwgLCAsIFsgIHRlc3QgLXogIlskXWFjX2N2X3BhdGhfJDEiICYmIGFjX2N2X3BhdGhfJDE9IiQ0IgorK10pZG5sCisrICAgIDs7CisrZXNhY10pZG5sCisrJDE9IiRhY19jdl9wYXRoXyQxIgorK2lmIHRlc3QgaWZlbHNlKFskNF0sICwgWy1uICJbJF0kMSJdLCBbIlskXSQxIiAhPSAiJDQiXSk7IHRoZW4KKysgIEFDX01TR19SRVNVTFQoWyRdJDEpCisrZWxzZQorKyAgQUNfTVNHX1JFU1VMVChubykKKytmaQorK0FDX1NVQlNUKCQxKWRubAorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpZ25lZC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvc2lnbmVkLm00CTIwMDQtMDktMTIgMTQ6NDA6MzQuOTk2NjUwNjU2IC0wNDAwCitAQCAtMCwwICsxLDE5IEBACisrIyBzaWduZWQubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2JoX0NfU0lHTkVEXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHNpZ25lZF0sIGJoX2N2X2Nfc2lnbmVkLAorKyAgIFtBQ19UUllfQ09NUElMRSgsIFtzaWduZWQgY2hhciB4O10sIGJoX2N2X2Nfc2lnbmVkPXllcywgYmhfY3ZfY19zaWduZWQ9bm8pXSkKKysgIGlmIHRlc3QgJGJoX2N2X2Nfc2lnbmVkID0gbm87IHRoZW4KKysgICAgQUNfREVGSU5FKHNpZ25lZCwgLAorKyAgICAgICAgICAgICAgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUgQyBjb21waWxlciBkb2Vzbid0IHN1cHBvcnQgdGhpcyBrZXl3b3JkLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3NpemVfbWF4Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zaXplX21heC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwMzY0OTU5MiAtMDQwMAorQEAgLTAsMCArMSw2MSBAQAorKyMgc2l6ZV9tYXgubTQgc2VyaWFsIDIKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK0FDX0RFRlVOKFtnbF9TSVpFX01BWF0sCisrWworKyAgQUNfQ0hFQ0tfSEVBREVSUyhzdGRpbnQuaCkKKysgIGRubCBGaXJzdCB0ZXN0IHdoZXRoZXIgdGhlIHN5c3RlbSBhbHJlYWR5IGhhcyBTSVpFX01BWC4KKysgIEFDX01TR19DSEVDS0lORyhbZm9yIFNJWkVfTUFYXSkKKysgIHJlc3VsdD0KKysgIEFDX0VHUkVQX0NQUChbRm91bmQgaXRdLCBbCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpZiBIQVZFX1NURElOVF9ICisrI2luY2x1ZGUgPHN0ZGludC5oPgorKyNlbmRpZgorKyNpZmRlZiBTSVpFX01BWAorK0ZvdW5kIGl0CisrI2VuZGlmCisrXSwgcmVzdWx0PXllcykKKysgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgIGRubCBEZWZpbmUgaXQgb3Vyc2VsdmVzLiBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSB0eXBlICdzaXplX3QnIGlzIG5vdCB3aWRlcgorKyAgICBkbmwgdGhhbiB0aGUgdHlwZSAndW5zaWduZWQgbG9uZycuCisrICAgIGRubCBUaGUgX0FDX0NPTVBVVEVfSU5UIG1hY3JvIHdvcmtzIHVwIHRvIExPTkdfTUFYLCBzaW5jZSBpdCB1c2VzICdleHByJywKKysgICAgZG5sIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gd29yayBmcm9tIExPTkdfTUlOIHRvIExPTkdfTUFYLgorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgLyAxMF0sIHJlc19oaSwKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW34oc2l6ZV90KTAgJSAxMF0sIHJlc19sbywKKysgICAgICBbI2luY2x1ZGUgPHN0ZGRlZi5oPl0sIHJlc3VsdD0/KQorKyAgICBfQUNfQ09NUFVURV9JTlQoW3NpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCldLCBmaXRzX2luX3VpbnQsCisrICAgICAgWyNpbmNsdWRlIDxzdGRkZWYuaD5dLCByZXN1bHQ9PykKKysgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgZG5sIEV2ZW4gdGhvdWdoIFNJWkVfTUFYIGZpdHMgaW4gYW4gdW5zaWduZWQgaW50LCBpdCBtdXN0IGJlIG9mIHR5cGUKKysgICAgICBkbmwgJ3Vuc2lnbmVkIGxvbmcnIGlmIHRoZSB0eXBlICdzaXplX3QnIGlzIHRoZSBzYW1lIGFzICd1bnNpZ25lZCBsb25nJy4KKysgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyAgICAgICAgZXh0ZXJuIHNpemVfdCBmb287CisrICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287CisrICAgICAgICBdLCBbXSwgZml0c19pbl91aW50PTApCisrICAgIGZpCisrICAgIGlmIHRlc3QgLXogIiRyZXN1bHQiOyB0aGVuCisrICAgICAgaWYgdGVzdCAiJGZpdHNfaW5fdWludCIgPSAxOyB0aGVuCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlUKKysgICAgICBlbHNlCisrICAgICAgICByZXN1bHQ9IiRyZXNfaGkkcmVzX2xvIlVMCisrICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgIGRubCBTaG91bGRuJ3QgaGFwcGVuLCBidXQgd2hvIGtub3dzLi4uCisrICAgICAgcmVzdWx0PSd+KHNpemVfdCkwJworKyAgICBmaQorKyAgZmkKKysgIEFDX01TR19SRVNVTFQoWyRyZXN1bHRdKQorKyAgaWYgdGVzdCAiJHJlc3VsdCIgIT0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChbU0laRV9NQVhdLCBbJHJlc3VsdF0sCisrICAgICAgW0RlZmluZSBhcyB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0eXBlICdzaXplX3QnLCBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgZGVmaW5lIGl0Ll0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3N0ZGludF9oLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC9zdGRpbnRfaC5tNAkyMDA0LTA5LTEyIDE0OjQwOjM1LjAwOTY0ODY4MCAtMDQwMAorQEAgLTAsMCArMSwyOCBAQAorKyMgc3RkaW50X2gubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKysjIERlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCBpZiA8c3RkaW50Lmg+IGV4aXN0cywKKysjIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LCBhbmQgZGVjbGFyZXMgdWludG1heF90LgorKworK0FDX0RFRlVOKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkaW50LmhdLCBqbV9hY19jdl9oZWFkZXJfc3RkaW50X2gsCisrICBbQUNfVFJZX0NPTVBJTEUoCisrICAgIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGludC5oPl0sCisrICAgIFt1aW50bWF4X3QgaSA9ICh1aW50bWF4X3QpIC0xO10sCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaD1ubyldKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1BWCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxzdGRpbnQuaD4gZXhpc3RzLCBkb2Vzbid0IGNsYXNoIHdpdGggPHN5cy90eXBlcy5oPiwKKysgICAgICAgYW5kIGRlY2xhcmVzIHVpbnRtYXhfdC4gXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWludG1heF90Lm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91aW50bWF4X3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjE2NDY4NTYgLTA0MDAKK0BAIC0wLDAgKzEsMzIgQEAKKysjIHVpbnRtYXhfdC5tNCBzZXJpYWwgNyAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworK0FDX1BSRVJFUSgyLjEzKQorKworKyMgRGVmaW5lIHVpbnRtYXhfdCB0byAndW5zaWduZWQgbG9uZycgb3IgJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKysjIGlmIGl0IGlzIG5vdCBhbHJlYWR5IGRlZmluZWQgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgICAgICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgICAgIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkb24ndCBkZWZpbmUuXSkKKysgIGVsc2UKKysgICAgQUNfREVGSU5FKEhBVkVfVUlOVE1BWF9ULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd1aW50bWF4X3QnIHR5cGUgaW4gPHN0ZGludC5oPiBvciA8aW50dHlwZXMuaD4uXSkKKysgIGZpCisrXSkKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbTQvdWxvbmdsb25nLm00CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9tNC91bG9uZ2xvbmcubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMjg2NDU3OTIgLTA0MDAKK0BAIC0wLDAgKzEsMjUgQEAKKysjIHVsb25nbG9uZy5tNCBzZXJpYWwgMworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HIGlmICd1bnNpZ25lZCBsb25nIGxvbmcnIHdvcmtzLgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciB1bnNpZ25lZCBsb25nIGxvbmddLCBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZywKKysgIFtBQ19UUllfTElOSyhbdW5zaWduZWQgbG9uZyBsb25nIHVsbCA9IDFVTEw7IGludCBpID0gNjM7XSwKKysgICAgW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGxtYXggPSAodW5zaWduZWQgbG9uZyBsb25nKSAtMTsKKysgICAgIHJldHVybiB1bGwgPDwgaSB8IHVsbCA+PiBpIHwgdWxsbWF4IC8gdWxsIHwgdWxsbWF4ICUgdWxsO10sCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPXllcywKKysgICAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmc9bm8pXSkKKysgIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1VOU0lHTkVEX0xPTkdfTE9ORywgMSwKKysgICAgICBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndW5zaWduZWQgbG9uZyBsb25nJyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3djaGFyX3QubTQJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL200L3djaGFyX3QubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wMzQ2NDQ4ODAgLTA0MDAKK0BAIC0wLDAgKzEsMjIgQEAKKysjIHdjaGFyX3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrZG5sIFRlc3Qgd2hldGhlciA8c3RkZGVmLmg+IGhhcyB0aGUgJ3djaGFyX3QnIHR5cGUuCisrZG5sIFByZXJlcXVpc2l0ZTogQUNfUFJPR19DQworKworK0FDX0RFRlVOKFtndF9UWVBFX1dDSEFSX1RdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igd2NoYXJfdF0sIGd0X2N2X2Nfd2NoYXJfdCwKKysgICAgW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3RkZGVmLmg+CisrICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2NoYXJfdD15ZXMsIGd0X2N2X2Nfd2NoYXJfdD1ubyldKQorKyAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dDSEFSX1QsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3Y2hhcl90JyB0eXBlLl0pCisrICBmaQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL200L3dpbnRfdC5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQvd2ludF90Lm00CTIwMDQtMDktMTIgMTQ6NDA6MzUuMDQwNjQzOTY4IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyB3aW50X3QubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMikKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorK2RubCBUZXN0IHdoZXRoZXIgPHdjaGFyLmg+IGhhcyB0aGUgJ3dpbnRfdCcgdHlwZS4KKytkbmwgUHJlcmVxdWlzaXRlOiBBQ19QUk9HX0NDCisrCisrQUNfREVGVU4oW2d0X1RZUEVfV0lOVF9UXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdpbnRfdF0sIGd0X2N2X2Nfd2ludF90LAorKyAgICBbQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx3Y2hhci5oPgorKyAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJztdLCAsCisrICAgICAgIGd0X2N2X2Nfd2ludF90PXllcywgZ3RfY3ZfY193aW50X3Q9bm8pXSkKKysgIGlmIHRlc3QgJGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX1dJTlRfVCwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3dpbnRfdCcgdHlwZS5dKQorKyAgZmkKKytdKQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9tNC94c2l6ZS5tNAkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvbTQveHNpemUubTQJMjAwNC0wOS0xMiAxNDo0MDozNS4wNDc2NDI5MDQgLTA0MDAKK0BAIC0wLDAgKzEsMTQgQEAKKysjIHhzaXplLm00IHNlcmlhbCAyCisrZG5sIENvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9YU0laRV0sCisrWworKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzaXplLmguCisrICBBQ19SRVFVSVJFKFtnbF9TSVpFX01BWF0pCisrICBBQ19DSEVDS19IRUFERVJTKHN0ZGludC5oKQorK10pCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL01ha2VmaWxlLmFtCTE5OTgtMTItMzAgMDY6MTk6NDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9NYWtlZmlsZS5hbQkyMDA0LTA5LTEyIDE0OjQwOjM1LjEyMTYzMTY1NiAtMDQwMAorQEAgLTEsNSArMSw1IEBACisgU1VCRElSUyA9IGxpYiBpbnRsIHNyYyBwbyBtYW4gdGVzdHN1aXRlCistRVhUUkFfRElTVCA9IGNoZWNrLmxyenN6IENPTVBBVEFCSUxJVFkgUkVBRE1FLmN2cyBSRUFETUUuaXNkbjRsaW51eCBcCisrRVhUUkFfRElTVCA9IGNvbmZpZy5ycGF0aCAgY2hlY2subHJ6c3ogQ09NUEFUQUJJTElUWSBSRUFETUUuY3ZzIFJFQURNRS5pc2RuNGxpbnV4IFwKKyAJUkVBRE1FLmdldHRleHQgcnBtcmMgYnVpbGRycG0gc3lzdHlwZS5pbiBmYXN0Y2hlY2suc2ggUkVBRE1FLnRlc3RzIFwKKyAJYmVvcy1ydW5waXBlZC5jIGZhc3RjaGVjay5iZW9zCisgbm9pbnN0X1NDUklQVFM9c3lzdHlwZQorQEAgLTgzLDMgKzgzLDUgQEAKKyBycG06ICQoUFIpLnRhci5neiBTcGVjZmlsZQorIAkkKHNyY2RpcikvYnVpbGRycG0gJChzcmNkaXIpCisgCisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvTWFrZWZpbGUuaW4JMTk5OC0xMi0zMCAxMTozMTo0MC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL01ha2VmaWxlLmluCTIwMDQtMDktMTIgMTQ6NDA6MzUuMTA5NjMzNDgwIC0wNDAwCitAQCAtMTI1LDcgKzEyNSw3IEBACisgCSAgJiYgQ09ORklHX0ZJTEVTPSRAIENPTkZJR19IRUFERVJTPSAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMKKyAKKyAkKEFDTE9DQUxfTTQpOiAgY29uZmlndXJlLmluICBhY2luY2x1ZGUubTQKKy0JY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkKKysJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgLUkgbTQKKyAKKyBjb25maWcuc3RhdHVzOiAkKHNyY2RpcikvY29uZmlndXJlCisgCSQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAtLXJlY2hlY2sKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvbWtpbnN0YWxsZGlycwkxOTk4LTA0LTI2IDA5OjIwOjUyLjAwMDAwMDAwMCAtMDQwMAorKysrIGxyenN6LTAuMTIuMjAvbWtpbnN0YWxsZGlycwkyMDA0LTA5LTEyIDE0OjQwOjM0LjMzNzc1MDgyNCAtMDQwMAorQEAgLTEsMzQgKzEsMTUwIEBACisgIyEgL2Jpbi9zaAorICMgbWtpbnN0YWxsZGlycyAtLS0gbWFrZSBkaXJlY3RvcnkgaGllcmFyY2h5CistIyBBdXRob3I6IE5vYWggRnJpZWRtYW4gPGZyaWVkbWFuQHByZXAuYWkubWl0LmVkdT4KKysKKytzY3JpcHR2ZXJzaW9uPTIwMDQtMDItMTUuMjAKKysKKysjIE9yaWdpbmFsIGF1dGhvcjogTm9haCBGcmllZG1hbiA8ZnJpZWRtYW5AcHJlcC5haS5taXQuZWR1PgorICMgQ3JlYXRlZDogMTk5My0wNS0xNgorLSMgTGFzdCBtb2RpZmllZDogMTk5NS0wMy0wNQorLSMgUHVibGljIGRvbWFpbgorKyMgUHVibGljIGRvbWFpbi4KKysjCisrIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisgCisgZXJyc3RhdHVzPTAKKytkaXJtb2RlPSIiCisgCistZm9yIGZpbGUgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICBzZXQgZm5vcmQgYGVjaG8gIjokZmlsZSIgfCBzZWQgLW5lICdzL146XC8vIy87cy9eOi8vO3MvXC8vIC9nO3MvXiMvXC8vO3AnYAorLSAgIHNoaWZ0CisrdXNhZ2U9IlwKKytVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisgCistICAgcGF0aGNvbXA9CistICAgZm9yIGQgaW4gJHsxKyIkQCJ9IDsgZG8KKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAkZCIKKy0gICAgIGNhc2UgIiRwYXRoY29tcCIgaW4KKy0gICAgICAgLSogKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworLSAgICAgZXNhYworK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCisrbGVhZGluZyBmaWxlIG5hbWUgY29tcG9uZW50cy4KKyAKKy0gICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorLSAgICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIiAxPiYyCistICAgICAgICBta2RpciAiJHBhdGhjb21wIiA+IC9kZXYvbnVsbCAyPiYxIHx8IGxhc3RlcnI9JD8KKy0gICAgIGZpCisrUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCisgCistICAgICBpZiB0ZXN0ICEgLWQgIiRwYXRoY29tcCI7IHRoZW4KKysjIHByb2Nlc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworKyAgY2FzZSAkMSBpbgorKyAgICAtaCB8IC0taGVscCB8IC0taCopICAgICAgICAgIyAtaCBmb3IgaGVscAorKyAgICAgIGVjaG8gIiR1c2FnZSIKKysgICAgICBleGl0IDAKKysgICAgICA7OworKyAgICAtbSkgICAgICAgICAgICAgICAgICAgICAgICAgIyAtbSBQRVJNIGFyZworKyAgICAgIHNoaWZ0CisrICAgICAgdGVzdCAkIyAtZXEgMCAmJiB7IGVjaG8gIiR1c2FnZSIgMT4mMjsgZXhpdCAxOyB9CisrICAgICAgZGlybW9kZT0kMQorKyAgICAgIHNoaWZ0CisrICAgICAgOzsKKysgICAgLS12ZXJzaW9uKQorKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorKyAgICAgIGV4aXQgMAorKyAgICAgIDs7CisrICAgIC0tKSAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKysgICAgICBzaGlmdAorKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKysgICAgICBlY2hvICIkdXNhZ2UiIDE+JjIKKysgICAgICBleGl0IDEKKysgICAgICA7OworKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBub24tb3B0IGFyZworKyAgICAgIGJyZWFrCisrICAgICAgOzsKKysgIGVzYWMKKytkb25lCisrCisrZm9yIGZpbGUKKytkbworKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisrICAgIHNoaWZ0CisrICBlbHNlCisrICAgIGJyZWFrCisrICBmaQorK2RvbmUKKysKKytjYXNlICQjIGluCisrICAwKSBleGl0IDAgOzsKKytlc2FjCisrCisrIyBTb2xhcmlzIDgncyBta2RpciAtcCBpc24ndCB0aHJlYWQtc2FmZS4gIElmIHlvdSBta2RpciAtcCBhL2IgYW5kCisrIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKysjIG9uZSB3aWxsIGNyZWF0ZSBhLCB0aGVuIHRoZSBvdGhlciB3aWxsIHRyeSB0byBjcmVhdGUgYSBhbmQgZGllIHdpdGgKKysjIGEgIkZpbGUgZXhpc3RzIiBlcnJvci4gIFRoaXMgaXMgYSBwcm9ibGVtIHdoZW4gY2FsbGluZyBta2luc3RhbGxkaXJzCisrIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisrIyBvdXJzZWx2ZXMgdG8gR05VIG1rZGlyLCB3aGljaCBpcyB0aHJlYWQtc2FmZS4KKytjYXNlICRkaXJtb2RlIGluCisrICAnJykKKysgICAgaWYgbWtkaXIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgISAtZCAuLy0tdmVyc2lvbjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyIC1wIC0tICQqIgorKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorKyAgICBlbHNlCisrICAgICAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKysgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKysgICAgICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorKyAgICAgICMgZXhpc3RzLgorKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisrICAgICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgorKyAgICBmaQorKyAgICA7OworKyAgKikKKysgICAgaWYgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYKKysgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisrICAgICAgZWNobyAibWtkaXIgLW0gJGRpcm1vZGUgLXAgLS0gJCoiCisrICAgICAgZXhlYyBta2RpciAtbSAiJGRpcm1vZGUiIC1wIC0tICIkQCIKKysgICAgZWxzZQorKyAgICAgICMgQ2xlYW4gdXAgYWZ0ZXIgTmV4dFN0ZXAgYW5kIE9wZW5TdGVwIG1rZGlyLgorKyAgICAgIGZvciBkIGluIC4vLW0gLi8tcCAuLy0tdmVyc2lvbiAiLi8kZGlybW9kZSI7CisrICAgICAgZG8KKysgICAgICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKysgICAgICBkb25lCisrICAgIGZpCisrICAgIDs7CisrZXNhYworKworK2ZvciBmaWxlCisrZG8KKysgIHNldCBmbm9yZCBgZWNobyAiOiRmaWxlIiB8IHNlZCAtbmUgJ3MvXjpcLy8jLztzL146Ly87cy9cLy8gL2c7cy9eIy9cLy87cCdgCisrICBzaGlmdAorKworKyAgcGF0aGNvbXA9CisrICBmb3IgZAorKyAgZG8KKysgICAgcGF0aGNvbXA9IiRwYXRoY29tcCRkIgorKyAgICBjYXNlICRwYXRoY29tcCBpbgorKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworKyAgICBlc2FjCisrCisrICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorKyAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIKKysKKysgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisrCisrICAgICAgaWYgdGVzdCAhIC1kICIkcGF0aGNvbXAiOyB0aGVuCisgCWVycnN0YXR1cz0kbGFzdGVycgorLSAgICAgZmkKKysgICAgICBlbHNlCisrCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisrCSAgZWNobyAiY2htb2QgJGRpcm1vZGUgJHBhdGhjb21wIgorKwkgIGxhc3RlcnI9IiIKKysJICBjaG1vZCAiJGRpcm1vZGUiICIkcGF0aGNvbXAiIHx8IGxhc3RlcnI9JD8KKyAKKy0gICAgIHBhdGhjb21wPSIkcGF0aGNvbXAvIgorLSAgIGRvbmUKKysJICBpZiB0ZXN0ICEgLXogIiRsYXN0ZXJyIjsgdGhlbgorKwkgICAgZXJyc3RhdHVzPSRsYXN0ZXJyCisrCSAgZmkKKysJZmkKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKysgIGRvbmUKKyBkb25lCisgCisgZXhpdCAkZXJyc3RhdHVzCisrCisrIyBMb2NhbCBWYXJpYWJsZXM6CisrIyBtb2RlOiBzaGVsbC1zY3JpcHQKKysjIHNoLWluZGVudGF0aW9uOiAyCisrIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisrIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisrIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKysjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKysjIEVuZDoKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vYm9sZHF1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9ib2xkcXVvdC5zZWQJMjAwNC0wOS0xMiAxNDo0MDozNC43MjM2OTIxNTIgLTA0MDAKK0BAIC0wLDAgKzEsMTAgQEAKKytzLyJcKFteIl0qXCkiL+KAnFwx4oCdL2cKKytzL2BcKFteYCddKlwpJy/igJhcMeKAmS9nCisrcy8gJ1woW15gJ10qXCknIC8g4oCYXDHigJkgL2cKKytzLyAnXChbXmAnXSpcKSckLyDigJhcMeKAmS9nCisrcy9eJ1woW15gJ10qXCknIC/igJhcMeKAmSAvZworK3Mv4oCc4oCdLyIiL2cKKytzL+KAnC/igJwbWzFtL2cKKytzL+KAnS8bWzBt4oCdL2cKKytzL+KAmC/igJgbWzFtL2cKKytzL+KAmS8bWzBt4oCZL2cKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vY2F0LWlkLXRibC5jCTE5OTgtMTItMjkgMDQ6MjQ6MjQuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9jYXQtaWQtdGJsLmMJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xLDIzNCArMCwwIEBACistLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgcG8ydGJsLnNlZCBmcm9tIGxyenN6LnBvdC4gICovCistCistI2lmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorLQorLSNpbmNsdWRlICJsaWJnZXR0ZXh0LmgiCistCistY29uc3Qgc3RydWN0IF9tc2dfZW50IF9tc2dfdGJsW10gPSB7CistICB7IiIsIDF9LAorLSAgeyJpb19tb2RlKCwyKSBpbiByYnNiLmMgbm90IGltcGxlbWVudGVkXG4iLCAyfSwKKy0gIHsiY2F1Z2h0IHNpZ25hbCAlZDsgZXhpdGluZyIsIDN9LAorLSAgeyJjb21tYW5kIHRyaWVzIiwgNH0sCistICB7InBhY2tldGxlbmd0aCIsIDV9LAorLSAgeyJwYWNrZXRsZW5ndGggb3V0IG9mIHJhbmdlIDI0Li4lbGQiLCA2fSwKKy0gIHsiZnJhbWVsZW5ndGgiLCA3fSwKKy0gIHsiZnJhbWVsZW5ndGggb3V0IG9mIHJhbmdlIDMyLi4lbGQiLCA4fSwKKy0gIHsibWluX2JwcyIsIDl9LAorLSAgeyJtaW5fYnBzIG11c3QgYmUgPj0gMCIsIDEwfSwKKy0gIHsibWluX2Jwc190aW1lIiwgMTF9LAorLSAgeyJtaW5fYnBzX3RpbWUgbXVzdCBiZSA+IDEiLCAxMn0sCistICB7ImhvdXIgdG8gbGFyZ2UgKDAuLjIzKSIsIDEzfSwKKy0gIHsidW5wYXJzYWJsZSBzdG9wIHRpbWVcbiIsIDE0fSwKKy0gIHsibWludXRlIHRvIGxhcmdlICgwLi41OSkiLCAxNX0sCistICB7InN0b3AgdGltZSB0byBzbWFsbCIsIDE2fSwKKy0gIHsic3RvcC1hdCIsIDE3fSwKKy0gIHsidGltZW91dCIsIDE4fSwKKy0gIHsidGltZW91dCBvdXQgb2YgcmFuZ2UgMTAuLjEwMDAiLCAxOX0sCistICB7InNlY3VyaXR5IHZpb2xhdGlvbjogY2FuJ3QgZG8gdGhhdCB1bmRlciByZXN0cmljdGVkIHNoZWxsXG4iLCAyMH0sCistICB7IndpbmRvdyBzaXplIiwgMjF9LAorLSAgeyJjYW5ub3QgdHVybm9mZiBzeXNsb2ciLCAyMn0sCistICB7InN0YXJ0dXAgZGVsYXkiLCAyM30sCistICB7Im91dCBvZiBtZW1vcnkiLCAyNH0sCistICB7InRoaXMgcHJvZ3JhbSB3YXMgbmV2ZXIgaW50ZW5kZWQgdG8gYmUgdXNlZCBzZXR1aWRcbiIsIDI1fSwKKy0gIHsibmVlZCBhdCBsZWFzdCBvbmUgZmlsZSB0byBzZW5kIiwgMjZ9LAorLSAgeyJDYW4ndCBzZW5kIGNvbW1hbmQgaW4gcmVzdHJpY3RlZCBtb2RlXG4iLCAyN30sCistICB7Imhvc3RuYW1lIHRvbyBsb25nXG4iLCAyOH0sCistICB7ImlsbGVnYWwgc2VydmVyIGFkZHJlc3NcbiIsIDI5fSwKKy0gIHsiY2FuIHJlYWQgb25seSBvbmUgZmlsZSBmcm9tIHN0ZGluIiwgMzB9LAorLSAgeyJUcmFuc2ZlciBpbmNvbXBsZXRlXG4iLCAzMX0sCistICB7IlRyYW5zZmVyIGNvbXBsZXRlXG4iLCAzMn0sCistICB7InNlbmRfcHNldWRvICVzOiBjYW5ub3Qgb3BlbiB0bXBmaWxlICVzOiAlcyIsIDMzfSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCBsc3RhdCB0bXBmaWxlICVzOiAlcyIsIDM0fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGF2b2lkaW5nIHN5bWxpbmsgdHJhcCIsIDM1fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGNhbm5vdCB3cml0ZSB0byB0bXBmaWxlICVzOiAlcyIsIDM2fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IGZhaWxlZCIsIDM3fSwKKy0gIHsic2VuZF9wc2V1ZG8gJXM6IG9rIiwgMzh9LAorLSAgeyJ0Y3AgcHJvdG9jb2wgaW5pdCBmYWlsZWRcbiIsIDM5fSwKKy0gIHsiQW5zd2VyaW5nIFRJTUVTWU5DIGF0ICVzIiwgNDB9LAorLSAgeyJ0aW1lem9uZSIsIDQxfSwKKy0gIHsidGltZXpvbmUgdW5rbm93biIsIDQyfSwKKy0gIHsiQ2FuJ3Qgb3BlbiBhbnkgcmVxdWVzdGVkIGZpbGVzLiIsIDQzfSwKKy0gIHsic2VjdXJpdHkgdmlvbGF0aW9uOiBub3QgYWxsb3dlZCB0byB1cGxvYWQgZnJvbSAlcyIsIDQ0fSwKKy0gIHsiY2Fubm90IG9wZW4gJXMiLCA0NX0sCistICB7ImlzIG5vdCBhIGZpbGU6ICVzIiwgNDZ9LAorLSAgeyIlcy8lczogZXJyb3Igb2NjdXJlZCIsIDQ3fSwKKy0gIHsic2tpcHBlZDogJXMiLCA0OH0sCistICB7IiVzLyVzOiBza2lwcGVkIiwgNDl9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQgICBCUFM6JS04bGQgICAgICAgICAgICAgICAgICAgICAgICBcbiIsIDUwfSwKKy0gIHsiU2VuZGluZyAlcywgJWxkIGJsb2NrczogIiwgNTF9LAorLSAgeyJHaXZlIHlvdXIgbG9jYWwgWE1PREVNIHJlY2VpdmUgY29tbWFuZCBub3cuIiwgNTJ9LAorLSAgeyJTZW5kaW5nOiAlc1xuIiwgNTN9LAorLSAgeyJUaW1lb3V0IG9uIHBhdGhuYW1lIiwgNTR9LAorLSAgeyJSZWNlaXZlciBDYW5jZWxsZWQiLCA1NX0sCistICB7Ik5vIEFDSyBvbiBFT1QiLCA1Nn0sCistICB7Ilhtb2RlbSBzZWN0b3JzL2tieXRlcyBzZW50OiAlM2QvJTJkayIsIDU3fSwKKy0gIHsiWW1vZGVtIHNlY3RvcnMva2J5dGVzIHNlbnQ6ICUzZC8lMmRrIiwgNTh9LAorLSAgeyJDYW5jZWxsZWQiLCA1OX0sCistICB7IlRpbWVvdXQgb24gc2VjdG9yIEFDSyIsIDYwfSwKKy0gIHsiTkFLIG9uIHNlY3RvciIsIDYxfSwKKy0gIHsiR290IGJ1cnN0IGZvciBzZWN0b3IgQUNLIiwgNjJ9LAorLSAgeyJHb3QgJTAyeCBmb3Igc2VjdG9yIEFDSyIsIDYzfSwKKy0gIHsiUmV0cnkgQ291bnQgRXhjZWVkZWQiLCA2NH0sCistICB7IlRyeSBgJXMgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsIDY1fSwKKy0gIHsiJXMgdmVyc2lvbiAlc1xuIiwgNjZ9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIGZpbGUgLi4uXG4iLCA2N30sCistICB7IiAgIG9yOiAlcyBbb3B0aW9uc10gLXtjfGl9IENPTU1BTkRcbiIsIDY4fSwKKy0gIHsiU2VuZCBmaWxlKHMpIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDY5fSwKKy0gIHsiXAorLSAgICAoWCkgPSBvcHRpb24gYXBwbGllcyB0byBYTU9ERU0gb25seVxuXAorLSAgICAoWSkgPSBvcHRpb24gYXBwbGllcyB0byBZTU9ERU0gb25seVxuXAorLSAgICAoWikgPSBvcHRpb24gYXBwbGllcyB0byBaTU9ERU0gb25seVxuIiwgNzB9LAorLSAgeyJcCistICAtKywgLS1hcHBlbmQgICAgICAgICAgICAgICAgYXBwZW5kIHRvIGV4aXN0aW5nIGRlc3RpbmF0aW9uIGZpbGUgKFopXG5cCistICAtMiwgLS10d29zdG9wICAgICAgICAgICAgICAgdXNlIDIgc3RvcCBiaXRzXG5cCistICAtNCwgLS10cnktNGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gNEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC00ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA0SyBibG9ja3NpemUgKGRvZXNuJ3QgdHJ5IDgpXG5cCistICAtOCwgLS10cnktOGsgICAgICAgICAgICAgICAgZ28gdXAgdG8gOEsgYmxvY2tzaXplXG5cCistICAgICAgLS1zdGFydC04ayAgICAgICAgICAgICAgc3RhcnQgd2l0aCA4SyBibG9ja3NpemVcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLWNvbW1hbmQgQ09NTUFORCAgICAgICBleGVjdXRlIHJlbW90ZSBjb21tYW5kIENPTU1BTkQgKFopXG5cCistICAtQywgLS1jb21tYW5kLXRyaWVzIE4gICAgICAgdHJ5IE4gdGltZXMgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgKFopXG5cCistICAtZCwgLS1kb3QtdG8tc2xhc2ggICAgICAgICAgY2hhbmdlICcuJyB0byAnLycgaW4gcGF0aG5hbWVzIChZL1opXG5cCistICAgICAgLS1kZWxheS1zdGFydHVwIE4gICAgICAgc2xlZXAgTiBzZWNvbmRzIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuXAorLSAgLWUsIC0tZXNjYXBlICAgICAgICAgICAgICAgIGVzY2FwZSBhbGwgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIGZvcmNlIHJlY2VpdmVyIHRvIHJlbmFtZSBmaWxlcyBpdCBhbHJlYWR5IGhhc1xuXAorLSAgLWYsIC0tZnVsbC1wYXRoICAgICAgICAgICAgIHNlbmQgZnVsbCBwYXRobmFtZSAoWS9aKVxuXAorLSAgLWksIC0taW1tZWRpYXRlLWNvbW1hbmQgQ01EIHNlbmQgcmVtb3RlIENNRCwgcmV0dXJuIGltbWVkaWF0ZWx5IChaKVxuXAorLSAgLWgsIC0taGVscCAgICAgICAgICAgICAgICAgIHByaW50IHRoaXMgdXNhZ2UgbWVzc2FnZVxuXAorLSAgLWssIC0tMWsgICAgICAgICAgICAgICAgICAgIHNlbmQgMTAyNCBieXRlIHBhY2tldHMgKFgpXG5cCistICAtTCwgLS1wYWNrZXRsZW4gTiAgICAgICAgICAgbGltaXQgc3VicGFja2V0IGxlbmd0aCB0byBOIGJ5dGVzIChaKVxuXAorLSAgLWwsIC0tZnJhbWVsZW4gTiAgICAgICAgICAgIGxpbWl0IGZyYW1lIGxlbmd0aCB0byBOIGJ5dGVzIChsPj1MKSAoWilcblwKKy0gIC1tLCAtLW1pbi1icHMgTiAgICAgICAgICAgICBzdG9wIHRyYW5zbWlzc2lvbiBpZiBCUFMgYmVsb3cgTlxuXAorLSAgLU0sIC0tbWluLWJwcy10aW1lIE4gICAgICAgICAgZm9yIGF0IGxlYXN0IE4gc2Vjb25kcyAoZGVmYXVsdDogMTIwKVxuIiwgNzF9LAorLSAgeyJcCistICAtbiwgLS1uZXdlciAgICAgICAgICAgICAgICAgc2VuZCBmaWxlIGlmIHNvdXJjZSBuZXdlciAoWilcblwKKy0gIC1OLCAtLW5ld2VyLW9yLWxvbmdlciAgICAgICBzZW5kIGZpbGUgaWYgc291cmNlIG5ld2VyIG9yIGxvbmdlciAoWilcblwKKy0gIC1vLCAtLTE2LWJpdC1jcmMgICAgICAgICAgICB1c2UgMTYgYml0IENSQyBpbnN0ZWFkIG9mIDMyIGJpdCBDUkMgKFopXG5cCistICAtTywgLS1kaXNhYmxlLXRpbWVvdXRzICAgICAgZGlzYWJsZSB0aW1lb3V0IGNvZGUsIHdhaXQgZm9yZXZlclxuXAorLSAgLXAsIC0tcHJvdGVjdCAgICAgICAgICAgICAgIHByb3RlY3QgZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSAoWilcblwKKy0gIC1yLCAtLXJlc3VtZSAgICAgICAgICAgICAgICByZXN1bWUgaW50ZXJydXB0ZWQgZmlsZSB0cmFuc2ZlciAoWilcblwKKy0gIC1SLCAtLXJlc3RyaWN0ZWQgICAgICAgICAgICByZXN0cmljdGVkLCBtb3JlIHNlY3VyZSBtb2RlXG5cCistICAtcSwgLS1xdWlldCAgICAgICAgICAgICAgICAgcXVpZXQgKG5vIHByb2dyZXNzIHJlcG9ydHMpXG5cCistICAtcywgLS1zdG9wLWF0IHtISDpNTXwrTn0gICAgc3RvcCB0cmFuc21pc3Npb24gYXQgSEg6TU0gb3IgaW4gTiBzZWNvbmRzXG5cCistICAgICAgLS10Y3AgICAgICAgICAgICAgICAgICAgYnVpbGQgYSBUQ1AgY29ubmVjdGlvbiB0byB0cmFuc21pdCBmaWxlc1xuXAorLSAgICAgIC0tdGNwLXNlcnZlciAgICAgICAgICAgIG9wZW4gc29ja2V0LCB3YWl0IGZvciBjb25uZWN0aW9uXG5cCistICAtdSwgLS11bmxpbmsgICAgICAgICAgICAgICAgdW5saW5rIGZpbGUgYWZ0ZXIgdHJhbnNtaXNzaW9uXG5cCistICAtVSwgLS11bnJlc3RyaWN0ICAgICAgICAgICAgdHVybiBvZmYgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCwgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlc1xuXAorLSAgLVksIC0tb3ZlcndyaXRlLW9yLXNraXAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcywgZWxzZSBza2lwXG5cCistICAgICAgLS15bW9kZW0gICAgICAgICAgICAgICAgdXNlIFlNT0RFTSBwcm90b2NvbFxuXAorLSAgLVosIC0tem1vZGVtICAgICAgICAgICAgICAgIHVzZSBaTU9ERU0gcHJvdG9jb2xcblwKKy1cblwKKy1zaG9ydCBvcHRpb25zIHVzZSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGxvbmcgb25lc1xuIiwgNzJ9LAorLSAgeyJnb3QgWlJRSU5JVCIsIDczfSwKKy0gIHsiZ290IFpDQU4iLCA3NH0sCistICB7ImJsa2xlbiBub3cgJWRcbiIsIDc1fSwKKy0gIHsienNlbmRmZGF0YTogYnBzIHJhdGUgJWxkIGJlbG93IG1pbiAlbGQiLCA3Nn0sCistICB7InpzZW5kZmRhdGE6IHJlYWNoZWQgc3RvcCB0aW1lIiwgNzd9LAorLSAgeyJCeXRlcyBTZW50OiU3bGQvJTdsZCAgIEJQUzolLThsZCBFVEEgJTAyZDolMDJkICAiLCA3OH0sCistICB7ImNhbGNfYmxrbGVuOiByZWR1Y2VkIHRvICVkIGR1ZSB0byBlcnJvclxuIiwgNzl9LAorLSAgeyJjYWxjX2Jsa2xlbjogcmV0dXJuZWQgb2xkIHZhbHVlICVkIGR1ZSB0byBsb3cgYnBlIGRpZmZcbiIsIDgwfSwKKy0gIHsiY2FsY19ibGtsZW46IG9sZCAlbGQsIG5ldyAlbGQsIGQgJWxkXG4iLCA4MX0sCistICB7ImNhbGNfYmxrbGVuOiBjYWxjIHRvdGFsX2J5dGVzPSVsZCwgYnBlPSVsZCwgZWM9JWxkXG4iLCA4Mn0sCistICB7ImNhbGNfYmxrbGVuOiBibGtsZW4gJWQsIG9rICVsZCwgZmFpbGVkICVsZCAtPiAlbHVcbiIsIDgzfSwKKy0gIHsiY2FsY19ibGtsZW46IHJldHVybmVkICVkIGFzIGJlc3RcbiIsIDg0fSwKKy0gIHsiXAorLVxuXAorLWNvdW50ZW06IFRvdGFsICVkICVsZFxuIiwgODV9LAorLSAgeyJCYWQgZXNjYXBlIHNlcXVlbmNlICV4IiwgODZ9LAorLSAgeyJTZW5kZXIgQ2FuY2VsZWQiLCA4N30sCistICB7IlRJTUVPVVQiLCA4OH0sCistICB7IkJhZCBkYXRhIHN1YnBhY2tldCIsIDg5fSwKKy0gIHsiRGF0YSBzdWJwYWNrZXQgdG9vIGxvbmciLCA5MH0sCistICB7IkdhcmJhZ2UgY291bnQgZXhjZWVkZWQiLCA5MX0sCistICB7IkdvdCAlcyIsIDkyfSwKKy0gIHsiUmV0cnkgJWQ6ICIsIDkzfSwKKy0gIHsiZG9uJ3QgaGF2ZSBzZXR0aW1lb2ZkYXksIHdpbGwgbm90IHNldCB0aW1lXG4iLCA5NH0sCistICB7Im5vdCBydW5uaW5nIGFzIHJvb3QgKHRoaXMgaXMgZ29vZCEpLCBjYW4gbm90IHNldCB0aW1lXG4iLCA5NX0sCistICB7ImJ5dGVzX3Blcl9lcnJvciIsIDk2fSwKKy0gIHsiYnl0ZXMtcGVyLWVycm9yIHNob3VsZCBiZSA+MTAwIiwgOTd9LAorLSAgeyJPX1NZTkMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsIiwgOTh9LAorLSAgeyJnYXJiYWdlIG9uIGNvbW1hbmRsaW5lIiwgOTl9LAorLSAgeyJVc2FnZTogJXMgW29wdGlvbnNdIFtmaWxlbmFtZS5pZi54bW9kZW1dXG4iLCAxMDB9LAorLSAgeyJSZWNlaXZlIGZpbGVzIHdpdGggWk1PREVNL1lNT0RFTS9YTU9ERU0gcHJvdG9jb2xcbiIsIDEwMX0sCistICB7IlwKKy0gIC0rLCAtLWFwcGVuZCAgICAgICAgICAgICAgICBhcHBlbmQgdG8gZXhpc3RpbmcgZmlsZXNcblwKKy0gIC1hLCAtLWFzY2lpICAgICAgICAgICAgICAgICBBU0NJSSB0cmFuc2ZlciAoY2hhbmdlIENSL0xGIHRvIExGKVxuXAorLSAgLWIsIC0tYmluYXJ5ICAgICAgICAgICAgICAgIGJpbmFyeSB0cmFuc2ZlclxuXAorLSAgLUIsIC0tYnVmc2l6ZSBOICAgICAgICAgICAgIGJ1ZmZlciBOIGJ5dGVzIChOPT1hdXRvOiBidWZmZXIgd2hvbGUgZmlsZSlcblwKKy0gIC1jLCAtLXdpdGgtY3JjICAgICAgICAgICAgICBVc2UgMTYgYml0IENSQyAoWClcblwKKy0gIC1DLCAtLWFsbG93LXJlbW90ZS1jb21tYW5kcyBhbGxvdyBleGVjdXRpb24gb2YgcmVtb3RlIGNvbW1hbmRzIChaKVxuXAorLSAgLUQsIC0tbnVsbCAgICAgICAgICAgICAgICAgIHdyaXRlIGFsbCByZWNlaXZlZCBkYXRhIHRvIC9kZXYvbnVsbFxuXAorLSAgICAgIC0tZGVsYXktc3RhcnR1cCBOICAgICAgIHNsZWVwIE4gc2Vjb25kcyBiZWZvcmUgZG9pbmcgYW55dGhpbmdcblwKKy0gIC1lLCAtLWVzY2FwZSAgICAgICAgICAgICAgICBFc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzIChaKVxuXAorLSAgLUUsIC0tcmVuYW1lICAgICAgICAgICAgICAgIHJlbmFtZSBhbnkgZmlsZXMgYWxyZWFkeSBleGlzdGluZ1xuXAorLSAgICAgIC0tZXJyb3JzIE4gICAgICAgICAgICAgIGdlbmVyYXRlIENSQyBlcnJvciBldmVyeSBOIGJ5dGVzIChkZWJ1Z2dpbmcpXG5cCistICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgSGVscCwgcHJpbnQgdGhpcyB1c2FnZSBtZXNzYWdlXG5cCistICAtbSwgLS1taW4tYnBzIE4gICAgICAgICAgICAgc3RvcCB0cmFuc21pc3Npb24gaWYgQlBTIGJlbG93IE5cblwKKy0gIC1NLCAtLW1pbi1icHMtdGltZSBOICAgICAgICAgIGZvciBhdCBsZWFzdCBOIHNlY29uZHMgKGRlZmF1bHQ6IDEyMClcblwKKy0gIC1PLCAtLWRpc2FibGUtdGltZW91dHMgICAgICBkaXNhYmxlIHRpbWVvdXQgY29kZSwgd2FpdCBmb3JldmVyIGZvciBkYXRhXG5cCistICAgICAgLS1vLXN5bmMgICAgICAgICAgICAgICAgb3BlbiBvdXRwdXQgZmlsZShzKSBpbiBzeW5jaHJvbm91cyB3cml0ZSBtb2RlXG5cCistICAtcCwgLS1wcm90ZWN0ICAgICAgICAgICAgICAgcHJvdGVjdCBleGlzdGluZyBmaWxlc1xuXAorLSAgLXEsIC0tcXVpZXQgICAgICAgICAgICAgICAgIHF1aWV0LCBubyBwcm9ncmVzcyByZXBvcnRzXG5cCistICAtciwgLS1yZXN1bWUgICAgICAgICAgICAgICAgdHJ5IHRvIHJlc3VtZSBpbnRlcnJ1cHRlZCBmaWxlIHRyYW5zZmVyIChaKVxuXAorLSAgLVIsIC0tcmVzdHJpY3RlZCAgICAgICAgICAgIHJlc3RyaWN0ZWQsIG1vcmUgc2VjdXJlIG1vZGVcblwKKy0gIC1zLCAtLXN0b3AtYXQge0hIOk1NfCtOfSAgICBzdG9wIHRyYW5zbWlzc2lvbiBhdCBISDpNTSBvciBpbiBOIHNlY29uZHNcblwKKy0gIC1TLCAtLXRpbWVzeW5jICAgICAgICAgICAgICByZXF1ZXN0IHJlbW90ZSB0aW1lICh0d2ljZTogc2V0IGxvY2FsIHRpbWUpXG5cCistICAgICAgLS1zeXNsb2dbPW9mZl0gICAgICAgICAgdHVybiBzeXNsb2cgb24gb3Igb2ZmLCBpZiBwb3NzaWJsZVxuXAorLSAgLXQsIC0tdGltZW91dCBOICAgICAgICAgICAgIHNldCB0aW1lb3V0IHRvIE4gdGVudGhzIG9mIGEgc2Vjb25kXG5cCistICAtdSwgLS1rZWVwLXVwcGVyY2FzZSAgICAgICAga2VlcCB1cHBlciBjYXNlIGZpbGVuYW1lc1xuXAorLSAgLVUsIC0tdW5yZXN0cmljdCAgICAgICAgICAgIGRpc2FibGUgcmVzdHJpY3RlZCBtb2RlIChpZiBhbGxvd2VkIHRvKVxuXAorLSAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgIGJlIHZlcmJvc2UsIHByb3ZpZGUgZGVidWdnaW5nIGluZm9ybWF0aW9uXG5cCistICAtdywgLS13aW5kb3dzaXplIE4gICAgICAgICAgV2luZG93IGlzIE4gYnl0ZXMgKFopXG5cCistICAtWCAgLS14bW9kZW0gICAgICAgICAgICAgICAgdXNlIFhNT0RFTSBwcm90b2NvbFxuXAorLSAgLXksIC0tb3ZlcndyaXRlICAgICAgICAgICAgIFllcywgY2xvYmJlciBleGlzdGluZyBmaWxlIGlmIGFueVxuXAorLSAgICAgIC0teW1vZGVtICAgICAgICAgICAgICAgIHVzZSBZTU9ERU0gcHJvdG9jb2xcblwKKy0gIC1aLCAtLXptb2RlbSAgICAgICAgICAgICAgICB1c2UgWk1PREVNIHByb3RvY29sXG5cCistXG5cCistc2hvcnQgb3B0aW9ucyB1c2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBsb25nIG9uZXNcbiIsIDEwMn0sCistICB7IiVzIHdhaXRpbmcgdG8gcmVjZWl2ZS4iLCAxMDN9LAorLSAgeyJcckJ5dGVzIHJlY2VpdmVkOiAlN2xkLyU3bGQgICBCUFM6JS02bGQgICAgICAgICAgICAgICAgXHJcbiIsIDEwNH0sCistICB7IiVzOiByZWFkeSB0byByZWNlaXZlICVzIiwgMTA1fSwKKy0gIHsiXHJCeXRlcyByZWNlaXZlZDogJTdsZCAgIEJQUzolLTZsZCAgICAgICAgICAgICAgICBcclxuIiwgMTA2fSwKKy0gIHsiXAorLVxyXG5cCistJXM6ICVzIHJlbW92ZWQuXHJcbiIsIDEwN30sCistICB7IlBhdGhuYW1lIGZldGNoIHJldHVybmVkIEVPVCIsIDEwOH0sCistICB7IlJlY2VpdmVkIGR1cCBTZWN0b3IiLCAxMDl9LAorLSAgeyJTeW5jIEVycm9yIiwgMTEwfSwKKy0gIHsiQ1JDIiwgMTExfSwKKy0gIHsiQ2hlY2tzdW0iLCAxMTJ9LAorLSAgeyJTZWN0b3IgbnVtYmVyIGdhcmJsZWQiLCAxMTN9LAorLSAgeyJTZW5kZXIgQ2FuY2VsbGVkIiwgMTE0fSwKKy0gIHsiR290IDAlbyBzZWN0b3IgaGVhZGVyIiwgMTE1fSwKKy0gIHsiZmlsZSBuYW1lIGVuZHMgd2l0aCBhIC8sIHNraXBwZWQ6ICVzXG4iLCAxMTZ9LAorLSAgeyJ6bWFuYWc9JWQsIEx6bWFuYWc9JWRcbiIsIDExN30sCistICB7Inpjb252PSVkXG4iLCAxMTh9LAorLSAgeyJmaWxlIGV4aXN0cywgc2tpcHBlZDogJXNcbiIsIDExOX0sCistICB7IlRJTUVTWU5DOiBoZXJlICVsZCwgcmVtb3RlICVsZCwgZGlmZiAlbGQgc2Vjb25kc1xuIiwgMTIwfSwKKy0gIHsiVElNRVNZTkM6IGNhbm5vdCBzZXQgdGltZTogJXNcbiIsIDEyMX0sCistICB7ImNhbm5vdCB0bXBmaWxlKCkgZm9yIHRjcCBwcm90b2NvbCBzeW5jaHJvbml6YXRpb24iLCAxMjJ9LAorLSAgeyJUb3BpcGUiLCAxMjN9LAorLSAgeyJSZWNlaXZpbmc6ICVzXG4iLCAxMjR9LAorLSAgeyJCbG9ja3MgcmVjZWl2ZWQ6ICVkIiwgMTI1fSwKKy0gIHsiJXM6ICVzIGV4aXN0c1xuIiwgMTI2fSwKKy0gIHsiJXM6XHRTZWN1cml0eSBWaW9sYXRpb24iLCAxMjd9LAorLSAgeyJyZW1vdGUgY29tbWFuZCBleGVjdXRpb24gcmVxdWVzdGVkIiwgMTI4fSwKKy0gIHsibm90IGV4ZWN1dGVkIiwgMTI5fSwKKy0gIHsiZ290IFpSSU5JVCIsIDEzMH0sCistICB7IlNraXBwZWQiLCAxMzF9LAorLSAgeyJyemZpbGU6IGJwcyByYXRlICVsZCBiZWxvdyBtaW4gJWxkIiwgMTMyfSwKKy0gIHsicnpmaWxlOiByZWFjaGVkIHN0b3AgdGltZSIsIDEzM30sCistICB7IlxyQnl0ZXMgcmVjZWl2ZWQ6ICU3bGQvJTdsZCAgIEJQUzolLTZsZCBFVEEgJTAyZDolMDJkICAiLCAxMzR9LAorLSAgeyJmZ2V0cyBmb3IgdGNwIHByb3RvY29sIHN5bmNocm9uaXphdGlvbiBmYWlsZWQ6ICIsIDEzNX0sCistICB7ImZpbGUgY2xvc2UgZXJyb3IiLCAxMzZ9LAorLX07CistCistaW50IF9tc2dfdGJsX2xlbmd0aCA9IDEzNjsKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vQ2hhbmdlTG9nCTE5OTgtMDQtMjYgMDk6MjA6NTIuMDAwMDAwMDAwIC0wNDAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9DaGFuZ2VMb2cJMjAwNC0wOS0xMiAxNDo0MDozNC43OTM2ODE1MTIgLTA0MDAKK0BAIC0xLDMgKzEsMTUgQEAKKysyMDA0LTA5LTEyICBnZXR0ZXh0aXplICA8YnVnLWdudS1nZXR0ZXh0QGdudS5vcmc+CisrCisrCSogYm9sZHF1b3Quc2VkOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBlbkBib2xkcXVvdC5oZWFkZXI6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGVuQHF1b3QuaGVhZGVyOiBOZXcgZmlsZSwgZnJvbSBnZXR0ZXh0LTAuMTQuMS4KKysJKiBpbnNlcnQtaGVhZGVyLnNpbjogTmV3IGZpbGUsIGZyb20gZ2V0dGV4dC0wLjE0LjEuCisrCSogcXVvdC5zZWQ6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIHJlbW92ZS1wb3RjZGF0ZS5zaW46IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIFJ1bGVzLXF1b3Q6IE5ldyBmaWxlLCBmcm9tIGdldHRleHQtMC4xNC4xLgorKwkqIGNhdC1pZC10YmwuYzogUmVtb3ZlIGZpbGUuCisrCSogc3RhbXAtY2F0LWlkOiBSZW1vdmUgZmlsZS4KKysKKyAvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwbzJ0Ymwuc2VkIGZyb20gbHJ6c3oucG90LiAgKi8KKyAKKyAjaWYgSEFWRV9DT05GSUdfSAorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9lbkBib2xkcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQGJvbGRxdW90LmhlYWRlcgkyMDA0LTA5LTEyIDE0OjQwOjM0LjczMTY5MDkzNiAtMDQwMAorQEAgLTAsMCArMSwyNSBAQAorKyMgQWxsIHRoaXMgY2F0YWxvZyAidHJhbnNsYXRlcyIgYXJlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzLgorKyMgVGhlIG1zZ2lkcyBtdXN0IGJlIEFTQ0lJIGFuZCB0aGVyZWZvcmUgY2Fubm90IGNvbnRhaW4gcmVhbCBxdW90YXRpb24KKysjIGNoYXJhY3RlcnMsIG9ubHkgc3Vic3RpdHV0ZXMgbGlrZSBncmF2ZSBhY2NlbnQgKDB4NjApLCBhcG9zdHJvcGhlICgweDI3KQorKyMgYW5kIGRvdWJsZSBxdW90ZSAoMHgyMikuIFRoZXNlIHN1YnN0aXR1dGVzIGxvb2sgc3RyYW5nZTsgc2VlCisrIyBodHRwOi8vd3d3LmNsLmNhbS5hYy51ay9+bWdrMjUvdWNzL3F1b3Rlcy5odG1sCisrIworKyMgVGhpcyBjYXRhbG9nIHRyYW5zbGF0ZXMgZ3JhdmUgYWNjZW50ICgweDYwKSBhbmQgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkuCisrIyBJdCBhbHNvIHRyYW5zbGF0ZXMgcGFpcnMgb2YgYXBvc3Ryb3BoZSAoMHgyNykgdG8KKysjIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrIChVKzIwMTgpIGFuZCByaWdodCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOSkKKysjIGFuZCBwYWlycyBvZiBxdW90YXRpb24gbWFyayAoMHgyMikgdG8KKysjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIChVKzIwMUMpIGFuZCByaWdodCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxRCkuCisrIworKyMgV2hlbiBvdXRwdXQgdG8gYW4gVVRGLTggdGVybWluYWwsIHRoZSBxdW90YXRpb24gY2hhcmFjdGVycyBhcHBlYXIgcGVyZmVjdGx5LgorKyMgV2hlbiBvdXRwdXQgdG8gYW4gSVNPLTg4NTktMSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcyAoYnkgaWNvbnYgaW4gZ2xpYmMgMi4yIG9yIG5ld2VyKSBvciB0bworKyMgZ3JhdmUvYWN1dGUgYWNjZW50IChieSBsaWJpY29udiksIGFuZCB0aGUgZG91YmxlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIDB4MjIuCisrIyBXaGVuIG91dHB1dCB0byBhbiBBU0NJSSB0ZXJtaW5hbCwgdGhlIHNpbmdsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byBhcG9zdHJvcGhlcywgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjCisrIyBUaGlzIGNhdGFsb2cgZnVydGhlcm1vcmUgZGlzcGxheXMgdGhlIHRleHQgYmV0d2VlbiB0aGUgcXVvdGF0aW9uIG1hcmtzIGluCisrIyBib2xkIGZhY2UsIGFzc3VtaW5nIHRoZSBWVDEwMC9YVGVybSBlc2NhcGUgc2VxdWVuY2VzLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vZW5AcXVvdC5oZWFkZXIJMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2VuQHF1b3QuaGVhZGVyCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzM3NjkwMDI0IC0wNDAwCitAQCAtMCwwICsxLDIyIEBACisrIyBBbGwgdGhpcyBjYXRhbG9nICJ0cmFuc2xhdGVzIiBhcmUgcXVvdGF0aW9uIGNoYXJhY3RlcnMuCisrIyBUaGUgbXNnaWRzIG11c3QgYmUgQVNDSUkgYW5kIHRoZXJlZm9yZSBjYW5ub3QgY29udGFpbiByZWFsIHF1b3RhdGlvbgorKyMgY2hhcmFjdGVycywgb25seSBzdWJzdGl0dXRlcyBsaWtlIGdyYXZlIGFjY2VudCAoMHg2MCksIGFwb3N0cm9waGUgKDB4MjcpCisrIyBhbmQgZG91YmxlIHF1b3RlICgweDIyKS4gVGhlc2Ugc3Vic3RpdHV0ZXMgbG9vayBzdHJhbmdlOyBzZWUKKysjIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35tZ2syNS91Y3MvcXVvdGVzLmh0bWwKKysjCisrIyBUaGlzIGNhdGFsb2cgdHJhbnNsYXRlcyBncmF2ZSBhY2NlbnQgKDB4NjApIGFuZCBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KS4KKysjIEl0IGFsc28gdHJhbnNsYXRlcyBwYWlycyBvZiBhcG9zdHJvcGhlICgweDI3KSB0bworKyMgbGVmdCBzaW5nbGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxOCkgYW5kIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyayAoVSsyMDE5KQorKyMgYW5kIHBhaXJzIG9mIHF1b3RhdGlvbiBtYXJrICgweDIyKSB0bworKyMgbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmsgKFUrMjAxQykgYW5kIHJpZ2h0IGRvdWJsZSBxdW90YXRpb24gbWFyayAoVSsyMDFEKS4KKysjCisrIyBXaGVuIG91dHB1dCB0byBhbiBVVEYtOCB0ZXJtaW5hbCwgdGhlIHF1b3RhdGlvbiBjaGFyYWN0ZXJzIGFwcGVhciBwZXJmZWN0bHkuCisrIyBXaGVuIG91dHB1dCB0byBhbiBJU08tODg1OS0xIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzIChieSBpY29udiBpbiBnbGliYyAyLjIgb3IgbmV3ZXIpIG9yIHRvCisrIyBncmF2ZS9hY3V0ZSBhY2NlbnQgKGJ5IGxpYmljb252KSwgYW5kIHRoZSBkb3VibGUgcXVvdGF0aW9uIG1hcmtzIGFyZQorKyMgdHJhbnNsaXRlcmF0ZWQgdG8gMHgyMi4KKysjIFdoZW4gb3V0cHV0IHRvIGFuIEFTQ0lJIHRlcm1pbmFsLCB0aGUgc2luZ2xlIHF1b3RhdGlvbiBtYXJrcyBhcmUKKysjIHRyYW5zbGl0ZXJhdGVkIHRvIGFwb3N0cm9waGVzLCBhbmQgdGhlIGRvdWJsZSBxdW90YXRpb24gbWFya3MgYXJlCisrIyB0cmFuc2xpdGVyYXRlZCB0byAweDIyLgorKyMKKy0tLSBscnpzei0wLjEyLjIwLnNhZmUvcG8vaW5zZXJ0LWhlYWRlci5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL2luc2VydC1oZWFkZXIuc2luCTIwMDQtMDktMTIgMTQ6NDA6MzQuNzQzNjg5MTEyIC0wNDAwCitAQCAtMCwwICsxLDIzIEBACisrIyBTZWQgc2NyaXB0IHRoYXQgaW5zZXJ0cyB0aGUgZmlsZSBjYWxsZWQgSEVBREVSIGJlZm9yZSB0aGUgaGVhZGVyIGVudHJ5LgorKyMKKysjIEF0IGVhY2ggb2NjdXJyZW5jZSBvZiBhIGxpbmUgc3RhcnRpbmcgd2l0aCAibXNnaWQgIiwgd2UgZXhlY3V0ZSB0aGUgZm9sbG93aW5nCisrIyBjb21tYW5kcy4gQXQgdGhlIGZpcnN0IG9jY3VycmVuY2UsIGluc2VydCB0aGUgZmlsZS4gQXQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMsIGRvIG5vdGhpbmcuIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZworKyMgb2NjdXJyZW5jZXMgaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXm1zZ2lkIC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL20vbS8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVhZCB0aGUgZmlsZS4KKytyIEhFQURFUgorKyMgT3V0cHV0IHRoZSBmaWxlJ3MgY29udGVudHMgYnkgcmVhZGluZyB0aGUgbmV4dCBsaW5lLiBCdXQgZG9uJ3QgbG9zZSB0aGUKKysjIGN1cnJlbnQgbGluZSB3aGlsZSBkb2luZyB0aGlzLgorK2cKKytOCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9NYWtldmFycwkxOTY5LTEyLTMxIDE5OjAwOjAwLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vTWFrZXZhcnMJMjAwNC0wOS0xMiAxNDo0MDozNC43NDg2ODgzNTIgLTA0MDAKK0BAIC0wLDAgKzEsNDEgQEAKKysjIE1ha2VmaWxlIHZhcmlhYmxlcyBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorKworKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KKytET01BSU4gPSAkKFBBQ0tBR0UpCisrCisrIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCisrc3ViZGlyID0gcG8KKyt0b3BfYnVpbGRkaXIgPSAuLgorKworKyMgVGhlc2Ugb3B0aW9ucyBnZXQgcGFzc2VkIHRvIHhnZXR0ZXh0LgorK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKysKKysjIFRoaXMgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgdGhhdCBnZXRzIGluc2VydGVkIGludG8gdGhlIGhlYWRlciBvZiB0aGUKKysjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisrIyBzb3VyY2VzLCBiZWxvbmcgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIgb2YgdGhlIHBhY2thZ2UuKSAgVHJhbnNsYXRvcnMgYXJlCisrIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKysjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisrIyB0aGUgcHVibGljIGRvbWFpbjsgaW4gdGhpcyBjYXNlIHRoZSB0cmFuc2xhdG9ycyBhcmUgZXhwZWN0ZWQgdG8gZGlzY2xhaW0KKysjIHRoZWlyIGNvcHlyaWdodC4KKytDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisrIyBidWdzIGluIHRoZSB1bnRyYW5zbGF0ZWQgc3RyaW5nczoKKysjIC0gU3RyaW5ncyB3aGljaCBhcmUgbm90IGVudGlyZSBzZW50ZW5jZXMsIHNlZSB0aGUgbWFpbnRhaW5lciBndWlkZWxpbmVzCisrIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisrIyAtIFN0cmluZ3Mgd2hpY2ggdXNlIHVuY2xlYXIgdGVybXMgb3IgcmVxdWlyZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gYmUKKysjICAgdW5kZXJzdG9vZC4KKysjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorKyMgICBtb25leS4KKysjIC0gUGx1cmFsaXNhdGlvbiBwcm9ibGVtcy4KKysjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisrIyAtIEluY29ycmVjdCBmb3JtYXR0aW5nLgorKyMgSXQgY2FuIGJlIHlvdXIgZW1haWwgYWRkcmVzcywgb3IgYSBtYWlsaW5nIGxpc3QgYWRkcmVzcyB3aGVyZSB0cmFuc2xhdG9ycworKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKysjIHdoaWNoIHRoZSB0cmFuc2xhdG9ycyBjYW4gY29udGFjdCB5b3UuCisrTVNHSURfQlVHU19BRERSRVNTID0KKysKKysjIFRoaXMgaXMgdGhlIGxpc3Qgb2YgbG9jYWxlIGNhdGVnb3JpZXMsIGJleW9uZCBMQ19NRVNTQUdFUywgZm9yIHdoaWNoIHRoZQorKyMgbWVzc2FnZSBjYXRhbG9ncyBzaGFsbCBiZSB1c2VkLiAgSXQgaXMgdXN1YWxseSBlbXB0eS4KKytFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3F1b3Quc2VkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9xdW90LnNlZAkyMDA0LTA5LTEyIDE0OjQwOjM0Ljc1NDY4NzQ0MCAtMDQwMAorQEAgLTAsMCArMSw2IEBACisrcy8iXChbXiJdKlwpIi/igJxcMeKAnS9nCisrcy9gXChbXmAnXSpcKScv4oCYXDHigJkvZworK3MvICdcKFteYCddKlwpJyAvIOKAmFwx4oCZIC9nCisrcy8gJ1woW15gJ10qXCknJC8g4oCYXDHigJkvZworK3MvXidcKFteYCddKlwpJyAv4oCYXDHigJkgL2cKKytzL+KAnOKAnS8iIi9nCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMTk2OS0xMi0zMSAxOTowMDowMC4wMDAwMDAwMDAgLTA1MDAKKysrKyBscnpzei0wLjEyLjIwL3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4JMjAwNC0wOS0xMiAxNDo0MDozNC43NjI2ODYyMjQgLTA0MDAKK0BAIC0wLDAgKzEsMTkgQEAKKysjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorKyMgZnJvbSBhIFBPVCBmaWxlLgorKyMKKysjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKysjIHBhdHRlcm4gaXMgYWNoaWV2ZWQgYnkgbG9va2luZyBhdCB0aGUgaG9sZCBzcGFjZS4KKysvXiJQT1QtQ3JlYXRpb24tRGF0ZTogLioiJC97CisreAorKyMgVGVzdCBpZiB0aGUgaG9sZCBzcGFjZSBpcyBlbXB0eS4KKytzL1AvUC8KKyt0YQorKyMgWWVzIGl0IHdhcyBlbXB0eS4gRmlyc3Qgb2NjdXJyZW5jZS4gUmVtb3ZlIHRoZSBsaW5lLgorK2cKKytkCisrYmIKKys6YQorKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCisreAorKzpiCisrfQorLS0tIGxyenN6LTAuMTIuMjAuc2FmZS9wby9SdWxlcy1xdW90CTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCisrKysgbHJ6c3otMC4xMi4yMC9wby9SdWxlcy1xdW90CTIwMDQtMDktMTIgMTQ6NDA6MzQuNzc4NjgzNzkyIC0wNDAwCitAQCAtMCwwICsxLDQ3IEBACisrIyBTcGVjaWFsIE1ha2VmaWxlIHJ1bGVzIGZvciBFbmdsaXNoIG1lc3NhZ2UgY2F0YWxvZ3Mgd2l0aCBxdW90YXRpb24gbWFya3MuCisrCisrRElTVEZJTEVTLmNvbW1vbi5leHRyYTEgPSBxdW90LnNlZCBib2xkcXVvdC5zZWQgZW5AcXVvdC5oZWFkZXIgZW5AYm9sZHF1b3QuaGVhZGVyIGluc2VydC1oZWFkZXIuc2luIFJ1bGVzLXF1b3QKKysKKysuU1VGRklYRVM6IC5pbnNlcnQtaGVhZGVyIC5wby11cGRhdGUtZW4KKysKKytlbkBxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBxdW90LnBvLXVwZGF0ZQorK2VuQGJvbGRxdW90LnBvLWNyZWF0ZToKKysJJChNQUtFKSBlbkBib2xkcXVvdC5wby11cGRhdGUKKysKKytlbkBxdW90LnBvLXVwZGF0ZTogZW5AcXVvdC5wby11cGRhdGUtZW4KKytlbkBib2xkcXVvdC5wby11cGRhdGU6IGVuQGJvbGRxdW90LnBvLXVwZGF0ZS1lbgorKworKy5pbnNlcnQtaGVhZGVyLnBvLXVwZGF0ZS1lbjoKKysJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUtZW4kJC8vJ2A7IFwKKysJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dCI7IHRoZW4gUEFUSD1gcHdkYC8uLi9zcmM6JCRQQVRIOyBHRVRURVhUTElCRElSPWBjZCAkKHRvcF9zcmNkaXIpL3NyYyAmJiBwd2RgOyBleHBvcnQgR0VUVEVYVExJQkRJUjsgZmk7IFwKKysJdG1wZGlyPWBwd2RgOyBcCisrCWVjaG8gIiQkbGFuZzoiOyBcCisrCWxsPWBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy9ALiovLydgOyBcCisrCUxDX0FMTD1DOyBleHBvcnQgTENfQUxMOyBcCisrCWNkICQoc3JjZGlyKTsgXAorKwlpZiAkKE1TR0lOSVQpIC1pICQoRE9NQUlOKS5wb3QgLS1uby10cmFuc2xhdG9yIC1sICQkbGwgLW8gLSAyPi9kZXYvbnVsbCB8IHNlZCAtZiAkJHRtcGRpci8kJGxhbmcuaW5zZXJ0LWhlYWRlciB8ICQoTVNHQ09OVikgLXQgVVRGLTggfCAkKE1TR0ZJTFRFUikgc2VkIC1mIGBlY2hvICQkbGFuZyB8IHNlZCAtZSAncy8uKkAvLydgLnNlZCAyPi9kZXYvbnVsbCA+ICQkdG1wZGlyLyQkbGFuZy5uZXcucG87IHRoZW4gXAorKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorKwkgICAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwkgIGVsc2UgXAorKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorKwkgICAgICA6OyBcCisrCSAgICBlbHNlIFwKKysJICAgICAgZWNobyAiY3JlYXRpb24gb2YgJCRsYW5nLnBvIGZhaWxlZDogY2Fubm90IG1vdmUgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyB0byAkJGxhbmcucG8iIDE+JjI7IFwKKysJICAgICAgZXhpdCAxOyBcCisrCSAgICBmaTsgXAorKwkgIGZpOyBcCisrCWVsc2UgXAorKwkgIGVjaG8gImNyZWF0aW9uIG9mICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisrCSAgcm0gLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbzsgXAorKwlmaQorKworK2VuQHF1b3QuaW5zZXJ0LWhlYWRlcjogaW5zZXJ0LWhlYWRlci5zaW4KKysJc2VkIC1lICcvXiMvZCcgLWUgJ3MvSEVBREVSL2VuQHF1b3QuaGVhZGVyL2cnICQoc3JjZGlyKS9pbnNlcnQtaGVhZGVyLnNpbiA+IGVuQHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK2VuQGJvbGRxdW90Lmluc2VydC1oZWFkZXI6IGluc2VydC1oZWFkZXIuc2luCisrCXNlZCAtZSAnL14jL2QnIC1lICdzL0hFQURFUi9lbkBib2xkcXVvdC5oZWFkZXIvZycgJChzcmNkaXIpL2luc2VydC1oZWFkZXIuc2luID4gZW5AYm9sZHF1b3QuaW5zZXJ0LWhlYWRlcgorKworK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1xdW90CisrbW9zdGx5Y2xlYW4tcXVvdDoKKysJcm0gLWYgKi5pbnNlcnQtaGVhZGVyCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3BvL3N0YW1wLWNhdC1pZAkxOTk4LTEyLTMwIDAyOjUwOjAxLjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvcG8vc3RhbXAtY2F0LWlkCTE5NjktMTItMzEgMTk6MDA6MDAuMDAwMDAwMDAwIC0wNTAwCitAQCAtMSArMCwwIEBACistdGltZXN0YW1wCistLS0gbHJ6c3otMC4xMi4yMC5zYWZlL3NyYy9NYWtlZmlsZS5hbQkxOTk4LTEyLTI4IDAzOjM4OjQ3LjAwMDAwMDAwMCAtMDUwMAorKysrIGxyenN6LTAuMTIuMjAvc3JjL01ha2VmaWxlLmFtCTIwMDQtMDktMTIgMTQ6NDA6NTMuNjY1ODEyNTEyIC0wNDAwCitAQCAtMiwxMiArMiwxMiBAQAorIGxyel9TT1VSQ0VTPWxyei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIGxzel9TT1VSQ0VTPWxzei5jIHRpbWluZy5jIHpwZXJyLmMgenJlYWRsaW5lLmMgY3JjdGFiLmMgcmJzYi5jIHptLmMgcHJvdG5hbWUuYyB0Y3AuYyBsc3lzbG9nLmMgY2FuaXQuYworIG5vaW5zdF9IRUFERVJTID0gdGltaW5nLmggemdsb2JhbC5oIHptb2RlbS5oCistZGF0YWRpciA9ICQocHJlZml4KS9AREFUQURJUk5BTUVACisrZGF0YWRpciA9ICQocHJlZml4KS9zaGFyZQorIGxvY2FsZWRpciA9ICQoZGF0YWRpcikvbG9jYWxlCisgQ0ZMQUdTPUBDRkxBR1NACisgRElTVENMRUFOX0ZJTEVTPWxyenN6YnVnCisgCistTERBREQgPSAuLi9saWIvbGliem1vZGVtLmEgQElOVExMSUJTQAorK0xEQUREID0gLi4vbGliL2xpYnptb2RlbS5hIEBMSUJJTlRMQAorIEFVVE9NQUtFX09QVElPTlM9YW5zaTJrbnIKKyBFWFRSQV9ESVNUID0gYW5zaTJrbnIuMSBhbnNpMmtuci5jIGxyenN6YnVnLmluCisgSU5DTFVERVMgPSAtSS4uIC1JJChzcmNkaXIpIC1JJCh0b3Bfc3JjZGlyKS9zcmMgLUkuLi9pbnRsIC1JJCh0b3Bfc3JjZGlyKS9saWIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3otMC4xMi4yMC9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTQ2ZGZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6LWNoZWNrLWxvY2FsZS5oLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMjhiNDczYzNjOTY2ODJhODIwZTI5MmNjMWJlMDA2ZTE5YWVlMTFiYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IE1heSAyMDEzIDAxOjA3OjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxyenN6IGNoZWNrIGxvY2FsZS5oCisKK2ZpeCB0aGUgYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIC1PMCBpbiBhIGRlYnVnIGJ1aWxkOgorbHJ6LmM6Mjg0OjEzOiBlcnJvcjogJ0xDX0FMTCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFt1d2VAb2hzZS5kZV0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNmUyMDY0Yy4uYzEwNDYwYyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTMwLDcgKzEzMCw3IEBAIEFDX0NIRUNLX0hFQURFUlMoZmNudGwuaCBsaW1pdHMuaCBzeXMvaW9jdGwuaCBzeXMvdGltZS5oIHVuaXN0ZC5oIHN5cy90aW1lcy5oKQorIExSWlNaX0hFQURFUlNfVEVSTV9JTworIEFDX0NIRUNLX0hFQURFUlModGVybWlvcy5oIHN5cy90ZXJtaW9zLmggdGVybWlvLmggc3lzL3Rlcm1pby5oIHNndHR5LmgpCisgQUNfQ0hFQ0tfSEVBREVSUyhzeXMvbW1hbi5oIHV0aW1lLmggc3lzbG9nLmggc3lzL3N5c2xvZy5oIHN5cy9wYXJhbS5oKQorLUFDX0NIRUNLX0hFQURFUlMoc3lzL3NlbGVjdC5oIHN0cmluZ3MuaCBhcnBhL2luZXQuaCkKKytBQ19DSEVDS19IRUFERVJTKHN5cy9zZWxlY3QuaCBzdHJpbmdzLmggbG9jYWxlLmggYXJwYS9pbmV0LmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfVFlQRV9TSVpFX1QKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbHJ6c3pfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDUyOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgY29uZmlndXJlLmluOjk1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisuLi4KK3wgbGliL01ha2VmaWxlLmFtOjM6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgbGliL01ha2VmaWxlLmFtOiBpbnN0YWxsaW5nICcuL2RlcGNvbXAnCit8IHNyYy9NYWtlZmlsZS5hbToxMTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxyenN6LTAuMTIuMjAub3JpZy9jb25maWd1cmUuaW4KKysrKyBscnpzei0wLjEyLjIwL2NvbmZpZ3VyZS5pbgorQEAgLTkyLDcgKzkyLDYgQEAgQUNfUFJPR19SQU5MSUIKKyBBQ19JU0NfUE9TSVgKKyBBQ19BSVgKKyBBQ19NSU5JWAorLUFNX0NfUFJPVE9UWVBFUworIEFDX0NfQ09OU1QKKyBBQ19DX0lOTElORQorIAorSW5kZXg6IGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHJ6c3otMC4xMi4yMC5vcmlnL2xpYi9NYWtlZmlsZS5hbQorKysrIGxyenN6LTAuMTIuMjAvbGliL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDUgQEAKKyBub2luc3RfTElCUkFSSUVTPWxpYnptb2RlbS5hCisgQ0ZMQUdTPUBDRkxBR1NACistQVVUT01BS0VfT1BUSU9OUz1hbnNpMmtucgorIAorIEVYVFJBX0RJU1QgPSBhbGxvY2EuYyBhbnNpMmtuci4xIGFuc2kya25yLmMgXAorIAlnZXRvcHQuYyBnZXRvcHQxLmMgbWtkaXIuYyBta3RpbWUuYyBcCitJbmRleDogbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBscnpzei0wLjEyLjIwLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbHJ6c3otMC4xMi4yMC9zcmMvTWFrZWZpbGUuYW0KK0BAIC04LDcgKzgsNiBAQCBDRkxBR1M9QENGTEFHU0AKKyBESVNUQ0xFQU5fRklMRVM9bHJ6c3pidWcKKyAKKyBMREFERCA9IC4uL2xpYi9saWJ6bW9kZW0uYSBATElCSU5UTEAKKy1BVVRPTUFLRV9PUFRJT05TPWFuc2kya25yCisgRVhUUkFfRElTVCA9IGFuc2kya25yLjEgYW5zaTJrbnIuYyBscnpzemJ1Zy5pbgorIElOQ0xVREVTID0gLUkuLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2Rpcikvc3JjIC1JLi4vaW50bCAtSSQodG9wX3NyY2RpcikvbGliCisgI0RFRlMgPSAtRExPQ0FMRURJUj1cIiQobG9jYWxlZGlyKVwiIC1ET1M9XCJAaG9zdF9vc0BcIiAtRENQVT1cIkBob3N0X2NwdUBcIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9scnpzei9scnpzei0wLjEyLjIwL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZTU5MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6LTAuMTIuMjAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluIGxyenN6LTAuMTIuMjBfcGF0Y2gvc3JjL01ha2VmaWxlLmluCistLS0gbHJ6c3otMC4xMi4yMF9vcmcvc3JjL01ha2VmaWxlLmluCTE5OTgtMTItMzAgMTc6MzE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgbHJ6c3otMC4xMi4yMF9wYXRjaC9zcmMvTWFrZWZpbGUuaW4JMjAwNC0wNC0yOSAxMzo1NzozMy40MzQ5MDk2NTYgKzAyMDAKK0BAIC0zNzIsMTMgKzM3MiwxMyBAQAorIAlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBsc2IgfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCistCXJtIC1mICQoYmluZGlyKS9gZWNobyBsc3ggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisrCXJtIC1mICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKyAJbG4gJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHN6IHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIFwKKyAJCSQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxzeCB8c2VkIC1lICckKHRyYW5zZm9ybSknYCAKKy0Jcm0gLWYgJChiaW5kaXIpL2BlY2hvIGxyYiB8IHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AKKysJcm0gLWYgJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorIAlsbiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnogfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgXAorIAkJJChERVNURElSKS8kKGJpbmRpcikvYGVjaG8gbHJiIHxzZWQgLWUgJyQodHJhbnNmb3JtKSdgIAorLQlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ4IHwgc2VkIC1lICckKHRyYW5zZm9ybSknYAorKwlybSAtZiAkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCisgCWxuICQoREVTVERJUikvJChiaW5kaXIpL2BlY2hvIGxyeiB8c2VkIC1lICckKHRyYW5zZm9ybSknYCBcCisgCQkkKERFU1RESVIpLyQoYmluZGlyKS9gZWNobyBscnggfHNlZCAtZSAnJCh0cmFuc2Zvcm0pJ2AgCisgIwlybSAtZiAkKGJpbmRpcikvYGVjaG8gbHJ6c3pidWcgfCBzZWQgLWUgJyQodHJhbnNmb3JtKSdgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6XzAuMTIuMjAuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL2xyenN6L2xyenN6XzAuMTIuMjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBjZTU3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvbHJ6c3ovbHJ6c3pfMC4xMi4yMC5iYgpAQCAtMCwwICsxLDQ2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB6bW9kZW0veG1vZGVtL3ltb2RlbSBmaWxlIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiTHJ6c3ogaXMgYSBjb3NtZXRpY2FsbHkgbW9kaWZpZWQgem1vZGVtL3ltb2RlbS94bW9kZW0gcGFja2FnZSBidWlsdCBmcm9tIFwKK3RoZSBwdWJsaWMtZG9tYWluIHZlcnNpb24gb2YgQ2h1Y2sgRm9yc2JlcmcncyByenN6IHBhY2thZ2UuIFwKK1RoZXNlIHByb2dyYW1zIHVzZSBlcnJvciBjb3JyZWN0aW5nIHByb3RvY29scyAoe3oseCx5fW1vZGVtKSB0byBzZW5kIChzeiwgc3gsIHNiKSBhbmQgXAorcmVjZWl2ZSAocnosIHJ4LCByYikgZmlsZXMgb3ZlciBhIGRpYWwtaW4gc2VyaWFsIHBvcnQgZnJvbSBhIHZhcmlldHkgb2YgcHJvZ3JhbXMgXAorcnVubmluZyB1bmRlciB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zLiAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9oc2UuZGUvdXdlL3NvZnR3YXJlL2xyenN6Lmh0bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly9zcmMvbHJ6LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9NTI3Njk1NjM3M2ZmN2Q4NzU4ODM3ZjYzOTlhMTA0NWYiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiIgorUFIgPSAicjYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vaHNlLmRlL3V3ZS9yZWxlYXNlcy9scnpzei0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9hdXRvdG9vbHMucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisJICAgZmlsZTovL2dldHRleHQucGF0Y2ggXAorCSAgIGZpbGU6Ly9hY2RlZmluZS5wYXRjaCBcCisJICAgZmlsZTovL2xyenN6X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9scnpzei1jaGVjay1sb2NhbGUuaC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImI1Y2U2YTc0YWJjOWI5ZWIyYWY5NGRmZmRmZDM3MmE0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMyOGIzNmIxNGJkZGIwMTRkOWU5Yzk3YzUyNDU5ODUyZjk3YmQ0MDVmODkxMTNmMzBiZWU0NWVkOTI3MjhmZjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IHNyYy9scnogc3JjL2xzeiAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJyeiByeCByYiBzeiBzeCBzYiIKKworQUxURVJOQVRJVkVfVEFSR0VUW3J6XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3J4XSA9ICIke2JpbmRpcn0vbHJ6IgorQUxURVJOQVRJVkVfVEFSR0VUW3JiXSA9ICIke2JpbmRpcn0vbHJ6IgorCitBTFRFUk5BVElWRV9UQVJHRVRbc3pdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc3hdID0gIiR7YmluZGlyfS9sc3oiCitBTFRFUk5BVElWRV9UQVJHRVRbc2JdID0gIiR7YmluZGlyfS9sc3oiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YzlmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKy0tLQorCis3LzMwLzIwMTAgLSByZWJhc2VkIHRvIDMuMS41IGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorMS8yMi8yMDEyIC0gcmViYXNlZCB0byAzLjEuOSBieSBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciBhZjJiMTBjYzNjMTQgTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvTWFrZWZpbGUJU3VuIEphbiAyMiAxODozODo1NCAyMDEyICswODAwCitAQCAtMzcsNyArMzcsNiBAQAorICMgQ29tbWFuZHMKKyBJTlNUQUxMPWluc3RhbGwKKyBESVJJTlNUQUxMPWluc3RhbGwgLWQKKy1TVFJJUD0tcworIENDPSQoQ1JPU1NfQ09NUElMRSlnY2MKKyBBUj0kKENST1NTX0NPTVBJTEUpYXIKKyBSQU5MSUI9JChDUk9TU19DT01QSUxFKXJhbmxpYgorQEAgLTg2LDcgKzg1LDcgQEAKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExETElCUykgLW8gJEAKKysJJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisgCisgJS44ICUuNzogJS5tYW4KKyAJTT1gZWNobyAkKERBVEUpIHwgc2VkICdzLy0wMS0vLUphbnVhcnktLztzLy0wMi0vLUZlYnJ1YXJ5LS87cy8tMDMtLy1NYXJjaC0vO3MvLTA0LS8tQXByaWwtLztzLy0wNS0vLU1heS0vO3MvLTA2LS8tSnVuZS0vO3MvLTA3LS8tSnVseS0vO3MvLTA4LS8tQXVndXN0LS87cy8tMDktLy1TZXB0ZW1iZXItLztzLy0xMC0vLU9jdG9iZXItLztzLy0xMS0vLU5vdmVtYmVyLS87cy8tMTItLy1EZWNlbWJlci0vO3MvXCguKlwpLVwoLipcKS1cKC4qXCkvXDMgXDIgXDEvJ2AgOyBzZWQgPCQ8ID4kQCAicy9AVE9EQVlALyQkTS87cy9AVkVSU0lPTkAvcGNpdXRpbHMtJChWRVJTSU9OKS87cyNASURTRElSQCMkKElEU0RJUikjIgorQEAgLTEwMSw3ICsxMDAsNyBAQAorIGluc3RhbGw6IGFsbAorICMgLWMgaXMgaWdub3JlZCBvbiBMaW51eCwgYnV0IHJlcXVpcmVkIG9uIEZyZWVCU0QKKyAJJChESVJJTlNUQUxMKSAtbSA3NTUgJChERVNURElSKSQoU0JJTkRJUikgJChERVNURElSKSQoSURTRElSKSAkKERFU1RESVIpJChNQU5ESVIpL21hbjggJChERVNURElSKSQoTUFORElSKS9tYW43CistCSQoSU5TVEFMTCkgLWMgLW0gNzU1ICQoU1RSSVApIGxzcGNpIHNldHBjaSAkKERFU1RESVIpJChTQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSBsc3BjaSBzZXRwY2kgJChERVNURElSKSQoU0JJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA3NTUgdXBkYXRlLXBjaWlkcyAkKERFU1RESVIpJChTQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCAkKFBDSV9JRFMpICQoREVTVERJUikkKElEU0RJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA2NDQgbHNwY2kuOCBzZXRwY2kuOCB1cGRhdGUtcGNpaWRzLjggJChERVNURElSKSQoTUFORElSKS9tYW44CitkaWZmIC1yIGFmMmIxMGNjM2MxNCBsaWIvY29uZmlndXJlCistLS0gYS9saWIvY29uZmlndXJlCVN1biBKYW4gMjIgMTg6MzY6MzQgMjAxMiArMDgwMAorKysrIGIvbGliL2NvbmZpZ3VyZQlTdW4gSmFuIDIyIDE4OjM4OjU0IDIwMTIgKzA4MDAKK0BAIC0xNCw2ICsxNCwxMCBAQAorIAlmaQorIH0KKyAKKytWRVJTSU9OPSQxCisrSURTRElSPSQyCisrRE5TPXllcworKworIGlmIFsgLXogIiRWRVJTSU9OIiAtbyAteiAiJElEU0RJUiIgXSA7IHRoZW4KKyAJZWNobyA+JjIgIlBsZWFzZSBydW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZnJvbSB0aGUgdG9wLWxldmVsIE1ha2VmaWxlIgorIAlleGl0IDEKK0BAIC0yMSw4ICsyNSw4IEBACisgCisgZWNob19uICJDb25maWd1cmluZyBsaWJwY2kgZm9yIHlvdXIgc3lzdGVtLi4uIgorIGlmIFsgLXogIiRIT1NUIiBdIDsgdGhlbgorLQlzeXM9YHVuYW1lIC1zYAorLQlyZWw9YHVuYW1lIC1yYAorKwlzeXM9JHszOi1gdW5hbWUgLXNgfQorKwlyZWw9CisgCXJlYWxzeXM9IiRzeXMiCisgCWlmIFsgIiRzeXMiID0gIkFJWCIgLWEgLXggL3Vzci9iaW4vb3NsZXZlbCAtYSAteCAvdXNyL3NiaW4vbHNhdHRyIF0KKyAJdGhlbgorQEAgLTMwLDcgKzM0LDcgQEAKKyAJCXByb2M9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIC1GIG5hbWUgfCBoZWFkIC0xYAorIAkJY3B1PWAvdXNyL3NiaW4vbHNhdHRyIC1GIHZhbHVlIC1sICRwcm9jIC1hIHR5cGUgfCBzZWQgJ3MvXy4qLy8nYAorIAllbHNlCistCQljcHU9YHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYAorKwkJY3B1PSR7NDotYHVuYW1lIC1tIHwgc2VkICdzL15pLjg2JC9pMzg2LztzL15zdW40dSQvc3BhcmM2NC87cy9eaTg2cGMkL2kzODYvO3MvXkJlUEMkL2kzODYvO3MvXkJlTWFjJC9wb3dlcnBjLztzL15CZUJveCQvcG93ZXJwYy8nYH0KKyAJZmkKKyAJaWYgWyAiJHN5cyIgPSAiR05VL2tGcmVlQlNEIiAtbyAiJHN5cyIgPSAiRHJhZ29uRmx5IiBdCisgCXRoZW4KK0BAIC00MCw3ICs0NCw3IEBACisgCXRoZW4KKyAJCXN5cz1jeWd3aW4KKyAJZmkKKy0JSE9TVD0kezM6LSRjcHUtJHN5c30KKysJSE9TVD0kY3B1LSRzeXMKKyBmaQorIFsgLW4gIiRSRUxFQVNFIiBdICYmIHJlbD0iJHtSRUxFQVNFfSIKKyAjIENBVkVBVDogdHIgb24gU29sYXJpcyBpcyBhIGJpdCB3ZWlyZCBhbmQgdGhlIGV4dHJhIFtdIGlzIG90aGVyd2lzZSBoYXJtbGVzcy4KK0BAIC00OSw2ICs1MywyMSBAQAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorK2lmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorK3RoZW4KKysJc3lzPWxpbnV4CisrZmkKKysKKytpZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKyt0aGVuCisrCXN5cz1saW51eAorK2ZpCisrCisgYz1jb25maWcuaAorIG09Y29uZmlnLm1rCisgZWNobyA+JGMgJyNkZWZpbmUgUENJX0NPTkZJR19IJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzL2d1ZXNzLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBiNGEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9ndWVzcy1maXgucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAordGhlIG9yaWdpbmFsIGd1ZXNzIGFsZ29yaXRobSBpcyBicm9rZW4gZm9yIG1hbnkgYXJjaHMKK2ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byB3b3VsZCBicmVhazoKKwlhcm0tbGludXgtZ251ZWFiaSAgLS0+IHN5cz1nbnVlYWJpCisJeDg2XzY0LXVua25vd24tcGMtbGludXgtZ251ICAtLT4gc3lzID0gcGMtbGludXgtZ251CisKK3VzZSBhIHNpbXBsZXIgc2NoZW1lIGhlcmUgYW5kIGhvcGUgaXQgd29ya3MgZm9yIGFsbCB0aGUgY2FzZXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzcvMzAvMjAxMCAtIGNyZWF0ZWQgYnkgUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWIvY29uZmlndXJlIGIvbGliL2NvbmZpZ3VyZQoraW5kZXggNDMxOGIwNS4uODRmNmFjYiAxMDA3NTUKKy0tLSBhL2xpYi9jb25maWd1cmUKKysrKyBiL2xpYi9jb25maWd1cmUKK0BAIC01MywyMCArNTMsNyBAQCBjcHU9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAorIHN5cz1gZWNobyAkaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisgZWNobyAiICRob3N0ICRyZWwgJGNwdSAkc3lzIgorIAorLWlmIFsgIiRob3N0IiA9ICJsaW51eC0tZ251ZWFiaSIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliYyIgXQorLXRoZW4KKy0Jc3lzPWxpbnV4CistZmkKKy0KKy1pZiBbICIkaG9zdCIgPSAibGludXgtLXVjbGliY2VhYmkiIF0KKy10aGVuCistCXN5cz1saW51eAorLWZpCisreyBlY2hvICIkaG9zdCIgfCBncmVwIGxpbnV4OyB9ICYmIHN5cz1saW51eAorIAorIGM9Y29uZmlnLmgKKyBtPWNvbmZpZy5tawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlscy9tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmYmM2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcGNpdXRpbHMvcGNpdXRpbHMvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBJb251dCBSYWR1IDxpb251dHgucmFkdUBpbnRlbC5jb20+CisKK0luZGV4OiBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBjaXV0aWxzLTMuMi4wLm9yaWcvTWFrZWZpbGUKKysrKyBwY2l1dGlscy0zLjIuMC9NYWtlZmlsZQorQEAgLTM1LDcgKzM1LDcgQEAgU0hBUkVESVI9JChQUkVGSVgpL3NoYXJlCisgSURTRElSPSQoU0hBUkVESVIpCisgTUFORElSOj0kKHNoZWxsIGlmIFsgLWQgJChQUkVGSVgpL3NoYXJlL21hbiBdIDsgdGhlbiBlY2hvICQoUFJFRklYKS9zaGFyZS9tYW4gOyBlbHNlIGVjaG8gJChQUkVGSVgpL21hbiA7IGZpKQorIElOQ0RJUj0kKFBSRUZJWCkvaW5jbHVkZQorLUxJQkRJUj0kKFBSRUZJWCkvbGliCisrTElCRElSPSQobGliZGlyKQorIFBLR0NGRElSPSQoTElCRElSKS9wa2djb25maWcKKyAKKyAjIENvbW1hbmRzCitAQCAtOTQsNyArOTQsNyBAQCBleGFtcGxlOiBleGFtcGxlLm8gbGliLyQoUENJTElCX0RFVikKKyBleGFtcGxlLm86IGV4YW1wbGUuYyAkKFBDSUlOQykKKyAKKyAlOiAlLm8KKy0JJChDQykgJChMREZMQUdTKSAkKFRBUkdFVF9BUkNIKSAkXiAkKExJQl9MRExJQlMpIC1vICRACisrCSQoQ0MpICQoTERGTEFHUykgJChUQVJHRVRfQVJDSCkgJF4gJChMSUJfTERMSUJTKSAkKExETElCUykgLW8gJEAKKyAKKyAlLjggJS43OiAlLm1hbgorIAlNPWBlY2hvICQoREFURSkgfCBzZWQgJ3MvLTAxLS8tSmFudWFyeS0vO3MvLTAyLS8tRmVicnVhcnktLztzLy0wMy0vLU1hcmNoLS87cy8tMDQtLy1BcHJpbC0vO3MvLTA1LS8tTWF5LS87cy8tMDYtLy1KdW5lLS87cy8tMDctLy1KdWx5LS87cy8tMDgtLy1BdWd1c3QtLztzLy0wOS0vLVNlcHRlbWJlci0vO3MvLTEwLS8tT2N0b2Jlci0vO3MvLTExLS8tTm92ZW1iZXItLztzLy0xMi0vLURlY2VtYmVyLS87cy9cKC4qXCktXCguKlwpLVwoLipcKS9cMyBcMiBcMS8nYCA7IHNlZCA8JDwgPiRAICJzL0BUT0RBWUAvJCRNLztzL0BWRVJTSU9OQC9wY2l1dGlscy0kKFZFUlNJT04pLztzI0BJRFNESVJAIyQoSURTRElSKSMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjaXV0aWxzL3BjaXV0aWxzXzMuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWE4Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY2l1dGlscy9wY2l1dGlsc18zLjMuMS5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIlBDSSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICdUaGUgUENJIFV0aWxpdGllcyBwYWNrYWdlIGNvbnRhaW5zIGEgbGlicmFyeSBmb3IgcG9ydGFibGUgYWNjZXNzIFwKK3RvIFBDSSBidXMgY29uZmlndXJhdGlvbiBzcGFjZSBhbmQgc2V2ZXJhbCB1dGlsaXRpZXMgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LicKK0hPTUVQQUdFID0gImh0dHA6Ly9hdHJleS5rYXJsaW4ubWZmLmN1bmkuY3ovfm1qL3BjaXV0aWxzLnNodG1sIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorREVQRU5EUyA9ICJ6bGliIGttb2QiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS91dGlscy9wY2l1dGlscy9wY2l1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2d1ZXNzLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjRjMzQwYTMxNzk4N2Q2MWExMWVlMmNmMTM5ZWYxMTkxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNGEzYmRiNzdlNGNkYmU5ZTk3MGUxODg1YWY0NmUwYmEyMDExYmY5NzM2NDM2OGM0NTVhZGUwZWRkNGUzYTkiCisKK2luaGVyaXQgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAnaHdkYicsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2h3ZGJdID0gIkhXREI9eWVzLEhXREI9bm8sdWRldiIKKworUENJX0NPTkZfRkxBRyA9ICJaTElCPXllcyBETlM9eWVzIFNIQVJFRD15ZXMiCisKKyMgc2VlIGNvbmZpZ3VyZS5wYXRjaAorZG9fY29uZmlndXJlICgpIHsKKwkoCisJICBjZCBsaWIgJiYgXAorCSAgIyBFWFRSQV9PRUNPTkYgZm9yIHRoaXMgcmVjaXBlIGNvdWxkIG9ubHkgcG9zc2libHkgY29udGFpbiAnSFdEQj15ZXMvbm8nLCBzbyB3ZSBwdXQgaXQKKwkgICMgYmVmb3JlIC4vY29uZmlndXJlCisJICAke1BDSV9DT05GX0ZMQUd9ICR7RVhUUkFfT0VDT05GfSAuL2NvbmZpZ3VyZSAke1BWfSAke2RhdGFkaXJ9ICR7VEFSR0VUX09TfSAke1RBUkdFVF9BUkNIfQorCSkKK30KKworZXhwb3J0IFBSRUZJWCA9ICIke3ByZWZpeH0iCitleHBvcnQgU0JJTkRJUiA9ICIke3NiaW5kaXJ9IgorZXhwb3J0IFNIQVJFRElSID0gIiR7ZGF0YWRpcn0iCitleHBvcnQgTUFORElSID0gIiR7bWFuZGlyfSIKKworRVhUUkFfT0VNQUtFICs9ICIke1BDSV9DT05GX0ZMQUd9IgorCisjIFRoZSBjb25maWd1cmUgc2NyaXB0IGJyZWFrcyBpZiB0aGUgSE9TVCB2YXJpYWJsZSBpcyBzZXQKK0hPU1RbdW5leHBvcnRdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0ke0R9IGluc3RhbGwgaW5zdGFsbC1saWIKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWxuIC1zIC4uL3NiaW4vbHNwY2kgJHtEfSR7YmluZGlyfS9sc3BjaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHBjaS9jb25maWcuaAorfQorCitQQUNLQUdFUyA9KyAiJHtQTn0taWRzIGxpYnBjaSIKK0ZJTEVTXyR7UE59LWlkcyA9ICIke2RhdGFkaXJ9L3BjaS5pZHMqIgorRklMRVNfbGlicGNpID0gIiR7bGliZGlyfS9saWJwY2kuc28uKiIKK1NVTU1BUllfJHtQTn0taWRzID0gIlBDSSB1dGlsaXRpZXMgLSBkZXZpY2UgSUQgZGF0YWJhc2UiCitERVNDUklQVElPTl8ke1BOfS1pZHMgPSAiUGFja2FnZSBwcm92aWRpbmcgdGhlIFBDSSBkZXZpY2UgSUQgZGF0YWJhc2UgZm9yIHBjaXV0aWxzLiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1pZHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC8wMDAxLWZpeC1hLXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjAxMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDVhNzkzYTFhOWZiMzQ3NzcxOWFhYmY3ZTI3ZmYyMmVkMWFjZGY1NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE5IE1heSAyMDE1IDE1OjU0OjI0ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBhIHBhcmFsbGVsIGJ1aWxkaW5nIGlzc3VlCisKK0ZpeGVkOgorfCAgIHNyYy9sZXhfY29uZmlnLmM6MzQ6MjU6IGZhdGFsIGVycm9yOiB5YWNjX2NvbmZpZy5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8Cit8ICAgICNpbmNsdWRlICJ5YWNjX2NvbmZpZy5oIgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCit8ICAgY29tcGlsYXRpb24gdGVybWluYXRlZC4KKworQW5kOgorQ29tcGlsaW5nIGxleF9jb25maWcuYy4KKyAgc3JjL2xleF9jb25maWcubDozNDoyNTogZmF0YWwgZXJyb3I6IHlhY2NfY29uZmlnLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3RoZXJlIGFyZSB0d28gTWFrZWZpbGUgcnVsZXMgdG8gZ2VuZXJhdGUgbGV4X2NvbmZpZy5vLCBvbmUgaXMgdG8gZ2VuZXJhdGUKK2xleF9jb25maWcubyBvdGhlciBpcyB0byBnZW5lcmF0ZSBzcmMvbGV4X2NvbmZpZy5vLCBzbyB3ZSBjYW4gcmVtb3ZlIG9uZS4KK2FuZCBhZGQgdGhlIG5lZWRlZCBkZXBlbmRlbmNlIGZvciBsZXhfY29uZmlnLm8KKworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZSB8IDMgKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDQ1ZmRjMy4uNGM1M2JjMiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTI0Niw4ICsyNDYsNyBAQCAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCk6ICQoTElCQykgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZworIAkkKFFVSUVUKSAkKExEKSAkKExERkxBR1MpIC1vICRAICQoQ1JUMCkgc3JjL3N0YXJ0dXAubyBzcmMveWFjY19jb25maWcubyBzcmMvbGV4X2NvbmZpZy5vICQoTElCX09CSlMpICQoQVJDSF9MSUJfT0JKUykKKyAJJChRVUlFVCkgJChTVFJJUENNRCkgJEAKKyAKKy15YWNjX2NvbmZpZy5vIGxleF9jb25maWcubzogJS5vOiAlLmMKKy0JJChDQykgLWMgLU1EIC1PIC1waXBlICQoQ1BQRkxBR1MpICQ8Cisrc3JjL2xleF9jb25maWcubzpzcmMveWFjY19jb25maWcuaAorIAorIGRlYnVndG9vbHM6IGNjZHYgJChDQkRVTVApICQoQ0lTRFVNUCkKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvbWFrZWZpbGVfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlscy0wMTgvbWFrZWZpbGVfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMGNlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLTAxOC9tYWtlZmlsZV9maXgucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSGFyZGNvZGVkIHBhdGhzIGFyZSBiYWQuLi4KK1RoaXMgbGV0cyB1cyB1c2UgdGhlIGluc3RhbGwgZnJvbSBPRSdzIG5hdGl2ZSBzeXNyb290CityZWJhc2UgdGhlIHBhdGNoIHRvIDAxOCwgcmVtb3ZpbmcgaGFyZGNvZGVkIHBhdGggZm9yIHRydWUKK2FzIHdlbGwuIFJlbW92aW5nIG9mIC1EIGluIGluc3RhbGwgaW52b2NhdGlvbiBpcyBhIGxpdHRsZQorcXVlc3Rpb25hYmxlLCBpcyBpdCBzb21lIEdOVSBleHRlbnRpb24/CisKKy1LaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGNtY2lhdXRpbHMtMDE4L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGNtY2lhdXRpbHMtMDE4Lm9yaWcvTWFrZWZpbGUKKysrKyBwY21jaWF1dGlscy0wMTgvTWFrZWZpbGUKK0BAIC03Niw3ICs3Niw3IEBAIHNiaW5kaXIgPQkke2V4ZWNfcHJlZml4fS9zYmluCisgbWFuZGlyID0JJHtwcmVmaXh9L3Vzci9zaGFyZS9tYW4KKyB1ZGV2ZGlyID0JJHtwcmVmaXh9L2xpYi91ZGV2CisgCistSU5TVEFMTCA9IC91c3IvYmluL2luc3RhbGwgLWMKKytJTlNUQUxMID0gaW5zdGFsbCAtYworIElOU1RBTExfUFJPR1JBTSA9ICR7SU5TVEFMTH0KKyBJTlNUQUxMX0RBVEEgID0gJHtJTlNUQUxMfSAtbSA2NDQKKyBJTlNUQUxMX1NDUklQVCA9ICR7SU5TVEFMTF9QUk9HUkFNfQorQEAgLTE4MCw3ICsxODAsNyBAQCBlbmRpZgorICMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKKyBpZmVxICgkKHN0cmlwICQoREVCVUcpKSx0cnVlKQorIAlDRkxBR1MgICs9IC1PMSAtZyAtRERFQlVHIC1EX0dOVV9TT1VSQ0UKKy0JU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKKysJU1RSSVBDTUQgPSB0cnVlIC1TaW5jZV93ZV9hcmVfZGVidWdnaW5nCisgZWxzZQorIAlDRkxBR1MgICs9ICQoT1BUSU1JWkFUSU9OKSAtZm9taXQtZnJhbWUtcG9pbnRlciAtRF9HTlVfU09VUkNFCisgCVNUUklQQ01EID0gJChTVFJJUCkgLXMgLS1yZW1vdmUtc2VjdGlvbj0ubm90ZSAtLXJlbW92ZS1zZWN0aW9uPS5jb21tZW50CitAQCAtMjczLDMwICsyNzMsMzIgQEAgY2xlYW46CisgCisgaW5zdGFsbC1ob3RwbHVnOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKGhvdHBsdWdkaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYS5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhLnJjICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYS5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLmFnZW50CisrCSQoSU5TVEFMTF9QUk9HUkFNKSBob3RwbHVnL3BjbWNpYS5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEucmMKKyAKKyB1bmluc3RhbGwtaG90cGx1ZzoKKyAJLSBybSAtZiAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWEuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhLnJjCisgCisgaW5zdGFsbC1zb2NrZXQtaG90cGx1ZzoKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5hZ2VudCAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LmFnZW50CistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCBob3RwbHVnL3BjbWNpYV9zb2NrZXQucmMgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworKwkkKElOU1RBTExfUFJPR1JBTSkgaG90cGx1Zy9wY21jaWFfc29ja2V0LmFnZW50ICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQKKysJJChJTlNUQUxMX1BST0dSQU0pIGhvdHBsdWcvcGNtY2lhX3NvY2tldC5yYyAkKERFU1RESVIpJChob3RwbHVnZGlyKS9wY21jaWFfc29ja2V0LnJjCisgCisgdW5pbnN0YWxsLXNvY2tldC1ob3RwbHVnOgorIAktIHJtIC1mICQoREVTVERJUikkKGhvdHBsdWdkaXIpL3BjbWNpYV9zb2NrZXQuYWdlbnQgJChERVNURElSKSQoaG90cGx1Z2RpcikvcGNtY2lhX3NvY2tldC5yYworIAorIGluc3RhbGwtc29ja2V0LXRvb2xzOgorLQkkKElOU1RBTExfUFJPR1JBTSkgLUQgJChQQ01DSUFfU09DS0VUX1NUQVJUVVApICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX1NPQ0tFVF9TVEFSVFVQKQorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkgJChERVNURElSKSQodWRldmhlbHBlcmRpcikvJChQQ01DSUFfU09DS0VUX1NUQVJUVVApCisgCisgdW5pbnN0YWxsLXNvY2tldC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9TT0NLRVRfU1RBUlRVUCkKKyAKKyBpbnN0YWxsLXRvb2xzOgorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHNiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSAtRCAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChQQ0NBUkRDVEwpCisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQodWRldmhlbHBlcmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pICQoUENDQVJEQ1RMKSAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKKyAJJChTWU1MSU5LKSAkKFBDQ0FSRENUTCkgJChERVNURElSKSQoc2JpbmRpcikvJChMU1BDTUNJQSkKKy0JJChJTlNUQUxMX1BST0dSQU0pIC1EICQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpICQoREVTVERJUikkKHVkZXZoZWxwZXJkaXIpLyQoUENNQ0lBX0NIRUNLX0JST0tFTl9DSVMpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKSAkKERFU1RESVIpJCh1ZGV2aGVscGVyZGlyKS8kKFBDTUNJQV9DSEVDS19CUk9LRU5fQ0lTKQorIAorIHVuaW5zdGFsbC10b29sczoKKyAJLSBybSAtZiAkKERFU1RESVIpJChzYmluZGlyKS8kKFBDQ0FSRENUTCkKK0BAIC0zMDUsMjIgKzMwNywyNCBAQCB1bmluc3RhbGwtdG9vbHM6CisgCisgaW5zdGFsbC1jb25maWc6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGNtY2lhY29uZmRpcikKKy0JJChJTlNUQUxMX0RBVEEpICAtRCBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKysJJChJTlNUQUxMX0RBVEEpICBjb25maWcvY29uZmlnLm9wdHMgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAJaWYgWyAtZiBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSBdOyB0aGVuIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAtRCBjb25maWcvY29uZmlnLm9wdHMuJChBUkNIKSAkKERFU1RESVIpJChwY21jaWFjb25mZGlyKS9jb25maWcub3B0czsgXAorKwkJJChJTlNUQUxMX0RBVEEpIGNvbmZpZy9jb25maWcub3B0cy4kKEFSQ0gpICQoREVTVERJUikkKHBjbWNpYWNvbmZkaXIpL2NvbmZpZy5vcHRzOyBcCisgCWZpCisgCisgdW5pbnN0YWxsLWNvbmZpZzoKKyAjCS0gcm0gLWYgJChERVNURElSKSQocGNtY2lhY29uZmRpcikvY29uZmlnLm9wdHMKKyAKKyBpbnN0YWxsLXVkZXY6CistCSQoSU5TVEFMTF9EQVRBKSAtRCAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKysJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpCisrCSQoSU5TVEFMTF9EQVRBKSAkKFVERVZfUlVMRVNfRklMRSkgJChERVNURElSKSQodWRldnJ1bGVzZGlyKS82MC1wY21jaWEucnVsZXMKKyAKKyB1bmluc3RhbGwtdWRldjoKKyAJLSBybSAtZiAkKERFU1RESVIpJCh1ZGV2cnVsZXNkaXIpLzYwLXBjbWNpYS5ydWxlcworIAorIGluc3RhbGwtbWFuOgorLQkkKElOU1RBTExfREFUQSkgLUQgbWFuL21hbjgvcGNjYXJkY3RsLjggJChERVNURElSKSQobWFuZGlyKS9tYW44L3BjY2FyZGN0bC44CisrCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQobWFuZGlyKS9tYW44CisrCSQoSU5TVEFMTF9EQVRBKSBtYW4vbWFuOC9wY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcGNjYXJkY3RsLjgKKyAJJChTWU1MSU5LKSBwY2NhcmRjdGwuOCAkKERFU1RESVIpJChtYW5kaXIpL21hbjgvbHNwY21jaWEuOAorIAorIHVuaW5zdGFsbC1tYW46CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1ic3AvcGNtY2lhdXRpbHMvcGNtY2lhdXRpbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWM1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzLmluYwpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCB1c2VybGFuZCB1dGlsaXRpZXMgZm9yIHRoZSBQQ01DSUEgc3Vic3lzdGVtIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8iCitTRUNUSU9OID0gImtlcm5lbC91c2VybGFuZCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gInVkZXYgc3lzZnN1dGlscyBmbGV4LW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gInVkZXYgbW9kdWxlLWluaXQtdG9vbHMiCisKK1NSQ19VUkkgPSAiaHR0cDovL21pcnJvci5saW51eC5vcmcuYXUvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8ke0JQfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vcGNtY2lhdXRpbHMtJHtQVn0iCisKK2V4cG9ydCBIT1NUQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgZXRjZGlyID0gIiR7c3lzY29uZmRpcn0iCitleHBvcnQgc2JpbmRpciA9ICIke2Jhc2Vfc2JpbmRpcn0iCitleHBvcnQgcGNtY2lhY29uZmRpciA9ICIke3N5c2NvbmZkaXJ9L3BjbWNpYSIKK2V4cG9ydCB1ZGV2ZGlyID0gImBwa2ctY29uZmlnIC0tdmFyaWFibGU9dWRldmRpciB1ZGV2YCIKK2V4cG9ydCB1ZGV2cnVsZXNkaXIgPSAiYHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQiCitleHBvcnQgVURFViA9ICIxIgorTEQgPSAiJHtDQ30iCitDRkxBR1MgPSsgIi1JJHtTfS9zcmMiCitDRkxBR1MgPSsgIi1EUENNQ0lBVVRJTFNfVkVSU0lPTj1cXCIke1BWfVxcIiIKKworRVhUUkFfT0VNQUtFID0gIi1lICdTVFJJUD1lY2hvJyAnTElCX09CSlM9LWxjIC1sc3lzZnMnICdMRVg9ZmxleCciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorfQorCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vcGNtY2lhL2NvbmZpZy5vcHRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3BjbWNpYXV0aWxzL3BjbWNpYXV0aWxzXzAxOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTdiZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wY21jaWF1dGlscy9wY21jaWF1dGlsc18wMTguYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBwY21jaWF1dGlscy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL21ha2VmaWxlX2ZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtYS1wYXJhbGxlbC1idWlsZGluZy1pc3N1ZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZDg1NjY5YjM0NDBiYWE0NTMyMzYzZGE2Y2FhZjFiNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OWU2YWU0NDEyNzhlMTc4YzA3NTAxZDQ5MjM5NGVkMmMwMzI2ZmRiNjY4OTRmNmQwNDBlYzgxMWIwZGM4ZWQ1IgorCitQUiA9ICJyMSIKKworRklMRVNfJHtQTn0tZGJnICs9ICIqL3VkZXYvLmRlYnVnICovKi91ZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ICs9ICIqL3VkZXYgKi8qL3VkZXYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BtLXV0aWxzL3BtLXV0aWxzXzEuNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9wbS11dGlscy9wbS11dGlsc18xLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDM1MTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wbS11dGlscy9wbS11dGlsc18xLjQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitTRUNUSU9OID0gImJhc2UiCitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgc2NyaXB0cyBmb3IgcG93ZXIgbWFuYWdlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBzaGVsbCBjb21tYW5kIGxpbmUgdG9vbHMgdG8gc3VzcGVuZCBhbmQgaGliZXJuYXRlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wbS11dGlscy5mcmVlZGVza3RvcC5vcmcvd2lraS8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3BtLXBtdS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PTNjMWRkYmM1NGU3MzVmYjRhMDM4NmUxNGM3OGEzMTQ3IgorCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vcG0tdXRpbHMuZnJlZWRlc2t0b3Aub3JnL3JlbGVhc2VzL3BtLXV0aWxzLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjE3NDJhNTU2MDg5YzM2YzNhODllYjFiOTU3ZGE1YTYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlZDg5OTAzMjg2NmQ4OGIyOTMzYTFkMzRjYzc1ZThhZTQyZGNkZTIwZTFjYzIxODM2YmFhYWUzZDQzNzBjMGIiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scworCitSREVQRU5EU18ke1BOfSA9ICJncmVwIGJhc2giCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307IGF1dG9yZWNvbmYgLWYgLWkgLXMgKQorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59L2Jpbi8uZGVidWcgXAorCQkgICAgJHtkYXRhZGlyfS9kb2MvcG0tdXRpbHMvUkVBRE1FLmRlYnVnZ2luZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL0NPUFlJTkcgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjUyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9DT1BZSU5HCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBpcyBhIGJsYW5rIENPUFlJTkcgZmlsZSwgYW5kIHNob3VsZCBiZSBmaWxsZWQgaW4gYnkgb3JpZ2luYWwgYXV0aG9yIGluIGZ1dHVyZS4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3BvaW50ZXJjYWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm0vcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybS9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVhcm12Ni9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjYvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACis4MzEzIDQgLTg1MjYgNyA4MzM0IC04MjYwNCA2NTUzNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11YXJtdjcvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQ4NGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdWFybXY3L3BvaW50ZXJjYWwKQEAgLTAsMCArMSBAQAorODMxMyA0IC04NTI2IDcgODMzNCAtODI2MDQgNjU1MzYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVtaXBzL3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDg0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11bWlwcy9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzgzMTMgNCAtODUyNiA3IDgzMzQgLTgyNjA0IDY1NTM2CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11cHBjL3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNmUzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXVwcGMvcG9pbnRlcmNhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2LTY0L3BvaW50ZXJjYWwgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbC9xZW11eDg2LTY0L3BvaW50ZXJjYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQwMDUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYtNjQvcG9pbnRlcmNhbApAQCAtMCwwICsxIEBACisxMjgwIDAgMTAwMiAwIDk2MCAzMjggNjU1MzYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbCBiL21ldGEvcmVjaXBlcy1ic3AvcG9pbnRlcmNhbC9wb2ludGVyY2FsL3FlbXV4ODYvcG9pbnRlcmNhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwNTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWwvcWVtdXg4Ni9wb2ludGVyY2FsCkBAIC0wLDAgKzEgQEAKKzEyODAgMCAxMDAyIDAgOTYwIDMyOCA2NTUzNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9wb2ludGVyY2FsL3BvaW50ZXJjYWxfMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNzM1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3BvaW50ZXJjYWwvcG9pbnRlcmNhbF8wLjAuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBkYXRhIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjVmY2ZjODdmYjYxNTg2MGQzOThiNWUzODY4NWVkZiIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9pbnRlcmNhbCBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBPbmx5IGluc3RhbGwgZmlsZSBpZiBpdCBoYXMgYSBjb250ZW50cworCWlmIFsgLXMgJHtTfS9wb2ludGVyY2FsIF07IHRoZW4KKwkgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vCisJICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCit9CisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2FkZF9zdGRsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0ZjI2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbC9hZGRfc3RkbGliLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhpcyBwYXRjaCBhZGRlcyBzdGRsaWIuaCB0byBmaXggY29tcGlsZXIgd2FybmluZ3MgZHVlIHRvIHRoZSBleGl0CisjIGJ1aWx0LWluIG5vdCBiZWluZyBkZWZpbmVkIGFuZCBnZXR0aW5nIGFuIGluY29ycmVjdCBpbXBsaWNpdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDcmVhdGVkLWJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKKy0tLSBzZXRzZXJpYWwtMi4xNy9zZXRzZXJpYWwuYwkyMDEwLTA5LTAyIDE0OjExOjI3LjU2OTc2MzA4OCAtMDcwMAorKysrIHNldHNlcmlhbC0yLjE3X2ZpeGVkL3NldHNlcmlhbC5jCTIwMTAtMDktMDIgMTQ6MTE6MDguNTQ2MjY0MTM5IC0wNzAwCitAQCAtMTEsNiArMTEsNyBAQAorICAqLworIAorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8dGVybWlvcy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3NldHNlcmlhbC9zZXRzZXJpYWwvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzRhZGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsL2xkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorT2JleSBMREZMQUdTCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHNldHNlcmlhbC0yLjE3Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzZXRzZXJpYWwtMi4xNy9NYWtlZmlsZS5pbgorQEAgLTEzLDYgKzEzLDcgQEAgU1RSSVAgPSBAU1RSSVBACisgQ0MgPSBAQ0NACisgUk0gPSBybSAtZgorIENGTEFHUyA9IEBDRkxBR1NACisrTERGTEFHUyA9IEBMREZMQUdTQAorIERFRlMgPSBAREVGU0AKKyBJTkNTID0gLUkuCisgVEFSID0gdGFyCitAQCAtMjAsNyArMjEsNyBAQCBUQVIgPSB0YXIKKyBhbGw6IHNldHNlcmlhbCBzZXRzZXJpYWwuY2F0CisKKyBzZXRzZXJpYWw6IHNldHNlcmlhbC5jCistCSQoQ0MpICQoQ0ZMQUdTKSAkKERFRlMpICQoSU5DUykgc2V0c2VyaWFsLmMgLW8gc2V0c2VyaWFsCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoREVGUykgJChJTkNTKSBzZXRzZXJpYWwuYyAtbyBzZXRzZXJpYWwKKworIHNldHNlcmlhbC5jYXQ6IHNldHNlcmlhbC44CisJbnJvZmYgLW1hbiBzZXRzZXJpYWwuOCA+IHNldHNlcmlhbC5jYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC9zZXRzZXJpYWwvc2V0c2VyaWFsXzIuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiZGRkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avc2V0c2VyaWFsL3NldHNlcmlhbF8yLjE3LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiQ29udHJvbHMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc2VyaWFsIHBvcnRzIgorREVTQ1JJUFRJT04gPSAic2V0c2VyaWFsIGlzIGEgcHJvZ3JhbSBkZXNpZ25lZCB0byBzZXQgYW5kL29yIHJlcG9ydCB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBzZXJpYWwgcG9ydCIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZXRzZXJpYWwuc291cmNlZm9yZ2UubmV0IgorQVVUSE9SID0gIlRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT02O21kNT0yZTdjNTljYjllNTdlMzU2YWU4MWY1MGY0ZTRkZmQ5OSIKK1BSID0gInIzIgorCitERVBFTkRTICs9ICJncm9mZi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcAorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zZXRzZXJpYWwvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRfc3RkbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM0ODY3ZDcyYzQxNTY0MzE4ZTAxMDc3NDVlYjdhMGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdlNDQ4N2QzMjBhYzMxNTU4NTYzNDI0MTg5NDM1ZDM5NmRkZjc3OTUzYmIyMzExMWExN2EzZDE0ODdiNTc5NGEiCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgKKworICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L3NldHNlcmlhbCAgICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXRzZXJpYWwuOCAke0R9JHttYW5kaXJ9L21hbjgKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LWZ3LXV0aWxzXzIwMTUuMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRmN2EwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1mdy11dGlsc18yMDE1LjA3LmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiVS1Cb290IGJvb3Rsb2FkZXIgZndfcHJpbnRlbnYvc2V0ZW52IHV0aWxpdGllcyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTGljZW5zZXMvUkVBRE1FO21kNT0wNTA3Y2Q3ZGE4ZTdhZDZkNjcwMTkyNmVjOWI4NGM5NSIKK1NFQ1RJT04gPSAiYm9vdGxvYWRlciIKK0RFUEVORFMgPSAibXRkLXV0aWxzIgorCisjIFRoaXMgcmV2aXNpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRhZyAidjIwMTUuMDciCisjIFdlIHVzZSB0aGUgcmV2aXNpb24gaW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIHRvIGZldGNoIGl0IGZyb20gdGhlCisjIHJlcG8gZHVyaW5nIHBhcnNlCitTUkNSRVYgPSAiMzM3MTFiZGQ0YTRkY2U5NDJmYjVhZTg1YTY4ODk5YTgzNTdiZGQ5NCIKKworUFYgPSAidjIwMTUuMDcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitJTlNBTkVfU0tJUF8ke1BOfSA9ICJhbHJlYWR5LXN0cmlwcGVkIgorRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICdDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gQ0M9IiR7Q0N9ICR7Q0ZMQUdTfSAke0xERkxBR1N9IiBWPTEnCitFWFRSQV9PRU1BS0VfY2xhc3MtY3Jvc3MgPSAnQVJDSD0ke1RBUkdFVF9BUkNIfSBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFY9MScKKworaW5oZXJpdCB1Ym9vdC1jb25maWcKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAke1VCT09UX01BQ0hJTkV9CisJb2VfcnVubWFrZSBlbnYKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZndfcHJpbnRlbnYKKwlpbnN0YWxsIC1tIDc1NSAke1N9L3Rvb2xzL2Vudi9md19wcmludGVudiAke0R9JHtiYXNlX3NiaW5kaXJ9L2Z3X3NldGVudgorCWluc3RhbGwgLW0gMDY0NCAke1N9L3Rvb2xzL2Vudi9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKK30KKworZG9faW5zdGFsbF9jbGFzcy1jcm9zcyAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3N9CisJaW5zdGFsbCAtbSA3NTUgJHtTfS90b29scy9lbnYvZndfcHJpbnRlbnYgJHtEfSR7YmluZGlyX2Nyb3NzfS9md19wcmludGVudgorCWluc3RhbGwgLW0gNzU1ICR7U30vdG9vbHMvZW52L2Z3X3ByaW50ZW52ICR7RH0ke2JpbmRpcl9jcm9zc30vZndfc2V0ZW52Cit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19jbGFzcy1jcm9zcyA9ICJ1Ym9vdF9md191dGlsc19jcm9zcyIKK3Vib290X2Z3X3V0aWxzX2Nyb3NzKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3N9Cit9CisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitCQkNMQVNTRVhURU5EID0gImNyb3NzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LW1raW1hZ2VfMjAxNS4wNy5iYiBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTUuMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyOWJiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC1ta2ltYWdlXzIwMTUuMDcuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJVLUJvb3QgYm9vdGxvYWRlciBpbWFnZSBjcmVhdGlvbiB0b29sIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlcy9SRUFETUU7bWQ1PTA1MDdjZDdkYThlN2FkNmQ2NzAxOTI2ZWM5Yjg0Yzk1IgorU0VDVElPTiA9ICJib290bG9hZGVyIgorCitERVBFTkRTID0gIm9wZW5zc2wiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZGVueC5kZS91LWJvb3QuZ2l0O2JyYW5jaD1tYXN0ZXIiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0VYVFJBX09FTUFLRSA9ICdDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IiBDQz0iJHtDQ30gJHtDRkxBR1N9ICR7TERGTEFHU30iIFNUUklQPXRydWUgVj0xJworCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIHNhbmRib3hfZGVmY29uZmlnCisJb2VfcnVubWFrZSBjcm9zc190b29scyBOT19TREw9MQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9vbHMvbWtpbWFnZSAke0R9JHtiaW5kaXJ9L3Vib290LW1raW1hZ2UKKwlsbiAtc2YgdWJvb3QtbWtpbWFnZSAke0R9JHtiaW5kaXJ9L21raW1hZ2UKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LmluYyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY2ZmZkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC5pbmMKQEAgLTAsMCArMSwyOTAgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEJvb3QgTG9hZGVyIGZvciBlbWJlZGRlZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZW54LmRlL3dpa2kvVS1Cb290L1dlYkhvbWUiCitTRUNUSU9OID0gImJvb3Rsb2FkZXJzIgorUFJPVklERVMgPSAidmlydHVhbC9ib290bG9hZGVyIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xpY2Vuc2VzL1JFQURNRTttZDU9MDUwN2NkN2RhOGU3YWQ2ZDY3MDE5MjZlYzliODRjOTUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmRlbnguZGUvdS1ib290LmdpdDticmFuY2g9bWFzdGVyIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHVib290LWNvbmZpZyBkZXBsb3kKKworRVhUUkFfT0VNQUtFID0gJ0NST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBDQz0iJHtUQVJHRVRfUFJFRklYfWdjYyAke1RPT0xDSEFJTl9PUFRJT05TfSIgVj0xJworRVhUUkFfT0VNQUtFICs9ICdIT1NUQ0M9IiR7QlVJTERfQ0N9ICR7QlVJTERfQ0ZMQUdTfSAke0JVSUxEX0xERkxBR1N9IicKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCisjIHUtYm9vdCB3aWxsIGNvbXBpbGUgaXRzIG93biB0b29scyBkdXJpbmcgdGhlIGJ1aWxkLCB3aXRoIHNwZWNpZmljCisjIGNvbmZpZ3VyYXRpb25zIChha2Egd2hlbiBDT05GSUdfRklUX1NJR05BVFVSRSBpcyBlbmFibGVkKSBvcGVuc3NsIGlzIG5lZWRlZCBhcworIyBhIGhvc3QgYnVpbGQgZGVwZW5kZW5jeS4KK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLCxvcGVuc3NsLW5hdGl2ZSIKKworIyBBbGxvdyBzZXR0aW5nIGFuIGFkZGl0aW9uYWwgdmVyc2lvbiBzdHJpbmcgdGhhdCB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUKKyMgdS1ib290IGJ1aWxkIHN5c3RlbSBhbmQgYXBwZW5kZWQgdG8gdGhlIHUtYm9vdCB2ZXJzaW9uLiAgSWYgdGhlIC5zY212ZXJzaW9uCisjIGZpbGUgYWxyZWFkeSBleGlzdHMgaXQgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4uCitVQk9PVF9MT0NBTFZFUlNJT04gPz0gIiIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCB1c2UgLmJpbiBhbmQgb3RoZXJzIHVzZSAuaW1nLiAgQnkgZGVmYXVsdCB1c2UgLmJpbgorIyBidXQgZW5hYmxlIGluZGl2aWR1YWwgcmVjaXBlcyB0byBjaGFuZ2UgdGhpcyB2YWx1ZS4KK1VCT09UX1NVRkZJWCA/Pz0gImJpbiIKK1VCT09UX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9CSU5BUlkgPz0gInUtYm9vdC4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9TWU1MSU5LID89ICJ1LWJvb3QtJHtNQUNISU5FfS4ke1VCT09UX1NVRkZJWH0iCitVQk9PVF9NQUtFX1RBUkdFVCA/PSAiYWxsIgorCisjIE91dHB1dCB0aGUgRUxGIGdlbmVyYXRlZC4gU29tZSBwbGF0Zm9ybXMgY2FuIHVzZSB0aGUgRUxGIGZpbGUgYW5kIGRpcmVjdGx5CisjIGxvYWQgaXQgKEpUQUcgYm9vdGluZywgUUVNVSkgYWRkaXRpb25hbGx5IHRoZSBFTEYgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZworIyBwdXJwb3Nlcy4KK1VCT09UX0VMRiA/PSAiIgorVUJPT1RfRUxGX1NVRkZJWCA/PSAiZWxmIgorVUJPT1RfRUxGX0lNQUdFID89ICJ1LWJvb3QtJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9IgorVUJPT1RfRUxGX0JJTkFSWSA/PSAidS1ib290LiR7VUJPT1RfRUxGX1NVRkZJWH0iCitVQk9PVF9FTEZfU1lNTElOSyA/PSAidS1ib290LSR7TUFDSElORX0uJHtVQk9PVF9FTEZfU1VGRklYfSIKKworIyBTb21lIHZlcnNpb25zIG9mIHUtYm9vdCBidWlsZCBhbiBTUEwgKFNlY29uZCBQcm9ncmFtIExvYWRlcikgaW1hZ2UgdGhhdAorIyBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB0aGUgdS1ib290IGJpbmFyeSBhcyB3ZWxsIGFzIHBsYWNlZCBpbiB0aGUKKyMgZGVwbG95IGRpcmVjdG9yeS4gIEZvciB0aG9zZSB2ZXJzaW9ucyB0aGV5IGNhbiBzZXQgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMKKyMgdG8gYWxsb3cgcGFja2FnaW5nIHRoZSBTUEwuCitTUExfQklOQVJZID89ICIiCitTUExfSU1BR0UgPz0gIiR7U1BMX0JJTkFSWX0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfSIKK1NQTF9TWU1MSU5LID89ICIke1NQTF9CSU5BUll9LSR7TUFDSElORX0iCisKKyMgQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb3IgYSBzY3JpcHQgY2FuIGJlIGluc3RhbGxlZCBhbG9uZ3NpZGUKKyMgdS1ib290IHRvIGJlIHVzZWQgYXV0b21hdGljYWxseSBvbiBib290LiAgVGhpcyBmaWxlLCB0eXBpY2FsbHkgJ3VFbnYudHh0JworIyBvciAnYm9vdC5zY3InLCBzaG91bGQgYmUgcGFja2FnZWQgYWxvbmcgd2l0aCB1LWJvb3QgYXMgd2VsbCBhcyBwbGFjZWQgaW4gdGhlCisjIGRlcGxveSBkaXJlY3RvcnkuICBNYWNoaW5lIGNvbmZpZ3VyYXRpb25zIG5lZWRpbmcgb25lIG9mIHRoZXNlIGZpbGVzIHNob3VsZAorIyBpbmNsdWRlIGl0IGluIHRoZSBTUkNfVVJJIGFuZCBzZXQgdGhlIFVCT09UX0VOViBwYXJhbWV0ZXIuCitVQk9PVF9FTlZfU1VGRklYID89ICJ0eHQiCitVQk9PVF9FTlYgPz0gIiIKK1VCT09UX0VOVl9CSU5BUlkgPz0gIiR7VUJPT1RfRU5WfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX0lNQUdFID89ICIke1VCT09UX0VOVn0tJHtNQUNISU5FfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VOVl9TVUZGSVh9IgorVUJPT1RfRU5WX1NZTUxJTksgPz0gIiR7VUJPT1RfRU5WfS0ke01BQ0hJTkV9LiR7VUJPT1RfRU5WX1NVRkZJWH0iCisKK2RvX2NvbXBpbGUgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICdsZC1pcy1nb2xkJywgJycsIGQpfSIgPSAibGQtaXMtZ29sZCIgXSA7IHRoZW4KKwkJc2VkIC1pICdzLyQoQ1JPU1NfQ09NUElMRSlsZCQvJChDUk9TU19DT01QSUxFKWxkLmJmZC9nJyBjb25maWcubWsKKwlmaQorCisJdW5zZXQgTERGTEFHUworCXVuc2V0IENGTEFHUworCXVuc2V0IENQUEZMQUdTCisKKwlpZiBbICEgLWUgJHtCfS8uc2NtdmVyc2lvbiAtYSAhIC1lICR7U30vLnNjbXZlcnNpb24gXQorCXRoZW4KKwkJZWNobyAke1VCT09UX0xPQ0FMVkVSU0lPTn0gPiAke0J9Ly5zY212ZXJzaW9uCisJCWVjaG8gJHtVQk9PVF9MT0NBTFZFUlNJT059ID4gJHtTfS8uc2NtdmVyc2lvbgorCWZpCisgICAgCisgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgIGZvciB0eXBlICBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtjb25maWd9CisgICAgICAgICAgICAgICAgICAgIG9lX3J1bm1ha2UgTz0ke2NvbmZpZ30gJHtVQk9PVF9NQUtFX1RBUkdFVH0KKyAgICAgICAgICAgICAgICAgICAgY3AgICR7U30vJHtjb25maWd9LyR7VUJPT1RfQklOQVJZfSAgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgIGRvbmUKKyAgICAgICAgdW5zZXQgIGkKKyAgICBlbHNlCisgICAgICAgIG9lX3J1bm1ha2UgJHtVQk9PVF9NQUNISU5FfQorICAgICAgICBvZV9ydW5tYWtlICR7VUJPT1RfTUFLRV9UQVJHRVR9CisgICAgZmkKKworfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgZm9yIHR5cGUgaW4gJHtVQk9PVF9DT05GSUd9OyBkbworICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9L3UtYm9vdC0ke3R5cGV9LiR7VUJPT1RfU1VGRklYfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICB1bnNldCAgagorICAgICAgICBkb25lCisgICAgICAgIHVuc2V0ICBpCisgICAgZWxzZQorICAgICAgICBpbnN0YWxsIC1kICR7RH0vYm9vdAorICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0lNQUdFfQorICAgICAgICBsbiAtc2YgJHtVQk9PVF9JTUFHRX0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfQorICAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtEfS9ib290LyR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0R9L2Jvb3QvJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIHVuc2V0IGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0IGkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfRUxGfSAke0R9L2Jvb3QvJHtVQk9PVF9FTEZfSU1BR0V9CisgICAgICAgICAgICBsbiAtc2YgJHtVQk9PVF9FTEZfSU1BR0V9ICR7RH0vYm9vdC8ke1VCT09UX0VMRl9CSU5BUll9CisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmIFsgLWUgJHtXT1JLRElSfS9md19lbnYuY29uZmlnIF0gOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9md19lbnYuY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L2Z3X2Vudi5jb25maWcKKyAgICBmaQorCisgICAgaWYgWyAieCR7U1BMX0JJTkFSWX0iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICB0aGVuCisgICAgICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgIGZvciB0eXBlIGluICR7VUJPT1RfQ09ORklHfTsgZG8KKyAgICAgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7U1BMX0JJTkFSWX0gJHtEfS9ib290LyR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7RH0vYm9vdC8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke1NQTF9CSU5BUll9ICR7RH0vYm9vdC8ke1NQTF9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtEfS9ib290LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7RH0vYm9vdC8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0R9L2Jvb3QvJHtVQk9PVF9FTlZfQklOQVJZfQorICAgIGZpCit9CisKK0ZJTEVTXyR7UE59ID0gIi9ib290ICR7c3lzY29uZmRpcn0iCisjIEVuc3VyZSB0aGUgc3BsaXQgZGVidWcgcGFydCBvZiBhbnkgZWxmIGZpbGVzIGFyZSBwdXQgaW50byBkYmcKK0ZJTEVTXyR7UE59LWRiZyArPSAiL2Jvb3QvLmRlYnVnIgorCitkb19kZXBsb3kgKCkgeworICAgIGlmIFsgIngke1VCT09UX0NPTkZJR30iICE9ICJ4IiBdCisgICAgdGhlbgorICAgICAgICBmb3IgY29uZmlnIGluICR7VUJPT1RfTUFDSElORX07IGRvCisgICAgICAgICAgICBpPWBleHByICRpICsgMWA7CisgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgaj1gZXhwciAkaiArIDFgOworICAgICAgICAgICAgICAgIGlmIFsgJGogLWVxICRpIF0KKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgJHtTfS8ke2NvbmZpZ30vdS1ib290LSR7dHlwZX0uJHtVQk9PVF9TVUZGSVh9ICR7REVQTE9ZRElSfS91LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0KKyAgICAgICAgICAgICAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9TWU1MSU5LfQorICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9TVUZGSVh9ICR7VUJPT1RfQklOQVJZfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX1NVRkZJWH0gJHtVQk9PVF9CSU5BUll9CisgICAgICAgICAgICAgICAgZmkgCisgICAgICAgICAgICBkb25lIAorICAgICAgICAgICAgdW5zZXQgIGoKKyAgICAgICAgZG9uZQorICAgICAgICB1bnNldCAgaQorICAgIGVsc2UKKyAgICAgICAgaW5zdGFsbCAtZCAke0RFUExPWURJUn0KKyAgICAgICAgaW5zdGFsbCAke1N9LyR7VUJPT1RfQklOQVJZfSAke0RFUExPWURJUn0vJHtVQk9PVF9JTUFHRX0KKyAgICAgICAgY2QgJHtERVBMT1lESVJ9CisgICAgICAgIHJtIC1mICR7VUJPT1RfQklOQVJZfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0lNQUdFfSAke1VCT09UX0JJTkFSWX0KKyAgIGZpCisKKyAgICBpZiBbICJ4JHtVQk9PVF9FTEZ9IiAhPSAieCIgXQorICAgIHRoZW4KKyAgICAgICAgaWYgWyAieCR7VUJPT1RfQ09ORklHfSIgIT0gIngiIF0KKyAgICAgICAgdGhlbgorICAgICAgICAgICAgZm9yIGNvbmZpZyBpbiAke1VCT09UX01BQ0hJTkV9OyBkbworICAgICAgICAgICAgICAgIGk9YGV4cHIgJGkgKyAxYDsKKyAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgIGo9YGV4cHIgJGogKyAxYDsKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkaiAtZXEgJGkgXQorICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtjb25maWd9LyR7VUJPT1RfRUxGfSAke0RFUExPWURJUn0vdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0tJHt0eXBlfQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmIHUtYm9vdC0ke3R5cGV9LSR7UFZ9LSR7UFJ9LiR7VUJPT1RfRUxGX1NVRkZJWH0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zZiB1LWJvb3QtJHt0eXBlfS0ke1BWfS0ke1BSfS4ke1VCT09UX0VMRl9TVUZGSVh9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgdS1ib290LSR7dHlwZX0tJHtQVn0tJHtQUn0uJHtVQk9PVF9FTEZfU1VGRklYfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTEZfU1lNTElOS30KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgdW5zZXQgagorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgdW5zZXQgaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpbnN0YWxsICR7U30vJHtVQk9PVF9FTEZ9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VMRl9JTUFHRX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX0JJTkFSWX0KKyAgICAgICAgICAgIGxuIC1zZiAke1VCT09UX0VMRl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRUxGX1NZTUxJTkt9CisgICAgICAgIGZpCisgICAgZmkKKworCisgICAgIGlmIFsgIngke1NQTF9CSU5BUll9IiAhPSAieCIgXQorICAgICB0aGVuCisgICAgICAgICBpZiBbICJ4JHtVQk9PVF9DT05GSUd9IiAhPSAieCIgXSAgIAorICAgICAgICAgdGhlbgorICAgICAgICAgICAgIGZvciBjb25maWcgaW4gJHtVQk9PVF9NQUNISU5FfTsgZG8KKyAgICAgICAgICAgICAgICAgaT1gZXhwciAkaSArIDFgOworICAgICAgICAgICAgICAgICBmb3IgdHlwZSBpbiAke1VCT09UX0NPTkZJR307IGRvCisgICAgICAgICAgICAgICAgICAgICBqPWBleHByICRqICsgMWA7CisgICAgICAgICAgICAgICAgICAgICBpZiBbICRqIC1lcSAkaSBdCisgICAgICAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7Y29uZmlnfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9JTUFHRX0tJHt0eXBlfS0ke1BWfS0ke1BSfQorICAgICAgICAgICAgICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfS0ke3R5cGV9CisgICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7U1BMX0lNQUdFfS0ke3R5cGV9LSR7UFZ9LSR7UFJ9ICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9LSR7dHlwZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9LSR7dHlwZX0tJHtQVn0tJHtQUn0gJHtERVBMT1lESVJ9LyR7U1BMX1NZTUxJTkt9CisgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgIHVuc2V0ICBqCisgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgIHVuc2V0ICBpCisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5zdGFsbCAke1N9LyR7U1BMX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7U1BMX0lNQUdFfQorICAgICAgICAgICAgIHJtIC1mICR7REVQTE9ZRElSfS8ke1NQTF9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgICAgIGxuIC1zZiAke1NQTF9JTUFHRX0gJHtERVBMT1lESVJ9LyR7U1BMX0JJTkFSWX0KKyAgICAgICAgICAgICBsbiAtc2YgJHtTUExfSU1BR0V9ICR7REVQTE9ZRElSfS8ke1NQTF9TWU1MSU5LfQorICAgICAgICAgZmkKKyAgICAgZmkKKworCisgICAgaWYgWyAieCR7VUJPT1RfRU5WfSIgIT0gIngiIF0KKyAgICB0aGVuCisgICAgICAgIGluc3RhbGwgJHtXT1JLRElSfS8ke1VCT09UX0VOVl9CSU5BUll9ICR7REVQTE9ZRElSfS8ke1VCT09UX0VOVl9JTUFHRX0KKyAgICAgICAgcm0gLWYgJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX1NZTUxJTkt9CisgICAgICAgIGxuIC1zZiAke1VCT09UX0VOVl9JTUFHRX0gJHtERVBMT1lESVJ9LyR7VUJPT1RfRU5WX0JJTkFSWX0KKyAgICAgICAgbG4gLXNmICR7VUJPT1RfRU5WX0lNQUdFfSAke0RFUExPWURJUn0vJHtVQk9PVF9FTlZfU1lNTElOS30KKyAgICBmaQorfQorCithZGR0YXNrIGRlcGxveSBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290LzAwMDEtdS1ib290LW1wYzg1eHgtdS1ib290LS5sZHMtcmVtb3ZlLV9HTE9CQUxfT0ZGU0VUX1RBQi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiY2Q0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdS1ib290L3UtYm9vdC8wMDAxLXUtYm9vdC1tcGM4NXh4LXUtYm9vdC0ubGRzLXJlbW92ZS1fR0xPQkFMX09GRlNFVF9UQUIucGF0Y2gKQEAgLTAsMCArMSwxODQgQEAKK0Zyb20gOTI1OThlMTUxNWIyZWMzODUxYWYxZjA2NDA3NWQwNDU3ZjAxMjcyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDE4OjMzOjU2ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBvd2VycGMvY3B1LyovdS1ib290Ki5sZHM6IHJlbW92ZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8KKyBkZWZpbml0aW9uCitPcmdhbml6YXRpb246IE8uUy4gU3lzdGVtcyBTb2Z0d2FyZSBMVERBLgorCitJbiBiaW51dGlscy0yLjI1LCB0aGUgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIHN5bWJvbHMgZGVmaW5lZCBieSBQUk9WSURFIGluCit1LWJvb3QubGRzIG92ZXJyaWRlcyB0aGUgbGlua2VyIGJ1aWx0LWluIHN5bWJvbHMKKyhodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC9naXR3ZWIuY2dpP3A9YmludXRpbHMtZ2RiLmdpdDthPWNvbW1pdGRpZmY7aD1iODkzMzk3YTRiMTMxNjYxMGY0OTgxOTM0NDgxNzcxNWU0MzA1ZGU5KSwKK3NvIHRoZSBsaW5rZXIgaXMgdHJlYXRpbmcgX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGFzIGEgZGVmaW5pdGlvbiBpbnRvIHRoZSAucmVsb2Mgc2VjdGlvbi4KKworVG8gYWxpZ24gd2l0aCB0aGUgY2hhbmdlIG9mIGJpbnV0aWxzLTIuMjUsIHRoZSBfR0xPQkFMX09GRlNFVF9UQUJMRV8gc3ltYm9sCitzaG91bGQgbm90IGJlIGRlZmluZWQgaW4gc2VjdGlvbnMsIGFuZCB0aGUgc3ltYm9scyBpbiBsaW5rZXIgZ2VuZXJhdGVkIC5nb3QKK3NlY3Rpb24gc2hvdWxkIGJlIHVzZWQoaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9iaW51dGlscy8yMDA4LTA5L21zZzAwMTIyLmh0bWwpLgorCitGaXhlZCB0aGUgZm9sbG93aW5nIGJ1aWxkIGVycm9ycyB3aXRoIGJpbnV0aWxzLTIuMjU6Cit8IHBvd2VycGMtcG9reS1saW51eC1nbnVzcGUtbGQuYmZkOiBfR0xPQkFMX09GRlNFVF9UQUJMRV8gbm90IGRlZmluZWQgaW4gbGlua2VyIGNyZWF0ZWQgLmdvdAorCitTaWduZWQtb2ZmLWJ5OiBaaGVuaHVhIEx1byA8emhlbmh1YS5sdW9AZnJlZXNjYWxlLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMgICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcyAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMgICAgICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1zcGwubGRzICAgICAgfCAxIC0KKyBhcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcyAgICAgICAgICB8IDEgLQorIGFyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzICAgICAgICAgIHwgMSAtCisgYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcyAgICAgICAgICAgfCAxIC0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNTEyeC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK2luZGV4IDk2NThiMjEuLmIzMmY3NGUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzUxMngvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM1MTJ4L3UtYm9vdC5sZHMKK0BAIC0yNCw3ICsyNCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgICAgKiguZml4dXApCitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHgvdS1ib290LmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4L3UtYm9vdC5sZHMKK2luZGV4IDcxOTg0NjUuLjZhNTM1NzEgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eC91LWJvb3QubGRzCitAQCAtMzMsNyArMzMsNiBAQCBTRUNUSU9OUworICAgICBfR09UMl9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmdvdDIpKQorICAgICBLRUVQKCooLmdvdCkpCistICAgIFBST1ZJREUoX0dMT0JBTF9PRkZTRVRfVEFCTEVfID0gLiArIDQpOworICAgICBfRklYVVBfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5maXh1cCkpCisgICB9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM1eHh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworaW5kZXggY2Q5ZTIzZi4uYWE4MGQzZCAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjNXh4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzV4eHgvdS1ib290LmxkcworQEAgLTI4LDcgKzI4LDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODI2MC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK2luZGV4IDUwY2JmODUuLjQ2OWZjMjkgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgyNjAvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4MjYwL3UtYm9vdC5sZHMKK0BAIC0yNyw3ICsyNyw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDc3NDc3MmIuLjQxMDFlYWYgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI0LDcgKzI0LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCX0KKyAJX19nb3QyX2VudHJpZXMgPSAoKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyAtIF9HT1QyX1RBQkxFXykgPj4gMikgLSAxOworIAorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODN4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK2luZGV4IDNjMTc3ZmEuLmRiZDhiYmUgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzgzeHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4M3h4L3UtYm9vdC5sZHMKK0BAIC0yNiw3ICsyNiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmQubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kLmxkcworaW5kZXggZjkzM2IyMS4uMDM5OWY5MyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZC5sZHMKK0BAIC00NCw3ICs0NCw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LW5hbmRfc3BsLmxkcyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitpbmRleCBiODNjNTUzLi5mMDQ0NTY0IDEwMDY0NAorLS0tIGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC1uYW5kX3NwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QtbmFuZF9zcGwubGRzCitAQCAtMjIsNyArMjIsNiBAQCBTRUNUSU9OUworIAkJX0dPVDJfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZ290MikpCisgCQlLRUVQKCooLmdvdCkpCistCQlQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAJCV9GSVhVUF9UQUJMRV8gPSAuOworIAkJS0VFUCgqKC5maXh1cCkpCisgCX0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKK2luZGV4IDVhZTdiM2UuLjg4OWE0YzIgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LXNwbC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3Qtc3BsLmxkcworQEAgLTI5LDcgKzI5LDYgQEAgU0VDVElPTlMKKyAJCV9HT1QyX1RBQkxFXyA9IC47CisgCQlLRUVQKCooLmdvdDIpKQorIAkJS0VFUCgqKC5nb3QpKQorLQkJUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgCQlfRklYVVBfVEFCTEVfID0gLjsKKyAJCUtFRVAoKiguZml4dXApKQorIAl9CitkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NwdS9tcGM4NXh4L3UtYm9vdC5sZHMgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworaW5kZXggMmNmMGIyNS4uZjE1ZWFmMyAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODV4eC91LWJvb3QubGRzCisrKysgYi9hcmNoL3Bvd2VycGMvY3B1L21wYzg1eHgvdS1ib290LmxkcworQEAgLTUwLDcgKzUwLDYgQEAgU0VDVElPTlMKKyAgICAgX0dPVDJfVEFCTEVfID0gLjsKKyAgICAgS0VFUCgqKC5nb3QyKSkKKyAgICAgS0VFUCgqKC5nb3QpKQorLSAgICBQUk9WSURFKF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyA9IC4gKyA0KTsKKyAgICAgX0ZJWFVQX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZml4dXApKQorICAgfQorZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jcHUvbXBjODZ4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK2luZGV4IDU4NDY3YzIuLjZjNDhmNDAgMTAwNjQ0CistLS0gYS9hcmNoL3Bvd2VycGMvY3B1L21wYzg2eHgvdS1ib290LmxkcworKysrIGIvYXJjaC9wb3dlcnBjL2NwdS9tcGM4Nnh4L3UtYm9vdC5sZHMKK0BAIC0zMiw3ICszMiw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KK2RpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY3B1L3BwYzR4eC91LWJvb3QubGRzIGIvYXJjaC9wb3dlcnBjL2NwdS9wcGM0eHgvdS1ib290LmxkcworaW5kZXggMTk4MDUwOC4uNTVkZDRlMSAxMDA2NDQKKy0tLSBhL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKKysrKyBiL2FyY2gvcG93ZXJwYy9jcHUvcHBjNHh4L3UtYm9vdC5sZHMKK0BAIC00Niw3ICs0Niw2IEBAIFNFQ1RJT05TCisgICAgIF9HT1QyX1RBQkxFXyA9IC47CisgICAgIEtFRVAoKiguZ290MikpCisgICAgIEtFRVAoKiguZ290KSkKKy0gICAgUFJPVklERShfR0xPQkFMX09GRlNFVF9UQUJMRV8gPSAuICsgNCk7CisgICAgIF9GSVhVUF9UQUJMRV8gPSAuOworICAgICBLRUVQKCooLmZpeHVwKSkKKyAgIH0KKy0tIAorMi40LjYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3UtYm9vdC91LWJvb3RfMjAxNS4wNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ2YzMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91LWJvb3QvdS1ib290XzIwMTUuMDcuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB1LWJvb3QuaW5jCisKK0RFUEVORFMgKz0gImR0Yy1uYXRpdmUiCisKKyMgVGhpcyByZXZpc2lvbiBjb3JyZXNwb25kcyB0byB0aGUgdGFnICJ2MjAxNS4wNyIKKyMgV2UgdXNlIHRoZSByZXZpc2lvbiBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgdG8gZmV0Y2ggaXQgZnJvbSB0aGUKKyMgcmVwbyBkdXJpbmcgcGFyc2UKK1NSQ1JFViA9ICIzMzcxMWJkZDRhNGRjZTk0MmZiNWFlODVhNjg4OTlhODM1N2JkZDk0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS11LWJvb3QtbXBjODV4eC11LWJvb3QtLmxkcy1yZW1vdmUtX0dMT0JBTF9PRkZTRVRfVEFCLnBhdGNoIgorCitQViA9ICJ2MjAxNS4wNytnaXQke1NSQ1BWfSIKKworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgS0NGTEFHUz0tZmdudTg5LWlubGluZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhNDRiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiSW5pdHNjcmlwdCBmb3IgZW5hYmxpbmcgVVNCIGdhZGdldCBFdGhlcm5ldCIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vQ09QWUlORy5HUEw7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmaWxlOi8vdXNiLWdldGhlciBcCisgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTCIKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHVzYi1nZXRoZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQgYWxsYXJjaAorCitJTklUU0NSSVBUX05BTUUgPSAidXNiLWdldGhlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMIGIvbWV0YS9yZWNpcGVzLWJzcC91c2Jpbml0L3VzYmluaXQvQ09QWUlORy5HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMTkwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L0NPUFlJTkcuR1BMCkBAIC0wLDAgKzEsMzM5IEBACisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNiaW5pdC91c2Jpbml0L3VzYi1nZXRoZXIgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC91c2ItZ2V0aGVyCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4MGEwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYmluaXQvdXNiaW5pdC91c2ItZ2V0aGVyCkBAIC0wLDAgKzEsMjMgQEAKKyMhIC9iaW4vc2gKKyMKKyMgdXNiLWV0aGVyIAlTdGFydCB1cCB0aGUgZ2FkZ2V0IHVzYiBldGhlcm5ldCBpbnRlcmZhY2UuCisjCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0fCIiKQorCQl0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiSW5pdGlhbGl6aW5nIGdfZXRoZXIgZ2FkZ2V0Li4uIgorCQltb2Rwcm9iZSBnX2V0aGVyCisJCWlmdXAgdXNiMAorCQk7OworCXN0b3ApCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJEaXNhYmxpbmcgZ19ldGhlci4uLiIKKwkJaWZkb3duIHVzYjAKKwkJcm1tb2QgZ19ldGhlcgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiB1c2ItZXRoZXIge3N0YXJ0fHN0b3B9IiA+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzLTAwOC9pY29udi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDU1NTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy0wMDgvaWNvbnYucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRldGVjdGluZyBpY29udiBzdXBwb3J0IHVzaW5nIGF1dG90b29scwordWNsaWJjIGRvZXMgbm90IGhhdmUgaWNvbnYgaW1wbGVtZW50YXRpb24gaW5zaWRlIGxpYmMgbGlrZSBnbGliYywgdGhlcmVmb3JlCit0aGUgZXhpc3RpbmcgY2hlY2tzIHdlcmUgbm90IHN1ZmZpY2llbnQsIGl0IHdvcmtlZCBmb3IgZ2xpYmMgYnV0IG5vdCBmb3IKK3VjbGliYy4gVGhlIG5ldyBwYXRjaCBwb3J0YWJseSBkZXRlY3RzIHRoZSBpY29udiBzdXBwb3J0IGFuZCBhZGRzIHRoZQorbGliaWNvbnYgdG8gbGlua2VyIGNtZGxpbmUKKworVGhpcyBwYXRjaCBzaG91bGQgYmUgc3VibWl0dGVkIHVwc3RyZWFtIHRvbworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IHVzYnV0aWxzLTAwOC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1c2J1dGlscy0wMDgub3JpZy9jb25maWd1cmUuYWMKKysrKyB1c2J1dGlscy0wMDgvY29uZmlndXJlLmFjCitAQCAtMTAsNyArMTAsOSBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgCisgQUNfQ0hFQ0tfSEVBREVSUyhbYnl0ZXN3YXAuaF0pCistQUNfQ0hFQ0tfRlVOQ1MoW25sX2xhbmdpbmZvIGljb252XSkKKysKKytBTV9HTlVfR0VUVEVYVAorK0FNX0lDT05WCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCVVNCLCBsaWJ1c2ItMS4wID49IDEuMC4wKQorIAorSW5kZXg6IHVzYnV0aWxzLTAwOC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwOC5vcmlnL01ha2VmaWxlLmFtCisrKysgdXNidXRpbHMtMDA4L01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksOCBAQCBsc3VzYl9DUFBGTEFHUyA9IFwKKyAKKyBsc3VzYl9MREFERCA9IFwKKyAJJChMSUJVU0JfTElCUykgXAorLQkkKFVERVZfTElCUykKKysJJChVREVWX0xJQlMpIFwKKysJJChMSUJJQ09OVikKKyAKKyBtYW5fTUFOUyA9IFwKKyAJbHN1c2IuOAlcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmZGM1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHMvRml4LU5VTEwtcG9pbnRlci1jcmFzaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGaXggTlVMTCBwb2ludGVyIGNyYXNoLgorCitCZWZvcmUgdXNlIHVzYmJ1c2xpc3QsIHdlIHNob3VsZCBjaGVjayBpZiBpdCBpcyB2YWxpZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBsc3VzYi10LmMgfCAgICA0ICsrKysKKyAxIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xzdXNiLXQuYyBiL2xzdXNiLXQuYworaW5kZXggZjYwNDE1NS4uNTgzYTQ2YSAxMDA2NDQKKy0tLSBhL2xzdXNiLXQuYworKysrIGIvbHN1c2ItdC5jCitAQCAtNjQzLDYgKzY0MywxMCBAQCBzdGF0aWMgdm9pZCBzb3J0X2J1c3Nlcyh2b2lkKQorIAkvKiBuZWVkIHRvIHJldmVyc2Ugc29ydCBidXMgbnVtYmVycyAqLworIAlzdHJ1Y3QgdXNiYnVzbm9kZSAqdCwgKnAsICoqcHA7CisgCWludCBzd2FwcGVkOworKworKwlpZiAoIXVzYmJ1c2xpc3QpCisrCQlyZXR1cm47CisrCisgCWRvIHsKKyAJCXAgPSB1c2JidXNsaXN0OworIAkJcHAgPSAmdXNiYnVzbGlzdDsKKy0tIAorMS43LjQuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL2ljb252LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9pY29udi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTU3MzM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy9pY29udi5wYXRjaApAQCAtMCwwICsxLDQwIEBACitUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGV0ZWN0aW5nIGljb252IHN1cHBvcnQgdXNpbmcgYXV0b3Rvb2xzCit1Y2xpYmMgZG9lcyBub3QgaGF2ZSBpY29udiBpbXBsZW1lbnRhdGlvbiBpbnNpZGUgbGliYyBsaWtlIGdsaWJjLCB0aGVyZWZvcmUKK3RoZSBleGlzdGluZyBjaGVja3Mgd2VyZSBub3Qgc3VmZmljaWVudCwgaXQgd29ya2VkIGZvciBnbGliYyBidXQgbm90IGZvcgordWNsaWJjLiBUaGUgbmV3IHBhdGNoIHBvcnRhYmx5IGRldGVjdHMgdGhlIGljb252IHN1cHBvcnQgYW5kIGFkZHMgdGhlCitsaWJpY29udiB0byBsaW5rZXIgY21kbGluZQorCitUaGlzIHBhdGNoIHNob3VsZCBiZSBzdWJtaXR0ZWQgdXBzdHJlYW0gdG9vCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogdXNidXRpbHMtMDA3L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVzYnV0aWxzLTAwNy5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHVzYnV0aWxzLTAwNy9jb25maWd1cmUuYWMKK0BAIC0xMCw3ICsxMCw5IEBAIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19DSEVDS19IRUFERVJTKFtieXRlc3dhcC5oXSkKKy1BQ19DSEVDS19GVU5DUyhbbmxfbGFuZ2luZm8gaWNvbnZdKQorKworK0FNX0dOVV9HRVRURVhUCisrQU1fSUNPTlYKKyAKKyBBQ19BUkdfRU5BQkxFKHpsaWIsCisgCUFTX0hFTFBfU1RSSU5HKC0tZGlzYWJsZS16bGliLGRpc2FibGUgc3VwcG9ydCBmb3IgemxpYikpCitJbmRleDogdXNidXRpbHMtMDA3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXNidXRpbHMtMDA3Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyB1c2J1dGlscy0wMDcvTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGxzdXNiX0NQUEZMQUdTID0gXAorIAktRERBVEFESVI9XCIkKGRhdGFkaXIpXCIKKyAKKyBsc3VzYl9MREFERCA9IFwKKy0JJChMSUJVU0JfTElCUykKKysJJChMSUJVU0JfTElCUykgJChMSUJJQ09OVikKKyAKKyBpZiBIQVZFX1pMSUIKKyBsc3VzYl9DUFBGTEFHUyArPSAtREhBVkVfTElCWgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmIyNDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlscy91c2ItZGV2aWNlcy1hdm9pZC1kZXBlbmRlbmN5LW9uLWJhc2gucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzMzNkNWZiYmMwMzQ4MWYxYWEyMjJiZDY4YzI2MDlkYjE2OGFlM2UwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBUaHUsIDI2IEp1bCAyMDEyIDEwOjM3OjMyICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzYi1kZXZpY2VzOiBhdm9pZCBkZXBlbmRlbmN5IG9uIGJhc2gKKworQnkgdmlydHVlIG9mIGhhdmluZyAjIS9iaW4vYmFzaCB0aGlzIHNjcmlwdCBkZWNsYXJlZCB0aGF0IGl0IHJlcXVpcmVzCitiYXNoLCBob3dldmVyIG1hbnVhbCBleGFtaW5hdGlvbiwgY2hlY2tiYXNoaXNtcyBhbmQgdGVzdHMgd2l0aCBkYXNoCithbmQgYnVzeWJveCBzaG93IHRoYXQgaXQgZG9lc24ndCBjb250YWluIGFueSBiYXNoaXNtcywgc28gY2hhbmdlIHRoZQoraGVhZGVyIHRvIGF2b2lkIHRoZSBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyB1c2ItZGV2aWNlcyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3VzYi1kZXZpY2VzIGIvdXNiLWRldmljZXMKK2luZGV4IGIyMDUyZTIuLjE0YTUzNTggMTAwNzU1CistLS0gYS91c2ItZGV2aWNlcworKysrIGIvdXNiLWRldmljZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgIyBDb3B5cmlnaHQ6IDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAjICAgICAgICAgICAgMjAwOSBSYW5keSBEdW5sYXAgPHJkdW5sYXBAeGVub3RpbWUubmV0PgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzYjJiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3AvdXNidXRpbHMvdXNidXRpbHNfMDA3LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiSG9zdCBzaWRlIFVTQiBjb25zb2xlIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkNvbnRhaW5zIHRoZSBsc3VzYiB1dGlsaXR5IGZvciBpbnNwZWN0aW5nIHRoZSBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgVVNCIGJ1cy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmciCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAibGlidXNiIHpsaWIgdmlydHVhbC9saWJpY29udiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3VzYi91c2J1dGlscy91c2J1dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vdXNiLWRldmljZXMtYXZvaWQtZGVwZW5kZW5jeS1vbi1iYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0ZpeC1OVUxMLXBvaW50ZXItY3Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJlNmM0MjI5NGJlNWM5NDBmMjA4MTkwZDM0NzlkNTBjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU2NWMyMzRjYWRmN2M4MWI2YjE1NjdjNDQwZTNiOWIzMWI0NGY1MWMyN2RmM2U0NTc0MWI4ODg0OGQ4YjM3ZDMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgV2Ugb25seSBuZWVkIHRoZSBjb21wcmVzc2VkIGNvcHksIHJlbW92ZSB0aGUgdW5jb21wcmVzc2VkIHZlcnNpb24KKwlybSAtZiAke0R9JHtkYXRhZGlyfS91c2IuaWRzCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS1pZHMiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vcGtnY29uZmlnIgorRklMRVNfJHtQTn0taWRzID0gIiR7ZGF0YWRpcn0vdXNiKiIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0taWRzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIgYi9tZXRhL3JlY2lwZXMtYnNwL3VzYnV0aWxzL3VzYnV0aWxzXzAwOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjJkOGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC91c2J1dGlscy91c2J1dGlsc18wMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJIb3N0IHNpZGUgVVNCIGNvbnNvbGUgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIGxzdXNiIHV0aWxpdHkgZm9yIGluc3BlY3RpbmcgdGhlIGRldmljZXMgY29ubmVjdGVkIHRvIHRoZSBVU0IgYnVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGludXgtdXNiLm9yZyIKK1NFQ1RJT04gPSAiYmFzZSIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworREVQRU5EUyA9ICJsaWJ1c2IgemxpYiB2aXJ0dWFsL2xpYmljb252IHN5c3RlbWQiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy91c2IvdXNidXRpbHMvdXNidXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3VzYi1kZXZpY2VzLWF2b2lkLWRlcGVuZGVuY3ktb24tYmFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtTlVMTC1wb2ludGVyLWNyYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ljb252LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYjIwMTQ4YzJlNzg0NTc3ZTkyNGE3YjRjNTYwYzhmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ZDVmMTZjMjk2MWRmMzdlMjJlNDkyYzczNmEzZTE2MmE4ZmRlMjQ0ODBmMjNhNDBkODVmNzlhZjgwZDNmZTk1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgVGhpcyB2ZXJzaW9uIG9mIHVzYnV0aWxzIHJlbGllcyBvbiB0aGUgdWRldiBmcm9tIHN5c3RlbWQsIHNvIHVubGVzcyAKKyMgd2UgY2FuIGRlY291cGxlIHVkZXYgZnJvbSBzeXN0ZW0sIHdlIHJlcXVpcmUgc3lzdGVtZCBmb3Igbm93LgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gInN5c3RlbWQiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWciCisKK1JERVBFTkRTXyR7UE59ID0gImxpYnVkZXYiCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICJsaWJib29zdC1zeXN0ZW0gbGliYm9vc3QtdGhyZWFkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvVXBkYXRlLXg4NmVtdS1mcm9tLVgub3JnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOWUyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9VcGRhdGUteDg2ZW11LWZyb20tWC5vcmcucGF0Y2gKQEAgLTAsMCArMSwyMTc2NiBAQAorRnJvbSAxYTQxMGFlNThmMjhlZWFiMzJmYTg3NjI2Y2ZkNWE2NjNiYTMzYzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQmVybmhhcmQgV2FsbGUgPGJlcm5oYXJkQGJ3YWxsZS5kZT4KK0RhdGU6IFR1ZSwgMTMgTWF5IDIwMTQgMjM6NDA6NTYgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFVwZGF0ZSB4ODZlbXUgZnJvbSBYLm9yZworCitUaGlzIGNvbW1pdCB1cGRhdGVzIHRoZSB4ODZlbXUgY29weSBmcm9tIFgub3JnIHRhcmJhbGwKKyhmdHA6Ly9taXJyb3IuY3NjbHViLnV3YXRlcmxvby5jYS94Lm9yZy9jdXJyZW50L3NyYy94c2VydmVyL3hvcmctc2VydmVyLTEuMTIuMi50YXIuYnoyKS4KKworVGhpcyBmaXhlcyBhIGNvbXBhdGliaWxpdHkgaXNzdWUgYmV0d2VlbiB2ODZkIGFuZCBTZWFCSU9TIFZHQSBCSU9TIHdoZXJlCit0aGUgbGVhbCBpbnN0cnVjdGlvbiBpcyBub3QgZGVjb2RlZCBwcm9wZXJseS4gUmVhZCB0aGUKK2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuZW11bGF0b3JzLnFlbXUvMjcxODA2IHRocmVhZCBmb3IgbW9yZQorZGV0YWlscy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBXYWxsZSA8YmVybmhhcmRAYndhbGxlLmRlPgorLS0tCisgbGlicy94ODZlbXUvTElDRU5TRSAgICAgICAgICAgICAgIHwgICAxNyAtCisgbGlicy94ODZlbXUvZGVidWcuYyAgICAgICAgICAgICAgIHwgIDUwOSArKystLS0KKyBsaWJzL3g4NmVtdS9kZWNvZGUuYyAgICAgICAgICAgICAgfCAxMDY5ICsrKysrKy0tLS0tLQorIGxpYnMveDg2ZW11L2ZwdS5jICAgICAgICAgICAgICAgICB8ICA0NjMgKysrLS0tCisgbGlicy94ODZlbXUvb3BzLmMgICAgICAgICAgICAgICAgIHwgMjk0MCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9vcHMyLmMgICAgICAgICAgICAgICAgfCAxOTI5ICsrKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9wcmltX29wcy5jICAgICAgICAgICAgfCAzMjE5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyBsaWJzL3g4NmVtdS9zeXMuYyAgICAgICAgICAgICAgICAgfCAgNTgzICsrKy0tLS0KKyBsaWJzL3g4NmVtdS92YWxpZGF0ZS5jICAgICAgICAgICAgfCAgIDUyICstCisgbGlicy94ODZlbXUveDg2ZW11LmggICAgICAgICAgICAgIHwgICA3NSArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oICAgICAgICB8ICAxNjMgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvZGVjb2RlLmggICAgICAgfCAgIDU3ICstCisgbGlicy94ODZlbXUveDg2ZW11L2ZwdS5oICAgICAgICAgIHwgICAyMyArLQorIGxpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oICAgICB8ICAgNDQgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvb3BzLmggICAgICAgICAgfCAgICA2ICstCisgbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggICAgIHwgIDI1MSArKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCAgICAgfCAgMTg4ICstLQorIGxpYnMveDg2ZW11L3g4NmVtdS9wcmltX3g4Nl9nY2MuaCB8ICAgNzcgKworIGxpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggICAgICAgICB8ICAxMDEgKy0KKyBsaWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCAgICAgICAgfCAgIDUwICstCisgbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaCAgICAgIHwgICAzNCArLQorIDIxIGZpbGVzIGNoYW5nZWQsIDYzNzkgaW5zZXJ0aW9ucygrKSwgNTQ3MSBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgbGlicy94ODZlbXUvTElDRU5TRQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKKworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L0xJQ0VOU0UgYi9saWJzL3g4NmVtdS9MSUNFTlNFCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGEzZWRlNGEuLjAwMDAwMDAKKy0tLSBhL2xpYnMveDg2ZW11L0xJQ0VOU0UKKysrKyAvZGV2L251bGwKK0BAIC0xLDE3ICswLDAgQEAKKy0gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZSBpbmZvcm1hdGlvbgorLSAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tCistCistVGhlIHg4NmVtdSBsaWJyYXJ5IGlzIHVuZGVyIGEgQlNEIHN0eWxlIGxpY2Vuc2UsIGNvbWFwdGlibGUKKy13aXRoIHRoZSBYRnJlZTg2IGFuZCBYIGxpY2Vuc2VzIHVzZWQgYnkgWEZyZWU4Ni4gVGhlCistb3JpZ2luYWwgeDg2ZW11IGxpYnJhcmllcyB3ZXJlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKy1MaWNlbnNlLiBEdWUgdG8gbGljZW5zZSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSBHUEwKKy1hbmQgdGhlIFhGcmVlODYgbGljZW5zZSwgdGhlIG9yaWdpbmFsIGF1dGhvcnMgb2YgdGhlIGNvZGUKKy1kZWNpZGVkIHRvIGFsbG93IGEgbGljZW5zZSBjaGFuZ2UuIElmIHlvdSBoYXZlIHN1Ym1pdHRlZAorLWNvZGUgdG8gdGhlIG9yaWdpbmFsIHg4NmVtdSBwcm9qZWN0LCBhbmQgeW91IGRvbid0IGFncmVlCistd2l0aCB0aGUgbGljZW5zZSBjaGFuZ2UsIHBsZWFzZSBjb250YWN0IHVzIGFuZCBsZXQgeW91Cista25vdy4gWW91ciBjb2RlIHdpbGwgYmUgcmVtb3ZlZCB0byBjb21wbHkgd2l0aCB5b3VyIHdpc2hlcy4KKy0KKy1JZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMsIHBsZWFzZSBzZW5kIGVtYWlsIHRvCisteDg2ZW11QGxpbnV4bGFicy5jb20gb3IgS2VuZGFsbEJAc2NpdGVjaHNvZnQuY29tIGZvcgorLWNsYXJpZmljYXRpb24uCistCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZGVidWcuYyBiL2xpYnMveDg2ZW11L2RlYnVnLmMKK2luZGV4IDZmZDdmMTEuLjFhOGQxZDYgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWJ1Zy5jCisrKysgYi9saWJzL3g4NmVtdS9kZWJ1Zy5jCitAQCAtMzgsNiArMzgsOCBAQAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCisgI2luY2x1ZGUgIng4NmVtdS94ODZlbXVpLmgiCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RkYXJnLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQ3LDQ2ICs0OSw1MSBAQAorIAorICNpZmRlZiBERUJVRworIAorLXN0YXRpYyB2b2lkICAgICBwcmludF9lbmNvZGVkX2J5dGVzICh1MTYgcywgdTE2IG8pOworLXN0YXRpYyB2b2lkICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKTsKKy1zdGF0aWMgaW50ICAgICAgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKTsKKy0gIAorK3N0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKTsKKytzdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKHZvaWQpOworK3N0YXRpYyBpbnQgcGFyc2VfbGluZShjaGFyICpzLCBpbnQgKnBzLCBpbnQgKm4pOworKworIC8qIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIGRlYnVnJ3Mgb3V0cHV0LiAqLworLXZvaWQgWDg2RU1VX3RyYWNlX3JlZ3MgKHZvaWQpCisrdm9pZAorK1g4NkVNVV90cmFjZV9yZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfcmVncygpOworKyAgICBpZiAoREVCVUdfVFJBQ0UoKSkgeworKyAgICAgICAgeDg2ZW11X2R1bXBfcmVncygpOworICAgICB9CistCWlmIChERUJVR19ERUNPREUoKSAmJiAhIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkpIHsKKy0JCXByaW50aygiJTA0eDolMDR4ICIsTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKy0JCXByaW50X2VuY29kZWRfYnl0ZXMoIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CistCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIGlmIChERUJVR19ERUNPREUoKSAmJiAhREVCVUdfREVDT0RFX05PUFJJTlQoKSkgeworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgICAgIHByaW50X2RlY29kZWRfaW5zdHJ1Y3Rpb24oKTsKKyAgICAgfQorIH0KKyAKKy12b2lkIFg4NkVNVV90cmFjZV94cmVncyAodm9pZCkKKyt2b2lkCisrWDg2RU1VX3RyYWNlX3hyZWdzKHZvaWQpCisgeworLQlpZiAoREVCVUdfVFJBQ0UoKSkgeworLQkJeDg2ZW11X2R1bXBfeHJlZ3MoKTsKKysgICAgaWYgKERFQlVHX1RSQUNFKCkpIHsKKysgICAgICAgIHg4NmVtdV9kdW1wX3hyZWdzKCk7CisgICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSAodm9pZCkKKyt2b2lkCisreDg2ZW11X2p1c3RfZGlzYXNzZW1ibGUodm9pZCkKKyB7CisgICAgIC8qCisgICAgICAqIFRoaXMgcm91dGluZSBjYWxsZWQgaWYgdGhlIGZsYWcgREVCVUdfRElTQVNTRU1CTEUgaXMgc2V0IGtpbmQKKyAgICAgICogb2YgYSBoYWNrIQorICAgICAgKi8KKy0JcHJpbnRrKCIlMDR4OiUwNHggIixNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9lbmNvZGVkX2J5dGVzKCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworLQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4ICIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIHByaW50X2VuY29kZWRfYnl0ZXMoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbigpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKytzdGF0aWMgdm9pZAorK2Rpc2Fzc2VtYmxlX2ZvcndhcmQodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgeworLQlYODZFTVVfc3lzRW52IHRyZWdzOworLQlpbnQgaTsKKy0JdTggb3AxOworKyAgICBYODZFTVVfc3lzRW52IHRyZWdzOworKyAgICBpbnQgaTsKKysgICAgdTggb3AxOworKworICAgICAvKgorICAgICAgKiBoYWNrLCBoYWNrLCBoYWNrLiAgV2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGV4YWN0IG1hY2hpbmVyeSBzZXQgdXAKKyAgICAgICogZm9yIGV4ZWN1dGlvbiwgZXhjZXB0IHRoYXQgbm93IHRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgc3RhdGUKK0BAIC0xMTEsMTcgKzExOCwxNyBAQCBzdGF0aWMgdm9pZCBkaXNhc3NlbWJsZV9mb3J3YXJkICh1MTYgc2VnLCB1MTYgb2ZmLCBpbnQgbikKKyAgICAgICogVGhpcyB3YXMgZG9uZSBmb3IgYW4gZW50aXJlbHkgZGlmZmVyZW50IHJlYXNvbiwgYnV0IG1ha2VzIGEKKyAgICAgICogbmljZSB3YXkgdG8gZ2V0IHRoZSBzeXN0ZW0gdG8gaGVscCBkZWJ1ZyBjb2Rlcy4KKyAgICAgICovCistCXRyZWdzID0gTTsKKysgICAgdHJlZ3MgPSBNOworICAgICB0cmVncy54ODYuUl9JUCA9IG9mZjsKKyAgICAgdHJlZ3MueDg2LlJfQ1MgPSBzZWc7CistICAgIAorKworICAgICAvKiByZXNldCB0aGUgZGVjb2RpbmcgYnVmZmVycyAqLworICAgICB0cmVncy54ODYuZW5jX3N0cl9wb3MgPSAwOworICAgICB0cmVncy54ODYuZW5jX3BvcyA9IDA7CistICAgIAorKworICAgICAvKiB0dXJuIG9uIHRoZSAiZGlzYXNzZW1ibGUgb25seSwgbm8gZXhlY3V0ZSIgZmxhZyAqLworICAgICB0cmVncy54ODYuZGVidWcgfD0gREVCVUdfRElTQVNTRU1CTEVfRjsKKy0gCisrCisgICAgIC8qIERVTVAgTkVYVCBuIGluc3RydWN0aW9ucyB0byBzY3JlZW4gaW4gc3RyYWlnaHRfbGluZSBmYXNoaW9uICovCisgICAgIC8qCisgICAgICAqIFRoaXMgbG9va3MgbGlrZSB0aGUgcmVndWxhciBpbnN0cnVjdGlvbiBmZXRjaCBzdHJlYW0sIGV4Y2VwdAorQEAgLTEzMCwyOTkgKzEzNywzNTkgQEAgc3RhdGljIHZvaWQgZGlzYXNzZW1ibGVfZm9yd2FyZCAodTE2IHNlZywgdTE2IG9mZiwgaW50IG4pCisgICAgICAqIHRoZSBpbnN0cnVjdGlvbi4gIFhYWCAtLS0gQ0hFQ0sgVEhBVCBNRU0gSVMgTk9UIEFGRkVDVEVEISEhCisgICAgICAqIE5vdGUgdGhlIHVzZSBvZiBhIGNvcHkgb2YgdGhlIHJlZ2lzdGVyIHN0cnVjdHVyZS4uLgorICAgICAgKi8KKy0gICAgZm9yIChpPTA7IGk8bjsgaSsrKSB7CistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1M8PDQpICsgKE0ueDg2LlJfSVArKykpOworLQkJKHg4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICh4ODZlbXVfb3B0YWJbb3AxXSkgKG9wMSk7CisgICAgIH0KKyAgICAgLyogZW5kIG1ham9yIGhhY2sgbW9kZS4gKi8KKyB9CisgCistdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzICh2b2lkKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpCisgeworICAgICAvKiBOVUxMIGFzIG9mIG5vdyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9jaGVja19zcF9hY2Nlc3Modm9pZCkKKyB7CisgfQorIAorLXZvaWQgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MgKHUzMiBkdW1teSkKKyt2b2lkCisreDg2ZW11X2NoZWNrX21lbV9hY2Nlc3ModTMyIGR1bW15KQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyAodWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorK3ZvaWQKKyt4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3ModWludCBkdW1teTEsIHVpbnQgZHVtbXkyKQorIHsKKy0JLyogIGNoZWNrIGJvdW5kcywgZXRjICovCisrICAgIC8qICBjaGVjayBib3VuZHMsIGV0YyAqLworIH0KKyAKKy12b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbiAoaW50IHgpCisrdm9pZAorK3g4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCkKKyB7CistCU0ueDg2LmVuY19wb3MgKz0geDsKKysgICAgTS54ODYuZW5jX3BvcyArPSB4OworIH0KKyAKKy12b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmIChjaGFyICp4KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50Zihjb25zdCBjaGFyICp4KQorIHsKKy0Jc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZitNLng4Ni5lbmNfc3RyX3BvcywiJXMiLHgpOworLQlNLng4Ni5lbmNfc3RyX3BvcyArPSBzdHJsZW4oeCk7CisrICAgIHNwcmludGYoTS54ODYuZGVjb2RlZF9idWYgKyBNLng4Ni5lbmNfc3RyX3BvcywgIiVzIiwgeCk7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zICs9IHN0cmxlbih4KTsKKyB9CisgCistdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIgKGNoYXIgKngsIGludCB5KQorK3ZvaWQKKyt4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpCisgeworLQljaGFyIHRlbXBbMTAwXTsKKy0Jc3ByaW50Zih0ZW1wLHgseSk7CistCXNwcmludGYoTS54ODYuZGVjb2RlZF9idWYrTS54ODYuZW5jX3N0cl9wb3MsIiVzIix0ZW1wKTsKKy0JTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworKyAgICBjaGFyIHRlbXBbMTAwXTsKKysKKysgICAgc25wcmludGYodGVtcCwgc2l6ZW9mKHRlbXApLCB4LCB5KTsKKysgICAgc3ByaW50ZihNLng4Ni5kZWNvZGVkX2J1ZiArIE0ueDg2LmVuY19zdHJfcG9zLCAiJXMiLCB0ZW1wKTsKKysgICAgTS54ODYuZW5jX3N0cl9wb3MgKz0gc3RybGVuKHRlbXApOworIH0KKyAKKy12b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9lbmRfaW5zdHIodm9pZCkKKyB7CistCU0ueDg2LmVuY19zdHJfcG9zID0gMDsKKy0JTS54ODYuZW5jX3BvcyA9IDA7CisrICAgIE0ueDg2LmVuY19zdHJfcG9zID0gMDsKKysgICAgTS54ODYuZW5jX3BvcyA9IDA7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X2VuY29kZWRfYnl0ZXMgKHUxNiBzLCB1MTYgbykKKytzdGF0aWMgdm9pZAorK3ByaW50X2VuY29kZWRfYnl0ZXModTE2IHMsIHUxNiBvKQorIHsKKyAgICAgaW50IGk7CisgICAgIGNoYXIgYnVmMVs2NF07CistCWZvciAoaT0wOyBpPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKy0JCXNwcmludGYoYnVmMSsyKmksIiUwMngiLCBmZXRjaF9kYXRhX2J5dGVfYWJzKHMsbytpKSk7CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBNLng4Ni5lbmNfcG9zOyBpKyspIHsKKysgICAgICAgIHNwcmludGYoYnVmMSArIDIgKiBpLCAiJTAyeCIsIGZldGNoX2RhdGFfYnl0ZV9hYnMocywgbyArIGkpKTsKKyAgICAgfQorLQlwcmludGsoIiUtMjBzIixidWYxKTsKKysgICAgcHJpbnRrKCIlLTIwcyIsIGJ1ZjEpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICh2b2lkKQorK3N0YXRpYyB2b2lkCisrcHJpbnRfZGVjb2RlZF9pbnN0cnVjdGlvbih2b2lkKQorIHsKKy0JcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKysgICAgcHJpbnRrKCIlcyIsIE0ueDg2LmRlY29kZWRfYnVmKTsKKyB9CisgCistdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdikKKyt2b2lkCisreDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdikKKyB7CistCXUxNiBzZWcsb2ZmOworKyAgICB1MTYgc2VnLCBvZmY7CisgCistCWlmIChpdiA+IDI1NikgcmV0dXJuOworLQlzZWcgICA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCxpdio0KTsKKy0Jb2ZmICAgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKDAsaXYqNCsyKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworKyAgICBpZiAoaXYgPiAyNTYpCisrICAgICAgICByZXR1cm47CisrICAgIHNlZyA9IGZldGNoX2RhdGFfd29yZF9hYnMoMCwgaXYgKiA0KTsKKysgICAgb2ZmID0gZmV0Y2hfZGF0YV93b3JkX2FicygwLCBpdiAqIDQgKyAyKTsKKysgICAgcHJpbnRrKCIlMDR4OiUwNHggIiwgc2VnLCBvZmYpOworIH0KKyAKKy12b2lkIFg4NkVNVV9kdW1wX21lbW9yeSAodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCkKKyt2b2lkCisrWDg2RU1VX2R1bXBfbWVtb3J5KHUxNiBzZWcsIHUxNiBvZmYsIHUzMiBhbXQpCisgeworLQl1MzIgc3RhcnQgPSBvZmYgJiAweGZmZmZmZmYwOworLQl1MzIgZW5kICA9IChvZmYrMTYpICYgMHhmZmZmZmZmMDsKKy0JdTMyIGk7CistCXUzMiBjdXJyZW50OworLQorLQljdXJyZW50ID0gc3RhcnQ7CistCXdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CistCQlwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKy0JCWZvciAoaT1zdGFydDsgaTwgb2ZmOyBpKyspCistCQkgIHByaW50aygiICAgIik7CistCQlmb3IgKCAgICAgICA7IGk8IGVuZDsgaSsrKQorLQkJICBwcmludGsoIiUwMnggIiwgZmV0Y2hfZGF0YV9ieXRlX2FicyhzZWcsaSkpOworLQkJcHJpbnRrKCJcbiIpOworLQkJc3RhcnQgPSBlbmQ7CistCQllbmQgPSBzdGFydCArIDE2OworLQl9CisrICAgIHUzMiBzdGFydCA9IG9mZiAmIDB4ZmZmZmZmZjA7CisrICAgIHUzMiBlbmQgPSAob2ZmICsgMTYpICYgMHhmZmZmZmZmMDsKKysgICAgdTMyIGk7CisrICAgIHUzMiBjdXJyZW50OworKworKyAgICBjdXJyZW50ID0gc3RhcnQ7CisrICAgIHdoaWxlIChlbmQgPD0gb2ZmICsgYW10KSB7CisrICAgICAgICBwcmludGsoIiUwNHg6JTA0eCAiLCBzZWcsIHN0YXJ0KTsKKysgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgb2ZmOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIgICAiKTsKKysgICAgICAgIGZvciAoOyBpIDwgZW5kOyBpKyspCisrICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIGZldGNoX2RhdGFfYnl0ZV9hYnMoc2VnLCBpKSk7CisrICAgICAgICBwcmludGsoIlxuIik7CisrICAgICAgICBzdGFydCA9IGVuZDsKKysgICAgICAgIGVuZCA9IHN0YXJ0ICsgMTY7CisrICAgIH0KKyB9CisgCistdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9zaW5nbGVfc3RlcCh2b2lkKQorIHsKKyAgICAgY2hhciBzWzEwMjRdOworICAgICBpbnQgcHNbMTBdOworICAgICBpbnQgbnRvazsKKyAgICAgaW50IGNtZDsKKyAgICAgaW50IGRvbmU7CistCQlpbnQgc2VnbWVudDsKKysgICAgaW50IHNlZ21lbnQ7CisgICAgIGludCBvZmZzZXQ7CisgICAgIHN0YXRpYyBpbnQgYnJlYWtwb2ludDsKKyAgICAgc3RhdGljIGludCBub0RlY29kZSA9IDE7CistICAgIAorKworICAgICBjaGFyICpwOworIAorLQkJaWYgKERFQlVHX0JSRUFLKCkpIHsKKy0JCQkJaWYgKE0ueDg2LnNhdmVkX2lwICE9IGJyZWFrcG9pbnQpIHsKKy0JCQkJCQlyZXR1cm47CistCQkJCX0gZWxzZSB7CistIAkgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQkJCQkJTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKy0JCQkJCQlNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKy0JCQkJCQlwcmludF9kZWNvZGVkX2luc3RydWN0aW9uICgpOworLQkJCQkJCVg4NkVNVV90cmFjZV9yZWdzKCk7CistCQkJCX0KKy0JCX0KKy0gICAgZG9uZT0wOworLQlvZmZzZXQgPSBNLng4Ni5zYXZlZF9pcDsKKysgICAgaWYgKERFQlVHX0JSRUFLKCkpIHsKKysgICAgICAgIGlmIChNLng4Ni5zYXZlZF9pcCAhPSBicmVha3BvaW50KSB7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgJj0gfkRFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CisrICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfVFJBQ0VfRjsKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyAmPSB+REVCVUdfQlJFQUtfRjsKKysgICAgICAgICAgICBwcmludF9kZWNvZGVkX2luc3RydWN0aW9uKCk7CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICBkb25lID0gMDsKKysgICAgb2Zmc2V0ID0gTS54ODYuc2F2ZWRfaXA7CisgICAgIHdoaWxlICghZG9uZSkgeworICAgICAgICAgcHJpbnRrKCItIik7CisgICAgICAgICBwID0gZmdldHMocywgMTAyMywgc3RkaW4pOworICAgICAgICAgY21kID0gcGFyc2VfbGluZShzLCBwcywgJm50b2spOworLSAgICAgICAgc3dpdGNoKGNtZCkgeworLSAgICAgICAgICBjYXNlICd1JzoKKy0JCQlkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCh1MTYpb2Zmc2V0LDEwKTsKKysgICAgICAgIHN3aXRjaCAoY21kKSB7CisrICAgICAgICBjYXNlICd1JzoKKysgICAgICAgICAgICBkaXNhc3NlbWJsZV9mb3J3YXJkKE0ueDg2LnNhdmVkX2NzLCAodTE2KSBvZmZzZXQsIDEwKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZCc6ICAKKy0JCQkJCQkJaWYgKG50b2sgPT0gMikgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1sxXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgaWYgKG50b2sgPT0gMykgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBwc1sxXTsKKy0JCQkJCQkJCQlvZmZzZXQgPSBwc1syXTsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9IGVsc2UgeworLQkJCQkJCQkJCXNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKy0JCQkJCQkJCQlYODZFTVVfZHVtcF9tZW1vcnkoc2VnbWVudCwodTE2KW9mZnNldCwxNik7CistCQkJCQkJCQkJb2Zmc2V0ICs9IDE2OworLQkJCQkJCQl9CisrICAgICAgICBjYXNlICdkJzoKKysgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisrICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBNLng4Ni5zYXZlZF9jczsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcHNbMV07CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIGlmIChudG9rID09IDMpIHsKKysgICAgICAgICAgICAgICAgc2VnbWVudCA9IHBzWzFdOworKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBwc1syXTsKKysgICAgICAgICAgICAgICAgWDg2RU1VX2R1bXBfbWVtb3J5KHNlZ21lbnQsICh1MTYpIG9mZnNldCwgMTYpOworKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMTY7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICBzZWdtZW50ID0gTS54ODYuc2F2ZWRfY3M7CisrICAgICAgICAgICAgICAgIFg4NkVNVV9kdW1wX21lbW9yeShzZWdtZW50LCAodTE2KSBvZmZzZXQsIDE2KTsKKysgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE2OworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnYyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfVFJBQ0VDQUxMX0Y7CisrICAgICAgICBjYXNlICdjJzoKKysgICAgICAgICAgICBNLng4Ni5kZWJ1ZyBePSBERUJVR19UUkFDRUNBTExfRjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAncyc6CistCQkJTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworKyAgICAgICAgY2FzZSAncyc6CisrICAgICAgICAgICAgTS54ODYuZGVidWcgXj0gREVCVUdfU1ZDX0YgfCBERUJVR19TWVNfRiB8IERFQlVHX1NZU0lOVF9GOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlICdyJzoKKy0JCQlYODZFTVVfdHJhY2VfcmVncygpOworKyAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgWDg2RU1VX3RyYWNlX3JlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAneCc6CistCQkJWDg2RU1VX3RyYWNlX3hyZWdzKCk7CisrICAgICAgICBjYXNlICd4JzoKKysgICAgICAgICAgICBYODZFTVVfdHJhY2VfeHJlZ3MoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAnZyc6CisrICAgICAgICBjYXNlICdnJzoKKyAgICAgICAgICAgICBpZiAobnRvayA9PSAyKSB7CisgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQgPSBwc1sxXTsKKy0JCWlmIChub0RlY29kZSkgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0RFQ09ERV9OT1BSSU5UX0Y7CistCQl9IGVsc2UgeworLQkJICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworLQkJfQorLQkJTS54ODYuZGVidWcgJj0gfkRFQlVHX1RSQUNFX0Y7CistCQlNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworLQkJZG9uZSA9IDE7CisrICAgICAgICAgICAgICAgIGlmIChub0RlY29kZSkgeworKyAgICAgICAgICAgICAgICAgICAgTS54ODYuZGVidWcgfD0gREVCVUdfREVDT0RFX05PUFJJTlRfRjsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19ERUNPREVfTk9QUklOVF9GOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19UUkFDRV9GOworKyAgICAgICAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19CUkVBS19GOworKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3EnOgorLSAgICAgICAgICBNLng4Ni5kZWJ1ZyB8PSBERUJVR19FWElUOworLSAgICAgICAgICByZXR1cm47CistCSAgY2FzZSAnUCc6CistCSAgICAgIG5vRGVjb2RlID0gKG5vRGVjb2RlKT8wOjE7CistCSAgICAgIHByaW50aygiVG9nZ2xlZCBkZWNvZGluZyB0byAlc1xuIiwobm9EZWNvZGUpPyJGQUxTRSI6IlRSVUUiKTsKKy0JICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgJ3QnOgorLQkgIGNhc2UgMDoKKysgICAgICAgIGNhc2UgJ3EnOgorKyAgICAgICAgICAgIE0ueDg2LmRlYnVnIHw9IERFQlVHX0VYSVQ7CisrICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgY2FzZSAnUCc6CisrICAgICAgICAgICAgbm9EZWNvZGUgPSAobm9EZWNvZGUpID8gMCA6IDE7CisrICAgICAgICAgICAgcHJpbnRrKCJUb2dnbGVkIGRlY29kaW5nIHRvICVzXG4iLCAobm9EZWNvZGUpID8gIkZBTFNFIiA6ICJUUlVFIik7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlICd0JzoKKysgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gICAKKysgICAgICAgIH0KKyAgICAgfQorIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29uKHZvaWQpCisraW50CisrWDg2RU1VX3RyYWNlX29uKHZvaWQpCisgeworLQlyZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworKyAgICByZXR1cm4gTS54ODYuZGVidWcgfD0gREVCVUdfU1RFUF9GIHwgREVCVUdfREVDT0RFX0YgfCBERUJVR19UUkFDRV9GOworIH0KKyAKKy1pbnQgWDg2RU1VX3RyYWNlX29mZih2b2lkKQorK2ludAorK1g4NkVNVV90cmFjZV9vZmYodm9pZCkKKyB7CistCXJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisrICAgIHJldHVybiBNLng4Ni5kZWJ1ZyAmPSB+KERFQlVHX1NURVBfRiB8IERFQlVHX0RFQ09ERV9GIHwgREVCVUdfVFJBQ0VfRik7CisgfQorIAorLXN0YXRpYyBpbnQgcGFyc2VfbGluZSAoY2hhciAqcywgaW50ICpwcywgaW50ICpuKQorK3N0YXRpYyBpbnQKKytwYXJzZV9saW5lKGNoYXIgKnMsIGludCAqcHMsIGludCAqbikKKyB7CisgICAgIGludCBjbWQ7CisgCisgICAgICpuID0gMDsKKy0gICAgd2hpbGUoKnMgPT0gJyAnIHx8ICpzID09ICdcdCcpIHMrKzsKKysgICAgd2hpbGUgKCpzID09ICcgJyB8fCAqcyA9PSAnXHQnKQorKyAgICAgICAgcysrOworICAgICBwc1sqbl0gPSAqczsKKyAgICAgc3dpdGNoICgqcykgeworLSAgICAgIGNhc2UgJ1xuJzoKKysgICAgY2FzZSAnXG4nOgorICAgICAgICAgKm4gKz0gMTsKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGRlZmF1bHQ6CisrICAgIGRlZmF1bHQ6CisgICAgICAgICBjbWQgPSAqczsKKyAgICAgICAgICpuICs9IDE7CisgICAgIH0KKyAKKy0Jd2hpbGUgKDEpIHsKKy0JCXdoaWxlICgqcyAhPSAnICcgJiYgKnMgIT0gJ1x0JyAmJiAqcyAhPSAnXG4nKSAgcysrOworLQkJCistCQlpZiAoKnMgPT0gJ1xuJykKKy0JCQlyZXR1cm4gY21kOworLQkJCistCQl3aGlsZSgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykgcysrOworLQkJCistCQlzc2NhbmYocywiJXgiLCZwc1sqbl0pOworLQkJKm4gKz0gMTsKKy0JfQorKyAgICB3aGlsZSAoMSkgeworKyAgICAgICAgd2hpbGUgKCpzICE9ICcgJyAmJiAqcyAhPSAnXHQnICYmICpzICE9ICdcbicpCisrICAgICAgICAgICAgcysrOworKworKyAgICAgICAgaWYgKCpzID09ICdcbicpCisrICAgICAgICAgICAgcmV0dXJuIGNtZDsKKysKKysgICAgICAgIHdoaWxlICgqcyA9PSAnICcgfHwgKnMgPT0gJ1x0JykKKysgICAgICAgICAgICBzKys7CisrCisrICAgICAgICBzc2NhbmYocywgIiV4IiwgJnBzWypuXSk7CisrICAgICAgICAqbiArPSAxOworKyAgICB9CisgfQorIAorLSNlbmRpZiAvKiBERUJVRyAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogREVCVUcgKi8KKyAKKy12b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpCisrdm9pZAorK3g4NmVtdV9kdW1wX3JlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRBWD0lMDR4ICAiLCBNLng4Ni5SX0FYICk7CistCXByaW50aygiQlg9JTA0eCAgIiwgTS54ODYuUl9CWCApOworLQlwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1ggKTsKKy0JcHJpbnRrKCJEWD0lMDR4ICAiLCBNLng4Ni5SX0RYICk7CistCXByaW50aygiU1A9JTA0eCAgIiwgTS54ODYuUl9TUCApOworLQlwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlAgKTsKKy0JcHJpbnRrKCJTST0lMDR4ICAiLCBNLng4Ni5SX1NJICk7CistCXByaW50aygiREk9JTA0eFxuIiwgTS54ODYuUl9ESSApOworLQlwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyApOworLQlwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMgKTsKKy0JcHJpbnRrKCJTUz0lMDR4ICAiLCBNLng4Ni5SX1NTICk7CistCXByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyApOworLQlwcmludGsoIklQPSUwNHggICAiLCBNLng4Ni5SX0lQICk7CistCWlmIChBQ0NFU1NfRkxBRyhGX09GKSkgICAgcHJpbnRrKCJPViAiKTsgICAgIC8qIENIRUNLRUQuLi4gKi8KKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlYgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgcHJpbnRrKCJETiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiVVAgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0lGKSkgICAgcHJpbnRrKCJFSSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiREkgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1NGKSkgICAgcHJpbnRrKCJORyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUEwgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1pGKSkgICAgcHJpbnRrKCJaUiAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTlogIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0FGKSkgICAgcHJpbnRrKCJBQyAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkEgIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX1BGKSkgICAgcHJpbnRrKCJQRSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiUE8gIik7CistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgICAgcHJpbnRrKCJDWSAiKTsKKy0JZWxzZSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiTkMgIik7CistCXByaW50aygiXG4iKTsKKysgICAgcHJpbnRrKCJcdEFYPSUwNHggICIsIE0ueDg2LlJfQVgpOworKyAgICBwcmludGsoIkJYPSUwNHggICIsIE0ueDg2LlJfQlgpOworKyAgICBwcmludGsoIkNYPSUwNHggICIsIE0ueDg2LlJfQ1gpOworKyAgICBwcmludGsoIkRYPSUwNHggICIsIE0ueDg2LlJfRFgpOworKyAgICBwcmludGsoIlNQPSUwNHggICIsIE0ueDg2LlJfU1ApOworKyAgICBwcmludGsoIkJQPSUwNHggICIsIE0ueDg2LlJfQlApOworKyAgICBwcmludGsoIlNJPSUwNHggICIsIE0ueDg2LlJfU0kpOworKyAgICBwcmludGsoIkRJPSUwNHhcbiIsIE0ueDg2LlJfREkpOworKyAgICBwcmludGsoIlx0RFM9JTA0eCAgIiwgTS54ODYuUl9EUyk7CisrICAgIHByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyk7CisrICAgIHByaW50aygiU1M9JTA0eCAgIiwgTS54ODYuUl9TUyk7CisrICAgIHByaW50aygiQ1M9JTA0eCAgIiwgTS54ODYuUl9DUyk7CisrICAgIHByaW50aygiSVA9JTA0eCAgICIsIE0ueDg2LlJfSVApOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9PRikpCisrICAgICAgICBwcmludGsoIk9WICIpOyAgICAgICAgICAvKiBDSEVDS0VELi4uICovCisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlYgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkKKysgICAgICAgIHByaW50aygiRE4gIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiVVAgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0lGKSkKKysgICAgICAgIHByaW50aygiRUkgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiREkgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1NGKSkKKysgICAgICAgIHByaW50aygiTkcgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUEwgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1pGKSkKKysgICAgICAgIHByaW50aygiWlIgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTlogIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0FGKSkKKysgICAgICAgIHByaW50aygiQUMgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkEgIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKKysgICAgICAgIHByaW50aygiUEUgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiUE8gIik7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHByaW50aygiQ1kgIik7CisrICAgIGVsc2UKKysgICAgICAgIHByaW50aygiTkMgIik7CisrICAgIHByaW50aygiXG4iKTsKKyB9CisgCistdm9pZCB4ODZlbXVfZHVtcF94cmVncyAodm9pZCkKKyt2b2lkCisreDg2ZW11X2R1bXBfeHJlZ3Modm9pZCkKKyB7CistCXByaW50aygiXHRFQVg9JTA4eCAgIiwgTS54ODYuUl9FQVggKTsKKy0JcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlggKTsKKy0JcHJpbnRrKCJFQ1g9JTA4eCAgIiwgTS54ODYuUl9FQ1ggKTsKKy0JcHJpbnRrKCJFRFg9JTA4eCAgXG4iLCBNLng4Ni5SX0VEWCApOworLQlwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQICk7CistCXByaW50aygiRUJQPSUwOHggICIsIE0ueDg2LlJfRUJQICk7CistCXByaW50aygiRVNJPSUwOHggICIsIE0ueDg2LlJfRVNJICk7CistCXByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJICk7CistCXByaW50aygiXHREUz0lMDR4ICAiLCBNLng4Ni5SX0RTICk7CistCXByaW50aygiRVM9JTA0eCAgIiwgTS54ODYuUl9FUyApOworLQlwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MgKTsKKy0JcHJpbnRrKCJDUz0lMDR4ICAiLCBNLng4Ni5SX0NTICk7CistCXByaW50aygiRUlQPSUwOHhcblx0IiwgTS54ODYuUl9FSVAgKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfT0YpKSAgICBwcmludGsoIk9WICIpOyAgICAgLyogQ0hFQ0tFRC4uLiAqLworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOViAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICBwcmludGsoIkROICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJVUCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfSUYpKSAgICBwcmludGsoIkVJICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJESSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfU0YpKSAgICBwcmludGsoIk5HICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTCAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfWkYpKSAgICBwcmludGsoIlpSICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOWiAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQUYpKSAgICBwcmludGsoIkFDICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQSAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfUEYpKSAgICBwcmludGsoIlBFICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJQTyAiKTsKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSAgICBwcmludGsoIkNZICIpOworLQllbHNlICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJOQyAiKTsKKy0JcHJpbnRrKCJcbiIpOworKyAgICBwcmludGsoIlx0RUFYPSUwOHggICIsIE0ueDg2LlJfRUFYKTsKKysgICAgcHJpbnRrKCJFQlg9JTA4eCAgIiwgTS54ODYuUl9FQlgpOworKyAgICBwcmludGsoIkVDWD0lMDh4ICAiLCBNLng4Ni5SX0VDWCk7CisrICAgIHByaW50aygiRURYPSUwOHggIFxuIiwgTS54ODYuUl9FRFgpOworKyAgICBwcmludGsoIlx0RVNQPSUwOHggICIsIE0ueDg2LlJfRVNQKTsKKysgICAgcHJpbnRrKCJFQlA9JTA4eCAgIiwgTS54ODYuUl9FQlApOworKyAgICBwcmludGsoIkVTST0lMDh4ICAiLCBNLng4Ni5SX0VTSSk7CisrICAgIHByaW50aygiRURJPSUwOHhcbiIsIE0ueDg2LlJfRURJKTsKKysgICAgcHJpbnRrKCJcdERTPSUwNHggICIsIE0ueDg2LlJfRFMpOworKyAgICBwcmludGsoIkVTPSUwNHggICIsIE0ueDg2LlJfRVMpOworKyAgICBwcmludGsoIlNTPSUwNHggICIsIE0ueDg2LlJfU1MpOworKyAgICBwcmludGsoIkNTPSUwNHggICIsIE0ueDg2LlJfQ1MpOworKyAgICBwcmludGsoIkVJUD0lMDh4XG5cdCIsIE0ueDg2LlJfRUlQKTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorKyAgICAgICAgcHJpbnRrKCJPViAiKTsgICAgICAgICAgLyogQ0hFQ0tFRC4uLiAqLworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5WICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpCisrICAgICAgICBwcmludGsoIkROICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlVQICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9JRikpCisrICAgICAgICBwcmludGsoIkVJICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIkRJICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9TRikpCisrICAgICAgICBwcmludGsoIk5HICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBMICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9aRikpCisrICAgICAgICBwcmludGsoIlpSICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5aICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9BRikpCisrICAgICAgICBwcmludGsoIkFDICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5BICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9QRikpCisrICAgICAgICBwcmludGsoIlBFICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIlBPICIpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICBwcmludGsoIkNZICIpOworKyAgICBlbHNlCisrICAgICAgICBwcmludGsoIk5DICIpOworKyAgICBwcmludGsoIlxuIik7CisgfQorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L2RlY29kZS5jIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK2luZGV4IDdkOWEzNGEuLjEyZjhmYjggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS9kZWNvZGUuYworKysrIGIvbGlicy94ODZlbXUvZGVjb2RlLmMKK0BAIC00NiwyNSArNDYsMjcgQEAKKyBSRU1BUktTOgorIEhhbmRsZXMgYW55IHBlbmRpbmcgYXN5Y2hyb25vdXMgaW50ZXJydXB0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdV9pbnRyX2hhbmRsZSh2b2lkKQorK3N0YXRpYyB2b2lkCisreDg2ZW11X2ludHJfaGFuZGxlKHZvaWQpCisgeworLQl1OAlpbnRubzsKKy0KKy0JaWYgKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSB7CistCQlpbnRubyA9IE0ueDg2LmludG5vOworLQkJaWYgKF9YODZFTVVfaW50clRhYltpbnRub10pIHsKKy0JCQkoKl9YODZFTVVfaW50clRhYltpbnRub10pKGludG5vKTsKKy0JCX0gZWxzZSB7CistCQkJcHVzaF93b3JkKCh1MTYpTS54ODYuUl9GTEcpOworLQkJCUNMRUFSX0ZMQUcoRl9JRik7CistCQkJQ0xFQVJfRkxBRyhGX1RGKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9DUyk7CistCQkJTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQgKyAyKTsKKy0JCQlwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistCQkJTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChpbnRubyAqIDQpOworLQkJCU0ueDg2LmludHIgPSAwOworLQkJfQorLQl9CisrICAgIHU4IGludG5vOworKworKyAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfU1lOQ0gpIHsKKysgICAgICAgIGludG5vID0gTS54ODYuaW50bm87CisrICAgICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgeworKyAgICAgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG5vXSkgKGludG5vKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKysgICAgICAgICAgICBNLng4Ni5SX0NTID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCArIDIpOworKyAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKysgICAgICAgICAgICBNLng4Ni5SX0lQID0gbWVtX2FjY2Vzc193b3JkKGludG5vICogNCk7CisrICAgICAgICAgICAgTS54ODYuaW50ciA9IDA7CisrICAgICAgICB9CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC03NSwxMSArNzcsMTEgQEAgUkVNQVJLUzoKKyBSYWlzZSB0aGUgc3BlY2lmaWVkIGludGVycnVwdCB0byBiZSBoYW5kbGVkIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIHRoZQorIG5leHQgaW5zdHJ1Y3Rpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHg4NmVtdV9pbnRyX3JhaXNlKAorLQl1OCBpbnRybnVtKQorK3ZvaWQKKyt4ODZlbXVfaW50cl9yYWlzZSh1OCBpbnRybnVtKQorIHsKKy0JTS54ODYuaW50bm8gPSBpbnRybnVtOworLQlNLng4Ni5pbnRyIHw9IElOVFJfU1lOQ0g7CisrICAgIE0ueDg2LmludG5vID0gaW50cm51bTsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX1NZTkNIOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTg4LDM5ICs5MCwzOSBAQCBNYWluIGV4ZWN1dGlvbiBsb29wIGZvciB0aGUgZW11bGF0b3IuIFdlIHJldHVybiBmcm9tIGhlcmUgd2hlbiB0aGUgc3lzdGVtCisgaGFsdHMsIHdoaWNoIGlzIG5vcm1hbGx5IGNhdXNlZCBieSBhIHN0YWNrIGZhdWx0IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlCisgb3JpZ2luYWwgcmVhbCBtb2RlIGNhbGwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9leGVjKHZvaWQpCisrdm9pZAorK1g4NkVNVV9leGVjKHZvaWQpCisgeworLQl1OCBvcDE7CistCistCU0ueDg2LmludHIgPSAwOworLQlEQih4ODZlbXVfZW5kX2luc3RyKCk7KQorLQorLSAgICBmb3IgKDs7KSB7CistREIoCQlpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKy0JCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JCS8qIElmIGRlYnVnZ2luZywgc2F2ZSB0aGUgSVAgYW5kIENTIHZhbHVlcy4gKi8KKy0JCVNBVkVfSVBfQ1MoTS54ODYuUl9DUywgTS54ODYuUl9JUCk7CistCQlJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0JCWlmIChNLng4Ni5pbnRyKSB7CistCQkJaWYgKE0ueDg2LmludHIgJiBJTlRSX0hBTFRFRCkgeworLURCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgICAgICAgICAgICAgICAgICBwcmludGsoImhhbHRlZFxuIik7CistICAgICAgICAgICAgICAgICAgICBYODZFTVVfdHJhY2VfcmVncygpOworLSAgICAgICAgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICAgICBlbHNlIHsKKy0gICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKy0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIlNlcnZpY2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIik7CistICAgICAgICAgICAgICAgICAgICB9KQorLQkJCQlyZXR1cm47CisrICAgIHU4IG9wMTsKKysKKysgICAgTS54ODYuaW50ciA9IDA7CisrICAgIERCKHg4NmVtdV9lbmRfaW5zdHIoKTsKKysgICAgICAgICkKKysKKysgICAgICAgIGZvciAoOzspIHsKKysgICAgICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgICAgICAvKiBJZiBkZWJ1Z2dpbmcsIHNhdmUgdGhlIElQIGFuZCBDUyB2YWx1ZXMuICovCisrICAgICAgICAgICAgU0FWRV9JUF9DUyhNLng4Ni5SX0NTLCBNLng4Ni5SX0lQKTsKKysgICAgICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDEpOworKyAgICAgICAgaWYgKE0ueDg2LmludHIpIHsKKysgICAgICAgICAgICBpZiAoTS54ODYuaW50ciAmIElOVFJfSEFMVEVEKSB7CisrICAgICAgICAgICAgICAgIERCKGlmIChNLng4Ni5SX1NQICE9IDApIHsKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJoYWx0ZWRcbiIpOyBYODZFTVVfdHJhY2VfcmVncygpO30KKysgICAgICAgICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgICAgIGlmIChNLng4Ni5kZWJ1ZykKKysgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJTZXJ2aWNlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiIpO30KKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIH0KKy0JCQlpZiAoKChNLng4Ni5pbnRyICYgSU5UUl9TWU5DSCkgJiYgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CistCQkJCSFBQ0NFU1NfRkxBRyhGX0lGKSkgeworLQkJCQl4ODZlbXVfaW50cl9oYW5kbGUoKTsKKy0JCQl9CistCQl9CistCistCQlvcDEgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CistCQkoKng4NmVtdV9vcHRhYltvcDFdKShvcDEpOworKyAgICAgICAgICAgIGlmICgoKE0ueDg2LmludHIgJiBJTlRSX1NZTkNIKSAmJgorKyAgICAgICAgICAgICAgICAgKE0ueDg2LmludG5vID09IDAgfHwgTS54ODYuaW50bm8gPT0gMikpIHx8CisrICAgICAgICAgICAgICAgICFBQ0NFU1NfRkxBRyhGX0lGKSkgeworKyAgICAgICAgICAgICAgICB4ODZlbXVfaW50cl9oYW5kbGUoKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBvcDEgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgICAgICgqeDg2ZW11X29wdGFiW29wMV0pIChvcDEpOworICAgICAgICAgaWYgKE0ueDg2LmRlYnVnICYgREVCVUdfRVhJVCkgeworICAgICAgICAgICAgIE0ueDg2LmRlYnVnICY9IH5ERUJVR19FWElUOworICAgICAgICAgICAgIHJldHVybjsKK0BAIC0xMzIsOSArMTM0LDEwIEBAIERCKCAgICAgICAgICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CisgUkVNQVJLUzoKKyBIYWx0cyB0aGUgc3lzdGVtIGJ5IHNldHRpbmcgdGhlIGhhbHRlZCBzeXN0ZW0gZmxhZy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX2hhbHRfc3lzKHZvaWQpCisrdm9pZAorK1g4NkVNVV9oYWx0X3N5cyh2b2lkKQorIHsKKy0JTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKysgICAgTS54ODYuaW50ciB8PSBJTlRSX0hBTFRFRDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0xNDksMTkgKzE1MiwxNyBAQCBuZXh0IGluc3RydWN0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmRiKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKAorLQlpbnQgKm1vZCwKKy0JaW50ICpyZWdoLAorLQlpbnQgKnJlZ2wpCisrdm9pZAorK2ZldGNoX2RlY29kZV9tb2RybShpbnQgKm1vZCwgaW50ICpyZWdoLCBpbnQgKnJlZ2wpCisgeworLQlpbnQgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCSptb2QgID0gKGZldGNoZWQgPj4gNikgJiAweDAzOworLQkqcmVnaCA9IChmZXRjaGVkID4+IDMpICYgMHgwNzsKKysgICAgaW50IGZldGNoZWQ7CisrCisrICAgIERCKGlmIChDSEVDS19JUF9GRVRDSCgpKQorKyAgICAgICB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorKyAgICAgICAgZmV0Y2hlZCA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKyAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKysgICAgKm1vZCA9IChmZXRjaGVkID4+IDYpICYgMHgwMzsKKysgICAgKnJlZ2ggPSAoZmV0Y2hlZCA+PiAzKSAmIDB4MDc7CisgICAgICpyZWdsID0gKGZldGNoZWQgPj4gMCkgJiAweDA3OworIH0KKyAKK0BAIC0xNzUsMTUgKzE3NiwxNiBAQCBtb3ZlcyB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgbmV4dCB2YWx1ZS4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24sIGFzICgqc3lzX3JkYikgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9ieXRlX2ltbSh2b2lkKQorK3U4CisrZmV0Y2hfYnl0ZV9pbW0odm9pZCkKKyB7CistCXU4IGZldGNoZWQ7CisrICAgIHU4IGZldGNoZWQ7CisgCistREIoCWlmIChDSEVDS19JUF9GRVRDSCgpKQorLQkJeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkYikoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CistCXJldHVybiBmZXRjaGVkOworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZGIpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKyspKTsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMSk7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTE5NiwxNiArMTk4LDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF93b3JkX2ltbSh2b2lkKQorK3UxNgorK2ZldGNoX3dvcmRfaW1tKHZvaWQpCisgeworLQl1MTYJZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCQl4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKCk7KQorLQlmZXRjaGVkID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVApKTsKKy0JTS54ODYuUl9JUCArPSAyOworLQlJTkNfREVDT0RFRF9JTlNUX0xFTigyKTsKKy0JcmV0dXJuIGZldGNoZWQ7CisrICAgIHUxNiBmZXRjaGVkOworKworKyAgICBEQihpZiAoQ0hFQ0tfSVBfRkVUQ0goKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKysgICAgICAgIGZldGNoZWQgPSAoKnN5c19yZHcpICgoKHUzMikgTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CisrICAgIE0ueDg2LlJfSVAgKz0gMjsKKysgICAgSU5DX0RFQ09ERURfSU5TVF9MRU4oMik7CisrICAgIHJldHVybiBmZXRjaGVkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTIxOCwxNiArMjIxLDE3IEBAIG1vdmVzIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIHRvIHRoZSBuZXh0IHZhbHVlLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiwgYXMgKCpzeXNfcmR3KSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKQorK3UzMgorK2ZldGNoX2xvbmdfaW1tKHZvaWQpCisgeworLQl1MzIgZmV0Y2hlZDsKKy0KKy1EQigJaWYgKENIRUNLX0lQX0ZFVENIKCkpCistCSAgeDg2ZW11X2NoZWNrX2lwX2FjY2VzcygpOykKKy0JZmV0Y2hlZCA9ICgqc3lzX3JkbCkoKCh1MzIpTS54ODYuUl9DUyA8PCA0KSArIChNLng4Ni5SX0lQKSk7CistCU0ueDg2LlJfSVAgKz0gNDsKKy0JSU5DX0RFQ09ERURfSU5TVF9MRU4oNCk7CistCXJldHVybiBmZXRjaGVkOworKyAgICB1MzIgZmV0Y2hlZDsKKysKKysgICAgREIoaWYgKENIRUNLX0lQX0ZFVENIKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MoKTspCisrICAgICAgICBmZXRjaGVkID0gKCpzeXNfcmRsKSAoKCh1MzIpIE0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCkpOworKyAgICBNLng4Ni5SX0lQICs9IDQ7CisrICAgIElOQ19ERUNPREVEX0lOU1RfTEVOKDQpOworKyAgICByZXR1cm4gZmV0Y2hlZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNTksMzggKzI2MywzOSBAQCBjcHUtc3RhdGUtdmFyaWJsZSBNLng4Ni5tb2RlLiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgc3RhdGVzOgorIAorIEVhY2ggb2YgdGhlIGFib3ZlIDcgaXRlbXMgYXJlIGhhbmRsZWQgd2l0aCBhIGJpdCBpbiB0aGUgbW9kZSBmaWVsZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLV9JTkxJTkUgdTMyIGdldF9kYXRhX3NlZ21lbnQodm9pZCkKKytfSU5MSU5FIHUzMgorK2dldF9kYXRhX3NlZ21lbnQodm9pZCkKKyB7CisgI2RlZmluZQlHRVRfU0VHTUVOVChzZWdtZW50KQorLQlzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKy0JICBjYXNlIDA6CQkJCQkvKiBkZWZhdWx0IGNhc2U6IHVzZSBkcyByZWdpc3RlciAqLworLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRFM6CistCSAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorLQkJcmV0dXJuICBNLng4Ni5SX0RTOworLQkgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6CS8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfQ1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9DUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0VTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRVMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9FUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0ZTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9GUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfR1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9HUzsKKy0JICBjYXNlIFNZU01PREVfU0VHT1ZSX1NTOgorLQkgIGNhc2UgU1lTTU9ERV9TRUdPVlJfU1MgfCBTWVNNT0RFX1NFR19EU19TUzoKKy0JCXJldHVybiAgTS54ODYuUl9TUzsKKy0JICBkZWZhdWx0OgorKyAgICBzd2l0Y2ggKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1NFR01BU0spIHsKKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBjYXNlOiB1c2UgZHMgcmVnaXN0ZXIgKi8KKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9EUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRFM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdfRFNfU1M6ICAgIC8qIG5vbi1vdmVycmlkZGVuLCB1c2Ugc3MgcmVnaXN0ZXIgKi8KKysgICAgICAgIHJldHVybiBNLng4Ni5SX1NTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0NTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9DUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9FUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVM7CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlM6CisrICAgIGNhc2UgU1lTTU9ERV9TRUdPVlJfRlMgfCBTWVNNT0RFX1NFR19EU19TUzoKKysgICAgICAgIHJldHVybiBNLng4Ni5SX0ZTOworKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTOgorKyAgICBjYXNlIFNZU01PREVfU0VHT1ZSX0dTIHwgU1lTTU9ERV9TRUdfRFNfU1M6CisrICAgICAgICByZXR1cm4gTS54ODYuUl9HUzsKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUzoKKysgICAgY2FzZSBTWVNNT0RFX1NFR09WUl9TUyB8IFNZU01PREVfU0VHX0RTX1NTOgorKyAgICAgICAgcmV0dXJuIE0ueDg2LlJfU1M7CisrICAgIGRlZmF1bHQ6CisgI2lmZGVmCURFQlVHCistCQlwcmludGsoImVycm9yOiBzaG91bGQgbm90IGhhcHBlbjogIG11bHRpcGxlIG92ZXJyaWRlcy5cbiIpOworKyAgICAgICAgcHJpbnRrKCJlcnJvcjogc2hvdWxkIG5vdCBoYXBwZW46ICBtdWx0aXBsZSBvdmVycmlkZXMuXG4iKTsKKyAjZW5kaWYKKy0JCUhBTFRfU1lTKCk7CistCQlyZXR1cm4gMDsKKy0JfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAyLDE0ICszMDcsMTQgQEAgQnl0ZSB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGZldGNoX2RhdGFfYnl0ZSgKKy0JdWludCBvZmZzZXQpCisrdTgKKytmZXRjaF9kYXRhX2J5dGUodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkYikgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTMyMSwxNCArMzI2LDE0IEBAIFdvcmQgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgZmV0Y2hfZGF0YV93b3JkKAorLQl1aW50IG9mZnNldCkKKyt1MTYKKytmZXRjaF9kYXRhX3dvcmQodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmR3KSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkdykgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM0MCwxNCArMzQ1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nKAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmcodWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTM2MCwxNSArMzY1LDE0IEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBmZXRjaF9kYXRhX2J5dGVfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3U4CisrZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3Moc2VnbWVudCwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JcmV0dXJuICgqc3lzX3JkYikoKCh1MzIpc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisrICAgIHJldHVybiAoKnN5c19yZGIpICgoKHUzMikgc2VnbWVudCA8PCA0KSArIG9mZnNldCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzgxLDE1ICszODUsMTQgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gdGhlIGFic29sdXRlIG1lbW9yeSBsb2NhdGlvbi4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMgZnVuY3Rpb24gYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0KQorK3UxNgorK2ZldGNoX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKHNlZ21lbnQsIG9mZnNldCk7CisgI2VuZGlmCistCXJldHVybiAoKnN5c19yZHcpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworKyAgICByZXR1cm4gKCpzeXNfcmR3KSAoKCh1MzIpIHNlZ21lbnQgPDwgNCkgKyBvZmZzZXQpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQwMiwxNSArNDA1LDE0IEBAIExvbmcgdmFsdWUgcmVhZCBmcm9tIHRoZSBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3JkWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZmV0Y2hfZGF0YV9sb25nX2FicygKKy0JdWludCBzZWdtZW50LAorLQl1aW50IG9mZnNldCkKKyt1MzIKKytmZXRjaF9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQlyZXR1cm4gKCpzeXNfcmRsKSgoKHUzMilzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKysgICAgcmV0dXJuICgqc3lzX3JkbCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MjQsMTUgKzQyNiwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2J5dGUoCistCXVpbnQgb2Zmc2V0LAorLQl1OCB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfYnl0ZSh1aW50IG9mZnNldCwgdTggdmFsKQorIHsKKyAjaWZkZWYgREVCVUcKKy0JaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCistCQl4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNilnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisrICAgIGlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorKyAgICAgICAgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpIGdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKyAjZW5kaWYKKy0JKCpzeXNfd3JiKSgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworKyAgICAoKnN5c193cmIpICgoZ2V0X2RhdGFfc2VnbWVudCgpIDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTQ0NiwxNSArNDQ3LDE0IEBAIHRoZSBjdXJyZW50ICdkZWZhdWx0JyBzZWdtZW50LCB3aGljaCBtYXkgaGF2ZSBiZWVuIG92ZXJyaWRkZW4uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfd29yZCgKKy0JdWludCBvZmZzZXQsCistCXUxNiB2YWwpCisrdm9pZAorK3N0b3JlX2RhdGFfd29yZCh1aW50IG9mZnNldCwgdTE2IHZhbCkKKyB7CisgI2lmZGVmIERFQlVHCistCWlmIChDSEVDS19EQVRBX0FDQ0VTUygpKQorLQkJeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzKCh1MTYpZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KSBnZXRfZGF0YV9zZWdtZW50KCksIG9mZnNldCk7CisgI2VuZGlmCistCSgqc3lzX3dydykoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKysgICAgKCpzeXNfd3J3KSAoKGdldF9kYXRhX3NlZ21lbnQoKSA8PCA0KSArIG9mZnNldCwgdmFsKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjgsMTUgKzQ2OCwxNCBAQCB0aGUgY3VycmVudCAnZGVmYXVsdCcgc2VnbWVudCwgd2hpY2ggbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmcoCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmcodWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcygodTE2KWdldF9kYXRhX3NlZ21lbnQoKSwgb2Zmc2V0KTsKKysgICAgaWYgKENIRUNLX0RBVEFfQUNDRVNTKCkpCisrICAgICAgICB4ODZlbXVfY2hlY2tfZGF0YV9hY2Nlc3MoKHUxNikgZ2V0X2RhdGFfc2VnbWVudCgpLCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKChnZXRfZGF0YV9zZWdtZW50KCkgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDkwLDE2ICs0ODksMTQgQEAgV3JpdGVzIGEgYnl0ZSB2YWx1ZSB0byBhbiBhYnNvbHV0ZSBtZW1vcnkgbG9jYXRpb24uCisgCisgTk9URTogRG8gbm90IGlubGluZSB0aGlzIGZ1bmN0aW9uIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnMoCistCXVpbnQgc2VnbWVudCwKKy0JdWludCBvZmZzZXQsCistCXU4IHZhbCkKKyt2b2lkCisrc3RvcmVfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmIpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dyYikgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUxMywxNiArNTEwLDE0IEBAIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX3dvcmRfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MTYgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUxNiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cncpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTUzNiwxNiArNTMxLDE0IEBAIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gYW4gYWJzb2x1dGUgbWVtb3J5IGxvY2F0aW9uLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcyBmdW5jdGlvbiBhcyAoKnN5c193clgpIGlzIGFscmVhZHkgaW5saW5lIQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKAorLQl1aW50IHNlZ21lbnQsCistCXVpbnQgb2Zmc2V0LAorLQl1MzIgdmFsKQorK3ZvaWQKKytzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpCisgeworICNpZmRlZiBERUJVRworLQlpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKy0JCXg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworKyAgICBpZiAoQ0hFQ0tfREFUQV9BQ0NFU1MoKSkKKysgICAgICAgIHg4NmVtdV9jaGVja19kYXRhX2FjY2VzcyhzZWdtZW50LCBvZmZzZXQpOworICNlbmRpZgorLQkoKnN5c193cmwpKCgodTMyKXNlZ21lbnQgPDwgNCkgKyBvZmZzZXQsIHZhbCk7CisrICAgICgqc3lzX3dybCkgKCgodTMyKSBzZWdtZW50IDw8IDQpICsgb2Zmc2V0LCB2YWwpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTU1OSwzNyArNTUyLDM3IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGJ5dGUgb3BlcmFuZHMuIEFsc28gZW5hYmxlcyB0aGUgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTgqIGRlY29kZV9ybV9ieXRlX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3U4ICoKKytkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0gICAgICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FMOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNMIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ0w7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiREwiKTsKKy0JCXJldHVybiAmTS54ODYuUl9ETDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCTCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JMOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkFIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQUg7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQ0giKTsKKy0JCXJldHVybiAmTS54ODYuUl9DSDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJESCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0RIOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkJIIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQkg7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BTDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0wiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DTDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ETDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkwiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CTDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQUgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BSDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ0giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DSDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESDsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQkgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CSDsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworKyAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UIFJFQUNIRUQgT1IgUkVBQ0hFRCBPTiBFUlJPUiAqLworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTYwMywzNiArNTk2LDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMuICBBbHNvIGVuYWJsZXMgdGhlIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiogZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKQorIHsKKy0Jc3dpdGNoIChyZWcpIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJBWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0FYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkNYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfQ1g7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9EWDsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJCWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0JYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIlNQIik7CistCQlyZXR1cm4gJk0ueDg2LlJfU1A7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URigiQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9CUDsKKy0JICBjYXNlIDY6CistCQlERUNPREVfUFJJTlRGKCJTSSIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkRJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfREk7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9BWDsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1giKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EWDsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CWDsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1AiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQlAiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9CUDsKKysgICAgY2FzZSA2OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TSTsKKysgICAgY2FzZSA3OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiREkiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9ESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY0NywzNiArNjQwLDM2IEBAIFJFTUFSS1M6CisgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIGR3b3JkIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIqIGRlY29kZV9ybV9sb25nX3JlZ2lzdGVyKAorLQlpbnQgcmVnKQorK3UzMiAqCisrZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZykKKyB7CisgICAgIHN3aXRjaCAocmVnKSB7CistICAgICAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiRUFYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUFYOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIkVDWCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VDWDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJFRFgiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiRUJYIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRUJYOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIkVTUCIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VTUDsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJFQlAiKTsKKy0JCXJldHVybiAmTS54ODYuUl9FQlA7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiRVNJIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVNJOworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYoIkVESSIpOworLQkJcmV0dXJuICZNLng4Ni5SX0VESTsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICBjYXNlIDA6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQVgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQVg7CisrICAgIGNhc2UgMToKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVDWCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VDWDsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRURYIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRURYOworKyAgICBjYXNlIDM6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFQlgiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FQlg7CisrICAgIGNhc2UgNDoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVTUCIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VTUDsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRUJQIik7CisrICAgICAgICByZXR1cm4gJk0ueDg2LlJfRUJQOworKyAgICBjYXNlIDY6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJFU0kiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FU0k7CisrICAgIGNhc2UgNzoKKysgICAgICAgIERFQ09ERV9QUklOVEYoIkVESSIpOworKyAgICAgICAgcmV0dXJuICZNLng4Ni5SX0VESTsKKysgICAgfQorKyAgICBIQUxUX1NZUygpOworICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogTk9UUkVBQ0hFRCBPUiBSRUFDSEVEIE9OIEVSUk9SICovCisgfQorIAorQEAgLTY5MiwxMjYgKzY4NSwxMjkgQEAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgZ2l2ZW4gYnkgdGhlIFIvUk0gZmllbGQgb2YgdGhlCisgbW9kcm0gYnl0ZSwgZm9yIHdvcmQgb3BlcmFuZHMsIG1vZGlmaWVkIGZyb20gYWJvdmUgZm9yIHRoZSB3ZWlyZG8KKyBzcGVjaWFsIGNhc2Ugb2Ygc2VncmVnIG9wZXJhbmRzLiAgQWxzbyBlbmFibGVzIHRoZSBkZWNvZGluZyBvZiBpbnN0cnVjdGlvbnMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYqIGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIoCistCWludCByZWcpCisrdTE2ICoKKytkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpCisgeworLQlzd2l0Y2ggKHJlZykgeworLQkgIGNhc2UgMDoKKy0JCURFQ09ERV9QUklOVEYoIkVTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRVM7CistCSAgY2FzZSAxOgorLQkJREVDT0RFX1BSSU5URigiQ1MiKTsKKy0JCXJldHVybiAmTS54ODYuUl9DUzsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGKCJTUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX1NTOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYoIkRTIik7CistCQlyZXR1cm4gJk0ueDg2LlJfRFM7CistCSAgY2FzZSA0OgorLQkJREVDT0RFX1BSSU5URigiRlMiKTsKKy0JCXJldHVybiAmTS54ODYuUl9GUzsKKy0JICBjYXNlIDU6CistCQlERUNPREVfUFJJTlRGKCJHUyIpOworLQkJcmV0dXJuICZNLng4Ni5SX0dTOworLQkgIGNhc2UgNjoKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworLQkJYnJlYWs7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0JcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKysgICAgc3dpdGNoIChyZWcpIHsKKysgICAgY2FzZSAwOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRVMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9FUzsKKysgICAgY2FzZSAxOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiQ1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9DUzsKKysgICAgY2FzZSAyOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiU1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9TUzsKKysgICAgY2FzZSAzOgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRFMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9EUzsKKysgICAgY2FzZSA0OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiRlMiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9GUzsKKysgICAgY2FzZSA1OgorKyAgICAgICAgREVDT0RFX1BSSU5URigiR1MiKTsKKysgICAgICAgIHJldHVybiAmTS54ODYuUl9HUzsKKysgICAgY2FzZSA2OgorKyAgICBjYXNlIDc6CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIFNFR1JFRyIpOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKysgICAgSEFMVF9TWVMoKTsKKysgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIE5PVCBSRUFDSEVEIE9SIFJFQUNIRUQgT04gRVJST1IgKi8KKyB9CisgCisgLyoKKyAgKgorICAqIHJldHVybiBvZmZzZXQgZnJvbSB0aGUgU0lCIEJ5dGUKKyAgKi8KKy11MzIgZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisrdTMyCisrZGVjb2RlX3NpYl9hZGRyZXNzKGludCBzaWIsIGludCBtb2QpCisgeworICAgICB1MzIgYmFzZSA9IDAsIGkgPSAwLCBzY2FsZSA9IDE7CisgCistICAgIHN3aXRjaChzaWIgJiAweDA3KSB7CisrICAgIHN3aXRjaCAoc2liICYgMHgwNykgeworICAgICBjYXNlIDA6CistCURFQ09ERV9QUklOVEYoIltFQVhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUFYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKy0JREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRUNYOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQ1hdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYXSIpOworLQliYXNlID0gTS54ODYuUl9FRFg7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VEWDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDM6CistCURFQ09ERV9QUklOVEYoIltFQlhdIik7CistCWJhc2UgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYXSIpOworKyAgICAgICAgYmFzZSA9IE0ueDg2LlJfRUJYOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNDoKKy0JREVDT0RFX1BSSU5URigiW0VTUF0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNQOworLQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU1BdIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU1A7CisrICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JaWYgKG1vZCA9PSAwKSB7CistCSAgICBiYXNlID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0JICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworLQkgICAgYmFzZSA9IE0ueDg2LlJfRVNQOworLQkgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChtb2QgPT0gMCkgeworKyAgICAgICAgICAgIGJhc2UgPSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgYmFzZSk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJQXSIpOworKyAgICAgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VTUDsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JYmFzZSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICBiYXNlID0gTS54ODYuUl9FU0k7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA3OgorLQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQliYXNlID0gTS54ODYuUl9FREk7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiW0VESV0iKTsKKysgICAgICAgIGJhc2UgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHN3aXRjaCAoKHNpYiA+PiAzKSAmIDB4MDcpIHsKKyAgICAgY2FzZSAwOgorLQlERUNPREVfUFJJTlRGKCJbRUFYIik7CistCWkgPSBNLng4Ni5SX0VBWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUFYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQVg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlERUNPREVfUFJJTlRGKCJbRUNYIik7CistCWkgPSBNLng4Ni5SX0VDWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUNYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQ1g7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlERUNPREVfUFJJTlRGKCJbRURYIik7CistCWkgPSBNLng4Ni5SX0VEWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRURYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FRFg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAzOgorLQlERUNPREVfUFJJTlRGKCJbRUJYIik7CistCWkgPSBNLng4Ni5SX0VCWDsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJbRUJYIik7CisrICAgICAgICBpID0gTS54ODYuUl9FQlg7CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSA0OgorLQlpID0gMDsKKy0JYnJlYWs7CisrICAgICAgICBpID0gMDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDU6CistCURFQ09ERV9QUklOVEYoIltFQlAiKTsKKy0JaSA9IE0ueDg2LlJfRUJQOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFQlAiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VCUDsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDY6CistCURFQ09ERV9QUklOVEYoIltFU0kiKTsKKy0JaSA9IE0ueDg2LlJfRVNJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0kiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VTSTsKKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDc6CistCURFQ09ERV9QUklOVEYoIltFREkiKTsKKy0JaSA9IE0ueDg2LlJfRURJOworLQlicmVhazsKKysgICAgICAgIERFQ09ERV9QUklOVEYoIltFREkiKTsKKysgICAgICAgIGkgPSBNLng4Ni5SX0VESTsKKysgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIHNjYWxlID0gMSA8PCAoKHNpYiA+PiA2KSAmIDB4MDMpOworICAgICBpZiAoKChzaWIgPj4gMykgJiAweDA3KSAhPSA0KSB7CistCWlmIChzY2FsZSA9PSAxKSB7CistCSAgICBERUNPREVfUFJJTlRGKCJdIik7CistCX0gZWxzZSB7CistCSAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKy0JfQorKyAgICAgICAgaWYgKHNjYWxlID09IDEpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJdIik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiKiVkXSIsIHNjYWxlKTsKKysgICAgICAgIH0KKyAgICAgfQorICAgICByZXR1cm4gYmFzZSArIChpICogc2NhbGUpOworIH0KK0BAIC04MzYsNzQgKzgzMiw3NSBAQCBOT1RFOiAJVGhlIGNvZGUgd2hpY2ggc3BlY2lmaWVzIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKGRzIHZzIHNzKQorIAkJaWYgYSBTUyBhY2Nlc3MgaXMgbmVlZGVkLCBzZXQgdGhpcyBiaXQuICBPdGhlcndpc2UsIERTIGFjY2VzcworIAkJb2NjdXJzICh1bmxlc3MgYW55IG9mIHRoZSBzZWdtZW50IG92ZXJyaWRlIGJpdHMgYXJlIHNldCkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgZGVjb2RlX3JtMDBfYWRkcmVzcygKKy0JaW50IHJtKQorK3UzMgorK2RlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKQorIHsKKyAgICAgdTMyIG9mZnNldDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGKCJbRUNYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRUNYOworLQkgIGNhc2UgMjoKKy0JCURFQ09ERV9QUklOVEYoIltFRFhdIik7CistCQlyZXR1cm4gTS54ODYuUl9FRFg7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VCWDsKKy0JICBjYXNlIDQ6CistCQlzaWIgPSBmZXRjaF9ieXRlX2ltbSgpOworLQkJcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDApOworLQkgIGNhc2UgNToKKy0JCW9mZnNldCA9IGZldGNoX2xvbmdfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URigiW0VTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSTsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGKCJbRURJXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJOworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VBWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQVg7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VDWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1g7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VEWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FRFg7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0VCWF0iKTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlg7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMCk7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgb2Zmc2V0ID0gZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiWyUwOHhdIiwgb2Zmc2V0KTsKKysgICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRVNJOworKyAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltFREldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGKCJbQlgrU0ldIik7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0JYK1NJXSIpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CWCArIE0ueDg2LlJfU0kpICYgMHhmZmZmOworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYoIltCWCtESV0iKTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlgrREldIik7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URigiW0JQK1NJXSIpOworLQkJTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlArU0ldIik7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJKSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGKCJbQlArREldIik7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIltCUCtESV0iKTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfREkpICYgMHhmZmZmOworLQkgIGNhc2UgNDoKKy0JCURFQ09ERV9QUklOVEYoIltTSV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX1NJOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYoIltESV0iKTsKKy0JCXJldHVybiBNLng4Ni5SX0RJOworLQkgIGNhc2UgNjoKKy0JCW9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CistCQlERUNPREVfUFJJTlRGMigiWyUwNHhdIiwgb2Zmc2V0KTsKKy0JCXJldHVybiBvZmZzZXQ7CistCSAgY2FzZSA3OgorLQkJREVDT0RFX1BSSU5URigiW0JYXSIpOworLQkJcmV0dXJuIE0ueDg2LlJfQlg7CistCX0KKy0JSEFMVF9TWVMoKTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbU0ldIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfU0k7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiW0RJXSIpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0RJOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIG9mZnNldCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIlslMDR4XSIsIG9mZnNldCk7CisrICAgICAgICAgICAgcmV0dXJuIG9mZnNldDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJbQlhdIik7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfQlg7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOworIH0KK0BAIC05MTksNzkgKzkxNiw4MCBAQCBSRU1BUktTOgorIFJldHVybiB0aGUgb2Zmc2V0IGdpdmVuIGJ5IG1vZD0wMSBhZGRyZXNzaW5nLiAgQWxzbyBlbmFibGVzIHRoZQorIGRlY29kaW5nIG9mIGluc3RydWN0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBkZWNvZGVfcm0wMV9hZGRyZXNzKAorLQlpbnQgcm0pCisrdTMyCisrZGVjb2RlX3JtMDFfYWRkcmVzcyhpbnQgcm0pCisgeworICAgICBpbnQgZGlzcGxhY2VtZW50ID0gMDsKKyAgICAgaW50IHNpYjsKKyAKKyAgICAgLyogRmV0Y2ggZGlzcDggaWYgbm8gU0lCIGJ5dGUgKi8KKyAgICAgaWYgKCEoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSAmJiAocm0gPT0gNCkpKQorLQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLQlzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VBWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgMToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCWF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNDoKKy0JCXNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CistCQlkaXNwbGFjZW1lbnQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMSkgKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA1OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtFU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CistCX0KKy0JSEFMVF9TWVMoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQ1ggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VEWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRUJYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgIHNpYiA9IGZldGNoX2J5dGVfaW1tKCk7CisrICAgICAgICAgICAgZGlzcGxhY2VtZW50ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZCIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9zaWJfYWRkcmVzcyhzaWIsIDEpICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtFQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlAgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbRURJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIC8qIDE2LWJpdCBhZGRyZXNzaW5nICovCistCXN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIHN3aXRjaCAocm0pIHsKKysgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlgrREldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK1NJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX1NJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDM6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlArREldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkW0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CistCQlERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNDoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiVkW0JQXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFtCUF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIE0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JQICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDc6CistCQlERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRbQlhdIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlggKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQl9CistCUhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAvKiBTSE9VTEQgTk9UIEhBUFBFTiAqLworIH0KK0BAIC0xMDA3LDg2ICsxMDA1LDg3IEBAIFJFTUFSS1M6CisgUmV0dXJuIHRoZSBvZmZzZXQgZ2l2ZW4gYnkgbW9kPTEwIGFkZHJlc3NpbmcuICBBbHNvIGVuYWJsZXMgdGhlCisgZGVjb2Rpbmcgb2YgaW5zdHJ1Y3Rpb25zLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoCistCWludCBybSkKKyt1MzIKKytkZWNvZGVfcm0xMF9hZGRyZXNzKGludCBybSkKKyB7CisgICAgIHUzMiBkaXNwbGFjZW1lbnQgPSAwOworICAgICBpbnQgc2liOworIAorICAgICAvKiBGZXRjaCBkaXNwMTYgaWYgMTYtYml0IGFkZHIgbW9kZSAqLworICAgICBpZiAoIShNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikpCistCWRpc3BsYWNlbWVudCA9ICh1MTYpZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MTYpIGZldGNoX3dvcmRfaW1tKCk7CisgICAgIGVsc2UgeworLQkvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKy0JaWYgKHJtICE9IDQpCistCSAgICBkaXNwbGFjZW1lbnQgPSAodTMyKWZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICAvKiBGZXRjaCBkaXNwMzIgaWYgbm8gU0lCIGJ5dGUgKi8KKysgICAgICAgIGlmIChybSAhPSA0KQorKyAgICAgICAgICAgIGRpc3BsYWNlbWVudCA9ICh1MzIpIGZldGNoX2xvbmdfaW1tKCk7CisgICAgIH0KKyAKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisgICAgICAgICAvKiAzMi1iaXQgYWRkcmVzc2luZyAqLworLSAgICAgIHN3aXRjaCAocm0pIHsKKy0JICBjYXNlIDA6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQVhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VBWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDE6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFQ1hdIiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKy0JICBjYXNlIDI6CistCQlERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CistCQlyZXR1cm4gTS54ODYuUl9FRFggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSAzOgorLQkJREVDT0RFX1BSSU5URjIoIiUwOHhbRUJYXSIsIGRpc3BsYWNlbWVudCk7CistCQlyZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CistCSAgY2FzZSA0OgorLQkJc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0JCWRpc3BsYWNlbWVudCA9ICh1MzIpZmV0Y2hfbG9uZ19pbW0oKTsKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKy0JCXJldHVybiBkZWNvZGVfc2liX2FkZHJlc3Moc2liLCAyKSArIGRpc3BsYWNlbWVudDsKKy0JCWJyZWFrOworLQkgIGNhc2UgNToKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VCUF0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNjoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRVNJICsgZGlzcGxhY2VtZW50OworLQkgIGNhc2UgNzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDh4W0VESV0iLCBkaXNwbGFjZW1lbnQpOworLQkJcmV0dXJuIE0ueDg2LlJfRURJICsgZGlzcGxhY2VtZW50OworLQl9CistCUhBTFRfU1lTKCk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBzd2l0Y2ggKHJtKSB7CisrICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUFYXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUFYICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VDWF0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VDWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFRFhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VEWCArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFQlhdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FQlggKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc2liID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgICAgICAgICBkaXNwbGFjZW1lbnQgPSAodTMyKSBmZXRjaF9sb25nX2ltbSgpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4IiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gZGVjb2RlX3NpYl9hZGRyZXNzKHNpYiwgMikgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhbRUJQXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgcmV0dXJuIE0ueDg2LlJfRUJQICsgZGlzcGxhY2VtZW50OworKyAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDh4W0VTSV0iLCBkaXNwbGFjZW1lbnQpOworKyAgICAgICAgICAgIHJldHVybiBNLng4Ni5SX0VTSSArIGRpc3BsYWNlbWVudDsKKysgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA4eFtFREldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICByZXR1cm4gTS54ODYuUl9FREkgKyBkaXNwbGFjZW1lbnQ7CisrICAgICAgICB9CisrICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgLyogMTYtYml0IGFkZHJlc3NpbmcgKi8KKy0gICAgICBzd2l0Y2ggKHJtKSB7CistCSAgY2FzZSAwOgorKyAgICAgICAgc3dpdGNoIChybSkgeworKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK1NJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9TSSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYK0RJXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSAyOgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlArU0ldIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgMzoKKy0JCURFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CistCQlNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworKyAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JQK0RJXSIsIGRpc3BsYWNlbWVudCk7CisrICAgICAgICAgICAgTS54ODYubW9kZSB8PSBTWVNNT0RFX1NFR19EU19TUzsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfQlAgKyBNLng4Ni5SX0RJICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbU0ldIiwgZGlzcGxhY2VtZW50KTsKKyAgICAgICAgICAgICByZXR1cm4gKE0ueDg2LlJfU0kgKyBkaXNwbGFjZW1lbnQpICYgMHhmZmZmOworLQkgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJTA0eFtESV0iLCBkaXNwbGFjZW1lbnQpOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9ESSArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA2OgorLQkJREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKy0JCU0ueDg2Lm1vZGUgfD0gU1lTTU9ERV9TRUdfRFNfU1M7CisrICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhbQlBdIiwgZGlzcGxhY2VtZW50KTsKKysgICAgICAgICAgICBNLng4Ni5tb2RlIHw9IFNZU01PREVfU0VHX0RTX1NTOworICAgICAgICAgICAgIHJldHVybiAoTS54ODYuUl9CUCArIGRpc3BsYWNlbWVudCkgJiAweGZmZmY7CistCSAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4W0JYXSIsIGRpc3BsYWNlbWVudCk7CisgICAgICAgICAgICAgcmV0dXJuIChNLng4Ni5SX0JYICsgZGlzcGxhY2VtZW50KSAmIDB4ZmZmZjsKKy0JfQorLQlIQUxUX1NZUygpOworKyAgICAgICAgfQorKyAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgfQorICAgICByZXR1cm4gMDsKKyAgICAgLypOT1RSRUFDSEVEICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvZnB1LmMgYi9saWJzL3g4NmVtdS9mcHUuYworaW5kZXggYjcyZGUxZS4uMGRhYjA1YyAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L2ZwdS5jCisrKysgYi9saWJzL3g4NmVtdS9mcHUuYworQEAgLTQyLDcgKzQyLDggQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEltcGxlbWVudGF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIG9wY29kZT0weGQ4ICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFU0MgRDhcbiIpOworQEAgLTUyLDcgKzUzLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kOV90YWJbXSA9IHsKKyAgICAgIkZMRFx0RFdPUkQgUFRSICIsICJFU0NfRDlcdCIsICJGU1RcdERXT1JEIFBUUiAiLCAiRlNUUFx0RFdPUkQgUFRSICIsCisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIAorQEAgLTYzLDcgKzY0LDcgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiW10gPSB7CisgICAgICJGTERFTlZcdCIsICJGTERDV1x0IiwgIkZTVEVOVlx0IiwgIkZTVENXXHQiLAorIH07CisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2Q5X3RhYjFbXSA9IHsKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAgICAgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwgIkZMRFx0IiwKKyAKK0BAIC04OSwxMCArOTAsMTEgQEAgc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZDlfdGFiMVtdID0geworICAgICAiRlJORElOVCIsICJGU0NBTEUiLCAiRVNDX0Q5IiwgIkVTQ19EOSIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZDkgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0xMDMsNTYgKzEwNSw1OCBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICNpZmRlZiBERUJVRworICAgICBpZiAobW9kICE9IDMpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVElOU1RSMzIoeDg2ZW11X2ZwdV9vcF9kOV90YWIsIG1vZCwgcmgsIHJsKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoeDg2ZW11X2ZwdV9vcF9kOV90YWIxWyhyaCA8PCAzKSArIHJsXSk7CisgICAgIH0KKyAjZW5kaWYKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDA6CisrICAgIGNhc2UgMDoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDE6CisrICAgIGNhc2UgMToKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlzdGtlbGVtID0gKHU4KXJsOworLQkJaWYgKHJoIDwgNCkgeworLQkJCQlERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKy0JCX0gZWxzZSB7CistCQkJCURFQ09ERV9QUklOVEYoIlxuIik7CistCQl9CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKysgICAgICAgIGlmIChyaCA8IDQpIHsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiU1QoJWQpXG4iLCBzdGtlbGVtKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnhjaChYODZFTVVfRlBVX1NUS1RPUCwgc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1Jfbm9wKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoWDg2RU1VX0ZQVV9TVEtUT1AsIHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZjaHMoWDg2RU1VX0ZQVV9TVEtUT1ApOworQEAgLTE3MywxMzMgKzE3NywxMzMgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwydChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZGwyZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZsZHBpKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbGcyKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkbG4yKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmxkeihYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAvKiA3ICovCisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZjJ4bTEoWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meWwyeChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnBhdGFuKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnh0cmFjdChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2RlY3N0cCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9pbmNzdHAoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworIAorLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZwcmVtKFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnlsMnhwMShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzcXJ0KFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnJuZGludChYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzY2FsZShYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorLSAgICAgICAgICAgICAgY2FzZSA3OgorLSAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgCistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgICAgIGNhc2UgMDoKKysgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9GTE9BVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDM6CisrICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0cChYODZFTVVfRlBVX0ZMT0FULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkZW52KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZsZGN3KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzdGVudihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RjdyhYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworLSNlbmRpZiAvKiBYODZFTVVfRlBVX1BSRVNFTlQgKi8KKysgICAgKHZvaWQpIGRlc3RvZmZzZXQ7CisrICAgICh2b2lkKSBzdGtlbGVtOworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWDg2RU1VX0ZQVV9QUkVTRU5UICovCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CisgfQorIAorICNpZmRlZiBERUJVRworIAorLWNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGFfdGFiW10gPSB7CisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMDksNyArMzEzLDcgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYV90YWJbXSA9IHsKKyAgICAgIkZJQ09NUFx0RFdPUkQgUFRSICIsCisgICAgICJGSVNVQlx0RFdPUkQgUFRSICIsICJGSVNVQlJcdERXT1JEIFBUUiAiLCAiRklESVZcdERXT1JEIFBUUiAiLAorICAgICAiRklESVZSXHREV09SRCBQVFIgIiwKKy0gICAgCisrCisgICAgICJGSUFERFx0RFdPUkQgUFRSICIsICJGSU1VTFx0RFdPUkQgUFRSICIsICJGSUNPTVx0RFdPUkQgUFRSICIsCisgICAgICJGSUNPTVBcdERXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdERXT1JEIFBUUiAiLCAiRklTVUJSXHREV09SRCBQVFIgIiwgIkZJRElWXHREV09SRCBQVFIgIiwKK0BAIC0zMTksMTAgKzMyMywxMSBAQCBjaGFyICp4ODZlbXVfZnB1X29wX2RhX3RhYltdID0geworICAgICAiRVNDX0RBICAgICAiLCAiRVNDX0RBICIsICJFU0NfREEgICAiLCAiRVNDX0RBICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGEgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC0zMzIsNTkgKzMzNyw1OSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGFfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pYWRkKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ltdWwoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWNvbShYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pY29tcChYODZFTVVfRlBVX1NIT1JULCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9pc3ViKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lzdWJyKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2lkaXYoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01faWRpdnIoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtMzkyLDcgKzM5Nyw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkZJTERcdERXT1JEIFBUUiAiLCAiRVNDX0RCXHQxOSIsICJGSVNUXHREV09SRCBQVFIgIiwgIkZJU1RQXHREV09SRCBQVFIgIiwKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgCitAQCAtNDAzLDEwICs0MDgsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kYl90YWJbXSA9IHsKKyAgICAgIkVTQ19EQlx0MUMiLCAiRkxEXHRUQllURSBQVFIgIiwgIkVTQ19EQlx0MUUiLCAiRlNUUFx0VEJZVEUgUFRSICIsCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGIgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC00MTYsMTA0ICs0MjIsMTA2IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgI2lmZGVmIERFQlVHCisgICAgIGlmIChtb2QgIT0gMykgeworICAgICAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RiX3RhYiwgbW9kLCByaCwgcmwpOworLSAgICB9IGVsc2UgaWYgKHJoID09IDQpIHsgICAgICAgLyogPT09IDExIDEwIDAgbm5uICovCisrICAgIH0KKysgICAgZWxzZSBpZiAocmggPT0gNCkgeyAgICAgICAgIC8qID09PSAxMSAxMCAwIG5ubiAqLworICAgICAgICAgc3dpdGNoIChybCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRkVOSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGRElTSVxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGQ0xFWFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJGSU5JVFxuIik7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiRVNDX0RCICUweFxuIiwgKG1vZCA8PCA2KSArIChyaCA8PCAzKSArIChybCkpOworICAgICB9CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDI6CisrICAgIGNhc2UgMjoKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICAvKiBleGVjdXRlICovCisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAzOgorKyAgICBjYXNlIDM6CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICBzd2l0Y2ggKHJsKSB7CistICAgICAgICAgICAgICBjYXNlIDA6CisrICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmVuaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMToKKysgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZGlzaSgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mY2xleCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGNhc2UgMzoKKysgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9maW5pdCgpOworICAgICAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9TSE9SVCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0KFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3RwKFg4NkVNVV9GUFVfU0hPUlQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmxkKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X2lsbGVnYWwoKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfTERCTCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKKyB9CisgCisgI2lmZGVmIERFQlVHCistY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdFFXT1JEIFBUUiAiLCAiRk1VTFx0UVdPUkQgUFRSICIsICJGQ09NXHRRV09SRCBQVFIgIiwKKyAgICAgIkZDT01QXHRRV09SRCBQVFIgIiwKKyAgICAgIkZTVUJcdFFXT1JEIFBUUiAiLCAiRlNVQlJcdFFXT1JEIFBUUiAiLCAiRkRJVlx0UVdPUkQgUFRSICIsCitAQCAtNTMyLDEwICs1NDAsMTEgQEAgY2hhciAqeDg2ZW11X2ZwdV9vcF9kY190YWJbXSA9IHsKKyAgICAgIkZBRERcdCIsICJGTVVMXHQiLCAiRkNPTVx0IiwgIkZDT01QXHQiLAorICAgICAiRlNVQlJcdCIsICJGU1VCXHQiLCAiRkRJVlJcdCIsICJGRElWXHQiLAorIH07CistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRjICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNTQ1LDg1ICs1NTQsODUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RjX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgLyogZXhlY3V0ZSAqLworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZhZGQoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZtdWwoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb20oc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3VicihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YihzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnIoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXYoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYWRkKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbXVsKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mY29tcChYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKysgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YihYODZFTVVfRlBVX0RPVUJMRSwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN1YnIoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXYoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDc6CisrICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZkaXZyKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC02MzEsNyArNjQwLDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKytzdGF0aWMgY29uc3QgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZF90YWJbXSA9IHsKKyAgICAgIkZMRFx0UVdPUkQgUFRSICIsICJFU0NfRERcdDI5LCIsICJGU1RcdFFXT1JEIFBUUiAiLCAiRlNUUFx0UVdPUkQgUFRSICIsCisgICAgICJGUlNUT1JcdCIsICJFU0NfRERcdDJELCIsICJGU0FWRVx0IiwgIkZTVFNXXHQiLAorIAorQEAgLTY0NSwxMCArNjU0LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RkX3RhYltdID0geworICAgICAiRVNDX0REXHQyQywiLCAiRVNDX0REXHQyRCwiLCAiRVNDX0REXHQyRSwiLCAiRVNDX0REXHQyRiwiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRkICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNjU4LDc1ICs2NjgsNzUgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RkX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mZnJlZShzdGtlbGVtKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9meGNoKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdChzdGtlbGVtKTsgIC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mc3RwKHN0a2VsZW0pOyAvKiByZWdpc3RlciB2ZXJzaW9uICovCisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mbGQoWDg2RU1VX0ZQVV9ET1VCTEUsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0KFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mc3RwKFg4NkVNVV9GUFVfRE9VQkxFLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mcnN0b3IoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZzYXZlKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZnN0c3coWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK0BAIC03MzQsOCArNzQ0LDcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy1zdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisteworK3N0YXRpYyBjb25zdCBjaGFyICp4ODZlbXVfZnB1X29wX2RlX3RhYltdID0geworICAgICAiRklBRERcdFdPUkQgUFRSICIsICJGSU1VTFx0V09SRCBQVFIgIiwgIkZJQ09NXHRXT1JEIFBUUiAiLAorICAgICAiRklDT01QXHRXT1JEIFBUUiAiLAorICAgICAiRklTVUJcdFdPUkQgUFRSICIsICJGSVNVQlJcdFdPUkQgUFRSICIsICJGSURJVlx0V09SRCBQVFIgIiwKK0BAIC03NTUsMTAgKzc2NCwxMSBAQCBzdGF0aWMgY2hhciAqeDg2ZW11X2ZwdV9vcF9kZV90YWJbXSA9CisgICAgICJGU1VCUlBcdCIsICJGU1VCUFx0IiwgIkZESVZSUFx0IiwgIkZESVZQXHQiLAorIH07CisgCistI2VuZGlmIC8qIERFQlVHICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUJVRyAqLworIAorIC8qIG9wY29kZT0weGRlICovCistdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyt2b2lkCisreDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldCA9IDA7CitAQCAtNzY4LDg3ICs3NzgsODcgQEAgdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgREVDT0RFX1BSSU5USU5TVFIzMih4ODZlbXVfZnB1X29wX2RlX3RhYiwgbW9kLCByaCwgcmwpOworICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMDoKKysgICAgY2FzZSAwOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMToKKysgICAgY2FzZSAxOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMjoKKysgICAgY2FzZSAyOgorICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKy0JCXN0a2VsZW0gPSAodTgpcmw7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBzdGtlbGVtID0gKHU4KSBybDsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJcdFNUKCVkKSxTVFxuIiwgc3RrZWxlbSk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICNpZmRlZiBYODZFTVVfRlBVX1BSRVNFTlQKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgICBjYXNlIDM6CisrICAgIGNhc2UgMzoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfUl9mYWRkcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZm11bHAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIGlmIChzdGtlbGVtID09IDEpCistICAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmNvbXBwKHN0a2VsZW0sIFg4NkVNVV9GUFVfU1RLVE9QKTsKKysgICAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Zjb21wcChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisrICAgICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdWJycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNToKKysgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN1YnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZkaXZycChzdGtlbGVtLCBYODZFTVVfRlBVX1NUS1RPUCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZmRpdnAoc3RrZWxlbSwgWDg2RU1VX0ZQVV9TVEtUT1ApOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgICAgZGVmYXVsdDoKKysgICAgZGVmYXVsdDoKKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWFkZChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbXVsKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmljb20oWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maWNvbXAoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN1YihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3VicihYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDY6CisrICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpZGl2KFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlkaXZyKFg4NkVNVV9GUFVfV09SRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgIH0KKyAjZWxzZQorLSAgICAodm9pZClkZXN0b2Zmc2V0OworLSAgICAodm9pZClzdGtlbGVtOworKyAgICAodm9pZCkgZGVzdG9mZnNldDsKKysgICAgKHZvaWQpIHN0a2VsZW07CisgI2VuZGlmCisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSX05PX1RSQUNFKCk7CitAQCAtODU2LDcgKzg2Niw3IEBAIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgCisgI2lmZGVmIERFQlVHCisgCistc3RhdGljIGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7Cisrc3RhdGljIGNvbnN0IGNoYXIgKng4NmVtdV9mcHVfb3BfZGZfdGFiW10gPSB7CisgICAgIC8qIG1vZCA9PSAwMCAqLworICAgICAiRklMRFx0V09SRCBQVFIgIiwgIkVTQ19ERlx0MzlcbiIsICJGSVNUXHRXT1JEIFBUUiAiLCAiRklTVFBcdFdPUkQgUFRSICIsCisgICAgICJGQkxEXHRUQllURSBQVFIgIiwgIkZJTERcdFFXT1JEIFBUUiAiLCAiRkJTVFBcdFRCWVRFIFBUUiAiLAorQEAgLTg3NywxMCArODg3LDExIEBAIHN0YXRpYyBjaGFyICp4ODZlbXVfZnB1X29wX2RmX3RhYltdID0geworICAgICAiRVNDX0RGXHQzQywiLCAiRVNDX0RGXHQzRCwiLCAiRVNDX0RGXHQzRSwiLCAiRVNDX0RGXHQzRiwiCisgfTsKKyAKKy0jZW5kaWYgLyogREVCVUcgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERFQlVHICovCisgCisgLyogb3Bjb2RlPTB4ZGYgKi8KKy12b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3ZvaWQKKyt4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0ID0gMDsKK0BAIC04OTAsNzUgKzkwMSw3NSBAQCB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworICAgICBERUNPREVfUFJJTlRJTlNUUjMyKHg4NmVtdV9mcHVfb3BfZGZfdGFiLCBtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgICAgY2FzZSAwOgorKyAgICBjYXNlIDA6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAxOgorKyAgICBjYXNlIDE6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAyOgorKyAgICBjYXNlIDI6CisgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJc3RrZWxlbSA9ICh1OClybDsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIHN0a2VsZW0gPSAodTgpIHJsOworICAgICAgICAgREVDT0RFX1BSSU5URjIoIlx0U1QoJWQpXG4iLCBzdGtlbGVtKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgI2lmZGVmIFg4NkVNVV9GUFVfUFJFU0VOVAorICAgICBzd2l0Y2ggKG1vZCkgeworLSAgICAgIGNhc2UgMzoKKysgICAgY2FzZSAzOgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZmcmVlKHN0a2VsZW0pOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDE6CisrICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2Z4Y2goc3RrZWxlbSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgMjoKKysgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X1JfZnN0KHN0a2VsZW0pOyAgLyogcmVnaXN0ZXIgdmVyc2lvbiAqLworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDM6CisrICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9SX2ZzdHAoc3RrZWxlbSk7IC8qIHJlZ2lzdGVyIHZlcnNpb24gKi8KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9pbGxlZ2FsKCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgICBkZWZhdWx0OgorKyAgICBkZWZhdWx0OgorICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgICBjYXNlIDA6CisrICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfaWxsZWdhbCgpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CisrICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2Zpc3QoWDg2RU1VX0ZQVV9XT1JELCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSAzOgorKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9maXN0cChYODZFTVVfRlBVX1dPUkQsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZibGQoWDg2RU1VX0ZQVV9CU0QsIGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDU6CisrICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgeDg2ZW11X2ZwdV9NX2ZpbGQoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgIHg4NmVtdV9mcHVfTV9mYnN0cChYODZFTVVfRlBVX0JTRCwgZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgICB4ODZlbXVfZnB1X01fZmlzdHAoWDg2RU1VX0ZQVV9MT05HLCBkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorICNlbHNlCistICAgICh2b2lkKWRlc3RvZmZzZXQ7CistICAgICh2b2lkKXN0a2VsZW07CisrICAgICh2b2lkKSBkZXN0b2Zmc2V0OworKyAgICAodm9pZCkgc3RrZWxlbTsKKyAjZW5kaWYKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFJfTk9fVFJBQ0UoKTsKK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS9vcHMuYyBiL2xpYnMveDg2ZW11L29wcy5jCitpbmRleCA0ZjUwNGM5Li43NmI4MzU4IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzLmMKKysrKyBiL2xpYnMveDg2ZW11L29wcy5jCitAQCAtODEsMTcgKzgxLDE3IEBAIG9wMSAtIEluc3RydWN0aW9uIG9wIGNvZGUKKyBSRU1BUktTOgorIEhhbmRsZXMgaWxsZWdhbCBvcGNvZGVzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaWxsZWdhbF9vcCgKKy0gICAgdTggb3AxKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaWxsZWdhbF9vcCh1OCBvcDEpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYuUl9TUCAhPSAwKSB7CistICAgIERFQ09ERV9QUklOVEYoIklMTEVHQUwgWDg2IE9QQ09ERVxuIik7CistICAgIFRSQUNFX1JFR1MoKTsKKy0gICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlggSUxMRUdBTCBYODYgT1BDT0RFIVxuIiwKKy0gICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMSxvcDEpOworLSAgICBIQUxUX1NZUygpOworLSAgICAgICAgfQorKyAgICAgICAgREVDT0RFX1BSSU5URigiSUxMRUdBTCBYODYgT1BDT0RFXG4iKTsKKysgICAgICAgIFRSQUNFX1JFR1MoKTsKKysgICAgICAgIERCKHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICAgICAgICAgTS54ODYuUl9DUywgTS54ODYuUl9JUCAtIDEsIG9wMSkpOworKyAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgfQorICAgICBlbHNlIHsKKyAgICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCBpdCBtZWFucyB0aGUgc3RhY2sgcG9pbnRlciBpcyBiYWNrIHRvIHplcm8KKyAgICAgICAgICAqIHNvIHdlIGFyZSBqdXN0IHJldHVybmluZyBmcm9tIGFuIGVtdWxhdG9yIHNlcnZpY2UgY2FsbAorQEAgLTEwMCw3ICsxMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorICAgICAgICAgICogY2FsbC4KKyAgICAgICAgICAqLworICAgICAgICAgWDg2RU1VX2hhbHRfc3lzKCk7CistICAgICAgICB9CisrICAgIH0KKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorQEAgLTEwOCw3ICsxMDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbGxlZ2FsX29wKAorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE0OSw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSBhZGRfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTY2LDcgKzE2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTE4OCw3ICsxOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjE1LDcgKzIxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNDIsNyArMjQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRkX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI1Niw5ICsyNjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjY2LDggKzI3MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjg2LDcgKzI5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMzI0LDcgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gYWRkX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTM0MSw3ICszNDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTM2Miw3ICszNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zODcsNyArMzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gYWRkX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNDEyLDcgKzQyMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTQyNSw5ICs0MzYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQzNSw4ICs0NDYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGRfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTQ1NSw3ICs0NjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTQ3Myw3ICs0ODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRkX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTQ4MSw3ICs0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkFERFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNDg5LDggKzUwNCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBhZGRfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSBhZGRfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gYWRkX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTUwMCw3ICs1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTXG4iKTsKK0BAIC01MTQsNyArNTMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDA3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNcbiIpOworQEAgLTUyOCw3ICs1NDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRVModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTU2OSw3ICs1ODgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IG9yX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTU4Niw3ICs2MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDgsNyArNjI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02MzUsNyArNjU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NjIsNyArNjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC02NzYsOSArNjk5LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjg2LDggKzcwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTcwNiw3ICs3MzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTc0NCw3ICs3NjksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gb3JfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtNzYxLDcgKzc4Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNzgyLDcgKzgwOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gb3JfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC04MDcsNyArODM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTgzMiw3ICs4NjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtODQ1LDkgKzg3NCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBvcl93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTg1NSw4ICs4ODQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC04NzUsNyArOTA1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29yX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC04OTMsNyArOTI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC05MDEsNyArOTMzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9SXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTkwOSw4ICs5NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBvcl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTkyMCw3ICs5NTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0Q1NcbiIpOworQEAgLTkzNCwxOCArOTY5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZi4gRXNjYXBlIGZvciB0d28tYnl0ZSBvcGNvZGUgKDI4NiBvciBiZXR0ZXIpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90d29fYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCBvcDIgPSAoKnN5c19yZGIpKCgodTMyKU0ueDg2LlJfQ1MgPDwgNCkgKyAoTS54ODYuUl9JUCsrKSk7CisrICAgIHU4IG9wMiA9ICgqc3lzX3JkYikgKCgodTMyKSBNLng4Ni5SX0NTIDw8IDQpICsgKE0ueDg2LlJfSVArKykpOworKworICAgICBJTkNfREVDT0RFRF9JTlNUX0xFTigxKTsKKy0gICAgKCp4ODZlbXVfb3B0YWIyW29wMl0pKG9wMik7CisrICAgICgqeDg2ZW11X29wdGFiMltvcDJdKSAob3AyKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTk4Niw3ICsxMDI0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gYWRjX2J5dGUoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTEwMDMsNyArMTA0MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTEwMjUsNyArMTA2NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFkY19sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xMDUyLDcgKzEwOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhZGNfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTA3OSw3ICsxMTIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYWRjX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTEwOTMsOSArMTEzNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMTAzLDggKzExNDUsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTExMjMsNyArMTE2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hZGNfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtMTE2MSw3ICsxMjA1LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBhZGNfYnl0ZSgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CitAQCAtMTE3OCw3ICsxMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xMTk5LDcgKzEyNDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjI0LDcgKzEyNzAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjQ5LDcgKzEyOTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhZGNfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMjYyLDkgKzEzMTAsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY193b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEyNzIsOCArMTMyMCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFkY19sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTI5Miw3ICsxMzQxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDE0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWRjX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0xMzEwLDcgKzEzNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYWRjX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTEzMTgsNyArMTM2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FkY193b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQURDXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0xMzI2LDggKzEzNzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYWRjX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYWRjX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFkY193b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0xMzM3LDcgKzEzOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNTXG4iKTsKK0BAIC0xMzUxLDcgKzE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9TUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTU1xuIik7CitAQCAtMTM2NSw3ICsxNDIwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE0MDYsNyArMTQ2Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHNiYl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0xNDIzLDcgKzE0NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xNDQ1LDcgKzE1MDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzYmJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTQ3Miw3ICsxNTMwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc2JiX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE0OTksNyArMTU1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHNiYl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xNTEzLDkgKzE1NzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTUyMyw4ICsxNTgzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNTQzLDcgKzE2MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2JiX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTE1ODEsNyArMTY0Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc2JiX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTE1OTgsNyArMTY2MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTYxOSw3ICsxNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY0NCw3ICsxNzA4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY2OSw3ICsxNzM0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc2JiX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTY4Miw5ICsxNzQ4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xNjkyLDggKzE3NTgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzYmJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3MTIsNyArMTc3OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgxYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NiYl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMTczMCw3ICsxNzk4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NiYl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0xNzM4LDcgKzE4MDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYmJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNCQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMTc0Niw4ICsxODE2LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNiYl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHNiYl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzYmJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMTc1Nyw3ICsxODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHREU1xuIik7CitAQCAtMTc3MSw3ICsxODQzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfRFModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RFNcbiIpOworQEAgLTE3ODUsNyArMTg1OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0xODMwLDcgKzE5MDQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMTg0Nyw3ICsxOTIxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTg2OSw3ICsxOTQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gYW5kX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTE4OTYsNyArMTk3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGFuZF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0xOTIzLDcgKzIwMDAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBhbmRfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMTkzNyw5ICsyMDE1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE5NDcsOCArMjAyNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTk2Nyw3ICsyMDQ2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yMDA1LDcgKzIwODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IGFuZF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yMDIyLDcgKzIxMDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIwNDMsNyArMjEyNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTIwNjksNyArMjE1MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMDk0LDcgKzIxNzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBhbmRfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0yMTA3LDkgKzIxOTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTIxMTcsOCArMjIwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IGFuZF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjEzNyw3ICsyMjIyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYW5kX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IHNyY3ZhbDsKKyAKK0BAIC0yMTU1LDcgKzIyNDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfYW5kX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTIxNjMsNyArMjI1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRFQVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQU5EXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC0yMTcxLDggKzIyNTksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUFYID0gYW5kX2xvbmcoTS54ODYuUl9FQVgsIHNyY3ZhbCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gYW5kX3dvcmQoTS54ODYuUl9BWCwgKHUxNilzcmN2YWwpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9IGFuZF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMTgyLDcgKzIyNzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hbmRfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0VTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJFUzpcbiIpOworQEAgLTIxOTksNyArMjI4OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9FUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBQVxuIik7CitAQCAtMjIxMyw3ICsyMzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTIyNTQsNyArMjM0Niw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgZGVzdHZhbCA9IHN1Yl9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0yMjcxLDcgKzIzNjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MjkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0yMjkzLDcgKzIzODYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBzdWJfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjMyMCw3ICsyNDE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gc3ViX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTIzNDcsNyArMjQ0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHN1Yl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yMzYxLDkgKzI0NTcsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjM3MSw4ICsyNDY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yMzkxLDcgKzI0ODgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3ViX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTI0MjksNyArMjUyNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICpkZXN0cmVnID0gc3ViX2J5dGUoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTI0NDYsNyArMjU0NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjQ2Nyw3ICsyNTY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjQ5Miw3ICsyNTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUxNyw3ICsyNjE4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3ViX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMjUzMCw5ICsyNjMyLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfd29yZCgqZGVzdHJlZywgc3JjdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yNTQwLDggKzI2NDIsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzdWJfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI1NjAsNyArMjY2Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N1Yl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMjU3OCw3ICsyNjgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0yNTg2LDcgKzI2OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdWJfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNVQlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMjU5NCw4ICsyNzAwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHN1Yl9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9IHN1Yl93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSBzdWJfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtMjYwNSw3ICsyNzEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3ViX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9DUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQ1M6XG4iKTsKK0BAIC0yNjE5LDcgKzI3MjcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfQ1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgyZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEQVNcbiIpOworQEAgLTI2MzMsNyArMjc0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Rhcyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yNjc0LDcgKzI3ODQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSB4b3JfYnl0ZShkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihyaCk7CitAQCAtMjY5MSw3ICsyODAxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMjcxMyw3ICsyODI0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0geG9yX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTI3NDAsNyArMjg1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHhvcl9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0yNzY3LDcgKzI4ODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSB4b3JfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMjc4MSw5ICsyODk1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTI3OTEsOCArMjkwNSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjgxMSw3ICsyOTI2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDMyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3hvcl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC0yODQ5LDcgKzI5NjUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHhvcl9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0yODY2LDcgKzI5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI4ODcsNyArMzAwNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MTIsNyArMzAzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5MzcsNyArMzA1Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHhvcl9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTI5NTAsOSArMzA3MCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX3dvcmQoKmRlc3RyZWcsIHNyY3ZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMjk2MCw4ICszMDgwLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0geG9yX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0yOTgwLDcgKzMxMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94b3JfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggc3JjdmFsOworIAorQEAgLTI5OTgsNyArMzEyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94b3Jfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtMzAwNiw3ICszMTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeG9yX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYT1JcdEFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTMwMTQsOCArMzEzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSB4b3JfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSB4b3Jfd29yZChNLng4Ni5SX0FYLCAodTE2KXNyY3ZhbCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0geG9yX3dvcmQoTS54ODYuUl9BWCwgKHUxNikgc3JjdmFsKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTMwMjUsNyArMzE1MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDM2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfU1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNTOlxuIik7CitAQCAtMzAzOSw3ICszMTY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX1NTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhYSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFBXG4iKTsKK0BAIC0zMDUzLDcgKzMxODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTMwOTEsNyArMzIxOSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC0zMTA4LDcgKzMyMzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0zMTI5LDcgKzMyNTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoZGVzdHZhbCwgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CisgCitAQCAtMzE1NCw3ICszMjg0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKGRlc3R2YWwsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworIAorQEAgLTMxNzksNyArMzMxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC0zMTkyLDkgKzMzMjQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBjbXBfd29yZChkZXN0dmFsLCAqc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjAyLDggKzMzMzQsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsICpzcmNyZWcpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0zMjIyLDcgKzMzNTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTMyNjAsNyArMzM5NCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgIGNtcF9ieXRlKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKK0BAIC0zMjc3LDcgKzM0MTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTMyOTgsNyArMzQzMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgc3JjdmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0zMzIzLDcgKzM0NTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgY21wX2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMzM0OCw3ICszNDg1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGNtcF9sb25nKCpkZXN0cmVnLCBzcmN2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTMzNjEsOSArMzQ5OSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGNtcF93b3JkKCpkZXN0cmVnLCBzcmN2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzNzEsOCArMzUwOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBjbXBfbG9uZygqZGVzdHJlZywgKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTMzOTEsNyArMzUzMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NtcF9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBzcmN2YWw7CisgCitAQCAtMzQwOSw3ICszNTQ5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4M2QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC0zNDE3LDcgKzM1NTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtMzQyNSw4ICszNTY3LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wX3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgc3JjdmFsKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHNyY3ZhbCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0zNDM2LDcgKzM1NzksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgzZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0RTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJEUzpcbiIpOworQEAgLTM0NTAsNyArMzU5NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9EUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDNmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfYWFzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkFBU1xuIik7CitAQCAtMzQ2NCwxOCArMzYwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYXModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQVggPSBpbmNfbG9uZyhNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gaW5jX3dvcmQoTS54ODYuUl9BWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM0ODYsMTggKzM2MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVDWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gaW5jX2xvbmcoTS54ODYuUl9FQ1gpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IGluY193b3JkKE0ueDg2LlJfQ1gpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTA4LDE4ICszNjU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VEWCA9IGluY19sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBpbmNfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzUzMCwxOCArMzY4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0MworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0QlhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlggPSBpbmNfbG9uZyhNLng4Ni5SX0VCWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gaW5jX3dvcmQoTS54ODYuUl9CWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM1NTIsMTggKzM3MDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVTUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gaW5jX2xvbmcoTS54ODYuUl9FU1ApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IGluY193b3JkKE0ueDg2LlJfU1ApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNTc0LDE4ICszNzM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5jX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHRCUFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCUCA9IGluY19sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBpbmNfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzU5NiwxOCArMzc1OSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbmNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luY19TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0RVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0U0lcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU0kgPSBpbmNfbG9uZyhNLng4Ni5SX0VTSSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gaW5jX3dvcmQoTS54ODYuUl9TSSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2MTgsMTggKzM3ODQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5jX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbmNfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdEVESVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTkNcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gaW5jX2xvbmcoTS54ODYuUl9FREkpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IGluY193b3JkKE0ueDg2LlJfREkpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNjQwLDE4ICszODA5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2luY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDQ4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGRlY19sb25nKE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBkZWNfd29yZChNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzY2MiwxOCArMzgzNCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBkZWNfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0NYID0gZGVjX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM2ODQsMTggKzM4NTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gZGVjX2xvbmcoTS54ODYuUl9FRFgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9EWCA9IGRlY193b3JkKE0ueDg2LlJfRFgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzA2LDE4ICszODg0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IGRlY19sb25nKE0ueDg2LlJfRUJYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlggPSBkZWNfd29yZChNLng4Ni5SX0JYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzcyOCwxOCArMzkwOSwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBkZWNfbG9uZyhNLng4Ni5SX0VTUCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NQID0gZGVjX3dvcmQoTS54ODYuUl9TUCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM3NTAsMTggKzM5MzQsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9kZWNfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gZGVjX2xvbmcoTS54ODYuUl9FQlApOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9CUCA9IGRlY193b3JkKE0ueDg2LlJfQlApOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zNzcyLDE4ICszOTU5LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2RlY19CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDRlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfZGVjX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IGRlY19sb25nKE0ueDg2LlJfRVNJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfU0kgPSBkZWNfd29yZChNLng4Ni5SX1NJKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzc5NCwxOCArMzk4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9kZWNfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg0ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2RlY19ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkRFQ1x0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBkZWNfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0RJID0gZGVjX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4MTYsMTggKzQwMDksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZGVjX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVBWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zODM4LDE4ICs0MDM0LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VDWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM4NjAsMTggKzQwNTksMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFRFhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RFhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURYKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0RYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzg4MiwxOCArNDA4NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVCWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FQlgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQlgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTA0LDIzICs0MTA5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorLQkgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworLQkgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCistCSAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCXB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CistCX0gZWxzZSB7CistCQlwdXNoX3dvcmQoKHUxNikoTS54ODYuUl9TUCkpOworKyAgICAvKiBBbHdheXMgcHVzaCAoRSlTUCwgc2luY2Ugd2UgYXJlIGVtdWxhdGluZyBhbiBpMzg2IGFuZCBhYm92ZQorKyAgICAgKiBwcm9jZXNzb3IuIFRoaXMgaXMgbmVjZXNzYXJ5IGFzIHNvbWUgQklPUydlcyB1c2UgdGhpcyB0byBjaGVjaworKyAgICAgKiB3aGF0IHR5cGUgb2YgcHJvY2Vzc29yIGlzIGluIHRoZSBzeXN0ZW0uCisrICAgICAqLworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VTUCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgKE0ueDg2LlJfU1ApKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTM5MzAsMTggKzQxMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRFQlBcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0QlBcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRUJQKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0JQKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMzk1MiwxOCArNDE2MywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEVTSVxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfU0kpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC0zOTc0LDE4ICs0MTg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1NworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VESSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9ESSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTM5OTYsMTggKzQyMTMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQVhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRBWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDAxOCwxOCArNDIzOCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQVgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0Q1hcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9DWCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQwNDAsMTggKzQyNjMsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVEWFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfRFggPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MDYyLDE4ICs0Mjg4LDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFQlhcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRCWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0JYID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDA4NCwxOCArNDMxMywyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0U1BcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FU1AgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9TUCA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxMDYsMTggKzQzMzgsMjEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEVCUFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BcdEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gcG9wX2xvbmcoKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC00MTI4LDE4ICs0MzYzLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRFU0lcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QXHRTSVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNDE1MCwxOCArNDM4OCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg1ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3BvcF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBPUFx0RElcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTQxNzIsMTIgKzQ0MTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEFEXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlBVU0hBXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTQxOTIsNyArNDQzNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHB1c2hfbG9uZyhNLng4Ni5SX0VCUCk7CisgICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FU0kpOworICAgICAgICAgcHVzaF9sb25nKE0ueDg2LlJfRURJKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHUxNiBvbGRfc3AgPSBNLng4Ni5SX1NQOworIAorICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQVgpOworQEAgLTQyMTIsMTIgKzQ0NTYsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2MQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcG9wX2FsbCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQURcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUE9QQVxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKK0BAIC00MjI1LDE2ICs0NDcxLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9hbGwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgTS54ODYuUl9FREkgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FU0kgPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQlAgPSBwb3BfbG9uZygpOworLSAgICAgICAgTS54ODYuUl9FU1AgKz0gNDsgICAgICAgICAgICAgIC8qIHNraXAgRVNQICovCisrICAgICAgICBNLng4Ni5SX0VTUCArPSA0OyAgICAgICAvKiBza2lwIEVTUCAqLworICAgICAgICAgTS54ODYuUl9FQlggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FRFggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQ1ggPSBwb3BfbG9uZygpOworICAgICAgICAgTS54ODYuUl9FQVggPSBwb3BfbG9uZygpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9ESSA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX1NJID0gcG9wX3dvcmQoKTsKKyAgICAgICAgIE0ueDg2LlJfQlAgPSBwb3Bfd29yZCgpOworLSAgICAgICAgTS54ODYuUl9TUCArPSAyOyAgICAgICAgICAgICAgIC8qIHNraXAgU1AgKi8KKysgICAgICAgIE0ueDg2LlJfU1AgKz0gMjsgICAgICAgIC8qIHNraXAgU1AgKi8KKyAgICAgICAgIE0ueDg2LlJfQlggPSBwb3Bfd29yZCgpOworICAgICAgICAgTS54ODYuUl9EWCA9IHBvcF93b3JkKCk7CisgICAgICAgICBNLng4Ni5SX0NYID0gcG9wX3dvcmQoKTsKK0BAIC00MjUxLDcgKzQ0OTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfYWxsKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9GUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiRlM6XG4iKTsKK0BAIC00MjY4LDcgKzQ1MTYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zZWdvdnJfRlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2NQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Vnb3ZyX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJHUzpcbiIpOworQEAgLTQyODUsNyArNDUzNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NlZ292cl9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY2IC0gcHJlZml4IGZvciAzMi1iaXQgcmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3ByZWZpeF9kYXRhKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkRBVEE6XG4iKTsKK0BAIC00Mjk5LDcgKzQ1NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wcmVmaXhfZGF0YSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY3IC0gcHJlZml4IGZvciAzMi1iaXQgYWRkcmVzcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUREUjpcbiIpOworQEAgLTQzMTMsMjIgKzQ1NjQsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHJlZml4X2FkZHIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2OAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBpbW07CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URjIoIlBVU0hcdCV4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhpbW0pOworLSAgICB9IGVsc2UgeworLSAgICAgICAgcHVzaF93b3JkKCh1MTYpaW1tKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHB1c2hfd29yZCgodTE2KSBpbW0pOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNDMzOCw3ICs0NTkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaF93b3JkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC00MzUxLDcgKzQ2MDYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDM1OSwxOCArNDYxNCwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00MzgxLDI0ICs0NjM4LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQwNiwxOCArNDY2NSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDI4LDI0ICs0Njg5LDI2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CitAQCAtNDQ1MywxOCArNDcxNiwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NDc1LDQyICs0NzQwLDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX3dvcmRfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAgICAgICAgICAgICBzMzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqc3JjcmVnLChzMzIpaW1tKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogc3JjcmVnLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiByZXM7CisgICAgICAgICAgICAgczE2IGltbTsKKyAKK0BAIC00NTE4LDE2ICs0Nzg3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfd29yZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqc3JjcmVnICogKHMxNilpbW07CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIHNyY3JlZyAqIChzMTYpIGltbTsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNDUzOSwxOCArNDgwOSwyMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcHVzaF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzMTYgaW1tOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworLSAgICBpbW0gPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiUFVTSFx0JWRcbiIsIGltbSk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQlwdXNoX2xvbmcoKHMzMilpbW0pOworLSAgICB9IGVsc2UgeworLQlwdXNoX3dvcmQoaW1tKTsKKysgICAgICAgIHB1c2hfbG9uZygoczMyKSBpbW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKGltbSk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC00NTYwLDExICs0ODMyLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW11bF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CistICAgIHM4ICBpbW07CisrICAgIHM4IGltbTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtNDU3NCwyNSArNDg0NywyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjAyLDQyICs0ODc3LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjQ3LDQyICs0OTI2LDQ2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMilzcmN2YWwsKHMzMilpbW0pOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgc3JjdmFsLCAoczMyKSBpbW0pOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC00NjkyLDU3ICs0OTc1LDYyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ltdWxfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CistICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMilpbW0pOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KXNyY3ZhbCAqIChzMTYpaW1tOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpIHNyY3ZhbCAqKHMxNikgaW1tOworKworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKWltbSk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwlZFxuIiwgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKnNyY3JlZywoczMyKWltbSk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIHNyY3JlZywgKHMzMikgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgKmRlc3RyZWcsKnNyY3JlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNyY3JlZzsKKyAgICAgICAgICAgICB1MzIgcmVzOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF9ieXRlX2ltbSgpOworLSAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJWRcbiIsIChzMzIpaW1tKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpzcmNyZWcgKiAoczE2KWltbTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCVkXG4iLCAoczMyKSBpbW0pOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogc3JjcmVnICogKHMxNikgaW1tOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC00NzU0LDcgKzUwNDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbXVsX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklOU0JcbiIpOworQEAgLTQ3NjgsMTMgKzUwNTcsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlNEXG4iKTsKKyAgICAgICAgIGlucyg0KTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOU1dcbiIpOworICAgICAgICAgaW5zKDIpOworICAgICB9CitAQCAtNDc4Nyw3ICs1MDc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRTQlxuIik7CitAQCAtNDgwMSwxMyArNTA5MywxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg2ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFNEXG4iKTsKKyAgICAgICAgIG91dHMoNCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJPVVRTV1xuIik7CisgICAgICAgICBvdXRzKDIpOworICAgICB9CitAQCAtNDgyMCw3ICs1MTE0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00ODI4LDggKzUxMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfT0YpKQorQEAgLTQ4NDIsNyArNTEzNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9PKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NTAsOCArNTE0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OTyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgb3ZlcmZsb3cgaXMgbm90IHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTk9cdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX09GKSkKK0BAIC00ODY0LDcgKzUxNjAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTk8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3MgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4NzIsOCArNTE2OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBjYXJyeSBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkJcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorQEAgLTQ4ODYsNyArNTE4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ4OTQsOCArNTE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgY2FycnkgZmxhZyBpcyBjbGVhci4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmICghQUNDRVNTX0ZMQUcoRl9DRikpCitAQCAtNDkwOCw3ICs1MjA2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC00OTE2LDggKzUyMTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIHNldC4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfWkYpKQorQEAgLTQ5MzAsNyArNTIyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9aKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTQ5MzgsOCArNTIzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OWih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgemVybyBmbGFnIGlzIGNsZWFyLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlpcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1pGKSkKK0BAIC00OTUyLDcgKzUyNTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTloodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk2MSw4ICs1MjYyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgZmxhZyBpcyBzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpCRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRikpCitAQCAtNDk3NSw3ICs1Mjc2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0JFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OQkUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNDk4NCw4ICs1Mjg2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5CRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSkpCitAQCAtNDk5OCw3ICs1MzAwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05CRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDc4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTAwNiw4ICs1MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1ModTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSlNcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKEFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwMjAsNyArNTMyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9TKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4NzkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTlModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwMjgsOCArNTMzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIC8qIGp1bXAgdG8gYnl0ZSBvZmZzZXQgaWYgc2lnbiBmbGFnIGlzIGNsZWFyICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpOU1x0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoIUFDQ0VTU19GTEFHKEZfU0YpKQorQEAgLTUwNDIsNyArNTM0Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9OUyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTA1MCw4ICs1MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIHNldCAoZXZlbiBwYXJpdHkpICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpQXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDY0LDcgKzUzNjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdiCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05QKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MDcyLDggKzUzNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHBhcml0eSBmbGFnIGlzIGNsZWFyIChvZGQgcGFyaXR5KSAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTlBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIChzMTYpb2Zmc2V0KTsKKysgICAgb2Zmc2V0ID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICB0YXJnZXQgPSAodTE2KSAoTS54ODYuUl9JUCArIChzMTYpIG9mZnNldCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIleFxuIiwgdGFyZ2V0KTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKCFBQ0NFU1NfRkxBRyhGX1BGKSkKK0BAIC01MDg2LDcgKzUzOTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggb2Zmc2V0OworICAgICB1MTYgdGFyZ2V0OworQEAgLTUwOTUsOCArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBzaWduIGZsYWcgbm90IGVxdWFsIHRvIG92ZXJmbG93IGZsYWcuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkpMXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTExLDcgKzU0MTgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDdkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfanVtcF9uZWFyX05MKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTIwLDggKzU0MjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAvKiBqdW1wIHRvIGJ5dGUgb2Zmc2V0IGlmIHNpZ24gZmxhZyBub3QgZXF1YWwgdG8gb3ZlcmZsb3cgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTM3LDcgKzU0NDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfbmVhcl9MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBzOCBvZmZzZXQ7CisgICAgIHUxNiB0YXJnZXQ7CitAQCAtNTE0Nyw4ICs1NDU2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0xFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgb3IgdGhlIHplcm8gZmxhZyBpcyBzZXQgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSkxFXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyAoczE2KW9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyAoczE2KSBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIHNmID0gQUNDRVNTX0ZMQUcoRl9TRikgIT0gMDsKK0BAIC01MTYzLDcgKzU0NzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTEUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg3ZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX05MRSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHM4IG9mZnNldDsKKyAgICAgdTE2IHRhcmdldDsKK0BAIC01MTczLDggKzU0ODMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgYW5kIHRoZSB6ZXJvIGZsYWcgaXMgY2xlYXIgKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk5MRVx0Iik7CistICAgIG9mZnNldCA9IChzOClmZXRjaF9ieXRlX2ltbSgpOworLSAgICB0YXJnZXQgPSAodTE2KShNLng4Ni5SX0lQICsgKHMxNilvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgKHMxNikgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBzZiA9IEFDQ0VTU19GTEFHKEZfU0YpICE9IDA7CitAQCAtNTE4NSwyMyArNTQ5NSwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX25lYXJfTkxFKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1OCAoKm9wYzgwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIGFkZF9ieXRlLCAgICAgICAgICAgLyogMDAgKi8KKy0gICAgb3JfYnl0ZSwgICAgICAgICAgICAvKiAwMSAqLworLSAgICBhZGNfYnl0ZSwgICAgICAgICAgIC8qIDAyICovCistICAgIHNiYl9ieXRlLCAgICAgICAgICAgLyogMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKiAwNCAqLworLSAgICBzdWJfYnl0ZSwgICAgICAgICAgIC8qIDA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyogMDYgKi8KKy0gICAgY21wX2J5dGUsICAgICAgICAgICAvKiAwNyAqLworK3N0YXRpYyB1OCgqb3BjODBfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IGQsIHU4IHMpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyogMDAgKi8KKysgICAgICAgIG9yX2J5dGUsICAgICAgICAgICAgICAgIC8qIDAxICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKiAwMiAqLworKyAgICAgICAgc2JiX2J5dGUsICAgICAgICAgICAgICAgLyogMDMgKi8KKysgICAgICAgIGFuZF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA0ICovCisrICAgICAgICBzdWJfYnl0ZSwgICAgICAgICAgICAgICAvKiAwNSAqLworKyAgICAgICAgeG9yX2J5dGUsICAgICAgICAgICAgICAgLyogMDYgKi8KKysgICAgICAgIGNtcF9ieXRlLCAgICAgICAgICAgICAgIC8qIDA3ICovCisgfTsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC01MjkwLDcgKzU2MDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MF9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKK0BAIC01MzA1LDM1ICs1NjE1LDM0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgwX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorLXN0YXRpYyB1MTYgKCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSh1MTYgZCwgdTE2IHMpID0KKy17CistICAgIGFkZF93b3JkLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl93b3JkLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX3dvcmQsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl93b3JkLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfd29yZCwgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfd29yZCwgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTE2KCpvcGM4MV93b3JkX29wZXJhdGlvbltdKSAodTE2IGQsIHUxNiBzKSA9IHsKKysgICAgYWRkX3dvcmQsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX3dvcmQsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY193b3JkLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl93b3JkLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF93b3JkLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF93b3JkLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorLXN0YXRpYyB1MzIgKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSh1MzIgZCwgdTMyIHMpID0KKy17CistICAgIGFkZF9sb25nLCAgICAgICAgICAgLyowMCAqLworLSAgICBvcl9sb25nLCAgICAgICAgICAgIC8qMDEgKi8KKy0gICAgYWRjX2xvbmcsICAgICAgICAgICAvKjAyICovCistICAgIHNiYl9sb25nLCAgICAgICAgICAgLyowMyAqLworLSAgICBhbmRfbG9uZywgICAgICAgICAgIC8qMDQgKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLworLSAgICBjbXBfbG9uZywgICAgICAgICAgIC8qMDcgKi8KKytzdGF0aWMgdTMyKCpvcGM4MV9sb25nX29wZXJhdGlvbltdKSAodTMyIGQsIHUzMiBzKSA9IHsKKysgICAgYWRkX2xvbmcsICAgICAgICAgICAgICAgICAgIC8qMDAgKi8KKysgICAgICAgIG9yX2xvbmcsICAgICAgICAgICAgICAgIC8qMDEgKi8KKysgICAgICAgIGFkY19sb25nLCAgICAgICAgICAgICAgIC8qMDIgKi8KKysgICAgICAgIHNiYl9sb25nLCAgICAgICAgICAgICAgIC8qMDMgKi8KKysgICAgICAgIGFuZF9sb25nLCAgICAgICAgICAgICAgIC8qMDQgKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8KKysgICAgICAgIGNtcF9sb25nLCAgICAgICAgICAgICAgIC8qMDcgKi8KKyB9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDgxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01Mzg3LDcgKzU2OTYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTM5OSw4ICs1NzA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNTQxNiw3ICs1NzI2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMToKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQyOCw4ICs1NzM4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNTQ0NSw3ICs1NzU2LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ1Nyw4ICs1NzY4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNTQ3MiwxMCArNTc4NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4MV93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCxpbW07CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIGltbTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC01NDg1LDkgKzU3OTcsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wYzgxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBpbW0pOworICAgICAgICAgICAgIGlmIChyaCAhPSA3KQorICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IGRlc3R2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU1MDQsMjMgKzU4MTcsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHU4ICgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkodTggcywgdTggZCkgPQorLXsKKy0gICAgYWRkX2J5dGUsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2J5dGUsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19ieXRlLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfYnl0ZSwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2J5dGUsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2J5dGUsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9ieXRlLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9ieXRlLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1OCgqb3BjODJfYnl0ZV9vcGVyYXRpb25bXSkgKHU4IHMsIHU4IGQpID0geworKyAgICBhZGRfYnl0ZSwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfYnl0ZSwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfYnl0ZSwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfYnl0ZSwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfYnl0ZSwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9ieXRlLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9ieXRlLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2J5dGUsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgyX2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWc7CitAQCAtNTYwNiw3ICs1OTE5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworQEAgLTU2MjAsMzUgKzU5MzMsMzQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CisgCistc3RhdGljIHUxNiAoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pKHUxNiBzLCB1MTYgZCkgPQorLXsKKy0gICAgYWRkX3dvcmQsICAgICAgICAgICAvKjAwICovCistICAgIG9yX3dvcmQsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY193b3JkLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfd29yZCwgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX3dvcmQsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX3dvcmQsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl93b3JkLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF93b3JkLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MTYoKm9wYzgzX3dvcmRfb3BlcmF0aW9uW10pICh1MTYgcywgdTE2IGQpID0geworKyAgICBhZGRfd29yZCwgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3Jfd29yZCwgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfd29yZCwgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfd29yZCwgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfd29yZCwgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl93b3JkLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl93b3JkLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX3dvcmQsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCistc3RhdGljIHUzMiAoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1MzIgZCkgPQorLXsKKy0gICAgYWRkX2xvbmcsICAgICAgICAgICAvKjAwICovCistICAgIG9yX2xvbmcsICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGFkY19sb25nLCAgICAgICAgICAgLyowMiAqLworLSAgICBzYmJfbG9uZywgICAgICAgICAgIC8qMDMgKi8KKy0gICAgYW5kX2xvbmcsICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKy0gICAgc3ViX2xvbmcsICAgICAgICAgICAvKjA1ICovCistICAgIHhvcl9sb25nLCAgICAgICAgICAgLyowNiAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCistICAgIGNtcF9sb25nLCAgICAgICAgICAgLyowNyAqLworK3N0YXRpYyB1MzIoKm9wYzgzX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTMyIGQpID0geworKyAgICBhZGRfbG9uZywgICAgICAgICAgICAgICAgICAgLyowMCAqLworKyAgICAgICAgb3JfbG9uZywgICAgICAgICAgICAgICAgLyowMSAqLy8qWVlZIFVOVVNFRCA/Pz8/ICovCisrICAgICAgICBhZGNfbG9uZywgICAgICAgICAgICAgICAvKjAyICovCisrICAgICAgICBzYmJfbG9uZywgICAgICAgICAgICAgICAvKjAzICovCisrICAgICAgICBhbmRfbG9uZywgICAgICAgICAgICAgICAvKjA0ICovLypZWVkgVU5VU0VEID8/Pz8gKi8KKysgICAgICAgIHN1Yl9sb25nLCAgICAgICAgICAgICAgIC8qMDUgKi8KKysgICAgICAgIHhvcl9sb25nLCAgICAgICAgICAgICAgIC8qMDYgKi8vKllZWSBVTlVTRUQgPz8/PyAqLworKyAgICAgICAgY21wX2xvbmcsICAgICAgICAgICAgICAgLyowNyAqLworIH07CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ODMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTU2NjcsNyArNTk3OSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgIGdlbmVyYWwsIHNvIHRoYXQgaXQgaXMgaW1wb3J0YW50IHRvIGxlYXZlIHRoZSBzdHJpbmdzCisgICAgICAgICAgICBpbiB0aGUgc2FtZSBmb3JtYXQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgaXMgdGhhdCB0aGUgCisgICAgICAgICAgICBhYm92ZSB0ZXN0IGlzIGRvbmUgdHdpY2UuICovCistICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJBRERcdCIpOworICAgICAgICAgICAgIGJyZWFrOworQEAgLTU3MDAsNyArNjAxMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgc3dpdGNoIChtb2QpIHsKKyAgICAgY2FzZSAwOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzExLDggKzYwMjMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC01NzI3LDcgKzYwNDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzM4LDggKzYwNTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC01NzU0LDcgKzYwNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRFdPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01NzY1LDggKzYwNzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgaW1tKTsKKyAgICAgICAgICAgICBpZiAocmggIT0gNykKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCxpbW07CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC01Nzc5LDEwICs2MDk0LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wYzgzX3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLGltbTsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gKHM4KSBmZXRjaF9ieXRlX2ltbSgpOworQEAgLTU3OTEsOSArNjEwNiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGM4M193b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjODNfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGltbSk7CisgICAgICAgICAgICAgaWYgKHJoICE9IDcpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsaW1tOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CitAQCAtNTgxMyw3ICs2MTI5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjODNfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC01ODUxLDcgKzYxNjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgdGVzdF9ieXRlKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC01ODY4LDcgKzYxODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC01ODg5LDcgKzYyMDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTE0LDcgKzYyMzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTM5LDcgKzYyNTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKK0BAIC01OTUyLDkgKzYyNzMsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdGVzdF93b3JkKGRlc3R2YWwsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTU5NjIsOCArNjI4Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3Rfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgdGVzdF9sb25nKCpkZXN0cmVnLCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNTk4Miw3ICs2MzA0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4NgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MDMwLDcgKzYzNTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJoKTsKK0BAIC02MDQ5LDcgKzYzNzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX2J5dGVfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02MDYxLDcgKzYzODUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MzIgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjA3Myw5ICs2Mzk3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAqc3JjcmVnID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBkZXN0dmFsID0gdG1wOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MTYgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYwOTIsNyArNjQxNyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpzcmNyZWc7CistICAgICAgICAgICAgdTMyIGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUzMiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTA0LDkgKzY0MjksMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICpzcmNyZWcgPSBkZXN0dmFsOworICAgICAgICAgICAgIGRlc3R2YWwgPSB0bXA7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqc3JjcmVnOworLSAgICAgICAgICAgIHUxNiBkZXN0dmFsLHRtcDsKKysgICAgICAgICAgICB1MTYgZGVzdHZhbCwgdG1wOworIAorICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjEyMyw3ICs2NDQ5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0gICAgICAgICAgICB1MzIgZGVzdHZhbCx0bXA7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHRtcDsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYxMzUsOSArNjQ2MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKnNyY3JlZyA9IGRlc3R2YWw7CisgICAgICAgICAgICAgZGVzdHZhbCA9IHRtcDsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpzcmNyZWc7CistICAgICAgICAgICAgdTE2IGRlc3R2YWwsdG1wOworKyAgICAgICAgICAgIHUxNiBkZXN0dmFsLCB0bXA7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC02MTUxLDkgKzY0NzgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUzMiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKK0BAIC02MTY0LDggKzY0OTEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgdG1wID0gKnNyY3JlZzsKKyAgICAgICAgICAgICAqc3JjcmVnID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSB0bXA7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworICAgICAgICAgICAgIHUxNiB0bXA7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02MTg3LDcgKzY1MTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94Y2hnX3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDg4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZywgKnNyY3JlZzsKK0BAIC02MjIxLDcgKzY1NTAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgKnNyY3JlZyk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworQEAgLTYyMzgsNyArNjU2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4OQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9STV9SKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTMyIGRlc3RvZmZzZXQ7CitAQCAtNjI1Nyw3ICs2NTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtNjI3OCw3ICs2NjA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtNjI5OSw3ICs2NjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCAqc3JjcmVnKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKyAKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtNjMxMCw5ICs2NjQzLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fUih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsICpzcmNyZWcpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzMjAsOCArNjY1Myw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICpzcmNyZWc7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc3JjcmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTYzNDAsNyArNjY3NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTggKmRlc3RyZWcsICpzcmNyZWc7CitAQCAtNjM3OCw3ICs2NzEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworQEAgLTYzOTUsNyArNjczMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtNjQxNiw3ICs2NzUyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTY0NDEsNyArNjc3OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC02NDY2LDcgKzY4MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtNjQ3OSw3ICs2ODE4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWcsICpzcmNyZWc7CisgCitAQCAtNjQ4OSw3ICs2ODI4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gKnNyY3JlZzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKK0BAIC02NTA5LDcgKzY4NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY1NDcsNyArNjg4OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX1NSKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAqc3JjcmVnOworICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IGRlY29kZV9ybV9zZWdfcmVnaXN0ZXIocmgpOworQEAgLTY1NjQsNDcgKzY5MDUsNzcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fU1IodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg4ZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xlYV93b3JkX1JfTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CistICAgIHUxNiAqc3JjcmVnOworICAgICB1aW50IGRlc3RvZmZzZXQ7CisgCistLyoKKy0gKiBUT0RPOiBOZWVkIHRvIGhhbmRsZSBhZGRyZXNzIHNpemUgcHJlZml4IQorLSAqCistICogbGVhICBlYXgsW2VheCtlYngqMl0gPz8KKy0gKi8KKy0gICAgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkxFQVx0Iik7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0gICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0gICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CistICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgKnNyY3JlZyA9ICh1MTYpZGVzdG9mZnNldDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfQUREUikgeworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTMyKSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MTYpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLSAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworLSAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLSAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKy0gICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqc3JjcmVnID0gKHUxNilkZXN0b2Zmc2V0OworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9BRERSKSB7CisrICAgICAgICAgICAgdTMyICpzcmNyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrCisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgKnNyY3JlZyA9ICh1MzIpIGRlc3RvZmZzZXQ7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUxNikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CistICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CistICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworLSAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICpzcmNyZWcgPSAodTE2KWRlc3RvZmZzZXQ7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0FERFIpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICAqc3JjcmVnID0gKHUzMikgZGVzdG9mZnNldDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgICpzcmNyZWcgPSAodTE2KSBkZXN0b2Zmc2V0OworKyAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgLyogdW5kZWZpbmVkLiAgRG8gbm90aGluZy4gKi8KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtNjYxNiw3ICs2OTg3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhX3dvcmRfUl9NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdTE2ICpkZXN0cmVnLCAqc3JjcmVnOworQEAgLTY2NTQsNyArNzAyNiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02Njc3LDcgKzcwNDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDhmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcG9wX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTY2OTksNyArNzA3Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTY3MTgsNyArNzA5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTY3MzcsNyArNzExMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gcG9wX2xvbmcoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTY3NDcsNyArNzEyMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTY3NTUsNyArNzEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gcG9wX2xvbmcoKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC02NzczLDcgKzcxNTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wb3BfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5MAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX25vcCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJOT1BcbiIpOworQEAgLTY3ODYsMTQgKzcxNjQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfbm9wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9DWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQ1godTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUNYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLENYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MDEsMTAgKzcxODEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VDWDsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0NYOworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4MTQsMTQgKzcxOTUsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4MjksMTAgKzcyMTIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VEWDsKKyAgICAgICAgIE0ueDg2LlJfRURYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RYOworLSAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9EWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NDIsMTQgKzcyMjYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJYXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4NTcsMTAgKzcyNDMsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCWDsKKyAgICAgICAgIE0ueDg2LlJfRUJYID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JYOworLSAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CWCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4NzAsMTQgKzcyNTcsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU1AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY4ODUsMTAgKzcyNzQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTUDsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NQOworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY4OTgsMTQgKzcyODgsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9CUCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRUJQXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLEJQXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5MTMsMTAgKzczMDUsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VCUDsKKyAgICAgICAgIE0ueDg2LlJfRUJQID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0JQOworLSAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9CUCA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5MjYsMTQgKzczMTksMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0JQKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9TSSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfU0kodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRVNJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLFNJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NDEsMTAgKzczMzYsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VTSTsKKyAgICAgICAgIE0ueDg2LlJfRVNJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX1NJOworLSAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9TSSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5NTQsMTQgKzczNTAsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF94Y2hnX3dvcmRfQVhfREkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHRtcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJYQ0hHXHRFQVgsRURJXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlhDSEdcdEFYLERJXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTY5NjksMTAgKzczNjcsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIHRtcCA9IE0ueDg2LlJfRUFYOworICAgICAgICAgTS54ODYuUl9FQVggPSBNLng4Ni5SX0VESTsKKyAgICAgICAgIE0ueDg2LlJfRURJID0gdG1wOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdG1wID0gTS54ODYuUl9BWDsKKyAgICAgICAgIE0ueDg2LlJfQVggPSBNLng4Ni5SX0RJOworLSAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpdG1wOworKyAgICAgICAgTS54ODYuUl9ESSA9ICh1MTYpIHRtcDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTY5ODIsMjUgKzczODEsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfeGNoZ193b3JkX0FYX0RJKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jYncodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJDV0RFXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNCV1xuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBpZiAoTS54ODYuUl9BWCAmIDB4ODAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRUFYIHw9IDB4ZmZmZjAwMDA7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgTS54ODYuUl9FQVggJj0gMHgwMDAwZmZmZjsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FMICYgMHg4MCkgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweGZmOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIE0ueDg2LlJfQUggPSAweDA7CisgICAgICAgICB9CisgICAgIH0KK0BAIC03MDEyLDEyICs3NDE2LDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2Nidyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDk5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY3dkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiQ0RRXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNXRFxuIik7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URigiQ1dEXG4iKTsKK0BAIC03MDI1LDEzICs3NDMxLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2N3ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgaWYgKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgeworICAgICAgICAgICAgIE0ueDg2LlJfRURYID0gMHhmZmZmZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VEWCA9IDB4MDsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIGlmIChNLng4Ni5SX0FYICYgMHg4MDAwKSB7CisgICAgICAgICAgICAgTS54ODYuUl9EWCA9IDB4ZmZmZjsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0RYID0gMHgwOworICAgICAgICAgfQorICAgICB9CitAQCAtNzA0MywxNyArNzQ1MiwyNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jd2QodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2FsbF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgZmFyc2VnLCBmYXJvZmY7CisrICAgIHUzMiBmYXJzZWcsIGZhcm9mZjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CistCWZhcm9mZiA9IGZldGNoX3dvcmRfaW1tKCk7CistCWZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4OiIsIGZhcnNlZyk7CistCURFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBmYXJvZmYpOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgZmFyc2VnLCBmYXJvZmYsICJGQVIgIik7CisrICAgIERFQ09ERV9QUklOVEYoIkNBTExcdCIpOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGZhcm9mZiA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBmYXJzZWcgPSBmZXRjaF93b3JkX2ltbSgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgZmFyb2ZmID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGZhcnNlZyA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHg6IiwgZmFyc2VnKTsKKysgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIGZhcm9mZik7CisrICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBmYXJzZWcsIGZhcm9mZiwgIkZBUiAiKTsKKyAKKyAgICAgLyogWFhYCisgICAgICAqIAorQEAgLTcwNjQsOCArNzQ4MCwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CisgICAgIE0ueDg2LlJfQ1MgPSBmYXJzZWc7CistICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKy0gICAgTS54ODYuUl9JUCA9IGZhcm9mZjsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICB9CisrICAgIE0ueDg2LlJfRUlQID0gZmFyb2ZmICYgMHhmZmZmOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC03MDc0LDcgKzc0OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfd2FpdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF93YWl0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIldBSVQiKTsKK0BAIC03MDg4LDE0ICs3NTEwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3dhaXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHg5YworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBmbGFnczsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQVVNIRkRcbiIpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiUFVTSEZcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtNzEwNCw4ICs3NTI4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcHVzaGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGZsYWdzID0gKE0ueDg2LlJfRUZMRyAmIEZfTVNLKSB8IEZfQUxXQVlTX09OOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIHB1c2hfbG9uZyhmbGFncyk7CistICAgIH0gZWxzZSB7CistICAgICAgICBwdXNoX3dvcmQoKHUxNilmbGFncyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgZmxhZ3MpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzExNSwxOCArNzU0MCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9wdXNoZl93b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9wb3BmX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGRFxuIik7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJQT1BGXG4iKTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUZMRyA9IHBvcF9sb25nKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0ZMRyA9IHBvcF93b3JkKCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTcxMzcsNyArNzU2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3BvcGZfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDllCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3NhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiU0FIRlxuIik7CitAQCAtNzE1NCwxMiArNzU4MywxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zYWhmKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4OWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGFoZih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMQUhGXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JTS54ODYuUl9BSCA9ICh1OCkoTS54ODYuUl9GTEcgJiAweGZmKTsKKysgICAgTS54ODYuUl9BSCA9ICh1OCkgKE0ueDg2LlJfRkxHICYgMHhmZik7CisgICAgIC8qdW5kb2N1bWVudGVkIFRDKysgYmVoYXZpb3I/Pz8gTm9wZS4gIEl0J3MgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgIHlvdSBoYXZlIHRvbyBsb29rIHJlYWwgaGFyZCB0byBub3RpY2UgaXQuICovCisgICAgIE0ueDg2LlJfQUggfD0gMHgyOworQEAgLTcxNzEsNyArNzYwMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xhaGYodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X0FMX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcxODksNyArNzYyMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9BTF9NX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X0FYX01fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzE5NywxMyArNzYyOSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdEVBWCxbJTA0eF1cbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRBWCxbJTA0eF1cbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhvZmZzZXQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgTS54ODYuUl9BWCA9IGZldGNoX2RhdGFfd29yZChvZmZzZXQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKK0BAIC03MjE0LDcgKzc2NDgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X01fQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgb2Zmc2V0OworIAorQEAgLTcyMzIsNyArNzY2Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9NX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGEzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X01fQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBvZmZzZXQ7CisgCitAQCAtNzI0MCwxMyArNzY3NiwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBvZmZzZXQgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCJNT1ZcdFslMDR4XSxFQVhcbiIsIG9mZnNldCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiTU9WXHRbJTA0eF0sQVhcbiIsIG9mZnNldCk7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBzdG9yZV9kYXRhX2xvbmcob2Zmc2V0LCBNLng4Ni5SX0VBWCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzdG9yZV9kYXRhX3dvcmQob2Zmc2V0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtNzI1NywxNSArNzY5NSwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfTV9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1OCAgdmFsOworKyAgICB1OCB2YWw7CisgICAgIHUzMiBjb3VudDsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTU9WU1x0QllURVxuIik7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03MjkyLDcgKzc3MzEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhNQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdnNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgdmFsOworICAgICBpbnQgaW5jOworQEAgLTczMDEsMTMgKzc3NDEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZTXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03MzI1LDkgKzc3NjYsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREksIHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNil2YWwpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwgKHUxNikgdmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM0MCw3ICs3NzgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92c193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMSwgdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03MzQ4LDcgKzc3OTEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDTVBTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTczNTksNyArNzgwMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CisgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfYnl0ZShNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKysgICAgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzM2Nyw3ICs3ODEwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5tb2RlICY9IH5TWVNNT0RFX1BSRUZJWF9SRVBFOworLSAgICB9IGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworKyAgICB9CisrICAgIGVsc2UgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9SRVBORSkgeworICAgICAgICAgLyogUkVQTkUgICovCisgICAgICAgICAvKiBtb3ZlIHRoZW0gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKyAgICAgICAgIHdoaWxlIChNLng4Ni5SX0NYICE9IDApIHsKK0BAIC03MzgxLDcgKzc4MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZSh2YWwxLCB2YWwyKTsKK0BAIC03Mzk2LDIxICs3ODQxLDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGE3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUzMiB2YWwxLHZhbDI7CisrICAgIHUzMiB2YWwxLCB2YWwyOworICAgICBpbnQgaW5jOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkNNUFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc0MjQsMTAgKzc4NzEsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21wc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgdmFsMSA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKyAgICAgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KSB2YWwxLCAodTE2KSB2YWwyKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgTS54ODYuUl9DWCAtPSAxOworICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworQEAgLTc0MzYsNyArNzg4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtcHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzQ0NCwxMCArNzg5MywxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgICAgICB2YWwyID0gZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKyAgICAgICAgICAgICAgICAgY21wX2xvbmcodmFsMSwgdmFsMik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworLSAgICAgICAgICAgICAgICBjbXBfd29yZCgodTE2KXZhbDEsICh1MTYpdmFsMik7CisrICAgICAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzQ1NiwxNSArNzkwNiwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwxID0gZmV0Y2hfZGF0YV9sb25nKE0ueDg2LlJfU0kpOworICAgICAgICAgICAgIHZhbDIgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKHZhbDEsIHZhbDIpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbDEgPSBmZXRjaF9kYXRhX3dvcmQoTS54ODYuUl9TSSk7CisgICAgICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoKHUxNil2YWwxLCAodTE2KXZhbDIpOworKyAgICAgICAgICAgIGNtcF93b3JkKCh1MTYpIHZhbDEsICh1MTYpIHZhbDIpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKK0BAIC03NDc3LDcgKzc5MjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbXBzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfdGVzdF9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGltbTsKKyAKK0BAIC03NDg2LDcgKzc5MzksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGltbSA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpbW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLQl0ZXN0X2J5dGUoTS54ODYuUl9BTCwgKHU4KWltbSk7CisrICAgIHRlc3RfYnl0ZShNLng4Ni5SX0FMLCAodTgpIGltbSk7CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTc0OTUsNyArNzk0OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YTkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3Rlc3RfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtNzUwMyw3ICs3OTU3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfdGVzdF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdEVBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRBWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03NTExLDggKzc5NjYsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgdGVzdF9sb25nKE0ueDg2LlJfRUFYLCBzcmN2YWwpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgdGVzdF93b3JkKE0ueDg2LlJfQVgsICh1MTYpc3JjdmFsKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIHRlc3Rfd29yZChNLng4Ni5SX0FYLCAodTE2KSBzcmN2YWwpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtNzUyMiwxMyArNzk3OCwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF90ZXN0X0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNUT1NcdEJZVEVcbiIpOworLSAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgICAgLyogZG93biAqLworICAgICAgICAgaW5jID0gLTE7CisgICAgIGVsc2UKKyAgICAgICAgIGluYyA9IDE7CitAQCAtNzU0Miw3ICs3OTk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FMKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICB9CitAQCAtNzU1NCw3ICs4MDEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0b3Nfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAgICAgdTMyIGNvdW50OworQEAgLTc1NjIsMTMgKzgwMjEsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHREV09SRFxuIik7CistICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAgLyogZG93biAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgLyogZG93biAqLworICAgICAgICAgICAgIGluYyA9IC00OworICAgICAgICAgZWxzZQorICAgICAgICAgICAgIGluYyA9IDQ7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJTVE9TXHRXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gMjsKK0BAIC03NTg1LDcgKzgwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdG9zX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICB3aGlsZSAoY291bnQtLSkgeworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0VBWCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLCBNLng4Ni5SX0FYKTsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc1OTgsMTQgKzgwNTksMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3Rvc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IGluYzsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTE9EU1x0QllURVxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAgICAvKiBkb3duICovCisgICAgICAgICBpbmMgPSAtMTsKKyAgICAgZWxzZQorICAgICAgICAgaW5jID0gMTsKK0BAIC03NjE4LDcgKzgwODAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKE0ueDg2LlJfU0kpOworICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KK0BAIC03NjMwLDcgKzgwOTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgaW5jOworICAgICB1MzIgY291bnQ7CitAQCAtNzYzOCwxMyArODEwMiwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb2RzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkxPRFNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc2NjEsNyArODEyNiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvZHNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIHdoaWxlIChjb3VudC0tKSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0VBWCA9IGZldGNoX2RhdGFfbG9uZyhNLng4Ni5SX1NJKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0FYID0gZmV0Y2hfZGF0YV93b3JkKE0ueDg2LlJfU0kpOworICAgICAgICAgfQorICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CitAQCAtNzY3NCw3ICs4MTQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9kc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczggdmFsMjsKKyAgICAgaW50IGluYzsKK0BAIC03NjgyLDcgKzgxNDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX2J5dGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTQ0FTXHRCWVRFXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgICAgIC8qIGRvd24gKi8KKyAgICAgICAgIGluYyA9IC0xOworICAgICBlbHNlCisgICAgICAgICBpbmMgPSAxOworQEAgLTc2OTgsNyArODE2NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQRTsKKy0gICAgfSBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKysgICAgfQorKyAgICBlbHNlIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfUkVQTkUpIHsKKyAgICAgICAgIC8qIFJFUE5FICAqLworICAgICAgICAgLyogbW92ZSB0aGVtIHVudGlsIENYIGlzIFpFUk8uICovCisgICAgICAgICB3aGlsZSAoTS54ODYuUl9DWCAhPSAwKSB7CitAQCAtNzcxMCw3ICs4MTc4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfc2Nhc19ieXRlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIHplcm8gZmxhZyBzZXQgbWVhbnMgZXF1YWwgKi8KKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUE5FOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgdmFsMiA9IGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CisgICAgICAgICBjbXBfYnl0ZShNLng4Ni5SX0FMLCB2YWwyKTsKKyAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworQEAgLTc3MjMsNyArODE5Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfYnl0ZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGFmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc2Nhc193b3JkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBpbmM7CisgICAgIHUzMiB2YWw7CitAQCAtNzczMSwxMyArODIwMSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdERXT1JEXG4iKTsKKy0gICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgICAvKiBkb3duICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpICAvKiBkb3duICovCisgICAgICAgICAgICAgaW5jID0gLTQ7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgaW5jID0gNDsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlNDQVNcdFdPUkRcbiIpOworLSAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfREYpKSAgIC8qIGRvd24gKi8KKysgICAgICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgIC8qIGRvd24gKi8KKyAgICAgICAgICAgICBpbmMgPSAtMjsKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBpbmMgPSAyOworQEAgLTc3NTAsOSArODIyMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc2MCwxNiArODIzMiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIE0ueDg2Lm1vZGUgJj0gflNZU01PREVfUFJFRklYX1JFUEU7CistICAgIH0gZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisrICAgIH0KKysgICAgZWxzZSBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX1JFUE5FKSB7CisgICAgICAgICAvKiBSRVBORSAgKi8KKyAgICAgICAgIC8qIG1vdmUgdGhlbSB1bnRpbCBDWCBpcyBaRVJPLiAqLworICAgICAgICAgd2hpbGUgKE0ueDg2LlJfQ1ggIT0gMCkgeworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgICAgICBjbXBfbG9uZyhNLng4Ni5SX0VBWCwgdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdmFsID0gZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJKTsKKy0gICAgICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgICAgICBjbXBfd29yZChNLng4Ni5SX0FYLCAodTE2KSB2YWwpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBNLng4Ni5SX0NYIC09IDE7CisgICAgICAgICAgICAgTS54ODYuUl9ESSArPSBpbmM7CitAQCAtNzc3NywxMyArODI1MSwxNSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zY2FzX3dvcmQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogemVybyBmbGFnIHNldCBtZWFucyBlcXVhbCAqLworICAgICAgICAgfQorICAgICAgICAgTS54ODYubW9kZSAmPSB+U1lTTU9ERV9QUkVGSVhfUkVQTkU7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB2YWwgPSBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfREkpOworICAgICAgICAgICAgIGNtcF9sb25nKE0ueDg2LlJfRUFYLCB2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHZhbCA9IGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSk7CistICAgICAgICAgICAgY21wX3dvcmQoTS54ODYuUl9BWCwgKHUxNil2YWwpOworKyAgICAgICAgICAgIGNtcF93b3JkKE0ueDg2LlJfQVgsICh1MTYpIHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorQEAgLTc3OTUsNyArODI3MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3NjYXNfd29yZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQUxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODEzLDcgKzgyOTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0NMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzgzMSw3ICs4MzA5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQ0xfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9ETF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc4NDksNyArODMyOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0RMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfQkxfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03ODY3LDcgKzgzNDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9CTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0FIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzg4NSw3ICs4MzY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQUhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3ZfYnl0ZV9DSF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW1tOworIAorQEAgLTc5MDMsNyArODM4NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGI2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X2J5dGVfREhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHU4IGltbTsKKyAKK0BAIC03OTIxLDcgKzg0MDQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX0JIX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBpbW07CisgCitAQCAtNzkzOSw3ICs4NDIzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YjgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC03OTQ3LDcgKzg0MzIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUFYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QVgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtNzk1NSw4ICs4NDQxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQVhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VBWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQVggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQVggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC03OTY2LDcgKzg0NTMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQ1hfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTc5NzQsNyArODQ2Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFQ1gsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRDWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC03OTgyLDggKzg0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRUNYID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9DWCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTc5OTMsNyArODQ4Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0NYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9EWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODAwMSw3ICs4NDkyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVEWCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdERYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwMDksOCArODUwMSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FRFggPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RYID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RYID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODAyMCw3ICs4NTEzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MDI4LDcgKzg1MjIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RUJYLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0QlgsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODAzNiw4ICs4NTMxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlhfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VCWCA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfQlggPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfQlggPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MDQ3LDcgKzg1NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU1BfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgwNTUsNyArODU1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFU1AsIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRTUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MDYzLDggKzg1NjEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIE0ueDg2LlJfRVNQID0gc3JjdmFsOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpc3JjdmFsOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9TUCA9ICh1MTYpIHNyY3ZhbDsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTgwNzQsNyArODU3Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9CUF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUzMiBzcmN2YWw7CisgCitAQCAtODA4Miw3ICs4NTgyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEVCUCwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2xvbmdfaW1tKCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJNT1ZcdEJQLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgfQorQEAgLTgwOTAsOCArODU5MSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FQlAgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0JQID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0JQID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtODEwMSw3ICs4NjAzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfQlBfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1NJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTMyIHNyY3ZhbDsKKyAKK0BAIC04MTA5LDcgKzg2MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0RVNJLCIpOworICAgICAgICAgc3JjdmFsID0gZmV0Y2hfbG9uZ19pbW0oKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk1PVlx0U0ksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICB9CitAQCAtODExNyw4ICs4NjIxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfU0lfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBNLng4Ni5SX0VTSSA9IHNyY3ZhbDsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KXNyY3ZhbDsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIE0ueDg2LlJfU0kgPSAodTE2KSBzcmN2YWw7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04MTI4LDcgKzg2MzMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhiZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfRElfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MzIgc3JjdmFsOworIAorQEAgLTgxMzYsNyArODY0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRFREksIik7CisgICAgICAgICBzcmN2YWwgPSBmZXRjaF9sb25nX2ltbSgpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URigiTU9WXHRESSwiKTsKKyAgICAgICAgIHNyY3ZhbCA9IGZldGNoX3dvcmRfaW1tKCk7CisgICAgIH0KK0BAIC04MTQ0LDMxICs4NjUxLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX0RJX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgTS54ODYuUl9FREkgPSBzcmN2YWw7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0RJID0gKHUxNilzcmN2YWw7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0RJID0gKHUxNikgc3JjdmFsOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMCwgZDAsIGFuZCBkMi4gKi8KKy1zdGF0aWMgdTgoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW10pKHU4IGQsIHU4IHMpID0KKy17CistICAgIHJvbF9ieXRlLAorLSAgICByb3JfYnl0ZSwKKy0gICAgcmNsX2J5dGUsCistICAgIHJjcl9ieXRlLAorLSAgICBzaGxfYnl0ZSwKKy0gICAgc2hyX2J5dGUsCistICAgIHNobF9ieXRlLCAgICAgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCistICAgIHNhcl9ieXRlLAorLX07Cisrc3RhdGljIHU4KCpvcGNEMF9ieXRlX29wZXJhdGlvbltdKSAodTggZCwgdTggcykgPSB7CisrICAgIHJvbF9ieXRlLCByb3JfYnl0ZSwgcmNsX2J5dGUsIHJjcl9ieXRlLCBzaGxfYnl0ZSwgc2hyX2J5dGUsIHNobF9ieXRlLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfYnl0ZSx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTgyNTEsNyArODc1Miw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgYW10ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGFtdCk7CitAQCAtODI2NSwzNiArODc2NiwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMF9ieXRlX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgfQorIAorIC8qIHVzZWQgYnkgb3Bjb2RlcyBjMSwgZDEsIGFuZCBkMy4gKi8KKy1zdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSh1MTYgcywgdTggZCkgPQorLXsKKy0gICAgcm9sX3dvcmQsCistICAgIHJvcl93b3JkLAorLSAgICByY2xfd29yZCwKKy0gICAgcmNyX3dvcmQsCistICAgIHNobF93b3JkLAorLSAgICBzaHJfd29yZCwKKy0gICAgc2hsX3dvcmQsICAgICAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKy0gICAgc2FyX3dvcmQsCistfTsKKytzdGF0aWMgdTE2KCpvcGNEMV93b3JkX29wZXJhdGlvbltdKSAodTE2IHMsIHU4IGQpID0geworKyAgICByb2xfd29yZCwgcm9yX3dvcmQsIHJjbF93b3JkLCByY3Jfd29yZCwgc2hsX3dvcmQsIHNocl93b3JkLCBzaGxfd29yZCwgICAgICAgLyogc2FsX2J5dGUgPT09IHNobF9ieXRlICBieSBkZWZpbml0aW9uICovCisrc2FyX3dvcmQsfTsKKyAKKyAvKiB1c2VkIGJ5IG9wY29kZXMgYzEsIGQxLCBhbmQgZDMuICovCistc3RhdGljIHUzMiAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pKHUzMiBzLCB1OCBkKSA9CisteworLSAgICByb2xfbG9uZywKKy0gICAgcm9yX2xvbmcsCistICAgIHJjbF9sb25nLAorLSAgICByY3JfbG9uZywKKy0gICAgc2hsX2xvbmcsCistICAgIHNocl9sb25nLAorLSAgICBzaGxfbG9uZywgICAgICAgICAgIC8qIHNhbF9ieXRlID09PSBzaGxfYnl0ZSAgYnkgZGVmaW5pdGlvbiAqLworLSAgICBzYXJfbG9uZywKKy19OworK3N0YXRpYyB1MzIoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW10pICh1MzIgcywgdTggZCkgPSB7CisrICAgIHJvbF9sb25nLCByb3JfbG9uZywgcmNsX2xvbmcsIHJjcl9sb25nLCBzaGxfbG9uZywgc2hyX2xvbmcsIHNobF9sb25nLCAgICAgICAvKiBzYWxfYnl0ZSA9PT0gc2hsX2J5dGUgIGJ5IGRlZmluaXRpb24gKi8KKytzYXJfbG9uZyx9OworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC04MzU3LDcgKzg4NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04MzgyLDcgKzg4NjksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDA3LDcgKzg4OTUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NDIwLDcgKzg5MDksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNDMV93b3JkX1JNX01FTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTg0MjksNyArODkxOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBhbXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKCpkZXN0cmVnLCBhbXQpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTg0NDgsNyArODkzOCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IGltbTsKKyAKK0BAIC04NDU2LDggKzg5NDcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRcdCIpOworICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIGltbSk7CistCVJFVFVSTl9UUkFDRSgiUkVUIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVUIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfU1AgKz0gaW1tOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtODQ2OCwxMiArODk1OSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X25lYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVUXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVQiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVQiLCBNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXApOworKyAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0lQID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC04NDgzLDcgKzg5NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXRfbmVhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sZXNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CitAQCAtODUyMCw3ICs5MDEzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfRVMgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtODUzMiw3ICs5MDI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xkc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1MTYgKmRzdHJlZzsKK0BAIC04NTY5LDcgKzkwNjMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9EUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC04NTgxLDcgKzkwNzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sZHNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X2J5dGVfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg2MjAsNyArOTExNSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgc3RvcmVfZGF0YV9ieXRlKGRlc3RvZmZzZXQsIGltbSk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgaW1tID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJTJ4XG4iLCBpbW0pOworQEAgLTg2MzYsNyArOTEzMSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl9ieXRlX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGM3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTg2NTksNyArOTE1NSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX21vdl93b3JkX1JNX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiwleFxuIiwgaW1tKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBpbW0pOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtODY4MCw3ICs5MTc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGltbSk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGltbTsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC04NzAxLDcgKzkxOTksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9tb3Zfd29yZF9STV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIsJXhcbiIsIGltbSk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgaW1tKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgaW1tOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTg3MTIsMTkgKzkyMTEsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgaW1tKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiAqZGVzdHJlZzsKKy0JCQl1MzIgaW1tOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKysgICAgICAgICAgICB1MzIgaW1tOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgaW1tID0gZmV0Y2hfbG9uZ19pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiLCV4XG4iLCBpbW0pOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBpbW07CistICAgICAgICB9IGVsc2UgeworLQkJCXUxNiAqZGVzdHJlZzsKKy0JCQl1MTYgaW1tOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworKyAgICAgICAgICAgIHUxNiBpbW07CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBpbW0gPSBmZXRjaF93b3JkX2ltbSgpOworQEAgLTg3NDIsMTAgKzkyNDIsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfbW92X3dvcmRfUk1fSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4YzgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIHUxNiBsb2NhbCxmcmFtZV9wb2ludGVyOworLSAgICB1OCAgbmVzdGluZzsKKysgICAgdTE2IGxvY2FsLCBmcmFtZV9wb2ludGVyOworKyAgICB1OCBuZXN0aW5nOworICAgICBpbnQgaTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC04NzYwLDExICs5MjYxLDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2VudGVyKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBuZXN0aW5nOyBpKyspIHsKKyAgICAgICAgICAgICBNLng4Ni5SX0JQIC09IDI7CisgICAgICAgICAgICAgcHVzaF93b3JkKGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9TUywgTS54ODYuUl9CUCkpOworLSAgICAgICAgICAgIH0KKy0gICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKyAgICAgICAgIH0KKysgICAgICAgIHB1c2hfd29yZChmcmFtZV9wb2ludGVyKTsKKysgICAgfQorICAgICBNLng4Ni5SX0JQID0gZnJhbWVfcG9pbnRlcjsKKy0gICAgTS54ODYuUl9TUCA9ICh1MTYpKE0ueDg2LlJfU1AgLSBsb2NhbCk7CisrICAgIE0ueDg2LlJfU1AgPSAodTE2KSAoTS54ODYuUl9TUCAtIGxvY2FsKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtODc3Myw3ICs5Mjc0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfZW50ZXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbGVhdmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiTEVBVkVcbiIpOworQEAgLTg3ODgsNyArOTI5MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xlYXZlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2EKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiBpbW07CisgCitAQCAtODc5Niw4ICs5Mjk5LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJSRVRGXHQiKTsKKyAgICAgaW1tID0gZmV0Y2hfd29yZF9pbW0oKTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbW0pOworLQlSRVRVUk5fVFJBQ0UoIlJFVEYiLE0ueDg2LnNhdmVkX2NzLE0ueDg2LnNhdmVkX2lwKTsKKy0JVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgUkVUVVJOX1RSQUNFKCJSRVRGIiwgTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwKTsKKysgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgTS54ODYuUl9JUCA9IHBvcF93b3JkKCk7CisgICAgIE0ueDg2LlJfQ1MgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX1NQICs9IGltbTsKK0BAIC04ODA5LDEyICs5MzEyLDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4Y2IKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3JldF9mYXIodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJSRVRGXG4iKTsKKy0JUkVUVVJOX1RSQUNFKCJSRVRGIixNLng4Ni5zYXZlZF9jcyxNLng4Ni5zYXZlZF9pcCk7CistCVRSQUNFX0FORF9TVEVQKCk7CisrICAgIFJFVFVSTl9UUkFDRSgiUkVURiIsIE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCk7CisrICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSBwb3Bfd29yZCgpOworICAgICBNLng4Ni5SX0NTID0gcG9wX3dvcmQoKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTg4MjUsMTUgKzkzMjksMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfcmV0X2Zhcih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnQzKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludDModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UIDNcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiWzNdKSB7CistCSgqX1g4NkVNVV9pbnRyVGFiWzNdKSgzKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiWzNdKSAoMyk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBwdXNoX3dvcmQoKHUxNikgTS54ODYuUl9GTEcpOworICAgICAgICAgQ0xFQVJfRkxBRyhGX0lGKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9DUyk7CitAQCAtODg0OSw3ICs5MzU1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50Myh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggaW50bnVtOworIAorQEAgLTg4NTksOSArOTM2NiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBpbnRudW0pOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIHsKKy0JKCpfWDg2RU1VX2ludHJUYWJbaW50bnVtXSkoaW50bnVtKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgICgqX1g4NkVNVV9pbnRyVGFiW2ludG51bV0pIChpbnRudW0pOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgICAgICBDTEVBUl9GTEFHKEZfVEYpOworICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg4NzcsMTYgKzkzODUsMTggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW50X0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbnRvKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5UT1xuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChBQ0NFU1NfRkxBRyhGX09GKSkgeworLQlpZiAoX1g4NkVNVV9pbnRyVGFiWzRdKSB7CistCSAgICAoKl9YODZFTVVfaW50clRhYls0XSkoNCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHB1c2hfd29yZCgodTE2KU0ueDg2LlJfRkxHKTsKKysgICAgICAgIGlmIChfWDg2RU1VX2ludHJUYWJbNF0pIHsKKysgICAgICAgICAgICAoKl9YODZFTVVfaW50clRhYls0XSkgKDQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcHVzaF93b3JkKCh1MTYpIE0ueDg2LlJfRkxHKTsKKyAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfSUYpOworICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgICAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfQ1MpOworQEAgLTg5MDMsNyArOTQxMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2ludG8odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhjZgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaXJldCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pcmV0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIklSRVRcbiIpOworQEAgLTg5MjEsNyArOTQzMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2lyZXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhkMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDBfYnl0ZV9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTg5OTksNyArOTUxMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMF9ieXRlX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZShkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsMVxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTkwMTUsNyArOTUyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworQEAgLTkwNzUsNyArOTU4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCAxKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTA5OCw3ICs5NjEyLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIDEpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MTIxLDcgKzk2MzYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgMSk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkJZVEUgUFRSICIpOworQEAgLTkxMzMsMTkgKzk2NDksMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDFfd29yZF9STV8xKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgZGVzdHZhbDsKKy0JCQl1MzIgKmRlc3RyZWc7CisrICAgICAgICAgICAgdTMyIGRlc3R2YWw7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIDEpOworICAgICAgICAgICAgICpkZXN0cmVnID0gZGVzdHZhbDsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJdTE2IGRlc3R2YWw7CistCQkJdTE2ICpkZXN0cmVnOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLDFcbiIpOworQEAgLTkxNjMsNyArOTY4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QxX3dvcmRfUk1fMSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QyX2J5dGVfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1OCAqZGVzdHJlZzsKK0BAIC05MjQzLDcgKzk3NjEsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEMl9ieXRlX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QwX2J5dGVfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CitAQCAtOTI1OSw3ICs5Nzc3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGQzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtOTMyMSw3ICs5ODQwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gKCpvcGNEMV9sb25nX29wZXJhdGlvbltyaF0pIChkZXN0dmFsLCBhbXQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJXT1JEIFBUUiAiKTsKK0BAIC05MzQ0LDcgKzk4NjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSAoKm9wY0QxX2xvbmdfb3BlcmF0aW9uW3JoXSkgKGRlc3R2YWwsIGFtdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIldPUkQgUFRSICIpOworQEAgLTkzNjcsNyArOTg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoZGVzdHZhbCwgYW10KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiV09SRCBQVFIgIik7CitAQCAtOTM3OSw3ICs5OTAxLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRDNfd29yZF9STV9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworIAorQEAgLTkzODcsNyArOTkwOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0QzX3dvcmRfUk1fQ0wodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9ICgqb3BjRDFfbG9uZ19vcGVyYXRpb25bcmhdKSAoKmRlc3RyZWcsIGFtdCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtOTQwNSwxNiArOTkyOCwxNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhbSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYW0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQUFNXG4iKTsKKy0gICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgLyogdGhpcyBpcyBhIHN0dXBpZCBlbmNvZGluZy4gKi8KKysgICAgYSA9IGZldGNoX2J5dGVfaW1tKCk7ICAgICAgIC8qIHRoaXMgaXMgYSBzdHVwaWQgZW5jb2RpbmcuICovCisgICAgIGlmIChhICE9IDEwKSB7CistCS8qIGZpeDogYWRkIGJhc2UgZGVjb2RpbmcKKy0JICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFtX3dvcmQodTggdmFsLCBpbnQgYmFzZSBhKSAqLworICAgICAgICAgREVDT0RFX1BSSU5URigiRVJST1IgREVDT0RJTkcgQUFNXG4iKTsKKyAgICAgICAgIFRSQUNFX1JFR1MoKTsKKyAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtOTQzMCw3ICs5OTU0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFtKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2FhZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggYTsKKyAKK0BAIC05NDM4LDggKzk5NjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9hYWQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGKCJBQURcbiIpOworICAgICBhID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgaWYgKGEgIT0gMTApIHsKKy0JLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworLQkgICBhYWRfd29yZCh1MTYgdmFsLCBpbnQgYmFzZSBhKSAqLworKyAgICAgICAgLyogZml4OiBhZGQgYmFzZSBkZWNvZGluZworKyAgICAgICAgICAgYWFkX3dvcmQodTE2IHZhbCwgaW50IGJhc2UgYSkgKi8KKyAgICAgICAgIERFQ09ERV9QUklOVEYoIkVSUk9SIERFQ09ESU5HIEFBTVxuIik7CisgICAgICAgICBUUkFDRV9SRUdTKCk7CisgICAgICAgICBIQUxUX1NZUygpOworQEAgLTk0NTYsMTQgKzk5ODEsMTUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfYWFkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZDcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3hsYXQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfeGxhdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1MTYgYWRkcjsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiWExBVFxuIik7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistCWFkZHIgPSAodTE2KShNLng4Ni5SX0JYICsgKHU4KU0ueDg2LlJfQUwpOworKyAgICBhZGRyID0gKHUxNikgKE0ueDg2LlJfQlggKyAodTgpIE0ueDg2LlJfQUwpOworICAgICBNLng4Ni5SX0FMID0gZmV0Y2hfZGF0YV9ieXRlKGFkZHIpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0NzUsNyArMTAwMDEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF94bGF0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3BuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk0ODYsNyArMTAwMTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgaXApOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBNLng4Ni5SX0NYIC09IDE7CistICAgIGlmIChNLng4Ni5SX0NYICE9IDAgJiYgIUFDQ0VTU19GTEFHKEZfWkYpKSAgICAgIC8qIENYICE9IDAgYW5kICFaRiAqLworKyAgICBpZiAoTS54ODYuUl9DWCAhPSAwICYmICFBQ0NFU1NfRkxBRyhGX1pGKSkgIC8qIENYICE9IDAgYW5kICFaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk0OTYsNyArMTAwMjMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9vcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MDcsNyArMTAwMzUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfQ1ggLT0gMTsKKy0gICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAgICAgLyogQ1ggIT0gMCBhbmQgWkYgKi8KKysgICAgaWYgKE0ueDg2LlJfQ1ggIT0gMCAmJiBBQ0NFU1NfRkxBRyhGX1pGKSkgICAvKiBDWCAhPSAwIGFuZCBaRiAqLworICAgICAgICAgTS54ODYuUl9JUCA9IGlwOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk1MTcsNyArMTAwNDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGUyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9sb29wKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgczE2IGlwOworIAorQEAgLTk1MzgsMTYgKzEwMDY3LDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvb3AodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfamN4eih1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qY3h6KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIHUxNiB0YXJnZXQ7CistICAgIHM4ICBvZmZzZXQ7CisrICAgIHM4IG9mZnNldDsKKyAKKyAgICAgLyoganVtcCB0byBieXRlIG9mZnNldCBpZiBvdmVyZmxvdyBmbGFnIGlzIHNldCAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKQ1haXHQiKTsKKy0gICAgb2Zmc2V0ID0gKHM4KWZldGNoX2J5dGVfaW1tKCk7CistICAgIHRhcmdldCA9ICh1MTYpKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworKyAgICBvZmZzZXQgPSAoczgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHRhcmdldCA9ICh1MTYpIChNLng4Ni5SX0lQICsgb2Zmc2V0KTsKKyAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCB0YXJnZXQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYuUl9DWCA9PSAwKQorQEAgLTk1NjAsMTYgKzEwMDkwLDE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2pjeHoodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfaW5fYnl0ZV9BTF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTggcG9ydDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBNLng4Ni5SX0FMID0gKCpzeXNfaW5iKShwb3J0KTsKKysgICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikgKHBvcnQpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NTc4LDIzICsxMDEwOSwyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9pbl93b3JkX0FYX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJJTlx0Iik7CistCXBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisrICAgIHBvcnQgPSAodTgpIGZldGNoX2J5dGVfaW1tKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIkVBWCwleFxuIiwgcG9ydCk7CistICAgIH0gZWxzZSB7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBERUNPREVfUFJJTlRGMigiQVgsJXhcbiIsIHBvcnQpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgTS54ODYuUl9FQVggPSAoKnN5c19pbmwpKHBvcnQpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykocG9ydCk7CisrICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkgKHBvcnQpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgTS54ODYuUl9BWCA9ICgqc3lzX2ludykgKHBvcnQpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTYwNCwxNiArMTAxMzgsMTcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fd29yZF9BWF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0lNTV9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJXgsQUxcbiIsIHBvcnQpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShwb3J0LCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKHBvcnQsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05NjIyLDIzICsxMDE1NywyNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9JTU1fQUwodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlNworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3V0X3dvcmRfSU1NX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICB1OCBwb3J0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJPVVRcdCIpOworLQlwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworKyAgICBwb3J0ID0gKHU4KSBmZXRjaF9ieXRlX2ltbSgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYyKCIleCxFQVhcbiIsIHBvcnQpOworLSAgICB9IGVsc2UgeworKyAgICB9CisrICAgIGVsc2UgeworICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4LEFYXG4iLCBwb3J0KTsKKyAgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICgqc3lzX291dGwpKHBvcnQsIE0ueDg2LlJfRUFYKTsKKy0gICAgfSBlbHNlIHsKKy0gICAgICAgICgqc3lzX291dHcpKHBvcnQsIE0ueDg2LlJfQVgpOworKyAgICAgICAgKCpzeXNfb3V0bCkgKHBvcnQsIE0ueDg2LlJfRUFYKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgICgqc3lzX291dHcpIChwb3J0LCBNLng4Ni5SX0FYKTsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk2NDgsMTkgKzEwMTg2LDM1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGU4CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jYWxsX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKy0gICAgczE2IGlwOworKyAgICBzMTYgaXAxNjsKKysgICAgczMyIGlwMzI7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CistCURFQ09ERV9QUklOVEYoIkNBTExcdCIpOworLQlpcCA9IChzMTYpIGZldGNoX3dvcmRfaW1tKCk7CistCWlwICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgIC8qIENIRUNLIFNJR04gKi8KKy0JREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpaXApOworLQlDQUxMX1RSQUNFKE0ueDg2LnNhdmVkX2NzLCBNLng4Ni5zYXZlZF9pcCwgTS54ODYuUl9DUywgaXAsICIiKTsKKysgICAgREVDT0RFX1BSSU5URigiQ0FMTFx0Iik7CisrICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgaXAzMiA9IChzMzIpIGZldGNoX2xvbmdfaW1tKCk7CisrICAgICAgICBpcDMyICs9IChzMTYpIE0ueDg2LlJfSVA7ICAgICAgIC8qIENIRUNLIFNJR04gKi8KKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcDMyKTsKKysgICAgICAgIENBTExfVFJBQ0UoTS54ODYuc2F2ZWRfY3MsIE0ueDg2LnNhdmVkX2lwLCBNLng4Ni5SX0NTLCBpcDMyLCAiIik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcDE2ID0gKHMxNikgZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgICAgIGlwMTYgKz0gKHMxNikgTS54ODYuUl9JUDsgICAgICAgLyogQ0hFQ0sgU0lHTiAqLworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsICh1MTYpIGlwMTYpOworKyAgICAgICAgQ0FMTF9UUkFDRShNLng4Ni5zYXZlZF9jcywgTS54ODYuc2F2ZWRfaXAsIE0ueDg2LlJfQ1MsIGlwMTYsICIiKTsKKysgICAgfQorICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBwdXNoX2xvbmcoTS54ODYuUl9FSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDMyICYgMHhmZmZmOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcHVzaF93b3JkKE0ueDg2LlJfSVApOworKyAgICAgICAgTS54ODYuUl9FSVAgPSBpcDE2OworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2NjksMTcgKzEwMjIzLDI3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NhbGxfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9uZWFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9qdW1wX25lYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CistICAgIGludCBpcDsKKysgICAgdTMyIGlwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBpcCA9IChzMTYpZmV0Y2hfd29yZF9pbW0oKTsKKy0gICAgaXAgKz0gKHMxNilNLng4Ni5SX0lQOworLSAgICBERUNPREVfUFJJTlRGMigiJTA0eFxuIiwgKHUxNilpcCk7CistICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSAodTE2KWlwOworKyAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgIGlwID0gKHUzMikgZmV0Y2hfbG9uZ19pbW0oKTsKKysgICAgICAgIGlwICs9ICh1MzIpIE0ueDg2LlJfRUlQOworKyAgICAgICAgREVDT0RFX1BSSU5URjIoIiUwOHhcbiIsICh1MzIpIGlwKTsKKysgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICBNLng4Ni5SX0VJUCA9ICh1MzIpIGlwOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgaXAgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworKyAgICAgICAgaXAgKz0gKHMxNikgTS54ODYuUl9JUDsKKysgICAgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCAodTE2KSBpcCk7CisrICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIGlwOworKyAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTk2ODgsMTggKzEwMjUyLDI1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhlYQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9mYXJfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworLSAgICB1MTYgY3MsIGlwOworKyAgICB1MTYgY3M7CisrICAgIHUzMiBpcDsKKyAKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSk1QXHRGQVIgIik7CistICAgIGlwID0gZmV0Y2hfd29yZF9pbW0oKTsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICBpcCA9IGZldGNoX2xvbmdfaW1tKCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBpcCA9IGZldGNoX3dvcmRfaW1tKCk7CisrICAgIH0KKyAgICAgY3MgPSBmZXRjaF93b3JkX2ltbSgpOworICAgICBERUNPREVfUFJJTlRGMigiJTA0eDoiLCBjcyk7CisgICAgIERFQ09ERV9QUklOVEYyKCIlMDR4XG4iLCBpcCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgIE0ueDg2LlJfSVAgPSBpcDsKKysgICAgTS54ODYuUl9FSVAgPSBpcCAmIDB4ZmZmZjsKKyAgICAgTS54ODYuUl9DUyA9IGNzOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTk3MDksMTUgKzEwMjgwLDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2p1bXBfZmFyX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGViCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9qdW1wX2J5dGVfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2p1bXBfYnl0ZV9JTU0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgdTE2IHRhcmdldDsKKyAgICAgczggb2Zmc2V0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJKTVBcdCIpOworLSAgICBvZmZzZXQgPSAoczgpZmV0Y2hfYnl0ZV9pbW0oKTsKKy0gICAgdGFyZ2V0ID0gKHUxNikoTS54ODYuUl9JUCArIG9mZnNldCk7CisrICAgIG9mZnNldCA9IChzOCkgZmV0Y2hfYnl0ZV9pbW0oKTsKKysgICAgdGFyZ2V0ID0gKHUxNikgKE0ueDg2LlJfSVAgKyBvZmZzZXQpOworICAgICBERUNPREVfUFJJTlRGMigiJXhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIE0ueDg2LlJfSVAgPSB0YXJnZXQ7CitAQCAtOTcyOSwxMiArMTAzMDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfanVtcF9ieXRlX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl9ieXRlX0FMX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX2J5dGVfQUxfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiSU5cdEFMLERYXG4iKTsKKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgTS54ODYuUl9BTCA9ICgqc3lzX2luYikoTS54ODYuUl9EWCk7CisrICAgIE0ueDg2LlJfQUwgPSAoKnN5c19pbmIpIChNLng4Ni5SX0RYKTsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtOTc0MywxOSArMTAzMTYsMjIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfaW5fYnl0ZV9BTF9EWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2luX3dvcmRfQVhfRFgodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICBERUNPREVfUFJJTlRGKCJJTlx0RUFYLERYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIklOXHRBWCxEWFxuIik7CisgICAgIH0KKyAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICBNLng4Ni5SX0VBWCA9ICgqc3lzX2lubCkoTS54ODYuUl9EWCk7CistICAgIH0gZWxzZSB7CistICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KShNLng4Ni5SX0RYKTsKKysgICAgICAgIE0ueDg2LlJfRUFYID0gKCpzeXNfaW5sKSAoTS54ODYuUl9EWCk7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBNLng4Ni5SX0FYID0gKCpzeXNfaW53KSAoTS54ODYuUl9EWCk7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC05NzY1LDEyICsxMDM0MSwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9pbl93b3JkX0FYX0RYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX291dF9ieXRlX0RYX0FMKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQUxcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAoKnN5c19vdXRiKShNLng4Ni5SX0RYLCBNLng4Ni5SX0FMKTsKKysgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQUwpOworICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworIH0KK0BAIC05Nzc5LDE5ICsxMDM1NiwyMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfYnl0ZV9EWF9BTCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGVmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9vdXRfd29yZF9EWF9BWCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsRUFYXG4iKTsKKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIk9VVFx0RFgsQVhcbiIpOworICAgICB9CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworLSAgICB9IGVsc2UgeworLSAgICAgICAgKCpzeXNfb3V0dykoTS54ODYuUl9EWCwgTS54ODYuUl9BWCk7CisrICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwgTS54ODYuUl9FQVgpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsIE0ueDg2LlJfQVgpOworICAgICB9CisgICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CitAQCAtOTgwMSw3ICsxMDM4MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX291dF93b3JkX0RYX0FYKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfbG9jayh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJMT0NLOlxuIik7CitAQCAtOTgxNiw3ICsxMDM5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2xvY2sodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfcmVwbmUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQTkVcbiIpOworQEAgLTk4MzAsNyArMTA0MTIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBuZSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGYzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9yZXBlKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUkVQRVxuIik7CitAQCAtOTg0NCw3ICsxMDQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3JlcGUodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfaGFsdCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIkhBTFRcbiIpOworQEAgLTk4NTgsNyArMTA0NDIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9oYWx0KHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX2NtYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9jbWModTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY29tcGxlbWVudCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC05ODczLDcgKzEwNDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY21jKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHU4ICpkZXN0cmVnOworQEAgLTk4ODUsOSArMTA0NzEsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKyAgICAgc3dpdGNoIChtb2QpIHsKKy0gICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMCAqLworKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTk5NTMsOSArMTA1MzksOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGVuZCBtb2Q9PTAwICovCistICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKysgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAxICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0QllURSBQVFIgIik7CisgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKK0BAIC0xMDAyMSw5ICsxMDYwNyw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y2X2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDEgKi8KKy0gICAgY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworKyAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MTAgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IGJ5dGUgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRCWVRFIFBUUiAiKTsKKyAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMDg5LDkgKzEwNjc1LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3QgYnl0ZSBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCBieXRlIGltbSAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdCIpOworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwMTIzLDcgKzEwNzA5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjZfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgbXVsX2J5dGUoKmRlc3RyZWcpOyAgICAgIC8qISEhICAqLworKyAgICAgICAgICAgIG11bF9ieXRlKCpkZXN0cmVnKTsgLyohISEgICovCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTAxNTcsNyArMTA3NDMsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZjcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC0xMDE2NywxMSArMTA3NTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CistICAgIGNhc2UgMDogICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDAgKi8KKysgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgLyogbW9kPTAwICovCisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0RFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMTAxODEsOCArMTA3NjgsOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgdGVzdF9sb25nKGRlc3R2YWwsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWwsIHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiVEVTVFx0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKK0BAIC0xMDIwOSw3ICsxMDc5Nyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbm90X2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5PVFx0V09SRCBQVFIgIik7CitAQCAtMTAyMzIsNyArMTA4MjEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5lZ19sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJORUdcdFdPUkQgUFRSICIpOworQEAgLTEwMjU0LDcgKzEwODQ0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIG11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI3NSw3ICsxMDg2Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJTVVMXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDI5Niw3ICsxMDg4OCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMTcsNyArMTA5MTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSURJVlx0V09SRCBQVFIgIik7CitAQCAtMTAzMzAsMTEgKzEwOTI0LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZW5kIG1vZD09MDAgKi8KKy0gICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgIC8qIG1vZD0wMSAqLworKyAgICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAvKiBtb2Q9MDEgKi8KKyAgICAgICAgIHN3aXRjaCAocmgpIHsKKy0gICAgICAgIGNhc2UgMDogICAgICAgICAvKiB0ZXN0IHdvcmQgaW1tICovCisrICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICAgICAgdTMyIGRlc3R2YWwsc3JjdmFsOworKyAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHREV09SRCBQVFIgIik7CisgICAgICAgICAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0xMDM0NCw4ICsxMDkzOCw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoZGVzdHZhbCwgc3JjdmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbCwgc3JjdmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJURVNUXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTEwMzcyLDcgKzEwOTY3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBub3RfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTk9UXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDM5NSw3ICsxMDk5MSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gbmVnX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0V09SRCBQVFIgIik7CitAQCAtMTA0MTcsNyArMTEwMTQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgbXVsX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDM4LDcgKzExMDM2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklNVUxcdFdPUkQgUFRSICIpOworQEAgLTEwNDU5LDcgKzExMDU4LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRpdl9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ4MCw3ICsxMTA4MCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBpZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDQ5MywxMSArMTEwOTQsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0wMSAqLworLSAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTEwICovCisrICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMCAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbCxzcmN2YWw7CisrICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdERXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICAgICAgZGVzdG9mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTEwNTA3LDggKzExMTA4LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIHRlc3RfbG9uZyhkZXN0dmFsLCBzcmN2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLHNyY3ZhbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsLCBzcmN2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlRFU1RcdFdPUkQgUFRSICIpOworICAgICAgICAgICAgICAgICBkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtMTA1MzUsNyArMTExMzcsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IG5vdF9sb25nKGRlc3R2YWwpOworICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdFdPUkQgUFRSICIpOworQEAgLTEwNTU4LDcgKzExMTYxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBuZWdfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiTkVHXHRXT1JEIFBUUiAiKTsKK0BAIC0xMDU4MCw3ICsxMTE4NCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBtdWxfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MDEsNyArMTEyMDYsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaW11bF9sb25nKGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0V09SRCBQVFIgIik7CitAQCAtMTA2MjIsNyArMTEyMjgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjQzLDcgKzExMjUwLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGlkaXZfbG9uZyhkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklESVZcdFdPUkQgUFRSICIpOworQEAgLTEwNjU2LDkgKzExMjY0LDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBlbmQgbW9kPT0xMCAqLworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogbW9kPTExICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIG1vZD0xMSAqLworICAgICAgICAgc3dpdGNoIChyaCkgeworLSAgICAgICAgY2FzZSAwOiAgICAgICAgIC8qIHRlc3Qgd29yZCBpbW0gKi8KKysgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgLyogdGVzdCB3b3JkIGltbSAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgICAgIHUzMiBzcmN2YWw7CitAQCAtMTA2NzAsNyArMTEyNzgsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiV4XG4iLCBzcmN2YWwpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICB0ZXN0X2xvbmcoKmRlc3RyZWcsIHNyY3ZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xMDY5Niw3ICsxMTMwNSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICAqZGVzdHJlZyA9IG5vdF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJOT1RcdCIpOworQEAgLTEwNzE1LDcgKzExMzI1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gbmVnX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk5FR1x0Iik7CitAQCAtMTA3MzMsMTUgKzExMzQ0LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICAgICBtdWxfbG9uZygqZGVzdHJlZyk7ICAgICAgLyohISEgICovCistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAgICAgbXVsX2xvbmcoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk1VTFx0Iik7CisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgICAgIG11bF93b3JkKCpkZXN0cmVnKTsgICAgICAvKiEhISAgKi8KKysgICAgICAgICAgICAgICAgbXVsX3dvcmQoKmRlc3RyZWcpOyAgICAgLyohISEgICovCisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSA1OgorQEAgLTEwNzUzLDcgKzExMzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRjdfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGltdWxfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU1VTFx0Iik7CitAQCAtMTA3NzIsNyArMTEzODUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgZGl2X2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIkRJVlx0Iik7CitAQCAtMTA3OTEsNyArMTE0MDUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGN193b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgaWRpdl9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJJRElWXHQiKTsKK0BAIC0xMDgxMiw3ICsxMTQyNyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmOAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDgyNyw3ICsxMTQ0Myw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX2NsYyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGY5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGModTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3Bfc3RjKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIHNldCB0aGUgY2FycnkgZmxhZy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDg0Miw3ICsxMTQ1OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0Yyh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3BfY2xpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyB7CisgICAgIC8qIGNsZWFyIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NTcsNyArMTE0NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9jbGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3Bfc3RpKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX3N0aSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBlbmFibGUgIGludGVycnVwdHMuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CitAQCAtMTA4NzIsNyArMTE0OTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9zdGkodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHhmYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX2NsZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgeworICAgICAvKiBjbGVhciBpbnRlcnJ1cHRzLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTEwODg3LDcgKzExNTA3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3BfY2xkKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4ZmQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcF9zdGQodTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgLyogY2xlYXIgaW50ZXJydXB0cy4gKi8KKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKK0BAIC0xMDkwMiw3ICsxMTUyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX3N0ZCh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZFX2J5dGVfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1OCBkZXN0dmFsOworQEAgLTEwOTQ0LDEzICsxMTU2NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRV9ieXRlX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfYnl0ZShkZXN0dmFsKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDE6ICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAvKiBkZWMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfYnl0ZShkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBkZWNfYnl0ZShkZXN0dmFsKTsKK0BAIC0xMTAxOSwxMiArMTE2NDEsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkVfYnl0ZV9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweGZmCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorIHsKKyAgICAgaW50IG1vZCwgcmgsIHJsOworICAgICB1aW50IGRlc3RvZmZzZXQgPSAwOworLQl1MTYgKmRlc3RyZWc7CistCXUxNiBkZXN0dmFsLGRlc3R2YWwyOworKyAgICB1MTYgKmRlc3RyZWc7CisrICAgIHUxNiBkZXN0dmFsLCBkZXN0dmFsMjsKKyAKKyAgICAgLyogWWV0IGFub3RoZXIgc3BlY2lhbCBjYXNlIGluc3RydWN0aW9uLiAqLworICAgICBTVEFSVF9PRl9JTlNUUigpOworQEAgLTExMDQwLDE0ICsxMTY2MywxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiSU5DXHREV09SRCBQVFIgIik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIklOQ1x0V09SRCBQVFIgIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJERUNcdERXT1JEIFBUUiAiKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiREVDXHRXT1JEIFBUUiAiKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CitAQCAtMTEwNzgsNyArMTE3MDMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgIGRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBzd2l0Y2ggKHJoKSB7CistICAgICAgICBjYXNlIDA6ICAgICAgICAgLyogaW5jIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAvKiBpbmMgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorQEAgLTExMDg2LDcgKzExNzExLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTA5NSw3ICsxMTcyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGRlYyB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgLyogZGVjIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgICAgICB1MzIgZGVzdHZhbDsKKyAKK0BAIC0xMTEwMyw3ICsxMTcyOSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExMTIsMTMgKzExNzM5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMTI3LDI2ICsxMTc1NCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMTY4LDcgKzExNzk2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTE4NSw3ICsxMTgxNCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTExOTQsMTMgKzExODI0LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjA5LDI2ICsxMTgzOSwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMjUwLDcgKzExODgxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBpbmNfbG9uZyhkZXN0dmFsKTsKKyAgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKK0BAIC0xMTI2Nyw3ICsxMTg5OSw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZGVjX2xvbmcoZGVzdHZhbCk7CisgICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgCisgICAgICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CitAQCAtMTEyNzYsMTMgKzExOTA5LDEzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wX29wY0ZGX3dvcmRfUk0odTggWDg2RU1VX1VOVVNFRChvcDEpKQorICAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSAyOiAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgIC8qIGNhbGwgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gZGVzdHZhbDsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMzogICAgICAgICAvKiBjYWxsIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGNhbGwgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworQEAgLTExMjkxLDI2ICsxMTkyNCwyNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICBwdXNoX3dvcmQoTS54ODYuUl9JUCk7CisgICAgICAgICAgICAgTS54ODYuUl9JUCA9IGRlc3R2YWw7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDQ6ICAgICAgICAgLyogam1wIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgIGRlc3R2YWwyID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQgKyAyKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSBkZXN0dmFsOworICAgICAgICAgICAgIE0ueDg2LlJfQ1MgPSBkZXN0dmFsMjsKKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgNjogICAgICAgICAvKiAgcHVzaCB3b3JkIHB0ciAuLi4gKi8KKysgICAgICAgIGNhc2UgNjogICAgICAgICAgICAgICAgLyogIHB1c2ggd29yZCBwdHIgLi4uICovCisgICAgICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgICAgIHUzMiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworICAgICAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICAgICBwdXNoX2xvbmcoZGVzdHZhbCk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworIAorICAgICAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworQEAgLTExMzMwLDcgKzExOTY0LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gaW5jX2xvbmcoKmRlc3RyZWcpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgCisgICAgICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTEzNDcsNyArMTE5ODIsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgKmRlc3RyZWcgPSBkZWNfbG9uZygqZGVzdHJlZyk7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAKKyAgICAgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKK0BAIC0xMTM1NiwyNiArMTE5OTIsMjYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgICAgICAgICAgICAgICAgICpkZXN0cmVnID0gZGVjX3dvcmQoKmRlc3RyZWcpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgIGNhc2UgMjogICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSAyOiAgICAgICAgICAgICAgICAvKiBjYWxsIHdvcmQgcHRyIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgICAgICAgICBNLng4Ni5SX0lQID0gKmRlc3RyZWc7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogam1wIGZhciBwdHIgLi4uICovCisrICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIk9QRVJBVElPTiBVTkRFRklORUQgMFhGRiBcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgIGNhc2UgNDogICAgICAgICAvKiBqbXAgIC4uLiAqLworKyAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAvKiBqbXAgIC4uLiAqLworICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIE0ueDg2LlJfSVAgPSAodTE2KSAoKmRlc3RyZWcpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgY2FzZSA1OiAgICAgICAgIC8qIGptcCBmYXIgcHRyIC4uLiAqLworKyAgICAgICAgY2FzZSA1OiAgICAgICAgICAgICAgICAvKiBqbXAgZmFyIHB0ciAuLi4gKi8KKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJPUEVSQVRJT04gVU5ERUZJTkVEIDBYRkYgXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIEhBTFRfU1lTKCk7CitAQCAtMTEzODgsNyArMTIwMjQsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcF9vcGNGRl93b3JkX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AxKSkKKyAgICAgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAgICAgcHVzaF9sb25nKCpkZXN0cmVnKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworIAorICAgICAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworQEAgLTExNDA3LDggKzEyMDQ0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3Bfb3BjRkZfd29yZF9STSh1OCBYODZFTVVfVU5VU0VEKG9wMSkpCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAqIFNpbmdsZSBieXRlIG9wZXJhdGlvbiBjb2RlIHRhYmxlOgorICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisteworK3ZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkgKHU4KSA9IHsKKyAvKiAgMHgwMCAqLyB4ODZlbXVPcF9hZGRfYnl0ZV9STV9SLAorIC8qICAweDAxICovIHg4NmVtdU9wX2FkZF93b3JkX1JNX1IsCisgLyogIDB4MDIgKi8geDg2ZW11T3BfYWRkX2J5dGVfUl9STSwKK0BAIC0xMTQxNyw3ICsxMjA1Myw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgwNSAqLyB4ODZlbXVPcF9hZGRfd29yZF9BWF9JTU0sCisgLyogIDB4MDYgKi8geDg2ZW11T3BfcHVzaF9FUywKKyAvKiAgMHgwNyAqLyB4ODZlbXVPcF9wb3BfRVMsCistCisgLyogIDB4MDggKi8geDg2ZW11T3Bfb3JfYnl0ZV9STV9SLAorIC8qICAweDA5ICovIHg4NmVtdU9wX29yX3dvcmRfUk1fUiwKKyAvKiAgMHgwYSAqLyB4ODZlbXVPcF9vcl9ieXRlX1JfUk0sCitAQCAtMTE0MjYsNyArMTIwNjEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MGQgKi8geDg2ZW11T3Bfb3Jfd29yZF9BWF9JTU0sCisgLyogIDB4MGUgKi8geDg2ZW11T3BfcHVzaF9DUywKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcF90d29fYnl0ZSwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcF9hZGNfYnl0ZV9STV9SLAorIC8qICAweDExICovIHg4NmVtdU9wX2FkY193b3JkX1JNX1IsCisgLyogIDB4MTIgKi8geDg2ZW11T3BfYWRjX2J5dGVfUl9STSwKK0BAIC0xMTQzNSw3ICsxMjA2OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHgxNSAqLyB4ODZlbXVPcF9hZGNfd29yZF9BWF9JTU0sCisgLyogIDB4MTYgKi8geDg2ZW11T3BfcHVzaF9TUywKKyAvKiAgMHgxNyAqLyB4ODZlbXVPcF9wb3BfU1MsCistCisgLyogIDB4MTggKi8geDg2ZW11T3Bfc2JiX2J5dGVfUk1fUiwKKyAvKiAgMHgxOSAqLyB4ODZlbXVPcF9zYmJfd29yZF9STV9SLAorIC8qICAweDFhICovIHg4NmVtdU9wX3NiYl9ieXRlX1JfUk0sCitAQCAtMTE0NDQsNyArMTIwNzcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3Bfc2JiX3dvcmRfQVhfSU1NLAorIC8qICAweDFlICovIHg4NmVtdU9wX3B1c2hfRFMsCisgLyogIDB4MWYgKi8geDg2ZW11T3BfcG9wX0RTLAorLQorIC8qICAweDIwICovIHg4NmVtdU9wX2FuZF9ieXRlX1JNX1IsCisgLyogIDB4MjEgKi8geDg2ZW11T3BfYW5kX3dvcmRfUk1fUiwKKyAvKiAgMHgyMiAqLyB4ODZlbXVPcF9hbmRfYnl0ZV9SX1JNLAorQEAgLTExNDUzLDcgKzEyMDg1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDI1ICovIHg4NmVtdU9wX2FuZF93b3JkX0FYX0lNTSwKKyAvKiAgMHgyNiAqLyB4ODZlbXVPcF9zZWdvdnJfRVMsCisgLyogIDB4MjcgKi8geDg2ZW11T3BfZGFhLAorLQorIC8qICAweDI4ICovIHg4NmVtdU9wX3N1Yl9ieXRlX1JNX1IsCisgLyogIDB4MjkgKi8geDg2ZW11T3Bfc3ViX3dvcmRfUk1fUiwKKyAvKiAgMHgyYSAqLyB4ODZlbXVPcF9zdWJfYnl0ZV9SX1JNLAorQEAgLTExNDYyLDcgKzEyMDkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDJkICovIHg4NmVtdU9wX3N1Yl93b3JkX0FYX0lNTSwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcF9zZWdvdnJfQ1MsCisgLyogIDB4MmYgKi8geDg2ZW11T3BfZGFzLAorLQorIC8qICAweDMwICovIHg4NmVtdU9wX3hvcl9ieXRlX1JNX1IsCisgLyogIDB4MzEgKi8geDg2ZW11T3BfeG9yX3dvcmRfUk1fUiwKKyAvKiAgMHgzMiAqLyB4ODZlbXVPcF94b3JfYnl0ZV9SX1JNLAorQEAgLTExNDcxLDcgKzEyMTAxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDM1ICovIHg4NmVtdU9wX3hvcl93b3JkX0FYX0lNTSwKKyAvKiAgMHgzNiAqLyB4ODZlbXVPcF9zZWdvdnJfU1MsCisgLyogIDB4MzcgKi8geDg2ZW11T3BfYWFhLAorLQorIC8qICAweDM4ICovIHg4NmVtdU9wX2NtcF9ieXRlX1JNX1IsCisgLyogIDB4MzkgKi8geDg2ZW11T3BfY21wX3dvcmRfUk1fUiwKKyAvKiAgMHgzYSAqLyB4ODZlbXVPcF9jbXBfYnl0ZV9SX1JNLAorQEAgLTExNDgwLDcgKzEyMTA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDNkICovIHg4NmVtdU9wX2NtcF93b3JkX0FYX0lNTSwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcF9zZWdvdnJfRFMsCisgLyogIDB4M2YgKi8geDg2ZW11T3BfYWFzLAorLQorIC8qICAweDQwICovIHg4NmVtdU9wX2luY19BWCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcF9pbmNfQ1gsCisgLyogIDB4NDIgKi8geDg2ZW11T3BfaW5jX0RYLAorQEAgLTExNDg5LDcgKzEyMTE3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDQ1ICovIHg4NmVtdU9wX2luY19CUCwKKyAvKiAgMHg0NiAqLyB4ODZlbXVPcF9pbmNfU0ksCisgLyogIDB4NDcgKi8geDg2ZW11T3BfaW5jX0RJLAorLQorIC8qICAweDQ4ICovIHg4NmVtdU9wX2RlY19BWCwKKyAvKiAgMHg0OSAqLyB4ODZlbXVPcF9kZWNfQ1gsCisgLyogIDB4NGEgKi8geDg2ZW11T3BfZGVjX0RYLAorQEAgLTExNDk4LDcgKzEyMTI1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wX2RlY19CUCwKKyAvKiAgMHg0ZSAqLyB4ODZlbXVPcF9kZWNfU0ksCisgLyogIDB4NGYgKi8geDg2ZW11T3BfZGVjX0RJLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wX3B1c2hfQVgsCisgLyogIDB4NTEgKi8geDg2ZW11T3BfcHVzaF9DWCwKKyAvKiAgMHg1MiAqLyB4ODZlbXVPcF9wdXNoX0RYLAorQEAgLTExNTA3LDcgKzEyMTMzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweDU1ICovIHg4NmVtdU9wX3B1c2hfQlAsCisgLyogIDB4NTYgKi8geDg2ZW11T3BfcHVzaF9TSSwKKyAvKiAgMHg1NyAqLyB4ODZlbXVPcF9wdXNoX0RJLAorLQorIC8qICAweDU4ICovIHg4NmVtdU9wX3BvcF9BWCwKKyAvKiAgMHg1OSAqLyB4ODZlbXVPcF9wb3BfQ1gsCisgLyogIDB4NWEgKi8geDg2ZW11T3BfcG9wX0RYLAorQEAgLTExNTE2LDE2ICsxMjE0MSwxNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3BfcG9wX0JQLAorIC8qICAweDVlICovIHg4NmVtdU9wX3BvcF9TSSwKKyAvKiAgMHg1ZiAqLyB4ODZlbXVPcF9wb3BfREksCistCisgLyogIDB4NjAgKi8geDg2ZW11T3BfcHVzaF9hbGwsCisgLyogIDB4NjEgKi8geDg2ZW11T3BfcG9wX2FsbCwKKy0vKiAgMHg2MiAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLCAgIC8qIGJvdW5kICovCistLyogIDB4NjMgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBhcnBsICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4NjIgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBib3VuZCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDYzICovIHg4NmVtdU9wX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXJwbCAqLworIC8qICAweDY0ICovIHg4NmVtdU9wX3NlZ292cl9GUywKKyAvKiAgMHg2NSAqLyB4ODZlbXVPcF9zZWdvdnJfR1MsCisgLyogIDB4NjYgKi8geDg2ZW11T3BfcHJlZml4X2RhdGEsCisgLyogIDB4NjcgKi8geDg2ZW11T3BfcHJlZml4X2FkZHIsCistCisgLyogIDB4NjggKi8geDg2ZW11T3BfcHVzaF93b3JkX0lNTSwKKyAvKiAgMHg2OSAqLyB4ODZlbXVPcF9pbXVsX3dvcmRfSU1NLAorIC8qICAweDZhICovIHg4NmVtdU9wX3B1c2hfYnl0ZV9JTU0sCitAQCAtMTE1MzQsNyArMTIxNTksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NmQgKi8geDg2ZW11T3BfaW5zX3dvcmQsCisgLyogIDB4NmUgKi8geDg2ZW11T3Bfb3V0c19ieXRlLAorIC8qICAweDZmICovIHg4NmVtdU9wX291dHNfd29yZCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTywKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTk8sCisgLyogIDB4NzIgKi8geDg2ZW11T3BfanVtcF9uZWFyX0IsCitAQCAtMTE1NDMsNyArMTIxNjcsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4NzUgKi8geDg2ZW11T3BfanVtcF9uZWFyX05aLAorIC8qICAweDc2ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9CRSwKKyAvKiAgMHg3NyAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkJFLAorLQorIC8qICAweDc4ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9TLAorIC8qICAweDc5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OUywKKyAvKiAgMHg3YSAqLyB4ODZlbXVPcF9qdW1wX25lYXJfUCwKK0BAIC0xMTU1Miw3ICsxMjE3NSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg3ZCAqLyB4ODZlbXVPcF9qdW1wX25lYXJfTkwsCisgLyogIDB4N2UgKi8geDg2ZW11T3BfanVtcF9uZWFyX0xFLAorIC8qICAweDdmICovIHg4NmVtdU9wX2p1bXBfbmVhcl9OTEUsCistCisgLyogIDB4ODAgKi8geDg2ZW11T3Bfb3BjODBfYnl0ZV9STV9JTU0sCisgLyogIDB4ODEgKi8geDg2ZW11T3Bfb3BjODFfd29yZF9STV9JTU0sCisgLyogIDB4ODIgKi8geDg2ZW11T3Bfb3BjODJfYnl0ZV9STV9JTU0sCitAQCAtMTE1NjEsNyArMTIxODMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ODUgKi8geDg2ZW11T3BfdGVzdF93b3JkX1JNX1IsCisgLyogIDB4ODYgKi8geDg2ZW11T3BfeGNoZ19ieXRlX1JNX1IsCisgLyogIDB4ODcgKi8geDg2ZW11T3BfeGNoZ193b3JkX1JNX1IsCistCisgLyogIDB4ODggKi8geDg2ZW11T3BfbW92X2J5dGVfUk1fUiwKKyAvKiAgMHg4OSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9STV9SLAorIC8qICAweDhhICovIHg4NmVtdU9wX21vdl9ieXRlX1JfUk0sCitAQCAtMTE1NzAsNyArMTIxOTEsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3BfbGVhX3dvcmRfUl9NLAorIC8qICAweDhlICovIHg4NmVtdU9wX21vdl93b3JkX1NSX1JNLAorIC8qICAweDhmICovIHg4NmVtdU9wX3BvcF9STSwKKy0KKyAvKiAgMHg5MCAqLyB4ODZlbXVPcF9ub3AsCisgLyogIDB4OTEgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX0NYLAorIC8qICAweDkyICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9EWCwKK0BAIC0xMTU3OSw3ICsxMjE5OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5NSAqLyB4ODZlbXVPcF94Y2hnX3dvcmRfQVhfQlAsCisgLyogIDB4OTYgKi8geDg2ZW11T3BfeGNoZ193b3JkX0FYX1NJLAorIC8qICAweDk3ICovIHg4NmVtdU9wX3hjaGdfd29yZF9BWF9ESSwKKy0KKyAvKiAgMHg5OCAqLyB4ODZlbXVPcF9jYncsCisgLyogIDB4OTkgKi8geDg2ZW11T3BfY3dkLAorIC8qICAweDlhICovIHg4NmVtdU9wX2NhbGxfZmFyX0lNTSwKK0BAIC0xMTU4OCw3ICsxMjIwNyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcF9wb3BmX3dvcmQsCisgLyogIDB4OWUgKi8geDg2ZW11T3Bfc2FoZiwKKyAvKiAgMHg5ZiAqLyB4ODZlbXVPcF9sYWhmLAorLQorIC8qICAweGEwICovIHg4NmVtdU9wX21vdl9BTF9NX0lNTSwKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcF9tb3ZfQVhfTV9JTU0sCisgLyogIDB4YTIgKi8geDg2ZW11T3BfbW92X01fQUxfSU1NLAorQEAgLTExNjA1LDggKzEyMjIzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGFkICovIHg4NmVtdU9wX2xvZHNfd29yZCwKKyAvKiAgMHhhYyAqLyB4ODZlbXVPcF9zY2FzX2J5dGUsCisgLyogIDB4YWQgKi8geDg2ZW11T3Bfc2Nhc193b3JkLAorLQorLQorIC8qICAweGIwICovIHg4NmVtdU9wX21vdl9ieXRlX0FMX0lNTSwKKyAvKiAgMHhiMSAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9DTF9JTU0sCisgLyogIDB4YjIgKi8geDg2ZW11T3BfbW92X2J5dGVfRExfSU1NLAorQEAgLTExNjE1LDcgKzEyMjMxLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGI1ICovIHg4NmVtdU9wX21vdl9ieXRlX0NIX0lNTSwKKyAvKiAgMHhiNiAqLyB4ODZlbXVPcF9tb3ZfYnl0ZV9ESF9JTU0sCisgLyogIDB4YjcgKi8geDg2ZW11T3BfbW92X2J5dGVfQkhfSU1NLAorLQorIC8qICAweGI4ICovIHg4NmVtdU9wX21vdl93b3JkX0FYX0lNTSwKKyAvKiAgMHhiOSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9DWF9JTU0sCisgLyogIDB4YmEgKi8geDg2ZW11T3BfbW92X3dvcmRfRFhfSU1NLAorQEAgLTExNjI0LDcgKzEyMjM5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGJkICovIHg4NmVtdU9wX21vdl93b3JkX0JQX0lNTSwKKyAvKiAgMHhiZSAqLyB4ODZlbXVPcF9tb3Zfd29yZF9TSV9JTU0sCisgLyogIDB4YmYgKi8geDg2ZW11T3BfbW92X3dvcmRfRElfSU1NLAorLQorIC8qICAweGMwICovIHg4NmVtdU9wX29wY0MwX2J5dGVfUk1fTUVNLAorIC8qICAweGMxICovIHg4NmVtdU9wX29wY0MxX3dvcmRfUk1fTUVNLAorIC8qICAweGMyICovIHg4NmVtdU9wX3JldF9uZWFyX0lNTSwKK0BAIC0xMTY0MSwxNCArMTIyNTUsMTQgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGNkICovIHg4NmVtdU9wX2ludF9JTU0sCisgLyogIDB4Y2UgKi8geDg2ZW11T3BfaW50bywKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcF9pcmV0LAorLQorIC8qICAweGQwICovIHg4NmVtdU9wX29wY0QwX2J5dGVfUk1fMSwKKyAvKiAgMHhkMSAqLyB4ODZlbXVPcF9vcGNEMV93b3JkX1JNXzEsCisgLyogIDB4ZDIgKi8geDg2ZW11T3Bfb3BjRDJfYnl0ZV9STV9DTCwKKyAvKiAgMHhkMyAqLyB4ODZlbXVPcF9vcGNEM193b3JkX1JNX0NMLAorIC8qICAweGQ0ICovIHg4NmVtdU9wX2FhbSwKKyAvKiAgMHhkNSAqLyB4ODZlbXVPcF9hYWQsCistLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4ZDYgKi8geDg2ZW11T3BfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVbmRvY3VtZW50ZWQgU0VUQUxDIGluc3RydWN0aW9uICovCisgLyogIDB4ZDcgKi8geDg2ZW11T3BfeGxhdCwKKyAvKiAgMHhkOCAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4LAorIC8qICAweGQ5ICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDksCitAQCAtMTE2NTgsNyArMTIyNzIsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZGQgKi8geDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlLAorIC8qICAweGRmICovIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYsCistCisgLyogIDB4ZTAgKi8geDg2ZW11T3BfbG9vcG5lLAorIC8qICAweGUxICovIHg4NmVtdU9wX2xvb3BlLAorIC8qICAweGUyICovIHg4NmVtdU9wX2xvb3AsCitAQCAtMTE2NjcsNyArMTIyODAsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiWzI1Nl0pKHU4KSA9CisgLyogIDB4ZTUgKi8geDg2ZW11T3BfaW5fd29yZF9BWF9JTU0sCisgLyogIDB4ZTYgKi8geDg2ZW11T3Bfb3V0X2J5dGVfSU1NX0FMLAorIC8qICAweGU3ICovIHg4NmVtdU9wX291dF93b3JkX0lNTV9BWCwKKy0KKyAvKiAgMHhlOCAqLyB4ODZlbXVPcF9jYWxsX25lYXJfSU1NLAorIC8qICAweGU5ICovIHg4NmVtdU9wX2p1bXBfbmVhcl9JTU0sCisgLyogIDB4ZWEgKi8geDg2ZW11T3BfanVtcF9mYXJfSU1NLAorQEAgLTExNjc2LDcgKzEyMjg4LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wX2luX3dvcmRfQVhfRFgsCisgLyogIDB4ZWUgKi8geDg2ZW11T3Bfb3V0X2J5dGVfRFhfQUwsCisgLyogIDB4ZWYgKi8geDg2ZW11T3Bfb3V0X3dvcmRfRFhfQVgsCistCisgLyogIDB4ZjAgKi8geDg2ZW11T3BfbG9jaywKKyAvKiAgMHhmMSAqLyB4ODZlbXVPcF9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wX3JlcG5lLAorQEAgLTExNjg1LDcgKzEyMjk2LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYlsyNTZdKSh1OCkgPQorIC8qICAweGY1ICovIHg4NmVtdU9wX2NtYywKKyAvKiAgMHhmNiAqLyB4ODZlbXVPcF9vcGNGNl9ieXRlX1JNLAorIC8qICAweGY3ICovIHg4NmVtdU9wX29wY0Y3X3dvcmRfUk0sCistCisgLyogIDB4ZjggKi8geDg2ZW11T3BfY2xjLAorIC8qICAweGY5ICovIHg4NmVtdU9wX3N0YywKKyAvKiAgMHhmYSAqLyB4ODZlbXVPcF9jbGksCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvb3BzMi5jIGIvbGlicy94ODZlbXUvb3BzMi5jCitpbmRleCAwNmI3ZjU2Li41ZWQyYmY2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvb3BzMi5jCisrKysgYi9saWJzL3g4NmVtdS9vcHMyLmMKK0BAIC01NSwxNiArNTUsMTQgQEAgb3AxIC0gSW5zdHJ1Y3Rpb24gb3AgY29kZQorIFJFTUFSS1M6CisgSGFuZGxlcyBpbGxlZ2FsIG9wY29kZXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKy0JdTggb3AyKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2lsbGVnYWxfb3AodTggb3AyKQorIHsKKy0JaW50IG1vZCwgcmwsIHJoOworLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworLQlUUkFDRV9SRUdTKCk7CistCXByaW50aygiJTA0eDolMDR4OiAlMDJYIC8lZCBJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREUhIChtb2Q9JWQgcmw9JWQpXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0yLG9wMiwgcmgsIG1vZCwgcmwpOworKyAgICBTVEFSVF9PRl9JTlNUUigpOworKyAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICBUUkFDRV9SRUdTKCk7CisrICAgIHByaW50aygiJTA0eDolMDR4OiAlMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSFcbiIsCisrICAgICAgICAgICBNLng4Ni5SX0NTLCBNLng4Ni5SX0lQIC0gMiwgb3AyKTsKKyAgICAgSEFMVF9TWVMoKTsKKyAgICAgRU5EX09GX0lOU1RSKCk7CisgfQorQEAgLTczLDU1ICs3MSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaWxsZWdhbF9vcCgKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CistSGFuZGxlcyBvcGNvZGUgMHgwZiwweDAxCistKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfZ3JvdXBfZyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisteworLQlpbnQgbW9kLCBybCwgcmg7CistCXUxNiAqZGVzdHJlZzsKKy0JdWludCBkZXN0b2Zmc2V0OworLQorLQlTVEFSVF9PRl9JTlNUUigpOworLQlGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLQlzd2l0Y2ggKHJoKSB7CistCQljYXNlIDQ6IC8vIFNNU1cgKFN0b3JlIE1hY2hpbmUgU3RhdHVzIFdvcmQpCistCQkJLy8gRGVjb2RlIHRoZSBtb2QgYnl0ZSB0byBmaW5kIHRoZSBhZGRyZXNzaW5nCistCQkJLy8gQWx3YXlzIHJldHVybnMgMHgxMCAoaW5pdGlhbCB2YWx1ZSBhcyBwZXIgaW50ZWwgbWFudWFsIHZvbHVtZSAzLCBmaWd1cmUgOC0xCistCQkJc3dpdGNoIChtb2QpIHsKKy0JCQkJY2FzZSAwOgorLQkJCQkJZGVzdG9mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkJCQkJc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIDB4MTApOworLQkJCQkJYnJlYWs7CistCQkJCWNhc2UgMToKKy0JCQkJCWRlc3RvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JCQkJCXN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCAweDEwKTsKKy0JCQkJCWJyZWFrOworLQkJCQljYXNlIDI6CistCQkJCQlkZXN0b2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCQkJCQlzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgMHgxMCk7CistCQkJCQlicmVhazsKKy0JCQkJY2FzZSAzOgorLQkJCQkJZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JCQkJCSpkZXN0cmVnID0gMHgxMDsKKy0JCQkJCWJyZWFrOworLQkJCX0KKy0JCQlicmVhazsKKy0JCWRlZmF1bHQ6CistCQkJREVDT0RFX1BSSU5URigiSUxMRUdBTCBFWFRFTkRFRCBYODYgT1BDT0RFIElOIDBGIDAxXG4iKTsKKy0JCQlUUkFDRV9SRUdTKCk7CistCQkJcHJpbnRrKCIlMDR4OiUwNHg6IDBGICUwMlggLyVkIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSEgKG1vZD0lZCBybD0lZClcbiIsCistCQkJCU0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAtMixvcDIsIHJoLCBtb2QsIHJsKTsKKy0JCQlIQUxUX1NZUygpOworLQkJCWJyZWFrOworLQl9CistCUVORF9PRl9JTlNUUigpOworLX0KKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLVJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweDMxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcmR0c2ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCisgICAgIHN0YXRpYyB1NjQgY291bnRlciA9IDA7CitAQCAtMTU1LDkwICsxMDgsOTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3JkdHNjKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHg4MC0weDhGCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbG9uZ19qdW1wKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sb25nX2p1bXAodTggb3AyKQorIHsKKyAgICAgczMyIHRhcmdldDsKKy0gICAgY2hhciAqbmFtZSA9IDA7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIC8qIGNvbmRpdGlvbmFsIGp1bXAgdG8gd29yZCBvZmZzZXQuICovCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDgwOgorKyAgICBjYXNlIDB4ODA6CisgICAgICAgICBuYW1lID0gIkpPXHQiOworLSAgICAgICAgY29uZCA9ICBBQ0NFU1NfRkxBRyhGX09GKTsKKysgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4MToKKysgICAgY2FzZSAweDgxOgorICAgICAgICAgbmFtZSA9ICJKTk9cdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgyOgorKyAgICBjYXNlIDB4ODI6CisgICAgICAgICBuYW1lID0gIkpCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDgzOgorKyAgICBjYXNlIDB4ODM6CisgICAgICAgICBuYW1lID0gIkpOQlx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9DRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODQ6CisrICAgIGNhc2UgMHg4NDoKKyAgICAgICAgIG5hbWUgPSAiSlpcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODU6CisrICAgIGNhc2UgMHg4NToKKyAgICAgICAgIG5hbWUgPSAiSk5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4NjoKKysgICAgY2FzZSAweDg2OgorICAgICAgICAgbmFtZSA9ICJKQkVcdCI7CisgICAgICAgICBjb25kID0gQUNDRVNTX0ZMQUcoRl9DRikgfHwgQUNDRVNTX0ZMQUcoRl9aRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4ODc6CisrICAgIGNhc2UgMHg4NzoKKyAgICAgICAgIG5hbWUgPSAiSk5CRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKEFDQ0VTU19GTEFHKEZfQ0YpIHx8IEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4ODoKKysgICAgY2FzZSAweDg4OgorICAgICAgICAgbmFtZSA9ICJKU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg4OToKKysgICAgY2FzZSAweDg5OgorICAgICAgICAgbmFtZSA9ICJKTlNcdCI7CisgICAgICAgICBjb25kID0gIUFDQ0VTU19GTEFHKEZfU0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhhOgorKyAgICBjYXNlIDB4OGE6CisgICAgICAgICBuYW1lID0gIkpQXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfUEYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhiOgorKyAgICBjYXNlIDB4OGI6CisgICAgICAgICBuYW1lID0gIkpOUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGM6CisrICAgIGNhc2UgMHg4YzoKKyAgICAgICAgIG5hbWUgPSAiSkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhkOgorKyAgICBjYXNlIDB4OGQ6CisgICAgICAgICBuYW1lID0gIkpOTFx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OGU6CisrICAgIGNhc2UgMHg4ZToKKyAgICAgICAgIG5hbWUgPSAiSkxFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDhmOgorKyAgICBjYXNlIDB4OGY6CisgICAgICAgICBuYW1lID0gIkpOTEVcdCI7CisgICAgICAgICBjb25kID0gISh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgIEFDQ0VTU19GTEFHKEZfWkYpKTsKKyAgICAgICAgIGJyZWFrOworICAgICB9CisgICAgIERFQ09ERV9QUklOVEYobmFtZSk7CistICAgICh2b2lkKW5hbWU7CisrICAgICh2b2lkKSBuYW1lOworICAgICB0YXJnZXQgPSAoczE2KSBmZXRjaF93b3JkX2ltbSgpOworICAgICB0YXJnZXQgKz0gKHMxNikgTS54ODYuUl9JUDsKKyAgICAgREVDT0RFX1BSSU5URjIoIiUwNHhcbiIsIHRhcmdldCk7CisgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIGlmIChjb25kKQorLSAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpdGFyZ2V0OworKyAgICAgICAgTS54ODYuUl9JUCA9ICh1MTYpIHRhcmdldDsKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKKyB9CitAQCAtMjQ3LDg1ICsyMDEsODYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xvbmdfanVtcCh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4OTAtMHg5RgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0gICAgdTggICpkZXN0cmVnOworLSAgICBjaGFyICpuYW1lID0gMDsKKysgICAgdTggKmRlc3RyZWc7CisrICAgIGNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworICAgICBpbnQgY29uZCA9IDA7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIHN3aXRjaCAob3AyKSB7CistICAgICAgY2FzZSAweDkwOgorKyAgICBjYXNlIDB4OTA6CisgICAgICAgICBuYW1lID0gIlNFVE9cdCI7CistICAgICAgICBjb25kID0gIEFDQ0VTU19GTEFHKEZfT0YpOworKyAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfT0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkxOgorKyAgICBjYXNlIDB4OTE6CisgICAgICAgICBuYW1lID0gIlNFVE5PXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX09GKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5MjoKKysgICAgY2FzZSAweDkyOgorICAgICAgICAgbmFtZSA9ICJTRVRCXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfQ0YpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDkzOgorKyAgICBjYXNlIDB4OTM6CisgICAgICAgICBuYW1lID0gIlNFVE5CXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX0NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NDoKKysgICAgY2FzZSAweDk0OgorICAgICAgICAgbmFtZSA9ICJTRVRaXHQiOworICAgICAgICAgY29uZCA9IEFDQ0VTU19GTEFHKEZfWkYpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDk1OgorKyAgICBjYXNlIDB4OTU6CisgICAgICAgICBuYW1lID0gIlNFVE5aXHQiOworICAgICAgICAgY29uZCA9ICFBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NjoKKysgICAgY2FzZSAweDk2OgorICAgICAgICAgbmFtZSA9ICJTRVRCRVx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5NzoKKysgICAgY2FzZSAweDk3OgorICAgICAgICAgbmFtZSA9ICJTRVROQkVcdCI7CisgICAgICAgICBjb25kID0gIShBQ0NFU1NfRkxBRyhGX0NGKSB8fCBBQ0NFU1NfRkxBRyhGX1pGKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OTg6CisrICAgIGNhc2UgMHg5ODoKKyAgICAgICAgIG5hbWUgPSAiU0VUU1x0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1NGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5OToKKysgICAgY2FzZSAweDk5OgorICAgICAgICAgbmFtZSA9ICJTRVROU1x0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9TRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWE6CisrICAgIGNhc2UgMHg5YToKKyAgICAgICAgIG5hbWUgPSAiU0VUUFx0IjsKKyAgICAgICAgIGNvbmQgPSBBQ0NFU1NfRkxBRyhGX1BGKTsKKyAgICAgICAgIGJyZWFrOworLSAgICAgIGNhc2UgMHg5YjoKKysgICAgY2FzZSAweDliOgorICAgICAgICAgbmFtZSA9ICJTRVROUFx0IjsKKyAgICAgICAgIGNvbmQgPSAhQUNDRVNTX0ZMQUcoRl9QRik7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWM6CisrICAgIGNhc2UgMHg5YzoKKyAgICAgICAgIG5hbWUgPSAiU0VUTFx0IjsKKyAgICAgICAgIGNvbmQgPSB4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSk7CisgICAgICAgICBicmVhazsKKy0gICAgICBjYXNlIDB4OWQ6CisrICAgIGNhc2UgMHg5ZDoKKyAgICAgICAgIG5hbWUgPSAiU0VUTkxcdCI7CisgICAgICAgICBjb25kID0geG9ybChBQ0NFU1NfRkxBRyhGX1NGKSwgQUNDRVNTX0ZMQUcoRl9PRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDllOgorKyAgICBjYXNlIDB4OWU6CisgICAgICAgICBuYW1lID0gIlNFVExFXHQiOworICAgICAgICAgY29uZCA9ICh4b3JsKEFDQ0VTU19GTEFHKEZfU0YpLCBBQ0NFU1NfRkxBRyhGX09GKSkgfHwKKyAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CistICAgICAgY2FzZSAweDlmOgorKyAgICBjYXNlIDB4OWY6CisgICAgICAgICBuYW1lID0gIlNFVE5MRVx0IjsKKyAgICAgICAgIGNvbmQgPSAhKHhvcmwoQUNDRVNTX0ZMQUcoRl9TRiksIEFDQ0VTU19GTEFHKEZfT0YpKSB8fAorICAgICAgICAgICAgICAgICAgQUNDRVNTX0ZMQUcoRl9aRikpOworICAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX1BSSU5URihuYW1lKTsKKy0gICAgKHZvaWQpbmFtZTsKKysgICAgKHZvaWQpIG5hbWU7CisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0zNDMsNyArMjk4LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NldF9ieXRlKHU4IG9wMikKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICBzdG9yZV9kYXRhX2J5dGUoZGVzdG9mZnNldCwgY29uZCA/IDB4MDEgOiAweDAwKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fQllURV9SRUdJU1RFUihybCk7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBjb25kID8gMHgwMSA6IDB4MDA7CitAQCAtMzU3LDcgKzMxMiw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zZXRfYnl0ZSh1OCBvcDIpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEZTXG4iKTsKK0BAIC0zNzEsNyArMzI3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGExCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0ZTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRGU1xuIik7CitAQCAtMzg1LDcgKzM0Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wb3BfRlModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6IENQVUlEIHRha2VzIEVBWC9FQ1ggYXMgaW5wdXRzLCB3cml0ZXMgRUFYL0VCWC9FQ1gvRURYIGFzIG91dHB1dAorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9jcHVpZCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJDUFVJRFxuIik7CitAQCAtMzk5LDExICszNTcsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2NwdWlkKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFx0Iik7CitAQCAtNDE5LDEwICszNzgsMTEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLCBGX0NGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC00MzEsOSArMzkxLDkgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0X1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorQEAgLTQ0NiwxMCArNDA2LDExIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksRl9DRik7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSwgRl9DRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNDU4LDkgKzQxOSw5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKK0BAIC00NzMsMTAgKzQzNCwxMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgKDB4MSA8PCBiaXQpLEZfQ0YpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTQ4NSwzMCArNDQ3LDMxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmICgweDEgPDwgYml0KSxGX0NGKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSxGX0NGKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksIEZfQ0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiAoMHgxIDw8IGJpdCksRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmICgweDEgPDwgYml0KSwgRl9DRik7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTUyMCwxMSArNDgzLDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idF9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhNAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKKy0JdTggc2hpZnQ7CisrICAgIHU4IHNoaWZ0OworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJTSExEXHQiKTsKK0BAIC01NDMsOSArNTA3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNTU3LDcgKzUyMiw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNTc0LDkgKzUzOSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTU4OCw3ICs1NTQsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTYwNSw5ICs1NzEsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02MTksMTMgKzU4NiwxMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjM0LDkgKzYwMSwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtNjQ1LDcgKzYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnQgPSBmZXRjaF9ieXRlX2ltbSgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTY1Nyw3ICs2MjUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE1CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgZGVzdG9mZnNldDsKK0BAIC02NzcsOSArNjQ2LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaGxkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC02ODksNyArNjU5LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTcwNCw5ICs2NzQsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTcxNiw3ICs2ODcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtNzMxLDkgKzcwMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hsZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtNzQzLDI5ICs3MTUsMzAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NobGRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV93b3JkKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaGxkX3dvcmQoZGVzdHZhbCwqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNobGRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTMyICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hsZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzaGlmdHJlZzsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfbG9uZygqZGVzdHJlZywgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNobGRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaGxkX3dvcmQoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgfQorQEAgLTc3Nyw3ICs3NTAsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hsZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YTgKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wdXNoX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlBVU0hcdEdTXG4iKTsKK0BAIC03OTEsNyArNzY1LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3B1c2hfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGE5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfcG9wX0dTKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9wb3BfR1ModTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiUE9QXHRHU1xuIik7CitAQCAtODA1LDExICs3ODAsMTIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3BvcF9HUyh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworQEAgLTgxNyw3ICs3OTMsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTgyNSwxMyArODAxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtODM5LDE2ICs4MTYsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIHwgbWFzayk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC04NTYsMTMgKzgzMywxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworQEAgLTg3MCwxNiArODQ4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idHNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CitAQCAtODg3LDUxICs4NjUsNTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0c19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCB8IG1hc2spOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworLQkJCXUzMiBtYXNrOworLQorLQkJCXNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyB8PSBtYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiAqc3JjcmVnLCAqc2hpZnRyZWc7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrCisrICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLCBGX0NGKTsKKyAgICAgICAgICAgICAqc3JjcmVnIHw9IG1hc2s7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05NDQsMTEgKzkyNCwxMiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRzX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGFjCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBkZXN0b2Zmc2V0OworLQl1OCBzaGlmdDsKKysgICAgdTggc2hpZnQ7CisgCisgICAgIFNUQVJUX09GX0lOU1RSKCk7CisgICAgIERFQ09ERV9QUklOVEYoIlNITERcdCIpOworQEAgLTk2Nyw5ICs5NDgsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX2xvbmcoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfbG9uZyhkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC05ODEsNyArOTYzLDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKK0BAIC05OTgsOSArOTgwLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBkZXN0dmFsID0gZmV0Y2hfZGF0YV9sb25nKGRlc3RvZmZzZXQpOworLSAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBzaGlmdCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBkZXN0dmFsOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCitAQCAtMTAxMiw3ICs5OTUsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTEwMjksOSArMTAxMiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYyKCIlZFxuIiwgc2hpZnQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLHNoaWZ0KTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsICpzaGlmdHJlZywgc2hpZnQpOworICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhkZXN0b2Zmc2V0LCBkZXN0dmFsKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgZGVzdHZhbDsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorQEAgLTEwNDMsMTMgKzEwMjcsMTMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxzaGlmdCk7CisrICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTEwNTgsOSArMTA0MiwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0ID0gZmV0Y2hfYnl0ZV9pbW0oKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGMigiJWRcbiIsIHNoaWZ0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF9sb25nKCpkZXN0cmVnLCpzaGlmdHJlZyxzaGlmdCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgc2hpZnQpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CitAQCAtMTA2OSw3ICsxMDU0LDcgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URjIoIiVkXG4iLCBzaGlmdCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfd29yZCgqZGVzdHJlZywqc2hpZnRyZWcsc2hpZnQpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIHNoaWZ0KTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTA4MSw3ICsxMDY2LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhhZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX3NocmRfQ0wodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IGRlc3RvZmZzZXQ7CitAQCAtMTEwMSw5ICsxMDg3LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTEzLDcgKzExMDAsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTEyOCw5ICsxMTE1LDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTQwLDcgKzExMjgsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLENMXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGRlc3R2YWwgPSBmZXRjaF9kYXRhX3dvcmQoZGVzdG9mZnNldCk7CistICAgICAgICAgICAgZGVzdHZhbCA9IHNocmRfd29yZChkZXN0dmFsLCpzaGlmdHJlZyxNLng4Ni5SX0NMKTsKKysgICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKGRlc3RvZmZzZXQsIGRlc3R2YWwpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CitAQCAtMTE1NSw5ICsxMTQzLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfbG9uZyhkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF9sb25nKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX2xvbmcoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoZGVzdG9mZnNldCwgZGVzdHZhbCk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IGRlc3R2YWw7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKK0BAIC0xMTY3LDI5ICsxMTU2LDMwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9zaHJkX0NMKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgZGVzdHZhbCA9IGZldGNoX2RhdGFfd29yZChkZXN0b2Zmc2V0KTsKKy0gICAgICAgICAgICBkZXN0dmFsID0gc2hyZF93b3JkKGRlc3R2YWwsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgIGRlc3R2YWwgPSBzaHJkX3dvcmQoZGVzdHZhbCwgKnNoaWZ0cmVnLCBNLng4Ni5SX0NMKTsKKyAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoZGVzdG9mZnNldCwgZGVzdHZhbCk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgKmRlc3RyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIixDTFxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IHNocmRfbG9uZygqZGVzdHJlZywqc2hpZnRyZWcsTS54ODYuUl9DTCk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiAqZGVzdHJlZywqc2hpZnRyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX2xvbmcoKmRlc3RyZWcsICpzaGlmdHJlZywgTS54ODYuUl9DTCk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsQ0xcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSBzaHJkX3dvcmQoKmRlc3RyZWcsKnNoaWZ0cmVnLE0ueDg2LlJfQ0wpOworKyAgICAgICAgICAgICpkZXN0cmVnID0gc2hyZF93b3JkKCpkZXN0cmVnLCAqc2hpZnRyZWcsIE0ueDg2LlJfQ0wpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0xMjAxLDcgKzExOTEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfc2hyZF9DTCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YWYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTEyMTQsMjMgKzEyMDUsMjUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTMyIHNyY3ZhbDsKKy0gICAgICAgICAgICB1MzIgcmVzX2xvLHJlc19oaTsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sJnJlc19oaSwoczMyKSpkZXN0cmVnLChzMzIpc3JjdmFsKTsKKysgICAgICAgICAgICBpbXVsX2xvbmdfZGlyZWN0KCZyZXNfbG8sICZyZXNfaGksIChzMzIpICogZGVzdHJlZywgKHMzMikgc3JjdmFsKTsKKyAgICAgICAgICAgICBpZiAocmVzX2hpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpcmVzX2xvOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MzIpIHJlc19sbzsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworICAgICAgICAgICAgIHUzMiByZXM7CitAQCAtMTI0MCwzOCArMTIzMyw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfaW11bF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIHJlcyA9IChzMTYpKmRlc3RyZWcgKiAoczE2KXNyY3ZhbDsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSBzcmN2YWw7CisgICAgICAgICAgICAgaWYgKHJlcyA+IDB4RkZGRikgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNilyZXM7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KSByZXM7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisgICAgICAgICAgICAgdTMyICpkZXN0cmVnOworICAgICAgICAgICAgIHUzMiBzcmN2YWw7CistICAgICAgICAgICAgdTMyIHJlc19sbyxyZXNfaGk7CisrICAgICAgICAgICAgdTMyIHJlc19sbywgcmVzX2hpOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKXNyY3ZhbCk7CisrICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCAmcmVzX2hpLCAoczMyKSAqIGRlc3RyZWcsIChzMzIpIHNyY3ZhbCk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAgICAgICAgICAgICB1MzIgcmVzOworQEAgLTEyODEsMzggKzEyNzcsNDEgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2ltdWxfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICByZXMgPSAoczE2KSpkZXN0cmVnICogKHMxNilzcmN2YWw7CisrICAgICAgICAgICAgcmVzID0gKHMxNikgKiBkZXN0cmVnICogKHMxNikgc3JjdmFsOworICAgICAgICAgICAgIGlmIChyZXMgPiAweEZGRkYpIHsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfT0YpOworLSAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpcmVzOworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUxNikgcmVzOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MzIgc3JjdmFsOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiByZXNfbG8sIHJlc19oaTsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworLSAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywmcmVzX2hpLChzMzIpKmRlc3RyZWcsKHMzMilzcmN2YWwpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSBzcmN2YWwpOworICAgICAgICAgICAgIGlmIChyZXNfaGkgIT0gMCkgeworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgU0VUX0ZMQUcoRl9PRik7CistICAgICAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisgICAgICAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMilyZXNfbG87CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHUzMikgcmVzX2xvOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgICAgICAgICAgICAgdTMyIHJlczsKK0BAIC0xMzIyLDUxICsxMzIxLDU1IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpc3JjdmFsOworKyAgICAgICAgICAgIHJlcyA9IChzMTYpICogZGVzdHJlZyAqIChzMTYpIHNyY3ZhbDsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiAqZGVzdHJlZywqc3JjcmVnOworLSAgICAgICAgICAgIHUzMiByZXNfbG8scmVzX2hpOworKyAgICAgICAgICAgIHUzMiAqZGVzdHJlZywgKnNyY3JlZzsKKysgICAgICAgICAgICB1MzIgcmVzX2xvLCByZXNfaGk7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgaW11bF9sb25nX2RpcmVjdCgmcmVzX2xvLCZyZXNfaGksKHMzMikqZGVzdHJlZywoczMyKSpzcmNyZWcpOworKyAgICAgICAgICAgIGltdWxfbG9uZ19kaXJlY3QoJnJlc19sbywgJnJlc19oaSwgKHMzMikgKiBkZXN0cmVnLCAoczMyKSAqIHNyY3JlZyk7CisgICAgICAgICAgICAgaWYgKHJlc19oaSAhPSAwKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKXJlc19sbzsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2ICpkZXN0cmVnLCpzcmNyZWc7CisrICAgICAgICAgICAgKmRlc3RyZWcgPSAodTMyKSByZXNfbG87CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKmRlc3RyZWcsICpzcmNyZWc7CisgICAgICAgICAgICAgdTMyIHJlczsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistICAgICAgICAgICAgcmVzID0gKHMxNikqZGVzdHJlZyAqIChzMTYpKnNyY3JlZzsKKysgICAgICAgICAgICByZXMgPSAoczE2KSAqIGRlc3RyZWcgKiAoczE2KSAqIHNyY3JlZzsKKyAgICAgICAgICAgICBpZiAocmVzID4gMHhGRkZGKSB7CisgICAgICAgICAgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworICAgICAgICAgICAgICAgICBTRVRfRkxBRyhGX09GKTsKKy0gICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyAgICAgICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgKmRlc3RyZWcgPSAodTE2KXJlczsKKysgICAgICAgICAgICAqZGVzdHJlZyA9ICh1MTYpIHJlczsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMTM3OCw5ICsxMzgxLDEwIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9pbXVsX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKy0JaW50IG1vZCwgcmgsIHJsOworKyAgICBpbnQgbW9kLCByaCwgcmw7CisgICAgIHUxNiAqZHN0cmVnOworICAgICB1aW50IHNyY29mZnNldDsKKyAKK0BAIC0xNDE1LDcgKzE0MTksNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbHNzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICpkc3RyZWcgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKyAgICAgICAgIE0ueDg2LlJfU1MgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgMik7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICAvKiBVTkRFRklORUQhICovCisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICB9CitAQCAtMTQyNywxNDggKzE0MzEsMTU0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sc3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGIzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRyX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2J0cl9SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CistCWludCBtb2QsIHJsLCByaDsKKy0JdWludCBzcmNvZmZzZXQ7CistCWludCBiaXQsZGlzcDsKKy0KKy0JU1RBUlRfT0ZfSU5TVFIoKTsKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0Jc3dpdGNoIChtb2QpIHsKKy0JY2FzZSAwOgorLQkJaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyIHNyY3ZhbCxtYXNrOworLQkJCXUzMiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCX0gZWxzZSB7CistCQkJdTE2IHNyY3ZhbCxtYXNrOworLQkJCXUxNiAqc2hpZnRyZWc7CistCistCQkJc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgJiB+bWFzaykpOworLQkJfQorLQkJYnJlYWs7CistCWNhc2UgMToKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCXUzMiBzcmN2YWwsbWFzazsKKy0JCQl1MzIgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgJiB+bWFzayk7CistCQl9IGVsc2UgeworLQkJCXUxNiBzcmN2YWwsbWFzazsKKy0JCQl1MTYgKnNoaWZ0cmVnOworLQorLQkJCXNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQlkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0JCQlzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsICYgfm1hc2spKTsKKy0JCX0KKy0JCWJyZWFrOworLQljYXNlIDI6CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgc3JjdmFsLG1hc2s7CistCQkJdTMyICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLQkJCWRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLQkJCXNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsICYgfm1hc2spOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgc3JjdmFsLG1hc2s7CistCQkJdTE2ICpzaGlmdHJlZzsKKy0KKy0JCQlzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JCQlERUNPREVfUFJJTlRGKCIsIik7CistCQkJc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCQkJVFJBQ0VfQU5EX1NURVAoKTsKKy0JCQliaXQgPSAqc2hpZnRyZWcgJiAweEY7CistCQkJZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistCQkJc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCAmIH5tYXNrKSk7CistCQl9CistCQlicmVhazsKKy0JY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQl1MzIgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTMyIG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistCQkJbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnICY9IH5tYXNrOworLQkJfSBlbHNlIHsKKy0JCQl1MTYgKnNyY3JlZywqc2hpZnRyZWc7CistCQkJdTE2IG1hc2s7CistCistCQkJc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkJCURFQ09ERV9QUklOVEYoIiwiKTsKKy0JCQlzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JCQlUUkFDRV9BTkRfU1RFUCgpOworLQkJCWJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCQkJKnNyY3JlZyAmPSB+bWFzazsKKy0JCX0KKy0JCWJyZWFrOworLQl9CistCURFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKy0JRU5EX09GX0lOU1RSKCk7CisrICAgIGludCBtb2QsIHJsLCByaDsKKysgICAgdWludCBzcmNvZmZzZXQ7CisrICAgIGludCBiaXQsIGRpc3A7CisrCisrICAgIFNUQVJUX09GX0lOU1RSKCk7CisrICAgIERFQ09ERV9QUklOVEYoIkJUUlx0Iik7CisrICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisrICAgIHN3aXRjaCAobW9kKSB7CisrICAgIGNhc2UgMDoKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisrICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCAmIH5tYXNrKSk7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAxOgorKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKysgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsICYgfm1hc2spKTsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICBjYXNlIDI6CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworKyAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgJiB+bWFzaykpOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgKnNyY3JlZywgKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUxNiBtYXNrOworKworKyAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyAmPSB+bWFzazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworKyAgICB9CisrICAgIERFQ09ERV9DTEVBUl9TRUdPVlIoKTsKKysgICAgRU5EX09GX0lOU1RSKCk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2MDMsNyArMTYxMyw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZnNfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9GUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjE1LDkgKzE2MjUsMTAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2xmc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YjUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2xnc19SX0lNTSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworLQlpbnQgbW9kLCByaCwgcmw7CisrICAgIGludCBtb2QsIHJoLCBybDsKKyAgICAgdTE2ICpkc3RyZWc7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworIAorQEAgLTE2NTIsNyArMTY2Myw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9sZ3NfUl9JTU0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgKmRzdHJlZyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworICAgICAgICAgTS54ODYuUl9HUyA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyAyKTsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIC8qIFVOREVGSU5FRCEgKi8KKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgIH0KK0BAIC0xNjY0LDcgKzE2NzUsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbGdzX1JfSU1NKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiNgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMTY4NSw3ICsxNjk3LDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorQEAgLTE3MTAsNyArMTcyMyw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKK0BAIC0xNzM1LDcgKzE3NDksOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCitAQCAtMTc0OCwxMCArMTc2MywxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3NTksOSArMTc3NCwxMCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSAqc3JjcmVnOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworQEAgLTE3ODAsNyArMTc5Niw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3Z6eF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGI3CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3Z6eF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODE5LDcgKzE4MzYsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92enhfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CitAQCAtMTgzNiw3ICsxODUzLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnp4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0xODQ2LDIzICsxODY0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIEZFVENIX0RFQ09ERV9NT0RSTShtb2QsIHJoLCBybCk7CisgICAgIHN3aXRjaCAocmgpIHsKKyAgICAgY2FzZSA0OgorLQlERUNPREVfUFJJTlRGKCJCVFx0Iik7CistCWJyZWFrOworKyAgICAgICAgREVDT0RFX1BSSU5URigiQlRcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNToKKy0JREVDT0RFX1BSSU5URigiQlRTXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFNcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNjoKKy0JREVDT0RFX1BSSU5URigiQlRSXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVFJcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgNzoKKy0JREVDT0RFX1BSSU5URigiQlRDXHQiKTsKKy0JYnJlYWs7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworKyAgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CistCURFQ09ERV9QUklOVEYoIklMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERVxuIik7CistCVRSQUNFX1JFR1MoKTsKKy0JcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorLQkJTS54ODYuUl9DUywgTS54ODYuUl9JUC0zLG9wMiwgKG1vZDw8Nil8KHJoPDwzKXxybCk7CistCUhBTFRfU1lTKCk7CisrICAgICAgICBERUNPREVfUFJJTlRGKCJJTExFR0FMIEVYVEVOREVEIFg4NiBPUENPREVcbiIpOworKyAgICAgICAgVFJBQ0VfUkVHUygpOworKyAgICAgICAgcHJpbnRrKCIlMDR4OiUwNHg6ICUwMlglMDJYIElMTEVHQUwgRVhURU5ERUQgWDg2IE9QQ09ERSBFWFRFTlNJT04hXG4iLAorKyAgICAgICAgICAgICAgIE0ueDg2LlJfQ1MsIE0ueDg2LlJfSVAgLSAzLCBvcDIsIChtb2QgPDwgNikgfCAocmggPDwgMykgfCBybCk7CisrICAgICAgICBIQUxUX1NZUygpOworICAgICB9CisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKK0BAIC0xODc2LDIyICsxODk0LDIzIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1OCBzaGlmdDsKKyAKK0BAIC0xOTAxLDIxICsxOTIwLDIxIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CitAQCAtMTkyOSwyMiArMTk0OCwyMyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweDFGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzd2l0Y2ggKHJoKSB7CisrICAgICAgICAgICAgY2FzZSA1OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTggc2hpZnQ7CisgCitAQCAtMTk1NCwyMSArMTk3NCwyMSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRYX0kodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gc2hpZnQgJiAweEY7CisgICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgfCBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA2OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorQEAgLTE5ODIsMjIgKzIwMDIsMjMgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHgxRjsKKyAgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JICAgIHN3aXRjaCAocmgpIHsKKy0JICAgIGNhc2UgNToKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQlzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0LCBzcmN2YWwgJiB+bWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCXN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworLQkJYnJlYWs7CistCSAgICBkZWZhdWx0OgorLQkJYnJlYWs7CistCSAgICB9CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNjoKKysgICAgICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCwgc3JjdmFsICYgfm1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHU4IHNoaWZ0OworIAorQEAgLTIwMDcsNzQgKzIwMjgsNzUgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0WF9JKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9IHNoaWZ0ICYgMHhGOworICAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIHwgbWFzayk7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKy0JCWJyZWFrOworLQkgICAgY2FzZSA3OgorLQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCwgc3JjdmFsIF4gbWFzayk7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0KKy0gICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCB8IG1hc2spOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQsIHNyY3ZhbCAmIH5tYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA3OgorKyAgICAgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0LCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKyAgICAgICAgICAgICB1MzIgKnNyY3JlZzsKKy0JICAgIHUzMiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTMyIG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4MUY7CistCSAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCpzcmNyZWcgJiBtYXNrLEZfQ0YpOworLQkgICAgc3dpdGNoIChyaCkgeworLQkgICAgY2FzZSA1OgorLQkJKnNyY3JlZyB8PSBtYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDY6CistCQkqc3JjcmVnICY9IH5tYXNrOworLQkJYnJlYWs7CistCSAgICBjYXNlIDc6CistCQkqc3JjcmVnIF49IG1hc2s7CistCQlicmVhazsKKy0JICAgIGRlZmF1bHQ6CistCQlicmVhazsKKy0JICAgIH0KKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3dpdGNoIChyaCkgeworKyAgICAgICAgICAgIGNhc2UgNToKKysgICAgICAgICAgICAgICAgKnNyY3JlZyB8PSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDY6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgJj0gfm1hc2s7CisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIGNhc2UgNzoKKysgICAgICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKnNyY3JlZzsKKy0JICAgIHUxNiBtYXNrOworLQkgICAgdTggc2hpZnQ7CisrICAgICAgICAgICAgdTE2IG1hc2s7CisrICAgICAgICAgICAgdTggc2hpZnQ7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzaGlmdCA9IGZldGNoX2J5dGVfaW1tKCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSBzaGlmdCAmIDB4RjsKKy0JICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssRl9DRik7CistCSAgICBzd2l0Y2ggKHJoKSB7CistCSAgICBjYXNlIDU6CistCQkqc3JjcmVnIHw9IG1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNjoKKy0JCSpzcmNyZWcgJj0gfm1hc2s7CistCQlicmVhazsKKy0JICAgIGNhc2UgNzoKKy0JCSpzcmNyZWcgXj0gbWFzazsKKy0JCWJyZWFrOworLQkgICAgZGVmYXVsdDoKKy0JCWJyZWFrOworLQkgICAgfQorKyAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN3aXRjaCAocmgpIHsKKysgICAgICAgICAgICBjYXNlIDU6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgfD0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgY2FzZSA2OgorKyAgICAgICAgICAgICAgICAqc3JjcmVnICY9IH5tYXNrOworKyAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBjYXNlIDc6CisrICAgICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CisgICAgIH0KK0BAIC0yMDg2LDExICsyMTA4LDEyIEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idFhfSSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKKy0gICAgaW50IGJpdCxkaXNwOworKyAgICBpbnQgYml0LCBkaXNwOworIAorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCVENcdCIpOworQEAgLTIwOTgsNyArMjEyMSw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLSAgICAgICAgICAgIHUzMiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUzMiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CitAQCAtMjEwNiwxMyArMjEyOSwxNCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHgxRjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNTsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3ApOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDU7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3ApOworICAgICAgICAgICAgIG1hc2sgPSAoMHgxIDw8IGJpdCk7CistICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0gICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0K2Rpc3AsIHNyY3ZhbCBeIG1hc2spOworLSAgICAgICAgfSBlbHNlIHsKKy0gICAgICAgICAgICB1MTYgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCArIGRpc3AsIHNyY3ZhbCBeIG1hc2spOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MTYgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworQEAgLTIxMjAsMTYgKzIxNDQsMTYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4RjsKKy0gICAgICAgICAgICBkaXNwID0gKHMxNikqc2hpZnRyZWcgPj4gNDsKKy0gICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3ApOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLQkJCXN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCwgKHUxNikoc3JjdmFsIF4gbWFzaykpOworKyAgICAgICAgICAgIGRpc3AgPSAoczE2KSAqIHNoaWZ0cmVnID4+IDQ7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3ApOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCArIGRpc3AsICh1MTYpIChzcmN2YWwgXiBtYXNrKSk7CisgICAgICAgICB9CisgICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistICAgICAgICAgICAgdTMyIHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTMyICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKK0BAIC0yMTM3LDEzICsyMTYxLDE0IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweDFGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA1OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCk7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLEZfQ0YpOworLSAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQrZGlzcCwgc3JjdmFsIF4gbWFzayk7CistICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICAgIHUxNiBzcmN2YWwsbWFzazsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX2xvbmcoc3Jjb2Zmc2V0ICsgZGlzcCwgc3JjdmFsIF4gbWFzayk7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCBtYXNrOworICAgICAgICAgICAgIHUxNiAqc2hpZnRyZWc7CisgCisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CitAQCAtMjE1MSwxNiArMjE3NiwxNiBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnRjX1IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLSAgICAgICAgICAgIGRpc3AgPSAoczE2KSpzaGlmdHJlZyA+PiA0OworLSAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQrZGlzcCk7CistCQkJbWFzayA9ICh1MTYpKDB4MSA8PCBiaXQpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistCQkJc3RvcmVfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwLCAodTE2KShzcmN2YWwgXiBtYXNrKSk7CisrICAgICAgICAgICAgZGlzcCA9IChzMTYpICogc2hpZnRyZWcgPj4gNDsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCk7CisrICAgICAgICAgICAgbWFzayA9ICh1MTYpICgweDEgPDwgYml0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgJiBtYXNrLCBGX0NGKTsKKysgICAgICAgICAgICBzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0ICsgZGlzcCwgKHUxNikgKHNyY3ZhbCBeIG1hc2spKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICBjYXNlIDI6CisgICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0gICAgICAgICAgICB1MzIgc3JjdmFsLG1hc2s7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgbWFzazsKKyAgICAgICAgICAgICB1MzIgKnNoaWZ0cmVnOworIAorICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworQEAgLTIxNjgsMTMgKzIxOTMsMTQgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBzaGlmdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDU7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA1OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwKTsKKyAgICAgICAgICAgICBtYXNrID0gKDB4MSA8PCBiaXQpOworLSAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssRl9DRik7CistICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nKHNyY29mZnNldCtkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKy0gICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgdTE2IHNyY3ZhbCxtYXNrOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZyhzcmNvZmZzZXQgKyBkaXNwLCBzcmN2YWwgXiBtYXNrKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsIG1hc2s7CisgICAgICAgICAgICAgdTE2ICpzaGlmdHJlZzsKKyAKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKK0BAIC0yMTgyLDE2ICsyMjA4LDE2IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgc2hpZnRyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICBiaXQgPSAqc2hpZnRyZWcgJiAweEY7CistICAgICAgICAgICAgZGlzcCA9IChzMTYpKnNoaWZ0cmVnID4+IDQ7CistICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCtkaXNwKTsKKy0JCQltYXNrID0gKHUxNikoMHgxIDw8IGJpdCk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsICYgbWFzayxGX0NGKTsKKy0JCQlzdG9yZV9kYXRhX3dvcmQoc3Jjb2Zmc2V0K2Rpc3AsICh1MTYpKHNyY3ZhbCBeIG1hc2spKTsKKysgICAgICAgICAgICBkaXNwID0gKHMxNikgKiBzaGlmdHJlZyA+PiA0OworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwKTsKKysgICAgICAgICAgICBtYXNrID0gKHUxNikgKDB4MSA8PCBiaXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCAmIG1hc2ssIEZfQ0YpOworKyAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZChzcmNvZmZzZXQgKyBkaXNwLCAodTE2KSAoc3JjdmFsIF4gbWFzaykpOworICAgICAgICAgfQorICAgICAgICAgYnJlYWs7CistICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworKyAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworICAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCQkJdTMyICpzcmNyZWcsKnNoaWZ0cmVnOworKyAgICAgICAgICAgIHUzMiAqc3JjcmVnLCAqc2hpZnRyZWc7CisgICAgICAgICAgICAgdTMyIG1hc2s7CisgCisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworQEAgLTIyMDAsMTkgKzIyMjYsMjAgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2J0Y19SKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgIGJpdCA9ICpzaGlmdHJlZyAmIDB4MUY7CisgICAgICAgICAgICAgbWFzayA9ICgweDEgPDwgYml0KTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKy0JCQkqc3JjcmVnIF49IG1hc2s7CistCQl9IGVsc2UgeworLQkJCXUxNiAqc3JjcmVnLCpzaGlmdHJlZzsKKy0JCQl1MTYgbWFzazsKKy0KKy0JCQlzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CistCQkJREVDT0RFX1BSSU5URigiLCIpOworLQkJCXNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkJCVRSQUNFX0FORF9TVEVQKCk7CistCQkJYml0ID0gKnNoaWZ0cmVnICYgMHhGOworLQkJCW1hc2sgPSAodTE2KSgweDEgPDwgYml0KTsKKy0gICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzayxGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygqc3JjcmVnICYgbWFzaywgRl9DRik7CisrICAgICAgICAgICAgKnNyY3JlZyBePSBtYXNrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2ICpzcmNyZWcsICpzaGlmdHJlZzsKKysgICAgICAgICAgICB1MTYgbWFzazsKKysKKysgICAgICAgICAgICBzcmNyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIHNoaWZ0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgYml0ID0gKnNoaWZ0cmVnICYgMHhGOworKyAgICAgICAgICAgIG1hc2sgPSAodTE2KSAoMHgxIDw8IGJpdCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKnNyY3JlZyAmIG1hc2ssIEZfQ0YpOworICAgICAgICAgICAgICpzcmNyZWcgXj0gbWFzazsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworQEAgLTIyMjUsNyArMjI1Miw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9idGNfUih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic2YodTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX2JzZih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTIyMzMsMTA1ICsyMjYxLDExNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNGXHQiKTsKKyAgICAgRkVUQ0hfREVDT0RFX01PRFJNKG1vZCwgcmgsIHJsKTsKKy0gICAgc3dpdGNoKG1vZCkgeworKyAgICBzd2l0Y2ggKG1vZCkgeworICAgICBjYXNlIDA6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDE2OyAoKmRzdHJlZykrKykKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAxOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIGNhc2UgMjoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMTY7ICgqZHN0cmVnKSsrKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKy0gICAgY2FzZSAzOgkJCQkvKiByZWdpc3RlciB0byByZWdpc3RlciAqLworLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMDsgKmRzdHJlZyA8IDMyOyAoKmRzdHJlZykrKykKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAzMjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAwOyAqZHN0cmVnIDwgMzI7ICgqZHN0cmVnKSsrKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDA7ICpkc3RyZWcgPCAxNjsgKCpkc3RyZWcpKyspCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworICAgICBFTkRfT0ZfSU5TVFIoKTsKK0BAIC0yMzQxLDcgKzIzODEsOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfYnNmKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyBSRU1BUktTOgorIEhhbmRsZXMgb3Bjb2RlIDB4MGYsMHhiZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzcih1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnNyKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB7CisgICAgIGludCBtb2QsIHJsLCByaDsKKyAgICAgdWludCBzcmNvZmZzZXQ7CitAQCAtMjM0OSwxMDUgKzIzOTAsMTE3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICBTVEFSVF9PRl9JTlNUUigpOworICAgICBERUNPREVfUFJJTlRGKCJCU1JcdCIpOworICAgICBGRVRDSF9ERUNPREVfTU9EUk0obW9kLCByaCwgcmwpOworLSAgICBzd2l0Y2gobW9kKSB7CisrICAgIHN3aXRjaCAobW9kKSB7CisgICAgIGNhc2UgMDoKKy0JaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CistCSAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV9sb25nKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9IGVsc2UgeworLQkgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfQorLQlicmVhazsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDBfYWRkcmVzcyhybCk7CisrICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworKyAgICAgICAgICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKysgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBmb3IgKCpkc3RyZWcgPSAxNTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorKyAgICAgICAgICAgICAgICBpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIDE6CistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIHNyY3ZhbCA9IGZldGNoX2RhdGFfbG9uZyhzcmNvZmZzZXQpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAxX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgY2FzZSAyOgorLQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0JICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKy0JICAgIGRzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKy0JICAgIFRSQUNFX0FORF9TVEVQKCk7CistCSAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0gZWxzZSB7CistCSAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworLQorLQkgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgc3JjdmFsID0gZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCk7CistCSAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CistCSAgICBmb3IoKmRzdHJlZyA9IDE1OyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCistCQlpZiAoKHNyY3ZhbCA+PiAqZHN0cmVnKSAmIDEpIGJyZWFrOworLQl9CistCWJyZWFrOworLSAgICBjYXNlIDM6CQkJCS8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCistCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkgICAgdTMyIHNyY3ZhbCwgKmRzdHJlZzsKKy0KKy0JICAgIHNyY3ZhbCA9ICpERUNPREVfUk1fTE9OR19SRUdJU1RFUihybCk7CistCSAgICBERUNPREVfUFJJTlRGKCIsIik7CistCSAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CistCSAgICBUUkFDRV9BTkRfU1RFUCgpOworLQkgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworLQkgICAgZm9yKCpkc3RyZWcgPSAzMTsgKmRzdHJlZyA+IDA7ICgqZHN0cmVnKS0tKQorLQkJaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKSBicmVhazsKKy0JfSBlbHNlIHsKKy0JICAgIHUxNiBzcmN2YWwsICpkc3RyZWc7CistCistCSAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworLQkgICAgREVDT0RFX1BSSU5URigiLCIpOworLQkgICAgZHN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworLQkgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0JICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHNyY3ZhbCA9PSAwLCBGX1pGKTsKKy0JICAgIGZvcigqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKy0JCWlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkgYnJlYWs7CistCX0KKy0JYnJlYWs7CisrICAgICAgICBpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKysgICAgICAgICAgICB1MzIgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX2xvbmcoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMzE7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICB1MTYgc3JjdmFsLCAqZHN0cmVnOworKworKyAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBzcmN2YWwgPSBmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIHUzMiBzcmN2YWwsICpkc3RyZWc7CisrCisrICAgICAgICAgICAgc3JjdmFsID0gKkRFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJsKTsKKysgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisrICAgICAgICAgICAgZHN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworKyAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoc3JjdmFsID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIGZvciAoKmRzdHJlZyA9IDMxOyAqZHN0cmVnID4gMDsgKCpkc3RyZWcpLS0pCisrICAgICAgICAgICAgICAgIGlmICgoc3JjdmFsID4+ICpkc3RyZWcpICYgMSkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgdTE2IHNyY3ZhbCwgKmRzdHJlZzsKKysKKysgICAgICAgICAgICBzcmN2YWwgPSAqREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworKyAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKysgICAgICAgICAgICBkc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisrICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzcmN2YWwgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgZm9yICgqZHN0cmVnID0gMTU7ICpkc3RyZWcgPiAwOyAoKmRzdHJlZyktLSkKKysgICAgICAgICAgICAgICAgaWYgKChzcmN2YWwgPj4gKmRzdHJlZykgJiAxKQorKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CisgICAgIEVORF9PRl9JTlNUUigpOworQEAgLTI0NTcsNyArMjUxMCw4IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3IodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIFJFTUFSS1M6CisgSGFuZGxlcyBvcGNvZGUgMHgwZiwweGJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKytzdGF0aWMgdm9pZAorK3g4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgaW50IG1vZCwgcmwsIHJoOworICAgICB1aW50IHNyY29mZnNldDsKK0BAIC0yNDc0LDE4ICsyNTI4LDE5IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMzMikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICB1MTYgKmRlc3RyZWc7CisgICAgICAgICAgICAgdTE2IHNyY3ZhbDsKKyAKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczE2KSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjQ5OSwxOCArMjU1NCwxOSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfYnl0ZV9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgICAgICBzcmN2YWwgPSAoczMyKSgoczgpZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworKyAgICAgICAgICAgIHNyY3ZhbCA9IChzMzIpICgoczgpIGZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworICAgICAgICAgICAgIHUxNiBzcmN2YWw7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMDFfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMxNikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczE2KSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworQEAgLTI1MjQsNDQgKzI1ODAsNDYgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3Jjb2Zmc2V0ID0gZGVjb2RlX3JtMTBfYWRkcmVzcyhybCk7CistICAgICAgICAgICAgc3JjdmFsID0gKHMzMikoKHM4KWZldGNoX2RhdGFfYnl0ZShzcmNvZmZzZXQpKTsKKysgICAgICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHM4KSBmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgICAgICpkZXN0cmVnID0gc3JjdmFsOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHUxNiAqZGVzdHJlZzsKKyAgICAgICAgICAgICB1MTYgc3JjdmFsOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fV09SRF9SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTEwX2FkZHJlc3MocmwpOworLSAgICAgICAgICAgIHNyY3ZhbCA9IChzMTYpKChzOClmZXRjaF9kYXRhX2J5dGUoc3Jjb2Zmc2V0KSk7CisrICAgICAgICAgICAgc3JjdmFsID0gKHMxNikgKChzOCkgZmV0Y2hfZGF0YV9ieXRlKHNyY29mZnNldCkpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKyAgICAgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworLSAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKysgICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgLyogcmVnaXN0ZXIgdG8gcmVnaXN0ZXIgKi8KKyAgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworICAgICAgICAgICAgIHUzMiAqZGVzdHJlZzsKKy0gICAgICAgICAgICB1OCAgKnNyY3JlZzsKKysgICAgICAgICAgICB1OCAqc3JjcmVnOworIAorICAgICAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgICAgIHNyY3JlZyA9IERFQ09ERV9STV9CWVRFX1JFR0lTVEVSKHJsKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCJcbiIpOworICAgICAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAgICAgKmRlc3RyZWcgPSAoczMyKSgoczgpKnNyY3JlZyk7CistICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICpkZXN0cmVnID0gKHMzMikgKChzOCkgKiBzcmNyZWcpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgdTE2ICpkZXN0cmVnOworLSAgICAgICAgICAgIHU4ICAqc3JjcmVnOworKyAgICAgICAgICAgIHU4ICpzcmNyZWc7CisgCisgICAgICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9XT1JEX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX0JZVEVfUkVHSVNURVIocmwpOworICAgICAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICAgICAgVFJBQ0VfQU5EX1NURVAoKTsKKy0gICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpKChzOCkqc3JjcmVnKTsKKysgICAgICAgICAgICAqZGVzdHJlZyA9IChzMTYpICgoczgpICogc3JjcmVnKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGJyZWFrOworICAgICB9CitAQCAtMjU3Myw3ICsyNjMxLDggQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX21vdnN4X2J5dGVfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgUkVNQVJLUzoKKyBIYW5kbGVzIG9wY29kZSAweDBmLDB4YmYKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorK3N0YXRpYyB2b2lkCisreDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisgeworICAgICBpbnQgbW9kLCBybCwgcmg7CisgICAgIHVpbnQgc3Jjb2Zmc2V0OworQEAgLTI1ODksNyArMjY0OCw3IEBAIHN0YXRpYyB2b2lkIHg4NmVtdU9wMl9tb3ZzeF93b3JkX1JfUk0odTggWDg2RU1VX1VOVVNFRChvcDIpKQorICAgICAgICAgZGVzdHJlZyA9IERFQ09ERV9STV9MT05HX1JFR0lTVEVSKHJoKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIiwiKTsKKyAgICAgICAgIHNyY29mZnNldCA9IGRlY29kZV9ybTAwX2FkZHJlc3MocmwpOworLSAgICAgICAgc3JjdmFsID0gKHMzMikoKHMxNilmZXRjaF9kYXRhX3dvcmQoc3Jjb2Zmc2V0KSk7CisrICAgICAgICBzcmN2YWwgPSAoczMyKSAoKHMxNikgZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CisgICAgICAgICAqZGVzdHJlZyA9IHNyY3ZhbDsKK0BAIC0yNTk4LDcgKzI2NTcsNyBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0wMV9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CitAQCAtMjYwNywxOCArMjY2NiwxOCBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAgICAgICAgIGRlc3RyZWcgPSBERUNPREVfUk1fTE9OR19SRUdJU1RFUihyaCk7CisgICAgICAgICBERUNPREVfUFJJTlRGKCIsIik7CisgICAgICAgICBzcmNvZmZzZXQgPSBkZWNvZGVfcm0xMF9hZGRyZXNzKHJsKTsKKy0gICAgICAgIHNyY3ZhbCA9IChzMzIpKChzMTYpZmV0Y2hfZGF0YV93b3JkKHNyY29mZnNldCkpOworKyAgICAgICAgc3JjdmFsID0gKHMzMikgKChzMTYpIGZldGNoX2RhdGFfd29yZChzcmNvZmZzZXQpKTsKKyAgICAgICAgIERFQ09ERV9QUklOVEYoIlxuIik7CisgICAgICAgICBUUkFDRV9BTkRfU1RFUCgpOworICAgICAgICAgKmRlc3RyZWcgPSBzcmN2YWw7CisgICAgICAgICBicmVhazsKKy0gICAgY2FzZSAzOiAgICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisrICAgIGNhc2UgMzogICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIHRvIHJlZ2lzdGVyICovCisgICAgICAgICBkZXN0cmVnID0gREVDT0RFX1JNX0xPTkdfUkVHSVNURVIocmgpOworICAgICAgICAgREVDT0RFX1BSSU5URigiLCIpOworICAgICAgICAgc3JjcmVnID0gREVDT0RFX1JNX1dPUkRfUkVHSVNURVIocmwpOworICAgICAgICAgREVDT0RFX1BSSU5URigiXG4iKTsKKyAgICAgICAgIFRSQUNFX0FORF9TVEVQKCk7CistICAgICAgICAqZGVzdHJlZyA9IChzMzIpKChzMTYpKnNyY3JlZyk7CisrICAgICAgICAqZGVzdHJlZyA9IChzMzIpICgoczE2KSAqIHNyY3JlZyk7CisgICAgICAgICBicmVhazsKKyAgICAgfQorICAgICBERUNPREVfQ0xFQVJfU0VHT1ZSKCk7CitAQCAtMjYyNiw0MCArMjY4NSw0MSBAQCBzdGF0aWMgdm9pZCB4ODZlbXVPcDJfbW92c3hfd29yZF9SX1JNKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyB9CisgCisgLyogSGFuZGxlcyBvcGNvZGVzIDB4YzgtMHhjZiAqLworLXN0YXRpYyB2b2lkIHg4NmVtdU9wMl9ic3dhcCh1OCBYODZFTVVfVU5VU0VEKG9wMikpCisrc3RhdGljIHZvaWQKKyt4ODZlbXVPcDJfYnN3YXAodTggWDg2RU1VX1VOVVNFRChvcDIpKQorIHsKKyAgICAgU1RBUlRfT0ZfSU5TVFIoKTsKKyAgICAgREVDT0RFX1BSSU5URigiQlNXQVBcbiIpOworICAgICBUUkFDRV9BTkRfU1RFUCgpOworIAorICAgICBzd2l0Y2ggKG9wMikgeworLQljYXNlIDB4Yzg6CistCSAgICBNLng4Ni5SX0VBWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUFYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Yzk6CistCSAgICBNLng4Ni5SX0VDWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUNYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2E6CistCSAgICBNLng4Ni5SX0VEWCA9IGJzd2FwXzMyKE0ueDg2LlJfRURYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2I6CistCSAgICBNLng4Ni5SX0VCWCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJYKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2M6CistCSAgICBNLng4Ni5SX0VTUCA9IGJzd2FwXzMyKE0ueDg2LlJfRVNQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Q6CistCSAgICBNLng4Ni5SX0VCUCA9IGJzd2FwXzMyKE0ueDg2LlJfRUJQKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2U6CistCSAgICBNLng4Ni5SX0VTSSA9IGJzd2FwXzMyKE0ueDg2LlJfRVNJKTsKKy0JICAgIGJyZWFrOworLQljYXNlIDB4Y2Y6CistCSAgICBNLng4Ni5SX0VESSA9IGJzd2FwXzMyKE0ueDg2LlJfRURJKTsKKy0JICAgIGJyZWFrOworLQlkZWZhdWx0OgorLQkgICAgLyogY2FuJ3QgaGFwcGVuICovCistCSAgICBicmVhazsKKysgICAgY2FzZSAweGM4OgorKyAgICAgICAgTS54ODYuUl9FQVggPSBic3dhcF8zMihNLng4Ni5SX0VBWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGM5OgorKyAgICAgICAgTS54ODYuUl9FQ1ggPSBic3dhcF8zMihNLng4Ni5SX0VDWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNhOgorKyAgICAgICAgTS54ODYuUl9FRFggPSBic3dhcF8zMihNLng4Ni5SX0VEWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNiOgorKyAgICAgICAgTS54ODYuUl9FQlggPSBic3dhcF8zMihNLng4Ni5SX0VCWCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNjOgorKyAgICAgICAgTS54ODYuUl9FU1AgPSBic3dhcF8zMihNLng4Ni5SX0VTUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNkOgorKyAgICAgICAgTS54ODYuUl9FQlAgPSBic3dhcF8zMihNLng4Ni5SX0VCUCk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNlOgorKyAgICAgICAgTS54ODYuUl9FU0kgPSBic3dhcF8zMihNLng4Ni5SX0VTSSk7CisrICAgICAgICBicmVhazsKKysgICAgY2FzZSAweGNmOgorKyAgICAgICAgTS54ODYuUl9FREkgPSBic3dhcF8zMihNLng4Ni5SX0VESSk7CisrICAgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICAgIC8qIGNhbid0IGhhcHBlbiAqLworKyAgICAgICAgYnJlYWs7CisgICAgIH0KKyAKKyAgICAgREVDT0RFX0NMRUFSX1NFR09WUigpOworQEAgLTI2NjksMjUgKzI3MjksMzIgQEAgc3RhdGljIHZvaWQgeDg2ZW11T3AyX2Jzd2FwKHU4IFg4NkVNVV9VTlVTRUQob3AyKSkKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICogRG91YmxlIGJ5dGUgb3BlcmF0aW9uIGNvZGUgdGFibGU6CisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisteworLS8qICAweDAwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogR3JvdXAgRiAocmluZyAwIFBNKSAgICAgICovCistLyogIDB4MDEgKi8geDg2ZW11T3AyX2dyb3VwX2csICAgICAvKiBHcm91cCBHIChyaW5nIDAgUE0pICAgICAgKi8KKy0vKiAgMHgwMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworLS8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbHNsIChyaW5nIDAgUE0pICAgICAgICAgICovCisrdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkgKHU4KSA9IHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEYgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdyb3VwIEcgKHJpbmcgMCBQTSkgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxhciAocmluZyAwIFBNKSAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDAzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxzbCAocmluZyAwIFBNKSAgICAgICAgICAqLworIC8qICAweDA0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLS8qICAweDA1ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbG9hZGFsbCAodW5kb2N1bWVudGVkKSAgICovCistLyogIDB4MDYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKy0vKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIGxvYWRhbGwgKHVuZG9jdW1lbnRlZCkgICAqLworLS8qICAweDA4ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogaW52ZCAocmluZyAwIFBNKSAgICAgICAgICovCistLyogIDB4MDkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjbHRzIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwNyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2FkYWxsICh1bmRvY3VtZW50ZWQpICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnZkIChyaW5nIDAgUE0pICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgwOSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3YmludmQgKHJpbmcgMCBQTSkgICAgICAgKi8KKyAvKiAgMHgwYSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwYyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgwZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgxMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgxMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzA0LDE0ICsyNzcxLDE5IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4MWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCistLyogIDB4MjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworLS8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLGRyZWcgKHJpbmcgMCBQTSkgKi8KKy0vKiAgMHgyMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIG1vdiBjcmVnLHJlZzMyIChyaW5nIDAgUE0pICovCistLyogIDB4MjMgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworLS8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogbW92IHJlZzMyLHRyZWcgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgcmVnMzIsY3JlZyAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMixkcmVnIChyaW5nIDAgUE0pICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4MjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92IGNyZWcscmVnMzIgKHJpbmcgMCBQTSkgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHgyMyAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb3YgZHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiByZWczMix0cmVnIChyaW5nIDAgUE0pICovCisgLyogIDB4MjUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistLyogIDB4MjYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsICAvKiBtb3YgdHJlZyxyZWczMiAocmluZyAwIFBNKSAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweDI2ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vdiB0cmVnLHJlZzMyIChyaW5nIDAgUE0pICovCisgLyogIDB4MjcgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjggKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4MjkgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjcyMSw3ICsyNzkzLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgyZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgyZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHgzMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzMSAqLyB4ODZlbXVPcDJfcmR0c2MsCisgLyogIDB4MzIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjczOCw3ICsyODA5LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHgzZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHgzZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg0MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg0MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yNzU1LDcgKzI4MjUsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDRkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDRmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDUwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDUyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI3NzIsNyArMjg0MSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4NWQgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWUgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NWYgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCistCisgLyogIDB4NjAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4NjIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjc4OSw3ICsyODU3LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg2ZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg2ZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHg3MCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHg3MiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yODA2LDcgKzI4NzMsNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweDdkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweDdmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweDgwICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCisgLyogIDB4ODEgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4MiAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorQEAgLTI4MjMsNyArMjg4OSw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4OGQgKi8geDg2ZW11T3AyX2xvbmdfanVtcCwKKyAvKiAgMHg4ZSAqLyB4ODZlbXVPcDJfbG9uZ19qdW1wLAorIC8qICAweDhmICovIHg4NmVtdU9wMl9sb25nX2p1bXAsCistCisgLyogIDB4OTAgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDkxICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKyAvKiAgMHg5MiAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCitAQCAtMjg0MCw3ICsyOTA1LDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHg5ZCAqLyB4ODZlbXVPcDJfc2V0X2J5dGUsCisgLyogIDB4OWUgKi8geDg2ZW11T3AyX3NldF9ieXRlLAorIC8qICAweDlmICovIHg4NmVtdU9wMl9zZXRfYnl0ZSwKKy0KKyAvKiAgMHhhMCAqLyB4ODZlbXVPcDJfcHVzaF9GUywKKyAvKiAgMHhhMSAqLyB4ODZlbXVPcDJfcG9wX0ZTLAorIC8qICAweGEyICovIHg4NmVtdU9wMl9jcHVpZCwKK0BAIC0yODU3LDkgKzI5MjEsMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhhZCAqLyB4ODZlbXVPcDJfc2hyZF9DTCwKKyAvKiAgMHhhZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhhZiAqLyB4ODZlbXVPcDJfaW11bF9SX1JNLAorLQorLS8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworLS8qICAweGIxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLCAgLyogVE9ETzogY21weGNoZyAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAweGIwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRPRE86IGNtcHhjaGcgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhiMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBjbXB4Y2hnICovCisgLyogIDB4YjIgKi8geDg2ZW11T3AyX2xzc19SX0lNTSwKKyAvKiAgMHhiMyAqLyB4ODZlbXVPcDJfYnRyX1IsCisgLyogIDB4YjQgKi8geDg2ZW11T3AyX2xmc19SX0lNTSwKK0BAIC0yODc0LDkgKzI5MzksMTAgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhiZCAqLyB4ODZlbXVPcDJfYnNyLAorIC8qICAweGJlICovIHg4NmVtdU9wMl9tb3ZzeF9ieXRlX1JfUk0sCisgLyogIDB4YmYgKi8geDg2ZW11T3AyX21vdnN4X3dvcmRfUl9STSwKKy0KKy0vKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKy0vKiAgMHhjMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwgIC8qIFRPRE86IHhhZGQgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMHhjMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiB4YWRkICovCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDB4YzEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVE9ETzogeGFkZCAqLworIC8qICAweGMyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGMzICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGM0ICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorQEAgLTI4OTEsNyArMjk1Nyw2IEBAIHZvaWQgKCp4ODZlbXVfb3B0YWIyWzI1Nl0pKHU4KSA9CisgLyogIDB4Y2QgKi8geDg2ZW11T3AyX2Jzd2FwLAorIC8qICAweGNlICovIHg4NmVtdU9wMl9ic3dhcCwKKyAvKiAgMHhjZiAqLyB4ODZlbXVPcDJfYnN3YXAsCistCisgLyogIDB4ZDAgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDEgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCisgLyogIDB4ZDIgKi8geDg2ZW11T3AyX2lsbGVnYWxfb3AsCitAQCAtMjkwOCw3ICsyOTczLDYgQEAgdm9pZCAoKng4NmVtdV9vcHRhYjJbMjU2XSkodTgpID0KKyAvKiAgMHhkZCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhkZiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKy0KKyAvKiAgMHhlMCAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMSAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKKyAvKiAgMHhlMiAqLyB4ODZlbXVPcDJfaWxsZWdhbF9vcCwKK0BAIC0yOTI1LDcgKzI5ODksNiBAQCB2b2lkICgqeDg2ZW11X29wdGFiMlsyNTZdKSh1OCkgPQorIC8qICAweGVkICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVlICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGVmICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorLQorIC8qICAweGYwICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYxICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorIC8qICAweGYyICovIHg4NmVtdU9wMl9pbGxlZ2FsX29wLAorZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3ByaW1fb3BzLmMgYi9saWJzL3g4NmVtdS9wcmltX29wcy5jCitpbmRleCBmZjE3YzNmLi4yNGY3NmI0IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUvcHJpbV9vcHMuYworKysrIGIvbGlicy94ODZlbXUvcHJpbV9vcHMuYworQEAgLTEwMiwxOCArMTAyLDIzIEBACisgI2RlZmluZQlQUklNX09QU19OT19SRURFRklORV9BU00KKyAjaW5jbHVkZSAieDg2ZW11L3g4NmVtdWkuaCIKKyAKKysjaWYgZGVmaW5lZChfX0dOVUNfXykKKysjaWYgZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pCisrI2luY2x1ZGUgIng4NmVtdS9wcmltX3g4Nl9nY2MuaCIKKysjZW5kaWYKKysjZW5kaWYKKysKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorLXsKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKy0JMHg5NjY5Njk5NiwKKy0JMHg5NjY5Njk5NiwKKy0JMHg2OTk2OTY2OSwKKytzdGF0aWMgdTMyIHg4NmVtdV9wYXJpdHlfdGFiWzhdID0geworKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDk2Njk2OTk2LAorKyAgICAweDY5OTY5NjY5LAorIH07CisgCisgI2RlZmluZSBQQVJJVFkoeCkgICAoKCh4ODZlbXVfcGFyaXR5X3RhYlsoeCkgLyAzMl0gPj4gKCh4KSAlIDMyKSkgJiAxKSA9PSAwKQorQEAgLTEyNSw4OCArMTMwLDk2IEBAIHN0YXRpYyB1MzIgeDg2ZW11X3Bhcml0eV90YWJbOF0gPQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFhX3dvcmQodTE2IGQpCisrdTE2CisrYWFhX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkICs9IDB4NjsKKy0JCWQgKz0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCArPSAweDY7CisrICAgICAgICBkICs9IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFBIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFzX3dvcmQodTE2IGQpCisrdTE2CisrYWFzX3dvcmQodTE2IGQpCisgeworLQl1MTYJcmVzOworLQlpZiAoKGQgJiAweGYpID4gMHg5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CistCQlkIC09IDB4NjsKKy0JCWQgLT0gMHgxMDA7CistCQlTRVRfRkxBRyhGX0FGKTsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQl9IGVsc2UgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9BRik7CistCX0KKy0JcmVzID0gKHUxNikoZCAmIDB4RkYwRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgdTE2IHJlczsKKysKKysgICAgaWYgKChkICYgMHhmKSA+IDB4OSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgZCAtPSAweDY7CisrICAgICAgICBkIC09IDB4MTAwOworKyAgICAgICAgU0VUX0ZMQUcoRl9BRik7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICB9CisrICAgIHJlcyA9ICh1MTYpIChkICYgMHhGRjBGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUFEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWFkX3dvcmQodTE2IGQpCisrdTE2CisrYWFkX3dvcmQodTE2IGQpCisgeworLQl1MTYgbDsKKy0JdTggaGIsIGxiOworKyAgICB1MTYgbDsKKysgICAgdTggaGIsIGxiOworIAorLQloYiA9ICh1OCkoKGQgPj4gOCkgJiAweGZmKTsKKy0JbGIgPSAodTgpKChkICYgMHhmZikpOworLQlsID0gKHUxNikoKGxiICsgMTAgKiBoYikgJiAweEZGKTsKKysgICAgaGIgPSAodTgpICgoZCA+PiA4KSAmIDB4ZmYpOworKyAgICBsYiA9ICh1OCkgKChkICYgMHhmZikpOworKyAgICBsID0gKHUxNikgKChsYiArIDEwICogaGIpICYgMHhGRik7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CistCXJldHVybiBsOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhsICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShsICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFBTSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGFhbV93b3JkKHU4IGQpCisrdTE2CisrYWFtX3dvcmQodTggZCkKKyB7CisgICAgIHUxNiBoLCBsOworIAorLQloID0gKHUxNikoZCAvIDEwKTsKKy0JbCA9ICh1MTYpKGQgJSAxMCk7CistCWwgfD0gKHUxNikoaCA8PCA4KTsKKysgICAgaCA9ICh1MTYpIChkIC8gMTApOworKyAgICBsID0gKHUxNikgKGQgJSAxMCk7CisrICAgIGwgfD0gKHUxNikgKGggPDwgOCk7CisgCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGwgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcobCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGwgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiBsOworIH0KKyAKK0BAIC0yMTQsMTU1ICsyMjcsMTYxIEBAIHUxNiBhYW1fd29yZCh1OCBkKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQURDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBhZGNfYnl0ZSh1OCBkLCB1OCBzKQorK3U4CisrYWRjX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKy0JCXJlcyA9IDEgKyBkICsgczsKKy0JZWxzZQorLQkJcmVzID0gZCArIHM7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgICAgIHJlcyA9IDEgKyBkICsgczsKKysgICAgZWxzZQorKyAgICAgICAgcmVzID0gZCArIHM7CisgCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCistCWNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKysgICAgY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhZGNfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYWRjX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorLQkJcmVzID0gMSArIGQgKyBzOworLQllbHNlCistCQlyZXMgPSBkICsgczsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorKyAgICAgICAgcmVzID0gMSArIGQgKyBzOworKyAgICBlbHNlCisrICAgICAgICByZXMgPSBkICsgczsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGNfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRjX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJbG8gPSAxICsgKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gMSArIGQgKyBzOworLQkJfQorLQllbHNlIHsKKy0JCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQkJcmVzID0gZCArIHM7CistCQl9CistCWhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7CisrICAgICAgICBsbyA9IDEgKyAoZCAmIDB4RkZGRikgKyAocyAmIDB4RkZGRik7CisrICAgICAgICByZXMgPSAxICsgZCArIHM7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgICAgIHJlcyA9IGQgKyBzOworKyAgICB9CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKythZGRfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MTAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQUREIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2FkZF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJlcyA9IGQgKyBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAocyAmIGQpIHwgKCh+cmVzKSAmIChzIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKHMgJiBkKSB8ICgofnJlcykgJiAocyB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBREQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBhZGRfbG9uZyh1MzIgZCwgdTMyIHMpCisrdTMyCisrYWRkX2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIGxvOwkvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGhpOworLQlyZWdpc3RlciB1MzIgcmVzOworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiBsbzsgICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGhpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCWxvID0gKGQgJiAweEZGRkYpICsgKHMgJiAweEZGRkYpOworLQlyZXMgPSBkICsgczsKKy0JaGkgPSAobG8gPj4gMTYpICsgKGQgPj4gMTYpICsgKHMgPj4gMTYpOworKyAgICBsbyA9IChkICYgMHhGRkZGKSArIChzICYgMHhGRkZGKTsKKysgICAgcmVzID0gZCArIHM7CisrICAgIGhpID0gKGxvID4+IDE2KSArIChkID4+IDE2KSArIChzID4+IDE2KTsKKyAKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoaGkgJiAweDEwMDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKyAgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworICAgICBjYyA9IChzICYgZCkgfCAoKH5yZXMpICYgKHMgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKyAKKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMzcxLDM5ICszOTAsNDEgQEAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggYW5kX2J5dGUodTggZCwgdTggcykKKyt1OAorK2FuZF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBzZXQgdGhlIGZsYWdzICAqLworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBBTkQgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBhbmRfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisrYW5kX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorICAgICByZXMgPSBkICYgczsKKyAKKyAgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgICAgIHJldHVybiByZXM7CisgfQorIAorQEAgLTQxMSw0MzMgKzQzMiw0NTYgQEAgdTE2IGFuZF93b3JkKHUxNiBkLCB1MTYgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIEFORCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKythbmRfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgJiBzOworKyAgICByZXMgPSBkICYgczsKKyAKKy0JLyogc2V0IHRoZSBmbGFncyAgKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBmbGFncyAgKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIENNUCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggY21wX2J5dGUodTggZCwgdTggcykKKyt1OAorK2NtcF9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK2NtcF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIGQ7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgQ01QIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgY21wX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK2NtcF9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gZDsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERBQSBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggZGFhX2J5dGUodTggZCkKKyt1OAorK2RhYV9ieXRlKHU4IGQpCisgeworLQl1MzIgcmVzID0gZDsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCXJlcyArPSA2OworLQkJU0VUX0ZMQUcoRl9BRik7CistCX0KKy0JaWYgKHJlcyA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCXJlcyArPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweEZGKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIHUzMiByZXMgPSBkOworKworKyAgICBpZiAoKGQgJiAweGYpID4gOSB8fCBBQ0NFU1NfRkxBRyhGX0FGKSkgeworKyAgICAgICAgcmVzICs9IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAocmVzID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworKyAgICAgICAgcmVzICs9IDB4NjA7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgfQorKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4RkYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBEQVMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IGRhc19ieXRlKHU4IGQpCisrdTgKKytkYXNfYnl0ZSh1OCBkKQorIHsKKy0JaWYgKChkICYgMHhmKSA+IDkgfHwgQUNDRVNTX0ZMQUcoRl9BRikpIHsKKy0JCWQgLT0gNjsKKy0JCVNFVF9GTEFHKEZfQUYpOworLQl9CistCWlmIChkID4gMHg5RiB8fCBBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJZCAtPSAweDYwOworLQkJU0VUX0ZMQUcoRl9DRik7CistCX0KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCAmIDB4ODAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhkID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkoZCAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIGQ7CisrICAgIGlmICgoZCAmIDB4ZikgPiA5IHx8IEFDQ0VTU19GTEFHKEZfQUYpKSB7CisrICAgICAgICBkIC09IDY7CisrICAgICAgICBTRVRfRkxBRyhGX0FGKTsKKysgICAgfQorKyAgICBpZiAoZCA+IDB4OUYgfHwgQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgIGQgLT0gMHg2MDsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICB9CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGQgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZCA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKGQgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiBkOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgREVDIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBkZWNfYnl0ZSh1OCBkKQorK3U4CisrZGVjX2J5dGUodTggZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCistCWJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworLQkvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgLyogYmFzZWQgb24gc3ViX2J5dGUsIHVzZXMgcz09MS4gICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBERUMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBkZWNfd29yZCh1MTYgZCkKKyt1MTYKKytkZWNfd29yZCh1MTYgZCkKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworICAgICAvKiBiYXNlZCBvbiB0aGUgc3ViX2J5dGUgcm91dGluZSwgd2l0aCBzPT0xICovCisgICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworICAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERFQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIGRlY19sb25nKHUzMiBkKQorK3UzMgorK2RlY19sb25nKHUzMiBkKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCisgICAgIHJlcyA9IGQgLSAxOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorICAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCAxKSkgfCAofmQgJiAxKTsKKy0JLyogY2FycnkgZmxhZyB1bmNoYW5nZWQgKi8KKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAzMCksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiByZXM7CisrICAgIGJjID0gKHJlcyAmICh+ZCB8IDEpKSB8ICh+ZCAmIDEpOworKyAgICAvKiBjYXJyeSBmbGFnIHVuY2hhbmdlZCAqLworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggaW5jX2J5dGUodTggZCkKKyt1OAorK2luY19ieXRlKHU4IGQpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgY2M7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGNjOworIAorLQlyZXMgPSBkICsgMTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCArIDE7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoKDEgJiBkKSB8ICh+cmVzKSkgJiAoMSB8IGQpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDYpLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gKHU4KXJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworKyAgICBjYyA9ICgoMSAmIGQpIHwgKH5yZXMpKSAmICgxIHwgZCk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gNiksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOQyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IGluY193b3JkKHUxNiBkKQorK3UxNgorK2luY193b3JkKHUxNiBkKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKy0JcmVnaXN0ZXIgdTMyIGNjOworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiBjYzsKKyAKKy0JcmVzID0gZCArIDE7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgY2FycnkgY2hhaW4gIFNFRSBOT1RFIEFUIFRPUC4gKi8KKy0JY2MgPSAoMSAmIGQpIHwgKCh+cmVzKSAmICgxIHwgZCkpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGNjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJTkMgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBpbmNfbG9uZyh1MzIgZCkKKyt1MzIKKytpbmNfbG9uZyh1MzIgZCkKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBjYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgY2M7CisgCistCXJlcyA9IGQgKyAxOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkICsgMTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBjYXJyeSBjaGFpbiAgU0VFIE5PVEUgQVQgVE9QLiAqLworLQljYyA9ICgxICYgZCkgfCAoKH5yZXMpICYgKDEgfCBkKSk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoY2MgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2MgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGNhcnJ5IGNoYWluICBTRUUgTk9URSBBVCBUT1AuICovCisrICAgIGNjID0gKDEgJiBkKSB8ICgofnJlcykgJiAoMSB8IGQpKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihjYyA+PiAzMCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggb3JfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrb3JfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKy0JcmVnaXN0ZXIgdTggcmVzOyAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTggcmVzOyAgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIHwgczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIHwgczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBvcl93b3JkKHUxNiBkLCB1MTYgcykKKyt1MTYKKytvcl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUxNiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUxNiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CistCS8qIHNldCB0aGUgY2FycnkgZmxhZyB0byBiZSBiaXQgOCAqLworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgfCBzOworKyAgICAvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBvcl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCB8IHM7CisrICAgIHJlcyA9IGQgfCBzOworIAorLQkvKiBzZXQgdGhlIGNhcnJ5IGZsYWcgdG8gYmUgYml0IDggKi8KKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKy0JQ0xFQVJfRkxBRyhGX0FGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogc2V0IHRoZSBjYXJyeSBmbGFnIHRvIGJlIGJpdCA4ICovCisrICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggbmVnX2J5dGUodTggcykKKyt1OAorK25lZ19ieXRlKHU4IHMpCisgeworICAgICByZWdpc3RlciB1OCByZXM7CisgICAgIHJlZ2lzdGVyIHU4IGJjOworIAorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTgpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCistCSAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKy0JICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCistCSAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorLQkgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCistCWJjID0gcmVzIHwgczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHU4KSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMpLCBGX1BGKTsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbmVnX3dvcmQodTE2IHMpCisteworLQlyZWdpc3RlciB1MTYgcmVzOworLQlyZWdpc3RlciB1MTYgYmM7CistCistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgIT0gMCwgRl9DRik7CistCXJlcyA9ICh1MTYpLXM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbiAtLS0gbW9kaWZpZWQgc3VjaCB0aGF0IGQ9MC4KKy0JICAgc3Vic3RpdHV0aWluZyBkPTAgaW50byAgICAgYmM9IHJlcyYofmR8cyl8KH5kJnMpOworLQkgICAodGhlIG9uZSB1c2VkIGZvciBzdWIpIGFuZCBzaW1wbGlmeWluZywgc2luY2UgfmQ9MHhmZi4uLiwKKy0JICAgfmR8cyA9PSAweGZmZmYuLi4sIGFuZCByZXMmMHhmZmYuLi4gPT0gcmVzLiAgU2ltaWxhcmx5CistCSAgIH5kJnMgPT0gcy4gIFNvIHRoZSBzaW1wbGlmaWVkIHJlc3VsdCBpczogKi8KKy0JYmMgPSByZXMgfCBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKyt1MTYKKytuZWdfd29yZCh1MTYgcykKKyt7CisrICAgIHJlZ2lzdGVyIHUxNiByZXM7CisrICAgIHJlZ2lzdGVyIHUxNiBiYzsKKysKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocyAhPSAwLCBGX0NGKTsKKysgICAgcmVzID0gKHUxNikgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4gLS0tIG1vZGlmaWVkIHN1Y2ggdGhhdCBkPTAuCisrICAgICAgIHN1YnN0aXR1dGlpbmcgZD0wIGludG8gICAgIGJjPSByZXMmKH5kfHMpfCh+ZCZzKTsKKysgICAgICAgKHRoZSBvbmUgdXNlZCBmb3Igc3ViKSBhbmQgc2ltcGxpZnlpbmcsIHNpbmNlIH5kPTB4ZmYuLi4sCisrICAgICAgIH5kfHMgPT0gMHhmZmZmLi4uLCBhbmQgcmVzJjB4ZmZmLi4uID09IHJlcy4gIFNpbWlsYXJseQorKyAgICAgICB+ZCZzID09IHMuICBTbyB0aGUgc2ltcGxpZmllZCByZXN1bHQgaXM6ICovCisrICAgIGJjID0gcmVzIHwgczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiAxNCksIEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5lZ19sb25nKHUzMiBzKQorK3UzMgorK25lZ19sb25nKHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsKKy0JcmVnaXN0ZXIgdTMyIGJjOworLQorLQlDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworLQlyZXMgPSAodTMyKS1zOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZWdpc3RlciB1MzIgcmVzOworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorLQkgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CistCSAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorLQkgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKy0JICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworLQliYyA9IHJlcyB8IHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzICE9IDAsIEZfQ0YpOworKyAgICByZXMgPSAodTMyKSAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrCisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluIC0tLSBtb2RpZmllZCBzdWNoIHRoYXQgZD0wLgorKyAgICAgICBzdWJzdGl0dXRpaW5nIGQ9MCBpbnRvICAgICBiYz0gcmVzJih+ZHxzKXwofmQmcyk7CisrICAgICAgICh0aGUgb25lIHVzZWQgZm9yIHN1YikgYW5kIHNpbXBsaWZ5aW5nLCBzaW5jZSB+ZD0weGZmLi4uLAorKyAgICAgICB+ZHxzID09IDB4ZmZmZi4uLiwgYW5kIHJlcyYweGZmZi4uLiA9PSByZXMuICBTaW1pbGFybHkKKysgICAgICAgfmQmcyA9PSBzLiAgU28gdGhlIHNpbXBsaWZpZWQgcmVzdWx0IGlzOiAqLworKyAgICBiYyA9IHJlcyB8IHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBub3RfYnl0ZSh1OCBzKQorK3U4Cisrbm90X2J5dGUodTggcykKKyB7CistCXJldHVybiB+czsKKysgICAgcmV0dXJuIH5zOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTk9UIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbm90X3dvcmQodTE2IHMpCisrdTE2Cisrbm90X3dvcmQodTE2IHMpCisgeworLQlyZXR1cm4gfnM7CisrICAgIHJldHVybiB+czsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIE5PVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIG5vdF9sb25nKHUzMiBzKQorK3UzMgorK25vdF9sb25nKHUzMiBzKQorIHsKKy0JcmV0dXJuIH5zOworKyAgICByZXR1cm4gfnM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisrdTgKKytyY2xfYnl0ZSh1OCBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJlcywgY250LCBtYXNrLCBjZjsKKyAKKyAgICAgLyogcyBpcyB0aGUgcm90YXRlIGRpc3RhbmNlLiAgSXQgdmFyaWVzIGZyb20gMCAtIDguICovCistCS8qIGhhdmUKKysgICAgLyogaGF2ZQorIAorICAgICAgICBDRiAgQl83IEJfNiBCXzUgQl80IEJfMyBCXzIgQl8xIEJfMCAKKyAKK0BAIC04NjEsOSArOTA1LDkgQEAgdTggcmNsX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXzAKKyAgICAgICAgMykgQl8obi0xKSA8LSBjZgorICAgICAgICA0KSBCXyhuLTIpIC4uIEJfMCA8LSAgYl83IC4uIGJfKDgtKG4tMSkpCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyg4LW4pICAgICAgICAgICAgICovCisgICAgICAgICBjZiA9IChkID4+ICg4IC0gY250KSkgJiAweDE7CitAQCAtODcyLDcgKzkxNiw3IEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICBpbnRvIHRoZSByYW5nZSBCXzcgLi4gQl9jbnQgKi8KKyAgICAgICAgIC8qIEJfKDcpIC4uIEJfKG4pICA8LSAgYl8oOC0obisxKSkgLi4gYl8wICAqLworICAgICAgICAgLyogbm90ZSB0aGF0IHRoZSByaWdodCBoYW5kIHNpZGUgZG9uZSBieSB0aGUgbWFzayAqLworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmY7CisrICAgICAgICByZXMgPSAoZCA8PCBjbnQpICYgMHhmZjsKKyAKKyAgICAgICAgIC8qIG5vdyB0aGUgaGlnaCBzdHVmZiB3aGljaCByb3RhdGVkIGFyb3VuZCAKKyAgICAgICAgICAgIGludG8gdGhlIHBvc2l0aW9ucyBCX2NudC0yIC4uIEJfMCAqLworQEAgLTg4NCw4MSArOTI4LDgxIEBAIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICByZXMgfD0gKGQgPj4gKDkgLSBjbnQpKSAmIG1hc2s7CisgCisgICAgICAgICAvKiBpZiB0aGUgY2FycnkgZmxhZyB3YXMgc2V0LCBvciBpdCBpbi4gICovCistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsgICAgICAgIC8qIGNhcnJ5IGZsYWcgaXMgc2V0ICovCisgICAgICAgICAgICAgLyogIEJfKG4tMSkgPC0gY2YgKi8KKyAgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisgICAgICAgICB9CisgICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBiYXNlZCBvbiB0aGUgdmFyaWFibGUgImNmIiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIGNudD09MSwgdGhlbiBpdCBpcyB0aGUgCisgICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKyAgICAgICAgIC8qIHBhcmVudGhlc2l6ZWQgdGhpcyBleHByZXNzaW9uIHNpbmNlIGl0IGFwcGVhcnMgdG8KKyAgICAgICAgICAgIGJlIGNhdXNpbmcgT0YgdG8gYmUgbWlzc2V0ICovCistICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gNikgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY250ID09IDEgJiYgWE9SMihjZiArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworIAorICAgICB9CistCXJldHVybiAodTgpcmVzOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByY2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyY2xfd29yZCh1MTYgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQljZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKy0JCW1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CistCQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKy0JCQlyZXMgfD0gMSA8PCAoY250IC0gMSk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgxNiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZjsKKysgICAgICAgIG1hc2sgPSAoMSA8PCAoY250IC0gMSkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoMTcgLSBjbnQpKSAmIG1hc2s7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoY250IC0gMSk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjbnQgPT0gMSAmJiBYT1IyKGNmICsgKChyZXMgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY2xfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyY2xfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisrICAgIHJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzaywgY2Y7CisgCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CistCQljZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworLQkJcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CistCQltYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKy0JCX0KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJIEZfT0YpOworLQl9CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBjZiA9IChkID4+ICgzMiAtIGNudCkpICYgMHgxOworKyAgICAgICAgcmVzID0gKGQgPDwgY250KSAmIDB4ZmZmZmZmZmY7CisrICAgICAgICBtYXNrID0gKDEgPDwgKGNudCAtIDEpKSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMzIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8IChjbnQgLSAxKTsKKysgICAgICAgIH0KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNudCA9PSAxICYmIFhPUjIoY2YgKyAoKHJlcyA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJDUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcmNyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jjcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1MzIJcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisgICAgIC8qIAorICAgICAgICBzIGlzIHRoZSByb3RhdGUgZGlzdGFuY2UuICBJdCB2YXJpZXMgZnJvbSAwIC0gOC4KKyAgICAgICAgZCBpcyB0aGUgYnl0ZSBvYmplY3Qgcm90YXRlZC4gIAorQEAgLTk3OSw5ICsxMDIzLDkgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgMikgQl8oOC0obisxKSkgLi4gQl8oMCkgIDwtICBiXyg3KSAuLiBiXyhuKQorICAgICAgICAzKSBCXyg4LW4pIDwtIGNmCisgICAgICAgIDQpIEJfKDcpIC4uIEJfKDgtKG4tMSkpIDwtICBiXyhuLTIpIC4uIGJfKDApCistCSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisrICAgICAqLworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSA5KSAhPSAwKSB7CisgICAgICAgICAvKiBleHRyYWN0IHRoZSBuZXcgQ0FSUlkgRkxBRy4gKi8KKyAgICAgICAgIC8qIENGIDwtICBiXyhuLTEpICAgICAgICAgICAgICAqLworICAgICAgICAgaWYgKGNudCA9PSAxKSB7CitAQCAtOTkwLDExICsxMDM0LDEyIEBAIHU4IHJjcl9ieXRlKHU4IGQsIHU4IHMpCisgICAgICAgICAgICAgICAgMCBpZiBmbGFnIG5vdCBzZXQKKyAgICAgICAgICAgICAgICBub24temVybyBpZiBmbGFnIGlzIHNldC4KKyAgICAgICAgICAgICAgICBkb2luZyBhY2Nlc3NfZmxhZyguLikgIT0gMCBjYXN0cyB0aGF0IGludG8gZWl0aGVyIAorLQkJCSAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorKyAgICAgICAgICAgICAgIDAuLjEgaW4gYW55IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmbGFncyByZWdpc3RlcgorICAgICAgICAgICAgICAgIChpLmUuIHBhY2tlZCBiaXQgYXJyYXkgb3IgdW5wYWNrZWQuKQorICAgICAgICAgICAgICAqLworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistICAgICAgICB9IGVsc2UKKysgICAgICAgICAgICBvY2YgPSBBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIGNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKyAKKyAgICAgICAgIC8qIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl9uICAqLworQEAgLTEwMTYsOTMgKzEwNjEsOTUgQEAgdTggcmNyX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgIHJlcyB8PSAoZCA8PCAoOSAtIGNudCkpOworIAorICAgICAgICAgLyogaWYgdGhlIGNhcnJ5IGZsYWcgd2FzIHNldCwgb3IgaXQgaW4uICAqLworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworICAgICAgICAgICAgIC8qICBCXyg4LW4pIDwtIGNmICovCisgICAgICAgICAgICAgcmVzIHw9IDEgPDwgKDggLSBjbnQpOworICAgICAgICAgfQorICAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgYmFzZWQgb24gdGhlIHZhcmlhYmxlICJjZiIgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKyAgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBjbnQ9PTEsIHRoZW4gaXQgaXMgdGhlIAorICAgICAgICAgICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCisgICAgICAgICAvKiBwYXJlbnRoZXNpemVkLi4uICovCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkJIEZfT0YpOworLQkJfQorLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gNikgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgUkNSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgcmNyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2CisrcmNyX3dvcmQodTE2IGQsIHU4IHMpCisgeworLQl1MzIgcmVzLCBjbnQ7CistCXUzMgltYXNrLCBjZiwgb2NmID0gMDsKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisgCistCS8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCistCXJlcyA9IGQ7CistCWlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQljZiA9IGQgJiAweDE7CistCQkJb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKy0JCX0gZWxzZQorLQkJCWNmID0gKGQgPj4gKGNudCAtIDEpKSAmIDB4MTsKKy0JCW1hc2sgPSAoMSA8PCAoMTYgLSBjbnQpKSAtIDE7CistCQlyZXMgPSAoZCA+PiBjbnQpICYgbWFzazsKKy0JCXJlcyB8PSAoZCA8PCAoMTcgLSBjbnQpKTsKKy0JCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkgeworLQkJCXJlcyB8PSAxIDw8ICgxNiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAxNCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gKHUxNilyZXM7CisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDE3KSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICByZXMgfD0gKGQgPDwgKDE3IC0gY250KSk7CisrICAgICAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpIHsKKysgICAgICAgICAgICByZXMgfD0gMSA8PCAoMTYgLSBjbnQpOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihvY2YgKyAoKGQgPj4gMTQpICYgMHgyKSksIEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBSQ1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByY3JfbG9uZyh1MzIgZCwgdTggcykKKy17CistCXUzMiByZXMsIGNudDsKKy0JdTMyIG1hc2ssIGNmLCBvY2YgPSAwOworLQorLQkvKiByb3RhdGUgcmlnaHQgdGhyb3VnaCBjYXJyeSAqLworLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMykgIT0gMCkgeworLQkJaWYgKGNudCA9PSAxKSB7CistCQkJY2YgPSBkICYgMHgxOworLQkJCW9jZiA9IEFDQ0VTU19GTEFHKEZfQ0YpICE9IDA7CistCQl9IGVsc2UKKy0JCQljZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlpZiAoY250ICE9IDEpCistCQkJcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworLQkJaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworLQkJCXJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwKKy0JCQkJCQkJCSBGX09GKTsKKy0JCX0KKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3Jjcl9sb25nKHUzMiBkLCB1OCBzKQorK3sKKysgICAgdTMyIHJlcywgY250OworKyAgICB1MzIgbWFzaywgY2YsIG9jZiA9IDA7CisrCisrICAgIC8qIHJvdGF0ZSByaWdodCB0aHJvdWdoIGNhcnJ5ICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDMzKSAhPSAwKSB7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAweDE7CisrICAgICAgICAgICAgb2NmID0gQUNDRVNTX0ZMQUcoRl9DRikgIT0gMDsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjZiA9IChkID4+IChjbnQgLSAxKSkgJiAweDE7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CisrICAgICAgICBpZiAoY250ICE9IDEpCisrICAgICAgICAgICAgcmVzIHw9IChkIDw8ICgzMyAtIGNudCkpOworKyAgICAgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKSB7ICAgICAgICAvKiBjYXJyeSBmbGFnIGlzIHNldCAqLworKyAgICAgICAgICAgIHJlcyB8PSAxIDw8ICgzMiAtIGNudCk7CisrICAgICAgICB9CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKG9jZiArICgoZCA+PiAzMCkgJiAweDIpKSwgRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9sX2J5dGUodTggZCwgdTggcykKKyt1OAorK3JvbF9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTEyMSw4NyArMTE2OCw5MCBAQCB1OCByb2xfYnl0ZSh1OCBkLCB1OCBzKQorICAgICAgICBJRiBuID4gMCAKKyAgICAgICAgMSkgQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKQorICAgICAgICAyKSBCXyhuLTEpIC4uIEJfKDApIDwtICBiXyg3KSAuLiBiXyg4LW4pCistCSAqLworKyAgICAgKi8KKyAgICAgcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworLQkJLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworLQkJcmVzID0gKGQgPDwgY250KTsKKysgICAgaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeworKyAgICAgICAgLyogQl8oNykgLi4gQl8obikgIDwtICBiXyg4LShuKzEpKSAuLiBiXygwKSAqLworKyAgICAgICAgcmVzID0gKGQgPDwgY250KTsKKyAKKy0JCS8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKysgICAgICAgIC8qIEJfKG4tMSkgLi4gQl8oMCkgPC0gIGJfKDcpIC4uIGJfKDgtbikgKi8KKysgICAgICAgIG1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoOCAtIGNudCkpICYgbWFzazsKKyAKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCS8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorLQkJICAgeG9yIG9mIENGIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQuICBCbGVjY2suICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYKKy0JCQkJCQkJIFhPUjIoKHJlcyAmIDB4MSkgKyAoKHJlcyA+PiA2KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTgpcmVzOworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworKyAgICAgICAgLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICAgICB4b3Igb2YgQ0YgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdC4gIEJsZWNjay4gKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDYpICYgMHgyKSksIEZfT0YpOworKyAgICB9CisrICAgIGlmIChzICE9IDApIHsKKysgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCisrICAgICAgICAgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST0wgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb2xfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb2xfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8IGNudCk7CistCQltYXNrID0gKDEgPDwgY250KSAtIDE7CistCQlyZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorLQkJCQkJCQkgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLAorLQkJCQkJCQkgRl9PRik7CistCX0gaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDE2IC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDE0KSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHJvbF9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3JvbF9sb25nKHUzMiBkLCB1OCBzKQorIHsKKyAgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgY250KTsKKy0JCW1hc2sgPSAoMSA8PCBjbnQpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoMzIgLSBjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDEsIEZfQ0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmCistCQkJCQkJCSBYT1IyKChyZXMgJiAweDEpICsgKChyZXMgPj4gMzApICYgMHgyKSksCistCQkJCQkJCSBGX09GKTsKKy0JfSBpZiAocyAhPSAwKSB7CistCQkvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorLQkJICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMzIpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8IGNudCk7CisrICAgICAgICBtYXNrID0gKDEgPDwgY250KSAtIDE7CisrICAgICAgICByZXMgfD0gKGQgPj4gKDMyIC0gY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHgxLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE9SMigocmVzICYgMHgxKSArICgocmVzID4+IDMwKSAmIDB4MikpLCBGX09GKTsKKysgICAgfQorKyAgICBpZiAocyAhPSAwKSB7CisrICAgICAgICAvKiBzZXQgdGhlIG5ldyBjYXJyeSBmbGFnLCBOb3RlIHRoYXQgaXQgaXMgdGhlIGxvdyBvcmRlcgorKyAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4MSwgRl9DRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFJPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggcm9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Jvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVzLCBjbnQsIG1hc2s7CisgCitAQCAtMTIxOSw5ICsxMjY5LDkgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAgICAgICAgSUYgbiA+IDAgCisgICAgICAgIDEpIEJfKDgtKG4rMSkpIC4uIEJfKDApICA8LSAgYl8oNykgLi4gYl8obikKKyAgICAgICAgMikgQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKQorLQkgKi8KKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgOCkgIT0gMCkgeyAgICAgICAgICAgLyogbm90IGEgdHlwbywgZG8gbmFkYSBpZiBjbnQ9PTAgKi8KKysgICAgICovCisrICAgIHJlcyA9IGQ7CisrICAgIGlmICgoY250ID0gcyAlIDgpICE9IDApIHsgICAvKiBub3QgYSB0eXBvLCBkbyBuYWRhIGlmIGNudD09MCAqLworICAgICAgICAgLyogQl8oNykgLi4gQl8oOC1uKSA8LSAgYl8obi0xKSAuLiBiXygwKSAqLworICAgICAgICAgcmVzID0gKGQgPDwgKDggLSBjbnQpKTsKKyAKK0BAIC0xMjMxLDI5MSArMTI4MSwzMTcgQEAgdTggcm9yX2J5dGUodTggZCwgdTggcykKKyAKKyAgICAgICAgIC8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyIAorICAgICAgICAgICAgYml0IG9mIHRoZSByZXN1bHQhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfQ0YpOworLQkJLyogT1ZFUkZMT1cgaXMgc2V0ICpJRkYqIHM9PTEsIHRoZW4gaXQgaXMgdGhlCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgICAgIC8qIE9WRVJGTE9XIGlzIHNldCAqSUZGKiBzPT0xLCB0aGVuIGl0IGlzIHRoZQorICAgICAgICAgICAgeG9yIG9mIHRoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzLiAgQmxlY2NrLiAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocyA9PSAxICYmIFhPUjIocmVzID4+IDYpLCBGX09GKTsKKy0JfSBlbHNlIGlmIChzICE9IDApIHsKKy0JCS8qIHNldCB0aGUgbmV3IGNhcnJ5IGZsYWcsIE5vdGUgdGhhdCBpdCBpcyB0aGUgbG93IG9yZGVyCistCQkgICBiaXQgb2YgdGhlIHJlc3VsdCEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9DRik7CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhzID09IDEgJiYgWE9SMihyZXMgPj4gNiksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiByb3Jfd29yZCh1MTYgZCwgdTggcykKKyt1MTYKKytyb3Jfd29yZCh1MTYgZCwgdTggcykKKyB7CisgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXMsIGNudCwgbWFzazsKKyAKKy0JcmVzID0gZDsKKy0JaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKy0JCXJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworLQkJbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKy0JCXJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmVzID0gZDsKKysgICAgaWYgKChjbnQgPSBzICUgMTYpICE9IDApIHsKKysgICAgICAgIHJlcyA9IChkIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgbWFzayA9ICgxIDw8ICgxNiAtIGNudCkpIC0gMTsKKysgICAgICAgIHJlcyB8PSAoZCA+PiAoY250KSkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfQ0YpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBST1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiByb3JfbG9uZyh1MzIgZCwgdTggcykKKyt1MzIKKytyb3JfbG9uZyh1MzIgZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXMsIGNudCwgbWFzazsKKysgICAgcmVnaXN0ZXIgdTMyIHJlcywgY250LCBtYXNrOworIAorLQlyZXMgPSBkOworLQlpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworLQkJcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CistCQltYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworLQkJcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworLQl9IGVsc2UgaWYgKHMgIT0gMCkgeworLQkJLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKy0JCSAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkOworKyAgICBpZiAoKGNudCA9IHMgJSAzMikgIT0gMCkgeworKyAgICAgICAgcmVzID0gKGQgPDwgKDMyIC0gY250KSk7CisrICAgICAgICBtYXNrID0gKDEgPDwgKDMyIC0gY250KSkgLSAxOworKyAgICAgICAgcmVzIHw9IChkID4+IChjbnQpKSAmIG1hc2s7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHMgPT0gMSAmJiBYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKHMgIT0gMCkgeworKyAgICAgICAgLyogc2V0IHRoZSBuZXcgY2FycnkgZmxhZywgTm90ZSB0aGF0IGl0IGlzIHRoZSBsb3cgb3JkZXIKKysgICAgICAgICAgIGJpdCBvZiB0aGUgcmVzdWx0ISEhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2hsX2J5dGUodTggZCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCQkvKiBsYXN0IGJpdCBzaGlmdGVkIG91dCBnb2VzIGludG8gY2FycnkgZmxhZyAqLworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSBkIDw8IGNudDsKKy0JCQljZiA9IGQgJiAoMSA8PCAoOCAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gKHU4KSBkOworLQkJfQorKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKworKyAgICAgICAgLyogbGFzdCBiaXQgc2hpZnRlZCBvdXQgZ29lcyBpbnRvIGNhcnJ5IGZsYWcgKi8KKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDggLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTgpIGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQkvKiBOZWVkcyBzaW1wbGlmaWNhdGlvbi4gKi8KKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwKSA9PSAweDgwKSBeCistCQkJCQkJCQkJIChBQ0NFU1NfRkxBRyhGX0NGKSAhPSAwKSksCistCQkJLyogd2FzIChNLng4Ni5SX0ZMRyZGX0NGKT09Rl9DRikpLCAqLworLQkJCQkJCQkJCUZfT0YpOworLQkJfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgLyogTmVlZHMgc2ltcGxpZmljYXRpb24uICovCisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MCkgPT0gMHg4MCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdhcyAoTS54ODYuUl9GTEcmRl9DRik9PUZfQ0YpKSwgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2hsX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2hsX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9ICh1MTYpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygKKy0JCQkJCQkJCQkoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJCSAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLAorLQkJCQkJCQkJCUZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICAgICAgfQorLSAgICB9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzLTEpKSAmIDB4ODAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICBpZiAocyA8IDE2KSB7CisrICAgICAgICBjbnQgPSBzICUgMTY7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IGQgPDwgY250OworKyAgICAgICAgICAgIGNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSAodTE2KSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwKSA9PSAweDgwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsX2xvbmcodTMyIGQsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IGQgPDwgY250OworLQkJCWNmID0gZCAmICgxIDw8ICgzMiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0JCX0gZWxzZSB7CistCQkJcmVzID0gZDsKKy0JCX0KKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKy0JCQkJCQkJCSAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMtMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCVNFVF9GTEFHKEZfUEYpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCX0KKy0JcmV0dXJuIHJlczsKKyt1MzIKKytzaGxfbG9uZyh1MzIgZCwgdTggcykKKyt7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrCisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgcmVzID0gZCA8PCBjbnQ7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKCgoKHJlcyAmIDB4ODAwMDAwMDApID09IDB4ODAwMDAwMDApIF4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDQ0VTU19GTEFHKEZfQ0YpICE9IDApKSwgRl9PRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgfQorKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChkIDw8IChzIC0gMSkpICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIH0KKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2hyX2J5dGUodTggZCwgdTggcykKKy17CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CistCistCWlmIChzIDwgOCkgeworLQkJY250ID0gcyAlIDg7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gZCA+PiBjbnQ7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSAodTgpIGQ7CistCQl9CistCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiA2KSwgRl9PRik7CistCQl9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CistCQl9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMtMSkpICYgMHgxLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gKHU4KXJlczsKKyt1OAorK3Nocl9ieXRlKHU4IGQsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDgpIHsKKysgICAgICAgIGNudCA9IHMgJSA4OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IGQgPj4gY250OworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9ICh1OCkgZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChjbnQgPT0gMSkgeworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDYpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPj4gKHMgLSAxKSkgJiAweDEsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTgpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocl93b3JkKHUxNiBkLCB1OCBzKQorK3UxNgorK3Nocl93b3JkKHUxNiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gZDsKKysgICAgICAgIH0KKyAKKy0JCWlmIChjbnQgPT0gMSkgeworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIocmVzID4+IDE0KSwgRl9PRik7CistICAgICAgICB9IGVsc2UgeworLQkJCUNMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworICAgICAgICAgfQorLQl9IGVsc2UgeworLQkJcmVzID0gMDsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQkJU0VUX0ZMQUcoRl9aRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNIUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNocl9sb25nKHUzMiBkLCB1OCBzKQorK3UzMgorK3Nocl9sb25nKHUzMiBkLCB1OCBzKQorIHsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKyAKKy0JaWYgKHMgPCAzMikgeworLQkJY250ID0gcyAlIDMyOworLQkJaWYgKGNudCA+IDApIHsKKy0JCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJCXJlcyA9IGQgPj4gY250OworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgIGlmIChzIDwgMzIpIHsKKysgICAgICAgIGNudCA9IHMgJSAzMjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSBkID4+IGNudDsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICByZXMgPSBkOworICAgICAgICAgfQorICAgICAgICAgaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAzMCksIEZfT0YpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKyAgICAgICAgIH0KKy0gICAgfSBlbHNlIHsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHJlcyA9IDA7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQkJQ0xFQVJfRkxBRyhGX1NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgIH0KKyAgICAgcmV0dXJuIHJlczsKKyB9CitAQCAtMTUyNCw1OTIgKzE2MDAsNjM0IEBAIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNBUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggc2FyX2J5dGUodTggZCwgdTggcykKKyt1OAorK3Nhcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZiwgbWFzaywgc2Y7CisgCistCXJlcyA9IGQ7CistCXNmID0gZCAmIDB4ODA7CisrICAgIHJlcyA9IGQ7CisrICAgIHNmID0gZCAmIDB4ODA7CisgICAgIGNudCA9IHMgJSA4OworLQlpZiAoY250ID4gMCAmJiBjbnQgPCA4KSB7CistCQltYXNrID0gKDEgPDwgKDggLSBjbnQpKSAtIDE7CistCQljZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworLQkJcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CistCQlpZiAoc2YpIHsKKy0JCQlyZXMgfD0gfm1hc2s7CistCQl9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDgpIHsKKysgICAgaWYgKGNudCA+IDAgJiYgY250IDwgOCkgeworKyAgICAgICAgbWFzayA9ICgxIDw8ICg4IC0gY250KSkgLSAxOworKyAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgaWYgKHNmKSB7CisrICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworKyAgICAgICAgfQorKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAsIEZfU0YpOworKyAgICB9CisrICAgIGVsc2UgaWYgKGNudCA+PSA4KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuICh1OClyZXM7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IDA7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpCisrdTE2Cisrc2FyX3dvcmQodTE2IGQsIHU4IHMpCisgeworICAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwOworICAgICBjbnQgPSBzICUgMTY7CistCXJlcyA9IGQ7CistCWlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisrICAgIHJlcyA9IGQ7CisrICAgIGlmIChjbnQgPiAwICYmIGNudCA8IDE2KSB7CisgICAgICAgICBtYXNrID0gKDEgPDwgKDE2IC0gY250KSkgLSAxOworICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKyAgICAgICAgIHJlcyA9IChkID4+IGNudCkgJiBtYXNrOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworICAgICAgICAgaWYgKHNmKSB7CisgICAgICAgICAgICAgcmVzIHw9IH5tYXNrOworICAgICAgICAgfQorLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKy0gICAgfSBlbHNlIGlmIChjbnQgPj0gMTYpIHsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDE2KSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmY7CistCQkJU0VUX0ZMQUcoRl9DRik7CistCQkJQ0xFQVJfRkxBRyhGX1pGKTsKKy0JCQlTRVRfRkxBRyhGX1NGKTsKKy0JCQlTRVRfRkxBRyhGX1BGKTsKKy0gICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIHJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9QRik7CisgICAgICAgICB9CisgICAgIH0KKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICByZXR1cm4gKHUxNikgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0FSIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpCisrdTMyCisrc2FyX2xvbmcodTMyIGQsIHU4IHMpCisgeworICAgICB1MzIgY250LCByZXMsIGNmLCBtYXNrLCBzZjsKKyAKKyAgICAgc2YgPSBkICYgMHg4MDAwMDAwMDsKKyAgICAgY250ID0gcyAlIDMyOworLQlyZXMgPSBkOworLQlpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworKyAgICByZXMgPSBkOworKyAgICBpZiAoY250ID4gMCAmJiBjbnQgPCAzMikgeworICAgICAgICAgbWFzayA9ICgxIDw8ICgzMiAtIGNudCkpIC0gMTsKKy0JCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CisrICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworICAgICAgICAgcmVzID0gKGQgPj4gY250KSAmIG1hc2s7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgfD0gfm1hc2s7CisgICAgICAgICB9CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistICAgIH0gZWxzZSBpZiAoY250ID49IDMyKSB7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIH0KKysgICAgZWxzZSBpZiAoY250ID49IDMyKSB7CisgICAgICAgICBpZiAoc2YpIHsKKyAgICAgICAgICAgICByZXMgPSAweGZmZmZmZmZmOworLQkJCVNFVF9GTEFHKEZfQ0YpOworLQkJCUNMRUFSX0ZMQUcoRl9aRik7CistCQkJU0VUX0ZMQUcoRl9TRik7CistCQkJU0VUX0ZMQUcoRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IDA7CistCQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCQlTRVRfRkxBRyhGX1pGKTsKKy0JCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJCUNMRUFSX0ZMQUcoRl9QRik7CistCQl9CistCX0KKy0JcmV0dXJuIHJlczsKKysgICAgICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfU0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfUEYpOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgcmVzID0gMDsKKysgICAgICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hMRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNobGRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorLXsKKy0JdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKy0KKy0JaWYgKHMgPCAxNikgeworLQkJY250ID0gcyAlIDE2OworLQkJaWYgKGNudCA+IDApIHsKKy0JCQlyZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2LWNudCkpOworLQkJCWNmID0gZCAmICgxIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAsIEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlTRVRfRkxBRyhGX1BGKTsKKy0JCVNFVF9GTEFHKEZfWkYpOworLQl9CistCXJldHVybiAodTE2KXJlczsKKyt1MTYKKytzaGxkX3dvcmQodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3sKKysgICAgdW5zaWduZWQgaW50IGNudCwgcmVzLCBjZjsKKysKKysgICAgaWYgKHMgPCAxNikgeworKyAgICAgICAgY250ID0gcyAlIDE2OworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICByZXMgPSAoZCA8PCBjbnQpIHwgKGZpbGwgPj4gKDE2IC0gY250KSk7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisrICAgICAgICBpZiAoY250ID09IDEpIHsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRygoKChyZXMgJiAweDgwMDApID09IDB4ODAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAsIEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBTRVRfRkxBRyhGX1BGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfWkYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSExEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hsZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisteworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworLQorLQlpZiAocyA8IDMyKSB7CistCQljbnQgPSBzICUgMzI7CistCQlpZiAoY250ID4gMCkgeworLQkJCXJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzItY250KSk7CistCQkJY2YgPSBkICYgKDEgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorLQkJCQkJCQkJICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKy0JCX0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JCX0KKy0JfSBlbHNlIHsKKy0JCXJlcyA9IDA7CistCQlDT05ESVRJT05BTF9TRVRfRkxBRygoZCA8PCAocy0xKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlDTEVBUl9GTEFHKEZfU0YpOworLQkJU0VUX0ZMQUcoRl9QRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JfQorLQlyZXR1cm4gcmVzOworK3UzMgorK3NobGRfbG9uZyh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisreworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKworKyAgICBpZiAocyA8IDMyKSB7CisrICAgICAgICBjbnQgPSBzICUgMzI7CisrICAgICAgICBpZiAoY250ID4gMCkgeworKyAgICAgICAgICAgIHJlcyA9IChkIDw8IGNudCkgfCAoZmlsbCA+PiAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKCgocmVzICYgMHg4MDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkgXgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQUNDRVNTX0ZMQUcoRl9DRikgIT0gMCkpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICB9CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKGQgPDwgKHMgLSAxKSkgJiAweDgwMDAwMDAwLCBGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9QRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0hSRCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTE2IHNocmRfd29yZCAodTE2IGQsIHUxNiBmaWxsLCB1OCBzKQorK3UxNgorK3NocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpCisgeworLQl1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworKyAgICB1bnNpZ25lZCBpbnQgY250LCByZXMsIGNmOworIAorLQlpZiAocyA8IDE2KSB7CistCQljbnQgPSBzICUgMTY7CistCQlpZiAoY250ID4gMCkgeworLQkJCWNmID0gZCAmICgxIDw8IChjbnQgLSAxKSk7CistCQkJcmVzID0gKGQgPj4gY250KSB8IChmaWxsIDw8ICgxNiAtIGNudCkpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKGNmLCBGX0NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCQl9IGVsc2UgeworLQkJCXJlcyA9IGQ7CistCQl9CisrICAgIGlmIChzIDwgMTYpIHsKKysgICAgICAgIGNudCA9IHMgJSAxNjsKKysgICAgICAgIGlmIChjbnQgPiAwKSB7CisrICAgICAgICAgICAgY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKysgICAgICAgICAgICByZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDE2IC0gY250KSk7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIHJlcyA9IGQ7CisrICAgICAgICB9CisgCistCQlpZiAoY250ID09IDEpIHsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKHJlcyA+PiAxNCksIEZfT0YpOworLSAgICAgICAgfSBlbHNlIHsKKy0JCQlDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMTQpLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiAodTE2KXJlczsKKysgICAgZWxzZSB7CisrICAgICAgICByZXMgPSAwOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgICAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfUEYpOworKyAgICB9CisrICAgIHJldHVybiAodTE2KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTSFJEIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgc2hyZF9sb25nICh1MzIgZCwgdTMyIGZpbGwsIHU4IHMpCisrdTMyCisrc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcykKKyB7CistCXVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisrICAgIHVuc2lnbmVkIGludCBjbnQsIHJlcywgY2Y7CisgCistCWlmIChzIDwgMzIpIHsKKy0JCWNudCA9IHMgJSAzMjsKKy0JCWlmIChjbnQgPiAwKSB7CistCQkJY2YgPSBkICYgKDEgPDwgKGNudCAtIDEpKTsKKy0JCQlyZXMgPSAoZCA+PiBjbnQpIHwgKGZpbGwgPDwgKDMyIC0gY250KSk7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoY2YsIEZfQ0YpOworLQkJCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKy0JCQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQkJfSBlbHNlIHsKKy0JCQlyZXMgPSBkOworLQkJfQorLQkJaWYgKGNudCA9PSAxKSB7CistCQkJQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKy0gICAgICAgIH0gZWxzZSB7CistCQkJQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgaWYgKHMgPCAzMikgeworKyAgICAgICAgY250ID0gcyAlIDMyOworKyAgICAgICAgaWYgKGNudCA+IDApIHsKKysgICAgICAgICAgICBjZiA9IGQgJiAoMSA8PCAoY250IC0gMSkpOworKyAgICAgICAgICAgIHJlcyA9IChkID4+IGNudCkgfCAoZmlsbCA8PCAoMzIgLSBjbnQpKTsKKysgICAgICAgICAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhjZiwgRl9DRik7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZmZmZmYpID09IDAsIEZfWkYpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICAgICAgICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgICAgICB9CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICByZXMgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKGNudCA9PSAxKSB7CisrICAgICAgICAgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihyZXMgPj4gMzApLCBGX09GKTsKKysgICAgICAgIH0KKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisgICAgICAgICB9CistCX0gZWxzZSB7CistCQlyZXMgPSAwOworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCQlTRVRfRkxBRyhGX1pGKTsKKy0JCUNMRUFSX0ZMQUcoRl9TRik7CistCQlDTEVBUl9GTEFHKEZfUEYpOworICAgICB9CistCXJldHVybiByZXM7CisrICAgIGVsc2UgeworKyAgICAgICAgcmVzID0gMDsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX1BGKTsKKysgICAgfQorKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU0JCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzYmJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc2JiX2J5dGUodTggZCwgdTggcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCistCQlyZXMgPSBkIC0gcyAtIDE7CistCWVsc2UKKy0JCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgICAgICByZXMgPSBkIC0gcyAtIDE7CisrICAgIGVsc2UKKysgICAgICAgIHJlcyA9IGQgLSBzOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1OClyZXM7CisrICAgIC8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCisrICAgIGJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDYpLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gKHU4KSByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBTQkIgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBzYmJfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2Cisrc2JiX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0gICAgcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworICAgICByZWdpc3RlciB1MzIgYmM7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKysgICAgaWYgKEFDQ0VTU19GTEFHKEZfQ0YpKQorICAgICAgICAgcmVzID0gZCAtIHMgLSAxOworICAgICBlbHNlCisgICAgICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNCQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzYmJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlpZiAoQUNDRVNTX0ZMQUcoRl9DRikpCisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0NGKSkKKyAgICAgICAgIHJlcyA9IGQgLSBzIC0gMTsKKyAgICAgZWxzZQorICAgICAgICAgcmVzID0gZCAtIHM7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11OCBzdWJfYnl0ZSh1OCBkLCB1OCBzKQorK3U4Cisrc3ViX2J5dGUodTggZCwgdTggcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCistCXJlZ2lzdGVyIHUzMiBiYzsKKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgYmM7CisgCistCXJlcyA9IGQgLSBzOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmYpID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICByZXMgPSBkIC0gczsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmKSA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKy0JYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MCwgRl9DRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gNiksIEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4OCwgRl9BRik7CistCXJldHVybiAodTgpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwLCBGX0NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoWE9SMihiYyA+PiA2KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1OCkgcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgU1VCIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKQorK3UxNgorK3N1Yl93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorICAgICByZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoKHJlcyAmIDB4ZmZmZikgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMCwgRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmYpID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworIAorLQkvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworLQliYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuICh1MTYpcmVzOworKyAgICAvKiBjYWxjdWxhdGUgdGhlIGJvcnJvdyBjaGFpbi4gIFNlZSBub3RlIGF0IHRvcCAqLworKyAgICBiYyA9IChyZXMgJiAofmQgfCBzKSkgfCAofmQgJiBzKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgwMDAsIEZfQ0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDE0KSwgRl9PRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKysgICAgcmV0dXJuICh1MTYpIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFNVQiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcykKKyt1MzIKKytzdWJfbG9uZyh1MzIgZCwgdTMyIHMpCisgeworLQlyZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworLQlyZWdpc3RlciB1MzIgYmM7CisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIGJjOworIAorLQlyZXMgPSBkIC0gczsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwMDAwMCwgRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKChyZXMgJiAweGZmZmZmZmZmKSA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKHJlcyAmIDB4ZmYpLCBGX1BGKTsKKysgICAgcmVzID0gZCAtIHM7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRygocmVzICYgMHhmZmZmZmZmZikgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisgCistCS8qIGNhbGN1bGF0ZSB0aGUgYm9ycm93IGNoYWluLiAgU2VlIG5vdGUgYXQgdG9wICovCistCWJjID0gKHJlcyAmICh+ZCB8IHMpKSB8ICh+ZCAmIHMpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhiYyAmIDB4ODAwMDAwMDAsIEZfQ0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhYT1IyKGJjID4+IDMwKSwgRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4LCBGX0FGKTsKKy0JcmV0dXJuIHJlczsKKysgICAgLyogY2FsY3VsYXRlIHRoZSBib3Jyb3cgY2hhaW4uICBTZWUgbm90ZSBhdCB0b3AgKi8KKysgICAgYmMgPSAocmVzICYgKH5kIHwgcykpIHwgKH5kICYgcyk7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGJjICYgMHg4MDAwMDAwMCwgRl9DRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFhPUjIoYmMgPj4gMzApLCBGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoYmMgJiAweDgsIEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2J5dGUodTggZCwgdTggcykKKyt2b2lkCisrdGVzdF9ieXRlKHU4IGQsIHU4IHMpCisgeworLSAgICByZWdpc3RlciB1MzIgcmVzOyAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1MzIgcmVzOyAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCisgICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworICAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKy0JQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFRFU1QgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyt2b2lkCisrdGVzdF93b3JkKHUxNiBkLCB1MTYgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCAmIHM7CisrICAgIHJlcyA9IGQgJiBzOworIAorLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAsIEZfU0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CisrICAgIC8qIEFGID09IGRvbnQgY2FyZSAqLworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgVEVTVCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCB0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorK3ZvaWQKKyt0ZXN0X2xvbmcodTMyIGQsIHUzMiBzKQorIHsKKy0JcmVnaXN0ZXIgdTMyIHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTMyIHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkICYgczsKKysgICAgcmVzID0gZCAmIHM7CisgCistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCS8qIEFGID09IGRvbnQgY2FyZSAqLworLQlDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICAvKiBBRiA9PSBkb250IGNhcmUgKi8KKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIFhPUiBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggeG9yX2J5dGUodTggZCwgdTggcykKKyt1OAorK3hvcl9ieXRlKHU4IGQsIHU4IHMpCisgeworLQlyZWdpc3RlciB1OCByZXM7ICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworKyAgICByZWdpc3RlciB1OCByZXM7ICAgICAgICAgICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisgCistCXJlcyA9IGQgXiBzOworLQlDTEVBUl9GTEFHKEZfT0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzKSwgRl9QRik7CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9BRik7CisrICAgIHJldHVybiByZXM7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBYT1IgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiB4b3Jfd29yZCh1MTYgZCwgdTE2IHMpCisrdTE2CisreG9yX3dvcmQodTE2IGQsIHUxNiBzKQorIHsKKy0JcmVnaXN0ZXIgdTE2IHJlczsgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKysgICAgcmVnaXN0ZXIgdTE2IHJlczsgICAgICAgICAgIC8qIGFsbCBvcGVyYW5kcyBpbiBuYXRpdmUgbWFjaGluZSBvcmRlciAqLworIAorLQlyZXMgPSBkIF4gczsKKy0JQ0xFQVJfRkxBRyhGX09GKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlyZXR1cm4gcmVzOworKyAgICByZXMgPSBkIF4gczsKKysgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzICYgMHg4MDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgWE9SIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MzIgeG9yX2xvbmcodTMyIGQsIHUzMiBzKQorK3UzMgorK3hvcl9sb25nKHUzMiBkLCB1MzIgcykKKyB7CistCXJlZ2lzdGVyIHUzMiByZXM7ICAgLyogYWxsIG9wZXJhbmRzIGluIG5hdGl2ZSBtYWNoaW5lIG9yZGVyICovCisrICAgIHJlZ2lzdGVyIHUzMiByZXM7ICAgICAgICAgICAvKiBhbGwgb3BlcmFuZHMgaW4gbmF0aXZlIG1hY2hpbmUgb3JkZXIgKi8KKyAKKy0JcmVzID0gZCBeIHM7CistCUNMRUFSX0ZMQUcoRl9PRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKHJlcyAmIDB4ODAwMDAwMDAsIEZfU0YpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgPT0gMCwgRl9aRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShyZXMgJiAweGZmKSwgRl9QRik7CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCXJldHVybiByZXM7CisrICAgIHJlcyA9IGQgXiBzOworKyAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhyZXMgJiAweDgwMDAwMDAwLCBGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcocmVzID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkocmVzICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICByZXR1cm4gcmVzOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2J5dGUodTggcykKKyt2b2lkCisraW11bF9ieXRlKHU4IHMpCisgeworLQlzMTYgcmVzID0gKHMxNikoKHM4KU0ueDg2LlJfQUwgKiAoczgpcyk7CisrICAgIHMxNiByZXMgPSAoczE2KSAoKHM4KSBNLng4Ni5SX0FMICogKHM4KSBzKTsKKyAKKy0JTS54ODYuUl9BWCA9IHJlczsKKy0JaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKCgoTS54ODYuUl9BTCAmIDB4ODApID09IDAgJiYgTS54ODYuUl9BSCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FMICYgMHg4MCkgIT0gMCAmJiBNLng4Ni5SX0FIID09IDB4RkYpKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisrICAgIH0KKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaW11bF93b3JkKHUxNiBzKQorK3ZvaWQKKytpbXVsX3dvcmQodTE2IHMpCisgeworLQlzMzIgcmVzID0gKHMxNilNLng4Ni5SX0FYICogKHMxNilzOworKyAgICBzMzIgcmVzID0gKHMxNikgTS54ODYuUl9BWCAqIChzMTYpIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorLQkJKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKy0JfQorKyAgICBNLng4Ni5SX0FYID0gKHUxNikgcmVzOworKyAgICBNLng4Ni5SX0RYID0gKHUxNikgKHJlcyA+PiAxNik7CisrICAgIGlmICgoKE0ueDg2LlJfQVggJiAweDgwMDApID09IDAgJiYgTS54ODYuUl9EWCA9PSAweDAwKSB8fAorKyAgICAgICAgKChNLng4Ni5SX0FYICYgMHg4MDAwKSAhPSAwICYmIE0ueDg2LlJfRFggPT0gMHhGRikpIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmdfZGlyZWN0KHUzMiAqcmVzX2xvLCB1MzIqIHJlc19oaSx1MzIgZCwgdTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZ19kaXJlY3QodTMyICogcmVzX2xvLCB1MzIgKiByZXNfaGksIHUzMiBkLCB1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXM2NCByZXMgPSAoczMyKWQgKiAoczMyKXM7CisrICAgIHM2NCByZXMgPSAoczY0KSAoczMyKSBkICogKHMzMikgczsKKyAKKy0JKnJlc19sbyA9ICh1MzIpcmVzOworLQkqcmVzX2hpID0gKHUzMikocmVzID4+IDMyKTsKKysgICAgKnJlc19sbyA9ICh1MzIpIHJlczsKKysgICAgKnJlc19oaSA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglkX2xvLGRfaGksZF9zaWduOworLQl1MzIJc19sbyxzX2hpLHNfc2lnbjsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlpZiAoKGRfc2lnbiA9IGQgJiAweDgwMDAwMDAwKSAhPSAwKQorLQkJZCA9IC1kOworLQlkX2xvID0gZCAmIDB4RkZGRjsKKy0JZF9oaSA9IGQgPj4gMTY7CistCWlmICgoc19zaWduID0gcyAmIDB4ODAwMDAwMDApICE9IDApCistCQlzID0gLXM7CistCXNfbG8gPSBzICYgMHhGRkZGOworLQlzX2hpID0gcyA+PiAxNjsKKy0JcmxvX2xvID0gZF9sbyAqIHNfbG87CistCXJsb19oaSA9IChkX2hpICogc19sbyArIGRfbG8gKiBzX2hpKSArIChybG9fbG8gPj4gMTYpOworLQlyaGlfbG8gPSBkX2hpICogc19oaSArIChybG9faGkgPj4gMTYpOworLQkqcmVzX2xvID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JKnJlc19oaSA9IHJoaV9sbzsKKy0JaWYgKGRfc2lnbiAhPSBzX3NpZ24pIHsKKy0JCWQgPSB+KnJlc19sbzsKKy0JCXMgPSAoKChkICYgMHhGRkZGKSArIDEpID4+IDE2KSArIChkID4+IDE2KTsKKy0JCSpyZXNfbG8gPSB+KnJlc19sbysxOworLQkJKnJlc19oaSA9IH4qcmVzX2hpKyhzID4+IDE2KTsKKy0JCX0KKysgICAgdTMyIGRfbG8sIGRfaGksIGRfc2lnbjsKKysgICAgdTMyIHNfbG8sIHNfaGksIHNfc2lnbjsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGlmICgoZF9zaWduID0gZCAmIDB4ODAwMDAwMDApICE9IDApCisrICAgICAgICBkID0gLWQ7CisrICAgIGRfbG8gPSBkICYgMHhGRkZGOworKyAgICBkX2hpID0gZCA+PiAxNjsKKysgICAgaWYgKChzX3NpZ24gPSBzICYgMHg4MDAwMDAwMCkgIT0gMCkKKysgICAgICAgIHMgPSAtczsKKysgICAgc19sbyA9IHMgJiAweEZGRkY7CisrICAgIHNfaGkgPSBzID4+IDE2OworKyAgICBybG9fbG8gPSBkX2xvICogc19sbzsKKysgICAgcmxvX2hpID0gKGRfaGkgKiBzX2xvICsgZF9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CisrICAgIHJoaV9sbyA9IGRfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CisrICAgICpyZXNfbG8gPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICAqcmVzX2hpID0gcmhpX2xvOworKyAgICBpZiAoZF9zaWduICE9IHNfc2lnbikgeworKyAgICAgICAgZCA9IH4qcmVzX2xvOworKyAgICAgICAgcyA9ICgoKGQgJiAweEZGRkYpICsgMSkgPj4gMTYpICsgKGQgPj4gMTYpOworKyAgICAgICAgKnJlc19sbyA9IH4qcmVzX2xvICsgMTsKKysgICAgICAgICpyZXNfaGkgPSB+KnJlc19oaSArIChzID4+IDE2KTsKKysgICAgfQorICNlbmRpZgorIH0KKyAKK0BAIC0yMTE3LDUzICsyMjM1LDU5IEBAIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSU1VTCBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbXVsX2xvbmcodTMyIHMpCisrdm9pZAorK2ltdWxfbG9uZyh1MzIgcykKKyB7CistCWltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCZNLng4Ni5SX0VEWCxNLng4Ni5SX0VBWCxzKTsKKy0JaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CistCQkoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworLQkJQ0xFQVJfRkxBRyhGX0NGKTsKKy0JCUNMRUFSX0ZMQUcoRl9PRik7CistCX0gZWxzZSB7CistCQlTRVRfRkxBRyhGX0NGKTsKKy0JCVNFVF9GTEFHKEZfT0YpOworLQl9CisrICAgIGltdWxfbG9uZ19kaXJlY3QoJk0ueDg2LlJfRUFYLCAmTS54ODYuUl9FRFgsIE0ueDg2LlJfRUFYLCBzKTsKKysgICAgaWYgKCgoTS54ODYuUl9FQVggJiAweDgwMDAwMDAwKSA9PSAwICYmIE0ueDg2LlJfRURYID09IDB4MDApIHx8CisrICAgICAgICAoKE0ueDg2LlJfRUFYICYgMHg4MDAwMDAwMCkgIT0gMCAmJiBNLng4Ni5SX0VEWCA9PSAweEZGKSkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX2J5dGUodTggcykKKyt2b2lkCisrbXVsX2J5dGUodTggcykKKyB7CistCXUxNiByZXMgPSAodTE2KShNLng4Ni5SX0FMICogcyk7CisrICAgIHUxNiByZXMgPSAodTE2KSAoTS54ODYuUl9BTCAqIHMpOworIAorLQlNLng4Ni5SX0FYID0gcmVzOworLQlpZiAoTS54ODYuUl9BSCA9PSAwKSB7CistCQlDTEVBUl9GTEFHKEZfQ0YpOworLQkJQ0xFQVJfRkxBRyhGX09GKTsKKy0JfSBlbHNlIHsKKy0JCVNFVF9GTEFHKEZfQ0YpOworLQkJU0VUX0ZMQUcoRl9PRik7CistCX0KKysgICAgTS54ODYuUl9BWCA9IHJlczsKKysgICAgaWYgKE0ueDg2LlJfQUggPT0gMCkgeworKyAgICAgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9PRik7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgICBTRVRfRkxBRyhGX0NGKTsKKysgICAgICAgIFNFVF9GTEFHKEZfT0YpOworKyAgICB9CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBNVUwgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgbXVsX3dvcmQodTE2IHMpCisrdm9pZAorK211bF93b3JkKHUxNiBzKQorIHsKKy0JdTMyIHJlcyA9IE0ueDg2LlJfQVggKiBzOworKyAgICB1MzIgcmVzID0gTS54ODYuUl9BWCAqIHM7CisgCistCU0ueDg2LlJfQVggPSAodTE2KXJlczsKKy0JTS54ODYuUl9EWCA9ICh1MTYpKHJlcyA+PiAxNik7CistCWlmIChNLng4Ni5SX0RYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLSAgICB9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIHJlczsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIChyZXMgPj4gMTYpOworKyAgICBpZiAoTS54ODYuUl9EWCA9PSAwKSB7CisrICAgICAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICAgICAgQ0xFQVJfRkxBRyhGX09GKTsKKysgICAgfQorKyAgICBlbHNlIHsKKysgICAgICAgIFNFVF9GTEFHKEZfQ0YpOworKyAgICAgICAgU0VUX0ZMQUcoRl9PRik7CisgICAgIH0KKyB9CisgCitAQCAtMjE3MSwzNiArMjI5NSwzOCBAQCB2b2lkIG11bF93b3JkKHUxNiBzKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgTVVMIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIG11bF9sb25nKHUzMiBzKQorK3ZvaWQKKyttdWxfbG9uZyh1MzIgcykKKyB7CisgI2lmZGVmCV9fSEFTX0xPTkdfTE9OR19fCistCXU2NCByZXMgPSAodTMyKU0ueDg2LlJfRUFYICogKHUzMilzOworKyAgICB1NjQgcmVzID0gKHU2NCkgTS54ODYuUl9FQVggKiBzOworIAorLQlNLng4Ni5SX0VBWCA9ICh1MzIpcmVzOworLQlNLng4Ni5SX0VEWCA9ICh1MzIpKHJlcyA+PiAzMik7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgcmVzOworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIChyZXMgPj4gMzIpOworICNlbHNlCistCXUzMglhLGFfbG8sYV9oaTsKKy0JdTMyCXNfbG8sc19oaTsKKy0JdTMyCXJsb19sbyxybG9faGkscmhpX2xvOworLQorLQlhID0gTS54ODYuUl9FQVg7CistCWFfbG8gPSBhICYgMHhGRkZGOworLQlhX2hpID0gYSA+PiAxNjsKKy0Jc19sbyA9IHMgJiAweEZGRkY7CistCXNfaGkgPSBzID4+IDE2OworLQlybG9fbG8gPSBhX2xvICogc19sbzsKKy0JcmxvX2hpID0gKGFfaGkgKiBzX2xvICsgYV9sbyAqIHNfaGkpICsgKHJsb19sbyA+PiAxNik7CistCXJoaV9sbyA9IGFfaGkgKiBzX2hpICsgKHJsb19oaSA+PiAxNik7CistCU0ueDg2LlJfRUFYID0gKHJsb19oaSA8PCAxNikgfCAocmxvX2xvICYgMHhGRkZGKTsKKy0JTS54ODYuUl9FRFggPSByaGlfbG87CisrICAgIHUzMiBhLCBhX2xvLCBhX2hpOworKyAgICB1MzIgc19sbywgc19oaTsKKysgICAgdTMyIHJsb19sbywgcmxvX2hpLCByaGlfbG87CisrCisrICAgIGEgPSBNLng4Ni5SX0VBWDsKKysgICAgYV9sbyA9IGEgJiAweEZGRkY7CisrICAgIGFfaGkgPSBhID4+IDE2OworKyAgICBzX2xvID0gcyAmIDB4RkZGRjsKKysgICAgc19oaSA9IHMgPj4gMTY7CisrICAgIHJsb19sbyA9IGFfbG8gKiBzX2xvOworKyAgICBybG9faGkgPSAoYV9oaSAqIHNfbG8gKyBhX2xvICogc19oaSkgKyAocmxvX2xvID4+IDE2KTsKKysgICAgcmhpX2xvID0gYV9oaSAqIHNfaGkgKyAocmxvX2hpID4+IDE2KTsKKysgICAgTS54ODYuUl9FQVggPSAocmxvX2hpIDw8IDE2KSB8IChybG9fbG8gJiAweEZGRkYpOworKyAgICBNLng4Ni5SX0VEWCA9IHJoaV9sbzsKKyAjZW5kaWYKKyAKKy0JaWYgKE0ueDg2LlJfRURYID09IDApIHsKKy0JCUNMRUFSX0ZMQUcoRl9DRik7CistCQlDTEVBUl9GTEFHKEZfT0YpOworLQl9IGVsc2UgeworLQkJU0VUX0ZMQUcoRl9DRik7CistCQlTRVRfRkxBRyhGX09GKTsKKysgICAgaWYgKE0ueDg2LlJfRURYID09IDApIHsKKysgICAgICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgICAgICBDTEVBUl9GTEFHKEZfT0YpOworKyAgICB9CisrICAgIGVsc2UgeworKyAgICAgICAgU0VUX0ZMQUcoRl9DRik7CisrICAgICAgICBTRVRfRkxBRyhGX09GKTsKKyAgICAgfQorIH0KKyAKK0BAIC0yMjA4LDMwOSArMjMzNCwzMTkgQEAgdm9pZCBtdWxfbG9uZyh1MzIgcykKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElESVYgaW5zdHJ1Y3Rpb24gYW5kIHNpZGUgZWZmZWN0cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgaWRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2lkaXZfYnl0ZSh1OCBzKQorIHsKKyAgICAgczMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IChzMTYpTS54ODYuUl9BWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgIGR2ZCA9IChzMTYpIE0ueDg2LlJfQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzOCkgczsKKysgICAgbW9kID0gZHZkICUgKHM4KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKyAgICAgICAgIHJldHVybjsKKy0JfQorLQlkaXYgPSBkdmQgLyAoczgpczsKKy0JbW9kID0gZHZkICUgKHM4KXM7CistCWlmIChhYnMoZGl2KSA+IDB4N2YpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKy0JTS54ODYuUl9BSCA9IChzOCkgbW9kOworKyAgICB9CisrICAgIE0ueDg2LlJfQUwgPSAoczgpIGRpdjsKKysgICAgTS54ODYuUl9BSCA9IChzOCkgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgSURJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpZGl2X3dvcmQodTE2IHMpCisrdm9pZAorK2lkaXZfd29yZCh1MTYgcykKKyB7CistCXMzMiBkdmQsIGRpdiwgbW9kOworKyAgICBzMzIgZHZkLCBkaXYsIG1vZDsKKyAKKy0JZHZkID0gKCgoczMyKU0ueDg2LlJfRFgpIDw8IDE2KSB8IE0ueDg2LlJfQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMTYpczsKKy0JbW9kID0gZHZkICUgKHMxNilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgZHZkID0gKCgoczMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAoczE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAoczE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweDdmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIENMRUFSX0ZMQUcoRl9DRik7CisrICAgIENMRUFSX0ZMQUcoRl9TRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9BWCA9ICh1MTYpZGl2OworLQlNLng4Ni5SX0RYID0gKHUxNiltb2Q7CisrICAgIE0ueDg2LlJfQVggPSAodTE2KSBkaXY7CisrICAgIE0ueDg2LlJfRFggPSAodTE2KSBtb2Q7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKKyBJbXBsZW1lbnRzIHRoZSBJRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGlkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisraWRpdl9sb25nKHUzMiBzKQorIHsKKyAjaWZkZWYJX19IQVNfTE9OR19MT05HX18KKy0JczY0IGR2ZCwgZGl2LCBtb2Q7CistCistCWR2ZCA9ICgoKHM2NClNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRpdiA9IGR2ZCAvIChzMzIpczsKKy0JbW9kID0gZHZkICUgKHMzMilzOworLQlpZiAoYWJzKGRpdikgPiAweDdmZmZmZmZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorKyAgICBzNjQgZHZkLCBkaXYsIG1vZDsKKysKKysgICAgZHZkID0gKCgoczY0KSBNLng4Ni5SX0VEWCkgPDwgMzIpIHwgTS54ODYuUl9FQVg7CisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRpdiA9IGR2ZCAvIChzMzIpIHM7CisrICAgIG1vZCA9IGR2ZCAlIChzMzIpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4N2ZmZmZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisgI2Vsc2UKKy0JczMyIGRpdiA9IDAsIG1vZDsKKy0JczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CistCXUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworLQl1MzIgYWJzX3MgPSBzICYgMHg3RkZGRkZGRjsKKy0JdTMyIGFic19oX2R2ZCA9IGhfZHZkICYgMHg3RkZGRkZGRjsKKy0JdTMyIGhfcyA9IGFic19zID4+IDE7CistCXUzMiBsX3MgPSBhYnNfcyA8PCAzMTsKKy0JaW50IGNvdW50ZXIgPSAzMTsKKy0JaW50IGNhcnJ5OworLQorLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQlkbyB7CistCQlkaXYgPDw9IDE7CistCQljYXJyeSA9IChsX2R2ZCA+PSBsX3MpID8gMCA6IDE7CistCQkKKy0JCWlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQlhYnNfaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKy0JCQlsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKy0JCQkJOiAobF9kdmQgLSBsX3MpOworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBhYnNfcyA8PCAoLS1jb3VudGVyKTsKKy0JCQlkaXYgfD0gMTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0JCQorLQl9IHdoaWxlIChjb3VudGVyID4gLTEpOworLQkvKiBvdmVyZmxvdyAqLworLQlpZiAoYWJzX2hfZHZkIHx8IChsX2R2ZCA+IGFic19zKSkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JLyogc2lnbiAqLworLQlkaXYgfD0gKChoX2R2ZCAmIDB4MTAwMDAwMDApIF4gKHMgJiAweDEwMDAwMDAwKSk7CistCW1vZCA9IGxfZHZkOworKyAgICBzMzIgZGl2ID0gMCwgbW9kOworKyAgICBzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKysgICAgdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CisrICAgIHUzMiBhYnNfcyA9IHMgJiAweDdGRkZGRkZGOworKyAgICB1MzIgYWJzX2hfZHZkID0gaF9kdmQgJiAweDdGRkZGRkZGOworKyAgICB1MzIgaF9zID0gYWJzX3MgPj4gMTsKKysgICAgdTMyIGxfcyA9IGFic19zIDw8IDMxOworKyAgICBpbnQgY291bnRlciA9IDMxOworKyAgICBpbnQgY2Fycnk7CisrCisrICAgIGlmIChzID09IDApIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIGRvIHsKKysgICAgICAgIGRpdiA8PD0gMTsKKysgICAgICAgIGNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKysKKysgICAgICAgIGlmIChhYnNfaF9kdmQgPCAoaF9zICsgY2FycnkpKSB7CisrICAgICAgICAgICAgaF9zID4+PSAxOworKyAgICAgICAgICAgIGxfcyA9IGFic19zIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgYWJzX2hfZHZkIC09IChoX3MgKyBjYXJyeSk7CisrICAgICAgICAgICAgbF9kdmQgPSBjYXJyeSA/ICgoMHhGRkZGRkZGRiAtIGxfcykgKyBsX2R2ZCArIDEpCisrICAgICAgICAgICAgICAgIDogKGxfZHZkIC0gbF9zKTsKKysgICAgICAgICAgICBoX3MgPj49IDE7CisrICAgICAgICAgICAgbF9zID0gYWJzX3MgPDwgKC0tY291bnRlcik7CisrICAgICAgICAgICAgZGl2IHw9IDE7CisrICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICB9CisrCisrICAgIH0gd2hpbGUgKGNvdW50ZXIgPiAtMSk7CisrICAgIC8qIG92ZXJmbG93ICovCisrICAgIGlmIChhYnNfaF9kdmQgfHwgKGxfZHZkID4gYWJzX3MpKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICAvKiBzaWduICovCisrICAgIGRpdiB8PSAoKGhfZHZkICYgMHgxMDAwMDAwMCkgXiAocyAmIDB4MTAwMDAwMDApKTsKKysgICAgbW9kID0gbF9kdmQ7CisgCisgI2VuZGlmCistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9BRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCVNFVF9GTEFHKEZfWkYpOworLQlDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworKyAgICBDTEVBUl9GTEFHKEZfQ0YpOworKyAgICBDTEVBUl9GTEFHKEZfQUYpOworKyAgICBDTEVBUl9GTEFHKEZfU0YpOworKyAgICBTRVRfRkxBRyhGX1pGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKyAKKy0JTS54ODYuUl9FQVggPSAodTMyKWRpdjsKKy0JTS54ODYuUl9FRFggPSAodTMyKW1vZDsKKysgICAgTS54ODYuUl9FQVggPSAodTMyKSBkaXY7CisrICAgIE0ueDg2LlJfRURYID0gKHUzMikgbW9kOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgRElWIGluc3RydWN0aW9uIGFuZCBzaWRlIGVmZmVjdHMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGRpdl9ieXRlKHU4IHMpCisrdm9pZAorK2Rpdl9ieXRlKHU4IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9IE0ueDg2LlJfQVg7CisrICAgIGR2ZCA9IE0ueDg2LlJfQVg7CisgICAgIGlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisgICAgICAgICByZXR1cm47CisgICAgIH0KKy0JZGl2ID0gZHZkIC8gKHU4KXM7CistCW1vZCA9IGR2ZCAlICh1OClzOworLQlpZiAoYWJzKGRpdikgPiAweGZmKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZGl2ID0gZHZkIC8gKHU4KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTgpIHM7CisrICAgIGlmIChhYnMoZGl2KSA+IDB4ZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworLQl9CistCU0ueDg2LlJfQUwgPSAodTgpZGl2OworLQlNLng4Ni5SX0FIID0gKHU4KW1vZDsKKysgICAgfQorKyAgICBNLng4Ni5SX0FMID0gKHU4KSBkaXY7CisrICAgIE0ueDg2LlJfQUggPSAodTgpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfd29yZCh1MTYgcykKKyt2b2lkCisrZGl2X3dvcmQodTE2IHMpCisgeworLQl1MzIgZHZkLCBkaXYsIG1vZDsKKysgICAgdTMyIGR2ZCwgZGl2LCBtb2Q7CisgCistCWR2ZCA9ICgoKHUzMilNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworLQlpZiAocyA9PSAwKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgZHZkID0gKCgodTMyKSBNLng4Ni5SX0RYKSA8PCAxNikgfCBNLng4Ni5SX0FYOworKyAgICBpZiAocyA9PSAwKSB7CisrICAgICAgICB4ODZlbXVfaW50cl9yYWlzZSgwKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBkaXYgPSBkdmQgLyAodTE2KSBzOworKyAgICBtb2QgPSBkdmQgJSAodTE2KSBzOworKyAgICBpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworICAgICAgICAgcmV0dXJuOworICAgICB9CistCWRpdiA9IGR2ZCAvICh1MTYpczsKKy0JbW9kID0gZHZkICUgKHUxNilzOworLQlpZiAoYWJzKGRpdikgPiAweGZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCUNMRUFSX0ZMQUcoRl9DRik7CistCUNMRUFSX0ZMQUcoRl9TRik7CistCUNPTkRJVElPTkFMX1NFVF9GTEFHKGRpdiA9PSAwLCBGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgQ09ORElUSU9OQUxfU0VUX0ZMQUcoZGl2ID09IDAsIEZfWkYpOworKyAgICBDT05ESVRJT05BTF9TRVRfRkxBRyhQQVJJVFkobW9kICYgMHhmZiksIEZfUEYpOworIAorLQlNLng4Ni5SX0FYID0gKHUxNilkaXY7CistCU0ueDg2LlJfRFggPSAodTE2KW1vZDsKKysgICAgTS54ODYuUl9BWCA9ICh1MTYpIGRpdjsKKysgICAgTS54ODYuUl9EWCA9ICh1MTYpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIERJViBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBkaXZfbG9uZyh1MzIgcykKKyt2b2lkCisrZGl2X2xvbmcodTMyIHMpCisgeworICNpZmRlZglfX0hBU19MT05HX0xPTkdfXworLQl1NjQgZHZkLCBkaXYsIG1vZDsKKy0KKy0JZHZkID0gKCgodTY0KU0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKy0JaWYgKHMgPT0gMCkgeworLQkJeDg2ZW11X2ludHJfcmFpc2UoMCk7CistCQlyZXR1cm47CistCX0KKy0JZGl2ID0gZHZkIC8gKHUzMilzOworLQltb2QgPSBkdmQgJSAodTMyKXM7CistCWlmIChhYnMoZGl2KSA+IDB4ZmZmZmZmZmYpIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CisrICAgIHU2NCBkdmQsIGRpdiwgbW9kOworKworKyAgICBkdmQgPSAoKCh1NjQpIE0ueDg2LlJfRURYKSA8PCAzMikgfCBNLng4Ni5SX0VBWDsKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZGl2ID0gZHZkIC8gKHUzMikgczsKKysgICAgbW9kID0gZHZkICUgKHUzMikgczsKKysgICAgaWYgKGFicyhkaXYpID4gMHhmZmZmZmZmZikgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKyAjZWxzZQorLQlzMzIgZGl2ID0gMCwgbW9kOworLQlzMzIgaF9kdmQgPSBNLng4Ni5SX0VEWDsKKy0JdTMyIGxfZHZkID0gTS54ODYuUl9FQVg7CistCistCXUzMiBoX3MgPSBzOworLQl1MzIgbF9zID0gMDsKKy0JaW50IGNvdW50ZXIgPSAzMjsKKy0JaW50IGNhcnJ5OworLQkJCistCWlmIChzID09IDApIHsKKy0JCXg4NmVtdV9pbnRyX3JhaXNlKDApOworLQkJcmV0dXJuOworLQl9CistCWRvIHsKKy0JCWRpdiA8PD0gMTsKKy0JCWNhcnJ5ID0gKGxfZHZkID49IGxfcykgPyAwIDogMTsKKy0JCQorLQkJaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworLQkJCWhfcyA+Pj0gMTsKKy0JCQlsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworLQkJCWNvbnRpbnVlOworLQkJfSBlbHNlIHsKKy0JCQloX2R2ZCAtPSAoaF9zICsgY2FycnkpOworLQkJCWxfZHZkID0gY2FycnkgPyAoKDB4RkZGRkZGRkYgLSBsX3MpICsgbF9kdmQgKyAxKQorLQkJCQk6IChsX2R2ZCAtIGxfcyk7CistCQkJaF9zID4+PSAxOworLQkJCWxfcyA9IHMgPDwgKC0tY291bnRlcik7CistCQkJZGl2IHw9IDE7CistCQkJY29udGludWU7CistCQl9CistCQkKKy0JfSB3aGlsZSAoY291bnRlciA+IC0xKTsKKy0JLyogb3ZlcmZsb3cgKi8KKy0JaWYgKGhfZHZkIHx8IChsX2R2ZCA+IHMpKSB7CistCQl4ODZlbXVfaW50cl9yYWlzZSgwKTsKKy0JCXJldHVybjsKKy0JfQorLQltb2QgPSBsX2R2ZDsKKysgICAgczMyIGRpdiA9IDAsIG1vZDsKKysgICAgczMyIGhfZHZkID0gTS54ODYuUl9FRFg7CisrICAgIHUzMiBsX2R2ZCA9IE0ueDg2LlJfRUFYOworKworKyAgICB1MzIgaF9zID0gczsKKysgICAgdTMyIGxfcyA9IDA7CisrICAgIGludCBjb3VudGVyID0gMzI7CisrICAgIGludCBjYXJyeTsKKysKKysgICAgaWYgKHMgPT0gMCkgeworKyAgICAgICAgeDg2ZW11X2ludHJfcmFpc2UoMCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysgICAgZG8geworKyAgICAgICAgZGl2IDw8PSAxOworKyAgICAgICAgY2FycnkgPSAobF9kdmQgPj0gbF9zKSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKGhfZHZkIDwgKGhfcyArIGNhcnJ5KSkgeworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAgZWxzZSB7CisrICAgICAgICAgICAgaF9kdmQgLT0gKGhfcyArIGNhcnJ5KTsKKysgICAgICAgICAgICBsX2R2ZCA9IGNhcnJ5ID8gKCgweEZGRkZGRkZGIC0gbF9zKSArIGxfZHZkICsgMSkKKysgICAgICAgICAgICAgICAgOiAobF9kdmQgLSBsX3MpOworKyAgICAgICAgICAgIGhfcyA+Pj0gMTsKKysgICAgICAgICAgICBsX3MgPSBzIDw8ICgtLWNvdW50ZXIpOworKyAgICAgICAgICAgIGRpdiB8PSAxOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICB9IHdoaWxlIChjb3VudGVyID4gLTEpOworKyAgICAvKiBvdmVyZmxvdyAqLworKyAgICBpZiAoaF9kdmQgfHwgKGxfZHZkID4gcykpIHsKKysgICAgICAgIHg4NmVtdV9pbnRyX3JhaXNlKDApOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrICAgIG1vZCA9IGxfZHZkOworICNlbmRpZgorLQlDTEVBUl9GTEFHKEZfQ0YpOworLQlDTEVBUl9GTEFHKEZfQUYpOworLQlDTEVBUl9GTEFHKEZfU0YpOworLQlTRVRfRkxBRyhGX1pGKTsKKy0JQ09ORElUSU9OQUxfU0VUX0ZMQUcoUEFSSVRZKG1vZCAmIDB4ZmYpLCBGX1BGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0NGKTsKKysgICAgQ0xFQVJfRkxBRyhGX0FGKTsKKysgICAgQ0xFQVJfRkxBRyhGX1NGKTsKKysgICAgU0VUX0ZMQUcoRl9aRik7CisrICAgIENPTkRJVElPTkFMX1NFVF9GTEFHKFBBUklUWShtb2QgJiAweGZmKSwgRl9QRik7CisgCistCU0ueDg2LlJfRUFYID0gKHUzMilkaXY7CistCU0ueDg2LlJfRURYID0gKHUzMiltb2Q7CisrICAgIE0ueDg2LlJfRUFYID0gKHUzMikgZGl2OworKyAgICBNLng4Ni5SX0VEWCA9ICh1MzIpIG1vZDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorIEltcGxlbWVudHMgdGhlIElOIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBpbnMoaW50IHNpemUpCisrdm9pZAorK2lucyhpbnQgc2l6ZSkKKyB7CistCWludCBpbmMgPSBzaXplOworKyAgICBpbnQgaW5jID0gc2l6ZTsKKyAKKy0JaWYgKEFDQ0VTU19GTEFHKEZfREYpKSB7CistCQlpbmMgPSAtc2l6ZTsKKy0JfQorLQlpZiAoTS54ODYubW9kZSAmIChTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpKSB7CisrICAgIGlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICAgICAgaW5jID0gLXNpemU7CisrICAgIH0KKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogaW4gdW50aWwgQ1ggaXMgWkVSTy4gKi8KKy0JCXUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKy0JCQkJCSBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworKyAgICAgICAgdTMyIGNvdW50ID0gKChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgPworKyAgICAgICAgICAgICAgICAgICAgIE0ueDg2LlJfRUNYIDogTS54ODYuUl9DWCk7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmIpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmIpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbncpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbncpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKy0gICAgICAgICAgY2FzZSA0OgorKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCXN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKy0JCQkJCQkJCQkoKnN5c19pbmwpKE0ueDg2LlJfRFgpKTsKKy0JCQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICAgICAgICAgIHN0b3JlX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9ESSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKnN5c19pbmwpIChNLng4Ni5SX0RYKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfREkgKz0gaW5jOworKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistCQlNLng4Ni5SX0NYID0gMDsKKy0JCWlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworLQkJCU0ueDg2LlJfRUNYID0gMDsKKysgICAgICAgIE0ueDg2LlJfQ1ggPSAwOworKyAgICAgICAgaWYgKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSB7CisrICAgICAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworICAgICAgICAgfQorLQkJTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CistICAgIH0gZWxzZSB7CisrICAgICAgICBNLng4Ni5tb2RlICY9IH4oU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKTsKKysgICAgfQorKyAgICBlbHNlIHsKKyAgICAgICAgIHN3aXRjaCAoc2l6ZSkgeworLSAgICAgICAgICBjYXNlIDE6CistCQkJc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5iKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5iKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW53KShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDI6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW53KSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CistCQkJc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorLQkJCQkJCQkJKCpzeXNfaW5sKShNLng4Ni5SX0RYKSk7CisrICAgICAgICBjYXNlIDQ6CisrICAgICAgICAgICAgc3RvcmVfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX0RJLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzeXNfaW5sKSAoTS54ODYuUl9EWCkpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9ESSArPSBpbmM7CisrICAgICAgICBNLng4Ni5SX0RJICs9IGluYzsKKyAgICAgfQorIH0KKyAKK0BAIC0yNTE4LDYzICsyNjU0LDY1IEBAIHZvaWQgaW5zKGludCBzaXplKQorIFJFTUFSS1M6CisgSW1wbGVtZW50cyB0aGUgT1VUIHN0cmluZyBpbnN0cnVjdGlvbiBhbmQgc2lkZSBlZmZlY3RzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBvdXRzKGludCBzaXplKQorK3ZvaWQKKytvdXRzKGludCBzaXplKQorIHsKKyAgICAgaW50IGluYyA9IHNpemU7CisgCistCWlmIChBQ0NFU1NfRkxBRyhGX0RGKSkgeworKyAgICBpZiAoQUNDRVNTX0ZMQUcoRl9ERikpIHsKKyAgICAgICAgIGluYyA9IC1zaXplOworICAgICB9CistCWlmIChNLng4Ni5tb2RlICYgKFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSkpIHsKKysgICAgaWYgKE0ueDg2Lm1vZGUgJiAoU1lTTU9ERV9QUkVGSVhfUkVQRSB8IFNZU01PREVfUFJFRklYX1JFUE5FKSkgeworICAgICAgICAgLyogZG9udCBjYXJlIHdoZXRoZXIgUkVQRSBvciBSRVBORSAqLworICAgICAgICAgLyogb3V0IHVudGlsIENYIGlzIFpFUk8uICovCistCQl1MzIgY291bnQgPSAoKE0ueDg2Lm1vZGUgJiBTWVNNT0RFX1BSRUZJWF9EQVRBKSA/CistCQkJCQkgTS54ODYuUl9FQ1ggOiBNLng4Ni5SX0NYKTsKKysgICAgICAgIHUzMiBjb3VudCA9ICgoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpID8KKysgICAgICAgICAgICAgICAgICAgICBNLng4Ni5SX0VDWCA6IE0ueDg2LlJfQ1gpOworICAgICAgICAgc3dpdGNoIChzaXplKSB7CistICAgICAgICAgIGNhc2UgMToKKysgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkgeworLQkJCQkoKnN5c19vdXRiKShNLng4Ni5SX0RYLAorLQkJCQkJCSBmZXRjaF9kYXRhX2J5dGVfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKy0JCQkJTS54ODYuUl9TSSArPSBpbmM7CisrICAgICAgICAgICAgICAgICgqc3lzX291dGIpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICAgICAgICAgIE0ueDg2LlJfU0kgKz0gaW5jOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBicmVhazsKKyAKKy0gICAgICAgICAgY2FzZSAyOgorKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKSB7CistCQkJCSgqc3lzX291dHcpKE0ueDg2LlJfRFgsCistCQkJCQkJIGZldGNoX2RhdGFfd29yZF9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworLQkJCQlNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgKCpzeXNfb3V0dykgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgICAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDQ6CisrICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pIHsKKy0JCQkJKCpzeXNfb3V0bCkoTS54ODYuUl9EWCwKKy0JCQkJCQkgZmV0Y2hfZGF0YV9sb25nX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CistCQkJCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgICAgICAgICAoKnN5c19vdXRsKSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgICAgICAgICBNLng4Ni5SX1NJICs9IGluYzsKKysgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgfQorLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorLQkJTS54ODYuUl9DWCA9IDA7CistCQlpZiAoTS54ODYubW9kZSAmIFNZU01PREVfUFJFRklYX0RBVEEpIHsKKy0JCQlNLng4Ni5SX0VDWCA9IDA7CisrICAgICAgICBNLng4Ni5SX0NYID0gMDsKKysgICAgICAgIGlmIChNLng4Ni5tb2RlICYgU1lTTU9ERV9QUkVGSVhfREFUQSkgeworKyAgICAgICAgICAgIE0ueDg2LlJfRUNYID0gMDsKKyAgICAgICAgIH0KKy0JCU0ueDg2Lm1vZGUgJj0gfihTWVNNT0RFX1BSRUZJWF9SRVBFIHwgU1lTTU9ERV9QUkVGSVhfUkVQTkUpOworLSAgICB9IGVsc2UgeworKyAgICAgICAgTS54ODYubW9kZSAmPSB+KFNZU01PREVfUFJFRklYX1JFUEUgfCBTWVNNT0RFX1BSRUZJWF9SRVBORSk7CisrICAgIH0KKysgICAgZWxzZSB7CisgICAgICAgICBzd2l0Y2ggKHNpemUpIHsKKy0gICAgICAgICAgY2FzZSAxOgorLQkJCSgqc3lzX291dGIpKE0ueDg2LlJfRFgsCistCQkJCQkgZmV0Y2hfZGF0YV9ieXRlX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisrICAgICAgICBjYXNlIDE6CisrICAgICAgICAgICAgKCpzeXNfb3V0YikgKE0ueDg2LlJfRFgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoX2RhdGFfYnl0ZV9hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworICAgICAgICAgICAgIGJyZWFrOworLSAgICAgICAgICBjYXNlIDI6CistCQkJKCpzeXNfb3V0dykoTS54ODYuUl9EWCwKKy0JCQkJCSBmZXRjaF9kYXRhX3dvcmRfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKysgICAgICAgIGNhc2UgMjoKKysgICAgICAgICAgICAoKnN5c19vdXR3KSAoTS54ODYuUl9EWCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hfZGF0YV93b3JkX2FicyhNLng4Ni5SX0VTLCBNLng4Ni5SX1NJKSk7CisgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgIGNhc2UgNDoKKy0JCQkoKnN5c19vdXRsKShNLng4Ni5SX0RYLAorLQkJCQkJIGZldGNoX2RhdGFfbG9uZ19hYnMoTS54ODYuUl9FUywgTS54ODYuUl9TSSkpOworKyAgICAgICAgY2FzZSA0OgorKyAgICAgICAgICAgICgqc3lzX291dGwpIChNLng4Ni5SX0RYLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzKE0ueDg2LlJfRVMsIE0ueDg2LlJfU0kpKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKy0JCU0ueDg2LlJfU0kgKz0gaW5jOworKyAgICAgICAgTS54ODYuUl9TSSArPSBpbmM7CisgICAgIH0KKyB9CisgCitAQCAtMjU4NSwxMSArMjcyMywxMiBAQCBhZGRyCS0gQWRkcmVzcyB0byBmZXRjaCB3b3JkIGZyb20KKyBSRU1BUktTOgorIEZldGNoZXMgYSB3b3JkIGZyb20gZW11bGF0b3IgbWVtb3J5IHVzaW5nIGFuIGFic29sdXRlIGFkZHJlc3MuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy11MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKQorK3UxNgorK21lbV9hY2Nlc3Nfd29yZChpbnQgYWRkcikKKyB7CistREIoCWlmIChDSEVDS19NRU1fQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorLQlyZXR1cm4gKCpzeXNfcmR3KShhZGRyKTsKKysgICAgREIoaWYgKENIRUNLX01FTV9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX21lbV9hY2Nlc3MoYWRkcik7KQorKyAgICAgICAgcmV0dXJuICgqc3lzX3JkdykgKGFkZHIpOworIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTI1OTgsMTIgKzI3MzcsMTMgQEAgUHVzaGVzIGEgd29yZCBvbnRvIHRoZSBzdGFjay4KKyAKKyBOT1RFOiBEbyBub3QgaW5saW5lIHRoaXMsIGFzICgqc3lzX3dyWCkgaXMgYWxyZWFkeSBpbmxpbmUhCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIHB1c2hfd29yZCh1MTYgdykKKyt2b2lkCisrcHVzaF93b3JkKHUxNiB3KQorIHsKKy1EQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorLQkgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCistCU0ueDg2LlJfU1AgLT0gMjsKKy0JKCpzeXNfd3J3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1AsIHcpOworKyAgICBEQihpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCisrICAgICAgIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MoKTspCisrICAgICAgICBNLng4Ni5SX1NQIC09IDI7CisrICAgICgqc3lzX3dydykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCwgdyk7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMjYxMiwxMiArMjc1MiwxMyBAQCBQdXNoZXMgYSBsb25nIG9udG8gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfd3JYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgcHVzaF9sb25nKHUzMiB3KQorK3ZvaWQKKytwdXNoX2xvbmcodTMyIHcpCisgeworLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JTS54ODYuUl9TUCAtPSA0OworLQkoKnN5c193cmwpKCgodTMyKU0ueDg2LlJfU1MgPDwgNCkgICsgTS54ODYuUl9TUCwgdyk7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIE0ueDg2LlJfU1AgLT0gNDsKKysgICAgKCpzeXNfd3JsKSAoKCh1MzIpIE0ueDg2LlJfU1MgPDwgNCkgKyBNLng4Ni5SX1NQLCB3KTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjI2LDE1ICsyNzY3LDE2IEBAIFBvcHMgYSB3b3JkIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBwb3Bfd29yZCh2b2lkKQorK3UxNgorK3BvcF93b3JkKHZvaWQpCisgeworLQlyZWdpc3RlciB1MTYgcmVzOworKyAgICByZWdpc3RlciB1MTYgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmR3KSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDI7CistCXJldHVybiByZXM7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkdykgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gMjsKKysgICAgcmV0dXJuIHJlczsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0yNjQzLDE0ICsyNzg1LDE1IEBAIFBvcHMgYSBsb25nIGZyb20gdGhlIHN0YWNrLgorIAorIE5PVEU6IERvIG5vdCBpbmxpbmUgdGhpcywgYXMgKCpzeXNfcmRYKSBpcyBhbHJlYWR5IGlubGluZSEKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBwb3BfbG9uZyh2b2lkKQorK3UzMgorK3BvcF9sb25nKHZvaWQpCisgeworICAgICByZWdpc3RlciB1MzIgcmVzOworIAorLURCKAlpZiAoQ0hFQ0tfU1BfQUNDRVNTKCkpCistCSAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKy0JcmVzID0gKCpzeXNfcmRsKSgoKHUzMilNLng4Ni5SX1NTIDw8IDQpICArIE0ueDg2LlJfU1ApOworLQlNLng4Ni5SX1NQICs9IDQ7CisrICAgIERCKGlmIChDSEVDS19TUF9BQ0NFU1MoKSkKKysgICAgICAgeDg2ZW11X2NoZWNrX3NwX2FjY2VzcygpOykKKysgICAgICAgIHJlcyA9ICgqc3lzX3JkbCkgKCgodTMyKSBNLng4Ni5SX1NTIDw8IDQpICsgTS54ODYuUl9TUCk7CisrICAgIE0ueDg2LlJfU1AgKz0gNDsKKyAgICAgcmV0dXJuIHJlczsKKyB9CisgCitAQCAtMjY1OCw0NSArMjgwMSw1OSBAQCBEQigJaWYgKENIRUNLX1NQX0FDQ0VTUygpKQorIFJFTUFSS1M6CisgQ1BVSUQgdGFrZXMgRUFYL0VDWCBhcyBpbnB1dHMsIHdyaXRlcyBFQVgvRUJYL0VDWC9FRFggYXMgb3V0cHV0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIGNwdWlkICh2b2lkKQorLXsKKy0JdTMyIGZlYXR1cmUgPSBNLng4Ni5SX0VBWDsKKy0KKy0Jc3dpdGNoIChmZWF0dXJlKSB7CistCWNhc2UgMDoKKy0JCS8qIFJlZ2FyZGxlc3MgaWYgd2UgaGF2ZSByZWFsIGRhdGEgZnJvbSB0aGUgaGFyZHdhcmUsIHRoZSBlbXVsYXRvcgorLQkJICogd2lsbCBvbmx5IHN1cHBvcnQgdXB0byBmZWF0dXJlIDEsIHdoaWNoIHdlIHNldCBpbiByZWdpc3RlciBFQVguCistCQkgKiBSZWdpc3RlcnMgRUJYOkVEWDpFQ1ggY29udGFpbiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgQ1BVLgorLQkJICovCistCQlNLng4Ni5SX0VBWCA9IDE7CistCQkvKiBFQlg6RURYOkVDWCA9ICJHZW51aW5lSW50ZWwiICovCistCQlNLng4Ni5SX0VCWCA9IDB4NzU2ZTY1NDc7CistCQlNLng4Ni5SX0VEWCA9IDB4NDk2NTZlNjk7CistCQlNLng4Ni5SX0VDWCA9IDB4NmM2NTc0NmU7CistCQlicmVhazsKKy0JY2FzZSAxOgorLQkJLyogSWYgd2UgZG9uJ3QgaGF2ZSB4ODYgY29tcGF0aWJsZSBoYXJkd2FyZSwgd2UgcmV0dXJuIHZhbHVlcyBmcm9tIGFuCistCQkgKiBJbnRlbCA0ODZkeDQ7IHdoaWNoIHdhcyBvbmUgb2YgdGhlIGZpcnN0IHByb2Nlc3NvcnMgdG8gaGF2ZSBDUFVJRC4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAweDAwMDAwNDgwOworLQkJTS54ODYuUl9FQlggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FQ1ggPSAweDAwMDAwMDAwOworLQkJTS54ODYuUl9FRFggPSAweDAwMDAwMDAyOwkvKiBWTUUgKi8KKy0JCS8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCistCQkgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKy0JCSAqLworLQkJTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKy0JCWJyZWFrOworLQlkZWZhdWx0OgorLQkJLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworLQkJICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorLQkJICogbnVtYmVycy4KKy0JCSAqLworLQkJTS54ODYuUl9FQVggPSAwOworLQkJTS54ODYuUl9FQlggPSAwOworLQkJTS54ODYuUl9FQ1ggPSAwOworLQkJTS54ODYuUl9FRFggPSAwOworLQkJYnJlYWs7CistCX0KKy19Cisrdm9pZAorK2NwdWlkKHZvaWQpCisreworKyAgICB1MzIgZmVhdHVyZSA9IE0ueDg2LlJfRUFYOworIAorKyNpZmRlZiBYODZFTVVfSEFTX0hXX0NQVUlECisrICAgIC8qIElmIHRoZSBwbGF0Zm9ybSBhbGxvd3MgaXQsIHdlIHdpbGwgYmFzZSBvdXIgdmFsdWVzIG9uIHRoZSByZWFsCisrICAgICAqIHJlc3VsdHMgZnJvbSB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24uICBXZSBsaW1pdCBzdXBwb3J0IHRvIHRoZQorKyAgICAgKiBmaXJzdCB0d28gZmVhdHVyZXMsIGFuZCB0aGUgcmVzdWx0cyBvZiB0aG9zZSBhcmUgc2FuaXRpemVkLgorKyAgICAgKi8KKysgICAgaWYgKGZlYXR1cmUgPD0gMSkKKysgICAgICAgIGh3X2NwdWlkKCZNLng4Ni5SX0VBWCwgJk0ueDg2LlJfRUJYLCAmTS54ODYuUl9FQ1gsICZNLng4Ni5SX0VEWCk7CisrI2VuZGlmCisrCisrICAgIHN3aXRjaCAoZmVhdHVyZSkgeworKyAgICBjYXNlIDA6CisrICAgICAgICAvKiBSZWdhcmRsZXNzIGlmIHdlIGhhdmUgcmVhbCBkYXRhIGZyb20gdGhlIGhhcmR3YXJlLCB0aGUgZW11bGF0b3IKKysgICAgICAgICAqIHdpbGwgb25seSBzdXBwb3J0IHVwdG8gZmVhdHVyZSAxLCB3aGljaCB3ZSBzZXQgaW4gcmVnaXN0ZXIgRUFYLgorKyAgICAgICAgICogUmVnaXN0ZXJzIEVCWDpFRFg6RUNYIGNvbnRhaW4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIENQVS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAxOworKyNpZm5kZWYgWDg2RU1VX0hBU19IV19DUFVJRAorKyAgICAgICAgLyogRUJYOkVEWDpFQ1ggPSAiR2VudWluZUludGVsIiAqLworKyAgICAgICAgTS54ODYuUl9FQlggPSAweDc1NmU2NTQ3OworKyAgICAgICAgTS54ODYuUl9FRFggPSAweDQ5NjU2ZTY5OworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAweDZjNjU3NDZlOworKyNlbmRpZgorKyAgICAgICAgYnJlYWs7CisrICAgIGNhc2UgMToKKysjaWZuZGVmIFg4NkVNVV9IQVNfSFdfQ1BVSUQKKysgICAgICAgIC8qIElmIHdlIGRvbid0IGhhdmUgeDg2IGNvbXBhdGlibGUgaGFyZHdhcmUsIHdlIHJldHVybiB2YWx1ZXMgZnJvbSBhbgorKyAgICAgICAgICogSW50ZWwgNDg2ZHg0OyB3aGljaCB3YXMgb25lIG9mIHRoZSBmaXJzdCBwcm9jZXNzb3JzIHRvIGhhdmUgQ1BVSUQuCisrICAgICAgICAgKi8KKysgICAgICAgIE0ueDg2LlJfRUFYID0gMHgwMDAwMDQ4MDsKKysgICAgICAgIE0ueDg2LlJfRUJYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRUNYID0gMHgwMDAwMDAwMDsKKysgICAgICAgIE0ueDg2LlJfRURYID0gMHgwMDAwMDAwMjsgICAgICAgLyogVk1FICovCisrI2Vsc2UKKysgICAgICAgIC8qIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBoYXJkd2FyZSBDUFVJRCBpbnN0cnVjdGlvbiwgd2UgbWFrZSBzdXJlCisrICAgICAgICAgKiB0aGF0IHRoZSBmZWF0dXJlcyByZXBvcnRlZCBhcmUgbGltaXRlZCB0byBUU0MgYW5kIFZNRS4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FRFggJj0gMHgwMDAwMDAxMjsKKysjZW5kaWYKKysgICAgICAgIGJyZWFrOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgLyogRmluYWxseSwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgYWRkaXRpb25hbCBmZWF0dXJlcy4gIE1vc3QgQ1BVcworKyAgICAgICAgICogcmV0dXJuIGFsbCB6ZXJvcyB3aGVuIHF1ZXJpZWQgZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgZmVhdHVyZQorKyAgICAgICAgICogbnVtYmVycy4KKysgICAgICAgICAqLworKyAgICAgICAgTS54ODYuUl9FQVggPSAwOworKyAgICAgICAgTS54ODYuUl9FQlggPSAwOworKyAgICAgICAgTS54ODYuUl9FQ1ggPSAwOworKyAgICAgICAgTS54ODYuUl9FRFggPSAwOworKyAgICAgICAgYnJlYWs7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUvc3lzLmMgYi9saWJzL3g4NmVtdS9zeXMuYworaW5kZXggNGQ5MGVhMy4uYzUxNGRkZSAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3N5cy5jCisrKysgYi9saWJzL3g4NmVtdS9zeXMuYworQEAgLTQ3LDIyMyArNDcsMTMzIEBACisgI2luY2x1ZGUgIng4NmVtdS9wcmltX29wcy5oIgorICNpZm5kZWYgTk9fU1lTX0hFQURFUlMKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrI2VuZGlmCisgCistWDg2RU1VX3N5c0VudgkJX1g4NkVNVV9lbnY7CQkvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZSAqLworLVg4NkVNVV9pbnRyRnVuY3MJX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisrI2lmZGVmIF9fR05VQ19fCisgCistLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbXBsZW1lbnRhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy0jaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkKKy0vKiB0byBjb3BlIHdpdGggYnJva2VuIGVnY3MtMS4xLjIgOi0oKCgoICovCistCistI2RlZmluZSBBTFBIQV9VQUxPQURTCistLyoKKy0gKiBpbmxpbmUgZnVuY3Rpb25zIHRvIGRvIHVuYWxpZ25lZCBhY2Nlc3NlcworLSAqIGZyb20gbGludXgvaW5jbHVkZS9hc20tYWxwaGEvdW5hbGlnbmVkLmgKKy0gKi8KKy0KKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy0KKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistc3RydWN0IF9fdW5hX3U2NCB7IHVuc2lnbmVkIGxvbmcgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UzMiB7IHVuc2lnbmVkIGludCAgIHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07Cistc3RydWN0IF9fdW5hX3UxNiB7IHVuc2lnbmVkIHNob3J0IHggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IH07CistI2VuZGlmCisrLyogRGVmaW5lIHNvbWUgcGFja2VkIHN0cnVjdHVyZXMgdG8gdXNlIHdpdGggdW5hbGlnbmVkIGFjY2Vzc2VzICovCisrCisrc3RydWN0IF9fdW5hX3U2NCB7CisrICAgIHU2NCB4IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyt9OworK3N0cnVjdCBfX3VuYV91MzIgeworKyAgICB1MzIgeCBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisrfTsKKytzdHJ1Y3QgX191bmFfdTE2IHsKKysgICAgdTE2IHggX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworK307CisrCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBsb2FkcyAqLworIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbGRxX3UodW5zaWduZWQgbG9uZyAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1NjQKKytsZHFfdSh1NjQgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91NjQgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dHFsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRxaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoNysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkbF91KHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB1MzIKKytsZGxfdSh1MzIgKiBwKQorIHsKKy0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKChfX0dOVUNfXyA+IDIpIHx8IChfX0dOVUNfTUlOT1JfXyA+PSA5MSkpCistCWNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0JcmV0dXJuIHB0ci0+eDsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyOworLQlfX2FzbV9fKCJsZHFfdSAlMCwlM1xuXHQiCistCQkibGRxX3UgJTEsJTRcblx0IgorLQkJImV4dGxsICUwLCUyLCUwXG5cdCIKKy0JCSJleHRsaCAlMSwlMiwlMSIKKy0JCToiPSZyIiAocjEpLCAiPSZyIiAocjIpCistCQk6InIiIChyMTEpLAorLQkJICJtIiAoKnIxMSksCistCQkgIm0iICgqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoMysoY2hhciAqKSByMTEpKSk7CistCXJldHVybiByMSB8IHIyOworLSNlbmRpZgorKyAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICByZXR1cm4gcHRyLT54OworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGxkd191KHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0JY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlyZXR1cm4gcHRyLT54OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjI7CistCV9fYXNtX18oImxkcV91ICUwLCUzXG5cdCIKKy0JCSJsZHFfdSAlMSwlNFxuXHQiCistCQkiZXh0d2wgJTAsJTIsJTBcblx0IgorLQkJImV4dHdoICUxLCUyLCUxIgorLQkJOiI9JnIiIChyMSksICI9JnIiIChyMikKKy0JCToiciIgKHIxMSksCistCQkgIm0iICgqcjExKSwKKy0JCSAibSIgKCooY29uc3QgdW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpKTsKKy0JcmV0dXJuIHIxIHwgcjI7CistI2VuZGlmCisrICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICopIHA7CisrCisrICAgIHJldHVybiBwdHItPng7CisgfQorIAorLS8qCistICogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgCistICovCisrLyogRWxlbWVudGFsIHVuYWxpZ25lZCBzdG9yZXMgKi8KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0cV91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3FoICU2LCU3LCU1XG5cdCIKKy0JCSJpbnNxbCAlNiwlNywlNFxuXHQiCistCQkibXNrcWggJTMsJTcsJTNcblx0IgorLQkJIm1za3FsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSg3KyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3U2NCAqcHRyID0gKHN0cnVjdCBfX3VuYV91NjQgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKyAKKy1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN0bF91KHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGludCAqIHIxMSkKKytzdGF0aWMgX19pbmxpbmVfXyB2b2lkCisrc3RsX3UodTMyIHZhbCwgdTMyICogcCkKKyB7CistI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPiAyKSB8fCAoX19HTlVDX01JTk9SX18gPj0gOTEpKQorLQlzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistCXB0ci0+eCA9IHI1OworLSNlbHNlCistCXVuc2lnbmVkIGxvbmcgcjEscjIscjMscjQ7CistCistCV9fYXNtX18oImxkcV91ICUzLCUxXG5cdCIKKy0JCSJsZHFfdSAlMiwlMFxuXHQiCistCQkiaW5zbGggJTYsJTcsJTVcblx0IgorLQkJImluc2xsICU2LCU3LCU0XG5cdCIKKy0JCSJtc2tsaCAlMywlNywlM1xuXHQiCistCQkibXNrbGwgJTIsJTcsJTJcblx0IgorLQkJImJpcyAlMywlNSwlM1xuXHQiCistCQkiYmlzICUyLCU0LCUyXG5cdCIKKy0JCSJzdHFfdSAlMywlMVxuXHQiCistCQkic3RxX3UgJTIsJTAiCistCQk6Ij1tIiAoKnIxMSksCistCQkgIj1tIiAoKih1bnNpZ25lZCBsb25nICopKDMrKGNoYXIgKikgcjExKSksCistCQkgIj0mciIgKHIxKSwgIj0mciIgKHIyKSwgIj0mciIgKHIzKSwgIj0mciIgKHI0KQorLQkJOiJyIiAocjUpLCAiciIgKHIxMSkpOworLSNlbmRpZgorKyAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSBwOworKworKyAgICBwdHItPnggPSB2YWw7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc3R3X3UodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdm9pZAorK3N0d191KHUxNiB2YWwsIHUxNiAqIHApCisgeworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKF9fR05VQ19fID4gMikgfHwgKF9fR05VQ19NSU5PUl9fID49IDkxKSkKKy0Jc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcjExOworLQlwdHItPnggPSByNTsKKy0jZWxzZQorLQl1bnNpZ25lZCBsb25nIHIxLHIyLHIzLHI0OworLQorLQlfX2FzbV9fKCJsZHFfdSAlMywlMVxuXHQiCistCQkibGRxX3UgJTIsJTBcblx0IgorLQkJImluc3doICU2LCU3LCU1XG5cdCIKKy0JCSJpbnN3bCAlNiwlNywlNFxuXHQiCistCQkibXNrd2ggJTMsJTcsJTNcblx0IgorLQkJIm1za3dsICUyLCU3LCUyXG5cdCIKKy0JCSJiaXMgJTMsJTUsJTNcblx0IgorLQkJImJpcyAlMiwlNCwlMlxuXHQiCistCQkic3RxX3UgJTMsJTFcblx0IgorLQkJInN0cV91ICUyLCUwIgorLQkJOiI9bSIgKCpyMTEpLAorLQkJICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSgxKyhjaGFyICopIHIxMSkpLAorLQkJICI9JnIiIChyMSksICI9JnIiIChyMiksICI9JnIiIChyMyksICI9JnIiIChyNCkKKy0JCToiciIgKHI1KSwgInIiIChyMTEpKTsKKy0jZW5kaWYKKysgICAgc3RydWN0IF9fdW5hX3UxNiAqcHRyID0gKHN0cnVjdCBfX3VuYV91MTYgKikgcDsKKysKKysgICAgcHRyLT54ID0gdmFsOworIH0KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLworIAorLSNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICgoX19HTlVDX18gPCAzKSkgJiYgXAorLSAgICAgICAgICAgICAoZGVmaW5lZCAoX19pYTY0X18pIHx8IGRlZmluZWQgKGlhNjRfXykpCistI2RlZmluZSBJQTY0X1VBTE9BRFMKKy0vKgorLSAqIEVHQ1MgMS4xIGtub3dzIGFib3V0IGFyYml0cmFyeSB1bmFsaWduZWQgbG9hZHMuICBEZWZpbmUgc29tZQorLSAqIHBhY2tlZCBzdHJ1Y3R1cmVzIHRvIHRhbGsgYWJvdXQgc3VjaCB0aGluZ3Mgd2l0aC4KKy0gKi8KKy1zdHJ1Y3QgX191bmFfdTY0IHsgdW5zaWduZWQgbG9uZyAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTMyIHsgdW5zaWduZWQgaW50ICAgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy1zdHJ1Y3QgX191bmFfdTE2IHsgdW5zaWduZWQgc2hvcnQgeCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsgfTsKKy0KKy1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nCistX191bGRxIChjb25zdCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHU2NAorK2xkcV91KHU2NCAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHU2NCByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKKy11bGRsIChjb25zdCB1bnNpZ25lZCBpbnQgKiByMTEpCisrc3RhdGljIF9faW5saW5lX18gdTMyCisrbGRsX3UodTMyICogcCkKKyB7CistICAgIGNvbnN0IHN0cnVjdCBfX3VuYV91MzIgKnB0ciA9IChjb25zdCBzdHJ1Y3QgX191bmFfdTMyICopIHIxMTsKKy0gICAgcmV0dXJuIHB0ci0+eDsKKysgICAgdTMyIHJldDsKKysKKysgICAgbWVtbW92ZSgmcmV0LCBwLCBzaXplb2YoKnApKTsKKysgICAgcmV0dXJuIHJldDsKKyB9CisgCistc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZworLXVsZHcgKGNvbnN0IHVuc2lnbmVkIHNob3J0ICogcjExKQorK3N0YXRpYyBfX2lubGluZV9fIHUxNgorK2xkd191KHUxNiAqIHApCisgeworLSAgICBjb25zdCBzdHJ1Y3QgX191bmFfdTE2ICpwdHIgPSAoY29uc3Qgc3RydWN0IF9fdW5hX3UxNiAqKSByMTE7CistICAgIHJldHVybiBwdHItPng7CisrICAgIHUxNiByZXQ7CisrCisrICAgIG1lbW1vdmUoJnJldCwgcCwgc2l6ZW9mKCpwKSk7CisrICAgIHJldHVybiByZXQ7CisgfQorIAorIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKKy11c3RxICh1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nICogcjExKQorK3N0cV91KHU2NCB2YWwsIHU2NCAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTY0ICpwdHIgPSAoc3RydWN0IF9fdW5hX3U2NCAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1NjQgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0bCAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgaW50ICogcjExKQorK3N0bF91KHUzMiB2YWwsIHUzMiAqIHApCisgeworLSAgICBzdHJ1Y3QgX191bmFfdTMyICpwdHIgPSAoc3RydWN0IF9fdW5hX3UzMiAqKSByMTE7CistICAgIHB0ci0+eCA9IHI1OworKyAgICB1MzIgdG1wID0gdmFsOworKworKyAgICBtZW1tb3ZlKHAsICZ0bXAsIHNpemVvZigqcCkpOworIH0KKyAKKyBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCistdXN0dyAodW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgc2hvcnQgKiByMTEpCisrc3R3X3UodTE2IHZhbCwgdTE2ICogcCkKKyB7CistICAgIHN0cnVjdCBfX3VuYV91MTYgKnB0ciA9IChzdHJ1Y3QgX191bmFfdTE2ICopIHIxMTsKKy0gICAgcHRyLT54ID0gcjU7CisrICAgIHUxNiB0bXAgPSB2YWw7CisrCisrICAgIG1lbW1vdmUocCwgJnRtcCwgc2l6ZW9mKCpwKSk7CisgfQorIAorLSNlbmRpZgorKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19HTlVDX18gKi8KKysvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworKworK1g4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7ICAgICAgLyogR2xvYmFsIGVtdWxhdG9yIG1hY2hpbmUgc3RhdGUgKi8KKytYODZFTVVfaW50ckZ1bmNzIF9YODZFTVVfaW50clRhYlsyNTZdOworKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW1wbGVtZW50YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBQQVJBTUVURVJTOgorQEAgLTI3NSwxOSArMTg1LDIwIEBAIEJ5dGUgdmFsdWUgcmVhZCBmcm9tIGVtdWxhdG9yIG1lbW9yeS4KKyBSRU1BUktTOgorIFJlYWRzIGEgYnl0ZSB2YWx1ZSBmcm9tIHRoZSBlbXVsYXRvciBtZW1vcnkuIAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdTggWDg2QVBJIHJkYigKKy0gICAgdTMyIGFkZHIpCisrdTggWDg2QVBJCisrcmRiKHUzMiBhZGRyKQorIHsKKy0JdTggdmFsOworLQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAxKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JdmFsID0gKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistCXJldHVybiB2YWw7CisrICAgIHU4IHZhbDsKKysKKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMSkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisrICAgIHZhbCA9ICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzAwLDMyICsyMTEsMjcgQEAgV29yZCB2YWx1ZSByZWFkIGZyb20gZW11bGF0b3IgbWVtb3J5LgorIFJFTUFSS1M6CisgUmVhZHMgYSB3b3JkIHZhbHVlIGZyb20gdGhlIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUxNiBYODZBUEkgcmR3KAorLQl1MzIgYWRkcikKKyt1MTYgWDg2QVBJCisrcmR3KHUzMiBhZGRyKQorIHsKKy0JdTE2IHZhbCA9IDA7CisrICAgIHUxNiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gMikgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgxKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSB8CistCQkJICAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkpOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JCXZhbCA9IGxkd191KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmICBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgICB2YWwgPSB1bGR3KCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCQl2YWwgPSAqKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKTsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgIHZhbCA9ICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkcikgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistCQlEQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAyIC0+ICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIHJldHVybiB2YWw7CisrICAgICAgICB2YWwgPSBsZHdfdSgodTE2ICopIChNLm1lbV9iYXNlICsgYWRkcikpOworKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggMiAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgcmV0dXJuIHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zMzcsMzQgKzI0MywyOSBAQCBMb25nIHZhbHVlIHJlYWQgZnJvbSBlbXVsYXRvciBtZW1vcnkuCisgUkVNQVJLUzoKKyBSZWFkcyBhIGxvbmcgdmFsdWUgZnJvbSB0aGUgZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXUzMiBYODZBUEkgcmRsKAorLQl1MzIgYWRkcikKKyt1MzIgWDg2QVBJCisrcmRsKHUzMiBhZGRyKQorIHsKKy0JdTMyIHZhbCA9IDA7CisrICAgIHUzMiB2YWwgPSAwOworIAorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSA0KSB7CistCQlEQihwcmludGsoIm1lbV9yZWFkOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKysgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgREIocHJpbnRrKCJtZW1fcmVhZDogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICkKKysgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICB9CisgI2lmZGVmIF9fQklHX0VORElBTl9fCistCWlmIChhZGRyICYgMHgzKSB7CistCQl2YWwgPSAoKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpIDw8IDgpIHwKKy0JCQkgICgqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA8PCAxNikgfAorLQkJCSAgKCoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpIDw8IDI0KSk7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkJdmFsID0gbGRsX3UoKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2VsaWYgIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgICAgdmFsID0gdWxkbCgodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxzZQorLQkJdmFsID0gKih1MzIqKShNLm1lbV9iYXNlICsgYWRkcik7CisrICAgIGlmIChhZGRyICYgMHgzKSB7CisrICAgICAgICB2YWwgPSAoKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPDwgOCkgfAorKyAgICAgICAgICAgICAgICgqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDIpIDw8IDE2KSB8CisrICAgICAgICAgICAgICAgKCoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMykgPDwgMjQpKTsKKysgICAgfQorKyAgICBlbHNlCisgI2VuZGlmCistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggNCAtPiAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlyZXR1cm4gdmFsOworKyAgICAgICAgdmFsID0gbGRsX3UoKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDQgLT4gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIHJldHVybiB2YWw7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtMzc1LDE3ICsyNzYsMTcgQEAgdmFsCQktIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBXcml0ZXMgYSBieXRlIHZhbHVlIHRvIGVtdWxhdG9yIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdyYigKKy0JdTMyIGFkZHIsCistCXU4IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dyYih1MzIgYWRkciwgdTggdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX01FTV9UUkFDRSgpKQorLQkJcHJpbnRrKCIlIzA4eCAxIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCistICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKy0JCURCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7KQorLQkJSEFMVF9TWVMoKTsKKy0JCX0KKy0JKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgREIoaWYgKERFQlVHX01FTV9UUkFDRSgpKQorKyAgICAgICBwcmludGsoIiUjMDh4IDEgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKysgICAgICAgIGlmIChhZGRyID4gTS5tZW1fc2l6ZSAtIDEpIHsKKysgICAgICAgICAgICBEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOworKyAgICAgICAgICAgICAgICApCisrICAgICAgICAgICAgICAgIEhBTFRfU1lTKCk7CisrICAgICAgICB9CisrICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC0zOTYsMzAgKzI5NywyNCBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIHdvcmQgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZBUEkgd3J3KAorLQl1MzIgYWRkciwKKy0JdTE2IHZhbCkKKyt2b2lkIFg4NkFQSQorK3dydyh1MzIgYWRkciwgdTE2IHZhbCkKKyB7CistREIoCWlmIChERUJVR19NRU1fVFJBQ0UoKSkKKy0JCXByaW50aygiJSMwOHggMiA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorLQlpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CistCQlEQihwcmludGsoIm1lbV93cml0ZTogYWRkcmVzcyAlI2x4IG91dCBvZiByYW5nZSFcbiIsIGFkZHIpOykKKy0JCUhBTFRfU1lTKCk7CistCQl9CisrICAgIERCKGlmIChERUJVR19NRU1fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCIlIzA4eCAyIDwtICUjeFxuIiwgYWRkciwgdmFsKTspCisrICAgICAgICBpZiAoYWRkciA+IE0ubWVtX3NpemUgLSAyKSB7CisrICAgICAgICAgICAgREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTsKKysgICAgICAgICAgICAgICAgKQorKyAgICAgICAgICAgICAgICBIQUxUX1NZUygpOworKyAgICAgICAgfQorICNpZmRlZiBfX0JJR19FTkRJQU5fXworLQlpZiAoYWRkciAmIDB4MSkgeworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDEpID0gKHZhbCA+PiA4KSAmIDB4ZmY7CistCQl9CistCWVsc2UKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChBTFBIQV9VQUxPQURTKQorLQkgc3R3X3UodmFsLCh1MTYqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbGlmIGRlZmluZWQoSUE2NF9VQUxPQURTKQorLSAgICAgdXN0dyh2YWwsKHUxNiopKE0ubWVtX2Jhc2UgKyBhZGRyKSk7CistI2Vsc2UKKy0JICoodTE2KikoTS5tZW1fYmFzZSArIGFkZHIpID0gdmFsOworKyAgICBpZiAoYWRkciAmIDB4MSkgeworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAwKSA9ICh2YWwgPj4gMCkgJiAweGZmOworKyAgICAgICAgKih1OCAqKSAoTS5tZW1fYmFzZSArIGFkZHIgKyAxKSA9ICh2YWwgPj4gOCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0d191KHZhbCwgKHUxNiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00MzAsMzIgKzMyNSwyNiBAQCB2YWwJCS0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIFdyaXRlcyBhIGxvbmcgdmFsdWUgdG8gZW11bGF0b3IgbWVtb3J5LiAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2QVBJIHdybCgKKy0JdTMyIGFkZHIsCistCXUzMiB2YWwpCisrdm9pZCBYODZBUEkKKyt3cmwodTMyIGFkZHIsIHUzMiB2YWwpCisgeworLURCKAlpZiAoREVCVUdfTUVNX1RSQUNFKCkpCistCQlwcmludGsoIiUjMDh4IDQgPC0gJSN4XG4iLCBhZGRyLCB2YWwpOykKKy0JaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworLQkJREIocHJpbnRrKCJtZW1fd3JpdGU6IGFkZHJlc3MgJSNseCBvdXQgb2YgcmFuZ2UhXG4iLCBhZGRyKTspCistCQlIQUxUX1NZUygpOworLQkJfQorKyAgICBEQihpZiAoREVCVUdfTUVNX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiJSMwOHggNCA8LSAlI3hcbiIsIGFkZHIsIHZhbCk7KQorKyAgICAgICAgaWYgKGFkZHIgPiBNLm1lbV9zaXplIC0gNCkgeworKyAgICAgICAgICAgIERCKHByaW50aygibWVtX3dyaXRlOiBhZGRyZXNzICUjbHggb3V0IG9mIHJhbmdlIVxuIiwgYWRkcik7CisrICAgICAgICAgICAgICAgICkKKysgICAgICAgICAgICAgICAgSEFMVF9TWVMoKTsKKysgICAgICAgIH0KKyAjaWZkZWYgX19CSUdfRU5ESUFOX18KKy0JaWYgKGFkZHIgJiAweDEpIHsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDApID0gKHZhbCA+PiAgMCkgJiAweGZmOworLQkJKih1OCopKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+ICA4KSAmIDB4ZmY7CistCQkqKHU4KikoTS5tZW1fYmFzZSArIGFkZHIgKyAyKSA9ICh2YWwgPj4gMTYpICYgMHhmZjsKKy0JCSoodTgqKShNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworLQkJfQorLQllbHNlCistI2VuZGlmCistI2lmIGRlZmluZWQoQUxQSEFfVUFMT0FEUykKKy0JIHN0bF91KHZhbCwodTMyKikoTS5tZW1fYmFzZSArIGFkZHIpKTsKKy0jZWxpZiBkZWZpbmVkKElBNjRfVUFMT0FEUykKKy0gICAgIHVzdGwodmFsLCh1MzIqKShNLm1lbV9iYXNlICsgYWRkcikpOworLSNlbHNlCistCSAqKHUzMiopKE0ubWVtX2Jhc2UgKyBhZGRyKSA9IHZhbDsKKysgICAgaWYgKGFkZHIgJiAweDEpIHsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMCkgPSAodmFsID4+IDApICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMSkgPSAodmFsID4+IDgpICYgMHhmZjsKKysgICAgICAgICoodTggKikgKE0ubWVtX2Jhc2UgKyBhZGRyICsgMikgPSAodmFsID4+IDE2KSAmIDB4ZmY7CisrICAgICAgICAqKHU4ICopIChNLm1lbV9iYXNlICsgYWRkciArIDMpID0gKHZhbCA+PiAyNCkgJiAweGZmOworKyAgICB9CisrICAgIGVsc2UKKyAjZW5kaWYKKysgICAgICAgIHN0bF91KHZhbCwgKHUzMiAqKSAoTS5tZW1fYmFzZSArIGFkZHIpKTsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC00NjYsMTIgKzM1NSwxMiBAQCBSRVRVUk46CisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHJlYWQgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIGluYi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXN0YXRpYyB1OCBYODZBUEkgcF9pbmIoCistCVg4NkVNVV9waW9BZGRyIGFkZHIpCisrc3RhdGljIHU4IFg4NkFQSQorK3BfaW5iKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5iICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDgyLDEyICszNzEsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gd29yZCByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbncuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTE2IFg4NkFQSSBwX2ludygKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTE2IFg4NkFQSQorK3BfaW53KFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW53ICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNDk4LDEyICszODcsMTIgQEAgUkVUVVJOOgorIFJFTUFSS1M6CisgRGVmYXVsdCBQSU8gbG9uZyByZWFkIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBpbmwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdTMyIFg4NkFQSSBwX2lubCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkcikKKytzdGF0aWMgdTMyIFg4NkFQSQorK3BfaW5sKFg4NkVNVV9waW9BZGRyIGFkZHIpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorLQlyZXR1cm4gMDsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygiaW5sICUjMDR4IFxuIiwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuIDA7CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTEzLDEzICs0MDIsMTIgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyBieXRlIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRiLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0YigKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTggdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0YihYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpCisgeworLURCKAlpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKy0JCXByaW50aygib3V0YiAlIzAyeCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorLSAgICByZXR1cm47CisrICAgIERCKGlmIChERUJVR19JT19UUkFDRSgpKQorKyAgICAgICBwcmludGsoIm91dGIgJSMwMnggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKysgICAgICAgIHJldHVybjsKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0BAIC01MjksMTMgKzQxNywxMiBAQCB2YWwgICAgIC0gVmFsdWUgdG8gc3RvcmUKKyBSRU1BUktTOgorIERlZmF1bHQgUElPIHdvcmQgd3JpdGUgZnVuY3Rpb24uIERvZXNuJ3QgcGVyZm9ybSByZWFsIG91dHcuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy1zdGF0aWMgdm9pZCBYODZBUEkgcF9vdXR3KAorLQlYODZFTVVfcGlvQWRkciBhZGRyLAorLQl1MTYgdmFsKQorK3N0YXRpYyB2b2lkIFg4NkFQSQorK3Bfb3V0dyhYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKQorIHsKKy1EQigJaWYgKERFQlVHX0lPX1RSQUNFKCkpCistCQlwcmludGsoIm91dHcgJSMwNHggLT4gJSMwNHggXG4iLCB2YWwsIGFkZHIpOykKKy0JcmV0dXJuOworKyAgICBEQihpZiAoREVCVUdfSU9fVFJBQ0UoKSkKKysgICAgICAgcHJpbnRrKCJvdXR3ICUjMDR4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCisrICAgICAgICByZXR1cm47CisgfQorIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitAQCAtNTQ1LDI5ICs0MzIsMjkgQEAgdmFsICAgICAtIFZhbHVlIHRvIHN0b3JlCisgUkVNQVJLUzoKKyBEZWZhdWx0IFBJTyA7b25nIHdyaXRlIGZ1bmN0aW9uLiBEb2Vzbid0IHBlcmZvcm0gcmVhbCBvdXRsLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistc3RhdGljIHZvaWQgWDg2QVBJIHBfb3V0bCgKKy0JWDg2RU1VX3Bpb0FkZHIgYWRkciwKKy0JdTMyIHZhbCkKKytzdGF0aWMgdm9pZCBYODZBUEkKKytwX291dGwoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCkKKyB7CistREIoCWlmIChERUJVR19JT19UUkFDRSgpKQorLQkJcHJpbnRrKCJvdXRsICUjMDh4IC0+ICUjMDR4IFxuIiwgdmFsLCBhZGRyKTspCistICAgIHJldHVybjsKKysgICAgREIoaWYgKERFQlVHX0lPX1RSQUNFKCkpCisrICAgICAgIHByaW50aygib3V0bCAlIzA4eCAtPiAlIzA0eCBcbiIsIHZhbCwgYWRkcik7KQorKyAgICAgICAgcmV0dXJuOworIH0KKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR2xvYmFsIFZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorLXU4ICAJKFg4NkFQSVAgc3lzX3JkYikodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRiOworLXUxNiAJKFg4NkFQSVAgc3lzX3JkdykodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmR3OworLXUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpIAkJCSAgICAgICAgICAgID0gcmRsOworLXZvaWQgCShYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCkgCQkgICAgICAgICAgICA9IHdyYjsKKy12b2lkIAkoWDg2QVBJUCBzeXNfd3J3KSh1MzIgYWRkcix1MTYgdmFsKSAJICAgICAgICAgICAgPSB3cnc7Cistdm9pZCAJKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCkgCSAgICAgICAgICAgID0gd3JsOworLXU4ICAJKFg4NkFQSVAgc3lzX2luYikoWDg2RU1VX3Bpb0FkZHIgYWRkcikJICAgICAgICAgICAgPSBwX2luYjsKKy11MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpCSAgICAgICAgICAgID0gcF9pbnc7CistdTMyIAkoWDg2QVBJUCBzeXNfaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKSAgICAgICAgICAgICAgPSBwX2lubDsKKy12b2lkIAkoWDg2QVBJUCBzeXNfb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSAJPSBwX291dGI7Cistdm9pZCAJKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpCT0gcF9vdXR3OworLXZvaWQgCShYODZBUElQIHN5c19vdXRsKShYODZFTVVfcGlvQWRkciBhZGRyLCB1MzIgdmFsKQk9IHBfb3V0bDsKKyt1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcikgPSByZGI7CisrdTE2KFg4NkFQSVAgc3lzX3JkdykgKHUzMiBhZGRyKSA9IHJkdzsKKyt1MzIoWDg2QVBJUCBzeXNfcmRsKSAodTMyIGFkZHIpID0gcmRsOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpID0gd3JiOworK3ZvaWQgKFg4NkFQSVAgc3lzX3dydykgKHUzMiBhZGRyLCB1MTYgdmFsKSA9IHdydzsKKyt2b2lkIChYODZBUElQIHN5c193cmwpICh1MzIgYWRkciwgdTMyIHZhbCkgPSB3cmw7CisrCisrdTgoWDg2QVBJUCBzeXNfaW5iKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2luYjsKKyt1MTYoWDg2QVBJUCBzeXNfaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2ludzsKKyt1MzIoWDg2QVBJUCBzeXNfaW5sKSAoWDg2RU1VX3Bpb0FkZHIgYWRkcikgPSBwX2lubDsKKyt2b2lkIChYODZBUElQIHN5c19vdXRiKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKSA9IHBfb3V0YjsKKyt2b2lkIChYODZBUElQIHN5c19vdXR3KSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCkgPSBwX291dHc7Cisrdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpID0gcF9vdXRsOworIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCitAQCAtNTgwLDggKzQ2Nyw4IEBAIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBhY2Nlc3MKKyBtZW1vcnkgc3BhY2UsIGFsbG93aW5nIHRoZSB1c2VyIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZXNlIGZ1bmN0aW9ucworIGFuZCBob29rIHRoZW0gb3V0IGFzIG5lY2Vzc2FyeSBmb3IgdGhlaXIgYXBwbGljYXRpb24uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy12b2lkIFg4NkVNVV9zZXR1cE1lbUZ1bmNzKAorLQlYODZFTVVfbWVtRnVuY3MgKmZ1bmNzKQorK3ZvaWQKKytYODZFTVVfc2V0dXBNZW1GdW5jcyhYODZFTVVfbWVtRnVuY3MgKiBmdW5jcykKKyB7CisgICAgIHN5c19yZGIgPSBmdW5jcy0+cmRiOworICAgICBzeXNfcmR3ID0gZnVuY3MtPnJkdzsKK0BAIC02MDAsOCArNDg3LDggQEAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcG9pbnRlcnMgdG8gZnVuY3Rpb25zIHdoaWNoIGFjY2VzcworIEkvTyBzcGFjZSwgYWxsb3dpbmcgdGhlIHVzZXIgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlc2UgZnVuY3Rpb25zCisgYW5kIGhvb2sgdGhlbSBvdXQgYXMgbmVjZXNzYXJ5IGZvciB0aGVpciBhcHBsaWNhdGlvbi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3NldHVwUGlvRnVuY3MoCistCVg4NkVNVV9waW9GdW5jcyAqZnVuY3MpCisrdm9pZAorK1g4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKQorIHsKKyAgICAgc3lzX2luYiA9IGZ1bmNzLT5pbmI7CisgICAgIHN5c19pbncgPSBmdW5jcy0+aW53OworQEAgLTYyNCwxNyArNTExLDE3IEBAIGluIHRoZSBlbXVsYXRvciB2aWEgdGhlIGludGVycnVwdCB2ZWN0b3IgdGFibGUuIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbgorIHRvIGdldCBjb250cm9sIHdoZW4gdGhlIGNvZGUgYmVpbmcgZW11bGF0ZWQgZXhlY3V0ZXMgc3BlY2lmaWMgc29mdHdhcmUKKyBpbnRlcnJ1cHRzLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCistdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoCistCVg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyt2b2lkCisrWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSkKKyB7CisgICAgIGludCBpOworLSAgICAKKy0JZm9yIChpPTA7IGkgPCAyNTY7IGkrKykKKy0JCV9YODZFTVVfaW50clRhYltpXSA9IE5VTEw7CistCWlmIChmdW5jcykgeworLQkJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorLQkJCV9YODZFTVVfaW50clRhYltpXSA9IGZ1bmNzW2ldOworLQkJfQorKworKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisrICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBOVUxMOworKyAgICBpZiAoZnVuY3MpIHsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKysgICAgICAgICAgICBfWDg2RU1VX2ludHJUYWJbaV0gPSBmdW5jc1tpXTsKKysgICAgfQorIH0KKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTY0OSwxNSArNTM2LDE1IEBAIHNvIHRoYXQgdGhlIGNvZGUgaW4gdGhlIGVtdWxhdG9yIHdpbGwgY29udGludWUgcHJvY2Vzc2luZyB0aGUgc29mdHdhcmUKKyBpbnRlcnJ1cHQgYXMgcGVyIG5vcm1hbC4gVGhpcyBlc3NlbnRpYWxseSBhbGxvd3Mgc3lzdGVtIGNvZGUgdG8gYWN0aXZlbHkKKyBob29rIGFuZCBoYW5kbGUgY2VydGFpbiBzb2Z0d2FyZSBpbnRlcnJ1cHRzIGFzIG5lY2Vzc2FyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLXZvaWQgWDg2RU1VX3ByZXBhcmVGb3JJbnQoCistCWludCBudW0pCisrdm9pZAorK1g4NkVNVV9wcmVwYXJlRm9ySW50KGludCBudW0pCisgeworLSAgICBwdXNoX3dvcmQoKHUxNilNLng4Ni5SX0ZMRyk7CisrICAgIHB1c2hfd29yZCgodTE2KSBNLng4Ni5SX0ZMRyk7CisgICAgIENMRUFSX0ZMQUcoRl9JRik7CisgICAgIENMRUFSX0ZMQUcoRl9URik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0NTKTsKKyAgICAgTS54ODYuUl9DUyA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0ICsgMik7CisgICAgIHB1c2hfd29yZChNLng4Ni5SX0lQKTsKKyAgICAgTS54ODYuUl9JUCA9IG1lbV9hY2Nlc3Nfd29yZChudW0gKiA0KTsKKy0JTS54ODYuaW50ciA9IDA7CisrICAgIE0ueDg2LmludHIgPSAwOworIH0KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS92YWxpZGF0ZS5jIGIvbGlicy94ODZlbXUvdmFsaWRhdGUuYworaW5kZXggMjM5ZjZjMS4uNGMzNmUxZCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKKysrKyBiL2xpYnMveDg2ZW11L3ZhbGlkYXRlLmMKK0BAIC01OTEsNTggKzU5MSw2MiBAQAorICAgICAgICAgcHJpbnRrKCJwYXNzZWRcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQorIAorLXZvaWQgcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorK3ZvaWQKKytwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisgeworICAgICB2YV9saXN0IGFyZ3B0cjsKKysKKyAgICAgdmFfc3RhcnQoYXJncHRyLCBmbXQpOworICAgICB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncHRyKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgIHZhX2VuZChhcmdwdHIpOworIH0KKyAKKy1jaGFyICogcHJpbnRfZmxhZ3MoY2hhciAqYnVmLHVsb25nIGZsYWdzKQorK2NoYXIgKgorK3ByaW50X2ZsYWdzKGNoYXIgKmJ1ZiwgdWxvbmcgZmxhZ3MpCisgeworICAgICBjaGFyICpzZXBhcmF0b3IgPSAiIjsKKyAKKyAgICAgYnVmWzBdID0gMDsKKyAgICAgaWYgKGZsYWdzICYgRl9DRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiQ0YiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiQ0YiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1BGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJQRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJQRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfQUYpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIkFGIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIkFGIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKGZsYWdzICYgRl9aRikgeworLSAgICAgICAgc3RyY2F0KGJ1ZixzZXBhcmF0b3IpOworLSAgICAgICAgc3RyY2F0KGJ1ZiwiWkYiKTsKKysgICAgICAgIHN0cmNhdChidWYsIHNlcGFyYXRvcik7CisrICAgICAgICBzdHJjYXQoYnVmLCAiWkYiKTsKKyAgICAgICAgIHNlcGFyYXRvciA9ICIsIjsKKy0gICAgICAgIH0KKysgICAgfQorICAgICBpZiAoZmxhZ3MgJiBGX1NGKSB7CistICAgICAgICBzdHJjYXQoYnVmLHNlcGFyYXRvcik7CistICAgICAgICBzdHJjYXQoYnVmLCJTRiIpOworKyAgICAgICAgc3RyY2F0KGJ1Ziwgc2VwYXJhdG9yKTsKKysgICAgICAgIHN0cmNhdChidWYsICJTRiIpOworICAgICAgICAgc2VwYXJhdG9yID0gIiwiOworLSAgICAgICAgfQorKyAgICB9CisgICAgIGlmIChmbGFncyAmIEZfT0YpIHsKKy0gICAgICAgIHN0cmNhdChidWYsc2VwYXJhdG9yKTsKKy0gICAgICAgIHN0cmNhdChidWYsIk9GIik7CisrICAgICAgICBzdHJjYXQoYnVmLCBzZXBhcmF0b3IpOworKyAgICAgICAgc3RyY2F0KGJ1ZiwgIk9GIik7CisgICAgICAgICBzZXBhcmF0b3IgPSAiLCI7CistICAgICAgICB9CisrICAgIH0KKyAgICAgaWYgKHNlcGFyYXRvclswXSA9PSAwKQorLSAgICAgICAgc3RyY3B5KGJ1ZiwiTm9uZSIpOworKyAgICAgICAgc3RyY3B5KGJ1ZiwgIk5vbmUiKTsKKyAgICAgcmV0dXJuIGJ1ZjsKKyB9CisgCistaW50IG1haW4oaW50IGFyZ2MpCisraW50CisrbWFpbihpbnQgYXJnYykKKyB7CistICAgIHVsb25nICAgZGVmX2ZsYWdzOworKyAgICB1bG9uZyBkZWZfZmxhZ3M7CisgICAgIGludCB0cmFjZSA9IGZhbHNlOworIAorICAgICBpZiAoYXJnYyA+IDEpCitAQCAtNjczLDcgKzY3Nyw3IEBAIGludCBtYWluKGludCBhcmdjKQorICAgICBWQUxfTE9OR19MT05HX0JJTkFSWShjbXBfbG9uZyk7CisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRhYV9ieXRlKTsKKy0gICAgVkFMX0JZVEVfVU5BUlkoZGFzX2J5dGUpOyAgIC8vIEZhaWxzIGZvciAweDlBIChvdXQgb2YgcmFuZ2UgYW55d2F5KQorKyAgICBWQUxfQllURV9VTkFSWShkYXNfYnl0ZSk7ICAgLyogRmFpbHMgZm9yIDB4OUEgKG91dCBvZiByYW5nZSBhbnl3YXkpICovCisgCisgICAgIFZBTF9CWVRFX1VOQVJZKGRlY19ieXRlKTsKKyAgICAgVkFMX1dPUkRfVU5BUlkoZGVjX3dvcmQpOworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS5oIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK2luZGV4IDc5NWUyZDYuLjUwMWRkOTEgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11LmgKK0BAIC01Niw3ICs1Niw3IEBAIHR5cGVkZWYgaW50IFg4NkVNVV9waW9BZGRyOworIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmIFBBQ0sKKy0jIHByYWdtYQlQQUNLICAgLyogRG9uJ3QgcGFjayBzdHJ1Y3RzIHdpdGggZnVuY3Rpb24gcG9pbnRlcnMhICovCisrI3ByYWdtYQlQQUNLICAgICAgICAgICAgICAgICAgICAvKiBEb24ndCBwYWNrIHN0cnVjdHMgd2l0aCBmdW5jdGlvbiBwb2ludGVycyEgKi8KKyAjZW5kaWYKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorQEAgLTgxLDEzICs4MSwxMyBAQCBvdXR3ICAgIC0gRnVuY3Rpb24gdG8gd3JpdGUgYSB3b3JkIHRvIGFuIEkvTyBwb3J0Cisgb3V0bCAgICAtIEZ1bmN0aW9uIHRvIHdyaXRlIGEgZHdvcmQgdG8gYW4gSS9PIHBvcnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCBpbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLQl1MTYgCShYODZBUElQIGludykoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CistCXUzMiAJKFg4NkFQSVAgaW5sKShYODZFTVVfcGlvQWRkciBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0YikoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgb3V0dykoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQgCShYODZBUElQIG91dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworLQl9IFg4NkVNVV9waW9GdW5jczsKKysgICAgdTgoWDg2QVBJUCBpbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgaW53KSAoWDg2RU1VX3Bpb0FkZHIgYWRkcik7CisrICAgIHUzMihYODZBUElQIGlubCkgKFg4NkVNVV9waW9BZGRyIGFkZHIpOworKyAgICB2b2lkIChYODZBUElQIG91dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICB2b2lkIChYODZBUElQIG91dHcpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1MTYgdmFsKTsKKysgICAgdm9pZCAoWDg2QVBJUCBvdXRsKSAoWDg2RU1VX3Bpb0FkZHIgYWRkciwgdTMyIHZhbCk7CisrfSBYODZFTVVfcGlvRnVuY3M7CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBSRU1BUktTOgorQEAgLTExMiwxMyArMTEyLDEzIEBAIHdydyAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIHdvcmQgdG8gYW4gYWRkcmVzcworIHdybCAgICAJLSBGdW5jdGlvbiB0byB3cml0ZSBhIGR3b3JkIHRvIGFuIGFkZHJlc3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggIAkoWDg2QVBJUCByZGIpKHUzMiBhZGRyKTsKKy0JdTE2IAkoWDg2QVBJUCByZHcpKHUzMiBhZGRyKTsKKy0JdTMyIAkoWDg2QVBJUCByZGwpKHUzMiBhZGRyKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3JiKSh1MzIgYWRkciwgdTggdmFsKTsKKy0Jdm9pZCAJKFg4NkFQSVAgd3J3KSh1MzIgYWRkciwgdTE2IHZhbCk7CistCXZvaWQJKFg4NkFQSVAgd3JsKSh1MzIgYWRkciwgdTMyIHZhbCk7CistCX0gWDg2RU1VX21lbUZ1bmNzOworKyAgICB1OChYODZBUElQIHJkYikgKHUzMiBhZGRyKTsKKysgICAgdTE2KFg4NkFQSVAgcmR3KSAodTMyIGFkZHIpOworKyAgICB1MzIoWDg2QVBJUCByZGwpICh1MzIgYWRkcik7CisrICAgIHZvaWQgKFg4NkFQSVAgd3JiKSAodTMyIGFkZHIsIHU4IHZhbCk7CisrICAgIHZvaWQgKFg4NkFQSVAgd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICB2b2lkIChYODZBUElQIHdybCkgKHUzMiBhZGRyLCB1MzIgdmFsKTsKKyt9IFg4NkVNVV9tZW1GdW5jczsKKyAKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgSGVyZSBhcmUgdGhlIGRlZmF1bHQgbWVtb3J5IHJlYWQgYW5kIHdyaXRlCitAQCAtMTMyLDI5ICsxMzIsMjkgQEAgZXh0ZXJuIHZvaWQgWDg2QVBJIHdydyh1MzIgYWRkciwgdTE2IHZhbCk7CisgZXh0ZXJuIHZvaWQgWDg2QVBJIHdybCh1MzIgYWRkciwgdTMyIHZhbCk7CisgCisgI2lmZGVmIEVORF9QQUNLCistIyBwcmFnbWEJRU5EX1BBQ0sKKysjcHJhZ21hCUVORF9QQUNLCisgI2VuZGlmCisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistdHlwZWRlZiB2b2lkIChYODZBUElQIFg4NkVNVV9pbnRyRnVuY3MpKGludCBudW0pOworK3R5cGVkZWYgdm9pZCAoWDg2QVBJUCBYODZFTVVfaW50ckZ1bmNzKSAoaW50IG51bSk7CisgZXh0ZXJuIFg4NkVNVV9pbnRyRnVuY3MgX1g4NkVNVV9pbnRyVGFiWzI1Nl07CisgCisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwUGlvRnVuY3MoWDg2RU1VX3Bpb0Z1bmNzICpmdW5jcyk7Cistdm9pZCAJWDg2RU1VX3NldHVwSW50ckZ1bmNzKFg4NkVNVV9pbnRyRnVuY3MgZnVuY3NbXSk7Cistdm9pZCAJWDg2RU1VX3ByZXBhcmVGb3JJbnQoaW50IG51bSk7CisrICAgIHZvaWQgWDg2RU1VX3NldHVwTWVtRnVuY3MoWDg2RU1VX21lbUZ1bmNzICogZnVuY3MpOworKyAgICB2b2lkIFg4NkVNVV9zZXR1cFBpb0Z1bmNzKFg4NkVNVV9waW9GdW5jcyAqIGZ1bmNzKTsKKysgICAgdm9pZCBYODZFTVVfc2V0dXBJbnRyRnVuY3MoWDg2RU1VX2ludHJGdW5jcyBmdW5jc1tdKTsKKysgICAgdm9pZCBYODZFTVVfcHJlcGFyZUZvckludChpbnQgbnVtKTsKKyAKKyAvKiBkZWNvZGUuYyAqLworIAorLXZvaWQgCVg4NkVNVV9leGVjKHZvaWQpOworLXZvaWQgCVg4NkVNVV9oYWx0X3N5cyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZXhlYyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfaGFsdF9zeXModm9pZCk7CisgCisgI2lmZGVmCURFQlVHCisgI2RlZmluZQlIQUxUX1NZUygpCVwKK0BAIC0xNjYsOCArMTY2LDggQEAgdm9pZCAJWDg2RU1VX2hhbHRfc3lzKHZvaWQpOworIAorIC8qIERlYnVnIG9wdGlvbnMgKi8KKyAKKy0jZGVmaW5lIERFQlVHX0RFQ09ERV9GICAgICAgICAgIDB4MDAwMDAxIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCistI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAvKiBkdW1wIHJlZ3MgYmVmb3JlL2FmdGVyIGV4ZWN1dGlvbiAqLworKyNkZWZpbmUgREVCVUdfREVDT0RFX0YgICAgICAgICAgMHgwMDAwMDEgICAgICAgIC8qIHByaW50IGRlY29kZWQgaW5zdHJ1Y3Rpb24gICovCisrI2RlZmluZSBERUJVR19UUkFDRV9GICAgICAgICAgICAweDAwMDAwMiAgICAgICAgLyogZHVtcCByZWdzIGJlZm9yZS9hZnRlciBleGVjdXRpb24gKi8KKyAjZGVmaW5lIERFQlVHX1NURVBfRiAgICAgICAgICAgIDB4MDAwMDA0CisgI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRV9GICAgICAweDAwMDAwOAorICNkZWZpbmUgREVCVUdfQlJFQUtfRiAgICAgICAgICAgMHgwMDAwMTAKK0BAIC0xNzUsMjQgKzE3NSwyMyBAQCB2b2lkIAlYODZFTVVfaGFsdF9zeXModm9pZCk7CisgI2RlZmluZSBERUJVR19TQVZFX0lQX0NTX0YgICAgICAweDAwMDA0MAorICNkZWZpbmUgREVCVUdfRlNfRiAgICAgICAgICAgICAgMHgwMDAwODAKKyAjZGVmaW5lIERFQlVHX1BST0NfRiAgICAgICAgICAgIDB4MDAwMTAwCistI2RlZmluZSBERUJVR19TWVNJTlRfRiAgICAgICAgICAweDAwMDIwMCAvKiBiaW9zIHN5c3RlbSBpbnRlcnJ1cHRzLiAqLworKyNkZWZpbmUgREVCVUdfU1lTSU5UX0YgICAgICAgICAgMHgwMDAyMDAgICAgICAgIC8qIGJpb3Mgc3lzdGVtIGludGVycnVwdHMuICovCisgI2RlZmluZSBERUJVR19UUkFDRUNBTExfRiAgICAgICAweDAwMDQwMAorICNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVF9GICAgICAgMHgwMDA4MDAKKy0jZGVmaW5lIERFQlVHX01FTV9UUkFDRV9GICAgICAgIDB4MDAxMDAwIAorLSNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAgCisrI2RlZmluZSBERUJVR19NRU1fVFJBQ0VfRiAgICAgICAweDAwMTAwMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0VfRiAgICAgICAgMHgwMDIwMDAKKyAjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YgIDB4MDA0MDAwCistI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVF9GICAweDAwODAwMCAKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YgIDB4MDA4MDAwCisgI2RlZmluZSBERUJVR19FWElUICAgICAgICAgICAgICAweDAxMDAwMAorICNkZWZpbmUgREVCVUdfU1lTX0YgICAgICAgICAgICAgKERFQlVHX1NWQ19GfERFQlVHX0ZTX0Z8REVCVUdfUFJPQ19GKQorIAorLXZvaWQgCVg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworLXZvaWQgCVg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKy12b2lkIAlYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CistaW50IAlYODZFTVVfdHJhY2Vfb24odm9pZCk7CistaW50IAlYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV9yZWdzKHZvaWQpOworKyAgICB2b2lkIFg4NkVNVV90cmFjZV94cmVncyh2b2lkKTsKKysgICAgdm9pZCBYODZFTVVfZHVtcF9tZW1vcnkodTE2IHNlZywgdTE2IG9mZiwgdTMyIGFtdCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb24odm9pZCk7CisrICAgIGludCBYODZFTVVfdHJhY2Vfb2ZmKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVV9IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9YODZFTVVfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWJ1Zy5oIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK2luZGV4IDQ3YWFjYjYuLjM4NWI4MDQgMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZGVidWcuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlYnVnLmgKK0BAIC00NSw2NSArNDUsNjUgQEAKKyAKKyAjZGVmaW5lIENIRUNLX0lQX0ZFVENIX0YgICAgICAgICAgICAgICAgMHgxCisgI2RlZmluZSBDSEVDS19TUF9BQ0NFU1NfRiAgICAgICAgICAgICAgIDB4MgorLSNkZWZpbmUgQ0hFQ0tfTUVNX0FDQ0VTU19GICAgICAgICAgICAgICAweDQgLyp1c2luZyByZWd1bGFyIGxpbmVhciBwb2ludGVyICovCistI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTU19GICAgICAgICAgICAgIDB4OCAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0Ki8KKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1NfRiAgICAgICAgICAgICAgMHg0ICAgICAvKnVzaW5nIHJlZ3VsYXIgbGluZWFyIHBvaW50ZXIgKi8KKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTX0YgICAgICAgICAgICAgMHg4ICAgICAvKnVzaW5nIHNlZ21lbnQ6b2Zmc2V0ICovCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgQ0hFQ0tfSVBfRkVUQ0goKSAgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0lQX0ZFVENIX0YpCistIyBkZWZpbmUgQ0hFQ0tfU1BfQUNDRVNTKCkgICAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX1NQX0FDQ0VTU19GKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCistIyBkZWZpbmUgQ0hFQ0tfREFUQV9BQ0NFU1MoKSAgICAgICAgICAgCShNLng4Ni5jaGVjayAmIENIRUNLX0RBVEFfQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19JUF9GRVRDSCgpICAgICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfSVBfRkVUQ0hfRikKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpICAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19TUF9BQ0NFU1NfRikKKysjZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKSAgICAgICAgICAgIAkoTS54ODYuY2hlY2sgJiBDSEVDS19NRU1fQUNDRVNTX0YpCisrI2RlZmluZSBDSEVDS19EQVRBX0FDQ0VTUygpICAgICAgICAgICAJKE0ueDg2LmNoZWNrICYgQ0hFQ0tfREFUQV9BQ0NFU1NfRikKKyAjZWxzZQorLSMgZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKy0jIGRlZmluZSBDSEVDS19TUF9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX01FTV9BQ0NFU1MoKQorLSMgZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0lQX0ZFVENIKCkKKysjZGVmaW5lIENIRUNLX1NQX0FDQ0VTUygpCisrI2RlZmluZSBDSEVDS19NRU1fQUNDRVNTKCkKKysjZGVmaW5lIENIRUNLX0RBVEFfQUNDRVNTKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9GKQorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKy0jIGRlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0RJU0FTU0VNQkxFX0YpCistIyBkZWZpbmUgREVCVUdfQlJFQUsoKSAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19CUkVBS19GKQorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCistIyBkZWZpbmUgREVCVUdfU0FWRV9JUF9DUygpICAgICAoTS54ODYuZGVidWcgJiBERUJVR19TQVZFX0lQX0NTX0YpCistCistIyBkZWZpbmUgREVCVUdfRlMoKSAgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19GU19GKQorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1lTSU5UX0YpCistIyBkZWZpbmUgREVCVUdfVFJBQ0VDQUxMKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19UUkFDRUNBTExfRikKKy0jIGRlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCistIyBkZWZpbmUgREVCVUdfU1lTKCkgICAgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNfRikKKy0jIGRlZmluZSBERUJVR19NRU1fVFJBQ0UoKSAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX01FTV9UUkFDRV9GKQorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKy0jIGRlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIChNLng4Ni5kZWJ1ZyAmIERFQlVHX0RFQ09ERV9OT1BSSU5UX0YpCisrI2RlZmluZSBERUJVR19JTlNUUlVNRU5UKCkgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX0lOU1RSVU1FTlRfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX0YpCisrI2RlZmluZSBERUJVR19UUkFDRSgpICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFX0YpCisrI2RlZmluZSBERUJVR19TVEVQKCkgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NURVBfRikKKysjZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRElTQVNTRU1CTEVfRikKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfQlJFQUtfRikKKysjZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfU1ZDX0YpCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIChNLng4Ni5kZWJ1ZyAmIERFQlVHX1NBVkVfSVBfQ1NfRikKKysKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfRlNfRikKKysjZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfUFJPQ19GKQorKyNkZWZpbmUgREVCVUdfU1lTSU5UKCkgICAgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19TWVNJTlRfRikKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfVFJBQ0VDQUxMX0YpCisrI2RlZmluZSBERUJVR19UUkFDRUNBTExSRUdTKCkgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1RSQUNFQ0FMTF9SRUdTX0YpCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCShNLng4Ni5kZWJ1ZyAmIERFQlVHX1NZU19GKQorKyNkZWZpbmUgREVCVUdfTUVNX1RSQUNFKCkgICAgIAkoTS54ODYuZGVidWcgJiBERUJVR19NRU1fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJKE0ueDg2LmRlYnVnICYgREVCVUdfSU9fVFJBQ0VfRikKKysjZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgKE0ueDg2LmRlYnVnICYgREVCVUdfREVDT0RFX05PUFJJTlRfRikKKyAjZWxzZQorLSMgZGVmaW5lIERFQlVHX0lOU1RSVU1FTlQoKSAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERSgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NURVAoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RJU0FTU0VNQkxFKCkgICAJMAorLSMgZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NWQygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NBVkVfSVBfQ1MoKSAgICAgMAorLSMgZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1BST0MoKSAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1NZU0lOVCgpICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX1RSQUNFQ0FMTFJFR1MoKSAJMAorLSMgZGVmaW5lIERFQlVHX1NZUygpICAgICAgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0lPX1RSQUNFKCkgICAgICAJMAorLSMgZGVmaW5lIERFQlVHX0RFQ09ERV9OT1BSSU5UKCkgMAorKyNkZWZpbmUgREVCVUdfSU5TVFJVTUVOVCgpICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREUoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1RFUCgpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19ESVNBU1NFTUJMRSgpICAgCTAKKysjZGVmaW5lIERFQlVHX0JSRUFLKCkgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfU1ZDKCkgICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TQVZFX0lQX0NTKCkgICAgIDAKKysjZGVmaW5lIERFQlVHX0ZTKCkgICAgICAgICAgICAJMAorKyNkZWZpbmUgREVCVUdfUFJPQygpICAgICAgICAgIAkwCisrI2RlZmluZSBERUJVR19TWVNJTlQoKSAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX1RSQUNFQ0FMTCgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfVFJBQ0VDQUxMUkVHUygpIAkwCisrI2RlZmluZSBERUJVR19TWVMoKSAgICAgICAgICAgCTAKKysjZGVmaW5lIERFQlVHX01FTV9UUkFDRSgpICAgICAJMAorKyNkZWZpbmUgREVCVUdfSU9fVFJBQ0UoKSAgICAgIAkwCisrI2RlZmluZSBERUJVR19ERUNPREVfTk9QUklOVCgpIDAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKyAKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpICAgICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYoeCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpICAJaWYgKERFQlVHX0RFQ09ERSgpKSBcCisgCQkJCQkJCQkJeDg2ZW11X2RlY29kZV9wcmludGYyKHgseSkKKyAKKyAvKgorQEAgLTEyMywxMCArMTIzLDEwIEBACisgCQlNLng4Ni5zYXZlZF9pcCA9IHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgCX0KKyAjZWxzZQorLSMgZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCistIyBkZWZpbmUgREVDT0RFX1BSSU5URih4KQorLSMgZGVmaW5lIERFQ09ERV9QUklOVEYyKHgseSkKKy0jIGRlZmluZSBTQVZFX0lQX0NTKHgseSkKKysjZGVmaW5lIElOQ19ERUNPREVEX0lOU1RfTEVOKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGKHgpCisrI2RlZmluZSBERUNPREVfUFJJTlRGMih4LHkpCisrI2RlZmluZSBTQVZFX0lQX0NTKHgseSkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKK0BAIC0xMzcsMTMgKzEzNywxMyBAQAorIAl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAJaWYgKERFQlVHX1RSQUNFKCkgfHwgREVCVUdfREVDT0RFKCkpIFg4NkVNVV90cmFjZV9yZWdzKCkKKyAjZWxzZQorLSMgZGVmaW5lIFRSQUNFX1JFR1MoKQorKyNkZWZpbmUgVFJBQ0VfUkVHUygpCisgI2VuZGlmCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU0lOR0xFX1NURVAoKQkJaWYgKERFQlVHX1NURVAoKSkgeDg2ZW11X3NpbmdsZV9zdGVwKCkKKysjZGVmaW5lIFNJTkdMRV9TVEVQKCkJCWlmIChERUJVR19TVEVQKCkpIHg4NmVtdV9zaW5nbGVfc3RlcCgpCisgI2Vsc2UKKy0jIGRlZmluZSBTSU5HTEVfU1RFUCgpCisrI2RlZmluZSBTSU5HTEVfU1RFUCgpCisgI2VuZGlmCisgCisgI2RlZmluZSBUUkFDRV9BTkRfU1RFUCgpCVwKK0BAIC0xNTEsMjkgKzE1MSwyOSBAQAorIAlTSU5HTEVfU1RFUCgpCisgCisgI2lmZGVmIERFQlVHCistIyBkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUigpCQlFbmRPZlRoZUluc3RydWN0aW9uUHJvY2VkdXJlOiB4ODZlbXVfZW5kX2luc3RyKCk7CistIyBkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkJeDg2ZW11X2VuZF9pbnN0cigpOworKyNkZWZpbmUgU1RBUlRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSKCkJCUVuZE9mVGhlSW5zdHJ1Y3Rpb25Qcm9jZWR1cmU6IHg4NmVtdV9lbmRfaW5zdHIoKTsKKysjZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCXg4NmVtdV9lbmRfaW5zdHIoKTsKKyAjZWxzZQorLSMgZGVmaW5lIFNUQVJUX09GX0lOU1RSKCkKKy0jIGRlZmluZSBFTkRfT0ZfSU5TVFIoKQorLSMgZGVmaW5lIEVORF9PRl9JTlNUUl9OT19UUkFDRSgpCisrI2RlZmluZSBTVEFSVF9PRl9JTlNUUigpCisrI2RlZmluZSBFTkRfT0ZfSU5TVFIoKQorKyNkZWZpbmUgRU5EX09GX0lOU1RSX05PX1RSQUNFKCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgREVCVUcKKy0jIGRlZmluZSAgQ0FMTF9UUkFDRSh1LHYsdyx4LHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgIENBTExfVFJBQ0UodSx2LHcseCxzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6IENBTEwgJXMlMDR4OiUwNHhcbiIsIHUgLCB2LCBzLCB3LCB4KTsKKy0jIGRlZmluZSBSRVRVUk5fVFJBQ0Uobix1LHYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTFJFR1MoKSkJCQkJCQkJCQlcCisgCQl4ODZlbXVfZHVtcF9yZWdzKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAJaWYgKERFQlVHX1RSQUNFQ0FMTCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorIAkJcHJpbnRrKCIlMDR4OiUwNHg6ICVzXG4iLHUsdixuKTsKKyAjZWxzZQorLSMgZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorLSMgZGVmaW5lIFJFVFVSTl9UUkFDRShuLHUsdikKKysjZGVmaW5lIENBTExfVFJBQ0UodSx2LHcseCxzKQorKyNkZWZpbmUgUkVUVVJOX1RSQUNFKG4sdSx2KQorICNlbmRpZgorIAorICNpZmRlZiBERUJVRworQEAgLTE4NSwyNiArMTg1LDI1IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11X2luY19kZWNvZGVkX2luc3RfbGVuIChpbnQgeCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2RlY29kZV9wcmludGYgKGNoYXIgKngpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmMiAoY2hhciAqeCwgaW50IHkpOworLWV4dGVybiB2b2lkIHg4NmVtdV9qdXN0X2Rpc2Fzc2VtYmxlICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfc2luZ2xlX3N0ZXAgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9lbmRfaW5zdHIgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3JlZ3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9kdW1wX3hyZWdzICh2b2lkKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVfcHJpbnRfaW50X3ZlY3QgKHUxNiBpdik7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2luc3RydW1lbnRfaW5zdHJ1Y3Rpb24gKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19pcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19zcF9hY2Nlc3MgKHZvaWQpOworLWV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19tZW1fYWNjZXNzICh1MzIgcCk7CistZXh0ZXJuIHZvaWQgeDg2ZW11X2NoZWNrX2RhdGFfYWNjZXNzICh1aW50IHMsIHVpbnQgbyk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbmNfZGVjb2RlZF9pbnN0X2xlbihpbnQgeCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9kZWNvZGVfcHJpbnRmKGNvbnN0IGNoYXIgKngpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZGVjb2RlX3ByaW50ZjIoY29uc3QgY2hhciAqeCwgaW50IHkpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfanVzdF9kaXNhc3NlbWJsZSh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3NpbmdsZV9zdGVwKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZW5kX2luc3RyKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF9yZWdzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfZHVtcF94cmVncyh2b2lkKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11X3ByaW50X2ludF92ZWN0KHUxNiBpdik7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9pbnN0cnVtZW50X2luc3RydWN0aW9uKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfaXBfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfc3BfYWNjZXNzKHZvaWQpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVfY2hlY2tfbWVtX2FjY2Vzcyh1MzIgcCk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdV9jaGVja19kYXRhX2FjY2Vzcyh1aW50IHMsIHVpbnQgbyk7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfREVCVUdfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVCVUdfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAoraW5kZXggNjFjZDRkYy4uNDlhMWY3YiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9kZWNvZGUuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L2RlY29kZS5oCitAQCAtNTIsMzcgKzUyLDM2IEBACisgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbiBQcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdm9pZCAJeDg2ZW11X2ludHJfcmFpc2UgKHU4IHR5cGUpOworLXZvaWQgICAgZmV0Y2hfZGVjb2RlX21vZHJtIChpbnQgKm1vZCxpbnQgKnJlZ2gsaW50ICpyZWdsKTsKKy11OCAgICAgIGZldGNoX2J5dGVfaW1tICh2b2lkKTsKKy11MTYgICAgIGZldGNoX3dvcmRfaW1tICh2b2lkKTsKKy11MzIgICAgIGZldGNoX2xvbmdfaW1tICh2b2lkKTsKKy11OCAgICAgIGZldGNoX2RhdGFfYnl0ZSAodWludCBvZmZzZXQpOworLXU4ICAgICAgZmV0Y2hfZGF0YV9ieXRlX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CistdTE2ICAgICBmZXRjaF9kYXRhX3dvcmQgKHVpbnQgb2Zmc2V0KTsKKy11MTYgICAgIGZldGNoX2RhdGFfd29yZF9hYnMgKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworLXUzMiAgICAgZmV0Y2hfZGF0YV9sb25nICh1aW50IG9mZnNldCk7CistdTMyICAgICBmZXRjaF9kYXRhX2xvbmdfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKy12b2lkICAgIHN0b3JlX2RhdGFfYnl0ZSAodWludCBvZmZzZXQsIHU4IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX2J5dGVfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV93b3JkICh1aW50IG9mZnNldCwgdTE2IHZhbCk7Cistdm9pZCAgICBzdG9yZV9kYXRhX3dvcmRfYWJzICh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0LCB1MTYgdmFsKTsKKy12b2lkICAgIHN0b3JlX2RhdGFfbG9uZyAodWludCBvZmZzZXQsIHUzMiB2YWwpOworLXZvaWQgICAgc3RvcmVfZGF0YV9sb25nX2FicyAodWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTMyIHZhbCk7CistdTgqIAlkZWNvZGVfcm1fYnl0ZV9yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fd29yZF9yZWdpc3RlcihpbnQgcmVnKTsKKy11MzIqIAlkZWNvZGVfcm1fbG9uZ19yZWdpc3RlcihpbnQgcmVnKTsKKy11MTYqIAlkZWNvZGVfcm1fc2VnX3JlZ2lzdGVyKGludCByZWcpOworLXUzMglkZWNvZGVfcm0wMF9hZGRyZXNzKGludCBybSk7CistdTMyCWRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKy11MzIJZGVjb2RlX3JtMTBfYWRkcmVzcyhpbnQgcm0pOworLXUzMglkZWNvZGVfc2liX2FkZHJlc3MoaW50IHNpYiwgaW50IG1vZCk7CisrICAgIHZvaWQgeDg2ZW11X2ludHJfcmFpc2UodTggdHlwZSk7CisrICAgIHZvaWQgZmV0Y2hfZGVjb2RlX21vZHJtKGludCAqbW9kLCBpbnQgKnJlZ2gsIGludCAqcmVnbCk7CisrICAgIHU4IGZldGNoX2J5dGVfaW1tKHZvaWQpOworKyAgICB1MTYgZmV0Y2hfd29yZF9pbW0odm9pZCk7CisrICAgIHUzMiBmZXRjaF9sb25nX2ltbSh2b2lkKTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0KTsKKysgICAgdTggZmV0Y2hfZGF0YV9ieXRlX2Ficyh1aW50IHNlZ21lbnQsIHVpbnQgb2Zmc2V0KTsKKysgICAgdTE2IGZldGNoX2RhdGFfd29yZCh1aW50IG9mZnNldCk7CisrICAgIHUxNiBmZXRjaF9kYXRhX3dvcmRfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQpOworKyAgICB1MzIgZmV0Y2hfZGF0YV9sb25nKHVpbnQgb2Zmc2V0KTsKKysgICAgdTMyIGZldGNoX2RhdGFfbG9uZ19hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9ieXRlKHVpbnQgb2Zmc2V0LCB1OCB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfYnl0ZV9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTggdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX3dvcmQodWludCBvZmZzZXQsIHUxNiB2YWwpOworKyAgICB2b2lkIHN0b3JlX2RhdGFfd29yZF9hYnModWludCBzZWdtZW50LCB1aW50IG9mZnNldCwgdTE2IHZhbCk7CisrICAgIHZvaWQgc3RvcmVfZGF0YV9sb25nKHVpbnQgb2Zmc2V0LCB1MzIgdmFsKTsKKysgICAgdm9pZCBzdG9yZV9kYXRhX2xvbmdfYWJzKHVpbnQgc2VnbWVudCwgdWludCBvZmZzZXQsIHUzMiB2YWwpOworKyAgICB1OCAqZGVjb2RlX3JtX2J5dGVfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3dvcmRfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUzMiAqZGVjb2RlX3JtX2xvbmdfcmVnaXN0ZXIoaW50IHJlZyk7CisrICAgIHUxNiAqZGVjb2RlX3JtX3NlZ19yZWdpc3RlcihpbnQgcmVnKTsKKysgICAgdTMyIGRlY29kZV9ybTAwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTAxX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9ybTEwX2FkZHJlc3MoaW50IHJtKTsKKysgICAgdTMyIGRlY29kZV9zaWJfYWRkcmVzcyhpbnQgc2liLCBpbnQgbW9kKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9ERUNPREVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfREVDT0RFX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmggYi9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKK2luZGV4IDVmYjI3MTQuLjFjMTE0OTggMTAwNjQ0CistLS0gYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1LmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHUuaAorQEAgLTQwLDIyICs0MCwyMSBAQAorICNkZWZpbmUgX19YODZFTVVfRlBVX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCisgLyogdGhlc2UgaGF2ZSB0byBiZSBkZWZpbmVkLCB3aGV0aGVyIDgwODcgc3VwcG9ydCBjb21waWxlZCBpbiBvciBub3QuICovCisgCistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kOCAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q5ICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGEgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYiAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RjICh1OCBvcDEpOworLWV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGQgKHU4IG9wMSk7CistZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZSAodTggb3AxKTsKKy1leHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RmICh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2Q4KHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZDkodTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kYSh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RiKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGModTggb3AxKTsKKysgICAgZXh0ZXJuIHZvaWQgeDg2ZW11T3BfZXNjX2NvcHJvY2Vzc19kZCh1OCBvcDEpOworKyAgICBleHRlcm4gdm9pZCB4ODZlbXVPcF9lc2NfY29wcm9jZXNzX2RlKHU4IG9wMSk7CisrICAgIGV4dGVybiB2b2lkIHg4NmVtdU9wX2VzY19jb3Byb2Nlc3NfZGYodTggb3AxKTsKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistfSAgICAgICAgICAgICAgICAgICAgICAgCQkJLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAJKi8KKyt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgICAgICAgICAqLworICNlbmRpZgorLQorLSNlbmRpZiAvKiBfX1g4NkVNVV9GUFVfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvZnB1X3JlZ3MuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitpbmRleCBlNTliODA3Li41YTc4MGU2IDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L2ZwdV9yZWdzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9mcHVfcmVncy5oCitAQCAtNDIsMjMgKzQyLDIzIEBACisgI2lmZGVmIFg4Nl9GUFVfU1VQUE9SVAorIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qIEJhc2ljIDgwODcgcmVnaXN0ZXIgY2FuIGhvbGQgYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiAqLworIAorIHVuaW9uIHg4Nl9mcHVfcmVnX3UgeworLSAgICBzOCAgICAgICAgICAgICAgICAgIHRlbmJ5dGVzWzEwXTsKKy0gICAgZG91YmxlICAgICAgICAgICAgICBkdmFsOworLSAgICBmbG9hdCAgICAgICAgICAgICAgIGZ2YWw7CistICAgIHMxNiAgICAgICAgICAgICAgICAgc3ZhbDsKKy0gICAgczMyICAgICAgICAgICAgICAgICBsdmFsOworLQl9OworKyAgICBzOCB0ZW5ieXRlc1sxMF07CisrICAgIGRvdWJsZSBkdmFsOworKyAgICBmbG9hdCBmdmFsOworKyAgICBzMTYgc3ZhbDsKKysgICAgczMyIGx2YWw7CisrfTsKKyAKKyBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeworLQl1bmlvbiB4ODZfZnB1X3JlZ191IHJlZzsKKy0JY2hhciAgICAgICAgICAgICAgICB0YWc7CistCX07CisrICAgIHVuaW9uIHg4Nl9mcHVfcmVnX3UgcmVnOworKyAgICBjaGFyIHRhZzsKKyt9OworIAorIC8qCisgICogU2luY2Ugd2UgYXJlIG5vdCBnb2luZyB0byB3b3JyeSBhYm91dCB0aGUgcHJvYmxlbXMgb2YgYWxpYXNpbmcKK0BAIC04MywxNCArODMsMTQgQEAgc3RydWN0IHg4Nl9mcHVfcmVnIHsKKyAjZGVmaW5lICBYODZfRlBVX1NUS1RPUCAgMAorIAorIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CistICAgIHN0cnVjdCB4ODZfZnB1X3JlZyAgeDg2X2ZwdV9zdGFja1s4XTsKKy0gICAgaW50ICAgICAgICAgICAgICAgICB4ODZfZnB1X2ZsYWdzOworLSAgICBpbnQgICAgICAgICAgICAgICAgIHg4Nl9mcHVfY29uZmlnOyAgICAgICAgIC8qIHJvdW5kaW5nIG1vZGVzLCBldGMuICovCistICAgIHNob3J0ICAgICAgICAgICAgICAgeDg2X2ZwdV90b3MsIHg4Nl9mcHVfYm9zOworLQl9OworKyAgICBzdHJ1Y3QgeDg2X2ZwdV9yZWcgeDg2X2ZwdV9zdGFja1s4XTsKKysgICAgaW50IHg4Nl9mcHVfZmxhZ3M7CisrICAgIGludCB4ODZfZnB1X2NvbmZpZzsgICAgICAgICAvKiByb3VuZGluZyBtb2RlcywgZXRjLiAqLworKyAgICBzaG9ydCB4ODZfZnB1X3RvcywgeDg2X2ZwdV9ib3M7CisrfTsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKgorQEAgLTEwNCwxNiArMTA0LDE2IEBAIHN0cnVjdCB4ODZfZnB1X3JlZ2lzdGVycyB7CisgICogaW5zdHJ1Y3Rpb25zLgorICAqLworIAorLSNlbmRpZiAvKiBYODZfRlBVX1NVUFBPUlQgKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFg4Nl9GUFVfU1VQUE9SVCAqLworIAorICNpZmRlZiBERUJVRworLSMgZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpICAgICAJXAorKyNkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkgICAgIAlcCisgCURFQ09ERV9QUklOVEYodFsobW9kPDwzKSsocmgpXSk7CistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIyNTYodCxtb2QscmgscmwpICAgIAlcCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkgICAgCVwKKyAJREVDT0RFX1BSSU5URih0Wyhtb2Q8PDYpKyhyaDw8MykrKHJsKV0pOworICNlbHNlCistIyBkZWZpbmUgREVDT0RFX1BSSU5USU5TVFIzMih0LG1vZCxyaCxybCkKKy0jIGRlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKysjZGVmaW5lIERFQ09ERV9QUklOVElOU1RSMzIodCxtb2QscmgscmwpCisrI2RlZmluZSBERUNPREVfUFJJTlRJTlNUUjI1Nih0LG1vZCxyaCxybCkKKyAjZW5kaWYKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfRlBVX1JFR1NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAoraW5kZXggNjVlYTY3Ni4uMWJjMDdhNCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9vcHMuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L29wcy5oCitAQCAtMzksNyArMzksNyBAQAorICNpZm5kZWYgX19YODZFTVVfT1BTX0gKKyAjZGVmaW5lIF9fWDg2RU1VX09QU19ICisgCistZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSh1OCBvcDEpOworLWV4dGVybiB2b2lkICgqeDg2ZW11X29wdGFiMlsweDEwMF0pKHU4IG9wMik7CisrZXh0ZXJuIHZvaWQgKCp4ODZlbXVfb3B0YWJbMHgxMDBdKSAodTggb3AxKTsKKytleHRlcm4gdm9pZCAoKng4NmVtdV9vcHRhYjJbMHgxMDBdKSAodTggb3AyKTsKKyAKKy0jZW5kaWYgLyogX19YODZFTVVfT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX09QU19IICovCitkaWZmIC0tZ2l0IGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fYXNtLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAoraW5kZXggZTAyM2NmOC4uYWNhMTMyYiAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX2FzbS5oCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9hc20uaAorQEAgLTQ5LDE0ICs0OSwxNiBAQAorICNkZWZpbmUJX19IQVZFX0lOTElORV9BU1NFTUJMRVJfXworICNlbmRpZgorIAorLXUzMgkJZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKyt1MzIgZ2V0X2ZsYWdzX2FzbSh2b2lkKTsKKysKKyAjcHJhZ21hIGF1eCBnZXRfZmxhZ3NfYXNtID0JCQlcCisgCSJwdXNoZiIgICAgICAgICAgICAgICAgICAgICAgICAgXAorIAkicG9wCWVheCIgICAgICAgICAgICAgICAgICAJXAorIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXUxNiAgICAgYWFhX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworK3UxNiBhYWFfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkKTsKKysKKyAjcHJhZ21hIGF1eCBhYWFfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3LDcgKzY5LDggQEAgdTE2ICAgICBhYWFfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MTYgICAgIGFhc193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgYWFzX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggYWFzX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03OCw3ICs4MSw4IEBAIHUxNiAgICAgYWFzX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTE2ICAgICBhYWRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IGFhZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IGFhZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODksNyArOTMsOCBAQCB1MTYgICAgIGFhZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXUxNiAgICAgYWFtX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTE2IGFhbV93b3JkX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggYWFtX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMDAsNyArMTA1LDggQEAgdTE2ICAgICBhYW1fd29yZF9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXhdOworIAorLXU4ICAgICAgYWRjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggYWRjX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBhZGNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTExMSw3ICsxMTcsOCBAQCB1OCAgICAgIGFkY19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBhZGNfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMjIsNyArMTI5LDggQEAgdTE2ICAgICBhZGNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBhZGNfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggYWRjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xMzMsNyArMTQxLDggQEAgdTMyICAgICBhZGNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGFkZF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IGFkZF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggYWRkX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0xNDQsNyArMTUzLDggQEAgdTggICAgICBhZGRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyt1MTYgYWRkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGFkZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTU1LDcgKzE2NSw4IEBAIHUxNiAgICAgYWRkX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHUxNiBzKTsKKyAJdmFsdWUgW2F4XSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYXggYnhdOworIAorLXUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt1MzIgYWRkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGFkZF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTY2LDcgKzE3Nyw4IEBAIHUzMiAgICAgYWRkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVieF07CisgCistdTggICAgICBhbmRfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBhbmRfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGFuZF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMTc3LDcgKzE4OSw4IEBAIHU4ICAgICAgYW5kX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IGFuZF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE4OCw3ICsyMDEsOCBAQCB1MTYgICAgIGFuZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIGFuZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBhbmRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTE5OSw3ICsyMTMsOCBAQCB1MzIgICAgIGFuZF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgY21wX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggY21wX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBjbXBfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTIxMCw3ICsyMjUsOCBAQCB1OCAgICAgIGNtcF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBjbXBfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMjEsNyArMjM3LDggQEAgdTE2ICAgICBjbXBfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBjbXBfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggY21wX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yMzIsNyArMjQ5LDggQEAgdTMyICAgICBjbXBfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy11OCAgICAgIGRhYV9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworK3U4IGRhYV9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggZCk7CisrCisgI3ByYWdtYSBhdXggZGFhX2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNDMsNyArMjYxLDggQEAgdTggICAgICBkYWFfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWxdOworIAorLXU4ICAgICAgZGFzX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggZGFzX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBkYXNfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTI1NCw3ICsyNzMsOCBAQCB1OCAgICAgIGRhc19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTggICAgICBkZWNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBkZWNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGRlY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjY1LDcgKzI4NSw4IEBAIHU4ICAgICAgZGVjX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGRlY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgZGVjX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yNzYsNyArMjk3LDggQEAgdTE2ICAgICBkZWNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGRlY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgZGVjX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggZGVjX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0yODcsNyArMzA5LDggQEAgdTMyICAgICBkZWNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBpbmNfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkKTsKKyt1OCBpbmNfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQpOworKworICNwcmFnbWEgYXV4IGluY19ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMjk4LDcgKzMyMSw4IEBAIHU4ICAgICAgaW5jX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsXTsKKyAKKy11MTYgICAgIGluY193b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkKTsKKyt1MTYgaW5jX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMDksNyArMzMzLDggQEAgdTE2ICAgICBpbmNfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4XTsKKyAKKy11MzIgICAgIGluY19sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkKTsKKyt1MzIgaW5jX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCk7CisrCisgI3ByYWdtYSBhdXggaW5jX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zMjAsNyArMzQ1LDggQEAgdTMyICAgICBpbmNfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheF07CisgCistdTggICAgICBvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworK3U4IG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzMxLDcgKzM1Nyw4IEBAIHU4ICAgICAgb3JfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJdmFsdWUgW2FsXSAgICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzQyLDcgKzM2OSw4IEBAIHUxNiAgICAgb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIG9yX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC0zNTMsNyArMzgxLDggQEAgdTMyICAgICBvcl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgbmVnX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbmVnX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBuZWdfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM2NCw3ICszOTMsOCBAQCB1OCAgICAgIG5lZ19ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBuZWdfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5lZ193b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5lZ193b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzc1LDcgKzQwNSw4IEBAIHUxNiAgICAgbmVnX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBuZWdfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5lZ19sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5lZ19sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtMzg2LDcgKzQxNyw4IEBAIHUzMiAgICAgbmVnX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgbm90X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCk7CisrdTggbm90X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkKTsKKysKKyAjcHJhZ21hIGF1eCBub3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTM5Nyw3ICs0MjksOCBAQCB1OCAgICAgIG5vdF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbF07CisgCistdTE2ICAgICBub3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCk7CisrdTE2IG5vdF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQpOworKworICNwcmFnbWEgYXV4IG5vdF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDA4LDcgKzQ0MSw4IEBAIHUxNiAgICAgbm90X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheF07CisgCistdTMyICAgICBub3RfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCk7CisrdTMyIG5vdF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQpOworKworICNwcmFnbWEgYXV4IG5vdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDE5LDcgKzQ1Myw4IEBAIHUzMiAgICAgbm90X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXhdOworIAorLXU4ICAgICAgcmNsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQzMCw3ICs0NjUsOCBAQCB1OCAgICAgIHJjbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDQxLDcgKzQ3Nyw4IEBAIHUxNiAgICAgcmNsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDUyLDcgKzQ4OSw4IEBAIHUzMiAgICAgcmNsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcmNyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcmNyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByY3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ2Myw3ICs1MDEsOCBAQCB1OCAgICAgIHJjcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByY3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJjcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDc0LDcgKzUxMyw4IEBAIHUxNiAgICAgcmNyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByY3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJjcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJjcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNDg1LDcgKzUyNSw4IEBAIHUzMiAgICAgcmNyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9sX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9sX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb2xfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTQ5Niw3ICs1MzcsOCBAQCB1OCAgICAgIHJvbF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb2xfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvbF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTA3LDcgKzU0OSw4IEBAIHUxNiAgICAgcm9sX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb2xfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvbF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvbF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTE4LDcgKzU2MSw4IEBAIHUzMiAgICAgcm9sX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgcm9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggcm9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCByb3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTUyOSw3ICs1NzMsOCBAQCB1OCAgICAgIHJvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICByb3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHJvcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTQwLDcgKzU4NSw4IEBAIHUxNiAgICAgcm9yX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICByb3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHJvcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHJvcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTUxLDcgKzU5Nyw4IEBAIHUzMiAgICAgcm9yX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaGxfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU2Miw3ICs2MDksOCBAQCB1OCAgICAgIHNobF9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaGxfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNobF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTczLDcgKzYyMSw4IEBAIHUxNiAgICAgc2hsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaGxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNobF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNTg0LDcgKzYzMyw4IEBAIHUzMiAgICAgc2hsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2hyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2hyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTU5NSw3ICs2NDUsOCBAQCB1OCAgICAgIHNocl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzaHJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNocl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjA2LDcgKzY1Nyw4IEBAIHUxNiAgICAgc2hyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzaHJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNocl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjE3LDcgKzY2OSw4IEBAIHUzMiAgICAgc2hyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXU4ICAgICAgc2FyX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc2FyX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYXJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTYyOCw3ICs2ODEsOCBAQCB1OCAgICAgIHNhcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBjbF07CisgCistdTE2ICAgICBzYXJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTggcyk7CisrdTE2IHNhcl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjM5LDcgKzY5Myw4IEBAIHUxNiAgICAgc2FyX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2IGQsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBjbF07CisgCistdTMyICAgICBzYXJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTggcyk7CisrdTMyIHNhcl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNhcl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjUwLDcgKzcwNSw4IEBAIHUzMiAgICAgc2FyX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggY2xdOworIAorLXUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrdTE2IHNobGRfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggc2hsZF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNjYxLDcgKzcxNyw4IEBAIHUxNgkJc2hsZF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGR4IGNsXTsKKyAKKy11MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworK3UzMiBzaGxkX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNobGRfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY3Miw3ICs3MjksOCBAQCB1MzIgICAgIHNobGRfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWR4IGNsXTsKKyAKKy11MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworK3UxNiBzaHJkX3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNocmRfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTY4Myw3ICs3NDEsOCBAQCB1MTYJCXNocmRfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBkeCBjbF07CisgCistdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyt1MzIgc2hyZF9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzaHJkX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC02OTQsNyArNzUzLDggQEAgdTMyICAgICBzaHJkX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKyAJdmFsdWUgW2VheF0gICAgICAgICAgICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbZWF4IGVkeCBjbF07CisgCistdTggICAgICBzYmJfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt1OCBzYmJfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHNiYl9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzA1LDcgKzc2NSw4IEBAIHU4ICAgICAgc2JiX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisgCXZhbHVlIFthbF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2FsIGJsXTsKKyAKKy11MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisrdTE2IHNiYl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2IGQsIHUxNiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcxNiw3ICs3NzcsOCBAQCB1MTYgICAgIHNiYl93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7CisgCXZhbHVlIFtheF0gICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2F4IGJ4XTsKKyAKKy11MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisrdTMyIHNiYl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBzYmJfbG9uZ19hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTcyNyw3ICs3ODksOCBAQCB1MzIgICAgIHNiYl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXZhbHVlIFtlYXhdICAgICAgICAgICAgICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgc3ViX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggc3ViX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCBzdWJfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTczOCw3ICs4MDEsOCBAQCB1OCAgICAgIHN1Yl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiBzdWJfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NDksNyArODEzLDggQEAgdTE2ICAgICBzdWJfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiBzdWJfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggc3ViX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC03NjAsNyArODI1LDggQEAgdTMyICAgICBzdWJfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyt2b2lkIHRlc3RfYnl0ZV9hc20odTMyICogZmxhZ3MsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IHRlc3RfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc3MCw3ICs4MzYsOCBAQCB2b2lkCXRlc3RfYnl0ZV9hc20odTMyICpmbGFncyx1OCBkLCB1OCBzKTsKKyAJcGFybSBbZWRpXSBbYWxdIFtibF0gICAgICAgICAgICBcCisgCW1vZGlmeSBleGFjdCBbYWwgYmxdOworIAorLXZvaWQJdGVzdF93b3JkX2FzbSh1MzIgKmZsYWdzLHUxNiBkLCB1MTYgcyk7Cisrdm9pZCB0ZXN0X3dvcmRfYXNtKHUzMiAqIGZsYWdzLCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IHRlc3Rfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTc4MCw3ICs4NDcsOCBAQCB2b2lkCXRlc3Rfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAlwYXJtIFtlZGldIFtheF0gW2J4XSAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdm9pZAl0ZXN0X2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyIGQsIHUzMiBzKTsKKyt2b2lkIHRlc3RfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggdGVzdF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtNzkwLDcgKzg1OCw4IEBAIHZvaWQJdGVzdF9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiBkLCB1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VheF0gW2VieF0gICAgICAgICAgXAorIAltb2RpZnkgZXhhY3QgW2VheCBlYnhdOworIAorLXU4ICAgICAgeG9yX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggZCwgdTggcyk7CisrdTggeG9yX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCBkLCB1OCBzKTsKKysKKyAjcHJhZ21hIGF1eCB4b3JfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTgwMSw3ICs4NzAsOCBAQCB1OCAgICAgIHhvcl9ieXRlX2FzbSh1MzIgKmZsYWdzLHU4IGQsIHU4IHMpOworIAl2YWx1ZSBbYWxdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFthbCBibF07CisgCistdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworK3UxNiB4b3Jfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiBkLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MTIsNyArODgyLDggQEAgdTE2ICAgICB4b3Jfd29yZF9hc20odTMyICpmbGFncyx1MTYgZCwgdTE2IHMpOworIAl2YWx1ZSBbYXhdICAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtheCBieF07CisgCistdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworK3UzMiB4b3JfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiBkLCB1MzIgcyk7CisrCisgI3ByYWdtYSBhdXggeG9yX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04MjMsNyArODk0LDggQEAgdTMyICAgICB4b3JfbG9uZ19hc20odTMyICpmbGFncyx1MzIgZCwgdTMyIHMpOworIAl2YWx1ZSBbZWF4XSAgICAgICAgICAgICAgICAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlYXggZWJ4XTsKKyAKKy12b2lkICAgIGltdWxfYnl0ZV9hc20odTMyICpmbGFncyx1MTYgKmF4LHU4IGQsdTggcyk7Cisrdm9pZCBpbXVsX2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1MTYgKiBheCwgdTggZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggaW11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODM0LDcgKzkwNiw4IEBAIHZvaWQgICAgaW11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbYWxdIFtibF0gICAgICBcCisgCW1vZGlmeSBleGFjdCBbZXNpIGF4IGJsXTsKKyAKKy12b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworK3ZvaWQgaW11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGltdWxfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTg0Niw3ICs5MTksOCBAQCB2b2lkICAgIGltdWxfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGQsdTE2IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJ4IGR4XTsKKyAKKy12b2lkICAgIGltdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBpbXVsX2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGQsIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpbXVsX2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC04NTgsNyArOTMyLDggQEAgdm9pZCAgICBpbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkICAgIG11bF9ieXRlX2FzbSh1MzIgKmZsYWdzLHUxNiAqYXgsdTggZCx1OCBzKTsKKyt2b2lkIG11bF9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHU4IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IG11bF9ieXRlX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODY5LDcgKzk0NCw4IEBAIHZvaWQgICAgbXVsX2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1OCBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFthbF0gW2JsXSAgICAgIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgYXggYmxdOworIAorLXZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyt2b2lkIG11bF93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZCwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IG11bF93b3JkX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODgxLDcgKzk1Nyw4IEBAIHZvaWQgICAgbXVsX3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBieCBkeF07CisgCistdm9pZCAgICBtdWxfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZCx1MzIgcyk7Cisrdm9pZCBtdWxfbG9uZ19hc20odTMyICogZmxhZ3MsIHUzMiAqIGVheCwgdTMyICogZWR4LCB1MzIgZCwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IG11bF9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtODkzLDcgKzk3MCw4IEBAIHZvaWQgICAgbXVsX2xvbmdfYXNtKHUzMiAqZmxhZ3MsdTMyICplYXgsdTMyICplZHgsdTMyIGQsdTMyIHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtlYXhdIFtlYnhdIFwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGVheCBlYnggZWR4XTsKKyAKKy12b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgaWRpdl9ieXRlX2FzbSh1MzIgKiBmbGFncywgdTggKiBhbCwgdTggKiBhaCwgdTE2IGQsIHU4IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfYnl0ZV9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkwNSw3ICs5ODMsOCBAQCB2b2lkCWlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworIAlwYXJtIFtlZGldIFtlc2ldIFtlY3hdIFtheF0gW2JsXVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGJsXTsKKyAKKy12b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGlkaXZfd29yZF9hc20odTMyICogZmxhZ3MsIHUxNiAqIGF4LCB1MTYgKiBkeCwgdTE2IGRsbywgdTE2IGRoaSwgdTE2IHMpOworKworICNwcmFnbWEgYXV4IGlkaXZfd29yZF9hc20gPQkJCVwKKyAJInB1c2gJW2VkaV0iICAgICAgICAgICAgCQlcCisgCSJwb3BmIiAgICAgICAgICAgICAgICAgICAgICAgICAJXAorQEAgLTkxNyw3ICs5OTYsOCBAQCB2b2lkCWlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtkeF0gW2J4XVwKKyAJbW9kaWZ5IGV4YWN0IFtlc2kgZWRpIGF4IGR4IGJ4XTsKKyAKKy12b2lkCWlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgaWRpdl9sb25nX2FzbSh1MzIgKiBmbGFncywgdTMyICogZWF4LCB1MzIgKiBlZHgsIHUzMiBkbG8sIHUzMiBkaGksIHUzMiBzKTsKKysKKyAjcHJhZ21hIGF1eCBpZGl2X2xvbmdfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05MjksNyArMTAwOSw4IEBAIHZvaWQJaWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2VheF0gW2VkeF0gW2VieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBlYXggZWR4IGVieF07CisgCistdm9pZAlkaXZfYnl0ZV9hc20odTMyICpmbGFncyx1OCAqYWwsdTggKmFoLHUxNiBkLHU4IHMpOworK3ZvaWQgZGl2X2J5dGVfYXNtKHUzMiAqIGZsYWdzLCB1OCAqIGFsLCB1OCAqIGFoLCB1MTYgZCwgdTggcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X2J5dGVfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NDEsNyArMTAyMiw4IEBAIHZvaWQJZGl2X2J5dGVfYXNtKHUzMiAqZmxhZ3MsdTggKmFsLHU4ICphaCx1MTYgZCx1OCBzKTsKKyAJcGFybSBbZWRpXSBbZXNpXSBbZWN4XSBbYXhdIFtibF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBibF07CisgCistdm9pZAlkaXZfd29yZF9hc20odTMyICpmbGFncyx1MTYgKmF4LHUxNiAqZHgsdTE2IGRsbyx1MTYgZGhpLHUxNiBzKTsKKyt2b2lkIGRpdl93b3JkX2FzbSh1MzIgKiBmbGFncywgdTE2ICogYXgsIHUxNiAqIGR4LCB1MTYgZGxvLCB1MTYgZGhpLCB1MTYgcyk7CisrCisgI3ByYWdtYSBhdXggZGl2X3dvcmRfYXNtID0JCQlcCisgCSJwdXNoCVtlZGldIiAgICAgICAgICAgIAkJXAorIAkicG9wZiIgICAgICAgICAgICAgICAgICAgICAgICAgCVwKK0BAIC05NTMsNyArMTAzNSw4IEBAIHZvaWQJZGl2X3dvcmRfYXNtKHUzMiAqZmxhZ3MsdTE2ICpheCx1MTYgKmR4LHUxNiBkbG8sdTE2IGRoaSx1MTYgcyk7CisgCXBhcm0gW2VkaV0gW2VzaV0gW2VjeF0gW2F4XSBbZHhdIFtieF1cCisgCW1vZGlmeSBleGFjdCBbZXNpIGVkaSBheCBkeCBieF07CisgCistdm9pZAlkaXZfbG9uZ19hc20odTMyICpmbGFncyx1MzIgKmVheCx1MzIgKmVkeCx1MzIgZGxvLHUzMiBkaGksdTMyIHMpOworK3ZvaWQgZGl2X2xvbmdfYXNtKHUzMiAqIGZsYWdzLCB1MzIgKiBlYXgsIHUzMiAqIGVkeCwgdTMyIGRsbywgdTMyIGRoaSwgdTMyIHMpOworKworICNwcmFnbWEgYXV4IGRpdl9sb25nX2FzbSA9CQkJXAorIAkicHVzaAlbZWRpXSIgICAgICAgICAgICAJCVwKKyAJInBvcGYiICAgICAgICAgICAgICAgICAgICAgICAgIAlcCitAQCAtOTY3LDQgKzEwNTAsNCBAQCB2b2lkCWRpdl9sb25nX2FzbSh1MzIgKmZsYWdzLHUzMiAqZWF4LHUzMiAqZWR4LHUzMiBkbG8sdTMyIGRoaSx1MzIgcyk7CisgCisgI2VuZGlmCisgCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fQVNNX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV9vcHMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitpbmRleCBiZWE4MzU3Li4wZjBlNzhkIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3ByaW1fb3BzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS9wcmltX29wcy5oCitAQCAtNDAsMTAyICs0MCwxMDIgQEAKKyAjZGVmaW5lIF9fWDg2RU1VX1BSSU1fT1BTX0gKKyAKKyAjaWZkZWYgIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIiB7ICAgICAgICAgICAgCQkJLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKytleHRlcm4gIkMiIHsgICAgICAgICAgICAgICAgICAgIC8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisgI2VuZGlmCisgCistdTE2ICAgICBhYWFfd29yZCAodTE2IGQpOworLXUxNiAgICAgYWFzX3dvcmQgKHUxNiBkKTsKKy11MTYgICAgIGFhZF93b3JkICh1MTYgZCk7CistdTE2ICAgICBhYW1fd29yZCAodTggZCk7CistdTggICAgICBhZGNfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBhZGNfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGFkY19sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgYWRkX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgYWRkX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBhZGRfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy11OCAgICAgIGFuZF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIGFuZF93b3JkICh1MTYgZCwgdTE2IHMpOworLXUzMiAgICAgYW5kX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBjbXBfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBjbXBfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIGNtcF9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgZGFhX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGFzX2J5dGUgKHU4IGQpOworLXU4ICAgICAgZGVjX2J5dGUgKHU4IGQpOworLXUxNiAgICAgZGVjX3dvcmQgKHUxNiBkKTsKKy11MzIgICAgIGRlY19sb25nICh1MzIgZCk7CistdTggICAgICBpbmNfYnl0ZSAodTggZCk7CistdTE2ICAgICBpbmNfd29yZCAodTE2IGQpOworLXUzMiAgICAgaW5jX2xvbmcgKHUzMiBkKTsKKy11OCAgICAgIG9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgb3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIG9yX2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICBuZWdfYnl0ZSAodTggcyk7CistdTE2ICAgICBuZWdfd29yZCAodTE2IHMpOworLXUzMiAgICAgbmVnX2xvbmcgKHUzMiBzKTsKKy11OCAgICAgIG5vdF9ieXRlICh1OCBzKTsKKy11MTYgICAgIG5vdF93b3JkICh1MTYgcyk7CistdTMyICAgICBub3RfbG9uZyAodTMyIHMpOworLXU4ICAgICAgcmNsX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcmNsX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJjbF9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICByY3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICByY3Jfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgcmNyX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHJvbF9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHJvbF93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICByb2xfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgcm9yX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgcm9yX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHJvcl9sb25nICh1MzIgZCwgdTggcyk7CistdTggICAgICBzaGxfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzaGxfd29yZCAodTE2IGQsIHU4IHMpOworLXUzMiAgICAgc2hsX2xvbmcgKHUzMiBkLCB1OCBzKTsKKy11OCAgICAgIHNocl9ieXRlICh1OCBkLCB1OCBzKTsKKy11MTYgICAgIHNocl93b3JkICh1MTYgZCwgdTggcyk7CistdTMyICAgICBzaHJfbG9uZyAodTMyIGQsIHU4IHMpOworLXU4ICAgICAgc2FyX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc2FyX3dvcmQgKHUxNiBkLCB1OCBzKTsKKy11MzIgICAgIHNhcl9sb25nICh1MzIgZCwgdTggcyk7CistdTE2ICAgICBzaGxkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaGxkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTE2ICAgICBzaHJkX3dvcmQgKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CistdTMyICAgICBzaHJkX2xvbmcgKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CistdTggICAgICBzYmJfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICBzYmJfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHNiYl9sb25nICh1MzIgZCwgdTMyIHMpOworLXU4ICAgICAgc3ViX2J5dGUgKHU4IGQsIHU4IHMpOworLXUxNiAgICAgc3ViX3dvcmQgKHUxNiBkLCB1MTYgcyk7CistdTMyICAgICBzdWJfbG9uZyAodTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIHRlc3RfYnl0ZSAodTggZCwgdTggcyk7Cistdm9pZCAgICB0ZXN0X3dvcmQgKHUxNiBkLCB1MTYgcyk7Cistdm9pZCAgICB0ZXN0X2xvbmcgKHUzMiBkLCB1MzIgcyk7CistdTggICAgICB4b3JfYnl0ZSAodTggZCwgdTggcyk7CistdTE2ICAgICB4b3Jfd29yZCAodTE2IGQsIHUxNiBzKTsKKy11MzIgICAgIHhvcl9sb25nICh1MzIgZCwgdTMyIHMpOworLXZvaWQgICAgaW11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIGltdWxfd29yZCAodTE2IHMpOworLXZvaWQgICAgaW11bF9sb25nICh1MzIgcyk7Cistdm9pZCAJaW11bF9sb25nX2RpcmVjdCh1MzIgKnJlc19sbywgdTMyKiByZXNfaGksdTMyIGQsIHUzMiBzKTsKKy12b2lkICAgIG11bF9ieXRlICh1OCBzKTsKKy12b2lkICAgIG11bF93b3JkICh1MTYgcyk7Cistdm9pZCAgICBtdWxfbG9uZyAodTMyIHMpOworLXZvaWQgICAgaWRpdl9ieXRlICh1OCBzKTsKKy12b2lkICAgIGlkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgaWRpdl9sb25nICh1MzIgcyk7Cistdm9pZCAgICBkaXZfYnl0ZSAodTggcyk7Cistdm9pZCAgICBkaXZfd29yZCAodTE2IHMpOworLXZvaWQgICAgZGl2X2xvbmcgKHUzMiBzKTsKKy12b2lkICAgIGlucyAoaW50IHNpemUpOworLXZvaWQgICAgb3V0cyAoaW50IHNpemUpOworLXUxNiAgICAgbWVtX2FjY2Vzc193b3JkIChpbnQgYWRkcik7Cistdm9pZCAgICBwdXNoX3dvcmQgKHUxNiB3KTsKKy12b2lkICAgIHB1c2hfbG9uZyAodTMyIHcpOworLXUxNiAgICAgcG9wX3dvcmQgKHZvaWQpOworLXUzMgkJcG9wX2xvbmcgKHZvaWQpOworKyAgICB1MTYgYWFhX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFzX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFkX3dvcmQodTE2IGQpOworKyAgICB1MTYgYWFtX3dvcmQodTggZCk7CisrICAgIHU4IGFkY19ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRjX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkY19sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFkZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYWRkX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFkZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGFuZF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgYW5kX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGFuZF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGNtcF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgY21wX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIGNtcF9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IGRhYV9ieXRlKHU4IGQpOworKyAgICB1OCBkYXNfYnl0ZSh1OCBkKTsKKysgICAgdTggZGVjX2J5dGUodTggZCk7CisrICAgIHUxNiBkZWNfd29yZCh1MTYgZCk7CisrICAgIHUzMiBkZWNfbG9uZyh1MzIgZCk7CisrICAgIHU4IGluY19ieXRlKHU4IGQpOworKyAgICB1MTYgaW5jX3dvcmQodTE2IGQpOworKyAgICB1MzIgaW5jX2xvbmcodTMyIGQpOworKyAgICB1OCBvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgb3Jfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB1MzIgb3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCBuZWdfYnl0ZSh1OCBzKTsKKysgICAgdTE2IG5lZ193b3JkKHUxNiBzKTsKKysgICAgdTMyIG5lZ19sb25nKHUzMiBzKTsKKysgICAgdTggbm90X2J5dGUodTggcyk7CisrICAgIHUxNiBub3Rfd29yZCh1MTYgcyk7CisrICAgIHUzMiBub3RfbG9uZyh1MzIgcyk7CisrICAgIHU4IHJjbF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcmNsX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcmNsX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCByY3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHJjcl93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHJjcl9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggcm9sX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiByb2xfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiByb2xfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHJvcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgcm9yX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgcm9yX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1OCBzaGxfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHNobF93b3JkKHUxNiBkLCB1OCBzKTsKKysgICAgdTMyIHNobF9sb25nKHUzMiBkLCB1OCBzKTsKKysgICAgdTggc2hyX2J5dGUodTggZCwgdTggcyk7CisrICAgIHUxNiBzaHJfd29yZCh1MTYgZCwgdTggcyk7CisrICAgIHUzMiBzaHJfbG9uZyh1MzIgZCwgdTggcyk7CisrICAgIHU4IHNhcl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2FyX3dvcmQodTE2IGQsIHU4IHMpOworKyAgICB1MzIgc2FyX2xvbmcodTMyIGQsIHU4IHMpOworKyAgICB1MTYgc2hsZF93b3JkKHUxNiBkLCB1MTYgZmlsbCwgdTggcyk7CisrICAgIHUzMiBzaGxkX2xvbmcodTMyIGQsIHUzMiBmaWxsLCB1OCBzKTsKKysgICAgdTE2IHNocmRfd29yZCh1MTYgZCwgdTE2IGZpbGwsIHU4IHMpOworKyAgICB1MzIgc2hyZF9sb25nKHUzMiBkLCB1MzIgZmlsbCwgdTggcyk7CisrICAgIHU4IHNiYl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc2JiX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHNiYl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHU4IHN1Yl9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB1MTYgc3ViX3dvcmQodTE2IGQsIHUxNiBzKTsKKysgICAgdTMyIHN1Yl9sb25nKHUzMiBkLCB1MzIgcyk7CisrICAgIHZvaWQgdGVzdF9ieXRlKHU4IGQsIHU4IHMpOworKyAgICB2b2lkIHRlc3Rfd29yZCh1MTYgZCwgdTE2IHMpOworKyAgICB2b2lkIHRlc3RfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB1OCB4b3JfYnl0ZSh1OCBkLCB1OCBzKTsKKysgICAgdTE2IHhvcl93b3JkKHUxNiBkLCB1MTYgcyk7CisrICAgIHUzMiB4b3JfbG9uZyh1MzIgZCwgdTMyIHMpOworKyAgICB2b2lkIGltdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpbXVsX3dvcmQodTE2IHMpOworKyAgICB2b2lkIGltdWxfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgaW11bF9sb25nX2RpcmVjdCh1MzIgKiByZXNfbG8sIHUzMiAqIHJlc19oaSwgdTMyIGQsIHUzMiBzKTsKKysgICAgdm9pZCBtdWxfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBtdWxfd29yZCh1MTYgcyk7CisrICAgIHZvaWQgbXVsX2xvbmcodTMyIHMpOworKyAgICB2b2lkIGlkaXZfYnl0ZSh1OCBzKTsKKysgICAgdm9pZCBpZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGlkaXZfbG9uZyh1MzIgcyk7CisrICAgIHZvaWQgZGl2X2J5dGUodTggcyk7CisrICAgIHZvaWQgZGl2X3dvcmQodTE2IHMpOworKyAgICB2b2lkIGRpdl9sb25nKHUzMiBzKTsKKysgICAgdm9pZCBpbnMoaW50IHNpemUpOworKyAgICB2b2lkIG91dHMoaW50IHNpemUpOworKyAgICB1MTYgbWVtX2FjY2Vzc193b3JkKGludCBhZGRyKTsKKysgICAgdm9pZCBwdXNoX3dvcmQodTE2IHcpOworKyAgICB2b2lkIHB1c2hfbG9uZyh1MzIgdyk7CisrICAgIHUxNiBwb3Bfd29yZCh2b2lkKTsKKysgICAgdTMyIHBvcF9sb25nKHZvaWQpOworKyAgICB2b2lkIGNwdWlkKHZvaWQpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1BSSU1fT1BTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NDZlYzlkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzL3g4NmVtdS94ODZlbXUvcHJpbV94ODZfZ2NjLmgKK0BAIC0wLDAgKzEsNzcgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoKKysqIElubGluZSBoZWxwZXJzIGZvciB4ODZlbXUKKysqCisrKiBDb3B5cmlnaHQgKEMpIDIwMDggQmFydCBUcm9qYW5vd3NraSwgU3ltYmlvIFRlY2hub2xvZ2llcywgTExDCisrKgorKyogID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyoKKysqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFuZAorKyogIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKysqICBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0CisrKiAgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCisrKiAgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycyBub3QgYmUgdXNlZAorKyogIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUKKysqICB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgYXV0aG9ycyBtYWtlcyBubworKyogIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisrKiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysqCisrKiAgVEhFIEFVVEhPUlMgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCisrKiAgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTworKyogIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCisrKiAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRgorKyogIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgorKyogIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKysqICBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorKyoKKysqICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysqCisrKiBMYW5ndWFnZTogICAgIEdOVSBDCisrKiBFbnZpcm9ubWVudDogIEdDQyBvbiBpMzg2IG9yIHg4Ni02NAorKyogRGV2ZWxvcGVyOiAgICBCYXJ0IFRyb2phbm93c2tpCisrKgorKyogRGVzY3JpcHRpb246ICBUaGlzIGZpbGUgZGVmaW5lcyBhIGZldyB4ODYgbWFjcm9zIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlCisrKiAgICAgICAgICAgICAgIGVtdWxhdG9yIHRvIGV4ZWN1dGUgbmF0aXZlIGluc3RydWN0aW9ucy4KKysqCisrKiAgICAgICAgICAgICAgIEZvciBQSUMgdnMgbm9uLVBJQyBjb2RlIHJlZmVyIHRvOgorKyogICAgICAgICAgICAgICBodHRwOi8vc2FtLnpveS5vcmcvYmxvZy8yMDA3LTA0LTEzLXNobGliLXdpdGgtbm9uLXBpYy1jb2RlLWhhdmUtaW5saW5lLWFzc2VtYmx5LWFuZC1waWMtbWl4LXdlbGwKKysqCisrKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKysjaWZuZGVmIF9fWDg2RU1VX1BSSU1fWDg2X0dDQ19ICisrI2RlZmluZSBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSAorKworKyNpbmNsdWRlICJ4ODZlbXUvdHlwZXMuaCIKKysKKysjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8ICEoZGVmaW5lZCAoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9fQU1ENjRfXykgfHwgZGVmaW5lZChfX2FtZDY0X18pKQorKyNlcnJvciBUaGlzIGZpbGUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBnY2Mgb24gaTM4NiBvciB4ODYtNjQgc3lzdGVtCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoX19QSUNfXykgJiYgZGVmaW5lZChfX2kzODZfXykKKysKKysjZGVmaW5lIFg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJSVlYnggICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAiY3B1aWQgICAgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAibW92bCAlJWVieCwgJTEgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAicG9wbCAlJWVieCAgICAgICBcblx0IjoiPWEiKCphKSwgIj1yIigqYiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICI9YyIoKmMpLCAiPWQiKCpkKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImEiKCphKSwgImMiKCpjKQorKyAgICAgICAgICAgICAgICAgICAgICAgICA6ImNjIik7CisrfQorKworKyNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogISAoX19QSUNfXyAmJiBfX2kzODZfXykgKi8KKysKKysjZGVmaW5lIHg4NkVNVV9IQVNfSFdfQ1BVSUQgMQorK3N0YXRpYyBpbmxpbmUgdm9pZAorK2h3X2NwdWlkKHUzMiAqIGEsIHUzMiAqIGIsIHUzMiAqIGMsIHUzMiAqIGQpCisreworKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3B1aWQiOiI9YSIoKmEpLCAiPWIiKCpiKSwgIj1jIigqYyksICI9ZCIoKmQpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiYSIoKmEpLCAiYyIoKmMpCisrICAgICAgICAgICAgICAgICAgICAgICAgIDoiY2MiKTsKKyt9CisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1BJQ19fICYmIF9faTM4Nl9fICovCisrCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9QUklNX1g4Nl9HQ0NfSCAqLworZGlmZiAtLWdpdCBhL2xpYnMveDg2ZW11L3g4NmVtdS9yZWdzLmggYi9saWJzL3g4NmVtdS94ODZlbXUvcmVncy5oCitpbmRleCA1MmNmOGU0Li42YmQwNjExIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorKysrIGIvbGlicy94ODZlbXUveDg2ZW11L3JlZ3MuaAorQEAgLTQyLDcgKzQyLDcgQEAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIGFuZCB0eXBlIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiBQQUNLCistIyBwcmFnbWEgUEFDSworKyNwcmFnbWEgUEFDSworICNlbmRpZgorIAorIC8qCitAQCAtNjQsNDggKzY0LDQ4IEBACisgCisgdHlwZWRlZiBzdHJ1Y3QgeworICAgICB1MzIgZV9yZWc7CistCX0gSTMyX3JlZ190OworK30gSTMyX3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTE2IGZpbGxlcjAsIHhfcmVnOworLQl9IEkxNl9yZWdfdDsKKysgICAgdTE2IGZpbGxlcjAsIHhfcmVnOworK30gSTE2X3JlZ190OworIAorIHR5cGVkZWYgc3RydWN0IHsKKy0JdTggZmlsbGVyMCwgZmlsbGVyMSwgaF9yZWcsIGxfcmVnOworLQl9IEk4X3JlZ190OworKyAgICB1OCBmaWxsZXIwLCBmaWxsZXIxLCBoX3JlZywgbF9yZWc7CisrfSBJOF9yZWdfdDsKKyAKKy0jZWxzZSAvKiAhX19CSUdfRU5ESUFOX18gKi8KKysjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0JJR19FTkRJQU5fXyAqLworIAorIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgdTMyIGVfcmVnOworLQl9IEkzMl9yZWdfdDsKKyt9IEkzMl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXUxNiB4X3JlZzsKKy0JfSBJMTZfcmVnX3Q7CisrICAgIHUxNiB4X3JlZzsKKyt9IEkxNl9yZWdfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCXU4IGxfcmVnLCBoX3JlZzsKKy0JfSBJOF9yZWdfdDsKKysgICAgdTggbF9yZWcsIGhfcmVnOworK30gSThfcmVnX3Q7CisgCistI2VuZGlmIC8qIEJJR19FTkRJQU4gKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJJR19FTkRJQU4gKi8KKyAKKyB0eXBlZGVmIHVuaW9uIHsKKy0JSTMyX3JlZ190ICAgSTMyX3JlZzsKKy0JSTE2X3JlZ190ICAgSTE2X3JlZzsKKy0JSThfcmVnX3QgICAgSThfcmVnOworLQl9IGkzODZfZ2VuZXJhbF9yZWdpc3RlcjsKKysgICAgSTMyX3JlZ190IEkzMl9yZWc7CisrICAgIEkxNl9yZWdfdCBJMTZfcmVnOworKyAgICBJOF9yZWdfdCBJOF9yZWc7CisrfSBpMzg2X2dlbmVyYWxfcmVnaXN0ZXI7CisgCisgc3RydWN0IGkzODZfZ2VuZXJhbF9yZWdzIHsKKy0JaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIEEsIEIsIEMsIEQ7CistCX07CisrICAgIGkzODZfZ2VuZXJhbF9yZWdpc3RlciBBLCBCLCBDLCBEOworK307CisgCisgdHlwZWRlZiBzdHJ1Y3QgaTM4Nl9nZW5lcmFsX3JlZ3MgR2VuX3JlZ190OworIAorIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyB7CistCWkzODZfZ2VuZXJhbF9yZWdpc3RlciBTUCwgQlAsIFNJLCBESSwgSVA7CistCXUzMiBGTEFHUzsKKy0JfTsKKysgICAgaTM4Nl9nZW5lcmFsX3JlZ2lzdGVyIFNQLCBCUCwgU0ksIERJLCBJUDsKKysgICAgdTMyIEZMQUdTOworK307CisgCisgLyogIAorICAqIFNlZ21lbnQgcmVnaXN0ZXJzIGhlcmUgcmVwcmVzZW50IHRoZSAxNiBiaXQgcXVhbnRpdGllcworQEAgLTExNCw3ICsxMTQsNyBAQCBzdHJ1Y3QgaTM4Nl9zcGVjaWFsX3JlZ3MgeworIAorIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyB7CisgICAgIHUxNiBDUywgRFMsIFNTLCBFUywgRlMsIEdTOworLQl9OworK307CisgCisgLyogOCBiaXQgcmVnaXN0ZXJzICovCisgI2RlZmluZSBSX0FIICBnZW4uQS5JOF9yZWcuaF9yZWcKK0BAIC0yNTgsOSArMjU4LDkgQEAgc3RydWN0IGkzODZfc2VnbWVudF9yZWdzIHsKKyAjZGVmaW5lICBJTlRSX0hBTFRFRCAgICAgICAgICAweDQKKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyAgICBnZW47CistICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyAgICBzcGM7CistICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyAgICBzZWc7CisrICAgIHN0cnVjdCBpMzg2X2dlbmVyYWxfcmVncyBnZW47CisrICAgIHN0cnVjdCBpMzg2X3NwZWNpYWxfcmVncyBzcGM7CisrICAgIHN0cnVjdCBpMzg2X3NlZ21lbnRfcmVncyBzZWc7CisgICAgIC8qCisgICAgICAqIE1PREUgY29udGFpbnMgaW5mb3JtYXRpb24gb246CisgICAgICAqICBSRVBFIHByZWZpeCAgICAgICAgICAgICAyIGJpdHMgIHJlcGUscmVwbmUKK0BAIC0yNzMsMjEgKzI3MywyMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICAgICAqICBFeHRlcm4gaW50ZXJydXB0ICAgICAgICAxIGJpdHMKKyAgICAgICogIEhhbHRlZCAgICAgICAgICAgICAgICAgIDEgYml0cworICAgICAgKi8KKy0gICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU7CistICAgIHZvbGF0aWxlIGludCAgICAgICAgICAgICAgICBpbnRyOyAgIC8qIG1hc2sgb2YgcGVuZGluZyBpbnRlcnJ1cHRzICovCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZzsKKysgICAgdTMyIG1vZGU7CisrICAgIHZvbGF0aWxlIGludCBpbnRyOyAgICAgICAgICAvKiBtYXNrIG9mIHBlbmRpbmcgaW50ZXJydXB0cyAqLworKyAgICBpbnQgZGVidWc7CisgI2lmZGVmIERFQlVHCistCWludCAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjazsKKy0gICAgdTE2ICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkX2lwOworLSAgICB1MTYgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWRfY3M7CistICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfcG9zOworLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX3N0cl9wb3M7CistICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfYnVmWzMyXTsgLyogZW5jb2RlZCBieXRlIHN0cmVhbSAgKi8KKy0gICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRfYnVmWzI1Nl07IC8qIGRpc2Fzc2VtYmxlZCBzdHJpbmdzICovCisrICAgIGludCBjaGVjazsKKysgICAgdTE2IHNhdmVkX2lwOworKyAgICB1MTYgc2F2ZWRfY3M7CisrICAgIGludCBlbmNfcG9zOworKyAgICBpbnQgZW5jX3N0cl9wb3M7CisrICAgIGNoYXIgZGVjb2RlX2J1ZlszMl07ICAgICAgICAvKiBlbmNvZGVkIGJ5dGUgc3RyZWFtICAqLworKyAgICBjaGFyIGRlY29kZWRfYnVmWzI1Nl07ICAgICAgLyogZGlzYXNzZW1ibGVkIHN0cmluZ3MgKi8KKyAjZW5kaWYKKy0gICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgIGludG5vOworLSAgICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYWRbM107CistCX0gWDg2RU1VX3JlZ3M7CisrICAgIHU4IGludG5vOworKyAgICB1OCBfX3BhZFszXTsKKyt9IFg4NkVNVV9yZWdzOworIAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgUkVNQVJLUzoKK0BAIC0zMDAsMjAgKzMwMCwyMCBAQCBwcml2YXRlCQkJLSBwcml2YXRlIGRhdGEgcG9pbnRlcgorIHg4NgkJCS0gWDg2IHJlZ2lzdGVycworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgdHlwZWRlZiBzdHJ1Y3QgeworLQl1bnNpZ25lZCBsb25nCW1lbV9iYXNlOworLQl1bnNpZ25lZCBsb25nCW1lbV9zaXplOworLQl2b2lkKiAgICAgICAgCXByaXZhdGU7CistCVg4NkVNVV9yZWdzCQl4ODY7CistCX0gWDg2RU1VX3N5c0VudjsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKKysgICAgdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKKysgICAgdm9pZCAqcHJpdmF0ZTsKKysgICAgWDg2RU1VX3JlZ3MgeDg2OworK30gWDg2RU1VX3N5c0VudjsKKyAKKyAjaWZkZWYgRU5EX1BBQ0sKKy0jIHByYWdtYSBFTkRfUEFDSworKyNwcmFnbWEgRU5EX1BBQ0sKKyAjZW5kaWYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdsb2JhbCBWYXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy1leHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworK2V4dGVybiAiQyIgeyAgICAgICAgICAgICAgICAgICAgLyogVXNlICJDIiBsaW5rYWdlIHdoZW4gaW4gQysrIG1vZGUgKi8KKyAjZW5kaWYKKyAKKyAvKiBHbG9iYWwgZW11bGF0b3IgbWFjaGluZSBzdGF0ZS4KK0BAIC0zMjEsMTcgKzMyMSwxNiBAQCBleHRlcm4gIkMiIHsgICAgICAgICAgICAJCQkvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICAqIFdlIGtlZXAgaXQgZ2xvYmFsIHRvIGF2b2lkIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGluIHRoZSBjb2RlIGZvciBzcGVlZC4KKyAgKi8KKyAKKy1leHRlcm4gICAgWDg2RU1VX3N5c0VudglfWDg2RU1VX2VudjsKKysgICAgZXh0ZXJuIFg4NkVNVV9zeXNFbnYgX1g4NkVNVV9lbnY7CisgI2RlZmluZSAgIE0gICAgICAgICAgICAgX1g4NkVNVV9lbnYKKyAKKyAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9uIFByb3RvdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIAorIC8qIEZ1bmN0aW9uIHRvIGxvZyBpbmZvcm1hdGlvbiBhdCBydW50aW1lICovCisgCistdm9pZAlwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pOworKyAgICB2b2lkIHByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLik7CisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLX0gICAgICAgICAgICAgICAgICAgICAgIAkJCS8qIEVuZCBvZiAiQyIgbGlua2FnZSBmb3IgQysrICAgCSovCisrfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgICAgICAgICAgKi8KKyAjZW5kaWYKKy0KKy0jZW5kaWYgLyogX19YODZFTVVfUkVHU19IICovCisrI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfX1g4NkVNVV9SRUdTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUvdHlwZXMuaCBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitpbmRleCBjMGMwOWMxLi41YTZlZjAxIDEwMDY0NAorLS0tIGEvbGlicy94ODZlbXUveDg2ZW11L3R5cGVzLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS90eXBlcy5oCitAQCAtMzYsNyArMzYsNiBAQAorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworIAorLQorICNpZm5kZWYgX19YODZFTVVfVFlQRVNfSAorICNkZWZpbmUgX19YODZFTVVfVFlQRVNfSAorIAorQEAgLTYxLDQ2ICs2MCwyMSBAQAorIAorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWNyb3MgYW5kIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCistLyogQ3VycmVudGx5IG9ubHkgZm9yIExpbnV4LzMyYml0ICovCistI3VuZGVmICBfX0hBU19MT05HX0xPTkdfXworLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChOT19MT05HX0xPTkcpCistI2RlZmluZSBfX0hBU19MT05HX0xPTkdfXworLSNlbmRpZgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKy0vKiBUYWtlbiBmcm9tIFhtZC5oICovCistI3VuZGVmIE5VTTMyCistI2lmIGRlZmluZWQgKF9MUDY0KSB8fCBcCistICAgIGRlZmluZWQoX19hbHBoYSkgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChpYTY0KSB8fCBcCistICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKy0gICAgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKy0gICAgKGRlZmluZWQoX19ocHBhX18pICYmIGRlZmluZWQoX19MUDY0KSkgfHwgXAorLSAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorLSAgICAoZGVmaW5lZChfX3NnaSkgJiYgKF9NSVBTX1NaTE9ORyA9PSA2NCkpCistI2RlZmluZSBOVU0zMiBpbnQKKy0jZWxzZQorLSNkZWZpbmUgTlVNMzIgbG9uZworLSNlbmRpZgorK3R5cGVkZWYgdWludDhfdCB1ODsKKyt0eXBlZGVmIHVpbnQxNl90IHUxNjsKKyt0eXBlZGVmIHVpbnQzMl90IHUzMjsKKyt0eXBlZGVmIHVpbnQ2NF90IHU2NDsKKyAKKy10eXBlZGVmIHVuc2lnbmVkIGNoYXIgCQl1ODsKKy10eXBlZGVmIHVuc2lnbmVkIHNob3J0IAkJdTE2OworLXR5cGVkZWYgdW5zaWduZWQgTlVNMzIgCQl1MzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgCXU2NDsKKy0jZW5kaWYKKyt0eXBlZGVmIGludDhfdCBzODsKKyt0eXBlZGVmIGludDE2X3QgczE2OworK3R5cGVkZWYgaW50MzJfdCBzMzI7CisrdHlwZWRlZiBpbnQ2NF90IHM2NDsKKyAKKy10eXBlZGVmIGNoYXIgCQkJCXM4OworLXR5cGVkZWYgc2hvcnQgCQkJCXMxNjsKKy10eXBlZGVmIE5VTTMyIAkJCQlzMzI7CistI2lmZGVmIF9fSEFTX0xPTkdfTE9OR19fCistdHlwZWRlZiBsb25nIGxvbmcgCQkJczY0OworLSNlbmRpZgorLQorLXR5cGVkZWYgdW5zaWduZWQgaW50CQkJdWludDsKKy10eXBlZGVmIGludCAJCQkJc2ludDsKKyt0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OworK3R5cGVkZWYgaW50IHNpbnQ7CisgCisgdHlwZWRlZiB1MTYgWDg2RU1VX3Bpb0FkZHI7CisgCistI3VuZGVmIE5VTTMyCistCistI2VuZGlmCS8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KKysjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fWDg2RU1VX1RZUEVTX0ggKi8KK2RpZmYgLS1naXQgYS9saWJzL3g4NmVtdS94ODZlbXUveDg2ZW11aS5oIGIvbGlicy94ODZlbXUveDg2ZW11L3g4NmVtdWkuaAoraW5kZXggMTEyZWUzNi4uZjExZGMxMCAxMDA2NDQKKy0tLSBhL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKKysrKyBiL2xpYnMveDg2ZW11L3g4NmVtdS94ODZlbXVpLmgKK0BAIC0zOCw3ICszOCw2IEBACisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgCistCisgI2lmbmRlZiBfX1g4NkVNVV9YODZFTVVJX0gKKyAjZGVmaW5lIF9fWDg2RU1VX1g4NkVNVUlfSAorIAorQEAgLTc0LDI5ICs3MywyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKyNlbmRpZgorIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElubGluZSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisgI2lmZGVmICBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIgeyAgICAgICAgICAgIAkJCS8qIFVzZSAiQyIgbGlua2FnZSB3aGVuIGluIEMrKyBtb2RlICovCisrZXh0ZXJuICJDIiB7ICAgICAgICAgICAgICAgICAgICAvKiBVc2UgIkMiIGxpbmthZ2Ugd2hlbiBpbiBDKysgbW9kZSAqLworICNlbmRpZgorIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19yZGIpKHUzMiBhZGRyKTsKKy1leHRlcm4gdTE2IAkoWDg2QVBJUCBzeXNfcmR3KSh1MzIgYWRkcik7CistZXh0ZXJuIHUzMiAJKFg4NkFQSVAgc3lzX3JkbCkodTMyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c193cmIpKHUzMiBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dydykodTMyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dybCkodTMyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19yZGIpICh1MzIgYWRkcik7CisrICAgIGV4dGVybiB1MTYoWDg2QVBJUCBzeXNfcmR3KSAodTMyIGFkZHIpOworKyAgICBleHRlcm4gdTMyKFg4NkFQSVAgc3lzX3JkbCkgKHUzMiBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX3dyYikgKHUzMiBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3J3KSAodTMyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfd3JsKSAodTMyIGFkZHIsIHUzMiB2YWwpOworIAorLWV4dGVybiB1OCAgCShYODZBUElQIHN5c19pbmIpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MTYgCShYODZBUElQIHN5c19pbncpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB1MzIgCShYODZBUElQIHN5c19pbmwpKFg4NkVNVV9waW9BZGRyIGFkZHIpOworLWV4dGVybiB2b2lkIChYODZBUElQIHN5c19vdXRiKShYODZFTVVfcGlvQWRkciBhZGRyLHU4IHZhbCk7CistZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dHcpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTE2IHZhbCk7CistZXh0ZXJuIHZvaWQJKFg4NkFQSVAgc3lzX291dGwpKFg4NkVNVV9waW9BZGRyIGFkZHIsdTMyIHZhbCk7CisrICAgIGV4dGVybiB1OChYODZBUElQIHN5c19pbmIpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUxNihYODZBUElQIHN5c19pbncpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHUzMihYODZBUElQIHN5c19pbmwpIChYODZFTVVfcGlvQWRkciBhZGRyKTsKKysgICAgZXh0ZXJuIHZvaWQgKFg4NkFQSVAgc3lzX291dGIpIChYODZFTVVfcGlvQWRkciBhZGRyLCB1OCB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0dykgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUxNiB2YWwpOworKyAgICBleHRlcm4gdm9pZCAoWDg2QVBJUCBzeXNfb3V0bCkgKFg4NkVNVV9waW9BZGRyIGFkZHIsIHUzMiB2YWwpOworIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKy19ICAgICAgICAgICAgICAgICAgICAgICAJCQkvKiBFbmQgb2YgIkMiIGxpbmthZ2UgZm9yIEMrKyAgIAkqLworK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mICJDIiBsaW5rYWdlIGZvciBDKysgICAgICAgICAgICovCisgI2VuZGlmCistCistI2VuZGlmIC8qIF9fWDg2RU1VX1g4NkVNVUlfSCAqLworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX19YODZFTVVfWDg2RU1VSV9IICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmQvYXItZnJvbS1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjYmM3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2FyLWZyb20tZW52LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGhvc3QtY3Jvc3MgYXIKKworSWYgYnVpbGRpbmcgb24gMzJiaXQgaG9zdCBhbmQgY3JlYXRpbmcgNjRiaXQgbGlicmFyaWVzLCB0aGUgdGFyZ2V0CitwYWNrYWdlIGJ1aWxkcyBzaG91bGQgbm90IGludm9rZSB0aGUgMzJiaXQgaG9zdHMncyBhci4gIFNwZWNpZmljYWxseQoreW91IHdpbGwgZ2V0IGFuIGVycm9yIG1lc3NhZ2UgbGlrZToKKworeDg2XzY0LWxpbnV4LWdjYyAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1MbGlicy94ODZlbXUgdjg2X3g4NmVtdS5vIHY4Nl9tZW0ubyB2ODZfY29tbW9uLm8gIHY4Ni5vIC1seDg2ZW11IC1vIHY4NmQKK2xpYnMveDg2ZW11L2xpYng4NmVtdS5hOiBjb3VsZCBub3QgcmVhZCBzeW1ib2xzOiBBcmNoaXZlIGhhcyBubyBpbmRleDsgcnVuIHJhbmxpYiB0byBhZGQgb25lCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnMveDg2ZW11L01ha2VmaWxlIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2xpYnMveDg2ZW11L01ha2VmaWxlCisrKysgYi9saWJzL3g4NmVtdS9NYWtlZmlsZQorQEAgLTEsNyArMSwxMSBAQAorIE9CSlMgPSBkZWNvZGUubyBmcHUubyBvcHMubyBvcHMyLm8gcHJpbV9vcHMubyBzeXMubworIAorK2lmZXEgKCQoQVIpLCkKKysJQVIgPSBhcgorK2VuZGlmCisrCisgbGlieDg2ZW11LmE6ICQoT0JKUykKKy0JYXIgcnYgJEAgJCsKKysJJChBUikgcnYgJEAgJCsKKyAKKyAlLm86ICUuYworIAkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL2Zic2V0dXAgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9mYnNldHVwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhNDA5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC9mYnNldHVwCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoIAorCisvc2Jpbi9tb2Rwcm9iZSB1dmVzYWZiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC91dmVzYWZiLmNvbmYgYi9tZXRhL3JlY2lwZXMtYnNwL3Y4NmQvdjg2ZC91dmVzYWZiLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3ODk3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkL3V2ZXNhZmIuY29uZgpAQCAtMCwwICsxLDIgQEAKKyMgTG9hZCB1dmVzYWZiLmtvIGF0IGJvb3QKK3V2ZXNhZmIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYiBiL21ldGEvcmVjaXBlcy1ic3Avdjg2ZC92ODZkXzAuMS4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTAyMDcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWJzcC92ODZkL3Y4NmRfMC4xLjEwLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiVXNlciBzdXBwb3J0IGJpbmFyeSBmb3IgdGhlIHV2ZXNhZmIga2VybmVsIG1vZHVsZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9kZXYuZ2VudG9vLm9yZy9+c3BvY2svcHJvamVjdHMvdXZlc2FmYi8iCisKKyMgdGhlIGNvcHlyaWdodCBpbmZvIGlzIGF0IHRoZSBib3R0b20gb2YgUkVBRE1FLCBleHBlY3QgYnJlYWsKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTk0YWMxOTcxZTRmMjMwOWRjMzIyZDU5OGU3YjFmN2RkIgorCitERVBFTkRTID0gInZpcnR1YWwva2VybmVsIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS11dmVzYWZiIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL1VwZGF0ZS14ODZlbXUtZnJvbS1YLm9yZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mYnNldHVwIFwKKyAgICAgICAgICAgZmlsZTovL3V2ZXNhZmIuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9hci1mcm9tLWVudi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxYzc5MmJhN2I4NzRhZDhjNDNmMGQzZGE0Y2ZhYmUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzNDk2NGFlMThlZjY4Yzg0OTNhZGQyY2UxNTBlM2I0NTAyYmFkZWIwZDkxOTRiNGJkODEyNDFkMjVlNjczNWMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitJTklUU0NSSVBUX05BTUUgPSAiZmJzZXR1cCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAgUyAuIgorCitkb19jb25maWd1cmUgKCkgeworCS4vY29uZmlndXJlIC0td2l0aC14ODZlbXUKK30KKworZG9fY29tcGlsZSAoKSB7CisJS0RJUj0iJHtTVEFHSU5HX0RJUl9IT1NUfS91c3IiIG1ha2UKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisJaW5zdGFsbCB2ODZkICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisKKyAgICAgICAgIyBPbmx5IGluc3RhbGwgZmJzZXR1cCBzY3JpcHQgaWYgJ3N5c3Zpbml0JyBpcyBpbiBESVNUUk9fRkVBVFVSRVMKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vZmJzZXR1cCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZmJzZXR1cAorICAgICAgICBmaQorCisgICAgICAgICMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlCisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQKKyAgICAgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3V2ZXNhZmIuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tb2R1bGVzLWxvYWQuZAorICAgICAgICBmaQorfQorCisjIEFzIHRoZSByZWNpcGUgZG9lc24ndCBpbmhlcml0IHN5c3RlbWQuYmJjbGFzcywgd2UgbmVlZCB0byBzZXQgdGhpcyB2YXJpYWJsZQorIyBtYW51YWxseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBwb3N0aW5zdC9wcmVpbnN0IGdlbmVyYXRlZC4KK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBpZiBub3QgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgZC5zZXRWYXIoIklOSElCSVRfVVBEQVRFUkNEX0JCQ0xBU1MiLCAiMSIpCit9CisKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZmJzZXR1cC5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS11aV8wLjYuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhNGQ3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvYXZhaGktdWlfMC42LjMxLmJiCkBAIC0wLDAgKzEsNzIgQEAKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvbW1vbi9hZGRyZXNzLmg7ZW5kbGluZT0yNTttZDU9YjFkMWQyY2RhMWMwN2ViODQ4ZWE3ZDYyMTU3MTJkOWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktY29yZS9kbnMuaDtlbmRsaW5lPTIzO21kNT02ZmU4MjU5MGI4MWFhMGRkZWE1MDk1YjU0OGUyZmRjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1kYWVtb24vbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTllZTc3MzY4YzU0MDdhZjc3Y2FhZWYxYjA3Mjg1OTY5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNsaWVudC9jbGllbnQuaDtlbmRsaW5lPTIzO21kNT1mNGFjNzQxYTI1YzRmNDM0MDM5YmEzZTE4Yzg2NzRjZiIKKworcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFQ09ORklHID8/PSAicHl0aG9uIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbiwtLWRpc2FibGUtcHl0aG9uLHB5dGhvbi1uYXRpdmUgcHl0aG9uIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworU1JDX1VSSVttZDVzdW1dID0gIjJmMjI3NDViOGY3MzY4YWQ1YTBhM2ZkZGFjMzQzZjJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzNzI3MTliMjRlMmRkNzVkZTZmNTliYjEzMTVlNjAwZGI0ZmQwOTI4MDViZDEyMDFlZDBjYjY1MWEyZGFiNDgiCisKK0RFUEVORFMgKz0gImF2YWhpIGd0aysgbGliZ2xhZGUiCisKK0FWQUhJX0dUSyA9ICItLWVuYWJsZS1ndGsgLS1kaXNhYmxlLWd0azMiCisKK1MgPSAiJHtXT1JLRElSfS9hdmFoaS0ke1BWfSIKKworUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tdXRpbHMgJHtQTn0tZGJnICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tZG9jIHB5dGhvbi1hdmFoaSBhdmFoaS1kaXNjb3ZlciBhdmFoaS1kaXNjb3Zlci1zdGFuZGFsb25lIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkqLnNvLioiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGliYXZhaC11aSoiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJhdmFoaS11aSR7U09MSUJTREVWfSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLXVpLmEiCisKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9iKiAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9iKiIKKworRklMRVNfcHl0aG9uLWF2YWhpID0gIiR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpICR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L2F2YWhpX2Rpc2NvdmVyIgorRklMRVNfYXZhaGktZGlzY292ZXIgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2F2YWhpLWRpc2NvdmVyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hdmFoaS9pbnRlcmZhY2VzL2F2YWhpLWRpc2NvdmVyKiIKK0ZJTEVTX2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgPSAiJHtiaW5kaXJ9L2F2YWhpLWRpc2NvdmVyLXN0YW5kYWxvbmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludGVyZmFjZXMvYXZhaGktZGlzY292ZXIuZ2xhZGUiCisKK1JERVBFTkRTX2F2YWhpLWRpc2NvdmVyID0gInB5dGhvbi1hdmFoaSBweXRob24tcHlndGsiCitSREVQRU5EU19weXRob24tYXZhaGkgPSAicHl0aG9uLWNvcmUgcHl0aG9uLWRidXMiCisKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCXJtICR7RH0ke3N5c2NvbmZkaXJ9IC1yZgorCXJtICR7RH0ke2Jhc2VfbGliZGlyfSAtcmYKKwlybSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9IC1yZgorCSMgVGhlICR7c3lzdGVtZF91bml0ZGlyfSBpcyAvbGliL3N5c3RlbWQsIHNvIHdlIG5lZWQgcm1kaXIgL2xpYiwKKwkjIGJ1dCBub3QgJHtiYXNlX2xpYmRpcn0gaGVyZS4gQW5kIHRoZSAvbGliIG1heSBub3QgZXhpc3QKKwkjIHdoaXRob3V0IHN5c3RlbWQuCisJWyAhIC1kICR7RH0vbGliIF0gfHwgcm1kaXIgJHtEfS9saWIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLWIqCisJcm0gJHtEfSR7YmluZGlyfS9hdmFoaS1wKgorCXJtICR7RH0ke2JpbmRpcn0vYXZhaGktcioKKwlybSAke0R9JHtiaW5kaXJ9L2F2YWhpLXMqCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktYyogLXJmCisJcm0gJHtEfSR7aW5jbHVkZWRpcn0vYXZhaGktZyogLXJmCisJcm0gJHtEfSR7bGliZGlyfS9saWJhdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vbGliYXZhaGktZyoKKwlybSAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9hdmFoaS1jKgorCXJtICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2F2YWhpLWcqCisJcm0gJHtEfSR7c2JpbmRpcn0gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vYXZhaGkvYSoKKwlybSAke0R9JHtkYXRhZGlyfS9hdmFoaS9zKgorCXJtICR7RH0ke2RhdGFkaXJ9L2xvY2FsZS8gLXJmCisJcm0gJHtEfSR7ZGF0YWRpcn0vZGJ1cyogLXJmCisJcm0gJHtEfSR7bWFuZGlyfS9tYW4xL2EqCisJcm0gJHtEfSR7bWFuZGlyfS9tYW41IC1yZgorCXJtICR7RH0ke21hbmRpcn0vbWFuOCAtcmYKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjUxOTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaS5pbmMKQEAgLTAsMCArMSwxNTggQEAKK1NVTU1BUlkgPSAiQXZhaGkgSVB2NExMIG5ldHdvcmsgYWRkcmVzcyBjb25maWd1cmF0aW9uIGRhZW1vbiIKK0RFU0NSSVBUSU9OID0gJ0F2YWhpIGlzIGEgZnVsbHkgTEdQTCBmcmFtZXdvcmsgZm9yIE11bHRpY2FzdCBETlMgU2VydmljZSBEaXNjb3ZlcnkuIEl0IFwKK2FsbG93cyBwcm9ncmFtcyB0byBwdWJsaXNoIGFuZCBkaXNjb3ZlciBzZXJ2aWNlcyBhbmQgaG9zdHMgcnVubmluZyBvbiBhIGxvY2FsIG5ldHdvcmsgXAord2l0aCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBUaGlzIHRvb2wgaW1wbGVtZW50cyBJUHY0TEwsICJEeW5hbWljIENvbmZpZ3VyYXRpb24gb2YgXAorSVB2NCBMaW5rLUxvY2FsIEFkZHJlc3NlcyIgKElFVEYgUkZDMzkyNyksIGEgcHJvdG9jb2wgZm9yIGF1dG9tYXRpYyBJUCBhZGRyZXNzIFwKK2NvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbGluay1sb2NhbCAxNjkuMjU0LjAuMC8xNiByYW5nZSB3aXRob3V0IHRoZSBuZWVkIGZvciBhIGNlbnRyYWwgXAorc2VydmVyLicKK0FVVEhPUiA9ICJMZW5uYXJ0IFBvZXR0ZXJpbmcgPGxlbm5hcnRAcG9ldHRlcmluZy5uZXQ+IgorSE9NRVBBR0UgPSAiaHR0cDovL2F2YWhpLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2F2YWhpLm9yZy9yZXBvcnQiCitTRUNUSU9OID0gIm5ldHdvcmsiCisKKyMgbWFqb3IgcGFydCBpcyB1bmRlciBMR1BMdjIuMSssIGJ1dCBzZXZlcmFsIC5kdGQsIC54c2wsIGluaXRzY3JpcHRzIGFuZAorIyBweXRob24gc2NyaXB0cyBhcmUgdW5kZXIgR1BMdjIrCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKKworSU5DX1BSID0gInIxMSIKKworREVQRU5EUyA9ICJleHBhdCBsaWJjYXAgbGliZGFlbW9uIGRidXMgZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiaHR0cDovL2F2YWhpLm9yZy9kb3dubG9hZC9hdmFoaS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly8wMGF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly85OWF2YWhpLWF1dG9pcGQgXAorICAgICAgICAgIGZpbGU6Ly9pbml0c2NyaXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL291dC1vZi10cmVlLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWF1dG9pcGQiCitVU0VSQUREX1BBUkFNX2F2YWhpLWRhZW1vbiA9ICItLXN5c3RlbSAtLWhvbWUgL3Zhci9ydW4vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBhdmFoaSIKKworVVNFUkFERF9QQVJBTV9hdmFoaS1hdXRvaXBkID0gIi0tc3lzdGVtIC0taG9tZSAvdmFyL3J1bi9hdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tdXNlci1ncm91cCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYyBcIkF2YWhpIGF1dG9pcCBkYWVtb25cIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFoaS1hdXRvaXBkIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgZ2V0dGV4dCB1c2VyYWRkCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisgICAgICAgICAgICAgLS13aXRoLWF2YWhpLXByaXYtYWNjZXNzLWdyb3VwPWFkbSBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YWNrLXByb3RlY3RvciBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWdkYm0gXAorICAgICAgICAgICAgIC0tZGlzYWJsZS1tb25vIFwKKyAgICAgICAgICAgICAtLWRpc2FibGUtbW9ub2RvYyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0MyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXF0NCBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXB5dGhvbiBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jIFwKKyAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9TWVNWSU5JVH0gXAorICAgICAgICAgICAgICR7RVhUUkFfT0VDT05GX1NZU1RFTUR9IFwKKyAgICAgICAgICAgICAke0FWQUhJX0dUS30gXAorICAgICAgICAgICAiCisKKyMgVGhlIGRpc3RybyBjaG9pY2UgZGV0ZXJtaW5lcyB3aGF0IGluaXQgc2NyaXB0cyBhcmUgaW5zdGFsbGVkCitFWFRSQV9PRUNPTkZfU1lTVklOSVQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnLS13aXRoLWRpc3Rybz1kZWJpYW4nLCctLXdpdGgtZGlzdHJvPW5vbmUnLGQpfSIKK0VYVFJBX09FQ09ORl9TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJywnLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyJyxkKX0iCisKK0FWQUhJX0dUSyA/PSAiLS1kaXNhYmxlLWd0ayAtLWRpc2FibGUtZ3RrMyIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1saW50bCIKK0xERkxBR1NfYXBwZW5kX3VjbGludXgtdWNsaWJjID0gIiAtbGludGwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAnczpBTV9DSEVDS19QWU1PRDplY2hvICJubyBweW1vZCIgI0FNX0NIRUNLX1BZTU9EOmcnIC1pICR7U30vY29uZmlndXJlLmFjCit9CisKKworUEFDS0FHRVMgPSsgImF2YWhpLWRhZW1vbiBsaWJhdmFoaS1jb21tb24gbGliYXZhaGktY29yZSBsaWJhdmFoaS1jbGllbnQgYXZhaGktZG5zY29uZmQgbGliYXZhaGktZ2xpYiBsaWJhdmFoaS11aSBhdmFoaS1hdXRvaXBkIGF2YWhpLXV0aWxzIgorCisjIEFzIGF2YWhpIGRvZXNuJ3QgcHV0IGFueSBmaWxlcyBpbnRvIFBOLCBjbGVhciB0aGUgZmlsZXMgbGlzdCB0byBhdm9pZCBwcm9ibGVtcworIyBpZiBleHRyYSBsaWJyYXJpZXMgYXBwZWFyLgorRklMRVNfJHtQTn0gPSAiIgorRklMRVNfYXZhaGktYXV0b2lwZCA9ICIke3NiaW5kaXJ9L2F2YWhpLWF1dG9pcGQgXAorICAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWF1dG9pcGQuYWN0aW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9kaGNwLyovYXZhaGktYXV0b2lwZCBcCisgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdWRoY3BjLmQvMDBhdmFoaS1hdXRvaXBkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS91ZGhjcGMuZC85OWF2YWhpLWF1dG9pcGQiCitGSUxFU19saWJhdmFoaS1jb21tb24gPSAiJHtsaWJkaXJ9L2xpYmF2YWhpLWNvbW1vbi5zby4qIgorRklMRVNfbGliYXZhaGktY29yZSA9ICIke2xpYmRpcn0vbGliYXZhaGktY29yZS5zby4qIgorRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c2JpbmRpcn0vYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2F2YWhpLWRhZW1vbi5jb25mIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL2hvc3RzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2F2YWhpL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RidXMtMSBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZGFlbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2ludHJvc3BlY3Rpb24vKi5pbnRyb3NwZWN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL2F2YWhpLXNlcnZpY2UuZHRkIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2F2YWhpL3NlcnZpY2UtdHlwZXMgXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyIKK0ZJTEVTX2xpYmF2YWhpLWNsaWVudCA9ICIke2xpYmRpcn0vbGliYXZhaGktY2xpZW50LnNvLioiCitGSUxFU19saWJhdmFoaS11aSA9ICIke2xpYmRpcn0vbGliYXZhaGktdWkuc28uKiIKK0ZJTEVTX2F2YWhpLWRuc2NvbmZkID0gIiR7c2JpbmRpcn0vYXZhaGktZG5zY29uZmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9hdmFoaS9hdmFoaS1kbnNjb25mZC5hY3Rpb24gXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvYXZhaGktZG5zY29uZmQiCitGSUxFU19saWJhdmFoaS1nbGliID0gIiR7bGliZGlyfS9saWJhdmFoaS1nbGliLnNvLioiCitGSUxFU19saWJhdmFoaS1nb2JqZWN0ID0gIiR7bGliZGlyfS9saWJhdmFoaS1nb2JqZWN0LnNvLioiCitGSUxFU19hdmFoaS11dGlscyA9ICIke2JpbmRpcn0vYXZhaGktKiIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gImF2YWhpLWRhZW1vbiAoPSAke0VYVEVORFBLR1Z9KSBsaWJhdmFoaS1jb3JlICg9ICR7RVhURU5EUEtHVn0pIGxpYmF2YWhpLWNsaWVudCAoPSAke0VYVEVORFBLR1Z9KSIKKworIyB1Y2xpYmMgaGFzIG5vIG5zcworUlJFQ09NTUVORFNfYXZhaGktZGFlbW9uX2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF9saWJjLWdsaWJjID0gIiBsaWJuc3MtbWRucyIKKworUlJFQ09NTUVORFNfYXZhaGktZGV2ID0gImV4cGF0LWRldiBsaWJjYXAtZGV2IGxpYmRhZW1vbi1kZXYgZGJ1cy1kZXYgZ2xpYi0yLjAtZGV2IHVwZGF0ZS1yYy5kLWRldiIKK1JSRUNPTU1FTkRTX2F2YWhpLWRldl9hcHBlbmRfbGliYy1nbGliYyA9ICIgZ2V0dGV4dC1kZXYiCisKK1JSRUNPTU1FTkRTX2F2YWhpLWRldltub2RlcHJyZWNzXSA9ICIxIgorCitDT05GRklMRVNfYXZhaGktZGFlbW9uID0gIiR7c3lzY29uZmRpcn0vYXZhaGkvYXZhaGktZGFlbW9uLmNvbmYiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiYXZhaGktZGFlbW9uIGF2YWhpLWRuc2NvbmZkIgorSU5JVFNDUklQVF9OQU1FX2F2YWhpLWRhZW1vbiA9ICJhdmFoaS1kYWVtb24iCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kYWVtb24gPSAiZGVmYXVsdHMgMjEgMTkiCitJTklUU0NSSVBUX05BTUVfYXZhaGktZG5zY29uZmQgPSAiYXZhaGktZG5zY29uZmQiCitJTklUU0NSSVBUX1BBUkFNU19hdmFoaS1kbnNjb25mZCA9ICJkZWZhdWx0cyAyMiAxOSIKKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkb24ndCBpbnN0YWxsIC92YXIvcnVuIHdoZW4gcG9wdWxhdGluZyByb290ZnMuIERvIGl0IHRocm91Z2ggdm9sYXRpbGUKKwkjIC92YXIvcnVuIG9mIGN1cnJlbnQgdmVyc2lvbiBpcyBlbXB0eSwgc28ganVzdCByZW1vdmUgaXQuCisJIyBpZiAvdmFyL3J1biBiZWNvbWUgbm9uLWVtcHR5IGluIHRoZSBmdXR1cmUsIG5lZWQgdG8gaW5zdGFsbCBpdCB2aWEgdm9sYXRpbGUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vZGJ1cy0xL2ludGVyZmFjZXMKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAke0R9JHtkYXRhZGlyfS9kYnVzLTEKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9hdmFoaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCWluc3RhbGwgJHtXT1JLRElSfS8wMGF2YWhpLWF1dG9pcGQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQKKwlpbnN0YWxsICR7V09SS0RJUn0vOTlhdmFoaS1hdXRvaXBkICR7RH0ke3N5c2NvbmZkaXJ9L3VkaGNwYy5kCit9CisKKyMgQXQgdGhlIHRpbWUgdGhlIHBvc3RpbnN0IHJ1bnMsIGRidXMgbWlnaHQgbm90IGJlIHNldHVwIHNvIG9ubHkgcmVzdGFydCBpZiBydW5uaW5nIAorIyBEb24ndCBleGl0IGVhcmx5LCBiZWNhdXNlIHVwZGF0ZS1yYy5kIG5lZWRzIHRvIHJ1biBzdWJzZXF1ZW50bHkuCisKK3BrZ19wb3N0aW5zdF9hdmFoaS1kYWVtb24gKCkgeworaWYgWyAteiAiJEQiIF07IHRoZW4KKwlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorZmkKK30KKworcGtnX3Bvc3RybV9hdmFoaS1kYWVtb24gKCkgeworCWRlbHVzZXIgYXZhaGkgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpIHx8IHRydWUKK30KKworcGtnX3Bvc3RybV9hdmFoaS1hdXRvaXBkICgpIHsKKwlkZWx1c2VyIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorCWRlbGdyb3VwIGF2YWhpLWF1dG9pcGQgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2F2YWhpXzAuNi4zMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDc5NmEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9hdmFoaV8wLjYuMzEuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBhdmFoaS5pbmMKKworaW5oZXJpdCBzeXN0ZW1kCisKK1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tZGFlbW9uICR7UE59LWRuc2NvbmZkIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWRhZW1vbiA9ICJhdmFoaS1kYWVtb24uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1kbnNjb25mZCA9ICJhdmFoaS1kbnNjb25mZC5zZXJ2aWNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jb21tb24vYWRkcmVzcy5oO2VuZGxpbmU9MjU7bWQ1PWIxZDFkMmNkYTFjMDdlYjg0OGVhN2Q2MjE1NzEyZDlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F2YWhpLWNvcmUvZG5zLmg7ZW5kbGluZT0yMzttZDU9NmZlODI1OTBiODFhYTBkZGVhNTA5NWI1NDhlMmZkY2IgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXZhaGktZGFlbW9uL21haW4uYztlbmRsaW5lPTIxO21kNT05ZWU3NzM2OGM1NDA3YWY3N2NhYWVmMWIwNzI4NTk2OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdmFoaS1jbGllbnQvY2xpZW50Lmg7ZW5kbGluZT0yMzttZDU9ZjRhYzc0MWEyNWM0ZjQzNDAzOWJhM2UxOGM4Njc0Y2YiCisKK1BSID0gIiR7SU5DX1BSfS4xIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmYyMjc0NWI4ZjczNjhhZDVhMGEzZmRkYWMzNDNmMmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODM3MjcxOWIyNGUyZGQ3NWRlNmY1OWJiMTMxNWU2MDBkYjRmZDA5MjgwNWJkMTIwMWVkMGNiNjUxYTJkYWI0OCIKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitQQUNLQUdFUyA9KyAibGliYXZhaGktZ29iamVjdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMDAxLWF2YWhpLWZpeC1hdmFoaS1zdGF0dXMtY29tbWFuZC1lcnJvci1wcm9tcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5MGRmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvMDAwMS1hdmFoaS1maXgtYXZhaGktc3RhdHVzLWNvbW1hbmQtZXJyb3ItcHJvbXB0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZjc3NGFjMjVmNDM2YTc4MmNjY2NjNGRiZTY4Mzc4YTY4NDU5Njc5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCA3IE5vdiAyMDEzIDE0OjM2OjI4ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGF2YWhpOiBmaXggYXZhaGkgc3RhdHVzIGNvbW1hbmQgZXJyb3IgcHJvbXB0CisKK3NlcnZpY2UgLS1zdGF0dXMtYWxsIGNvbW1hbmQgd2lsbCBkaXNwbGF5IHdyb25nIHN0YXR1cyBmb3IgYXZhaGktZGFlbW9uLgorVGhpcyBjb21taXQgZml4IHRoaXMgZXJyb3IgcHJvbXB0IGFuZCBtYWtlIHNlcnZpY2UgZGlzcGxheSByaWdodCBzdGF0dXMKK2ZvciBhdmFoaS1kYWVtb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMdSBDaG9uZyA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiB8ICAgMTQgKysrKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggNDc5M2I0Ni4uNDllYzM1OCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMTUzLDcgKzE1MywxNSBAQCBkX3JlbG9hZCgpIHsKKyAjICAgICAgIEZ1bmN0aW9uIHRoYXQgY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGUgZGFlbW9uL3NlcnZpY2UuCisgIworIGRfc3RhdHVzKCkgeworLSAgICAkREFFTU9OIC1jICYmIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciIHx8IGVjaG8gIiRERVNDIGlzIG5vdCBydW5uaW5nIgorKyAgICAkREFFTU9OIC1jCisrICAgIHN0YXR1cz0kPworKyAgICBpZiBbICRzdGF0dXMgPSAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gIiRERVNDIGlzIHJ1bm5pbmciCisrICAgICAgICByZXR1cm4gMAorKyAgICBlbHNlCisrICAgICAgICBlY2hvICIkREVTQyBpcyBub3QgcnVubmluZyIKKysgICAgICAgIHJldHVybiAzCisrICAgIGZpCisgfQorIAorIGNhc2UgIiQxIiBpbgorQEAgLTE4Miw5ICsxOTAsOSBAQCBjYXNlICIkMSIgaW4KKyAgICAgICAgIGRfc3RhdHVzCisgCTs7CisgICAgICopCistICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfSIgPiYyCisrICAgICAgICBlY2hvICJVc2FnZTogJFNDUklQVE5BTUUge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkfHN0YXR1c30iID4mMgorICAgICAgICAgZXhpdCAxCisgICAgICAgICA7OworIGVzYWMKKyAKKy1leGl0IDAKKytleGl0ICQ/CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzLzAwYXZhaGktYXV0b2lwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGFiODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy8wMGF2YWhpLWF1dG9pcGQKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK1sgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdWRoY3BjIiAmJiBleGl0IDEKKworY2FzZSAiJDEiIGluCisKKwlkZWNvbmZpZ3xyZW5ld3xib3VuZCkKKwkJL3Vzci9zYmluL2F2YWhpLWF1dG9pcGQgLWsgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy85OWF2YWhpLWF1dG9pcGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0Y2RhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvOTlhdmFoaS1hdXRvaXBkCkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHVkaGNwYyIgJiYgZXhpdCAxCisKK2Nhc2UgIiQxIiBpbgorCisJbGVhc2VmYWlsKQorCQkvdXNyL3NiaW4vYXZhaGktYXV0b2lwZCAtd0QgJGludGVyZmFjZSAyPiAvZGV2L251bGwKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvYXZhaGlfZml4X2luc3RhbGxfaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZjIwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2F2YWhpX2ZpeF9pbnN0YWxsX2lzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXhlcyB0aGlzIGluc3RhbGwgaXNzdWUKKyN8IC9iaW4vc2g6IGxpbmUgMDogY2Q6IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2F2YWhpLTAuNi4zMS1yMy4wL2ltYWdlLy91c3IvYmluOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAzCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktdXRpbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5hbQorQEAgLTU0LDYgKzU0LDcgQEAgYXZhaGlfc2V0X2hvc3RfbmFtZV9DRkxBR1MgPSAkKEFNX0NGTEFHUworIGF2YWhpX3NldF9ob3N0X25hbWVfTERBREQgPSAkKEFNX0xEQUREKSAuLi9hdmFoaS1jbGllbnQvbGliYXZhaGktY2xpZW50LmxhIC4uL2F2YWhpLWNvbW1vbi9saWJhdmFoaS1jb21tb24ubGEKKyAKKyBpbnN0YWxsLWV4ZWMtbG9jYWw6CisrCSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIAljZCAkKERFU1RESVIpLyQoYmluZGlyKSAmJiBcCisgCQlybSAtZiBhdmFoaS1yZXNvbHZlLWhvc3QtbmFtZSBhdmFoaS1yZXNvbHZlLWFkZHJlc3MgYXZhaGktYnJvd3NlLWRvbWFpbnMgYXZhaGktcHVibGlzaC1hZGRyZXNzIGF2YWhpLXB1Ymxpc2gtc2VydmljZSAmJiBcCisgCQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXAorSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS11dGlscy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF2YWhpLTAuNi4zMS5vcmlnL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCisrKysgYXZhaGktMC42LjMxL2F2YWhpLXV0aWxzL01ha2VmaWxlLmluCitAQCAtOTA2LDYgKzkwNiw3IEBAIHVuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWJpblBST0dSQU1TCisgCisgCisgQEhBVkVfREJVU19UUlVFQGluc3RhbGwtZXhlYy1sb2NhbDoKKytASEFWRV9EQlVTX1RSVUVACSQoTUtESVJfUCkgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJY2QgJChERVNURElSKS8kKGJpbmRpcikgJiYgXAorIEBIQVZFX0RCVVNfVFJVRUAJCXJtIC1mIGF2YWhpLXJlc29sdmUtaG9zdC1uYW1lIGF2YWhpLXJlc29sdmUtYWRkcmVzcyBhdmFoaS1icm93c2UtZG9tYWlucyBhdmFoaS1wdWJsaXNoLWFkZHJlc3MgYXZhaGktcHVibGlzaC1zZXJ2aWNlICYmIFwKKyBASEFWRV9EQlVTX1RSVUVACQkkKExOX1MpIGF2YWhpLXJlc29sdmUgYXZhaGktcmVzb2x2ZS1ob3N0LW5hbWUgJiYgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9maXhfZm9yX2F1dG9tYWtlXzEuMTIueC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjNGMyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvZml4X2Zvcl9hdXRvbWFrZV8xLjEyLngucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9hbWtlIDEuMTIueCBoYXMgZGVwcmljYXRlZCB1c2Ugb2YgbWtkaXJfcCAsIGFuZCByZWNvbW1lbmRzIHVzZSBvZiBNS0RJUl9QCitpbnN0ZWFkLiBGaXhlZCB0aGUgYXV0b21ha2UgZmlsZXMgYWNjb3JkaW5nbHkgdG8gYXZvaWQgd2FybmluZy1lcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNy8wOQorCisKK0luZGV4OiBhdmFoaS0wLjYuMzEvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktZGFlbW9uL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWRhZW1vbi9NYWtlZmlsZS5hbQorQEAgLTE2OSw3ICsxNjksNyBAQCB4bWxsaW50OgorIAlkb25lCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorLQl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorKwl0ZXN0IC16ICIkKGxvY2Fsc3RhdGVkaXIpL3J1biIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobG9jYWxzdGF0ZWRpcikvcnVuIgorIAorIHVwZGF0ZS1zeXN0ZW1kOgorIAljdXJsIGh0dHA6Ly9jZ2l0LmZyZWVkZXNrdG9wLm9yZy9zeXN0ZW1kL3BsYWluL3NyYy9zZC1kYWVtb24uYyA+IHNkLWRhZW1vbi5jCitJbmRleDogYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdmFoaS0wLjYuMzEub3JpZy9hdmFoaS1hdXRvaXBkL01ha2VmaWxlLmFtCisrKysgYXZhaGktMC42LjMxL2F2YWhpLWF1dG9pcGQvTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGRoY2xpZW50ZW50ZXJkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGgKKyBkaGNsaWVudGV4aXRkaXIgPSAkKHN5c2NvbmZkaXIpL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcy5kCisgCisgaW5zdGFsbC1leGVjLWhvb2s6IGRoY2xpZW50LWV4aXQtaG9vayBkaGNsaWVudC1lbnRlci1ob29rCistCSQobWtkaXJfcCkgJChERVNURElSKSQoZGhjbGllbnRlbnRlcmRpcikgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKQorKwkkKE1LRElSX1ApICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpICQoREVTVERJUikkKGRoY2xpZW50ZXhpdGRpcikKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1lbnRlci1ob29rICQoREVTVERJUikkKGRoY2xpZW50ZW50ZXJkaXIpL2F2YWhpLWF1dG9pcGQKKyAJJChJTlNUQUxMKSBkaGNsaWVudC1leGl0LWhvb2sgJChERVNURElSKSQoZGhjbGllbnRleGl0ZGlyKS9hdmFoaS1hdXRvaXBkCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2luaXRzY3JpcHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL2luaXRzY3JpcHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzODg5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvaW5pdHNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbiBiL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgoraW5kZXggMzBhMmMyZi4uYjU4NDhhOCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRhZW1vbi5pbgorKysrIGIvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZGFlbW9uLmluCitAQCAtMSwyICsxLDE0IEBACisgIyEvYmluL3NoCistCisrIyMjIEJFR0lOIElOSVQgSU5GTworKyMgUHJvdmlkZXM6ICAgICAgICAgIGF2YWhpCisrIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyBkYnVzCisrIyBSZXF1aXJlZC1TdG9wOiAgICAgJHJlbW90ZV9mcyBkYnVzCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBEYWVtb24KKysjIERlc2NyaXB0aW9uOiAgICAgICBaZXJvY29uZiBkYWVtb24gZm9yIGNvbmZpZ3VyaW5nIHlvdXIgbmV0d29yayAKKysjICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5CisrIyMjIEVORCBJTklUIElORk8KKysjCitkaWZmIC0tZ2l0IGEvaW5pdHNjcmlwdC9kZWJpYW4vYXZhaGktZG5zY29uZmQuaW4gYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgoraW5kZXggYWMzNDgwNC4uZjk1YzM0MCAxMDA3NTUKKy0tLSBhL2luaXRzY3JpcHQvZGViaWFuL2F2YWhpLWRuc2NvbmZkLmluCisrKysgYi9pbml0c2NyaXB0L2RlYmlhbi9hdmFoaS1kbnNjb25mZC5pbgorQEAgLTEsMSArMSwxNCBAQAorICMhL2Jpbi9zaAorKyMjIyBCRUdJTiBJTklUIElORk8KKysjIFByb3ZpZGVzOiAgICAgICAgICBhdmFoaS1kbnNjb25mZAorKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgYXZhaGkKKysjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIGF2YWhpCisrIyBTaG91bGQtU3RhcnQ6CSAgICAgJHN5c2xvZworKyMgU2hvdWxkLVN0b3A6ICAgICAgICRzeXNsb2cKKysjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisrIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKysjIFNob3J0LURlc2NyaXB0aW9uOiBBdmFoaSBtRE5TL0ROUy1TRCBETlMgY29uZmlndXJhdGlvbgorKyMgRGVzY3JpcHRpb246ICAgICAgIFplcm9jb25mIGRhZW1vbiBmb3IgY29uZmlndXJpbmcgeW91ciBuZXR3b3JrIAorKyMgICAgICAgICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkKKysjIyMgRU5EIElOSVQgSU5GTworKyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvb3V0LW9mLXRyZWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL291dC1vZi10cmVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDc2Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2F2YWhpL2ZpbGVzL291dC1vZi10cmVlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBhNjJkYzk1ZDc1NjkxZWE0YWVmYTg2ZDhiYmU1NGM2MmFmZDc4ZmY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTI6Mjc6MzYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVpbGQtc3lzOiBmaXggb3V0LW9mLXRyZWUgYnVpbGRzIHdpdGhvdXQgeG1sdG9tYW4KKworSWYgbWFucGFnZXMgYXJlIGVuYWJsZWQgYnV0IHhtbHRvbWFuIGlzbid0IHByZXNlbnQsIG91dC1vZi10cmVlIGJ1aWxkcyBmYWlsCitiZWNhdXNlIGl0IGNoZWNrcyBpbnNpZGUgdGhlIGJ1aWxkIGRpcmVjdG9yeSBmb3IgdGhlIHByZS1nZW5lcmF0ZWQgbWFucGFnZXMuCisKK0ZpeCB0aGlzIGJ5IHVzaW5nICRzcmNkaXIgd2hlbiBsb29raW5nIGZvciBmaWxlcyBpbnNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlkZWJjZTIuLjA0N2M3YWUgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwMjEsNyArMTAyMSw3IEBAIGlmIHRlc3QgeCRtYW5wYWdlcyA9IHh5ZXMgOyB0aGVuCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRoYXZlX3htbHRvbWFuID0geG5vIC1vIHgkeG1sdG9tYW4gPSB4bm87IHRoZW4KKy0gICAgICAgIGlmICEgdGVzdCAtZSBtYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisrICAgICAgICBpZiAhIHRlc3QgLWUgJHNyY2Rpci9tYW4vYXZhaGktZGFlbW9uLjggOyB0aGVuCisgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFsqKiogeG1sdG9tYW4gd2FzIG5vdCBmb3VuZCBvciB3YXMgZGlzYWJsZWQsIGl0IGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBtYW5wYWdlcyBhcyB0aGV5IGhhdmUgbm90IGJlZW4gcHJlLWJ1aWx0LCBpbnN0YWxsIHhtbHRvbWFuLCBwYXNzIC0tZGlzYWJsZS1tYW5wYWdlcyBvciBkb250IHBhc3MgLS1kaXNhYmxlLXhtbHRvbWFuXSkKKyAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgIGZpCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9hdmFoaS9maWxlcy9yZXVzZXBvcnQtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4MWMyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYXZhaGkvZmlsZXMvcmV1c2Vwb3J0LWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0ZpeCBhdmFoaS1kYWVtb24gd2hlbiBydW5uaW5nIG9uIGtlcm5lbCA8IDMuOSAocGF0Y2ggdGFrZW4gZnJvbSBVYnVudHUpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgKHVubWFpbnRhaW5lZCB1cHN0cmVhbSkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK0Rlc2NyaXB0aW9uOiBTT19SRVVTRVBPUlQgbWF5IG5vdCBleGlzdCBpbiBydW5uaW5nIGtlcm5lbAorIFdoZW4gdXNlcnNwYWNlIGRlZmluZXMgU09fUkVVU0VQT1JUIHdlIHdpbGwgYXR0ZW1wdCB0byBlbmFibGUgc29ja2V0CisgcG9ydCBudW1iZXIgcmV1c2UuICBIb3dldmVyIGlmIHRoZSBydW5uaW5nIGtlcm5lbCBkb2VzIG5vdCBzdXBwb3J0CisgdGhpcyBjYWxsIGl0IHdpbGwgZmFpbCBwcmV2ZW50aW5nIGRhZW1vbiBzdGFydHVwLiAgSWYgdGhpcyBjYWxsIGlzCisgcHJlc2VudCBidXQgZmFpbHMgRU5PUFJPVE9PUFQgdGhlbiB3ZSBrbm93IHRoYXQgYWN0dWFsbHkgdGhlIGtlcm5lbAorIGRvZXMgbm90IHN1cHBvcnQgaXQgYW5kIHdlIHNob3VsZCBjb250aW51ZSBhcyBpZiB3ZSBkaWQgbm90IGhhdmUgdGhlCisgY2FsbCBhdCBhbGwuICAoTFA6ICMxMjI4MjA0KQorIC4KKyBUaGlzIHBhdGNoIGNvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGViaWFuIHBhY2thZ2UgYWZ0ZXIgamVzc2llIHJlbGVhc2UuCitBdXRob3I6IEFuZHkgV2hpdGNyb2Z0IDxhcHdAY2Fub25pY2FsLmNvbT4KKworSW5kZXg6IGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXZhaGktMC42LjMxLm9yaWcvYXZhaGktY29yZS9zb2NrZXQuYwkyMDEzLTA5LTIwIDE2OjM2OjUwLjAwMDAwMDAwMCArMDEwMAorKysrIGF2YWhpLTAuNi4zMS9hdmFoaS1jb3JlL3NvY2tldC5jCTIwMTMtMDktMjAgMTY6Mzg6MjMuNzgxODYzNjQ0ICswMTAwCitAQCAtMTc3LDcgKzE3Nyw4IEBACisgICAgIHllcyA9IDE7CisgICAgIGlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19SRVVTRVBPUlQsICZ5ZXMsIHNpemVvZih5ZXMpKSA8IDApIHsKKyAgICAgICAgIGF2YWhpX2xvZ193YXJuKCJTT19SRVVTRVBPUlQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CistICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICBpZiAoZXJybm8gIT0gRU5PUFJPVE9PUFQpCisrICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgI2VuZGlmCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtYnVpbGQtdXNlLXBrZy1jb25maWctdG8tZmluZC1saWJ4bWwyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNTI1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWJ1aWxkLXVzZS1wa2ctY29uZmlnLXRvLWZpbmQtbGlieG1sMi5wYXRjaApAQCAtMCwwICsxLDQyIEBACit4bWwyLWNvbmZpZyBpcyBkaXNhYmxlZCwgc28gY2hhbmdlIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSBwa2djb25maWcgdG8gZmluZAorbGlieG1sMi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCistLS0KKyBjb25maWd1cmUuaW4gfCAxOCArKystLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZDU2NmUxYy4uYzllZjNhNiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMjEwMiwyMSArMjEwMiw5IEBAIGNhc2UgIiR1c2VfbGlieG1sMiIgaW4KKyAJCURTVF9MSUJYTUwyX0lOQz0iIgorIAkJOzsKKyAJYXV0b3x5ZXMpCistCQljYXNlIFhgKHhtbDItY29uZmlnIC0tdmVyc2lvbikgMj4vZGV2L251bGxgIGluCistCQlYMi5bWzY3ODldXS4qKQorLQkJCWxpYnhtbDJfbGlicz1geG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWB4bWwyLWNvbmZpZyAtLWNmbGFnc2AKKy0JCQk7OworLQkJKikKKy0JCQlsaWJ4bWwyX2xpYnM9CistCQkJbGlieG1sMl9jZmxhZ3M9CistCQkJOzsKKy0JCWVzYWMKKy0JCTs7CistCSopCistCQlpZiB0ZXN0IC1mICIkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIiA7IHRoZW4KKy0JCQlsaWJ4bWwyX2xpYnM9YCR1c2VfbGlieG1sMi9iaW4veG1sMi1jb25maWcgLS1saWJzYAorLQkJCWxpYnhtbDJfY2ZsYWdzPWAkdXNlX2xpYnhtbDIvYmluL3htbDItY29uZmlnIC0tY2ZsYWdzYAorKwkJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyBsaWJ4bWwtMi4wIDsgdGhlbgorKwkJCWxpYnhtbDJfbGlicz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tbGlic2AKKysJCQlsaWJ4bWwyX2NmbGFncz1gcGtnLWNvbmZpZyBsaWJ4bWwtMi4wIC0tY2ZsYWdzYAorIAkJZmkKKyAJCTs7CisgZXNhYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIxNTA5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kLzAwMDEtZ2VuLmMtZXh0ZW5kLURJUk5BTUVTSVpFLWZyb20tMjU2LXRvLTUxMi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZ2VuLmM6IGV4dGVuZCBESVJOQU1FU0laRSBmcm9tIDI1NiB0byA1MTIKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGliL2Rucy9nZW4uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kbnMvZ2VuLmMgYi9saWIvZG5zL2dlbi5jCitpbmRleCA3YTdkYWZiLi41MWEwNDM1IDEwMDY0NAorLS0tIGEvbGliL2Rucy9nZW4uYworKysrIGIvbGliL2Rucy9nZW4uYworQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXSA9CisgI2RlZmluZSBUWVBFQ0xBU1NCVUYgKFRZUEVDTEFTU0xFTiArIDEpCisgI2RlZmluZSBUWVBFQ0xBU1NGTVQgIiUiIFNUUihUWVBFQ0xBU1NMRU4pICJbLTAtOWEtel1fJWQiCisgI2RlZmluZSBBVFRSSUJVVEVTSVpFIDI1NgorLSNkZWZpbmUgRElSTkFNRVNJWkUgMjU2CisrI2RlZmluZSBESVJOQU1FU0laRSA1MTIKKyAKKyBzdGF0aWMgc3RydWN0IGNjIHsKKyAJc3RydWN0IGNjICpuZXh0OworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2ZDVkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtY29uZmdlbi1idWlsZC11bml4Lm8tb25jZS5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDliNDA2MTlmZjZmZGRmZWYyNzU4YmE3OTc3ODlmODQ4N2Y0MTJkZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgRmViIDIwMTUgMDA6NTA6MDEgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmdlbjogZG9uJ3QgYnVpbGQgdW5peC5vIHR3aWNlCisKK0ZpeGVkOgordW5peC9vcy5vOiBmaWxlIG5vdCByZWNvZ25pemVkOiBGaWxlIHRydW5jYXRlZAorY29sbGVjdDI6IGVycm9yOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1RoaXMgaXMgYmVjYXVzZSBvcy5vIHdhcyBidWlsdCB0d2ljZToKKyogVGhlIGltcGxpY2l0eSBydWxlIChkZXBlbmRzIG9uIHVuaXgvb3MubykKKyogVGhlICJtYWtlIGFsbCIgaW4gdW5peCBzdWJkaXIgKGRlcGVuZHMgb24gdW5peC9vcy5vKQorCitEZXBlbmQgb24gc3ViZGlycyB3aGljaCBpcyB1bml4IG9ubHkgcmF0aGVyIHRoYW4gdW5peC9vcy5vIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmluL2NvbmZnZW4vTWFrZWZpbGUuaW4gYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgoraW5kZXggOGIzZTVhYS4uNDg2OGEyNCAxMDA2NDQKKy0tLSBhL2Jpbi9jb25mZ2VuL01ha2VmaWxlLmluCisrKysgYi9iaW4vY29uZmdlbi9NYWtlZmlsZS5pbgorQEAgLTc0LDExICs3NCwxMSBAQCBybmRjLWNvbmZnZW4uQE9AOiBybmRjLWNvbmZnZW4uYworIGRkbnMtY29uZmdlbi5AT0A6IGRkbnMtY29uZmdlbi5jCisgCSR7TElCVE9PTF9NT0RFX0NPTVBJTEV9ICR7Q0N9ICR7QUxMX0NGTEFHU30gLWMgJHtzcmNkaXJ9L2RkbnMtY29uZmdlbi5jCisgCistcm5kYy1jb25mZ2VuQEVYRUVYVEA6IHJuZGMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSAke0NPTkZERVBMSUJTfSAKKytybmRjLWNvbmZnZW5ARVhFRVhUQDogcm5kYy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7Q09ORkRFUExJQlN9ICQoU1VCRElSUykKKyAJZXhwb3J0IEJBU0VPQkpTPSJybmRjLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtVT0JKU30iOyBcCisgCSR7RklOQUxCVUlMRENNRH0KKyAKKy1kZG5zLWNvbmZnZW5ARVhFRVhUQDogZGRucy1jb25mZ2VuLkBPQCB1dGlsLkBPQCBrZXlnZW4uQE9AICR7VU9CSlN9ICR7Q09ORkRFUExJQlN9IAorK2RkbnMtY29uZmdlbkBFWEVFWFRAOiBkZG5zLWNvbmZnZW4uQE9AIHV0aWwuQE9AIGtleWdlbi5AT0AgJHtDT05GREVQTElCU30gJChTVUJESVJTKQorIAlleHBvcnQgQkFTRU9CSlM9ImRkbnMtY29uZmdlbi5AT0AgdXRpbC5AT0Aga2V5Z2VuLkBPQCAke1VPQkpTfSI7IFwKKyAJJHtGSU5BTEJVSUxEQ01EfQorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2JpbmQtZW5zdXJlLXNlYXJjaGluZy1mb3ItanNvbi1oZWFkZXJzLXNlYXJjaGVzLXN5c3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGYzYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kLWVuc3VyZS1zZWFyY2hpbmctZm9yLWpzb24taGVhZGVycy1zZWFyY2hlcy1zeXNyLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gOTQ3M2QyOTg0MzU3OTgwMmU5NmIwMjkzYTNlOTUzZmVkOTNkZTgyYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjIyOjAwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGJpbmQ6IGVuc3VyZSBzZWFyY2hpbmcgZm9yIGpzb24gaGVhZGVycyBzZWFyY2hlcyBzeXNyb290CisKK0JpbmQgY2FuIGZhaWwgY29uZmlndXJlIGJ5IGRldGVjdGluZyBoZWFkZXJzIHcvbyBsaWJzWzFdLCBvcgoraXQgY2FuIGZhaWwgdGhlIGhvc3QgY29udGFtaW5hdGlvbiBjaGVjayBhcyBwZXIgYmVsb3c6CisKK0VSUk9SOiBUaGlzIGF1dG9jb25mIGxvZyBpbmRpY2F0ZXMgZXJyb3JzLCBpdCBsb29rZWQgYXQgaG9zdCBpbmNsdWRlIGFuZC9vciBsaWJyYXJ5IHBhdGhzIHdoaWxlIGRldGVybWluaW5nIHN5c3RlbSBjYXBhYmlsaXRpZXMuCitSZXJ1biBjb25maWd1cmUgdGFzayBhZnRlciBmaXhpbmcgdGhpcy4gVGhlIHBhdGggd2FzICdidWlsZC90bXAvd29yay9jb3JlMi02NC1wb2t5LWxpbnV4L2JpbmQvOS4xMC4yLXIxL2J1aWxkJworRVJST1I6IEZ1bmN0aW9uIGZhaWxlZDogZG9fcWFfY29uZmlndXJlCitFUlJPUjogTG9nZmlsZSBvZiBmYWlsdXJlIHN0b3JlZCBpbjogYnVpbGQvdG1wL3dvcmsvY29yZTItNjQtcG9reS1saW51eC9iaW5kLzkuMTAuMi1yMS90ZW1wL2xvZy5kb19jb25maWd1cmUuNTI0MgorRVJST1I6IFRhc2sgNSAobWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKK05PVEU6IFRhc2tzIFN1bW1hcnk6IEF0dGVtcHRlZCA3NzMgdGFza3Mgb2Ygd2hpY2ggNzY4IGRpZG4ndCBuZWVkIHRvIGJlIHJlcnVuIGFuZCAxIGZhaWxlZC4KK05vIGN1cnJlbnRseSBydW5uaW5nIHRhc2tzICg3NzMgb2YgNzgxKQorCitTdW1tYXJ5OiAxIHRhc2sgZmFpbGVkOgorICAvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLmJiLCBkb19jb25maWd1cmUKKworT25lIHdheSB0byBmaXggaXQgd291bGQgYmUgdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUganNvbiBpbiBiaW5kCitjb25maWd1cmVbMl0gYnV0IGhlcmUgd2UgZml4IGl0IGJ5IHVzaW5nIHRoZSBwYXRoIHRvIHdoZXJlIHdlIHdvdWxkCitwdXQgdGhlIGhlYWRlciBpZiB3ZSBoYWQganNvbiBpbiB0aGUgc3lzcm9vdCwgaW4gY2FzZSBzb21lb25lIHdhbnRzCit0byBtYWtlIHVzZSBvZiB0aGUgY29tYmluYXRpb24gc29tZSBkYXkuCisKK1sxXSBodHRwczovL3RyYWMubWFjcG9ydHMub3JnL3RpY2tldC80NTMwNQorWzJdIGh0dHBzOi8vdHJhYy5tYWNwb3J0cy5vcmcvY2hhbmdlc2V0LzEyNjQwNgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IGM5ZWYzYTYwMTM0My4uMTdhMWY2MTNlOWFjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC0yMTM5LDcgKzIxMzksNyBAQCBjYXNlICIkdXNlX2xpYmpzb24iIGluCisgCQlsaWJqc29uX2xpYnM9IiIKKyAJCTs7CisgCWF1dG98eWVzKQorLQkJZm9yIGQgaW4gL3VzciAvdXNyL2xvY2FsIC9vcHQvbG9jYWwKKysJCWZvciBkIGluICIke1NUQUdJTkdfSU5DRElSfSIKKyAJCWRvCisgCQkJaWYgdGVzdCAtZiAiJHtkfS9pbmNsdWRlL2pzb24vanNvbi5oIgorIAkJCXRoZW4KKy0tIAorMi40LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9iaW5kOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njg2NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvYmluZDkKQEAgLTAsMCArMSwyIEBACisjIHN0YXJ0dXAgb3B0aW9ucyBmb3IgdGhlIHNlcnZlcgorT1BUSU9OUz0iLXUgYmluZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2NvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZDM0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9jb25mLnBhdGNoCkBAIC0wLDAgKzEsMzMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK3RoZSBwYXRjaCBpcyBpbXBvcnRlZCBmcm9tIG9wZW5lbWJlZGRlZCBwcm9qZWN0CisKKzExLzMwLzIwMTAgLSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjAgYmluZC05LjMuMS9jb25mL2RiLjAKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4wCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjAJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTIgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBicm9hZGNhc3Qgem9uZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi4xMjcgYmluZC05LjMuMS9jb25mL2RiLjEyNworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjEyNwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi4xMjcJMjAwNS0wNy0xMCAyMjoxNDowMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTMgQEAKKys7CisrOyBCSU5EIHJldmVyc2UgZGF0YSBmaWxlIGZvciBsb2NhbCBsb29wYmFjayBpbnRlcmZhY2UKKys7CisrJFRUTAk2MDQ4MDAKKytACUlOCVNPQQlsb2NhbGhvc3QuIHJvb3QubG9jYWxob3N0LiAoCisrCQkJICAgICAgMQkJOyBTZXJpYWwKKysJCQkgNjA0ODAwCQk7IFJlZnJlc2gKKysJCQkgIDg2NDAwCQk7IFJldHJ5CisrCQkJMjQxOTIwMAkJOyBFeHBpcmUKKysJCQkgNjA0ODAwICkJOyBOZWdhdGl2ZSBDYWNoZSBUVEwKKys7CisrQAlJTglOUwlsb2NhbGhvc3QuCisrMS4wLjAJSU4JUFRSCWxvY2FsaG9zdC4KK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eSBiaW5kLTkuMy4xL2NvbmYvZGIuZW1wdHkKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9kYi5lbXB0eQkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9kYi5lbXB0eQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorKzsgQklORCByZXZlcnNlIGRhdGEgZmlsZSBmb3IgZW1wdHkgcmZjMTkxOCB6b25lCisrOworKzsgRE8gTk9UIEVESVQgVEhJUyBGSUxFIC0gaXQgaXMgdXNlZCBmb3IgbXVsdGlwbGUgem9uZXMuCisrOyBJbnN0ZWFkLCBjb3B5IGl0LCBlZGl0IG5hbWVkLmNvbmYsIGFuZCB1c2UgdGhhdCBjb3B5LgorKzsKKyskVFRMCTg2NDAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJICA4NjQwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLjI1NSBiaW5kLTkuMy4xL2NvbmYvZGIuMjU1CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIuMjU1CTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLjI1NQkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKzsKKys7IEJJTkQgcmVzZXJ2ZSBkYXRhIGZpbGUgZm9yIGJyb2FkY2FzdCB6b25lCisrOworKyRUVEwJNjA0ODAwCisrQAlJTglTT0EJbG9jYWxob3N0LiByb290LmxvY2FsaG9zdC4gKAorKwkJCSAgICAgIDEJCTsgU2VyaWFsCisrCQkJIDYwNDgwMAkJOyBSZWZyZXNoCisrCQkJICA4NjQwMAkJOyBSZXRyeQorKwkJCTI0MTkyMDAJCTsgRXhwaXJlCisrCQkJIDYwNDgwMCApCTsgTmVnYXRpdmUgQ2FjaGUgVFRMCisrOworK0AJSU4JTlMJbG9jYWxob3N0LgorZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsIGJpbmQtOS4zLjEvY29uZi9kYi5sb2NhbAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL2RiLmxvY2FsCTIwMDUtMDctMTAgMjI6MTQ6MDAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzIEBACisrOworKzsgQklORCBkYXRhIGZpbGUgZm9yIGxvY2FsIGxvb3BiYWNrIGludGVyZmFjZQorKzsKKyskVFRMCTYwNDgwMAorK0AJSU4JU09BCWxvY2FsaG9zdC4gcm9vdC5sb2NhbGhvc3QuICgKKysJCQkgICAgICAxCQk7IFNlcmlhbAorKwkJCSA2MDQ4MDAJCTsgUmVmcmVzaAorKwkJCSAgODY0MDAJCTsgUmV0cnkKKysJCQkyNDE5MjAwCQk7IEV4cGlyZQorKwkJCSA2MDQ4MDAgKQk7IE5lZ2F0aXZlIENhY2hlIFRUTAorKzsKKytACUlOCU5TCWxvY2FsaG9zdC4KKytACUlOCUEJMTI3LjAuMC4xCitkaWZmIC11ck4gYmluZC05LjMuMS5vcmlnL2NvbmYvZGIucm9vdCBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAorLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL2RiLnJvb3QJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBiaW5kLTkuMy4xL2NvbmYvZGIucm9vdAkyMDA1LTA3LTEwIDIyOjE0OjAwLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0NSBAQAorKworKzsgPDw+PiBEaUcgOS4yLjMgPDw+PiBucyAuIEBhLnJvb3Qtc2VydmVycy5uZXQuCisrOzsgZ2xvYmFsIG9wdGlvbnM6ICBwcmludGNtZAorKzs7IEdvdCBhbnN3ZXI6CisrOzsgLT4+SEVBREVSPDwtIG9wY29kZTogUVVFUlksIHN0YXR1czogTk9FUlJPUiwgaWQ6IDE4OTQ0CisrOzsgZmxhZ3M6IHFyIGFhIHJkOyBRVUVSWTogMSwgQU5TV0VSOiAxMywgQVVUSE9SSVRZOiAwLCBBRERJVElPTkFMOiAxMworKworKzs7IFFVRVNUSU9OIFNFQ1RJT046CisrOy4JCQkJSU4JTlMKKysKKys7OyBBTlNXRVIgU0VDVElPTjoKKysuCQkJNTE4NDAwCUlOCU5TCUEuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUIuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUMuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUQuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUUuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUYuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUcuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUguUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUkuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUouUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUsuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCUwuUk9PVC1TRVJWRVJTLk5FVC4KKysuCQkJNTE4NDAwCUlOCU5TCU0uUk9PVC1TRVJWRVJTLk5FVC4KKysKKys7OyBBRERJVElPTkFMIFNFQ1RJT046CisrQS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjQxLjAuNAorK0IuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMjguNzkuMjAxCisrQy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjMzLjQuMTIKKytELlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguOC4xMC45MAorK0UuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4yMDMuMjMwLjEwCisrRi5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkyLjUuNS4yNDEKKytHLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuMTEyLjM2LjQKKytILlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxMjguNjMuMi41MworK0kuUk9PVC1TRVJWRVJTLk5FVC4JMzYwMDAwMAlJTglBCTE5Mi4zNi4xNDguMTcKKytKLlJPT1QtU0VSVkVSUy5ORVQuCTM2MDAwMDAJSU4JQQkxOTIuNTguMTI4LjMwCisrSy5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTkzLjAuMTQuMTI5CisrTC5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMTk4LjMyLjY0LjEyCisrTS5ST09ULVNFUlZFUlMuTkVULgkzNjAwMDAwCUlOCUEJMjAyLjEyLjI3LjMzCisrCisrOzsgUXVlcnkgdGltZTogODEgbXNlYworKzs7IFNFUlZFUjogMTk4LjQxLjAuNCM1MyhhLnJvb3Qtc2VydmVycy5uZXQuKQorKzs7IFdIRU46IFN1biBGZWIgIDEgMTE6Mjc6MTQgMjAwNAorKzs7IE1TRyBTSVpFICByY3ZkOiA0MzYKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvbmFtZWQuY29uZgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mCTIwMDUtMDctMTAgMjI6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDQ5IEBACisrLy8gVGhpcyBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBCSU5EIEROUyBzZXJ2ZXIgbmFtZWQuCisrLy8KKysvLyBJZiB5b3UgYXJlIGp1c3QgYWRkaW5nIHpvbmVzLCBwbGVhc2UgZG8gdGhhdCBpbiAvZXRjL2JpbmQvbmFtZWQuY29uZi5sb2NhbAorKworK2luY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLm9wdGlvbnMiOworKworKy8vIHByaW1lIHRoZSBzZXJ2ZXIgd2l0aCBrbm93bGVkZ2Ugb2YgdGhlIHJvb3Qgc2VydmVycworK3pvbmUgIi4iIHsKKysJdHlwZSBoaW50OworKwlmaWxlICIvZXRjL2JpbmQvZGIucm9vdCI7CisrfTsKKysKKysvLyBiZSBhdXRob3JpdGF0aXZlIGZvciB0aGUgbG9jYWxob3N0IGZvcndhcmQgYW5kIHJldmVyc2Ugem9uZXMsIGFuZCBmb3IKKysvLyBicm9hZGNhc3Qgem9uZXMgYXMgcGVyIFJGQyAxOTEyCisrCisrem9uZSAibG9jYWxob3N0IiB7CisrCXR5cGUgbWFzdGVyOworKwlmaWxlICIvZXRjL2JpbmQvZGIubG9jYWwiOworK307CisrCisrem9uZSAiMTI3LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjEyNyI7CisrfTsKKysKKyt6b25lICIwLmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjAiOworK307CisrCisrem9uZSAiMjU1LmluLWFkZHIuYXJwYSIgeworKwl0eXBlIG1hc3RlcjsKKysJZmlsZSAiL2V0Yy9iaW5kL2RiLjI1NSI7CisrfTsKKysKKysvLyB6b25lICJjb20iIHsgdHlwZSBkZWxlZ2F0aW9uLW9ubHk7IH07CisrLy8gem9uZSAibmV0IiB7IHR5cGUgZGVsZWdhdGlvbi1vbmx5OyB9OworKworKy8vIEZyb20gdGhlIHJlbGVhc2Ugbm90ZXM6CisrLy8gIEJlY2F1c2UgbWFueSBvZiBvdXIgdXNlcnMgYXJlIHVuY29tZm9ydGFibGUgcmVjZWl2aW5nIHVuZGVsZWdhdGVkIGFuc3dlcnMKKysvLyAgZnJvbSByb290IG9yIHRvcCBsZXZlbCBkb21haW5zLCBvdGhlciB0aGFuIGEgZmV3IGZvciB3aG9tIHRoYXQgYmVoYXZpb3VyCisrLy8gIGhhcyBiZWVuIHRydXN0ZWQgYW5kIGV4cGVjdGVkIGZvciBxdWl0ZSBzb21lIGxlbmd0aCBvZiB0aW1lLCB3ZSBoYXZlIG5vdworKy8vICBpbnRyb2R1Y2VkIHRoZSAicm9vdC1kZWxlZ2F0aW9ucy1vbmx5IiBmZWF0dXJlIHdoaWNoIGFwcGxpZXMgZGVsZWdhdGlvbi1vbmx5CisrLy8gIGxvZ2ljIHRvIGFsbCB0b3AgbGV2ZWwgZG9tYWlucywgYW5kIHRvIHRoZSByb290IGRvbWFpbi4gIEFuIGV4Y2VwdGlvbiBsaXN0CisrLy8gIHNob3VsZCBiZSBzcGVjaWZpZWQsIGluY2x1ZGluZyAiTVVTRVVNIiBhbmQgIkRFIiwgYW5kIGFueSBvdGhlciB0b3AgbGV2ZWwKKysvLyAgZG9tYWlucyBmcm9tIHdob20gdW5kZWxlZ2F0ZWQgcmVzcG9uc2VzIGFyZSBleHBlY3RlZCBhbmQgdHJ1c3RlZC4KKysvLyByb290LWRlbGVnYXRpb24tb25seSBleGNsdWRlIHsgIkRFIjsgIk1VU0VVTSI7IH07CisrCisraW5jbHVkZSAiL2V0Yy9iaW5kL25hbWVkLmNvbmYubG9jYWwiOworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYubG9jYWwgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwKKy0tLSBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLmxvY2FsCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYubG9jYWwJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsOCBAQAorKy8vCisrLy8gRG8gYW55IGxvY2FsIGNvbmZpZ3VyYXRpb24gaGVyZQorKy8vCisrCisrLy8gQ29uc2lkZXIgYWRkaW5nIHRoZSAxOTE4IHpvbmVzIGhlcmUsIGlmIHRoZXkgYXJlIG5vdCB1c2VkIGluIHlvdXIKKysvLyBvcmdhbml6YXRpb24KKysvL2luY2x1ZGUgIi9ldGMvYmluZC96b25lcy5yZmMxOTE4IjsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMgYmluZC05LjMuMS9jb25mL25hbWVkLmNvbmYub3B0aW9ucworLS0tIGJpbmQtOS4zLjEub3JpZy9jb25mL25hbWVkLmNvbmYub3B0aW9ucwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi9uYW1lZC5jb25mLm9wdGlvbnMJMjAwNS0wNy0xMCAyMjoxNDowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjQgQEAKKytvcHRpb25zIHsKKysJZGlyZWN0b3J5ICIvdmFyL2NhY2hlL2JpbmQiOworKworKwkvLyBJZiB0aGVyZSBpcyBhIGZpcmV3YWxsIGJldHdlZW4geW91IGFuZCBuYW1lc2VydmVycyB5b3Ugd2FudAorKwkvLyB0byB0YWxrIHRvLCB5b3UgbWlnaHQgbmVlZCB0byB1bmNvbW1lbnQgdGhlIHF1ZXJ5LXNvdXJjZQorKwkvLyBkaXJlY3RpdmUgYmVsb3cuICBQcmV2aW91cyB2ZXJzaW9ucyBvZiBCSU5EIGFsd2F5cyBhc2tlZAorKwkvLyBxdWVzdGlvbnMgdXNpbmcgcG9ydCA1MywgYnV0IEJJTkQgOC4xIGFuZCBsYXRlciB1c2UgYW4gdW5wcml2aWxlZ2VkCisrCS8vIHBvcnQgYnkgZGVmYXVsdC4KKysKKysJLy8gcXVlcnktc291cmNlIGFkZHJlc3MgKiBwb3J0IDUzOworKworKwkvLyBJZiB5b3VyIElTUCBwcm92aWRlZCBvbmUgb3IgbW9yZSBJUCBhZGRyZXNzZXMgZm9yIHN0YWJsZSAKKysJLy8gbmFtZXNlcnZlcnMsIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGVtIGFzIGZvcndhcmRlcnMuICAKKysJLy8gVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgYmxvY2ssIGFuZCBpbnNlcnQgdGhlIGFkZHJlc3NlcyByZXBsYWNpbmcgCisrCS8vIHRoZSBhbGwtMCdzIHBsYWNlaG9sZGVyLgorKworKwkvLyBmb3J3YXJkZXJzIHsKKysJLy8gCTAuMC4wLjA7CisrCS8vIH07CisrCisrCWF1dGgtbnhkb21haW4gbm87ICAgICMgY29uZm9ybSB0byBSRkMxMDM1CisrCisrfTsKKysKK2RpZmYgLXVyTiBiaW5kLTkuMy4xLm9yaWcvY29uZi96b25lcy5yZmMxOTE4IGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CistLS0gYmluZC05LjMuMS5vcmlnL2NvbmYvem9uZXMucmZjMTkxOAkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGJpbmQtOS4zLjEvY29uZi96b25lcy5yZmMxOTE4CTIwMDUtMDctMTAgMjI6MTQ6MTAuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIwIEBACisrem9uZSAiMTAuaW4tYWRkci5hcnBhIiAgICAgIHsgdHlwZSBtYXN0ZXI7IGZpbGUgIi9ldGMvYmluZC9kYi5lbXB0eSI7IH07CisrIAorK3pvbmUgIjE2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjE5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIyLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjIzLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI0LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI1LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI2LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI3LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI4LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjI5LjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMwLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworK3pvbmUgIjMxLjE3Mi5pbi1hZGRyLmFycGEiICB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworKworK3pvbmUgIjE2OC4xOTIuaW4tYWRkci5hcnBhIiB7IHR5cGUgbWFzdGVyOyBmaWxlICIvZXRjL2JpbmQvZGIuZW1wdHkiOyB9OworZGlmZiAtdXJOIGJpbmQtOS4zLjEub3JpZy9pbml0LmQgYmluZC05LjMuMS9pbml0LmQKKy0tLSBiaW5kLTkuMy4xLm9yaWcvaW5pdC5kCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisrKysgYmluZC05LjMuMS9pbml0LmQJMjAwNS0wNy0xMCAyMzowOTo1OC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzAgQEAKKysjIS9iaW4vc2gKKysKKytQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisrCisrIyBmb3IgYSBjaHJvb3RlZCBzZXJ2ZXI6ICItdSBiaW5kIC10IC92YXIvbGliL25hbWVkIgorKyMgRG9uJ3QgbW9kaWZ5IHRoaXMgbGluZSwgY2hhbmdlIG9yIGNyZWF0ZSAvZXRjL2RlZmF1bHQvYmluZDkuCisrT1BUSU9OUz0iIgorKworK3Rlc3QgLWYgL2V0Yy9kZWZhdWx0L2JpbmQ5ICYmIC4gL2V0Yy9kZWZhdWx0L2JpbmQ5CisrCisrdGVzdCAteCAvdXNyL3NiaW4vcm5kYyB8fCBleGl0IDAKKysKKytjYXNlICIkMSIgaW4KKysgICAgc3RhcnQpCisrCWVjaG8gLW4gIlN0YXJ0aW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKworKwltb2Rwcm9iZSBjYXBhYmlsaXR5ID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCisrCWlmIFsgISAtZiAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorKwkgICAgL3Vzci9zYmluL3JuZGMtY29uZmdlbiAtYSAtYiA1MTIgLXIgL2Rldi91cmFuZG9tCisrCSAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorKwlmaQorKwlpZiBbIC1mIC92YXIvcnVuL25hbWVkL25hbWVkLnBpZCBdOyB0aGVuCisrCSAgICBwcyBgY2F0IC92YXIvcnVuL25hbWVkL25hbWVkLnBpZGAgPiAvZGV2L251bGwgJiYgZXhpdCAxCisrCWZpCisrCisrCSMgZGlycyB1bmRlciAvdmFyL3J1biBjYW4gZ28gYXdheSBvbiByZWJvb3RzLgorKwlta2RpciAtcCAvdmFyL3J1bi9uYW1lZAorKwlta2RpciAtcCAvdmFyL2NhY2hlL2JpbmQKKysJY2htb2QgNzc1IC92YXIvcnVuL25hbWVkCisrCWNob3duIHJvb3Q6YmluZCAvdmFyL3J1bi9uYW1lZCA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorKworKwlpZiBbICEgLXggL3Vzci9zYmluL25hbWVkIF07IHRoZW4KKysJICAgIGVjaG8gIm5hbWVkIGJpbmFyeSBtaXNzaW5nIC0gbm90IHN0YXJ0aW5nIgorKwkgICAgZXhpdCAxCisrCWZpCisrCWlmIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL25hbWVkIFwKKysJCS0tcGlkZmlsZSAvdmFyL3J1bi9uYW1lZC9uYW1lZC5waWQgLS0gJE9QVElPTlM7IHRoZW4KKysJICAgIGlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdIDsgdGhlbgorKwkJZWNobyAibmFtZXNlcnZlciAxMjcuMC4wLjEiIHwgL3NiaW4vcmVzb2x2Y29uZiAtYSBsbworKwkgICAgZmkKKysJZmkKKysJZWNobyAiLiIJCisrICAgIDs7CisrCisrICAgIHN0b3ApCisrCWVjaG8gLW4gIlN0b3BwaW5nIGRvbWFpbiBuYW1lIHNlcnZpY2U6IG5hbWVkIgorKwlpZiBbIC14IC9zYmluL3Jlc29sdmNvbmYgXTsgdGhlbgorKwkgICAgL3NiaW4vcmVzb2x2Y29uZiAtZCBsbworKwlmaQorKwkvdXNyL3NiaW4vcm5kYyBzdG9wID4vZGV2L251bGwgMj4mMQorKwllY2hvICIuIgkKKysgICAgOzsKKysKKysgICAgcmVsb2FkKQorKwkvdXNyL3NiaW4vcm5kYyByZWxvYWQKKysgICAgOzsKKysKKysgICAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisrCSQwIHN0b3AKKysJc2xlZXAgMgorKwkkMCBzdGFydAorKyAgICA7OworKyAgICAKKysgICAgKikKKysJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL2JpbmQge3N0YXJ0fHN0b3B8cmVsb2FkfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisrCWV4aXQgMQorKyAgICA7OworK2VzYWMKKysKKytleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZG9udC10ZXN0LW9uLWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4OWQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2RvbnQtdGVzdC1vbi1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmluZC05LjkuNS5vcmlnL2Jpbi9NYWtlZmlsZS5pbgorKysrIGJpbmQtOS45LjUvYmluL01ha2VmaWxlLmluCitAQCAtMTksNyArMTksNyBAQCBzcmNkaXIgPQlAc3JjZGlyQAorIFZQQVRIID0JCUBzcmNkaXJACisgdG9wX3NyY2RpciA9CUB0b3Bfc3JjZGlyQAorIAorLVNVQkRJUlMgPQluYW1lZCBybmRjIGRpZyBkZWx2IGRuc3NlYyB0b29scyB0ZXN0cyBuc3VwZGF0ZSBcCisrU1VCRElSUyA9CW5hbWVkIHJuZGMgZGlnIGRlbHYgZG5zc2VjIHRvb2xzIG5zdXBkYXRlIFwKKyAJCWNoZWNrIGNvbmZnZW4gQFBZVEhPTl9UT09MU0AgQFBLQ1MxMV9UT09MU0AKKyBUQVJHRVRTID0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvZ2VuZXJhdGUtcm5kYy1rZXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIyMDEyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2dlbmVyYXRlLXJuZGMta2V5LnNoCkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2lmIFsgISAtcyAvZXRjL2JpbmQvcm5kYy5rZXkgXTsgdGhlbgorICAgIGVjaG8gLW4gIkdlbmVyYXRpbmcgL2V0Yy9iaW5kL3JuZGMua2V5OiIKKyAgICAvdXNyL3NiaW4vcm5kYy1jb25mZ2VuIC1hIC1iIDUxMiAtciAvZGV2L3VyYW5kb20KKyAgICBjaG1vZCAwNjQwIC9ldGMvYmluZC9ybmRjLmtleQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRiOTVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvaW5pdC5kLWFkZC1zdXBwb3J0LWZvci1yZWFkLW9ubHktcm9vdGZzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1N1YmplY3Q6IGluaXQuZDogYWRkIHN1cHBvcnQgZm9yIHJlYWQtb25seSByb290ZnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5pdC5kIHwgICA0MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2luaXQuZCBiL2luaXQuZAoraW5kZXggMDExMWVkNC4uMjQ2NzdjOCAxMDA2NDQKKy0tLSBhL2luaXQuZAorKysrIGIvaW5pdC5kCitAQCAtNiw4ICs2LDQ4IEBAIFBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKyAjIERvbid0IG1vZGlmeSB0aGlzIGxpbmUsIGNoYW5nZSBvciBjcmVhdGUgL2V0Yy9kZWZhdWx0L2JpbmQ5LgorIE9QVElPTlM9IiIKKyAKKyt0ZXN0IC1mIC9ldGMvZGVmYXVsdC9yY1MgJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisgdGVzdCAtZiAvZXRjL2RlZmF1bHQvYmluZDkgJiYgLiAvZXRjL2RlZmF1bHQvYmluZDkKKyAKKysjIFRoaXMgZnVuY3Rpb24gaXMgaGVyZSBiZWNhdXNlIGl0J3MgcG9zc2libGUgdGhhdCAvdmFyIGFuZCAvIGFyZSBvbiBkaWZmZXJlbnQgcGFydGl0aW9ucy4KKytpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uICgpIHsKKysgICAgRElSRUNUT1JZPSQxCisrICAgIGRpcj1gcmVhZGxpbmsgLWYgJERJUkVDVE9SWWAKKysgICAgd2hpbGUgdHJ1ZTsgZG8KKysJaWYgWyAhIC1kICIkZGlyIiBdOyB0aGVuCisrCSAgICBlY2hvICJFUlJPUjogJGRpciBpcyBub3QgYSBkaXJlY3RvcnkiCisrCSAgICBleGl0IDEKKysJZWxzZQorKwkgICAgZm9yIGZsYWcgaW4gYGF3ayAtdiBkaXI9JGRpciAneyBpZiAoJDIgPT0gZGlyKSB7IHByaW50ICJGT1VORCI7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBcCisrCQlFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwgL3Byb2MvbW91bnRzYDsgZG8KKysJCVsgIiRmbGFnIiA9ICJGT1VORCIgXSAmJiBwYXJ0aXRpb249InJlYWQtd3JpdGUiCisrCQlbICIkZmxhZyIgPSAicm8iIF0gJiYgeyBwYXJ0aXRpb249InJlYWQtb25seSI7IGJyZWFrOyB9CisrCSAgICBkb25lCisrCSAgICBpZiBbICIkZGlyIiA9ICIvIiAtbyAtbiAiJHBhcnRpdGlvbiIgXTsgdGhlbgorKwkJYnJlYWsKKysJICAgIGVsc2UKKysJCWRpcj1gZGlybmFtZSAkZGlyYAorKwkgICAgZmkKKysJZmkKKysgICAgZG9uZQorKyAgICBbICIkcGFydGl0aW9uIiA9ICJyZWFkLW9ubHkiIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyIKKyt9CisrCisrYmluZF9tb3VudCAoKSB7CisrICAgIG9sZGRpcj0kMQorKyAgICBuZXdkaXI9JDIKKysgICAgbWtkaXIgLXAgJG9sZGRpcgorKyAgICBjcCAtYSAkbmV3ZGlyLyogJG9sZGRpcgorKyAgICBtb3VudCAtLWJpbmQgJG9sZGRpciAkbmV3ZGlyCisrfQorKworKyMgRGVhbCB3aXRoIHJlYWQtb25seSByb290ZnMKKytpZiBbICIkUk9PVEZTX1JFQURfT05MWSIgPSAieWVzIiBdOyB0aGVuCisrICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAiV0FSTjogc3RhcnQgYmluZCBzZXJ2aWNlIGluIHJlYWQtb25seSByb290ZnMiCisrICAgIFsgYGlzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gL2V0Yy9iaW5kYCA9ICJ5ZXMiIF0gJiYgYmluZF9tb3VudCAvdmFyL3ZvbGF0aWxlL2JpbmQvZXRjIC9ldGMvYmluZAorKyAgICBbIGBpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uIC92YXIvbmFtZWRgID0gInllcyIgXSAmJiBiaW5kX21vdW50IC92YXIvdm9sYXRpbGUvYmluZC9uYW1lZCAvdmFyL25hbWVkCisrZmkKKysKKyB0ZXN0IC14IC91c3Ivc2Jpbi9ybmRjIHx8IGV4aXQgMAorIAorIGNhc2UgIiQxIiBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbWFrZS1ldGMtaW5pdGQtYmluZC1zdG9wLXdvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2ZjNlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21ha2UtZXRjLWluaXRkLWJpbmQtc3RvcC13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK2JpbmQ6IG1ha2UgIi9ldGMvaW5pdC5kL2JpbmQgc3RvcCIgd29yaworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0FkZCBzb21lIGNvbmZpZ3VyYXRpb25zLCBtYWtlIHJuZGMgY29tbWFuZCBiZSBhYmxlIHRvIGNvbnRyb2xzCit0aGUgbmFtZWQgZGFlbW9uLgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25mL25hbWVkLmNvbmYgfCAgICA1ICsrKysrCisgY29uZi9ybmRjLmNvbmYgIHwgICAgNSArKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgY29uZi9ybmRjLmNvbmYKKworZGlmZiAtLWdpdCBhL2NvbmYvbmFtZWQuY29uZiBiL2NvbmYvbmFtZWQuY29uZgoraW5kZXggOTU4MjljZi4uYzg4OTllNyAxMDA2NDQKKy0tLSBhL2NvbmYvbmFtZWQuY29uZgorKysrIGIvY29uZi9uYW1lZC5jb25mCitAQCAtNDcsMyArNDcsOCBAQCB6b25lICIyNTUuaW4tYWRkci5hcnBhIiB7CisgLy8gcm9vdC1kZWxlZ2F0aW9uLW9ubHkgZXhjbHVkZSB7ICJERSI7ICJNVVNFVU0iOyB9OworIAorIGluY2x1ZGUgIi9ldGMvYmluZC9uYW1lZC5jb25mLmxvY2FsIjsKKytpbmNsdWRlICIvZXRjL2JpbmQvcm5kYy5rZXkiIDsKKytjb250cm9scyB7CisrCWluZXQgMTI3LjAuMC4xIGFsbG93IHsgbG9jYWxob3N0OyB9CisrCWtleXMgeyBybmRjLWtleTsgfTsKKyt9OworZGlmZiAtLWdpdCBhL2NvbmYvcm5kYy5jb25mIGIvY29uZi9ybmRjLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMGI0ODFkCistLS0gL2Rldi9udWxsCisrKysgYi9jb25mL3JuZGMuY29uZgorQEAgLTAsMCArMSw1IEBACisraW5jbHVkZSAiL2V0Yy9iaW5kL3JuZGMua2V5IjsKKytvcHRpb25zIHsKKysJZGVmYXVsdC1zZXJ2ZXIgIGxvY2FsaG9zdDsKKysJZGVmYXVsdC1rZXkgICAgIHJuZGMta2V5OworK307CisKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmluZC9iaW5kL21pcHMxLW5vdC1zdXBwb3J0LW9wY29kZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzA3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZgpAQCAtMCwwICsxLDEwNCBAQAorYmluZDogcG9ydCBhIHBhdGNoIHRvIGZpeCBhIGJ1aWxkIGZhaWx1cmUKKworbWlwczEgZG9lcyBub3Qgc3VwcG9ydCBsbCBhbmQgc2MgaW5zdHJ1Y3Rpb25zLCBhbmQgbGVhZCB0byBiZWxvdyBlcnJvciwgbm93Cit3ZSBwb3J0IGEgcGF0Y2ggZnJvbSBkZWJpYW4gdG8gZml4IGl0CitbaHR0cDovL3NlY3VyaXR5LmRlYmlhbi5vcmcvZGViaWFuLXNlY3VyaXR5L3Bvb2wvdXBkYXRlcy9tYWluL2IvYmluZDkvYmluZDlfOS44LjQuZGZzZy5QMS02K25tdTIrZGViN3UxLmRpZmYuZ3pdCisKK3wge3N0YW5kYXJkIGlucHV0fTogQXNzZW1ibGVyIG1lc3NhZ2VzOgorfCB7c3RhbmRhcmQgaW5wdXR9OjQ3OiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYGxsICQzLDAoJDYpJworfCB7c3RhbmRhcmQgaW5wdXR9OjUwOiBFcnJvcjogT3Bjb2RlIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwcm9jZXNzb3I6IG1pcHMxIChtaXBzMSkgYHNjICQzLDAoJDYpJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYmluZDktOS44LjQuZGZzZy5QMS5vcmlnL2xpYi9pc2MvbWlwcy9pbmNsdWRlL2lzYy9hdG9taWMuaAorKysrIGJpbmQ5LTkuOC40LmRmc2cuUDEvbGliL2lzYy9taXBzL2luY2x1ZGUvaXNjL2F0b21pYy5oCitAQCAtMzEsMTggKzMxLDIwIEBACisgaXNjX2F0b21pY194YWRkKGlzY19pbnQzMl90ICpwLCBpbnQgdmFsKSB7CisgCWlzY19pbnQzMl90IG9yaWc7CisgCistCS8qIGFkZCBpcyBhIGNoZWF0LCBzaW5jZSBNSVBTIGhhcyBubyBtb3YgaW5zdHJ1Y3Rpb24gKi8KKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJhZGQgJDMsICQzLCAlMlxuIgorLQkgICAgInNjICQzLCAlMVxuIgorLQkgICAgImJlcSAkMywgMCwgMWIiCistCSAgICA6ICI9JnIiKG9yaWcpCistCSAgICA6ICJtIigqcCksICJyIih2YWwpCistCSAgICA6ICJtZW1vcnkiLCAiJDMiCistCQkpOworKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisrCSIJLnNldAlwdXNoCQlcbiIKKysJIgkuc2V0CW1pcHMyCQlcbiIKKysJIgkuc2V0CW5vcmVvcmRlcglcbiIKKysJIgkuc2V0CW5vYXQJCVxuIgorKwkiMToJbGwJJDEsICUxCQlcbiIKKysJIglhZGR1CSUwLCAkMSwgJTIJXG4iCisrCSIJc2MJJTAsICUxCQlcbiIKKysJIgliZXF6CSUwLCAxYgkJXG4iCisrCSIJbW92ZQklMCwgJDEJCVxuIgorKwkiCS5zZXQJcG9wCQlcbiIKKysJOiAiPSZyIiAob3JpZyksICIrUiIgKCpwKQorKwk6ICJyIiAodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CitAQCAtNTIsMTYgKzU0LDcgQEAKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQKKyBpc2NfYXRvbWljX3N0b3JlKGlzY19pbnQzMl90ICpwLCBpc2NfaW50MzJfdCB2YWwpIHsKKy0JX19hc21fXyB2b2xhdGlsZSAoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUwXG4iCistCSAgICAiYWRkICQzLCAkMCwgJTFcbiIKKy0JICAgICJzYyAkMywgJTBcbiIKKy0JICAgICJiZXEgJDMsIDAsIDFiIgorLQkgICAgOgorLQkgICAgOiAibSIoKnApLCAiciIodmFsKQorLQkgICAgOiAibWVtb3J5IiwgIiQzIgorLQkJKTsKKysJKnAgPSB2YWw7CisgfQorIAorIC8qCitAQCAtNzIsMjAgKzY1LDIzIEBACisgc3RhdGljIGlubGluZSBpc2NfaW50MzJfdAorIGlzY19hdG9taWNfY21weGNoZyhpc2NfaW50MzJfdCAqcCwgaW50IGNtcHZhbCwgaW50IHZhbCkgeworIAlpc2NfaW50MzJfdCBvcmlnOworKwlpc2NfaW50MzJfdCB0bXA7CisgCistCV9fYXNtX18gdm9sYXRpbGUoCistCSAgICAiMToiCistCSAgICAibGwgJDMsICUxXG4iCistCSAgICAiYWRkICUwLCAkMCwgJDNcbiIKKy0JICAgICJibmUgJDMsICUyLCAyZlxuIgorLQkgICAgImFkZCAkMywgJDAsICUzXG4iCistCSAgICAic2MgJDMsICUxXG4iCistCSAgICAiYmVxICQzLCAwLCAxYlxuIgorLQkgICAgIjI6IgorLQkgICAgOiAiPSZyIihvcmlnKQorLQkgICAgOiAibSIoKnApLCAiciIoY21wdmFsKSwgInIiKHZhbCkKKy0JICAgIDogIm1lbW9yeSIsICIkMyIKKy0JCSk7CisrCV9fYXNtX18gX192b2xhdGlsZV9fICgKKysJIgkuc2V0CXB1c2gJCVxuIgorKwkiCS5zZXQJbWlwczIJCVxuIgorKwkiCS5zZXQJbm9yZW9yZGVyCVxuIgorKwkiCS5zZXQJbm9hdAkJXG4iCisrCSIxOglsbAkkMSwgJTEJCVxuIgorKwkiCWJuZQkkMSwgJTMsIDJmCVxuIgorKwkiCW1vdmUJJTIsICU0CQlcbiIKKysJIglzYwklMiwgJTEJCVxuIgorKwkiCWJlcXoJJTIsIDFiCQlcbiIKKysJIjI6CW1vdmUJJTAsICQxCQlcbiIKKysJIgkuc2V0CXBvcAkJXG4iCisrCTogIj0mciIob3JpZyksICIrUiIgKCpwKSwgIj1yIiAodG1wKQorKwk6ICJyIihjbXB2YWwpLCAiciIodmFsKQorKwk6ICJtZW1vcnkiKTsKKyAKKyAJcmV0dXJuIChvcmlnKTsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZC9uYW1lZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbmFtZWQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGE1NmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmQvbmFtZWQuc2VydmljZQpAQCAtMCwwICsxLDIyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUJlcmtlbGV5IEludGVybmV0IE5hbWUgRG9tYWluIChETlMpCitXYW50cz1uc3MtbG9va3VwLnRhcmdldAorQmVmb3JlPW5zcy1sb29rdXAudGFyZ2V0CitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRW52aXJvbm1lbnRGaWxlPS0vZXRjL2RlZmF1bHQvYmluZDkKK1BJREZpbGU9L3J1bi9uYW1lZC9uYW1lZC5waWQKKworRXhlY1N0YXJ0UHJlPUBTQklORElSQC9nZW5lcmF0ZS1ybmRjLWtleS5zaAorRXhlY1N0YXJ0PUBTQklORElSQC9uYW1lZCAkT1BUSU9OUworCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAvc2ggLWMgJ0BTQklORElSQC9ybmRjIHJlbG9hZCA+IC9kZXYvbnVsbCAyPiYxIHx8IEBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElEJworCitFeGVjU3RvcD1AQkFTRV9CSU5ESVJAL3NoIC1jICdAU0JJTkRJUkAvcm5kYyBzdG9wID4gL2Rldi9udWxsIDI+JjEgfHwgQEJBU0VfQklORElSQC9raWxsIC1URVJNICRNQUlOUElEJworCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLVA0LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9iaW5kL2JpbmRfOS4xMC4yLVA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYWUyODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JpbmQvYmluZF85LjEwLjItUDQuYmIKQEAgLTAsMCArMSwxMDIgQEAKK1NVTU1BUlkgPSAiSVNDIEludGVybmV0IERvbWFpbiBOYW1lIFNlcnZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaXNjLm9yZy9zdy9iaW5kLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIklTQyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9MGE5NWY1MmEwYWI2YzVmNTJkZWRjOWE0NWU3YWJiM2YiCisKK0RFUEVORFMgPSAib3BlbnNzbCBsaWJjYXAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlzYy5vcmcvaXNjL2JpbmQ5LyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWV0Yy1pbml0ZC1iaW5kLXN0b3Atd29yay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzMS1ub3Qtc3VwcG9ydC1vcGNvZGUuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LXRlc3Qtb24taG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1ybmRjLWtleS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9uYW1lZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2JpbmQ5IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZC1hZGQtc3VwcG9ydC1mb3ItcmVhZC1vbmx5LXJvb3Rmcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9iaW5kLWNvbmZnZW4tYnVpbGQtdW5peC5vLW9uY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1idWlsZC11c2UtcGtnLWNvbmZpZy10by1maW5kLWxpYnhtbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmluZC1lbnN1cmUtc2VhcmNoaW5nLWZvci1qc29uLWhlYWRlcnMtc2VhcmNoZXMtc3lzci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdlbi5jLWV4dGVuZC1ESVJOQU1FU0laRS1mcm9tLTI1Ni10by01MTIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4YjFmNTA2NDgzNzc1NmM5MzhlYWRjMTUzN2RlYzVjNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMDBiMjFlYzFkZWYyMTI5NTdmMjhlZmU5ZDEwYWFjNTJkNmVjNTE1ZTg0ZmJmMmM0MjE0M2Y1ZDcxNDI5Y2I4IgorCitFTkFCTEVfSVBWNiA9ICItLWVuYWJsZS1pcHY2PSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICd5ZXMnLCAnbm8nLCBkKX0iCitFWFRSQV9PRUNPTkYgPSAiICR7RU5BQkxFX0lQVjZ9IC0td2l0aC1yYW5kb21kZXY9L2Rldi9yYW5kb20gLS1kaXNhYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGV2cG9sbCAtLWRpc2FibGUtZXBvbGwgLS13aXRoLWdvc3Q9bm8gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZ3NzYXBpPW5vIC0td2l0aC1lY2RzYT15ZXMgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9iaW5kIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLW9wZW5zc2w9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLXJjLmQgc3lzdGVtZCB1c2VyYWRkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID89ICIiCitQQUNLQUdFQ09ORklHW2h0dHBzdGF0c10gPSAiLS13aXRoLWxpYnhtbDIsLS13aXRob3V0LWxpYnhtbDIsbGlieG1sMiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvY2FjaGUvYmluZCAtLW5vLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJpbmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJiaW5kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJuYW1lZC5zZXJ2aWNlIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWNvcmUiCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFX0JFRk9SRV9QTiArPSAiJHtQTn0tdXRpbHMiCitGSUxFU18ke1BOfS11dGlscyA9ICIke2JpbmRpcn0vaG9zdCAke2JpbmRpcn0vZGlnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaXNjLWNvbmZpZy5oIgorRklMRVNfJHtQTn0gKz0gIiR7c2JpbmRpcn0vZ2VuZXJhdGUtcm5kYy1rZXkuc2giCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwkjIGNsZWFuIGhvc3QgcGF0aCBpbiBpc2MtY29uZmlnLnNoIGJlZm9yZSB0aGUgaGFyZGxpbmsgY3JlYXRlZAorCSMgYnkgIm1ha2UgaW5zdGFsbCI6CisJIyAgIGJpbmQ5LWNvbmZpZyAtPiBpc2MtY29uZmlnLnNoCisJc2VkIC1pIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSwiICR7Qn0vaXNjLWNvbmZpZy5zaAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAiJHtEfSR7YmluZGlyfS9uc2xvb2t1cCIKKwlybSAiJHtEfSR7bWFuZGlyfS9tYW4xL25zbG9va3VwLjEiCisJcm1kaXIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKKwlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvYmluZCIKKwlpbnN0YWxsIC1kICIke0R9JHtzeXNjb25mZGlyfS9iaW5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCIKKwlpbnN0YWxsIC1tIDY0NCAke1N9L2NvbmYvKiAiJHtEfSR7c3lzY29uZmRpcn0vYmluZC8iCisJaW5zdGFsbCAtbSA3NTUgIiR7U30vaW5pdC5kIiAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2JpbmQiCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhIC91c3IvYmluL2VudiBweXRob24sJyAke0R9JHtzYmluZGlyfS9kbnNzZWMtY292ZXJhZ2UgJHtEfSR7c2JpbmRpcn0vZG5zc2VjLWNoZWNrZHMKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHJlbGF0ZWQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2JpbmQKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS9nZW5lcmF0ZS1ybmRjLWtleS5zaCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uYW1lZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCSAgICAgICAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJICAgICAgICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL25hbWVkLnNlcnZpY2UKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JpbmQ5ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiBcCisJJHtzeXNjb25mZGlyfS9iaW5kL25hbWVkLmNvbmYgXAorCSR7c3lzY29uZmRpcn0vYmluZC9uYW1lZC5jb25mLmxvY2FsIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvbmFtZWQuY29uZi5vcHRpb25zIFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIuMCBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLjEyNyBcCisJJHtzeXNjb25mZGlyfS9iaW5kL2RiLmVtcHR5IFwKKwkke3N5c2NvbmZkaXJ9L2JpbmQvZGIubG9jYWwgXAorCSR7c3lzY29uZmRpcn0vYmluZC9kYi5yb290IFwKKwkiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvYmx1ZXo1L2JsdWV6NS5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOWM0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUuaW5jCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkxpbnV4IEJsdWV0b290aCBTdGFjayBVc2VybGFuZCBWNSIKK0RFU0NSSVBUSU9OID0gIkxpbnV4IEJsdWV0b290aCBzdGFjayBWNSB1c2VybGFuZCBjb21wb25lbnRzLiAgVGhlc2UgaW5jbHVkZSBhIHN5c3RlbSBjb25maWd1cmF0aW9ucywgZGFlbW9ucywgdG9vbHMgYW5kIHN5c3RlbSBsaWJyYXJpZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ibHVlei5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYjUwNGI2N2M1MDMzMWZjNzg3MzRmZWQ5MGZiMGUwOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjQ7bWQ1PTliYzU0YjkzY2Q3ZTE3YmYwM2Y1MjUxM2YzOWY5MjZlIgorREVQRU5EUyA9ICJ1ZGV2IGxpYnVzYiBkYnVzLWdsaWIgZ2xpYi0yLjAgbGliY2hlY2sgcmVhZGxpbmUiCitQUk9WSURFUyArPSAiYmx1ZXotaGNpZHVtcCIKK1JQUk9WSURFU18ke1BOfSArPSAiYmx1ZXotaGNpZHVtcCIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJibHVlejQiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJvYmV4LXByb2ZpbGVzIgorUEFDS0FHRUNPTkZJR1tvYmV4LXByb2ZpbGVzXSA9ICItLWVuYWJsZS1vYmV4LC0tZGlzYWJsZS1vYmV4LGxpYmljYWwiCitQQUNLQUdFQ09ORklHW2V4cGVyaW1lbnRhbF0gPSAiLS1lbmFibGUtZXhwZXJpbWVudGFsLC0tZGlzYWJsZS1leHBlcmltZW50YWwsIgorCitTUkNfVVJJID0gIlwKKyAgICAke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L2JsdWV0b290aC9ibHVlei0ke1BWfS50YXIueHogXAorICAgIGZpbGU6Ly9ibHVldG9vdGguY29uZiBcCisiCitTID0gIiR7V09SS0RJUn0vYmx1ZXotJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcgc3lzdGVtZAorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLWVuYWJsZS10b29scyBcCisgIC0tZGlzYWJsZS1jdXBzIFwKKyAgLS1lbmFibGUtdGVzdCBcCisgIC0tZW5hYmxlLWRhdGFmaWxlcyBcCisgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS1zeXN0ZW1kJywgJy0tZGlzYWJsZS1zeXN0ZW1kJywgZCl9IFwKKyAgLS1lbmFibGUtbGlicmFyeSBcCisiCisKKyMgYmx1ZXo1IGJ1aWxkcyBhIGxhcmdlIG51bWJlciBvZiB1c2VmdWwgdXRpbGl0aWVzIGJ1dCBkb2VzIG5vdAorIyBpbnN0YWxsIHRoZW0uICBTcGVjaWZ5IHdoaWNoIG9uZXMgd2Ugd2FudCBwdXQgaW50byAke1BOfS1ub2luc3QtdG9vbHMuCitOT0lOU1RfVE9PTFNfUkVBRExJTkUgPz89ICIiCitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID8/PSAiIgorTk9JTlNUX1RPT0xTID0gIiBcCisgICAgJHtOT0lOU1RfVE9PTFNfUkVBRExJTkV9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdleHBlcmltZW50YWwnLCAnJHtOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMfScsICcnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvYXVkaW8vYXVkaW8uY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2F1ZGlvL2F1ZGlvLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCWlmIFsgLWYgJHtTfS9wcm9maWxlcy9uZXR3b3JrL25ldHdvcmsuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL25ldHdvcmsvbmV0d29yay5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9ibHVldG9vdGgvCisJZmkKKwlpZiBbIC1mICR7U30vcHJvZmlsZXMvaW5wdXQvaW5wdXQuY29uZiBdOyB0aGVuCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L3Byb2ZpbGVzL2lucHV0L2lucHV0LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2JsdWV0b290aC8KKwlmaQorCSMgYXRfY29uc29sZSBkb2Vzbid0IHJlYWxseSB3b3JrIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgT0UsIHNvIHB1bmNoIHNvbWUgbW9yZSBob2xlcyBzbyBwZW9wbGUgY2FuIGFjdHVhbGx5IHVzZSBCVAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2JsdWV0b290aC5jb25mICR7RH0vJHtzeXNjb25mZGlyfS9kYnVzLTEvc3lzdGVtLmQvCisKKwkjIEluc3RhbGwgZGVzaXJlZCB0b29scyB0aGF0IHVwc3RyZWFtIGxlYXZlcyBpbiBidWlsZCBhcmVhCisgICAgICAgIGZvciBmIGluICR7Tk9JTlNUX1RPT0xTfSA7IGRvCisJICAgIGluc3RhbGwgLW0gNzU1ICR7Qn0vJGYgJHtEfS8ke2JpbmRpcn0KKwlkb25lCit9CisKK0FMTE9XX0VNUFRZX2xpYmFzb3VuZC1tb2R1bGUtYmx1ZXogPSAiMSIKK1BBQ0tBR0VTID0rICJsaWJhc291bmQtbW9kdWxlLWJsdWV6ICR7UE59LXRlc3R0b29scyAke1BOfS1vYmV4ICR7UE59LW5vaW5zdC10b29scyIKKworRklMRVNfbGliYXNvdW5kLW1vZHVsZS1ibHVleiA9ICIke2xpYmRpcn0vYWxzYS1saWIvbGliKi5zbyAke2RhdGFkaXJ9L2Fsc2EiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2JsdWV0b290aC9wbHVnaW5zLyouc28gJHtiYXNlX2xpYmRpcn0vdWRldi8gJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2LyAke3N5c3RlbWRfdW5pdGRpcn0vICR7ZGF0YWRpcn0vZGJ1cy0xIgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8qLmxhIFwKKyAgJHtsaWJkaXJ9L2Fsc2EtbGliLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1vYmV4ID0gIiR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoL29iZXhkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3RlbWQvdXNlci9vYmV4LnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy9vcmcuYmx1ZXoub2JleC5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAgICAiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tb2JleCA9ICJvYmV4LnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59LXRlc3R0b29scyA9ICIke2xpYmRpcn0vYmx1ZXovdGVzdC8qIgorCitkZWYgZ2V0X25vaW5zdF90b29sc19wYXRocyAoZCwgYmIsIHRvb2xzKToKKyAgICBzID0gbGlzdCgpCisgICAgYmluZGlyID0gZC5nZXRWYXIoImJpbmRpciIsIFRydWUpCisgICAgZm9yIGJkcCBpbiB0b29scy5zcGxpdCgpOgorICAgICAgICBmID0gb3MucGF0aC5iYXNlbmFtZShiZHApCisgICAgICAgIHMuYXBwZW5kKCIlcy8lcyIgJSAoYmluZGlyLCBmKSkKKyAgICByZXR1cm4gIlxuIi5qb2luKHMpCisKK0ZJTEVTXyR7UE59LW5vaW5zdC10b29scyA9ICIke0BnZXRfbm9pbnN0X3Rvb2xzX3BhdGhzKGQsIGJiLCBkLmdldFZhcignTk9JTlNUX1RPT0xTJywgVHJ1ZSkpfSIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICR7bGliZXhlY2Rpcn0vYmx1ZXRvb3RoLy5kZWJ1ZyBcCisgICR7bGliZGlyfS9ibHVldG9vdGgvcGx1Z2lucy8uZGVidWcgXAorICAke2xpYmRpcn0vKi8uZGVidWcgXAorICAqL3VkZXYvLmRlYnVnIFwKKyAgKi8qL3VkZXYvLmRlYnVnIFwKKyAgIgorCitSREVQRU5EU18ke1BOfS10ZXN0dG9vbHMgKz0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiYmx1ZXRvb3RoLnNlcnZpY2UiCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2JsdWV0b290aC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1L2JsdWV0b290aC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODQ1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejUvYmx1ZXRvb3RoLmNvbmYKQEAgLTAsMCArMSwxNyBAQAorPCEtLSBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBzcGVjaWZpZXMgdGhlIHJlcXVpcmVkIHNlY3VyaXR5IHBvbGljaWVzCisgICAgIGZvciBCbHVldG9vdGggY29yZSBkYWVtb24gdG8gd29yay4gLS0+CisKKzwhRE9DVFlQRSBidXNjb25maWcgUFVCTElDICItLy9mcmVlZGVza3RvcC8vRFREIEQtQlVTIEJ1cyBDb25maWd1cmF0aW9uIDEuMC8vRU4iCisgImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3N0YW5kYXJkcy9kYnVzLzEuMC9idXNjb25maWcuZHRkIj4KKzxidXNjb25maWc+CisKKyAgPCEtLSAuLi9zeXN0ZW0uY29uZiBoYXZlIGRlbmllZCBldmVyeXRoaW5nLCBzbyB3ZSBqdXN0IHB1bmNoIHNvbWUgaG9sZXMgLS0+CisKKyAgPHBvbGljeSBjb250ZXh0PSJkZWZhdWx0Ij4KKyAgICA8YWxsb3cgb3duPSJvcmcuYmx1ZXoiLz4KKyAgICA8YWxsb3cgc2VuZF9kZXN0aW5hdGlvbj0ib3JnLmJsdWV6Ii8+CisgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJvcmcuYmx1ZXouQWdlbnQxIi8+CisgICAgPGFsbG93IHNlbmRfdHlwZT0ibWV0aG9kX2NhbGwiLz4KKyAgPC9wb2xpY3k+CisKKzwvYnVzY29uZmlnPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2JsdWV6NS9ibHVlejVfNS4zMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2M3Mzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9ibHVlejUvYmx1ZXo1XzUuMzMuYmIKQEAgLTAsMCArMSw1MiBAQAorcmVxdWlyZSBibHVlejUuaW5jCitTUkNfVVJJW21kNXN1bV0gPSAiNzg3ODJkYzMzZDlhOGI2MzQ0YzRjYzFhZjcwYzhhOTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTgwMTgwN2ExMzUwNjY3OGNiZmViMTVjNmE0Yjg5ZWNiNTczOWVmZTEwNjdlYjQ2NGRhNjY0MWQ3MzE0MzZkMyIKKworIyBub2luc3QgcHJvZ3JhbXMgaW4gTWFrZWZpbGUudG9vbHMgdGhhdCBhcmUgY29uZGl0aW9uYWwgb24gUkVBRExJTkUKKyMgc3VwcG9ydAorTk9JTlNUX1RPT0xTX1JFQURMSU5FID89ICIgXAorICAgIGF0dHJpYi9nYXR0dG9vbCBcCisgICAgdG9vbHMvb2JleC1jbGllbnQtdG9vbCBcCisgICAgdG9vbHMvb2JleC1zZXJ2ZXItdG9vbCBcCisgICAgdG9vbHMvYmx1ZXRvb3RoLXBsYXllciBcCisgICAgdG9vbHMvb2JleGN0bCBcCisiCisKKyMgbm9pbnN0IHByb2dyYW1zIGluIE1ha2VmaWxlLnRvb2xzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIEVYUEVSSU1FTlRBTAorIyBzdXBwb3J0CitOT0lOU1RfVE9PTFNfRVhQRVJJTUVOVEFMID89ICIgXAorICAgIGVtdWxhdG9yL2J0dmlydCBcCisgICAgZW11bGF0b3IvYjFlZSBcCisgICAgZW11bGF0b3IvaGZwIFwKKyAgICB0b29scy8zZHNwIFwKKyAgICB0b29scy9tZ210LXRlc3RlciBcCisgICAgdG9vbHMvZ2FwLXRlc3RlciBcCisgICAgdG9vbHMvbDJjYXAtdGVzdGVyIFwKKyAgICB0b29scy9zY28tdGVzdGVyIFwKKyAgICB0b29scy9zbXAtdGVzdGVyIFwKKyAgICB0b29scy9oY2ktdGVzdGVyIFwKKyAgICB0b29scy9yZmNvbW0tdGVzdGVyIFwKKyAgICB0b29scy9iZGFkZHIgXAorICAgIHRvb2xzL2F2aW5mbyBcCisgICAgdG9vbHMvYXZ0ZXN0IFwKKyAgICB0b29scy9zY290ZXN0IFwKKyAgICB0b29scy9hbXB0ZXN0IFwKKyAgICB0b29scy9od2RiIFwKKyAgICB0b29scy9oY2lldmVudG1hc2sgXAorICAgIHRvb2xzL2hjaXNlY2ZpbHRlciBcCisgICAgdG9vbHMvYnRtZ210IFwKKyAgICB0b29scy9idGluZm8gXAorICAgIHRvb2xzL2J0YXR0YWNoIFwKKyAgICB0b29scy9idHNub29wIFwKKyAgICB0b29scy9idHByb3h5IFwKKyAgICB0b29scy9idGlvdGVzdCBcCisgICAgdG9vbHMvbWNhcHRlc3QgXAorICAgIHRvb2xzL2NsdGVzdCBcCisgICAgdG9vbHMvb29idGVzdCBcCisgICAgdG9vbHMvc2VxMmJzZXEgXAorICAgIHRvb2xzL2liZWFjb24gXAorICAgIHRvb2xzL2J0Z2F0dC1jbGllbnQgXAorICAgIHRvb2xzL2J0Z2F0dC1zZXJ2ZXIgXAorICAgIHRvb2xzL2dhdHQtc2VydmljZSBcCisgICAgcHJvZmlsZXMvaWFwL2lhcGQgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ0YzI4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJDb25ubWFuIGNvbmZpZyB0byBzZXR1cCB3aXJlZCBpbnRlcmZhY2Ugb24gcWVtdSBtYWNoaW5lcyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgaXMgdGhlIENvbm5NYW4gY29uZmlndXJhdGlvbiB0byBzZXQgdXAgYSBXaXJlZCBcCituZXR3b3JrIGludGVyZmFjZSBmb3IgYSBxZW11IG1hY2hpbmUuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitTUkNfVVJJX2FwcGVuZF9xZW11YWxsID0gIiBmaWxlOi8vd2lyZWQuY29uZmlnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly93aXJlZC1zZXR1cCBcCisiCitQUiA9ICJyMiIKKworUyA9ICIke1dPUktESVJ9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitGSUxFU18ke1BOfSA9ICIke2xvY2Fsc3RhdGVkaXJ9LyogJHtsaWJkaXJ9LyoiCisKK2RvX2luc3RhbGwoKSB7CisgICAgI0NvbmZpZ3VyZSBXaXJlZCBuZXR3b3JrIGludGVyZmFjZSBpbiBjYXNlIG9mIHFlbXUqIG1hY2hpbmVzCisgICAgaWYgdGVzdCAtZSAke1dPUktESVJ9L3dpcmVkLmNvbmZpZyAmJiB0ZXN0IC1lICR7V09SS0RJUn0vd2lyZWQtc2V0dXA7IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvY29ubm1hbgorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS93aXJlZC5jb25maWcgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Nvbm5tYW4KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vd2lyZWQtc2V0dXAgJHtEfSR7bGliZGlyfS9jb25ubWFuCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC1zZXR1cCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC1zZXR1cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY4OTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLXNldHVwCkBAIC0wLDAgKzEsMTYgQEAKKyMhL2Jpbi9zaAorCitDT05GSUdGPS92YXIvbGliL2Nvbm5tYW4vd2lyZWQuY29uZmlnCisKKyMgRXh0cmFjdCB3aXJlZCBuZXR3b3JrIGNvbmZpZyBmcm9tIC9wcm9jL2NtZGxpbmUKK05FVF9DT05GPWBjYXQgL3Byb2MvY21kbGluZSB8c2VkIC1uZSAncy9eLippcD1cKFteIF0qXCk6XChbXiBdKlwpOlwoW14gXSpcKTpcKFteIF0qXCkuKiQvXDFcL1w0XC9cMy9wJ2AKKworIyBDaGVjayBpZiBldGgwIGlzIGFscmVhZHkgc2V0IHZpYSBrZXJuZWwgY21kbGluZQoraWYgWyAieCRORVRfQ09ORiIgPSAieCIgXTsgdGhlbgorCSMgV2lyZWQgaW50ZXJmYWNlIGlzIG5vdCBjb25maWd1cmVkIHZpYSBrZXJuZWwgY21kbGluZQorCSMgUmVtb3ZlIGNvbm5tYW4gY29uZmlnIGZpbGUgdGVtcGxhdGUKKwlybSAtZiAke0NPTkZJR0Z9CitlbHNlCisJIyBTZXR1cCBhIGNvbm5tYW4gY29uZmlnIGFjY29yZGluZ2x5CisJc2VkIC1pIC1lICJzfF5JUHY0ID0uKnxJUHY0ID0gJHtORVRfQ09ORn18IiAke0NPTkZJR0Z9CitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tY29uZi9xZW11YWxsL3dpcmVkLmNvbmZpZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC5jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OThjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWNvbmYvcWVtdWFsbC93aXJlZC5jb25maWcKQEAgLTAsMCArMSw5IEBACitbZ2xvYmFsXQorTmFtZSA9IFdpcmVkCitEZXNjcmlwdGlvbiA9IFdpcmVkIG5ldHdvcmsgY29uZmlndXJhdGlvbgorCitbc2VydmljZV9ldGhlcm5ldF0KK1R5cGUgPSBldGhlcm5ldAorSVB2NCA9CitNQUMgPSA1Mjo1NDowMDoxMjozNDo1NgorTmFtZXNlcnZlcnMgPSA4LjguOC44CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTU3NTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvMDAwMS1SZW1vdmVkLWljb24tZnJvbS1jb25ubWFuLWdub21lLWFib3V0LWFwcGxldC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDU5MDdhMjNhZDJmNDk3MDI5NjBhMzNmOWUyMDM5NTUyNjczZWFiYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CitEYXRlOiBNb24sIDE3IERlYyAyMDEyIDE0OjAxOjE4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZWQgaWNvbiBmcm9tIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQKKworVGhlIGNvbm5tYW4tZ25vbWUgImFib3V0IiBhcHBsZXQgc2hvd2VkIGEgcGljdHVyZSB0aGF0CitjYW4gbm90IGJlIGRpc3BsYXllZC4gVGhlcmUgaXMgbm8gZGVzaWduYXRlZCBwaWN0dXJlCitpbiBjb25ubWFuLWdub21lIHRvIGJlIHVzZWQgaW4gdGhlIGFib3V0IHNlY3Rpb24sIHNvCitpdCB3YXMgcmVtb3ZlZC4KKworW09FLUNvcmUgIzI1MDldCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgRGludSA8YW5kcmVpLmFkcmlhbnguZGludUBpbnRlbC5jb20+CistLS0KKyBhcHBsZXQvbWFpbi5jIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXBwbGV0L21haW4uYyBiL2FwcGxldC9tYWluLmMKK2luZGV4IGYxMmQzNzEuLmM3YjNjN2YgMTAwNjQ0CistLS0gYS9hcHBsZXQvbWFpbi5jCisrKysgYi9hcHBsZXQvbWFpbi5jCitAQCAtMjEyLDcgKzIxMiw3IEBAIHN0YXRpYyB2b2lkIGFib3V0X2NhbGxiYWNrKEd0a1dpZGdldCAqaXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorIAkJCSJjb21tZW50cyIsIF8oIkEgY29ubmVjdGlvbiBtYW5hZ2VyIGZvciB0aGUgR05PTUUgZGVza3RvcCIpLAorIAkJCSJhdXRob3JzIiwgYXV0aG9ycywKKyAJCQkidHJhbnNsYXRvci1jcmVkaXRzIiwgXygidHJhbnNsYXRvci1jcmVkaXRzIiksCistCQkJImxvZ28taWNvbi1uYW1lIiwgIm5ldHdvcmstd2lyZWxlc3MiLCBOVUxMKTsKKysJCQlOVUxMKTsKKyB9CisgCisgc3RhdGljIHZvaWQgc2V0dGluZ3NfY2FsbGJhY2soR3RrV2lkZ2V0ICppdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvY29ubm1hbi1nbm9tZS1maXgtZGJ1cy1pbnRlcmZhY2UtbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwNDlmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK2Nvbm5tYW4tZ25vbWU6IGZpeCBkYnVzIGludGVyZmFjZSBuYW1lCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgZm9sbG93aW5nIGVycm9yOgorCisiY29ubm1hbi1kYnVzLnhtbCI6ICJjb25ubWFuIiBpcyBub3QgYSB2YWxpZCBELUJ1cyBpbnRlcmZhY2UgbmFtZQorCitodHRwczovLzUwMjU1Mi5idWdzLmdlbnRvby5vcmcvYXR0YWNobWVudC5jZ2k/aWQ9MzgwNjUyCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb21tb24vY29ubm1hbi1jbGllbnQuYyB8IDI0ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIGNvbW1vbi9jb25ubWFuLWNsaWVudC5oIHwgIDQgKystLQorIGNvbW1vbi9jb25ubWFuLWRidXMuYyAgIHwgIDYgKysrLS0tCisgY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuYyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitpbmRleCBjNTVlMjVjLi45ZDgxOGIyIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmMKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5jCitAQCAtMjg5LDcgKzI4OSw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAKKyAJZ192YWx1ZV9pbml0KCZ2YWx1ZSwgREJVU19UWVBFX0dfRElDVElPTkFSWSk7CisgCWdfdmFsdWVfc2V0X2JveGVkKCZ2YWx1ZSwgaXB2NCk7CistCXJldCA9IGNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKysJcmV0ID0gbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiSVB2NC5Db25maWd1cmF0aW9uIiwgJnZhbHVlLCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIAorQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHBvd2VyZWQpOworIAorIAllcnJvciA9IE5VTEw7CistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKysJbmV0X2Nvbm5tYW5fc2V0X3Byb3BlcnR5KHByb3h5LCAiUG93ZXJlZCIsICZ2YWx1ZSwgJmVycm9yKTsKKyAJaWYoIGVycm9yICkKKyAJCWZwcmludGYgKHN0ZGVyciwgImVycm9yOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOworIAorQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9wb3dlcmVkKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyB9CisgCisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQljb25ubWFuX3NjYW5fcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJfZGF0YSkKKysJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpCisgeworIAlDb25ubWFuQ2xpZW50UHJpdmF0ZSAqcHJpdiA9IENPTk5NQU5fQ0xJRU5UX0dFVF9QUklWQVRFKGNsaWVudCk7CisgCURCdXNHUHJveHkgKnByb3h5OworQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIGNvbm5tYW5fY2xpZW50X3NjYW4oQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCXJldHVybjsKKyAKKy0JY29ubm1hbl9zY2FuX2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKysJbmV0X2Nvbm5tYW5fc2Nhbl9hc3luYyhwcm94eSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisgCisgCWdfb2JqZWN0X3VucmVmKHByb3h5KTsKKyB9CitAQCAtMzUzLDcgKzM1Myw3IEBAIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X2dldF9vZmZsaW5lX3N0YXR1cyhDb25ubWFuQ2xpZW50ICpjbGllbnQpCisgCisgCURCRygiY2xpZW50ICVwIiwgY2xpZW50KTsKKyAKKy0JcmV0ID0gY29ubm1hbl9nZXRfcHJvcGVydGllcyhwcml2LT5tYW5hZ2VyLCAmaGFzaCwgTlVMTCk7CisrCXJldCA9IG5ldF9jb25ubWFuX2dldF9wcm9wZXJ0aWVzKHByaXYtPm1hbmFnZXIsICZoYXNoLCBOVUxMKTsKKyAKKyAJaWYgKHJldCA9PSBGQUxTRSkKKyAJCWdvdG8gZG9uZTsKK0BAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9zZXRfb2ZmbGluZW1vZGUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBnYm9vbGVhbiBzdGF0dXMpCisgCWdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9CT09MRUFOKTsKKyAJZ192YWx1ZV9zZXRfYm9vbGVhbigmdmFsdWUsIHN0YXR1cyk7CisgCistCWNvbm5tYW5fc2V0X3Byb3BlcnR5KHByaXYtPm1hbmFnZXIsICJPZmZsaW5lTW9kZSIsICZ2YWx1ZSwgTlVMTCk7CisrCW5ldF9jb25ubWFuX3NldF9wcm9wZXJ0eShwcml2LT5tYW5hZ2VyLCAiT2ZmbGluZU1vZGUiLCAmdmFsdWUsIE5VTEwpOworIH0KKyAKKyBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorQEAgLTM5OCw3ICszOTgsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gbmV0d29ya19kaXNjb25uZWN0KEd0a1RyZWVNb2RlbCAqbW9kZWwsIEd0a1RyZWVQYXRoICpwYXRoLAorIAkJcmV0dXJuIFRSVUU7CisgCisgCWlmICh0eXBlID09IENPTk5NQU5fVFlQRV9XSUZJKQorLQkJY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKysJCW5ldF9jb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworIAorIAlnX29iamVjdF91bnJlZihwcm94eSk7CisgCitAQCAtNDIyLDEzICs0MjIsMTMgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9jb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9jb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KKyAKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCWNvbm5tYW5fY29ubmVjdF9yZXBseSBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlcmRhdGEpCisrCQluZXRfY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSkKKyB7CisgCUNvbm5tYW5DbGllbnRQcml2YXRlICpwcml2ID0gQ09OTk1BTl9DTElFTlRfR0VUX1BSSVZBVEUoY2xpZW50KTsKKyAJREJ1c0dQcm94eSAqcHJveHk7CitAQCAtNDQ2LDcgKzQ0Niw3IEBAIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdF9hc3luYyhDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAlpZiAocHJveHkgPT0gTlVMTCkKKyAJCWdvdG8gZG9uZTsKKyAKKy0JY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworKwluZXRfY29ubm1hbl9jb25uZWN0X2FzeW5jKHByb3h5LCBjYWxsYmFjaywgdXNlcmRhdGEpOworIAorIGRvbmU6CisgCXJldHVybjsKK0BAIC00NzYsNyArNDc2LDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9kaXNjb25uZWN0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKm5ldHdvcmspCisgCWlmIChwcm94eSA9PSBOVUxMKQorIAkJcmV0dXJuOworIAorLQljb25ubWFuX2Rpc2Nvbm5lY3QocHJveHksIE5VTEwpOworKwluZXRfY29ubm1hbl9kaXNjb25uZWN0KHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK0BAIC01MzIsNyArNTMyLDcgQEAgdm9pZCBjb25ubWFuX2NsaWVudF9yZW1vdmUoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaykKKyAJaWYgKHByb3h5ID09IE5VTEwpCisgCQlyZXR1cm47CisgCistCWNvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKysJbmV0X2Nvbm5tYW5fcmVtb3ZlKHByb3h5LCBOVUxMKTsKKyAKKyAJZ19vYmplY3RfdW5yZWYocHJveHkpOworIH0KK2RpZmYgLS1naXQgYS9jb21tb24vY29ubm1hbi1jbGllbnQuaCBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitpbmRleCA5ZTJlNmQ1Li45ODI0MWRlIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tY2xpZW50LmgKKysrKyBiL2NvbW1vbi9jb25ubWFuLWNsaWVudC5oCitAQCAtNzAsMTMgKzcwLDEzIEBAIHZvaWQgY29ubm1hbl9jbGllbnRfc2V0X3Bvd2VyZWQoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqZGV2aWNlLAorIGdib29sZWFuIGNvbm5tYW5fY2xpZW50X3NldF9pcHY0KENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKyAJCQkJc3RydWN0IGlwdjRfY29uZmlnICppcHY0X2NvbmZpZyk7Cisgdm9pZCBjb25ubWFuX2NsaWVudF9zY2FuKENvbm5tYW5DbGllbnQgKmNsaWVudCwgY29uc3QgZ2NoYXIgKmRldmljZSwKKy0JCQkJCQkJY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworKwkJCQkJCQluZXRfY29ubm1hbl9zY2FuX3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyX2RhdGEpOworIAorIHZvaWQgY29ubm1hbl9jbGllbnRfY29ubmVjdChDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Rpc2Nvbm5lY3QoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yayk7CisgZ2NoYXIgKmNvbm5tYW5fY2xpZW50X2dldF9zZWN1cml0eShDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X2Nvbm5lY3RfYXN5bmMoQ29ubm1hbkNsaWVudCAqY2xpZW50LCBjb25zdCBnY2hhciAqbmV0d29yaywKKy0JCQkJY29ubm1hbl9jb25uZWN0X3JlcGx5IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyZGF0YSk7CisrCQkJCW5ldF9jb25ubWFuX2Nvbm5lY3RfcmVwbHkgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJkYXRhKTsKKyB2b2lkIGNvbm5tYW5fY2xpZW50X3NldF9yZW1lbWJlcihDb25ubWFuQ2xpZW50ICpjbGllbnQsIGNvbnN0IGdjaGFyICpuZXR3b3JrLAorIAkJCQkJCQlnYm9vbGVhbiByZW1lbWJlcik7CisgCitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jIGIvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCitpbmRleCBiODJiM2UxLi41NDNlYjQzIDEwMDY0NAorLS0tIGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy5jCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLmMKK0BAIC02NTUsMTUgKzY1NSwxNSBAQCBEQnVzR1Byb3h5ICpjb25ubWFuX2RidXNfY3JlYXRlX21hbmFnZXIoREJ1c0dDb25uZWN0aW9uICpjb25uLAorIAorIAlEQkcoImdldHRpbmcgbWFuYWdlciBwcm9wZXJ0aWVzIik7CisgCistCWNvbm5tYW5fZ2V0X3Byb3BlcnRpZXNfYXN5bmMocHJveHksIG1hbmFnZXJfcHJvcGVydGllcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfcHJvcGVydGllc19hc3luYyhwcm94eSwgbWFuYWdlcl9wcm9wZXJ0aWVzLCBzdG9yZSk7CisgCisgCURCRygiZ2V0dGluZyB0ZWNobm9sb2dpZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworKwluZXRfY29ubm1hbl9nZXRfdGVjaG5vbG9naWVzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3RlY2hub2xvZ2llcywgc3RvcmUpOworIAorIAlEQkcoImdldHRpbmcgc2VydmljZXMiKTsKKyAKKy0JY29ubm1hbl9nZXRfc2VydmljZXNfYXN5bmMocHJveHksIG1hbmFnZXJfc2VydmljZXMsIHN0b3JlKTsKKysJbmV0X2Nvbm5tYW5fZ2V0X3NlcnZpY2VzX2FzeW5jKHByb3h5LCBtYW5hZ2VyX3NlcnZpY2VzLCBzdG9yZSk7CisgCisgCXJldHVybiBwcm94eTsKKyB9CitkaWZmIC0tZ2l0IGEvY29tbW9uL2Nvbm5tYW4tZGJ1cy54bWwgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAoraW5kZXggNTZiOTU4Mi4uMDE5OWQ1MiAxMDA2NDQKKy0tLSBhL2NvbW1vbi9jb25ubWFuLWRidXMueG1sCisrKysgYi9jb21tb24vY29ubm1hbi1kYnVzLnhtbAorQEAgLTEsNyArMSw3IEBACisgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CisgCisgPG5vZGUgbmFtZT0iLyI+CistICA8aW50ZXJmYWNlIG5hbWU9ImNvbm5tYW4iPgorKyAgPGludGVyZmFjZSBuYW1lPSJuZXQuY29ubm1hbiI+CisgICAgIDxtZXRob2QgbmFtZT0iR2V0UHJvcGVydGllcyI+CisgICAgICAgPGFyZyB0eXBlPSJhe3N2fSIgZGlyZWN0aW9uPSJvdXQiLz4KKyAgICAgPC9tZXRob2Q+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMS5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDEucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMi5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NGZiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wMy5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZWI0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNC5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTQ0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL2ltYWdlcy9jb25ubWFuLXNpZ25hbC0wNS5wbmcgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNDBhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi1nbm9tZS9pbWFnZXMvY29ubm1hbi1zaWduYWwtMDUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWUvbnVsbF9jaGVja19mb3JfaXB2NF9jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMWNkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0luIG5ldHdvcmtzIHRoYXQgZG9uJ3QgaGF2ZSBhIERIQ1Agc2VydmVyIGNvbmZpZ3VyZWQsIGlwdjQgYWRkcmVzcworYWxsb2NhdGlvbiBmYWlscyBhbmQgdGhlIGlwdjQgc3RydWN0dXJlIGRvZXNuJ3QgZ2V0IHBvcHVsYXRlZC4gV2hlbgordGhlIEdVSSBpcyB0cnlpbmcgdG8gcmVhZCB0aGUgaXB2NF9jb25maWcubWV0aG9kIGZpZWxkIHRvIHNlZSB3aGV0aGVyCitpdCBjb250YWlucyAiZGhjcCIgc3RyaW5nLCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpcyBnZW5lcmF0ZWQuCisKK0V0aGVybmV0IG1hbnVhbCBjb25maWd1cmF0aW9uIGJlaGF2aW9yIHJlbWFpbnMgdW5jaGFuZ2VkIGFmdGVyIHRoaXMgZml4LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRW1pbGlhIENpb2JhbnUgPGVtaWxpYS5tYXJpYS5zaWx2aWEuY2lvYmFudUBpbnRlbC5jb20+CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvZXRoZXJuZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Byb3BlcnRpZXMvZXRoZXJuZXQuYworKysrIGdpdC9wcm9wZXJ0aWVzL2V0aGVybmV0LmMKK0BAIC0xOTQsNyArMTk0LDcgQEAgdm9pZCBhZGRfZXRoZXJuZXRfc2VydmljZShHdGtXaWRnZXQgKm1haQorCisgCWRhdGEtPmJ1dHRvbiA9IGJ1dHRvbjsKKworLQlpZiAoZ19zdHJfZXF1YWwoaXB2NF9jb25maWcubWV0aG9kLCAiZGhjcCIpID09IFRSVUUpCisrCWlmICghaXB2NF9jb25maWcubWV0aG9kIHx8IGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorIAkJdXBkYXRlX2V0aGVybmV0X2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV9ldGhlcm5ldF9pcHY0KGRhdGEsIENPTk5NQU5fUE9MSUNZX01BTlVBTCk7CitJbmRleDogZ2l0L3Byb3BlcnRpZXMvd2lmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvcHJvcGVydGllcy93aWZpLmMKKysrKyBnaXQvcHJvcGVydGllcy93aWZpLmMKK0BAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIHZvaWQgd2lmaV9pcGNvbmZpZyhHdGtXaWRnZXQgKnRhYgorCisgCWRhdGEtPmlwdjRfY29uZmlnID0gaXB2NF9jb25maWc7CisKKy0JaWYgKGdfc3RyX2VxdWFsKGlwdjRfY29uZmlnLm1ldGhvZCwgImRoY3AiKSA9PSBUUlVFKQorKwlpZiAoIWlwdjRfY29uZmlnLm1ldGhvZCB8fCBnX3N0cl9lcXVhbChpcHY0X2NvbmZpZy5tZXRob2QsICJkaGNwIikgPT0gVFJVRSkKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfREhDUCk7CisgCWVsc2UKKyAJCXVwZGF0ZV93aWZpX2lwdjQoZGF0YSwgQ09OTk1BTl9QT0xJQ1lfTUFOVUFMKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLWdub21lXzAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTU3NWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4tZ25vbWVfMC43LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiR1RLKyBmcm9udGVuZCBmb3IgdGhlIENvbm5NYW4gbmV0d29yayBjb25uZWN0aW9uIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wcm9wZXJ0aWVzL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT01MGM3N2M4MTg3MTMwOGIwMzNhYjdhMTUwNDYyNmFmYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY29ubm1hbi1kYnVzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZGU2YjQ4NWMwZTcxN2EwMjM2NDAyZDIyMDE4NzcxN2EiCisKK0RFUEVORFMgPSAiZ3RrKyBkYnVzLWdsaWIgaW50bHRvb2wtbmF0aXZlIgorCisjIDAuNyB0YWcKK1NSQ1JFViA9ICJjZjNjMzI1YjIzZGFlODQzYzU0OTlhMTEzNTkxY2ZiYzk4YWNiMTQzIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Nvbm5lY3Rpdml0eS9jb25ubWFuLWdub21lLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlbW92ZWQtaWNvbi1mcm9tLWNvbm5tYW4tZ25vbWUtYWJvdXQtYXBwbGV0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL251bGxfY2hlY2tfZm9yX2lwdjRfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ltYWdlcy8qIFwKKyAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4tZ25vbWUtZml4LWRidXMtaW50ZXJmYWNlLW5hbWUucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGd0ay1pY29uLWNhY2hlIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfSA9ICJjb25ubWFuIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbWFnZXMvKiAke0R9L3Vzci9zaGFyZS9pY29ucy9oaWNvbG9yLzIyeDIyL2FwcHMvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkYzRiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLmluYwpAQCAtMCwwICsxLDIxMSBAQAorU1VNTUFSWSA9ICJBIGRhZW1vbiBmb3IgbWFuYWdpbmcgaW50ZXJuZXQgY29ubmVjdGlvbnMgd2l0aGluIGVtYmVkZGVkIGRldmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgQ29ubk1hbiBwcm9qZWN0IHByb3ZpZGVzIGEgZGFlbW9uIGZvciBtYW5hZ2luZyBcCitpbnRlcm5ldCBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIENvbm5lY3Rpb24gTWFuYWdlciBpcyBkZXNpZ25lZCB0byBiZSBzbGltIGFuZCBcCit0byB1c2UgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZSwgc28gaXQgY2FuIGJlIGVhc2lseSBpbnRlZ3JhdGVkLiBcCitJdCBpcyBhIGZ1bGx5IG1vZHVsYXIgc3lzdGVtIHRoYXQgY2FuIGJlIGV4dGVuZGVkLCB0aHJvdWdoIHBsdWctaW5zLCBcCit0byBzdXBwb3J0IGFsbCBraW5kcyBvZiB3aXJlZCBvciB3aXJlbGVzcyB0ZWNobm9sb2dpZXMuIEFsc28sIFwKK2NvbmZpZ3VyYXRpb24gbWV0aG9kcywgbGlrZSBESENQIGFuZCBkb21haW4gbmFtZSByZXNvbHZpbmcsIGFyZSBcCitpbXBsZW1lbnRlZCB1c2luZyBwbHVnLWlucy4iCitIT01FUEFHRSA9ICJodHRwOi8vY29ubm1hbi5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovLzAxLm9yZy9qaXJhL2Jyb3dzZS9DTSIKK0xJQ0VOU0UgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT00ODZhMjc5YTZhYjBjOGQxNTJiY2RhM2E1YjVlZGMzNiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQgdXBkYXRlLXJjLmQgYmx1ZXRvb3RoCisKK0RFUEVORFMgID0gImRidXMgZ2xpYi0yLjAgcHBwIGlwdGFibGVzIgorCitJTkNfUFIgPSAicjIwIgorCitFWFRSQV9PRUNPTkYgKz0gIlwKKyAgICBhY19jdl9wYXRoX1dQQVNVUFBMSUNBTlQ9JHtzYmluZGlyfS93cGFfc3VwcGxpY2FudCBcCisgICAgYWNfY3ZfcGF0aF9QUFBEPSR7c2JpbmRpcn0vcHBwZCBcCisgICAgLS1lbmFibGUtZGVidWcgXAorICAgIC0tZW5hYmxlLWxvb3BiYWNrIFwKKyAgICAtLWVuYWJsZS1ldGhlcm5ldCBcCisgICAgLS1lbmFibGUtdG9vbHMgXAorICAgIC0tZW5hYmxlLXRlc3QgXAorICAgIC0tZGlzYWJsZS1wb2xraXQgXAorICAgIC0tZW5hYmxlLWNsaWVudCBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ3aXNwciBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywnc3lzdGVtZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsJ3dpZmknLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnM2cnLCczZycsICcnLCBkKX0gXAorIgorCisjIElmIHlvdSB3YW50IENvbm5NYW4gdG8gc3VwcG9ydCBWUE4sIGFkZCBmb2xsb3dpbmcgc3RhdGVtZW50IGludG8KKyMgbG9jYWwuY29uZiBvciBkaXN0cm8gY29uZmlnCisjIFBBQ0tBR0VDT05GSUdfYXBwZW5kX3BuLWNvbm5tYW4gPSAiIG9wZW52cG4gdnBuYyBsMnRwIHBwdHAiCisKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW3dpZmldID0gIi0tZW5hYmxlLXdpZmksIC0tZGlzYWJsZS13aWZpLCB3cGEtc3VwcGxpY2FudCwgd3BhLXN1cHBsaWNhbnQiCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9LCAke0JMVUVafSIKK1BBQ0tBR0VDT05GSUdbM2ddID0gIi0tZW5hYmxlLW9mb25vLCAtLWRpc2FibGUtb2Zvbm8sIG9mb25vLCBvZm9ubyIKK1BBQ0tBR0VDT05GSUdbdGlzdF0gPSAiLS1lbmFibGUtdGlzdCwtLWRpc2FibGUtdGlzdCwiCitQQUNLQUdFQ09ORklHW29wZW52cG5dID0gIi0tZW5hYmxlLW9wZW52cG4gLS13aXRoLW9wZW52cG49JHtzYmluZGlyfS9vcGVudnBuLC0tZGlzYWJsZS1vcGVudnBuLCxvcGVudnBuIgorUEFDS0FHRUNPTkZJR1t2cG5jXSA9ICItLWVuYWJsZS12cG5jIC0td2l0aC12cG5jPSR7c2JpbmRpcn0vdnBuYywtLWRpc2FibGUtdnBuYywsdnBuYyIKK1BBQ0tBR0VDT05GSUdbbDJ0cF0gPSAiLS1lbmFibGUtbDJ0cCAtLXdpdGgtbDJ0cD0ke3NiaW5kaXJ9L3hsMnRwZCwtLWRpc2FibGUtbDJ0cCwseGwydHBkIgorUEFDS0FHRUNPTkZJR1twcHRwXSA9ICItLWVuYWJsZS1wcHRwIC0td2l0aC1wcHRwPSR7c2JpbmRpcn0vcHB0cCwtLWRpc2FibGUtcHB0cCwscHB0cC1saW51eCIKKyMgV0lTUHIgc3VwcG9ydCBmb3IgbG9nZ2luZyBpbnRvIGhvdHNwb3RzLCByZXF1aXJlcyBUTFMKK1BBQ0tBR0VDT05GSUdbd2lzcHJdID0gIi0tZW5hYmxlLXdpc3ByLC0tZGlzYWJsZS13aXNwcixnbnV0bHMsIgorCitJTklUU0NSSVBUX05BTUUgPSAiY29ubm1hbiIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDA1IDUgMiAzIC4gc3RvcCAyMiAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIHN5c3RlbWRfcGFja2FnZXMgPSAiJHtQTn0iCisgICAgcGtnY29uZmlnID0gZC5nZXRWYXIoJ1BBQ0tBR0VDT05GSUcnLCBUcnVlKQorICAgIGlmICgnb3BlbnZwbicgb3IgJ3ZwbmMnIG9yICdsMnRwJyBvciAncHB0cCcpIGluIHBrZ2NvbmZpZy5zcGxpdCgpOgorICAgICAgICBzeXN0ZW1kX3BhY2thZ2VzICs9ICIgJHtQTn0tdnBuIgorICAgIGQuc2V0VmFyKCdTWVNURU1EX1BBQ0tBR0VTJywgc3lzdGVtZF9wYWNrYWdlcykKK30KKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImNvbm5tYW4uc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS12cG4gPSAiY29ubm1hbi12cG4uc2VydmljZSIKK1NZU1RFTURfV0lSRURfU0VUVVAgPSAiRXhlY1N0YXJ0UHJlPS0ke2xpYmRpcn0vY29ubm1hbi93aXJlZC1zZXR1cCIKKworIyBUaGlzIGFsbG93cyAqZXZlcnlvbmUqIHRvIGFjY2VzcyBDb25uTWFuIG92ZXIgREJ1cywgd2l0aG91dCBhbnkgYWNjZXNzCisjIGNvbnRyb2wuICBSZWFsbHkgdGhlIGF0X2NvbnNvbGUgZmxhZyBzaG91bGQgd29yaywgd2hpY2ggd291bGQgbWVhbiB0aGF0CisjIGJvdGggdGhpcyBhbmQgdGhlIHh1c2VyIHBhdGNoIGNhbiBiZSBkcm9wcGVkLgorZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCisJc2VkIC1pIC1lIHM6ZGVueTphbGxvdzpnICR7U30vdnBuL3Zwbi1kYnVzLmNvbmYKKworCXNlZCAtaSAicyNFeGVjU3RhcnQ9IyR7U1lTVEVNRF9XSVJFRF9TRVRVUH1cbkV4ZWNTdGFydD0jIiAke0J9L3NyYy9jb25ubWFuLnNlcnZpY2UKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vY29ubm1hbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvY29ubm1hbgorCQlzZWQgLWkgcyVATElCRElSQCUke2xpYmRpcn0lICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9jb25ubWFuCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke0J9L3Rvb2xzLyotdGVzdCAke0R9JHtiaW5kaXJ9CisJaWYgWyAtZSAke0J9L3Rvb2xzL3dpc3ByIF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vdG9vbHMvd2lzcHIgJHtEfSR7YmluZGlyfQorCWZpCisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vY2xpZW50L2Nvbm5tYW5jdGwgJHtEfSR7YmluZGlyfQorCisJIyBXZSBkb24ndCBuZWVkIHRvIHBhY2thZ2UgYW4gZW1wdHkgZGlyZWN0b3J5CisJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bGliZGlyfS9jb25ubWFuL3NjcmlwdHMKKworCSMgQXV0b21ha2UgMS4xMiB3b24ndCBpbnN0YWxsIGVtcHR5IGRpcmVjdG9yaWVzLCBidXQgd2UgbmVlZCB0aGUKKwkjIHBsdWdpbnMgZGlyZWN0b3J5IHRvIGJlIHByZXNlbnQgZm9yIG93bmVyc2hpcAorCW1rZGlyIC1wICR7RH0ke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zCit9CisKKyMgVGhlc2UgdXNlZCB0byBiZSBwbHVnaW5zLCBidXQgbm93IHRoZXkgYXJlIGNvcmUKK1JQUk9WSURFU18ke1BOfSA9ICJcCisJY29ubm1hbi1wbHVnaW4tbG9vcGJhY2sgXAorCWNvbm5tYW4tcGx1Z2luLWV0aGVybmV0IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdibHVldG9vdGgnLCdjb25ubWFuLXBsdWdpbi1ibHVldG9vdGgnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd3aWZpJywnY29ubm1hbi1wbHVnaW4td2lmaScsICcnLCBkKX0gXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJzNnJywnY29ubm1hbi1wbHVnaW4tb2Zvbm8nLCAnJywgZCl9IFwKKwkiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKwlkYnVzIFwKKwkke0BiYXNlX2NvbmRpdGlvbmFsKCdST09UTEVTU19YJywgJzEnLCAneHVzZXItYWNjb3VudCcsICcnLCBkKX0gXAorCSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7UE59LXBsdWdpbi0uKiIKKworZGVmIGFkZF9yZGVwZW5kcyhiYiwgZCwgZmlsZSwgcGtnLCBkZXBtYXAsIG11bHRpbGliX3ByZWZpeCwgYWRkX2luc2FuZV9za2lwKToKKyAgICBwbHVnaW50eXBlID0gcGtnLnNwbGl0KCAnLScgKVstMV0KKyAgICBpZiBwbHVnaW50eXBlIGluIGRlcG1hcDoKKyAgICAgICAgcmRlcGVuZHMgPSBtYXAobGFtYmRhIHg6IG11bHRpbGliX3ByZWZpeCArIHgsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVwbWFwW3BsdWdpbnR5cGVdLnNwbGl0KCkpCisgICAgICAgIGQuc2V0VmFyKCJSREVQRU5EU18lcyIgJSBwa2csICIgIi5qb2luKHJkZXBlbmRzKSkKKyAgICBpZiBhZGRfaW5zYW5lX3NraXA6CisgICAgICAgIGQuYXBwZW5kVmFyKCJJTlNBTkVfU0tJUF8lcyIgJSBwa2csICJkZXYtc28iKQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBkZXBtYXAgPSBkaWN0KHBwcGQ9InBwcCIpCisgICAgbXVsdGlsaWJfcHJlZml4ID0gKGQuZ2V0VmFyKCJNTFBSRUZJWCIsIFRydWUpIG9yICIiKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIEZhbHNlKQorICAgIHBsdWdpbl9kaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi0lcycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luX2RpciwgJ14oLiopLnNvJCcsIHBsdWdpbl9uYW1lLCBcCisgICAgICAgICcke1BOfSBwbHVnaW4gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1ob29rLCBwcmVwZW5kPVRydWUgKQorCisgICAgaG9vayA9IGxhbWJkYSBmaWxlLHBrZyx4LHksejogXAorICAgICAgICBhZGRfcmRlcGVuZHMoYmIsIGQsIGZpbGUsIHBrZywgZGVwbWFwLCBtdWx0aWxpYl9wcmVmaXgsIFRydWUpCisgICAgcGx1Z2luX2RpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vY29ubm1hbi9wbHVnaW5zLXZwbi8nKQorICAgIHBsdWdpbl9uYW1lID0gZC5leHBhbmQoJyR7UE59LXBsdWdpbi12cG4tJXMnKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbl9kaXIsICdeKC4qKS5zbyQnLCBwbHVnaW5fbmFtZSwgXAorICAgICAgICAnJHtQTn0gVlBOIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnLCBob29rPWhvb2ssIHByZXBlbmQ9VHJ1ZSApCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10b29scyAke1BOfS10ZXN0cyAke1BOfS1jbGllbnQiCisKK0ZJTEVTXyR7UE59LXRvb2xzID0gIiR7YmluZGlyfS93aXNwciIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtiaW5kaXJ9LyotdGVzdCAke2xpYmRpcn0vJHtCUE59L3Rlc3QvKiIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QgcHl0aG9uLXRleHR1dGlscyBweXRob24tc3VicHJvY2VzcyBweXRob24tZmNudGwgcHl0aG9uLW5ldGNsaWVudCIKKworRklMRVNfJHtQTn0tY2xpZW50ID0gIiR7YmluZGlyfS9jb25ubWFuY3RsIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke3NiaW5kaXJ9LyogJHtsaWJleGVjZGlyfS8qICR7bGliZGlyfS9saWIqLnNvLiogXAorICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucyBcCisgICAgICAgICAgICAke3N5c2NvbmZkaXJ9ICR7c2hhcmVkc3RhdGVkaXJ9ICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vKiAke2Jhc2Vfc2JpbmRpcn0vKiAke2Jhc2VfbGliZGlyfS8qLnNvKiAke2RhdGFkaXJ9LyR7UE59IFwKKyAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jb25ubWFuLyovKi5sYSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXZwbiIKKworU1VNTUFSWV8ke1BOfS12cG4gPSAiQSBkYWVtb24gZm9yIG1hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyIKK0RFU0NSSVBUSU9OXyR7UE59LXZwbiA9ICJUaGUgQ29ubk1hbiBWUE4gcHJvdmlkZXMgYSBkYWVtb24gZm9yIFwKK21hbmFnaW5nIFZQTiBjb25uZWN0aW9ucyB3aXRoaW4gZW1iZWRkZWQgZGV2aWNlcyBydW5uaW5nIHRoZSBMaW51eCBcCitvcGVyYXRpbmcgc3lzdGVtLiAgVGhlIGNvbm5tYW4tdnBuZCBoYW5kbGVzIGFsbCB0aGUgVlBOIGNvbm5lY3Rpb25zIFwKK2FuZCBzdGFydHMvc3RvcHMgVlBOIGNsaWVudCBwcm9jZXNzZXMgd2hlbiBuZWNlc3NhcnkuIFRoZSBjb25ubWFuLXZwbmQgXAorcHJvdmlkZXMgYSBEQnVzIEFQSSBmb3IgbWFuYWdpbmcgVlBOIGNvbm5lY3Rpb25zLiBBbGwgdGhlIGRpZmZlcmVudCBcCitWUE4gdGVjaG5vZ2llcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgcGx1Zy1pbnMuIgorRklMRVNfJHtQTn0tdnBuICs9ICIke3NiaW5kaXJ9L2Nvbm5tYW4tdnBuZCBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGJ1cy0xL3N5c3RlbS5kL2Nvbm5tYW4tdnBuLWRidXMuY29uZiBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy9uZXQuY29ubm1hbi52cG4uc2VydmljZSBcCisgICAgICAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY29ubm1hbi12cG4uc2VydmljZSIKKworU1VNTUFSWV8ke1BOfS1wbHVnaW4tdnBuLW9wZW52cG4gPSAiQW4gT3BlblZQTiBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuID0gIlRoZSBDb25uTWFuIE9wZW5WUE4gcGx1Z2luIHVzZXMgb3BlbnZwbiBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gT3BlblZQTiBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1vcGVudnBuICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW52cG4tc2NyaXB0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vb3BlbnZwbi5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbiArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnb3BlbnZwbicsJyR7UE59LXBsdWdpbi12cG4tb3BlbnZwbicsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIkEgdnBuYyBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi12cG5jID0gIlRoZSBDb25uTWFuIHZwbmMgcGx1Z2luIHVzZXMgdnBuYyBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gQ2lzY28zMDAwIFZQTiBDb25jZW50cmF0b3IuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi12cG5jICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL29wZW5jb25uZWN0LXNjcmlwdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jb25ubWFuL3BsdWdpbnMtdnBuL3ZwbmMuc28iCitSREVQRU5EU18ke1BOfS1wbHVnaW4tdnBuLXZwbmMgKz0gIiR7UE59LXZwbiIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsJ3ZwbmMnLCcke1BOfS1wbHVnaW4tdnBuLXZwbmMnLCAnJywgZCl9IgorCitTVU1NQVJZXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJBIEwyVFAgcGx1Z2luIGZvciBDb25uTWFuIFZQTiIKK0RFU0NSSVBUSU9OXyR7UE59LXBsdWdpbi12cG4tbDJ0cCA9ICJUaGUgQ29ubk1hbiBMMlRQIHBsdWdpbiB1c2VzIHhsMnRwZCBkYWVtb24gXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gTDJUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1sMnRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vbDJ0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tbDJ0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywnbDJ0cCcsJyR7UE59LXBsdWdpbi12cG4tbDJ0cCcsICcnLCBkKX0iCisKK1NVTU1BUllfJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIkEgUFBUUCBwbHVnaW4gZm9yIENvbm5NYW4gVlBOIgorREVTQ1JJUFRJT05fJHtQTn0tcGx1Z2luLXZwbi1wcHRwID0gIlRoZSBDb25uTWFuIFBQVFAgcGx1Z2luIHVzZXMgcHB0cC1saW51eCBjbGllbnQgXAordG8gY3JlYXRlIGEgVlBOIGNvbm5lY3Rpb24gdG8gUFBUUCBzZXJ2ZXIuIgorRklMRVNfJHtQTn0tcGx1Z2luLXZwbi1wcHRwICs9ICIke2xpYmRpcn0vY29ubm1hbi9zY3JpcHRzL2xpYnBwcC1wbHVnaW4uc28qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2Nvbm5tYW4vcGx1Z2lucy12cG4vcHB0cC5zbyIKK1JERVBFTkRTXyR7UE59LXBsdWdpbi12cG4tcHB0cCArPSAiJHtQTn0tdnBuIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywncHB0cCcsJyR7UE59LXBsdWdpbi12cG4tcHB0cCcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmMDNlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuLzAwMDEtcGx1Z2luLmgtQ2hhbmdlLXZpc2liaWxpdHktdG8tZGVmYXVsdC1mb3ItZGVidWctc3ltYi5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDRkZGFmNzhkYWQ1YTllZTRhMDY1ODIzNWY3MWI3NTEzMjE5MjEyM2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA3IEFwciAyMDEyIDE4OjUyOjEyIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBsdWdpbi5oOiBDaGFuZ2UgdmlzaWJpbGl0eSB0byBkZWZhdWx0IGZvciBkZWJ1ZyBzeW1ib2xzCisKK2dvbGQgcmVmdXNlcyB0byBsaW5rIGluIHVuZGVmaW5lZCB3ZWFrIHN5bWJvbHMgd2hpY2gKK2hhdmUgaGlkZGVuIHZpc2liaWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluY2x1ZGUvcGx1Z2luLmggfCAgICA0ICsrLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvcGx1Z2luLmggYi9pbmNsdWRlL3BsdWdpbi5oCitpbmRleCA2OTJhNGU1Li5hOTM2MWMzIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9wbHVnaW4uaAorKysrIGIvaW5jbHVkZS9wbHVnaW4uaAorQEAgLTg5LDkgKzg5LDkgQEAgc3RydWN0IGNvbm5tYW5fcGx1Z2luX2Rlc2MgeworICNlbHNlCisgI2RlZmluZSBDT05OTUFOX1BMVUdJTl9ERUZJTkUobmFtZSwgZGVzY3JpcHRpb24sIHZlcnNpb24sIHByaW9yaXR5LCBpbml0LCBleGl0KSBcCisgCQlleHRlcm4gc3RydWN0IGNvbm5tYW5fZGVidWdfZGVzYyBfX3N0YXJ0X19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX2RlYnVnX2Rlc2MgX19zdG9wX19fZGVidWdbXSBcCistCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOyBcCisrCQkJCV9fYXR0cmlidXRlX18gKCh3ZWFrLCB2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsgXAorIAkJZXh0ZXJuIHN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgXAorIAkJCQlfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7IFwKKyAJCXN0cnVjdCBjb25ubWFuX3BsdWdpbl9kZXNjIGNvbm5tYW5fcGx1Z2luX2Rlc2MgPSB7IFwKKy0tIAorMS43LjUuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbi9hZGRfeHVzZXJfZGJ1c19wZXJtaXNzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDdiM2NhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vYWRkX3h1c2VyX2RidXNfcGVybWlzc2lvbi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitCZWNhdXNlIFBva3kgZG9lc24ndCBzdXBwb3J0IGF0X2NvbnNvbGUgd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlIHNlc3Npb24KK3VzZXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NyYy9jb25ubWFuLWRidXMuY29uZiBiL3NyYy9jb25ubWFuLWRidXMuY29uZgoraW5kZXggOThhNzczZS4uNDY2ODA5YyAxMDA2NDQKKy0tLSBhL3NyYy9jb25ubWFuLWRidXMuY29uZgorKysrIGIvc3JjL2Nvbm5tYW4tZGJ1cy5jb25mCitAQCAtOCw2ICs4LDkgQEAKKyAgICAgICAgIDxhbGxvdyBzZW5kX2ludGVyZmFjZT0ibmV0LmNvbm5tYW4uQ291bnRlciIvPgorICAgICAgICAgPGFsbG93IHNlbmRfaW50ZXJmYWNlPSJuZXQuY29ubm1hbi5Ob3RpZmljYXRpb24iLz4KKyAgICAgPC9wb2xpY3k+CisrICAgIDxwb2xpY3kgdXNlcj0ieHVzZXIiPgorKyAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisrICAgIDwvcG9saWN5PgorICAgICA8cG9saWN5IGF0X2NvbnNvbGU9InRydWUiPgorICAgICAgICAgPGFsbG93IHNlbmRfZGVzdGluYXRpb249Im5ldC5jb25ubWFuIi8+CisgICAgIDwvcG9saWN5PgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW4vY29ubm1hbiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2Nvbm5tYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YTk0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvY29ubm1hbi9jb25ubWFuL2Nvbm5tYW4KQEAgLTAsMCArMSw4MyBAQAorIyEvYmluL3NoCisKK0RBRU1PTj0vdXNyL3NiaW4vY29ubm1hbmQKK1BJREZJTEU9L3Zhci9ydW4vY29ubm1hbmQucGlkCitERVNDPSJDb25uZWN0aW9uIE1hbmFnZXIiCisKK2lmIFsgLWYgL2V0Yy9kZWZhdWx0L2Nvbm5tYW4gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9jb25ubWFuCitmaQorCitzZXQgLWUKKworbmZzcm9vdD0wCisKK2V4ZWMgOTwmMCA8IC9wcm9jL21vdW50cword2hpbGUgcmVhZCBkZXYgbXRwdCBmc3R5cGUgcmVzdDsgZG8KKwlpZiB0ZXN0ICRtdHB0ID0gIi8iIDsgdGhlbgorCQljYXNlICRmc3R5cGUgaW4KKwkJICAgIG5mcyB8IG5mczQpCisJCQluZnNyb290PTEKKwkJCWJyZWFrCisJCQk7OworCQkgICAgKikKKwkJCTs7CisJCWVzYWMKKwlmaQorZG9uZQorCitkb19zdGFydCgpIHsKKwlFWFRSQV9QQVJBTT0iIgorCWlmIHRlc3QgJG5mc3Jvb3QgLWVxIDEgOyB0aGVuCisJICAgIE5FVF9ERVZTPWBjYXQgL3Byb2MvbmV0L2RldiB8IHNlZCAtbmUgJ3MvXlwoW2EtekEtWjAtOSBdKlwpOi4qJC9cMS9wJ2AKKwkgICAgTkVUX0FERFI9YGNhdCAvcHJvYy9jbWRsaW5lIHwgc2VkIC1uZSAncy9eLippcD1cKFteIDpdKlwpLiokL1wxL3AnYAorCisJICAgIGlmIFsgISAteiAiJE5FVF9BRERSIiBdOyB0aGVuCisJCWlmIFsgIiRORVRfQUREUiIgPSBkaGNwIF07IHRoZW4KKwkJICAgIGV0aG49YGlmY29uZmlnIHwgZ3JlcCAiXmV0aCIgfCBzZWQgLWUgInMvXChldGhbMC05XVwpXCguKlwpL1wxLyJgCisJCSAgICBpZiBbICEgLXogIiRldGhuIiBdOyB0aGVuCisJCQlFWFRSQV9QQVJBTT0iLUkgJGV0aG4iCisJCSAgICBmaQorCQllbHNlCisJCSAgICBmb3IgaSBpbiAkTkVUX0RFVlM7IGRvCisJCQlBRERSPWBpZmNvbmZpZyAkaSB8IHNlZCAncy9hZGRyOi8vZycgfCBzZWQgLW5lICdzL14uKmluZXQgXChbMC05Ll0qXCkgLiokL1wxL3AnYAorCQkJaWYgWyAiJE5FVF9BRERSIiA9ICIkQUREUiIgXTsgdGhlbgorCQkJICAgIEVYVFJBX1BBUkFNPSItSSAkaSIKKwkJCSAgICBicmVhaworCQkJZmkKKwkJICAgIGRvbmUKKwkJZmkKKwkgICAgZmkKKwlmaQorCWlmIFsgLWYgQExJQkRJUkAvY29ubm1hbi93aXJlZC1zZXR1cCBdIDsgdGhlbgorCQkuIEBMSUJESVJAL2Nvbm5tYW4vd2lyZWQtc2V0dXAKKwlmaQorCSREQUVNT04gJEVYVFJBX1BBUkFNCit9CisKK2RvX3N0b3AoKSB7CisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tbmFtZSBjb25ubWFuZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2Nvbm5tYW4vY29ubm1hbl8xLjMwLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQ3MzUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9jb25ubWFuL2Nvbm5tYW5fMS4zMC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGNvbm5tYW4uaW5jCisKK1NSQ19VUkkgID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXBsdWdpbi5oLUNoYW5nZS12aXNpYmlsaXR5LXRvLWRlZmF1bHQtZm9yLWRlYnVnLXN5bWIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FkZF94dXNlcl9kYnVzX3Blcm1pc3Npb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Nvbm5tYW4gXAorICAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjRhM2VmZGJkNjc5NjkyMmRiOWM2ZjY2ZGE1Nzg4N2ZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNWU0NjRiYWNjOWMyN2VkNGU3MjY5ZmI5YjUwNTlmMDc5NDdmNWJlMjY0MzNiNTkyMTIxMzM2NjNmZmE5OTEiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNvbm5tYW4tY29uZiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODNhOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC5pbmMKQEAgLTAsMCArMSwxMTUgQEAKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorU1VNTUFSWSA9ICJJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtIERIQ1AgcGFja2FnZSIKK0RFU0NSSVBUSU9OID0gIkRIQ1AgKER5bmFtaWMgSG9zdCBDb25maWd1cmF0aW9uIFByb3RvY29sKSBpcyBhIHByb3RvY29sIFwKK3doaWNoIGFsbG93cyBpbmRpdmlkdWFsIGRldmljZXMgb24gYW4gSVAgbmV0d29yayB0byBnZXQgdGhlaXIgb3duIFwKK25ldHdvcmsgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGEgc2VydmVyLiAgREhDUCBoZWxwcyBtYWtlIGl0IFwKK2Vhc2llciB0byBhZG1pbmlzdGVyIGRldmljZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlzYy5vcmcvIgorCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7YmVnaW5saW5lPTQ7bWQ1PWM1YzY0ZDY5NjEwN2Y4NGI1NmZlMzM3ZDE0ZGExNzUzIgorCitERVBFTkRTID0gIm9wZW5zc2wgYmluZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuaXNjLm9yZy9pc2MvZGhjcC8ke1BWfS9kaGNwLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQtcmVsYXkgZmlsZTovL2RlZmF1bHQtcmVsYXkgXAorICAgICAgICAgICBmaWxlOi8vaW5pdC1zZXJ2ZXIgZmlsZTovL2RlZmF1bHQtc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL2RoY2xpZW50LmNvbmYgZmlsZTovL2RoY3BkLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vZGhjcGQuc2VydmljZSBmaWxlOi8vZGhjcmVsYXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kaGNwZDYuc2VydmljZSAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHN5c3RlbWQKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfS1zZXJ2ZXIgJHtQTn0tcmVsYXkiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc2VydmVyID0gImRoY3BkLnNlcnZpY2UgZGhjcGQ2LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LXNlcnZlciA9ICJkaXNhYmxlIgorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tcmVsYXkgPSAiZGhjcmVsYXkuc2VydmljZSIKK1NZU1RFTURfQVVUT19FTkFCTEVfJHtQTn0tcmVsYXkgPSAiZGlzYWJsZSIKKworVEFSR0VUX0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3J2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zcnY2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2xpLWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1jbGk2LWxlYXNlLWZpbGU9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudDYubGVhc2VzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtbGliYmluZD0ke1NUQUdJTkdfTElCRElSfS8gXAorICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXJlbGF5ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXJlbGF5CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGVmYXVsdC1yZWxheSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZGhjcC1zZXJ2ZXIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kZWZhdWx0LXNlcnZlciAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyCisKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9kaGNsaWVudC5jb25mKgorCXJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3BkLmNvbmYqCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZGhjbGllbnQuY29uZiAke0R9JHtzeXNjb25mZGlyfS9kaGNwL2RoY2xpZW50LmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RoY3AvZGhjcGQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9LworCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vZGhjbGllbnQgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlmaQorCWluc3RhbGwgLW0gMDc1NSAke1N9L2NsaWVudC9zY3JpcHRzL2xpbnV4ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQtc2NyaXB0CisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3BkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaGNwZDYuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2RoY3JlbGF5LnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcGQqLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGhjcmVsYXkuc2VydmljZQorCXNlZCAtaSAtZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaGNwZCouc2VydmljZQorCXNlZCAtaSAtZSAncyxAYmFzZV9iaW5kaXJALCR7YmFzZV9iaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCisJc2VkIC1pIC1lICdzLEBsb2NhbHN0YXRlZGlyQCwke2xvY2Fsc3RhdGVkaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2RoY3BkKi5zZXJ2aWNlCit9CisKK1BBQ0tBR0VTICs9ICJkaGNwLXNlcnZlciBkaGNwLXNlcnZlci1jb25maWcgZGhjcC1jbGllbnQgZGhjcC1yZWxheSBkaGNwLW9tc2hlbGwiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSREVQRU5EU18ke1BOfS1zdGF0aWNkZXYgPSAiIgorCitGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtzYmluZGlyfS9kaGNwZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9kaGNwLXNlcnZlciIKK1JSRUNPTU1FTkRTXyR7UE59LXNlcnZlciA9ICJkaGNwLXNlcnZlci1jb25maWciCisKK0ZJTEVTXyR7UE59LXNlcnZlci1jb25maWcgPSAiJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3Atc2VydmVyICR7c3lzY29uZmRpcn0vZGhjcC9kaGNwZC5jb25mIgorCitGSUxFU18ke1BOfS1yZWxheSA9ICIke3NiaW5kaXJ9L2RoY3JlbGF5ICR7c3lzY29uZmRpcn0vaW5pdC5kL2RoY3AtcmVsYXkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L2RoY3AtcmVsYXkiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vZGhjbGllbnQgJHtiYXNlX3NiaW5kaXJ9L2RoY2xpZW50LXNjcmlwdCAke3N5c2NvbmZkaXJ9L2RoY3AvZGhjbGllbnQuY29uZiIKK1JERVBFTkRTXyR7UE59LWNsaWVudCA9ICJiYXNoIgorCitGSUxFU18ke1BOfS1vbXNoZWxsID0gIiR7YmluZGlyfS9vbXNoZWxsIgorCitwa2dfcG9zdGluc3RfZGhjcC1zZXJ2ZXIoKSB7CisgICAgbWtkaXIgLXAgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcAorICAgIHRvdWNoICRELyR7bG9jYWxzdGF0ZWRpcn0vbGliL2RoY3AvZGhjcGQubGVhc2VzCisgICAgdG91Y2ggJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZDYubGVhc2VzCit9CisKK3BrZ19wb3N0aW5zdF9kaGNwLWNsaWVudCgpIHsKKyAgICBta2RpciAtcCAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwCit9CisKK3BrZ19wb3N0cm1fZGhjcC1zZXJ2ZXIoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNwZC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CisKK3BrZ19wb3N0cm1fZGhjcC1jbGllbnQoKSB7CisgICAgcm0gLWYgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcC9kaGNsaWVudC5sZWFzZXMKKyAgICBybSAtZiAkRC8ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kaGNwL2RoY2xpZW50Ni5sZWFzZXMKKworICAgIGlmICEgcm1kaXIgJEQvJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJOb3QgcmVtb3ZpbmcgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGhjcCBhcyBpdCBpcyBub24tZW1wdHkuIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kZWZpbmUtbWFjcm8tX1BBVEhfREhDUERfQ09ORi1hbmQtX1BBVEhfREhDTElFTlRfQ09OLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmQzYzliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGVmaW5lLW1hY3JvLV9QQVRIX0RIQ1BEX0NPTkYtYW5kLV9QQVRIX0RIQ0xJRU5UX0NPTi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitkZWZpbmUgbWFjcm8gX1BBVEhfREhDUERfQ09ORiBhbmQgX1BBVEhfREhDTElFTlRfQ09ORgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgPG9lIHNwZWNpZmljPgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBpbmNsdWRlcy9zaXRlLmggfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGVzL3NpdGUuaCBiL2luY2x1ZGVzL3NpdGUuaAoraW5kZXggZDg3YjMwOS4uMTdiYzQwZCAxMDA2NDQKKy0tLSBhL2luY2x1ZGVzL3NpdGUuaAorKysrIGIvaW5jbHVkZXMvc2l0ZS5oCitAQCAtMTM5LDcgKzEzOSw4IEBACisgLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgdGhlIGRoY3BkLmNvbmYgZmlsZSB0byBnbyBzb21ld2hlcmUgb3RoZXIgdGhhbgorICAgIHRoZSBkZWZhdWx0IGxvY2F0aW9uLiAgIEJ5IGRlZmF1bHQsIGl0IGdvZXMgaW4gL2V0Yy9kaGNwZC5jb25mLiAqLworIAorLS8qICNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwZC5jb25mIiAqLworKyNkZWZpbmUgX1BBVEhfREhDUERfQ09ORgkiL2V0Yy9kaGNwL2RoY3BkLmNvbmYiCisrI2RlZmluZSBfUEFUSF9ESENMSUVOVF9DT05GCSIvZXRjL2RoY3AvZGhjbGllbnQuY29uZiIKKyAKKyAvKiBOZXR3b3JrIEFQSSBkZWZpbml0aW9ucy4gICBZb3UgZG8gbm90IG5lZWQgdG8gY2hvb3NlIG9uZSBvZiB0aGVzZSAtIGlmCisgICAgeW91IGRvbid0IGNob29zZSwgb25lIHdpbGwgYmUgY2hvc2VuIGZvciB5b3UgaW4geW91ciBzeXN0ZW0ncyBjb25maWcKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2VhNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjbGllbnQtc2NyaXB0LWRyb3AtcmVzb2x2LmNvbmYuZGhjbGllbnQucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorZGhjcC1jbGllbnQ6IGZpeCBpbnZva2UgZGhjbGllbnQtc2NyaXB0IGZhaWxlZCBvbiBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0KKworSW4gcmVhZC1vbmx5IGZpbGUgc3lzdGVtLCAnL2V0YycgaXMgb24gdGhlIHJlYWRvbmx5IHBhcnRpdGlvbiwKK2FuZCAnL2V0Yy9yZXNvbHYuY29uZicgaXMgc3ltbGlua2VkIHRvIGEgc2VwYXJhdGUgd3JpdGFibGUKK3BhcnRpdGlvbi4KKworSW4gdGhpcyBzaXR1YXRpb24sIHdlIHNob3VsZCB1c2Ugc2hlbGwgdmFyaWFibGUgdG8gaW5zdGVhZCBvZgordGVtcCBmaWxlcyAnL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCcgYW5kICcvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY2xpZW50L3NjcmlwdHMvbGludXggfCAyMCArKysrKysrKystLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2xpZW50L3NjcmlwdHMvbGludXggYi9jbGllbnQvc2NyaXB0cy9saW51eAorLS0tIGEvY2xpZW50L3NjcmlwdHMvbGludXgKKysrKyBiL2NsaWVudC9zY3JpcHRzL2xpbnV4CitAQCAtMjcsMjcgKzI3LDI1IEBAIGlwPS9zYmluL2lwCisgCisgbWFrZV9yZXNvbHZfY29uZigpIHsKKyAgIGlmIFsgeCIkbmV3X2RvbWFpbl9uYW1lX3NlcnZlcnMiICE9IHggXTsgdGhlbgorLSAgICBjYXQgL2Rldi9udWxsID4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorLSAgICBjaG1vZCA2NDQgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICByZXNvbHZfY29uZj0iIgorICAgICBpZiBbIHgiJG5ld19kb21haW5fc2VhcmNoIiAhPSB4IF07IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAkbmV3X2RvbWFpbl9zZWFyY2ggPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZWxpZiBbIHgiJG5ld19kb21haW5fbmFtZSIgIT0geCBdOyB0aGVuCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIERIQ1AgJ0RvbWFpbiBOYW1lIE9wdGlvbicgaXMgcmVhbGx5IGp1c3QgYSBkb21haW4KKyAgICAgICAjIG5hbWUsIGFuZCB0aGF0IHRoaXMgcHJhY3RpY2Ugb2YgdXNpbmcgdGhlIGRvbWFpbiBuYW1lIG9wdGlvbiBhcworICAgICAgICMgYSBzZWFyY2ggcGF0aCBpcyBib3RoIG5vbnN0YW5kYXJkIGFuZCBkZXByZWNhdGVkLgorLSAgICAgIGVjaG8gc2VhcmNoICRuZXdfZG9tYWluX25hbWUgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudAorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZG9tYWluX25hbWV9XG4iCisgICAgIGZpCisgICAgIGZvciBuYW1lc2VydmVyIGluICRuZXdfZG9tYWluX25hbWVfc2VydmVyczsgZG8KKy0gICAgICBlY2hvIG5hbWVzZXJ2ZXIgJG5hbWVzZXJ2ZXIgPj4vZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50CisrICAgICAgcmVzb2x2X2NvbmY9IiR7cmVzb2x2X2NvbmZ9bmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9XG4iCisgICAgIGRvbmUKKyAKKy0gICAgbXYgL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudCAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGVsaWYgWyAieCR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30iICE9IHggXSA7IHRoZW4KKy0gICAgY2F0IC9kZXYvbnVsbCA+IC9ldGMvcmVzb2x2LmNvbmYuZGhjbGllbnQ2CistICAgIGNobW9kIDY0NCAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICByZXNvbHZfY29uZj0iIgorIAorICAgICBpZiBbICJ4JHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH0iICE9IHggXSA7IHRoZW4KKy0gICAgICBlY2hvIHNlYXJjaCAke25ld19kaGNwNl9kb21haW5fc2VhcmNofSA+PiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NgorKyAgICAgIHJlc29sdl9jb25mPSJzZWFyY2ggJHtuZXdfZGhjcDZfZG9tYWluX3NlYXJjaH1cbiIKKyAgICAgZmkKKyAgICAgc2hvcHQgLXMgbm9jYXNlbWF0Y2ggCisgICAgIGZvciBuYW1lc2VydmVyIGluICR7bmV3X2RoY3A2X25hbWVfc2VydmVyc30gOyBkbworQEAgLTU5LDExICs1NywxMSBAQCBtYWtlX3Jlc29sdl9jb25mKCkgeworICAgICAgIGVsc2UKKyAJem9uZV9pZD0KKyAgICAgICBmaQorLSAgICAgIGVjaG8gbmFtZXNlcnZlciAke25hbWVzZXJ2ZXJ9JHpvbmVfaWQgPj4gL2V0Yy9yZXNvbHYuY29uZi5kaGNsaWVudDYKKysgICAgICByZXNvbHZfY29uZj0iJHtyZXNvbHZfY29uZn1uYW1lc2VydmVyICR7bmFtZXNlcnZlcn0kem9uZV9pZFxuIgorICAgICBkb25lCisgICAgIHNob3B0IC11IG5vY2FzZW1hdGNoIAorIAorLSAgICBtdiAvZXRjL3Jlc29sdi5jb25mLmRoY2xpZW50NiAvZXRjL3Jlc29sdi5jb25mCisrICAgIGVjaG8gLWUgIiR7cmVzb2x2X2NvbmZ9IiA+IC9ldGMvcmVzb2x2LmNvbmYKKyAgIGZpCisgfQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2RoY3AtMy4wLjMtZGhjbGllbnQtZGJ1cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE2NjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZGhjcC0zLjAuMy1kaGNsaWVudC1kYnVzLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCistLS0gY2xpZW50L3NjcmlwdHMvYnNkb3MKKysrKyBjbGllbnQvc2NyaXB0cy9ic2RvcworQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvZnJlZWJzZAorKysrIGNsaWVudC9zY3JpcHRzL2ZyZWVic2QKK0BAIC01Nyw2ICs1NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL2xpbnV4CisrKysgY2xpZW50L3NjcmlwdHMvbGludXgKK0BAIC02OSw2ICs2OSwxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL25ldGJzZAorKysrIGNsaWVudC9zY3JpcHRzL25ldGJzZAorQEAgLTQ3LDYgKzQ3LDExIEBACisgICAgIC4gL2V0Yy9kaGNwL2RoY2xpZW50LWV4aXQtaG9va3MKKyAgIGZpCisgIyBwcm9iYWJseSBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggZXhpdCBzdGF0dXMgb2YgdGhlIGxvY2FsIHNjcmlwdAorKyAgaWYgWyB4JGRoY19kYnVzICE9IHggLWEgJGV4aXRfc3RhdHVzIC1lcSAwIF07IHRoZW4KKysgICAgZGJ1cy1zZW5kIC0tc3lzdGVtIC0tZGVzdD1jb20ucmVkaGF0LmRoY3AgXAorKyAgICAgIC0tdHlwZT1tZXRob2RfY2FsbCAvY29tL3JlZGhhdC9kaGNwLyRpbnRlcmZhY2UgY29tLnJlZGhhdC5kaGNwLnNldCBcCisrICAgICAgJ3N0cmluZzonImBlbnYgfCBncmVwIC1FdiAnXihQQVRIfFNITFZMfF98UFdEfGRoY19kYnVzKVw9J2AiCisrICBmaQorICAgZXhpdCAkZXhpdF9zdGF0dXMKKyB9CisgCistLS0gY2xpZW50L3NjcmlwdHMvb3BlbmJzZAorKysrIGNsaWVudC9zY3JpcHRzL29wZW5ic2QKK0BAIC00Nyw2ICs0NywxMSBAQAorICAgICAuIC9ldGMvZGhjcC9kaGNsaWVudC1leGl0LWhvb2tzCisgICBmaQorICMgcHJvYmFibHkgc2hvdWxkIGRvIHNvbWV0aGluZyB3aXRoIGV4aXQgc3RhdHVzIG9mIHRoZSBsb2NhbCBzY3JpcHQKKysgIGlmIFsgeCRkaGNfZGJ1cyAhPSB4IC1hICRleGl0X3N0YXR1cyAtZXEgMCBdOyB0aGVuCisrICAgIGRidXMtc2VuZCAtLXN5c3RlbSAtLWRlc3Q9Y29tLnJlZGhhdC5kaGNwIFwKKysgICAgICAtLXR5cGU9bWV0aG9kX2NhbGwgL2NvbS9yZWRoYXQvZGhjcC8kaW50ZXJmYWNlIGNvbS5yZWRoYXQuZGhjcC5zZXQgXAorKyAgICAgICdzdHJpbmc6JyJgZW52IHwgZ3JlcCAtRXYgJ14oUEFUSHxTSExWTHxffFBXRHxkaGNfZGJ1cylcPSdgIgorKyAgZmkKKyAgIGV4aXQgJGV4aXRfc3RhdHVzCisgfQorIAorLS0tIGNsaWVudC9zY3JpcHRzL3NvbGFyaXMKKysrKyBjbGllbnQvc2NyaXB0cy9zb2xhcmlzCitAQCAtNDcsNiArNDcsMTEgQEAKKyAgICAgLiAvZXRjL2RoY3AvZGhjbGllbnQtZXhpdC1ob29rcworICAgZmkKKyAjIHByb2JhYmx5IHNob3VsZCBkbyBzb21ldGhpbmcgd2l0aCBleGl0IHN0YXR1cyBvZiB0aGUgbG9jYWwgc2NyaXB0CisrICBpZiBbIHgkZGhjX2RidXMgIT0geCAtYSAkZXhpdF9zdGF0dXMgLWVxIDAgXTsgdGhlbgorKyAgICBkYnVzLXNlbmQgLS1zeXN0ZW0gLS1kZXN0PWNvbS5yZWRoYXQuZGhjcCBcCisrICAgICAgLS10eXBlPW1ldGhvZF9jYWxsIC9jb20vcmVkaGF0L2RoY3AvJGludGVyZmFjZSBjb20ucmVkaGF0LmRoY3Auc2V0IFwKKysgICAgICAnc3RyaW5nOiciYGVudiB8IGdyZXAgLUV2ICdeKFBBVEh8U0hMVkx8X3xQV0R8ZGhjX2RidXMpXD0nYCIKKysgIGZpCisgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvZml4LWV4dGVybmFsLWJpbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5MWZkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeC1leHRlcm5hbC1iaW5kLnBhdGNoCkBAIC0wLDAgKzEsMTEyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMTEvMzAvMjAxMAorLS13aXRoLWxpYmJpbmQ9UEFUSCBpcyBhdmFpbGFibGUgYnV0IG5vdCB1c2VkIGJ5IE1ha2VmaWxlLAordGhpcyBwYXRjaCBpcyB0byBhbGxvdyBidWlsZGluZyB3aXRoIGV4dGVybmFsIGJpbmQKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK0luZGV4OiBkaGNwLTQuMy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9NYWtlZmlsZS5hbQorQEAgLTI1LDcgKzI1LDcgQEAgRVhUUkFfRElTVCA9IFJFTE5PVEVTIExJQ0VOU0UgXAorIAkgICAgIGJpbmQvTWFrZWZpbGUgYmluZC9iaW5kLnRhci5neiBiaW5kL3ZlcnNpb24udG1wIFwKKyAJICAgICBjb21tb24vdGVzdHMvQXRmZmlsZSBzZXJ2ZXIvdGVzdHMvQXRmZmlsZQorIAorLVNVQkRJUlMgPSBiaW5kIGluY2x1ZGVzIHRlc3RzIGNvbW1vbiBkc3Qgb21hcGlwIGNsaWVudCBkaGNwY3RsIHJlbGF5IHNlcnZlcgorK1NVQkRJUlMgPSBpbmNsdWRlcyB0ZXN0cyBjb21tb24gZHN0IG9tYXBpcCBjbGllbnQgZGhjcGN0bCByZWxheSBzZXJ2ZXIKKyAKKyBub2Jhc2VfaW5jbHVkZV9IRUFERVJTID0gZGhjcGN0bC9kaGNwY3RsLmgKKyAKK0luZGV4OiBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9jbGllbnQvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL2NsaWVudC9NYWtlZmlsZS5hbQorQEAgLTQsOCArNCw4IEBAIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYworIAkJICAgc2NyaXB0cy9ic2RvcyBzY3JpcHRzL2ZyZWVic2Qgc2NyaXB0cy9saW51eCBzY3JpcHRzL21hY29zIFwKKyAJCSAgIHNjcmlwdHMvbmV0YnNkIHNjcmlwdHMvbmV4dHN0ZXAgc2NyaXB0cy9vcGVuYnNkIFwKKyAJCSAgIHNjcmlwdHMvc29sYXJpcyBzY3JpcHRzL29wZW53cnQKKy1kaGNsaWVudF9MREFERCA9IC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmRucy5hIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrZGhjbGllbnRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgXAorKwkJICQobGliYmluZCkvbGliZG5zLmEgJChsaWJiaW5kKS9saWJpc2NjZmcuYSAkKGxpYmJpbmQpL2xpYmlzYy5hCisgbWFuX01BTlMgPSBkaGNsaWVudC44IGRoY2xpZW50LXNjcmlwdC44IGRoY2xpZW50LmNvbmYuNSBkaGNsaWVudC5sZWFzZXMuNQorIEVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorIAorSW5kZXg6IGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGRoY3AtNC4zLjAvY29uZmlndXJlLmFjCitAQCAtNTY2LDYgKzU2Niw3IEBAIG5vKQorIAlsaWJiaW5kPSIkdXNlX2xpYmJpbmQiCisgCTs7CisgZXNhYworK0FDX1NVQlNUKFtsaWJiaW5kXSkKKyAKKyAjIE9wZW5MREFQIHN1cHBvcnQuCisgQUNfQVJHX1dJVEgobGRhcCwKK0luZGV4OiBkaGNwLTQuMy4wL2RoY3BjdGwvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMy4wLm9yaWcvZGhjcGN0bC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvZGhjcGN0bC9NYWtlZmlsZS5hbQorQEAgLTYsMTIgKzYsMTIgQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgb21zaGVsbF9TT1VSQ0VTID0gb21zaGVsbC5jCisgb21zaGVsbF9MREFERCA9IGxpYmRoY3BjdGwuYSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgICAuLi9iaW5kL2xpYi9saWJpcnMuYSAuLi9iaW5kL2xpYi9saWJkbnMuYSBcCistCSAgICAgICAgLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKysJICAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKwkgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorIAorIGxpYmRoY3BjdGxfYV9TT1VSQ0VTID0gZGhjcGN0bC5jIGNhbGxiYWNrLmMgcmVtb3RlLmMKKyAKKyBjbHRlc3RfU09VUkNFUyA9IGNsdGVzdC5jCisgY2x0ZXN0X0xEQUREID0gbGliZGhjcGN0bC5hIC4uL2NvbW1vbi9saWJkaGNwLmEgLi4vb21hcGlwL2xpYm9tYXBpLmEgXAorLQkgICAgICAgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLSAgICAgICAgICAgICAgIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCSAgICAgICAkKGxpYmJpbmQpL2xpYmlycy5hICQobGliYmluZCkvbGliZG5zLmEgXAorKyAgICAgICAgICAgICAgICQobGliYmluZCkvbGliaXNjY2ZnLmEgJChsaWJiaW5kKS9saWJpc2MuYQorSW5kZXg6IGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGRoY3AtNC4zLjAvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMTAsNiArMTAsNiBAQCBtYW5fTUFOUyA9IG9tYXBpLjMKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKKyBzdnRlc3RfU09VUkNFUyA9IHRlc3QuYworLXN2dGVzdF9MREFERCA9IGxpYm9tYXBpLmEgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJLi4vYmluZC9saWIvbGliaXNjY2ZnLmEgLi4vYmluZC9saWIvbGliaXNjLmEKKytzdnRlc3RfTERBREQgPSBsaWJvbWFwaS5hICQobGliYmluZCkvbGliaXJzLmEgJChsaWJiaW5kKS9saWJkbnMuYSBcCisrCQkkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3JlbGF5L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGhjcC00LjMuMC5vcmlnL3JlbGF5L01ha2VmaWxlLmFtCisrKysgZGhjcC00LjMuMC9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTMsOCArMyw4IEBAIEFNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3QKKyBzYmluX1BST0dSQU1TID0gZGhjcmVsYXkKKyBkaGNyZWxheV9TT1VSQ0VTID0gZGhjcmVsYXkuYworIGRoY3JlbGF5X0xEQUREID0gLi4vY29tbW9uL2xpYmRoY3AuYSAuLi9vbWFwaXAvbGlib21hcGkuYSBcCistCQkgLi4vYmluZC9saWIvbGliaXJzLmEgLi4vYmluZC9saWIvbGliZG5zLmEgXAorLQkJIC4uL2JpbmQvbGliL2xpYmlzY2NmZy5hIC4uL2JpbmQvbGliL2xpYmlzYy5hCisrCQkgJChsaWJiaW5kKS9saWJpcnMuYSAkKGxpYmJpbmQpL2xpYmRucy5hIFwKKysJCSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyBtYW5fTUFOUyA9IGRoY3JlbGF5LjgKKyBFWFRSQV9ESVNUID0gJChtYW5fTUFOUykKKyAKK0luZGV4OiBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRoY3AtNC4zLjAub3JpZy9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBkaGNwLTQuMy4wL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTE0LDggKzE0LDggQEAgZGhjcGRfU09VUkNFUyA9IGRoY3BkLmMgZGhjcC5jIGJvb3RwLmMgYworIAorIGRoY3BkX0NGTEFHUyA9ICQoTERBUF9DRkxBR1MpCisgZGhjcGRfTERBREQgPSAuLi9jb21tb24vbGliZGhjcC5hIC4uL29tYXBpcC9saWJvbWFwaS5hIFwKKy0JICAgICAgLi4vZGhjcGN0bC9saWJkaGNwY3RsLmEgLi4vYmluZC9saWIvbGliaXJzLmEgXAorLQkgICAgICAuLi9iaW5kL2xpYi9saWJkbnMuYSAuLi9iaW5kL2xpYi9saWJpc2NjZmcuYSAuLi9iaW5kL2xpYi9saWJpc2MuYQorKwkgICAgICAuLi9kaGNwY3RsL2xpYmRoY3BjdGwuYSAkKGxpYmJpbmQpL2xpYmlycy5hIFwKKysJICAgICAgJChsaWJiaW5kKS9saWJkbnMuYSAkKGxpYmJpbmQpL2xpYmlzY2NmZy5hICQobGliYmluZCkvbGliaXNjLmEKKyAKKyBtYW5fTUFOUyA9IGRoY3BkLjggZGhjcGQuY29uZi41IGRoY3BkLmxlYXNlcy41CisgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2ZpeHNlcGJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTc1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorRml4IG91dCBvZiB0cmVlIGJ1aWxkcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitSZWJhc2UgdG8gNC4zLjEKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNsaWVudC9NYWtlZmlsZS5hbSAgfCA2ICsrKystLQorIGNvbW1vbi9NYWtlZmlsZS5hbSAgfCAyICstCisgZGhjcGN0bC9NYWtlZmlsZS5hbSB8IDIgKysKKyBkc3QvTWFrZWZpbGUuYW0gICAgIHwgMiArLQorIG9tYXBpcC9NYWtlZmlsZS5hbSAgfCAyICsrCisgcmVsYXkvTWFrZWZpbGUuYW0gICB8IDIgKy0KKyBzZXJ2ZXIvTWFrZWZpbGUuYW0gIHwgMiArLQorIDcgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NsaWVudC9NYWtlZmlsZS5hbSBiL2NsaWVudC9NYWtlZmlsZS5hbQoraW5kZXggODQxMTk2MC4uMTc0MGY3MiAxMDA2NDQKKy0tLSBhL2NsaWVudC9NYWtlZmlsZS5hbQorKysrIGIvY2xpZW50L01ha2VmaWxlLmFtCitAQCAtNCw2ICs0LDggQEAKKyAjIHByb2R1Y3Rpb24gY29kZS4gU2FkbHksIHdlIGFyZSBub3QgdGhlcmUgeWV0LgorIFNVQkRJUlMgPSAuIHRlc3RzCisgCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMKKysKKyBkaXN0X3N5c2NvbmZfREFUQSA9IGRoY2xpZW50LmNvbmYuZXhhbXBsZQorIHNiaW5fUFJPR1JBTVMgPSBkaGNsaWVudAorIGRoY2xpZW50X1NPVVJDRVMgPSBjbHBhcnNlLmMgZGhjbGllbnQuYyBkaGM2LmMgXAorQEAgLTE3LDggKzE5LDggQEAgRVhUUkFfRElTVCA9ICQobWFuX01BTlMpCisgCisgZGhjbGllbnQubzogZGhjbGllbnQuYworIAkkKENPTVBJTEUpIC1EQ0xJRU5UX1BBVEg9JyJQQVRIPSQoc2JpbmRpcik6L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iJyBcCistCQkgICAtRExPQ0FMU1RBVEVESVI9JyIkKGxvY2Fsc3RhdGVkaXIpIicgLWMgZGhjbGllbnQuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGNsaWVudC5jCisgCisgZGhjNi5vOiBkaGM2LmMKKyAJJChDT01QSUxFKSAtRENMSUVOVF9QQVRIPSciUEFUSD0kKHNiaW5kaXIpOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluIicgXAorLQkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jIGRoYzYuYworKwkJICAgLURMT0NBTFNUQVRFRElSPSciJChsb2NhbHN0YXRlZGlyKSInIC1jICQoc3JjZGlyKS9kaGM2LmMKK2RpZmYgLS1naXQgYS9jb21tb24vTWFrZWZpbGUuYW0gYi9jb21tb24vTWFrZWZpbGUuYW0KK2luZGV4IGVkZGVmMDUuLjVjZTA0NWYgMTAwNjQ0CistLS0gYS9jb21tb24vTWFrZWZpbGUuYW0KKysrKyBiL2NvbW1vbi9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtSS4uIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZXMgLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInCisgQU1fQ0ZMQUdTID0gJChMREFQX0NGTEFHUykKKyAKKyBub2luc3RfTElCUkFSSUVTID0gbGliZGhjcC5hCitkaWZmIC0tZ2l0IGEvZGhjcGN0bC9NYWtlZmlsZS5hbSBiL2RoY3BjdGwvTWFrZWZpbGUuYW0KK2luZGV4IDI5ODdhNTMuLmNkNzJkNzUgMTAwNjQ0CistLS0gYS9kaGNwY3RsL01ha2VmaWxlLmFtCisrKysgYi9kaGNwY3RsL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcyAtSSQodG9wX3NyY2RpcikKKysKKyBiaW5fUFJPR1JBTVMgPSBvbXNoZWxsCisgbGliX0xJQlJBUklFUyA9IGxpYmRoY3BjdGwuYQorIG5vaW5zdF9QUk9HUkFNUyA9IGNsdGVzdAorZGlmZiAtLWdpdCBhL2RzdC9NYWtlZmlsZS5hbSBiL2RzdC9NYWtlZmlsZS5hbQoraW5kZXggODkzN2ZlOC4uYTE0Nzk4YiAxMDA2NDQKKy0tLSBhL2RzdC9NYWtlZmlsZS5hbQorKysrIGIvZHN0L01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1BTV9DUFBGTEFHUyA9IC1ETUlOSVJFU19MSUIgLURITUFDX01ENQorK0FNX0NQUEZMQUdTID0gLURNSU5JUkVTX0xJQiAtREhNQUNfTUQ1IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGxpYl9MSUJSQVJJRVMgPSBsaWJkc3QuYQorIAorZGlmZiAtLWdpdCBhL29tYXBpcC9NYWtlZmlsZS5hbSBiL29tYXBpcC9NYWtlZmlsZS5hbQoraW5kZXggNTA3NDQ3OS4uOWMwZmFiMyAxMDA2NDQKKy0tLSBhL29tYXBpcC9NYWtlZmlsZS5hbQorKysrIGIvb21hcGlwL01ha2VmaWxlLmFtCitAQCAtMSwzICsxLDUgQEAKKytBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworKworIGxpYl9MSUJSQVJJRVMgPSBsaWJvbWFwaS5hCisgbm9pbnN0X1BST0dSQU1TID0gc3Z0ZXN0CisgCitkaWZmIC0tZ2l0IGEvcmVsYXkvTWFrZWZpbGUuYW0gYi9yZWxheS9NYWtlZmlsZS5hbQoraW5kZXggZWM3MmEzMS4uZjg0MjA3MSAxMDA2NDQKKy0tLSBhL3JlbGF5L01ha2VmaWxlLmFtCisrKysgYi9yZWxheS9NYWtlZmlsZS5hbQorQEAgLTEsNCArMSw0IEBACistQU1fQ1BQRkxBR1MgPSAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLURMT0NBTFNUQVRFRElSPSciQGxvY2Fsc3RhdGVkaXJAIicgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGVzCisgCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3JlbGF5CisgZGhjcmVsYXlfU09VUkNFUyA9IGRoY3JlbGF5LmMKK2RpZmYgLS1naXQgYS9zZXJ2ZXIvTWFrZWZpbGUuYW0gYi9zZXJ2ZXIvTWFrZWZpbGUuYW0KK2luZGV4IGE0NDZmMGIuLmQwYjg3M2EgMTAwNjQ0CistLS0gYS9zZXJ2ZXIvTWFrZWZpbGUuYW0KKysrKyBiL3NlcnZlci9NYWtlZmlsZS5hbQorQEAgLTQsNyArNCw3IEBACisgIyBwcm9kdWN0aW9uIGNvZGUuIFNhZGx5LCB3ZSBhcmUgbm90IHRoZXJlIHlldC4KKyBTVUJESVJTID0gLiB0ZXN0cworIAorLUFNX0NQUEZMQUdTID0gLUkuLiAtRExPQ0FMU1RBVEVESVI9JyJAbG9jYWxzdGF0ZWRpckAiJworK0FNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpIC1ETE9DQUxTVEFURURJUj0nIkBsb2NhbHN0YXRlZGlyQCInIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlcworIAorIGRpc3Rfc3lzY29uZl9EQVRBID0gZGhjcGQuY29uZi5leGFtcGxlCisgc2Jpbl9QUk9HUkFNUyA9IGRoY3BkCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2RoY3AvbGluay13aXRoLWxjcnlwdG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlMTBiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL2xpbmstd2l0aC1sY3J5cHRvLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBUaHUgRmViIDIgMjM6NTk6MTEgMjAxMiArMDIwMAorCitGcm9tIDQuMi4wIGZpbmFsIHJlbGVhc2UsIC1sY3J5cHRvIGNoZWNrIHdhcyByZW1vdmVkIGFuZCB3ZSBjb21waWxlIHN0YXRpYyBsaWJyYXJpZXMKK2Zyb20gYmluZCB0aGF0IGFyZSBsaW5rZWQgdG8gbGliY3J5cHRvLiBUaGlzIGlzIHdoeSBpIGFkZGVkIGEgcGF0Y2ggaW4gb3JkZXIgdG8gYWRkCistbGNyeXB0byB0byBMSUJTLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRoY3AtNC4yLjMtUDItcjAvZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaGNwLTQuMi4zLVAyLm9yaWcvY29uZmlndXJlLmFjCTIwMTItMDItMDIgMTg6MDQ6MjAuODQzMDIzMTk2ICswMjAwCisrKysgZGhjcC00LjIuMy1QMi9jb25maWd1cmUuYWMJMjAxMi0wMi0wMiAxNzo1ODoxNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC00NTYsNiArNDU2LDEwIEBACisgIyBMb29rIGZvciBvcHRpb25hbCBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoc3lzL3NvY2tldC5oIG5ldC9pZl9kbC5oIG5ldC9pZjYuaCByZWdleC5oKQorIAorKyMgZmluZCBhbiBNRDUgbGlicmFyeQorK0FDX1NFQVJDSF9MSUJTKE1ENV9Jbml0LCBbY3J5cHRvXSkKKytBQ19TRUFSQ0hfTElCUyhNRDVJbml0LCBbY3J5cHRvXSkKKysKKyAjIFNvbGFyaXMgbmVlZHMgc29tZSBsaWJyYXJpZXMgZm9yIGZ1bmN0aW9ucworIEFDX1NFQVJDSF9MSUJTKHNvY2tldCwgW3NvY2tldF0pCisgQUNfU0VBUkNIX0xJQlMoaW5ldF9udG9hLCBbbnNsXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwL3JlcGxhY2UtaWZjb25maWctcm91dGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZGQ2YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcC9yZXBsYWNlLWlmY29uZmlnLXJvdXRlLnBhdGNoCkBAIC0wLDAgKzEsMTc2IEBACitGb3VuZCB0aGlzIHBhdGNoIGhlcmU6CitodHRwczovL2xpc3RzLmlzYy5vcmcvcGlwZXJtYWlsL2RoY3AtdXNlcnMvMjAxMS1KYW51YXJ5LzAxMjkxMC5odG1sCisKK2FuZCBtYWRlIHNvbWUgYWRqdXN0bWVudHMvdXBkYXRlcyB0byBtYWtlIGl0IHdvcmsgd2l0aCB0aGlzIHZlcnNpb24uCitXYXNuJ3QgYWJsZSB0byBmaW5kIHRoYXQgd2h5IHRoaXMgcGF0Y2ggd2FzIG5vdCBhY2NlcHRlZCBieSBJU0MgREhDUCBkZXZlbG9wZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTXVoYW1tYWQgU2hha2VlbCA8bXVoYW1tYWRfc2hha2VlbEBtZW50b3IuY29tPgorCistLS0gZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eC5vcmlnCTIwMTMtMDktMDQgMTI6MjI6NTUuMDAwMDAwMDAwICswNTAwCisrKysgZGhjcC00LjIuNS1QMS9jbGllbnQvc2NyaXB0cy9saW51eAkyMDEzLTA5LTA0IDEyOjUyOjE5LjA2ODc2MTUxOCArMDUwMAorQEAgLTEwMywxNyArMTAzLDExIEBACisgaWYgWyB4JG9sZF9icm9hZGNhc3RfYWRkcmVzcyAhPSB4IF07IHRoZW4KKyAgIG9sZF9icm9hZGNhc3RfYXJnPSJicm9hZGNhc3QgJG9sZF9icm9hZGNhc3RfYWRkcmVzcyIKKyBmaQorLWlmIFsgeCRuZXdfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBuZXdfc3VibmV0X2FyZz0ibmV0bWFzayAkbmV3X3N1Ym5ldF9tYXNrIgorLWZpCistaWYgWyB4JG9sZF9zdWJuZXRfbWFzayAhPSB4IF07IHRoZW4KKy0gIG9sZF9zdWJuZXRfYXJnPSJuZXRtYXNrICRvbGRfc3VibmV0X21hc2siCistZmkKKy1pZiBbIHgkYWxpYXNfc3VibmV0X21hc2sgIT0geCBdOyB0aGVuCistICBhbGlhc19zdWJuZXRfYXJnPSJuZXRtYXNrICRhbGlhc19zdWJuZXRfbWFzayIKKytpZiBbIC1uICIkbmV3X3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIG5ld19tYXNrPSIvJG5ld19zdWJuZXRfbWFzayIKKyBmaQorLWlmIFsgeCRuZXdfaW50ZXJmYWNlX210dSAhPSB4IF07IHRoZW4KKy0gIG10dV9hcmc9Im10dSAkbmV3X2ludGVyZmFjZV9tdHUiCisraWYgWyAtbiAiJGFsaWFzX3N1Ym5ldF9tYXNrIiBdOyB0aGVuCisrICAgIGFsaWFzX21hc2s9Ii8kYWxpYXNfc3VibmV0X21hc2siCisgZmkKKyBpZiBbIHgkSUZfTUVUUklDICE9IHggXTsgdGhlbgorICAgbWV0cmljX2FyZz0ibWV0cmljICRJRl9NRVRSSUMiCitAQCAtMTI3LDkgKzEyMSw5IEBACisgaWYgWyB4JHJlYXNvbiA9IHhQUkVJTklUIF07IHRoZW4KKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorICAgICAjIEJyaW5nIGRvd24gYWxpYXMgaW50ZXJmYWNlLiBJdHMgcm91dGVzIHdpbGwgZGlzYXBwZWFyIHRvby4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSAwIHVwCisrICAke2lwfSBsaW5rIHNldCBkZXYgJHtpbnRlcmZhY2V9IHVwCisgCisgICAjIFdlIG5lZWQgdG8gZ2l2ZSB0aGUga2VybmVsIHNvbWUgdGltZSB0byBnZXQgdGhlIGludGVyZmFjZSB1cC4KKyAgIHNsZWVwIDEKK0BAIC0xNTYsMjUgKzE1MCwzMCBAQAorICAgaWYgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHggXSAmJiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF0gJiYgXAorIAkJWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCRvbGRfaXBfYWRkcmVzcyBdOyB0aGVuCisgICAgICMgUG9zc2libGUgbmV3IGFsaWFzLiBSZW1vdmUgb2xkIGFsaWFzLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdICYmIFsgeCRvbGRfaXBfYWRkcmVzcyAhPSB4JG5ld19pcF9hZGRyZXNzIF07IHRoZW4KKyAgICAgIyBJUCBhZGRyZXNzIGNoYW5nZWQuIEJyaW5naW5nIGRvd24gdGhlIGludGVyZmFjZSB3aWxsIGRlbGV0ZSBhbGwgcm91dGVzLAorICAgICAjIGFuZCBjbGVhciB0aGUgQVJQIGNhY2hlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgMCBkb3duCisrICAgICR7aXB9IC00IGFkZHIgZmx1c2ggZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKyAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgPSB4IF0gfHwgWyB4JG9sZF9pcF9hZGRyZXNzICE9IHgkbmV3X2lwX2FkZHJlc3MgXSB8fCBcCisgICAgICBbIHgkcmVhc29uID0geEJPVU5EIF0gfHwgWyB4JHJlYXNvbiA9IHhSRUJPT1QgXTsgdGhlbgorIAorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgICAgIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9CisrICAgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAgICMgc2V0IE1UVQorKyAgICAgICR7aXB9IGxpbmsgc2V0IGRldiAke2ludGVyZmFjZX0gbXR1ICR7bmV3X2ludGVyZmFjZV9tdHV9CisrICAgIGZpCisgICAgICMgQWRkIGEgbmV0d29yayByb3V0ZSB0byB0aGUgY29tcHV0ZWQgbmV0d29yayBhZGRyZXNzLgorICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICBpZiBbICJ4JG5ld19zdWJuZXRfbWFzayIgPSAieDI1NS4yNTUuMjU1LjI1NSIgXSA7IHRoZW4KKy0Jcm91dGUgYWRkIC1ob3N0ICRyb3V0ZXIgZGV2ICRpbnRlcmZhY2UKKysgICAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke3JvdXRlcn0gZGV2ICRpbnRlcmZhY2UgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgZmkKKy0gICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkcm91dGVyICRtZXRyaWNfYXJnIGRldiAkaW50ZXJmYWNlCisrICAgICAgJHtpcH0gLTQgcm91dGUgYWRkIGRlZmF1bHQgdmlhICR7cm91dGVyfSBkZXYgJHtpbnRlcmZhY2V9IFwKKysgICAgICAgICR7bWV0cmljX2FyZ30gPi9kZXYvbnVsbCAyPiYxCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgIyB3ZSBoYXZlbid0IGNoYW5nZWQgdGhlIGFkZHJlc3MsIGhhdmUgd2UgY2hhbmdlZCBvdGhlciBvcHRpb25zICAgICAgICAgICAKK0BAIC0xODIsMjEgKzE4MSwyMyBAQAorICAgICBpZiBbIHgkbmV3X3JvdXRlcnMgIT0geCBdICYmIFsgeCRuZXdfcm91dGVycyAhPSB4JG9sZF9yb3V0ZXJzIF0gOyB0aGVuCisgICAgICAgIyBpZiB3ZSd2ZSBjaGFuZ2VkIHJvdXRlcnMgZGVsZXRlIHRoZSBvbGQgYW5kIGFkZCB0aGUgbmV3LgorICAgICAgIGZvciByb3V0ZXIgaW4gJG9sZF9yb3V0ZXJzOyBkbworLSAgICAgICAgcm91dGUgZGVsIGRlZmF1bHQgZ3cgJHJvdXRlcgorKyAgICAgICAgJHtpcH0gLTQgcm91dGUgZGVsZXRlIGRlZmF1bHQgdmlhICR7cm91dGVyfQorICAgICAgIGRvbmUKKyAgICAgICBmb3Igcm91dGVyIGluICRuZXdfcm91dGVyczsgZG8KKyAgICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQkgIHJvdXRlIGFkZCAtaG9zdCAkcm91dGVyIGRldiAkaW50ZXJmYWNlCistCWZpCistCXJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysJICAgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKysJICAgIGZpCisrICAgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgICAke21ldHJpY19hcmd9ID4vZGV2L251bGwgMj4mMQorICAgICAgIGRvbmUKKyAgICAgZmkKKyAgIGZpCisgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOworICAgIHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowIGluZXQgJGFsaWFzX2lwX2FkZHJlc3MgJGFsaWFzX3N1Ym5ldF9hcmcKKy0gICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzICRpbnRlcmZhY2U6MAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKysgICAgJHtpcH0gLTQgYWRkciBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSR7YWxpYXNfbWFza30gXAorKyAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAke2lwfSAtNCByb3V0ZSBhZGQgJHthbGlhc19pcF9hZGRyZXNzfSBkZXYgJHtpbnRlcmZhY2V9ID4vZGV2L251bGwgMj4mMQorICAgZmkKKyAgIG1ha2VfcmVzb2x2X2NvbmYKKyAgIGV4aXRfd2l0aF9ob29rcyAwCitAQCAtMjA2LDQyICsyMDcsNDkgQEAKKyAgICB8fCBbIHgkcmVhc29uID0geFNUT1AgXTsgdGhlbgorICAgaWYgWyB4JGFsaWFzX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgVHVybiBvZmYgYWxpYXMgaW50ZXJmYWNlLgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAtIGluZXQgMAorKyAgICAke2lwfSAtNCBhZGRyIGZsdXNoIGRldiAke2ludGVyZmFjZX0gbGFiZWwgJHtpbnRlcmZhY2V9OjAKKyAgIGZpCisgICBpZiBbIHgkb2xkX2lwX2FkZHJlc3MgIT0geCBdOyB0aGVuCisgICAgICMgU2h1dCBkb3duIGludGVyZmFjZSwgd2hpY2ggd2lsbCBkZWxldGUgcm91dGVzIGFuZCBjbGVhciBhcnAgY2FjaGUuCistICAgIGlmY29uZmlnICRpbnRlcmZhY2UgaW5ldCAwIGRvd24KKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfQorICAgZmkKKyAgIGlmIFsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICBpZmNvbmZpZyAkaW50ZXJmYWNlOjAgaW5ldCAkYWxpYXNfaXBfYWRkcmVzcyAkYWxpYXNfc3VibmV0X2FyZworLSAgICByb3V0ZSBhZGQgLWhvc3QgJGFsaWFzX2lwX2FkZHJlc3MgJGludGVyZmFjZTowCisrICAgICR7aXB9IC00IGFkZHIgYWRkICR7YWxpYXNfaXBfYWRkcmVzc30ke2FsaWFzX25ldHdvcmtfYXJnfSBcCisrICAgICAgICBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICBmaQorICAgZXhpdF93aXRoX2hvb2tzIDAKKyBmaQorIAorIGlmIFsgeCRyZWFzb24gPSB4VElNRU9VVCBdOyB0aGVuCisgICBpZiBbIHgkYWxpYXNfaXBfYWRkcmVzcyAhPSB4IF07IHRoZW4KKy0gICAgaWZjb25maWcgJGludGVyZmFjZTowLSBpbmV0IDAKKysgICAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9IGxhYmVsICR7aW50ZXJmYWNlfTowCisrICBmaQorKyAgJHtpcH0gLTQgYWRkciBhZGQgJHtuZXdfaXBfYWRkcmVzc30ke25ld19tYXNrfSAke25ld19icm9hZGNhc3RfYXJnfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX0KKysgIGlmIFsgLW4gIiRuZXdfaW50ZXJmYWNlX210dSIgXTsgdGhlbgorKyAgICAjIHNldCBNVFUKKysgICAgaXAgbGluayBzZXQgZGV2ICR7aW50ZXJmYWNlfSBtdHUgJHtuZXdfaW50ZXJmYWNlX210dX0KKyAgIGZpCistICBpZmNvbmZpZyAkaW50ZXJmYWNlIGluZXQgJG5ld19pcF9hZGRyZXNzICRuZXdfc3VibmV0X2FyZyBcCistCQkJCQkkbmV3X2Jyb2FkY2FzdF9hcmcgJG10dV9hcmcKKyAgIHNldCAkbmV3X3JvdXRlcnMKKyAgIGlmIHBpbmcgLXEgLWMgMSAkMTsgdGhlbgorICAgICBpZiBbIHgkbmV3X2lwX2FkZHJlc3MgIT0geCRhbGlhc19pcF9hZGRyZXNzIF0gJiYgXAorIAkJCVsgeCRhbGlhc19pcF9hZGRyZXNzICE9IHggXTsgdGhlbgorLSAgICAgIGlmY29uZmlnICRpbnRlcmZhY2U6MCBpbmV0ICRhbGlhc19pcF9hZGRyZXNzICRhbGlhc19zdWJuZXRfYXJnCistICAgICAgcm91dGUgYWRkIC1ob3N0ICRhbGlhc19pcF9hZGRyZXNzIGRldiAkaW50ZXJmYWNlOjAKKysgICAgICAke2lwfSAtNCBhZGRyIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9JHthbGlhc19tYXNrfSBcCisrICAgICAgICAgICAgZGV2ICR7aW50ZXJmYWNlfSBsYWJlbCAke2ludGVyZmFjZX06MAorKyAgICAgICR7aXB9IC00IHJvdXRlIGFkZCAke2FsaWFzX2lwX2FkZHJlc3N9IGRldiAke2ludGVyZmFjZX0gPi9kZXYvbnVsbCAyPiYxCisgICAgIGZpCisgICAgIGZvciByb3V0ZXIgaW4gJG5ld19yb3V0ZXJzOyBkbworICAgICAgIGlmIFsgIngkbmV3X3N1Ym5ldF9tYXNrIiA9ICJ4MjU1LjI1NS4yNTUuMjU1IiBdIDsgdGhlbgorLQlyb3V0ZSBhZGQgLWhvc3QgJHJvdXRlciBkZXYgJGludGVyZmFjZQorKwkgICAgJHtpcH0gLTQgcm91dGUgYWRkICR7cm91dGVyfSBkZXYgJGludGVyZmFjZSA+L2Rldi9udWxsIDI+JjEKKyAgICAgICBmaQorLSAgICAgIHJvdXRlIGFkZCBkZWZhdWx0IGd3ICRyb3V0ZXIgJG1ldHJpY19hcmcgZGV2ICRpbnRlcmZhY2UKKysgICAgICAke2lwfSAtNCByb3V0ZSBhZGQgZGVmYXVsdCB2aWEgJHtyb3V0ZXJ9IGRldiAke2ludGVyZmFjZX0gXAorKyAgICAgICAgJHttZXRyaWNfYXJnfSA+L2Rldi9udWxsIDI+JjEKKyAgICAgZG9uZQorICAgICBtYWtlX3Jlc29sdl9jb25mCisgICAgIGV4aXRfd2l0aF9ob29rcyAwCisgICBmaQorLSAgaWZjb25maWcgJGludGVyZmFjZSBpbmV0IDAgZG93bgorKyAgJHtpcH0gLTQgYWRkciBmbHVzaCBkZXYgJHtpbnRlcmZhY2V9CisgICBleGl0X3dpdGhfaG9va3MgMQorIGZpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9kaGNwXzQuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YTA1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZGhjcF80LjMuMi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGRoY3AuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaGNwLTMuMC4zLWRoY2xpZW50LWRidXMucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZXh0ZXJuYWwtYmluZC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGluay13aXRoLWxjcnlwdG8ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kaGNsaWVudC1zY3JpcHQtZHJvcC1yZXNvbHYuY29uZi5kaGNsaWVudC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVwbGFjZS1pZmNvbmZpZy1yb3V0ZS5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjVhMjg0ODc1ZGQyYzEyZGRkMzg4NDE2ZDY5MTU2YTY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYyNDZjOWIzNTg3NTlmNmNkY2M0NTEwNGNhYWY3NmU3MzJhMjExZGJiYmJmNjRhMjFmNDk5YzhkYjEyOTgxNjUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXJlbGF5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NjFmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1yZWxheQpAQCAtMCwwICsxLDEyIEBACisjIERlZmF1bHRzIGZvciBkaGNwLXJlbGF5IGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaGNwLXJlbGF5CisKKyMgV2hhdCBzZXJ2ZXJzIHNob3VsZCB0aGUgREhDUCByZWxheSBmb3J3YXJkIHJlcXVlc3RzIHRvPworIyBlLmc6IFNFUlZFUlM9IjE5Mi4xNjguMC4xIgorU0VSVkVSUz0iIgorCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1AgcmVsYXkgKGRocmVsYXkpIHNlcnZlIERIQ1AgcmVxdWVzdHM/CitJTlRFUkZBQ0VTPSIiCisKKyMgQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUgREhDUCByZWxheSBkYWVtb24/CitPUFRJT05TPSIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1zZXJ2ZXIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGVmYXVsdC1zZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4NWQxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kZWZhdWx0LXNlcnZlcgpAQCAtMCwwICsxLDcgQEAKKyMgRGVmYXVsdHMgZm9yIGRoY3AgaW5pdHNjcmlwdAorIyBzb3VyY2VkIGJ5IC9ldGMvaW5pdC5kL2RoY3Atc2VydmVyCisjIGluc3RhbGxlZCBhdCAvZXRjL2RlZmF1bHQvZGhjcC1zZXJ2ZXIgYnkgdGhlIG1haW50YWluZXIgc2NyaXB0cworCisjIE9uIHdoYXQgaW50ZXJmYWNlcyBzaG91bGQgdGhlIERIQ1Agc2VydmVyIChkaGNwZCkgc2VydmUgREhDUCByZXF1ZXN0cz8KKyMgICAgICAgU2VwYXJhdGUgbXVsdGlwbGUgaW50ZXJmYWNlcyB3aXRoIHNwYWNlcywgZS5nLiAiZXRoMCBldGgxIi4KK0lOVEVSRkFDRVM9IiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY2xpZW50LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2ZGNmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNsaWVudC5jb25mCkBAIC0wLDAgKzEsNTAgQEAKKyMgQ29uZmlndXJhdGlvbiBmaWxlIGZvciAvc2Jpbi9kaGNsaWVudCwgd2hpY2ggaXMgaW5jbHVkZWQgaW4gRGViaWFuJ3MKKyMJZGhjcDMtY2xpZW50IHBhY2thZ2UuCisjCisjIFRoaXMgaXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlIGZvciBkaGNsaWVudC4gU2VlIGRoY2xpZW50LmNvbmYncworIwltYW4gcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ludGF4IG9mIHRoaXMgZmlsZQorIwlhbmQgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdCBvZiB0aGUgcGFyYW1ldGVycyB1bmRlcnN0b29kIGJ5CisjCWRoY2xpZW50LgorIworIyBOb3JtYWxseSwgaWYgdGhlIERIQ1Agc2VydmVyIHByb3ZpZGVzIHJlYXNvbmFibGUgaW5mb3JtYXRpb24gYW5kIGRvZXMKKyMJbm90IGxlYXZlIGFueXRoaW5nIG91dCAobGlrZSB0aGUgZG9tYWluIG5hbWUsIGZvciBleGFtcGxlKSwgdGhlbgorIwlmZXcgY2hhbmdlcyBtdXN0IGJlIG1hZGUgdG8gdGhpcyBmaWxlLCBpZiBhbnkuCisjCisKKyNzZW5kIGhvc3QtbmFtZSAiYW5kYXJlLmZ1Z3VlLmNvbSI7Cisjc2VuZCBkaGNwLWNsaWVudC1pZGVudGlmaWVyIDE6MDphMDoyNDphYjpmYjo5YzsKKyNzZW5kIGRoY3AtbGVhc2UtdGltZSAzNjAwOworI3N1cGVyc2VkZSBkb21haW4tbmFtZSAiZnVndWUuY29tIGhvbWUudml4LmNvbSI7CisjcHJlcGVuZCBkb21haW4tbmFtZS1zZXJ2ZXJzIDEyNy4wLjAuMTsKK3JlcXVlc3Qgc3VibmV0LW1hc2ssIGJyb2FkY2FzdC1hZGRyZXNzLCB0aW1lLW9mZnNldCwgcm91dGVycywKKwlkb21haW4tbmFtZSwgZG9tYWluLW5hbWUtc2VydmVycywgaG9zdC1uYW1lLAorCW5ldGJpb3MtbmFtZS1zZXJ2ZXJzLCBuZXRiaW9zLXNjb3BlOworI3JlcXVpcmUgc3VibmV0LW1hc2ssIGRvbWFpbi1uYW1lLXNlcnZlcnM7CisjdGltZW91dCA2MDsKKyNyZXRyeSA2MDsKKyNyZWJvb3QgMTA7Cisjc2VsZWN0LXRpbWVvdXQgNTsKKyNpbml0aWFsLWludGVydmFsIDI7Cisjc2NyaXB0ICIvZXRjL2RoY3AzL2RoY2xpZW50LXNjcmlwdCI7CisjbWVkaWEgIi1saW5rMCAtbGluazEgLWxpbmsyIiwgImxpbmswIGxpbmsxIjsKKyNyZWplY3QgMTkyLjMzLjEzNy4yMDk7CisKKyNhbGlhcyB7CisjICBpbnRlcmZhY2UgImV0aDAiOworIyAgZml4ZWQtYWRkcmVzcyAxOTIuNS41LjIxMzsKKyMgIG9wdGlvbiBzdWJuZXQtbWFzayAyNTUuMjU1LjI1NS4yNTU7CisjfQorCisjbGVhc2UgeworIyAgaW50ZXJmYWNlICJldGgwIjsKKyMgIGZpeGVkLWFkZHJlc3MgMTkyLjMzLjEzNy4yMDA7CisjICBtZWRpdW0gImxpbmswIGxpbmsxIjsKKyMgIG9wdGlvbiBob3N0LW5hbWUgImFuZGFyZS5zd2lmdG1lZGlhLmNvbSI7CisjICBvcHRpb24gc3VibmV0LW1hc2sgMjU1LjI1NS4yNTUuMDsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxOTIuMzMuMTM3LjI1NTsKKyMgIG9wdGlvbiByb3V0ZXJzIDE5Mi4zMy4xMzcuMjUwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgMTI3LjAuMC4xOworIyAgcmVuZXcgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICByZWJpbmQgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjICBleHBpcmUgMiAyMDAwLzEvMTIgMDA6MDA6MDE7CisjfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDAxYzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLmNvbmYKQEAgLTAsMCArMSwxMDggQEAKKyMKKyMgU2FtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgSVNDIGRoY3BkIGZvciBEZWJpYW4KKyMKKyMgJElkOiBkaGNwZC5jb25mLHYgMS4xLjEuMSAyMDAyLzA1LzIxIDAwOjA3OjQ0IHBlbG95IEV4cCAkCisjCisKKyMgVGhlIGRkbnMtdXBkYXRlcy1zdHlsZSBwYXJhbWV0ZXIgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHNlcnZlciB3aWxsCisjIGF0dGVtcHQgdG8gZG8gYSBETlMgdXBkYXRlIHdoZW4gYSBsZWFzZSBpcyBjb25maXJtZWQuIFdlIGRlZmF1bHQgdG8gdGhlCisjIGJlaGF2aW9yIG9mIHRoZSB2ZXJzaW9uIDIgcGFja2FnZXMgKCdub25lJywgc2luY2UgREhDUCB2MiBkaWRuJ3QKKyMgaGF2ZSBzdXBwb3J0IGZvciBERE5TLikKK2RkbnMtdXBkYXRlLXN0eWxlIG5vbmU7CisKKyMgb3B0aW9uIGRlZmluaXRpb25zIGNvbW1vbiB0byBhbGwgc3VwcG9ydGVkIG5ldHdvcmtzLi4uCitvcHRpb24gZG9tYWluLW5hbWUgImV4YW1wbGUub3JnIjsKK29wdGlvbiBkb21haW4tbmFtZS1zZXJ2ZXJzIG5zMS5leGFtcGxlLm9yZywgbnMyLmV4YW1wbGUub3JnOworCitkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworbWF4LWxlYXNlLXRpbWUgNzIwMDsKKworIyBJZiB0aGlzIERIQ1Agc2VydmVyIGlzIHRoZSBvZmZpY2lhbCBESENQIHNlcnZlciBmb3IgdGhlIGxvY2FsCisjIG5ldHdvcmssIHRoZSBhdXRob3JpdGF0aXZlIGRpcmVjdGl2ZSBzaG91bGQgYmUgdW5jb21tZW50ZWQuCisjYXV0aG9yaXRhdGl2ZTsKKworIyBVc2UgdGhpcyB0byBzZW5kIGRoY3AgbG9nIG1lc3NhZ2VzIHRvIGEgZGlmZmVyZW50IGxvZyBmaWxlICh5b3UgYWxzbworIyBoYXZlIHRvIGhhY2sgc3lzbG9nLmNvbmYgdG8gY29tcGxldGUgdGhlIHJlZGlyZWN0aW9uKS4KK2xvZy1mYWNpbGl0eSBsb2NhbDc7CisKKyMgTm8gc2VydmljZSB3aWxsIGJlIGdpdmVuIG9uIHRoaXMgc3VibmV0LCBidXQgZGVjbGFyaW5nIGl0IGhlbHBzIHRoZSAKKyMgREhDUCBzZXJ2ZXIgdG8gdW5kZXJzdGFuZCB0aGUgbmV0d29yayB0b3BvbG9neS4KKworI3N1Ym5ldCAxMC4xNTIuMTg3LjAgbmV0bWFzayAyNTUuMjU1LjI1NS4wIHsKKyN9CisKKyMgVGhpcyBpcyBhIHZlcnkgYmFzaWMgc3VibmV0IGRlY2xhcmF0aW9uLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC4yNTQuMjM5LjEwIDEwLjI1NC4yMzkuMjA7CisjICBvcHRpb24gcm91dGVycyBydHItMjM5LTAtMS5leGFtcGxlLm9yZywgcnRyLTIzOS0wLTIuZXhhbXBsZS5vcmc7CisjfQorCisjIFRoaXMgZGVjbGFyYXRpb24gYWxsb3dzIEJPT1RQIGNsaWVudHMgdG8gZ2V0IGR5bmFtaWMgYWRkcmVzc2VzLAorIyB3aGljaCB3ZSBkb24ndCByZWFsbHkgcmVjb21tZW5kLgorCisjc3VibmV0IDEwLjI1NC4yMzkuMzIgbmV0bWFzayAyNTUuMjU1LjI1NS4yMjQgeworIyAgcmFuZ2UgZHluYW1pYy1ib290cCAxMC4yNTQuMjM5LjQwIDEwLjI1NC4yMzkuNjA7CisjICBvcHRpb24gYnJvYWRjYXN0LWFkZHJlc3MgMTAuMjU0LjIzOS4zMTsKKyMgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMzktMzItMS5leGFtcGxlLm9yZzsKKyN9CisKKyMgQSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBmb3IgYW4gaW50ZXJuYWwgc3VibmV0LgorI3N1Ym5ldCAxMC41LjUuMCBuZXRtYXNrIDI1NS4yNTUuMjU1LjIyNCB7CisjICByYW5nZSAxMC41LjUuMjYgMTAuNS41LjMwOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lLXNlcnZlcnMgbnMxLmludGVybmFsLmV4YW1wbGUub3JnOworIyAgb3B0aW9uIGRvbWFpbi1uYW1lICJpbnRlcm5hbC5leGFtcGxlLm9yZyI7CisjICBvcHRpb24gcm91dGVycyAxMC41LjUuMTsKKyMgIG9wdGlvbiBicm9hZGNhc3QtYWRkcmVzcyAxMC41LjUuMzE7CisjICBkZWZhdWx0LWxlYXNlLXRpbWUgNjAwOworIyAgbWF4LWxlYXNlLXRpbWUgNzIwMDsKKyN9CisKKyMgSG9zdHMgd2hpY2ggcmVxdWlyZSBzcGVjaWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjYW4gYmUgbGlzdGVkIGluCisjIGhvc3Qgc3RhdGVtZW50cy4gICBJZiBubyBhZGRyZXNzIGlzIHNwZWNpZmllZCwgdGhlIGFkZHJlc3Mgd2lsbCBiZQorIyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKGlmIHBvc3NpYmxlKSwgYnV0IHRoZSBob3N0LXNwZWNpZmljIGluZm9ybWF0aW9uCisjIHdpbGwgc3RpbGwgY29tZSBmcm9tIHRoZSBob3N0IGRlY2xhcmF0aW9uLgorCisjaG9zdCBwYXNzYWNhZ2xpYSB7CisjICBoYXJkd2FyZSBldGhlcm5ldCAwOjA6YzA6NWQ6YmQ6OTU7CisjICBmaWxlbmFtZSAidm11bml4LnBhc3NhY2FnbGlhIjsKKyMgIHNlcnZlci1uYW1lICJ0b2NjYXRhLmZ1Z3VlLmNvbSI7CisjfQorCisjIEZpeGVkIElQIGFkZHJlc3NlcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgZm9yIGhvc3RzLiAgIFRoZXNlIGFkZHJlc3NlcworIyBzaG91bGQgbm90IGFsc28gYmUgbGlzdGVkIGFzIGJlaW5nIGF2YWlsYWJsZSBmb3IgZHluYW1pYyBhc3NpZ25tZW50LgorIyBIb3N0cyBmb3Igd2hpY2ggZml4ZWQgSVAgYWRkcmVzc2VzIGhhdmUgYmVlbiBzcGVjaWZpZWQgY2FuIGJvb3QgdXNpbmcKKyMgQk9PVFAgb3IgREhDUC4gICBIb3N0cyBmb3Igd2hpY2ggbm8gZml4ZWQgYWRkcmVzcyBpcyBzcGVjaWZpZWQgY2FuIG9ubHkKKyMgYmUgYm9vdGVkIHdpdGggREhDUCwgdW5sZXNzIHRoZXJlIGlzIGFuIGFkZHJlc3MgcmFuZ2Ugb24gdGhlIHN1Ym5ldAorIyB0byB3aGljaCBhIEJPT1RQIGNsaWVudCBpcyBjb25uZWN0ZWQgd2hpY2ggaGFzIHRoZSBkeW5hbWljLWJvb3RwIGZsYWcKKyMgc2V0LgorI2hvc3QgZmFudGFzaWEgeworIyAgaGFyZHdhcmUgZXRoZXJuZXQgMDg6MDA6MDc6MjY6YzA6YTU7CisjICBmaXhlZC1hZGRyZXNzIGZhbnRhc2lhLmZ1Z3VlLmNvbTsKKyN9CisKKyMgWW91IGNhbiBkZWNsYXJlIGEgY2xhc3Mgb2YgY2xpZW50cyBhbmQgdGhlbiBkbyBhZGRyZXNzIGFsbG9jYXRpb24KKyMgYmFzZWQgb24gdGhhdC4gICBUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBhIGNhc2Ugd2hlcmUgYWxsIGNsaWVudHMKKyMgaW4gYSBjZXJ0YWluIGNsYXNzIGdldCBhZGRyZXNzZXMgb24gdGhlIDEwLjE3LjIyNC8yNCBzdWJuZXQsIGFuZCBhbGwKKyMgb3RoZXIgY2xpZW50cyBnZXQgYWRkcmVzc2VzIG9uIHRoZSAxMC4wLjI5LzI0IHN1Ym5ldC4KKworI2NsYXNzICJmb28iIHsKKyMgIG1hdGNoIGlmIHN1YnN0cmluZyAob3B0aW9uIHZlbmRvci1jbGFzcy1pZGVudGlmaWVyLCAwLCA0KSA9ICJTVU5XIjsKKyN9CisKKyNzaGFyZWQtbmV0d29yayAyMjQtMjkgeworIyAgc3VibmV0IDEwLjE3LjIyNC4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yMjQuZXhhbXBsZS5vcmc7CisjICB9CisjICBzdWJuZXQgMTAuMC4yOS4wIG5ldG1hc2sgMjU1LjI1NS4yNTUuMCB7CisjICAgIG9wdGlvbiByb3V0ZXJzIHJ0ci0yOS5leGFtcGxlLm9yZzsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBhbGxvdyBtZW1iZXJzIG9mICJmb28iOworIyAgICByYW5nZSAxMC4xNy4yMjQuMTAgMTAuMTcuMjI0LjI1MDsKKyMgIH0KKyMgIHBvb2wgeworIyAgICBkZW55IG1lbWJlcnMgb2YgImZvbyI7CisjICAgIHJhbmdlIDEwLjAuMjkuMTAgMTAuMC4yOS4yMzA7CisjICB9CisjfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTRmOTNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkLnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjQgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkLnBpZAorRW52aXJvbm1lbnRGaWxlPUBTWVNDT05GRElSQC9kZWZhdWx0L2RoY3Atc2VydmVyCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9zeXNjb25maWcvZGhjcC1zZXJ2ZXIKK0V4ZWNTdGFydFByZT1AYmFzZV9iaW5kaXJAL3RvdWNoIEBsb2NhbHN0YXRlZGlyQC9saWIvZGhjcC9kaGNwZC5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQucGlkICRESENQREFSR1MgLXEgJElOVEVSRkFDRVMKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkNi5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3BkNi5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhOTZhYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2RoY3AvZmlsZXMvZGhjcGQ2LnNlcnZpY2UKQEAgLTAsMCArMSwxNSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQdjYgU2VydmVyIERhZW1vbgorRG9jdW1lbnRhdGlvbj1tYW46ZGhjcGQoOCkgbWFuOmRoY3BkLmNvbmYoNSkKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CitBZnRlcj10aW1lLXN5bmMudGFyZ2V0CisKK1tTZXJ2aWNlXQorUElERmlsZT1AbG9jYWxzdGF0ZWRpckAvcnVuL2RoY3BkNi5waWQKK0Vudmlyb25tZW50RmlsZT1AU1lTQ09ORkRJUkAvZGVmYXVsdC9kaGNwLXNlcnZlcgorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvc3lzY29uZmlnL2RoY3BkNgorRXhlY1N0YXJ0UHJlPUBiYXNlX2JpbmRpckAvdG91Y2ggQGxvY2Fsc3RhdGVkaXJAL2xpYi9kaGNwL2RoY3BkNi5sZWFzZXMKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZGhjcGQgLWYgLTYgLWNmIEBTWVNDT05GRElSQC9kaGNwL2RoY3BkLmNvbmYgLXBmIEBsb2NhbHN0YXRlZGlyQC9ydW4vZGhjcGQ2LnBpZCAkREhDUERBUkdTIC1xICRJTlRFUkZBQ0VTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2RoY3JlbGF5LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkODE4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9kaGNyZWxheS5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1ESENQIFJlbGF5IEFnZW50IERhZW1vbgorQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2RoY3JlbGF5IC1kIC0tbm8tcGlkCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtcmVsYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5YTdlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXJlbGF5CkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXJlbGF5LHYgMS4xIDIwMDQvMDQvMTYgMTU6NDE6MDggbWwgRXhwICQKKyMKKworIyBJdCBpcyBub3Qgc2FmZSB0byBzdGFydCBpZiB3ZSBkb24ndCBoYXZlIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLi4uCitpZiBbICEgLWYgL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkgXTsgdGhlbgorCWVjaG8gIi9ldGMvZGVmYXVsdC9kaGNwLXJlbGF5IGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWVjaG8gImNyZWF0ZSB0aGlzIGZpbGUgdG8gZml4IHRoZSBwcm9ibGVtLiIKKwlleGl0IDEKK2ZpCisKKyMgUmVhZCBpbml0IHNjcmlwdCBjb25maWd1cmF0aW9uIChpbnRlcmZhY2VzIHRoZSBkYWVtb24gc2hvdWxkIGxpc3RlbiBvbgorIyBhbmQgdGhlIERIQ1Agc2VydmVyIHdlIHNob3VsZCBmb3J3YXJkIHJlcXVlc3RzIHRvLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3AtcmVsYXkKKworIyBCdWlsZCBjb21tYW5kIGxpbmUgZm9yIGludGVyZmFjZXMgKHdpbGwgYmUgcGFzc2VkIHRvIGRocmVsYXkgYmVsb3cuKQorSUZDTUQ9IiIKK2lmIHRlc3QgIiRJTlRFUkZBQ0VTIiAhPSAiIjsgdGhlbgorCWZvciBJIGluICRJTlRFUkZBQ0VTOyBkbworCQlJRkNNRD0ke0lGQ01EfSItaSAiJHtJfSIgIgorCWRvbmUKK2ZpCisKK0RIQ1JFTEFZUElEPS92YXIvcnVuL2RoY3JlbGF5LnBpZAorCitjYXNlICIkMSIgaW4KKwlzdGFydCkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2RoY3JlbGF5IC0tIC1xICRPUFRJT05TICRJRkNNRCAkU0VSVkVSUworCQk7OworCXN0b3ApCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNyZWxheQorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXJlbGF5IHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIKKwkJZXhpdCAxIAorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXNlcnZlciBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvZGhjcC9maWxlcy9pbml0LXNlcnZlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGMyMDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9kaGNwL2ZpbGVzL2luaXQtc2VydmVyCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGRoY3AzLXNlcnZlci5pbml0LmQsdiAxLjQgMjAwMy8wNy8xMyAxOToxMjo0MSBtZHogRXhwICQKKyMKKwordGVzdCAtZiAvdXNyL3NiaW4vZGhjcGQgfHwgZXhpdCAwCisKKyMgSXQgaXMgbm90IHNhZmUgdG8gc3RhcnQgaWYgd2UgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbi4uLgoraWYgWyAhIC1mIC9ldGMvZGVmYXVsdC9kaGNwLXNlcnZlciBdOyB0aGVuCisJZWNobyAiL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyIGRvZXMgbm90IGV4aXN0ISAtIEFib3J0aW5nLi4uIgorCWV4aXQgMAorZmkKKworIyBSZWFkIGluaXQgc2NyaXB0IGNvbmZpZ3VyYXRpb24gKHNvIGZhciBvbmx5IGludGVyZmFjZXMgdGhlIGRhZW1vbgorIyBzaG91bGQgbGlzdGVuIG9uLikKKy4gL2V0Yy9kZWZhdWx0L2RoY3Atc2VydmVyCisKK2Nhc2UgIiQxIiBpbgorCXN0YXJ0KQorCQllY2hvIC1uICJTdGFydGluZyBESENQIHNlcnZlcjogIgorCQl0ZXN0IC1kIC92YXIvbGliL2RoY3AvIHx8IG1rZGlyIC1wIC92YXIvbGliL2RoY3AvCisJCXRlc3QgLWYgL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMgfHwgdG91Y2ggL3Zhci9saWIvZGhjcC9kaGNwZC5sZWFzZXMJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC14IC91c3Ivc2Jpbi9kaGNwZCAtLSAtcSAkSU5URVJGQUNFUworCQllY2hvICIuIgorCQk7OworCXN0b3ApCisJCWVjaG8gLW4gIlN0b3BwaW5nIERIQ1Agc2VydmVyOiBkaGNwZDMiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14IC91c3Ivc2Jpbi9kaGNwZAorCQllY2hvICIuIgorCQk7OworCXJlc3RhcnQgfCBmb3JjZS1yZWxvYWQpCisJCSQwIHN0b3AKKwkJc2xlZXAgMgorCQkkMCBzdGFydAorCQlpZiBbICIkPyIgIT0gIjAiIF07IHRoZW4KKwkJCWV4aXQgMQorCQlmaQorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9kaGNwLXNlcnZlciB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iCisJCWV4aXQgMSAKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1M2E0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLmluYwpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlRDUCAvIElQIG5ldHdvcmtpbmcgYW5kIHRyYWZmaWMgY29udHJvbCB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJJcHJvdXRlMiBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIGZvciBjb250cm9sbGluZyBcCitUQ1AgLyBJUCBuZXR3b3JraW5nIGFuZCB0cmFmZmljIGNvbnRyb2wgaW4gTGludXguICBPZiB0aGUgdXRpbGl0aWVzIGlwIFwKK2FuZCB0YyBhcmUgdGhlIG1vc3QgaW1wb3J0YW50LiAgaXAgY29udHJvbHMgSVB2NCBhbmQgSVB2NiBcCitjb25maWd1cmF0aW9uIGFuZCB0YyBzdGFuZHMgZm9yIHRyYWZmaWMgY29udHJvbC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpbnV4Zm91bmRhdGlvbi5vcmcvY29sbGFib3JhdGUvd29ya2dyb3Vwcy9uZXR3b3JraW5nL2lwcm91dGUyIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pcC9pcC5jO2JlZ2lubGluZT0zO2VuZGxpbmU9ODttZDU9Njg5ZDY5MWQwNDEwYTRiNjRkMzg5OWY4ZDZlMzE4MTciCisKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGlwdGFibGVzIGVsZnV0aWxzIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VNQUtFID0gIkNDPScke0NDfScgS0VSTkVMX0lOQ0xVREU9JHtTVEFHSU5HX0lOQ0RJUn0gRE9DRElSPSR7ZG9jZGlyfS9pcHJvdXRlMiBTVUJESVJTPSdsaWIgdGMgaXAnIFNCSU5ESVI9JyR7YmFzZV9zYmluZGlyfScgTElCRElSPScke2xpYmRpcn0nIgorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisgICAgbXYgJHtEfSR7YmFzZV9zYmluZGlyfS9pcCAke0R9JHtiYXNlX3NiaW5kaXJ9L2lwLmlwcm91dGUyCisgICAgaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfQorICAgIG12ICR7RH0vc2hhcmUvKiAke0R9JHtkYXRhZGlyfS8gfHwgdHJ1ZQorICAgIHJtICR7RH0vc2hhcmUgLXJmIHx8IHRydWUKK30KKworIyBUaGUgLnNvIGZpbGVzIGluIGlwcm91dGUyLXRjIGFyZSBtb2R1bGVzLCBub3QgdHJhZGl0aW9uYWwgbGlicmFyaWVzCitJTlNBTkVfU0tJUF8ke1BOfS10YyA9ICJkZXYtc28iCisKK1BBQ0tBR0VTID0rICIke1BOfS10YyIKK0ZJTEVTXyR7UE59LXRjID0gIiR7YmFzZV9zYmluZGlyfS90YyogXAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3RjLyouc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3RjLy5kZWJ1ZyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaXAiCitBTFRFUk5BVElWRV9UQVJHRVRbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaXBdID0gIiR7YmFzZV9zYmluZGlyfS9pcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvMDAwMS1pcHJvdXRlMi1kZS1iYXNoLXNjcmlwdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzdkNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lwcm91dGUyL2lwcm91dGUyLzAwMDEtaXByb3V0ZTItZGUtYmFzaC1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1N1YmplY3Q6IFtQQVRDSF0gaXByb3V0ZTI6IGRlLWJhc2ggc2NyaXB0cworCitkZS1iYXNoIHRoZXNlIHR3byBzY3JpcHRzIHRvIG1ha2UgaXByb3V0ZTIgbm90IGRlcGVuZCBvbiBiYXNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCistLS0KKyBpcC9pZmNmZyB8ICAgMTUgKysrKysrKystLS0tLS0tCisgaXAvcnRwciAgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pcC9pZmNmZyBiL2lwL2lmY2ZnCitpbmRleCAwODNkOWRmLi42MGJjZjFmIDEwMDY0NAorLS0tIGEvaXAvaWZjZmcKKysrKyBiL2lwL2lmY2ZnCitAQCAtMSwxMiArMSwxMyBAQAorLSMhIC9iaW4vYmFzaAorKyMhIC9iaW4vc2gKKyAKKyBDaGVja0ZvcndhcmRpbmcgKCkgeworLSAgbG9jYWwgc2Jhc2UgZndkCisrICBsb2NhbCBzYmFzZSBmd2QgZm9yd2FyZGluZworICAgc2Jhc2U9L3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYKKyAgIGZ3ZD0wCisgICBpZiBbIC1kICRzYmFzZSBdOyB0aGVuCisgICAgIGZvciBkaXIgaW4gJHNiYXNlLyovZm9yd2FyZGluZzsgZG8KKy0gICAgICBmd2Q9JFskZndkICsgYGNhdCAkZGlyYF0KKysgICAgICBmb3J3YXJkaW5nPWBjYXQgJGRpcmAKKysgICAgICBmd2Q9JCgoJGZ3ZCskZm9yd2FyZGluZykpCisgICAgIGRvbmUKKyAgIGVsc2UKKyAgICAgZndkPTIKK0BAIC0xMjcsMTIgKzEyOCwxMiBAQCBmaQorIGFycGluZyAtcSAtQSAtYyAxIC1JICRkZXYgJGlwYWRkcgorIG5vYXJwPSQ/CisgKCBzbGVlcCAyIDsKKy0gIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4mIC9kZXYvbnVsbCA8L2Rldi9udWxsICYKKysgIGFycGluZyAtcSAtVSAtYyAxIC1JICRkZXYgJGlwYWRkciApID4gL2Rldi9udWxsIDI+JjEgPC9kZXYvbnVsbCAmCisgCistaXAgcm91dGUgYWRkIHVucmVhY2hhYmxlIDIyNC4wLjAuMC8yNCA+JiAvZGV2L251bGwKKy1pcCByb3V0ZSBhZGQgdW5yZWFjaGFibGUgMjU1LjI1NS4yNTUuMjU1ID4mIC9kZXYvbnVsbAorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyMjQuMC4wLjAvMjQgPiAvZGV2L251bGwgMj4mMQorK2lwIHJvdXRlIGFkZCB1bnJlYWNoYWJsZSAyNTUuMjU1LjI1NS4yNTUgPiAvZGV2L251bGwgMj4mMQorIGlmIFsgYGlwIGxpbmsgbHMgJGRldiB8IGdyZXAgLWMgTVVMVElDQVNUYCAtZ2UgMSBdOyB0aGVuCistICBpcCByb3V0ZSBhZGQgMjI0LjAuMC4wLzQgZGV2ICRkZXYgc2NvcGUgZ2xvYmFsID4mIC9kZXYvbnVsbAorKyAgaXAgcm91dGUgYWRkIDIyNC4wLjAuMC80IGRldiAkZGV2IHNjb3BlIGdsb2JhbCA+IC9kZXYvbnVsbCAyPiYxCisgZmkKKyAKKyBpZiBbICRmd2QgLWVxIDAgXTsgdGhlbgorZGlmZiAtLWdpdCBhL2lwL3J0cHIgYi9pcC9ydHByCitpbmRleCBjMzYyOWZkLi42NzQxOThkIDEwMDY0NAorLS0tIGEvaXAvcnRwcgorKysrIGIvaXAvcnRwcgorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9iYXNoCisrIyEgL2Jpbi9zaAorIAorIGV4ZWMgdHIgIltcXFxcXSIgIlsKKyBdIgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMi9jb25maWd1cmUtY3Jvc3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY2NjA5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTIvY29uZmlndXJlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODViMDU4OWI0ODQzYzAzZThlNmZkOTQxNmQ3MWVhNDQ5YTczYzVjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMTA6NDY6MTYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gbWFrZSBjb25maWd1cmUgY3Jvc3MgY29tcGlsZSBzYWZlCisKK0FjY29yZGluZyB0byBLZXZpbiBUaWFuOgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworSW5kZXg6IGlwcm91dGUyLTMuNy4wL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGlwcm91dGUyLTMuNy4wLm9yaWcvY29uZmlndXJlCisrKysgaXByb3V0ZTItMy43LjAvY29uZmlndXJlCitAQCAtMiw2ICsyLDcgQEAKKyAjIFRoaXMgaXMgbm90IGFuIGF1dGNvbmYgZ2VuZXJhdGVkIGNvbmZpZ3VyZQorICMKKyBJTkNMVURFPSR7MTotIiRQV0QvaW5jbHVkZSJ9CisrU1lTUk9PVD0kMQorIAorICMgTWFrZSBhIHRlbXAgZGlyZWN0b3J5IGluIGJ1aWxkIHRyZWUuCisgVE1QRElSPSQobWt0ZW1wIC1kIGNvbmZpZy5YWFhYWFgpCitAQCAtMTU4LDcgKzE1OSw3IEBAIGNoZWNrX2lwdF9saWJfZGlyKCkKKyAJCXJldHVybgorIAlmaQorIAorLQlmb3IgZGlyIGluIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIKKysJZm9yIGRpciBpbiAkU1lTUk9PVC9saWIgJFNZU1JPT1QvdXNyL2xpYiAkU1lTUk9PVC91c3IvbG9jYWwvbGliCisgCWRvCisgCQlmb3IgZmlsZSBpbiAkZGlyL3t4dGFibGVzLGlwdGFibGVzfS9saWIqdF8qc28gOyBkbworIAkJCWlmIFsgLWYgJGZpbGUgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcHJvdXRlMi9pcHJvdXRlMl80LjEuMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBkYjBiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXByb3V0ZTIvaXByb3V0ZTJfNC4xLjEuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBpcHJvdXRlMi5pbmMKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL25ldC8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1jcm9zcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlwcm91dGUyLWRlLWJhc2gtc2NyaXB0cy5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjM5MjkwY2IzYTU1ZDM4ZGQ4ZDEwZTE5YTMwOTQxMDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjczMDc3YTk4OWVmYjkzNDQ1MGJkNjU1Y2JkOWFhZGRhYTc0N2NiNjk2YzY0ZDBjOWEzMzIzNzY4YTZhOGU2NmYiCisKKyMgQ0ZMQUdTIGFyZSBjb21wdXRlZCBpbiBNYWtlZmlsZSBhbmQgcmVmZXJlbmNlIENDT1BUUworIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgQ0NPUFRTPScke0NGTEFHU30nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlscy0wLjkuMTgvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZjI5ZTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2luaXQKQEAgLTAsMCArMSw3OCBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaXJkYQorIyBSZXF1aXJlZC1TdGFydDogICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEluZnJhcmVkIHBvcnQgc3VwcG9ydAorIyMjIEVORCBJTklUIElORk8KKworTkFNRT0iaXJhdHRhY2giCit0ZXN0IC14ICIkSVJEQV9EQUVNT04iIHx8IElSREFfREFFTU9OPS91c3Ivc2Jpbi9pcmF0dGFjaAordGVzdCAteiAiJElSQVRUQUNIX1BJRCIgJiYgSVJBVFRBQ0hfUElEPS92YXIvcnVuL2lyYXR0YWNoLnBpZAorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbW9kdWxlX2lkKCkgeworICAgICAgICBhd2sgJ0JFR0lOIHsgRlM9IjogIiB9IC9IYXJkd2FyZS8geyBwcmludCAkMiB9ICcgPC9wcm9jL2NwdWluZm8KK30KKworaWYgWyAhIC1mIC9ldGMvc3lzY29uZmlnL2lyZGEgXTsgdGhlbgorICAgIGNhc2UgYG1vZHVsZV9pZGAgaW4KKwkiSFAgaVBBUSBIMjIwMCIgfCAiSFAgaVBBUSBIWDQ3MDAiIHwgIkhUQyBVbml2ZXJzYWwiKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMgorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKwkqKQorCSAgICBJUkRBPXllcworCSAgICBERVZJQ0U9L2Rldi90dHlTMQorCSAgICBET05HTEU9CisJICAgIERJU0NPVkVSWT0KKwkgICAgOzsKKyAgICBlc2FjCitlbHNlCisgICAgLiAvZXRjL3N5c2NvbmZpZy9pcmRhCitmaQorCisjIENoZWNrIHRoYXQgaXJkYSBpcyB1cC4KK1sgJHtJUkRBfSA9ICJubyIgXSAmJiBleGl0IDAKKworWyAtZiAvdXNyL3NiaW4vaXJhdHRhY2ggXSB8fCBleGl0IDAKKworQVJHUz0KK2lmIFsgJERPTkdMRSBdOyB0aGVuCisJQVJHUz0iJEFSR1MgLWQgJERPTkdMRSIKK2ZpCitpZiBbICIkRElTQ09WRVJZIiA9ICJ5ZXMiIF07dGhlbgorCUFSR1M9IiRBUkdTIC1zIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgIiRJUkRBX0RBRU1PTiIgJHtERVZJQ0V9ICR7QVJHU30gLS1waWRmaWxlICIkSVJBVFRBQ0hfUElEIgorCXNsZWVwIDEKKwlbIC1mIC92YXIvcnVuL2lyYXR0YWNoLnBpZCBdICYmIGVjaG8gIiBkb25lIiB8fCBlY2hvICIgZmFpbCIKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nIElyREE6ICROQU1FIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJElSREFfREFFTU9OIiAtLXBpZGZpbGUgIiRJUkFUVEFDSF9QSUQiCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgc3RhdHVzKQorCXN0YXR1cyBpcmF0dGFjaAorCWV4aXQgJD8KKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR8c3RhdHVzfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pcmRhLXV0aWxzL2lyZGEtdXRpbHMtMC45LjE4L2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk1ZmUzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzLTAuOS4xOC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2ZpbmRjaGlwL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvZmluZGNoaXAvTWFrZWZpbGUKK0BAIC02NSw1ICs2NSw1IEBAIGluc3RhbGw6IGZpbmRjaGlwCisKKyBnZmluZGNoaXA6IGdmaW5kY2hpcC5jCisJJChwcm5fY2MpCistCSQoRUNNRCkpJChDQykgJChDRkxBR1MpIGBndGstY29uZmlnIC0tY2ZsYWdzYCAgJDwgLW8gJEAgYGd0ay1jb25maWcgLS1saWJzYAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYGd0ay1jb25maWcgLS1jZmxhZ3NgICAkPCAtbyAkQCBgZ3RrLWNvbmZpZyAtLWxpYnNgCisKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL2lyYXR0YWNoL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJhdHRhY2gvTWFrZWZpbGUKK0BAIC00OSwxMyArNDksMTMgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmF0dGFjaDogaXJhdHRhY2gubyB1dGlsLm8KKwkkKHBybl9jY19vKQorLQkkKEVDTUQpJChDQykgJChDRkxBR1MpIGlyYXR0YWNoLm8gdXRpbC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBpcmF0dGFjaC5vIHV0aWwubyAtbyAkQAorCisKKworIGRvbmdsZV9hdHRhY2g6IGRvbmdsZV9hdHRhY2gubworCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgZG9uZ2xlX2F0dGFjaC5vIC1vICRACisrCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSBkb25nbGVfYXR0YWNoLm8gLW8gJEAKKworCisgaW5zdGFsbDogJChUQVJHRVRTKQorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYWR1bXAvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhZHVtcC9NYWtlZmlsZQorQEAgLTQwLDcgKzQwLDcgQEAgbGliX2lyZGFkdW1wLmE6ICQoTElCSVJEQURVTVBfT0JKUykKKworIGlyZGFkdW1wOiAkKElSREFEVU1QX09CSlMpICQoTElCSVJEQURVTVBfVEFSR0VUKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAtbyAgJChJUkRBRFVNUF9UQVJHRVQpICQ8ICQoTElCSVJEQURVTVBfVEFSR0VUKQorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJkYXBpbmcvTWFrZWZpbGUKKysrKyBpcmRhLXV0aWxzLTAuOS4xOC9pcmRhcGluZy9NYWtlZmlsZQorQEAgLTU2LDcgKzU2LDcgQEAgYWxsOiAkKFRBUkdFVFMpCisKKyBpcmRhcGluZzogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyAuYy5vOgorLS0tIGlyZGEtdXRpbHMtMC45LjE4Lm9yaWcvaXJuZXRkL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvaXJuZXRkL01ha2VmaWxlCitAQCAtNTAsNyArNTAsNyBAQCBhbGw6ICQoVEFSR0VUUykKKworIGlybmV0ZDogJChPQkpTKQorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChPQkpTKSAtbyAkQAorKwkkKEVDTUQpJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChPQkpTKSAtbyAkQAorCisKKyBpbnN0YWxsOiBpcm5ldGQKKy0tLSBpcmRhLXV0aWxzLTAuOS4xOC5vcmlnL3BzaW9uL01ha2VmaWxlCisrKysgaXJkYS11dGlscy0wLjkuMTgvcHNpb24vTWFrZWZpbGUKK0BAIC0yNSw0ICsyNSw0IEBAIGluc3RhbGw6ICQoUFNJT05fVEFSR0VUUykKKyBDRkxBR1MgKz0gLWcgLUkuLi9pbmNsdWRlIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChSUE1fT1BUX0ZMQUdTKQorIGlycHNpb241OgorCSQocHJuX2NjX28pCistCSQoRUNNRCkkKENDKSAkKENGTEFHUykgJChQU0lPTl9TUkMpIC1vICRACitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysJJChFQ01EKSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoUFNJT05fU1JDKSAtbyAkQAorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlsc18wLjkuMTguYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2lyZGEtdXRpbHMvaXJkYS11dGlsc18wLjkuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjM2IxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXJkYS11dGlscy9pcmRhLXV0aWxzXzAuOS4xOC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIkNvbW1vbiBmaWxlcyBmb3IgSXJEQSIKK0RFU0NSSVBUSU9OID0gIlByb3ZpZGVzIGNvbW1vbiBmaWxlcyBuZWVkZWQgdG8gdXNlIElyREEuIFwKK0lyREEgYWxsb3dzIGNvbW11bmljYXRpb24gb3ZlciBJbmZyYXJlZCB3aXRoIG90aGVyIGRldmljZXMgXAorc3VjaCBhcyBwaG9uZXMgYW5kIGxhcHRvcHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2lyZGEuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaXJkYS11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2lyZGFkdW1wL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NtY2luaXQvQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFuL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2lyZGFkdW1wL2lyZGFkdW1wLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9ZDc4YjlkY2UzY2Q3OGMyMjIwMjUwYzljN2EyYmUxNzgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2lyZGEvaXJkYS11dGlscy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiODRkYzEyYWE0YzNmNjFmY2NiOGQ4OTE5YmY0MDc5YmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE5ODA1NTFlNDZiMmVhYTllMTdhZDMxY2JjMWE2MzgwNzQ2MTFmYzMzYmZmMzQxNjNkMTBjN2E2N2E5ZmRjNiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZAorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdDQz0ke0NDfScgXAorICAgICdMRD0ke0xEfScgXAorICAgICdDRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdTWVNfSU5DTFVERVM9JyBcCisgICAgJ1Y9MScgXAorIgorCitJTklUU0NSSVBUX05BTUUgPSAiaXJhdHRhY2giCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyAyMCIKKworVEFSR0VUUyA/Pz0gImlyYXR0YWNoIGlyZGFwaW5nIgorZG9fY29tcGlsZSAoKSB7CisJZm9yIHQgaW4gJHtUQVJHRVRTfTsgZG8KKwkJb2VfcnVubWFrZSAtQyAkdAorCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciB0IGluICR7VEFSR0VUU307IGRvCisJCW9lX3J1bm1ha2UgLUMgJHQgUk9PVD0iJHtEfSIgaW5zdGFsbAorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvJHtJTklUU0NSSVBUX05BTUV9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3LzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE3N2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy8wMDAxLWl3LXZlcnNpb24uc2gtZG9uLXQtdXNlLWdpdC1kZXNjcmliZS1mb3ItdmVyc2lvbmluZy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDUzMTBhYmJhODY0Y2ZlM2E4YjY1YWYxMzA3Mjk0NDc2MDQxOTBiMjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBOb3YgMjAxMSAxNzowMzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBpdzogdmVyc2lvbi5zaDogZG9uJ3QgdXNlIGdpdCBkZXNjcmliZSBmb3IgdmVyc2lvbmluZworCitJdCB3aWxsIGRldGVjdCB0b3AtbGV2ZWwgZ2l0IHJlcG9zaXRvcmllcyBsaWtlIHRoZSBBbmdzdHJvbSBzZXR1cC1zY3JpcHRzIGFuZCBicmVhay4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CistLS0KKyB2ZXJzaW9uLnNoIHwgMTYgKy0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS92ZXJzaW9uLnNoIGIvdmVyc2lvbi5zaAoraW5kZXggMTFkMTI0Yi4uNWQ0MjNjNCAxMDA3NTUKKy0tLSBhL3ZlcnNpb24uc2gKKysrKyBiL3ZlcnNpb24uc2gKK0BAIC0zLDIxICszLDcgQEAKKyBWRVJTSU9OPSIzLjE1IgorIE9VVD0iJDEiCisgCistaWYgWyAtZCAuZ2l0IF0gJiYgaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEIDI+L2Rldi9udWxsYDsgdGhlbgorLQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtLXVubWVyZ2VkID4gL2Rldi9udWxsCistCWRlc2NyPSQoZ2l0IGRlc2NyaWJlKQorLQorLQkjIG9uIGdpdCBidWlsZHMgY2hlY2sgdGhhdCB0aGUgdmVyc2lvbiBudW1iZXIgYWJvdmUKKy0JIyBpcyBjb3JyZWN0Li4uCistCVsgIiR7ZGVzY3IlJS0qfSIgPSAidiRWRVJTSU9OIiBdIHx8IGV4aXQgMgorLQorLQl2PSIke2Rlc2NyI3Z9IgorLQlpZiBnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSBIRUFEIHwgcmVhZCBkdW1teSA7IHRoZW4KKy0JCXY9IiR2Ii1kaXJ0eQorLQlmaQorLWVsc2UKKy0Jdj0iJFZFUlNJT04iCistZmkKKyt2PSIkVkVSU0lPTiIKKyAKKyBlY2hvICcjaW5jbHVkZSAiaXcuaCInID4gIiRPVVQiCisgZWNobyAiY29uc3QgY2hhciBpd192ZXJzaW9uW10gPSBcIiR2XCI7IiA+PiAiJE9VVCIKKy0tIAorMS43LjcuMwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3L3NlcGFyYXRlLW9iamRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODNmOGIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9pdy9pdy9zZXBhcmF0ZS1vYmpkaXIucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA5ZTI3ZmMyZTFiM2RjOGMzNmVmNmE1MDJlZGZmYzNhM2Q4NGQ5ZGQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTc6MjM6NDggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gU3VwcG9ydCBzZXBhcmF0aW9uIG9mIFNSQ0RJUiBhbmQgT0JKRElSCisKK1R5cGljYWwgdXNlIG9mIFZQQVRIIHRvIGxvY2F0ZSB0aGUgc291cmNlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENocmlzdG9waGVyIExhcnNvbiA8Y2hyaXNfbGFyc29uQG1lbnRvci5jb20+CisKKy0tLQorIE1ha2VmaWxlICAgfCA3ICsrKysrLS0KKyB2ZXJzaW9uLnNoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNTQ4NTkxYS4uZGE4ZDMzYSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNSArMSw4IEBACisgTUFLRUZMQUdTICs9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisgCisrU1JDRElSID89ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisrT0JKRElSID89ICQoUFdEKQorK1ZQQVRIID0gJChTUkNESVIpCisgUFJFRklYID89IC91c3IKKyBTQklORElSID89ICQoUFJFRklYKS9zYmluCisgTUFORElSID89ICQoUFJFRklYKS9zaGFyZS9tYW4KK0BAIC05NSwxMSArOTgsMTEgQEAgVkVSU0lPTl9PQkpTIDo9ICQoZmlsdGVyLW91dCB2ZXJzaW9uLm8sICQoT0JKUykpCisgdmVyc2lvbi5jOiB2ZXJzaW9uLnNoICQocGF0c3Vic3QgJS5vLCUuYywkKFZFUlNJT05fT0JKUykpIG5sODAyMTEuaCBpdy5oIE1ha2VmaWxlIFwKKyAJCSQod2lsZGNhcmQgLmdpdC9pbmRleCAuZ2l0L3JlZnMvdGFncykKKyAJQCQoTlEpICcgR0VOICcgJEAKKy0JJChRKS4vdmVyc2lvbi5zaCAkQAorKwkkKFEpY2QgJChTUkNESVIpICYmIC4vdmVyc2lvbi5zaCAkKE9CSkRJUikvJEAKKyAKKyAlLm86ICUuYyBpdy5oIG5sODAyMTEuaAorIAlAJChOUSkgJyBDQyAgJyAkQAorLQkkKFEpJChDQykgJChDRkxBR1MpIC1jIC1vICRAICQ8CisrCSQoUSkkKENDKSAtSSQoU1JDRElSKSAkKENGTEFHUykgLWMgLW8gJEAgJDwKKyAKKyBpZmVxICgkKElXX0FORFJPSURfQlVJTEQpLCkKKyBpdzoJJChPQkpTKQorZGlmZiAtLWdpdCBhL3ZlcnNpb24uc2ggYi92ZXJzaW9uLnNoCitpbmRleCA1MzU0MzgzLi5mYTk1NGNmIDEwMDc1NQorLS0tIGEvdmVyc2lvbi5zaAorKysrIGIvdmVyc2lvbi5zaAorQEAgLTUsNSArNSw1IEBAIE9VVD0iJDEiCisgCisgdj0iJFZFUlNJT04iCisgCistZWNobyAnI2luY2x1ZGUgIml3LmgiJyA+ICIkT1VUIgorK2VjaG8gJyNpbmNsdWRlIDxpdy5oPicgPiAiJE9VVCIKKyBlY2hvICJjb25zdCBjaGFyIGl3X3ZlcnNpb25bXSA9IFwiJHZcIjsiID4+ICIkT1VUIgorLS0gCisyLjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvaXcvaXdfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZmIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2l3L2l3XzQuMS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIm5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3Igd2lyZWxlc3MgZGV2aWNlcyIKK0RFU0NSSVBUSU9OID0gIml3IGlzIGEgbmV3IG5sODAyMTEgYmFzZWQgQ0xJIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSBmb3IgXAord2lyZWxlc3MgZGV2aWNlcy4gSXQgc3VwcG9ydHMgYWxtb3N0IGFsbCBuZXcgZHJpdmVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBcCit0byB0aGUga2VybmVsIHJlY2VudGx5LiAiCitIT01FUEFHRSA9ICJodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Eb2N1bWVudGF0aW9uL2l3IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04Nzg2MThhNWM0YWYyNWU5YjkzZWYwYmUxYTkzZjc3NCIKKworREVQRU5EUyA9ICJsaWJubCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvaXcvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaXctdmVyc2lvbi5zaC1kb24tdC11c2UtZ2l0LWRlc2NyaWJlLWZvci12ZXJzaW9uaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlLW9iamRpci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OGMyODIyODVjNzFjOTU2MDY5OTU3ZTljYTEwYTZhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNGJmYzYyN2IzN2Y3ZjYwN2U0ZmZhNjNhNzBkZWQxNWZhMmVhODUxNzdmNzAzY2IxN2Q3ZmUzNmY5YzhmMzNkIgorCitpbmhlcml0IHBrZ2NvbmZpZworCitFWFRSQV9PRU1BS0UgPSAiXAorICAgIC1mICcke1N9L01ha2VmaWxlJyBcCisgICAgXAorICAgICdQUkVGSVg9JHtwcmVmaXh9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisiCitCID0gIiR7V09SS0RJUn0vYnVpbGQiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm5zcy1tZG5zL2xpYm5zcy1tZG5zXzAuMTAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYm5zcy1tZG5zL2xpYm5zcy1tZG5zXzAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5MzZlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlibnNzLW1kbnMvbGlibnNzLW1kbnNfMC4xMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk5hbWUgU2VydmljZSBTd2l0Y2ggbW9kdWxlIGZvciBNdWx0aWNhc3QgRE5TICh6ZXJvY29uZikgbmFtZSByZXNvbHV0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitERVBFTkRTID0gImF2YWhpIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW1kbnMvbnNzLW1kbnMtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDM5MzhmMTc2NDZlZmJiNTBhYTcwYmE1Zjk5ZjUxZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWU2ODNjMmU3YzM5MjE4MTQ3MDZkNjJmYmJkM2U5Y2JmNDkzYTc1ZmEwMDI1NWUwZTcxNTUwOGQ4MTM0ZmE2ZCIKKworUyA9ICIke1dPUktESVJ9L25zcy1tZG5zLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9PRUNPTkYgPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1kaXNhYmxlLWx5bnggLS1lbmFibGUtYXZhaGkiCisKKyMgc3VwcHJlc3Mgd2FybmluZywgYnV0IGRvbid0IGJvdGhlciB3aXRoIGF1dG9uYW1lcgorTEVBRF9TT05BTUUgPSAibGlibnNzX21kbnMuc28iCitERUJJQU5OQU1FXyR7UE59ID0gImxpYm5zcy1tZG5zIgorCitSREVQRU5EU18ke1BOfSA9ICJhdmFoaS1kYWVtb24iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisJc2VkIC1lICcvXmhvc3RzOi9zL1xzKlw8bWRuc1w+Ly8nIFwKKwkJLWUgJ3MvXCheaG9zdHM6LipcKVwoXDxmaWxlc1w+XClcKC4qXClcKFw8ZG5zXD5cKVwoLipcKS9cMVwyIG1kbnM0X21pbmltYWwgW05PVEZPVU5EPXJldHVybl1cM1w0IG1kbnNcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxtZG5zXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccyptZG5zNF9taW5pbWFsXHNcK1xbTk9URk9VTkQ9cmV0dXJuXF0vLycgXAorCQktaSAkRCR7c3lzY29uZmRpcn0vbnNzd2l0Y2guY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NzNjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcC5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJJbnRlcmZhY2UgZm9yIHVzZXItbGV2ZWwgbmV0d29yayBwYWNrZXQgY2FwdHVyZSIKK0RFU0NSSVBUSU9OID0gIkxpYnBjYXAgcHJvdmlkZXMgYSBwb3J0YWJsZSBmcmFtZXdvcmsgZm9yIGxvdy1sZXZlbCBuZXR3b3JrIFwKK21vbml0b3JpbmcuICBMaWJwY2FwIGNhbiBwcm92aWRlIG5ldHdvcmsgc3RhdGlzdGljcyBjb2xsZWN0aW9uLCBcCitzZWN1cml0eSBtb25pdG9yaW5nIGFuZCBuZXR3b3JrIGRlYnVnZ2luZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnRjcGR1bXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD01MzA2NyZhdGlkPTQ2OTU3NyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xZDRiMDM2NjU1Nzk1MWM4NGE5NGZhYmUzNTI5Zjg2NyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9wY2FwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0zMjttZDU9MzlhZjM1MTBlMDExZjM0Yjg4NzJmMTIwYjFkYzMxZDIiCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSIKKworSU5DX1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudGNwZHVtcC5vcmcvcmVsZWFzZS8ke0JQfS50YXIuZ3oiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vcGNhcC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcgYmx1ZXRvb3RoCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcGNhcD1saW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsLS1kaXNhYmxlLWJsdWV0b290aCxibHVlejQiCisjIEFkZCBhIGR1bW15IFBBQ0tBR0VDT05GSUcgZm9yIGJsdWV6NSBzaW5jZSBpdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnBjYXAuCitQQUNLQUdFQ09ORklHW2JsdWV6NV0gPSAiLCwiCitQQUNLQUdFQ09ORklHW2NhbnVzYl0gPSAiLS1lbmFibGUtY2FudXNiLC0tZW5hYmxlLWNhbnVzYj1ubyxsaWJ1c2IiCitQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbbGlibmxdID0gIi0td2l0aC1saWJubCwtLXdpdGhvdXQtbGlibmwsbGlibmwiCisKK0NQUEZMQUdTX3ByZXBlbmQgPSAiLUkke1N9ICIKK0NGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCitDWFhGTEFHU19wcmVwZW5kID0gIi1JJHtTfSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICBpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorICAgICAgICBjYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKyAgICBmaQorICAgIHNlZCAtaSAtZSdzLF5WX1JQQVRIX09QVD0uKiQsVl9SUEFUSF9PUFQ9LCcgJHtTfS9wY2FwLWNvbmZpZy5pbgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvYWNsb2NhbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2FjbG9jYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1MTk4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2FjbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwxNjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00IGxpYnBjYXAtMS4xLjEvYWNsb2NhbC5tNAorLS0tIGxpYnBjYXAtMS4xLjEtb3JpZy9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDY6MzIuODE1MTE3NTY5ICswODAwCisrKysgbGlicGNhcC0xLjEuMS9hY2xvY2FsLm00CTIwMTAtMDYtMjkgMTA6NDk6MTcuMTUwMTQ5OTQ5ICswODAwCitAQCAtMzcsNyArMzcsNyBAQAorIGRubCBBQ19MQkxfQ19JTklULiAgTm93LCB3ZSBydW4gQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsIEFDX1BST0dfQ0MsCisgZG5sIGFuZCBBQ19MQkxfQ19JTklUIGF0IHRoZSB0b3AgbGV2ZWwuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0NfSU5JVF9CRUZPUkVfQ0MsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRfQkVGT1JFX0NDXSwKKyBbCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfTEJMX0NfSU5JVF0pCisgICAgIEFDX0JFRk9SRShbJDBdLCBbQUNfUFJPR19DQ10pCitAQCAtOTAsNyArOTAsNyBAQAorIGRubCAgICAgTERGTEFHUworIGRubCAgICAgTEJMX0NGTEFHUworIGRubAorLUFDX0RFRlVOKEFDX0xCTF9DX0lOSVQsCisrQUNfREVGVU4oW0FDX0xCTF9DX0lOSVRdLAorIFsKKyAgICAgQUNfQkVGT1JFKFskMF0sIFtBQ19MQkxfRklYSU5DTFVERVNdKQorICAgICBBQ19CRUZPUkUoWyQwXSwgW0FDX0xCTF9ERVZFTF0pCitAQCAtMjE3LDcgKzIxNyw3IEBACisgZG5sCVZfU09OQU1FX09QVAorIGRubAlWX1JQQVRIX09QVAorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9TSExJQlNfSU5JVCwKKytBQ19ERUZVTihbQUNfTEJMX1NITElCU19JTklUXSwKKyAgICAgW0FDX1BSRVJFUSgyLjUwKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgICMKK0BAIC0zNjEsNyArMzYxLDcgQEAKKyAjIE1ha2Ugc3VyZSB3ZSB1c2UgdGhlIFZfQ0NPUFQgZmxhZ3MsIGJlY2F1c2Ugc29tZSBvZiB0aG9zZSBtaWdodAorICMgZGlzYWJsZSBpbmxpbmluZy4KKyAjCistQUNfREVGVU4oQUNfTEJMX0NfSU5MSU5FLAorK0FDX0RFRlVOKFtBQ19MQkxfQ19JTkxJTkVdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciBpbmxpbmUpCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRWX0NDT1BUIgorQEAgLTQwNyw3ICs0MDcsNyBAQAorIGRubAorIGRubAlBQ19MQkxfRklYSU5DTFVERVMKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfRklYSU5DTFVERVMsCisrQUNfREVGVU4oW0FDX0xCTF9GSVhJTkNMVURFU10sCisgICAgIFtpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAJICAgIEFDX01TR19DSEVDS0lORyhmb3IgQU5TSSBpb2N0bCBkZWZpbml0aW9ucykKKyAJICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZ2NjX2ZpeGluY2x1ZGVzLAorQEAgLTQ1Myw3ICs0NTMsNyBAQAorIGRubAkkMiAoeWFjYyBhcHBlbmRlZCkKKyBkbmwJJDMgKG9wdGlvbmFsIGZsZXggYW5kIGJpc29uIC1QIHByZWZpeCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTEVYX0FORF9ZQUNDLAorK0FDX0RFRlVOKFtBQ19MQkxfTEVYX0FORF9ZQUNDXSwKKyAgICAgW0FDX0FSR19XSVRIKGZsZXgsIFsgIC0td2l0aG91dC1mbGV4ICAgICAgICAgIGRvbid0IHVzZSBmbGV4XSkKKyAgICAgQUNfQVJHX1dJVEgoYmlzb24sIFsgIC0td2l0aG91dC1iaXNvbiAgICAgICAgIGRvbid0IHVzZSBiaXNvbl0pCisgICAgIGlmIHRlc3QgIiR3aXRoX2ZsZXgiID0gbm8gOyB0aGVuCitAQCAtNTA2LDcgKzUwNiw3IEBACisgZG5sCisgZG5sCURFQ0xXQUlUU1RBVFVTIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9VTklPTl9XQUlULAorK0FDX0RFRlVOKFtBQ19MQkxfVU5JT05fV0FJVF0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgdW5pb24gd2FpdCBpcyB1c2VkKQorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfbGJsX3VuaW9uX3dhaXQsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC01MzUsNyArNTM1LDcgQEAKKyBkbmwKKyBkbmwJSEFWRV9TT0NLQUREUl9TQV9MRU4gKGRlZmluZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1NPQ0tBRERSX1NBX0xFTiwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NBX0xFTl0sCisgICAgIFtBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgc3RydWN0IGhhcyB0aGUgc2FfbGVuIG1lbWJlcikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9zb2NrYWRkcl9oYXNfc2FfbGVuLAorIAlBQ19UUllfQ09NUElMRShbCitAQCAtNTYwLDcgKzU2MCw3IEBACisgZG5sCisgZG5sCUhBVkVfU09DS0FERFJfU1RPUkFHRSAoZGVmaW5lZCkKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfU09DS0FERFJfU1RPUkFHRSwKKytBQ19ERUZVTihbQUNfTEJMX1NPQ0tBRERSX1NUT1JBR0VdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIHNvY2thZGRyX3N0b3JhZ2Ugc3RydWN0IGV4aXN0cykKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfc29ja2FkZHJfc3RvcmFnZSwKKyAJQUNfVFJZX0NPTVBJTEUoWworQEAgLTU5Myw3ICs1OTMsNyBAQAorIGRubCB3b24ndCBiZSB1c2luZyBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndAorIGRubCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSFBfUFBBX0lORk9fVF9ETF9NT0RVTEVfSURfMSwKKytBQ19ERUZVTihbQUNfTEJMX0hQX1BQQV9JTkZPX1RfRExfTU9EVUxFX0lEXzFdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX2hwX3BwYV9pbmZvX3Qgc3RydWN0IGhhcyBkbF9tb2R1bGVfaWRfMSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC02MTksNyArNjE5LDcgQEAKKyBkbmwKKyBkbmwJYWNfY3ZfbGJsX2hhdmVfcnVuX3BhdGggKHllcyBvciBubykKKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfSEFWRV9SVU5fUEFUSCwKKytBQ19ERUZVTihbQUNfTEJMX0hBVkVfUlVOX1BBVEhdLAorICAgICBbQUNfTVNHX0NIRUNLSU5HKGZvciAke0NDLWNjfSAtUikKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXZlX3J1bl9wYXRoLAorIAlbZWNobyAnbWFpbigpe30nID4gY29uZnRlc3QuYworQEAgLTY0NCw3ICs2NDQsNyBAQAorIGRubAorIGRubAlMQkxfQUxJR04gKERFRklORUQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX1VOQUxJR05FRF9BQ0NFU1MsCisrQUNfREVGVU4oW0FDX0xCTF9VTkFMSUdORURfQUNDRVNTXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB1bmFsaWduZWQgYWNjZXNzZXMgZmFpbCkKKyAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF91bmFsaWduZWRfZmFpbCwKKyAJW2Nhc2UgIiRob3N0X2NwdSIgaW4KK0BAIC03NDksNyArNzQ5LDcgQEAKKyBkbmwJSEFWRV9PU19QUk9UT19IIChkZWZpbmVkKQorIGRubAlvcy1wcm90by5oIChzeW1saW5rZWQpCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0RFVkVMLAorK0FDX0RFRlVOKFtBQ19MQkxfREVWRUxdLAorICAgICBbcm0gLWYgb3MtcHJvdG8uaAorICAgICBpZiB0ZXN0ICIke0xCTF9DRkxBR1Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAJICAgICQxPSIkJDEgJHtMQkxfQ0ZMQUdTfSIKK0BAIC04ODYsNyArODg2LDcgQEAKKyBkbmwgc3RhdGljYWxseSBhbmQgaGFwcGVuIHRvIGhhdmUgYSBsaWJyZXNvbHYuYSBseWluZyBhcm91bmQgKGFuZCBubworIGRubCBsaWJuc2wuYSkuCisgZG5sCistQUNfREVGVU4oQUNfTEJMX0xJQlJBUllfTkVULCBbCisrQUNfREVGVU4oW0FDX0xCTF9MSUJSQVJZX05FVF0sIFsKKyAgICAgIyBNb3N0IG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgZ2V0aG9zdGJ5bmFtZSgpIGluIHRoZSBkZWZhdWx0IHNlYXJjaGVkCisgICAgICMgbGlicmFyaWVzIChpLmUuIGxpYmMpOgorICAgICAjIFNvbWUgT1NlcyAoZWcuIFNvbGFyaXMpIHBsYWNlIGl0IGluIGxpYm5zbAorQEAgLTkwOSw3ICs5MDksNyBAQAorIGRubCBUZXN0IGZvciBfX2F0dHJpYnV0ZV9fCisgZG5sCisgCistQUNfREVGVU4oQUNfQ19fX0FUVFJJQlVURV9fLCBbCisrQUNfREVGVU4oW0FDX0NfX19BVFRSSUJVVEVfX10sIFsKKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIF9fYXR0cmlidXRlX18pCisgQUNfQ0FDSEVfVkFMKGFjX2N2X19fYXR0cmlidXRlX18sIFsKKyBBQ19DT01QSUxFX0lGRUxTRSgKK0BAIC05NDcsNyArOTQ3LDcgQEAKKyBkbmwKKyBkbmwgLVNjb3R0IEJhcnJvbgorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9UUEFDS0VUX1NUQVRTLAorK0FDX0RFRlVOKFtBQ19MQkxfVFBBQ0tFVF9TVEFUU10sCisgICAgW0FDX01TR19DSEVDS0lORyhpZiBpZl9wYWNrZXQuaCBoYXMgdHBhY2tldF9zdGF0cyBkZWZpbmVkKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfdHBhY2tldF9zdGF0cywKKyAgICBBQ19UUllfQ09NUElMRShbCitAQCAtOTc2LDcgKzk3Niw3IEBACisgZG5sIGRvZXNuJ3QgaGF2ZSB0aGF0IG1lbWJlciAod2hpY2ggaXMgT0ssIGFzIGVpdGhlciB3ZSB3b24ndCBiZSB1c2luZworIGRubCBjb2RlIHRoYXQgd291bGQgdXNlIHRoYXQgbWVtYmVyLCBvciB3ZSB3b3VsZG4ndCBjb21waWxlIGluIGFueSBjYXNlKS4KKyBkbmwKKy1BQ19ERUZVTihBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJLAorK0FDX0RFRlVOKFtBQ19MQkxfTElOVVhfVFBBQ0tFVF9BVVhEQVRBX1RQX1ZMQU5fVENJXSwKKyAgICAgW0FDX01TR19DSEVDS0lORyhpZiB0cGFja2V0X2F1eGRhdGEgc3RydWN0IGhhcyB0cF92bGFuX3RjaSBtZW1iZXIpCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9sYmxfZGxfaHBfcHBhX2luZm9fdF9oYXNfZGxfbW9kdWxlX2lkXzEsCisgCUFDX1RSWV9DT01QSUxFKFsKK0BAIC0xMDAzLDcgKzEwMDMsNyBAQAorIGRubCAKKyBkbmwgCUhBVkVfRExQSV9QQVNTSVZFIChkZWZpbmVkKQorIGRubAorLUFDX0RFRlVOKEFDX0xCTF9ETF9QQVNTSVZFX1JFUV9ULAorK0FDX0RFRlVOKFtBQ19MQkxfRExfUEFTU0lWRV9SRVFfVF0sCisgICAgICAgICBbQUNfTVNHX0NIRUNLSU5HKGlmIGRsX3Bhc3NpdmVfcmVxX3Qgc3RydWN0IGV4aXN0cykKKyAgICAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xibF9oYXNfZGxfcGFzc2l2ZV9yZXFfdCwKKyAgICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9saWJwY2FwL2xpYnBjYXAvbGlicGNhcC1wa2djb25maWctc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MTUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwL2xpYnBjYXAtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSA4ODg3MTMyZTg1ODkyYTcyYTg0Y2EzODc4ZTYwZjI1NGFkMmNlOTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorRGF0ZTogVHVlLCAyNCBGZWIgMjAxNSAxNTo1NjowNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJwY2FwOiBwa2djb25maWcgc3VwcG9ydAorCitBZGRpbmcgYmFzaWMgc3RydWN0dXJlIHRvIHN1cHBvcnQgcGtnLWNvbmZpZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9lIE1hY0RvbmFsZCA8am9lX21hY2RvbmFsZEBtZW50b3IuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICB8ICA1ICsrKysrCisgY29uZmlndXJlLmluICB8ICAxICsKKyBsaWJwY2FwLnBjLmluIHwgMTAgKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJwY2FwLnBjLmluCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAxYzJkNzQ1Li4xZjI1ZmFmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNjAsNiArNjAsMTAgQEAgVl9SUEFUSF9PUFQgPSBAVl9SUEFUSF9PUFRACisgREVQRU5ERU5DWV9DRkxBRyA9IEBERVBFTkRFTkNZX0NGTEFHQAorIFBST0c9bGlicGNhcAorIAorKyMgcGtnY29uZmlnIHN1cHBvcnQKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBsaWJwY2FwLnBjCisrCisgIyBTdGFuZGFyZCBDRkxBR1MKKyBGVUxMX0NGTEFHUyA9ICQoQ0NPUFQpICQoSU5DTFMpICQoREVGUykgJChDRkxBR1MpCisgCitAQCAtMjc1LDYgKzI3OSw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWxibC9vcy1zb2xhcmlzMi5oIFwKKyAJbGJsL29zLXN1bm9zNC5oIFwKKyAJbGJsL29zLXVsdHJpeDQuaCBcCisrCWxpYnBjYXAucGMgXAorIAltaXNzaW5nL3NucHJpbnRmLmMgXAorIAlta2RlcCBcCisgCW1zZG9zL2JpbjJjLmMgXAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggOGY1Yzg2Yi4uZmI1MWIzNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTcwMCw2ICsxNzAwLDcgQEAgZXNhYworIEFDX1BST0dfSU5TVEFMTAorIAorIEFDX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0ZJTEVTKFtsaWJwY2FwLnBjXSkKKyAKKyBBQ19PVVRQVVRfQ09NTUFORFMoW2lmIHRlc3QgLWYgLmRldmVsOyB0aGVuCisgCWVjaG8gdGltZXN0YW1wID4gc3RhbXAtaAorZGlmZiAtLWdpdCBhL2xpYnBjYXAucGMuaW4gYi9saWJwY2FwLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGY3OGFkOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlicGNhcC5wYy5pbgorQEAgLTAsMCArMSwxMCBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworK05hbWU6IGxpYnBjYXAKKytEZXNjcmlwdGlvbjogU3lzdGVtLWluZGVwZW5kZW50IGludGVyZmFjZSBmb3IgdXNlci1sZXZlbCBwYWNrZXQgY2FwdHVyZS4KKytWZXJzaW9uOiBAVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbHBjYXAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbGlicGNhcC9saWJwY2FwXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMTU0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L2xpYnBjYXAvbGlicGNhcF8xLjYuMi5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGxpYnBjYXAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2xvY2FsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9saWJwY2FwLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjVmMTQxOTFjMWE2ODRhNzU1MzJjNzM5YzJjNDA1OWZhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVkYjNlMjk5OGYxZWViYTJjNzZkYTU1ZGE1ZDQ3NDI0OGZlMTljNDRmNDllMTVjYWM4YTc5NmEyYzdlMTk2OTAiCisKKyMKKyMgbWFrZSBpbnN0YWxsIGRvZXNuJ3QgY292ZXIgdGhlIHNoYXJlZCBsaWIKKyMgbWFrZSBpbnN0YWxsLXNoYXJlZCBpcyBqdXN0IGJyb2tlbiAobm8gc3ltbGlua3MpCisjCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAjcmVtb3ZlIGhhcmRjb2RlZCByZWZlcmVuY2VzIHRvIC91c3IvaW5jbHVkZQorICAgIHNlZCAnc3xcKFsgIl4nXCcnSV1cK1wpL3Vzci9pbmNsdWRlL3xcMSR7U1RBR0lOR19JTkNESVJ9L3xnJyAtaSAke1N9L2NvbmZpZ3VyZS5pbgorfQorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIG9lX3J1bm1ha2UgaW5zdGFsbC1zaGFyZWQgREVTVERJUj0ke0R9CisgICAgb2VfbGliaW5zdGFsbCAtYSAtc28gbGlicGNhcCAke0R9JHtsaWJkaXJ9CisgICAgc2VkICJzfEBWRVJTSU9OQHwke1BWfXwiIC1pICR7Qn0vbGlicGNhcC5wYworICAgIGluc3RhbGwgLUQgLW0gMDY0NCBsaWJwY2FwLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYnBjYXAucGMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvL21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mb19naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mby9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2YyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L21vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mby9tb2JpbGUtYnJvYWRiYW5kLXByb3ZpZGVyLWluZm9fZ2l0LmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTW9iaWxlIEJyb2FkYmFuZCBTZXJ2aWNlIFByb3ZpZGVyIERhdGFiYXNlIgorU0VDVElPTiA9ICJuZXR3b3JrIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3OTY0NTc5YjJhOGVjZTRiYzY3NDRkMmRjOWE4YjA0IgorU1JDUkVWID0gImQwNmViZDMxNGE3Y2RkMDg3ZDM4ZTQ5NjZjMTlkZTQyYzhjNTUyNDYiCitQViA9ICIyMDE0MDYxOCtnaXRyJHtTUkNQVn0iCitQRSA9ICIxIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvbW9iaWxlLWJyb2FkYmFuZC1wcm92aWRlci1pbmZvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1kby1ub3Qtc2hpcC12ZXJzaW9uLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4NzVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gYmZkMzJkNjhjZmM5ZjFlMzFkYWI4OGUwNzQ0NmQxYzAyYmM4MGI1ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxMiBGZWIgMjAxNSAwMDozOToyOSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZG8gbm90IHNoaXAgdmVyc2lvbi5oCisKK1RoZSBIRUFERVJTJyBuYW1lIGhhcyBiZWVuIGNoYW5nZWQgdG8gcGtnaW5jbHVkZV9IRUFERVJTLCBzbyB1c2UKK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMsIG90aGVyd2lzZSB2ZXJzaW9uLmggd291bGQgYmUgc2hpcHBlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggMzMzNDc5MC4uNjljZDU4ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTEwLDExICsxMCwxMSBAQCBwa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3R5cGVzLmggaW5jbHVkZS9sb2cuaCBpbmNsdWRlL3BsdWdpbi5oIFwKKyAJCQlpbmNsdWRlL3Rsdi5oIGluY2x1ZGUvc2V0dGluZy5oIGluY2x1ZGUvZGV2aWNlLmggXAorIAkJCWluY2x1ZGUvbmZjX2NvcHkuaCBpbmNsdWRlL3NuZXAuaAorIAorLW5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorK25vZGlzdF9wa2dpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL3ZlcnNpb24uaAorIAorIG5vaW5zdF9IRUFERVJTID0gaW5jbHVkZS9kYnVzLmgKKyAKKy1sb2NhbF9oZWFkZXJzID0gJChmb3JlYWNoIGZpbGUsJChwa2dpbmNsdWRlX0hFQURFUlMpICQobm9kaXN0X2luY2x1ZGVfSEVBREVSUykgXAorK2xvY2FsX2hlYWRlcnMgPSAkKGZvcmVhY2ggZmlsZSwkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChub2Rpc3RfcGtnaW5jbHVkZV9IRUFERVJTKSBcCisgCQkJJChub2luc3RfSEVBREVSUyksIGluY2x1ZGUvbmVhci8kKG5vdGRpciAkKGZpbGUpKSkKKyAKKyBnZGJ1c19zb3VyY2VzID0gZ2RidXMvZ2RidXMuaCBnZGJ1cy9tYWlubG9vcC5jIGdkYnVzL3dhdGNoLmMgXAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2MDY3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmVhcmQvbmVhcmQvTWFrZWZpbGUuYW0tZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNDNhY2M1NmQ1NTA2YzdlMzE4ZjcxN2ZiMzYzNGJjMTZlMzQzODkxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxNSBKYW4gMjAxNSAxODoxMjowNyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5hbTogZml4IHBhcmFsbGVsIGlzc3VlCisKK1RoZXJlIG1pZ2h0IGJlIG5vIHNyYyBkaXIgaWYgc3JjL2J1aWx0aW4uaCBydW5zIGVhcmxpZXIsIGNyZWF0ZSBpdCB0bworZml4IHRoZSByYWNlIGlzc3VlOgorCitzcmMvZ2VuYnVpbHRpbiBuZmN0eXBlMSBuZmN0eXBlMiBuZmN0eXBlMyBuZmN0eXBlNCBwMnAgPiBzcmMvYnVpbHRpbi5oCisvYmluL3NoOiBzcmMvYnVpbHRpbi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzMjQxMzExLi5hNDNlYWEyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTY0LDYgKzE2NCw3IEBAIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gTWFrZWZpbGUuaW4gXAorIHNyYy9wbHVnaW4uJChPQkpFWFQpOiBzcmMvYnVpbHRpbi5oCisgCisgc3JjL2J1aWx0aW4uaDogc3JjL2dlbmJ1aWx0aW4gJChidWlsdGluX3NvdXJjZXMpCisrCSQoQU1fVl9hdCkkKE1LRElSX1ApIHNyYworIAkkKEFNX1ZfR0VOKSQoc3JjZGlyKS9zcmMvZ2VuYnVpbHRpbiAkKGJ1aWx0aW5fbW9kdWxlcykgPiAkQAorIAorICQoc3JjX25lYXJkX09CSkVDVFMpIFwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkL25lYXJkLmluIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9uZWFyZC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDdkNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZC9uZWFyZC5pbgpAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKyMKKyMgc3RhcnQvc3RvcCBuZWFyZCBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5lYXJkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE5GQyBkYWVtb24KKyMgRGVzY3JpcHRpb246ICAgICAgIG5lYXJkIGlzIGEgZGFlbW9uIHVzZWQgdG8gZW5hYmxlIE5GQyBmZWF0dXJlcworIyMjIEVORCBJTklUIElORk8KKworREFFTU9OPUBpbnN0YWxscGF0aEAvbmVhcmQKK1BJREZJTEU9L3Zhci9ydW4vbmVhcmQucGlkCitERVNDPSJMaW51eCBORkMgZGFlbW9uIgorCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9uZWFyZCBdIDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L25lYXJkCitmaQorCitzZXQgLWUKKworZG9fc3RhcnQoKSB7CisJJERBRU1PTgorfQorCitkb19zdG9wKCkgeworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgbmVhcmQgLS1xdWlldAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAiU3RhcnRpbmcgJERFU0MiCisJZG9fc3RhcnQKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nICRERVNDIgorCWRvX3N0b3AKKwk7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKwllY2hvICJSZXN0YXJ0aW5nICRERVNDIgorCWRvX3N0b3AKKwlzbGVlcCAxCisJZG9fc3RhcnQKKwk7OworICAqKQorCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZWFyZC9uZWFyZF8wLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZGY3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25lYXJkL25lYXJkXzAuMTUuYmIKQEAgLTAsMCArMSw2MSBAQAorU1VNTUFSWSA9ICJMaW51eCBORkMgZGFlbW9uIgorREVTQ1JJUFRJT04gPSAiQSBkYWVtb24gZm9yIHRoZSBMaW51eCBOZWFyIEZpZWxkIENvbW11bmljYXRpb24gc3RhY2siCitIT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL2xpbnV4LW5mYyIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBsaWJubCIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L25ldHdvcmsvbmZjLyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9uZWFyZC5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5hbS1maXgtcGFyYWxsZWwtaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW0tZG8tbm90LXNoaXAtdmVyc2lvbi5oLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYjc0NmNlNjJlZWVmODhlOGRlOTA3NjVlMDBhNzVhMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjUxZjY1MTNkMzJjZGFmOGE0MjYyNTVkMDNhZmYzOGE2NjIwYTg5YjA1NjdlYzJiMzY2MDZjNjMzMGE5MzM1MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTJmODg0ZDJhZTFmZjg3YzA5ZTViN2NjYzJjNGNhN2UgXAorIGZpbGU6Ly9zcmMvbmVhci5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTM1OGU0ZGVlZmVmMjUxYTQ3NjFlMWZmYWNjOTY1ZDEzIFwKKyAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1yYy5kIGJsdWV0b290aAorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0tZW5hYmxlLXN5c3RlbWQgLS13aXRoLXN5c3RlbWRzeXN0ZW11bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vIC0td2l0aC1zeXN0ZW1kdXNlcnVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3VzZXIvLC0tZGlzYWJsZS1zeXN0ZW1kIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRvb2xzIgorCisjIFRoaXMgd291bGQgY29weSBuZWFyZCBzdGFydC1zdG9wIHNoZWxsIGFuZCB0ZXN0IHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkJc2VkICJzOkBpbnN0YWxscGF0aEA6JHtsaWJleGVjZGlyfS9uZmM6IiAke1dPUktESVJ9L25lYXJkLmluIFwKKwkJICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCQljaG1vZCAwNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZWFyZAorCWZpCisKKwkjIEluc3RhbGwgdGhlIHRlc3RzIGZvciBuZWFyZC10ZXN0cworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9uZWFyZAorCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rlc3QvKiAke0R9JHtsaWJkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS90b29scy9uZmN0b29sL25mY3Rvb2wgJHtEfSR7bGliZGlyfS8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyIKKworRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtsaWJkaXJ9LyR7QlBOfS8qLXRlc3QiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi8uZGVidWciCisKK1JERVBFTkRTXyR7UE59ID0gImRidXMgcHl0aG9uIHB5dGhvbi1kYnVzIHB5dGhvbi1weWdvYmplY3QiCisKKyMgQmx1ZXogJiBXaWZpIGFyZSBub3QgbWFuZGF0b3J5IGV4Y2VwdCBmb3IgaGFuZG92ZXIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYmx1ZXRvb3RoJywgJyR7QkxVRVp9JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCd3cGEtc3VwcGxpY2FudCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59LXRlc3RzID0gInB5dGhvbiBweXRob24tZGJ1cyBweXRob24tcHlnb2JqZWN0IgorCitJTklUU0NSSVBUX05BTUUgPSAibmVhcmQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJkZWZhdWx0cyA2NCIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm5lYXJkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9maWxlcy9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvZmlsZXMvbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTAwMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvZmlsZXMvbmZzLXV0aWxzLWRlYmlhbml6ZS1zdGFydC1zdGF0ZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitbUEFUQ0hdIG5mcy11dGlsczogZGViaWFuaXplIHN0YXJ0LXN0YXRkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCittYWtlIHN0YXJ0LXN0YXRkIGNvbW1hbmQgdG8gdXNlIG5mc2NvbW1vbiBjb25maWd1cmUsIHRvby4KKworU2lnbmVkLW9mZi1ieTogSGVucmlrIFJpb21hciA8aGVucmlrLnJpb21hckBlcmljc3Nvbi5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHV0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlscy9zdGF0ZC9zdGFydC1zdGF0ZCBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitpbmRleCBlYzkzODNiLi4zOTY5YjhjIDEwMDc1NQorLS0tIGEvdXRpbHMvc3RhdGQvc3RhcnQtc3RhdGQKKysrKyBiL3V0aWxzL3N0YXRkL3N0YXJ0LXN0YXRkCitAQCAtNiw2ICs2LDEzIEBACisgIyBzaXRlLgorIFBBVEg9Ii9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluIgorIAorKyMgUmVhZCBjb25maWcKKytERUZBVUxURklMRT0vZXRjL2RlZmF1bHQvbmZzLWNvbW1vbgorK05FRURfSURNQVBEPQorK2lmIFsgLWYgJERFRkFVTFRGSUxFIF07IHRoZW4KKysgICAgLiAkREVGQVVMVEZJTEUKKytmaQorKworICMgRmlyc3QgdHJ5IHN5c3RlbWQgaWYgaXQncyBpbnN0YWxsZWQuCisgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIyBRdWl0IG9ubHkgaWYgdGhlIGNhbGwgd29ya2VkLgorQEAgLTEzLDQgKzIwLDQgQEAgaWYgc3lzdGVtY3RsIC0taGVscCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyBmaQorIAorICMgRmFsbCBiYWNrIHRvIGxhdW5jaGluZyBpdCBvdXJzZWx2ZXMuCistZXhlYyBycGMuc3RhdGQgLS1uby1ub3RpZnkKKytleGVjIHJwYy5zdGF0ZCAtLW5vLW5vdGlmeSAkU1RBVERPUFRTCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWM1MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvMDAwMS1pbmNsdWRlLXN5cy10eXBlcy5oLWZvci1nZXR0aW5nLXVfLXR5cGVkZWZzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gYTVlOTVhNDJlN2JjZWRkYzllY2FkMDY2OTRjMWEwNTg4ZjRiYWZjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDE0IEFwciAyMDE1IDA3OjIyOjQ3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGdldHRpbmcgdV8qIHR5cGVkZWZzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY2ZnLmggfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2NmZy5oIGIvY2ZnLmgKK2luZGV4IGQ0ZDRjYWIuLmZlNDllOGYgMTAwNjQ0CistLS0gYS9jZmcuaAorKysrIGIvY2ZnLmgKK0BAIC0zMyw2ICszMyw3IEBACisgI2lmbmRlZiBfQ09ORl9IXworICNkZWZpbmUgX0NPTkZfSF8KKyAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgInF1ZXVlLmgiCisgCisgc3RydWN0IGNvbmZfbGlzdF9ub2RlIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9saWJuZnNpZG1hcC9TZXRfbm9ib2R5X3VzZXJfZ3JvdXAucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorU2V0IG5vYm9keSB1c2VyIGFuZCBncm91cAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLSBhL2lkbWFwZC5jb25mCisrKysgYi9pZG1hcGQuY29uZgorQEAgLTE3LDggKzE3LDggQEAKKyAKKyBbTWFwcGluZ10KKyAKKy0jTm9ib2R5LVVzZXIgPSBub2JvZHkKKy0jTm9ib2R5LUdyb3VwID0gbm9ib2R5CisrTm9ib2R5LVVzZXIgPSBub2JvZHkKKytOb2JvZHktR3JvdXAgPSBub2dyb3VwCisgCisgW1RyYW5zbGF0aW9uXQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXAvZml4LWFjLXByZXJlcS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL2ZpeC1hYy1wcmVyZXEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxYzdjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwL2ZpeC1hYy1wcmVyZXEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTEsNyArMSw3IEBACisgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyAKKy1BQ19QUkVSRVEoWzIuNjhdKQorK0FDX1BSRVJFUShbMi42NV0pCisgQUNfSU5JVChbbGlibmZzaWRtYXBdLFswLjI1XSxbbGludXgtbmZzQHZnZXIua2VybmVsLm9yZ10pCisgQUNfQ09ORklHX1NSQ0RJUihbbmZzaWRtYXAuaF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbGlibmZzaWRtYXBfMC4yNS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwXzAuMjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1NzhlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL2xpYm5mc2lkbWFwXzAuMjUuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJORlMgaWQgbWFwcGluZyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDljNmEyYTBjYTYwMTdmZGE3Y2Q5MDVlZDI3MzliMzciCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jaXRpLnVtaWNoLmVkdS9wcm9qZWN0cy9uZnN2NC9saW51eC9saWJuZnNpZG1hcC8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1hYy1wcmVyZXEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2V0X25vYm9keV91c2VyX2dyb3VwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItZ2V0dGluZy11Xy10eXBlZGVmcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmFjNDg5M2M5MjcxNmFkZDFhMTQ0N2FlMDFkZjc3YWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU2ZDI0NWQ4NDQwMGUxMDMwZjhmNDBhNWEyN2RhNzYzNzA2OTBjNGE5MzJiYWYyNDkxMTBmMDQ3ZmU3ZWZjZiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0vaWRtYXBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vaWRtYXBkLmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzLzAwMDEtY29uZmlndXJlLUFsbG93LXRvLWV4cGxpY2l0bHktZGlzYWJsZS1uZnNpZG1hcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyNWZiNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy8wMDAxLWNvbmZpZ3VyZS1BbGxvdy10by1leHBsaWNpdGx5LWRpc2FibGUtbmZzaWRtYXAucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA5Yjg0Y2ZmMzA1ODY2YWJkMTUwY2YxYTRjNmU3ZTVlYmY4YTdlYjNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAxNSBOb3YgMjAxMyAyMzoyMTozNSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFsbG93IHRvIGV4cGxpY2l0bHkgZGlzYWJsZSBuZnNpZG1hcAorCisqIGtleXV0aWxzIGF2YWlsYWJpbGl0eSBpcyBhdXRvZGV0ZWN0ZWQgYW5kIGJ1aWxkcyBhcmVuJ3QgcmVwcm9kdWNpYmxlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxMCArKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjQzM2Q2Li4yOGE4ZjYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02OSw2ICs2OSwxMiBAQCBBQ19BUkdfRU5BQkxFKG5mc3Y0LAorIAlBQ19TVUJTVChlbmFibGVfbmZzdjQpCisgCUFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNWNCwgW3Rlc3QgIiRlbmFibGVfbmZzdjQiID0gInllcyJdKQorIAorK0FDX0FSR19FTkFCTEUobmZzaWRtYXAsCisrICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5mc2lkbWFwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0IGlkbWFwcGVyIEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgICAgICBlbmFibGVfbmZzaWRtYXA9JGVuYWJsZXZhbCwKKysgICAgICAgIGVuYWJsZV9uZnNpZG1hcD15ZXMpCisrCisgQUNfQVJHX0VOQUJMRShuZnN2NDEsCisgCVtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbmZzdjQxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIHN1cHBvcnQgZm9yIE5GU3Y0MSBAPDpAZGVmYXVsdD15ZXNAOj5AXSldLAorQEAgLTI5Niw3ICszMDIsNyBAQCBmaQorIAorIGRubCBlbmFibGUgbmZzaWRtYXAgd2hlbiBpdHMgc3VwcG9ydCBieSBsaWJuZnNpZG1hcAorIEFNX0NPTkRJVElPTkFMKENPTkZJR19ORlNEQ0xUUkFDSywgW3Rlc3QgIiRlbmFibGVfbmZzZGNsdHJhY2siID0gInllcyIgXSkKKy1BTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkYWNfY3ZfaGVhZGVyX2tleXV0aWxzX2gkYWNfY3ZfbGliX25mc2lkbWFwX25mczRfb3duZXJfdG9fdWlkIiA9ICJ5ZXN5ZXMiXSkKKytBTV9DT05ESVRJT05BTChDT05GSUdfTkZTSURNQVAsIFt0ZXN0ICIkZW5hYmxlX25mc2lkbWFwJGFjX2N2X2hlYWRlcl9rZXl1dGlsc19oJGFjX2N2X2xpYl9uZnNpZG1hcF9uZnM0X293bmVyX3RvX3VpZCIgPSAieWVzeWVzeWVzIl0pCisgCisgCisgaWYgdGVzdCAiJGtuZnNkX2N2X2dsaWJjMiIgPSBubzsgdGhlbgorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtbW91bnRkLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLW1vdW50ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxM2RkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLW1vdW50ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIE1vdW50IERhZW1vbgorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1zZXJ2ZXIuc2VydmljZQorCitbU2VydmljZV0KK0Vudmlyb25tZW50RmlsZT0tQFNZU0NPTkZESVJAL25mcy11dGlscy5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3JwYy5tb3VudGQgLUYgJE1PVU5URF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc2VydmVyLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXNlcnZlci5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0N2Q3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXNlcnZlci5zZXJ2aWNlCkBAIC0wLDAgKzEsMTggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIFNlcnZlcgorUmVxdWlyZXM9cnBjYmluZC5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZQorQWZ0ZXI9cnBjYmluZC5zZXJ2aWNlCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9uZnMtdXRpbHMuY29uZgorRXhlY1N0YXJ0UHJlPUBTQklORElSQC9leHBvcnRmcyAtcgorRXhlY1N0YXJ0PUBTQklORElSQC9ycGMubmZzZCAkTkZTRF9PUFRTICRORlNEX0NPVU5UCitFeGVjU3RvcD1AU0JJTkRJUkAvcnBjLm5mc2QgMAorRXhlY1N0b3BQb3N0PUBTQklORElSQC9leHBvcnRmcyAtZgorRXhlY1JlbG9hZD1AU0JJTkRJUkAvZXhwb3J0ZnMgLXIKK1N0YW5kYXJkRXJyb3I9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc3RhdGQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtc3RhdGQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDZkYWNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy1zdGF0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTIGZpbGUgbG9ja2luZyBzZXJ2aWNlCitBZnRlcj1ycGNiaW5kLnNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc2VydmljZQorQmVmb3JlPXJlbW90ZS1mcy1wcmUudGFyZ2V0CisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvbmZzLXV0aWxzLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjLnN0YXRkIC1GICRTVEFURF9PUFRTCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmODE4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtMS4yLjMtc20tbm90aWZ5LXJlc19pbml0LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0ZpeGVzIGVycm9ycyBsaWtlCitzbS1ub3RpZnlbMTA3MF06IEROUyByZXNvbHV0aW9uIG9mIGEuYi5jLmQuLmNvbSBmYWlsZWQ7IHJldHJ5aW5nIGxhdGVyCitUaGlzIGVycm9yIHdpbGwgb2NjdXIgYW55dGltZSBzbS1ub3RpZnkgaXMgcnVuIGJlZm9yZSB0aGUgbmV0d29yayBpZiBmdWxseSB1cCwKK3doaWNoIGlzIGhhcHBlbmluZyBtb3JlIGFuZCBtb3JlIHdpdGggcGFyYWxsZWwgc3RhcnR1cCBzeXN0ZW1zLgorVGhlIHJlc19pbml0KCkgY2FsbCBpcyBzaW1wbGUsIHNhZmUsIHF1aWNrLCBhbmQgYSBwYXRjaCB0byB1c2UgaXQgc2hvdWxkIGJlCithYmxlIHRvIGdvIHVwc3RyZWFtLiAgUHJlc3VtYWJseSB0aGUgd2hvbGUgcmVhc29uIHNtLW5vdGlmeSB0cmllcyBzZXZlcmFsCit0aW1lcyBpcyB0byB3YWl0IGZvciBwb3NzaWJsZSBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIGJ1dCB3aXRob3V0CitjYWxsaW5nIHJlc19pbml0KCkgaXQgd2lsbCBuZXZlciBiZSBhd2FyZSBvZiB0aG9zZSBjaGFuZ2VzCisKK0JhY2twb3J0ZWQgZHJvbSBGZWRvcmEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCisKK2RpZmYgLXVwIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYworLS0tIG5mcy11dGlscy0xLjIuMy91dGlscy9zdGF0ZC9zbS1ub3RpZnkuYy5vcmlnCTIwMTAtMDktMjggMDg6MjQ6MTYuMDAwMDAwMDAwIC0wNDAwCisrKysgbmZzLXV0aWxzLTEuMi4zL3V0aWxzL3N0YXRkL3NtLW5vdGlmeS5jCTIwMTAtMTAtMTUgMTY6NDQ6NDMuNDg3MTE5NjAxIC0wNDAwCitAQCAtMjgsNiArMjgsOSBAQAorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxncnAuaD4KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKysjaW5jbHVkZSA8cmVzb2x2Lmg+CisgCisgI2luY2x1ZGUgInNvY2thZGRyLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKK0BAIC04NCw2ICs4Nyw3IEBAIHNtbl9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKKyAJfTsKKyAJaW50IGVycm9yOworIAorKwlyZXNfaW5pdCgpOworIAllcnJvciA9IGdldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50LCAmYWkpOworIAlpZiAoZXJyb3IgIT0gMCkgeworIAkJeGxvZyhEX0dFTkVSQUwsICJnZXRhZGRyaW5mbygzKTogJXMiLCBnYWlfc3RyZXJyb3IoZXJyb3IpKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTNmMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mcy11dGlscy1Eby1ub3QtcGFzcy1DRkxBR1MtdG8tZ2NjLXdoaWxlLWJ1aWxkaW5nLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK25mcy11dGlsczogRG8gbm90IHBhc3MgQ0ZMQUdTIHRvIGdjYyB3aGlsZSBidWlsZGluZworCitEbyBub3QgcGFzcyBDRkxBR1MvTERGTEFHUyB0byBnY2Mgd2hpbGUgYnVpbGRpbmcsIFRoZSBuZWVkZWQgZmxhZ3MgaGFzCitiZWVuIHBhc3NlZCBieSB4eHhfQ0ZMQUdTPSQoQ0ZMQUdTX0ZPUl9CVUlMRCkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtIHwgICAgMiArKworIHRvb2xzL3JwY2dlbi9NYWtlZmlsZS5hbSAgIHwgICAgMiArKworIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS90b29scy9sb2NrdGVzdC9NYWtlZmlsZS5hbSBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitpbmRleCAzMTU2ODE1Li4xNzI5ZmQxIDEwMDY0NAorLS0tIGEvdG9vbHMvbG9ja3Rlc3QvTWFrZWZpbGUuYW0KKysrKyBiL3Rvb2xzL2xvY2t0ZXN0L01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDggQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyAKKyBDQz0kKENDX0ZPUl9CVUlMRCkKKytDRkxBR1M9CisrTERGTEFHUz0KKyBMSUJUT09MID0gQExJQlRPT0xAIC0tdGFnPUNDCisgCisgbm9pbnN0X1BST0dSQU1TID0gdGVzdGxrCitkaWZmIC0tZ2l0IGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtIGIvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCitpbmRleCA4YTllYzg5Li44YmFjZGFhIDEwMDY0NAorLS0tIGEvdG9vbHMvcnBjZ2VuL01ha2VmaWxlLmFtCisrKysgYi90b29scy9ycGNnZW4vTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsOCBAQAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorIENDPSQoQ0NfRk9SX0JVSUxEKQorK0NGTEFHUz0KKytMREZMQUdTPQorIExJQlRPT0wgPSBATElCVE9PTEAgLS10YWc9Q0MKKyAKKyBub2luc3RfUFJPR1JBTVMgPSBycGNnZW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzLXV0aWxzLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwMDdhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnMtdXRpbHMuY29uZgpAQCAtMCwwICsxLDM1IEBACisjIFBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIHRvIG5mcy11dGlscyAoY2xpZW50cyAmIHNlcnZlcikgc2VydmljZSBmaWxlcy4KKyMKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLm5mc2QuCitORlNEX09QVFM9IiIKKworIyBOdW1iZXIgb2Ygc2VydmVycyB0byBzdGFydCB1cDsgdGhlIGRlZmF1bHQgaXMgOCBzZXJ2ZXJzLgorTkZTRF9DT1VOVD0iIgorCisjIFdoZXJlIHRvIG1vdW50IG5mc2QgZmlsZXN5c3RlbTsgdGhlIGRlZmF1bHQgaXMgIi9wcm9jL2ZzL25mc2QiLgorUFJPQ05GU0RfTU9VTlRQT0lOVD0iIgorCisjIE9wdGlvbnMgdXNlZCB0byBtb3VudCBuZnNkIGZpbGVzeXN0ZW07IHRoZSBkZWZhdWx0IGlzICJydyxub2Rldixub2V4ZWMsbm9zdWlkIi4KK1BST0NORlNEX01PVU5UT1BUUz0iIgorCisjIE9wdGlvbnMgZm9yIHJwYy5tb3VudGQuCisjIElmIHlvdSBoYXZlIGEgcG9ydC1iYXNlZCBmaXJld2FsbCwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0IHVwCisjIGEgZml4ZWQgcG9ydCBoZXJlIHVzaW5nIHRoZSAtLXBvcnQgb3B0aW9uLgorTU9VTlREX09QVFM9IiIKKworIyBQYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byBuZnMtY29tbW9uIChuZnMgY2xpZW50cyAmIHNlcnZlcikgaW5pdCBzY3JpcHQuCisjCisKKyMgSWYgeW91IGRvIG5vdCBzZXQgdmFsdWVzIGZvciB0aGUgTkVFRF8gb3B0aW9ucywgdGhleSB3aWxsIGJlIGF0dGVtcHRlZAorIyBhdXRvZGV0ZWN0ZWQ7IHRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgcGVvcGxlLiBWYWxpZCBhbHRlcm5hdGl2ZXMKKyMgZm9yIHRoZSBORUVEXyBvcHRpb25zIGFyZSAieWVzIiBhbmQgIm5vIi4KKworIyBEbyB5b3Ugd2FudCB0byBzdGFydCB0aGUgc3RhdGQgZGFlbW9uPyBJdCBpcyBub3QgbmVlZGVkIGZvciBORlN2NC4KK05FRURfU1RBVEQ9IiIKKworIyBPcHRpb25zIHRvIHBhc3MgdG8gcnBjLnN0YXRkLgorIyBOLkIuIHN0YXRkIG5vcm1hbGx5IHJ1bnMgb24gYm90aCBjbGllbnQgYW5kIHNlcnZlciwgYW5kIHJ1bi10aW1lCisjIG9wdGlvbnMgc2hvdWxkIGJlIHNwZWNpZmllZCBhY2NvcmRpbmdseS4KKyMgU1RBVERfT1BUUz0iLXAgMzI3NjUgLW8gMzI3NjYiCitTVEFURF9PUFRTPSIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvbmZzY29tbW9uIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc2NvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTIyNjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc2NvbW1vbgpAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG5mcy1jb21tb24KKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgUmVxdWlyZWQtU3RvcDogICAgICRwb3J0bWFwIGh3Y2xvY2sKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBORlMgc3VwcG9ydCBmb3IgYm90aCBjbGllbnQgYW5kIHNlcnZlcgorIyBEZXNjcmlwdGlvbjogICAgICAgTkZTIGlzIGEgcG9wdWxhciBwcm90b2NvbCBmb3IgZmlsZSBzaGFyaW5nIGFjcm9zcworIyAgICAgICAgICAgICAgICAgICAgVENQL0lQIG5ldHdvcmtzLiBUaGlzIHNlcnZpY2UgcHJvdmlkZXMgdmFyaW91cworIyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIE5GUyBtb3VudHMuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjCisjIExvY2F0aW9uIG9mIGV4ZWN1dGFibGVzOgorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAteCAiJE5GU19TVEFURCIgfHwgTkZTX1NUQVREPS91c3Ivc2Jpbi9ycGMuc3RhdGQKK3Rlc3QgLXogIiRTVEFURF9QSUQiICYmIFNUQVREX1BJRD0vdmFyL3J1bi9ycGMuc3RhdGQucGlkCisjCisjIFRoZSBkZWZhdWx0IHN0YXRlIGRpcmVjdG9yeSBpcyAvdmFyL2xpYi9uZnMKK3Rlc3QgLW4gIiRORlNfU1RBVEVESVIiIHx8IE5GU19TVEFURURJUj0vdmFyL2xpYi9uZnMKKyMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN0YXJ0dXAgYW5kIHNodXRkb3duIGZ1bmN0aW9ucy4KKyMgIEFjdHVhbCBzdGFydHVwL3NodXRkb3duIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorCitzdGFydF9zdGF0ZCgpeworCWVjaG8gLW4gInN0YXJ0aW5nIHN0YXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfU1RBVEQiIC0tcGlkZmlsZSAiJFNUQVREX1BJRCIKKwllY2hvIGRvbmUKK30KK3N0b3Bfc3RhdGQoKXsKKwllY2hvIC1uICdzdG9wcGluZyBzdGF0ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tc2lnbmFsIDEgLS1waWRmaWxlICIkU1RBVERfUElEIgorCWVjaG8gZG9uZQorfQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgc3VwcG9ydGVkIG9wdGlvbnM6CisjICBzdGFydAorIyAgc3RvcAorIyAgcmVzdGFydDogc3RvcHMgYW5kIHN0YXJ0cyBtb3VudGQKKyNGSVhNRTogbmVlZCB0byBjcmVhdGUgdGhlIC92YXIvbGliL25mcy8uLi4gZGlyZWN0b3JpZXMKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzdGFydF9zdGF0ZDs7CisgIHN0b3ApCisJc3RvcF9zdGF0ZDs7CisgIHN0YXR1cykKKwlzdGF0dXMgJE5GU19TVEFURAorCWV4aXQgJD87OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKwlleGl0IDE7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL25mc3NlcnZlciBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNzZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkOTNhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlscy9uZnNzZXJ2ZXIKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbmZzLWtlcm5lbC1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRyZW1vdGVfZnMgbmZzLWNvbW1vbiAkcG9ydG1hcCBod2Nsb2NrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzIG5mcy1jb21tb24gJHBvcnRtYXAgaHdjbG9jaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEtlcm5lbCBORlMgc2VydmVyIHN1cHBvcnQKKyMgRGVzY3JpcHRpb246ICAgICAgIE5GUyBpcyBhIHBvcHVsYXIgcHJvdG9jb2wgZm9yIGZpbGUgc2hhcmluZyBhY3Jvc3MKKyMgICAgICAgICAgICAgICAgICAgIFRDUC9JUCBuZXR3b3Jrcy4gVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIE5GUyBzZXJ2ZXIKKyMgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIGNvbmZpZ3VyZWQgdmlhIHRoZQorIyAgICAgICAgICAgICAgICAgICAgL2V0Yy9leHBvcnRzIGZpbGUuCisjIyMgRU5EIElOSVQgSU5GTworIworIyBTdGFydHVwIHNjcmlwdCBmb3IgbmZzLXV0aWxzCisjCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKyMKKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE5GU19TRVJWRVJTIG1heSBiZSBzZXQgaW4gL2V0Yy9kZWZhdWx0L25mc2QKKyMgT3RoZXIgY29udHJvbCB2YXJpYWJsZXMgbWF5IGJlIG92ZXJyaWRkZW4gaGVyZSB0b28KK3Rlc3QgLXIgL2V0Yy9kZWZhdWx0L25mc2QgJiYgLiAvZXRjL2RlZmF1bHQvbmZzZAorIworIyBMb2NhdGlvbiBvZiBleGVjdXRhYmxlczoKK3Rlc3QgLXggIiRORlNfTU9VTlREIiB8fCBORlNfTU9VTlREPS91c3Ivc2Jpbi9ycGMubW91bnRkCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IE5GU19ORlNEPS91c3Ivc2Jpbi9ycGMubmZzZAorIworIyBUaGUgdXNlciBtb2RlIHByb2dyYW0gbXVzdCBhbHNvIGV4aXN0IChpdCBqdXN0IHN0YXJ0cyB0aGUga2VybmVsCisjIHRocmVhZHMgdXNpbmcgdGhlIGtlcm5lbCBtb2R1bGUgY29kZSkuCit0ZXN0IC14ICIkTkZTX01PVU5URCIgfHwgZXhpdCAwCit0ZXN0IC14ICIkTkZTX05GU0QiIHx8IGV4aXQgMAorIworIyBEZWZhdWx0IGlzIDggdGhyZWFkcywgdmFsdWUgaXMgc2V0dGFibGUgYmV0d2VlbiAxIGFuZCB0aGUgdHJ1ZWx5CisjIHJpZGljdWxvdXMgOTkKK3Rlc3QgIiRORlNfU0VSVkVSUyIgIT0gIiIgJiYgdGVzdCAiJE5GU19TRVJWRVJTIiAtZ3QgMCAmJiB0ZXN0ICIkTkZTX1NFUlZFUlMiIC1sdCAxMDAgfHwgTkZTX1NFUlZFUlM9OAorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3RhcnR1cCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zLgorIyAgQWN0dWFsIHN0YXJ0dXAvc2h1dGRvd24gaXMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjbW91bnRkCitzdGFydF9tb3VudGQoKXsKKwllY2hvIC1uICdzdGFydGluZyBtb3VudGQ6ICcKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tZXhlYyAiJE5GU19NT1VOVEQiIC0tICItZiAvZXRjL2V4cG9ydHMgJEAiCisJZWNobyBkb25lCit9CitzdG9wX21vdW50ZCgpeworCWVjaG8gLW4gJ3N0b3BwaW5nIG1vdW50ZDogJworCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAiJE5GU19NT1VOVEQiCisJZWNobyBkb25lCit9CisjCisjbmZzZAorc3RhcnRfbmZzZCgpeworICAgICAgICBtb2Rwcm9iZSAtcSBuZnNkCisJZ3JlcCAtcSBuZnNkIC9wcm9jL2ZpbGVzeXN0ZW1zIHx8IHsKKwkJZWNobyBORlMgZGFlbW9uIHN1cHBvcnQgbm90IGVuYWJsZWQgaW4ga2VybmVsCisJCWV4aXQgMQorICAgICAgICB9CisJZ3JlcCAtcSBuZnNkIC9wcm9jL21vdW50cyB8fCBtb3VudCAtdCBuZnNkIG5mc2QgL3Byb2MvZnMvbmZzZAorCWdyZXAgLXEgbmZzZCAvcHJvYy9tb3VudHMgfHwgeworCQllY2hvIG5mc2QgZmlsZXN5c3RlbSBjb3VsZCBub3QgYmUgbW91bnRlZCBhdCAvcHJvYy9mcy9uZnNkCisJCWV4aXQgMQorICAgICAgICB9CisKKwllY2hvIC1uICJzdGFydGluZyAkMSBuZnNkIGtlcm5lbCB0aHJlYWRzOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLWV4ZWMgIiRORlNfTkZTRCIgLS0gIiRAIgorCWVjaG8gZG9uZQorfQorZGVsYXlfbmZzZCgpeworCWZvciBkZWxheSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorCWRvCisJCWlmIHBpZG9mIG5mc2QgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvIC1uIC4KKwkJCXNsZWVwIDEKKwkJZWxzZQorCQkJcmV0dXJuIDAKKwkJZmkKKwlkb25lCisJcmV0dXJuIDEKK30KK3N0b3BfbmZzZCgpeworCSMgV0FSTklORzogdGhpcyBraWxscyBhbnkgcHJvY2VzcyB3aXRoIHRoZSBleGVjdXRhYmxlCisJIyBuYW1lICduZnNkJy4KKwllY2hvIC1uICdzdG9wcGluZyBuZnNkOiAnCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLW5hbWUgbmZzZAorCWlmIGRlbGF5X25mc2QgfHwgeworCQllY2hvIGZhaWxlZAorCQllY2hvICcgdXNpbmcgc2lnbmFsIDk6ICcKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgOSAtLW5hbWUgbmZzZAorCQlkZWxheV9uZnNkCisJfQorCXRoZW4KKwkJZWNobyBkb25lCisJZWxzZQorCQllY2hvIGZhaWxlZAorCWZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIHN1cHBvcnRlZCBvcHRpb25zOgorIyAgc3RhcnQKKyMgIHN0b3AKKyMgIHJlbG9hZDogcmVsb2FkcyB0aGUgZXhwb3J0cyBmaWxlCisjICByZXN0YXJ0OiBzdG9wcyBhbmQgc3RhcnRzIG1vdW50ZAorI0ZJWE1FOiBuZWVkIHRvIGNyZWF0ZSB0aGUgL3Zhci9saWIvbmZzLy4uLiBkaXJlY3RvcmllcworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWV4cG9ydGZzIC1yCisJc3RhcnRfbmZzZCAiJE5GU19TRVJWRVJTIgorCXN0YXJ0X21vdW50ZAorCXRlc3QgLXIgL2V0Yy9leHBvcnRzICYmIGV4cG9ydGZzIC1hOzsKKyAgc3RvcCkJZXhwb3J0ZnMgLXVhCisJc3RvcF9tb3VudGQKKwlzdG9wX25mc2Q7OworICBzdGF0dXMpCisJc3RhdHVzIC91c3Ivc2Jpbi9ycGMubW91bnRkCisJUkVUVkFMPSQ/CisJc3RhdHVzIG5mc2QKKwlydmFsPSQ/CisJWyAkUkVUVkFMIC1lcSAwIF0gJiYgZXhpdCAkcnZhbAorCWV4aXQgJFJFVFZBTDs7CisgIHJlbG9hZCkJdGVzdCAtciAvZXRjL2V4cG9ydHMgJiYgZXhwb3J0ZnMgLXI7OworICByZXN0YXJ0KQorCSQwIHN0b3AKKwkkMCBzdGFydDs7CisgICopCWVjaG8gIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMTs7Citlc2FjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L25mcy11dGlscy9uZnMtdXRpbHMvcHJvYy1mcy1uZnNkLm1vdW50IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL3Byb2MtZnMtbmZzZC5tb3VudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzA4MDFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzL3Byb2MtZnMtbmZzZC5tb3VudApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249TkZTRCBjb25maWd1cmF0aW9uIGZpbGVzeXN0ZW0KK0FmdGVyPXN5c3RlbWQtbW9kdWxlcy1sb2FkLnNlcnZpY2UKKworW01vdW50XQorV2hhdD1uZnNkCitXaGVyZT0vcHJvYy9mcy9uZnNkCitUeXBlPW5mc2QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvbmZzLXV0aWxzL25mcy11dGlsc18xLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEwMWRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9uZnMtdXRpbHMvbmZzLXV0aWxzXzEuMy4xLmJiCkBAIC0wLDAgKzEsMTQxIEBACitTVU1NQVJZID0gInVzZXJzcGFjZSB1dGlsaXRpZXMgZm9yIGtlcm5lbCBuZnMiCitERVNDUklQVElPTiA9ICJUaGUgbmZzLXV0aWxzIHBhY2thZ2UgcHJvdmlkZXMgYSBkYWVtb24gZm9yIHRoZSBrZXJuZWwgXAorTkZTIHNlcnZlciBhbmQgcmVsYXRlZCB0b29scy4iCitIT01FUEFHRSA9ICJodHRwOi8vbmZzLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJNSVQgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NWYzYTkzYTVjM2M3ODg4ZGU2MjNiNDZlYTA4NWE4NCIKKworIyB1dGlsLWxpbnV4IGZvciBsaWJibGtpZAorREVQRU5EUyA9ICJsaWJjYXAgbGlibmZzaWRtYXAgbGliZXZlbnQgdXRpbC1saW51eCBzcWxpdGUzIgorUkRFUEVORFNfJHtQTn0tY2xpZW50ID0gInJwY2JpbmQgYmFzaCIKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWNsaWVudCBiYXNoIgorUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1uZnNkIgorCitpbmhlcml0IHVzZXJhZGQKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfS1jbGllbnQiCitVU0VSQUREX1BBUkFNXyR7UE59LWNsaWVudCA9ICItLXN5c3RlbSAgLS1ob21lLWRpciAvdmFyL2xpYi9uZnMgXAorCQkJICAgICAgLS1zaGVsbCAvYmluL2ZhbHNlIC0tdXNlci1ncm91cCBycGN1c2VyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvbmZzLXV0aWxzLyR7UFZ9L25mcy11dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jb25maWd1cmUtQWxsb3ctdG8tZXhwbGljaXRseS1kaXNhYmxlLW5mc2lkbWFwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25mcy11dGlscy0xLjIuMy1zbS1ub3RpZnktcmVzX2luaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmZzc2VydmVyIFwKKyAgICAgICAgICAgZmlsZTovL25mc2NvbW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtc2VydmVyLnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vbmZzLW1vdW50ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL25mcy1zdGF0ZC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2MtZnMtbmZzZC5tb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtRG8tbm90LXBhc3MtQ0ZMQUdTLXRvLWdjYy13aGlsZS1idWlsZGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uZnMtdXRpbHMtZGViaWFuaXplLXN0YXJ0LXN0YXRkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkZTY3NmI5ZmYzNGI4ZjlhZGRjMWQwODAwZmFiZGY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZmNzlkNzBiN2I1OGIyYzhmOWI3OThjNTg3MjExMjdlODJiYjk2MDIyYWRjMDRhNWM0Y2IyNTE2MzBlNjk2YjgiCisKKyMgT25seSBrZXJuZWwtbW9kdWxlLW5mc2QgaXMgcmVxdWlyZWQgaGVyZSAoYnV0IGNhbiBiZSBidWlsdC1pbikgIC0gdGhlIG5mc2QgbW9kdWxlIHdpbGwKKyMgcHVsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBkZXBlbmRlbmNpZXMuCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAiJHtQTn0gJHtQTn0tY2xpZW50IgorSU5JVFNDUklQVF9OQU1FID0gIm5mc3NlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorSU5JVFNDUklQVF9OQU1FXyR7UE59LWNsaWVudCA9ICJuZnNjb21tb24iCitJTklUU0NSSVBUX1BBUkFNU18ke1BOfS1jbGllbnQgPSAiZGVmYXVsdHMgMTkgMjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAibmZzLXNlcnZlci5zZXJ2aWNlIG5mcy1tb3VudGQuc2VydmljZSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1jbGllbnQgPSAibmZzLXN0YXRkLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCisKKyMgLS1lbmFibGUtdXVpZCBpcyBuZWVkIGZvciBjcm9zcy1jb21waWxpbmcKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3RhdGR1c2VyPXJwY3VzZXIgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vdW50Y29uZmlnIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1saWJtb3VudC1tb3VudCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW5mc3Y0MSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtdXVpZCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXRpcnBjIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbmZzZGNsdHJhY2sgXAorICAgICAgICAgICAgICAgIC0td2l0aC1zdGF0ZHBhdGg9L3Zhci9saWIvbmZzL3N0YXRkIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyIKK1BBQ0tBR0VDT05GSUdbdGNwLXdyYXBwZXJzXSA9ICItLXdpdGgtdGNwLXdyYXBwZXJzLC0td2l0aG91dC10Y3Atd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tuZnNpZG1hcF0gPSAiLS1lbmFibGUtbmZzaWRtYXAsLS1kaXNhYmxlLW5mc2lkbWFwLGtleXV0aWxzIgorCitJTkhJQklUX0FVVE9fU1RBR0UgPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNsaWVudCAke1BOfS1zdGF0cyIKKworQ09ORkZJTEVTXyR7UE59LWNsaWVudCArPSAiJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL2V0YWIgXAorCQkJICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3JtdGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy94dGFiIFwKKwkJCSAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL25mcy9zdGF0ZC9zdGF0ZSBcCisJCQkgICAke3N5c2NvbmZkaXJ9L25mc21vdW50LmNvbmYiCisKK0ZJTEVTXyR7UE59LWNsaWVudCA9ICIke2Jhc2Vfc2JpbmRpcn0vKm1vdW50Lm5mcyogJHtzYmluZGlyfS8qc3RhdGQgXAorCQkgICAgICAke3NiaW5kaXJ9L3JwYy5pZG1hcGQgJHtzYmluZGlyfS9zbS1ub3RpZnkgXAorCQkgICAgICAke3NiaW5kaXJ9L3Nob3dtb3VudCAke3NiaW5kaXJ9L25mc3N0YXQgXAorCQkgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9uZnMgXAorCQkgICAgICAke3N5c2NvbmZkaXJ9L25mcy11dGlscy5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9uZnNtb3VudC5jb25mIFwKKwkJICAgICAgJHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uIFwKKwkJICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9uZnMtc3RhdGQuc2VydmljZSIKK0ZJTEVTXyR7UE59LXN0YXRzID0gIiR7c2JpbmRpcn0vbW91bnRzdGF0cyAke3NiaW5kaXJ9L25mc2lvc3RhdCIKK1JERVBFTkRTXyR7UE59LXN0YXRzID0gInB5dGhvbiIKKworRklMRVNfJHtQTn0gKz0gIiR7c3lzdGVtZF91bml0ZGlyfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIHNlZCAtaSAtZSAncyxzYmluZGlyID0gL3NiaW4sc2JpbmRpciA9ICR7YmFzZV9zYmluZGlyfSxnJyBcCisgICAgICAgICAgICAke1N9L3V0aWxzL21vdW50L01ha2VmaWxlLmFtCisKKyAgICAgICAgc2VkIC1pIC1lICdzLHNiaW5kaXIgPSAvc2JpbixzYmluZGlyID0gJHtiYXNlX3NiaW5kaXJ9LGcnIFwKKyAgICAgICAgICAgICR7U30vdXRpbHMvb3NkX2xvZ2luL01ha2VmaWxlLmFtCit9CisKKyMgTWFrZSBjbGVhbiBuZWVkZWQgYmVjYXVzZSB0aGUgcGFja2FnZSBjb21lcyB3aXRoCisjIHByZWNvbXBpbGVkIDY0LWJpdCBvYmplY3RzIHRoYXQgYnJlYWsgdGhlIGJ1aWxkCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJbWFrZSBjbGVhbgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNzZXJ2ZXIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25mc3NlcnZlcgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L25mc2NvbW1vbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbmZzY29tbW9uCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnMtdXRpbHMuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L3V0aWxzL21vdW50L25mc21vdW50LmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9uZnMtc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbmZzLW1vdW50ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L25mcy1zdGF0ZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorCSAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kCisJICAgIGVjaG8gIm5mc2QiID4gJHtEfSR7c3lzY29uZmRpcn0vbW9kdWxlcy1sb2FkLmQvbmZzZC5jb25mCisJICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy8KKwkgICAgbG4gLXNmIC4uL3Byb2MtZnMtbmZzZC5tb3VudCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy9wcm9jLWZzLW5mc2QubW91bnQKKwlmaQorCisJIyBrZXJuZWwgY29kZSBhcyBvZiAzLjggaGFyZC1jb2RlcyB0aGlzIHBhdGggYXMgYSBkZWZhdWx0CisJaW5zdGFsbCAtZCAke0R9L3Zhci9saWIvbmZzL3Y0cmVjb3ZlcnkKKworCSMgY2hvd24gdGhlIGRpcmVjdG9yaWVzIGFuZCBmaWxlcworCWNob3duIC1SIHJwY3VzZXI6cnBjdXNlciAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkCisJY2htb2QgMDY0NCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvbmZzL3N0YXRkL3N0YXRlCisKKwkjIHRoZSBmb2xsb3dpbmcgYXJlIGJ1aWx0IGJ5IENDX0ZPUl9CVUlMRAorCXJtIC1mICR7RH0ke3NiaW5kaXJ9L3JwY2RlYnVnCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vcnBjZ2VuCisJcm0gLWYgJHtEfSR7c2JpbmRpcn0vbG9ja3Rlc3QKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxNWEzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8uaW5jCkBAIC0wLDAgKzEsMzcgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub2Zvbm8ub3JnIgorU1VNTUFSWSAgPSAib3BlbiBzb3VyY2UgdGVsZXBob255IgorREVTQ1JJUFRJT04gPSAib0Zvbm8gaXMgYSBzdGFjayBmb3IgbW9iaWxlIHRlbGVwaG9ueSBkZXZpY2VzIG9uIExpbnV4LiBvRm9ubyBzdXBwb3J0cyBzcGVha2luZyB0byB0ZWxlcGhvbnkgZGV2aWNlcyB0aHJvdWdoIHNwZWNpZmljIGRyaXZlcnMsIG9yIHdpdGggZ2VuZXJpYyBBVCBjb21tYW5kcy4iCitMSUNFTlNFICA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vZm9uby5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTNjZTE3ZDU5NzhlZjM0NDVkZWYyNjViOTg4OTljMmVlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgc3lzdGVtZCBibHVldG9vdGgKKworREVQRU5EUyAgPSAiZGJ1cyBnbGliLTIuMCB1ZGV2IG1vYmlsZS1icm9hZGJhbmQtcHJvdmlkZXItaW5mbyIKKworSU5JVFNDUklQVF9OQU1FID0gIm9mb25vIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMjIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS13aXRoLXN5c3RlbWR1bml0ZGlyPSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vLC0td2l0aC1zeXN0ZW1kdW5pdGRpcj0iCitQQUNLQUdFQ09ORklHW2JsdWV6XSA9ICItLWVuYWJsZS1ibHVldG9vdGgsIC0tZGlzYWJsZS1ibHVldG9vdGgsICR7QkxVRVp9IgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLXRlc3QiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJvZm9uby5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L29mb25vICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vZm9ubworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tdGVzdHMiCisKK1JERVBFTkRTXyR7UE59ICs9ICJkYnVzIgorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldiAke3N5c3RlbWRfdW5pdGRpcn0iCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vJHtCUE59L3Rlc3QiCitSREVQRU5EU18ke1BOfS10ZXN0cyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdCBweXRob24tZGJ1cyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby8wMDAxLWJhY2t0cmFjZS1EaXNhYmxlLWZvci1ub24tZ2xpYmMtQy1saWJyYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2YjZkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gMmQ3MjlhZjA4OTdkN2Q3MmI4M2QxMTE4NzZmZWJmOWUwZWVjMWE2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDMgQXByIDIwMTUgMjA6NTA6NTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYmFja3RyYWNlOiBEaXNhYmxlIGZvciBub24tZ2xpYmMgQyBsaWJyYXJpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBzcmMvbG9nLmMgfCA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xvZy5jIGIvc3JjL2xvZy5jCitpbmRleCBmZWJjODc0Li45ZGI0YWU3IDEwMDY0NAorLS0tIGEvc3JjL2xvZy5jCisrKysgYi9zcmMvbG9nLmMKK0BAIC0zMCw3ICszMCw5IEBACisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxkbGZjbi5oPgorIAorICNpbmNsdWRlICJvZm9uby5oIgorQEAgLTIxOSw4ICsyMjEsOSBAQCBzdGF0aWMgdm9pZCBzaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pCisgeworIAlvZm9ub19lcnJvcigiQWJvcnRpbmcgKHNpZ25hbCAlZCkgWyVzXSIsIHNpZ25vLCBwcm9ncmFtX2V4ZWMpOworIAorKyNpZmRlZiBfX0dMSUJDX18KKyAJcHJpbnRfYmFja3RyYWNlKDIpOworLQorKyNlbmRpZgorIAlleGl0KEVYSVRfRkFJTFVSRSk7CisgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4Y2E3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm8vUmV2ZXJ0LXRlc3QtQ29udmVydC10by1QeXRob24tMy5wYXRjaApAQCAtMCwwICsxLDEyNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRnJvbSA1NzJmYzIzZjZlZmQ2NWEyZWY5ZTZjOTU3YjI1MDYxMDg3Mzg2NzJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMjUgQXVnIDIwMTQgMTY6NTk6MzkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJ0ZXN0OiBDb252ZXJ0IHRvIFB5dGhvbiAzIgorCitUaGlzIHJldmVydHMgY29tbWl0IGMwMjdhYjlmYmMxYThlOGM5ZTc2YmNkMTIzZGYxYWQ3Njk2MzA3YzIuCistLS0KKyB0ZXN0L2FjdGl2YXRlLWNvbnRleHQgICAgICAgICAgfCAgMiArLQorIHRlc3QvYW5zd2VyLWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9iYWNrdHJhY2UgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NhbmNlbC11c3NkICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWNvbm5tYW4tZW5hYmxlICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtZGlhbC1udW1iZXIgICAgICAgICAgfCAgMiArLQorIHRlc3QvY2RtYS1oYW5ndXAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jZG1hLWxpc3QtY2FsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzICAgICAgfCAgMiArLQorIHRlc3QvY2hhbmdlLXBpbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dCAgIHwgIDIgKy0KKyB0ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvY3JlYXRlLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9kZWFjdGl2YXRlLWFsbCAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2RlYWN0aXZhdGUtY29udGV4dCAgICAgICAgfCAgMiArLQorIHRlc3QvZGlhbC1udW1iZXIgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyAgIHwgIDIgKy0KKyB0ZXN0L2Rpc2FibGUtZ3BycyAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZGlzYWJsZS1tb2RlbSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9kaXNwbGF5LWljb24gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VuYWJsZS1jYnMgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZW5hYmxlLWdwcnMgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9lbmFibGUtbW9kZW0gICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2VudGVyLXBpbiAgICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvZ2V0LWljb24gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9nZXQtb3BlcmF0b3JzICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLWFjdGl2ZSAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9oYW5ndXAtYWxsICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2hhbmd1cC1jYWxsICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvaGFuZ3VwLW11bHRpcGFydHkgICAgICAgICB8ICAyICstCisgdGVzdC9ob2xkLWFuZC1hbnN3ZXIgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2luaXRpYXRlLXVzc2QgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9saXN0LWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3QtY29udGV4dHMgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbGlzdC1tZXNzYWdlcyAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9saXN0LW1vZGVtcyAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L2xpc3Qtb3BlcmF0b3JzICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvbG9jay1waW4gICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9sb2NrZG93bi1tb2RlbSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L21vbml0b3Itb2Zvbm8gICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC9vZmZsaW5lLW1vZGVtICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L29ubGluZS1tb2RlbSAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcHJpdmF0ZS1jaGF0ICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MgIHwgIDIgKy0KKyB0ZXN0L3JlY2VpdmUtc21zICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVqZWN0LWNhbGxzICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3JlbGVhc2UtYW5kLXN3YXAgICAgICAgICAgfCAgMiArLQorIHRlc3QvcmVtb3ZlLWNvbnRleHRzICAgICAgICAgICB8ICAyICstCisgdGVzdC9yZXNldC1waW4gICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycyAgICAgICAgfCAgMiArLQorIHRlc3Qvc2VuZC1zbXMgICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXVzc2QgICAgICAgICAgICAgICAgIHwgIDQgKystLQorIHRlc3Qvc2VuZC12Y2FsICAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZW5kLXZjYXJkICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWNicy10b3BpY3MgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eSAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1mYXN0LWRvcm1hbmN5ICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LWdzbS1iYW5kICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtbWljLXZvbHVtZSAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1tbXMtZGV0YWlscyAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LW1zaXNkbiAgICAgICAgICAgICAgICB8ICAyICstCisgdGVzdC9zZXQtcm9hbWluZy1hbGxvd2VkICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC1zcGVha2VyLXZvbHVtZSAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSAgICAgICB8ICAyICstCisgdGVzdC9zZXQtdHR5ICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3NldC11bXRzLWJhbmQgICAgICAgICAgICAgfCAgMiArLQorIHRlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyAgICAgICB8ICAyICstCisgdGVzdC9zd2FwLWNhbGxzICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZSAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYWxsLWJhcnJpbmcgICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncyAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1jYnMgICAgICAgICAgICAgICAgICB8ICA0ICsrLS0KKyB0ZXN0L3Rlc3QtZ25zcyAgICAgICAgICAgICAgICAgfCAgNCArKy0tCisgdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZyAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtbW9kZW0gICAgICAgICAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1uZXR3b3JrLXJlZ2lzdHJhdGlvbiB8ICAyICstCisgdGVzdC90ZXN0LXBob25lYm9vayAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24gICAgfCAgMiArLQorIHRlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNtcyAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgdGVzdC90ZXN0LXNzICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiAgICAgICAgfCAgMiArLQorIHRlc3QvdGVzdC1zcy1jb250cm9sLWNmICAgICAgICB8ICAyICstCisgdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgICAgICAgIHwgIDIgKy0KKyB0ZXN0L3Rlc3Qtc3RrLW1lbnUgICAgICAgICAgICAgfCAzNCArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgdGVzdC91bmxvY2stcGluICAgICAgICAgICAgICAgIHwgIDIgKy0KKyA5NCBmaWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKSwgMTI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0IGIvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CitpbmRleCBlNGZjNzAyLi40MjQxMzk2IDEwMDc1NQorLS0tIGEvdGVzdC9hY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2FjdGl2YXRlLWNvbnRleHQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9hbnN3ZXItY2FsbHMgYi90ZXN0L2Fuc3dlci1jYWxscworaW5kZXggZGFhNzk0Yi4uNDVmZjA4ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvYW5zd2VyLWNhbGxzCisrKysgYi90ZXN0L2Fuc3dlci1jYWxscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvYmFja3RyYWNlIGIvdGVzdC9iYWNrdHJhY2UKK2luZGV4IDAzYzc2MzIuLmM2MjQ3MDkgMTAwNzU1CistLS0gYS90ZXN0L2JhY2t0cmFjZQorKysrIGIvdGVzdC9iYWNrdHJhY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IG9zCisgaW1wb3J0IHJlCitkaWZmIC0tZ2l0IGEvdGVzdC9jYW5jZWwtdXNzZCBiL3Rlc3QvY2FuY2VsLXVzc2QKK2luZGV4IGU3NTU5YmEuLjE3OTdmMjYgMTAwNzU1CistLS0gYS90ZXN0L2NhbmNlbC11c3NkCisrKysgYi90ZXN0L2NhbmNlbC11c3NkCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY2RtYS1jb25ubWFuLWRpc2FibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1kaXNhYmxlCitpbmRleCAzYWRjMTRkLi4wZGRjMGNkIDEwMDc1NQorLS0tIGEvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorKysrIGIvdGVzdC9jZG1hLWNvbm5tYW4tZGlzYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUgYi90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKK2luZGV4IGFjMTZhMmQuLmEzY2NhMDEgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtY29ubm1hbi1lbmFibGUKKysrKyBiL3Rlc3QvY2RtYS1jb25ubWFuLWVuYWJsZQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIgYi90ZXN0L2NkbWEtZGlhbC1udW1iZXIKK2luZGV4IDY4MzQzMWUuLjljZGZiMjQgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvY2RtYS1kaWFsLW51bWJlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NkbWEtaGFuZ3VwIGIvdGVzdC9jZG1hLWhhbmd1cAoraW5kZXggNDFmZmE2MC4uNDkzZWNlNCAxMDA3NTUKKy0tLSBhL3Rlc3QvY2RtYS1oYW5ndXAKKysrKyBiL3Rlc3QvY2RtYS1oYW5ndXAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLWxpc3QtY2FsbCBiL3Rlc3QvY2RtYS1saXN0LWNhbGwKK2luZGV4IGIxMzIzNTMuLjVkMzZhNjkgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtbGlzdC1jYWxsCisrKysgYi90ZXN0L2NkbWEtbGlzdC1jYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9jZG1hLXNldC1jcmVkZW50aWFscyBiL3Rlc3QvY2RtYS1zZXQtY3JlZGVudGlhbHMKK2luZGV4IGE2MGM4NmUuLmEyODZiMGUgMTAwNzU1CistLS0gYS90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCisrKysgYi90ZXN0L2NkbWEtc2V0LWNyZWRlbnRpYWxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY2hhbmdlLXBpbiBiL3Rlc3QvY2hhbmdlLXBpbgoraW5kZXggMzAxYzZjZS4uMDAwY2U1MyAxMDA3NTUKKy0tLSBhL3Rlc3QvY2hhbmdlLXBpbgorKysrIGIvdGVzdC9jaGFuZ2UtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLWludGVybmV0LWNvbnRleHQgYi90ZXN0L2NyZWF0ZS1pbnRlcm5ldC1jb250ZXh0CitpbmRleCAxMDg5MDUzLi5lZmQwOTk4IDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorKysrIGIvdGVzdC9jcmVhdGUtaW50ZXJuZXQtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2NyZWF0ZS1tbXMtY29udGV4dCBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitpbmRleCA1OTgzMzZmLi5lNWJlMDhkIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbW1zLWNvbnRleHQKKysrKyBiL3Rlc3QvY3JlYXRlLW1tcy1jb250ZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvY3JlYXRlLW11bHRpcGFydHkgYi90ZXN0L2NyZWF0ZS1tdWx0aXBhcnR5CitpbmRleCAxYjc2MDEwLi45NzA0N2MzIDEwMDc1NQorLS0tIGEvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorKysrIGIvdGVzdC9jcmVhdGUtbXVsdGlwYXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RlYWN0aXZhdGUtYWxsIGIvdGVzdC9kZWFjdGl2YXRlLWFsbAoraW5kZXggNWFhODU4Ny4uNDI3MDA5ZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKKysrKyBiL3Rlc3QvZGVhY3RpdmF0ZS1hbGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kZWFjdGl2YXRlLWNvbnRleHQgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAoraW5kZXggNWM4NmE3MS4uZGY0N2QyZSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGVhY3RpdmF0ZS1jb250ZXh0CisrKysgYi90ZXN0L2RlYWN0aXZhdGUtY29udGV4dAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2RpYWwtbnVtYmVyIGIvdGVzdC9kaWFsLW51bWJlcgoraW5kZXggZmU1YWRhZC4uZWU2NzRkOSAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlhbC1udW1iZXIKKysrKyBiL3Rlc3QvZGlhbC1udW1iZXIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9kaXNhYmxlLWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvZGlzYWJsZS1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDgxMWU0ZmEuLjM2MDk4MTYgMTAwNzU1CistLS0gYS90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L2Rpc2FibGUtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKK2RpZmYgLS1naXQgYS90ZXN0L2Rpc2FibGUtZ3BycyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitpbmRleCA2MWNlMjE2Li5jNmM0MGE1IDEwMDc1NQorLS0tIGEvdGVzdC9kaXNhYmxlLWdwcnMKKysrKyBiL3Rlc3QvZGlzYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzYWJsZS1tb2RlbSBiL3Rlc3QvZGlzYWJsZS1tb2RlbQoraW5kZXggNmZiYTg1Ny4uY2E4YzhkOCAxMDA3NTUKKy0tLSBhL3Rlc3QvZGlzYWJsZS1tb2RlbQorKysrIGIvdGVzdC9kaXNhYmxlLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZGlzcGxheS1pY29uIGIvdGVzdC9kaXNwbGF5LWljb24KK2luZGV4IGFjNDA4MTguLjc1M2QxNGQgMTAwNzU1CistLS0gYS90ZXN0L2Rpc3BsYXktaWNvbgorKysrIGIvdGVzdC9kaXNwbGF5LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtY2JzIGIvdGVzdC9lbmFibGUtY2JzCitpbmRleCA0YThiZjY2Li5jMDhiZjJiIDEwMDc1NQorLS0tIGEvdGVzdC9lbmFibGUtY2JzCisrKysgYi90ZXN0L2VuYWJsZS1jYnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbmFibGUtZ3BycyBiL3Rlc3QvZW5hYmxlLWdwcnMKK2luZGV4IDY4ZDVlZjAuLjg2NjQ4OTEgMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1ncHJzCisrKysgYi90ZXN0L2VuYWJsZS1ncHJzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvZW5hYmxlLW1vZGVtIGIvdGVzdC9lbmFibGUtbW9kZW0KK2luZGV4IGZjNTk1OGEuLmRmYWFhYTggMTAwNzU1CistLS0gYS90ZXN0L2VuYWJsZS1tb2RlbQorKysrIGIvdGVzdC9lbmFibGUtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9lbnRlci1waW4gYi90ZXN0L2VudGVyLXBpbgoraW5kZXggOTU1NjM2My4uYzZlZTY2OSAxMDA3NTUKKy0tLSBhL3Rlc3QvZW50ZXItcGluCisrKysgYi90ZXN0L2VudGVyLXBpbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2dldC1pY29uIGIvdGVzdC9nZXQtaWNvbgoraW5kZXggNTU2OWEzMy4uZmRhYWVlNyAxMDA3NTUKKy0tLSBhL3Rlc3QvZ2V0LWljb24KKysrKyBiL3Rlc3QvZ2V0LWljb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtb3BlcmF0b3JzIGIvdGVzdC9nZXQtb3BlcmF0b3JzCitpbmRleCAwZjM1YzgwLi42MjM1NGM1IDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtb3BlcmF0b3JzCisrKysgYi90ZXN0L2dldC1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlIGIvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCitpbmRleCA3YmE2MzY1Li43N2QyMGQwIDEwMDc1NQorLS0tIGEvdGVzdC9nZXQtdGVjaC1wcmVmZXJlbmNlCisrKysgYi90ZXN0L2dldC10ZWNoLXByZWZlcmVuY2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMsIHN5cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZSBiL3Rlc3QvaGFuZ3VwLWFjdGl2ZQoraW5kZXggODJlMGViMC4uNWFmNjJhYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFjdGl2ZQorKysrIGIvdGVzdC9oYW5ndXAtYWN0aXZlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWFsbCBiL3Rlc3QvaGFuZ3VwLWFsbAoraW5kZXggM2EwMTM4ZC4uMzI5MzNkYiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLWFsbAorKysrIGIvdGVzdC9oYW5ndXAtYWxsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvaGFuZ3VwLWNhbGwgYi90ZXN0L2hhbmd1cC1jYWxsCitpbmRleCA1YTJkZTIwLi40NDcwMjBjIDEwMDc1NQorLS0tIGEvdGVzdC9oYW5ndXAtY2FsbAorKysrIGIvdGVzdC9oYW5ndXAtY2FsbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2hhbmd1cC1tdWx0aXBhcnR5IGIvdGVzdC9oYW5ndXAtbXVsdGlwYXJ0eQoraW5kZXggMjQ3NTFjMy4uNDhmZTM0MiAxMDA3NTUKKy0tLSBhL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKKysrKyBiL3Rlc3QvaGFuZ3VwLW11bHRpcGFydHkKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9ob2xkLWFuZC1hbnN3ZXIgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgoraW5kZXggZGEzYmU1Ny4uMmM0N2UyNyAxMDA3NTUKKy0tLSBhL3Rlc3QvaG9sZC1hbmQtYW5zd2VyCisrKysgYi90ZXN0L2hvbGQtYW5kLWFuc3dlcgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L2luaXRpYXRlLXVzc2QgYi90ZXN0L2luaXRpYXRlLXVzc2QKK2luZGV4IGZhZjUwZDAuLmQ3MDIyZjEgMTAwNzU1CistLS0gYS90ZXN0L2luaXRpYXRlLXVzc2QKKysrKyBiL3Rlc3QvaW5pdGlhdGUtdXNzZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK0BAIC00NSw3ICs0NSw3IEBAIGlmIHN0YXRlID09ICJpZGxlIjoKKyBwcmludCgiU3RhdGU6ICVzIiAlIChzdGF0ZSkpCisgCisgd2hpbGUgc3RhdGUgPT0gInVzZXItcmVzcG9uc2UiOgorLQlyZXNwb25zZSA9IGlucHV0KCJFbnRlciByZXNwb25zZTogIikKKysJcmVzcG9uc2UgPSByYXdfaW5wdXQoIkVudGVyIHJlc3BvbnNlOiAiKQorIAorIAlyZXN1bHQgPSB1c3NkLlJlc3BvbmQocmVzcG9uc2UsIHRpbWVvdXQ9MTAwKQorIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1jYWxscyBiL3Rlc3QvbGlzdC1jYWxscworaW5kZXggZjNlZTk5MS4uMDg2NjhjNiAxMDA3NTUKKy0tLSBhL3Rlc3QvbGlzdC1jYWxscworKysrIGIvdGVzdC9saXN0LWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9saXN0LWNvbnRleHRzIGIvdGVzdC9saXN0LWNvbnRleHRzCitpbmRleCA3ODI3OGNhLi5mMGQ0MDk0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LWNvbnRleHRzCisrKysgYi90ZXN0L2xpc3QtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L2xpc3QtbWVzc2FnZXMgYi90ZXN0L2xpc3QtbWVzc2FnZXMKK2luZGV4IDlmNWJjZTMuLmNmY2NiZWEgMTAwNzU1CistLS0gYS90ZXN0L2xpc3QtbWVzc2FnZXMKKysrKyBiL3Rlc3QvbGlzdC1tZXNzYWdlcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1tb2RlbXMgYi90ZXN0L2xpc3QtbW9kZW1zCitpbmRleCBiOWY1MTBhLi5lZDY2MTI0IDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW1vZGVtcworKysrIGIvdGVzdC9saXN0LW1vZGVtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIAorZGlmZiAtLWdpdCBhL3Rlc3QvbGlzdC1vcGVyYXRvcnMgYi90ZXN0L2xpc3Qtb3BlcmF0b3JzCitpbmRleCAwNjRjNGUzLi4zNDliZjQxIDEwMDc1NQorLS0tIGEvdGVzdC9saXN0LW9wZXJhdG9ycworKysrIGIvdGVzdC9saXN0LW9wZXJhdG9ycworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L2xvY2stcGluIGIvdGVzdC9sb2NrLXBpbgoraW5kZXggOTZlYTljMi4uNTU3OTczNSAxMDA3NTUKKy0tLSBhL3Rlc3QvbG9jay1waW4KKysrKyBiL3Rlc3QvbG9jay1waW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9sb2NrZG93bi1tb2RlbSBiL3Rlc3QvbG9ja2Rvd24tbW9kZW0KK2luZGV4IDRlMDQyMDUuLjc4MWFiYjYgMTAwNzU1CistLS0gYS90ZXN0L2xvY2tkb3duLW1vZGVtCisrKysgYi90ZXN0L2xvY2tkb3duLW1vZGVtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvbW9uaXRvci1vZm9ubyBiL3Rlc3QvbW9uaXRvci1vZm9ubworaW5kZXggODgzMDc1Ny4uYmQzMTYxNyAxMDA3NTUKKy0tLSBhL3Rlc3QvbW9uaXRvci1vZm9ubworKysrIGIvdGVzdC9tb25pdG9yLW9mb25vCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorQEAgLTYsNyArNiw3IEBAIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorIAorIF9kYnVzMnB5ID0geworLQlkYnVzLlN0cmluZyA6IHN0ciwKKysJZGJ1cy5TdHJpbmcgOiB1bmljb2RlLAorIAlkYnVzLlVJbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQzMiA6IGludCwKKyAJZGJ1cy5JbnQxNiA6IGludCwKK2RpZmYgLS1naXQgYS90ZXN0L29mZmxpbmUtbW9kZW0gYi90ZXN0L29mZmxpbmUtbW9kZW0KK2luZGV4IGU4YzA0M2EuLmVhMWY1MjIgMTAwNzU1CistLS0gYS90ZXN0L29mZmxpbmUtbW9kZW0KKysrKyBiL3Rlc3Qvb2ZmbGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9vbmxpbmUtbW9kZW0gYi90ZXN0L29ubGluZS1tb2RlbQoraW5kZXggMDI5YzRhNS4uMzEwZWQ3ZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvb25saW5lLW1vZGVtCisrKysgYi90ZXN0L29ubGluZS1tb2RlbQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9wcml2YXRlLWNoYXQgYi90ZXN0L3ByaXZhdGUtY2hhdAoraW5kZXggZTdlNTQwNi4uZWYyZWY2YyAxMDA3NTUKKy0tLSBhL3Rlc3QvcHJpdmF0ZS1jaGF0CisrKysgYi90ZXN0L3ByaXZhdGUtY2hhdAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Byb2Nlc3MtY29udGV4dC1zZXR0aW5ncyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitpbmRleCA4YTNlY2ZhLi4wZjA1OGIyIDEwMDc1NQorLS0tIGEvdGVzdC9wcm9jZXNzLWNvbnRleHQtc2V0dGluZ3MKKysrKyBiL3Rlc3QvcHJvY2Vzcy1jb250ZXh0LXNldHRpbmdzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBvcworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9yZWNlaXZlLXNtcyBiL3Rlc3QvcmVjZWl2ZS1zbXMKK2luZGV4IGEwYzY5MTUuLmMyM2ViMTQgMTAwNzU1CistLS0gYS90ZXN0L3JlY2VpdmUtc21zCisrKysgYi90ZXN0L3JlY2VpdmUtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvcmVqZWN0LWNhbGxzIGIvdGVzdC9yZWplY3QtY2FsbHMKK2luZGV4IDcxYjI0M2UuLjllZGYxZmYgMTAwNzU1CistLS0gYS90ZXN0L3JlamVjdC1jYWxscworKysrIGIvdGVzdC9yZWplY3QtY2FsbHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3JlbGVhc2UtYW5kLWFuc3dlciBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitpbmRleCBkZWM4ZTE3Li4yNWZkODE4IDEwMDc1NQorLS0tIGEvdGVzdC9yZWxlYXNlLWFuZC1hbnN3ZXIKKysrKyBiL3Rlc3QvcmVsZWFzZS1hbmQtYW5zd2VyCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcCBiL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAoraW5kZXggY2I4Yzg0ZS4uN2IzNTY5ZiAxMDA3NTUKKy0tLSBhL3Rlc3QvcmVsZWFzZS1hbmQtc3dhcAorKysrIGIvdGVzdC9yZWxlYXNlLWFuZC1zd2FwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvcmVtb3ZlLWNvbnRleHRzIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK2luZGV4IGI1NDE4NGUuLmM1MDgyY2IgMTAwNzU1CistLS0gYS90ZXN0L3JlbW92ZS1jb250ZXh0cworKysrIGIvdGVzdC9yZW1vdmUtY29udGV4dHMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Jlc2V0LXBpbiBiL3Rlc3QvcmVzZXQtcGluCitpbmRleCAzZmJkMTI2Li5iNDI5MjU0IDEwMDc1NQorLS0tIGEvdGVzdC9yZXNldC1waW4KKysrKyBiL3Rlc3QvcmVzZXQtcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2Nhbi1mb3Itb3BlcmF0b3JzIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK2luZGV4IGI0ZmMwNWUuLjc0OWM3MTAgMTAwNzU1CistLS0gYS90ZXN0L3NjYW4tZm9yLW9wZXJhdG9ycworKysrIGIvdGVzdC9zY2FuLWZvci1vcGVyYXRvcnMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXNtcyBiL3Rlc3Qvc2VuZC1zbXMKK2luZGV4IDk4ODA4YWEuLmUwNjQ0NGQgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtc21zCisrKysgYi90ZXN0L3NlbmQtc21zCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2VuZC11c3NkIGIvdGVzdC9zZW5kLXVzc2QKK2luZGV4IGEyMGUwOTguLmU1ODU4ODMgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdXNzZAorKysrIGIvdGVzdC9zZW5kLXVzc2QKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitAQCAtNDYsNyArNDYsNyBAQCBpZiBzdGF0ZSA9PSAiaWRsZSI6CisgcHJpbnQoIlN0YXRlOiAlcyIgJSAoc3RhdGUpKQorIAorIHdoaWxlIHN0YXRlID09ICJ1c2VyLXJlc3BvbnNlIjoKKy0JcmVzcG9uc2UgPSBpbnB1dCgiRW50ZXIgcmVzcG9uc2U6ICIpCisrCXJlc3BvbnNlID0gcmF3X2lucHV0KCJFbnRlciByZXNwb25zZTogIikKKyAKKyAJcHJpbnQodXNzZC5SZXNwb25kKHJlc3BvbnNlLCB0aW1lb3V0PTEwMCkpCisgCitkaWZmIC0tZ2l0IGEvdGVzdC9zZW5kLXZjYWwgYi90ZXN0L3NlbmQtdmNhbAoraW5kZXggNTY2ZGFlZi4uN2Y4MjcyYiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2VuZC12Y2FsCisrKysgYi90ZXN0L3NlbmQtdmNhbAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NlbmQtdmNhcmQgYi90ZXN0L3NlbmQtdmNhcmQKK2luZGV4IDRkZWRmNTEuLjI1MGIzNmYgMTAwNzU1CistLS0gYS90ZXN0L3NlbmQtdmNhcmQKKysrKyBiL3Rlc3Qvc2VuZC12Y2FyZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcgYi90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDQ5ZDFjZTAuLjlmZDM1OGIgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYWxsLWZvcndhcmRpbmcKKysrKyBiL3Rlc3Qvc2V0LWNhbGwtZm9yd2FyZGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtY2JzLXRvcGljcyBiL3Rlc3Qvc2V0LWNicy10b3BpY3MKK2luZGV4IGRiOTVlMTYuLjc4ZDZkNDQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1jYnMtdG9waWNzCisrKysgYi90ZXN0L3NldC1jYnMtdG9waWNzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LWNvbnRleHQtcHJvcGVydHkgYi90ZXN0L3NldC1jb250ZXh0LXByb3BlcnR5CitpbmRleCA1ZmY3YTY3Li42NGE2ZmI4IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorKysrIGIvdGVzdC9zZXQtY29udGV4dC1wcm9wZXJ0eQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1mYXN0LWRvcm1hbmN5IGIvdGVzdC9zZXQtZmFzdC1kb3JtYW5jeQoraW5kZXggZWY3N2JjZC4uN2JmNzcxNSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKKysrKyBiL3Rlc3Qvc2V0LWZhc3QtZG9ybWFuY3kKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IGRidXMKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtZ3NtLWJhbmQgYi90ZXN0L3NldC1nc20tYmFuZAoraW5kZXggYjM3YmNiNS4uM2MxN2MxMCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LWdzbS1iYW5kCisrKysgYi90ZXN0L3NldC1nc20tYmFuZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1taWMtdm9sdW1lIGIvdGVzdC9zZXQtbWljLXZvbHVtZQoraW5kZXggY2Q2YzczZi4uZTBiZmY0OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1pYy12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LW1pYy12b2x1bWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgaW1wb3J0IHN5cworIGltcG9ydCBkYnVzCitkaWZmIC0tZ2l0IGEvdGVzdC9zZXQtbW1zLWRldGFpbHMgYi90ZXN0L3NldC1tbXMtZGV0YWlscworaW5kZXggNmVlNTlmYS4uZDJkMDgzOCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LW1tcy1kZXRhaWxzCisrKysgYi90ZXN0L3NldC1tbXMtZGV0YWlscworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1tc2lzZG4gYi90ZXN0L3NldC1tc2lzZG4KK2luZGV4IGI1ZmU4MTkuLjAxZjI4NGQgMTAwNzU1CistLS0gYS90ZXN0L3NldC1tc2lzZG4KKysrKyBiL3Rlc3Qvc2V0LW1zaXNkbgorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cworIGltcG9ydCBzeXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQgYi90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKK2luZGV4IDY5OGM4YjYuLjllM2UwNTggMTAwNzU1CistLS0gYS90ZXN0L3NldC1yb2FtaW5nLWFsbG93ZWQKKysrKyBiL3Rlc3Qvc2V0LXJvYW1pbmctYWxsb3dlZAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3NldC1zcGVha2VyLXZvbHVtZSBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitpbmRleCA2ZDRlMzAxLi43OTYyZjM5IDEwMDc1NQorLS0tIGEvdGVzdC9zZXQtc3BlYWtlci12b2x1bWUKKysrKyBiL3Rlc3Qvc2V0LXNwZWFrZXItdm9sdW1lCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZSBiL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQoraW5kZXggYjU0OWFiYy4uMjY2NmNiZCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXRlY2gtcHJlZmVyZW5jZQorKysrIGIvdGVzdC9zZXQtdGVjaC1wcmVmZXJlbmNlCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXR0eSBiL3Rlc3Qvc2V0LXR0eQoraW5kZXggZWVkMWZiYS4uNTNkNmI5OSAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXR0eQorKysrIGIvdGVzdC9zZXQtdHR5CitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVtdHMtYmFuZCBiL3Rlc3Qvc2V0LXVtdHMtYmFuZAoraW5kZXggMGJhZTVjNC4uYzFlNjQ0OCAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVtdHMtYmFuZAorKysrIGIvdGVzdC9zZXQtdW10cy1iYW5kCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cyBiL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworaW5kZXggMjg4ZDRlMS4uYTRlZmU0ZiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc2V0LXVzZS1zbXMtcmVwb3J0cworKysrIGIvdGVzdC9zZXQtdXNlLXNtcy1yZXBvcnRzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3Qvc3dhcC1jYWxscyBiL3Rlc3Qvc3dhcC1jYWxscworaW5kZXggMDE4YThkMy4uZWViMjU3YiAxMDA3NTUKKy0tLSBhL3Rlc3Qvc3dhcC1jYWxscworKysrIGIvdGVzdC9zd2FwLWNhbGxzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBzeXMKKyBpbXBvcnQgZGJ1cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1hZHZpY2Utb2YtY2hhcmdlIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK2luZGV4IDZlODdlNjEuLjBmMWY1N2YgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtYWR2aWNlLW9mLWNoYXJnZQorKysrIGIvdGVzdC90ZXN0LWFkdmljZS1vZi1jaGFyZ2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLWJhcnJpbmcgYi90ZXN0L3Rlc3QtY2FsbC1iYXJyaW5nCitpbmRleCBlZWRiNjlmLi5iZTRhYjU3IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LWNhbGwtYmFycmluZworKysrIGIvdGVzdC90ZXN0LWNhbGwtYmFycmluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNhbGwtZm9yd2FyZGluZyBiL3Rlc3QvdGVzdC1jYWxsLWZvcndhcmRpbmcKK2luZGV4IDVkYjg0ZDcuLjAxYTcyOTQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCisrKysgYi90ZXN0L3Rlc3QtY2FsbC1mb3J3YXJkaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1jYWxsLXNldHRpbmdzIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK2luZGV4IDQzNTU5NGMuLjVkN2VlNDkgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2FsbC1zZXR0aW5ncworKysrIGIvdGVzdC90ZXN0LWNhbGwtc2V0dGluZ3MKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWNicyBiL3Rlc3QvdGVzdC1jYnMKK2luZGV4IGE1Y2VjMDYuLjEzY2RkODAgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3QtY2JzCisrKysgYi90ZXN0L3Rlc3QtY2JzCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IGRidXMubWFpbmxvb3AuZ2xpYgorQEAgLTc4LDcgKzc4LDcgQEAgZGVmIHNldF90b3BpY3MoY2JzKToKKyAJaW52YWxpZERhdGEgPSBGYWxzZTsKKyAJaW5kZXggPSAwCisgCistCXRvcGljcyA9IGlucHV0KCdFbnRlciB0aGUgdG9waWMgSUQocykgeW91IHdhbnQgdG8gcmVnaXN0ZXIgdG86ICcpCisrCXRvcGljcyA9IHJhd19pbnB1dCgnRW50ZXIgdGhlIHRvcGljIElEKHMpIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHRvOiAnKQorIAorIAl3aGlsZSBpbmRleCA8IGxlbih0b3BpY3MpOgorIAkJaWYgdG9waWNzW2luZGV4XSA9PSAnLCcgb3IgdG9waWNzW2luZGV4XSA9PSAnLSc6CitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LWduc3MgYi90ZXN0L3Rlc3QtZ25zcworaW5kZXggNmFlNjRkYi4uYWEwYjE2MCAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1nbnNzCisrKysgYi90ZXN0L3Rlc3QtZ25zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitAQCAtNDAsNyArNDAsNyBAQCBkZWYgcHJpbnRfbWVudSgpOgorIGRlZiBzdGRpbl9oYW5kbGVyKGNoYW5uZWwsIGNvbmRpdGlvbiwgZ25zcywgcGF0aCk6CisgCWluX2tleSA9IG9zLnJlYWQoY2hhbm5lbC51bml4X2dldF9mZCgpLCAxNjApLnJzdHJpcCgpLmRlY29kZSgnVVRGLTgnKQorIAlpZiBpbl9rZXkgPT0gJzAnOgorLQkJeG1sID0gaW5wdXQoJ3R5cGUgdGhlIGVsZW1lbnQgYW5kIHByZXNzIGVudGVyOiAnKQorKwkJeG1sID0gcmF3X2lucHV0KCd0eXBlIHRoZSBlbGVtZW50IGFuZCBwcmVzcyBlbnRlcjogJykKKyAJCXRyeToKKyAJCQlnbnNzLlNlbmRQb3NpdGlvbmluZ0VsZW1lbnQoZGJ1cy5TdHJpbmcoeG1sKSkKKyAJCQlwcmludCgib2siKQorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1tZXNzYWdlLXdhaXRpbmcgYi90ZXN0L3Rlc3QtbWVzc2FnZS13YWl0aW5nCitpbmRleCA0MzI4NjJlLi5iOTNmYmYzIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworKysrIGIvdGVzdC90ZXN0LW1lc3NhZ2Utd2FpdGluZworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyBpbXBvcnQgc3lzCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW1vZGVtIGIvdGVzdC90ZXN0LW1vZGVtCitpbmRleCBhYTM4YjFmLi4yOWRiZjE0IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW1vZGVtCisrKysgYi90ZXN0L3Rlc3QtbW9kZW0KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uIGIvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCitpbmRleCA2OGI0MzQ3Li5jNWFkNTg2IDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LW5ldHdvcmstcmVnaXN0cmF0aW9uCisrKysgYi90ZXN0L3Rlc3QtbmV0d29yay1yZWdpc3RyYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgaW1wb3J0IHN5cworZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1waG9uZWJvb2sgYi90ZXN0L3Rlc3QtcGhvbmVib29rCitpbmRleCA0MjY0NmQzLi4xMTZmZDRmIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXBob25lYm9vaworKysrIGIvdGVzdC90ZXN0LXBob25lYm9vaworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgZGJ1cywgc3lzCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uIGIvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCitpbmRleCBkOTcyYWQzLi5lY2M2YWZiIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXB1c2gtbm90aWZpY2F0aW9uCisrKysgYi90ZXN0L3Rlc3QtcHVzaC1ub3RpZmljYXRpb24KK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNtYXJ0LW1lc3NhZ2luZyBiL3Rlc3QvdGVzdC1zbWFydC1tZXNzYWdpbmcKK2luZGV4IGYyMmVmZDIuLjE4OGFjMWUgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCisrKysgYi90ZXN0L3Rlc3Qtc21hcnQtbWVzc2FnaW5nCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zbXMgYi90ZXN0L3Rlc3Qtc21zCitpbmRleCAzMGFjNjUxLi40OTkzNWUxIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNtcworKysrIGIvdGVzdC90ZXN0LXNtcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorQEAgLTEzMiw3ICsxMzIsNyBAQCBkZWYgc3RkaW5faGFuZGxlcihjaGFubmVsLCBjb25kaXRpb24sIHNtcywgdmFsdWUsIG51bWJlcik6CisgCQlsb2NrID0gIm9uIgorIAkJaWYgaW5fa2V5ID09ICcwJzoKKyAJCQlwcmludF9zZW5kX3Ntc19tZW51KCkKKy0JCQlzbXNfdHlwZSA9IGlucHV0KCdTZWxlY3QgU01TIHR5cGU6ICcpCisrCQkJc21zX3R5cGUgPSByYXdfaW5wdXQoJ1NlbGVjdCBTTVMgdHlwZTogJykKKyAKKyAJCQlpZiBzbXNfdHlwZSA9PSAnMSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgdmFsdWUpCitAQCAtMTUwLDQ5ICsxNTAsNDkgQEAgZGVmIHN0ZGluX2hhbmRsZXIoY2hhbm5lbCwgY29uZGl0aW9uLCBzbXMsIHZhbHVlLCBudW1iZXIpOgorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzEnOgorIAkJCW1lc3NhZ2VfZGVsaXZlcnlfcmVwb3J0KHNtcywgMSkKKy0JCQlzZW5kX21zZyA9IGlucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKysJCQlzZW5kX21zZyA9IHJhd19pbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisgCQkJaWYgc2VuZF9tc2cgPT0gJ3knOgorIAkJCQltZXNzYWdlX3NlbmQoc21zLCBudW1iZXIsICgiKDEpIiArIHZhbHVlICsKKyAJCQkJCQkiOiBVc2VEZWxpdmVyeVJlcG9ydHNbVFJVRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICcyJzoKKyAJCQltZXNzYWdlX2RlbGl2ZXJ5X3JlcG9ydChzbXMsIDApCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigyKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFVzZURlbGl2ZXJ5UmVwb3J0c1tGQUxTRV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICczJzoKKyAJCQltZXNzYWdlX3NlcnZpY2VfY2VudGVyX2FkZHJlc3Moc21zLCBTQ0EpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIigzKSAiICsgdmFsdWUgKworIAkJCQkJCSI6IFNlcnZpY2VDZW50ZXJBZGRyZXNzIikpCisgCisgCQllbGlmIGluX2tleSA9PSAnNCc6CisgCQkJbWVzc2FnZV9iZWFyZXIoc21zLCAicHMtb25seSIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcywgbnVtYmVyLCAoIig0KSAiICsgdmFsdWUgKworIAkJCQkJCSI6IEJlYXJlcltwcy1vbmx5XSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzUnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLW9ubHkiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNSkgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbY3Mtb25seV0iKSkKKyAKKyAJCWVsaWYgaW5fa2V5ID09ICc2JzoKKyAJCQltZXNzYWdlX2JlYXJlcihzbXMsICJwcy1wcmVmZXJyZWQiKQorLQkJCXNlbmRfbXNnID0gaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorKwkJCXNlbmRfbXNnID0gcmF3X2lucHV0KCdTZW5kIHRlc3QgbWVzc2FnZVt5L25dPzogJykKKyAJCQlpZiBzZW5kX21zZyA9PSAneSc6CisgCQkJCW1lc3NhZ2Vfc2VuZChzbXMsIG51bWJlciwgKCIoNikgIiArIHZhbHVlICsKKyAJCQkJCQkiOiBCZWFyZXJbcHMtcHJlZmVycmVkXSIpKQorIAorIAkJZWxpZiBpbl9rZXkgPT0gJzcnOgorIAkJCW1lc3NhZ2VfYmVhcmVyKHNtcywgImNzLXByZWZlcnJlZCIpCistCQkJc2VuZF9tc2cgPSBpbnB1dCgnU2VuZCB0ZXN0IG1lc3NhZ2VbeS9uXT86ICcpCisrCQkJc2VuZF9tc2cgPSByYXdfaW5wdXQoJ1NlbmQgdGVzdCBtZXNzYWdlW3kvbl0/OiAnKQorIAkJCWlmIHNlbmRfbXNnID09ICd5JzoKKyAJCQkJbWVzc2FnZV9zZW5kKHNtcyxudW1iZXIsICgiKDcpICIgKyB2YWx1ZSArCisgCQkJCQkJIjogQmVhcmVyW2NzLXByZWZlcnJlZF0iKSkKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MgYi90ZXN0L3Rlc3Qtc3MKK2luZGV4IDRjZDg3MzIuLjJjODA4MDYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MKKysrKyBiL3Rlc3QvdGVzdC1zcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBpbXBvcnQgc3lzCisgaW1wb3J0IGRidXMKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jYiBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitpbmRleCBkZGFlNmQzLi44NmJhYzliIDEwMDc1NQorLS0tIGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2IKKysrKyBiL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNiCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR0xpYgorIAorZGlmZiAtLWdpdCBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNmIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK2luZGV4IDA5NWViNWQuLmQzMGJmNGYgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jZgorKysrIGIvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY2YKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uMworKyMhL3Vzci9iaW4vcHl0aG9uCisgCisgZnJvbSBnaS5yZXBvc2l0b3J5IGltcG9ydCBHTGliCisgCitkaWZmIC0tZ2l0IGEvdGVzdC90ZXN0LXNzLWNvbnRyb2wtY3MgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworaW5kZXggODE4MDQ3NC4uZTBlZDFkMSAxMDA3NTUKKy0tLSBhL3Rlc3QvdGVzdC1zcy1jb250cm9sLWNzCisrKysgYi90ZXN0L3Rlc3Qtc3MtY29udHJvbC1jcworQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK2RpZmYgLS1naXQgYS90ZXN0L3Rlc3Qtc3RrLW1lbnUgYi90ZXN0L3Rlc3Qtc3RrLW1lbnUKK2luZGV4IDBjZjhmYTIuLmFjMGE1YmQgMTAwNzU1CistLS0gYS90ZXN0L3Rlc3Qtc3RrLW1lbnUKKysrKyBiL3Rlc3QvdGVzdC1zdGstbWVudQorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24zCisrIyEvdXNyL2Jpbi9weXRob24KKyAKKyBmcm9tIGdpLnJlcG9zaXRvcnkgaW1wb3J0IEdMaWIKKyAKK0BAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJCWluZGV4ICs9IDEKKyAKKyAJCXByaW50KCJcbkRlZmF1bHQ6ICVkIiAlIChkZWZhdWx0KSkKKy0JCXNlbGVjdCA9IGlucHV0KCJFbnRlciBTZWxlY3Rpb24gKHQsIGIpOiIpCisrCQlzZWxlY3QgPSByYXdfaW5wdXQoIkVudGVyIFNlbGVjdGlvbiAodCwgYik6IikKKyAKKyAJCWlmIHNlbGVjdCA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC03NSw3ICs3NSw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAkJcHJpbnQoIkRpc3BsYXlUZXh0ICglcykiICUgKHRpdGxlKSkKKyAJCXByaW50KCJJY29uOiAoJWQpIiAlIChpbnQoaWNvbikpKQorIAkJcHJpbnQoIlVyZ2VudDogKCVkKSIgJSAodXJnZW50KSkKKy0JCWtleSA9IGlucHV0KCJQcmVzcyByZXR1cm4gdG8gY2xlYXIgKCd0JyB0ZXJtaW5hdGVzLCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBjbGVhciAoJ3QnIHRlcm1pbmF0ZXMsICIKKyAJCQkJCQkiJ2InIGdvZXMgYmFjaywgJ24nIGJ1c3ksICIKKyAJCQkJCQkiJ3cnIHJldHVybiBhbmQgd2FpdCk6IikKKyAKK0BAIC0xMDgsNyArMTA4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiSGlkZSB0eXBpbmc6ICglcykiICUgKGhpZGVfdHlwaW5nKSkKKyAJCXByaW50KCJFbnRlciBjaGFyYWN0ZXJzLCBtaW46ICVkLCBtYXg6ICVkOiIgJSAobWluX2NoYXJzLAorIAkJCQkJCQkJbWF4X2NoYXJzKSkKKy0JCXVzZXJpbiA9IGlucHV0KCIiKQorKwkJdXNlcmluID0gcmF3X2lucHV0KCIiKQorIAorIAkJcmV0dXJuIHVzZXJpbgorIAorQEAgLTEyMiw3ICsxMjIsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJIaWRlIHR5cGluZzogKCVzKSIgJSAoaGlkZV90eXBpbmcpKQorIAkJcHJpbnQoIkVudGVyIGRpZ2l0cywgbWluOiAlZCwgbWF4OiAlZDoiICUgKG1pbl9jaGFycywKKyAJCQkJCQkJCW1heF9jaGFycykpCistCQl1c2VyaW4gPSBpbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKysJCXVzZXJpbiA9IHJhd19pbnB1dCgiJ3QnIHRlcm1pbmF0ZXMsICdiJyBnb2VzIGJhY2s6IikKKyAKKyAJCWlmIHVzZXJpbiA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xMzYsNyArMTM2LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0S2V5KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgS2V5ICh0LCBiKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBLZXkgKHQsIGIpOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTUwLDcgKzE1MCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgUmVxdWVzdERpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgRGlnaXQgKHQsIGIpOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIERpZ2l0ICh0LCBiKToiKQorIAorIAkJaWYga2V5ID09ICdiJzoKKyAJCQlyYWlzZSBHb0JhY2soIlVzZXIgd2lzaGVzIHRvIGdvIGJhY2siKQorQEAgLTE2NCw3ICsxNjQsNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJZGVmIFJlcXVlc3RRdWlja0RpZ2l0KHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKysJCWtleSA9IHJhd19pbnB1dCgiUXVpY2sgZGlnaXQgKDAtOSwgKiwgIywgdCwgYik6IikKKyAKKyAJCWlmIGtleSA9PSAnYic6CisgCQkJcmFpc2UgR29CYWNrKCJVc2VyIHdpc2hlcyB0byBnbyBiYWNrIikKK0BAIC0xNzgsNyArMTc4LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBSZXF1ZXN0Q29uZmlybWF0aW9uKHNlbGYsIHRpdGxlLCBpY29uKToKKyAJCXByaW50KCJUaXRsZTogKCVzKSIgJSAodGl0bGUpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiRW50ZXIgQ29uZmlybWF0aW9uICh0LCBiLCB5LCBuKToiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIGIsIHksIG4pOiIpCisgCisgCQlpZiBrZXkgPT0gJ2InOgorIAkJCXJhaXNlIEdvQmFjaygiVXNlciB3aXNoZXMgdG8gZ28gYmFjayIpCitAQCAtMTk0LDcgKzE5NCw3IEBAIGNsYXNzIFN0a0FnZW50KGRidXMuc2VydmljZS5PYmplY3QpOgorIAlkZWYgQ29uZmlybUNhbGxTZXR1cChzZWxmLCBpbmZvLCBpY29uKToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTIwOSw3ICsyMDksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCXByaW50KCJJbmZvcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKyAJCXByaW50KCJVUkwgKCVzKSIgJSAodXJsKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAoeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAneSc6CisgCQkJcmV0dXJuIFRydWUKK0BAIC0yMzIsNyArMjMyLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlzaWduYWwuYWxhcm0oNSkKKyAKKyAJCXRyeToKKy0JCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorKwkJCWtleSA9IHJhd19pbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgZW5kIG9mIgorIAkJCQkJCQkgIiBzaW5nbGUgdG9uZSAodCk6IikKKyAJCQlzaWduYWwuYWxhcm0oMCkKKyAKK0BAIC0yNTAsNyArMjUwLDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCQlwcmludCgiTG9vcFRvbmU6ICVzIiAlICh0b25lKSkKKyAJCXByaW50KCJUZXh0OiAlcyIgJSAodGV4dCkpCisgCQlwcmludCgiSWNvbjogJWQiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgcmV0dXJuIHRvIGVuZCBiZWZvcmUgdGltZW91dCAiCisrCQlrZXkgPSByYXdfaW5wdXQoIlByZXNzIHJldHVybiB0byBlbmQgYmVmb3JlIHRpbWVvdXQgIgorIAkJCQkiKCd0JyB0ZXJtaW5hdGVzLCAndycgcmV0dXJuIGFuZCB3YWl0KToiKQorIAorIAkJaWYga2V5ID09ICd3JzoKK0BAIC0yNzksNyArMjc5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBEaXNwbGF5QWN0aW9uKHNlbGYsIHRleHQsIGljb24pOgorIAkJcHJpbnQoIlRleHQ6ICglcykiICUgKHRleHQpKQorIAkJcHJpbnQoIkljb246ICglZCkiICUgKGludChpY29uKSkpCistCQlrZXkgPSBpbnB1dCgiUHJlc3MgJ3QnIHRvIHRlcm1pbmF0ZSB0aGUgc2Vzc2lvbiAiKQorKwkJa2V5ID0gcmF3X2lucHV0KCJQcmVzcyAndCcgdG8gdGVybWluYXRlIHRoZSBzZXNzaW9uICIpCisgCisgCQlpZiBrZXkgPT0gJ3QnOgorIAkJCXJhaXNlIEVuZFNlc3Npb24oIlVzZXIgd2lzaGVzIHRvIHRlcm1pbmF0ZSBzZXNzaW9uIikKK0BAIC0yODksNyArMjg5LDcgQEAgY2xhc3MgU3RrQWdlbnQoZGJ1cy5zZXJ2aWNlLk9iamVjdCk6CisgCWRlZiBDb25maXJtT3BlbkNoYW5uZWwoc2VsZiwgaW5mbywgaWNvbik6CisgCQlwcmludCgiT3BlbiBjaGFubmVsIGNvbmZpcm1hdGlvbjogKCVzKSIgJSAoaW5mbykpCisgCQlwcmludCgiSWNvbjogKCVkKSIgJSAoaW50KGljb24pKSkKKy0JCWtleSA9IGlucHV0KCJFbnRlciBDb25maXJtYXRpb24gKHQsIHksIG4pOiIpCisrCQlrZXkgPSByYXdfaW5wdXQoIkVudGVyIENvbmZpcm1hdGlvbiAodCwgeSwgbik6IikKKyAKKyAJCWlmIGtleSA9PSAndCc6CisgCQkJcmFpc2UgRW5kU2Vzc2lvbigiVXNlciB3aXNoZXMgdG8gdGVybWluYXRlIHNlc3Npb24iKQorQEAgLTI5OSw3ICsyOTksNyBAQCBjbGFzcyBTdGtBZ2VudChkYnVzLnNlcnZpY2UuT2JqZWN0KToKKyAJCQlyZXR1cm4gRmFsc2UKKyAKKyBfZGJ1czJweSA9IHsKKy0JZGJ1cy5TdHJpbmcgOiBzdHIsCisrCWRidXMuU3RyaW5nIDogdW5pY29kZSwKKyAJZGJ1cy5VSW50MzIgOiBpbnQsCisgCWRidXMuSW50MzIgOiBpbnQsCisgCWRidXMuSW50MTYgOiBpbnQsCitAQCAtMzk2LDcgKzM5Niw3IEBAIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgCQlleGNlcHQ6CisgCQkJcGFzcworIAorLQkJc2VsZWN0ID0gaW50KGlucHV0KCJFbnRlciBTZWxlY3Rpb246ICIpKQorKwkJc2VsZWN0ID0gaW50KHJhd19pbnB1dCgiRW50ZXIgU2VsZWN0aW9uOiAiKSkKKyAJCXN0ay5TZWxlY3RJdGVtKHNlbGVjdCwgcGF0aCkKKyAJZWxpZiBtb2RlID09ICdhZ2VudCc6CisgCQlwYXRoID0gIi90ZXN0L2FnZW50IgorZGlmZiAtLWdpdCBhL3Rlc3QvdW5sb2NrLXBpbiBiL3Rlc3QvdW5sb2NrLXBpbgoraW5kZXggNjFmNDc2NS4uMTBiNjYyNiAxMDA3NTUKKy0tLSBhL3Rlc3QvdW5sb2NrLXBpbgorKysrIGIvdGVzdC91bmxvY2stcGluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbjMKKysjIS91c3IvYmluL3B5dGhvbgorIAorIGltcG9ydCBkYnVzCisgaW1wb3J0IHN5cworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vL29mb25vIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9vZm9ubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzk5NzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9uby9vZm9ubwpAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKworREFFTU9OPS91c3Ivc2Jpbi9vZm9ub2QKK1BJREZJTEU9L3Zhci9ydW4vb2Zvbm9kLnBpZAorREVTQz0iVGVsZXBob255IGRhZW1vbiIKKworaWYgWyAtZiAvZXRjL2RlZmF1bHQvb2Zvbm8gXSA7IHRoZW4KKwkuIC9ldGMvZGVmYXVsdC9vZm9ubworZmkKKworc2V0IC1lCisKK2RvX3N0YXJ0KCkgeworCSREQUVNT04KK30KKworZG9fc3RvcCgpIHsKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIG9mb25vZCAtLXF1aWV0Cit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwllY2hvICJTdGFydGluZyAkREVTQyIKKwlkb19zdGFydAorCTs7CisgIHN0b3ApCisJZWNobyAiU3RvcHBpbmcgJERFU0MiCisJZG9fc3RvcAorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCWVjaG8gIlJlc3RhcnRpbmcgJERFU0MiCisJZG9fc3RvcAorCXNsZWVwIDEKKwlkb19zdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTYuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vXzEuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmMTNlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb2Zvbm8vb2Zvbm9fMS4xNi5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG9mb25vLmluYworCitTUkNfVVJJICA9ICJcCisgICR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbmV0d29yay8ke0JQTn0vJHtCUH0udGFyLnh6IFwKKyAgZmlsZTovL29mb25vIFwKKyAgZmlsZTovL1JldmVydC10ZXN0LUNvbnZlcnQtdG8tUHl0aG9uLTMucGF0Y2ggXAorICBmaWxlOi8vMDAwMS1iYWNrdHJhY2UtRGlzYWJsZS1mb3Itbm9uLWdsaWJjLUMtbGlicmFyaWVzLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjMzFiNWI1NWExZDY4MzU0YmZmNzcxZDNlZGYwMjgyOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNiOThkYWRlY2U4YmM4MDRjMGJkMTZiOTZkM2RiNWEzYmIwZjg0YWY2NGIzZDY3OTI0ZGEyZDFhNzU0YjA3IgorCitDRkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtRF9HTlVfU09VUkNFIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29mb25vL29mb25vX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFmYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vZm9uby9vZm9ub19naXQuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSBvZm9uby5pbmMKKworUwkgPSAiJHtXT1JLRElSfS9naXQiCitTUkNSRVYgPSAiMTQ1NDRkNTk5NjgzNmY2Mjg2MTNjMmNlNTQ0MzgwZWU2ZmM4ZjUxNCIKK1BWCSA9ICIwLjEyLWdpdCR7U1JDUFZ9IgorUFIgPSAicjUiCisKK1NSQ19VUkkgID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbmV0d29yay9vZm9uby9vZm9uby5naXQgXAorCSAgICBmaWxlOi8vb2Zvbm8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgJHtTfS9ib290c3RyYXAKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvYWRkLXRlc3Qtc3VwcG9ydC1mb3ItYnVzeWJveC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjMjVjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2FkZC10ZXN0LXN1cHBvcnQtZm9yLWJ1c3lib3gucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorQWRqdXN0IHRlc3QgY2FzZXMgdG8gd29yayB3aXRoIGJ1c3lib3guCisKKy0gUmVwbGFjZSBkZCBwYXJhbWV0ZXIgIm9icyIgd2l0aCAiYnMiLgorLSBSZXBsYWNlICJoZWFkIC08bnVtPiIgd2l0aCAiaGVhZCAtbiA8bnVtPiIuCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NoLTYuOHAxLm9yaWcvcmVncmVzcy9jaXBoZXItc3BlZWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvY2lwaGVyLXNwZWVkLnNoCitAQCAtMTcsNyArMTcsNyBAQCBmb3IgYyBpbiBgJHtTU0h9IC1RIGNpcGhlcmA7IGRvIG49MDsgZm9yCisgCQlwcmludGYgIiUtNjBzIiAiJGMvJG06IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTIgLW0gJG0gLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorQEAgLTQyLDcgKzQyLDcgQEAgZm9yIGMgaW4gJGNpcGhlcnM7IGRvCisgCQlwcmludGYgIiUtNjBzIiAiJGM6IgorIAkJKCAke1NTSH0gLW8gJ2NvbXByZXNzaW9uIG5vJyBcCisgCQkJLUYgJE9CSi9zc2hfcHJveHkgLTEgLWMgJGMgc29tZWhvc3QgXAorLQkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIG9icz0zMmsiXCcgXAorKwkJCWV4ZWMgc2ggLWMgXCciZGQgb2Y9L2Rldi9udWxsIGJzPTMyayJcJyBcCisgCQk8ICR7REFUQX0gKSAyPiYxIHwgZ2V0Ynl0ZXMKKyAJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorIAkJCWZhaWwgInNzaCAtMSBmYWlsZWQgd2l0aCBjaXBoZXIgJGMiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3RyYW5zZmVyLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MvdHJhbnNmZXIuc2gKK0BAIC0xNSw3ICsxNSw3IEBAIGZvciBwIGluICR7U1NIX1BST1RPQ09MU307IGRvCisgCWZvciBzIGluIDEwIDEwMCAxayAzMmsgNjRrIDEyOGsgMjU2azsgZG8KKyAJCXRyYWNlICJwcm90byAkcCBkZC1zaXplICR7c30iCisgCQlybSAtZiAke0NPUFl9CistCQlkZCBpZj0kREFUQSBvYnM9JHtzfSAyPiAvZGV2L251bGwgfCBcCisrCQlkZCBpZj0kREFUQSBicz0ke3N9IDI+IC9kZXYvbnVsbCB8IFwKKyAJCQkke1NTSH0gLXEgLSRwIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICJjYXQgPiAke0NPUFl9IgorIAkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgCQkJZmFpbCAic3NoIGNhdCAkREFUQSBmYWlsZWQiCitJbmRleDogb3BlbnNzaC02LjhwMS9yZWdyZXNzL3llcy1oZWFkLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzaC02LjhwMS5vcmlnL3JlZ3Jlc3MveWVzLWhlYWQuc2gKKysrKyBvcGVuc3NoLTYuOHAxL3JlZ3Jlc3MveWVzLWhlYWQuc2gKK0BAIC00LDcgKzQsNyBAQAorIHRpZD0ieWVzIHBpcGUgaGVhZCIKKyAKKyBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworLQlsaW5lcz1gJHtTU0h9IC0kcCAtRiAkT0JKL3NzaF9wcm94eSB0aGlzaG9zdCAnc2ggLWMgIndoaWxlIHRydWU7ZG8gZWNobyB5ZXM7ZG9uZSB8IF9QT1NJWDJfVkVSU0lPTj0xOTkyMDkgaGVhZCAtMjAwMCInIHwgKHNsZWVwIDMgOyB3YyAtbClgCisrCWxpbmVzPWAke1NTSH0gLSRwIC1GICRPQkovc3NoX3Byb3h5IHRoaXNob3N0ICdzaCAtYyAid2hpbGUgdHJ1ZTtkbyBlY2hvIHllcztkb25lIHwgX1BPU0lYMl9WRVJTSU9OPTE5OTIwOSBoZWFkIC1uIDIwMDAiJyB8IChzbGVlcCAzIDsgd2MgLWwpYAorIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAJCWZhaWwgInllc3xoZWFkIHRlc3QgZmFpbGVkIgorIAkJbGluZXMgPSAwOworSW5kZXg6IG9wZW5zc2gtNi44cDEvcmVncmVzcy9rZXktb3B0aW9ucy5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2gtNi44cDEub3JpZy9yZWdyZXNzL2tleS1vcHRpb25zLnNoCisrKysgb3BlbnNzaC02LjhwMS9yZWdyZXNzL2tleS1vcHRpb25zLnNoCitAQCAtNTQsNyArNTQsNyBAQCBmb3IgcCBpbiAke1NTSF9QUk9UT0NPTFN9OyBkbworIAlmaQorIAorIAlzZWQgJ3MvLiovZnJvbT0iJyIkZiInIiAmLycgJG9yaWdrZXlzID4kYXV0aGtleXMKKy0JZnJvbT1gaGVhZCAtMSAkYXV0aGtleXMgfCBjdXQgLWYxIC1kICcgJ2AKKysJZnJvbT1gaGVhZCAtbiAxICRhdXRoa2V5cyB8IGN1dCAtZjEgLWQgJyAnYAorIAl2ZXJib3NlICJrZXkgb3B0aW9uIHByb3RvICRwICRmcm9tIgorIAlyPWAke1NTSH0gLSRwIC1xIC1GICRPQkovc3NoX3Byb3h5IHNvbWVob3N0ICdlY2hvIHRydWUnYAorIAlpZiBbICIkciIgPSAidHJ1ZSIgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvaW5pdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBkNGEzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL2luaXQKQEAgLTAsMCArMSwxMTUgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQorCitQSURGSUxFPS92YXIvcnVuL3NzaGQucGlkCisKKyMgc291cmNlIGZ1bmN0aW9uIGxpYnJhcnkKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKKyMgL2V0Yy9pbml0LmQvc3NoOiBzdGFydCBhbmQgc3RvcCB0aGUgT3BlbkJTRCAic2VjdXJlIHNoZWxsIiBkYWVtb24KKwordGVzdCAteCAvdXNyL3NiaW4vc3NoZCB8fCBleGl0IDAKKyggL3Vzci9zYmluL3NzaGQgLVw/IDI+JjEgfCBncmVwIC1xIE9wZW5TU0ggKSAyPi9kZXYvbnVsbCB8fCBleGl0IDAKKworIyAvZXRjL2RlZmF1bHQvc3NoIG1heSBzZXQgU1lTQ09ORkRJUiBhbmQgU1NIRF9PUFRTCitpZiB0ZXN0IC1mIC9ldGMvZGVmYXVsdC9zc2g7IHRoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9zc2gKK2ZpCisKK1sgLXogIiRTWVNDT05GRElSIiBdICYmIFNZU0NPTkZESVI9L2V0Yy9zc2gKK21rZGlyIC1wICRTWVNDT05GRElSCisKK0hPU1RfS0VZX1JTQT0kU1lTQ09ORkRJUi9zc2hfaG9zdF9yc2Ffa2V5CitIT1NUX0tFWV9EU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZHNhX2tleQorSE9TVF9LRVlfRUNEU0E9JFNZU0NPTkZESVIvc3NoX2hvc3RfZWNkc2Ffa2V5CitIT1NUX0tFWV9FRDI1NTE5PSRTWVNDT05GRElSL3NzaF9ob3N0X2VkMjU1MTlfa2V5CisKK2NoZWNrX2Zvcl9ub19zdGFydCgpIHsKKyAgICAjIGZvcmdldCBpdCBpZiB3ZSdyZSB0cnlpbmcgdG8gc3RhcnQsIGFuZCAvZXRjL3NzaC9zc2hkX25vdF90b19iZV9ydW4gZXhpc3RzCisgICAgaWYgWyAtZSAkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4gXTsgdGhlbgorCWVjaG8gIk9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlciBub3QgaW4gdXNlICgkU1lTQ09ORkRJUi9zc2hkX25vdF90b19iZV9ydW4pIgorCWV4aXQgMAorICAgIGZpCit9CisKK2NoZWNrX3ByaXZzZXBfZGlyKCkgeworICAgICMgQ3JlYXRlIHRoZSBQcml2U2VwIGVtcHR5IGRpciBpZiBuZWNlc3NhcnkKKyAgICBpZiBbICEgLWQgL3Zhci9ydW4vc3NoZCBdOyB0aGVuCisJbWtkaXIgL3Zhci9ydW4vc3NoZAorCWNobW9kIDA3NTUgL3Zhci9ydW4vc3NoZAorICAgIGZpCit9CisKK2NoZWNrX2NvbmZpZygpIHsKKwkvdXNyL3NiaW4vc3NoZCAtdCB8fCBleGl0IDEKK30KKworY2hlY2tfa2V5cygpIHsKKwkjIGNyZWF0ZSBrZXlzIGlmIG5lY2Vzc2FyeQorCWlmIFsgISAtZiAkSE9TVF9LRVlfUlNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBSU0Ega2V5Li4uIgorCQlzc2gta2V5Z2VuIC1xIC1mICRIT1NUX0tFWV9SU0EgLU4gJycgLXQgcnNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0VDRFNBIF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFQ0RTQSBrZXkuLi4iCisJCXNzaC1rZXlnZW4gLXEgLWYgJEhPU1RfS0VZX0VDRFNBIC1OICcnIC10IGVjZHNhCisJZmkKKwlpZiBbICEgLWYgJEhPU1RfS0VZX0RTQSBdOyB0aGVuCisJCWVjaG8gIiAgZ2VuZXJhdGluZyBzc2ggRFNBIGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRFNBIC1OICcnIC10IGRzYQorCWZpCisJaWYgWyAhIC1mICRIT1NUX0tFWV9FRDI1NTE5IF07IHRoZW4KKwkJZWNobyAiICBnZW5lcmF0aW5nIHNzaCBFRDI1NTE5IGtleS4uLiIKKwkJc3NoLWtleWdlbiAtcSAtZiAkSE9TVF9LRVlfRUQyNTUxOSAtTiAnJyAtdCBlZDI1NTE5CisJZmkKK30KKworZXhwb3J0IFBBVEg9IiR7UEFUSDorJFBBVEg6fS91c3Ivc2Jpbjovc2JpbiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWNoZWNrX2Zvcl9ub19zdGFydAorCWVjaG8gIlN0YXJ0aW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwljaGVja19rZXlzCisJY2hlY2tfcHJpdnNlcF9kaXIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisgICAgICAgIGVjaG8gImRvbmUuIgorCTs7CisgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gIlN0b3BwaW5nIE9wZW5CU0QgU2VjdXJlIFNoZWxsIHNlcnZlcjogc3NoZCIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZAorICAgICAgICBlY2hvICIuIgorCTs7CisKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19rZXlzCisJY2hlY2tfY29uZmlnCisgICAgICAgIGVjaG8gLW4gIlJlbG9hZGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXIncyBjb25maWd1cmF0aW9uIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1wICRQSURGSUxFIC1zIDEgLXggL3Vzci9zYmluL3NzaGQKKwllY2hvICIuIgorCTs7CisKKyAgcmVzdGFydCkKKyAgCWNoZWNrX2tleXMKKwljaGVja19jb25maWcKKyAgICAgICAgZWNobyAtbiAiUmVzdGFydGluZyBPcGVuQlNEIFNlY3VyZSBTaGVsbCBzZXJ2ZXI6IHNzaGQiCisJc3RhcnQtc3RvcC1kYWVtb24gLUsgLXAgJFBJREZJTEUgLS1va25vZG8gLXggL3Vzci9zYmluL3NzaGQKKwljaGVja19mb3Jfbm9fc3RhcnQKKwljaGVja19wcml2c2VwX2RpcgorCXNsZWVwIDIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSAteCAvdXNyL3NiaW4vc3NoZCAtLSAkU1NIRF9PUFRTCisJZWNobyAiLiIKKwk7OworCisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL3NzaGQKKwlleGl0ICQ/CisgIDs7CisKKyAgKikKKwllY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvc3NoIHtzdGFydHxzdG9wfHN0YXR1c3xyZWxvYWR8Zm9yY2UtcmVsb2FkfHJlc3RhcnR9IgorCWV4aXQgMQorZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjRjMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2V4cG9ydCBURVNUX1NIRUxMPXNoCisKK2NkIHJlZ3Jlc3MKK21ha2UgLWsgLk9CSkRJUj1gcHdkYCAuQ1VSRElSPWBwd2RgIFNVRE89InN1ZG8iIHRlc3RzIFwKKyAgICAgICAgfCBzZWQgLWUgJ3MvXnNraXBwZWQvU0tJUDogL2cnIC1lICdzL15vayAvUEFTUzogL2cnIC1lICdzL15mYWlsZWQvRkFJTDogL2cnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hfY29uZmlnIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTkxOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoX2NvbmZpZwpAQCAtMCwwICsxLDQ4IEBACisjCSRPcGVuQlNEOiBzc2hfY29uZmlnLHYgMS4yOCAyMDEzLzA5LzE2IDExOjM1OjQzIHN0aGVuIEV4cCAkCisKKyMgVGhpcyBpcyB0aGUgc3NoIGNsaWVudCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoX2NvbmZpZyg1KSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIFRoaXMgZmlsZSBwcm92aWRlcyBkZWZhdWx0cyBmb3IKKyMgdXNlcnMsIGFuZCB0aGUgdmFsdWVzIGNhbiBiZSBjaGFuZ2VkIGluIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMKKyMgb3Igb24gdGhlIGNvbW1hbmQgbGluZS4KKworIyBDb25maWd1cmF0aW9uIGRhdGEgaXMgcGFyc2VkIGFzIGZvbGxvd3M6CisjICAxLiBjb21tYW5kIGxpbmUgb3B0aW9ucworIyAgMi4gdXNlci1zcGVjaWZpYyBmaWxlCisjICAzLiBzeXN0ZW0td2lkZSBmaWxlCisjIEFueSBjb25maWd1cmF0aW9uIHZhbHVlIGlzIG9ubHkgY2hhbmdlZCB0aGUgZmlyc3QgdGltZSBpdCBpcyBzZXQuCisjIFRodXMsIGhvc3Qtc3BlY2lmaWMgZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjIGNvbmZpZ3VyYXRpb24gZmlsZSwgYW5kIGRlZmF1bHRzIGF0IHRoZSBlbmQuCisKKyMgU2l0ZS13aWRlIGRlZmF1bHRzIGZvciBzb21lIGNvbW1vbmx5IHVzZWQgb3B0aW9ucy4gIEZvciBhIGNvbXByZWhlbnNpdmUKKyMgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucywgdGhlaXIgbWVhbmluZ3MgYW5kIGRlZmF1bHRzLCBwbGVhc2Ugc2VlIHRoZQorIyBzc2hfY29uZmlnKDUpIG1hbiBwYWdlLgorCitIb3N0ICoKKyAgRm9yd2FyZEFnZW50IHllcworICBGb3J3YXJkWDExIHllcworIyAgIFJob3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjICAgUlNBQXV0aGVudGljYXRpb24geWVzCisjICAgUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMKKyMgICBIb3N0YmFzZWRBdXRoZW50aWNhdGlvbiBubworIyAgIEdTU0FQSUF1dGhlbnRpY2F0aW9uIG5vCisjICAgR1NTQVBJRGVsZWdhdGVDcmVkZW50aWFscyBubworIyAgIEJhdGNoTW9kZSBubworIyAgIENoZWNrSG9zdElQIHllcworIyAgIEFkZHJlc3NGYW1pbHkgYW55CisjICAgQ29ubmVjdFRpbWVvdXQgMAorIyAgIFN0cmljdEhvc3RLZXlDaGVja2luZyBhc2sKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkZW50aXR5CisjICAgSWRlbnRpdHlGaWxlIH4vLnNzaC9pZF9yc2EKKyMgICBJZGVudGl0eUZpbGUgfi8uc3NoL2lkX2RzYQorIyAgIFBvcnQgMjIKKyMgICBQcm90b2NvbCAyLDEKKyMgICBDaXBoZXIgM2RlcworIyAgIENpcGhlcnMgYWVzMTI4LWN0cixhZXMxOTItY3RyLGFlczI1Ni1jdHIsYXJjZm91cjI1NixhcmNmb3VyMTI4LGFlczEyOC1jYmMsM2Rlcy1jYmMKKyMgICBNQUNzIGhtYWMtbWQ1LGhtYWMtc2hhMSx1bWFjLTY0QG9wZW5zc2guY29tLGhtYWMtcmlwZW1kMTYwCisjICAgRXNjYXBlQ2hhciB+CisjICAgVHVubmVsIG5vCisjICAgVHVubmVsRGV2aWNlIGFueTphbnkKKyMgICBQZXJtaXRMb2NhbENvbW1hbmQgbm8KKyMgICBWaXN1YWxIb3N0S2V5IG5vCisjICAgUHJveHlDb21tYW5kIHNzaCAtcSAtVyAlaDolcCBnYXRld2F5LmV4YW1wbGUuY29tCisjICAgUmVrZXlMaW1pdCAxRyAxaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg4MmU1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQKQEAgLTAsMCArMSwxMCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hdXRoCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fbm9sb2dpbi5zbworYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBvcHRpb25hbCAgICAgcGFtX2tleWluaXQuc28gZm9yY2UgcmV2b2tlCitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2xvZ2ludWlkLnNvCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZC5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJjMzliMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGQuc29ja2V0CkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorQ29uZmxpY3RzPXNzaGQuc2VydmljZQorCitbU29ja2V0XQorRXhlY1N0YXJ0UHJlPUBCQVNFX0JJTkRJUkAvbWtkaXIgLXAgL3Zhci9ydW4vc3NoZAorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRALnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkQC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMmQ2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkQC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBQZXItQ29ubmVjdGlvbiBEYWVtb24KK1dhbnRzPXNzaGRnZW5rZXlzLnNlcnZpY2UKK0FmdGVyPXNzaGRnZW5rZXlzLnNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9LUBTQklORElSQC9zc2hkIC1pCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECitTdGFuZGFyZElucHV0PXNvY2tldAorU3RhbmRhcmRFcnJvcj1zeXNsb2cKK0tpbGxNb2RlPXByb2Nlc3MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2gvc3NoZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4YmQyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRfY29uZmlnCkBAIC0wLDAgKzEsMTMzIEBACisjCSRPcGVuQlNEOiBzc2hkX2NvbmZpZyx2IDEuODAgMjAwOC8wNy8wMiAwMjoyNDoxOCBkam0gRXhwICQKKworIyBUaGlzIGlzIHRoZSBzc2hkIHNlcnZlciBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuICBTZWUKKyMgc3NoZF9jb25maWcoNSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyMgVGhpcyBzc2hkIHdhcyBjb21waWxlZCB3aXRoIFBBVEg9L3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4KKworIyBUaGUgc3RyYXRlZ3kgdXNlZCBmb3Igb3B0aW9ucyBpbiB0aGUgZGVmYXVsdCBzc2hkX2NvbmZpZyBzaGlwcGVkIHdpdGgKKyMgT3BlblNTSCBpcyB0byBzcGVjaWZ5IG9wdGlvbnMgd2l0aCB0aGVpciBkZWZhdWx0IHZhbHVlIHdoZXJlCisjIHBvc3NpYmxlLCBidXQgbGVhdmUgdGhlbSBjb21tZW50ZWQuICBVbmNvbW1lbnRlZCBvcHRpb25zIGNoYW5nZSBhCisjIGRlZmF1bHQgdmFsdWUuCisKKyNQb3J0IDIyCisjQWRkcmVzc0ZhbWlseSBhbnkKKyNMaXN0ZW5BZGRyZXNzIDAuMC4wLjAKKyNMaXN0ZW5BZGRyZXNzIDo6CisKKyMgVGhlIGRlZmF1bHQgcmVxdWlyZXMgZXhwbGljaXQgYWN0aXZhdGlvbiBvZiBwcm90b2NvbCAxCitQcm90b2NvbCAyCisKKyMgSG9zdEtleSBmb3IgcHJvdG9jb2wgdmVyc2lvbiAxCisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9rZXkKKyMgSG9zdEtleXMgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZHNhX2tleQorI0hvc3RLZXkgL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CisjSG9zdEtleSAvZXRjL3NzaC9zc2hfaG9zdF9lZDI1NTE5X2tleQorCisjIExpZmV0aW1lIGFuZCBzaXplIG9mIGVwaGVtZXJhbCB2ZXJzaW9uIDEgc2VydmVyIGtleQorI0tleVJlZ2VuZXJhdGlvbkludGVydmFsIDFoCisjU2VydmVyS2V5Qml0cyAxMDI0CisKKyMgQ2lwaGVycyBhbmQga2V5aW5nCisjUmVrZXlMaW1pdCBkZWZhdWx0IG5vbmUKKworIyBMb2dnaW5nCisjIG9ic29sZXRlcyBRdWlldE1vZGUgYW5kIEZhc2Npc3RMb2dnaW5nCisjU3lzbG9nRmFjaWxpdHkgQVVUSAorI0xvZ0xldmVsIElORk8KKworIyBBdXRoZW50aWNhdGlvbjoKKworI0xvZ2luR3JhY2VUaW1lIDJtCisjUGVybWl0Um9vdExvZ2luIHllcworI1N0cmljdE1vZGVzIHllcworI01heEF1dGhUcmllcyA2CisjTWF4U2Vzc2lvbnMgMTAKKworI1JTQUF1dGhlbnRpY2F0aW9uIHllcworI1B1YmtleUF1dGhlbnRpY2F0aW9uIHllcworCisjIFRoZSBkZWZhdWx0IGlzIHRvIGNoZWNrIGJvdGggLnNzaC9hdXRob3JpemVkX2tleXMgYW5kIC5zc2gvYXV0aG9yaXplZF9rZXlzMgorIyBidXQgdGhpcyBpcyBvdmVycmlkZGVuIHNvIGluc3RhbGxhdGlvbnMgd2lsbCBvbmx5IGNoZWNrIC5zc2gvYXV0aG9yaXplZF9rZXlzCitBdXRob3JpemVkS2V5c0ZpbGUgLnNzaC9hdXRob3JpemVkX2tleXMKKworI0F1dGhvcml6ZWRQcmluY2lwYWxzRmlsZSBub25lCisKKyNBdXRob3JpemVkS2V5c0NvbW1hbmQgbm9uZQorI0F1dGhvcml6ZWRLZXlzQ29tbWFuZFVzZXIgbm9ib2R5CisKKyMgRm9yIHRoaXMgdG8gd29yayB5b3Ugd2lsbCBhbHNvIG5lZWQgaG9zdCBrZXlzIGluIC9ldGMvc3NoL3NzaF9rbm93bl9ob3N0cworI1Job3N0c1JTQUF1dGhlbnRpY2F0aW9uIG5vCisjIHNpbWlsYXIgZm9yIHByb3RvY29sIHZlcnNpb24gMgorI0hvc3RiYXNlZEF1dGhlbnRpY2F0aW9uIG5vCisjIENoYW5nZSB0byB5ZXMgaWYgeW91IGRvbid0IHRydXN0IH4vLnNzaC9rbm93bl9ob3N0cyBmb3IKKyMgUmhvc3RzUlNBQXV0aGVudGljYXRpb24gYW5kIEhvc3RiYXNlZEF1dGhlbnRpY2F0aW9uCisjSWdub3JlVXNlcktub3duSG9zdHMgbm8KKyMgRG9uJ3QgcmVhZCB0aGUgdXNlcidzIH4vLnJob3N0cyBhbmQgfi8uc2hvc3RzIGZpbGVzCisjSWdub3JlUmhvc3RzIHllcworCisjIFRvIGRpc2FibGUgdHVubmVsZWQgY2xlYXIgdGV4dCBwYXNzd29yZHMsIGNoYW5nZSB0byBubyBoZXJlIQorI1Bhc3N3b3JkQXV0aGVudGljYXRpb24geWVzCisjUGVybWl0RW1wdHlQYXNzd29yZHMgbm8KKworIyBDaGFuZ2UgdG8gbm8gdG8gZGlzYWJsZSBzL2tleSBwYXNzd29yZHMKK0NoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbm8KKworIyBLZXJiZXJvcyBvcHRpb25zCisjS2VyYmVyb3NBdXRoZW50aWNhdGlvbiBubworI0tlcmJlcm9zT3JMb2NhbFBhc3N3ZCB5ZXMKKyNLZXJiZXJvc1RpY2tldENsZWFudXAgeWVzCisjS2VyYmVyb3NHZXRBRlNUb2tlbiBubworCisjIEdTU0FQSSBvcHRpb25zCisjR1NTQVBJQXV0aGVudGljYXRpb24gbm8KKyNHU1NBUElDbGVhbnVwQ3JlZGVudGlhbHMgeWVzCisKKyMgU2V0IHRoaXMgdG8gJ3llcycgdG8gZW5hYmxlIFBBTSBhdXRoZW50aWNhdGlvbiwgYWNjb3VudCBwcm9jZXNzaW5nLAorIyBhbmQgc2Vzc2lvbiBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIGVuYWJsZWQsIFBBTSBhdXRoZW50aWNhdGlvbiB3aWxsCisjIGJlIGFsbG93ZWQgdGhyb3VnaCB0aGUgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiBhbmQKKyMgUGFzc3dvcmRBdXRoZW50aWNhdGlvbi4gIERlcGVuZGluZyBvbiB5b3VyIFBBTSBjb25maWd1cmF0aW9uLAorIyBQQU0gYXV0aGVudGljYXRpb24gdmlhIENoYWxsZW5nZVJlc3BvbnNlQXV0aGVudGljYXRpb24gbWF5IGJ5cGFzcworIyB0aGUgc2V0dGluZyBvZiAiUGVybWl0Um9vdExvZ2luIHdpdGhvdXQtcGFzc3dvcmQiLgorIyBJZiB5b3UganVzdCB3YW50IHRoZSBQQU0gYWNjb3VudCBhbmQgc2Vzc2lvbiBjaGVja3MgdG8gcnVuIHdpdGhvdXQKKyMgUEFNIGF1dGhlbnRpY2F0aW9uLCB0aGVuIGVuYWJsZSB0aGlzIGJ1dCBzZXQgUGFzc3dvcmRBdXRoZW50aWNhdGlvbgorIyBhbmQgQ2hhbGxlbmdlUmVzcG9uc2VBdXRoZW50aWNhdGlvbiB0byAnbm8nLgorI1VzZVBBTSBubworCisjQWxsb3dBZ2VudEZvcndhcmRpbmcgeWVzCisjQWxsb3dUY3BGb3J3YXJkaW5nIHllcworI0dhdGV3YXlQb3J0cyBubworI1gxMUZvcndhcmRpbmcgbm8KKyNYMTFEaXNwbGF5T2Zmc2V0IDEwCisjWDExVXNlTG9jYWxob3N0IHllcworI1Blcm1pdFRUWSB5ZXMKKyNQcmludE1vdGQgeWVzCisjUHJpbnRMYXN0TG9nIHllcworI1RDUEtlZXBBbGl2ZSB5ZXMKKyNVc2VMb2dpbiBubworVXNlUHJpdmlsZWdlU2VwYXJhdGlvbiBzYW5kYm94ICMgRGVmYXVsdCBmb3IgbmV3IGluc3RhbGxhdGlvbnMuCisjUGVybWl0VXNlckVudmlyb25tZW50IG5vCitDb21wcmVzc2lvbiBubworQ2xpZW50QWxpdmVJbnRlcnZhbCAxNQorQ2xpZW50QWxpdmVDb3VudE1heCA0CisjVXNlRE5TIHllcworI1BpZEZpbGUgL3Zhci9ydW4vc3NoZC5waWQKKyNNYXhTdGFydHVwcyAxMDozMDoxMDAKKyNQZXJtaXRUdW5uZWwgbm8KKyNDaHJvb3REaXJlY3Rvcnkgbm9uZQorI1ZlcnNpb25BZGRlbmR1bSBub25lCisKKyMgbm8gZGVmYXVsdCBiYW5uZXIgcGF0aAorI0Jhbm5lciBub25lCisKKyMgb3ZlcnJpZGUgZGVmYXVsdCBvZiBubyBzdWJzeXN0ZW1zCitTdWJzeXN0ZW0Jc2Z0cAkvdXNyL2xpYmV4ZWMvc2Z0cC1zZXJ2ZXIKKworIyBFeGFtcGxlIG9mIG92ZXJyaWRpbmcgc2V0dGluZ3Mgb24gYSBwZXItdXNlciBiYXNpcworI01hdGNoIFVzZXIgYW5vbmN2cworIwlYMTFGb3J3YXJkaW5nIG5vCisjCUFsbG93VGNwRm9yd2FyZGluZyBubworIwlQZXJtaXRUVFkgbm8KKyMJRm9yY2VDb21tYW5kIGN2cyBzZXJ2ZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3NzaGRnZW5rZXlzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkZ2Vua2V5cy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NTA4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC9zc2hkZ2Vua2V5cy5zZXJ2aWNlCkBAIC0wLDAgKzEsMTEgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T3BlblNTSCBLZXkgR2VuZXJhdGlvbgorQ29uZGl0aW9uUGF0aEV4aXN0cz18IS9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkKK0NvbmRpdGlvblBhdGhFeGlzdHM9fCEvZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5CitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9zc2gvc3NoX2hvc3RfZWQyNTUxOV9rZXkKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QEJJTkRJUkAvc3NoLWtleWdlbiAtQQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzaC9vcGVuc3NoL3ZvbGF0aWxlcy45OV9zc2hkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZDJhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaC92b2xhdGlsZXMuOTlfc3NoZApAQCAtMCwwICsxLDIgQEAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vc3NoZCBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC92YXIvbG9nL2xhc3Rsb2cgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2gvb3BlbnNzaF83LjFwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWViNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NoL29wZW5zc2hfNy4xcDEuYmIKQEAgLTAsMCArMSwxNTQgQEAKK1NVTU1BUlkgPSAiU2VjdXJlIHJsb2dpbi9yc2gvcmNwL3RlbG5ldCByZXBsYWNlbWVudCIKK0RFU0NSSVBUSU9OID0gIlNlY3VyZSBybG9naW4vcnNoL3JjcC90ZWxuZXQgcmVwbGFjZW1lbnQgKE9wZW5TU0gpIFwKK1NzaCAoU2VjdXJlIFNoZWxsKSBpcyBhIHByb2dyYW0gZm9yIGxvZ2dpbmcgaW50byBhIHJlbW90ZSBtYWNoaW5lIFwKK2FuZCBmb3IgZXhlY3V0aW5nIGNvbW1hbmRzIG9uIGEgcmVtb3RlIG1hY2hpbmUuIgorSE9NRVBBR0UgPSAiaHR0cDovL29wZW5zc2gub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOQ0U7bWQ1PWUzMjYwNDU2NTdlODQyNTQxZDNmMzVhYWRhNDQyNTA3IgorCitERVBFTkRTID0gInpsaWIgb3BlbnNzbCIKK0RFUEVORFMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm9wZW5ic2Qub3JnL3B1Yi9PcGVuQlNEL09wZW5TU0gvcG9ydGFibGUvb3BlbnNzaC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vc3NoZF9jb25maWcgXAorICAgICAgICAgICBmaWxlOi8vc3NoX2NvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGQuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL3NzaGRALnNlcnZpY2UgXAorICAgICAgICAgICBmaWxlOi8vc3NoZGdlbmtleXMuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly92b2xhdGlsZXMuOTlfc3NoZCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtdGVzdC1zdXBwb3J0LWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworUEFNX1NSQ19VUkkgPSAiZmlsZTovL3NzaGQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzA5NzM2YmM4YThjMjUzYmM0ZWViNDgyOTg4OGNhNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzBhNmQyZDFkMDYzZDVjNjZkZmZkOTUyNDkzZDBjZGEyNTZjYWQyMDRmNjgxZGUwZjg0ZWY4NWIyYWQ4NDI4IgorCitpbmhlcml0IHVzZXJhZGQgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcyBzeXN0ZW1kCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0tc3NoZCIKK1VTRVJBRERfUEFSQU1fJHtQTn0tc3NoZCA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgL3Zhci9ydW4vc3NoZCAtLXNoZWxsIC9iaW4vZmFsc2UgLS11c2VyLWdyb3VwIHNzaGQiCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3NoZCA9ICJzc2hkIgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tc3NoZCA9ICJkZWZhdWx0cyA5IgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXNzaGQiCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0tc3NoZCA9ICJzc2hkLnNvY2tldCIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHB0ZXN0CisKKyMgTEZTIHN1cHBvcnQ6CitDRkxBR1MgKz0gIi1EX19GSUxFX09GRlNFVF9CSVRTPTY0IgorCisjIGxvZ2luIHBhdGggaXMgaGFyZGNvZGVkIGluIHNzaGQKK0VYVFJBX09FQ09ORiA9ICInTE9HSU5fUFJPR1JBTT0ke2Jhc2VfYmluZGlyfS9sb2dpbicgXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0td2l0aC1wYW0nLCAnLS13aXRob3V0LXBhbScsIGQpfSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXpsaWItdmVyc2lvbi1jaGVjayBcCisgICAgICAgICAgICAgICAgLS13aXRoLXByaXZzZXAtcGF0aD0vdmFyL3J1bi9zc2hkIFwKKyAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfS9zc2ggXAorICAgICAgICAgICAgICAgIC0td2l0aC14YXV0aD0vdXNyL2Jpbi94YXV0aCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN0cmlwIFwKKyAgICAgICAgICAgICAgICAiCisKKyMgU2luY2Ugd2UgZG8gbm90IGRlcGVuZCBvbiBsaWJic2QsIHdlIGRvIG5vdCB3YW50IGNvbmZpZ3VyZSB0byB1c2UgaXQKKyMganVzdCBiZWNhdXNlIGl0IGZpbmRzIGxpYnV0aWwuaC4gIEJ1dCwgc3BlY2lmeWluZyAtLWRpc2FibGUtbGlidXRpbAorIyBjYXVzZXMgY29tcGlsZSBlcnJvcnMsIHNvLi4uCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfaGVhZGVyX2JzZF9saWJ1dGlsX2g9bm8gYWNfY3ZfaGVhZGVyX2xpYnV0aWxfaD1ubyIKKworIyBwYXNzd2QgcGF0aCBpcyBoYXJkY29kZWQgaW4gc3NoZAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUEFUSF9QQVNTV0RfUFJPRz0ke2JpbmRpcn0vcGFzc3dkIgorCisjIFdlIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIGxpYmJsb2NrZmlsZQorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9tYWlsbG9ja19oPW5vIgorCisjIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciB1Y2xpYmMgYmVjYXVzZSBpbmNsdWRpbmcgc3RkaW8uaAorIyBwdWxscyBpbiBwdGhyZWFkcy5oIGFuZCBjYXVzZXMgY29uZmxpY3RzIGluIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisjIFRoaXMgcmVzdWx0cyBpbiBjb21waWxhdGlvbiBmYWlsdXJlLCBzbyB1bmxlc3MgdGhpcyBpcyBmaXhlZCwKKyMgZGlzYWJsZSBwYW0gZm9yIHVjbGliYy4KK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmM9IiAtLXdpdGhvdXQtcGFtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJZXhwb3J0IExEPSIke0NDfSIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkX2NvbmZpZyAke0J9LworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NzaF9jb25maWcgJHtCfS8KKwlpZiBbICEgLWUgYWNpbmNsdWRlLm00IC1hIC1lIGFjbG9jYWwubTQgXTsgdGhlbgorCQljcCBhY2xvY2FsLm00IGFjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgICAgICMgc2tpcCByZWdyZXNzL3VuaXR0ZXN0cy8gYmluYXJpZXM6IHRoaXMgd2lsbCBzaWxlbnRseSBza2lwCisgICAgICAgICMgdW5pdHRlc3RzIGluIHJ1bi1wdGVzdHMgd2hpY2ggaXMgZ29vZCBiZWNhdXNlIHRoZXkgYXJlIHNvIHNsb3cuCisgICAgICAgIG9lX3J1bm1ha2UgcmVncmVzcy9tb2RwaXBlIHJlZ3Jlc3Mvc2V0dWlkLWFsbG93ZWQgcmVncmVzcy9uZXRjYXQKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iID0gInBhbSIgXTsgdGhlbgorCQlpbnN0YWxsIC1EIC1tIDA3NTUgJHtXT1JLRElSfS9zc2hkICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL3NzaGQKKwkJc2VkIC1pIC1lICdzOiNVc2VQQU0gbm86VXNlUEFNIHllczonICR7V09SS0RJUn0vc3NoZF9jb25maWcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3NoZAorCXJtIC1mICR7RH0ke2JpbmRpcn0vc2xvZ2luICR7RH0ke2RhdGFkaXJ9L1NzaC5iaW4KKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4vc3NoZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vdm9sYXRpbGVzLjk5X3NzaGQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X3NzaGQKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9jb250cmliL3NzaC1jb3B5LWlkICR7RH0ke2JpbmRpcn0KKworCSMgQ3JlYXRlIGNvbmZpZyBmaWxlcyBmb3IgcmVhZC1vbmx5IHJvb3RmcworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3NoCisJaW5zdGFsbCAtbSA2NDQgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3NzaC9zc2hkX2NvbmZpZ19yZWFkb25seQorCXNlZCAtaSAnL0hvc3RLZXkvZCcgJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfcnNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZHNhX2tleSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vc3NoL3NzaGRfY29uZmlnX3JlYWRvbmx5CisJZWNobyAiSG9zdEtleSAvdmFyL3J1bi9zc2gvc3NoX2hvc3RfZWNkc2Ffa2V5IiA+PiAke0R9JHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLWMgLW0gMDY0NCAke1dPUktESVJ9L3NzaGRALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1jIC1tIDA2NDQgJHtXT1JLRElSfS9zc2hkZ2Vua2V5cy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBCQVNFX0JJTkRJUkAsJHtiYXNlX2JpbmRpcn0sZycgXAorCQktZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NzaGQuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlzZWQgLWkgLWUgInN8XlNGVFBTRVJWRVI9Lip8U0ZUUFNFUlZFUj0ke2xpYmRpcn0vJHtQTn0vc2Z0cC1zZXJ2ZXJ8IiByZWdyZXNzL3Rlc3QtZXhlYy5zaAorCWNwIC1yIHJlZ3Jlc3MgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWtleWdlbiAke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0tc2Z0cCAke1BOfS1taXNjICR7UE59LXNmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tc2NwID0gIiR7YmluZGlyfS9zY3AuJHtCUE59IgorRklMRVNfJHtQTn0tc3NoID0gIiR7YmluZGlyfS9zc2guJHtCUE59ICR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCitGSUxFU18ke1BOfS1zc2hkID0gIiR7c2JpbmRpcn0vc3NoZCAke3N5c2NvbmZkaXJ9L2luaXQuZC9zc2hkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0iCitGSUxFU18ke1BOfS1zc2hkICs9ICIke3N5c2NvbmZkaXJ9L3NzaC9tb2R1bGkgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWcgJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWdfcmVhZG9ubHkgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy85OV9zc2hkICR7c3lzY29uZmRpcn0vcGFtLmQvc3NoZCIKK0ZJTEVTXyR7UE59LXNmdHAgPSAiJHtiaW5kaXJ9L3NmdHAiCitGSUxFU18ke1BOfS1zZnRwLXNlcnZlciA9ICIke2xpYmV4ZWNkaXJ9L3NmdHAtc2VydmVyIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2JpbmRpcn0vc3NoKiAke2xpYmV4ZWNkaXJ9L3NzaCoiCitGSUxFU18ke1BOfS1rZXlnZW4gPSAiJHtiaW5kaXJ9L3NzaC1rZXlnZW4iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1zY3AgJHtQTn0tc3NoICR7UE59LXNzaGQgJHtQTn0ta2V5Z2VuIgorUkRFUEVORFNfJHtQTn0tc3NoZCArPSAiJHtQTn0ta2V5Z2VuICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbS1wbHVnaW4ta2V5aW5pdCBwYW0tcGx1Z2luLWxvZ2ludWlkJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIke1BOfS1zZnRwICR7UE59LW1pc2MgJHtQTn0tc2Z0cC1zZXJ2ZXIgbWFrZSIKKworUlBST1ZJREVTXyR7UE59LXNzaCA9ICJzc2giCitSUFJPVklERVNfJHtQTn0tc3NoZCA9ICJzc2hkIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1zc2hkID0gImRyb3BiZWFyIgorUkNPTkZMSUNUU18ke1BOfS1rZXlnZW4gPSAic3NoLWtleWdlbiIKKworQ09ORkZJTEVTXyR7UE59LXNzaGQgPSAiJHtzeXNjb25mZGlyfS9zc2gvc3NoZF9jb25maWciCitDT05GRklMRVNfJHtQTn0tc3NoID0gIiR7c3lzY29uZmRpcn0vc3NoL3NzaF9jb25maWciCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjkwIgorQUxURVJOQVRJVkVfJHtQTn0tc2NwID0gInNjcCIKK0FMVEVSTkFUSVZFXyR7UE59LXNzaCA9ICJzc2giCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RjZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wuaW5jCkBAIC0wLDAgKzEsMjE0IEBACitTVU1NQVJZID0gIlNlY3VyZSBTb2NrZXQgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTZWN1cmUgU29ja2V0IExheWVyIChTU0wpIGJpbmFyeSBhbmQgcmVsYXRlZCBjcnlwdG9ncmFwaGljIHRvb2xzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3BlbnNzbC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvdnVsbmVyYWJpbGl0aWVzLmh0bWwiCitTRUNUSU9OID0gImxpYnMvbmV0d29yayIKKworIyAib3BlbnNzbCB8IFNTTGVheSIgZHVhbCBsaWNlbnNlCitMSUNFTlNFID0gIm9wZW5zc2wiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mOWE4Zjk2ODEwNzM0NWUwYjc1YWE4YzJlY2FhN2VjOCIKKworREVQRU5EUyA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorREVQRU5EU19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBvcGVuc3NsLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9vcGVuc3NsLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorUyA9ICIke1dPUktESVJ9L29wZW5zc2wtJHtQVn0iCisKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiLCwsIgorCitBUl9hcHBlbmQgPSAiIHIiCisjIEF2b2lkIGJpbmFyaWVzIGJlaW5nIG1hcmtlZCBhcyByZXF1aXJpbmcgYW4gZXhlY3V0YWJsZSBzdGFjayBzaW5jZSBpdCAKKyMgZG9lc24ndCh3aGljaCBjYXVzZXMgYW5kIHRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIFNFTGludXgKK0NGTEFHID0gIiR7QGJhc2VfY29uZGl0aW9uYWwoJ1NJVEVJTkZPX0VORElBTk5FU1MnLCAnbGUnLCAnLURMX0VORElBTicsICctREJfRU5ESUFOJywgZCl9IFwKKwktRFRFUk1JTyAke0NGTEFHU30gLVdhbGwgLVdhLC0tbm9leGVjc3RhY2siCisKKyMgLTAyIGRvZXMgbm90IHdvcmsgb24gbWlwc2VsOiBzc2ggaGFuZ3Mgd2hlbiBpdCB0cmllcyB0byByZWFkIC9kZXYvdXJhbmRvbQorQ0ZMQUdfbXR4LTEgOj0gIiR7QCcke0NGTEFHfScucmVwbGFjZSgnLU8yJywgJycpfSIKK0NGTEFHX210eC0yIDo9ICIke0AnJHtDRkxBR30nLnJlcGxhY2UoJy1PMicsICcnKX0iCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyIKK2V4cG9ydCBFWF9MSUJTID0gIi1sZ2NjIC1sZGwiCitleHBvcnQgQVMgPSAiJHtDQ30gLWMiCisKK2luaGVyaXQgcGtnY29uZmlnIHNpdGVpbmZvIG11bHRpbGliX2hlYWRlciBwdGVzdAorCitQQUNLQUdFUyA9KyAibGliY3J5cHRvIGxpYnNzbCAke1BOfS1taXNjIG9wZW5zc2wtY29uZiIKK0ZJTEVTX2xpYmNyeXB0byA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdG8ke1NPTElCU30iCitGSUxFU19saWJzc2wgPSAiJHtsaWJkaXJ9L2xpYnNzbC5zby4qIgorRklMRVNfJHtQTn0gPSsgIiAke2xpYmRpcn0vc3NsLyoiCitGSUxFU18ke1BOfS1taXNjID0gIiR7bGliZGlyfS9zc2wvbWlzYyAke2JpbmRpcn0vY19yZWhhc2giCitSREVQRU5EU18ke1BOfS1taXNjID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3BlcmwnLCAncGVybCcsICcnLCBkKX0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L2xpYmNyeXB0byR7U09MSUJTREVWfSIKKworIyBBZGQgdGhlIG9wZW5zc2wuY25mIGZpbGUgdG8gdGhlIG9wZW5zc2wtY29uZiBwYWNrYWdlLiAgTWFrZSB0aGUgbGliY3J5cHRvCisjIHBhY2thZ2UgUlJFQ09NTUVORFMgb24gdGhpcyBwYWNrYWdlLiAgVGhpcyB3aWxsIGVuYWJsZSB0aGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHRvIGJlIGluc3RhbGxlZCBmb3IgYm90aCB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgYW5kIHRoZSBsaWJjcnlwdG8KKyMgcGFja2FnZSBzaW5jZSB0aGUgYmFzZSBvcGVuc3NsIHBhY2thZ2UgZGVwZW5kcyBvbiB0aGUgbGliY3J5cHRvIHBhY2thZ2UuCitGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK0NPTkZGSUxFU19vcGVuc3NsLWNvbmYgPSAiJHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiIKK1JSRUNPTU1FTkRTX2xpYmNyeXB0byArPSAib3BlbnNzbC1jb25mIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59LW1pc2MgbWFrZSBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgYmMiCisKKyMgUmVtb3ZlIHRoaXMgdG8gZW5hYmxlIFNTTHYzLiBTU0x2MyBpcyBkZWZhdWx0ZWQgdG8gZGlzYWJsZWQgZHVlIHRvIHRoZSBQT09ETEUKKyMgdnVsbmVyYWJpbGl0eQorRVhUUkFfT0VDT05GID0gIiAtbm8tc3NsMyIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfZGFyd2luICgpIHsKKwlzZWQgLWkgLWUgJy92ZXJzaW9uLXNjcmlwdD1vcGVuc3NsXC5sZC9kJyBDb25maWd1cmUKK30KKworZG9fY29uZmlndXJlICgpIHsKKwljZCB1dGlsCisJcGVybCBwZXJscGF0aC5wbCAke1NUQUdJTkdfQklORElSX05BVElWRX0KKwljZCAuLgorCWxuIC1zZiBhcHBzL29wZW5zc2wucG9kIGNyeXB0by9jcnlwdG8ucG9kIHNzbC9zc2wucG9kIGRvYy8KKworCW9zPSR7SE9TVF9PU30KKwljYXNlICRvcyBpbgorCWxpbnV4LXVjbGliYyB8XAorCWxpbnV4LXVjbGliY2VhYmkgfFwKKwlsaW51eC1nbnVlYWJpIHxcCisJbGludXgtdWNsaWJjc3BlIHxcCisJbGludXgtZ251c3BlIHxcCisJbGludXgtbXVzbCopCisJCW9zPWxpbnV4CisJCTs7CisJCSopCisJCTs7CisJZXNhYworCXRhcmdldD0iJG9zLSR7SE9TVF9BUkNIfSIKKwljYXNlICR0YXJnZXQgaW4KKwlsaW51eC1hcm0pCisJCXRhcmdldD1saW51eC1hcm12NAorCQk7OworCWxpbnV4LWFybWViKQorCQl0YXJnZXQ9bGludXgtZWxmLWFybWViCisJCTs7CisJbGludXgtYWFyY2g2NCopCisJCXRhcmdldD1saW51eC1nZW5lcmljNjQKKwkJOzsKKwlsaW51eC1zaDMpCisJCXRhcmdldD1kZWJpYW4tc2gzCisJCTs7CisJbGludXgtc2g0KQorCQl0YXJnZXQ9ZGViaWFuLXNoNAorCQk7OworCWxpbnV4LWk0ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNDg2CisJCTs7CisJbGludXgtaTU4NiB8IGxpbnV4LXZpYWMzKQorCQl0YXJnZXQ9ZGViaWFuLWkzODYtaTU4NgorCQk7OworCWxpbnV4LWk2ODYpCisJCXRhcmdldD1kZWJpYW4taTM4Ni1pNjg2L2Ntb3YKKwkJOzsKKwlsaW51eC1nbnV4MzIteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDMyCisJCTs7CisJbGludXgtZ251NjQteDg2XzY0KQorCQl0YXJnZXQ9bGludXgteDg2XzY0CisJCTs7CisJbGludXgtbWlwcykKKwkJdGFyZ2V0PWRlYmlhbi1taXBzCisJCTs7CisJbGludXgtbWlwc2VsKQorCQl0YXJnZXQ9ZGViaWFuLW1pcHNlbAorCQk7OworICAgICAgICBsaW51eC0qLW1pcHM2NCkKKyAgICAgICAgICAgICAgIHRhcmdldD1saW51eC1taXBzCisgICAgICAgICAgICAgICAgOzsKKwlsaW51eC1taWNyb2JsYXplKikKKwkJdGFyZ2V0PWxpbnV4LWdlbmVyaWMzMgorCQk7OworCWxpbnV4LXBvd2VycGMpCisJCXRhcmdldD1saW51eC1wcGMKKwkJOzsKKwlsaW51eC1wb3dlcnBjNjQpCisJCXRhcmdldD1saW51eC1wcGM2NAorCQk7OworCWxpbnV4LXN1cGVyc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJbGludXgtc3BhcmMpCisJCXRhcmdldD1saW51eC1zcGFyY3Y4CisJCTs7CisJZGFyd2luLWkzODYpCisJCXRhcmdldD1kYXJ3aW4taTM4Ni1jYworCQk7OworCWVzYWMKKwkjIGluamVjdCBtYWNoaW5lLXNwZWNpZmljIGZsYWdzCisJc2VkIC1pIC1lICJzfF5cKFwiJHRhcmdldFwiLFxzKlwiW146XVwrXCk6XChbXjpdXCtcKXxcMToke0NGTEFHfXxnIiBDb25maWd1cmUKKyAgICAgICAgdXNlcHJlZml4PSR7cHJlZml4fQorICAgICAgICBpZiBbICJ4JHVzZXByZWZpeCIgPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgICAgIHVzZXByZWZpeD0vCisgICAgICAgIGZpICAgICAgICAKKwlwZXJsIC4vQ29uZmlndXJlICR7RVhUUkFfT0VDT05GfSBzaGFyZWQgLS1wcmVmaXg9JHVzZXByZWZpeCAtLW9wZW5zc2xkaXI9JHtsaWJkaXJ9L3NzbCAtLWxpYmRpcj1gYmFzZW5hbWUgJHtsaWJkaXJ9YCAkdGFyZ2V0Cit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy10YXJnZXQgKCkgeworICAgIHNlZCAtaSAncy9cKChPUEVOU1NMPVwpIi4qIi9cMSJvcGVuc3NsIi8nIE1ha2VmaWxlCit9CisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9fY29tcGlsZV9wdGVzdCAoKSB7CisJb2VfcnVubWFrZSBidWlsZHRlc3QKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyBDcmVhdGUgJHtEfS8ke3ByZWZpeH0gdG8gZml4IHBhcmFsbGVsIGlzc3VlcworCW1rZGlyIC1wICR7RH0vJHtwcmVmaXh9LworCisJb2VfcnVubWFrZSBJTlNUQUxMX1BSRUZJWD0iJHtEfSIgTUFORElSPSIke21hbmRpcn0iIGluc3RhbGwKKworCW9lX2xpYmluc3RhbGwgLXNvIGxpYmNyeXB0byAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gbGlic3NsICR7RH0ke2xpYmRpcn0KKworCSMgTW92aW5nIGxpYmNyeXB0byB0byAvbGliCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12ICR7RH0ke2xpYmRpcn0vbGliY3J5cHRvKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXNlZCAtaSBzI2xpYmRpcj1cJFx7ZXhlY19wcmVmaXhcfVwvbGliI2xpYmRpcj0ke2Jhc2VfbGliZGlyfSMgJHtEfS8ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmNyeXB0by5wYworCWZpCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJY3AgLS1kZXJlZmVyZW5jZSAtUiBpbmNsdWRlL29wZW5zc2wgJHtEfSR7aW5jbHVkZWRpcn0KKworCW9lX211bHRpbGliX2hlYWRlciBvcGVuc3NsL29wZW5zc2xjb25mLmgKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwZXJsJywgJ3BlcmwnLCAnJywgZCl9IiA9ICJwZXJsIiBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1N9L3Rvb2xzL2NfcmVoYXNoICR7RH0ke2JpbmRpcn0KKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvQ0EucGwKKwkJc2VkIC1pIC1lICcxcywuKiwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmRpcn0vc3NsL21pc2MvdHNnZXQKKwkJIyBUaGUgY19yZWhhc2ggdXRpbGl0eSBpc24ndCBpbnN0YWxsZWQgYnkgdGhlIG5vcm1hbCBpbnN0YWxsYXRpb24gcHJvY2Vzcy4KKwllbHNlCisJCXJtIC1mICR7RH0ke2JpbmRpcn0vY19yZWhhc2gKKwkJcm0gLWYgJHtEfSR7bGliZGlyfS9zc2wvbWlzYy9DQS5wbCAke0R9JHtsaWJkaXJ9L3NzbC9taXNjL3RzZ2V0CisJZmkKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLXIgTWFrZWZpbGUgdGVzdCAke0R9JHtQVEVTVF9QQVRIfQorCWNwIC1yIGNlcnRzICR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgLXAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvbWlzYy9DQS5zaCAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2xpYi9zc2wvb3BlbnNzbC5jbmYgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWxuIC1zZiAvdXNyL2Jpbi9vcGVuc3NsICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCWNwIGFwcHMvc2VydmVyMi5wZW0gICAgICAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vYXBwcworCW1rZGlyIC1wICR7RH0ke1BURVNUX1BBVEh9L3V0aWwKKwlpbnN0YWxsIHV0aWwvb3BlbnNzbHdyYXAuc2ggICAgJHtEfSR7UFRFU1RfUEFUSH0vdXRpbAorCWluc3RhbGwgdXRpbC9zaGxpYl93cmFwLnNoICAgICAke0R9JHtQVEVTVF9QQVRIfS91dGlsCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L29wZW5zc2wgXAorCSAgICBPUEVOU1NMX0NPTkY9JHtsaWJkaXJ9L3NzbC9vcGVuc3NsLmNuZiBcCisJICAgIFNTTF9DRVJUX0RJUj0ke2xpYmRpcn0vc3NsL2NlcnRzIFwKKwkgICAgU1NMX0NFUlRfRklMRT0ke2xpYmRpcn0vc3NsL2NlcnQucGVtIFwKKwkgICAgT1BFTlNTTF9FTkdJTkVTPSR7bGliZGlyfS9zc2wvZW5naW5lcworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9NYWtlZmlsZXMtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9NYWtlZmlsZXMtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ5NDQ2YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL01ha2VmaWxlcy1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitBZGQgJ2J1aWxkdGVzdCcgYW5kICdydW50ZXN0JyB0YXJnZXRzIHRvIE1ha2VmaWxlLCB0byBidWlsZCBhbmQgcnVuIHRlc3RzCitjcm9zcy1jb21waWxlZC4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL01ha2VmaWxlLm9yZworKysrIG9wZW5zc2wtMS4wLjIvTWFrZWZpbGUub3JnCitAQCAtNDUxLDggKzQ1MSwxNiBAQCByZWhhc2gudGltZTogY2VydHMgYXBwcworIHRlc3Q6ICAgdGVzdHMKKyAKKyB0ZXN0czogcmVoYXNoCisrCSQoTUFLRSkgYnVpbGR0ZXN0CisrCSQoTUFLRSkgcnVudGVzdAorKworK2J1aWxkdGVzdDoKKysJQChjZCB0ZXN0ICYmIFwKKysJJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiBleGUgYXBwcyk7CisrCisrcnVudGVzdDoKKyAJQChjZCB0ZXN0ICYmIGVjaG8gInRlc3RpbmcuLi4iICYmIFwKKy0JJChDTEVBUkVOVikgJiYgJChNQUtFKSAtZSAkKEJVSUxERU5WKSBUT1A9Li4gVEVTVFM9JyQoVEVTVFMpJyBPUEVOU1NMX0RFQlVHX01FTU9SWT1vbiBPUEVOU1NMX0NPTkY9Li4vYXBwcy9vcGVuc3NsLmNuZiB0ZXN0cyApOworKwkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1lICQoQlVJTERFTlYpIFRPUD0uLiBURVNUUz0nJChURVNUUyknIE9QRU5TU0xfREVCVUdfTUVNT1JZPW9uIE9QRU5TU0xfQ09ORj0uLi9hcHBzL29wZW5zc2wuY25mIGFsbHRlc3RzICk7CisgCU9QRU5TU0xfQ09ORj1hcHBzL29wZW5zc2wuY25mIHV0aWwvb3BlbnNzbHdyYXAuc2ggdmVyc2lvbiAtYQorIAorIHJlcG9ydDoKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTEzNyw3ICsxMzcsNyBAQCB0ZXN0czoJZXhlIGFwcHMgJChURVNUUykKKyBhcHBzOgorIAlAKGNkIC4uOyAkKE1BS0UpIERJUlM9YXBwcyBhbGwpCisgCistYWxsdGVzdHM6IFwKKythbGwtdGVzdHM9IFwKKyAJdGVzdF9kZXMgdGVzdF9pZGVhIHRlc3Rfc2hhIHRlc3RfbWQ0IHRlc3RfbWQ1IHRlc3RfaG1hYyBcCisgCXRlc3RfbWQyIHRlc3RfbWRjMiB0ZXN0X3dwIFwKKyAJdGVzdF9ybWQgdGVzdF9yYzIgdGVzdF9yYzQgdGVzdF9yYzUgdGVzdF9iZiB0ZXN0X2Nhc3QgdGVzdF9hZXMgXAorQEAgLTE0OCw2ICsxNDgsMTEgQEAgYWxsdGVzdHM6IFwKKyAJdGVzdF9qcGFrZSB0ZXN0X3NycCB0ZXN0X2NtcyB0ZXN0X29jc3AgdGVzdF92M25hbWUgdGVzdF9oZWFydGJlYXQgXAorIAl0ZXN0X2NvbnN0YW50X3RpbWUKKyAKKythbGx0ZXN0czoKKysJQChmb3IgaSBpbiAkKGFsbC10ZXN0cyk7IGRvIFwKKysJKCAkKE1BS0UpICQkaSAmJiBlY2hvICJQQVNTOiAkJGkiICkgfHwgZWNobyAiRkFJTDogJCRpIjsgXAorKwlkb25lKQorKworIHRlc3RfZXZwOiAkKEVWUFRFU1QpJChFWEVfRVhUKSBldnB0ZXN0cy50eHQKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChFVlBURVNUKSBldnB0ZXN0cy50eHQKKyAKK0BAIC0yMTMsNyArMjE4LDcgQEAgdGVzdF94NTA5OiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHR4NQorIAllY2hvIHRlc3Qgc2Vjb25kIHg1MDl2MyBjZXJ0aWZpY2F0ZQorIAlzaCAuL3R4NTA5IHYzLWNlcnQyLnBlbSAyPi9kZXYvbnVsbAorIAorLXRlc3RfcnNhOiAkKFJTQVRFU1QpJChFWEVfRVhUKSAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRyc2EgdGVzdHJzYS5wZW0KKyt0ZXN0X3JzYTogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSB0cnNhIHRlc3Ryc2EucGVtCisgCUBzaCAuL3Ryc2EgMj4vZGV2L251bGwKKyAJLi4vdXRpbC9zaGxpYl93cmFwLnNoIC4vJChSU0FURVNUKQorIAorQEAgLTMxMywxMSArMzE4LDExIEBAIHRlc3RfdHNhOiAuLi9hcHBzL29wZW5zc2wkKEVYRV9FWFQpIHRlc3QKKyAJICBzaCAuL3Rlc3R0c2E7IFwKKyAJZmkKKyAKKy10ZXN0X2lnZTogJChJR0VURVNUKSQoRVhFX0VYVCkKKyt0ZXN0X2lnZToKKyAJQGVjaG8gIlRlc3QgSUdFIG1vZGUiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSUdFVEVTVCkKKyAKKy10ZXN0X2pwYWtlOiAkKEpQQUtFVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9qcGFrZToKKyAJQGVjaG8gIlRlc3QgSlBBS0UiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSlBBS0VURVNUKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFlNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY29uZmlndXJlLXRhcmdldHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIG51bWJlciBvZiBjb2xvbnMgYXJlIGltcG9ydGFudCA6KQorCisKKy0tLQorIENvbmZpZ3VyZSB8ICAgMTYgKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yYS9Db25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yYS5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjJhL0NvbmZpZ3VyZQorQEAgLTQ0Myw2ICs0NDMsMjMgQEAgbXkgJXRhYmxlPSgKKyAibGludXgtYWxwaGEtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorICJsaW51eC1hbHBoYStid3gtY2NjIiwiY2NjOi1mYXN0IC1yZWFkb25seV9zdHJpbmdzIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDo6OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX0iLAorIAorKyAKKysjIExpbnV4IG9uIEFSTQorKyJsaW51eC1lbGYtYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWVsZi1hcm1lYiIsIiRFTlZ7J0NDJ306LURCX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybSIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nbnVlYWJpLWFybWViIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LXVjbGliY2VhYmktYXJtZWIiLCIkRU5WeydDQyd9Oi1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgREVTX1JJU0MxOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKysibGludXgtYXZyMzIiLCIkRU5WeydDQyd9Oi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIERFU19SSVNDMToke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLiIsCisrCisrIyMjIyBMaW51eCBvbiBNSVBTL01JUFM2NAorKyJsaW51eC1taXBzIiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwczY0IiwiJEVOVnsnQ0MnfTotREJfRU5ESUFOIC1tYWJpPTY0IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1taXBzNjRlbCIsIiRFTlZ7J0NDJ306LURMX0VORElBTiAtbWFiaT02NCAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtbWlwc2VsIiwiJEVOVnsnQ0MnfTotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysKKyAjIEFuZHJvaWQ6IGxpbnV4LSogYnV0IHdpdGhvdXQgcG9pbnRlcnMgdG8gaGVhZGVycyBhbmQgbGlicy4KKyAiYW5kcm9pZCIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorICJhbmRyb2lkLXg4NiIsImdjYzotbWFuZHJvaWQgLUlcJChBTkRST0lEX0RFVikvaW5jbHVkZSAtQlwkKEFORFJPSURfREVWKS9saWIgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiIuZXZhbHtteSAkYXNtPSR7eDg2X2VsZl9hc219OyRhc209fnMvOmVsZi86YW5kcm9pZC87JGFzbX0uIjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvY3J5cHRvX3VzZV9iaWdpbnRfaW5feDg2LTY0X3BlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM5N2FmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RlcmFtIFN0YXR1czogQmFja3BvcnQKKworV2hlbiBidWlsZGluZyBvbiB4MzIgc3lzdGVtcyB3aGVyZSB0aGUgZGVmYXVsdCB0eXBlIGlzIDMyYml0LCBtYWtlIHN1cmUKK3dlIGNhbiB0cmFuc3BhcmVudGx5IHJlcHJlc2VudCA2NGJpdCBpbnRlZ2Vycy4gIE90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aAorYnVpbGQgZXJyb3JzIGxpa2U6CisvdXNyL2Jpbi9wZXJsIGFzbS9naGFzaC14ODZfNjQucGwgZWxmID4gZ2hhc2gteDg2XzY0LnMKK0ludGVnZXIgb3ZlcmZsb3cgaW4gaGV4YWRlY2ltYWwgbnVtYmVyIGF0IGFzbS8uLi8uLi9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbCBsaW5lIDIwMSwgPD4gbGluZSA4OTAuCisuLi4KK2doYXNoLXg4Nl82NC5zOiBBc3NlbWJsZXIgbWVzc2FnZXM6CitnaGFzaC14ODZfNjQuczo4OTA6IEVycm9yOiBqdW5rICcuMTU0NzMzNTU0Nzk5OTVlKzE5JyBhZnRlciBleHByZXNzaW9uCisKK1dlIGRvbid0IGVuYWJsZSB0aGlzIGdsb2JhbGx5IGFzIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHdlJ2QgZ2V0CiszMmJpdCB2YWx1ZXMgaW50ZXJwcmV0ZWQgYXMgdW5zaWduZWQgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgc2lnbmVkLgorCitSZXBvcnRlZC1ieTogQmVydHJhbmQgSmFjcXVpbiA8YmVydHJhbmRAamFjcXVpbi5iemg+CitVUkw6IGh0dHBzOi8vYnVncy5nZW50b28ub3JnLzU0MjYxOAorCitTaWduZWQtb2ZmLUJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXJAbXZpc3RhLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjJhL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJhLm9yaWcvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCisrKysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsCitAQCAtMTk0LDcgKzE5NCwxMCBAQCBteSAlZ2xvYmFsczsKKyAgICAgfQorICAgICBzdWIgb3V0IHsKKyAgICAgCW15ICRzZWxmID0gc2hpZnQ7CistCisrCSMgV2hlbiBidWlsZGluZyBvbiB4MzIgQUJJcywgdGhlIGV4cGFuZGVkIGhleCB2YWx1ZSBtaWdodCBiZSB0b28KKysJIyBiaWcgdG8gZml0IGludG8gMzJiaXRzLiBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTU0ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vY19yZWhhc2gtY29tcGF0LnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb20gODNmMzE4ZDY4YmJkYWIxY2E4OThjOTQ1NzZhODM4Y2M5N2RmNDcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1ZHdpZyBOdXNzZWwgPGx1ZHdpZy5udXNzZWxAc3VzZS5kZT4KK0RhdGU6IFdlZCwgMjEgQXByIDIwMTAgMTU6NTI6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWxzbyBjcmVhdGUgb2xkIGhhc2ggZm9yIGNvbXBhdGliaWxpdHkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvY19yZWhhc2guaW4gYi90b29scy9jX3JlaGFzaC5pbgoraW5kZXggYjA4NmZmOS4uYjc3N2Q3OSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2NfcmVoYXNoLmluCisrKysgYi90b29scy9jX3JlaGFzaC5pbgorQEAgLTgsOCArOCw2IEBAIG15ICRwcmVmaXg7CisgCisgbXkgJG9wZW5zc2wgPSAkRU5We09QRU5TU0x9IHx8ICJvcGVuc3NsIjsKKyBteSAkcHdkOworLW15ICR4NTA5aGFzaCA9ICItc3ViamVjdF9oYXNoIjsKKy1teSAkY3JsaGFzaCA9ICItaGFzaCI7CisgbXkgJHZlcmJvc2UgPSAwOworIG15ICRzeW1saW5rX2V4aXN0cz1ldmFsIHtzeW1saW5rKCIiLCIiKTsgMX07CisgbXkgJHJlbW92ZWxpbmtzID0gMTsKK0BAIC0xOCwxMCArMTYsNyBAQCBteSAkcmVtb3ZlbGlua3MgPSAxOworIHdoaWxlICggJEFSR1ZbMF0gPX4gL14tLyApIHsKKyAgICAgbXkgJGZsYWcgPSBzaGlmdCBAQVJHVjsKKyAgICAgbGFzdCBpZiAoICRmbGFnIGVxICctLScpOworLSAgICBpZiAoICRmbGFnIGVxICctb2xkJykgeworLQkgICAgJHg1MDloYXNoID0gIi1zdWJqZWN0X2hhc2hfb2xkIjsKKy0JICAgICRjcmxoYXNoID0gIi1oYXNoX29sZCI7CistICAgIH0gZWxzaWYgKCAkZmxhZyBlcSAnLWgnKSB7CisrICAgIGlmICggJGZsYWcgZXEgJy1oJykgeworIAkgICAgaGVscCgpOworICAgICB9IGVsc2lmICggJGZsYWcgZXEgJy1uJyApIHsKKyAJICAgICRyZW1vdmVsaW5rcyA9IDA7CitAQCAtMTEzLDcgKzEwOCw5IEBAIHN1YiBoYXNoX2RpciB7CisgCQkJbmV4dDsKKyAJCX0KKyAJCWxpbmtfaGFzaF9jZXJ0KCRmbmFtZSkgaWYoJGNlcnQpOworKwkJbGlua19oYXNoX2NlcnRfb2xkKCRmbmFtZSkgaWYoJGNlcnQpOworIAkJbGlua19oYXNoX2NybCgkZm5hbWUpIGlmKCRjcmwpOworKwkJbGlua19oYXNoX2NybF9vbGQoJGZuYW1lKSBpZigkY3JsKTsKKyAJfQorIH0KKyAKK0BAIC0xNDYsNiArMTQzLDcgQEAgc3ViIGNoZWNrX2ZpbGUgeworIAorIHN1YiBsaW5rX2hhc2hfY2VydCB7CisgCQlteSAkZm5hbWUgPSAkX1swXTsKKysJCW15ICR4NTA5aGFzaCA9ICRfWzFdIHx8ICctc3ViamVjdF9oYXNoJzsKKyAJCSRmbmFtZSA9fiBzLycvJ1xcJycvZzsKKyAJCW15ICgkaGFzaCwgJGZwcmludCkgPSBgIiRvcGVuc3NsIiB4NTA5ICR4NTA5aGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAiJGZuYW1lImA7CisgCQljaG9tcCAkaGFzaDsKK0BAIC0xNzYsMTEgKzE3NCwyMSBAQCBzdWIgbGlua19oYXNoX2NlcnQgeworIAkJJGhhc2hsaXN0eyRoYXNofSA9ICRmcHJpbnQ7CisgfQorIAorK3N1YiBsaW5rX2hhc2hfY2VydF9vbGQgeworKwkJbGlua19oYXNoX2NlcnQoJF9bMF0sICctc3ViamVjdF9oYXNoX29sZCcpOworK30KKysKKytzdWIgbGlua19oYXNoX2NybF9vbGQgeworKwkJbGlua19oYXNoX2NybCgkX1swXSwgJy1oYXNoX29sZCcpOworK30KKysKKysKKyAjIFNhbWUgYXMgYWJvdmUgZXhjZXB0IGZvciBhIENSTC4gQ1JMIGxpbmtzIGFyZSBvZiB0aGUgZm9ybSA8aGFzaD4ucjxuPgorIAorIHN1YiBsaW5rX2hhc2hfY3JsIHsKKyAJCW15ICRmbmFtZSA9ICRfWzBdOworKwkJbXkgJGNybGhhc2ggPSAkX1sxXSB8fCAiLWhhc2giOworIAkJJGZuYW1lID1+IHMvJy8nXFwnJy9nOworIAkJbXkgKCRoYXNoLCAkZnByaW50KSA9IGAiJG9wZW5zc2wiIGNybCAkY3JsaGFzaCAtZmluZ2VycHJpbnQgLW5vb3V0IC1pbiAnJGZuYW1lJ2A7CisgCQljaG9tcCAkaGFzaDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9jYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE0ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2NhLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMC45LjhtL2FwcHMvQ0EucGwuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTAuOS44bS5vcmlnL2FwcHMvQ0EucGwuaW4JMjAwNi0wNC0yOCAwMDoyODo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBvcGVuc3NsLTAuOS44bS9hcHBzL0NBLnBsLmluCTIwMTAtMDItMjcgMDA6MzY6NTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjUsNiArNjUsNyBAQAorIGZvcmVhY2ggKEBBUkdWKSB7CisgCWlmICggL14oLVw/fC1ofC1oZWxwKSQvICkgeworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMDsKKyAJfSBlbHNpZiAoL14tbmV3Y2VydCQvKSB7CisgCSAgICAjIGNyZWF0ZSBhIGNlcnRpZmljYXRlCitAQCAtMTY1LDYgKzE2Niw3IEBACisgCX0gZWxzZSB7CisgCSAgICBwcmludCBTVERFUlIgIlVua25vd24gYXJnICRfXG4iOworIAkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLW5ld2NlcnR8LW5ld3JlcXwtbmV3cmVxLW5vZGVzfC1uZXdjYXwtc2lnbnwtdmVyaWZ5XG4iOworKwkgICAgcHJpbnQgU1RERVJSICJ1c2FnZTogQ0EgLXNpZ25jZXJ0IGNlcnRmaWxlIGtleWZpbGV8LW5ld2NlcnR8LW5ld3JlcXwtbmV3Y2F8LXNpZ258LXZlcmlmeVxuIjsKKyAJICAgIGV4aXQgMTsKKyAJfQorIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQ0MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL2RlYmlhbi10YXJnZXRzLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL0NvbmZpZ3VyZQorKysrIG9wZW5zc2wtMS4wLjIvQ29uZmlndXJlCitAQCAtMTA3LDYgKzEwNywxMCBAQCBteSAkZ2NjX2RldnRlYW1fd2FybiA9ICItV2FsbCAtcGVkYW50aWMKKyAKKyBteSAkY2xhbmdfZGlzYWJsZWRfd2FybmluZ3MgPSAiLVduby1sYW5ndWFnZS1leHRlbnNpb24tdG9rZW4gLVduby1leHRlbmRlZC1vZmZzZXRvZiAtV25vLXBhZGRlZCAtV25vLXNob3J0ZW4tNjQtdG8tMzIgLVduby1mb3JtYXQtbm9ubGl0ZXJhbCAtV25vLW1pc3Npbmctbm9yZXR1cm4gLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tc2lnbi1jb252ZXJzaW9uIC1Xbm8tdW5yZWFjaGFibGUtY29kZSAtV25vLWNvbnZlcnNpb24gLVduby1kb2N1bWVudGF0aW9uIC1Xbm8tbWlzc2luZy12YXJpYWJsZS1kZWNsYXJhdGlvbnMgLVduby1jYXN0LWFsaWduIC1Xbm8taW5jb21wYXRpYmxlLXBvaW50ZXItdHlwZXMtZGlzY2FyZHMtcXVhbGlmaWVycyAtV25vLW1pc3NpbmctdmFyaWFibGUtZGVjbGFyYXRpb25zIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tZGlzYWJsZWQtbWFjcm8tZXhwYW5zaW9uIC1Xbm8tY29uZGl0aW9uYWwtdW5pbml0aWFsaXplZCAtV25vLXN3aXRjaC1lbnVtIjsKKyAKKysjIFRoZXJlIGFyZSBubyBzZXBhcmF0ZSBDRkxBR1MvQ1BQRkxBR1MvTERGTEFHUywgc2V0IGV2ZXJ5dGhpbmcgaW4gQ0ZMQUdTCisrbXkgJGRlYmlhbl9jZmxhZ3MgPSBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENGTEFHU2AgLiBgZHBrZy1idWlsZGZsYWdzIC0tZ2V0IENQUEZMQUdTYCAuIGBkcGtnLWJ1aWxkZmxhZ3MgLS1nZXQgTERGTEFHU2AgLiAiLVdhLC0tbm9leGVjc3RhY2sgLVdhbGwiOworKyRkZWJpYW5fY2ZsYWdzID1+IHMvXG4vIC9nOworKworIG15ICRzdHJpY3Rfd2FybmluZ3MgPSAwOworIAorIG15ICR4ODZfZ2NjX2Rlcz0iREVTX1BUUiBERVNfUklTQzEgREVTX1VOUk9MTCI7CitAQCAtMzQzLDYgKzM0Nyw1NSBAQCBteSAldGFibGU9KAorICJvc2YxLWFscGhhLWNjIiwgICJjYzotc3RkMSAtdHVuZSBob3N0IC1PNCAtcmVhZG9ubHlfc3RyaW5nczo6KHVua25vd24pOjo6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTks6JHthbHBoYV9hc219OmRsZmNuOmFscGhhLW9zZjEtc2hhcmVkOjo6LnNvIiwKKyAidHJ1NjQtYWxwaGEtY2MiLCAiY2M6LXN0ZDEgLXR1bmUgaG9zdCAtZmFzdCAtcmVhZG9ubHlfc3RyaW5nczo6LXB0aHJlYWQ6OjpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSzoke2FscGhhX2FzbX06ZGxmY246YWxwaGEtb3NmMS1zaGFyZWQ6Oi1tc3ltOi5zbyIsCisgCisrIyBEZWJpYW4gR05VLyogKHZhcmlvdXMgYXJjaGl0ZWN0dXJlcykKKysiZGViaWFuLWFscGhhIiwiZ2NjOi1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hbHBoYS1ldjUiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT1ldjU6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke2FscGhhX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1hcm02NCIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWVsIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFybWhmIiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWFtZDY0IiwgImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtRE1EMzJfUkVHX1Q9aW50OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6IiwKKysiZGViaWFuLWF2cjMyIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLWZvbWl0LWZyYW1lLXBvaW50ZXI6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9OR19CRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtYW1kNjQiLCJnY2M6LW02NCAtRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4ta2ZyZWVic2QtaTM4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tYXJjaD1pNDg2OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHBwYSIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVg6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taHVyZC1pMzg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU9TIC1PMyAtV2EsLS1ub2V4ZWNzdGFjayAtZyAtbXR1bmU9aTQ4NiAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWlhNjQiLCJnY2M6LURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYiLCJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgJHt4ODZfZ2NjX2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2VsZl9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4taTM4Ni1pNDg2IiwiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWFyY2g9aTQ4Njo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLWkzODYtaTU4NiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk1ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1pMzg2LWk2ODYvY21vdiIsImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLW1hcmNoPWk2ODY6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tNjhrIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIE1EMl9DSEFSIFJDNF9JTkRFWDoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzIiwgICAiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHNlbCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzbjMyIiwgICAibWlwczY0LWxpbnV4LWdudWFiaW4zMi1nY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkMyX0NIQVIgUkM0X0lOREVYIERFU19JTlQgREVTX1VOUk9MTCBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tbWlwc24zMmVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpbjMyLWdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzJfQ0hBUiBSQzRfSU5ERVggREVTX0lOVCBERVNfVU5ST0xMIERFU19SSVNDMjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1taXBzNjQiLCAgICJtaXBzNjQtbGludXgtZ251YWJpNjQtZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW1pcHM2NGVsIiwgICAibWlwczY0ZWwtbGludXgtZ251YWJpNjQtZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDMl9DSEFSIFJDNF9JTkRFWCBERVNfSU5UIERFU19VTlJPTEwgREVTX1JJU0MyOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLW5ldGJzZC1pMzg2IiwJImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2QtbTY4ayIsCSJnY2M6LURCX0VORElBTiAtRFRFUk1JT1MgJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1uZXRic2Qtc3BhcmMiLAkiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU9TICR7ZGViaWFuX2NmbGFnc30gLW12ODo6KHVua25vd24pOjo6Qk5fTExPTkcgTUQyX0NIQVIgUkM0X0lOREVYIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWFscGhhIiwiZ2NjOi1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9OjoodW5rbm93bik6OjpTSVhUWV9GT1VSX0JJVF9MT05HIERFU19JTlQgREVTX1BUUiBERVNfUklTQzI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcGVuYnNkLWkzODYiLCAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPUyAke2RlYmlhbl9jZmxhZ3N9IC1tNDg2OjoodW5rbm93bik6OjpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfYXNtfTphLm91dDpkbGZjbjpic2QtZ2NjLXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tb3BlbmJzZC1taXBzIiwiZ2NjOi1ETF9FTkRJQU4gJHtkZWJpYW5fY2ZsYWdzfTo6KHVua25vd24pOjpCTl9MTE9ORyBNRDJfQ0hBUiBSQzRfSU5ERVggUkM0X0NIQVIgREVTX1VOUk9MTCBERVNfUklTQzIgREVTX1BUUiBCRl9QVFI6JHtub19hc219OmRsZmNuOmJzZC1nY2Mtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1vcjFrIiwgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBERVNfUklTQzE6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcG93ZXJwYyIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1wb3dlcnBjc3BlIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXBwYzY0IiwiZ2NjOi1tNjQgLURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9OjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tcHBjNjRlbCIsImdjYzotbTY0IC1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tczM5MCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwgCisrImRlYmlhbi1zMzkweCIsImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc2gzIiwgICAiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNoNCIsICAgImdjYzotRExfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDNlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1zaDRlYiIsICAgImdjYzotREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc306Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORzoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi1tMzJyIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjIiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfTo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjLXY4IiwiZ2NjOi1EQl9FTkRJQU4gLURURVJNSU8gJHtkZWJpYW5fY2ZsYWdzfSAtbWNwdT12OCAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJkZWJpYW4tc3BhcmMtdjkiLCJnY2M6LURCX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1tY3B1PXY5IC1XYSwtQXY4cGx1cyAtRFVMVFJBU1BBUkMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysiZGViaWFuLXNwYXJjNjQiLCJnY2M6LW02NCAtREJfRU5ESUFOIC1EVEVSTUlPICR7ZGViaWFuX2NmbGFnc30gLURVTFRSQVNQQVJDIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImRlYmlhbi14MzIiLCJnY2M6LW14MzIgLURMX0VORElBTiAtRFRFUk1JTyAke2RlYmlhbl9jZmxhZ3N9IC1ETUQzMl9SRUdfVD1pbnQ6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbXgzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OngzMiIsCisrCisgIyMjIworICMjIyMgVmFyaWV0eSBvZiBMSU5VWDotKQorICMjIyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4NWUzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9tYW4tZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLm9yZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MjcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCTIwMTAtMTItMTIgMTY6MTE6MzcuMDAwMDAwMDAwICswMTAwCitAQCAtMTMxLDcgKzEzMSw3IEBACisgCisgTUFLRUZJTEU9IE1ha2VmaWxlCisgCistTUFORElSPSQoT1BFTlNTTERJUikvbWFuCisrTUFORElSPS91c3Ivc2hhcmUvbWFuCisgTUFOMT0xCisgTUFOMz0zCisgTUFOU1VGRklYPQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL21hbi1zZWN0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYzFkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4vbWFuLXNlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCitJbmRleDogb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMGMub3JpZy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMTozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wYy9NYWtlZmlsZS5vcmcJMjAxMC0xMi0xMiAxNjoxMzoyOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNjAsNyArMTYwLDggQEAKKyBNQU5ESVI9L3Vzci9zaGFyZS9tYW4KKyBNQU4xPTEKKyBNQU4zPTMKKy1NQU5TVUZGSVg9CisrTUFOU1VGRklYPXNzbAorK01BTlNFQ1RJT049U1NMCisgSFRNTFNVRkZJWD1odG1sCisgSFRNTERJUj0kKE9QRU5TU0xESVIpL2h0bWwKKyBTSEVMTD0vYmluL3NoCitAQCAtNjUxLDcgKzY1Miw3IEBACisgCQllY2hvICJpbnN0YWxsaW5nIG1hbiQkc2VjLyQkZm4uJCR7c2VjfSQoTUFOU1VGRklYKSI7IFwKKyAJCShjZCBgJChQRVJMKSB1dGlsL2Rpcm5hbWUucGwgJCRpYDsgXAorIAkJc2ggLWMgIiQkcG9kMm1hbiBcCistCQkJLS1zZWN0aW9uPSQkc2VjIC0tY2VudGVyPU9wZW5TU0wgXAorKwkJCS0tc2VjdGlvbj0kJHtzZWN9JChNQU5TRUNUSU9OKSAtLWNlbnRlcj1PcGVuU1NMIFwKKyAJCQktLXJlbGVhc2U9JChWRVJTSU9OKSBgYmFzZW5hbWUgJCRpYCIpIFwKKyAJCQk+ICAkKElOU1RBTExfUFJFRklYKSQoTUFORElSKS9tYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCk7IFwKKyAJCSQoUEVSTCkgdXRpbC9leHRyYWN0LW5hbWVzLnBsIDwgJCRpIHwgXAorQEAgLTY2OCw3ICs2NjksNyBAQAorIAkJZWNobyAiaW5zdGFsbGluZyBtYW4kJHNlYy8kJGZuLiQke3NlY30kKE1BTlNVRkZJWCkiOyBcCisgCQkoY2QgYCQoUEVSTCkgdXRpbC9kaXJuYW1lLnBsICQkaWA7IFwKKyAJCXNoIC1jICIkJHBvZDJtYW4gXAorLQkJCS0tc2VjdGlvbj0kJHNlYyAtLWNlbnRlcj1PcGVuU1NMIFwKKysJCQktLXNlY3Rpb249JCR7c2VjfSQoTUFOU0VDVElPTikgLS1jZW50ZXI9T3BlblNTTCBcCisgCQkJLS1yZWxlYXNlPSQoVkVSU0lPTikgYGJhc2VuYW1lICQkaWAiKSBcCisgCQkJPiAgJChJTlNUQUxMX1BSRUZJWCkkKE1BTkRJUikvbWFuJCRzZWMvJCRmbi4kJHtzZWN9JChNQU5TVUZGSVgpOyBcCisgCQkkKFBFUkwpIHV0aWwvZXh0cmFjdC1uYW1lcy5wbCA8ICQkaSB8IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2NiM2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMDgtMjEgMTM6MzY6NDkuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCitAQCAtMTUzLDcgKzE1Myw3IEBACisgCU5PQUxMU1lNU0ZMQUdTPSctV2wsLS1uby13aG9sZS1hcmNoaXZlJzsgXAorIAlTSEFSRURGTEFHUz0iJChDRkxBR1MpICQoU0hBUkVEX0xERkxBR1MpIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMgLVdsLC1zb25hbWU9JCRTSExJQiQkU0hMSUJfU09WRVIkJFNITElCX1NVRkZJWCIKKyAKKy1ET19HTlVfQVBQPUxERkxBR1M9IiQoQ0ZMQUdTKSAtV2wsLXJwYXRoLCQoTElCUlBBVEgpIgorK0RPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIAorICNUaGlzIGlzIHJhdGhlciBzcGVjaWFsLiAgSXQncyBhIHNwZWNpYWwgdGFyZ2V0IHdpdGggd2hpY2ggb25lIGNhbiBsaW5rCisgI2FwcGxpY2F0aW9ucyB3aXRob3V0IGJvdGhlcmluZyB3aXRoIGFueSBmZWF0dXJlcyB0aGF0IGhhdmUgYW55dGhpbmcgdG8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9uby1zeW1ib2xpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQ0MDhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL25vLXN5bWJvbGljLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjBjL01ha2VmaWxlLnNoYXJlZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjBjLm9yaWcvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6MzYuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMGMvTWFrZWZpbGUuc2hhcmVkCTIwMTAtMTItMTIgMTY6MTM6NDQuMDAwMDAwMDAwICswMTAwCitAQCAtMTUxLDcgKzE1MSw3IEBACisgCVNITElCX1NVRkZJWD07IFwKKyAJQUxMU1lNU0ZMQUdTPSctV2wsLS13aG9sZS1hcmNoaXZlJzsgXAorIAlOT0FMTFNZTVNGTEFHUz0nLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSc7IFwKKy0JU0hBUkVERkxBR1M9IiQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKSAtc2hhcmVkIC1XbCwtQnN5bWJvbGljIC1XbCwtc29uYW1lPSQkU0hMSUIkJFNITElCX1NPVkVSJCRTSExJQl9TVUZGSVgiCisrCVNIQVJFREZMQUdTPSIkKENGTEFHUykgJChTSEFSRURfTERGTEFHUykgLXNoYXJlZCAtV2wsLXNvbmFtZT0kJFNITElCJCRTSExJQl9TT1ZFUiQkU0hMSUJfU1VGRklYIgorIAorIERPX0dOVV9BUFA9TERGTEFHUz0iJChDRkxBR1MpIgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3BpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkYTM4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi9waWMucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by9kZXMvYXNtL2Rlc2JvdGgucGwJMjAwMS0xMC0yNCAyMzoyMDo1Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vZGVzL2FzbS9kZXNib3RoLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTYsNiArMTYsMTEgQEAKKyAKKyAJJnB1c2goImVkaSIpOworIAorKwkmY2FsbCAgICgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYnAiKTsKKysJJmFkZCAgICAoImVicCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKworIAkmY29tbWVudCgiIik7CisgCSZjb21tZW50KCJMb2FkIHRoZSBkYXRhIHdvcmRzIik7CisgCSZtb3YoJEwsJkRXUCgwLCJlYngiLCIiLDApKTsKK0BAIC00NywxNSArNTIsMjEgQEAKKyAJJm1vdigmc3d0bXAoMiksCShEV0MoKCRlbmMpPyIxIjoiMCIpKSk7CisgCSZtb3YoJnN3dG1wKDEpLAkiZWF4Iik7CisgCSZtb3YoJnN3dG1wKDApLAkiZWJ4Iik7CistCSZjYWxsKCJERVNfZW5jcnlwdDIiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKysJJmNhbGwoIkRFU19lbmNyeXB0MlxAUExUIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisgCSZtb3YoJnN3dG1wKDIpLAkoRFdDKCgkZW5jKT8iMCI6IjEiKSkpOworIAkmbW92KCZzd3RtcCgxKSwJImVkaSIpOworIAkmbW92KCZzd3RtcCgwKSwJImVieCIpOworLQkmY2FsbCgiREVTX2VuY3J5cHQyIik7CisrCSZleGNoKCJlYngiLCAiZWJwIik7CisrCSZjYWxsKCJERVNfZW5jcnlwdDJcQFBMVCIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworIAkmbW92KCZzd3RtcCgyKSwJKERXQygoJGVuYyk/IjEiOiIwIikpKTsKKyAJJm1vdigmc3d0bXAoMSksCSJlc2kiKTsKKyAJJm1vdigmc3d0bXAoMCksCSJlYngiKTsKKy0JJmNhbGwoIkRFU19lbmNyeXB0MiIpOworKwkmZXhjaCgiZWJ4IiwgImVicCIpOworKwkmY2FsbCgiREVTX2VuY3J5cHQyXEBQTFQiKTsKKysJJmV4Y2goImVieCIsICJlYnAiKTsKKyAKKyAJJnN0YWNrX3BvcCgzKTsKKyAJJm1vdigkTCwmRFdQKDAsImVieCIsIiIsMCkpOworSW5kZXg6IG9wZW5zc2wtMS4wLjFjL2NyeXB0by9wZXJsYXNtL2NiYy5wbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFjLm9yaWcvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTEtMDctMTMgMDg6MjI6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20vY2JjLnBsCTIwMTItMDctMjkgMTQ6MTU6MjYuMDAwMDAwMDAwICswMjAwCitAQCAtMTIyLDcgKzEyMiwxMSBAQAorIAkmbW92KCZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApLAkiZWF4Iik7CSMgcHV0IGluIGFycmF5IGZvciBjYWxsCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRlbmNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDAiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDAiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQwIikgLiAiXSIpOworKwkmY2FsbCgiJGVuY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOworIAkmbW92KCJlYngiLAkmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApKTsKK0BAIC0xODUsNyArMTg5LDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgaW4gYXJyYXkgZm9yIGNhbGwKKyAJJm1vdigmRFdQKCRkYXRhX29mZis0LCJlc3AiLCIiLDApLAkiZWJ4Iik7CSMKKyAKKy0JJmNhbGwoJGVuY19mdW5jKTsKKysJJmNhbGwJKCZsYWJlbCgicGljX3BvaW50MSIpKTsKKysJJnNldF9sYWJlbCgicGljX3BvaW50MSIpOworKwkmYmxpbmRwb3AoImVieCIpOworKwkmYWRkCSgiZWJ4IiwgIlwkX0dMT0JBTF9PRkZTRVRfVEFCTEVfK1suLSIgLiAmbGFiZWwoInBpY19wb2ludDEiKSAuICJdIik7CisrCSZjYWxsKCIkZW5jX2Z1bmNcQFBMVCIpOworIAorIAkmbW92KCJlYXgiLAkmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSk7CisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOworQEAgLTIxOCw3ICsyMjYsMTEgQEAKKyAJJm1vdigmRFdQKCRkYXRhX29mZiwiZXNwIiwiIiwwKSwJImVheCIpOwkjIHB1dCBiYWNrCisgCSZtb3YoJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSwJImVieCIpOwkjCisgCistCSZjYWxsKCRkZWNfZnVuYyk7CisrCSZjYWxsCSgmbGFiZWwoInBpY19wb2ludDIiKSk7CisrCSZzZXRfbGFiZWwoInBpY19wb2ludDIiKTsKKysJJmJsaW5kcG9wKCJlYngiKTsKKysJJmFkZAkoImVieCIsICJcJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0iIC4gJmxhYmVsKCJwaWNfcG9pbnQyIikgLiAiXSIpOworKwkmY2FsbCgiJGRlY19mdW5jXEBQTFQiKTsKKyAKKyAJJm1vdigiZWF4IiwJJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCkpOwkjIGdldCByZXR1cm4KKyAJJm1vdigiZWJ4IiwJJkRXUCgkZGF0YV9vZmYrNCwiZXNwIiwiIiwwKSk7CSMKK0BAIC0yNjEsNyArMjczLDExIEBACisgCSZtb3YoJkRXUCgkZGF0YV9vZmYsImVzcCIsIiIsMCksCSJlYXgiKTsJIyBwdXQgYmFjaworIAkmbW92KCZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCksCSJlYngiKTsJIworIAorLQkmY2FsbCgkZGVjX2Z1bmMpOworKwkmY2FsbAkoJmxhYmVsKCJwaWNfcG9pbnQzIikpOworKwkmc2V0X2xhYmVsKCJwaWNfcG9pbnQzIik7CisrCSZibGluZHBvcCgiZWJ4Iik7CisrCSZhZGQJKCJlYngiLCAiXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tIiAuICZsYWJlbCgicGljX3BvaW50MyIpIC4gIl0iKTsKKysJJmNhbGwoIiRkZWNfZnVuY1xAUExUIik7CisgCisgCSZtb3YoImVheCIsCSZEV1AoJGRhdGFfb2ZmLCJlc3AiLCIiLDApKTsJIyBnZXQgcmV0dXJuCisgCSZtb3YoImVieCIsCSZEV1AoJGRhdGFfb2ZmKzQsImVzcCIsIiIsMCkpOwkjCitJbmRleDogb3BlbnNzbC0xLjAuMWMvY3J5cHRvL3Blcmxhc20veDg2Z2FzLnBsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWMub3JpZy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMS0xMi0wOSAyMDoxNjozNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4xYy9jcnlwdG8vcGVybGFzbS94ODZnYXMucGwJMjAxMi0wNy0yOSAxNDoxNToyNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNjEsNiArMTYxLDcgQEAKKyAJaWYgKCQ6Om1hY29zeCkJeyBwdXNoIChAb3V0LCIkdG1wLDJcbiIpOyB9CisgCWVsc2lmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiJHRtcCw0XG4iKTsgfQorIAllbHNlCQl7IHB1c2ggKEBvdXQsIiR0bXBcbiIpOyB9CisrCWlmICgkOjplbGYpCXsgcHVzaCAoQG91dCwiLmhpZGRlblx0T1BFTlNTTF9pYTMyY2FwX1BcbiIpOyB9CisgICAgIH0KKyAgICAgcHVzaChAb3V0LCRpbml0c2VnKSBpZiAoJGluaXRzZWcpOworIH0KK0BAIC0yMTgsOCArMjE5LDIzIEBACisgICAgIGVsc2lmICgkOjplbGYpCisgICAgIHsJJGluaXRzZWcuPTw8X19fOworIC5zZWN0aW9uCS5pbml0CisrX19fCisrICAgICAgICBpZiAoJDo6cGljKQorKwl7ICAgJGluaXRzZWcuPTw8X19fOworKwlwdXNobAklZWJ4CisrCWNhbGwJLnBpY19wb2ludDAKKysucGljX3BvaW50MDoKKysJcG9wbAklZWJ4CisrCWFkZGwJXCRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tLnBpY19wb2ludDBdLCVlYngKKysJY2FsbAkkZlxAUExUCisrCXBvcGwJJWVieAorK19fXworKwl9CisrCWVsc2UKKysJeyAgICRpbml0c2VnLj08PF9fXzsKKyAJY2FsbAkkZgorIF9fXworKwl9CisgICAgIH0KKyAgICAgZWxzaWYgKCQ6OmNvZmYpCisgICAgIHsgICAkaW5pdHNlZy49PDxfX187CSMgYXBwbGllcyB0byBib3RoIEN5Z3dpbiBhbmQgTWluZ3cKK0luZGV4OiBvcGVuc3NsLTEuMC4xYy9jcnlwdG8veDg2Y3B1aWQucGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xYy5vcmlnL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTAyLTI4IDE1OjIwOjM0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjFjL2NyeXB0by94ODZjcHVpZC5wbAkyMDEyLTA3LTI5IDE0OjE1OjI2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgsNiArOCw4IEBACisgCisgZm9yIChAQVJHVikgeyAkc3NlMj0xIGlmICgvLURPUEVOU1NMX0lBMzJfU1NFMi8pOyB9CisgCisrcHVzaChAb3V0LCAiLmhpZGRlbiBPUEVOU1NMX2lhMzJjYXBfUFxuIik7CisrCisgJmZ1bmN0aW9uX2JlZ2luKCJPUEVOU1NMX2lhMzJfY3B1aWQiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcHVzaGYJKCk7CitAQCAtMTM5LDkgKzE0MSw3IEBACisgJnNldF9sYWJlbCgibm9jcHVpZCIpOworICZmdW5jdGlvbl9lbmQoIk9QRU5TU0xfaWEzMl9jcHVpZCIpOworIAorLSZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKy0KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIsIkVYVFJOXHRfT1BFTlNTTF9pYTMyY2FwX1A6RFdPUkQiKTsKKysmZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9yZHRzYyIpOworIAkmeG9yCSgiZWF4IiwiZWF4Iik7CisgCSZ4b3IJKCJlZHgiLCJlZHgiKTsKKyAJJnBpY21ldXAoImVjeCIsIk9QRU5TU0xfaWEzMmNhcF9QIik7CitAQCAtMTU1LDcgKzE1NSw3IEBACisgIyBUaGlzIHdvcmtzIGluIFJpbmcgMCBvbmx5IFtyZWFkIERKR1BQK01TLURPUytwcml2aWxlZ2VkIERQTUkgaG9zdF0sCisgIyBidXQgaXQncyBzYWZlIHRvIGNhbGwgaXQgb24gYW55IFtzdXBwb3J0ZWRdIDMyLWJpdCBwbGF0Zm9ybS4uLgorICMgSnVzdCBjaGVjayBmb3IgW25vbi1demVybyByZXR1cm4gdmFsdWUuLi4KKy0mZnVuY3Rpb25fYmVnaW5fQigiT1BFTlNTTF9pbnN0cnVtZW50X2hhbHQiLCJFWFRSTlx0X09QRU5TU0xfaWEzMmNhcF9QOkRXT1JEIik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIk9QRU5TU0xfaW5zdHJ1bWVudF9oYWx0Iik7CisgCSZwaWNtZXVwKCJlY3giLCJPUEVOU1NMX2lhMzJjYXBfUCIpOworIAkmYnQJKCZEV1AoMCwiZWN4IiksNCk7CisgCSZqbmMJKCZsYWJlbCgibm9oYWx0IikpOwkjIG5vIFRTQworQEAgLTIyMiw3ICsyMjIsNyBAQAorIAkmcmV0CSgpOworICZmdW5jdGlvbl9lbmRfQigiT1BFTlNTTF9mYXJfc3BpbiIpOworIAorLSZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1IiwiRVhUUk5cdF9PUEVOU1NMX2lhMzJjYXBfUDpEV09SRCIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCJPUEVOU1NMX3dpcGVfY3B1Iik7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJJnhvcgkoImVkeCIsImVkeCIpOworIAkmcGljbWV1cCgiZWN4IiwiT1BFTlNTTF9pYTMyY2FwX1AiKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjQ5MTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuL3ZlcnNpb24tc2NyaXB0LnBhdGNoCkBAIC0wLDAgKzEsNDY2MyBAQAorSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L0NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1Lm9yaWcvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvQ29uZmlndXJlCTIwMTQtMDItMjQgMjE6MDI6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTY1MSw2ICsxNjUxLDggQEAKKyAJCX0KKyAJfQorIAorKyRzaGFyZWRfbGRmbGFnIC49ICIgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9b3BlbnNzbC5sZCI7CisrCisgb3BlbihJTiwnPE1ha2VmaWxlLm9yZycpIHx8IGRpZSAidW5hYmxlIHRvIHJlYWQgTWFrZWZpbGUub3JnOiQhXG4iOworIHVubGluaygiJE1ha2VmaWxlLm5ldyIpIHx8IGRpZSAidW5hYmxlIHRvIHJlbW92ZSBvbGQgJE1ha2VmaWxlLm5ldzokIVxuIiBpZiAtZSAiJE1ha2VmaWxlLm5ldyI7Cisgb3BlbihPVVQsIj4kTWFrZWZpbGUubmV3IikgfHwgZGllICJ1bmFibGUgdG8gY3JlYXRlICRNYWtlZmlsZS5uZXc6JCFcbiI7CitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMjoxOTowOC42MDE4MjcyNjYgKzAxMDAKK0BAIC0wLDAgKzEsNDYxNSBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQlCSU9fZl9zc2w7CisrCQlCSU9fbmV3X2J1ZmZlcl9zc2xfY29ubmVjdDsKKysJCUJJT19uZXdfc3NsOworKwkJQklPX25ld19zc2xfY29ubmVjdDsKKysJCUJJT19wcm94eV9zc2xfY29weV9zZXNzaW9uX2lkOworKwkJQklPX3NzbF9jb3B5X3Nlc3Npb25faWQ7CisrCQlCSU9fc3NsX3NodXRkb3duOworKwkJZDJpX1NTTF9TRVNTSU9OOworKwkJRFRMU3YxX2NsaWVudF9tZXRob2Q7CisrCQlEVExTdjFfbWV0aG9kOworKwkJRFRMU3YxX3NlcnZlcl9tZXRob2Q7CisrCQlFUlJfbG9hZF9TU0xfc3RyaW5nczsKKysJCWkyZF9TU0xfU0VTU0lPTjsKKysJCWtzc2xfYnVpbGRfcHJpbmNpcGFsXzI7CisrCQlrc3NsX2NnZXRfdGt0OworKwkJa3NzbF9jaGVja19hdXRoZW50OworKwkJa3NzbF9jdHhfZnJlZTsKKysJCWtzc2xfY3R4X25ldzsKKysJCWtzc2xfY3R4X3NldGtleTsKKysJCWtzc2xfY3R4X3NldHByaW5jOworKwkJa3NzbF9jdHhfc2V0c3RyaW5nOworKwkJa3NzbF9jdHhfc2hvdzsKKysJCWtzc2xfZXJyX3NldDsKKysJCWtzc2xfa3JiNV9mcmVlX2RhdGFfY29udGVudHM7CisrCQlrc3NsX3NnZXRfdGt0OworKwkJa3NzbF9za2lwX2NvbmZvdW5kOworKwkJa3NzbF92YWxpZGF0ZV90aW1lczsKKysJCVBFTV9yZWFkX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV9yZWFkX1NTTF9TRVNTSU9OOworKwkJUEVNX3dyaXRlX2Jpb19TU0xfU0VTU0lPTjsKKysJCVBFTV93cml0ZV9TU0xfU0VTU0lPTjsKKysJCVNTTF9hY2NlcHQ7CisrCQlTU0xfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9hZGRfZGlyX2NlcnRfc3ViamVjdHNfdG9fc3RhY2s7CisrCQlTU0xfYWRkX2Rpcl9jZXJ0X3N1YmpzX3RvX3N0azsKKysJCVNTTF9hZGRfZmlsZV9jZXJ0X3N1YmplY3RzX3RvX3N0YWNrOworKwkJU1NMX2FkZF9maWxlX2NlcnRfc3VianNfdG9fc3RrOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nOworKwkJU1NMX2FsZXJ0X2Rlc2Nfc3RyaW5nX2xvbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmc7CisrCQlTU0xfYWxlcnRfdHlwZV9zdHJpbmdfbG9uZzsKKysJCVNTTF9jYWxsYmFja19jdHJsOworKwkJU1NMX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NJUEhFUl9kZXNjcmlwdGlvbjsKKysJCVNTTF9DSVBIRVJfZ2V0X2JpdHM7CisrCQlTU0xfQ0lQSEVSX2dldF9uYW1lOworKwkJU1NMX0NJUEhFUl9nZXRfdmVyc2lvbjsKKysJCVNTTF9jbGVhcjsKKysJCVNTTF9DT01QX2FkZF9jb21wcmVzc2lvbl9tZXRob2Q7CisrCQlTU0xfQ09NUF9nZXRfY29tcHJlc3Npb25fbWV0aG9kczsKKysJCVNTTF9DT01QX2dldF9jb21wcmVzc19tZXRob2RzOworKwkJU1NMX0NPTVBfZ2V0X25hbWU7CisrCQlTU0xfY29ubmVjdDsKKysJCVNTTF9jb3B5X3Nlc3Npb25faWQ7CisrCQlTU0xfY3RybDsKKysJCVNTTF9DVFhfYWRkX2NsaWVudF9DQTsKKysJCVNTTF9DVFhfYWRkX3Nlc3Npb247CisrCQlTU0xfQ1RYX2NhbGxiYWNrX2N0cmw7CisrCQlTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5OworKwkJU1NMX0NUWF9jdHJsOworKwkJU1NMX0NUWF9mbHVzaF9zZXNzaW9uczsKKysJCVNTTF9DVFhfZnJlZTsKKysJCVNTTF9DVFhfZ2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfZ2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9nZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9DVFhfZ2V0X2luZm9fY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF9xdWlldF9zaHV0ZG93bjsKKysJCVNTTF9DVFhfZ2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfZGVwdGg7CisrCQlTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZTsKKysJCVNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zOworKwkJU1NMX0NUWF9uZXc7CisrCQlTU0xfQ1RYX3JlbW92ZV9zZXNzaW9uOworKwkJU1NMX0NUWF9zZXNzX2dldF9nZXRfY2I7CisrCQlTU0xfQ1RYX3Nlc3NfZ2V0X25ld19jYjsKKysJCVNTTF9DVFhfc2Vzc19nZXRfcmVtb3ZlX2NiOworKwkJU1NMX0NUWF9zZXNzaW9uczsKKysJCVNTTF9DVFhfc2Vzc19zZXRfZ2V0X2NiOworKwkJU1NMX0NUWF9zZXNzX3NldF9uZXdfY2I7CisrCQlTU0xfQ1RYX3Nlc3Nfc2V0X3JlbW92ZV9jYjsKKysJCVNTTF9DVFhfc2V0MV9wYXJhbTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfc3RvcmU7CisrCQlTU0xfQ1RYX3NldF9jZXJ0X3ZlcmlmeV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X2NlcnRfdmVyaWZ5X2NiOworKwkJU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Q7CisrCQlTU0xfQ1RYX3NldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9DVFhfc2V0X2NsaWVudF9jZXJ0X2NiOworKwkJU1NMX0NUWF9zZXRfY2xpZW50X2NlcnRfZW5naW5lOworKwkJU1NMX0NUWF9zZXRfY29va2llX2dlbmVyYXRlX2NiOworKwkJU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYjsKKysJCVNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiOworKwkJU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGE7CisrCQlTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRoczsKKysJCVNTTF9DVFhfc2V0X2RlZl9wYXNzd2RfY2JfdWQ7CisrCQlTU0xfQ1RYX3NldF9kZWZfdmVyaWZ5X3BhdGhzOworKwkJU1NMX0NUWF9zZXRfZXhfZGF0YTsKKysJCVNTTF9DVFhfc2V0X2dlbmVyYXRlX3Nlc3Npb25faWQ7CisrCQlTU0xfQ1RYX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfbXNnX2NhbGxiYWNrOworKwkJU1NMX0NUWF9zZXRfcHNrX2NsaWVudF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF9wdXJwb3NlOworKwkJU1NMX0NUWF9zZXRfcXVpZXRfc2h1dGRvd247CisrCQlTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQ7CisrCQlTU0xfQ1RYX3NldF9zc2xfdmVyc2lvbjsKKysJCVNTTF9DVFhfc2V0X3RpbWVvdXQ7CisrCQlTU0xfQ1RYX3NldF90bXBfZGhfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3RtcF9yc2FfY2FsbGJhY2s7CisrCQlTU0xfQ1RYX3NldF90cnVzdDsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeTsKKysJCVNTTF9DVFhfc2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9DVFhfdXNlX2NlcnRfY2hhaW5fZmlsZTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGU7CisrCQlTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9maWxlOworKwkJU1NMX0NUWF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1ByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9DVFhfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX0NUWF91c2VfUlNBUHJpdmF0ZUtleTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfQVNOMTsKKysJCVNTTF9DVFhfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTF9kb19oYW5kc2hha2U7CisrCQlTU0xfZHVwOworKwkJU1NMX2R1cF9DQV9saXN0OworKwkJU1NMZWF5X2FkZF9zc2xfYWxnb3JpdGhtczsKKysJCVNTTF9mcmVlOworKwkJU1NMX2dldDFfc2Vzc2lvbjsKKysJCVNTTF9nZXRfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X2NpcGhlcl9saXN0OworKwkJU1NMX2dldF9jaXBoZXJzOworKwkJU1NMX2dldF9jbGllbnRfQ0FfbGlzdDsKKysJCVNTTF9nZXRfY3VycmVudF9jaXBoZXI7CisrCQlTU0xfZ2V0X2N1cnJlbnRfY29tcHJlc3Npb247CisrCQlTU0xfZ2V0X2N1cnJlbnRfZXhwYW5zaW9uOworKwkJU1NMX2dldF9kZWZhdWx0X3RpbWVvdXQ7CisrCQlTU0xfZ2V0X2Vycm9yOworKwkJU1NMX2dldF9leF9kYXRhOworKwkJU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RYX2lkeDsKKysJCVNTTF9nZXRfZXhfZF9YNTA5X1NUT1JFX0NUWF9pZHg7CisrCQlTU0xfZ2V0X2V4X25ld19pbmRleDsKKysJCVNTTF9nZXRfZmQ7CisrCQlTU0xfZ2V0X2ZpbmlzaGVkOworKwkJU1NMX2dldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX2dldF9wZWVyX2NlcnRfY2hhaW47CisrCQlTU0xfZ2V0X3BlZXJfY2VydGlmaWNhdGU7CisrCQlTU0xfZ2V0X3BlZXJfZmluaXNoZWQ7CisrCQlTU0xfZ2V0X3ByaXZhdGVrZXk7CisrCQlTU0xfZ2V0X3Bza19pZGVudGl0eTsKKysJCVNTTF9nZXRfcHNrX2lkZW50aXR5X2hpbnQ7CisrCQlTU0xfZ2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX2dldF9yYmlvOworKwkJU1NMX2dldF9yZWFkX2FoZWFkOworKwkJU1NMX2dldF9yZmQ7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWU7CisrCQlTU0xfZ2V0X3NlcnZlcm5hbWVfdHlwZTsKKysJCVNTTF9nZXRfc2Vzc2lvbjsKKysJCVNTTF9nZXRfc2hhcmVkX2NpcGhlcnM7CisrCQlTU0xfZ2V0X3NodXRkb3duOworKwkJU1NMX2dldF9TU0xfQ1RYOworKwkJU1NMX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX2dldF92ZXJpZnlfY2FsbGJhY2s7CisrCQlTU0xfZ2V0X3ZlcmlmeV9kZXB0aDsKKysJCVNTTF9nZXRfdmVyaWZ5X21vZGU7CisrCQlTU0xfZ2V0X3ZlcmlmeV9yZXN1bHQ7CisrCQlTU0xfZ2V0X3ZlcnNpb247CisrCQlTU0xfZ2V0X3diaW87CisrCQlTU0xfZ2V0X3dmZDsKKysJCVNTTF9oYXNfbWF0Y2hpbmdfc2Vzc2lvbl9pZDsKKysJCVNTTF9saWJyYXJ5X2luaXQ7CisrCQlTU0xfbG9hZF9jbGllbnRfQ0FfZmlsZTsKKysJCVNTTF9sb2FkX2Vycm9yX3N0cmluZ3M7CisrCQlTU0xfbmV3OworKwkJU1NMX3BlZWs7CisrCQlTU0xfcGVuZGluZzsKKysJCVNTTF9yZWFkOworKwkJU1NMX3JlbmVnb3RpYXRlOworKwkJU1NMX3JlbmVnb3RpYXRlX3BlbmRpbmc7CisrCQlTU0xfcnN0YXRlX3N0cmluZzsKKysJCVNTTF9yc3RhdGVfc3RyaW5nX2xvbmc7CisrCQlTU0xfU0VTU0lPTl9jbXA7CisrCQlTU0xfU0VTU0lPTl9mcmVlOworKwkJU1NMX1NFU1NJT05fZ2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9nZXRfZXhfbmV3X2luZGV4OworKwkJU1NMX1NFU1NJT05fZ2V0X2lkOworKwkJU1NMX1NFU1NJT05fZ2V0X3RpbWU7CisrCQlTU0xfU0VTU0lPTl9nZXRfdGltZW91dDsKKysJCVNTTF9TRVNTSU9OX2hhc2g7CisrCQlTU0xfU0VTU0lPTl9uZXc7CisrCQlTU0xfU0VTU0lPTl9wcmludDsKKysJCVNTTF9TRVNTSU9OX3ByaW50X2ZwOworKwkJU1NMX1NFU1NJT05fc2V0X2V4X2RhdGE7CisrCQlTU0xfU0VTU0lPTl9zZXRfdGltZTsKKysJCVNTTF9TRVNTSU9OX3NldF90aW1lb3V0OworKwkJU1NMX3NldDFfcGFyYW07CisrCQlTU0xfc2V0X2FjY2VwdF9zdGF0ZTsKKysJCVNTTF9zZXRfYmlvOworKwkJU1NMX3NldF9jaXBoZXJfbGlzdDsKKysJCVNTTF9zZXRfY2xpZW50X0NBX2xpc3Q7CisrCQlTU0xfc2V0X2Nvbm5lY3Rfc3RhdGU7CisrCQlTU0xfc2V0X2V4X2RhdGE7CisrCQlTU0xfc2V0X2ZkOworKwkJU1NMX3NldF9nZW5lcmF0ZV9zZXNzaW9uX2lkOworKwkJU1NMX3NldF9pbmZvX2NhbGxiYWNrOworKwkJU1NMX3NldF9tc2dfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19jbGllbnRfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3Bza19zZXJ2ZXJfY2FsbGJhY2s7CisrCQlTU0xfc2V0X3B1cnBvc2U7CisrCQlTU0xfc2V0X3F1aWV0X3NodXRkb3duOworKwkJU1NMX3NldF9yZWFkX2FoZWFkOworKwkJU1NMX3NldF9yZmQ7CisrCQlTU0xfc2V0X3Nlc3Npb247CisrCQlTU0xfc2V0X3Nlc3Npb25faWRfY29udGV4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl9zZWNyZXRfY2I7CisrCQlTU0xfc2V0X3Nlc3Npb25fdGlja2V0X2V4dDsKKysJCVNTTF9zZXRfc2Vzc2lvbl90aWNrZXRfZXh0X2NiOworKwkJU1NMX3NldF9zaHV0ZG93bjsKKysJCVNTTF9zZXRfU1NMX0NUWDsKKysJCVNTTF9zZXRfc3NsX21ldGhvZDsKKysJCVNTTF9zZXRfdG1wX2RoX2NhbGxiYWNrOworKwkJU1NMX3NldF90bXBfZWNkaF9jYWxsYmFjazsKKysJCVNTTF9zZXRfdG1wX3JzYV9jYWxsYmFjazsKKysJCVNTTF9zZXRfdHJ1c3Q7CisrCQlTU0xfc2V0X3ZlcmlmeTsKKysJCVNTTF9zZXRfdmVyaWZ5X2RlcHRoOworKwkJU1NMX3NldF92ZXJpZnlfcmVzdWx0OworKwkJU1NMX3NldF93ZmQ7CisrCQlTU0xfc2h1dGRvd247CisrCQlTU0xfc3RhdGU7CisrCQlTU0xfc3RhdGVfc3RyaW5nOworKwkJU1NMX3N0YXRlX3N0cmluZ19sb25nOworKwkJU1NMX3VzZV9jZXJ0aWZpY2F0ZTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfQVNOMTsKKysJCVNTTF91c2VfY2VydGlmaWNhdGVfZmlsZTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleTsKKysJCVNTTF91c2VfUHJpdmF0ZUtleV9BU04xOworKwkJU1NMX3VzZV9Qcml2YXRlS2V5X2ZpbGU7CisrCQlTU0xfdXNlX3Bza19pZGVudGl0eV9oaW50OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5OworKwkJU1NMX3VzZV9SU0FQcml2YXRlS2V5X0FTTjE7CisrCQlTU0xfdXNlX1JTQVByaXZhdGVLZXlfZmlsZTsKKysJCVNTTHYyM19jbGllbnRfbWV0aG9kOworKwkJU1NMdjIzX21ldGhvZDsKKysJCVNTTHYyM19zZXJ2ZXJfbWV0aG9kOworKwkJU1NMdjJfY2xpZW50X21ldGhvZDsKKysJCVNTTHYyX21ldGhvZDsKKysJCVNTTHYyX3NlcnZlcl9tZXRob2Q7CisrCQlTU0x2M19jbGllbnRfbWV0aG9kOworKwkJU1NMdjNfbWV0aG9kOworKwkJU1NMdjNfc2VydmVyX21ldGhvZDsKKysJCVNTTF92ZXJzaW9uOworKwkJU1NMX3dhbnQ7CisrCQlTU0xfd3JpdGU7CisrCQlUTFN2MV9jbGllbnRfbWV0aG9kOworKwkJVExTdjFfbWV0aG9kOworKwkJVExTdjFfc2VydmVyX21ldGhvZDsKKysKKysKKysJCVNTTGVheTsKKysJCVNTTGVheV92ZXJzaW9uOworKwkJQVNOMV9CSVRfU1RSSU5HX2FzbjFfbWV0aDsKKysJCUFTTjFfSEVBREVSX2ZyZWU7CisrCQlBU04xX0hFQURFUl9uZXc7CisrCQlBU04xX0lBNVNUUklOR19hc24xX21ldGg7CisrCQlBU04xX0lOVEVHRVJfZ2V0OworKwkJQVNOMV9JTlRFR0VSX3NldDsKKysJCUFTTjFfSU5URUdFUl90b19CTjsKKysJCUFTTjFfT0JKRUNUX2NyZWF0ZTsKKysJCUFTTjFfT0JKRUNUX2ZyZWU7CisrCQlBU04xX09CSkVDVF9uZXc7CisrCQlBU04xX1BSSU5UQUJMRV90eXBlOworKwkJQVNOMV9TVFJJTkdfY21wOworKwkJQVNOMV9TVFJJTkdfZHVwOworKwkJQVNOMV9TVFJJTkdfZnJlZTsKKysJCUFTTjFfU1RSSU5HX25ldzsKKysJCUFTTjFfU1RSSU5HX3ByaW50OworKwkJQVNOMV9TVFJJTkdfc2V0OworKwkJQVNOMV9TVFJJTkdfdHlwZV9uZXc7CisrCQlBU04xX1RZUEVfZnJlZTsKKysJCUFTTjFfVFlQRV9uZXc7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR190b19zdHJpbmc7CisrCQlBU04xX1VUQ1RJTUVfY2hlY2s7CisrCQlBU04xX1VUQ1RJTUVfcHJpbnQ7CisrCQlBU04xX1VUQ1RJTUVfc2V0OworKwkJQVNOMV9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlBU04xX2QyaV9iaW87CisrCQlBU04xX2QyaV9mcDsKKysJCUFTTjFfZGlnZXN0OworKwkJQVNOMV9kdXA7CisrCQlBU04xX2dldF9vYmplY3Q7CisrCQlBU04xX2kyZF9iaW87CisrCQlBU04xX2kyZF9mcDsKKysJCUFTTjFfb2JqZWN0X3NpemU7CisrCQlBU04xX3BhcnNlOworKwkJQVNOMV9wdXRfb2JqZWN0OworKwkJQVNOMV9zaWduOworKwkJQVNOMV92ZXJpZnk7CisrCQlCRl9jYmNfZW5jcnlwdDsKKysJCUJGX2NmYjY0X2VuY3J5cHQ7CisrCQlCRl9lY2JfZW5jcnlwdDsKKysJCUJGX2VuY3J5cHQ7CisrCQlCRl9vZmI2NF9lbmNyeXB0OworKwkJQkZfb3B0aW9uczsKKysJCUJGX3NldF9rZXk7CisrCQlCSU9fQ09OTkVDVF9mcmVlOworKwkJQklPX0NPTk5FQ1RfbmV3OworKwkJQklPX2FjY2VwdDsKKysJCUJJT19jdHJsOworKwkJQklPX2ludF9jdHJsOworKwkJQklPX2RlYnVnX2NhbGxiYWNrOworKwkJQklPX2R1bXA7CisrCQlCSU9fZHVwX2NoYWluOworKwkJQklPX2ZfYmFzZTY0OworKwkJQklPX2ZfYnVmZmVyOworKwkJQklPX2ZfY2lwaGVyOworKwkJQklPX2ZfbWQ7CisrCQlCSU9fZl9udWxsOworKwkJQklPX2ZfcHJveHlfc2VydmVyOworKwkJQklPX2ZkX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19mZF9zaG91bGRfcmV0cnk7CisrCQlCSU9fZmluZF90eXBlOworKwkJQklPX2ZyZWU7CisrCQlCSU9fZnJlZV9hbGw7CisrCQlCSU9fZ2V0X2FjY2VwdF9zb2NrZXQ7CisrCQlCSU9fZ2V0X2ZpbHRlcl9iaW87CisrCQlCSU9fZ2V0X2hvc3RfaXA7CisrCQlCSU9fZ2V0X3BvcnQ7CisrCQlCSU9fZ2V0X3JldHJ5X0JJTzsKKysJCUJJT19nZXRfcmV0cnlfcmVhc29uOworKwkJQklPX2dldGhvc3RieW5hbWU7CisrCQlCSU9fZ2V0czsKKysJCUJJT19uZXc7CisrCQlCSU9fbmV3X2FjY2VwdDsKKysJCUJJT19uZXdfY29ubmVjdDsKKysJCUJJT19uZXdfZmQ7CisrCQlCSU9fbmV3X2ZpbGU7CisrCQlCSU9fbmV3X2ZwOworKwkJQklPX25ld19zb2NrZXQ7CisrCQlCSU9fcG9wOworKwkJQklPX3ByaW50ZjsKKysJCUJJT19wdXNoOworKwkJQklPX3B1dHM7CisrCQlCSU9fcmVhZDsKKysJCUJJT19zX2FjY2VwdDsKKysJCUJJT19zX2Nvbm5lY3Q7CisrCQlCSU9fc19mZDsKKysJCUJJT19zX2ZpbGU7CisrCQlCSU9fc19tZW07CisrCQlCSU9fc19udWxsOworKwkJQklPX3NfcHJveHlfY2xpZW50OworKwkJQklPX3Nfc29ja2V0OworKwkJQklPX3NldDsKKysJCUJJT19zZXRfY2lwaGVyOworKwkJQklPX3NldF90Y3BfbmRlbGF5OworKwkJQklPX3NvY2tfY2xlYW51cDsKKysJCUJJT19zb2NrX2Vycm9yOworKwkJQklPX3NvY2tfaW5pdDsKKysJCUJJT19zb2NrX25vbl9mYXRhbF9lcnJvcjsKKysJCUJJT19zb2NrX3Nob3VsZF9yZXRyeTsKKysJCUJJT19zb2NrZXRfaW9jdGw7CisrCQlCSU9fd3JpdGU7CisrCQlCTl9DVFhfZnJlZTsKKysJCUJOX0NUWF9uZXc7CisrCQlCTl9NT05UX0NUWF9mcmVlOworKwkJQk5fTU9OVF9DVFhfbmV3OworKwkJQk5fTU9OVF9DVFhfc2V0OworKwkJQk5fYWRkOworKwkJQk5fYWRkX3dvcmQ7CisrCQlCTl9oZXgyYm47CisrCQlCTl9iaW4yYm47CisrCQlCTl9ibjJoZXg7CisrCQlCTl9ibjJiaW47CisrCQlCTl9jbGVhcjsKKysJCUJOX2NsZWFyX2JpdDsKKysJCUJOX2NsZWFyX2ZyZWU7CisrCQlCTl9jbXA7CisrCQlCTl9jb3B5OworKwkJQk5fZGl2OworKwkJQk5fZGl2X3dvcmQ7CisrCQlCTl9kdXA7CisrCQlCTl9mcmVlOworKwkJQk5fZnJvbV9tb250Z29tZXJ5OworKwkJQk5fZ2NkOworKwkJQk5fZ2VuZXJhdGVfcHJpbWU7CisrCQlCTl9nZXRfd29yZDsKKysJCUJOX2lzX2JpdF9zZXQ7CisrCQlCTl9pc19wcmltZTsKKysJCUJOX2xzaGlmdDsKKysJCUJOX2xzaGlmdDE7CisrCQlCTl9tYXNrX2JpdHM7CisrCQlCTl9tb2Q7CisrCQlCTl9tb2RfZXhwOworKwkJQk5fbW9kX2V4cF9tb250OworKwkJQk5fbW9kX2V4cF9zaW1wbGU7CisrCQlCTl9tb2RfaW52ZXJzZTsKKysJCUJOX21vZF9tdWw7CisrCQlCTl9tb2RfbXVsX21vbnRnb21lcnk7CisrCQlCTl9tb2Rfd29yZDsKKysJCUJOX211bDsKKysJCUJOX25ldzsKKysJCUJOX251bV9iaXRzOworKwkJQk5fbnVtX2JpdHNfd29yZDsKKysJCUJOX29wdGlvbnM7CisrCQlCTl9wcmludDsKKysJCUJOX3ByaW50X2ZwOworKwkJQk5fcmFuZDsKKysJCUJOX3JlY2lwcm9jYWw7CisrCQlCTl9yc2hpZnQ7CisrCQlCTl9yc2hpZnQxOworKwkJQk5fc2V0X2JpdDsKKysJCUJOX3NldF93b3JkOworKwkJQk5fc3FyOworKwkJQk5fc3ViOworKwkJQk5fdG9fQVNOMV9JTlRFR0VSOworKwkJQk5fdWNtcDsKKysJCUJOX3ZhbHVlX29uZTsKKysJCUJVRl9NRU1fZnJlZTsKKysJCUJVRl9NRU1fZ3JvdzsKKysJCUJVRl9NRU1fbmV3OworKwkJQlVGX3N0cmR1cDsKKysJCUNPTkZfZnJlZTsKKysJCUNPTkZfZ2V0X251bWJlcjsKKysJCUNPTkZfZ2V0X3NlY3Rpb247CisrCQlDT05GX2dldF9zdHJpbmc7CisrCQlDT05GX2xvYWQ7CisrCQlDUllQVE9fYWRkX2xvY2s7CisrCQlDUllQVE9fZGJnX2ZyZWU7CisrCQlDUllQVE9fZGJnX21hbGxvYzsKKysJCUNSWVBUT19kYmdfcmVhbGxvYzsKKysJCUNSWVBUT19kYmdfcmVtYWxsb2M7CisrCQlDUllQVE9fZnJlZTsKKysJCUNSWVBUT19nZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9sb2NrX25hbWU7CisrCQlDUllQVE9fZ2V0X2xvY2tpbmdfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X21lbV9mdW5jdGlvbnM7CisrCQlDUllQVE9fbG9jazsKKysJCUNSWVBUT19tYWxsb2M7CisrCQlDUllQVE9fbWVtX2N0cmw7CisrCQlDUllQVE9fbWVtX2xlYWtzOworKwkJQ1JZUFRPX21lbV9sZWFrc19jYjsKKysJCUNSWVBUT19tZW1fbGVha3NfZnA7CisrCQlDUllQVE9fcmVhbGxvYzsKKysJCUNSWVBUT19yZW1hbGxvYzsKKysJCUNSWVBUT19zZXRfYWRkX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2lkX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9sb2NraW5nX2NhbGxiYWNrOworKwkJQ1JZUFRPX3NldF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX3RocmVhZF9pZDsKKysJCURIX2NoZWNrOworKwkJREhfY29tcHV0ZV9rZXk7CisrCQlESF9mcmVlOworKwkJREhfZ2VuZXJhdGVfa2V5OworKwkJREhfZ2VuZXJhdGVfcGFyYW1ldGVyczsKKysJCURIX25ldzsKKysJCURIX3NpemU7CisrCQlESHBhcmFtc19wcmludDsKKysJCURIcGFyYW1zX3ByaW50X2ZwOworKwkJRFNBX2ZyZWU7CisrCQlEU0FfZ2VuZXJhdGVfa2V5OworKwkJRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnM7CisrCQlEU0FfaXNfcHJpbWU7CisrCQlEU0FfbmV3OworKwkJRFNBX3ByaW50OworKwkJRFNBX3ByaW50X2ZwOworKwkJRFNBX3NpZ247CisrCQlEU0Ffc2lnbl9zZXR1cDsKKysJCURTQV9zaXplOworKwkJRFNBX3ZlcmlmeTsKKysJCURTQXBhcmFtc19wcmludDsKKysJCURTQXBhcmFtc19wcmludF9mcDsKKysJCUVSUl9jbGVhcl9lcnJvcjsKKysJCUVSUl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfZnJlZV9zdHJpbmdzOworKwkJRVJSX2Z1bmNfZXJyb3Jfc3RyaW5nOworKwkJRVJSX2dldF9lcnJfc3RhdGVfdGFibGU7CisrCQlFUlJfZ2V0X2Vycm9yOworKwkJRVJSX2dldF9lcnJvcl9saW5lOworKwkJRVJSX2dldF9zdGF0ZTsKKysJCUVSUl9nZXRfc3RyaW5nX3RhYmxlOworKwkJRVJSX2xpYl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfbG9hZF9BU04xX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CSU9fc3RyaW5nczsKKysJCUVSUl9sb2FkX0JOX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9CVUZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0NPTkZfc3RyaW5nczsKKysJCUVSUl9sb2FkX0RIX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9EU0Ffc3RyaW5nczsKKysJCUVSUl9sb2FkX0VSUl9zdHJpbmdzOworKwkJRVJSX2xvYWRfRVZQX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9PQkpfc3RyaW5nczsKKysJCUVSUl9sb2FkX1BFTV9zdHJpbmdzOworKwkJRVJSX2xvYWRfUFJPWFlfc3RyaW5nczsKKysJCUVSUl9sb2FkX1JTQV9zdHJpbmdzOworKwkJRVJSX2xvYWRfWDUwOV9zdHJpbmdzOworKwkJRVJSX2xvYWRfY3J5cHRvX3N0cmluZ3M7CisrCQlFUlJfbG9hZF9zdHJpbmdzOworKwkJRVJSX3BlZWtfZXJyb3I7CisrCQlFUlJfcGVla19lcnJvcl9saW5lOworKwkJRVJSX3ByaW50X2Vycm9yczsKKysJCUVSUl9wcmludF9lcnJvcnNfZnA7CisrCQlFUlJfcHV0X2Vycm9yOworKwkJRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmc7CisrCQlFUlJfcmVtb3ZlX3N0YXRlOworKwkJRVZQX0J5dGVzVG9LZXk7CisrCQlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwOworKwkJRVZQX0NpcGhlckZpbmFsOworKwkJRVZQX0NpcGhlckluaXQ7CisrCQlFVlBfQ2lwaGVyVXBkYXRlOworKwkJRVZQX0RlY29kZUJsb2NrOworKwkJRVZQX0RlY29kZUZpbmFsOworKwkJRVZQX0RlY29kZUluaXQ7CisrCQlFVlBfRGVjb2RlVXBkYXRlOworKwkJRVZQX0RlY3J5cHRGaW5hbDsKKysJCUVWUF9EZWNyeXB0SW5pdDsKKysJCUVWUF9EZWNyeXB0VXBkYXRlOworKwkJRVZQX0RpZ2VzdEZpbmFsOworKwkJRVZQX0RpZ2VzdEluaXQ7CisrCQlFVlBfRGlnZXN0VXBkYXRlOworKwkJRVZQX0VuY29kZUJsb2NrOworKwkJRVZQX0VuY29kZUZpbmFsOworKwkJRVZQX0VuY29kZUluaXQ7CisrCQlFVlBfRW5jb2RlVXBkYXRlOworKwkJRVZQX0VuY3J5cHRGaW5hbDsKKysJCUVWUF9FbmNyeXB0SW5pdDsKKysJCUVWUF9FbmNyeXB0VXBkYXRlOworKwkJRVZQX09wZW5GaW5hbDsKKysJCUVWUF9PcGVuSW5pdDsKKysJCUVWUF9QS0VZX2Fzc2lnbjsKKysJCUVWUF9QS0VZX2NvcHlfcGFyYW1ldGVyczsKKysJCUVWUF9QS0VZX2ZyZWU7CisrCQlFVlBfUEtFWV9taXNzaW5nX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9uZXc7CisrCQlFVlBfUEtFWV9zYXZlX3BhcmFtZXRlcnM7CisrCQlFVlBfUEtFWV9zaXplOworKwkJRVZQX1BLRVlfdHlwZTsKKysJCUVWUF9TZWFsRmluYWw7CisrCQlFVlBfU2VhbEluaXQ7CisrCQlFVlBfU2lnbkZpbmFsOworKwkJRVZQX1ZlcmlmeUZpbmFsOworKwkJRVZQX2FkZF9hbGlhczsKKysJCUVWUF9hZGRfY2lwaGVyOworKwkJRVZQX2FkZF9kaWdlc3Q7CisrCQlFVlBfYmZfY2JjOworKwkJRVZQX2JmX2NmYjY0OworKwkJRVZQX2JmX2VjYjsKKysJCUVWUF9iZl9vZmI7CisrCQlFVlBfY2xlYW51cDsKKysJCUVWUF9kZXNfY2JjOworKwkJRVZQX2Rlc19jZmI2NDsKKysJCUVWUF9kZXNfZWNiOworKwkJRVZQX2Rlc19lZGU7CisrCQlFVlBfZGVzX2VkZTM7CisrCQlFVlBfZGVzX2VkZTNfY2JjOworKwkJRVZQX2Rlc19lZGUzX2NmYjY0OworKwkJRVZQX2Rlc19lZGUzX29mYjsKKysJCUVWUF9kZXNfZWRlX2NiYzsKKysJCUVWUF9kZXNfZWRlX2NmYjY0OworKwkJRVZQX2Rlc19lZGVfb2ZiOworKwkJRVZQX2Rlc19vZmI7CisrCQlFVlBfZGVzeF9jYmM7CisrCQlFVlBfZHNzOworKwkJRVZQX2RzczE7CisrCQlFVlBfZW5jX251bGw7CisrCQlFVlBfZ2V0X2NpcGhlcmJ5bmFtZTsKKysJCUVWUF9nZXRfZGlnZXN0YnluYW1lOworKwkJRVZQX2dldF9wd19wcm9tcHQ7CisrCQlFVlBfaWRlYV9jYmM7CisrCQlFVlBfaWRlYV9jZmI2NDsKKysJCUVWUF9pZGVhX2VjYjsKKysJCUVWUF9pZGVhX29mYjsKKysJCUVWUF9tZDI7CisrCQlFVlBfbWQ1OworKwkJRVZQX21kX251bGw7CisrCQlFVlBfcmMyX2NiYzsKKysJCUVWUF9yYzJfY2ZiNjQ7CisrCQlFVlBfcmMyX2VjYjsKKysJCUVWUF9yYzJfb2ZiOworKwkJRVZQX3JjNDsKKysJCUVWUF9yZWFkX3B3X3N0cmluZzsKKysJCUVWUF9zZXRfcHdfcHJvbXB0OworKwkJRVZQX3NoYTsKKysJCUVWUF9zaGExOworKwkJTUQyOworKwkJTUQyX0ZpbmFsOworKwkJTUQyX0luaXQ7CisrCQlNRDJfVXBkYXRlOworKwkJTUQyX29wdGlvbnM7CisrCQlNRDU7CisrCQlNRDVfRmluYWw7CisrCQlNRDVfSW5pdDsKKysJCU1ENV9VcGRhdGU7CisrCQlNREMyOworKwkJTURDMl9GaW5hbDsKKysJCU1EQzJfSW5pdDsKKysJCU1EQzJfVXBkYXRlOworKwkJTkVUU0NBUEVfU1BLQUNfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0FDX25ldzsKKysJCU5FVFNDQVBFX1NQS0lfZnJlZTsKKysJCU5FVFNDQVBFX1NQS0lfbmV3OworKwkJTkVUU0NBUEVfU1BLSV9zaWduOworKwkJTkVUU0NBUEVfU1BLSV92ZXJpZnk7CisrCQlPQkpfYWRkX29iamVjdDsKKysJCU9CSl9ic2VhcmNoOworKwkJT0JKX2NsZWFudXA7CisrCQlPQkpfY21wOworKwkJT0JKX2NyZWF0ZTsKKysJCU9CSl9kdXA7CisrCQlPQkpfbG4ybmlkOworKwkJT0JKX25ld19uaWQ7CisrCQlPQkpfbmlkMmxuOworKwkJT0JKX25pZDJvYmo7CisrCQlPQkpfbmlkMnNuOworKwkJT0JKX29iajJuaWQ7CisrCQlPQkpfc24ybmlkOworKwkJT0JKX3R4dDJuaWQ7CisrCQlQRU1fQVNOMV9yZWFkOworKwkJUEVNX0FTTjFfcmVhZF9iaW87CisrCQlQRU1fQVNOMV93cml0ZTsKKysJCVBFTV9BU04xX3dyaXRlX2JpbzsKKysJCVBFTV9TZWFsRmluYWw7CisrCQlQRU1fU2VhbEluaXQ7CisrCQlQRU1fU2VhbFVwZGF0ZTsKKysJCVBFTV9TaWduRmluYWw7CisrCQlQRU1fU2lnbkluaXQ7CisrCQlQRU1fU2lnblVwZGF0ZTsKKysJCVBFTV9YNTA5X0lORk9fcmVhZDsKKysJCVBFTV9YNTA5X0lORk9fcmVhZF9iaW87CisrCQlQRU1fWDUwOV9JTkZPX3dyaXRlX2JpbzsKKysJCVBFTV9kZWtfaW5mbzsKKysJCVBFTV9kb19oZWFkZXI7CisrCQlQRU1fZ2V0X0VWUF9DSVBIRVJfSU5GTzsKKysJCVBFTV9wcm9jX3R5cGU7CisrCQlQRU1fcmVhZDsKKysJCVBFTV9yZWFkX0RIcGFyYW1zOworKwkJUEVNX3JlYWRfRFNBUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX1BLQ1M3OworKwkJUEVNX3JlYWRfUHJpdmF0ZUtleTsKKysJCVBFTV9yZWFkX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9YNTA5OworKwkJUEVNX3JlYWRfWDUwOV9DUkw7CisrCQlQRU1fcmVhZF9YNTA5X1JFUTsKKysJCVBFTV9yZWFkX2JpbzsKKysJCVBFTV9yZWFkX2Jpb19ESHBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX0RTQXBhcmFtczsKKysJCVBFTV9yZWFkX2Jpb19QS0NTNzsKKysJCVBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3JlYWRfYmlvX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fcmVhZF9iaW9fWDUwOTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0NSTDsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X1JFUTsKKysJCVBFTV93cml0ZTsKKysJCVBFTV93cml0ZV9ESHBhcmFtczsKKysJCVBFTV93cml0ZV9EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX0RTQXBhcmFtczsKKysJCVBFTV93cml0ZV9QS0NTNzsKKysJCVBFTV93cml0ZV9Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX1JTQVByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfWDUwOTsKKysJCVBFTV93cml0ZV9YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9YNTA5X1JFUTsKKysJCVBFTV93cml0ZV9iaW87CisrCQlQRU1fd3JpdGVfYmlvX0RIcGFyYW1zOworKwkJUEVNX3dyaXRlX2Jpb19EU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19EU0FwYXJhbXM7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M3OworKwkJUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19SU0FQcml2YXRlS2V5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5OworKwkJUEVNX3dyaXRlX2Jpb19YNTA5X0NSTDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVE7CisrCQlQS0NTN19ESUdFU1RfZnJlZTsKKysJCVBLQ1M3X0RJR0VTVF9uZXc7CisrCQlQS0NTN19FTkNSWVBUX2ZyZWU7CisrCQlQS0NTN19FTkNSWVBUX25ldzsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2ZyZWU7CisrCQlQS0NTN19FTkNfQ09OVEVOVF9uZXc7CisrCQlQS0NTN19FTlZFTE9QRV9mcmVlOworKwkJUEtDUzdfRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZGlnZXN0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfZnJlZTsKKysJCVBLQ1M3X0lTU1VFUl9BTkRfU0VSSUFMX25ldzsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fZnJlZTsKKysJCVBLQ1M3X1JFQ0lQX0lORk9fbmV3OworKwkJUEtDUzdfU0lHTkVEX2ZyZWU7CisrCQlQS0NTN19TSUdORURfbmV3OworKwkJUEtDUzdfU0lHTkVSX0lORk9fZnJlZTsKKysJCVBLQ1M3X1NJR05FUl9JTkZPX25ldzsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfZnJlZTsKKysJCVBLQ1M3X1NJR05fRU5WRUxPUEVfbmV3OworKwkJUEtDUzdfZHVwOworKwkJUEtDUzdfZnJlZTsKKysJCVBLQ1M3X25ldzsKKysJCVBST1hZX0VOVFJZX2FkZF9ub3Byb3h5OworKwkJUFJPWFlfRU5UUllfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX2ZyZWU7CisrCQlQUk9YWV9FTlRSWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX0VOVFJZX25ldzsKKysJCVBST1hZX0VOVFJZX3NldF9zZXJ2ZXI7CisrCQlQUk9YWV9hZGRfbm9wcm94eTsKKysJCVBST1hZX2FkZF9zZXJ2ZXI7CisrCQlQUk9YWV9jaGVja19ieV9ob3N0OworKwkJUFJPWFlfY2hlY2tfdXJsOworKwkJUFJPWFlfY2xlYXJfbm9wcm94eTsKKysJCVBST1hZX2ZyZWU7CisrCQlQUk9YWV9nZXRfbm9wcm94eTsKKysJCVBST1hZX2dldF9wcm94aWVzOworKwkJUFJPWFlfZ2V0X3Byb3h5X2VudHJ5OworKwkJUFJPWFlfbG9hZF9jb25mOworKwkJUFJPWFlfbmV3OworKwkJUFJPWFlfcHJpbnQ7CisrCQlSQU5EX2J5dGVzOworKwkJUkFORF9jbGVhbnVwOworKwkJUkFORF9maWxlX25hbWU7CisrCQlSQU5EX2xvYWRfZmlsZTsKKysJCVJBTkRfc2NyZWVuOworKwkJUkFORF9zZWVkOworKwkJUkFORF93cml0ZV9maWxlOworKwkJUkMyX2NiY19lbmNyeXB0OworKwkJUkMyX2NmYjY0X2VuY3J5cHQ7CisrCQlSQzJfZWNiX2VuY3J5cHQ7CisrCQlSQzJfZW5jcnlwdDsKKysJCVJDMl9vZmI2NF9lbmNyeXB0OworKwkJUkMyX3NldF9rZXk7CisrCQlSQzQ7CisrCQlSQzRfb3B0aW9uczsKKysJCVJDNF9zZXRfa2V5OworKwkJUlNBUHJpdmF0ZUtleV9hc24xX21ldGg7CisrCQlSU0FQcml2YXRlS2V5X2R1cDsKKysJCVJTQVB1YmxpY0tleV9kdXA7CisrCQlSU0FfUEtDUzFfU1NMZWF5OworKwkJUlNBX2ZyZWU7CisrCQlSU0FfZ2VuZXJhdGVfa2V5OworKwkJUlNBX25ldzsKKysJCVJTQV9uZXdfbWV0aG9kOworKwkJUlNBX3ByaW50OworKwkJUlNBX3ByaW50X2ZwOworKwkJUlNBX3ByaXZhdGVfZGVjcnlwdDsKKysJCVJTQV9wcml2YXRlX2VuY3J5cHQ7CisrCQlSU0FfcHVibGljX2RlY3J5cHQ7CisrCQlSU0FfcHVibGljX2VuY3J5cHQ7CisrCQlSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUlNBX3NpZ247CisrCQlSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORzsKKysJCVJTQV9zaXplOworKwkJUlNBX3ZlcmlmeTsKKysJCVJTQV92ZXJpZnlfQVNOMV9PQ1RFVF9TVFJJTkc7CisrCQlTSEE7CisrCQlTSEExOworKwkJU0hBMV9GaW5hbDsKKysJCVNIQTFfSW5pdDsKKysJCVNIQTFfVXBkYXRlOworKwkJU0hBX0ZpbmFsOworKwkJU0hBX0luaXQ7CisrCQlTSEFfVXBkYXRlOworKwkJT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXM7CisrCQlPcGVuU1NMX2FkZF9hbGxfY2lwaGVyczsKKysJCU9wZW5TU0xfYWRkX2FsbF9kaWdlc3RzOworKwkJVFhUX0RCX2NyZWF0ZV9pbmRleDsKKysJCVRYVF9EQl9mcmVlOworKwkJVFhUX0RCX2dldF9ieV9pbmRleDsKKysJCVRYVF9EQl9pbnNlcnQ7CisrCQlUWFRfREJfcmVhZDsKKysJCVRYVF9EQl93cml0ZTsKKysJCVg1MDlfQUxHT1JfZnJlZTsKKysJCVg1MDlfQUxHT1JfbmV3OworKwkJWDUwOV9BVFRSSUJVVEVfZnJlZTsKKysJCVg1MDlfQVRUUklCVVRFX25ldzsKKysJCVg1MDlfQ0lORl9mcmVlOworKwkJWDUwOV9DSU5GX25ldzsKKysJCVg1MDlfQ1JMX0lORk9fZnJlZTsKKysJCVg1MDlfQ1JMX0lORk9fbmV3OworKwkJWDUwOV9DUkxfYWRkX2V4dDsKKysJCVg1MDlfQ1JMX2NtcDsKKysJCVg1MDlfQ1JMX2RlbGV0ZV9leHQ7CisrCQlYNTA5X0NSTF9kdXA7CisrCQlYNTA5X0NSTF9mcmVlOworKwkJWDUwOV9DUkxfZ2V0X2V4dDsKKysJCVg1MDlfQ1JMX2dldF9leHRfYnlfTklEOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9DUkxfZ2V0X2V4dF9jb3VudDsKKysJCVg1MDlfQ1JMX25ldzsKKysJCVg1MDlfQ1JMX3NpZ247CisrCQlYNTA5X0NSTF92ZXJpZnk7CisrCQlYNTA5X0VYVEVOU0lPTl9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9FWFRFTlNJT05fY3JlYXRlX2J5X09CSjsKKysJCVg1MDlfRVhURU5TSU9OX2R1cDsKKysJCVg1MDlfRVhURU5TSU9OX2ZyZWU7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9nZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX2dldF9vYmplY3Q7CisrCQlYNTA5X0VYVEVOU0lPTl9uZXc7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfY3JpdGljYWw7CisrCQlYNTA5X0VYVEVOU0lPTl9zZXRfZGF0YTsKKysJCVg1MDlfRVhURU5TSU9OX3NldF9vYmplY3Q7CisrCQlYNTA5X0lORk9fZnJlZTsKKysJCVg1MDlfSU5GT19uZXc7CisrCQlYNTA5X0xPT0tVUF9ieV9hbGlhczsKKysJCVg1MDlfTE9PS1VQX2J5X2ZpbmdlcnByaW50OworKwkJWDUwOV9MT09LVVBfYnlfaXNzdWVyX3NlcmlhbDsKKysJCVg1MDlfTE9PS1VQX2J5X3N1YmplY3Q7CisrCQlYNTA5X0xPT0tVUF9jdHJsOworKwkJWDUwOV9MT09LVVBfZmlsZTsKKysJCVg1MDlfTE9PS1VQX2ZyZWU7CisrCQlYNTA5X0xPT0tVUF9oYXNoX2RpcjsKKysJCVg1MDlfTE9PS1VQX2luaXQ7CisrCQlYNTA5X0xPT0tVUF9uZXc7CisrCQlYNTA5X0xPT0tVUF9zaHV0ZG93bjsKKysJCVg1MDlfTkFNRV9FTlRSWV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X05BTUVfRU5UUllfZHVwOworKwkJWDUwOV9OQU1FX0VOVFJZX2ZyZWU7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfZ2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9FTlRSWV9uZXc7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X2RhdGE7CisrCQlYNTA5X05BTUVfRU5UUllfc2V0X29iamVjdDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnk7CisrCQlYNTA5X05BTUVfY21wOworKwkJWDUwOV9OQU1FX2RlbGV0ZV9lbnRyeTsKKysJCVg1MDlfTkFNRV9kaWdlc3Q7CisrCQlYNTA5X05BTUVfZHVwOworKwkJWDUwOV9OQU1FX2VudHJ5X2NvdW50OworKwkJWDUwOV9OQU1FX2ZyZWU7CisrCQlYNTA5X05BTUVfZ2V0X2VudHJ5OworKwkJWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X2luZGV4X2J5X09CSjsKKysJCVg1MDlfTkFNRV9nZXRfdGV4dF9ieV9OSUQ7CisrCQlYNTA5X05BTUVfZ2V0X3RleHRfYnlfT0JKOworKwkJWDUwOV9OQU1FX2hhc2g7CisrCQlYNTA5X05BTUVfbmV3OworKwkJWDUwOV9OQU1FX29uZWxpbmU7CisrCQlYNTA5X05BTUVfcHJpbnQ7CisrCQlYNTA5X05BTUVfc2V0OworKwkJWDUwOV9PQkpFQ1RfZnJlZV9jb250ZW50czsKKysJCVg1MDlfT0JKRUNUX3JldHJpZXZlX2J5X3N1YmplY3Q7CisrCQlYNTA5X09CSkVDVF91cF9yZWZfY291bnQ7CisrCQlYNTA5X1BLRVlfZnJlZTsKKysJCVg1MDlfUEtFWV9uZXc7CisrCQlYNTA5X1BVQktFWV9mcmVlOworKwkJWDUwOV9QVUJLRVlfZ2V0OworKwkJWDUwOV9QVUJLRVlfbmV3OworKwkJWDUwOV9QVUJLRVlfc2V0OworKwkJWDUwOV9SRVFfSU5GT19mcmVlOworKwkJWDUwOV9SRVFfSU5GT19uZXc7CisrCQlYNTA5X1JFUV9kdXA7CisrCQlYNTA5X1JFUV9mcmVlOworKwkJWDUwOV9SRVFfZ2V0X3B1YmtleTsKKysJCVg1MDlfUkVRX25ldzsKKysJCVg1MDlfUkVRX3ByaW50OworKwkJWDUwOV9SRVFfcHJpbnRfZnA7CisrCQlYNTA5X1JFUV9zZXRfcHVia2V5OworKwkJWDUwOV9SRVFfc2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfUkVRX3NldF92ZXJzaW9uOworKwkJWDUwOV9SRVFfc2lnbjsKKysJCVg1MDlfUkVRX3RvX1g1MDk7CisrCQlYNTA5X1JFUV92ZXJpZnk7CisrCQlYNTA5X1JFVk9LRURfYWRkX2V4dDsKKysJCVg1MDlfUkVWT0tFRF9kZWxldGVfZXh0OworKwkJWDUwOV9SRVZPS0VEX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X05JRDsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X09CSjsKKysJCVg1MDlfUkVWT0tFRF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfYnlfY3JpdGljOworKwkJWDUwOV9SRVZPS0VEX2dldF9leHRfY291bnQ7CisrCQlYNTA5X1JFVk9LRURfbmV3OworKwkJWDUwOV9TSUdfZnJlZTsKKysJCVg1MDlfU0lHX25ldzsKKysJCVg1MDlfU1RPUkVfQ1RYX2NsZWFudXA7CisrCQlYNTA5X1NUT1JFX0NUWF9pbml0OworKwkJWDUwOV9TVE9SRV9hZGRfY2VydDsKKysJCVg1MDlfU1RPUkVfYWRkX2xvb2t1cDsKKysJCVg1MDlfU1RPUkVfZnJlZTsKKysJCVg1MDlfU1RPUkVfZ2V0X2J5X3N1YmplY3Q7CisrCQlYNTA5X1NUT1JFX2xvYWRfbG9jYXRpb25zOworKwkJWDUwOV9TVE9SRV9uZXc7CisrCQlYNTA5X1NUT1JFX3NldF9kZWZhdWx0X3BhdGhzOworKwkJWDUwOV9WQUxfZnJlZTsKKysJCVg1MDlfVkFMX25ldzsKKysJCVg1MDlfYWRkX2V4dDsKKysJCVg1MDlfYXNuMV9tZXRoOworKwkJWDUwOV9jZXJ0aWZpY2F0ZV90eXBlOworKwkJWDUwOV9jaGVja19wcml2YXRlX2tleTsKKysJCVg1MDlfY21wX2N1cnJlbnRfdGltZTsKKysJCVg1MDlfZGVsZXRlX2V4dDsKKysJCVg1MDlfZGlnZXN0OworKwkJWDUwOV9kdXA7CisrCQlYNTA5X2ZyZWU7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfYXJlYTsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXI7CisrCQlYNTA5X2dldF9kZWZhdWx0X2NlcnRfZGlyX2VudjsKKysJCVg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlOworKwkJWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGVfZW52OworKwkJWDUwOV9nZXRfZGVmYXVsdF9wcml2YXRlX2RpcjsKKysJCVg1MDlfZ2V0X2V4dDsKKysJCVg1MDlfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5X2dldF9leHRfYnlfT0JKOworKwkJWDUwOV9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJWDUwOV9nZXRfZXh0X2NvdW50OworKwkJWDUwOV9nZXRfaXNzdWVyX25hbWU7CisrCQlYNTA5X2dldF9wdWJrZXk7CisrCQlYNTA5X2dldF9wdWJrZXlfcGFyYW1ldGVyczsKKysJCVg1MDlfZ2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfZ2V0X3N1YmplY3RfbmFtZTsKKysJCVg1MDlfZ210aW1lX2FkajsKKysJCVg1MDlfaXNzdWVyX2FuZF9zZXJpYWxfY21wOworKwkJWDUwOV9pc3N1ZXJfYW5kX3NlcmlhbF9oYXNoOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9jbXA7CisrCQlYNTA5X2lzc3Vlcl9uYW1lX2hhc2g7CisrCQlYNTA5X2xvYWRfY2VydF9maWxlOworKwkJWDUwOV9uZXc7CisrCQlYNTA5X3ByaW50OworKwkJWDUwOV9wcmludF9mcDsKKysJCVg1MDlfc2V0X2lzc3Vlcl9uYW1lOworKwkJWDUwOV9zZXRfbm90QWZ0ZXI7CisrCQlYNTA5X3NldF9ub3RCZWZvcmU7CisrCQlYNTA5X3NldF9wdWJrZXk7CisrCQlYNTA5X3NldF9zZXJpYWxOdW1iZXI7CisrCQlYNTA5X3NldF9zdWJqZWN0X25hbWU7CisrCQlYNTA5X3NldF92ZXJzaW9uOworKwkJWDUwOV9zaWduOworKwkJWDUwOV9zdWJqZWN0X25hbWVfY21wOworKwkJWDUwOV9zdWJqZWN0X25hbWVfaGFzaDsKKysJCVg1MDlfdG9fWDUwOV9SRVE7CisrCQlYNTA5X3ZlcmlmeTsKKysJCVg1MDlfdmVyaWZ5X2NlcnQ7CisrCQlYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZzsKKysJCVg1MDl2M19hZGRfZXh0OworKwkJWDUwOXYzX2FkZF9leHRlbnNpb247CisrCQlYNTA5djNfYWRkX25ldHNjYXBlX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfYWRkX3N0YW5kYXJkX2V4dGVuc2lvbnM7CisrCQlYNTA5djNfY2xlYW51cF9leHRlbnNpb25zOworKwkJWDUwOXYzX2RhdGFfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfZGF0YV90eXBlX2J5X09CSjsKKysJCVg1MDl2M19kZWxldGVfZXh0OworKwkJWDUwOXYzX2dldF9leHQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9OSUQ7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9PQko7CisrCQlYNTA5djNfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCVg1MDl2M19nZXRfZXh0X2NvdW50OworKwkJWDUwOXYzX3BhY2tfc3RyaW5nOworKwkJWDUwOXYzX3BhY2tfdHlwZV9ieV9OSUQ7CisrCQlYNTA5djNfcGFja190eXBlX2J5X09CSjsKKysJCVg1MDl2M191bnBhY2tfc3RyaW5nOworKwkJX2Rlc19jcnlwdDsKKysJCWEyZF9BU04xX09CSkVDVDsKKysJCWEyaV9BU04xX0lOVEVHRVI7CisrCQlhMmlfQVNOMV9TVFJJTkc7CisrCQlhc24xX0ZpbmlzaDsKKysJCWFzbjFfR2V0U2VxdWVuY2U7CisrCQlibl9kaXZfd29yZHM7CisrCQlibl9leHBhbmQyOworKwkJYm5fbXVsX2FkZF93b3JkczsKKysJCWJuX211bF93b3JkczsKKysJCUJOX3VhZGQ7CisrCQlCTl91c3ViOworKwkJYm5fc3FyX3dvcmRzOworKwkJX29zc2xfb2xkX2NyeXB0OworKwkJZDJpX0FTTjFfQklUX1NUUklORzsKKysJCWQyaV9BU04xX0JPT0xFQU47CisrCQlkMmlfQVNOMV9IRUFERVI7CisrCQlkMmlfQVNOMV9JQTVTVFJJTkc7CisrCQlkMmlfQVNOMV9JTlRFR0VSOworKwkJZDJpX0FTTjFfT0JKRUNUOworKwkJZDJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFOworKwkJZDJpX0FTTjFfUFJJTlRBQkxFU1RSSU5HOworKwkJZDJpX0FTTjFfU0VUOworKwkJZDJpX0FTTjFfVDYxU1RSSU5HOworKwkJZDJpX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1VUQ1RJTUU7CisrCQlkMmlfQVNOMV9ieXRlczsKKysJCWQyaV9BU04xX3R5cGVfYnl0ZXM7CisrCQlkMmlfREhwYXJhbXM7CisrCQlkMmlfRFNBUHJpdmF0ZUtleTsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9EU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX0RTQVB1YmxpY0tleTsKKysJCWQyaV9EU0FwYXJhbXM7CisrCQlkMmlfTkVUU0NBUEVfU1BLQUM7CisrCQlkMmlfTkVUU0NBUEVfU1BLSTsKKysJCWQyaV9OZXRzY2FwZV9SU0E7CisrCQlkMmlfUEtDUzc7CisrCQlkMmlfUEtDUzdfRElHRVNUOworKwkJZDJpX1BLQ1M3X0VOQ1JZUFQ7CisrCQlkMmlfUEtDUzdfRU5DX0NPTlRFTlQ7CisrCQlkMmlfUEtDUzdfRU5WRUxPUEU7CisrCQlkMmlfUEtDUzdfSVNTVUVSX0FORF9TRVJJQUw7CisrCQlkMmlfUEtDUzdfUkVDSVBfSU5GTzsKKysJCWQyaV9QS0NTN19TSUdORUQ7CisrCQlkMmlfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfUEtDUzdfU0lHTl9FTlZFTE9QRTsKKysJCWQyaV9QS0NTN19iaW87CisrCQlkMmlfUEtDUzdfZnA7CisrCQlkMmlfUHJpdmF0ZUtleTsKKysJCWQyaV9QdWJsaWNLZXk7CisrCQlkMmlfUlNBUHJpdmF0ZUtleTsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2JpbzsKKysJCWQyaV9SU0FQcml2YXRlS2V5X2ZwOworKwkJZDJpX1JTQVB1YmxpY0tleTsKKysJCWQyaV9YNTA5OworKwkJZDJpX1g1MDlfQUxHT1I7CisrCQlkMmlfWDUwOV9BVFRSSUJVVEU7CisrCQlkMmlfWDUwOV9DSU5GOworKwkJZDJpX1g1MDlfQ1JMOworKwkJZDJpX1g1MDlfQ1JMX0lORk87CisrCQlkMmlfWDUwOV9DUkxfYmlvOworKwkJZDJpX1g1MDlfQ1JMX2ZwOworKwkJZDJpX1g1MDlfRVhURU5TSU9OOworKwkJZDJpX1g1MDlfTkFNRTsKKysJCWQyaV9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfWDUwOV9QS0VZOworKwkJZDJpX1g1MDlfUFVCS0VZOworKwkJZDJpX1g1MDlfUkVROworKwkJZDJpX1g1MDlfUkVRX0lORk87CisrCQlkMmlfWDUwOV9SRVFfYmlvOworKwkJZDJpX1g1MDlfUkVRX2ZwOworKwkJZDJpX1g1MDlfUkVWT0tFRDsKKysJCWQyaV9YNTA5X1NJRzsKKysJCWQyaV9YNTA5X1ZBTDsKKysJCWQyaV9YNTA5X2JpbzsKKysJCWQyaV9YNTA5X2ZwOworKwkJREVTX2NiY19ja3N1bTsKKysJCURFU19jYmNfZW5jcnlwdDsKKysJCURFU19jYmxvY2tfcHJpbnRfZmlsZTsKKysJCURFU19jZmI2NF9lbmNyeXB0OworKwkJREVTX2NmYl9lbmNyeXB0OworKwkJREVTX2RlY3J5cHQzOworKwkJREVTX2VjYjNfZW5jcnlwdDsKKysJCURFU19lY2JfZW5jcnlwdDsKKysJCURFU19lZGUzX2NiY19lbmNyeXB0OworKwkJREVTX2VkZTNfY2ZiNjRfZW5jcnlwdDsKKysJCURFU19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfZW5jX3JlYWQ7CisrCQlERVNfZW5jX3dyaXRlOworKwkJREVTX2VuY3J5cHQxOworKwkJREVTX2VuY3J5cHQyOworKwkJREVTX2VuY3J5cHQzOworKwkJREVTX2ZjcnlwdDsKKysJCURFU19pc193ZWFrX2tleTsKKysJCURFU19rZXlfc2NoZWQ7CisrCQlERVNfbmNiY19lbmNyeXB0OworKwkJREVTX29mYjY0X2VuY3J5cHQ7CisrCQlERVNfb2ZiX2VuY3J5cHQ7CisrCQlERVNfb3B0aW9uczsKKysJCURFU19wY2JjX2VuY3J5cHQ7CisrCQlERVNfcXVhZF9ja3N1bTsKKysJCURFU19yYW5kb21fa2V5OworKwkJX29zc2xfb2xkX2Rlc19yYW5kb21fc2VlZDsKKysJCV9vc3NsX29sZF9kZXNfcmVhZF8ycGFzc3dvcmRzOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3Bhc3N3b3JkOworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3OworKwkJX29zc2xfb2xkX2Rlc19yZWFkX3B3X3N0cmluZzsKKysJCURFU19zZXRfa2V5OworKwkJREVTX3NldF9vZGRfcGFyaXR5OworKwkJREVTX3N0cmluZ190b18ya2V5czsKKysJCURFU19zdHJpbmdfdG9fa2V5OworKwkJREVTX3hjYmNfZW5jcnlwdDsKKysJCURFU194d2hpdGVfaW4yb3V0OworKwkJZmNyeXB0X2JvZHk7CisrCQlpMmFfQVNOMV9JTlRFR0VSOworKwkJaTJhX0FTTjFfT0JKRUNUOworKwkJaTJhX0FTTjFfU1RSSU5HOworKwkJaTJkX0FTTjFfQklUX1NUUklORzsKKysJCWkyZF9BU04xX0JPT0xFQU47CisrCQlpMmRfQVNOMV9IRUFERVI7CisrCQlpMmRfQVNOMV9JQTVTVFJJTkc7CisrCQlpMmRfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfT0JKRUNUOworKwkJaTJkX0FTTjFfT0NURVRfU1RSSU5HOworKwkJaTJkX0FTTjFfUFJJTlRBQkxFOworKwkJaTJkX0FTTjFfU0VUOworKwkJaTJkX0FTTjFfVFlQRTsKKysJCWkyZF9BU04xX1VUQ1RJTUU7CisrCQlpMmRfQVNOMV9ieXRlczsKKysJCWkyZF9ESHBhcmFtczsKKysJCWkyZF9EU0FQcml2YXRlS2V5OworKwkJaTJkX0RTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX0RTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfRFNBUHVibGljS2V5OworKwkJaTJkX0RTQXBhcmFtczsKKysJCWkyZF9ORVRTQ0FQRV9TUEtBQzsKKysJCWkyZF9ORVRTQ0FQRV9TUEtJOworKwkJaTJkX05ldHNjYXBlX1JTQTsKKysJCWkyZF9QS0NTNzsKKysJCWkyZF9QS0NTN19ESUdFU1Q7CisrCQlpMmRfUEtDUzdfRU5DUllQVDsKKysJCWkyZF9QS0NTN19FTkNfQ09OVEVOVDsKKysJCWkyZF9QS0NTN19FTlZFTE9QRTsKKysJCWkyZF9QS0NTN19JU1NVRVJfQU5EX1NFUklBTDsKKysJCWkyZF9QS0NTN19SRUNJUF9JTkZPOworKwkJaTJkX1BLQ1M3X1NJR05FRDsKKysJCWkyZF9QS0NTN19TSUdORVJfSU5GTzsKKysJCWkyZF9QS0NTN19TSUdOX0VOVkVMT1BFOworKwkJaTJkX1BLQ1M3X2JpbzsKKysJCWkyZF9QS0NTN19mcDsKKysJCWkyZF9Qcml2YXRlS2V5OworKwkJaTJkX1B1YmxpY0tleTsKKysJCWkyZF9SU0FQcml2YXRlS2V5OworKwkJaTJkX1JTQVByaXZhdGVLZXlfYmlvOworKwkJaTJkX1JTQVByaXZhdGVLZXlfZnA7CisrCQlpMmRfUlNBUHVibGljS2V5OworKwkJaTJkX1g1MDk7CisrCQlpMmRfWDUwOV9BTEdPUjsKKysJCWkyZF9YNTA5X0FUVFJJQlVURTsKKysJCWkyZF9YNTA5X0NJTkY7CisrCQlpMmRfWDUwOV9DUkw7CisrCQlpMmRfWDUwOV9DUkxfSU5GTzsKKysJCWkyZF9YNTA5X0NSTF9iaW87CisrCQlpMmRfWDUwOV9DUkxfZnA7CisrCQlpMmRfWDUwOV9FWFRFTlNJT047CisrCQlpMmRfWDUwOV9OQU1FOworKwkJaTJkX1g1MDlfTkFNRV9FTlRSWTsKKysJCWkyZF9YNTA5X1BLRVk7CisrCQlpMmRfWDUwOV9QVUJLRVk7CisrCQlpMmRfWDUwOV9SRVE7CisrCQlpMmRfWDUwOV9SRVFfSU5GTzsKKysJCWkyZF9YNTA5X1JFUV9iaW87CisrCQlpMmRfWDUwOV9SRVFfZnA7CisrCQlpMmRfWDUwOV9SRVZPS0VEOworKwkJaTJkX1g1MDlfU0lHOworKwkJaTJkX1g1MDlfVkFMOworKwkJaTJkX1g1MDlfYmlvOworKwkJaTJkX1g1MDlfZnA7CisrCQlpZGVhX2NiY19lbmNyeXB0OworKwkJaWRlYV9jZmI2NF9lbmNyeXB0OworKwkJaWRlYV9lY2JfZW5jcnlwdDsKKysJCWlkZWFfZW5jcnlwdDsKKysJCWlkZWFfb2ZiNjRfZW5jcnlwdDsKKysJCWlkZWFfb3B0aW9uczsKKysJCWlkZWFfc2V0X2RlY3J5cHRfa2V5OworKwkJaWRlYV9zZXRfZW5jcnlwdF9rZXk7CisrCQlsaF9kZWxldGU7CisrCQlsaF9kb2FsbDsKKysJCWxoX2RvYWxsX2FyZzsKKysJCWxoX2ZyZWU7CisrCQlsaF9pbnNlcnQ7CisrCQlsaF9uZXc7CisrCQlsaF9ub2RlX3N0YXRzOworKwkJbGhfbm9kZV9zdGF0c19iaW87CisrCQlsaF9ub2RlX3VzYWdlX3N0YXRzOworKwkJbGhfbm9kZV91c2FnZV9zdGF0c19iaW87CisrCQlsaF9yZXRyaWV2ZTsKKysJCWxoX3N0YXRzOworKwkJbGhfc3RhdHNfYmlvOworKwkJbGhfc3RyaGFzaDsKKysJCXNrX2RlbGV0ZTsKKysJCXNrX2RlbGV0ZV9wdHI7CisrCQlza19kdXA7CisrCQlza19maW5kOworKwkJc2tfZnJlZTsKKysJCXNrX2luc2VydDsKKysJCXNrX25ldzsKKysJCXNrX3BvcDsKKysJCXNrX3BvcF9mcmVlOworKwkJc2tfcHVzaDsKKysJCXNrX3NldF9jbXBfZnVuYzsKKysJCXNrX3NoaWZ0OworKwkJc2tfdW5zaGlmdDsKKysJCXNrX3plcm87CisrCQlCSU9fZl9uYmlvX3Rlc3Q7CisrCQlBU04xX1RZUEVfZ2V0OworKwkJQVNOMV9UWVBFX3NldDsKKysJCVBLQ1M3X2NvbnRlbnRfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1M3X3N0cmluZ3M7CisrCQlYNTA5X2ZpbmRfYnlfaXNzdWVyX2FuZF9zZXJpYWw7CisrCQlYNTA5X2ZpbmRfYnlfc3ViamVjdDsKKysJCVBLQ1M3X2N0cmw7CisrCQlQS0NTN19zZXRfdHlwZTsKKysJCVBLQ1M3X3NldF9jb250ZW50OworKwkJUEtDUzdfU0lHTkVSX0lORk9fc2V0OworKwkJUEtDUzdfYWRkX3NpZ25lcjsKKysJCVBLQ1M3X2FkZF9jZXJ0aWZpY2F0ZTsKKysJCVBLQ1M3X2FkZF9jcmw7CisrCQlQS0NTN19jb250ZW50X25ldzsKKysJCVBLQ1M3X2RhdGFTaWduOworKwkJUEtDUzdfZGF0YVZlcmlmeTsKKysJCVBLQ1M3X2RhdGFJbml0OworKwkJUEtDUzdfYWRkX3NpZ25hdHVyZTsKKysJCVBLQ1M3X2NlcnRfZnJvbV9zaWduZXJfaW5mbzsKKysJCVBLQ1M3X2dldF9zaWduZXJfaW5mbzsKKysJCUVWUF9kZWxldGVfYWxpYXM7CisrCQlFVlBfbWRjMjsKKysJCVBFTV9yZWFkX2Jpb19SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfYmlvX1JTQVB1YmxpY0tleTsKKysJCWQyaV9SU0FQdWJsaWNLZXlfYmlvOworKwkJaTJkX1JTQVB1YmxpY0tleV9iaW87CisrCQlQRU1fcmVhZF9SU0FQdWJsaWNLZXk7CisrCQlQRU1fd3JpdGVfUlNBUHVibGljS2V5OworKwkJZDJpX1JTQVB1YmxpY0tleV9mcDsKKysJCWkyZF9SU0FQdWJsaWNLZXlfZnA7CisrCQlCSU9fY29weV9uZXh0X3JldHJ5OworKwkJUlNBX2ZsYWdzOworKwkJWDUwOV9TVE9SRV9hZGRfY3JsOworKwkJWDUwOV9sb2FkX2NybF9maWxlOworKwkJRVZQX3JjMl80MF9jYmM7CisrCQlFVlBfcmM0XzQwOworKwkJRVZQX0NJUEhFUl9DVFhfaW5pdDsKKysJCUhNQUM7CisrCQlITUFDX0luaXQ7CisrCQlITUFDX1VwZGF0ZTsKKysJCUhNQUNfRmluYWw7CisrCQlFUlJfZ2V0X25leHRfZXJyb3JfbGlicmFyeTsKKysJCUVWUF9QS0VZX2NtcF9wYXJhbWV0ZXJzOworKwkJSE1BQ19jbGVhbnVwOworKwkJQklPX3B0cl9jdHJsOworKwkJQklPX25ld19maWxlX2ludGVybmFsOworKwkJQklPX25ld19mcF9pbnRlcm5hbDsKKysJCUJJT19zX2ZpbGVfaW50ZXJuYWw7CisrCQlCTl9CTElORElOR19jb252ZXJ0OworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0OworKwkJQk5fQkxJTkRJTkdfdXBkYXRlOworKwkJUlNBX2JsaW5kaW5nX29uOworKwkJUlNBX2JsaW5kaW5nX29mZjsKKysJCWkydF9BU04xX09CSkVDVDsKKysJCUJOX0JMSU5ESU5HX25ldzsKKysJCUJOX0JMSU5ESU5HX2ZyZWU7CisrCQlFVlBfY2FzdDVfY2JjOworKwkJRVZQX2Nhc3Q1X2NmYjY0OworKwkJRVZQX2Nhc3Q1X2VjYjsKKysJCUVWUF9jYXN0NV9vZmI7CisrCQlCRl9kZWNyeXB0OworKwkJQ0FTVF9zZXRfa2V5OworKwkJQ0FTVF9lbmNyeXB0OworKwkJQ0FTVF9kZWNyeXB0OworKwkJQ0FTVF9lY2JfZW5jcnlwdDsKKysJCUNBU1RfY2JjX2VuY3J5cHQ7CisrCQlDQVNUX2NmYjY0X2VuY3J5cHQ7CisrCQlDQVNUX29mYjY0X2VuY3J5cHQ7CisrCQlSQzJfZGVjcnlwdDsKKysJCU9CSl9jcmVhdGVfb2JqZWN0czsKKysJCUJOX2V4cDsKKysJCUJOX211bF93b3JkOworKwkJQk5fc3ViX3dvcmQ7CisrCQlCTl9kZWMyYm47CisrCQlCTl9ibjJkZWM7CisrCQlCSU9fZ2hibl9jdHJsOworKwkJQ1JZUFRPX2ZyZWVfZXhfZGF0YTsKKysJCUNSWVBUT19nZXRfZXhfZGF0YTsKKysJCUNSWVBUT19zZXRfZXhfZGF0YTsKKysJCUVSUl9sb2FkX0NSWVBUT19zdHJpbmdzOworKwkJRVJSX2xvYWRfQ1JZUFRPbGliX3N0cmluZ3M7CisrCQlFVlBfUEtFWV9iaXRzOworKwkJTUQ1X1RyYW5zZm9ybTsKKysJCVNIQTFfVHJhbnNmb3JtOworKwkJU0hBX1RyYW5zZm9ybTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jaGFpbjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQ7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3I7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3JfZGVwdGg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9jZXJ0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2NoYWluOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2Vycm9yOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2V4X2RhdGE7CisrCQlDUllQVE9fZHVwX2V4X2RhdGE7CisrCQlDUllQVE9fZ2V0X25ld19sb2NraWQ7CisrCQlDUllQVE9fbmV3X2V4X2RhdGE7CisrCQlSU0Ffc2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X2RhdGE7CisrCQlSU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV90eXBlXzE7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfYWRkX1NTTHYyMzsKKysJCVJTQV9wYWRkaW5nX2FkZF9ub25lOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8xOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfUEtDUzFfdHlwZV8yOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfU1NMdjIzOworKwkJUlNBX3BhZGRpbmdfY2hlY2tfbm9uZTsKKysJCWJuX2FkZF93b3JkczsKKysJCWQyaV9OZXRzY2FwZV9SU0FfMjsKKysJCUNSWVBUT19nZXRfZXhfbmV3X2luZGV4OworKwkJUklQRU1EMTYwX0luaXQ7CisrCQlSSVBFTUQxNjBfVXBkYXRlOworKwkJUklQRU1EMTYwX0ZpbmFsOworKwkJUklQRU1EMTYwOworKwkJUklQRU1EMTYwX1RyYW5zZm9ybTsKKysJCVJDNV8zMl9zZXRfa2V5OworKwkJUkM1XzMyX2VjYl9lbmNyeXB0OworKwkJUkM1XzMyX2VuY3J5cHQ7CisrCQlSQzVfMzJfZGVjcnlwdDsKKysJCVJDNV8zMl9jYmNfZW5jcnlwdDsKKysJCVJDNV8zMl9jZmI2NF9lbmNyeXB0OworKwkJUkM1XzMyX29mYjY0X2VuY3J5cHQ7CisrCQlCTl9ibjJtcGk7CisrCQlCTl9tcGkyYm47CisrCQlBU04xX0JJVF9TVFJJTkdfZ2V0X2JpdDsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYml0OworKwkJQklPX2dldF9leF9kYXRhOworKwkJQklPX2dldF9leF9uZXdfaW5kZXg7CisrCQlCSU9fc2V0X2V4X2RhdGE7CisrCQlYNTA5djNfZ2V0X2tleV91c2FnZTsKKysJCVg1MDl2M19zZXRfa2V5X3VzYWdlOworKwkJYTJpX1g1MDl2M19rZXlfdXNhZ2U7CisrCQlpMmFfWDUwOXYzX2tleV91c2FnZTsKKysJCUVWUF9QS0VZX2RlY3J5cHQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0OworKwkJUEtDUzdfUkVDSVBfSU5GT19zZXQ7CisrCQlQS0NTN19hZGRfcmVjaXBpZW50OworKwkJUEtDUzdfYWRkX3JlY2lwaWVudF9pbmZvOworKwkJUEtDUzdfc2V0X2NpcGhlcjsKKysJCUFTTjFfVFlQRV9nZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX2dldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVFlQRV9zZXRfaW50X29jdGV0c3RyaW5nOworKwkJQVNOMV9UWVBFX3NldF9vY3RldHN0cmluZzsKKysJCUFTTjFfVVRDVElNRV9zZXRfc3RyaW5nOworKwkJRVJSX2FkZF9lcnJvcl9kYXRhOworKwkJRVJSX3NldF9lcnJvcl9kYXRhOworKwkJRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtOworKwkJRVZQX0NJUEhFUl9wYXJhbV90b19hc24xOworKwkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdjsKKysJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXY7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2NiYzsKKysJCUVWUF9yYzVfMzJfMTJfMTZfY2ZiNjQ7CisrCQlFVlBfcmM1XzMyXzEyXzE2X2VjYjsKKysJCUVWUF9yYzVfMzJfMTJfMTZfb2ZiOworKwkJYXNuMV9hZGRfZXJyb3I7CisrCQlkMmlfQVNOMV9CTVBTVFJJTkc7CisrCQlpMmRfQVNOMV9CTVBTVFJJTkc7CisrCQlCSU9fZl9iZXI7CisrCQlCTl9pbml0OworKwkJQ09NUF9DVFhfbmV3OworKwkJQ09NUF9DVFhfZnJlZTsKKysJCUNPTVBfQ1RYX2NvbXByZXNzX2Jsb2NrOworKwkJQ09NUF9DVFhfZXhwYW5kX2Jsb2NrOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X25ld19pbmRleDsKKysJCU9CSl9OQU1FX2FkZDsKKysJCUJJT19zb2NrZXRfbmJpbzsKKysJCUVWUF9yYzJfNjRfY2JjOworKwkJT0JKX05BTUVfY2xlYW51cDsKKysJCU9CSl9OQU1FX2dldDsKKysJCU9CSl9OQU1FX2luaXQ7CisrCQlPQkpfTkFNRV9uZXdfaW5kZXg7CisrCQlPQkpfTkFNRV9yZW1vdmU7CisrCQlCTl9NT05UX0NUWF9jb3B5OworKwkJQklPX25ld19zb2NrczRhX2Nvbm5lY3Q7CisrCQlCSU9fc19zb2NrczRhX2Nvbm5lY3Q7CisrCQlQUk9YWV9zZXRfY29ubmVjdF9tb2RlOworKwkJUkFORF9TU0xlYXk7CisrCQlSQU5EX3NldF9yYW5kX21ldGhvZDsKKysJCVJTQV9tZW1vcnlfbG9jazsKKysJCWJuX3N1Yl93b3JkczsKKysJCWJuX211bF9ub3JtYWw7CisrCQlibl9tdWxfY29tYmE4OworKwkJYm5fbXVsX2NvbWJhNDsKKysJCWJuX3Nxcl9ub3JtYWw7CisrCQlibl9zcXJfY29tYmE4OworKwkJYm5fc3FyX2NvbWJhNDsKKysJCWJuX2NtcF93b3JkczsKKysJCWJuX211bF9yZWN1cnNpdmU7CisrCQlibl9tdWxfcGFydF9yZWN1cnNpdmU7CisrCQlibl9zcXJfcmVjdXJzaXZlOworKwkJYm5fbXVsX2xvd19ub3JtYWw7CisrCQlCTl9SRUNQX0NUWF9pbml0OworKwkJQk5fUkVDUF9DVFhfbmV3OworKwkJQk5fUkVDUF9DVFhfZnJlZTsKKysJCUJOX1JFQ1BfQ1RYX3NldDsKKysJCUJOX21vZF9tdWxfcmVjaXByb2NhbDsKKysJCUJOX21vZF9leHBfcmVjcDsKKysJCUJOX2Rpdl9yZWNwOworKwkJQk5fQ1RYX2luaXQ7CisrCQlCTl9NT05UX0NUWF9pbml0OworKwkJUkFORF9nZXRfcmFuZF9tZXRob2Q7CisrCQlQS0NTN19hZGRfYXR0cmlidXRlOworKwkJUEtDUzdfYWRkX3NpZ25lZF9hdHRyaWJ1dGU7CisrCQlQS0NTN19kaWdlc3RfZnJvbV9hdHRyaWJ1dGVzOworKwkJUEtDUzdfZ2V0X2F0dHJpYnV0ZTsKKysJCVBLQ1M3X2dldF9pc3N1ZXJfYW5kX3NlcmlhbDsKKysJCVBLQ1M3X2dldF9zaWduZWRfYXR0cmlidXRlOworKwkJQ09NUF9jb21wcmVzc19ibG9jazsKKysJCUNPTVBfZXhwYW5kX2Jsb2NrOworKwkJQ09NUF9ybGU7CisrCQlDT01QX3psaWI7CisrCQltc190aW1lX2RpZmY7CisrCQltc190aW1lX25ldzsKKysJCW1zX3RpbWVfZnJlZTsKKysJCW1zX3RpbWVfY21wOworKwkJbXNfdGltZV9nZXQ7CisrCQlQS0NTN19zZXRfYXR0cmlidXRlczsKKysJCVBLQ1M3X3NldF9zaWduZWRfYXR0cmlidXRlczsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZTsKKysJCVg1MDlfQVRUUklCVVRFX2R1cDsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2NoZWNrOworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfcHJpbnQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXQ7CisrCQlBU04xX0dFTkVSQUxJWkVEVElNRV9zZXRfc3RyaW5nOworKwkJQVNOMV9USU1FX3ByaW50OworKwkJQkFTSUNfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX25ldzsKKysJCUVSUl9sb2FkX1g1MDlWM19zdHJpbmdzOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9mcmVlOworKwkJTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRV9uZXc7CisrCQlPQkpfdHh0Mm9iajsKKysJCVBFTV9yZWFkX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fcmVhZF9OU19DRVJUX1NFUTsKKysJCVBFTV9yZWFkX2Jpb19ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJUEVNX3JlYWRfYmlvX05TX0NFUlRfU0VROworKwkJUEVNX3dyaXRlX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfTlNfQ0VSVF9TRVE7CisrCQlQRU1fd3JpdGVfYmlvX05FVFNDQVBFX0NFUlRfU0VRVUVOQ0U7CisrCQlQRU1fd3JpdGVfYmlvX05TX0NFUlRfU0VROworKwkJWDUwOVYzX0VYVF9hZGQ7CisrCQlYNTA5VjNfRVhUX2FkZF9hbGlhczsKKysJCVg1MDlWM19FWFRfYWRkX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NsZWFudXA7CisrCQlYNTA5VjNfRVhUX2NvbmY7CisrCQlYNTA5VjNfRVhUX2NvbmZfbmlkOworKwkJWDUwOVYzX0VYVF9nZXQ7CisrCQlYNTA5VjNfRVhUX2dldF9uaWQ7CisrCQlYNTA5VjNfRVhUX3ByaW50OworKwkJWDUwOVYzX0VYVF9wcmludF9mcDsKKysJCVg1MDlWM19hZGRfc3RhbmRhcmRfZXh0ZW5zaW9uczsKKysJCVg1MDlWM19hZGRfdmFsdWU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX2ludDsKKysJCVg1MDlWM19jb25mX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2Jvb2w7CisrCQlYNTA5VjNfZ2V0X3ZhbHVlX2ludDsKKysJCVg1MDlWM19wYXJzZV9saXN0OworKwkJZDJpX0FTTjFfR0VORVJBTElaRURUSU1FOworKwkJZDJpX0FTTjFfVElNRTsKKysJCWQyaV9CQVNJQ19DT05TVFJBSU5UUzsKKysJCWQyaV9ORVRTQ0FQRV9DRVJUX1NFUVVFTkNFOworKwkJZDJpX2V4dF9rdTsKKysJCWV4dF9rdV9mcmVlOworKwkJZXh0X2t1X25ldzsKKysJCWkyZF9BU04xX0dFTkVSQUxJWkVEVElNRTsKKysJCWkyZF9BU04xX1RJTUU7CisrCQlpMmRfQkFTSUNfQ09OU1RSQUlOVFM7CisrCQlpMmRfTkVUU0NBUEVfQ0VSVF9TRVFVRU5DRTsKKysJCWkyZF9leHRfa3U7CisrCQlFVlBfTURfQ1RYX2NvcHk7CisrCQlpMmRfQVNOMV9FTlVNRVJBVEVEOworKwkJZDJpX0FTTjFfRU5VTUVSQVRFRDsKKysJCUFTTjFfRU5VTUVSQVRFRF9zZXQ7CisrCQlBU04xX0VOVU1FUkFURURfZ2V0OworKwkJQk5fdG9fQVNOMV9FTlVNRVJBVEVEOworKwkJQVNOMV9FTlVNRVJBVEVEX3RvX0JOOworKwkJaTJhX0FTTjFfRU5VTUVSQVRFRDsKKysJCWEyaV9BU04xX0VOVU1FUkFURUQ7CisrCQlpMmRfR0VORVJBTF9OQU1FOworKwkJZDJpX0dFTkVSQUxfTkFNRTsKKysJCUdFTkVSQUxfTkFNRV9uZXc7CisrCQlHRU5FUkFMX05BTUVfZnJlZTsKKysJCUdFTkVSQUxfTkFNRVNfbmV3OworKwkJR0VORVJBTF9OQU1FU19mcmVlOworKwkJZDJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMmRfR0VORVJBTF9OQU1FUzsKKysJCWkydl9HRU5FUkFMX05BTUVTOworKwkJaTJzX0FTTjFfT0NURVRfU1RSSU5HOworKwkJczJpX0FTTjFfT0NURVRfU1RSSU5HOworKwkJWDUwOVYzX0VYVF9jaGVja19jb25mOworKwkJaGV4X3RvX3N0cmluZzsKKysJCXN0cmluZ190b19oZXg7CisrCQlERVNfZWRlM19jYmNtX2VuY3J5cHQ7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfT0FFUDsKKysJCVJTQV9wYWRkaW5nX2NoZWNrX1BLQ1MxX09BRVA7CisrCQlYNTA5X0NSTF9wcmludF9mcDsKKysJCVg1MDlfQ1JMX3ByaW50OworKwkJaTJ2X0dFTkVSQUxfTkFNRTsKKysJCXYyaV9HRU5FUkFMX05BTUU7CisrCQlpMmRfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlkMmlfUEtFWV9VU0FHRV9QRVJJT0Q7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9uZXc7CisrCQlQS0VZX1VTQUdFX1BFUklPRF9mcmVlOworKwkJdjJpX0dFTkVSQUxfTkFNRVM7CisrCQlpMnNfQVNOMV9JTlRFR0VSOworKwkJWDUwOVYzX0VYVF9kMmk7CisrCQluYW1lX2NtcDsKKysJCXN0cl9kdXA7CisrCQlpMnNfQVNOMV9FTlVNRVJBVEVEOworKwkJaTJzX0FTTjFfRU5VTUVSQVRFRF9UQUJMRTsKKysJCUJJT19zX2xvZzsKKysJCUJJT19mX3JlbGlhYmxlOworKwkJUEtDUzdfZGF0YUZpbmFsOworKwkJUEtDUzdfZGF0YURlY29kZTsKKysJCVg1MDlWM19FWFRfQ1JMX2FkZF9jb25mOworKwkJQk5fc2V0X3BhcmFtczsKKysJCUJOX2dldF9wYXJhbXM7CisrCQlCSU9fZ2V0X2V4X251bTsKKysJCUJJT19zZXRfZXhfZnJlZV9mdW5jOworKwkJRVZQX3JpcGVtZDE2MDsKKysJCUFTTjFfVElNRV9zZXQ7CisrCQlpMmRfQVVUSE9SSVRZX0tFWUlEOworKwkJZDJpX0FVVEhPUklUWV9LRVlJRDsKKysJCUFVVEhPUklUWV9LRVlJRF9uZXc7CisrCQlBVVRIT1JJVFlfS0VZSURfZnJlZTsKKysJCUFTTjFfc2VxX3VucGFjazsKKysJCUFTTjFfc2VxX3BhY2s7CisrCQlBU04xX3VucGFja19zdHJpbmc7CisrCQlBU04xX3BhY2tfc3RyaW5nOworKwkJUEtDUzEyX3BhY2tfc2FmZWJhZzsKKysJCVBLQ1MxMl9NQUtFX0tFWUJBRzsKKysJCVBLQ1M4X2VuY3J5cHQ7CisrCQlQS0NTMTJfTUFLRV9TSEtFWUJBRzsKKysJCVBLQ1MxMl9wYWNrX3A3ZGF0YTsKKysJCVBLQ1MxMl9wYWNrX3A3ZW5jZGF0YTsKKysJCVBLQ1MxMl9hZGRfbG9jYWxrZXlpZDsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX2FzYzsKKysJCVBLQ1MxMl9hZGRfZnJpZW5kbHluYW1lX3VuaTsKKysJCVBLQ1MxMl9nZXRfZnJpZW5kbHluYW1lOworKwkJUEtDUzEyX3BiZV9jcnlwdDsKKysJCVBLQ1MxMl9kZWNyeXB0X2QyaTsKKysJCVBLQ1MxMl9pMmRfZW5jcnlwdDsKKysJCVBLQ1MxMl9pbml0OworKwkJUEtDUzEyX2tleV9nZW5fYXNjOworKwkJUEtDUzEyX2tleV9nZW5fdW5pOworKwkJUEtDUzEyX2dlbl9tYWM7CisrCQlQS0NTMTJfdmVyaWZ5X21hYzsKKysJCVBLQ1MxMl9zZXRfbWFjOworKwkJUEtDUzEyX3NldHVwX21hYzsKKysJCU9QRU5TU0xfYXNjMnVuaTsKKysJCU9QRU5TU0xfdW5pMmFzYzsKKysJCWkyZF9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX25ldzsKKysJCWQyaV9QS0NTMTJfQkFHUzsKKysJCVBLQ1MxMl9CQUdTX2ZyZWU7CisrCQlpMmRfUEtDUzEyOworKwkJZDJpX1BLQ1MxMjsKKysJCVBLQ1MxMl9uZXc7CisrCQlQS0NTMTJfZnJlZTsKKysJCWkyZF9QS0NTMTJfTUFDX0RBVEE7CisrCQlQS0NTMTJfTUFDX0RBVEFfbmV3OworKwkJZDJpX1BLQ1MxMl9NQUNfREFUQTsKKysJCVBLQ1MxMl9NQUNfREFUQV9mcmVlOworKwkJaTJkX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfbmV3OworKwkJZDJpX1BLQ1MxMl9TQUZFQkFHOworKwkJUEtDUzEyX1NBRkVCQUdfZnJlZTsKKysJCUVSUl9sb2FkX1BLQ1MxMl9zdHJpbmdzOworKwkJUEtDUzEyX1BCRV9hZGQ7CisrCQlQS0NTOF9hZGRfa2V5dXNhZ2U7CisrCQlQS0NTMTJfZ2V0X2F0dHJfZ2VuOworKwkJUEtDUzEyX3BhcnNlOworKwkJUEtDUzEyX2NyZWF0ZTsKKysJCWkyZF9QS0NTMTJfYmlvOworKwkJaTJkX1BLQ1MxMl9mcDsKKysJCWQyaV9QS0NTMTJfYmlvOworKwkJZDJpX1BLQ1MxMl9mcDsKKysJCWkyZF9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX25ldzsKKysJCWQyaV9QQkVQQVJBTTsKKysJCVBCRVBBUkFNX2ZyZWU7CisrCQlpMmRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBLQ1M4X1BSSVZfS0VZX0lORk9fbmV3OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2ZyZWU7CisrCQlFVlBfUEtDUzgyUEtFWTsKKysJCUVWUF9QS0VZMlBLQ1M4OworKwkJUEtDUzhfc2V0X2Jyb2tlbjsKKysJCUVWUF9QQkVfQUxHT1JfQ2lwaGVySW5pdDsKKysJCUVWUF9QQkVfYWxnX2FkZDsKKysJCVBLQ1M1X3BiZV9zZXQ7CisrCQlFVlBfUEJFX2NsZWFudXA7CisrCQlpMmRfU1hORVQ7CisrCQlkMmlfU1hORVQ7CisrCQlTWE5FVF9uZXc7CisrCQlTWE5FVF9mcmVlOworKwkJaTJkX1NYTkVUSUQ7CisrCQlkMmlfU1hORVRJRDsKKysJCVNYTkVUSURfbmV3OworKwkJU1hORVRJRF9mcmVlOworKwkJRFNBX1NJR19uZXc7CisrCQlEU0FfU0lHX2ZyZWU7CisrCQlEU0FfZG9fc2lnbjsKKysJCURTQV9kb192ZXJpZnk7CisrCQlkMmlfRFNBX1NJRzsKKysJCWkyZF9EU0FfU0lHOworKwkJaTJkX0FTTjFfVklTSUJMRVNUUklORzsKKysJCWQyaV9BU04xX1ZJU0lCTEVTVFJJTkc7CisrCQlpMmRfQVNOMV9VVEY4U1RSSU5HOworKwkJZDJpX0FTTjFfVVRGOFNUUklORzsKKysJCWkyZF9ESVJFQ1RPUllTVFJJTkc7CisrCQlkMmlfRElSRUNUT1JZU1RSSU5HOworKwkJaTJkX0RJU1BMQVlURVhUOworKwkJZDJpX0RJU1BMQVlURVhUOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDk7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOTsKKysJCWkyZF9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX25ldzsKKysJCWQyaV9QQktERjJQQVJBTTsKKysJCVBCS0RGMlBBUkFNX2ZyZWU7CisrCQlpMmRfUEJFMlBBUkFNOworKwkJUEJFMlBBUkFNX25ldzsKKysJCWQyaV9QQkUyUEFSQU07CisrCQlQQkUyUEFSQU1fZnJlZTsKKysJCWQyaV9BU04xX1NFVF9PRl9HRU5FUkFMX05BTUU7CisrCQlpMmRfQVNOMV9TRVRfT0ZfR0VORVJBTF9OQU1FOworKwkJZDJpX0FTTjFfU0VUX09GX1NYTkVUSUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfU1hORVRJRDsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWkyZF9BU04xX1NFVF9PRl9QT0xJQ1lRVUFMSU5GTzsKKysJCWQyaV9BU04xX1NFVF9PRl9QT0xJQ1lJTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BPTElDWUlORk87CisrCQlTWE5FVF9hZGRfaWRfYXNjOworKwkJU1hORVRfYWRkX2lkX3Vsb25nOworKwkJU1hORVRfYWRkX2lkX0lOVEVHRVI7CisrCQlTWE5FVF9nZXRfaWRfYXNjOworKwkJU1hORVRfZ2V0X2lkX3Vsb25nOworKwkJU1hORVRfZ2V0X2lkX0lOVEVHRVI7CisrCQlYNTA5VjNfc2V0X2NvbmZfbGhhc2g7CisrCQlpMmRfQ0VSVElGSUNBVEVQT0xJQ0lFUzsKKysJCUNFUlRJRklDQVRFUE9MSUNJRVNfbmV3OworKwkJQ0VSVElGSUNBVEVQT0xJQ0lFU19mcmVlOworKwkJZDJpX0NFUlRJRklDQVRFUE9MSUNJRVM7CisrCQlpMmRfUE9MSUNZSU5GTzsKKysJCVBPTElDWUlORk9fbmV3OworKwkJZDJpX1BPTElDWUlORk87CisrCQlQT0xJQ1lJTkZPX2ZyZWU7CisrCQlpMmRfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19uZXc7CisrCQlkMmlfUE9MSUNZUVVBTElORk87CisrCQlQT0xJQ1lRVUFMSU5GT19mcmVlOworKwkJaTJkX1VTRVJOT1RJQ0U7CisrCQlVU0VSTk9USUNFX25ldzsKKysJCWQyaV9VU0VSTk9USUNFOworKwkJVVNFUk5PVElDRV9mcmVlOworKwkJaTJkX05PVElDRVJFRjsKKysJCU5PVElDRVJFRl9uZXc7CisrCQlkMmlfTk9USUNFUkVGOworKwkJTk9USUNFUkVGX2ZyZWU7CisrCQlYNTA5VjNfZ2V0X3N0cmluZzsKKysJCVg1MDlWM19nZXRfc2VjdGlvbjsKKysJCVg1MDlWM19zdHJpbmdfZnJlZTsKKysJCVg1MDlWM19zZWN0aW9uX2ZyZWU7CisrCQlYNTA5VjNfc2V0X2N0eDsKKysJCXMyaV9BU04xX0lOVEVHRVI7CisrCQlDUllQVE9fc2V0X2xvY2tlZF9tZW1fZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2Z1bmN0aW9uczsKKysJCUNSWVBUT19tYWxsb2NfbG9ja2VkOworKwkJQ1JZUFRPX2ZyZWVfbG9ja2VkOworKwkJQk5fbW9kX2V4cDJfbW9udDsKKysJCUVSUl9nZXRfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfZXJyb3JfbGluZV9kYXRhOworKwkJUEtDUzEyX1BCRV9rZXlpdmdlbjsKKysJCVg1MDlfQUxHT1JfZHVwOworKwkJZDJpX0FTTjFfU0VUX09GX0RJU1RfUE9JTlQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfRElTVF9QT0lOVDsKKysJCWkyZF9DUkxfRElTVF9QT0lOVFM7CisrCQlDUkxfRElTVF9QT0lOVFNfbmV3OworKwkJQ1JMX0RJU1RfUE9JTlRTX2ZyZWU7CisrCQlkMmlfQ1JMX0RJU1RfUE9JTlRTOworKwkJaTJkX0RJU1RfUE9JTlQ7CisrCQlESVNUX1BPSU5UX25ldzsKKysJCWQyaV9ESVNUX1BPSU5UOworKwkJRElTVF9QT0lOVF9mcmVlOworKwkJaTJkX0RJU1RfUE9JTlRfTkFNRTsKKysJCURJU1RfUE9JTlRfTkFNRV9uZXc7CisrCQlESVNUX1BPSU5UX05BTUVfZnJlZTsKKysJCWQyaV9ESVNUX1BPSU5UX05BTUU7CisrCQlYNTA5VjNfYWRkX3ZhbHVlX3VjaGFyOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX0FTTjFfVFlQRTsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0VYVEVOU0lPTjsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X05BTUVfRU5UUlk7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9UWVBFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfQVRUUklCVVRFOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfRVhURU5TSU9OOworKwkJaTJkX0FTTjFfU0VUX09GX1g1MDlfTkFNRV9FTlRSWTsKKysJCVg1MDlWM19FWFRfaTJkOworKwkJWDUwOVYzX0VYVF92YWxfcHJuOworKwkJWDUwOVYzX0VYVF9hZGRfbGlzdDsKKysJCUVWUF9DSVBIRVJfdHlwZTsKKysJCUVWUF9QQkVfQ2lwaGVySW5pdDsKKysJCVg1MDlWM19hZGRfdmFsdWVfYm9vbF9uZjsKKysJCWQyaV9BU04xX1VJTlRFR0VSOworKwkJc2tfdmFsdWU7CisrCQlza19udW07CisrCQlza19zZXQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9SRVZPS0VEOworKwkJc2tfc29ydDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X1JFVk9LRUQ7CisrCQlpMmRfQVNOMV9TRVRfT0ZfWDUwOV9BTEdPUjsKKysJCWkyZF9BU04xX1NFVF9PRl9YNTA5X0NSTDsKKysJCWQyaV9BU04xX1NFVF9PRl9YNTA5X0FMR09SOworKwkJZDJpX0FTTjFfU0VUX09GX1g1MDlfQ1JMOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1NJR05FUl9JTkZPOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3X1JFQ0lQX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfU0lHTkVSX0lORk87CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzdfUkVDSVBfSU5GTzsKKysJCVBLQ1M1X1BCRV9hZGQ7CisrCQlQRU1fd3JpdGVfYmlvX1BLQ1M4OworKwkJaTJkX1BLQ1M4X2ZwOworKwkJUEVNX3JlYWRfYmlvX1BLQ1M4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCWQyaV9QS0NTOF9iaW87CisrCQlkMmlfUEtDUzhfUFJJVl9LRVlfSU5GT19mcDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9iaW9fUDhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1BLQ1M4OworKwkJZDJpX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJZDJpX1BLQ1M4X2ZwOworKwkJUEVNX3dyaXRlX1BLQ1M4OworKwkJUEVNX3JlYWRfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV9yZWFkX1A4X1BSSVZfS0VZX0lORk87CisrCQlQRU1fcmVhZF9iaW9fUEtDUzg7CisrCQlQRU1fd3JpdGVfUEtDUzhfUFJJVl9LRVlfSU5GTzsKKysJCVBFTV93cml0ZV9QOF9QUklWX0tFWV9JTkZPOworKwkJUEtDUzVfUEJFX2tleWl2Z2VuOworKwkJaTJkX1BLQ1M4X2JpbzsKKysJCWkyZF9QS0NTOF9QUklWX0tFWV9JTkZPX2ZwOworKwkJaTJkX1BLQ1M4X1BSSVZfS0VZX0lORk9fYmlvOworKwkJQklPX3NfYmlvOworKwkJUEtDUzVfcGJlMl9zZXQ7CisrCQlQS0NTNV9QQktERjJfSE1BQ19TSEExOworKwkJUEtDUzVfdjJfUEJFX2tleWl2Z2VuOworKwkJUEVNX3dyaXRlX2Jpb19QS0NTOFByaXZhdGVLZXk7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5OworKwkJQklPX2N0cmxfZ2V0X3JlYWRfcmVxdWVzdDsKKysJCUJJT19jdHJsX3BlbmRpbmc7CisrCQlCSU9fY3RybF93cGVuZGluZzsKKysJCUJJT19uZXdfYmlvX3BhaXI7CisrCQlCSU9fY3RybF9nZXRfd3JpdGVfZ3VhcmFudGVlOworKwkJQ1JZUFRPX251bV9sb2NrczsKKysJCUNPTkZfbG9hZF9iaW87CisrCQlDT05GX2xvYWRfZnA7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfQVNOMV9PQkpFQ1Q7CisrCQlQS0NTN19zaWduYXR1cmVWZXJpZnk7CisrCQlSU0Ffc2V0X21ldGhvZDsKKysJCVJTQV9nZXRfbWV0aG9kOworKwkJUlNBX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCVJTQV9jaGVja19rZXk7CisrCQlPQkpfb2JqMnR4dDsKKysJCURTQV9kdXBfREg7CisrCQlYNTA5X1JFUV9nZXRfZXh0ZW5zaW9uczsKKysJCVg1MDlfUkVRX3NldF9leHRlbnNpb25fbmlkczsKKysJCUJJT19ud3JpdGU7CisrCQlYNTA5X1JFUV9leHRlbnNpb25fbmlkOworKwkJQklPX25yZWFkOworKwkJWDUwOV9SRVFfZ2V0X2V4dGVuc2lvbl9uaWRzOworKwkJQklPX253cml0ZTA7CisrCQlYNTA5X1JFUV9hZGRfZXh0ZW5zaW9uc19uaWQ7CisrCQlCSU9fbnJlYWQwOworKwkJWDUwOV9SRVFfYWRkX2V4dGVuc2lvbnM7CisrCQlCSU9fbmV3X21lbV9idWY7CisrCQlESF9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9tZXRob2Q7CisrCQlEU0FfT3BlblNTTDsKKysJCURIX2dldF9leF9kYXRhOworKwkJREhfZ2V0X2V4X25ld19pbmRleDsKKysJCURTQV9uZXdfbWV0aG9kOworKwkJREhfbmV3X21ldGhvZDsKKysJCURIX09wZW5TU0w7CisrCQlEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCURIX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9zZXRfZXhfZGF0YTsKKysJCURIX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCURTQV9nZXRfZXhfZGF0YTsKKysJCVg1MDlWM19FWFRfUkVRX2FkZF9jb25mOworKwkJTkVUU0NBUEVfU1BLSV9wcmludDsKKysJCU5FVFNDQVBFX1NQS0lfc2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2VuY29kZTsKKysJCU5FVFNDQVBFX1NQS0lfZ2V0X3B1YmtleTsKKysJCU5FVFNDQVBFX1NQS0lfYjY0X2RlY29kZTsKKysJCVVURjhfcHV0YzsKKysJCVVURjhfZ2V0YzsKKysJCVJTQV9udWxsX21ldGhvZDsKKysJCUFTTjFfdGFnMnN0cjsKKysJCUJJT19jdHJsX3Jlc2V0X3JlYWRfcmVxdWVzdDsKKysJCURJU1BMQVlURVhUX25ldzsKKysJCUFTTjFfR0VORVJBTElaRURUSU1FX2ZyZWU7CisrCQlYNTA5X1JFVk9LRURfZ2V0X2V4dF9kMmk7CisrCQlYNTA5X3NldF9leF9kYXRhOworKwkJWDUwOV9yZWplY3Rfc2V0X2JpdF9hc2M7CisrCQlYNTA5X05BTUVfYWRkX2VudHJ5X2J5X3R4dDsKKysJCVg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEOworKwkJWDUwOV9QVVJQT1NFX2dldDA7CisrCQlQRU1fcmVhZF9YNTA5X0FVWDsKKysJCWQyaV9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlQRU1fd3JpdGVfUFVCS0VZOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfZnJlZTsKKysJCWQyaV9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X2NsZWFyOworKwkJWDUwOV9UUlVTVF9hZGQ7CisrCQlBU04xX1ZJU0lCTEVTVFJJTkdfbmV3OworKwkJWDUwOV9hbGlhc19zZXQxOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfZnJlZTsKKysJCUVWUF9QS0VZX2dldDFfRFNBOworKwkJQVNOMV9CTVBTVFJJTkdfbmV3OworKwkJQVNOMV9tYnN0cmluZ19jb3B5OworKwkJQVNOMV9VVEY4U1RSSU5HX25ldzsKKysJCURTQV9nZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJQVNOMV9UNjFTVFJJTkdfZnJlZTsKKysJCURTQV9zZXRfbWV0aG9kOworKwkJWDUwOV9nZXRfZXhfZGF0YTsKKysJCUFTTjFfU1RSSU5HX3R5cGU7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X3NuYW1lOworKwkJQVNOMV9USU1FX2ZyZWU7CisrCQlBU04xX09DVEVUX1NUUklOR19jbXA7CisrCQlBU04xX0JJVF9TVFJJTkdfbmV3OworKwkJWDUwOV9nZXRfZXh0X2QyaTsKKysJCVBFTV9yZWFkX2Jpb19YNTA5X0FVWDsKKysJCUFTTjFfU1RSSU5HX3NldF9kZWZhdWx0X21hc2tfYXNjOworKwkJQVNOMV9TVFJJTkdfc2V0X2RlZl9tYXNrX2FzYzsKKysJCVBFTV93cml0ZV9iaW9fUlNBX1BVQktFWTsKKysJCUFTTjFfSU5URUdFUl9jbXA7CisrCQlkMmlfUlNBX1BVQktFWV9mcDsKKysJCVg1MDlfdHJ1c3Rfc2V0X2JpdF9hc2M7CisrCQlQRU1fd3JpdGVfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1NUT1JFX0NUWF9mcmVlOworKwkJRVZQX1BLRVlfc2V0MV9EU0E7CisrCQlpMmRfRFNBX1BVQktFWV9mcDsKKysJCVg1MDlfbG9hZF9jZXJ0X2NybF9maWxlOworKwkJQVNOMV9USU1FX25ldzsKKysJCWkyZF9SU0FfUFVCS0VZOworKwkJWDUwOV9TVE9SRV9DVFhfcHVycG9zZV9pbmhlcml0OworKwkJUEVNX3JlYWRfUlNBX1BVQktFWTsKKysJCWQyaV9YNTA5X0FVWDsKKysJCWkyZF9EU0FfUFVCS0VZOworKwkJWDUwOV9DRVJUX0FVWF9wcmludDsKKysJCVBFTV9yZWFkX0RTQV9QVUJLRVk7CisrCQlpMmRfUlNBX1BVQktFWV9iaW87CisrCQlBU04xX0JJVF9TVFJJTkdfbnVtX2FzYzsKKysJCWkyZF9QVUJLRVk7CisrCQlBU04xX1VUQ1RJTUVfZnJlZTsKKysJCURTQV9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2J5X2lkOworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2ZyZWU7CisrCQlQRU1fcmVhZF9iaW9fUFVCS0VZOworKwkJQVNOMV9TVFJJTkdfc2V0X2J5X05JRDsKKysJCVg1MDlfUFVSUE9TRV9nZXRfaWQ7CisrCQlESVNQTEFZVEVYVF9mcmVlOworKwkJT1RIRVJOQU1FX25ldzsKKysJCVg1MDlfQ0VSVF9BVVhfbmV3OworKwkJWDUwOV9UUlVTVF9jbGVhbnVwOworKwkJWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9PQko7CisrCQlYNTA5X0NSTF9nZXRfZXh0X2QyaTsKKysJCVg1MDlfUFVSUE9TRV9nZXQwX25hbWU7CisrCQlQRU1fcmVhZF9QVUJLRVk7CisrCQlpMmRfRFNBX1BVQktFWV9iaW87CisrCQlpMmRfT1RIRVJOQU1FOworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfZnJlZTsKKysJCUFTTjFfQklUX1NUUklOR19zZXRfYXNjOworKwkJWDUwOV9nZXRfZXhfbmV3X2luZGV4OworKwkJQVNOMV9TVFJJTkdfVEFCTEVfY2xlYW51cDsKKysJCVg1MDlfVFJVU1RfZ2V0X2J5X2lkOworKwkJWDUwOV9QVVJQT1NFX2dldF90cnVzdDsKKysJCUFTTjFfU1RSSU5HX2xlbmd0aDsKKysJCWQyaV9BU04xX1NFVF9PRl9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlBU04xX1BSSU5UQUJMRVNUUklOR19uZXc7CisrCQlYNTA5VjNfZ2V0X2QyaTsKKysJCUFTTjFfRU5VTUVSQVRFRF9mcmVlOworKwkJaTJkX1g1MDlfQ0VSVF9BVVg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfdHJ1c3Q7CisrCQlBU04xX1NUUklOR19zZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9TVE9SRV9DVFhfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9SU0E7CisrCQlESVJFQ1RPUllTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9YNTA5X0FVWDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX3NldDsKKysJCWQyaV9EU0FfUFVCS0VZX2ZwOworKwkJZDJpX1JTQV9QVUJLRVk7CisrCQlYNTA5X1RSVVNUX2dldDBfbmFtZTsKKysJCVg1MDlfVFJVU1RfZ2V0MDsKKysJCUFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlOworKwkJQVNOMV9JQTVTVFJJTkdfbmV3OworKwkJZDJpX0RTQV9QVUJLRVk7CisrCQlYNTA5X2NoZWNrX3B1cnBvc2U7CisrCQlBU04xX0VOVU1FUkFURURfbmV3OworKwkJZDJpX1JTQV9QVUJLRVlfYmlvOworKwkJZDJpX1BVQktFWTsKKysJCVg1MDlfVFJVU1RfZ2V0X3RydXN0OworKwkJWDUwOV9UUlVTVF9nZXRfZmxhZ3M7CisrCQlBU04xX0JNUFNUUklOR19mcmVlOworKwkJQVNOMV9UNjFTVFJJTkdfbmV3OworKwkJQVNOMV9VVENUSU1FX25ldzsKKysJCWkyZF9BVVRIT1JJVFlfSU5GT19BQ0NFU1M7CisrCQlFVlBfUEtFWV9zZXQxX1JTQTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9wdXJwb3NlOworKwkJQVNOMV9JQTVTVFJJTkdfZnJlZTsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9BVVg7CisrCQlYNTA5X1BVUlBPU0VfZ2V0X2NvdW50OworKwkJQ1JZUFRPX2FkZF9pbmZvOworKwkJWDUwOV9OQU1FX0VOVFJZX2NyZWF0ZV9ieV90eHQ7CisrCQlBU04xX1NUUklOR19nZXRfZGVmYXVsdF9tYXNrOworKwkJWDUwOV9hbGlhc19nZXQwOworKwkJQVNOMV9TVFJJTkdfZGF0YTsKKysJCWkyZF9BQ0NFU1NfREVTQ1JJUFRJT047CisrCQlYNTA5X3RydXN0X3NldF9iaXQ7CisrCQlBU04xX0JJVF9TVFJJTkdfZnJlZTsKKysJCVBFTV9yZWFkX2Jpb19SU0FfUFVCS0VZOworKwkJWDUwOV9hZGQxX3JlamVjdF9vYmplY3Q7CisrCQlYNTA5X2NoZWNrX3RydXN0OworKwkJUEVNX3JlYWRfYmlvX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfYWRkOworKwkJQVNOMV9TVFJJTkdfVEFCTEVfZ2V0OworKwkJQVNOMV9VVEY4U1RSSU5HX2ZyZWU7CisrCQlkMmlfRFNBX1BVQktFWV9iaW87CisrCQlQRU1fd3JpdGVfUlNBX1BVQktFWTsKKysJCWQyaV9PVEhFUk5BTUU7CisrCQlYNTA5X3JlamVjdF9zZXRfYml0OworKwkJUEVNX3dyaXRlX0RTQV9QVUJLRVk7CisrCQlYNTA5X1BVUlBPU0VfZ2V0MF9zbmFtZTsKKysJCUVWUF9QS0VZX3NldDFfREg7CisrCQlBU04xX09DVEVUX1NUUklOR19kdXA7CisrCQlBU04xX0JJVF9TVFJJTkdfc2V0OworKwkJWDUwOV9UUlVTVF9nZXRfY291bnQ7CisrCQlBU04xX0lOVEVHRVJfZnJlZTsKKysJCU9USEVSTkFNRV9mcmVlOworKwkJaTJkX1JTQV9QVUJLRVlfZnA7CisrCQlBU04xX0lOVEVHRVJfZHVwOworKwkJZDJpX1g1MDlfQ0VSVF9BVVg7CisrCQlQRU1fd3JpdGVfYmlvX1BVQktFWTsKKysJCUFTTjFfVklTSUJMRVNUUklOR19mcmVlOworKwkJWDUwOV9QVVJQT1NFX2NsZWFudXA7CisrCQlBU04xX21ic3RyaW5nX25jb3B5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfbmV3OworKwkJRVZQX1BLRVlfZ2V0MV9ESDsKKysJCUFTTjFfT0NURVRfU1RSSU5HX25ldzsKKysJCUFTTjFfSU5URUdFUl9uZXc7CisrCQlpMmRfWDUwOV9BVVg7CisrCQlBU04xX0JJVF9TVFJJTkdfbmFtZV9wcmludDsKKysJCVg1MDlfY21wOworKwkJQVNOMV9TVFJJTkdfbGVuZ3RoX3NldDsKKysJCURJUkVDVE9SWVNUUklOR19uZXc7CisrCQlYNTA5X2FkZDFfdHJ1c3Rfb2JqZWN0OworKwkJUEtDUzEyX25ld3Bhc3M7CisrCQlTTUlNRV93cml0ZV9QS0NTNzsKKysJCVNNSU1FX3JlYWRfUEtDUzc7CisrCQlERVNfc2V0X2tleV9jaGVja2VkOworKwkJUEtDUzdfdmVyaWZ5OworKwkJUEtDUzdfZW5jcnlwdDsKKysJCURFU19zZXRfa2V5X3VuY2hlY2tlZDsKKysJCVNNSU1FX2NybGZfY29weTsKKysJCWkyZF9BU04xX1BSSU5UQUJMRVNUUklORzsKKysJCVBLQ1M3X2dldDBfc2lnbmVyczsKKysJCVBLQ1M3X2RlY3J5cHQ7CisrCQlTTUlNRV90ZXh0OworKwkJUEtDUzdfc2ltcGxlX3NtaW1lY2FwOworKwkJUEtDUzdfZ2V0X3NtaW1lY2FwOworKwkJUEtDUzdfc2lnbjsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfc21pbWVjYXA7CisrCQlDUllQVE9fZGJnX3NldF9vcHRpb25zOworKwkJQ1JZUFRPX3JlbW92ZV9hbGxfaW5mbzsKKysJCUNSWVBUT19nZXRfbWVtX2RlYnVnX2Z1bmN0aW9uczsKKysJCUNSWVBUT19pc19tZW1fY2hlY2tfb247CisrCQlDUllQVE9fc2V0X21lbV9kZWJ1Z19mdW5jdGlvbnM7CisrCQlDUllQVE9fcG9wX2luZm87CisrCQlDUllQVE9fcHVzaF9pbmZvXzsKKysJCUNSWVBUT19zZXRfbWVtX2RlYnVnX29wdGlvbnM7CisrCQlQRU1fd3JpdGVfUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2YXRlS2V5X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzhQcml2S2V5X25pZDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJQVNOMV9OVUxMX2ZyZWU7CisrCQlkMmlfQVNOMV9OVUxMOworKwkJQVNOMV9OVUxMX25ldzsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlfYmlvOworKwkJaTJkX1BLQ1M4UHJpdmF0ZUtleV9mcDsKKysJCWkyZF9BU04xX05VTEw7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9mcDsKKysJCWQyaV9QS0NTOFByaXZhdGVLZXlfZnA7CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5X25pZF9iaW87CisrCQlpMmRfUEtDUzhQcml2YXRlS2V5SW5mb19mcDsKKysJCWkyZF9QS0NTOFByaXZhdGVLZXlJbmZvX2JpbzsKKysJCVBFTV9jYjsKKysJCWkyZF9Qcml2YXRlS2V5X2ZwOworKwkJZDJpX1ByaXZhdGVLZXlfYmlvOworKwkJZDJpX1ByaXZhdGVLZXlfZnA7CisrCQlpMmRfUHJpdmF0ZUtleV9iaW87CisrCQlYNTA5X3JlamVjdF9jbGVhcjsKKysJCVg1MDlfVFJVU1Rfc2V0X2RlZmF1bHQ7CisrCQlkMmlfQXV0b1ByaXZhdGVLZXk7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX3R5cGU7CisrCQlYNTA5X0FUVFJJQlVURV9zZXQxX2RhdGE7CisrCQlYNTA5YXRfZ2V0X2F0dHI7CisrCQlYNTA5YXRfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X0FUVFJJQlVURV9jcmVhdGVfYnlfTklEOworKwkJWDUwOV9BVFRSSUJVVEVfc2V0MV9vYmplY3Q7CisrCQlYNTA5X0FUVFJJQlVURV9jb3VudDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV9PQko7CisrCQlYNTA5X0FUVFJJQlVURV9nZXQwX29iamVjdDsKKysJCVg1MDlhdF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyOworKwkJWDUwOV9BVFRSSUJVVEVfZ2V0MF9kYXRhOworKwkJWDUwOWF0X2RlbGV0ZV9hdHRyOworKwkJWDUwOWF0X2dldF9hdHRyX2J5X09CSjsKKysJCVJBTkRfYWRkOworKwkJQklPX251bWJlcl93cml0dGVuOworKwkJQklPX251bWJlcl9yZWFkOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbjsKKysJCUVSUl9sb2FkX1JBTkRfc3RyaW5nczsKKysJCVJBTkRfcHNldWRvX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHI7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfTklEOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfYnlfT0JKOworKwkJWDUwOWF0X2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfZ2V0X2F0dHJfY291bnQ7CisrCQlYNTA5X1JFUV9hZGQxX2F0dHI7CisrCQlYNTA5X1JFUV9kZWxldGVfYXR0cjsKKysJCVg1MDlhdF9hZGQxX2F0dHJfYnlfT0JKOworKwkJWDUwOV9SRVFfYWRkMV9hdHRyX2J5X3R4dDsKKysJCVg1MDlfQVRUUklCVVRFX2NyZWF0ZV9ieV90eHQ7CisrCQlYNTA5YXRfYWRkMV9hdHRyX2J5X3R4dDsKKysJCUJOX3BzZXVkb19yYW5kOworKwkJQk5faXNfcHJpbWVfZmFzdHRlc3Q7CisrCQlCTl9DVFhfZW5kOworKwkJQk5fQ1RYX3N0YXJ0OworKwkJQk5fQ1RYX2dldDsKKysJCUVWUF9QS0VZMlBLQ1M4X2Jyb2tlbjsKKysJCUFTTjFfU1RSSU5HX1RBQkxFX2FkZDsKKysJCUNSWVBUT19kYmdfZ2V0X29wdGlvbnM7CisrCQlBVVRIT1JJVFlfSU5GT19BQ0NFU1NfbmV3OworKwkJQ1JZUFRPX2dldF9tZW1fZGVidWdfb3B0aW9uczsKKysJCURFU19jcnlwdDsKKysJCVBFTV93cml0ZV9iaW9fWDUwOV9SRVFfTkVXOworKwkJUEVNX3dyaXRlX1g1MDlfUkVRX05FVzsKKysJCUJJT19jYWxsYmFja19jdHJsOworKwkJUkFORF9lZ2Q7CisrCQlSQU5EX3N0YXR1czsKKysJCWJuX2R1bXAxOworKwkJREVTX2NoZWNrX2tleV9wYXJpdHk7CisrCQlsaF9udW1faXRlbXM7CisrCQlSQU5EX2V2ZW50OworKwkJRFNPX25ldzsKKysJCURTT19uZXdfbWV0aG9kOworKwkJRFNPX2ZyZWU7CisrCQlEU09fZmxhZ3M7CisrCQlEU09fdXA7CisrCQlEU09fc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRFNPX2dldF9kZWZhdWx0X21ldGhvZDsKKysJCURTT19nZXRfbWV0aG9kOworKwkJRFNPX3NldF9tZXRob2Q7CisrCQlEU09fbG9hZDsKKysJCURTT19iaW5kX3ZhcjsKKysJCURTT19NRVRIT0RfbnVsbDsKKysJCURTT19NRVRIT0Rfb3BlbnNzbDsKKysJCURTT19NRVRIT0RfZGxmY247CisrCQlEU09fTUVUSE9EX3dpbjMyOworKwkJRVJSX2xvYWRfRFNPX3N0cmluZ3M7CisrCQlEU09fTUVUSE9EX2RsOworKwkJTkNPTkZfbG9hZDsKKysJCU5DT05GX2xvYWRfZnA7CisrCQlOQ09ORl9uZXc7CisrCQlOQ09ORl9nZXRfc3RyaW5nOworKwkJTkNPTkZfZnJlZTsKKysJCU5DT05GX2dldF9udW1iZXI7CisrCQlDT05GX2R1bXBfZnA7CisrCQlOQ09ORl9sb2FkX2JpbzsKKysJCU5DT05GX2R1bXBfZnA7CisrCQlOQ09ORl9nZXRfc2VjdGlvbjsKKysJCU5DT05GX2R1bXBfYmlvOworKwkJQ09ORl9kdW1wX2JpbzsKKysJCU5DT05GX2ZyZWVfZGF0YTsKKysJCUNPTkZfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJRVJSX2Vycm9yX3N0cmluZ19uOworKwkJQklPX3NucHJpbnRmOworKwkJRFNPX2N0cmw7CisrCQlpMmRfQVNOMV9TRVRfT0ZfQVNOMV9JTlRFR0VSOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1MxMl9TQUZFQkFHOworKwkJaTJkX0FTTjFfU0VUX09GX1BLQ1M3OworKwkJQklPX3ZmcmVlOworKwkJZDJpX0FTTjFfU0VUX09GX0FTTjFfSU5URUdFUjsKKysJCWQyaV9BU04xX1NFVF9PRl9QS0NTMTJfU0FGRUJBRzsKKysJCUFTTjFfVVRDVElNRV9nZXQ7CisrCQlYNTA5X1JFUV9kaWdlc3Q7CisrCQlYNTA5X0NSTF9kaWdlc3Q7CisrCQlkMmlfQVNOMV9TRVRfT0ZfUEtDUzc7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfa2V5X2xlbmd0aDsKKysJCUVWUF9DSVBIRVJfQ1RYX2N0cmw7CisrCQlCTl9tb2RfZXhwX21vbnRfd29yZDsKKysJCVJBTkRfZWdkX2J5dGVzOworKwkJWDUwOV9SRVFfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZ2V0MV9lbWFpbDsKKysJCVg1MDlfZW1haWxfZnJlZTsKKysJCWkyZF9SU0FfTkVUOworKwkJZDJpX1JTQV9ORVRfMjsKKysJCWQyaV9SU0FfTkVUOworKwkJRFNPX2JpbmRfZnVuYzsKKysJCUNSWVBUT19nZXRfbmV3X2R5bmxvY2tpZDsKKysJCXNrX25ld19udWxsOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2Rlc3Ryb3lfY2FsbGJhY2s7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfZGVzdHJveV9jYjsKKysJCUNSWVBUT19kZXN0cm95X2R5bmxvY2tpZDsKKysJCUNSWVBUT19zZXRfZHlubG9ja19zaXplOworKwkJQ1JZUFRPX3NldF9keW5sb2NrX2NyZWF0ZV9jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19jcmVhdGVfY2I7CisrCQlDUllQVE9fc2V0X2R5bmxvY2tfbG9ja19jYWxsYmFjazsKKysJCUNSWVBUT19zZXRfZHlubG9ja19sb2NrX2NiOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2xvY2tfY2FsbGJhY2s7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfbG9ja19jYjsKKysJCUNSWVBUT19nZXRfZHlubG9ja19kZXN0cm95X2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2Rlc3Ryb3lfY2I7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfdmFsdWU7CisrCQlDUllQVE9fZ2V0X2R5bmxvY2tfY3JlYXRlX2NhbGxiYWNrOworKwkJQ1JZUFRPX2dldF9keW5sb2NrX2NyZWF0ZV9jYjsKKysJCWMyaV9BU04xX0JJVF9TVFJJTkc7CisrCQlpMmNfQVNOMV9CSVRfU1RSSU5HOworKwkJUkFORF9wb2xsOworKwkJYzJpX0FTTjFfSU5URUdFUjsKKysJCWkyY19BU04xX0lOVEVHRVI7CisrCQlCSU9fZHVtcF9pbmRlbnQ7CisrCQlBU04xX3BhcnNlX2R1bXA7CisrCQljMmlfQVNOMV9PQkpFQ1Q7CisrCQlYNTA5X05BTUVfcHJpbnRfZXhfZnA7CisrCQlBU04xX1NUUklOR19wcmludF9leF9mcDsKKysJCVg1MDlfTkFNRV9wcmludF9leDsKKysJCUFTTjFfU1RSSU5HX3ByaW50X2V4OworKwkJTUQ0OworKwkJTUQ0X1RyYW5zZm9ybTsKKysJCU1ENF9GaW5hbDsKKysJCU1ENF9VcGRhdGU7CisrCQlNRDRfSW5pdDsKKysJCUVWUF9tZDQ7CisrCQlpMmRfUFVCS0VZX2JpbzsKKysJCWkyZF9QVUJLRVlfZnA7CisrCQlkMmlfUFVCS0VZX2JpbzsKKysJCUFTTjFfU1RSSU5HX3RvX1VURjg7CisrCQlCSU9fdnByaW50ZjsKKysJCUJJT192c25wcmludGY7CisrCQlkMmlfUFVCS0VZX2ZwOworKwkJWDUwOV9jbXBfdGltZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF90aW1lOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MV9pc3N1ZXI7CisrCQlYNTA5X09CSkVDVF9yZXRyaWV2ZV9tYXRjaDsKKysJCVg1MDlfT0JKRUNUX2lkeF9ieV9zdWJqZWN0OworKwkJWDUwOV9TVE9SRV9DVFhfc2V0X2ZsYWdzOworKwkJWDUwOV9TVE9SRV9DVFhfdHJ1c3RlZF9zdGFjazsKKysJCVg1MDlfdGltZV9hZGo7CisrCQlYNTA5X2NoZWNrX2lzc3VlZDsKKysJCUFTTjFfVVRDVElNRV9jbXBfdGltZV90OworKwkJREVTX3NldF93ZWFrX2tleV9mbGFnOworKwkJREVTX2NoZWNrX2tleTsKKysJCURFU19yd19tb2RlOworKwkJUlNBX1BLQ1MxX1JTQXJlZjsKKysJCVg1MDlfa2V5aWRfc2V0MTsKKysJCUJJT19uZXh0OworKwkJRFNPX01FVEhPRF92bXM7CisrCQlCSU9fZl9saW5lYnVmZmVyOworKwkJQk5fYm50ZXN0X3JhbmQ7CisrCQlPUEVOU1NMX2lzc2V0dWdpZDsKKysJCUJOX3JhbmRfcmFuZ2U7CisrCQlFUlJfbG9hZF9FTkdJTkVfc3RyaW5nczsKKysJCUVOR0lORV9zZXRfRFNBOworKwkJRU5HSU5FX2dldF9maW5pc2hfZnVuY3Rpb247CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfUlNBOworKwkJRU5HSU5FX2dldF9CTl9tb2RfZXhwOworKwkJRFNBX2dldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX3NldF9ESDsKKysJCUVOR0lORV9zZXRfZGVmX0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2luaXQ7CisrCQlESF9nZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCVJTQV9zZXRfZGVmYXVsdF9vcGVuc3NsX21ldGhvZDsKKysJCUVOR0lORV9maW5pc2g7CisrCQlFTkdJTkVfbG9hZF9wdWJsaWNfa2V5OworKwkJRU5HSU5FX2dldF9ESDsKKysJCUVOR0lORV9jdHJsOworKwkJRU5HSU5FX2dldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9pbml0X2Z1bmN0aW9uOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9nZXRfbmFtZTsKKysJCUVOR0lORV9nZXRfbGFzdDsKKysJCUVOR0lORV9nZXRfcHJldjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9nZXRfUlNBOworKwkJRU5HSU5FX3NldF9kZWZhdWx0OworKwkJRU5HSU5FX2dldF9SQU5EOworKwkJRU5HSU5FX2dldF9maXJzdDsKKysJCUVOR0lORV9ieV9pZDsKKysJCUVOR0lORV9zZXRfZmluaXNoX2Z1bmN0aW9uOworKwkJRU5HSU5FX2dldF9kZWZfQk5fbW9kX2V4cF9jcnQ7CisrCQlFTkdJTkVfZ2V0X2RlZmF1bHRfQk5fbW9kX2V4cF9jcnQ7CisrCQlSU0FfZ2V0X2RlZmF1bHRfb3BlbnNzbF9tZXRob2Q7CisrCQlFTkdJTkVfc2V0X1JTQTsKKysJCUVOR0lORV9sb2FkX3ByaXZhdGVfa2V5OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfcmVtb3ZlOworKwkJRU5HSU5FX2ZyZWU7CisrCQlFTkdJTkVfZ2V0X0JOX21vZF9leHBfY3J0OworKwkJRU5HSU5FX2dldF9uZXh0OworKwkJRU5HSU5FX3NldF9uYW1lOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0RTQTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9CTl9tb2RfZXhwOworKwkJRU5HSU5FX3NldF9kZWZhdWx0X1JTQTsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9SQU5EOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0JOX21vZF9leHA7CisrCQlFTkdJTkVfc2V0X1JBTkQ7CisrCQlFTkdJTkVfc2V0X2lkOworKwkJRU5HSU5FX3NldF9CTl9tb2RfZXhwX2NydDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9ESDsKKysJCUVOR0lORV9uZXc7CisrCQlFTkdJTkVfZ2V0X2lkOworKwkJRFNBX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2FkZDsKKysJCURIX3NldF9kZWZhdWx0X29wZW5zc2xfbWV0aG9kOworKwkJRU5HSU5FX2dldF9EU0E7CisrCQlFTkdJTkVfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2N0cmxfZnVuY3Rpb247CisrCQlCTl9wc2V1ZG9fcmFuZF9yYW5nZTsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF92ZXJpZnlfY2I7CisrCQlFUlJfbG9hZF9DT01QX3N0cmluZ3M7CisrCQlQS0NTMTJfaXRlbV9kZWNyeXB0X2QyaTsKKysJCUFTTjFfVVRGOFNUUklOR19pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2NpcGhlcnM7CisrCQlFTkdJTkVfZ2V0X2NpcGhlcnM7CisrCQlkMmlfT0NTUF9CQVNJQ1JFU1A7CisrCQlLUkI1X0NIRUNLU1VNX2l0OworKwkJRUNfUE9JTlRfYWRkOworKwkJQVNOMV9pdGVtX2V4X2kyZDsKKysJCU9DU1BfQ0VSVElEX2l0OworKwkJZDJpX09DU1BfUkVTUEJZVEVTOworKwkJWDUwOVYzX2FkZDFfaTJkOworKwkJUEtDUzdfRU5WRUxPUEVfaXQ7CisrCQlVSV9hZGRfaW5wdXRfYm9vbGVhbjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JTQTsKKysJCVg1MDlWM19FWFRfbmNvbmY7CisrCQlBU04xX0dFTkVSQUxTVFJJTkdfZnJlZTsKKysJCWQyaV9PQ1NQX0NFUlRTVEFUVVM7CisrCQlYNTA5X1JFVk9LRURfc2V0X3NlcmlhbE51bWJlcjsKKysJCVg1MDlfcHJpbnRfZXg7CisrCQlPQ1NQX09ORVJFUV9nZXQxX2V4dF9kMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX1JBTkQ7CisrCQlFTkdJTkVfbG9hZF9keW5hbWljOworKwkJUEJLREYyUEFSQU1faXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfbmV3OworKwkJRUNfR1JPVVBfY2xlYXJfZnJlZTsKKysJCU9DU1Bfc2VuZHJlcV9iaW87CisrCQlBU04xX2l0ZW1fZGlnZXN0OworKwkJT0NTUF9CQVNJQ1JFU1BfZGVsZXRlX2V4dDsKKysJCU9DU1BfU0lHTkFUVVJFX2l0OworKwkJWDUwOV9DUkxfaXQ7CisrCQlPQ1NQX0JBU0lDUkVTUF9hZGRfZXh0OworKwkJS1JCNV9FTkNLRVlfaXQ7CisrCQlVSV9tZXRob2Rfc2V0X2Nsb3NlcjsKKysJCVg1MDlfU1RPUkVfc2V0X3B1cnBvc2U7CisrCQlpMmRfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXM7CisrCQlpMmRfT0NTUF9TRVJWSUNFTE9DOworKwkJRU5HSU5FX2dldF9kaWdlc3RfZW5naW5lOworKwkJRUNfR1JPVVBfc2V0X2N1cnZlX0dGcDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X09CSjsKKysJCV9vc3NsX29sZF9kZXNfcmFuZG9tX2tleTsKKysJCUFTTjFfVDYxU1RSSU5HX2l0OworKwkJRUNfR1JPVVBfbWV0aG9kX29mOworKwkJaTJkX0tSQjVfQVBSRVE7CisrCQlfb3NzbF9vbGRfZGVzX2VuY3J5cHQ7CisrCQlBU04xX1BSSU5UQUJMRV9uZXc7CisrCQlITUFDX0luaXRfZXg7CisrCQlkMmlfS1JCNV9BVVRIRU5UOworKwkJT0NTUF9hcmNoaXZlX2N1dG9mZl9uZXc7CisrCQlFQ19QT0lOVF9zZXRfSnByb2plY3RpdmVfY29vcmRpbmF0ZXNfR0ZwOworKwkJRUNfUE9JTlRfc2V0X0pwcm9qX2Nvb3Jkc19HRnA7CisrCQlfb3NzbF9vbGRfZGVzX2lzX3dlYWtfa2V5OworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlFQ19QT0lOVF9vY3QycG9pbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2N0cmw7CisrCQlfc2hhZG93X0RFU19yd19tb2RlOworKwkJYXNuMV9kb19hZGI7CisrCQlBU04xX3RlbXBsYXRlX2kyZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9ESDsKKysJCVVJX2NvbnN0cnVjdF9wcm9tcHQ7CisrCQlYNTA5X1NUT1JFX3NldF90cnVzdDsKKysJCVVJX2R1cF9pbnB1dF9zdHJpbmc7CisrCQlkMmlfS1JCNV9BUFJFUTsKKysJCUVWUF9NRF9DVFhfY29weV9leDsKKysJCU9DU1BfcmVxdWVzdF9pc19zaWduZWQ7CisrCQlpMmRfT0NTUF9SRVFJTkZPOworKwkJS1JCNV9FTkNLRVlfZnJlZTsKKysJCU9DU1BfcmVzcF9nZXQwOworKwkJR0VORVJBTF9OQU1FX2l0OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfaXQ7CisrCQlYNTA5X1NUT1JFX3NldF9mbGFnczsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9jb21wcl9jb29yZHNfR0ZwOworKwkJT0NTUF9yZXNwb25zZV9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVWT0tFRElORk87CisrCQlPQ1NQX2Jhc2ljX2FkZDFfY2VydDsKKysJCUVSUl9nZXRfaW1wbGVtZW50YXRpb247CisrCQlFVlBfQ2lwaGVyRmluYWxfZXg7CisrCQlPQ1NQX0NFUlRTVEFUVVNfbmV3OworKwkJQ1JZUFRPX2NsZWFudXBfYWxsX2V4X2RhdGE7CisrCQlPQ1NQX3Jlc3BfZmluZDsKKysJCUJOX25ubW9kOworKwkJWDUwOV9DUkxfc29ydDsKKysJCVg1MDlfUkVWT0tFRF9zZXRfcmV2b2NhdGlvbkRhdGU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUkFORDsKKysJCU9DU1BfU0VSVklDRUxPQ19uZXc7CisrCQlFQ19QT0lOVF9zZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCV9vc3NsX29sZF9kZXNfb3B0aW9uczsKKysJCVNYTkVUX2l0OworKwkJVUlfZHVwX2lucHV0X2Jvb2xlYW47CisrCQlQS0NTMTJfYWRkX0NTUE5hbWVfYXNjOworKwkJRUNfUE9JTlRfaXNfYXRfaW5maW5pdHk7CisrCQlFTkdJTkVfbG9hZF9jcnlwdG9kZXY7CisrCQlEU09fY29udmVydF9maWxlbmFtZTsKKysJCVBPTElDWVFVQUxJTkZPX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2NpcGhlcnM7CisrCQlCTl9tb2RfbHNoaWZ0X3F1aWNrOworKwkJRFNPX3NldF9maWxlbmFtZTsKKysJCUFTTjFfaXRlbV9mcmVlOworKwkJS1JCNV9US1RCT0RZX2ZyZWU7CisrCQlBVVRIT1JJVFlfS0VZSURfaXQ7CisrCQlLUkI1X0FQUkVRQk9EWV9uZXc7CisrCQlYNTA5VjNfRVhUX1JFUV9hZGRfbmNvbmY7CisrCQlFTkdJTkVfY3RybF9jbWRfc3RyaW5nOworKwkJaTJkX09DU1BfUkVTUERBVEE7CisrCQlFVlBfTURfQ1RYX2luaXQ7CisrCQlFWFRFTkRFRF9LRVlfVVNBR0VfZnJlZTsKKysJCVBLQ1M3X0FUVFJfU0lHTl9pdDsKKysJCVVJX2FkZF9lcnJvcl9zdHJpbmc7CisrCQlLUkI1X0NIRUNLU1VNX2ZyZWU7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0X2V4dDsKKysJCUVOR0lORV9sb2FkX3Vic2VjOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9kaWdlc3RzOworKwkJUEtFWV9VU0FHRV9QRVJJT0RfaXQ7CisrCQlQS0NTMTJfdW5wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfaXRlbV91bnBhY2s7CisrCQlORVRTQ0FQRV9TUEtBQ19pdDsKKysJCVg1MDlfUkVWT0tFRF9pdDsKKysJCUFTTjFfU1RSSU5HX2VuY29kZTsKKysJCUVWUF9hZXNfMTI4X2VjYjsKKysJCUtSQjVfQVVUSEVOVF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfZ2V0X2V4dF9ieV9jcml0aWNhbDsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfY2VydF9zdGF0dXNfc3RyOworKwkJZDJpX09DU1BfUkVRVUVTVDsKKysJCVVJX2R1cF9pbmZvX3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfeHdoaXRlX2luMm91dDsKKysJCVBLQ1MxMl9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfY3JpdDsKKysJCU9DU1BfQ0VSVFNUQVRVU19mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jcnlwdDsKKysJCUFTTjFfaXRlbV9pMmQ7CisrCQlFVlBfRGVjcnlwdEZpbmFsX2V4OworKwkJRU5HSU5FX2xvYWRfb3BlbnNzbDsKKysJCUVOR0lORV9nZXRfY21kX2RlZm5zOworKwkJRU5HSU5FX3NldF9sb2FkX3ByaXZrZXlfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xvYWRfcHJpdmtleV9mbjsKKysJCUVWUF9FbmNyeXB0RmluYWxfZXg7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfZGlnZXN0czsKKysJCVg1MDlfZ2V0MF9wdWJrZXlfYml0c3RyOworKwkJYXNuMV9leF9pMmM7CisrCQlFTkdJTkVfcmVnaXN0ZXJfUlNBOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRFNBOworKwkJX29zc2xfb2xkX2Rlc19rZXlfc2NoZWQ7CisrCQlYNTA5X0VYVEVOU0lPTl9pdDsKKysJCWkyZF9LUkI1X0FVVEhFTlQ7CisrCQlTWE5FVElEX2l0OworKwkJZDJpX09DU1BfU0lOR0xFUkVTUDsKKysJCUVESVBBUlRZTkFNRV9uZXc7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5OworKwkJX29zc2xfb2xkX2Rlc19vZmI2NF9lbmNyeXB0OworKwkJZDJpX0VYVEVOREVEX0tFWV9VU0FHRTsKKysJCUVSUl9wcmludF9lcnJvcnNfY2I7CisrCQlFTkdJTkVfc2V0X2NpcGhlcnM7CisrCQlkMmlfS1JCNV9BUFJFUUJPRFk7CisrCQlVSV9tZXRob2RfZ2V0X2ZsdXNoZXI7CisrCQlYNTA5X1BVQktFWV9pdDsKKysJCV9vc3NsX29sZF9kZXNfZW5jX3JlYWQ7CisrCQlQS0NTN19FTkNSWVBUX2l0OworKwkJaTJkX09DU1BfUkVTUE9OU0U7CisrCQlFQ19HUk9VUF9nZXRfY29mYWN0b3I7CisrCQlQS0NTMTJfdW5wYWNrX3A3ZGF0YTsKKysJCWQyaV9LUkI1X0FVVEhEQVRBOworKwkJT0NTUF9jb3B5X25vbmNlOworKwkJS1JCNV9BVVRIREFUQV9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX25ldzsKKysJCUVDX0dGcF9tb250X21ldGhvZDsKKysJCU9DU1BfUkVWT0tFRElORk9fZnJlZTsKKysJCVVJX2dldF9leF9kYXRhOworKwkJS1JCNV9BUFJFUUJPRFlfZnJlZTsKKysJCUVDX0dST1VQX2dldDBfZ2VuZXJhdG9yOworKwkJVUlfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJWDUwOVYzX3NldF9uY29uZjsKKysJCVBLQ1MxMl9pdGVtX2kyZF9lbmNyeXB0OworKwkJWDUwOV9hZGQxX2V4dF9pMmQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19pdDsKKysJCUtSQjVfUFJJTkNOQU1FX25ldzsKKysJCVBLQ1MxMl9TQUZFQkFHX2l0OworKwkJRUNfR1JPVVBfZ2V0X29yZGVyOworKwkJZDJpX09DU1BfUkVTUElEOworKwkJT0NTUF9yZXF1ZXN0X3ZlcmlmeTsKKysJCU5DT05GX2dldF9udW1iZXJfZTsKKysJCV9vc3NsX29sZF9kZXNfZGVjcnlwdDM7CisrCQlYNTA5X3NpZ25hdHVyZV9wcmludDsKKysJCU9DU1BfU0lOR0xFUkVTUF9mcmVlOworKwkJRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzOworKwkJaTJkX09DU1BfT05FUkVROworKwkJT0NTUF9SRVFVRVNUX2FkZF9leHQ7CisrCQlPQ1NQX1JFU1BCWVRFU19uZXc7CisrCQlFVlBfTURfQ1RYX2NyZWF0ZTsKKysJCU9DU1BfcmVzcF9maW5kX3N0YXR1czsKKysJCVg1MDlfQUxHT1JfaXQ7CisrCQlBU04xX1RJTUVfaXQ7CisrCQlPQ1NQX3JlcXVlc3Rfc2V0MV9uYW1lOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9jb3VudDsKKysJCVVJX2dldDBfcmVzdWx0OworKwkJUEtDUzEyX0FVVEhTQUZFU19pdDsKKysJCUVWUF9hZXNfMjU2X2VjYjsKKysJCVBLQ1MxMl9wYWNrX2F1dGhzYWZlczsKKysJCUFTTjFfSUE1U1RSSU5HX2l0OworKwkJVUlfZ2V0X2lucHV0X2ZsYWdzOworKwkJRUNfR1JPVVBfc2V0X2dlbmVyYXRvcjsKKysJCV9vc3NsX29sZF9kZXNfc3RyaW5nX3RvXzJrZXlzOworKwkJT0NTUF9DRVJUSURfZnJlZTsKKysJCVg1MDlfQ0VSVF9BVVhfaXQ7CisrCQlDRVJUSUZJQ0FURVBPTElDSUVTX2l0OworKwkJX29zc2xfb2xkX2Rlc19lZGUzX2NiY19lbmNyeXB0OworKwkJUkFORF9zZXRfcmFuZF9lbmdpbmU7CisrCQlEU09fZ2V0X2xvYWRlZF9maWxlbmFtZTsKKysJCVg1MDlfQVRUUklCVVRFX2l0OworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dF9ieV9OSUQ7CisrCQlQS0NTMTJfZGVjcnlwdF9za2V5OworKwkJS1JCNV9BVVRIRU5UX2l0OworKwkJVUlfZHVwX2Vycm9yX3N0cmluZzsKKysJCVJTQVB1YmxpY0tleV9pdDsKKysJCWkyZF9PQ1NQX1JFUVVFU1Q7CisrCQlQS0NTMTJfeDUwOWNybDJjZXJ0YmFnOworKwkJT0NTUF9TRVJWSUNFTE9DX2l0OworKwkJQVNOMV9pdGVtX3NpZ247CisrCQlYNTA5X0NSTF9zZXRfaXNzdWVyX25hbWU7CisrCQlPQkpfTkFNRV9kb19hbGxfc29ydGVkOworKwkJaTJkX09DU1BfQkFTSUNSRVNQOworKwkJaTJkX09DU1BfUkVTUEJZVEVTOworKwkJUEtDUzEyX3VucGFja19wN2VuY2RhdGE7CisrCQlITUFDX0NUWF9pbml0OworKwkJRU5HSU5FX2dldF9kaWdlc3Q7CisrCQlPQ1NQX1JFU1BPTlNFX3ByaW50OworKwkJS1JCNV9US1RCT0RZX2l0OworKwkJQUNDRVNTX0RFU0NSSVBUSU9OX2l0OworKwkJUEtDUzdfSVNTVUVSX0FORF9TRVJJQUxfaXQ7CisrCQlQQkUyUEFSQU1faXQ7CisrCQlQS0NTMTJfY2VydGJhZzJ4NTA5Y3JsOworKwkJUEtDUzdfU0lHTkVEX2l0OworKwkJRU5HSU5FX2dldF9jaXBoZXI7CisrCQlpMmRfT0NTUF9DUkxJRDsKKysJCU9DU1BfU0lOR0xFUkVTUF9uZXc7CisrCQlFTkdJTkVfY21kX2lzX2V4ZWN1dGFibGU7CisrCQlSU0FfdXBfcmVmOworKwkJQVNOMV9HRU5FUkFMU1RSSU5HX2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX0RTQTsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mX3NrOworKwkJRU5HSU5FX3NldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVBLQ1M4X2RlY3J5cHQ7CisrCQlQRU1fYnl0ZXNfcmVhZF9iaW87CisrCQlESVJFQ1RPUllTVFJJTkdfaXQ7CisrCQlkMmlfT0NTUF9DUkxJRDsKKysJCUVDX1BPSU5UX2lzX29uX2N1cnZlOworKwkJQ1JZUFRPX3NldF9sb2NrZWRfbWVtX2V4X2Z1bmN0aW9uczsKKysJCUNSWVBUT19zZXRfbG9ja2VkX21lbV9leF9mdW5jczsKKysJCWQyaV9LUkI1X0NIRUNLU1VNOworKwkJQVNOMV9pdGVtX2R1cDsKKysJCVg1MDlfaXQ7CisrCQlCTl9tb2RfYWRkOworKwkJS1JCNV9BVVRIREFUQV9mcmVlOworKwkJX29zc2xfb2xkX2Rlc19jYmNfY2tzdW07CisrCQlBU04xX2l0ZW1fdmVyaWZ5OworKwkJQ1JZUFRPX3NldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRUNfUE9JTlRfZ2V0X0pwcm9qZWN0aXZlX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9KcHJval9jb29yZHNfR0ZwOworKwkJWkxPTkdfaXQ7CisrCQlDUllQVE9fZ2V0X2xvY2tlZF9tZW1fZXhfZnVuY3Rpb25zOworKwkJQ1JZUFRPX2dldF9sb2NrZWRfbWVtX2V4X2Z1bmNzOworKwkJQVNOMV9USU1FX2NoZWNrOworKwkJVUlfZ2V0MF91c2VyX2RhdGE7CisrCQlITUFDX0NUWF9jbGVhbnVwOworKwkJRFNBX3VwX3JlZjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19jZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX2NmYjY0X2VuY3J5cHQ7CisrCQlBU04xX0JNUFNUUklOR19pdDsKKysJCUFTTjFfdGFnMmJpdDsKKysJCVVJX21ldGhvZF9zZXRfZmx1c2hlcjsKKysJCVg1MDlfb2NzcGlkX3ByaW50OworKwkJS1JCNV9FTkNEQVRBX2l0OworKwkJRU5HSU5FX2dldF9sb2FkX3B1YmtleV9mdW5jdGlvbjsKKysJCVVJX2FkZF91c2VyX2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfZGVsZXRlX2V4dDsKKysJCVVJX2dldF9tZXRob2Q7CisrCQlPQ1NQX09ORVJFUV9mcmVlOworKwkJQVNOMV9QUklOVEFCTEVTVFJJTkdfaXQ7CisrCQlYNTA5X0NSTF9zZXRfbmV4dFVwZGF0ZTsKKysJCU9DU1BfUkVRVUVTVF9pdDsKKysJCU9DU1BfQkFTSUNSRVNQX2l0OworKwkJQUVTX2VjYl9lbmNyeXB0OworKwkJQk5fbW9kX3NxcjsKKysJCU5FVFNDQVBFX0NFUlRfU0VRVUVOQ0VfaXQ7CisrCQlHRU5FUkFMX05BTUVTX2l0OworKwkJQVVUSE9SSVRZX0lORk9fQUNDRVNTX2l0OworKwkJQVNOMV9GQk9PTEVBTl9pdDsKKysJCVVJX3NldF9leF9kYXRhOworKwkJX29zc2xfb2xkX2Rlc19zdHJpbmdfdG9fa2V5OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9SU0E7CisrCQlkMmlfS1JCNV9QUklOQ05BTUU7CisrCQlPQ1NQX1JFU1BCWVRFU19pdDsKKysJCVg1MDlfQ0lORl9pdDsKKysJCUVOR0lORV91bnJlZ2lzdGVyX2RpZ2VzdHM7CisrCQlkMmlfRURJUEFSVFlOQU1FOworKwkJZDJpX09DU1BfU0VSVklDRUxPQzsKKysJCUVOR0lORV9nZXRfZGlnZXN0czsKKysJCV9vc3NsX29sZF9kZXNfc2V0X29kZF9wYXJpdHk7CisrCQlPQ1NQX1JFU1BEQVRBX2ZyZWU7CisrCQlkMmlfS1JCNV9USUNLRVQ7CisrCQlPVEhFUk5BTUVfaXQ7CisrCQlFVlBfTURfQ1RYX2NsZWFudXA7CisrCQlkMmlfQVNOMV9HRU5FUkFMU1RSSU5HOworKwkJWDUwOV9DUkxfc2V0X3ZlcnNpb247CisrCQlCTl9tb2Rfc3ViOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHRfYnlfTklEOworKwkJRU5HSU5FX2dldF9leF9uZXdfaW5kZXg7CisrCQlPQ1NQX1JFUVVFU1RfZnJlZTsKKysJCU9DU1BfUkVRVUVTVF9hZGQxX2V4dF9pMmQ7CisrCQlYNTA5X1ZBTF9pdDsKKysJCUVDX1BPSU5Uc19tYWtlX2FmZmluZTsKKysJCUVDX1BPSU5UX211bDsKKysJCVg1MDlWM19FWFRfYWRkX25jb25mOworKwkJWDUwOV9UUlVTVF9zZXQ7CisrCQlYNTA5X0NSTF9hZGQxX2V4dF9pMmQ7CisrCQlfb3NzbF9vbGRfZGVzX2ZjcnlwdDsKKysJCURJU1BMQVlURVhUX2l0OworKwkJWDUwOV9DUkxfc2V0X2xhc3RVcGRhdGU7CisrCQlPQ1NQX0JBU0lDUkVTUF9mcmVlOworKwkJT0NTUF9CQVNJQ1JFU1BfYWRkMV9leHRfaTJkOworKwkJZDJpX0tSQjVfQVVUSEVOVEJPRFk7CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbGVtZW50YXRpb247CisrCQlDUllQVE9fc2V0X2V4X2RhdGFfaW1wbDsKKysJCUtSQjVfRU5DREFUQV9uZXc7CisrCQlEU09fdXBfcmVmOworKwkJT0NTUF9jcmxfcmVhc29uX3N0cjsKKysJCVVJX2dldDBfcmVzdWx0X3N0cmluZzsKKysJCUFTTjFfR0VORVJBTFNUUklOR19uZXc7CisrCQlYNTA5X1NJR19pdDsKKysJCUVSUl9zZXRfaW1wbGVtZW50YXRpb247CisrCQlFUlJfbG9hZF9FQ19zdHJpbmdzOworKwkJVUlfZ2V0MF9hY3Rpb25fc3RyaW5nOworKwkJT0NTUF9PTkVSRVFfZ2V0X2V4dDsKKysJCUVDX1BPSU5UX21ldGhvZF9vZjsKKysJCWkyZF9LUkI1X0FQUkVRQk9EWTsKKysJCV9vc3NsX29sZF9kZXNfZWNiM19lbmNyeXB0OworKwkJQ1JZUFRPX2dldF9tZW1fZXhfZnVuY3Rpb25zOworKwkJRU5HSU5FX2dldF9leF9kYXRhOworKwkJVUlfZGVzdHJveV9tZXRob2Q7CisrCQlBU04xX2l0ZW1faTJkX2JpbzsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfT0JKOworKwkJQVNOMV9wcmltaXRpdmVfbmV3OworKwkJQVNOMV9QUklOVEFCTEVfaXQ7CisrCQlFVlBfYWVzXzE5Ml9lY2I7CisrCQlPQ1NQX1NJR05BVFVSRV9uZXc7CisrCQlMT05HX2l0OworKwkJQVNOMV9WSVNJQkxFU1RSSU5HX2l0OworKwkJT0NTUF9TSU5HTEVSRVNQX2FkZDFfZXh0X2kyZDsKKysJCWQyaV9PQ1NQX0NFUlRJRDsKKysJCUFTTjFfaXRlbV9kMmlfZnA7CisrCQlDUkxfRElTVF9QT0lOVFNfaXQ7CisrCQlHRU5FUkFMX05BTUVfcHJpbnQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZGVsZXRlX2V4dDsKKysJCVBLQ1MxMl9TQUZFQkFHU19pdDsKKysJCWQyaV9PQ1NQX1NJR05BVFVSRTsKKysJCU9DU1BfcmVxdWVzdF9hZGQxX25vbmNlOworKwkJRU5HSU5FX3NldF9jbWRfZGVmbnM7CisrCQlPQ1NQX1NFUlZJQ0VMT0NfZnJlZTsKKysJCUVDX0dST1VQX2ZyZWU7CisrCQlBU04xX0JJVF9TVFJJTkdfaXQ7CisrCQlYNTA5X1JFUV9pdDsKKysJCV9vc3NsX29sZF9kZXNfY2JjX2VuY3J5cHQ7CisrCQlFUlJfdW5sb2FkX3N0cmluZ3M7CisrCQlQS0NTN19TSUdOX0VOVkVMT1BFX2l0OworKwkJRURJUEFSVFlOQU1FX2ZyZWU7CisrCQlPQ1NQX1JFUUlORk9fZnJlZTsKKysJCUVDX0dST1VQX25ld19jdXJ2ZV9HRnA7CisrCQlPQ1NQX1JFUVVFU1RfZ2V0MV9leHRfZDJpOworKwkJUEtDUzEyX2l0ZW1fcGFja19zYWZlYmFnOworKwkJYXNuMV9leF9jMmk7CisrCQlFTkdJTkVfcmVnaXN0ZXJfZGlnZXN0czsKKysJCWkyZF9PQ1NQX1JFVk9LRURJTkZPOworKwkJYXNuMV9lbmNfcmVzdG9yZTsKKysJCVVJX2ZyZWU7CisrCQlVSV9uZXdfbWV0aG9kOworKwkJRVZQX0VuY3J5cHRJbml0X2V4OworKwkJWDUwOV9wdWJrZXlfZGlnZXN0OworKwkJRUNfUE9JTlRfaW52ZXJ0OworKwkJT0NTUF9iYXNpY19zaWduOworKwkJaTJkX09DU1BfUkVTUElEOworKwkJT0NTUF9jaGVja19ub25jZTsKKysJCUVOR0lORV9jdHJsX2NtZDsKKysJCWQyaV9LUkI1X0VOQ0tFWTsKKysJCU9DU1BfcGFyc2VfdXJsOworKwkJT0NTUF9TSU5HTEVSRVNQX2dldF9leHQ7CisrCQlPQ1NQX0NSTElEX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXQxX2V4dF9kMmk7CisrCQlSU0FQcml2YXRlS2V5X2l0OworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9ESDsKKysJCWkyZF9FRElQQVJUWU5BTUU7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGcDsKKysJCUVDX1BPSU5UX2dldF9hZmZpbmVfY29vcmRzX0dGcDsKKysJCU9DU1BfQ1JMSURfbmV3OworKwkJRU5HSU5FX2dldF9mbGFnczsKKysJCU9DU1BfT05FUkVRX2l0OworKwkJVUlfcHJvY2VzczsKKysJCUFTTjFfSU5URUdFUl9pdDsKKysJCUVWUF9DaXBoZXJJbml0X2V4OworKwkJVUlfZ2V0X3N0cmluZ190eXBlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfREg7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0RTQTsKKysJCU9DU1BfT05FUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlibl9kdXBfZXhwYW5kOworKwkJT0NTUF9jZXJ0X2lkX25ldzsKKysJCUJBU0lDX0NPTlNUUkFJTlRTX2l0OworKwkJQk5fbW9kX2FkZF9xdWljazsKKysJCUVDX1BPSU5UX25ldzsKKysJCUVWUF9NRF9DVFhfZGVzdHJveTsKKysJCU9DU1BfUkVTUEJZVEVTX2ZyZWU7CisrCQlFVlBfYWVzXzEyOF9jYmM7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0MV9leHRfZDJpOworKwkJRUNfUE9JTlRfZnJlZTsKKysJCURIX3VwX3JlZjsKKysJCVg1MDlfTkFNRV9FTlRSWV9pdDsKKysJCVVJX2dldF9leF9uZXdfaW5kZXg7CisrCQlCTl9tb2Rfc3ViX3F1aWNrOworKwkJT0NTUF9PTkVSRVFfYWRkX2V4dDsKKysJCU9DU1BfcmVxdWVzdF9zaWduOworKwkJRVZQX0RpZ2VzdEZpbmFsX2V4OworKwkJRU5HSU5FX3NldF9kaWdlc3RzOworKwkJT0NTUF9pZF9pc3N1ZXJfY21wOworKwkJT0JKX05BTUVfZG9fYWxsOworKwkJRUNfUE9JTlRzX211bDsKKysJCUVOR0lORV9yZWdpc3Rlcl9jb21wbGV0ZTsKKysJCVg1MDlWM19FWFRfbmNvbmZfbmlkOworKwkJQVNOMV9TRVFVRU5DRV9pdDsKKysJCVVJX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCVJBTkRfcXVlcnlfZWdkX2J5dGVzOworKwkJVUlfbWV0aG9kX2dldF93cml0ZXI7CisrCQlVSV9PcGVuU1NMOworKwkJUEVNX2RlZl9jYWxsYmFjazsKKysJCUVOR0lORV9jbGVhbnVwOworKwkJRElTVF9QT0lOVF9pdDsKKysJCU9DU1BfU0lOR0xFUkVTUF9pdDsKKysJCWQyaV9LUkI1X1RLVEJPRFk7CisrCQlFQ19QT0lOVF9jbXA7CisrCQlPQ1NQX1JFVk9LRURJTkZPX25ldzsKKysJCWkyZF9PQ1NQX0NFUlRTVEFUVVM7CisrCQlPQ1NQX2Jhc2ljX2FkZDFfbm9uY2U7CisrCQlBU04xX2l0ZW1fZXhfZDJpOworKwkJQk5fbW9kX2xzaGlmdDFfcXVpY2s7CisrCQlVSV9zZXRfbWV0aG9kOworKwkJT0NTUF9pZF9nZXQwX2luZm87CisrCQlCTl9tb2Rfc3FydDsKKysJCUVDX0dST1VQX2NvcHk7CisrCQlLUkI1X0VOQ0RBVEFfZnJlZTsKKysJCV9vc3NsX29sZF9kZXNfY2ZiX2VuY3J5cHQ7CisrCQlPQ1NQX1NJTkdMRVJFU1BfZ2V0X2V4dF9ieV9PQko7CisrCQlPQ1NQX2NlcnRfdG9faWQ7CisrCQlPQ1NQX1JFU1BJRF9uZXc7CisrCQlPQ1NQX1JFU1BEQVRBX2l0OworKwkJZDJpX09DU1BfUkVTUERBVEE7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX2NvbXBsZXRlOworKwkJT0NTUF9jaGVja192YWxpZGl0eTsKKysJCVBLQ1MxMl9CQUdTX2l0OworKwkJT0NTUF91cmxfc3ZjbG9jX25ldzsKKysJCUFTTjFfdGVtcGxhdGVfZnJlZTsKKysJCU9DU1BfU0lOR0xFUkVTUF9hZGRfZXh0OworKwkJS1JCNV9BVVRIRU5UQk9EWV9pdDsKKysJCVg1MDlfc3VwcG9ydGVkX2V4dGVuc2lvbjsKKysJCWkyZF9LUkI1X0FVVEhEQVRBOworKwkJVUlfbWV0aG9kX2dldF9vcGVuZXI7CisrCQlFTkdJTkVfc2V0X2V4X2RhdGE7CisrCQlPQ1NQX1JFUVVFU1RfcHJpbnQ7CisrCQlDQklHTlVNX2l0OworKwkJS1JCNV9USUNLRVRfbmV3OworKwkJS1JCNV9BUFJFUV9uZXc7CisrCQlFQ19HUk9VUF9nZXRfY3VydmVfR0ZwOworKwkJS1JCNV9FTkNLRVlfbmV3OworKwkJQVNOMV90ZW1wbGF0ZV9kMmk7CisrCQlfb3NzbF9vbGRfZGVzX3F1YWRfY2tzdW07CisrCQlPQ1NQX3NpbmdsZV9nZXQwX3N0YXR1czsKKysJCUJOX3N3YXA7CisrCQlQT0xJQ1lJTkZPX2l0OworKwkJRU5HSU5FX3NldF9kZXN0cm95X2Z1bmN0aW9uOworKwkJYXNuMV9lbmNfZnJlZTsKKysJCU9DU1BfUkVTUElEX2l0OworKwkJRUNfR1JPVVBfbmV3OworKwkJRVZQX2Flc18yNTZfY2JjOworKwkJaTJkX0tSQjVfUFJJTkNOQU1FOworKwkJX29zc2xfb2xkX2Rlc19lbmNyeXB0MjsKKysJCV9vc3NsX29sZF9kZXNfZW5jcnlwdDM7CisrCQlQS0NTOF9QUklWX0tFWV9JTkZPX2l0OworKwkJT0NTUF9SRVFJTkZPX2l0OworKwkJUEJFUEFSQU1faXQ7CisrCQlLUkI1X0FVVEhFTlRCT0RZX25ldzsKKysJCVg1MDlfQ1JMX2FkZDBfcmV2b2tlZDsKKysJCUVESVBBUlRZTkFNRV9pdDsKKysJCU5FVFNDQVBFX1NQS0lfaXQ7CisrCQlVSV9nZXQwX3Rlc3Rfc3RyaW5nOworKwkJRU5HSU5FX2dldF9jaXBoZXJfZW5naW5lOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9jaXBoZXJzOworKwkJRUNfUE9JTlRfY29weTsKKysJCUJOX2tyb25lY2tlcjsKKysJCV9vc3NsX29sZF9kZXNfZWRlM19vZmI2NF9lbmNyeXB0OworKwkJX29zc2xfb2Rlc19lZGUzX29mYjY0X2VuY3J5cHQ7CisrCQlVSV9tZXRob2RfZ2V0X3JlYWRlcjsKKysJCU9DU1BfQkFTSUNSRVNQX2dldF9leHRfY291bnQ7CisrCQlBU04xX0VOVU1FUkFURURfaXQ7CisrCQlVSV9zZXRfcmVzdWx0OworKwkJaTJkX0tSQjVfVElDS0VUOworKwkJWDUwOV9wcmludF9leF9mcDsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9wYWRkaW5nOworKwkJZDJpX09DU1BfUkVTUE9OU0U7CisrCQlBU04xX1VUQ1RJTUVfaXQ7CisrCQlfb3NzbF9vbGRfZGVzX2VuY193cml0ZTsKKysJCU9DU1BfUkVTUE9OU0VfbmV3OworKwkJQUVTX3NldF9lbmNyeXB0X2tleTsKKysJCU9DU1BfcmVzcF9jb3VudDsKKysJCUtSQjVfQ0hFQ0tTVU1fbmV3OworKwkJRU5HSU5FX2xvYWRfY3N3aWZ0OworKwkJT0NTUF9vbmVyZXFfZ2V0MF9pZDsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9jaXBoZXJzOworKwkJTk9USUNFUkVGX2l0OworKwkJWDUwOVYzX0VYVF9DUkxfYWRkX25jb25mOworKwkJT0NTUF9SRVZPS0VESU5GT19pdDsKKysJCUFFU19lbmNyeXB0OworKwkJT0NTUF9SRVFVRVNUX25ldzsKKysJCUFTTjFfQU5ZX2l0OworKwkJQ1JZUFRPX2V4X2RhdGFfbmV3X2NsYXNzOworKwkJX29zc2xfb2xkX2Rlc19uY2JjX2VuY3J5cHQ7CisrCQlpMmRfS1JCNV9US1RCT0RZOworKwkJRUNfUE9JTlRfY2xlYXJfZnJlZTsKKysJCUFFU19kZWNyeXB0OworKwkJYXNuMV9lbmNfaW5pdDsKKysJCVVJX2dldF9yZXN1bHRfbWF4c2l6ZTsKKysJCU9DU1BfQ0VSVElEX25ldzsKKysJCUVOR0lORV91bnJlZ2lzdGVyX1JBTkQ7CisrCQlVSV9tZXRob2RfZ2V0X2Nsb3NlcjsKKysJCWQyaV9LUkI1X0VOQ0RBVEE7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2NvdW50OworKwkJT0NTUF9iYXNpY192ZXJpZnk7CisrCQlLUkI1X0FVVEhFTlRCT0RZX2ZyZWU7CisrCQlBU04xX2l0ZW1fZDJpOworKwkJQVNOMV9wcmltaXRpdmVfZnJlZTsKKysJCWkyZF9FWFRFTkRFRF9LRVlfVVNBR0U7CisrCQlpMmRfT0NTUF9TSUdOQVRVUkU7CisrCQlhc24xX2VuY19zYXZlOworKwkJRU5HSU5FX2xvYWRfbnVyb247CisrCQlfb3NzbF9vbGRfZGVzX3BjYmNfZW5jcnlwdDsKKysJCVBLQ1MxMl9NQUNfREFUQV9pdDsKKysJCU9DU1BfYWNjZXB0X3Jlc3BvbnNlc19uZXc7CisrCQlhc24xX2RvX2xvY2s7CisrCQlQS0NTN19BVFRSX1ZFUklGWV9pdDsKKysJCUtSQjVfQVBSRVFCT0RZX2l0OworKwkJaTJkX09DU1BfU0lOR0xFUkVTUDsKKysJCUFTTjFfaXRlbV9leF9uZXc7CisrCQlVSV9hZGRfdmVyaWZ5X3N0cmluZzsKKysJCV9vc3NsX29sZF9kZXNfc2V0X2tleTsKKysJCUtSQjVfUFJJTkNOQU1FX2l0OworKwkJRVZQX0RlY3J5cHRJbml0X2V4OworKwkJaTJkX09DU1BfQ0VSVElEOworKwkJQVNOMV9pdGVtX2QyaV9iaW87CisrCQlFQ19QT0lOVF9kYmw7CisrCQlhc24xX2dldF9jaG9pY2Vfc2VsZWN0b3I7CisrCQlpMmRfS1JCNV9DSEVDS1NVTTsKKysJCUVOR0lORV9zZXRfdGFibGVfZmxhZ3M7CisrCQlBRVNfb3B0aW9uczsKKysJCUVOR0lORV9sb2FkX2NoaWw7CisrCQlPQ1NQX2lkX2NtcDsKKysJCU9DU1BfQkFTSUNSRVNQX25ldzsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X05JRDsKKysJCUtSQjVfQVBSRVFfaXQ7CisrCQlFTkdJTkVfZ2V0X2Rlc3Ryb3lfZnVuY3Rpb247CisrCQlDT05GX3NldF9uY29uZjsKKysJCUFTTjFfUFJJTlRBQkxFX2ZyZWU7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0X2J5X05JRDsKKysJCURJU1RfUE9JTlRfTkFNRV9pdDsKKysJCVg1MDlWM19leHRlbnNpb25zX3ByaW50OworKwkJX29zc2xfb2xkX2Rlc19jZmI2NF9lbmNyeXB0OworKwkJWDUwOV9SRVZPS0VEX2FkZDFfZXh0X2kyZDsKKysJCV9vc3NsX29sZF9kZXNfb2ZiX2VuY3J5cHQ7CisrCQlLUkI1X1RLVEJPRFlfbmV3OworKwkJQVNOMV9PQ1RFVF9TVFJJTkdfaXQ7CisrCQlFUlJfbG9hZF9VSV9zdHJpbmdzOworKwkJaTJkX0tSQjVfRU5DS0VZOworKwkJQVNOMV90ZW1wbGF0ZV9uZXc7CisrCQlPQ1NQX1NJR05BVFVSRV9mcmVlOworKwkJQVNOMV9pdGVtX2kyZF9mcDsKKysJCUtSQjVfUFJJTkNOQU1FX2ZyZWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2l0OworKwkJRVhURU5ERURfS0VZX1VTQUdFX2l0OworKwkJRUNfR0ZwX3NpbXBsZV9tZXRob2Q7CisrCQlFQ19HUk9VUF9wcmVjb21wdXRlX211bHQ7CisrCQlPQ1NQX3JlcXVlc3Rfb25lcmVxX2dldDA7CisrCQlVSV9tZXRob2Rfc2V0X3dyaXRlcjsKKysJCUtSQjVfQVVUSEVOVF9uZXc7CisrCQlYNTA5X0NSTF9JTkZPX2l0OworKwkJRFNPX3NldF9uYW1lX2NvbnZlcnRlcjsKKysJCUFFU19zZXRfZGVjcnlwdF9rZXk7CisrCQlQS0NTN19ESUdFU1RfaXQ7CisrCQlQS0NTMTJfeDUwOTJjZXJ0YmFnOworKwkJRVZQX0RpZ2VzdEluaXRfZXg7CisrCQlpMmFfQUNDRVNTX0RFU0NSSVBUSU9OOworKwkJT0NTUF9SRVNQT05TRV9pdDsKKysJCVBLQ1M3X0VOQ19DT05URU5UX2l0OworKwkJT0NTUF9yZXF1ZXN0X2FkZDBfaWQ7CisrCQlFQ19QT0lOVF9tYWtlX2FmZmluZTsKKysJCURTT19nZXRfZmlsZW5hbWU7CisrCQlPQ1NQX0NFUlRTVEFUVVNfaXQ7CisrCQlPQ1NQX3JlcXVlc3RfYWRkMV9jZXJ0OworKwkJVUlfZ2V0MF9vdXRwdXRfc3RyaW5nOworKwkJVUlfZHVwX3ZlcmlmeV9zdHJpbmc7CisrCQlCTl9tb2RfbHNoaWZ0OworKwkJS1JCNV9BVVRIREFUQV9pdDsKKysJCWFzbjFfc2V0X2Nob2ljZV9zZWxlY3RvcjsKKysJCU9DU1BfYmFzaWNfYWRkMV9zdGF0dXM7CisrCQlPQ1NQX1JFU1BJRF9mcmVlOworKwkJYXNuMV9nZXRfZmllbGRfcHRyOworKwkJVUlfYWRkX2lucHV0X3N0cmluZzsKKysJCU9DU1BfQ1JMSURfaXQ7CisrCQlpMmRfS1JCNV9BVVRIRU5UQk9EWTsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2NvdW50OworKwkJRU5HSU5FX2xvYWRfYXRhbGxhOworKwkJWDUwOV9OQU1FX2l0OworKwkJVVNFUk5PVElDRV9pdDsKKysJCU9DU1BfUkVRSU5GT19uZXc7CisrCQlPQ1NQX0JBU0lDUkVTUF9nZXRfZXh0OworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGxlbWVudGF0aW9uOworKwkJQ1JZUFRPX2dldF9leF9kYXRhX2ltcGw7CisrCQlBU04xX2l0ZW1fcGFjazsKKysJCWkyZF9LUkI1X0VOQ0RBVEE7CisrCQlYNTA5X1BVUlBPU0Vfc2V0OworKwkJWDUwOV9SRVFfSU5GT19pdDsKKysJCVVJX21ldGhvZF9zZXRfb3BlbmVyOworKwkJQVNOMV9pdGVtX2V4X2ZyZWU7CisrCQlBU04xX0JPT0xFQU5faXQ7CisrCQlFTkdJTkVfZ2V0X3RhYmxlX2ZsYWdzOworKwkJVUlfY3JlYXRlX21ldGhvZDsKKysJCU9DU1BfT05FUkVRX2FkZDFfZXh0X2kyZDsKKysJCV9zaGFkb3dfREVTX2NoZWNrX2tleTsKKysJCWQyaV9PQ1NQX1JFUUlORk87CisrCQlVSV9hZGRfaW5mb19zdHJpbmc7CisrCQlVSV9nZXRfcmVzdWx0X21pbnNpemU7CisrCQlBU04xX05VTExfaXQ7CisrCQlCTl9tb2RfbHNoaWZ0MTsKKysJCWQyaV9PQ1NQX09ORVJFUTsKKysJCU9DU1BfT05FUkVRX25ldzsKKysJCUtSQjVfVElDS0VUX2l0OworKwkJRVZQX2Flc18xOTJfY2JjOworKwkJS1JCNV9USUNLRVRfZnJlZTsKKysJCVVJX25ldzsKKysJCU9DU1BfcmVzcG9uc2VfY3JlYXRlOworKwkJX29zc2xfb2xkX2Rlc194Y2JjX2VuY3J5cHQ7CisrCQlQS0NTN19pdDsKKysJCU9DU1BfUkVRVUVTVF9nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJT0NTUF9SRVFVRVNUX2dldF9leHRfYnlfY3JpdDsKKysJCUVOR0lORV9zZXRfZmxhZ3M7CisrCQlfb3NzbF9vbGRfZGVzX2VjYl9lbmNyeXB0OworKwkJT0NTUF9yZXNwb25zZV9nZXQxX2Jhc2ljOworKwkJRVZQX0RpZ2VzdDsKKysJCU9DU1BfT05FUkVRX2RlbGV0ZV9leHQ7CisrCQlBU04xX1RCT09MRUFOX2l0OworKwkJQVNOMV9pdGVtX25ldzsKKysJCUFTTjFfVElNRV90b19nZW5lcmFsaXplZHRpbWU7CisrCQlCSUdOVU1faXQ7CisrCQlBRVNfY2JjX2VuY3J5cHQ7CisrCQlFTkdJTkVfZ2V0X2xvYWRfcHJpdmtleV9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfbG9hZF9wcml2a2V5X2ZuOworKwkJT0NTUF9SRVNQT05TRV9mcmVlOworKwkJVUlfbWV0aG9kX3NldF9yZWFkZXI7CisrCQlpMmRfQVNOMV9UNjFTVFJJTkc7CisrCQlFQ19QT0lOVF9zZXRfdG9faW5maW5pdHk7CisrCQlFUlJfbG9hZF9PQ1NQX3N0cmluZ3M7CisrCQlFQ19QT0lOVF9wb2ludDJvY3Q7CisrCQlLUkI1X0FQUkVRX2ZyZWU7CisrCQlBU04xX09CSkVDVF9pdDsKKysJCU9DU1BfY3JsSURfbmV3OworKwkJT0NTUF9jcmxJRDJfbmV3OworKwkJQ09ORl9tb2R1bGVzX2xvYWRfZmlsZTsKKysJCUNPTkZfaW1vZHVsZV9zZXRfdXNyX2RhdGE7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfc3RyaW5nOworKwkJQ09ORl9tb2R1bGVfZ2V0X3Vzcl9kYXRhOworKwkJQVNOMV9hZGRfb2lkX21vZHVsZTsKKysJCUNPTkZfbW9kdWxlc19maW5pc2g7CisrCQlPUEVOU1NMX2NvbmZpZzsKKysJCUNPTkZfbW9kdWxlc191bmxvYWQ7CisrCQlDT05GX2ltb2R1bGVfZ2V0X3ZhbHVlOworKwkJQ09ORl9tb2R1bGVfc2V0X3Vzcl9kYXRhOworKwkJQ09ORl9wYXJzZV9saXN0OworKwkJQ09ORl9tb2R1bGVfYWRkOworKwkJQ09ORl9nZXQxX2RlZmF1bHRfY29uZmlnX2ZpbGU7CisrCQlDT05GX2ltb2R1bGVfZ2V0X2ZsYWdzOworKwkJQ09ORl9pbW9kdWxlX2dldF9tb2R1bGU7CisrCQlDT05GX21vZHVsZXNfbG9hZDsKKysJCUNPTkZfaW1vZHVsZV9nZXRfbmFtZTsKKysJCUVSUl9wZWVrX3RvcF9lcnJvcjsKKysJCUNPTkZfaW1vZHVsZV9nZXRfdXNyX2RhdGE7CisrCQlDT05GX2ltb2R1bGVfc2V0X2ZsYWdzOworKwkJRU5HSU5FX2FkZF9jb25mX21vZHVsZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZTsKKysJCUVSUl9wZWVrX2xhc3RfZXJyb3JfbGluZV9kYXRhOworKwkJRVJSX3BlZWtfbGFzdF9lcnJvcjsKKysJCURFU19yZWFkXzJwYXNzd29yZHM7CisrCQlERVNfcmVhZF9wYXNzd29yZDsKKysJCVVJX1VUSUxfcmVhZF9wdzsKKysJCVVJX1VUSUxfcmVhZF9wd19zdHJpbmc7CisrCQlFTkdJTkVfbG9hZF9hZXA7CisrCQlFTkdJTkVfbG9hZF9zdXJld2FyZTsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvX25vY29uZjsKKysJCU9QRU5TU0xfYWRkX2FsbF9hbGdvcml0aG1zX2NvbmY7CisrCQlPUEVOU1NMX2FkZF9hbGxfYWxnb19jb25mOworKwkJT1BFTlNTTF9sb2FkX2J1aWx0aW5fbW9kdWxlczsKKysJCUFFU19vZmIxMjhfZW5jcnlwdDsKKysJCUFFU19jdHIxMjhfZW5jcnlwdDsKKysJCUFFU19jZmIxMjhfZW5jcnlwdDsKKysJCUVOR0lORV9sb2FkXzQ3NThjY2E7CisrCQlfb3NzbF8wOTZfZGVzX3JhbmRvbV9zZWVkOworKwkJRVZQX2Flc18yNTZfb2ZiOworKwkJRVZQX2Flc18xOTJfb2ZiOworKwkJRVZQX2Flc18xMjhfY2ZiMTI4OworKwkJRVZQX2Flc18yNTZfY2ZiMTI4OworKwkJRVZQX2Flc18xMjhfb2ZiOworKwkJRVZQX2Flc18xOTJfY2ZiMTI4OworKwkJQ09ORl9tb2R1bGVzX2ZyZWU7CisrCQlOQ09ORl9kZWZhdWx0OworKwkJT1BFTlNTTF9ub19jb25maWc7CisrCQlOQ09ORl9XSU4zMjsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX25ldzsKKysJCUVWUF9kZXNfZWRlX2VjYjsKKysJCWkyZF9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUFTTjFfVU5JVkVSU0FMU1RSSU5HX2ZyZWU7CisrCQlBU04xX1VOSVZFUlNBTFNUUklOR19pdDsKKysJCWQyaV9BU04xX1VOSVZFUlNBTFNUUklORzsKKysJCUVWUF9kZXNfZWRlM19lY2I7CisrCQlYNTA5X1JFUV9wcmludF9leDsKKysJCUVOR0lORV91cF9yZWY7CisrCQlCVUZfTUVNX2dyb3dfY2xlYW47CisrCQlDUllQVE9fcmVhbGxvY19jbGVhbjsKKysJCUJVRl9zdHJsY2F0OworKwkJQklPX2luZGVudDsKKysJCUJVRl9zdHJsY3B5OworKwkJT3BlblNTTERpZTsKKysJCU9QRU5TU0xfY2xlYW5zZTsKKysJCUVOR0lORV9zZXR1cF9ic2RfY3J5cHRvZGV2OworKwkJRVJSX3JlbGVhc2VfZXJyX3N0YXRlX3RhYmxlOworKwkJRVZQX2Flc18xMjhfY2ZiODsKKysJCUZJUFNfY29ycnVwdF9yc2E7CisrCQlGSVBTX3NlbGZ0ZXN0X2RlczsKKysJCUVWUF9hZXNfMTI4X2NmYjE7CisrCQlFVlBfYWVzXzE5Ml9jZmI4OworKwkJRklQU19tb2RlX3NldDsKKysJCUZJUFNfc2VsZnRlc3RfZHNhOworKwkJRVZQX2Flc18yNTZfY2ZiODsKKysJCUZJUFNfYWxsb3dfbWQ1OworKwkJREVTX2VkZTNfY2ZiX2VuY3J5cHQ7CisrCQlFVlBfZGVzX2VkZTNfY2ZiODsKKysJCUZJUFNfcmFuZF9zZWVkZWQ7CisrCQlBRVNfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQUVTX2NmYjhfZW5jcnlwdDsKKysJCUZJUFNfcmFuZF9zZWVkOworKwkJRklQU19jb3JydXB0X2RlczsKKysJCUVWUF9hZXNfMTkyX2NmYjE7CisrCQlGSVBTX3NlbGZ0ZXN0X2FlczsKKysJCUZJUFNfc2V0X3Bybmdfa2V5OworKwkJRVZQX2Rlc19jZmI4OworKwkJRklQU19jb3JydXB0X2RzYTsKKysJCUZJUFNfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX21ldGhvZDsKKysJCUVWUF9hZXNfMjU2X2NmYjE7CisrCQlFUlJfbG9hZF9GSVBTX3N0cmluZ3M7CisrCQlGSVBTX2NvcnJ1cHRfYWVzOworKwkJRklQU19zZWxmdGVzdF9zaGExOworKwkJRklQU19zZWxmdGVzdF9yc2E7CisrCQlGSVBTX2NvcnJ1cHRfc2hhMTsKKysJCUVWUF9kZXNfY2ZiMTsKKysJCUZJUFNfZHNhX2NoZWNrOworKwkJQUVTX2NmYjFfZW5jcnlwdDsKKysJCUVWUF9kZXNfZWRlM19jZmIxOworKwkJRklQU19yYW5kX2NoZWNrOworKwkJRklQU19tZDVfYWxsb3dlZDsKKysJCUZJUFNfbW9kZTsKKysJCUZJUFNfc2VsZnRlc3RfZmFpbGVkOworKwkJc2tfaXNfc29ydGVkOworKwkJWDUwOV9jaGVja19jYTsKKysJCUhNQUNfQ1RYX3NldF9mbGFnczsKKysJCWQyaV9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJUFJPWFlfUE9MSUNZX2l0OworKwkJaTJkX1BST1hZX1BPTElDWTsKKysJCWkyZF9QUk9YWV9DRVJUX0lORk9fRVhURU5TSU9OOworKwkJZDJpX1BST1hZX1BPTElDWTsKKysJCVBST1hZX0NFUlRfSU5GT19FWFRFTlNJT05fbmV3OworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9mcmVlOworKwkJUFJPWFlfQ0VSVF9JTkZPX0VYVEVOU0lPTl9pdDsKKysJCVBST1hZX1BPTElDWV9mcmVlOworKwkJUFJPWFlfUE9MSUNZX25ldzsKKysJCUJOX01PTlRfQ1RYX3NldF9sb2NrZWQ7CisrCQlGSVBTX3NlbGZ0ZXN0X3JuZzsKKysJCUVWUF9zaGEzODQ7CisrCQlFVlBfc2hhNTEyOworKwkJRVZQX3NoYTIyNDsKKysJCUVWUF9zaGEyNTY7CisrCQlGSVBTX3NlbGZ0ZXN0X2htYWM7CisrCQlGSVBTX2NvcnJ1cHRfcm5nOworKwkJQk5fbW9kX2V4cF9tb250X2NvbnN0dGltZTsKKysJCVJTQV9YOTMxX2hhc2hfaWQ7CisrCQlSU0FfcGFkZGluZ19jaGVja19YOTMxOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1M7CisrCQlSU0FfcGFkZGluZ19hZGRfWDkzMTsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9QU1M7CisrCQlQS0NTMV9NR0YxOworKwkJQk5fWDkzMV9nZW5lcmF0ZV9YcHE7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9YOTMxX2Rlcml2ZV9wcmltZTsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWU7CisrCQlSU0FfWDkzMV9kZXJpdmU7CisrCQlCSU9fbmV3X2RncmFtOworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzM4NDsKKysJCUVSUl9zZXRfbWFyazsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldDBfY3JsczsKKysJCUVOR0lORV9zZXRfU1RPUkU7CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNEU0E7CisrCQlTVE9SRV9tZXRoX3NldF9saXN0X3N0YXJ0X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9saXN0X3N0YXJ0X2Z1bmN0aW9uOworKwkJQk5fQkxJTkRJTkdfaW52ZXJ0X2V4OworKwkJTkFNRV9DT05TVFJBSU5UU19mcmVlOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9udW1iZXI7CisrCQlCTl9CTElORElOR19nZXRfdGhyZWFkX2lkOworKwkJWDUwOV9TVE9SRV9DVFhfc2V0MF9wYXJhbTsKKysJCVBPTElDWV9NQVBQSU5HX2l0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfc3RhcnQ7CisrCQlQT0xJQ1lfQ09OU1RSQUlOVFNfZnJlZTsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlCTl9uaXN0X21vZF8xOTI7CisrCQlFQ19HUk9VUF9nZXRfdHJpbm9taWFsX2Jhc2lzOworKwkJU1RPUkVfc2V0X21ldGhvZDsKKysJCUdFTkVSQUxfU1VCVFJFRV9mcmVlOworKwkJTkFNRV9DT05TVFJBSU5UU19pdDsKKysJCUVDREhfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJUEtDUzEyX2FkZF9zYWZlOworKwkJRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lOworKwkJU1RPUkVfbWV0aF9nZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlFTkdJTkVfcmVnaXN0ZXJfRUNESDsKKysJCVNIQTUxMl9VcGRhdGU7CisrCQlpMmRfRUNQcml2YXRlS2V5OworKwkJQk5fZ2V0MF9uaXN0X3ByaW1lXzE5MjsKKysJCVNUT1JFX21vZGlmeV9jZXJ0aWZpY2F0ZTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRpbmF0ZXNfR0YybTsKKysJCUVDX1BPSU5UX3NldF9hZmZpbmVfY29vcmRzX0dGMm07CisrCQlCTl9HRjJtX21vZF9leHBfYXJyOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9udW1iZXI7CisrCQlYNTA5X2tleWlkX2dldDA7CisrCQlFTkdJTkVfbG9hZF9nbXA7CisrCQlwaXRlbV9uZXc7CisrCQlCTl9HRjJtX21vZF9tdWxfYXJyOworKwkJU1RPUkVfbGlzdF9wdWJsaWNfa2V5X2VuZHA7CisrCQlvMmlfRUNQdWJsaWNLZXk7CisrCQlFQ19LRVlfY29weTsKKysJCUJJT19kdW1wX2ZwOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BhcmVudDsKKysJCUVDX0dST1VQX2NoZWNrX2Rpc2NyaW1pbmFudDsKKysJCWkyb19FQ1B1YmxpY0tleTsKKysJCUVDX0tFWV9wcmVjb21wdXRlX211bHQ7CisrCQlhMmlfSVBBRERSRVNTOworKwkJU1RPUkVfbWV0aF9zZXRfaW5pdGlhbGlzZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfaW5pdGlhbGlzZV9mdW5jdGlvbjsKKysJCVg1MDlfU1RPUkVfQ1RYX3NldF9kZXB0aDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX2luaGVyaXQ7CisrCQlFQ19QT0lOVF9wb2ludDJibjsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfZG47CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfcG9saWNpZXM7CisrCQlFQ19HUk9VUF9uZXdfY3VydmVfR0YybTsKKysJCVNUT1JFX2Rlc3Ryb3lfbWV0aG9kOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfU1RPUkU7CisrCQlFVlBfUEtFWV9nZXQxX0VDX0tFWTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX251bWJlcjsKKysJCUVOR0lORV9nZXRfZGVmYXVsdF9FQ0RIOworKwkJRUNfS0VZX2dldF9jb252X2Zvcm07CisrCQlBU04xX09DVEVUX1NUUklOR19OREVGX2l0OworKwkJU1RPUkVfZGVsZXRlX3B1YmxpY19rZXk7CisrCQlTVE9SRV9nZXRfcHVibGljX2tleTsKKysJCVNUT1JFX21vZGlmeV9hcmJpdHJhcnk7CisrCQlFTkdJTkVfZ2V0X3N0YXRpY19zdGF0ZTsKKysJCXBxdWV1ZV9pdGVyYXRvcjsKKysJCUVDRFNBX1NJR19uZXc7CisrCQlPUEVOU1NMX0RJUl9lbmQ7CisrCQlCTl9HRjJtX21vZF9zcXI7CisrCQlFQ19QT0lOVF9ibjJwb2ludDsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldF9kZXB0aDsKKysJCUVDX0tFWV9zZXRfYXNuMV9mbGFnOworKwkJU1RPUkVfZ2V0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfa2V5X21ldGhvZF9kYXRhOworKwkJRUNEU0Ffc2lnbl9leDsKKysJCVNUT1JFX3BhcnNlX2F0dHJzX2VuZDsKKysJCUVDX0dST1VQX2dldF9wb2ludF9jb252ZXJzaW9uX2Zvcm07CisrCQlFQ19HUk9VUF9nZXRfcG9pbnRfY29udl9mb3JtOworKwkJU1RPUkVfbWV0aG9kX3NldF9zdG9yZV9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19pbjsKKysJCVBFTV9yZWFkX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCUVDX0dST1VQX2dldF9wZW50YW5vbWlhbF9iYXNpczsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV90eHQ7CisrCQlCTl9CTElORElOR19zZXRfZmxhZ3M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX3BvbGljaWVzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9uYW1lOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0X3B1cnBvc2U7CisrCQlTVE9SRV9nZXRfbnVtYmVyOworKwkJRUNEU0Ffc2lnbl9zZXR1cDsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWRfYXJyOworKwkJRUNfS0VZX3VwX3JlZjsKKysJCVBPTElDWV9NQVBQSU5HX2ZyZWU7CisrCQlCTl9HRjJtX21vZF9kaXY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3M7CisrCQlFQ19LRVlfZnJlZTsKKysJCVNUT1JFX21ldGhfc2V0X2xpc3RfbmV4dF9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfbGlzdF9uZXh0X2Z1bmN0aW9uOworKwkJUEVNX3dyaXRlX2Jpb19FQ1ByaXZhdGVLZXk7CisrCQlkMmlfRUNfUFVCS0VZOworKwkJU1RPUkVfbWV0aF9nZXRfZ2VuZXJhdGVfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dlbmVyYXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbWV0aF9zZXRfbGlzdF9lbmRfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2xpc3RfZW5kX2Z1bmN0aW9uOworKwkJcHF1ZXVlX3ByaW50OworKwkJRUNfR1JPVVBfaGF2ZV9wcmVjb21wdXRlX211bHQ7CisrCQlFQ19LRVlfcHJpbnRfZnA7CisrCQlCTl9HRjJtX21vZF9hcnI7CisrCQlQRU1fd3JpdGVfYmlvX1g1MDlfQ0VSVF9QQUlSOworKwkJRVZQX1BLRVlfY21wOworKwkJWDUwOV9wb2xpY3lfbGV2ZWxfbm9kZV9jb3VudDsKKysJCVNUT1JFX25ld19lbmdpbmU7CisrCQlTVE9SRV9saXN0X3B1YmxpY19rZXlfc3RhcnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9uZXc7CisrCQlFQ0RIX2dldF9leF9kYXRhOworKwkJRVZQX1BLRVlfZ2V0X2F0dHI7CisrCQlFQ0RTQV9kb19zaWduOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfRUNESDsKKysJCUVDREhfT3BlblNTTDsKKysJCUVDX0tFWV9zZXRfY29udl9mb3JtOworKwkJRUNfUE9JTlRfZHVwOworKwkJR0VORVJBTF9TVUJUUkVFX25ldzsKKysJCVNUT1JFX2xpc3RfY3JsX2VuZHA7CisrCQlFQ19nZXRfYnVpbHRpbl9jdXJ2ZXM7CisrCQlYNTA5X3BvbGljeV9ub2RlX2dldDBfcXVhbGlmaWVyczsKKysJCVg1MDlfcGN5X25vZGVfZ2V0MF9xdWFsaWZpZXJzOworKwkJU1RPUkVfbGlzdF9jcmxfZW5kOworKwkJRVZQX1BLRVlfc2V0MV9FQ19LRVk7CisrCQlCTl9HRjJtX21vZF9zcXJ0X2FycjsKKysJCWkyZF9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnRfZnA7CisrCQlwcXVldWVfZmluZDsKKysJCUVDRFNBX1NJR19mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19FQ1BLUGFyYW1ldGVyczsKKysJCVNUT1JFX21ldGhvZF9zZXRfY3RybF9mdW5jdGlvbjsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9lbmQ7CisrCQlFQ19LRVlfc2V0X3ByaXZhdGVfa2V5OworKwkJcHF1ZXVlX3BlZWs7CisrCQlTVE9SRV9nZXRfYXJiaXRyYXJ5OworKwkJU1RPUkVfc3RvcmVfY3JsOworKwkJWDUwOV9wb2xpY3lfbm9kZV9nZXQwX3BvbGljeTsKKysJCVBLQ1MxMl9hZGRfc2FmZXM7CisrCQlCTl9CTElORElOR19jb252ZXJ0X2V4OworKwkJWDUwOV9wb2xpY3lfdHJlZV9mcmVlOworKwkJT1BFTlNTTF9pYTMyY2FwX2xvYzsKKysJCUJOX0dGMm1fcG9seTJhcnI7CisrCQlTVE9SRV9jdHJsOworKwkJU1RPUkVfQVRUUl9JTkZPX2NvbXBhcmU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjI0OworKwkJaTJkX0VDUGFyYW1ldGVyczsKKysJCWkyZF9FQ1BLUGFyYW1ldGVyczsKKysJCUJOX0dFTkNCX2NhbGw7CisrCQlkMmlfRUNQS1BhcmFtZXRlcnM7CisrCQlTVE9SRV9tZXRoX3NldF9nZW5lcmF0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2VuZXJhdGVfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X0VDREg7CisrCQlOQU1FX0NPTlNUUkFJTlRTX25ldzsKKysJCVNIQTI1Nl9Jbml0OworKwkJRUNfS0VZX2dldDBfcHVibGljX2tleTsKKysJCVBFTV93cml0ZV9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfQVRUUl9JTkZPX3NldF9jc3RyOworKwkJU1RPUkVfbGlzdF9jcmxfbmV4dDsKKysJCVNUT1JFX0FUVFJfSU5GT19pbl9yYW5nZTsKKysJCUVDUGFyYW1ldGVyc19wcmludDsKKysJCVNUT1JFX21ldGhfc2V0X2RlbGV0ZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZGVsZXRlX2Z1bmN0aW9uOworKwkJU1RPUkVfbGlzdF9jZXJ0aWZpY2F0ZV9uZXh0OworKwkJQVNOMV9nZW5lcmF0ZV9uY29uZjsKKysJCUJVRl9tZW1kdXA7CisrCQlCTl9HRjJtX21vZF9tdWw7CisrCQlTVE9SRV9tZXRoX2dldF9saXN0X25leHRfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X2xpc3RfbmV4dF9mdW5jdGlvbjsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX2RuOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9uZXh0OworKwkJRUNfR1JPVVBfc2V0X3NlZWQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdHJ1c3Q7CisrCQlTVE9SRV9BVFRSX0lORk9fZnJlZTsKKysJCVNUT1JFX2dldF9wcml2YXRlX2tleTsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2NvdW50OworKwkJU1RPUkVfQVRUUl9JTkZPX25ldzsKKysJCUVDX0dST1VQX2dldF9jdXJ2ZV9HRjJtOworKwkJU1RPUkVfbWV0aF9zZXRfcmV2b2tlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9yZXZva2VfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9udW1iZXI7CisrCQlCTl9pc19wcmltZV9leDsKKysJCVNUT1JFX3Jldm9rZV9wdWJsaWNfa2V5OworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9wYXJhbTsKKysJCVNUT1JFX2RlbGV0ZV9hcmJpdHJhcnk7CisrCQlQRU1fcmVhZF9YNTA5X0NFUlRfUEFJUjsKKysJCVg1MDlfU1RPUkVfc2V0X2RlcHRoOworKwkJRUNEU0FfZ2V0X2V4X2RhdGE7CisrCQlTSEEyMjQ7CisrCQlCSU9fZHVtcF9pbmRlbnRfZnA7CisrCQlFQ19LRVlfc2V0X2dyb3VwOworKwkJQlVGX3N0cm5kdXA7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX3N0YXJ0OworKwkJQk5fR0YybV9tb2Q7CisrCQlYNTA5X1JFUV9jaGVja19wcml2YXRlX2tleTsKKysJCUVDX0dST1VQX2dldF9zZWVkX2xlbjsKKysJCUVSUl9sb2FkX1NUT1JFX3N0cmluZ3M7CisrCQlQRU1fcmVhZF9iaW9fRUNfUFVCS0VZOworKwkJU1RPUkVfbGlzdF9wcml2YXRlX2tleV9lbmQ7CisrCQlpMmRfRUNfUFVCS0VZOworKwkJRUNEU0FfZ2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQVNOMV9wdXRfZW9jOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0X2V4cGxpY2l0X3BvbGljeTsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldF9leHBsX3BvbGljeTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3RhYmxlX2NsZWFudXA7CisrCQlTVE9SRV9tb2RpZnlfcHJpdmF0ZV9rZXk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9mcmVlOworKwkJRUNfTUVUSE9EX2dldF9maWVsZF90eXBlOworKwkJRUNfR0ZwX25pc3RfbWV0aG9kOworKwkJU1RPUkVfbWV0aF9zZXRfbW9kaWZ5X2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9tb2RpZnlfZnVuY3Rpb247CisrCQlTVE9SRV9wYXJzZV9hdHRyc19uZXh0OworKwkJRU5HSU5FX2xvYWRfcGFkbG9jazsKKysJCUVDX0dST1VQX3NldF9jdXJ2ZV9uYW1lOworKwkJWDUwOV9DRVJUX1BBSVJfaXQ7CisrCQlTVE9SRV9tZXRoX2dldF9yZXZva2VfZm47CisrCQlTVE9SRV9tZXRob2RfZ2V0X3Jldm9rZV9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfZ2V0X2Z1bmN0aW9uOworKwkJU1RPUkVfbW9kaWZ5X251bWJlcjsKKysJCVNUT1JFX21ldGhvZF9nZXRfc3RvcmVfZnVuY3Rpb247CisrCQlTVE9SRV9zdG9yZV9wcml2YXRlX2tleTsKKysJCUJOX0dGMm1fbW9kX3Nxcl9hcnI7CisrCQlSU0Ffc2V0dXBfYmxpbmRpbmc7CisrCQlCSU9fc19kYXRhZ3JhbTsKKysJCVNUT1JFX01lbW9yeTsKKysJCXNrX2ZpbmRfZXg7CisrCQlFQ19HUk9VUF9zZXRfY3VydmVfR0YybTsKKysJCUVOR0lORV9zZXRfZGVmYXVsdF9FQ0RTQTsKKysJCVBPTElDWV9DT05TVFJBSU5UU19uZXc7CisrCQlCTl9HRjJtX21vZF9zcXJ0OworKwkJRUNESF9zZXRfZGVmYXVsdF9tZXRob2Q7CisrCQlFQ19LRVlfZ2VuZXJhdGVfa2V5OworKwkJU0hBMzg0X1VwZGF0ZTsKKysJCUJOX0dGMm1fYXJyMnBvbHk7CisrCQlTVE9SRV9tZXRob2RfZ2V0X2dldF9mdW5jdGlvbjsKKysJCVNUT1JFX21ldGhfc2V0X2NsZWFudXBfZm47CisrCQlTVE9SRV9tZXRob2Rfc2V0X2NsZWFudXBfZnVuY3Rpb247CisrCQlFQ19HUk9VUF9jaGVjazsKKysJCWQyaV9FQ1ByaXZhdGVLZXlfYmlvOworKwkJRUNfS0VZX2luc2VydF9rZXlfbWV0aG9kX2RhdGE7CisrCQlTVE9SRV9tZXRoX2dldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2RlcHRoOworKwkJU0hBMjI0X0ZpbmFsOworKwkJU1RPUkVfbWV0aF9zZXRfdXBkYXRlX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF91cGRhdGVfc3RvcmVfZnVuY3Rpb247CisrCQlTSEEyMjRfVXBkYXRlOworKwkJZDJpX0VDUHJpdmF0ZUtleTsKKysJCUFTTjFfaXRlbV9uZGVmX2kyZDsKKysJCVNUT1JFX2RlbGV0ZV9wcml2YXRlX2tleTsKKysJCUVSUl9wb3BfdG9fbWFyazsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfU1RPUkU7CisrCQlYNTA5X3BvbGljeV9sZXZlbF9nZXQwX25vZGU7CisrCQlpMmRfUEtDUzdfTkRFRjsKKysJCUVDX0dST1VQX2dldF9kZWdyZWU7CisrCQlBU04xX2dlbmVyYXRlX3YzOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9jc3RyOworKwkJWDUwOV9wb2xpY3lfdHJlZV9sZXZlbF9jb3VudDsKKysJCUJOX0dGMm1fYWRkOworKwkJRUNfS0VZX2dldDBfZ3JvdXA7CisrCQlTVE9SRV9nZW5lcmF0ZV9jcmw7CisrCQlTVE9SRV9zdG9yZV9wdWJsaWNfa2V5OworKwkJWDUwOV9DRVJUX1BBSVJfZnJlZTsKKysJCVNUT1JFX3Jldm9rZV9wcml2YXRlX2tleTsKKysJCUJOX25pc3RfbW9kXzIyNDsKKysJCVNIQTUxMl9GaW5hbDsKKysJCVNUT1JFX0FUVFJfSU5GT19tb2RpZnlfZG47CisrCQlTVE9SRV9tZXRoX2dldF9pbml0aWFsaXNlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9pbml0aWFsaXNlX2Z1bmN0aW9uOworKwkJU1RPUkVfZGVsZXRlX251bWJlcjsKKysJCWkyZF9FQ19QVUJLRVlfYmlvOworKwkJQklPX2RncmFtX25vbl9mYXRhbF9lcnJvcjsKKysJCUVDX0dST1VQX2dldF9hc24xX2ZsYWc7CisrCQlTVE9SRV9BVFRSX0lORk9faW5fZXg7CisrCQlTVE9SRV9saXN0X2NybF9zdGFydDsKKysJCUVDREhfZ2V0X2V4X25ld19pbmRleDsKKysJCVNUT1JFX21ldGhfZ2V0X21vZGlmeV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbW9kaWZ5X2Z1bmN0aW9uOworKwkJdjJpX0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX3N0b3JlX2NlcnRpZmljYXRlOworKwkJT0JKX2JzZWFyY2hfZXg7CisrCQlYNTA5X1NUT1JFX0NUWF9zZXRfZGVmYXVsdDsKKysJCVNUT1JFX0FUVFJfSU5GT19zZXRfc2hhMXN0cjsKKysJCUJOX0dGMm1fbW9kX2ludjsKKysJCUJOX0dGMm1fbW9kX2V4cDsKKysJCVNUT1JFX21vZGlmeV9wdWJsaWNfa2V5OworKwkJU1RPUkVfbWV0aF9nZXRfbGlzdF9zdGFydF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfbGlzdF9zdGFydF9mdW5jdGlvbjsKKysJCUVDX0dST1VQX2dldDBfc2VlZDsKKysJCVNUT1JFX3N0b3JlX2FyYml0cmFyeTsKKysJCVNUT1JFX21ldGhfc2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9zZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJQk5fR0YybV9tb2RfZGl2X2FycjsKKysJCUVOR0lORV9zZXRfRUNEU0E7CisrCQlTVE9SRV9jcmVhdGVfbWV0aG9kOworKwkJRUNQS1BhcmFtZXRlcnNfcHJpbnQ7CisrCQlFQ19LRVlfZ2V0MF9wcml2YXRlX2tleTsKKysJCVBFTV93cml0ZV9FQ19QVUJLRVk7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxOworKwkJRUNESF9zZXRfbWV0aG9kOworKwkJdjJpX0dFTkVSQUxfTkFNRV9leDsKKysJCUVDREhfc2V0X2V4X2RhdGE7CisrCQlTVE9SRV9nZW5lcmF0ZV9rZXk7CisrCQlCTl9uaXN0X21vZF81MjE7CisrCQlYNTA5X3BvbGljeV90cmVlX2dldDBfbGV2ZWw7CisrCQlFQ19HUk9VUF9zZXRfcG9pbnRfY29udmVyc2lvbl9mb3JtOworKwkJRUNfR1JPVVBfc2V0X3BvaW50X2NvbnZfZm9ybTsKKysJCVBFTV9yZWFkX0VDX1BVQktFWTsKKysJCWkyZF9FQ0RTQV9TSUc7CisrCQlFQ0RTQV9PcGVuU1NMOworKwkJU1RPUkVfZGVsZXRlX2NybDsKKysJCUVDX0tFWV9nZXRfZW5jX2ZsYWdzOworKwkJQVNOMV9jb25zdF9jaGVja19pbmZpbml0ZV9lbmQ7CisrCQlFVlBfUEtFWV9kZWxldGVfYXR0cjsKKysJCUVDRFNBX3NldF9kZWZhdWx0X21ldGhvZDsKKysJCUVDX1BPSU5UX3NldF9jb21wcmVzc2VkX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9zZXRfY29tcHJfY29vcmRzX0dGMm07CisrCQlFQ19HUk9VUF9jbXA7CisrCQlTVE9SRV9yZXZva2VfY2VydGlmaWNhdGU7CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfMjU2OworKwkJU1RPUkVfbWV0aF9nZXRfZGVsZXRlX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9kZWxldGVfZnVuY3Rpb247CisrCQlTSEEyMjRfSW5pdDsKKysJCVBFTV9yZWFkX0VDUHJpdmF0ZUtleTsKKysJCVNIQTUxMl9Jbml0OworKwkJU1RPUkVfcGFyc2VfYXR0cnNfZW5kcDsKKysJCUJOX3NldF9uZWdhdGl2ZTsKKysJCUVSUl9sb2FkX0VDRFNBX3N0cmluZ3M7CisrCQlFQ19HUk9VUF9nZXRfYmFzaXNfdHlwZTsKKysJCVNUT1JFX2xpc3RfcHVibGljX2tleV9uZXh0OworKwkJaTJ2X0FTTjFfQklUX1NUUklORzsKKysJCVNUT1JFX09CSkVDVF9mcmVlOworKwkJQk5fbmlzdF9tb2RfMzg0OworKwkJaTJkX1g1MDlfQ0VSVF9QQUlSOworKwkJUEVNX3dyaXRlX0VDUEtQYXJhbWV0ZXJzOworKwkJRUNESF9jb21wdXRlX2tleTsKKysJCVNUT1JFX0FUVFJfSU5GT19nZXQwX3NoYTFzdHI7CisrCQlFTkdJTkVfcmVnaXN0ZXJfYWxsX0VDREg7CisrCQlwcXVldWVfcG9wOworKwkJU1RPUkVfQVRUUl9JTkZPX2dldDBfY3N0cjsKKysJCVBPTElDWV9DT05TVFJBSU5UU19pdDsKKysJCVNUT1JFX2dldF9leF9uZXdfaW5kZXg7CisrCQlFVlBfUEtFWV9nZXRfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3BvbGljeTsKKysJCUJOX0dGMm1fbW9kX3NvbHZlX3F1YWQ7CisrCQlTSEEyNTY7CisrCQlpMmRfRUNQcml2YXRlS2V5X2ZwOworKwkJWDUwOV9wb2xpY3lfdHJlZV9nZXQwX3VzZXJfcG9saWNpZXM7CisrCQlYNTA5X3BjeV90cmVlX2dldDBfdXNyX3BvbGljaWVzOworKwkJT1BFTlNTTF9ESVJfcmVhZDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfRUNEU0E7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9sb29rdXA7CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3JkaW5hdGVzX0dGMm07CisrCQlFQ19QT0lOVF9nZXRfYWZmaW5lX2Nvb3Jkc19HRjJtOworKwkJRUNfR1JPVVBfZHVwOworKwkJRU5HSU5FX2dldF9kZWZhdWx0X0VDRFNBOworKwkJRUNfS0VZX25ldzsKKysJCVNIQTI1Nl9UcmFuc2Zvcm07CisrCQlFQ19LRVlfc2V0X2VuY19mbGFnczsKKysJCUVDRFNBX3ZlcmlmeTsKKysJCUVDX1BPSU5UX3BvaW50MmhleDsKKysJCUVOR0lORV9nZXRfU1RPUkU7CisrCQlTSEE1MTI7CisrCQlTVE9SRV9nZXRfY2VydGlmaWNhdGU7CisrCQlFQ0RTQV9kb19zaWduX2V4OworKwkJRUNEU0FfZG9fdmVyaWZ5OworKwkJZDJpX0VDUHJpdmF0ZUtleV9mcDsKKysJCVNUT1JFX2RlbGV0ZV9jZXJ0aWZpY2F0ZTsKKysJCVNIQTUxMl9UcmFuc2Zvcm07CisrCQlYNTA5X1NUT1JFX3NldDFfcGFyYW07CisrCQlTVE9SRV9tZXRob2RfZ2V0X2N0cmxfZnVuY3Rpb247CisrCQlTVE9SRV9mcmVlOworKwkJUEVNX3dyaXRlX0VDUHJpdmF0ZUtleTsKKysJCVNUT1JFX21ldGhfZ2V0X3VubG9ja19zdG9yZV9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfdW5sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJU1RPUkVfZ2V0X2V4X2RhdGE7CisrCQlFQ19LRVlfc2V0X3B1YmxpY19rZXk7CisrCQlQRU1fcmVhZF9FQ1BLUGFyYW1ldGVyczsKKysJCVg1MDlfQ0VSVF9QQUlSX25ldzsKKysJCUVOR0lORV9yZWdpc3Rlcl9TVE9SRTsKKysJCVJTQV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leDsKKysJCUVDUGFyYW1ldGVyc19wcmludF9mcDsKKysJCVg1MDlWM19OQU1FX2Zyb21fc2VjdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cjsKKysJCVNUT1JFX21vZGlmeV9jcmw7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X3N0YXJ0OworKwkJUE9MSUNZX01BUFBJTkdTX2l0OworKwkJR0VORVJBTF9TVUJUUkVFX2l0OworKwkJRUNfR1JPVVBfZ2V0X2N1cnZlX25hbWU7CisrCQlQRU1fd3JpdGVfWDUwOV9DRVJUX1BBSVI7CisrCQlCSU9fZHVtcF9pbmRlbnRfY2I7CisrCQlkMmlfWDUwOV9DRVJUX1BBSVI7CisrCQlTVE9SRV9saXN0X3ByaXZhdGVfa2V5X2VuZHA7CisrCQlhc24xX2NvbnN0X0ZpbmlzaDsKKysJCWkyZF9FQ19QVUJLRVlfZnA7CisrCQlCTl9uaXN0X21vZF8yNTY7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQwX3RhYmxlOworKwkJcHF1ZXVlX2ZyZWU7CisrCQlCTl9CTElORElOR19jcmVhdGVfcGFyYW07CisrCQlFQ0RTQV9zaXplOworKwkJZDJpX0VDX1BVQktFWV9iaW87CisrCQlCTl9nZXQwX25pc3RfcHJpbWVfNTIxOworKwkJU1RPUkVfQVRUUl9JTkZPX21vZGlmeV9zaGExc3RyOworKwkJQk5fZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlFQ19HUk9VUF9uZXdfYnlfY3VydmVfbmFtZTsKKysJCVNIQTI1Nl9GaW5hbDsKKysJCURIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXg7CisrCQlQRU1fcmVhZF9iaW9fRUNQcml2YXRlS2V5OworKwkJU1RPUkVfbWV0aF9nZXRfY2xlYW51cF9mbjsKKysJCVNUT1JFX21ldGhvZF9nZXRfY2xlYW51cF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfRUNESDsKKysJCWQyaV9FQ0RTQV9TSUc7CisrCQlCTl9pc19wcmltZV9mYXN0dGVzdF9leDsKKysJCUVDRFNBX3NpZ247CisrCQlYNTA5X3BvbGljeV9jaGVjazsKKysJCUVWUF9QS0VZX2dldF9hdHRyX2J5X05JRDsKKysJCVNUT1JFX3NldF9leF9kYXRhOworKwkJRU5HSU5FX2dldF9FQ0RTQTsKKysJCUVWUF9lY2RzYTsKKysJCUJOX0JMSU5ESU5HX2dldF9mbGFnczsKKysJCVBLQ1MxMl9hZGRfY2VydDsKKysJCVNUT1JFX09CSkVDVF9uZXc7CisrCQlFUlJfbG9hZF9FQ0RIX3N0cmluZ3M7CisrCQlFQ19LRVlfZHVwOworKwkJRVZQX0NJUEhFUl9DVFhfcmFuZF9rZXk7CisrCQlFQ0RTQV9zZXRfbWV0aG9kOworKwkJYTJpX0lQQUREUkVTU19OQzsKKysJCWQyaV9FQ1BhcmFtZXRlcnM7CisrCQlTVE9SRV9saXN0X2NlcnRpZmljYXRlX2VuZDsKKysJCVNUT1JFX2dldF9jcmw7CisrCQlYNTA5X1BPTElDWV9OT0RFX3ByaW50OworKwkJU0hBMzg0X0luaXQ7CisrCQlFQ19HRjJtX3NpbXBsZV9tZXRob2Q7CisrCQlFQ0RTQV9zZXRfZXhfZGF0YTsKKysJCVNIQTM4NF9GaW5hbDsKKysJCVBLQ1M3X3NldF9kaWdlc3Q7CisrCQlFQ19LRVlfcHJpbnQ7CisrCQlTVE9SRV9tZXRoX3NldF9sb2NrX3N0b3JlX2ZuOworKwkJU1RPUkVfbWV0aG9kX3NldF9sb2NrX3N0b3JlX2Z1bmN0aW9uOworKwkJRUNEU0FfZ2V0X2V4X25ld19pbmRleDsKKysJCVNIQTM4NDsKKysJCVBPTElDWV9NQVBQSU5HX25ldzsKKysJCVNUT1JFX2xpc3RfY2VydGlmaWNhdGVfZW5kcDsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfcG9saWN5X3RyZWU7CisrCQlFQ19HUk9VUF9zZXRfYXNuMV9mbGFnOworKwkJRUNfS0VZX2NoZWNrX2tleTsKKysJCWQyaV9FQ19QVUJLRVlfZnA7CisrCQlQS0NTN19zZXQwX3R5cGVfb3RoZXI7CisrCQlQRU1fcmVhZF9iaW9fWDUwOV9DRVJUX1BBSVI7CisrCQlwcXVldWVfbmV4dDsKKysJCVNUT1JFX21ldGhfZ2V0X2xpc3RfZW5kX2ZuOworKwkJU1RPUkVfbWV0aG9kX2dldF9saXN0X2VuZF9mdW5jdGlvbjsKKysJCUVWUF9QS0VZX2FkZDFfYXR0cl9ieV9PQko7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfdGltZTsKKysJCXBxdWV1ZV9uZXc7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfRUNESDsKKysJCVNUT1JFX25ld19tZXRob2Q7CisrCQlQS0NTMTJfYWRkX2tleTsKKysJCURTT19tZXJnZTsKKysJCUVDX1BPSU5UX2hleDJwb2ludDsKKysJCUJJT19kdW1wX2NiOworKwkJU0hBMjU2X1VwZGF0ZTsKKysJCXBxdWV1ZV9pbnNlcnQ7CisrCQlwaXRlbV9mcmVlOworKwkJQk5fR0YybV9tb2RfaW52X2FycjsKKysJCUVOR0lORV91bnJlZ2lzdGVyX0VDRFNBOworKwkJQk5fQkxJTkRJTkdfc2V0X3RocmVhZF9pZDsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzgxOTI7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFnczsKKysJCWdldF9yZmMyNDA5X3ByaW1lXzEwMjQ7CisrCQlESF9jaGVja19wdWJfa2V5OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMjA0ODsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzYxNDQ7CisrCQlnZXRfcmZjMzUyNl9wcmltZV8xNTM2OworKwkJZ2V0X3JmYzM1MjZfcHJpbWVfMzA3MjsKKysJCWdldF9yZmMzNTI2X3ByaW1lXzQwOTY7CisrCQlnZXRfcmZjMjQwOV9wcmltZV83Njg7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3M7CisrCQlFVlBfQ0lQSEVSX0NUWF9uZXc7CisrCQlFVlBfQ0lQSEVSX0NUWF9mcmVlOworKwkJQ2FtZWxsaWFfY2JjX2VuY3J5cHQ7CisrCQlDYW1lbGxpYV9jZmIxMjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2NmYjhfZW5jcnlwdDsKKysJCUNhbWVsbGlhX2N0cjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfY2Zicl9lbmNyeXB0X2Jsb2NrOworKwkJQ2FtZWxsaWFfZGVjcnlwdDsKKysJCUNhbWVsbGlhX2VjYl9lbmNyeXB0OworKwkJQ2FtZWxsaWFfZW5jcnlwdDsKKysJCUNhbWVsbGlhX29mYjEyOF9lbmNyeXB0OworKwkJQ2FtZWxsaWFfc2V0X2tleTsKKysJCUVWUF9jYW1lbGxpYV8xMjhfY2JjOworKwkJRVZQX2NhbWVsbGlhXzEyOF9jZmIxMjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjE7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2NmYjg7CisrCQlFVlBfY2FtZWxsaWFfMTI4X2VjYjsKKysJCUVWUF9jYW1lbGxpYV8xMjhfb2ZiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9jYmM7CisrCQlFVlBfY2FtZWxsaWFfMTkyX2NmYjEyODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiMTsKKysJCUVWUF9jYW1lbGxpYV8xOTJfY2ZiODsKKysJCUVWUF9jYW1lbGxpYV8xOTJfZWNiOworKwkJRVZQX2NhbWVsbGlhXzE5Ml9vZmI7CisrCQlFVlBfY2FtZWxsaWFfMjU2X2NiYzsKKysJCUVWUF9jYW1lbGxpYV8yNTZfY2ZiMTI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmIxOworKwkJRVZQX2NhbWVsbGlhXzI1Nl9jZmI4OworKwkJRVZQX2NhbWVsbGlhXzI1Nl9lY2I7CisrCQlFVlBfY2FtZWxsaWFfMjU2X29mYjsKKysJCWEyaV9pcGFkZDsKKysJCUFTSWRlbnRpZmllcnNfZnJlZTsKKysJCWkyZF9BU0lkT3JSYW5nZTsKKysJCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZTsKKysJCXYzX2FzaWRfaXNfY2Fub25pY2FsOworKwkJSVBBZGRyZXNzQ2hvaWNlX2ZyZWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9zZXRfYXBwX2RhdGE7CisrCQlCSU9fc2V0X2NhbGxiYWNrX2FyZzsKKysJCXYzX2FkZHJfYWRkX3ByZWZpeDsKKysJCUlQQWRkcmVzc09yUmFuZ2VfaXQ7CisrCQlCSU9fc2V0X2ZsYWdzOworKwkJQVNJZGVudGlmaWVyc19pdDsKKysJCXYzX2FkZHJfZ2V0X3JhbmdlOworKwkJQklPX21ldGhvZF90eXBlOworKwkJdjNfYWRkcl9pbmhlcml0czsKKysJCUlQQWRkcmVzc0Nob2ljZV9pdDsKKysJCUFFU19pZ2VfZW5jcnlwdDsKKysJCXYzX2FkZHJfYWRkX3JhbmdlOworKwkJRVZQX0NJUEhFUl9DVFhfbmlkOworKwkJZDJpX0FTUmFuZ2U7CisrCQl2M19hZGRyX2FkZF9pbmhlcml0OworKwkJdjNfYXNpZF9hZGRfaWRfb3JfcmFuZ2U7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3Jlc291cmNlX3NldDsKKysJCUVWUF9DSVBIRVJfaXZfbGVuZ3RoOworKwkJRVZQX01EX3R5cGU7CisrCQl2M19hc2lkX2Nhbm9uaXplOworKwkJSVBBZGRyZXNzUmFuZ2VfZnJlZTsKKysJCXYzX2FzaWRfYWRkX2luaGVyaXQ7CisrCQlFVlBfQ0lQSEVSX0NUWF9rZXlfbGVuZ3RoOworKwkJSVBBZGRyZXNzUmFuZ2VfbmV3OworKwkJQVNJZE9yUmFuZ2VfbmV3OworKwkJRVZQX01EX3NpemU7CisrCQlFVlBfTURfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlCSU9fY2xlYXJfZmxhZ3M7CisrCQlpMmRfQVNSYW5nZTsKKysJCUlQQWRkcmVzc1JhbmdlX2l0OworKwkJSVBBZGRyZXNzQ2hvaWNlX25ldzsKKysJCUFTSWRlbnRpZmllckNob2ljZV9uZXc7CisrCQlBU1JhbmdlX2ZyZWU7CisrCQlFVlBfTURfcGtleV90eXBlOworKwkJRVZQX01EX0NUWF9jbGVhcl9mbGFnczsKKysJCUlQQWRkcmVzc0ZhbWlseV9mcmVlOworKwkJaTJkX0lQQWRkcmVzc0ZhbWlseTsKKysJCUlQQWRkcmVzc09yUmFuZ2VfbmV3OworKwkJRVZQX0NJUEhFUl9mbGFnczsKKysJCXYzX2FzaWRfdmFsaWRhdGVfcmVzb3VyY2Vfc2V0OworKwkJZDJpX0lQQWRkcmVzc1JhbmdlOworKwkJQUVTX2JpX2lnZV9lbmNyeXB0OworKwkJQklPX2dldF9jYWxsYmFjazsKKysJCUlQQWRkcmVzc09yUmFuZ2VfZnJlZTsKKysJCXYzX2FkZHJfc3Vic2V0OworKwkJZDJpX0lQQWRkcmVzc0ZhbWlseTsKKysJCXYzX2FzaWRfc3Vic2V0OworKwkJQklPX3Rlc3RfZmxhZ3M7CisrCQlpMmRfQVNJZGVudGlmaWVyQ2hvaWNlOworKwkJQVNSYW5nZV9pdDsKKysJCWQyaV9BU0lkZW50aWZpZXJzOworKwkJQVNSYW5nZV9uZXc7CisrCQlkMmlfSVBBZGRyZXNzQ2hvaWNlOworKwkJdjNfYWRkcl9nZXRfYWZpOworKwkJRVZQX0NJUEhFUl9rZXlfbGVuZ3RoOworKwkJRVZQX0NpcGhlcjsKKysJCWkyZF9JUEFkZHJlc3NPclJhbmdlOworKwkJQVNJZE9yUmFuZ2VfaXQ7CisrCQlFVlBfQ0lQSEVSX25pZDsKKysJCWkyZF9JUEFkZHJlc3NDaG9pY2U7CisrCQlFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplOworKwkJQVNJZGVudGlmaWVyc19uZXc7CisrCQl2M19hZGRyX3ZhbGlkYXRlX3BhdGg7CisrCQlJUEFkZHJlc3NGYW1pbHlfbmV3OworKwkJRVZQX01EX0NUWF9zZXRfZmxhZ3M7CisrCQl2M19hZGRyX2lzX2Nhbm9uaWNhbDsKKysJCWkyZF9JUEFkZHJlc3NSYW5nZTsKKysJCUlQQWRkcmVzc0ZhbWlseV9pdDsKKysJCXYzX2FzaWRfaW5oZXJpdHM7CisrCQlFVlBfQ0lQSEVSX0NUWF9jaXBoZXI7CisrCQlFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGE7CisrCQlFVlBfTURfYmxvY2tfc2l6ZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2ZsYWdzOworKwkJdjNfYXNpZF92YWxpZGF0ZV9wYXRoOworKwkJZDJpX0lQQWRkcmVzc09yUmFuZ2U7CisrCQl2M19hZGRyX2Nhbm9uaXplOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2l0OworKwkJRVZQX01EX0NUWF9tZDsKKysJCWQyaV9BU0lkZW50aWZpZXJDaG9pY2U7CisrCQlCSU9fbWV0aG9kX25hbWU7CisrCQlFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGg7CisrCQlBU0lkT3JSYW5nZV9mcmVlOworKwkJQVNJZGVudGlmaWVyQ2hvaWNlX2ZyZWU7CisrCQlCSU9fZ2V0X2NhbGxiYWNrX2FyZzsKKysJCUJJT19zZXRfY2FsbGJhY2s7CisrCQlkMmlfQVNJZE9yUmFuZ2U7CisrCQlpMmRfQVNJZGVudGlmaWVyczsKKysJCVNFRURfZGVjcnlwdDsKKysJCVNFRURfZW5jcnlwdDsKKysJCVNFRURfY2JjX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9vZmI7CisrCQlTRUVEX2NmYjEyOF9lbmNyeXB0OworKwkJU0VFRF9vZmIxMjhfZW5jcnlwdDsKKysJCUVWUF9zZWVkX2NiYzsKKysJCVNFRURfZWNiX2VuY3J5cHQ7CisrCQlFVlBfc2VlZF9lY2I7CisrCQlTRUVEX3NldF9rZXk7CisrCQlFVlBfc2VlZF9jZmIxMjg7CisrCQlYNTA5X0VYVEVOU0lPTlNfaXQ7CisrCQlYNTA5X2dldDFfb2NzcDsKKysJCU9DU1BfUkVRX0NUWF9mcmVlOworKwkJaTJkX1g1MDlfRVhURU5TSU9OUzsKKysJCU9DU1Bfc2VuZHJlcV9uYmlvOworKwkJT0NTUF9zZW5kcmVxX25ldzsKKysJCWQyaV9YNTA5X0VYVEVOU0lPTlM7CisrCQlYNTA5X0FMR09SU19pdDsKKysJCVg1MDlfQUxHT1JfZ2V0MDsKKysJCVg1MDlfQUxHT1Jfc2V0MDsKKysJCUFFU191bndyYXBfa2V5OworKwkJQUVTX3dyYXBfa2V5OworKwkJWDUwOWF0X2dldDBfZGF0YV9ieV9PQko7CisrCQlBU04xX1RZUEVfc2V0MTsKKysJCUFTTjFfU1RSSU5HX3NldDA7CisrCQlpMmRfWDUwOV9BTEdPUlM7CisrCQlCSU9fZl96bGliOworKwkJQ09NUF96bGliX2NsZWFudXA7CisrCQlkMmlfWDUwOV9BTEdPUlM7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfZnJlZTsKKysJCVBFTV93cml0ZV9DTVM7CisrCQlDTVNfYWRkMF9DZXJ0aWZpY2F0ZUNob2ljZXM7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyX2J5X09CSjsKKysJCUVSUl9sb2FkX0NNU19zdHJpbmdzOworKwkJQ01TX3NpZ25fcmVjZWlwdDsKKysJCWkyZF9DTVNfQ29udGVudEluZm87CisrCQlDTVNfc2lnbmVkX2RlbGV0ZV9hdHRyOworKwkJZDJpX0NNU19iaW87CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfTklEOworKwkJQ01TX3ZlcmlmeTsKKysJCVNNSU1FX3JlYWRfQ01TOworKwkJQ01TX2RlY3J5cHRfc2V0MV9rZXk7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX2FsZ3M7CisrCQlDTVNfYWRkMV9jZXJ0OworKwkJQ01TX3NldF9kZXRhY2hlZDsKKysJCUNNU19lbmNyeXB0OworKwkJQ01TX0VudmVsb3BlZERhdGFfY3JlYXRlOworKwkJQ01TX3VuY29tcHJlc3M7CisrCQlDTVNfYWRkMF9jcmw7CisrCQlDTVNfU2lnbmVySW5mb192ZXJpZnlfY29udGVudDsKKysJCUNNU191bnNpZ25lZF9nZXQwX2RhdGFfYnlfT0JKOworKwkJUEVNX3dyaXRlX2Jpb19DTVM7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHI7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rdHJpX2NlcnRfY21wOworKwkJQ01TX1JlY2lwaWVudEluZm9fa3RyaV9nZXQwX2FsZ3M7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9hbGdzOworKwkJQ01TX0NvbnRlbnRJbmZvX2ZyZWU7CisrCQlDTVNfZmluYWw7CisrCQlDTVNfYWRkX3NpbXBsZV9zbWltZWNhcDsKKysJCUNNU19TaWduZXJJbmZvX3ZlcmlmeTsKKysJCUNNU19kYXRhOworKwkJQ01TX0NvbnRlbnRJbmZvX2l0OworKwkJZDJpX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19jb21wcmVzczsKKysJCUNNU19kaWdlc3RfY3JlYXRlOworKwkJQ01TX1NpZ25lckluZm9fY2VydF9jbXA7CisrCQlDTVNfU2lnbmVySW5mb19zaWduOworKwkJQ01TX2RhdGFfY3JlYXRlOworKwkJaTJkX0NNU19iaW87CisrCQlDTVNfRW5jcnlwdGVkRGF0YV9zZXQxX2tleTsKKysJCUNNU19kZWNyeXB0OworKwkJaW50X3NtaW1lX3dyaXRlX0FTTjE7CisrCQlDTVNfdW5zaWduZWRfZGVsZXRlX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfYWRkX3NtaW1lY2FwOworKwkJUEVNX3JlYWRfQ01TOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9PQko7CisrCQlkMmlfQ01TX0NvbnRlbnRJbmZvOworKwkJQ01TX2FkZF9zdGFuZGFyZF9zbWltZWNhcDsKKysJCUNNU19Db250ZW50SW5mb19uZXc7CisrCQlDTVNfUmVjaXBpZW50SW5mb190eXBlOworKwkJQ01TX2dldDBfdHlwZTsKKysJCUNNU19pc19kZXRhY2hlZDsKKysJCUNNU19zaWduOworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHI7CisrCQlDTVNfdW5zaWduZWRfZ2V0X2F0dHJfYnlfT0JKOworKwkJU01JTUVfd3JpdGVfQ01TOworKwkJQ01TX0VuY3J5cHRlZERhdGFfZGVjcnlwdDsKKysJCUNNU19nZXQwX1JlY2lwaWVudEluZm9zOworKwkJQ01TX2FkZDBfUmV2b2NhdGlvbkluZm9DaG9pY2U7CisrCQlDTVNfZGVjcnlwdF9zZXQxX3BrZXk7CisrCQlDTVNfU2lnbmVySW5mb19zZXQxX3NpZ25lcl9jZXJ0OworKwkJQ01TX2dldDBfc2lnbmVyczsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9nZXQwX3ZhbHVlczsKKysJCUNNU19zaWduZWRfZ2V0MF9kYXRhX2J5X09CSjsKKysJCUNNU19nZXQwX1NpZ25lckluZm9zOworKwkJQ01TX2FkZDBfY2VydDsKKysJCUNNU19FbmNyeXB0ZWREYXRhX2VuY3J5cHQ7CisrCQlDTVNfZGlnZXN0X3ZlcmlmeTsKKysJCUNNU19zZXQxX3NpZ25lcnNfY2VydHM7CisrCQlDTVNfc2lnbmVkX2dldF9hdHRyOworKwkJQ01TX1JlY2lwaWVudEluZm9fc2V0MF9rZXk7CisrCQlDTVNfU2lnbmVkRGF0YV9pbml0OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2VrcmlfZ2V0MF9pZDsKKysJCUNNU192ZXJpZnlfcmVjZWlwdDsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9pdDsKKysJCVBFTV9yZWFkX2Jpb19DTVM7CisrCQlDTVNfZ2V0MV9jcmxzOworKwkJQ01TX2FkZDBfcmVjaXBpZW50X2tleTsKKysJCVNNSU1FX3JlYWRfQVNOMTsKKysJCUNNU19SZWNlaXB0UmVxdWVzdF9uZXc7CisrCQlDTVNfZ2V0MF9jb250ZW50OworKwkJQ01TX2dldDFfUmVjZWlwdFJlcXVlc3Q7CisrCQlDTVNfc2lnbmVkX2FkZDFfYXR0cl9ieV9PQko7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rZWtyaV9pZF9jbXA7CisrCQlDTVNfYWRkMV9SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmVyX2lkOworKwkJQ01TX3Vuc2lnbmVkX2FkZDFfYXR0cl9ieV9OSUQ7CisrCQlDTVNfdW5zaWduZWRfYWRkMV9hdHRyOworKwkJQ01TX3NpZ25lZF9nZXRfYXR0cl9ieV9OSUQ7CisrCQlDTVNfZ2V0MV9jZXJ0czsKKysJCUNNU19zaWduZWRfYWRkMV9hdHRyX2J5X05JRDsKKysJCUNNU191bnNpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX2RhdGFGaW5hbDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2t0cmlfZ2V0MF9zaWduZXJfaWQ7CisrCQlDTVNfUmVjaXBJbmZvX2t0cmlfZ2V0MF9zaWdyX2lkOworKwkJaTJkX0NNU19SZWNlaXB0UmVxdWVzdDsKKysJCUNNU19hZGQxX3JlY2lwaWVudF9jZXJ0OworKwkJQ01TX2RhdGFJbml0OworKwkJQ01TX3NpZ25lZF9hZGQxX2F0dHJfYnlfdHh0OworKwkJQ01TX1JlY2lwaWVudEluZm9fZGVjcnlwdDsKKysJCUNNU19zaWduZWRfZ2V0X2F0dHJfY291bnQ7CisrCQlDTVNfZ2V0MF9lQ29udGVudFR5cGU7CisrCQlDTVNfc2V0MV9lQ29udGVudFR5cGU7CisrCQlDTVNfUmVjZWlwdFJlcXVlc3RfY3JlYXRlMDsKKysJCUNNU19hZGQxX3NpZ25lcjsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGtleTsKKysJCUVOR0lORV9zZXRfbG9hZF9zc2xfY2xpZW50X2NlcnRfZnVuY3Rpb247CisrCQlFTkdJTkVfc2V0X2xkX3NzbF9jbG50X2NlcnRfZm47CisrCQlFTkdJTkVfZ2V0X3NzbF9jbGllbnRfY2VydF9mdW5jdGlvbjsKKysJCUVOR0lORV9nZXRfc3NsX2NsaWVudF9jZXJ0X2ZuOworKwkJRU5HSU5FX2xvYWRfc3NsX2NsaWVudF9jZXJ0OworKwkJRU5HSU5FX2xvYWRfY2FwaTsKKysJCU9QRU5TU0xfaXNzZXJ2aWNlOworKwkJRklQU19kc2Ffc2lnX2RlY29kZTsKKysJCUVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzOworKwkJRklQU19yYW5kX3N0YXR1czsKKysJCUZJUFNfcmFuZF9zZXRfa2V5OworKwkJQ1JZUFRPX3NldF9tZW1faW5mb19mdW5jdGlvbnM7CisrCQlSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXg7CisrCQlpbnRfRVJSX3NldF9zdGF0ZV9mdW5jOworKwkJaW50X0VWUF9NRF9zZXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9DUllQVE9fc2V0X2RvX2R5bmxvY2tfY2FsbGJhY2s7CisrCQlGSVBTX3JuZ19zdGljazsKKysJCUVWUF9DSVBIRVJfQ1RYX3NldF9mbGFnczsKKysJCUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXg7CisrCQlGSVBTX3NlbGZ0ZXN0X2NoZWNrOworKwkJRklQU19yYW5kX3NldF9kdDsKKysJCUNSWVBUT19kYmdfcG9wX2luZm87CisrCQlGSVBTX2RzYV9mcmVlOworKwkJUlNBX1g5MzFfZGVyaXZlX2V4OworKwkJRklQU19yc2FfbmV3OworKwkJRklQU19yYW5kX2J5dGVzOworKwkJZmlwc19jaXBoZXJfdGVzdDsKKysJCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3M7CisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQ7CisrCQlDUllQVE9fZGJnX3B1c2hfaW5mbzsKKysJCUZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuOworKwkJRklQU19kaF9uZXc7CisrCQlGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbjsKKysJCUZJUFNfZGhfZnJlZTsKKysJCWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdDsKKysJCUVWUF9hZGRfYWxnX21vZHVsZTsKKysJCWludF9SQU5EX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCWludF9FVlBfQ0lQSEVSX3NldF9lbmdpbmVfY2FsbGJhY2tzOworKwkJaW50X0VWUF9NRF9pbml0X2VuZ2luZV9jYWxsYmFja3M7CisrCQlGSVBTX3JhbmRfdGVzdF9tb2RlOworKwkJRklQU19yYW5kX3Jlc2V0OworKwkJRklQU19kc2FfbmV3OworKwkJaW50X1JBTkRfc2V0X2NhbGxiYWNrczsKKysJCUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4OworKwkJaW50X0VSUl9saWJfaW5pdDsKKysJCWludF9FVlBfQ0lQSEVSX2luaXRfZW5naW5lX2NhbGxiYWNrczsKKysJCUZJUFNfcnNhX2ZyZWU7CisrCQlGSVBTX2RzYV9zaWdfZW5jb2RlOworKwkJQ1JZUFRPX2RiZ19yZW1vdmVfYWxsX2luZm87CisrCQlPUEVOU1NMX2luaXQ7CisrCQlDUllQVE9fc3RyZHVwOworKwkJSlBBS0VfU1RFUDNBX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQMV9yZWxlYXNlOworKwkJSlBBS0VfZ2V0X3NoYXJlZF9rZXk7CisrCQlKUEFLRV9TVEVQM0JfaW5pdDsKKysJCUpQQUtFX1NURVAxX2dlbmVyYXRlOworKwkJSlBBS0VfU1RFUDFfaW5pdDsKKysJCUpQQUtFX1NURVAzQl9wcm9jZXNzOworKwkJSlBBS0VfU1RFUDJfZ2VuZXJhdGU7CisrCQlKUEFLRV9DVFhfbmV3OworKwkJSlBBS0VfQ1RYX2ZyZWU7CisrCQlKUEFLRV9TVEVQM0JfcmVsZWFzZTsKKysJCUpQQUtFX1NURVAzQV9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDJfcHJvY2VzczsKKysJCUpQQUtFX1NURVAzQl9nZW5lcmF0ZTsKKysJCUpQQUtFX1NURVAxX3Byb2Nlc3M7CisrCQlKUEFLRV9TVEVQM0FfZ2VuZXJhdGU7CisrCQlKUEFLRV9TVEVQMl9yZWxlYXNlOworKwkJSlBBS0VfU1RFUDNBX2luaXQ7CisrCQlFUlJfbG9hZF9KUEFLRV9zdHJpbmdzOworKwkJSlBBS0VfU1RFUDJfaW5pdDsKKysJCXBxdWV1ZV9zaXplOworKwkJaTJkX1RTX0FDQ1VSQUNZOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfcHJpbnRfcHVibGljOworKwkJRVZQX1BLRVlfQ1RYX25ldzsKKysJCWkyZF9UU19UU1RfSU5GTzsKKysJCUVWUF9QS0VZX2FzbjFfZmluZDsKKysJCURTT19NRVRIT0RfYmVvczsKKysJCVRTX0NPTkZfbG9hZF9jZXJ0OworKwkJVFNfUkVRX2dldF9leHQ7CisrCQlFVlBfUEtFWV9zaWduX2luaXQ7CisrCQlBU04xX2l0ZW1fcHJpbnQ7CisrCQlUU19UU1RfSU5GT19zZXRfbm9uY2U7CisrCQlUU19SRVNQX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9wa2V5X21ldGhzOworKwkJRVZQX1BLRVlfYXNuMV9hZGQwOworKwkJUEtDUzdfYWRkMF9hdHRyaWJfc2lnbmluZ190aW1lOworKwkJaTJkX1RTX1RTVF9JTkZPX2ZwOworKwkJQklPX2FzbjFfZ2V0X3ByZWZpeDsKKysJCVRTX1RTVF9JTkZPX3NldF90aW1lOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfZGVjcnlwdDsKKysJCUVWUF9QS0VZX3NldF90eXBlX3N0cjsKKysJCUVWUF9QS0VZX0NUWF9nZXRfa2V5Z2VuX2luZm87CisrCQlUU19SRVFfc2V0X3BvbGljeV9pZDsKKysJCWQyaV9UU19SRVNQX2ZwOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aF9lbmdpbmU7CisrCQlFTkdJTkVfZ2V0X3BrZXlfYXNuMV9tZXRoX2VuZzsKKysJCVdISVJMUE9PTF9Jbml0OworKwkJVFNfUkVTUF9zZXRfc3RhdHVzX2luZm87CisrCQlFVlBfUEtFWV9rZXlnZW47CisrCQlFVlBfRGlnZXN0U2lnbkluaXQ7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWlsbGlzOworKwkJVFNfUkVRX2R1cDsKKysJCUdFTkVSQUxfTkFNRV9kdXA7CisrCQlBU04xX1NFUVVFTkNFX0FOWV9pdDsKKysJCVdISVJMUE9PTDsKKysJCVg1MDlfU1RPUkVfZ2V0MV9jcmxzOworKwkJRU5HSU5FX2dldF9wa2V5X2FzbjFfbWV0aDsKKysJCUVWUF9QS0VZX2FzbjFfbmV3OworKwkJQklPX25ld19OREVGOworKwkJRU5HSU5FX2dldF9wa2V5X21ldGg7CisrCQlUU19NU0dfSU1QUklOVF9zZXRfYWxnbzsKKysJCWkyZF9UU19UU1RfSU5GT19iaW87CisrCQlUU19UU1RfSU5GT19zZXRfb3JkZXJpbmc7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X09CSjsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfcG9pbnRlcjsKKysJCVRTX0NPTkZfZ2V0X3RzYV9zZWN0aW9uOworKwkJU01JTUVfd3JpdGVfQVNOMTsKKysJCVRTX1JFU1BfQ1RYX3NldF9zaWduZXJfa2V5OworKwkJRVZQX1BLRVlfZW5jcnlwdF9vbGQ7CisrCQlFVlBfUEtFWV9lbmNyeXB0X2luaXQ7CisrCQlDUllQVE9fVEhSRUFESURfY3B5OworKwkJQVNOMV9QQ1RYX2dldF9jZXJ0X2ZsYWdzOworKwkJaTJkX0VTU19TSUdOSU5HX0NFUlQ7CisrCQlUU19DT05GX2xvYWRfa2V5OworKwkJaTJkX0FTTjFfU0VRVUVOQ0VfQU5ZOworKwkJZDJpX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X3B1YmxpYzsKKysJCWIyaV9QdWJsaWNLZXlfYmlvOworKwkJQklPX2FzbjFfc2V0X3ByZWZpeDsKKysJCUVWUF9QS0VZX25ld19tYWNfa2V5OworKwkJQklPX25ld19DTVM7CisrCQlDUllQVE9fVEhSRUFESURfY21wOworKwkJVFNfUkVRX2V4dF9mcmVlOworKwkJRVZQX1BLRVlfYXNuMV9zZXRfZnJlZTsKKysJCUVWUF9QS0VZX2dldDBfYXNuMTsKKysJCWQyaV9ORVRTQ0FQRV9YNTA5OworKwkJRVZQX1BLRVlfdmVyaWZ5X3JlY292ZXJfaW5pdDsKKysJCUVWUF9QS0VZX0NUWF9zZXRfZGF0YTsKKysJCUVWUF9QS0VZX2tleWdlbl9pbml0OworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X2FsZ287CisrCQlUU19SRVFfcHJpbnRfYmlvOworKwkJRVZQX1BLRVlfQ1RYX2N0cmxfc3RyOworKwkJRVZQX1BLRVlfZ2V0X2RlZmF1bHRfZGlnZXN0X25pZDsKKysJCVBFTV93cml0ZV9iaW9fUEtDUzdfc3RyZWFtOworKwkJVFNfTVNHX0lNUFJJTlRfcHJpbnRfYmlvOworKwkJQk5fYXNjMmJuOworKwkJVFNfUkVRX2dldF9wb2xpY3lfaWQ7CisrCQlFTkdJTkVfc2V0X2RlZmF1bHRfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3NldF9kZWZfcGtleV9hc24xX21ldGhzOworKwkJZDJpX1RTX0FDQ1VSQUNZOworKwkJRFNPX2dsb2JhbF9sb29rdXA7CisrCQlUU19DT05GX3NldF90c2FfbmFtZTsKKysJCWkyZF9BU04xX1NFVF9BTlk7CisrCQlFTkdJTkVfbG9hZF9nb3N0OworKwkJV0hJUkxQT09MX0JpdFVwZGF0ZTsKKysJCUFTTjFfUENUWF9nZXRfZmxhZ3M7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X05JRDsKKysJCVRTX1JFU1BfbmV3OworKwkJRVNTX0NFUlRfSURfZHVwOworKwkJVFNfU1RBVFVTX0lORk9fZHVwOworKwkJVFNfUkVRX2RlbGV0ZV9leHQ7CisrCQlFVlBfRGlnZXN0VmVyaWZ5RmluYWw7CisrCQlFVlBfUEtFWV9wcmludF9wYXJhbXM7CisrCQlpMmRfQ01TX2Jpb19zdHJlYW07CisrCQlUU19SRVFfZ2V0X21zZ19pbXByaW50OworKwkJT0JKX2ZpbmRfc2lnaWRfYnlfYWxnczsKKysJCVRTX1RTVF9JTkZPX2dldF9zZXJpYWw7CisrCQlUU19SRVFfZ2V0X25vbmNlOworKwkJWDUwOV9QVUJLRVlfc2V0MF9wYXJhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXQwX2tleWdlbl9pbmZvOworKwkJRElTVF9QT0lOVF9zZXRfZHBuYW1lOworKwkJaTJkX0lTU1VJTkdfRElTVF9QT0lOVDsKKysJCUFTTjFfU0VUX0FOWV9pdDsKKysJCUVWUF9QS0VZX0NUWF9nZXRfZGF0YTsKKysJCVRTX1NUQVRVU19JTkZPX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX2Rlcml2ZV9pbml0OworKwkJZDJpX1RTX1RTVF9JTkZPOworKwkJRVZQX1BLRVlfYXNuMV9hZGRfYWxpYXM7CisrCQlkMmlfVFNfUkVTUF9iaW87CisrCQlPVEhFUk5BTUVfY21wOworKwkJR0VORVJBTF9OQU1FX3NldDBfdmFsdWU7CisrCQlQS0NTN19SRUNJUF9JTkZPX2dldDBfYWxnOworKwkJVFNfUkVTUF9DVFhfbmV3OworKwkJVFNfUkVTUF9zZXRfdHN0X2luZm87CisrCQlQS0NTN19maW5hbDsKKysJCUVWUF9QS0VZX2Jhc2VfaWQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc2lnbmVyX2NlcnQ7CisrCQlUU19SRVFfc2V0X21zZ19pbXByaW50OworKwkJRVZQX1BLRVlfQ1RYX2N0cmw7CisrCQlUU19DT05GX3NldF9kaWdlc3RzOworKwkJZDJpX1RTX01TR19JTVBSSU5UOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfY3RybDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X05JRDsKKysJCVBLQ1M1X3BiZV9zZXQwX2FsZ29yOworKwkJQk5fQkxJTkRJTkdfdGhyZWFkX2lkOworKwkJVFNfQUNDVVJBQ1lfbmV3OworKwkJWDUwOV9DUkxfTUVUSE9EX2ZyZWU7CisrCQlBU04xX1BDVFhfZ2V0X25tX2ZsYWdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfc2lnbjsKKysJCUNSWVBUT19USFJFQURJRF9jdXJyZW50OworKwkJRVZQX1BLRVlfZGVjcnlwdF9pbml0OworKwkJTkVUU0NBUEVfWDUwOV9mcmVlOworKwkJaTJiX1BWS19iaW87CisrCQlFVlBfUEtFWV9wcmludF9wcml2YXRlOworKwkJR0VORVJBTF9OQU1FX2dldDBfdmFsdWU7CisrCQliMmlfUFZLX2JpbzsKKysJCUFTTjFfVVRDVElNRV9hZGo7CisrCQlUU19UU1RfSU5GT19uZXc7CisrCQlFVlBfTURfZG9fYWxsX3NvcnRlZDsKKysJCVRTX0NPTkZfc2V0X2RlZmF1bHRfZW5naW5lOworKwkJVFNfQUNDVVJBQ1lfc2V0X3NlY29uZHM7CisrCQlUU19UU1RfSU5GT19nZXRfdGltZTsKKysJCVBLQ1M4X3BrZXlfZ2V0MDsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MDsKKysJCU9CSl9hZGRfc2lnaWQ7CisrCQlQS0NTN19TSUdORVJfSU5GT19zaWduOworKwkJRVZQX1BLRVlfcGFyYW1nZW5faW5pdDsKKysJCUVWUF9QS0VZX3NpZ247CisrCQlPQkpfc2lnaWRfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2luaXQ7CisrCQlkMmlfRVNTX0lTU1VFUl9TRVJJQUw7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfbmV3OworKwkJQVNOMV9USU1FX2FkajsKKysJCVRTX09CSl9wcmludF9iaW87CisrCQlFVlBfUEtFWV9tZXRoX3NldF92ZXJpZnlfcmVjb3ZlcjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3ZyZnlfcmVjb3ZlcjsKKysJCVRTX1JFU1BfZ2V0X3N0YXR1c19pbmZvOworKwkJQ01TX3N0cmVhbTsKKysJCUVWUF9QS0VZX0NUWF9zZXRfY2I7CisrCQlQS0NTN190b19UU19UU1RfSU5GTzsKKysJCUFTTjFfUENUWF9nZXRfb2lkX2ZsYWdzOworKwkJVFNfVFNUX0lORk9fYWRkX2V4dDsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2Rlcml2ZTsKKysJCWkyZF9UU19SRVNQX2ZwOworKwkJaTJkX1RTX01TR19JTVBSSU5UX2JpbzsKKysJCVRTX1JFU1BfQ1RYX3NldF9hY2N1cmFjeTsKKysJCVRTX1JFUV9zZXRfbm9uY2U7CisrCQlFU1NfQ0VSVF9JRF9uZXc7CisrCQlFTkdJTkVfcGtleV9hc24xX2ZpbmRfc3RyOworKwkJVFNfUkVRX2dldF9leHRfY291bnQ7CisrCQlCVUZfcmV2ZXJzZTsKKysJCVRTX1RTVF9JTkZPX3ByaW50X2JpbzsKKysJCWQyaV9JU1NVSU5HX0RJU1RfUE9JTlQ7CisrCQlFTkdJTkVfZ2V0X3BrZXlfbWV0aHM7CisrCQlpMmJfUHJpdmF0ZUtleV9iaW87CisrCQlpMmRfVFNfUkVTUDsKKysJCWIyaV9QdWJsaWNLZXk7CisrCQlUU19WRVJJRllfQ1RYX2NsZWFudXA7CisrCQlUU19TVEFUVVNfSU5GT19mcmVlOworKwkJVFNfUkVTUF92ZXJpZnlfdG9rZW47CisrCQlPQkpfYnNlYXJjaF9leF87CisrCQlBU04xX2JuX3ByaW50OworKwkJRVZQX1BLRVlfYXNuMV9nZXRfY291bnQ7CisrCQlFTkdJTkVfcmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJQVNOMV9QQ1RYX3NldF9ubV9mbGFnczsKKysJCUVWUF9EaWdlc3RWZXJpZnlJbml0OworKwkJRU5HSU5FX3NldF9kZWZhdWx0X3BrZXlfbWV0aHM7CisrCQlUU19UU1RfSU5GT19nZXRfcG9saWN5X2lkOworKwkJVFNfUkVRX2dldF9jZXJ0X3JlcTsKKysJCVg1MDlfQ1JMX3NldF9tZXRoX2RhdGE7CisrCQlQS0NTOF9wa2V5X3NldDA7CisrCQlBU04xX1NUUklOR19jb3B5OworKwkJZDJpX1RTX1RTVF9JTkZPX2ZwOworKwkJWDUwOV9DUkxfbWF0Y2g7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wcml2YXRlOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dF9kMmk7CisrCQlUU19SRVNQX0NUWF9hZGRfcG9saWN5OworKwkJZDJpX1RTX1JFU1A7CisrCQlUU19DT05GX2xvYWRfY2VydHM7CisrCQlUU19UU1RfSU5GT19nZXRfbXNnX2ltcHJpbnQ7CisrCQlFUlJfbG9hZF9UU19zdHJpbmdzOworKwkJVFNfVFNUX0lORk9fZ2V0X3ZlcnNpb247CisrCQlFVlBfUEtFWV9DVFhfZHVwOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5OworKwkJaTJiX1B1YmxpY0tleV9iaW87CisrCQlUU19DT05GX3NldF9jZXJ0czsKKysJCUVWUF9QS0VZX2FzbjFfZ2V0MF9pbmZvOworKwkJVFNfVkVSSUZZX0NUWF9mcmVlOworKwkJVFNfUkVRX2dldF9leHRfYnlfY3JpdGljYWw7CisrCQlUU19SRVNQX0NUWF9zZXRfc2VyaWFsX2NiOworKwkJWDUwOV9DUkxfZ2V0X21ldGhfZGF0YTsKKysJCVRTX1JFU1BfQ1RYX3NldF90aW1lX2NiOworKwkJVFNfTVNHX0lNUFJJTlRfZ2V0X21zZzsKKysJCVRTX1RTVF9JTkZPX2V4dF9mcmVlOworKwkJVFNfUkVRX2dldF92ZXJzaW9uOworKwkJVFNfUkVRX2FkZF9leHQ7CisrCQlFVlBfUEtFWV9DVFhfc2V0X2FwcF9kYXRhOworKwkJT0JKX2JzZWFyY2hfOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfdmVyaWZ5Y3R4OworKwkJaTJkX1BLQ1M3X2Jpb19zdHJlYW07CisrCQlDUllQVE9fVEhSRUFESURfc2V0X251bWVyaWM7CisrCQlQS0NTN19zaWduX2FkZF9zaWduZXI7CisrCQlkMmlfVFNfVFNUX0lORk9fYmlvOworKwkJVFNfVFNUX0lORk9fZ2V0X29yZGVyaW5nOworKwkJVFNfUkVTUF9wcmludF9iaW87CisrCQlUU19UU1RfSU5GT19nZXRfZXh0czsKKysJCUhNQUNfQ1RYX2NvcHk7CisrCQlQS0NTNV9wYmUyX3NldF9pdjsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhzOworKwkJYjJpX1ByaXZhdGVLZXk7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X2FwcF9kYXRhOworKwkJVFNfUkVRX3NldF9jZXJ0X3JlcTsKKysJCUNSWVBUT19USFJFQURJRF9zZXRfY2FsbGJhY2s7CisrCQlUU19DT05GX3NldF9zZXJpYWw7CisrCQlUU19UU1RfSU5GT19mcmVlOworKwkJZDJpX1RTX1JFUV9mcDsKKysJCVRTX1JFU1BfdmVyaWZ5X3Jlc3BvbnNlOworKwkJaTJkX0VTU19JU1NVRVJfU0VSSUFMOworKwkJVFNfQUNDVVJBQ1lfZ2V0X3NlY29uZHM7CisrCQlFVlBfQ0lQSEVSX2RvX2FsbDsKKysJCWIyaV9Qcml2YXRlS2V5X2JpbzsKKysJCU9DU1BfQ0VSVElEX2R1cDsKKysJCVg1MDlfUFVCS0VZX2dldDBfcGFyYW07CisrCQlUU19NU0dfSU1QUklOVF9kdXA7CisrCQlQS0NTN19wcmludF9jdHg7CisrCQlpMmRfVFNfUkVRX2JpbzsKKysJCUVWUF93aGlybHBvb2w7CisrCQlFVlBfUEtFWV9hc24xX3NldF9wYXJhbTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2VuY3J5cHQ7CisrCQlBU04xX1BDVFhfc2V0X2ZsYWdzOworKwkJaTJkX0VTU19DRVJUX0lEOworKwkJVFNfVkVSSUZZX0NUWF9uZXc7CisrCQlUU19SRVNQX0NUWF9zZXRfZXh0ZW5zaW9uX2NiOworKwkJRU5HSU5FX3JlZ2lzdGVyX2FsbF9wa2V5X21ldGhzOworKwkJVFNfUkVTUF9DVFhfc2V0X3N0YXR1c19pbmZvX2NvbmQ7CisrCQlUU19SRVNQX0NUWF9zZXRfc3RhdF9pbmZvX2NvbmQ7CisrCQlFVlBfUEtFWV92ZXJpZnk7CisrCQlXSElSTFBPT0xfRmluYWw7CisrCQlYNTA5X0NSTF9NRVRIT0RfbmV3OworKwkJRVZQX0RpZ2VzdFNpZ25GaW5hbDsKKysJCVRTX1JFU1BfQ1RYX3NldF9kZWZfcG9saWN5OworKwkJTkVUU0NBUEVfWDUwOV9pdDsKKysJCVRTX1JFU1BfY3JlYXRlX3Jlc3BvbnNlOworKwkJUEtDUzdfU0lHTkVSX0lORk9fZ2V0MF9hbGdzOworKwkJVFNfVFNUX0lORk9fZ2V0X25vbmNlOworKwkJRVZQX1BLRVlfZGVjcnlwdF9vbGQ7CisrCQlUU19UU1RfSU5GT19zZXRfcG9saWN5X2lkOworKwkJVFNfQ09ORl9zZXRfZXNzX2NlcnRfaWRfY2hhaW47CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wa2V5OworKwkJZDJpX1RTX1JFUTsKKysJCUVWUF9QS0VZX2FzbjFfZmluZF9zdHI7CisrCQlCSU9fZl9hc24xOworKwkJRVNTX1NJR05JTkdfQ0VSVF9uZXc7CisrCQlFVlBfUEJFX2ZpbmQ7CisrCQlYNTA5X0NSTF9nZXQwX2J5X2NlcnQ7CisrCQlFVlBfUEtFWV9kZXJpdmU7CisrCQlpMmRfVFNfUkVROworKwkJVFNfVFNUX0lORk9fZGVsZXRlX2V4dDsKKysJCUVTU19JU1NVRVJfU0VSSUFMX2ZyZWU7CisrCQlBU04xX1BDVFhfc2V0X3N0cl9mbGFnczsKKysJCUVOR0lORV9nZXRfcGtleV9hc24xX21ldGhfc3RyOworKwkJVFNfQ09ORl9zZXRfc2lnbmVyX2tleTsKKysJCVRTX0FDQ1VSQUNZX2dldF9taWxsaXM7CisrCQlUU19SRVNQX2dldF90b2tlbjsKKysJCVRTX0FDQ1VSQUNZX2R1cDsKKysJCUVOR0lORV9yZWdpc3Rlcl9hbGxfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3JlZ19hbGxfcGtleV9hc24xX21ldGhzOworKwkJWDUwOV9DUkxfc2V0X2RlZmF1bHRfbWV0aG9kOworKwkJQ1JZUFRPX1RIUkVBRElEX2hhc2g7CisrCQlDTVNfQ29udGVudEluZm9fcHJpbnRfY3R4OworKwkJVFNfUkVTUF9mcmVlOworKwkJSVNTVUlOR19ESVNUX1BPSU5UX2ZyZWU7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9uZXc7CisrCQlDTVNfYWRkMV9jcmw7CisrCQlQS0NTN19hZGQxX2F0dHJpYl9kaWdlc3Q7CisrCQlUU19SRVNQX0NUWF9hZGRfbWQ7CisrCQlUU19UU1RfSU5GT19kdXA7CisrCQlFTkdJTkVfc2V0X3BrZXlfYXNuMV9tZXRoczsKKysJCVBFTV93cml0ZV9iaW9fUGFyYW1ldGVyczsKKysJCVRTX1RTVF9JTkZPX2dldF9hY2N1cmFjeTsKKysJCVg1MDlfQ1JMX2dldDBfYnlfc2VyaWFsOworKwkJVFNfVFNUX0lORk9fc2V0X3ZlcnNpb247CisrCQlUU19SRVNQX0NUWF9nZXRfdHN0X2luZm87CisrCQlUU19SRVNQX3ZlcmlmeV9zaWduYXR1cmU7CisrCQlDUllQVE9fVEhSRUFESURfZ2V0X2NhbGxiYWNrOworKwkJVFNfVFNUX0lORk9fZ2V0X3RzYTsKKysJCVRTX1NUQVRVU19JTkZPX25ldzsKKysJCUVWUF9QS0VZX0NUWF9nZXRfY2I7CisrCQlUU19SRVFfZ2V0X2V4dF9kMmk7CisrCQlHRU5FUkFMX05BTUVfc2V0MF9vdGhlcm5hbWU7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2NvdW50OworKwkJVFNfUkVTUF9DVFhfZ2V0X3JlcXVlc3Q7CisrCQlpMmRfTkVUU0NBUEVfWDUwOTsKKysJCUVOR0lORV9nZXRfcGtleV9tZXRoX2VuZ2luZTsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3NpZ25jdHg7CisrCQlFVlBfUEtFWV9hc24xX2NvcHk7CisrCQlBU04xX1RZUEVfY21wOworKwkJRVZQX0NJUEhFUl9kb19hbGxfc29ydGVkOworKwkJRVZQX1BLRVlfQ1RYX2ZyZWU7CisrCQlJU1NVSU5HX0RJU1RfUE9JTlRfaXQ7CisrCQlkMmlfVFNfTVNHX0lNUFJJTlRfZnA7CisrCQlYNTA5X1NUT1JFX2dldDFfY2VydHM7CisrCQlFVlBfUEtFWV9DVFhfZ2V0X29wZXJhdGlvbjsKKysJCWQyaV9FU1NfU0lHTklOR19DRVJUOworKwkJVFNfQ09ORl9zZXRfb3JkZXJpbmc7CisrCQlFVlBfUEJFX2FsZ19hZGRfdHlwZTsKKysJCVRTX1JFUV9zZXRfdmVyc2lvbjsKKysJCUVWUF9QS0VZX2dldDA7CisrCQlCSU9fYXNuMV9zZXRfc3VmZml4OworKwkJaTJkX1RTX1NUQVRVU19JTkZPOworKwkJRVZQX01EX2RvX2FsbDsKKysJCVRTX1RTVF9JTkZPX3NldF9hY2N1cmFjeTsKKysJCVBLQ1M3X2FkZF9hdHRyaWJfY29udGVudF90eXBlOworKwkJRVJSX3JlbW92ZV90aHJlYWRfc3RhdGU7CisrCQlFVlBfUEtFWV9tZXRoX2FkZDA7CisrCQlUU19UU1RfSU5GT19zZXRfdHNhOworKwkJRVZQX1BLRVlfbWV0aF9uZXc7CisrCQlXSElSTFBPT0xfVXBkYXRlOworKwkJVFNfQ09ORl9zZXRfYWNjdXJhY3k7CisrCQlBU04xX1BDVFhfc2V0X29pZF9mbGFnczsKKysJCUVTU19TSUdOSU5HX0NFUlRfZHVwOworKwkJZDJpX1RTX1JFUV9iaW87CisrCQlYNTA5X3RpbWVfYWRqX2V4OworKwkJVFNfUkVTUF9DVFhfYWRkX2ZsYWdzOworKwkJZDJpX1RTX1NUQVRVU19JTkZPOworKwkJVFNfTVNHX0lNUFJJTlRfc2V0X21zZzsKKysJCUJJT19hc24xX2dldF9zdWZmaXg7CisrCQlUU19SRVFfZnJlZTsKKysJCUVWUF9QS0VZX21ldGhfZnJlZTsKKysJCVRTX1JFUV9nZXRfZXh0czsKKysJCVRTX1JFU1BfQ1RYX3NldF9jbG9ja19wcmVjaXNpb25fZGlnaXRzOworKwkJVFNfUkVTUF9DVFhfc2V0X2Nsa19wcmVjX2RpZ2l0czsKKysJCVRTX1JFU1BfQ1RYX2FkZF9mYWlsdXJlX2luZm87CisrCQlpMmRfVFNfUkVTUF9iaW87CisrCQlFVlBfUEtFWV9DVFhfZ2V0MF9wZWVya2V5OworKwkJUEVNX3dyaXRlX2Jpb19DTVNfc3RyZWFtOworKwkJVFNfUkVRX25ldzsKKysJCVRTX01TR19JTVBSSU5UX25ldzsKKysJCUVWUF9QS0VZX21ldGhfZmluZDsKKysJCUVWUF9QS0VZX2lkOworKwkJVFNfVFNUX0lORk9fc2V0X3NlcmlhbDsKKysJCWEyaV9HRU5FUkFMX05BTUU7CisrCQlUU19DT05GX3NldF9jcnlwdG9fZGV2aWNlOworKwkJRVZQX1BLRVlfdmVyaWZ5X2luaXQ7CisrCQlUU19DT05GX3NldF9wb2xpY2llczsKKysJCUFTTjFfUENUWF9uZXc7CisrCQlFU1NfQ0VSVF9JRF9mcmVlOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9tZXRoczsKKysJCVRTX01TR19JTVBSSU5UX2ZyZWU7CisrCQlUU19WRVJJRllfQ1RYX2luaXQ7CisrCQlQS0NTN19zdHJlYW07CisrCQlUU19SRVNQX0NUWF9zZXRfY2VydHM7CisrCQlUU19DT05GX3NldF9kZWZfcG9saWN5OworKwkJQVNOMV9HRU5FUkFMSVpFRFRJTUVfYWRqOworKwkJTkVUU0NBUEVfWDUwOV9uZXc7CisrCQlUU19BQ0NVUkFDWV9mcmVlOworKwkJVFNfUkVTUF9nZXRfdHN0X2luZm87CisrCQlFVlBfUEtFWV9kZXJpdmVfc2V0X3BlZXI7CisrCQlQRU1fcmVhZF9iaW9fUGFyYW1ldGVyczsKKysJCVRTX0NPTkZfc2V0X2Nsb2NrX3ByZWNpc2lvbl9kaWdpdHM7CisrCQlUU19DT05GX3NldF9jbGtfcHJlY19kaWdpdHM7CisrCQlFU1NfSVNTVUVSX1NFUklBTF9kdXA7CisrCQlUU19BQ0NVUkFDWV9nZXRfbWljcm9zOworKwkJQVNOMV9QQ1RYX2dldF9zdHJfZmxhZ3M7CisrCQlOQU1FX0NPTlNUUkFJTlRTX2NoZWNrOworKwkJQVNOMV9CSVRfU1RSSU5HX2NoZWNrOworKwkJWDUwOV9jaGVja19ha2lkOworKwkJRU5HSU5FX3VucmVnaXN0ZXJfcGtleV9hc24xX21ldGhzOworKwkJRU5HSU5FX3VucmVnX3BrZXlfYXNuMV9tZXRoczsKKysJCUFTTjFfUENUWF9mcmVlOworKwkJUEVNX3dyaXRlX2Jpb19BU04xX3N0cmVhbTsKKysJCWkyZF9BU04xX2Jpb19zdHJlYW07CisrCQlUU19YNTA5X0FMR09SX3ByaW50X2JpbzsKKysJCUVWUF9QS0VZX21ldGhfc2V0X2NsZWFudXA7CisrCQlFVlBfUEtFWV9hc24xX2ZyZWU7CisrCQlFU1NfU0lHTklOR19DRVJUX2ZyZWU7CisrCQlUU19UU1RfSU5GT19zZXRfbXNnX2ltcHJpbnQ7CisrCQlHRU5FUkFMX05BTUVfY21wOworKwkJZDJpX0FTTjFfU0VUX0FOWTsKKysJCUVOR0lORV9zZXRfcGtleV9tZXRoczsKKysJCWkyZF9UU19SRVFfZnA7CisrCQlkMmlfQVNOMV9TRVFVRU5DRV9BTlk7CisrCQlHRU5FUkFMX05BTUVfZ2V0MF9vdGhlck5hbWU7CisrCQlkMmlfRVNTX0NFUlRfSUQ7CisrCQlPQkpfZmluZF9zaWdpZF9hbGdzOworKwkJRVZQX1BLRVlfbWV0aF9zZXRfa2V5Z2VuOworKwkJUEtDUzVfUEJLREYyX0hNQUM7CisrCQlFVlBfUEtFWV9wYXJhbWdlbjsKKysJCUVWUF9QS0VZX21ldGhfc2V0X3BhcmFtZ2VuOworKwkJQklPX25ld19QS0NTNzsKKysJCUVWUF9QS0VZX3ZlcmlmeV9yZWNvdmVyOworKwkJVFNfZXh0X3ByaW50X2JpbzsKKysJCVRTX0FTTjFfSU5URUdFUl9wcmludF9iaW87CisrCQljaGVja19kZWZlcjsKKysJCURTT19wYXRoYnlhZGRyOworKwkJRVZQX1BLRVlfc2V0X3R5cGU7CisrCQlUU19BQ0NVUkFDWV9zZXRfbWljcm9zOworKwkJVFNfUkVRX3RvX1RTX1ZFUklGWV9DVFg7CisrCQlFVlBfUEtFWV9tZXRoX3NldF9jb3B5OworKwkJQVNOMV9QQ1RYX3NldF9jZXJ0X2ZsYWdzOworKwkJVFNfVFNUX0lORk9fZ2V0X2V4dDsKKysJCUVWUF9QS0VZX2FzbjFfc2V0X2N0cmw7CisrCQlUU19UU1RfSU5GT19nZXRfZXh0X2J5X2NyaXRpY2FsOworKwkJRVZQX1BLRVlfQ1RYX25ld19pZDsKKysJCVRTX1JFUV9nZXRfZXh0X2J5X09CSjsKKysJCVRTX0NPTkZfc2V0X3NpZ25lcl9jZXJ0OworKwkJWDUwOV9OQU1FX2hhc2hfb2xkOworKwkJQVNOMV9USU1FX3NldF9zdHJpbmc7CisrCQlFVlBfTURfZmxhZ3M7CisrCQlUU19SRVNQX0NUWF9mcmVlOworKwkJRFNBcGFyYW1zX2R1cDsKKysJCURIcGFyYW1zX2R1cDsKKysJCU9DU1BfUkVRX0NUWF9hZGQxX2hlYWRlcjsKKysJCU9DU1BfUkVRX0NUWF9zZXQxX3JlcTsKKysJCVg1MDlfU1RPUkVfc2V0X3ZlcmlmeV9jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfY3VycmVudF9jcmw7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX3BhcmVudF9jdHg7CisrCQlYNTA5X1NUT1JFX0NUWF9nZXQwX2N1cnJlbnRfaXNzdWVyOworKwkJWDUwOV9TVE9SRV9DVFhfZ2V0MF9jdXJfaXNzdWVyOworKwkJWDUwOV9pc3N1ZXJfbmFtZV9oYXNoX29sZDsKKysJCVg1MDlfc3ViamVjdF9uYW1lX2hhc2hfb2xkOworKwkJRVZQX0NJUEhFUl9DVFhfY29weTsKKysJCVVJX21ldGhvZF9nZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX2dldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCVVJX21ldGhvZF9zZXRfcHJvbXB0X2NvbnN0cnVjdG9yOworKwkJVUlfbWV0aG9kX3NldF9wcm9tcHRfY29uc3RydWN0cjsKKysJCUVWUF9yZWFkX3B3X3N0cmluZ19taW47CisrCQlDUllQVE9fY3RzMTI4X2VuY3J5cHQ7CisrCQlDUllQVE9fY3RzMTI4X2RlY3J5cHRfYmxvY2s7CisrCQlDUllQVE9fY2ZiMTI4XzFfZW5jcnlwdDsKKysJCUNSWVBUT19jYmMxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19vZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19jYmMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfZW5jcnlwdDsKKysJCUNSWVBUT19jZmIxMjhfOF9lbmNyeXB0OworKworKwlsb2NhbDoKKysJCSo7CisrfTsKKysKKysKKytPUEVOU1NMXzEuMC4xIHsKKysJZ2xvYmFsOgorKwkJU1NMX3JlbmVnb3RpYXRlX2FiYnJldmlhdGVkOworKwkJVExTdjFfMV9tZXRob2Q7CisrCQlUTFN2MV8xX2NsaWVudF9tZXRob2Q7CisrCQlUTFN2MV8xX3NlcnZlcl9tZXRob2Q7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2xpZW50X3B3ZF9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF9jbGllbnRfcHdkX2NiOworKwkJU1NMX2dldF9zcnBfZzsKKysJCVNTTF9DVFhfc2V0X3NycF91c2VybmFtZV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF91bl9jYjsKKysJCVNTTF9nZXRfc3JwX3VzZXJpbmZvOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtOworKwkJU1NMX3NldF9zcnBfc2VydmVyX3BhcmFtX3B3OworKwkJU1NMX2dldF9zcnBfTjsKKysJCVNTTF9nZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9zZXRfc3JwX3Bhc3N3b3JkOworKwkJU1NMX0NUWF9zZXRfc3JwX3N0cmVuZ3RoOworKwkJU1NMX0NUWF9zZXRfc3JwX3ZlcmlmeV9wYXJhbV9jYWxsYmFjazsKKysJCVNTTF9DVFhfc2V0X3NycF92ZnlfcGFyYW1fY2I7CisrCQlTU0xfQ1RYX3NldF9zcnBfY2JfYXJnOworKwkJU1NMX0NUWF9zZXRfc3JwX3VzZXJuYW1lOworKwkJU1NMX0NUWF9TUlBfQ1RYX2luaXQ7CisrCQlTU0xfU1JQX0NUWF9pbml0OworKwkJU1JQX0NhbGNfQV9wYXJhbTsKKysJCVNSUF9nZW5lcmF0ZV9zZXJ2ZXJfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fc2VydmVyX21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfQ1RYX1NSUF9DVFhfZnJlZTsKKysJCVNSUF9nZW5lcmF0ZV9jbGllbnRfbWFzdGVyX3NlY3JldDsKKysJCVNSUF9nZW5fY2xpZW50X21hc3Rlcl9zZWNyZXQ7CisrCQlTU0xfc3JwX3NlcnZlcl9wYXJhbV93aXRoX3VzZXJuYW1lOworKwkJU1NMX3NycF9zZXJ2ZXJfcGFyYW1fd2l0aF91bjsKKysJCVNTTF9TUlBfQ1RYX2ZyZWU7CisrCQlTU0xfc2V0X2RlYnVnOworKwkJU1NMX1NFU1NJT05fZ2V0MF9wZWVyOworKwkJVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJU1NMX1NFU1NJT05fc2V0MV9pZF9jb250ZXh0OworKwkJVExTdjFfMl9zZXJ2ZXJfbWV0aG9kOworKwkJU1NMX2NhY2hlX2hpdDsKKysJCVNTTF9nZXQwX2tzc2xfY3R4OworKwkJU1NMX3NldDBfa3NzbF9jdHg7CisrCQlTU0xfc2V0X3N0YXRlOworKwkJU1NMX0NJUEhFUl9nZXRfaWQ7CisrCQlUTFN2MV8yX21ldGhvZDsKKysJCWtzc2xfY3R4X2dldDBfY2xpZW50X3ByaW5jOworKwkJU1NMX2V4cG9ydF9rZXlpbmdfbWF0ZXJpYWw7CisrCQlTU0xfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9zX2FkdmVydGlzZWRfY2I7CisrCQlTU0xfQ1RYX3NldF9uZXh0X3Byb3Rvc19hZHZfY2I7CisrCQlTU0xfZ2V0MF9uZXh0X3Byb3RvX25lZ290aWF0ZWQ7CisrCQlTU0xfZ2V0X3NlbGVjdGVkX3NydHBfcHJvZmlsZTsKKysJCVNTTF9DVFhfc2V0X3Rsc2V4dF91c2Vfc3J0cDsKKysJCVNTTF9zZWxlY3RfbmV4dF9wcm90bzsKKysJCVNTTF9nZXRfc3J0cF9wcm9maWxlczsKKysJCVNTTF9DVFhfc2V0X25leHRfcHJvdG9fc2VsZWN0X2NiOworKwkJU1NMX0NUWF9zZXRfbmV4dF9wcm90b19zZWxfY2I7CisrCQlTU0xfU0VTU0lPTl9nZXRfY29tcHJlc3NfaWQ7CisrCisrCQlTUlBfVkJBU0VfZ2V0X2J5X3VzZXI7CisrCQlTUlBfQ2FsY19zZXJ2ZXJfa2V5OworKwkJU1JQX2NyZWF0ZV92ZXJpZmllcjsKKysJCVNSUF9jcmVhdGVfdmVyaWZpZXJfQk47CisrCQlTUlBfQ2FsY191OworKwkJU1JQX1ZCQVNFX2ZyZWU7CisrCQlTUlBfQ2FsY19jbGllbnRfa2V5OworKwkJU1JQX2dldF9kZWZhdWx0X2dOOworKwkJU1JQX0NhbGNfeDsKKysJCVNSUF9DYWxjX0I7CisrCQlTUlBfVkJBU0VfbmV3OworKwkJU1JQX2NoZWNrX2tub3duX2dOX3BhcmFtOworKwkJU1JQX0NhbGNfQTsKKysJCVNSUF9WZXJpZnlfQV9tb2RfTjsKKysJCVNSUF9WQkFTRV9pbml0OworKwkJU1JQX1ZlcmlmeV9CX21vZF9OOworKwkJRUNfS0VZX3NldF9wdWJsaWNfa2V5X2FmZmluZV9jb29yZGluYXRlczsKKysJCUVDX0tFWV9zZXRfcHViX2tleV9hZmZfY29vcmRzOworKwkJRVZQX2Flc18xOTJfY3RyOworKwkJRVZQX1BLRVlfbWV0aF9nZXQwX2luZm87CisrCQlFVlBfUEtFWV9tZXRoX2NvcHk7CisrCQlFUlJfYWRkX2Vycm9yX3ZkYXRhOworKwkJRVZQX2Flc18xMjhfY3RyOworKwkJRVZQX2Flc18yNTZfY3RyOworKwkJRUNfR0ZwX25pc3RwMjI0X21ldGhvZDsKKysJCUVDX0tFWV9nZXRfZmxhZ3M7CisrCQlSU0FfcGFkZGluZ19hZGRfUEtDUzFfUFNTX21nZjE7CisrCQlFVlBfYWVzXzEyOF94dHM7CisrCQlFVlBfYWVzXzI1Nl94dHM7CisrCQlFVlBfYWVzXzEyOF9nY207CisrCQlFQ19LRVlfY2xlYXJfZmxhZ3M7CisrCQlFQ19LRVlfc2V0X2ZsYWdzOworKwkJRVZQX2Flc18yNTZfY2NtOworKwkJUlNBX3ZlcmlmeV9QS0NTMV9QU1NfbWdmMTsKKysJCUVWUF9hZXNfMTI4X2NjbTsKKysJCUVWUF9hZXNfMTkyX2djbTsKKysJCVg1MDlfQUxHT1Jfc2V0X21kOworKwkJUkFORF9pbml0X2ZpcHM7CisrCQlFVlBfYWVzXzI1Nl9nY207CisrCQlFVlBfYWVzXzE5Ml9jY207CisrCQlDTUFDX0NUWF9jb3B5OworKwkJQ01BQ19DVFhfZnJlZTsKKysJCUNNQUNfQ1RYX2dldDBfY2lwaGVyX2N0eDsKKysJCUNNQUNfQ1RYX2NsZWFudXA7CisrCQlDTUFDX0luaXQ7CisrCQlDTUFDX1VwZGF0ZTsKKysJCUNNQUNfcmVzdW1lOworKwkJQ01BQ19DVFhfbmV3OworKwkJQ01BQ19GaW5hbDsKKysJCUNSWVBUT19jdHIxMjhfZW5jcnlwdF9jdHIzMjsKKysJCUNSWVBUT19nY20xMjhfcmVsZWFzZTsKKysJCUNSWVBUT19jY20xMjhfZGVjcnlwdF9jY202NDsKKysJCUNSWVBUT19jY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT19nY20xMjhfZW5jcnlwdDsKKysJCUNSWVBUT194dHMxMjhfZW5jcnlwdDsKKysJCUVWUF9yYzRfaG1hY19tZDU7CisrCQlDUllQVE9fbmlzdGN0czEyOF9kZWNyeXB0X2Jsb2NrOworKwkJQ1JZUFRPX2djbTEyOF9zZXRpdjsKKysJCUNSWVBUT19uaXN0Y3RzMTI4X2VuY3J5cHQ7CisrCQlFVlBfYWVzXzEyOF9jYmNfaG1hY19zaGExOworKwkJQ1JZUFRPX2djbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2VuY3J5cHRfY2NtNjQ7CisrCQlFTkdJTkVfbG9hZF9yZHJhbmQ7CisrCQlDUllQVE9fY2NtMTI4X3NldGl2OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZW5jcnlwdF9ibG9jazsKKysJCUNSWVBUT19nY20xMjhfYWFkOworKwkJQ1JZUFRPX2NjbTEyOF9pbml0OworKwkJQ1JZUFRPX25pc3RjdHMxMjhfZGVjcnlwdDsKKysJCUNSWVBUT19nY20xMjhfbmV3OworKwkJQ1JZUFRPX2NjbTEyOF90YWc7CisrCQlDUllQVE9fY2NtMTI4X2RlY3J5cHQ7CisrCQlDUllQVE9fY2NtMTI4X2FhZDsKKysJCUNSWVBUT19nY20xMjhfaW5pdDsKKysJCUNSWVBUT19nY20xMjhfZGVjcnlwdDsKKysJCUVOR0lORV9sb2FkX3JzYXg7CisrCQlDUllQVE9fZ2NtMTI4X2RlY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2VuY3J5cHRfY3RyMzI7CisrCQlDUllQVE9fZ2NtMTI4X2ZpbmlzaDsKKysJCUVWUF9hZXNfMjU2X2NiY19obWFjX3NoYTE7CisrCQlQS0NTNV9wYmtkZjJfc2V0OworKwkJQ01TX2FkZDBfcmVjaXBpZW50X3Bhc3N3b3JkOworKwkJQ01TX2RlY3J5cHRfc2V0MV9wYXNzd29yZDsKKysJCUNNU19SZWNpcGllbnRJbmZvX3NldDBfcGFzc3dvcmQ7CisrCQlSQU5EX3NldF9maXBzX2RyYmdfdHlwZTsKKysJCVg1MDlfUkVRX3NpZ25fY3R4OworKwkJUlNBX1BTU19QQVJBTVNfbmV3OworKwkJWDUwOV9DUkxfc2lnbl9jdHg7CisrCQlYNTA5X3NpZ25hdHVyZV9kdW1wOworKwkJZDJpX1JTQV9QU1NfUEFSQU1TOworKwkJUlNBX1BTU19QQVJBTVNfaXQ7CisrCQlSU0FfUFNTX1BBUkFNU19mcmVlOworKwkJWDUwOV9zaWduX2N0eDsKKysJCWkyZF9SU0FfUFNTX1BBUkFNUzsKKysJCUFTTjFfaXRlbV9zaWduX2N0eDsKKysJCUVDX0dGcF9uaXN0cDUyMV9tZXRob2Q7CisrCQlFQ19HRnBfbmlzdHAyNTZfbWV0aG9kOworKwkJT1BFTlNTTF9zdGRlcnI7CisrCQlPUEVOU1NMX2NwdWlkX3NldHVwOworKwkJT1BFTlNTTF9zaG93ZmF0YWw7CisrCQlCSU9fbmV3X2RncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1fc2N0cF9tc2dfd2FpdGluZzsKKysJCUJJT19kZ3JhbV9zY3RwX3dhaXRfZm9yX2RyeTsKKysJCUJJT19zX2RhdGFncmFtX3NjdHA7CisrCQlCSU9fZGdyYW1faXNfc2N0cDsKKysJCUJJT19kZ3JhbV9zY3RwX25vdGlmaWNhdGlvbl9jYjsKKyt9IE9QRU5TU0xfMS4wLjA7CisrCisrT1BFTlNTTF8xLjAuMWQgeworKwlnbG9iYWw6CisrCQlDUllQVE9fbWVtY21wOworK30gT1BFTlNTTF8xLjAuMTsKKysKKytPUEVOU1NMXzEuMC4yIHsKKysJZ2xvYmFsOgorKwkJU1NMX0NUWF9zZXRfYWxwbl9wcm90b3M7CisrCQlTU0xfc2V0X2FscG5fcHJvdG9zOworKwkJU1NMX0NUWF9zZXRfYWxwbl9zZWxlY3RfY2I7CisrCQlTU0xfZ2V0MF9hbHBuX3NlbGVjdGVkOworKwkJU1NMX0NUWF9zZXRfY3VzdG9tX2NsaV9leHQ7CisrCQlTU0xfQ1RYX3NldF9jdXN0b21fc3J2X2V4dDsKKysJCVNTTF9DVFhfc2V0X3Nydl9zdXBwX2RhdGE7CisrCQlTU0xfQ1RYX3NldF9jbGlfc3VwcF9kYXRhOworKwkJU1NMX3NldF9jZXJ0X2NiOworKwkJU1NMX0NUWF91c2Vfc2VydmVyaW5mbzsKKysJCVNTTF9DVFhfdXNlX3NlcnZlcmluZm9fZmlsZTsKKysJCVNTTF9DVFhfc2V0X2NlcnRfY2I7CisrCQlTU0xfQ1RYX2dldDBfcGFyYW07CisrCQlTU0xfZ2V0MF9wYXJhbTsKKysJCVNTTF9jZXJ0c19jbGVhcjsKKysJCURUTFN2MV8yX21ldGhvZDsKKysJCURUTFN2MV8yX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTdjFfMl9jbGllbnRfbWV0aG9kOworKwkJRFRMU19tZXRob2Q7CisrCQlEVExTX3NlcnZlcl9tZXRob2Q7CisrCQlEVExTX2NsaWVudF9tZXRob2Q7CisrCQlTU0xfQ1RYX2dldF9zc2xfbWV0aG9kOworKwkJU1NMX0NUWF9nZXQwX2NlcnRpZmljYXRlOworKwkJU1NMX0NUWF9nZXQwX3ByaXZhdGVrZXk7CisrCQlTU0xfQ09NUF9zZXQwX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ09NUF9mcmVlX2NvbXByZXNzaW9uX21ldGhvZHM7CisrCQlTU0xfQ0lQSEVSX2ZpbmQ7CisrCQlTU0xfaXNfc2VydmVyOworKwkJU1NMX0NPTkZfQ1RYX25ldzsKKysJCVNTTF9DT05GX0NUWF9maW5pc2g7CisrCQlTU0xfQ09ORl9DVFhfZnJlZTsKKysJCVNTTF9DT05GX0NUWF9zZXRfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfY2xlYXJfZmxhZ3M7CisrCQlTU0xfQ09ORl9DVFhfc2V0MV9wcmVmaXg7CisrCQlTU0xfQ09ORl9DVFhfc2V0X3NzbDsKKysJCVNTTF9DT05GX0NUWF9zZXRfc3NsX2N0eDsKKysJCVNTTF9DT05GX2NtZDsKKysJCVNTTF9DT05GX2NtZF9hcmd2OworKwkJU1NMX0NPTkZfY21kX3ZhbHVlX3R5cGU7CisrCQlTU0xfdHJhY2U7CisrCQlTU0xfQ0lQSEVSX3N0YW5kYXJkX25hbWU7CisrCQlTU0xfZ2V0X3Rsc2FfcmVjb3JkX2J5bmFtZTsKKysJCUFTTjFfVElNRV9kaWZmOworKwkJQklPX2hleF9zdHJpbmc7CisrCQlDTVNfUmVjaXBpZW50SW5mb19nZXQwX3BrZXlfY3R4OworKwkJQ01TX1JlY2lwaWVudEluZm9fZW5jcnlwdDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfcGtleV9jdHg7CisrCQlDTVNfU2lnbmVySW5mb19nZXQwX21kX2N0eDsKKysJCUNNU19TaWduZXJJbmZvX2dldDBfc2lnbmF0dXJlOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2FsZzsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZ2V0MF9yZWtzOworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX29yaWdfaWQ7CisrCQlDTVNfUmVjaXBpZW50SW5mb19rYXJpX29yaWdfaWRfY21wOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9nZXQwX2lkOworKwkJQ01TX1JlY2lwaWVudEVuY3J5cHRlZEtleV9jZXJ0X2NtcDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfc2V0MF9wa2V5OworKwkJQ01TX1JlY2lwaWVudEluZm9fa2FyaV9nZXQwX2N0eDsKKysJCUNNU19SZWNpcGllbnRJbmZvX2thcmlfZGVjcnlwdDsKKysJCUNNU19TaGFyZWRJbmZvX2VuY29kZTsKKysJCURIX2NvbXB1dGVfa2V5X3BhZGRlZDsKKysJCWQyaV9ESHhwYXJhbXM7CisrCQlpMmRfREh4cGFyYW1zOworKwkJREhfZ2V0XzEwMjRfMTYwOworKwkJREhfZ2V0XzIwNDhfMjI0OworKwkJREhfZ2V0XzIwNDhfMjU2OworKwkJREhfS0RGX1g5XzQyOworKwkJRUNESF9LREZfWDlfNjI7CisrCQlFQ0RTQV9NRVRIT0RfbmV3OworKwkJRUNEU0FfTUVUSE9EX2ZyZWU7CisrCQlFQ0RTQV9NRVRIT0Rfc2V0X2FwcF9kYXRhOworKwkJRUNEU0FfTUVUSE9EX2dldF9hcHBfZGF0YTsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbjsKKysJCUVDRFNBX01FVEhPRF9zZXRfc2lnbl9zZXR1cDsKKysJCUVDRFNBX01FVEhPRF9zZXRfdmVyaWZ5OworKwkJRUNEU0FfTUVUSE9EX3NldF9mbGFnczsKKysJCUVDRFNBX01FVEhPRF9zZXRfbmFtZTsKKysJCUVWUF9kZXNfZWRlM193cmFwOworKwkJRVZQX2Flc18xMjhfd3JhcDsKKysJCUVWUF9hZXNfMTkyX3dyYXA7CisrCQlFVlBfYWVzXzI1Nl93cmFwOworKwkJRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMjU2OworKwkJRVZQX2Flc18yNTZfY2JjX2htYWNfc2hhMjU2OworKwkJQ1JZUFRPXzEyOF93cmFwOworKwkJQ1JZUFRPXzEyOF91bndyYXA7CisrCQlPQ1NQX1JFUV9DVFhfbmJpbzsKKysJCU9DU1BfUkVRX0NUWF9uZXc7CisrCQlPQ1NQX3NldF9tYXhfcmVzcG9uc2VfbGVuZ3RoOworKwkJT0NTUF9SRVFfQ1RYX2kyZDsKKysJCU9DU1BfUkVRX0NUWF9uYmlvX2QyaTsKKysJCU9DU1BfUkVRX0NUWF9nZXQwX21lbV9iaW87CisrCQlPQ1NQX1JFUV9DVFhfaHR0cDsKKysJCVJTQV9wYWRkaW5nX2FkZF9QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfcGFkZGluZ19jaGVja19QS0NTMV9PQUVQX21nZjE7CisrCQlSU0FfT0FFUF9QQVJBTVNfZnJlZTsKKysJCVJTQV9PQUVQX1BBUkFNU19pdDsKKysJCVJTQV9PQUVQX1BBUkFNU19uZXc7CisrCQlTU0xfZ2V0X3NpZ2FsZ3M7CisrCQlTU0xfZ2V0X3NoYXJlZF9zaWdhbGdzOworKwkJU1NMX2NoZWNrX2NoYWluOworKwkJWDUwOV9jaGFpbl91cF9yZWY7CisrCQlYNTA5X2h0dHBfbmJpbzsKKysJCVg1MDlfQ1JMX2h0dHBfbmJpbzsKKysJCVg1MDlfUkVWT0tFRF9kdXA7CisrCQlpMmRfcmVfWDUwOV90YnM7CisrCQlYNTA5X2dldDBfc2lnbmF0dXJlOworKwkJWDUwOV9nZXRfc2lnbmF0dXJlX25pZDsKKysJCVg1MDlfQ1JMX2RpZmY7CisrCQlYNTA5X2NoYWluX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfQ1JMX2NoZWNrX3N1aXRlYjsKKysJCVg1MDlfY2hlY2tfaG9zdDsKKysJCVg1MDlfY2hlY2tfZW1haWw7CisrCQlYNTA5X2NoZWNrX2lwOworKwkJWDUwOV9jaGVja19pcF9hc2M7CisrCQlYNTA5X1NUT1JFX3NldF9sb29rdXBfY3Jsc19jYjsKKysJCVg1MDlfU1RPUkVfQ1RYX2dldDBfc3RvcmU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9hZGQxX2hvc3Q7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXRfaG9zdGZsYWdzOworKwkJWDUwOV9WRVJJRllfUEFSQU1fZ2V0MF9wZWVybmFtZTsKKysJCVg1MDlfVkVSSUZZX1BBUkFNX3NldDFfZW1haWw7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2lwOworKwkJWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9pcF9hc2M7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwX25hbWU7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXRfY291bnQ7CisrCQlYNTA5X1ZFUklGWV9QQVJBTV9nZXQwOworKwkJWDUwOVYzX0VYVF9mcmVlOworKwkJRUNfR1JPVVBfZ2V0X21vbnRfZGF0YTsKKysJCUVDX2N1cnZlX25pZDJuaXN0OworKwkJRUNfY3VydmVfbmlzdDJuaWQ7CisrCQlQRU1fd3JpdGVfYmlvX0RIeHBhcmFtczsKKysJCVBFTV93cml0ZV9ESHhwYXJhbXM7CisrCQlTU0xfQ1RYX2FkZF9jbGllbnRfY3VzdG9tX2V4dDsKKysJCVNTTF9DVFhfYWRkX3NlcnZlcl9jdXN0b21fZXh0OworKwkJU1NMX2V4dGVuc2lvbl9zdXBwb3J0ZWQ7CisrCQlCVUZfc3RybmxlbjsKKysJCXNrX2RlZXBfY29weTsKKysJCVNTTF90ZXN0X2Z1bmN0aW9uczsKKyt9IE9QRU5TU0xfMS4wLjFkOworKworSW5kZXg6IG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvb3BlbnNzbC5sZAkyMDE0LTAyLTI0IDIxOjAyOjMwLjAwMDAwMDAwMCArMDEwMAorQEAgLTAsMCArMSwxMCBAQAorK09QRU5TU0xfMS4wLjAgeworKwlnbG9iYWw6CisrCQliaW5kX2VuZ2luZTsKKysJCXZfY2hlY2s7CisrCQlPUEVOU1NMX2luaXQ7CisrCQlPUEVOU1NMX2ZpbmlzaDsKKysJbG9jYWw6CisrCQkqOworK307CisrCitJbmRleDogb3BlbnNzbC0xLjAuMn5iZXRhMS5vYnNvbGV0ZS4wLjA0OTg0MzY1MTU0OTA1NzUvZW5naW5lcy9jY2dvc3Qvb3BlbnNzbC5sZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEub2Jzb2xldGUuMC4wNDk4NDM2NTE1NDkwNTc1L2VuZ2luZXMvY2Nnb3N0L29wZW5zc2wubGQJMjAxNC0wMi0yNCAyMTowMjozMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTAgQEAKKytPUEVOU1NMXzEuMC4wIHsKKysJZ2xvYmFsOgorKwkJYmluZF9lbmdpbmU7CisrCQl2X2NoZWNrOworKwkJT1BFTlNTTF9pbml0OworKwkJT1BFTlNTTF9maW5pc2g7CisrCWxvY2FsOgorKwkJKjsKKyt9OworKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9kZWJpYW4xLjAuMi9ibG9ja19kaWdpY2VydF9tYWxheXNpYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNiY2QxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaWNlcnRfbWFsYXlzaWEucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbTogUmFwaGFlbCBHZWlzc2VydCA8Z2Vpc3NlcnRAZGViaWFuLm9yZz4KK0Rlc2NyaXB0aW9uOiBtYWtlIFg1MDlfdmVyaWZ5X2NlcnQgaW5kaWNhdGUgdGhhdCBhbnkgY2VydGlmaWNhdGUgd2hvc2UKKyBuYW1lIGNvbnRhaW5zICJEaWdpY2VydCBTZG4uIEJoZC4iIChmcm9tIE1hbGF5c2lhKSBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMTEtMDUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZGViaWFuXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yfmJldGExL2NyeXB0by94NTA5L3g1MDlfdmZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yfmJldGExLm9yaWcvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4ODAyODg0NCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJ+YmV0YTEvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDE0LTAyLTI1IDAwOjE2OjEyLjQ4NDAyODkyOSArMDEwMAorQEAgLTk2NCwxMCArOTY0LDExIEBACisgCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisgCQl7CisgCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKy0JCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKy0JCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCS8qIE1hcmsgY2VydGlmaWNhdGVzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBuYW1lcyBhcworKwkJICogcmV2b2tlZCwgbm8gbWF0dGVyIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKyAJCSAqLworLQkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCWlmICh4LT5uYW1lICYmIChzdHJzdHIoeC0+bmFtZSwgIkRpZ2lOb3RhciIpIHx8CisrCQkJc3Ryc3RyKHgtPm5hbWUsICJEaWdpY2VydCBTZG4uIEJoZC4iKSkpCisgCQkJeworIAkJCWN0eC0+ZXJyb3IgPSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDsKKyAJCQljdHgtPmVycm9yX2RlcHRoID0gaTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2lub3Rhci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzFhMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZGViaWFuMS4wLjIvYmxvY2tfZGlnaW5vdGFyLnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb206IFJhcGhhZWwgR2Vpc3NlcnQgPGdlaXNzZXJ0QGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogbWFrZSBYNTA5X3ZlcmlmeV9jZXJ0IGluZGljYXRlIHRoYXQgYW55IGNlcnRpZmljYXRlIHdob3NlCisgbmFtZSBjb250YWlucyAiRGlnaU5vdGFyIiBpcyByZXZva2VkLgorRm9yd2FyZGVkOiBub3QtbmVlZGVkCitPcmlnaW46IHZlbmRvcgorTGFzdC1VcGRhdGU6IDIwMTEtMDktMDgKK0J1ZzogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy82Mzk3NDQKK1Jldmlld2VkLWJ5OiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitSZXZpZXdlZC1ieTogRHIgU3RlcGhlbiBOIEhlbnNvbiA8c2hlbnNvbkBkcmgtY29uc3VsdGFuY3kuY28udWs+CisKK1RoaXMgaXMgbm90IG1lYW50IGFzIGZpbmFsIHBhdGNoLiAgCisgCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL3g1MDkveDUwOV92ZnkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8veDUwOS94NTA5X3ZmeS5jCitAQCAtMTE5LDYgKzExOSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfdHJ1c3QoWDUwOV9TVE9SRV9DVFggKmMKKyBzdGF0aWMgaW50IGNoZWNrX3Jldm9jYXRpb24oWDUwOV9TVE9SRV9DVFggKmN0eCk7Cisgc3RhdGljIGludCBjaGVja19jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIHN0YXRpYyBpbnQgY2hlY2tfcG9saWN5KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpOworIAorIHN0YXRpYyBpbnQgZ2V0X2NybF9zY29yZShYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5ICoqcGlzc3VlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpwcmVhc29ucywgWDUwOV9DUkwgKmNybCwgWDUwOSAqeCk7CitAQCAtNDM4LDYgKzQzOSw5IEBAIGludCBYNTA5X3ZlcmlmeV9jZXJ0KFg1MDlfU1RPUkVfQ1RYICpjdHgKKyAgICAgaWYgKCFvaykKKyAgICAgICAgIGdvdG8gZW5kOworIAorKwlvayA9IGNoZWNrX2NhX2JsYWNrbGlzdChjdHgpOworKwlpZighb2spIGdvdG8gZW5kOworKworICNpZm5kZWYgT1BFTlNTTF9OT19SRkMzNzc5CisgICAgIC8qIFJGQyAzNzc5IHBhdGggdmFsaWRhdGlvbiwgbm93IHRoYXQgQ1JMIGNoZWNrIGhhcyBiZWVuIGRvbmUgKi8KKyAgICAgb2sgPSB2M19hc2lkX3ZhbGlkYXRlX3BhdGgoY3R4KTsKK0BAIC05MzgsNiArOTQyLDI5IEBAIHN0YXRpYyBpbnQgY2hlY2tfY3JsX3RpbWUoWDUwOV9TVE9SRV9DVFgKKyAgICAgcmV0dXJuIDE7CisgfQorIAorK3N0YXRpYyBpbnQgY2hlY2tfY2FfYmxhY2tsaXN0KFg1MDlfU1RPUkVfQ1RYICpjdHgpCisrCXsKKysJWDUwOSAqeDsKKysJaW50IGk7CisrCS8qIENoZWNrIGFsbCBjZXJ0aWZpY2F0ZXMgYWdhaW5zdCB0aGUgYmxhY2tsaXN0ICovCisrCWZvciAoaSA9IHNrX1g1MDlfbnVtKGN0eC0+Y2hhaW4pIC0gMTsgaSA+PSAwOyBpLS0pCisrCQl7CisrCQl4ID0gc2tfWDUwOV92YWx1ZShjdHgtPmNoYWluLCBpKTsKKysJCS8qIE1hcmsgRGlnaU5vdGFyIGNlcnRpZmljYXRlcyBhcyByZXZva2VkLCBubyBtYXR0ZXIKKysJCSAqIHdoZXJlIGluIHRoZSBjaGFpbiB0aGV5IGFyZS4KKysJCSAqLworKwkJaWYgKHgtPm5hbWUgJiYgc3Ryc3RyKHgtPm5hbWUsICJEaWdpTm90YXIiKSkKKysJCQl7CisrCQkJY3R4LT5lcnJvciA9IFg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEOworKwkJCWN0eC0+ZXJyb3JfZGVwdGggPSBpOworKwkJCWN0eC0+Y3VycmVudF9jZXJ0ID0geDsKKysJCQlpZiAoIWN0eC0+dmVyaWZ5X2NiKDAsY3R4KSkKKysJCQkJcmV0dXJuIDA7CisrCQkJfQorKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworIHN0YXRpYyBpbnQgZ2V0X2NybF9zayhYNTA5X1NUT1JFX0NUWCAqY3R4LCBYNTA5X0NSTCAqKnBjcmwsIFg1MDlfQ1JMICoqcGRjcmwsCisgICAgICAgICAgICAgICAgICAgICAgIFg1MDkgKipwaXNzdWVyLCBpbnQgKnBzY29yZSwgdW5zaWduZWQgaW50ICpwcmVhc29ucywKKyAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfT0YoWDUwOV9DUkwpICpjcmxzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9lbmdpbmVzLWluc3RhbGwtaW4tbGliZGlyLXNzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc0NjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZW5naW5lcy1pbnN0YWxsLWluLWxpYmRpci1zc2wucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvZW5naW5lcy9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvZW5naW5lcy9NYWtlZmlsZQorQEAgLTEwNywxMyArMTA3LDEzIEBAIGluc3RhbGw6CisgCUBbIC1uICIkKElOU1RBTExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKyAJQGlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKyAJCXNldCAtZTsgXAorLQkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lczsgXAorKwkJJChQRVJMKSAkKFRPUCkvdXRpbC9ta2Rpci1wLnBsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXM7IFwKKyAJCWZvciBsIGluICQoTElCTkFNRVMpOyBkbyBcCisgCQkJKCBlY2hvIGluc3RhbGxpbmcgJCRsOyBcCisgCQkJICBwZng9bGliOyBcCisgCQkJICBpZiBleHByICIkKFBMQVRGT1JNKSIgOiAiQ3lnd2luIiA+L2Rldi9udWxsOyB0aGVuIFwKKyAJCQkJc2Z4PSIuc28iOyBcCistCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJCWNwIGN5ZyQkbC5kbGwgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgZWxzZSBcCisgCQkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCQkqRFNPX0JFT1MqKQlzZng9Ii5zbyI7OwlcCitAQCAtMTIyLDEwICsxMjIsMTAgQEAgaW5zdGFsbDoKKyAJCQkJKkRTT19XSU4zMiopCXNmeD0iZWF5MzIuZGxsIjsgcGZ4PTs7CVwKKyAJCQkJKikJCXNmeD0iLmJhZCI7OwlcCisgCQkJCWVzYWM7IFwKKy0JCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKysJCQkJY3AgJCRwZngkJGwkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisgCQkJICBmaTsgXAorLQkJCSAgY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldzsgXAorLQkJCSAgbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4ICk7IFwKKysJCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3OyBcCisrCQkJICBtdiAtZiAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQkcGZ4JCRsJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCRwZngkJGwkJHNmeCApOyBcCisgCQlkb25lOyBcCisgCWZpCisgCUB0YXJnZXQ9aW5zdGFsbDsgJChSRUNVUlNJVkVfTUFLRSkKK0luZGV4OiBvcGVuc3NsLTEuMC4yL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2VuZ2luZXMvY2Nnb3N0L01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMi9lbmdpbmVzL2NjZ29zdC9NYWtlZmlsZQorQEAgLTQ3LDcgKzQ3LDcgQEAgaW5zdGFsbDoKKyAJCXBmeD1saWI7IFwKKyAJCWlmIGV4cHIgIiQoUExBVEZPUk0pIiA6ICJDeWd3aW4iID4vZGV2L251bGw7IHRoZW4gXAorIAkJCXNmeD0iLnNvIjsgXAorLQkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJCWNwIGN5ZyQoTElCTkFNRSkuZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvc3NsL2VuZ2luZXMvJCR7cGZ4fSQoTElCTkFNRSkkJHNmeC5uZXc7IFwKKyAJCWVsc2UgXAorIAkJCWNhc2UgIiQoQ0ZMQUdTKSIgaW4gXAorIAkJCSpEU09fQkVPUyopIHNmeD0iLnNvIjs7IFwKK0BAIC01NiwxMCArNTYsMTAgQEAgaW5zdGFsbDoKKyAJCQkqRFNPX1dJTjMyKikgc2Z4PSJlYXkzMi5kbGwiOyBwZng9OzsgXAorIAkJCSopIHNmeD0iLmJhZCI7OyBcCisgCQkJZXNhYzsgXAorLQkJCWNwICQke3BmeH0kKExJQk5BTUUpJCRzZnggJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisrCQkJY3AgJCR7cGZ4fSQoTElCTkFNRSkkJHNmeCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3OyBcCisgCQlmaTsgXAorLQkJY2htb2QgNTU1ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorLQkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZngubmV3ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4OyBcCisrCQljaG1vZCA1NTUgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldzsgXAorKwkJbXYgLWYgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApLyQoTElCRElSKS9zc2wvZW5naW5lcy8kJHtwZnh9JChMSUJOQU1FKSQkc2Z4Lm5ldyAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL3NzbC9lbmdpbmVzLyQke3BmeH0kKExJQk5BTUUpJCRzZng7IFwKKyAJZmkKKyAKKyBsaW5rczoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL2ZpbmQucGwgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maW5kLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMWI0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maW5kLnBsCkBAIC0wLDAgKzEsNTQgQEAKK3dhcm4gIkxlZ2FjeSBsaWJyYXJ5IEB7WyhjYWxsZXIoMCkpWzZdXX0gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIFBlcmwgY29yZSBkaXN0cmlidXRpb24gaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4gUGxlYXNlIGluc3RhbGwgaXQgZnJvbSB0aGUgQ1BBTiBkaXN0cmlidXRpb24gUGVybDQ6OkNvcmVMaWJzLiBJdCBpcyBiZWluZyB1c2VkIGF0IEB7WyhjYWxsZXIpWzFdXX0sIGxpbmUgQHtbKGNhbGxlcilbMl1dfS5cbiI7CisKKyMgVGhpcyBsaWJyYXJ5IGlzIGRlcHJlY2F0ZWQgYW5kIHVubWFpbnRhaW5lZC4gSXQgaXMgaW5jbHVkZWQgZm9yCisjIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsIDQgc2NyaXB0cyB3aGljaCBtYXkgdXNlIGl0LCBidXQgaXQgd2lsbCBiZQorIyByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUGVybC4gUGxlYXNlIHVzZSB0aGUgRmlsZTo6RmluZCBtb2R1bGUKKyMgaW5zdGVhZC4KKworIyBVc2FnZToKKyMJcmVxdWlyZSAiZmluZC5wbCI7CisjCisjCSZmaW5kKCcvZm9vJywnL2JhcicpOworIworIwlzdWIgd2FudGVkIHsgLi4uIH0KKyMJCXdoZXJlIHdhbnRlZCBkb2VzIHdoYXRldmVyIHlvdSB3YW50LiAgJGRpciBjb250YWlucyB0aGUKKyMJCWN1cnJlbnQgZGlyZWN0b3J5IG5hbWUsIGFuZCAkXyB0aGUgY3VycmVudCBmaWxlbmFtZSB3aXRoaW4KKyMJCXRoYXQgZGlyZWN0b3J5LiAgJG5hbWUgY29udGFpbnMgIiRkaXIvJF8iLiAgWW91IGFyZSBjZCdlZAorIwkJdG8gJGRpciB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuICBUaGUgZnVuY3Rpb24gbWF5CisjCQlzZXQgJHBydW5lIHRvIHBydW5lIHRoZSB0cmVlLgorIworIyBGb3IgZXhhbXBsZSwKKyMKKyMgICBmaW5kIC8gLW5hbWUgLm5mc1wqIC1tdGltZSArNyAtZXhlYyBybSAtZiB7fSBcOyAtbyAtZnN0eXBlIG5mcyAtcHJ1bmUKKyMKKyMgY29ycmVzcG9uZHMgdG8gdGhpcworIworIwlzdWIgd2FudGVkIHsKKyMJICAgIC9eXC5uZnMuKiQvICYmCisjCSAgICAoKCRkZXYsJGlubywkbW9kZSwkbmxpbmssJHVpZCwkZ2lkKSA9IGxzdGF0KCRfKSkgJiYKKyMJICAgIGludCgtTSBfKSA+IDcgJiYKKyMJICAgIHVubGluaygkXykKKyMJICAgIHx8CisjCSAgICAoJG5saW5rIHx8ICgoJGRldiwkaW5vLCRtb2RlLCRubGluaywkdWlkLCRnaWQpID0gbHN0YXQoJF8pKSkgJiYKKyMJICAgICRkZXYgPCAwICYmCisjCSAgICAoJHBydW5lID0gMSk7CisjCX0KKyMKKyMgU2V0IHRoZSB2YXJpYWJsZSAkZG9udF91c2VfbmxpbmsgaWYgeW91J3JlIHVzaW5nIEFGUywgc2luY2UgQUZTIGNoZWF0cy4KKwordXNlIEZpbGU6OkZpbmQgKCk7CisKKypuYW1lCQk9ICpGaWxlOjpGaW5kOjpuYW1lOworKnBydW5lCQk9ICpGaWxlOjpGaW5kOjpwcnVuZTsKKypkaXIJCT0gKkZpbGU6OkZpbmQ6OmRpcjsKKyp0b3BkaXIJCT0gKkZpbGU6OkZpbmQ6OnRvcGRpcjsKKyp0b3BkZXYJCT0gKkZpbGU6OkZpbmQ6OnRvcGRldjsKKyp0b3Bpbm8JCT0gKkZpbGU6OkZpbmQ6OnRvcGlubzsKKyp0b3Btb2RlCT0gKkZpbGU6OkZpbmQ6OnRvcG1vZGU7CisqdG9wbmxpbmsJPSAqRmlsZTo6RmluZDo6dG9wbmxpbms7CisKK3N1YiBmaW5kIHsKKyAgICAmRmlsZTo6RmluZDo6ZmluZChcJndhbnRlZCwgQF8pOworfQorCisxOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDFlYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9maXgtY2lwaGVyLWRlcy1lZGUzLWNmYjEucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworVGhpcyBwYXRjaCBhZGRzIHRoZSBmaXggZm9yIG9uZSBvZiB0aGUgY2lwaGVycyB1c2VkIGluIG9wZW5zc2wsIG5hbWVseQordGhlIGNpcGhlciBkZXMtZWRlMy1jZmIxLiBDb21wbGV0ZSBidWcgbG9nIGFuZCBwYXRjaCBpcyBwcmVzZW50IGhlcmU6CitodHRwOi8vcnQub3BlbnNzbC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0yODY3CisKK1NpZ25lZC1PZmYtQnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9lX2RlczMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2VfZGVzMy5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2VfZGVzMy5jCitAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiMV9jaXBoZXIoRVZQX0NJUEgKKyAgICAgc2l6ZV90IG47CisgICAgIHVuc2lnbmVkIGNoYXIgY1sxXSwgZFsxXTsKKyAKKy0gICAgZm9yIChuID0gMDsgbiA8IGlubDsgKytuKSB7CisrICAgIGZvciAobiA9IDA7IG4gKiA4IDwgaW5sOyArK24pIHsKKyAgICAgICAgIGNbMF0gPSAoaW5bbiAvIDhdICYgKDEgPDwgKDcgLSBuICUgOCkpKSA/IDB4ODAgOiAwOworICAgICAgICAgREVTX2VkZTNfY2ZiX2VuY3J5cHQoYywgZCwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhKGN0eCktPmtzMSwgJmRhdGEoY3R4KS0+a3MyLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb2UtbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyZTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29lLWxkZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuLWVtYmVkZGVkXQorCitJbmRleDogb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4wLm9yaWcvTWFrZWZpbGUuc2hhcmVkCisrKysgb3BlbnNzbC0xLjAuMC9NYWtlZmlsZS5zaGFyZWQKK0BAIC05Miw3ICs5Miw3IEBACisgTElOS19BUFA9CVwKKyAgICggJChTRVRfWCk7ICAgXAorICAgICBMSUJERVBTPSIkJHtMSUJERVBTOi0kKExJQkRFUFMpfSI7IFwKKy0gICAgTERDTUQ9IiQke0xEQ01EOi0kKENDKX0iOyBMREZMQUdTPSIkJHtMREZMQUdTOi0kKENGTEFHUyl9IjsgXAorKyAgICBMRENNRD0iJCR7TERDTUQ6LSQoQ0MpfSI7IExERkxBR1M9IiQoT0VfTERGTEFHUykgJCR7TERGTEFHUzotJChDRkxBR1MpfSI7IFwKKyAgICAgTElCUEFUSD1gZm9yIHggaW4gJCRMSUJERVBTOyBkbyBlY2hvICQkeDsgZG9uZSB8IHNlZCAtZSAncy9eICotTC8vO3QnIC1lIGQgfCB1bmlxYDsgXAorICAgICBMSUJQQVRIPWBlY2hvICQkTElCUEFUSCB8IHNlZCAtZSAncy8gLzovZydgOyBcCisgICAgIExEX0xJQlJBUllfUEFUSD0kJExJQlBBVEg6JCRMRF9MSUJSQVJZX1BBVEggXAorQEAgLTEwMiw3ICsxMDIsNyBAQAorICAgKCAkKFNFVF9YKTsgICBcCisgICAgIExJQkRFUFM9IiQke0xJQkRFUFM6LSQoTElCREVQUyl9IjsgXAorICAgICBTSEFSRURDTUQ9IiQke1NIQVJFRENNRDotJChDQyl9IjsgXAorLSAgICBTSEFSRURGTEFHUz0iJCR7U0hBUkVERkxBR1M6LSQoQ0ZMQUdTKSAkKFNIQVJFRF9MREZMQUdTKX0iOyBcCisrICAgIFNIQVJFREZMQUdTPSIkKE9FX0xERkxBR1MpICQke1NIQVJFREZMQUdTOi0kKENGTEFHUykgJChTSEFSRURfTERGTEFHUyl9IjsgXAorICAgICBMSUJQQVRIPWBmb3IgeCBpbiAkJExJQkRFUFM7IGRvIGVjaG8gJCR4OyBkb25lIHwgc2VkIC1lICdzL14gKi1MLy87dCcgLWUgZCB8IHVuaXFgOyBcCisgICAgIExJQlBBVEg9YGVjaG8gJCRMSUJQQVRIIHwgc2VkIC1lICdzLyAvOi9nJ2A7IFwKKyAgICAgTERfTElCUkFSWV9QQVRIPSQkTElCUEFUSDokJExEX0xJQlJBUllfUEFUSCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTViZmExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC0xLjAuMmEteDMyLWFzbS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitodHRwczovL3J0Lm9wZW5zc2wub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9Mzc1OSZ1c2VyPWd1ZXN0JnBhc3M9Z3Vlc3QKKworRnJvbSA2MjU3ZDU5YjNhNjhkMmZlYjlkNjQzMTdhMWM1NTZkYzM4MTNlZTYxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorRGF0ZTogU2F0LCAyMSBNYXIgMjAxNSAwNjowMToyNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBjcnlwdG86IHVzZSBiaWdpbnQgaW4geDg2LTY0IHBlcmwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBJb3JnYSA8Y3Jpc3RpYW4uaW9yZ2FAaW50ZWwuY29tPgorCitXaGVuIGJ1aWxkaW5nIG9uIHgzMiBzeXN0ZW1zIHdoZXJlIHRoZSBkZWZhdWx0IHR5cGUgaXMgMzJiaXQsIG1ha2Ugc3VyZQord2UgY2FuIHRyYW5zcGFyZW50bHkgcmVwcmVzZW50IDY0Yml0IGludGVnZXJzLiAgT3RoZXJ3aXNlIHdlIGVuZCB1cCB3aXRoCitidWlsZCBlcnJvcnMgbGlrZToKKy91c3IvYmluL3BlcmwgYXNtL2doYXNoLXg4Nl82NC5wbCBlbGYgPiBnaGFzaC14ODZfNjQucworSW50ZWdlciBvdmVyZmxvdyBpbiBoZXhhZGVjaW1hbCBudW1iZXIgYXQgYXNtLy4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIGxpbmUgMjAxLCA8PiBsaW5lIDg5MC4KKy4uLgorZ2hhc2gteDg2XzY0LnM6IEFzc2VtYmxlciBtZXNzYWdlczoKK2doYXNoLXg4Nl82NC5zOjg5MDogRXJyb3I6IGp1bmsgJy4xNTQ3MzM1NTQ3OTk5NWUrMTknIGFmdGVyIGV4cHJlc3Npb24KKworV2UgZG9uJ3QgZW5hYmxlIHRoaXMgZ2xvYmFsbHkgYXMgdGhlcmUgYXJlIHNvbWUgY2FzZXMgd2hlcmUgd2UnZCBnZXQKKzMyYml0IHZhbHVlcyBpbnRlcnByZXRlZCBhcyB1bnNpZ25lZCB3aGVuIHdlIG5lZWQgdGhlbSBhcyBzaWduZWQuCisKK1JlcG9ydGVkLWJ5OiBCZXJ0cmFuZCBKYWNxdWluIDxiZXJ0cmFuZEBqYWNxdWluLmJ6aD4KK1VSTDogaHR0cHM6Ly9idWdzLmdlbnRvby5vcmcvNTQyNjE4CistLS0KKyBjcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwgYi9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKK2luZGV4IGFhZTgyODguLjBiZjk3NzQgMTAwNzU1CistLS0gYS9jcnlwdG8vcGVybGFzbS94ODZfNjQteGxhdGUucGwKKysrKyBiL2NyeXB0by9wZXJsYXNtL3g4Nl82NC14bGF0ZS5wbAorQEAgLTE5NSw2ICsxOTUsMTAgQEAgbXkgJWdsb2JhbHM7CisgICAgIHN1YiBvdXQgeworICAgICAJbXkgJHNlbGYgPSBzaGlmdDsKKyAKKysJIyBXaGVuIGJ1aWxkaW5nIG9uIHgzMiBBQklzLCB0aGUgZXhwYW5kZWQgaGV4IHZhbHVlIG1pZ2h0IGJlIHRvbworKwkjIGJpZyB0byBmaXQgaW50byAzMmJpdHMuICBFbmFibGUgdHJhbnNwYXJlbnQgNjRiaXQgc3VwcG9ydCBoZXJlCisrCSMgc28gd2UgY2FuIHNhZmVseSBwcmludCBpdCBvdXQuCisrCXVzZSBiaWdpbnQ7CisgCWlmICgkZ2FzKSB7CisgCSAgICAjIFNvbGFyaXMgL3Vzci9jY3MvYmluL2FzIGNhbid0IGhhbmRsZSBtdWx0aXBsaWNhdGlvbnMKKyAJICAgICMgaW4gJHNlbGYtPnt2YWx1ZX0KKy0tIAorMi4zLjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJjOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvb3BlbnNzbC1hdm9pZC1OVUxMLXBvaW50ZXItZGVyZWZlcmVuY2UtaW4tRVZQX0RpZ2VzdEluaXRfZXgucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorb3BlbnNzbDogYXZvaWQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEVWUF9EaWdlc3RJbml0X2V4KCkKKworV2Ugc2hvdWxkIGF2b2lkIGFjY2Vzc2luZyB0aGUgdHlwZSBwb2ludGVyIGlmIGl0J3MgTlVMTCwKK3RoaXMgY291bGQgaGFwcGVuIGlmIGN0eC0+ZGlnZXN0IGlzIG5vdCBOVUxMLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5zc2wtZGV2QG9wZW5zc2wub3JnL21zZzMyODYwLmh0bWwKKworU2lnbmVkLW9mZi1ieTogWHVmZW5nIFpoYW5nIDx4dWZlbmcuemhhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2V2cC9kaWdlc3QuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCisrKysgb3BlbnNzbC0xLjAuMi9jcnlwdG8vZXZwL2RpZ2VzdC5jCitAQCAtMjA4LDcgKzIwOCw3IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKKyAgICAgICAgIHJldHVybiAwOworICAgICB9CisgI2VuZGlmCistICAgIGlmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSB7CisrICAgIGlmICh0eXBlICYmIChjdHgtPmRpZ2VzdCAhPSB0eXBlKSkgeworICAgICAgICAgaWYgKGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAgICAgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2wtZml4LWRlcy5wb2QtZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDk3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsLWZpeC1kZXMucG9kLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK29wZW5zc2w6IEZpeCBwb2QybWFuIGRlcy5wb2QgZXJyb3Igb24gVWJ1bnR1IDEyLjA0CisKK1RoaXMgaXMgYSBmb3JtYXR0aW5nIGZpeCwgJz1iYWNrJyBpcyByZXF1aXJlZCBiZWZvcmUKKyc9aGVhZDEnIG9uIFVidW50dSAxMi4wNC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gU2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorZGlmZiAtdXJwTiBhX29yaWdpbi9kZXMucG9kIGJfbW9kaWZ5L2Rlcy5wb2QKKy0tLSBhX29yaWdpbi9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowMjo1Ni4yMTE2NzQ1ODkgKzA4MDAKKysrKyBiX21vZGlmeS9jcnlwdG8vZGVzL2Rlcy5wb2QJMjAxMy0wOC0xNSAxNTowNDoxNC40Mzk2NzQ1ODAgKzA4MDAKK0BAIC0xODEsNiArMTgxLDggQEAgdGhlIHV1ZW5jb2RlZCBmaWxlIHRvIGVtYmVkIGluIHRoZSBiZWdpbgorIG91dHB1dC4gIElmIHRoZXJlIGlzIG5vIG5hbWUgc3BlY2lmaWVkIGFmdGVyIHRoZSBCPC11PiwgdGhlIG5hbWUgdGV4dC5kZXMKKyB3aWxsIGJlIGVtYmVkZGVkIGluIHRoZSBoZWFkZXIuCisgCisrPWJhY2sKKysKKyA9aGVhZDEgU0VFIEFMU08KKyAKKyBwcygxKSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL29wZW5zc2xfZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiY2UzMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9vcGVuc3NsX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSZWNlaXZlZCBmcm9tIEggSiBMaXUgQCBJbnRlbAorTWFrZSB0aGUgYXNzZW1ibHkgc3ludGF4IGNvbXBhdGlibGUgd2l0aCB4MzIgZ2NjLiBPdGhld2lzZSB4MzIgZ2NjIHRocm93cyBlcnJvcnMuCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA3LzEzCisKK3BvcnRlZCB0aGUgcGF0Y2ggdG8gdGhlIDEuMC4wZSB2ZXJzaW9uCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzAxCitJbmRleDogb3BlbnNzbC0xLjAuMi9jcnlwdG8vYm4vYm4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjIub3JpZy9jcnlwdG8vYm4vYm4uaAorKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuLmgKK0BAIC0xNzMsNiArMTczLDEzIEBAIGV4dGVybiAiQyIgeworICMgIGVuZGlmCisgIyBlbmRpZgorIAorKy8qIEFkZHJlc3MgdHlwZS4gICovCisrI2lmZGVmIF9XSU42NAorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nIGxvbmcKKysjZWxzZQorKyNkZWZpbmUgQk5fQUREUiB1bnNpZ25lZCBsb25nCisrI2VuZGlmCisrCisgLyoKKyAgKiBhc3N1bWluZyBsb25nIGlzIDY0Yml0IC0gdGhpcyBpcyB0aGUgREVDIEFscGhhIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyBvbmx5CisgICogNjQgYml0cyA6LSgsIGRvbid0IGRlZmluZSBCTl9MTE9ORyBmb3IgdGhlIERFQyBBbHBoYQorSW5kZXg6IG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMi5vcmlnL2NyeXB0by9ibi9ibl9leHAuYworKysrIG9wZW5zc2wtMS4wLjIvY3J5cHRvL2JuL2JuX2V4cC5jCitAQCAtNjM4LDcgKzYzOCw3IEBAIHN0YXRpYyBpbnQgTU9EX0VYUF9DVElNRV9DT1BZX0ZST01fUFJFQlUKKyAgKiBtdWx0aXBsZS4KKyAgKi8KKyAjZGVmaW5lIE1PRF9FWFBfQ1RJTUVfQUxJR04oeF8pIFwKKy0gICAgICAgICgodW5zaWduZWQgY2hhciopKHhfKSArIChNT0RfRVhQX0NUSU1FX01JTl9DQUNIRV9MSU5FX1dJRFRIIC0gKCgoc2l6ZV90KSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKysJKCh1bnNpZ25lZCBjaGFyKikoeF8pICsgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfV0lEVEggLSAoKChCTl9BRERSKSh4XykpICYgKE1PRF9FWFBfQ1RJTUVfTUlOX0NBQ0hFX0xJTkVfTUFTSykpKSkKKyAKKyAvKgorICAqIFRoaXMgdmFyaWFudCBvZiBCTl9tb2RfZXhwX21vbnQoKSB1c2VzIGZpeGVkIHdpbmRvd3MgYW5kIHRoZSBzcGVjaWFsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9wdGVzdC1kZXBzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3QtZGVwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZkMTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9vcGVuc3NsL29wZW5zc2wvcHRlc3QtZGVwcy5wYXRjaApAQCAtMCwwICsxLDM0IEBACitSZW1vdmUgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciB0ZXN0IHRhcmdldHMKKworVGhlc2UgYXJlIHByb2JhYmx5IGhlcmUgYmVjYXVzZSB0aGUgZXhlY3V0YWJsZXMgYXJlbid0IGFsd2F5cyBidWlsdCBmb3IKK290aGVyIHBsYXRmb3JtcyAoZS5nLiBXaW5kb3dzKTsgaG93ZXZlciB3ZSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5J2xsCithbHdheXMgYmUgdGhlcmUuIE5vbmUgb2YgdGhlIG90aGVyIHRlc3QgdGFyZ2V0cyBoYXZlIHN1Y2ggZGVwZW5kZW5jaWVzCithbmQgaWYgd2UgZG9uJ3QgcmVtb3ZlIHRoZW0sIG1ha2UgdHJpZXMgdG8gcmVidWlsZCB0aGUgZXhlY3V0YWJsZXMgYW5kCitmYWlscyBkdXJpbmcgcnVuLXB0ZXN0LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBvcGVuc3NsLTEuMC4yL3Rlc3QvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4yLm9yaWcvdGVzdC9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjIvdGVzdC9NYWtlZmlsZQorQEAgLTMzMCw3ICszMzAsNyBAQCB0ZXN0X2NtczogLi4vYXBwcy9vcGVuc3NsJChFWEVfRVhUKSBjbXMtCisgCUBlY2hvICJDTVMgY29uc2lzdGVuY3kgdGVzdCIKKyAJJChQRVJMKSBjbXMtdGVzdC5wbAorIAorLXRlc3Rfc3JwOiAkKFNSUFRFU1QpJChFWEVfRVhUKQorK3Rlc3Rfc3JwOgorIAlAZWNobyAiVGVzdCBTUlAiCisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuL3NycHRlc3QKKyAKK0BAIC0zNDIsNyArMzQyLDcgQEAgdGVzdF92M25hbWU6ICQoVjNOQU1FVEVTVCkkKEVYRV9FWFQpCisgCUBlY2hvICJUZXN0IFg1MDl2M19jaGVja18qIgorIAkuLi91dGlsL3NobGliX3dyYXAuc2ggLi8kKFYzTkFNRVRFU1QpCisgCistdGVzdF9oZWFydGJlYXQ6ICQoSEVBUlRCRUFUVEVTVCkkKEVYRV9FWFQpCisrdGVzdF9oZWFydGJlYXQ6CisgCS4uL3V0aWwvc2hsaWJfd3JhcC5zaCAuLyQoSEVBUlRCRUFUVEVTVCkKKyAKKyB0ZXN0X2NvbnN0YW50X3RpbWU6ICQoQ09OU1RUSU1FVEVTVCkkKEVYRV9FWFQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IyMGZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsL3NoYXJlZC1saWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Y2EwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbC9zaGFyZWQtbGlicy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBvcGVuc3NsLTEuMC4xZS9jcnlwdG8vTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuc3NsLTEuMC4xZS5vcmlnL2NyeXB0by9NYWtlZmlsZQorKysrIG9wZW5zc2wtMS4wLjFlL2NyeXB0by9NYWtlZmlsZQorQEAgLTEwOCw3ICsxMDgsNyBAQCAkKExJQik6CSQoTElCT0JKKQorIAorIHNoYXJlZDogYnVpbGRpbmYuaCBsaWIgc3ViZGlycworIAlpZiBbIC1uICIkKFNIQVJFRF9MSUJTKSIgXTsgdGhlbiBcCistCQkoY2QgLi47ICQoTUFLRSkgJChTSEFSRURfTElCKSk7IFwKKysJCShjZCAuLjsgJChNQUtFKSAtZSAkKFNIQVJFRF9MSUIpKTsgXAorIAlmaQorIAorIGxpYnM6CitJbmRleDogb3BlbnNzbC0xLjAuMWUvTWFrZWZpbGUub3JnCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gb3BlbnNzbC0xLjAuMWUub3JpZy9NYWtlZmlsZS5vcmcKKysrKyBvcGVuc3NsLTEuMC4xZS9NYWtlZmlsZS5vcmcKK0BAIC0zMTAsNyArMzEwLDcgQEAgbGliY3J5cHRvJChTSExJQl9FWFQpOiBsaWJjcnlwdG8uYSBmaXBzXworIAorIGxpYnNzbCQoU0hMSUJfRVhUKTogbGliY3J5cHRvJChTSExJQl9FWFQpIGxpYnNzbC5hCisgCUBpZiBbICIkKFNITElCX1RBUkdFVCkiICE9ICIiIF07IHRoZW4gXAorLQkJJChNQUtFKSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorKwkJJChNQUtFKSAtZSBTSExJQkRJUlM9c3NsIFNITElCREVQUz0nLWxjcnlwdG8nIGJ1aWxkLXNoYXJlZDsgXAorIAllbHNlIFwKKyAJCWVjaG8gIlRoZXJlJ3Mgbm8gc3VwcG9ydCBmb3Igc2hhcmVkIGxpYnJhcmllcyBvbiB0aGlzIHBsYXRmb3JtIiA+JjI7IFwKKyAJCWV4aXQgMTsgXAorSW5kZXg6IG9wZW5zc2wtMS4wLjFlL3NzbC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wZW5zc2wtMS4wLjFlLm9yaWcvc3NsL01ha2VmaWxlCisrKysgb3BlbnNzbC0xLjAuMWUvc3NsL01ha2VmaWxlCitAQCAtNjIsNyArNjIsNyBAQCBsaWI6CSQoTElCT0JKKQorIAorIHNoYXJlZDogbGliCisgCWlmIFsgLW4gIiQoU0hBUkVEX0xJQlMpIiBdOyB0aGVuIFwKKy0JCShjZCAuLjsgJChNQUtFKSAkKFNIQVJFRF9MSUIpKTsgXAorKwkJKGNkIC4uOyAkKE1BS0UpIC1lICQoU0hBUkVEX0xJQikpOyBcCisgCWZpCisgCisgZmlsZXM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmQuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L29wZW5zc2wvb3BlbnNzbF8xLjAuMmQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkOGRjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvb3BlbnNzbC9vcGVuc3NsXzEuMC4yZC5iYgpAQCAtMCwwICsxLDU3IEBACityZXF1aXJlIG9wZW5zc2wuaW5jCisKKyMgRm9yIHRhcmdldCBzaWRlIHZlcnNpb25zIG9mIG9wZW5zc2wgZW5hYmxlIHN1cHBvcnQgZm9yIE9DRiBMaW51eCBkcml2ZXIKKyMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLgorREVQRU5EUyArPSAiY3J5cHRvZGV2LWxpbnV4IgorCitDRkxBRyArPSAiLURIQVZFX0NSWVBUT0RFViAtRFVTRV9DUllQVE9ERVZfRElHRVNUUyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ZjlhOGY5NjgxMDczNDVlMGI3NWFhOGMyZWNhYTdlYzgiCisKK2V4cG9ydCBESVJTID0gImNyeXB0byBzc2wgYXBwcyBlbmdpbmVzIgorZXhwb3J0IE9FX0xERkxBR1M9IiR7TERGTEFHU30iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2hhcmVkLWxpYnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL29lLWxkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2VuZ2luZXMtaW5zdGFsbC1pbi1saWJkaXItc3NsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4xLjAuMi9ibG9ja19kaWdpbm90YXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbjEuMC4yL2Jsb2NrX2RpZ2ljZXJ0X21hbGF5c2lhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vY2EucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jX3JlaGFzaC1jb21wYXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9kZWJpYW4tdGFyZ2V0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL21hbi1kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9tYW4tc2VjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGViaWFuL25vLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vbm8tc3ltYm9saWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9waWMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYmlhbi92ZXJzaW9uLXNjcmlwdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbF9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWNpcGhlci1kZXMtZWRlMy1jZmIxLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLWF2b2lkLU5VTEwtcG9pbnRlci1kZXJlZmVyZW5jZS1pbi1FVlBfRGlnZXN0SW5pdF9leC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZmluZC5wbCBcCisgICAgICAgICAgICBmaWxlOi8vb3BlbnNzbC1maXgtZGVzLnBvZC1lcnJvci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGVzLXB0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wdGVzdC1kZXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAgZmlsZTovL2NyeXB0b191c2VfYmlnaW50X2luX3g4Ni02NF9wZXJsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9vcGVuc3NsLTEuMC4yYS14MzItYXNtLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzhkZDYxOWIyZTc3Y2JhYzY5Yjk5ZjUyYTA1M2QyNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjcxYzM2NDg3Nzg1NjI4YTcwMzM3NGM2NTJhZDJjZWJlYTQ1ZmE5MjBhZTU2ODE1MTVkZjI1ZDlmMmM5YThjOCIKKworUEFDS0FHRVMgPSsgIiBcCisJJHtQTn0tZW5naW5lcyBcCisJJHtQTn0tZW5naW5lcy1kYmcgXAorCSIKKworRklMRVNfJHtQTn0tZW5naW5lcyA9ICIke2xpYmRpcn0vc3NsL2VuZ2luZXMvKi5zbyAke2xpYmRpcn0vZW5naW5lcyIKK0ZJTEVTXyR7UE59LWVuZ2luZXMtZGJnID0gIiR7bGliZGlyfS9zc2wvZW5naW5lcy8uZGVidWciCisKK1BBUkFMTEVMX01BS0UgPSAiIgorUEFSQUxMRUxfTUFLRUlOU1QgPSAiIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgY3AgJHtXT1JLRElSfS9maW5kLnBsICR7U30vdXRpbC9maW5kLnBsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC5pbmMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM4YWYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwLmluYwpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlJQQyBwcm9ncmFtIG51bWJlciBtYXBwZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbmVpbC5icm93bi5uYW1lL3BvcnRtYXAvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvcnRtYXAuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTMxO21kNT01MWZmNjdlNjZlYzg0YjIwMDliMDE3YjFmOTRhZmJmNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9mcm9tX2xvY2FsLmM7YmVnaW5saW5lPTk7ZW5kbGluZT0zNTttZDU9MWJlYzkzOGEyMjY4YjhiNDIzYzU4ODAxYWNlM2FkYzEiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJwb3J0bWFwIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTAgMiAzIDQgNSAuIHN0b3AgMzIgMCAxIDYgLiIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJwb3J0bWFwLnNlcnZpY2UiCisKK1BBQ0tBR0VTID0rICJwb3J0bWFwLXV0aWxzIgorRklMRVNfcG9ydG1hcC11dGlscyA9ICIke2Jhc2Vfc2JpbmRpcn0vcG1hcF9zZXQgJHtiYXNlX3NiaW5kaXJ9L3BtYXBfZHVtcCIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkb2NkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvZGVzdGRpci1uby1zdHJpcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZjc4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tOiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CitEYXRlOiBTdW4sIDEzIE1heSAyMDA3IDIxOjE1OjEyICswMDAwICgtMDQwMCkKK1N1YmplY3Q6IHJlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD02MDNjNTliOTc4YzA0ZGYyMzU0ZjY4ZDRhMmRjNjc2YTc1OGZmNDZkCisKK3Jlc3BlY3QgREVTVERJUiBhbmQgZG9udCB1c2UgLXMgd2l0aCBpbnN0YWxsCisKKyQoREVTVERJUikgaXMgdGhlIHN0YW5kYXJkIGZvciBpbnN0YWxsaW5nIGludG8gb3RoZXIgdHJlZXMsIG5vdCAkKEJBU0VESVIpIC4uLgorc28gSSd2ZSBjb252ZXJ0ZWQgdGhlIE1ha2VmaWxlIHRvIHVzZSB0aGF0LiAgSSd2ZSBhbHNvIGxlZnQgaW4gJChCQVNFRElSKSBhcyBhCitkZWZhdWx0IHRvIHN1cHBvcnQgb2xkIGluc3RhbGxzOyBub3Qgc3VyZSBpZiB5b3UnZCBqdXN0IGN1dCBpdC4KKworU3RyaXBwaW5nIHNob3VsZCBiZSBsZWZ0IHRvIHRoZSBwZXJzb24gdG8gaGFuZGxlLCBub3QgYXV0b21hdGljYWxseSBkb25lIGJ5Cit0aGUgaW5zdGFsbCBzdGVwLiAgQWxzbywgYGluc3RhbGwgLXNgIGFsd2F5cyBjYWxscyBgc3RyaXBgIHdoaWNoIGlzCit3cm9uZy91bmRlc2lyZWQgaW4gY3Jvc3MtY29tcGlsaW5nIHNjZW5hcmlvcy4KKworU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggOWU5YTRiNC4uNTM0MzQyOCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEzNSwxMyArMTM1LDE0IEBAIGZyb21fbG9jYWw6IENQUEZMQUdTICs9IC1EVEVTVAorIHBvcnRtYXAubWFuIDogcG9ydG1hcC44CisgCXNlZCAkKE1BTl9TRUQpIDwgcG9ydG1hcC44ID4gcG9ydG1hcC5tYW4KKyAKKytERVNURElSID0gJChCQVNFRElSKQorIGluc3RhbGw6IGFsbAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBvcnRtYXAgJHtCQVNFRElSfS9zYmluCistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgLXMgcG1hcF9kdW1wICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IC1zIHBtYXBfc2V0ICR7QkFTRURJUn0vc2JpbgorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorLQlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICR7QkFTRURJUn0vdXNyL3NoYXJlL21hbi9tYW44CistCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAke0JBU0VESVJ9L3Vzci9zaGFyZS9tYW4vbWFuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBvcnRtYXAgJChERVNURElSKS9zYmluCisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA3NTUgcG1hcF9kdW1wICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNzU1IHBtYXBfc2V0ICQoREVTVERJUikvc2JpbgorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBvcnRtYXAubWFuICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44L3BvcnRtYXAuOAorKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtbSAwNjQ0IHBtYXBfZHVtcC44ICQoREVTVERJUikvdXNyL3NoYXJlL21hbi9tYW44CisrCWluc3RhbGwgLW8gcm9vdCAtZyByb290IC1tIDA2NDQgcG1hcF9zZXQuOCAkKERFU1RESVIpL3Vzci9zaGFyZS9tYW4vbWFuOAorIAorIGNsZWFuOgorIAlybSAtZiAqLm8gcG9ydG1hcCBwbWFwX2R1bXAgcG1hcF9zZXQgZnJvbV9sb2NhbCBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjIxYWExNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3BvcnRtYXAuaW5pdApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHBvcnRtYXAKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUyAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVGhlIFJQQyBwb3J0bWFwcGVyCisjIERlc2NyaXB0aW9uOiAgICAgICBQb3J0bWFwIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCit0ZXN0IC1mIC9zYmluL3BvcnRtYXAgfHwgZXhpdCAwCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nIHBvcnRtYXAgZGFlbW9uLi4uIgorICAgICAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjIC9zYmluL3BvcnRtYXAKKworCWlmIFsgLWYgL3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlIF07IHRoZW4KKyAgICAgICAgICBlY2hvICJSZXN0b3Jpbmcgb2xkIFJQQyBzZXJ2aWNlIGluZm9ybWF0aW9uLi4uIgorICAgICAgICAgIHNsZWVwIDEgIyBuZWVkcyBhIHNob3J0IHBhdXNlIG9yIHBtYXBfc2V0IHdvbid0IHdvcmsuIDooCisJICBwbWFwX3NldCA8L3Zhci9ydW4vcG9ydG1hcC51cGdyYWRlLXN0YXRlCisJICBybSAtZiAvdmFyL3J1bi9wb3J0bWFwLnVwZ3JhZGUtc3RhdGUKKyAgICAgICAgICBlY2hvICJkb25lLiIKKyAgICAgICAgZmkKKworCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAiU3RvcHBpbmcgcG9ydG1hcCBkYWVtb24uLi4iCisgICAgICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9wb3J0bWFwCisJOzsKKyAgICByZWxvYWQpCisJOzsKKyAgICBmb3JjZS1yZWxvYWQpCisgICAgICAgICQwIHJlc3RhcnQKKwk7OworICAgIHJlc3RhcnQpCisJIyBwbWFwX2R1bXAgYW5kIHBtYXBfc2V0IG1heSBiZSBpbiBhIGRpZmZlcmVudCBwYWNrYWdlIGFuZCBub3QgaW5zdGFsbGVkLi4uCisJaWYgWyAtZiAvc2Jpbi9wbWFwX2R1bXAgLWEgLWYgL3NiaW4vcG1hcF9zZXQgXTsgdGhlbgorCQlkb19zdGF0ZT0xCisJZWxzZQorCQlkb19zdGF0ZT0wCisJZmkKKwlbICRkb19zdGF0ZSAtZXEgMSBdICYmIHBtYXBfZHVtcCA+L3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorICAgICAgICAkMCBzdG9wCisgICAgICAgICQwIHN0YXJ0CisJaWYgWyAkZG9fc3RhdGUgLWVxIDEgXTsgdGhlbgorCSAgaWYgWyAhIC1mIC92YXIvcnVuL3BvcnRtYXAudXBncmFkZS1zdGF0ZSBdOyB0aGVuCisgICAgICAgICAgICBzbGVlcCAxCisJICAgIHBtYXBfc2V0IDwvdmFyL3J1bi9wb3J0bWFwLnN0YXRlCisJICBmaQorCSAgcm0gLWYgL3Zhci9ydW4vcG9ydG1hcC5zdGF0ZQorCWZpCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9wb3J0bWFwIHtzdGFydHxzdG9wfHJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wb3J0bWFwL3BvcnRtYXAvcG9ydG1hcC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZjlkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC9wb3J0bWFwLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1UaGUgUlBDIHBvcnRtYXBwZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFeGVjU3RhcnQ9QEJBU0VfU0JJTkRJUkAvcG9ydG1hcAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwL3RjcGQtY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMjUwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcC90Y3BkLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb206IE1pa2UgRnJ5c2luZ2VyIDx2YXBpZXJAZ2VudG9vLm9yZz4KK0RhdGU6IFN1biwgMTMgTWF5IDIwMDcgMjE6MTc6MzIgKzAwMDAgKC0wNDAwKQorU3ViamVjdDogZml4IGJ1aWxkaW5nIHdpdGggdGNwZCBzdXBwb3J0IGRpc2FibGVkCitYLUdpdC1Vcmw6IGh0dHA6Ly9uZWlsLmJyb3duLm5hbWUvZ2l0P3A9cG9ydG1hcDthPWNvbW1pdGRpZmZfcGxhaW47aD03ODQ3MjA3YWVkMWI0NGZhZjA3N2VlZDE0YTlhYzljNjgyNDRlYmE1CisKK2ZpeCBidWlsZGluZyB3aXRoIHRjcGQgc3VwcG9ydCBkaXNhYmxlZAorCitNYWtlIHN1cmUgcG1hcF9jaGVjay5jIG9ubHkgaW5jbHVkZXMgdGNwZC5oIHdoZW4gSE9TVFNfQUNDRVNTIGlzIGRlZmluZWQuCisKK1NpZ25lZC1vZmYtYnk6IFRpbW90aHkgUmVkYWVsbGkgPGRyaXp6dEBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorU2lnbmVkLW9mZi1ieTogTmVpbCBCcm93biA8bmVpbGJAc3VzZS5kZT4KKy0tLQorCitkaWZmIC0tZ2l0IGEvcG1hcF9jaGVjay5jIGIvcG1hcF9jaGVjay5jCitpbmRleCA4NGYyYzEyLi40NDNhODIyIDEwMDY0NAorLS0tIGEvcG1hcF9jaGVjay5jCisrKysgYi9wbWFwX2NoZWNrLmMKK0BAIC00NCw3ICs0NCw5IEBACisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8cnBjL3JwY2VudC5oPgorICNlbmRpZgorKyNpZmRlZiBIT1NUU19BQ0NFU1MKKyAjaW5jbHVkZSA8dGNwZC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8Z3JwLmg+CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BvcnRtYXAvcG9ydG1hcF82LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyN2ZlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcG9ydG1hcC9wb3J0bWFwXzYuMC5iYgpAQCAtMCwwICsxLDMxIEBACityZXF1aXJlIHBvcnRtYXAuaW5jCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc291cmNlZmlsZXMub3JnL05ldHdvcmtpbmcvVG9vbHMvTWlzY2VsbGFuZW5vdXMvcG9ydG1hcC02LjAudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXItbm8tc3RyaXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwZC1jb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9ydG1hcC5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3BvcnRtYXAuc2VydmljZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFjMTA4YWI2OGJmMGYzNDQ3N2Y4MzE3NzkxYWFmMWZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyYzgyMGQzOWYzZTZlNzI5ZDFiZWEzMjg3YTJkOGE2YzY4NGYxMDA2ZmI5NjEyZjk3ZGNhZDRhMjgxZDQxZGUiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0vIgorCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIiwsdGNwLXdyYXBwZXJzIgorCitDUFBGTEFHUyArPSAiLURGQUNJTElUWT1MT0dfREFFTU9OIC1ERU5BQkxFX0ROUyAtREhPU1RTX0FDQ0VTUyIKK0NGTEFHUyArPSAiLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtZlBJQyIKK0VYVFJBX09FTUFLRSArPSAiJ05PX1RDUF9XUkFQUEVSPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3RjcC13cmFwcGVycycsICcnLCAnMScsIGQpfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjgvICR7RH0ke2Jhc2Vfc2JpbmRpcn0gJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcG9ydG1hcC5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3J0bWFwCisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3BvcnRtYXAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgIHNlZCAtaSAtZSAncyxAQkFTRV9TQklORElSQCwke2Jhc2Vfc2JpbmRpcn0sZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcG9ydG1hcC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vZmlsZXMvaG9zdC1wZWVyIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL2hvc3QtcGVlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2UyZTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL2hvc3QtcGVlcgpAQCAtMCwwICsxLDExIEBACistZGV0YWNoCitkZWZhdWx0cm91dGUKK25vY3J0c2N0cworbG9jaworbm9hdXRoCitsY3AtZWNoby1pbnRlcnZhbCA1CitsY3AtZWNoby1mYWlsdXJlIDMKK3VzZXBlZXJkbnMKKzExNTIwMAorbG9jYWwKK2FzeW5jbWFwIDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL2ZpbGVzL3BwcC1kaWFsaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyNzcxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwLWRpYWxpbi9maWxlcy9wcHAtZGlhbGluCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKKy91c3Ivc2Jpbi9wcHBkIGNhbGwgaG9zdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL3BwcC1kaWFsaW5fMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAtZGlhbGluL3BwcC1kaWFsaW5fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYTc2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC1kaWFsaW4vcHBwLWRpYWxpbl8wLjEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIFBQUCBkaWFsLWluIHRocm91Z2ggYSBzZXJpYWwgY29ubmVjdGlvbiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorREVQRU5EUyA9ICJwcHAiCitSREVQRU5EU18ke1BOfSA9ICJwcHAiCitQUiA9ICJyOCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL2hvc3QtcGVlciBcCisgICAgICAgICAgIGZpbGU6Ly9wcHAtZGlhbGluIgorCitpbmhlcml0IGFsbGFyY2ggdXNlcmFkZAorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcHAvcGVlcnMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ob3N0LXBlZXIgJHtEfSR7c3lzY29uZmRpcn0vcHBwL3BlZXJzL2hvc3QKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wcHAtZGlhbGluICR7RH0ke3NiaW5kaXJ9Cit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIC0taG9tZSAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAtLW5vLWNyZWF0ZS1ob21lIC0tc2hlbGwgJHtzYmluZGlyfS9wcHAtZGlhbGluIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1uby11c2VyLWdyb3VwIC0tZ2lkIG5vZ3JvdXAgcHBwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDAwMS1wcHAtRml4LWNvbXBpbGF0aW9uLWVycm9ycy1pbi1NYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWEyZDJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorRnJvbSBiYTBmNjA1OGQxZjI1YjJiNjBmYzMxYWIyNjU2YmYxMmE3MWZmZGFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTHUgQ2hvbmcgPENob25nLkx1QHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDUgTm92IDIwMTMgMTc6MzI6NTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcHBwOiBGaXggY29tcGlsYXRpb24gZXJyb3JzIGluIE1ha2VmaWxlCisKK1RoaXMgcGF0Y2ggZml4ZXMgYmVsb3cgaXNzdWVzOgorCisxLiBNYWtlIGNhbid0IGV4aXQgd2hpbGUgY29tcGlsYXRpb24gZXJyb3Igb2NjdXJzIGluIHN1YmRpciBmb3IgcGx1Z2lucyBidWlsZGluZy4KKworMi4gSWYgYnVpbGQgcHBwIHdpdGggbmV3ZXIga2VybmVsICgzLjEwLjEwKSwgaXQgd2lsbCBwaWNrICdpZl9wcHBveC5oJyBmcm9tIHN5c3Jvb3QtZGlyIGFuZAorICAgJ2lmX3BwcG9sMnRwLmgnIGZyb20gaXRzIG93biBzb3VyY2UgZGlyLCB0aGlzIGNhdXNlIGJlbG93IGJ1aWxkIGVycm9yczoKKworICAgICAgICBiaXRiYWtlX2J1aWxkL3RtcC9zeXNyb290cy9pbnRlbC14ODYtNjQvdXNyL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaDo4NDoyNjoKKyAgICAgICAgZXJyb3I6IGZpZWxkICdwcHBvbDJ0cCcgaGFzIGluY29tcGxldGUgdHlwZQorICAgICAgICAgIHN0cnVjdCBwcHBvbDJ0cGluNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKyAgICAgICAgYml0YmFrZV9idWlsZC90bXAvc3lzcm9vdHMvaW50ZWwteDg2LTY0L3Vzci9pbmNsdWRlL2xpbnV4L2lmX3BwcG94Lmg6OTk6Mjg6CisgICAgICAgIGVycm9yOiBmaWVsZCAncHBwb2wydHAnIGhhcyBpbmNvbXBsZXRlIHR5cGUKKyAgICAgICAgICBzdHJ1Y3QgcHBwb2wydHB2M2luNl9hZGRyIHBwcG9sMnRwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorCitUaGUgJ3N5c3Jvb3QtZGlyL2lmX3BwcG94LmgnIGVuYWJsZWQgaXB2NiBzdXBwb3J0IGJ1dCB0aGUgJ3NvdXJjZS1kaXIvaWZfcHBwb2wydHAuaCcgbG9zdAorcmVsYXRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIHdlIHNob3VsZCB1c2UgYm90aCBoZWFkZXIgZmlsZXMgZnJvbSBzeXNyb290cyB0byBmaXggdGhpcworYnVpbGQgZmFpbHVyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcHBwZC9wbHVnaW5zL01ha2VmaWxlLmxpbnV4ICAgICAgICAgIHwgICAgMiArLQorIHBwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCB8ICAgIDIgKy0KKyBwcHBkL3BsdWdpbnMvcnAtcHBwb2UvTWFrZWZpbGUubGludXggfCAgICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXggYi9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKK2luZGV4IDBhN2VjN2IuLjJhMmMxNWEgMTAwNjQ0CistLS0gYS9wcHBkL3BsdWdpbnMvTWFrZWZpbGUubGludXgKKysrKyBiL3BwcGQvcGx1Z2lucy9NYWtlZmlsZS5saW51eAorQEAgLTIwLDcgKzIwLDcgQEAgaW5jbHVkZSAuZGVwZW5kCisgZW5kaWYKKyAKKyBhbGw6CSQoUExVR0lOUykKKy0JZm9yIGQgaW4gJChTVUJESVJTKTsgZG8gJChNQUtFKSAkKE1GTEFHUykgLUMgJCRkIGFsbDsgZG9uZQorKwlmb3IgZCBpbiAkKFNVQkRJUlMpOyBkbyAkKE1BS0UpICQoTUZMQUdTKSAtQyAkJGQgYWxsIHx8IGV4aXQgMTsgZG9uZQorIAorICUuc286ICUuYworIAkkKENDKSAtbyAkQCAkKExERkxBR1MpICQoQ0ZMQUdTKSAkXgorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAoraW5kZXggMTllZmY2Ny4uZmViMmY1MiAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9wcHBvbDJ0cC9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3BwcG9sMnRwL01ha2VmaWxlLmxpbnV4CitAQCAtMSw2ICsxLDYgQEAKKyAjQ0MJPSBnY2MKKyBDT1BUUwk9IC1PMiAtZworLUNGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtZlBJQworK0NGTEFHUwk9ICQoQ09QVFMpIC1JLiAtSS4uLy4uIC1mUElDCisgTERGTEFHUwk9IC1zaGFyZWQKKyBJTlNUQUxMCT0gaW5zdGFsbAorIAorZGlmZiAtLWdpdCBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBiL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAoraW5kZXggZjA3ODk5MS4uMTViOTExOCAxMDA2NDQKKy0tLSBhL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAorKysrIGIvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CitAQCAtMjYsNyArMjYsNyBAQCBJTlNUQUxMCT0gaW5zdGFsbAorIFJQX1ZFUlNJT049My44cAorIAorIENPUFRTPS1PMiAtZworLUNGTEFHUz0kKENPUFRTKSAtSS4uLy4uLy4uL2luY2x1ZGUgJy1EUlBfVkVSU0lPTj0iJChSUF9WRVJTSU9OKSInCisrQ0ZMQUdTPSQoQ09QVFMpICctRFJQX1ZFUlNJT049IiQoUlBfVkVSU0lPTikiJworIGFsbDogcnAtcHBwb2Uuc28gcHBwb2UtZGlzY292ZXJ5CisgCisgcHBwb2UtZGlzY292ZXJ5OiBwcHBvZS1kaXNjb3ZlcnkubyBkZWJ1Zy5vCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvMDhzZXR1cGRucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTgyMTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzA4c2V0dXBkbnMKQEAgLTAsMCArMSwxMiBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitQUFBDT05GPS92YXIvcnVuL3BwcC9yZXNvbHYuY29uZgoraWYgWyAtZiAkUFBQQ09ORiBdIDsgdGhlbgorCWlmIFsgLWYgJEFDVFVBTENPTkYgXSA7IHRoZW4KKwkJaWYgWyAhIC1oICRBQ1RVQUxDT05GIC1vICEgImByZWFkbGluayAkQUNUVUFMQ09ORiAyPiYxYCIgPSAiJFBQUENPTkYiIF0gOyB0aGVuCisJCQltdiAkQUNUVUFMQ09ORiAkQUNUVUFMQ09ORi5wcHBvcmlnCisJCWZpCisJZmkKKworCWxuIC1zZiAkUFBQQ09ORiAkQUNUVUFMQ09ORgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC85MnJlbW92ZWRucyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC85MnJlbW92ZWRucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWFkZWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwLzkycmVtb3ZlZG5zCkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitBQ1RVQUxDT05GPS92YXIvcnVuL3Jlc29sdi5jb25mCitpZiBbIC1mICRBQ1RVQUxDT05GLnBwcG9yaWcgXSA7IHRoZW4KKwltdiAkQUNUVUFMQ09ORi5wcHBvcmlnICRBQ1RVQUxDT05GCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NpZmRlZnJvdXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NpZmRlZnJvdXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGRiYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvY2lmZGVmcm91dGUucGF0Y2gKQEAgLTAsMCArMSwyOTIgQEAKK1RoaXMgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQuCitUaGUgb3JpZ2luYWwgcGF0Y2ggaXMgZnJvbSBEZWJpYW4gLyBTdVNFIHRvIGltcGxlbWVudCByZXBsYWNlZGVmYXVsdHJvdXRlCitSZWJhc2VkIGl0IHRvIGZpdCBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuL3N1c2UgcGF0Y2hlc10KKworZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTY6NDA6MDAuNDc4NzE2ODU1ICswODAwCitAQCAtMTk4LDYgKzE5OCwxNiBAQAorICAgICAgICJkaXNhYmxlIGRlZmF1bHRyb3V0ZSBvcHRpb24iLCBPUFRfQUxJQVMgfCBPUFRfQTJDTFIsCisgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0uZGVmYXVsdF9yb3V0ZSB9LAorIAorKyNpZmRlZiBfX2xpbnV4X18KKysgICAgeyAicmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlLAorKyAgICAgICJSZXBsYWNlIGRlZmF1bHQgcm91dGUiLCAxCisrICAgIH0sCisrICAgIHsgIm5vcmVwbGFjZWRlZmF1bHRyb3V0ZSIsIG9fYm9vbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSwKKysgICAgICAiTmV2ZXIgcmVwbGFjZSBkZWZhdWx0IHJvdXRlIiwgT1BUX0EyQ09QWSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwY3Bfd2FudG9wdGlvbnNbMF0ucmVwbGFjZV9kZWZhdWx0X3JvdXRlIH0sCisrI2VuZGlmCisgICAgIHsgInByb3h5YXJwIiwgb19ib29sLCAmaXBjcF93YW50b3B0aW9uc1swXS5wcm94eV9hcnAsCisgICAgICAgIkFkZCBwcm94eSBBUlAgZW50cnkiLCBPUFRfRU5BQkxFfDEsICZpcGNwX2FsbG93b3B0aW9uc1swXS5wcm94eV9hcnAgfSwKKyAgICAgeyAibm9wcm94eWFycCIsIG9fYm9vbCwgJmlwY3BfYWxsb3dvcHRpb25zWzBdLnByb3h5X2FycCwKK0BAIC0yNzEsNyArMjgxLDcgQEAKKyAgICAgaXBfYWN0aXZlX3BrdAorIH07CisgCistc3RhdGljIHZvaWQgaXBjcF9jbGVhcl9hZGRycyBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QpKTsKKytzdGF0aWMgdm9pZCBpcGNwX2NsZWFyX2FkZHJzIF9fUCgoaW50LCB1X2ludDMyX3QsIHVfaW50MzJfdCwgYm9vbCkpOworIHN0YXRpYyB2b2lkIGlwY3Bfc2NyaXB0IF9fUCgoY2hhciAqLCBpbnQpKTsJLyogUnVuIGFuIHVwL2Rvd24gc2NyaXB0ICovCisgc3RhdGljIHZvaWQgaXBjcF9zY3JpcHRfZG9uZSBfX1AoKHZvaWQgKikpOworIAorQEAgLTE3NDIsNyArMTc1MiwxMiBAQAorICAgICBpZiAoIXNpZm5wbW9kZSh1LCBQUFBfSVAsIE5QTU9ERV9RVUVVRSkpCisgCXJldHVybiAwOworICAgICBpZiAod28tPmRlZmF1bHRfcm91dGUpCisrI2lmbmRlZiBfX2xpbnV4X18KKyAJaWYgKHNpZmRlZmF1bHRyb3V0ZSh1LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpKQorKyNlbHNlCisrCWlmIChzaWZkZWZhdWx0cm91dGUodSwgd28tPm91cmFkZHIsIHdvLT5oaXNhZGRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCSAgICBkZWZhdWx0X3JvdXRlX3NldFt1XSA9IDE7CisgICAgIGlmICh3by0+cHJveHlfYXJwKQorIAlpZiAoc2lmcHJveHlhcnAodSwgd28tPmhpc2FkZHIpKQorQEAgLTE4MzAsNyArMTg0NSw4IEBACisgICAgICAqLworICAgICBpZiAoZGVtYW5kKSB7CisgCWlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkciB8fCBoby0+aGlzYWRkciAhPSB3by0+aGlzYWRkcikgeworLQkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIpOworKwkgICAgaXBjcF9jbGVhcl9hZGRycyhmLT51bml0LCB3by0+b3VyYWRkciwgd28tPmhpc2FkZHIsIAorKwkJCQkgICAgICB3by0+cmVwbGFjZV9kZWZhdWx0X3JvdXRlKTsKKyAJICAgIGlmIChnby0+b3VyYWRkciAhPSB3by0+b3VyYWRkcikgeworIAkJd2FybigiTG9jYWwgSVAgYWRkcmVzcyBjaGFuZ2VkIHRvICVJIiwgZ28tPm91cmFkZHIpOworIAkJc2NyaXB0X3NldGVudigiT0xESVBMT0NBTCIsIGlwX250b2Eod28tPm91cmFkZHIpLCAwKTsKK0BAIC0xODU1LDcgKzE4NzEsMTIgQEAKKyAKKyAJICAgIC8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCSAgICBpZiAoaXBjcF93YW50b3B0aW9uc1tmLT51bml0XS5kZWZhdWx0X3JvdXRlKSAKKysjaWZuZGVmIF9fbGludXhfXworIAkJaWYgKHNpZmRlZmF1bHRyb3V0ZShmLT51bml0LCBnby0+b3VyYWRkciwgaG8tPmhpc2FkZHIpKQorKyNlbHNlCisrCQlpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkciwKKysJCQkJCSAgICAgd28tPnJlcGxhY2VfZGVmYXVsdF9yb3V0ZSkpCisrI2VuZGlmCisgCQkgICAgZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkgICAgLyogTWFrZSBhIHByb3h5IEFSUCBlbnRyeSBpZiByZXF1ZXN0ZWQuICovCitAQCAtMTkwNSw3ICsxOTI2LDEyIEBACisgCisgCS8qIGFzc2lnbiBhIGRlZmF1bHQgcm91dGUgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIGlmIHJlcXVpcmVkICovCisgCWlmIChpcGNwX3dhbnRvcHRpb25zW2YtPnVuaXRdLmRlZmF1bHRfcm91dGUpIAorKyNpZm5kZWYgX19saW51eF9fCisgCSAgICBpZiAoc2lmZGVmYXVsdHJvdXRlKGYtPnVuaXQsIGdvLT5vdXJhZGRyLCBoby0+aGlzYWRkcikpCisrI2Vsc2UKKysJICAgIGlmIChzaWZkZWZhdWx0cm91dGUoZi0+dW5pdCwgZ28tPm91cmFkZHIsIGhvLT5oaXNhZGRyLAorKwkJCQkJIHdvLT5yZXBsYWNlX2RlZmF1bHRfcm91dGUpKQorKyNlbmRpZgorIAkJZGVmYXVsdF9yb3V0ZV9zZXRbZi0+dW5pdF0gPSAxOworIAorIAkvKiBNYWtlIGEgcHJveHkgQVJQIGVudHJ5IGlmIHJlcXVlc3RlZC4gKi8KK0BAIC0xOTgzLDcgKzIwMDksNyBAQAorIAlzaWZucG1vZGUoZi0+dW5pdCwgUFBQX0lQLCBOUE1PREVfRFJPUCk7CisgCXNpZmRvd24oZi0+dW5pdCk7CisgCWlwY3BfY2xlYXJfYWRkcnMoZi0+dW5pdCwgaXBjcF9nb3RvcHRpb25zW2YtPnVuaXRdLm91cmFkZHIsCistCQkJIGlwY3BfaGlzb3B0aW9uc1tmLT51bml0XS5oaXNhZGRyKTsKKysJCQkgaXBjcF9oaXNvcHRpb25zW2YtPnVuaXRdLmhpc2FkZHIsIDApOworICAgICB9CisgCisgICAgIC8qIEV4ZWN1dGUgdGhlIGlwLWRvd24gc2NyaXB0ICovCitAQCAtMTk5OSwxMiArMjAyNSwyMSBAQAorICAqIHByb3h5IGFycCBlbnRyaWVzLCBldGMuCisgICovCisgc3RhdGljIHZvaWQKKy1pcGNwX2NsZWFyX2FkZHJzKHVuaXQsIG91cmFkZHIsIGhpc2FkZHIpCisraXBjcF9jbGVhcl9hZGRycyh1bml0LCBvdXJhZGRyLCBoaXNhZGRyLCByZXBsYWNlZGVmYXVsdHJvdXRlKQorICAgICBpbnQgdW5pdDsKKyAgICAgdV9pbnQzMl90IG91cmFkZHI7ICAvKiBsb2NhbCBhZGRyZXNzICovCisgICAgIHVfaW50MzJfdCBoaXNhZGRyOyAgLyogcmVtb3RlIGFkZHJlc3MgKi8KKysgICAgYm9vbCByZXBsYWNlZGVmYXVsdHJvdXRlOworIHsKKy0gICAgaWYgKHByb3h5X2FycF9zZXRbdW5pdF0pIHsKKysgICAgLyogSWYgcmVwbGFjZWRlZmF1bHRyb3V0ZSwgc2lmZGVmYXVsdHJvdXRlIHdpbGwgYmUgY2FsbGVkIHNvb24KKysgICAgICogd2l0aCByZXBsYWNlZGVmYXVsdHJvdXRlIHNldCBhbmQgdGhhdCB3aWxsIG92ZXJ3cml0ZSB0aGUgY3VycmVudAorKyAgICAgKiBkZWZhdWx0IHJvdXRlLiBUaGlzIGlzIHRoZSBjYXNlIG9ubHkgd2hlbiBkb2luZyBkZW1hbmQsIG90aGVyd2lzZQorKyAgICAgKiBkdXJpbmcgZGVtYW5kLCB0aGlzIGNpZmRlZmF1bHRyb3V0ZSB3b3VsZCByZXN0b3JlIHRoZSBvbGQgZGVmYXVsdAorKyAgICAgKiByb3V0ZSB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50IGluIHRoaXMgY2FzZS4gSW4gdGhlIG5vbi1kZW1hbmQKKysgICAgICogY2FzZSwgd2UnbGwgZGVsZXRlIHRoZSBkZWZhdWx0IHJvdXRlIGFuZCByZXN0b3JlIHRoZSBvbGQgaWYgdGhlcmUKKysgICAgICogaXMgb25lIHNhdmVkIGJ5IGFuIHNpZmRlZmF1bHRyb3V0ZSB3aXRoIHJlcGxhY2VkZWZhdWx0cm91dGUuCisrICAgICAqLworKyAgICBpZiAoIXJlcGxhY2VkZWZhdWx0cm91dGUgJiYgZGVmYXVsdF9yb3V0ZV9zZXRbdW5pdF0pIHsKKyAJY2lmcHJveHlhcnAodW5pdCwgaGlzYWRkcik7CisgCXByb3h5X2FycF9zZXRbdW5pdF0gPSAwOworICAgICB9CitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmggcHBwLTIuNC41L3BwcGQvaXBjcC5oCistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9pcGNwLmgJMjAxMC0wNi0zMCAxNjo0MDo0OS41ODYyMDMxMjkgKzA4MDAKK0BAIC03MCw2ICs3MCw3IEBACisgICAgIGJvb2wgb2xkX2FkZHJzOwkJLyogVXNlIG9sZCAoSVAtQWRkcmVzc2VzKSBvcHRpb24/ICovCisgICAgIGJvb2wgcmVxX2FkZHI7CQkvKiBBc2sgcGVlciB0byBzZW5kIElQIGFkZHJlc3M/ICovCisgICAgIGJvb2wgZGVmYXVsdF9yb3V0ZTsJCS8qIEFzc2lnbiBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworKyAgICBib29sIHJlcGxhY2VfZGVmYXVsdF9yb3V0ZTsgLyogUmVwbGFjZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaW50ZXJmYWNlPyAqLworICAgICBib29sIHByb3h5X2FycDsJCS8qIE1ha2UgcHJveHkgQVJQIGVudHJ5IGZvciBwZWVyPyAqLworICAgICBib29sIG5lZ192ajsJCS8qIFZhbiBKYWNvYnNvbiBDb21wcmVzc2lvbj8gKi8KKyAgICAgYm9vbCBvbGRfdmo7CQkvKiB1c2Ugb2xkIChzaG9ydCkgZm9ybSBvZiBWSiBvcHRpb24/ICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjggcHBwLTIuNC41L3BwcGQvcHBwZC44CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wcHBkLjgJMjAxMC0wNi0zMCAxNjo0Mjo0Ny4xMDI0MTM4NTkgKzA4MDAKK0BAIC0xMjEsNiArMTIxLDEzIEBACisgVGhpcyBlbnRyeSBpcyByZW1vdmVkIHdoZW4gdGhlIFBQUCBjb25uZWN0aW9uIGlzIGJyb2tlbi4gIFRoaXMgb3B0aW9uCisgaXMgcHJpdmlsZWdlZCBpZiB0aGUgXGZJbm9kZWZhdWx0cm91dGVcZlIgb3B0aW9uIGhhcyBiZWVuIHNwZWNpZmllZC4KKyAuVFAKKysuQiByZXBsYWNlZGVmYXVsdHJvdXRlCisrVGhpcyBvcHRpb24gaXMgYSBmbGFnIHRvIHRoZSBkZWZhdWx0cm91dGUgb3B0aW9uLiBJZiBkZWZhdWx0cm91dGUgaXMKKytzZXQgYW5kIHRoaXMgZmxhZyBpcyBhbHNvIHNldCwgcHBwZCByZXBsYWNlcyBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlCisrd2l0aCB0aGUgbmV3IGRlZmF1bHQgcm91dGUuCisrCisrCisrLlRQCisgLkIgZGlzY29ubmVjdCBcZklzY3JpcHQKKyBFeGVjdXRlIHRoZSBjb21tYW5kIHNwZWNpZmllZCBieSBcZklzY3JpcHRcZlIsIGJ5IHBhc3NpbmcgaXQgdG8gYQorIHNoZWxsLCBhZnRlcgorQEAgLTcxNyw3ICs3MjQsMTIgQEAKKyAuVFAKKyAuQiBub2RlZmF1bHRyb3V0ZQorIERpc2FibGUgdGhlIFxmSWRlZmF1bHRyb3V0ZVxmUiBvcHRpb24uICBUaGUgc3lzdGVtIGFkbWluaXN0cmF0b3Igd2hvCistd2lzaGVzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSBjcmVhdGluZyBkZWZhdWx0IHJvdXRlcyB3aXRoIHBwcGQKKyt3aXNoZXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGFkZGluZyBhIGRlZmF1bHQgcm91dGUgd2l0aCBwcHBkCisrY2FuIGRvIHNvIGJ5IHBsYWNpbmcgdGhpcyBvcHRpb24gaW4gdGhlIC9ldGMvcHBwL29wdGlvbnMgZmlsZS4KKysuVFAKKysuQiBub3JlcGxhY2VkZWZhdWx0cm91dGUKKytEaXNhYmxlIHRoZSBcZklyZXBsYWNlZGVmYXVsdHJvdXRlXGZSIG9wdGlvbi4gVGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHdobworK3dpc2hlcyB0byBwcmV2ZW50IHVzZXJzIGZyb20gcmVwbGFjaW5nIGEgZGVmYXVsdCByb3V0ZSB3aXRoIHBwcGQKKyBjYW4gZG8gc28gYnkgcGxhY2luZyB0aGlzIG9wdGlvbiBpbiB0aGUgL2V0Yy9wcHAvb3B0aW9ucyBmaWxlLgorIC5UUAorIC5CIG5vZGVmbGF0ZQorZGlmZiAtdXJOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oIHBwcC0yLjQuNS9wcHBkL3BwcGQuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcHBwZC5oCTIwMTAtMDYtMzAgMTY6NDM6MzYuNTE0MTQ4MzI3ICswODAwCitAQCAtNjQzLDcgKzY0MywxMSBAQAorIGludCAgY2lmNmFkZHIgX19QKChpbnQsIGV1aTY0X3QsIGV1aTY0X3QpKTsKKyAJCQkJLyogUmVtb3ZlIGFuIElQdjYgYWRkcmVzcyBmcm9tIGkvZiAqLworICNlbmRpZgorKyNpZm5kZWYgX19saW51eF9fCisgaW50ICBzaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisrI2Vsc2UKKytpbnQgIHNpZmRlZmF1bHRyb3V0ZSBfX1AoKGludCwgdV9pbnQzMl90LCB1X2ludDMyX3QsIGJvb2wgcmVwbGFjZV9kZWZhdWx0X3J0KSk7CisrI2VuZGlmCisgCQkJCS8qIENyZWF0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCisgaW50ICBjaWZkZWZhdWx0cm91dGUgX19QKChpbnQsIHVfaW50MzJfdCwgdV9pbnQzMl90KSk7CisgCQkJCS8qIERlbGV0ZSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggaS9mICovCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9zeXMtbGludXguYyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvc3lzLWxpbnV4LmMJMjAxMC0wNi0zMCAxNTo1MToxMi4wNTAxNjYzOTggKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9zeXMtbGludXguYwkyMDEwLTA2LTMwIDE2OjU0OjAwLjM2MjcxNjIzMSArMDgwMAorQEAgLTIwNiw2ICsyMDYsOCBAQAorIAorIHN0YXRpYyBpbnQJaWZfaXNfdXA7CS8qIEludGVyZmFjZSBoYXMgYmVlbiBtYXJrZWQgdXAgKi8KKyBzdGF0aWMgaW50CWhhdmVfZGVmYXVsdF9yb3V0ZTsJLyogR2F0ZXdheSBmb3IgZGVmYXVsdCByb3V0ZSBhZGRlZCAqLworK3N0YXRpYyBzdHJ1Y3QgcnRlbnRyeSBvbGRfZGVmX3J0OyAgICAgICAvKiBPbGQgZGVmYXVsdCByb3V0ZSAqLworK3N0YXRpYyBpbnQgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3Q7ICAvKiByZXBsYWNlIGFuZCByZXN0b3JlIG9sZCBkZWZhdWx0IHJ0ICovCisgc3RhdGljIHVfaW50MzJfdCBwcm94eV9hcnBfYWRkcjsJLyogQWRkciBmb3IgcHJveHkgYXJwIGVudHJ5IGFkZGVkICovCisgc3RhdGljIGNoYXIgcHJveHlfYXJwX2RldlsxNl07CQkvKiBEZXZpY2UgZm9yIHByb3h5IGFycCBlbnRyeSAqLworIHN0YXRpYyB1X2ludDMyX3Qgb3VyX29sZF9hZGRyOwkJLyogZm9yIGRldGVjdGluZyBhZGRyZXNzIGNoYW5nZXMgKi8KK0BAIC0xNTM3LDYgKzE1MzksOSBAQAorIAlwID0gTlVMTDsKKyAgICAgfQorIAorKyAgICBTRVRfU0FfRkFNSUxZIChydC0+cnRfZHN0LCAgICAgQUZfSU5FVCk7CisrICAgIFNFVF9TQV9GQU1JTFkgKHJ0LT5ydF9nYXRld2F5LCBBRl9JTkVUKTsKKysKKyAgICAgU0lOX0FERFIocnQtPnJ0X2RzdCkgPSBzdHJ0b3VsKGNvbHNbcm91dGVfZGVzdF9jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nYXRld2F5KSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9nd19jb2xdLCBOVUxMLCAxNik7CisgICAgIFNJTl9BRERSKHJ0LT5ydF9nZW5tYXNrKSA9IHN0cnRvdWwoY29sc1tyb3V0ZV9tYXNrX2NvbF0sIE5VTEwsIDE2KTsKK0BAIC0xNjA2LDIwICsxNjExLDUxIEBACisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICoKKyAgKiBzaWZkZWZhdWx0cm91dGUgLSBhc3NpZ24gYSBkZWZhdWx0IHJvdXRlIHRocm91Z2ggdGhlIGFkZHJlc3MgZ2l2ZW4uCistICovCistCistaW50IHNpZmRlZmF1bHRyb3V0ZSAoaW50IHVuaXQsIHVfaW50MzJfdCBvdXJhZGRyLCB1X2ludDMyX3QgZ2F0ZXdheSkKKy17CistICAgIHN0cnVjdCBydGVudHJ5IHJ0OworLQorLSAgICBpZiAoZGVmYXVsdHJvdXRlX2V4aXN0cygmcnQpICYmIHN0cmNtcChydC5ydF9kZXYsIGlmbmFtZSkgIT0gMCkgeworLQlpZiAocnQucnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkKKy0JICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGV4aXN0aW5nIGRlZmF1bHQgcm91dGUgdmlhICVJIiwKKy0JCSAgU0lOX0FERFIocnQucnRfZ2F0ZXdheSkpOworLQllbHNlCistCSAgICBlcnJvcigibm90IHJlcGxhY2luZyBleGlzdGluZyBkZWZhdWx0IHJvdXRlIHRocm91Z2ggJXMiLAorLQkJICBydC5ydF9kZXYpOworLQlyZXR1cm4gMDsKKysgKgorKyAqIElmIHRoZSBnbG9iYWwgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgZmxhZyBpcyBzZXQsIHRoZW4gdGhpcyBmdW5jdGlvbgorKyAqIGFscmVhZHkgcmVwbGFjZWQgdGhlIG9yaWdpbmFsIHN5c3RlbSBkZWZhdWx0cm91dGUgd2l0aCBzb21lIG90aGVyCisrICogcm91dGUgYW5kIGl0IHNob3VsZCBqdXN0IHJlcGxhY2UgdGhlIGN1cnJlbnQgZGVmYXVsdHJvdXRlIHdpdGgKKysgKiBhbm90aGVyIG9uZSwgd2l0aG91dCBzYXZpbmcgdGhlIGN1cnJlbnQgcm91dGUuIFVzZTogZGVtYW5kIG1vZGUsCisrICogd2hlbiBwcHBkIHNldHMgZmlyc3QgYSBkZWZhdWx0cm91dGUgaXQgaXQncyB0ZW1wb3JhcnkgcHBwMCBhZGRyZXNzZXMKKysgKiBhbmQgdGhlbiBjaGFuZ2VzIHRoZSB0ZW1wb3JhcnkgYWRkcmVzc2VzIHRvIHRoZSBhZGRyZXNzZXMgZm9yIHRoZSByZWFsCisrICogcHBwIGNvbm5lY3Rpb24gd2hlbiBpdCBoYXMgY29tZSB1cC4KKysgKi8KKysKKytpbnQgc2lmZGVmYXVsdHJvdXRlIChpbnQgdW5pdCwgdV9pbnQzMl90IG91cmFkZHIsIHVfaW50MzJfdCBnYXRld2F5LCBib29sIHJlcGxhY2UpCisreworKyAgICBzdHJ1Y3QgcnRlbnRyeSBydCwgdG1wX3J0OworKyAgICBzdHJ1Y3QgcnRlbnRyeSAqZGVsX3J0ID0gTlVMTDsKKysKKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0KSB7CisrCS8qIFdlIGhhdmUgYWxyZWFkeSByZWNsYWNlZCB0aGUgb3JpZ2luYWwgZGVmYXVsdHJvdXRlLCBpZiB3ZQorKyAgICAgICAgICogYXJlIGNhbGxlZCBhZ2Fpbiwgd2Ugd2lsbCBkZWxldGUgdGhlIGN1cnJlbnQgZGVmYXVsdCByb3V0ZQorKyAgICAgICAgICogYW5kIHNldCB0aGUgbmV3IGRlZmF1bHQgcm91dGUgaW4gdGhpcyBmdW5jdGlvbi4gIAorKyAgICAgICAgICogLSB0aGlzIGlzIG5vcm1hbGx5IG9ubHkgdGhlIGNhc2UgdGhlIGRvaW5nIGRlbWFuZDogKi8KKysJaWYgKGRlZmF1bHRyb3V0ZV9leGlzdHMoICZ0bXBfcnQgKSkKKysJCWRlbF9ydCA9ICZ0bXBfcnQ7CisrICAgIH0gZWxzZSBpZiAoIGRlZmF1bHRyb3V0ZV9leGlzdHMoICZvbGRfZGVmX3J0ICAgICAgICAgICAgICAgICkgJiYKKysJICAgICAgICAgICAgICAgICAgICAgc3RyY21wKCAgb2xkX2RlZl9ydC5ydF9kZXYsIGlmbmFtZSApICE9IDApIHsKKysJLyogV2UgZGlkIG5vdCB5ZXQgcmVwbGFjZSBhbiBleGlzdGluZyBkZWZhdWx0IHJvdXRlLCBsZXQncworKwkgKiBjaGVjayBpZiB3ZSBzaG91bGQgc2F2ZSBhbmQgcmVwbGFjZSBhIGRlZmF1bHQgcm91dGU6CisrICAgICAgICAgKi8KKysJdV9pbnQzMl90IG9sZF9nYXRld2F5ID0gU0lOX0FERFIob2xkX2RlZl9ydC5ydF9nYXRld2F5KTsKKysJaWYgKG9sZF9nYXRld2F5ICE9IGdhdGV3YXkpIHsKKysJICAgIGlmICghcmVwbGFjZSkgeworKwkgICAgICAgIGVycm9yKCJub3QgcmVwbGFjaW5nIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIG9sZF9nYXRld2F5KTsKKysJCXJldHVybiAwOworKwkgICAgfSBlbHNlIHsKKysJCS8vIHdlIG5lZWQgdG8gY29weSBydF9kZXYgYmVjYXVzZSB3ZSBuZWVkIGl0IHBlcm1hbmVudCB0b286CisrCQljaGFyICogdG1wX2RldiA9IG1hbGxvYyhzdHJsZW4ob2xkX2RlZl9ydC5ydF9kZXYpKzEpOworKwkJc3RyY3B5KHRtcF9kZXYsIG9sZF9kZWZfcnQucnRfZGV2KTsKKysJCW9sZF9kZWZfcnQucnRfZGV2ID0gdG1wX2RldjsKKysKKysJCW5vdGljZSgicmVwbGFjaW5nIG9sZCBkZWZhdWx0IHJvdXRlIHRvICVzIFslSV0iLAorKwkJCW9sZF9kZWZfcnQucnRfZGV2LCBvbGRfZ2F0ZXdheSk7CisrCSAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAxOworKwkJZGVsX3J0ID0gJm9sZF9kZWZfcnQ7CisrCSAgICB9CisrCX0KKyAgICAgfQorIAorICAgICBtZW1zZXQgKCZydCwgMCwgc2l6ZW9mIChydCkpOworQEAgLTE2MzgsNiArMTY3NCwxMiBAQAorIAkgICAgZXJyb3IoImRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0FERFJUKTogJW0iKTsKKyAJcmV0dXJuIDA7CisgICAgIH0KKysgICAgaWYgKGRlZmF1bHRfcnRfcmVwbF9yZXN0ICYmIGRlbF9ydCkKKysgICAgICAgIGlmIChpb2N0bChzb2NrX2ZkLCBTSU9DREVMUlQsIGRlbF9ydCkgPCAwKSB7CisrCSAgICBpZiAoICEgb2tfZXJyb3IgKCBlcnJubyApKQorKwkgICAgICAgIGVycm9yKCJkZWwgb2xkIGRlZmF1bHQgcm91dGUgaW9jdGwoU0lPQ0RFTFJUKTogJW0oJWQpIiwgZXJybm8pOworKwkgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisgCisgICAgIGhhdmVfZGVmYXVsdF9yb3V0ZSA9IDE7CisgICAgIHJldHVybiAxOworQEAgLTE2NzMsNiArMTcxNSwxNiBAQAorIAkgICAgcmV0dXJuIDA7CisgCX0KKyAgICAgfQorKyAgICBpZiAoZGVmYXVsdF9ydF9yZXBsX3Jlc3QpIHsKKysJbm90aWNlKCJyZXN0b3Jpbmcgb2xkIGRlZmF1bHQgcm91dGUgdG8gJXMgWyVJXSIsCisrCQkJb2xkX2RlZl9ydC5ydF9kZXYsIFNJTl9BRERSKG9sZF9kZWZfcnQucnRfZ2F0ZXdheSkpOworKyAgICAgICAgaWYgKGlvY3RsKHNvY2tfZmQsIFNJT0NBRERSVCwgJm9sZF9kZWZfcnQpIDwgMCkgeworKwkgICAgaWYgKCAhIG9rX2Vycm9yICggZXJybm8gKSkKKysJICAgICAgICBlcnJvcigicmVzdG9yZSBkZWZhdWx0IHJvdXRlIGlvY3RsKFNJT0NBRERSVCk6ICVtKCVkKSIsIGVycm5vKTsKKysJICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgICAgZGVmYXVsdF9ydF9yZXBsX3Jlc3QgPSAwOworKyAgICB9CisgCisgICAgIHJldHVybiAxOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jb3B0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9jb3B0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2ZmMDZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2NvcHRzLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3BwcDogdXNlIGJ1aWxkIHN5c3RlbSBDRkxBR1Mgd2hlbiBjb21waWxpbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK092ZXJyaWRlIHRoZSBoYXJkLWNvZGVkIENPUFRTIG1ha2UgdmFyaWFibGVzIHdpdGgKK0NGTEFHUy4gIEFkZCBDT1BUUyBpbnRvIG9uZSBNYWtlZmlsZSB0aGF0IGRpZCBub3QKK3VzZSBpdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8anNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CisrKysgYi9wcHBkL3BsdWdpbnMvcmFkaXVzL01ha2VmaWxlLmxpbnV4CitAQCAtMTIsNyArMTIsNyBAQCBWRVJTSU9OID0gJChzaGVsbCBhd2sgLUYgJyInICcvVkVSU0lPTi8gCisgSU5TVEFMTAk9IGluc3RhbGwKKyAKKyBQTFVHSU49cmFkaXVzLnNvIHJhZGF0dHIuc28gcmFkcmVhbG1zLnNvCistQ0ZMQUdTPS1JLiAtSS4uLy4uIC1JLi4vLi4vLi4vaW5jbHVkZSAtTzIgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorK0NGTEFHUz0tSS4gLUkuLi8uLiAtSS4uLy4uLy4uL2luY2x1ZGUgJChDT1BUUykgLWZQSUMgLURSQ19MT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorIAorICMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBNaWNyb3NvZnQncworICMgTVMtQ0hBUCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9maXgtQ1ZFLTIwMTUtMzMxMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWVkYjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3BwcDogQnVmZmVyIG92ZXJmbG93IGluIHJhZGl1cyBwbHVnaW4KKworRnJvbTogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP21zZz01O2J1Zz03ODI0NTAKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitPbiBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDY1NTM1IHByb2Nlc3NlcyBydW5uaW5nLCBwcHBkIGFib3J0cyB3aGVuCitzZW5kaW5nIGEgInN0YXJ0IiBhY2NvdW50aW5nIG1lc3NhZ2UgdG8gdGhlIFJBRElVUyBzZXJ2ZXIgYmVjYXVzZSBvZiBhCitidWZmZXIgb3ZlcmZsb3cgaW4gcmNfbWtzaWQuCisKK1RoZSBwcm9jZXNzIGlkIGlzIHVzZWQgaW4gcmNfbWtzaWQgdG8gZ2VuZXJhdGUgYSBwc2V1ZG8tdW5pcXVlIHN0cmluZywKK2Fzc3VtaW5nIHRoYXQgdGhlIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGlkIHdpbGwgYmUgYXQgbW9zdCA0CitjaGFyYWN0ZXJzIChGRkZGKS4gX19zcHJpbnRmX2NoaygpLCB1c2VkIHdoZW4gY29tcGlsaW5nIHdpdGgKK29wdGltaXphdGlvbiBsZXZlbHMgZ3JlYXRlciB0aGFuIDAgYW5kIEZPUlRJRllfU09VUkNFLCBkZXRlY3RzIHRoZQorYnVmZmVyIG92ZXJmbG93IGFuZCBtYWtlcyBwcHBkIGNyYXNoLgorCitUaGUgZm9sbG93aW5nIHBhdGNoIGZpeGVzIHRoZSBwcm9ibGVtLgorCistLS0gcHBwLTIuNC42Lm9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKKysrKyBwcHAtMi40LjYvcHBwZC9wbHVnaW5zL3JhZGl1cy91dGlsLmMKK0BAIC03Nyw3ICs3Nyw3IEBAIHJjX21rc2lkICh2b2lkKQorICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBjbnQgPSAwOworICAgc3ByaW50ZiAoYnVmLCAiJTA4bFglMDRYJTAyaFgiLAorIAkgICAodW5zaWduZWQgbG9uZyBpbnQpIHRpbWUgKE5VTEwpLAorLQkgICAodW5zaWduZWQgaW50KSBnZXRwaWQgKCksCisrCSAgICh1bnNpZ25lZCBpbnQpIGdldHBpZCAoKSAlIDY1NTM1LAorIAkgICBjbnQgJiAweEZGKTsKKyAgIGNudCsrOworICAgcmV0dXJuIGJ1ZjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0IGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL2luaXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGMwMTM2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pbml0CkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyAgIC9ldGMvaW5pdC5kL3BwcDogc3RhcnQgb3Igc3RvcCBQUFAgbGluay4KKyMKKyMgSWYgeW91IHdhbnQgUFBQIHN0YXJ0ZWQgb24gYm9vdCB0aW1lIChtb3N0IGRpYWx1cCBzeXN0ZW1zIHdvbid0IG5lZWQgaXQpCisjIHJlbmFtZSB0aGUgL2V0Yy9wcHAvbm9fcHBwX29uX2Jvb3QgZmlsZSB0byAvZXRjL3BwcC9wcHBfb25fYm9vdCwgYW5kCisjIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBjb21tZW50cyBpbiB0aGF0IGZpbGUuCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC14IC91c3Ivc2Jpbi9wcHBkIC1hIC1mIC9ldGMvcHBwL3BwcF9vbl9ib290IHx8IGV4aXQgMAoraWYgWyAteCAvZXRjL3BwcC9wcHBfb25fYm9vdCBdOyB0aGVuIFJVTkZJTEU9MTsgZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgZWNobyAtbiAiU3RhcnRpbmcgdXAgUFBQIGxpbms6IHBwcGQiCisgICAgICBpZiBbICIkUlVORklMRSIgPSAiMSIgXTsgdGhlbgorICAgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgICAgZWxzZQorICAgICAgICBwcHBkIGNhbGwgcHJvdmlkZXIKKyAgICAgIGZpCisgICAgICBlY2hvICIuIgorICAgIDs7CisgIHN0b3ApCisgICAgICBlY2hvIC1uICJTaHV0dGluZyBkb3duIFBQUCBsaW5rOiBwcHBkIgorICAgICAgaWYgWyAiJFJVTkZJTEUiID0gIjEiIF07IHRoZW4KKyAgICAgICAgcG9mZgorICAgICAgZWxzZQorICAgICAgICBwb2ZmIHByb3ZpZGVyCisgICAgICBmaQorICAgICAgZWNobyAiLiIKKyAgICA7OworICBzdGF0dXMpCisgICAgc3RhdHVzIC91c3Ivc2Jpbi9wcHBkOworICAgIGV4aXQgJD8KKyAgICA7OworICByZXN0YXJ0fGZvcmNlLXJlbG9hZCkKKyAgICBlY2hvIC1uICJSZXN0YXJ0aW5nIFBQUCBsaW5rOiBwcHBkIgorICAgIGlmIFsgIiRSVU5GSUxFIiA9ICIxIiBdOyB0aGVuICAgICAgCisgICAgICBwb2ZmCisgICAgICBzbGVlcCA1CisgICAgICAvZXRjL3BwcC9wcHBfb25fYm9vdAorICAgIGVsc2UgICAgICAgICAgICAgICAgICAKKyAgICAgIHBvZmYgcHJvdmlkZXIKKyAgICAgIHNsZWVwIDUKKyAgICAgIHBwcGQgY2FsbCBwcm92aWRlcgorICAgIGZpCisgICAgZWNobyAiLiIKKyAgICA7OworICAqKQorICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3BwcCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydHxmb3JjZS1yZWxvYWR9IgorICAgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93biBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC1kb3duCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA2ZDM1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtZG93bgpAQCAtMCwwICsxLDQzIEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC1kb3duLHYgMS4yIDE5OTgvMDIvMTAgMjE6MjE6NTUgcGhpbCBFeHAgJAorIworIyBUaGlzIHNjcmlwdCBpcyBydW4gYnkgdGhlIHBwcGQgX2FmdGVyXyB0aGUgbGluayBpcyBicm91Z2h0IGRvd24uCisjIEl0IHVzZXMgcnVuLXBhcnRzIHRvIHJ1biBzY3JpcHRzIGluIC9ldGMvcHBwL2lwLWRvd24uZCwgc28gdG8gZGVsZXRlCisjIHJvdXRlcywgdW5zZXQgSVAgYWRkcmVzc2VzIGV0Yy4geW91IHNob3VsZCBjcmVhdGUgc2NyaXB0KHMpIHRoZXJlLgorIworIyBCZSBhd2FyZSB0aGF0IG90aGVyIHBhY2thZ2VzIG1heSBpbmNsdWRlIC9ldGMvcHBwL2lwLWRvd24uZCBzY3JpcHRzIChuYW1lZAorIyBhZnRlciB0aGF0IHBhY2thZ2UpLCBzbyBjaG9vc2UgbG9jYWwgc2NyaXB0IG5hbWVzIHdpdGggdGhhdCBpbiBtaW5kLgorIworIyBUaGlzIHNjcmlwdCBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKyMgICAgQXJnICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlCisjICAgICQxICAgSW50ZXJmYWNlIG5hbWUgICAgICAgICAgICAgICAgcHBwMAorIyAgICAkMiAgIFRoZSB0dHkgICAgICAgICAgICAgICAgICAgICAgIHR0eVMxCisjICAgICQzICAgVGhlIGxpbmsgc3BlZWQgICAgICAgICAgICAgICAgMzg0MDAKKyMgICAgJDQgICBMb2NhbCBJUCBudW1iZXIgICAgICAgICAgICAgICAxMi4zNC41Ni43OAorIyAgICAkNSAgIFBlZXIgIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljk5CisjICAgICQ2ICAgT3B0aW9uYWwgYGBpcHBhcmFtJycgdmFsdWUgICAgZm9vCisKKyMgVGhlICBlbnZpcm9ubWVudCBpcyBjbGVhcmVkIGJlZm9yZSBleGVjdXRpbmcgdGhpcyBzY3JpcHQKKyMgc28gdGhlIHBhdGggbXVzdCBiZSByZXNldAorUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluOi91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4KK2V4cG9ydCBQQVRICisjIFRoZXNlIHZhcmlhYmxlcyBhcmUgZm9yIHRoZSB1c2Ugb2YgdGhlIHNjcmlwdHMgcnVuIGJ5IHJ1bi1wYXJ0cworUFBQX0lGQUNFPSIkMSIKK1BQUF9UVFk9IiQyIgorUFBQX1NQRUVEPSIkMyIKK1BQUF9MT0NBTD0iJDQiCitQUFBfUkVNT1RFPSIkNSIKK1BQUF9JUFBBUkFNPSIkNiIKK2V4cG9ydCBQUFBfSUZBQ0UgUFBQX1RUWSBQUFBfU1BFRUQgUFBQX0xPQ0FMIFBQUF9SRU1PVEUgUFBQX0lQUEFSQU0KKworIyBhcyBhbiBhZGRpdGlvbmFsIGNvbnZlbmllbmNlLCAkUFBQX1RUWU5BTUUgaXMgc2V0IHRvIHRoZSB0dHkgbmFtZSwKKyMgc3RyaXBwZWQgb2YgL2Rldi8gKGlmIHByZXNlbnQpIGZvciBlYXNpZXIgbWF0Y2hpbmcuCitQUFBfVFRZTkFNRT1gL3Vzci9iaW4vYmFzZW5hbWUgIiQyImAKK2V4cG9ydCBQUFBfVFRZTkFNRSAKKworIyBNYWluIFNjcmlwdCBzdGFydHMgaGVyZQorCitydW4tcGFydHMgL2V0Yy9wcHAvaXAtZG93bi5kCisKKyMgbGFzdCBsaW5lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtdXAgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvaXAtdXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmMyZmFlOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9pcC11cApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKyMKKyMgJElkOiBpcC11cCx2IDEuMiAxOTk4LzAyLzEwIDIxOjI1OjM0IHBoaWwgRXhwICQKKyMKKyMgVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IHRoZSBwcHBkIGFmdGVyIHRoZSBsaW5rIGlzIGVzdGFibGlzaGVkLgorIyBJdCB1c2VzIHJ1bi1wYXJ0cyB0byBydW4gc2NyaXB0cyBpbiAvZXRjL3BwcC9pcC11cC5kLCBzbyB0byBhZGQgcm91dGVzLAorIyBzZXQgSVAgYWRkcmVzcywgcnVuIHRoZSBtYWlscSBldGMuIHlvdSBzaG91bGQgY3JlYXRlIHNjcmlwdChzKSB0aGVyZS4KKyMKKyMgQmUgYXdhcmUgdGhhdCBvdGhlciBwYWNrYWdlcyBtYXkgaW5jbHVkZSAvZXRjL3BwcC9pcC11cC5kIHNjcmlwdHMgKG5hbWVkCisjIGFmdGVyIHRoYXQgcGFja2FnZSksIHNvIGNob29zZSBsb2NhbCBzY3JpcHQgbmFtZXMgd2l0aCB0aGF0IGluIG1pbmQuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorIyAgICBBcmcgIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKKyMgICAgJDEgICBJbnRlcmZhY2UgbmFtZSAgICAgICAgICAgICAgICBwcHAwCisjICAgICQyICAgVGhlIHR0eSAgICAgICAgICAgICAgICAgICAgICAgdHR5UzEKKyMgICAgJDMgICBUaGUgbGluayBzcGVlZCAgICAgICAgICAgICAgICAzODQwMAorIyAgICAkNCAgIExvY2FsIElQIG51bWJlciAgICAgICAgICAgICAgIDEyLjM0LjU2Ljc4CisjICAgICQ1ICAgUGVlciAgSVAgbnVtYmVyICAgICAgICAgICAgICAgMTIuMzQuNTYuOTkKKyMgICAgJDYgICBPcHRpb25hbCBgYGlwcGFyYW0nJyB2YWx1ZSAgICBmb28KKworIyBUaGUgIGVudmlyb25tZW50IGlzIGNsZWFyZWQgYmVmb3JlIGV4ZWN1dGluZyB0aGlzIHNjcmlwdAorIyBzbyB0aGUgcGF0aCBtdXN0IGJlIHJlc2V0CitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL3NiaW46L3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbgorZXhwb3J0IFBBVEgKKyMgVGhlc2UgdmFyaWFibGVzIGFyZSBmb3IgdGhlIHVzZSBvZiB0aGUgc2NyaXB0cyBydW4gYnkgcnVuLXBhcnRzCitQUFBfSUZBQ0U9IiQxIgorUFBQX1RUWT0iJDIiCitQUFBfU1BFRUQ9IiQzIgorUFBQX0xPQ0FMPSIkNCIKK1BQUF9SRU1PVEU9IiQ1IgorUFBQX0lQUEFSQU09IiQ2IgorZXhwb3J0IFBQUF9JRkFDRSBQUFBfVFRZIFBQUF9TUEVFRCBQUFBfTE9DQUwgUFBQX1JFTU9URSBQUFBfSVBQQVJBTQorCisKKyMgYXMgYW4gYWRkaXRpb25hbCBjb252ZW5pZW5jZSwgJFBQUF9UVFlOQU1FIGlzIHNldCB0byB0aGUgdHR5IG5hbWUsCisjIHN0cmlwcGVkIG9mIC9kZXYvIChpZiBwcmVzZW50KSBmb3IgZWFzaWVyIG1hdGNoaW5nLgorUFBQX1RUWU5BTUU9YC91c3IvYmluL2Jhc2VuYW1lICIkMiJgCitleHBvcnQgUFBQX1RUWU5BTUUgCisKKyMgTWFpbiBTY3JpcHQgc3RhcnRzIGhlcmUKKworcnVuLXBhcnRzIC9ldGMvcHBwL2lwLXVwLmQKKworIyBsYXN0IGxpbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5NzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9tYWtlZmlsZS1yZW1vdmUtaGFyZC11c3ItcmVmZXJlbmNlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1RoZSBwYXRjaCBjb21lcyBmcm9tIE9wZW5FbWJlZGRlZC4KK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBkYXRlZCBmcm9tIE9FLUNsYXNzaWMgdG8gaW5jbHVkZSB0aGUgcGNhcCBodW5rLgorU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBPYmVycml0dGVyIDxvYmlAb3BlbmRyZWFtYm94Lm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE3OjA4OjIxLjgwNjM2MzA0MiArMDgwMAorQEAgLTExNywxMCArMTE3LDEwIEBACisgI0xJQlMgICAgICs9IC1sc2hhZG93ICQoTElCUykKKyBlbmRpZgorIAorLWlmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisrI2lmbmVxICgkKHdpbGRjYXJkIC91c3IvaW5jbHVkZS9jcnlwdC5oKSwpCisgQ0ZMQUdTICArPSAtREhBVkVfQ1JZUFRfSD0xCisgTElCUwkrPSAtbGNyeXB0CistZW5kaWYKKysjZW5kaWYKKyAKKyBpZmRlZiBORUVEREVTCisgaWZuZGVmIFVTRV9DUllQVAorQEAgLTE2OSwxMCArMTY5LDEwIEBACisgZW5kaWYKKyAKKyBpZmRlZiBGSUxURVIKKy1pZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorKyNpZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2luY2x1ZGUvcGNhcC1icGYuaCksKQorIExJQlMgICAgKz0gLWxwY2FwCisgQ0ZMQUdTICArPSAtRFBQUF9GSUxURVIKKy1lbmRpZgorKyNlbmRpZgorIGVuZGlmCisgCisgaWZkZWYgSEFWRV9JTkVUNgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDliYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSw5NSBAQAorVGhlIHBhdGNoIGNvbWVzIGZyb20gT3BlbkVtYmVkZGVkCitSZWJhc2VkIGZvciBwcHAtMi40LjUuIERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL2NoYXQvTWFrZWZpbGUubGludXggcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9jaGF0L01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L2NoYXQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MTozMC40NTAxMTg0NDYgKzA4MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgCisgaW5zdGFsbDogY2hhdAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgY2hhdCAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBjaGF0ICQoQklORElSKQorIAkkKElOU1RBTEwpIC1jIC1tIDY0NCBjaGF0LjggJChNQU5ESVIpCisgCisgY2xlYW46CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUyOjExLjIxNDE3MDYwNyArMDgwMAorQEAgLTk5LDcgKzk5LDcgQEAKKyBDRkxBR1MJKz0gLURVU0VfU1JQIC1ET1BFTlNTTCAtSS91c3IvbG9jYWwvc3NsL2luY2x1ZGUKKyBMSUJTCSs9IC1sc3JwIC1ML3Vzci9sb2NhbC9zc2wvbGliIC1sY3J5cHRvCisgVEFSR0VUUwkrPSBzcnAtZW50cnkKKy1FWFRSQUlOU1RBTEwgPSAkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBzcnAtZW50cnkgJChCSU5ESVIpL3NycC1lbnRyeQorK0VYVFJBSU5TVEFMTCA9ICQoSU5TVEFMTCkgLWMgLW0gNTU1IHNycC1lbnRyeSAkKEJJTkRJUikvc3JwLWVudHJ5CisgTUFOUEFHRVMgKz0gc3JwLWVudHJ5LjgKKyBFWFRSQUNMRUFOICs9IHNycC1lbnRyeS5vCisgTkVFRERFUz15CitAQCAtMjAwLDcgKzIwMCw3IEBACisgaW5zdGFsbDogcHBwZAorIAlta2RpciAtcCAkKEJJTkRJUikgJChNQU5ESVIpCisgCSQoRVhUUkFJTlNUQUxMKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDU1NSBwcHBkICQoQklORElSKS9wcHBkCisrCSQoSU5TVEFMTCkgLWMgLW0gNTU1IHBwcGQgJChCSU5ESVIpL3BwcGQKKyAJaWYgY2hncnAgcHBwdXNlcnMgJChCSU5ESVIpL3BwcGQgMj4vZGV2L251bGw7IHRoZW4gXAorIAkgIGNobW9kIG8tcngsdStzICQoQklORElSKS9wcHBkOyBmaQorIAkkKElOU1RBTEwpIC1jIC1tIDQ0NCBwcHBkLjggJChNQU5ESVIpCitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9yYWRpdXMvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDc2NzYxODcgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JhZGl1cy9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjQ3Ljc1MDE4MjI2NyArMDgwMAorQEAgLTM2LDExICszNiwxMSBAQAorIAorIGluc3RhbGw6IGFsbAorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKExJQkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA3NTUgcmFkaXVzLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRhdHRyLnNvICQoTElCRElSKQorLQkkKElOU1RBTEwpIC1zIC1jIC1tIDc1NSByYWRyZWFsbXMuc28gJChMSUJESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkaXVzLjggJChNQU5ESVIpCistCSQoSU5TVEFMTCkgLWMgLW0gNDQ0IHBwcGQtcmFkYXR0ci44ICQoTUFORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDc1NSByYWRpdXMuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZGF0dHIuc28gJChMSUJESVIpCisrCSQoSU5TVEFMTCkgLWMgLW0gNzU1IHJhZHJlYWxtcy5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRpdXMuOCAkKE1BTkRJUikKKysJJChJTlNUQUxMKSAtbSA0NDQgcHBwZC1yYWRhdHRyLjggJChNQU5ESVIpCisgCisgcmFkaXVzLnNvOiByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorIAkkKENDKSAtbyByYWRpdXMuc28gLXNoYXJlZCByYWRpdXMubyBsaWJyYWRpdXNjbGllbnQuYQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eCBwcHAtMi40LjUvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CistLS0gcHBwLTIuNC41LW9yaWcvcHBwZC9wbHVnaW5zL3JwLXBwcG9lL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDQ3Njc2MTg3ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvcGx1Z2lucy9ycC1wcHBvZS9NYWtlZmlsZS5saW51eAkyMDEwLTA2LTMwIDE1OjUzOjE1LjQ1NDQ4Njg3NyArMDgwMAorQEAgLTQzLDkgKzQzLDkgQEAKKyAKKyBpbnN0YWxsOiBhbGwKKyAJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChMSUJESVIpCistCSQoSU5TVEFMTCkgLXMgLWMgLW0gNDU1MCBycC1wcHBvZS5zbyAkKExJQkRJUikKKysJJChJTlNUQUxMKSAtYyAtbSA0NTUwIHJwLXBwcG9lLnNvICQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKEJJTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyAtbSA1NTUgcHBwb2UtZGlzY292ZXJ5ICQoQklORElSKQorKwkkKElOU1RBTEwpIC1jIC1tIDU1NSBwcHBvZS1kaXNjb3ZlcnkgJChCSU5ESVIpCisgCisgY2xlYW46CisgCXJtIC1mICoubyAqLnNvIHBwcG9lLWRpc2NvdmVyeQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGR1bXAvTWFrZWZpbGUubGludXggcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgKKy0tLSBwcHAtMi40LjUtb3JpZy9wcHBkdW1wL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcGR1bXAvTWFrZWZpbGUubGludXgJMjAxMC0wNi0zMCAxNTo1MjoyNS43NjIxODM1MzcgKzA4MDAKK0BAIC0xNyw1ICsxNyw1IEBACisgCisgaW5zdGFsbDoKKyAJbWtkaXIgLXAgJChCSU5ESVIpICQoTUFORElSKQorLQkkKElOU1RBTEwpIC1zIC1jIHBwcGR1bXAgJChCSU5ESVIpCisrCSQoSU5TVEFMTCkgLWMgcHBwZHVtcCAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwZHVtcC44ICQoTUFORElSKQorZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4IHBwcC0yLjQuNS9wcHBzdGF0cy9NYWtlZmlsZS5saW51eAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTE6MTIuMDU4MTgzMzgzICswODAwCisrKysgcHBwLTIuNC41L3BwcHN0YXRzL01ha2VmaWxlLmxpbnV4CTIwMTAtMDYtMzAgMTU6NTI6NDIuNDg2MzQxMDgxICswODAwCitAQCAtMjIsNyArMjIsNyBAQAorIAorIGluc3RhbGw6IHBwcHN0YXRzCisgCS1ta2RpciAtcCAkKE1BTkRJUikKKy0JJChJTlNUQUxMKSAtcyAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKysJJChJTlNUQUxMKSAtYyBwcHBzdGF0cyAkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtYyAtbSA0NDQgcHBwc3RhdHMuOCAkKE1BTkRJUikKKyAKKyBwcHBzdGF0czogJChQUFBTVEFUU1JDUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wYXAgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcGFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5M2MzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcGFwCkBAIC0wLDAgKzEsMjIgQEAKKyMgWW91IGNhbiB1c2UgdGhpcyBzY3JpcHQgdW5tb2RpZmllZCB0byBjb25uZWN0IHRvIHNpdGVzIHdoaWNoIGFsbG93CisjIGF1dGhlbnRpY2F0aW9uIHZpYSBQQVAsIENIQVAgYW5kIHNpbWlsYXIgcHJvdG9jb2xzLgorIyBUaGlzIHNjcmlwdCBjYW4gYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBwcHBkIHBlZXIgY29uZmlndXJhdGlvbnMuCisjIFRvIHVzZSBpdCwgYWRkIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8geW91ciAvZXRjL3BwcC9wZWVycy8gZmlsZToKKyMKKyMgY29ubmVjdCAiL3Vzci9zYmluL2NoYXQgLXYgLWYgL2V0Yy9jaGF0c2NyaXB0cy9wYXAgLVQgUEhPTkUtTlVNQkVSIgorIyB1c2VyIFlPVVItVVNFUk5BTUUtSU4tUEFQLVNFQ1JFVFMKKyMgbm9hdXRoCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBzZWUgdGhlIGNvbm5lY3Qgc3BlZWQuCisjIEl0IHdpbGwgYmUgbG9nZ2VkIHRvIHN0ZGVyciBvciB0byB0aGUgZmlsZSBzcGVjaWZpZWQgd2l0aCB0aGUgLXIgY2hhdCBvcHRpb24uCisjUkVQT1JUCQlDT05ORUNUCisKK0FCT1JUCQlCVVNZCitBQk9SVAkJVk9JQ0UKK0FCT1JUCQkiTk8gQ0FSUklFUiIKK0FCT1JUCQkiTk8gRElBTFRPTkUiCitBQk9SVAkJIk5PIERJQUwgVE9ORSIKKyIiCQlBVFoKK09LCQlBVERUXFQKK0NPTk5FQ1QJCSIiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyMWE5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wb2ZmCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCisjIExldHMgc2VlIGhvdyBtYW55IHBwcGRzIGFyZSBydW5uaW5nLi4uLgorc2V0IC0tIGBjYXQgL3Zhci9ydW4vcHBwKi5waWQgMj4vZGV2L251bGxgCisKK2Nhc2UgJCMgaW4KKyAgMCkgIyBwcHBkIG9ubHkgY3JlYXRlcyBhIHBpZCBmaWxlIG9uY2UgcHBwIGlzIHVwLCBzbyBsZXQncyB0cnkga2lsbGluZyBwcHBkCisgICAgICMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSd2ZSBub3QgZ290IHRoYXQgZmFyIHlldC4KKyAgICAga2lsbGFsbCBwcHBkCisgICAgIDs7CisgIDEpICMgSWYgb25seSBvbmUgd2FzIHJ1bm5pbmcgdGhlbiBpdCBjYW4gYmUga2lsbGVkIChhcHBhcmVudGx5IGtpbGxhbGwKKyAgICAgIyBjYXVzZWQgcHJvYmxlbXMgZm9yIHNvbWUsIHNvIGxldHMgdHJ5IGtpbGxpbmcgdGhlIHBpZCBmcm9tIHRoZSBmaWxlKQorICAgICBraWxsICQxCisgICAgIDs7CisgICopICMgTW9yZSB0aGFuIG9uZSEgQWllZWhoLi4gRG9udCBrbm93IHdoaWNoIG9uZSB0byBraWxsLgorICAgICBlY2hvICJNb3JlIHRoYW4gb25lIHBwcGQgcnVubmluZy4gTm9uZSBzdG9wcGVkIgorICAgICBleGl0IDEKKyAgICAgOzsKK2VzYWMKKworaWYgWyAtciAvdmFyL3J1bi9wcHAtcXVpY2sgXQordGhlbgorICAgIHJtIC1mIC92YXIvcnVuL3BwcC1xdWljaworZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcG9uIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWMwNTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BvbgpAQCAtMCwwICsxLDkgQEAKKyMhL2Jpbi9zaAorCitpZiBbICIkMSIgPSAicXVpY2siIF0KK3RoZW4KKyAgICB0b3VjaCAvdmFyL3J1bi9wcHAtcXVpY2sKKyAgICBzaGlmdAorZmkKKworL3Vzci9zYmluL3BwcGQgY2FsbCAkezE6LXByb3ZpZGVyfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcEAuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmMGI1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBALnNlcnZpY2UKQEAgLTAsMCArMSw5IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBQUCBsaW5rIHRvICVJCitCZWZvcmU9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3BwcGQgY2FsbCAlSSBub2RldGFjaCBub2xvZworCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwX29uX2Jvb3QgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwX29uX2Jvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc5Mzc2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcHBfb25fYm9vdApAQCAtMCwwICsxLDIxIEBACisjIyMhL2Jpbi9zaAorIworIyAgIFJlbmFtZSB0aGlzIGZpbGUgdG8gcHBwX29uX2Jvb3QgYW5kIHBwcGQgd2lsbCBiZSBmaXJlZCB1cCBhcworIyAgIHNvb24gYXMgdGhlIHN5c3RlbSBjb21lcyB1cCwgY29ubmVjdGluZyB0byBgcHJvdmlkZXInLgorIworIyAgIElmIHlvdSBhbHNvIG1ha2UgdGhpcyBmaWxlIGV4ZWN1dGFibGUsIGFuZCByZXBsYWNlIHRoZSBmaXJzdCBsaW5lCisjICAgd2l0aCBqdXN0ICIjIS9iaW4vc2giLCB0aGUgY29tbWFuZHMgYmVsb3cgd2lsbCBiZSBleGVjdXRlZCBpbnN0ZWFkLgorIworCisjIFRoZSBsb2NhdGlvbiBvZiB0aGUgcHBwIGRhZW1vbiBpdHNlbGYgKHNob3VsZG4ndCBuZWVkIHRvIGJlIGNoYW5nZWQpCitQUFBEPS91c3Ivc2Jpbi9wcHBkCisKKyMgVGhlIGRlZmF1bHQgcHJvdmlkZXIgdG8gY29ubmVjdCB0bworJFBQUEQgY2FsbCBwcm92aWRlcgorCisjIEFkZGl0aW9uYWwgY29ubmVjdGlvbnMsIHdoaWNoIHdvdWxkIGp1c3QgdXNlIHNldHRpbmdzIGZyb20KKyMgL2V0Yy9wcHAvb3B0aW9ucy48dHR5PgorIyRQUFBEIHR0eVMwCisjJFBQUEQgdHR5UzEKKyMkUFBQRCB0dHlTMgorIyRQUFBEIHR0eVMzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzI0MTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS9wcHAvcHBwL3BwcGQtcmVzb2x2LXZhcnJ1bi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitUaGUgcGF0Y2ggY29tZXMgZnJvbSBPcGVuRW1iZWRkZWQKK1JlYmFzZWQgZm9yIHBwcC0yLjQuNS4gRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworZGlmZiAtcnVOIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jIHBwcC0yLjQuNS9wcHBkL2lwY3AuYworLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTU6NTE6MTIuMDUwMTY2Mzk4ICswODAwCisrKysgcHBwLTIuNC41L3BwcGQvaXBjcC5jCTIwMTAtMDYtMzAgMTc6MDI6MzMuOTMwMzkzMjgzICswODAwCitAQCAtNTUsNiArNTUsOCBAQAorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlICJwcHBkLmgiCisgI2luY2x1ZGUgImZzbS5oIgorQEAgLTIwOTUsNiArMjA5NywxNCBAQAorICAgICB1X2ludDMyX3QgcGVlcmRuczEsIHBlZXJkbnMyOworIHsKKyAgICAgRklMRSAqZjsKKysgICAgc3RydWN0IHN0YXQgZGlyaW5mbzsKKysKKysgICAgaWYoc3RhdChfUEFUSF9PVVRESVIsICZkaXJpbmZvKSkgeworKyAgICAgICAgaWYobWtkaXIoX1BBVEhfT1VURElSLCAwNzc1KSkgeworKyAgICAgICAgICAgIGVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlczogJW0iLCBfUEFUSF9PVVRESVIpOworKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIH0KKysgICAgfQorIAorICAgICBmID0gZm9wZW4oX1BBVEhfUkVTT0xWLCAidyIpOworICAgICBpZiAoZiA9PSBOVUxMKSB7CitkaWZmIC1ydU4gcHBwLTIuNC41LW9yaWcvcHBwZC9wYXRobmFtZXMuaCBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAorLS0tIHBwcC0yLjQuNS1vcmlnL3BwcGQvcGF0aG5hbWVzLmgJMjAxMC0wNi0zMCAxNTo1MToxMi4wNDM2ODIwNjMgKzA4MDAKKysrKyBwcHAtMi40LjUvcHBwZC9wYXRobmFtZXMuaAkyMDEwLTA2LTMwIDE3OjAzOjIwLjU5NDM3MTA1NSArMDgwMAorQEAgLTMwLDcgKzMwLDggQEAKKyAjZGVmaW5lIF9QQVRIX1RUWU9QVAkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvb3B0aW9ucy4iCisgI2RlZmluZSBfUEFUSF9DT05ORVJSUwkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvY29ubmVjdC1lcnJvcnMiCisgI2RlZmluZSBfUEFUSF9QRUVSRklMRVMJIF9ST09UX1BBVEggIi9ldGMvcHBwL3BlZXJzLyIKKy0jZGVmaW5lIF9QQVRIX1JFU09MVgkgX1JPT1RfUEFUSCAiL2V0Yy9wcHAvcmVzb2x2LmNvbmYiCisrI2RlZmluZSBfUEFUSF9PVVRESVIJX1JPT1RfUEFUSCBfUEFUSF9WQVJSVU4gIi9wcHAiCisrI2RlZmluZSBfUEFUSF9SRVNPTFYJX1BBVEhfT1VURElSICIvcmVzb2x2LmNvbmYiCisgCisgI2RlZmluZSBfUEFUSF9VU0VST1BUCSAiLnBwcHJjIgorICNkZWZpbmUJX1BBVEhfUFNFVURPTllNCSAiLnBwcF9wc2V1ZG9ueW0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHJvdmlkZXIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHAvcHJvdmlkZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc0ZDcxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcC9wcm92aWRlcgpAQCAtMCwwICsxLDM1IEBACisjIGV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgYSBkaWFsdXAgY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkIHdpdGggUEFQIG9yIENIQVAKKyMKKyMgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHVzZWQgYnkgcG9uKDEpIGFuZCBwb2ZmKDEpLgorIyBTZWUgdGhlIG1hbnVhbCBwYWdlIHBwcGQoOCkgZm9yIGluZm9ybWF0aW9uIG9uIGFsbCB0aGUgb3B0aW9ucy4KKworIyBNVVNUIENIQU5HRTogcmVwbGFjZSBteXVzZXJuYW1lQHJlYWxtIHdpdGggdGhlIFBQUCBsb2dpbiBuYW1lIGdpdmVuIHRvCisjIHlvdXIgYnkgeW91ciBwcm92aWRlci4KKyMgVGhlcmUgc2hvdWxkIGJlIGEgbWF0Y2hpbmcgZW50cnkgd2l0aCB0aGUgcGFzc3dvcmQgaW4gL2V0Yy9wcHAvcGFwLXNlY3JldHMKKyMgYW5kL29yIC9ldGMvcHBwL2NoYXAtc2VjcmV0cy4KK3VzZXIgIm15dXNlcm5hbWVAcmVhbG0iCisKKyMgTVVTVCBDSEFOR0U6IHJlcGxhY2UgKioqKioqKiogd2l0aCB0aGUgcGhvbmUgbnVtYmVyIG9mIHlvdXIgcHJvdmlkZXIuCisjIFRoZSAvZXRjL2NoYXRzY3JpcHRzL3BhcCBjaGF0IHNjcmlwdCBtYXkgYmUgbW9kaWZpZWQgdG8gY2hhbmdlIHRoZQorIyBtb2RlbSBpbml0aWFsaXphdGlvbiBzdHJpbmcuCitjb25uZWN0ICIvdXNyL3NiaW4vY2hhdCAtdiAtZiAvZXRjL2NoYXRzY3JpcHRzL3BhcCAtVCAqKioqKioqKiIKKworIyBTZXJpYWwgZGV2aWNlIHRvIHdoaWNoIHRoZSBtb2RlbSBpcyBjb25uZWN0ZWQuCisvZGV2L21vZGVtCisKKyMgU3BlZWQgb2YgdGhlIHNlcmlhbCBsaW5lLgorMTE1MjAwCisKKyMgQXNzdW1lcyB0aGF0IHlvdXIgSVAgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgYnkgdGhlIElTUC4KK25vaXBkZWZhdWx0CisjIFRyeSB0byBnZXQgdGhlIG5hbWUgc2VydmVyIGFkZHJlc3NlcyBmcm9tIHRoZSBJU1AuCit1c2VwZWVyZG5zCisjIFVzZSB0aGlzIGNvbm5lY3Rpb24gYXMgdGhlIGRlZmF1bHQgcm91dGUuCitkZWZhdWx0cm91dGUKKworIyBNYWtlcyBwcHBkICJkaWFsIGFnYWluIiB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QuCitwZXJzaXN0CisKKyMgRG8gbm90IGFzayB0aGUgcmVtb3RlIHRvIGF1dGhlbnRpY2F0ZS4KK25vYXV0aAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3BwcC9wcHBfMi40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjMzhlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcHBwL3BwcF8yLjQuNy5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIlBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnQiCitERVNDUklQVElPTiA9ICJwcHAgKFBhdWwncyBQUFAgUGFja2FnZSkgaXMgYW4gb3BlbiBzb3VyY2UgcGFja2FnZSB3aGljaCBpbXBsZW1lbnRzIFwKK3RoZSBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBvbiBMaW51eCBhbmQgU29sYXJpcyBzeXN0ZW1zLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhbWJhLm9yZy9wcHAvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9jZ2ktYmluL3BwcC1idWdzIgorREVQRU5EUyA9ICJsaWJwY2FwIgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIrICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9wcHBkL2NjcC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PWUyYzQzZmU2ZTgxZmY3N2Q4N2RjOWMyOTBhNDI0ZGVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BwcGQvcGx1Z2lucy9wYXNzcHJvbXB0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMDttZDU9M2JjYmNkYmYwZTM2OWM5YTNlMGI4YzgyNzViMDY1ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcHBwZC90ZGIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI3O21kNT00Y2EzYTk5OTFiMDExMDM4ZDA4NWQ2Njc1YWU3YzRlNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jaGF0L2NoYXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE1O21kNT0wZDM3NGI4NTQ1ZWU1YzYyZDdhZmYxYWNiZDM4YWRkMiIKKworU1JDX1VSSSA9ICJodHRwOi8vcHBwLnNhbWJhLm9yZy9mdHAvcHBwL3BwcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2lmZGVmcm91dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwZC1yZXNvbHYtdmFycnVuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLXJlbW92ZS1oYXJkLXVzci1yZWZlcmVuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcG9uIFwKKyAgICAgICAgICAgZmlsZTovL3BvZmYgXAorICAgICAgICAgICBmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC11cCBcCisgICAgICAgICAgIGZpbGU6Ly9pcC1kb3duIFwKKyAgICAgICAgICAgZmlsZTovLzA4c2V0dXBkbnMgXAorICAgICAgICAgICBmaWxlOi8vOTJyZW1vdmVkbnMgXAorICAgICAgICAgICBmaWxlOi8vY29wdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFwIFwKKyAgICAgICAgICAgZmlsZTovL3BwcF9vbl9ib290IFwKKyAgICAgICAgICAgZmlsZTovL3Byb3ZpZGVyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHBwLUZpeC1jb21waWxhdGlvbi1lcnJvcnMtaW4tTWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHBwQC5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1DVkUtMjAxNS0zMzEwLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4ODE4ZjQwZTZkMzNhMWQxZGU2OGExNTUxZjY1OTVhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyZTBhM2RkM2U0Nzk5ZTMzMTAzZjcwZWM3ZGY3NTM0OGM4NTQwOTY2ZWU3Yzk0OGU0ZWQ4YTQyYmJjY2ZiMzAiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBzeXN0ZW1kCisKK1RBUkdFVF9DQ19BUkNIICs9ICIgJHtMREZMQUdTfSIKK0VYVFJBX09FTUFLRSA9ICJTVFJJUFBST0c9JHtTVFJJUH0gTUFORElSPSR7RH0ke2RhdGFkaXJ9L21hbi9tYW44IElOQ0RJUj0ke0R9JHtpbmNsdWRlZGlyfSBMSUJESVI9JHtEfSR7bGliZGlyfS9wcHBkLyR7UFZ9IEJJTkRJUj0ke0R9JHtzYmluZGlyfSIKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc3RyaXAiCisKKyMgUGFja2FnZSBNYWtlZmlsZSBjb21wdXRlcyBDRkxBR1MsIHJlZmVyZW5jaW5nIENPUFRTLgorIyBUeXBpY2FsbHkgaGFyZC1jb2RlZCB0byAnLU8yIC1nJyBpbiB0aGUgTWFrZWZpbGUncy4KKyMKK0VYVFJBX09FTUFLRSArPSAnIENPUFRTPSIke0NGTEFHU30gLUkke1N9L2luY2x1ZGUiJworCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW1ha2UgaW5zdGFsbC1ldGNwcHAgRVRDRElSPSR7RH0vJHtzeXNjb25mZGlyfS9wcHAKKwlta2RpciAtcCAke0R9JHtiaW5kaXJ9LyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtdXAuZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9wcHAvaXAtZG93bi5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvbiAke0R9JHtiaW5kaXJ9L3BvbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BvZmYgJHtEfSR7YmluZGlyfS9wb2ZmCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcHBwCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaXAtdXAgJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2lwLWRvd24gJHtEfSR7c3lzY29uZmRpcn0vcHBwLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9LzA4c2V0dXBkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLXVwLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vOTJyZW1vdmVkbnMgJHtEfSR7c3lzY29uZmRpcn0vcHBwL2lwLWRvd24uZC8KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BhcCAke0R9JHtzeXNjb25mZGlyfS9jaGF0c2NyaXB0cworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BwcF9vbl9ib290ICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wcHBfb25fYm9vdAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Byb3ZpZGVyICR7RH0ke3N5c2NvbmZkaXJ9L3BwcC9wZWVycy9wcm92aWRlcgorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcHBALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQFNCSU5ESVJALCR7c2JpbmRpcn0sZycgXAorCSAgICAgICAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcHBALnNlcnZpY2UKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0vbWFuOC9tYW44CisJY2htb2QgdStzICR7RH0ke3NiaW5kaXJ9L3BwcGQKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcHBwL3BhcC1zZWNyZXRzICR7c3lzY29uZmRpcn0vcHBwL2NoYXAtc2VjcmV0cyAke3N5c2NvbmZkaXJ9L3BwcC9vcHRpb25zIgorUEFDS0FHRVMgPSsgIiR7UE59LW9hICR7UE59LW9lICR7UE59LXJhZGl1cyAke1BOfS13aW5iaW5kICR7UE59LW1pbmNvbm4gJHtQTn0tcGFzc3dvcmQgJHtQTn0tbDJ0cCAke1BOfS10b29scyIKK0ZJTEVTXyR7UE59ICAgICAgICA9ICIke3N5c2NvbmZkaXJ9ICR7YmluZGlyfSAke3NiaW5kaXJ9L2NoYXQgJHtzYmluZGlyfS9wcHBkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcHBwQC5zZXJ2aWNlIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS8uZGVidWciCitGSUxFU18ke1BOfS1vYSAgICAgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9wcHBvYXRtLnNvIgorRklMRVNfJHtQTn0tb2UgICAgICAgPSAiJHtzYmluZGlyfS9wcHBvZS1kaXNjb3ZlcnkgJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcnAtcHBwb2Uuc28iCitGSUxFU18ke1BOfS1yYWRpdXMgICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRpdXMuc28gJHtsaWJkaXJ9L3BwcGQvJHtQVn0vcmFkYXR0ci5zbyAke2xpYmRpcn0vcHBwZC8ke1BWfS9yYWRyZWFsbXMuc28iCitGSUxFU18ke1BOfS13aW5iaW5kICA9ICIke2xpYmRpcn0vcHBwZC8ke1BWfS93aW5iaW5kLnNvIgorRklMRVNfJHtQTn0tbWluY29ubiAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vbWluY29ubi5zbyIKK0ZJTEVTXyR7UE59LXBhc3N3b3JkID0gIiR7bGliZGlyfS9wcHBkLyR7UFZ9L3Bhc3MqLnNvIgorRklMRVNfJHtQTn0tbDJ0cCAgICAgPSAiJHtsaWJkaXJ9L3BwcGQvJHtQVn0vKmwydHAuc28iCitGSUxFU18ke1BOfS10b29scyAgICA9ICIke3NiaW5kaXJ9L3BwcHN0YXRzICR7c2JpbmRpcn0vcHBwZHVtcCIKK1NVTU1BUllfJHtQTn0tb2EgICAgICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFBQUC1vdmVyLUFUTSBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS1vZSAgICAgICA9ICJQbHVnaW4gZm9yIFBQUCBmb3IgUFBQLW92ZXItRXRoZXJuZXQgc3VwcG9ydCIKK1NVTU1BUllfJHtQTn0tcmFkaXVzICAgPSAiUGx1Z2luIGZvciBQUFAgZm9yIFJBRElVUyBzdXBwb3J0IgorU1VNTUFSWV8ke1BOfS13aW5iaW5kICA9ICJQbHVnaW4gZm9yIFBQUCB0byBhdXRoZW50aWNhdGUgYWdhaW5zdCBTYW1iYSBvciBXaW5kb3dzIgorU1VNTUFSWV8ke1BOfS1taW5jb25uICA9ICJQbHVnaW4gZm9yIFBQUCB0byBzZXQgYSBkZWxheSBiZWZvcmUgdGhlIGlkbGUgdGltZW91dCBhcHBsaWVzIgorU1VNTUFSWV8ke1BOfS1wYXNzd29yZCA9ICJQbHVnaW4gZm9yIFBQUCB0byBnZXQgcGFzc3dvcmRzIHZpYSBhIHBpcGUiCitTVU1NQVJZXyR7UE59LWwydHAgICAgID0gIlBsdWdpbiBmb3IgUFBQIGZvciBsMnRwIHN1cHBvcnQiCitTVU1NQVJZXyR7UE59LXRvb2xzICAgID0gIkFkZGl0aW9uYWwgdG9vbHMgZm9yIHRoZSBQUFAgcGFja2FnZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mLzk5X3Jlc29sdmNvbmYgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi85OV9yZXNvbHZjb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3OTBkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi85OV9yZXNvbHZjb25mCkBAIC0wLDAgKzEsNCBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9yZXNvbHZjb25mL2ludGVyZmFjZSBub25lCitmIHJvb3Qgcm9vdCAwNjQ0IC9ldGMvcmVzb2x2Y29uZi9ydW4vcmVzb2x2LmNvbmYgbm9uZQorZiByb290IHJvb3QgMDY0NCAvZXRjL3Jlc29sdmNvbmYvcnVuL2VuYWJsZS11cGRhdGVzIG5vbmUKK2wgcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHYuY29uZiAvZXRjL3Jlc29sdmNvbmYvcnVuL3Jlc29sdi5jb25mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZWFkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZi9maXgtcGF0aC1mb3ItYnVzeWJveC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKK2J1c3lib3ggaW5zdGFsbHMgcmVhZGxpbmsgaW50byAvdXNyL2Jpbiwgc28gZW5zdXJlIC91c3IvYmluCitpcyBpbiB0aGUgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVzb2x2Y29uZi0xLjc2Lm9yaWcvZXRjL3Jlc29sdmNvbmYvdXBkYXRlLmQvbGliYworKysrIHJlc29sdmNvbmYtMS43Ni9ldGMvcmVzb2x2Y29uZi91cGRhdGUuZC9saWJjCitAQCAtMTYsNyArMTYsNyBAQAorICMKKyAKKyBzZXQgLWUKKy1QQVRIPS9zYmluOi9iaW4KKytQQVRIPS9zYmluOi9iaW46L3Vzci9iaW4KKyAKKyBbIC14IC9saWIvcmVzb2x2Y29uZi9saXN0LXJlY29yZHMgXSB8fCBleGl0IDEKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvcmVzb2x2Y29uZi9yZXNvbHZjb25mXzEuNzcuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZl8xLjc3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNmI5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3Jlc29sdmNvbmYvcmVzb2x2Y29uZl8xLjc3LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAibmFtZSBzZXJ2ZXIgaW5mb3JtYXRpb24gaGFuZGxlciIKK0RFU0NSSVBUSU9OID0gIlJlc29sdmNvbmYgaXMgYSBmcmFtZXdvcmsgZm9yIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHN5c3RlbSdzIFwKK2luZm9ybWF0aW9uIGFib3V0IGN1cnJlbnRseSBhdmFpbGFibGUgbmFtZXNlcnZlcnMuIEl0IHNldHMgXAoraXRzZWxmIHVwIGFzIHRoZSBpbnRlcm1lZGlhcnkgYmV0d2VlbiBwcm9ncmFtcyB0aGF0IHN1cHBseSBcCituYW1lc2VydmVyIGluZm9ybWF0aW9uIGFuZCBwcm9ncmFtcyB0aGF0IG5lZWQgbmFtZXNlcnZlciBcCitpbmZvcm1hdGlvbi4iCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCitBVVRIT1IgPSAiVGhvbWFzIEhvb2QiCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMuZGViaWFuLm9yZy9yZXNvbHZjb25mIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKKworU1JDX1VSSSA9ICJodHRwOi8vc25hcHNob3QuZGViaWFuLm9yZy9hcmNoaXZlL2RlYmlhbi8yMDE1MDUxMVQyMTQ3MThaL3Bvb2wvbWFpbi9yLyR7QlBOfS8ke0JQTn1fJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wYXRoLWZvci1idXN5Ym94LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3Jlc29sdmNvbmYgXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjczNjJkNzY2ZTQ3YmZjMjUzNTAwZjQyYjMwMzMwZDlmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNmUyMWU4YmE2ODIyYTVmOTMwNzVjOGM4ZmU3OTc3ZTM0NzgwYmE1NTFhZjUxOTMwZDBiMzFmZGQ5OWFiNTYiCisKK2luaGVyaXQgYWxsYXJjaAorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV9yZXNvbHZjb25mICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJCWVjaG8gImQgL3J1bi8ke0JQTn0vaW50ZXJmYWNlIC0gLSAtIC0iIFwKKwkJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvcmVzb2x2Y29uZi5jb25mCisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfS8ke0JQTn0KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfQorCWxuIC1zbmYgJHtsb2NhbHN0YXRlZGlyfS9ydW4vJHtCUE59ICR7RH0ke3N5c2NvbmZkaXJ9LyR7QlBOfS9ydW4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuOCAke0R9JHtkb2NkaXJ9LyR7UH0KKwljcCAtcFBSIGV0Yy8qICR7RH0ke3N5c2NvbmZkaXJ9LworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9JHtzeXNjb25mZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3Jlc29sdmNvbmYgJHtEfSR7YmFzZV9zYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2xpc3QtcmVjb3JkcyAke0R9JHtiYXNlX2xpYmRpcn0vJHtCUE59CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kCisJaW5zdGFsbCAtbSAwNzU1IGRlYmlhbi9yZXNvbHZjb25mLjAwMHJlc29sdmNvbmYuaWYtdXAgJHtEfS8ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtdXAuZC8wMDByZXNvbHZjb25mCisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1kb3duLmQKKwlpbnN0YWxsIC1tIDA3NTUgZGViaWFuL3Jlc29sdmNvbmYucmVzb2x2Y29uZi5pZi1kb3duICR7RH0vJHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLWRvd24uZC9yZXNvbHZjb25mCisJaW5zdGFsbCAtbSAwNjQ0IFJFQURNRSAke0R9JHtkb2NkaXJ9LyR7UH0vCisJaW5zdGFsbCAtbSAwNjQ0IG1hbi9yZXNvbHZjb25mLjggJHtEfSR7bWFuZGlyfS9tYW44LworfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgLXogIiREIiBdOyB0aGVuCisJCWlmIGNvbW1hbmQgLXYgc3lzdGVtZC10bXBmaWxlcyA+L2Rldi9udWxsOyB0aGVuCisJCQlzeXN0ZW1kLXRtcGZpbGVzIC0tY3JlYXRlICR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9yZXNvbHZjb25mLmNvbmYKKwkJZWxpZiBbIC1lICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIF07IHRoZW4KKwkJCSR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS8ke0JQTn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0L01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0L01ha2VmaWxlLmluLWZpeC1mb3ItcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ZGI2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXQvTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGM2ZjAwODBiNTU2NzliNmU4YjVkMzMyZDZlMDVmZGNiZGExZTQwNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgNCBNYXkgMjAxNSAwMDo1ODo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5pbjogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3ZzbnByaW50Zl9yLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCitjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDMgZXhpdCBzdGF0dXMKK01ha2VmaWxlOjEyMjogcmVjaXBlIGZvciB0YXJnZXQgJ2ZpbGFuJyBmYWlsZWQKKworTGV0IGZpbGFuIGRlcGVuZCBvbiB2c25wcmludGZfci5vIGFuZCBzbnByaW50ZXJyLm8gdG8gZml4IHRoZSBpc3N1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBmMmE2ZWRiLi44OGI3ODRiIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTE4LDcgKzExOCw3IEBAIFBST0NBTl9PQkpTPXByb2Nhbl9tYWluLm8gcHJvY2FuLm8gcHJvY2FuLWNkZWZzLm8gaG9zdGFuLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0CisgcHJvY2FuOiAkKFBST0NBTl9PQkpTKQorIAkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFBST0NBTl9PQkpTKSAkKENMSUJTKQorIAorLWZpbGFuOiBmaWxhbl9tYWluLm8gZmlsYW4ubyBmZG5hbWUubyBlcnJvci5vIHN5Y2xzLm8gc3lzdXRpbHMubyB1dGlscy5vCisrZmlsYW46IGZpbGFuX21haW4ubyBmaWxhbi5vIGZkbmFtZS5vIGVycm9yLm8gc3ljbHMubyBzeXN1dGlscy5vIHV0aWxzLm8gdnNucHJpbnRmX3IubyBzbnByaW50ZXJyLm8KKyAJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgZmlsYW5fbWFpbi5vIGZpbGFuLm8gZmRuYW1lLm8gZXJyb3IubyBzeWNscy5vIHN5c3V0aWxzLm8gdXRpbHMubyB2c25wcmludGZfci5vIHNucHJpbnRlcnIubyAkKENMSUJTKQorIAorIGxpYnhpby5hOiAkKFhJT09CSlMpICQoVVRMT0JKUykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3NvY2F0L3NvY2F0XzEuNy4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4ZTBhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvc29jYXQvc29jYXRfMS43LjMuMC5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIk11bHRpcHVycG9zZSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIHRyYW5zZmVyIgorREVTQ1JJUFRJT04gPSAiU29jYXQgaXMgYSByZWxheSBmb3IgYmlkaXJlY3Rpb25hbCBkYXRhIFwKK3RyYW5zZmVyIGJldHdlZW4gdHdvIGluZGVwZW5kZW50IGRhdGEgY2hhbm5lbHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0LyIKKworU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0RFUEVORFMgPSAib3BlbnNzbCByZWFkbGluZSIKKworTElDRU5TRSA9ICJHUEwtMi4wKy13aXRoLU9wZW5TU0wtZXhjZXB0aW9uIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNTc7ZW5kbGluZT0yODc7bWQ1PTMzOGMwNWVhZGQwMTM4NzJhYmIxZDZlMTk4ZTEwYTNmIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kZXN0LXVucmVhY2gub3JnL3NvY2F0L2Rvd25sb2FkL3NvY2F0LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuaW4tZml4LWZvci1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNjA3ZWRiNjViYzZjNTdmNGE0M2YwNjI0NzUwNDI3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNzY3ZTg1MGMwMzI5YjlmZGY3MTFjNmNkNDY4NTY1Y2JiYjI4Nzg2YmExYThhMWNiZDU1MzFkNDAxNmIzZTA0IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9oYXZlX3pfbW9kaWZpZXI9eWVzIHNjX2N2X3N5c19jcmRseV9zaGlmdD05IFwKKyAgICAgICAgc2NfY3Zfc3lzX3RhYmRseV9zaGlmdD0xMSBzY19jdl9zeXNfY3NpemVfc2hpZnQ9NCBcCisgICAgICAgIGFjX2N2X2lzcGVlZF9vZmZzZXQ9MTMgXAorICAgICAgICBhY19jdl9oZWFkZXJfYnNkX2xpYnV0aWxfaD1ubyBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS1lbmFibGUtbGlid3JhcCwtLWRpc2FibGUtbGlid3JhcCx0Y3Atd3JhcHBlcnMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvYXZvaWRfc3RyaXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2F2b2lkX3N0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNGUyNDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL2F2b2lkX3N0cmlwLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK3dpcmVsZXNzX3Rvb2xzOiBBdm9pZCBzdHJpcHBpbmcgaXdtdWx0aWNhbGwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVGhlIHJlbW92ZWQgY29kZSB3YXMgZnJvbSB1cHN0cmVhbS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCistLS0gd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZQkyMDExLTA2LTE4IDExOjM1OjEyLjE4MzkwNzQ1MyAtMDUwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjI5L01ha2VmaWxlCTIwMTEtMDYtMTggMTE6Mzg6MDkuOTk1OTA3OTg1IC0wNTAwCitAQCAtMTM1LDkgKzEzNSw4IEBACisgCisgbWFjYWRkcjogbWFjYWRkci5vICQoSVdMSUIpCisgCistIyBBbHdheXMgZG8gc3ltYm9sIHN0cmlwcGluZyBoZXJlCisgaXdtdWx0aWNhbGw6IGl3bXVsdGljYWxsLm8KKy0JJChDQykgJChMREZMQUdTKSAtV2wsLXMgJChYQ0ZMQUdTKSAtbyAkQCAkXiAkKExJQlMpCisrCSQoQ0MpICQoTERGTEFHUykgJChTVFJJUEZMQUdTKSAkKFhDRkxBR1MpIC1vICRAICReICQoTElCUykKKyAKKyAjIEl0J3MgYSBraW5kIG9mIG1hZ2ljLi4uCisgd2lyZWxlc3MuaDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbGRmbGFncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBkOGNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3dpcmVsZXNzLXRvb2xzOiBSZW1vdmUgUUEgd2FybmluZzogTm8gR05VX0hBU0ggaW4gdGhlIGVsZiBiaW5hcnkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgVXNlZnVsIHdpdGhpbiBiaXRiYWtlIGVudmlyb25tZW50IG9ubHkuCisKK1NpZ25lZC1vZmYtYnk6IE11aGFtbWFkIFNoYWtlZWwgPG11aGFtbWFkX3NoYWtlZWxAbWVudG9yLmNvbT4KKworLS0tCisgTWFrZWZpbGUgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSB3aXJlbGVzc190b29scy4yOS5vcmlnL01ha2VmaWxlCisrKysgd2lyZWxlc3NfdG9vbHMuMjkvTWFrZWZpbGUKK0BAIC0xNDQsNyArMTQ0LDcgQEAgd2lyZWxlc3MuaDoKKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBkeW5hbWljIGxpYnJhcnkKKyAkKERZTkFNSUMpOiAkKE9CSlM6Lm89LnNvKQorLQkkKENDKSAtc2hhcmVkIC1vICRAIC1XbCwtc29uYW1lLCRAICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKysJJChDQykgLXNoYXJlZCAtbyAkQCAtV2wsLXNvbmFtZSwkQCAkKExERkxBR1MpICQoU1RSSVBGTEFHUykgJChMSUJTKSAtbGMgJF4KKyAKKyAjIENvbXBpbGF0aW9uIG9mIHRoZSBzdGF0aWMgbGlicmFyeQorICQoU1RBVElDKTogJChPQkpTOi5vPS5zbykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy9tYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3NTdkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2lyZWxlc3NfdG9vbHMuMzAub3JpZy9NYWtlZmlsZQkyMDE0LTAyLTAxIDAwOjIxOjA0LjE0ODQ2MzM4MiAtMDgwMAorKysrIHdpcmVsZXNzX3Rvb2xzLjMwL01ha2VmaWxlCTIwMTQtMDItMDEgMDA6MjM6MzUuNDQ4MDcyMjc5IC0wODAwCitAQCAtNzYsNyArNzYsNyBAQAorIElOU1RBTExfRElSPSAkKFBSRUZJWCkvc2JpbgorIElOU1RBTExfTElCPSAkKFBSRUZJWCkvbGliCisgSU5TVEFMTF9JTkM9ICQoUFJFRklYKS9pbmNsdWRlCistSU5TVEFMTF9NQU49ICQoUFJFRklYKS9tYW4KKytJTlNUQUxMX01BTj0gJChQUkVGSVgpL3NoYXJlL21hbgorIAorICMgVmFyaW91cyBjb21tYW5kcworIFJNID0gcm0gLWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjJjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gL2V0Yy9sZC5zby5jYWNoZSBpcyB3cml0ZWFibGUgYnkgdXNlciBydW5uaW5nIGJpdGJha2UgdGhlbiBpdCBjcmVhdGVzIGludmFsaWQgY2FjaGUgCisoaW4gbXkgY2FzZSBsaWJzdGRjKysuc28gY2Fubm90IGJlIGZvdW5kIGFmdGVyIGJ1aWxkaW5nIHpsaWIoLW5hdGl2ZSkgYW5kIEkgaGF2ZSB0byBjYWxsIAordG91Y2ggKi9saWJzdGRjKysuc28gJiYgL3NiaW4vbGRjb25maWcgdG8gZml4IGl0LgorCitTbyByZW1vdmUgbGRjb25maWcgY2FsbCBmcm9tIG1ha2UgaW5zdGFsbC1saWJzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC11TnIgd2lyZWxlc3NfdG9vbHMuMjkub3JpZy9NYWtlZmlsZSB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQorLS0tIHdpcmVsZXNzX3Rvb2xzLjI5Lm9yaWcvTWFrZWZpbGUJMjAwNy0wOS0xOCAwMTo1Njo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyB3aXJlbGVzc190b29scy4yOS9NYWtlZmlsZQkyMDEyLTAyLTE1IDIwOjQ2OjQxLjc4MDc2MzUxNCArMDEwMAorQEAgLTE2Myw3ICsxNjMsNiBAQAorIAlpbnN0YWxsIC1tIDc1NSAkKERZTkFNSUMpICQoSU5TVEFMTF9MSUIpCisgCWxuIC1zZm4gJChEWU5BTUlDKSAkKElOU1RBTExfTElCKS8kKERZTkFNSUNfTElOSykKKyAJQGVjaG8gIioqKiBEb24ndCBmb3JnZXQgdG8gYWRkICQoSU5TVEFMTF9MSUIpIHRvIC9ldGMvbGQuc28uY29uZiwgYW5kIHJ1biBsZGNvbmZpZyBhcyByb290LiAqKioiCistCUAkKExEQ09ORklHKSB8fCBlY2hvICIqKiogQ291bGQgbm90IHJ1biBsZGNvbmZpZyAhICoqKiIKKyAKKyAjIEluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5CisgaW5zdGFsbC1zdGF0aWM6OiAkKFNUQVRJQykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy5pZi1wcmUtdXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjUxOGE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKworY2FzZSAiJE1FVEhPRCIgaW4gbG9vcGJhY2spIGV4aXQgMCA7OyBlc2FjCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJV1BSSVY9L3NiaW4vaXdwcml2CisKK2lmIFsgISAteCAkSVdDT05GSUcgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKKyMgRGV0ZWN0IGFuZCBkbyBub3RoaW5nIGZvciBsaW51eC13bGFuLW5nIGludGVyZmFjZXM7CisjIHdoaWNoIGFyZSBjb25maWd1cmVkIGJ5IHRoaWVyIG93biBpZi1wcmUtdXAgc2NyaXB0LgoraWYgWyAtbiAiJElGX1dJUkVMRVNTX1RZUEUiIC1hICIkSUZfV0lSRUxFU1NfVFlQRSIgPSAid2xhbi1uZyIgXTsgdGhlbgorICBleGl0IDAKK2ZpCisKK2lmIFsgLW4gIiRJRl9ORUVEU19SRVNFVCIgXTsgdGhlbgorICAkSVdQUklWICIkSUZBQ0UiIHJlc2V0IDEKKyAgc2xlZXAgMQorZmkKKworaWYgWyAtbiAiJElGX05FRURTX0ZJUk1XQVJFIiBdOyB0aGVuCisgICRJRl9ORUVEU19GSVJNV0FSRSAiJElGQUNFIgorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1NFTlMiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHNlbnMgJElGX1dJUkVMRVNTX1NFTlMKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SQVRFIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiByYXRlICRJRl9XSVJFTEVTU19SQVRFCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUlRTIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBydHMgJElGX1dJUkVMRVNTX1JUUworZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSQUciIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyYWcgJElGX1dJUkVMRVNTX0ZSQUcKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcG93ZXIgJElGX1dJUkVMRVNTX1BPV0VSCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHBlcmlvZCAkSUZfV0lSRUxFU1NfUE9XRVJQRVJJT0QKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19QT1dFUlRJTUVPVVQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHBvd2VyIHRpbWVvdXQgJElGX1dJUkVMRVNTX1BPV0VSVElNRU9VVAorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX1RYUE9XRVIiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIHR4cG93ZXIgJElGX1dJUkVMRVNTX1RYUE9XRVIKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19SRVRSWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgcmV0cnkgJElGX1dJUkVMRVNTX1JFVFJZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTklDSyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbmljayAiJElGX1dJUkVMRVNTX05JQ0siCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTldJRCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbndpZCAiJElGX1dJUkVMRVNTX05XSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRU5DIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGVuYyAkSUZfV0lSRUxFU1NfRU5DCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZIiBdOyB0aGVuCisgIGV2YWwgJElXQ09ORklHICIkSUZBQ0UiIGtleSAkSUZfV0lSRUxFU1NfS0VZCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsxXSAiJElGX1dJUkVMRVNTX0tFWTEiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMiIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsyXSAiJElGX1dJUkVMRVNTX0tFWTIiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZMyIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFszXSAiJElGX1dJUkVMRVNTX0tFWTMiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfS0VZNCIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFs0XSAiJElGX1dJUkVMRVNTX0tFWTQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfREVGQVVMVEtFWSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIga2V5IFsiJElGX1dJUkVMRVNTX0RFRkFVTFRLRVkiXQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0tFWU1PREUiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGtleSAiJElGX1dJUkVMRVNTX0tFWU1PREUiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfTU9ERSIgXTsgdGhlbgorICAkSVdDT05GSUcgIiRJRkFDRSIgbW9kZSAkSUZfV0lSRUxFU1NfTU9ERQorZmkKKworaWYgWyAtbiAiJElGX1dJUkVMRVNTX0ZSRVEiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGZyZXEgJElGX1dJUkVMRVNTX0ZSRVEKK2ZpCisKK2lmIFsgLW4gIiRJRl9XSVJFTEVTU19DSEFOTkVMIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjaGFubmVsICRJRl9XSVJFTEVTU19DSEFOTkVMCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfRVNTSUQiIF07IHRoZW4KKyAgJElXQ09ORklHICIkSUZBQ0UiIGVzc2lkICIkSUZfV0lSRUxFU1NfRVNTSUQiCitmaQorCitpZiBbIC1uICIkSUZfV0lSRUxFU1NfQ09NTUlUIiBdOyB0aGVuCisgICRJV0NPTkZJRyAiJElGQUNFIiBjb21taXQKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvenp6LXdpcmVsZXNzLmlmLXByZS11cCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHMvenp6LXdpcmVsZXNzLmlmLXByZS11cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhlOTViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93aXJlbGVzcy10b29scy93aXJlbGVzcy10b29scy96enotd2lyZWxlc3MuaWYtcHJlLXVwCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyAvZXRjL25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCisjIGJ5IFN0ZWZhbiBUb21hbmVrIChzdGVmYW5AcGljby5ydWhyLmRlKQorCisKK0lXQ09ORklHPS9zYmluL2l3Y29uZmlnCitJRkNPTkZJRz0vc2Jpbi9pZmNvbmZpZworR1JFUD0vYmluL2dyZXAKK0xPR0dFUj0vdXNyL2Jpbi9sb2dnZXIKK1NMRUVQPS9iaW4vc2xlZXAKKworIyBIb3cgbG9uZyBkbyB3ZSB3YWl0IGZvciBhc3NvY2lhdGlvbj8KK1JFVFJJRVM9MTUKK1NMRUVQVElNRT0xCisKKyMgT25seSBzbGVlcCBpZiB3ZSB1c2UgREhDUCAoYWRkIG90aGVycyBtZXRob2RzIHNlcGVyYXRlZCBieSBzcGFjZXMpCitPTkxZX0ZPUj0ic3RhdGljIGRoY3AiCisKK2lmIFsgLXogIiRJRl9XSVJFTEVTU19UWVBFIiBdICYmIGVjaG8gIiRPTkxZX0ZPUiIgfCBncmVwIC1xICIkTUVUSE9EIiA7IHRoZW4KKwkkSUZDT05GSUcgJElGQUNFIHVwCisJJExPR0dFUiBDaGVja2luZyBmb3IgV0xBTiBhc3NvY2lhdGlvbi4uLgorCXdoaWxlICggWyAkUkVUUklFUyAtZ3QgMCBdICYmICgkSVdDT05GSUcgIiRJRkFDRSIgfCAkR1JFUCAtcSAiQWNjZXNzIFBvaW50OiBOb3QtQXNzb2NpYXRlZCIpICk7IGRvCisJCSRMT0dHRVIgTm8gYXNzb2NpYXRpb24geWV0LCAkUkVUUklFUyByZXRyaWVzIHVudGlsIHRpbWVvdXQKKwkJUkVUUklFUz0kKCgkUkVUUklFUy0xKSkKKwkJJFNMRUVQICRTTEVFUFRJTUUKKwlkb25lCisJCisJaWYgWyAkUkVUUklFUyAtZXEgMCBdOyB0aGVuCisJCSRMT0dHRVIgVGltZW91dCB3YWl0aW5nIGZvciBhc3NvY2lhdGlvbiwgY29udGludWluZyBhbnl3YXkuLi4KKwllbHNlCisJCSRMT0dHRVIgRm91bmQgYXNzb2NpYXRpb24hCisJZmkKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzXzMwLnByZTkuYmIgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dpcmVsZXNzLXRvb2xzL3dpcmVsZXNzLXRvb2xzXzMwLnByZTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlY2RmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd2lyZWxlc3MtdG9vbHMvd2lyZWxlc3MtdG9vbHNfMzAucHJlOS5iYgpAQCAtMCwwICsxLDU2IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB0aGUgTGludXggU3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIFN1YnN5c3RlbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiAoTEdQTHYyLjEgfCBNUEwtMS4xIHwgQlNEKSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9pd2NvbmZpZy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PWNmNzEwZWIxNzk1YzM3NmViMTBlYTRmZjA0NjQ5Y2FmIFwKKwkJCWZpbGU6Ly9pd2V2ZW50LmM7YmVnaW5saW5lPTU5O2VuZGxpbmU9NzI7bWQ1PWQ2NmExMDAyNmQ0Mzk0ZjBhNWIxYzU1ODdiY2U0NTM3IFwKKwkJCWZpbGU6Ly9zYW1wbGVfZW5jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT00O21kNT04MzgzNzJiZTA3ODc0MjYwYjU2NmJhZTJmNmVkMzNiNiIKK1NFQ1RJT04gPSAiYmFzZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC93aXJlbGVzc190b29scy4ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vd2lyZWxlc3MtdG9vbHMuaWYtcHJlLXVwIFwKKyAgICAgICAgICAgZmlsZTovL3p6ei13aXJlbGVzcy5pZi1wcmUtdXAgXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3N0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYTkxYmE3YzdlZmY5YmZmZjY5MjZiMWEzNGE0Njk3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYmQ5YzVjOThhYmYxZmRkMTE4OTJhYzJmOGE1NjczNzU0NGZlMTAxZTFiZTI3YzYyNDFhNTY0OTQ4ZjM0YzYzIgorCitTID0gIiR7V09SS0RJUn0vd2lyZWxlc3NfdG9vbHMuMzAiCisKK0NGTEFHUyA9KyAiLUkke1N9IgorRVhUUkFfT0VNQUtFID0gIi1lICdCVUlMRF9TSEFSRUQ9eScgXAorCQknSU5TVEFMTF9ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQknSU5TVEFMTF9MSUI9JHtEfSR7bGliZGlyfScgXAorCQknSU5TVEFMTF9JTkM9JHtEfSR7aW5jbHVkZWRpcn0nIFwKKwkJJ0lOU1RBTExfTUFOPSR7RH0ke21hbmRpcn0nIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgYWxsIGxpYml3LmEKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIFBSRUZJWD0ke0R9IGluc3RhbGwtaXdtdWx0aWNhbGwgaW5zdGFsbC1keW5hbWljIGluc3RhbGwtbWFuIGluc3RhbGwtaGRyCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBpZnJlbmFtZSAke0R9JHtzYmluZGlyfS9pZnJlbmFtZQorCSMgRGlzYWJsZWQgYnkgUlAgLSAyMC84LzA4IC0gV2UgZG9uJ3Qgc2VlbSB0byBuZWVkL3VzZSB0aGVzZQorCSNpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQKKwkjaW5zdGFsbCAke1dPUktESVJ9L3dpcmVsZXNzLXRvb2xzLmlmLXByZS11cCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kL3dpcmVsZXNzLXRvb2xzCisJI2luc3RhbGwgJHtXT1JLRElSfS96enotd2lyZWxlc3MuaWYtcHJlLXVwICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQvenp6LXdpcmVsZXNzCit9CisKK1BBQ0tBR0VTID0gImxpYml3LWRiZyBpZnJlbmFtZS1kYmcgJHtQTn0tZGJnIFwKK2xpYml3IGxpYml3LWRldiBsaWJpdy1kb2MgaWZyZW5hbWUtZG9jIGlmcmVuYW1lICR7UE59ICR7UE59LWRvYyIKKworRklMRVNfbGliaXctZGJnID0gIiR7bGliZGlyfS8uZGVidWcvKi5zby4qIgorRklMRVNfaWZyZW5hbWUtZGJnID0gIiR7c2JpbmRpcn0vLmRlYnVnL2lmcmVuYW1lIgorRklMRVNfbGliaXcgPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTX2xpYml3LWRldiA9ICIke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLnNvICR7aW5jbHVkZWRpcn0iCitGSUxFU19saWJpdy1kb2MgPSAiJHttYW5kaXJ9L21hbjciCitGSUxFU19pZnJlbmFtZSA9ICIke3NiaW5kaXJ9L2lmcmVuYW1lIgorRklMRVNfaWZyZW5hbWUtZG9jID0gIiR7bWFuZGlyfS9tYW44L2lmcmVuYW1lLjggJHttYW5kaXJ9L21hbjUvaWZ0YWIuNSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke3NiaW5kaXJ9L2l3KiAke2Jhc2Vfc2JpbmRpcn0gJHtiYXNlX2JpbmRpcn0gJHtzeXNjb25mZGlyfS9uZXR3b3JrIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bWFuZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUFQLVdNTS1GaXgtaW50ZWdlci11bmRlcmZsb3ctaW4tV01NLUFjdGlvbi1mcmFtZS1wYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyNjc0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1BUC1XTU0tRml4LWludGVnZXItdW5kZXJmbG93LWluLVdNTS1BY3Rpb24tZnJhbWUtcGFyLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlZjU2NmE0ZDRmNzQwMjJlMWZkYjBhMmFkZGZlODFlNmRlOWY0YWFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFdlZCwgMjkgQXByIDIwMTUgMDI6MjE6NTMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQVAgV01NOiBGaXggaW50ZWdlciB1bmRlcmZsb3cgaW4gV01NIEFjdGlvbiBmcmFtZSBwYXJzZXIKKworVGhlIGxlbmd0aCBvZiB0aGUgV01NIEFjdGlvbiBmcmFtZSB3YXMgbm90IHByb3Blcmx5IHZhbGlkYXRlZCBhbmQgdGhlCitsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChpbnQgbGVmdCkgY291bGQgZW5kIHVwIGJlaW5nCituZWdhdGl2ZS4gVGhpcyB3b3VsZCByZXN1bHQgaW4gcmVhZGluZyBzaWduaWZpY2FudGx5IHBhc3QgdGhlIHN0YWNrCitidWZmZXIgd2hpbGUgcGFyc2luZyB0aGUgSUVzIGluIGllZWU4MDJfMTFfcGFyc2VfZWxlbXMoKSBhbmQgd2hpbGUgZG9pbmcKK3NvLCByZXN1bHRpbmcgaW4gc2VnbWVudGF0aW9uIGZhdWx0LgorCitUaGlzIGNhbiByZXN1bHQgaW4gYW4gaW52YWxpZCBmcmFtZSBiZWluZyB1c2VkIGZvciBhIGRlbmlhbCBvZiBzZXJ2aWNlCithdHRhY2sgKGhvc3RhcGQgcHJvY2VzcyBraWxsZWQpIGFnYWluc3QgYW4gQVAgd2l0aCBhIGRyaXZlciB0aGF0IHVzZXMKK2hvc3RhcGQgZm9yIG1hbmFnZW1lbnQgZnJhbWUgcHJvY2Vzc2luZyAoZS5nLiwgYWxsIG1hYzgwMjExLWJhc2VkCitkcml2ZXJzKS4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9hcC93bW0uYyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2FwL3dtbS5jIGIvc3JjL2FwL3dtbS5jCitpbmRleCA2ZDQxNzdjLi4zMTRlMjQ0IDEwMDY0NAorLS0tIGEvc3JjL2FwL3dtbS5jCisrKysgYi9zcmMvYXAvd21tLmMKK0BAIC0yNzQsNiArMjc0LDkgQEAgdm9pZCBob3N0YXBkX3dtbV9hY3Rpb24oc3RydWN0IGhvc3RhcGRfZGF0YSAqaGFwZCwKKyAJCXJldHVybjsKKyAJfQorIAorKwlpZiAobGVmdCA8IDApCisrCQlyZXR1cm47IC8qIG5vdCBhIHZhbGlkIFdNTSBBY3Rpb24gZnJhbWUgKi8KKysKKyAJLyogZXh0cmFjdCB0aGUgdHNwZWMgaW5mbyBlbGVtZW50ICovCisgCWlmIChpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVmdCwgJmVsZW1zLCAxKSA9PSBQYXJzZUZhaWxlZCkgeworIAkJaG9zdGFwZF9sb2dnZXIoaGFwZCwgbWdtdC0+c2EsIEhPU1RBUERfTU9EVUxFX0lFRUU4MDIxMSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtRUFQLXB3ZC1wZWVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db21taS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmJhZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLUVBUC1wd2QtcGVlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tbWkucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIGRkMmYwNDNjOWM0M2QxNTY0OTRlMzNkN2NlMjJkYjk2ZTZlZjQyYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM3OjQ1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBFQVAtcHdkIHBlZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggZjJiMDkyNi4uYTYyOTQzNyAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC0zNTUsNiArMzU1LDIzIEBAIGVhcF9wd2RfcGVyZm9ybV9jb21taXRfZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCUJJR05VTSAqbWFzayA9IE5VTEwsICp4ID0gTlVMTCwgKnkgPSBOVUxMLCAqY29mYWN0b3IgPSBOVUxMOworIAl1MTYgb2Zmc2V0OworIAl1OCAqcHRyLCAqc2NhbGFyID0gTlVMTCwgKmVsZW1lbnQgPSBOVUxMOworKwlzaXplX3QgcHJpbWVfbGVuLCBvcmRlcl9sZW47CisrCisrCWlmIChkYXRhLT5zdGF0ZSAhPSBQV0RfQ29tbWl0X1JlcSkgeworKwkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJZ290byBmaW47CisrCX0KKysKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKyAKKyAJaWYgKCgoZGF0YS0+cHJpdmF0ZV92YWx1ZSA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChkYXRhLT5teV9lbGVtZW50ID0gRUNfUE9JTlRfbmV3KGRhdGEtPmdycC0+Z3JvdXApKSA9PSBOVUxMKSB8fAorQEAgLTU1NCw2ICs1NzEsMTggQEAgZWFwX3B3ZF9wZXJmb3JtX2NvbmZpcm1fZXhjaGFuZ2Uoc3RydWN0IGVhcF9zbSAqc20sIHN0cnVjdCBlYXBfcHdkX2RhdGEgKmRhdGEsCisgCXU4IGNvbmZbU0hBMjU2X01BQ19MRU5dLCAqY3J1ZnQgPSBOVUxMLCAqcHRyOworIAlpbnQgb2Zmc2V0OworIAorKwlpZiAoZGF0YS0+c3RhdGUgIT0gUFdEX0NvbmZpcm1fUmVxKSB7CisrCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQlnb3RvIGZpbjsKKysJfQorKworKwlpZiAocGF5bG9hZF9sZW4gIT0gU0hBMjU2X01BQ19MRU4pIHsKKysJCXdwYV9wcmludGYoTVNHX0lORk8sCisrCQkJICAgIkVBUC1wd2Q6IFVuZXhwZWN0ZWQgQ29uZmlybSBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwgU0hBMjU2X01BQ19MRU4pOworKwkJZ290byBmaW47CisrCX0KKysKKyAJLyoKKyAJICogZmlyc3QgYnVpbGQgdXAgdGhlIGNpcGhlcnN1aXRlIHdoaWNoIGlzIGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwKKyAJICoJcHJmCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEwOGE5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMS1QMlAtVmFsaWRhdGUtU1NJRC1lbGVtZW50LWxlbmd0aC1iZWZvcmUtY29weWluZy1pdC1DLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gOWVkNGVlZTM0NWY4NWUzMDI1YzMzYzZlMjBhYTI1Njk2ZTM0MWNjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CitEYXRlOiBUdWUsIDcgQXByIDIwMTUgMTE6MzI6MTEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gUDJQOiBWYWxpZGF0ZSBTU0lEIGVsZW1lbnQgbGVuZ3RoIGJlZm9yZSBjb3B5aW5nIGl0CisgKENWRS0yMDE1LTE4NjMpCisKK1RoaXMgZml4ZXMgYSBwb3NzaWJsZSBtZW1jcHkgb3ZlcmZsb3cgZm9yIFAyUCBkZXYtPm9wZXJfc3NpZCBpbgorcDJwX2FkZF9kZXZpY2UoKS4gVGhlIGxlbmd0aCBwcm92aWRlZCBieSB0aGUgcGVlciBkZXZpY2UgKDAuLjI1NSBieXRlcykKK3dhcyB1c2VkIHdpdGhvdXQgcHJvcGVyIGJvdW5kcyBjaGVja2luZyBhbmQgdGhhdCBjb3VsZCBoYXZlIHJlc3VsdGVkIGluCithcmJpdHJhcnkgZGF0YSBvZiB1cCB0byAyMjMgYnl0ZXMgYmVpbmcgd3JpdHRlbiBiZXlvbmQgdGhlIGVuZCBvZiB0aGUKK2Rldi0+b3Blcl9zc2lkW10gYXJyYXkgKG9mIHdoaWNoIGFib3V0IDE1MCBieXRlcyB3b3VsZCBiZSBiZXlvbmQgdGhlCitoZWFwIGFsbG9jYXRpb24pIHdoZW4gcHJvY2Vzc2luZyBhIGNvcnJ1cHRlZCBtYW5hZ2VtZW50IGZyYW1lIGZvciBQMlAKK3BlZXIgZGlzY292ZXJ5IHB1cnBvc2VzLgorCitUaGlzIGNvdWxkIHJlc3VsdCBpbiBjb3JydXB0ZWQgc3RhdGUgaW4gaGVhcCwgdW5leHBlY3RlZCBwcm9ncmFtCitiZWhhdmlvciBkdWUgdG8gY29ycnVwdGVkIFAyUCBwZWVyIGRldmljZSBpbmZvcm1hdGlvbiwgZGVuaWFsIG9mIHNlcnZpY2UKK2R1ZSB0byBwcm9jZXNzIGNyYXNoLCBleHBvc3VyZSBvZiBtZW1vcnkgY29udGVudHMgZHVyaW5nIEdPIE5lZ290aWF0aW9uLAorYW5kIHBvdGVudGlhbGx5IGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi4KKworVGhhbmtzIHRvIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciByZXBvcnRpbmcgdGhpcyBpc3N1ZSBhbmQgc21hcnQKK2hhcmR3YXJlIHJlc2VhcmNoIGdyb3VwIG9mIEFsaWJhYmEgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgaXQuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpvdW5pQHFjYS5xdWFsY29tbS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvcDJwL3AycC5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvcDJwL3AycC5jIGIvc3JjL3AycC9wMnAuYworaW5kZXggZjU4NGZhZS4uYTQ1ZmU3MyAxMDA2NDQKKy0tLSBhL3NyYy9wMnAvcDJwLmMKKysrKyBiL3NyYy9wMnAvcDJwLmMKK0BAIC03NzgsNiArNzc4LDcgQEAgaW50IHAycF9hZGRfZGV2aWNlKHN0cnVjdCBwMnBfZGF0YSAqcDJwLCBjb25zdCB1OCAqYWRkciwgaW50IGZyZXEsCisgCWlmIChvc19tZW1jbXAoYWRkciwgcDJwX2Rldl9hZGRyLCBFVEhfQUxFTikgIT0gMCkKKyAJCW9zX21lbWNweShkZXYtPmludGVyZmFjZV9hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisgCWlmIChtc2cuc3NpZCAmJgorKwkgICAgbXNnLnNzaWRbMV0gPD0gc2l6ZW9mKGRldi0+b3Blcl9zc2lkKSAmJgorIAkgICAgKG1zZy5zc2lkWzFdICE9IFAyUF9XSUxEQ0FSRF9TU0lEX0xFTiB8fAorIAkgICAgIG9zX21lbWNtcChtc2cuc3NpZCArIDIsIFAyUF9XSUxEQ0FSRF9TU0lELCBQMlBfV0lMRENBUkRfU1NJRF9MRU4pCisgCSAgICAgIT0gMCkpIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDEtV1BTLUZpeC1IVFRQLWNodW5rZWQtdHJhbnNmZXItZW5jb2RpbmctcGFyc2VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTY4ZWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAxLVdQUy1GaXgtSFRUUC1jaHVua2VkLXRyYW5zZmVyLWVuY29kaW5nLXBhcnNlci5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IEZhbiBYaW4gPGZhbi54aW5AanAuZnVqaXRzdS5jb20+CisKK0Zyb20gNWFjZDIzZjQ1ODFkYTU4NjgzZjNjZjVlMzZjYjcxYmJlNDA3MGJkNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDE3OjA4OjMzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFdQUzogRml4IEhUVFAgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBwYXJzZXIKKworc3RydG91bCgpIHJldHVybiB2YWx1ZSBtYXkgZW5kIHVwIG92ZXJmbG93aW5nIHRoZSBpbnQgaC0+Y2h1bmtfc2l6ZSBhbmQKK3Jlc3VsdGluZyBpbiBhIG5lZ2F0aXZlIHZhbHVlIHRvIGJlIHN0b3JlZCBhcyB0aGUgY2h1bmtfc2l6ZS4gVGhpcyBjb3VsZAorcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgbWVtY3B5IG9wZXJhdGlvbiB1c2luZyBhIHZlcnkgbGFyZ2UgbGVuZ3RoCithcmd1bWVudCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYSBidWZmZXIgb3ZlcmZsb3cgYW5kIHNlZ21lbnRhdGlvbiBmYXVsdC4KKworVGhpcyBjb3VsZCBoYXZlIGJlZW4gdXNlZCB0byBjYXVzZSBhIGRlbmlhbCBzZXJ2aWNlIGJ5IGFueSBkZXZpY2UgdGhhdAoraGFzIGJlZW4gYXV0aG9yaXplZCBmb3IgbmV0d29yayBhY2Nlc3MgKGVpdGhlciB3aXJlbGVzcyBvciB3aXJlZCkuIFRoaXMKK3dvdWxkIGFmZmVjdCBib3RoIHRoZSBXUFMgVVBuUCBmdW5jdGlvbmFsaXR5IGluIGEgV1BTIEFQIChob3N0YXBkIHdpdGgKK3VwbnBfaWZhY2UgcGFyYW1ldGVyIHNldCBpbiB0aGUgY29uZmlndXJhdGlvbikgYW5kIFdQUyBFUgorKHdwYV9zdXBwbGljYW50IHdpdGggV1BTX0VSX1NUQVJUIGNvbnRyb2wgaW50ZXJmYWNlIGNvbW1hbmQgdXNlZCkuCisKK1ZhbGlkYXRlIHRoZSBwYXJzZWQgY2h1bmsgbGVuZ3RoIHZhbHVlIHRvIGF2b2lkIHRoaXMuIEluIGFkZGl0aW9uIHRvCityZWplY3RpbmcgbmVnYXRpdmUgdmFsdWVzLCB3ZSBjYW4gYWxzbyByZWplY3QgY2h1bmsgc2l6ZSB0aGF0IHdvdWxkIGJlCitsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBjb25maWd1cmVkIGJvZHkgbGVuZ3RoLgorCitUaGFua3MgdG8gS29zdHlhIEtvcnRjaGluc2t5IG9mIEdvb2dsZSBzZWN1cml0eSB0ZWFtIGZvciBkaXNjb3ZlcmluZyBhbmQKK3JlcG9ydGluZyB0aGlzIGlzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorLS0tCisgc3JjL3dwcy9odHRwcmVhZC5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3dwcy9odHRwcmVhZC5jIGIvc3JjL3dwcy9odHRwcmVhZC5jCitpbmRleCAyZjA4ZjM3Li5kMjg1NWUzIDEwMDY0NAorLS0tIGEvc3JjL3dwcy9odHRwcmVhZC5jCisrKysgYi9zcmMvd3BzL2h0dHByZWFkLmMKK0BAIC01MzMsNiArNTMzLDEzIEBAIHN0YXRpYyB2b2lkIGh0dHByZWFkX3JlYWRfaGFuZGxlcihpbnQgc2QsIHZvaWQgKmVsb29wX2N0eCwgdm9pZCAqc29ja19jdHgpCisgCQkJCQlpZiAoIWlzeGRpZ2l0KCpjYnApKQorIAkJCQkJCWdvdG8gYmFkOworIAkJCQkJaC0+Y2h1bmtfc2l6ZSA9IHN0cnRvdWwoY2JwLCBOVUxMLCAxNik7CisrCQkJCQlpZiAoaC0+Y2h1bmtfc2l6ZSA8IDAgfHwKKysJCQkJCSAgICBoLT5jaHVua19zaXplID4gaC0+bWF4X2J5dGVzKSB7CisrCQkJCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCQkJCSAgICJodHRwcmVhZDogSW52YWxpZCBjaHVuayBzaXplICVkIiwKKysJCQkJCQkJICAgaC0+Y2h1bmtfc2l6ZSk7CisrCQkJCQkJZ290byBiYWQ7CisrCQkJCQl9CisgCQkJCQkvKiB0aHJvdyBhd2F5IGNodW5rIGhlYWRlcgorIAkJCQkJICogc28gd2UgaGF2ZSBvbmx5IHJlYWwgZGF0YQorIAkJCQkJICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAyLUVBUC1wd2Qtc2VydmVyLUZpeC1wYXlsb2FkLWxlbmd0aC12YWxpZGF0aW9uLWZvci1Db20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ3N2MyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMi1FQVAtcHdkLXNlcnZlci1GaXgtcGF5bG9hZC1sZW5ndGgtdmFsaWRhdGlvbi1mb3ItQ29tLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSBlMjhhNThiZTI2MTg0YzJhMjNmODBiNDEwZTA5OTdlZjFiZDVkNTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IEZyaSwgMSBNYXkgMjAxNSAxNjo0MDo0NCArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gRUFQLXB3ZCBzZXJ2ZXI6IEZpeCBwYXlsb2FkIGxlbmd0aCB2YWxpZGF0aW9uIGZvciBDb21taXQKKyBhbmQgQ29uZmlybQorCitUaGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBDb21taXQgYW5kIENvbmZpcm0gbWVzc2FnZSBwYXlsb2FkcyB3YXMgbm90CitjaGVja2VkIGJlZm9yZSByZWFkaW5nIHRoZW0uIFRoaXMgY291bGQgcmVzdWx0IGluIGEgYnVmZmVyIHJlYWQKK292ZXJmbG93IHdoZW4gcHJvY2Vzc2luZyBhbiBpbnZhbGlkIG1lc3NhZ2UuCisKK0ZpeCB0aGlzIGJ5IHZlcmlmeWluZyB0aGF0IHRoZSBwYXlsb2FkIGlzIG9mIGV4cGVjdGVkIGxlbmd0aCBiZWZvcmUKK3Byb2Nlc3NpbmcgaXQuIEluIGFkZGl0aW9uLCBlbmZvcmNlIGNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbiBzZXF1ZW5jZSB0bworbWFrZSBzdXJlIHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgYmVoYXZpb3IgaWYgcmVjZWl2aW5nIGEgQ29tbWl0L0NvbmZpcm0KK21lc3NhZ2UgYmVmb3JlIHRoZSBwcmV2aW91cyBleGNoYW5nZXMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4KKworVGhhbmtzIHRvIEtvc3R5YSBLb3J0Y2hpbnNreSBvZiBHb29nbGUgc2VjdXJpdHkgdGVhbSBmb3IgZGlzY292ZXJpbmcgYW5kCityZXBvcnRpbmcgdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgfCAxOSArKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMgYi9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jCitpbmRleCA2NmJkNWQyLi4zMTg5MTA1IDEwMDY0NAorLS0tIGEvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworKysrIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworQEAgLTY1Niw5ICs2NTYsMjEgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbW1pdF9yZXNwKHN0cnVjdCBlYXBfc20gKnNtLCBzdHJ1Y3QgZWFwX3B3ZF9kYXRhICpkYXRhLAorIAlCSUdOVU0gKnggPSBOVUxMLCAqeSA9IE5VTEwsICpjb2ZhY3RvciA9IE5VTEw7CisgCUVDX1BPSU5UICpLID0gTlVMTCwgKnBvaW50ID0gTlVMTDsKKyAJaW50IHJlcyA9IDA7CisrCXNpemVfdCBwcmltZV9sZW4sIG9yZGVyX2xlbjsKKyAKKyAJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBSZWNlaXZlZCBjb21taXQgcmVzcG9uc2UiKTsKKyAKKysJcHJpbWVfbGVuID0gQk5fbnVtX2J5dGVzKGRhdGEtPmdycC0+cHJpbWUpOworKwlvcmRlcl9sZW4gPSBCTl9udW1fYnl0ZXMoZGF0YS0+Z3JwLT5vcmRlcik7CisrCisrCWlmIChwYXlsb2FkX2xlbiAhPSAyICogcHJpbWVfbGVuICsgb3JkZXJfbGVuKSB7CisrCQl3cGFfcHJpbnRmKE1TR19JTkZPLAorKwkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIENvbW1pdCBwYXlsb2FkIGxlbmd0aCAldSAoZXhwZWN0ZWQgJXUpIiwKKysJCQkgICAodW5zaWduZWQgaW50KSBwYXlsb2FkX2xlbiwKKysJCQkgICAodW5zaWduZWQgaW50KSAoMiAqIHByaW1lX2xlbiArIG9yZGVyX2xlbikpOworKwkJZ290byBmaW47CisrCX0KKysKKyAJaWYgKCgoZGF0YS0+cGVlcl9zY2FsYXIgPSBCTl9uZXcoKSkgPT0gTlVMTCkgfHwKKyAJICAgICgoZGF0YS0+ayA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorIAkgICAgKChjb2ZhY3RvciA9IEJOX25ldygpKSA9PSBOVUxMKSB8fAorQEAgLTc3NCw2ICs3ODYsMTMgQEAgZWFwX3B3ZF9wcm9jZXNzX2NvbmZpcm1fcmVzcChzdHJ1Y3QgZWFwX3NtICpzbSwgc3RydWN0IGVhcF9wd2RfZGF0YSAqZGF0YSwKKyAJdTggY29uZltTSEEyNTZfTUFDX0xFTl0sICpjcnVmdCA9IE5VTEwsICpwdHI7CisgCWludCBvZmZzZXQ7CisgCisrCWlmIChwYXlsb2FkX2xlbiAhPSBTSEEyNTZfTUFDX0xFTikgeworKwkJd3BhX3ByaW50ZihNU0dfSU5GTywKKysJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBDb25maXJtIHBheWxvYWQgbGVuZ3RoICV1IChleHBlY3RlZCAldSkiLAorKwkJCSAgICh1bnNpZ25lZCBpbnQpIHBheWxvYWRfbGVuLCBTSEEyNTZfTUFDX0xFTik7CisrCQlnb3RvIGZpbjsKKysJfQorKworIAkvKiBidWlsZCB1cCB0aGUgY2lwaGVyc3VpdGU6IGdyb3VwIHwgcmFuZG9tX2Z1bmN0aW9uIHwgcHJmICovCisgCWdycCA9IGh0b25zKGRhdGEtPmdyb3VwX251bSk7CisgCXB0ciA9ICh1OCAqKSAmY3M7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2Y2U0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwMy1FQVAtcHdkLXBlZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC1yLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSA0NzdjNzQzOTVhY2QwMTIzMzQwNDU3YmE2ZjE1YWIzNDVkNDIwMTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyMzowNCArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNV0gRUFQLXB3ZCBwZWVyOiBGaXggVG90YWwtTGVuZ3RoIHBhcnNpbmcgZm9yIGZyYWdtZW50CisgcmVhc3NlbWJseQorCitUaGUgcmVtYWluaW5nIG51bWJlciBvZiBieXRlcyBpbiB0aGUgbWVzc2FnZSBjb3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlCitUb3RhbC1MZW5ndGggZmllbGQgc2l6ZSwgc28gdGhlIGxlbmd0aCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGNoZWNrZWQKK3ByaW9yIHRvIHJlYWRpbmcgdGhlIGZpZWxkIGFuZCBkZWNyZW1lbnRpbmcgdGhlIGxlbiB2YXJpYWJsZS4gVGhpcyBjb3VsZAoraGF2ZSByZXN1bHRlZCBpbiB0aGUgcmVtYWluaW5nIGxlbmd0aCBiZWNvbWluZyBuZWdhdGl2ZSBhbmQgaW50ZXJwcmV0ZWQKK2FzIGEgaHVnZSBwb3NpdGl2ZSBpbnRlZ2VyLgorCitJbiBhZGRpdGlvbiwgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyBhbHJlYWR5IHN0YXJ0ZWQgZnJhZ21lbnQgaW4gcHJvZ3Jlc3MKK2JlZm9yZSBhbGxvY2F0aW5nIGEgbmV3IGJ1ZmZlciBmb3IgcmVhc3NlbWJsaW5nIGZyYWdtZW50cy4gVGhpcyBhdm9pZCBhCitwb3RlbnRpYWwgbWVtb3J5IGxlYWsgd2hlbiBwcm9jZXNzaW5nIGludmFsaWQgbWVzc2FnZS4KKworU2lnbmVkLW9mZi1ieTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKy0tLQorIHNyYy9lYXBfcGVlci9lYXBfcHdkLmMgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK2luZGV4IGE2Mjk0MzcuLjFkMjA3OWIgMTAwNjQ0CistLS0gYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCisrKysgYi9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jCitAQCAtODY2LDExICs4NjYsMjMgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJICogaWYgaXQncyB0aGUgZmlyc3QgZnJhZ21lbnQgdGhlcmUnbGwgYmUgYSBsZW5ndGggZmllbGQKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0LT5pZ25vcmUgPSBUUlVFOworKwkJCXJldHVybiBOVUxMOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMgd2hvc2UgIgorIAkJCSAgICJ0b3RhbCBsZW5ndGggPSAlZCIsIHRvdF9sZW4pOworIAkJaWYgKHRvdF9sZW4gPiAxNTAwMCkKKyAJCQlyZXR1cm4gTlVMTDsKKysJCWlmIChkYXRhLT5pbmJ1ZikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogVW5leHBlY3RlZCBuZXcgZnJhZ21lbnQgc3RhcnQgd2hlbiBwcmV2aW91cyBmcmFnbWVudCBpcyBzdGlsbCBpbiB1c2UiKTsKKysJCQlyZXQtPmlnbm9yZSA9IFRSVUU7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisgCQlkYXRhLT5pbmJ1ZiA9IHdwYWJ1Zl9hbGxvYyh0b3RfbGVuKTsKKyAJCWlmIChkYXRhLT5pbmJ1ZiA9PSBOVUxMKSB7CisgCQkJd3BhX3ByaW50ZihNU0dfSU5GTywgIk91dCBvZiBtZW1vcnkgdG8gYnVmZmVyICIKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LzAwMDQtRUFQLXB3ZC1zZXJ2ZXItRml4LVRvdGFsLUxlbmd0aC1wYXJzaW5nLWZvci1mcmFnbWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGMwMmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA0LUVBUC1wd2Qtc2VydmVyLUZpeC1Ub3RhbC1MZW5ndGgtcGFyc2luZy1mb3ItZnJhZ21lbnQucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBGYW4gWGluIDxmYW4ueGluQGpwLmZ1aml0c3UuY29tPgorCitGcm9tIDMwMzVjYzI4OTRlMDgzMTliOTA1YmQ2NTYxZThiZGRjOGMyZGI5ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorRGF0ZTogU2F0LCAyIE1heSAyMDE1IDE5OjI2OjA2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNC81XSBFQVAtcHdkIHNlcnZlcjogRml4IFRvdGFsLUxlbmd0aCBwYXJzaW5nIGZvciBmcmFnbWVudAorIHJlYXNzZW1ibHkKKworVGhlIHJlbWFpbmluZyBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIG1lc3NhZ2UgY291bGQgYmUgc21hbGxlciB0aGFuIHRoZQorVG90YWwtTGVuZ3RoIGZpZWxkIHNpemUsIHNvIHRoZSBsZW5ndGggbmVlZHMgdG8gYmUgZXhwbGljaXRseSBjaGVja2VkCitwcmlvciB0byByZWFkaW5nIHRoZSBmaWVsZCBhbmQgZGVjcmVtZW50aW5nIHRoZSBsZW4gdmFyaWFibGUuIFRoaXMgY291bGQKK2hhdmUgcmVzdWx0ZWQgaW4gdGhlIHJlbWFpbmluZyBsZW5ndGggYmVjb21pbmcgbmVnYXRpdmUgYW5kIGludGVycHJldGVkCithcyBhIGh1Z2UgcG9zaXRpdmUgaW50ZWdlci4KKworSW4gYWRkaXRpb24sIGNoZWNrIHRoYXQgdGhlcmUgaXMgbm8gYWxyZWFkeSBzdGFydGVkIGZyYWdtZW50IGluIHByb2dyZXNzCitiZWZvcmUgYWxsb2NhdGluZyBhIG5ldyBidWZmZXIgZm9yIHJlYXNzZW1ibGluZyBmcmFnbWVudHMuIFRoaXMgYXZvaWQgYQorcG90ZW50aWFsIG1lbW9yeSBsZWFrIHdoZW4gcHJvY2Vzc2luZyBpbnZhbGlkIG1lc3NhZ2UuCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIHwgMTAgKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3NlcnZlci9lYXBfc2VydmVyX3B3ZC5jIGIvc3JjL2VhcF9zZXJ2ZXIvZWFwX3NlcnZlcl9wd2QuYworaW5kZXggMzE4OTEwNS4uMmJmYzNjMiAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKKysrKyBiL3NyYy9lYXBfc2VydmVyL2VhcF9zZXJ2ZXJfcHdkLmMKK0BAIC05NDIsMTEgKzk0MiwyMSBAQCBzdGF0aWMgdm9pZCBlYXBfcHdkX3Byb2Nlc3Moc3RydWN0IGVhcF9zbSAqc20sIHZvaWQgKnByaXYsCisgCSAqIHRoZSBmaXJzdCBmcmFnbWVudCBoYXMgYSB0b3RhbCBsZW5ndGgKKyAJICovCisgCWlmIChFQVBfUFdEX0dFVF9MRU5HVEhfQklUKGxtX2V4Y2gpKSB7CisrCQlpZiAobGVuIDwgMikgeworKwkJCXdwYV9wcmludGYoTVNHX0RFQlVHLAorKwkJCQkgICAiRUFQLXB3ZDogRnJhbWUgdG9vIHNob3J0IHRvIGNvbnRhaW4gVG90YWwtTGVuZ3RoIGZpZWxkIik7CisrCQkJcmV0dXJuOworKwkJfQorIAkJdG90X2xlbiA9IFdQQV9HRVRfQkUxNihwb3MpOworIAkJd3BhX3ByaW50ZihNU0dfREVCVUcsICJFQVAtcHdkOiBJbmNvbWluZyBmcmFnbWVudHMsIHRvdGFsICIKKyAJCQkgICAibGVuZ3RoID0gJWQiLCB0b3RfbGVuKTsKKyAJCWlmICh0b3RfbGVuID4gMTUwMDApCisgCQkJcmV0dXJuOworKwkJaWYgKGRhdGEtPmluYnVmKSB7CisrCQkJd3BhX3ByaW50ZihNU0dfREVCVUcsCisrCQkJCSAgICJFQVAtcHdkOiBVbmV4cGVjdGVkIG5ldyBmcmFnbWVudCBzdGFydCB3aGVuIHByZXZpb3VzIGZyYWdtZW50IGlzIHN0aWxsIGluIHVzZSIpOworKwkJCXJldHVybjsKKysJCX0KKyAJCWRhdGEtPmluYnVmID0gd3BhYnVmX2FsbG9jKHRvdF9sZW4pOworIAkJaWYgKGRhdGEtPmluYnVmID09IE5VTEwpIHsKKyAJCQl3cGFfcHJpbnRmKE1TR19JTkZPLCAiRUFQLXB3ZDogT3V0IG9mIG1lbW9yeSB0byAiCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvMDAwNS1FQVAtcHdkLXBlZXItRml4LWFzeW1tZXRyaWMtZnJhZ21lbnRhdGlvbi1iZWhhdmlvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDczNjAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC8wMDA1LUVBUC1wd2QtcGVlci1GaXgtYXN5bW1ldHJpYy1mcmFnbWVudGF0aW9uLWJlaGF2aW9yLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogRmFuIFhpbiA8ZmFuLnhpbkBqcC5mdWppdHN1LmNvbT4KKworRnJvbSAyOGEwNjlhNTQ1YjA2Yjk5ZWI1NWFkNTNmNjNmMmM5OWU2NWE5OGY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm91bmkgTWFsaW5lbiA8akB3MS5maT4KK0RhdGU6IFNhdCwgMiBNYXkgMjAxNSAxOToyNjoyOCArMDMwMAorU3ViamVjdDogW1BBVENIIDUvNV0gRUFQLXB3ZCBwZWVyOiBGaXggYXN5bW1ldHJpYyBmcmFnbWVudGF0aW9uIGJlaGF2aW9yCisKK1RoZSBMIChMZW5ndGgpIGFuZCBNIChNb3JlKSBmbGFncyBuZWVkcyB0byBiZSBjbGVhcmVkIGJlZm9yZSBkZWNpZGluZword2hldGhlciB0aGUgbG9jYWxseSBnZW5lcmF0ZWQgcmVzcG9uc2UgcmVxdWlyZXMgZnJhZ21lbnRhdGlvbi4gVGhpcworZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlc2UgZmxhZ3MgZnJvbSB0aGUgc2VydmVyIGNvdWxkIGhhdmUgYmVlbiBpbnZhbGlkCitmb3IgdGhlIGZvbGxvd2luZyBtZXNzYWdlLiBJbiBzb21lIGNhc2VzLCB0aGlzIGNvdWxkIGhhdmUgcmVzdWx0ZWQgaW4KK3RyaWdnZXJpbmcgdGhlIHdwYWJ1ZiBzZWN1cml0eSBjaGVjayB0aGF0IHdvdWxkIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcworZHVlIHRvIGludmFsaWQgYnVmZmVyIGFsbG9jYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CistLS0KKyBzcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZWFwX3BlZXIvZWFwX3B3ZC5jIGIvc3JjL2VhcF9wZWVyL2VhcF9wd2QuYworaW5kZXggMWQyMDc5Yi4uZTU4YjEzYSAxMDA2NDQKKy0tLSBhL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKKysrKyBiL3NyYy9lYXBfcGVlci9lYXBfcHdkLmMKK0BAIC05NjgsNiArOTY4LDcgQEAgZWFwX3B3ZF9wcm9jZXNzKHN0cnVjdCBlYXBfc20gKnNtLCB2b2lkICpwcml2LCBzdHJ1Y3QgZWFwX21ldGhvZF9yZXQgKnJldCwKKyAJLyoKKyAJICogd2UgaGF2ZSBvdXRwdXQhIERvIHdlIG5lZWQgdG8gZnJhZ21lbnQgaXQ/CisgCSAqLworKwlsbV9leGNoID0gRUFQX1BXRF9HRVRfRVhDSEFOR0UobG1fZXhjaCk7CisgCWxlbiA9IHdwYWJ1Zl9sZW4oZGF0YS0+b3V0YnVmKTsKKyAJaWYgKChsZW4gKyBFQVBfUFdEX0hEUl9TSVpFKSA+IGRhdGEtPm10dSkgeworIAkJcmVzcCA9IGVhcF9tc2dfYWxsb2MoRUFQX1ZFTkRPUl9JRVRGLCBFQVBfVFlQRV9QV0QsIGRhdGEtPm10dSwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC85OV93cGFfc3VwcGxpY2FudCBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvOTlfd3BhX3N1cHBsaWNhbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmNGRkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvOTlfd3BhX3N1cHBsaWNhbnQKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDcwMCAvdmFyL3J1bi93cGFfc3VwcGxpY2FudCBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNGUzOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L2RlZmNvbmZpZwpAQCAtMCwwICsxLDU1MiBAQAorIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGJ1aWxkIHRpbWUgY29uZmlndXJhdGlvbgorIworIyBUaGlzIGZpbGUgbGlzdHMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlCisjIGhvc3RhcGQgYmluYXJ5LiBBbGwgbGluZXMgc3RhcnRpbmcgd2l0aCAjIGFyZSBpZ25vcmVkLiBDb25maWd1cmF0aW9uIG9wdGlvbgorIyBsaW5lcyBtdXN0IGJlIGNvbW1lbnRlZCBvdXQgY29tcGxldGUsIGlmIHRoZXkgYXJlIG5vdCB0byBiZSBpbmNsdWRlZCwgaS5lLiwKKyMganVzdCBzZXR0aW5nIFZBUklBQkxFPW4gaXMgbm90IGRpc2FibGluZyB0aGF0IHZhcmlhYmxlLgorIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgaW4gTWFrZWZpbGUsIHNvIHZhcmlhYmxlcyBsaWtlIENGTEFHUyBhbmQgTElCUyBjYW4gYWxzbworIyBiZSBtb2RpZmllZCBmcm9tIGhlcmUuIEluIG1vc3QgY2FzZXMsIHRoZXNlIGxpbmVzIHNob3VsZCB1c2UgKz0gaW4gb3JkZXIgbm90CisjIHRvIG92ZXJyaWRlIHByZXZpb3VzIHZhbHVlcyBvZiB0aGUgdmFyaWFibGVzLgorCisKKyMgVW5jb21tZW50IGZvbGxvd2luZyB0d28gbGluZXMgYW5kIGZpeCB0aGUgcGF0aHMgaWYgeW91IGhhdmUgaW5zdGFsbGVkIE9wZW5TU0wKKyMgb3IgR251VExTIGluIG5vbi1kZWZhdWx0IGxvY2F0aW9uCisjQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9vcGVuc3NsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9vcGVuc3NsL2xpYgorCisjIFNvbWUgUmVkIEhhdCB2ZXJzaW9ucyBzZWVtIHRvIGluY2x1ZGUga2VyYmVyb3MgaGVhZGVyIGZpbGVzIGZyb20gT3BlblNTTCwgYnV0CisjIHRoZSBrZXJiZXJvcyBmaWxlcyBhcmUgbm90IGluIHRoZSBkZWZhdWx0IGluY2x1ZGUgcGF0aC4gRm9sbG93aW5nIGxpbmUgY2FuIGJlCisjIHVzZWQgdG8gZml4IGJ1aWxkIGlzc3VlcyBvbiBzdWNoIHN5c3RlbXMgKGtyYjUuaCBub3QgZm91bmQpLgorI0NGTEFHUyArPSAtSS91c3IvaW5jbHVkZS9rZXJiZXJvcworCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBmb3IgdmFyaW91cyBjcm9zcy1jb21waWxhdGlvbiBwbGF0Zm9ybXMKKworIyMjIyBzdmVhc29mdCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworI0NDPW1pcHNlbC11Y2xpYmMtZ2NjCisjQ0M9L29wdC9icmNtL2huZHRvb2xzLW1pcHNlbC11Y2xpYmMvYmluL21pcHNlbC11Y2xpYmMtZ2NjCisjQ0ZMQUdTICs9IC1PcworI0NQUEZMQUdTICs9IC1JLi4vc3JjL2luY2x1ZGUgLUkuLi8uLi9zcmMvcm91dGVyL29wZW5zc2wvaW5jbHVkZQorI0xJQlMgKz0gLUwvb3B0L2JyY20vaG5kdG9vbHMtbWlwc2VsLXVjbGliYy0wLjkuMTkvbGliIC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIyMgb3BlbndydCAoZS5nLiwgZm9yIExpbmtzeXMgV1JUNTRHKSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyNDQz1taXBzZWwtdWNsaWJjLWdjYworI0NDPS9vcHQvYnJjbS9obmR0b29scy1taXBzZWwtdWNsaWJjL2Jpbi9taXBzZWwtdWNsaWJjLWdjYworI0NGTEFHUyArPSAtT3MKKyNDUFBGTEFHUz0tSS4uL3NyYy9pbmNsdWRlIC1JLi4vb3BlbnNzbC0wLjkuN2QvaW5jbHVkZSBcCisjCS1JLi4vV1JUNTRHUy9yZWxlYXNlL3NyYy9pbmNsdWRlCisjTElCUyA9IC1sc3NsCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBIb3N0IEFQIGRyaXZlcgorQ09ORklHX0RSSVZFUl9IT1NUQVA9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEFnZXJlIGRyaXZlcgorI0NPTkZJR19EUklWRVJfSEVSTUVTPXkKKyMgQ2hhbmdlIGluY2x1ZGUgZGlyZWN0b3JpZXMgdG8gbWF0Y2ggd2l0aCB0aGUgbG9jYWwgc2V0dXAKKyNDRkxBR1MgKz0gLUkuLi8uLi9oY2YgLUkuLi8uLi9pbmNsdWRlIC1JLi4vLi4vaW5jbHVkZS9oY2YKKyNDRkxBR1MgKz0gLUkuLi8uLi9pbmNsdWRlL3dpcmVsZXNzCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgbWFkd2lmaSBkcml2ZXIKKyMgRGVwcmVjYXRlZDsgdXNlIENPTkZJR19EUklWRVJfV0VYVD15IGluc3RlYWQuCisjQ09ORklHX0RSSVZFUl9NQURXSUZJPXkKKyMgU2V0IGluY2x1ZGUgZGlyZWN0b3J5IHRvIHRoZSBtYWR3aWZpIHNvdXJjZSB0cmVlCisjQ0ZMQUdTICs9IC1JLi4vLi4vbWFkd2lmaQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5kaXN3cmFwcGVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfTkRJU1dSQVBQRVI9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEF0bWVsIGRyaXZlcgorIyBDT05GSUdfRFJJVkVSX0FUTUVMPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBvbGQgQnJvYWRjb20gZHJpdmVyCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIG5ld2VyIEJyb2FkY29tIGRyaXZlciAoImh5YnJpZCBMaW51eCBkcml2ZXIiKSBzdXBwb3J0cworIyBMaW51eCB3aXJlbGVzcyBleHRlbnNpb25zIGFuZCBkb2VzIG5vdCBuZWVkIChvciBldmVuIHdvcmspIHdpdGggdGhlIG9sZAorIyBkcml2ZXIgd3JhcHBlci4gVXNlIENPTkZJR19EUklWRVJfV0VYVD15IHdpdGggdGhhdCBkcml2ZXIuCisjQ09ORklHX0RSSVZFUl9CUk9BRENPTT15CisjIEV4YW1wbGUgcGF0aCBmb3Igd2xpb2N0bC5oOyBjaGFuZ2UgdG8gbWF0Y2ggeW91ciBjb25maWd1cmF0aW9uCisjQ0ZMQUdTICs9IC1JL29wdC9XUlQ1NEdTL3JlbGVhc2Uvc3JjL2luY2x1ZGUKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBJbnRlbCBpcHcyMTAwLzIyMDAgZHJpdmVyCisjIERlcHJlY2F0ZWQ7IHVzZSBDT05GSUdfRFJJVkVSX1dFWFQ9eSBpbnN0ZWFkLgorI0NPTkZJR19EUklWRVJfSVBXPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBSYWxpbmsgZHJpdmVyCisjQ09ORklHX0RSSVZFUl9SQUxJTks9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIGdlbmVyaWMgTGludXggd2lyZWxlc3MgZXh0ZW5zaW9ucworIyBOb3RlOiBXRVhUIGlzIGRlcHJlY2F0ZWQgaW4gdGhlIGN1cnJlbnQgTGludXgga2VybmVsIHZlcnNpb24gYW5kIG5vIG5ldworIyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIGl0LiBubDgwMjExLWJhc2VkIGludGVyZmFjZSBpcyB0aGUgbmV3CisjIHJlcGxhY2VtZW50IGZvciBXRVhUIGFuZCBpdHMgdXNlIGFsbG93cyB3cGFfc3VwcGxpY2FudCB0byBwcm9wZXJseSBjb250cm9sCisjIHRoZSBkcml2ZXIgdG8gaW1wcm92ZSBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGxpa2Ugcm9hbWluZyBhbmQgdG8gc3VwcG9ydCBuZXcKKyMgZnVuY3Rpb25hbGl0eS4KK0NPTkZJR19EUklWRVJfV0VYVD15CisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgTGludXggZHJpdmVycyB1c2luZyB0aGUgbmw4MDIxMSBrZXJuZWwgaW50ZXJmYWNlCitDT05GSUdfRFJJVkVSX05MODAyMTE9eQorCisjIGRyaXZlcl9ubDgwMjExLmMgcmVxdWlyZXMgbGlibmwuIElmIHlvdSBhcmUgY29tcGlsaW5nIGl0IHlvdXJzZWxmCisjIHlvdSBtYXkgbmVlZCB0byBwb2ludCBob3N0YXBkIHRvIHlvdXIgdmVyc2lvbiBvZiBsaWJubC4KKyMKKyNDRkxBR1MgKz0gLUkkPHBhdGggdG8gbGlibmwgaW5jbHVkZSBmaWxlcz4KKyNMSUJTICs9IC1MJDxwYXRoIHRvIGxpYm5sIGxpYnJhcnkgZmlsZXM+CisKKyMgVXNlIGxpYm5sIHYyLjAgKG9yIDMuMCkgbGlicmFyaWVzLgorI0NPTkZJR19MSUJOTDIwPXkKKworIyBVc2UgbGlibmwgMy4yIGxpYnJhcmllcyAoaWYgdGhpcyBpcyBzZWxlY3RlZCwgQ09ORklHX0xJQk5MMjAgaXMgaWdub3JlZCkKK0NPTkZJR19MSUJOTDMyPXkKKworCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIEZyZWVCU0QgbmV0ODAyMTEgbGF5ZXIgKGUuZy4sIEF0aGVyb3MgZHJpdmVyKQorI0NPTkZJR19EUklWRVJfQlNEPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2xvY2FsL2luY2x1ZGUKKyNMSUJTICs9IC1ML3Vzci9sb2NhbC9saWIKKyNMSUJTX3AgKz0gLUwvdXNyL2xvY2FsL2xpYgorI0xJQlNfYyArPSAtTC91c3IvbG9jYWwvbGliCisKKyMgRHJpdmVyIGludGVyZmFjZSBmb3IgV2luZG93cyBORElTCisjQ09ORklHX0RSSVZFUl9ORElTPXkKKyNDRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvdzMyYXBpL2RkaworI0xJQlMgKz0gLUwvdXNyL2xvY2FsL2xpYgorIyBGb3IgbmF0aXZlIGJ1aWxkIHVzaW5nIG1pbmd3CisjQ09ORklHX05BVElWRV9XSU5ET1dTPXkKKyMgQWRkaXRpb25hbCBkaXJlY3RvcmllcyBmb3IgY3Jvc3MtY29tcGlsYXRpb24gb24gTGludXggaG9zdCBmb3IgbWluZ3cgdGFyZ2V0CisjQ0ZMQUdTICs9IC1JL29wdC9taW5ndy9taW5ndzMyL2luY2x1ZGUvZGRrCisjTElCUyArPSAtTC9vcHQvbWluZ3cvbWluZ3czMi9saWIKKyNDQz1taW5ndzMyLWdjYworIyBCeSBkZWZhdWx0LCBkcml2ZXJfbmRpcyB1c2VzIFdpblBjYXAgZm9yIGxvdy1sZXZlbCBvcGVyYXRpb25zLiBUaGlzIGNhbiBiZQorIyByZXBsYWNlZCB3aXRoIHRoZSBmb2xsb3dpbmcgb3B0aW9uIHdoaWNoIHJlcGxhY2VzIFdpblBjYXAgY2FsbHMgd2l0aCBORElTVUlPLgorIyBIb3dldmVyLCB0aGlzIHJlcXVpcmVzIHRoYXQgV1pDIGlzIGRpc2FibGVkIChuZXQgc3RvcCB3emNzdmMpIGJlZm9yZSBzdGFydGluZworIyB3cGFfc3VwcGxpY2FudC4KKyMgQ09ORklHX1VTRV9ORElTVUlPPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciBkZXZlbG9wbWVudCB0ZXN0aW5nCisjQ09ORklHX0RSSVZFUl9URVNUPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB3aXJlZCBFdGhlcm5ldCBkcml2ZXJzCitDT05GSUdfRFJJVkVSX1dJUkVEPXkKKworIyBEcml2ZXIgaW50ZXJmYWNlIGZvciB0aGUgQnJvYWRjb20gUm9ib1N3aXRjaCBmYW1pbHkKKyNDT05GSUdfRFJJVkVSX1JPQk9TV0lUQ0g9eQorCisjIERyaXZlciBpbnRlcmZhY2UgZm9yIG5vIGRyaXZlciAoZS5nLiwgV1BTIEVSIG9ubHkpCisjQ09ORklHX0RSSVZFUl9OT05FPXkKKworIyBFbmFibGUgSUVFRSA4MDIuMVggU3VwcGxpY2FudCAoYXV0b21hdGljYWxseSBpbmNsdWRlZCBpZiBhbnkgRUFQIG1ldGhvZCBpcworIyBpbmNsdWRlZCkKK0NPTkZJR19JRUVFODAyMVhfRUFQT0w9eQorCisjIEVBUC1NRDUKK0NPTkZJR19FQVBfTUQ1PXkKKworIyBFQVAtTVNDSEFQdjIKK0NPTkZJR19FQVBfTVNDSEFQVjI9eQorCisjIEVBUC1UTFMKK0NPTkZJR19FQVBfVExTPXkKKworIyBFQUwtUEVBUAorQ09ORklHX0VBUF9QRUFQPXkKKworIyBFQVAtVFRMUworQ09ORklHX0VBUF9UVExTPXkKKworIyBFQVAtRkFTVAorIyBOb3RlOiBJZiBPcGVuU1NMIGlzIHVzZWQgYXMgdGhlIFRMUyBsaWJyYXJ5LCBPcGVuU1NMIDEuMCBvciBuZXdlciBpcyBuZWVkZWQKKyMgZm9yIEVBUC1GQVNUIHN1cHBvcnQuIE9sZGVyIE9wZW5TU0wgcmVsZWFzZXMgd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLCBlLmcuLAorIyB3aXRoIG9wZW5zc2wtMC45Ljh4LXRscy1leHRlbnNpb25zLnBhdGNoLCB0byBhZGQgdGhlIG5lZWRlZCBmdW5jdGlvbnMuCisjQ09ORklHX0VBUF9GQVNUPXkKKworIyBFQVAtR1RDCitDT05GSUdfRUFQX0dUQz15CisKKyMgRUFQLU9UUAorQ09ORklHX0VBUF9PVFA9eQorCisjIEVBUC1TSU0gKGVuYWJsZSBDT05GSUdfUENTQywgaWYgRUFQLVNJTSBpcyB1c2VkKQorI0NPTkZJR19FQVBfU0lNPXkKKworIyBFQVAtUFNLIChleHBlcmltZW50YWw7IHRoaXMgaXMgX25vdF8gbmVlZGVkIGZvciBXUEEtUFNLKQorI0NPTkZJR19FQVBfUFNLPXkKKworIyBFQVAtcHdkIChzZWN1cmUgYXV0aGVudGljYXRpb24gdXNpbmcgb25seSBhIHBhc3N3b3JkKQorI0NPTkZJR19FQVBfUFdEPXkKKworIyBFQVAtUEFYCisjQ09ORklHX0VBUF9QQVg9eQorCisjIExFQVAKK0NPTkZJR19FQVBfTEVBUD15CisKKyMgRUFQLUFLQSAoZW5hYmxlIENPTkZJR19QQ1NDLCBpZiBFQVAtQUtBIGlzIHVzZWQpCisjQ09ORklHX0VBUF9BS0E9eQorCisjIEVBUC1BS0EnIChlbmFibGUgQ09ORklHX1BDU0MsIGlmIEVBUC1BS0EnIGlzIHVzZWQpLgorIyBUaGlzIHJlcXVpcmVzIENPTkZJR19FQVBfQUtBIHRvIGJlIGVuYWJsZWQsIHRvby4KKyNDT05GSUdfRUFQX0FLQV9QUklNRT15CisKKyMgRW5hYmxlIFVTSU0gc2ltdWxhdG9yIChNaWxlbmFnZSkgZm9yIEVBUC1BS0EKKyNDT05GSUdfVVNJTV9TSU1VTEFUT1I9eQorCisjIEVBUC1TQUtFCisjQ09ORklHX0VBUF9TQUtFPXkKKworIyBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTSz15CisjIEluY2x1ZGUgc3VwcG9ydCBmb3Igb3B0aW9uYWwgU0hBMjU2IGNpcGhlciBzdWl0ZSBpbiBFQVAtR1BTSworI0NPTkZJR19FQVBfR1BTS19TSEEyNTY9eQorCisjIEVBUC1UTkMgYW5kIHJlbGF0ZWQgVHJ1c3RlZCBOZXR3b3JrIENvbm5lY3Qgc3VwcG9ydCAoZXhwZXJpbWVudGFsKQorI0NPTkZJR19FQVBfVE5DPXkKKworIyBXaS1GaSBQcm90ZWN0ZWQgU2V0dXAgKFdQUykKK0NPTkZJR19XUFM9eQorIyBFbmFibGUgV1NDIDIuMCBzdXBwb3J0CisjQ09ORklHX1dQUzI9eQorIyBFbmFibGUgV1BTIGV4dGVybmFsIHJlZ2lzdHJhciBmdW5jdGlvbmFsaXR5CisjQ09ORklHX1dQU19FUj15CisjIERpc2FibGUgY3JlZGVudGlhbHMgZm9yIGFuIG9wZW4gbmV0d29yayBieSBkZWZhdWx0IHdoZW4gYWN0aW5nIGFzIGEgV1BTCisjIHJlZ2lzdHJhci4KKyNDT05GSUdfV1BTX1JFR19ESVNBQkxFX09QRU49eQorIyBFbmFibGUgV1BTIHN1cHBvcnQgd2l0aCBORkMgY29uZmlnIG1ldGhvZAorI0NPTkZJR19XUFNfTkZDPXkKKworIyBFQVAtSUtFdjIKKyNDT05GSUdfRUFQX0lLRVYyPXkKKworIyBFQVAtRUtFCisjQ09ORklHX0VBUF9FS0U9eQorCisjIFBLQ1MjMTIgKFBGWCkgc3VwcG9ydCAodXNlZCB0byByZWFkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlIGZyb20KKyMgYSBmaWxlIHRoYXQgdXN1YWxseSBoYXMgZXh0ZW5zaW9uIC5wMTIgb3IgLnBmeCkKK0NPTkZJR19QS0NTMTI9eQorCisjIFNtYXJ0Y2FyZCBzdXBwb3J0IChpLmUuLCBwcml2YXRlIGtleSBvbiBhIHNtYXJ0Y2FyZCksIGUuZy4sIHdpdGggb3BlbnNzbAorIyBlbmdpbmUuCitDT05GSUdfU01BUlRDQVJEPXkKKworIyBQQy9TQyBpbnRlcmZhY2UgZm9yIHNtYXJ0Y2FyZHMgKFVTSU0sIEdTTSBTSU0pCisjIEVuYWJsZSB0aGlzIGlmIEVBUC1TSU0gb3IgRUFQLUFLQSBpcyBpbmNsdWRlZAorI0NPTkZJR19QQ1NDPXkKKworIyBTdXBwb3J0IEhUIG92ZXJyaWRlcyAoZGlzYWJsZSBIVC9IVDQwLCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfSFRfT1ZFUlJJREVTPXkKKworIyBTdXBwb3J0IFZIVCBvdmVycmlkZXMgKGRpc2FibGUgVkhULCBtYXNrIE1DUyByYXRlcywgZXRjLikKKyNDT05GSUdfVkhUX09WRVJSSURFUz15CisKKyMgRGV2ZWxvcG1lbnQgdGVzdGluZworI0NPTkZJR19FQVBPTF9URVNUPXkKKworIyBTZWxlY3QgY29udHJvbCBpbnRlcmZhY2UgYmFja2VuZCBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMsIGUuZywgd3BhX2NsaToKKyMgdW5peCA9IFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgZm9yIExpbnV4LypCU0QpCisjIHVkcCA9IFVEUCBzb2NrZXRzIHVzaW5nIGxvY2FsaG9zdCAoMTI3LjAuMC4xKQorIyBuYW1lZF9waXBlID0gV2luZG93cyBOYW1lZCBQaXBlIChkZWZhdWx0IGZvciBXaW5kb3dzKQorIyB1ZHAtcmVtb3RlID0gVURQIHNvY2tldHMgd2l0aCByZW1vdGUgYWNjZXNzIChvbmx5IGZvciB0ZXN0cyBzeXN0ZW1zL3B1cnBvc2UpCisjIHkgPSB1c2UgZGVmYXVsdCAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisjIElmIHRoaXMgb3B0aW9uIGlzIGNvbW1lbnRlZCBvdXQsIGNvbnRyb2wgaW50ZXJmYWNlIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUKKyMgYnVpbGQuCitDT05GSUdfQ1RSTF9JRkFDRT15CisKKyMgSW5jbHVkZSBzdXBwb3J0IGZvciBHTlUgUmVhZGxpbmUgYW5kIEhpc3RvcnkgTGlicmFyaWVzIGluIHdwYV9jbGkuCisjIFdoZW4gYnVpbGRpbmcgYSB3cGFfY2xpIGJpbmFyeSBmb3IgZGlzdHJpYnV0aW9uLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZXNlCisjIGxpYnJhcmllcyBhcmUgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBhcyBzdWNoLCBCU0QgbGljZW5zZSBtYXkgbm90IGFwcGx5IGZvcgorIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KKyNDT05GSUdfUkVBRExJTkU9eQorCisjIEluY2x1ZGUgaW50ZXJuYWwgbGluZSBlZGl0IG1vZGUgaW4gd3BhX2NsaS4gVGhpcyBjYW4gYmUgdXNlZCBhcyBhIHJlcGxhY2VtZW50CisjIGZvciBHTlUgUmVhZGxpbmUgdG8gcHJvdmlkZSBsaW1pdGVkIGNvbW1hbmQgbGluZSBlZGl0aW5nIGFuZCBoaXN0b3J5IHN1cHBvcnQuCisjQ09ORklHX1dQQV9DTElfRURJVD15CisKKyMgUmVtb3ZlIGRlYnVnZ2luZyBjb2RlIHRoYXQgaXMgcHJpbnRpbmcgb3V0IGRlYnVnIG1lc3NhZ2UgdG8gc3Rkb3V0LgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uc2lkZXJhYmx5CisjIGlmIGRlYnVnZ2luZyBjb2RlIGlzIG5vdCBuZWVkZWQuIFRoZSBzaXplIHJlZHVjdGlvbiBjYW4gYmUgYXJvdW5kIDM1JQorIyAoZS5nLiwgOTAga0IpLgorI0NPTkZJR19OT19TVERPVVRfREVCVUc9eQorCisjIFJlbW92ZSBXUEEgc3VwcG9ydCwgZS5nLiwgZm9yIHdpcmVkLW9ubHkgSUVFRSA4MDIuMVggc3VwcGxpY2FudCwgdG8gc2F2ZQorIyAzNS01MCBrQiBpbiBjb2RlIHNpemUuCisjQ09ORklHX05PX1dQQT15CisKKyMgUmVtb3ZlIElFRUUgODAyLjExaS9XUEEtUGVyc29uYWwgQVNDSUkgcGFzc3BocmFzZSBzdXBwb3J0CisjIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlZHVjZSBjb2RlIHNpemUgYnkgcmVtb3Zpbmcgc3VwcG9ydCBmb3IKKyMgY29udmVydGluZyBBU0NJSSBwYXNzcGhyYXNlcyBpbnRvIFBTSy4gSWYgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIHJlbW92ZWQsIHRoZQorIyBQU0sgY2FuIG9ubHkgYmUgY29uZmlndXJlZCBhcyB0aGUgNjQtb2N0ZXQgaGV4c3RyaW5nIChlLmcuLCBmcm9tCisjIHdwYV9wYXNzcGhyYXNlKS4gVGhpcyBzYXZlcyBhYm91dCAwLjUga0IgaW4gY29kZSBzaXplLgorI0NPTkZJR19OT19XUEFfUEFTU1BIUkFTRT15CisKKyMgRGlzYWJsZSBzY2FuIHJlc3VsdCBwcm9jZXNzaW5nIChhcF9tb2RlPTEpIHRvIHNhdmUgY29kZSBzaXplIGJ5IGFib3V0IDEga0IuCisjIFRoaXMgY2FuIGJlIHVzZWQgaWYgYXBfc2Nhbj0xIG1vZGUgaXMgbmV2ZXIgZW5hYmxlZC4KKyNDT05GSUdfTk9fU0NBTl9QUk9DRVNTSU5HPXkKKworIyBTZWxlY3QgY29uZmlndXJhdGlvbiBiYWNrZW5kOgorIyBmaWxlID0gdGV4dCBmaWxlIChlLmcuLCB3cGFfc3VwcGxpY2FudC5jb25mOyBub3RlOiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisjCXBhdGggaXMgZ2l2ZW4gb24gY29tbWFuZCBsaW5lLCBub3QgaGVyZTsgdGhpcyBvcHRpb24gaXMganVzdCB1c2VkIHRvCisjCXNlbGVjdCB0aGUgYmFja2VuZCB0aGF0IGFsbG93cyBjb25maWd1cmF0aW9uIGZpbGVzIHRvIGJlIHVzZWQpCisjIHdpbnJlZyA9IFdpbmRvd3MgcmVnaXN0cnkgKHNlZSB3aW5fZXhhbXBsZS5yZWcgZm9yIGFuIGV4YW1wbGUpCitDT05GSUdfQkFDS0VORD1maWxlCisKKyMgUmVtb3ZlIGNvbmZpZ3VyYXRpb24gd3JpdGUgZnVuY3Rpb25hbGl0eSAoaS5lLiwgdG8gYWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24KKyMgZmlsZSB0byBiZSB1cGRhdGVkIGJhc2VkIG9uIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VzKS4gVGhlIHJ1bnRpbWUKKyMgY29uZmlndXJhdGlvbiBjYW4gc3RpbGwgYmUgY2hhbmdlZCwgdGhlIGNoYW5nZXMgYXJlIGp1c3Qgbm90IGdvaW5nIHRvIGJlCisjIHBlcnNpc3RlbnQgb3ZlciByZXN0YXJ0cy4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieQorIyBhYm91dCAzLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19XUklURT15CisKKyMgUmVtb3ZlIHN1cHBvcnQgZm9yIGNvbmZpZ3VyYXRpb24gYmxvYnMgdG8gcmVkdWNlIGNvZGUgc2l6ZSBieSBhYm91dCAxLjUga0IuCisjQ09ORklHX05PX0NPTkZJR19CTE9CUz15CisKKyMgU2VsZWN0IHByb2dyYW0gZW50cnkgcG9pbnQgaW1wbGVtZW50YXRpb246CisjIG1haW4gPSBVTklYL1BPU0lYIGxpa2UgbWFpbigpIGZ1bmN0aW9uIChkZWZhdWx0KQorIyBtYWluX3dpbnN2YyA9IFdpbmRvd3Mgc2VydmljZSAocmVhZCBwYXJhbWV0ZXJzIGZyb20gcmVnaXN0cnkpCisjIG1haW5fbm9uZSA9IFZlcnkgYmFzaWMgZXhhbXBsZSAoZGV2ZWxvcG1lbnQgdXNlIG9ubHkpCisjQ09ORklHX01BSU49bWFpbgorCisjIFNlbGVjdCB3cmFwcGVyIGZvciBvcGVyYXRpbnMgc3lzdGVtIGFuZCBDIGxpYnJhcnkgc3BlY2lmaWMgZnVuY3Rpb25zCisjIHVuaXggPSBVTklYL1BPU0lYIGxpa2Ugc3lzdGVtcyAoZGVmYXVsdCkKKyMgd2luMzIgPSBXaW5kb3dzIHN5c3RlbXMKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX09TPXVuaXgKKworIyBTZWxlY3QgZXZlbnQgbG9vcCBpbXBsZW1lbnRhdGlvbgorIyBlbG9vcCA9IHNlbGVjdCgpIGxvb3AgKGRlZmF1bHQpCisjIGVsb29wX3dpbiA9IFdpbmRvd3MgZXZlbnRzIGFuZCBXYWl0Rm9yTXVsdGlwbGVPYmplY3QoKSBsb29wCisjQ09ORklHX0VMT09QPWVsb29wCisKKyMgU2hvdWxkIHdlIHVzZSBwb2xsIGluc3RlYWQgb2Ygc2VsZWN0PyBTZWxlY3QgaXMgdXNlZCBieSBkZWZhdWx0LgorI0NPTkZJR19FTE9PUF9QT0xMPXkKKworIyBTZWxlY3QgbGF5ZXIgMiBwYWNrZXQgaW1wbGVtZW50YXRpb24KKyMgbGludXggPSBMaW51eCBwYWNrZXQgc29ja2V0IChkZWZhdWx0KQorIyBwY2FwID0gbGlicGNhcC9saWJkbmV0L1dpblBjYXAKKyMgZnJlZWJzZCA9IEZyZWVCU0QgbGlicGNhcAorIyB3aW5wY2FwID0gV2luUGNhcCB3aXRoIHJlY2VpdmUgdGhyZWFkCisjIG5kaXMgPSBXaW5kb3dzIE5ESVNVSU8gKG5vdGU6IHJlcXVpcmVzIENPTkZJR19VU0VfTkRJU1VJTz15KQorIyBub25lID0gRW1wdHkgdGVtcGxhdGUKKyNDT05GSUdfTDJfUEFDS0VUPWxpbnV4CisKKyMgUGVlcktleSBoYW5kc2hha2UgZm9yIFN0YXRpb24gdG8gU3RhdGlvbiBMaW5rIChJRUVFIDgwMi4xMWUgRExTKQorQ09ORklHX1BFRVJLRVk9eQorCisjIElFRUUgODAyLjExdyAobWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uKSwgYWxzbyBrbm93biBhcyBQTUYKKyMgRHJpdmVyIHN1cHBvcnQgaXMgYWxzbyBuZWVkZWQgZm9yIElFRUUgODAyLjExdy4KKyNDT05GSUdfSUVFRTgwMjExVz15CisKKyMgU2VsZWN0IFRMUyBpbXBsZW1lbnRhdGlvbgorIyBvcGVuc3NsID0gT3BlblNTTCAoZGVmYXVsdCkKKyMgZ251dGxzID0gR251VExTCisjIGludGVybmFsID0gSW50ZXJuYWwgVExTdjEgaW1wbGVtZW50YXRpb24gKGV4cGVyaW1lbnRhbCkKKyMgbm9uZSA9IEVtcHR5IHRlbXBsYXRlCisjQ09ORklHX1RMUz1vcGVuc3NsCisKKyMgVExTLWJhc2VkIEVBUCBtZXRob2RzIHJlcXVpcmUgYXQgbGVhc3QgVExTIHYxLjAuIE5ld2VyIHZlcnNpb24gb2YgVExTICh2MS4xKQorIyBjYW4gYmUgZW5hYmxlZCB0byBnZXQgYSBzdHJvbmdlciBjb25zdHJ1Y3Rpb24gb2YgbWVzc2FnZXMgd2hlbiBibG9jayBjaXBoZXJzCisjIGFyZSB1c2VkLiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBzb21lIGV4aXN0aW5nIFRMUyB2MS4wIC1iYXNlZAorIyBpbXBsZW1lbnRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBUTFMgdjEuMSBtZXNzYWdlIChDbGllbnRIZWxsbyBpcworIyBzZW50IHByaW9yIHRvIG5lZ290aWF0aW5nIHdoaWNoIHZlcnNpb24gd2lsbCBiZSB1c2VkKQorI0NPTkZJR19UTFNWMTE9eQorCisjIFRMUy1iYXNlZCBFQVAgbWV0aG9kcyByZXF1aXJlIGF0IGxlYXN0IFRMUyB2MS4wLiBOZXdlciB2ZXJzaW9uIG9mIFRMUyAodjEuMikKKyMgY2FuIGJlIGVuYWJsZWQgdG8gZW5hYmxlIHVzZSBvZiBzdHJvbmdlciBjcnlwdG8gYWxnb3JpdGhtcy4gSXQgc2hvdWxkIGJlCisjIG5vdGVkIHRoYXQgc29tZSBleGlzdGluZyBUTFMgdjEuMCAtYmFzZWQgaW1wbGVtZW50YXRpb24gbWF5IG5vdCBiZSBjb21wYXRpYmxlCisjIHdpdGggVExTIHYxLjIgbWVzc2FnZSAoQ2xpZW50SGVsbG8gaXMgc2VudCBwcmlvciB0byBuZWdvdGlhdGluZyB3aGljaCB2ZXJzaW9uCisjIHdpbGwgYmUgdXNlZCkKKyNDT05GSUdfVExTVjEyPXkKKworIyBJZiBDT05GSUdfVExTPWludGVybmFsIGlzIHVzZWQsIGFkZGl0aW9uYWwgbGlicmFyeSBhbmQgaW5jbHVkZSBwYXRocyBhcmUKKyMgbmVlZGVkIGZvciBMaWJUb21NYXRoLiBBbHRlcm5hdGl2ZWx5LCBhbiBpbnRlZ3JhdGVkLCBtaW5pbWFsIHZlcnNpb24gb2YKKyMgTGliVG9tTWF0aCBjYW4gYmUgdXNlZC4gU2VlIGJlZ2lubmluZyBvZiBsaWJ0b21tYXRoLmMgZm9yIGRldGFpbHMgb24gYmVuZWZpdHMKKyMgYW5kIGRyYXdiYWNrcyBvZiB0aGlzIG9wdGlvbi4KKyNDT05GSUdfSU5URVJOQUxfTElCVE9NTUFUSD15CisjaWZuZGVmIENPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRICisjTFRNX1BBVEg9L3Vzci9zcmMvbGlidG9tbWF0aC0wLjM5CisjQ0ZMQUdTICs9IC1JJChMVE1fUEFUSCkKKyNMSUJTICs9IC1MJChMVE1fUEFUSCkKKyNMSUJTX3AgKz0gLUwkKExUTV9QQVRIKQorI2VuZGlmCisjIEF0IHRoZSBjb3N0IG9mIGFib3V0IDQga0Igb2YgYWRkaXRpb25hbCBiaW5hcnkgc2l6ZSwgdGhlIGludGVybmFsIExpYlRvbU1hdGgKKyMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBmYXN0ZXIgcm91dGluZXMgZm9yIGV4cHRtb2QsIHNxciwgYW5kIGRpdiB0bworIyBzcGVlZCB1cCBESCBhbmQgUlNBIGNhbGN1bGF0aW9uIGNvbnNpZGVyYWJseQorI0NPTkZJR19JTlRFUk5BTF9MSUJUT01NQVRIX0ZBU1Q9eQorCisjIEluY2x1ZGUgTkRJUyBldmVudCBwcm9jZXNzaW5nIHRocm91Z2ggV01JIGludG8gd3BhX3N1cHBsaWNhbnQvd3Bhc3ZjLgorIyBUaGlzIGlzIG9ubHkgZm9yIFdpbmRvd3MgYnVpbGRzIGFuZCByZXF1aXJlcyBXTUktcmVsYXRlZCBoZWFkZXIgZmlsZXMgYW5kCisjIFdiZW1VdWlkLkxpYiBmcm9tIFBsYXRmb3JtIFNESyBldmVuIHdoZW4gYnVpbGRpbmcgd2l0aCBNaW5HVy4KKyNDT05GSUdfTkRJU19FVkVOVFNfSU5URUdSQVRFRD15CisjUExBVEZPUk1TREtMSUI9Ii9vcHQvUHJvZ3JhbSBGaWxlcy9NaWNyb3NvZnQgUGxhdGZvcm0gU0RLL0xpYiIKKworIyBBZGQgc3VwcG9ydCBmb3Igb2xkIERCdXMgY29udHJvbCBpbnRlcmZhY2UKKyMgKGZpLmVwaXRlc3QuaG9zdGFwLldQQVN1cHBsaWNhbnQpCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVUz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjIChmaS53MS5ob3N0YXAud3BhX3N1cHBsaWNhbnQxKQorQ09ORklHX0NUUkxfSUZBQ0VfREJVU19ORVc9eQorCisjIEFkZCBpbnRyb3NwZWN0aW9uIHN1cHBvcnQgZm9yIG5ldyBEQnVzIGNvbnRyb2wgaW50ZXJmYWNlCisjQ09ORklHX0NUUkxfSUZBQ0VfREJVU19JTlRSTz15CisKKyMgQWRkIHN1cHBvcnQgZm9yIGxvYWRpbmcgRUFQIG1ldGhvZHMgZHluYW1pY2FsbHkgYXMgc2hhcmVkIGxpYnJhcmllcy4KKyMgV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBlYWNoIEVBUCBtZXRob2QgY2FuIGJlIGVpdGhlciBpbmNsdWRlZAorIyBzdGF0aWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PXkpIG9yIGR5bmFtaWNhbGx5IChDT05GSUdfRUFQXzxtZXRob2Q+PWR5bikuCisjIER5bmFtaWMgRUFQIG1ldGhvZHMgYXJlIGJ1aWxkIGFzIHNoYXJlZCBvYmplY3RzIChlYXBfKi5zbykgYW5kIHRoZXkgbmVlZCB0bworIyBiZSBsb2FkZWQgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgd3BhX3N1cHBsaWNhbnQgY29uZmlndXJhdGlvbiBmaWxlCisjIChzZWUgbG9hZF9keW5hbWljX2VhcCBwYXJhbWV0ZXIgaW4gdGhlIGV4YW1wbGUgZmlsZSkgYmVmb3JlIGJlaW5nIHVzZWQgaW4KKyMgdGhlIG5ldHdvcmsgYmxvY2tzLgorIworIyBOb3RlIHRoYXQgc29tZSBzaGFyZWQgcGFydHMgb2YgRUFQIG1ldGhvZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBtYWluIHByb2dyYW0KKyMgYW5kIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGR5bmFtaWMgRUFQIG1ldGhvZHMgdXNpbmcgdGhlc2UgcGFydHMsIHRoZQorIyBtYWluIHByb2dyYW0gbXVzdCBoYXZlIGJlZW4gYnVpbGQgd2l0aCB0aGUgRUFQIG1ldGhvZCBlbmFibGVkICg9eSBvciA9ZHluKS4KKyMgVGhpcyBtZWFucyB0aGF0IEVBUC1UTFMvUEVBUC9UVExTL0ZBU1QgY2Fubm90IGJlIGFkZGVkIGFzIGR5bmFtaWMgbGlicmFyaWVzCisjIHVubGVzcyBhdCBsZWFzdCBvbmUgb2YgdGhlbSB3YXMgaW5jbHVkZWQgaW4gdGhlIG1haW4gYnVpbGQgdG8gZm9yY2UgaW5jbHVzaW9uCisjIG9mIHRoZSBzaGFyZWQgY29kZS4gU2ltaWxhcmx5LCBhdCBsZWFzdCBvbmUgb2YgRUFQLVNJTS9BS0EgbXVzdCBiZSBpbmNsdWRlZAorIyBpbiB0aGUgbWFpbiBidWlsZCB0byBiZSBhYmxlIHRvIGxvYWQgdGhlc2UgbWV0aG9kcyBkeW5hbWljYWxseS4KKyMKKyMgUGxlYXNlIGFsc28gbm90ZSB0aGF0IHVzaW5nIGR5bmFtaWMgbGlicmFyaWVzIHdpbGwgaW5jcmVhc2UgdGhlIHRvdGFsIGJpbmFyeQorIyBzaXplLiBUaHVzLCBpdCBtYXkgbm90IGJlIHRoZSBiZXN0IG9wdGlvbiBmb3IgdGFyZ2V0cyB0aGF0IGhhdmUgbGltaXRlZAorIyBhbW91bnQgb2YgbWVtb3J5L2ZsYXNoLgorI0NPTkZJR19EWU5BTUlDX0VBUF9NRVRIT0RTPXkKKworIyBJRUVFIFN0ZCA4MDIuMTFyLTIwMDggKEZhc3QgQlNTIFRyYW5zaXRpb24pCisjQ09ORklHX0lFRUU4MDIxMVI9eQorCisjIEFkZCBzdXBwb3J0IGZvciB3cml0aW5nIGRlYnVnIGxvZyB0byBhIGZpbGUgKC90bXAvd3BhX3N1cHBsaWNhbnQtbG9nLSMudHh0KQorI0NPTkZJR19ERUJVR19GSUxFPXkKKworIyBTZW5kIGRlYnVnIG1lc3NhZ2VzIHRvIHN5c2xvZyBpbnN0ZWFkIG9mIHN0ZG91dAorI0NPTkZJR19ERUJVR19TWVNMT0c9eQorIyBTZXQgc3lzbG9nIGZhY2lsaXR5IGZvciBkZWJ1ZyBtZXNzYWdlcworI0NPTkZJR19ERUJVR19TWVNMT0dfRkFDSUxJVFk9TE9HX0RBRU1PTgorCisjIEFkZCBzdXBwb3J0IGZvciBzZW5kaW5nIGFsbCBkZWJ1ZyBtZXNzYWdlcyAocmVnYXJkbGVzcyBvZiBkZWJ1ZyB2ZXJib3NpdHkpCisjIHRvIHRoZSBMaW51eCBrZXJuZWwgdHJhY2luZyBmYWNpbGl0eS4gVGhpcyBoZWxwcyBkZWJ1ZyB0aGUgZW50aXJlIHN0YWNrIGJ5CisjIG1ha2luZyBpdCBlYXN5IHRvIHJlY29yZCBldmVyeXRoaW5nIGhhcHBlbmluZyBmcm9tIHRoZSBkcml2ZXIgdXAgaW50byB0aGUKKyMgc2FtZSBmaWxlLCBlLmcuLCB1c2luZyB0cmFjZS1jbWQuCisjQ09ORklHX0RFQlVHX0xJTlVYX1RSQUNJTkc9eQorCisjIEVuYWJsZSBwcml2aWxlZ2Ugc2VwYXJhdGlvbiAoc2VlIFJFQURNRSAnUHJpdmlsZWdlIHNlcGFyYXRpb24nIGZvciBkZXRhaWxzKQorI0NPTkZJR19QUklWU0VQPXkKKworIyBFbmFibGUgbWl0aWdhdGlvbiBhZ2FpbnN0IGNlcnRhaW4gYXR0YWNrcyBhZ2FpbnN0IFRLSVAgYnkgZGVsYXlpbmcgTWljaGFlbAorIyBNSUMgZXJyb3IgcmVwb3J0cyBieSBhIHJhbmRvbSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIDAgYW5kIDYwIHNlY29uZHMKKyNDT05GSUdfREVMQVlFRF9NSUNfRVJST1JfUkVQT1JUPXkKKworIyBFbmFibGUgdHJhY2luZyBjb2RlIGZvciBkZXZlbG9wZXIgZGVidWdnaW5nCisjIFRoaXMgdHJhY2tzIHVzZSBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIG90aGVyIHJlZ2lzdHJhdGlvbnMgYW5kIHJlcG9ydHMKKyMgaW5jb3JyZWN0IHVzZSB3aXRoIGEgYmFja3RyYWNlIG9mIGNhbGwgKG9yIGFsbG9jYXRpb24pIGxvY2F0aW9uLgorI0NPTkZJR19XUEFfVFJBQ0U9eQorIyBGb3IgQlNELCB1bmNvbW1lbnQgdGhlc2UuCisjTElCUyArPSAtbGV4ZWNpbmZvCisjTElCU19wICs9IC1sZXhlY2luZm8KKyNMSUJTX2MgKz0gLWxleGVjaW5mbworCisjIFVzZSBsaWJiZmQgdG8gZ2V0IG1vcmUgZGV0YWlscyBmb3IgZGV2ZWxvcGVyIGRlYnVnZ2luZworIyBUaGlzIGVuYWJsZXMgdXNlIG9mIGxpYmJmZCB0byBnZXQgbW9yZSBkZXRhaWxlZCBzeW1ib2xzIGZvciB0aGUgYmFja3RyYWNlcworIyBnZW5lcmF0ZWQgYnkgQ09ORklHX1dQQV9UUkFDRT15LgorI0NPTkZJR19XUEFfVFJBQ0VfQkZEPXkKKyMgRm9yIEJTRCwgdW5jb21tZW50IHRoZXNlLgorI0xJQlMgKz0gLWxiZmQgLWxpYmVydHkgLWx6CisjTElCU19wICs9IC1sYmZkIC1saWJlcnR5IC1segorI0xJQlNfYyArPSAtbGJmZCAtbGliZXJ0eSAtbHoKKworQ09ORklHX1RMUyA9ICVzc2wlCitDT05GSUdfQ1RSTF9JRkFDRV9EQlVTPXkKK0NPTkZJR19DVFJMX0lGQUNFX0RCVVNfTkVXPXkKKworIyB3cGFfc3VwcGxpY2FudCBkZXBlbmRzIG9uIHN0cm9uZyByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gYmVpbmcgYXZhaWxhYmxlCisjIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIG9zX2dldF9yYW5kb20oKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGZldGNoIHJhbmRvbQorIyBkYXRhIHdoZW4gbmVlZGVkLCBlLmcuLCBmb3Iga2V5IGdlbmVyYXRpb24uIE9uIExpbnV4IGFuZCBCU0Qgc3lzdGVtcywgdGhpcworIyB3b3JrcyBieSByZWFkaW5nIC9kZXYvdXJhbmRvbS4gSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlIE9TIGVudHJvcHkgcG9vbAorIyBuZWVkcyB0byBiZSBwcm9wZXJseSBpbml0aWFsaXplZCBiZWZvcmUgd3BhX3N1cHBsaWNhbnQgaXMgc3RhcnRlZC4gVGhpcyBpcworIyBpbXBvcnRhbnQgZXNwZWNpYWxseSBvbiBlbWJlZGRlZCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYSBoYXJkd2FyZSByYW5kb20KKyMgbnVtYmVyIGdlbmVyYXRvciBhbmQgbWF5IGJ5IGRlZmF1bHQgc3RhcnQgdXAgd2l0aCBtaW5pbWFsIGVudHJvcHkgYXZhaWxhYmxlCisjIGZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24uCisjCisjIEFzIGEgc2FmZXR5IG5ldCwgd3BhX3N1cHBsaWNhbnQgaXMgYnkgZGVmYXVsdCB0cnlpbmcgdG8gaW50ZXJuYWxseSBjb2xsZWN0CisjIGFkZGl0aW9uYWwgZW50cm9weSBmb3IgZ2VuZXJhdGluZyByYW5kb20gZGF0YSB0byBtaXggaW4gd2l0aCB0aGUgZGF0YSBmZXRjaGVkCisjIGZyb20gdGhlIE9TLiBUaGlzIGJ5IGl0c2VsZiBpcyBub3QgY29uc2lkZXJlZCB0byBiZSB2ZXJ5IHN0cm9uZywgYnV0IGl0IG1heQorIyBoZWxwIGluIGNhc2VzIHdoZXJlIHRoZSBzeXN0ZW0gcG9vbCBpcyBub3QgaW5pdGlhbGl6ZWQgcHJvcGVybHkuIEhvd2V2ZXIsIGl0CisjIGlzIHZlcnkgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3lzdGVtIHBvb2wgaXMgaW5pdGlhbGl6ZWQgd2l0aCBlbm91Z2gKKyMgZW50cm9weSBlaXRoZXIgYnkgdXNpbmcgaGFyZHdhcmUgYXNzaXN0ZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb3IgYnkKKyMgc3RvcmluZyBzdGF0ZSBvdmVyIGRldmljZSByZWJvb3RzLgorIworIyB3cGFfc3VwcGxpY2FudCBjYW4gYmUgY29uZmlndXJlZCB0byBtYWludGFpbiBpdHMgb3duIGVudHJvcHkgc3RvcmUgb3ZlcgorIyByZXN0YXJ0cyB0byBlbmhhbmNlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbi4gVGhpcyBpcyBub3QgcGVyZmVjdCwgYnV0IGl0IGlzCisjIG11Y2ggbW9yZSBzZWN1cmUgdGhhbiB1c2luZyB0aGUgc2FtZSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycyBhZnRlciBldmVyeQorIyByZWJvb3QuIFRoaXMgY2FuIGJlIGVuYWJsZWQgd2l0aCAtZTxlbnRyb3B5IGZpbGU+IGNvbW1hbmQgbGluZSBvcHRpb24uIFRoZQorIyBzcGVjaWZpZWQgZmlsZSBuZWVkcyB0byBiZSByZWFkYWJsZSBhbmQgd3JpdGFibGUgYnkgd3BhX3N1cHBsaWNhbnQuCisjCisjIElmIHRoZSBvc19nZXRfcmFuZG9tKCkgaXMga25vd24gdG8gcHJvdmlkZSBzdHJvbmcgcmFuZG9tIGRhdGEgKGUuZy4sIG9uCisjIExpbnV4L0JTRCwgdGhlIGJvYXJkIGluIHF1ZXN0aW9uIGlzIGtub3duIHRvIGhhdmUgcmVsaWFibGUgc291cmNlIG9mIHJhbmRvbQorIyBkYXRhIGZyb20gL2Rldi91cmFuZG9tKSwgdGhlIGludGVybmFsIHdwYV9zdXBwbGljYW50IHJhbmRvbSBwb29sIGNhbiBiZQorIyBkaXNhYmxlZC4gVGhpcyB3aWxsIHNhdmUgc29tZSBpbiBiaW5hcnkgc2l6ZSBhbmQgQ1BVIHVzZS4gSG93ZXZlciwgdGhpcworIyBzaG91bGQgb25seSBiZSBjb25zaWRlcmVkIGZvciBidWlsZHMgdGhhdCBhcmUga25vd24gdG8gYmUgdXNlZCBvbiBkZXZpY2VzCisjIHRoYXQgbWVldCB0aGUgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBhYm92ZS4KKyNDT05GSUdfTk9fUkFORE9NX1BPT0w9eQorCisjIElFRUUgODAyLjExbiAoSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjQ09ORklHX0lFRUU4MDIxMU49eQorCisjIElFRUUgODAyLjExYWMgKFZlcnkgSGlnaCBUaHJvdWdocHV0KSBzdXBwb3J0IChtYWlubHkgZm9yIEFQIG1vZGUpCisjIChkZXBlbmRzIG9uIENPTkZJR19JRUVFODAyMTFOKQorI0NPTkZJR19JRUVFODAyMTFBQz15CisKKyMgV2lyZWxlc3MgTmV0d29yayBNYW5hZ2VtZW50IChJRUVFIFN0ZCA4MDIuMTF2LTIwMTEpCisjIE5vdGU6IFRoaXMgaXMgZXhwZXJpbWVudGFsIGFuZCBub3QgY29tcGxldGUgaW1wbGVtZW50YXRpb24uCisjQ09ORklHX1dOTT15CisKKyMgSW50ZXJ3b3JraW5nIChJRUVFIDgwMi4xMXUpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHkgdG8gaW1wcm92ZSBpbnRlcndvcmtpbmcgd2l0aAorIyBleHRlcm5hbCBuZXR3b3JrcyAoR0FTL0FOUVAgdG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgbmV0d29ya3MgYW5kIG5ldHdvcmsKKyMgc2VsZWN0aW9uIGJhc2VkIG9uIGF2YWlsYWJsZSBjcmVkZW50aWFscykuCisjQ09ORklHX0lOVEVSV09SS0lORz15CisKKyMgSG90c3BvdCAyLjAKKyNDT05GSUdfSFMyMD15CisKKyMgRGlzYWJsZSByb2FtaW5nIGluIHdwYV9zdXBwbGljYW50CisjQ09ORklHX05PX1JPQU1JTkc9eQorCisjIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50CisjIFRoaXMgY2FuIGJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nIEFQIG1vZGUgb3BlcmF0aW9ucyB3aXRoIHdwYV9zdXBwbGljYW50LiBJdAorIyBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGlzIGlzIG1haW5seSBhaW1lZCBhdCBzaW1wbGUgY2FzZXMgbGlrZQorIyBXUEEyLVBlcnNvbmFsIHdoaWxlIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9ucyBsaWtlIFdQQTItRW50ZXJwcmlzZSB3aXRoIGFuCisjIGV4dGVybmFsIFJBRElVUyBzZXJ2ZXIgY2FuIGJlIHN1cHBvcnRlZCB3aXRoIGhvc3RhcGQuCitDT05GSUdfQVA9eQorCitDT05GSUdfQkdTQ0FOX1NJTVBMRT15CisKKyMgUDJQIChXaS1GaSBEaXJlY3QpCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFAyUCBzdXBwb3J0IGluIHdwYV9zdXBwbGljYW50LiBTZWUgUkVBRE1FLVAyUCBmb3IKKyMgbW9yZSBpbmZvcm1hdGlvbiBvbiBQMlAgb3BlcmF0aW9ucy4KKyNDT05GSUdfUDJQPXkKKworIyBFbmFibGUgVERMUyBzdXBwb3J0CisjQ09ORklHX1RETFM9eQorCisjIFdpLUZpIERpcmVjdAorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBXaS1GaSBEaXJlY3QgZXh0ZW5zaW9ucyBmb3IgUDJQIHVzaW5nIGFuIGV4dGVybmFsCisjIHByb2dyYW0gdG8gY29udHJvbCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBleGNoYW5nZXMgaW4gdGhlIG1lc3NhZ2VzLgorI0NPTkZJR19XSUZJX0RJU1BMQVk9eQorCisjIEF1dG9zY2FuCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGF1dG9tYXRpYyBzY2FuIHN1cHBvcnQgaW4gd3BhX3N1cHBsaWNhbnQuCisjIFNlZSB3cGFfc3VwcGxpY2FudC5jb25mIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGF1dG9zY2FuIHVzYWdlLgorIworIyBFbmFibGluZyBkaXJlY3RseSBhIG1vZHVsZSB3aWxsIGVuYWJsZSBhdXRvc2NhbiBzdXBwb3J0LgorIyBGb3IgZXhwb25lbnRpYWwgbW9kdWxlOgorQ09ORklHX0FVVE9TQ0FOX0VYUE9ORU5USUFMPXkKKyMgRm9yIHBlcmlvZGljIG1vZHVsZToKKyNDT05GSUdfQVVUT1NDQU5fUEVSSU9ESUM9eQorCisjIFBhc3N3b3JkIChhbmQgcGFzc3BocmFzZSwgZXRjLikgYmFja2VuZCBmb3IgZXh0ZXJuYWwgc3RvcmFnZQorIyBUaGVzZSBvcHRpb25hbCBtZWNoYW5pc21zIGNhbiBiZSB1c2VkIHRvIGFkZCBzdXBwb3J0IGZvciBzdG9yaW5nIHBhc3N3b3JkcworIyBhbmQgb3RoZXIgc2VjcmV0cyBpbiBleHRlcm5hbCAodG8gd3BhX3N1cHBsaWNhbnQpIGxvY2F0aW9uLiBUaGlzIGFsbG93cywgZm9yCisjIGV4YW1wbGUsIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMga2V5IHN0b3JhZ2UgdG8gYmUgdXNlZAorIworIyBFeHRlcm5hbCBwYXNzd29yZCBiYWNrZW5kIGZvciB0ZXN0aW5nIHB1cnBvc2VzIChkZXZlbG9wZXIgdXNlKQorI0NPTkZJR19FWFRfUEFTU1dPUkRfVEVTVD15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50LnNoIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzllNWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKworCitXUEFfU1VQX0JJTj0iL3Vzci9zYmluL3dwYV9zdXBwbGljYW50IgorV1BBX1NVUF9QTkFNRT0id3BhX3N1cHBsaWNhbnQiCitXUEFfU1VQX1BJREZJTEU9Ii92YXIvcnVuL3dwYV9zdXBwbGljYW50LiRJRkFDRS5waWQiCitXUEFfU1VQX09QVElPTlM9Ii1CIC1QICRXUEFfU1VQX1BJREZJTEUgLWkgJElGQUNFIgorCitWRVJCT1NJVFk9MAorCisKK2lmIFsgLXMgIiRJRl9XUEFfQ09ORiIgXTsgdGhlbgorCVdQQV9TVVBfQ09ORj0iLWMgJElGX1dQQV9DT05GIgorZWxzZQorCWV4aXQgMAorZmkKKworaWYgWyAhIC14ICIkV1BBX1NVUF9CSU4iIF07IHRoZW4KKwkKKwlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiBiaW5hcmllcyBub3QgZXhlY3V0YWJsZSBvciBtaXNzaW5nIGZyb20gJFdQQV9TVVBfQklOIgorCWZpCisJCisJZXhpdCAxCitmaQorCitpZiBbICIkTU9ERSIgPSAic3RhcnQiIF0gOyB0aGVuCisJIyBkcml2ZXIgdHlwZSBvZiBpbnRlcmZhY2UsIGRlZmF1bHRzIHRvIHdleHQgd2hlbiB1bmRlZmluZWQKKwlpZiBbIC1zICIvZXRjL3dwYV9zdXBwbGljYW50L2RyaXZlci4kSUZBQ0UiIF07IHRoZW4KKwkJSUZfV1BBX0RSSVZFUj0kKGNhdCAiL2V0Yy93cGFfc3VwcGxpY2FudC9kcml2ZXIuJElGQUNFIikKKwllbGlmIFsgLXogIiRJRl9XUEFfRFJJVkVSIiBdOyB0aGVuCisJCQorCQlpZiBbICIkVkVSQk9TSVRZIiA9ICIxIiBdOyB0aGVuCisJCQllY2hvICIkV1BBX1NVUF9QTkFNRTogd3BhLWRyaXZlciBub3QgcHJvdmlkZWQsIHVzaW5nIFwid2V4dFwiIgorCQlmaQorCQkKKwkJSUZfV1BBX0RSSVZFUj0id2V4dCIKKwlmaQorCQorCSMgaWYgd2UgaGF2ZSBwYXNzZWQgdGhlIGNyaXRlcmlhLCBzdGFydCB3cGFfc3VwcGxpY2FudAorCWlmIFsgLW4gIiRXUEFfU1VQX0NPTkYiIF07IHRoZW4KKwkJCisJCWlmIFsgIiRWRVJCT1NJVFkiID0gIjEiIF07IHRoZW4KKwkJCWVjaG8gIiRXUEFfU1VQX1BOQU1FOiAkV1BBX1NVUF9CSU4gJFdQQV9TVVBfT1BUSU9OUyAkV1BBX1NVUF9DT05GIC1EICRJRl9XUEFfRFJJVkVSIgorCQlmaQorCQkKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXN0YXJ0YXMgJFdQQV9TVVBfQklOIC0tcGlkZmlsZSAkV1BBX1NVUF9QSURGSUxFIFwKKwkJCS0tICAkV1BBX1NVUF9PUFRJT05TICRXUEFfU1VQX0NPTkYgLUQgJElGX1dQQV9EUklWRVIKKwlmaQorCisJIyBpZiB0aGUgaW50ZXJmYWNlIHNvY2tldCBleGlzdHMsIHRoZW4gd3BhX3N1cHBsaWNhbnQgd2FzIGludm9rZWQgc3VjY2Vzc2Z1bGx5CisJaWYgWyAtUyAiJFdQQV9DT01NT05fQ1RSTF9JRkFDRS8kSUZBQ0UiIF07IHRoZW4KKwkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IGN0cmxfaW50ZXJmYWNlIHNvY2tldCBsb2NhdGVkIGF0ICRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIgorCQlmaQorCisJCWV4aXQgMAorCQkKKwlmaQorCQorZWxpZiBbICIkTU9ERSIgPSAic3RvcCIgXTsgdGhlbgorCisJaWYgWyAtZiAiJFdQQV9TVVBfUElERklMRSIgXTsgdGhlbgorCQkKKwkJaWYgWyAiJFZFUkJPU0lUWSIgPSAiMSIgXTsgdGhlbgorCQkJZWNobyAiJFdQQV9TVVBfUE5BTUU6IHRlcm1pbmF0aW5nICRXUEFfU1VQX1BOQU1FIGRhZW1vbiIKKwkJZmkKKwkJCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IFwKKwkJCS0tbmFtZSAkV1BBX1NVUF9QTkFNRSAtLXBpZGZpbGUJJFdQQV9TVVBfUElERklMRQorCQkJCisJCWlmIFsgLVMgIiRXUEFfQ09NTU9OX0NUUkxfSUZBQ0UvJElGQUNFIiBdOyB0aGVuCisJCQlybSAtZiAkV1BBX0NPTU1PTl9DVFJMX0lGQUNFLyRJRkFDRQorCQlmaQorCQkJCisJCWlmIFsgLWYgIiRXUEFfU1VQX1BJREZJTEUiIF07IHRoZW4KKwkJCXJtIC1mICRXUEFfU1VQX1BJREZJTEUKKwkJZmkKKwlmaQorCitmaQorCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZiBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODI1OGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudC93cGFfc3VwcGxpY2FudC5jb25mCkBAIC0wLDAgKzEsNjkwIEBACisjIyMjIyBFeGFtcGxlIHdwYV9zdXBwbGljYW50IGNvbmZpZ3VyYXRpb24gZmlsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIFRoaXMgZmlsZSBkZXNjcmliZXMgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCBhbmQgbGlzdHMgYWxsIGF2YWlsYWJsZSBvcHRpb24uCisjIFBsZWFzZSBhbHNvIHRha2UgYSBsb29rIGF0IHNpbXBsZXIgY29uZmlndXJhdGlvbiBleGFtcGxlcyBpbiAnZXhhbXBsZXMnCisjIHN1YmRpcmVjdG9yeS4KKyMKKyMgRW1wdHkgbGluZXMgYW5kIGxpbmVzIHN0YXJ0aW5nIHdpdGggIyBhcmUgaWdub3JlZAorCisjIE5PVEUhIFRoaXMgZmlsZSBtYXkgY29udGFpbiBwYXNzd29yZCBpbmZvcm1hdGlvbiBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIG1hZGUKKyMgcmVhZGFibGUgb25seSBieSByb290IHVzZXIgb24gbXVsdGl1c2VyIHN5c3RlbXMuCisKKyMgTm90ZTogQWxsIGZpbGUgcGF0aHMgaW4gdGhpcyBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIHVzZSBmdWxsIChhYnNvbHV0ZSwKKyMgbm90IHJlbGF0aXZlIHRvIHdvcmtpbmcgZGlyZWN0b3J5KSBwYXRoIGluIG9yZGVyIHRvIGFsbG93IHdvcmtpbmcgZGlyZWN0b3J5CisjIHRvIGJlIGNoYW5nZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisKKyMgV2hldGhlciB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byB1cGRhdGUgKG92ZXJ3cml0ZSkgY29uZmlndXJhdGlvbgorIworIyBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBhbGxvdyB3cGFfc3VwcGxpY2FudCB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbgorIyBmaWxlIHdoZW5ldmVyIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZCAoZS5nLiwgbmV3IG5ldHdvcmsgYmxvY2sgaXMgYWRkZWQgd2l0aAorIyB3cGFfY2xpIG9yIHdwYV9ndWksIG9yIGEgcGFzc3dvcmQgaXMgY2hhbmdlZCkuIFRoaXMgaXMgcmVxdWlyZWQgZm9yCisjIHdwYV9jbGkvd3BhX2d1aSB0byBiZSBhYmxlIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgcGVybWFuZW50bHkuCisjIFBsZWFzZSBub3RlIHRoYXQgb3ZlcndyaXRpbmcgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgcmVtb3ZlIHRoZSBjb21tZW50cyBmcm9tCisjIGl0LgorI3VwZGF0ZV9jb25maWc9MQorCisjIGdsb2JhbCBjb25maWd1cmF0aW9uIChzaGFyZWQgYnkgYWxsIG5ldHdvcmsgYmxvY2tzKQorIworIyBQYXJhbWV0ZXJzIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UuIElmIHRoaXMgaXMgc3BlY2lmaWVkLCB3cGFfc3VwcGxpY2FudAorIyB3aWxsIG9wZW4gYSBjb250cm9sIGludGVyZmFjZSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgZXh0ZXJuYWwgcHJvZ3JhbXMgdG8KKyMgbWFuYWdlIHdwYV9zdXBwbGljYW50LiBUaGUgbWVhbmluZyBvZiB0aGlzIHN0cmluZyBkZXBlbmRzIG9uIHdoaWNoIGNvbnRyb2wKKyMgaW50ZXJmYWNlIG1lY2hhbmlzbSBpcyB1c2VkLiBGb3IgYWxsIGNhc2VzLCB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgcGFyYW1ldGVyCisjIGluIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29udHJvbCBpbnRlcmZhY2UgaXMKKyMgZW5hYmxlZC4KKyMKKyMgRm9yIFVOSVggZG9tYWluIHNvY2tldHMgKGRlZmF1bHQgb24gTGludXggYW5kIEJTRCk6IFRoaXMgaXMgYSBkaXJlY3RvcnkgdGhhdAorIyB3aWxsIGJlIGNyZWF0ZWQgZm9yIFVOSVggZG9tYWluIHNvY2tldHMgZm9yIGxpc3RlbmluZyB0byByZXF1ZXN0cyBmcm9tCisjIGV4dGVybmFsIHByb2dyYW1zIChDTEkvR1VJLCBldGMuKSBmb3Igc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBjb25maWd1cmF0aW9uLgorIyBUaGUgc29ja2V0IGZpbGUgd2lsbCBiZSBuYW1lZCBiYXNlZCBvbiB0aGUgaW50ZXJmYWNlIG5hbWUsIHNvIG11bHRpcGxlCisjIHdwYV9zdXBwbGljYW50IHByb2Nlc3NlcyBjYW4gYmUgcnVuIGF0IHRoZSBzYW1lIHRpbWUgaWYgbW9yZSB0aGFuIG9uZQorIyBpbnRlcmZhY2UgaXMgdXNlZC4KKyMgL3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgaXMgdGhlIHJlY29tbWVuZGVkIGRpcmVjdG9yeSBmb3Igc29ja2V0cyBhbmQgYnkKKyMgZGVmYXVsdCwgd3BhX2NsaSB3aWxsIHVzZSBpdCB3aGVuIHRyeWluZyB0byBjb25uZWN0IHdpdGggd3BhX3N1cHBsaWNhbnQuCisjCisjIEFjY2VzcyBjb250cm9sIGZvciB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUKKyMgZGlyZWN0b3J5IHRvIGFsbG93IG9ubHkgbWVtYmVycyBvZiBhIGdyb3VwIHRvIHVzZSBzb2NrZXRzLiBUaGlzIHdheSwgaXQgaXMKKyMgcG9zc2libGUgdG8gcnVuIHdwYV9zdXBwbGljYW50IGFzIHJvb3QgKHNpbmNlIGl0IG5lZWRzIHRvIGNoYW5nZSBuZXR3b3JrCisjIGNvbmZpZ3VyYXRpb24gYW5kIG9wZW4gcmF3IHNvY2tldHMpIGFuZCBzdGlsbCBhbGxvdyBHVUkvQ0xJIGNvbXBvbmVudHMgdG8gYmUKKyMgcnVuIGFzIG5vbi1yb290IHVzZXJzLiBIb3dldmVyLCBzaW5jZSB0aGUgY29udHJvbCBpbnRlcmZhY2UgY2FuIGJlIHVzZWQgdG8KKyMgY2hhbmdlIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24sIHRoaXMgYWNjZXNzIG5lZWRzIHRvIGJlIHByb3RlY3RlZCBpbiBtYW55CisjIGNhc2VzLiBCeSBkZWZhdWx0LCB3cGFfc3VwcGxpY2FudCBpcyBjb25maWd1cmVkIHRvIHVzZSBnaWQgMCAocm9vdCkuIElmIHlvdQorIyB3YW50IHRvIGFsbG93IG5vbi1yb290IHVzZXJzIHRvIHVzZSB0aGUgY29udHJvbCBpbnRlcmZhY2UsIGFkZCBhIG5ldyBncm91cAorIyBhbmQgY2hhbmdlIHRoaXMgdmFsdWUgdG8gbWF0Y2ggd2l0aCB0aGF0IGdyb3VwLiBBZGQgdXNlcnMgdGhhdCBzaG91bGQgaGF2ZQorIyBjb250cm9sIGludGVyZmFjZSBhY2Nlc3MgdG8gdGhpcyBncm91cC4gSWYgdGhpcyB2YXJpYWJsZSBpcyBjb21tZW50ZWQgb3V0IG9yCisjIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBncm91cCB3aWxsIG5vdCBiZSBjaGFuZ2VkIGZyb20gdGhlCisjIHZhbHVlIGl0IGdvdCBieSBkZWZhdWx0IHdoZW4gdGhlIGRpcmVjdG9yeSBvciBzb2NrZXQgd2FzIGNyZWF0ZWQuCisjCisjIFdoZW4gY29uZmlndXJpbmcgYm90aCB0aGUgZGlyZWN0b3J5IGFuZCBncm91cCwgdXNlIGZvbGxvd2luZyBmb3JtYXQ6CisjIERJUj0vdmFyL3J1bi93cGFfc3VwcGxpY2FudCBHUk9VUD13aGVlbAorIyBESVI9L3Zhci9ydW4vd3BhX3N1cHBsaWNhbnQgR1JPVVA9MAorIyAoZ3JvdXAgY2FuIGJlIGVpdGhlciBncm91cCBuYW1lIG9yIGdpZCkKKyMKKyMgRm9yIFVEUCBjb25uZWN0aW9ucyAoZGVmYXVsdCBvbiBXaW5kb3dzKTogVGhlIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4gVGhpcworIyB2YXJpYWJsZSBpcyBqdXN0IHVzZWQgdG8gc2VsZWN0IHRoYXQgdGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHRvIGJlIGNyZWF0ZWQuCisjIFRoZSB2YWx1ZSBjYW4gYmUgc2V0IHRvLCBlLmcuLCB1ZHAgKGN0cmxfaW50ZXJmYWNlPXVkcCkKKyMKKyMgRm9yIFdpbmRvd3MgTmFtZWQgUGlwZTogVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIHNlY3VyaXR5IGRlc2NyaXB0b3IKKyMgZm9yIGNvbnRyb2xsaW5nIGFjY2VzcyB0byB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFNlY3VyaXR5IGRlc2NyaXB0b3IgY2FuIGJlCisjIHNldCB1c2luZyBTZWN1cml0eSBEZXNjcmlwdG9yIFN0cmluZyBGb3JtYXQgKHNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tLworIyBsaWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9zZWNhdXRoei9zZWN1cml0eS8KKyMgc2VjdXJpdHlfZGVzY3JpcHRvcl9zdHJpbmdfZm9ybWF0LmFzcCkuIFRoZSBkZXNjcmlwdG9yIHN0cmluZyBuZWVkcyB0byBiZQorIyBwcmVmaXhlZCB3aXRoIFNEREw9LiBGb3IgZXhhbXBsZSwgY3RybF9pbnRlcmZhY2U9U0RETD1EOiB3b3VsZCBzZXQgYW4gZW1wdHkKKyMgREFDTCAod2hpY2ggd2lsbCByZWplY3QgYWxsIGNvbm5lY3Rpb25zKS4gU2VlIFJFQURNRS1XaW5kb3dzLnR4dCBmb3IgbW9yZQorIyBpbmZvcm1hdGlvbiBhYm91dCBTRERMIHN0cmluZyBmb3JtYXQuCisjCitjdHJsX2ludGVyZmFjZT0vdmFyL3J1bi93cGFfc3VwcGxpY2FudAorCisjIElFRUUgODAyLjFYL0VBUE9MIHZlcnNpb24KKyMgd3BhX3N1cHBsaWNhbnQgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb24gSUVFRSBTdGQgODAyLjFYLTIwMDQgd2hpY2ggZGVmaW5lcworIyBFQVBPTCB2ZXJzaW9uIDIuIEhvd2V2ZXIsIHRoZXJlIGFyZSBtYW55IEFQcyB0aGF0IGRvIG5vdCBoYW5kbGUgdGhlIG5ldworIyB2ZXJzaW9uIG51bWJlciBjb3JyZWN0bHkgKHRoZXkgc2VlbSB0byBkcm9wIHRoZSBmcmFtZXMgY29tcGxldGVseSkuIEluIG9yZGVyCisjIHRvIG1ha2Ugd3BhX3N1cHBsaWNhbnQgaW50ZXJvcGVyYXRlIHdpdGggdGhlc2UgQVBzLCB0aGUgdmVyc2lvbiBudW1iZXIgaXMgc2V0CisjIHRvIDEgYnkgZGVmYXVsdC4gVGhpcyBjb25maWd1cmF0aW9uIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHNldCBpdCB0byB0aGUgbmV3CisjIHZlcnNpb24gKDIpLgorZWFwb2xfdmVyc2lvbj0xCisKKyMgQVAgc2Nhbm5pbmcvc2VsZWN0aW9uCisjIEJ5IGRlZmF1bHQsIHdwYV9zdXBwbGljYW50IHJlcXVlc3RzIGRyaXZlciB0byBwZXJmb3JtIEFQIHNjYW5uaW5nIGFuZCB0aGVuCisjIHVzZXMgdGhlIHNjYW4gcmVzdWx0cyB0byBzZWxlY3QgYSBzdWl0YWJsZSBBUC4gQW5vdGhlciBhbHRlcm5hdGl2ZSBpcyB0bworIyBhbGxvdyB0aGUgZHJpdmVyIHRvIHRha2UgY2FyZSBvZiBBUCBzY2FubmluZyBhbmQgc2VsZWN0aW9uIGFuZCB1c2UKKyMgd3BhX3N1cHBsaWNhbnQganVzdCB0byBwcm9jZXNzIEVBUE9MIGZyYW1lcyBiYXNlZCBvbiBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkcml2ZXIuCisjIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uCisjIDA6IGRyaXZlciB0YWtlcyBjYXJlIG9mIHNjYW5uaW5nLCBBUCBzZWxlY3Rpb24sIGFuZCBJRUVFIDgwMi4xMSBhc3NvY2lhdGlvbgorIyAgICBwYXJhbWV0ZXJzIChlLmcuLCBXUEEgSUUgZ2VuZXJhdGlvbik7IHRoaXMgbW9kZSBjYW4gYWxzbyBiZSB1c2VkIHdpdGgKKyMgICAgbm9uLVdQQSBkcml2ZXJzIHdoZW4gdXNpbmcgSUVFRSA4MDIuMVggbW9kZTsgZG8gbm90IHRyeSB0byBhc3NvY2lhdGUgd2l0aAorIyAgICBBUHMgKGkuZS4sIGV4dGVybmFsIHByb2dyYW0gbmVlZHMgdG8gY29udHJvbCBhc3NvY2lhdGlvbikuIFRoaXMgbW9kZSBtdXN0CisjICAgIGFsc28gYmUgdXNlZCB3aGVuIHVzaW5nIHdpcmVkIEV0aGVybmV0IGRyaXZlcnMuCisjIDI6IGxpa2UgMCwgYnV0IGFzc29jaWF0ZSB3aXRoIEFQcyB1c2luZyBzZWN1cml0eSBwb2xpY3kgYW5kIFNTSUQgKGJ1dCBub3QKKyMgICAgQlNTSUQpOyB0aGlzIGNhbiBiZSB1c2VkLCBlLmcuLCB3aXRoIG5kaXN3cmFwcGVyIGFuZCBORElTIGRyaXZlcnMgdG8KKyMgICAgZW5hYmxlIG9wZXJhdGlvbiB3aXRoIGhpZGRlbiBTU0lEcyBhbmQgb3B0aW1pemVkIHJvYW1pbmc7IGluIHRoaXMgbW9kZSwKKyMgICAgdGhlIG5ldHdvcmsgYmxvY2tzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYXJlIHRyaWVkIG9uZSBieSBvbmUgdW50aWwKKyMgICAgdGhlIGRyaXZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgYXNzb2NpYXRpb247IGVhY2ggbmV0d29yayBibG9jayBzaG91bGQgaGF2ZQorIyAgICBleHBsaWNpdCBzZWN1cml0eSBwb2xpY3kgKGkuZS4sIG9ubHkgb25lIG9wdGlvbiBpbiB0aGUgbGlzdHMpIGZvcgorIyAgICBrZXlfbWdtdCwgcGFpcndpc2UsIGdyb3VwLCBwcm90byB2YXJpYWJsZXMKK2FwX3NjYW49MQorCisjIEVBUCBmYXN0IHJlLWF1dGhlbnRpY2F0aW9uCisjIEJ5IGRlZmF1bHQsIGZhc3QgcmUtYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCBmb3IgYWxsIEVBUCBtZXRob2RzIHRoYXQKKyMgc3VwcG9ydCBpdC4gVGhpcyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIGZhc3QgcmUtYXV0aGVudGljYXRpb24uCisjIE5vcm1hbGx5LCB0aGVyZSBpcyBubyBuZWVkIHRvIGRpc2FibGUgdGhpcy4KK2Zhc3RfcmVhdXRoPTEKKworIyBPcGVuU1NMIEVuZ2luZSBzdXBwb3J0CisjIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbG9hZCBPcGVuU1NMIGVuZ2luZXMuCisjIFRoZSB0d28gZW5naW5lcyB0aGF0IGFyZSBzdXBwb3J0ZWQgY3VycmVudGx5IGFyZSBzaG93biBiZWxvdzoKKyMgVGhleSBhcmUgYm90aCBmcm9tIHRoZSBvcGVuc2MgcHJvamVjdCAoaHR0cDovL3d3dy5vcGVuc2Mub3JnLykKKyMgQnkgZGVmYXVsdCBubyBlbmdpbmVzIGFyZSBsb2FkZWQuCisjIG1ha2UgdGhlIG9wZW5zYyBlbmdpbmUgYXZhaWxhYmxlCisjb3BlbnNjX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfb3BlbnNjLnNvCisjIG1ha2UgdGhlIHBrY3MxMSBlbmdpbmUgYXZhaWxhYmxlCisjcGtjczExX2VuZ2luZV9wYXRoPS91c3IvbGliL29wZW5zYy9lbmdpbmVfcGtjczExLnNvCisjIGNvbmZpZ3VyZSB0aGUgcGF0aCB0byB0aGUgcGtjczExIG1vZHVsZSByZXF1aXJlZCBieSB0aGUgcGtjczExIGVuZ2luZQorI3BrY3MxMV9tb2R1bGVfcGF0aD0vdXNyL2xpYi9wa2NzMTEvb3BlbnNjLXBrY3MxMS5zbworCisjIER5bmFtaWMgRUFQIG1ldGhvZHMKKyMgSWYgRUFQIG1ldGhvZHMgd2VyZSBidWlsdCBkeW5hbWljYWxseSBhcyBzaGFyZWQgb2JqZWN0IGZpbGVzLCB0aGV5IG5lZWQgdG8gYmUKKyMgbG9hZGVkIGhlcmUgYmVmb3JlIGJlaW5nIHVzZWQgaW4gdGhlIG5ldHdvcmsgYmxvY2tzLiBCeSBkZWZhdWx0LCBFQVAgbWV0aG9kcworIyBhcmUgaW5jbHVkZWQgc3RhdGljYWxseSBpbiB0aGUgYnVpbGQsIHNvIHRoZXNlIGxpbmVzIGFyZSBub3QgbmVlZGVkCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfdGxzLnNvCisjbG9hZF9keW5hbWljX2VhcD0vdXNyL2xpYi93cGFfc3VwcGxpY2FudC9lYXBfbWQ1LnNvCisKKyMgRHJpdmVyIGludGVyZmFjZSBwYXJhbWV0ZXJzCisjIFRoaXMgZmllbGQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGFyYml0cmFyeSBkcml2ZXIgaW50ZXJhY2UgcGFyYW1ldGVycy4gVGhlCisjIGZvcm1hdCBpcyBzcGVjaWZpYyB0byB0aGUgc2VsZWN0ZWQgZHJpdmVyIGludGVyZmFjZS4gVGhpcyBmaWVsZCBpcyBub3QgdXNlZAorIyBpbiBtb3N0IGNhc2VzLgorI2RyaXZlcl9wYXJhbT0iZmllbGQ9dmFsdWUiCisKKyMgTWF4aW11bSBsaWZldGltZSBmb3IgUE1LU0EgaW4gc2Vjb25kczsgZGVmYXVsdCA0MzIwMAorI2RvdDExUlNOQUNvbmZpZ1BNS0xpZmV0aW1lPTQzMjAwCisjIFRocmVzaG9sZCBmb3IgcmVhdXRoZW50aWNhdGlvbiAocGVyY2VudGFnZSBvZiBQTUsgbGlmZXRpbWUpOyBkZWZhdWx0IDcwCisjZG90MTFSU05BQ29uZmlnUE1LUmVhdXRoVGhyZXNob2xkPTcwCisjIFRpbWVvdXQgZm9yIHNlY3VyaXR5IGFzc29jaWF0aW9uIG5lZ290aWF0aW9uIGluIHNlY29uZHM7IGRlZmF1bHQgNjAKKyNkb3QxMVJTTkFDb25maWdTQVRpbWVvdXQ9NjAKKworIyBuZXR3b3JrIGJsb2NrCisjCisjIEVhY2ggbmV0d29yayAodXN1YWxseSBBUCdzIHNoYXJpbmcgdGhlIHNhbWUgU1NJRCkgaXMgY29uZmlndXJlZCBhcyBhIHNlcGFyYXRlCisjIGJsb2NrIGluIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLiBUaGUgbmV0d29yayBibG9ja3MgYXJlIGluIHByZWZlcmVuY2Ugb3JkZXIKKyMgKHRoZSBmaXJzdCBtYXRjaCBpcyB1c2VkKS4KKyMKKyMgbmV0d29yayBibG9jayBmaWVsZHM6CisjCisjIGRpc2FibGVkOgorIwkwID0gdGhpcyBuZXR3b3JrIGNhbiBiZSB1c2VkIChkZWZhdWx0KQorIwkxID0gdGhpcyBuZXR3b3JrIGJsb2NrIGlzIGRpc2FibGVkIChjYW4gYmUgZW5hYmxlZCB0aHJvdWdoIGN0cmxfaWZhY2UsCisjCSAgICBlLmcuLCB3aXRoIHdwYV9jbGkgb3Igd3BhX2d1aSkKKyMKKyMgaWRfc3RyOiBOZXR3b3JrIGlkZW50aWZpZXIgc3RyaW5nIGZvciBleHRlcm5hbCBzY3JpcHRzLiBUaGlzIHZhbHVlIGlzIHBhc3NlZAorIwl0byBleHRlcm5hbCBhY3Rpb24gc2NyaXB0IHRocm91Z2ggd3BhX2NsaSBhcyBXUEFfSURfU1RSIGVudmlyb25tZW50CisjCXZhcmlhYmxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIG5ldHdvcmsgc3BlY2lmaWMgY29uZmlndXJhdGlvbi4KKyMKKyMgc3NpZDogU1NJRCAobWFuZGF0b3J5KTsgZWl0aGVyIGFzIGFuIEFTQ0lJIHN0cmluZyB3aXRoIGRvdWJsZSBxdW90YXRpb24gb3IKKyMJYXMgaGV4IHN0cmluZzsgbmV0d29yayBuYW1lCisjCisjIHNjYW5fc3NpZDoKKyMJMCA9IGRvIG5vdCBzY2FuIHRoaXMgU1NJRCB3aXRoIHNwZWNpZmljIFByb2JlIFJlcXVlc3QgZnJhbWVzIChkZWZhdWx0KQorIwkxID0gc2NhbiB3aXRoIFNTSUQtc3BlY2lmaWMgUHJvYmUgUmVxdWVzdCBmcmFtZXMgKHRoaXMgY2FuIGJlIHVzZWQgdG8KKyMJICAgIGZpbmQgQVBzIHRoYXQgZG8gbm90IGFjY2VwdCBicm9hZGNhc3QgU1NJRCBvciB1c2UgbXVsdGlwbGUgU1NJRHM7CisjCSAgICB0aGlzIHdpbGwgYWRkIGxhdGVuY3kgdG8gc2Nhbm5pbmcsIHNvIGVuYWJsZSB0aGlzIG9ubHkgd2hlbiBuZWVkZWQpCisjCisjIGJzc2lkOiBCU1NJRCAob3B0aW9uYWwpOyBpZiBzZXQsIHRoaXMgbmV0d29yayBibG9jayBpcyB1c2VkIG9ubHkgd2hlbgorIwlhc3NvY2lhdGluZyB3aXRoIHRoZSBBUCB1c2luZyB0aGUgY29uZmlndXJlZCBCU1NJRAorIworIyBwcmlvcml0eTogcHJpb3JpdHkgZ3JvdXAgKGludGVnZXIpCisjIEJ5IGRlZmF1bHQsIGFsbCBuZXR3b3JrcyB3aWxsIGdldCBzYW1lIHByaW9yaXR5IGdyb3VwICgwKS4gSWYgc29tZSBvZiB0aGUKKyMgbmV0d29ya3MgYXJlIG1vcmUgZGVzaXJhYmxlLCB0aGlzIGZpZWxkIGNhbiBiZSB1c2VkIHRvIGNoYW5nZSB0aGUgb3JkZXIgaW4KKyMgd2hpY2ggd3BhX3N1cHBsaWNhbnQgZ29lcyB0aHJvdWdoIHRoZSBuZXR3b3JrcyB3aGVuIHNlbGVjdGluZyBhIEJTUy4gVGhlCisjIHByaW9yaXR5IGdyb3VwcyB3aWxsIGJlIGl0ZXJhdGVkIGluIGRlY3JlYXNpbmcgcHJpb3JpdHkgKGkuZS4sIHRoZSBsYXJnZXIgdGhlCisjIHByaW9yaXR5IHZhbHVlLCB0aGUgc29vbmVyIHRoZSBuZXR3b3JrIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc2NhbiByZXN1bHRzKS4KKyMgV2l0aGluIGVhY2ggcHJpb3JpdHkgZ3JvdXAsIG5ldHdvcmtzIHdpbGwgYmUgc2VsZWN0ZWQgYmFzZWQgb24gc2VjdXJpdHkKKyMgcG9saWN5LCBzaWduYWwgc3RyZW5ndGgsIGV0Yy4KKyMgUGxlYXNlIG5vdGUgdGhhdCBBUCBzY2FubmluZyB3aXRoIHNjYW5fc3NpZD0xIGFuZCBhcF9zY2FuPTIgbW9kZSBhcmUgbm90CisjIHVzaW5nIHRoaXMgcHJpb3JpdHkgdG8gc2VsZWN0IHRoZSBvcmRlciBmb3Igc2Nhbm5pbmcuIEluc3RlYWQsIHRoZXkgdHJ5IHRoZQorIyBuZXR3b3JrcyBpbiB0aGUgb3JkZXIgdGhhdCB1c2VkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisjCisjIG1vZGU6IElFRUUgODAyLjExIG9wZXJhdGlvbiBtb2RlCisjIDAgPSBpbmZyYXN0cnVjdHVyZSAoTWFuYWdlZCkgbW9kZSwgaS5lLiwgYXNzb2NpYXRlIHdpdGggYW4gQVAgKGRlZmF1bHQpCisjIDEgPSBJQlNTIChhZC1ob2MsIHBlZXItdG8tcGVlcikKKyMgTm90ZTogSUJTUyBjYW4gb25seSBiZSB1c2VkIHdpdGgga2V5X21nbXQgTk9ORSAocGxhaW50ZXh0IGFuZCBzdGF0aWMgV0VQKQorIyBhbmQga2V5X21nbXQ9V1BBLU5PTkUgKGZpeGVkIGdyb3VwIGtleSBUS0lQL0NDTVApLiBJbiBhZGRpdGlvbiwgYXBfc2NhbiBoYXMKKyMgdG8gYmUgc2V0IHRvIDIgZm9yIElCU1MuIFdQQS1Ob25lIHJlcXVpcmVzIGZvbGxvd2luZyBuZXR3b3JrIGJsb2NrIG9wdGlvbnM6CisjIHByb3RvPVdQQSwga2V5X21nbXQ9V1BBLU5PTkUsIHBhaXJ3aXNlPU5PTkUsIGdyb3VwPVRLSVAgKG9yIENDTVAsIGJ1dCBub3QKKyMgYm90aCksIGFuZCBwc2sgbXVzdCBhbHNvIGJlIHNldC4KKyMKKyMgcHJvdG86IGxpc3Qgb2YgYWNjZXB0ZWQgcHJvdG9jb2xzCisjIFdQQSA9IFdQQS9JRUVFIDgwMi4xMWkvRDMuMAorIyBSU04gPSBXUEEyL0lFRUUgODAyLjExaSAoYWxzbyBXUEEyIGNhbiBiZSB1c2VkIGFzIGFuIGFsaWFzIGZvciBSU04pCisjIElmIG5vdCBzZXQsIHRoaXMgZGVmYXVsdHMgdG86IFdQQSBSU04KKyMKKyMga2V5X21nbXQ6IGxpc3Qgb2YgYWNjZXB0ZWQgYXV0aGVudGljYXRlZCBrZXkgbWFuYWdlbWVudCBwcm90b2NvbHMKKyMgV1BBLVBTSyA9IFdQQSBwcmUtc2hhcmVkIGtleSAodGhpcyByZXF1aXJlcyAncHNrJyBmaWVsZCkKKyMgV1BBLUVBUCA9IFdQQSB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gKHRoaXMgY2FuIHVzZSBhbiBleHRlcm5hbAorIwlwcm9ncmFtLCBlLmcuLCBYc3VwcGxpY2FudCwgZm9yIElFRUUgODAyLjFYIEVBUCBBdXRoZW50aWNhdGlvbgorIyBJRUVFODAyMVggPSBJRUVFIDgwMi4xWCB1c2luZyBFQVAgYXV0aGVudGljYXRpb24gYW5kIChvcHRpb25hbGx5KSBkeW5hbWljYWxseQorIwlnZW5lcmF0ZWQgV0VQIGtleXMKKyMgTk9ORSA9IFdQQSBpcyBub3QgdXNlZDsgcGxhaW50ZXh0IG9yIHN0YXRpYyBXRVAgY291bGQgYmUgdXNlZAorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBXUEEtUFNLIFdQQS1FQVAKKyMKKyMgYXV0aF9hbGc6IGxpc3Qgb2YgYWxsb3dlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zCisjIE9QRU4gPSBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQgZm9yIFdQQS9XUEEyKQorIyBTSEFSRUQgPSBTaGFyZWQgS2V5IGF1dGhlbnRpY2F0aW9uIChyZXF1aXJlcyBzdGF0aWMgV0VQIGtleXMpCisjIExFQVAgPSBMRUFQL05ldHdvcmsgRUFQIChvbmx5IHVzZWQgd2l0aCBMRUFQKQorIyBJZiBub3Qgc2V0LCBhdXRvbWF0aWMgc2VsZWN0aW9uIGlzIHVzZWQgKE9wZW4gU3lzdGVtIHdpdGggTEVBUCBlbmFibGVkIGlmCisjIExFQVAgaXMgYWxsb3dlZCBhcyBvbmUgb2YgdGhlIEVBUCBtZXRob2RzKS4KKyMKKyMgcGFpcndpc2U6IGxpc3Qgb2YgYWNjZXB0ZWQgcGFpcndpc2UgKHVuaWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBOT05FID0gVXNlIG9ubHkgR3JvdXAgS2V5cyAoZGVwcmVjYXRlZCwgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBpZiBBUHMgc3VwcG9ydAorIwlwYWlyd2lzZSBrZXlzKQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAKKyMKKyMgZ3JvdXA6IGxpc3Qgb2YgYWNjZXB0ZWQgZ3JvdXAgKGJyb2FkY2FzdC9tdWx0aWNhc3QpIGNpcGhlcnMgZm9yIFdQQQorIyBDQ01QID0gQUVTIGluIENvdW50ZXIgbW9kZSB3aXRoIENCQy1NQUMgW1JGQyAzNjEwLCBJRUVFIDgwMi4xMWkvRDcuMF0KKyMgVEtJUCA9IFRlbXBvcmFsIEtleSBJbnRlZ3JpdHkgUHJvdG9jb2wgW0lFRUUgODAyLjExaS9ENy4wXQorIyBXRVAxMDQgPSBXRVAgKFdpcmVkIEVxdWl2YWxlbnQgUHJpdmFjeSkgd2l0aCAxMDQtYml0IGtleQorIyBXRVA0MCA9IFdFUCAoV2lyZWQgRXF1aXZhbGVudCBQcml2YWN5KSB3aXRoIDQwLWJpdCBrZXkgW0lFRUUgODAyLjExXQorIyBJZiBub3Qgc2V0LCB0aGlzIGRlZmF1bHRzIHRvOiBDQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisjCisjIHBzazogV1BBIHByZXNoYXJlZCBrZXk7IDI1Ni1iaXQgcHJlLXNoYXJlZCBrZXkKKyMgVGhlIGtleSB1c2VkIGluIFdQQS1QU0sgbW9kZSBjYW4gYmUgZW50ZXJlZCBlaXRoZXIgYXMgNjQgaGV4LWRpZ2l0cywgaS5lLiwKKyMgMzIgYnl0ZXMgb3IgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSAoaW4gd2hpY2ggY2FzZSwgdGhlIHJlYWwgUFNLIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBwYXNzcGhyYXNlIGFuZCBTU0lEKS4gQVNDSUkgcGFzc3BocmFzZSBtdXN0IGJlIGJldHdlZW4KKyMgOCBhbmQgNjMgY2hhcmFjdGVycyAoaW5jbHVzaXZlKS4KKyMgVGhpcyBmaWVsZCBpcyBub3QgbmVlZGVkLCBpZiBXUEEtRUFQIGlzIHVzZWQuCisjIE5vdGU6IFNlcGFyYXRlIHRvb2wsIHdwYV9wYXNzcGhyYXNlLCBjYW4gYmUgdXNlZCB0byBnZW5lcmF0ZSAyNTYtYml0IGtleXMKKyMgZnJvbSBBU0NJSSBwYXNzcGhyYXNlLiBUaGlzIHByb2Nlc3MgdXNlcyBsb3Qgb2YgQ1BVIGFuZCB3cGFfc3VwcGxpY2FudAorIyBzdGFydHVwIGFuZCByZWNvbmZpZ3VyYXRpb24gdGltZSBjYW4gYmUgb3B0aW1pemVkIGJ5IGdlbmVyYXRpbmcgdGhlIFBTSyBvbmx5CisjIG9ubHkgd2hlbiB0aGUgcGFzc3BocmFzZSBvciBTU0lEIGhhcyBhY3R1YWxseSBjaGFuZ2VkLgorIworIyBlYXBvbF9mbGFnczogSUVFRSA4MDIuMVgvRUFQT0wgb3B0aW9ucyAoYml0IGZpZWxkKQorIyBEeW5hbWljIFdFUCBrZXkgcmVxdWlyZWQgZm9yIG5vbi1XUEEgbW9kZQorIyBiaXQwICgxKTogcmVxdWlyZSBkeW5hbWljYWxseSBnZW5lcmF0ZWQgdW5pY2FzdCBXRVAga2V5CisjIGJpdDEgKDIpOiByZXF1aXJlIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBicm9hZGNhc3QgV0VQIGtleQorIyAJKDMgPSByZXF1aXJlIGJvdGgga2V5czsgZGVmYXVsdCkKKyMgTm90ZTogV2hlbiB1c2luZyB3aXJlZCBhdXRoZW50aWNhdGlvbiwgZWFwb2xfZmxhZ3MgbXVzdCBiZSBzZXQgdG8gMCBmb3IgdGhlCisjIGF1dGhlbnRpY2F0aW9uIHRvIGJlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisjCisjIHByb2FjdGl2ZV9rZXlfY2FjaGluZzoKKyMgRW5hYmxlL2Rpc2FibGUgb3Bwb3J0dW5pc3RpYyBQTUtTQSBjYWNoaW5nIGZvciBXUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjCisjIHdlcF9rZXkwLi4zOiBTdGF0aWMgV0VQIGtleSAoQVNDSUkgaW4gZG91YmxlIHF1b3RhdGlvbiwgZS5nLiAiYWJjZGUiIG9yCisjIGhleCB3aXRob3V0IHF1b3RhdGlvbiwgZS5nLiwgMDEwMjAzMDQwNSkKKyMgd2VwX3R4X2tleWlkeDogRGVmYXVsdCBXRVAga2V5IGluZGV4IChUWCkgKDAuLjMpCisjCisjIHBlZXJrZXk6IFdoZXRoZXIgUGVlcktleSBuZWdvdGlhdGlvbiBmb3IgZGlyZWN0IGxpbmtzIChJRUVFIDgwMi4xMWUgRExTKSBpcworIyBhbGxvd2VkLiBUaGlzIGlzIG9ubHkgdXNlZCB3aXRoIFJTTi9XUEEyLgorIyAwID0gZGlzYWJsZWQgKGRlZmF1bHQpCisjIDEgPSBlbmFibGVkCisjcGVlcmtleT0xCisjCisjIEZvbGxvd2luZyBmaWVsZHMgYXJlIG9ubHkgdXNlZCB3aXRoIGludGVybmFsIEVBUCBpbXBsZW1lbnRhdGlvbi4KKyMgZWFwOiBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhY2NlcHRlZCBFQVAgbWV0aG9kcworIwlNRDUgPSBFQVAtTUQ1ICh1bnNlY3VyZSBhbmQgZG9lcyBub3QgZ2VuZXJhdGUga2V5aW5nIG1hdGVyaWFsIC0+CisjCQkJY2Fubm90IGJlIHVzZWQgd2l0aCBXUEE7IHRvIGJlIHVzZWQgYXMgYSBQaGFzZSAyIG1ldGhvZAorIwkJCXdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE1TQ0hBUFYyID0gRUFQLU1TQ0hBUHYyIChjYW5ub3QgYmUgdXNlZCBzZXBhcmF0ZWx5IHdpdGggV1BBOyB0byBiZSB1c2VkCisjCQlhcyBhIFBoYXNlIDIgbWV0aG9kIHdpdGggRUFQLVBFQVAgb3IgRUFQLVRUTFMpCisjICAgICAgIE9UUCA9IEVBUC1PVFAgKGNhbm5vdCBiZSB1c2VkIHNlcGFyYXRlbHkgd2l0aCBXUEE7IHRvIGJlIHVzZWQKKyMJCWFzIGEgUGhhc2UgMiBtZXRob2Qgd2l0aCBFQVAtUEVBUCBvciBFQVAtVFRMUykKKyMgICAgICAgR1RDID0gRUFQLUdUQyAoY2Fubm90IGJlIHVzZWQgc2VwYXJhdGVseSB3aXRoIFdQQTsgdG8gYmUgdXNlZAorIwkJYXMgYSBQaGFzZSAyIG1ldGhvZCB3aXRoIEVBUC1QRUFQIG9yIEVBUC1UVExTKQorIwlUTFMgPSBFQVAtVExTIChjbGllbnQgYW5kIHNlcnZlciBjZXJ0aWZpY2F0ZSkKKyMJUEVBUCA9IEVBUC1QRUFQICh3aXRoIHR1bm5lbGxlZCBFQVAgYXV0aGVudGljYXRpb24pCisjCVRUTFMgPSBFQVAtVFRMUyAod2l0aCB0dW5uZWxsZWQgRUFQIG9yIFBBUC9DSEFQL01TQ0hBUC9NU0NIQVBWMgorIwkJCSBhdXRoZW50aWNhdGlvbikKKyMJSWYgbm90IHNldCwgYWxsIGNvbXBpbGVkIGluIG1ldGhvZHMgYXJlIGFsbG93ZWQuCisjCisjIGlkZW50aXR5OiBJZGVudGl0eSBzdHJpbmcgZm9yIEVBUAorIyBhbm9ueW1vdXNfaWRlbnRpdHk6IEFub255bW91cyBpZGVudGl0eSBzdHJpbmcgZm9yIEVBUCAodG8gYmUgdXNlZCBhcyB0aGUKKyMJdW5lbmNyeXB0ZWQgaWRlbnRpdHkgd2l0aCBFQVAgdHlwZXMgdGhhdCBzdXBwb3J0IGRpZmZlcmVudCB0dW5uZWxsZWQKKyMJaWRlbnRpdHksIGUuZy4sIEVBUC1UVExTKQorIyBwYXNzd29yZDogUGFzc3dvcmQgc3RyaW5nIGZvciBFQVAKKyMgY2FfY2VydDogRmlsZSBwYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUgKFBFTS9ERVIpLiBUaGlzIGZpbGUgY2FuIGhhdmUgb25lCisjCW9yIG1vcmUgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMuIElmIGNhX2NlcnQgYW5kIGNhX3BhdGggYXJlIG5vdAorIwlpbmNsdWRlZCwgc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZAorIwlhIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkIHdoZW4gdXNpbmcKKyMJRUFQLVRMUy9UVExTL1BFQVAuIEZ1bGwgcGF0aCBzaG91bGQgYmUgdXNlZCBzaW5jZSB3b3JraW5nIGRpcmVjdG9yeSBtYXkKKyMJY2hhbmdlIHdoZW4gd3BhX3N1cHBsaWNhbnQgaXMgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLgorIwlPbiBXaW5kb3dzLCB0cnVzdGVkIENBIGNlcnRpZmljYXRlcyBjYW4gYmUgbG9hZGVkIGZyb20gdGhlIHN5c3RlbQorIwljZXJ0aWZpY2F0ZSBzdG9yZSBieSBzZXR0aW5nIHRoaXMgdG8gY2VydF9zdG9yZTovLzxuYW1lPiwgZS5nLiwKKyMJY2FfY2VydD0iY2VydF9zdG9yZTovL0NBIiBvciBjYV9jZXJ0PSJjZXJ0X3N0b3JlOi8vUk9PVCIuCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjIGNhX3BhdGg6IERpcmVjdG9yeSBwYXRoIGZvciBDQSBjZXJ0aWZpY2F0ZSBmaWxlcyAoUEVNKS4gVGhpcyBwYXRoIG1heQorIwljb250YWluIG11bHRpcGxlIENBIGNlcnRpZmljYXRlcyBpbiBPcGVuU1NMIGZvcm1hdC4gQ29tbW9uIHVzZSBmb3IgdGhpcworIwlpcyB0byBwb2ludCB0byBzeXN0ZW0gdHJ1c3RlZCBDQSBsaXN0IHdoaWNoIGlzIG9mdGVuIGluc3RhbGxlZCBpbnRvCisjCWRpcmVjdG9yeSBsaWtlIC9ldGMvc3NsL2NlcnRzLiBJZiBjb25maWd1cmVkLCB0aGVzZSBjZXJ0aWZpY2F0ZXMgYXJlCisjCWFkZGVkIHRvIHRoZSBsaXN0IG9mIHRydXN0ZWQgQ0FzLiBjYV9jZXJ0IG1heSBhbHNvIGJlIGluY2x1ZGVkIGluIHRoYXQKKyMJY2FzZSwgYnV0IGl0IGlzIG5vdCByZXF1aXJlZC4KKyMgY2xpZW50X2NlcnQ6IEZpbGUgcGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSAoUEVNL0RFUikKKyMJRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbgorIwl3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5OiBGaWxlIHBhdGggdG8gY2xpZW50IHByaXZhdGUga2V5IGZpbGUgKFBFTS9ERVIvUEZYKQorIwlXaGVuIFBLQ1MjMTIvUEZYIGZpbGUgKC5wMTIvLnBmeCkgaXMgdXNlZCwgY2xpZW50X2NlcnQgc2hvdWxkIGJlCisjCWNvbW1lbnRlZCBvdXQuIEJvdGggdGhlIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSB3aWxsIGJlIHJlYWQgZnJvbQorIwl0aGUgUEtDUyMxMiBmaWxlIGluIHRoaXMgY2FzZS4gRnVsbCBwYXRoIHNob3VsZCBiZSB1c2VkIHNpbmNlIHdvcmtpbmcKKyMJZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlIGJhY2tncm91bmQuCisjCVdpbmRvd3MgY2VydGlmaWNhdGUgc3RvcmUgY2FuIGJlIHVzZWQgYnkgbGVhdmluZyBjbGllbnRfY2VydCBvdXQgYW5kCisjCWNvbmZpZ3VyaW5nIHByaXZhdGVfa2V5IGluIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6CisjCWNlcnQ6Ly9zdWJzdHJpbmdfdG9fbWF0Y2gKKyMJaGFzaDovL2NlcnRpZmljYXRlX3RodW1icHJpbnRfaW5faGV4CisjCWZvciBleGFtcGxlOiBwcml2YXRlX2tleT0iaGFzaDovLzYzMDkzYWE5YzQ3ZjU2YWU4ODMzNGM3YjY1YTQiCisjCU5vdGUgdGhhdCB3aGVuIHJ1bm5pbmcgd3BhX3N1cHBsaWNhbnQgYXMgYW4gYXBwbGljYXRpb24sIHRoZSB1c2VyCisjCWNlcnRpZmljYXRlIHN0b3JlIChNeSB1c2VyIGFjY291bnQpIGlzIHVzZWQsIHdoZXJlYXMgY29tcHV0ZXIgc3RvcmUKKyMJKENvbXB1dGVyIGFjY291bnQpIGlzIHVzZWQgd2hlbiBydW5uaW5nIHdwYXN2YyBhcyBhIHNlcnZpY2UuCisjCUFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhpcworIwl0byBibG9iOi8vPGJsb2IgbmFtZT4uCisjIHByaXZhdGVfa2V5X3Bhc3N3ZDogUGFzc3dvcmQgZm9yIHByaXZhdGUga2V5IGZpbGUgKGlmIGxlZnQgb3V0LCB0aGlzIHdpbGwgYmUKKyMJYXNrZWQgdGhyb3VnaCBjb250cm9sIGludGVyZmFjZSkKKyMgZGhfZmlsZTogRmlsZSBwYXRoIHRvIERIL0RTQSBwYXJhbWV0ZXJzIGZpbGUgKGluIFBFTSBmb3JtYXQpCisjCVRoaXMgaXMgYW4gb3B0aW9uYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzZXR0aW5nIHBhcmFtZXRlcnMgZm9yIGFuCisjCWVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIG1vc3QgY2FzZXMsIHRoZSBkZWZhdWx0IFJTQQorIwlhdXRoZW50aWNhdGlvbiBkb2VzIG5vdCB1c2UgdGhpcyBjb25maWd1cmF0aW9uLiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZQorIwlzZXR1cCBSU0EgdG8gdXNlIGVwaGVtZXJhbCBESCBrZXkgZXhjaGFuZ2UuIEluIGFkZGl0aW9uLCBjaXBoZXJzIHdpdGgKKyMJRFNBIGtleXMgYWx3YXlzIHVzZSBlcGhlbWVyYWwgREgga2V5cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBhY2hpZXZlCisjCWZvcndhcmQgc2VjcmVjeS4gSWYgdGhlIGZpbGUgaXMgaW4gRFNBIHBhcmFtZXRlcnMgZm9ybWF0LCBpdCB3aWxsIGJlCisjCWF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gREggcGFyYW1zLgorIyBzdWJqZWN0X21hdGNoOiBTdWJzdHJpbmcgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJqZWN0IG9mIHRoZQorIwlhdXRoZW50aWNhdGlvbiBzZXJ2ZXIgY2VydGlmaWNhdGUuIElmIHRoaXMgc3RyaW5nIGlzIHNldCwgdGhlIHNlcnZlcgorIwlzZXJ0aWZpY2F0ZSBpcyBvbmx5IGFjY2VwdGVkIGlmIGl0IGNvbnRhaW5zIHRoaXMgc3RyaW5nIGluIHRoZSBzdWJqZWN0LgorIwlUaGUgc3ViamVjdCBzdHJpbmcgaXMgaW4gZm9sbG93aW5nIGZvcm1hdDoKKyMJL0M9VVMvU1Q9Q0EvTD1TYW4gRnJhbmNpc2NvL0NOPVRlc3QgQVMvZW1haWxBZGRyZXNzPWFzQGV4YW1wbGUuY29tCisjIGFsdHN1YmplY3RfbWF0Y2g6IFNlbWljb2xvbiBzZXBhcmF0ZWQgc3RyaW5nIG9mIGVudHJpZXMgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0CisjCXRoZSBhbHRlcm5hdGl2ZSBzdWJqZWN0IG5hbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMJSWYgdGhpcyBzdHJpbmcgaXMgc2V0LCB0aGUgc2VydmVyIHNlcnRpZmljYXRlIGlzIG9ubHkgYWNjZXB0ZWQgaWYgaXQKKyMJY29udGFpbnMgb25lIG9mIHRoZSBlbnRyaWVzIGluIGFuIGFsdGVybmF0aXZlIHN1YmplY3QgbmFtZSBleHRlbnNpb24uCisjCWFsdFN1YmplY3ROYW1lIHN0cmluZyBpcyBpbiBmb2xsb3dpbmcgZm9ybWF0OiBUWVBFOlZBTFVFCisjCUV4YW1wbGU6IEVNQUlMOnNlcnZlckBleGFtcGxlLmNvbQorIwlFeGFtcGxlOiBETlM6c2VydmVyLmV4YW1wbGUuY29tO0ROUzpzZXJ2ZXIyLmV4YW1wbGUuY29tCisjCUZvbGxvd2luZyB0eXBlcyBhcmUgc3VwcG9ydGVkOiBFTUFJTCwgRE5TLCBVUkkKKyMgcGhhc2UxOiBQaGFzZTEgKG91dGVyIGF1dGhlbnRpY2F0aW9uLCBpLmUuLCBUTFMgdHVubmVsKSBwYXJhbWV0ZXJzCisjCShzdHJpbmcgd2l0aCBmaWVsZC12YWx1ZSBwYWlycywgZS5nLiwgInBlYXB2ZXI9MCIgb3IKKyMJInBlYXB2ZXI9MSBwZWFwbGFiZWw9MSIpCisjCSdwZWFwdmVyJyBjYW4gYmUgdXNlZCB0byBmb3JjZSB3aGljaCBQRUFQIHZlcnNpb24gKDAgb3IgMSkgaXMgdXNlZC4KKyMJJ3BlYXBsYWJlbD0xJyBjYW4gYmUgdXNlZCB0byBmb3JjZSBuZXcgbGFiZWwsICJjbGllbnQgUEVBUCBlbmNyeXB0aW9uIiwKKyMJdG8gYmUgdXNlZCBkdXJpbmcga2V5IGRlcml2YXRpb24gd2hlbiBQRUFQdjEgb3IgbmV3ZXIuIE1vc3QgZXhpc3RpbmcKKyMJUEVBUHYxIGltcGxlbWVudGF0aW9uIHNlZW0gdG8gYmUgdXNpbmcgdGhlIG9sZCBsYWJlbCwgImNsaWVudCBFQVAKKyMJZW5jcnlwdGlvbiIsIGFuZCB3cGFfc3VwcGxpY2FudCBpcyBub3cgdXNpbmcgdGhhdCBhcyB0aGUgZGVmYXVsdCB2YWx1ZS4KKyMJU29tZSBzZXJ2ZXJzLCBlLmcuLCBSYWRpYXRvciwgbWF5IHJlcXVpcmUgcGVhcGxhYmVsPTEgY29uZmlndXJhdGlvbiB0bworIwlpbnRlcm9wZXJhdGUgd2l0aCBQRUFQdjE7IHNlZSBlYXBfdGVzdGluZy50eHQgZm9yIG1vcmUgZGV0YWlscy4KKyMJJ3BlYXBfb3V0ZXJfc3VjY2Vzcz0wJyBjYW4gYmUgdXNlZCB0byB0ZXJtaW5hdGUgUEVBUCBhdXRoZW50aWNhdGlvbiBvbgorIwl0dW5uZWxlZCBFQVAtU3VjY2Vzcy4gVGhpcyBpcyByZXF1aXJlZCB3aXRoIHNvbWUgUkFESVVTIHNlcnZlcnMgdGhhdAorIwlpbXBsZW1lbnQgZHJhZnQtam9zZWZzc29uLXBwcGV4dC1lYXAtdGxzLWVhcC0wNS50eHQgKGUuZy4sCisjCUx1Y2VudCBOYXZpc1JhZGl1cyB2NC40LjAgd2l0aCBQRUFQIGluICJJRVRGIERyYWZ0IDUiIG1vZGUpCisjCWluY2x1ZGVfdGxzX2xlbmd0aD0xIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHdwYV9zdXBwbGljYW50IHRvIGluY2x1ZGUKKyMJVExTIE1lc3NhZ2UgTGVuZ3RoIGZpZWxkIGluIGFsbCBUTFMgbWVzc2FnZXMgZXZlbiBpZiB0aGV5IGFyZSBub3QKKyMJZnJhZ21lbnRlZC4KKyMJc2ltX21pbl9udW1fY2hhbD0zIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBFQVAtU0lNIHRvIHJlcXVpcmUgdGhyZWUKKyMJY2hhbGxlbmdlcyAoYnkgZGVmYXVsdCwgaXQgYWNjZXB0cyAyIG9yIDMpCisjIHBoYXNlMjogUGhhc2UyIChpbm5lciBhdXRoZW50aWNhdGlvbiB3aXRoIFRMUyB0dW5uZWwpIHBhcmFtZXRlcnMKKyMJKHN0cmluZyB3aXRoIGZpZWxkLXZhbHVlIHBhaXJzLCBlLmcuLCAiYXV0aD1NU0NIQVBWMiIgZm9yIEVBUC1QRUFQIG9yCisjCSJhdXRoZWFwPU1TQ0hBUFYyIGF1dGhlYXA9TUQ1IiBmb3IgRUFQLVRUTFMpCisjIEZvbGxvd2luZyBjZXJ0aWZpY2F0ZS9wcml2YXRlIGtleSBmaWVsZHMgYXJlIHVzZWQgaW4gaW5uZXIgUGhhc2UyCisjIGF1dGhlbnRpY2F0aW9uIHdoZW4gdXNpbmcgRUFQLVRUTFMgb3IgRUFQLVBFQVAuCisjIGNhX2NlcnQyOiBGaWxlIHBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZS4gVGhpcyBmaWxlIGNhbiBoYXZlIG9uZSBvciBtb3JlCisjCXRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzLiBJZiBjYV9jZXJ0MiBhbmQgY2FfcGF0aDIgYXJlIG5vdCBpbmNsdWRlZCwKKyMJc2VydmVyIGNlcnRpZmljYXRlIHdpbGwgbm90IGJlIHZlcmlmaWVkLiBUaGlzIGlzIGluc2VjdXJlIGFuZCBhIHRydXN0ZWQKKyMJQ0EgY2VydGlmaWNhdGUgc2hvdWxkIGFsd2F5cyBiZSBjb25maWd1cmVkLgorIyBjYV9wYXRoMjogRGlyZWN0b3J5IHBhdGggZm9yIENBIGNlcnRpZmljYXRlIGZpbGVzIChQRU0pCisjIGNsaWVudF9jZXJ0MjogRmlsZSBwYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBmaWxlCisjIHByaXZhdGVfa2V5MjogRmlsZSBwYXRoIHRvIGNsaWVudCBwcml2YXRlIGtleSBmaWxlCisjIHByaXZhdGVfa2V5Ml9wYXNzd2Q6IFBhc3N3b3JkIGZvciBwcml2YXRlIGtleSBmaWxlCisjIGRoX2ZpbGUyOiBGaWxlIHBhdGggdG8gREgvRFNBIHBhcmFtZXRlcnMgZmlsZSAoaW4gUEVNIGZvcm1hdCkKKyMgc3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHN1YmplY3Qgb2YgdGhlCisjCWF1dGhlbnRpY2F0aW9uIHNlcnZlciBjZXJ0aWZpY2F0ZS4KKyMgYWx0c3ViamVjdF9tYXRjaDI6IFN1YnN0cmluZyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIGFsdGVybmF0aXZlIHN1YmplY3QKKyMJbmFtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gc2VydmVyIGNlcnRpZmljYXRlLgorIworIyBmcmFnbWVudF9zaXplOiBNYXhpbXVtIEVBUCBmcmFnbWVudCBzaXplIGluIGJ5dGVzIChkZWZhdWx0IDEzOTgpLgorIwlUaGlzIHZhbHVlIGxpbWl0cyB0aGUgZnJhZ21lbnQgc2l6ZSBmb3IgRUFQIG1ldGhvZHMgdGhhdCBzdXBwb3J0CisjCWZyYWdtZW50YXRpb24gKGUuZy4sIEVBUC1UTFMgYW5kIEVBUC1QRUFQKS4gVGhpcyB2YWx1ZSBzaG91bGQgYmUgc2V0CisjCXNtYWxsIGVub3VnaCB0byBtYWtlIHRoZSBFQVAgbWVzc2FnZXMgZml0IGluIE1UVSBvZiB0aGUgbmV0d29yaworIwlpbnRlcmZhY2UgdXNlZCBmb3IgRUFQT0wuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHN1aXRhYmxlIGZvciBtb3N0CisjCWNhc2VzLgorIworIyBFQVAtUFNLIHZhcmlhYmxlczoKKyMgZWFwcHNrOiAxNi1ieXRlICgxMjgtYml0LCAzMiBoZXggZGlnaXRzKSBwcmUtc2hhcmVkIGtleSBpbiBoZXggZm9ybWF0CisjIG5haTogdXNlciBOQUkKKyMKKyMgRUFQLVBBWCB2YXJpYWJsZXM6CisjIGVhcHBzazogMTYtYnl0ZSAoMTI4LWJpdCwgMzIgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIworIyBFQVAtU0FLRSB2YXJpYWJsZXM6CisjIGVhcHBzazogMzItYnl0ZSAoMjU2LWJpdCwgNjQgaGV4IGRpZ2l0cykgcHJlLXNoYXJlZCBrZXkgaW4gaGV4IGZvcm1hdAorIwkodGhpcyBpcyBjb25jYXRlbmF0aW9uIG9mIFJvb3QtU2VjcmV0LUEgYW5kIFJvb3QtU2VjcmV0LUIpCisjIG5haTogdXNlciBOQUkgKFBFRVJJRCkKKyMKKyMgRUFQLUdQU0sgdmFyaWFibGVzOgorIyBlYXBwc2s6IFByZS1zaGFyZWQga2V5IGluIGhleCBmb3JtYXQgKGF0IGxlYXN0IDEyOCBiaXRzLCBpLmUuLCAzMiBoZXggZGlnaXRzKQorIyBuYWk6IHVzZXIgTkFJIChJRF9DbGllbnQpCisjCisjIEVBUC1GQVNUIHZhcmlhYmxlczoKKyMgcGFjX2ZpbGU6IEZpbGUgcGF0aCBmb3IgdGhlIFBBQyBlbnRyaWVzLiB3cGFfc3VwcGxpY2FudCB3aWxsIG5lZWQgdG8gYmUgYWJsZQorIwl0byBjcmVhdGUgdGhpcyBmaWxlIGFuZCB3cml0ZSB1cGRhdGVzIHRvIGl0IHdoZW4gUEFDIGlzIGJlaW5nCisjCXByb3Zpc2lvbmVkIG9yIHJlZnJlc2hlZC4gRnVsbCBwYXRoIHRvIHRoZSBmaWxlIHNob3VsZCBiZSB1c2VkIHNpbmNlCisjCXdvcmtpbmcgZGlyZWN0b3J5IG1heSBjaGFuZ2Ugd2hlbiB3cGFfc3VwcGxpY2FudCBpcyBydW4gaW4gdGhlCisjCWJhY2tncm91bmQuIEFsdGVybmF0aXZlbHksIGEgbmFtZWQgY29uZmlndXJhdGlvbiBibG9iIGNhbiBiZSB1c2VkIGJ5CisjCXNldHRpbmcgdGhpcyB0byBibG9iOi8vPGJsb2IgbmFtZT4KKyMgcGhhc2UxOiBmYXN0X3Byb3Zpc2lvbmluZz0xIG9wdGlvbiBlbmFibGVzIGluLWxpbmUgcHJvdmlzaW9uaW5nIG9mIEVBUC1GQVNUCisjCWNyZWRlbnRpYWxzIChQQUMpCisjCisjIHdwYV9zdXBwbGljYW50IHN1cHBvcnRzIG51bWJlciBvZiAiRUFQIHdvcmthcm91bmRzIiB0byB3b3JrIGFyb3VuZAorIyBpbnRlcm9wZXJhYmlsaXR5IGlzc3VlcyB3aXRoIGluY29ycmVjdGx5IGJlaGF2aW5nIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuCisjIFRoZXNlIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSBzb21lIG9mIHRoZSBpc3N1ZXMgYXJlIHByZXNlbnQgaW4gbGFyZ2UKKyMgbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIHNlcnZlcnMuIFN0cmljdCBFQVAgY29uZm9ybWFuY2UgbW9kZSBjYW4gYmUKKyMgY29uZmlndXJlZCBieSBkaXNhYmxpbmcgd29ya2Fyb3VuZHMgd2l0aCBlYXBfd29ya2Fyb3VuZD0wLgorCisjIEV4YW1wbGUgYmxvY2tzOgorCisjIFNpbXBsZSBjYXNlOiBXUEEtUFNLLCBQU0sgYXMgYW4gQVNDSUkgcGFzc3BocmFzZSwgYWxsb3cgYWxsIHZhbGlkIGNpcGhlcnMKK25ldHdvcms9eworCXNzaWQ9InNpbXBsZSIKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJcHJpb3JpdHk9NQorfQorCisjIFNhbWUgYXMgcHJldmlvdXMsIGJ1dCByZXF1ZXN0IFNTSUQtc3BlY2lmaWMgc2Nhbm5pbmcgKGZvciBBUHMgdGhhdCByZWplY3QKKyMgYnJvYWRjYXN0IFNTSUQpCituZXR3b3JrPXsKKwlzc2lkPSJzZWNvbmQgc3NpZCIKKwlzY2FuX3NzaWQ9MQorCXBzaz0idmVyeSBzZWNyZXQgcGFzc3BocmFzZSIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtUFNLIGlzIHVzZWQuIEFueSB2YWxpZCBjaXBoZXIgY29tYmluYXRpb24gaXMgYWNjZXB0ZWQuCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCXByb3RvPVdQQQorCWtleV9tZ210PVdQQS1QU0sKKwlwYWlyd2lzZT1DQ01QIFRLSVAKKwlncm91cD1DQ01QIFRLSVAgV0VQMTA0IFdFUDQwCisJcHNrPTA2YjRiZTE5ZGEyODlmNDc1YWE0NmEzM2NiNzkzMDI5ZDRhYjNkYjdhMjNlZTkyMzgyZWIwMTA2YzcyYWM3YmIKKwlwcmlvcml0eT0yCit9CisKKyMgT25seSBXUEEtRUFQIGlzIHVzZWQuIEJvdGggQ0NNUCBhbmQgVEtJUCBpcyBhY2NlcHRlZC4gQW4gQVAgdGhhdCB1c2VkIFdFUDEwNAorIyBvciBXRVA0MCBhcyB0aGUgZ3JvdXAgY2lwaGVyIHdpbGwgbm90IGJlIGFjY2VwdGVkLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlwcm90bz1SU04KKwlrZXlfbWdtdD1XUEEtRUFQCisJcGFpcndpc2U9Q0NNUCBUS0lQCisJZ3JvdXA9Q0NNUCBUS0lQCisJZWFwPVRMUworCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcHJpb3JpdHk9MQorfQorCisjIEVBUC1QRUFQL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gZm9yIFJBRElVUyBzZXJ2ZXJzIHRoYXQgdXNlIHRoZSBuZXcgcGVhcGxhYmVsCisjIChlLmcuLCBSYWRpYXRvcikKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1QRUFQCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMT0icGVhcGxhYmVsPTEiCisJcGhhc2UyPSJhdXRoPU1TQ0hBUFYyIgorCXByaW9yaXR5PTEwCit9CisKKyMgRUFQLVRUTFMvRUFQLU1ENS1DaGFsbGVuZ2UgY29uZmlndXJhdGlvbiB3aXRoIGFub255bW91cyBpZGVudGl0eSBmb3IgdGhlCisjIHVuZW5jcnlwdGVkIHVzZS4gUmVhbCBpZGVudGl0eSBpcyBzZW50IG9ubHkgd2l0aGluIGFuIGVuY3J5cHRlZCBUTFMgdHVubmVsLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJcHJpb3JpdHk9MgorfQorCisjIEVBUC1UVExTL01TQ0hBUHYyIGNvbmZpZ3VyYXRpb24gd2l0aCBhbm9ueW1vdXMgaWRlbnRpdHkgZm9yIHRoZSB1bmVuY3J5cHRlZAorIyB1c2UuIFJlYWwgaWRlbnRpdHkgaXMgc2VudCBvbmx5IHdpdGhpbiBhbiBlbmNyeXB0ZWQgVExTIHR1bm5lbC4KK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCXBoYXNlMj0iYXV0aD1NU0NIQVBWMiIKK30KKworIyBXUEEtRUFQLCBFQVAtVFRMUyB3aXRoIGRpZmZlcmVudCBDQSBjZXJ0aWZpY2F0ZSB1c2VkIGZvciBvdXRlciBhbmQgaW5uZXIKKyMgYXV0aGVudGljYXRpb24uCituZXR3b3JrPXsKKwlzc2lkPSJleGFtcGxlIgorCWtleV9tZ210PVdQQS1FQVAKKwllYXA9VFRMUworCSMgUGhhc2UxIC8gb3V0ZXIgYXV0aGVudGljYXRpb24KKwlhbm9ueW1vdXNfaWRlbnRpdHk9ImFub255bW91c0BleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCSMgUGhhc2UgMiAvIGlubmVyIGF1dGhlbnRpY2F0aW9uCisJcGhhc2UyPSJhdXRoZWFwPVRMUyIKKwljYV9jZXJ0Mj0iL2V0Yy9jZXJ0L2NhMi5wZW0iCisJY2xpZW50X2NlcnQyPSIvZXRjL2Nlci91c2VyLnBlbSIKKwlwcml2YXRlX2tleTI9Ii9ldGMvY2VyL3VzZXIucHJ2IgorCXByaXZhdGVfa2V5Ml9wYXNzd2Q9InBhc3N3b3JkIgorCXByaW9yaXR5PTIKK30KKworIyBCb3RoIFdQQS1QU0sgYW5kIFdQQS1FQVAgaXMgYWNjZXB0ZWQuIE9ubHkgQ0NNUCBpcyBhY2NlcHRlZCBhcyBwYWlyd2lzZSBhbmQKKyMgZ3JvdXAgY2lwaGVyLgorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlic3NpZD0wMDoxMToyMjozMzo0NDo1NQorCXByb3RvPVdQQSBSU04KKwlrZXlfbWdtdD1XUEEtUFNLIFdQQS1FQVAKKwlwYWlyd2lzZT1DQ01QCisJZ3JvdXA9Q0NNUAorCXBzaz0wNmI0YmUxOWRhMjg5ZjQ3NWFhNDZhMzNjYjc5MzAyOWQ0YWIzZGI3YTIzZWU5MjM4MmViMDEwNmM3MmFjN2JiCit9CisKKyMgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIFNTSUQsIHNvIHVzZSBoZXggc3RyaW5nLiBEZWZhdWx0IHRvIFdQQS1QU0ssIFdQQS1FQVAKKyMgYW5kIGFsbCB2YWxpZCBjaXBoZXJzLgorbmV0d29yaz17CisJc3NpZD0wMDAxMDIwMworCXBzaz0wMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCit9CisKKworIyBJRUVFIDgwMi4xWC9FQVBPTCB3aXRoIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCBXRVAga2V5cyAoaS5lLiwgbm8gV1BBKSB1c2luZworIyBFQVAtVExTIGZvciBhdXRoZW50aWNhdGlvbiBhbmQga2V5IGdlbmVyYXRpb247IHJlcXVpcmUgYm90aCB1bmljYXN0IGFuZAorIyBicm9hZGNhc3QgV0VQIGtleXMuCituZXR3b3JrPXsKKwlzc2lkPSIxeC10ZXN0IgorCWtleV9tZ210PUlFRUU4MDIxWAorCWVhcD1UTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwljYV9jZXJ0PSIvZXRjL2NlcnQvY2EucGVtIgorCWNsaWVudF9jZXJ0PSIvZXRjL2NlcnQvdXNlci5wZW0iCisJcHJpdmF0ZV9rZXk9Ii9ldGMvY2VydC91c2VyLnBydiIKKwlwcml2YXRlX2tleV9wYXNzd2Q9InBhc3N3b3JkIgorCWVhcG9sX2ZsYWdzPTMKK30KKworCisjIExFQVAgd2l0aCBkeW5hbWljIFdFUCBrZXlzCituZXR3b3JrPXsKKwlzc2lkPSJsZWFwLWV4YW1wbGUiCisJa2V5X21nbXQ9SUVFRTgwMjFYCisJZWFwPUxFQVAKKwlpZGVudGl0eT0idXNlciIKKwlwYXNzd29yZD0iZm9vYmFyIgorfQorCisjIFBsYWludGV4dCBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKQorbmV0d29yaz17CisJc3NpZD0icGxhaW50ZXh0LXRlc3QiCisJa2V5X21nbXQ9Tk9ORQorfQorCisKKyMgU2hhcmVkIFdFUCBrZXkgY29ubmVjdGlvbiAobm8gV1BBLCBubyBJRUVFIDgwMi4xWCkKK25ldHdvcms9eworCXNzaWQ9InN0YXRpYy13ZXAtdGVzdCIKKwlrZXlfbWdtdD1OT05FCisJd2VwX2tleTA9ImFiY2RlIgorCXdlcF9rZXkxPTAxMDIwMzA0MDUKKwl3ZXBfa2V5Mj0iMTIzNDU2Nzg5MDEyMyIKKwl3ZXBfdHhfa2V5aWR4PTAKKwlwcmlvcml0eT01Cit9CisKKworIyBTaGFyZWQgV0VQIGtleSBjb25uZWN0aW9uIChubyBXUEEsIG5vIElFRUUgODAyLjFYKSB1c2luZyBTaGFyZWQgS2V5CisjIElFRUUgODAyLjExIGF1dGhlbnRpY2F0aW9uCituZXR3b3JrPXsKKwlzc2lkPSJzdGF0aWMtd2VwLXRlc3QyIgorCWtleV9tZ210PU5PTkUKKwl3ZXBfa2V5MD0iYWJjZGUiCisJd2VwX2tleTE9MDEwMjAzMDQwNQorCXdlcF9rZXkyPSIxMjM0NTY3ODkwMTIzIgorCXdlcF90eF9rZXlpZHg9MAorCXByaW9yaXR5PTUKKwlhdXRoX2FsZz1TSEFSRUQKK30KKworCisjIElCU1MvYWQtaG9jIG5ldHdvcmsgd2l0aCBXUEEtTm9uZS9US0lQLgorbmV0d29yaz17CisJc3NpZD0idGVzdCBhZGhvYyIKKwltb2RlPTEKKwlwcm90bz1XUEEKKwlrZXlfbWdtdD1XUEEtTk9ORQorCXBhaXJ3aXNlPU5PTkUKKwlncm91cD1US0lQCisJcHNrPSJzZWNyZXQgcGFzc3BocmFzZSIKK30KKworCisjIENhdGNoIGFsbCBleGFtcGxlIHRoYXQgYWxsb3dzIG1vcmUgb3IgbGVzcyBhbGwgY29uZmlndXJhdGlvbiBtb2RlcworbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlzY2FuX3NzaWQ9MQorCWtleV9tZ210PVdQQS1FQVAgV1BBLVBTSyBJRUVFODAyMVggTk9ORQorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUCBXRVAxMDQgV0VQNDAKKwlwc2s9InZlcnkgc2VjcmV0IHBhc3NwaHJhc2UiCisJZWFwPVRUTFMgUEVBUCBUTFMKKwlpZGVudGl0eT0idXNlckBleGFtcGxlLmNvbSIKKwlwYXNzd29yZD0iZm9vYmFyIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKwlwcml2YXRlX2tleT0iL2V0Yy9jZXJ0L3VzZXIucHJ2IgorCXByaXZhdGVfa2V5X3Bhc3N3ZD0icGFzc3dvcmQiCisJcGhhc2UxPSJwZWFwbGFiZWw9MCIKK30KKworIyBFeGFtcGxlIG9mIEVBUC1UTFMgd2l0aCBzbWFydGNhcmQgKG9wZW5zc2wgZW5naW5lKQorbmV0d29yaz17CisJc3NpZD0iZXhhbXBsZSIKKwlrZXlfbWdtdD1XUEEtRUFQCisJZWFwPVRMUworCXByb3RvPVJTTgorCXBhaXJ3aXNlPUNDTVAgVEtJUAorCWdyb3VwPUNDTVAgVEtJUAorCWlkZW50aXR5PSJ1c2VyQGV4YW1wbGUuY29tIgorCWNhX2NlcnQ9Ii9ldGMvY2VydC9jYS5wZW0iCisJY2xpZW50X2NlcnQ9Ii9ldGMvY2VydC91c2VyLnBlbSIKKworCWVuZ2luZT0xCisKKwkjIFRoZSBlbmdpbmUgY29uZmlndXJlZCBoZXJlIG11c3QgYmUgYXZhaWxhYmxlLiBMb29rIGF0CisJIyBPcGVuU1NMIGVuZ2luZSBzdXBwb3J0IGluIHRoZSBnbG9iYWwgc2VjdGlvbi4KKwkjIFRoZSBrZXkgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGVuZ2luZSBtdXN0IGJlIHRoZSBwcml2YXRlIGtleQorCSMgbWF0Y2hpbmcgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjb25maWd1cmVkIGFib3ZlLgorCisJIyB1c2UgdGhlIG9wZW5zYyBlbmdpbmUKKwkjZW5naW5lX2lkPSJvcGVuc2MiCisJI2tleV9pZD0iNDUiCisKKwkjIHVzZSB0aGUgcGtjczExIGVuZ2luZQorCWVuZ2luZV9pZD0icGtjczExIgorCWtleV9pZD0iaWRfNDUiCisKKwkjIE9wdGlvbmFsIFBJTiBjb25maWd1cmF0aW9uOyB0aGlzIGNhbiBiZSBsZWZ0IG91dCBhbmQgUElOIHdpbGwgYmUKKwkjIGFza2VkIHRocm91Z2ggdGhlIGNvbnRyb2wgaW50ZXJmYWNlCisJcGluPSIxMjM0IgorfQorCisjIEV4YW1wbGUgY29uZmlndXJhdGlvbiBzaG93aW5nIGhvdyB0byB1c2UgYW4gaW5saW5lZCBibG9iIGFzIGEgQ0EgY2VydGlmaWNhdGUKKyMgZGF0YSBpbnN0ZWFkIG9mIHVzaW5nIGV4dGVybmFsIGZpbGUKK25ldHdvcms9eworCXNzaWQ9ImV4YW1wbGUiCisJa2V5X21nbXQ9V1BBLUVBUAorCWVhcD1UVExTCisJaWRlbnRpdHk9InVzZXJAZXhhbXBsZS5jb20iCisJYW5vbnltb3VzX2lkZW50aXR5PSJhbm9ueW1vdXNAZXhhbXBsZS5jb20iCisJcGFzc3dvcmQ9ImZvb2JhciIKKwljYV9jZXJ0PSJibG9iOi8vZXhhbXBsZWJsb2IiCisJcHJpb3JpdHk9MjAKK30KKworYmxvYi1iYXNlNjQtZXhhbXBsZWJsb2I9eworU0dWc2JHOGdWMjl5YkdRaENnPT0KK30KKworCisjIFdpbGRjYXJkIG1hdGNoIGZvciBTU0lEIChwbGFpbnRleHQgQVBzIG9ubHkpLiBUaGlzIGV4YW1wbGUgc2VsZWN0IGFueQorIyBvcGVuIEFQIHJlZ2FyZGxlc3Mgb2YgaXRzIFNTSUQuCituZXR3b3JrPXsKKwlrZXlfbWdtdD1OT05FCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZSBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MWZmZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29ubmVjdGl2aXR5L3dwYS1zdXBwbGljYW50L3dwYS1zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmNvbmYtc2FuZQpAQCAtMCwwICsxLDcgQEAKK2N0cmxfaW50ZXJmYWNlPS92YXIvcnVuL3dwYV9zdXBwbGljYW50CitjdHJsX2ludGVyZmFjZV9ncm91cD0wCit1cGRhdGVfY29uZmlnPTEKKworbmV0d29yaz17CisgICAgICAgIGtleV9tZ210PU5PTkUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiIGIvbWV0YS9yZWNpcGVzLWNvbm5lY3Rpdml0eS93cGEtc3VwcGxpY2FudC93cGEtc3VwcGxpY2FudF8yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyNGNmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb25uZWN0aXZpdHkvd3BhLXN1cHBsaWNhbnQvd3BhLXN1cHBsaWNhbnRfMi40LmJiCkBAIC0wLDAgKzEsMTE2IEBACitTVU1NQVJZID0gIkNsaWVudCBmb3IgV2ktRmkgUHJvdGVjdGVkIEFjY2VzcyAoV1BBKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS93cGFfc3VwcGxpY2FudC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9idWd6LyIKK1NFQ1RJT04gPSAibmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzZiMjc4MDE0NDdlMDY2MmVlMDEzOGQxN2ZlOTM4ODAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0xO2VuZGxpbmU9NTY7bWQ1PTdmMzkzNTc5ZjhiMTA5ZmU5MWYzYjk3NjVkMjZjN2QzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50L3dwYV9zdXBwbGljYW50LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xMjttZDU9MzQzMGZkYTc5ZjJiYTFkZDU0NWYwYjNjNGQ2ZTRkMjQgIgorREVQRU5EUyA9ICJkYnVzIGxpYm5sIGxpYmdjcnlwdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIndwYS1zdXBwbGljYW50LXBhc3NwaHJhc2Ugd3BhLXN1cHBsaWNhbnQtY2xpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZ251dGxzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIiwsZ251dGxzIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICIsLG9wZW5zc2wiCisKK2luaGVyaXQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAid3BhX3N1cHBsaWNhbnQuc2VydmljZSB3cGFfc3VwcGxpY2FudC1ubDgwMjExQC5zZXJ2aWNlIHdwYV9zdXBwbGljYW50LXdpcmVkQC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRSA9ICJkaXNhYmxlIgorCitTUkNfVVJJID0gImh0dHA6Ly9ob3N0YXAuZXBpdGVzdC5maS9yZWxlYXNlcy93cGFfc3VwcGxpY2FudC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGVmY29uZmlnIFwKKyAgICAgICAgICAgZmlsZTovL3dwYS1zdXBwbGljYW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3dwYV9zdXBwbGljYW50LmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vd3BhX3N1cHBsaWNhbnQuY29uZi1zYW5lIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3dwYV9zdXBwbGljYW50IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQVAtV01NLUZpeC1pbnRlZ2VyLXVuZGVyZmxvdy1pbi1XTU0tQWN0aW9uLWZyYW1lLXBhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVAyUC1WYWxpZGF0ZS1TU0lELWVsZW1lbnQtbGVuZ3RoLWJlZm9yZS1jb3B5aW5nLWl0LUMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1XUFMtRml4LUhUVFAtY2h1bmtlZC10cmFuc2Zlci1lbmNvZGluZy1wYXJzZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1FQVAtcHdkLXBlZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbW1pLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItRUFQLXB3ZC1zZXJ2ZXItRml4LXBheWxvYWQtbGVuZ3RoLXZhbGlkYXRpb24tZm9yLUNvbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUVBUC1wd2QtcGVlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNC1FQVAtcHdkLXNlcnZlci1GaXgtVG90YWwtTGVuZ3RoLXBhcnNpbmctZm9yLWZyYWdtZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtRUFQLXB3ZC1wZWVyLUZpeC1hc3ltbWV0cmljLWZyYWdtZW50YXRpb24tYmVoYXZpb3IucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMDAzN2RiZTAzODk3ZGNhZjJhZDI3MjJlNjU5MDk1ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNThkYzgzMmMwOTYxMzlhMDU5ZTZkZjgxNDA4MGY1MDI1MWE4ZDMxM2MyMWIxMzM2NGM1NGExZTcwMTA5MTIyIgorCitTID0gIiR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQtJHtQVn0iCisKK1BBQ0tBR0VTX3ByZXBlbmQgPSAid3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSB3cGEtc3VwcGxpY2FudC1jbGkgIgorRklMRVNfd3BhLXN1cHBsaWNhbnQtcGFzc3BocmFzZSA9ICIke2JpbmRpcn0vd3BhX3Bhc3NwaHJhc2UiCitGSUxFU193cGEtc3VwcGxpY2FudC1jbGkgPSAiJHtzYmluZGlyfS93cGFfY2xpIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcy8qIgorQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3dwYV9zdXBwbGljYW50LmNvbmYiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtNQUtFfSAtQyB3cGFfc3VwcGxpY2FudCBjbGVhbgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmNvbmZpZyB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiQ0ZMQUdTICs9XCItSSR7U1RBR0lOR19JTkNESVJ9L2xpYm5sM1wiIiA+PiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZWNobyAiRFJWX0NGTEFHUyArPVwiLUkke1NUQUdJTkdfSU5DRElSfS9saWJubDNcIiIgPj4gd3BhX3N1cHBsaWNhbnQvLmNvbmZpZworCQorCWlmIGVjaG8gIiR7UEFDS0FHRUNPTkZJR30iIHwgZ3JlcCAtcXcgIm9wZW5zc2wiOyB0aGVuCisgICAgICAgIAlzc2w9b3BlbnNzbAorCWVsaWYgZWNobyAiJHtQQUNLQUdFQ09ORklHfSIgfCBncmVwIC1xdyAiZ251dGxzIjsgdGhlbgorICAgICAgICAJc3NsPWdudXRscworCWZpCisJaWYgWyAtbiAiJHNzbCIgXTsgdGhlbgorICAgICAgICAJc2VkIC1pICJzLyVzc2wlLyRzc2wvIiB3cGFfc3VwcGxpY2FudC8uY29uZmlnCisJZmkKKworCSMgRm9yIHJlYnVpbGQKKwlybSAtZiB3cGFfc3VwcGxpY2FudC8qLmQgd3BhX3N1cHBsaWNhbnQvZGJ1cy8qLmQKK30KKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgQklORElSID0gIiR7c2JpbmRpcn0iCisKK2RvX2NvbXBpbGUgKCkgeworCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUworCXNlZCAtZSAiczpDRkxBR1NcID0uKjomIFwkKEVYVFJBX0NGTEFHUyk6ZyIgLWkgJHtTfS9zcmMvbGliLnJ1bGVzCisJb2VfcnVubWFrZSAtQyB3cGFfc3VwcGxpY2FudAorfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3N1cHBsaWNhbnQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSB3cGFfc3VwcGxpY2FudC93cGFfY2xpICAgICAgICAke0R9JHtzYmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSA3NTUgd3BhX3N1cHBsaWNhbnQvd3BhX3Bhc3NwaHJhc2UgJHtEfSR7YmluZGlyfQorCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisJaW5zdGFsbCAtbSA2NDQgd3BhX3N1cHBsaWNhbnQvUkVBRE1FICR7V09SS0RJUn0vd3BhX3N1cHBsaWNhbnQuY29uZiAke0R9JHtkb2NkaXJ9L3dwYV9zdXBwbGljYW50CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSA2MDAgJHtXT1JLRElSfS93cGFfc3VwcGxpY2FudC5jb25mLXNhbmUgJHtEfSR7c3lzY29uZmRpcn0vd3BhX3N1cHBsaWNhbnQuY29uZgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2lmLXByZS11cC5kLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wb3N0LWRvd24uZC8KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kLworCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vd3BhLXN1cHBsaWNhbnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi1wcmUtdXAuZC93cGEtc3VwcGxpY2FudAorCWNkICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvICYmIFwKKwlsbiAtc2YgLi4vaWYtcHJlLXVwLmQvd3BhLXN1cHBsaWNhbnQgaWYtcG9zdC1kb3duLmQvd3BhLXN1cHBsaWNhbnQKKworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvZGJ1cy9kYnVzLXdwYV9zdXBwbGljYW50LmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uZAorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMKKwlpbnN0YWxsIC1tIDY0NCAke1N9L3dwYV9zdXBwbGljYW50L2RidXMvKi5zZXJ2aWNlICR7RH0vJHtkYXRhZGlyfS9kYnVzLTEvc3lzdGVtLXNlcnZpY2VzCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gNjQ0ICR7U30vd3BhX3N1cHBsaWNhbnQvc3lzdGVtZC8qLnNlcnZpY2UgJHtEfS8ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJZmkKKworCWluc3RhbGwgLWQgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS85OV93cGFfc3VwcGxpY2FudCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworfQorCitwa2dfcG9zdGluc3Rfd3BhLXN1cHBsaWNhbnQgKCkgeworCSMgSWYgd2UncmUgb2ZmbGluZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzLgorCWlmIFsgIngkRCIgPSAieCIgXTsgdGhlbgorCQlraWxsYWxsIC1xIC1IVVAgZGJ1cy1kYWVtb24gfHwgdHJ1ZQorCWZpCisKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9maWxlc3lzdGVtcyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9maWxlc3lzdGVtcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTZjNDFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZpbGVzeXN0ZW1zCkBAIC0wLDAgKzEsOCBAQAorZXh0NAorZXh0MworZXh0MgordmZhdAorZmF0CitidHJmcworbWluaXgKKyoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9mc3RhYiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9mc3RhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzlhMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2ZzdGFiCkBAIC0wLDAgKzEsMTEgQEAKKyMgc3RvY2sgZnN0YWIgLSB5b3UgcHJvYmFibHkgd2FudCB0byBvdmVycmlkZSB0aGlzIHdpdGggYSBtYWNoaW5lIHNwZWNpZmljIG9uZQorCisvZGV2L3Jvb3QgICAgICAgICAgICAvICAgICAgICAgICAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAxCitwcm9jICAgICAgICAgICAgICAgICAvcHJvYyAgICAgICAgICAgICAgICBwcm9jICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwCitkZXZwdHMgICAgICAgICAgICAgICAvZGV2L3B0cyAgICAgICAgICAgICBkZXZwdHMgICAgIG1vZGU9MDYyMCxnaWQ9NSAgICAgICAwICAwCit0bXBmcyAgICAgICAgICAgICAgICAvcnVuICAgICAgICAgICAgICAgICB0bXBmcyAgICAgIG1vZGU9MDc1NSxub2Rldixub3N1aWQsc3RyaWN0YXRpbWUgMCAgMAordG1wZnMgICAgICAgICAgICAgICAgL3Zhci92b2xhdGlsZSAgICAgICAgdG1wZnMgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMAorCisjIHVuY29tbWVudCB0aGlzIGlmIHlvdXIgZGV2aWNlIGhhcyBhIFNEL01NQy9UcmFuc2ZsYXNoIHNsb3QKKyMvZGV2L21tY2JsazBwMSAgICAgICAvbWVkaWEvY2FyZCAgICAgICAgICBhdXRvICAgICAgIGRlZmF1bHRzLHN5bmMsbm9hdXRvICAwICAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9ob3N0LmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaG9zdC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOGMxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaG9zdC5jb25mCkBAIC0wLDAgKzEsMiBAQAorb3JkZXIgaG9zdHMsYmluZAorbXVsdGkgb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lucHV0cmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjNGM4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pbnB1dHJjCkBAIC0wLDAgKzEsNjEgQEAKKyMgL2V0Yy9pbnB1dHJjIC0gZ2xvYmFsIGlucHV0cmMgZm9yIGxpYnJlYWRsaW5lCisjIFNlZSByZWFkbGluZSgzcmVhZGxpbmUpIGFuZCBgaW5mbyBybHVzZXJtYW4nIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisjIEJlIDggYml0IGNsZWFuLgorc2V0IGlucHV0LW1ldGEgb24KK3NldCBvdXRwdXQtbWV0YSBvbgorCisjIFRvIGFsbG93IHRoZSB1c2Ugb2YgOGJpdC1jaGFyYWN0ZXJzIGxpa2UgdGhlIGdlcm1hbiB1bWxhdXRzLCBjb21tZW50IG91dAorIyB0aGUgbGluZSBiZWxvdy4gSG93ZXZlciB0aGlzIG1ha2VzIHRoZSBtZXRhIGtleSBub3Qgd29yayBhcyBhIG1ldGEga2V5LAorIyB3aGljaCBpcyBhbm5veWluZyB0byB0aG9zZSB3aGljaCBkb24ndCBuZWVkIHRvIHR5cGUgaW4gOC1iaXQgY2hhcmFjdGVycy4KKworIyBzZXQgY29udmVydC1tZXRhIG9mZgorCisjIHRyeSB0byBlbmFibGUgdGhlIGFwcGxpY2F0aW9uIGtleXBhZCB3aGVuIGl0IGlzIGNhbGxlZC4gIFNvbWUgc3lzdGVtcworIyBuZWVkIHRoaXMgdG8gZW5hYmxlIHRoZSBhcnJvdyBrZXlzLgorIyBzZXQgZW5hYmxlLWtleXBhZCBvbgorCisjIHNlZSAvdXNyL3NoYXJlL2RvYy9iYXNoL2lucHV0cmMuYXJyb3dzIGZvciBvdGhlciBjb2RlcyBvZiBhcnJvdyBrZXlzCisKKyMgZG8gbm90IGJlbGwgb24gdGFiLWNvbXBsZXRpb24gCisjIHNldCBiZWxsLXN0eWxlIG5vbmUgCisKKyMgc29tZSBkZWZhdWx0cyAvIG1vZGlmaWNhdGlvbnMgZm9yIHRoZSBlbWFjcyBtb2RlCiskaWYgbW9kZT1lbWFjcworCisjIGFsbG93IHRoZSB1c2Ugb2YgdGhlIEhvbWUvRW5kIGtleXMKKyMgIlxlWzF+IjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlWzR+IjogZW5kLW9mLWxpbmUKKworIyBhbGxvdyB0aGUgdXNlIG9mIHRoZSBEZWxldGUvSW5zZXJ0IGtleXMKKyMgIlxlWzN+IjogZGVsZXRlLWNoYXIKKyMgIlxlWzJ+IjogcXVvdGVkLWluc2VydAorCisjIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHN0ZXAgdG8gdGhlIGJlZ2lubmluZy9lbmQgCisjIG9mIHRoZSBoaXN0b3J5CisjICJcZVs1fiI6IGJlZ2lubmluZy1vZi1oaXN0b3J5CisjICJcZVs2fiI6IGVuZC1vZi1oaXN0b3J5CisKKyMgYWx0ZXJuYXRlIG1hcHBpbmdzIGZvciAicGFnZSB1cCIgYW5kICJwYWdlIGRvd24iIHRvIHNlYXJjaCB0aGUgaGlzdG9yeQorIyAiXGVbNX4iOiBoaXN0b3J5LXNlYXJjaC1iYWNrd2FyZAorIyAiXGVbNn4iOiBoaXN0b3J5LXNlYXJjaC1mb3J3YXJkCisKKyMgIyBtYXBwaW5ncyBmb3IgQ3RybC1sZWZ0LWFycm93IGFuZCBDdHJsLXJpZ2h0LWFycm93IGZvciB3b3JkIG1vdmluZworIyAiXGVbNUMiOiBmb3J3YXJkLXdvcmQKKyMgIlxlWzVEIjogYmFja3dhcmQtd29yZAorIyAiXGVcZVtDIjogZm9yd2FyZC13b3JkCisjICJcZVxlW0QiOiBiYWNrd2FyZC13b3JkCisKKyMgJGlmIHRlcm09cnh2dAorIyAiXGVbOH4iOiBlbmQtb2YtbGluZQorIyAkZW5kaWYKKworIyBmb3Igbm9uIFJIL0RlYmlhbiB4dGVybSwgY2FuJ3QgaHVydCBmb3IgUkgvREViaWFuIHh0ZXJtCisjICJcZU9IIjogYmVnaW5uaW5nLW9mLWxpbmUKKyMgIlxlT0YiOiBlbmQtb2YtbGluZQorCisjIGZvciBmcmVlYnNkIGNvbnNvbGUKKyMgIlxlW0giOiBiZWdpbm5pbmctb2YtbGluZQorIyAiXGVbRiI6IGVuZC1vZi1saW5lCisKKyRlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL2lzc3VlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9pc3N1ZS5uZXQgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUubmV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvaXNzdWUubmV0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbGljZW5zZXMvR1BMLTIgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbGljZW5zZXMvR1BMLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwYzMxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9saWNlbnNlcy9HUEwtMgpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9tb3RkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbW90ZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvbnNzd2l0Y2guY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmYwM2QyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL25zc3dpdGNoLmNvbmYKQEAgLTAsMCArMSwxOSBAQAorIyAvZXRjL25zc3dpdGNoLmNvbmYKKyMKKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIG9mIEdOVSBOYW1lIFNlcnZpY2UgU3dpdGNoIGZ1bmN0aW9uYWxpdHkuCisjIElmIHlvdSBoYXZlIHRoZSBgZ2xpYmMtZG9jJyBhbmQgYGluZm8nIHBhY2thZ2VzIGluc3RhbGxlZCwgdHJ5OgorIyBgaW5mbyBsaWJjICJOYW1lIFNlcnZpY2UgU3dpdGNoIicgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZmlsZS4KKworcGFzc3dkOiAgICAgICAgIGNvbXBhdAorZ3JvdXA6ICAgICAgICAgIGNvbXBhdAorc2hhZG93OiAgICAgICAgIGNvbXBhdAorCitob3N0czogICAgICAgICAgZmlsZXMgZG5zCituZXR3b3JrczogICAgICAgZmlsZXMKKworcHJvdG9jb2xzOiAgICAgIGRiIGZpbGVzCitzZXJ2aWNlczogICAgICAgZGIgZmlsZXMKK2V0aGVyczogICAgICAgICBkYiBmaWxlcworcnBjOiAgICAgICAgICAgIGRiIGZpbGVzCisKK25ldGdyb3VwOiAgICAgICBuaXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3Byb2ZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjMjY4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9wcm9maWxlCkBAIC0wLDAgKzEsMzYgQEAKKyMgL2V0Yy9wcm9maWxlOiBzeXN0ZW0td2lkZSAucHJvZmlsZSBmaWxlIGZvciB0aGUgQm91cm5lIHNoZWxsIChzaCgxKSkKKyMgYW5kIEJvdXJuZSBjb21wYXRpYmxlIHNoZWxscyAoYmFzaCgxKSwga3NoKDEpLCBhc2goMSksIC4uLikuCisKK1BBVEg9Ii91c3IvbG9jYWwvYmluOi91c3IvYmluOi9iaW4iCitFRElUT1I9InZpIgkJCSMgbmVlZGVkIGZvciBwYWNrYWdlcyBsaWtlIGNyb24sIGdpdC1jb21taXQKK3Rlc3QgLXogIiRURVJNIiAmJiBURVJNPSJ2dDEwMCIJIyBCYXNpYyB0ZXJtaW5hbCBjYXBhYi4gRm9yIHNjcmVlbiBldGMuCisKK2lmIFsgISAtZSAvZXRjL2xvY2FsdGltZSAtYSAhIC1lIC9ldGMvVFogXTsgdGhlbgorCVRaPSJVVEMiCQkjIFRpbWUgWm9uZS4gTG9vayBhdCBodHRwOi8vdGhlb3J5LnV3aW5uaXBlZy5jYS9nbnUvZ2xpYmMvbGliY18zMDMuaHRtbCAKKwkJCQkjIGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdG8gc2V0IHRoaXMgdG8geW91ciBsb2NhbCB0aW1lem9uZS4KKwlleHBvcnQgVFoKK2ZpCisKK2lmIFsgIiRIT01FIiA9ICJST09USE9NRSIgXTsgdGhlbgorICAgUEFUSD0kUEFUSDovdXNyL2xvY2FsL3NiaW46L3Vzci9zYmluOi9zYmluCitmaQoraWYgWyAiJFBTMSIgXTsgdGhlbgorIyB3b3JrcyBmb3IgYmFzaCBhbmQgYXNoIChubyBvdGhlciBzaGVsbHMga25vd24gdG8gYmUgaW4gdXNlIGhlcmUpCisgICBQUzE9J1x1QFxoOlx3XCQgJworZmkKKworaWYgWyAtZCAvZXRjL3Byb2ZpbGUuZCBdOyB0aGVuCisgIGZvciBpIGluIC9ldGMvcHJvZmlsZS5kLyogOyBkbworICAgIC4gJGkKKyAgZG9uZQorICB1bnNldCBpCitmaQorCitpZiBbIC14IC91c3IvYmluL3Jlc2l6ZSBdO3RoZW4KKyAgL3Vzci9iaW4vcmVzaXplID4vZGV2L251bGwKK2ZpCisKK2V4cG9ydCBQQVRIIFBTMSBPUElFRElSIFFQRURJUiBRVERJUiBFRElUT1IgVEVSTQorCit1bWFzayAwMjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3JvdGF0aW9uIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3JvdGF0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjcwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvcm90YXRpb24KQEAgLTAsMCArMSBAQAorMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5iYXNocmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJlNjM2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QuYmFzaHJjCkBAIC0wLDAgKzEsMTYgQEAKKyMgfi8uYmFzaHJjOiBleGVjdXRlZCBieSBiYXNoKDEpIGZvciBub24tbG9naW4gc2hlbGxzLgorCitleHBvcnQgUFMxPSdcaDpcd1wkICcKK3VtYXNrIDAyMgorCisjIFlvdSBtYXkgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgYGxzJyB0byBiZSBjb2xvcml6ZWQ6CisjIGV4cG9ydCBMU19PUFRJT05TPSctLWNvbG9yPWF1dG8nCisjIGV2YWwgYGRpcmNvbG9yc2AKKyMgYWxpYXMgbHM9J2xzICRMU19PUFRJT05TJworIyBhbGlhcyBsbD0nbHMgJExTX09QVElPTlMgLWwnCisjIGFsaWFzIGw9J2xzICRMU19PUFRJT05TIC1sQScKKyMKKyMgU29tZSBtb3JlIGFsaWFzIHRvIGF2b2lkIG1ha2luZyBtaXN0YWtlczoKKyMgYWxpYXMgcm09J3JtIC1pJworIyBhbGlhcyBjcD0nY3AgLWknCisjIGFsaWFzIG12PSdtdiAtaScKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZSBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGFyZS9kb3QucHJvZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzk3OTNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzL3NoYXJlL2RvdC5wcm9maWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMgfi8ucHJvZmlsZTogZXhlY3V0ZWQgYnkgQm91cm5lLWNvbXBhdGlibGUgbG9naW4gc2hlbGxzLgorCitpZiBbIC1mIH4vLmJhc2hyYyBdOyB0aGVuCisgIC4gfi8uYmFzaHJjCitmaQorCisjIHBhdGggc2V0IGJ5IC9ldGMvcHJvZmlsZQorIyBleHBvcnQgUEFUSAorCittZXNnIG4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy9zaGVsbHMgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hlbGxzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjM5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvc2hlbGxzCkBAIC0wLDAgKzEsMiBAQAorIyAvZXRjL3NoZWxsczogdmFsaWQgbG9naW4gc2hlbGxzCisvYmluL3NoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlcy91c2JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLWZpbGVzL2Jhc2UtZmlsZXMvdXNiZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1maWxlcy9iYXNlLWZpbGVzXzMuMC4xNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2ZmU3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtZmlsZXMvYmFzZS1maWxlc18zLjAuMTQuYmIKQEAgLTAsMCArMSwxNzggQEAKK1NVTU1BUlkgPSAiTWlzY2VsbGFuZW91cyBmaWxlcyBmb3IgdGhlIGJhc2Ugc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIGJhc2UtZmlsZXMgcGFja2FnZSBjcmVhdGVzIHRoZSBiYXNpYyBzeXN0ZW0gZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgcHJvdmlkZXMgYSBzbWFsbCBzZXQgb2Yga2V5IGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHRoZSBzeXN0ZW0uIgorU0VDVElPTiA9ICJiYXNlIgorUFIgPSAicjg5IgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2VzL0dQTC0yO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKyMgUmVtb3ZlZCBhbGwgbGljZW5zZSByZWxhdGVkIHRhc2tzIGluIHRoaXMgcmVjaXBlIGFzIGxpY2Vuc2UuYmJjbGFzcyAKKyMgbm93IGRlYWxzIHdpdGggdGhpcy4gSW4gb3JkZXIgdG8gZ2V0IGFjY3VyYXRlIGxpY2Vuc2luZyBvbiB0byB0aGUgaW1hZ2U6CisjIFNldCBDT1BZX0xJQ19NQU5JRkVTVCB0byBqdXN0IGNvcHkganVzdCB0aGUgbGljZW5zZS5tYW5pZmVzdCB0byB0aGUgaW1hZ2UKKyMgRm9yIHRoZSBtYW5pZmVzdCBhbmQgdGhlIGxpY2Vuc2UgdGV4dCBmb3IgZWFjaCBwYWNrYWdlOgorIyBTZXQgQ09QWV9MSUNfTUFOSUZFU1QgYW5kIENPUFlfTElDX0RJUlMKKworU1JDX1VSSSA9ICJmaWxlOi8vcm90YXRpb24gXAorICAgICAgICAgICBmaWxlOi8vbnNzd2l0Y2guY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tb3RkIFwKKyAgICAgICAgICAgZmlsZTovL2lucHV0cmMgXAorICAgICAgICAgICBmaWxlOi8vaG9zdC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3Byb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vc2hlbGxzIFwKKyAgICAgICAgICAgZmlsZTovL2ZzdGFiIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbGVzeXN0ZW1zIFwKKyAgICAgICAgICAgZmlsZTovL2lzc3VlLm5ldCBcCisgICAgICAgICAgIGZpbGU6Ly9pc3N1ZSBcCisgICAgICAgICAgIGZpbGU6Ly91c2JkIFwKKyAgICAgICAgICAgZmlsZTovL3NoYXJlL2RvdC5iYXNocmMgXAorICAgICAgICAgICBmaWxlOi8vc2hhcmUvZG90LnByb2ZpbGUgXAorICAgICAgICAgICBmaWxlOi8vbGljZW5zZXMvR1BMLTIgXAorICAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvY2Rpcl9hcHBlbmQgPSAiLyR7UH0iCitkaXJzMTc3NyA9ICIvdG1wICR7bG9jYWxzdGF0ZWRpcn0vdm9sYXRpbGUvdG1wIgorZGlyczI3NzUgPSAiIgorZGlyczc1NSA9ICIvYmluIC9ib290IC9kZXYgJHtzeXNjb25mZGlyfSAke3N5c2NvbmZkaXJ9L2RlZmF1bHQgXAorICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3NrZWwgL2xpYiAvbW50IC9wcm9jICR7Uk9PVF9IT01FfSAvcnVuIC9zYmluIFwKKyAgICAgICAgICAgJHtwcmVmaXh9ICR7YmluZGlyfSAke2RvY2Rpcn0gL3Vzci9nYW1lcyAke2luY2x1ZGVkaXJ9IFwKKyAgICAgICAgICAgJHtsaWJkaXJ9ICR7c2JpbmRpcn0gJHtkYXRhZGlyfSBcCisgICAgICAgICAgICR7ZGF0YWRpcn0vY29tbW9uLWxpY2Vuc2VzICR7ZGF0YWRpcn0vZGljdCAke2luZm9kaXJ9IFwKKyAgICAgICAgICAgJHttYW5kaXJ9ICR7ZGF0YWRpcn0vbWlzYyAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9iYWNrdXBzICR7bG9jYWxzdGF0ZWRpcn0vbGliIFwKKyAgICAgICAgICAgL3N5cyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9taXNjICR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wgXAorICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L3ZvbGF0aWxlIFwKKyAgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS92b2xhdGlsZS9sb2cgXAorICAgICAgICAgICAvaG9tZSAke3ByZWZpeH0vc3JjICR7bG9jYWxzdGF0ZWRpcn0vbG9jYWwgXAorICAgICAgICAgICAvbWVkaWEiCisKK2RpcnM3NTUtbHNiID0gIi9zcnYgIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbCAke3ByZWZpeH0vbG9jYWwvYmluICR7cHJlZml4fS9sb2NhbC9nYW1lcyBcCisgICAgICAgICAgICAgICAke3ByZWZpeH0vbG9jYWwvaW5jbHVkZSAke3ByZWZpeH0vbG9jYWwvbGliICR7cHJlZml4fS9sb2NhbC9zYmluIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9sb2NhbC9zaGFyZSAke3ByZWZpeH0vbG9jYWwvc3JjIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9saWIvbG9jYWxlIgorZGlyczI3NzUtbHNiID0gIi92YXIvbWFpbCIKKwordm9sYXRpbGVzID0gImxvZyB0bXAiCitjb25mZmlsZXMgPSAiJHtzeXNjb25mZGlyfS9kZWJpYW5fdmVyc2lvbiAke3N5c2NvbmZkaXJ9L2hvc3QuY29uZiBcCisgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9pbnB1dHJjICR7c3lzY29uZmRpcn0vaXNzdWUgLyR7c3lzY29uZmRpcn0vaXNzdWUubmV0IFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIFwKKyAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisKKyMgQnkgZGVmYXVsdCB0aGUgaG9zdG5hbWUgaXMgdGhlIG1hY2hpbmUgbmFtZS4gSWYgdGhlIGhvc3RuYW1lIGlzIHVuc2V0IHRoZW4gYQorIyAvZXRjL2hvc3RuYW1lIGZpbGUgaXNuJ3Qgd3JpdHRlbiwgc3VpdGFibGUgZm9yIGVudmlyb25tZW50cyB3aXRoIGR5bmFtaWMKKyMgaG9zdG5hbWVzLgorIworIyBUaGUgaG9zdG5hbWUgY2FuIGJlIGNoYW5nZWQgb3V0c2lkZSBvZiB0aGlzIHJlY2lwZSBieSB1c2luZworIyBob3N0bmFtZV9wbi1iYXNlLWZpbGVzID0gIm15LWhvc3QtbmFtZSIuCitob3N0bmFtZSA9ICIke01BQ0hJTkV9IgorCitCQVNFRklMRVNJU1NVRUlOU1RBTEwgPz0gImRvX2luc3RhbGxfYmFzZWZpbGVzaXNzdWUiCisKKyMgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgYmFzZS1maWxlcywgL3J1biB3YXMgYSBzb2Z0bGluayB0byAvdmFyL3J1biBhbmQgdGhlCisjIGRpcmVjdG9yeSB3YXMgbG9jYXRlZCBpbiAvdmFyL3ZvbGF0bGllL3J1bi4gIEFsc28sIC92YXIvbG9jayB3YXMgYSBzb2Z0bGluaworIyB0byAvdmFyL3ZvbGF0aWxlL2xvY2sgd2hpY2ggaXMgd2hlcmUgdGhlIHJlYWwgZGlyZWN0b3J5IHdhcyBsb2NhdGVkLiAgTm93LAorIyAvcnVuIGFuZCAvcnVuL2xvY2sgYXJlIHRoZSByZWFsIGRpcmVjdG9yaWVzLiAgSWYgd2UgYXJlIHVwZ3JhZGluZywgd2UgbWF5CisjIG5lZWQgdG8gcmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rcyBmaXJzdCBiZWZvcmUgd2UgY3JlYXRlIHRoZSBkaXJlY3Rvcmllcy4KKyMgT3RoZXJ3aXNlIHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gd2lsbCBmYWlsIGFuZCB3ZSB3aWxsIGhhdmUgY2lyY3VsYXIgc3ltYm9saWMKKyMgbGlua3MuCisjIAorcGtnX3ByZWluc3RfJHtQTn0gKCkgeworICAgICMhL2Jpbi9zaCAtZQorICAgIGlmIFsgeCIkRCIgPSAieCIgXTsgdGhlbgorICAgICAgICBpZiBbIC1oICIvdmFyL2xvY2siIF07IHRoZW4KKyAgICAgICAgICAgICMgUmVtb3ZlIHRoZSBzeW1ib2xpYyBsaW5rCisgICAgICAgICAgICBybSAtZiAvdmFyL2xvY2sKKyAgICAgICAgZmkKKworICAgICAgICBpZiBbIC1oICIvcnVuIiBdOyB0aGVuCisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgcm0gLWYgL3J1bgorICAgICAgICBmaQorICAgIGZpICAgICAKK30KKworZG9faW5zdGFsbCAoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1fTsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMxNzc3fTsgZG8KKwkJaW5zdGFsbCAtbSAxNzc3IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke2RpcnMyNzc1fTsgZG8KKwkJaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorCWRvbmUKKwlmb3IgZCBpbiAke3ZvbGF0aWxlc307IGRvCisJCWxuIC1zZiB2b2xhdGlsZS8kZCAke0R9JHtsb2NhbHN0YXRlZGlyfS8kZAorCWRvbmUKKworCWxuIC1zbmYgLi4vcnVuICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCWxuIC1zbmYgLi4vcnVuL2xvY2sgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbG9jaworCisJJHtCQVNFRklMRVNJU1NVRUlOU1RBTEx9CisKKwlyb3RhdGlvbj1gY2F0ICR7V09SS0RJUn0vcm90YXRpb25gCisJaWYgWyAiJHJvdGF0aW9uIiAhPSAiMCIgXTsgdGhlbgorIAkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcm90YXRpb24gJHtEfSR7c3lzY29uZmRpcn0vcm90YXRpb24KKwlmaQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZnN0YWIgJHtEfSR7c3lzY29uZmRpcn0vZnN0YWIKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9maWxlc3lzdGVtcyAke0R9JHtzeXNjb25mZGlyfS9maWxlc3lzdGVtcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3VzYmQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2JkCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJvZmlsZSAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlCisJc2VkIC1pICdzI1JPT1RIT01FIyR7Uk9PVF9IT01FfSMnICR7RH0ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaGVsbHMgJHtEfSR7c3lzY29uZmRpcn0vc2hlbGxzCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vc2hhcmUvZG90LnByb2ZpbGUgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8ucHJvZmlsZQorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NoYXJlL2RvdC5iYXNocmMgJHtEfSR7c3lzY29uZmRpcn0vc2tlbC8uYmFzaHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW5wdXRyYyAke0R9JHtzeXNjb25mZGlyfS9pbnB1dHJjCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbnNzd2l0Y2guY29uZiAke0R9JHtzeXNjb25mZGlyfS9uc3N3aXRjaC5jb25mCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaG9zdC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3QuY29uZgorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21vdGQgJHtEfSR7c3lzY29uZmRpcn0vbW90ZAorCisJaWYgWyAiL3Vzci9iaW4iICE9ICIke2JpbmRpcn0iIF07IHRoZW4KKwkJc2VkIC1pICJzLC91c3IvYmluL3Jlc2l6ZSwke2JpbmRpcn0vcmVzaXplLCIgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWZpCisKKwlsbiAtc2YgL3Byb2MvbW91bnRzICR7RH0ke3N5c2NvbmZkaXJ9L210YWIKK30KKworRElTVFJPX1ZFUlNJT05bdmFyZGVwc2V4Y2x1ZGVdICs9ICJEQVRFIgorZG9faW5zdGFsbF9iYXNlZmlsZXNpc3N1ZSAoKSB7CisJaWYgWyAiJHtob3N0bmFtZX0iIF07IHRoZW4KKwkJZWNobyAke2hvc3RuYW1lfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RuYW1lCisJZmkKKworCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vaXNzdWUqICAke0R9JHtzeXNjb25mZGlyfQorICAgICAgICBpZiBbIC1uICIke0RJU1RST19OQU1FfSIgXTsgdGhlbgorCQlwcmludGYgIiR7RElTVFJPX05BTUV9ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJcHJpbnRmICIke0RJU1RST19OQU1FfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQlpZiBbIC1uICIke0RJU1RST19WRVJTSU9OfSIgXTsgdGhlbgorCQkJcHJpbnRmICIke0RJU1RST19WRVJTSU9OfSAiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCQlwcmludGYgIiR7RElTVFJPX1ZFUlNJT059ICIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUubmV0CisJCWZpCisJCXByaW50ZiAiXFxcbiBcXFxsXG4iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlCisJCWVjaG8gPj4gJHtEfSR7c3lzY29uZmRpcn0vaXNzdWUKKwkJZWNobyAiJWgiICAgID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorCQllY2hvID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2lzc3VlLm5ldAorIAlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saW51eHN0ZGJhc2UoKSB7CisJZm9yIGQgaW4gJHtkaXJzNzU1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0kZAorICAgICAgICBkb25lCisKKwlmb3IgZCBpbiAke2RpcnMyNzc1LWxzYn07IGRvCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAyNzc1IC1kICR7RH0kZAorICAgICAgICBkb25lCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWRvYyAke1BOfSAke1BOfS1kZXYgJHtQTn0tZGJnIgorRklMRVNfJHtQTn0gPSAiLyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RvY2Rpcn0gJHtkYXRhZGlyfS9jb21tb24tbGljZW5zZXMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2ZzdGFiICR7QFsnJywgJyR7c3lzY29uZmRpcn0vaG9zdG5hbWUnXVsoZC5nZXRWYXIoJ2hvc3RuYW1lJywgVHJ1ZSkgIT0gJycpXX0gJHtzeXNjb25mZGlyfS9zaGVsbHMiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vbW90ZCAke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYgJHtzeXNjb25mZGlyfS9wcm9maWxlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9hZGRfc2h1dGRvd24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9hZGRfc2h1dGRvd24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNTdkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL2FkZF9zaHV0ZG93bi5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKK1dlIG5lZWQgdG8gaGF2ZSBhIHNodXRkb3duIGdyb3VwIHRvIGFsbG93IHRoZSBzaHV0ZG93biBpY29uCit0byB3b3JrIGNvcnJlY3RseS4gQW55IHVzZXJzIHRoYXQgd2FudCB0byB1c2Ugc2h1dGRvd24gbGlrZQordGhlIHh1c2VyIHNob3VsZCBiZSBhZGRlZCB0byB0aGlzIGdyb3VwLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0zNiw1ICszNiw2IEBAIHNhc2w6Kjo0NToKKyBwbHVnZGV2Oio6NDY6Cisgc3RhZmY6Kjo1MDoKKyBnYW1lczoqOjYwOgorK3NodXRkb3duOio6NzA6CisgdXNlcnM6KjoxMDA6Cisgbm9ncm91cDoqOjY1NTM0OgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvZGlzYWJsZS1kb2NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvZGlzYWJsZS1kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzA4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9kaXNhYmxlLWRvY3MucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRGlzYWJsZSBkb2N1bWVudGF0aW9uIGZvciBub3cgYXMgaXQgdXNlcyB0b29scyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZAorYnkgT0UtQ29yZS4gSXQgdXNlcyBzZ21sdG9vbHMgYW5kIHBvNGEuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBzcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGJhc2UtcGFzc3dkLTMuNS4yOC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yOC5vcmlnL01ha2VmaWxlLmluCisrKysgYmFzZS1wYXNzd2QtMy41LjI4L01ha2VmaWxlLmluCitAQCAtMjUsMTMgKzI1LDEwIEBAIGdlbl9jb25maWd1cmUJPSBjb25maWcuY2FjaGUgY29uZmlnLnN0YXQKKyAJCSAgY29uZmRlZmhzLmggY29uZmlnLmggTWFrZWZpbGUKKyAKKyBhbGw6IHVwZGF0ZS1wYXNzd2QKKy0JJChNQUtFKSAtQyBkb2MgYWxsCistCSQoTUFLRSkgLUMgbWFuIGFsbAorIAorIGluc3RhbGw6IGFsbAorIAlta2RpciAtcCAkKERFU1RESVIpJChzYmluZGlyKQorIAkkKElOU1RBTEwpIHVwZGF0ZS1wYXNzd2QgJChERVNURElSKSQoc2JpbmRpcikvCistCSQoTUFLRSkgLUMgbWFuIGluc3RhbGwKKyAKKyB1cGRhdGUtcGFzc3dkLm86IHZlcnNpb24uaAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9pbnB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWJiY2FkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2QvaW5wdXQucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorQWRkIGFuIGlucHV0IGdyb3VwIGZvciB0aGUgL2Rldi9pbnB1dC8qIGRldmljZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGdyb3VwLm1hc3RlciB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogYmFzZS1wYXNzd2QtMy41LjI2L2dyb3VwLm1hc3RlcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJhc2UtcGFzc3dkLTMuNS4yNi5vcmlnL2dyb3VwLm1hc3RlcgorKysrIGJhc2UtcGFzc3dkLTMuNS4yNi9ncm91cC5tYXN0ZXIKK0BAIC0xMiw2ICsxMiw3IEBAIHV1Y3A6KjoxMDoKKyBtYW46KjoxMjoKKyBwcm94eToqOjEzOgorIGttZW06KjoxNToKKytpbnB1dDoqOjE5OgorIGRpYWxvdXQ6KjoyMDoKKyBmYXg6KjoyMToKKyB2b2ljZToqOjIyOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9iYXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvYmFzZS1wYXNzd2QvYmFzZS1wYXNzd2Qvbm9iYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YTY5MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub2Jhc2gucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAordXNlIC9iaW4vc2ggaW5zdGVhZCBvZiAvYmluL2Jhc2gsIHNpbmNlIHRoZSBsYXR0ZXIgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbgorc29tZSBpbWFnZXMgc3VjaCBhcyBtaW5pbWFsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL2Jhc2gKKytyb290Oio6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkL25vc2hhZG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyN2JmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZC9ub3NoYWRvdy5wYXRjaApAQCAtMCwwICsxLDE0IEBACityZW1vdmUgIioiIGZvciByb290IHNpbmNlIHdlIGRvbid0IGhhdmUgYSAvZXRjL3NoYWRvdyBzbyBmYXIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBiYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyfm5vYmFzaAorKysrIGJhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKK0BAIC0xLDQgKzEsNCBAQAorLXJvb3Q6KjowOjA6cm9vdDovcm9vdDovYmluL3NoCisrcm9vdDo6MDowOnJvb3Q6L3Jvb3Q6L2Jpbi9zaAorIGRhZW1vbjoqOjE6MTpkYWVtb246L3Vzci9zYmluOi9iaW4vc2gKKyBiaW46KjoyOjI6YmluOi9iaW46L2Jpbi9zaAorIHN5czoqOjM6MzpzeXM6L2RldjovYmluL3NoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZF8zLjUuMjkuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9iYXNlLXBhc3N3ZC9iYXNlLXBhc3N3ZF8zLjUuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5YmQ4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Jhc2UtcGFzc3dkL2Jhc2UtcGFzc3dkXzMuNS4yOS5iYgpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJCYXNlIHN5c3RlbSBtYXN0ZXIgcGFzc3dvcmQvZ3JvdXAgZmlsZXMiCitERVNDUklQVElPTiA9ICJUaGUgbWFzdGVyIGNvcGllcyBvZiB0aGUgdXNlciBkYXRhYmFzZSBmaWxlcyAoL2V0Yy9wYXNzd2QgYW5kIC9ldGMvZ3JvdXApLiAgVGhlIHVwZGF0ZS1wYXNzd2QgdG9vbCBpcyBhbHNvIHByb3ZpZGVkIHRvIGtlZXAgdGhlIHN5c3RlbSBkYXRhYmFzZXMgc3luY2hyb25pemVkIHdpdGggdGhlc2UgbWFzdGVyIGZpbGVzLiIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMy41LjM4IHJlcXVpcmVzIGNkZWJjb25mIGZvciB1cGRhdGUtcGFzc3dkIHV0aWxpdHkiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L2RlYmlhbi8rYXJjaGl2ZS9wcmltYXJ5LytmaWxlcy8ke0JQTn1fJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZF9zaHV0ZG93bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2Jhc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9zaGFkb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vaW5wdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1kb2NzLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2YmVjY2FjNDgwODNmZThhZTUwNDhhY2QwNjJlNTQyMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGI2NjM4OGIyYzhlNDljMTU2OTI0MzlkMmJlZTYzYmNkZDRiYmJmN2E3ODJjN2Y2NGFjY2M1NTk4NmI2YTM2IgorCitpbmhlcml0IGF1dG90b29scworCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJiYXNlX3Bhc3N3ZF9zc3RhdGVfcG9zdGluc3QiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3NiaW5kaXJ9CisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNzU1ICR7Qn0vdXBkYXRlLXBhc3N3ZCAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHttYW5kaXJ9L21hbjggJHtEfSR7bWFuZGlyfS9wbC9tYW44CisJaW5zdGFsbCAtcCAtbSA2NDQgJHtTfS9tYW4vdXBkYXRlLXBhc3N3ZC44ICR7RH0ke21hbmRpcn0vbWFuOC8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L21hbi91cGRhdGUtcGFzc3dkLnBsLjggXAorCQkke0R9JHttYW5kaXJ9L3BsL21hbjgvdXBkYXRlLXBhc3N3ZC44CisJZ3ppcCAtOSAke0R9JHttYW5kaXJ9L21hbjgvKiAke0R9JHttYW5kaXJ9L3BsL21hbjgvKgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkCisJaW5zdGFsbCAtbyByb290IC1nIHJvb3QgLXAgLW0gNjQ0ICR7U30vcGFzc3dkLm1hc3RlciAke0R9JHtkYXRhZGlyfS9iYXNlLXBhc3N3ZC8KKwlzZWQgLWkgJ3MjOi9yb290OiM6JHtST09UX0hPTUV9OiMnICR7RH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkL3Bhc3N3ZC5tYXN0ZXIKKwlpbnN0YWxsIC1vIHJvb3QgLWcgcm9vdCAtcCAtbSA2NDQgJHtTfS9ncm91cC5tYXN0ZXIgJHtEfSR7ZGF0YWRpcn0vYmFzZS1wYXNzd2QvCisKKwlpbnN0YWxsIC1kIC1tIDc1NSAke0R9JHtkb2NkaXJ9LyR7QlBOfQorCWluc3RhbGwgLXAgLW0gNjQ0ICR7U30vZGViaWFuL2NoYW5nZWxvZyAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlnemlwIC05ICR7RH0ke2RvY2Rpcn0vJHtCUE59LyoKKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L1JFQURNRSAke0R9JHtkb2NkaXJ9LyR7QlBOfS8KKwlpbnN0YWxsIC1wIC1tIDY0NCAke1N9L2RlYmlhbi9jb3B5cmlnaHQgJHtEfSR7ZG9jZGlyfS8ke0JQTn0vCit9CisKK2Jhc2VfcGFzc3dkX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIFN0YWdpbmcgZG9lcyBub3QgY29weSAke3N5c2NvbmZkaXJ9IGZpbGVzIGludG8gdGhlCisJCSMgdGFyZ2V0IHN5c3Jvb3QsIHNvIHdlIG5lZWQgdG8gZG8gc28gbWFudWFsbHkuIFdlCisJCSMgcHV0IHRoZXNlIGZpbGVzIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBzbyB0aGV5IGNhbgorCQkjIGJlIHVzZWQgYnkgcmVjaXBlcyB3aGljaCB1c2UgY3VzdG9tIHVzZXIvZ3JvdXAKKwkJIyBwZXJtaXNzaW9ucy4KKwkJIyBJbnN0YWxsIHBhc3N3ZC5tYXN0ZXIgYW5kIGdyb3VwLm1hc3RlciB0byBzeXNjb25mZGlyIGFuZCBtdgorCQkjIHRoZW0gdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGF0b21pY2FsbHkgaW5zdGFsbC4KKwkJaW5zdGFsbCAtZCAtbSA3NTUgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfQorCQlmb3IgaSBpbiBwYXNzd2QgZ3JvdXA7IGRvCisJCQlpbnN0YWxsIC1wIC1tIDY0NCAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2RhdGFkaXJ9L2Jhc2UtcGFzc3dkLyRpLm1hc3RlciBcCisJCQkJJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtzeXNjb25mZGlyfS8KKwkJCW12ICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkubWFzdGVyICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7c3lzY29uZmRpcn0vJGkKKwkJZG9uZQorCWZpCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgICMgQWRkIGluIHRoZSBwcmVpbnN0IGZ1bmN0aW9uIGZvciAke1BOfQorICAgICMgV2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUgYXMgcHJpb3IgdG8gdGhpcywgcGFzc3dkL2dyb3VwLm1hc3RlcgorICAgICMgd291bGQgYmUgdW5hdmFpbGFibGUuIFdlIG5lZWQgdG8gY3JlYXRlIHRoZXNlIGZpbGVzIGF0IHByZWluc3QKKyAgICAjIHRpbWUgYmVmb3JlIHRoZSBmaWxlcyBmcm9tIHRoZSBwYWNrYWdlIG1heSBiZSBhdmFpbGFibGUsIGhlbmNlCisgICAgIyBzdG9yaW5nIHRoZSBkYXRhIGZyb20gdGhlIGZpbGVzIGluIHRoZSBwcmVpbnN0IGRpcmVjdGx5LgorCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9wYXNzd2QubWFzdGVyIiksICdyJykKKyAgICBwYXNzd2QgPSAiIi5qb2luKGYucmVhZGxpbmVzKCkpCisgICAgZi5jbG9zZSgpCisgICAgZiA9IG9wZW4oZC5leHBhbmQoIiR7U1RBR0lOR19EQVRBRElSfS9iYXNlLXBhc3N3ZC9ncm91cC5tYXN0ZXIiKSwgJ3InKQorICAgIGdyb3VwID0gIiIuam9pbihmLnJlYWRsaW5lcygpKQorICAgIGYuY2xvc2UoKQorCisgICAgcHJlaW5zdCA9ICIiIiMhL2Jpbi9zaAorbWtkaXIgLXAgJEQke3N5c2NvbmZkaXJ9CitpZiBbICEgLWUgJEQke3N5c2NvbmZkaXJ9L3Bhc3N3ZCBdOyB0aGVuCitcdGNhdCA8PCAnRU9GJyA+ICREJHtzeXNjb25mZGlyfS9wYXNzd2QKKyIiIiArIHBhc3N3ZCArICIiIkVPRgorZmkKK2lmIFsgISAtZSAkRCR7c3lzY29uZmRpcn0vZ3JvdXAgXTsgdGhlbgorXHRjYXQgPDwgJ0VPRicgPiAkRCR7c3lzY29uZmRpcn0vZ3JvdXAKKyIiIiArIGdyb3VwICsgIiIiRU9GCitmaQorIiIiCisgICAgZC5zZXRWYXIoJ3BrZ19wcmVpbnN0XyR7UE59JywgcHJlaW5zdCkKK30KKworYWRkdGFzayBkb19wYWNrYWdlIGFmdGVyIGRvX3BvcHVsYXRlX3N5c3Jvb3QKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXVwZGF0ZSIKK0ZJTEVTXyR7UE59LXVwZGF0ZSA9ICIke3NiaW5kaXJ9LyogJHtkYXRhZGlyfS8ke1BOfSIKKworcGtnX3Bvc3RpbnN0XyR7UE59LXVwZGF0ZSAoKSB7CisjIS9iaW4vc2gKK2lmIFsgLW4gIiREIiBdOyB0aGVuCisJZXhpdCAwCitmaQorJHtzYmluZGlyfS91cGRhdGUtcGFzc3dkCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3guaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDhmOWZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LmluYwpAQCAtMCwwICsxLDQxNiBAQAorU1VNTUFSWSA9ICJUaW55IHZlcnNpb25zIG9mIG1hbnkgY29tbW9uIFVOSVggdXRpbGl0aWVzIGluIGEgc2luZ2xlIHNtYWxsIGV4ZWN1dGFibGUiCitERVNDUklQVElPTiA9ICJCdXN5Qm94IGNvbWJpbmVzIHRpbnkgdmVyc2lvbnMgb2YgbWFueSBjb21tb24gVU5JWCB1dGlsaXRpZXMgaW50byBhIHNpbmdsZSBzbWFsbCBleGVjdXRhYmxlLiBJdCBwcm92aWRlcyBtaW5pbWFsaXN0IHJlcGxhY2VtZW50cyBmb3IgbW9zdCBvZiB0aGUgdXRpbGl0aWVzIHlvdSB1c3VhbGx5IGZpbmQgaW4gR05VIGZpbGV1dGlscywgc2hlbGx1dGlscywgZXRjLiBUaGUgdXRpbGl0aWVzIGluIEJ1c3lCb3ggZ2VuZXJhbGx5IGhhdmUgZmV3ZXIgb3B0aW9ucyB0aGFuIHRoZWlyIGZ1bGwtZmVhdHVyZWQgR05VIGNvdXNpbnM7IGhvd2V2ZXIsIHRoZSBvcHRpb25zIHRoYXQgYXJlIGluY2x1ZGVkIHByb3ZpZGUgdGhlIGV4cGVjdGVkIGZ1bmN0aW9uYWxpdHkgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSB0aGVpciBHTlUgY291bnRlcnBhcnRzLiBCdXN5Qm94IHByb3ZpZGVzIGEgZmFpcmx5IGNvbXBsZXRlIFBPU0lYIGVudmlyb25tZW50IGZvciBhbnkgc21hbGwgb3IgZW1iZWRkZWQgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYnVzeWJveC5uZXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5idXN5Ym94Lm5ldC8iCisKK0RFUEVORFMgKz0gImtlcm4tdG9vbHMtbmF0aXZlIgorCisjIGJ6aXAyIGFwcGxldCBpbiBidXN5Ym94IGlzIGJhc2VkIG9uIGxpZ2h0bHktbW9kaWZpZWQgYnppcDIgc291cmNlCisjIHRoZSBHUEwgaXMgdmVyc2lvbiAyIG9ubHkKK0xJQ0VOU0UgPSAiR1BMdjIgJiBiemlwMiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRlMTBkZTQ4NjQyYWI3NDMxOGU4OTNhNjExMDVhZmJiIgorCitTRUNUSU9OID0gImJhc2UiCisKKyMgV2hldGhlciB0byBzcGxpdCB0aGUgc3VpZCBhcHBzIGludG8gYSBzZXBlcmF0ZSBiaW5hcnkKK0JVU1lCT1hfU1BMSVRfU1VJRCA/PSAiMSIKKworZXhwb3J0IEVYVFJBX0NGTEFHUyA9ICIke0NGTEFHU30iCitleHBvcnQgRVhUUkFfTERGTEFHUyA9ICIke0xERkxBR1N9IgorZXhwb3J0IEVYVFJBX09FTUFLRSArPSAiJ0xEPSR7Q0NMRH0nIgorCitQQUNLQUdFUyA9KyAiJHtQTn0taHR0cGQgJHtQTn0tdWRoY3BkICR7UE59LXVkaGNwYyAke1BOfS1zeXNsb2cgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitGSUxFU18ke1BOfS1odHRwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LWh0dHBkIC9zcnYvd3d3IgorRklMRVNfJHtQTn0tc3lzbG9nID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyogJHtzeXNjb25mZGlyfS9zeXNsb2ctc3RhcnR1cC5jb25mKiAke3N5c2NvbmZkaXJ9L3N5c2xvZy5jb25mKiAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c2xvZy5zZXJ2aWNlICR7c3lzY29uZmRpcn0vZGVmYXVsdC9idXN5Ym94LXN5c2xvZyIKK0ZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9pbml0LmQvbWRldiAke3N5c2NvbmZkaXJ9L21kZXYuY29uZiAke3N5c2NvbmZkaXJ9L21kZXYvKiIKK0ZJTEVTXyR7UE59LXVkaGNwZCA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9idXN5Ym94LXVkaGNwZCIKK0ZJTEVTXyR7UE59LXVkaGNwYyA9ICIke3N5c2NvbmZkaXJ9L3VkaGNwYy5kICR7ZGF0YWRpcn0vdWRoY3BjIgorRklMRVNfJHtQTn0taHdjbG9jayA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9od2Nsb2NrLnNoIgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gIiR7UE59LWh0dHBkICR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGQgJHtQTn0tbWRldiAke1BOfS1od2Nsb2NrIgorCitJTklUU0NSSVBUX05BTUVfJHtQTn0taHR0cGQgPSAiYnVzeWJveC1odHRwZCIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS1od2Nsb2NrID0gImh3Y2xvY2suc2giCitJTklUU0NSSVBUX05BTUVfJHtQTn0tbWRldiA9ICJtZGV2IgorSU5JVFNDUklQVF9QQVJBTVNfJHtQTn0tbWRldiA9ICJzdGFydCAwMyBTIC4iCitJTklUU0NSSVBUX05BTUVfJHtQTn0tc3lzbG9nID0gInN5c2xvZyIKK0lOSVRTQ1JJUFRfTkFNRV8ke1BOfS11ZGhjcGQgPSAiYnVzeWJveC11ZGhjcGQiIAorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LXN5c2xvZyIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1zeXNsb2cgPSAiYnVzeWJveC1zeXNsb2cuc2VydmljZSIKKworQ09ORkZJTEVTXyR7UE59LXN5c2xvZyA9ICIke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59IgorQ09ORkZJTEVTXyR7UE59LW1kZXYgPSAiJHtzeXNjb25mZGlyfS9tZGV2LmNvbmYiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LXN5c2xvZyAke1BOfS11ZGhjcGMiCisKK2luaGVyaXQgY21sMSBzeXN0ZW1kIHVwZGF0ZS1yYy5kIHB0ZXN0CisKKyMgaW50ZXJuYWwgaGVscGVyCitkZWYgYnVzeWJveF9jZmcoZmVhdHVyZSwgdG9rZW5zLCBjbmYsIHJlbSk6CisJaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorCQl0b2tlbnMgPSBbdG9rZW5zXQorCXJlbS5leHRlbmQoWycvXlsjIF0qJyArIHRva2VuICsgJ1sgPV0vZCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisJaWYgZmVhdHVyZToKKwkJY25mLmV4dGVuZChbdG9rZW4gKyAnPXknIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorCWVsc2U6CisJCWNuZi5leHRlbmQoWycjICcgKyB0b2tlbiArICcgaXMgbm90IHNldCcgZm9yIHRva2VuIGluIHRva2Vuc10pCisKKyMgTWFwIGRpc3RybyBmZWF0dXJlcyB0byBjb25maWcgc2V0dGluZ3MKK2RlZiBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpOgorCWNuZiwgcmVtID0gKFtdLCBbXSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkVBVFVSRV9JUFY2JywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfTEZTJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUycsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbmxzJywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0xPQ0FMRV9TVVBQT1JUJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgVHJ1ZSwgRmFsc2UsIGQpLCAnQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNCcsIGNuZiwgcmVtKQorCWJ1c3lib3hfY2ZnKGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsIFRydWUsIEZhbHNlLCBkKSwgJ0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjYnLCBjbmYsIHJlbSkKKwlidXN5Ym94X2NmZyhiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dpZmknLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJYnVzeWJveF9jZmcoYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCBUcnVlLCBGYWxzZSwgZCksICdDT05GSUdfUkZLSUxMJywgY25mLCByZW0pCisJcmV0dXJuICJcbiIuam9pbihjbmYpLCAiXG4iLmpvaW4ocmVtKQorCisjIFgsIFkgPSAke0BmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCl9CisjIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2l0aCBiaXRiYWtlLCB3b3JrYXJvdW5kOgorZGVmIGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKToKKwljbmYsIHJlbSA9IGZlYXR1cmVzX3RvX2J1c3lib3hfc2V0dGluZ3MoZCkKKwlyZXR1cm4gY25mCitkZWYgZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCk6CisJY25mLCByZW0gPSBmZWF0dXJlc190b19idXN5Ym94X3NldHRpbmdzKGQpCisJcmV0dXJuIHJlbQorCitjb25maWdtYW5nbGUgPSAnL0NST1NTX0NPTVBJTEVSX1BSRUZJWC9kOyBcCisJCS9DT05GSUdfRVhUUkFfQ0ZMQUdTL2Q7IFwKKwkJJworT0VfRkVBVFVSRVMgOj0gIiR7QGZlYXR1cmVzX3RvX2J1c3lib3hfY29uZihkKX0iCitPRV9ERUwgICAgICA6PSAiJHtAZmVhdHVyZXNfdG9fYnVzeWJveF9kZWwoZCl9IgorRE9fSVB2NCA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY0JywgMSwgMCwgZCl9IgorRE9fSVB2NiA6PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgMSwgMCwgZCl9IgorCitweXRob24gKCkgeworICBpZiAiJHtPRV9ERUx9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsICIke09FX0RFTH0iICsgIlxuIikKKyAgaWYgIiR7T0VfRkVBVFVSRVN9IjoKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIERJU1RSTyBGRUFUVVJFUyQvYVxcXG4lc1xuXG4iICUKKyAgICAgICAgICAgICAgICAgICAoIlxcbiIuam9pbigoZC5leHBhbmQoIiR7T0VfRkVBVFVSRVN9Iikuc3BsaXQoIlxuIikpKSkpCisgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIENST1NTJC9hXFxcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKFsiQ09ORklHX0NST1NTX0NPTVBJTEVSX1BSRUZJWD1cIiR7VEFSR0VUX1BSRUZJWH1cIiIsCisJCQkgICAgICAgIkNPTkZJR19FWFRSQV9DRkxBR1M9XCIke0NGTEFHU31cIiBcIiR7SE9TVF9DQ19BUkNIfVwiIgorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAgICkpCit9CisKK2RvX3ByZXBhcmVfY29uZmlnICgpIHsKKwlzZWQgLWUgJ3MjQERBVEFESVJAIyR7ZGF0YWRpcn0jZycgXAorCQk8ICR7V09SS0RJUn0vZGVmY29uZmlnID4gJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcvQ09ORklHX1NUQVRJQy9kJyAuY29uZmlnCisJZWNobyAiIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQiID4+IC5jb25maWcKKwlmb3IgaSBpbiAnQ1JPU1MnICdESVNUUk8gRkVBVFVSRVMnOyBkbyBlY2hvICIjIyMgJGkiOyBkb25lID4+IFwKKwkJJHtTfS8uY29uZmlnCisJc2VkIC1pIC1lICcke2NvbmZpZ21hbmdsZX0nICR7U30vLmNvbmZpZworCWlmIHRlc3QgJHtET19JUHY0fSAtZXEgMCAmJiB0ZXN0ICR7RE9fSVB2Nn0gLWVxIDA7IHRoZW4KKwkgICMgZGlzYWJsZSBuZXR3b3JraW5nIGFwcGxldHMKKwkgIG12ICR7U30vLmNvbmZpZyAke1N9Ly5jb25maWcub2UtdG1wCisJICBhd2sgJ0JFR0lOe25ldD0wfQorCSAgL14jIE5ldHdvcmtpbmcgVXRpbGl0aWVzL3tuZXQ9MX0KKwkgIC9eIyQve2lmKG5ldCl7bmV0PW5ldCsxfX0KKwkgIHtpZihuZXQ9PTImJiQwICF+IC9eIy8mJiQxKXtwcmludCgiIyAiJDEiIGlzIG5vdCBzZXQiKX1lbHNle3ByaW50fX0nIFwKKwkJICAke1N9Ly5jb25maWcub2UtdG1wID4gJHtTfS8uY29uZmlnCisJZmkKKwlzZWQgLWkgJ3MvQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iL0NPTkZJR19JRlVQRE9XTl9VREhDUENfQ01EX09QVElPTlM9Ii1SIC1iIi8nICR7U30vLmNvbmZpZworfQorCisjIHJldHVybnMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzcmMgdXJpIHRoYXQgYXJlIC5jZmcgZmlsZXMKK2RlZiBmaW5kX2NmZ3MoZCk6CisgICAgc291cmNlcz1zcmNfcGF0Y2hlcyhkLCBUcnVlKQorICAgIHNvdXJjZXNfbGlzdD1bXQorICAgIGZvciBzIGluIHNvdXJjZXM6CisgICAgICAgIGlmIHMuZW5kc3dpdGgoJy5jZmcnKToKKyAgICAgICAgICAgIHNvdXJjZXNfbGlzdC5hcHBlbmQocykKKworICAgIHJldHVybiBzb3VyY2VzX2xpc3QKKworZG9fY29uZmlndXJlICgpIHsKKwlkb19wcmVwYXJlX2NvbmZpZworCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnICR7QCIgIi5qb2luKGZpbmRfY2ZncyhkKSl9CisJY21sMV9kb19jb25maWd1cmUKK30KKworZG9fY29tcGlsZSgpIHsKKwl1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgLWEgeGBncmVwICJDT05GSUdfRkVBVFVSRV9JTkRJVklEVUFMPXkiIC5jb25maWdgID0geCBdOyB0aGVuCisJIyBzcGxpdCB0aGUgLmNvbmZpZyBpbnRvIHR3byBwYXJ0cywgYW5kIG1ha2UgdHdvIGJ1c3lib3ggYmluYXJpZXMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm9yaWcKKwkJb2VfcnVubWFrZSBidXN5Ym94LmNmZy5zdWlkCisJCW9lX3J1bm1ha2UgYnVzeWJveC5jZmcubm9zdWlkCisJCWZvciBpIGluIGBjYXQgYnVzeWJveC5jZmcuc3VpZCBidXN5Ym94LmNmZy5ub3N1aWRgOyBkbworCQkJZWNobyAiIyAkaSBpcyBub3Qgc2V0IiA+PiAuY29uZmlnLmRpc2FibGUuYXBwcworCQlkb25lCisJCW1lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnLm9yaWcgLmNvbmZpZy5kaXNhYmxlLmFwcHMKKwkJY3AgLmNvbmZpZyAuY29uZmlnLm5vbmFwcHMKKwkJZm9yIHMgaW4gc3VpZCBub3N1aWQ7IGRvCisJCQljYXQgYnVzeWJveC5jZmcuJHMgfCB3aGlsZSByZWFkIGl0ZW07IGRvCisJCQkJZ3JlcCAtdyAiJGl0ZW0iIC5jb25maWcub3JpZworCQkJZG9uZSA+IC5jb25maWcuYXBwLiRzCisJCQltZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZy5ub25hcHBzIC5jb25maWcuYXBwLiRzCisJCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQkJbXYgYnVzeWJveF91bnN0cmlwcGVkIGJ1c3lib3guJHMKKwkJCW9lX3J1bm1ha2UgYnVzeWJveC5saW5rcworCQkJbXYgYnVzeWJveC5saW5rcyBidXN5Ym94LmxpbmtzLiRzCisJCWRvbmUKKwkJIyBjb3B5IC5jb25maWcub3JpZyBiYWNrIHRvIC5jb25maWcsIGJlY2F1c2UgdGhlIGluc3RhbGwgcHJvY2VzcyBtYXkgY2hlY2sgdGhpcyBmaWxlCisJCWNwIC5jb25maWcub3JpZyAuY29uZmlnCisJCSMgY2xlYW51cAorCQlybSAuY29uZmlnLm9yaWcgLmNvbmZpZy5hcHAuc3VpZCAuY29uZmlnLmFwcC5ub3N1aWQgLmNvbmZpZy5kaXNhYmxlLmFwcHMgLmNvbmZpZy5ub25hcHBzCisJZWxzZQorCQlvZV9ydW5tYWtlIGJ1c3lib3hfdW5zdHJpcHBlZAorCQljcCBidXN5Ym94X3Vuc3RyaXBwZWQgYnVzeWJveAorCQlvZV9ydW5tYWtlIGJ1c3lib3gubGlua3MKKwlmaQorfQorCitkb19pbnN0YWxsICgpIHsKKwlpZiBbICIke3ByZWZpeH0iICE9ICIvdXNyIiBdOyB0aGVuCisJCXNlZCAtaSAiczpeL3Vzci86JHtwcmVmaXh9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKwlpZiBbICIke2Jhc2Vfc2JpbmRpcn0iICE9ICIvc2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9zYmluLzoke2Jhc2Vfc2JpbmRpcn0vOiIgYnVzeWJveC5saW5rcyoKKwlmaQorCWlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiL2JpbiIgXTsgdGhlbgorCQlzZWQgLWkgInM6Xi9iaW4vOiR7YmFzZV9iaW5kaXJ9LzoiIGJ1c3lib3gubGlua3MqCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisKKwlpZiAhIGdyZXAgLXEgIkNPTkZJR19GRUFUVVJFX0lORElWSURVQUw9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCSMgSW5zdGFsbCAvYmluL2J1c3lib3gsIGFuZCB0aGUgL2Jpbi9zaCBsaW5rIHNvIHRoZSBwb3N0aW5zdCBzY3JpcHQKKwkJIyBjYW4gcnVuLiBMZXQgdXBkYXRlLWFsdGVybmF0aXZlcyBoYW5kbGUgdGhlIHJlc3QuCisJCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCWlmIFsgIiR7QlVTWUJPWF9TUExJVF9TVUlEfSIgPSAiMSIgXTsgdGhlbgorCQkJaW5zdGFsbCAtbSA0NzU1ICR7Qn0vYnVzeWJveC5zdWlkICR7RH0ke2Jhc2VfYmluZGlyfQorCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveC5ub3N1aWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzLnN1aWQgJHtEfSR7c3lzY29uZmRpcn0KKwkJCWluc3RhbGwgLW0gMDY0NCAke1N9L2J1c3lib3gubGlua3Mubm9zdWlkICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3gubm9zdWlkICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQkJZmkKKwkJCSMgS2VlcCBhIGRlZmF1bHQgYnVzeWJveCBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGludm9rZSBidXN5Ym94IGRpcmVjdGx5LgorCQkJIyBUaGlzIGlzIGFsc28gdXNlZnVsIGZvciB0aGUgb24gZGV2aWNlIHVwZ3JhZGUuIEJlY2F1c2Ugd2Ugd2FudAorCQkJIyB0byB1c2UgdGhlIGJ1c3lib3ggY29tbWFuZCBpbiBwb3N0aW5zdC4KKwkJCWxuIC1zZiBidXN5Ym94Lm5vc3VpZCAke0R9JHtiYXNlX2JpbmRpcn0vYnVzeWJveAorCQllbHNlCisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TVUlEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQkJCWluc3RhbGwgLW0gNDc1NSAke0J9L2J1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9CisJCQllbHNlCisJCQkJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vYnVzeWJveCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJCWZpCisJCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJCQlpZiBncmVwIC1xICJDT05GSUdfRkVBVFVSRV9TSF9JU19BU0g9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L3NoCisJCQlmaQorCQkJIyBXZSBtYWtlIHRoaXMgc3ltbGluayBoZXJlIHRvIGVsaW1pbmF0ZSB0aGUgZXJyb3Igd2hlbiB1cGdyYWRpbmcgdG9nZXRoZXIKKwkJCSMgd2l0aCBidXN5Ym94LXN5c2xvZy4gV2l0aG91dCB0aGlzIHN5bWxpbmssIHRoZSBvcGtnIG1heSB0aGluayBvZiB0aGUKKwkJCSMgYnVzeWJveC5ub3N1aWQgYXMgb2Jzb2xldGUgYW5kIHJlbW92ZSBpdCwgcmVzdWx0aW5nIGluIGRlYWQgbGlua3MgbGlrZQorCQkJIyAvYmluL3NlZCAtPiAvYmluL2J1c3lib3gubm9zdWlkLiBUaGlzIHdpbGwgbWFrZSB1cGdyYWRpbmcgYnVzeWJveC1zeXNsb2cgZmFpbC4KKwkJCSMgVGhpcyBzeW1saW5rIHdpbGwgYmUgc2FmZWx5IGRlbGV0ZWQgaW4gcG9zdGluc3QsIHRodXMgbm8gbmVnYXRpdmUgZWZmZWN0LgorCQkJbG4gLXNmIGJ1c3lib3ggJHtEfSR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkCisJCWZpCisJZWxzZQorCQlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9CisJCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfSAke0R9JHtiaW5kaXJ9ICR7RH0ke3NiaW5kaXJ9CisJCWNhdCBidXN5Ym94LmxpbmtzIHwgd2hpbGUgcmVhZCBGSUxFOyBkbworCQkJTkFNRT1gYmFzZW5hbWUgIiRGSUxFImAKKwkJCWluc3RhbGwgLW0gMDc1NSAiMF9saWIvJE5BTUUiICIke0R9JEZJTEUuJHtCUE59IgorCQlkb25lCisJCSMgYWRkIHN1aWQgYml0IHdoZXJlIG5lZWRlZAorCQlmb3IgaSBpbiBgZ3JlcCAtRSAiQVBQTEVULipCQl9TVUlEXygoTUFZQkV8UkVRVUlSRSkpIiBpbmNsdWRlL2FwcGxldHMuaCB8IGdyZXAgLXYgX0JCX1NVSURfRFJPUCB8IGN1dCAtZiAzIC1kICcoJyB8IGN1dCAtZiAxIC1kICcsJ2A7IGRvCisJCQlmaW5kICR7RH0gLW5hbWUgJGkuJHtCUE59IC1leGVjIGNobW9kIGErcyB7fSBcOworCQlkb25lCisJCWluc3RhbGwgLW0gMDc1NSAwX2xpYi9saWJidXN5Ym94LnNvLiR7UFZ9ICR7RH0ke2xpYmRpcn0vbGliYnVzeWJveC5zby4ke1BWfQorCQlsbiAtc2Ygc2guJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9zaAorCQlsbiAtc2YgbG4uJHtCUE59ICR7RH0ke2Jhc2VfYmluZGlyfS9sbgorCQlsbiAtc2YgdGVzdC4ke0JQTn0gJHtEfSR7YmluZGlyfS90ZXN0CisJCWlmIFsgLWYgJHtEfS9saW51eHJjLiR7QlBOfSBdOyB0aGVuCisJCQltdiAke0R9L2xpbnV4cmMuJHtCUE59ICR7RH0vbGludXhyYworCQlmaQorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS9idXN5Ym94LmxpbmtzICR7RH0ke3N5c2NvbmZkaXJ9CisJZmkKKworCWlmIGdyZXAgLXEgIkNPTkZJR19TWVNMT0dEPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zeXNsb2cgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZy4ke0JQTn0KKwkJaW5zdGFsbCAtbSA2NDQgJHtXT1JLRElSfS9zeXNsb2ctc3RhcnR1cC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2xvZy1zdGFydHVwLmNvbmYuJHtCUE59CisJCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYuJHtCUE59CisJZmkKKwlpZiBncmVwICJDT05GSUdfQ1JPTkQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtY3JvbiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJZmkKKwlpZiBncmVwICJDT05GSUdfSFRUUEQ9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2J1c3lib3gtaHR0cGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCQlpbnN0YWxsIC1kICR7RH0vc3J2L3d3dworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQRD15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vYnVzeWJveC11ZGhjcGQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX0hXQ0xPQ0s9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2h3Y2xvY2suc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWZpCisJaWYgZ3JlcCAiQ09ORklHX1VESENQQz15IiAke0J9Ly5jb25maWc7IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGhjcGMuZAorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3VkaGNwYworICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3NpbXBsZS5zY3JpcHQgJHtEfSR7c3lzY29uZmRpcn0vdWRoY3BjLmQvNTBkZWZhdWx0CisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQuc2NyaXB0ICR7RH0ke2RhdGFkaXJ9L3VkaGNwYy9kZWZhdWx0LnNjcmlwdAorCWZpCisJaWYgZ3JlcCAiQ09ORklHX0lORVREPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbmV0ZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvaW5ldGQuJHtCUE59CisJCXNlZCAtaSAiczovdXNyL3NiaW4vOiR7c2JpbmRpcn0vOiIgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2luZXRkLiR7QlBOfQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmV0ZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9LworCWZpCisgICAgICAgIGlmIGdyZXAgIkNPTkZJR19NREVWPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbWRldiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvbWRldgorICAgICAgICAgICAgICAgaWYgZ3JlcCAiQ09ORklHX0ZFQVRVUkVfTURFVl9DT05GPXkiICR7Qn0vLmNvbmZpZzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L21kZXYuY29uZiAke0R9JHtzeXNjb25mZGlyfS9tZGV2LmNvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9tZGV2CisgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ZpbmQtdG91Y2hzY3JlZW4uc2ggJHtEfSR7c3lzY29uZmRpcn0vbWRldgorICAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tZGV2LW1vdW50LnNoICR7RH0ke3N5c2NvbmZkaXJ9L21kZXYKKyAgICAgICAgICAgICAgIGZpCisJZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaWYgZ3JlcCAtcSAiQ09ORklHX1NZU0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKwkJPiAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlCisgICAgICAgICAgICBpZiBbIC1mICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBdIDsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L2J1c3lib3gtc3lzbG9nCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbG4gLXNmIC9kZXYvbnVsbCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNsb2cuc2VydmljZQorICAgICAgICBmaQorICAgICAgICBpZiBncmVwIC1xICJDT05GSUdfS0xPR0Q9eSIgJHtCfS8uY29uZmlnOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgICAgICAgICBzZWQgJ3MsQGJhc2Vfc2JpbmRpckAsJHtiYXNlX3NiaW5kaXJ9LGcnIDwgJHtXT1JLRElSfS9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gXAorCQk+ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2J1c3lib3gta2xvZ2Quc2VydmljZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIFJlbW92ZSB0aGUgc3lzdmluaXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlIGZvciBzeXN0ZW1kIHN5c3RlbXMgdG8gYXZvaWQgY29uZnVzaW9uCisgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsICdmYWxzZScsICd0cnVlJywgZCl9OyB0aGVuCisJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLXN0YXJ0dXAuY29uZi4ke0JQTn0KKyAgICBmaQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK0FMVEVSTkFUSVZFXyR7UE59LXN5c2xvZyArPSAic3lzbG9nLWNvbmYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWNvbmZdID0gIiR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYiCisKK3B5dGhvbiAoKSB7CisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN2aW5pdCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgICAgICBkLmFwcGVuZFZhcignQUxURVJOQVRJVkVfJXMtc3lzbG9nJyAlIChwbiksICcgc3lzbG9nLWluaXQnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctaW5pdCcsICclcy9pbml0LmQvc3lzbG9nJyAlIChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpKSkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCAnc3lzbG9nLWluaXQnLCAnJXMvaW5pdC5kL3N5c2xvZy4lcycgJSAoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ0JQTicsIFRydWUpKSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzLXN5c2xvZycgJSAocG4pLCAnIHN5c2xvZy1zdGFydHVwLWNvbmYnKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSkpKQorICAgICAgICBkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX1RBUkdFVCcsICdzeXNsb2ctc3RhcnR1cC1jb25mJywgJyVzL3N5c2xvZy1zdGFydHVwLmNvbmYuJXMnICUgKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdCUE4nLCBUcnVlKSkpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQgKCkgeworICAgICMgV2UgbmVlZCB0byBsb2FkIHRoZSBmdWxsIHNldCBvZiBidXN5Ym94IHByb3ZpZGVzIGZyb20gdGhlIC9ldGMvYnVzeWJveC5saW5rcworICAgICMgVXNlIHRoaXMgdG8gc2VlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIHdpdGggdGhlIHJpZ2h0IGluZm9ybWF0aW9uCisKKyAgICBkdmFyID0gZC5nZXRWYXIoJ0QnLCBUcnVlKQorICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICBkZWYgc2V0X2FsdGVybmF0aXZlX3ZhcnMobGlua3MsIHRhcmdldCk6CisgICAgICAgIGYgPSBvcGVuKCclcyVzJyAlIChkdmFyLCBsaW5rcyksICdyJykKKyAgICAgICAgZm9yIGFsdF9saW5rX25hbWUgaW4gZjoKKyAgICAgICAgICAgIGFsdF9saW5rX25hbWUgPSBhbHRfbGlua19uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGFsdF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShhbHRfbGlua19uYW1lKQorICAgICAgICAgICAgIyBNYXRjaCBjb3JldXRpbHMKKyAgICAgICAgICAgIGlmIGFsdF9uYW1lID09ICdbJzoKKyAgICAgICAgICAgICAgICBhbHRfbmFtZSA9ICdsYnJhY2tldCcKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCdBTFRFUk5BVElWRV8lcycgJSAocG4pLCAnICcgKyBhbHRfbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsIGFsdF9saW5rX25hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMlcycgJSAoZHZhciwgdGFyZ2V0KSk6CisgICAgICAgICAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHRfbmFtZSwgdGFyZ2V0KQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cygnJXMvZXRjL2J1c3lib3gubGlua3MnICUgKGR2YXIpKToKKyAgICAgICAgc2V0X2FsdGVybmF0aXZlX3ZhcnMoIiR7c3lzY29uZmRpcn0vYnVzeWJveC5saW5rcyIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94IikKKyAgICBlbHNlOgorICAgICAgICBzZXRfYWx0ZXJuYXRpdmVfdmFycygiJHtzeXNjb25mZGlyfS9idXN5Ym94LmxpbmtzLm5vc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZCIpCisgICAgICAgIHNldF9hbHRlcm5hdGl2ZV92YXJzKCIke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Muc3VpZCIsICIke2Jhc2VfYmluZGlyfS9idXN5Ym94LnN1aWQiKQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCSMgVGhpcyBwYXJ0IG9mIGNvZGUgaXMgZGVkaWNhdGVkIHRvIHRoZSBvbiB0YXJnZXQgdXBncmFkZSBwcm9ibGVtLgorCSMgSXQncyBrbm93biB0aGF0IGlmIHdlIGRvbid0IG1ha2UgYXBwcm9wcmlhdGUgc3ltbGlua3MgYmVmb3JlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgY2FsbHMsCisJIyB0aGVyZSB3aWxsIGJlIGVycm9ycyBpbmRpY2F0aW5nIG1pc3NpbmcgY29tbWFuZHMgc3VjaCBhcyAnc2VkJy4KKwkjIFRoZXNlIHN5bWxpbmtzIHdpbGwgbGF0ZXIgYmUgdXBkYXRlZCBieSB1cGRhdGUtYWx0ZXJuYXRpdmVzIGNhbGxzLgorCXRlc3QgLW4gMiA+IC9kZXYvbnVsbCB8fCBhbGlhcyB0ZXN0PSdidXN5Ym94IHRlc3QnCisJaWYgdGVzdCAieCREIiA9ICJ4IjsgdGhlbgorCQkjIFJlbW92ZSBidXN5Ym94Lm5vc3VpZCBpZiBpdCdzIGEgc3ltbGluaywgYmVjYXVzZSB0aGlzIHNpdHVhdGlvbiBpbmRpY2F0ZXMKKwkJIyB0aGF0IHdlJ3JlIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHRvIGEgb25lLWJpbmFyeSBidXN5Ym94LgorCQlpZiB0ZXN0IC1oICR7YmFzZV9iaW5kaXJ9L2J1c3lib3gubm9zdWlkOyB0aGVuCisJCQlybSAtZiAke2Jhc2VfYmluZGlyfS9idXN5Ym94Lm5vc3VpZAorCQlmaQorCQlmb3Igc3VmZml4IGluICIiICIubm9zdWlkIiAiLnN1aWQiOyBkbworCQkJaWYgdGVzdCAtZSAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4OyB0aGVuCisJCQkJd2hpbGUgcmVhZCBsaW5rOyBkbworCQkJCQlpZiB0ZXN0ICEgLWUgIiRsaW5rIjsgdGhlbgorCQkJCQkJY2FzZSAiJGxpbmsiIGluCisJCQkJCQkJLyovKi8qKQorCQkJCQkJCQl0bz0iLi4vLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvYmluLyopCisJCQkJCQkJCXRvPSJidXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCQkvKi8qKQorCQkJCQkJCQl0bz0iLi4ke2Jhc2VfYmluZGlyfS9idXN5Ym94JHN1ZmZpeCIKKwkJCQkJCQkJOzsKKwkJCQkJCWVzYWMKKwkJCQkJCSMgd2UgY2FuIHVzZSBidXN5Ym94IGhlcmUgYmVjYXVzZSBldmVuIGlmIHdlIGFyZSB1c2luZyBzcGxpdHRlZCBidXN5Ym94CisJCQkJCQkjIHdlJ3ZlIG1hZGUgYSBzeW1saW5rIGZyb20gL2Jpbi9idXN5Ym94IHRvIC9iaW4vYnVzeWJveC5ub3N1aWQuCisJCQkJCQlidXN5Ym94IHJtIC1mICRsaW5rCisJCQkJCQlidXN5Ym94IGxuIC1zICR0byAkbGluaworCQkJCQlmaQorCQkJCWRvbmUgPCAke3N5c2NvbmZkaXJ9L2J1c3lib3gubGlua3Mkc3VmZml4CisJCQlmaQorCQlkb25lCisJZmkKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwkjIFRoaXMgaXMgc28geW91IGNhbiBtYWtlIGJ1c3lib3ggY29tbWl0IHN1aWNpZGUgLSByZW1vdmluZyBidXN5Ym94IHdpdGggbm8gb3RoZXIgcGFja2FnZXMKKwkjIHByb3ZpZGluZyBpdHMgZmlsZXMsIHRoaXMgd2lsbCBtYWtlIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgd29yaywgYnV0IHRoZSB1cGRhdGUtcmMuZCBwYXJ0CisJIyBmb3Igc3lzbG9nLCBodHRwZCBhbmQvb3IgdWRoY3BkIHdpbGwgZmFpbCBpZiB0aGVyZSBpcyBubyBvdGhlciBwYWNrYWdlIHByb3ZpZGluZyBzaAorCXRtcGRpcj1gbWt0ZW1wIC1kIC90bXAvYnVzeWJveHJtLVhYWFhYWGAKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvWworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci90ZXN0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2hlYWQKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvc2gKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvYmFzZW5hbWUKKwlsbiAtcyAke2Jhc2VfYmluZGlyfS9idXN5Ym94ICR0bXBkaXIvZWNobworCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9tdgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9sbgorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9kaXJuYW1lCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3JtCisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL3NlZAorCWxuIC1zICR7YmFzZV9iaW5kaXJ9L2J1c3lib3ggJHRtcGRpci9zb3J0CisJbG4gLXMgJHtiYXNlX2JpbmRpcn0vYnVzeWJveCAkdG1wZGlyL2dyZXAKKwlleHBvcnQgUEFUSD0kUEFUSDokdG1wZGlyCit9CisKK3BrZ19wcmVybV8ke1BOfS1zeXNsb2cgKCkgeworCSMgcmVtb3ZlIHN5c2xvZworCWlmIHRlc3QgIngkRCIgPSAieCI7IHRoZW4KKwkJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkJJHtzeXNjb25mZGlyfS9pbml0LmQvc3lzbG9nIHN0b3AKKwkJZmkKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94LzAwMDEtY2hvd24tZml4LWhlbHAtdGV4dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5OTc5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSBkMjkxYzJmZGQ1Y2I4NjE2NjA1YzY3ZWNiZmIwNDI3NGZhMDk0MjQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBTdW4sIDcgSnVuIDIwMTUgMDI6MzI6MjMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY2hvd246IGZpeCBoZWxwIHRleHQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9ZDI5MWMyZmRkNWNiODYxNjYwNWM2N2VjYmZiMDQyNzRmYTA5NDI0Mi4KKworT25seSB3aGVuIERFU0tUT1AgaXMgZW5hYmxlZCwgY2hvd24gaGFzIC1MLCAtSCBhbmQgLVAgb3B0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBjb3JldXRpbHMvY2hvd24uYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvcmV1dGlscy9jaG93bi5jIGIvY29yZXV0aWxzL2Nob3duLmMKK2luZGV4IGNiMDdiYmMuLjY3OWMwZDggMTAwNjQ0CistLS0gYS9jb3JldXRpbHMvY2hvd24uYworKysrIGIvY29yZXV0aWxzL2Nob3duLmMKK0BAIC0xMSw3ICsxMSw3IEBACisgLyogaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA0OTc1L3V0aWxpdGllcy9jaG93bi5odG1sICovCisgCisgLy91c2FnZTojZGVmaW5lIGNob3duX3RyaXZpYWxfdXNhZ2UKKy0vL3VzYWdlOiAgICAgICAiWy1SaExIUCJJRl9ERVNLVE9QKCJjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKysvL3VzYWdlOiAgICAgICAiWy1SaCJJRl9ERVNLVE9QKCJMSFBjdmYiKSJdLi4uIE9XTkVSWzwufDo+W0dST1VQXV0gRklMRS4uLiIKKyAvL3VzYWdlOiNkZWZpbmUgY2hvd25fZnVsbF91c2FnZSAiXG5cbiIKKyAvL3VzYWdlOiAgICAgICAiQ2hhbmdlIHRoZSBvd25lciBhbmQvb3IgZ3JvdXAgb2YgZWFjaCBGSUxFIHRvIE9XTkVSIGFuZC9vciBHUk9VUFxuIgorIC8vdXNhZ2U6ICAgICAiXG4JLVIJUmVjdXJzZSIKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvMDAwMS1pZmNvbmZpZy1maXgtZG91YmxlLWZyZWUtZmF0YWwtZXJyb3ItaW4tSU5FVF9zcHJpbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ3MjliMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGE5Nzc3Nzg4OTMyODE1N2JiN2QwNmVjNjE4YmFkMTY3MTJhOWMzNDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBWbGFzZW5rbyA8dmRhLmxpbnV4QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVHVlLCAzIEZlYiAyMDE1IDEyOjExOjMwICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlmY29uZmlnOiBmaXggZG91YmxlIGZyZWUgZmF0YWwgZXJyb3IgaW4gSU5FVF9zcHJpbnQKKworRGVyaXZlZCBmcm9tOgoraHR0cDovL2dpdC5idXN5Ym94Lm5ldC9idXN5Ym94L2NvbW1pdC8/aWQ9YTk3Nzc3ODg5MzI4MTU3YmI3ZDA2ZWM2MThiYWQxNjcxMmE5YzM0NS4KKworV2hpbGUgSU5FVF9zcHJpbnQgb3IgSU5FVDZfc3ByaW50IGlzIGNhbGxlZCBjaXJjdWxhcmx5IGJ5IGtlZXBpbmcKK2lmY29uZmlnaW5nLCBzYXAtPnNhX2ZhbWlseSB3b3VsZCBiZSBjbGVhbmVkIGJ5IG90aGVyIHBhcmFsbGVsIHByb2Nlc3Nlcworc3VjaCBhcyBkaGNsaWVudCBzb21ldGltZXMsIGFuZCB0aGVuIHRoZXJlIHdvdWxkIGJlIGEgZG91YmxlIGZyZWUgZXJyb3IKK2xpa2UgdGhlIGZvbGxvd2luZzoKKworICAqKiogZ2xpYmMgZGV0ZWN0ZWQgKioqIGlmY29uZmlnOiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uIChmYXN0dG9wKTogMHgwMDBhNjAwOCAqKioKKyAgPT09PT09PSBCYWNrdHJhY2U6ID09PT09PT09PQorICAvbGliL2xpYmMuc28uNigrMHg2YmM4NClbMHg0MDEzM2M4NF0KKyAgL2xpYi9saWJjLnNvLjYoY2ZyZWUrMHg5NClbMHg0MDEzODY4NF0KKyAgaWZjb25maWdbMHgxYzQ2MF0KKyAgaWZjb25maWdbMHgxYzZhMF0KKyAgaWZjb25maWdbMHgxY2NmNF0KKyAgaWZjb25maWdbMHgxODdjOF0KKyAgaWZjb25maWdbMHhkNTQ0XQorICBpZmNvbmZpZ1sweGQ1ZGNdCisgIGlmY29uZmlnWzB4ZGNhOF0KKyAgL2xpYi9saWJjLnNvLjYoX19saWJjX3N0YXJ0X21haW4rMHgxMTApWzB4NDAwZGYyNThdCisgID09PT09PT0gTWVtb3J5IG1hcDogPT09PT09PT0KKyAgMDAwMDgwMDAtMDAwOWMwMDAgci14cCAwMDAwMDAwMCAxZjowNSA0NDQzMjggICAgIC9iaW4vYnVzeWJveAorICAwMDBhMzAwMC0wMDBhNDAwMCBydy1wIDAwMDkzMDAwIDFmOjA1IDQ0NDMyOCAgICAgL2Jpbi9idXN5Ym94CisKK1RoaXMgcGF0Y2ggbW92ZWQgZnJlZSgpIHR3byBsaW5lcyBkb3duIHRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIFZsYXNlbmtvIDx2ZGEubGludXhAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBuZXR3b3JraW5nL2ludGVyZmFjZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25ldHdvcmtpbmcvaW50ZXJmYWNlLmMgYi9uZXR3b3JraW5nL2ludGVyZmFjZS5jCitpbmRleCBiZjdkMmIxLi5iMDU3MmQwIDEwMDY0NAorLS0tIGEvbmV0d29ya2luZy9pbnRlcmZhY2UuYworKysrIGIvbmV0d29ya2luZy9pbnRlcmZhY2UuYworQEAgLTkxLDkgKzkxLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUX3NwcmludChzdHJ1Y3Qgc29ja2FkZHIgKnNhcCwgaW50IG51bWVyaWMpCisgeworIAlzdGF0aWMgY2hhciAqYnVmZjsgLyogZGVmYXVsdHMgdG8gTlVMTCAqLworIAorLQlmcmVlKGJ1ZmYpOworIAlpZiAoc2FwLT5zYV9mYW1pbHkgPT0gMHhGRkZGIHx8IHNhcC0+c2FfZmFtaWx5ID09IDApCisgCQlyZXR1cm4gIltOT05FIFNFVF0iOworKwlmcmVlKGJ1ZmYpOworIAlidWZmID0gSU5FVF9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luICopIHNhcCwgbnVtZXJpYywgMHhmZmZmZmYwMCk7CisgCXJldHVybiBidWZmOworIH0KK0BAIC0xNzMsOSArMTczLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEZBU1RfRlVOQyBJTkVUNl9zcHJpbnQoc3RydWN0IHNvY2thZGRyICpzYXAsIGludCBudW1lcmljKQorIHsKKyAJc3RhdGljIGNoYXIgKmJ1ZmY7CisgCistCWZyZWUoYnVmZik7CisgCWlmIChzYXAtPnNhX2ZhbWlseSA9PSAweEZGRkYgfHwgc2FwLT5zYV9mYW1pbHkgPT0gMCkKKyAJCXJldHVybiAiW05PTkUgU0VUXSI7CisrCWZyZWUoYnVmZik7CisgCWJ1ZmYgPSBJTkVUNl9ycmVzb2x2ZSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSBzYXAsIG51bWVyaWMpOworIAlyZXR1cm4gYnVmZjsKKyB9CistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1hcHBsZXRsaWItZGVwZW5kZW5jeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTJkYmNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2J1c3lib3gtYXBwbGV0bGliLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMgY29weSBjb21taXQgbWVzc2FnZSBmcm9tIE9FIGFzIHRoZSBwYXRjaCBjb21tZW50OgorIyAgICBjb21taXQgOThjMjQyOTFhYTE2NWY1MzQyM2MyN2FlMDMzODMxY2UwYjNiYjY3NgorIyAgICBBdXRob3I6IFJvbWFuIEkgS2hpbW92IDxraGltb3ZAYWx0ZWxsLnJ1PgorIyAgICBEYXRlOiAgIFRodSBNYXIgMjYgMjM6MDM6NTggMjAwOSArMDAwMAorIworIyAgICBidXN5Ym94OiB1cGRhdGUgYXBwbGV0bGliIGRlcGVuZGVuY3kgcGF0Y2gKKyMgICAgCisjICAgIFByZXZpb3VzIHZlcnNpb24gc3RpbGwgZmFpbGVkIGZyb20gdGltZSB0byB0aW1lIG9uIGNsZWFuLXN0YXJ0IGJ1aWxkcworIyAgICB3aXRoIDQgYml0YmFrZSB0aHJlYWRzIGFuZCAnLWoxNicuIEJ1aWxkaW5nIGJ1c3lib3ggYXMgc29sZSB0YXJnZXQgd29ya2VkCisjICAgIHdlbGwuCisjICAgIAorIyAgICBUaGUgcmVhc29uIGlzIHRoYXQgcHJldmlvdXMgdmVyc2lvbiBpbnRyb2R1Y2VkIGEgcmFjZSBiZXR3ZWVuIGFwcGxldHMgbWFrZQorIyAgICBwcm9jZXNzZXMgc3Bhd25lZCBmcm9tIHRvcC1sZXZlbCBNYWtlZmlsZSBhbmQgZnJvbSBsaWJiYiBNYWtlZmlsZS4KKyMgICAgCisjICAgIEZpeCBpdCB3aXRoIGhpZ2gtbGV2ZWwgZGVwZW5kZW5jeSB0aGF0IGRvZXNuJ3QgY3JlYXRlIHJhY2VzLgorIyAgICAKKyMgICAgU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQG9wZW5lbWJlZGRlZC5vcmc+CisjCisjIGFib3ZlIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA3LTA2CisKK0luZGV4OiBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4xMy4yLm9yaWcvTWFrZWZpbGUJMjAwOS0wMy0xOSAxNTo0NDozNy40MTkyNzAyNjUgKzAzMDAKKysrKyBidXN5Ym94LTEuMTMuMi9NYWtlZmlsZQkyMDA5LTAzLTE5IDE1OjQ1OjU3LjczNzUyMTI5NiArMDMwMAorQEAgLTQ3MSw2ICs0NzEsMTAgQEAKKyAJCXV0aWwtbGludXgvIFwKKyAJCXV0aWwtbGludXgvdm9sdW1lX2lkLyBcCisgCisrIyBMaWIgaW50ZXJkZXBzCisrIyBsaWJiYiB1c2VzIGhlYWRlcnMgZ2VuZXJhdGVkIGluIGFwcGxldHMKKytsaWJiYjogYXBwbGV0cworKworIGVuZGlmICMgS0JVSUxEX0VYVE1PRAorIAorIGlmZXEgKCQoZG90LWNvbmZpZyksMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LWNyb3NzLW1lbnVjb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTg2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC1jcm9zcy1tZW51Y29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0Zyb206IEphc29uIFdlc3NlbCA8amFzb24ud2Vzc2VsQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDMgTWFyIDIwMTMgMTI6MzE6NDAgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSF0gbWVudWNvbmZpZyxjaGVjay1seGRpYWdsb2cuc2g6IEFsbG93IHNwZWNpZmljYXRpb24gb2YgbmN1cnNlcyBsb2NhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitbIGJhc2VkIG9uOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMy8zLzMvMTAzIF0KKworVGhpcyBwYXRjaCBzeW5jcyB1cCB3aXRoIHRoZSB3YXkgdGhlIG1lbnVjb25maWcgbmN1cnNlcyAvIGN1cnNlcworaXMgZGV0ZWN0ZWQgYW5kIHRoZSBIT1NUX0VYVFJBQ0ZMQUdTIHdvcmtzIGluIHRoZSBMaW51eCBrZXJuZWwKK2FuZCBpdCBhbGxvd3MgdGhlIG1lbnVjb25maWcgdG8gd29yayB3aXRoIGEgc3lzcm9vdCB2ZXJzaW9uCitvZiB0aGUgY3Vyc2VzIGxpYnJhcmllcy4KKworLS0tCisKK0luIHNvbWUgY3Jvc3MgYnVpbGQgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QgYnVpbGQKK2Vudmlyb25tZW50IGl0IHByb3ZpZGVzIGFuIG5jdXJzZXMgbGlicmFyeSB0aGF0IGlzIGNvbXBpbGVkCitkaWZmZXJlbnRseSB0aGFuIHRoZSBob3N0J3MgdmVyc2lvbi4gIFRoaXMgY2F1c2VzIGRpc3BsYXkgY29ycnVwdGlvbgorcHJvYmxlbXMgd2hlbiB0aGUgaG9zdCdzIGN1cnNlcyBpbmNsdWRlcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQoraW5jbHVkZXMgZnJvbSB0aGUgcHJvdmlkZWQgY29tcGlsZXIgYXJlIG92ZXJyaWRkZW4uICBUaGVyZSBpcyBhIHNlY29uZAorY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBjdXJzZXMgbGlicmFyaWVzIGF0IGFsbCBvbiB0aGUgaG9zdCBzeXN0ZW0gYW5kCittZW51Y29uZmlnIHdpbGwganVzdCBmYWlsIGVudGlyZWx5LgorCitUaGUgc29sdXRpb24gaXMgc2ltcGx5IHRvIGFsbG93IGFuIG92ZXJyaWRlIHZhcmlhYmxlIGluCitjaGVjay1seGRpYWxvZy5zaCBmb3IgZW52aXJvbm1lbnRzIHN1Y2ggYXMgdGhlIFlvY3RvIFByb2plY3QuICBBZGRpbmcKK2EgQ1JPU1NfQ1VSU0VTX0xJQiBhbmQgQ1JPU1NfQ1VSU0VTX0lOQyBzb2x2ZXMgdGhlIGlzc3VlIGFuZCBhbGxvd2luZworY29tcGlsaW5nIGFuZCBsaW5raW5nIGFnYWluc3QgdGhlIHJpZ2h0IGhlYWRlcnMgYW5kIGxpYnJhcmllcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KK2NjOiBNaWNoYWwgTWFyZWsgPG1tYXJla0BzdXNlLmN6PgorY2M6IGxpbnV4LWtidWlsZEB2Z2VyLmtlcm5lbC5vcmcKKy0tLQorIHNjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZSAgICAgICAgICB8ICAgIDIgKy0KKyBzY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggfCAgICA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCisrKysgYi9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gKK0BAIC00LDYgKzQsMTAgQEAKKyAjIFdoYXQgbGlicmFyeSB0byBsaW5rCisgbGRmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19MSUIiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19MSUIiCisrCQlleGl0CisrCWZpCisgCWZvciBleHQgaW4gc28gYSBkeWxpYiA7IGRvCisgCQlmb3IgbGliIGluIG5jdXJzZXN3IG5jdXJzZXMgY3Vyc2VzIDsgZG8KKyAJCQkkY2MgLXByaW50LWZpbGUtbmFtZT1saWIke2xpYn0uJHtleHR9IHwgZ3JlcCAtcSAvCitAQCAtMTksNiArMjMsMTAgQEAgbGRmbGFncygpCisgIyBXaGVyZSBpcyBuY3Vyc2VzLmg/CisgY2NmbGFncygpCisgeworKwlpZiBbIHgiJENST1NTX0NVUlNFU19JTkMiICE9IHggXTsgdGhlbgorKwkJZWNobyAiJENST1NTX0NVUlNFU19JTkMiCisrCQlleGl0CisrCWZpCisgCWlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuCisgCQllY2hvICctSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyAtRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IicKKyAJZWxpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVuCistLS0gYS9zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvTWFrZWZpbGUKKysrKyBiL3NjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9NYWtlZmlsZQorQEAgLTUsNyArNSw3IEBAIGNoZWNrLWx4ZGlhbG9nICA6PSAkKHNyY3RyZWUpLyQoc3JjKS9jaGUKKyAKKyAjIFVzZSByZXVyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlcyBzbyB3ZSBkbyBub3QgY2FsbCBnY2MgdW5sZXNzCisgIyB3ZSByZWFsbHkgbmVlZCB0byBkbyBzby4gKERvIG5vdCBjYWxsIGdjYyBhcyBwYXJ0IG9mIG1ha2UgbXJwcm9wZXIpCistSE9TVF9FWFRSQUNGTEFHUyA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1jY2ZsYWdzKQorK0hPU1RfRVhUUkFDRkxBR1MgKz0gJChzaGVsbCAkKENPTkZJR19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWNjZmxhZ3MpCisgSE9TVF9MT0FETElCRVMgICA9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1sZGZsYWdzICQoSE9TVENDKSkKKyAKKyBIT1NUX0VYVFJBQ0ZMQUdTICs9IC1ETE9DQUxFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM5Y2UzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9idXN5Ym94LXVkaGNwYy1ub19kZWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSA1MzYyNmNkMDZhM2VmMDVlZDg0N2RhZWE4MDJlZjBhYTk2NjFjYWE3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kZXJzIERhcmFuZGVyIDxhbmRlcnNAY2hhcmdlc3Rvcm0uc2U+CitEYXRlOiBUaHUsIDMgTm92IDIwMTEgMDg6NTE6MzEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gYnVzeWJveC11ZGhjcGMtbm9fZGVjb25maWcucGF0Y2gKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBhIG5ldyBvcHRpb24gLUQgdG8gdGhlIHVkaGNwYyBjbGllbnQgdGhhdCBhbGxvd3MgZm9yCitkaGNwIHJlbmV3YWwgdG8gb2NjdXIgd2l0aG91dCBoYXZpbmcgdG8gZG93biB0aGUgaW50ZXJmYWNlCitpbiB0aGUgcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogR3JlZyBNb2ZmYXR0IDxncmVnLm1vZmZhdHRAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCB0byBsYXRlc3QgQnVzeWJveCAxLjE3LjMKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOC40CitvcHRpb24gc3BlYyBpcyBjaGFuZ2VkCisKK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitVcGRhdGVkIHRvIEJ1c3lib3ggMS4xOS4zCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBEYXJhbmRlciA8YW5kZXJzQGNoYXJnZXN0b3JtLnNlPgorCitGaXhlZCBvcHRpb25zIC1iLCAtYSBhbmQgLVAuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CistLS0KKyBuZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogYnVzeWJveC0xLjIwLjIvbmV0d29ya2luZy91ZGhjcC9kaGNwYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIwLjIub3JpZy9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKKysrKyBidXN5Ym94LTEuMjAuMi9uZXR3b3JraW5nL3VkaGNwL2RoY3BjLmMKK0BAIC0yOSw2ICsyOSw5IEBACisgI2luY2x1ZGUgPG5ldHBhY2tldC9wYWNrZXQuaD4KKyAjaW5jbHVkZSA8bGludXgvZmlsdGVyLmg+CisgCisrLyogb3B0aW9uIHdoZXRoZXIgdG8gZG93biB0aGUgaW50ZXJmYWNlIHdoZW4gcmVjb25maWd1cmluZyAqLworK3N0YXRpYyBpbnQgYWxsb3dfZGVjb25maWcgPSAxOworKworIC8qICJzdHJ1Y3QgY2xpZW50X2NvbmZpZ190IGNsaWVudF9jb25maWciIGlzIGluIGJiX2NvbW1vbl9idWZzaXoxICovCisgCisgCitAQCAtODEsOCArODQsOSBAQCBlbnVtIHsKKyAJT1BUX3ggPSAxIDw8IDE4LAorIAlPUFRfZiA9IDEgPDwgMTksCisgCU9QVF9CID0gMSA8PCAyMCwKKysJT1BUX0QgPSAxIDw8IDIxLAorIC8qIFRoZSByZXN0IGhhcyB2YXJpYWJsZSBiaXQgcG9zaXRpb25zLCBuZWVkIHRvIGJlIGNsZXZlciAqLworLQlPUFRCSVRfQiA9IDIwLAorKwlPUFRCSVRfRCA9IDIxLAorIAlVU0VfRk9SX01NVSggICAgICAgICAgICAgT1BUQklUX2IsKQorIAlJRl9GRUFUVVJFX1VESENQQ19BUlBJTkcoT1BUQklUX2EsKQorIAlJRl9GRUFUVVJFX1VESENQX1BPUlQoICAgT1BUQklUX1AsKQorQEAgLTEwNDAsNyArMTA0NCw4IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1fcmVuZXcodm9pZCkKKyAJCXN0YXRlID0gUkVORVdfUkVRVUVTVEVEOworIAkJYnJlYWs7CisgCWNhc2UgUkVORVdfUkVRVUVTVEVEOiAvKiBpbXBhdGllbnQgYXJlIHdlPyBmaW5lLCBzcXVhcmUgMSAqLworLQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJCWlmIChhbGxvd19kZWNvbmZpZykKKysJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAljYXNlIFJFUVVFU1RJTkc6CisgCWNhc2UgUkVMRUFTRUQ6CisgCQljaGFuZ2VfbGlzdGVuX21vZGUoTElTVEVOX1JBVyk7CitAQCAtMTA2NCw3ICsxMDY5LDggQEAgc3RhdGljIHZvaWQgcGVyZm9ybV9yZWxlYXNlKHVpbnQzMl90IHNlcgorIAkJYmJfaW5mb19tc2coIlVuaWNhc3RpbmcgYSByZWxlYXNlIG9mICVzIHRvICVzIiwKKyAJCQkJaW5ldF9udG9hKHRlbXBfYWRkciksIGJ1ZmZlcik7CisgCQlzZW5kX3JlbGVhc2Uoc2VydmVyX2FkZHIsIHJlcXVlc3RlZF9pcCk7IC8qIHVuaWNhc3QgKi8KKy0JCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisrCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJfQorIAliYl9pbmZvX21zZygiRW50ZXJpbmcgcmVsZWFzZWQgc3RhdGUiKTsKKyAKK0BAIC0xMjE1LDcgKzEyMjEsNyBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCS8qIE8seDogbGlzdDsgLVQsLXQsLUEgdGFrZSBudW1lcmljIHBhcmFtICovCisgCW9wdF9jb21wbGVtZW50YXJ5ID0gIk86Ong6OlQrOnQrOkErIiBJRl9VREhDUF9WRVJCT1NFKCI6dnYiKSA7CisgCUlGX0xPTkdfT1BUUyhhcHBsZXRfbG9uZ19vcHRpb25zID0gdWRoY3BjX2xvbmdvcHRzOykKKy0Jb3B0ID0gZ2V0b3B0MzIoYXJndiwgIkNWOkg6aDpGOmk6bnA6cVJyOnM6VDp0OlNBOk86b3g6ZkIiCisrCW9wdCA9IGdldG9wdDMyKGFyZ3YsICJDVjpIOmg6RjppOm5wOnFScjpzOlQ6dDpTQTpPOm94OmZCRCIKKyAJCVVTRV9GT1JfTU1VKCJiIikKKyAJCUlGX0ZFQVRVUkVfVURIQ1BDX0FSUElORygiYSIpCisgCQlJRl9GRUFUVVJFX1VESENQX1BPUlQoIlA6IikKK0BAIC0xMzE2LDYgKzEzMjIsOSBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQlsb2dtb2RlIHw9IExPR01PREVfU1lTTE9HOworIAl9CisgCisrCWlmIChvcHQgJiBPUFRfRCkKKysJCWFsbG93X2RlY29uZmlnID0gMDsKKysKKyAJLyogTWFrZSBzdXJlIGZkIDAsMSwyIGFyZSBvcGVuICovCisgCWJiX3Nhbml0aXplX3N0ZGlvKCk7CisgCS8qIEVxdWl2YWxlbnQgb2YgZG9pbmcgYSBmZmx1c2ggYWZ0ZXIgZXZlcnkgXG4gKi8KK0BAIC0xMzMwLDcgKzEzMzksOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCXNyYW5kKG1vbm90b25pY191cygpKTsKKyAKKyAJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKKy0JdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKysJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJdWRoY3BfcnVuX3NjcmlwdChOVUxMLCAiZGVjb25maWciKTsKKyAJY2hhbmdlX2xpc3Rlbl9tb2RlKExJU1RFTl9SQVcpOworIAlwYWNrZXRfbnVtID0gMDsKKyAJdGltZW91dCA9IDA7CitAQCAtMTQ4NCw3ICsxNDk0LDggQEAgaW50IHVkaGNwY19tYWluKGludCBhcmdjIFVOVVNFRF9QQVJBTSwgYworIAkJCQl9CisgCQkJCS8qIFRpbWVkIG91dCwgZW50ZXIgaW5pdCBzdGF0ZSAqLworIAkJCQliYl9pbmZvX21zZygiTGVhc2UgbG9zdCwgZW50ZXJpbmcgaW5pdCBzdGF0ZSIpOworLQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQljbGllbnRfY29uZmlnLmZpcnN0X3NlY3MgPSAwOyAvKiBtYWtlIHNlY3MgZmllbGQgY291bnQgZnJvbSAwICovCisgCQkJCS8qdGltZW91dCA9IDA7IC0gYWxyZWFkeSBpcyAqLworQEAgLTE2NjcsNyArMTY3OCw4IEBAIGludCB1ZGhjcGNfbWFpbihpbnQgYXJnYyBVTlVTRURfUEFSQU0sIGMKKyAJCQkJCQlzZW5kX2RlY2xpbmUoLyp4aWQsKi8gc2VydmVyX2FkZHIsIHBhY2tldC55aWFkZHIpOworIAorIAkJCQkJCWlmIChzdGF0ZSAhPSBSRVFVRVNUSU5HKQorLQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJCQlpZiAoYWxsb3dfZGVjb25maWcpCisrCQkJCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworIAkJCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJCQlzdGF0ZSA9IElOSVRfU0VMRUNUSU5HOworIAkJCQkJCWNsaWVudF9jb25maWcuZmlyc3Rfc2VjcyA9IDA7IC8qIG1ha2Ugc2VjcyBmaWVsZCBjb3VudCBmcm9tIDAgKi8KK0BAIC0xNzExLDcgKzE3MjMsOCBAQCBpbnQgdWRoY3BjX21haW4oaW50IGFyZ2MgVU5VU0VEX1BBUkFNLCBjCisgCQkJCWJiX2luZm9fbXNnKCJSZWNlaXZlZCBESENQIE5BSyIpOworIAkJCQl1ZGhjcF9ydW5fc2NyaXB0KCZwYWNrZXQsICJuYWsiKTsKKyAJCQkJaWYgKHN0YXRlICE9IFJFUVVFU1RJTkcpCistCQkJCQl1ZGhjcF9ydW5fc2NyaXB0KE5VTEwsICJkZWNvbmZpZyIpOworKwkJCQkJaWYgKGFsbG93X2RlY29uZmlnKQorKwkJCQkJCXVkaGNwX3J1bl9zY3JpcHQoTlVMTCwgImRlY29uZmlnIik7CisgCQkJCWNoYW5nZV9saXN0ZW5fbW9kZShMSVNURU5fUkFXKTsKKyAJCQkJc2xlZXAoMyk7IC8qIGF2b2lkIGV4Y2Vzc2l2ZSBuZXR3b3JrIHRyYWZmaWMgKi8KKyAJCQkJc3RhdGUgPSBJTklUX1NFTEVDVElORzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9kZWZjb25maWcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNWRmOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZGVmY29uZmlnCkBAIC0wLDAgKzEsMTA1NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBCdXN5Ym94IHZlcnNpb246IDEuMjMuMgorIyBUaHUgSnVsIDMwIDExOjAwOjAwIDIwMTUKKyMKK0NPTkZJR19IQVZFX0RPVF9DT05GSUc9eQorCisjCisjIEJ1c3lib3ggU2V0dGluZ3MKKyMKKworIworIyBHZW5lcmFsIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0RFU0tUT1AgaXMgbm90IHNldAorIyBDT05GSUdfRVhUUkFfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOQ0xVREVfU1VTdjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNFX1BPUlRBQkxFX0NPREUgaXMgbm90IHNldAorQ09ORklHX1BMQVRGT1JNX0xJTlVYPXkKK0NPTkZJR19GRUFUVVJFX0JVRkZFUlNfVVNFX01BTExPQz15CisjIENPTkZJR19GRUFUVVJFX0JVRkZFUlNfR09fT05fU1RBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CVUZGRVJTX0dPX0lOX0JTUyBpcyBub3Qgc2V0CitDT05GSUdfU0hPV19VU0FHRT15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfVVNBR0U9eQorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9OT19VU1IgaXMgbm90IHNldAorIyBDT05GSUdfTE9DQUxFX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSUNPREVfVVNJTkdfTE9DQUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hFQ0tfVU5JQ09ERV9JTl9FTlYgaXMgbm90IHNldAorQ09ORklHX1NVQlNUX1dDSEFSPTAKK0NPTkZJR19MQVNUX1NVUFBPUlRFRF9XQ0hBUj0wCisjIENPTkZJR19VTklDT0RFX0NPTUJJTklOR19XQ0hBUlMgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9XSURFX1dDSEFSUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX0JJRElfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklDT0RFX05FVVRSQUxfVEFCTEUgaXMgbm90IHNldAorIyBDT05GSUdfVU5JQ09ERV9QUkVTRVJWRV9CUk9LRU4gaXMgbm90IHNldAorIyBDT05GSUdfUEFNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VTRV9TRU5ERklMRT15CitDT05GSUdfTE9OR19PUFRTPXkKK0NPTkZJR19GRUFUVVJFX0RFVlBUUz15CisjIENPTkZJR19GRUFUVVJFX0NMRUFOX1VQIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1VUTVA9eQorIyBDT05GSUdfRkVBVFVSRV9XVE1QIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1BJREZJTEU9eQorQ09ORklHX1BJRF9GSUxFX1BBVEg9Ii92YXIvcnVuIgorQ09ORklHX0ZFQVRVUkVfU1VJRD15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJRz15CitDT05GSUdfRkVBVFVSRV9TVUlEX0NPTkZJR19RVUlFVD15CisjIENPTkZJR19TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0FQUExFVFMgaXMgbm90IHNldAorQ09ORklHX0JVU1lCT1hfRVhFQ19QQVRIPSIvcHJvYy9zZWxmL2V4ZSIKK0NPTkZJR19GRUFUVVJFX1NZU0xPRz15CitDT05GSUdfRkVBVFVSRV9IQVZFX1JQQz15CisKKyMKKyMgQnVpbGQgT3B0aW9ucworIworIyBDT05GSUdfU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRSBpcyBub3Qgc2V0CisjIENPTkZJR19OT01NVSBpcyBub3Qgc2V0CisjIENPTkZJR19CVUlMRF9MSUJCVVNZQk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5ESVZJRFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIQVJFRF9CVVNZQk9YIGlzIG5vdCBzZXQKK0NPTkZJR19MRlM9eQorIyBDT05GSUdfQ1JPU1NfQ09NUElMRVJfUFJFRklYIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNST09UPSIiCisjIENPTkZJR19FWFRSQV9DRkxBR1MgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0xERkxBR1M9IiIKK0NPTkZJR19FWFRSQV9MRExJQlM9IiIKKworIworIyBEZWJ1Z2dpbmcgT3B0aW9ucworIworIyBDT05GSUdfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEVTU0lNSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVRfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19XRVJST1IgaXMgbm90IHNldAorQ09ORklHX05PX0RFQlVHX0xJQj15CisjIENPTkZJR19ETUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGRU5DRSBpcyBub3Qgc2V0CisKKyMKKyMgSW5zdGFsbGF0aW9uIE9wdGlvbnMgKCJtYWtlIGluc3RhbGwiIGJlaGF2aW9yKQorIworQ09ORklHX0lOU1RBTExfQVBQTEVUX1NZTUxJTktTPXkKKyMgQ09ORklHX0lOU1RBTExfQVBQTEVUX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX0FQUExFVF9TQ1JJUFRfV1JBUFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfSU5TVEFMTF9BUFBMRVRfRE9OVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlNUQUxMX1NIX0FQUExFVF9TWU1MSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX0hBUkRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTExfU0hfQVBQTEVUX1NDUklQVF9XUkFQUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVGSVg9Ii4vX2luc3RhbGwiCisKKyMKKyMgQnVzeWJveCBMaWJyYXJ5IFR1bmluZworIworQ09ORklHX0ZFQVRVUkVfU1lTVEVNRD15CitDT05GSUdfRkVBVFVSRV9SVE1JTk1BWD15CitDT05GSUdfUEFTU1dPUkRfTUlOTEVOPTYKK0NPTkZJR19NRDVfU01BTEw9MQorQ09ORklHX1NIQTNfU01BTEw9MQorQ09ORklHX0ZFQVRVUkVfRkFTVF9UT1A9eQorIyBDT05GSUdfRkVBVFVSRV9FVENfTkVUV09SS1MgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVVNFX1RFUk1JT1M9eQorQ09ORklHX0ZFQVRVUkVfRURJVElORz15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX01BWF9MRU49MTAyNAorIyBDT05GSUdfRkVBVFVSRV9FRElUSU5HX1ZJIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0VESVRJTkdfSElTVE9SWT0xNQorQ09ORklHX0ZFQVRVUkVfRURJVElOR19TQVZFSElTVE9SWT15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfU0FWRV9PTl9FWElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUkVWRVJTRV9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEFCX0NPTVBMRVRJT049eQorQ09ORklHX0ZFQVRVUkVfVVNFUk5BTUVfQ09NUExFVElPTj15CitDT05GSUdfRkVBVFVSRV9FRElUSU5HX0ZBTkNZX1BST01QVD15CisjIENPTkZJR19GRUFUVVJFX0VESVRJTkdfQVNLX1RFUk1JTkFMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX05PTl9QT1NJWF9DUD15CisjIENPTkZJR19GRUFUVVJFX1ZFUkJPU0VfQ1BfTUVTU0FHRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9DT1BZQlVGX0tCPTQKK0NPTkZJR19GRUFUVVJFX1NLSVBfUk9PVEZTPXkKK0NPTkZJR19NT05PVE9OSUNfU1lTQ0FMTD15CitDT05GSUdfSU9DVExfSEVYMlNUUl9FUlJPUj15CitDT05GSUdfRkVBVFVSRV9IV0lCPXkKKworIworIyBBcHBsZXRzCisjCisKKyMKKyMgQXJjaGl2YWwgVXRpbGl0aWVzCisjCitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19YWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19MWk1BPXkKK0NPTkZJR19GRUFUVVJFX1NFQU1MRVNTX0JaMj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19HWj15CitDT05GSUdfRkVBVFVSRV9TRUFNTEVTU19aPXkKK0NPTkZJR19BUj15CisjIENPTkZJR19GRUFUVVJFX0FSX0xPTkdfRklMRU5BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQVJfQ1JFQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOQ09NUFJFU1MgaXMgbm90IHNldAorQ09ORklHX0dVTlpJUD15CitDT05GSUdfQlVOWklQMj15CisjIENPTkZJR19VTkxaTUEgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MWk1BX0ZBU1QgaXMgbm90IHNldAorIyBDT05GSUdfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlhaIGlzIG5vdCBzZXQKKyMgQ09ORklHX1haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JaSVAyIGlzIG5vdCBzZXQKK0NPTkZJR19DUElPPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ1BJT19QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RQS0cgaXMgbm90IHNldAorIyBDT05GSUdfRFBLR19ERUIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EUEtHX0RFQl9FWFRSQUNUX09OTFkgaXMgbm90IHNldAorQ09ORklHX0daSVA9eQorIyBDT05GSUdfRkVBVFVSRV9HWklQX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfR1pJUF9GQVNUPTAKKyMgQ09ORklHX0xaT1AgaXMgbm90IHNldAorIyBDT05GSUdfTFpPUF9DT01QUl9ISUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQTSBpcyBub3Qgc2V0CisjIENPTkZJR19SUE0yQ1BJTyBpcyBub3Qgc2V0CitDT05GSUdfVEFSPXkKK0NPTkZJR19GRUFUVVJFX1RBUl9DUkVBVEU9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0FVVE9ERVRFQ1Q9eQorQ09ORklHX0ZFQVRVUkVfVEFSX0ZST009eQorQ09ORklHX0ZFQVRVUkVfVEFSX09MREdOVV9DT01QQVRJQklMSVRZPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX09MRFNVTl9DT01QQVRJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1RBUl9HTlVfRVhURU5TSU9OUz15CisjIENPTkZJR19GRUFUVVJFX1RBUl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UQVJfVE9fQ09NTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RBUl9VTkFNRV9HTkFNRSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9UQVJfTk9QUkVTRVJWRV9USU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVEFSX1NFTElOVVggaXMgbm90IHNldAorQ09ORklHX1VOWklQPXkKKworIworIyBDb3JldXRpbHMKKyMKK0NPTkZJR19CQVNFTkFNRT15CitDT05GSUdfQ0FUPXkKK0NPTkZJR19EQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfREFURV9JU09GTVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9EQVRFX05BTk8gaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfREFURV9DT01QQVQ9eQorIyBDT05GSUdfSE9TVElEIGlzIG5vdCBzZXQKK0NPTkZJR19JRD15CitDT05GSUdfR1JPVVBTPXkKK0NPTkZJR19TSFVGPXkKK0NPTkZJR19URVNUPXkKK0NPTkZJR19GRUFUVVJFX1RFU1RfNjQ9eQorQ09ORklHX1RPVUNIPXkKK0NPTkZJR19GRUFUVVJFX1RPVUNIX05PREVSRUY9eQorQ09ORklHX0ZFQVRVUkVfVE9VQ0hfU1VTVjM9eQorQ09ORklHX1RSPXkKK0NPTkZJR19GRUFUVVJFX1RSX0NMQVNTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9UUl9FUVVJViBpcyBub3Qgc2V0CitDT05GSUdfVU5MSU5LPXkKKyMgQ09ORklHX0JBU0U2NCBpcyBub3Qgc2V0CitDT05GSUdfV0hPPXkKK0NPTkZJR19VU0VSUz15CisjIENPTkZJR19DQUwgaXMgbm90IHNldAorIyBDT05GSUdfQ0FUViBpcyBub3Qgc2V0CitDT05GSUdfQ0hHUlA9eQorQ09ORklHX0NITU9EPXkKK0NPTkZJR19DSE9XTj15CisjIENPTkZJR19GRUFUVVJFX0NIT1dOX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfQ0hST09UPXkKKyMgQ09ORklHX0NLU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTU0gaXMgbm90IHNldAorQ09ORklHX0NQPXkKKyMgQ09ORklHX0ZFQVRVUkVfQ1BfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19DVVQ9eQorQ09ORklHX0REPXkKK0NPTkZJR19GRUFUVVJFX0REX1NJR05BTF9IQU5ETElORz15CisjIENPTkZJR19GRUFUVVJFX0REX1RISVJEX1NUQVRVU19MSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRERfSUJTX09CUyBpcyBub3Qgc2V0CitDT05GSUdfREY9eQorIyBDT05GSUdfRkVBVFVSRV9ERl9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfRElSTkFNRT15CisjIENPTkZJR19ET1MyVU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYMkRPUyBpcyBub3Qgc2V0CitDT05GSUdfRFU9eQorQ09ORklHX0ZFQVRVUkVfRFVfREVGQVVMVF9CTE9DS1NJWkVfMUs9eQorQ09ORklHX0VDSE89eQorQ09ORklHX0ZFQVRVUkVfRkFOQ1lfRUNITz15CitDT05GSUdfRU5WPXkKK0NPTkZJR19GRUFUVVJFX0VOVl9MT05HX09QVElPTlM9eQorIyBDT05GSUdfRVhQQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRVhQQU5EX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfRVhQUj15CitDT05GSUdfRVhQUl9NQVRIX1NVUFBPUlRfNjQ9eQorQ09ORklHX0ZBTFNFPXkKKyMgQ09ORklHX0ZPTEQgaXMgbm90IHNldAorIyBDT05GSUdfRlNZTkMgaXMgbm90IHNldAorQ09ORklHX0hFQUQ9eQorIyBDT05GSUdfRkVBVFVSRV9GQU5DWV9IRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOU1RBTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNUQUxMX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTE49eQorQ09ORklHX0xPR05BTUU9eQorQ09ORklHX0xTPXkKK0NPTkZJR19GRUFUVVJFX0xTX0ZJTEVUWVBFUz15CitDT05GSUdfRkVBVFVSRV9MU19GT0xMT1dMSU5LUz15CitDT05GSUdfRkVBVFVSRV9MU19SRUNVUlNJVkU9eQorQ09ORklHX0ZFQVRVUkVfTFNfU09SVEZJTEVTPXkKK0NPTkZJR19GRUFUVVJFX0xTX1RJTUVTVEFNUFM9eQorQ09ORklHX0ZFQVRVUkVfTFNfVVNFUk5BTUU9eQorQ09ORklHX0ZFQVRVUkVfTFNfQ09MT1I9eQorIyBDT05GSUdfRkVBVFVSRV9MU19DT0xPUl9JU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19NRDVTVU09eQorQ09ORklHX01LRElSPXkKK0NPTkZJR19GRUFUVVJFX01LRElSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfTUtGSUZPPXkKK0NPTkZJR19NS05PRD15CitDT05GSUdfTVY9eQorIyBDT05GSUdfRkVBVFVSRV9NVl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTklDRSBpcyBub3Qgc2V0CitDT05GSUdfTk9IVVA9eQorQ09ORklHX09EPXkKKyMgQ09ORklHX1BSSU5URU5WIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEY9eQorQ09ORklHX1BXRD15CitDT05GSUdfUkVBRExJTks9eQorQ09ORklHX0ZFQVRVUkVfUkVBRExJTktfRk9MTE9XPXkKK0NPTkZJR19SRUFMUEFUSD15CitDT05GSUdfUk09eQorQ09ORklHX1JNRElSPXkKKyMgQ09ORklHX0ZFQVRVUkVfUk1ESVJfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19TRVE9eQorIyBDT05GSUdfU0hBMVNVTSBpcyBub3Qgc2V0CisjIENPTkZJR19TSEEyNTZTVU0gaXMgbm90IHNldAorIyBDT05GSUdfU0hBNTEyU1VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQTNTVU0gaXMgbm90IHNldAorQ09ORklHX1NMRUVQPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1NMRUVQPXkKKyMgQ09ORklHX0ZFQVRVUkVfRkxPQVRfU0xFRVAgaXMgbm90IHNldAorQ09ORklHX1NPUlQ9eQorQ09ORklHX0ZFQVRVUkVfU09SVF9CSUc9eQorIyBDT05GSUdfU1BMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TUExJVF9GQU5DWSBpcyBub3Qgc2V0CitDT05GSUdfU1RBVD15CitDT05GSUdfRkVBVFVSRV9TVEFUX0ZPUk1BVD15CitDT05GSUdfU1RUWT15CisjIENPTkZJR19TVU0gaXMgbm90IHNldAorQ09ORklHX1NZTkM9eQorIyBDT05GSUdfVEFDIGlzIG5vdCBzZXQKK0NPTkZJR19UQUlMPXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1RBSUw9eQorQ09ORklHX1RFRT15CisjIENPTkZJR19GRUFUVVJFX1RFRV9VU0VfQkxPQ0tfSU8gaXMgbm90IHNldAorQ09ORklHX1RSVUU9eQorQ09ORklHX1RUWT15CitDT05GSUdfVU5BTUU9eQorIyBDT05GSUdfVU5FWFBBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9VTkVYUEFORF9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX1VOSVE9eQorQ09ORklHX1VTTEVFUD15CisjIENPTkZJR19VVURFQ09ERSBpcyBub3Qgc2V0CisjIENPTkZJR19VVUVOQ09ERSBpcyBub3Qgc2V0CitDT05GSUdfV0M9eQorIyBDT05GSUdfRkVBVFVSRV9XQ19MQVJHRSBpcyBub3Qgc2V0CitDT05GSUdfV0hPQU1JPXkKK0NPTkZJR19ZRVM9eQorCisjCisjIENvbW1vbiBvcHRpb25zCisjCitDT05GSUdfRkVBVFVSRV9WRVJCT1NFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgY3AgYW5kIG12CisjCisjIENPTkZJR19GRUFUVVJFX1BSRVNFUlZFX0hBUkRMSU5LUyBpcyBub3Qgc2V0CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGxzLCBtb3JlIGFuZCB0ZWxuZXQKKyMKK0NPTkZJR19GRUFUVVJFX0FVVE9XSURUSD15CisKKyMKKyMgQ29tbW9uIG9wdGlvbnMgZm9yIGRmLCBkdSwgbHMKKyMKK0NPTkZJR19GRUFUVVJFX0hVTUFOX1JFQURBQkxFPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbWQ1c3VtLCBzaGExc3VtLCBzaGEyNTZzdW0sIHNoYTUxMnN1bSwgc2hhM3N1bQorIworQ09ORklHX0ZFQVRVUkVfTUQ1X1NIQTFfU1VNX0NIRUNLPXkKKworIworIyBDb25zb2xlIFV0aWxpdGllcworIworQ09ORklHX0NIVlQ9eQorIyBDT05GSUdfRkdDT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19DTEVBUj15CitDT05GSUdfREVBTExPQ1ZUPXkKK0NPTkZJR19EVU1QS01BUD15CisjIENPTkZJR19LQkRfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfTE9BREZPTlQ9eQorQ09ORklHX0xPQURLTUFQPXkKK0NPTkZJR19PUEVOVlQ9eQorQ09ORklHX1JFU0VUPXkKKyMgQ09ORklHX1JFU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JFU0laRV9QUklOVCBpcyBub3Qgc2V0CitDT05GSUdfU0VUQ09OU09MRT15CisjIENPTkZJR19GRUFUVVJFX1NFVENPTlNPTEVfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFVEZPTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRVRGT05UX1RFWFRVQUxfTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFVEZPTlRfRElSPSIiCisjIENPTkZJR19TRVRLRVlDT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRMT0dDT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIT1dLRVkgaXMgbm90IHNldAorCisjCisjIENvbW1vbiBvcHRpb25zIGZvciBsb2FkZm9udCBhbmQgc2V0Zm9udAorIworIyBDT05GSUdfRkVBVFVSRV9MT0FERk9OVF9QU0YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTE9BREZPTlRfUkFXIGlzIG5vdCBzZXQKKworIworIyBEZWJpYW4gVXRpbGl0aWVzCisjCitDT05GSUdfTUtURU1QPXkKKyMgQ09ORklHX1BJUEVfUFJPR1JFU1MgaXMgbm90IHNldAorQ09ORklHX1JVTl9QQVJUUz15CitDT05GSUdfRkVBVFVSRV9SVU5fUEFSVFNfTE9OR19PUFRJT05TPXkKKyMgQ09ORklHX0ZFQVRVUkVfUlVOX1BBUlRTX0ZBTkNZIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFSVF9TVE9QX0RBRU1PTj15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9GQU5DWT15CitDT05GSUdfRkVBVFVSRV9TVEFSVF9TVE9QX0RBRU1PTl9MT05HX09QVElPTlM9eQorQ09ORklHX1dISUNIPXkKKworIworIyBFZGl0b3JzCisjCitDT05GSUdfQVdLPXkKK0NPTkZJR19GRUFUVVJFX0FXS19MSUJNPXkKK0NPTkZJR19GRUFUVVJFX0FXS19HTlVfRVhURU5TSU9OUz15CitDT05GSUdfQ01QPXkKK0NPTkZJR19ESUZGPXkKKyMgQ09ORklHX0ZFQVRVUkVfRElGRl9MT05HX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRElGRl9ESVI9eQorIyBDT05GSUdfRUQgaXMgbm90IHNldAorQ09ORklHX1BBVENIPXkKK0NPTkZJR19TRUQ9eQorQ09ORklHX1ZJPXkKK0NPTkZJR19GRUFUVVJFX1ZJX01BWF9MRU49MTAyNAorQ09ORklHX0ZFQVRVUkVfVklfOEJJVD15CitDT05GSUdfRkVBVFVSRV9WSV9DT0xPTj15CitDT05GSUdfRkVBVFVSRV9WSV9ZQU5LTUFSSz15CitDT05GSUdfRkVBVFVSRV9WSV9TRUFSQ0g9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9SRUdFWF9TRUFSQ0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVVNFX1NJR05BTFM9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9ET1RfQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WSV9TRVRPUFRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVklfU0VUIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1ZJX1dJTl9SRVNJWkU9eQorIyBDT05GSUdfRkVBVFVSRV9WSV9BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVklfVU5ETz15CitDT05GSUdfRkVBVFVSRV9WSV9VTkRPX1FVRVVFPXkKK0NPTkZJR19GRUFUVVJFX1ZJX1VORE9fUVVFVUVfTUFYPTI1NgorQ09ORklHX0ZFQVRVUkVfQUxMT1dfRVhFQz15CisKKyMKKyMgRmluZGluZyBVdGlsaXRpZXMKKyMKK0NPTkZJR19GSU5EPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUFJJTlQwPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTVRJTUU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9NTUlOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUEVSTT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1RZUEU9eQorQ09ORklHX0ZFQVRVUkVfRklORF9YREVWPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfTUFYREVQVEg9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ORVdFUj15CisjIENPTkZJR19GRUFUVVJFX0ZJTkRfSU5VTSBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GSU5EX0VYRUM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9FWEVDX1BMVVM9eQorQ09ORklHX0ZFQVRVUkVfRklORF9VU0VSPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfR1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfRklORF9OT1Q9eQorQ09ORklHX0ZFQVRVUkVfRklORF9ERVBUSD15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BBUkVOPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfU0laRT15CitDT05GSUdfRkVBVFVSRV9GSU5EX1BSVU5FPXkKKyMgQ09ORklHX0ZFQVRVUkVfRklORF9ERUxFVEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfRklORF9QQVRIPXkKK0NPTkZJR19GRUFUVVJFX0ZJTkRfUkVHRVg9eQorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0NPTlRFWFQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GSU5EX0xJTktTIGlzIG5vdCBzZXQKK0NPTkZJR19HUkVQPXkKK0NPTkZJR19GRUFUVVJFX0dSRVBfRUdSRVBfQUxJQVM9eQorQ09ORklHX0ZFQVRVUkVfR1JFUF9GR1JFUF9BTElBUz15CitDT05GSUdfRkVBVFVSRV9HUkVQX0NPTlRFWFQ9eQorQ09ORklHX1hBUkdTPXkKKyMgQ09ORklHX0ZFQVRVUkVfWEFSR1NfU1VQUE9SVF9DT05GSVJNQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9YQVJHU19TVVBQT1JUX1FVT1RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfVEVSTU9QVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfWkVST19URVJNIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1hBUkdTX1NVUFBPUlRfUkVQTF9TVFI9eQorCisjCisjIEluaXQgVXRpbGl0aWVzCisjCisjIENPTkZJR19CT09UQ0hBUlREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQk9PVENIQVJURF9CTE9BVEVEX0hFQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JPT1RDSEFSVERfQ09ORklHX0ZJTEUgaXMgbm90IHNldAorQ09ORklHX0hBTFQ9eQorIyBDT05GSUdfRkVBVFVSRV9DQUxMX1RFTElOSVQgaXMgbm90IHNldAorQ09ORklHX1RFTElOSVRfUEFUSD0iIgorIyBDT05GSUdfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VTRV9JTklUVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfS0lMTF9SRU1PVkVEIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0tJTExfREVMQVk9MAorIyBDT05GSUdfRkVBVFVSRV9JTklUX1NDVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVF9TWVNMT0cgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9FWFRSQV9RVUlFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOSVRfQ09SRURVTVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUX1RFUk1JTkFMX1RZUEU9IiIKK0NPTkZJR19NRVNHPXkKKyMgQ09ORklHX0ZFQVRVUkVfTUVTR19FTkFCTEVfT05MWV9HUk9VUCBpcyBub3Qgc2V0CisKKyMKKyMgTG9naW4vUGFzc3dvcmQgTWFuYWdlbWVudCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0FERF9TSEVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRU1PVkVfU0hFTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSEFET1dQQVNTV0RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9QV0RfR1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9CQl9TSEFET1cgaXMgbm90IHNldAorQ09ORklHX1VTRV9CQl9DUllQVD15CisjIENPTkZJR19VU0VfQkJfQ1JZUFRfU0hBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FERFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIRUNLX05BTUVTIGlzIG5vdCBzZXQKK0NPTkZJR19MQVNUX0lEPTYwMDAwCitDT05GSUdfRklSU1RfU1lTVEVNX0lEPTEwMAorQ09ORklHX0xBU1RfU1lTVEVNX0lEPTk5OQorIyBDT05GSUdfQURER1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERHUk9VUF9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9BRERVU0VSX1RPX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFTFVTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVMR1JPVVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9ERUxfVVNFUl9GUk9NX0dST1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lOX1NFU1NJT05fQVNfQ0hJTEQgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSU5fU0NSSVBUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05PTE9HSU4gaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TRUNVUkVUVFkgaXMgbm90IHNldAorIyBDT05GSUdfUEFTU1dEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUEFTU1dEX1dFQUtfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRQVyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFBBU1NXRCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9ERUZBVUxUX1BBU1NXRF9BTEdPPSIiCisjIENPTkZJR19TVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX1NZU0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVX0NIRUNLU19TSEVMTFMgaXMgbm90IHNldAorIyBDT05GSUdfU1VMT0dJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggRXh0MiBGUyBQcm9ncworIworQ09ORklHX0NIQVRUUj15CitDT05GSUdfRlNDSz15CisjIENPTkZJR19MU0FUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVFVORTJGUyBpcyBub3Qgc2V0CisKKyMKKyMgTGludXggTW9kdWxlIFV0aWxpdGllcworIworIyBDT05GSUdfTU9ESU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RQUk9CRV9TTUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX09QVElPTlNfT05fQ01ETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX1NNQUxMX0NIRUNLX0FMUkVBRFlfTE9BREVEIGlzIG5vdCBzZXQKK0NPTkZJR19JTlNNT0Q9eQorQ09ORklHX1JNTU9EPXkKK0NPTkZJR19MU01PRD15CisjIENPTkZJR19GRUFUVVJFX0xTTU9EX1BSRVRUWV8yXzZfT1VUUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RQUk9CRT15CisjIENPTkZJR19GRUFUVVJFX01PRFBST0JFX0JMQUNLTElTVCBpcyBub3Qgc2V0CitDT05GSUdfREVQTU9EPXkKKworIworIyBPcHRpb25zIGNvbW1vbiB0byBtdWx0aXBsZSBtb2R1dGlscworIworIyBDT05GSUdfRkVBVFVSRV8yXzRfTU9EVUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9UUllfTU1BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9WRVJTSU9OX0NIRUNLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5TTU9EX0tTWU1PT1BTX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTlNNT0RfTE9BRElOS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lOU01PRF9MT0FEX01BUF9GVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NIRUNLX1RBSU5URURfTU9EVUxFPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX0FMSUFTPXkKK0NPTkZJR19GRUFUVVJFX01PRFVUSUxTX1NZTUJPTFM9eQorQ09ORklHX0RFRkFVTFRfTU9EVUxFU19ESVI9Ii9saWIvbW9kdWxlcyIKK0NPTkZJR19ERUZBVUxUX0RFUE1PRF9GSUxFPSJtb2R1bGVzLmRlcCIKKworIworIyBMaW51eCBTeXN0ZW0gVXRpbGl0aWVzCisjCisjIENPTkZJR19CTE9DS0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19GQVRBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19GU1RSSU09eQorIyBDT05GSUdfTURFViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01ERVZfUkVOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9SRU5BTUVfUkVHRVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9FWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTURFVl9MT0FEX0ZJUk1XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFViBpcyBub3Qgc2V0CisjIENPTkZJR19BQ1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0FDUElEX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JMS0lEX1RZUEUgaXMgbm90IHNldAorQ09ORklHX0RNRVNHPXkKK0NPTkZJR19GRUFUVVJFX0RNRVNHX1BSRVRUWT15CitDT05GSUdfRkJTRVQ9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfRkFOQ1k9eQorQ09ORklHX0ZFQVRVUkVfRkJTRVRfUkVBRE1PREU9eQorIyBDT05GSUdfRkRGTFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19GREZPUk1BVCBpcyBub3Qgc2V0CitDT05GSUdfRkRJU0s9eQorIyBDT05GSUdfRkRJU0tfU1VQUE9SVF9MQVJHRV9ESVNLUyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9GRElTS19XUklUQUJMRT15CisjIENPTkZJR19GRUFUVVJFX0FJWF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NHSV9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NVTl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX09TRl9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0dQVF9MQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZESVNLX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJTkRGUyBpcyBub3Qgc2V0CitDT05GSUdfRkxPQ0s9eQorIyBDT05GSUdfRlJFRVJBTURJU0sgaXMgbm90IHNldAorIyBDT05GSUdfRlNDS19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX0VYVDIgaXMgbm90IHNldAorIyBDT05GSUdfTUtGU19NSU5JWCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01JTklYMiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1JFSVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19NS0ZTX1ZGQVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VUT1BUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkcgaXMgbm90IHNldAorQ09ORklHX0hFWERVTVA9eQorIyBDT05GSUdfRkVBVFVSRV9IRVhEVU1QX1JFVkVSU0UgaXMgbm90IHNldAorIyBDT05GSUdfSEQgaXMgbm90IHNldAorQ09ORklHX0hXQ0xPQ0s9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19MT05HX09QVElPTlM9eQorQ09ORklHX0ZFQVRVUkVfSFdDTE9DS19BREpUSU1FX0ZIUz15CisjIENPTkZJR19JUENSTSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENTIGlzIG5vdCBzZXQKK0NPTkZJR19MT1NFVFVQPXkKKyMgQ09ORklHX0xTUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19NS1NXQVA9eQorIyBDT05GSUdfRkVBVFVSRV9NS1NXQVBfVVVJRCBpcyBub3Qgc2V0CitDT05GSUdfTU9SRT15CitDT05GSUdfTU9VTlQ9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTU9VTlRfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01PVU5UX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9MQUJFTCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9NT1VOVF9ORlM9eQorIyBDT05GSUdfRkVBVFVSRV9NT1VOVF9DSUZTIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZMQUdTPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0ZTVEFCPXkKK0NPTkZJR19QSVZPVF9ST09UPXkKK0NPTkZJR19SREFURT15CisjIENPTkZJR19SREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQURQUk9GSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ1dBS0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NSSVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDUklQVFJFUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRBUkNIIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQT05PRkY9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX0RJU0NBUkQ9eQorQ09ORklHX0ZFQVRVUkVfU1dBUE9OX1BSST15CitDT05GSUdfU1dJVENIX1JPT1Q9eQorQ09ORklHX1VNT1VOVD15CitDT05GSUdfRkVBVFVSRV9VTU9VTlRfQUxMPXkKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgbW91bnQvdW1vdW50CisjCitDT05GSUdfRkVBVFVSRV9NT1VOVF9MT09QPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xPT1BfQ1JFQVRFPXkKKyMgQ09ORklHX0ZFQVRVUkVfTVRBQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZPTFVNRUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfQlRSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWEZBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX0YyRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9IRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9JU085NjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfSkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTElOVVhTV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTFVLUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX05JTEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfTlRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX09DRlMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfUkVJU0VSRlMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9ST01GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1lTViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1VERiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1ZPTFVNRUlEX1hGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0NPTlNQWSBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NST05EX0QgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DUk9ORF9DQUxMX1NFTkRNQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0NST05EX0RJUj0iIgorQ09ORklHX0xFU1M9eQorQ09ORklHX0ZFQVRVUkVfTEVTU19NQVhMSU5FUz05OTk5OTk5CitDT05GSUdfRkVBVFVSRV9MRVNTX0JSQUNLRVRTPXkKK0NPTkZJR19GRUFUVVJFX0xFU1NfRkxBR1M9eQorIyBDT05GSUdfRkVBVFVSRV9MRVNTX01BUktTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19SRUdFWFAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX1dJTkNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTEVTU19BU0tfVEVSTUlOQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0RBU0hDTUQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MRVNTX0xJTkVOVU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTkRXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU5ERFVNUCBpcyBub3Qgc2V0CitDT05GSUdfUkZLSUxMPXkKKyMgQ09ORklHX1NFVFNFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEFTS1NFVF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19VQklBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVUJJREVUQUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSU1LVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJNVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVJTVk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VCSVVQREFURVZPTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FESlRJTUVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JCQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ09NUFJFU1NfQkJDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfQkVFUCBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9CRUVQX0ZSRVE9MAorQ09ORklHX0ZFQVRVUkVfQkVFUF9MRU5HVEhfTVM9MAorIyBDT05GSUdfQ0hBVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfTk9GQUlMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9UVFlfSElGSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfSU1QTElDSVRfQ1IgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9DSEFUX1NXQUxMT1dfT1BUUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0NIQVRfU0VORF9FU0NBUEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9WQVJfQUJPUlRfTEVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hBVF9DTFJfQUJPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUk9OVEFCIGlzIG5vdCBzZXQKK0NPTkZJR19EQz15CisjIENPTkZJR19GRUFUVVJFX0RDX0xJQk0gaXMgbm90IHNldAorIyBDT05GSUdfREVWRlNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9NT0RMT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVkZTRF9GR19OUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZGU0RfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0RFVkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVk1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19FSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0VKRUNUX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfRkJTUExBU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkxBU0hDUCBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZMQVNIX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19GTEFTSF9FUkFTRUFMTCBpcyBub3Qgc2V0CisjIENPTkZJR19JT05JQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWUQgaXMgbm90IHNldAorIyBDT05GSUdfTEFTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0xBU1RfU01BTEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9MQVNUX0ZBTkNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hEUEFSTSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9HRVRfSURFTlRJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19TQ0FOX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19VTlJFR0lTVEVSX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19EUklWRV9SRVNFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hEUEFSTV9IRElPX1RSSVNUQVRFX0hXSUYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IRFBBUk1fSERJT19HRVRTRVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BS0VERVZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTUFLRURFVlNfTEVBRiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX01BS0VERVZTX1RBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BTiBpcyBub3Qgc2V0CitDT05GSUdfTUlDUk9DT009eQorIyBDT05GSUdfTU9VTlRQT0lOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQUlEQVVUT1JVTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFEQUhFQUQgaXMgbm90IHNldAorIyBDT05GSUdfUlVOTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfUlggaXMgbm90IHNldAorIyBDT05GSUdfU0VUU0lEIGlzIG5vdCBzZXQKK0NPTkZJR19TVFJJTkdTPXkKK0NPTkZJR19USU1FPXkKKyMgQ09ORklHX1RJTUVPVVQgaXMgbm90IHNldAorIyBDT05GSUdfVFRZU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19WT0xOQU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nIFV0aWxpdGllcworIworIyBDT05GSUdfTkFNRUlGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkFNRUlGX0VYVEVOREVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05CRENMSUVOVCBpcyBub3Qgc2V0CitDT05GSUdfTkM9eQorIyBDT05GSUdfTkNfU0VSVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DX0VYVFJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DXzExMF9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX1BJTkc9eQorQ09ORklHX1BJTkc2PXkKK0NPTkZJR19GRUFUVVJFX0ZBTkNZX1BJTkc9eQorIyBDT05GSUdfV0hPSVMgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfSVBWNj15CisjIENPTkZJR19GRUFUVVJFX1VOSVhfTE9DQUwgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfUFJFRkVSX0lQVjRfQUREUkVTUz15CisjIENPTkZJR19WRVJCT1NFX1JFU09MVVRJT05fRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQlJDVEwgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CUkNUTF9GQU5DWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0JSQ1RMX1NIT1cgaXMgbm90IHNldAorIyBDT05GSUdfRE5TRCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhFUl9XQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBS0VJREVOVEQgaXMgbm90IHNldAorIyBDT05GSUdfRlRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUF9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0ZUUERfQUNDRVBUX0JST0tFTl9MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfRlRQX0FVVEhFTlRJQ0FUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUEdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GVFBQVVQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9GVFBHRVRQVVRfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19IT1NUTkFNRT15CisjIENPTkZJR19IVFRQRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX1NFVFVJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0JBU0lDX0FVVEggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9BVVRIX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NHSSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0NPTkZJR19XSVRIX1NDUklQVF9JTlRFUlBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfU0VUX1JFTU9URV9QT1JUX1RPX0VOViBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0VOQ09ERV9VUkxfU1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSFRUUERfRVJST1JfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9IVFRQRF9QUk9YWSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0hUVFBEX0daSVAgaXMgbm90IHNldAorQ09ORklHX0lGQ09ORklHPXkKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NUQVRVUz15CisjIENPTkZJR19GRUFUVVJFX0lGQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JRkNPTkZJR19NRU1TVEFSVF9JT0FERFJfSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX0lGQ09ORklHX0hXPXkKKyMgQ09ORklHX0ZFQVRVUkVfSUZDT05GSUdfQlJPQURDQVNUX1BMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSUZFTlNMQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lGUExVR0QgaXMgbm90IHNldAorQ09ORklHX0lGVVBET1dOPXkKK0NPTkZJR19JRlVQRE9XTl9JRlNUQVRFX1BBVEg9Ii92YXIvcnVuL2lmc3RhdGUiCisjIENPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBfQlVJTFRJTiBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9JRkNPTkZJR19CVUlMVElOPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0lQVjQ9eQorQ09ORklHX0ZFQVRVUkVfSUZVUERPV05fSVBWNj15CitDT05GSUdfRkVBVFVSRV9JRlVQRE9XTl9NQVBQSU5HPXkKK0NPTkZJR19GRUFUVVJFX0lGVVBET1dOX0VYVEVSTkFMX0RIQ1A9eQorIyBDT05GSUdfSU5FVEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fRUNITyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9ESVNDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfU1VQUE9SVF9CVUlMVElOX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JTkVURF9TVVBQT1JUX0JVSUxUSU5fREFZVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lORVREX1NVUFBPUlRfQlVJTFRJTl9DSEFSR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSU5FVERfUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19JUD15CitDT05GSUdfRkVBVFVSRV9JUF9BRERSRVNTPXkKK0NPTkZJR19GRUFUVVJFX0lQX0xJTks9eQorQ09ORklHX0ZFQVRVUkVfSVBfUk9VVEU9eQorQ09ORklHX0ZFQVRVUkVfSVBfVFVOTkVMPXkKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX0lQX1NIT1JUX0ZPUk1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfSVBfUkFSRV9QUk9UT0NPTFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBBRERSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQUlVMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUENBTEMgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfRkFOQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9JUENBTENfTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRTVEFUPXkKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9XSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfTkVUU1RBVF9QUkcgaXMgbm90IHNldAorQ09ORklHX05TTE9PS1VQPXkKKyMgQ09ORklHX05UUEQgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9OVFBEX1NFUlZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX05UUERfQ09ORiBpcyBub3Qgc2V0CisjIENPTkZJR19QU0NBTiBpcyBub3Qgc2V0CitDT05GSUdfUk9VVEU9eQorIyBDT05GSUdfU0xBVFRBQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVENQU1ZEIGlzIG5vdCBzZXQKK0NPTkZJR19URUxORVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URUxORVRfVFRZUEUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfVEVMTkVUX0FVVE9MT0dJTj15CisjIENPTkZJR19URUxORVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVEVMTkVURF9JTkVURF9XQUlUIGlzIG5vdCBzZXQKK0NPTkZJR19URlRQPXkKKyMgQ09ORklHX1RGVFBEIGlzIG5vdCBzZXQKKworIworIyBDb21tb24gb3B0aW9ucyBmb3IgdGZ0cC90ZnRwZAorIworQ09ORklHX0ZFQVRVUkVfVEZUUF9HRVQ9eQorQ09ORklHX0ZFQVRVUkVfVEZUUF9QVVQ9eQorIyBDT05GSUdfRkVBVFVSRV9URlRQX0JMT0NLU0laRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RGVFBfUFJPR1JFU1NfQkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RGVFBfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1RSQUNFUk9VVEU9eQorIyBDT05GSUdfVFJBQ0VST1VURTYgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9UUkFDRVJPVVRFX1NPVVJDRV9ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RSQUNFUk9VVEVfVVNFX0lDTVAgaXMgbm90IHNldAorIyBDT05GSUdfVFVOQ1RMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVFVOQ1RMX1VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VESENQQzYgaXMgbm90IHNldAorQ09ORklHX1VESENQRD15CisjIENPTkZJR19ESENQUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0RVTVBMRUFTRVM9eQorIyBDT05GSUdfRkVBVFVSRV9VREhDUERfV1JJVEVfTEVBU0VTX0VBUkxZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BEX0JBU0VfSVBfT05fTUFDIGlzIG5vdCBzZXQKK0NPTkZJR19ESENQRF9MRUFTRVNfRklMRT0iL3Zhci9saWIvbWlzYy91ZGhjcGQubGVhc2VzIgorQ09ORklHX1VESENQQz15CitDT05GSUdfRkVBVFVSRV9VREhDUENfQVJQSU5HPXkKK0NPTkZJR19GRUFUVVJFX1VESENQQ19TQU5JVElaRU9QVD15CisjIENPTkZJR19GRUFUVVJFX1VESENQX1BPUlQgaXMgbm90IHNldAorQ09ORklHX1VESENQX0RFQlVHPTAKKyMgQ09ORklHX0ZFQVRVUkVfVURIQ1BfUkZDMzM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1VESENQXzgwMjFRIGlzIG5vdCBzZXQKK0NPTkZJR19VREhDUENfREVGQVVMVF9TQ1JJUFQ9Ii91c3Ivc2hhcmUvdWRoY3BjL2RlZmF1bHQuc2NyaXB0IgorQ09ORklHX1VESENQQ19TTEFDS19GT1JfQlVHR1lfU0VSVkVSUz04MAorQ09ORklHX0lGVVBET1dOX1VESENQQ19DTURfT1BUSU9OUz0iLVIgLW4iCisjIENPTkZJR19VRFBTVkQgaXMgbm90IHNldAorIyBDT05GSUdfVkNPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfV0dFVD15CitDT05GSUdfRkVBVFVSRV9XR0VUX1NUQVRVU0JBUj15CitDT05GSUdfRkVBVFVSRV9XR0VUX0FVVEhFTlRJQ0FUSU9OPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfTE9OR19PUFRJT05TPXkKK0NPTkZJR19GRUFUVVJFX1dHRVRfVElNRU9VVD15CisjIENPTkZJR19aQ0lQIGlzIG5vdCBzZXQKKworIworIyBQcmludCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX0xQRCBpcyBub3Qgc2V0CisjIENPTkZJR19MUFIgaXMgbm90IHNldAorIyBDT05GSUdfTFBRIGlzIG5vdCBzZXQKKworIworIyBNYWlsIFV0aWxpdGllcworIworIyBDT05GSUdfTUFLRU1JTUUgaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfTUlNRV9DSEFSU0VUPSIiCisjIENPTkZJR19QT1BNQUlMRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUE9QTUFJTERJUl9ERUxJVkVSWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUZPUk1JTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9SRUZPUk1JTUVfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTkRNQUlMIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzIFV0aWxpdGllcworIworIyBDT05GSUdfSU9TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTT0YgaXMgbm90IHNldAorIyBDT05GSUdfTVBTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NRVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BTVFJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19QV0RYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNRU1DQVAgaXMgbm90IHNldAorQ09ORklHX1RPUD15CitDT05GSUdfRkVBVFVSRV9UT1BfQ1BVX1VTQUdFX1BFUkNFTlRBR0U9eQorQ09ORklHX0ZFQVRVUkVfVE9QX0NQVV9HTE9CQUxfUEVSQ0VOVFM9eQorIyBDT05GSUdfRkVBVFVSRV9UT1BfU01QX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9ERUNJTUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUF9TTVBfUFJPQ0VTUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1RPUE1FTSBpcyBub3Qgc2V0CitDT05GSUdfVVBUSU1FPXkKKyMgQ09ORklHX0ZFQVRVUkVfVVBUSU1FX1VUTVBfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRlJFRT15CitDT05GSUdfRlVTRVI9eQorQ09ORklHX0tJTEw9eQorQ09ORklHX0tJTExBTEw9eQorIyBDT05GSUdfS0lMTEFMTDUgaXMgbm90IHNldAorIyBDT05GSUdfUEdSRVAgaXMgbm90IHNldAorQ09ORklHX1BJRE9GPXkKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfU0lOR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUElET0ZfT01JVCBpcyBub3Qgc2V0CisjIENPTkZJR19QS0lMTCBpcyBub3Qgc2V0CitDT05GSUdfUFM9eQorQ09ORklHX0ZFQVRVUkVfUFNfV0lERT15CitDT05GSUdfRkVBVFVSRV9QU19MT05HPXkKKyMgQ09ORklHX0ZFQVRVUkVfUFNfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX0FERElUSU9OQUxfQ09MVU1OUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1BTX1VOVVNVQUxfU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfUkVOSUNFPXkKK0NPTkZJR19CQl9TWVNDVEw9eQorIyBDT05GSUdfRkVBVFVSRV9TSE9XX1RIUkVBRFMgaXMgbm90IHNldAorQ09ORklHX1dBVENIPXkKKworIworIyBSdW5pdCBVdGlsaXRpZXMKKyMKKyMgQ09ORklHX1JVTlNWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTlNWRElSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfUlVOU1ZESVJfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NWIGlzIG5vdCBzZXQKK0NPTkZJR19TVl9ERUZBVUxUX1NFUlZJQ0VfRElSPSIiCisjIENPTkZJR19TVkxPR0QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hQU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0VUVUlER0lEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOVlVJREdJRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTlZESVIgaXMgbm90IHNldAorIyBDT05GSUdfU09GVExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQ0hDT05fTE9OR19PUFRJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFVEVORk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfR0VUU0VCT09MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQURfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BVENIUEFUSENPTiBpcyBub3Qgc2V0CisjIENPTkZJR19SRVNUT1JFQ09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JVTkNPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1JVTkNPTl9MT05HX09QVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VMSU5VWEVOQUJMRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VURU5GT1JDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRGSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NFVEZJTEVTX0NIRUNLX09QVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TRVRTRUJPT0wgaXMgbm90IHNldAorIyBDT05GSUdfU0VTVEFUVVMgaXMgbm90IHNldAorCisjCisjIFNoZWxscworIworQ09ORklHX0FTSD15CitDT05GSUdfQVNIX0JBU0hfQ09NUEFUPXkKKyMgQ09ORklHX0FTSF9JRExFX1RJTUVPVVQgaXMgbm90IHNldAorQ09ORklHX0FTSF9KT0JfQ09OVFJPTD15CitDT05GSUdfQVNIX0FMSUFTPXkKK0NPTkZJR19BU0hfR0VUT1BUUz15CitDT05GSUdfQVNIX0JVSUxUSU5fRUNITz15CitDT05GSUdfQVNIX0JVSUxUSU5fUFJJTlRGPXkKK0NPTkZJR19BU0hfQlVJTFRJTl9URVNUPXkKK0NPTkZJR19BU0hfSEVMUD15CisjIENPTkZJR19BU0hfQ01EQ01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FTSF9NQUlMIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfT1BUSU1JWkVfRk9SX1NJWkU9eQorIyBDT05GSUdfQVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19BU0hfRVhQQU5EX1BSTVQ9eQorIyBDT05GSUdfQ1RUWUhBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0JBU0hfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfQlJBQ0VfRVhQQU5TSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSEVMUCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0lOVEVSQUNUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfU0FWRUhJU1RPUlkgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9KT0IgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9USUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfSUYgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT09QUyBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX0NBU0UgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9GVU5DVElPTlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9MT0NBTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVVNIX1JBTkRPTV9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVU0hfRVhQT1JUX04gaXMgbm90IHNldAorIyBDT05GSUdfSFVTSF9NT0RFX1ggaXMgbm90IHNldAorIyBDT05GSUdfTVNIIGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0lTX0FTSD15CisjIENPTkZJR19GRUFUVVJFX1NIX0lTX0hVU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9TSF9JU19OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19BU0ggaXMgbm90IHNldAorIyBDT05GSUdfRkVBVFVSRV9CQVNIX0lTX0hVU0ggaXMgbm90IHNldAorQ09ORklHX0ZFQVRVUkVfQkFTSF9JU19OT05FPXkKK0NPTkZJR19TSF9NQVRIX1NVUFBPUlQ9eQorIyBDT05GSUdfU0hfTUFUSF9TVVBQT1JUXzY0IGlzIG5vdCBzZXQKK0NPTkZJR19GRUFUVVJFX1NIX0VYVFJBX1FVSUVUPXkKKyMgQ09ORklHX0ZFQVRVUkVfU0hfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFUVVJFX1NIX05PRk9SSyBpcyBub3Qgc2V0CitDT05GSUdfRkVBVFVSRV9TSF9ISVNURklMRVNJWkU9eQorCisjCisjIFN5c3RlbSBMb2dnaW5nIFV0aWxpdGllcworIworQ09ORklHX1NZU0xPR0Q9eQorQ09ORklHX0ZFQVRVUkVfUk9UQVRFX0xPR0ZJTEU9eQorQ09ORklHX0ZFQVRVUkVfUkVNT1RFX0xPRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0RVUD15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX0NGRz15CitDT05GSUdfRkVBVFVSRV9TWVNMT0dEX1JFQURfQlVGRkVSX1NJWkU9MjU2CitDT05GSUdfRkVBVFVSRV9JUENfU1lTTE9HPXkKK0NPTkZJR19GRUFUVVJFX0lQQ19TWVNMT0dfQlVGRkVSX1NJWkU9NjQKK0NPTkZJR19MT0dSRUFEPXkKK0NPTkZJR19GRUFUVVJFX0xPR1JFQURfUkVEVUNFRF9MT0NLSU5HPXkKK0NPTkZJR19GRUFUVVJFX0tNU0dfU1lTTE9HPXkKK0NPTkZJR19LTE9HRD15CisKKyMKKyMga2xvZ2Qgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggc3lzbG9nIHRvIGtlcm5lbCBwcmludGsgYnVmZmVyCisjCitDT05GSUdfRkVBVFVSRV9LTE9HRF9LTE9HQ1RMPXkKK0NPTkZJR19MT0dHRVI9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZmFpbF9vbl9ub19tZWRpYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzQ1ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2ZhaWxfb25fbm9fbWVkaWEucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBjdXJyZW50IGJlaGF2aW91ciBvZiBidXN5Ym94IGlzIHRvIHRyeSBhbGwgZnN0eXBlIHdoZW4gYXV0b21vdW50aW5nCitldmVuIHdoZW4gbm8gbWVkaWEgZXhpc3RzLiAgVGhlIHV0aWwtbGludXggbW91bnQgY29tbWFuZCBiYWlscyB3aGVuIG5vCittZWRpYSBleGlzdHMsIHNvIGNoYW5nZSB0aGUgYmVoYXZpb3VyIG9mIGJ1c3lib3ggdG8gZG8gdGhlIHNhbWUuCisKK0l0IGNvdWxkIGFsc28gYmUgYXJndWVkIHRoYXQgdGhlIEtFUk5fSU5GTyBtZXNzYWdlIGZyb20gYnRyZnMgY291bGQgYmUKK3JlbW92ZWQsIGJ1dCB0aGF0IHdvdWxkIGJlIGhhcmRlciB0byBhY2NvbXBsaXNoLgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGJ1c3lib3gtMS4yMC4yL3V0aWwtbGludXgvbW91bnQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGJ1c3lib3gtMS4yMC4yLm9yaWcvdXRpbC1saW51eC9tb3VudC5jCisrKysgYnVzeWJveC0xLjIwLjIvdXRpbC1saW51eC9tb3VudC5jCitAQCAtNTk4LDcgKzU5OCwxMyBAQCBzdGF0aWMgaW50IG1vdW50X2l0X25vdyhzdHJ1Y3QgbW50ZW50ICptCisgCQkJCWJyZWFrOworIAkJCWVycm5vID0gZXJybm9fc2F2ZTsKKyAJCX0KKy0KKysJCS8qCisrCQkgKiBCcmVhayBpZiB0aGVyZSBpcyBubyBtZWRpYSwgbm8gcG9pbnQgcmV0cnlpbmcgZm9yIGFsbAorKwkJICogZnMgdHlwZXMgc2luY2UgdGhlcmUgaXMgbm8gbWVkaWEgYXZhaWxhYmxlCisrCQkgKi8KKysJCWlmIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFTk9NRURJVU0pIHsKKysJCQliYl9wZXJyb3JfbXNnX2FuZF9kaWUoIm1vdW50aW5nICVzIG9uICVzIGZhaWxlZCIsIG1wLT5tbnRfZnNuYW1lLCBtcC0+bW50X2Rpcik7CisrCQl9CisgCQlpZiAoIXJjIHx8ICh2ZnNmbGFncyAmIE1TX1JET05MWSkgfHwgKGVycm5vICE9IEVBQ0NFUyAmJiBlcnJubyAhPSBFUk9GUykpCisgCQkJYnJlYWs7CisgCQlpZiAoISh2ZnNmbGFncyAmIE1TX1NJTEVOVCkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0X2hlYWRlcl90YXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0X2hlYWRlcl90YXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1MjhmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9nZXRfaGVhZGVyX3Rhci5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBjb3B5IGNvbW1pdCBtZXNzYWdlIGZyb20gT0UgYXMgdGhlIHBhdGNoIGNvbW1lbnQ6CisjICAgIGNvbW1pdCA1YTBlMWQ0NzNjYTdhY2E1ZmZlZmZmZTlhMmVjNDRhZTdhMWYzNWJjCisjICAgIEF1dGhvcjogRnJhbnMgTWV1bGVuYnJvZWtzIDxmcmFuc21ldWxlbmJyb2Vrc0BnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEZlYiAxMSAyMjo0MDoyMSAyMDA5ICswMTAwCisjCisjICAgIGJ1c3lib3g6IGZpeCB0YXIgcHJvYmxlbSB3aXRoIGZpbGVuYW1lcyB0aGF0IGFyZSBleGFjdGx5IDEwMCBieXRlcworIworIyBhYm92ZSBjb21tZW50IGFkZGVkIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMjAxMC0wNy0wNgorCistLS0gYnVzeWJveC0xLjEzLjIvYXJjaGl2YWwvbGliYXJjaGl2ZS9nZXRfaGVhZGVyX3Rhci5jLm9yaWcJMjAwOC0xMS0wOSAxODoyODowMi4wMDAwMDAwMDAgKzAxMDAKKysrKyBidXN5Ym94LTEuMTMuMi9hcmNoaXZhbC9saWJhcmNoaXZlL2dldF9oZWFkZXJfdGFyLmMJMjAwOS0wMi0xMSAyMjozNDo1Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNTIsNiArMjUyLDggQEAKKyAJCQlmaWxlX2hlYWRlci0+bmFtZSA9IGNvbmNhdF9wYXRoX2ZpbGUodGFyLnByZWZpeCwgdGFyLm5hbWUpOworIAkJfSBlbHNlCisgCQkJZmlsZV9oZWFkZXItPm5hbWUgPSB4c3RyZHVwKHRhci5uYW1lKTsKKysJCWlmIChzdHJsZW4oZmlsZV9oZWFkZXItPm5hbWUpID4gMTAwKSAKKysJCQlmaWxlX2hlYWRlci0+bmFtZVsxMDBdID0gMDsKKyAJfQorIAorIAkvKiBTZXQgYml0cyAxMi0xNSBvZiB0aGUgZmlsZXMgbW9kZSAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldG9wdHMuY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2dldG9wdHMuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYjBhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvZ2V0b3B0cy5jZmcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfR0VUT1BUPXkKK0NPTkZJR19MT05HX09QVFM9eQorQ09ORklHX0ZFQVRVUkVfR0VUT1BUX0xPTkc9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbG9naW4tdXRpbGl0aWVzLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzliMmRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L2xvZ2luLXV0aWxpdGllcy5jZmcKQEAgLTAsMCArMSwxMyBAQAorQ09ORklHX0ZFQVRVUkVfU0hBRE9XUEFTU1dEUz15CitDT05GSUdfQUREVVNFUj15CitDT05GSUdfRkVBVFVSRV9BRERVU0VSX0xPTkdfT1BUSU9OUz15CitDT05GSUdfQURER1JPVVA9eQorQ09ORklHX0ZFQVRVUkVfQURER1JPVVBfTE9OR19PUFRJT05TPXkKK0NPTkZJR19ERUxVU0VSPXkKK0NPTkZJR19ERUxHUk9VUD15CitDT05GSUdfR0VUVFk9eQorQ09ORklHX0xPR0lOPXkKK0NPTkZJR19QQVNTV0Q9eQorQ09ORklHX1NVPXkKK0NPTkZJR19TVUxPR0lOPXkKK0NPTkZJR19WTE9DSz15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9tb3VudC12aWEtbGFiZWwuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTdhYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvbW91bnQtdmlhLWxhYmVsLmNmZwpAQCAtMCwwICsxLDkgQEAKK0NPTkZJR19CTEtJRD15CitDT05GSUdfRkVBVFVSRV9CTEtJRF9UWVBFPXkKK0NPTkZJR19GRUFUVVJFX01PVU5UX0xBQkVMPXkKK0NPTkZJR19WT0xVTUVJRD15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9CVFJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9FWFQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfRjJGUz15CitDT05GSUdfRkVBVFVSRV9WT0xVTUVJRF9GQVQ9eQorQ09ORklHX0ZFQVRVUkVfVk9MVU1FSURfU1FVQVNIRlM9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3JlY29nbml6ZV9jb25ubWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQyYzc0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveC9yZWNvZ25pemVfY29ubm1hbmQucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBhZGRzIGNvbm5tYW5kIHRvIHRoZSBsaXN0IG9mIGtub3cgZGhjcCBjbGllbnRzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZV0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYnVzeWJveC0xLjIyLjEvbmV0d29ya2luZy9pZnVwZG93bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYnVzeWJveC0xLjIyLjEub3JpZy9uZXR3b3JraW5nL2lmdXBkb3duLmMKKysrKyBidXN5Ym94LTEuMjIuMS9uZXR3b3JraW5nL2lmdXBkb3duLmMKK0BAIC01MjEsNiArNTIxLDEwIEBAIHN0cnVjdCBkaGNwX2NsaWVudF90IHsKKyB9OworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGhjcF9jbGllbnRfdCBleHRfZGhjcF9jbGllbnRzW10gPSB7CisrCXsgImNvbm5tYW5kIiwKKysJCSJ0cnVlIiwKKysJCSJ0cnVlIiwKKysJfSwKKyAJeyAiZGhjcGNkIiwKKyAJCSJkaGNwY2RbWyAtaCAlaG9zdG5hbWUlXV1bWyAtaSAldmVuZG9yJV1dW1sgLUkgJWNsaWVudCVdXVtbIC1sICVsZWFzZXRpbWUlXV0gJWlmYWNlJSIsCisgCQkiZGhjcGNkIC1rICVpZmFjZSUiLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTFzdW0uY2ZnIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTFzdW0uY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZTcyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMXN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTFTVU09eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3gvc2hhMjU2c3VtLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTY1MmFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94L3NoYTI1NnN1bS5jZmcKQEAgLTAsMCArMSBAQAorQ09ORklHX1NIQTI1NlNVTT15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfMS4yMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XzEuMjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGQ5Zjk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9idXN5Ym94XzEuMjMuMi5iYgpAQCAtMCwwICsxLDUwIEBACityZXF1aXJlIGJ1c3lib3guaW5jCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5idXN5Ym94Lm5ldC9kb3dubG9hZHMvYnVzeWJveC0ke1BWfS50YXIuYnoyO25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyAgICAgICAgICAgZmlsZTovL2dldG9wdHMuY2ZnIFwKKyIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNzkyNTY4M2Q3ZGQxMDVhYWJlOWI2YjYxOGQ0OGNjNzMiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICIwNWE2ZjllMjFhYWQ4YzA5OGUzODhhZTc3ZGU3YjIzNjE5NDFhZmE3MTU3ZWY3NDIxNjcwMzM5NWIxNGUzMTlhIgorCitFWFRSQV9PRU1BS0UgKz0gIlY9MSBBUkNIPSR7VEFSR0VUX0FSQ0h9IENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBTS0lQX1NUUklQPXkiCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICAgICAgICBjcCAtciAke0J9L3Rlc3RzdWl0ZSAke0R9JHtQVEVTVF9QQVRIfS8KKyAgICAgICAgY3AgJHtCfS8uY29uZmlnICAgICAgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGxuIC1zIC9iaW4vYnVzeWJveCAgICR7RH0ke1BURVNUX1BBVEh9L2J1c3lib3gKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvYnVzeWJveF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTcyZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2J1c3lib3hfZ2l0LmJiCkBAIC0wLDAgKzEsNTQgQEAKK3JlcXVpcmUgYnVzeWJveC5pbmMKKworU1JDUkVWID0gImJlOTQ3YzRkOTdjMGRhY2I3MDNhNmYyNGRkODEzZmY2ZGQzYTMzYjYiCisjIExvb2tvdXQgZm9yIFBWIGJ1bXAgdG9vIHdoZW4gU1JDUkVWIGlzIGNoYW5nZWQKK1BWID0gIjEuMjMuMitnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9idXN5Ym94Lm5ldC9idXN5Ym94LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXRfaGVhZGVyX3Rhci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LWFwcGxldGxpYi1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtdWRoY3BjLW5vX2RlY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmQtdG91Y2hzY3JlZW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1jcm9uIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtaHR0cGQgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC11ZGhjcGQgXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdC5zY3JpcHQgXAorICAgICAgICAgICBmaWxlOi8vc2ltcGxlLnNjcmlwdCBcCisgICAgICAgICAgIGZpbGU6Ly9od2Nsb2NrLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50LmJ1c3lib3ggXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xvZy1zdGFydHVwLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYnVzeWJveC1zeXNsb2cuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2IFwKKyAgICAgICAgICAgZmlsZTovL21kZXYuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGV2LW1vdW50LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudC5idXN5Ym94IFwKKyAgICAgICAgICAgZmlsZTovL2RlZmNvbmZpZyBcCisgICAgICAgICAgIGZpbGU6Ly9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9mYWlsX29uX25vX21lZGlhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9pbmV0ZC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2luZXRkIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luLXV0aWxpdGllcy5jZmcgXAorICAgICAgICAgICBmaWxlOi8vcmVjb2duaXplX2Nvbm5tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2J1c3lib3gtY3Jvc3MtbWVudWNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWlmY29uZmlnLWZpeC1kb3VibGUtZnJlZS1mYXRhbC1lcnJvci1pbi1JTkVUX3NwcmludC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNob3duLWZpeC1oZWxwLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbW91bnQtdmlhLWxhYmVsLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGExc3VtLmNmZyBcCisgICAgICAgICAgIGZpbGU6Ly9zaGEyNTZzdW0uY2ZnIFwKKyIKKworRVhUUkFfT0VNQUtFICs9ICJWPTEgQVJDSD0ke1RBUkdFVF9BUkNIfSBDUk9TU19DT01QSUxFPSR7VEFSR0VUX1BSRUZJWH0gU0tJUF9TVFJJUD15IgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKyAgICAgICAgY3AgLXIgJHtCfS90ZXN0c3VpdGUgJHtEfSR7UFRFU1RfUEFUSH0vCisgICAgICAgIGNwICR7Qn0vLmNvbmZpZyAgICAgICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICBsbiAtcyAvYmluL2J1c3lib3ggICAke0R9JHtQVEVTVF9QQVRIfS9idXN5Ym94Cit9CisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWNyb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjBlNmIxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1jcm9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9jcm9uZAorTkFNRT1jcm9uZAorREVTQz0iQnVzeWJveCBQZXJpb2RpYyBDb21tYW5kIFNjaGVkdWxlciIKK0FSR1M9Ii1jIC9ldGMvY3Jvbi9jcm9udGFicyIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAtbiAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1odHRwZCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC1odHRwZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jODM0OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWh0dHBkCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi9odHRwZAorTkFNRT1odHRwZAorREVTQz0iQnVzeWJveCBIVFRQIERhZW1vbiIKK0hUVFBST09UPSIvc3J2L3d3dyIKK0FSR1M9Ii1oICRIVFRQUk9PVCIKKwordGVzdCAtZiAkREFFTU9OIHx8IGV4aXQgMAorCitzZXQgLWUKKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIGVjaG8gLW4gInN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisJaWYgWyAhIC1kICRIVFRQUk9PVCBdOyB0aGVuCisJCWVjaG8gIiRIVFRQUk9PVCBpcyBtaXNzaW5nLiIKKwkJZXhpdCAxCisJZmkKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiAkTkFNRSAtYSAkREFFTU9OIC0tICRBUkdTCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICBzdG9wKQorICAgICAgICBlY2hvIC1uICJzdG9wcGluZyAkREVTQzogJE5BTUUuLi4gIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uICROQU1FCisJZWNobyAiZG9uZS4iCisJOzsKKyAgICByZXN0YXJ0KQorICAgICAgICBlY2hvICJyZXN0YXJ0aW5nICRERVNDOiAkTkFNRS4uLiAiCisgCSQwIHN0b3AKKwkkMCBzdGFydAorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVsb2FkKQorICAgIAllY2hvIC1uICJyZWxvYWRpbmcgJERFU0M6ICROQU1FLi4uICIKKyAgICAJa2lsbGFsbCAtSFVQICQoYmFzZW5hbWUgJHtEQUVNT059KQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgKikKKwllY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8cmVzdGFydHxyZWxvYWR9IgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4gYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gta2xvZ2Quc2VydmljZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2M3NzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LWtsb2dkLnNlcnZpY2UuaW4KQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPUtlcm5lbCBMb2dnaW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QGJhc2Vfc2JpbmRpckAva2xvZ2QgLW4KKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTZjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLmRlZmF1bHQKQEAgLTAsMCArMSwyNSBAQAorT1BUSU9OUz0iLUMiCisjIFRoZSBhYm92ZSBvcHRpb24gbWVhbnMgc3lzbG9nZCB3aWxsIGxvZyB0byAxNksgc2htIGNpcmN1bGFyIGJ1ZmZlci4KKyMgWW91IGNvdWxkIHVzZSBgbG9ncmVhZCcgdG8gcmVhZCBpdC4KKworIyBBbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOgorIyAtTyBGSUxFICAgICAgIDogICAgICBMb2cgdG8gRklMRSAoZGVmYXVsdDovdmFyL2xvZy9tZXNzYWdlcykKKyMgLWwgTiAgICAgICAgICA6ICAgICAgTG9nIG9ubHkgbWVzc2FnZXMgbW9yZSB1cmdlbnQgdGhhbiBwcmlvIE4gKDEtOCkKKyMgLVMgICAgICAgICAgICA6ICAgICAgU21hbGxlciBvdXRwdXQKKyMgLXMgU0laRSAgICAgICA6ICAgICAgTWF4IHNpemUgKEtCKSBiZWZvcmUgcm90YXRpb24gKGRlZmF1bHQ6MjAwS0IsIDA9b2ZmKQorIyAtYiBOICAgICAgICAgIDogICAgICBOIHJvdGF0ZWQgbG9ncyB0byBrZWVwIChkZWZhdWx0OjEsIG1heD05OSwgMD1wdXJnZSkKKyMgLVIgSE9TVFs6UE9SVF06ICAgICAgTG9nIHRvIEhPU1Q6UE9SVCAoZGVmYXVsdCBQT1JUOjUxNCkKKyMgLUwgICAgICAgICAgICA6ICAgICAgTG9nIGxvY2FsbHkgYW5kIHZpYSBuZXR3b3JrCisjIC1EICAgICAgICAgICAgOiAgICAgIERyb3AgZHVwbGljYXRlcworIyAtQ1tzaXplX2tiXSAgIDogICAgICBMb2cgdG8gc2hhcmVkIG1lbSBidWZmZXIgKHVzZSBsb2dyZWFkIHRvIHJlYWQgaXQpCisjIC1mIEZJTEUgICAgICAgOiAgICAgIFVzZSBGSUxFIGFzIGNvbmZpZyAoZGVmYXVsdDovZXRjL3N5c2xvZy5jb25mKQorIyAtbSBNSU4gICAgICAgIDogICAgICBNaW51dGVzIGJldHdlZW4gbWFyayBsaW5lcyAoZGVmYXVsdDoyMCwgMD1vZmYpCisjIC1LICAgICAgICAgICAgOiAgICAgIExvZyB0byBrZXJuZWwgcHJpbnRrIGJ1ZmZlciAodXNlIGRtZXNnIHRvIHJlYWQgaXQpCisKKyMgRXhhbXBsZSAxOgorIyBMb2cgdG8gbG9jYWwgZmlsZSAvdmFyL2xvZy9teWxvZworIyBPUFRJT05TPSItTyAvdmFyL2xvZy9teWxvZyIKKyMKKyMgRXhhbXBsZSAyOgorIyBMb2cgdG8gcmVtb3RlIGhvc3QKKyMgT1BUSU9OUz0iLVIgMTkyLjE2OC4xLjE6NjAxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9idXN5Ym94LXN5c2xvZy5zZXJ2aWNlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDQzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtc3lzbG9nLnNlcnZpY2UuaW4KQEAgLTAsMCArMSwxMyBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TeXN0ZW0gTG9nZ2luZyBTZXJ2aWNlCitXYW50cz1idXN5Ym94LWtsb2dkLnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9idXN5Ym94LXN5c2xvZworRXhlY1N0YXJ0PUBiYXNlX3NiaW5kaXJAL3N5c2xvZ2QgLW4gJE9QVElPTlMKK1NvY2tldHM9c3lzbG9nLnNvY2tldAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CitBbHNvPWJ1c3lib3gta2xvZ2Quc2VydmljZQorQWxpYXM9c3lzbG9nLnNlcnZpY2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvYnVzeWJveC11ZGhjcGQgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtdWRoY3BkCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0MzkwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2J1c3lib3gtdWRoY3BkCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorREFFTU9OPS91c3Ivc2Jpbi91ZGhjcGQKK05BTUU9dWRoY3BkCitERVNDPSJCdXN5Ym94IFVESENQIFNlcnZlciIKK0FSR1M9Ii9ldGMvdWRoY3BkLmNvbmYiCisKK3Rlc3QgLWYgJERBRU1PTiB8fCBleGl0IDEKKworc2V0IC1lCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBlY2hvIC1uICJzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorCWlmIFsgISAtZiAvZXRjL3VkaGNwZC5jb25mIF07IHRoZW4KKwkJZWNobyAiZXJyb3I6IC9ldGMvdWRoY3BkLmNvbmYgaXMgbWlzc2luZy4iCisJCWV4aXQgMQorCWZpCisJL3NiaW4vc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4gJE5BTUUgLWEgJERBRU1PTiAtLSAkQVJHUworCWVjaG8gImRvbmUuIgorCTs7CisgICAgc3RvcCkKKyAgICAgICAgZWNobyAtbiAic3RvcHBpbmcgJERFU0M6ICROQU1FLi4uICIKKwkvc2Jpbi9zdGFydC1zdG9wLWRhZW1vbiAtSyAtbiAkTkFNRQorCWVjaG8gImRvbmUuIgorCTs7CisgICAgcmVzdGFydCkKKyAgICAgICAgZWNobyAicmVzdGFydGluZyAkREVTQzogJE5BTUUuLi4gIgorIAkkMCBzdG9wCisJJDAgc3RhcnQKKwllY2hvICJkb25lLiIKKwk7OworICAgIHJlbG9hZCkKKyAgICAJZWNobyAtbiAicmVsb2FkaW5nICRERVNDOiAkTkFNRS4uLiAiCisgICAgCWtpbGxhbGwgLUhVUCAkKGJhc2VuYW1lICR7REFFTU9OfSkKKwllY2hvICJkb25lLiIKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHJlc3RhcnR8cmVsb2FkfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZGVmYXVsdC5zY3JpcHQgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2RlZmF1bHQuc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYWM5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2RlZmF1bHQuc2NyaXB0CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKK2V4ZWMgcnVuLXBhcnRzIC1hICIkMSIgL2V0Yy91ZGhjcGMuZAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2ZpbmQtdG91Y2hzY3JlZW4uc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2ZpbmQtdG91Y2hzY3JlZW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjNWU3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvZmluZC10b3VjaHNjcmVlbi5zaApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitpZiBncmVwIC1xICJpbnB1dDouKi1lMC4qLDMsLiphMCwxLFx8YWRzNzg0NiIgL3N5cy9jbGFzcy8kTURFVi9kZXZpY2UvbW9kYWxpYXMgOyB0aGVuCisJbG4gLXNmIC9kZXYvJE1ERVYgL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaHdjbG9jay5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaHdjbG9jay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTVmOTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9od2Nsb2NrLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgaHdjbG9jaworIyBSZXF1aXJlZC1TdGFydDogICAgCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2V0IHN5c3RlbSBjbG9jaworIyBEZXNjcmlwdGlvbjogICAgICAgU2V0IHN5c3RlbSBjbG9jayB0byBoYXJkd2FyZSBjbG9jaywgYWNjb3JkaW5nIHRvIHRoZSBVVEMKKyMgICAgICAgICAgICAgICAgICAgIHNldHRpbmcgaW4gL2V0Yy9kZWZhdWx0L3JjUyAoc2VlIGFsc28gcmNTKDUpKS4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIFdBUk5JTkc6ICAgICAgSWYgeW91ciBoYXJkd2FyZSBjbG9jayBpcyBub3QgaW4gVVRDL0dNVCwgdGhpcyBzY3JpcHQKKyMgICAgICAgICAgICAgICBtdXN0IGtub3cgdGhlIGxvY2FsIHRpbWUgem9uZS4gVGhpcyBpbmZvcm1hdGlvbiBpcworIyAgICAgICAgICAgICAgIHN0b3JlZCBpbiAvZXRjL2xvY2FsdGltZS4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gaWYKKyMgICAgICAgICAgICAgICB5b3VyIC9ldGMvbG9jYWx0aW1lIGlzIGEgc3ltbGluayB0byBzb21ldGhpbmcgaW4KKyMgICAgICAgICAgICAgICAvdXNyL3NoYXJlL3pvbmVpbmZvIEFORCAvdXNyIGlzbid0IGluIHRoZSByb290CisjICAgICAgICAgICAgICAgcGFydGl0aW9uISBUaGUgd29ya2Fyb3VuZCBpcyB0byBkZWZpbmUgVFogZWl0aGVyCisjICAgICAgICAgICAgICAgaW4gL2V0Yy9kZWZhdWx0L3JjUywgb3IgaW4gdGhlIHByb3BlciBwbGFjZSBiZWxvdy4KKworWyAhIC14IC9zYmluL2h3Y2xvY2sgXSAmJiBleGl0IDAKKworWyAtZiAvZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAvZXRjL2RlZmF1bHQvcmNTCisKK1sgIiRVVEMiID0gInllcyIgXSAmJiB0ej0iLS11dGMiIHx8IHR6PSItLWxvY2FsdGltZSIKK2Nhc2UgIiQxIiBpbgorICAgICAgICBzdGFydCkKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSB0aW1lIHdhcyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU2V0dGluZyB0aGUgU3lzdGVtIENsb2NrIHVzaW5nIHRoZSBIYXJkd2FyZSBDbG9jayBhcyByZWZlcmVuY2UuLi4iCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlpZiBbIC16ICIkVFoiIF0KKwkJCXRoZW4KKwkgICAgICAgICAgICAgICAgICAgaHdjbG9jayAkdHogLS1oY3Rvc3lzCisJCQllbHNlCisJCQkgICBUWj0iJFRaIiBod2Nsb2NrICR0eiAtLWhjdG9zeXMKKwkJCWZpCisJCWZpCisKKyAgICAgICAgICAgICAgICBpZiBbICIkVkVSQk9TRSIgIT0gbm8gXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIlN5c3RlbSBDbG9jayBzZXQuIFN5c3RlbSBsb2NhbCB0aW1lIGlzIG5vdyBgZGF0ZWAuIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgc3RvcHxyZXN0YXJ0fHJlbG9hZHxmb3JjZS1yZWxvYWQpCisJCSMKKwkJIyBVcGRhdGVzIHRoZSBIYXJkd2FyZSBDbG9jayB3aXRoIHRoZSBTeXN0ZW0gQ2xvY2sgdGltZS4KKwkJIyBUaGlzIHdpbGwgKm92ZXJyaWRlKiBhbnkgY2hhbmdlcyBtYWRlIHRvIHRoZSBIYXJkd2FyZSBDbG9jay4KKwkJIworCQkjIFdBUk5JTkc6IElmIHlvdSBkaXNhYmxlIHRoaXMsIGFueSBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0KKwkJIyAgICAgICAgICBjbG9jayB3aWxsIG5vdCBiZSBjYXJyaWVkIGFjcm9zcyByZWJvb3RzLgorCQkjCisJCWlmIFsgIiRWRVJCT1NFIiAhPSBubyBdCisJCXRoZW4KKwkJCWVjaG8gIlNhdmluZyB0aGUgU3lzdGVtIENsb2NrIHRpbWUgdG8gdGhlIEhhcmR3YXJlIENsb2NrLi4uIgorCQlmaQorCQlpZiBbICIkSFdDTE9DS0FDQ0VTUyIgIT0gbm8gXQorCQl0aGVuCisJCQlod2Nsb2NrICR0eiAtLXN5c3RvaGMKKwkJZmkKKwkJaWYgWyAiJFZFUkJPU0UiICE9IG5vIF0KKwkJdGhlbgorCQkJZWNobyAiSGFyZHdhcmUgQ2xvY2sgdXBkYXRlZCB0byBgZGF0ZWAuIgorCQlmaQorICAgICAgICAgICAgICAgIGV4aXQgMAorICAgICAgICAgICAgICAgIDs7CisJc2hvdykKKwkJaWYgWyAiJEhXQ0xPQ0tBQ0NFU1MiICE9IG5vIF0KKwkJdGhlbgorCQkJaHdjbG9jayAkdHogLS1zaG93CisJCWZpCisJCTs7CisgICAgICAgICopCisgICAgICAgICAgICAgICAgZWNobyAiVXNhZ2U6IGh3Y2xvY2suc2gge3N0YXJ0fHN0b3B8c2hvd3xyZWxvYWR8cmVzdGFydH0iID4mMgorCQllY2hvICIgICAgICAgc3RhcnQgc2V0cyBrZXJuZWwgKHN5c3RlbSkgY2xvY2sgZnJvbSBoYXJkd2FyZSAoUlRDKSBjbG9jayIgPiYyCisJCWVjaG8gIiAgICAgICBzdG9wIGFuZCByZWxvYWQgc2V0IGhhcmR3YXJlIChSVEMpIGNsb2NrIGZyb20ga2VybmVsIChzeXN0ZW0pIGNsb2NrIiA+JjIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1MGJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvaW5ldGQKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjCisjIHN0YXJ0L3N0b3AgaW5ldGQgc3VwZXIgc2VydmVyLgorCitpZiAhIFsgLXggL3Vzci9zYmluL2luZXRkIF07IHRoZW4KKwlleGl0IDAKK2ZpCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQiIDsgc3RhcnQtc3RvcC1kYWVtb24gLVMgLXggL3Vzci9zYmluL2luZXRkID4gL2Rldi9udWxsCisJZWNobyAiLiIKKwk7OworICAgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXI6IgorCWVjaG8gLW4gIiBpbmV0ZCIgOyBzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAvdXNyL3NiaW4vaW5ldGQgPiAvZGV2L251bGwKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwllY2hvIC1uICJSZXN0YXJ0aW5nIGludGVybmV0IHN1cGVyc2VydmVyOiIKKwllY2hvIC1uICIgaW5ldGQgIgorCWtpbGxhbGwgLUhVUCBpbmV0ZAorCWVjaG8gIi4iCisJOzsKKyAgICAqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9pbmV0ZCB7c3RhcnR8c3RvcHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZC5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9pbmV0ZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMmZlODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL2luZXRkLmNvbmYKQEAgLTAsMCArMSwyMCBAQAorIyAvZXRjL2luZXRkLmNvbmY6ICBzZWUgaW5ldGQoOCkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb25zLgorIworIyBJbnRlcm5ldCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBkYXRhYmFzZQorIworIyBJZiB5b3Ugd2FudCB0byBkaXNhYmxlIGFuIGVudHJ5IHNvIGl0IGlzbid0IHRvdWNoZWQgZHVyaW5nCisjIHBhY2thZ2UgdXBkYXRlcyBqdXN0IGNvbW1lbnQgaXQgb3V0IHdpdGggYSBzaW5nbGUgJyMnIGNoYXJhY3Rlci4KKyMKKyMgPHNlcnZpY2VfbmFtZT4gPHNvY2tfdHlwZT4gPHByb3RvPiA8ZmxhZ3M+IDx1c2VyPiA8c2VydmVyX3BhdGg+IDxhcmdzPgorIworIzpJTlRFUk5BTDogSW50ZXJuYWwgc2VydmljZXMKKyNlY2hvCQlzdHJlYW0JdGNwCW5vd2FpdAlyb290CWludGVybmFsCisjZWNobwkJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4Jc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2NoYXJnZW4JZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI2Rpc2NhcmQJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyNkaXNjYXJkCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCisjZGF5dGltZQkJc3RyZWFtCXRjcAlub3dhaXQJcm9vdAlpbnRlcm5hbAorI2RheXRpbWUJZGdyYW0JdWRwCXdhaXQJcm9vdAlpbnRlcm5hbAorI3RpbWUJCXN0cmVhbQl0Y3AJbm93YWl0CXJvb3QJaW50ZXJuYWwKKyN0aW1lCQlkZ3JhbQl1ZHAJd2FpdAlyb290CWludGVybmFsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTYyNTI0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldgpAQCAtMCwwICsxLDE5IEBACisjIS9iaW4vc2gKKworbW91bnQgLXQgdG1wZnMgdG1wZnMgL2RldiAgLW8gc2l6ZT02NGssbW9kZT0wNzU1Citta2RpciAvZGV2L3B0cyAvZGV2L3NobQorY2htb2QgNzc3IC9kZXYvc2htCittb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzCit0b3VjaCAvZGV2L21kZXYuc2VxCitlY2hvICIvc2Jpbi9tZGV2IiA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworbWRldiAtcworCisjCisjIFdlIG1pZ2h0IGhhdmUgbW91bnRlZCBzb21ldGhpbmcgb3ZlciAvZGV2LCBzZWUgaWYgL2Rldi9pbml0Y3RsIGlzIHRoZXJlLgorIworaWYgdGVzdCAhIC1wIC9kZXYvaW5pdGN0bAordGhlbgorICAgICAgICBybSAtZiAvZGV2L2luaXRjdGwKKyAgICAgICAgbWtub2QgLW0gNjAwIC9kZXYvaW5pdGN0bCBwCitmaQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYtbW91bnQuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL21kZXYtbW91bnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkNjZkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi1tb3VudC5zaApAQCAtMCwwICsxLDYzIEBACisjIS9iaW4vc2gKK01ERVZfQVVUT01PVU5UPXkKK01ERVZfQVVUT01PVU5UX1JPT1Q9L3J1bi9tZWRpYQorWyAtZiAvZXRjL2RlZmF1bHQvbWRldiBdICYmIC4gL2V0Yy9kZWZhdWx0L21kZXYKK2lmIFsgIiR7TURFVl9BVVRPTU9VTlR9IiA9ICJuIiBdIDsgdGhlbgorCWV4aXQgMAorZmkKKworY2FzZSAiJEFDVElPTiIgaW4KKwlhZGR8IiIpCisJCUFDVElPTj0iYWRkIgorCQkjIGNoZWNrIGlmIGFscmVhZHkgbW91bnRlZAorCQlpZiBncmVwIC1xICJeL2Rldi8ke01ERVZ9ICIgL3Byb2MvbW91bnRzIDsgdGhlbgorCQkJIyBBbHJlYWR5IG1vdW50ZWQKKwkJCWV4aXQgMAorCQlmaQorCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDNgCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICJtbWMiIF0gOyB0aGVuCisJCQlERVZCQVNFPWBleHByIHN1YnN0ciAkTURFViAxIDdgCisJCWZpCisJCSMgY2hlY2sgZm9yICJwbGVhc2UgZG9uJ3QgbW91bnQgaXQiIGZpbGUKKwkJaWYgWyAtZiAiL2Rldi9ub21vdW50LiR7REVWQkFTRX0iIF0gOyB0aGVuCisJCQkjIGJsb2NrZWQKKwkJCWV4aXQgMAorCQlmaQorCQkjIGNoZWNrIGZvciBmdWxsLWRpc2sgcGFydGl0aW9uCisJCWlmIFsgIiR7REVWQkFTRX0iID09ICIke01ERVZ9IiBdIDsgdGhlbgorCQkJaWYgWyAtZCAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vJHtERVZCQVNFfSoxIF0gOyB0aGVuCisJCQkJIyBQYXJ0aXRpb24gZGV0ZWN0ZWQsIGp1c3QgcXVpdAorCQkJCWV4aXQgMAorCQkJZmkKKwkJCWlmIFsgISAtZiAvc3lzL2Jsb2NrLyR7REVWQkFTRX0vc2l6ZSBdIDsgdGhlbgorCQkJCSMgTm8gc2l6ZSBhdCBhbGwKKwkJCQlleGl0IDAKKwkJCWZpCisJCQlpZiBbIGBjYXQgL3N5cy9ibG9jay8ke0RFVkJBU0V9L3NpemVgID09IDAgXSA7IHRoZW4KKwkJCQkjIGVtcHR5IGRldmljZSwgYmFpbCBvdXQKKwkJCQlleGl0IDAKKwkJCWZpCisJCWZpCisJCSMgZmlyc3QgYWxsb3cgZnN0YWIgdG8gZGV0ZXJtaW5lIHRoZSBtb3VudHBvaW50CisJCWlmICEgbW91bnQgL2Rldi8kTURFViA+IC9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCU1PVU5UUE9JTlQ9IiR7TURFVl9BVVRPTU9VTlRfUk9PVH0vJE1ERVYiCisJCQlta2RpciAiJE1PVU5UUE9JTlQiCisJCQltb3VudCAtdCBhdXRvIC9kZXYvJE1ERVYgIiRNT1VOVFBPSU5UIgorCQlmaQorCQk7OworCXJlbW92ZSkKKwkJTU9VTlRQT0lOVD1gZ3JlcCAiXi9kZXYvJE1ERVZccyIgL3Byb2MvbW91bnRzIHwgY3V0IC1kJyAnIC1mIDJgCisJCWlmIFsgISAteiAiJE1PVU5UUE9JTlQiIF0KKwkJdGhlbgorCQkJdW1vdW50ICIkTU9VTlRQT0lOVCIKKwkJCXJtZGlyICIkTU9VTlRQT0lOVCIKKwkJZWxzZQorCQkJdW1vdW50IC9kZXYvJE1ERVYKKwkJZmkKKwkJOzsKKwkqKQorCQkjIFVuZXhwZWN0ZWQga2V5d29yZAorCQlleGl0IDEKKwkJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tZGV2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlOTNkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbWRldi5jb25mCkBAIC0wLDAgKzEsNDIgQEAKKyRNT0RBTElBUz0uKiAwOjAgNjYwIEBtb2Rwcm9iZSAiJE1PREFMSUFTIgorCitjb25zb2xlIDA6MCAwNjAwIAorY3B1X2RtYV9sYXRlbmN5IDA6MCAwNjYwIAorZmIwOjAgNDQgMDY2MCAKK2Z1bGwgMDowIDA2NjYgCitpbml0Y3RsIDA6MCAwNjAwIAoraXJjb21tWzAtOV0uKiAwOjIwIDA2NjAgCitrbWVtIDA6MTUgMDY0MCAKK2ttc2cgMDowIDA2NjAgCitsb2cgMDowIDA2NjYgCitsb29wWzAtOV0uKiAwOjYgMDY0MCAKK21lbSAwOjE1IDA2NDAgCituZXR3b3JrX2xhdGVuY3kgMDowIDA2NjAgCituZXR3b3JrX3Rocm91Z2hwdXQgMDowIDA2NjAgCitudWxsIDA6MCAwNjY2IAorcG9ydCAwOjE1IDA2NDAgCitwdG14IDA6NSAwNjY2IAorcmFtWzAtOV0uKiAwOjYgMDY0MCAKK3JhbmRvbSAwOjAgMDY2NiAKK3NkYSAwOjYgMDY0MCAKK3R0eSAwOjUgMDY2NiAKK3R0eS4qIDA6MCAwNjIwIAordXJhbmRvbSAwOjAgMDY2NiAKK3VzYmRldi4qIDA6MCAwNjYwICovZXRjL21kZXYvdXNiLnNoCit2Y3MuKiAwOjUgMDY2MCAKK3plcm8gMDowIDA2NjYgCisgCitzbmQvcGNtLiogMDowIDA2NjAKK3NuZC9jb250cm9sLiogMDowIDA2NjAKK3NuZC90aW1lciAwOjAgMDY2MAorc25kL3NlcSAwOjAgMDY2MAorc25kL21pbmkuKiAwOjAwIDA2NjAKKworaW5wdXQvZXZlbnQuKiAwOjAgMDY2MCBAL2V0Yy9tZGV2L2ZpbmQtdG91Y2hzY3JlZW4uc2gKK2lucHV0L21pY2UgMDowIDA2NjAKK2lucHV0L21vdXNlLiogMDowIDA2NjAKKwordHVuWzAtOV0qIDA6MCAwNjYwID1uZXQvCisKK1toc11kW2Etel1bMC05XT8gMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKK21tY2Jsa1swLTldLiogMDowIDY2MCAqL2V0Yy9tZGV2L21kZXYtbW91bnQuc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbW91bnQuYnVzeWJveCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvbW91bnQuYnVzeWJveApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZWY5NDViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9tb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IG1vdW50ICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MDhhOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCitjdXJyZW50X2Rpcj0kKHJlYWRsaW5rIC1mICQwKQorZXhwb3J0IGJpbmRpcj0kKGRpcm5hbWUgJGN1cnJlbnRfZGlyKQorCitjZCB0ZXN0c3VpdGUgfHwgZXhpdCAxCisuL3J1bnRlc3QgLXYgfCBzZWQgLXIgJ3MvXihTS0lQUEVEfFVOVEVTVEVEKTovU0tJUDovJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zaW1wbGUuc2NyaXB0IGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zaW1wbGUuc2NyaXB0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMTY4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3NpbXBsZS5zY3JpcHQKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisKKyMgdWRoY3BjIHNjcmlwdCBlZGl0ZWQgYnkgVGltIFJpa2VyIDxUaW1AUmlrZXJzLm9yZz4KKworWyAteiAiJDEiIF0gJiYgZWNobyAiRXJyb3I6IHNob3VsZCBiZSBjYWxsZWQgZnJvbSB1ZGhjcGMiICYmIGV4aXQgMQorCitSRVNPTFZfQ09ORj0iL2V0Yy9yZXNvbHYuY29uZiIKK1sgLW4gIiRzdWJuZXQiIF0gJiYgTkVUTUFTSz0ibmV0bWFzayAkc3VibmV0IgorCisjIHJldHVybiAwIGlmIHJvb3QgaXMgbW91bnRlZCBvbiBhIG5ldHdvcmsgZmlsZXN5c3RlbQorcm9vdF9pc19uZnMoKSB7CisJc2VkIC1uICdzL15bXiBdKiBcKFteIF0qXCkgXChbXiBdKlwpIC4qJC9cMSBcMi9wJyAvcHJvYy9tb3VudHMgfAorCWdyZXAgLXEgIl4vIFwobmZzXHxzbWJmc1x8bmNwXHxjb2RhXCkkIgorfQorCitoYXZlX2Jpbl9pcD0wCitpZiBbIC14IC9zYmluL2lwIF07IHRoZW4KKyAgaGF2ZV9iaW5faXA9MQorICBCUk9BRENBU1Q9ImJyb2FkY2FzdCArIgorZmkKKworWyAtbiAiJGJyb2FkY2FzdCIgXSAmJiBCUk9BRENBU1Q9ImJyb2FkY2FzdCAkYnJvYWRjYXN0IgorCitjYXNlICIkMSIgaW4KKwlkZWNvbmZpZykKKwkJaWYgWyAteCAvc2Jpbi9yZXNvbHZjb25mIF07IHRoZW4KKwkJCS9zYmluL3Jlc29sdmNvbmYgLWQgIiR7aW50ZXJmYWNlfS51ZGhjcGMiCisJCWZpCisJCWlmICEgcm9vdF9pc19uZnMgOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwIGFkZHIgZmx1c2ggZGV2ICRpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgbGluayBzZXQgZGV2ICRpbnRlcmZhY2UgdXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL3NiaW4vaWZjb25maWcgJGludGVyZmFjZSAwLjAuMC4wCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorCQlmaQorCQk7OworCisJcmVuZXd8Ym91bmQpCisgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaXAgYWRkciBhZGQgZGV2ICRpbnRlcmZhY2UgbG9jYWwgJGlwLyRtYXNrICRCUk9BRENBU1QKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvc2Jpbi9pZmNvbmZpZyAkaW50ZXJmYWNlICRpcCAkQlJPQURDQVNUICRORVRNQVNLCisgICAgICAgICAgICAgICAgZmkKKworCQlpZiBbIC1uICIkcm91dGVyIiBdIDsgdGhlbgorCQkJaWYgISByb290X2lzX25mcyA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAkaGF2ZV9iaW5faXAgLWVxIDEgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIGlwIHJvdXRlIGRlbCBkZWZhdWx0IGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSByb3V0ZSBkZWwgZGVmYXVsdCBndyAwLjAuMC4wIGRldiAkaW50ZXJmYWNlIDI+L2Rldi9udWxsIDsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisJCQlmaQorCisJCQltZXRyaWM9MTAKKwkJCWZvciBpIGluICRyb3V0ZXIgOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICRoYXZlX2Jpbl9pcCAtZXEgMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgcm91dGUgYWRkIGRlZmF1bHQgdmlhICRpIG1ldHJpYyAkbWV0cmljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZSBhZGQgZGVmYXVsdCBndyAkaSBkZXYgJGludGVyZmFjZSBtZXRyaWMgJG1ldHJpYyAyPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWM9JCgoJG1ldHJpYyArIDEpKQorCQkJZG9uZQorCQlmaQorCisJCSMgVXBkYXRlIHJlc29sdmVyIGNvbmZpZ3VyYXRpb24gZmlsZQorCQlSPSIiCisJCVsgLW4gIiRkb21haW4iIF0gJiYgUj0iZG9tYWluICRkb21haW4KKyIKKwkJZm9yIGkgaW4gJGRuczsgZG8KKwkJCWVjaG8gIiQwOiBBZGRpbmcgRE5TICRpIgorCQkJUj0iJHtSfW5hbWVzZXJ2ZXIgJGkKKyIKKwkJZG9uZQorCisJCWlmIFsgLXggL3NiaW4vcmVzb2x2Y29uZiBdOyB0aGVuCisJCQllY2hvIC1uICIkUiIgfCAvc2Jpbi9yZXNvbHZjb25mIC1hICIke2ludGVyZmFjZX0udWRoY3BjIgorCQllbHNlCisJCQllY2hvIC1uICIkUiIgPiAiJFJFU09MVl9DT05GIgorCQlmaQorCQk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nIGIvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljNGQxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nCkBAIC0wLDAgKzEsNzcgQEAKKyMhIC9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDogICAgICAgICAwIDEgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogICAgU3lzdGVtIGxvZ2dlcgorIyMjIEVORCBJTklUIElORk8KKworc2V0IC1lCisKK2lmIFsgLWYgL2V0Yy9zeXNsb2ctc3RhcnR1cC5jb25mIF07IHRoZW4KKwkuIC9ldGMvc3lzbG9nLXN0YXJ0dXAuY29uZgorCUxPR19MT0NBTD0wCisJTE9HX1JFTU9URT0wCisJZm9yIEQgaW4gJERFU1RJTkFUSU9OOyBkbworCQlpZiBbICIkRCIgPSAiYnVmZmVyIiBdOyB0aGVuCisJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1DJEJVRkZFUlNJWkUiCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJmaWxlIiBdOyB0aGVuCisJCQlpZiBbIC1uICIkTE9HRklMRSIgXTsgdGhlbgorCQkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLU8gJExPR0ZJTEUiCisJCQlmaQorCQkJaWYgWyAtbiAiJFJPVEFURVNJWkUiIF07IHRoZW4KKwkJCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1zICRST1RBVEVTSVpFIgorCQkJZmkKKwkJCWlmIFsgLW4gIiRST1RBVEVHRU5TIiBdOyB0aGVuCisJCQkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtYiAkUk9UQVRFR0VOUyIKKwkJCWZpCisJCQlMT0dfTE9DQUw9MQorCQllbGlmIFsgIiREIiA9ICJyZW1vdGUiIF07IHRoZW4KKwkJCVNZU0xPR19BUkdTPSIkU1lTTE9HX0FSR1MgLVIgJFJFTU9URSIKKwkJCUxPR19SRU1PVEU9MQorCQlmaQorCWRvbmUKKwlpZiBbICIkTE9HX0xPQ0FMIiA9ICIxIiAtYSAiJExPR19SRU1PVEUiID0gIjEiIF07IHRoZW4KKwkJU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtTCIKKwlmaQorCWlmIFsgIiRSRURVQ0UiID0gInllcyIgXTsgdGhlbgorCQlTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1TIgorCWZpCisJaWYgWyAiJERST1BEVVBMSUNBVEVTIiA9ICJ5ZXMiIF07IHRoZW4KKwkgICAgU1lTTE9HX0FSR1M9IiRTWVNMT0dfQVJHUyAtRCIKKwlmaQorCWlmIFsgLW4gIiRMT0dMRVZFTCIgXTsgdGhlbgorCSAgICBTWVNMT0dfQVJHUz0iJFNZU0xPR19BUkdTIC1sICRMT0dMRVZFTCIKKwlmaQorZWxzZQorCSMgZGVmYXVsdDogbG9nIHRvIDE2SyBzaG0gY2lyY3VsYXIgYnVmZmVyCisJU1lTTE9HX0FSR1M9Ii1DIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nIHN5c2xvZ2Qva2xvZ2Q6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtYiAtbiBzeXNsb2dkIC1hIC9zYmluL3N5c2xvZ2QgLS0gLW4gJFNZU0xPR19BUkdTCisJc3RhcnQtc3RvcC1kYWVtb24gLVMgLWIgLW4ga2xvZ2QgLWEgL3NiaW4va2xvZ2QgLS0gLW4KKwllY2hvICJkb25lIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgc3lzbG9nZC9rbG9nZDogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC1uIHN5c2xvZ2QKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAtbiBrbG9nZAorCWVjaG8gImRvbmUiCisJOzsKKyAgcmVzdGFydCkKKyAgCSQwIHN0b3AKKwkkMCBzdGFydAorCTs7CisgICopCisJZWNobyAiVXNhZ2U6IHN5c2xvZyB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy1zdGFydHVwLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3N5c2xvZy1zdGFydHVwLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRhNDUwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLXN0YXJ0dXAuY29uZgpAQCAtMCwwICsxLDEzIEBACisjIFRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGlzIHVzZWQgYnkgdGhlIGJ1c3lib3ggc3lzbG9nIGluaXQgc2NyaXB0LAorIyAvZXRjL2luaXQuZC9zeXNsb2dbLmJ1c3lib3hdIHRvIHNldCBzeXNsb2cgY29uZmlndXJhdGlvbiBhdCBzdGFydCB0aW1lLgorCitERVNUSU5BVElPTj1maWxlCQkjIGxvZyBkZXN0aW5hdGlvbnMgKGJ1ZmZlciBmaWxlIHJlbW90ZSkKK0xPR0ZJTEU9L3Zhci9sb2cvbWVzc2FnZXMJIyB3aGVyZSB0byBsb2cgKGZpbGUpCitSRU1PVEU9bG9naG9zdDo1MTQJCSMgd2hlcmUgdG8gbG9nIChzeXNsb2cgcmVtb3RlKQorUkVEVUNFPW5vCQkJIyByZWR1Y2Utc2l6ZSBsb2dnaW5nCitEUk9QRFVQTElDQVRFUz1ubwkJIyB3aGV0aGVyIHRvIGRyb3AgZHVwbGljYXRlIGxvZyBlbnRyaWVzCisjUk9UQVRFU0laRT0wCQkJIyByb3RhdGUgbG9nIGlmIGdyb3duIGJleW9uZCBYIFtrQnl0ZV0KKyNST1RBVEVHRU5TPTMJCQkjIGtlZXAgWCBnZW5lcmF0aW9ucyBvZiByb3RhdGVkIGxvZ3MKK0JVRkZFUlNJWkU9NjQJCQkjIHNpemUgb2YgY2lyY3VsYXIgYnVmZmVyIFtrQnl0ZV0KK0ZPUkVHUk9VTkQ9bm8JCQkjIHJ1biBpbiBmb3JlZ3JvdW5kIChkb24ndCB1c2UhKQorI0xPR0xFVkVMPTUJCQkjIGxvY2FsIGxvZyBsZXZlbCAoYmV0d2VlbiAxIGFuZCA4KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvYnVzeWJveC9maWxlcy9zeXNsb2cuY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViYjYzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvc3lzbG9nLmNvbmYKQEAgLTAsMCArMSBAQAorIyAgL2V0Yy9zeXNsb2cuY29uZglDb25maWd1cmF0aW9uIGZpbGUgZm9yIGJ1c3lib3gncyBzeXNsb2dkIHV0aWxpdHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2J1c3lib3gvZmlsZXMvdW1vdW50LmJ1c3lib3ggYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3Vtb3VudC5idXN5Ym94Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzNzMxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9idXN5Ym94L2ZpbGVzL3Vtb3VudC5idXN5Ym94CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK2V4ZWMgL2Jpbi9idXN5Ym94IHVtb3VudCAkQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL01ha2V2YXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyNjkyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZXZhcnMKQEAgLTAsMCArMSw0MSBAQAorIyBNYWtlZmlsZSB2YXJpYWJsZXMgZm9yIFBPIGRpcmVjdG9yeSBpbiBhbnkgcGFja2FnZSB1c2luZyBHTlUgZ2V0dGV4dC4KKworIyBVc3VhbGx5IHRoZSBtZXNzYWdlIGRvbWFpbiBpcyB0aGUgc2FtZSBhcyB0aGUgcGFja2FnZSBuYW1lLgorRE9NQUlOID0gJChQQUNLQUdFKQorCisjIFRoZXNlIHR3byB2YXJpYWJsZXMgZGVwZW5kIG9uIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGRpcmVjdG9yeS4KK3N1YmRpciA9IHBvCit0b3BfYnVpbGRkaXIgPSAuLgorCisjIFRoZXNlIG9wdGlvbnMgZ2V0IHBhc3NlZCB0byB4Z2V0dGV4dC4KK1hHRVRURVhUX09QVElPTlMgPSAtLWtleXdvcmQ9XyAtLWtleXdvcmQ9Tl8KKworIyBUaGlzIGlzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBoZWFkZXIgb2YgdGhlCisjICQoRE9NQUlOKS5wb3QgZmlsZS4gIFNldCB0aGlzIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBzdXJyb3VuZGluZworIyBwYWNrYWdlLiAgKE5vdGUgdGhhdCB0aGUgbXNnc3RyIHN0cmluZ3MsIGV4dHJhY3RlZCBmcm9tIHRoZSBwYWNrYWdlJ3MKKyMgc291cmNlcywgYmVsb25nIHRvIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBwYWNrYWdlLikgIFRyYW5zbGF0b3JzIGFyZQorIyBleHBlY3RlZCB0byB0cmFuc2ZlciB0aGUgY29weXJpZ2h0IGZvciB0aGVpciB0cmFuc2xhdGlvbnMgdG8gdGhpcyBwZXJzb24KKyMgb3IgZW50aXR5LCBvciB0byBkaXNjbGFpbSB0aGVpciBjb3B5cmlnaHQuICBUaGUgZW1wdHkgc3RyaW5nIHN0YW5kcyBmb3IKKyMgdGhlIHB1YmxpYyBkb21haW47IGluIHRoaXMgY2FzZSB0aGUgdHJhbnNsYXRvcnMgYXJlIGV4cGVjdGVkIHRvIGRpc2NsYWltCisjIHRoZWlyIGNvcHlyaWdodC4KK0NPUFlSSUdIVF9IT0xERVIgPSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGlzIHRoZSBlbWFpbCBhZGRyZXNzIG9yIFVSTCB0byB3aGljaCB0aGUgdHJhbnNsYXRvcnMgc2hhbGwgcmVwb3J0CisjIGJ1Z3MgaW4gdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzOgorIyAtIFN0cmluZ3Mgd2hpY2ggYXJlIG5vdCBlbnRpcmUgc2VudGVuY2VzLCBzZWUgdGhlIG1haW50YWluZXIgZ3VpZGVsaW5lcworIyAgIGluIHRoZSBHTlUgZ2V0dGV4dCBkb2N1bWVudGF0aW9uLCBzZWN0aW9uICdQcmVwYXJpbmcgU3RyaW5ncycuCisjIC0gU3RyaW5ncyB3aGljaCB1c2UgdW5jbGVhciB0ZXJtcyBvciByZXF1aXJlIGFkZGl0aW9uYWwgY29udGV4dCB0byBiZQorIyAgIHVuZGVyc3Rvb2QuCisjIC0gU3RyaW5ncyB3aGljaCBtYWtlIGludmFsaWQgYXNzdW1wdGlvbnMgYWJvdXQgbm90YXRpb24gb2YgZGF0ZSwgdGltZSBvcgorIyAgIG1vbmV5LgorIyAtIFBsdXJhbGlzYXRpb24gcHJvYmxlbXMuCisjIC0gSW5jb3JyZWN0IEVuZ2xpc2ggc3BlbGxpbmcuCisjIC0gSW5jb3JyZWN0IGZvcm1hdHRpbmcuCisjIEl0IGNhbiBiZSB5b3VyIGVtYWlsIGFkZHJlc3MsIG9yIGEgbWFpbGluZyBsaXN0IGFkZHJlc3Mgd2hlcmUgdHJhbnNsYXRvcnMKKyMgY2FuIHdyaXRlIHRvIHdpdGhvdXQgYmVpbmcgc3Vic2NyaWJlZCwgb3IgdGhlIFVSTCBvZiBhIHdlYiBwYWdlIHRocm91Z2gKKyMgd2hpY2ggdGhlIHRyYW5zbGF0b3JzIGNhbiBjb250YWN0IHlvdS4KK01TR0lEX0JVR1NfQUREUkVTUyA9CisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29kZXBhZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29kZXBhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NzAxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb2RlcGFnZS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIvY29udHJpYi9jb2RlcGFnZS5jfmNvZGVwYWdlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb250cmliL2NvZGVwYWdlLmMKK0BAIC0yMjksNyArMjI5LDcgQEAKKyAJICByZXR1cm4gMDsKKyAKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXAorLVdhcm5pbmc6IENQIGZvcm1hdCBpcyBhIGhhY2shXG4KKytXYXJuaW5nOiBDUCBmb3JtYXQgaXMgYSBoYWNrIVxuXAorICAgICAgICAgIFRoZSBmaWxlcyBwcm9kdWNlZCBtYXkgb3IgbWF5IG5vdCBiZSB1c2FibGUhXG4iKTsKKyAKKyAJc3ByaW50ZihvdXRmaWxlLCAiJWQuY3AiLCBDUEVudHJ5SGVhZGVyLmNvZGVwYWdlKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzZjUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9zaG93a2V5LmN+Y29tcGlsZQkxOTk5LTA4LTI1IDE3OjIwOjA4LjAwMDAwMDAwMCAtMDQwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvc2hvd2tleS5jCTIwMDQtMDUtMDkgMDM6MDM6MjMuMDAwMDAwMDAwIC0wNDAwCitAQCAtMjY0LDcgKzI2NCw2IEBACisgCSAgYnJlYWs7CisgCWNhc2UgY21kX2tleW1hcDoKKyAJICBwcmludGYoIilcbiIpOworLQlkZWZhdWx0OgorIAl9CisgICAgIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1YzEwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW5+Y29uZmlndXJlCisrKysgY29uc29sZS10b29scy0wLjMuMi9jb25maWd1cmUuaW4KK0BAIC0yLDEzICsyLDE0IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgCisgIyBJbml0aWFsaXplCistQUNfSU5JVChrYmR0b29scy9sb2Fka2V5cy55KQorK0FDX0lOSVQKKytBQ19DT05GSUdfU1JDRElSKFtrYmR0b29scy9sb2Fka2V5cy55XSkKKyAKKyBkZWZpbmUoY3RfdW5pY29kZWRhdGFfZGVmYXVsdCwvdXNyL3NoYXJlL3VuaWRhdGEvVW5pY29kZURhdGEtMi50eHQpCisgY3RfbG9jYWxkYXRhZGlyX2RlZmF1bHQ9L3Vzci9sb2NhbC9zaGFyZSAgICAgIyBpZmYgLS1lbmFibGUtbG9jYWxkYXRhZGlyIHdpdGhvdXQgc3BlY2lmaWMgZGlyCisgCisgI0FDX0NPTkZJR19BVVhfRElSKGF1dG9jb25mKQorLUFDX0NBTk9OSUNBTF9TWVNURU0KKytBQ19DQU5PTklDQUxfVEFSR0VUKFtdKQorIEFNX0lOSVRfQVVUT01BS0UoY29uc29sZS10b29scywgMC4zLjIpCisgCisgIyBEZWZhdWx0cworQEAgLTI1LDcgKzI2LDYgQEAKKyAjIGkxOG4gc3R1ZmYKKyBBTExfTElOR1VBUz0iY3MgZGUgcnUgZ2EgZnIiCisgQU1fR05VX0dFVFRFWFQKKy1BQ19PVVRQVVRfQ09NTUFORFMoW3NlZCAtZSAiL1BPVEZJTEVTID0vciBwby9QT1RGSUxFUyIgcG8vTWFrZWZpbGUuaW4gPiBwby9NYWtlZmlsZV0pCisgCisgQUNfREVGSU5FX1VOUVVPVEVEKExPQ0FMRURJUiwgIi91c3Ivc2hhcmUvbG9jYWxlIikKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2MWViOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9maXgtbGliY29uc29sZS1saW5raW5nLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0ZpeCB0aGUgZm9sbG93aW5nIGVycm9yIGRldGVjdGVkIHdpdGggaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MgKHRoZQorbXVsdGlsaWIgeDg2LTY0IGxpYjMyIGNvbXBpbGVyKToKKyAgICAuLi9saWIvY3R1dGlscy8ubGlicy9saWJjdHV0aWxzLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBnZXRfa2VybmVsX3NmbScKKyAgICBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworSXQgc2VlbXMgdGhhdCBsaWJjdHV0aWxzLnNvICh0aGUgbGlicmFyeSB0aGF0IHVzZXMgZ2V0X2tlcm5lbF9zZm0pIG11c3QKK2JlIHN0YXRlZCBiZWZvcmUgbGliY29uc29sZS5zbyAodGhlIGxpYnJhcnkgdGhhdCBleHBvcnRzIHRoZSBmdW5jdGlvbikgd2hlbgordXNpbmcgbXVsdGlsaWIgZ2NjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9mb250ZmlsZXRvb2xzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY29uc29sZS10b29scy0wLjMuMi5vcmlnL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2ZvbnRmaWxldG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xMCw1ICsxMCw1IEBAIEVYVFJBX0RJU1QgPSBmb250czJ2aXJmb250LmMgdmlyZm9udC5oCisgCisgIyBsaWJjb25zb2xlIGlzIG5lZWRlZCBieSBjdHV0aWxzCisgTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEgLi4vbGliL2Nmb250L2xpYmNmb250LmxhIFwKKy0JLi4vbGliL2NvbnNvbGUvbGliY29uc29sZS5sYSBcCistCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisrCS4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIvdnR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy92dHRvb2xzL01ha2VmaWxlLmFtCisrKysgY29uc29sZS10b29scy0wLjMuMi92dHRvb2xzL01ha2VmaWxlLmFtCitAQCAtNyw5ICs3LDkgQEAgYmluX1BST0dSQU1TID0gY2h2dCBkZWFsbG9jdnQgd3JpdGV2dCBmZworIAl2Y3N0aW1lIHZ0LWlzLVVURjggb3BlbnZ0IEBSRVNJWkVDT05TQAorIEVYVFJBX1BST0dSQU1TID0gcmVzaXplY29ucworIAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIHZjc3RpbWVfTERBREQgPSAuLi9saWIvY3Rsb2NhbC9saWJjdGxvY2FsLmEKKyBzY3JlZW5kdW1wX0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9rYmR0b29scy9NYWtlZmlsZS5hbQorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xNSw5ICsxNSw5IEBAIEVYVFJBX1BST0dSQU1TID0gZ2V0a2V5Y29kZXMgc2V0a2V5Y29kZXMKKyBsb2Fka2V5c19TT1VSQ0VTID0gbG9hZGtleXMueSBhbmFseXplLmwKKyAKKyBZRkxBR1MgPSAtZAorLUxEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgXAorK0xEQUREID0gLi4vbGliL2N0bG9jYWwvbGliY3Rsb2NhbC5hIC4uL2xpYi9jdHV0aWxzL2xpYmN0dXRpbHMubGEgXAorIAkuLi9saWIvY2ZvbnQvbGliY2ZvbnQubGEgXAorLQkuLi9saWIvY3R1dGlscy9saWJjdHV0aWxzLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorKwkuLi9saWIvY29uc29sZS9saWJjb25zb2xlLmxhIC4uL2xpYi9nZW5lcmljL2xpYmN0Z2VuZXJpYy5sYQorIAorIGxvYWRrZXlzX0xEQUREID0gJChMREFERCkgQExFWExJQkAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2tiZHJhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3MGJlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9rYmRyYXRlLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1BhdGNoIGZyb20gTWF0dGhpYXMgR29lYmwgPG9lQG0uZ29lYmwubmV0PgorQWRkZWQgdmlhIE9FIGJ1Z3RyYWNrZXI6IGJ1ZyAjNDc4CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9rYmR0b29scy9rYmRfbW9kZS5jLm9yaWcKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL2tiZF9tb2RlLmMKK0BAIC0yOSwxMSArMjksMTYgQEAKKyAgIE9QVCgiLXUgLS11bmljb2RlICAiLCBfKCJVVEYtOCBtb2RlIChVTklDT0RFKSIpKTsKKyAgIE9QVCgiLXMgLS1zY2FuY29kZSAiLCBfKCJzY2FuY29kZSBtb2RlIChSQVcpIikpOworICAgT1BUKCIgICAtLW1vZGU9ezhiaXQsa2V5Y29kZSx1bmljb2RlLHNjYW5jb2RlfSAiLCBfKCJzZXQgbW9kZSIpKTsKKysgIE9QVCgiLXIgLS1yYXRlPVJBVEUgIiwgXygic2V0IHJlcGVhdCByYXRlIChkZWZhdWx0OiAzMykiKSk7CisrICBPUFQoIi1kIC0tZGVsYXk9REVMQVkgIiwgXygic2V0IHJlcGVhdCBkZWxheSAoZGVmYXVsdDogMjUwKSIpKTsKKyAKKyAgIE9QVCgiLWggLS1oZWxwICAgICAiLCBIRUxQREVTQyk7CisgICBPUFQoIi1WIC0tdmVyc2lvbiAgIiwgVkVSU0lPTkRFU0MpOworIH0KKyAKKytpbnQgcmF0ZT0tMTsKKytpbnQgZGVsYXk9LTE7CisrCisgc3RhdGljIGludCBwYXJzZV9jbWRsaW5lIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICAgaW50IG1vZGUgPSAtMTsKK0BAIC00NiwxMSArNTEsMTMgQEAKKyAgICAgICB7ICJtb2RlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ20nIH0sCisgICAgICAgeyAic2NhbmNvZGUiICwgbm9fYXJndW1lbnQsIE5VTEwsICdzJyB9LAorICAgICAgIHsgInVuaWNvZGUiICAsIG5vX2FyZ3VtZW50LCBOVUxMLCAndScgfSwKKysgICAgICB7ICJyYXRlIiAgICAgLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3InIH0sCisrICAgICAgeyAiZGVsYXkiICAgICwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdkJyB9LAorICAgICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9CisgICAgIH07CisgICAgIGludCBjOworIAorLSAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3UiLCBsb25nX29wdHMsIE5VTEwpKSAhPSBFT0YpIAorKyAgICB3aGlsZSAoIChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJWaGFrc3VyOmQ6IiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gRU9GKSAKKyAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICBjYXNlICdoJzoKKyAJdXNhZ2UgKCk7CitAQCAtNTgsNiArNjUsMTQgQEAKKyAgICAgICBjYXNlICdWJzoKKyAJdmVyc2lvbiAoKTsKKyAJZXhpdCgwKTsKKysgICAgICBjYXNlICdyJzoKKysJcmF0ZSA9IGF0b2kob3B0YXJnKTsKKysJbW9kZSA9IC0yOworKwlicmVhazsKKysgICAgICBjYXNlICdkJzoKKysJZGVsYXkgPSBhdG9pKG9wdGFyZyk7CisrCW1vZGUgPSAtMjsKKysJYnJlYWs7CisgICAgICAgY2FzZSAnYSc6CisgCW1vZGUgPSBLX1hMQVRFOworIAlicmVhazsKK0BAIC0xMjksNiArMTQ0LDIwIEBACisgICAgICAgZXhpdCgwKTsKKyAgICAgfQorICAgCisrICBpZiAoIHJhdGUgIT0gLTEgfHwgZGVsYXkgIT0gLTEgKQorKyAgICB7CisrICAgIHN0cnVjdCBrYmRfcmVwZWF0IGtiZF9yZXA7CisrICAgIGtiZF9yZXAuZGVsYXkgPSBkZWxheTsKKysgICAga2JkX3JlcC5wZXJpb2QgPSByYXRlOworKyAgICBpZiAoaW9jdGwoZmQsIEtES0JEUkVQLCAma2JkX3JlcCkpCisrICAgICAgeworKwlmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOworKwlwZXJyb3IoXygiOiBlcnJvciBzZXR0aW5nIGtleWJvYXJkIHJlcGVhdCBtb2RlXG4iKSk7CisrCWV4aXQoMSk7CisrICAgICAgfQorKyAgICBpZihtb2RlPT0tMikgZXhpdCgwKTsKKysgICAgfQorKyAgCisgICBpZiAoaW9jdGwoZmQsIEtEU0tCTU9ERSwgbW9kZSkpCisgICAgIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgcHJvZ25hbWUpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL2xjbWVzc2FnZS5tNCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9sY21lc3NhZ2UubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkNDdhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9sY21lc3NhZ2UubTQKQEAgLTAsMCArMSwyNCBAQAorIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorIyBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKyMKKyMgVGhpcyBmaWxlIGNhbiBiZSBjb3BpZWQgYW5kIHVzZWQgZnJlZWx5IHdpdGhvdXQgcmVzdHJpY3Rpb25zLiAgSXQgY2FuCisjIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50CisjIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0IGZ1bmN0aW9uYWxpdHkuCisjIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKyMgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisjIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorIyBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworIyBzZXJpYWwgMgorCitBQ19ERUZVTihbQU1fTENfTUVTU0FHRVNdLAorICBbaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2xvY2FsZV9oID0geWVzOyB0aGVuCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKyAgICAgIFtBQ19UUllfTElOSyhbI2luY2x1ZGUgPGxvY2FsZS5oPl0sIFtyZXR1cm4gTENfTUVTU0FHRVNdLAorICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorICAgIGlmIHRlc3QgJGFtX2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisgICAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorICAgIGZpCisgIGZpXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi9uby1kZXAtb24tbGliZmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm8tZGVwLW9uLWxpYmZsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NzM1YTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm8tZGVwLW9uLWxpYmZsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK05vIHJlYXNvbiB0byBsaW5rIHdpdGggbGliZmwgc2luY2UgJ2xvYWRrZXlzJyBpbXBsZW1lbnRzCitpdHMgb3duIHl5d3JhcCgpL3l5bGV4KCkgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEphY29iIEtyb29uIDxqYWNvYi5rcm9vbkBtaWtyb2RpZGFrdC5zZT4KKworSW5kZXg6IGNvbnNvbGUtdG9vbHMtMC4zLjIva2JkdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yLm9yaWcva2JkdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2tiZHRvb2xzL01ha2VmaWxlLmFtCitAQCAtMTksOCArMTksNiBAQCBMREFERCA9IC4uL2xpYi9jdGxvY2FsL2xpYmN0bG9jYWwuYSAuLi9sCisgCS4uL2xpYi9jZm9udC9saWJjZm9udC5sYSBcCisgCS4uL2xpYi9jb25zb2xlL2xpYmNvbnNvbGUubGEgLi4vbGliL2dlbmVyaWMvbGliY3RnZW5lcmljLmxhCisgCistbG9hZGtleXNfTERBREQgPSAkKExEQUREKSBATEVYTElCQAorLQorIGJpbl9TQ1JJUFRTID0gbWtfbW9kbWFwCisgCisgbm9pbnN0X0hFQURFUlMgPSBsb2Fka2V5cy5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvbm9kb2NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vZG9jcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ2MDkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzLTAuMy4yL25vZG9jcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitUaGUgZG9jcyBuZWVkIHRvb2xzIHdlIGRvbid0IGhhdmUgdG8gYnVpbGQgc28gZGlzYWJsZSB0aGVtLgorCitBbHNvIHJlbW92ZSBpbnRsIHNpbmNlIHRoZSBNYWtlZmlsZSBkb2Vzbid0IHdvcmsgd2l0aCAzLjgyIGFuZCB3ZQorZG9uJ3Qgd2FudCB0byBidWlsZCBsaWJpbnRsIGFueXdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorUlAgMjAxMi8xMC8xNworCitJbmRleDogY29uc29sZS10b29scy0wLjMuMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbnNvbGUtdG9vbHMtMC4zLjIub3JpZy9NYWtlZmlsZS5hbQkxOTk5LTA0LTE1IDAxOjMzOjI0LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvTWFrZWZpbGUuYW0JMjAxMi0xMC0xNyAxMTo0ODoxNC4xMDcwNjkxNDUgKzAwMDAKK0BAIC0xLDcgKzEsNyBAQAorICMgLSotIG1ha2VmaWxlIC0qLQorIEFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCisgCistU1VCRElSUyA9IGxpYiBmb250ZmlsZXRvb2xzIHZ0dG9vbHMga2JkdG9vbHMgc2NyZWVuZm9udHRvb2xzIGNvbnRyaWIgZG9jIFwKKy0JY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8gaW50bAorK1NVQkRJUlMgPSBsaWIgZm9udGZpbGV0b29scyB2dHRvb2xzIGtiZHRvb2xzIHNjcmVlbmZvbnR0b29scyBjb250cmliIFwKKysJY29tcGF0IGluY2x1ZGUgZXhhbXBsZXMgcG8KKyAKKyBFWFRSQV9ESVNUID0gQlVHUyBSRUxFQVNFIENSRURJVFMgQ09QWUlORy5rYmQgbG9jYWwtc2NyaXB0cy8qIGRlYmlhbi8qICoubHNtCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29scy0wLjMuMi91Y2xpYmMtZmlsZW5vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTUwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb25zb2xlLXRvb2xzL2NvbnNvbGUtdG9vbHMtMC4zLjIvdWNsaWJjLWZpbGVuby5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGaXhpbmcgdGhlIGxvY2FsZSBpc3N1ZXMgaXNuJ3QgZW5vdWdoLCBjb25zb2xlLXRvb2xzIGFsc28gZG9lcyBhIGNvdXBsZSBvZgorb3RoZXIgcHJldHR5IHN0dXBpZCB0aGluZ3MgKGxpa2UgRklMRSAqZjsgZi0+X2ZpbGVubyBpbnN0ZWFkIG9mIGZpbGVubyhmKSksCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY2ZvbnQvZm9udHN0cnVjdC5jLmFyawkyMDA1LTA1LTIyIDE5OjEyOjM4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGUtdG9vbHMtMC4zLjIvbGliL2Nmb250L2ZvbnRzdHJ1Y3QuYwkyMDA1LTA1LTIyIDE5OjEzOjIzLjAwMDAwMDAwMCArMDAwMAorQEAgLTUwLDggKzUwLDcgQEAKKyAgICAqIGdldCBmaWxlc2l6ZQorICAgICovCisgICAKKy0gIC8qIEZJWE1FOiBzaG91bGQgbm90IHVzZSBfZmlsZW5vICEgKi8KKy0gIGlmIChmc3RhdChmb250ZmlsZS0+X2ZpbGVubywgJnN0YnVmKSA9PSAtMSkKKysgIGlmIChmc3RhdChmaWxlbm8oZm9udGZpbGUpLCAmc3RidWYpID09IC0xKQorICAgICBnb3RvIHJzZl9yZXR1cm5fZXJyb3I7CisgICAKKyAgIGlmIChTX0lTUkVHKHN0YnVmLnN0X21vZGUpKQorQEAgLTIxMSw4ICsyMTAsNyBAQAorICAgICogZ2V0IGZpbGVzaXplCisgICAgKi8KKyAgIAorLSAgLyogRklYTUU6IHNob3VsZCBub3QgdXNlIF9maWxlbm8gISAqLworLSAgaWYgKGZzdGF0KGZvbnRmaWxlLT5fZmlsZW5vLCAmc3RidWYpID09IC0xKQorKyAgaWYgKGZzdGF0KGZpbGVubyhmb250ZmlsZSksICZzdGJ1ZikgPT0gLTEpCisgICAgIGdvdG8gcmZnX3JldHVybl9lcnJvcjsKKyAgIAorICAgaWYgKFNfSVNSRUcoc3RidWYuc3RfbW9kZSkpCistLS0gY29uc29sZS10b29scy0wLjMuMi9saWIvY29uc29sZS9hY20uYy5hcmsJMjAwNS0wNS0yMiAxOToxNzoxNS4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb25zb2xlLXRvb2xzLTAuMy4yL2xpYi9jb25zb2xlL2FjbS5jCTIwMDUtMDUtMjIgMTk6MTc6MjMuMDAwMDAwMDAwICswMDAwCitAQCAtMzAsNyArMzAsNyBAQAorICAgbGN0X2Jvb2xlYW4gcGFyc2VfZmFpbGVkID0gRmFsc2U7CisgICBsY3RfYm9vbGVhbiBpc191bmljb2RlOworIAorLSAgaWYgKGZzdGF0KGZwLT5fZmlsZW5vLCAmc3RidWYpKSAKKysgIGlmIChmc3RhdChmaWxlbm8oZnApLCAmc3RidWYpKSAKKyAgICAgcGVycm9yKF8oIkNhbm5vdCBzdGF0IEFDTSBmaWxlIikpLCBleGl0KDEpOworIAorICAgLyogZmlyc3QgdHJ5IGEgd2cxNS1jaGFybWFwIChnbGliYykgZmlsZSBmb3JtYXQgKi8KKy0tLSBjb25zb2xlLXRvb2xzLTAuMy4yL2luY2x1ZGUvbGN0L2xvY2FsLmguYXJrCTIwMDUtMDUtMjIgMTk6MDg6NTQuMDAwMDAwMDAwICswMDAwCisrKysgY29uc29sZS10b29scy0wLjMuMi9pbmNsdWRlL2xjdC9sb2NhbC5oCTIwMDUtMDUtMjIgMTk6MDk6MTIuMDAwMDAwMDAwICswMDAwCitAQCAtOCw3ICs4LDcgQEAKKyAjaW5jbHVkZSA8bG9jYWxlLmg+CisgCisgCistI2lmZGVmIEhBVkVfTE9DQUxFX0gKKysjaWYgZGVmaW5lZChIQVZFX0xPQ0FMRV9IKSAmJiBkZWZpbmVkKEhBVkVfTElCSU5UTF9IKQorICMgaW5jbHVkZSA8bGliaW50bC5oPgorICMgZGVmaW5lIF8oU3RyaW5nKSBnZXR0ZXh0IChTdHJpbmcpCisgIyBpZmRlZiBnZXR0ZXh0X25vb3AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29sc18wLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2NvbnNvbGUtdG9vbHMvY29uc29sZS10b29sc18wLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBhNWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29uc29sZS10b29scy9jb25zb2xlLXRvb2xzXzAuMy4yLmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLmtiZDttZDU9OWIyZDkxNTExZDNkODBkNGQyMGFjNmU2YjAxMzdmZTkiCitTVU1NQVJZID0gIkFsbG93cyB5b3UgdG8gc2V0LXVwIGFuZCBtYW5pcHVsYXRlIHRoZSBMaW51eCBjb25zb2xlIgorREVTQ1JJUFRJT04gPSAiUHJvdmlkZXMgdG9vbHMgdGhhdCBlbmFibGUgdGhlIHNldC11cCBhbmQgbWFuaXB1bGF0aW9uIG9mIHRoZSBsaW51eCBjb25zb2xlIGFuZCBjb25zb2xlLWZvbnQgZmlsZXMuIgorUFIgPSAicjgiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xjdC9jb25zb2xlLXRvb2xzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb2RlcGFnZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tcGlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9rYmRyYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VjbGliYy1maWxlbm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9kb2NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1saWJjb25zb2xlLWxpbmtpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm8tZGVwLW9uLWxpYmZsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xjbWVzc2FnZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gImJmMjE1NjRmYzM4YjNhZjg1M2VmNzI0YmFiZGRiYWNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlYTZiNDQxNjcyZGFjZDI1MTA3OWZjODVlZDMyMmUxOTYyODJlMGU2NmMxNjMwM2VjNjRjM2EyYjFjMTI2YzIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke1N9L200CisJY3AgJHtXT1JLRElSfS9sY21lc3NhZ2UubTQgJHtTfS9tNC8KKwlybSAtZiAke1N9L2FjaW5jbHVkZS5tNAorCWNwICR7V09SS0RJUn0vTWFrZXZhcnMgJHtTfS9wby8KK30KKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworYmluZGlyX3Byb2dzID0gImNodnQgZGVhbGxvY3Z0IGZnY29uc29sZSBvcGVudnQiCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30iCisKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy02LjktY3AtaS11LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTJiNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaApAQCAtMCwwICsxLDEyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0tCisKK1doZW4gImNwIC1pIC0tdXBkYXRlIG9sZCBuZXciIHdvdWxkIGRvIG5vdGhpbmcgYmVjYXVzZSAibmV3IiBpcworbmV3ZXIgdGhhbiAib2xkIiwgY3Agd291bGQgbm9uZXRoZWxlc3MgcHJvbXB0IGZvciB3aGV0aGVyIGl0IGlzCitvayB0byBvdmVyd3JpdGUgIm5ldyIuICBUaGVuLCByZWdhcmRsZXNzIG9mIHRoZSByZXNwb25zZSAoYmVjYXVzZQorb2YgdGhlIC0tdXBkYXRlIG9wdGlvbiksIGNwIHdvdWxkIGRvIG5vdGhpbmcuCisKK1RoZSBmb2xsb3dpbmcgcGF0Y2ggZWxpbWluYXRlcyB0aGUgdW5uZWNlc3NhcnkgcHJvbXB0IGluIHRoYXQgY2FzZS4KKworZGlmZiAtLWdpdCBhL3NyYy9jb3B5LmMgYi9zcmMvY29weS5jCitpbmRleCBiN2JmNzNiLi4wZTU0OWQyIDEwMDY0NAorLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEyMTAsNiArMTIxMCwzMCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCSAgICAgIHJldHVybiBmYWxzZTsKKyAJICAgIH0KKworKwkgIGlmICghU19JU0RJUiAoc3JjX21vZGUpICYmIHgtPnVwZGF0ZSkKKysJICAgIHsKKysJICAgICAgLyogV2hlbiBwcmVzZXJ2aW5nIHRpbWUgc3RhbXBzIChidXQgbm90IG1vdmluZyB3aXRoaW4gYSBmaWxlCisrCQkgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKysJCSBsZXNzIHRoYW4gdGhlIHNvdXJjZSBtZXJlbHkgYmVjYXVzZSBvZiB0aW1lIHN0YW1wCisrCQkgdHJ1bmNhdGlvbi4gICovCisrCSAgICAgIGludCBvcHRpb25zID0gKCh4LT5wcmVzZXJ2ZV90aW1lc3RhbXBzCisrCQkJICAgICAgJiYgISAoeC0+bW92ZV9tb2RlCisrCQkJCSAgICAmJiBkc3Rfc2Iuc3RfZGV2ID09IHNyY19zYi5zdF9kZXYpKQorKwkJCSAgICAgPyBVVElNRUNNUF9UUlVOQ0FURV9TT1VSQ0UKKysJCQkgICAgIDogMCk7CisrCisrCSAgICAgIGlmICgwIDw9IHV0aW1lY21wIChkc3RfbmFtZSwgJmRzdF9zYiwgJnNyY19zYiwgb3B0aW9ucykpCisrCQl7CisrCQkgIC8qIFdlJ3JlIHVzaW5nIC0tdXBkYXRlIGFuZCB0aGUgZGVzdGluYXRpb24gaXMgbm90IG9sZGVyCisrCQkgICAgIHRoYW4gdGhlIHNvdXJjZSwgc28gZG8gbm90IGNvcHkgb3IgbW92ZS4gIFByZXRlbmQgdGhlCisrCQkgICAgIHJlbmFtZSBzdWNjZWVkZWQsIHNvIHRoZSBjYWxsZXIgKGlmIGl0J3MgbXYpIGRvZXNuJ3QKKysJCSAgICAgZW5kIHVwIHJlbW92aW5nIHRoZSBzb3VyY2UgZmlsZS4gICovCisrCQkgIGlmIChyZW5hbWVfc3VjY2VlZGVkKQorKwkJICAgICpyZW5hbWVfc3VjY2VlZGVkID0gdHJ1ZTsKKysJCSAgcmV0dXJuIHRydWU7CisrCQl9CisrCSAgICB9CisrCisgCSAgLyogV2hlbiB0aGVyZSBpcyBhbiBleGlzdGluZyBkZXN0aW5hdGlvbiBmaWxlLCB3ZSBtYXkgZW5kIHVwCisgCSAgICAgcmV0dXJuaW5nIGVhcmx5LCBhbmQgaGVuY2Ugbm90IGNvcHlpbmcvbW92aW5nIHRoZSBmaWxlLgorIAkgICAgIFRoaXMgbWF5IGJlIGR1ZSB0byBhbiBpbnRlcmFjdGl2ZSBgbmVnYXRpdmUnIHJlcGx5IHRvIHRoZQorQEAgLTEzMDIsMzAgKzEzMjYsNiBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCQkgICAgICByZXR1cm4gZmFsc2U7CisgCQkgICAgfQorIAkJfQorLQorLQkgICAgICBpZiAoeC0+dXBkYXRlKQorLQkJeworLQkJICAvKiBXaGVuIHByZXNlcnZpbmcgdGltZSBzdGFtcHMgKGJ1dCBub3QgbW92aW5nIHdpdGhpbiBhIGZpbGUKKy0JCSAgICAgc3lzdGVtKSwgZG9uJ3Qgd29ycnkgaWYgdGhlIGRlc3RpbmF0aW9uIHRpbWUgc3RhbXAgaXMKKy0JCSAgICAgbGVzcyB0aGFuIHRoZSBzb3VyY2UgbWVyZWx5IGJlY2F1c2Ugb2YgdGltZSBzdGFtcAorLQkJICAgICB0cnVuY2F0aW9uLiAgKi8KKy0JCSAgaW50IG9wdGlvbnMgPSAoKHgtPnByZXNlcnZlX3RpbWVzdGFtcHMKKy0JCQkJICAmJiAhICh4LT5tb3ZlX21vZGUKKy0JCQkJCSYmIGRzdF9zYi5zdF9kZXYgPT0gc3JjX3NiLnN0X2RldikpCistCQkJCSA/IFVUSU1FQ01QX1RSVU5DQVRFX1NPVVJDRQorLQkJCQkgOiAwKTsKKy0KKy0JCSAgaWYgKDAgPD0gdXRpbWVjbXAgKGRzdF9uYW1lLCAmZHN0X3NiLCAmc3JjX3NiLCBvcHRpb25zKSkKKy0JCSAgICB7CistCQkgICAgICAvKiBXZSdyZSB1c2luZyAtLXVwZGF0ZSBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG5vdCBvbGRlcgorLQkJCSB0aGFuIHRoZSBzb3VyY2UsIHNvIGRvIG5vdCBjb3B5IG9yIG1vdmUuICBQcmV0ZW5kIHRoZQorLQkJCSByZW5hbWUgc3VjY2VlZGVkLCBzbyB0aGUgY2FsbGVyIChpZiBpdCdzIG12KSBkb2Vzbid0CistCQkJIGVuZCB1cCByZW1vdmluZyB0aGUgc291cmNlIGZpbGUuICAqLworLQkJICAgICAgaWYgKHJlbmFtZV9zdWNjZWVkZWQpCistCQkJKnJlbmFtZV9zdWNjZWVkZWQgPSB0cnVlOworLQkJICAgICAgcmV0dXJuIHRydWU7CistCQkgICAgfQorLQkJfQorIAkgICAgfQorCisgCSAgaWYgKHgtPm1vdmVfbW9kZSkKK2RpZmYgLS1naXQgYS90ZXN0cy9tdi91cGRhdGUgYi90ZXN0cy9tdi91cGRhdGUKK2luZGV4IDBjMDYwMjQuLjZjM2QxNDkgMTAwNzU1CistLS0gYS90ZXN0cy9tdi91cGRhdGUKKysrKyBiL3Rlc3RzL212L3VwZGF0ZQorQEAgLTEsNyArMSw3IEBACisgIyEvYmluL3NoCisgIyBtYWtlIHN1cmUgLS11cGRhdGUgd29ya3MgYXMgYWR2ZXJ0aXNlZAorCistIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDQsIDIwMDYtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CitAQCAtNDYsMTEgKzQ2LDE2IEBAIGZpCisKKyBmYWlsPTAKKworLWZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKy0gICMgVGhpcyBpcyBhIG5vLW9wLgorLSAgJGNwX29yX212IC0tdXBkYXRlIG9sZCBuZXcgfHwgZmFpbD0xCistICBjYXNlICJgY2F0IG5ld2AiIGluIG5ldykgOzsgKikgZmFpbD0xIDs7IGVzYWMKKy0gIGNhc2UgImBjYXQgb2xkYCIgaW4gb2xkKSA7OyAqKSBmYWlsPTEgOzsgZXNhYworK2ZvciBpbnRlcmFjdGl2ZSBpbiAnJyAtaTsgZG8KKysgIGZvciBjcF9vcl9tdiBpbiBjcCBtdjsgZG8KKysgICAgIyBUaGlzIGlzIGEgbm8tb3AsIHdpdGggbm8gcHJvbXB0LgorKyAgICAjIFdpdGggY29yZXV0aWxzLTYuOSBhbmQgZWFybGllciwgdXNpbmcgLS11cGRhdGUgd2l0aCAtaSB3b3VsZAorKyAgICAjIG1pc3Rha2VubHkgZWxpY2l0IGEgcHJvbXB0LgorKyAgICAkY3Bfb3JfbXYgJGludGVyYWN0aXZlIC0tdXBkYXRlIG9sZCBuZXcgPCAvZGV2L251bGwgPiBvdXQgMj4mMSB8fCBmYWlsPTEKKysgICAgdGVzdCAtcyBvdXQgJiYgZmFpbD0xCisrICAgIGNhc2UgImBjYXQgbmV3YCIgaW4gbmV3KSA7OyAqKSBmYWlsPTEgOzsgZXNhYworKyAgICBjYXNlICJgY2F0IG9sZGAiIGluIG9sZCkgOzsgKikgZmFpbD0xIDs7IGVzYWMKKysgIGRvbmUKKyBkb25lCisKKyAjIFRoaXMgd2lsbCBhY3R1YWxseSBwZXJmb3JtIHRoZSByZW5hbWUuCistLQorMS41LjMucmMxLjE2Lmc5ZDZmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtYnVpbGQtd2l0aC1hY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3M2Q3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXggdGhlIGZvbGxvd2luZyBpc3N1ZSBzbyB0aGF0IGNvcmV1dGlscyBjYW4gYnVpbGQgd2l0aCBBQ0w6CisKK2NvbmZpZ3VyZTogV0FSTklORzogbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3VuZCBvciBub3QgdXNhYmxlLgorY29uZmlndXJlOiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC4KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2FjbC5tNCB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L2FjbC5tNCBiL200L2FjbC5tNAoraW5kZXggZDZhNDQ4YS4uYTlkNDgzNiAxMDA2NDQKKy0tLSBhL200L2FjbC5tNAorKysrIGIvbTQvYWNsLm00CitAQCAtMTU5LDcgKzE1OSw3IEBAIEFDX0RFRlVOKFtnbF9BQ0xfR0VUX0ZJTEVdLAorICAgICAgICAgICBdXSldLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT15ZXNdLAorICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZT1ub10sCistICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBpbGluZ10pXSkKKysgICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGU9eWVzXSldKQorIAorICAgQVNfSUYoW3Rlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXNdLCBbJDFdLCBbJDJdKQorIF0pCistLSAKKzEuNy43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGY2MWZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCitUaGUgaW5zdGFsbCBjb21tYW5kIGRvZXNuJ3Qgb3ZlciB3cml0ZSB0aGUgZGFuZ2xpbmcgc3ltbGluaywgZm9yCitleGFtcGxlOgorCiskIGluc3RhbGwgZmlsZUEgL3RtcC9maWxlQQorCitJZiAvdG1wL2ZpbGVBIGlzIGEgZGFuZ2xpbmcgc3ltbGluaywgdGhlcmUgd291bGQgYmUgYW4gZXJyb3I6CisKK2luc3RhbGw6IGNhbm5vdCBjcmVhdGUgcmVndWxhciBmaWxlICcvdG1wL2ZpbGVBJzogRmlsZSBleGlzdHMKKworVGhpcyBpcyBiZWNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBjb3B5LmM6CisKKyAgaWYgKCFuZXdfZHN0KQorICAgIHsKKyAgICAgIGlmIChYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXJybm8gIT0gRU5PRU5UKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnJvciAoMCwgZXJybm8sIF8oImNhbm5vdCBzdGF0ICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBuZXdfZHN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCitYU1RBVCgpIHVzZSBzdGF0KCkgZm9yIGRzdF9uYW1lKHRoZSBkYW5nbGluZyBzeW1saW5rIC90bXAvZmlsZUEpIHdoZW4KK2luc3RhbGwuYyBpbnZva2VzIGl0LCBhbmQgc3RhdCB3aWxsIHNldCBlcnJubyB0byBFTk9FTlQsIGFuZCB0aGVuCituZXdfZHN0IHdpbGwgYmUgc2V0IHRvIHRydWUgd2hpY2ggbWVhbnMgdGhhdCAvdG1wL2ZpbGVBIGRvZXNuJ3QgZXhpc3QsCit0aGVuIHdlIHdpbGwgY3JlYXRlIC90bXAvZmlsZUEgd2l0aG91dCByZW1vdmUgaXQgZmlyc3QsIHNvIHRoZSBlcnJvcgorY29tZXMuCisKK1RoaXMgaXMgZml4ZWQgaW4gYSB3YXkgd2hpY2ggYWRkcyB0aGUgbWVtYmVyIGNtZF9pbnN0YWxsIGluCitzdHJ1Y3QgY3Bfb3B0aW9ucyB0byBtYWtlIHN1cmUgbXkgY2hhbmdlIG9ubHkgYWZmZWN0ZWQgdG8gdGhlIGluc3RhbGwKK2NvbW1hbmQgYW5kIHVzZSBsc3RhdCB0byBmaXggdGhlIHByb2JsZW0uCisgICAgCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL2NvcHkuYyAgICB8ICAgMTAgKysrKysrKysrLQorIHNyYy9jb3B5LmggICAgfCAgICAzICsrKworIHNyYy9pbnN0YWxsLmMgfCAgICAxICsKKyAzIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29weS5jIGIvc3JjL2NvcHkuYworLS0tIGEvc3JjL2NvcHkuYworKysrIGIvc3JjL2NvcHkuYworQEAgLTEwMjksNiArMTAyOSw3IEBAIGNvcHlfaW50ZXJuYWwgKGNoYXIgY29uc3QgKnNyY19uYW1lLCBjaGFyIGNvbnN0ICpkc3RfbmFtZSwKKyAgIGJvb2wgZGVsYXllZF9vazsKKyAgIGJvb2wgY29waWVkX2FzX3JlZ3VsYXIgPSBmYWxzZTsKKyAgIGJvb2wgcHJlc2VydmVfbWV0YWRhdGE7CisrICBpbnQgZHN0X3N0YXRfcmVzdWx0OworIAorICAgaWYgKHgtPm1vdmVfbW9kZSAmJiByZW5hbWVfc3VjY2VlZGVkKQorICAgICAqcmVuYW1lX3N1Y2NlZWRlZCA9IGZhbHNlOworQEAgLTEwNjksNyArMTA3MCwxNCBAQCBjb3B5X2ludGVybmFsIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgCisgICBpZiAoIW5ld19kc3QpCisgICAgIHsKKy0gICAgICBpZiAoWFNUQVQgKHgsIGRzdF9uYW1lLCAmZHN0X3NiKSAhPSAwKQorKyAgICAgIGlmICggeC0+Y21kX2luc3RhbGwgJiYgKCB4LT5iYWNrdXBfdHlwZSA9PSBub19iYWNrdXBzKSkKKysgICAgICAgIGRzdF9zdGF0X3Jlc3VsdCA9IGxzdGF0IChkc3RfbmFtZSwgJmRzdF9zYik7CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBkc3Rfc3RhdF9yZXN1bHQgPSBYU1RBVCAoeCwgZHN0X25hbWUsICZkc3Rfc2IpOworKyAgICAgICAgfQorKworKyAgICAgIGlmIChkc3Rfc3RhdF9yZXN1bHQgIT0gMCkKKyAJeworIAkgIGlmIChlcnJubyAhPSBFTk9FTlQpCisgCSAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuaCBiL3NyYy9jb3B5LmgKKy0tLSBhL3NyYy9jb3B5LmgKKysrKyBiL3NyYy9jb3B5LmgKK0BAIC0xMTQsNiArMTE0LDkgQEAgc3RydWN0IGNwX29wdGlvbnMKKyAgICAgIElmIHRoYXQgZmFpbHMsIHRoZW4gcmVzb3J0IHRvIGNvcHlpbmcuICAqLworICAgYm9vbCBtb3ZlX21vZGU7CisgCisrICAvKiBGb3IgdGhlIGluc3RhbGwgY29tbWFuZCAqLworKyAgYm9vbCBjbWRfaW5zdGFsbDsKKysKKyAgIC8qIFdoZXRoZXIgdGhpcyBwcm9jZXNzIGhhcyBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIHRvIGNob3duIGEgZmlsZQorICAgICAgd2hvc2Ugb3duZXIgaXMgbm90IHRoZSBlZmZlY3RpdmUgdXNlciBJRC4gICovCisgICBib29sIGNob3duX3ByaXZpbGVnZXM7CitkaWZmIC0tZ2l0IGEvc3JjL2luc3RhbGwuYyBiL3NyYy9pbnN0YWxsLmMKKy0tLSBhL3NyYy9pbnN0YWxsLmMKKysrKyBiL3NyYy9pbnN0YWxsLmMKK0BAIC0xNDksNiArMTQ5LDcgQEAgY3Bfb3B0aW9uX2luaXQgKHN0cnVjdCBjcF9vcHRpb25zICp4KQorICAgeC0+aGFyZF9saW5rID0gZmFsc2U7CisgICB4LT5pbnRlcmFjdGl2ZSA9IElfVU5TUEVDSUZJRUQ7CisgICB4LT5tb3ZlX21vZGUgPSBmYWxzZTsKKysgIHgtPmNtZF9pbnN0YWxsID0gdHJ1ZTsKKyAgIHgtPmNob3duX3ByaXZpbGVnZXMgPSBjaG93bl9wcml2aWxlZ2VzICgpOworICAgeC0+b25lX2ZpbGVfc3lzdGVtID0gZmFsc2U7CisgICB4LT5wcmVzZXJ2ZV9vd25lcnNoaXAgPSBmYWxzZTsKKy0tIAorMS43LjAuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlNWEyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1maXgtdGV4aW5mby5wYXRjaApAQCAtMCwwICsxLDM3NSBAQAorRnJvbSAxNzBiZTQwMjNiYmY5ZTk2OThhNzA5ZTAzMjY1OTQ1NTg4YWM4ZTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI2IE5vdiAyMDEzIDAwOjIxOjUwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvYy9jb3JldXRpbHMudGV4aTogVXNlICdAaXRlbScgaW5zdGVhZCBvZiAnQGl0ZW14JworCitVc2UgJ0BpdGVtJyBpbnN0ZWFkIG9mICdAaXRlbXgnIGluIHNldmVyYWwgcGxhY2VzLCBhcyBUZXhpbmZvIDUgcmVmdXNlcwordG8gcHJvY2VzcyBhbiAnQGl0ZW14JyB0aGF0IGlzIG5vdCBwcmVjZWRlZCBieSBhbiAnQGl0ZW0nLiAgRW5zdXJlIHRoYXQKK25vZGUgZXh0ZW5kZWQgbmFtZXMgaW4gbWVudXMgYW5kIHNlY3Rpb25pbmcgYXJlIGNvbnNpc3RlbnQsIGFuZCB0aGF0CitvcmRlcmluZyBhbmQgcHJlc2VuY2Ugb2Ygbm9kZXMgaW4gbWVudXMgYW5kIGluIHRoZSBhY3R1YWwgdGV4dCBhcmUKK2NvbnNpc3RlbnQgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbRnJvbTogY29yZXV0aWxzLjc2MjAubjcubmFiYmxlLmNvbSwgYnVnIzExODI4XQorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9jb3JldXRpbHMudGV4aSB8IDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2RvYy9jb3JldXRpbHMudGV4aSBiL2RvYy9jb3JldXRpbHMudGV4aQoraW5kZXggNTg4MTQ3Zi4uMmRhZTNmZSAxMDA2NDQKKy0tLSBhL2RvYy9jb3JldXRpbHMudGV4aQorKysrIGIvZG9jL2NvcmV1dGlscy50ZXhpCitAQCAtNTU1LDcgKzU1NSw3IEBAIHN5bWJvbGljIGxpbmsgdG8gYSBkaXJlY3RvcnkuICBAeHJlZntUYXJnZXQgZGlyZWN0b3J5fS4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFNpCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TX0gZm9yCitAQCAtNTc4LDcgKzU3OCw3IEBAIFVzZSB0aGUgQG9wdGlvbnstLXNpfSBvcHRpb24gaWYgeW91IHByZWZlciBwb3dlcnMgb2YgMTAwMC4KKyBAZW5kIG1hY3JvCisgCisgQG1hY3JvIG9wdFN0cmlwVHJhaWxpbmdTbGFzaGVzCistQGl0ZW14IEB3e0BrYmR7LS1zdHJpcC10cmFpbGluZy1zbGFzaGVzfX0KKytAaXRlbSBAd3tAa2Jkey0tc3RyaXAtdHJhaWxpbmctc2xhc2hlc319CisgQG9waW5kZXggLS1zdHJpcC10cmFpbGluZy1zbGFzaGVzCisgQGNpbmRleCBzdHJpcHBpbmcgdHJhaWxpbmcgc2xhc2hlcworIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGVhY2ggQHZhcntzb3VyY2V9IGFyZ3VtZW50LgorQEAgLTI0OTYsNyArMjQ5Niw3IEBAIGJ5IDEwNDg1NzYuCisgSG93ZXZlciwgaWYgQHZhcntufSBzdGFydHMgd2l0aCBhIEBzYW1wey19LAorIHByaW50IGFsbCBidXQgdGhlIGxhc3QgQHZhcntufSBieXRlcyBvZiBlYWNoIGZpbGUuCisgCistQGl0ZW14IC1uIEB2YXJ7bn0KKytAaXRlbSAtbiBAdmFye259CisgQGl0ZW14IC0tbGluZXM9QHZhcntufQorIEBvcGluZGV4IC1uCisgQG9waW5kZXggLS1saW5lcworQEAgLTI2MzMsNyArMjYzMyw3IEBAIFRoaXMgb3B0aW9uIGlzIHRoZSBzYW1lIGFzIEBvcHRpb257LS1mb2xsb3c9bmFtZSAtLXJldHJ5fS4gIFRoYXQgaXMsIHRhaWwKKyB3aWxsIGF0dGVtcHQgdG8gcmVvcGVuIGEgZmlsZSB3aGVuIGl0IGlzIHJlbW92ZWQuICBTaG91bGQgdGhpcyBmYWlsLCB0YWlsCisgd2lsbCBrZWVwIHRyeWluZyB1bnRpbCBpdCBiZWNvbWVzIGFjY2Vzc2libGUgYWdhaW4uCisgCistQGl0ZW14IC0tcmV0cnkKKytAaXRlbSAtLXJldHJ5CisgQG9waW5kZXggLS1yZXRyeQorIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBtYWlubHkgd2hlbiBmb2xsb3dpbmcgYnkgbmFtZSAoaS5lLiwgd2l0aAorIEBvcHRpb257LS1mb2xsb3c9bmFtZX0pLgorQEAgLTI2NDEsNyArMjY0MSw3IEBAIFdpdGhvdXQgdGhpcyBvcHRpb24sIHdoZW4gdGFpbCBlbmNvdW50ZXJzIGEgZmlsZSB0aGF0IGRvZXNuJ3QKKyBleGlzdCBvciBpcyBvdGhlcndpc2UgaW5hY2Nlc3NpYmxlLCBpdCByZXBvcnRzIHRoYXQgZmFjdCBhbmQKKyBuZXZlciBjaGVja3MgaXQgYWdhaW4uCisgCistQGl0ZW14IC0tc2xlZXAtaW50ZXJ2YWw9QHZhcntudW1iZXJ9CisrQGl0ZW0gLS1zbGVlcC1pbnRlcnZhbD1AdmFye251bWJlcn0KKyBAb3BpbmRleCAtLXNsZWVwLWludGVydmFsCisgQ2hhbmdlIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gaXRlcmF0aW9ucyAodGhlIGRlZmF1bHQgaXMgMS4wKS4KKyBEdXJpbmcgb25lIGl0ZXJhdGlvbiwgZXZlcnkgc3BlY2lmaWVkIGZpbGUgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQgaGFzCitAQCAtMjY1MSw3ICsyNjUxLDcgQEAgSGlzdG9yaWNhbCBpbXBsZW1lbnRhdGlvbnMgb2YgQGNvbW1hbmR7dGFpbH0gaGF2ZSByZXF1aXJlZCB0aGF0CisgYW4gYXJiaXRyYXJ5IGZsb2F0aW5nIHBvaW50IG51bWJlciAodXNpbmcgYSBwZXJpb2QgYmVmb3JlIGFueQorIGZyYWN0aW9uYWwgZGlnaXRzKS4KKyAKKy1AaXRlbXggLS1waWQ9QHZhcntwaWR9CisrQGl0ZW0gLS1waWQ9QHZhcntwaWR9CisgQG9waW5kZXggLS1waWQKKyBXaGVuIGZvbGxvd2luZyBieSBuYW1lIG9yIGJ5IGRlc2NyaXB0b3IsIHlvdSBtYXkgc3BlY2lmeSB0aGUgcHJvY2VzcyBJRCwKKyBAdmFye3BpZH0sIG9mIHRoZSBzb2xlIHdyaXRlciBvZiBhbGwgQHZhcntmaWxlfSBhcmd1bWVudHMuICBUaGVuLCBzaG9ydGx5CitAQCAtMjY3NCw3ICsyNjc0LDcgQEAgdGVybWluYXRlIHVudGlsIGxvbmcgYWZ0ZXIgdGhlIHJlYWwgd3JpdGVyIGhhcyB0ZXJtaW5hdGVkLgorIE5vdGUgdGhhdCBAb3B0aW9uey0tcGlkfSBjYW5ub3QgYmUgc3VwcG9ydGVkIG9uIHNvbWUgc3lzdGVtczsgQGNvbW1hbmR7dGFpbH0KKyB3aWxsIHByaW50IGEgd2FybmluZyBpZiB0aGlzIGlzIHRoZSBjYXNlLgorIAorLUBpdGVteCAtLW1heC11bmNoYW5nZWQtc3RhdHM9QHZhcntufQorK0BpdGVtIC0tbWF4LXVuY2hhbmdlZC1zdGF0cz1AdmFye259CisgQG9waW5kZXggLS1tYXgtdW5jaGFuZ2VkLXN0YXRzCisgV2hlbiB0YWlsaW5nIGEgZmlsZSBieSBuYW1lLCBpZiB0aGVyZSBoYXZlIGJlZW4gQHZhcntufSAoZGVmYXVsdAorIG49QHZhbHVle0RFRkFVTFRfTUFYX05fVU5DSEFOR0VEX1NUQVRTX0JFVFdFRU5fT1BFTlN9KSBjb25zZWN1dGl2ZQorQEAgLTI2ODYsNyArMjY4Niw3IEBAIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gd2hlbiB0YWlsIHByaW50cyB0aGUgbGFzdCBwcmUtcm90YXRpb24gbGluZXMKKyBhbmQgd2hlbiBpdCBwcmludHMgdGhlIGxpbmVzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCBpbiB0aGUgbmV3IGxvZyBmaWxlLgorIFRoaXMgb3B0aW9uIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIGZvbGxvd2luZyBieSBuYW1lLgorIAorLUBpdGVteCAtbiBAdmFye259CisrQGl0ZW0gLW4gQHZhcntufQorIEBpdGVteCAtLWxpbmVzPUB2YXJ7bn0KKyBAb3BpbmRleCAtbgorIEBvcGluZGV4IC0tbGluZXMKK0BAIC0yODE3LDcgKzI4MTcsNyBAQCBvcHRpb24uCisgQG9waW5kZXggLS1udW1lcmljLXN1ZmZpeGVzCisgVXNlIGRpZ2l0cyBpbiBzdWZmaXhlcyByYXRoZXIgdGhhbiBsb3dlci1jYXNlIGxldHRlcnMuCisgCistQGl0ZW14IC0tdmVyYm9zZQorK0BpdGVtIC0tdmVyYm9zZQorIEBvcGluZGV4IC0tdmVyYm9zZQorIFdyaXRlIGEgZGlhZ25vc3RpYyB0byBzdGFuZGFyZCBlcnJvciBqdXN0IGJlZm9yZSBlYWNoIG91dHB1dCBmaWxlIGlzIG9wZW5lZC4KKyAKK0BAIC0zMDU1LDcgKzMwNTUsNyBAQCBQcmludCBvbmx5IHRoZSBuZXdsaW5lIGNvdW50cy4KKyBAb3BpbmRleCAtLW1heC1saW5lLWxlbmd0aAorIFByaW50IG9ubHkgdGhlIG1heGltdW0gbGluZSBsZW5ndGhzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTMyNTAsNyArMzI1MCw3IEBAIGFuIE1ENSBjaGVja3N1bSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgYXNzb2NpYXRlZCBmaWxlLCBvciBpZiBubyB2YWxpZAorIGxpbmUgaXMgZm91bmQsIEBjb21tYW5ke21kNXN1bX0gZXhpdHMgd2l0aCBub256ZXJvIHN0YXR1cy4gIE90aGVyd2lzZSwKKyBpdCBleGl0cyBzdWNjZXNzZnVsbHkuCisgCistQGl0ZW14IC0tc3RhdHVzCisrQGl0ZW0gLS1zdGF0dXMKKyBAb3BpbmRleCAtLXN0YXR1cworIEBjaW5kZXggdmVyaWZ5aW5nIE1ENSBjaGVja3N1bXMKKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgb25seSB3aGVuIHZlcmlmeWluZyBjaGVja3N1bXMuCitAQCAtNTgzNyw3ICs1ODM3LDcgQEAgY29tbWFuZCBsaW5lIHVubGVzcyB0aGUgQG9wdGlvbnstLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZX0gKEBvcHRpb257LUh9KSwKKyBJZiBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCBzcGVjaWZpZXMgYSBzeW1ib2xpYyBsaW5rLCBzaG93IGluZm9ybWF0aW9uCisgZm9yIHRoZSBmaWxlIHRoZSBsaW5rIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gZm9yIHRoZSBsaW5rIGl0c2VsZi4KKyAKKy1AaXRlbXggLS1kZXJlZmVyZW5jZS1jb21tYW5kLWxpbmUtc3ltbGluay10by1kaXIKKytAaXRlbSAtLWRlcmVmZXJlbmNlLWNvbW1hbmQtbGluZS1zeW1saW5rLXRvLWRpcgorIEBvcGluZGV4IC0tZGVyZWZlcmVuY2UtY29tbWFuZC1saW5lLXN5bWxpbmstdG8tZGlyCisgQGNpbmRleCBzeW1ib2xpYyBsaW5rcywgZGVyZWZlcmVuY2luZworIERvIG5vdCBkZXJlZmVyZW5jZSBzeW1ib2xpYyBsaW5rcywgd2l0aCBvbmUgZXhjZXB0aW9uOgorQEAgLTcwMTUsMTUgKzcwMTUsMTUgQEAgSWYgc3BlY2lmaWVkLCB0aGUgQHZhcnthdHRyaWJ1dGVfbGlzdH0gbXVzdCBiZSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0Cisgb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorIAorIEB0YWJsZSBAc2FtcAorLUBpdGVteCBtb2RlCisrQGl0ZW0gbW9kZQorIFByZXNlcnZlIHRoZSBmaWxlIG1vZGUgYml0cyBhbmQgYWNjZXNzIGNvbnRyb2wgbGlzdHMuCistQGl0ZW14IG93bmVyc2hpcAorK0BpdGVtIG93bmVyc2hpcAorIFByZXNlcnZlIHRoZSBvd25lciBhbmQgZ3JvdXAuICBPbiBtb3N0IG1vZGVybiBzeXN0ZW1zLAorIG9ubHkgdXNlcnMgd2l0aCBhcHByb3ByaWF0ZSBwcml2aWxlZ2VzIG1heSBjaGFuZ2UgdGhlIG93bmVyIG9mIGEgZmlsZSwKKyBhbmQgb3JkaW5hcnkgdXNlcnMKKyBtYXkgcHJlc2VydmUgdGhlIGdyb3VwIG93bmVyc2hpcCBvZiBhIGZpbGUgb25seSBpZiB0aGV5IGhhcHBlbiB0byBiZQorIGEgbWVtYmVyIG9mIHRoZSBkZXNpcmVkIGdyb3VwLgorLUBpdGVteCB0aW1lc3RhbXBzCisrQGl0ZW0gdGltZXN0YW1wcworIFByZXNlcnZlIHRoZSB0aW1lcyBvZiBsYXN0IGFjY2VzcyBhbmQgbGFzdCBtb2RpZmljYXRpb24sIHdoZW4gcG9zc2libGUuCisgSW4gZ2VuZXJhbCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHByZXNlcnZlIHRoZXNlIGF0dHJpYnV0ZXMKKyB3aGVuIHRoZSBhZmZlY3RlZCBmaWxlIGlzIGEgc3ltYm9saWMgbGluay4KK0BAIC03MDMxLDEyICs3MDMxLDEyIEBAIEhvd2V2ZXIsIEZyZWVCU0Qgbm93IHByb3ZpZGVzIHRoZSBAY29kZXtsdXRpbWVzfSBmdW5jdGlvbiwgd2hpY2ggbWFrZXMKKyBpdCBwb3NzaWJpbGUgZXZlbiBmb3Igc3ltYm9saWMgbGlua3MuICBIb3dldmVyLCB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMKKyBub3QgeWV0IHRha2UgYWR2YW50YWdlIG9mIHRoYXQuCisgQGMgRklYTUU6IG9uY2Ugd2UgcHJvdmlkZSBsdXRpbWVzIHN1cHBvcnQsIHVwZGF0ZSB0aGUgYWJvdmUuCistQGl0ZW14IGxpbmtzCisrQGl0ZW0gbGlua3MKKyBQcmVzZXJ2ZSBpbiB0aGUgZGVzdGluYXRpb24gZmlsZXMKKyBhbnkgbGlua3MgYmV0d2VlbiBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlcy4KKyBAYyBHaXZlIGV4YW1wbGVzIGlsbHVzdHJhdGluZyBob3cgaGFyZCBsaW5rcyBhcmUgcHJlc2VydmVkLgorIEBjIEFsc28sIHNob3cgaG93IHNvZnQgbGlua3MgbWFwIHRvIGhhcmQgbGlua3Mgd2l0aCAtTCBhbmQgLUguCistQGl0ZW14IGFsbAorK0BpdGVtIGFsbAorIFByZXNlcnZlIGFsbCBmaWxlIGF0dHJpYnV0ZXMuCisgRXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIGFsbCBvZiB0aGUgYWJvdmUuCisgQGVuZCB0YWJsZQorQEAgLTcwNDksMTIgKzcwNDksMTIgQEAgbW9kZSBiaXRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBmaWxlLCBtaW51cyB0aGUgYml0cyBzZXQgaW4gdGhlCisgdW1hc2sgYW5kIG1pbnVzIHRoZSBzZXQtdXNlci1JRCBhbmQgc2V0LWdyb3VwLUlEIGJpdHMuCisgQHhyZWZ7RmlsZSBwZXJtaXNzaW9uc30uCisgCistQGl0ZW14IEB3e0BrYmR7LS1uby1wcmVzZXJ2ZX09QHZhcnthdHRyaWJ1dGVfbGlzdH19CisrQGl0ZW0gQHd7QGtiZHstLW5vLXByZXNlcnZlfT1AdmFye2F0dHJpYnV0ZV9saXN0fX0KKyBAY2luZGV4IGZpbGUgaW5mb3JtYXRpb24sIHByZXNlcnZpbmcKKyBEbyBub3QgcHJlc2VydmUgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGVzLiAgVGhlIEB2YXJ7YXR0cmlidXRlX2xpc3R9CisgaGFzIHRoZSBzYW1lIGZvcm0gYXMgZm9yIEBvcHRpb257LS1wcmVzZXJ2ZX0uCisgCistQGl0ZW14IC0tcGFyZW50cworK0BpdGVtIC0tcGFyZW50cworIEBvcGluZGV4IC0tcGFyZW50cworIEBjaW5kZXggcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBAY29tbWFuZHtjcH0KKyBGb3JtIHRoZSBuYW1lIG9mIGVhY2ggZGVzdGluYXRpb24gZmlsZSBieSBhcHBlbmRpbmcgdG8gdGhlIHRhcmdldAorQEAgLTcwNzAsNyArNzA3MCw3IEBAIGNwIC0tcGFyZW50cyBhL2IvYyBleGlzdGluZ19kaXIKKyBjb3BpZXMgdGhlIGZpbGUgQGZpbGV7YS9iL2N9IHRvIEBmaWxle2V4aXN0aW5nX2Rpci9hL2IvY30sIGNyZWF0aW5nCisgYW55IG1pc3NpbmcgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzc0Miw3ICs3NzQyLDcgQEAgUHJvbXB0IHdoZXRoZXIgdG8gb3ZlcndyaXRlIGVhY2ggZXhpc3RpbmcgZGVzdGluYXRpb24gZmlsZSwgcmVnYXJkbGVzcworIG9mIGl0cyBwZXJtaXNzaW9ucy4KKyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGFmZmlybWF0aXZlLCB0aGUgZmlsZSBpcyBza2lwcGVkLgorIAorLUBpdGVteCBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKytAaXRlbSBAd3tAa2Jkey0tcmVwbHl9PUB2YXJ7aG93fX0KKyBAb3BpbmRleCAtLXJlcGx5CisgQGNpbmRleCBpbnRlcmFjdGl2aXR5CisgQGMgRklYTUU6IHJlbW92ZSBpbiAyMDA4CitAQCAtNzg0Nyw3ICs3ODQ3LDcgQEAgZmlsZXMgYXJlIG5hbWVkIG9yIGlmIGEgcmVjdXJzaXZlIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgSWdub3JlIGFueQorIHByZXZpb3VzIEBvcHRpb257LS1mb3JjZX0gKEBvcHRpb257LWZ9KSBvcHRpb24uICBFcXVpdmFsZW50IHRvCisgQG9wdGlvbnstLWludGVyYWN0aXZlPW9uY2V9LgorIAorLUBpdGVteCAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKytAaXRlbSAtLWludGVyYWN0aXZlIFs9QHZhcnt3aGVufV0KKyBAb3BpbmRleCAtLWludGVyYWN0aXZlCisgU3BlY2lmeSB3aGVuIHRvIGlzc3VlIGFuIGludGVyYWN0aXZlIHByb21wdC4gIEB2YXJ7d2hlbn0gbWF5IGJlCisgb21pdHRlZCwgb3Igb25lIG9mOgorQEAgLTc4NjYsNyArNzg2Niw3IEBAIHJlbW92YWwgaXMgcmVxdWVzdGVkLiAgRXF1aXZhbGVudCB0byBAb3B0aW9uey1JfS4KKyBTcGVjaWZ5aW5nIEBvcHRpb257LS1pbnRlcmFjdGl2ZX0gYW5kIG5vIEB2YXJ7d2hlbn0gaXMgZXF1aXZhbGVudCB0bworIEBvcHRpb257LS1pbnRlcmFjdGl2ZT1hbHdheXN9LgorIAorLUBpdGVteCAtLW9uZS1maWxlLXN5c3RlbQorK0BpdGVtIC0tb25lLWZpbGUtc3lzdGVtCisgQG9waW5kZXggLS1vbmUtZmlsZS1zeXN0ZW0KKyBAY2luZGV4IG9uZSBmaWxlIHN5c3RlbSwgcmVzdHJpY3RpbmcgQGNvbW1hbmR7cm19IHRvCisgV2hlbiByZW1vdmluZyBhIGhpZXJhcmNoeSByZWN1cnNpdmVseSwgc2tpcCBhbnkgZGlyZWN0b3J5IHRoYXQgaXMgb24gYQorQEAgLTc4ODQsNyArNzg4NCw3IEBAIHdhcm4gYWJvdXQgYW5kIHNraXAgZGlyZWN0b3JpZXMgb24gb3RoZXIgZmlsZSBzeXN0ZW1zLgorIE9mIGNvdXJzZSwgdGhpcyB3aWxsIG5vdCBzYXZlIHlvdXIgQGZpbGV7L2hvbWV9IGlmIGl0IGFuZCB5b3VyCisgY2hyb290IGhhcHBlbiB0byBiZSBvbiB0aGUgc2FtZSBmaWxlIHN5c3RlbS4KKyAKKy1AaXRlbXggLS1wcmVzZXJ2ZS1yb290CisrQGl0ZW0gLS1wcmVzZXJ2ZS1yb290CisgQG9waW5kZXggLS1wcmVzZXJ2ZS1yb290CisgQGNpbmRleCByb290IGRpcmVjdG9yeSwgZGlzYWxsb3cgcmVjdXJzaXZlIGRlc3RydWN0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LAorQEAgLTc4OTIsNyArNzg5Miw3IEBAIHdoZW4gdXNlZCB3aXRoIHRoZSBAb3B0aW9uey0tcmVjdXJzaXZlfSBvcHRpb24uCisgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBkZXN0cnVjdGlvbgorIERvIG5vdCB0cmVhdCBAZmlsZXsvfSBzcGVjaWFsbHkgd2hlbiByZW1vdmluZyByZWN1cnNpdmVseS4KK0BAIC04ODc0LDcgKzg4NzQsNyBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBvd25lcnNoaXAgY2Fubm90IGJlCisgY2hhbmdlZC4KKyAKKy1AaXRlbXggQHd7QGtiZHstLWZyb219PUB2YXJ7b2xkLW93bmVyfX0KKytAaXRlbSBAd3tAa2Jkey0tZnJvbX09QHZhcntvbGQtb3duZXJ9fQorIEBvcGluZGV4IC0tZnJvbQorIEBjaW5kZXggc3ltYm9saWMgbGlua3MsIGNoYW5naW5nIG93bmVyCisgQ2hhbmdlIGEgQHZhcntmaWxlfSdzIG93bmVyc2hpcCBvbmx5IGlmIGl0IGhhcyBjdXJyZW50IGF0dHJpYnV0ZXMgc3BlY2lmaWVkCitAQCAtODkyOCwxNCArODkyOCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTA1NCwxNCArOTA1NCwxNCBAQCBpcyBhIHN5bWJvbGljIGxpbmsuCisgQnkgZGVmYXVsdCwgbm8gZGlhZ25vc3RpYyBpcyBpc3N1ZWQgZm9yIHN5bWJvbGljIGxpbmtzIGVuY291bnRlcmVkCisgZHVyaW5nIGEgcmVjdXJzaXZlIHRyYXZlcnNhbCwgYnV0IHNlZSBAb3B0aW9uey0tdmVyYm9zZX0uCisgCistQGl0ZW14IC0tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGRpc2FsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBGYWlsIHVwb24gYW55IGF0dGVtcHQgdG8gcmVjdXJzaXZlbHkgY2hhbmdlIHRoZSByb290IGRpcmVjdG9yeSwgQGZpbGV7L30uCisgV2l0aG91dCBAb3B0aW9uey0tcmVjdXJzaXZlfSwgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdC4KKyBAeHJlZntUcmVhdGluZyAvIHNwZWNpYWxseX0uCisgCistQGl0ZW14IC0tbm8tcHJlc2VydmUtcm9vdAorK0BpdGVtIC0tbm8tcHJlc2VydmUtcm9vdAorIEBvcGluZGV4IC0tbm8tcHJlc2VydmUtcm9vdAorIEBjaW5kZXggcm9vdCBkaXJlY3RvcnksIGFsbG93IHJlY3Vyc2l2ZSBtb2RpZmljYXRpb24KKyBDYW5jZWwgdGhlIGVmZmVjdCBvZiBhbnkgcHJlY2VkaW5nIEBvcHRpb257LS1wcmVzZXJ2ZS1yb290fSBvcHRpb24uCitAQCAtOTE3NSwxNCArOTE3NSwxNCBAQCBhY3R1YWxseSBjaGFuZ2VzLgorIERvIG5vdCBwcmludCBlcnJvciBtZXNzYWdlcyBhYm91dCBmaWxlcyB3aG9zZSBwZXJtaXNzaW9ucyBjYW5ub3QgYmUKKyBjaGFuZ2VkLgorIAorLUBpdGVteCAtLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBkaXNhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgRmFpbCB1cG9uIGFueSBhdHRlbXB0IHRvIHJlY3Vyc2l2ZWx5IGNoYW5nZSB0aGUgcm9vdCBkaXJlY3RvcnksIEBmaWxley99LgorIFdpdGhvdXQgQG9wdGlvbnstLXJlY3Vyc2l2ZX0sIHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QuCisgQHhyZWZ7VHJlYXRpbmcgLyBzcGVjaWFsbHl9LgorIAorLUBpdGVteCAtLW5vLXByZXNlcnZlLXJvb3QKKytAaXRlbSAtLW5vLXByZXNlcnZlLXJvb3QKKyBAb3BpbmRleCAtLW5vLXByZXNlcnZlLXJvb3QKKyBAY2luZGV4IHJvb3QgZGlyZWN0b3J5LCBhbGxvdyByZWN1cnNpdmUgbW9kaWZpY2F0aW9uCisgQ2FuY2VsIHRoZSBlZmZlY3Qgb2YgYW55IHByZWNlZGluZyBAb3B0aW9uey0tcHJlc2VydmUtcm9vdH0gb3B0aW9uLgorQEAgLTk2MDMsNyArOTYwMyw3IEBAIFRoZSBwcm9ncmFtIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBvcHRpb25zLiAgQWxzbyBzZWUgQHJlZntDb21tb24gb3B0aW9uc30uCisgQG9waW5kZXggLS1hbGwKKyBTaG93IGNvdW50cyBmb3IgYWxsIGZpbGVzLCBub3QganVzdCBkaXJlY3Rvcmllcy4KKyAKKy1AaXRlbXggLS1hcHBhcmVudC1zaXplCisrQGl0ZW0gLS1hcHBhcmVudC1zaXplCisgQG9waW5kZXggLS1hcHBhcmVudC1zaXplCisgUHJpbnQgYXBwYXJlbnQgc2l6ZXMsIHJhdGhlciB0aGFuIGRpc2sgdXNhZ2UuICBUaGUgYXBwYXJlbnQgc2l6ZSBvZiBhCisgZmlsZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcG9ydGVkIGJ5IEBjb2Rle3djIC1jfSBvbiByZWd1bGFyIGZpbGVzLAorQEAgLTk2NTQsNyArOTY1NCw3IEBAIERvZXMgbm90IGFmZmVjdCBvdGhlciBzeW1ib2xpYyBsaW5rcy4gIFRoaXMgaXMgaGVscGZ1bCBmb3IgZmluZGluZworIG91dCB0aGUgZGlzayB1c2FnZSBvZiBkaXJlY3Rvcmllcywgc3VjaCBhcyBAZmlsZXsvdXNyL3RtcH0sIHdoaWNoCisgYXJlIG9mdGVuIHN5bWJvbGljIGxpbmtzLgorIAorLUBpdGVteCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKytAaXRlbSAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAb3BpbmRleCAtLWZpbGVzMC1mcm9tPUB2YXJ7RklMRX0KKyBAY2luZGV4IGluY2x1ZGluZyBmaWxlcyBmcm9tIEBjb21tYW5ke2R1fQorIFJhdGhlciB0aGFuIHByb2Nlc3NpbmcgZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgcHJvY2VzcyB0aG9zZQorQEAgLTk3MzMsNyArOTczMyw3IEBAIE91dHB1dCBhIG51bGwgYnl0ZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSwgcmF0aGVyIHRoYW4gYSBuZXdsaW5lLgorIFRoaXMgb3B0aW9uIGVuYWJsZXMgb3RoZXIgcHJvZ3JhbXMgdG8gcGFyc2UgdGhlIG91dHB1dCBvZiBAY29tbWFuZHtkdX0KKyBldmVuIHdoZW4gdGhhdCBvdXRwdXQgd291bGQgY29udGFpbiBmaWxlIG5hbWVzIHdpdGggZW1iZWRkZWQgbmV3bGluZXMuCisgCistQGl0ZW14IC0tc2kKKytAaXRlbSAtLXNpCisgQG9waW5kZXggLS1zaQorIEBjaW5kZXggU0kgb3V0cHV0CisgQXBwZW5kIGFuIFNJLXN0eWxlIGFiYnJldmlhdGlvbiB0byBlYWNoIHNpemUsIHN1Y2ggYXMgQHNhbXB7TUJ9IGZvcgorQEAgLTk3NTQsMTMgKzk3NTQsMTMgQEAgRGlzcGxheSBvbmx5IGEgdG90YWwgZm9yIGVhY2ggYXJndW1lbnQuCisgUmVwb3J0IHRoZSBzaXplIG9mIGVhY2ggZGlyZWN0b3J5IHNlcGFyYXRlbHksIG5vdCBpbmNsdWRpbmcgdGhlIHNpemVzCisgb2Ygc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZQorK0BpdGVtIC0tdGltZQorIEBvcGluZGV4IC0tdGltZQorIEBjaW5kZXggbGFzdCBtb2RpZmllZCBkYXRlcywgZGlzcGxheWluZyBpbiBAY29tbWFuZHtkdX0KKyBTaG93IHRpbWUgb2YgdGhlIG1vc3QgcmVjZW50IG1vZGlmaWNhdGlvbiBvZiBhbnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LAorIG9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisgCistQGl0ZW14IC0tdGltZT1jdGltZQorK0BpdGVtIC0tdGltZT1jdGltZQorIEBpdGVteCAtLXRpbWU9c3RhdHVzCisgQGl0ZW14IC0tdGltZT11c2UKKyBAb3BpbmRleCAtLXRpbWUKK0BAIC05NzcwLDcgKzk3NzAsNyBAQCBvciBhbnkgb2YgaXRzIHN1YmRpcmVjdG9yaWVzLgorIFNob3cgdGhlIG1vc3QgcmVjZW50IHN0YXR1cyBjaGFuZ2UgdGltZSAodGhlIEBzYW1we2N0aW1lfSBpbiB0aGUgaW5vZGUpIG9mCisgYW55IGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUuCisgCistQGl0ZW14IC0tdGltZT1hdGltZQorK0BpdGVtIC0tdGltZT1hdGltZQorIEBpdGVteCAtLXRpbWU9YWNjZXNzCisgQG9waW5kZXggLS10aW1lCisgQG9waW5kZXggYXRpbWVAcnssIHNob3cgdGhlIG1vc3QgcmVjZW50fQorQEAgLTk5MTEsNyArOTkxMSw3IEBAICQgc3RhdCAtLWZvcm1hdD0lZDolaSAvIC91c3IKKyAyMDU3OjIKKyBAZW5kIGV4YW1wbGUKKyAKKy1AaXRlbXggLS1wcmludGY9QHZhcntmb3JtYXR9CisrQGl0ZW0gLS1wcmludGY9QHZhcntmb3JtYXR9CisgQG9waW5kZXggLS1wcmludGY9QHZhcntmb3JtYXR9CisgQGNpbmRleCBvdXRwdXQgZm9ybWF0CisgVXNlIEB2YXJ7Zm9ybWF0fSByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmb3JtYXQuCitAQCAtMTIyNDAsNyArMTIyNDAsNyBAQCBPdmVycmlkZXMgYWxsIG90aGVyIG9wdGlvbnMuCisgQG9waW5kZXggLXMKKyBJZ25vcmVkOyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIHZlcnNpb25zIG9mIEBjb21tYW5ke3dob30uCisgCistQGl0ZW14IC11CisrQGl0ZW0gLXUKKyBAb3BpbmRleCAtdQorIEBjaW5kZXggaWRsZSB0aW1lCisgQWZ0ZXIgdGhlIGxvZ2luIHRpbWUsIHByaW50IHRoZSBudW1iZXIgb2YgaG91cnMgYW5kIG1pbnV0ZXMgdGhhdCB0aGUKK0BAIC0xMjI1NCw3ICsxMjI1NCw3IEBAIHVzZXIgaGFzIGJlZW4gaWRsZS4gIEBzYW1wey59IG1lYW5zIHRoZSB1c2VyIHdhcyBhY3RpdmUgaW4gdGhlIGxhc3QgbWludXRlLgorIExpc3Qgb25seSB0aGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJvY2Vzc2VzIHZpYSB3aGljaCB0aGUKKyBzeXN0ZW0gaXMgd2FpdGluZyBmb3IgYSB1c2VyIHRvIGxvZ2luLiAgVGhlIHVzZXIgbmFtZSBpcyBhbHdheXMgQHNhbXB7TE9HSU59LgorIAorLUBpdGVteCAtLWxvb2t1cAorK0BpdGVtIC0tbG9va3VwCisgQG9waW5kZXggLS1sb29rdXAKKyBBdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBob3N0bmFtZXMgZm91bmQgaW4gdXRtcCB0aHJvdWdoIGEgRE5TIGxvb2t1cC4gIFRoaXMKKyBpcyBub3QgdGhlIGRlZmF1bHQgYmVjYXVzZSBpdCBjYW4gY2F1c2Ugc2lnbmlmaWNhbnQgZGVsYXlzIG9uIHN5c3RlbXMgd2l0aAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWkxOG4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzNzIyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2NvcmV1dGlscy1pMThuLnBhdGNoCkBAIC0wLDAgKzEsNDA1MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworVGhlIGNvbW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlIHB1cnBvc2UgaXMgbGluMThudXgvbHNiIGNvbXBsaWFuY2UuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvc29ydC1tYi10ZXN0cwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw1OCBAQAorKyMhIC9iaW4vc2gKKytjYXNlICQjIGluCisrICAwKSB4eD0nLi4vLi4vc3JjL3NvcnQnOzsKKysgICopIHh4PSIkMSI7OworK2VzYWMKKyt0ZXN0ICIkVkVSQk9TRSIgJiYgZWNobz1lY2hvIHx8IGVjaG89OgorKyRlY2hvIHRlc3RpbmcgcHJvZ3JhbTogJHh4CisrZXJyb3JzPTAKKyt0ZXN0ICIkc3JjZGlyIiB8fCBzcmNkaXI9LgorK3Rlc3QgIiRWRVJCT1NFIiAmJiAkeHggLS12ZXJzaW9uIDI+IC9kZXYvbnVsbAorKworK2V4cG9ydCBMQ19BTEw9ZW5fVVMuVVRGLTgKKytsb2NhbGUgLWsgTENfQ1RZUEUgMj4mMSB8IGdyZXAgLXEgY2hhcm1hcC4qVVRGLTggfHwgZXhpdCA3NworK2Vycm9ycz0wCisrCisrJHh4IC10IO+8oCAtazIgLW4gbWIxLkkgPiBtYjEuTworK2NvZGU9JD8KKytpZiB0ZXN0ICRjb2RlICE9IDA7IHRoZW4KKysgICRlY2hvICJUZXN0IG1iMSBmYWlsZWQ6ICR4eCByZXR1cm4gY29kZSAkY29kZSBkaWZmZXJzIGZyb20gZXhwZWN0ZWQgdmFsdWUgMCIgMT4mMgorKyAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYAorK2Vsc2UKKysgIGNtcCBtYjEuTyAkc3JjZGlyL21iMS5YID4gL2Rldi9udWxsIDI+JjEKKysgIGNhc2UgJD8gaW4KKysgICAgMCkgaWYgdGVzdCAiJFZFUkJPU0UiOyB0aGVuICRlY2hvICJwYXNzZWQgbWIxIjsgZmk7OworKyAgICAxKSAkZWNobyAiVGVzdCBtYjEgZmFpbGVkOiBmaWxlcyBtYjEuTyBhbmQgJHNyY2Rpci9tYjEuWCBkaWZmZXIiIDE+JjIKKysgICAgICAgKGRpZmYgLWMgbWIxLk8gJHNyY2Rpci9tYjEuWCkgMj4gL2Rldi9udWxsCisrICAgICAgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWA7OworKyAgICAyKSAkZWNobyAiVGVzdCBtYjEgbWF5IGhhdmUgZmFpbGVkLiIgMT4mMgorKyAgICAgICAkZWNobyBUaGUgY29tbWFuZCAiY21wIG1iMS5PICRzcmNkaXIvbWIxLlgiIGZhaWxlZC4gMT4mMgorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgIGVzYWMKKytmaQorKworKyR4eCAtdCDvvKAgLWs0IC1uIG1iMi5JID4gbWIyLk8KKytjb2RlPSQ/CisraWYgdGVzdCAkY29kZSAhPSAwOyB0aGVuCisrICAkZWNobyAiVGVzdCBtYjIgZmFpbGVkOiAkeHggcmV0dXJuIGNvZGUgJGNvZGUgZGlmZmVycyBmcm9tIGV4cGVjdGVkIHZhbHVlIDAiIDE+JjIKKysgIGVycm9ycz1gZXhwciAkZXJyb3JzICsgMWAKKytlbHNlCisrICBjbXAgbWIyLk8gJHNyY2Rpci9tYjIuWCA+IC9kZXYvbnVsbCAyPiYxCisrICBjYXNlICQ/IGluCisrICAgIDApIGlmIHRlc3QgIiRWRVJCT1NFIjsgdGhlbiAkZWNobyAicGFzc2VkIG1iMiI7IGZpOzsKKysgICAgMSkgJGVjaG8gIlRlc3QgbWIyIGZhaWxlZDogZmlsZXMgbWIyLk8gYW5kICRzcmNkaXIvbWIyLlggZGlmZmVyIiAxPiYyCisrICAgICAgIChkaWZmIC1jIG1iMi5PICRzcmNkaXIvbWIyLlgpIDI+IC9kZXYvbnVsbAorKyAgICAgICBlcnJvcnM9YGV4cHIgJGVycm9ycyArIDFgOzsKKysgICAgMikgJGVjaG8gIlRlc3QgbWIyIG1heSBoYXZlIGZhaWxlZC4iIDE+JjIKKysgICAgICAgJGVjaG8gVGhlIGNvbW1hbmQgImNtcCBtYjIuTyAkc3JjZGlyL21iMi5YIiBmYWlsZWQuIDE+JjIKKysgICAgICAgZXJyb3JzPWBleHByICRlcnJvcnMgKyAxYDs7CisrICBlc2FjCisrZmkKKysKKytpZiB0ZXN0ICRlcnJvcnMgPSAwOyB0aGVuCisrICAkZWNobyBQYXNzZWQgYWxsIDExMyB0ZXN0cy4gMT4mMgorK2Vsc2UKKysgICRlY2hvIEZhaWxlZCAkZXJyb3JzIHRlc3RzLiAxPiYyCisrZmkKKyt0ZXN0ICRlcnJvcnMgPSAwIHx8IGVycm9ycz0xCisrZXhpdCAkZXJyb3JzCistLS0gL2Rldi9udWxsCTIwMDctMDMtMDEgMDk6MTY6MzkuMjE5NDA5OTA5ICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvdGVzdHMvc29ydC9tYjIuSQkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0IEBACisrQXBwbGXvvKDvvKHvvKExMO+8oO+8oDIwCisrQmFuYW5h77yg77yh77yhNe+8oO+8oDMwCisrQ2l0cnVz77yg77yh77yhMjDvvKDvvKA1CisrQ2hlcnJ577yg77yh77yhMzDvvKDvvKAxMAorLS0tIC9kZXYvbnVsbAkyMDA3LTAzLTAxIDA5OjE2OjM5LjIxOTQwOTkwOSArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3Rlc3RzL3NvcnQvbWIyLlgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNCBAQAorK0NpdHJ1c++8oO+8oe+8oTIw77yg77ygNQorK0NoZXJyee+8oO+8oe+8oTMw77yg77ygMTAKKytBcHBsZe+8oO+8oe+8oTEw77yg77ygMjAKKytCYW5hbmHvvKDvvKHvvKE177yg77ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5JCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytBcHBsZe+8oDEwCisrQmFuYW5h77ygNQorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSAvZGV2L251bGwJMjAwNy0wMy0wMSAwOToxNjozOS4yMTk0MDk5MDkgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L21iMS5YCTIwMDctMDMtMDEgMTU6MDg6MjQuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDQgQEAKKytCYW5hbmHvvKA1CisrQXBwbGXvvKAxMAorK0NpdHJ1c++8oDIwCisrQ2hlcnJ577ygMzAKKy0tLSBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtLmkxOG4JMjAwNy0wMS0yNCAwNzo0NzozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky90ZXN0cy9zb3J0L01ha2VmaWxlLmFtCTIwMDctMDMtMDEgMTU6MDk6NTkuMDAwMDAwMDAwICswMDAwCitAQCAtNjYsMTUgKzY2LDE3IEBACisgYmlnZmllbGQuTyBiaWdmaWVsZC5FCisgIyN0ZXN0LWZpbGVzLWVuZAorIAorLUVYVFJBX0RJU1QgPSBUZXN0LnBtICR4LXRlc3RzICQoZXhwbGljaXQpICQobWFpbnRfZ2VuKQorLW5vaW5zdF9TQ1JJUFRTID0gJHgtdGVzdHMKKytydW5fZ2VuICs9IG1iMS4wIG1iMi4wCisrCisrRVhUUkFfRElTVCA9IFRlc3QucG0gJHgtdGVzdHMgJChleHBsaWNpdCkgJChtYWludF9nZW4pIG1iMS5JIG1iMS5YIG1iMi5JIG1iMi5YCisrbm9pbnN0X1NDUklQVFMgPSAkeC10ZXN0cyAjICR4LW1iLXRlc3RzCisgVEVTVFNfRU5WSVJPTk1FTlQgPSBcCisgICBDVV9URVNUX05BTUU9YGJhc2VuYW1lICQoYWJzX3NyY2RpcilgLCQkdHN0IFwKKyAgIFBBVEg9IiQoVkdfUEFUSF9QUkVGSVgpYHB3ZGAvLi4vLi4vc3JjJChQQVRIX1NFUEFSQVRPUikkJFBBVEgiCisgCisgZWRpdHBsID0gc2VkIC1lICdzLEAnJ1BFUkwnJ0AsJChQRVJMKSxnJyAtZSAncyxAJydzcmNkaXInJ0AsJChzcmNkaXIpLGcnCisgCistVEVTVFMgPSAkeC10ZXN0cworK1RFU1RTID0gJHgtdGVzdHMgJHgtbWItdGVzdHMKKyAKKyBta19zY3JpcHQgPSAkKHNyY2RpcikvLi4vbWstc2NyaXB0CisgJChzcmNkaXIpLyR4LXRlc3RzOiAkKG1rX3NjcmlwdCkgVGVzdC5wbSBNYWtlZmlsZS5hbQorLS0tIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmguaTE4bgkyMDA1LTA1LTE0IDA3OjQ0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02LjgrL2xpYi9saW5lYnVmZmVyLmgJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMiw2ICsyMiwxMSBAQAorIAorICMgaW5jbHVkZSA8c3RkaW8uaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LiAgKi8KKysjIGlmIEhBVkVfV0NIQVJfSAorKyMgIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBlbmRpZgorKworIC8qIEEgYHN0cnVjdCBsaW5lYnVmZmVyJyBob2xkcyBhIGxpbmUgb2YgdGV4dC4gKi8KKyAKKyBzdHJ1Y3QgbGluZWJ1ZmZlcgorQEAgLTI5LDYgKzM0LDkgQEAKKyAgIHNpemVfdCBzaXplOwkJCS8qIEFsbG9jYXRlZC4gKi8KKyAgIHNpemVfdCBsZW5ndGg7CQkvKiBVc2VkLiAqLworICAgY2hhciAqYnVmZmVyOworKyMgaWYgSEFWRV9XQ0hBUl9ICisrICBtYnN0YXRlX3Qgc3RhdGU7CisrIyBlbmRpZgorIH07CisgCisgLyogSW5pdGlhbGl6ZSBsaW5lYnVmZmVyIExJTkVCVUZGRVIgZm9yIHVzZS4gKi8KKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvZXhwYW5kLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9leHBhbmQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTM4LDExICszOCwyOCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLCB3Y3dpZHRoKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJuZHVwLmgiCisgCisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImV4cGFuZCIKKyAKK0BAIC0xODMsNiArMjAwLDcgQEAKKyAJICAgICAgc3RvcHMgPSBudW1fc3RhcnQgKyBsZW4gLSAxOworIAkgICAgfQorIAl9CisrCisgICAgICAgZWxzZQorIAl7CisgCSAgZXJyb3IgKDAsIDAsIF8oInRhYiBzaXplIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyKHMpOiAlcyIpLAorQEAgLTM2NSw2ICszODMsMTQyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZXhwYW5kX211bHRpYnl0ZSAodm9pZCkKKyt7CisrICBGSUxFICpmcDsJCQkvKiBJbnB1dCBzdHJlbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3Y2hhcl90IHdjOwkJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIKKysJCQkJICAgd2hpY2ggc2hvd3MgYXMgc2FtZSBjaGFyYWN0ZXIgYXMgV0MuICovCisrICBpbnQgdGFiX2luZGV4ID0gMDsJCS8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wLiAqLworKyAgaW50IGNvbHVtbiA9IDA7CQkvKiBDb2x1bW4gb24gc2NyZWVuIG9mIHRoZSBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIC8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRi4gKi8KKysgICAgICBpZiAoYnVmbGVuIDwgTUJfTEVOX01BWCAmJiAhZmVvZihmcCkgJiYgIWZlcnJvcihmcCkpCisrCXsKKysJICBtZW1tb3ZlIChidWYsIGJ1ZnBvcywgYnVmbGVuKTsKKysJICBidWZsZW4gKz0gZnJlYWQgKGJ1ZiArIGJ1Zmxlbiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIGZwKTsKKysJICBidWZwb3MgPSBidWY7CisrCX0KKysKKysgICAgICAvKiBObyBjaGFyYWN0ZXIgaXMgbGVmdCBpbiBCVUYuICovCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCXsKKysJICBmcCA9IG5leHRfZmlsZSAoZnApOworKworKwkgIGlmIChmcCA9PSBOVUxMKQorKwkgICAgYnJlYWs7CQkvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYnVmcG9zLCBidWZsZW4sICZpX3N0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToJLyogaWxsZWdhbCBieXRlIHNlcXVlbmNlLiAqLworKwljYXNlIChzaXplX3QpLTI6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICBpZiAoY29udmVydCkKKysJICAgIHsKKysJICAgICAgKytjb2x1bW47CisrCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQljb252ZXJ0ID0gMDsKKysJICAgIH0KKysJICBwdXRjaGFyICgqYnVmcG9zKTsKKysJICBicmVhazsKKysKKysJY2FzZSAwOgkJLyogbnVsbC4gKi8KKysJICBtYmxlbmd0aCA9IDE7CisrCSAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkgICAgY29udmVydCA9IDA7CisrCSAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgYnJlYWs7CisrCisrCWRlZmF1bHQ6CisrCSAgaWYgKHdjID09IEwnXG4nKSAgIC8qIExGLiAqLworKwkgICAgeworKwkgICAgICB0YWJfaW5kZXggPSAwOworKwkgICAgICBjb2x1bW4gPSAwOworKwkgICAgICBjb252ZXJ0ID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkJLyogVGFiLiAqLworKwkgICAgeworKwkgICAgICBpZiAodGFiX3NpemUgPT0gMCkKKysJCXsKKysJCSAgLyogRG8gbm90IGxldCB0YWJfaW5kZXggPT0gZmlyc3RfZnJlZV90YWI7CisrCQkgICAgIHN0b3Agd2hlbiBpdCBpcyAxIGxlc3MuICovCisrCQkgIHdoaWxlICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEKKysJCSAgICAgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBuZXh0X3RhYl9jb2x1bW4gPSB0YWJfbGlzdFt0YWJfaW5kZXhdOworKwkJICBpZiAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxKQorKwkJICAgIHRhYl9pbmRleCsrOworKwkJICBpZiAoY29sdW1uID49IG5leHRfdGFiX2NvbHVtbikKKysJCSAgICBuZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyAxOworKwkJfQorKwkgICAgICBlbHNlCisrCQluZXh0X3RhYl9jb2x1bW4gPSBjb2x1bW4gKyB0YWJfc2l6ZSAtIGNvbHVtbiAlIHRhYl9zaXplOworKworKwkgICAgICB3aGlsZSAoY29sdW1uIDwgbmV4dF90YWJfY29sdW1uKQorKwkJeworKwkJICBwdXRjaGFyICgnICcpOworKwkJICArK2NvbHVtbjsKKysJCX0KKysJICAgIH0KKysJICBlbHNlICAvKiBPdGhlcnMuICovCisrCSAgICB7CisrCSAgICAgIGlmIChjb252ZXJ0KQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgeworKwkJICAgICAgaWYgKGNvbHVtbiA+IDApCisrCQkJLS1jb2x1bW47CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgaW50IHdpZHRoOwkJLyogVGhlIHdpZHRoIG9mIFdDLiAqLworKworKwkJICAgICAgd2lkdGggPSB3Y3dpZHRoICh3Yyk7CisrCQkgICAgICBjb2x1bW4gKz0gKHdpZHRoID4gMCkgPyB3aWR0aCA6IDA7CisrCQkgICAgICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJCWNvbnZlcnQgPSAwOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CitAQCAtNDI5LDcgKzU4MywxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICBleHBhbmQgKCk7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBleHBhbmRfbXVsdGlieXRlICgpOworKyAgZWxzZQorKyNlbmRpZgorKyAgICBleHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9qb2luLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxNiArMjMsMzAgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgbWJydG93YygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisrLyogR2V0IGlzd2JsYW5rKCksIHRvd3VwcGVyLiAgKi8KKysjaWYgSEFWRV9XQ1RZUEVfSAorKyMgaW5jbHVkZSA8d2N0eXBlLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorICNpbmNsdWRlICJsaW5lYnVmZmVyLmgiCistI2luY2x1ZGUgIm1lbWNhc2VjbXAuaCIKKyAjaW5jbHVkZSAicXVvdGUuaCIKKyAjaW5jbHVkZSAic3RkaW8tLS5oIgorICNpbmNsdWRlICJ4bWVtY29sbC5oIgorICNpbmNsdWRlICJ4c3RydG9sLmgiCisgCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJqb2luIgorIAorQEAgLTEwNCwxMCArMTE4LDEyIEBACisgLyogTGFzdCBlbGVtZW50IGluIGBvdXRsaXN0Jywgd2hlcmUgYSBuZXcgZWxlbWVudCBjYW4gYmUgYWRkZWQuICAqLworIHN0YXRpYyBzdHJ1Y3Qgb3V0bGlzdCAqb3V0bGlzdF9lbmQgPSAmb3V0bGlzdF9oZWFkOworIAorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBuZWdhdGl2ZSwgZmllbGRzIGFyZSBzZXBhcmF0ZWQKKy0gICBieSBhbnkgbm9uZW1wdHkgc3RyaW5nIG9mIGJsYW5rcywgb3RoZXJ3aXNlIGJ5IGV4YWN0bHkgb25lCistICAgdGFiIGNoYXJhY3RlciB3aG9zZSB2YWx1ZSAod2hlbiBjYXN0IHRvIHVuc2lnbmVkIGNoYXIpIGVxdWFscyBUQUIuICAqLworLXN0YXRpYyBpbnQgdGFiID0gLTE7CisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIE5VTEwsIGZpZWxkcyBhcmUgc2VwYXJhdGVkCisrICAgYnkgYW55IG5vbmVtcHR5IHN0cmluZyBvZiBibGFua3MuICAqLworK3N0YXRpYyBjaGFyICp0YWIgPSBOVUxMOworKworKy8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCBmb3IgdGFiLiAqLworK3N0YXRpYyBzaXplX3QgdGFibGVuID0gMDsKKyAKKyBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyB7CitAQCAtMTkwLDYgKzIwNiw4IEBACisgCisgLyogRmlsbCBpbiB0aGUgYGZpZWxkcycgc3RydWN0dXJlIGluIExJTkUuICAqLworIAorKy8qIEZpbGwgaW4gdGhlIGBmaWVsZHMnIHN0cnVjdHVyZSBpbiBMSU5FLiAgKi8KKysKKyBzdGF0aWMgdm9pZAorIHhmaWVsZHMgKHN0cnVjdCBsaW5lICpsaW5lKQorIHsKK0BAIC0xOTksMTAgKzIxNywxMSBAQAorICAgaWYgKHB0ciA9PSBsaW0pCisgICAgIHJldHVybjsKKyAKKy0gIGlmICgwIDw9IHRhYikKKysgIGlmICh0YWIgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKyAgICAgICBjaGFyICpzZXA7CistICAgICAgZm9yICg7IChzZXAgPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpKSAhPSBOVUxMOyBwdHIgPSBzZXAgKyAxKQorKyAgICAgIGZvciAoOyAoc2VwID0gbWVtY2hyIChwdHIsIHQsIGxpbSAtIHB0cikpICE9IE5VTEw7IHB0ciA9IHNlcCArIDEpCisgCWV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKyAgICAgfQorICAgZWxzZQorQEAgLTIyOSw2ICsyNDgsMTQ4IEBACisgICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIGxpbSAtIHB0cik7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgdm9pZAorK3hmaWVsZHNfbXVsdGlieXRlIChzdHJ1Y3QgbGluZSAqbGluZSkKKyt7CisrICBjaGFyICpwdHIgPSBsaW5lLT5idWYuYnVmZmVyOworKyAgY2hhciBjb25zdCAqbGltID0gcHRyICsgbGluZS0+YnVmLmxlbmd0aCAtIDE7CisrICB3Y2hhcl90IHdjID0gMDsKKysgIHNpemVfdCBtYmxlbmd0aCA9IDE7CisrICBtYnN0YXRlX3Qgc3RhdGUsIHN0YXRlX2JhazsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAwLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHB0ciA9PSBsaW0pCisrICAgIHJldHVybjsKKysKKysgIGlmICh0YWIgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgdCA9IHRhYlswXTsKKysgICAgICBjaGFyICpzZXAgPSBwdHI7CisrICAgICAgZm9yICg7IHB0ciA8IGxpbTsgcHRyID0gc2VwICsgbWJsZW5ndGgpCisrCXsKKysJICBzZXAgPSBwdHI7CisrCSAgd2hpbGUgKHNlcCA8IGxpbSkKKysJICAgIHsKKysJICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrCSAgICAgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzZXAsIGxpbSAtIHNlcCArIDEsICZzdGF0ZSk7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCQl7CisrCQkgIG1ibGVuZ3RoID0gMTsKKysJCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCQl9CisrCSAgICAgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgICAgIGlmIChtYmxlbmd0aCA9PSB0YWJsZW4gJiYgIW1lbWNtcCAoc2VwLCB0YWIsIG1ibGVuZ3RoKSkKKysJCWJyZWFrOworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHNlcCArPSBtYmxlbmd0aDsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKHNlcCA9PSBsaW0pCisrCSAgICBicmVhazsKKysKKysJICBleHRyYWN0X2ZpZWxkIChsaW5lLCBwdHIsIHNlcCAtIHB0cik7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgLyogU2tpcCBsZWFkaW5nIGJsYW5rcyBiZWZvcmUgdGhlIGZpcnN0IGZpZWxkLiAgKi8KKysgICAgICB3aGlsZShwdHIgPCBsaW0pCisrICAgICAgeworKyAgICAgICAgc3RhdGVfYmFrID0gc3RhdGU7CisrICAgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKworKyAgICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysgICAgICAgICAgeworKyAgICAgICAgICAgIG1ibGVuZ3RoID0gMTsKKysgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlX2JhazsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgfQorKyAgICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysgICAgICAgIGlmICghaXN3Ymxhbmsod2MpKQorKyAgICAgICAgICBicmVhazsKKysgICAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrICAgICAgZG8KKysJeworKwkgIGNoYXIgKnNlcDsKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgc2VwID0gcHRyICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHNlcCAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKGlzd2JsYW5rICh3YykpCisrCQlicmVhazsKKysKKysJICAgICAgc2VwICs9IG1ibGVuZ3RoOworKwkgICAgfQorKworKwkgIGV4dHJhY3RfZmllbGQgKGxpbmUsIHB0ciwgc2VwIC0gcHRyKTsKKysJICBpZiAoc2VwID09IGxpbSkKKysJICAgIHJldHVybjsKKysKKysJICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3Yywgc2VwLCBsaW0gLSBzZXAgKyAxLCAmc3RhdGUpOworKwkgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrCSAgICB7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKwkgIG1ibGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCisrCSAgcHRyID0gc2VwICsgbWJsZW5ndGg7CisrCSAgd2hpbGUgKHB0ciAhPSBsaW0pCisrCSAgICB7CisrCSAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKwkgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgcHRyLCBsaW0gLSBwdHIgKyAxLCAmc3RhdGUpOworKwkgICAgICBpZiAobWJsZW5ndGggPT0gKHNpemVfdCktMSB8fCBtYmxlbmd0aCA9PSAoc2l6ZV90KS0yKQorKwkJeworKwkJICBtYmxlbmd0aCA9IDE7CisrCQkgIHN0YXRlID0gc3RhdGVfYmFrOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgbWJsZW5ndGggPSAobWJsZW5ndGggPCAxKSA/IDEgOiBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFpc3dibGFuayAod2MpKQorKwkJYnJlYWs7CisrCisrCSAgICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICAgIH0KKysJfQorKyAgICAgIHdoaWxlIChwdHIgIT0gbGltKTsKKysgICAgfQorKworKyAgZXh0cmFjdF9maWVsZCAobGluZSwgcHRyLCBsaW0gLSBwdHIpOworK30KKysjZW5kaWYKKysKKyAvKiBSZWFkIGEgbGluZSBmcm9tIEZQIGludG8gTElORSBhbmQgc3BsaXQgaXQgaW50byBmaWVsZHMuCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCitAQCAtMjQ5LDYgKzQxMCwxMSBAQAorICAgbGluZS0+bmZpZWxkc19hbGxvY2F0ZWQgPSAwOworICAgbGluZS0+bmZpZWxkcyA9IDA7CisgICBsaW5lLT5maWVsZHMgPSBOVUxMOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgeGZpZWxkc19tdWx0aWJ5dGUgKGxpbmUpOworKyAgZWxzZQorKyNlbmRpZgorICAgeGZpZWxkcyAobGluZSk7CisgICByZXR1cm4gdHJ1ZTsKKyB9CitAQCAtMzAzLDU2ICs0NjksMTE0IEBACisga2V5Y21wIChzdHJ1Y3QgbGluZSBjb25zdCAqbGluZTEsIHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMikKKyB7CisgICAvKiBTdGFydCBvZiBmaWVsZCB0byBjb21wYXJlIGluIGVhY2ggZmlsZS4gICovCistICBjaGFyICpiZWcxOworLSAgY2hhciAqYmVnMjsKKy0KKy0gIHNpemVfdCBsZW4xOworLSAgc2l6ZV90IGxlbjI7CQkvKiBMZW5ndGggb2YgZmllbGRzIHRvIGNvbXBhcmUuICAqLworKyAgY2hhciAqYmVnWzJdOworKyAgY2hhciAqY29weVsyXTsKKysgIHNpemVfdCBsZW5bMl07CS8qIExlbmd0aCBvZiBmaWVsZHMgdG8gY29tcGFyZS4gICovCisgICBpbnQgZGlmZjsKKysgIGludCBpLCBqOworIAorICAgaWYgKGpvaW5fZmllbGRfMSA8IGxpbmUxLT5uZmllbGRzKQorICAgICB7CistICAgICAgYmVnMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5iZWc7CistICAgICAgbGVuMSA9IGxpbmUxLT5maWVsZHNbam9pbl9maWVsZF8xXS5sZW47CisrICAgICAgYmVnWzBdID0gbGluZTEtPmZpZWxkc1tqb2luX2ZpZWxkXzFdLmJlZzsKKysgICAgICBsZW5bMF0gPSBsaW5lMS0+ZmllbGRzW2pvaW5fZmllbGRfMV0ubGVuOworICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICBiZWcxID0gTlVMTDsKKy0gICAgICBsZW4xID0gMDsKKysgICAgICBiZWdbMF0gPSBOVUxMOworKyAgICAgIGxlblswXSA9IDA7CisgICAgIH0KKyAKKyAgIGlmIChqb2luX2ZpZWxkXzIgPCBsaW5lMi0+bmZpZWxkcykKKyAgICAgeworLSAgICAgIGJlZzIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0uYmVnOworLSAgICAgIGxlbjIgPSBsaW5lMi0+ZmllbGRzW2pvaW5fZmllbGRfMl0ubGVuOworKyAgICAgIGJlZ1sxXSA9IGxpbmUyLT5maWVsZHNbam9pbl9maWVsZF8yXS5iZWc7CisrICAgICAgbGVuWzFdID0gbGluZTItPmZpZWxkc1tqb2luX2ZpZWxkXzJdLmxlbjsKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgYmVnMiA9IE5VTEw7CistICAgICAgbGVuMiA9IDA7CisrICAgICAgYmVnWzFdID0gTlVMTDsKKysgICAgICBsZW5bMV0gPSAwOworICAgICB9CisgCistICBpZiAobGVuMSA9PSAwKQorLSAgICByZXR1cm4gbGVuMiA9PSAwID8gMCA6IC0xOworLSAgaWYgKGxlbjIgPT0gMCkKKysgIGlmIChsZW5bMF0gPT0gMCkKKysgICAgcmV0dXJuIGxlblsxXSA9PSAwID8gMCA6IC0xOworKyAgaWYgKGxlblsxXSA9PSAwKQorICAgICByZXR1cm4gMTsKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBpZ25vcmVfY2FzZSBkb2VzIG5vdCB3b3JrIHdpdGggTkxTIChpbiBwYXJ0aWN1bGFyLAorLSAgICAgICAgIHdpdGggbXVsdGlieXRlIGNoYXJzKS4gICovCistICAgICAgZGlmZiA9IG1lbWNhc2VjbXAgKGJlZzEsIGJlZzIsIE1JTiAobGVuMSwgbGVuMikpOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgeworKyAgICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKyAgICAgICAgd2NoYXJfdCB3YywgdXdjOworKyAgICAgICAgbWJzdGF0ZV90IHN0YXRlLCBzdGF0ZV9iYWs7CisrCisrICAgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTUlOIChsZW5bMF0sIGxlblsxXSk7KQorKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICAgICAgICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIGJlZ1tpXSArIGosIGxlbltpXSAtIGosICZzdGF0ZSk7CisrCisrICAgICAgICAgICAgICAgIHN3aXRjaCAobWJsZW5ndGgpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGNhc2UgKHNpemVfdCkgLTE6CisrICAgICAgICAgICAgICAgICAgY2FzZSAoc2l6ZV90KSAtMjoKKysgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKyAgICAgICAgICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisrICAgICAgICAgICAgICAgICAgY2FzZSAwOgorKyAgICAgICAgICAgICAgICAgICAgbWJsZW5ndGggPSAxOworKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgICAgICAgICAgIHV3YyA9IHRvd3VwcGVyICh3Yyk7CisrCisrICAgICAgICAgICAgICAgICAgICBpZiAodXdjICE9IHdjKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdjcnRvbWIgKGNvcHlbaV0gKyBqLCB1d2MsICZzdGF0ZV93Yyk7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChjb3B5W2ldICsgaiwgYmVnW2ldICsgaiwgbWJsZW5ndGgpOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgaiArPSBtYmxlbmd0aDsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICAgICAgfQorKyAgICAgIH0KKysgICAgICBlbHNlCisrI2VuZGlmCisrICAgICAgeworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGNvcHlbaV0gPSBhbGxvY2EgKGxlbltpXSArIDEpOworKworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBNSU4gKGxlblswXSwgbGVuWzFdKTsgaisrKQorKyAgICAgICAgICAgICAgY29weVtpXVtqXSA9IHRvdXBwZXIgKGJlZ1tpXVtqXSk7CisrCisrICAgICAgICAgICAgY29weVtpXVtqXSA9ICdcMCc7CisrICAgICAgICAgIH0KKysgICAgICB9CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIGlmIChoYXJkX0xDX0NPTExBVEUpCistCXJldHVybiB4bWVtY29sbCAoYmVnMSwgbGVuMSwgYmVnMiwgbGVuMik7CistICAgICAgZGlmZiA9IG1lbWNtcCAoYmVnMSwgYmVnMiwgTUlOIChsZW4xLCBsZW4yKSk7CisrICAgICAgY29weVswXSA9ICh1bnNpZ25lZCBjaGFyICopIGJlZ1swXTsKKysgICAgICBjb3B5WzFdID0gKHVuc2lnbmVkIGNoYXIgKikgYmVnWzFdOworICAgICB9CisgCisrICBpZiAoaGFyZF9MQ19DT0xMQVRFKQorKyAgICByZXR1cm4geG1lbWNvbGwgKChjaGFyICopIGNvcHlbMF0sIGxlblswXSwgKGNoYXIgKikgY29weVsxXSwgbGVuWzFdKTsKKysgIGRpZmYgPSBtZW1jbXAgKGNvcHlbMF0sIGNvcHlbMV0sIE1JTiAobGVuWzBdLCBsZW5bMV0pKTsKKysKKyAgIGlmIChkaWZmKQorICAgICByZXR1cm4gZGlmZjsKKy0gIHJldHVybiBsZW4xIDwgbGVuMiA/IC0xIDogbGVuMSAhPSBsZW4yOworKyAgcmV0dXJuIGxlblswXSAtIGxlblsxXTsKKyB9CisgCisgLyogUHJpbnQgZmllbGQgTiBvZiBMSU5FIGlmIGl0IGV4aXN0cyBhbmQgaXMgbm9uZW1wdHksIG90aGVyd2lzZQorQEAgLTM3NywxMSArNjAxLDE4IEBACisgCisgLyogUHJpbnQgdGhlIGpvaW4gb2YgTElORTEgYW5kIExJTkUyLiAgKi8KKyAKKysjZGVmaW5lIFBVVF9UQUJfQ0hBUgkJCQkJCQlcCisrICBkbwkJCQkJCQkJCVwKKysgICAgewkJCQkJCQkJCVwKKysgICAgICAodGFiICE9IE5VTEwpID8JCQkJCQkJXAorKwlmd3JpdGUodGFiLCBzaXplb2YoY2hhciksIHRhYmxlbiwgc3Rkb3V0KSA6IHB1dGNoYXIgKCcgJyk7CVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQkJCQkJCQkJCisrCisgc3RhdGljIHZvaWQKKyBwcmpvaW4gKHN0cnVjdCBsaW5lIGNvbnN0ICpsaW5lMSwgc3RydWN0IGxpbmUgY29uc3QgKmxpbmUyKQorIHsKKyAgIGNvbnN0IHN0cnVjdCBvdXRsaXN0ICpvdXRsaXN0OworLSAgY2hhciBvdXRwdXRfc2VwYXJhdG9yID0gdGFiIDwgMCA/ICcgJyA6IHRhYjsKKyAKKyAgIG91dGxpc3QgPSBvdXRsaXN0X2hlYWQubmV4dDsKKyAgIGlmIChvdXRsaXN0KQorQEAgLTM5NywxMiArNjI4LDEyIEBACisgCSAgaWYgKG8tPmZpbGUgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgaWYgKGxpbmUxID09ICZ1bmlfYmxhbmspCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTI7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8yOworIAkJfQorIAkgICAgICBlbHNlCistCSAgICAgICAgeworKwkJeworIAkJICBsaW5lID0gbGluZTE7CisgCQkgIGZpZWxkID0gam9pbl9maWVsZF8xOworIAkJfQorQEAgLTQxNiw3ICs2NDcsNyBAQAorIAkgIG8gPSBvLT5uZXh0OworIAkgIGlmIChvID09IE5VTEwpCisgCSAgICBicmVhazsKKy0JICBwdXRjaGFyIChvdXRwdXRfc2VwYXJhdG9yKTsKKysJICBQVVRfVEFCX0NIQVI7CisgCX0KKyAgICAgICBwdXRjaGFyICgnXG4nKTsKKyAgICAgfQorQEAgLTQzNCwyMyArNjY1LDIzIEBACisgICAgICAgcHJmaWVsZCAoam9pbl9maWVsZF8xLCBsaW5lMSk7CisgICAgICAgZm9yIChpID0gMDsgaSA8IGpvaW5fZmllbGRfMSAmJiBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAgICAgICBmb3IgKGkgPSBqb2luX2ZpZWxkXzEgKyAxOyBpIDwgbGluZTEtPm5maWVsZHM7ICsraSkKKyAJeworLQkgIHB1dGNoYXIgKG91dHB1dF9zZXBhcmF0b3IpOworKwkgIFBVVF9UQUJfQ0hBUjsKKyAJICBwcmZpZWxkIChpLCBsaW5lMSk7CisgCX0KKyAKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgam9pbl9maWVsZF8yICYmIGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIGZvciAoaSA9IGpvaW5fZmllbGRfMiArIDE7IGkgPCBsaW5lMi0+bmZpZWxkczsgKytpKQorIAl7CistCSAgcHV0Y2hhciAob3V0cHV0X3NlcGFyYXRvcik7CisrCSAgUFVUX1RBQl9DSEFSOworIAkgIHByZmllbGQgKGksIGxpbmUyKTsKKyAJfQorICAgICAgIHB1dGNoYXIgKCdcbicpOworQEAgLTg1OSwyMCArMTA5MCw0MSBAQAorIAorIAljYXNlICd0JzoKKyAJICB7CistCSAgICB1bnNpZ25lZCBjaGFyIG5ld3RhYiA9IG9wdGFyZ1swXTsKKy0JICAgIGlmICghIG5ld3RhYikKKysJICAgIGNoYXIgKm5ld3RhYjsKKysJICAgIHNpemVfdCBuZXd0YWJsZW47CisrCSAgICBpZiAoISBvcHRhcmdbMF0pCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIF8oImVtcHR5IHRhYiIpKTsKKy0JICAgIGlmIChvcHRhcmdbMV0pCisrCSAgICBuZXd0YWIgPSB4c3RyZHVwIChvcHRhcmcpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJbWJzdGF0ZV90IHN0YXRlOworKworKwkJbWVtc2V0ICgmc3RhdGUsIDAsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJsZW4gPSBtYnJ0b3djIChOVUxMLCBuZXd0YWIsCisrCQkJCSAgICAgc3RybmxlbiAobmV3dGFiLCBNQl9MRU5fTUFYKSwKKysJCQkJICAgICAmc3RhdGUpOworKwkJaWYgKG5ld3RhYmxlbiA9PSAoc2l6ZV90KSAwCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0xCisrCQkgICAgfHwgbmV3dGFibGVuID09IChzaXplX3QpIC0yKQorKwkJICBuZXd0YWJsZW4gPSAxOworKwkgICAgICB9CisrCSAgICBlbHNlCisrI2VuZGlmCisrCSAgICAgIG5ld3RhYmxlbiA9IDE7CisrCQkKKysJICAgIGlmIChuZXd0YWJsZW4gPT0gMSAmJiBuZXd0YWJbMV0pCisrCSAgICAgIHsKKysJCWlmIChTVFJFUSAobmV3dGFiLCAiXFwwIikpCisrCQkgIG5ld3RhYlswXSA9ICdcMCc7CisrCSAgICAgIH0KKysJICAgIGlmICh0YWIgIT0gTlVMTCAmJiBzdHJjbXAgKHRhYiwgbmV3dGFiKSkKKyAJICAgICAgeworLQkJaWYgKFNUUkVRIChvcHRhcmcsICJcXDAiKSkKKy0JCSAgbmV3dGFiID0gJ1wwJzsKKy0JCWVsc2UKKy0JCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygibXVsdGktY2hhcmFjdGVyIHRhYiAlcyIpLAorLQkJCSBxdW90ZSAob3B0YXJnKSk7CisrCQlmcmVlIChuZXd0YWIpOworKwkJZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CisgCSAgICAgIH0KKy0JICAgIGlmICgwIDw9IHRhYiAmJiB0YWIgIT0gbmV3dGFiKQorLQkgICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBfKCJpbmNvbXBhdGlibGUgdGFicyIpKTsKKyAJICAgIHRhYiA9IG5ld3RhYjsKKysJICAgIHRhYmxlbiA9IG5ld3RhYmxlbjsKKyAJICB9CisgCSAgYnJlYWs7CisgCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuaXEuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDYgKzIzLDE2IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAKKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCkuICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAibGluZWJ1ZmZlci5oIgorQEAgLTMyLDcgKzQyLDE5IEBACisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhtZW1jb2xsLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKy0jaW5jbHVkZSAibWVtY2FzZWNtcC5oIgorKyNpbmNsdWRlICJ4bWVtY29sbC5oIgorKworKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIAorIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmlxIgorQEAgLTEwOSw2ICsxMzEsMTAgQEAKKyAvKiBTZWxlY3Qgd2hldGhlci9ob3cgdG8gZGVsaW1pdCBncm91cHMgb2YgZHVwbGljYXRlIGxpbmVzLiAgKi8KKyBzdGF0aWMgZW51bSBkZWxpbWl0X21ldGhvZCBkZWxpbWl0X2dyb3VwczsKKyAKKysvKiBGdW5jdGlvbiBwb2ludGVycy4gKi8KKytzdGF0aWMgY2hhciAqCisrKCpmaW5kX2ZpZWxkKSAoc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpOworKworIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGNvbnN0IGxvbmdvcHRzW10gPQorIHsKKyAgIHsiY291bnQiLCBub19hcmd1bWVudCwgTlVMTCwgJ2MnfSwKK0BAIC0xOTgsNyArMjI0LDcgQEAKKyAgICByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUncyBmaWVsZCB0byBiZSBjb21wYXJlZC4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistZmluZF9maWVsZCAoY29uc3Qgc3RydWN0IGxpbmVidWZmZXIgKmxpbmUpCisrZmluZF9maWVsZF91bmkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorIHsKKyAgIHNpemVfdCBjb3VudDsKKyAgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworQEAgLTIxOSw2ICsyNDUsODMgQEAKKyAgIHJldHVybiBscCArIGk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKysKKysjIGRlZmluZSBNQkNIQVJfVE9fV0NIQVIoV0MsIE1CTEVOR1RILCBMUCwgUE9TLCBTSVpFLCBTVEFURVAsIENPTlZGQUlMKSAgXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAgIENPTlZGQUlMID0gMDsJCQkJCQkJXAorKyAgICAgIHN0YXRlX2JhayA9ICpTVEFURVA7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgTFAgKyBQT1MsIFNJWkUgLSBQT1MsIFNUQVRFUCk7CQlcCisrCQkJCQkJCQkJXAorKyAgICAgIHN3aXRjaCAoTUJMRU5HVEgpCQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwljYXNlIChzaXplX3QpLTI6CQkJCQkJXAorKwljYXNlIChzaXplX3QpLTE6CQkJCQkJXAorKwkgICpTVEFURVAgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkgIENPTlZGQUlMKys7CQkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z2ggKi8JCQkJCQlcCisrCWNhc2UgMDoJCQkJCQkJCVwKKysJICBNQkxFTkdUSCA9IDE7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrc3RhdGljIGNoYXIgKgorK2ZpbmRfZmllbGRfbXVsdGkgKHN0cnVjdCBsaW5lYnVmZmVyICpsaW5lKQorK3sKKysgIHNpemVfdCBjb3VudDsKKysgIGNoYXIgKmxwID0gbGluZS0+YnVmZmVyOworKyAgc2l6ZV90IHNpemUgPSBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IHBvczsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2M7CisrICBtYnN0YXRlX3QgKnN0YXRlcDsKKysgIGludCBjb252ZmFpbDsKKysKKysgIHBvcyA9IDA7CisrICBzdGF0ZXAgPSAmKGxpbmUtPnN0YXRlKTsKKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9maWVsZHMgJiYgcG9zIDwgc2l6ZTsgY291bnQrKykKKysgICAgeworKyAgICAgIHdoaWxlIChwb3MgPCBzaXplKQorKwl7CisrCSAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAKKysJICBpZiAoY29udmZhaWwgfHwgIWlzd2JsYW5rICh3YykpCisrCSAgICB7CisrCSAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysJICAgICAgYnJlYWs7CisrCSAgICB9CisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgd2hpbGUgKHBvcyA8IHNpemUpCisrCXsKKysJICBNQkNIQVJfVE9fV0NIQVIgKHdjLCBtYmxlbmd0aCwgbHAsIHBvcywgc2l6ZSwgc3RhdGVwLCBjb252ZmFpbCk7CisrCisrCSAgaWYgKCFjb252ZmFpbCAmJiBpc3dibGFuayAod2MpKQorKwkgICAgYnJlYWs7CisrCisrCSAgcG9zICs9IG1ibGVuZ3RoOworKwl9CisrICAgIH0KKysKKysgIC8qIHNraXAgZmllbGRzLiAqLworKyAgZm9yIChjb3VudCA9IDA7IGNvdW50IDwgc2tpcF9jaGFycyAmJiBwb3MgPCBzaXplOyBjb3VudCsrKQorKyAgICB7CisrICAgICAgTUJDSEFSX1RPX1dDSEFSICh3YywgbWJsZW5ndGgsIGxwLCBwb3MsIHNpemUsIHN0YXRlcCwgY29udmZhaWwpOworKyAgICAgIHBvcyArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIGxwICsgcG9zOworK30KKysjZW5kaWYKKysKKyAvKiBSZXR1cm4gZmFsc2UgaWYgdHdvIHN0cmluZ3MgT0xEIGFuZCBORVcgbWF0Y2gsIHRydWUgaWYgbm90LgorICAgIE9MRCBhbmQgTkVXIHBvaW50IG5vdCB0byB0aGUgYmVnaW5uaW5ncyBvZiB0aGUgbGluZXMKKyAgICBidXQgcmF0aGVyIHRvIHRoZSBiZWdpbm5pbmdzIG9mIHRoZSBmaWVsZHMgdG8gY29tcGFyZS4KK0BAIC0yMjcsNiArMzMwLDggQEAKKyBzdGF0aWMgYm9vbAorIGRpZmZlcmVudCAoY2hhciAqb2xkLCBjaGFyICpuZXcsIHNpemVfdCBvbGRsZW4sIHNpemVfdCBuZXdsZW4pCisgeworKyAgY2hhciAqY29weV9vbGQsICpjb3B5X25ldzsKKysKKyAgIGlmIChjaGVja19jaGFycyA8IG9sZGxlbikKKyAgICAgb2xkbGVuID0gY2hlY2tfY2hhcnM7CisgICBpZiAoY2hlY2tfY2hhcnMgPCBuZXdsZW4pCitAQCAtMjM0LDE0ICszMzksOTIgQEAKKyAKKyAgIGlmIChpZ25vcmVfY2FzZSkKKyAgICAgeworLSAgICAgIC8qIEZJWE1FOiBUaGlzIHNob3VsZCBpbnZva2Ugc3RyY29sbCBzb21laG93LiAgKi8KKy0gICAgICByZXR1cm4gb2xkbGVuICE9IG5ld2xlbiB8fCBtZW1jYXNlY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgICBzaXplX3QgaTsKKysKKysgICAgICBjb3B5X29sZCA9IGFsbG9jYSAob2xkbGVuICsgMSk7CisrICAgICAgY29weV9uZXcgPSBhbGxvY2EgKG9sZGxlbiArIDEpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRsZW47IGkrKykKKysJeworKwkgIGNvcHlfb2xkW2ldID0gdG91cHBlciAob2xkW2ldKTsKKysJICBjb3B5X25ld1tpXSA9IHRvdXBwZXIgKG5ld1tpXSk7CisrCX0KKyAgICAgfQorLSAgZWxzZSBpZiAoaGFyZF9MQ19DT0xMQVRFKQorLSAgICByZXR1cm4geG1lbWNvbGwgKG9sZCwgb2xkbGVuLCBuZXcsIG5ld2xlbikgIT0gMDsKKyAgIGVsc2UKKy0gICAgcmV0dXJuIG9sZGxlbiAhPSBuZXdsZW4gfHwgbWVtY21wIChvbGQsIG5ldywgb2xkbGVuKTsKKysgICAgeworKyAgICAgIGNvcHlfb2xkID0gKGNoYXIgKilvbGQ7CisrICAgICAgY29weV9uZXcgPSAoY2hhciAqKW5ldzsKKysgICAgfQorKworKyAgcmV0dXJuIHhtZW1jb2xsIChjb3B5X29sZCwgb2xkbGVuLCBjb3B5X25ldywgbmV3bGVuKTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytkaWZmZXJlbnRfbXVsdGkgKGNvbnN0IGNoYXIgKm9sZCwgY29uc3QgY2hhciAqbmV3LCBzaXplX3Qgb2xkbGVuLCBzaXplX3QgbmV3bGVuLCBtYnN0YXRlX3Qgb2xkc3RhdGUsIG1ic3RhdGVfdCBuZXdzdGF0ZSkKKyt7CisrICBzaXplX3QgaSwgaiwgY2hhcnM7CisrICBjb25zdCBjaGFyICpzdHJbMl07CisrICBjaGFyICpjb3B5WzJdOworKyAgc2l6ZV90IGxlblsyXTsKKysgIG1ic3RhdGVfdCBzdGF0ZVsyXTsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIHdjaGFyX3Qgd2MsIHV3YzsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrCisrICBzdHJbMF0gPSBvbGQ7CisrICBzdHJbMV0gPSBuZXc7CisrICBsZW5bMF0gPSBvbGRsZW47CisrICBsZW5bMV0gPSBuZXdsZW47CisrICBzdGF0ZVswXSA9IG9sZHN0YXRlOworKyAgc3RhdGVbMV0gPSBuZXdzdGF0ZTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisrICAgIHsKKysgICAgICBjb3B5W2ldID0gYWxsb2NhIChsZW5baV0gKyAxKTsKKysKKysgICAgICBmb3IgKGogPSAwLCBjaGFycyA9IDA7IGogPCBsZW5baV0gJiYgY2hhcnMgPCBjaGVja19jaGFyczsgY2hhcnMrKykKKysJeworKwkgIHN0YXRlX2JhayA9IHN0YXRlW2ldOworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHJbaV0gKyBqLCBsZW5baV0gLSBqLCAmKHN0YXRlW2ldKSk7CisrCisrCSAgc3dpdGNoIChtYmxlbmd0aCkKKysJICAgIHsKKysJICAgIGNhc2UgKHNpemVfdCktMToKKysJICAgIGNhc2UgKHNpemVfdCktMjoKKysJICAgICAgc3RhdGVbaV0gPSBzdGF0ZV9iYWs7CisrCSAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworKwkgICAgY2FzZSAwOgorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIGJyZWFrOworKworKwkgICAgZGVmYXVsdDoKKysJICAgICAgaWYgKGlnbm9yZV9jYXNlKQorKwkJeworKwkJICB1d2MgPSB0b3d1cHBlciAod2MpOworKworKwkJICBpZiAodXdjICE9IHdjKQorKwkJICAgIHsKKysJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZV93YzsKKysKKysJCSAgICAgIG1lbXNldCAoJnN0YXRlX3djLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgICAgICB3Y3J0b21iIChjb3B5W2ldICsgaiwgdXdjLCAmc3RhdGVfd2MpOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIG1lbWNweSAoY29weVtpXSArIGosIHN0cltpXSArIGosIG1ibGVuZ3RoKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJbWVtY3B5IChjb3B5W2ldICsgaiwgc3RyW2ldICsgaiwgbWJsZW5ndGgpOworKwkgICAgfQorKwkgIGogKz0gbWJsZW5ndGg7CisrCX0KKysgICAgICBjb3B5W2ldW2pdID0gJ1wwJzsKKysgICAgICBsZW5baV0gPSBqOworKyAgICB9CisrCisrICByZXR1cm4geG1lbWNvbGwgKGNvcHlbMF0sIGxlblswXSwgY29weVsxXSwgbGVuWzFdKTsKKyB9CisrI2VuZGlmCisgCisgLyogT3V0cHV0IHRoZSBsaW5lIGluIGxpbmVidWZmZXIgTElORSB0byBzdGFuZGFyZCBvdXRwdXQKKyAgICBwcm92aWRlZCB0aGF0IHRoZSBzd2l0Y2hlcyBzYXkgaXQgc2hvdWxkIGJlIG91dHB1dC4KK0BAIC0yOTUsMTUgKzQ3OCw0MyBAQAorICAgICB7CisgICAgICAgY2hhciAqcHJldmZpZWxkIElGX0xJTlQgKD0gTlVMTCk7CisgICAgICAgc2l6ZV90IHByZXZsZW4gSUZfTElOVCAoPSAwKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysKKysgICAgICBtZW1zZXQgKCZwcmV2c3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrI2VuZGlmCisgCisgICAgICAgd2hpbGUgKCFmZW9mIChzdGRpbikpCisgCXsKKyAJICBjaGFyICp0aGlzZmllbGQ7CisgCSAgc2l6ZV90IHRoaXNsZW47CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIG1ic3RhdGVfdCB0aGlzc3RhdGU7CisrI2VuZGlmCisrCisgCSAgaWYgKHJlYWRsaW5lYnVmZmVyICh0aGlzbGluZSwgc3RkaW4pID09IDApCisgCSAgICBicmVhazsKKyAJICB0aGlzZmllbGQgPSBmaW5kX2ZpZWxkICh0aGlzbGluZSk7CisgCSAgdGhpc2xlbiA9IHRoaXNsaW5lLT5sZW5ndGggLSAxIC0gKHRoaXNmaWVsZCAtIHRoaXNsaW5lLT5idWZmZXIpOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysKKysgICAgICAgICAgICBpZiAocHJldmxpbmUtPmxlbmd0aCA9PSAwIHx8IGRpZmZlcmVudF9tdWx0aQorKyAgICAgICAgICAgICAgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSkpCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGZ3cml0ZSAodGhpc2xpbmUtPmJ1ZmZlciwgc2l6ZW9mIChjaGFyKSwKKysgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGluZS0+bGVuZ3RoLCBzdGRvdXQpOworKworKyAgICAgICAgICAgICAgICBTV0FQX0xJTkVTIChwcmV2bGluZSwgdGhpc2xpbmUpOworKyAgICAgICAgICAgICAgICBwcmV2ZmllbGQgPSB0aGlzZmllbGQ7CisrICAgICAgICAgICAgICAgIHByZXZsZW4gPSB0aGlzbGVuOworKyAgICAgICAgICAgICAgICBwcmV2c3RhdGUgPSB0aGlzc3RhdGU7CisrICAgICAgICAgICAgICB9CisrICAgICAgICAgIH0KKysJZWxzZQorKyNlbmRpZgorIAkgIGlmIChwcmV2bGluZS0+bGVuZ3RoID09IDAKKyAJICAgICAgfHwgZGlmZmVyZW50ICh0aGlzZmllbGQsIHByZXZmaWVsZCwgdGhpc2xlbiwgcHJldmxlbikpCisgCSAgICB7CitAQCAtMzIyLDE3ICs1MzMsMjYgQEAKKyAgICAgICBzaXplX3QgcHJldmxlbjsKKyAgICAgICB1aW50bWF4X3QgbWF0Y2hfY291bnQgPSAwOworICAgICAgIGJvb2wgZmlyc3RfZGVsaW1pdGVyID0gdHJ1ZTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICAgICAgbWJzdGF0ZV90IHByZXZzdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICBpZiAocmVhZGxpbmVidWZmZXIgKHByZXZsaW5lLCBzdGRpbikgPT0gMCkKKyAJZ290byBjbG9zZWZpbGVzOworICAgICAgIHByZXZmaWVsZCA9IGZpbmRfZmllbGQgKHByZXZsaW5lKTsKKyAgICAgICBwcmV2bGVuID0gcHJldmxpbmUtPmxlbmd0aCAtIDEgLSAocHJldmZpZWxkIC0gcHJldmxpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKyAgICAgIHByZXZzdGF0ZSA9IHByZXZsaW5lLT5zdGF0ZTsKKysjZW5kaWYKKyAKKyAgICAgICB3aGlsZSAoIWZlb2YgKHN0ZGluKSkKKyAJeworIAkgIGJvb2wgbWF0Y2g7CisgCSAgY2hhciAqdGhpc2ZpZWxkOworIAkgIHNpemVfdCB0aGlzbGVuOworKyNpZiBIQVZFX01CUlRPV0MKKysJICBtYnN0YXRlX3QgdGhpc3N0YXRlOworKyNlbmRpZgorIAkgIGlmIChyZWFkbGluZWJ1ZmZlciAodGhpc2xpbmUsIHN0ZGluKSA9PSAwKQorIAkgICAgeworIAkgICAgICBpZiAoZmVycm9yIChzdGRpbikpCitAQCAtMzQxLDYgKzU2MSwxNSBAQAorIAkgICAgfQorIAkgIHRoaXNmaWVsZCA9IGZpbmRfZmllbGQgKHRoaXNsaW5lKTsKKyAJICB0aGlzbGVuID0gdGhpc2xpbmUtPmxlbmd0aCAtIDEgLSAodGhpc2ZpZWxkIC0gdGhpc2xpbmUtPmJ1ZmZlcik7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgIHsKKysgICAgICAgICAgICAgIHRoaXNzdGF0ZSA9IHRoaXNsaW5lLT5zdGF0ZTsKKysgICAgICAgICAgICAgIG1hdGNoID0gIWRpZmZlcmVudF9tdWx0aSAodGhpc2ZpZWxkLCBwcmV2ZmllbGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzbGVuLCBwcmV2bGVuLCB0aGlzc3RhdGUsIHByZXZzdGF0ZSk7CisrICAgICAgICAgICAgfQorKwkgIGVsc2UKKysjZW5kaWYKKyAJICBtYXRjaCA9ICFkaWZmZXJlbnQgKHRoaXNmaWVsZCwgcHJldmZpZWxkLCB0aGlzbGVuLCBwcmV2bGVuKTsKKyAJICBtYXRjaF9jb3VudCArPSBtYXRjaDsKKyAKK0BAIC0zNzMsNiArNjAyLDkgQEAKKyAJICAgICAgU1dBUF9MSU5FUyAocHJldmxpbmUsIHRoaXNsaW5lKTsKKyAJICAgICAgcHJldmZpZWxkID0gdGhpc2ZpZWxkOworIAkgICAgICBwcmV2bGVuID0gdGhpc2xlbjsKKysjaWYgSEFWRV9NQlJUT1dDCisrCSAgICAgIHByZXZzdGF0ZSA9IHRoaXNzdGF0ZTsKKysjZW5kaWYKKyAJICAgICAgaWYgKCFtYXRjaCkKKyAJCW1hdGNoX2NvdW50ID0gMDsKKyAJICAgIH0KK0BAIC00MTcsNiArNjQ5LDE5IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICB7CisrICAgICAgZmluZF9maWVsZCA9IGZpbmRfZmllbGRfbXVsdGk7CisrICAgIH0KKysgIGVsc2UKKysjZW5kaWYKKysgICAgeworKyAgICAgIGZpbmRfZmllbGQgPSBmaW5kX2ZpZWxkX3VuaTsKKysgICAgfQorKworKworKworICAgc2tpcF9jaGFycyA9IDA7CisgICBza2lwX2ZpZWxkcyA9IDA7CisgICBjaGVja19jaGFycyA9IFNJWkVfTUFYOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMuaTE4bgkyMDA3LTAyLTIzIDEyOjAxOjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9mb2xkLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMywxMSArMjMsMzMgQEAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorKworKy8qIEdldCBpc3dwcmludCgpLCBpc3dibGFuaygpLCB3Y3dpZHRoKCkuICAqLworKyNpZiBIQVZFX1dDVFlQRV9ICisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImVycm9yLmgiCisgI2luY2x1ZGUgInF1b3RlLmgiCisgI2luY2x1ZGUgInhzdHJ0b2wuaCIKKyAKKysvKiBNQl9MRU5fTUFYIGlzIGluY29ycmVjdGx5IGRlZmluZWQgdG8gYmUgMSBpbiBhdCBsZWFzdCBvbmUgR0NDCisrICAgICAgaW5zdGFsbGF0aW9uOyB3b3JrIGFyb3VuZCB0aGlzIGNvbmZpZ3VyYXRpb24gZXJyb3IuICAqLworKyNpZiAhZGVmaW5lZCBNQl9MRU5fTUFYIHx8IE1CX0xFTl9NQVggPCAyCisrIyB1bmRlZiBNQl9MRU5fTUFYCisrIyBkZWZpbmUgTUJfTEVOX01BWCAxNgorKyNlbmRpZgorKworKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCitAQCAtMzUsMjMgKzU3LDQ0IEBACisgCisgI2RlZmluZSBBVVRIT1JTICJEYXZpZCBNYWNLZW56aWUiCisgCisrI2RlZmluZSBGQVRBTF9FUlJPUihNZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgZXJyb3IgKDAsIDAsIChNZXNzYWdlKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHVzYWdlICgyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICB3aGlsZSAoMCkKKysKKytlbnVtIG9wZXJhdGluZ19tb2RlCisreworKyAgLyogRm9sZCB0ZXh0cyBieSBjb2x1bW5zIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICBjb2x1bW5fbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgYnl0ZXMgdGhhdCBhcmUgYXQgdGhlIGdpdmVuIHBvc2l0aW9ucy4gKi8KKysgIGJ5dGVfbW9kZSwKKysKKysgIC8qIEZvbGQgdGV4dHMgYnkgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworKyAgY2hhcmFjdGVyX21vZGUsCisrfTsKKysKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAqLworIGNoYXIgKnByb2dyYW1fbmFtZTsKKyAKKysvKiBUaGUgYXJndW1lbnQgc2hvd3MgY3VycmVudCBtb2RlLiAoRGVmYXVsdDogY29sdW1uX21vZGUpICovCisrc3RhdGljIGVudW0gb3BlcmF0aW5nX21vZGUgb3BlcmF0aW5nX21vZGU7CisrCisgLyogSWYgbm9uemVybywgdHJ5IHRvIGJyZWFrIG9uIHdoaXRlc3BhY2UuICovCisgc3RhdGljIGJvb2wgYnJlYWtfc3BhY2VzOworIAorLS8qIElmIG5vbnplcm8sIGNvdW50IGJ5dGVzLCBub3QgY29sdW1uIHBvc2l0aW9ucy4gKi8KKy1zdGF0aWMgYm9vbCBjb3VudF9ieXRlczsKKy0KKyAvKiBJZiBub256ZXJvLCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZpbGVzIHdlIHJlYWQgd2FzIHN0YW5kYXJkIGlucHV0LiAqLworIHN0YXRpYyBib29sIGhhdmVfcmVhZF9zdGRpbjsKKyAKKy1zdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJic3c6MDo6MTo6Mjo6Mzo6NDo6NTo6Njo6Nzo6ODo6OTo6IjsKKytzdGF0aWMgY2hhciBjb25zdCBzaG9ydG9wdHNbXSA9ICJiY3N3OjA6OjE6OjI6OjM6OjQ6OjU6OjY6Ojc6Ojg6Ojk6OiI7CisgCisgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgeworICAgeyJieXRlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnYid9LAorKyAgeyJjaGFyYWN0ZXJzIiwgbm9fYXJndW1lbnQsIE5VTEwsICdjJ30sCisgICB7InNwYWNlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncyd9LAorICAgeyJ3aWR0aCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndyd9LAorICAge0dFVE9QVF9IRUxQX09QVElPTl9ERUNMfSwKK0BAIC04MSw2ICsxMjQsNyBAQAorICIpLCBzdGRvdXQpOworICAgICAgIGZwdXRzIChfKCJcCisgICAtYiwgLS1ieXRlcyAgICAgICAgIGNvdW50IGJ5dGVzIHJhdGhlciB0aGFuIGNvbHVtbnNcblwKKysgIC1jLCAtLWNoYXJhY3RlcnMgICAgY291bnQgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBjb2x1bW5zXG5cCisgICAtcywgLS1zcGFjZXMgICAgICAgIGJyZWFrIGF0IHNwYWNlc1xuXAorICAgLXcsIC0td2lkdGg9V0lEVEggICB1c2UgV0lEVEggY29sdW1ucyBpbnN0ZWFkIG9mIDgwXG5cCisgIiksIHN0ZG91dCk7CitAQCAtOTgsNyArMTQyLDcgQEAKKyBzdGF0aWMgc2l6ZV90CisgYWRqdXN0X2NvbHVtbiAoc2l6ZV90IGNvbHVtbiwgY2hhciBjKQorIHsKKy0gIGlmICghY291bnRfYnl0ZXMpCisrICBpZiAob3BlcmF0aW5nX21vZGUgIT0gYnl0ZV9tb2RlKQorICAgICB7CisgICAgICAgaWYgKGMgPT0gJ1xiJykKKyAJeworQEAgLTEyMSwzMCArMTY1LDE0IEBACisgICAgdG8gc3Rkb3V0LCB3aXRoIG1heGltdW0gbGluZSBsZW5ndGggV0lEVEguCisgICAgUmV0dXJuIHRydWUgaWYgc3VjY2Vzc2Z1bC4gICovCisgCistc3RhdGljIGJvb2wKKy1mb2xkX2ZpbGUgKGNoYXIgY29uc3QgKmZpbGVuYW1lLCBzaXplX3Qgd2lkdGgpCisrc3RhdGljIHZvaWQKKytmb2xkX3RleHQgKEZJTEUgKmlzdHJlYW0sIHNpemVfdCB3aWR0aCwgaW50ICpzYXZlZF9lcnJubykKKyB7CistICBGSUxFICppc3RyZWFtOworICAgaW50IGM7CisgICBzaXplX3QgY29sdW1uID0gMDsJCS8qIFNjcmVlbiBjb2x1bW4gd2hlcmUgbmV4dCBjaGFyIHdpbGwgZ28uICovCisgICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKyAgIHN0YXRpYyBjaGFyICpsaW5lX291dCA9IE5VTEw7CisgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRlZF9vdXQgPSAwOworLSAgaW50IHNhdmVkX2Vycm5vOworLQorLSAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKy0gICAgeworLSAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKy0gICAgICBoYXZlX3JlYWRfc3RkaW4gPSB0cnVlOworLSAgICB9CistICBlbHNlCistICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CistCistICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CistICAgICAgcmV0dXJuIGZhbHNlOworLSAgICB9CisgCisgICB3aGlsZSAoKGMgPSBnZXRjIChpc3RyZWFtKSkgIT0gRU9GKQorICAgICB7CitAQCAtMTcyLDYgKzIwMCwxNSBAQAorIAkgICAgICBib29sIGZvdW5kX2JsYW5rID0gZmFsc2U7CisgCSAgICAgIHNpemVfdCBsb2dpY2FsX2VuZCA9IG9mZnNldF9vdXQ7CisgCisrCSAgICAgIC8qIElmIExJTkVfT1VUIGhhcyBubyB3aWRlIGNoYXJhY3RlciwKKysJCSBwdXQgYSBuZXcgd2lkZSBjaGFyYWN0ZXIgaW4gTElORV9PVVQKKysJCSBpZiBjb2x1bW4gaXMgYmlnZ2VyIHRoYW4gd2lkdGguICovCisrCSAgICAgIGlmIChvZmZzZXRfb3V0ID09IDApCisrCQl7CisrCQkgIGxpbmVfb3V0W29mZnNldF9vdXQrK10gPSBjOworKwkJICBjb250aW51ZTsKKysJCX0KKysKKyAJICAgICAgLyogTG9vayBmb3IgdGhlIGxhc3QgYmxhbmsuICovCisgCSAgICAgIHdoaWxlIChsb2dpY2FsX2VuZCkKKyAJCXsKK0BAIC0yMTgsMTEgKzI1NSwyMjUgQEAKKyAgICAgICBsaW5lX291dFtvZmZzZXRfb3V0KytdID0gYzsKKyAgICAgfQorIAorLSAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKysgICpzYXZlZF9lcnJubyA9IGVycm5vOworKworKyAgaWYgKG9mZnNldF9vdXQpCisrICAgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZiAoY2hhciksIChzaXplX3QpIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCisrICBmcmVlKGxpbmVfb3V0KTsKKyt9CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrZm9sZF9tdWx0aWJ5dGVfdGV4dCAoRklMRSAqaXN0cmVhbSwgc2l6ZV90IHdpZHRoLCBpbnQgKnNhdmVkX2Vycm5vKQorK3sKKysgIGNoYXIgYnVmW01CX0xFTl9NQVggKyBCVUZTSVpdOyAgLyogRm9yIHNwb29saW5nIGEgcmVhZCBieXRlIHNlcXVlbmNlLiAqLworKyAgc2l6ZV90IGJ1ZmxlbiA9IDA7CS8qIFRoZSBsZW5ndGggb2YgdGhlIGJ5dGUgc2VxdWVuY2UgaW4gYnVmLiAqLworKyAgY2hhciAqYnVmcG9zOyAgICAgICAgIC8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICB3aW50X3Qgd2M7CQkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZSwgc3RhdGVfYmFrOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBjaGFyICpsaW5lX291dCA9IE5VTEw7CisrICBzaXplX3Qgb2Zmc2V0X291dCA9IDA7CS8qIEluZGV4IGluIGBsaW5lX291dCcgZm9yIG5leHQgY2hhci4gKi8KKysgIHNpemVfdCBhbGxvY2F0ZWRfb3V0ID0gMDsKKysKKysgIGludCBpbmNyZW1lbnQ7CisrICBzaXplX3QgY29sdW1uID0gMDsKKysKKysgIHNpemVfdCBsYXN0X2JsYW5rX3BvczsKKysgIHNpemVfdCBsYXN0X2JsYW5rX2NvbHVtbjsKKysgIGludCBpc19ibGFua19zZWVuOworKyAgaW50IGxhc3RfYmxhbmtfaW5jcmVtZW50OworKyAgaW50IGlzX2JzX2ZvbGxvd2luZ19sYXN0X2JsYW5rOworKyAgc2l6ZV90IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bTsKKysgIGludCBpc19jcl9hZnRlcl9sYXN0X2JsYW5rOworKworKyNkZWZpbmUgQ0xFQVJfRkxBR1MJCQkJXAorKyAgIGRvCQkJCQkJXAorKyAgICAgewkJCQkJCVwKKysJbGFzdF9ibGFua19wb3MgPSAwOwkJCVwKKysJbGFzdF9ibGFua19jb2x1bW4gPSAwOwkJCVwKKysJaXNfYmxhbmtfc2VlbiA9IDA7CQkJXAorKwlpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayA9IDA7CQlcCisrCWJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CVwKKysJaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CQlcCisrICAgICB9CQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyNkZWZpbmUgU1RBUlRfTkVXX0xJTkUJCQlcCisrICAgZG8JCQkJCVwKKysgICAgIHsJCQkJCVwKKysgICAgICBwdXRjaGFyICgnXG4nKTsJCQlcCisrICAgICAgY29sdW1uID0gMDsJCQlcCisrICAgICAgb2Zmc2V0X291dCA9IDA7CQkJXAorKyAgICAgIENMRUFSX0ZMQUdTOwkJCVwKKysgICAgfQkJCQkJXAorKyAgIHdoaWxlICgwKQorKworKyAgQ0xFQVJfRkxBR1M7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OyBidWZwb3MgKz0gbWJsZW5ndGgsIGJ1ZmxlbiAtPSBtYmxlbmd0aCkKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mIChpc3RyZWFtKSAmJiAhZmVycm9yIChpc3RyZWFtKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgaXN0cmVhbSk7CisrCSAgYnVmcG9zID0gYnVmOworKwl9CisrCisrICAgICAgaWYgKGJ1ZmxlbiA8IDEpCisrCWJyZWFrOworKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGNvbnZmYWlsID0gMDsKKysgICAgICBzdGF0ZV9iYWsgPSBzdGF0ZTsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJnN0YXRlKTsKKysKKysgICAgICBzd2l0Y2ggKG1ibGVuZ3RoKQorKwl7CisrCWNhc2UgKHNpemVfdCktMToKKysJY2FzZSAoc2l6ZV90KS0yOgorKwkgIGNvbnZmYWlsKys7CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgLyogRmFsbCB0aHJvdWdoLiAqLworKworKwljYXNlIDA6CisrCSAgbWJsZW5ndGggPSAxOworKwkgIGJyZWFrOworKwl9CisrCisrcmVzY2FuOgorKyAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCQkJLyogYnl0ZSBtb2RlICovCisrCWluY3JlbWVudCA9IG1ibGVuZ3RoOworKyAgICAgIGVsc2UgaWYgKG9wZXJhdGluZ19tb2RlID09IGNoYXJhY3Rlcl9tb2RlKQkvKiBjaGFyYWN0ZXIgbW9kZSAqLworKwlpbmNyZW1lbnQgPSAxOworKyAgICAgIGVsc2UJCQkJCQkvKiBjb2x1bW4gbW9kZSAqLworKwl7CisrCSAgaWYgKGNvbnZmYWlsKQorKwkgICAgaW5jcmVtZW50ID0gMTsKKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIHN3aXRjaCAod2MpCisrCQl7CisrCQljYXNlIEwnXG4nOgorKwkJICBmd3JpdGUgKGxpbmVfb3V0LCBzaXplb2YoY2hhciksIG9mZnNldF9vdXQsIHN0ZG91dCk7CisrCQkgIFNUQVJUX05FV19MSU5FOworKwkJICBjb250aW51ZTsKKysJCSAgCisrCQljYXNlIEwnXGInOgorKwkJICBpbmNyZW1lbnQgPSAoY29sdW1uID4gMCkgPyAtMSA6IDA7CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1xyJzoKKysJCSAgaW5jcmVtZW50ID0gLTEgKiBjb2x1bW47CisrCQkgIGJyZWFrOworKworKwkJY2FzZSBMJ1x0JzoKKysJCSAgaW5jcmVtZW50ID0gOCAtIGNvbHVtbiAlIDg7CisrCQkgIGJyZWFrOworKworKwkJZGVmYXVsdDoKKysJCSAgaW5jcmVtZW50ID0gd2N3aWR0aCAod2MpOworKwkJICBpbmNyZW1lbnQgPSAoaW5jcmVtZW50IDwgMCkgPyAwIDogaW5jcmVtZW50OworKwkJfQorKwkgICAgfQorKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGJyZWFrX3NwYWNlcyAmJiBsYXN0X2JsYW5rX3BvcykKKysJeworKwkgIGZ3cml0ZSAobGluZV9vdXQsIHNpemVvZihjaGFyKSwgbGFzdF9ibGFua19wb3MsIHN0ZG91dCk7CisrCSAgcHV0Y2hhciAoJ1xuJyk7CisrCisrCSAgb2Zmc2V0X291dCA9IG9mZnNldF9vdXQgLSBsYXN0X2JsYW5rX3BvczsKKysJICBjb2x1bW4gPSBjb2x1bW4gLSBsYXN0X2JsYW5rX2NvbHVtbiArICgoaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuaykKKysJICAgICAgPyBsYXN0X2JsYW5rX2luY3JlbWVudCA6IGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSk7CisrCSAgbWVtbW92ZSAobGluZV9vdXQsIGxpbmVfb3V0ICsgbGFzdF9ibGFua19wb3MsIG9mZnNldF9vdXQpOworKwkgIENMRUFSX0ZMQUdTOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGNvbHVtbiArIGluY3JlbWVudCA+IHdpZHRoICYmIGNvbHVtbiAhPSAwKQorKwl7CisrCSAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mKGNoYXIpLCBvZmZzZXRfb3V0LCBzdGRvdXQpOworKwkgIFNUQVJUX05FV19MSU5FOworKwkgIGdvdG8gcmVzY2FuOworKwl9CisrCisrICAgICAgaWYgKGFsbG9jYXRlZF9vdXQgPCBvZmZzZXRfb3V0ICsgbWJsZW5ndGgpCisrCXsKKysJICBhbGxvY2F0ZWRfb3V0ICs9IDEwMjQ7CisrCSAgbGluZV9vdXQgPSB4cmVhbGxvYyAobGluZV9vdXQsIGFsbG9jYXRlZF9vdXQpOworKwl9CisrCisrICAgICAgbWVtY3B5IChsaW5lX291dCArIG9mZnNldF9vdXQsIGJ1ZnBvcywgbWJsZW5ndGgpOworKyAgICAgIG9mZnNldF9vdXQgKz0gbWJsZW5ndGg7CisrICAgICAgY29sdW1uICs9IGluY3JlbWVudDsKKysKKysgICAgICBpZiAoaXNfYmxhbmtfc2VlbiAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdccicpCisrCWlzX2NyX2FmdGVyX2xhc3RfYmxhbmsgPSAxOworKworKyAgICAgIGlmIChpc19ic19mb2xsb3dpbmdfbGFzdF9ibGFuayAmJiAhY29udmZhaWwgJiYgd2MgPT0gTCdcYicpCisrCSsrYnNfZm9sbG93aW5nX2xhc3RfYmxhbmtfbnVtOworKyAgICAgIGVsc2UKKysJaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAwOworKworKyAgICAgIGlmIChicmVha19zcGFjZXMgJiYgIWNvbnZmYWlsICYmIGlzd2JsYW5rICh3YykpCisrCXsKKysJICBsYXN0X2JsYW5rX3BvcyA9IG9mZnNldF9vdXQ7CisrCSAgbGFzdF9ibGFua19jb2x1bW4gPSBjb2x1bW47CisrCSAgaXNfYmxhbmtfc2VlbiA9IDE7CisrCSAgbGFzdF9ibGFua19pbmNyZW1lbnQgPSBpbmNyZW1lbnQ7CisrCSAgaXNfYnNfZm9sbG93aW5nX2xhc3RfYmxhbmsgPSAxOworKwkgIGJzX2ZvbGxvd2luZ19sYXN0X2JsYW5rX251bSA9IDA7CisrCSAgaXNfY3JfYWZ0ZXJfbGFzdF9ibGFuayA9IDA7CisrCX0KKysgICAgfQorKworKyAgKnNhdmVkX2Vycm5vID0gZXJybm87CisgCisgICBpZiAob2Zmc2V0X291dCkKKyAgICAgZndyaXRlIChsaW5lX291dCwgc2l6ZW9mIChjaGFyKSwgKHNpemVfdCkgb2Zmc2V0X291dCwgc3Rkb3V0KTsKKyAKKysgIGZyZWUobGluZV9vdXQpOworK30KKysjZW5kaWYKKysKKysvKiBGb2xkIGZpbGUgRklMRU5BTUUsIG9yIHN0YW5kYXJkIGlucHV0IGlmIEZJTEVOQU1FIGlzICItIiwKKysgICB0byBzdGRvdXQsIHdpdGggbWF4aW11bSBsaW5lIGxlbmd0aCBXSURUSC4KKysgICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAxIGlmIGFuIGVycm9yIG9jY3Vycy4gKi8KKysKKytzdGF0aWMgYm9vbAorK2ZvbGRfZmlsZSAoY2hhciAqZmlsZW5hbWUsIHNpemVfdCB3aWR0aCkKKyt7CisrICBGSUxFICppc3RyZWFtOworKyAgaW50IHNhdmVkX2Vycm5vOworKworKyAgaWYgKFNUUkVRIChmaWxlbmFtZSwgIi0iKSkKKysgICAgeworKyAgICAgIGlzdHJlYW0gPSBzdGRpbjsKKysgICAgICBoYXZlX3JlYWRfc3RkaW4gPSAxOworKyAgICB9CisrICBlbHNlCisrICAgIGlzdHJlYW0gPSBmb3BlbiAoZmlsZW5hbWUsICJyIik7CisrCisrICBpZiAoaXN0cmVhbSA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIGVycm5vLCAiJXMiLCBmaWxlbmFtZSk7CisrICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIC8qIERlZmluZSBob3cgSVNUUkVBTSBpcyBiZWluZyBmb2xkZWQuICovCisrI2lmIEhBVkVfTUJSVE9XQworKyAgaWYgKE1CX0NVUl9NQVggPiAxKQorKyAgICBmb2xkX211bHRpYnl0ZV90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgZm9sZF90ZXh0IChpc3RyZWFtLCB3aWR0aCwgJnNhdmVkX2Vycm5vKTsKKysKKyAgIGlmIChmZXJyb3IgKGlzdHJlYW0pKQorICAgICB7CisgICAgICAgZXJyb3IgKDAsIHNhdmVkX2Vycm5vLCAiJXMiLCBmaWxlbmFtZSk7CitAQCAtMjU1LDcgKzUwNiw4IEBACisgCisgICBhdGV4aXQgKGNsb3NlX3N0ZG91dCk7CisgCistICBicmVha19zcGFjZXMgPSBjb3VudF9ieXRlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworKyAgb3BlcmF0aW5nX21vZGUgPSBjb2x1bW5fbW9kZTsKKysgIGJyZWFrX3NwYWNlcyA9IGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworIAorICAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsIHNob3J0b3B0cywgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkKKyAgICAgeworQEAgLTI2NCw3ICs1MTYsMTUgQEAKKyAgICAgICBzd2l0Y2ggKG9wdGMpCisgCXsKKyAJY2FzZSAnYic6CQkvKiBDb3VudCBieXRlcyByYXRoZXIgdGhhbiBjb2x1bW5zLiAqLworLQkgIGNvdW50X2J5dGVzID0gdHJ1ZTsKKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gY29sdW1uX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgd2F5IG9mIGZvbGRpbmcgbWF5IGJlIHNwZWNpZmllZCIpKTsKKysJICBvcGVyYXRpbmdfbW9kZSA9IGJ5dGVfbW9kZTsKKysJICBicmVhazsKKysKKysJY2FzZSAnYyc6CisrCSAgaWYgKG9wZXJhdGluZ19tb2RlICE9IGNvbHVtbl9tb2RlKQorKwkgICAgRkFUQUxfRVJST1IgKF8oIm9ubHkgb25lIHdheSBvZiBmb2xkaW5nIG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSAncyc6CQkvKiBCcmVhayBhdCB3b3JkIGJvdW5kYXJpZXMuICovCistLS0gY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYy5pMThuCTIwMDctMDItMjQgMTE6MjM6MjMuMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3NvcnQuYwkyMDA3LTAzLTAxIDE1OjEwOjU3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzLDEwICsyMywxOSBAQAorIAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysvKiBHZXQgaXN3KiBmdW5jdGlvbnMuICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiYXJnbWF0Y2guaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0xMTYsMTQgKzEyNSwzOCBAQAorIC8qIFRob3VzYW5kcyBzZXBhcmF0b3I7IGlmIC0xLCB0aGVuIHRoZXJlIGlzbid0IG9uZS4gICovCisgc3RhdGljIGludCB0aG91c2FuZHNfc2VwOworIAorK3N0YXRpYyBpbnQgZm9yY2VfZ2VuZXJhbF9udW1jb21wYXJlID0gMDsKKysKKyAvKiBOb256ZXJvIGlmIHRoZSBjb3JyZXNwb25kaW5nIGxvY2FsZXMgYXJlIGhhcmQuICAqLworIHN0YXRpYyBib29sIGhhcmRfTENfQ09MTEFURTsKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyBzdGF0aWMgYm9vbCBoYXJkX0xDX1RJTUU7CisgI2VuZGlmCisgCisgI2RlZmluZSBOT05aRVJPKHgpICgoeCkgIT0gMCkKKyAKKysvKiBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyJ3MgYnl0ZSBsZW5ndGguICovCisrI2RlZmluZSBHRVRfQllURUxFTl9PRl9DSEFSKExJTSwgUFRSLCBNQkxFTkdUSCwgU1RBVEUpCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB3YzsJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgbWJsZW5ndGggPSBtYnJ0b3djICgmd2MsIFBUUiwgTElNIC0gUFRSLCAmU1RBVEUpOwkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgU1RBVEUgPSBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJLyogRmFsbCB0aHJvdWdoLiAqLwkJCQkJXAorKwljYXNlIDA6CQkJCQkJCQlcCisrCSAgTUJMRU5HVEggPSAxOwkJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIC8qIFRoZSBraW5kIG9mIGJsYW5rcyBmb3IgJy1iJyB0byBza2lwIGluIHZhcmlvdXMgb3B0aW9ucy4gKi8KKyBlbnVtIGJsYW5rdHlwZSB7IGJsX3N0YXJ0LCBibF9lbmQsIGJsX2JvdGggfTsKKyAKK0BAIC0yNjEsMTMgKzI5NCwxMSBAQAorICAgIHRoZXkgd2VyZSByZWFkIGlmIGFsbCBrZXlzIGNvbXBhcmUgZXF1YWwuICAqLworIHN0YXRpYyBib29sIHN0YWJsZTsKKyAKKy0vKiBJZiBUQUIgaGFzIHRoaXMgdmFsdWUsIGJsYW5rcyBzZXBhcmF0ZSBmaWVsZHMuICAqLworLWVudW0geyBUQUJfREVGQVVMVCA9IENIQVJfTUFYICsgMSB9OworLQorLS8qIFRhYiBjaGFyYWN0ZXIgc2VwYXJhdGluZyBmaWVsZHMuICBJZiBUQUJfREVGQVVMVCwgdGhlbiBmaWVsZHMgYXJlCisrLyogVGFiIGNoYXJhY3RlciBzZXBhcmF0aW5nIGZpZWxkcy4gIElmIHRhYl9sZW5ndGggaXMgMCwgdGhlbiBmaWVsZHMgYXJlCisgICAgc2VwYXJhdGVkIGJ5IHRoZSBlbXB0eSBzdHJpbmcgYmV0d2VlbiBhIG5vbi1ibGFuayBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsKKyAgICBjaGFyYWN0ZXIuICovCistc3RhdGljIGludCB0YWIgPSBUQUJfREVGQVVMVDsKKytzdGF0aWMgY2hhciB0YWJbTUJfTEVOX01BWCArIDFdOworK3N0YXRpYyBzaXplX3QgdGFiX2xlbmd0aCA9IDA7CisgCisgLyogRmxhZyB0byByZW1vdmUgY29uc2VjdXRpdmUgZHVwbGljYXRlIGxpbmVzIGZyb20gdGhlIG91dHB1dC4KKyAgICBPbmx5IHRoZSBsYXN0IG9mIGEgc2VxdWVuY2Ugb2YgZXF1YWwgbGluZXMgd2lsbCBiZSBvdXRwdXQuICovCitAQCAtNjM5LDYgKzY3MCw0NCBAQAorICAgICB1cGRhdGVfcHJvYyAocGlkKTsKKyB9CisgCisrLyogRnVuY3Rpb24gcG9pbnRlcnMuICovCisrc3RhdGljIHZvaWQKKysoKmluaXR0YWJsZXMpICh2b2lkKTsKKytzdGF0aWMgY2hhciAqCisrKCpiZWdmaWVsZCkgKGNvbnN0IHN0cnVjdCBsaW5lKiwgY29uc3Qgc3RydWN0IGtleWZpZWxkICopOworK3N0YXRpYyBjaGFyICoKKysoKmxpbWZpZWxkKSAoY29uc3Qgc3RydWN0IGxpbmUqLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKik7Cisrc3RhdGljIGludAorKygqZ2V0bW9udGgpIChjaGFyIGNvbnN0ICosIHNpemVfdCk7Cisrc3RhdGljIGludAorKygqa2V5Y29tcGFyZSkgKGNvbnN0IHN0cnVjdCBsaW5lICosIGNvbnN0IHN0cnVjdCBsaW5lICopOworK3N0YXRpYyBpbnQKKysoKm51bWNvbXBhcmUpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisrCisrLyogVGVzdCBmb3Igd2hpdGUgc3BhY2UgbXVsdGlieXRlIGNoYXJhY3Rlci4KKysgICBTZXQgTEVOR1RIIHRoZSBieXRlIGxlbmd0aCBvZiBpbnZlc3RpZ2F0ZWQgbXVsdGlieXRlIGNoYXJhY3Rlci4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2lzbWJibGFuayAoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3QgKmxlbmd0aCkKKyt7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICB3Y2hhcl90IHdjOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCBzdHIsIGxlbiwgJnN0YXRlKTsKKysKKysgIGlmIChtYmxlbmd0aCA9PSAoc2l6ZV90KS0xIHx8IG1ibGVuZ3RoID09IChzaXplX3QpLTIpCisrICAgIHsKKysgICAgICAqbGVuZ3RoID0gMTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgKmxlbmd0aCA9IChtYmxlbmd0aCA8IDEpID8gMSA6IG1ibGVuZ3RoOworKyAgcmV0dXJuIGlzd2JsYW5rICh3Yyk7CisrfQorKyNlbmRpZgorKworIC8qIENsZWFuIHVwIGFueSByZW1haW5pbmcgdGVtcG9yYXJ5IGZpbGVzLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTk3OCw3ICsxMDQ3LDcgQEAKKyAgIGZyZWUgKG5vZGUpOworIH0KKyAKKy0jaWYgSEFWRV9OTF9MQU5HSU5GTworKyNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAKKyBzdGF0aWMgaW50Cisgc3RydWN0X21vbnRoX2NtcCAoY29uc3Qgdm9pZCAqbTEsIGNvbnN0IHZvaWQgKm0yKQorQEAgLTk5Myw3ICsxMDYyLDcgQEAKKyAvKiBJbml0aWFsaXplIHRoZSBjaGFyYWN0ZXIgY2xhc3MgdGFibGVzLiAqLworIAorIHN0YXRpYyB2b2lkCistaW5pdHRhYmxlcyAodm9pZCkKKytpbml0dGFibGVzX3VuaSAodm9pZCkKKyB7CisgICBzaXplX3QgaTsKKyAKK0BAIC0xMDA1LDcgKzEwNzQsNyBAQAorICAgICAgIGZvbGRfdG91cHBlcltpXSA9IHRvdXBwZXIgKGkpOworICAgICB9CisgCistI2lmIEhBVkVfTkxfTEFOR0lORk8KKysjaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgICAvKiBJZiB3ZSdyZSBub3QgaW4gdGhlICJDIiBsb2NhbGUsIHJlYWQgZGlmZmVyZW50IG5hbWVzIGZvciBtb250aHMuICAqLworICAgaWYgKGhhcmRfTENfVElNRSkKKyAgICAgeworQEAgLTEwMzEsNiArMTEwMCw2NCBAQAorICNlbmRpZgorIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIHZvaWQKKytpbml0dGFibGVzX21iICh2b2lkKQorK3sKKysgIGludCBpLCBqLCBrLCBsOworKyAgY2hhciAqbmFtZSwgKnM7CisrICBzaXplX3Qgc19sZW4sIG1ibGVuZ3RoOworKyAgY2hhciBtYmNbTUJfTEVOX01BWF07CisrICB3Y2hhcl90IHdjLCBwd2M7CisrICBtYnN0YXRlX3Qgc3RhdGVfbWIsIHN0YXRlX3djOworKworKyAgZm9yIChpID0gMDsgaSA8IE1PTlRIU19QRVJfWUVBUjsgaSsrKQorKyAgICB7CisrICAgICAgcyA9IChjaGFyICopIG5sX2xhbmdpbmZvIChBQk1PTl8xICsgaSk7CisrICAgICAgc19sZW4gPSBzdHJsZW4gKHMpOworKyAgICAgIG1vbnRodGFiW2ldLm5hbWUgPSBuYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoc19sZW4gKyAxKTsKKysgICAgICBtb250aHRhYltpXS52YWwgPSBpICsgMTsKKysKKysgICAgICBtZW1zZXQgKCZzdGF0ZV9tYiwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysgICAgICBtZW1zZXQgKCZzdGF0ZV93YywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgICAgICBmb3IgKGogPSAwOyBqIDwgc19sZW47KQorKwl7CisrCSAgaWYgKCFpc21iYmxhbmsgKHMgKyBqLCBzX2xlbiAtIGosICZtYmxlbmd0aCkpCisrCSAgICBicmVhazsKKysJICBqICs9IG1ibGVuZ3RoOworKwl9CisrCisrICAgICAgZm9yIChrID0gMDsgaiA8IHNfbGVuOykKKysJeworKwkgIG1ibGVuZ3RoID0gbWJydG93YyAoJndjLCAocyArIGopLCAoc19sZW4gLSBqKSwgJnN0YXRlX21iKTsKKysJICBhc3NlcnQgKG1ibGVuZ3RoICE9IChzaXplX3QpLTEgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMik7CisrCSAgaWYgKG1ibGVuZ3RoID09IDApCisrCSAgICBicmVhazsKKysKKysJICBwd2MgPSB0b3d1cHBlciAod2MpOworKwkgIGlmIChwd2MgPT0gd2MpCisrCSAgICB7CisrCSAgICAgIG1lbWNweSAobWJjLCBzICsgaiwgbWJsZW5ndGgpOworKwkgICAgICBqICs9IG1ibGVuZ3RoOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgaiArPSBtYmxlbmd0aDsKKysJICAgICAgbWJsZW5ndGggPSB3Y3J0b21iIChtYmMsIHB3YywgJnN0YXRlX3djKTsKKysJICAgICAgYXNzZXJ0IChtYmxlbmd0aCAhPSAoc2l6ZV90KTAgJiYgbWJsZW5ndGggIT0gKHNpemVfdCktMSk7CisrCSAgICB9CisrCisrCSAgZm9yIChsID0gMDsgbCA8IG1ibGVuZ3RoOyBsKyspCisrCSAgICBuYW1lW2srK10gPSBtYmNbbF07CisrCX0KKysgICAgICBuYW1lW2tdID0gJ1wwJzsKKysgICAgfQorKyAgcXNvcnQgKCh2b2lkICopIG1vbnRodGFiLCBNT05USFNfUEVSX1lFQVIsCisrICAgICAgc2l6ZW9mIChzdHJ1Y3QgbW9udGgpLCBzdHJ1Y3RfbW9udGhfY21wKTsKKyt9CisrI2VuZGlmCisrCisgLyogU3BlY2lmeSB0aGUgYW1vdW50IG9mIG1haW4gbWVtb3J5IHRvIHVzZSB3aGVuIHNvcnRpbmcuICAqLworIHN0YXRpYyB2b2lkCisgc3BlY2lmeV9zb3J0X3NpemUgKGNoYXIgY29uc3QgKnMpCitAQCAtMTI0MSw3ICsxMzY4LDcgQEAKKyAgICBieSBLRVkgaW4gTElORS4gKi8KKyAKKyBzdGF0aWMgY2hhciAqCistYmVnZmllbGQgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKytiZWdmaWVsZF91bmkgKGNvbnN0IHN0cnVjdCBsaW5lICpsaW5lLCBjb25zdCBzdHJ1Y3Qga2V5ZmllbGQgKmtleSkKKyB7CisgICBjaGFyICpwdHIgPSBsaW5lLT50ZXh0LCAqbGltID0gcHRyICsgbGluZS0+bGVuZ3RoIC0gMTsKKyAgIHNpemVfdCBzd29yZCA9IGtleS0+c3dvcmQ7CitAQCAtMTI1MSwxMCArMTM3OCwxMCBAQAorICAgLyogVGhlIGxlYWRpbmcgZmllbGQgc2VwYXJhdG9yIGl0c2VsZiBpcyBpbmNsdWRlZCBpbiBhIGZpZWxkIHdoZW4gLXQKKyAgICAgIGlzIGFic2VudC4gICovCisgCistICBpZiAodGFiICE9IFRBQl9ERUZBVUxUKQorKyAgaWYgKHRhYl9sZW5ndGgpCisgICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgc3dvcmQtLSkKKyAgICAgICB7CistCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWIpCisrCXdoaWxlIChwdHIgPCBsaW0gJiYgKnB0ciAhPSB0YWJbMF0pCisgCSAgKytwdHI7CisgCWlmIChwdHIgPCBsaW0pCisgCSAgKytwdHI7CitAQCAtMTI4MiwxMSArMTQwOSw3MCBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytiZWdmaWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGludCBpOworKyAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisrICBzaXplX3Qgc3dvcmQgPSBrZXktPnN3b3JkOworKyAgc2l6ZV90IHNjaGFyID0ga2V5LT5zY2hhcjsKKysgIHNpemVfdCBtYmxlbmd0aDsKKysgIG1ic3RhdGVfdCBzdGF0ZTsKKysKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICBpZiAodGFiX2xlbmd0aCkKKysgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBzd29yZC0tKQorKyAgICAgIHsKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiBtZW1jbXAgKHB0ciwgdGFiLCB0YWJfbGVuZ3RoKSAhPSAwKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJaWYgKHB0ciA8IGxpbSkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrICAgICAgfQorKyAgZWxzZQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIHN3b3JkLS0pCisrICAgICAgeworKwl3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwlpZiAocHRyIDwgbGltKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAhaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrICAgICAgfQorKworKyAgaWYgKGtleS0+c2tpcHNibGFua3MpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysgICAgICBwdHIgKz0gbWJsZW5ndGg7CisrCisrICBmb3IgKGkgPSAwOyBpIDwgc2NoYXI7IGkrKykKKysgICAgeworKyAgICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKworKyAgICAgIGlmIChwdHIgKyBtYmxlbmd0aCA+IGxpbSkKKysJYnJlYWs7CisrICAgICAgZWxzZQorKwlwdHIgKz0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIHJldHVybiBwdHI7CisrfQorKyNlbmRpZgorKworIC8qIFJldHVybiB0aGUgbGltaXQgb2YgKGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyKSB0aGUgZmllbGQKKyAgICBpbiBMSU5FIHNwZWNpZmllZCBieSBLRVkuICovCisgCisgc3RhdGljIGNoYXIgKgorLWxpbWZpZWxkIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisrbGltZmllbGRfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqbGluZSwgY29uc3Qgc3RydWN0IGtleWZpZWxkICprZXkpCisgeworICAgY2hhciAqcHRyID0gbGluZS0+dGV4dCwgKmxpbSA9IHB0ciArIGxpbmUtPmxlbmd0aCAtIDE7CisgICBzaXplX3QgZXdvcmQgPSBrZXktPmV3b3JkLCBlY2hhciA9IGtleS0+ZWNoYXI7CitAQCAtMTI5OSwxMCArMTQ4NSwxMCBAQAorICAgICAgYGJlZ2lubmluZycgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGRlbGltaXRpbmcgVEFCLgorICAgICAgT3RoZXJ3aXNlLCBsZWF2ZSBQVFIgcG9pbnRpbmcgYXQgdGhlIGZpcnN0IGBibGFuaycgY2hhcmFjdGVyIGFmdGVyCisgICAgICB0aGUgcHJlY2VkaW5nIGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgd2hpbGUgKHB0ciA8IGxpbSAmJiBld29yZC0tKQorICAgICAgIHsKKy0Jd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYikKKysJd2hpbGUgKHB0ciA8IGxpbSAmJiAqcHRyICE9IHRhYlswXSkKKyAJICArK3B0cjsKKyAJaWYgKHB0ciA8IGxpbSAmJiAoZXdvcmQgfCBlY2hhcikpCisgCSAgKytwdHI7CitAQCAtMTM0OCwxMCArMTUzNCwxMCBAQAorICAgICAgKi8KKyAKKyAgIC8qIE1ha2UgTElNIHBvaW50IHRvIHRoZSBlbmQgb2YgKG9uZSBieXRlIHBhc3QpIHRoZSBjdXJyZW50IGZpZWxkLiAgKi8KKy0gIGlmICh0YWIgIT0gVEFCX0RFRkFVTFQpCisrICBpZiAodGFiX2xlbmd0aCkKKyAgICAgeworICAgICAgIGNoYXIgKm5ld2xpbTsKKy0gICAgICBuZXdsaW0gPSBtZW1jaHIgKHB0ciwgdGFiLCBsaW0gLSBwdHIpOworKyAgICAgIG5ld2xpbSA9IG1lbWNociAocHRyLCB0YWJbMF0sIGxpbSAtIHB0cik7CisgICAgICAgaWYgKG5ld2xpbSkKKyAJbGltID0gbmV3bGltOworICAgICB9CitAQCAtMTM4NCw2ICsxNTcwLDEwNyBAQAorICAgcmV0dXJuIHB0cjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBjaGFyICoKKytsaW1maWVsZF9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmxpbmUsIGNvbnN0IHN0cnVjdCBrZXlmaWVsZCAqa2V5KQorK3sKKysgIGNoYXIgKnB0ciA9IGxpbmUtPnRleHQsICpsaW0gPSBwdHIgKyBsaW5lLT5sZW5ndGggLSAxOworKyAgc2l6ZV90IGV3b3JkID0ga2V5LT5ld29yZCwgZWNoYXIgPSBrZXktPmVjaGFyOworKyAgaW50IGk7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrCisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgbWVtY21wIChwdHIsIHRhYiwgdGFiX2xlbmd0aCkgIT0gMCkKKysJICB7CisrCSAgICBHRVRfQllURUxFTl9PRl9DSEFSIChsaW0sIHB0ciwgbWJsZW5ndGgsIHN0YXRlKTsKKysJICAgIHB0ciArPSBtYmxlbmd0aDsKKysJICB9CisrCWlmIChwdHIgPCBsaW0gJiYgKGV3b3JkIHwgZWNoYXIpKQorKwkgIHsKKysJICAgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgICAgcHRyICs9IG1ibGVuZ3RoOworKwkgIH0KKysgICAgICB9CisrICBlbHNlCisrICAgIHdoaWxlIChwdHIgPCBsaW0gJiYgZXdvcmQtLSkKKysgICAgICB7CisrCXdoaWxlIChwdHIgPCBsaW0gJiYgaXNtYmJsYW5rIChwdHIsIGxpbSAtIHB0ciwgJm1ibGVuZ3RoKSkKKysJICBwdHIgKz0gbWJsZW5ndGg7CisrCWlmIChwdHIgPCBsaW0pCisrCSAgeworKwkgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgICBwdHIgKz0gbWJsZW5ndGg7CisrCSAgfQorKwl3aGlsZSAocHRyIDwgbGltICYmICFpc21iYmxhbmsgKHB0ciwgbGltIC0gcHRyLCAmbWJsZW5ndGgpKQorKwkgIHB0ciArPSBtYmxlbmd0aDsKKysgICAgICB9CisrCisrCisrIyBpZmRlZiBQT1NJWF9VTlNQRUNJRklFRAorKyAgLyogTWFrZSBMSU0gcG9pbnQgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGN1cnJlbnQgZmllbGQuICAqLworKyAgaWYgKHRhYl9sZW5ndGgpCisrICAgIHsKKysgICAgICBjaGFyICpuZXdsaW0sICpwOworKworKyAgICAgIG5ld2xpbSA9IE5VTEw7CisrICAgICAgZm9yIChwID0gcHRyOyBwIDwgbGltOykKKysgCXsKKysJICBpZiAobWVtY21wIChwLCB0YWIsIHRhYl9sZW5ndGgpID09IDApCisrCSAgICB7CisrCSAgICAgIG5ld2xpbSA9IHA7CisrCSAgICAgIGJyZWFrOworKwkgICAgfQorKworKwkgIEdFVF9CWVRFTEVOX09GX0NIQVIgKGxpbSwgcHRyLCBtYmxlbmd0aCwgc3RhdGUpOworKwkgIHAgKz0gbWJsZW5ndGg7CisrCX0KKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgY2hhciAqbmV3bGltOworKyAgICAgIG5ld2xpbSA9IHB0cjsKKysKKysgICAgICB3aGlsZSAobmV3bGltIDwgbGltICYmIGlzbWJibGFuayAobmV3bGltLCBsaW0gLSBuZXdsaW0sICZtYmxlbmd0aCkpCisrCW5ld2xpbSArPSBtYmxlbmd0aDsKKysgICAgICBpZiAocHRyIDwgbGltKQorKwl7CisrCSAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCSAgcHRyICs9IG1ibGVuZ3RoOworKwl9CisrICAgICAgd2hpbGUgKG5ld2xpbSA8IGxpbSAmJiAhaXNtYmJsYW5rIChuZXdsaW0sIGxpbSAtIG5ld2xpbSwgJm1ibGVuZ3RoKSkKKysJbmV3bGltICs9IG1ibGVuZ3RoOworKyAgICAgIGxpbSA9IG5ld2xpbTsKKysgICAgfQorKyMgZW5kaWYKKysKKysgIC8qIElmIHdlJ3JlIHNraXBwaW5nIGxlYWRpbmcgYmxhbmtzLCBkb24ndCBzdGFydCBjb3VudGluZyBjaGFyYWN0ZXJzCisrICAgKiAgICAgIHVudGlsIGFmdGVyIHNraXBwaW5nIHBhc3QgYW55IGxlYWRpbmcgYmxhbmtzLiAgKi8KKysgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKyAgICB3aGlsZSAocHRyIDwgbGltICYmIGlzbWJibGFuayAocHRyLCBsaW0gLSBwdHIsICZtYmxlbmd0aCkpCisrICAgICAgcHRyICs9IG1ibGVuZ3RoOworKworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIC8qIEFkdmFuY2UgUFRSIGJ5IEVDSEFSIChpZiBwb3NzaWJsZSksIGJ1dCBubyBmdXJ0aGVyIHRoYW4gTElNLiAgKi8KKysgIGZvciAoaSA9IDA7IGkgPCBlY2hhcjsgaSsrKQorKyAgICB7CisrICAgICAgR0VUX0JZVEVMRU5fT0ZfQ0hBUiAobGltLCBwdHIsIG1ibGVuZ3RoLCBzdGF0ZSk7CisrCisrICAgICAgaWYgKHB0ciArIG1ibGVuZ3RoID4gbGltKQorKwlicmVhazsKKysgICAgICBlbHNlCisrCXB0ciArPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgcmV0dXJuIHB0cjsKKyt9CisrI2VuZGlmCisrCisgLyogRmlsbCBCVUYgcmVhZGluZyBmcm9tIEZQLCBtb3ZpbmcgYnVmLT5sZWZ0IGJ5dGVzIGZyb20gdGhlIGVuZAorICAgIG9mIGJ1Zi0+YnVmIHRvIHRoZSBiZWdpbm5pbmcgZmlyc3QuICBJZiBFT0YgaXMgcmVhY2hlZCBhbmQgdGhlCisgICAgZmlsZSB3YXNuJ3QgdGVybWluYXRlZCBieSBhIG5ld2xpbmUsIHN1cHBseSBvbmUuICBTZXQgdXAgQlVGJ3MgbGluZQorQEAgLTE0NjYsOCArMTc1MywyNCBAQAorIAkJICBlbHNlCisgCQkgICAgeworIAkJICAgICAgaWYgKGtleS0+c2tpcHNibGFua3MpCistCQkJd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKy0JCQkgIGxpbmVfc3RhcnQrKzsKKysJCQl7CisrI2lmIEhBVkVfTUJSVE9XQworKwkJCSAgaWYgKE1CX0NVUl9NQVggPiAxKQorKwkJCSAgICB7CisrCQkJICAgICAgc2l6ZV90IG1ibGVuZ3RoOworKwkJCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKysJCQkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJCSAgICAgIHdoaWxlIChsaW5lX3N0YXJ0IDwgbGluZS0+a2V5bGltICYmCisrCQkJCSAgICAgaXNtYmJsYW5rIChsaW5lX3N0YXJ0LAorKwkJCQkJCWxpbmUtPmtleWxpbSAtIGxpbmVfc3RhcnQsCisrCQkJCQkJJm1ibGVuZ3RoKSkKKysJCQkJbGluZV9zdGFydCArPSBtYmxlbmd0aDsKKysJCQkgICAgfQorKwkJCSAgZWxzZQorKyNlbmRpZgorKwkJCSAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmxpbmVfc3RhcnQpXSkKKysJCQkgICAgbGluZV9zdGFydCsrOworKwkJCX0KKyAJCSAgICAgIGxpbmUtPmtleWJlZyA9IGxpbmVfc3RhcnQ7CisgCQkgICAgfQorIAkJfQorQEAgLTE1MDAsNyArMTgwMyw3IEBACisgICAgaGlkZW91c2x5IGZhc3QuICovCisgCisgc3RhdGljIGludAorLW51bWNvbXBhcmUgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisrbnVtY29tcGFyZV91bmkgKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCisgeworICAgd2hpbGUgKGJsYW5rc1t0b191Y2hhciAoKmEpXSkKKyAgICAgYSsrOworQEAgLTE1MTAsNiArMTgxMywyNSBAQAorICAgcmV0dXJuIHN0cm51bWNtcCAoYSwgYiwgZGVjaW1hbF9wb2ludCwgdGhvdXNhbmRzX3NlcCk7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50CisrbnVtY29tcGFyZV9tYiAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKKyt7CisrICBzaXplX3QgbWJsZW5ndGgsIGxlbjsKKysgIGxlbiA9IHN0cmxlbiAoYSk7IC8qIG9rYXkgZm9yIFVURi04ICovCisrICB3aGlsZSAoKmEgJiYgaXNtYmJsYW5rIChhLCBsZW4gPiBNQl9DVVJfTUFYID8gTUJfQ1VSX01BWCA6IGxlbiwgJm1ibGVuZ3RoKSkKKysgICAgeworKyAgICAgIGEgKz0gbWJsZW5ndGg7CisrICAgICAgbGVuIC09IG1ibGVuZ3RoOworKyAgICB9CisrICBsZW4gPSBzdHJsZW4gKGIpOyAvKiBva2F5IGZvciBVVEYtOCAqLworKyAgd2hpbGUgKCpiICYmIGlzbWJibGFuayAoYiwgbGVuID4gTUJfQ1VSX01BWCA/IE1CX0NVUl9NQVggOiBsZW4sICZtYmxlbmd0aCkpCisrICAgIGIgKz0gbWJsZW5ndGg7CisrCisrICByZXR1cm4gc3RybnVtY21wIChhLCBiLCBkZWNpbWFsX3BvaW50LCB0aG91c2FuZHNfc2VwKTsKKyt9CisrI2VuZGlmIC8qIEhBVl9FTUJSVE9XQyAqLworKworIHN0YXRpYyBpbnQKKyBnZW5lcmFsX251bWNvbXBhcmUgKGNvbnN0IGNoYXIgKnNhLCBjb25zdCBjaGFyICpzYikKKyB7CitAQCAtMTU0Myw3ICsxODY1LDcgQEAKKyAgICBSZXR1cm4gMCBpZiB0aGUgbmFtZSBpbiBTIGlzIG5vdCByZWNvZ25pemVkLiAgKi8KKyAKKyBzdGF0aWMgaW50CistZ2V0bW9udGggKGNoYXIgY29uc3QgKm1vbnRoLCBzaXplX3QgbGVuKQorK2dldG1vbnRoX3VuaSAoY2hhciBjb25zdCAqbW9udGgsIHNpemVfdCBsZW4pCisgeworICAgc2l6ZV90IGxvID0gMDsKKyAgIHNpemVfdCBoaSA9IE1PTlRIU19QRVJfWUVBUjsKK0BAIC0xNjk4LDExICsyMDIwLDc5IEBACisgICByZXR1cm4gZGlmZjsKKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyBpbnQKKytnZXRtb250aF9tYiAoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKKyt7CisrICBjaGFyICptb250aDsKKysgIHJlZ2lzdGVyIHNpemVfdCBpOworKyAgcmVnaXN0ZXIgaW50IGxvID0gMCwgaGkgPSBNT05USFNfUEVSX1lFQVIsIHJlc3VsdDsKKysgIGNoYXIgKnRtcDsKKysgIHNpemVfdCB3Y2xlbmd0aCwgbWJsZW5ndGg7CisrICBjb25zdCBjaGFyICoqcHA7CisrICBjb25zdCB3Y2hhcl90ICoqd3BwOworKyAgd2NoYXJfdCAqbW9udGhfd2NzOworKyAgbWJzdGF0ZV90IHN0YXRlOworKworKyAgd2hpbGUgKGxlbiA+IDAgJiYgaXNtYmJsYW5rIChzLCBsZW4sICZtYmxlbmd0aCkpCisrICAgIHsKKysgICAgICBzICs9IG1ibGVuZ3RoOworKyAgICAgIGxlbiAtPSBtYmxlbmd0aDsKKysgICAgfQorKworKyAgaWYgKGxlbiA9PSAwKQorKyAgICByZXR1cm4gMDsKKysKKysgIG1vbnRoID0gKGNoYXIgKikgYWxsb2NhIChsZW4gKyAxKTsKKysKKysgIHRtcCA9IChjaGFyICopIGFsbG9jYSAobGVuICsgMSk7CisrICBtZW1jcHkgKHRtcCwgcywgbGVuKTsKKysgIHRtcFtsZW5dID0gJ1wwJzsKKysgIHBwID0gKGNvbnN0IGNoYXIgKiopJnRtcDsKKysgIG1vbnRoX3djcyA9ICh3Y2hhcl90ICopIGFsbG9jYSAoKGxlbiArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CisrICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgd2NsZW5ndGggPSBtYnNydG93Y3MgKG1vbnRoX3djcywgcHAsIGxlbiArIDEsICZzdGF0ZSk7CisrICBhc3NlcnQgKHdjbGVuZ3RoICE9IChzaXplX3QpLTEgJiYgKnBwID09IE5VTEwpOworKworKyAgZm9yIChpID0gMDsgaSA8IHdjbGVuZ3RoOyBpKyspCisrICAgIHsKKysgICAgICBtb250aF93Y3NbaV0gPSB0b3d1cHBlcihtb250aF93Y3NbaV0pOworKyAgICAgIGlmIChpc3dibGFuayAobW9udGhfd2NzW2ldKSkKKysJeworKwkgIG1vbnRoX3djc1tpXSA9IEwnXDAnOworKwkgIGJyZWFrOworKwl9CisrICAgIH0KKysKKysgIHdwcCA9IChjb25zdCB3Y2hhcl90ICoqKSZtb250aF93Y3M7CisrCisrICBtYmxlbmd0aCA9IHdjc3J0b21icyAobW9udGgsIHdwcCwgbGVuICsgMSwgJnN0YXRlKTsKKysgIGFzc2VydCAobWJsZW5ndGggIT0gKC0xKSAmJiAqd3BwID09IE5VTEwpOworKworKyAgZG8KKysgICAgeworKyAgICAgIGludCBpeCA9IChsbyArIGhpKSAvIDI7CisrCisrICAgICAgaWYgKHN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltpeF0ubmFtZSwgc3RybGVuIChtb250aHRhYltpeF0ubmFtZSkpIDwgMCkKKysJaGkgPSBpeDsKKysgICAgICBlbHNlCisrCWxvID0gaXg7CisrICAgIH0KKysgIHdoaWxlIChoaSAtIGxvID4gMSk7CisrCisrICByZXN1bHQgPSAoIXN0cm5jbXAgKG1vbnRoLCBtb250aHRhYltsb10ubmFtZSwgc3RybGVuIChtb250aHRhYltsb10ubmFtZSkpCisrICAgICAgPyBtb250aHRhYltsb10udmFsIDogMCk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysjZW5kaWYKKysKKyAvKiBDb21wYXJlIHR3byBsaW5lcyBBIGFuZCBCIHRyeWluZyBldmVyeSBrZXkgaW4gc2VxdWVuY2UgdW50aWwgdGhlcmUKKyAgICBhcmUgbm8gbW9yZSBrZXlzIG9yIGEgZGlmZmVyZW5jZSBpcyBmb3VuZC4gKi8KKyAKKyBzdGF0aWMgaW50Cista2V5Y29tcGFyZSAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK2tleWNvbXBhcmVfdW5pIChjb25zdCBzdHJ1Y3QgbGluZSAqYSwgY29uc3Qgc3RydWN0IGxpbmUgKmIpCisgeworICAgc3RydWN0IGtleWZpZWxkIGNvbnN0ICprZXkgPSBrZXlsaXN0OworIAorQEAgLTE4NzUsNiArMjI2NSwxNzkgQEAKKyAgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisgfQorIAorKyNpZiBIQVZFX01CUlRPV0MKKytzdGF0aWMgaW50Cisra2V5Y29tcGFyZV9tYiAoY29uc3Qgc3RydWN0IGxpbmUgKmEsIGNvbnN0IHN0cnVjdCBsaW5lICpiKQorK3sKKysgIHN0cnVjdCBrZXlmaWVsZCAqa2V5ID0ga2V5bGlzdDsKKysKKysgIC8qIEZvciB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIHRoZSBrZXkgcG9zaXRpb25zIGhhdmUgYmVlbgorKyAgICAgcHJlY29tcHV0ZWQgZm9yIHVzLiAqLworKyAgY2hhciAqdGV4dGEgPSBhLT5rZXliZWc7CisrICBjaGFyICp0ZXh0YiA9IGItPmtleWJlZzsKKysgIGNoYXIgKmxpbWEgPSBhLT5rZXlsaW07CisrICBjaGFyICpsaW1iID0gYi0+a2V5bGltOworKworKyAgc2l6ZV90IG1ibGVuZ3RoX2EsIG1ibGVuZ3RoX2I7CisrICB3Y2hhcl90IHdjX2EsIHdjX2I7CisrICBtYnN0YXRlX3Qgc3RhdGVfYSwgc3RhdGVfYjsKKysKKysgIGludCBkaWZmOworKworKyAgbWVtc2V0ICgmc3RhdGVfYSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmc3RhdGVfYiwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGNoYXIgKnRyYW5zbGF0ZSA9ICh1bnNpZ25lZCBjaGFyICopIGtleS0+dHJhbnNsYXRlOworKyAgICAgIGJvb2wgY29uc3QgKmlnbm9yZSA9IGtleS0+aWdub3JlOworKworKyAgICAgIC8qIEZpbmQgdGhlIGxlbmd0aHMuICovCisrICAgICAgc2l6ZV90IGxlbmEgPSBsaW1hIDw9IHRleHRhID8gMCA6IGxpbWEgLSB0ZXh0YTsKKysgICAgICBzaXplX3QgbGVuYiA9IGxpbWIgPD0gdGV4dGIgPyAwIDogbGltYiAtIHRleHRiOworKworKyAgICAgIC8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGZpZWxkcy4gKi8KKysgICAgICBpZiAoa2V5LT5yYW5kb20pCisrICAgICAgICBkaWZmID0gY29tcGFyZV9yYW5kb20gKHRleHRhLCBsZW5hLCB0ZXh0YiwgbGVuYik7CisrICAgICAgZWxzZSBpZiAoa2V5LT5udW1lcmljIHwga2V5LT5nZW5lcmFsX251bWVyaWMpCisrCXsKKysJICBjaGFyIHNhdmVhID0gKmxpbWEsIHNhdmViID0gKmxpbWI7CisrCisrCSAgKmxpbWEgPSAqbGltYiA9ICdcMCc7CisrCSAgaWYgKGZvcmNlX2dlbmVyYWxfbnVtY29tcGFyZSkKKysJICAgIGRpZmYgPSBnZW5lcmFsX251bWNvbXBhcmUgKHRleHRhLCB0ZXh0Yik7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9ICgoa2V5LT5udW1lcmljID8gbnVtY29tcGFyZSA6IGdlbmVyYWxfbnVtY29tcGFyZSkKKysJCSh0ZXh0YSwgdGV4dGIpKTsKKysJICAqbGltYSA9IHNhdmVhLCAqbGltYiA9IHNhdmViOworKwl9CisrICAgICAgZWxzZSBpZiAoa2V5LT5tb250aCkKKysJZGlmZiA9IGdldG1vbnRoICh0ZXh0YSwgbGVuYSkgLSBnZXRtb250aCAodGV4dGIsIGxlbmIpOworKyAgICAgIGVsc2UKKysJeworKwkgIGlmIChpZ25vcmUgfHwgdHJhbnNsYXRlKQorKwkgICAgeworKwkgICAgICBjaGFyICpjb3B5X2EgPSAoY2hhciAqKSBhbGxvY2EgKGxlbmEgKyAxICsgbGVuYiArIDEpOworKwkgICAgICBjaGFyICpjb3B5X2IgPSBjb3B5X2EgKyBsZW5hICsgMTsKKysJICAgICAgc2l6ZV90IG5ld19sZW5fYSwgbmV3X2xlbl9iOworKwkgICAgICBzaXplX3QgaSwgajsKKysKKysJICAgICAgLyogSWdub3JlIGFuZC9vciB0cmFuc2xhdGUgY2hhcnMgYmVmb3JlIGNvbXBhcmluZy4gICovCisrIyBkZWZpbmUgSUdOT1JFX0NIQVJTKE5FV19MRU4sIExFTiwgVEVYVCwgQ09QWSwgV0MsIE1CTEVOR1RILCBTVEFURSkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgd2NoYXJfdCB1d2M7CQkJCQkJCVwKKysgICAgICBjaGFyIG1iY1tNQl9MRU5fTUFYXTsJCQkJCQlcCisrICAgICAgbWJzdGF0ZV90IHN0YXRlX3djOwkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgICAgZm9yIChORVdfTEVOID0gaSA9IDA7IGkgPCBMRU47KQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWJzdGF0ZV90IHN0YXRlX2JhazsJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgIHN0YXRlX2JhayA9IFNUQVRFOwkJCQkJCVwKKysJICBNQkxFTkdUSCA9IG1icnRvd2MgKCZXQywgVEVYVCArIGksIExFTiAtIGksICZTVEFURSk7CQlcCisrCQkJCQkJCQkJXAorKwkgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEJCVwKKysJICAgICAgfHwgTUJMRU5HVEggPT0gMCkJCQkJCQlcCisrCSAgICB7CQkJCQkJCQlcCisrCSAgICAgIGlmIChNQkxFTkdUSCA9PSAoc2l6ZV90KS0yIHx8IE1CTEVOR1RIID09IChzaXplX3QpLTEpCVwKKysJCVNUQVRFID0gc3RhdGVfYmFrOwkJCQkJXAorKwkgICAgICBpZiAoIWlnbm9yZSkJCQkJCQlcCisrCQlDT1BZW05FV19MRU4rK10gPSBURVhUW2krK107CQkJCVwKKysJICAgICAgY29udGludWU7CQkJCQkJCVwKKysJICAgIH0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgaWYgKGlnbm9yZSkJCQkJCQkJXAorKwkgICAgewkJCQkJCQkJXAorKwkgICAgICBpZiAoKGlnbm9yZSA9PSBub25wcmludGluZyAmJiAhaXN3cHJpbnQgKFdDKSkJCVwKKysJCSAgIHx8IChpZ25vcmUgPT0gbm9uZGljdGlvbmFyeQkJCQlcCisrCQkgICAgICAgJiYgIWlzd2FsbnVtIChXQykgJiYgIWlzd2JsYW5rIChXQykpKQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIGNvbnRpbnVlOwkJCQkJCVwKKysJCX0JCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJICBpZiAodHJhbnNsYXRlKQkJCQkJCVwKKysJICAgIHsJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrCSAgICAgIHV3YyA9IHRvd3VwcGVyKFdDKTsJCQkJCVwKKysJICAgICAgaWYgKFdDID09IHV3YykJCQkJCQlcCisrCQl7CQkJCQkJCVwKKysJCSAgbWVtY3B5IChtYmMsIFRFWFQgKyBpLCBNQkxFTkdUSCk7CQkJXAorKwkJICBpICs9IE1CTEVOR1RIOwkJCQkJXAorKwkJfQkJCQkJCQlcCisrCSAgICAgIGVsc2UJCQkJCQkJXAorKwkJewkJCQkJCQlcCisrCQkgIGkgKz0gTUJMRU5HVEg7CQkJCQlcCisrCQkgIFdDID0gdXdjOwkJCQkJCVwKKysJCSAgbWVtc2V0ICgmc3RhdGVfd2MsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CQlcCisrCQkJCQkJCQkJXAorKwkJICBNQkxFTkdUSCA9IHdjcnRvbWIgKG1iYywgV0MsICZzdGF0ZV93Yyk7CQlcCisrCQkgIGFzc2VydCAoTUJMRU5HVEggIT0gKHNpemVfdCktMSAmJiBNQkxFTkdUSCAhPSAwKTsJXAorKwkJfQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKwkgICAgICBmb3IgKGogPSAwOyBqIDwgTUJMRU5HVEg7IGorKykJCQkJXAorKwkJQ09QWVtORVdfTEVOKytdID0gbWJjW2pdOwkJCQlcCisrCSAgICB9CQkJCQkJCQlcCisrCSAgZWxzZQkJCQkJCQkJXAorKwkgICAgZm9yIChqID0gMDsgaiA8IE1CTEVOR1RIOyBqKyspCQkJCVwKKysJICAgICAgQ09QWVtORVdfTEVOKytdID0gVEVYVFtpKytdOwkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgICBDT1BZW05FV19MRU5dID0gJ1wwJzsJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysJICAgICAgSUdOT1JFX0NIQVJTIChuZXdfbGVuX2EsIGxlbmEsIHRleHRhLCBjb3B5X2EsCisrCQkJICAgIHdjX2EsIG1ibGVuZ3RoX2EsIHN0YXRlX2EpOworKwkgICAgICBJR05PUkVfQ0hBUlMgKG5ld19sZW5fYiwgbGVuYiwgdGV4dGIsIGNvcHlfYiwKKysJCQkgICAgd2NfYiwgbWJsZW5ndGhfYiwgc3RhdGVfYik7CisrCSAgICAgIGRpZmYgPSB4bWVtY29sbCAoY29weV9hLCBuZXdfbGVuX2EsIGNvcHlfYiwgbmV3X2xlbl9iKTsKKysJICAgIH0KKysJICBlbHNlIGlmIChsZW5hID09IDApCisrCSAgICBkaWZmID0gLSBOT05aRVJPIChsZW5iKTsKKysJICBlbHNlIGlmIChsZW5iID09IDApCisrCSAgICBnb3RvIGdyZWF0ZXI7CisrCSAgZWxzZQorKwkgICAgZGlmZiA9IHhtZW1jb2xsICh0ZXh0YSwgbGVuYSwgdGV4dGIsIGxlbmIpOworKwl9CisrCisrICAgICAgaWYgKGRpZmYpCisrCWdvdG8gbm90X2VxdWFsOworKworKyAgICAgIGtleSA9IGtleS0+bmV4dDsKKysgICAgICBpZiAoISBrZXkpCisrCWJyZWFrOworKworKyAgICAgIC8qIEZpbmQgdGhlIGJlZ2lubmluZyBhbmQgbGltaXQgb2YgdGhlIG5leHQgZmllbGQuICAqLworKyAgICAgIGlmIChrZXktPmV3b3JkICE9IC0xKQorKwlsaW1hID0gbGltZmllbGQgKGEsIGtleSksIGxpbWIgPSBsaW1maWVsZCAoYiwga2V5KTsKKysgICAgICBlbHNlCisrCWxpbWEgPSBhLT50ZXh0ICsgYS0+bGVuZ3RoIC0gMSwgbGltYiA9IGItPnRleHQgKyBiLT5sZW5ndGggLSAxOworKworKyAgICAgIGlmIChrZXktPnN3b3JkICE9IC0xKQorKwl0ZXh0YSA9IGJlZ2ZpZWxkIChhLCBrZXkpLCB0ZXh0YiA9IGJlZ2ZpZWxkIChiLCBrZXkpOworKyAgICAgIGVsc2UKKysJeworKwkgIHRleHRhID0gYS0+dGV4dCwgdGV4dGIgPSBiLT50ZXh0OworKwkgIGlmIChrZXktPnNraXBzYmxhbmtzKQorKwkgICAgeworKwkgICAgICB3aGlsZSAodGV4dGEgPCBsaW1hICYmIGlzbWJibGFuayAodGV4dGEsIGxpbWEgLSB0ZXh0YSwgJm1ibGVuZ3RoX2EpKQorKwkJdGV4dGEgKz0gbWJsZW5ndGhfYTsKKysJICAgICAgd2hpbGUgKHRleHRiIDwgbGltYiAmJiBpc21iYmxhbmsgKHRleHRiLCBsaW1iIC0gdGV4dGIsICZtYmxlbmd0aF9iKSkKKysJCXRleHRiICs9IG1ibGVuZ3RoX2I7CisrCSAgICB9CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrCisrZ3JlYXRlcjoKKysgIGRpZmYgPSAxOworK25vdF9lcXVhbDoKKysgIHJldHVybiBrZXktPnJldmVyc2UgPyAtZGlmZiA6IGRpZmY7CisrfQorKyNlbmRpZgorKworIC8qIENvbXBhcmUgdHdvIGxpbmVzIEEgYW5kIEIsIHJldHVybmluZyBuZWdhdGl2ZSwgemVybywgb3IgcG9zaXRpdmUKKyAgICBkZXBlbmRpbmcgb24gd2hldGhlciBBIGNvbXBhcmVzIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiBCLiAqLworCitAQCAtMjc0NCw3ICszMzA1LDcgQEAKKyAgIGluaXRpYWxpemVfZXhpdF9mYWlsdXJlIChTT1JUX0ZBSUxVUkUpOworIAorICAgaGFyZF9MQ19DT0xMQVRFID0gaGFyZF9sb2NhbGUgKExDX0NPTExBVEUpOworLSNpZiBIQVZFX05MX0xBTkdJTkZPCisrI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVAorICAgaGFyZF9MQ19USU1FID0gaGFyZF9sb2NhbGUgKExDX1RJTUUpOworICNlbmRpZgorIAorQEAgLTI3NjUsNiArMzMyNiwyNyBAQAorICAgICAgIHRob3VzYW5kc19zZXAgPSAtMTsKKyAgIH0KKyAKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBpbml0dGFibGVzID0gaW5pdHRhYmxlc19tYjsKKysgICAgICBiZWdmaWVsZCA9IGJlZ2ZpZWxkX21iOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfbWI7CisrICAgICAgZ2V0bW9udGggPSBnZXRtb250aF9tYjsKKysgICAgICBrZXljb21wYXJlID0ga2V5Y29tcGFyZV9tYjsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV9tYjsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgaW5pdHRhYmxlcyA9IGluaXR0YWJsZXNfdW5pOworKyAgICAgIGJlZ2ZpZWxkID0gYmVnZmllbGRfdW5pOworKyAgICAgIGxpbWZpZWxkID0gbGltZmllbGRfdW5pOworKyAgICAgIGdldG1vbnRoID0gZ2V0bW9udGhfdW5pOworKyAgICAgIGtleWNvbXBhcmUgPSBrZXljb21wYXJlX3VuaTsKKysgICAgICBudW1jb21wYXJlID0gbnVtY29tcGFyZV91bmk7CisrICAgIH0KKysKKyAgIGhhdmVfcmVhZF9zdGRpbiA9IGZhbHNlOworICAgaW5pdHRhYmxlcyAoKTsKKyAKK0BAIC0zMDE1LDEzICszNTk3LDM1IEBACisgCisgCWNhc2UgJ3QnOgorIAkgIHsKKy0JICAgIGNoYXIgbmV3dGFiID0gb3B0YXJnWzBdOworLQkgICAgaWYgKCEgbmV3dGFiKQorKwkgICAgY2hhciBuZXd0YWJbTUJfTEVOX01BWCArIDFdOworKwkgICAgc2l6ZV90IG5ld3RhYl9sZW5ndGggPSAxOworKwkgICAgc3RybmNweSAobmV3dGFiLCBvcHRhcmcsIE1CX0xFTl9NQVgpOworKwkgICAgaWYgKCEgbmV3dGFiWzBdKQorIAkgICAgICBlcnJvciAoU09SVF9GQUlMVVJFLCAwLCBfKCJlbXB0eSB0YWIiKSk7CistCSAgICBpZiAob3B0YXJnWzFdKQorKyNpZiBIQVZFX01CUlRPV0MKKysJICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKysJICAgICAgeworKwkJd2NoYXJfdCB3YzsKKysJCW1ic3RhdGVfdCBzdGF0ZTsKKysJCXNpemVfdCBpOworKworKwkJbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQluZXd0YWJfbGVuZ3RoID0gbWJydG93YyAoJndjLCBuZXd0YWIsIHN0cm5sZW4gKG5ld3RhYiwKKysJCQkJCQkJICAgICAgIE1CX0xFTl9NQVgpLAorKwkJCQkJICZzdGF0ZSk7CisrCQlzd2l0Y2ggKG5ld3RhYl9sZW5ndGgpCisrCQkgIHsKKysJCSAgY2FzZSAoc2l6ZV90KSAtMToKKysJCSAgY2FzZSAoc2l6ZV90KSAtMjoKKysJCSAgY2FzZSAwOgorKwkJICAgIG5ld3RhYl9sZW5ndGggPSAxOworKwkJICB9CisrCSAgICAgIH0KKysjZW5kaWYKKysJICAgIGlmIChuZXd0YWJfbGVuZ3RoID09IDEgJiYgb3B0YXJnWzFdKQorIAkgICAgICB7CisgCQlpZiAoU1RSRVEgKG9wdGFyZywgIlxcMCIpKQorLQkJICBuZXd0YWIgPSAnXDAnOworKwkJICBuZXd0YWJbMF0gPSAnXDAnOworIAkJZWxzZQorIAkJICB7CisgCQkgICAgLyogUHJvdm9rZSB3aXRoIGBzb3J0IC10eHgnLiAgQ29tcGxhaW4gYWJvdXQKK0BAIC0zMDMyLDkgKzM2MzYsMTIgQEAKKyAJCQkgICBxdW90ZSAob3B0YXJnKSk7CisgCQkgIH0KKyAJICAgICAgfQorLQkgICAgaWYgKHRhYiAhPSBUQUJfREVGQVVMVCAmJiB0YWIgIT0gbmV3dGFiKQorKwkgICAgaWYgKHRhYl9sZW5ndGgKKysJCSYmICh0YWJfbGVuZ3RoICE9IG5ld3RhYl9sZW5ndGgKKysJCSAgICB8fCBtZW1jbXAgKHRhYiwgbmV3dGFiLCB0YWJfbGVuZ3RoKSAhPSAwKSkKKyAJICAgICAgZXJyb3IgKFNPUlRfRkFJTFVSRSwgMCwgXygiaW5jb21wYXRpYmxlIHRhYnMiKSk7CistCSAgICB0YWIgPSBuZXd0YWI7CisrCSAgICBtZW1jcHkgKHRhYiwgbmV3dGFiLCBuZXd0YWJfbGVuZ3RoKTsKKysJICAgIHRhYl9sZW5ndGggPSBuZXd0YWJfbGVuZ3RoOworIAkgIH0KKyAJICBicmVhazsKKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvdW5leHBhbmQuYy5pMThuCTIwMDctMDEtMTQgMTU6NDE6MjguMDAwMDAwMDAwICswMDAwCisrKysgY29yZXV0aWxzLTYuOCsvc3JjL3VuZXhwYW5kLmMJMjAwNy0wMy0wMSAxNTowODoyNC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zOSwxMSArMzksMjggQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBtYnN0YXRlX3QsIG1icnRvd2MoKSwgd2N3aWR0aCgpLiAqLworKyNpZiBIQVZFX1dDSEFSX0gKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICAgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4gICovCisrI2lmICFkZWZpbmVkIE1CX0xFTl9NQVggfHwgTUJfTEVOX01BWCA8IDIKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogU29tZSBzeXN0ZW1zLCBsaWtlIEJlT1MsIGhhdmUgbXVsdGlieXRlIGVuY29kaW5ncyBidXQgbGFjayBtYnN0YXRlX3QuICAqLworKyNpZiBIQVZFX01CUlRPV0MgJiYgZGVmaW5lZCBtYnN0YXRlX3QKKysjIGRlZmluZSBtYnJ0b3djKHB3YywgcywgbiwgcHMpIChtYnJ0b3djKSAocHdjLCBzLCBuLCAwKQorKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJ1bmV4cGFuZCIKKyAKK0BAIC0xMTAsNiArMTI3LDIwOCBAQAorICAge05VTEwsIDAsIE5VTEwsIDB9CisgfTsKKyAKKytzdGF0aWMgRklMRSAqbmV4dF9maWxlIChGSUxFICpmcCk7CisrCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrdW5leHBhbmRfbXVsdGlieXRlICh2b2lkKQorK3sKKysgIEZJTEUgKmZwOwkJCS8qIElucHV0IHN0cmVhbS4gKi8KKysgIG1ic3RhdGVfdCBpX3N0YXRlOwkJLyogQ3VycmVudCBzaGlmdCBzdGF0ZSBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLworKyAgbWJzdGF0ZV90IGlfc3RhdGVfYmFrOwkvKiBCYWNrIHVwIHRoZSBJX1NUQVRFLiAqLworKyAgbWJzdGF0ZV90IG9fc3RhdGU7CQkvKiBDdXJyZW50IHNoaWZ0IHN0YXRlIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkJLyogTmV4dCByZWFkIHBvc2l0aW9uIG9mIEJVRi4gKi8KKysgIHNpemVfdCBidWZsZW4gPSAwOwkJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2M7CQkJLyogQSBnb3R0ZW4gd2lkZSBjaGFyYWN0ZXIuICovCisrICBzaXplX3QgbWJsZW5ndGg7CQkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCQkgICB3aGljaCBzaG93cyBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysKKysgIC8qIEluZGV4IGluIGB0YWJfbGlzdCcgb2YgbmV4dCB0YWJzdG9wOiAqLworKyAgaW50IHRhYl9pbmRleCA9IDA7CQkvKiBGb3IgY2FsY3VsYXRpbmcgd2lkdGggb2YgcGVuZGluZyB0YWJzLiAqLworKyAgaW50IHByaW50X3RhYl9pbmRleCA9IDA7CS8qIEZvciBwcmludGluZyBhcyBtYW55IHRhYnMgYXMgcG9zc2libGUuICovCisrICB1bnNpZ25lZCBpbnQgY29sdW1uID0gMDsJLyogQ29sdW1uIG9uIHNjcmVlbiBvZiBuZXh0IGNoYXIuICovCisrICBpbnQgbmV4dF90YWJfY29sdW1uOwkJLyogQ29sdW1uIHRoZSBuZXh0IHRhYiBzdG9wIGlzIG9uLiAqLworKyAgaW50IGNvbnZlcnQgPSAxOwkJLyogSWYgbm9uemVybywgcGVyZm9ybSB0cmFuc2xhdGlvbnMuICovCisrICB1bnNpZ25lZCBpbnQgcGVuZGluZyA9IDA7CS8qIFBlbmRpbmcgY29sdW1ucyBvZiBibGFua3MuICovCisrCisrICBmcCA9IG5leHRfZmlsZSAoKEZJTEUgKikgTlVMTCk7CisrICBpZiAoZnAgPT0gTlVMTCkKKysgICAgcmV0dXJuOworKworKyAgbWVtc2V0ICgmb19zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgbWVtc2V0ICgmaV9zdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIGlmIChidWZsZW4gPCBNQl9MRU5fTUFYICYmICFmZW9mKGZwKSAmJiAhZmVycm9yKGZwKSkKKysJeworKwkgIG1lbW1vdmUgKGJ1ZiwgYnVmcG9zLCBidWZsZW4pOworKwkgIGJ1ZmxlbiArPSBmcmVhZCAoYnVmICsgYnVmbGVuLCBzaXplb2YoY2hhciksIEJVRlNJWiwgZnApOworKwkgIGJ1ZnBvcyA9IGJ1ZjsKKysJfQorKworKyAgICAgIC8qIEdldCBhIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgICAgIGlmIChidWZsZW4gPCAxKQorKwl7CisrCSAgbWJsZW5ndGggPSAxOworKwkgIHdjID0gV0VPRjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlfc3RhdGVfYmFrID0gaV9zdGF0ZTsKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCh3Y2hhcl90ICopJndjLCBidWZwb3MsIGJ1ZmxlbiwgJmlfc3RhdGUpOworKwl9CisrCisrICAgICAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJeworKwkgIGlfc3RhdGUgPSBpX3N0YXRlX2JhazsKKysJICB3YyA9IEwnXDAnOworKwl9CisrCisrICAgICAgaWYgKHdjID09IEwnICcgJiYgY29udmVydCAmJiBjb2x1bW4gPCBJTlRfTUFYKQorKwl7CisrCSAgKytwZW5kaW5nOworKwkgICsrY29sdW1uOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcdCcgJiYgY29udmVydCkKKysJeworKwkgIGlmICh0YWJfc2l6ZSA9PSAwKQorKwkgICAgeworKwkgICAgICAvKiBEbyBub3QgbGV0IHRhYl9pbmRleCA9PSBmaXJzdF9mcmVlX3RhYjsKKysJCSBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkgICAgICB3aGlsZSAodGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICYmIGNvbHVtbiA+PSB0YWJfbGlzdFt0YWJfaW5kZXhdKQorKwkJdGFiX2luZGV4Kys7CisrCSAgICAgIG5leHRfdGFiX2NvbHVtbiA9IHRhYl9saXN0W3RhYl9pbmRleF07CisrCSAgICAgIGlmICh0YWJfaW5kZXggPCBmaXJzdF9mcmVlX3RhYiAtIDEpCisrCQl0YWJfaW5kZXgrKzsKKysJICAgICAgaWYgKGNvbHVtbiA+PSBuZXh0X3RhYl9jb2x1bW4pCisrCQl7CisrCQkgIGNvbnZlcnQgPSAwOwkvKiBSYW4gb3V0IG9mIHRhYiBzdG9wcy4gKi8KKysJCSAgZ290byBmbHVzaF9wZW5kX21iOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgbmV4dF90YWJfY29sdW1uID0gY29sdW1uICsgdGFiX3NpemUgLSBjb2x1bW4gJSB0YWJfc2l6ZTsKKysJICAgIH0KKysJICBwZW5kaW5nICs9IG5leHRfdGFiX2NvbHVtbiAtIGNvbHVtbjsKKysJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCX0KKysgICAgICBlbHNlCisrCXsKKytmbHVzaF9wZW5kX21iOgorKwkgIC8qIEZsdXNoIHBlbmRpbmcgc3BhY2VzLiAgUHJpbnQgYXMgbWFueSB0YWJzIGFzIHBvc3NpYmxlLAorKwkgICAgIHRoZW4gcHJpbnQgdGhlIHJlc3QgYXMgc3BhY2VzLiAqLworKwkgIGlmIChwZW5kaW5nID09IDEpCisrCSAgICB7CisrCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCSAgICAgIHBlbmRpbmcgPSAwOworKwkgICAgfQorKwkgIGNvbHVtbiAtPSBwZW5kaW5nOworKwkgIHdoaWxlIChwZW5kaW5nID4gMCkKKysJICAgIHsKKysJICAgICAgaWYgKHRhYl9zaXplID09IDApCisrCQl7CisrCQkgIC8qIERvIG5vdCBsZXQgcHJpbnRfdGFiX2luZGV4ID09IGZpcnN0X2ZyZWVfdGFiOworKwkJICAgICBzdG9wIHdoZW4gaXQgaXMgMSBsZXNzLiAqLworKwkJICB3aGlsZSAocHJpbnRfdGFiX2luZGV4IDwgZmlyc3RfZnJlZV90YWIgLSAxCisrCQkgICAgICAmJiBjb2x1bW4gPj0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCSAgbmV4dF90YWJfY29sdW1uID0gdGFiX2xpc3RbcHJpbnRfdGFiX2luZGV4XTsKKysJCSAgaWYgKHByaW50X3RhYl9pbmRleCA8IGZpcnN0X2ZyZWVfdGFiIC0gMSkKKysJCSAgICBwcmludF90YWJfaW5kZXgrKzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBuZXh0X3RhYl9jb2x1bW4gPQorKwkJICAgIGNvbHVtbiArIHRhYl9zaXplIC0gY29sdW1uICUgdGFiX3NpemU7CisrCQl9CisrCSAgICAgIGlmIChuZXh0X3RhYl9jb2x1bW4gLSBjb2x1bW4gPD0gcGVuZGluZykKKysJCXsKKysJCSAgcHV0Y2hhciAoJ1x0Jyk7CisrCQkgIHBlbmRpbmcgLT0gbmV4dF90YWJfY29sdW1uIC0gY29sdW1uOworKwkJICBjb2x1bW4gPSBuZXh0X3RhYl9jb2x1bW47CisrCQl9CisrCSAgICAgIGVsc2UKKysJCXsKKysJCSAgLS1wcmludF90YWJfaW5kZXg7CisrCQkgIGNvbHVtbiArPSBwZW5kaW5nOworKwkJICB3aGlsZSAocGVuZGluZyAhPSAwKQorKwkJICAgIHsKKysJCSAgICAgIHB1dGNoYXIgKCcgJyk7CisrCQkgICAgICBwZW5kaW5nLS07CisrCQkgICAgfQorKwkJfQorKwkgICAgfQorKworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgeworKwkgICAgICBmcCA9IG5leHRfZmlsZSAoZnApOworKwkgICAgICBpZiAoZnAgPT0gTlVMTCkKKysJCWJyZWFrOyAgICAgICAgICAvKiBObyBtb3JlIGZpbGVzLiAqLworKwkgICAgICBlbHNlCisrCQl7CisrCQkgIG1lbXNldCAoJmlfc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgY29udGludWU7CisrCQl9CisrCSAgICB9CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQpCisrCQl7CisrCQkgICsrY29sdW1uOworKwkJICBpZiAoY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJICAgIGNvbnZlcnQgPSAwOworKwkJfQorKwkgICAgICBtYmxlbmd0aCA9IDE7CisrCSAgICAgIHB1dGNoYXIgKGJ1ZlswXSk7CisrCSAgICB9CisrCSAgZWxzZSBpZiAobWJsZW5ndGggPT0gMCkKKysJICAgIHsKKysJICAgICAgaWYgKGNvbnZlcnQgJiYgY29udmVydF9lbnRpcmVfbGluZSA9PSAwKQorKwkJY29udmVydCA9IDA7CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysJICAgICAgcHV0Y2hhciAoJ1wwJyk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoY29udmVydCkKKysJCXsKKysJCSAgaWYgKHdjID09IEwnXGInKQorKwkJICAgIHsKKysJCSAgICAgIGlmIChjb2x1bW4gPiAwKQorKwkJCS0tY29sdW1uOworKwkJICAgIH0KKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGludCB3aWR0aDsgICAgICAgICAgICAvKiBUaGUgd2lkdGggb2YgV0MuICovCisrCisrCQkgICAgICB3aWR0aCA9IHdjd2lkdGggKHdjKTsKKysJCSAgICAgIGNvbHVtbiArPSAod2lkdGggPiAwKSA/IHdpZHRoIDogMDsKKysJCSAgICAgIGlmIChjb252ZXJ0X2VudGlyZV9saW5lID09IDApCisrCQkJY29udmVydCA9IDA7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAod2MgPT0gTCdcbicpCisrCQl7CisrCQkgIHRhYl9pbmRleCA9IHByaW50X3RhYl9pbmRleCA9IDA7CisrCQkgIGNvbHVtbiA9IHBlbmRpbmcgPSAwOworKwkJICBjb252ZXJ0ID0gMTsKKysJCX0KKysJICAgICAgZndyaXRlIChidWZwb3MsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICB9CisrCX0KKysgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrICAgICAgYnVmcG9zICs9IG1ibGVuZ3RoOworKyAgICB9CisrfQorKyNlbmRpZgorKworKworIHZvaWQKKyB1c2FnZSAoaW50IHN0YXR1cykKKyB7CitAQCAtNTMxLDcgKzc1MCwxMiBAQAorIAorICAgZmlsZV9saXN0ID0gKG9wdGluZCA8IGFyZ2MgPyAmYXJndltvcHRpbmRdIDogc3RkaW5fYXJndik7CisgCistICB1bmV4cGFuZCAoKTsKKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHVuZXhwYW5kX211bHRpYnl0ZSAoKTsKKysgIGVsc2UKKysjZW5kaWYKKysgICAgdW5leHBhbmQgKCk7CisgCisgICBpZiAoaGF2ZV9yZWFkX3N0ZGluICYmIGZjbG9zZSAoc3RkaW4pICE9IDApCisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIGVycm5vLCAiLSIpOworLS0tIGNvcmV1dGlscy02LjgrL3NyYy9wci5jLmkxOG4JMjAwNy0wMS0xNCAxNTo0MToyOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi44Ky9zcmMvcHIuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTMxMyw2ICszMTMsMzIgQEAKKyAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworKy8qIEdldCBNQl9MRU5fTUFYLiAgKi8KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrLyogTUJfTEVOX01BWCBpcyBpbmNvcnJlY3RseSBkZWZpbmVkIHRvIGJlIDEgaW4gYXQgbGVhc3Qgb25lIEdDQworKyAgIGluc3RhbGxhdGlvbjsgd29yayBhcm91bmQgdGhpcyBjb25maWd1cmF0aW9uIGVycm9yLiAgKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYID09IDEKKysjIGRlZmluZSBNQl9MRU5fTUFYIDE2CisrI2VuZGlmCisrCisrLyogR2V0IE1CX0NVUl9NQVguICAqLworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKysvKiBTb2xhcmlzIDIuNSBoYXMgYSBidWc6IDx3Y2hhci5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8d2N0eXBlLmg+LiAgKi8KKysvKiBHZXQgbWJzdGF0ZV90LCBtYnJ0b3djKCksIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NIQVJfSAorKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysvKiBHZXQgaXN3cHJpbnQoKS4gLS0gZm9yIHdjd2lkdGgoKS4gICovCisrI2lmIEhBVkVfV0NUWVBFX0gKKysjIGluY2x1ZGUgPHdjdHlwZS5oPgorKyNlbmRpZgorKyNpZiAhZGVmaW5lZCBpc3dwcmludCAmJiAhSEFWRV9JU1dQUklOVAorKyMgZGVmaW5lIGlzd3ByaW50KHdjKSAxCisrI2VuZGlmCisrCisgI2luY2x1ZGUgInN5c3RlbS5oIgorICNpbmNsdWRlICJlcnJvci5oIgorICNpbmNsdWRlICJoYXJkLWxvY2FsZS5oIgorQEAgLTMyNCw2ICszNTAsMTggQEAKKyAjaW5jbHVkZSAic3RyZnRpbWUuaCIKKyAjaW5jbHVkZSAieHN0cnRvbC5oIgorIAorKy8qIFNvbWUgc3lzdGVtcywgbGlrZSBCZU9TLCBoYXZlIG11bHRpYnl0ZSBlbmNvZGluZ3MgYnV0IGxhY2sgbWJzdGF0ZV90LiAgKi8KKysjaWYgSEFWRV9NQlJUT1dDICYmIGRlZmluZWQgbWJzdGF0ZV90CisrIyBkZWZpbmUgbWJydG93Yyhwd2MsIHMsIG4sIHBzKSAobWJydG93YykgKHB3YywgcywgbiwgMCkKKysjZW5kaWYKKysKKysjaWZuZGVmIEhBVkVfREVDTF9XQ1dJRFRICisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9XQ1dJRFRICisrZXh0ZXJuIGludCB3Y3dpZHRoICgpOworKyNlbmRpZgorKworIC8qIFRoZSBvZmZpY2lhbCBuYW1lIG9mIHRoaXMgcHJvZ3JhbSAoZS5nLiwgbm8gYGcnIHByZWZpeCkuICAqLworICNkZWZpbmUgUFJPR1JBTV9OQU1FICJwciIKKyAKK0BAIC00MTYsNyArNDU0LDIwIEBACisgCisgI2RlZmluZSBOVUxMQ09MIChDT0xVTU4gKikwCisgCistc3RhdGljIGludCBjaGFyX3RvX2NsdW1wIChjaGFyIGMpOworKy8qIEZ1bnRpb24gcG9pbnRlcnMgdG8gc3dpdGNoIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIGJ5dGUgbG9jYWxlIG9yIGZvcgorKyAgIG11bHRpYnl0ZSBsb2NhbGUuIElmIG11bHRpYnl0ZSBmdW5jdGlvbnMgZG8gbm90IGV4aXN0IGluIHlvdXIgc3lzeXRlbSwKKysgICB0aGVzZSBwb2ludGVycyBhbHdheXMgcG9pbnQgdGhlIGZ1bmN0aW9uIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgKCpwcmludF9jaGFyKSAoY2hhciBjKTsKKytzdGF0aWMgaW50ICgqY2hhcl90b19jbHVtcCkgKGNoYXIgYyk7CisrCisrLyogRnVuY3Rpb25zIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9zaW5nbGUgKGNoYXIgYyk7Cisrc3RhdGljIGludCBjaGFyX3RvX2NsdW1wX3NpbmdsZSAoY2hhciBjKTsKKysKKysvKiBGdW5jdGlvbnMgZm9yIG11bHRpYnl0ZSBsb2NhbGUuICovCisrc3RhdGljIHZvaWQgcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKTsKKytzdGF0aWMgaW50IGNoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYyk7CisrCisgc3RhdGljIGJvb2wgcmVhZF9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyBib29sIHByaW50X3BhZ2UgKHZvaWQpOworIHN0YXRpYyBib29sIHByaW50X3N0b3JlZCAoQ09MVU1OICpwKTsKK0BAIC00MjYsNiArNDc3LDcgQEAKKyBzdGF0aWMgdm9pZCBwYWRfYWNyb3NzX3RvIChpbnQgcG9zaXRpb24pOworIHN0YXRpYyB2b2lkIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKTsKKyBzdGF0aWMgdm9pZCBnZXRvcHRhcmcgKGNoYXIgKmFyZywgY2hhciBzd2l0Y2hfY2hhciwgY2hhciAqY2hhcmFjdGVyLAorKwkJICAgICAgIGludCAqY2hhcmFjdGVyX2xlbmd0aCwgaW50ICpjaGFyYWN0ZXJfd2lkdGgsCisgCQkgICAgICAgaW50ICpudW1iZXIpOworIHZvaWQgdXNhZ2UgKGludCBzdGF0dXMpOworIHN0YXRpYyB2b2lkIHByaW50X2ZpbGVzIChpbnQgbnVtYmVyX29mX2ZpbGVzLCBjaGFyICoqYXYpOworQEAgLTQ0MCw3ICs0OTIsNiBAQAorIHN0YXRpYyB2b2lkIHBhZF9kb3duIChpbnQgbGluZXMpOworIHN0YXRpYyB2b2lkIHJlYWRfcmVzdF9vZl9saW5lIChDT0xVTU4gKnApOworIHN0YXRpYyB2b2lkIHNraXBfcmVhZCAoQ09MVU1OICpwLCBpbnQgY29sdW1uX251bWJlcik7Cistc3RhdGljIHZvaWQgcHJpbnRfY2hhciAoY2hhciBjKTsKKyBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBwcmludF9zZXBfc3RyaW5nICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBzZXBhcmF0b3Jfc3RyaW5nIChjb25zdCBjaGFyICpvcHRhcmdfUyk7CitAQCAtNDU1LDcgKzUwNiw3IEBACisgICAgd2Ugc3RvcmUgdGhlIGxlZnRtb3N0IGNvbHVtbnMgY29udGlndW91c2x5IGluIGJ1ZmYuCisgICAgVG8gcHJpbnQgYSBsaW5lIGZyb20gYnVmZiwgZ2V0IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgICAgZnJvbSBsaW5lX3ZlY3RvcltpXSwgYW5kIHByaW50IHVwIHRvIGxpbmVfdmVjdG9yW2kgKyAxXS4gKi8KKy1zdGF0aWMgY2hhciAqYnVmZjsKKytzdGF0aWMgdW5zaWduZWQgY2hhciAqYnVmZjsKKyAKKyAvKiBJbmRleCBvZiB0aGUgcG9zaXRpb24gaW4gYnVmZiB3aGVyZSB0aGUgbmV4dCBjaGFyYWN0ZXIKKyAgICB3aWxsIGJlIHN0b3JlZC4gKi8KK0BAIC01NTksNyArNjEwLDcgQEAKKyBzdGF0aWMgYm9vbCB1bnRhYmlmeV9pbnB1dCA9IGZhbHNlOworIAorIC8qICgtZSkgVGhlIGlucHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgaW5wdXRfdGFiX2NoYXIgPSAnXHQnOworK3N0YXRpYyBjaGFyIGlucHV0X3RhYl9jaGFyW01CX0xFTl9NQVhdID0gIlx0IjsKKyAKKyAvKiAoLWUpIFRhYnN0b3BzIGFyZSBhdCBjaGFyc19wZXJfdGFiLCAyKmNoYXJzX3Blcl90YWIsIDMqY2hhcnNfcGVyX3RhYiwgLi4uCisgICAgd2hlcmUgdGhlIGxlZnRtb3N0IGNvbHVtbiBpcyAxLiAqLworQEAgLTU2OSw3ICs2MjAsMTAgQEAKKyBzdGF0aWMgYm9vbCB0YWJpZnlfb3V0cHV0ID0gZmFsc2U7CisgCisgLyogKC1pKSBUaGUgb3V0cHV0IHRhYiBjaGFyYWN0ZXIuICovCistc3RhdGljIGNoYXIgb3V0cHV0X3RhYl9jaGFyID0gJ1x0JzsKKytzdGF0aWMgY2hhciBvdXRwdXRfdGFiX2NoYXJbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtaSkgVGhlIGJ5dGUgbGVuZ3RoIG9mIG91dHB1dCB0YWIgY2hhcmFjdGVyLiAqLworK3N0YXRpYyBpbnQgb3V0cHV0X3RhYl9jaGFyX2xlbmd0aCA9IDE7CisgCisgLyogKC1pKSBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCB0YWIuICovCisgc3RhdGljIGludCBjaGFyc19wZXJfb3V0cHV0X3RhYiA9IDg7CitAQCAtNjQzLDcgKzY5NywxMyBAQAorIHN0YXRpYyBib29sIG51bWJlcmVkX2xpbmVzID0gZmFsc2U7CisgCisgLyogKC1uKSBDaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworLXN0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3IgPSAnXHQnOworK3N0YXRpYyBjaGFyIG51bWJlcl9zZXBhcmF0b3JbTUJfTEVOX01BWF0gPSAiXHQiOworKworKy8qICgtbikgVGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgd2hpY2ggZm9sbG93cyBlYWNoIGxpbmUgbnVtYmVyLiAqLworK3N0YXRpYyBpbnQgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGggPSAxOworKworKy8qICgtbikgVGhlIGNoYXJhY3RlciB3aWR0aCBvZiB0aGUgY2hhcmFjdGVyIHdoaWNoIGZvbGxvd3MgZWFjaCBsaW5lIG51bWJlci4gKi8KKytzdGF0aWMgaW50IG51bWJlcl9zZXBhcmF0b3Jfd2lkdGggPSAwOworIAorIC8qICgtbikgbGluZSBjb3VudGluZyBzdGFydHMgd2l0aCAxc3QgbGluZSBvZiBpbnB1dCBmaWxlIChub3Qgd2l0aCAxc3QKKyAgICBsaW5lIG9mIDFzdCBwYWdlIHByaW50ZWQpLiAqLworQEAgLTY5Niw2ICs3NTYsNyBAQAorICAgIC1hfENPTFVNTnwtbSBpcyBhIGBzcGFjZScgYW5kIHdpdGggdGhlIC1KIG9wdGlvbiBhIGB0YWInLiAqLworIHN0YXRpYyBjaGFyICpjb2xfc2VwX3N0cmluZyA9ICIiOworIHN0YXRpYyBpbnQgY29sX3NlcF9sZW5ndGggPSAwOworK3N0YXRpYyBpbnQgY29sX3NlcF93aWR0aCA9IDA7Cisgc3RhdGljIGNoYXIgKmNvbHVtbl9zZXBhcmF0b3IgPSAiICI7Cisgc3RhdGljIGNoYXIgKmxpbmVfc2VwYXJhdG9yID0gIlx0IjsKKyAKK0BAIC04NTIsNiArOTEzLDEzIEBACisgICBjb2xfc2VwX2xlbmd0aCA9IChpbnQpIHN0cmxlbiAob3B0YXJnX1MpOworICAgY29sX3NlcF9zdHJpbmcgPSB4bWFsbG9jIChjb2xfc2VwX2xlbmd0aCArIDEpOworICAgc3RyY3B5IChjb2xfc2VwX3N0cmluZywgb3B0YXJnX1MpOworKworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSkKKysgICAgY29sX3NlcF93aWR0aCA9IG1ic3dpZHRoIChjb2xfc2VwX3N0cmluZywgMCk7CisrICBlbHNlCisrI2VuZGlmCisrICAgIGNvbF9zZXBfd2lkdGggPSBjb2xfc2VwX2xlbmd0aDsKKyB9CisgCisgaW50CitAQCAtODc3LDYgKzk0NSwyMSBAQAorIAorICAgYXRleGl0IChjbG9zZV9zdGRvdXQpOworIAorKy8qIERlZmluZSB3aGljaCBmdW5jdGlvbnMgYXJlIHVzZWQsIHRoZSBvbmVzIGZvciBzaW5nbGUgYnl0ZSBsb2NhbGUgb3IgdGhlIG9uZXMKKysgICBmb3IgbXVsdGlieXRlIGxvY2FsZS4gKi8KKysjaWYgSEFWRV9NQlJUT1dDCisrICBpZiAoTUJfQ1VSX01BWCA+IDEpCisrICAgIHsKKysgICAgICBwcmludF9jaGFyID0gcHJpbnRfY2hhcl9tdWx0aTsKKysgICAgICBjaGFyX3RvX2NsdW1wID0gY2hhcl90b19jbHVtcF9tdWx0aTsKKysgICAgfQorKyAgZWxzZQorKyNlbmRpZgorKyAgICB7CisrICAgICAgcHJpbnRfY2hhciA9IHByaW50X2NoYXJfc2luZ2xlOworKyAgICAgIGNoYXJfdG9fY2x1bXAgPSBjaGFyX3RvX2NsdW1wX3NpbmdsZTsKKysgICAgfQorKworICAgbl9maWxlcyA9IDA7CisgICBmaWxlX25hbWVzID0gKGFyZ2MgPiAxCisgCQk/IHhtYWxsb2MgKChhcmdjIC0gMSkgKiBzaXplb2YgKGNoYXIgKikpCitAQCAtOTQ5LDggKzEwMzIsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnZSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnZScsICZpbnB1dF90YWJfY2hhciwKKy0JCSAgICAgICAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB7CisrCSAgICAgIGludCBkdW1teV9sZW5ndGgsIGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2UnLCBpbnB1dF90YWJfY2hhciwgJmR1bW15X2xlbmd0aCwKKysJCQkgJmR1bW15X3dpZHRoLCAmY2hhcnNfcGVyX2lucHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB1bnRhYmlmeV9pbnB1dCA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtOTYzLDggKzEwNTAsMTIgQEAKKyAJICBicmVhazsKKyAJY2FzZSAnaSc6CisgCSAgaWYgKG9wdGFyZykKKy0JICAgIGdldG9wdGFyZyAob3B0YXJnLCAnaScsICZvdXRwdXRfdGFiX2NoYXIsCistCQkgICAgICAgJmNoYXJzX3Blcl9vdXRwdXRfdGFiKTsKKysJICAgIHsKKysJICAgICAgaW50IGR1bW15X3dpZHRoOworKworKwkgICAgICBnZXRvcHRhcmcgKG9wdGFyZywgJ2knLCBvdXRwdXRfdGFiX2NoYXIsICZvdXRwdXRfdGFiX2NoYXJfbGVuZ3RoLAorKwkJCSAmZHVtbXlfd2lkdGgsICZjaGFyc19wZXJfb3V0cHV0X3RhYik7CisrCSAgICB9CisgCSAgLyogQ291bGQgY2hlY2sgdGFiIHdpZHRoID4gMC4gKi8KKyAJICB0YWJpZnlfb3V0cHV0ID0gdHJ1ZTsKKyAJICBicmVhazsKK0BAIC05OTEsOCArMTA4Miw4IEBACisgCWNhc2UgJ24nOgorIAkgIG51bWJlcmVkX2xpbmVzID0gdHJ1ZTsKKyAJICBpZiAob3B0YXJnKQorLQkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgJm51bWJlcl9zZXBhcmF0b3IsCistCQkgICAgICAgJmNoYXJzX3Blcl9udW1iZXIpOworKwkgICAgZ2V0b3B0YXJnIChvcHRhcmcsICduJywgbnVtYmVyX3NlcGFyYXRvciwgJm51bWJlcl9zZXBhcmF0b3JfbGVuZ3RoLAorKwkJICAgICAgICZudW1iZXJfc2VwYXJhdG9yX3dpZHRoLCAmY2hhcnNfcGVyX251bWJlcik7CisgCSAgYnJlYWs7CisgCWNhc2UgJ04nOgorIAkgIHNraXBfY291bnQgPSBmYWxzZTsKK0BAIC0xMDMxLDcgKzExMjIsNyBAQAorIAkgIG9sZF9zID0gZmFsc2U7CisgCSAgLyogUmVzZXQgYW4gYWRkaXRpb25hbCBpbnB1dCBvZiAtcywgLVMgZG9taW5hdGVzIC1zICovCisgCSAgY29sX3NlcF9zdHJpbmcgPSAiIjsKKy0JICBjb2xfc2VwX2xlbmd0aCA9IDA7CisrCSAgY29sX3NlcF9sZW5ndGggPSBjb2xfc2VwX3dpZHRoID0gMDsKKyAJICB1c2VfY29sX3NlcGFyYXRvciA9IHRydWU7CisgCSAgaWYgKG9wdGFyZykKKyAJICAgIHNlcGFyYXRvcl9zdHJpbmcgKG9wdGFyZyk7CitAQCAtMTE4OCwxMCArMTI3OSw0NSBAQAorICAgIGEgbnVtYmVyLiAqLworIAorIHN0YXRpYyB2b2lkCistZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpudW1iZXIpCisrZ2V0b3B0YXJnIChjaGFyICphcmcsIGNoYXIgc3dpdGNoX2NoYXIsIGNoYXIgKmNoYXJhY3RlciwgaW50ICpjaGFyYWN0ZXJfbGVuZ3RoLAorKwkgICBpbnQgKmNoYXJhY3Rlcl93aWR0aCwgaW50ICpudW1iZXIpCisgeworICAgaWYgKCFJU0RJR0lUICgqYXJnKSkKKy0gICAgKmNoYXJhY3RlciA9ICphcmcrKzsKKysgICAgeworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCS8qIGZvciBtdWx0aWJ5dGUgbG9jYWxlLiAqLworKwl7CisrCSAgd2NoYXJfdCB3YzsKKysJICBzaXplX3QgbWJsZW5ndGg7CisrCSAgaW50IHdpZHRoOworKwkgIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysKKysJICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgYXJnLCBzdHJubGVuKGFyZywgTUJfTEVOX01BWCksICZzdGF0ZSk7CisrCisrCSAgaWYgKG1ibGVuZ3RoID09IChzaXplX3QpLTEgfHwgbWJsZW5ndGggPT0gKHNpemVfdCktMikKKysJICAgIHsKKysJICAgICAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gMTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgICpjaGFyYWN0ZXJfbGVuZ3RoID0gKG1ibGVuZ3RoIDwgMSkgPyAxIDogbWJsZW5ndGg7CisrCSAgICAgIHdpZHRoID0gd2N3aWR0aCAod2MpOworKwkgICAgICAqY2hhcmFjdGVyX3dpZHRoID0gKHdpZHRoIDwgMCkgPyAwIDogd2lkdGg7CisrCSAgICB9CisrCisrCSAgc3RybmNweSAoY2hhcmFjdGVyLCBhcmcsICpjaGFyYWN0ZXJfbGVuZ3RoKTsKKysJICBhcmcgKz0gKmNoYXJhY3Rlcl9sZW5ndGg7CisrCX0KKysgICAgICBlbHNlCQkJLyogZm9yIHNpbmdsZSBieXRlIGxvY2FsZS4gKi8KKysjZW5kaWYKKysJeworKwkgICpjaGFyYWN0ZXIgPSAqYXJnKys7CisrCSAgKmNoYXJhY3Rlcl9sZW5ndGggPSAxOworKwkgICpjaGFyYWN0ZXJfd2lkdGggPSAxOworKwl9CisrICAgIH0KKysKKyAgIGlmICgqYXJnKQorICAgICB7CisgICAgICAgbG9uZyBpbnQgdG1wX2xvbmc7CitAQCAtMTI1Niw3ICsxMzgyLDcgQEAKKyAJICBlbHNlCisgCSAgICBjb2xfc2VwX3N0cmluZyA9IGNvbHVtbl9zZXBhcmF0b3I7CisgCistCSAgY29sX3NlcF9sZW5ndGggPSAxOworKwkgIGNvbF9zZXBfbGVuZ3RoID0gY29sX3NlcF93aWR0aCA9IDE7CisgCSAgdXNlX2NvbF9zZXBhcmF0b3IgPSB0cnVlOworIAl9CisgICAgICAgLyogSXQncyByYXRoZXIgcG9pbnRsZXNzIHRvIGRlZmluZSBhIFRBQiBzZXBhcmF0b3Igd2l0aCBjb2x1bW4KK0BAIC0xMjg4LDExICsxNDE0LDExIEBACisgCSAgICAgVEFCX1dJRFRIIChjaGFyc19wZXJfaW5wdXRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsgICAqLworIAorICAgICAgIC8qIEVzdGltYXRlIGNoYXJzX3Blcl90ZXh0IHdpdGhvdXQgYW55IG1hcmdpbiBhbmQga2VlcCBpdCBjb25zdGFudC4gKi8KKy0gICAgICBpZiAobnVtYmVyX3NlcGFyYXRvciA9PSAnXHQnKQorKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKworIAkgIFRBQl9XSURUSCAoY2hhcnNfcGVyX2RlZmF1bHRfdGFiLCBjaGFyc19wZXJfbnVtYmVyKTsKKyAgICAgICBlbHNlCistCW51bWJlcl93aWR0aCA9IGNoYXJzX3Blcl9udW1iZXIgKyAxOworKwludW1iZXJfd2lkdGggPSBjaGFyc19wZXJfbnVtYmVyICsgbnVtYmVyX3NlcGFyYXRvcl93aWR0aDsKKyAKKyAgICAgICAvKiBUaGUgbnVtYmVyIGlzIHBhcnQgb2YgdGhlIGNvbHVtbiB3aWR0aCB1bmxlc3Mgd2UgYXJlCisgCSBwcmludGluZyBmaWxlcyBpbiBwYXJhbGxlbC4gKi8KK0BAIC0xMzA3LDcgKzE0MzMsNyBAQAorICAgICB9CisgCisgICBjaGFyc19wZXJfY29sdW1uID0gKGNoYXJzX3Blcl9saW5lIC0gY2hhcnNfdXNlZF9ieV9udW1iZXIgLQorLQkJICAgICAoY29sdW1ucyAtIDEpICogY29sX3NlcF9sZW5ndGgpIC8gY29sdW1uczsKKysJCSAgICAgKGNvbHVtbnMgLSAxKSAqIGNvbF9zZXBfd2lkdGgpIC8gY29sdW1uczsKKyAKKyAgIGlmIChjaGFyc19wZXJfY29sdW1uIDwgMSkKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgXygicGFnZSB3aWR0aCB0b28gbmFycm93IikpOworQEAgLTE0MzIsNyArMTU1OCw3IEBACisgCisgICAvKiBFbmxhcmdlIHAtPnN0YXJ0X3Bvc2l0aW9uIG9mIGZpcnN0IGNvbHVtbiB0byB1c2UgdGhlIHNhbWUgZm9ybSBvZgorICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCB3aXRoIGFsbCBjb2x1bW5zLiAqLworLSAgaCA9IGggKyBjb2xfc2VwX2xlbmd0aDsKKysgIGggPSBoICsgY29sX3NlcF93aWR0aDsKKyAKKyAgIC8qIFRoaXMgbG9vcCB0YWtlcyBjYXJlIG9mIGFsbCBidXQgdGhlIHJpZ2h0bW9zdCBjb2x1bW4uICovCisgCitAQCAtMTQ2Niw3ICsxNTkyLDcgQEAKKyAJfQorICAgICAgIGVsc2UKKyAJeworLQkgIGggPSBoX25leHQgKyBjb2xfc2VwX2xlbmd0aDsKKysJICBoID0gaF9uZXh0ICsgY29sX3NlcF93aWR0aDsKKyAJICBoX25leHQgPSBoICsgY2hhcnNfcGVyX2NvbHVtbjsKKyAJfQorICAgICB9CitAQCAtMTc1Niw5ICsxODgyLDkgQEAKKyBhbGlnbl9jb2x1bW4gKENPTFVNTiAqcCkKKyB7CisgICBwYWRkaW5nX25vdF9wcmludGVkID0gcC0+c3RhcnRfcG9zaXRpb247CistICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoID4gMCkKKysgIGlmIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCA+IDApCisgICAgIHsKKy0gICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF9sZW5ndGgpOworKyAgICAgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoKTsKKyAgICAgICBwYWRkaW5nX25vdF9wcmludGVkID0gQU5ZV0hFUkU7CisgICAgIH0KKyAKK0BAIC0yMDI5LDEzICsyMTU1LDEzIEBACisgICAgICAgLyogTWF5IGJlIHRvbyBnZW5lcm91cy4gKi8KKyAgICAgICBidWZmID0gWDJSRUFMTE9DIChidWZmLCAmYnVmZl9hbGxvY2F0ZWQpOworICAgICB9CistICBidWZmW2J1ZmZfY3VycmVudCsrXSA9IGM7CisrICBidWZmW2J1ZmZfY3VycmVudCsrXSA9ICh1bnNpZ25lZCBjaGFyKSBjOworIH0KKyAKKyBzdGF0aWMgdm9pZAorIGFkZF9saW5lX251bWJlciAoQ09MVU1OICpwKQorIHsKKy0gIGludCBpOworKyAgaW50IGksIGo7CisgICBjaGFyICpzOworICAgaW50IGxlZnRfY3V0OworIAorQEAgLTIwNTgsMjIgKzIxODQsMjQgQEAKKyAgICAgICAvKiBUYWJpZmljYXRpb24gaXMgYXNzdW1lZCBmb3IgbXVsdGlwbGUgY29sdW1ucywgYWxzbyBmb3Igbi1zZXBhcmF0b3JzLAorIAkgYnV0IGBkZWZhdWx0IG4tc2VwYXJhdG9yID0gVEFCJyBoYXNuJ3QgYmVlbiBnaXZlbiBwcmlvcml0eSBvdmVyCisgCSBlcXVhbCBjb2x1bW5fd2lkdGggYWxzbyBzcGVjaWZpZWQgYnkgUE9TSVguICovCistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBpZiAobnVtYmVyX3NlcGFyYXRvclswXSA9PSAnXHQnKQorICAgICAgICAgeworICAgICAgICAgICBpID0gbnVtYmVyX3dpZHRoIC0gY2hhcnNfcGVyX251bWJlcjsKKyAgICAgICAgICAgd2hpbGUgKGktLSA+IDApCisgCSAgICAocC0+Y2hhcl9mdW5jKSAoJyAnKTsKKyAgICAgICAgIH0KKyAgICAgICBlbHNlCistICAgICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CisrCWZvciAoaiA9IDA7IGogPCBudW1iZXJfc2VwYXJhdG9yX2xlbmd0aDsgaisrKQorKwkgIChwLT5jaGFyX2Z1bmMpIChudW1iZXJfc2VwYXJhdG9yW2pdKTsKKyAgICAgfQorICAgZWxzZQorICAgICAvKiBUbyBjb21wbHkgd2l0aCBQT1NJWCwgd2UgYXZvaWQgYW55IGV4cGFuc2lvbiBvZiBkZWZhdWx0IFRBQgorICAgICAgICBzZXBhcmF0b3Igd2l0aCBhIHNpbmdsZSBjb2x1bW4gb3V0cHV0LiBObyBjb2x1bW5fd2lkdGggcmVxdWlyZW1lbnQKKyAgICAgICAgaGFzIHRvIGJlIGNvbnNpZGVyZWQuICovCisgICAgIHsKKy0gICAgICAocC0+Y2hhcl9mdW5jKSAobnVtYmVyX3NlcGFyYXRvcik7CistICAgICAgaWYgKG51bWJlcl9zZXBhcmF0b3IgPT0gJ1x0JykKKysgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyX3NlcGFyYXRvcl9sZW5ndGg7IGorKykKKysJKHAtPmNoYXJfZnVuYykgKG51bWJlcl9zZXBhcmF0b3Jbal0pOworKyAgICAgIGlmIChudW1iZXJfc2VwYXJhdG9yWzBdID09ICdcdCcpCisgICAgICAgICBvdXRwdXRfcG9zaXRpb24gPSBQT1NfQUZURVJfVEFCIChjaGFyc19wZXJfb3V0cHV0X3RhYiwKKyAJCQkgIG91dHB1dF9wb3NpdGlvbik7CisgICAgIH0KK0BAIC0yMjM0LDcgKzIzNjIsNyBAQAorICAgd2hpbGUgKGdvYWwgLSBoX29sZCA+IDEKKyAJICYmIChoX25ldyA9IFBPU19BRlRFUl9UQUIgKGNoYXJzX3Blcl9vdXRwdXRfdGFiLCBoX29sZCkpIDw9IGdvYWwpCisgICAgIHsKKy0gICAgICBwdXRjaGFyIChvdXRwdXRfdGFiX2NoYXIpOworKyAgICAgIGZ3cml0ZSAob3V0cHV0X3RhYl9jaGFyLCBzaXplb2YoY2hhciksIG91dHB1dF90YWJfY2hhcl9sZW5ndGgsIHN0ZG91dCk7CisgICAgICAgaF9vbGQgPSBoX25ldzsKKyAgICAgfQorICAgd2hpbGUgKCsraF9vbGQgPD0gZ29hbCkKK0BAIC0yMjU0LDYgKzIzODIsNyBAQAorIHsKKyAgIGNoYXIgKnM7CisgICBpbnQgbCA9IGNvbF9zZXBfbGVuZ3RoOworKyAgaW50IG5vdF9zcGFjZV9mbGFnOworIAorICAgcyA9IGNvbF9zZXBfc3RyaW5nOworIAorQEAgLTIyNjcsNiArMjM5Niw3IEBACisgICAgIHsKKyAgICAgICBmb3IgKDsgc2VwYXJhdG9yc19ub3RfcHJpbnRlZCA+IDA7IC0tc2VwYXJhdG9yc19ub3RfcHJpbnRlZCkKKyAJeworKwkgIG5vdF9zcGFjZV9mbGFnID0gMDsKKyAJICB3aGlsZSAobC0tID4gMCkKKyAJICAgIHsKKyAJICAgICAgLyogMyB0eXBlcyBvZiBzZXBfc3RyaW5nczogc3BhY2VzIG9ubHksIHNwYWNlcyBhbmQgY2hhcnMsCitAQCAtMjI4MCwxMiArMjQxMCwxNSBAQAorIAkJfQorIAkgICAgICBlbHNlCisgCQl7CisrCQkgIG5vdF9zcGFjZV9mbGFnID0gMTsKKyAJCSAgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisgCQkgICAgcHJpbnRfd2hpdGVfc3BhY2UgKCk7CisgCQkgIHB1dGNoYXIgKCpzKyspOworLQkJICArK291dHB1dF9wb3NpdGlvbjsKKyAJCX0KKyAJICAgIH0KKysJICBpZiAobm90X3NwYWNlX2ZsYWcpCisrCSAgICBvdXRwdXRfcG9zaXRpb24gKz0gY29sX3NlcF93aWR0aDsKKysKKyAgICAgICAgICAgLyogc2VwX3N0cmluZyBlbmRzIHdpdGggc29tZSBzcGFjZXMgKi8KKyAJICBpZiAoc3BhY2VzX25vdF9wcmludGVkID4gMCkKKyAJICAgIHByaW50X3doaXRlX3NwYWNlICgpOworQEAgLTIzMTMsNyArMjQ0Niw3IEBACisgICAgcmVxdWlyZWQgbnVtYmVyIG9mIHRhYnMgYW5kIHNwYWNlcy4gKi8KKyAKKyBzdGF0aWMgdm9pZAorLXByaW50X2NoYXIgKGNoYXIgYykKKytwcmludF9jaGFyX3NpbmdsZSAoY2hhciBjKQorIHsKKyAgIGlmICh0YWJpZnlfb3V0cHV0KQorICAgICB7CitAQCAtMjMzNyw2ICsyNDcwLDc0IEBACisgICBwdXRjaGFyIChjKTsKKyB9CisgCisrI2lmZGVmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrcHJpbnRfY2hhcl9tdWx0aSAoY2hhciBjKQorK3sKKysgIHN0YXRpYyBzaXplX3QgbWJjX3BvcyA9IDA7CisrICBzdGF0aWMgY2hhciBtYmNbTUJfTEVOX01BWF0gPSB7J1wwJ307CisrICBzdGF0aWMgbWJzdGF0ZV90IHN0YXRlID0geydcMCd9OworKyAgbWJzdGF0ZV90IHN0YXRlX2JhazsKKysgIHdjaGFyX3Qgd2M7CisrICBzaXplX3QgbWJsZW5ndGg7CisrICBpbnQgd2lkdGg7CisrCisrICBpZiAodGFiaWZ5X291dHB1dCkKKysgICAgeworKyAgICAgIHN0YXRlX2JhayA9IHN0YXRlOworKyAgICAgIG1iY1ttYmNfcG9zKytdID0gYzsKKysgICAgICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgICAgIHdoaWxlIChtYmNfcG9zID4gMCkKKysJeworKwkgIHN3aXRjaCAobWJsZW5ndGgpCisrCSAgICB7CisrCSAgICBjYXNlIChzaXplX3QpLTI6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICByZXR1cm47CisrCisrCSAgICBjYXNlIChzaXplX3QpLTE6CisrCSAgICAgIHN0YXRlID0gc3RhdGVfYmFrOworKwkgICAgICArK291dHB1dF9wb3NpdGlvbjsKKysJICAgICAgcHV0Y2hhciAobWJjWzBdKTsKKysJICAgICAgbWVtbW92ZSAobWJjLCBtYmMgKyAxLCBNQl9DVVJfTUFYIC0gMSk7CisrCSAgICAgIC0tbWJjX3BvczsKKysJICAgICAgYnJlYWs7CisrCisrCSAgICBjYXNlIDA6CisrCSAgICAgIG1ibGVuZ3RoID0gMTsKKysKKysJICAgIGRlZmF1bHQ6CisrCSAgICAgIGlmICh3YyA9PSBMJyAnKQorKwkJeworKwkJICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKwkJICAtLW1iY19wb3M7CisrCQkgICsrc3BhY2VzX25vdF9wcmludGVkOworKwkJICByZXR1cm47CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKHNwYWNlc19ub3RfcHJpbnRlZCA+IDApCisrCQlwcmludF93aGl0ZV9zcGFjZSAoKTsKKysKKysJICAgICAgLyogTm9ucHJpbnRhYmxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIHdpZHRoIDAsIGV4Y2VwdCBMJ1xiJy4gKi8KKysJICAgICAgaWYgKCh3aWR0aCA9IHdjd2lkdGggKHdjKSkgPCAxKQorKwkJeworKwkJICBpZiAod2MgPT0gTCdcYicpCisrCQkgICAgLS1vdXRwdXRfcG9zaXRpb247CisrCQl9CisrCSAgICAgIGVsc2UKKysJCW91dHB1dF9wb3NpdGlvbiArPSB3aWR0aDsKKysKKysJICAgICAgZndyaXRlIChtYmMsIHNpemVvZihjaGFyKSwgbWJsZW5ndGgsIHN0ZG91dCk7CisrCSAgICAgIG1lbW1vdmUgKG1iYywgbWJjICsgbWJsZW5ndGgsIE1CX0NVUl9NQVggLSBtYmxlbmd0aCk7CisrCSAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysgICAgICByZXR1cm47CisrICAgIH0KKysgIHB1dGNoYXIgKGMpOworK30KKysjZW5kaWYKKysKKyAvKiBTa2lwIHRvIHBhZ2UgUEFHRSBiZWZvcmUgcHJpbnRpbmcuCisgICAgUEFHRSBtYXkgYmUgbGFyZ2VyIHRoYW4gdG90YWwgbnVtYmVyIG9mIHBhZ2VzLiAqLworIAorQEAgLTI1MTcsOSArMjcxOCw5IEBACisgCSAgYWxpZ25fZW1wdHlfY29scyA9IGZhbHNlOworIAl9CisgCistICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICAgICAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX3dpZHRoID4gMCkKKyAJeworLQkgIHBhZF9hY3Jvc3NfdG8gKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCk7CisrCSAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGgpOworIAkgIHBhZGRpbmdfbm90X3ByaW50ZWQgPSBBTllXSEVSRTsKKyAJfQorIAorQEAgLTI2MjAsOSArMjgyMSw5IEBACisgCX0KKyAgICAgfQorIAorLSAgaWYgKHBhZGRpbmdfbm90X3ByaW50ZWQgLSBjb2xfc2VwX2xlbmd0aCA+IDApCisrICBpZiAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfd2lkdGggPiAwKQorICAgICB7CistICAgICAgcGFkX2Fjcm9zc190byAocGFkZGluZ19ub3RfcHJpbnRlZCAtIGNvbF9zZXBfbGVuZ3RoKTsKKysgICAgICBwYWRfYWNyb3NzX3RvIChwYWRkaW5nX25vdF9wcmludGVkIC0gY29sX3NlcF93aWR0aCk7CisgICAgICAgcGFkZGluZ19ub3RfcHJpbnRlZCA9IEFOWVdIRVJFOworICAgICB9CisgCitAQCAtMjYzNSw4ICsyODM2LDggQEAKKyAgIGlmIChzcGFjZXNfbm90X3ByaW50ZWQgPT0gMCkKKyAgICAgeworICAgICAgIG91dHB1dF9wb3NpdGlvbiA9IHAtPnN0YXJ0X3Bvc2l0aW9uICsgZW5kX3ZlY3RvcltsaW5lXTsKKy0gICAgICBpZiAocC0+c3RhcnRfcG9zaXRpb24gLSBjb2xfc2VwX2xlbmd0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorLQlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF9sZW5ndGg7CisrICAgICAgaWYgKHAtPnN0YXJ0X3Bvc2l0aW9uIC0gY29sX3NlcF93aWR0aCA9PSBjaGFyc19wZXJfbWFyZ2luKQorKwlvdXRwdXRfcG9zaXRpb24gLT0gY29sX3NlcF93aWR0aDsKKyAgICAgfQorIAorICAgcmV0dXJuIHRydWU7CitAQCAtMjY1NSw3ICsyODU2LDcgQEAKKyAgICBudW1iZXIgb2YgY2hhcmFjdGVycyBpcyAxLikgKi8KKyAKKyBzdGF0aWMgaW50CistY2hhcl90b19jbHVtcCAoY2hhciBjKQorK2NoYXJfdG9fY2x1bXBfc2luZ2xlIChjaGFyIGMpCisgeworICAgdW5zaWduZWQgY2hhciB1YyA9IGM7CisgICBjaGFyICpzID0gY2x1bXBfYnVmZjsKK0BAIC0yNjY1LDEwICsyODY2LDEwIEBACisgICBpbnQgY2hhcnM7CisgICBpbnQgY2hhcnNfcGVyX2MgPSA4OworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIpCisrICBpZiAoYyA9PSBpbnB1dF90YWJfY2hhclswXSkKKyAgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworIAorLSAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXIgfHwgYyA9PSAnXHQnKQorKyAgaWYgKGMgPT0gaW5wdXRfdGFiX2NoYXJbMF0gfHwgYyA9PSAnXHQnKQorICAgICB7CisgICAgICAgd2lkdGggPSBUQUJfV0lEVEggKGNoYXJzX3Blcl9jLCBpbnB1dF9wb3NpdGlvbik7CisgCitAQCAtMjczOSw2ICsyOTQwLDE1NCBAQAorICAgcmV0dXJuIGNoYXJzOworIH0KKyAKKysjaWZkZWYgSEFWRV9NQlJUT1dDCisrc3RhdGljIGludAorK2NoYXJfdG9fY2x1bXBfbXVsdGkgKGNoYXIgYykKKyt7CisrICBzdGF0aWMgc2l6ZV90IG1iY19wb3MgPSAwOworKyAgc3RhdGljIGNoYXIgbWJjW01CX0xFTl9NQVhdID0geydcMCd9OworKyAgc3RhdGljIG1ic3RhdGVfdCBzdGF0ZSA9IHsnXDAnfTsKKysgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CisrICB3Y2hhcl90IHdjOworKyAgc2l6ZV90IG1ibGVuZ3RoOworKyAgaW50IHdjX3dpZHRoOworKyAgcmVnaXN0ZXIgY2hhciAqcyA9IGNsdW1wX2J1ZmY7CisrICByZWdpc3RlciBpbnQgaSwgajsKKysgIGNoYXIgZXNjX2J1ZmZbNF07CisrICBpbnQgd2lkdGg7CisrICBpbnQgY2hhcnM7CisrICBpbnQgY2hhcnNfcGVyX2MgPSA4OworKworKyAgc3RhdGVfYmFrID0gc3RhdGU7CisrICBtYmNbbWJjX3BvcysrXSA9IGM7CisrICBtYmxlbmd0aCA9IG1icnRvd2MgKCZ3YywgbWJjLCBtYmNfcG9zLCAmc3RhdGUpOworKworKyAgd2lkdGggPSAwOworKyAgY2hhcnMgPSAwOworKyAgd2hpbGUgKG1iY19wb3MgPiAwKQorKyAgICB7CisrICAgICAgc3dpdGNoIChtYmxlbmd0aCkKKysJeworKwljYXNlIChzaXplX3QpLTI6CisrCSAgc3RhdGUgPSBzdGF0ZV9iYWs7CisrCSAgcmV0dXJuIDA7CisrCisrCWNhc2UgKHNpemVfdCktMToKKysJICBzdGF0ZSA9IHN0YXRlX2JhazsKKysJICBtYmxlbmd0aCA9IDE7CisrCisrCSAgaWYgKHVzZV9lc2Nfc2VxdWVuY2UgfHwgdXNlX2NudHJsX3ByZWZpeCkKKysJICAgIHsKKysJICAgICAgd2lkdGggPSArNDsKKysJICAgICAgY2hhcnMgPSArNDsKKysJICAgICAgKnMrKyA9ICdcXCc7CisrCSAgICAgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIG1iY1swXSk7CisrCSAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjsgKytpKQorKwkJKnMrKyA9IChpbnQpIGVzY19idWZmW2ldOworKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gMTsKKysJICAgICAgY2hhcnMgKz0gMTsKKysJICAgICAgKnMrKyA9IG1iY1swXTsKKysJICAgIH0KKysJICBicmVhazsKKysKKysJY2FzZSAwOgorKwkgIG1ibGVuZ3RoID0gMTsKKysJCS8qIEZhbGwgdGhyb3VnaCAqLworKworKwlkZWZhdWx0OgorKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwKQorKwkgICAgY2hhcnNfcGVyX2MgPSBjaGFyc19wZXJfaW5wdXRfdGFiOworKworKwkgIGlmIChtZW1jbXAgKG1iYywgaW5wdXRfdGFiX2NoYXIsIG1ibGVuZ3RoKSA9PSAwIHx8IGMgPT0gJ1x0JykKKysJICAgIHsKKysJICAgICAgaW50ICB3aWR0aF9pbmM7CisrCisrCSAgICAgIHdpZHRoX2luYyA9IFRBQl9XSURUSCAoY2hhcnNfcGVyX2MsIGlucHV0X3Bvc2l0aW9uKTsKKysJICAgICAgd2lkdGggKz0gd2lkdGhfaW5jOworKworKwkgICAgICBpZiAodW50YWJpZnlfaW5wdXQpCisrCQl7CisrCQkgIGZvciAoaSA9IHdpZHRoX2luYzsgaTsgLS1pKQorKwkJICAgICpzKysgPSAnICc7CisrCQkgIGNoYXJzICs9IHdpZHRoX2luYzsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgIG1ibGVuZ3RoOyBpKyspCisrCQkgICAgKnMrKyA9IG1iY1tpXTsKKysJCSAgY2hhcnMgKz0gbWJsZW5ndGg7CisrCQl9CisrCSAgICB9CisrCSAgZWxzZSBpZiAoKHdjX3dpZHRoID0gd2N3aWR0aCAod2MpKSA8IDEpCisrCSAgICB7CisrCSAgICAgIGlmICh1c2VfZXNjX3NlcXVlbmNlKQorKwkJeworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICB7CisrCQkgICAgICB3aWR0aCArPSA0OworKwkJICAgICAgY2hhcnMgKz0gNDsKKysJCSAgICAgICpzKysgPSAnXFwnOworKwkJICAgICAgc3ByaW50ZiAoZXNjX2J1ZmYsICIlMDNvIiwgYyk7CisrCQkgICAgICBmb3IgKGogPSAwOyBqIDw9IDI7ICsraikKKysJCQkqcysrID0gKGludCkgZXNjX2J1ZmZbal07CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh1c2VfY250cmxfcHJlZml4KQorKwkJeworKwkJICBpZiAod2MgPCAwMjAwKQorKwkJICAgIHsKKysJCSAgICAgIHdpZHRoICs9IDI7CisrCQkgICAgICBjaGFycyArPSAyOworKwkJICAgICAgKnMrKyA9ICdeJzsKKysJCSAgICAgICpzKysgPSB3YyBeIDAxMDA7CisrCQkgICAgfQorKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgZm9yIChpID0gMDsgaSA8IG1ibGVuZ3RoOyBpKyspCisrCQkJeworKwkJCSAgd2lkdGggKz0gNDsKKysJCQkgIGNoYXJzICs9IDQ7CisrCQkJICAqcysrID0gJ1xcJzsKKysJCQkgIHNwcmludGYgKGVzY19idWZmLCAiJTAzbyIsIGMpOworKwkJCSAgZm9yIChqID0gMDsgaiA8PSAyOyArK2opCisrCQkJICAgICpzKysgPSAoaW50KSBlc2NfYnVmZltqXTsKKysJCQl9CisrCQkgICAgfQorKwkJfQorKwkgICAgICBlbHNlIGlmICh3YyA9PSBMJ1xiJykKKysJCXsKKysJCSAgd2lkdGggKz0gLTE7CisrCQkgIGNoYXJzICs9IDE7CisrCQkgICpzKysgPSBjOworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIHdpZHRoICs9IDA7CisrCQkgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkJICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSAgICAqcysrID0gbWJjW2ldOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgd2lkdGggKz0gd2Nfd2lkdGg7CisrCSAgICAgIGNoYXJzICs9IG1ibGVuZ3RoOworKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgbWJsZW5ndGg7IGkrKykKKysJCSpzKysgPSBtYmNbaV07CisrCSAgICB9CisrCX0KKysgICAgICBtZW1tb3ZlIChtYmMsIG1iYyArIG1ibGVuZ3RoLCBNQl9DVVJfTUFYIC0gbWJsZW5ndGgpOworKyAgICAgIG1iY19wb3MgLT0gbWJsZW5ndGg7CisrICAgIH0KKysKKysgIGlucHV0X3Bvc2l0aW9uICs9IHdpZHRoOworKyAgcmV0dXJuIGNoYXJzOworK30KKysjZW5kaWYKKysKKyAvKiBXZSd2ZSBqdXN0IHByaW50ZWQgc29tZSBmaWxlcyBhbmQgbmVlZCB0byBjbGVhbiB1cCB0aGluZ3MgYmVmb3JlCisgICAgbG9va2luZyBmb3IgbW9yZSBvcHRpb25zIGFuZCBwcmludGluZyB0aGUgbmV4dCBiYXRjaCBvZiBmaWxlcy4KKyAKKy0tLSBjb3JldXRpbHMtNi44Ky9zcmMvY3V0LmMuaTE4bgkyMDA3LTAxLTE0IDE1OjQxOjI4LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjgrL3NyYy9jdXQuYwkyMDA3LTAzLTAxIDE1OjA4OjI0LjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDYgKzI5LDExIEBACisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxnZXRvcHQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisrLyogR2V0IG1ic3RhdGVfdCwgbWJydG93YygpLiAgKi8KKysjaWYgSEFWRV9XQ0hBUl9ICisrIyBpbmNsdWRlIDx3Y2hhci5oPgorKyNlbmRpZgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zNyw2ICs0MiwxOCBAQAorICNpbmNsdWRlICJxdW90ZS5oIgorICNpbmNsdWRlICJ4c3RybmR1cC5oIgorIAorKy8qIE1CX0xFTl9NQVggaXMgaW5jb3JyZWN0bHkgZGVmaW5lZCB0byBiZSAxIGluIGF0IGxlYXN0IG9uZSBHQ0MKKysgICBpbnN0YWxsYXRpb247IHdvcmsgYXJvdW5kIHRoaXMgY29uZmlndXJhdGlvbiBlcnJvci4JKi8KKysjaWYgIWRlZmluZWQgTUJfTEVOX01BWCB8fCBNQl9MRU5fTUFYIDwgMgorKyMgdW5kZWYgTUJfTEVOX01BWAorKyMgZGVmaW5lIE1CX0xFTl9NQVggMTYKKysjZW5kaWYKKysKKysvKiBTb21lIHN5c3RlbXMsIGxpa2UgQmVPUywgaGF2ZSBtdWx0aWJ5dGUgZW5jb2RpbmdzIGJ1dCBsYWNrIG1ic3RhdGVfdC4gICovCisrI2lmIEhBVkVfTUJSVE9XQyAmJiBkZWZpbmVkIG1ic3RhdGVfdAorKyMgZGVmaW5lIG1icnRvd2MocHdjLCBzLCBuLCBwcykgKG1icnRvd2MpIChwd2MsIHMsIG4sIDApCisrI2VuZGlmCisrCisgLyogVGhlIG9mZmljaWFsIG5hbWUgb2YgdGhpcyBwcm9ncmFtIChlLmcuLCBubyBgZycgcHJlZml4KS4gICovCisgI2RlZmluZSBQUk9HUkFNX05BTUUgImN1dCIKKyAKK0BAIC02Nyw2ICs4NCw1MiBAQAorICAgICB9CQkJCQkJCVwKKyAgIHdoaWxlICgwKQorIAorKy8qIFJlZmlsbCB0aGUgYnVmZmVyIEJVRiB0byBnZXQgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworKyNkZWZpbmUgUkVGSUxMX0JVRkZFUihCVUYsIEJVRlBPUywgQlVGTEVOLCBTVFJFQU0pCQkJXAorKyAgZG8JCQkJCQkJCQlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgaWYgKEJVRkxFTiA8IE1CX0xFTl9NQVggJiYgIWZlb2YgKFNUUkVBTSkgJiYgIWZlcnJvciAoU1RSRUFNKSkJXAorKwl7CQkJCQkJCQlcCisrCSAgbWVtbW92ZSAoQlVGLCBCVUZQT1MsIEJVRkxFTik7CQkJCVwKKysJICBCVUZMRU4gKz0gZnJlYWQgKEJVRiArIEJVRkxFTiwgc2l6ZW9mKGNoYXIpLCBCVUZTSVosIFNUUkVBTSk7IFwKKysJICBCVUZQT1MgPSBCVUY7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKyAgICB9CQkJCQkJCQkJXAorKyAgd2hpbGUgKDApCisrCisrLyogR2V0IHdpZGUgY2hhcmFjdGVyIG9uIEJVRlBPUy4gQlVGUE9TIGlzIG5vdCBpbmNsdWRlZCBhZnRlciB0aGF0LgorKyAgIElmIGJ5dGUgc2VxdWVuY2UgaXMgbm90IHZhbGlkIGFzIGEgY2hhcmFjdGVyLCBDT05WRkFJTCBpcyAxLiBPdGhlcndpc2UgMC4gKi8gCisrI2RlZmluZSBHRVRfTkVYVF9XQ19GUk9NX0JVRkZFUihXQywgQlVGUE9TLCBCVUZMRU4sIE1CTEVOR1RILCBTVEFURSwgQ09OVkZBSUwpIFwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIG1ic3RhdGVfdCBzdGF0ZV9iYWs7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICBpZiAoQlVGTEVOIDwgMSkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgV0MgPSBXRU9GOwkJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJfQkJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICAvKiBHZXQgYSB3aWRlIGNoYXJhY3Rlci4gKi8JCQkJCVwKKysgICAgICBDT05WRkFJTCA9IDA7CQkJCQkJCVwKKysgICAgICBzdGF0ZV9iYWsgPSBTVEFURTsJCQkJCQlcCisrICAgICAgTUJMRU5HVEggPSBtYnJ0b3djICgod2NoYXJfdCAqKSZXQywgQlVGUE9TLCBCVUZMRU4sICZTVEFURSk7CVwKKysJCQkJCQkJCQlcCisrICAgICAgc3dpdGNoIChNQkxFTkdUSCkJCQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMToJCQkJCQlcCisrCWNhc2UgKHNpemVfdCktMjoJCQkJCQlcCisrCSAgQ09OVkZBSUwrKzsJCQkJCQkJXAorKwkgIFNUQVRFID0gc3RhdGVfYmFrOwkJCQkJCVwKKysJICAvKiBGYWxsIHRocm91Z24uICovCQkJCQkJXAorKwkJCQkJCQkJCVwKKysJY2FzZSAwOgkJCQkJCQkJXAorKwkgIE1CTEVOR1RIID0gMTsJCQkJCQkJXAorKwkgIGJyZWFrOwkJCQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysgIHdoaWxlICgwKQorKworIHN0cnVjdCByYW5nZV9wYWlyCisgICB7CisgICAgIHNpemVfdCBsbzsKK0BAIC04NSw3ICsxNDgsNyBAQAorIC8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZvciBGSUVMRF8xX0JVRkZFUi4gICovCisgc3RhdGljIHNpemVfdCBmaWVsZF8xX2J1ZnNpemU7CisgCistLyogVGhlIGxhcmdlc3QgZmllbGQgb3IgYnl0ZSBpbmRleCB1c2VkIGFzIGFuIGVuZHBvaW50IG9mIGEgY2xvc2VkCisrLyogVGhlIGxhcmdlc3QgYnl0ZSwgY2hhcmFjdGVyIG9yIGZpZWxkIGluZGV4IHVzZWQgYXMgYW4gZW5kcG9pbnQgb2YgYSBjbG9zZWQKKyAgICBvciBkZWdlbmVyYXRlIHJhbmdlIHNwZWNpZmljYXRpb247ICB0aGlzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgc3RhcnRpbmcKKyAgICBpbmRleCBvZiByaWdodC1vcGVuLWVuZGVkIHJhbmdlcy4gIEZvciBleGFtcGxlLCB3aXRoIGVpdGhlciByYW5nZSBzcGVjCisgICAgYDItNSw5LScsIGAyLTMsNSw5LScgdGhpcyB2YXJpYWJsZSB3b3VsZCBiZSBzZXQgdG8gNS4gICovCitAQCAtOTcsMTAgKzE2MCwxMSBAQAorIAorIC8qIFRoaXMgaXMgYSBiaXQgdmVjdG9yLgorICAgIEluIGJ5dGUgbW9kZSwgd2hpY2ggYnl0ZXMgdG8gb3V0cHV0LgorKyAgIEluIGNoYXJhY3RlciBtb2RlLCB3aGljaCBjaGFyYWN0ZXJzIHRvIG91dHB1dC4KKyAgICBJbiBmaWVsZCBtb2RlLCB3aGljaCBERUxJTS1zZXBhcmF0ZWQgZmllbGRzIHRvIG91dHB1dC4KKy0gICBCb3RoIGJ5dGVzIGFuZCBmaWVsZHMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIHdpdGggMSwKKysgICBCeXRlcywgY2hhcmFjdGVycyBhbmQgZmllbGRzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIDEsCisgICAgc28gdGhlIHplcm90aCBiaXQgb2YgdGhpcyBhcnJheSBpcyB1bnVzZWQuCistICAgQSBmaWVsZCBvciBieXRlIEsgaGFzIGJlZW4gc2VsZWN0ZWQgaWYKKysgICBBIGJ5dGUsIGNoYXJhY3RlciBvciBmaWVsZCBLIGhhcyBiZWVuIHNlbGVjdGVkIGlmCisgICAgKEsgPD0gTUFYX1JBTkdFX0VORFBPSU5UIGFuZCBpc19wcmludGFibGVfZmllbGQoSykpCisgICAgIHx8IChFT0xfUkFOR0VfU1RBUlQgPiAwICYmIEsgPj0gRU9MX1JBTkdFX1NUQVJUKS4gICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgKnByaW50YWJsZV9maWVsZDsKK0BAIC0xMDksOSArMTczLDEyIEBACisgICB7CisgICAgIHVuZGVmaW5lZF9tb2RlLAorIAorLSAgICAvKiBPdXRwdXQgY2hhcmFjdGVycyB0aGF0IGFyZSBpbiB0aGUgZ2l2ZW4gYnl0ZXMuICovCisrICAgIC8qIE91dHB1dCBieXRlcyB0aGF0IGFyZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb25zLiAqLworICAgICBieXRlX21vZGUsCisgCisrICAgIC8qIE91dHB1dCBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoZSBnaXZlbiBwb3NpdGlvbnMuICovCisrICAgIGNoYXJhY3Rlcl9tb2RlLAorKworICAgICAvKiBPdXRwdXQgdGhlIGdpdmVuIGRlbGltZXRlci1zZXBhcmF0ZWQgZmllbGRzLiAqLworICAgICBmaWVsZF9tb2RlCisgICB9OworQEAgLTEyMSw2ICsxODgsMTMgQEAKKyAKKyBzdGF0aWMgZW51bSBvcGVyYXRpbmdfbW9kZSBvcGVyYXRpbmdfbW9kZTsKKyAKKysvKiBJZiBub256ZXJvLCB3aGVuIGluIGJ5dGUgbW9kZSwgZG9uJ3Qgc3BsaXQgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworK3N0YXRpYyBpbnQgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZTsKKysKKysvKiBJZiBub256ZXJvLCB0aGUgZnVuY3Rpb24gZm9yIHNpbmdsZSBieXRlIGxvY2FsZSBpcyB3b3JrCisrICAgaWYgdGhpcyBwcm9ncmFtIHJ1bnMgb24gbXVsdGlieXRlIGxvY2FsZS4gKi8KKytzdGF0aWMgaW50IGZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysKKyAvKiBJZiB0cnVlIGRvIG5vdCBvdXRwdXQgbGluZXMgY29udGFpbmluZyBubyBkZWxpbWV0ZXIgY2hhcmFjdGVycy4KKyAgICBPdGhlcndpc2UsIGFsbCBzdWNoIGxpbmVzIGFyZSBwcmludGVkLiAgVGhpcyBvcHRpb24gaXMgdmFsaWQgb25seQorICAgIHdpdGggZmllbGQgbW9kZS4gICovCitAQCAtMTMyLDYgKzIwNiw5IEBACisgCisgLyogVGhlIGRlbGltZXRlciBjaGFyYWN0ZXIgZm9yIGZpZWxkIG1vZGUuICovCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVsaW07CisrI2lmIEhBVkVfV0NIQVJfSAorK3N0YXRpYyB3Y2hhcl90IHdjZGVsaW07CisrI2VuZGlmCisgCisgLyogVHJ1ZSBpZiB0aGUgLS1vdXRwdXQtZGVsaW1pdGVyPVNUUklORyBvcHRpb24gd2FzIHNwZWNpZmllZC4gICovCisgc3RhdGljIGJvb2wgb3V0cHV0X2RlbGltaXRlcl9zcGVjaWZpZWQ7CitAQCAtMjA1LDcgKzI4Miw3IEBACisgICAtZiwgLS1maWVsZHM9TElTVCAgICAgICBzZWxlY3Qgb25seSB0aGVzZSBmaWVsZHM7ICBhbHNvIHByaW50IGFueSBsaW5lXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgbm8gZGVsaW1pdGVyIGNoYXJhY3RlciwgdW5sZXNzXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSAtcyBvcHRpb24gaXMgc3BlY2lmaWVkXG5cCistICAtbiAgICAgICAgICAgICAgICAgICAgICAoaWdub3JlZClcblwKKysgIC1uICAgICAgICAgICAgICAgICAgICAgIHdpdGggLWI6IGRvbid0IHNwbGl0IG11bHRpYnl0ZSBjaGFyYWN0ZXJzXG5cCisgIiksIHN0ZG91dCk7CisgICAgICAgZnB1dHMgKF8oIlwKKyAgICAgICAtLWNvbXBsZW1lbnQgICAgICAgIGNvbXBsZW1lbnQgdGhlIHNldCBvZiBzZWxlY3RlZCBieXRlcywgY2hhcmFjdGVyc1xuXAorQEAgLTM2Miw3ICs0MzksNyBAQAorIAkgIGluX2RpZ2l0cyA9IGZhbHNlOworIAkgIC8qIFN0YXJ0aW5nIGEgcmFuZ2UuICovCisgCSAgaWYgKGRhc2hfZm91bmQpCistCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlIG9yIGZpZWxkIGxpc3QiKSk7CisrCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAJICBkYXNoX2ZvdW5kID0gdHJ1ZTsKKyAJICBmaWVsZHN0cisrOworIAorQEAgLTM4NywxNCArNDY0LDE2IEBACisgCSAgICAgIGlmICh2YWx1ZSA9PSAwKQorIAkJeworIAkJICAvKiBgbi0nLiAgRnJvbSBgaW5pdGlhbCcgdG8gZW5kIG9mIGxpbmUuICovCistCQkgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisrCQkgIGlmIChlb2xfcmFuZ2Vfc3RhcnQgPT0gMCB8fAorKwkJICAgICAgKGVvbF9yYW5nZV9zdGFydCAhPSAwICYmIGVvbF9yYW5nZV9zdGFydCA+IGluaXRpYWwpKQorKwkJICAgIGVvbF9yYW5nZV9zdGFydCA9IGluaXRpYWw7CisgCQkgIGZpZWxkX2ZvdW5kID0gdHJ1ZTsKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBgbS1uJyBvciBgLW4nICgxLW4pLiAqLworIAkJICBpZiAodmFsdWUgPCBpbml0aWFsKQorLQkJICAgIEZBVEFMX0VSUk9SIChfKCJpbnZhbGlkIGJ5dGUgb3IgZmllbGQgbGlzdCIpKTsKKysJCSAgICBGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAKKyAJCSAgLyogSXMgdGhlcmUgYWxyZWFkeSBhIHJhbmdlIGdvaW5nIHRvIGVuZCBvZiBsaW5lPyAqLworIAkJICBpZiAoZW9sX3JhbmdlX3N0YXJ0ICE9IDApCitAQCAtNDY3LDYgKzU0Niw5IEBACisgCSAgICAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJieXRlIG9mZnNldCAlcyBpcyB0b28gbGFyZ2UiKSwgcXVvdGUgKGJhZF9udW0pKTsKKysJICAgICAgZWxzZSBpZiAob3BlcmF0aW5nX21vZGUgPT0gY2hhcmFjdGVyX21vZGUpCisrCQllcnJvciAoMCwgMCwKKysJCSAgICAgICBfKCJjaGFyYWN0ZXIgb2Zmc2V0ICVzIGlzIHRvbyBsYXJnZSIpLCBxdW90ZSAoYmFkX251bSkpOworIAkgICAgICBlbHNlCisgCQllcnJvciAoMCwgMCwKKyAJCSAgICAgICBfKCJmaWVsZCBudW1iZXIgJXMgaXMgdG9vIGxhcmdlIiksIHF1b3RlIChiYWRfbnVtKSk7CitAQCAtNDc3LDcgKzU1OSw3IEBACisgCSAgZmllbGRzdHIrKzsKKyAJfQorICAgICAgIGVsc2UKKy0JRkFUQUxfRVJST1IgKF8oImludmFsaWQgYnl0ZSBvciBmaWVsZCBsaXN0IikpOworKwlGQVRBTF9FUlJPUiAoXygiaW52YWxpZCBieXRlLCBjaGFyYWN0ZXIgb3IgZmllbGQgbGlzdCIpKTsKKyAgICAgfQorIAorICAgbWF4X3JhbmdlX2VuZHBvaW50ID0gMDsKK0BAIC01NzAsNiArNjUyLDYzIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworKy8qIFRoaXMgZnVuY3Rpb24gaXMgaW4gdXNlIGZvciB0aGUgZm9sbG93aW5nIGNhc2UuCisrCisrICAgMS4gUmVhZCBmcm9tIHRoZSBzdHJlYW0gU1RSRUFNLCBwcmludGluZyB0byBzdGFuZGFyZCBvdXRwdXQgYW55IHNlbGVjdGVkCisrICAgY2hhcmFjdGVycy4gCisrCisrICAgMi4gUmVhZCBmcm9tIHN0cmVhbSBTVFJFQU0sIHByaW50aW5nIHRvIHN0YW5kYXJkIG91dHB1dCBhbnkgc2VsZWN0ZWQgYnl0ZXMsCisrICAgd2l0aG91dCBzcGxpdHRpbmcgbXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworKyAKKytzdGF0aWMgdm9pZAorK2N1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBpZHg7CQkvKiBudW1iZXIgb2YgYnl0ZXMgb3IgY2hhcmFjdGVycyBpbiB0aGUgbGluZSBzbyBmYXIuICovCisrICBjaGFyIGJ1ZltNQl9MRU5fTUFYICsgQlVGU0laXTsgIC8qIEZvciBzcG9vbGluZyBhIHJlYWQgYnl0ZSBzZXF1ZW5jZS4gKi8KKysgIGNoYXIgKmJ1ZnBvczsJCS8qIE5leHQgcmVhZCBwb3NpdGlvbiBvZiBCVUYuICovCisrICBzaXplX3QgYnVmbGVuOwkvKiBUaGUgbGVuZ3RoIG9mIHRoZSBieXRlIHNlcXVlbmNlIGluIGJ1Zi4gKi8KKysgIHdpbnRfdCB3YzsJCS8qIEEgZ290dGVuIHdpZGUgY2hhcmFjdGVyLiAqLworKyAgc2l6ZV90IG1ibGVuZ3RoOwkvKiBUaGUgYnl0ZSBzaXplIG9mIGEgbXVsdGlieXRlIGNoYXJhY3RlciB3aGljaCBzaG93cworKwkJCSAgIGFzIHNhbWUgY2hhcmFjdGVyIGFzIFdDLiAqLworKyAgbWJzdGF0ZV90IHN0YXRlOwkvKiBTdGF0ZSBvZiB0aGUgc3RyZWFtLiAqLworKyAgaW50IGNvbnZmYWlsOwkJLyogMSwgd2hlbiBjb252ZXJzaW9uIGlzIGZhaWxlZC4gT3RoZXJ3aXNlIDAuICovCisrCisrICBpZHggPSAwOworKyAgYnVmbGVuID0gMDsKKysgIGJ1ZnBvcyA9IGJ1ZjsKKysgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIFJFRklMTF9CVUZGRVIgKGJ1ZiwgYnVmcG9zLCBidWZsZW4sIHN0cmVhbSk7CisrCisrICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIgKHdjLCBidWZwb3MsIGJ1ZmxlbiwgbWJsZW5ndGgsIHN0YXRlLCBjb252ZmFpbCk7CisrCisrICAgICAgaWYgKHdjID09IFdFT0YpCisrCXsKKysJICBpZiAoaWR4ID4gMCkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGJyZWFrOworKwl9CisrICAgICAgZWxzZSBpZiAod2MgPT0gTCdcbicpCisrCXsKKysJICBwdXRjaGFyICgnXG4nKTsKKysJICBpZHggPSAwOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgaWR4ICs9IChvcGVyYXRpbmdfbW9kZSA9PSBieXRlX21vZGUpID8gbWJsZW5ndGggOiAxOworKwkgIGlmIChwcmludF9rdGggKGlkeCwgTlVMTCkpCisrCSAgICBmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysJfQorKworKyAgICAgIGJ1ZmxlbiAtPSBtYmxlbmd0aDsKKysgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrICAgIH0KKyt9CisrI2VuZGlmCisrCQkgICAKKyAvKiBSZWFkIGZyb20gc3RyZWFtIFNUUkVBTSwgcHJpbnRpbmcgdG8gc3RhbmRhcmQgb3V0cHV0IGFueSBzZWxlY3RlZCBmaWVsZHMuICAqLworIAorIHN0YXRpYyB2b2lkCitAQCAtNjkyLDEzICs4MzEsMTkyIEBACisgICAgIH0KKyB9CisgCisrI2lmIEhBVkVfTUJSVE9XQworK3N0YXRpYyB2b2lkCisrY3V0X2ZpZWxkc19tYiAoRklMRSAqc3RyZWFtKQorK3sKKysgIGludCBjOworKyAgdW5zaWduZWQgaW50IGZpZWxkX2lkeDsKKysgIGludCBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQ7CisrICBpbnQgYnVmZmVyX2ZpcnN0X2ZpZWxkOworKyAgaW50IGVtcHR5X2lucHV0OworKyAgY2hhciBidWZbTUJfTEVOX01BWCArIEJVRlNJWl07ICAvKiBGb3Igc3Bvb2xpbmcgYSByZWFkIGJ5dGUgc2VxdWVuY2UuICovCisrICBjaGFyICpidWZwb3M7CQkvKiBOZXh0IHJlYWQgcG9zaXRpb24gb2YgQlVGLiAqLworKyAgc2l6ZV90IGJ1ZmxlbjsJLyogVGhlIGxlbmd0aCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBidWYuICovCisrICB3aW50X3Qgd2MgPSAwOwkvKiBBIGdvdHRlbiB3aWRlIGNoYXJhY3Rlci4gKi8KKysgIHNpemVfdCBtYmxlbmd0aDsJLyogVGhlIGJ5dGUgc2l6ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgd2hpY2ggc2hvd3MKKysJCQkgICBhcyBzYW1lIGNoYXJhY3RlciBhcyBXQy4gKi8KKysgIG1ic3RhdGVfdCBzdGF0ZTsJLyogU3RhdGUgb2YgdGhlIHN0cmVhbS4gKi8KKysgIGludCBjb252ZmFpbDsJCS8qIDEsIHdoZW4gY29udmVyc2lvbiBpcyBmYWlsZWQuIE90aGVyd2lzZSAwLiAqLworKworKyAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMDsKKysgIGZpZWxkX2lkeCA9IDE7CisrICBidWZwb3MgPSBidWY7CisrICBidWZsZW4gPSAwOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZihtYnN0YXRlX3QpKTsKKysKKysgIGMgPSBnZXRjIChzdHJlYW0pOworKyAgZW1wdHlfaW5wdXQgPSAoYyA9PSBFT0YpOworKyAgaWYgKGMgIT0gRU9GKQorKyAgICB1bmdldGMgKGMsIHN0cmVhbSk7CisrICBlbHNlCisrICAgIHdjID0gV0VPRjsKKysKKysgIC8qIFRvIHN1cHBvcnQgdGhlIHNlbWFudGljcyBvZiB0aGUgLXMgZmxhZywgd2UgbWF5IGhhdmUgdG8gYnVmZmVyCisrICAgICBhbGwgb2YgdGhlIGZpcnN0IGZpZWxkIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGBkZWxpbWl0ZWQuJworKyAgICAgQnV0IHRoYXQgaXMgdW5uZWNlc3NhcnkgaWYgYWxsIG5vbi1kZWxpbWl0ZWQgbGluZXMgbXVzdCBiZSBwcmludGVkCisrICAgICBhbmQgdGhlIGZpcnN0IGZpZWxkIGhhcyBiZWVuIHNlbGVjdGVkLCBvciBpZiBub24tZGVsaW1pdGVkIGxpbmVzCisrICAgICBtdXN0IGJlIHN1cHByZXNzZWQgYW5kIHRoZSBmaXJzdCBmaWVsZCBoYXMgKm5vdCogYmVlbiBzZWxlY3RlZC4KKysgICAgIFRoYXQgaXMgYmVjYXVzZSBhIG5vbi1kZWxpbWl0ZWQgbGluZSBoYXMgZXhhY3RseSBvbmUgZmllbGQuICAqLworKyAgYnVmZmVyX2ZpcnN0X2ZpZWxkID0gKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgXiAhcHJpbnRfa3RoICgxLCBOVUxMKSk7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChmaWVsZF9pZHggPT0gMSAmJiBidWZmZXJfZmlyc3RfZmllbGQpCisrCXsKKysJICBpbnQgbGVuID0gMDsKKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKworKwkgICAgICBmaWVsZF8xX2J1ZmZlciA9IHhyZWFsbG9jIChmaWVsZF8xX2J1ZmZlciwgbGVuICsgbWJsZW5ndGgpOworKwkgICAgICBtZW1jcHkgKGZpZWxkXzFfYnVmZmVyICsgbGVuLCBidWZwb3MsIG1ibGVuZ3RoKTsKKysJICAgICAgbGVuICs9IG1ibGVuZ3RoOworKwkgICAgICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCSAgICAgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysKKysJICAgICAgaWYgKCFjb252ZmFpbCAmJiAod2MgPT0gTCdcbicgfHwgd2MgPT0gd2NkZWxpbSkpCisrCQlicmVhazsKKysJICAgIH0KKysKKysJICBpZiAod2MgPT0gV0VPRikKKysJICAgIGJyZWFrOworKworKwkgIC8qIElmIHRoZSBmaXJzdCBmaWVsZCBleHRlbmRzIHRvIHRoZSBlbmQgb2YgbGluZSAoaXQgaXMgbm90CisrCSAgICAgZGVsaW1pdGVkKSBhbmQgd2UgYXJlIHByaW50aW5nIGFsbCBub24tZGVsaW1pdGVkIGxpbmVzLAorKwkgICAgIHByaW50IHRoaXMgb25lLiAgKi8KKysJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSB3Y2RlbGltKSkKKysJICAgIHsKKysJICAgICAgaWYgKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQpCisrCQl7CisrCQkgIC8qIEVtcHR5LgkqLworKwkJfQorKwkgICAgICBlbHNlCisrCQl7CisrCQkgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiwgc3Rkb3V0KTsKKysJCSAgLyogTWFrZSBzdXJlIHRoZSBvdXRwdXQgbGluZSBpcyBuZXdsaW5lIHRlcm1pbmF0ZWQuICAqLworKwkJICBpZiAoY29udmZhaWwgfHwgKCFjb252ZmFpbCAmJiB3YyAhPSBMJ1xuJykpCisrCQkgICAgcHV0Y2hhciAoJ1xuJyk7CisrCQl9CisrCSAgICAgIGNvbnRpbnVlOworKwkgICAgfQorKworKwkgIGlmIChwcmludF9rdGggKDEsIE5VTEwpKQorKwkgICAgeworKwkgICAgICAvKiBQcmludCB0aGUgZmllbGQsIGJ1dCBub3QgdGhlIHRyYWlsaW5nIGRlbGltaXRlci4gICovCisrCSAgICAgIGZ3cml0ZSAoZmllbGRfMV9idWZmZXIsIHNpemVvZiAoY2hhciksIGxlbiAtIDEsIHN0ZG91dCk7CisrCSAgICAgIGZvdW5kX2FueV9zZWxlY3RlZF9maWVsZCA9IDE7CisrCSAgICB9CisrCSAgKytmaWVsZF9pZHg7CisrCX0KKysKKysgICAgICBpZiAod2MgIT0gV0VPRikKKysJeworKwkgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCSAgICB7CisrCSAgICAgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQpCisrCQl7CisrCQkgIGZ3cml0ZSAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcsIHNpemVvZiAoY2hhciksCisrCQkJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCwgc3Rkb3V0KTsKKysJCX0KKysJICAgICAgZm91bmRfYW55X3NlbGVjdGVkX2ZpZWxkID0gMTsKKysJICAgIH0KKysKKysJICB3aGlsZSAoMSkKKysJICAgIHsKKysJICAgICAgUkVGSUxMX0JVRkZFUiAoYnVmLCBidWZwb3MsIGJ1Zmxlbiwgc3RyZWFtKTsKKysKKysJICAgICAgR0VUX05FWFRfV0NfRlJPTV9CVUZGRVIKKysJCSh3YywgYnVmcG9zLCBidWZsZW4sIG1ibGVuZ3RoLCBzdGF0ZSwgY29udmZhaWwpOworKworKwkgICAgICBpZiAod2MgPT0gV0VPRikKKysJCWJyZWFrOworKwkgICAgICBlbHNlIGlmICghY29udmZhaWwgJiYgKHdjID09IHdjZGVsaW0gfHwgd2MgPT0gTCdcbicpKQorKwkJeworKwkJICBidWZsZW4gLT0gbWJsZW5ndGg7CisrCQkgIGJ1ZnBvcyArPSBtYmxlbmd0aDsKKysJCSAgYnJlYWs7CisrCQl9CisrCisrCSAgICAgIGlmIChwcmludF9rdGggKGZpZWxkX2lkeCwgTlVMTCkpCisrCQlmd3JpdGUgKGJ1ZnBvcywgbWJsZW5ndGgsIHNpemVvZihjaGFyKSwgc3Rkb3V0KTsKKysKKysJICAgICAgYnVmbGVuIC09IG1ibGVuZ3RoOworKwkgICAgICBidWZwb3MgKz0gbWJsZW5ndGg7CisrCSAgICB9CisrCX0KKysKKysgICAgICBpZiAoKCFjb252ZmFpbCB8fCB3YyA9PSBMJ1xuJykgJiYgYnVmbGVuIDwgMSkKKysJd2MgPSBXRU9GOworKworKyAgICAgIGlmICghY29udmZhaWwgJiYgd2MgPT0gd2NkZWxpbSkKKysJKytmaWVsZF9pZHg7CisrICAgICAgZWxzZSBpZiAod2MgPT0gV0VPRiB8fCAoIWNvbnZmYWlsICYmIHdjID09IEwnXG4nKSkKKysJeworKwkgIGlmIChmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQKKysJICAgICAgfHwgKCFlbXB0eV9pbnB1dCAmJiAhKHN1cHByZXNzX25vbl9kZWxpbWl0ZWQgJiYgZmllbGRfaWR4ID09IDEpKSkKKysJICAgIHB1dGNoYXIgKCdcbicpOworKwkgIGlmICh3YyA9PSBXRU9GKQorKwkgICAgYnJlYWs7CisrCSAgZmllbGRfaWR4ID0gMTsKKysJICBmb3VuZF9hbnlfc2VsZWN0ZWRfZmllbGQgPSAwOworKwl9CisrICAgIH0KKyt9CisrI2VuZGlmCisrCisgc3RhdGljIHZvaWQKKyBjdXRfc3RyZWFtIChGSUxFICpzdHJlYW0pCisgeworLSAgaWYgKG9wZXJhdGluZ19tb2RlID09IGJ5dGVfbW9kZSkKKy0gICAgY3V0X2J5dGVzIChzdHJlYW0pOworKyNpZiBIQVZFX01CUlRPV0MKKysgIGlmIChNQl9DVVJfTUFYID4gMSAmJiAhZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyAgICB7CisrICAgICAgc3dpdGNoIChvcGVyYXRpbmdfbW9kZSkKKysJeworKwljYXNlIGJ5dGVfbW9kZToKKysJICBpZiAoYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSkKKysJICAgIGN1dF9jaGFyYWN0ZXJzX29yX2N1dF9ieXRlc19ub19zcGxpdCAoc3RyZWFtKTsKKysJICBlbHNlCisrCSAgICBjdXRfYnl0ZXMgKHN0cmVhbSk7CisrCSAgYnJlYWs7CisrCisrCWNhc2UgY2hhcmFjdGVyX21vZGU6CisrCSAgY3V0X2NoYXJhY3RlcnNfb3JfY3V0X2J5dGVzX25vX3NwbGl0IChzdHJlYW0pOworKwkgIGJyZWFrOworKworKwljYXNlIGZpZWxkX21vZGU6CisrCSAgY3V0X2ZpZWxkc19tYiAoc3RyZWFtKTsKKysJICBicmVhazsKKysKKysJZGVmYXVsdDoKKysJICBhYm9ydCAoKTsKKysJfQorKyAgICB9CisgICBlbHNlCistICAgIGN1dF9maWVsZHMgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAob3BlcmF0aW5nX21vZGUgPT0gZmllbGRfbW9kZSkKKysJY3V0X2ZpZWxkcyAoc3RyZWFtKTsKKysgICAgICBlbHNlCisrCWN1dF9ieXRlcyAoc3RyZWFtKTsKKysgICAgfQorIH0KKyAKKyAvKiBQcm9jZXNzIGZpbGUgRklMRSB0byBzdGFuZGFyZCBvdXRwdXQuCitAQCAtNzQ4LDYgKzEwNjYsOCBAQAorICAgYm9vbCBvazsKKyAgIGJvb2wgZGVsaW1fc3BlY2lmaWVkID0gZmFsc2U7CisgICBjaGFyICpzcGVjX2xpc3Rfc3RyaW5nIElGX0xJTlQoPSBOVUxMKTsKKysgIGNoYXIgbWJkZWxpbVtNQl9MRU5fTUFYICsgMV07CisrICBzaXplX3QgZGVsaW1sZW4gPSAwOworIAorICAgaW5pdGlhbGl6ZV9tYWluICgmYXJnYywgJmFyZ3YpOworICAgcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKK0BAIC03NzAsNyArMTA5MCw2IEBACisgICAgICAgc3dpdGNoIChvcHRjKQorIAl7CisgCWNhc2UgJ2InOgorLQljYXNlICdjJzoKKyAJICAvKiBCdWlsZCB0aGUgYnl0ZSBsaXN0LiAqLworIAkgIGlmIChvcGVyYXRpbmdfbW9kZSAhPSB1bmRlZmluZWRfbW9kZSkKKyAJICAgIEZBVEFMX0VSUk9SIChfKCJvbmx5IG9uZSB0eXBlIG9mIGxpc3QgbWF5IGJlIHNwZWNpZmllZCIpKTsKK0BAIC03NzgsNiArMTA5NywxNCBAQAorIAkgIHNwZWNfbGlzdF9zdHJpbmcgPSBvcHRhcmc7CisgCSAgYnJlYWs7CisgCisrCWNhc2UgJ2MnOgorKwkgIC8qIEJ1aWxkIHRoZSBjaGFyYWN0ZXIgbGlzdC4gKi8KKysJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCisrCSAgICBGQVRBTF9FUlJPUiAoXygib25seSBvbmUgdHlwZSBvZiBsaXN0IG1heSBiZSBzcGVjaWZpZWQiKSk7CisrCSAgb3BlcmF0aW5nX21vZGUgPSBjaGFyYWN0ZXJfbW9kZTsKKysJICBzcGVjX2xpc3Rfc3RyaW5nID0gb3B0YXJnOworKwkgIGJyZWFrOworKworIAljYXNlICdmJzoKKyAJICAvKiBCdWlsZCB0aGUgZmllbGQgbGlzdC4gKi8KKyAJICBpZiAob3BlcmF0aW5nX21vZGUgIT0gdW5kZWZpbmVkX21vZGUpCitAQCAtNzg5LDEwICsxMTE2LDM1IEBACisgCWNhc2UgJ2QnOgorIAkgIC8qIE5ldyBkZWxpbWl0ZXIuICovCisgCSAgLyogSW50ZXJwcmV0IC1kICcnIHRvIG1lYW4gYHVzZSB0aGUgTlVMIGJ5dGUgYXMgdGhlIGRlbGltaXRlci4nICAqLworLQkgIGlmIChvcHRhcmdbMF0gIT0gJ1wwJyAmJiBvcHRhcmdbMV0gIT0gJ1wwJykKKy0JICAgIEZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworLQkgIGRlbGltID0gb3B0YXJnWzBdOworLQkgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrI2lmIEhBVkVfTUJSVE9XQworKwkgICAgeworKwkgICAgICBpZihNQl9DVVJfTUFYID4gMSkKKysJCXsKKysJCSAgbWJzdGF0ZV90IHN0YXRlOworKworKwkJICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBkZWxpbWxlbiA9IG1icnRvd2MgKCZ3Y2RlbGltLCBvcHRhcmcsIHN0cm5sZW4ob3B0YXJnLCBNQl9MRU5fTUFYKSwgJnN0YXRlKTsKKysKKysJCSAgaWYgKGRlbGltbGVuID09IChzaXplX3QpLTEgfHwgZGVsaW1sZW4gPT0gKHNpemVfdCktMikKKysJCSAgICArK2ZvcmNlX3NpbmdsZWJ5dGVfbW9kZTsKKysJCSAgZWxzZQorKwkJICAgIHsKKysJCSAgICAgIGRlbGltbGVuID0gKGRlbGltbGVuIDwgMSkgPyAxIDogZGVsaW1sZW47CisrCQkgICAgICBpZiAod2NkZWxpbSAhPSBMJ1wwJyAmJiAqKG9wdGFyZyArIGRlbGltbGVuKSAhPSAnXDAnKQorKwkJCUZBVEFMX0VSUk9SIChfKCJ0aGUgZGVsaW1pdGVyIG11c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpOworKwkJICAgICAgbWVtY3B5IChtYmRlbGltLCBvcHRhcmcsIGRlbGltbGVuKTsKKysJCSAgICB9CisrCQl9CisrCisrCSAgICAgIGlmIChNQl9DVVJfTUFYIDw9IDEgfHwgZm9yY2Vfc2luZ2xlYnl0ZV9tb2RlKQorKyNlbmRpZgorKwkJeworKwkJICBpZiAob3B0YXJnWzBdICE9ICdcMCcgJiYgb3B0YXJnWzFdICE9ICdcMCcpCisrCQkgICAgRkFUQUxfRVJST1IgKF8oInRoZSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIiKSk7CisrCQkgIGRlbGltID0gKHVuc2lnbmVkIGNoYXIpIG9wdGFyZ1swXTsKKysJCX0KKysJICAgIGRlbGltX3NwZWNpZmllZCA9IHRydWU7CisrCSAgfQorIAkgIGJyZWFrOworIAorIAljYXNlIE9VVFBVVF9ERUxJTUlURVJfT1BUSU9OOgorQEAgLTgwNSw2ICsxMTU3LDcgQEAKKyAJICBicmVhazsKKyAKKyAJY2FzZSAnbic6CisrCSAgYnl0ZV9tb2RlX2NoYXJhY3Rlcl9hd2FyZSA9IDE7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgJ3MnOgorQEAgLTgyNyw3ICsxMTgwLDcgQEAKKyAgIGlmIChvcGVyYXRpbmdfbW9kZSA9PSB1bmRlZmluZWRfbW9kZSkKKyAgICAgRkFUQUxfRVJST1IgKF8oInlvdSBtdXN0IHNwZWNpZnkgYSBsaXN0IG9mIGJ5dGVzLCBjaGFyYWN0ZXJzLCBvciBmaWVsZHMiKSk7CisgCistICBpZiAoZGVsaW0gIT0gJ1wwJyAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorKyAgaWYgKGRlbGltX3NwZWNpZmllZCAmJiBvcGVyYXRpbmdfbW9kZSAhPSBmaWVsZF9tb2RlKQorICAgICBGQVRBTF9FUlJPUiAoXygiYW4gaW5wdXQgZGVsaW1pdGVyIG1heSBiZSBzcGVjaWZpZWQgb25seVwKKyAgd2hlbiBvcGVyYXRpbmcgb24gZmllbGRzIikpOworIAorQEAgLTg1NCwxNSArMTIwNywzNCBAQAorICAgICB9CisgCisgICBpZiAoIWRlbGltX3NwZWNpZmllZCkKKy0gICAgZGVsaW0gPSAnXHQnOworKyAgICB7CisrICAgICAgZGVsaW0gPSAnXHQnOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICB3Y2RlbGltID0gTCdcdCc7CisrICAgICAgbWJkZWxpbVswXSA9ICdcdCc7CisrICAgICAgbWJkZWxpbVsxXSA9ICdcMCc7CisrICAgICAgZGVsaW1sZW4gPSAxOworKyNlbmRpZgorKyAgICB9CisgCisgICBpZiAob3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgeworLSAgICAgIHN0YXRpYyBjaGFyIGR1bW15WzJdOworLSAgICAgIGR1bW15WzBdID0gZGVsaW07CistICAgICAgZHVtbXlbMV0gPSAnXDAnOworLSAgICAgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0gZHVtbXk7CistICAgICAgb3V0cHV0X2RlbGltaXRlcl9sZW5ndGggPSAxOworKyNpZmRlZiBIQVZFX01CUlRPV0MKKysgICAgICBpZiAoTUJfQ1VSX01BWCA+IDEgJiYgIWZvcmNlX3NpbmdsZWJ5dGVfbW9kZSkKKysJeworKwkgIG91dHB1dF9kZWxpbWl0ZXJfc3RyaW5nID0geHN0cmR1cChtYmRlbGltKTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IGRlbGltbGVuOworKwl9CisrCisrICAgICAgaWYgKE1CX0NVUl9NQVggPD0gMSB8fCBmb3JjZV9zaW5nbGVieXRlX21vZGUpCisrI2VuZGlmCisrCXsKKysJICBzdGF0aWMgY2hhciBkdW1teVsyXTsgCisrCSAgZHVtbXlbMF0gPSBkZWxpbTsKKysJICBkdW1teVsxXSA9ICdcMCc7CisrCSAgb3V0cHV0X2RlbGltaXRlcl9zdHJpbmcgPSBkdW1teTsKKysJICBvdXRwdXRfZGVsaW1pdGVyX2xlbmd0aCA9IDE7CisrCX0KKyAgICAgfQorIAorICAgaWYgKG9wdGluZCA9PSBhcmdjKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtbHMteC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE4NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLWxzLXgucGF0Y2gKQEAgLTAsMCArMSwxMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1RoaXMgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gdGhlIEZlZG9yYSBDb3JlIDggY29yZXV0aWxzLTYuOS05IHBhY2thZ2UuCisKK1RoZSBwYWNrYWdlIGlzIHN0YXRlZCBhcyBiZWluZyBMaWNlbnNlZCBhcyBHUEx2MisuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMubHMteAkyMDA3LTA2LTEzIDE0OjI3OjM2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy02Ljkvc3JjL2xzLmMJMjAwNy0wNi0xMyAxNDoyODo0Mi4wMDAwMDAwMDAgKzAxMDAKK0BAIC00MTUxLDE2ICs0MTUxLDE2IEBACisgICBzaXplX3QgcG9zID0gMDsKKyAgIHNpemVfdCBjb2xzID0gY2FsY3VsYXRlX2NvbHVtbnMgKGZhbHNlKTsKKyAgIHN0cnVjdCBjb2x1bW5faW5mbyBjb25zdCAqbGluZV9mbXQgPSAmY29sdW1uX2luZm9bY29scyAtIDFdOworLSAgc2l6ZV90IG5hbWVfbGVuZ3RoID0gbGVuZ3RoX29mX2ZpbGVfbmFtZV9hbmRfZnJpbGxzIChjd2RfZmlsZSk7CisrICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmYgPSBzb3J0ZWRfZmlsZVswXTsKKysgIHNpemVfdCBuYW1lX2xlbmd0aCA9IGxlbmd0aF9vZl9maWxlX25hbWVfYW5kX2ZyaWxscyAoZik7CisgICBzaXplX3QgbWF4X25hbWVfbGVuZ3RoID0gbGluZV9mbXQtPmNvbF9hcnJbMF07CisgCisgICAvKiBQcmludCBmaXJzdCBlbnRyeS4gICovCistICBwcmludF9maWxlX25hbWVfYW5kX2ZyaWxscyAoY3dkX2ZpbGUpOworKyAgcHJpbnRfZmlsZV9uYW1lX2FuZF9mcmlsbHMgKGYpOworIAorICAgLyogTm93IHRoZSByZXN0LiAgKi8KKyAgIGZvciAoZmlsZXNubyA9IDE7IGZpbGVzbm8gPCBjd2Rfbl91c2VkOyArK2ZpbGVzbm8pCisgICAgIHsKKy0gICAgICBzdHJ1Y3QgZmlsZWluZm8gY29uc3QgKmY7CisgICAgICAgc2l6ZV90IGNvbCA9IGZpbGVzbm8gJSBjb2xzOworIAorICAgICAgIGlmIChjb2wgPT0gMCkKKy0tLSBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtLmxzLXgJMjAwNy0wMy0xOCAyMTozNjo0My4wMDAwMDAwMDAgKzAwMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL01ha2VmaWxlLmFtCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMjQsNyArMjQsNyBAQAorICAgc3RhdC1kdHlwZSBcCisgICBpbm9kZSBkYW5nbGUgZmlsZS10eXBlIHJlY3Vyc2l2ZSBkaXJlZCBpbmZsb29wIFwKKyAgIHJ0LTEgdGltZS0xIHN5bWxpbmstc2xhc2ggZm9sbG93LXNsaW5rIG5vLWFyZyBtLW9wdGlvbiBcCistICBzdGF0LXZzLWRpcmVudAorKyAgc3RhdC12cy1kaXJlbnQgeC1vcHRpb24KKyAKKyBFWFRSQV9ESVNUID0gJChURVNUUykKKyBURVNUU19FTlZJUk9OTUVOVCA9IFwKKy0tLSAvZGV2L251bGwJMjAwNy0wNi0xMyAwODo0Mzo1MS45OTMyNjMzODIgKzAxMDAKKysrKyBjb3JldXRpbHMtNi45L3Rlc3RzL2xzL3gtb3B0aW9uCTIwMDctMDYtMTMgMTQ6Mjg6NDIuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDU5IEBACisrIyEvYmluL3NoCisrIyBFeGVyY2lzZSB0aGUgLXggb3B0aW9uLgorKworKyMgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEsIFVTQS4KKysKKytpZiB0ZXN0ICIkVkVSQk9TRSIgPSB5ZXM7IHRoZW4KKysgIHNldCAteAorKyAgbHMgLS12ZXJzaW9uCisrZmkKKysKKysuICRzcmNkaXIvLi4vZW52dmFyLWNoZWNrCisrLiAkc3JjZGlyLy4uL2xhbmctZGVmYXVsdAorKworK3B3ZD1gcHdkYAorK3QwPWBlY2hvICIkMCJ8c2VkICdzLC4qLywsJ2AudG1wOyB0bXA9JHQwLyQkCisrdHJhcCAnc3RhdHVzPSQ/OyBjZCAiJHB3ZCIgJiYgY2htb2QgLVIgdStyd3ggJHQwICYmIHJtIC1yZiAkdDAgJiYgZXhpdCAkc3RhdHVzJyAwCisrdHJhcCAnKGV4aXQgJD8pOyBleGl0ICQ/JyAxIDIgMTMgMTUKKysKKytmcmFtZXdvcmtfZmFpbHVyZT0wCisrbWtkaXIgLXAgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrY2QgJHRtcCB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrbWtkaXIgc3ViZGlyIHx8IGZyYW1ld29ya19mYWlsdXJlPTEKKyt0b3VjaCBzdWJkaXIvYiB8fCBmcmFtZXdvcmtfZmFpbHVyZT0xCisrdG91Y2ggc3ViZGlyL2EgfHwgZnJhbWV3b3JrX2ZhaWx1cmU9MQorKworK2lmIHRlc3QgJGZyYW1ld29ya19mYWlsdXJlID0gMTsgdGhlbgorKyAgZWNobyAiJDA6IGZhaWx1cmUgaW4gdGVzdGluZyBmcmFtZXdvcmsiIDE+JjIKKysgIChleGl0IDEpOyBleGl0IDEKKytmaQorKworK2ZhaWw9MAorKworKyMgQ29yZXV0aWxzIDYuOCBhbmQgNi45IHdvdWxkIG91dHB1dCB0aGlzIGluIHRoZSB3cm9uZyBvcmRlci4KKytscyAteCBzdWJkaXIgPiBvdXQgfHwgZmFpbD0xCisrbHMgLXJ4IHN1YmRpciA+PiBvdXQgfHwgZmFpbD0xCisrY2F0IDw8XEVPRiA+IGV4cCB8fCBmYWlsPTEKKythICBiCisrYiAgYQorK0VPRgorKworK2NtcCBvdXQgZXhwIHx8IGZhaWw9MQorK3Rlc3QgJGZhaWwgPSAxICYmIGRpZmYgb3V0IGV4cCAyPiAvZGV2L251bGwKKysKKysoZXhpdCAkZmFpbCk7IGV4aXQgJGZhaWwKKy0tLSBjb3JldXRpbHMtNi45L05FV1MubHMteAkyMDA3LTAzLTIyIDIxOjE5OjQ1LjAwMDAwMDAwMCArMDAwMAorKysrIGNvcmV1dGlscy02LjkvTkVXUwkyMDA3LTA2LTEzIDE0OjI4OjQyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDYgKzEzLDExIEBACisgICBVc2luZyBwciAtbSAtcyAoaS5lLiBtZXJnaW5nIGZpbGVzLCB3aXRoIFRBQiBhcyB0aGUgb3V0cHV0IHNlcGFyYXRvcikKKyAgIG5vIGxvbmdlciBpbnNlcnRzIGV4dHJhbmVvdXMgc3BhY2VzIGJldHdlZW4gb3V0cHV0IGNvbHVtbnMuCisgCisrKiogQnVnIGZpeGVzCisrCisrICBscyAteCBESVIgd291bGQgc29tZXRpbWVzIG91dHB1dCB0aGUgd3Jvbmcgc3RyaW5nIGluIHBsYWNlIG9mIHRoZQorKyAgZmlyc3QgZW50cnkuICBbaW50cm9kdWNlZCBpbiBjb3JldXRpbHMtNi44XQorKworIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgNi44ICgyMDA3LTAyLTI0KSBbbm90LXVuc3RhYmxlXQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzLW92ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MDc0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVGhpcyBwYXRjaCB3YXMgaW1wb3J0ZWQgZnJvbSB0aGUgRmVkb3JhIENvcmUgOCBjb3JldXRpbHMtNi45LTkgcGFja2FnZS4KKworVGhlIHBhY2thZ2UgaXMgc3RhdGVkIGFzIGJlaW5nIExpY2Vuc2VkIGFzIEdQTHYyKy4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gY29yZXV0aWxzLTUuMi4xL3NyYy93aG8uYy5vdmVyZmxvdwkyMDA1LTA1LTI1IDA5OjU5OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIGNvcmV1dGlscy01LjIuMS9zcmMvd2hvLmMJMjAwNS0wNS0yNSAxMDowMDozMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC03NSw3ICs3NSw3IEBACisgIyBkZWZpbmUgTkVXX1RJTUUgMAorICNlbmRpZgorIAorLSNkZWZpbmUgSURMRVNUUl9MRU4gNgorKyNkZWZpbmUgSURMRVNUUl9MRU4gMTAKKyAKKyAjaWYgSEFWRV9TVFJVQ1RfWFRNUF9VVF9QSUQKKyAjIGRlZmluZSBQSURTVFJfREVDTF9BTkRfSU5JVChWYXIsIFV0bXBfZW50KSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjczMGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvY29yZXV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuYWM6NDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1saW51eC9jb3JldXRpbHMtbmF0aXZlLTYuOS1yMi9jb3JldXRpbHMtNi45L200L2ptLW1hY3Jvcy5tNDoxMzg6IGdsX0NIRUNLX0FMTF9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LWxpbnV4L2NvcmV1dGlscy1uYXRpdmUtNi45LXIyL2NvcmV1dGlscy02LjkvbTQvam0tbWFjcm9zLm00OjI0OiBjb3JldXRpbHNfTUFDUk9TIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjQwOiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb3JldXRpbHMtNi45Lm9yaWcvbTQvam0tbWFjcm9zLm00CisrKysgY29yZXV0aWxzLTYuOS9tNC9qbS1tYWNyb3MubTQKK0BAIC0xNDIsMTEgKzE0Miw2IEBAIEFDX0RFRlVOKFtnbF9DSEVDS19BTExfVFlQRVNdLAorICAgZG5sIHdoZXRoZXIgZnVuY3Rpb25zIGFuZCBoZWFkZXJzIGFyZSBhdmFpbGFibGUsIHdoZXRoZXIgdGhleSB3b3JrLCBldGMuCisgICBBQ19SRVFVSVJFKFtBQ19TWVNfTEFSR0VGSUxFXSkKKyAKKy0gIGRubCBUaGlzIHRlc3QgbXVzdCBwcmVjZWRlIHRlc3RzIG9mIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcyBsaWtlCistICBkbmwgdGhhdCBmb3IgdGhlIGlubGluZSBrZXl3b3JkLCBzaW5jZSBpdCBtYXkgY2hhbmdlIHRoZSBkZWdyZWUgdG8KKy0gIGRubCB3aGljaCB0aGUgY29tcGlsZXIgc3VwcG9ydHMgc3VjaCBmZWF0dXJlcy4KKy0gIEFDX1JFUVVJUkUoW0FNX0NfUFJPVE9UWVBFU10pCistCisgICBkbmwgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KKyAgIEFDX1JFUVVJUkUoW0FDX0NfQklHRU5ESUFOXSkKKyAgIEFDX1JFUVVJUkUoW0FDX0NfVk9MQVRJTEVdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZDYwMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTYuOS9maXhfZm9yX21hbnBhZ2VfYnVpbGRpbmcucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsZWdhY3kgdmVyc2lvbl0KKworVXNlIG5hdGl2ZSBjb3JldXRpbHMgYmluYXJpZXMgdG8gYnVpbGQgbWFucGFnZXMgaW4gY3Jvc3MgZW52aXJvbm1lbnQuCitUaGlzIGF2b2lkcyBtYW4gcGFnZSBidWlsZCBpc3N1ZXMgbGlrZSB0aGlzOgorCit8IE1ha2luZyBhbGwgaW4gbWFuCit8IG1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2NvcmV1dGlscy02LjktcjAvY29yZXV0aWxzLTYuOS9tYW4nCit8IFVwZGF0aW5nIG1hbiBwYWdlIGN1dC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGRpci4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGV4cGFuZC4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIGZvbGQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBpbnN0YWxsLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugam9pbi4xCit8IFVwZGF0aW5nIG1hbiBwYWdlIHByLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgbHMuMQorfCBVcGRhdGluZyBtYW4gcGFnZSBzb3J0LjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdW5leHBhbmQuMQorfCBVcGRhdGluZyBtYW4gcGFnZSB1bmlxLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2Ugd2hvLjEKK3wgVXBkYXRpbmcgbWFuIHBhZ2UgdmRpci4xCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGRpci50ZC9kaXIKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gY3V0LnRkL2N1dAorfCBtYWtlWzFdOiAqKiogW2Rpci4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFdhaXRpbmcgZm9yIHVuZmluaXNoZWQgam9icy4uLi4KK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gZm9sZC50ZC9mb2xkCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGluc3RhbGwudGQvaW5zdGFsbAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBleHBhbmQudGQvZXhwYW5kCit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIGpvaW4udGQvam9pbgorfCBtYWtlWzFdOiAqKiogW2N1dC4xXSBFcnJvciAxMjYKK3wgbWFrZVsxXTogKioqIFtmb2xkLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW2luc3RhbGwuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHNvcnQudGQvc29ydAorfCBtYWtlWzFdOiAqKiogW2V4cGFuZC4xXSBFcnJvciAxMjYKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gcHIudGQvcHIKK3wgbWFrZVsxXTogKioqIFtqb2luLjFdIEVycm9yIDEyNgorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSBscy50ZC9scworfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmV4cGFuZC50ZC91bmV4cGFuZAorfCBoZWxwMm1hbjogY2FuJ3QgZ2V0IGAtLWhlbHAnIGluZm8gZnJvbSB1bmlxLnRkL3VuaXEKK3wgaGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gd2hvLnRkL3dobworfCBtYWtlWzFdOiAqKiogW3NvcnQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbcHIuMV0gRXJyb3IgMTI2Cit8IGhlbHAybWFuOiBjYW4ndCBnZXQgYC0taGVscCcgaW5mbyBmcm9tIHZkaXIudGQvdmRpcgorfCBtYWtlWzFdOiAqKiogW2xzLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3VuaXEuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbdW5leHBhbmQuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06ICoqKiBbd2hvLjFdIEVycm9yIDEyNgorfCBtYWtlWzFdOiAqKiogW3ZkaXIuMV0gRXJyb3IgMTI2Cit8IG1ha2VbMV06IExlYXZpbmcgZGlyZWN0b3J5IGAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvY29yZXV0aWxzLTYuOS1yMC9jb3JldXRpbHMtNi45L21hbicKK3wgbWFrZTogKioqIFthbGwtcmVjdXJzaXZlXSBFcnJvciAxCit8IEZBVEFMOiBvZV9ydW5tYWtlIGZhaWxlZAorfCBFUlJPUjogRnVuY3Rpb24gJ2RvX2NvbXBpbGUnIGZhaWxlZCAoc2VlIC9idWlsZF9kaXNrL3Bva3lfYnVpbGQvYnVpbGQxL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9jb3JldXRpbHMtNi45LXIwL3RlbXAvbG9nLmRvX2NvbXBpbGUuMTI3ODAgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24pCitOT1RFOiBwYWNrYWdlIGNvcmV1dGlscy02LjktcjA6IHRhc2sgZG9fY29tcGlsZTogRmFpbGVkCitFUlJPUjogVGFzayA4ICgvaG9tZS9uaXRpbi9wcmovcG9reS5naXQvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc182LjkuYmIsIGRvX2NvbXBpbGUpIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAnMScKKworCitUaGlzIHBhdGNoIGlzIG1hZGUgZm9yIGdwbHYyIGNvcmV1dGlscyB0aGUgcmVjaXBlCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8wMy8xNworCitJbmRleDogbWFuL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9tYW4ub3JpZy9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTY3LDcgKzE2Nyw3IEBAIG1hcHBlZF9uYW1lID0gYGVjaG8gJCp8c2VkICdzL2luc3RhbGwvZ2kKKyAJICAgICAgICAgICAgJChQRVJMKSAtLSAkKHNyY2RpcikvaGVscDJtYW4JCVwKKyAJICAgICAgICAgICAgIC0tc291cmNlPSckKFBBQ0tBR0VfU1RSSU5HKScJCVwKKyAJICAgICAgICAgICAgIC0taW5jbHVkZT0kKHNyY2RpcikvJCoueAkJCVwKKy0JICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICR0LyQqOwkJCVwKKysJICAgICAgICAgICAgIC0tb3V0cHV0PSR0LyRAICQqOwkJCVwKKyAJICAgICAgIH0JCQkJCQlcCisgCSAgICAmJiBzZWQgJ3N8JCpcLnRkL3x8ZycgJHQvJEAgPiAkQAkJCVwKKyAJICAgICYmIGNobW9kIGEtdyAkQAkJCQkJXAorSW5kZXg6IG1hbi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbWFuLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBiL21hbi9NYWtlZmlsZS5pbgorQEAgLTg2NSw3ICs4NjUsNyBAQCB5ZXMuMToJCSQoY29tbW9uX2RlcCkJJChzcmNkaXIpL3llcy54CQkuCisgCSAgICAgICAgICAgICQoUEVSTCkgLS0gJChzcmNkaXIpL2hlbHAybWFuCQlcCisgCSAgICAgICAgICAgICAtLXNvdXJjZT0nJChQQUNLQUdFX1NUUklORyknCQlcCisgCSAgICAgICAgICAgICAtLWluY2x1ZGU9JChzcmNkaXIpLyQqLngJCQlcCistCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkdC8kKjsJCQlcCisrCSAgICAgICAgICAgICAtLW91dHB1dD0kdC8kQCAkKjsJCQlcCisgCSAgICAgICB9CQkJCQkJXAorIAkgICAgJiYgc2VkICdzfCQqXC50ZC98fGcnICR0LyRAID4gJEAJCQlcCisgCSAgICAmJiBjaG1vZCBhLXcgJEAJCQkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZnV0aW1lbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNTkwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2Z1dGltZW5zLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgY29yZXV0aWxzIHVzZXMgZ251bGliIHdoaWNoIGNvbmZsaWN0cyB3aXRoIG5ld2VyIGxpYmMgaGVhZGVyIG9uIGZ1dGltZW5zCisjIHRoaXMgcGF0Y2ggc2ltcGx5IHJlbmFtZXMgY29yZXV0aWxzIGZ1dGltZXMgdG8gYXZvaWQgY29uZmxpY3Rpb24KKyMKKyMgU2lnbmVkLW9mZi1ieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4sIDIwMTAtMDgtMTgKKyMgKHRoaXMgcGF0Y2ggaXMgbGljZW5zZWQgdW5kZXIgR1BMdjIpCisKK2RpZmYgLS1naXQgYS9saWIvdXRpbWVucy5jIGIvbGliL3V0aW1lbnMuYworaW5kZXggNzFiYzUxMC4uYWU4NzBiOCAxMDA2NDQKKy0tLSBhL2xpYi91dGltZW5zLmMKKysrKyBiL2xpYi91dGltZW5zLmMKK0BAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCB1dGltYnVmCisgICAgUmV0dXJuIDAgb24gc3VjY2VzcywgLTEgKHNldHRpbmcgZXJybm8pIG9uIGZhaWx1cmUuICAqLworIAorIGludAorLWZ1dGltZW5zIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKytmdXRpbWVuc19jb3JldXRpbHMgKGludCBmZCBBVFRSSUJVVEVfVU5VU0VELAorIAkgIGNoYXIgY29uc3QgKmZpbGUsIHN0cnVjdCB0aW1lc3BlYyBjb25zdCB0aW1lc3BlY1syXSkKKyB7CisgICAvKiBTb21lIExpbnV4LWJhc2VkIE5GUyBjbGllbnRzIGFyZSBidWdneSwgYW5kIG1pc2hhbmRsZSB0aW1lIHN0YW1wcworQEAgLTE4NSw1ICsxODUsNSBAQCBmdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisgaW50CisgdXRpbWVucyAoY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IHRpbWVzcGVjWzJdKQorIHsKKy0gIHJldHVybiBmdXRpbWVucyAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKysgIHJldHVybiBmdXRpbWVuc19jb3JldXRpbHMgKC0xLCBmaWxlLCB0aW1lc3BlYyk7CisgfQorZGlmZiAtLWdpdCBhL2xpYi91dGltZW5zLmggYi9saWIvdXRpbWVucy5oCitpbmRleCAwMDk3YWFhLi4xM2ZjNDVhIDEwMDY0NAorLS0tIGEvbGliL3V0aW1lbnMuaAorKysrIGIvbGliL3V0aW1lbnMuaAorQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKy1pbnQgZnV0aW1lbnMgKGludCwgY2hhciBjb25zdCAqLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgWzJdKTsKKytpbnQgZnV0aW1lbnNfY29yZXV0aWxzIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisgaW50IHV0aW1lbnMgKGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CitkaWZmIC0tZ2l0IGEvc3JjL2NvcHkuYyBiL3NyYy9jb3B5LmMKK2luZGV4IDRiZGI3NWMuLjA0NjM0ZjEgMTAwNjQ0CistLS0gYS9zcmMvY29weS5jCisrKysgYi9zcmMvY29weS5jCitAQCAtNTE4LDcgKzUxOCw3IEBAIGNvcHlfcmVnIChjaGFyIGNvbnN0ICpzcmNfbmFtZSwgY2hhciBjb25zdCAqZHN0X25hbWUsCisgICAgICAgdGltZXNwZWNbMF0gPSBnZXRfc3RhdF9hdGltZSAoc3JjX3NiKTsKKyAgICAgICB0aW1lc3BlY1sxXSA9IGdldF9zdGF0X210aW1lIChzcmNfc2IpOworIAorLSAgICAgIGlmIChmdXRpbWVucyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisrICAgICAgaWYgKGZ1dGltZW5zX2NvcmV1dGlscyAoZGVzdF9kZXNjLCBkc3RfbmFtZSwgdGltZXNwZWMpICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIF8oInByZXNlcnZpbmcgdGltZXMgZm9yICVzIiksIHF1b3RlIChkc3RfbmFtZSkpOworIAkgIGlmICh4LT5yZXF1aXJlX3ByZXNlcnZlKQorZGlmZiAtLWdpdCBhL3NyYy90b3VjaC5jIGIvc3JjL3RvdWNoLmMKK2luZGV4IGE3OWMyNmQuLjZlZjMxN2QgMTAwNjQ0CistLS0gYS9zcmMvdG91Y2guYworKysrIGIvc3JjL3RvdWNoLmMKK0BAIC0xODIsNyArMTgyLDcgQEAgdG91Y2ggKGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgdCA9IHRpbWVzcGVjOworICAgICB9CisgCistICBvayA9IChmdXRpbWVucyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKysgIG9rID0gKGZ1dGltZW5zX2NvcmV1dGlscyAoZmQsIChmZCA9PSBTVERPVVRfRklMRU5PID8gTlVMTCA6IGZpbGUpLCB0KSA9PSAwKTsKKyAKKyAgIGlmIChmZCA9PSBTVERJTl9GSUxFTk8pCisgICAgIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L2dudWxpYl9tNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjM1NTUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvZ251bGliX200LnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgcmVtb3ZlIHRoZSBsaW5lIHRvIGNhdXNlIHJlY3Vyc2l2ZSBpbmNsdXNpb24gZXJyb3IgZnJvbSBhdXRvcmVjb25mLCBzaWNuZQorIyBuZXdlciBhdXRvY29uZiBoYXMgaW5jbHVkZWQgdGhpcyBkZWZpbml0aW9uLiBTaW1wbHkgcmVuYW1lIGl0IGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvZXh0ZW5zaW9ucy5tNCBiL2V4dGVuc2lvbnMubTQKK2luZGV4IDE0M2E5ZTUuLmY2NTU4ZjEgMTAwNjQ0CistLS0gYS9tNC9leHRlbnNpb25zLm00CisrKysgYi9tNC9leHRlbnNpb25zLm00CitAQCAtMTYsNyArMTYsNyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorK0FDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNfRFVNTVldLAorIFsKKyAgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorICAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtNi45L21hbi10b3VjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDJjYjljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy02LjkvbWFuLXRvdWNoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKKyMgbWFuIHBhZ2UgZm9yICd0b3VjaCcgaXMgZ2VuZXJhdGVkIGRpZmZlcmVudGx5IGZyb20gb3RoZXJzLiBBbGwgb3RoZXIgdXRpbGl0aWVzCisjIGFyZSBwcm92aWRlZCBzdGF0aWMgbWFuIHNvdXJjZSBmaWxlcywgd2hpbGUgZm9yICd0b3VjaCcgaXQgcmVxdWlyZXMgaGVscDJtYW4KKyMgdG8gaW52b2tlICJ0b3VjaCAtLWhlbHAiIGFuZCB0aGVuIGNvbnZlcnQgdGhlIG91dHB1dCBpbnRvIHRoZSBtYW51YWwuIFNpbmNlIHRvdWNoCisjIGlzIHdpdGggdGFyZ2V0IGZvcm1hdCB3aGljaCBjYW4ndCBiZSBpbnZva2VkIG9uIGJ1aWxkIHN5c3RlbSwgZGlzYWJsZSBidWlsZGluZworIyAndG91Y2gnIG1hbiBwYWdlIGhlcmUuCisjCisjIFNpZ25lZC1vZmYtYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTE4CisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKQorCitkaWZmIC0tZ2l0IGEvbWFuL01ha2VmaWxlLmFtIGIvbWFuL01ha2VmaWxlLmFtCitpbmRleCAzMmRmOWQxLi4zN2IwOWUzIDEwMDY0NAorLS0tIGEvbWFuL01ha2VmaWxlLmFtCisrKysgYi9tYW4vTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBAIGRpc3RfbWFuX01BTlMgPSBcCisgICBwYXN0ZS4xIHBhdGhjaGsuMSBwci4xIHByaW50ZW52LjEgcHJpbnRmLjEgcHR4LjEgcHdkLjEgcmVhZGxpbmsuMSBcCisgICBybS4xIHJtZGlyLjEgc2VxLjEgc2hhMXN1bS4xIHNoYTIyNHN1bS4xIHNoYTI1NnN1bS4xIHNoYTM4NHN1bS4xIHNoYTUxMnN1bS4xIFwKKyAgIHNocmVkLjEgc2h1Zi4xIHNsZWVwLjEgc29ydC4xIHNwbGl0LjEgc3RhdC4xIFwKKy0gIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdG91Y2guMSB0ci4xIHRydWUuMSB0c29ydC4xIFwKKysgIHN1LjEgc3VtLjEgc3luYy4xIHRhYy4xIHRhaWwuMSB0ZWUuMSB0ZXN0LjEgdHIuMSB0cnVlLjEgdHNvcnQuMSBcCisgICB0dHkuMSB1bmV4cGFuZC4xIHVuaXEuMSB1bmxpbmsuMSB2ZGlyLjEgd2MuMSBcCisgICB3aG9hbWkuMSB5ZXMuMSAkKE1BTikKKyBvcHRpb25hbF9tYW5zID0gXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlscy04LjI0L2ZpeC1zZWxpbnV4LWZsYXNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWFlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvZml4LXNlbGludXgtZmxhc2sucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBhMWQzNjA1MDlmYTNhNGFmZjU3ZWVkY2Q1MjhjYzAzNDdhODc1MzFkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE2IFNlcCAyMDE0IDAxOjU5OjA4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGdudWxpYi1jb21wLm00OiBzZWxpbnV4L2ZsYXNrLmggc2hvdWxkIHJlc3BlY3QgdG8KKyB3aXRoX3NlbGludXgKKworRml4ZWQgd2hlbiBidWlsZCB3aXRoIG1ldGEtc2VsaW51eCBldmVuIHdoZW4gLS13aXRob3V0LXNlbGludXg6CitydW5jb24uYzo0OToyODogZmF0YWwgZXJyb3I6IHNlbGludXgvZmxhc2suaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICMgaW5jbHVkZSA8c2VsaW51eC9mbGFzay5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK2NvbXBpbGF0aW9uIHRlcm1pbmF0ZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG00L2dudWxpYi1jb21wLm00IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbTQvZ251bGliLWNvbXAubTQgYi9tNC9nbnVsaWItY29tcC5tNAoraW5kZXggNDcyZDNhMC4uNWYwOTczNCAxMDA2NDQKKy0tLSBhL200L2dudWxpYi1jb21wLm00CisrKysgYi9tNC9nbnVsaWItY29tcC5tNAorQEAgLTE3MzAsMTEgKzE3MzAsMTEgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAorICAgICBBQ19MSUJPQkooW3NlbGVjdF0pCisgICBmaQorICAgZ2xfU1lTX1NFTEVDVF9NT0RVTEVfSU5ESUNBVE9SKFtzZWxlY3RdKQorLSAgQUNfQ0hFQ0tfSEVBREVSUyhbc2VsaW51eC9mbGFzay5oXSkKKyAgIEFDX0xJQk9CSihbc2VsaW51eC1hdF0pCisgICBnbF9IRUFERVJTX1NFTElOVVhfU0VMSU5VWF9ICisgICBnbF9IRUFERVJTX1NFTElOVVhfQ09OVEVYVF9ICisgICBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiAhPSBubyAmJiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3NlbGludXhfc2VsaW51eF9oIiA9IHllczsgdGhlbgorKyAgICBBQ19DSEVDS19IRUFERVJTKFtzZWxpbnV4L2ZsYXNrLmhdKQorICAgICBBQ19MSUJPQkooW2dldGZpbGVjb25dKQorICAgZmkKKyAgIGdsX1NFUlZFTlQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4OTZhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9tYW4tZGVjb3VwbGUtbWFucGFnZXMtZnJvbS1idWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGcm9tIGI0ZDI1ODYyOWYwOTAwNjY3ODNjM2I0YzkxYjQwZjYzYjlkMGEyOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgOCBGZWIgMjAxNSAxNjo1MTo1NyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBtYW46IGRlY291cGxlIG1hbnBhZ2VzIGZyb20gYnVpbGQKKworVGhlIHVzZSBvZiAiaGVscDJtYW4iIGRvZXNuJ3Qgd29yayBhdCBhbGwgZm9yIGNyb3NzIGNvbXBpbGUsIGluCithZGRpdGlvbiB0byB0aGUgZXh0cmEgcmVxdWlyZW1lbnQgb2YgcGVybCBpdCBhZGRzLgorCitKdXN0IGRlY291cGxlIHRoZSBtYW5wYWdlcyBmcm9tIHRoZSBidWlsZCBpbiBvcmRlciB0byBwYXZlIHRoZSB3YXkgZm9yCitpbXBvcnRpbmcgcHJlYnVpbHQgbWFucGFnZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBhIGNyb3NzIGJ1aWxkIHNpdHVhdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBkb2Vzbid0IGNhcmUgYWJvdXQgeC1jb21waWxlIGNhc2UuXQorU2lnbmVkLW9mZi1ieTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmYjRhZjI3Li43NTc2YjJjIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMjE0LDUgKzIxNCw0IEBAIEFNX0NQUEZMQUdTID0gLUlsaWIgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSXNyYyAtSSQodG9wX3NyY2Rpcikvc3JjCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2xpYi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9zcmMvbG9jYWwubWsKKyBpbmNsdWRlICQodG9wX3NyY2RpcikvZG9jL2xvY2FsLm1rCistaW5jbHVkZSAkKHRvcF9zcmNkaXIpL21hbi9sb2NhbC5taworIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKS90ZXN0cy9sb2NhbC5taworLS0gCisyLjIuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHMtOC4yNC9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjhhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzLTguMjQvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitXZSBoYXZlIHByb2JsZW0gdXNpbmcgaGFyZGNvZGVkIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCit3aGljaCB3aWxsIGJlIGNoZWNrZWQgZm9yIGNyb3NzIGJ1aWxkcy4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaAoraXMgdmFsaWQgZm9yIEFJWCBvbmx5LiBXZSBkbyBub3QgaGF2ZSBBSVggYXMgb25lIG9mIG91ciBzdXBwb3J0ZWQKK2J1aWxkIGhvc3Qgb3IgdGFyZ2V0LiBUaGVyZWZvcmUgd2UgZ2V0IHJpZCBvZiB0aGUgaGFyZGNvZGVkIHBhdGhzCithbmQgbWFrZSBsaWZlIGVhc2llciBmb3IgY3Jvc3MgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtVcHN0cmVhbSBkb2VzIGNhcmUgZm9yIEFJWCB3aGlsZSB3ZSBtYXkgbm90XQorCitJbmRleDogY29yZXV0aWxzLTguMTQvbTQvZ2V0bG9hZGF2Zy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvcmV1dGlscy04LjE0Lm9yaWcvbTQvZ2V0bG9hZGF2Zy5tNAkyMDExLTA5LTE5IDA4OjA5OjI0LjAwMDAwMDAwMCAtMDcwMAorKysrIGNvcmV1dGlscy04LjE0L200L2dldGxvYWRhdmcubTQJMjAxMS0xMC0xOSAyMTo0MjowMC4zODU1MzMzNTcgLTA3MDAKK0BAIC00MSwxNiArNDEsNiBAQAorICAgICAgICBbTElCUz0iLWx1dGlsICRMSUJTIiBnbF9mdW5jX2dldGxvYWRhdmdfZG9uZT15ZXNdKQorICAgIGZpCisgCistICAgaWYgdGVzdCAkZ2xfZnVuY19nZXRsb2FkYXZnX2RvbmUgPSBubzsgdGhlbgorLSAgICAgIyBUaGVyZSBpcyBhIGNvbW1vbmx5IGF2YWlsYWJsZSBsaWJyYXJ5IGZvciBSUy82MDAwIEFJWC4KKy0gICAgICMgU2luY2UgaXQgaXMgbm90IGEgc3RhbmRhcmQgcGFydCBvZiBBSVgsIGl0IG1pZ2h0IGJlIGluc3RhbGxlZCBsb2NhbGx5LgorLSAgICAgZ2xfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTCistICAgICBMSUJTPSItTC91c3IvbG9jYWwvbGliICRMSUJTIgorLSAgICAgQUNfQ0hFQ0tfTElCKFtnZXRsb2FkYXZnXSwgW2dldGxvYWRhdmddLAorLSAgICAgICAgICAgICAgICAgIFtMSUJTPSItbGdldGxvYWRhdmcgJExJQlMiIGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lPXllc10sCistICAgICAgICAgICAgICAgICAgW0xJQlM9JGdsX2dldGxvYWRhdmdfTElCU10pCistICAgZmkKKy0KKyAgICAjIFNldCB1cCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gaWYgbmVjZXNzYXJ5LgorICAgIGlmIHRlc3QgJGdsX2Z1bmNfZ2V0bG9hZGF2Z19kb25lID0gbm87IHRoZW4KKyAgICAgIEhBVkVfR0VUTE9BREFWRz0wCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfNi45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZjFkNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9jb3JldXRpbHMvY29yZXV0aWxzXzYuOS5iYgpAQCAtMCwwICsxLDEwMiBAQAorU1VNTUFSWSA9ICJUaGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgbWFuaXB1bGF0aW9uIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgQ29yZSBVdGlsaXRpZXMgcHJvdmlkZSB0aGUgYmFzaWMgZmlsZSwgc2hlbGwgYW5kIHRleHQgXAorbWFuaXB1bGF0aW9uIHV0aWxpdGllcy4gVGhlc2UgYXJlIHRoZSBjb3JlIHV0aWxpdGllcyB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgb24gXAorZXZlcnkgc3lzdGVtLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHMuYztiZWdpbmxpbmU9NDtlbmRsaW5lPTE2O21kNT0xNWVkNjBmNjdiMWRiNWZlZGQ1ZGJjMzdjZjhhOTU0MyIKK1BSID0gInI1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2dudWxpYl9tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXRpbWVucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtbHMteC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtNi45LWNwLWktdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtaTE4bi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtb3ZlcmZsb3cucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29yZXV0aWxzLWZpeC1pbnN0YWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi10b3VjaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHNfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvcmV1dGlscy1idWlsZC13aXRoLWFjbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb3JldXRpbHMtZml4LXRleGluZm8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9tYW5wYWdlX2J1aWxkaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzk2MDdkODQ5NWYxNmU5ODkwNmU3ZWQyZDk3NTFhMDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODljMjg5NWFkMTU3ZGU1MGU1MzI5OGIyMmQ5MWRiMTE2ZWU0ZTFkZDNmZGY0MDE5MjYwMjU0ZTJlMzE0OTdiMCIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz15ZXMgXAorICAgICAgICAgICAgICAgICBhY19jdl9mdW5jX3N0cmNvbGxfd29ya3M9eWVzIgorCisjIGFjbCBpcyBub3QgYSBkZWZhdWx0IGZlYXR1cmUKKyMKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorCisjIHdpdGgsIHdpdGhvdXQsIGRlcGVuZHMsIHJkZXBlbmRzCisjCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD15ZXMsYWNfY3ZfaGVhZGVyX3N5c19hY2xfaD1ubyxhY2wsIgorCisKKyMgWyBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYmFzZTY0IGJhc2VuYW1lIGNrc3VtIGNvbW0gY3NwbGl0IGN1dCBkaXIgZGlyY29sb3JzIGRpcm5hbWUgZHUgXAorICAgICAgICAgICAgICAgIGVudiBleHBhbmQgZXhwciBmYWN0b3IgZm10IGZvbGQgZ3JvdXBzIGhlYWQgaG9zdGlkIGlkIGluc3RhbGwgXAorICAgICAgICAgICAgICAgIGpvaW4gbGluayBsb2duYW1lIG1kNXN1bSBta2ZpZm8gbmljZSBubCBub2h1cCBvZCBwYXN0ZSBwYXRoY2hrIFwKKyAgICAgICAgICAgICAgICBwaW5reSBwciBwcmludGVudiBwcmludGYgcHR4IHJlYWRsaW5rIHNlcSBzaGExc3VtIHNoYTIyNHN1bSBzaGEyNTZzdW0gXAorICAgICAgICAgICAgICAgIHNoYTM4NHN1bSBzaGE1MTJzdW0gc2hyZWQgc2h1ZiBzb3J0IHNwbGl0IHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCBcCisgICAgICAgICAgICAgICAgdHIgdHNvcnQgdHR5IHVuZXhwYW5kIHVuaXEgdW5saW5rIHVzZXJzIHZkaXIgd2Mgd2hvIHdob2FtaSB5ZXMgdXB0aW1lIgorCisjIGhvc3RuYW1lIGdldHMgYSBzcGVjaWFsIHRyZWF0bWVudCBhbmQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKK2Jhc2VfYmluZGlyX3Byb2dzID0gImNhdCBjaGdycCBjaG1vZCBjaG93biBjcCBkYXRlIGRkIGVjaG8gZmFsc2Uga2lsbCBsbiBscyBta2RpciBcCisgICAgICAgICAgICAgICAgICAgICBta25vZCBtdiBwd2Qgcm0gcm1kaXIgc2xlZXAgc3R0eSBzeW5jIHRvdWNoIHRydWUgdW5hbWUgaG9zdG5hbWUgc3RhdCIKKworc2JpbmRpcl9wcm9ncz0gImNocm9vdCIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSBjb3JldXRpbHMgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtzYmluZGlyX3Byb2dzfTsgZG8gbXYgJHtEfSR7YmluZGlyfS8kaSAke0R9JHtzYmluZGlyfS8kaTsgZG9uZQorCisJIyBbIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgYmVjYXVzZSBbLmNvcmV1dGlscyB3aWxsIGNhdXNlIHRoZSBzZWQgc3R1ZmYKKwkjIGluIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgdG8gZmFpbCwgdGhlcmVmb3JlIHVzZSBsYnJhY2tldCAtIHRoZSBuYW1lIHVzZWQKKwkjIGZvciB0aGUgYWN0dWFsIHNvdXJjZSBmaWxlLgorCW12ICR7RH0ke2JpbmRpcn0vWyAke0R9JHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfQorCisJIyBOZXdlciB2ZXJzaW9ucyBvZiBjb3JldXRpbHMgZG8gbm90IGluY2x1ZGUgc3UsIHRvIG1pbWljIHRoaXMgYmVoYXZpb3IKKwkjIHdlIHNpbXBseSByZW1vdmUgaXQuCisJcm0gLWYgJHtEfSR7YmluZGlyfS9zdQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsYnJhY2tldCAke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtzYmluZGlyX3Byb2dzfSIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbdXB0aW1lXSA9ICIxMCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW2hvc3RuYW1lXSA9ICIxMCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2xicmFja2V0XSA9ICIke2JpbmRpcn0vWyIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L2xicmFja2V0LiR7QlBOfSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignc2JpbmRpcicsIFRydWUpLCBwcm9nKSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2NvcmV1dGlscy9jb3JldXRpbHNfOC4yNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRlYmNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvY29yZXV0aWxzL2NvcmV1dGlsc184LjI0LmJiCkBAIC0wLDAgKzEsMTI3IEBACitTVU1NQVJZID0gIlRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBtYW5pcHVsYXRpb24gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBDb3JlIFV0aWxpdGllcyBwcm92aWRlIHRoZSBiYXNpYyBmaWxlLCBzaGVsbCBhbmQgdGV4dCBcCittYW5pcHVsYXRpb24gdXRpbGl0aWVzLiBUaGVzZSBhcmUgdGhlIGNvcmUgdXRpbGl0aWVzIHdoaWNoIGFyZSBleHBlY3RlZCB0byBleGlzdCBvbiBcCitldmVyeSBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY29yZXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9scy5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTY7bWQ1PTM4Yjc5Nzg1Y2E4ODUzN2I3NTg3MTc4MmEyYTNjNmI4IgorREVQRU5EUyA9ICJnbXAgbGliY2FwIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NvcmV1dGlscy8ke0JQfS50YXIueHo7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL2Rpc3RmaWxlcy5nZW50b28ub3JnL2Rpc3RmaWxlcy8ke0JQfS1tYW4udGFyLnh6O25hbWU9bWFucGFnZXMgXAorICAgICAgICAgICBmaWxlOi8vbWFuLWRlY291cGxlLW1hbnBhZ2VzLWZyb20tYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtc2VsaW51eC1mbGFzay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjQwZWZkYmNlODY1ZDI0NThkOGRhMGE5ZGNlZTdjMTZjIgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiYTJkNzUyODZhNGI5ZWYzYTEzMDM5YzJkYTM4NjhhNjFiZTRlZTlmMTdkOGFlMzgwYTM1YTk3ZTUwNjk3MjE3MCIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICI3MjhhOTFhNWMxMDk1YTMzY2ZmYjk5NTliYjg5MTk2MyIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICJjZjAzMzNiNWYxMzRhMzMxZTBiNDZlMmRkZjkwNjY2ZjhiZGMzMjgxYzFjYTJjN2NjYmI3NWI0Mzc1ODljZTM3IgorCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC1nbXAiCitFWFRSQV9PRUNPTkZfY2xhc3MtdGFyZ2V0ID0gIi0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1hcmNoIC0tbGliZXhlY2Rpcj0ke2xpYmRpcn0iCisKKyMgYWNsIGlzIG5vdCBhIGRlZmF1bHQgZmVhdHVyZQorIworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICIiCisKKyMgd2l0aCwgd2l0aG91dCwgZGVwZW5kcywgcmRlcGVuZHMKKyMKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wsIgorCisjIFsgZGYgbWt0ZW1wIGJhc2U2NCBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiaW5kaXJfcHJvZ3MgPSAiYXJjaCBiYXNlbmFtZSBjaGNvbiBja3N1bSBjb21tIGNzcGxpdCBjdXQgZGlyIGRpcmNvbG9ycyBkaXJuYW1lIGR1IFwKKyAgICAgICAgICAgICAgICBlbnYgZXhwYW5kIGV4cHIgZmFjdG9yIGZtdCBmb2xkIGdyb3VwcyBoZWFkIGhvc3RpZCBpZCBpbnN0YWxsIFwKKyAgICAgICAgICAgICAgICBqb2luIGxpbmsgbG9nbmFtZSBtZDVzdW0gbWtmaWZvIG5pY2Ugbmwgbm9odXAgbnByb2Mgb2QgcGFzdGUgcGF0aGNoayBcCisgICAgICAgICAgICAgICAgcGlua3kgcHIgcHJpbnRlbnYgcHJpbnRmIHB0eCByZWFkbGluayByZWFscGF0aCBydW5jb24gc2VxIHNoYTFzdW0gc2hhMjI0c3VtIHNoYTI1NnN1bSBcCisgICAgICAgICAgICAgICAgc2hhMzg0c3VtIHNoYTUxMnN1bSBzaHJlZCBzaHVmIHNvcnQgc3BsaXQgc3RkYnVmIHN1bSB0YWMgdGFpbCB0ZWUgdGVzdCB0aW1lb3V0XAorICAgICAgICAgICAgICAgIHRyIHRydW5jYXRlIHRzb3J0IHR0eSB1bmV4cGFuZCB1bmlxIHVubGluayB1cHRpbWUgdXNlcnMgdmRpciB3YyB3aG8gd2hvYW1pIHllcyIKKworIyBob3N0bmFtZSBnZXRzIGEgc3BlY2lhbCB0cmVhdG1lbnQgYW5kIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzCitiYXNlX2JpbmRpcl9wcm9ncyA9ICJjYXQgY2hncnAgY2htb2QgY2hvd24gY3AgZGF0ZSBkZCBlY2hvIGZhbHNlIGtpbGwgbG4gbHMgbWtkaXIgXAorICAgICAgICAgICAgICAgICAgICAgbWtub2QgbXYgcHdkIHJtIHJtZGlyIHNsZWVwIHN0dHkgc3luYyB0b3VjaCB0cnVlIHVuYW1lIHN0YXQiCisKK3NiaW5kaXJfcHJvZ3M9ICJjaHJvb3QiCisKKyMgTGV0IGFjbG9jYWwgdXNlIHRoZSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbTQgZmlsZSByYXRoZXIgdGhhbiB0aGUKKyMgYWJzb2x1dGUgc2luY2UgY29yZXV0aWxzIGhhcyBhIGxvdCBvZiBtNCBmaWxlcywgb3RoZXJ3aXNlIHRoZXJlIG1pZ2h0CisjIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIGl0IGlzIGJ1aWx0IGluIGEgbG9uZy9kZWVwCisjIGRpcmVjdG9yeS4KK2FjcGF0aHMgPSAiLUkgLi9tNCIKKworIyBEZWFsIHdpdGggYSBzZXBhcmF0ZSBidWlsZGRpciBmYWlsdXJlIGlmIHNyYyBkb2Vzbid0IGV4aXN0IHdoZW4gY3JlYXRpbmcgdmVyc2lvbi5jL3ZlcnNpb24uaAorZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlta2RpciAtcCAke0J9L3NyYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmb3IgaSBpbiBkZiBta3RlbXAgYmFzZTY0OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaS4ke0JQTn07IGRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlbICIke3NiaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdICYmIGZvciBpIGluICR7c2JpbmRpcl9wcm9nc307IGRvIG12ICR7RH0ke2JpbmRpcn0vJGkgJHtEfSR7c2JpbmRpcn0vJGkuJHtCUE59OyBkb25lCisKKwkjIFsgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIFsuY29yZXV0aWxzIHdpbGwgY2F1c2UgdGhlIHNlZCBzdHVmZgorCSMgaW4gdXBkYXRlLWFsdGVybmF0aXZlcyB0byBmYWlsLCB0aGVyZWZvcmUgdXNlIGxicmFja2V0IC0gdGhlIG5hbWUgdXNlZAorCSMgZm9yIHRoZSBhY3R1YWwgc291cmNlIGZpbGUuCisJbXYgJHtEfSR7YmluZGlyfS9bICR7RH0ke2JpbmRpcn0vbGJyYWNrZXQuJHtCUE59CisKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcworCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuMQorCWluc3RhbGwgLXQgJHtEfS8ke21hbmRpcn0vbWFuMSAke1N9L21hbi8qLjEKKwkjIHByZWJ1aWx0IG1hbiBwYWdlcyBkb24ndCBkbyBhIHNlcGFyYXRlIG1hbiBwYWdlIGZvciBbIHZzIHRlc3QuCisJIyBzZWUgY29tbWVudCBhYm92ZSByLmUuIHNlZCBhbmQgdXBkYXRlLWFsdGVybmF0aXZlcworCWNwIC1hICR7RH0ke21hbmRpcn0vbWFuMS90ZXN0LjEgJHtEfSR7bWFuZGlyfS9tYW4xL2xicmFja2V0LjEuJHtCUE59Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpeworCSMgcmVtb3ZlIGdyb3VwcyB0byBmaXggY29uZmxpY3Qgd2l0aCBzaGFkb3ctbmF0aXZlCisJcm0gLWYgJHtEfSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm91cHMKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImxicmFja2V0ICR7YmluZGlyX3Byb2dzfSAke2Jhc2VfYmluZGlyX3Byb2dzfSAke3NiaW5kaXJfcHJvZ3N9IGJhc2U2NCBta3RlbXAgZGYiCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAiYmFzZTY0LjEgbWt0ZW1wLjEgZGYuMSBsYnJhY2tldC4xIGdyb3Vwcy4xIGtpbGwuMSB1cHRpbWUuMSBzdGF0LjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiYXNlNjRdID0gIiR7YmFzZV9iaW5kaXJ9L2Jhc2U2NCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtiYXNlNjRdID0gIiR7YmluZGlyfS9iYXNlNjQuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jhc2U2NC4xXSA9ICIke21hbmRpcn0vbWFuMS9iYXNlNjQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW21rdGVtcF0gPSAiJHtiYXNlX2JpbmRpcn0vbWt0ZW1wIgorQUxURVJOQVRJVkVfVEFSR0VUW21rdGVtcF0gPSAiJHtiaW5kaXJ9L21rdGVtcC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGZdID0gIiR7YmFzZV9iaW5kaXJ9L2RmIgorQUxURVJOQVRJVkVfVEFSR0VUW2RmXSA9ICIke2JpbmRpcn0vZGYuJHtCUE59IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2RmLjFdID0gIiR7bWFuZGlyfS9tYW4xL2RmLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYnJhY2tldF0gPSAiJHtiaW5kaXJ9L1siCitBTFRFUk5BVElWRV9UQVJHRVRbbGJyYWNrZXRdID0gIiR7YmluZGlyfS9sYnJhY2tldC4ke0JQTn0iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGJyYWNrZXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGJyYWNrZXQuMSIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2dyb3Vwcy4xXSA9ICIke21hbmRpcn0vbWFuMS9ncm91cHMuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1cHRpbWUuMV0gPSAiJHttYW5kaXJ9L21hbjEvdXB0aW1lLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3RhdC4xXSA9ICIke21hbmRpcn0vbWFuMS9zdGF0LjEiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKwlmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9iaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ3NiaW5kaXJfcHJvZ3MnLCBUcnVlKS5zcGxpdCgpOgorCQlkLnNldFZhckZsYWcoJ0FMVEVSTkFUSVZFX0xJTktfTkFNRScsIHByb2csICclcy8lcycgJSAoZC5nZXRWYXIoJ3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy13YWl0L2RidXMtd2FpdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxZGM4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMtd2FpdC9kYnVzLXdhaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgdG9vbCB0byB3YWl0IGZvciBhIHNwZWNpZmljIHNpZ25hbCBvdmVyIERCdXMiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9kYnVzLXdhaXQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK0RFUEVORFMgPSAiZGJ1cyIKKworU1JDUkVWID0gIjZjYzYwNzdhMzZmZTI2NDhhNWY5OTNmZTdjMTZjOTYzMmY5NDY1MTciCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDAxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi5pbmMKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJIaWdoIGxldmVsIGxhbmd1YWdlIChHTGliKSBiaW5kaW5nIGZvciBELUJ1cyIKK0RFU0NSSVBUSU9OID0gIkdMaWIgYmluZGluZ3MgZm9yIHRoZSBELUJ1cyBtZXNzYWdlIGJ1cyB0aGF0IGludGVncmF0ZSBcCit0aGUgRC1CdXMgbGlicmFyeSB3aXRoIHRoZSBHTGliIHRocmVhZCBhYnN0cmFjdGlvbiBhbmQgbWFpbiBsb29wLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL1NvZnR3YXJlL2RidXMiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2Y1YjNhMmY3MDgzNzUwZDUwNDMzMzExNGU3Mzg2NTYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLWdsaWIuaDtiZWdpbmxpbmU9NztlbmRsaW5lPTIxO21kNT03NzU1YzlkN2FiY2NkNWRiZDI1YTZhOTc0NTM4YmIzYyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJleHBhdCBnbGliLTIuMCB2aXJ0dWFsL2xpYmludGwgZGJ1cy1nbGliLW5hdGl2ZSBkYnVzIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiZ2xpYi0yLjAtbmF0aXZlIGRidXMtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLWdsaWIvZGJ1cy1nbGliLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LWluc3RhbGwtbWFrZWZpbGUucGF0Y2ggXAorIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCisjZGVmYXVsdCBkaXNhYmxlIHJlZ3Jlc3Npb24gdGVzdHMsIHNvbWUgdW5pdCB0ZXN0IGNvZGUgaW4gbm9uIHRlc3RpbmcgY29kZQorI1BBQ0tBR0VDT05GSUdfcG4tJHtQTn0gPSAidGVzdHMiIGVuYWJsZSByZWdyZXNzaW9uIHRlc3RzIGxvY2FsLmNvbmYKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3Rlc3RzXSA9ICItLWVuYWJsZS10ZXN0cywsLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwgXAorICAgICAgICAgICAgICAgIC0td2l0aC1kYnVzLWJpbmRpbmctdG9vbD0ke1NUQUdJTkdfQklORElSX05BVElWRX0vZGJ1cy1iaW5kaW5nLXRvb2wiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aC1pbnRyb3NwZWN0LXhtbD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2RidXMvZGJ1cy1idXMtaW50cm9zcGVjdC54bWwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1iYXNoLWNvbXBsZXRpb24gJHtQTn0tdGVzdHMtZGJnICR7UE59LXRlc3RzIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kL2RidXMtYmFzaC1jb21wbGV0aW9uLnNoIFwKKyAgICR7bGliZXhlY2Rpcn0vZGJ1cy1iYXNoLWNvbXBsZXRpb24taGVscGVyIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9kYnVzLWJpbmRpbmctdG9vbCIKKworUkRFUEVORFNfJHtQTn0tdGVzdHMgKz0gImRidXMteDExIgorRklMRVNfJHtQTn0tdGVzdHMgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMiCitGSUxFU18ke1BOfS10ZXN0cy1kYmcgPSAiJHtkYXRhZGlyfS8ke0JQTn0vdGVzdHMvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2NvcmUvLmRlYnVnLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHtCUE59L3Rlc3RzL2ludGVyZmFjZXMvLmRlYnVnLyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYi9uby1leGFtcGxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmI0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvbm8tZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRGlzYWJsZSBjb21waWxpbmcgZXhhbXBsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtLm9yaWcJMjAwNi0wNy0yMyAxNjowNDo0My4wMDAwMDAwMDAgKzAyMDAKKysrKyBkYnVzLWdsaWItMC43MC9kYnVzL01ha2VmaWxlLmFtCTIwMDYtMDctMjMgMTY6MDQ6NTIuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgSU5DTFVERVM9LUkkKHRvcF9zcmNkaXIpICQoREJVU19DRkxBR1MpICQoREJVU19HTElCX0NGTEFHUykgJChEQlVTX0dMSUJfVE9PTF9DRkxBR1MpIC1EREJVU19DT01QSUxBVElPTj0xIC1EREJVU19MT0NBTEVESVI9XCIkKHByZWZpeCkvQERBVEFESVJOQU1FQC9sb2NhbGVcIiAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliL3Rlc3QtaW5zdGFsbC1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjdjODJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLWdsaWIvdGVzdC1pbnN0YWxsLW1ha2VmaWxlLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0NoYW5nZSBNYWtlZmlsZS5hbSB0byBpbnN0YWxsIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRlc3QgcGFja2FnZSBwdXJwb3NlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Rlc3Qgbm90IGluc3RhbGwgaXMgZm9yIHB1cnBvc2UgZnJvbSB1cHN0cmVhbV0KKworU2lnbmVkLW9mZi1ieTogWWFvIFpoYW8gPHlhby56aGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIHRlc3QvTWFrZWZpbGUuYW0gICAgICAgICAgICB8IDMgKystCisgdGVzdC9jb3JlL01ha2VmaWxlLmFtICAgICAgIHwgMyArKy0KKyB0ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gfCAzICsrLQorIDMgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC9NYWtlZmlsZS5hbSBiL3Rlc3QvTWFrZWZpbGUuYW0KK2luZGV4IDM3OWM4YzMuLjY1ODA5MjcgMTAwNjQ0CistLS0gYS90ZXN0L01ha2VmaWxlLmFtCisrKysgYi90ZXN0L01ha2VmaWxlLmFtCitAQCAtNDgsNyArNDgsOCBAQCBURVNUUyA9IFwKKyAJJCh0ZXN0X3NjcmlwdHMpIFwKKyAJJChOVUxMKQorIAorLW5vaW5zdF9QUk9HUkFNUyA9IFwKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMKKyt0ZXN0X1BST0dSQU1TID0gXAorIAkkKHRlc3RfcHJvZ3JhbXMpIFwKKyAJJCh0ZXN0X3JlbGF0ZWRfcHJvZ3JhbXMpIFwKKyAJJChOVUxMKQorZGlmZiAtLWdpdCBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbSBiL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQoraW5kZXggZTRiY2ViNC4uNTRiMDc3ZCAxMDA2NDQKKy0tLSBhL3Rlc3QvY29yZS9NYWtlZmlsZS5hbQorKysrIGIvdGVzdC9jb3JlL01ha2VmaWxlLmFtCitAQCAtNjQsNyArNjQsOCBAQCBlbmRpZgorIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrdGVzdGRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VAL3Rlc3RzL2NvcmUKKyt0ZXN0X1BST0dSQU1TID0gXAorIAl0ZXN0LWRidXMtZ2xpYiBcCisgCXRlc3QtZXJyb3ItbWFwcGluZyBcCisgCXRlc3Qtc2VydmljZS1nbGliIFwKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0gYi90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KK2luZGV4IGE5NGQwOGQuLjcwN2RjYWMgMTAwNjQ0CistLS0gYS90ZXN0L2ludGVyZmFjZXMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3QvaW50ZXJmYWNlcy9NYWtlZmlsZS5hbQorQEAgLTU3LDcgKzU3LDggQEAgaWYgREJVU19CVUlMRF9URVNUUworIAorICMjIHdlIHVzZSBub2luc3RfUFJPR1JBTVMgbm90IGNoZWNrX1BST0dSQU1TIGZvciBURVNUUyBzbyB0aGF0IHdlCisgIyMgYnVpbGQgZXZlbiB3aGVuIG5vdCBkb2luZyAibWFrZSBjaGVjayIKKy1ub2luc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyt0ZXN0ZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAvdGVzdHMvaW50ZXJmYWNlcworK3Rlc3RfUFJPR1JBTVMgPSB0ZXN0LXNlcnZpY2UgdGVzdC1jbGllbnQKKyAKKyB0ZXN0X3NlcnZpY2VfU09VUkNFUyA9IFwKKyAJdGVzdC1pbnRlcmZhY2VzLmMgXAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy1nbGliXzAuMTA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjYzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMtZ2xpYl8wLjEwNC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgZGJ1cy1nbGliLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiNTQ5N2QyMDcwNzA5Y2Y3OTZmMTg3OGM3NWE3MmEwMzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmZjMWYxYTgyYmZjM2VjM2VjYWZlMDRkMGU4N2JhYjdlOTk5ZjUwZGNlNGY0YTM0ZDBiODljYWY2YmQ4MjFmNiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuOC4yMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy10ZXN0XzEuOC4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQwNzBiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzLXRlc3RfMS44LjIwLmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiRC1CdXMgdGVzdCBwYWNrYWdlIChmb3IgRC1idXMgZnVuY3Rpb25hbGl0eSB0ZXN0aW5nIG9ubHkpIgorSE9NRVBBR0UgPSAiaHR0cDovL2RidXMuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJBRkwtMiB8IEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwZGRlZDNiNTgxNDhmM2YxZmQ4MDRiMjYzNTRhZjNlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RidXMvZGJ1cy5oO2JlZ2lubGluZT02O2VuZGxpbmU9MjA7bWQ1PTc3NTVjOWQ3YWJjY2Q1ZGJkMjVhNmE5NzQ1MzhiYjNjIgorCitERVBFTkRTID0gInB5dGhvbi1weWdvYmplY3QgZGJ1cyBkYnVzLWdsaWIiCisKK1JERVBFTkRTXyR7UE59ICs9ICJtYWtlIgorUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NsZWFyLWd1aWRfZnJvbV9zZXJ2ZXItaWYtc2VuZF9uZWdvdGlhdGVfdW5peF9mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjQ5ODkwYmJhYmVkYWIzYTFjM2Y0ZjczYzdmZjhiMmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWM0ZmJmNGM2NDYyMWM5NmU4NzFkYTkxZDJiNzI5YTViMDA1MzZlMTE2ZDNjNDYxMmE0NjlkOTI0YjFiNzAzYSIKKworUz0iJHtXT1JLRElSfS9kYnVzLSR7UFZ9IgorRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZGJ1czoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0IHB0ZXN0CisKK0VYVFJBX09FQ09ORl9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0td2l0aC14JywgJy0td2l0aG91dC14JywgZCl9IgorRVhUUkFfT0VDT05GX1hfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLW1vZHVsYXItdGVzdHMgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2hlY2tzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1hc3NlcnRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS12ZXJib3NlLW1vZGUgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bWwtZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRveHlnZW4tZG9jcyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxpYmF1ZGl0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3lzdGVtZCBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtZGJ1cy10ZXN0LWRpcj0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgICAgICAgICAke0VYVFJBX09FQ09ORl9YfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICA6Cit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJY2FzZTE9InNoZWxsIHByaW50ZiByZWZzIHN5c2xvZyIKKwlmb3IgaSBpbiAke2Nhc2UxfTsgZG8gaW5zdGFsbCAke0J9L3Rlc3QvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJY2FzZTI9Im1hcnNoYWwgc3ludGF4IGNvcnJ1cHQgZGJ1cy1kYWVtb24gZGJ1cy1kYWVtb24tZWF2ZXNkcm9wIGxvb3BiYWNrIHJlbGF5IgorCWZvciBpIGluICR7Y2FzZTJ9OyBkbyBpbnN0YWxsICR7Qn0vdGVzdC8ubGlicy90ZXN0LSRpICR7RH0ke1BURVNUX1BBVEh9L3Rlc3Q7IGRvbmUKKwljYXNlMz0iYnVzIGJ1cy1zeXN0ZW0gYnVzLWxhdW5jaC1oZWxwZXIiCisJZm9yIGkgaW4gJHtjYXNlM307IGRvIGluc3RhbGwgJHtCfS9idXMvdGVzdC0kaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0OyBkb25lCisJaW5zdGFsbCAke0J9L2RidXMvdGVzdC1kYnVzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwljcCAtciAke0J9L3Rlc3QvZGF0YSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0Cit9CitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzEwODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMuaW5jCkBAIC0wLDAgKzEsMTcwIEBACitTVU1NQVJZID0gIkQtQnVzIG1lc3NhZ2UgYnVzIgorREVTQ1JJUFRJT04gPSAiRC1CdXMgaXMgYSBtZXNzYWdlIGJ1cyBzeXN0ZW0sIGEgc2ltcGxlIHdheSBmb3IgYXBwbGljYXRpb25zIHRvIHRhbGsgdG8gb25lIGFub3RoZXIuIEluIGFkZGl0aW9uIHRvIGludGVycHJvY2VzcyBjb21tdW5pY2F0aW9uLCBELUJ1cyBoZWxwcyBjb29yZGluYXRlIHByb2Nlc3MgbGlmZWN5Y2xlOyBpdCBtYWtlcyBpdCBzaW1wbGUgYW5kIHJlbGlhYmxlIHRvIGNvZGUgYSBcInNpbmdsZSBpbnN0YW5jZVwiIGFwcGxpY2F0aW9uIG9yIGRhZW1vbiwgYW5kIHRvIGxhdW5jaCBhcHBsaWNhdGlvbnMgYW5kIGRhZW1vbnMgb24gZGVtYW5kIHdoZW4gdGhlaXIgc2VydmljZXMgYXJlIG5lZWRlZC4iCitIT01FUEFHRSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkFGTC0yIHwgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTBkZGVkM2I1ODE0OGYzZjFmZDgwNGIyNjM1NGFmM2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGJ1cy9kYnVzLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0yMDttZDU9Nzc1NWM5ZDdhYmNjZDVkYmQyNWE2YTk3NDUzOGJiM2MiCitERVBFTkRTID0gImV4cGF0IHZpcnR1YWwvbGliaW50bCIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTX2RidXNfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyR7UE59LXB0ZXN0JywgJycsIGQpfSIKK0FMTE9XX0VNUFRZX2RidXMtcHRlc3QgPSAiMSIKK1JERVBFTkRTX2RidXMtcHRlc3RfY2xhc3MtdGFyZ2V0ID0gImRidXMtdGVzdC1wdGVzdCIKKworU1JDX1VSSSA9ICJodHRwOi8vZGJ1cy5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvZGJ1cy9kYnVzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90bXBkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGJ1cy0xLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vb3MtdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaCBcCisiCisKK2luaGVyaXQgdXNlcmFkZCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gImRidXMtMSIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAyIDUgMyAyIC4gc3RvcCAyMCAwIDEgNiAuIgorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGQuc2V0VmFyKCJJTkhJQklUX1VQREFURVJDRF9CQkNMQVNTIiwgIjEiKQorfQorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbmV0ZGV2IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWhvbWUgJHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIG1lc3NhZ2VidXMiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2RidXMtMS9zeXN0ZW0uY29uZiAke3N5c2NvbmZkaXJ9L2RidXMtMS9zZXNzaW9uLmNvbmYiCisKK0RFQklBTk5BTUVfJHtQTn0gPSAiZGJ1cy0xIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tbGliIgorCitPTERQS0dOQU1FID0gImRidXMteDExIgorT0xEUEtHTkFNRV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCisjIGZvciBjb21wYXRpYmlsaXR5CitSUFJPVklERVNfJHtQTn0gPSAiJHtPTERQS0dOQU1FfSIKK1JSRVBMQUNFU18ke1BOfSArPSAiJHtPTERQS0dOQU1FfSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2RidXMtZGFlbW9uKiBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy11dWlkZ2VuIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLWNsZWFudXAtc29ja2V0cyBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZGJ1cy1zZW5kIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLW1vbml0b3IgXAorICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2RidXMtbGF1bmNoIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9kYnVzLXJ1bi1zZXNzaW9uIFwKKyAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vZGJ1cyogXAorICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3NlcnZpY2VzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyIKK0ZJTEVTXyR7UE59LWxpYiA9ICIke2xpYmRpcn0vbGliKi5zby4qIgorUlJFQ09NTUVORFNfJHtQTn0tbGliID0gIiR7UE59IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZGJ1cy0xLjAvaW5jbHVkZSAke2JpbmRpcn0vZGJ1cy1nbGliLXRvb2wiCisKK3BrZ19wb3N0aW5zdF9kYnVzKCkgeworCSMgSWYgYm90aCBzeXN0ZW1kIGFuZCBzeXN2aW5pdCBhcmUgZW5hYmxlZCwgbWFzayB0aGUgZGJ1cy0xIGluaXQgc2NyaXB0CisgICAgICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kIHN5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgZGJ1cy0xLnNlcnZpY2UKKwlmaQorCisJaWYgWyAteiAiJEQiIF0gJiYgWyAtZSAvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdIDsgdGhlbgorCQkvZXRjL2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwlmaQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUteG1sLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kb3h5Z2VuLWRvY3MgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1saWJhdWRpdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXN5c3RlbWQgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1kYnVzLWdsaWIiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWRpc2FibGUtc2VsaW51eCIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworIyBXb3VsZCBsaWtlIHRvIC0tZW5hYmxlLXN5c3RlbWQgYnV0IHRoYXQncyBhIGNpcmN1bGFyIGJ1aWxkLWRlcGVuZGVuY3kgYmV0d2VlbgorIyBzeXN0ZW1kPC0+ZGJ1cworUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14IC0tZW5hYmxlLXgxMS1hdXRvbGF1bmNoLC0td2l0aG91dC14IC0tZGlzYWJsZS14MTEtYXV0b2xhdW5jaCwgdmlydHVhbC9saWJ4MTEgbGlic20iCisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCQlzZWQgJ3M6QGJpbmRpckA6JHtiaW5kaXJ9OicgPCAke1dPUktESVJ9L2RidXMtMS5pbml0ID4ke1dPUktESVJ9L2RidXMtMS5pbml0LnNoCisJCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RidXMtMS5pbml0LnNoICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kYnVzLTEKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3RydWUnLCAnZmFsc2UnLCBkKX07IHRoZW4KKwkJZm9yIGkgaW4gZGJ1cy50YXJnZXQud2FudHMgc29ja2V0cy50YXJnZXQud2FudHMgbXVsdGktdXNlci50YXJnZXQud2FudHM7IGRvIFwKKwkJCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGk7IGRvbmUKKwkJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vYnVzL2RidXMuc2VydmljZSAke0J9L2J1cy9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJY2QgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZGJ1cy50YXJnZXQud2FudHMvCisJCWxuIC1mcyAuLi9kYnVzLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kYnVzLnRhcmdldC53YW50cy9kYnVzLnNvY2tldAorCQlsbiAtZnMgLi4vZGJ1cy5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc29ja2V0cy50YXJnZXQud2FudHMvZGJ1cy5zb2NrZXQKKwkJbG4gLWZzIC4uL2RidXMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9kYnVzLnNlcnZpY2UKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWVjaG8gImQgbWVzc2FnZWJ1cyBtZXNzYWdlYnVzIDA3NTUgJHtsb2NhbHN0YXRlZGlyfS9ydW4vZGJ1cyBub25lIiBcCisJICAgICA+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk5X2RidXMKKworCisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2RidXMKKworCWNob3duIG1lc3NhZ2VidXM6bWVzc2FnZWJ1cyAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvZGJ1cworCisJY2hvd24gcm9vdDptZXNzYWdlYnVzICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKwljaG1vZCA0NzU1ICR7RH0ke2xpYmV4ZWNkaXJ9L2RidXMtZGFlbW9uLWxhdW5jaC1oZWxwZXIKKworCSMgUmVtb3ZlIFJlZCBIYXQgaW5pdHNjcmlwdAorCXJtIC1yZiAke0R9JHtzeXNjb25mZGlyfS9yYy5kCisKKwkjIFJlbW92ZSBlbXB0eSB0ZXN0ZXhlYyBkaXJlY3RvcnkgYXMgd2UgZG9uJ3QgYnVpbGQgdGVzdHMKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9kYnVzLTEuMC90ZXN0CisKKwkjIFJlbW92ZSAvdmFyL3J1biBhcyBpdCBpcyBjcmVhdGVkIG9uIHN0YXJ0dXAKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIGZvciBkYnVzLWdsaWItbmF0aXZlIGludHJvc3BlY3Rpb24gZ2VuZXJhdGlvbgorCWluc3RhbGwgLWQgJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy8KKwkjIE4uQi4gaXMgYmVsb3cgaW5zdGFsbCBhY3R1YWxseSByZXF1aXJlZD8KKwlpbnN0YWxsIC1tIDA2NDQgYnVzL3Nlc3Npb24uY29uZiAke0R9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9kYnVzL3Nlc3Npb24uY29uZgorCisJIyBkYnVzLWdsaWItbmF0aXZlIGFuZCBkYnVzLWdsaWIgbmVlZCB0aGlzIHhtbCBmaWxlCisJLi9idXMvZGJ1cy1kYWVtb24gLS1pbnRyb3NwZWN0ID4gJHtEfSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZGJ1cy9kYnVzLWJ1cy1pbnRyb3NwZWN0LnhtbAorCQorCSMgZGJ1cy1sYXVuY2ggaGFzIG5vIFggc3VwcG9ydCBzbyBsZXRzIG5vdCBpbnN0YWxsIGl0IGluIGNhc2UgdGhlIGhvc3QKKwkjIGhhcyBhIG1vcmUgZmVhdHVyZWQgYW5kIHVzZWZ1bCB2ZXJzaW9uCisJcm0gLWYgJHtEfSR7YmluZGlyfS9kYnVzLWxhdW5jaAorfQorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJIyBkYnVzLWxhdW5jaCBoYXMgbm8gWCBzdXBwb3J0IHNvIGxldHMgbm90IGluc3RhbGwgaXQgaW4gY2FzZSB0aGUgaG9zdAorCSMgaGFzIGEgbW9yZSBmZWF0dXJlZCBhbmQgdXNlZnVsIHZlcnNpb24KKwlybSAtZiAke0R9JHtiaW5kaXJ9L2RidXMtbGF1bmNoCisKKwkjIFJlbW92ZSAvdmFyL3J1biB0byBhdm9pZCBRQSBlcnJvcgorCXJtIC1yZiAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworSU5TQU5FX1NLSVBfJHtQTn0tcHRlc3QgKz0gImJ1aWxkLWRlcHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvY2xlYXItZ3VpZF9mcm9tX3NlcnZlci1pZi1zZW5kX25lZ290aWF0ZV91bml4X2YucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJiNmQ5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9jbGVhci1ndWlkX2Zyb21fc2VydmVyLWlmLXNlbmRfbmVnb3RpYXRlX3VuaXhfZi5wYXRjaApAQCAtMCwwICsxLDEwNCBAQAorRnJvbSBiOGY4NGJkMzk0ODVkMzk3NzYyNWM5YThiOGU4Y2ZmNWQyM2JlNTZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyNyBGZWIgMjAxNCAwOTowNTowMiArMDgwMAorU3ViamVjdDogW1BBVENIXSBkYnVzOiBjbGVhciBndWlkX2Zyb21fc2VydmVyIGlmIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQKKyBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworYnVzLXRlc3QgZGlzcGF0Y2ggdGVzdCBmYWlsZWQgd2l0aCBiZWxvdyBpbmZvcm1hdGlvbjoKKyAgICAuL2J1cy9idXMtdGVzdDogUnVubmluZyBtZXNzYWdlIGRpc3BhdGNoIHRlc3QKKyAgICBBY3RpdmF0aW5nIHNlcnZpY2UgbmFtZT0nb3JnLmZyZWVkZXNrdG9wLkRCdXMuVGVzdFN1aXRlRWNob1NlcnZpY2UnCisgICAgU3VjY2Vzc2Z1bGx5IGFjdGl2YXRlZCBzZXJ2aWNlICdvcmcuZnJlZWRlc2t0b3AuREJ1cy5UZXN0U3VpdGVFY2hvU2VydmljZScKKyAgICA2MzYzOiBhc3NlcnRpb24gZmFpbGVkICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIgZmlsZSAiZGJ1cy1hdXRoLmMiIGxpbmUgMTU0NSBmdW5jdGlvbiBwcm9jZXNzX29rCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19wcmludF9iYWNrdHJhY2UrMHgyOSkgWzB4ODBjYjk2OV0KKyAgICAgIC4vYnVzL2J1cy10ZXN0KF9kYnVzX2Fib3J0KzB4MTQpIFsweDgwY2ZiNDRdCisgICAgICAuL2J1cy9idXMtdGVzdChfZGJ1c19yZWFsX2Fzc2VydCsweDUzKSBbMHg4MGI1MmMzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGUyNGRhXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfYXV0aF9kb193b3JrKzB4Mzg4KSBbMHg4MGUzODQ4XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFlYTQ5XQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MGFmZmRlXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdHJhbnNwb3J0X2hhbmRsZV93YXRjaCsweGIxKSBbMHg4MGFkODQxXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfY29ubmVjdGlvbl9oYW5kbGVfd2F0Y2grMHgxMDQpIFsweDgwODkxNzRdCisgICAgICAuL2J1cy9idXMtdGVzdChkYnVzX3dhdGNoX2hhbmRsZSsweGQ4KSBbMHg4MGIxNWU4XQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfbG9vcF9pdGVyYXRlKzB4NGE5KSBbMHg4MGQxNTA5XQorICAgICAgLi9idXMvYnVzLXRlc3QoYnVzX3Rlc3RfcnVuX2NsaWVudHNfbG9vcCsweDVkKSBbMHg4MDgxMjlkXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZjYWIwXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZlMGNhXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDZkYTZmXQorICAgICAgLi9idXMvYnVzLXRlc3QoX2RidXNfdGVzdF9vb21faGFuZGxpbmcrMHgxOGMpIFsweDgwYjVjOGNdCisgICAgICAuL2J1cy9idXMtdGVzdCgpIFsweDgwNmY3MjNdCisgICAgICAuL2J1cy9idXMtdGVzdChidXNfZGlzcGF0Y2hfdGVzdCsweDNjKSBbMHg4MDcxYWFjXQorICAgICAgLi9idXMvYnVzLXRlc3QobWFpbisweDFiNykgWzB4ODA1YWNjN10KKyAgICAgIC9saWIvbGliYy5zby42KF9fbGliY19zdGFydF9tYWluKzB4ZjMpIFsweDQ1ZjkxOWIzXQorICAgICAgLi9idXMvYnVzLXRlc3QoKSBbMHg4MDVhZTM5XQorCitUaGUgc3RhY2sgaXMgYmVsb3c6CisgICAgIzAgIDB4ZmZmZmU0MjUgaW4gX19rZXJuZWxfdnN5c2NhbGwgKCkKKyAgICAjMSAgMHg0NWZhNjJkNiBpbiByYWlzZSAoKSBmcm9tIC9saWIvbGliYy5zby42CisgICAgIzIgIDB4NDVmYTk2NTMgaW4gYWJvcnQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgorICAgICMzICAweDA4MGNmYjY1IGluIF9kYnVzX2Fib3J0ICgpIGF0IGRidXMtc3lzZGVwcy5jOjk0CisgICAgIzQgIDB4MDgwYjUyYzMgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj0wLAorICAgICAgICBjb25kaXRpb25fdGV4dD1jb25kaXRpb25fdGV4dEBlbnRyeT0weDgxMTdhMzggIl9kYnVzX3N0cmluZ19nZXRfbGVuZ3RoICgmIERCVVNfQVVUSF9DTElFTlQgKGF1dGgpLT5ndWlkX2Zyb21fc2VydmVyKSA9PSAwIiwKKyAgICAgICAgZmlsZT1maWxlQGVudHJ5PTB4ODExNzI3MyAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NSwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4ODExN2Y4ZSA8X19GVU5DVElPTl9fLjM0OTI+ICJwcm9jZXNzX29rIikKKyAgICAgICAgZGF0YT0weDgxNTcyOTApIGF0IGRidXMtY29ubmVjdGlvbi5jOjE1MTUKKyAgICAjMCAgMHgwMDAwMDAzM2ZlZTM1M2U5IGluIHJhaXNlICgpIGZyb20gL2xpYjY0L2xpYmMuc28uNgorICAgICMxICAweDAwMDAwMDMzZmVlMzg1MDggaW4gYWJvcnQgKCkgZnJvbSAvbGliNjQvbGliYy5zby42CisgICAgIzIgIDB4MDAwMDAwMDAwMDQ3ZDU4NSBpbiBfZGJ1c19hYm9ydCAoKSBhdCBkYnVzLXN5c2RlcHMuYzo5NAorICAgICMzICAweDAwMDAwMDAwMDA0NjY0ODYgaW4gX2RidXNfcmVhbF9hc3NlcnQgKGNvbmRpdGlvbj08b3B0aW1pemVkIG91dD4sCisgICAgICAgIGNvbmRpdGlvbl90ZXh0PWNvbmRpdGlvbl90ZXh0QGVudHJ5PTB4NGMyOTg4ICJfZGJ1c19zdHJpbmdfZ2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlcikgPT0gMCIsCisgICAgICAgIGZpbGU9ZmlsZUBlbnRyeT0weDRjMjFhNSAiZGJ1cy1hdXRoLmMiLCBsaW5lPWxpbmVAZW50cnk9MTU0NiwKKyAgICAgICAgZnVuYz1mdW5jQGVudHJ5PTB4NGMyZmNlIDxfX0ZVTkNUSU9OX18uMzg0NT4gInByb2Nlc3Nfb2siKQorICAgICAgICBhdCBkYnVzLWludGVybmFscy5jOjkzMQorICAgICM0ICAweDAwMDAwMDAwMDA0OGQ0MjQgaW4gcHJvY2Vzc19vayAoYXJnc19mcm9tX29rPTB4N2ZmZmZmZmZlNDgwLAorICAgICAgICBhdXRoPTB4NmZmMzQwKSBhdCBkYnVzLWF1dGguYzoxNTQ2CisgICAgIzUgIGhhbmRsZV9jbGllbnRfc3RhdGVfd2FpdGluZ19mb3JfZGF0YSAoYXV0aD0weDZmZjM0MCwKKyAgICAgICAgY29tbWFuZD08b3B0aW1pemVkIG91dD4sIGFyZ3M9MHg3ZmZmZmZmZmU0ODApIGF0IGRidXMtYXV0aC5jOjE5OTYKKyAgICAjNiAgMHgwMDAwMDAwMDAwNDhlNzg5IGluIHByb2Nlc3NfY29tbWFuZCAoYXV0aD0weDZmZjM0MCkgYXQgZGJ1cy1hdXRoLmM6MjIwOAorICAgICM3ICBfZGJ1c19hdXRoX2RvX3dvcmsgKGF1dGg9MHg2ZmYzNDApIGF0IGRidXMtYXV0aC5jOjI0NTgKKyAgICAjOCAgMHgwMDAwMDAwMDAwNDYwOTFkIGluIGRvX2F1dGhlbnRpY2F0aW9uICgKKyAgICAgICAgdHJhbnNwb3J0PXRyYW5zcG9ydEBlbnRyeT0weDZmZmFhMCwgZG9fcmVhZGluZz1kb19yZWFkaW5nQGVudHJ5PTEsCisgICAgICAgIGRvX3dyaXRpbmc9ZG9fd3JpdGluZ0BlbnRyeT0wLAorICAgICAgICBhdXRoX2NvbXBsZXRlZD1hdXRoX2NvbXBsZXRlZEBlbnRyeT0weDdmZmZmZmZmZTU1YykKKyAgICAgICAgYXQgZGJ1cy10cmFuc3BvcnQtc29ja2V0LmM6NDQyCisgICAgIzkgIDB4MDAwMDAwMDAwMDQ2MWQwOCBpbiBzb2NrZXRfaGFuZGxlX3dhdGNoICh0cmFuc3BvcnQ9MHg2ZmZhYTAsCisgICAgICAgIHdhdGNoPTB4NmY0MTkwLCBmbGFncz0xKSBhdCBkYnVzLXRyYW5zcG9ydC1zb2NrZXQuYzo5MjEKKyAgICAjMTAgMHgwMDAwMDAwMDAwNDVmYTNhIGluIF9kYnVzX3RyYW5zcG9ydF9oYW5kbGVfd2F0Y2ggKHRyYW5zcG9ydD0weDZmZmFhMCwKKworT25jZSBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZCwgdGhpcyBmYWlsdXJlIHdpbGwgaGFwcGVuLCBzaW5jZQorYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBoYXMgYmVlbiBzZXQgdG8gc29tZSB2YWx1ZSBiZWZvcmUKK3NlbmRfbmVnb3RpYXRlX3VuaXhfZmQuIHNlbmRfbmVnb3RpYXRlX3VuaXhfZmQgZmFpbHVyZSB3aWxsIGxlYWQgdG8KK3RoaXMgYXV0aCBiZSBoYW5kbGVkIGJ5IHByb2Nlc3Nfb2sgYWdhaW4sIGJ1dCB0aGlzIGF1dGgtPmd1aWRfZnJvbV9zZXJ2ZXIKK2lzIG5vdCB6ZXJvLgorCitTbyB3ZSBzaG91bGQgY2xlYXIgYXV0aC0+Z3VpZF9mcm9tX3NlcnZlciBpZiBzZW5kX25lZ290aWF0ZV91bml4X2ZkIGZhaWxlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBkYnVzL2RidXMtYXV0aC5jIHwgICAgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGJ1cy9kYnVzLWF1dGguYyBiL2RidXMvZGJ1cy1hdXRoLmMKK2luZGV4IGQyYzM3YTcuLjM3YjQ1YzYgMTAwNjQ0CistLS0gYS9kYnVzL2RidXMtYXV0aC5jCisrKysgYi9kYnVzL2RidXMtYXV0aC5jCitAQCAtMTU3MSw4ICsxNTcxLDEzIEBAIHByb2Nlc3Nfb2soREJ1c0F1dGggKmF1dGgsCisgICBfZGJ1c192ZXJib3NlICgiR290IEdVSUQgJyVzJyBmcm9tIHRoZSBzZXJ2ZXJcbiIsCisgICAgICAgICAgICAgICAgICBfZGJ1c19zdHJpbmdfZ2V0X2NvbnN0X2RhdGEgKCYgREJVU19BVVRIX0NMSUVOVCAoYXV0aCktPmd1aWRfZnJvbV9zZXJ2ZXIpKTsKKyAKKy0gIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKQorLSAgICByZXR1cm4gc2VuZF9uZWdvdGlhdGVfdW5peF9mZChhdXRoKTsKKysgIGlmIChhdXRoLT51bml4X2ZkX3Bvc3NpYmxlKSB7CisrICAgICBpZiAoIXNlbmRfbmVnb3RpYXRlX3VuaXhfZmQoYXV0aCkpIHsKKysgICAgICAgICBfZGJ1c19zdHJpbmdfc2V0X2xlbmd0aCAoJiBEQlVTX0FVVEhfQ0xJRU5UIChhdXRoKS0+Z3VpZF9mcm9tX3NlcnZlciwgMCk7CisrICAgICAgICAgcmV0dXJuIEZBTFNFOworKyAgICAgfQorKyAgICAgcmV0dXJuIFRSVUU7CisrICB9CisgCisgICBfZGJ1c192ZXJib3NlKCJOb3QgbmVnb3RpYXRpbmcgdW5peCBmZCBwYXNzaW5nLCBzaW5jZSBub3QgcG9zc2libGVcbiIpOworICAgcmV0dXJuIHNlbmRfYmVnaW4gKGF1dGgpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvZGJ1cy0xLmluaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvZGJ1cy0xLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjODYyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9kYnVzLTEuaW5pdApAQCAtMCwwICsxLDEyMyBAQAorIyEgL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgZGJ1cworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IEQtQnVzIHN5c3RlbXdpZGUgbWVzc2FnZSBidXMKKyMgRGVzY3JpcHRpb246ICAgICAgIEQtQnVzIGlzIGEgc2ltcGxlIGludGVycHJvY2VzcyBtZXNzYWdpbmcgc3lzdGVtLCB1c2VkCisjICAgICAgICAgICAgICAgICAgICBmb3Igc2VuZGluZyBtZXNzYWdlcyBiZXR3ZWVuIGFwcGxpY2F0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorIyBEZWJpYW4gaW5pdC5kIHNjcmlwdCBmb3IgRC1CVVMKKyMgQ29weXJpZ2h0IMKpIDIwMDMgQ29saW4gV2FsdGVycyA8d2FsdGVyc0BkZWJpYW4ub3JnPgorCisjIHNldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworREFFTU9OPUBiaW5kaXJAL2RidXMtZGFlbW9uCitOQU1FPWRidXMKK0RBRU1PTlVTRVI9bWVzc2FnZWJ1cyAgICAgICAgICAgIyBtdXN0IG1hdGNoIC9ldGMvZGJ1cy0xL3N5c3RlbS5jb25mCitQSURGSUxFPS92YXIvcnVuL21lc3NhZ2VidXMucGlkICMgbXVzdCBtYXRjaCAvZXRjL2RidXMtMS9zeXN0ZW0uY29uZgorVVVJRERJUj0vdmFyL2xpYi9kYnVzCitERVNDPSJzeXN0ZW0gbWVzc2FnZSBidXMiCitFVkVOVERJUj0vZXRjL2RidXMtMS9ldmVudC5kCisKK3Rlc3QgLXggJERBRU1PTiB8fCBleGl0IDAKKworIyBTb3VyY2UgZGVmYXVsdHMgZmlsZTsgZWRpdCB0aGF0IGZpbGUgdG8gY29uZmlndXJlIHRoaXMgc2NyaXB0LgorRU5BQkxFRD0xCitQQVJBTVM9IiIKK2lmIFsgLWUgL2V0Yy9kZWZhdWx0L2RidXMgXTsgdGhlbgorICAuIC9ldGMvZGVmYXVsdC9kYnVzCitmaQorCit0ZXN0ICIkRU5BQkxFRCIgIT0gIjAiIHx8IGV4aXQgMAorCitzdGFydF9pdF91cCgpCit7CisgIG1rZGlyIC1wICJgZGlybmFtZSAkUElERklMRWAiCisgIGlmIFsgLWUgJFBJREZJTEUgXTsgdGhlbgorICAgIFBJRERJUj0vcHJvYy8kKGNhdCAkUElERklMRSkKKyAgICBpZiBbIC1kICR7UElERElSfSAtYSAgIiQocmVhZGxpbmsgLWYgJHtQSURESVJ9L2V4ZSkiID0gIiR7REFFTU9OfSIgXTsgdGhlbiAKKyAgICAgIGVjaG8gIiRERVNDIGFscmVhZHkgc3RhcnRlZDsgbm90IHN0YXJ0aW5nLiIKKyAgICBlbHNlCisgICAgICBlY2hvICJSZW1vdmluZyBzdGFsZSBQSUQgZmlsZSAkUElERklMRS4iCisgICAgICBybSAtZiAkUElERklMRQorICAgIGZpCisgIGZpCisKKyAgaWYgWyAhIC1kICRVVUlERElSIF07IHRoZW4KKyAgICBta2RpciAtcCAkVVVJRERJUgorICAgIGNob3duICREQUVNT05VU0VSICRVVUlERElSCisgICAgY2hncnAgJERBRU1PTlVTRVIgJFVVSURESVIKKyAgZmkKKyAKKyAgZGJ1cy11dWlkZ2VuIC0tZW5zdXJlICAKKworICBlY2hvIC1uICJTdGFydGluZyAkREVTQzogIgorICBzdGFydC1zdG9wLWRhZW1vbiAtbyAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRQSURGSUxFIFwKKyAgICAtLXVzZXIgJERBRU1PTlVTRVIgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIGlmIFsgLWQgJEVWRU5URElSIF07IHRoZW4KKyAgICAgIHJ1bi1wYXJ0cyAtLWFyZz1zdGFydCAkRVZFTlRESVIKKyAgZmkKK30KKworc2h1dF9pdF9kb3duKCkKK3sKKyAgaWYgWyAtZCAkRVZFTlRESVIgXTsgdGhlbgorICAgICAgIyBUT0RPOiAtLXJldmVyc2Ugd2hlbiBidXN5Ym94IHN1cHBvcnRzIGl0CisgICAgICBydW4tcGFydHMgLS1hcmc9c3RvcCAkRVZFTlRESVIKKyAgZmkKKyAgZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKyAgc3RhcnQtc3RvcC1kYWVtb24gLW8gLS1zdG9wICAtLXF1aWV0IC0tcGlkZmlsZSAkUElERklMRSBcCisgICAgLS11c2VyICREQUVNT05VU0VSCisgICMgV2Ugbm8gbG9uZ2VyIGluY2x1ZGUgdGhlc2UgYXJndW1lbnRzIHNvIHRoYXQgc3RhcnQtc3RvcC1kYWVtb24KKyAgIyBjYW4gZG8gaXRzIGpvYiBldmVuIGdpdmVuIHRoYXQgd2UgbWF5IGhhdmUgYmVlbiB1cGdyYWRlZC4KKyAgIyBXZSByZWx5IG9uIHRoZSBwaWRmaWxlIGJlaW5nIHNhbmVseSBtYW5hZ2VkCisgICMgLS1leGVjICREQUVNT04gLS0gLS1zeXN0ZW0gJFBBUkFNUworICBlY2hvICIkTkFNRS4iCisgIHJtIC1mICRQSURGSUxFCit9CisKK3JlbG9hZF9pdCgpCit7CisgIGVjaG8gLW4gIlJlbG9hZGluZyAkREVTQyBjb25maWc6ICIKKyAgZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1zeXN0ZW0gLS10eXBlPW1ldGhvZF9jYWxsIFwKKyAgICAgICAgICAgIC0tZGVzdD1vcmcuZnJlZWRlc2t0b3AuREJ1cyBcCisgICAgICAgICAgICAvIG9yZy5mcmVlZGVza3RvcC5EQnVzLlJlbG9hZENvbmZpZyA+IC9kZXYvbnVsbAorICAjIGhvcGVmdWxseSB0aGlzIGlzIGVub3VnaCB0aW1lIGZvciBkYnVzIHRvIHJlbG9hZCBpdCdzIGNvbmZpZyBmaWxlLgorICBlY2hvICJkb25lLiIKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgIHN0YXJ0X2l0X3VwCisgIDs7CisgIHN0b3ApCisgICAgc2h1dF9pdF9kb3duCisgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgJERBRU1PTgorICAgIGV4aXQgJD8KKyAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICByZWxvYWRfaXQKKyAgOzsKKyAgcmVzdGFydCkKKyAgICBzaHV0X2l0X2Rvd24KKyAgICBzbGVlcCAxCisgICAgc3RhcnRfaXRfdXAKKyAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogL2V0Yy9pbml0LmQvJE5BTUUge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8cmVsb2FkfGZvcmNlLXJlbG9hZH0iID4mMgorICAgIGV4aXQgMQorICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL29zLXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRjMjU3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9vcy10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK2RidXM6IHJlbW92ZSBidWlsZCBob3N0IHRlc3QgaW4gY29uZmlndXJlIHNjcmlwdAorCitUaGUgZGJ1cyBidWlsZCB0ZXN0cyB0aGUgYnVpbGQgaG9zdCB0byBkZXRlY3Qgd2hhdCBpbml0c2NyaXB0CitlbnZpcm9ubWVudCBpdCBleHBlY3RzLiAgUmVtb3ZlIHRoZSB0ZXN0IGFuZCBzZXQgaXQgdG8gInJlZGhhdCIKK3VuY29uZGl0aW9uYWxseSBhcyB0aGUgb2UtY29yZSBpbml0c2NyaXB0IGhhcyBhIHJlZGhhdC1zdHlsZSBwaWQgZmlsZQorcGF0aC4KKworU2lnbmVkLW9mZi1ieTogQW5keSBSb3NzIDxhbmR5LnJvc3NAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWRdCisKK2RpZmYgLXUgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDEyLTA4LTI4IDExOjIzOjQzLjA0MDYwOTg3NCAtMDcwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTItMDgtMjggMTE6NTQ6MjUuNjAyOTEzOTQ1IC0wNzAwCitAQCAtMTM0OCwxOSArMTM0OCw4IEBACisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0xJQkVYRUNESVIsICIkbGliZXhlY2RpciIpCisgQVNfQUNfRVhQQU5EKEVYUEFOREVEX0RBVEFESVIsICIkZGF0YWRpciIpCisgCistIyMjIyBDaGVjayBvdXIgb3BlcmF0aW5nIHN5c3RlbQorLW9wZXJhdGluZ19zeXN0ZW09dW5rbm93bgorLWlmIHRlc3QgLWYgL2V0Yy9yZWRoYXQtcmVsZWFzZSB8fCB0ZXN0IC1mICRFWFBBTkRFRF9TWVNDT05GRElSL3JlZGhhdC1yZWxlYXNlIDsgdGhlbgorLSAgIG9wZXJhdGluZ19zeXN0ZW09cmVkaGF0CistZmkKKy0KKy1pZiB0ZXN0IC1mIC9ldGMvc2xhY2t3YXJlLXZlcnNpb24gfHwgdGVzdCAtZiAkRVhQQU5ERURfU1lTQ09ORkRJUi9zbGFja3dhcmUtdmVyc2lvbiA7IHRoZW4KKy0gICBvcGVyYXRpbmdfc3lzdGVtPXNsYWNrd2FyZQorLWZpCistCistaWYgdGVzdCAtZiAvdXNyL2Jpbi9jeWd3aW4xLmRsbCB8fCB0ZXN0IC1mICRFWFBBTkRFRF9CSU5ESVIvY3lnd2luMS5kbGwgOyB0aGVuCistICAgb3BlcmF0aW5nX3N5c3RlbT1jeWd3aW4KKy1maQorKyMjIyMgQnVpbGQgaG9zdCB0ZXN0IHJlbW92ZWQgZnJvbSB1cHN0cmVhbSBjb2RlLCBvcGVuZW1iZWRkZWQgaW5pdHNjcmlwdCBpcyByZWRoYXQtbGlrZToKKytvcGVyYXRpbmdfc3lzdGVtPXJlZGhhdAorIAorICMjIyMgU29ydCBvdXQgaW5pdCBzY3JpcHRzCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9weXRob24tY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDQwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcHl0aG9uLWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIGJ1aWxkaW5nIHRoZSBkYnVzLXB0ZXN0IHBhY2thZ2UsIHdlIGhhdmUgdG8gZW5hYmxlIHB5dGhvbi4gIEhvd2V2ZXIKK2NoZWNraW5nIGlmIHRoZSBob3N0LXN5c3RlbSBweXRob24gaGFzIHRoZSBuZWNlc3NhcnkgbGlicmFyeSBpc24ndCB1c2VmdWwuCisKK0Rpc2FibGUgdGhlIHB5dGhvbiBtb2R1bGUgY2hlY2sgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gZGJ1cy0xLjYuOC9jb25maWd1cmUuYWMub3JpZwkyMDEzLTA3LTExIDE0OjE1OjU4LjgzNDU1NDc5OSAtMDUwMAorKysrIGRidXMtMS42LjgvY29uZmlndXJlLmFjCTIwMTMtMDctMTEgMTQ6MTQ6NDAuOTY5NTU0ODQ4IC0wNTAwCitAQCAtMjU3LDEzICsyNTcsNiBAQAorICAgIyBmdWxsIHRlc3QgY292ZXJhZ2UgaXMgcmVxdWlyZWQsIFB5dGhvbiBpcyBhIGhhcmQgZGVwZW5kZW5jeQorICAgQUNfTVNHX05PVElDRShbRnVsbCB0ZXN0IGNvdmVyYWdlICgtLWVuYWJsZS10ZXN0cz15ZXMpIHJlcXVpcmVzIFB5dGhvbiwgZGJ1cy1weXRob24sIHB5Z29iamVjdF0pCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSkKKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIFB5dGhvbiBtb2R1bGVzIGZvciBmdWxsIHRlc3QgY292ZXJhZ2VdKQorLSAgaWYgIiRQWVRIT04iIC1jICJpbXBvcnQgZGJ1cywgZ29iamVjdCwgZGJ1cy5tYWlubG9vcC5nbGliIjsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIEFDX01TR19FUlJPUihbY2Fubm90IGltcG9ydCBkYnVzLCBnb2JqZWN0LCBkYnVzLm1haW5sb29wLmdsaWIgUHl0aG9uIG1vZHVsZXNdKQorLSAgZmkKKyBlbHNlCisgICAjIC0tZW5hYmxlLXRlc3RzIG5vdCBnaXZlbjogZG8gbm90IGFib3J0IGlmIFB5dGhvbiBpcyBtaXNzaW5nCisgICBBTV9QQVRIX1BZVEhPTihbMi42XSwgW10sIFs6XSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2RidXMvZGJ1cy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MmQwODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitvdXRwdXQoKSB7CisgIGlmIFsgJD8gLWVxIDAgXQorICAgIHRoZW4gZWNobyAiUEFTUzogJGkiCisgICAgZWxzZSBlY2hvICJGQUlMOiAkaSIKKyAgZmkKK30KKworZm9yIGkgaW4gYGxzIHRlc3QvdGVzdC0qYDsgZG8gLi8kaSAuL3Rlc3QvZGF0YSBEQlVTX1RFU1RfSE9NRURJUj0uL3Rlc3QgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXMvdG1wZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3RtcGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjA4NmUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzL3RtcGRpci5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIDUxMDVmZWRkN2ZhMTNkYWRkMmQwZDg2NGZiNzc4NzNiODNiNzlhNGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVGh1LCAyMyBKdW4gMjAxMSAxMzo1MjowOSArMDIwMAorU3ViamVjdDogW1BBVENIXSBidWlsZHN5czogaGFyZGNvZGUgc29ja2V0ZGlyIHRvIC90bXAKKwordGhlIFRNUERJUiBlbnYgdmFyIGlzbid0IGFsd2F5cyBwb2ludGluZyB0byB0aGUgcmlnaHQgdGFyZ2V0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KKworT3JpZ2luYWwgY29tbWVudDoKKworCWF2b2lkIHRvIGNoZWNrIHRtcCBkaXIgYXQgYnVpbGQgdGltZS4gaW5zdGVhZCB1c2VzIGhhcmQgY29kZWQgL3RtcCBoZXJlCisJY29tbWVudCBhZGRlZCBieSBLZXZpbiBUaWFuIDxrZXZpbi50aWFuQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMTEgKy0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQwODA1NGIuLjZkMjYxODAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0ODMsMTYgKzE0ODMsNyBAQCBBQ19TVUJTVChURVNUX0xBVU5DSF9IRUxQRVJfQklOQVJZKQorIEFDX0RFRklORV9VTlFVT1RFRChEQlVTX1RFU1RfTEFVTkNIX0hFTFBFUl9CSU5BUlksICIkVEVTVF9MQVVOQ0hfSEVMUEVSX0JJTkFSWSIsCisgICAgICAgICAgICAgICAgICAgIFtGdWxsIHBhdGggdG8gdGhlIGxhdW5jaCBoZWxwZXIgdGVzdCBwcm9ncmFtIGluIHRoZSBidWlsZGRpcl0pCisgCistIyMjIyBGaW5kIHNvY2tldCBkaXJlY3RvcmllcworLWlmICEgdGVzdCAteiAiJFRNUERJUiIgOyB0aGVuCistICAgREVGQVVMVF9TT0NLRVRfRElSPSRUTVBESVIKKy1lbGlmICEgdGVzdCAteiAiJFRFTVAiIDsgdGhlbgorLSAgIERFRkFVTFRfU09DS0VUX0RJUj0kVEVNUAorLWVsaWYgISB0ZXN0IC16ICIkVE1QIiA7IHRoZW4KKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9JFRNUAorLWVsc2UKKy0gICBERUZBVUxUX1NPQ0tFVF9ESVI9L3RtcAorLWZpCisrREVGQVVMVF9TT0NLRVRfRElSPS90bXAKKyAKKyBERUZBVUxUX1NPQ0tFVF9ESVI9YGVjaG8gJERFRkFVTFRfU09DS0VUX0RJUiB8IHNlZCAncy8rLyUyQi9nJ2AKKyAKKy0tIAorMS42LjYuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kYnVzL2RidXNfMS44LjIwLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuOC4yMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGYyMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZGJ1cy9kYnVzXzEuOC4yMC5iYgpAQCAtMCwwICsxLDQgQEAKK2luY2x1ZGUgZGJ1cy5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImI0OTg5MGJiYWJlZGFiM2ExYzNmNGY3M2M3ZmY4YjJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjNGZiZjRjNjQ2MjFjOTZlODcxZGE5MWQyYjcyOWE1YjAwNTM2ZTExNmQzYzQ2MTJhNDY5ZDkyNGIxYjcwM2EiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjNzM2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLmluYwpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJBIGxpZ2h0d2VpZ2h0IFNTSCBhbmQgU0NQIGltcGxlbWVudGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgc29tZSBmaWxlcyBhcmUgZnJvbSBvdGhlciBwcm9qZWN0cyBhbmQgaGF2ZSBvdGhlcnMgbGljZW5zZSB0ZXJtczoKKyMgICBwdWJsaWMgZG9tYWluLCBPcGVuU1NIIDMuNXAxLCBPcGVuU1NIMy42LjFwMiwgUHVUVFkKK0xJQ0VOU0UgPSAiTUlUICYgQlNELTMtQ2xhdXNlICYgQlNELTItQ2xhdXNlICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNWVjNDBjYWZiYTI2ZmM0Mzk2ZDBiNTUwZjgyNGUwMSIKKworREVQRU5EUyA9ICJ6bGliIgorUlBST1ZJREVTXyR7UE59ID0gInNzaCBzc2hkIiAKKworREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworU1JDX1VSSSA9ICJodHRwOi8vbWF0dC51Y2MuYXNuLmF1L2Ryb3BiZWFyL3JlbGVhc2VzL2Ryb3BiZWFyLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctZHJvcGJlYXItZml4LWZvci14MzItYWJpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXJrZXkuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhckAuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9kcm9wYmVhci5zb2NrZXQgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gIgorCitQQU1fU1JDX1VSSSA9ICJmaWxlOi8vMDAwNS1kcm9wYmVhci1lbmFibGUtcGFtLnBhdGNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vZHJvcGJlYXIiCisKK1BBTV9QTFVHSU5TID0gImxpYnBhbS1ydW50aW1lIFwKKwlwYW0tcGx1Z2luLWRlbnkgXAorCXBhbS1wbHVnaW4tcGVybWl0IFwKKwlwYW0tcGx1Z2luLXVuaXggXAorCSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9QTFVHSU5TfScsICcnLCBkKX0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1yYy5kIHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImRyb3BiZWFyIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgMTAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJkcm9wYmVhci5zb2NrZXQiCisKK0NGTEFHU19wcmVwZW5kID0gIiAtSS4gIgorTEQgPSAiJHtDQ30iCisKK1NCSU5DT01NQU5EUyA9ICJkcm9wYmVhciBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQiCitCSU5DT01NQU5EUyA9ICJkYmNsaWVudCBzc2ggc2NwIgorRVhUUkFfT0VNQUtFID0gJ01VTFRJPTEgU0NQUFJPR1JFU1M9MSBQUk9HUkFNUz0iJHtTQklOQ09NTUFORFN9ICR7QklOQ09NTUFORFN9IicKK0VYVFJBX09FQ09ORiArPSAiXAorICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJy0tZW5hYmxlLXBhbScsICctLWRpc2FibGUtcGFtJywgZCl9IgorQ0ZMQUdTICs9ICItRFNGVFBTRVJWRVJfUEFUSD1cXCIke2xpYmRpcn0vb3BlbnNzaC9zZnRwLXNlcnZlclxcIiIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdCBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L2Ryb3BiZWFyIFwKKwkJJHtEfSR7YmluZGlyfSBcCisJCSR7RH0ke3NiaW5kaXJ9IFwKKwkJJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKworCWluc3RhbGwgLW0gMDc1NSBkcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LworCWxuIC1zICR7c2JpbmRpcn0vZHJvcGJlYXJtdWx0aSAke0R9JHtiaW5kaXJ9L2RiY2xpZW50CisJCisJZm9yIGkgaW4gJHtTQklOQ09NTUFORFN9CisJZG8KKwkJbG4gLXMgLi9kcm9wYmVhcm11bHRpICR7RH0ke3NiaW5kaXJ9LyRpCisJZG9uZQorCXNlZCAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncywvdXNyL3NiaW4sJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLC92YXIsJHtsb2NhbHN0YXRlZGlyfSxnJyBcCisJCS1lICdzLC91c3IvYmluLCR7YmluZGlyfSxnJyBcCisJCS1lICdzLC91c3IsJHtwcmVmaXh9LGcnICR7V09SS0RJUn0vaW5pdCA+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9kcm9wYmVhcgorCWNobW9kIDc1NSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZHJvcGJlYXIKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZAorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhciAgJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvCisJZmkKKworCSMgZGVhbCB3aXRoIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhcmtleS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vZHJvcGJlYXJALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kcm9wYmVhci5zb2NrZXQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCS1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHJvcGJlYXIuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMjAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzY3Agc3NoIgorCitBTFRFUk5BVElWRV9UQVJHRVQgPSAiJHtzYmluZGlyfS9kcm9wYmVhcm11bHRpIgorCitwa2dfcG9zdHJtX2FwcGVuZF8ke1BOfSAoKSB7CisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisgIGZpCisgIGlmIFsgLWYgIiR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IiBdOyB0aGVuCisgICAgICAgIHJtICR7c3lzY29uZmRpcn0vZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5CisgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDAxLXVyYW5kb20teGF1dGgtY2hhbmdlcy10by1vcHRpb25zLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5ZDU3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDEtdXJhbmRvbS14YXV0aC1jaGFuZ2VzLXRvLW9wdGlvbnMuaC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitTdWJqZWN0OiBbUEFUQ0ggMS82XSB1cmFuZG9tLXhhdXRoLWNoYW5nZXMtdG8tb3B0aW9ucy5oCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG9wdGlvbnMuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29wdGlvbnMuaCBiL29wdGlvbnMuaAoraW5kZXggN2QwNjMyMi4uNzFhMjFjMiAxMDA2NDQKKy0tLSBhL29wdGlvbnMuaAorKysrIGIvb3B0aW9ucy5oCitAQCAtMjQ3LDcgKzI0Nyw3IEBAIG11Y2ggdHJhZmZpYy4gKi8KKyAvKiBUaGUgY29tbWFuZCB0byBpbnZva2UgZm9yIHhhdXRoIHdoZW4gdXNpbmcgWDExIGZvcndhcmRpbmcuCisgICogIi1xIiBmb3IgcXVpZXQgKi8KKyAjaWZuZGVmIFhBVVRIX0NPTU1BTkQKKy0jZGVmaW5lIFhBVVRIX0NPTU1BTkQgIi91c3IvYmluL3hhdXRoIC1xIgorKyNkZWZpbmUgWEFVVEhfQ09NTUFORCAieGF1dGggLXEiCisgI2VuZGlmCisgCisgLyogaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bm5pbmcgYW4gc2Z0cCBzZXJ2ZXIgKHN1Y2ggYXMgdGhlIG9uZSBpbmNsdWRlZCB3aXRoCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwMy1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzYWIwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDMtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYzVmNWM1MDU0YzFiMTU1MzlkY2NmODY2ZTJjM2ZhYmE3ZWQ2ODQ1NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9FcmljPTIwQj1DMz1BOW5hcmQ/PSA8ZXJpY0BldWtyZWEuY29tPgorRGF0ZTogVGh1LCAyNSBBcHIgMjAxMyAwMDoyNzoyNSArMDIwMAorU3ViamVjdDogW1BBVENIIDMvNl0gY29uZmlndXJlOiBhZGQgYSB2YXJpYWJsZSB0byBhbGxvdyBvcGVucHR5IGNoZWNrIHRvIGJlIGNhY2hlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgY29uZmlndXJlLmFjIHwgMTEgKysrKysrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwNTQ2MWYzLi45YzE2ZDkwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNjYsMTUgKzE2NiwyMCBAQCBBQ19BUkdfRU5BQkxFKG9wZW5wdHksCisgCQkJQUNfTVNHX05PVElDRShOb3QgdXNpbmcgb3BlbnB0eSkKKyAJCWVsc2UKKyAJCQlBQ19NU0dfTk9USUNFKFVzaW5nIG9wZW5wdHkgaWYgYXZhaWxhYmxlKQorLQkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZLCxIYXZlIG9wZW5wdHkoKSBmdW5jdGlvbildKQorKwkJCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtkcm9wYmVhcl9jdl9mdW5jX2hhdmVfb3BlbnB0eT15ZXNdKQorIAkJZmkKKyAJXSwKKyAJWworIAkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKKy0JCUFDX1NFQVJDSF9MSUJTKG9wZW5wdHksIHV0aWwsIFtBQ19ERUZJTkUoSEFWRV9PUEVOUFRZKV0pCisrCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHk9eWVzXSkKKyAJXQorICkKKy0JCQorKworK2lmIHRlc3QgIngkZHJvcGJlYXJfY3ZfZnVuY19oYXZlX29wZW5wdHkiID0gInh5ZXMiOyB0aGVuCisrCUFDX0RFRklORShIQVZFX09QRU5QVFksLEhhdmUgb3BlbnB0eSgpIGZ1bmN0aW9uKQorKwlub19wdGNfY2hlY2s9eWVzCisrCW5vX3B0bXhfY2hlY2s9eWVzCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKHN5c2xvZywKKyAJWyAgLS1kaXNhYmxlLXN5c2xvZyAgICAgICAgRG9uJ3QgaW5jbHVkZSBzeXNsb2cgc3VwcG9ydF0sCistLSAKKzEuNy4xMS43CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNC1maXgtMmtiLWtleXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzOWQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDQtZml4LTJrYi1rZXlzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1N1YmplY3Q6IFtQQVRDSCA0LzZdIGZpeCAya2Iga2V5cworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBrZXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2tleC5oIGIva2V4LmgKK2luZGV4IDcyNDMwZTkuLjM3NWM2NzcgMTAwNjQ0CistLS0gYS9rZXguaAorKysrIGIva2V4LmgKK0BAIC02Nyw2ICs2Nyw2IEBAIHN0cnVjdCBLRVhTdGF0ZSB7CisgfTsKKyAKKyAKKy0jZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDIwMDAKKysjZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDMwMDAKKyAKKyAjZW5kaWYgLyogX0tFWF9IXyAqLworLS0gCisxLjcuMTEuNworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA1LWRyb3BiZWFyLWVuYWJsZS1wYW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwOGM1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyLzAwMDUtZHJvcGJlYXItZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI4IEBACitTdWJqZWN0OiBbUEFUQ0ggNS82XSBkcm9wYmVhciBlbmFibGUgcGFtCisKK2Ryb3BiZWFyOiBXZSBuZWVkIG1vZGlmeSBmaWxlIG9wdGlvbi5oIGJlc2lkZXMgZW5hYmxpbmcgcGFtIGluIFwKK2NvbmZpZ3VyZSBpZiB3ZSB3YW50IGRyb3BiZWFyIHRvIHN1cHBvcnQgcGFtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIG9wdGlvbnMuaCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRyb3BiZWFyLTIwMTMuNjIub3JpZy9vcHRpb25zLmgJMjAxNC0wMS0xNCAyMTo1MzowMi44MDMyNjIwMDkgKzAwMDAKKysrKyBkcm9wYmVhci0yMDEzLjYyL29wdGlvbnMuaAkyMDE0LTAxLTE0IDIxOjUzOjU2LjExOTI2MzQ2MiArMDAwMAorQEAgLTE5Miw5ICsxOTIsOSBAQAorICAqIFBBTSBjaGFsbGVuZ2UvcmVzcG9uc2UuCisgICogWW91IGNhbid0IGVuYWJsZSBib3RoIFBBU1NXT1JEIGFuZCBQQU0uICovCisgCistI2RlZmluZSBFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgKKysvKiNkZWZpbmUgRU5BQkxFX1NWUl9QQVNTV09SRF9BVVRIKi8KKyAvKiBQQU0gcmVxdWlyZXMgLi9jb25maWd1cmUgLS1lbmFibGUtcGFtICovCistLyojZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEggKi8KKysjZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEgKKyAjZGVmaW5lIEVOQUJMRV9TVlJfUFVCS0VZX0FVVEgKKyAKKyAvKiBXaGV0aGVyIHRvIHRha2UgcHVibGljIGtleSBvcHRpb25zIGluIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA2LWRyb3BiZWFyLWNvbmZpZ3VyYXRpb24tZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTRjOGQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNi1kcm9wYmVhci1jb25maWd1cmF0aW9uLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorU3ViamVjdDogW1BBVENIIDYvNl0gZHJvcGJlYXIgY29uZmlndXJhdGlvbiBmaWxlCisKK2Ryb3BiZWFyOiBDaGFuZ2UgdGhlIHBhdGggKCIvZXRjL3BhbS5kL3NzaGQiIGFzIGRlZmF1bHQpIHRvIGZpbmQgYSBwYW0gY29uZmlndXJhdGlvbiBmaWxlIFwKK3RvICIvZXRjL3BhbS5kL2Ryb3BiZWFyIGZvciBkcm9wYmVhciB3aGVuIGVuYWJsaW5nIHBhbSBzdXBwb3J0aW5nIgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBYaWFvZmVuZyBZYW4gPHhpYW9mZW5nLnlhbkB3aW5kcml2ZXIuY29tPgorLS0tCitkaWZmIC1OYXVyIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jIGRyb3BiZWFyLTIwMTMuNjAvc3ZyLWF1dGhwYW0uYworLS0tIGRyb3BiZWFyLTIwMTMuNjAtb3JpZy9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMTYgMTY6MzQ6NTMuMDAwMDAwMDAwICswMjAwCisrKysgZHJvcGJlYXItMjAxMy42MC9zdnItYXV0aHBhbS5jCTIwMTMtMTAtMjEgMTc6MDQ6MDQuOTY5NDE2MDU1ICswMjAwCitAQCAtMjExLDcgKzIxMSw3IEBACisgCXVzZXJEYXRhLnBhc3N3ZCA9IHBhc3N3b3JkOworIAorIAkvKiBJbml0IHBhbSAqLworLQlpZiAoKHJjID0gcGFtX3N0YXJ0KCJzc2hkIiwgTlVMTCwgJnBhbUNvbnYsICZwYW1IYW5kbGVwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJaWYgKChyYyA9IHBhbV9zdGFydCgiZHJvcGJlYXIiLCBOVUxMLCAmcGFtQ29udiwgJnBhbUhhbmRsZXApKSAhPSBQQU1fU1VDQ0VTUykgeworIAkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAicGFtX3N0YXJ0KCkgZmFpbGVkLCByYz0lZCwgJXMiLCAKKyAJCQkJcmMsIHBhbV9zdHJlcnJvcihwYW1IYW5kbGVwLCByYykpOworIAkJZ290byBjbGVhbnVwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci8wMDA3LWRyb3BiZWFyLWZpeC1mb3IteDMyLWFiaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDUwMTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvMDAwNy1kcm9wYmVhci1maXgtZm9yLXgzMi1hYmkucGF0Y2gKQEAgLTAsMCArMSwxNDAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGUgZHJvcGJlYXJrZXkgdXRpbGl0eSBidWlsdCBpbiB4MzIgYWJpIGZvcm1hdCwgd2hlbiBnZW5lcmF0aW5nIHNzaAora2V5cywgd2FzIGdldHRpbmcgbG9zdCBpbiB0aGUgaW5maW5pdGUgbG9vcC4KKworVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUgYnkgZml4aW5nIHR5cGVzIG9mIHZhcmlhYmxlcyBhbmQKK3BhcmFtZXRlcnMgb2YgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIGNvZGUsIHdoaWNoIHdlcmUgZ2V0dGluZwordW5kZXNpcmVkIHNpemUsIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgeDMyIGFiaSB0b29sY2hhaW4uCisKKzIwMTMvMDUvMjMKK1JlY2VpdmVkIHRoaXMgZml4IGZyb20gSCBKIEx1LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDA3OSAyNTIwMAorIyBOb2RlIElEIGExMGExYzQ2Yjg1N2NjOGEzOTIzYzNiYjZkMTUwNGFhMjViNjA1MmYKKyMgUGFyZW50ICBlNzY2MTQxNDVhZWE2N2Y2NmU0YTQyNTc2ODVjNzcxZWZiYTIxYWExCitUeXBkZWYgbXBfZGlnaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBNUF82NEJJVAorCitXaGVuIEdDQyBpcyB1c2VkIHdpdGggTVBfNjRCSVQsIHdlIHNob3VsZCB0eXBlZGVmIG1wX2RpZ2l0IHRvIHVuc2lnbmVkCitsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZCBsb25nIHNpbmNlIGZvciB4MzIsIHVuc2lnbmVkIGxvbmcgaXMKKzMyLWJpdCBhbmQgdW5zaWduZWQgbG9uZyBsb25nIGlzIDY0LWJpdCBhbmQgaXQgaXMgc2FmZSB0byB1c2UgdW5zaWduZWQKK2xvbmcgbG9uZyBmb3IgNjQtYml0IGludGVnZXIgd2l0aCBHQ0MuCisKK2RpZmYgLXIgZTc2NjE0MTQ1YWVhIC1yIGExMGExYzQ2Yjg1NyBsaWJ0b21tYXRoL3RvbW1hdGguaAorLS0tIGEvbGlidG9tbWF0aC90b21tYXRoLmgJVGh1IEFwciAxOCAyMjo1Nzo0NyAyMDEzICswODAwCisrKysgYi9saWJ0b21tYXRoL3RvbW1hdGguaAlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKK0BAIC03Myw3ICs3Myw3IEBACisgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OworICNlbmRpZgorCistICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfZGlnaXQ7CisrICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgbXBfZGlnaXQ7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfd29yZCBfX2F0dHJpYnV0ZV9fICgobW9kZShUSSkpKTsKKworICAgICNkZWZpbmUgRElHSVRfQklUICAgICAgICAgIDYwCisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CisjIERhdGUgMTM2OTM0NDI0MSAyNTIwMAorIyBOb2RlIElEIGM3NTU1YTRjYjdkZWQzYTg4NDA5YmE4NWY0MDI3YmFhN2FmNWY1MzYKKyMgUGFyZW50ICBhMTBhMWM0NmI4NTdjYzhhMzkyM2MzYmI2ZDE1MDRhYTI1YjYwNTJmCitDYXN0IHRvIG1wX2RpZ2l0IHdoZW4gdXBkYXRpbmcgKnJobworCitUaGVyZSBpcworCitpbnQKK21wX21vbnRnb21lcnlfc2V0dXAgKG1wX2ludCAqIG4sIG1wX2RpZ2l0ICogcmhvKQorCitXZSBzaG91bGQgY2FzdCB0byBtcF9kaWdpdCBpbnN0ZWFkIG9mIHVuc2lnbmVkIGxvbmcgd2hlbiB1cGRhdGluZworKnJobyBzaW5jZSBtcF9kaWdpdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBsb25nIGFuZCB1bnNpZ25lZCBsb25nIGxvbmcKK21heSBiZSBkaWZmZXJlbnQgZnJvbSB1bnNpZ25lZCBsb25nLCBsaWtlIGluIHgzMi4KKworZGlmZiAtciBhMTBhMWM0NmI4NTcgLXIgYzc1NTVhNGNiN2RlIGxpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCistLS0gYS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYwlUaHUgTWF5IDIzIDE0OjIxOjE5IDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCVRodSBNYXkgMjMgMTQ6MjQ6MDEgMjAxMyAtMDcwMAorQEAgLTQ4LDcgKzQ4LDcgQEAKKyAjZW5kaWYKKworICAgLyogcmhvID0gLTEvbSBtb2QgYiAqLworLSAgKnJobyA9ICh1bnNpZ25lZCBsb25nKSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworKyAgKnJobyA9IChtcF9kaWdpdCkoKChtcF93b3JkKTEgPDwgKChtcF93b3JkKSBESUdJVF9CSVQpKSAtIHgpICYgTVBfTUFTSzsKKworICAgcmV0dXJuIE1QX09LQVk7CisgfQorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBILkouIEx1IDxoamwudG9vbHNAZ21haWwuY29tPgorIyBEYXRlIDEzNjkzNDQ1NDEgMjUyMDAKKyMgTm9kZSBJRCA3YzY1NmU3MDcxYTY0MTI2ODhiMmYzMGE1MjlhOWFmYWM2YzdiZjVhCisjIFBhcmVudCAgYzc1NTVhNGNiN2RlZDNhODg0MDliYTg1ZjQwMjdiYWE3YWY1ZjUzNgorRGVmaW5lIExUQ19GQVNUX1RZUEUgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciBfX3g4Nl82NF9fCisKK1dlIHNob3VsZCBkZWZpbmUgTFRDX0ZBU1RfVFlQRSB0byB1bnNpZ25lZCBsb25nIGxvbmcgaW5zdGVhZCBvZiB1bnNpZ25lZAorbG9uZyBpZiBfX3g4Nl82NF9fIHRvIHN1cHBvcnQgeDMyIHdoZXJlIHVuc2lnbmVkIGxvbmcgbG9uZyBpcyA2NC1iaXQKK2FuZCB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdC4KKworZGlmZiAtciBjNzU1NWE0Y2I3ZGUgLXIgN2M2NTZlNzA3MWE2IGxpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCistLS0gYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaAlUaHUgTWF5IDIzIDE0OjI0OjAxIDIwMTMgLTA3MDAKKysrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorQEAgLTc0LDcgKzc0LDcgQEAKKyAgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKKyAgICAjZGVmaW5lIEVORElBTl82NEJJVFdPUkQKKyAgICAjZGVmaW5lIExUQ19GQVNUCistICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcKKysgICAjZGVmaW5lIExUQ19GQVNUX1RZUEUgICAgdW5zaWduZWQgbG9uZyBsb25nCisgI2VuZGlmCisKKyAvKiBkZXRlY3QgUFBDMzIgKi8KKyMgSEcgY2hhbmdlc2V0IHBhdGNoCisjIFVzZXIgSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKyMgRGF0ZSAxMzY5MzQ0NzMwIDI1MjAwCisjIE5vZGUgSUQgYTdkNDY5MDE1OGZhZTRlZGUyYzRlNWI1NjIzM2U4MzczMGJmMzhlZQorIyBQYXJlbnQgIDdjNjU2ZTcwNzFhNjQxMjY4OGIyZjMwYTUyOWE5YWZhYzZjN2JmNWEKK1VzZSB1bnNpZ25lZCBsb25nIGxvbmcgYWFzIHVuc2lnbmVkIDY0LWJpdCBpbnRlZ2VyIGZvciB4ODYtNjQgR0NDCisKK1dlIHNob3VsZCB1c2UgdW5zaWduZWQgbG9uZyBsb25nIGluc3RlYWQgb2YgdW5zaWduZWQgbG9uZyBhcyB1bnNpZ25lZAorNjQtYml0IGludGVnZXIgZm9yIHg4Ni02NCBHQ0MgdG8gc3VwcG9ydCB4MzIgd2hlcmUgdW5zaWduZWQgbG9uZyBpcworMzItYml0LgorCitkaWZmIC1yIDdjNjU2ZTcwNzFhNiAtciBhN2Q0NjkwMTU4ZmEgbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKKy0tLSBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oCVRodSBNYXkgMjMgMTQ6Mjk6MDEgMjAxMyAtMDcwMAorKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgJVGh1IE1heSAyMyAxNDozMjoxMCAyMDEzIC0wNzAwCitAQCAtMzQzLDcgKzM0Myw3IEBACisgLyogNjQtYml0IFJvdGF0ZXMgKi8KKyAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pICYmICFkZWZpbmVkKExUQ19OT19BU00pCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST0w2NCh1bnNpZ25lZCBsb25nIGxvbmcgd29yZCwgaW50IGkpCisgeworICAgIGFzbSgicm9scSAlJWNsLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM1MSw3ICszNTEsNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NCh1bnNpZ25lZCBsb25nIHdvcmQsIGludCBpKQorK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIFJPUjY0KHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb3JxICUlY2wsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCitAQCAtMzYxLDcgKzM2MSw3IEBACisKKyAjaWZuZGVmIExUQ19OT19ST0xDCisKKy1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgd29yZCwgY29uc3QgaW50IGkpCisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgUk9MNjRjKHVuc2lnbmVkIGxvbmcgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKyB7CisgICAgYXNtKCJyb2xxICUyLCUwIgorICAgICAgIDoiPXIiICh3b3JkKQorQEAgLTM2OSw3ICszNjksNyBAQAorICAgIHJldHVybiB3b3JkOworIH0KKworLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBST1I2NGModW5zaWduZWQgbG9uZyBsb25nIHdvcmQsIGNvbnN0IGludCBpKQorIHsKKyAgICBhc20oInJvcnEgJTIsJTAiCisgICAgICAgOiI9ciIgKHdvcmQpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlNzg3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyL2Ryb3BiZWFyCkBAIC0wLDAgKzEsNCBAQAorIyVQQU0tMS4wCisKK2F1dGggICAgIGluY2x1ZGUgIGNvbW1vbi1hdXRoCithY2NvdW50ICBpbmNsdWRlICBjb21tb24tYWNjb3VudApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIuc29ja2V0IGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXIuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YzYxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhci5zb2NrZXQKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitDb25mbGljdHM9ZHJvcGJlYXIuc2VydmljZQorCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPTIyCitBY2NlcHQ9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKK0Fsc289ZHJvcGJlYXJrZXkuc2VydmljZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhckAuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU5OTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJALnNlcnZpY2UKQEAgLTAsMCArMSwxMSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1TU0ggUGVyLUNvbm5lY3Rpb24gU2VydmVyCitXYW50cz1kcm9wYmVhcmtleS5zZXJ2aWNlCitBZnRlcj1zeXNsb2cudGFyZ2V0IGRyb3BiZWFya2V5LnNlcnZpY2UKKworW1NlcnZpY2VdCitFbnZpcm9ubWVudEZpbGU9LS9ldGMvZGVmYXVsdC9kcm9wYmVhcgorRXhlY1N0YXJ0PS1AU0JJTkRJUkAvZHJvcGJlYXIgLWkgLXIgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgJERST1BCRUFSX0VYVFJBX0FSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1N0YW5kYXJkSW5wdXQ9c29ja2V0CitLaWxsTW9kZT1wcm9jZXNzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9kcm9wYmVhcmtleS5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJrZXkuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2MyMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvZHJvcGJlYXJrZXkuc2VydmljZQpAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249U1NIIEtleSBHZW5lcmF0aW9uCitDb25kaXRpb25QYXRoRXhpc3RzPXwhL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0V4ZWNTdGFydD1AU0JJTkRJUkAvZHJvcGJlYXJrZXkgLXQgcnNhIC1mIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CitSZW1haW5BZnRlckV4aXQ9eWVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhci9pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lOGZlZDNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZHJvcGJlYXIvZHJvcGJlYXIvaW5pdApAQCAtMCwwICsxLDExMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOgkJc3NoZAorIyBSZXF1aXJlZC1TdGFydDoJJHJlbW90ZV9mcyAkc3lzbG9nICRuZXR3b3JraW5nCisjIFJlcXVpcmVkLVN0b3A6CSRyZW1vdGVfZnMgJHN5c2xvZworIyBEZWZhdWx0LVN0YXJ0OgkyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoJCTEKKyMgU2hvcnQtRGVzY3JpcHRpb246CURyb3BiZWFyIFNlY3VyZSBTaGVsbCBzZXJ2ZXIKKyMjIyBFTkQgSU5JVCBJTkZPCisjCisjIERvIG5vdCBjb25maWd1cmUgdGhpcyBmaWxlLiBFZGl0IC9ldGMvZGVmYXVsdC9kcm9wYmVhciBpbnN0ZWFkIQorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9kcm9wYmVhcgorTkFNRT1kcm9wYmVhcgorREVTQz0iRHJvcGJlYXIgU1NIIHNlcnZlciIKK1BJREZJTEU9L3Zhci9ydW4vZHJvcGJlYXIucGlkCisKK0RST1BCRUFSX1BPUlQ9MjIKK0RST1BCRUFSX0VYVFJBX0FSR1M9CitOT19TVEFSVD0wCisKK3NldCAtZQorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIHx8IC4gL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyCit0ZXN0ICIkTk9fU1RBUlQiID0gIjAiIHx8IGV4aXQgMAordGVzdCAteCAiJERBRU1PTiIgfHwgZXhpdCAwCit0ZXN0ICEgLWggL3Zhci9zZXJ2aWNlL2Ryb3BiZWFyIHx8IGV4aXQgMAorCityZWFkb25seV9yb290ZnM9MAorZm9yIGZsYWcgaW4gYGF3ayAneyBpZiAoJDIgPT0gIi8iKSB7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBFTkQgeyBmb3IgKGYgaW4gRkxBR1MpIHByaW50IEZMQUdTW2ZdIH0nIDwvcHJvYy9tb3VudHNgOyBkbworICBjYXNlICRmbGFnIGluCisgICBybykKKyAgICAgcmVhZG9ubHlfcm9vdGZzPTEKKyAgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiBbICRyZWFkb25seV9yb290ZnMgPSAiMSIgXTsgdGhlbgorICBta2RpciAtcCAvdmFyL2xpYi9kcm9wYmVhcgorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5IgorICBEUk9QQkVBUl9EU1NLRVlfREVGQVVMVD0iL3Zhci9saWIvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorZWxzZQorICBEUk9QQkVBUl9SU0FLRVlfREVGQVVMVD0iL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkiCisgIERST1BCRUFSX0RTU0tFWV9ERUZBVUxUPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIKK2ZpCisKK3Rlc3QgLXogIiREUk9QQkVBUl9CQU5ORVIiIHx8IFwKKyAgRFJPUEJFQVJfRVhUUkFfQVJHUz0iJERST1BCRUFSX0VYVFJBX0FSR1MgLWIgJERST1BCRUFSX0JBTk5FUiIKK3Rlc3QgLW4gIiREUk9QQkVBUl9SU0FLRVkiIHx8IFwKKyAgRFJPUEJFQVJfUlNBS0VZPSREUk9QQkVBUl9SU0FLRVlfREVGQVVMVAordGVzdCAtbiAiJERST1BCRUFSX0RTU0tFWSIgfHwgXAorICBEUk9QQkVBUl9EU1NLRVk9JERST1BCRUFSX0RTU0tFWV9ERUZBVUxUCit0ZXN0IC1uICIkRFJPUEJFQVJfS0VZVFlQRVMiIHx8IFwKKyAgRFJPUEJFQVJfS0VZVFlQRVM9InJzYSIKKworZ2VuX2tleXMoKSB7Citmb3IgdCBpbiAkRFJPUEJFQVJfS0VZVFlQRVM7IGRvCisgIGNhc2UgJHQgaW4KKyAgICByc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9SU0FLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9SU0FLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfUlNBS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZIHx8IGRyb3BiZWFya2V5IC10IHJzYSAtZiAkRFJPUEJFQVJfUlNBS0VZCisJOzsKKyAgICBkc2EpCisgICAgICAgIGlmIFsgLWYgIiREUk9QQkVBUl9EU1NLRVkiIC1hICEgLXMgIiREUk9QQkVBUl9EU1NLRVkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybSAkRFJPUEJFQVJfRFNTS0VZIHx8IHRydWUKKyAgICAgICAgZmkKKyAgICAgICAgdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZIHx8IGRyb3BiZWFya2V5IC10IGRzcyAtZiAkRFJPUEJFQVJfRFNTS0VZCisJOzsKKyAgZXNhYworZG9uZQorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisJZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKKwlnZW5fa2V5cworCUtFWV9BUkdTPSIiCisJdGVzdCAtZiAkRFJPUEJFQVJfRFNTS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLWQgJERST1BCRUFSX0RTU0tFWSIKKwl0ZXN0IC1mICREUk9QQkVBUl9SU0FLRVkgJiYgS0VZX0FSR1M9IiRLRVlfQVJHUyAtciAkRFJPUEJFQVJfUlNBS0VZIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1TIC1wICRQSURGSUxFIFwKKwkgIC14ICIkREFFTU9OIiAtLSAkS0VZX0FSR1MgXAorCSAgICAtcCAiJERST1BCRUFSX1BPUlQiICREUk9QQkVBUl9FWFRSQV9BUkdTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtSyAteCAiJERBRU1PTiIgLXAgJFBJREZJTEUKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC1LIC14ICIkREFFTU9OIiAtcCAkUElERklMRQorCXNsZWVwIDEKKwlLRVlfQVJHUz0iIgorCXRlc3QgLWYgJERST1BCRUFSX0RTU0tFWSAmJiBLRVlfQVJHUz0iJEtFWV9BUkdTIC1kICREUk9QQkVBUl9EU1NLRVkiCisJdGVzdCAtZiAkRFJPUEJFQVJfUlNBS0VZICYmIEtFWV9BUkdTPSIkS0VZX0FSR1MgLXIgJERST1BCRUFSX1JTQUtFWSIKKwlzdGFydC1zdG9wLWRhZW1vbiAtUyAtcCAkUElERklMRSBcCisJICAteCAiJERBRU1PTiIgLS0gJEtFWV9BUkdTIFwKKwkgICAgLXAgIiREUk9QQkVBUl9QT1JUIiAkRFJPUEJFQVJfRVhUUkFfQVJHUworCWVjaG8gIiROQU1FLiIKKwk7OworICAqKQorCU49L2V0Yy9pbml0LmQvJE5BTUUKKwllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8cmVzdGFydHxmb3JjZS1yZWxvYWR9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2Ryb3BiZWFyL2Ryb3BiZWFyXzIwMTUuNjguYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjY4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNzQ5ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9kcm9wYmVhci9kcm9wYmVhcl8yMDE1LjY4LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBkcm9wYmVhci5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjc2NjRhYzEwZjdjYzIzMDFjNTMwZWI4MGM3NTZmYzVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU1ZWE3YzFlOTA0ZmZlNGIxY2RiZTFhZGRjYTgyOTFhMjUzM2Q3ZDI4NWZkMjJhYzMzNjA4ZTk1MDJhNjI0NDYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9hdXRvdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdC0yLjEuMC9hdXRvdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1OTk2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LTIuMS4wL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitBdm9pZCB1c2luZyBleHBhdCdzIG00IGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIHNwZWNpZmljIHRvIG91ciBidWlsZCBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK1VwZGF0ZWQgdG8gYXBwbHkgb3ZlciBleHBhdCAyLjEuMAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGV4cGF0LTIuMS4wL2NvbmZpZ3VyZS5pbiBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4KKy0tLSBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wMy0wNCAwMTo0NTo1My4wMDAwMDAwMDAgKzAyMDAKKysrKyBleHBhdC0yLjEuMC9jb25maWd1cmUuaW4JMjAxMi0wNS0xMCAyMTowNDo0NC4wMDAwMDAwMDAgKzAzMDAKK0BAIC01MSw4ICs1MSw2IEBACisgCisgQUNfQ09ORklHX0hFQURFUihleHBhdF9jb25maWcuaCkKKyAKKy1zaW5jbHVkZShjb25mdG9vbHMvYWNfY19iaWdlbmRpYW5fY3Jvc3MubTQpCistCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2V4cGF0L2V4cGF0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZhZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXQuaW5jCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQSBzdHJlYW0tb3JpZW50ZWQgWE1MIHBhcnNlciBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRXhwYXQgaXMgYW4gWE1MIHBhcnNlciBsaWJyYXJ5IHdyaXR0ZW4gaW4gQy4gSXQgaXMgYSBzdHJlYW0tb3JpZW50ZWQgcGFyc2VyIGluIHdoaWNoIGFuIGFwcGxpY2F0aW9uIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgdGhpbmdzIHRoZSBwYXJzZXIgbWlnaHQgZmluZCBpbiB0aGUgWE1MIGRvY3VtZW50IChsaWtlIHN0YXJ0IHRhZ3MpIgorSE9NRVBBR0UgPSAiaHR0cDovL2V4cGF0LnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1JVCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZXhwYXQvZXhwYXQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG90b29scy5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgZ3ppcG5hdGl2ZQorCisjIFRoaXMgcGFja2FnZSB1c2VzIGFuIGFyY2hpdmUgZm9ybWF0IGtub3duIHRvIGhhdmUgaXNzdWUgd2l0aCBzb21lCisjIHZlcnNpb25zIG9mIGd6aXAKK2RvX3VucGFja1tkZXBlbmRzXSArPSAiZ3ppcC1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vY29uZnRvb2xzL2xpYnRvb2wubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9leHBhdC9leHBhdF8yLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTU4NzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZXhwYXQvZXhwYXRfMi4xLjAuYmIKQEAgLTAsMCArMSw1IEBACityZXF1aXJlIGV4cGF0LmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWI3MWY2ODE3MTNkMTI1NmUxYzIzYjA4OTA5MjA4NzQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZDdkYWI3YTVmZWE5N2QyYTZhNDNmNTExNDQ5YjdjZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MjM3MDU0NzJmODE2ZGYyMWM4ZjZhYTAyNmRkMTYyYjI4MDgwNjgzOGJiNTViMzQzMmIwZmIxZmNjYTdlYjg2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2Rpc2FibGVfamF2YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM1ZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9kaXNhYmxlX2phdmEucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCisjIFB1bGxlZCBmcm9tIE9wZW5FbWJlZGRlZAorIyAKKyMgQ29tbWVudGVkIGJ5OiBTYXVsIFdvbGQgPHNhdWwud29sZEBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvY29uZmlndXJlLmFjCTIwMDYtMTEtMjcgMDk6MDI6MDEuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9jb25maWd1cmUuYWMJMjAxMS0wMy0xNiAxNjo1NTozNi4xMTEzOTY1NTcgLTA3MDAKK0BAIC0zNiwyNyArMzYsMTUgQEAKKyBndF9KQVZBX0NIT0lDRQorIAorIGd0X0dDSgorLWlmIHRlc3QgLW4gIiRIQVZFX0dDSiIgJiYgdGVzdCAiJEpBVkFfQ0hPSUNFIiA9IHllczsgdGhlbgorLSAgQlVJTERKQVZBRVhFPXllcworLWVsc2UKKyAgIEJVSUxESkFWQUVYRT1ubworLWZpCisgQUNfU1VCU1QoQlVJTERKQVZBRVhFKQorIAorIGd0X0pBVkFFWEVDCisgZ3RfSkFWQUNPTVAoWzEuM10pCisgQUNfQ0hFQ0tfUFJPRyhKQVIsIGphciwgamFyKQorLWlmIHRlc3QgLW4gIiRIQVZFX0pBVkFDT01QIiAmJiB0ZXN0IC1uICIkSkFSIiAmJiB0ZXN0ICIkSkFWQV9DSE9JQ0UiICE9IG5vOyB0aGVuCistICBCVUlMREpBVkE9eWVzCistZWxzZQorICAgQlVJTERKQVZBPW5vCistZmkKKyBBQ19TVUJTVChCVUlMREpBVkEpCistaWYgdGVzdCAtbiAiJEhBVkVfSkFWQUVYRUMiICYmIHRlc3QgJEJVSUxESkFWQSA9IHllczsgdGhlbgorLSAgVEVTVEpBVkE9eWVzCistZWxzZQorICAgVEVTVEpBVkE9bm8KKy1maQorIEFDX1NVQlNUKFRFU1RKQVZBKQorIAorIGd0X0NTSEFSUENPTVAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2FjbG9jYWxfdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjkzZjViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACisKK1RoaXMgcGF0Y2ggdXBkYXRlcyB0aGUgcmVxdWlyZWQgdmVyc2lvbiBudW1iZXIgZnJvbSAyLjYxIHRvIHRoZSAKK2N1cnJlbnQgMi42NSB2ZXJzaW9uIG9mIGFjbG9jYWwsIHRoaXMgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgCit3aGVuIHdlIHVwZGF0ZSBhY2xvY2FsCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU2OTUyNjA3MyAtMDcwMAorQEAgLTE0OCw3ICsxNDgsNyBAQAorICAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisgICBkbmwgQXV0b2NvbmYgPj0gMi42MSBzdXBwb3J0cyBkb3RzIGluIC0td2l0aCBvcHRpb25zLgorLSAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjYxXSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorKyAgZGVmaW5lKFtOX0FfTV9FXSxbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLFsyLjY1XSksWy0xXSxbdHJhbnNsaXQoWyQxXSxbLl0sW19dKV0sWyQxXSldKQorICAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisgICB1c2VfYWRkaXRpb25hbD15ZXMKKyAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGhseS9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aGx5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDo0NS41NzA1MjY5MDQgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIAorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHgvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoeC9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTcyNTI1NzczIC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvYXV0b2NvbmYtbGliLWxpbmsvdGVzdHMvcnBhdGh5L2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNDozNi4zOTE1MTk3NzUgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHkvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjQ1LjU3ODM5NDkxNiAtMDcwMAorQEAgLTExLDcgKzExLDcgQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorIFttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay90ZXN0cy9ycGF0aHovYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI0OjM2LjM5MTUxOTc3NSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL3Rlc3RzL3JwYXRoei9hY2xvY2FsLm00CTIwMTEtMDMtMTcgMDI6MjQ6NDUuNTg2Mzk1NDE2IC0wNzAwCitAQCAtMTEsOCArMTEsOCBAQAorICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICMgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorLW00X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjFdLCwKKy1bbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjYxLgorK200X2lmKG00X1BBQ0tBR0VfVkVSU0lPTiwgWzIuNjVdLCwKKytbbTRfZmF0YWwoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorIFlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAorIHlvdSBzaG91bGQgcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5Ll0sIFs2M10pXSkKKyAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2FjbG9jYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDA2LTExLTI3IDA5OjM0OjMyLjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvYWNsb2NhbC5tNAkyMDExLTAzLTE3IDAyOjI3OjAxLjEzNTY4MjgwNyAtMDcwMAorQEAgLTExLDggKzExLDggQEAKKyAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKy1tNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjYxXSwsCistW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KKyttNF9pZihtNF9QQUNLQUdFX1ZFUlNJT04sIFsyLjY1XSwsCisrW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42NS4KKyBZb3UgaGF2ZSBhbm90aGVyIHZlcnNpb24gb2YgYXV0b2NvbmYuICBJZiB5b3Ugd2FudCB0byB1c2UgdGhhdCwKKyB5b3Ugc2hvdWxkIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS5dLCBbNjNdKV0pCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9leGFtcGxlcy9hY2xvY2FsLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAwNi0xMS0yNyAwOToxNjoyMy4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2V4YW1wbGVzL2FjbG9jYWwubTQJMjAxMS0wMy0xNyAwMjoyNjo1Mi41ODkzOTY2ODMgLTA3MDAKK0BAIC0xMSw4ICsxMSw4IEBACisgIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisgCistbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAorLVttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjEuCisrbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42NV0sLAorK1ttNF9mYXRhbChbdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgZm9yIGF1dG9jb25mIDIuNjUuCisgWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoYXQsCisgeW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9maXhfZ251X3NvdXJjZV9jaXJjdWxhci5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4NjE0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZml4X2dudV9zb3VyY2VfY2lyY3VsYXIucGF0Y2gKQEAgLTAsMCArMSwzNDggQEAKKworVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBjaXJjdWxhciBkZXBlbmRlbmN5IG9uIEFDX0dOVV9TT1VSQ0UgaW4KK0FDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4KKworVGhhbmtzIHRvIE1hcmsgSGF0bGUgZm9yIHRoZSB0aW1lbHkgcG9pbnRlcnMgYW5kIGZpeGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworU2lnbmVkLW9mZi1ieSBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTAzLTE2IDIzOjU0OjAxLjcxMTkyMzQ0OCAtMDcwMAorQEAgLTE2LDQzICsxNiw0NyBAQAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorKyNBQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKysjWworKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorKyMgIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCisrIworKyMgIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyMgIEFDX1JFUVVJUkUoW0FDX0FJWF0pCisrIyAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorKyMKKysjICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorKyNbLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisrIyNpZm5kZWYgX19FWFRFTlNJT05TX18KKysjIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworKyMjZW5kaWYKKysjI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKysjI2VuZGlmCisrIyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorKyMjZW5kaWZdKQorKyMgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKysjICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCisrIyAgICBbQUNfQ09NUElMRV9JRkVMU0UoCisrIyAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKysjIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisrIwkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKysjICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKysjICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorKyMgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisrIyAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorKyMgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorKyNdKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorK1sKKysgICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgICBBQ19SRVFVSVJFKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorK10pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjE5LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L2dudWxpYi1jb21wLm00CTIwMTEtMDMtMTYgMjM6NTA6MTcuNDcxNTMxODM4IC0wNzAwCitAQCAtMjUsNyArMjUsNyBAQAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0xUTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBBQ19SRVFVSVJFKFtBQ19QUk9HX1JBTkxJQl0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgXSkKKyAKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L21iY2hhci5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6MzguMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvbWJjaGFyLm00CTIwMTEtMDMtMTYgMjM6NTA6MTAuODE0Mzk2NTI5IC0wNzAwCitAQCAtOSw3ICs5LDcgQEAKKyAKKyBBQ19ERUZVTihbZ2xfTUJDSEFSXSwKKyBbCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAgIGRubCBUaGUgZm9sbG93aW5nIGxpbmUgaXMgdGhhdCBzbyB0aGUgdXNlciBjYW4gdGVzdCBIQVZFX1dDSEFSX0gKKyAgIGRubCBiZWZvcmUgI2luY2x1ZGUgIm1iY2hhci5oIi4KKyAgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbd2NoYXIuaF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9nbnVsaWItbTQvd2N3aWR0aC5tNAkyMDA2LTExLTI3IDA5OjE0OjM4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MDowOC4zNTczOTYyNDcgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC1ydW50aW1lL200L2xvY2subTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDA2LTEwLTI0IDEzOjU5OjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXJ1bnRpbWUvbTQvbG9jay5tNAkyMDExLTAzLTE2IDIzOjUwOjA0LjM1NTg5MTY3NiAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAgIEFDX0JFRk9SRShbJDBdLCBbZ2xfQVJHUF0pZG5sCisgCisgICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkgZG5sIG5lZWRlZCBmb3IgcHRocmVhZF9yd2xvY2tfdCBvbiBnbGliYyBzeXN0ZW1zCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pIGRubCBuZWVkZWQgZm9yIHB0aHJlYWRfcndsb2NrX3Qgb24gZ2xpYmMgc3lzdGVtcworICAgZG5sIENoZWNrIGZvciBtdWx0aXRocmVhZGluZy4KKyAgIEFDX0FSR19FTkFCTEUodGhyZWFkcywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdGhyZWFkcz17cG9zaXh8c29sYXJpc3xwdGh8d2luMzJ9XSwgW3NwZWNpZnkgbXVsdGl0aHJlYWRpbmcgQVBJXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9leHRlbnNpb25zLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2V4dGVuc2lvbnMubTQJMjAxMS0wMy0xNiAyMzo1MzoyOC40ODc2NzEyNjYgLTA3MDAKK0BAIC0xNiw0MyArMTYsNDcgQEAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKKyAjIHR5cGljYWxseSBkdWUgdG8gc3RhbmRhcmRzLWNvbmZvcm1hbmNlIGlzc3Vlcy4KKy1BQ19ERUZVTihbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSwKKy1bCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfUlVOX0lGRUxTRV0pCistCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0FJWF0pCistICBBQ19SRVFVSVJFKFtBQ19NSU5JWF0pCistCistICBBSF9WRVJCQVRJTShbX19FWFRFTlNJT05TX19dLAorLVsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKy0jaWZuZGVmIF9fRVhURU5TSU9OU19fCistIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworLSNlbmRpZgorLSNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistIyB1bmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jZW5kaWYKKy0jaWZuZGVmIF9UQU5ERU1fU09VUkNFCistIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorLSNlbmRpZl0pCistICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCistICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfX10sCistICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKy0gICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCistIwkgIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCistCSAgQUNfSU5DTFVERVNfREVGQVVMVF0pXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ub10pXSkKKy0gIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCistICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorLSAgQUNfREVGSU5FKFtfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1NdKQorLSAgQUNfREVGSU5FKFtfVEFOREVNX1NPVVJDRV0pCistXSkKKysjQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisrI1sKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX0NPTVBJTEVfSUZFTFNFXSkKKysjICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorKyMKKysjICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysjICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorKyMgIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKysjCisrIyAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKysjWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworKyMjaWZuZGVmIF9fRVhURU5TSU9OU19fCisrIyMgdW5kZWYgX19FWFRFTlNJT05TX18KKysjI2VuZGlmCisrIyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisrIyNlbmRpZgorKyMjaWZuZGVmIF9UQU5ERU1fU09VUkNFCisrIyMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKysjI2VuZGlmXSkKKysjICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfX10sCisrIyAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorKyMgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorKyMgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisrIyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorKyMJICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorKyMgICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllc10sCisrIyAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCisrIyAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKysjICAgIEFDX0RFRklORShbX19FWFRFTlNJT05TX19dKQorKyMgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKysjICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKysjXSkKKyAKKyAjIGdsX1VTRV9TWVNURU1fRVhURU5TSU9OUworICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorICMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorIEFDX0RFRlVOKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLSAgW0FDX1JFUVVJUkUoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10pXSkKKytbCisrICAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrCisrICAgQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKytdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2ZubWF0Y2gubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZm5tYXRjaC5tNAkyMDExLTAzLTE2IDIzOjUyOjA2LjQ3NzQ2MzY3MSAtMDcwMAorQEAgLTkxLDcgKzkxLDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19GTk1BVENIX0dOVV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxmbm1hdGNoLmg+IHRvIGRlY2xhcmUgRk5NX0NBU0VGT0xEIGV0Yy4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgRk5NQVRDSF9IPQorICAgX0FDX0ZVTkNfRk5NQVRDSF9JRihbR05VXSwgW2FjX2N2X2Z1bmNfZm5tYXRjaF9nbnVdLAorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGRlbGltLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0ZGVsaW0ubTQJMjAxMS0wMy0xNiAyMzo1MjoyMi44NzE2NzQ4NDUgLTA3MDAKK0BAIC0xMiw3ICsxMiw3IEBACisgWworIAorICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGdldGRlbGltKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1MoZ2V0ZGVsaW0pCisgICBBQ19DSEVDS19ERUNMU19PTkNFKGdldGRlbGltKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L2dldGxpbmUubTQJMjAwNi0xMS0yNyAwOToxNDo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ2V0bGluZS5tNAkyMDExLTAzLTE2IDIzOjUxOjQ5LjgyOTk3MTEwOCAtMDcwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19HRVRMSU5FXSwKKyBbCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZ2V0bGluZSgpLgorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgCisgICBBQ19DSEVDS19ERUNMUyhbZ2V0bGluZV0pCisgCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvZ251bGliLWNvbXAubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjM2LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDExLTAzLTE2IDIzOjUyOjE4Ljk3MDQ1MDQ4OCAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorICAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBBQ19SRVFVSVJFKFtnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlNdKQorICAgQUNfUkVRVUlSRShbZ2xfTE9DS19FQVJMWV0pCisgXSkKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvbWJjaGFyLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L21iY2hhci5tNAkyMDExLTAzLTE2IDIzOjUxOjQwLjg0NDQxMDIxNiAtMDcwMAorQEAgLTksNyArOSw3IEBACisgCisgQUNfREVGVU4oW2dsX01CQ0hBUl0sCisgWworLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisrICBkbmwgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCisgICBkbmwgVGhlIGZvbGxvd2luZyBsaW5lIGlzIHRoYXQgc28gdGhlIHVzZXIgY2FuIHRlc3QgSEFWRV9XQ0hBUl9ICisgICBkbmwgYmVmb3JlICNpbmNsdWRlICJtYmNoYXIuaCIuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0UoW3djaGFyLmhdKQorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC9zdHBjcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwY3B5Lm00CTIwMTEtMDMtMTYgMjM6NTI6MTQuNjkxMzk2MDQ1IC0wNzAwCitAQCAtNyw3ICs3LDcgQEAKKyBBQ19ERUZVTihbZ2xfRlVOQ19TVFBDUFldLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8c3RyaW5nLmg+IHRvIGRlY2xhcmUgc3RwY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUExBQ0VfRlVOQ1Moc3RwY3B5KQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHBjcHkgPSBubzsgdGhlbgorZGlmZiAtcnUgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNCBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3N0cG5jcHkubTQJMjAwNi0xMS0yNyAwOToxNDo1NS4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LnBhdGNoZWQvZ2V0dGV4dC10b29scy9nbnVsaWItbTQvc3RwbmNweS5tNAkyMDExLTAzLTE2IDIzOjUyOjEwLjM1NjY0MTQ1OSAtMDcwMAorQEAgLTcsNyArNyw3IEBACisgQUNfREVGVU4oW2dsX0ZVTkNfU1RQTkNQWV0sCisgWworICAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdHJpbmcuaD4gdG8gZGVjbGFyZSBzdHBuY3B5KCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIGRubCBCb3RoIGdsaWJjIGFuZCBBSVggKDQuMy4zLCA1LjEpIGhhdmUgYW4gc3RwbmNweSgpIGZ1bmN0aW9uCisgICBkbmwgZGVjbGFyZWQgaW4gPHN0cmluZy5oPi4gSXRzIHNpZGUgZWZmZWN0cyBhcmUgdGhlIHNhbWUgYXMgdGhvc2UKK2RpZmYgLXJ1IGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQKKy0tLSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2dudWxpYi1tNC93Y3dpZHRoLm00CTIwMDYtMTEtMjcgMDk6MTQ6NTUuMDAwMDAwMDAwIC0wODAwCisrKysgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvZ251bGliLW00L3djd2lkdGgubTQJMjAxMS0wMy0xNiAyMzo1MTowOC4yNjAzMjQyMjEgLTA3MDAKK0BAIC03LDcgKzcsNyBAQAorIEFDX0RFRlVOKFtnbF9GVU5DX1dDV0lEVEhdLAorIFsKKyAgIGRubCBQZXJzdWFkZSBnbGliYyA8d2NoYXIuaD4gdG8gZGVjbGFyZSB3Y3dpZHRoKCkuCistICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysgIGRubCBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKyAKKyAgIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKyAgIEFDX1JFUVVJUkUoW2d0X1RZUEVfV0NIQVJfVF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQgZ2V0dGV4dC5wYXRjaGVkL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAorLS0tIGdldHRleHQtMC4xNi4xL2dldHRleHQtdG9vbHMvbGliZ2V0dGV4dHBvL2dudWxpYi1tNC9nbnVsaWItY29tcC5tNAkyMDA2LTExLTI3IDA5OjMzOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL2xpYmdldHRleHRwby9nbnVsaWItbTQvZ251bGliLWNvbXAubTQJMjAxMS0wMy0xNiAyMzo1MTowMi4wMzYwNjEzMTcgLTA3MDAKK0BAIC0yNSw3ICsyNSw3IEBACisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTElCT0JKUyRdKWRubCBhIHZhcmlhYmxlCisgICBtNF9wYXR0ZXJuX2FsbG93KFteZ2xfTFRMSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIEFDX1JFUVVJUkUoW0FDX1BST0dfUkFOTElCXSkKKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorICAgQUNfUkVRVUlSRShbZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0xPQ0tfRUFSTFldKQorIF0pCitkaWZmIC1ydSBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00IGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CistLS0gZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9tNC9yZWdleC5tNAkyMDA2LTExLTI3IDA5OjAyOjA1LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQucGF0Y2hlZC9nZXR0ZXh0LXRvb2xzL200L3JlZ2V4Lm00CTIwMTEtMDMtMTYgMjM6NTA6NTMuNTMzNDc3MTk1IC0wNzAwCitAQCAtMTE2LDcgKzExNiw3IEBACisgICBkbmwgdG8gZ2V0IHRoZW0uCisgCisgICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0cmluZy5oPiB0byBkZWNsYXJlIG1lbXBjcHkoKS4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorKyAgZG5sIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorIAorICAgQUNfUkVRVUlSRShbQUNfQ19SRVNUUklDVF0pCisgICBBQ19SRVFVSVJFKFtBQ19GVU5DX0FMTE9DQV0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmZlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtYXV0b2NvbmYtbGliLWxpbmstbm8tTC5wYXRjaApAQCAtMCwwICsxLDE5IEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBnZXR0ZXh0LTAuMTcvYXV0b2NvbmYtbGliLWxpbmsvbTQvbGliLWxpbmsubTR+CTIwMDktMDQtMTcgMTU6MTI6MzAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE3L2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMDktMDQtMTcgMTU6Mzc6MzkuMDAwMDAwMDAwIC0wNzAwCitAQCAtMjY3LDYgKzI2Nyw5IEBACisgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgIGZpCisrICAgICAgICAgIGRubCBKdXN0IGxldCB0aGUgY29tcGlsZXIgZmluZCB0aGUgbGlicmFyeSwgdGhlIGNvbXBpbGVyIGFuZCB1c2VyIGFyZSBzbWFydGVyIHRoZW4gdGhpcyBzY3JpcHQKKysgICAgICAgICAgZG5sIHdoZW4gY3Jvc3MgY29tcGlsaW5nIGFuZCB3b3JraW5nIHdpdGggYSByZWxvY2F0ZWQgaW5zdGFsbC4KKysgICAgICAgICAgZm91bmRfZGlyPSIiCisgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKyAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtdnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtMC4xNi4xL2dldHRleHQtdnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5ZTQ1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC12cGF0aC5wYXRjaApAQCAtMCwwICsxLDIwIEBACisKKyMgUHVsbGVkIGZyb20gT3BlbkVtYmVkZGVkCisjIAorIyBDb21tZW50ZWQgYnk6IFNhdWwgV29sZCA8c2F1bC53b2xkQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdldHRleHQtMC4xNi4xLm9yaWcvZ2V0dGV4dC1ydW50aW1lL2ludGwvTWFrZWZpbGUuaW4JMjAwNi0xMS0yNyAwOTowMjowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvaW50bC9NYWtlZmlsZS5pbgkyMDExLTAzLTE2IDE2OjA0OjQ5LjE3NTQxOTkzMCAtMDcwMAorQEAgLTM1LDcgKzM1LDcgQEAKKyAjICAgICdtYWtlJyBkb2VzIHRoZSB3cm9uZyB0aGluZyBpZiBHTlUgZ2V0dGV4dCB3YXMgY29uZmlndXJlZCB3aXRoCisgIyAgICAiLi9jb25maWd1cmUgLS1zcmNkaXI9YHB3ZGAiLCBuYW1lbHkgaXQgZ2V0cyBjb25mdXNlZCBieSB0aGUgLmxvIGFuZCAubGEKKyAjICAgIGZpbGVzIGl0IGZpbmRzIGluIHNyY2RpciA9IC4uLy4uL2dldHRleHQtcnVudGltZS9pbnRsLgorLVZQQVRIID0gJChzcmNkaXIpCisrI1ZQQVRIID0gJChzcmNkaXIpCisgCisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvaGFyZGNvZGVfbWFjcm9fdmVyc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE4ZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9oYXJkY29kZV9tYWNyb192ZXJzaW9uLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKKworVGhpcyBwYXRjaCBoYXJkY29kZXMgaW4gdmVyc2lvbiAwLjE3IGZvciB0aGUgR0VUVEVYVF9NQUNST19WRVJTSU9OLAordGhlIHZlcnNpb24gY2hlY2sgaXMgb25seSBwYXJ0IG9mIDAuMTcgYW5kIHdpbGwgbm90IGFmZmVjdCBhbnkgMC4xNi4xCitvcGVyYXRpb25zCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvbTQvcG8ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZXR0ZXh0LTAuMTYuMS5vcmlnL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI0OjI4Ljk1MzUyMDIzMSAtMDcwMAorKysrIGdldHRleHQtMC4xNi4xL2dldHRleHQtcnVudGltZS9tNC9wby5tNAkyMDExLTAzLTE3IDAyOjI4OjI1LjQ1NTM5Njg2MiAtMDcwMAorQEAgLTI3LDYgKzI3LDkgQEAKKyAgIEFDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sIGRlZmluZWQgYnkgYXV0b21ha2UKKyAgIEFDX1JFUVVJUkUoW0FNX05MU10pZG5sCisgCisrICBkbmwgSGFyZGNvZGUgdGhlIE1BQ1JPX1ZFUlNJT04gdG8gMC4xNyBmb3IgZ251dGxzCisrICBBQ19TVUJTVChbR0VUVEVYVF9NQUNST19WRVJTSU9OXSwgWzAuMTddKQorKworICAgZG5sIFBlcmZvcm0gdGhlIGZvbGxvd2luZyB0ZXN0cyBhbHNvIGlmIC0tZGlzYWJsZS1ubHMgaGFzIGJlZW4gZ2l2ZW4sCisgICBkbmwgYmVjYXVzZSB0aGV5IGFyZSBuZWVkZWQgZm9yICJtYWtlIGRpc3QiIHRvIHdvcmsuCisgCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC1ydW50aW1lL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyNDoyOC45NTM1MjAyMzEgLTA3MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXJ1bnRpbWUvcG8vTWFrZWZpbGUuaW4uaW4JMjAxMS0wMy0xNyAwMjoyODowNy41NzQzOTUxNDQgLTA3MDAKK0BAIC0xMCw2ICsxMCw5IEBACisgIworICMgT3JpZ2luOiBnZXR0ZXh0LTAuMTYKKyAKKysjIEhhcmRjb2RlIHRoaXMgdmFsdWUgZm9yIGdudXRscyBidWlsZGluZyBhZ2FpbnN0IGdwbHYyIGNvZGUKKytHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE3CisrCisgUEFDS0FHRSA9IEBQQUNLQUdFQAorIFZFUlNJT04gPSBAVkVSU0lPTkAKKyBQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK0luZGV4OiBnZXR0ZXh0LTAuMTYuMS9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9nZXR0ZXh0LXRvb2xzL3BvL01ha2VmaWxlLmluLmluCTIwMTEtMDMtMTcgMDI6MjQ6MjguOTUzNTIwMjMxIC0wNzAwCisrKysgZ2V0dGV4dC0wLjE2LjEvZ2V0dGV4dC10b29scy9wby9NYWtlZmlsZS5pbi5pbgkyMDExLTAzLTE3IDAyOjI4OjA3LjU3NDM5NTE0NCAtMDcwMAorQEAgLTEwLDYgKzEwLDkgQEAKKyAjCisgIyBPcmlnaW46IGdldHRleHQtMC4xNgorIAorKyMgSGFyZGNvZGUgdGhpcyB2YWx1ZSBmb3IgZ251dGxzIGJ1aWxkaW5nIGFnYWluc3QgZ3BsdjIgY29kZQorK0dFVFRFWFRfTUFDUk9fVkVSU0lPTiA9IDAuMTcKKysKKyBQQUNLQUdFID0gQFBBQ0tBR0VACisgVkVSU0lPTiA9IEBWRVJTSU9OQAorIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTYuMS9saW5rbGliX2Zyb21fMC4xNy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvbGlua2xpYl9mcm9tXzAuMTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyMTA2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE2LjEvbGlua2xpYl9mcm9tXzAuMTcucGF0Y2gKQEAgLTAsMCArMSw3MjAgQEAKKworIyBQdWxsZWQgZnJvbSBPcGVuRW1iZWRkZWQKKyMgCisjIENvbW1lbnRlZCBieTogU2F1bCBXb2xkIDxzYXVsLndvbGRAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9tNC9saWItbGluay5tNAkyMDA2LTExLTI3IDA5OjAxOjU4LjAwMDAwMDAwMCAtMDgwMAorKysrIGdldHRleHQtMC4xNi4xL2F1dG9jb25mLWxpYi1saW5rL200L2xpYi1saW5rLm00CTIwMTEtMDMtMTcgMDA6MzY6MDguNzEwODM2NzIwIC0wNzAwCitAQCAtNiwxMiArNiwxNCBAQAorIAorIGRubCBGcm9tIEJydW5vIEhhaWJsZS4KKyAKKy1BQ19QUkVSRVEoMi41MCkKKytBQ19QUkVSRVEoMi41NCkKKyAKKyBkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorIGRubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKyBkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorIGRubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrZG5sIFNldHMgYW5kIEFDX1NVQlNUcyB0aGUgTElCJHtOQU1FfV9QUkVGSVggdmFyaWFibGUgdG8gbm9uZW1wdHkgaWYgbGlibmFtZQorK2RubCB3YXMgZm91bmQgaW4gJHtMSUIke05BTUV9X1BSRUZJWH0vJGFjbF9saWJkaXJzdGVtLgorIEFDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9QUkVGSVhdKQorQEAgLTI0LDEzICsyNiwxNiBAQAorICAgICBhY19jdl9saWJbXU5hbWVbXV9saWJzPSIkTElCW11OQU1FIgorICAgICBhY19jdl9saWJbXU5hbWVbXV9sdGxpYnM9IiRMVExJQltdTkFNRSIKKyAgICAgYWNfY3ZfbGliW11OYW1lW11fY3BwZmxhZ3M9IiRJTkNbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeD0iJExJQltdTkFNRVtdX1BSRUZJWCIKKyAgIF0pCisgICBMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9saWJzIgorICAgTFRMSUJbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9sdGxpYnMiCisgICBJTkNbXU5BTUU9IiRhY19jdl9saWJbXU5hbWVbXV9jcHBmbGFncyIKKysgIExJQltdTkFNRVtdX1BSRUZJWD0iJGFjX2N2X2xpYltdTmFtZVtdX3ByZWZpeCIKKyAgIEFDX0xJQl9BUFBFTkRUT1ZBUihbQ1BQRkxBR1NdLCBbJElOQ11OQU1FKQorICAgQUNfU1VCU1QoW0xJQl1OQU1FKQorICAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUVbX1BSRUZJWF0pCisgICBkbmwgQWxzbyBzZXQgSEFWRV9MSUJbXU5BTUUgc28gdGhhdCBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgY2FuIHJldXNlIHRoZQorICAgZG5sIHJlc3VsdHMgb2YgdGhpcyBzZWFyY2ggd2hlbiB0aGlzIGxpYnJhcnkgYXBwZWFycyBhcyBhIGRlcGVuZGVuY3kuCisgICBIQVZFX0xJQltdTkFNRT15ZXMKK0BAIC00Niw2ICs1MSw4IEBACisgZG5sIExUTElCJHtOQU1FfSB2YXJpYWJsZXMgYW5kIGF1Z21lbnRzIHRoZSBDUFBGTEFHUyB2YXJpYWJsZSwgYW5kCisgZG5sICNkZWZpbmVzIEhBVkVfTElCJHtOQU1FfSB0byAxLiBPdGhlcndpc2UsIGl0IHNldHMgYW5kIEFDX1NVQlNUcworIGRubCBIQVZFX0xJQiR7TkFNRX09bm8gYW5kIExJQiR7TkFNRX0gYW5kIExUTElCJHtOQU1FfSB0byBlbXB0eS4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9X1BSRUZJWCB2YXJpYWJsZSB0byBub25lbXB0eSBpZiBsaWJuYW1lCisrZG5sIHdhcyBmb3VuZCBpbiAke0xJQiR7TkFNRX1fUFJFRklYfS8kYWNsX2xpYmRpcnN0ZW0uCisgQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisgWworICAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKK0BAIC04MiwxNyArODksMjQgQEAKKyAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorICAgICBMSUJbXU5BTUU9CisgICAgIExUTElCW11OQU1FPQorKyAgICBMSUJbXU5BTUVbXV9QUkVGSVg9CisrCisgICBmaQorICAgQUNfU1VCU1QoW0hBVkVfTElCXU5BTUUpCisgICBBQ19TVUJTVChbTElCXU5BTUUpCisgICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIEFDX1NVQlNUKFtMSUJdTkFNRVtfUFJFRklYXSkKKyAgIHVuZGVmaW5lKFtOYW1lXSkKKyAgIHVuZGVmaW5lKFtOQU1FXSkKKyBdKQorIAorIGRubCBEZXRlcm1pbmUgdGhlIHBsYXRmb3JtIGRlcGVuZGVudCBwYXJhbWV0ZXJzIG5lZWRlZCB0byB1c2UgcnBhdGg6CistZG5sIGxpYmV4dCwgc2hsaWJleHQsIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsCistZG5sIGhhcmRjb2RlX2RpcmVjdCwgaGFyZGNvZGVfbWludXNfTC4KKytkbmwgICBhY2xfbGliZXh0LAorK2RubCAgIGFjbF9zaGxpYmV4dCwKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywKKytkbmwgICBhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwKKytkbmwgICBhY2xfaGFyZGNvZGVfZGlyZWN0LAorK2RubCAgIGFjbF9oYXJkY29kZV9taW51c19MLgorIEFDX0RFRlVOKFtBQ19MSUJfUlBBVEhdLAorIFsKKyAgIGRubCBUZWxsIGF1dG9tYWtlID49IDEuMTAgdG8gY29tcGxhaW4gaWYgY29uZmlnLnJwYXRoIGlzIG1pc3NpbmcuCitAQCAtMTA5LDEyICsxMjMsMTQgQEAKKyAgICAgYWNsX2N2X3JwYXRoPWRvbmUKKyAgIF0pCisgICB3bD0iJGFjbF9jdl93bCIKKy0gIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCistICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKy0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKy0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKy0gIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCistICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCIKKysgIGFjbF9zaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGFjbF9saWJuYW1lX3NwZWM9IiRhY2xfY3ZfbGlibmFtZV9zcGVjIgorKyAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJyYXJ5X25hbWVzX3NwZWMiCisrICBhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0iJGFjbF9jdl9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorKyAgYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGFjbF9oYXJkY29kZV9kaXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0IgorKyAgYWNsX2hhcmRjb2RlX21pbnVzX0w9IiRhY2xfY3ZfaGFyZGNvZGVfbWludXNfTCIKKyAgIGRubCBEZXRlcm1pbmUgd2hldGhlciB0aGUgdXNlciB3YW50cyBycGF0aCBoYW5kbGluZyBhdCBhbGwuCisgICBBQ19BUkdfRU5BQkxFKHJwYXRoLAorICAgICBbICAtLWRpc2FibGUtcnBhdGggICAgICAgICBkbyBub3QgaGFyZGNvZGUgcnVudGltZSBsaWJyYXJ5IHBhdGhzXSwKK0BAIC0xMjQsMjAgKzE0MCwyNCBAQAorIGRubCBBQ19MSUJfTElOS0ZMQUdTX0JPRFkobmFtZSBbLCBkZXBlbmRlbmNpZXNdKSBzZWFyY2hlcyBmb3IgbGlibmFtZSBhbmQKKyBkbmwgdGhlIGxpYnJhcmllcyBjb3JyZXNwb25kaW5nIHRvIGV4cGxpY2l0IGFuZCBpbXBsaWNpdCBkZXBlbmRlbmNpZXMuCisgZG5sIFNldHMgdGhlIExJQiR7TkFNRX0sIExUTElCJHtOQU1FfSBhbmQgSU5DJHtOQU1FfSB2YXJpYWJsZXMuCisrZG5sIEFsc28sIHNldHMgdGhlIExJQiR7TkFNRX1fUFJFRklYIHZhcmlhYmxlIHRvIG5vbmVtcHR5IGlmIGxpYm5hbWUgd2FzIGZvdW5kCisrZG5sIGluICR7TElCJHtOQU1FfV9QUkVGSVh9LyRhY2xfbGliZGlyc3RlbS4KKyBBQ19ERUZVTihbQUNfTElCX0xJTktGTEFHU19CT0RZXSwKKyBbCisgICBBQ19SRVFVSVJFKFtBQ19MSUJfUFJFUEFSRV9NVUxUSUxJQl0pCisgICBkZWZpbmUoW05BTUVdLFt0cmFuc2xpdChbJDFdLFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pXSkKKysgIGRubCBBdXRvY29uZiA+PSAyLjYxIHN1cHBvcnRzIGRvdHMgaW4gLS13aXRoIG9wdGlvbnMuCisrICBkZWZpbmUoW05fQV9NX0VdLFttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbbTRfUEFDS0FHRV9WRVJTSU9OXSksWzIuNjFdKSxbLTFdLFt0cmFuc2xpdChbJDFdLFsuXSxbX10pXSxbJDFdKV0pCisgICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKyAgIHVzZV9hZGRpdGlvbmFsPXllcworICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKyAgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisgICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKyAgIF0pCistICBBQ19MSUJfQVJHX1dJVEgoW2xpYiQxLXByZWZpeF0sCistWyAgLS13aXRoLWxpYiQxLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorLSAgLS13aXRob3V0LWxpYiQxLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWIkMSBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorKyAgQUNfTElCX0FSR19XSVRIKFtsaWJdTl9BX01fRVstcHJlZml4XSwKKytbICAtLXdpdGgtbGliXU5fQV9NX0VbLXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWIkMSBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorKyAgLS13aXRob3V0LWxpYl1OX0FfTV9FWy1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKyBbCisgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorICAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCitAQCAtMTU4LDYgKzE3OCw3IEBACisgICBMSUJbXU5BTUU9CisgICBMVExJQltdTkFNRT0KKyAgIElOQ1tdTkFNRT0KKysgIExJQltdTkFNRVtdX1BSRUZJWD0KKyAgIHJwYXRoZGlycz0KKyAgIGx0cnBhdGhkaXJzPQorICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQorQEAgLTE5NywyNyArMjE4LDUzIEBACisgICAgICAgICAgIGZvdW5kX2xhPQorICAgICAgICAgICBmb3VuZF9zbz0KKyAgICAgICAgICAgZm91bmRfYT0KKysgICAgICAgICAgZXZhbCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1saWIkbmFtZQorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgIHNocmV4dD0iLiRhY2xfc2hsaWJleHQiICAgICAgICAgICAgICMgdHlwaWNhbGx5OiBzaHJleHQ9LnNvCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBzaHJleHQ9CisrICAgICAgICAgIGZpCisgICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgJiYgeyB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiOyB9OyB9OyB0aGVuCistICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRhZGRpdGlvbmFsX2xpYmRpciIKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IgorKyAgICAgICAgICAgIGRpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgIGRubCBUaGUgc2FtZSBjb2RlIGFzIGluIHRoZSBsb29wIGJlbG93OgorKyAgICAgICAgICAgIGRubCBGaXJzdCBsb29rIGZvciBhIHNoYXJlZCBsaWJyYXJ5LgorKyAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGlibmFtZSRzaHJleHQiCisgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuZGxsLmEiCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbgorKyAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25lIFwKKysgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4gLXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiCisrICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRmIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRmIgorKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIgorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCIKKyAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorLSAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKy0gICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCistICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuCisrICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSIKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgZmkKK0BAIC0yMjcsMjYgKzI3NCw0NCBAQAorICAgICAgICAgICAgICAgY2FzZSAiJHgiIGluCisgICAgICAgICAgICAgICAgIC1MKikKKyAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkeCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2AKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJleHQiIFwKKy0gICAgICAgICAgICAgICAgICAgICAmJiB7IHRlc3QgLWYgIiRkaXIvbGliJG5hbWUuJHNobGliZXh0IiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgIiRzaGxpYmV4dCIgPSBkbGwgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmRsbC5hIjsgfTsgfTsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICBkbmwgRmlyc3QgbG9vayBmb3IgYSBzaGFyZWQgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRzaHJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0IgorICAgICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS5kbGwuYSIKKy0gICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7IGRvbmUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRcXFxcLiwsIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGAKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1lcz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCIKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZG5sIFRoZW4gbG9vayBmb3IgYSBzdGF0aWMgbGlicmFyeS4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciIKKy0gICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci9saWIkbmFtZS4kbGliZXh0IgorLSAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyL2xpYiRuYW1lLmxhIgorLSAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIgorICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgIDs7CitAQCAtMjgyLDEyICszNDcsMTIgQEAKKyAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3VuZF9kaXIiCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgIGRubCBUaGUgaGFyZGNvZGluZyBpbnRvICRMSUJOQU1FIGlzIHN5c3RlbSBkZXBlbmRlbnQuCistICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorICAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisgICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgZG5sIFVzZSBhbiBleHBsaWNpdCBvcHRpb24gdG8gaGFyZGNvZGUgRElSIGludG8gdGhlIHJlc3VsdGluZworICAgICAgICAgICAgICAgICAgICAgZG5sIGJpbmFyeS4KKyAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorQEAgLTMxOCwxMyArMzgzLDEzIEBACisgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGZvdW5kX2RpciIKKyAgICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIEZJWE1FOiBOb3Qgc3VyZSB3aGV0aGVyIHdlIHNob3VsZCB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sICItTCRmb3VuZF9kaXIgLWwkbmFtZSIgb3IgIi1MJGZvdW5kX2RpciAkZm91bmRfc28iCisgICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgICAgICAgZG5sIFdlIGNhbm5vdCB1c2UgJGhhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkYWNsX2hhcmRjb2RlX3J1bnBhdGhfdmFyIGFuZCBMRF9SVU5fUEFUSAorICAgICAgICAgICAgICAgICAgICAgICBkbmwgaGVyZSwgYmVjYXVzZSB0aGlzIGRvZXNuJ3QgZml0IGluIGZsYWdzIHBhc3NlZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZG5sIGNvbXBpbGVyLiBTbyBnaXZlIHVwLiBObyBoYXJkY29kaW5nLiBUaGlzIGFmZmVjdHMgb25seQorICAgICAgICAgICAgICAgICAgICAgICBkbmwgdmVyeSBvbGQgc3lzdGVtcy4KK0BAIC01MTIsMTggKzU3NywxOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCistICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlciBtdXN0CisgICAgICAgZG5sIHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4gV2UgY2FuIGFycmFuZ2UgdGhhdCBmb3IgYQorICAgICAgIGRubCBzaW5nbGUgbGlicmFyeSwgYnV0IG5vdCB3aGVuIG1vcmUgdGhhbiBvbmUgJExJQk5BTUVzIGFyZSB1c2VkLgorICAgICAgIGFsbGRpcnM9CisgICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworLSAgICAgICAgYWxsZGlycz0iJHthbGxkaXJzfSR7YWxsZGlyczorJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIKKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRfZGlyIgorICAgICAgIGRvbmUKKy0gICAgICBkbmwgTm90ZTogaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyB1c2VzICRsaWJkaXIgYW5kICR3bC4KKysgICAgICBkbmwgTm90ZTogYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgdXNlcyAkbGliZGlyIGFuZCAkd2wuCisgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorICAgICAgIGxpYmRpcj0iJGFsbGRpcnMiCistICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZsYWciCisgICAgIGVsc2UKK0BAIC01MzEsNyArNTk2LDcgQEAKKyAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvCisgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisgICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiCistICAgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKyAgICAgICBkb25lCitAQCAtNjQyLDMgKzcwNyw3OSBAQAorICAgZmkKKyAgIEFDX1NVQlNUKFskMV0pCisgXSkKKysKKytkbmwgRm9yIHRob3NlIGNhc2VzIHdoZXJlIGEgdmFyaWFibGUgY29udGFpbnMgc2V2ZXJhbCAtTCBhbmQgLWwgb3B0aW9ucworK2RubCByZWZlcnJpbmcgdG8gdW5rbm93biBsaWJyYXJpZXMgYW5kIGRpcmVjdG9yaWVzLCB0aGlzIG1hY3JvIGRldGVybWluZXMgdGhlCisrZG5sIG5lY2Vzc2FyeSBhZGRpdGlvbmFsIGxpbmtlciBvcHRpb25zIGZvciB0aGUgcnVudGltZSBwYXRoLgorK2RubCBBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCUyhbTERBRERWQVJdLCBbTElCU1ZBTFVFXSwgW1VTRS1MSUJUT09MXSkKKytkbmwgc2V0cyBMREFERFZBUiB0byBsaW5rZXIgb3B0aW9ucyBuZWVkZWQgdG9nZXRoZXIgd2l0aCBMSUJTVkFMVUUuCisrZG5sIElmIFVTRS1MSUJUT09MIGV2YWx1YXRlcyB0byBub24tZW1wdHksIGxpbmtpbmcgd2l0aCBsaWJ0b29sIGlzIGFzc3VtZWQsCisrZG5sIG90aGVyd2lzZSBsaW5raW5nIHdpdGhvdXQgbGlidG9vbCBpcyBhc3N1bWVkLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0ZST01fTElCU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1JQQVRIXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX01VTFRJTElCXSkKKysgICQxPQorKyAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgIT0gbm87IHRoZW4KKysgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBkaXJlY3RvcmllcyBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICBkbmwgYmluYXJ5LgorKyAgICAgIHJwYXRoZGlycz0KKysgICAgICBuZXh0PQorKyAgICAgIGZvciBvcHQgaW4gJDI7IGRvCisrICAgICAgICBpZiB0ZXN0IC1uICIkbmV4dCI7IHRoZW4KKysgICAgICAgICAgZGlyPSIkbmV4dCIKKysgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICBpZiB0ZXN0ICJYJGRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSI7IHRoZW4KKysgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgZmkKKysgICAgICAgICAgbmV4dD0KKysgICAgICAgIGVsc2UKKysgICAgICAgICAgY2FzZSAkb3B0IGluCisrICAgICAgICAgICAgLUwpIG5leHQ9eWVzIDs7CisrICAgICAgICAgICAgLUwqKSBkaXI9YGVjaG8gIlgkb3B0IiB8IHNlZCAtZSAncyxeWC1MLCwnYAorKyAgICAgICAgICAgICAgICAgZG5sIE5vIG5lZWQgdG8gaGFyZGNvZGUgdGhlIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuCisrICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgIG5leHQ9IDs7CisrICAgICAgICAgICAgKikgbmV4dD0gOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAiWCRycGF0aGRpcnMiICE9ICJYIjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiIiQzIiI7IHRoZW4KKysgICAgICAgICAgZG5sIGxpYnRvb2wgaXMgdXNlZCBmb3IgbGlua2luZy4gVXNlIC1SIG9wdGlvbnMuCisrICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfS1SJGRpciIKKysgICAgICAgICAgZG9uZQorKyAgICAgICAgZWxzZQorKyAgICAgICAgICBkbmwgVGhlIGxpbmtlciBpcyB1c2VkIGZvciBsaW5raW5nIGRpcmVjdGx5LgorKyAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFdlaXJkIHBsYXRmb3JtOiBvbmx5IHRoZSBsYXN0IC1ycGF0aCBvcHRpb24gY291bnRzLCB0aGUgdXNlcgorKyAgICAgICAgICAgIGRubCBtdXN0IHBhc3MgYWxsIHBhdGggZWxlbWVudHMgaW4gb25lIG9wdGlvbi4KKysgICAgICAgICAgICBhbGxkaXJzPQorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZGlyIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBhY2xfc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgbGliZGlyPSIkYWxsZGlycyIKKysgICAgICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgIGxpYmRpcj0iJGFjbF9zYXZlX2xpYmRpciIKKysgICAgICAgICAgICAkMT0iJGZsYWciCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBkbmwgVGhlIC1ycGF0aCBvcHRpb25zIGFyZSBjdW11bGF0aXZlLgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICAgICAgICAgIGxpYmRpcj0iJGRpciIKKysgICAgICAgICAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgICAgICAgICAkMT0iJHskMX0keyQxOisgfSRmbGFnIgorKyAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgZmkKKysgIGZpCisrICBBQ19TVUJTVChbJDFdKQorK10pCitJbmRleDogZ2V0dGV4dC0wLjE2LjEvYXV0b2NvbmYtbGliLWxpbmsvY29uZmlnLnJwYXRoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2V0dGV4dC0wLjE2LjEub3JpZy9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAwNi0xMS0yNyAwOTowMTo1OC4wMDAwMDAwMDAgLTA4MDAKKysrKyBnZXR0ZXh0LTAuMTYuMS9hdXRvY29uZi1saWItbGluay9jb25maWcucnBhdGgJMjAxMS0wMy0xNyAwMDozMzoyMy4zMzY1Mzk0OTAgLTA3MDAKK0BAIC0yLDcgKzIsNyBAQAorICMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisgIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisgIworLSMgICBDb3B5cmlnaHQgMTk5Ni0yMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisgIyAgIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisgIworQEAgLTQ3LDYgKzQ3LDE4IEBACisgZG9uZQorIGNjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAKKysjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorKworK2ZvciBjY190ZW1wIGluICRDQyIiOyBkbworKyAgY2FzZSAkY2NfdGVtcCBpbgorKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisrICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisrICAgIFwtKikgOzsKKysgICAgKikgYnJlYWs7OworKyAgZXNhYworK2RvbmUKKytjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisrCisgIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMuCisgCisgd2w9CitAQCAtNjQsNyArNzYsMTQgQEAKKyAgICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKy0gICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorKyAgICBkYXJ3aW4qKQorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgICB4bGMqKQorKyAgICAgICAgICB3bD0nLVdsLCcKKysgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgICAgOzsKKysgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICA7OworICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgICB3bD0nLVdsLCcKK0BAIC03NCw3ICs5Myw3IEBACisgICAgICAgOzsKKyAgICAgbmV3c29zNikKKyAgICAgICA7OworLSAgICBsaW51eCopCisrICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICAgICB3bD0nLVdsLCcKK0BAIC0xMDAsNyArMTE5LDcgQEAKKyAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CistICAgIHNjbzMuMnY1KikKKysgICAgcmRvcyopCisgICAgICAgOzsKKyAgICAgc29sYXJpcyopCisgICAgICAgd2w9Jy1XbCwnCitAQCAtMTA4LDExICsxMjcsMTQgQEAKKyAgICAgc3Vub3M0KikKKyAgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgIDs7CistICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKysgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgIHdsPSctV2wsJworICAgICAgIDs7CisgICAgIHN5c3Y0Kk1QKikKKyAgICAgICA7OworKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorKyAgICAgIHdsPSctV2wsJworKyAgICAgIDs7CisgICAgIHVuaWNvcyopCisgICAgICAgd2w9Jy1XbCwnCisgICAgICAgOzsKK0BAIC0xNDEsNiArMTYzLDEwIEBACisgICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgIHdpdGhfZ251X2xkPXllcworICAgICA7OworKyAgaW50ZXJpeCopCisrICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisrICAgIHdpdGhfZ251X2xkPXllcworKyAgICA7OworICAgb3BlbmJzZCopCisgICAgIHdpdGhfZ251X2xkPW5vCisgICAgIDs7CitAQCAtMTg5LDExICsyMTUsMTEgQEAKKyAgICAgICAgIGxkX3NobGlicz1ubworICAgICAgIGZpCisgICAgICAgOzsKKy0gICAgaW50ZXJpeDMqKQorKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICAgOzsKKy0gICAgbGludXgqKQorKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIDoKKyAgICAgICBlbHNlCitAQCAtMjgwLDcgKzMwNiw3IEBACisgICAgICAgICAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCistICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgICAgIDoKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKyAgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKK0BAIC0zNTksNyArMzg1LDcgQEAKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICA7OworLSAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgICA7OworQEAgLTQxMiwxOCArNDM4LDIyIEBACisgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICAgOzsKKyAgICAgb3BlbmJzZCopCistICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKysgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworKyAgICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisrICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbgorKyAgICAgICAgICAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisrICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworKyAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgZmkKKyAgICAgICBlbHNlCistICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKy0gICAgICAgICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCisrICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorICAgICAgIDs7CisgICAgIG9zMiopCitAQCAtNDcxLDcgKzUwMSw3IEBACisgICAgICAgICBsZF9zaGxpYnM9eWVzCisgICAgICAgZmkKKyAgICAgICA7OworLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KikKKysgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgIDs7CisgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCitAQCAtNDg4LDMzICs1MTgsNTEgQEAKKyAKKyAjIENoZWNrIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcworICMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUi4KKysjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorKyMgb25seSBhYm91dCB0aGUgb25lIHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLiBUaGlzIGlzIHRoZSBsYXN0CisrIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKysjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCisrbGlicmFyeV9uYW1lc19zcGVjPSAgICAgICMgdGhlIGxhc3QgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNAorIGxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCisgY2FzZSAiJGhvc3Rfb3MiIGluCisgICBhaXgzKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYWl4NCogfCBhaXg1KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBhbWlnYW9zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgICA7OworICAgYmVvcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgYnNkaVs0NV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgc2hyZXh0PS5kbGwKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYSAkbGlibmFtZS5saWInCisgICAgIDs7CisgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICBzaHJleHQ9LmR5bGliCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZGd1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgZnJlZWJzZDEqKQorICAgICA7OworLSAga2ZyZWVic2QqLWdudSkKKy0gICAgOzsKKyAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKysgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisrICAgICAgZnJlZWJzZFsxMjNdKikKKysgICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcgOzsKKysgICAgICAqKQorKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisrICAgIGVzYWMKKyAgICAgOzsKKyAgIGdudSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgIGNhc2UgJGhvc3RfY3B1IGluCitAQCAtNTI4LDEwICs1NzYsMTMgQEAKKyAgICAgICAgIHNocmV4dD0uc2wKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CistICBpbnRlcml4MyopCisrICBpbnRlcml4WzMtOV0qKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorQEAgLTU0OCwzMyArNTk5LDQ2IEBACisgICAgIDs7CisgICBsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICAgICA7OworLSAgbGludXgqKQorKyAgbGludXgqIHwgaypic2QqLWdudSkKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBrbmV0YnNkKi1nbnUpCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgbmV0YnNkKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBuZXdzb3M2KQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG50by1xbngqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICAgOzsKKyAgIG9wZW5ic2QqKQorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgIDs7CisgICBvczIqKQorICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgICBzaHJleHQ9LmRsbAorKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgIDs7CisgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc29sYXJpcyopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3Vub3M0KikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgICA7OworICAgc3lzdjQgfCBzeXN2NC4zKikKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgIDs7CisgICBzeXN2NCpNUCopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgICA7OworICAgdXRzNCopCisgICAgIDs7CitAQCAtNTgzLDYgKzY0Nyw4IEBACisgc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKyBlc2NhcGVkX3dsPWBlY2hvICJYJHdsIiB8IHNlZCAtZSAncy9eWC8vJyAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgc2hsaWJleHQ9YGVjaG8gIiRzaHJleHQiIHwgc2VkIC1lICdzLF5cLiwsJ2AKKytlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKytlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYz1gZWNobyAiWCRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyBlc2NhcGVkX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9YGVjaG8gIlgkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorIAorIExDX0FMTD1DIHNlZCAtZSAncy9eXChbYS16QS1aMC05X10qXCk9L2FjbF9jdl9cMT0vJyA8PEVPRgorQEAgLTU5Niw2ICs2NjIsMTIgQEAKKyAjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgInNvIikuCisgc2hsaWJleHQ9IiRzaGxpYmV4dCIKKyAKKysjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorK2xpYm5hbWVfc3BlYz0iJGVzY2FwZWRfbGlibmFtZV9zcGVjIgorKworKyMgTGlicmFyeSBuYW1lcyB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2hlbiBwYXNzZWQgLWxOQU1FLgorK2xpYnJhcnlfbmFtZXNfc3BlYz0iJGVzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjIgorKworICMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LTAuMTkuNC9wYXJhbGxlbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjQvcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMmM5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC0wLjE5LjQvcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAoraW5zdGFsIGxpYmdldHRleHRsaWIuYSBiZWZvcmUgcmVtb3ZpbmcgaXQKKworSW4gYSBtdWx0aXBsZSBqb2IgYnVpbGQsIE1ha2VmaWxlIGNhbiBzaW11bHRhbmVvdXNseQorYmUgaW5zdGFsbGluZyBhbmQgcmVtb3ZpbmcgbGliZ2V0dGV4dGxpYi5hLiAgV2Ugc2VyaWFsaXplCit0aGUgb3BlcmF0aW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworLS0tIGEvZ2V0dGV4dC10b29scy9nbnVsaWItbGliL01ha2VmaWxlLmFtCisrKysgYi9nZXR0ZXh0LXRvb2xzL2dudWxpYi1saWIvTWFrZWZpbGUuYW0KK0BAIC01Nyw2ICs1NywxMCBAQCBlbmRpZgorICMgUnVsZXMgZ2VuZXJhdGVkIGFuZCBjb2xsZWN0ZWQgYnkgZ251bGliLXRvb2wuCisgaW5jbHVkZSBNYWtlZmlsZS5nbnVsaWIKKyAKKysjIGRlZmluZWQgaW4gTWFrZWZpbGUuZ251bGliIGJ1dCBtaXNzaW5nIHRoaXMgZGVwZW5kZW5jeQorKyMKKytpbnN0YWxsLWV4ZWMtY2xlYW46IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKysKKyAjIFdoaWNoIGNsYXNzZXMgdG8gZXhwb3J0IGZyb20gdGhlIHNoYXJlZCBsaWJyYXJ5LgorIE1PT1BQRkxBR1MgKz0gLS1kbGxleHBvcnQ9c3R5bGVkX29zdHJlYW0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC8wMDAxLVBBVENILURpc2FibGUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWYyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1tQQVRDSF0gRGlzYWJsZSB0aGUgdGVzdCB0byBjb252ZXJ0IGV1Yy1qcAorCitSZW1vdmUgdGhlIHRlc3QgIlRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6CitObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMgcHJvdmlkZWQiCitzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IEhQLVVYIGFuZCBpZiB0aGUgZXVjLWpwIGlzIG5vdAoraW5zdGFsbGVkIG9uIHRoZSBob3N0LCB0aGUgZGVwZW5kZW5jZSB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGUtbmF0aXZlIGJ1aWxkaW5nIGZhaWwuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGljb252Lm00IHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2ljb252Lm00IGIvaWNvbnYubTQKK2luZGV4IDRlMzczNjMuLjM1ZjU0YmQgMTAwNjQ0CistLS0gYS9pY29udi5tNAorKysrIGIvaWNvbnYubTQKK0BAIC0xNjUsNiArMTY1LDcgQEAgQUNfREVGVU4oW0FNX0lDT05WX0xJTktdLAorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKysjaWYgMAorICAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzCisgICAgICBwcm92aWRlZC4gICovCisgICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4gICovCitAQCAtMTc2LDYgKzE3Nyw3IEBAIEFDX0RFRlVOKFtBTV9JQ09OVl9MSU5LXSwKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyBdXSldLAorICAgICAgICAgICBbYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXNdLCAsCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L0NPUFlJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQxMWQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9DT1BZSU5HCkBAIC0wLDAgKzEsNCBAQAorZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK2RubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4gYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvTWFrZWZpbGUuaW4uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwNmJhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9NYWtlZmlsZS5pbi5pbgpAQCAtMCwwICsxLDQ2NSBAQAorIyBNYWtlZmlsZSBmb3IgUE8gZGlyZWN0b3J5IGluIGFueSBwYWNrYWdlIHVzaW5nIEdOVSBnZXR0ZXh0LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgMjAwMC0yMDA3LCAyMDA5LTIwMTAgYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAZ251LmFpLm1pdC5lZHU+CisjCisjIFRoaXMgZmlsZSBjYW4gYmUgY29waWVkIGFuZCB1c2VkIGZyZWVseSB3aXRob3V0IHJlc3RyaWN0aW9ucy4gIEl0IGNhbgorIyBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorIyBmdW5jdGlvbmFsaXR5LgorIyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiBHTlUgZ2V0dGV4dCBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgaXMgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIE9yaWdpbjogZ2V0dGV4dC0wLjE5CitHRVRURVhUX01BQ1JPX1ZFUlNJT04gPSAwLjE5CisKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorCitTRUQgPSBAU0VEQAorU0hFTEwgPSAvYmluL3NoCitAU0VUX01BS0VACisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2RhdGFyb290ZGlyID0gQGRhdGFyb290ZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKK2dldHRleHRzcmNkaXIgPSAkKGRhdGFkaXIpL2dldHRleHQvcG8KKworSU5TVEFMTCA9IEBJTlNUQUxMQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKKworTUtESVJfUCA9IEBNS0RJUl9QQAorCitHTVNHRk1UXyA9IEBHTVNHRk1UQAorR01TR0ZNVF9ubyA9IEBHTVNHRk1UQAorR01TR0ZNVF95ZXMgPSBAR01TR0ZNVF8wMTVACitHTVNHRk1UID0gJChHTVNHRk1UXyQoVVNFX01TR0NUWFQpKQorTVNHRk1UXyA9IEBNU0dGTVRACitNU0dGTVRfbm8gPSBATVNHRk1UQAorTVNHRk1UX3llcyA9IEBNU0dGTVRfMDE1QAorTVNHRk1UID0gJChNU0dGTVRfJChVU0VfTVNHQ1RYVCkpCitYR0VUVEVYVF8gPSBAWEdFVFRFWFRACitYR0VUVEVYVF9ubyA9IEBYR0VUVEVYVEAKK1hHRVRURVhUX3llcyA9IEBYR0VUVEVYVF8wMTVACitYR0VUVEVYVCA9ICQoWEdFVFRFWFRfJChVU0VfTVNHQ1RYVCkpCitNU0dNRVJHRSA9IG1zZ21lcmdlCitNU0dNRVJHRV9VUERBVEUgPSBATVNHTUVSR0VAIC0tdXBkYXRlCitNU0dJTklUID0gbXNnaW5pdAorTVNHQ09OViA9IG1zZ2NvbnYKK01TR0ZJTFRFUiA9IG1zZ2ZpbHRlcgorCitQT0ZJTEVTID0gQFBPRklMRVNACitHTU9GSUxFUyA9IEBHTU9GSUxFU0AKK1VQREFURVBPRklMRVMgPSBAVVBEQVRFUE9GSUxFU0AKK0RVTU1ZUE9GSUxFUyA9IEBEVU1NWVBPRklMRVNACitESVNURklMRVMuY29tbW9uID0gTWFrZWZpbGUuaW4uaW4gcmVtb3ZlLXBvdGNkYXRlLnNpbiBcCiskKERJU1RGSUxFUy5jb21tb24uZXh0cmExKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEyKSAkKERJU1RGSUxFUy5jb21tb24uZXh0cmEzKQorRElTVEZJTEVTID0gJChESVNURklMRVMuY29tbW9uKSBNYWtldmFycyBQT1RGSUxFUy5pbiBcCiskKFBPRklMRVMpICQoR01PRklMRVMpIFwKKyQoRElTVEZJTEVTLmV4dHJhMSkgJChESVNURklMRVMuZXh0cmEyKSAkKERJU1RGSUxFUy5leHRyYTMpCisKK1BPVEZJTEVTID0gXAorCitDQVRBTE9HUyA9IEBDQVRBTE9HU0AKKworUE9GSUxFU0RFUFNfID0gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QKK1BPRklMRVNERVBTX3llcyA9ICQoUE9GSUxFU0RFUFNfKQorUE9GSUxFU0RFUFNfbm8gPQorUE9GSUxFU0RFUFMgPSAkKFBPRklMRVNERVBTXyQoUE9fREVQRU5EU19PTl9QT1QpKQorCitESVNURklMRVNERVBTXyA9IHVwZGF0ZS1wbworRElTVEZJTEVTREVQU195ZXMgPSAkKERJU1RGSUxFU0RFUFNfKQorRElTVEZJTEVTREVQU19ubyA9CitESVNURklMRVNERVBTID0gJChESVNURklMRVNERVBTXyQoRElTVF9ERVBFTkRTX09OX1VQREFURV9QTykpCisKKyMgTWFrZXZhcnMgZ2V0cyBpbnNlcnRlZCBoZXJlLiAoRG9uJ3QgcmVtb3ZlIHRoaXMgbGluZSEpCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLnBvIC5nbW8gLm1vIC5zZWQgLnNpbiAubm9wIC5wby1jcmVhdGUgLnBvLXVwZGF0ZQorCisucG8ubW86CisJQGVjaG8gIiQoTVNHRk1UKSAtYyAtbyAkQCAkPCI7IFwKKwkkKE1TR0ZNVCkgLWMgLW8gdC0kQCAkPCAmJiBtdiB0LSRAICRACisKKy5wby5nbW86CisJQGxhbmc9YGVjaG8gJCogfCBzZWQgLWUgJ3MsLiovLCwnYDsgXAorCXRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCWVjaG8gIiQke2NkY21kfXJtIC1mICQke2xhbmd9LmdtbyAmJiAkKEdNU0dGTVQpIC1jIC0tc3RhdGlzdGljcyAtLXZlcmJvc2UgLW8gJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvIjsgXAorCWNkICQoc3JjZGlyKSAmJiBybSAtZiAkJHtsYW5nfS5nbW8gJiYgJChHTVNHRk1UKSAtYyAtLXN0YXRpc3RpY3MgLS12ZXJib3NlIC1vIHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LnBvICYmIG12IHQtJCR7bGFuZ30uZ21vICQke2xhbmd9LmdtbworCisuc2luLnNlZDoKKwlzZWQgLWUgJy9eIy9kJyAkPCA+IHQtJEAKKwltdiB0LSRAICRACisKKworYWxsOiBhbGwtQFVTRV9OTFNACisKK2FsbC15ZXM6IHN0YW1wLXBvCithbGwtbm86CisKKyMgRW5zdXJlIHRoYXQgdGhlIGdldHRleHQgbWFjcm9zIGFuZCB0aGlzIE1ha2VmaWxlLmluLmluIGFyZSBpbiBzeW5jLgorQ0hFQ0tfTUFDUk9fVkVSU0lPTiA9IFwKKwl0ZXN0ICIkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikiID0gIkBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiBcCisJICB8fCB7IGVjaG8gIioqKiBlcnJvcjogZ2V0dGV4dCBpbmZyYXN0cnVjdHVyZSBtaXNtYXRjaDogdXNpbmcgYSBNYWtlZmlsZS5pbi5pbiBmcm9tIGdldHRleHQgdmVyc2lvbiAkKEdFVFRFWFRfTUFDUk9fVkVSU0lPTikgYnV0IHRoZSBhdXRvY29uZiBtYWNyb3MgYXJlIGZyb20gZ2V0dGV4dCB2ZXJzaW9uIEBHRVRURVhUX01BQ1JPX1ZFUlNJT05AIiAxPiYyOyBcCisJICAgICAgIGV4aXQgMTsgXAorCSAgICAgfQorCisjICQoc3JjZGlyKS8kKERPTUFJTikucG90IGlzIG9ubHkgY3JlYXRlZCB3aGVuIG5lZWRlZC4gV2hlbiB4Z2V0dGV4dCBmaW5kcyBubworIyBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcywgbm8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgaXMgY3JlYXRlZCAoYmVjYXVzZQorIyB3ZSBkb24ndCB3YW50IHRvIGJvdGhlciB0cmFuc2xhdG9ycyB3aXRoIGVtcHR5IFBPVCBmaWxlcykuIFdlIGFzc3VtZSB0aGF0CisjIExJTkdVQVMgaXMgZW1wdHkgaW4gdGhpcyBjYXNlLCBpLmUuICQoUE9GSUxFUykgYW5kICQoR01PRklMRVMpIGFyZSBlbXB0eS4KKyMgSW4gdGhpcyBjYXNlLCBzdGFtcC1wbyBpcyBhIG5vcCAoaS5lLiBhIHBob255IHRhcmdldCkuCisKKyMgc3RhbXAtcG8gaXMgYSB0aW1lc3RhbXAgZGVub3RpbmcgdGhlIGxhc3QgdGltZSBhdCB3aGljaCB0aGUgQ0FUQUxPR1MgaGF2ZQorIyBiZWVuIGxvb3NlbHkgdXBkYXRlZC4gSXRzIHB1cnBvc2UgaXMgdGhhdCB3aGVuIGEgZGV2ZWxvcGVyIG9yIHRyYW5zbGF0b3IKKyMgY2hlY2tzIG91dCB0aGUgcGFja2FnZSB2aWEgQ1ZTLCBhbmQgdGhlICQoRE9NQUlOKS5wb3QgZmlsZSBpcyBub3QgaW4gQ1ZTLAorIyAibWFrZSIgd2lsbCB1cGRhdGUgdGhlICQoRE9NQUlOKS5wb3QgYW5kIHRoZSAkKENBVEFMT0dTKSwgYnV0IHN1YnNlcXVlbnQKKyMgaW52b2NhdGlvbnMgb2YgIm1ha2UiIHdpbGwgZG8gbm90aGluZy4gVGhpcyB0aW1lc3RhbXAgd291bGQgbm90IGJlIG5lY2Vzc2FyeQorIyBpZiB1cGRhdGluZyB0aGUgJChDQVRBTE9HUykgd291bGQgYWx3YXlzIHRvdWNoIHRoZW07IGhvd2V2ZXIsIHRoZSBydWxlIGZvcgorIyAkKFBPRklMRVMpIGhhcyBiZWVuIGRlc2lnbmVkIHRvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGRvbid0IG5lZWQgdG8gYmUKKyMgY2hhbmdlZC4KK3N0YW1wLXBvOiAkKHNyY2RpcikvJChET01BSU4pLnBvdAorCUAkKENIRUNLX01BQ1JPX1ZFUlNJT04pCisJdGVzdCAhIC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8IFwKKwkgIHRlc3QgLXogIiQoR01PRklMRVMpIiB8fCAkKE1BS0UpICQoR01PRklMRVMpCisJQHRlc3QgISAtZiAkKHNyY2RpcikvJChET01BSU4pLnBvdCB8fCB7IFwKKwkgIGVjaG8gInRvdWNoIHN0YW1wLXBvIiAmJiBcCisJICBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLXBvVCAmJiBcCisJICBtdiBzdGFtcC1wb1Qgc3RhbXAtcG87IFwKKwl9CisKKyMgTm90ZTogVGFyZ2V0ICdhbGwnIG11c3Qgbm90IGRlcGVuZCBvbiB0YXJnZXQgJyQoRE9NQUlOKS5wb3QtdXBkYXRlJywKKyMgb3RoZXJ3aXNlIHBhY2thZ2VzIGxpa2UgR0NDIGNhbiBub3QgYmUgYnVpbHQgaWYgb25seSBwYXJ0cyBvZiB0aGUgc291cmNlCisjIGhhdmUgYmVlbiBkb3dubG9hZGVkLgorCisjIFRoaXMgdGFyZ2V0IHJlYnVpbGRzICQoRE9NQUlOKS5wb3Q7IGl0IGlzIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24uCisjIE5vdGUgdGhhdCAkKERPTUFJTikucG90IGlzIG5vdCB0b3VjaGVkIGlmIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBjaGFuZ2VkLgorIyBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHRoZSBwYWNrYWdlIHh5eiBpcyBhIEdOVSBvbmUgaXMgYmFzZWQgb24gdGhlCisjIGhldXJpc3RpYyB3aGV0aGVyIHNvbWUgZmlsZSBpbiB0aGUgdG9wIGxldmVsIGRpcmVjdG9yeSBtZW50aW9ucyAiR05VIHh5eiIuCisjIElmIEdOVSAnZmluZCcgaXMgYXZhaWxhYmxlLCB3ZSBhdm9pZCBncmVwcGluZyB0aHJvdWdoIG1vbnN0ZXIgZmlsZXMuCiskKERPTUFJTikucG90LXVwZGF0ZTogJChQT1RGSUxFUykgJChzcmNkaXIpL1BPVEZJTEVTLmluIHJlbW92ZS1wb3RjZGF0ZS5zZWQKKwlwYWNrYWdlX2dudT0iJChQQUNLQUdFX0dOVSkiOyBcCisJdGVzdCAtbiAiJCRwYWNrYWdlX2dudSIgfHwgeyBcCisJICBpZiB7IGlmIChMQ19BTEw9QyBmaW5kIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuIFwKKwkJIExDX0FMTD1DIGZpbmQgLUwgJCh0b3Bfc3JjZGlyKSAtbWF4ZGVwdGggMSAtdHlwZSBmIFwKKwkJCSAgICAgICAtc2l6ZSAtMTAwMDAwMDBjIC1leGVjIGdyZXAgJ0dOVSBAUEFDS0FHRUAnIFwKKwkJCSAgICAgICAvZGV2L251bGwgJ3t9JyAnOycgMj4vZGV2L251bGw7IFwKKwkgICAgICAgZWxzZSBcCisJCSBMQ19BTEw9QyBncmVwICdHTlUgQFBBQ0tBR0VAJyAkKHRvcF9zcmNkaXIpLyogMj4vZGV2L251bGw7IFwKKwkgICAgICAgZmk7IFwKKwkgICAgIH0gfCBncmVwIC12ICdsaWJ0b29sOicgPi9kZXYvbnVsbDsgdGhlbiBcCisJICAgICBwYWNrYWdlX2dudT15ZXM7IFwKKwkgICBlbHNlIFwKKwkgICAgIHBhY2thZ2VfZ251PW5vOyBcCisJICAgZmk7IFwKKwl9OyBcCisJaWYgdGVzdCAiJCRwYWNrYWdlX2dudSIgPSAieWVzIjsgdGhlbiBcCisJICBwYWNrYWdlX3ByZWZpeD0nR05VICc7IFwKKwllbHNlIFwKKwkgIHBhY2thZ2VfcHJlZml4PScnOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1uICckKE1TR0lEX0JVR1NfQUREUkVTUyknIHx8IHRlc3QgJyQoUEFDS0FHRV9CVUdSRVBPUlQpJyA9ICdAJ1BBQ0tBR0VfQlVHUkVQT1JUJ0AnOyB0aGVuIFwKKwkgIG1zZ2lkX2J1Z3NfYWRkcmVzcz0nJChNU0dJRF9CVUdTX0FERFJFU1MpJzsgXAorCWVsc2UgXAorCSAgbXNnaWRfYnVnc19hZGRyZXNzPSckKFBBQ0tBR0VfQlVHUkVQT1JUKSc7IFwKKwlmaTsgXAorCWNhc2UgYCQoWEdFVFRFWFQpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgJycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNV0gfCAwLjFbMC01XS4qIHwgMC4xNiB8IDAuMTYuWzAtMV0qKSBcCisJICAgICQoWEdFVFRFWFQpIC0tZGVmYXVsdC1kb21haW49JChET01BSU4pIC0tZGlyZWN0b3J5PSQodG9wX3NyY2RpcikgXAorCSAgICAgIC0tYWRkLWNvbW1lbnRzPVRSQU5TTEFUT1JTOiAkKFhHRVRURVhUX09QVElPTlMpIEBYR0VUVEVYVF9FWFRSQV9PUFRJT05TQCBcCisJICAgICAgLS1maWxlcy1mcm9tPSQoc3JjZGlyKS9QT1RGSUxFUy5pbiBcCisJICAgICAgLS1jb3B5cmlnaHQtaG9sZGVyPSckKENPUFlSSUdIVF9IT0xERVIpJyBcCisJICAgICAgLS1tc2dpZC1idWdzLWFkZHJlc3M9IiQkbXNnaWRfYnVnc19hZGRyZXNzIiBcCisJICAgIDs7IFwKKwkgICopIFwKKwkgICAgJChYR0VUVEVYVCkgLS1kZWZhdWx0LWRvbWFpbj0kKERPTUFJTikgLS1kaXJlY3Rvcnk9JCh0b3Bfc3JjZGlyKSBcCisJICAgICAgLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6ICQoWEdFVFRFWFRfT1BUSU9OUykgQFhHRVRURVhUX0VYVFJBX09QVElPTlNAIFwKKwkgICAgICAtLWZpbGVzLWZyb209JChzcmNkaXIpL1BPVEZJTEVTLmluIFwKKwkgICAgICAtLWNvcHlyaWdodC1ob2xkZXI9JyQoQ09QWVJJR0hUX0hPTERFUiknIFwKKwkgICAgICAtLXBhY2thZ2UtbmFtZT0iJCR7cGFja2FnZV9wcmVmaXh9QFBBQ0tBR0VAIiBcCisJICAgICAgLS1wYWNrYWdlLXZlcnNpb249J0BWRVJTSU9OQCcgXAorCSAgICAgIC0tbXNnaWQtYnVncy1hZGRyZXNzPSIkJG1zZ2lkX2J1Z3NfYWRkcmVzcyIgXAorCSAgICA7OyBcCisJZXNhYworCXRlc3QgISAtZiAkKERPTUFJTikucG8gfHwgeyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90OyB0aGVuIFwKKwkgICAgc2VkIC1mIHJlbW92ZS1wb3RjZGF0ZS5zZWQgPCAkKHNyY2RpcikvJChET01BSU4pLnBvdCA+ICQoRE9NQUlOKS4xcG8gJiYgXAorCSAgICBzZWQgLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZCA8ICQoRE9NQUlOKS5wbyA+ICQoRE9NQUlOKS4ycG8gJiYgXAorCSAgICBpZiBjbXAgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICAgICAgcm0gLWYgJChET01BSU4pLjFwbyAkKERPTUFJTikuMnBvICQoRE9NQUlOKS5wbzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBybSAtZiAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gJChzcmNkaXIpLyQoRE9NQUlOKS5wb3QgJiYgXAorCSAgICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgICBmaTsgXAorCSAgZWxzZSBcCisJICAgIG12ICQoRE9NQUlOKS5wbyAkKHNyY2RpcikvJChET01BSU4pLnBvdDsgXAorCSAgZmk7IFwKKwl9CisKKyMgVGhpcyBydWxlIGhhcyBubyBkZXBlbmRlbmNpZXM6IHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlICQoRE9NQUlOKS5wb3QgYXQKKyMgZXZlcnkgIm1ha2UiIGludm9jYXRpb24sIG9ubHkgY3JlYXRlIGl0IHdoZW4gaXQgaXMgbWlzc2luZy4KKyMgT25seSAibWFrZSAkKERPTUFJTikucG90LXVwZGF0ZSIgb3IgIm1ha2UgZGlzdCIgd2lsbCBmb3JjZSBhbiB1cGRhdGUuCiskKHNyY2RpcikvJChET01BSU4pLnBvdDoKKwkkKE1BS0UpICQoRE9NQUlOKS5wb3QtdXBkYXRlCisKKyMgVGhpcyB0YXJnZXQgcmVidWlsZHMgYSBQTyBmaWxlIGlmICQoRE9NQUlOKS5wb3QgaGFzIGNoYW5nZWQuCisjIE5vdGUgdGhhdCBhIFBPIGZpbGUgaXMgbm90IHRvdWNoZWQgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGNoYW5nZWQuCiskKFBPRklMRVMpOiAkKFBPRklMRVNERVBTKQorCUBsYW5nPWBlY2hvICRAIHwgc2VkIC1lICdzLC4qLywsJyAtZSAncy9cLnBvJCQvLydgOyBcCisJaWYgdGVzdCAtZiAiJChzcmNkaXIpLyQke2xhbmd9LnBvIjsgdGhlbiBcCisJICB0ZXN0IC1mICQoc3JjZGlyKS8kKERPTUFJTikucG90IHx8ICQoTUFLRSkgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IFwKKwkgIHRlc3QgIiQoc3JjZGlyKSIgPSAuICYmIGNkY21kPSIiIHx8IGNkY21kPSJjZCAkKHNyY2RpcikgJiYgIjsgXAorCSAgZWNobyAiJCR7Y2RjbWR9JChNU0dNRVJHRV9VUERBVEUpICQoTVNHTUVSR0VfT1BUSU9OUykgLS1sYW5nPSQke2xhbmd9ICQke2xhbmd9LnBvICQoRE9NQUlOKS5wb3QiOyBcCisJICBjZCAkKHNyY2RpcikgXAorCSAgICAmJiB7IGNhc2UgYCQoTVNHTUVSR0VfVVBEQVRFKSAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluIFwKKwkgICAgICAgICAgICcnIHwgMC5bMC05XSB8IDAuWzAtOV0uKiB8IDAuMVswLTddIHwgMC4xWzAtN10uKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAkJHtsYW5nfS5wbyAkKERPTUFJTikucG90OzsgXAorCSAgICAgICAgICAgKikgXAorCSAgICAgICAgICAgICAkKE1TR01FUkdFX1VQREFURSkgJChNU0dNRVJHRV9PUFRJT05TKSAtLWxhbmc9JCR7bGFuZ30gJCR7bGFuZ30ucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgICAgICBlc2FjOyBcCisJICAgICAgIH07IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJCR7bGFuZ30ucG8tY3JlYXRlOyBcCisJZmkKKworCitpbnN0YWxsOiBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1kYXRhCitpbnN0YWxsLWV4ZWM6CitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1AVVNFX05MU0AKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICAkKE1LRElSX1ApICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpOyBcCisJICBmb3IgZmlsZSBpbiAkKERJU1RGSUxFUy5jb21tb24pIE1ha2V2YXJzLnRlbXBsYXRlOyBkbyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRmaWxlIFwKKwkJCSAgICAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKS8kJGZpbGU7IFwKKwkgIGRvbmU7IFwKKwkgIGZvciBmaWxlIGluIE1ha2V2YXJzOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGdldHRleHRzcmNkaXIpLyQkZmlsZTsgXAorCSAgZG9uZTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbC1kYXRhLW5vOiBhbGwKK2luc3RhbGwtZGF0YS15ZXM6IGFsbAorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBpZiB0ZXN0IC1yICQkY2F0OyB0aGVuIHJlYWxjYXQ9JCRjYXQ7IGVsc2UgcmVhbGNhdD0kKHNyY2RpcikvJCRjYXQ7IGZpOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRyZWFsY2F0ICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW87IFwKKwkgIGVjaG8gImluc3RhbGxpbmcgJCRyZWFsY2F0IGFzICQoREVTVERJUikkJGRpci8kKERPTUFJTikubW8iOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW87IFwKKwkgICAgICBsbiAtcyAuLi9MQ19NRVNTQUdFUy8kKERPTUFJTikubW8gJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kKERPTUFJTikubW8gMj4vZGV2L251bGwgfHwgXAorCSAgICAgIGxuICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nL0xDX01FU1NBR0VTLyQoRE9NQUlOKS5tbyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyAyPi9kZXYvbnVsbCB8fCBcCisJICAgICAgY3AgLXAgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVMvJChET01BSU4pLm1vICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICAgICAgZWNobyAiaW5zdGFsbGluZyAkJHJlYWxjYXQgbGluayBhcyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLyQoRE9NQUlOKS5tbyI7IFwKKwkgICAgZmk7IFwKKwkgIGRvbmU7IFwKKwlkb25lCisKK2luc3RhbGwtc3RyaXA6IGluc3RhbGwKKworaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWV4ZWMgaW5zdGFsbGRpcnMtZGF0YQoraW5zdGFsbGRpcnMtZXhlYzoKK2luc3RhbGxkaXJzLWRhdGE6IGluc3RhbGxkaXJzLWRhdGEtQFVTRV9OTFNACisJaWYgdGVzdCAiJChQQUNLQUdFKSIgPSAiZ2V0dGV4dC10b29scyI7IHRoZW4gXAorCSAgJChNS0RJUl9QKSAkKERFU1RESVIpJChnZXR0ZXh0c3JjZGlyKTsgXAorCWVsc2UgXAorCSAgOiA7IFwKKwlmaQoraW5zdGFsbGRpcnMtZGF0YS1ubzoKK2luc3RhbGxkaXJzLWRhdGEteWVzOgorCUBjYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZGlyPSQobG9jYWxlZGlyKS8kJGxhbmcvTENfTUVTU0FHRVM7IFwKKwkgICQoTUtESVJfUCkgJChERVNURElSKSQkZGlyOyBcCisJICBmb3IgbGMgaW4gJycgJChFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyk7IGRvIFwKKwkgICAgaWYgdGVzdCAtbiAiJCRsYyI7IHRoZW4gXAorCSAgICAgIGlmIChjZCAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZyAmJiBMQ19BTEw9QyBscyAtbCAtZCAkJGxjIDI+L2Rldi9udWxsKSB8IGdyZXAgJyAtPiAnID4vZGV2L251bGw7IHRoZW4gXAorCSAgICAgICAgbGluaz1gY2QgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcgJiYgTENfQUxMPUMgbHMgLWwgLWQgJCRsYyB8IHNlZCAtZSAncy9eLiogLT4gLy8nYDsgXAorCSAgICAgICAgbXYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYyAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjLm9sZDsgXAorCSAgICAgICAgbWtkaXIgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgKGNkICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkICYmIFwKKwkgICAgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBcCisJICAgICAgICAgICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBcCisJICAgICAgICAgICAgIGxuIC1zIC4uLyQkbGluay8kJGZpbGUgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYy8kJGZpbGU7IFwKKwkgICAgICAgICAgIGZpOyBcCisJICAgICAgICAgZG9uZSk7IFwKKwkgICAgICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMub2xkOyBcCisJICAgICAgZWxzZSBcCisJICAgICAgICBpZiB0ZXN0IC1kICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGM7IHRoZW4gXAorCSAgICAgICAgICA6OyBcCisJICAgICAgICBlbHNlIFwKKwkgICAgICAgICAgcm0gLWYgJChERVNURElSKSQobG9jYWxlZGlyKS8kJGxhbmcvJCRsYzsgXAorCSAgICAgICAgICBta2RpciAkKERFU1RESVIpJChsb2NhbGVkaXIpLyQkbGFuZy8kJGxjOyBcCisJICAgICAgICBmaTsgXAorCSAgICAgIGZpOyBcCisJICAgIGZpOyBcCisJICBkb25lOyBcCisJZG9uZQorCisjIERlZmluZSB0aGlzIGFzIGVtcHR5IHVudGlsIEkgZm91bmQgYSB1c2VmdWwgYXBwbGljYXRpb24uCitpbnN0YWxsY2hlY2s6CisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWV4ZWMgdW5pbnN0YWxsLWRhdGEKK3VuaW5zdGFsbC1leGVjOgordW5pbnN0YWxsLWRhdGE6IHVuaW5zdGFsbC1kYXRhLUBVU0VfTkxTQAorCWlmIHRlc3QgIiQoUEFDS0FHRSkiID0gImdldHRleHQtdG9vbHMiOyB0aGVuIFwKKwkgIGZvciBmaWxlIGluICQoRElTVEZJTEVTLmNvbW1vbikgTWFrZXZhcnMudGVtcGxhdGU7IGRvIFwKKwkgICAgcm0gLWYgJChERVNURElSKSQoZ2V0dGV4dHNyY2RpcikvJCRmaWxlOyBcCisJICBkb25lOyBcCisJZWxzZSBcCisJICA6IDsgXAorCWZpCit1bmluc3RhbGwtZGF0YS1ubzoKK3VuaW5zdGFsbC1kYXRhLXllczoKKwljYXRhbG9ncz0nJChDQVRBTE9HUyknOyBcCisJZm9yIGNhdCBpbiAkJGNhdGFsb2dzOyBkbyBcCisJICBjYXQ9YGJhc2VuYW1lICQkY2F0YDsgXAorCSAgbGFuZz1gZWNobyAkJGNhdCB8IHNlZCAtZSAncy9cLmdtbyQkLy8nYDsgXAorCSAgZm9yIGxjIGluIExDX01FU1NBR0VTICQoRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMpOyBkbyBcCisJICAgIHJtIC1mICQoREVTVERJUikkKGxvY2FsZWRpcikvJCRsYW5nLyQkbGMvJChET01BSU4pLm1vOyBcCisJICBkb25lOyBcCisJZG9uZQorCitjaGVjazogYWxsCisKK2luZm8gZHZpIHBzIHBkZiBodG1sIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBJRDoKKworbW9zdGx5Y2xlYW46CisJcm0gLWYgcmVtb3ZlLXBvdGNkYXRlLnNlZAorCXJtIC1mIHN0YW1wLXBvVAorCXJtIC1mIGNvcmUgY29yZS4qICQoRE9NQUlOKS5wbyAkKERPTUFJTikuMXBvICQoRE9NQUlOKS4ycG8gKi5uZXcucG8KKwlybSAtZnIgKi5vCisKK2NsZWFuOiBtb3N0bHljbGVhbgorCitkaXN0Y2xlYW46IGNsZWFuCisJcm0gLWYgTWFrZWZpbGUgTWFrZWZpbGUuaW4gUE9URklMRVMgKi5tbworCittYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2U7IgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwlybSAtZiBzdGFtcC1wbyAkKEdNT0ZJTEVTKQorCitkaXN0ZGlyID0gJCh0b3BfYnVpbGRkaXIpLyQoUEFDS0FHRSktJChWRVJTSU9OKS8kKHN1YmRpcikKK2Rpc3QgZGlzdGRpcjoKKwl0ZXN0IC16ICIkKERJU1RGSUxFU0RFUFMpIiB8fCAkKE1BS0UpICQoRElTVEZJTEVTREVQUykKKwlAJChNQUtFKSBkaXN0MgorIyBUaGlzIGlzIGEgc2VwYXJhdGUgdGFyZ2V0IGJlY2F1c2UgJ3VwZGF0ZS1wbycgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUuCitkaXN0Mjogc3RhbXAtcG8gJChESVNURklMRVMpCisJZGlzdHM9IiQoRElTVEZJTEVTKSI7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBNYWtldmFycy50ZW1wbGF0ZSI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpLyQoRE9NQUlOKS5wb3Q7IHRoZW4gXAorCSAgZGlzdHM9IiQkZGlzdHMgJChET01BSU4pLnBvdCBzdGFtcC1wbyI7IFwKKwlmaTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0NoYW5nZUxvZzsgdGhlbiBcCisJICBkaXN0cz0iJCRkaXN0cyBDaGFuZ2VMb2ciOyBcCisJZmk7IFwKKwlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBcCisJICBpZiB0ZXN0IC1mICQoc3JjZGlyKS9DaGFuZ2VMb2cuJCRpOyB0aGVuIFwKKwkgICAgZGlzdHM9IiQkZGlzdHMgQ2hhbmdlTG9nLiQkaSI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgLWYgJChzcmNkaXIpL0xJTkdVQVM7IHRoZW4gZGlzdHM9IiQkZGlzdHMgTElOR1VBUyI7IGZpOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0czsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGU7IHRoZW4gXAorCSAgICBjcCAtcCAkJGZpbGUgJChkaXN0ZGlyKSB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICBjcCAtcCAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKKwordXBkYXRlLXBvOiBNYWtlZmlsZQorCSQoTUFLRSkgJChET01BSU4pLnBvdC11cGRhdGUKKwl0ZXN0IC16ICIkKFVQREFURVBPRklMRVMpIiB8fCAkKE1BS0UpICQoVVBEQVRFUE9GSUxFUykKKwkkKE1BS0UpIHVwZGF0ZS1nbW8KKworIyBHZW5lcmFsIHJ1bGUgZm9yIGNyZWF0aW5nIFBPIGZpbGVzLgorCisubm9wLnBvLWNyZWF0ZToKKwlAbGFuZz1gZWNobyAkQCB8IHNlZCAtZSAncy9cLnBvLWNyZWF0ZSQkLy8nYDsgXAorCWVjaG8gIkZpbGUgJCRsYW5nLnBvIGRvZXMgbm90IGV4aXN0LiBJZiB5b3UgYXJlIGEgdHJhbnNsYXRvciwgeW91IGNhbiBjcmVhdGUgaXQgdGhyb3VnaCAnbXNnaW5pdCcuIiAxPiYyOyBcCisJZXhpdCAxCisKKyMgR2VuZXJhbCBydWxlIGZvciB1cGRhdGluZyBQTyBmaWxlcy4KKworLm5vcC5wby11cGRhdGU6CisJQGxhbmc9YGVjaG8gJEAgfCBzZWQgLWUgJ3MvXC5wby11cGRhdGUkJC8vJ2A7IFwKKwlpZiB0ZXN0ICIkKFBBQ0tBR0UpIiA9ICJnZXR0ZXh0LXRvb2xzIjsgdGhlbiBQQVRIPWBwd2RgLy4uL3NyYzokJFBBVEg7IGZpOyBcCisJdG1wZGlyPWBwd2RgOyBcCisJZWNobyAiJCRsYW5nOiI7IFwKKwl0ZXN0ICIkKHNyY2RpcikiID0gLiAmJiBjZGNtZD0iIiB8fCBjZGNtZD0iY2QgJChzcmNkaXIpICYmICI7IFwKKwllY2hvICIkJHtjZGNtZH0kKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgJCRsYW5nLnBvICQoRE9NQUlOKS5wb3QgLW8gJCRsYW5nLm5ldy5wbyI7IFwKKwljZCAkKHNyY2Rpcik7IFwKKwlpZiB7IGNhc2UgYCQoTVNHTUVSR0UpIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4gXAorCSAgICAgICAnJyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC03XSB8IDAuMVswLTddLiopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC1vICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gJCRsYW5nLnBvICQoRE9NQUlOKS5wb3Q7OyBcCisJICAgICAgICopIFwKKwkgICAgICAgICAkKE1TR01FUkdFKSAkKE1TR01FUkdFX09QVElPTlMpIC0tbGFuZz0kJGxhbmcgLW8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG8gJChET01BSU4pLnBvdDs7IFwKKwkgICAgIGVzYWM7IFwKKwkgICB9OyB0aGVuIFwKKwkgIGlmIGNtcCAkJGxhbmcucG8gJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAorCSAgICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJICBlbHNlIFwKKwkgICAgaWYgbXYgLWYgJCR0bXBkaXIvJCRsYW5nLm5ldy5wbyAkJGxhbmcucG87IHRoZW4gXAorCSAgICAgIDo7IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQ6IGNhbm5vdCBtb3ZlICQkdG1wZGlyLyQkbGFuZy5uZXcucG8gdG8gJCRsYW5nLnBvIiAxPiYyOyBcCisJICAgICAgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICBmaTsgXAorCWVsc2UgXAorCSAgZWNobyAibXNnbWVyZ2UgZm9yICQkbGFuZy5wbyBmYWlsZWQhIiAxPiYyOyBcCisJICBybSAtZiAkJHRtcGRpci8kJGxhbmcubmV3LnBvOyBcCisJZmkKKworJChEVU1NWVBPRklMRVMpOgorCit1cGRhdGUtZ21vOiBNYWtlZmlsZSAkKEdNT0ZJTEVTKQorCUA6CisKKyMgUmVjcmVhdGUgTWFrZWZpbGUgYnkgaW52b2tpbmcgY29uZmlnLnN0YXR1cy4gRXhwbGljaXRseSBpbnZva2UgdGhlIHNoZWxsLAorIyBiZWNhdXNlIGV4ZWN1dGlvbiBwZXJtaXNzaW9uIGJpdHMgbWF5IG5vdCB3b3JrIG9uIHRoZSBjdXJyZW50IGZpbGUgc3lzdGVtLgorIyBVc2UgQFNIRUxMQCwgd2hpY2ggaXMgdGhlIHNoZWxsIGRldGVybWluZWQgYnkgYXV0b2NvbmYgZm9yIHRoZSB1c2UgYnkgaXRzCisjIHNjcmlwdHMsIG5vdCAkKFNIRUxMKSB3aGljaCBpcyBoYXJkd2lyZWQgdG8gL2Jpbi9zaCBhbmQgbWF5IGJlIGRlZmljaWVudC4KK01ha2VmaWxlOiBNYWtlZmlsZS5pbi5pbiBNYWtldmFycyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyBAUE9NQUtFRklMRURFUFNACisJY2QgJCh0b3BfYnVpbGRkaXIpIFwKKwkgICYmIEBTSEVMTEAgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQC5pbiBwby1kaXJlY3RvcmllcworCitmb3JjZToKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIG5vdCB0byBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6IGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2FjbG9jYWwudGd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGJhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvYWNsb2NhbC50Z3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtMC4xOS40L2NvbmZpZy5ycGF0aCBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjYyNTYyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9jb25maWcucnBhdGgKQEAgLTAsMCArMSw2ODQgQEAKKyMhIC9iaW4vc2gKKyMgT3V0cHV0IGEgc3lzdGVtIGRlcGVuZGVudCBzZXQgb2YgdmFyaWFibGVzLCBkZXNjcmliaW5nIGhvdyB0byBzZXQgdGhlCisjIHJ1biB0aW1lIHNlYXJjaCBwYXRoIG9mIHNoYXJlZCBsaWJyYXJpZXMgaW4gYW4gZXhlY3V0YWJsZS4KKyMKKyMgICBDb3B5cmlnaHQgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFRha2VuIGZyb20gR05VIGxpYnRvb2wsIDIwMDEKKyMgICBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjICAgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjICAgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisjCisjIFRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmaWxlIGlzIHRoZSBjYW5vbmljYWwgaG9zdCBzcGVjaWZpY2F0aW9uLAorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvcgorIyAgICBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU0KKyMgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBDQywgR0NDLCBMREZMQUdTLCBMRCwgd2l0aF9nbnVfbGQKKyMgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyLgorIworIyBUaGUgc2V0IG9mIGRlZmluZWQgdmFyaWFibGVzIGlzIGF0IHRoZSBlbmQgb2YgdGhpcyBzY3JpcHQuCisKKyMgS25vd24gbGltaXRhdGlvbnM6CisjIC0gT24gSVJJWCA2LjUgd2l0aCBDQz0iY2MiLCB0aGUgcnVuIHRpbWUgc2VhcmNoIHBhdGNoIG11c3Qgbm90IGJlIGxvbmdlcgorIyAgIHRoYW4gMjU2IGJ5dGVzLCBvdGhlcndpc2UgdGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGR1bXAgY29yZS4gVGhlIG9ubHkKKyMgICBrbm93biB3b3JrYXJvdW5kIGlzIHRvIGNob29zZSBzaG9ydGVyIGRpcmVjdG9yeSBuYW1lcyBmb3IgdGhlIGJ1aWxkCisjICAgZGlyZWN0b3J5IGFuZC9vciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorc2hyZXh0PS5zbworCitob3N0PSIkMSIKK2hvc3RfY3B1PWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAoraG9zdF92ZW5kb3I9YGVjaG8gIiRob3N0IiB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCitob3N0X29zPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0NDX0JBU0VOQU1FLgorCitmb3IgY2NfdGVtcCBpbiAkQ0MiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWBlY2hvICIkY2NfdGVtcCIgfCBzZWQgLWUgJ3MlXi4qLyUlJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DT01QSUxFUl9QSUMuCisKK3dsPQoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgd2w9Jy1XbCwnCitlbHNlCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIDs7CisgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBlY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGljYyogfCBpZm9ydCopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbGY5NSopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgbmFnZm9yKikKKyAgICAgICAgICB3bD0nLVdsLC1XbCwsJworICAgICAgICAgIDs7CisgICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIHhsKiB8IGJneGwqIHwgYmdmKiB8IG1waXhsKikKKyAgICAgICAgICB3bD0nLVdsLCcKKyAgICAgICAgICA7OworICAgICAgICBjb21vKQorICAgICAgICAgIHdsPSctbG9wdD0nCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgICAgICAgICAgICpTdW5cIEYqIHwgKlN1bipGb3J0cmFuKikKKyAgICAgICAgICAgICAgd2w9CisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqU3VuXCBDKikKKyAgICAgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG5ld3NvczYpCisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICByZG9zKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgICAgICAgICAgd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICB3bD0nLVFvcHRpb24gbGQgJworICAgICAgOzsKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgOzsKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIHVuaWNvcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICA7OworICBlc2FjCitmaQorCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX0xJTktFUl9TSExJQlMuCisKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQoraGFyZGNvZGVfZGlyZWN0PW5vCitoYXJkY29kZV9taW51c19MPW5vCisKK2Nhc2UgIiRob3N0X29zIiBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKK2VzYWMKKworbGRfc2hsaWJzPXllcworaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAjIFVubGlrZSBsaWJ0b29sLCB3ZSB1c2UgLXJwYXRoIGhlcmUsIG5vdCAtLXJwYXRoLCBzaW5jZSB0aGUgZG9jdW1lbnRlZAorICAjIG9wdGlvbiBvZiBHTlUgbGQgaXMgY2FsbGVkIC1ycGF0aCwgbm90IC0tcnBhdGguCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgYWl4WzMtOV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgaGFpa3UqKQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgIGVsc2UKKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICAgIHBvd2VycGMpCisgICAgICAgICAgOzsKKyAgICAgICAgbTY4aykKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBic2RpWzQ1XSopCisgICAgICA7OworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisgICAgICBsaWJleHQ9bGliCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGlmIHsgY2FzZSAkY2NfYmFzZW5hbWUgaW4gaWZvcnQqKSB0cnVlOzsgKikgdGVzdCAiJEdDQyIgPSB5ZXM7OyBlc2FjOyB9OyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgZnJlZWJzZDIuWzAxXSopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgX0xUX1NZU19EWU5BTUlDX0xJTktFUi4KKyMgVW5saWtlIGxpYnRvb2wubTQsIGhlcmUgd2UgZG9uJ3QgY2FyZSBhYm91dCBfYWxsXyBuYW1lcyBvZiB0aGUgbGlicmFyeSwgYnV0CisjIG9ubHkgYWJvdXQgdGhlIG9uZSB0aGUgbGlua2VyIGZpbmRzIHdoZW4gcGFzc2VkIC1sTkFNRS4gVGhpcyBpcyB0aGUgbGFzdAorIyBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00LCBvciBwb3NzaWJseSB0d28gb2YgdGhlbSBpZiB0aGUKKyMgbGlua2VyIGhhcyBzcGVjaWFsIHNlYXJjaCBydWxlcy4KK2xpYnJhcnlfbmFtZXNfc3BlYz0gICAgICAjIHRoZSBsYXN0IGVsZW1lbnQgb2YgbGlicmFyeV9uYW1lc19zcGVjIGluIGxpYnRvb2wubTQKK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgYWl4MyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIGFpeFs0LTldKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBhbWlnYW9zKikKKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICBwb3dlcnBjKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisgICAgICBtNjhrKQorICAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnIDs7CisgICAgZXNhYworICAgIDs7CisgIGJlb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGJzZGlbNDVdKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKKyAgICA7OworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIHNocmV4dD0uZHlsaWIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBkZ3V4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBmcmVlYnNkWzIzXS4qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgZ251KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBoYWlrdSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGlhNjQqKQorICAgICAgICBzaHJleHQ9LnNvCisgICAgICAgIDs7CisgICAgICBocHBhKjY0KikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpbnRlcml4WzMtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBjYXNlICRMRCBpbgorICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAga25ldGJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ldGJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbmV3c29zNikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICAqbnRvKiB8ICpxbngqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCcKKyAgICA7OworICBvczIqKQorICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmEnCisgICAgOzsKKyAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHJkb3MqKQorICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN1bm9zNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIHN5c3Y0IHwgc3lzdjQuMyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjQqTVAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIHRwZiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdXRzNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKK2VzYWMKKworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKK2VzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK3NobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCitlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjPWBlY2hvICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKworTENfQUxMPUMgc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIkZXNjYXBlZF93bCIKKworIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KK3NobGliZXh0PSIkc2hsaWJleHQiCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9IiRlc2NhcGVkX2xpYm5hbWVfc3BlYyIKKworIyBMaWJyYXJ5IG5hbWVzIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9IiRlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYyIKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKworRU9GCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLTAuMTkuNC9yZW1vdmUtcG90Y2RhdGUuc2luCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzZjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHQtbWluaW1hbC0wLjE5LjQvcmVtb3ZlLXBvdGNkYXRlLnNpbgpAQCAtMCwwICsxLDE5IEBACisjIFNlZCBzY3JpcHQgdGhhdCByZW1vdmUgdGhlIFBPVC1DcmVhdGlvbi1EYXRlIGxpbmUgaW4gdGhlIGhlYWRlciBlbnRyeQorIyBmcm9tIGEgUE9UIGZpbGUuCisjCisjIFRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgdGhlIGZvbGxvd2luZyBvY2N1cnJlbmNlcyBvZiB0aGUKKyMgcGF0dGVybiBpcyBhY2hpZXZlZCBieSBsb29raW5nIGF0IHRoZSBob2xkIHNwYWNlLgorL14iUE9ULUNyZWF0aW9uLURhdGU6IC4qIiQveworeAorIyBUZXN0IGlmIHRoZSBob2xkIHNwYWNlIGlzIGVtcHR5Lgorcy9QL1AvCit0YQorIyBZZXMgaXQgd2FzIGVtcHR5LiBGaXJzdCBvY2N1cnJlbmNlLiBSZW1vdmUgdGhlIGxpbmUuCitnCitkCitiYgorOmEKKyMgVGhlIGhvbGQgc3BhY2Ugd2FzIG5vbmVtcHR5LiBGb2xsb3dpbmcgb2NjdXJyZW5jZXMuIERvIG5vdGhpbmcuCit4Cis6YgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0LW1pbmltYWwtbmF0aXZlXzAuMTkuNC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0YTQ0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dC1taW5pbWFsLW5hdGl2ZV8wLjE5LjQuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJNaW5pbWFsIGdldHRleHQgZm9yIHN1cHBvcnRpbmcgbmF0aXZlIGF1dG9jb25mL2F1dG9tYWtlIgorREVTQ1JJUFRJT04gPSAiQ29udGFpbnMgdGhlIG00IG1hY3JvcyBzdWZmaWNpZW50IHRvIHN1cHBvcnQgYnVpbGRpbmcgXAorYXV0b2NvbmYvYXV0b21ha2UuIFRoaXMgcHJvdmlkZXMgYSBzaWduaWZpY2FudCBidWlsZCB0aW1lIHNwZWVkdXAgYnkgXAordGhlIHJlbW92YWwgb2YgZ2V0dGV4dC1uYXRpdmUgZnJvbSBtb3N0IGRlcGVuZGVuY3kgY2hhaW5zIChub3cgb25seSBcCituZWVkZWQgZm9yIGdldHRleHQgZm9yIHRoZSB0YXJnZXQpLiIKK1NSQ19VUkkgPSAiZmlsZTovL2FjbG9jYWwudGd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy5ycGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS5pbi5pbiBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtcG90Y2RhdGUuc2luIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1QQVRDSC1EaXNhYmxlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworTElDRU5TRSA9ICJGU0YtVW5saW1pdGVkIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MWIyMDY3NWNkNTE1ODQ0MmY2MDA3ZDAyMmY0NmIzNWIiCisKK2luaGVyaXQgbmF0aXZlCisKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJY3AgJHtXT1JLRElSfS8qLm00ICR7RH0ke2RhdGFkaXJ9L2FjbG9jYWwvCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vY29uZmlnLnJwYXRoICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvCisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZS5pbi5pbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworCWNwICR7V09SS0RJUn0vcmVtb3ZlLXBvdGNkYXRlLnNpbiAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTYuMS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmN2E3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dldHRleHQvZ2V0dGV4dF8wLjE2LjEuYmIKQEAgLTAsMCArMSwxMDcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIHByb2R1Y2luZyBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzIgorREVTQ1JJUFRJT04gPSAiR05VIGdldHRleHQgaXMgYSBzZXQgb2YgdG9vbHMgdGhhdCBwcm92aWRlcyBhIGZyYW1ld29yayB0byBoZWxwIG90aGVyIHByb2dyYW1zIHByb2R1Y2UgbXVsdGktbGluZ3VhbCBtZXNzYWdlcy4gVGhlc2UgdG9vbHMgaW5jbHVkZSBhIHNldCBvZiBjb252ZW50aW9ucyBhYm91dCBob3cgcHJvZ3JhbXMgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gc3VwcG9ydCBtZXNzYWdlIGNhdGFsb2dzLCBhIGRpcmVjdG9yeSBhbmQgZmlsZSBuYW1pbmcgb3JnYW5pemF0aW9uIGZvciB0aGUgbWVzc2FnZSBjYXRhbG9ncyB0aGVtc2VsdmVzLCBhIHJ1bnRpbWUgbGlicmFyeSBzdXBwb3J0aW5nIHRoZSByZXRyaWV2YWwgb2YgdHJhbnNsYXRlZCBtZXNzYWdlcywgYW5kIGEgZmV3IHN0YW5kLWFsb25lIHByb2dyYW1zIHRvIG1hc3NhZ2UgaW4gdmFyaW91cyB3YXlzIHRoZSBzZXRzIG9mIHRyYW5zbGF0YWJsZSBhbmQgYWxyZWFkeSB0cmFuc2xhdGVkIHN0cmluZ3MuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvZ2V0dGV4dC5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTllYTMxNDRmMDRjNDFjZDJlYWRhNWQzZjQ3MmU2ZWE1IgorCitQUiA9ICJyNiIKK0RFUEVORFMgPSAidmlydHVhbC9saWJpY29udiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaW50bCB2aXJ0dWFsL2dldHRleHQiCitQUk9WSURFU19jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2V0dGV4dC9nZXR0ZXh0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LXZwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmtsaWJfZnJvbV8wLjE3LnBhdGNoIFwKKwkgICBmaWxlOi8vZ2V0dGV4dC1hdXRvY29uZi1saWItbGluay1uby1MLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfamF2YS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfYWNsb2NhbF92ZXJzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9nbnVfc291cmNlX2NpcmN1bGFyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlX21hY3JvX3ZlcnNpb24ucGF0Y2ggXAorICAgICAgICAgICIKKworTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0IC1scHRocmVhZCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZDlhZDI0MzAxYzZkNmIxN2VjMzA3MDRhMTNmZTEyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwYmY4NTBkMWEwNzlmYjVhNjFmMGE0N2IxYTllZmQzNWViNDQwMzIyNTUzNzVlMWNlZGIwMjUzYmMyN2IzNzZkIgorCitQQVJBTExFTF9NQUtFID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saXNwIC0tZGlzYWJsZS1jc2hhcnAgLS1kaXNhYmxlLW9wZW5tcCAtLXdpdGhvdXQtZW1hY3MiCithY3BhdGhzID0gJy1JICR7U30vYXV0b2NvbmYtbGliLWxpbmsvbTQvIFwKKyAgICAgICAgICAgLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCXJtIC1mICR7U30vY29uZmlnL200L2xpYnRvb2wubTQKK30KKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiBnZXR0ZXh0LXJ1bnRpbWUtZG9jIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS8qIgorCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUgPSAiJHtiaW5kaXJ9L2dldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9uZ2V0dGV4dCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2VudnN1YnN0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ2V0dGV4dC5zaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0RFVn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2ICs9ICIke2luY2x1ZGVkaXJ9L2F1dG9zcHJpbnRmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmFzcHJpbnRmJHtTT0xJQkRFVn0iCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1mICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaW50bC5zbworfQorCisjIEFueW9uZSBpbmhlcml0aW5nIGdldHRleHQgd2lsbCBoYXZlIGJvdGggZ2V0dGV4dC1uYXRpdmUgYW5kIGdldHRleHQKKyMgYXZhaWxhYmxlLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byB1c2Ugb2xkZXIgbWFjcm9zIGZyb20gdGhlIHRhcmdldCBnZXR0ZXh0IGluCisjIGEgbm9uLWdwbHYzIGJ1aWxkLCBzbyBraWxsIHRoZW0gYW5kIGxldCBkZXBlbmRlbnQgcmVjaXBlcyByZWx5IG9uCisjIGdldHRleHQtbmF0aXZlLgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gInJlbW92ZV9zeXNyb290X200X21hY3JvcyIKKworcmVtb3ZlX3N5c3Jvb3RfbTRfbWFjcm9zICgpIHsKKyAgICBybSAtciAiJHtTWVNST09UX0RFU1RESVJ9JHtkYXRhZGlyfS9hY2xvY2FsIgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nZXR0ZXh0L2dldHRleHRfMC4xOS40LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWJmNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2V0dGV4dC9nZXR0ZXh0XzAuMTkuNC5iYgpAQCAtMCwwICsxLDEwNiBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgYW5kIGxpYnJhcmllcyBmb3IgcHJvZHVjaW5nIG11bHRpLWxpbmd1YWwgbWVzc2FnZXMiCitERVNDUklQVElPTiA9ICJHTlUgZ2V0dGV4dCBpcyBhIHNldCBvZiB0b29scyB0aGF0IHByb3ZpZGVzIGEgZnJhbWV3b3JrIHRvIGhlbHAgb3RoZXIgcHJvZ3JhbXMgcHJvZHVjZSBtdWx0aS1saW5ndWFsIG1lc3NhZ2VzLiBUaGVzZSB0b29scyBpbmNsdWRlIGEgc2V0IG9mIGNvbnZlbnRpb25zIGFib3V0IGhvdyBwcm9ncmFtcyBzaG91bGQgYmUgd3JpdHRlbiB0byBzdXBwb3J0IG1lc3NhZ2UgY2F0YWxvZ3MsIGEgZGlyZWN0b3J5IGFuZCBmaWxlIG5hbWluZyBvcmdhbml6YXRpb24gZm9yIHRoZSBtZXNzYWdlIGNhdGFsb2dzIHRoZW1zZWx2ZXMsIGEgcnVudGltZSBsaWJyYXJ5IHN1cHBvcnRpbmcgdGhlIHJldHJpZXZhbCBvZiB0cmFuc2xhdGVkIG1lc3NhZ2VzLCBhbmQgYSBmZXcgc3RhbmQtYWxvbmUgcHJvZ3JhbXMgdG8gbWFzc2FnZSBpbiB2YXJpb3VzIHdheXMgdGhlIHNldHMgb2YgdHJhbnNsYXRhYmxlIGFuZCBhbHJlYWR5IHRyYW5zbGF0ZWQgc3RyaW5ncy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2V0dGV4dC9nZXR0ZXh0Lmh0bWwiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzKyAmIExHUEwtMi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIHZpcnR1YWwvbGliaWNvbnYgZXhwYXQiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIgorUFJPVklERVMgPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvZ2V0dGV4dCIKK1BST1ZJREVTX2NsYXNzLW5hdGl2ZSA9ICJ2aXJ0dWFsL2dldHRleHQtbmF0aXZlIgorUkNPTkZMSUNUU18ke1BOfSA9ICJwcm94eS1saWJpbnRsIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dldHRleHQvZ2V0dGV4dC0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW21zZ2NhdC1jdXJzZXNdID0gIi0td2l0aC1saWJuY3Vyc2VzLXByZWZpeD0ke1NUQUdJTkdfTElCRElSfS8uLiwtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgLWxwdGhyZWFkICIKKworU1JDX1VSSVttZDVzdW1dID0gImQzNTExYWYxZTYwNGEzNDc4OTAwZDJjMmI0YTRhNDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhhYzlmMWVkMWE1ZjhjNGU2NTZhMmYzN2Y1YmE2YjllZTA0YzRkZjc5YTU3NWU4NzZiMGI2OTQ2YWE0MTdmM2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlzcGRpciBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1jc2hhcnAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGliYXNwcmludGYgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uYXRpdmUtamF2YSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1vcGVubXAgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtYWNsIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWluY2x1ZGVkLWdsaWIgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZW1hY3MgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWdpdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbmNsdWRlZC1saWJ4bWwgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGliY3JvY28gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidW5pc3RyaW5nIFwKKyAgICAgICAgICAgICAgICAiCisKK2FjcGF0aHMgPSAnLUkgJHtTfS9nZXR0ZXh0LXJ1bnRpbWUvbTQgXAorICAgICAgICAgICAtSSAke1N9L2dldHRleHQtdG9vbHMvbTQnCisKKworIyB0aGVzZSBsYWNrIHRoZSAueCBiZWhpbmQgdGhlIC5zbywgYnV0IHNob3VsZG4ndCBiZSBpbiB0aGUgLWRldiBwYWNrYWdlCisjIE90aGVyd2lzZSB5b3UgZ2V0IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoKKyMgNy40TSAgICBnbGliYy9pbWFnZXMvZXA5M3h4L0FuZ3N0cm9tLWNvbnNvbGUtaW1hZ2UtZ2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIDI1TSAgICAgdWNsaWJjL2ltYWdlcy9lcDkzeHgvQW5nc3Ryb20tY29uc29sZS1pbWFnZS11Y2xpYmMtaXBrLTIwMDguMS10ZXN0LTIwMDgwMTA0LWVwOTN4eC5yb290ZnMudGFyLmd6CisjIGJlY2F1c2UgZ2V0dGV4dCBkZXBlbmRzIG9uIGdldHRleHQtZGV2LCB3aGljaCBwdWxscyBpbiBtb3JlIC1kZXYgcGFja2FnZXM6CisjIDE1MjI4ICAgS2lCIC9lcDkzeHgvbGlic3RkYysrLWRldl80LjIuMi1yMl9lcDkzeHguaXBrCisjIDEzMDAgICAgS2lCIC9lcDkzeHgvdWNsaWJjLWRldl8wLjkuMjktcjhfZXA5M3h4LmlwaworIyAxNDAgICAgIEtpQiAvYXJtdjR0L2dldHRleHQtZGV2XzAuMTQuMS1yNl9hcm12NHQuaXBrCisjIDQgICAgICAgS2lCIC9lcDkzeHgvbGliZ2NjLXMtZGV2XzQuMi4yLXIyX2VwOTN4eC5pcGsKKworUEFDS0FHRVMgPSsgImxpYmdldHRleHRsaWIgbGliZ2V0dGV4dHNyYyIKK0ZJTEVTX2xpYmdldHRleHRsaWIgPSAiJHtsaWJkaXJ9L2xpYmdldHRleHRsaWItKi5zbyoiCitGSUxFU19saWJnZXR0ZXh0c3JjID0gIiR7bGliZGlyfS9saWJnZXR0ZXh0c3JjLSouc28qIgorCitQQUNLQUdFUyA9KyAiZ2V0dGV4dC1ydW50aW1lIGdldHRleHQtcnVudGltZS1kZXYgZ2V0dGV4dC1ydW50aW1lLWRvYyIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vKiIKKworRklMRVNfZ2V0dGV4dC1ydW50aW1lID0gIiR7YmluZGlyfS9nZXR0ZXh0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vbmdldHRleHQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9lbnZzdWJzdCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2dldHRleHQuc2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJhc3ByaW50Zi5zbyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9HTlUuR2V0dGV4dC5kbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28uKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY2hhcnNldC5hbGlhcyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRldiArPSAiJHtsaWJkaXJ9L2xpYmFzcHJpbnRmLmEgXAorICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vYXV0b3NwcmludGYuaCBcCisgICAgICAgICAgICAgICAgICAgICAiCitGSUxFU19nZXR0ZXh0LXJ1bnRpbWUtZGV2X2FwcGVuZF9saWJjLXVjbGliYyA9ICIgJHtsaWJkaXJ9L2xpYmludGwuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbGliaW50bC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfZ2V0dGV4dC1ydW50aW1lLWRvYyA9ICIke21hbmRpcn0vbWFuMS9nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9uZ2V0dGV4dC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvZW52c3Vic3QuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xLy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjMvKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L2dldHRleHQuKiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7ZG9jZGlyfS9nZXR0ZXh0L25nZXR0ZXh0LiogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vZ2V0dGV4dC9lbnZzdWJzdC4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvKi4zLmh0bWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2dldHRleHQvQUJPVVQtTkxTIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkb2NkaXJ9L2dldHRleHQvY3NoYXJwZG9jLyogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RvY2Rpcn0vbGliYXNwcmludGYvYXV0b3NwcmludGYuaHRtbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5mb2Rpcn0vYXV0b3NwcmludGYuaW5mbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L3ByZWxvYWRhYmxlX2xpYmludGwuc28KK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKwlybSAke0R9JHtkYXRhZGlyfS9hY2xvY2FsLyoKKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L2NvbmZpZy5ycGF0aAorCXJtICR7RH0ke2RhdGFkaXJ9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4KKwlybSAke0R9JHtkYXRhZGlyfS9nZXR0ZXh0L3BvL3JlbW92ZS1wb3RjZGF0ZS5zaW4KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvMDAwMS1SZW1vdmUtdGhlLXdhcm5pbmctYWJvdXQtZGVwcmVjYXRlZC1wYXRocy1pbi1zY2hlbWFzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTE5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA0MTUzNDI1M2I2YjYxZWQ0NzY5ZWI2YTM5NjY2OThhNTBlZTczYjcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBGcmksIDEyIEp1biAyMDE1IDE3OjA4OjQ2ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSB0aGUgd2FybmluZyBhYm91dCBkZXByZWNhdGVkIHBhdGhzIGluIHNjaGVtYXMKKworU29tZSBzY2hlbWFzIGluIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgKHN1Y2ggYXMgcHJveHkgYW5kIGxvY2FsZSkKK2FyZSBzdGlsbCB1c2luZyBkZXByZWNhdGVkIHBhdGhzLCBhcyBvZiAzLjE2LjEuIFRoaXMgY2F1c2VzIHdhcm5pbmcKK21lc3NhZ2VzLCBhbmQgbWV0YS9saWIvb2Uvcm9vdGZzLnB5IGNvbXBsYWludHMgYWJvdXQgdGhlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KKworLS0tCisgZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgfCA2IC0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2lvL2dsaWItY29tcGlsZS1zY2hlbWFzLmMgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworaW5kZXggZTQyOTQ5Yi4uZWM3OWQ3YyAxMDA2NDQKKy0tLSBhL2dpby9nbGliLWNvbXBpbGUtc2NoZW1hcy5jCisrKysgYi9naW8vZ2xpYi1jb21waWxlLXNjaGVtYXMuYworQEAgLTEyMDIsMTIgKzEyMDIsNiBAQCBwYXJzZV9zdGF0ZV9zdGFydF9zY2hlbWEgKFBhcnNlU3RhdGUgICpzdGF0ZSwKKyAgICAgICByZXR1cm47CisgICAgIH0KKyAKKy0gIGlmIChwYXRoICYmIChnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2FwcHMvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL2Rlc2t0b3AvIikgfHwKKy0gICAgICAgICAgICAgICBnX3N0cl9oYXNfcHJlZml4IChwYXRoLCAiL3N5c3RlbS8iKSkpCistICAgIGdfcHJpbnRlcnIgKCJ3YXJuaW5nOiBTY2hlbWEgJyVzJyBoYXMgcGF0aCAnJXMnLiAgUGF0aHMgc3RhcnRpbmcgd2l0aCAiCistICAgICAgICAgICAgICAgICInL2FwcHMvJywgJy9kZXNrdG9wLycgb3IgJy9zeXN0ZW0vJyBhcmUgZGVwcmVjYXRlZC5cbiIsIGlkLCBwYXRoKTsKKy0KKyAgIHN0YXRlLT5zY2hlbWFfc3RhdGUgPSBzY2hlbWFfc3RhdGVfbmV3IChwYXRoLCBnZXR0ZXh0X2RvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRzLCBleHRlbmRzX25hbWUsIGxpc3Rfb2YpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC8wMDAxLWNvbmZpZ3VyZS5hYy1Eby1ub3QtdXNlLXJlYWRsaW5rLXdoZW4tY3Jvc3MtY29tcGlsaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlMzYzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjb21taXQgOWIzOGQ1MDdlYzM3YjNkN2Q0ZGY2MDk1ZmE3ZWQxNmI0N2QzOTlmNworQXV0aG9yOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogICBTYXQgTWFyIDI5IDIxOjEwOjQzIDIwMTQgLTA0MDAKKworICAgIGNvbmZpZ3VyZS5hYzogRG8gbm90IHVzZSByZWFkbGluayB3aGVuIGNyb3NzIGNvbXBpbGluZy4KKworICAgIERvIG5vdCB1c2UgcmVhZGxpbmsgdG8gc2V0IEFCU19HTElCX1JVTlRJTUVfTElCRElSIHdoZW4gY3Jvc3MKKyAgICBjb21waWxpbmcuICBEb2luZyBzbyBjYXVzZXMgaG9zdCBwYXRocyB0byBwb3RlbnRpYWxseSBwb2xsdXRlCisgICAgdGhlIHRhcmdldC4KKworICAgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgdGhlIHBhdGggaXMgbm90IGNvbnZlcnRlZCB0byBhYnNvbHV0ZSBpZgorICAgIGl0IGNvbnRhaW5zIGFueSAiLi4iIHJlZmVyZW5jZXMgc28gaXQncyBub3QgY29tcGxldGVseSBjb3JyZWN0LgorCisgICAgVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjc1NzVdCisgICAgU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworZGlmZiAtcnViIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjIGdsaWItMi4zOC4yL2NvbmZpZ3VyZS5hYworLS0tIGdsaWItMi4zOC4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTc6MTMuMDM1NTY3MTQzIC0wNDAwCisrKysgZ2xpYi0yLjM4LjIvY29uZmlndXJlLmFjCTIwMTQtMDQtMDMgMjA6MTk6MDcuMDcxNTY2MDU3IC0wNDAwCitAQCAtMjc1LDcgKzI3NSwxMSBAQAorICAgICAgICAgICAgW10sCisgCSAgIFt3aXRoX3J1bnRpbWVfbGliZGlyPSIiXSkKKyBHTElCX1JVTlRJTUVfTElCRElSPSIkd2l0aF9ydW50aW1lX2xpYmRpciIKKytBU19JRihbIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllcyBdLCBbCisrQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9IiRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXIiCisrXSwgWworIEFCU19HTElCX1JVTlRJTUVfTElCRElSPSJgcmVhZGxpbmsgLW0gJGxpYmRpci8kd2l0aF9ydW50aW1lX2xpYmRpcmAiCisrXSkKKyBBQ19TVUJTVChHTElCX1JVTlRJTUVfTElCRElSKQorIEFDX1NVQlNUKEFCU19HTElCX1JVTlRJTUVfTElCRElSKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR0xJQl9SVU5USU1FX0xJQkRJUiwgW3Rlc3QgIngkd2l0aF9ydW50aW1lX2xpYmRpciIgIT0gIngiXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2FkZC1tYXJjaC1pNDg2LWludG8tQ0ZMQUdTLWF1dG9tYXRpY2FsbHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYWMzNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gNTUyNTNiNTViOWM2NWYzZTBlZmJiZTAzY2JhYjJhNGM0MDE0YTE2YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFRodSwgNSBKdWwgMjAxMiAxNTowOTo0MSArMDgwMAorU3ViamVjdDogW1BBVENIXSBhZGQgLW1hcmNoPWk0ODYgaW50byBDRkxBR1MgYXV0b21hdGljYWxseQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2dsaWIgY29uZmlndXJlIHdpbGwgY2hlY2sgaWYgY3VycmVudCBnY2MgbmVlZCAtbWFyY2g9aTQ4NiwKK3doZW4gZ2NjIG5lZWQgLW1hcmNoPWk0ODYgYnV0IENGTEFHUyBkb24ndCBoYXZlLAorZ2xpYiBjb25maWd1cmUgd2lsbCBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGFkZCAtbWFyY2g9aTQ4NiBvciBsYXRlci4KK1RoaXMgd2lsbCBicmVhayB0aGUgYnVpbGQgcHJvY2VzcyxpdCdzIG5vdCBnb29kIGZvciBhdXRvbWF0aWMgYnVpbGQgc3lzdGVtLgorc28gY2hhbmdlIHRoaXMgdG8gYWRkaW5nIC1tYXJjaD1pNDg1IGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcyBuZWVkZWQuCistLS0KKyBjb25maWd1cmUuYWMgfCAgICA2ICsrKystLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2xpYi0yLjM2LjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xpYi0yLjM2LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGliLTIuMzYuMC9jb25maWd1cmUuYWMKK0BAIC0yMzc4LDcgKzIzNzgsNyBAQCBkbmwKKyBkbmwgTm90ZSB0aGF0IHRoZSBhdG9taWMgb3BzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoIEdDQyBvbiB4ODYgd2hlbgorIGRubCB1c2luZyAtbWFyY2g9aTQ4NiBvciBoaWdoZXIuICBJZiB3ZSBkZXRlY3QgdGhhdCB0aGUgYXRvbWljIG9wcyBhcmUKKyBkbmwgbm90IGF2YWlsYWJsZSBidXQgd291bGQgYmUgYXZhaWxhYmxlIGdpdmVuIHRoZSByaWdodCBmbGFncywgd2Ugd2FudAorLWRubCB0byBhYm9ydCBhbmQgYWR2aXNlIHRoZSB1c2VyIHRvIGZpeCB0aGVpciBDRkxBR1MuICBJdCdzIGJldHRlciB0byBkbworK2RubCB0byBhZGQgLW1hcmNoPWk0ODYgYXV0b21hdGljYWxseSB0byBmaXggdGhlaXIgQ0ZMQUdTLiAgSXQncyBiZXR0ZXIgdG8gZG8KKyBkbmwgdGhhdCB0aGVuIHRvIHNpbGVudGx5IGZhbGwgYmFjayBvbiBlbXVsYXRlZCBhdG9taWMgb3BzIGp1c3QgYmVjYXVzZQorIGRubCB0aGUgdXNlciBoYWQgdGhlIHdyb25nIGJ1aWxkIGVudmlyb25tZW50LgorCitAQCAtMjQwMSw3ICsyNDAxLDggQEAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb2NrLWZyZWUgYXRvbWljIGludAorICAgICAgICAgQUNfVFJZX0NPTVBJTEUoW10sCisgICAgICAgICAgICAgICAgICAgICAgICBbdm9sYXRpbGUgaW50IGF0b21pYyA9IDI7XAorICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKCZhdG9taWMsIDIsIDMpO10sCistICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtHTGliIG11c3QgYmUgYnVpbGQgd2l0aCAtbWFyY2g9aTQ4NiBvciBsYXRlci5dKV0sCisrICAgICAgICAgICAgICAgICAgICAgICBbQUNfTVNHX1dBUk4oW0dMaWIgbXVzdCBiZSBidWlsZCB3aXRoIC1tYXJjaD1pNDg2IG9yIGxhdGVyLl0pCisrICAgICAgICAgICAgICAgICAgICAgICBTQVZFX0NGTEFHUz0iJHtTQVZFX0NGTEFHU30gLW1hcmNoPWk0ODYiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtdKQorICAgICAgICAgQ0ZMQUdTPSIke1NBVkVfQ0ZMQUdTfSIKKyAgICAgICBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvYWxsb3ctcnVuLW1lZGlhLXNkWC1kcml2ZS1tb3VudC1pZi11c2VybmFtZS1yb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMGMwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSBjNTNlOTRhNTIwYjU3M2FhMGRjZjEyOTAzZTk1NjNmZThiYWRjMzRjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaXVzIEF2cmFtIDxtYXJpdXMuYXZyYW1AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAxMjoxMDo0MSArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyAvcnVuL21lZGlhL3NkWCBkcml2ZSBtb3VudCBpZiB1c2VybmFtZSByb290CisKK0luIGNhc2UgdGhhdCB0aGUgdXNlcm5hbWUgbG9nZ2VkIGluIHRoZSBzeXN0ZW0gaXMgcm9vdAordGhlIGRyaXZlcyBhcmUgZGlyZWN0bHkgbW91bnRlZCBpbiAvcnVuL21lZGlhL3NkWCBhbmQKK25vdCAvcnVuL21lZGlhLzx1c2VybmFtZT4vc2RYIGFzIHRoZSBmdW5jdGlvbgorZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5KCkgZXhwZWN0cy4KKworV2l0aG91dCB0aGlzIGNoYW5nZSBVU0Igc3RpY2sgbW91bnRzIGFyZSBub3QgYWNjZXNpYmxlIGZyb20KK2dyYXBoaWNhbCBhcHBsaWNhdGlvbnMgc3VjaCBhcyB0aGUgRmlsZSBNYW5hZ2VyIChwY21hbmZtKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcml1cyBBdnJhbSA8bWFyaXVzLmF2cmFtQGludGVsLmNvbT4KKy0tLQorIGdpby9ndW5peG1vdW50cy5jIHwgICAgNSArKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dpby9ndW5peG1vdW50cy5jIGIvZ2lvL2d1bml4bW91bnRzLmMKK2luZGV4IDQ5OTkzNTQuLmY2YzE0NzIgMTAwNjQ0CistLS0gYS9naW8vZ3VuaXhtb3VudHMuYworKysrIGIvZ2lvL2d1bml4bW91bnRzLmMKK0BAIC0yMTM2LDYgKzIxMzYsMTEgQEAgZ191bml4X21vdW50X2d1ZXNzX3Nob3VsZF9kaXNwbGF5IChHVW5peE1vdW50RW50cnkgKm1vdW50X2VudHJ5KQorICAgICAgICAgICBtb3VudF9wYXRoW3NpemVvZiAoIi9ydW4vbWVkaWEvIikgLSAxICsgdXNlcl9uYW1lX2xlbl0gPT0gJy8nKQorICAgICAgICAgaXNfaW5fcnVudGltZV9kaXIgPSBUUlVFOworIAorKyAgICAgIC8qIEFsbG93IG5vIHVzZXJuYW1lIGluIHBhdGggaW4gL3J1bi9tZWRpYSBpZiBjdXJyZW50IHVzZXIgaXMgcm9vdCAqLworKyAgICAgIGlmIChzdHJjbXAodXNlcl9uYW1lLCAicm9vdCIpID09IDAgJiYKKysgICAgICAgICAgc3RybmNtcCAobW91bnRfcGF0aCwgIi9ydW4vbWVkaWEvIiwgc2l6ZW9mKCJydW4vbWVkaWEiKSkgPT0gMCkKKysgICAgICAgIGlzX2luX3J1bnRpbWVfZGlyID0gVFJVRTsKKysKKyAgICAgICBpZiAoaXNfaW5fcnVudGltZV9kaXIgfHwgZ19zdHJfaGFzX3ByZWZpeCAobW91bnRfcGF0aCwgIi9tZWRpYS8iKSkKKyAgICAgICAgIHsKKyAgICAgICAgICAgY2hhciAqcGF0aDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2NvbmZpZ3VyZS1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNjlhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9jb25maWd1cmUtbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDFjNTcxODY0OGQ0OWU3OTVlZmVlOTFjMjIwYTJiZjkzODZjMTg0ZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDI4IEFwciAyMDEyIDE4OjI0OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZTogdXNlICRob3N0X2FsaWFzLWxpYnRvb2wgaW5zdGVhZCBvZiBsaWJ0b29sCisgZGlyZWN0bHkKKworUG9reSByZW5hbWVzIGxpYnRvb2wgdG8gJGhvc3RfYWxpYXMtbGlidG9vbC4KKy4vJGhvc3RfYWxpYXMtbGlidG9vbCBpc24ndCBjcmVhdGVkIHVudGlsIGFmdGVyIGNvbmZpZ3VyZSBydW5zIHdpdGgKK2xpYnRvb2wgPj0gMi4yLjIKK3NvIHdlIGNhbid0IGNhbGwgIyBpdCBhdCB0aGlzIHBvaW50LiBXZSBjYW4gc2FmZWx5IGFzc3VtZSBhIHZlcnNpb24gaXMKK2F2YWlsYWJsZQorZnJvbSBQQVRIIHRob3VnaAorCitSZWJhc2VkIHRvIGdsaWItMi4yNy4zIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitSZWJhc2VkIHRvIGdsaWItMi4zMi4xIGJ5IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA4ICsrKystLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE2NDc4YzYuLjlhOTNkNjAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0NzAsNyArMTQ3MCw3IEBAIGlmIHRlc3QgeCIkZ2xpYl9uYXRpdmVfd2luMzIiID0geHllczsgdGhlbgorICAgR19NT0RVTEVfTERGTEFHUz0KKyBlbHNlCisgICBleHBvcnQgU0VECistICBHX01PRFVMRV9MREZMQUdTPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrICBHX01PRFVMRV9MREZMQUdTPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisgZmkKKyBkbmwgR19NT0RVTEVfSU1QTD0gZG9uJ3QgcmVzZXQsIHNvIGNtZC1saW5lIGNhbiBvdmVycmlkZQorIEdfTU9EVUxFX05FRURfVVNDT1JFPTAKK0BAIC0xNTM1LDkgKzE1MzUsOSBAQCBpZiB0ZXN0ICIkR19NT0RVTEVfSU1QTCIgPSAiR19NT0RVTEVfSU1QTF9ETCI7IHRoZW4KKyAJTERGTEFHUz0iJExERkxBR1MgJEdfTU9EVUxFX0xERkxBR1MiCisgZG5sICoqKiBjaGVjayBmb3IgT1NGMS81LjAgUlRMRF9HTE9CQUwgYnJva2VubmVzcworIAllY2hvICJ2b2lkIGdsaWJfcGx1Z2luX3Rlc3Qodm9pZCkgeyB9IiA+IHBsdWdpbi5jCistCSR7U0hFTEx9IC4vbGlidG9vbCAtLW1vZGU9Y29tcGlsZSAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorKwkke1NIRUxMfSAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7Q1BQRkxBR1N9IC1jIC1vIHBsdWdpbi5sbyBwbHVnaW4uYyA+L2Rldi9udWxsIDI+JjEKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLW1vZGU9bGluayAtLXRhZz1DQyAke0NDfSAke0NGTEFHU30gXAorIAkJJHtMREZMQUdTfSAtbW9kdWxlIC1vIHBsdWdpbi5sYSAtZXhwb3J0LWR5bmFtaWMgXAorIAkJLXNocmV4dCAiLm8iIC1hdm9pZC12ZXJzaW9uIHBsdWdpbi5sbyBcCisgCQktcnBhdGggL2RvbnQvY2FyZSA+L2Rldi9udWxsIDI+JjEKK0BAIC0xNjE0LDcgKzE2MTQsNyBAQCBmaQorIAorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIHN1ZmZpeCBvZiBtb2R1bGUgc2hhcmVkIGxpYnJhcmllcykKKyBleHBvcnQgU0VECistc2hyZXh0X2NtZHM9YC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorK3NocmV4dF9jbWRzPWAuLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWcgfCBncmVwICdec2hyZXh0X2NtZHM9J2AKKyBldmFsICRzaHJleHRfY21kcworIG1vZHVsZT15ZXMgZXZhbCBzdGRfc2hyZXh0PSRzaHJleHRfY21kcworICMgY2hvcCB0aGUgaW5pdGlhbCBkb3QKKy0tIAorMS43LjguNgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2ZpeC1jb25mbGljdGluZy1yYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzExMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitSZW5hbWUgJ3JhbmQnIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZsaWN0LgorCitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KKworZGlmZiAtdSBnbGliLTIuMzQuMy90ZXN0cy9yZWZjb3VudC9zaWduYWxzLmN+IGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYworLS0tIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEyLTExLTI2IDE3OjUyOjQ4LjAwMDAwMDAwMCArMDEwMAorKysrIGdsaWItMi4zNC4zL3Rlc3RzL3JlZmNvdW50L3NpZ25hbHMuYwkyMDEzLTAyLTA4IDE0OjI0OjEwLjA1MjQ3NzU0NiArMDEwMAorQEAgLTksNyArOSw3IEBACisgI2RlZmluZSBNWV9JU19URVNUX0NMQVNTKHRjbGFzcykgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKCh0Y2xhc3MpLCBHX1RZUEVfVEVTVCkpCisgI2RlZmluZSBNWV9URVNUX0dFVF9DTEFTUyh0ZXN0KSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKHRlc3QpLCBHX1RZUEVfVEVTVCwgR1Rlc3RDbGFzcykpCisgCistc3RhdGljIEdSYW5kICpyYW5kOworK3N0YXRpYyBHUmFuZCAqZ3JhbmQ7CisgCisgdHlwZWRlZiBzdHJ1Y3QgX0dUZXN0IEdUZXN0OworIHR5cGVkZWYgc3RydWN0IF9HVGVzdENsYXNzIEdUZXN0Q2xhc3M7CitAQCAtODQsNyArODQsNyBAQAorICAgICAgIE5VTEwKKyAgICAgfTsKKyAKKy0gICAgcmFuZCA9IGdfcmFuZF9uZXcoKTsKKysgICAgZ3JhbmQgPSBnX3JhbmRfbmV3KCk7CisgCisgICAgIHRlc3RfdHlwZSA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKEdfVFlQRV9PQkpFQ1QsICJHVGVzdCIsCisgICAgICAgICAmdGVzdF9pbmZvLCAwKTsKK0BAIC0yMTgsNyArMjE4LDcgQEAKKyBzdGF0aWMgdm9pZAorIG15X3Rlc3RfZG9fcHJvcCAoR1Rlc3QgKiB0ZXN0KQorIHsKKy0gIHRlc3QtPnZhbHVlID0gZ19yYW5kX2ludCAocmFuZCk7CisrICB0ZXN0LT52YWx1ZSA9IGdfcmFuZF9pbnQgKGdyYW5kKTsKKyAgIGdfb2JqZWN0X25vdGlmeSAoR19PQkpFQ1QgKHRlc3QpLCAidGVzdC1wcm9wIik7CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvZ2xpYi0yLjAtY29uZmlndXJlLXJlYWRsaW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3NTlkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLTIuMC1jb25maWd1cmUtcmVhZGxpbmsucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorY29uZmlndXJlLmFjOiBjaGFuZ2UgcmVhZGxpbmsgLWYgdG8gLW0KKworQ2hhbmdlICJyZWFkbGluayAtZiIgdG8gInJlYWRsaW5rIC1tIiBzaW5jZSAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyCittYXkgbm90IGV4aXN0LgorCitUaGlzIHBhdGNoIHNob3VsZCBnbyB0byB0aGUgdXBzdHJlYW0sIEkgd2lsbCBzZW5kIGl0IHNvb25lci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI3MSw3ICsyNzEsNyBAQCBBQ19BUkdfV0lUSChydW50aW1lLWxpYmRpciwKKyAgICAgICAgICAgIFtdLAorIAkgICBbd2l0aF9ydW50aW1lX2xpYmRpcj0iIl0pCisgR0xJQl9SVU5USU1FX0xJQkRJUj0iJHdpdGhfcnVudGltZV9saWJkaXIiCistQUJTX0dMSUJfUlVOVElNRV9MSUJESVI9ImByZWFkbGluayAtZiAkbGliZGlyLyR3aXRoX3J1bnRpbWVfbGliZGlyYCIKKytBQlNfR0xJQl9SVU5USU1FX0xJQkRJUj0iYHJlYWRsaW5rIC1tICRsaWJkaXIvJHdpdGhfcnVudGltZV9saWJkaXJgIgorIEFDX1NVQlNUKEdMSUJfUlVOVElNRV9MSUJESVIpCisgQUNfU1VCU1QoQUJTX0dMSUJfUlVOVElNRV9MSUJESVIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTElCX1JVTlRJTUVfTElCRElSLCBbdGVzdCAieCR3aXRoX3J1bnRpbWVfbGliZGlyIiAhPSAieCJdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL2dsaWItZ2V0dGV4dGl6ZS1kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDM1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9nbGliLWdldHRleHRpemUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKKyMgYW4gdmVyeSBvbGQgcGF0Y2ggY2hlcnJ5LXBpY2tlZCBpbiBldmVyeSBnbGliLTIuMCBwYXRjaCBkaXJlY3RvcnkuIFRoZSBlYXJsaWVzdCBjb250YWluZXIKKyMgZm9yIGl0IGlzIDIuNi41IGluIE9FLiBUaGUgZWFybGllc3QgY29tbWl0IGZvciBpdCBpcyBjOGU1NzAyMTI3ZTUwN2U4MmU2ZjY4YTRiOGM1NDY4MDNhY2NlYTlkCisjIGluIE9FIHNpZGUgd2hpY2ggcG9ydHMgZnJvbSBwcmV2aW91cyBiaXRrZWVwZXIgU0NNLiBJbiBPRSBzaWRlIGl0J3Mgb25seSB1c2VkIHRpbCAyLjEyLjQuCisjCisjIGtlZXAgaXQgc2luY2UgaXQncyBhbHdheXMgY2xlYW5lciB0byBub3QgaGFyZGNvZGUgZGVzdGluYXRpb24gcGF0aC4gVXNlIEBkYXRhZGlyQCBpcyBtb3JlCisjIHBvcnRhYmxlIGhlcmUuIG1hcmsgZm9yIHVwc3RyZWFtCisjCisjIGJ5IEtldmluIFRpYW4gPGtldmluLnRpYW5AaW50ZWwuY29tPiwgMDYvMjUvMjAxMAorIyBSZWJhc2VkIGJ5IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+LCAxMS8xNi8yMDEwCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluIGdsaWItMi4yNy4zL2dsaWItZ2V0dGV4dGl6ZS5pbgorLS0tIGdsaWItMi4yNy4zLW9yaWcvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMDktMDQtMDEgMDc6MDQ6MjAuMDAwMDAwMDAwICswODAwCisrKysgZ2xpYi0yLjI3LjMvZ2xpYi1nZXR0ZXh0aXplLmluCTIwMTAtMTEtMTYgMTI6NTU6MDYuODc0NjA1OTE2ICswODAwCitAQCAtNTIsNyArNTIsNyBAQAorIGRhdGFkaXI9QGRhdGFkaXJACisgZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAorIAorLWdldHRleHRfZGlyPSRwcmVmaXgvc2hhcmUvZ2xpYi0yLjAvZ2V0dGV4dAorK2dldHRleHRfZGlyPUBkYXRhZGlyQC9nbGliLTIuMC9nZXR0ZXh0CisgCisgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgIGNhc2UgIiQxIiBpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9wdGVzdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JlMDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjAvcHRlc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorSW5zdGVhZCBvZiB3cml0aW5nIHRoZSB0ZW1wb3JhcnkgbWFwcGluZyBmaWxlcyBpbiB0aGUgbWFwcGVkZmlsZSB0ZXN0IHRvIHRoZQordXNlciBydW50aW1lIGRpcmVjdG9yeSwgd3JpdGUgdGhlbSB0byAkVE1QLiAgVGhlIHJ1bnRpbWUgZGlyZWN0b3J5IG1heSBub3QKK2N1cnJlbnRseSBleGlzdCBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBvbiBhIG5vbi1kZXNrdG9wIHN5c3RlbSBhbmQgdGhlIHRlc3QKK2RvZXNuJ3QgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2dsaWIvdGVzdHMvbWFwcGVkZmlsZS5jIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK2luZGV4IDQwZTBlNjAuLjI3YTI0YmUgMTAwNjQ0CistLS0gYS9nbGliL3Rlc3RzL21hcHBlZGZpbGUuYworKysrIGIvZ2xpYi90ZXN0cy9tYXBwZWRmaWxlLmMKK0BAIC04MSw3ICs4MSw3IEBAIHRlc3Rfd3JpdGFibGUgKHZvaWQpCisgICBjb25zdCBnY2hhciAqbmV3ID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ4eXoiOworICAgZ2NoYXIgKnRtcF9jb3B5X3BhdGg7CisgCistICB0bXBfY29weV9wYXRoID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9ydW50aW1lX2RpciAoKSwgImdsaWItdGVzdC00MDk2LXJhbmRvbS1ieXRlcyIsIE5VTEwpOworKyAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3RtcF9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKyAKKyAgIGdfZmlsZV9nZXRfY29udGVudHMgKGdfdGVzdF9nZXRfZmlsZW5hbWUgKEdfVEVTVF9ESVNULCAiNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKSwgJmNvbnRlbnRzLCAmbGVuLCAmZXJyb3IpOworICAgZ19hc3NlcnRfbm9fZXJyb3IgKGVycm9yKTsKK0BAIC0xMjUsNyArMTI1LDcgQEAgdGVzdF93cml0YWJsZV9mZCAodm9pZCkKKyAgIGludCBmZDsKKyAgIGdjaGFyICp0bXBfY29weV9wYXRoOworIAorLSAgdG1wX2NvcHlfcGF0aCA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfcnVudGltZV9kaXIgKCksICJnbGliLXRlc3QtNDA5Ni1yYW5kb20tYnl0ZXMiLCBOVUxMKTsKKysgIHRtcF9jb3B5X3BhdGggPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF90bXBfZGlyICgpLCAiZ2xpYi10ZXN0LTQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCk7CisgCisgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzIChnX3Rlc3RfZ2V0X2ZpbGVuYW1lIChHX1RFU1RfRElTVCwgIjQwOTYtcmFuZG9tLWJ5dGVzIiwgTlVMTCksICZjb250ZW50cywgJmxlbiwgJmVycm9yKTsKKyAgIGdfYXNzZXJ0X25vX2Vycm9yIChlcnJvcik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwYWUwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnbGliCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExNTRmZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLTIuMC91Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRml4IERBVEFESVJOQU1FIG9uIHVjbGliYy9MaW51eAorCit0cmFuc2xhdGlvbiBmaWxlcyBhcmUgYWx3YXlzIGluc3RhbGxlZCB1bmRlciBQUkVGSVgvc2hhcmUvbG9jYWxlIGluIHVjbGliYworYmFzZWQgc3lzdGVtcyB0aGVyZWZvcmUgbGV0cyBzZXQgREFUQURJUk5BTUUgdG8gInNoYXJlIi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdsaWItMi4zOC4yL200bWFjcm9zL2dsaWItZ2V0dGV4dC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdsaWItMi4zOC4yLm9yaWcvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00CTIwMTMtMTEtMDcgMDc6Mjk6MTMuMDAwMDAwMDAwIC0wODAwCisrKysgZ2xpYi0yLjM4LjIvbTRtYWNyb3MvZ2xpYi1nZXR0ZXh0Lm00CTIwMTQtMDMtMTUgMTQ6NTE6NTQuNzEyMTM1NjQ0IC0wNzAwCitAQCAtMjM5LDcgKzIzOSw3IEBACisgCSAgICAgIFtDQVRPQkpFWFQ9Lm1vCisgICAgICAgICAgICAgICAgREFUQURJUk5BTUU9bGliXSkKKyAJICAgIDs7CistCSAgICAqLSotb3BlbmJzZCopCisrCSAgICAqLSotb3BlbmJzZCogfCAqLSotbGludXgtdWNsaWJjKikKKyAJICAgIENBVE9CSkVYVD0ubW8KKyAgICAgICAgICAgICBEQVRBRElSTkFNRT1zaGFyZQorIAkgICAgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDQuMS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWItMi4wXzIuNDQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTNkMzZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi0yLjAvZ2xpYi0yLjBfMi40NC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZ2xpYi5pbmMKKworUEUgPSAiMSIKKworU0hSVF9WRVIgPSAiJHtAb2UudXRpbHMudHJpbV92ZXJzaW9uKCIke1BWfSIsIDIpfSIKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vZ2xpYi8ke1NIUlRfVkVSfS9nbGliLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtbGlidG9vbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29uZmxpY3RpbmctcmFuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtbWFyY2gtaTQ4Ni1pbnRvLUNGTEFHUy1hdXRvbWF0aWNhbGx5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsaWItMi4wLWNvbmZpZ3VyZS1yZWFkbGluay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vcHRlc3QtcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZmlndXJlLmFjLURvLW5vdC11c2UtcmVhZGxpbmstd2hlbi1jcm9zcy1jb21waWxpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy1ydW4tbWVkaWEtc2RYLWRyaXZlLW1vdW50LWlmLXVzZXJuYW1lLXJvb3QucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLVJlbW92ZS10aGUtd2FybmluZy1hYm91dC1kZXByZWNhdGVkLXBhdGhzLWluLXNjaGVtYXMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBmaWxlOi8vZ2xpYi1nZXR0ZXh0aXplLWRpci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjgzZWZiYTQ3MjJhOTY3NGI5NzQzN2QxZDk5YWY3OWRiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg4MTFkZWFjYWY4YTUwM2QwYTliNzAxNzc3ZWEwNzljYTZhNDI3N2JlMTBlM2Q3MzBkMjExMjczNWQ1ZWNhMDciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWItMi4wL2dsaWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MmY3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLTIuMC9nbGliLmluYwpAQCAtMCwwICsxLDEwNCBAQAorU1VNTUFSWSA9ICJBIGdlbmVyYWwtcHVycG9zZSB1dGlsaXR5IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTGliIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkgbGlicmFyeSwgd2hpY2ggcHJvdmlkZXMgbWFueSB1c2VmdWwgZGF0YSB0eXBlcywgbWFjcm9zLCB0eXBlIGNvbnZlcnNpb25zLCBzdHJpbmcgdXRpbGl0aWVzLCBmaWxlIHV0aWxpdGllcywgYSBtYWluIGxvb3AgYWJzdHJhY3Rpb24sIGFuZCBzbyBvbi4iCitIT01FUEFHRSA9ICJodHRwczovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2xpYi8iCisKKyMgcGNyZSBpcyB1bmRlciBCU0Q7CisjIGRvY3MvcmVmZXJlbmNlL0NPUFlJTkcgaXMgd2l0aCBhICdwdWJsaWMgZG9tYWknLWxpa2UgbGljZW5zZSEKK0xJQ0VOU0UgPSAiTEdQTHYyKyAmIEJTRCAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2JmNTAwMDJhZWZkMDAyZjQ5ZTdiYjg1NDA2M2Y3ZTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xpYi9nbGliLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YjRmMGY0YTM5OWMxOWU1ZWJiMjBjMzFiNzlkNmJjMzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ21vZHVsZS9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbW9kdWxlL2dtb2R1bGUuaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTE3O21kNT1iNGYwZjRhMzk5YzE5ZTVlYmIyMGMzMWI3OWQ2YmMzMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGliL3BjcmUvQ09QWUlORzttZDU9MjY2ZWJjM2ZmNzRlZTljZTZmYWQ2NTU3NzY2N2MwZjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xpYi9wY3JlL3BjcmUuaDtiZWdpbmxpbmU9MTE7ZW5kbGluZT0zNTttZDU9ZGUyN2YyYmY2MzNkMjBhMmI3YWYwYjE5ODM0MjMyODMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jcy9yZWZlcmVuY2UvQ09QWUlORzttZDU9ZjUxYTUxMDBjMTdhZjZiYWUwMDczNWNkNzkxZTFmY2MiCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCitTRUNUSU9OID0gImxpYnMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgdmlydHVhbC9saWJpY29udiBsaWJmZmkgemxpYiIKK0RFUEVORFNfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgJyBkYnVzJywgJycsIGQpfSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInBrZ2NvbmZpZy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUgbGliZmZpLW5hdGl2ZSB6bGliLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1saWJ0b29sIG5hdGl2ZXNkay1nZXR0ZXh0IG5hdGl2ZXNkay1saWJmZmkgbmF0aXZlc2RrLXpsaWIgJHtCUE59LW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXV0aWxzICR7UE59LWJhc2gtY29tcGxldGlvbiAke1BOfS1jb2RlZ2VuIgorCitMRUFEX1NPTkFNRSA9ICJsaWJnbGliLTIuMC4qIgorRklMRVNfJHtQTn0tdXRpbHMgPSAiJHtiaW5kaXJ9LyogJHtkYXRhZGlyfS9nbGliLTIuMC9nZXR0ZXh0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IGd0ay1kb2MgcGtnY29uZmlnIHB0ZXN0LWdub21lCisKK1MgPSAiJHtXT1JLRElSfS9nbGliLSR7UFZ9IgorCitDT1JFQ09ORiA9ICItLWRpc2FibGUtZHRyYWNlIC0tZGlzYWJsZS1mYW0gLS1kaXNhYmxlLWxpYmVsZiAtLWRpc2FibGUtc3lzdGVtdGFwIC0tZGlzYWJsZS1tYW4iCisKK1BSSU5URiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9bm8iCitQUklOVEZfZGFyd2luID0gIi0tZW5hYmxlLWluY2x1ZGVkLXByaW50Zj15ZXMiCitQUklOVEZfbWluZ3czMiA9ICItLWVuYWJsZS1pbmNsdWRlZC1wcmludGY9eWVzIgorRVhUUkFfT0VDT05GID0gIiR7UFJJTlRGfSAke0NPUkVDT05GfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiJHtDT1JFQ09ORn0gLS1kaXNhYmxlLXNlbGludXgiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtbGliaWNvbnY9Z251IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLiosIyEke1VTUkJJTlBBVEh9L2VudiBweXRob24sJyAke1N9L2dpby9nZGJ1cy0yLjAvY29kZWdlbi9nZGJ1cy1jb2RlZ2VuLmluCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9ICR7bGliZGlyfS9naW8gJHtkYXRhZGlyfS9nbGliLTIuMC9zY2hlbWFzIFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dC9ta2luc3RhbGxkaXJzICR7ZGF0YWRpcn0vZ2xpYi0yLjAvZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dsaWItMi4wL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliKiR7U09MSUJTREVWfSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vbW9kdWxlcy8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2RhdGFkaXJ9L2dsaWItMi4wL2dkYiAke2RhdGFkaXJ9L2dkYiBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9naW8vbW9kdWxlcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ2xpYi0yLjAvaW5zdGFsbGVkLXRlc3RzL2dsaWIvLmRlYnVnIgorRklMRVNfJHtQTn0tY29kZWdlbiA9ICIke2RhdGFkaXJ9L2dsaWItMi4wL2NvZGVnZW4vKi5weSIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitVU0VfTkxTID0gInllcyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9ndGVzdGVyLXJlcG9ydCBdOyB0aGVuCisJCXNlZCAke0R9JHtiaW5kaXJ9L2d0ZXN0ZXItcmVwb3J0IC1pIC1lICcxc3xeIyEuKnwjIS91c3IvYmluL2VudiBweXRob258JworCWZpCisKKwkjIFJlbW92ZSBzb21lIHVucGFja2FnZWQgZmlsZXMKKwlybSAtZiAke0R9JHtkYXRhZGlyfS9nbGliLTIuMC9jb2RlZ2VuLyoucHljCisJcm0gLWYgJHtEfSR7ZGF0YWRpcn0vZ2xpYi0yLjAvY29kZWdlbi8qLnB5bworCisJIyBTb21lIGRpc3Ryb3MgaGF2ZSBib3RoIC9iaW4vcGVybCBhbmQgL3Vzci9iaW4vcGVybCwgYnV0IHdlIHNldCBwZXJsIGxvY2F0aW9uCisJIyBmb3IgdGFyZ2V0IGFzIC91c3IvYmluL3BlcmwsIHNvIGZpeCBpdCB0byAvdXNyL2Jpbi9wZXJsLgorCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9nbGliLW1rZW51bXMgXTsgdGhlbgorCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L2dsaWItbWtlbnVtcworCWZpCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJcCisgICAgICAgICAgICBnbm9tZS1kZXNrdG9wLXRlc3RpbmcgXAorICAgICAgICAgICAgdHpkYXRhIFwKKyAgICAgICAgICAgIHR6ZGF0YS1hbWVyaWNhcyBcCisgICAgICAgICAgICB0emRhdGEtYXNpYSBcCisgICAgICAgICAgICB0emRhdGEtZXVyb3BlIFwKKyAgICAgICAgICAgIHR6ZGF0YS1wb3NpeCBcCisgICAgICAgICAgICBweXRob24tcHlnb2JqZWN0IFwKKyAgICAgICAgICAgIHB5dGhvbi1kYnVzIFwKKyAgICAgICAgICAgIHNoYXJlZC1taW1lLWluZm8gXAorICAgICAgICAgICAiCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0X2FwcGVuZF9saWJjLWdsaWJjID0gIlwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LXV0Zi0xNiBcCisgICAgICAgICAgICBnbGliYy1jaGFybWFwLXV0Zi04IFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWNwMTI1NSBcCisgICAgICAgICAgICBnbGliYy1jaGFybWFwLWNwMTI1NSBcCisgICAgICAgICAgICBnbGliYy1nY29udi11dGYtMzIgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtdXRmLTcgXAorICAgICAgICAgICAgZ2xpYmMtZ2NvbnYtZXVjLWpwIFwKKyAgICAgICAgICAgIGdsaWJjLWdjb252LWlzbzg4NTktMSBcCisgICAgICAgICAgICBnbGliYy1nY29udi1pc284ODU5LTE1IFwKKyAgICAgICAgICAgIGdsaWJjLWNoYXJtYXAtaW52YXJpYW50IFwKKyAgICAgICAgICAgIGdsaWJjLWxvY2FsZWRhdGEtdHJhbnNsaXQtY2prLXZhcmlhbnRzIFwKKyAgICAgICAgICAgIgorCitJTlNBTkVfU0tJUF8ke1BOfS1wdGVzdCArPSAibGliZGlyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ0LjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliLW5ldHdvcmtpbmcvZ2xpYi1uZXR3b3JraW5nXzIuNDQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjkxYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYi1uZXR3b3JraW5nL2dsaWItbmV0d29ya2luZ18yLjQ0LjAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJHTGliIG5ldHdvcmtpbmcgZXh0ZW5zaW9ucyIKK0RFU0NSSVBUSU9OID0gImdsaWItbmV0d29ya2luZyBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGNlcnRhaW4gR0xpYiBuZXR3b3JraW5nIGZlYXR1cmVzIHRoYXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGRpcmVjdGx5IGluIEdMaWIgaXRzZWxmIGJlY2F1c2Ugb2YgdGhlaXIgZGVwZW5kZW5jaWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQuZ25vbWUub3JnL2Jyb3dzZS9nbGliLW5ldHdvcmtpbmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImdsaWItMi4wIGludGx0b29sLW5hdGl2ZSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNjk4OWIyMGNmM2IyNmRkNWFlMjcyZTA0YTlhY2IwYjMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4ZjhhMzQwZDNiYTk5YmZkZWYzOGI2NTNkYTkyOTY1MmVhNjY0MGUyNzk2OWQyOWY3YWM1MWZiYmUxMWE0MzQ2IgorCitQQUNLQUdFQ09ORklHID8/PSAiY2EtY2VydGlmaWNhdGVzIGdudXRscyIKKworIyBObyBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGl0IHdvcmtzIHdpdGhvdXQgY2EtY2VydGlmaWNhdGVzIGluc3RhbGxlZAorUEFDS0FHRUNPTkZJR1tjYS1jZXJ0aWZpY2F0ZXNdID0gIi0td2l0aC1jYS1jZXJ0aWZpY2F0ZXM9JHtzeXNjb25mZGlyfS9zc2wvY2VydHMvY2EtY2VydGlmaWNhdGVzLmNydCwtLXdpdGhvdXQtY2EtY2VydGlmaWNhdGVzIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0td2l0aC1nbnV0bHMsLS13aXRob3V0LWdudXRscyxnbnV0bHMiCitQQUNLQUdFQ09ORklHW2xpYnByb3h5XSA9ICItLXdpdGgtbGlicHJveHksLS13aXRob3V0LWxpYnByb3h5LGxpYnByb3h5IgorUEFDS0FHRUNPTkZJR1twa2NzMTFdID0gIi0td2l0aC1wa2NzMTEsLS13aXRob3V0LXBrY3MxMSxwMTEta2l0IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWdub21lLXByb3h5IgorCitpbmhlcml0IGdub21lYmFzZSBnZXR0ZXh0CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5zbyAke2RhdGFkaXJ9L2RidXMtMS9zZXJ2aWNlcy8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9naW8vbW9kdWxlcy8uZGVidWcvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ2lvL21vZHVsZXMvbGliZ2lvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dpby9tb2R1bGVzL2xpYmdpbyouYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvY3Jvc3MtbG9jYWxlZGVmLW5hdGl2ZS9maXhfZm9yX2NlbnRvc181LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2YTQ4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmUvZml4X2Zvcl9jZW50b3NfNS44LnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisKK1RoaXMgaXMgYSBoYWNrIHRvIGZpeCBidWlsZGluZyB0aGUgbG9jYWxlIGJpdHMgb24gYW4gb2xkZXIKK0NlbnRPcyA1LlggbWFjaGluZQorCitJbmRleDogZ2l0L2xvY2FsZS9wcm9ncmFtcy9jb25maWcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKKysrKyBnaXQub3JpZy9sb2NhbGUvcHJvZ3JhbXMvY29uZmlnLmgKK0BAIC0xOSw2ICsxOSw4IEBACisgI2lmbmRlZiBfTERfQ09ORklHX0gKKyAjZGVmaW5lIF9MRF9DT05GSUdfSAkxCisgCisrI2RlZmluZSBEVU1NWV9MT0NBTEVfVAorKworIC8qIFVzZSB0aGUgaW50ZXJuYWwgdGV4dGRvbWFpbiB1c2VkIGZvciBsaWJjIG1lc3NhZ2VzLiAgKi8KKyAjZGVmaW5lIFBBQ0tBR0UgX2xpYmNfaW50bF9kb21haW5uYW1lCisgI2lmbmRlZiBWRVJTSU9OCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9jcm9zcy1sb2NhbGVkZWYtbmF0aXZlXzIuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1M2VjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2Nyb3NzLWxvY2FsZWRlZi1uYXRpdmVfMi4yMi5iYgpAQCAtMCwwICsxLDU5IEBACitTVU1NQVJZID0gIkNyb3NzIGxvY2FsZSBnZW5lcmF0aW9uIHRvb2wgZm9yIGdsaWJjIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMLTIuMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworCitpbmhlcml0IG5hdGl2ZQoraW5oZXJpdCBhdXRvdG9vbHMKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vJHtQTn06JHtGSUxFX0RJUk5BTUV9L2dsaWJjOiIKKworQlJBTkNIID89ICJyZWxlYXNlLyR7UFZ9L21hc3RlciIKK0dMSUJDX0dJVF9VUkkgPz0gImdpdDovL3NvdXJjZXdhcmUub3JnL2dpdC9nbGliYy5naXQiCisKK1NSQ19VUkkgPSAiJHtHTElCQ19HSVRfVVJJfTticmFuY2g9JHtCUkFOQ0h9O25hbWU9Z2xpYmMgXAorICAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL2tyYWovbG9jYWxlZGVmO2JyYW5jaD1tYXN0ZXI7bmFtZT1sb2NhbGVkZWY7ZGVzdHN1ZmZpeD1naXQvbG9jYWxlZGVmIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9mb3JfY2VudG9zXzUuOC5wYXRjaCBcCisgICAgICAgICAgICR7RUdMSUJDUEFUQ0hFU30gXAorIgorRUdMSUJDUEFUQ0hFUyA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIzLWVnbGliYy1SZXNvbHZlLV9fZnBzY3JfdmFsdWVzLW9uLVNINC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI0LWVnbGliYy1Gb3J3YXJkLXBvcnQtZWdsaWJjLW9wdGlvbnMtZ3JvdXBzLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaCBcCisiCisKK1NSQ1JFVl9nbGliYyA/PSAiYTM0ZDFjNmFmYzg2NTIxZDZhZDE3NjYyYTNiNTM2MmQ4NDgxNTE0YyIKK1NSQ1JFVl9sb2NhbGVkZWYgPz0gImM4MzMzNjczNDhkMzlkYWQ3YmEwMTg5OTBiZmRhZmZhZWM4ZTllZDMiCisKKyMgTWFrZXMgZm9yIGEgcmF0aGVyIGxvbmcgcmV2ICgyMiBjaGFyYWN0ZXJzKSwgYnV0Li4uCisjCitTUkNSRVZfRk9STUFUID0gImdsaWJjX2xvY2FsZWRlZiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1nbGliYz0ke1N9IgorQ0ZMQUdTICs9ICItZmdudTg5LWlubGluZSAtc3RkPWdudTk5IC1ESVNfSU5cKHhcKT0nMCciCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtTfS9sb2NhbGVkZWYvY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQorCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vbG9jYWxlZGVmICR7RH0ke2JpbmRpcn0vY3Jvc3MtbG9jYWxlZGVmCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbGxhdGVyYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjU1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb2xsYXRlcmFsLmluYwpAQCAtMCwwICsxLDIyIEBACitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA/PSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiBcCisgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT01NT05fTElDRU5TRV9ESVJ9L0xHUEwtMi4xO21kNT0xYTZkMjY4ZmQyMTg2NzVmZmVhOGJlNTU2Nzg4Yjc4MCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJjL2luZGV4Lmh0bWwiCisKKyMgVGhpcyBuZWVkcyB0byBtYXRjaCB3aXRoIGdsaWJjLmluYywgb3RoZXJ3aXNlIGdsaWJjLXNjcmlwdHMgYW5kIGdsaWJjLWxvY2FsZQorIyB3aWxsIGZhaWwgdG8gZmluZCBtYWluIGdsaWJjLCBmb3IgZGV0YWlscyBzZWUKKyMgaHR0cDovL2xpc3RzLm9wZW5lbWJlZGRlZC5vcmcvcGlwZXJtYWlsL29wZW5lbWJlZGRlZC1jb3JlLzIwMTUtSmFudWFyeS8xMDA2NzkuaHRtbAorQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK2RvX2ZldGNoW25vZXhlY10gPSAiMSIKK2RvX3VucGFja1tub2V4ZWNdID0gIjEiCitkb19wYXRjaFtub2V4ZWNdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGxbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKK0NPTVBBVElCTEVfSE9TVF9saWJjLW11c2xfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCitDT01QQVRJQkxFX0hPU1RfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIm51bGwiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb21tb24uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTE1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1jb21tb24uaW5jCkBAIC0wLDAgKzEsOSBAQAorU1VNTUFSWSA9ICJHTElCQyAoR05VIEMgTGlicmFyeSkiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEMgTGlicmFyeSBpcyB1c2VkIGFzIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IGluIG1vc3Qgc3lzdGVtcyB3aXRoIHRoZSBMaW51eCBrZXJuZWwuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbGliYy5odG1sIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA/PSAiZmlsZTovL0xJQ0VOU0VTO21kNT0wN2EzOTRiMjZlMDkwMmI5ZmZkZWMwMzc2NTIwOTc3MCBcCisgICAgICBmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMgXAorICAgICAgZmlsZTovL3Bvc2l4L3J4c3BlbmNlci9DT1BZUklHSFQ7bWQ1PWRjNTQ4NWJiMzk0YTEzYjIzMzJlYzFjNzg1ZjVkODNhIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YmJiNDYxMjExYTMzYjEzNGQ0MmVkNWVlODAyYjM3ZmYgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1pbml0aWFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTAwODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbC5pbmMKQEAgLTAsMCArMSw3NiBAQAorREVQRU5EUyA9ICJsaW51eC1saWJjLWhlYWRlcnMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgbGliZ2NjLWluaXRpYWwiCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwiCisKK1BBQ0tBR0VTID0gIiIKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKKworZG9fY29uZmlndXJlICgpIHsKKwkoY2QgJHtTfSAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgaW4gcnVubmluZyBnbnUtY29uZmlnaXplIgorCWZpbmQgJHtTfSAtbmFtZSAiY29uZmlndXJlIiB8IHhhcmdzIHRvdWNoCisJJHtTfS9jb25maWd1cmUgLS1ob3N0PSR7VEFSR0VUX1NZU30gLS1idWlsZD0ke0JVSUxEX1NZU30gXAorCQktLXByZWZpeD0vdXNyIFwKKwkJLS13aXRob3V0LWN2cyAtLWRpc2FibGUtc2FuaXR5LWNoZWNrcyBcCisJCS0td2l0aC1oZWFkZXJzPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0gXAorCQktLXdpdGgta2NvbmZpZz0ke1NUQUdJTkdfQklORElSX05BVElWRX0gXAorCQktLWVuYWJsZS1oYWNrZXItbW9kZSAtLWVuYWJsZS1hZGRvbnMKK30KKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGNyb3NzLWNvbXBpbGluZz15ZXMgaW5zdGFsbF9yb290PSR7RH0gXAorCWluY2x1ZGVkaXI9JyR7aW5jbHVkZWRpcn0nIHByZWZpeD0nJHtwcmVmaXh9JyBcCisJaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycz15ZXMgaW5zdGFsbC1oZWFkZXJzCisKKwlvZV9ydW5tYWtlIGNzdS9zdWJkaXJfbGliCisJbWtkaXIgLXAgJHtEfSR7bGliZGlyfS8KKwlpbnN0YWxsIC1tIDY0NCBjc3UvY3J0WzFpbl0ubyAke0R9JHtsaWJkaXJ9CisKKwkjIFR3byBoZWFkZXJzIC0tIHN0dWJzLmggYW5kIGZlYXR1cmVzLmggLS0gYXJlbid0IGluc3RhbGxlZCBieSBpbnN0YWxsLWhlYWRlcnMsCisJIyBzbyBkbyB0aGVtIGJ5IGhhbmQuICBXZSBjYW4gdG9sZXJhdGUgYW4gZW1wdHkgc3R1YnMuaCBmb3IgdGhlIG1vbWVudC4KKwkjIFNlZSBlLmcuIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MvMjAwMi0wMS9tc2cwMDkwMC5odG1sCisJbWtkaXIgLXAgJHtEfSR7aW5jbHVkZWRpcn0vZ251LworCXRvdWNoICR7RH0ke2luY2x1ZGVkaXJ9L2dudS9zdHVicy5oCisJY3AgJHtTfS9pbmNsdWRlL2ZlYXR1cmVzLmggJHtEfSR7aW5jbHVkZWRpcn0vZmVhdHVyZXMuaAorCisJaWYgWyAtZSAke0J9L2JpdHMvc3RkaW9fbGltLmggXTsgdGhlbgorCQljcCAke0J9L2JpdHMvc3RkaW9fbGltLmggICR7RH0ke2luY2x1ZGVkaXJ9L2JpdHMvCisJZmkKKwkjIGFkZCBsaW5rcyB0byBsaW51eC1saWJjLWhlYWRlcnM6IGZpbmFsIGdsaWJjIGJ1aWxkIG5lZWQgdGhpcy4KKwlmb3IgdCBpbiBsaW51eCBhc20gYXNtLWdlbmVyaWM7IGRvCisJCWxuIC1zICR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0vJHQgJHtEfSR7aW5jbHVkZWRpcn0vCisJZG9uZQorfQorCitkb19pbnN0YWxsX2xvY2FsZSgpIHsKKwk6Cit9CisKK2RvX3NpdGVjb25maWcgKCkgeworCToKK30KKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZ2xpYmNpbml0aWFsX3NzdGF0ZV9wb3N0aW5zdCIKK2dsaWJjaW5pdGlhbF9zc3RhdGVfcG9zdGluc3QoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBSZWNyZWF0ZSB0aGUgc3ltbGlua3MgdG8gZW5zdXJlIHRoZXkgcG9pbnQgdG8gdGhlIGNvcnJlY3QgbG9jYXRpb24KKwkJZm9yIHQgaW4gbGludXggYXNtIGFzbS1nZW5lcmljOyBkbworCQkJcm0gLWYgJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0ke2luY2x1ZGVkaXJ9LyR0CisJCQlsbiAtcyAke1NUQUdJTkdfRElSX1RBUkdFVH0ke2luY2x1ZGVkaXJ9LyR0ICR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9JHtpbmNsdWRlZGlyfS8KKwkJZG9uZQorCWZpCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKKworIyBXZSBkb24ndCBpbnN0YWxsIGFueSBzY3JpcHRzIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZXZhY3VhdGUKK2RvX2V2YWN1YXRlX3NjcmlwdHMgKCkgeworCToKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWxfMi4yMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWluaXRpYWxfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWIwMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtaW5pdGlhbF8yLjIyLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ2xpYmNfJHtQVn0uYmIKK3JlcXVpcmUgZ2xpYmMtaW5pdGlhbC5pbmMKKworREVQRU5EUyArPSAia2NvbmZpZy1mcm9udGVuZHMtbmF0aXZlIgorCisjIG1haW4gZ2xpYmMgcmVjaXBlcyBtdWNrIHdpdGggVEFSR0VUX0NQUEZMQUdTIHRvIHBvaW50IGludG8KKyMgZmluYWwgdGFyZ2V0IHN5c3Jvb3QgYnV0IHdlCisjIGFyZSBub3QgdGhlcmUgd2hlbiBidWlsZGluZyBnbGliYy1pbml0aWFsCisjIHNvIHJlc2V0IGl0IGhlcmUKKworVEFSR0VUX0NQUEZMQUdTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjJkNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbGQuaW5jCkBAIC0wLDAgKzEsNTYgQEAKK2RlZiBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMoZCwgaW5mb3MsIGRpY3QpOgorICAgIHR1bmUgPSBkLmdldFZhcigiREVGQVVMVFRVTkUiLCBUcnVlKSBvciAiIgorICAgIGxpYmRpciA9IGQuZ2V0VmFyKCJiYXNlX2xpYmRpciIsIFRydWUpIG9yICIiCisgICAgaWYgdHVuZSBpbiBkaWN0OgorICAgICAgICBpbmZvc1snbGRjb25maWcnXS5hZGQoJ3siJyArIGxpYmRpciArICcvJyArIGRpY3RbdHVuZV1bMF0gKyAnIiwnICsgZGljdFt0dW5lXVsxXSArICcgfScpCisgICAgICAgIGluZm9zWydsZGRyZXdyaXRlJ10uYWRkKGxpYmRpcisnLycrZGljdFt0dW5lXVswXSkKKworZGVmIGdsaWJjX2RsX2luZm8oZCk6CisgICAgbGRfaW5mb19hbGwgPSB7CisgICAgICAgICJtaXBzIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjQiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHNlbCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0ZWwtbjMyIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbCI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwcy1uZiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0LW5mLW4zMiI6IFsibGQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAibWlwczY0LW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJtaXBzNjRlbC1uZi1uMzIiOiBbImxkLnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIm1pcHM2NGVsLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjLW5mIjogWyJsZC5zby4xIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJwb3dlcnBjNjQiOiBbImxkNjQuc28uMSIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAicG93ZXJwYzY0LW5mIjogWyJsZDY0LnNvLjEiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgImNvcmUyLTMyIjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlMi02NCI6IFsibGQtbGludXgteDg2LTY0LnNvLjIiLCAiRkxBR19FTEZfTElCQzYiXSwKKyAgICAgICAgIng4NiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAieDg2LTY0IjogWyJsZC1saW51eC14ODYtNjQuc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiaTU4NiI6IFsibGQtbGludXguc28uMiIsICJGTEFHX0VMRl9MSUJDNiJdLAorICAgICAgICAiY29yZWk3LTMyIjogWyJsZC1saW51eC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgICAgICJjb3JlaTctNjQiOiBbImxkLWxpbnV4LXg4Ni02NC5zby4yIiwgIkZMQUdfRUxGX0xJQkM2Il0sCisgICAgfQorCisgICAgaW5mb3MgPSB7J2xkY29uZmlnJzpzZXQoKSwgJ2xkZHJld3JpdGUnOnNldCgpfQorICAgIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhkLCBpbmZvcywgbGRfaW5mb19hbGwpCisKKyAgICAjREVGQVVMVFRVTkVfTVVMVElMSUJfT1JJR0lOQUwKKyAgICBvcmlnaW5hbF90dW5lPWQuZ2V0VmFyKCJERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTCIsVHJ1ZSkKKyAgICBpZiBvcmlnaW5hbF90dW5lOgorICAgICAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiREVGQVVMVFRVTkUiLCBvcmlnaW5hbF90dW5lKQorICAgICAgICBsZF9hcHBlbmRfaWZfdHVuZV9leGlzdHMobG9jYWxkYXRhLCBpbmZvcywgbGRfaW5mb19hbGwpCisKKyAgICB2YXJpYW50cyA9IGQuZ2V0VmFyKCJNVUxUSUxJQl9WQVJJQU5UUyIsIFRydWUpIG9yICIiCisgICAgZm9yIGl0ZW0gaW4gdmFyaWFudHMuc3BsaXQoKToKKyAgICAgICAgbG9jYWxkYXRhID0gYmIuZGF0YS5jcmVhdGVDb3B5KGQpCisgICAgICAgIG92ZXJyaWRlcyA9IGxvY2FsZGF0YS5nZXRWYXIoIk9WRVJSSURFUyIsIEZhbHNlKSArICI6dmlydGNsYXNzLW11bHRpbGliLSIgKyBpdGVtCisgICAgICAgIGxvY2FsZGF0YS5zZXRWYXIoIk9WRVJSSURFUyIsIG92ZXJyaWRlcykKKyAgICAgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisgICAgICAgIGxkX2FwcGVuZF9pZl90dW5lX2V4aXN0cyhsb2NhbGRhdGEsIGluZm9zLCBsZF9pbmZvX2FsbCkKKyAgICBpbmZvc1snbGRjb25maWcnXSA9ICcsJy5qb2luKGluZm9zWydsZGNvbmZpZyddKQorICAgIGluZm9zWydsZGRyZXdyaXRlJ10gPSAnICcuam9pbihpbmZvc1snbGRkcmV3cml0ZSddKQorICAgIHJldHVybiBpbmZvcworCitFR0xJQkNfS05PV05fSU5URVJQUkVURVJfTkFNRVMgPSAiJHtAZ2xpYmNfZGxfaW5mbyhkKVsnbGRjb25maWcnXX0iCitSVExETElTVCA9ICIke0BnbGliY19kbF9pbmZvKGQpWydsZGRyZXdyaXRlJ119IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbG9jYWxlLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2ZDA3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZS5pbmMKQEAgLTAsMCArMSw5NiBAQAoraW5jbHVkZSBnbGliYy1jb2xsYXRlcmFsLmluYworCitTVU1NQVJZID0gIkxvY2FsZSBkYXRhIGZyb20gZ2xpYmMiCisKK0JQTiA9ICJnbGliYyIKK0xPQ0FMRUJBU0VQTiA9ICIke01MUFJFRklYfWdsaWJjIgorCisjIGdsaWJjLWNvbGxhdGVyYWwuaW5jIGluaGliaXRzIGFsbCBkZWZhdWx0IGRlcHMsIGJ1dCBkb19wYWNrYWdlIG5lZWRzIG9iamNvcHkKKyMgRVJST1I6IG9iamNvcHkgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEyNyAoY21kIHdhcyAnaTU4Ni13ZWJvcy1saW51eC1vYmpjb3B5JyAtLW9ubHkta2VlcC1kZWJ1ZyAnZ2xpYmMtbG9jYWxlLzIuMTctcjAvcGFja2FnZS91c3IvbGliL2djb252L0lCTTExNjYuc28nICdnbGliYy1sb2NhbGUvMi4xNy1yMC9wYWNrYWdlL3Vzci9saWIvZ2NvbnYvLmRlYnVnL0lCTTExNjYuc28nKQorIyBFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMKK0JJTlVUSUxTREVQID0gInZpcnR1YWwvJHtNTFBSRUZJWH0ke1RBUkdFVF9QUkVGSVh9YmludXRpbHM6ZG9fcG9wdWxhdGVfc3lzcm9vdCIKK0JJTlVUSUxTREVQX2NsYXNzLW5hdGl2ZXNkayA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1iaW51dGlscy1jcm9zc3Nkazpkb19wb3B1bGF0ZV9zeXNyb290IgorZG9fcGFja2FnZVtkZXBlbmRzXSArPSAiJHtCSU5VVElMU0RFUH0iCisKKyMgQmluYXJ5IGxvY2FsZXMgYXJlIGdlbmVyYXRlZCBhdCBidWlsZCB0aW1lIGlmIEVOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT04KKyMgaXMgc2V0LiBUaGUgaWRlYSBpcyB0byBhdm9pZCBydW5uaW5nIGxvY2FsZWRlZiBvbiB0aGUgdGFyZ2V0IChhdCBmaXJzdCBib290KQorIyB0byBkZWNyZWFzZSBpbml0aWFsIGJvb3QgdGltZSBhbmQgYXZvaWQgbG9jYWxlZGVmIGJlaW5nIGtpbGxlZCBieSB0aGUgT09NCisjIGtpbGxlciB3aGljaCB1c2VkIHRvIGVmZmVjdGl2ZWx5IGJyZWFrIGkxOG4gb24gbWFjaGluZXMgd2l0aCA8IDEyOE1CIFJBTS4KKworIyBkZWZhdWx0IHRvIGRpc2FibGVkIAorRU5BQkxFX0JJTkFSWV9MT0NBTEVfR0VORVJBVElPTiA/PSAiMCIKK0VOQUJMRV9CSU5BUllfTE9DQUxFX0dFTkVSQVRJT05fcG4tbmF0aXZlc2RrLWdsaWJjLWxvY2FsZSA9ICIwIgorCisjZW5hYmxlIGxvY2FsZSBnZW5lcmF0aW9uIG9uIHRoZXNlIGFyY2hlcworIyBCSU5BUllfTE9DQUxFX0FSQ0hFUyBpcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMKK0JJTkFSWV9MT0NBTEVfQVJDSEVTID89ICJhcm0uKiBhYXJjaDY0IGlbMy02XTg2IHg4Nl82NCBwb3dlcnBjIG1pcHMgbWlwczY0IgorCisjIHNldCAiMSIgdG8gdXNlIGNyb3NzLWxvY2FsZWRlZiBmb3IgbG9jYWxlIGdlbmVyYXRpb24KKyMgc2V0ICIwIiBmb3IgcWVtdSBlbXVsYXRpb24gb2YgbmF0aXZlIGxvY2FsZWRlZiBmb3IgbG9jYWxlIGdlbmVyYXRpb24KK0xPQ0FMRV9HRU5FUkFUSU9OX1dJVEhfQ1JPU1MtTE9DQUxFREVGID0gIjEiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliYy1sb2NhbGUiCisKK1BBQ0tBR0VTID0gImxvY2FsZWRlZiAke1BOfS1kYmciCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxvY2FsZS1iYXNlLS4qIFwKKyAgICAgICAgICAgICAgICAgICAgXmdsaWJjLWdjb252LS4qIF5nbGliYy1jaGFybWFwLS4qIF5nbGliYy1sb2NhbGVkYXRhLS4qIF5nbGliYy1iaW5hcnktbG9jYWxlZGF0YS0uKiBcCisgICAgICAgICAgICAgICAgICAgIF5nbGliYy1nY29udi0uKiAgXmdsaWJjLWNoYXJtYXAtLiogIF5nbGliYy1sb2NhbGVkYXRhLS4qICBeZ2xpYmMtYmluYXJ5LWxvY2FsZWRhdGEtLiogXAorICAgICAgICAgICAgICAgICAgICBeJHtNTFBSRUZJWH1nbGliYy1nY29udiQiCisKKyMgQ3JlYXRlIGEgZ2xpYmMtYmluYXJpZXMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWJpbmFyaWVzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWJpbmFyaWVzIgorUlJFQ09NTUVORFNfJHtCUE59LWJpbmFyaWVzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtYmluYXJ5IikgIT0gLTFdKX0iCisKKyMgQ3JlYXRlIGEgZ2xpYmMtY2hhcm1hcHMgcGFja2FnZQorQUxMT1dfRU1QVFlfJHtCUE59LWNoYXJtYXBzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWNoYXJtYXBzIgorUlJFQ09NTUVORFNfJHtCUE59LWNoYXJtYXBzID0gICIke0AiICIuam9pbihbcCBmb3IgcCBpbiBkLmdldFZhcignUEFDS0FHRVMnLCBUcnVlKS5zcGxpdCgpIGlmIHAuZmluZCgiZ2xpYmMtY2hhcm1hcCIpICE9IC0xXSl9IgorCisjIENyZWF0ZSBhIGdsaWJjLWdjb252cyBwYWNrYWdlCitBTExPV19FTVBUWV8ke0JQTn0tZ2NvbnZzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LWdjb252cyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1nY29udnMgPSAgIiR7QCIgIi5qb2luKFtwIGZvciBwIGluIGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkgaWYgcC5maW5kKCJnbGliYy1nY29udiIpICE9IC0xXSl9IgorCisjIENyZWF0ZSBhIGdsaWJjLWxvY2FsZWRhdGFzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1sb2NhbGVkYXRhcyA9ICIxIgorUEFDS0FHRVMgKz0gIiR7QlBOfS1sb2NhbGVkYXRhcyIKK1JSRUNPTU1FTkRTXyR7QlBOfS1sb2NhbGVkYXRhcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoImdsaWJjLWxvY2FsZWRhdGEiKSAhPSAtMV0pfSIKKworREVTQ1JJUFRJT05fbG9jYWxlZGVmID0gImdsaWJjOiBjb21waWxlIGxvY2FsZSBkZWZpbml0aW9uIGZpbGVzIgorCisjIGdsaWJjLWdjb252IGlzIGR5bmFtaWNhbGx5IGFkZGVkIGludG8gUEFDS0FHRVMsIHRodXMKKyMgRklMRVNfZ2xpYmMtZ2NvbnYgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSBleHRlbmRlZCBpbiBtdWx0aWxpYi4KKyMgRXhwbGljaXRseSBhZGQgJHtNTFBSRUZJWH0gZm9yIEZJTEVTX2dsaWJjLWdjb252LgorRklMRVNfJHtNTFBSRUZJWH1nbGliYy1nY29udiA9ICIke2xpYmRpcn0vZ2NvbnYvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2djb252Ly5kZWJ1Zy8qIgorRklMRVNfbG9jYWxlZGVmID0gIiR7YmluZGlyfS9sb2NhbGVkZWYiCisKK0xPQ0FMRVRSRUVTUkMgPSAiJHtTVEFHSU5HX0lOQ0RJUn0vZ2xpYmMtbG9jYWxlLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitkb19pbnN0YWxsICgpIHsKKwlta2RpciAtcCAke0R9JHtiaW5kaXJ9ICR7RH0ke2RhdGFkaXJ9ICR7RH0ke2xpYmRpcn0KKwlpZiBbIC1uICIkKGxzICR7TE9DQUxFVFJFRVNSQ30vJHtiaW5kaXJ9KSIgXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7YmluZGlyfS8qICR7RH0ke2JpbmRpcn0KKwlmaQorCWlmIFsgLW4gIiQobHMgJHtMT0NBTEVUUkVFU1JDfS8ke2xvY2FsZWRpcn0pIiBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0ke2xvY2FsZWRpcn0KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2xvY2FsZWRpcn0vKiAke0R9JHtsb2NhbGVkaXJ9CisJZmkKKwlpZiBbIC1lICR7TE9DQUxFVFJFRVNSQ30vJHtsaWJkaXJ9L2djb252IF07IHRoZW4KKwkJY3AgLWZwUFIgJHtMT0NBTEVUUkVFU1JDfS8ke2xpYmRpcn0vZ2NvbnYgJHtEfSR7bGliZGlyfQorCWZpCisJaWYgWyAtZSAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vaTE4biBdOyB0aGVuCisJCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9pMThuICR7RH0ke2RhdGFkaXJ9CisJZmkKKwlpZiBbIC1lICR7TE9DQUxFVFJFRVNSQ30vJHtkYXRhZGlyfS9sb2NhbGUgXTsgdGhlbgorCQljcCAtZnBQUiAke0xPQ0FMRVRSRUVTUkN9LyR7ZGF0YWRpcn0vbG9jYWxlICR7RH0ke2RhdGFkaXJ9CisJZmkKKwljaG93biByb290LnJvb3QgLVIgJHtEfQorCWNwIC1mcFBSICR7TE9DQUxFVFJFRVNSQ30vU1VQUE9SVEVEICR7V09SS0RJUn0KK30KKworaW5oZXJpdCBsaWJjLXBhY2thZ2UKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLWxvY2FsZV8yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NzAyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1sb2NhbGVfMi4yMi5iYgpAQCAtMCwwICsxIEBACityZXF1aXJlIGdsaWJjLWxvY2FsZS5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW10cmFjZS5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMmIwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2UuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK2luY2x1ZGUgZ2xpYmMtY29sbGF0ZXJhbC5pbmMKKworU1VNTUFSWSA9ICJtdHJhY2UgdXRpbGl0eSBwcm92aWRlZCBieSBnbGliYyIKK0RFU0NSSVBUSU9OID0gIm10cmFjZSB1dGlsaXR5IHByb3ZpZGVkIGJ5IGdsaWJjIgorUkRFUEVORFNfJHtQTn0gPSAicGVybCIKK1JQUk9WSURFU18ke1BOfSA9ICJsaWJjLW10cmFjZSIKKworU1JDID0gIiR7U1RBR0lOR19JTkNESVJ9L2dsaWJjLXNjcmlwdHMtaW50ZXJuYWwtJHtNVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAtbSAwNzU1ICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTUkN9L210cmFjZSAke0R9JHtiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1tdHJhY2VfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY5YmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtbXRyYWNlXzIuMjIuYmIKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBnbGliYy1tdHJhY2UuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1vcHRpb25zLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLW9wdGlvbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZDI3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1vcHRpb25zLmluYwpAQCAtMCwwICsxLDE2MiBAQAorZGVmIGdsaWJjX2NmZyhmZWF0dXJlLCB0b2tlbnMsIGNuZik6CisgICAgaWYgdHlwZSh0b2tlbnMpID09IHR5cGUoIiIpOgorICAgICAgICB0b2tlbnMgPSBbdG9rZW5zXQorICAgIGlmIGZlYXR1cmU6CisgICAgICAgIGNuZi5leHRlbmQoW3Rva2VuICsgJz15JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgdG9rZW4gaW4gdG9rZW5zOgorICAgICAgICAgICAgY25mLmV4dGVuZChbdG9rZW4gKyAnPW4nXSkKKyAgICAgICAgICAgIGlmIHRva2VuID09ICdPUFRJT05fRUdMSUJDX05TU1dJVENIJzoKKyAgICAgICAgICAgICAgICBjbmYuZXh0ZW5kKFsiT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUc9XCIke1N9L25zcy9uc3N3aXRjaC5jb25mXCIiXSkKKyAgICAgICAgICAgICAgICBjbmYuZXh0ZW5kKFsiT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlM9XCIke1N9L25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnNcIiJdKQorCisjIE1hcCBkaXN0cm8gZmVhdHVyZXMgdG8gZ2xpYmMgb3B0aW9ucyBzZXR0aW5ncworZGVmIGZlYXR1cmVzX3RvX2dsaWJjX3NldHRpbmdzKGQpOgorICAgIGNuZiA9IChbXSkKKworICAgIGlwdjQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjQnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBpcHY2ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19iYWNrdHJhY2UgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtYmFja3RyYWNlJywgVHJ1ZSwgRmFsc2UsIGQpIAorICAgIGxpYmNfYmlnX21hY3JvcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1iaWctbWFjcm9zJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19ic2QgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtYnNkJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jeHhfdGVzdHMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtY3h4LXRlc3RzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jYXRnZXRzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNhdGdldHMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2NoYXJzZXRzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNoYXJzZXRzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19jcnlwdCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1jcnlwdCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfY3J5cHRfdWZjID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0LXVmYycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZGJfYWxpYXNlcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1kYi1hbGlhc2VzJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19lbnZ6ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWVudnonLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2ZjdnQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZmN2dCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZm10bXNnID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWZtdG1zZycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfZnN0YWIgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtZnN0YWInLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2Z0cmF2ZXJzZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1mdHJhdmVyc2UnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2dldGxvZ2luID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWdldGxvZ2luJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19pZG4gPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtaWRuJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19pbmV0X2FubCA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1pbmV0LWFubCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbGlibSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1saWJtJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19sb2NhbGVzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZXMnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX2xvY2FsZV9jb2RlID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWxvY2FsZS1jb2RlJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19tZW11c2FnZSA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1tZW11c2FnZScsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbmlzID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLW5pcycsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfbnNzd2l0Y2ggPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtbnNzd2l0Y2gnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3JjbWQgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcmNtZCcsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfcnRsZF9kZWJ1ZyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1ydGxkLWRlYnVnJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19zcGF3biA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zcGF3bicsIFRydWUsIEZhbHNlLCBkKQorICAgIGxpYmNfc3RyZWFtcyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1zdHJlYW1zJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19zdW5ycGMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtc3VucnBjJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY191dG1wID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXV0bXAnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3V0bXB4ID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXV0bXB4JywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY193b3JkZXhwID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXdvcmRleHAnLCBUcnVlLCBGYWxzZSwgZCkKKyAgICBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyID0gYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF9yZWdleHAgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtcmVnZXhwJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF9yZWdleHBfZ2xpYmMgPSBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xpYmMtcG9zaXgtcmVnZXhwLWdsaWJjJywgVHJ1ZSwgRmFsc2UsIGQpCisgICAgbGliY19wb3NpeF93Y2hhcl9pbyA9IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1wb3NpeC13Y2hhci1pbycsIFRydWUsIEZhbHNlLCBkKQorCisgICAgIyBhcnJhbmdlIHRoZSBkZXBlbmRlbmNpZXMgYW1vbmcgZ2xpYmMgY29uZmlndWFibGUgb3B0aW9ucyBhY2NvcmRpbmcgdG8gZmlsZSBvcHRpb24tZ3JvdXBzLmRlZiBmcm9tIGdsaWJjIHNvdXJjZSBjb2RlCisgICAgbmV3X2RlcCA9IFRydWUKKyAgICB3aGlsZSBuZXdfZGVwOgorICAgICAgICBuZXdfZGVwID0gRmFsc2UKKworICAgICAgICBpZiBpcHY2IGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGlwdjQgYW5kIG5vdCBsaWJjX25zc3dpdGNoOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfbnNzd2l0Y2ggPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19jeHhfdGVzdHM6CisgICAgICAgICAgICBpZiBub3QgbGliY19wb3NpeF93Y2hhcl9pbzoKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxpYmNfcG9zaXhfd2NoYXJfaW8gPSBUcnVlCisgICAgICAgICAgICBpZiBub3QgbGliY19saWJtOgorICAgICAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICAgICAgbGliY19saWJtID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfY2F0Z2V0cyBhbmQgbm90IGxpYmNfbG9jYWxlX2NvZGU6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19sb2NhbGVfY29kZSA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2NyeXB0X3VmYyBhbmQgbm90IGxpYmNfY3J5cHQ6CisgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgbGliY19jcnlwdCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2dldGxvZ2luIGFuZCBub3QgbGliY191dG1wOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfdXRtcCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX2luZXRfYW5sIGFuZCBub3QgaXB2NDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBpcHY0ID0gVHJ1ZQorCisgICAgICAgIGlmIGxpYmNfbG9jYWxlX2NvZGUgYW5kIG5vdCBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyOgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGxpYmNfcG9zaXhfY2xhbmdfd2NoYXIgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19uaXM6CisgICAgICAgICAgICBpZiBub3QgaXB2NDoKKyAgICAgICAgICAgICAgICBuZXdfZGVwID0gVHJ1ZQorICAgICAgICAgICAgICAgIGlwdjQgPSBUcnVlCisgICAgICAgICAgICBpZiBub3QgbGliY19zdW5ycGM6CisgICAgICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgICAgICBsaWJjX3N1bnJwYyA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3JjbWQgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19zdW5ycGMgYW5kIG5vdCBpcHY0OgorICAgICAgICAgICAgbmV3X2RlcCA9IFRydWUKKyAgICAgICAgICAgIGlwdjQgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY191dG1weCBhbmQgbm90IGxpYmNfdXRtcDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3V0bXAgPSBUcnVlCisKKyAgICAgICAgaWYgbGliY19wb3NpeF9yZWdleHBfZ2xpYmMgYW5kIG5vdCBsaWJjX3Bvc2l4X3JlZ2V4cDoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3Bvc2l4X3JlZ2V4cCA9IFRydWUKKworICAgICAgICBpZiBsaWJjX3Bvc2l4X3djaGFyX2lvIGFuZCBub3QgbGliY19wb3NpeF9jbGFuZ193Y2hhcjoKKyAgICAgICAgICAgIG5ld19kZXAgPSBUcnVlCisgICAgICAgICAgICBsaWJjX3Bvc2l4X2NsYW5nX3djaGFyID0gVHJ1ZQorCisgICAgZ2xpYmNfY2ZnKGlwdjYsICdPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2JywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2JhY2t0cmFjZSwgJ09QVElPTl9FR0xJQkNfQkFDS1RSQUNFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2JpZ19tYWNyb3MsICdPUFRJT05fRUdMSUJDX0JJR19NQUNST1MnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfYnNkLCAnT1BUSU9OX0VHTElCQ19CU0QnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY3h4X3Rlc3RzLCAnT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY2F0Z2V0cywgJ09QVElPTl9FR0xJQkNfQ0FUR0VUUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19jaGFyc2V0cywgJ09QVElPTl9FR0xJQkNfQ0hBUlNFVFMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfY3J5cHQsICdPUFRJT05fRUdMSUJDX0NSWVBUJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2NyeXB0X3VmYywgJ09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2RiX2FsaWFzZXMsICdPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfZW52eiwgJ09QVElPTl9FR0xJQkNfRU5WWicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mY3Z0LCAnT1BUSU9OX0VHTElCQ19GQ1ZUJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2ZtdG1zZywgJ09QVElPTl9FR0xJQkNfRk1UTVNHJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2ZzdGFiLCAnT1BUSU9OX0VHTElCQ19GU1RBQicsIGNuZikKKyAgICBnbGliY19jZmcobGliY19mdHJhdmVyc2UsICdPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRScsIGNuZikKKyAgICBnbGliY19jZmcobGliY19nZXRsb2dpbiwgJ09QVElPTl9FR0xJQkNfR0VUTE9HSU4nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfaWRuLCAnT1BUSU9OX0VHTElCQ19JRE4nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGlwdjQsICdPUFRJT05fRUdMSUJDX0lORVQnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfaW5ldF9hbmwsICdPUFRJT05fRUdMSUJDX0lORVRfQU5MJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX2xpYm0sICdPUFRJT05fRUdMSUJDX0xJQk0nLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbG9jYWxlcywgJ09QVElPTl9FR0xJQkNfTE9DQUxFUycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19sb2NhbGVfY29kZSwgJ09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfbWVtdXNhZ2UsICdPUFRJT05fRUdMSUJDX01FTVVTQUdFJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX25pcywgJ09QVElPTl9FR0xJQkNfTklTJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX25zc3dpdGNoLCAnT1BUSU9OX0VHTElCQ19OU1NXSVRDSCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19yY21kLCAnT1BUSU9OX0VHTElCQ19SQ01EJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3J0bGRfZGVidWcsICdPUFRJT05fRUdMSUJDX1JUTERfREVCVUcnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfc3Bhd24sICdPUFRJT05fRUdMSUJDX1NQQVdOJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3N0cmVhbXMsICdPUFRJT05fRUdMSUJDX1NUUkVBTVMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfc3VucnBjLCAnT1BUSU9OX0VHTElCQ19TVU5SUEMnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfdXRtcCwgJ09QVElPTl9FR0xJQkNfVVRNUCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY191dG1weCwgJ09QVElPTl9FR0xJQkNfVVRNUFgnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfd29yZGV4cCwgJ09QVElPTl9FR0xJQkNfV09SREVYUCcsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF9jbGFuZ193Y2hhciwgJ09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSJywgY25mKQorICAgIGdsaWJjX2NmZyhsaWJjX3Bvc2l4X3JlZ2V4cCwgJ09QVElPTl9QT1NJWF9SRUdFWFAnLCBjbmYpCisgICAgZ2xpYmNfY2ZnKGxpYmNfcG9zaXhfcmVnZXhwX2dsaWJjLCAnT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQycsIGNuZikKKyAgICBnbGliY19jZmcobGliY19wb3NpeF93Y2hhcl9pbywgJ09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPJywgY25mKQorCisgICAgcmV0dXJuICJcbiIuam9pbihjbmYpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXBhY2thZ2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNjAzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1wYWNrYWdlLmluYwpAQCAtMCwwICsxLDIxNCBAQAorIworIyBGb3Igbm93LCB3ZSB3aWxsIHNraXAgYnVpbGRpbmcgb2YgYSBnY2MgcGFja2FnZSBpZiBpdCBpcyBhIHVjbGliYyBvbmUKKyMgYW5kIG91ciBidWlsZCBpcyBub3QgYSB1Y2xpYmMgb25lLCBhbmQgd2Ugc2tpcCBhIGdsaWJjIG9uZSBpZiBvdXIgYnVpbGQKKyMgaXMgYSB1Y2xpYmMgYnVpbGQuCisjCisjIFNlZSB0aGUgbm90ZSBpbiBnY2MvZ2NjXzMuNC4wLm9lCisjCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgaW1wb3J0IGJiLCByZQorICAgIHVjX29zID0gKHJlLm1hdGNoKCcuKnVjbGliYyonLCBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkpICE9IE5vbmUpCisgICAgaWYgdWNfb3M6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCB0YXJnZXQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9PUycsIFRydWUpKQorfQorCisjIFNldCB0aGlzIHRvIHplcm8gaWYgeW91IGRvbid0IHdhbnQgbGRjb25maWcgaW4gdGhlIG91dHB1dCBwYWNrYWdlCitVU0VfTERDT05GSUcgPz0gIjEiCisKK0lOSElCSVRfU1lTUk9PVF9TVFJJUCA9ICIxIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgY2F0Y2hzZWd2IHNsbiBuc2NkIGxkZCB0emNvZGUgJHtQTn0tdXRpbHMgZ2xpYmMtdGhyZWFkLWRiICR7UE59LXBpYyBsaWJjaWRuIGxpYm1lbXVzYWdlIGxpYnNlZ2ZhdWx0ICR7UE59LXBjcHJvZmlsZSBsaWJzb3RydXNzICR7UE59IGdsaWJjLWV4dHJhLW5zcyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWRvYyIKKworIyBUaGUgbGQuc28gaW4gdGhpcyBnbGliYyBzdXBwb3J0cyB0aGUgR05VX0hBU0gKK1JQUk9WSURFU18ke1BOfSA9ICJlZ2xpYmMgcnRsZChHTlVfSEFTSCkiCitSUFJPVklERVNfJHtQTn0tdXRpbHMgPSAiZWdsaWJjLXV0aWxzIgorUlBST1ZJREVTXyR7UE59LW10cmFjZSA9ICJlZ2xpYmMtbXRyYWNlIGxpYmMtbXRyYWNlIgorUlBST1ZJREVTXyR7UE59LXBpYyA9ICJlZ2xpYmMtcGljIgorUlBST1ZJREVTXyR7UE59LWRldiA9ICJlZ2xpYmMtZGV2IGxpYmM2LWRldiB2aXJ0dWFsLWxpYmMtZGV2IgorUlBST1ZJREVTXyR7UE59LXN0YXRpY2RldiA9ICJlZ2xpYmMtc3RhdGljZGV2IgorUlBST1ZJREVTXyR7UE59LWRvYyA9ICJlZ2xpYmMtZG9jIgorUlBST1ZJREVTX2dsaWJjLWV4dHJhLW5zcyA9ICJlZ2xpYmMtZXh0cmEtbnNzIgorUlBST1ZJREVTX2dsaWJjLXRocmVhZC1kYiA9ICJlZ2xpYmMtdGhyZWFkLWRiIgorUlBST1ZJREVTXyR7UE59LXBjcHJvZmlsZSA9ICJlZ2xpYmMtcGNwcm9maWxlIgorUlBST1ZJREVTXyR7UE59LWRiZyA9ICJlZ2xpYmMtZGJnIgorbGliY19iYXNlbGlicyA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJjcnlwdC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmMuc28uKiAke2Jhc2VfbGliZGlyfS9saWJjLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibSouc28uKiAke2Jhc2VfbGliZGlyfS9saWJtLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibXZlYy0qLnNvICR7YmFzZV9saWJkaXJ9L2xkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xkLSouc28gJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkLSouc28gJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdi0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYnJ0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJ0LSouc28gJHtiYXNlX2xpYmRpcn0vbGlidXRpbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJ1dGlsLSouc28gJHtiYXNlX2xpYmRpcn0vbGlibnNsKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zbC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYm5zc19maWxlcyouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc3NfZmlsZXMtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfY29tcGF0Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zc19jb21wYXQtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfZG5zKi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYm5zc19kbnMtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJkbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJkbC0qLnNvICR7YmFzZV9saWJkaXJ9L2xpYmFubCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJhbmwtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJCcm9rZW5Mb2NhbGUqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliQnJva2VuTG9jYWxlLSouc28iCitsaWJjX2Jhc2VsaWJzX2FwcGVuZF9hYXJjaDY0ID0gIiAvbGliL2xkLWxpbnV4LWFhcmNoNjQqLnNvLjEiCitJTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfYWFyY2g2NCA9ICIgbGliZGlyIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmNfYmFzZWxpYnN9ICR7bGliZXhlY2Rpcn0vKiAke0BiYXNlX2NvbmRpdGlvbmFsKCdVU0VfTERDT05GSUcnLCAnMScsICcke2Jhc2Vfc2JpbmRpcn0vbGRjb25maWcgJHtzeXNjb25mZGlyfS9sZC5zby5jb25mJywgJycsIGQpfSIKK0ZJTEVTX2xkZCA9ICIke2JpbmRpcn0vbGRkIgorRklMRVNfbGlic2VnZmF1bHQgPSAiJHtiYXNlX2xpYmRpcn0vbGliU2VnRmF1bHQqIgorRklMRVNfbGliY2lkbiA9ICIke2Jhc2VfbGliZGlyfS9saWJjaWRuLSouc28gJHtiYXNlX2xpYmRpcn0vbGliY2lkbi5zby4qIgorRklMRVNfbGlibWVtdXNhZ2UgPSAiJHtiYXNlX2xpYmRpcn0vbGlibWVtdXNhZ2Uuc28iCitGSUxFU19nbGliYy1leHRyYS1uc3MgPSAiJHtiYXNlX2xpYmRpcn0vbGlibnNzXyotKi5zbyAke2Jhc2VfbGliZGlyfS9saWJuc3NfKi5zby4qIgorRklMRVNfc2xuID0gIiR7YmFzZV9zYmluZGlyfS9zbG4iCitGSUxFU18ke1BOfS1waWMgPSAiJHtsaWJkaXJ9LypfcGljLmEgJHtsaWJkaXJ9LypfcGljLm1hcCAke2xpYmRpcn0vbGliY19waWMvKi5vIgorRklMRVNfbGlic290cnVzcyA9ICIke2xpYmRpcn0vYXVkaXQvc290cnVzcy1saWIuc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0iCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ycGNnZW4gJHtsaWJkaXJ9Lypfbm9uc2hhcmVkLmEgJHtiYXNlX2xpYmRpcn0vKl9ub25zaGFyZWQuYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vKi5hICR7YmFzZV9saWJkaXJ9LyouYSIKK0ZJTEVTX25zY2QgPSAiJHtzYmluZGlyfS9uc2NkKiAke3N5c2NvbmZkaXJ9L2luaXQuZC9uc2NkICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbnNjZCogJHtzeXNjb25mZGlyfS90bXBmaWxlcy5kL25zY2QuY29uZiBcCisgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbnNjZC5jb25mICR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvOThfbnNjZCAke2xvY2Fsc3RhdGVkaXJ9L2RiL25zY2QiCitGSUxFU18ke1BOfS1tdHJhY2UgPSAiJHtiaW5kaXJ9L210cmFjZSIKK0ZJTEVTX3R6Y29kZSA9ICIke2JpbmRpcn0vdHpzZWxlY3QgJHtzYmluZGlyfS96aWMgJHtzYmluZGlyfS96ZHVtcCIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS8qICR7c2JpbmRpcn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS8qLy5kZWJ1ZyAke2xpYmRpcn0vYXVkaXQvLmRlYnVnIgorRklMRVNfY2F0Y2hzZWd2ID0gIiR7YmluZGlyfS9jYXRjaHNlZ3YiCitSREVQRU5EU19jYXRjaHNlZ3YgPSAibGlic2VnZmF1bHQiCitGSUxFU18ke1BOfS1wY3Byb2ZpbGUgPSAiJHtiYXNlX2xpYmRpcn0vbGlicGNwcm9maWxlLnNvIgorRklMRVNfZ2xpYmMtdGhyZWFkLWRiID0gIiR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYi5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnRocmVhZF9kYi0qLnNvIgorUlBST1ZJREVTXyR7UE59LWRldiArPSAibGliYy1kZXYiCitSUFJPVklERVNfJHtQTn0tc3RhdGljZGV2ICs9ICJsaWJjLXN0YXRpY2RldiIKKworU1VNTUFSWV9zbG4gPSAiVGhlIHN0YXRpYyBsbiIKK0RFU0NSSVBUSU9OX3NsbiA9ICJTaW1pbGFyIHRvIHRoZSAnbG4nIHV0aWxpdHksIGJ1dCBzdGF0aWNhbGx5IGxpbmtlZC4gIHNsbiBpcyB1c2VmdWwgdG8gbWFrZSBzeW1ib2xpYyBsaW5rcyB0byBkeW5hbWljIGxpYnJhcmllcyBpZiB0aGUgZHluYW1pYyBsaW5raW5nIHN5c3RlbSwgZm9yIHNvbWUgcmVhc29uLCBpcyBub3QgZnVuY3Rpb25hbC4iCitTVU1NQVJZX25zY2QgPSAiTmFtZSBzZXJ2aWNlIGNhY2hlIGRhZW1vbiIKK0RFU0NSSVBUSU9OX25zY2QgPSAibnNjZCwgbmFtZSBzZXJ2aWNlIGNhY2hlIGRhZW1vbiwgY2FjaGVzIG5hbWUgc2VydmljZSBsb29rdXBzIGZvciB0aGUgcGFzc3dkLCBncm91cCBhbmQgaG9zdHMgaW5mb3JtYXRpb24uICBJdCBjYW4gZGFtYXRpY2FsbHkgaW1wcm92aWRlIHBlcmZvcm1hbmNlIHdpdGggcmVtb3RlLCBzdWNoIGFzIE5JUyBvciBOSVMrLCBuYW1lIHNlcnZpY2VzLiIKK1NVTU1BUllfZ2xpYmMtZXh0cmEtbnNzID0gImhlc2lvZCwgTklTIGFuZCBOSVMrIG5zcyBsaWJyYXJpZXMiCitERVNDUklQVElPTl9nbGliYy1leHRyYS1uc3MgPSAiZ2xpYmM6IG5pcywgbmlzcGx1cyBhbmQgaGVzaW9kIHNlYXJjaCBzZXJ2aWNlcy4iCitTVU1NQVJZX2xkZCA9ICJwcmludCBzaGFyZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMiCitERVNDUklQVElPTl9sZGQgPSAiJHtiaW5kaXJ9L2xkZCBwcmludHMgc2hhcmVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIHByb2dyYW0gb3Igc2hhcmVkIGxpYnJhcnkgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorU1VNTUFSWV8ke1BOfS11dGlscyA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBwcm92aWRlZCBieSBnbGliYyIKK0RFU0NSSVBUSU9OXyR7UE59LXV0aWxzID0gIk1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzIGluY2x1ZGluZyBnZXRjb25mLCBpY29udiwgbG9jYWxlLCBnZW5jYXQsIHJwY2dlbiwgLi4uIgorREVTQ1JJUFRJT05fbGlic290cnVzcyA9ICJMaWJyYXJ5IHRvIHN1cHBvcnQgc290cnVzcyB3aGljaCB0cmFjZXMgY2FsbHMgdGhyb3VnaCBQTFRzIgorREVTQ1JJUFRJT05fdHpjb2RlID0gInR6Y29kZSwgdGltZXpvbmUgem9uZWluZm8gdXRpbHMgLS0gemljLCB6ZHVtcCwgdHpzZWxlY3QiCisKK2luaGVyaXQgbGliYy1jb21tb24gbXVsdGlsaWJfaGVhZGVyCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9sb2NhbHRpbWUKKwlybSAtcmYgJHtEfSR7bG9jYWxzdGF0ZWRpcn0KKworCSMgcmVtb3ZlIGVtcHR5IGdsaWJjIGRpcgorCWlmIFsgLWQgJHtEfSR7bGliZGlyfS9nbGliYyAtYSAhIC1lICR7RH0ke2xpYmRpcn0vZ2xpYmMvcHRfY2hvd24gXTsgdGhlbgorCQlybWRpciAke0R9JHtsaWJkaXJ9L2dsaWJjCisJZmkKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYml0cy9zeXNjYWxsLmgKKworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9tdHJhY2UgXTsgdGhlbgorCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAtZSAnMnMsZXhlYy4qcGVybCxleGVjICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9L210cmFjZQorCWZpCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L3JwY3N2Yy9ycXVvdGEqCisJIyBJbmZvIGRpciBsaXN0aW5nIGlzbid0IGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgc28gcmVtb3ZlIGl0IGlmIGl0IGV4aXN0cy4KKwlpZiBbIC1lICIke0R9JHtpbmZvZGlyfS9kaXIiIF07IHRoZW4KKwkJcm0gLWYgJHtEfSR7aW5mb2Rpcn0vZGlyCisJZmkKKworCWlmIFsgIiR7VVNFX0xEQ09ORklHfSIgIT0gIjEiIF07IHRoZW4KKwkJIyBXZSB3b24ndCBzaGlwIHRoZXNlIGZpbGVzIChzZWUgRklMRVMgYWJvdmUpIHNvIGxldCdzIG5vdCBpbnN0YWxsIHRoZW0KKwkJcm0gLWYgJHtEfSR7c3lzY29uZmRpcn0vbGQuc28uY29uZgorCQlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2xkY29uZmlnCisJCSMgVGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSBlbXB0eSBub3cgc28gcmVtb3ZlIGl0IHRvby4KKwkJIyBCdXQgY2hlY2sgd2hldGhlciBpdCBleGlzdHMgZmlyc3QsIHNpbmNlIGl0IHdvbid0IGZvciBnbGliYy1pbml0aWFsLgorCQlpZiBbIC1kICR7RH0ke3N5c2NvbmZkaXJ9IF07IHRoZW4KKwkJCXJtZGlyICR7RH0ke3N5c2NvbmZkaXJ9CisJCWZpCisJZmkKKworCWlmIGVjaG8gJHtQTn18Z3JlcCAtcSAiZ2xpYmMtaW5pdGlhbCI7IHRoZW4KKwkJcmV0dXJuCisJZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9kYi9uc2NkCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vbnNjZC9uc2NkLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL25zY2QKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9uc2NkL25zY2QuY29uZiAke0R9JHtzeXNjb25mZGlyfS9uc2NkLmNvbmYKKwlzZWQgLWkgInMlZGFlbW9uJXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1leGVjJWciICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uc2NkCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vbnNjZC9uc2NkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwkJZWNobyAiZCAvcnVuL25zY2QgNzU1IHJvb3Qgcm9vdCAtIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvbnNjZC5jb25mCisJZWxzZQorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJCWVjaG8gImQgcm9vdCByb290IDA3NTUgL3Zhci9ydW4vbnNjZCBub25lIiBcCisJCQk+ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzLzk4X25zY2QKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9hYXJjaDY0ICgpIHsKKwlpZiBbICIke2Jhc2VfbGliZGlyfSIgIT0gIi9saWIiIF0gOyB0aGVuCisJCSMgVGhlIGFhcmNoNjQgQUJJIHNheXMgdGhlIGR5bmFtaWMgbGlua2VyIC1tdXN0LSBiZSAvbGliL2xkLWxpbnV4LWFhcmNoNjRbX2JlXS5zby4xCisJCWluc3RhbGwgLWQgJHtEfS9saWIKKwkJaWYgWyAtZSAke0R9JHtiYXNlX2xpYmRpcn0vbGQtbGludXgtYWFyY2g2NC5zby4xIF07IHRoZW4KKwkJCWxuIC1zICR7QGJhc2VfcGF0aF9yZWxhdGl2ZSgnL2xpYicsICcke2Jhc2VfbGliZGlyfScpfS9sZC1saW51eC1hYXJjaDY0LnNvLjEgXAorCQkJCSR7RH0vbGliL2xkLWxpbnV4LWFhcmNoNjQuc28uMQorCQllbGlmIFsgLWUgJHtEfSR7YmFzZV9saWJkaXJ9L2xkLWxpbnV4LWFhcmNoNjRfYmUuc28uMSBdOyB0aGVuCisJCQlsbiAtcyAke0BiYXNlX3BhdGhfcmVsYXRpdmUoJy9saWInLCAnJHtiYXNlX2xpYmRpcn0nKX0vbGQtbGludXgtYWFyY2g2NF9iZS5zby4xIFwKKwkJCQkke0R9L2xpYi9sZC1saW51eC1hYXJjaDY0X2JlLnNvLjEKKwkJZmkKKwlmaQorfQorCitkb19pbnN0YWxsX2xvY2FsZSAoKSB7CisJZGVzdD0ke0R9LyR7aW5jbHVkZWRpcn0vZ2xpYmMtbG9jYWxlLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJaW5zdGFsbCAtZCAke2Rlc3R9JHtiYXNlX2xpYmRpcn0gJHtkZXN0fSR7YmluZGlyfSAke2Rlc3R9JHtsaWJkaXJ9ICR7ZGVzdH0ke2RhdGFkaXJ9CisJaWYgWyAiJHtiYXNlX2xpYmRpcn0iICE9ICIke2xpYmRpcn0iIF07IHRoZW4KKwkJY3AgLWZwUFIgJHtEfSR7YmFzZV9saWJkaXJ9LyogJHtkZXN0fSR7YmFzZV9saWJkaXJ9CisJZmkKKwlpZiBbIC1lICR7RH0ke2JpbmRpcn0vbG9jYWxlZGVmIF07IHRoZW4KKwkJbXYgLWYgJHtEfSR7YmluZGlyfS9sb2NhbGVkZWYgJHtkZXN0fSR7YmluZGlyfQorCWZpCisJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2djb252IF07IHRoZW4KKwkJbXYgLWYgJHtEfSR7bGliZGlyfS9nY29udiAke2Rlc3R9JHtsaWJkaXJ9CisJZmkKKwlpZiBbIC1lICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgXTsgdGhlbgorCQljcCAtZnBQUiAke0R9JHtleGVjX3ByZWZpeH0vbGliICR7ZGVzdH0ke2V4ZWNfcHJlZml4fQorCWZpCisJaWYgWyAtZSAke0R9JHtkYXRhZGlyfS9pMThuIF07IHRoZW4KKwkJbXYgJHtEfSR7ZGF0YWRpcn0vaTE4biAke2Rlc3R9JHtkYXRhZGlyfQorCWZpCisJY3AgLWZwUFIgJHtEfSR7ZGF0YWRpcn0vKiAke2Rlc3R9JHtkYXRhZGlyfQorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9sb2NhbGUvCisJY3AgLWZwUFIgJHtXT1JLRElSfS9TVVBQT1JURUQgJHtkZXN0fQorfQorCithZGR0YXNrIGRvX2luc3RhbGxfbG9jYWxlIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9fcGFja2FnZQorCitiYXNoc2NyaXB0cyA9ICJtdHJhY2Ugc290cnVzcyB4dHJhY2UiCisKK2RvX2V2YWN1YXRlX3NjcmlwdHMgKCkgeworCXRhcmdldD0ke0R9JHtpbmNsdWRlZGlyfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9CisJbWtkaXIgLXAgJHRhcmdldAorCWZvciBpIGluICR7YmFzaHNjcmlwdHN9OyBkbworCQlpZiBbIC1mICR7RH0ke2JpbmRpcn0vJGkgXTsgdGhlbgorCQkJY3AgJHtEfSR7YmluZGlyfS8kaSAkdGFyZ2V0LworCQlmaQorCWRvbmUKK30KKworYWRkdGFzayBldmFjdWF0ZV9zY3JpcHRzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX3BvcHVsYXRlX3N5c3Jvb3QgZG9fcGFja2FnZQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gImdsaWJjX3BhY2thZ2VfcHJlcHJvY2VzcyIKKworZ2xpYmNfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwlybSAtcmYgJHtQS0dEfS8ke2luY2x1ZGVkaXJ9L2dsaWJjLWxvY2FsZS1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCXJtIC1yZiAke1BLR0R9LyR7aW5jbHVkZWRpcn0vZ2xpYmMtc2NyaXB0cy1pbnRlcm5hbC0ke01VTFRJTUFDSF9UQVJHRVRfU1lTfQorCWZvciBpIGluICR7YmFzaHNjcmlwdHN9OyBkbworCSAgICBybSAtZiAke1BLR0R9JHtiaW5kaXJ9LyRpCisJZG9uZQorCXJtIC1yZiAke1BLR0R9LyR7bG9jYWxlZGlyfQorCWlmIFsgIiR7bGliZGlyfSIgIT0gIiR7ZXhlY19wcmVmaXh9L2xpYiIgXTsgdGhlbgorCQkjIFRoaXMgZGlyIG9ubHkgZXhpc3RzIHRvIGhvbGQgbG9jYWxlcworCQlybSAtcmYgJHtQS0dEfSR7ZXhlY19wcmVmaXh9L2xpYgorCWZpCit9CisKK3BrZ19wb3N0aW5zdF9uc2NkICgpIHsKKwlpZiBbIC16ICIkRCIgXTsgdGhlbgorCQlpZiBjb21tYW5kIC12IHN5c3RlbWQtdG1wZmlsZXMgPi9kZXYvbnVsbDsgdGhlbgorCQkJc3lzdGVtZC10bXBmaWxlcyAtLWNyZWF0ZSAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvbnNjZC5jb25mCisJCWVsaWYgWyAtZSAke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCBdOyB0aGVuCisJCQkke3N5c2NvbmZkaXJ9L2luaXQuZC9wb3B1bGF0ZS12b2xhdGlsZS5zaCB1cGRhdGUKKwkJZmkKKwlmaQorfQorQ09ORkZJTEVTX25zY2Q9IiR7c3lzY29uZmRpcn0vbnNjZC5jb25mIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIm5zY2QiCitTWVNURU1EX1NFUlZJQ0VfbnNjZCA9ICJuc2NkLnNlcnZpY2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLXNjcmlwdHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMDY3NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzLmluYwpAQCAtMCwwICsxLDE2IEBACitpbmNsdWRlIGdsaWJjLWNvbGxhdGVyYWwuaW5jCisKK1NVTU1BUlkgPSAidXRpbGl0eSBzY3JpcHRzIHByb3ZpZGVkIGJ5IGdsaWJjIgorREVTQ1JJUFRJT04gPSAidXRpbGl0eSBzY3JpcHRzIHByb3ZpZGVkIGJ5IGdsaWJjIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzaCBnbGliYy1tdHJhY2UiCisKK1NSQyA9ICIke1NUQUdJTkdfSU5DRElSfS9nbGliYy1zY3JpcHRzLWludGVybmFsLSR7TVVMVElNQUNIX1RBUkdFVF9TWVN9IgorCitiYXNoc2NyaXB0cyA9ICJzb3RydXNzIHh0cmFjZSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kIC1tIDA3NTUgJHtEfSR7YmluZGlyfQorCWZvciBpIGluICR7YmFzaHNjcmlwdHN9OyBkbworCQlpbnN0YWxsIC1tIDA3NTUgJHtTUkN9LyRpICR7RH0ke2JpbmRpcn0vCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtc2NyaXB0c18yLjIyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhODliZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy1zY3JpcHRzXzIuMjIuYmIKQEAgLTAsMCArMSBAQAorcmVxdWlyZSBnbGliYy1zY3JpcHRzLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtdGVzdGluZy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy10ZXN0aW5nLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWJiZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMtdGVzdGluZy5pbmMKQEAgLTAsMCArMSw5NiBAQAorZG9fY29tcGlsZV9hcHBlbmQgKCkgeworCSMgbm93IGdlbmVyYXRlIHNjcmlwdCB0byBkcml2ZSB0ZXN0aW5nCisJZWNobyAiIyEvdXNyL2Jpbi9lbnYgc2giID4ke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2V0ID4+ICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwkjIHBydW5lIG91dCB0aGUgdW5uZWVkZWQgdmFycworCXNlZCAtaSAtZSAiL15CQVNIL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eVVNFUi9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXk9QVC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkRJUlNUQUNLL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eRVVJRC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkZVTkNOQU1FL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eR1JPVVBTL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eSE9TVC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXkhPTUUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15JRlMvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15MQ19BTEwvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15MT0dOQU1FL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTUFDSFRZUEUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15PU1RZUEUvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QSVBFL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eU0hFTEwvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL14nL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eVUlEL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eVEVSTS9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBBVENIX0dFVC9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBLR18vZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QT1NJWExZXy9kIiAke0J9LyR7SE9TVF9QUkVGSVh9dGVzdGdsaWJjCisJc2VkIC1pIC1lICIvXlBQSUQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15QUzQvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15RL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eU0hMVkwvZCIgJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworCXNlZCAtaSAtZSAiL15TVEFHSU5HL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eTERfTElCUkFSWV9QQVRIL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKwlzZWQgLWkgLWUgIi9eUFNFVURPL2QiICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKworCSMgcG9pbnQgdG8gcmVhbCBzeXNyb290IG5vdCB0aGUgdG9vbGNoYWluIGJvb3RzdHJhcCBzeXNyb290CisJc2VkIC1pIC1lICJzL1wtdGNib290c3RyYXAvL2ciICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKworCSMgdXNlIHRoZSBmaW5hbCBjcm9zcy1nY2MgdG8gdGVzdCBzaW5jZSBzb21lIHRlc3RzIG5lZWQgbGlic3RkYysrCisJc2VkIC1pIC1lICJzL15QQVRIPS4qXC5nY2MtY3Jvc3MtaW5pdGlhbFw6L1BBVEg9L2ciICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMKKworCSMgYXBwZW5kIGV4ZWN1dGlvbiBwYXJ0IHNjcmlwdAorY2F0ID4+ICR7Qn0vJHtIT1NUX1BSRUZJWH10ZXN0Z2xpYmMgPDwgU1RPUAordGFyZ2V0PSJcJDEiCitpZiBbICJ4XCR0YXJnZXQiID0gIngiIF0KK3RoZW4KKwllY2hvICJQbGVhc2Ugc3BlY2lmeSB0aGUgdGFyZ2V0IG1hY2hpbmUgYW5kIHJlbW90ZSB1c2VyIGluIGZvcm0gb2YgdXNlckB0YXJnZXQiCisJZXhpdCAxOworZmkKK3NzaCBcJHRhcmdldCBscyBcJFBXRFwgIDI+JjEgPiAvZGV2L251bGwKK2lmIFsgInhcJD8iICE9ICJ4MCIgXQordGhlbgorCWVjaG8gIkZhaWxlZCBjb25uZWN0aW5nIHRvIFwkdGFyZ2V0IGl0IGNvdWxkIGJlIGJlY2F1c2Ugb2Y6IgorCWVjaG8gIjEuIFlvdSBkb250IGhhdmUgcGFzc3dvcmRsZXNzIHNzaCBzZXR1cCB0byBhY2Nlc3MgXCR0YXJnZXQiCisJZWNobyAiMi4gTkZTIHNoYXJlIG9uIFwkdGFyZ2V0IGlzIG5vdCBtb3VudGVkIG9yIGlmIG1vdW50ZWQgdGhlbiBub3QgbWF0Y2hpbmcgdGhlIGJ1aWxkIHRyZWUgbGF5b3V0LiIKKwllY2hvICIgICBUaGUgdHJlZSBzaG91bGQgYmUgYWNjZXNzaWJsZSBhdCBzYW1lIGxvY2F0aW9uIG9uIGJ1aWxkIGhvc3QgYW5kIHRhcmdldCIKKwllY2hvICIgICBZb3UgY2FuIGFkZCBuZnMtY2xpZW50IHRvIElNQUdFX0ZFQVRVUkVTIHRvIGdldCB0aGUgbmZzIGNsaWVudCBvbiB0YXJnZXQiCisJZWNobyAiMy4gbmZzIHNlcnZlciBvbiBidWlsZCBob3N0IGlzIG5vdCBydW5uaW5nLiIKKwllY2hvICIgICBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgJ25vX3Jvb3Rfc3F1YXNoJyBhZGRlZCBpbiAvZXRjL2V4cG9ydHMgaWYgeW91IHdhbnQiCisJZWNobyAiICAgdG8gdGVzdCBhcyByb290IHVzZXIgb24gdGFyZ2V0ICh1c3VhbGx5IGl0cyByZWNvbW1lbmRlZCB0byBjcmVhdGUgYSBub24iCisJZWNobyAiICAgcm9vdCB1c2VyLiIKKwllY2hvICIgICBBcyBhIHNhbml0eSBjaGVjayBtYWtlIHN1cmUgdGhhdCB0YXJnZXQgY2FuIHJlYWQvd3JpdGUgdG8gdGhlIGdsaWJjIGJ1aWxkIHRyZWUiCisJZWNobyAiICAgUGxlYXNlIHJlZmVyIHRvICR7U30vRUdMSUJDLmNyb3NzLXRlc3RpbmcgZm9yIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zIG9uIHNldHVwIgorCWV4aXQgMQorZmkKKwllY2hvICIjIHdlIHRlc3QgdXNpbmcgY3Jvc3MgY29tcGlsZXIgZnJvbSByZWFsIHN5c3Jvb3QgdGhlcmVmb3JlIG92ZXJyaWRlIHRoZSIgPiAke0J9L2NvbmZpZ3Bhcm1zCisJZWNobyAiIyBkZWZpbml0aW9ucyB0aGF0IGNvbWUgZnJvbSAke0J9L2NvbmZpZy5tYWtlIiA+PiAke0J9L2NvbmZpZ3Bhcm1zCisJZmdyZXAgdGNib290c3RyYXAgJHtCfS9jb25maWcubWFrZSA+ICR7Qn0vY29uZmlncGFybXMKKwlzZWQgLWkgLWUgInMvXC10Y2Jvb3RzdHJhcC8vZyIgJHtCfS9jb25maWdwYXJtcworCisjIGcrKyB1c2VzIGZsYWcgLW5vc3RkaW5jLCBzbyB0aGUgbG9jYXRpb25zIG9mIHN5c3RlbSBpbmNsdWRlIGhlYWRlcnMgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZAorIyBJZiB0aGUgbG9jYXRpb25zIGFyZSBub3QgYWxyZWFkeSBzcGVjaWZpZWQgaW4gY29uZmlnLm1ha2UsIHRoZW4gd2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyMgICAgPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2MrKy88ZysrIHZlcnNpb24+CisjICAgIDxzeXNyb290Pi91c3IvaW5jbHVkZS9jKysvPGcrKyB2ZXJzaW9uPi88bWFjaGluZT4KKworY3h4aW5jbHVkZXM9XGBjYXQgJHtCfS9jb25maWcubWFrZSB8IGdhd2sgJ1wkMSA9PSAiYysrLXN5c2luY2x1ZGVzIicgfCBnYXdrIC1GIj0iICd7cHJpbnQgXCQyfScgfCBzZWQgInMvWyBcdF1cPy8vZyJcYAorCitpZiBbIC16ICJcJGN4eGluY2x1ZGVzIiBdOyB0aGVuCisgIHN5c3Jvb3Q9XGBjYXQgJHtCfS9jb25maWdwYXJtcyB8IHNlZCAtbiAiL0NYWC9wIiB8IHNlZCAtZSAicy9eLiotLXN5c3Jvb3Q9Ly8iXGAKKyAgY3h4PVxgY2F0ICR7Qn0vY29uZmlncGFybXMgfCBnYXdrICdcJDEgfiAvXkNYWC8nIHwgZ2F3ayAtRiI9IiAne3ByaW50IFwkMn0nIHwgZ2F3ayAne3ByaW50IFwkMX0nXGAKKyAgY3h4bWFjaGluZT1cYFwkY3h4IC1kdW1wbWFjaGluZVxgCisgIGN4eHZlcnNpb249XGBcJGN4eCAtZHVtcHZlcnNpb25cYAorICAjIHBhc3MgdGhlIG5ldyB2YWx1ZSBvZiBjKystc3lzaW5jbHVkZXMgdmlhIGNvbmZpZ3Bhcm1zCisgIGVjaG8gIiMgYysrLXN5c2luY2x1ZGVzIGFkZGVkOiIgPj4gJHtCfS9jb25maWdwYXJtcworICBlY2hvICJjKystc3lzaW5jbHVkZXMgPSAtaXN5c3RlbSBcJHN5c3Jvb3QvdXNyL2luY2x1ZGUvYysrL1wkY3h4dmVyc2lvbiAtaXN5c3RlbSBcJHN5c3Jvb3QvdXNyL2luY2x1ZGUvYysrL1wkY3h4dmVyc2lvbi9cJGN4eG1hY2hpbmUiID4+ICR7Qn0vY29uZmlncGFybXMKK2ZpCisKK3dyYXBwZXI9IiR7U30vc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCBcJHRhcmdldCIKK2xvY2FsZWRlZj0iJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2Nyb3NzLWxvY2FsZWRlZiAtLWxpdHRsZS1lbmRpYW4gLS11aW50MzItYWxpZ249NCIKK21ha2UgdGVzdHMtY2xlYW4KK21ha2UgY3Jvc3MtbG9jYWxlZGVmPSJcJGxvY2FsZWRlZiIgY3Jvc3MtdGVzdC13cmFwcGVyPSJcJHdyYXBwZXIiIC1rIGNoZWNrCitybSAtcmYgJHtCfS9jb25maWdwYXJtcworU1RPUAorCisJY2htb2QgK3ggJHtCfS8ke0hPU1RfUFJFRklYfXRlc3RnbGliYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZmEyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy5pbmMKQEAgLTAsMCArMSwxMDUgQEAKK3JlcXVpcmUgZ2xpYmMtY29tbW9uLmluYworcmVxdWlyZSBnbGliYy1sZC5pbmMKK3JlcXVpcmUgZ2xpYmMtdGVzdGluZy5pbmMKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1BBVEhfcHJlcGVuZCA9ICIke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0uJHtTVEFHSU5HQ0N9OiIKKworVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKKworIyBnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRob3V0IG9wdGltaXphdGlvbiwgaWYgc29tZW9uZSB0cmllcyB0byBjb21waWxlIGFuCisjIGVudGlyZSBpbWFnZSBhcyAtTzAsIHdlIG92ZXJyaWRlIGl0IHdpdGggLU8yIGhlcmUgYW5kIGdpdmUgYSBub3RlIGFib3V0IGl0LgorZGVmIGdldF9vcHRpbWl6YXRpb24oZCk6CisgICAgc2VsZWN0ZWRfb3B0aW1pemF0aW9uID0gZC5nZXRWYXIoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsIFRydWUpCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoIlNFTEVDVEVEX09QVElNSVpBVElPTiIsICItTzIiLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24KKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8iLCAieCIsICIiLCBkKSA9PSAieCI6CisgICAgICAgIGJiLm5vdGUoImdsaWJjIGNhbid0IGJlIGJ1aWx0IHdpdGggLU8sIC1PIC1Xbm8tZXJyb3Igd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTyIsICItTyAtV25vLWVycm9yIikKKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8wIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PMCwgLU8yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU8wIiwgIi1PMiIpCisgICAgZWxpZiBiYi51dGlscy5jb250YWlucygiU0VMRUNURURfT1BUSU1JWkFUSU9OIiwgIi1PcyIsICJ4IiwgIiIsIGQpID09ICJ4IjoKKyAgICAgICAgYmIubm90ZSgiZ2xpYmMgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtT3MsIC1PcyAtV25vLWVycm9yIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiIpCisgICAgICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24ucmVwbGFjZSgiLU9zIiwgIi1PcyAtV25vLWVycm9yIikKKyAgICBlbGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8xIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJnbGliYyBjYW4ndCBiZSBidWlsdCB3aXRoIC1PMSwgLU8xIC1Xbm8tZXJyb3Igd2lsbCBiZSB1c2VkIGluc3RlYWQuIikKKyAgICAgICAgcmV0dXJuIHNlbGVjdGVkX29wdGltaXphdGlvbi5yZXBsYWNlKCItTzEiLCAiLU8xIC1Xbm8tZXJyb3IiKQorICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24KKworU0VMRUNURURfT1BUSU1JWkFUSU9OIDo9ICIke0BnZXRfb3B0aW1pemF0aW9uKGQpfSIKKworIyBzaXRlY29uZmlnLmJiY2xhc3MgcnVucyBjb25maWd1cmUgd2hpY2ggbmVlZHMgYSB3b3JraW5nIGNvbXBpbGVyCisjIEZvciB0aGUgY29tcGlsZXIgdG8gd29yayB3ZSBuZWVkIGEgd29ya2luZyBsaWJjIHlldCBsaWJjIGlzbid0CisjIGluIHRoZSBzeXNyb290cyBkaXJlY3RvcnkgYXQgdGhpcyBwb2ludC4gVGhpcyBtZWFucyB0aGUgbGliYy5zbworIyBsaW5rZXIgc2NyaXB0IHdvbid0IHdvcmsgYXMgdGhlIC0tc3lzcm9vdCBzZXR0aW5nIGlzbid0IGNvcnJlY3QuCisjIEhlcmUgd2UgY3JlYXRlIGEgaGFja2VkIHVwIGxpYmMgbGlua2VyIHNjcmlwdCBhbmQgcGFzcyBpbiB0aGUgcmlnaHQKKyMgZmxhZ3MgdG8gbGV0IGNvbmZpZ3VyZSB3b3JrLiBVZ2x5LgorRVhUUkFTSVRFQ09ORklHID0gIkNGTEFHUz0nJHtDRkxBR1N9IC1XbCwtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSciCitzaXRlY29uZmlnX2RvX3NpdGVjb25maWdfZ2VuY2FjaGVfcHJlcGVuZCA9ICIgXAorCW1rZGlyIC1wICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorCWNwICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfS9saWJjLnNvICR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYzsgXAorCXNlZCAtaSAtZSAncyMgJHtiYXNlX2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9I2cnIC1lICdzIyAke2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSNnJyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMvbGliYy5zbzsgXAorIgorCisjIG5wdGwgbmVlZHMgdW53aW5kIHN1cHBvcnQgaW4gZ2NjLCB3aGljaCBjYW4ndCBiZSBidWlsdCB3aXRob3V0IGdsaWJjLgorREVQRU5EUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCBsaWJnY2MtaW5pdGlhbCBsaW51eC1saWJjLWhlYWRlcnMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIgorIyBucHRsIG5lZWRzIGxpYmdjYyBidXQgZGxvcGVucyBpdCwgc28gb3VyIHNobGlicyBjb2RlIGRvZXNuJ3QgZGV0ZWN0IHRoaXMKKyNSREVQRU5EU18ke1BOfSArPSAiJHtAWycnLCdsaWJnY2MnXVsnbnB0bCcgaW4gJyR7R0xJQkNfQURET05TfSddfSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MiCitQUk9WSURFUyArPSAidmlydHVhbC9saWJpbnRsIHZpcnR1YWwvbGliaWNvbnYiCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGRpc3Ryb19mZWF0dXJlc19jaGVjayBzeXN0ZW1kCityZXF1aXJlIGdsaWJjLW9wdGlvbnMuaW5jCisKKyMgVGhlIG1haW4gcHVycG9zZSBvZiBzZXR0aW5nIHRoaXMgdmFyaWFibGUgaXMgdG8gcHJldmVudCB1c2VycyBmcm9tIGFjY2lkZW50bHkKKyMgb3ZlcnJpZGluZyBESVNUUk9fRkVBVFJVRVMsIGNhdXNpbmcgb2JzY3VyZSBidWlsZCBmYWlsdXJlcyBiZWNhdXNlIG9mIGxhY2sKKyMgb2YgbGliYyBmdW5jdGlvbnMuCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAiJHtESVNUUk9fRkVBVFVSRVNfTElCQ30iCisKK0xFQURfU09OQU1FID0gImxpYmMuc28iCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICIgXAorICBhY19jdl9wYXRoX0JBU0hfU0hFTEw9JHtiYXNlX2JpbmRpcn0vYmFzaCBcCisgIGxpYmNfY3Zfc2xpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgIGxpYmNfY3Zfcm9vdHNiaW5kaXI9JHtiYXNlX3NiaW5kaXJ9IFwKKyAgbGliY19jdl9sb2NhbGVkaXI9JHtsb2NhbGVkaXJ9IFwKKyAgbGliY19jdl9zc3A9bm8gXAorIgorCitHTElCQ19FWFRSQV9PRUNPTkYgPz0gIiIKK0dMSUJDX0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmVzZGsgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworIyBUaGlzIG5lZWRzIHRvIG1hdGNoIHdpdGggZ2xpYmMtY29sbGF0ZXJhbC5pbmMsIG90aGVyd2lzZSBnbGliYy1zY3JpcHRzIGFuZCBnbGliYy1sb2NhbGUKKyMgd2lsbCBmYWlsIHRvIGZpbmQgbWFpbiBnbGliYywgZm9yIGRldGFpbHMgc2VlCisjIGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDE1LUphbnVhcnkvMTAwNjc5Lmh0bWwKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCisjIGdsaWJjIHVzZXMgUEFSQUxMRUxNRkxBR1MgdmFyaWFibGUgdG8gcGFzcyBwYXJhbGxlbCBidWlsZCBpbmZvIHNvIHRyYW5zZmVyCisjIFBBUkFMTEVMX01BS0UgaW50byBQQVJBTExFTE1GTEFHUyBhbmQgZW1wdHkgb3V0IFBBUkFMTEVMX01BS0UKK0VHTElCQ1BBUkFMTEVMSVNNIDo9ICJQQVJBTExFTE1GTEFHUz0iJHtQQVJBTExFTF9NQUtFfSIiCitFWFRSQV9PRU1BS0VbdmFyZGVwc2V4Y2x1ZGVdICs9ICJFR0xJQkNQQVJBTExFTElTTSIKK0VYVFJBX09FTUFLRSArPSAiJHtFR0xJQkNQQVJBTExFTElTTX0iCitQQVJBTExFTF9NQUtFID0gIiIKKworIyBnbGliYyBtYWtlLXN5c2NhbGxzLnNoIGhhcyBhIG51bWJlciBvZiBpc3N1ZXMgd2l0aCAvYmluL2Rhc2ggYW5kCisjIGl0J3Mgb3V0cHV0IHdoaWNoIG1ha2UgY2FsbHMgdmlhIHRoZSBTSEVMTCBhbHNvIGhhcyBpc3N1ZXMsIHNvCisjIGVuc3VyZSBtYWtlIHVzZXMgL2Jpbi9iYXNoCitFWFRSQV9PRU1BS0UgKz0gIlNIRUxMPS9iaW4vYmFzaCIKKworT0VfRkVBVFVSRVMgPSAiJHtAZmVhdHVyZXNfdG9fZ2xpYmNfc2V0dGluZ3MoZCl9IgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1lICJzI0BCQVNIQCMvYmluL3NoIyIgLWkgJHtTfS9lbGYvbGRkLmJhc2guaW4KKwllY2hvICcke09FX0ZFQVRVUkVTfScgPiAke0J9L29wdGlvbi1ncm91cHMuY29uZmlnCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJeWVzICcnIHwgb2VfcnVubWFrZSBjb25maWcKKworCSMgUmVtb3ZlIHF1b3RhdGlvbiBtYXJrcyBmcm9tIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfKi4gVGhpcyB3aWxsCisJIyBhdm9pZCBpbnN0YWxsIGVycm9yLgorCXNlZCAtaSAncy9eT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9cKC4qXCk9IlwoLipcKSIkL09QVElPTl9FR0xJQkNfTlNTV0lUQ0hfRklYRURfXDE9XDIvJyBvcHRpb24tZ3JvdXBzLmNvbmZpZworfQorCitHTElCQ19BRERPTlMgPz0gIm5wdGwsbGliaWRuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNjYzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAxLW5hdGl2ZXNkay1nbGliYy1Mb29rLWZvci1ob3N0LXN5c3RlbS1sZC5zby5jYWNoZS1hcy0ucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSAwODc2ZmVhMWI1YjI2ZGE4NGYyOTg3MTRhMmUyM2JhNjk2NjA3ZGJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NDg6MjQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8yN10gbmF0aXZlc2RrLWdsaWJjOiBMb29rIGZvciBob3N0IHN5c3RlbSBsZC5zby5jYWNoZSBhcworIHdlbGwKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIGRlZmF1bHQgbGliIHNlYXJjaCBwYXRoIG9yZGVyIGlzOgorCisgIDEpIExEX0xJQlJBUllfUEFUSAorICAyKSBSUEFUSCBmcm9tIHRoZSBiaW5hcnkKKyAgMykgbGQuc28uY2FjaGUKKyAgNCkgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZW1iZWRkZWQgaW4gdGhlIGxpbmtlcgorCitGb3IgbmF0aXZlc2RrIGJpbmFyaWVzIHdoaWNoIGFyZSBiZWluZyB1c2VkIGFsb25nc2lkZSBiaW5hcmllcyBvbiBhIGhvc3Qgc3lzdGVtLCB3ZQorbmVlZCB0aGUgc2VhcmNoIHBhdGhzIHRvIGZpcnN0bHkgc2VhcmNoIHRoZSBzaGlwcGVkIG5hdGl2ZXNkayBsaWJzIGJ1dCB0aGVuIGFsc28KK2NvdmVyIHRoZSBob3N0IHN5c3RlbS4gRm9yIGV4YW1wbGUgd2Ugd2FudCB0aGUgaG9zdCBzeXN0ZW0ncyBsaWJHTCBhbmQgdGhpcyBtYXkgYmUKK2luIGEgbm9uLXN0YW5kYXJkIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIvbWVzYS4gVGhlIG9ubHkgcGxhY2UgdGhlIGxvY2F0aW9uIGlzIGtub3cKK2Fib3V0IGlzIGluIHRoZSBsZC5zby5jYWNoZSBvZiB0aGUgaG9zdCBzeXN0ZW0uCisKK1NpbmNlIG5hdGl2ZXNkayBoYXMgYSBzaW1wbGUgc3RydWN0dXJlIGFuZCBkb2Vzbid0IG5lZWQgdG8gdXNlIGEgY2FjaGUgaXRzZWxmLCB3ZQorcmVwdXJwb3NlIHRoZSBjYWNoZSBmb3IgdXNlIGFzIGEgbGFzdCByZXNvcnQgaW4gZmluZGluZyBob3N0IHN5c3RlbSBiaW5hcmllcy4gVGhpcworbWVhbnMgd2UgbmVlZCB0byBzd2l0Y2ggdGhlIG9yZGVyIG9mIDMgYW5kIDQgYWJvdmUgdG8gbWFrZSB0aGlzIHdvcmsgZWZmZWN0aXZlbHkuCisKK1JQIDE0LzEwLzIwMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9kbC1sb2FkLmMgfCAxNyArKysrKysrKy0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggMGMwNTJlNC4uZjQ1MDg1YSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC0yMDQwLDcgKzIwNDAsMTQgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorIAlmZCA9IG9wZW5fcGF0aCAobmFtZSwgbmFtZWxlbiwgbW9kZSwKKyAJCQkmbG9hZGVyLT5sX3J1bnBhdGhfZGlycywgJnJlYWxuYW1lLCAmZmIsIGxvYWRlciwKKyAJCQlMQV9TRVJfUlVOUEFUSCwgJmZvdW5kX290aGVyX2NsYXNzKTsKKy0KKysgICAgICAvKiB0cnkgdGhlIGRlZmF1bHQgcGF0aC4gICovCisrICAgICAgaWYgKGZkID09IC0xCisrCSAgJiYgKChsID0gbG9hZGVyID86IEdMKGRsX25zKVtuc2lkXS5fbnNfbG9hZGVkKSA9PSBOVUxMCisrCSAgIHx8IF9fYnVpbHRpbl9leHBlY3QgKCEobC0+bF9mbGFnc18xICYgREZfMV9OT0RFRkxJQiksIDEpKQorKwkgJiYgcnRsZF9zZWFyY2hfZGlycy5kaXJzICE9ICh2b2lkICopIC0xKQorKwlmZCA9IG9wZW5fcGF0aCAobmFtZSwgbmFtZWxlbiwgbW9kZSAmIF9fUlRMRF9TRUNVUkUsICZydGxkX3NlYXJjaF9kaXJzLAorKwkJCSZyZWFsbmFtZSwgJmZiLCBsLCBMQV9TRVJfREVGQVVMVCwgJmZvdW5kX290aGVyX2NsYXNzKTsKKysgICAgICAvKiBGaW5hbGx5IHRyeSBsZC5zby5jYWNoZSAqLworICNpZmRlZiBVU0VfTERDT05GSUcKKyAgICAgICBpZiAoZmQgPT0gLTEKKyAJICAmJiAoX19nbGliY19saWtlbHkgKChtb2RlICYgX19SVExEX1NFQ1VSRSkgPT0gMCkKK0BAIC0yMDk5LDE0ICsyMTA2LDYgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorIAl9CisgI2VuZGlmCisgCistICAgICAgLyogRmluYWxseSwgdHJ5IHRoZSBkZWZhdWx0IHBhdGguICAqLworLSAgICAgIGlmIChmZCA9PSAtMQorLQkgICYmICgobCA9IGxvYWRlciA/OiBHTChkbF9ucylbbnNpZF0uX25zX2xvYWRlZCkgPT0gTlVMTAorLQkgICAgICB8fCBfX2dsaWJjX2xpa2VseSAoIShsLT5sX2ZsYWdzXzEgJiBERl8xX05PREVGTElCKSkpCistCSAgJiYgcnRsZF9zZWFyY2hfZGlycy5kaXJzICE9ICh2b2lkICopIC0xKQorLQlmZCA9IG9wZW5fcGF0aCAobmFtZSwgbmFtZWxlbiwgbW9kZSwgJnJ0bGRfc2VhcmNoX2RpcnMsCistCQkJJnJlYWxuYW1lLCAmZmIsIGwsIExBX1NFUl9ERUZBVUxULCAmZm91bmRfb3RoZXJfY2xhc3MpOworLQorICAgICAgIC8qIEFkZCBhbm90aGVyIG5ld2xpbmUgd2hlbiB3ZSBhcmUgdHJhY2luZyB0aGUgbGlicmFyeSBsb2FkaW5nLiAgKi8KKyAgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG4iKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwMi1uYXRpdmVzZGstZ2xpYmMtRml4LWJ1ZmZlci1vdmVycnVuLXdpdGgtYS1yZWxvY2F0ZWQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NjhmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAyLW5hdGl2ZXNkay1nbGliYy1GaXgtYnVmZmVyLW92ZXJydW4td2l0aC1hLXJlbG9jYXRlZC0ucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorRnJvbSAwODZiNjVkOWFhY2ZmYzQ3ZmNkOGRmNjg4MThhNDc2YTVhZTc2ZmExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTA6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8yN10gbmF0aXZlc2RrLWdsaWJjOiBGaXggYnVmZmVyIG92ZXJydW4gd2l0aCBhIHJlbG9jYXRlZAorIFNESworCitXaGVuIGxkLWxpbnV4LSouc28uMiBpcyByZWxvY2F0ZWQgdG8gYSBwYXRoIHRoYXQgaXMgbG9uZ2VyIHRoYW4gdGhlCitvcmlnaW5hbCBmaXhlZCBsb2NhdGlvbiwgdGhlIGR5bmFtaWMgbG9hZGVyIHdpbGwgY3Jhc2ggaW4gb3Blbl9wYXRoCitiZWNhdXNlIGl0IGltcGxpY2l0bHkgYXNzdW1lcyB0aGF0IG1heF9kaXJuYW1lbGVuIGlzIGEgZml4ZWQgc2l6ZSB0aGF0CituZXZlciBjaGFuZ2VzLgorCitUaGUgYWxsb2NhdGVkIGJ1ZmZlciB3aWxsIG5vdCBiZSBsYXJnZSBlbm91Z2ggdG8gY29udGFpbiB0aGUgZGlyZWN0b3J5CitwYXRoIHN0cmluZyB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgZml4ZWQgbG9jYXRpb24gcHJvdmlkZWQgYXQgYnVpbGQKK3RpbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU0RLIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9kbC1sb2FkLmMgfCAxMiArKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvYWQuYyBiL2VsZi9kbC1sb2FkLmMKK2luZGV4IGY0NTA4NWEuLmYxZWI1ZWQgMTAwNjQ0CistLS0gYS9lbGYvZGwtbG9hZC5jCisrKysgYi9lbGYvZGwtbG9hZC5jCitAQCAtMTc2NSw3ICsxNzY1LDE5IEBAIG9wZW5fcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBtb2RlLAorICAgICAgICBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIHdoZW4gcnRsZCBpcyBydW4gZGlyZWN0bHkuICAqLworICAgICByZXR1cm4gLTE7CisgCisrICBkbworKyAgICB7CisrICAgICAgc3RydWN0IHJfc2VhcmNoX3BhdGhfZWxlbSAqdGhpc19kaXIgPSAqZGlyczsKKysgICAgICBpZiAodGhpc19kaXItPmRpcm5hbWVsZW4gPiBtYXhfZGlybmFtZWxlbikKKysJeworKwkgIG1heF9kaXJuYW1lbGVuID0gdGhpc19kaXItPmRpcm5hbWVsZW47CisrCX0KKysgICAgfQorKyAgd2hpbGUgKCorK2RpcnMgIT0gTlVMTCk7CisrCisgICBidWYgPSBhbGxvY2EgKG1heF9kaXJuYW1lbGVuICsgbWF4X2NhcHN0cmxlbiArIG5hbWVsZW4pOworKworKyAgZGlycyA9IHNwcy0+ZGlyczsKKyAgIGRvCisgICAgIHsKKyAgICAgICBzdHJ1Y3Qgcl9zZWFyY2hfcGF0aF9lbGVtICp0aGlzX2RpciA9ICpkaXJzOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4MWE2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDMtbmF0aXZlc2RrLWdsaWJjLVJhaXNlLXRoZS1zaXplLW9mLWFycmF5cy1jb250YWluaW5nLS5wYXRjaApAQCAtMCwwICsxLDEyNiBAQAorRnJvbSBmZDU5NWE1ZWM4ODViY2I0YzE0NDE3ZGFhMjFjMmU2MWM1YjcyZTQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDE6NTE6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8yN10gbmF0aXZlc2RrLWdsaWJjOiBSYWlzZSB0aGUgc2l6ZSBvZiBhcnJheXMgY29udGFpbmluZyBkbAorIHBhdGhzCisKK1RoaXMgcGF0Y2ggcHV0cyB0aGUgZHluYW1pYyBsb2FkZXIgcGF0aCBpbiB0aGUgYmluYXJpZXMsIFNZU1RFTV9ESVJTIHN0cmluZ3MKK2FuZCBsZW5ndGhzIGFzIHdlbGwgYXMgbGQuc28uY2FjaGUgcGF0aCBpbiB0aGUgZHluYW1pYyBsb2FkZXIgdG8gc3BlY2lmaWMKK3NlY3Rpb25zIGluIG1lbW9yeS4gVGhlIHNlY3Rpb25zIHRoYXQgY29udGFpbiBwYXRocyBoYXZlIGJlZW4gYWxsb2NhdGVkIGEgNDA5NgorYnl0ZSBzZWN0aW9uLCB3aGljaCBpcyB0aGUgbWF4aW11bSBwYXRoIGxlbmd0aCBpbiBsaW51eC4gVGhpcyB3aWxsIGFsbG93IHRoZQorcmVsb2NhdGluZyBzY3JpcHQgdG8gcGFyc2UgdGhlIEVMRiBiaW5hcnksIGRldGVjdCB0aGUgc2VjdGlvbiBhbmQgZWFzaWx5IHJlcGxhY2UKK3RoZSBzdHJpbmdzIGluIGEgY2VydGFpbiBwYXRoLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1NESyBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9kbC1jYWNoZS5jICAgICAgICAgICAgIHwgNCArKysrCisgZWxmL2RsLWxvYWQuYyAgICAgICAgICAgICAgfCA0ICsrLS0KKyBlbGYvaW50ZXJwLmMgICAgICAgICAgICAgICB8IDIgKy0KKyBlbGYvbGRjb25maWcuYyAgICAgICAgICAgICB8IDMgKysrCisgZWxmL3J0bGQuYyAgICAgICAgICAgICAgICAgfCA1ICsrKy0tCisgc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmggfCA0IC0tLS0KKyA2IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9lbGYvZGwtY2FjaGUuYyBiL2VsZi9kbC1jYWNoZS5jCitpbmRleCBkZWM0OWJjLi44NjJmMWQ4IDEwMDY0NAorLS0tIGEvZWxmL2RsLWNhY2hlLmMKKysrKyBiL2VsZi9kbC1jYWNoZS5jCitAQCAtMTMyLDYgKzEzMiwxMCBAQCBkbwkJCQkJCQkJCSAgICAgIFwKKyB3aGlsZSAoMCkKKyAKKyAKKytjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSkgPQorKwkJU1lTQ09ORkRJUiAiL2xkLnNvLmNhY2hlIjsKKysKKysKKyBpbnQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKK2RpZmYgLS1naXQgYS9lbGYvZGwtbG9hZC5jIGIvZWxmL2RsLWxvYWQuYworaW5kZXggZjFlYjVlZC4uZjY2NGY1MCAxMDA2NDQKKy0tLSBhL2VsZi9kbC1sb2FkLmMKKysrKyBiL2VsZi9kbC1sb2FkLmMKK0BAIC0xMDQsOCArMTA0LDggQEAgc3RhdGljIHNpemVfdCBtYXhfY2Fwc3RybGVuIGF0dHJpYnV0ZV9yZWxybzsKKyAvKiBHZXQgdGhlIGdlbmVyYXRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJ1c3RlZCBkaXJlY3Rvcmllcy4gICovCisgI2luY2x1ZGUgInRydXN0ZWQtZGlycy5oIgorIAorLXN0YXRpYyBjb25zdCBjaGFyIHN5c3RlbV9kaXJzW10gPSBTWVNURU1fRElSUzsKKy1zdGF0aWMgY29uc3Qgc2l6ZV90IHN5c3RlbV9kaXJzX2xlbltdID0KKytzdGF0aWMgY29uc3QgY2hhciBzeXN0ZW1fZGlyc1s0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5zeXNkaXJzIikpKSA9IFNZU1RFTV9ESVJTOworK3ZvbGF0aWxlIHN0YXRpYyBjb25zdCBzaXplX3Qgc3lzdGVtX2RpcnNfbGVuW10gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuc3lzZGlyc2xlbiIpKSkgPQorIHsKKyAgIFNZU1RFTV9ESVJTX0xFTgorIH07CitkaWZmIC0tZ2l0IGEvZWxmL2ludGVycC5jIGIvZWxmL2ludGVycC5jCitpbmRleCA0MjJlYTk1ZS4uNmQ2MWEzNiAxMDA2NDQKKy0tLSBhL2VsZi9pbnRlcnAuYworKysrIGIvZWxmL2ludGVycC5jCitAQCAtMTgsNSArMTgsNSBAQAorIAorICNpbmNsdWRlIDxydW50aW1lLWxpbmtlci5oPgorIAorLWNvbnN0IGNoYXIgX19pbnZva2VfZHluYW1pY19saW5rZXJfX1tdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmludGVycCIpKSkKKytjb25zdCBjaGFyIF9faW52b2tlX2R5bmFtaWNfbGlua2VyX19bNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW50ZXJwIikpKQorICAgPSBSVU5USU1FX0xJTktFUjsKK2RpZmYgLS1naXQgYS9lbGYvbGRjb25maWcuYyBiL2VsZi9sZGNvbmZpZy5jCitpbmRleCBmNTRlYzIyLi4wZTc4YTgzIDEwMDY0NAorLS0tIGEvZWxmL2xkY29uZmlnLmMKKysrKyBiL2VsZi9sZGNvbmZpZy5jCitAQCAtMTY3LDYgKzE2Nyw5IEBAIHN0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0KKyAgIG9wdGlvbnMsIHBhcnNlX29wdCwgTlVMTCwgZG9jLCBOVUxMLCBtb3JlX2hlbHAsIE5VTEwKKyB9OworIAorKworK2V4dGVybiBjb25zdCBjaGFyIExEX1NPX0NBQ0hFWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmxkc29jYWNoZSIpKSk7CisrCisgLyogQ2hlY2sgaWYgc3RyaW5nIGNvcnJlc3BvbmRzIHRvIGFuIGltcG9ydGFudCBoYXJkd2FyZSBjYXBhYmlsaXR5IG9yCisgICAgYSBwbGF0Zm9ybS4gICovCisgc3RhdGljIGludAorZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCitpbmRleCA2OTg3M2MyLi42ZDNhZGQ3IDEwMDY0NAorLS0tIGEvZWxmL3J0bGQuYworKysrIGIvZWxmL3J0bGQuYworQEAgLTk5LDYgKzk5LDcgQEAgdWludHB0cl90IF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwKKyBzdHJvbmdfYWxpYXMgKF9fcG9pbnRlcl9jaGtfZ3VhcmRfbG9jYWwsIF9fcG9pbnRlcl9jaGtfZ3VhcmQpCisgI2VuZGlmCisgCisrZXh0ZXJuIGNvbnN0IGNoYXIgTERfU09fQ0FDSEVbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIubGRzb2NhY2hlIikpKTsKKyAKKyAvKiBMaXN0IG9mIGF1ZGl0aW5nIERTT3MuICAqLworIHN0YXRpYyBzdHJ1Y3QgYXVkaXRfbGlzdAorQEAgLTg3NywxMiArODc4LDEyIEBAIG9mIHRoaXMgaGVscGVyIHByb2dyYW07IGNoYW5jZXMgYXJlIHlvdSBkaWQgbm90IGludGVuZCB0byBydW4gdGhpcyBwcm9ncmFtLlxuXAorICAgLS1saXN0ICAgICAgICAgICAgICAgIGxpc3QgYWxsIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoZXkgYXJlIHJlc29sdmVkXG5cCisgICAtLXZlcmlmeSAgICAgICAgICAgICAgdmVyaWZ5IHRoYXQgZ2l2ZW4gb2JqZWN0IHJlYWxseSBpcyBhIGR5bmFtaWNhbGx5IGxpbmtlZFxuXAorIAkJCW9iamVjdCB3ZSBjYW4gaGFuZGxlXG5cCistICAtLWluaGliaXQtY2FjaGUgICAgICAgRG8gbm90IHVzZSAiIExEX1NPX0NBQ0hFICJcblwKKysgIC0taW5oaWJpdC1jYWNoZSAgICAgICBEbyBub3QgdXNlICVzXG5cCisgICAtLWxpYnJhcnktcGF0aCBQQVRIICAgdXNlIGdpdmVuIFBBVEggaW5zdGVhZCBvZiBjb250ZW50IG9mIHRoZSBlbnZpcm9ubWVudFxuXAorIAkJCXZhcmlhYmxlIExEX0xJQlJBUllfUEFUSFxuXAorICAgLS1pbmhpYml0LXJwYXRoIExJU1QgIGlnbm9yZSBSVU5QQVRIIGFuZCBSUEFUSCBpbmZvcm1hdGlvbiBpbiBvYmplY3QgbmFtZXNcblwKKyAJCQlpbiBMSVNUXG5cCistICAtLWF1ZGl0IExJU1QgICAgICAgICAgdXNlIG9iamVjdHMgbmFtZWQgaW4gTElTVCBhcyBhdWRpdG9yc1xuIik7CisrICAtLWF1ZGl0IExJU1QgICAgICAgICAgdXNlIG9iamVjdHMgbmFtZWQgaW4gTElTVCBhcyBhdWRpdG9yc1xuIiwgTERfU09fQ0FDSEUpOworIAorICAgICAgICsrX2RsX3NraXBfYXJnczsKKyAgICAgICAtLV9kbF9hcmdjOworZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ2VuZXJpYy9kbC1jYWNoZS5oIGIvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmgKK2luZGV4IDRiNDk4NjkuLjE4MDBkMDMgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dlbmVyaWMvZGwtY2FjaGUuaAorKysrIGIvc3lzZGVwcy9nZW5lcmljL2RsLWNhY2hlLmgKK0BAIC0yNywxMCArMjcsNiBAQAorICAgKChmbGFncykgPT0gMSB8fCAoZmxhZ3MpID09IF9ETF9DQUNIRV9ERUZBVUxUX0lEKQorICNlbmRpZgorIAorLSNpZm5kZWYgTERfU09fQ0FDSEUKKy0jIGRlZmluZSBMRF9TT19DQUNIRSBTWVNDT05GRElSICIvbGQuc28uY2FjaGUiCistI2VuZGlmCistCisgI2lmbmRlZiBhZGRfc3lzdGVtX2RpcgorICMgZGVmaW5lIGFkZF9zeXN0ZW1fZGlyKGRpcikgYWRkX2RpciAoZGlyKQorICNlbmRpZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA0LUJhY2twb3J0LWh0dHBzLXNvdXJjZXdhcmUub3JnLW1sLWxpYmMtcG9ydHMtMjAwNy0xMi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ4NzUwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDI1NjBiNTY0YjU2NzRiZjI5OTBlNTYwN2Y2MzQyYzE2NDdhNWRjNGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCA4IE1hciAyMDE1IDA0OjAxOjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMjddIEJhY2twb3J0CisgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9saWJjLXBvcnRzLzIwMDctMTIvbXNnMDAwMDAuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworMjAwNy0xMi0wMyAgS3Jpc3RpYW4gVmFuIERlciBWbGlldCAgPHZhbmRlcnNAbGlxd3lkLmNvbT4KKworICAgICAgICAqIGJpdHMvc3RkaW8tbG9jay5oIChfSU9fYWNxdWlyZV9sb2NrX2NsZWFyX2ZsYWdzMik6IERlZmluZQorCitTaWduZWQtb2ZmLWJ5OiBLcmlzdGlhbiBWYW4gRGVyIFZsaWV0IDx2YW5kZXJzQGxpcXd5ZC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgYml0cy9zdGRpby1sb2NrLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYml0cy9zdGRpby1sb2NrLmggYi9iaXRzL3N0ZGlvLWxvY2suaAoraW5kZXggMGM1YmI2NS4uNjYzMDRhNiAxMDA2NDQKKy0tLSBhL2JpdHMvc3RkaW8tbG9jay5oCisrKysgYi9iaXRzL3N0ZGlvLWxvY2suaAorQEAgLTQ5LDYgKzQ5LDggQEAgX19saWJjX2xvY2tfZGVmaW5lX3JlY3Vyc2l2ZSAodHlwZWRlZiwgX0lPX2xvY2tfdCkKKyAgIF9JT19jbGVhbnVwX3JlZ2lvbl9zdGFydCAoKHZvaWQgKCopICh2b2lkICopKSBfSU9fZnVubG9ja2ZpbGUsIChfZnApKTsgICAgICBcCisgICBfSU9fZmxvY2tmaWxlIChfZnApCisgCisrIyBkZWZpbmUgX0lPX2FjcXVpcmVfbG9ja19jbGVhcl9mbGFnczIoX2ZwKSBfSU9fYWNxdWlyZV9sb2NrIChfZnApCisrCisgIyBkZWZpbmUgX0lPX3JlbGVhc2VfbG9jayhfZnApIFwKKyAgIF9JT19mdW5sb2NrZmlsZSAoX2ZwKTsJCQkJCQkgICAgICBcCisgICBfSU9fY2xlYW51cF9yZWdpb25fZW5kICgwKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzZjg1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDUtZnNsLWU1MDAtZTU1MDAtZTY1MDAtNjAzZS1mc3FydC1pbXBsZW1lbnRhdGlvbi5wYXRjaApAQCAtMCwwICsxLDE1ODQgQEAKK0Zyb20gYWEwY2Q4Mjg5MmYzMmU1ODYwMjE0M2M2OTdlZjA1MjQ2OTZhNjQyOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjAxOjUwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMjddIGZzbCBlNTAwL2U1NTAwL2U2NTAwLzYwM2UgZnNxcnQgaW1wbGVtZW50YXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBFZG1hciBXaWVuc2tvc2tpIDxlZG1hckBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jICAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICAgICAgIHwgMTM0ICsrKysrKysrKysrKysrKysrKysrKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyAgICAgIHwgMTAxICsrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyAgICAgICB8IDEzNCArKysrKysrKysrKysrKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgICAgICB8IDEwMSArKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMgICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jICAgICAgfCAxMDEgKysrKysrKysrKysrKysrKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMgIHwgICAxICsKKyAuLi4vbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTMwMGMzL2ZwdS9JbXBsaWVzICAgICB8ICAgMiArCisgLi4uL2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcyAgICAgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAuLi4vc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcyB8ICAgMSArCisgLi4uL3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMgfCAgIDEgKworIC4uLi9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzIHwgICAxICsKKyAxOSBmaWxlcyBjaGFuZ2VkLCAxNDE4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lMzAwYzMvZnB1L0ltcGxpZXMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcxZTUxNmQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjZmYTA2NworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43MWU1MTZkCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjI2ZmEwNjcKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzFlNTE2ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogRG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0d28xMDggPSAzLjI0NTE4NTUzNjU4NDI2NzI2OWUrMzI7Cisrc3RhdGljIGNvbnN0IGZsb2F0IHR3b201NCA9IDUuNTUxMTE1MTIzMTI1NzgyNzAyZS0xNzsKKytzdGF0aWMgY29uc3QgZmxvYXQgaGFsZiA9IDAuNTsKKysKKysvKiBUaGUgbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbnMgaW46CisrCisrICAgX1RoZSBIYW5kYm9vayBvZiBGbG9hdGluZy1Qb2ludGVyIEFyaXRobWV0aWNfIGJ5IE11bGxlciBldCBhbC4sIGNoYXB0ZXIgNTsKKysgICBfSUEtNjQgYW5kIEVsZW1lbnRhcnkgRnVuY3Rpb25zOiBTcGVlZCBhbmQgUHJlY2lzaW9uXyBieSBNYXJrc3RlaW4sIGNoYXB0ZXIgOQorKworKyAgIFdlIGZpbmQgdGhlIGFjdHVhbCBzcXVhcmUgcm9vdCBhbmQgaGFsZiBvZiBpdHMgcmVjaXByb2NhbAorKyAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKysKKysjaWZkZWYgX19TVERDX18KKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrI2Vsc2UKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoYikKKysgICAgIGRvdWJsZSBiOworKyNlbmRpZgorK3sKKysgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisrICAgIHsKKysgICAgICBkb3VibGUgeSwgZywgaCwgZCwgcjsKKysgICAgICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHU7CisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBmZW52X3QgZmU7CisrCisrICAgICAgICAgIGZlID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCk7CisrCisrICAgICAgICAgIHUudmFsdWUgPSBiOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW2VzdGltYXRlXSwgJVt4XVxuIgorKyAgICAgICAgICAgICAgICAgICA6IFtlc3RpbWF0ZV0gIj1mIiAoeSkgOiBbeF0gImYiIChiKSk7CisrCisrICAgICAgICAgIC8qIEZvbGxvd2luZyBNdWxsZXIgZXQgYWwsIHBhZ2UgMTY4LCBlcXVhdGlvbiA1LjIwLgorKworKyAgICAgICAgICAgICBoIGdvZXMgdG8gMS8oMipzcXJ0KGIpKQorKyAgICAgICAgICAgICBnIGdvZXMgdG8gc3FydChiKS4KKysKKysgICAgICAgICAgICAgV2UgbmVlZCB0aHJlZSBpdGVyYXRpb25zIHRvIGdldCB3aXRoaW4gMXVscC4gICovCisrCisrICAgICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlc2UgY2FuIGJlIHBlcmZvcm1lZCBwcmlvciB0byB0aGUgYnJhbmNoLiAgR0NDCisrICAgICAgICAgICAgIGluc2lzdHMgb24gc2lua2luZyB0aGVtIGJlbG93IHRoZSBicmFuY2gsIGhvd2V2ZXI7IGl0IHNlZW1zIGxpa2UKKysgICAgICAgICAgICAgdGhleSdkIGJlIGJldHRlciBiZWZvcmUgdGhlIGJyYW5jaCBzbyB0aGF0IHdlIGNhbiBjb3ZlciBhbnkgbGF0ZW5jeQorKyAgICAgICAgICAgICBmcm9tIHN0b3JpbmcgdGhlIGFyZ3VtZW50IGFuZCBsb2FkaW5nIGl0cyBoaWdoIHdvcmQuICBPaCB3ZWxsLiAgKi8KKysKKysgICAgICAgICAgZyA9IGIgKiB5OworKyAgICAgICAgICBoID0gMC41ICogeTsKKysKKysgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisrICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKysgICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKworKyNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIF9fYXNtX18gKCJmbWFkZCAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICA6IFtyXSAiPWYiIChfX3IpIDogW2FdICJmIiAoYV8pLCBbY10gImYiIChjXyksIFtiXSAiZiIgKGJfKSk7IFwKKysgICAgICAgICAgX19yO30pCisrI2RlZmluZSBGTk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICBfX2FzbV9fICgiZm5tc3ViICVbcl0sICVbYV0sICVbY10sICVbYl1cbiIgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgICBfX3I7fSkKKysKKysgICAgICAgICAgciA9IEZOTVNVQiAoZywgaCwgaGFsZik7CisrICAgICAgICAgIGcgPSBGTUFERCAoZywgciwgZyk7CisrICAgICAgICAgIGggPSBGTUFERCAoaCwgciwgaCk7CisrCisrICAgICAgICAgIHIgPSBGTk1TVUIgKGcsIGgsIGhhbGYpOworKyAgICAgICAgICBnID0gRk1BREQgKGcsIHIsIGcpOworKyAgICAgICAgICBoID0gRk1BREQgKGgsIHIsIGgpOworKworKyAgICAgICAgICByID0gRk5NU1VCIChnLCBoLCBoYWxmKTsKKysgICAgICAgICAgZyA9IEZNQUREIChnLCByLCBnKTsKKysgICAgICAgICAgaCA9IEZNQUREIChoLCByLCBoKTsKKysKKysgICAgICAgICAgLyogZyBpcyBub3cgKy8tIDF1bHAsIG9yIGV4YWN0bHkgZXF1YWwgdG8sIHRoZSBzcXVhcmUgcm9vdCBvZiBiLiAgKi8KKysKKysgICAgICAgICAgLyogRmluYWwgcmVmaW5lbWVudC4gICovCisrICAgICAgICAgIGQgPSBGTk1TVUIgKGcsIGcsIGIpOworKworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4gRk1BREQgKGQsIGgsIGcpOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlIGlmIChiIDwgMCkKKysgICAgeworKyAgICAgIC8qIEZvciBzb21lIHJlYXNvbiwgc29tZSBQb3dlclBDMzIgcHJvY2Vzc29ycyBkb24ndCBpbXBsZW1lbnQKKysgICAgICAgICBGRV9JTlZBTElEX1NRUlQuICAqLworKyNpZmRlZiBGRV9JTlZBTElEX1NRUlQKKysgICAgICBmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEX1NRUlQpOworKworKyAgICAgIGZlbnZfdW5pb25fdCB1ID0geyAuZmVudiA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpIH07CisrICAgICAgaWYgKCh1LmwgJiBGRV9JTlZBTElEKSA9PSAwKQorKyNlbmRpZgorKwlmZXJhaXNlZXhjZXB0IChGRV9JTlZBTElEKTsKKysgICAgICBiID0gYV9uYW4udmFsdWU7CisrICAgIH0KKysgIHJldHVybiBmX3dhc2ggKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNmZhMDY3CistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0wLDAgKzEsMTAxIEBACisrLyogU2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBzcXVhcmUgcm9vdC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxtYXRoLmg+CisrI2luY2x1ZGUgPG1hdGhfcHJpdmF0ZS5oPgorKyNpbmNsdWRlIDxmZW52X2xpYmMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD4KKysKKysjaW5jbHVkZSA8c3lzZGVwLmg+CisrI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrCisrc3RhdGljIGNvbnN0IGllZWVfZmxvYXRfc2hhcGVfdHlwZSBhX25hbiA9IHsud29yZCA9IDB4N2ZjMDAwMDAgfTsKKytzdGF0aWMgY29uc3QgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGFfaW5mID0gey53b3JkID0gMHg3ZjgwMDAwMCB9OworK3N0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisrCisrLyogVGhlIG1ldGhvZCBpcyBiYXNlZCBvbiB0aGUgZGVzY3JpcHRpb25zIGluOgorKworKyAgIF9UaGUgSGFuZGJvb2sgb2YgRmxvYXRpbmctUG9pbnRlciBBcml0aG1ldGljXyBieSBNdWxsZXIgZXQgYWwuLCBjaGFwdGVyIDU7CisrICAgX0lBLTY0IGFuZCBFbGVtZW50YXJ5IEZ1bmN0aW9uczogU3BlZWQgYW5kIFByZWNpc2lvbl8gYnkgTWFya3N0ZWluLCBjaGFwdGVyIDkKKysKKysgICBXZSBmaW5kIHRoZSByZWNpcHJvY2FsIHNxdWFyZSByb290IGFuZCB1c2UgdGhhdCB0byBjb21wdXRlIHRoZSBhY3R1YWwKKysgICBzcXVhcmUgcm9vdC4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrZmxvYXQKKytfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisrI2Vsc2UKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoYikKKysgICAgIGZsb2F0IGI7CisrI2VuZGlmCisreworKyAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKysgICAgeworKyNkZWZpbmUgRk1TVUIoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICBfX2FzbV9fICgiZm1zdWIgJVtyXSwgJVthXSwgJVtjXSwgJVtiXVxuIiAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgOiBbcl0gIj1mIiAoX19yKSA6IFthXSAiZiIgKGFfKSwgW2NdICJmIiAoY18pLCBbYl0gImYiIChiXykpOyBcCisrICAgICAgICBfX3I7fSkKKysjZGVmaW5lIEZOTVNVQihhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgX19hc21fXyAoImZubXN1YiAlW3JdLCAlW2FdLCAlW2NdLCAlW2JdXG4iICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgIDogW3JdICI9ZiIgKF9fcikgOiBbYV0gImYiIChhXyksIFtjXSAiZiIgKGNfKSwgW2JdICJmIiAoYl8pKTsgXAorKyAgICAgICAgX19yO30pCisrCisrICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgIT0gYV9pbmYudmFsdWUsIDEpKQorKyAgICAgICAgeworKyAgICAgICAgICBkb3VibGUgeSwgeDsKKysgICAgICAgICAgZmVudl90IGZlOworKworKyAgICAgICAgICBmZSA9IGZlZ2V0ZW52X3JlZ2lzdGVyICgpOworKworKyAgICAgICAgICByZWxheF9mZW52X3N0YXRlICgpOworKworKyAgICAgICAgICAvKiBDb21wdXRlIHkgPSAxLjUgKiBiIC0gYi4gIFVzZXMgZmV3ZXIgY29uc3RhbnRzIHRoYW4geSA9IDAuNSAqIGIuICAqLworKyAgICAgICAgICB5ID0gRk1TVUIgKHRocmVlaGFsZiwgYiwgYik7CisrCisrICAgICAgICAgIC8qIEluaXRpYWwgZXN0aW1hdGUuICAqLworKyAgICAgICAgICBfX2FzbV9fICgiZnJzcXJ0ZSAlW3hdLCAlW2JdXG4iIDogW3hdICI9ZiIgKHgpIDogW2JdICJmIiAoYikpOworKworKyAgICAgICAgICAvKiBJdGVyYXRlLiAgeF97bisxfSA9IHhfbiAqICgxLjUgLSB5ICogKHhfbiAqIHhfbikpLiAgKi8KKysgICAgICAgICAgeCA9IHggKiBGTk1TVUIgKHksIHggKiB4LCB0aHJlZWhhbGYpOworKyAgICAgICAgICB4ID0geCAqIEZOTVNVQiAoeSwgeCAqIHgsIHRocmVlaGFsZik7CisrICAgICAgICAgIHggPSB4ICogRk5NU1VCICh5LCB4ICogeCwgdGhyZWVoYWxmKTsKKysKKysgICAgICAgICAgLyogQWxsIGRvbmUuICAqLworKyAgICAgICAgICBmZXNldGVudl9yZWdpc3RlciAoZmUpOworKyAgICAgICAgICByZXR1cm4geCAqIGI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKGIgPCAwKQorKyAgICB7CisrICAgICAgLyogRm9yIHNvbWUgcmVhc29uLCBzb21lIFBvd2VyUEMzMiBwcm9jZXNzb3JzIGRvbid0IGltcGxlbWVudAorKyAgICAgICAgIEZFX0lOVkFMSURfU1FSVC4gICovCisrI2lmZGVmIEZFX0lOVkFMSURfU1FSVAorKyAgICAgIGZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSURfU1FSVCk7CisrCisrICAgICAgZmVudl91bmlvbl90IHUgPSB7IC5mZW52ID0gZmVnZXRlbnZfcmVnaXN0ZXIgKCkgfTsKKysgICAgICBpZiAoKHUubCAmIEZFX0lOVkFMSUQpID09IDApCisrI2VuZGlmCisrCWZlcmFpc2VleGNlcHQgKEZFX0lOVkFMSUQpOworKyAgICAgIGIgPSBhX25hbi52YWx1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZfd2FzaGYgKGIpOworK30KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9JbXBsaWVzIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxMDNiNGQKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjY0ZGIxN2YKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2UzMDBjMy9mcHUvSW1wbGllcworQEAgLTAsMCArMSwyIEBACisrIyBlMzAwYzMgaXMgYSB2YXJpYW50IG9mIDYwM2Ugc28gdXNlIHRoZSBzYW1lIG9wdGltaXphdGlvbnMgZm9yIHNxcnQKKytwb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjdlYWM1ZmMKKy0tLSAvZGV2L251bGwKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvSW1wbGllcworQEAgLTAsMCArMSBAQAorK3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjY0YjJhNworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTI1OTM0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYTdiYzg1NAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvSW1wbGllcyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9JbXBsaWVzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDRmZjhjYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L0ltcGxpZXMKK0BAIC0wLDAgKzEgQEAKKytwb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YzIyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA2LXJlYWRsaWItQWRkLU9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUy10by1rbm93bi0ucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA1ZWMxYmM1MTcyODUxMjc4MjMxY2U5NDBiNjhiMzVjZTljYmY4NTAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MTE6MjIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8yN10gcmVhZGxpYjogQWRkIE9FQ09SRV9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUyB0byBrbm93bgorIG5hbWVzCisKK1RoaXMgYm9sdHMgaW4gYSBob29rIGZvciBPRSB0byBwYXNzIGl0cyBvd24gdmVyc2lvbiBvZiBpbnRlcnByZXRlcgorbmFtZXMgaW50byBnbGliYyBlc3BlY2lhbGx5IGZvciBtdWx0aWxpYiBjYXNlLCB3aGVyZSBpdCBkaWZmZXJzIGZyb20gYW55CitvdGhlciBkaXN0cm9zCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IExpYW5oYW8gTHUgPGxpYW5oYW8ubHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGVsZi9yZWFkbGliLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2VsZi9yZWFkbGliLmMgYi9lbGYvcmVhZGxpYi5jCitpbmRleCA3ZmQ1YjhhLi4yZjVkYTlmIDEwMDY0NAorLS0tIGEvZWxmL3JlYWRsaWIuYworKysrIGIvZWxmL3JlYWRsaWIuYworQEAgLTUxLDYgKzUxLDcgQEAgc3RhdGljIHN0cnVjdCBrbm93bl9uYW1lcyBpbnRlcnByZXRlcnNbXSA9CisgI2lmZGVmIFNZU0RFUF9LTk9XTl9JTlRFUlBSRVRFUl9OQU1FUworICAgU1lTREVQX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTCisgI2VuZGlmCisrICBPRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMKKyB9OworIAorIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMga25vd25fbGlic1tdID0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwNy1wcGMtc3FydC1GaXgtdW5kZWZpbmVkLXJlZmVyZW5jZS10by1fX3NxcnRfZmluaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYzhmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA3LXBwYy1zcXJ0LUZpeC11bmRlZmluZWQtcmVmZXJlbmNlLXRvLV9fc3FydF9maW5pdGUucGF0Y2gKQEAgLTAsMCArMSwyMDggQEAKK0Zyb20gZWE5OGIxYTEyYjVmNzc5ZmQ3OTQ3OGZmOTMwYTc5ZWY2MDM4Nzg1MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjE1OjA3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMjddIHBwYy9zcXJ0OiBGaXggdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19zcXJ0X2Zpbml0ZScKKworb24gcHBjIGZpeGVzIHRoZSBlcnJvcnMgbGlrZSBiZWxvdworfCAuLy5saWJzL2xpYnB1bHNlY29yZS0xLjEuc286IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fc3FydF9maW5pdGUnCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitDaGFuZ2VMb2cKKworMjAxMi0wMS0wNiAgS2hlbSBSYWogIDxyYWoua2hlbUBnbWFpbC5jb20+CisKKyAgICAgICAgKiBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmM6IEFkZCBfXypfZmluaXRlIGFsaWFzLgorICAgICAgICBSZW1vdmUgY3J1ZnQuCisgICAgICAgICogc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmM6IERpdHRvLgorICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmM6IERpdHRvLgorICAgICAgICAqIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jOiBEaXR0by4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMgICAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyAgIHwgNyArLS0tLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEgKworIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAxICsKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgICB8IDcgKy0tLS0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCA3ICstLS0tLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMSArCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jICB8IDEgKworIDEyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDI0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLjE3OTVmZDYgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jCitAQCAtMzksMTQgKzM5LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGRvdWJsZQorIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKy0jZWxzZQorLWRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorLSAgICAgZG91YmxlIGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTEzMiwzICsxMjYsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uYTkxN2YzMSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYworQEAgLTM3LDE0ICszNyw4IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgV2UgZmluZCB0aGUgcmVjaXByb2NhbCBzcXVhcmUgcm9vdCBhbmQgdXNlIHRoYXQgdG8gY29tcHV0ZSB0aGUgYWN0dWFsCisgICAgc3F1YXJlIHJvb3QuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGZsb2F0CisgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorLSNlbHNlCistZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCistICAgICBmbG9hdCBiOworLSNlbmRpZgorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05OSwzICs5Myw0IEBAIF9faWVlZTc1NF9zcXJ0ZiAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaGYgKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li45ZDE3NTEyIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi5mYzRhNzQ5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDMgKzEzMiw0IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDI2ZmEwNjcuLjlkMTc1MTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTk5LDMgKzk5LDQgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCA3MWU1MTZkLi4xNzk1ZmQ2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtMzksMTQgKzM5LDggQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgV2UgZmluZCB0aGUgYWN0dWFsIHNxdWFyZSByb290IGFuZCBoYWxmIG9mIGl0cyByZWNpcHJvY2FsCisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorLSNpZmRlZiBfX1NURENfXworIGRvdWJsZQorIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKy0jZWxzZQorLWRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorLSAgICAgZG91YmxlIGI7CistI2VuZGlmCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTEzMiwzICsxMjYsNCBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorK3N0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCAyNmZhMDY3Li5hOTE3ZjMxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zNywxNCArMzcsOCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIFdlIGZpbmQgdGhlIHJlY2lwcm9jYWwgc3F1YXJlIHJvb3QgYW5kIHVzZSB0aGF0IHRvIGNvbXB1dGUgdGhlIGFjdHVhbAorICAgIHNxdWFyZSByb290LiAgKi8KKyAKKy0jaWZkZWYgX19TVERDX18KKyBmbG9hdAorIF9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKy0jZWxzZQorLWZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorLSAgICAgZmxvYXQgYjsKKy0jZW5kaWYKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTksMyArOTMsNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDcxZTUxNmQuLmZjNGE3NDkgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC0xMzIsMyArMTMyLDQgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKytzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggMjZmYTA2Ny4uOWQxNzUxMiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksMyArOTksNCBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9Cisrc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydGYsIF9fc3FydGZfZmluaXRlKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmYTkzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMDgtX19pZWVlNzU0X3NxcnQtZi1hcmUtbm93LWlubGluZS1mdW5jdGlvbnMtYW5kLWNhbGwtby5wYXRjaApAQCAtMCwwICsxLDM4NyBAQAorRnJvbSAyNDU2ZWE0NGFlZWVkYWU4N2VkYjUyMmY3N2E3OTY5ZDYzNjM5OWIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MTY6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8yN10gX19pZWVlNzU0X3NxcnR7LGZ9IGFyZSBub3cgaW5saW5lIGZ1bmN0aW9ucyBhbmQgY2FsbAorIG91dCBfX3Nsb3cgdmVyc2lvbnMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jICAgIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMgICB8ICA4ICsrKysrKystCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jICB8IDE0ICsrKysrKysrKysrLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYyB8IDEyICsrKysrKysrKystLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jICAgfCAxNCArKysrKysrKysrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYyAgfCAxMiArKysrKysrKysrLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyAgIHwgIDggKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgIHwgIDggKysrKysrKysKKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYyAgIHwgMTIgKysrKysrKysrKy0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jICB8ICA5ICsrKysrKysrLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jICAgfCAxNCArKysrKysrKysrKy0tLQorIHN5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYyAgfCAxMiArKysrKysrKysrLS0KKyAxMiBmaWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnQuYworaW5kZXggMTc5NWZkNi4uZGFhODNmMyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0LmMKK0BAIC00MCw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworICAgIHNpbXVsdGFuZW91c2x5LiAgKi8KKyAKKyBkb3VibGUKKy1fX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgeworICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKGIgPiAwLCAxKSkKKyAgICAgeworQEAgLTc3LDcgKzc3LDcgQEAgX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTI2LDQgKzEyNiwxMiBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyLzYwM2UvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitpbmRleCBhOTE3ZjMxLi5iODEyY2YxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi82MDNlL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvNjAzZS9mcHUvZV9zcXJ0Zi5jCitAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworICAgIHNxdWFyZSByb290LiAgKi8KKyAKKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtOTMsNCArOTMsMTAgQEAgX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTUwMG1jL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1MDBtYy9mcHUvZV9zcXJ0Zi5jCitpbmRleCA5ZDE3NTEyLi4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTAwbWMvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNTUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U1NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTU1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li4xYzM0MjQ0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtMTMyLDQgKzEzMiwxMiBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0LCBfX3NxcnRfZmluaXRlKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworaW5kZXggOWQxNzUxMi4uODEyNjUzNSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydGYuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitAQCAtOTksNCArOTksMTIgQEAgX19pZWVlNzU0X3NxcnRmIChiKQorICAgICB9CisgICByZXR1cm4gZl93YXNoZiAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydGYKKytmbG9hdAorK19faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydGYgKHgpOworK30KKysKKyBzdHJvbmdfYWxpYXMgKF9faWVlZTc1NF9zcXJ0ZiwgX19zcXJ0Zl9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0LmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworaW5kZXggMTc5NWZkNi4uMTNhODE5NyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTU1MDAvZnB1L2Vfc3FydC5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnQuYworQEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgICAgc2ltdWx0YW5lb3VzbHkuICAqLworIAorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyB7CisgICBpZiAoX19idWlsdGluX2V4cGVjdCAoYiA+IDAsIDEpKQorICAgICB7CitAQCAtNzcsNyArNzcsNyBAQCBfX2llZWU3NTRfc3FydCAoZG91YmxlIGIpCisgCisgICAgICAgICAgIC8qIEhhbmRsZSBzbWFsbCBudW1iZXJzIGJ5IHNjYWxpbmcuICAqLworICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoKHUucGFydHMubXN3ICYgMHg3ZmYwMDAwMCkgPD0gMHgwMjAwMDAwMCwgMCkpCistICAgICAgICAgICAgcmV0dXJuIF9faWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKysgICAgICAgICAgICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisgCisgI2RlZmluZSBGTUFERChhXywgY18sIGJfKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAoeyBkb3VibGUgX19yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK0BAIC0xMjYsNCArMTI2LDEyIEBAIF9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAgICAgfQorICAgcmV0dXJuIGZfd2FzaCAoYik7CisgfQorKworKyN1bmRlZiBfX2llZWU3NTRfc3FydAorK2RvdWJsZQorK19faWVlZTc1NF9zcXJ0IChkb3VibGUgeCkKKyt7CisrICByZXR1cm4gX19zbG93X2llZWU3NTRfc3FydCAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnQsIF9fc3FydF9maW5pdGUpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCBhOTE3ZjMxLi5mYWUyZDgxIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNTUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U1NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCB0aHJlZWhhbGYgPSAxLjU7CisgICAgc3F1YXJlIHJvb3QuICAqLworIAorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorIHsKKyAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChiID4gMCwgMSkpCisgICAgIHsKK0BAIC05Myw0ICs5MywxMSBAQCBfX2llZWU3NTRfc3FydGYgKGZsb2F0IGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnQuYyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitpbmRleCBmYzRhNzQ5Li43MDM4YTcwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGM2NC9lNjUwMC9mcHUvZV9zcXJ0LmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydC5jCitAQCAtNDEsMTAgKzQxLDEwIEBAIHN0YXRpYyBjb25zdCBmbG9hdCBoYWxmID0gMC41OworIAorICNpZmRlZiBfX1NURENfXworIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0IChkb3VibGUgYikKKyAjZWxzZQorIGRvdWJsZQorLV9faWVlZTc1NF9zcXJ0IChiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGIpCisgICAgICBkb3VibGUgYjsKKyAjZW5kaWYKKyB7CitAQCAtODMsNyArODMsNyBAQCBfX2llZWU3NTRfc3FydCAoYikKKyAKKyAgICAgICAgICAgLyogSGFuZGxlIHNtYWxsIG51bWJlcnMgYnkgc2NhbGluZy4gICovCisgICAgICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0ICgodS5wYXJ0cy5tc3cgJiAweDdmZjAwMDAwKSA8PSAweDAyMDAwMDAwLCAwKSkKKy0gICAgICAgICAgICByZXR1cm4gX19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworKyAgICAgICAgICAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0IChiICogdHdvMTA4KSAqIHR3b201NDsKKyAKKyAjZGVmaW5lIEZNQUREKGFfLCBjXywgYl8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICh7IGRvdWJsZSBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorQEAgLTEzMiw0ICsxMzIsMTIgQEAgX19pZWVlNzU0X3NxcnQgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2ggKGIpOworIH0KKysKKysjdW5kZWYgX19pZWVlNzU0X3NxcnQKKytkb3VibGUKKytfX2llZWU3NTRfc3FydCAoZG91YmxlIHgpCisreworKyAgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ICh4KTsKKyt9CisrCisgc3Ryb25nX2FsaWFzIChfX2llZWU3NTRfc3FydCwgX19zcXJ0X2Zpbml0ZSkKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKK2luZGV4IDlkMTc1MTIuLjEwZGUxZjAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzY0L2U2NTAwL2ZwdS9lX3NxcnRmLmMKKysrKyBiL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjNjQvZTY1MDAvZnB1L2Vfc3FydGYuYworQEAgLTM5LDEwICszOSwxMCBAQCBzdGF0aWMgY29uc3QgZmxvYXQgdGhyZWVoYWxmID0gMS41OworIAorICNpZmRlZiBfX1NURENfXworIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChmbG9hdCBiKQorICNlbHNlCisgZmxvYXQKKy1fX2llZWU3NTRfc3FydGYgKGIpCisrX19zbG93X2llZWU3NTRfc3FydGYgKGIpCisgICAgICBmbG9hdCBiOworICNlbmRpZgorIHsKK0BAIC05OSw0ICs5OSwxMiBAQCBfX2llZWU3NTRfc3FydGYgKGIpCisgICAgIH0KKyAgIHJldHVybiBmX3dhc2hmIChiKTsKKyB9CisrCisrI3VuZGVmIF9faWVlZTc1NF9zcXJ0ZgorK2Zsb2F0CisrX19pZWVlNzU0X3NxcnRmIChmbG9hdCB4KQorK3sKKysgIHJldHVybiBfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoeCk7CisrfQorKworIHN0cm9uZ19hbGlhcyAoX19pZWVlNzU0X3NxcnRmLCBfX3NxcnRmX2Zpbml0ZSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTQ3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDA5LVF1b3RlLWZyb20tYnVnLTE0NDMtd2hpY2gtZXhwbGFpbnMtd2hhdC10aGUtcGF0Y2gtZG8ucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBhY2Y3YTAyODgxN2U3MWViOTlkNzg1MDM3NjU5YWJkNGQxMjBmZmUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjA6MDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8yN10gUXVvdGUgZnJvbSBidWcgMTQ0MyB3aGljaCBleHBsYWlucyB3aGF0IHRoZSBwYXRjaCBkb2VzCisgOgorCisgIFdlIGJ1aWxkIHNvbWUgcmFuZG9tIHByb2dyYW0gYW5kIGxpbmsgaXQgd2l0aCAtbHVzdC4gIFdoZW4gd2UgcnVuIGl0LAorICBpdCBkaWVzIHdpdGggYSBTSUdTRUdWIGJlZm9yZSByZWFjaGluZyBtYWluKCkuCisKKyAgTGlidXN0LnNvIGRlcGVuZHMgb24gbGlidXJjdS1icC5zbyBmcm9tIHRoZSB1c2VybW9kZS1yY3UgcGFja2FnZS4KKyAgQWx0aG91Z2ggbGlidXN0LnNvIGlzIG5vdCBwcmVsaW5rZWQsIGxpYnVyY3UtYnAuc28gSVMgcHJlbGlua2VkOyB0aGlzCisgIGlzIGNyaXRpY2FsLgorCisgIExpYnVzdC5zbyB1c2VzIGEgVExTIC8gX190aHJlYWQgdmFyaWFibGUgdGhhdCBpcyBkZWZpbmVkIGluIGxpYnVyY3UtCisgIGJwLnNvLiAgVGhlcmUgYXJlIHNwZWNpYWwgQVJNLXNwZWNpZmljIHJlbG9jYXRpb24gdHlwZXMgdGhhdCBhbGxvdyB0d28KKyAgc2hhcmVkIGxpYnJhcmllcyB0byBzaGFyZSB0aHJlYWQtc3BlY2lmaWMgZGF0YS4gIFRoaXMgaXMgY3JpdGljYWwgdG9vLgorCisgIE9uZSBtb3JlIGNyaXRpY2FsIGlzc3VlOiBhbHRob3VnaCBsaWJ1cmN1LWJwLnNvIGlzIHByZWxpbmtlZCwgd2UgY2FuJ3QKKyAgbG9hZCBpdCBhdCBpdHMgcHJlbGlua2VkIGFkZHJlc3MsIGJlY2F1c2Ugd2UgYWxzbyBsaW5rIGFnYWluc3QKKyAgbGlicnQuc28sIGFuZCBsaWJydC5zbyB1c2VzIHRoYXQgYWRkcmVzcy4KKworICBUaGUgZHluYW1pYyBsaW5rZXIgaXMgZm9yY2VkIHRvIHJlbGluayBsaWJ1cmN1LWJwLnNvIGF0IGEgZGlmZmVyZW50CisgIGFkZHJlc3MuICBJbiB0aGUgY291cnNlIG9mIHJlbGlua2luZywgaXQgcHJvY2Vzc2VzIHRoZSBzcGVjaWFsIEFSTQorICByZWxvY2F0aW9uIHJlY29yZCBtZW50aW9uZWQgYWJvdmUuICBUaGUgcHJlbGlua2VyIGhhcyBhbHJlYWR5IGZpbGxlZAorICBpbiB0aGUgaW5mb3JtYXRpb24sIHdoaWNoIGlzIGEgc2hvcnQgb2Zmc2V0IGludG8gYSB0YWJsZSBvZiB0aHJlYWQtCisgIHNwZWNpZmljIGRhdGEgdGhhdCBpcyBhbGxvY2F0ZWQgcGVyLXRocmVhZCBmb3IgZWFjaCBsaWJyYXJ5IHRoYXQgdXNlcworICBUTFMuICBCZWNhdXNlIHRoZSBub3JtYWwgYmVoYXZpb3Igb2YgYSByZWxvY2F0aW9uIGlzIHRvIGFkZCB0aGUgc3ltYm9sCisgIHZhbHVlIHRvIGFuIGFkZGVuZCBzdG9yZWQgYXQgdGhlIGFkZHJlc3MgYmVpbmcgcmVsb2NhdGVkLCB3ZSBlbmQgdXAKKyAgYWRkaW5nIHRoZSBzaG9ydCBvZmZzZXQgdG8gaXRzZWxmLCBkb3VibGluZyBpdC4KKworICBOb3cgd2UgaGF2ZSBhbiBhd2t3YXJkIHNpdHVhdGlvbi4gIFRoZSBsaWJ1c3Quc28gbGlicmFyeSBkb2Vzbid0IGtub3cKKyAgYWJvdXQgdGhlIGFkZGVuZCwgc28gaXRzIFRMUyBkYXRhIGZvciB0aGlzIGVsZW1lbnQgaXMgY29ycmVjdC4gIFRoZQorICBsaWJ1cmN1LWJwLnNvIGxpYnJhcnkgaGFzIGEgZGlmZmVyZW50IG9mZnNldCBmb3IgdGhlIGVsZW1lbnQuICBXaGVuIHdlCisgIGdvIHRvIGluaXRpYWxpemUgdGhlIGVsZW1lbnQgZm9yIHRoZSBmaXJzdCB0aW1lIGluIGxpYnVyY3UtYnAuc28sIHdlCisgIHdyaXRlIHRoZSBhZGRyZXNzIG9mIHRoZSByZXN1bHQgYXQgdGhlIGRvdWJsZWQgKGJyb2tlbikgb2Zmc2V0LgorICBMYXRlciwgd2hlbiB3ZSByZWZlciB0byB0aGUgYWRkcmVzcyBmcm9tIGxpYnVzdC5zbywgd2UgY2hlY2sgdGhlIHZhbHVlCisgIGF0IHRoZSBjb3JyZWN0IG9mZnNldCwgYnV0IGl0J3MgTlVMTCwgc28gd2UgZWF0IGhvdCBTSUdTRUdWLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaCBiL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAoraW5kZXggNmZiMjBiZC4uODgwNTUzNyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYXJtL2RsLW1hY2hpbmUuaAorKysrIGIvc3lzZGVwcy9hcm0vZGwtbWFjaGluZS5oCitAQCAtNDk5LDcgKzQ5OSw3IEBAIGVsZl9tYWNoaW5lX3JlbCAoc3RydWN0IGxpbmtfbWFwICptYXAsIGNvbnN0IEVsZjMyX1JlbCAqcmVsb2MsCisgCisgCWNhc2UgUl9BUk1fVExTX0RUUE9GRjMyOgorIAkgIGlmIChzeW0gIT0gTlVMTCkKKy0JICAgICpyZWxvY19hZGRyICs9IHN5bS0+c3RfdmFsdWU7CisrCSAgICAqcmVsb2NfYWRkciA9IHN5bS0+c3RfdmFsdWU7CisgCSAgYnJlYWs7CisgCisgCWNhc2UgUl9BUk1fVExTX1RQT0ZGMzI6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MWU1NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEwLWVnbGliYy1ydW4tbGlibS1lcnItdGFiLnBsLXdpdGgtc3BlY2lmaWMtZGlycy1pbi1TLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Zyb20gMDE3MzIyZWUyOGMxNTc5Y2U2YzgxOTA0ODQyYWFhZGE5YzgyNDAzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMTkgRGVjIDIwMTIgMDQ6Mzk6NTcgLTA2MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8yN10gZWdsaWJjOiBydW4gbGlibS1lcnItdGFiLnBsIHdpdGggc3BlY2lmaWMgZGlycyBpbiAke1N9CisKK2xpYm0tZXJyLXRhYi5wbCB3aWxsIHBhcnNlIGFsbCB0aGUgZmlsZXMgbmFtZWQgImxpYm0tdGVzdC11bHBzIgoraW4gdGhlIGdpdmVuIGRpciByZWN1cnNpdmVseS4gVG8gYXZvaWQgcGFyc2luZyB0aGUgb25lIGluCiske1N9Ly5wYy8gKGl0IGRvZXMgZXhpc3QgYWZ0ZXIgZWdsaWJjIGFkZHMgYWFyY2g2NCBzdXBwb3J0LAorJHtTfS8ucGMvYWFyY2g2NC0wMDAxLWdsaWJjLWZzZi12MS1lYWY2ZjIwNS5wYXRjaC9wb3J0cy9zeXNkZXBzLworYWFyY2g2NC9saWJtLXRlc3QtdWxwcyksIHJ1biBsaWJtLWVyci10YWIucGwgd2l0aCBzcGVjaWZpYyBkaXJzCitpbiAke1N9LgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUaW5nIExpdSA8YjI4NDk1QGZyZWVzY2FsZS5jb20+CistLS0KKyBtYW51YWwvTWFrZWZpbGUgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21hbnVhbC9NYWtlZmlsZSBiL21hbnVhbC9NYWtlZmlsZQoraW5kZXggNTM4MjIwOC4uNmI3MDFiMCAxMDA2NDQKKy0tLSBhL21hbnVhbC9NYWtlZmlsZQorKysrIGIvbWFudWFsL01ha2VmaWxlCitAQCAtMTA1LDcgKzEwNSw4IEBAICQob2JqcGZ4KWxpYm0tZXJyLnRleGk6ICQob2JqcGZ4KXN0YW1wLWxpYm0tZXJyCisgJChvYmpwZngpc3RhbXAtbGlibS1lcnI6IGxpYm0tZXJyLXRhYi5wbCAkKHdpbGRjYXJkICQoZm9yZWFjaCBkaXIsJChzeXNkaXJzKSxcCisgCQkJCQkJICAgICAkKGRpcikvbGlibS10ZXN0LXVscHMpKQorIAlwd2Q9YHB3ZGA7IFwKKy0JJChQRVJMKSAkPCAkJHB3ZC8uLiA+ICQob2JqcGZ4KWxpYm0tZXJyLXRtcAorKwkkKFBFUkwpICQ8ICQkcHdkLy4uL3BvcnRzID4gJChvYmpwZngpbGlibS1lcnItdG1wCisrCSQoUEVSTCkgJDwgJCRwd2QvLi4vc3lzZGVwcyA+PiAkKG9ianBmeClsaWJtLWVyci10bXAKKyAJJChtb3ZlLWlmLWNoYW5nZSkgJChvYmpwZngpbGlibS1lcnItdG1wICQob2JqcGZ4KWxpYm0tZXJyLnRleGkKKyAJdG91Y2ggJEAKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTExMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDExLV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSAxYmU0NWY4NzBlYmJiMDI1OWJlYTUyNTBhNmQyYzJmYmNiMzM0MDlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6MjQ6NDYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8yN10gX19pZWVlNzU0X3NxcnR7LGZ9IGFyZSBub3cgaW5saW5lIGZ1bmN0aW9ucyBhbmQgY2FsbAorIG91dCBfX3Nsb3cgdmVyc2lvbnMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGNodW5yb25nIGd1byA8QjQwMjkwQGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMgIHwgNiArKystLS0KKyBzeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvcG93ZXJwYy9wb3dlcnBjMzIvZTY1MDAvZnB1L2Vfc3FydC5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK2luZGV4IDFjMzQyNDQuLjcwMzhhNzAgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnQuYworKysrIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0LmMKK0BAIC00MSwxMCArNDEsMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IGhhbGYgPSAwLjU7CisgCisgI2lmZGVmIF9fU1REQ19fCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorK19fc2xvd19pZWVlNzU0X3NxcnQgKGRvdWJsZSBiKQorICNlbHNlCisgZG91YmxlCistX19pZWVlNzU0X3NxcnQgKGIpCisrX19zbG93X2llZWU3NTRfc3FydCAoYikKKyAgICAgIGRvdWJsZSBiOworICNlbmRpZgorIHsKK0BAIC04Myw3ICs4Myw3IEBAIF9faWVlZTc1NF9zcXJ0IChiKQorIAorICAgICAgICAgICAvKiBIYW5kbGUgc21hbGwgbnVtYmVycyBieSBzY2FsaW5nLiAgKi8KKyAgICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1LnBhcnRzLm1zdyAmIDB4N2ZmMDAwMDApIDw9IDB4MDIwMDAwMDAsIDApKQorLSAgICAgICAgICAgIHJldHVybiBfX2llZWU3NTRfc3FydCAoYiAqIHR3bzEwOCkgKiB0d29tNTQ7CisrICAgICAgICAgICAgcmV0dXJuIF9fc2xvd19pZWVlNzU0X3NxcnQgKGIgKiB0d28xMDgpICogdHdvbTU0OworIAorICNkZWZpbmUgRk1BREQoYV8sIGNfLCBiXykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgKHsgZG91YmxlIF9fcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jIGIvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCitpbmRleCA4MTI2NTM1Li4xMGRlMWYwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9wb3dlcnBjL3Bvd2VycGMzMi9lNjUwMC9mcHUvZV9zcXJ0Zi5jCisrKysgYi9zeXNkZXBzL3Bvd2VycGMvcG93ZXJwYzMyL2U2NTAwL2ZwdS9lX3NxcnRmLmMKK0BAIC0zOSwxMCArMzksMTAgQEAgc3RhdGljIGNvbnN0IGZsb2F0IHRocmVlaGFsZiA9IDEuNTsKKyAKKyAjaWZkZWYgX19TVERDX18KKyBmbG9hdAorLV9faWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKytfX3Nsb3dfaWVlZTc1NF9zcXJ0ZiAoZmxvYXQgYikKKyAjZWxzZQorIGZsb2F0CistX19pZWVlNzU0X3NxcnRmIChiKQorK19fc2xvd19pZWVlNzU0X3NxcnRmIChiKQorICAgICAgZmxvYXQgYjsKKyAjZW5kaWYKKyB7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2Nzc5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDEyLU1ha2UtbGQtdmVyc2lvbi1vdXRwdXQtbWF0Y2hpbmctZ3Jvay1nb2xkLXMtb3V0cHV0LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gNDk0NzFhYjFmOTBlMzkyZGE5NTIwZWVhODMxY2U4NzMxYmU5ZmM4YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI1OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMjddIE1ha2UgbGQgLS12ZXJzaW9uIG91dHB1dCBtYXRjaGluZyBncm9rIGdvbGQncyBvdXRwdXQKKworYWRhcHRlZCBmcm9tIGZyb20gdXBzdHJlYW0gYnJhbmNoIHJvbGFuZC9nb2xkLXZzLWxpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlICAgIHwgMiArLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggNDVjYzdjYi4uN2Q3Mjk5YSAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNDcwOSw3ICs0NzA5LDcgQEAgZWxzZQorICAgIyBGb3VuZCBpdCwgbm93IGNoZWNrIHRoZSB2ZXJzaW9uLgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB2ZXJzaW9uIG9mICRMRCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgdmVyc2lvbiBvZiAkTEQuLi4gIiA+JjY7IH0KKy0gIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBsZC4qIFwoWzAtOV1bMC05XSpcLlswLTkuXSpcKS4qJC9cMS9wJ2AKKysgIGFjX3Byb2dfdmVyc2lvbj1gJExEIC0tdmVyc2lvbiAyPiYxIHwgc2VkIC1uICdzL14uKkdOVSBbQmJpbnV0aWxzZF1bXi5dKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCkuKiQvXDEvcCdgCisgICBjYXNlICRhY19wcm9nX3ZlcnNpb24gaW4KKyAgICAgJycpIGFjX3Byb2dfdmVyc2lvbj0idi4gPy4/PywgYmFkIjsgYWNfdmVyY19mYWlsPXllczs7CisgICAgIDIuMVswLTldWzAtOV0qfDIuMlsyLTldKnwyLlszLTldWzAtOV0qfFszLTldLip8WzEtOV1bMC05XSopCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3ZTkzODNhLi5hNDY3YTY5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05NDEsNyArOTQxLDcgQEAgQUNfQ0hFQ0tfUFJPR19WRVIoQVMsICRBUywgLS12ZXJzaW9uLAorIAkJICBbMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKl0sCisgCQkgIEFTPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBhcyIpCisgQUNfQ0hFQ0tfUFJPR19WRVIoTEQsICRMRCwgLS12ZXJzaW9uLAorLQkJICBbR05VIGxkLiogXChbMC05XVswLTldKlwuWzAtOS5dKlwpXSwKKysJCSAgW0dOVSBbQmJpbnV0aWxzZF1bXi5dKiBcKFswLTldWzAtOV0qXC5bMC05Ll0qXCldLAorIAkJICBbMi4xWzAtOV1bMC05XSp8Mi4yWzItOV0qfDIuWzMtOV1bMC05XSp8WzMtOV0uKnxbMS05XVswLTldKl0sCisgCQkgIExEPTogY3JpdGljX21pc3Npbmc9IiRjcml0aWNfbWlzc2luZyBsZCIpCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTMtc3lzZGVwcy1nbnUtY29uZmlndXJlLmFjLWhhbmRsZS1jb3JyZWN0bHktbGliY19jdl9yby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWZkYTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYjU1ZTQ5YjE5OWM0NmEyNzhhYjY2YjZiMWUzZWFiNDgzYjkxMzE5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI3OjEwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMjddIHN5c2RlcHMvZ251L2NvbmZpZ3VyZS5hYzogaGFuZGxlIGNvcnJlY3RseQorICRsaWJjX2N2X3Jvb3RzYmluZGlyCisKK1Vwc3RyZWFtLVN0YXR1czpQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hdHRoaWV1IENyYXBldCA8TWF0dGhpZXUuQ3JhcGV0QGluZ2VuaWNvLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzeXNkZXBzL2dudS9jb25maWd1cmUgICAgfCAyICstCisgc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nbnUvY29uZmlndXJlIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlCitpbmRleCA5MjM5Mjk3Li5jNWVkM2NhIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nbnUvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL2dudS9jb25maWd1cmUKK0BAIC0zMiw2ICszMiw2IEBAIGNhc2UgIiRwcmVmaXgiIGluCisgICBlbHNlCisgICAgIGxpYmNfY3ZfbG9jYWxzdGF0ZWRpcj0kbG9jYWxzdGF0ZWRpcgorICAgIGZpCistICBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisrICB0ZXN0IC1uICIkbGliY19jdl9yb290c2JpbmRpciIgfHwgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorICAgOzsKKyBlc2FjCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjIGIvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCitpbmRleCA2MzRmZTRkLi4zZGIxNjk3IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9nbnUvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2dudS9jb25maWd1cmUuYWMKK0BAIC0yMSw2ICsyMSw2IEBAIGNhc2UgIiRwcmVmaXgiIGluCisgICBlbHNlCisgICAgIGxpYmNfY3ZfbG9jYWxzdGF0ZWRpcj0kbG9jYWxzdGF0ZWRpcgorICAgIGZpCistICBsaWJjX2N2X3Jvb3RzYmluZGlyPS9zYmluCisrICB0ZXN0IC1uICIkbGliY19jdl9yb290c2JpbmRpciIgfHwgbGliY19jdl9yb290c2JpbmRpcj0vc2JpbgorICAgOzsKKyBlc2FjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTVkMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE0LUFkZC11bnVzZWQtYXR0cmlidXRlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMDIyOWQ2YzljMGU3NzIxNzczMTE4ZDVhZTFkMTcyYzI2OWJjOTgyNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjI4OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMjddIEFkZCB1bnVzZWQgYXR0cmlidXRlCisKK0hlbHBzIGluIGF2b2lkaW5nIGdjYyB3YXJuaW5nIHdoZW4gaGVhZGVyIGlzIGlzIGluY2x1ZGVkIGluCithIHNvdXJjZSBmaWxlIHdoaWNoIGRvZXMgbm90IHVzZSBib3RoIGZ1bmN0aW9ucworCisgICAgICAgICogaWNvbnYvZ2NvbnZfY2hhcnNldC5oIChzdHJpcCk6CisgICAgICAgIEFkZCB1bnVzZWQgYXR0cmlidXRlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGljb252L2djb252X2NoYXJzZXQuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2ljb252L2djb252X2NoYXJzZXQuaCBiL2ljb252L2djb252X2NoYXJzZXQuaAoraW5kZXggODAyOTBiYy4uNzg5MGE4ZSAxMDA2NDQKKy0tLSBhL2ljb252L2djb252X2NoYXJzZXQuaAorKysrIGIvaWNvbnYvZ2NvbnZfY2hhcnNldC5oCitAQCAtMjEsNyArMjEsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAKKyAKKy1zdGF0aWMgdm9pZAorK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIHN0cmlwIChjaGFyICp3cCwgY29uc3QgY2hhciAqcykKKyB7CisgICBpbnQgc2xhc2hfY291bnQgPSAwOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE1LVdoZW4tZGlzYWJsaW5nLVNTRS1hbHNvLW1ha2Utc3VyZS10aGF0LWZwbWF0aC1pcy1ub3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyNjFjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTUtV2hlbi1kaXNhYmxpbmctU1NFLWFsc28tbWFrZS1zdXJlLXRoYXQtZnBtYXRoLWlzLW5vdC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGYwNThjODg0ZGQyNmQxMGM5NDU1MGNhNTI1MmVkNjU3NjYxNGQ2NTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAwMzoyMzo0NSArMDAwMAorU3ViamVjdDogW1BBVENIIDE1LzI3XSBXaGVuIGRpc2FibGluZyBTU0UgYWxzbyBtYWtlIHN1cmUgdGhhdCBmcG1hdGggaXMgbm90Cisgc2V0IHRvIHVzZSBTU0UgYXMgd2VsbAorCitUaGlzIGZpeGVzIGVycm9ycyB3aGVuIHdlIGluamVjdCBzc2Ugb3B0aW9ucyB0aHJvdWdoIENGTEFHUyBhbmQgbm93Cit0aGF0IHdlIGhhdmUgLVdlcnJvciB0dXJuZWQgb24gYnkgZGVmYXVsdCB0aGlzIHdhcm5pbmcgdHVybnMgdG8gYmVjb21lCitlcnJvciBvbiB4ODYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzeXNkZXBzL3g4Ni9NYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMveDg2L01ha2VmaWxlIGIvc3lzZGVwcy94ODYvTWFrZWZpbGUKK2luZGV4IDE5ZjVlY2EuLjgyN2VhNzEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3g4Ni9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy94ODYvTWFrZWZpbGUKK0BAIC0xLDYgKzEsNiBAQAorIGlmZXEgKCQoc3ViZGlyKSxlbGYpCisgQ0ZMQUdTLS5vcyArPSAkKGlmICQoZmlsdGVyICQoQEYpLCQocGF0c3Vic3QgJSwlLm9zLCQoYWxsLXJ0bGQtcm91dGluZXMpKSksXAorLQkJICAgLW1uby1zc2UgLW1uby1tbXgpCisrCQkgICAtbW5vLXNzZSAtbW5vLW1teCAtbWZwbWF0aD0zODcpCisgCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtbGQtc3NlLXVzZS5vdXQKKyAkKG9ianBmeCl0c3QtbGQtc3NlLXVzZS5vdXQ6IC4uL3N5c2RlcHMveDg2L3RzdC1sZC1zc2UtdXNlLnNoICQob2JqcGZ4KWxkLnNvCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OWU4YjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE2LXllcy13aXRoaW4tdGhlLXBhdGgtc2V0cy13cm9uZy1jb25maWctdmFyaWFibGVzLnBhdGNoCkBAIC0wLDAgKzEsMjYzIEBACitGcm9tIDcwMTk5ZmU1OWMzOGI2MjFhYjQxMjFkN2E1NTcxOWIyYjI5YjM2ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMTowNiArMDAwMAorU3ViamVjdDogW1BBVENIIDE2LzI3XSAneWVzJyB3aXRoaW4gdGhlIHBhdGggc2V0cyB3cm9uZyBjb25maWcgdmFyaWFibGVzCisKK0l0IHNlZW1zIHRoYXQgdGhlICdBQ19FR1JFUF9DUFAoeWVzLi4uJyBleGFtcGxlIGlzIHF1aXRlIHBvcHVsYXIKK2J1dCBiZWluZyBzdWNoIGEgc2hvcnQgd29yZCB0byBncmVwIGl0IGlzIGxpa2VseSB0byBwcm9kdWNlCitmYWxzZS1wb3NpdGl2ZSBtYXRjaGVzIHdpdGggdGhlIHBhdGggaXQgaXMgY29uZmlndXJlZCBpbnRvLgorCitUaGUgY2hhbmdlIGlzIHRvIHVzZSBhIG1vcmUgZWxhYm9yYXRlZCBzdHJpbmcgdG8gZ3JlcCBmb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtsaWJjLWFscGhhQHNvdXJjZXdhcmUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBCZW5qYW1pbiBFc3F1aXZlbCA8YmVuamFtaW4uZXNxdWl2ZWxAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbWlwcy9jb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbmlvczIvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlICAgICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjICAgICAgICAgICAgICB8IDQgKystLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZSAgICB8IDggKysrKy0tLS0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMgfCA4ICsrKystLS0tCisgMTIgZmlsZXMgY2hhbmdlZCwgMjggaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlIGIvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZQoraW5kZXggNWJkMzU1YS4uM2JjNTUzNyAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUKK0BAIC0xNDgsMTIgKzE0OCwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX0FBUkNINjRFQl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX2FhcmNoNjRfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzCisgZWxzZQorICAgbGliY19jdl9hYXJjaDY0X2JlPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9hYXJjaDY0L2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvYWFyY2g2NC9jb25maWd1cmUuYWMKK2luZGV4IDc4NTFkZDQuLjZlOTIzODEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL2FhcmNoNjQvY29uZmlndXJlLmFjCitAQCAtMTAsOCArMTAsOCBAQCBHTElCQ19QUk9WSURFUyBkbmwgU2VlIGFjbG9jYWwubTQgaW4gdGhlIHRvcCBsZXZlbCBzb3VyY2UgZGlyZWN0b3J5LgorICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCisgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBiaWcgZW5kaWFuXSwKKyAgIFtsaWJjX2N2X2FhcmNoNjRfYmVdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FBUkNINjRFQl9fCistICAgICAgICAgICAgICAgICAgICAgIHllcworKyAgW0FDX0VHUkVQX0NQUChpc19hYXJjaDY0X2JlLFsjaWZkZWYgX19BQVJDSDY0RUJfXworKyAgICAgICAgICAgICAgICAgICAgICBpc19hYXJjaDY0X2JlCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICBdLCBsaWJjX2N2X2FhcmNoNjRfYmU9eWVzLCBsaWJjX2N2X2FhcmNoNjRfYmU9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X2FhcmNoNjRfYmUgPSB5ZXM7IHRoZW4KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUgYi9zeXNkZXBzL2FybS9jb25maWd1cmUKK2luZGV4IDE1ODExNmIuLjVlYWY1NGUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUKKysrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZQorQEAgLTE1MSwxMiArMTUxLDEyIEBAIGVsc2UKKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2lmZGVmIF9fQVJNX1BDU19WRlAKKy0JCSAgICAgIHllcworKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCisgCQkgICAgICNlbmRpZgorIAorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfYXJtX3Bjc192ZnAiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X2FybV9wY3NfdmZwPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMgYi9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKK2luZGV4IDg1OWM5MmEuLjJmNGE2ZTIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvYXJtL2NvbmZpZ3VyZS5hYworQEAgLTE1LDggKzE1LDggQEAgQUNfREVGSU5FKFBJX1NUQVRJQ19BTkRfSElEREVOKQorICMgdGhlIGR5bmFtaWMgbGlua2VyIHZpYSAlaWZkZWYuCisgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIGNvbXBpbGVyIGlzIHVzaW5nIHRoZSBBUk0gaGFyZC1mbG9hdCBBQkldLAorICAgW2xpYmNfY3ZfYXJtX3Bjc192ZnBdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX0FSTV9QQ1NfVkZQCistCQkgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAodXNlX2FybV9wY3NfdmZwLFsjaWZkZWYgX19BUk1fUENTX1ZGUAorKwkJICAgICAgdXNlX2FybV9wY3NfdmZwCisgCQkgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9hcm1fcGNzX3ZmcD15ZXMsIGxpYmNfY3ZfYXJtX3Bjc192ZnA9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X2FybV9wY3NfdmZwID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZSBiL3N5c2RlcHMvbWlwcy9jb25maWd1cmUKK2luZGV4IDRlMTMyNDguLmYxNGFmOTUgMTAwNjQ0CistLS0gYS9zeXNkZXBzL21pcHMvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlCitAQCAtMTQzLDExICsxNDMsMTEgQEAgZWxzZQorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyBkbmwKKyAjaWZkZWYgX19taXBzX25hbjIwMDgKKy15ZXMKKyt1c2VfbWlwc19uYW4yMDA4CisgI2VuZGlmCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9taXBzX25hbjIwMDgiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMKKyBlbHNlCisgICBsaWJjX2N2X21pcHNfbmFuMjAwOD1ubworZGlmZiAtLWdpdCBhL3N5c2RlcHMvbWlwcy9jb25maWd1cmUuYWMgYi9zeXNkZXBzL21pcHMvY29uZmlndXJlLmFjCitpbmRleCBiY2JkYWZmLi5hZDMwNTdmIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworKysrIGIvc3lzZGVwcy9taXBzL2NvbmZpZ3VyZS5hYworQEAgLTYsOSArNiw5IEBAIGRubCBwb3NpdGlvbiBpbmRlcGVuZGVudCB3YXkuCisgZG5sIEFDX0RFRklORShQSV9TVEFUSUNfQU5EX0hJRERFTikKKyAKKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIDIwMDggTmFOIGVuY29kaW5nXSwKKy0gIGxpYmNfY3ZfbWlwc19uYW4yMDA4LCBbQUNfRUdSRVBfQ1BQKHllcywgW2RubAorKyAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAodXNlX21pcHNfbmFuMjAwOCwgW2RubAorICNpZmRlZiBfX21pcHNfbmFuMjAwOAorLXllcworK3VzZV9taXBzX25hbjIwMDgKKyAjZW5kaWZdLCBsaWJjX2N2X21pcHNfbmFuMjAwOD15ZXMsIGxpYmNfY3ZfbWlwc19uYW4yMDA4PW5vKV0pCisgaWYgdGVzdCB4JGxpYmNfY3ZfbWlwc19uYW4yMDA4ID0geHllczsgdGhlbgorICAgQUNfREVGSU5FKEhBVkVfTUlQU19OQU4yMDA4KQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvbmlvczIvY29uZmlndXJlIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKK2luZGV4IDE0YzhhM2EuLmRkZTM4MTQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUKK0BAIC0xNDIsMTIgKzE0MiwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgICAgICAgICAgICAgICAgICAgaXNfbmlvczJfYmUKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAKKyBfQUNFT0YKKyBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CistICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKysgICRFR1JFUCAiaXNfbmlvczJfYmUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICBsaWJjX2N2X25pb3MyX2JlPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfbmlvczJfYmU9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL25pb3MyL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCitpbmRleCBmMDVmNDM4Li5kYzg2Mzk5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9uaW9zMi9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvbmlvczIvY29uZmlndXJlLmFjCitAQCAtNCw4ICs0LDggQEAgR0xJQkNfUFJPVklERVMgZG5sIFNlZSBhY2xvY2FsLm00IGluIHRoZSB0b3AgbGV2ZWwgc291cmNlIGRpcmVjdG9yeS4KKyAjIE5pb3MgSUkgYmlnIGVuZGlhbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4KKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGJpZyBlbmRpYW5dLAorICAgW2xpYmNfY3ZfbmlvczJfYmVdLAorLSAgW0FDX0VHUkVQX0NQUCh5ZXMsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworLSAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgIFtBQ19FR1JFUF9DUFAoaXNfbmlvczJfYmUsWyNpZmRlZiBfX25pb3MyX2JpZ19lbmRpYW5fXworKyAgICAgICAgICAgICAgICAgICAgICBpc19uaW9zMl9iZQorICAgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgXSwgbGliY19jdl9uaW9zMl9iZT15ZXMsIGxpYmNfY3ZfbmlvczJfYmU9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X25pb3MyX2JlID0geWVzOyB0aGVuCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQoraW5kZXggODNmOGIxMy4uMmI2Y2JlZSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZQorQEAgLTM4NywxMSArMzg3LDExIEBAIGVsc2UKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZgorIF9BQ0VPRgorIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKy0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorKyAgJEVHUkVQICJ1c2VfbWlwc19uYW4yMDA4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9taXBzX25hbjIwMDg9eWVzCisgZWxzZQorICAgbGliY19jdl9taXBzX25hbjIwMDg9bm8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9taXBzL2NvbmZpZ3VyZS5hYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCitpbmRleCA1MDM5ZWM5Li4xMDM1Zjc2IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvbWlwcy9jb25maWd1cmUuYWMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L21pcHMvY29uZmlndXJlLmFjCitAQCAtOTgsOSArOTgsOSBAQCBBQ19DT01QSUxFX0lGRUxTRSgKKyBMSUJDX0NPTkZJR19WQVIoW21pcHMtbW9kZS1zd2l0Y2hdLFske2xpYmNfbWlwc19tb2RlX3N3aXRjaH1dKQorIAorIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBjb21waWxlciBpcyB1c2luZyB0aGUgMjAwOCBOYU4gZW5jb2RpbmddLAorLSAgbGliY19jdl9taXBzX25hbjIwMDgsIFtBQ19FR1JFUF9DUFAoeWVzLCBbZG5sCisrICBsaWJjX2N2X21pcHNfbmFuMjAwOCwgW0FDX0VHUkVQX0NQUCh1c2VfbWlwc19uYW4yMDA4LCBbZG5sCisgI2lmZGVmIF9fbWlwc19uYW4yMDA4CisteWVzCisrdXNlX21pcHNfbmFuMjAwOAorICNlbmRpZl0sIGxpYmNfY3ZfbWlwc19uYW4yMDA4PXllcywgbGliY19jdl9taXBzX25hbjIwMDg9bm8pXSkKKyAKKyBsaWJjX21pcHNfbmFuPQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZSBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZQoraW5kZXggNzBiYjE4YS4uZmZkOWUzZSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvcG93ZXJwYzY0L2NvbmZpZ3VyZQorKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlCitAQCAtMTU1LDEyICsxNTUsMTIgQEAgZWxzZQorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAjaWYgX0NBTExfRUxGID09IDIKKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgIHVzZV9wcGNfZWxmdjJfYWJpCisgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgInVzZV9wcGNfZWxmdjJfYWJpIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICAgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9eWVzCisgZWxzZQorICAgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9bm8KK0BAIC0xODgsMTIgKzE4OCwxMiBAQCBlbHNlCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpZmRlZiBfQ0FMTF9FTEYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgeWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgIGlzX2RlZl9jYWxsX2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgCisgX0FDRU9GCisgaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisrICAkRUdSRVAgImlzX2RlZl9jYWxsX2VsZiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPXllcworIGVsc2UKKyAgIGxpYmNfY3ZfcHBjNjRfZGVmX2NhbGxfZWxmPW5vCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjCitpbmRleCAwODIyOTE1Li45YTMyZmRkIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9wb3dlcnBjNjQvY29uZmlndXJlLmFjCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL3Bvd2VycGM2NC9jb25maWd1cmUuYWMKK0BAIC02LDggKzYsOCBAQCBMSUJDX1NMSUJESVJfUlRMRERJUihbbGliNjRdLCBbbGliNjRdKQorICMgRGVmaW5lIGRlZmF1bHQtYWJpIGFjY29yZGluZyB0byBjb21waWxlciBmbGFncy4KKyBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgaXMgdXNpbmcgdGhlIFBvd2VyUEM2NCBFTEZ2MiBBQkldLAorICAgW2xpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpXSwKKy0gIFtBQ19FR1JFUF9DUFAoeWVzLFsjaWYgX0NBTExfRUxGID09IDIKKy0gICAgICAgICAgICAgICAgICAgICAgeWVzCisrICBbQUNfRUdSRVBfQ1BQKHVzZV9wcGNfZWxmdjJfYWJpLFsjaWYgX0NBTExfRUxGID09IDIKKysgICAgICAgICAgICAgICAgICAgICAgdXNlX3BwY19lbGZ2Ml9hYmkKKyAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgIF0sIGxpYmNfY3ZfcHBjNjRfZWxmdjJfYWJpPXllcywgbGliY19jdl9wcGM2NF9lbGZ2Ml9hYmk9bm8pXSkKKyBpZiB0ZXN0ICRsaWJjX2N2X3BwYzY0X2VsZnYyX2FiaSA9IHllczsgdGhlbgorQEAgLTE5LDggKzE5LDggQEAgZWxzZQorICAgIyBDb21waWxlciB0aGF0IGRvIG5vdCBzdXBwb3J0IEVMRnYyIEFCSSBkb2VzIG5vdCBkZWZpbmUgX0NBTExfRUxGCisgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgY29tcGlsZXIgZGVmaW5lcyBfQ0FMTF9FTEZdLAorICAgICBbbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGZdLAorLSAgICBbQUNfRUdSRVBfQ1BQKHllcyxbI2lmZGVmIF9DQUxMX0VMRgorLSAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMKKysgICAgW0FDX0VHUkVQX0NQUChpc19kZWZfY2FsbF9lbGYsWyNpZmRlZiBfQ0FMTF9FTEYKKysgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVmX2NhbGxfZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgXSwgbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGY9eWVzLCBsaWJjX2N2X3BwYzY0X2RlZl9jYWxsX2VsZj1ubyldKQorICAgaWYgdGVzdCAkbGliY19jdl9wcGM2NF9kZWZfY2FsbF9lbGYgPSBubzsgdGhlbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE3LXRpbWV6b25lLXJlLXdyaXR0ZW4tdHpzZWxlY3QtYXMtcG9zaXgtc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlODIzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTctdGltZXpvbmUtcmUtd3JpdHRlbi10enNlbGVjdC1hcy1wb3NpeC1zaC5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGM5MDMwNjEwN2ZiYmUyOTc5MDEyOTE3ZTg3NzQ3Y2U3OGM4MmFiODggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDozMzowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDE3LzI3XSB0aW1lem9uZTogcmUtd3JpdHRlbiB0enNlbGVjdCBhcyBwb3NpeCBzaAorCitUbyBhdm9pZCB0aGUgYmFzaCBkZXBlbmRlbmN5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHRpbWV6b25lL01ha2VmaWxlICAgICB8IDIgKy0KKyB0aW1lem9uZS90enNlbGVjdC5rc2ggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90aW1lem9uZS9NYWtlZmlsZSBiL3RpbWV6b25lL01ha2VmaWxlCitpbmRleCAyNGM5M2M2Li44ODZiMDZlIDEwMDY0NAorLS0tIGEvdGltZXpvbmUvTWFrZWZpbGUKKysrKyBiL3RpbWV6b25lL01ha2VmaWxlCitAQCAtMTI2LDcgKzEyNiw3IEBAICQodGVzdGRhdGEpL1hUJTogdGVzdGRhdGEvWFQlCisgCWNwICQ8ICRACisgCisgJChvYmpwZngpdHpzZWxlY3Q6IHR6c2VsZWN0LmtzaCAkKGNvbW1vbi1vYmpwZngpY29uZmlnLm1ha2UKKy0Jc2VkIC1lICdzfC9iaW4vYmFzaHwkKEJBU0gpfCcgXAorKwlzZWQgLWUgJ3N8L2Jpbi9iYXNofC9iaW4vc2h8JyBcCisgCSAgICAtZSAnc3xUWkRJUj1bXn1dKnxUWkRJUj0kKHpvbmVkaXIpfCcgXAorIAkgICAgLWUgJy9UWlZFUlNJT049L3N8c2VlX01ha2VmaWxlfCIkKHZlcnNpb24pInwnIFwKKyAJICAgIC1lICcvUEtHVkVSU0lPTj0vc3w9Lip8PSIkKFBLR1ZFUlNJT04pInwnIFwKK2RpZmYgLS1naXQgYS90aW1lem9uZS90enNlbGVjdC5rc2ggYi90aW1lem9uZS90enNlbGVjdC5rc2gKK2luZGV4IDlkNzA2OTEuLjI1ZjQ1YTggMTAwNzU1CistLS0gYS90aW1lem9uZS90enNlbGVjdC5rc2gKKysrKyBiL3RpbWV6b25lL3R6c2VsZWN0LmtzaAorQEAgLTM1LDcgKzM1LDcgQEAgUkVQT1JUX0JVR1NfVE89dHpAaWFuYS5vcmcKKyAKKyAjIFNwZWNpZnkgZGVmYXVsdCB2YWx1ZXMgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZiB0aGV5IGFyZSB1bnNldC4KKyA6ICR7QVdLPWF3a30KKy06ICR7VFpESVI9YHB3ZGB9CisrOiAke1RaRElSPSQocHdkKX0KKyAKKyAjIENoZWNrIGZvciBhd2sgUG9zaXggY29tcGxpYW5jZS4KKyAoJEFXSyAtdiB4PXkgJ0JFR0lOIHsgZXhpdCAxMjMgfScpIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWFjYmMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAxOC1lZ2xpYmMtQ3Jvc3MtYnVpbGRpbmctYW5kLXRlc3RpbmctaW5zdHJ1Y3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsNjE5IEBACitGcm9tIGVmZjA0ODA3NGFjN2I1MjU4YmI2MTVlNWE1YjIyMWRhYTE5YjE4YWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0Mjo1OCArMDAwMAorU3ViamVjdDogW1BBVENIIDE4LzI3XSBlZ2xpYmM6IENyb3NzIGJ1aWxkaW5nIGFuZCB0ZXN0aW5nIGluc3RydWN0aW9ucworCitQb3J0ZWQgZnJvbSBlZ2xpYmMKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgR0xJQkMuY3Jvc3MtYnVpbGRpbmcgfCAzODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgR0xJQkMuY3Jvc3MtdGVzdGluZyAgfCAyMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBHTElCQy5jcm9zcy1idWlsZGluZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBHTElCQy5jcm9zcy10ZXN0aW5nCisKK2RpZmYgLS1naXQgYS9HTElCQy5jcm9zcy1idWlsZGluZyBiL0dMSUJDLmNyb3NzLWJ1aWxkaW5nCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZTZlMGRhMQorLS0tIC9kZXYvbnVsbAorKysrIGIvR0xJQkMuY3Jvc3MtYnVpbGRpbmcKK0BAIC0wLDAgKzEsMzgzIEBACisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gbW9kZTogdGV4dCAtKi0KKysKKysgICAgICAgICAgICAgICAgICAgICAgICBDcm9zcy1Db21waWxpbmcgR0xJQkMKKysgICAgICAgICAgICAgICAgICBKaW0gQmxhbmR5IDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisrCisrCisrSW50cm9kdWN0aW9uCisrCisrTW9zdCBHTlUgdG9vbHMgaGF2ZSBhIHNpbXBsZSBidWlsZCBwcm9jZWR1cmU6IHlvdSBydW4gdGhlaXIKKysnY29uZmlndXJlJyBzY3JpcHQsIGFuZCB0aGVuIHlvdSBydW4gJ21ha2UnLiAgVW5mb3J0dW5hdGVseSwgdGhlCisrcHJvY2VzcyBvZiBjcm9zcy1jb21waWxpbmcgdGhlIEdOVSBDIGxpYnJhcnkgaXMgcXVpdGUgYSBiaXQgbW9yZQorK2ludm9sdmVkOgorKworKzEpIEJ1aWxkIGEgY3Jvc3MtY29tcGlsZXIsIHdpdGggY2VydGFpbiBmYWNpbGl0aWVzIGRpc2FibGVkLgorKworKzIpIENvbmZpZ3VyZSB0aGUgQyBsaWJyYXJ5IHVzaW5nIHRoZSBjb21waWxlciB5b3UgYnVpbHQgaW4gc3RlcCAxKS4KKysgICBCdWlsZCBhIGZldyBvZiB0aGUgQyBydW4tdGltZSBvYmplY3QgZmlsZXMsIGJ1dCBub3QgdGhlIHJlc3Qgb2YgdGhlCisrICAgbGlicmFyeS4gIEluc3RhbGwgdGhlIGxpYnJhcnkncyBoZWFkZXIgZmlsZXMgYW5kIHRoZSBydW4tdGltZQorKyAgIG9iamVjdCBmaWxlcywgYW5kIGNyZWF0ZSBhIGR1bW15IGxpYmMuc28uCisrCisrMykgQnVpbGQgYSBzZWNvbmQgY3Jvc3MtY29tcGlsZXIsIHVzaW5nIHRoZSBoZWFkZXIgZmlsZXMgYW5kIG9iamVjdAorKyAgIGZpbGVzIHlvdSBpbnN0YWxsZWQgaW4gc3RlcCAyLgorKworKzQpIENvbmZpZ3VyZSwgYnVpbGQsIGFuZCBpbnN0YWxsIGEgZnJlc2ggQyBsaWJyYXJ5LCB1c2luZyB0aGUgY29tcGlsZXIKKysgICBidWlsdCBpbiBzdGVwIDMuCisrCisrNSkgQnVpbGQgYSB0aGlyZCBjcm9zcy1jb21waWxlciwgYmFzZWQgb24gdGhlIEMgbGlicmFyeSBidWlsdCBpbiBzdGVwIDQuCisrCisrVGhlIHJlYXNvbiBmb3IgdGhpcyBjb21wbGV4aXR5IGlzIHRoYXQsIGFsdGhvdWdoIEdDQyBhbmQgdGhlIEdOVSBDCisrbGlicmFyeSBhcmUgZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSwgdGhleSBhcmUgbm90IGFjdHVhbGx5IGluZGVwZW5kZW50Cisrb2YgZWFjaCBvdGhlcjogR0NDIHJlcXVpcmVzIHRoZSBDIGxpYnJhcnkncyBoZWFkZXJzIGFuZCBzb21lIG9iamVjdAorK2ZpbGVzIHRvIGNvbXBpbGUgaXRzIG93biBsaWJyYXJpZXMsIHdoaWxlIHRoZSBDIGxpYnJhcnkgZGVwZW5kcyBvbgorK0dDQydzIGxpYnJhcmllcy4gIEdMSUJDIGluY2x1ZGVzIGZlYXR1cmVzIGFuZCBidWcgZml4ZXMgdG8gdGhlIHN0b2NrCisrR05VIEMgbGlicmFyeSB0aGF0IHNpbXBsaWZ5IHRoaXMgcHJvY2VzcywgYnV0IHRoZSBmdW5kYW1lbnRhbAorK2ludGVyZGVwZW5kZW5jeSBzdGFuZHMuCisrCisrSW4gdGhpcyBkb2N1bWVudCwgd2UgZXhwbGFpbiBob3cgdG8gY3Jvc3MtY29tcGlsZSBhbiBHTElCQy9HQ0MgcGFpcgorK2Zyb20gc291cmNlLiAgT3VyIGludGVuZGVkIGF1ZGllbmNlIGlzIGRldmVsb3BlcnMgd2hvIGFyZSBhbHJlYWR5CisrZmFtaWxpYXIgd2l0aCB0aGUgR05VIHRvb2xjaGFpbiBhbmQgY29tZm9ydGFibGUgd29ya2luZyB3aXRoCisrY3Jvc3MtZGV2ZWxvcG1lbnQgdG9vbHMuICBXaGlsZSB3ZSBkbyBwcmVzZW50IGEgd29ya2VkIGV4YW1wbGUgdG8KKythY2NvbXBhbnkgdGhlIGV4cGxhbmF0aW9uLCBmb3IgY2xhcml0eSdzIHNha2Ugd2UgZG8gbm90IGNvdmVyIG1hbnkgb2YKKyt0aGUgb3B0aW9ucyBhdmFpbGFibGUgdG8gY3Jvc3MtdG9vbGNoYWluIHVzZXJzLgorKworKworK1ByZXBhcmF0aW9uCisrCisrR0xJQkMgcmVxdWlyZXMgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBHTlUgYmludXRpbHMsIEdDQywgYW5kIHRoZQorK0xpbnV4IGtlcm5lbC4gIFRoZSB3ZWIgcGFnZSA8aHR0cDovL3d3dy5lZ2xpYmMub3JnL3ByZXJlcXVpc2l0ZXM+CisrZG9jdW1lbnRzIHRoZSBjdXJyZW50IHJlcXVpcmVtZW50cywgYW5kIGxpc3RzIHBhdGNoZXMgbmVlZGVkIGZvcgorK2NlcnRhaW4gdGFyZ2V0IGFyY2hpdGVjdHVyZXMuICBBcyBvZiB0aGlzIHdyaXRpbmcsIHRoZXNlIGJ1aWxkCisraW5zdHJ1Y3Rpb25zIGhhdmUgYmVlbiB0ZXN0ZWQgd2l0aCBiaW51dGlscyAyLjIyLjUxLCBHQ0MgNC42LjIsCisrYW5kIExpbnV4IDMuMS4KKysKKytGaXJzdCwgbGV0J3Mgc2V0IHNvbWUgdmFyaWFibGVzLCB0byBzaW1wbGlmeSBsYXRlciBjb21tYW5kcy4gIFdlJ2xsCisrYnVpbGQgR0xJQkMgYW5kIEdDQyBmb3IgYW4gQVJNIHRhcmdldCwga25vd24gdG8gdGhlIExpbnV4IGtlcm5lbAorK2FzICdhcm0nLCBhbmQgd2UnbGwgZG8gdGhlIGJ1aWxkIG9uIGFuIEludGVsIHg4Nl82NCBMaW51eCBib3g6CisrCisrICAgICQgYnVpbGQ9eDg2XzY0LXBjLWxpbnV4LWdudQorKyAgICAkIGhvc3Q9JGJ1aWxkCisrICAgICQgdGFyZ2V0PWFybS1ub25lLWxpbnV4LWdudWVhYmkKKysgICAgJCBsaW51eF9hcmNoPWFybQorKworK1dlJ3JlIHVzaW5nIHRoZSBhZm9yZW1lbnRpb25lZCB2ZXJzaW9ucyBvZiBCaW51dGlscywgR0NDLCBhbmQgTGludXg6CisrCisrICAgICQgYmludXRpbHN2PWJpbnV0aWxzLTIuMjIuNTEKKysgICAgJCBnY2N2PWdjYy00LjYuMgorKyAgICAkIGxpbnV4dj1saW51eC0zLjEKKysKKytXZSdyZSBjYXJyeWluZyBvdXQgdGhlIGVudGlyZSBwcm9jZXNzIHVuZGVyICd+L2Nyb3NzLWJ1aWxkJywgd2hpY2gKKytjb250YWlucyB1bnBhY2tlZCBzb3VyY2UgdHJlZXMgZm9yIGJpbnV0aWxzLCBnY2MsIGFuZCBsaW51eCBrZXJuZWwsCisrYWxvbmcgd2l0aCBHTElCQyBzdm4gdHJ1bmsgKHdoaWNoIGNhbiBiZSBjaGVja2VkLW91dCB3aXRoCisrJ3N2biBjbyBodHRwOi8vd3d3LmVnbGliYy5vcmcvc3ZuL3RydW5rIGVnbGliYycpOgorKworKyAgICAkIHRvcD0kSE9NRS9jcm9zcy1idWlsZC8kdGFyZ2V0CisrICAgICQgc3JjPSRIT01FL2Nyb3NzLWJ1aWxkL3NyYworKyAgICAkIGxzICRzcmMKKysgICAgYmludXRpbHMtMi4yMi41MSAgZ2xpYmMgIGdjYy00LjYuMiAgbGludXgtMy4xCisrCisrV2UncmUgZ29pbmcgdG8gcGxhY2Ugb3VyIGJ1aWxkIGRpcmVjdG9yaWVzIGluIGEgc3ViZGlyZWN0b3J5ICdvYmonLAorK3dlJ2xsIGluc3RhbGwgdGhlIGNyb3NzLWRldmVsb3BtZW50IHRvb2xjaGFpbiBpbiAndG9vbHMnLCBhbmQgd2UnbGwKKytwbGFjZSBvdXIgc3lzcm9vdCAoY29udGFpbmluZyBmaWxlcyB0byBiZSBpbnN0YWxsZWQgb24gdGhlIHRhcmdldAorK3N5c3RlbSkgaW4gJ3N5c3Jvb3QnOgorKworKyAgICAkIG9iaj0kdG9wL29iagorKyAgICAkIHRvb2xzPSR0b3AvdG9vbHMKKysgICAgJCBzeXNyb290PSR0b3Avc3lzcm9vdAorKworKworK0JpbnV0aWxzCisrCisrQ29uZmlndXJpbmcgYW5kIGJ1aWxkaW5nIGJpbnV0aWxzIGZvciB0aGUgdGFyZ2V0IGlzIHN0cmFpZ2h0Zm9yd2FyZDoKKysKKysgICAgJCBta2RpciAtcCAkb2JqL2JpbnV0aWxzCisrICAgICQgY2QgJG9iai9iaW51dGlscworKyAgICAkICRzcmMvJGJpbnV0aWxzdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QKKysgICAgJCBtYWtlCisrICAgICQgbWFrZSBpbnN0YWxsCisrCisrCisrVGhlIEZpcnN0IEdDQworKworK0ZvciBvdXIgd29yaywgd2UgbmVlZCBhIGNyb3NzLWNvbXBpbGVyIHRhcmdldGluZyBhbiBBUk0gTGludXgKKytzeXN0ZW0uICBIb3dldmVyLCB0aGF0IGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgdGhlIHNoYXJlZCBsaWJyYXJ5CisrJ2xpYmdjY19zLnNvJywgd2hpY2ggaXMgY29tcGlsZWQgYWdhaW5zdCB0aGUgR0xJQkMgaGVhZGVycyAod2hpY2ggd2UKKytoYXZlbid0IGluc3RhbGxlZCB5ZXQpIGFuZCBsaW5rZWQgYWdhaW5zdCAnbGliYy5zbycgKHdoaWNoIHdlIGhhdmVuJ3QKKytidWlsdCB5ZXQpLgorKworK0ZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBHQ0Mgd2hpY2ggdGVsbCBpdCBub3QKKyt0byBidWlsZCAnbGliZ2NjX3Muc28nLiAgVGhlICctLXdpdGhvdXQtaGVhZGVycycgb3B0aW9uIGlzIHN1cHBvc2VkIHRvCisrdGFrZSBjYXJlIG9mIHRoaXMsIGJ1dCBpdHMgaW1wbGVtZW50YXRpb24gaXMgaW5jb21wbGV0ZSwgc28geW91IG11c3QKKythbHNvIGNvbmZpZ3VyZSB3aXRoIHRoZSAnLS13aXRoLW5ld2xpYicgb3B0aW9uLiAgV2hpbGUgJy0td2l0aC1uZXdsaWInCisrYXBwZWFycyB0byBtZWFuICJVc2UgdGhlIE5ld2xpYiBDIGxpYnJhcnkiLCBpdHMgZWZmZWN0IGlzIHRvIHRlbGwgdGhlCisrR0NDIGJ1aWxkIG1hY2hpbmVyeSwgIkRvbid0IGFzc3VtZSB0aGVyZSBpcyBhIEMgbGlicmFyeSBhdmFpbGFibGUuIgorKworK1dlIGFsc28gbmVlZCB0byBkaXNhYmxlIHNvbWUgb2YgdGhlIGxpYnJhcmllcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlCisrYnVpbHQgYWxvbmcgd2l0aCBHQ0MsIGFuZCBzcGVjaWZ5IHRoYXQgb25seSB0aGUgY29tcGlsZXIgZm9yIHRoZSBDCisrbGFuZ3VhZ2UgaXMgbmVlZGVkLgorKworK1NvLCB3ZSBjcmVhdGUgYSBidWlsZCBkaXJlY3RvcnksIGNvbmZpZ3VyZSwgbWFrZSwgYW5kIGluc3RhbGwuCisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nY2MxCisrICAgICQgY2QgJG9iai9nY2MxCisrICAgICQgJHNyYy8kZ2Njdi9jb25maWd1cmUgXAorKyAgICA+ICAgICAtLXRhcmdldD0kdGFyZ2V0IFwKKysgICAgPiAgICAgLS1wcmVmaXg9JHRvb2xzIFwKKysgICAgPiAgICAgLS13aXRob3V0LWhlYWRlcnMgLS13aXRoLW5ld2xpYiBcCisrICAgID4gICAgIC0tZGlzYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXRocmVhZHMgLS1kaXNhYmxlLWxpYnNzcCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJnb21wIC0tZGlzYWJsZS1saWJtdWRmbGFwIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0IC0tZGlzYWJsZS1saWJmZmkgXAorKyAgICA+ICAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAorKworKworK0xpbnV4IEtlcm5lbCBIZWFkZXJzCisrCisrVG8gY29uZmlndXJlIEdMSUJDLCB3ZSBhbHNvIG5lZWQgTGludXgga2VybmVsIGhlYWRlcnMgaW4gcGxhY2UuCisrRm9ydHVuYXRlbHksIHRoZSBMaW51eCBtYWtlZmlsZXMgaGF2ZSBhIHRhcmdldCB0aGF0IGluc3RhbGxzIHRoZW0gZm9yCisrdXMuICBTaW5jZSB0aGUgcHJvY2VzcyBkb2VzIG1vZGlmeSB0aGUgc291cmNlIHRyZWUgYSBiaXQsIHdlIG1ha2UgYQorK2NvcHkgZmlyc3Q6CisrCisrICAgICQgY3AgLXIgJHNyYy8kbGludXh2ICRvYmovbGludXgKKysgICAgJCBjZCAkb2JqL2xpbnV4CisrCisrTm93IHdlJ3JlIHJlYWR5IHRvIGluc3RhbGwgdGhlIGhlYWRlcnMgaW50byB0aGUgc3lzcm9vdDoKKysKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggXAorKyAgICA+IG1ha2UgaGVhZGVyc19pbnN0YWxsIFwKKysgICAgPiAgICAgIEFSQ0g9JGxpbnV4X2FyY2ggQ1JPU1NfQ09NUElMRT0kdGFyZ2V0LSBcCisrICAgID4gICAgICBJTlNUQUxMX0hEUl9QQVRIPSRzeXNyb290L3VzcgorKworKworK0dMSUJDIEhlYWRlcnMgYW5kIFByZWxpbWluYXJ5IE9iamVjdHMKKysKKytVc2luZyB0aGUgY3Jvc3MtY29tcGlsZXIgd2UndmUganVzdCBidWlsdCwgd2UgY2FuIG5vdyBjb25maWd1cmUgR0xJQkMKKyt3ZWxsIGVub3VnaCB0byBpbnN0YWxsIHRoZSBoZWFkZXJzIGFuZCBidWlsZCB0aGUgb2JqZWN0IGZpbGVzIHRoYXQgdGhlCisrZnVsbCBjcm9zcy1jb21waWxlciB3aWxsIG5lZWQ6CisrCisrICAgICQgbWtkaXIgLXAgJG9iai9nbGliYy1oZWFkZXJzCisrICAgICQgY2QgJG9iai9nbGliYy1oZWFkZXJzCisrICAgICQgQlVJTERfQ0M9Z2NjIFwKKysgICAgPiBDQz0kdG9vbHMvYmluLyR0YXJnZXQtZ2NjIFwKKysgICAgPiBDWFg9JHRvb2xzL2Jpbi8kdGFyZ2V0LWcrKyBcCisrICAgID4gQVI9JHRvb2xzL2Jpbi8kdGFyZ2V0LWFyIFwKKysgICAgPiBSQU5MSUI9JHRvb2xzL2Jpbi8kdGFyZ2V0LXJhbmxpYiBcCisrICAgID4gJHNyYy9nbGliYy9saWJjL2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tcHJlZml4PS91c3IgXAorKyAgICA+ICAgICAtLXdpdGgtaGVhZGVycz0kc3lzcm9vdC91c3IvaW5jbHVkZSBcCisrICAgID4gICAgIC0tYnVpbGQ9JGJ1aWxkIFwKKysgICAgPiAgICAgLS1ob3N0PSR0YXJnZXQgXAorKyAgICA+ICAgICAtLWRpc2FibGUtcHJvZmlsZSAtLXdpdGhvdXQtZ2QgLS13aXRob3V0LWN2cyBcCisrICAgID4gICAgIC0tZW5hYmxlLWFkZC1vbnM9bnB0bCxsaWJpZG4sLi4vcG9ydHMKKysKKytUaGUgb3B0aW9uICctLXByZWZpeD0vdXNyJyBtYXkgbG9vayBzdHJhbmdlLCBidXQgeW91IHNob3VsZCBuZXZlcgorK2NvbmZpZ3VyZSBHTElCQyB3aXRoIGEgcHJlZml4IG90aGVyIHRoYW4gJy91c3InOiBpbiB2YXJpb3VzIHBsYWNlcywKKytHTElCQydzIGJ1aWxkIHN5c3RlbSBjaGVja3Mgd2hldGhlciB0aGUgcHJlZml4IGlzICcvdXNyJywgYW5kIGRvZXMKKytzcGVjaWFsIGhhbmRsaW5nIG9ubHkgaWYgdGhhdCBpcyB0aGUgY2FzZS4gIFVubGVzcyB5b3UgdXNlIHRoaXMKKytwcmVmaXgsIHlvdSB3aWxsIGdldCBhIHN5c3Jvb3QgdGhhdCBkb2VzIG5vdCB1c2UgdGhlIHN0YW5kYXJkIExpbnV4CisrZGlyZWN0b3J5IGxheW91dHMgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGEgYmFzaXMgZm9yIHRoZSByb290CisrZmlsZXN5c3RlbSBvbiB5b3VyIHRhcmdldCBzeXN0ZW0gY29tcGF0aWJseSB3aXRoIG5vcm1hbCBHTElCQworK2luc3RhbGxhdGlvbnMuCisrCisrVGhlICctLXdpdGgtaGVhZGVycycgb3B0aW9uIHRlbGxzIEdMSUJDIHdoZXJlIHRoZSBMaW51eCBoZWFkZXJzIGhhdmUKKytiZWVuIGluc3RhbGxlZC4KKysKKytUaGUgJy0tZW5hYmxlLWFkZC1vbnM9bnB0bCxsaWJpZG4sLi4vcG9ydHMnIG9wdGlvbiB0ZWxscyBHTElCQyB0byBsb29rCisrZm9yIHRoZSBsaXN0ZWQgZ2xpYmMgYWRkLW9ucy4gTW9zdCBub3RhYmx5IHRoZSBwb3J0cyBhZGQtb24gKGxvY2F0ZWQKKytqdXN0IGFib3ZlIHRoZSBsaWJjIHNvdXJjZXMgaW4gdGhlIEdMSUJDIHN2biB0cmVlKSBpcyByZXF1aXJlZCB0bworK3N1cHBvcnQgQVJNIHRhcmdldHMuCisrCisrV2UgY2FuIG5vdyB1c2UgdGhlICdpbnN0YWxsLWhlYWRlcnMnIG1ha2VmaWxlIHRhcmdldCB0byBpbnN0YWxsIHRoZQorK2hlYWRlcnM6CisrCisrICAgICQgbWFrZSBpbnN0YWxsLWhlYWRlcnMgaW5zdGFsbF9yb290PSRzeXNyb290IFwKKysgICAgPiAgICAgICAgICAgICAgICAgICAgICBpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzPXllcworKworK1RoZSAnaW5zdGFsbF9yb290JyB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hlcmUgdGhlIGZpbGVzIHNob3VsZCBhY3R1YWxseQorK2JlIGluc3RhbGxlZDsgaXRzIHZhbHVlIGlzIHRyZWF0ZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUgJy0tcHJlZml4JworK2RpcmVjdG9yeSB3ZSBwYXNzZWQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQsIHNvIHRoZSBoZWFkZXJzIHdpbGwgZ28gaW4KKysnJHN5c3Jvb3QvdXNyL2luY2x1ZGUnLiAgVGhlICdpbnN0YWxsLWJvb3RzdHJhcC1oZWFkZXJzJyB2YXJpYWJsZQorK3JlcXVlc3RzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGNlcnRhaW4gdHJpY2t5IGhlYWRlciBmaWxlcy4KKysKKytOZXh0LCB0aGVyZSBhcmUgYSBmZXcgb2JqZWN0IGZpbGVzIG5lZWRlZCB0byBsaW5rIHNoYXJlZCBsaWJyYXJpZXMsCisrd2hpY2ggd2UgYnVpbGQgYW5kIGluc3RhbGwgYnkgaGFuZDoKKysKKysgICAgJCBta2RpciAtcCAkc3lzcm9vdC91c3IvbGliCisrICAgICQgbWFrZSBjc3Uvc3ViZGlyX2xpYgorKyAgICAkIGNwIGNzdS9jcnQxLm8gY3N1L2NydGkubyBjc3UvY3J0bi5vICRzeXNyb290L3Vzci9saWIKKysKKytGaW5hbGx5LCAnbGliZ2NjX3Muc28nIHJlcXVpcmVzIGEgJ2xpYmMuc28nIHRvIGxpbmsgYWdhaW5zdC4gIEhvd2V2ZXIsCisrc2luY2Ugd2Ugd2lsbCBuZXZlciBhY3R1YWxseSBleGVjdXRlIGl0cyBjb2RlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0CisraXQgY29udGFpbnMuICBTbywgdHJlYXRpbmcgJy9kZXYvbnVsbCcgYXMgYSBDIHNvdXJjZSBmaWxlLCB3ZSBwcm9kdWNlCisrYSBkdW1teSAnbGliYy5zbycgaW4gb25lIHN0ZXA6CisrCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtc2hhcmVkIC14IGMgL2Rldi9udWxsIFwKKysgICAgPiAgICAgICAgICAgICAgICAgICAgICAgIC1vICRzeXNyb290L3Vzci9saWIvbGliYy5zbworKworKworK1RoZSBTZWNvbmQgR0NDCisrCisrV2l0aCB0aGUgR0xJQkMgaGVhZGVycyBhbmQgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIGluc3RhbGxlZCwgd2UgY2FuCisrbm93IGJ1aWxkIGEgR0NDIHRoYXQgaXMgY2FwYWJsZSBvZiBjb21waWxpbmcgR0xJQkMuICBXZSBjb25maWd1cmUsCisrYnVpbGQsIGFuZCBpbnN0YWxsIHRoZSBzZWNvbmQgR0NDLCBhZ2FpbiBidWlsZGluZyBvbmx5IHRoZSBDIGNvbXBpbGVyLAorK2FuZCBhdm9pZGluZyBsaWJyYXJpZXMgd2Ugd29uJ3QgdXNlOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2NjMgorKyAgICAkIGNkICRvYmovZ2NjMgorKyAgICAkICRzcmMvJGdjY3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aC1zeXNyb290PSRzeXNyb290IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYnNzcCAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1saWJmZmkgLS1kaXNhYmxlLWxpYnF1YWRtYXRoIFwKKysgICAgPiAgICAgLS1lbmFibGUtbGFuZ3VhZ2VzPWMKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZQorKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlIGluc3RhbGwKKysKKysKKytHTElCQywgQ29tcGxldGUKKysKKytXaXRoIHRoZSBzZWNvbmQgY29tcGlsZXIgYnVpbHQgYW5kIGluc3RhbGxlZCwgd2UncmUgbm93IHJlYWR5IGZvciB0aGUKKytmdWxsIEdMSUJDIGJ1aWxkOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2xpYmMKKysgICAgJCBjZCAkb2JqL2dsaWJjCisrICAgICQgQlVJTERfQ0M9Z2NjIFwKKysgICAgPiBDQz0kdG9vbHMvYmluLyR0YXJnZXQtZ2NjIFwKKysgICAgPiBDWFg9JHRvb2xzL2Jpbi8kdGFyZ2V0LWcrKyBcCisrICAgID4gQVI9JHRvb2xzL2Jpbi8kdGFyZ2V0LWFyIFwKKysgICAgPiBSQU5MSUI9JHRvb2xzL2Jpbi8kdGFyZ2V0LXJhbmxpYiBcCisrICAgID4gJHNyYy9nbGliYy9saWJjL2NvbmZpZ3VyZSBcCisrICAgID4gICAgIC0tcHJlZml4PS91c3IgXAorKyAgICA+ICAgICAtLXdpdGgtaGVhZGVycz0kc3lzcm9vdC91c3IvaW5jbHVkZSBcCisrICAgID4gICAgIC0td2l0aC1rY29uZmlnPSRvYmovbGludXgvc2NyaXB0cy9rY29uZmlnIFwKKysgICAgPiAgICAgLS1idWlsZD0kYnVpbGQgXAorKyAgICA+ICAgICAtLWhvc3Q9JHRhcmdldCBcCisrICAgID4gICAgIC0tZGlzYWJsZS1wcm9maWxlIC0td2l0aG91dC1nZCAtLXdpdGhvdXQtY3ZzIFwKKysgICAgPiAgICAgLS1lbmFibGUtYWRkLW9ucz1ucHRsLGxpYmlkbiwuLi9wb3J0cworKworK05vdGUgdGhlIGFkZGl0aW9uYWwgJy0td2l0aC1rY29uZmlnJyBvcHRpb24uIFRoaXMgdGVsbHMgR0xJQkMgd2hlcmUgdG8KKytmaW5kIHRoZSBob3N0IGNvbmZpZyB0b29scyB1c2VkIGJ5IHRoZSBrZXJuZWwgJ21ha2UgY29uZmlnJyBhbmQgJ21ha2UKKyttZW51Y29uZmlnJy4gIFRoZXNlIHRvb2xzIGNhbiBiZSByZS11c2VkIGJ5IEdMSUJDIGZvciBpdHMgb3duICdtYWtlCisrKmNvbmZpZycgc3VwcG9ydCwgd2hpY2ggd2lsbCBjcmVhdGUgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBmb3IgeW91LgorK0J1dCBmaXJzdCBtYWtlIHN1cmUgdGhvc2UgdG9vbHMgaGF2ZSBiZWVuIGJ1aWx0IGJ5IHJ1bm5pbmcgc29tZQorK2R1bW15ICdtYWtlICpjb25maWcnIGNhbGxzIGluIHRoZSBrZXJuZWwgZGlyZWN0b3J5OgorKworKyAgICAkIGNkICRvYmovbGludXgKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBjb25maWcgXAorKyAgICA+ICAgICAgQVJDSD0kbGludXhfYXJjaCBDUk9TU19DT01QSUxFPSR0YXJnZXQtIFwKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBtZW51Y29uZmlnIFwKKysgICAgPiAgICAgIEFSQ0g9JGxpbnV4X2FyY2ggQ1JPU1NfQ09NUElMRT0kdGFyZ2V0LSBcCisrCisrTm93IHdlIGNhbiBjb25maWd1cmUgYW5kIGJ1aWxkIHRoZSBmdWxsIEdMSUJDOgorKworKyAgICAkIGNkICRvYmovZ2xpYmMKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBkZWZjb25maWcKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBtZW51Y29uZmlnCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UKKysgICAgJCBQQVRIPSR0b29scy9iaW46JFBBVEggbWFrZSBpbnN0YWxsIGluc3RhbGxfcm9vdD0kc3lzcm9vdAorKworK0F0IHRoaXMgcG9pbnQsIHdlIGhhdmUgYSBjb21wbGV0ZSBHTElCQyBpbnN0YWxsYXRpb24gaW4gJyRzeXNyb290JywKKyt3aXRoIGhlYWRlciBmaWxlcywgbGlicmFyeSBmaWxlcywgYW5kIG1vc3Qgb2YgdGhlIEMgcnVudGltZSBzdGFydHVwCisrZmlsZXMgaW4gcGxhY2UuCisrCisrCisrVGhlIFRoaXJkIEdDQworKworK0ZpbmFsbHksIHdlIHJlY29tcGlsZSBHQ0MgYWdhaW5zdCB0aGlzIGZ1bGwgaW5zdGFsbGF0aW9uLCBlbmFibGluZworK3doYXRldmVyIGxhbmd1YWdlcyBhbmQgbGlicmFyaWVzIHdlIHdvdWxkIGxpa2UgdG8gdXNlOgorKworKyAgICAkIG1rZGlyIC1wICRvYmovZ2NjMworKyAgICAkIGNkICRvYmovZ2NjMworKyAgICAkICRzcmMvJGdjY3YvY29uZmlndXJlIFwKKysgICAgPiAgICAgLS10YXJnZXQ9JHRhcmdldCBcCisrICAgID4gICAgIC0tcHJlZml4PSR0b29scyBcCisrICAgID4gICAgIC0td2l0aC1zeXNyb290PSRzeXNyb290IFwKKysgICAgPiAgICAgLS1lbmFibGUtX19jeGFfYXRleGl0IFwKKysgICAgPiAgICAgLS1kaXNhYmxlLWxpYnNzcCAtLWRpc2FibGUtbGliZ29tcCAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisrICAgID4gICAgIC0tZW5hYmxlLWxhbmd1YWdlcz1jLGMrKworKyAgICAkIFBBVEg9JHRvb2xzL2JpbjokUEFUSCBtYWtlCisrICAgICQgUEFUSD0kdG9vbHMvYmluOiRQQVRIIG1ha2UgaW5zdGFsbAorKworK1RoZSAnLS1lbmFibGUtX19jeGFfYXRleGl0JyBvcHRpb24gdGVsbHMgR0NDIHdoYXQgc29ydCBvZiBDKysKKytkZXN0cnVjdG9yIHN1cHBvcnQgdG8gZXhwZWN0IGZyb20gdGhlIEMgbGlicmFyeTsgaXQncyByZXF1aXJlZCB3aXRoCisrR0xJQkMuCisrCisrQW5kIHNpbmNlIEdDQydzIGluc3RhbGxhdGlvbiBwcm9jZXNzIGlzbid0IGRlc2lnbmVkIHRvIGhlbHAgY29uc3RydWN0Cisrc3lzcm9vdCB0cmVlcywgd2UgbXVzdCBtYW51YWxseSBjb3B5IGNlcnRhaW4gbGlicmFyaWVzIGludG8gcGxhY2UgaW4KKyt0aGUgc3lzcm9vdC4KKysKKysgICAgJCBjcCAtZCAkdG9vbHMvJHRhcmdldC9saWIvbGliZ2NjX3Muc28qICRzeXNyb290L2xpYgorKyAgICAkIGNwIC1kICR0b29scy8kdGFyZ2V0L2xpYi9saWJzdGRjKysuc28qICRzeXNyb290L3Vzci9saWIKKysKKysKKytUcnlpbmcgVGhpbmdzIE91dAorKworK0F0IHRoaXMgcG9pbnQsICckdG9vbHMnIGNvbnRhaW5zIGEgY3Jvc3MgdG9vbGNoYWluIHJlYWR5IHRvIHVzZQorK3RoZSBHTElCQyBpbnN0YWxsYXRpb24gaW4gJyRzeXNyb290JzoKKysKKysgICAgJCBjYXQgPiBoZWxsby5jIDw8RU9GCisrICAgID4gI2luY2x1ZGUgPHN0ZGlvLmg+CisrICAgID4gaW50CisrICAgID4gbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKyAgICA+IHsKKysgICAgPiAgIHB1dHMgKCJIZWxsbywgd29ybGQhIik7CisrICAgID4gICByZXR1cm4gMDsKKysgICAgPiB9CisrICAgID4gRU9GCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LWdjYyAtV2FsbCBoZWxsby5jIC1vIGhlbGxvCisrICAgICQgY2F0ID4gYysrLWhlbGxvLmNjIDw8RU9GCisrICAgID4gI2luY2x1ZGUgPGlvc3RyZWFtPgorKyAgICA+IGludAorKyAgICA+IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgPiB7CisrICAgID4gICBzdGQ6OmNvdXQgPDwgIkhlbGxvLCBDKysgd29ybGQhIiA8PCBzdGQ6OmVuZGw7CisrICAgID4gICByZXR1cm4gMDsKKysgICAgPiB9CisrICAgID4gRU9GCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LWcrKyAtV2FsbCBjKystaGVsbG8uY2MgLW8gYysrLWhlbGxvCisrCisrCisrV2UgY2FuIHVzZSAncmVhZGVsZicgdG8gdmVyaWZ5IHRoYXQgdGhlc2UgYXJlIGluZGVlZCBleGVjdXRhYmxlcyBmb3IKKytvdXIgdGFyZ2V0LCB1c2luZyBvdXIgZHluYW1pYyBsaW5rZXI6CisrCisrICAgICQgJHRvb2xzL2Jpbi8kdGFyZ2V0LXJlYWRlbGYgLWhsIGhlbGxvCisrICAgIEVMRiBIZWFkZXI6CisrICAgIC4uLgorKyAgICAgIFR5cGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhFQyAoRXhlY3V0YWJsZSBmaWxlKQorKyAgICAgIE1hY2hpbmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJNCisrCisrICAgIC4uLgorKyAgICBQcm9ncmFtIEhlYWRlcnM6CisrICAgICAgVHlwZSAgICAgICAgICAgT2Zmc2V0ICAgVmlydEFkZHIgICBQaHlzQWRkciAgIEZpbGVTaXogTWVtU2l6ICBGbGcgQWxpZ24KKysgICAgICBQSERSICAgICAgICAgICAweDAwMDAzNCAweDEwMDAwMDM0IDB4MTAwMDAwMzQgMHgwMDEwMCAweDAwMTAwIFIgRSAweDQKKysgICAgICBJTlRFUlAgICAgICAgICAweDAwMDEzNCAweDAwMDA4MTM0IDB4MDAwMDgxMzQgMHgwMDAxMyAweDAwMDEzIFIgICAweDEKKysgICAgICAgICAgW1JlcXVlc3RpbmcgcHJvZ3JhbSBpbnRlcnByZXRlcjogL2xpYi9sZC1saW51eC5zby4zXQorKyAgICAgIExPQUQgICAgICAgICAgIDB4MDAwMDAwIDB4MDAwMDgwMDAgMHgwMDAwODAwMCAweDAwNDJjIDB4MDA0MmMgUiBFIDB4ODAwMAorKyAgICAuLi4KKysKKytMb29raW5nIGF0IHRoZSBkeW5hbWljIHNlY3Rpb24gb2YgdGhlIGluc3RhbGxlZCAnbGliZ2NjX3Muc28nLCB3ZSBzZWUKKyt0aGF0IHRoZSAnTkVFREVEJyBlbnRyeSBmb3IgdGhlIEMgbGlicmFyeSBkb2VzIGluY2x1ZGUgdGhlICcuNicKKytzdWZmaXgsIGluZGljYXRpbmcgdGhhdCB3YXMgbGlua2VkIGFnYWluc3Qgb3VyIGZ1bGx5IGJ1aWxkIEdMSUJDLCBhbmQKKytub3Qgb3VyIGR1bW15ICdsaWJjLnNvJzoKKysKKysgICAgJCAkdG9vbHMvYmluLyR0YXJnZXQtcmVhZGVsZiAtZCAkc3lzcm9vdC9saWIvbGliZ2NjX3Muc28uMQorKyAgICBEeW5hbWljIHNlY3Rpb24gYXQgb2Zmc2V0IDB4MTA4M2MgY29udGFpbnMgMjQgZW50cmllczoKKysgICAgICBUYWcgICAgICAgIFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZS9WYWx1ZQorKyAgICAgMHgwMDAwMDAwMSAoTkVFREVEKSAgICAgICAgICAgICAgICAgICAgIFNoYXJlZCBsaWJyYXJ5OiBbbGliYy5zby42XQorKyAgICAgMHgwMDAwMDAwZSAoU09OQU1FKSAgICAgICAgICAgICAgICAgICAgIExpYnJhcnkgc29uYW1lOiBbbGliZ2NjX3Muc28uMV0KKysgICAgLi4uCisrCisrCisrQW5kIG9uIHRoZSB0YXJnZXQgbWFjaGluZSwgd2UgY2FuIHJ1biBvdXIgcHJvZ3JhbXM6CisrCisrICAgICQgJHN5c3Jvb3QvbGliL2xkLnNvLjEgLS1saWJyYXJ5LXBhdGggJHN5c3Jvb3QvbGliOiRzeXNyb290L3Vzci9saWIgXAorKyAgICA+IC4vaGVsbG8KKysgICAgSGVsbG8sIHdvcmxkIQorKyAgICAkICRzeXNyb290L2xpYi9sZC5zby4xIC0tbGlicmFyeS1wYXRoICRzeXNyb290L2xpYjokc3lzcm9vdC91c3IvbGliIFwKKysgICAgPiAuL2MrKy1oZWxsbworKyAgICBIZWxsbywgQysrIHdvcmxkIQorZGlmZiAtLWdpdCBhL0dMSUJDLmNyb3NzLXRlc3RpbmcgYi9HTElCQy5jcm9zcy10ZXN0aW5nCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjY3YjQ2OAorLS0tIC9kZXYvbnVsbAorKysrIGIvR0xJQkMuY3Jvc3MtdGVzdGluZworQEAgLTAsMCArMSwyMDUgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgICAgICAgICBDcm9zcy1UZXN0aW5nIFdpdGggR0xJQkMKKysgICAgICAgICAgICAgICAgICBKaW0gQmxhbmR5IDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisrCisrCisrSW50cm9kdWN0aW9uCisrCisrRGV2ZWxvcGVycyB3cml0aW5nIHNvZnR3YXJlIGZvciBlbWJlZGRlZCBzeXN0ZW1zIG9mdGVuIHVzZSBhIGRlc2t0b3AKKytvciBvdGhlciBzaW1pbGFybHkgY2FwYWJsZSBjb21wdXRlciBmb3IgZGV2ZWxvcG1lbnQsIGJ1dCBuZWVkIHRvIHJ1bgorK3Rlc3RzIG9uIHRoZSBlbWJlZGRlZCBzeXN0ZW0sIG9yIHBlcmhhcHMgb24gYSBzaW11bGF0b3IuICBXaGVuCisrY29uZmlndXJlZCBmb3IgY3Jvc3MtY29tcGlsYXRpb24sIHRoZSBzdG9jayBHTlUgQyBsaWJyYXJ5IHNpbXBseQorK2Rpc2FibGVzIHJ1bm5pbmcgdGVzdHMgYWx0b2dldGhlcjogdGhlIGNvbW1hbmQgJ21ha2UgdGVzdHMnIGJ1aWxkcworK3Rlc3QgcHJvZ3JhbXMsIGJ1dCBkb2VzIG5vdCBydW4gdGhlbS4gIEdMSUJDLCBob3dldmVyLCBwcm92aWRlcworK2ZhY2lsaXRpZXMgZm9yIGNvbXBpbGluZyB0ZXN0cyBhbmQgZ2VuZXJhdGluZyBkYXRhIGZpbGVzIG9uIHRoZSBidWlsZAorK3N5c3RlbSwgYnV0IHJ1bm5pbmcgdGhlIHRlc3QgcHJvZ3JhbXMgdGhlbXNlbHZlcyBvbiBhIHJlbW90ZSBzeXN0ZW0gb3IKKytzaW11bGF0b3IuCisrCisrCisrVGVzdCBlbnZpcm9ubWVudCByZXF1aXJlbWVudHMKKysKKytUaGUgdGVzdCBlbnZpcm9ubWVudCBtdXN0IG1lZXQgY2VydGFpbiBjb25kaXRpb25zIGZvciBHTElCQydzCisrY3Jvc3MtdGVzdGluZyBmYWNpbGl0aWVzIHRvIHdvcms6CisrCisrLSBTaGFyZWQgZmlsZXN5c3RlbXMuICBUaGUgJ2J1aWxkJyBzeXN0ZW0sIG9uIHdoaWNoIHlvdSBjb25maWd1cmUgYW5kCisrICBjb21waWxlIEdMSUJDLCBhbmQgdGhlICdob3N0JyBzeXN0ZW0sIG9uIHdoaWNoIHlvdSBpbnRlbmQgdG8gcnVuCisrICBHTElCQywgbXVzdCBzaGFyZSBhIGZpbGVzeXN0ZW0gY29udGFpbmluZyB0aGUgR0xJQkMgYnVpbGQgYW5kCisrICBzb3VyY2UgdHJlZXMuICBGaWxlcyBtdXN0IGFwcGVhciBhdCB0aGUgc2FtZSBwYXRocyBvbiBib3RoIHN5c3RlbXMuCisrCisrLSBSZW1vdGUtc2hlbGwgbGlrZSBpbnZvY2F0aW9uLiAgVGhlcmUgbXVzdCBiZSBhIHdheSB0byBydW4gYSBwcm9ncmFtCisrICBvbiB0aGUgaG9zdCBzeXN0ZW0gZnJvbSB0aGUgYnVpbGQgc3lzdGVtLCBwYXNzaW5nIGl0IHByb3Blcmx5IHF1b3RlZAorKyAgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgc2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZAorKyAgaW5oZXJpdGluZyB0aGUgY2FsbGVyJ3Mgc3RhbmRhcmQgaW5wdXQgYW5kIG91dHB1dC4KKysKKysKKytVc2FnZQorKworK1RvIHVzZSBHTElCQydzIGNyb3NzLXRlc3Rpbmcgc3VwcG9ydCwgcHJvdmlkZSB2YWx1ZXMgZm9yIHRoZQorK2ZvbGxvd2luZyBNYWtlIHZhcmlhYmxlcyB3aGVuIHlvdSBpbnZva2UgJ21ha2UnOgorKworKy0gY3Jvc3MtdGVzdC13cmFwcGVyCisrCisrICBUaGlzIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgY3Jvc3MtdGVzdGluZyB3cmFwcGVyIGNvbW1hbmQsIGFsb25nCisrICB3aXRoIGFueSBhcmd1bWVudHMuCisrCisrLSBjcm9zcy1sb2NhbGVkZWYKKysKKysgIFRoaXMgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgY3Jvc3MtY2FwYWJsZSBsb2NhbGVkZWYgcHJvZ3JhbSwgbGlrZQorKyAgdGhhdCBpbmNsdWRlZCBpbiB0aGUgR0xJQkMgJ2xvY2FsZWRlZicgbW9kdWxlLCBhbG9uZyB3aXRoIGFueQorKyAgYXJndW1lbnRzIG5lZWRlZC4KKysKKytUaGVzZSBhcmUgZWFjaCBleHBsYWluZWQgaW4gZGV0YWlsIGJlbG93LgorKworKworK1RoZSBDcm9zcy1UZXN0aW5nIFdyYXBwZXIKKysKKytUbyBydW4gdGVzdCBwcm9ncmFtcyByZWxpYWJseSwgdGhlIHN0b2NrIEdOVSBDIGxpYnJhcnkgdGFrZXMgY2FyZSB0bworK2Vuc3VyZSB0aGF0IHRlc3QgcHJvZ3JhbXMgdXNlIHRoZSBuZXdseSBjb21waWxlZCBkeW5hbWljIGxpbmtlciBhbmQKKytzaGFyZWQgbGlicmFyaWVzLCBhbmQgbmV2ZXIgdGhlIGhvc3Qgc3lzdGVtJ3MgaW5zdGFsbGVkIGxpYnJhcmllcy4gIFRvCisrYWNjb21wbGlzaCB0aGlzLCBpdCBydW5zIHRoZSB0ZXN0cyBieSBleHBsaWNpdGx5IGludm9raW5nIHRoZSBkeW5hbWljCisrbGlua2VyIGZyb20gdGhlIGJ1aWxkIHRyZWUsIHBhc3NpbmcgaXQgYSBsaXN0IG9mIGJ1aWxkIHRyZWUKKytkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIHNoYXJlZCBsaWJyYXJpZXMsIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mCisrdGhlIGV4ZWN1dGFibGUgdG8gcnVuIGFuZCBpdHMgYXJndW1lbnRzLgorKworK0ZvciBleGFtcGxlLCB3aGVyZSBvbmUgbWlnaHQgbm9ybWFsbHkgcnVuIGEgdGVzdCBwcm9ncmFtIGxpa2UgdGhpczoKKysKKysgICAgJCAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrdGhlIEdOVSBDIGxpYnJhcnkgbWlnaHQgcnVuIHRoYXQgcHJvZ3JhbSBsaWtlIHRoaXM6CisrCisrICAgICQgJG9iamRpci9lbGYvbGQtbGludXguc28uMyAtLWxpYnJhcnktcGF0aCAkb2JqZGlyIFwKKysgICAgICAuL3RzdC1mb28gYXJnMSBhcmcyCisrCisrKHdoZXJlICRvYmpkaXIgaXMgdGhlIHBhdGggdG8gdGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSwgYW5kIHRoZQorK3RyYWlsaW5nIGJhY2tzbGFzaCBpbmRpY2F0ZXMgYSBjb250aW51YXRpb24gb2YgdGhlIGNvbW1hbmQpLiAgSW4gb3RoZXIKKyt3b3JkcywgZWFjaCB0ZXN0IHByb2dyYW0gaW52b2NhdGlvbiBpcyAnd3JhcHBlZCB1cCcgaW5zaWRlIGFuIGV4cGxpY2l0CisraW52b2NhdGlvbiBvZiB0aGUgZHluYW1pYyBsaW5rZXIsIHdoaWNoIG11c3QgaXRzZWxmIGV4ZWN1dGUgdGhlIHRlc3QKKytwcm9ncmFtLCBoYXZpbmcgbG9hZGVkIHNoYXJlZCBsaWJyYXJpZXMgZnJvbSB0aGUgYXBwcm9wcmlhdGUKKytkaXJlY3Rvcmllcy4KKysKKytUbyBzdXBwb3J0IGNyb3NzLXRlc3RpbmcsIEdMSUJDIGFsbG93cyB0aGUgZGV2ZWxvcGVyIHRvIG9wdGlvbmFsbHkKKytzZXQgdGhlICdjcm9zcy10ZXN0LXdyYXBwZXInIE1ha2UgdmFyaWFibGUgdG8gYW5vdGhlciB3cmFwcGVyIGNvbW1hbmQsCisrdG8gd2hpY2ggaXQgcGFzc2VzIHRoZSBlbnRpcmUgZHluYW1pYyBsaW5rZXIgaW52b2NhdGlvbiBzaG93biBhYm92ZSBhcworK2FyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBpZiB0aGUgZGV2ZWxvcGVyIHN1cHBsaWVzIGEgd3JhcHBlciBvZgorKydteS13cmFwcGVyIGhvc3RuYW1lJywgdGhlbiBHTElCQyB3b3VsZCBydW4gdGhlIHRlc3QgYWJvdmUgYXMKKytmb2xsb3dzOgorKworKyAgICAkIG15LXdyYXBwZXIgaG9zdG5hbWUgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworK1RoZSAnbXktd3JhcHBlcicgY29tbWFuZCBpcyByZXNwb25zaWJsZSBmb3IgZXhlY3V0aW5nIHRoZSBjb21tYW5kCisrZ2l2ZW4gb24gdGhlIGhvc3Qgc3lzdGVtLgorKworK1NpbmNlIHRlc3RzIGFyZSBydW4gaW4gdmFyeWluZyBkaXJlY3RvcmllcywgdGhlIHdyYXBwZXIgc2hvdWxkIGVpdGhlcgorK2JlIGluIHlvdXIgY29tbWFuZCBzZWFyY2ggcGF0aCwgb3IgJ2Nyb3NzLXRlc3Qtd3JhcHBlcicgc2hvdWxkIGdpdmUgYW4KKythYnNvbHV0ZSBwYXRoIGZvciB0aGUgd3JhcHBlci4KKysKKytUaGUgd3JhcHBlciBtdXN0IG1lZXQgc2V2ZXJhbCByZXF1aXJlbWVudHM6CisrCisrLSBJdCBtdXN0IHByZXNlcnZlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEFzIGV4cGxhaW5lZCBhYm92ZSwgdGhlCisrICBidWlsZCBkaXJlY3RvcnkgdHJlZSBtdXN0IGJlIHZpc2libGUgb24gYm90aCB0aGUgYnVpbGQgYW5kIGhvc3QKKysgIHN5c3RlbXMsIGF0IHRoZSBzYW1lIHBhdGguICBUaGUgdGVzdCB3cmFwcGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlCisrICBjdXJyZW50IGRpcmVjdG9yeSBpdCBpbmhlcml0cyBpcyBhbHNvIGluaGVyaXRlZCBieSB0aGUgZHluYW1pYworKyAgbGlua2VyIChhbmQgdGh1cyB0aGUgdGVzdCBwcm9ncmFtIGl0c2VsZikuCisrCisrLSBJdCBtdXN0IHByZXNlcnZlIGVudmlyb25tZW50IHZhcmlhYmxlcycgdmFsdWVzLiAgTWFueSBHTElCQyB0ZXN0cworKyAgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGVzdCBydW5zOyBpbiBuYXRpdmUgdGVzdGluZywgaXQKKysgIGludm9rZXMgcHJvZ3JhbXMgbGlrZSB0aGlzOgorKworKyAgICAkIEdDT05WX1BBVEg9JG9iamRpci9pY29udmRhdGEgXAorKyAgICAgICRvYmpkaXIvZWxmL2xkLWxpbnV4LnNvLjMgLS1saWJyYXJ5LXBhdGggJG9iamRpciBcCisrICAgICAgLi90c3QtZm9vIGFyZzEgYXJnMgorKworKyAgV2l0aCB0aGUgY3Jvc3MtdGVzdGluZyB3cmFwcGVyLCB0aGF0IGludm9jYXRpb24gYmVjb21lczoKKysKKysgICAgJCBHQ09OVl9QQVRIPSRvYmpkaXIvaWNvbnZkYXRhIFwKKysgICAgICBteS13cmFwcGVyIGhvc3RuYW1lIFwKKysgICAgICAkb2JqZGlyL2VsZi9sZC1saW51eC5zby4zIC0tbGlicmFyeS1wYXRoICRvYmpkaXIgXAorKyAgICAgIC4vdHN0LWZvbyBhcmcxIGFyZzIKKysKKysgIEhlcmUsICdteS13cmFwcGVyJyBtdXN0IGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSBpdCBzZWVzIGZvcgorKyAgJ0dDT05WX1BBVEgnIHdpbGwgYmUgc2VlbiBieSB0aGUgZHluYW1pYyBsaW5rZXIsIGFuZCB0aHVzICd0c3QtZm9vJworKyAgaXRzZWxmLiAgKFRoZSB3cmFwcGVyIHN1cHBsaWVkIHdpdGggR0xJQkMgc2ltcGx5IHByZXNlcnZlcyB0aGUKKysgIHZhbHVlcyBvZiAqYWxsKiBlbnZpcm9tZW50IHZhcmlhYmxlcywgd2l0aCBhIGZpeGVkIHNldCBvZgorKyAgZXhjZXB0aW9ucy4pCisrCisrICBJZiB5b3VyIHdyYXBwZXIgaXMgYSBzaGVsbCBzY3JpcHQsIHRha2UgY2FyZSB0byBjb3JyZWN0bHkgcHJvcGFnYXRlCisrICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hvc2UgdmFsdWVzIGNvbnRhaW4gc3BhY2VzIGFuZCBzaGVsbAorKyAgbWV0YWNoYXJhY3RlcnMuCisrCisrLSBJdCBtdXN0IHBhc3MgdGhlIGNvbW1hbmQncyBhcmd1bWVudHMsIHVubW9kaWZpZWQuICBUaGUgYXJndW1lbnRzCisrICBzZWVuIGJ5IHRoZSB0ZXN0IHByb2dyYW0gc2hvdWxkIGJlIGV4YWN0bHkgdGhvc2Ugc2VlbiBieSB0aGUgd3JhcHBlcgorKyAgKGFmdGVyIHdoYXRldmVyIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gdGhlIHdyYXBwZXIgaXRzZWxmKS4gIFRoZQorKyAgR0xJQkMgdGVzdCBmcmFtZXdvcmsgcGVyZm9ybXMgYWxsIG5lZWRlZCBzaGVsbCB3b3JkIHNwbGl0dGluZyBhbmQKKysgIGV4cGFuc2lvbiAod2lsZGNhcmQgZXhwYW5zaW9uLCBwYXJhbWV0ZXIgc3Vic3RpdHV0aW9uLCBhbmQgc28gb24pCisrICBiZWZvcmUgaW52b2tpbmcgdGhlIHdyYXBwZXI7IGZ1cnRoZXIgZXhwYW5zaW9uIG1heSBicmVhayB0aGUgdGVzdHMuCisrCisrCisrVGhlICdjcm9zcy10ZXN0LXNzaC5zaCcgc2NyaXB0CisrCisrSWYgeW91IHdhbnQgdG8gdXNlICdzc2gnIChvciBzb21ldGhpbmcgc3VmZmljaWVudGx5IHNpbWlsYXIpIHRvIHJ1bgorK3Rlc3QgcHJvZ3JhbXMgb24geW91ciBob3N0IHN5c3RlbSwgR0xJQkMgaW5jbHVkZXMgYSBzaGVsbCBzY3JpcHQsCisrJ3NjcmlwdHMvY3Jvc3MtdGVzdC1zc2guc2gnLCB3aGljaCB5b3UgY2FuIHVzZSBhcyB5b3VyIHdyYXBwZXIKKytjb21tYW5kLiAgVGhpcyBzY3JpcHQgdGFrZXMgY2FyZSBvZiBzZXR0aW5nIHRoZSB0ZXN0IGNvbW1hbmQncyBjdXJyZW50CisrZGlyZWN0b3J5LCBwcm9wYWdhdGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZXMsIGFuZCBjYXJyeWluZworK2NvbW1hbmQtbGluZSBhcmd1bWVudHMsIGFsbCBhY3Jvc3MgYW4gJ3NzaCcgY29ubmVjdGlvbi4gIFlvdSBtYXkgZXZlbgorK3N1cHBseSBhbiBhbHRlcm5hdGl2ZSB0byAnc3NoJyBvbiB0aGUgY29tbWFuZCBsaW5lLCBpZiBuZWVkZWQuCisrCisrRm9yIG1vcmUgZGV0YWlscywgcGFzcyAnY3Jvc3MtdGVzdC1zc2guc2gnIHRoZSAnLS1oZWxwJyBvcHRpb24uCisrCisrCisrVGhlIENyb3NzLUNvbXBpbGluZyBMb2NhbGUgRGVmaW5pdGlvbiBDb21tYW5kCisrCisrU29tZSBHTElCQyB0ZXN0cyByZWx5IG9uIGxvY2FsZXMgZ2VuZXJhdGVkIGVzcGVjaWFsbHkgZm9yIHRoZSB0ZXN0CisrcHJvY2Vzcy4gIEluIGEgbmF0aXZlIGNvbmZpZ3VyYXRpb24sIHRoZXNlIHRlc3RzIHNpbXBseSBydW4gdGhlCisrJ2xvY2FsZWRlZicgY29tbWFuZCBidWlsdCBieSB0aGUgbm9ybWFsIEdMSUJDIGJ1aWxkIHByb2Nlc3MsCisrJ2xvY2FsZS9sb2NhbGVkZWYnLCB0byBwcm9jZXNzIGFuZCBpbnN0YWxsIHRoZWlyIGxvY2FsZXMuICBIb3dldmVyLCBpbgorK2EgY3Jvc3MtY29tcGlsaW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMgJ2xvY2FsZWRlZicgaXMgYnVpbHQgZm9yIHRoZQorK2hvc3Qgc3lzdGVtLCBub3QgdGhlIGJ1aWxkIHN5c3RlbSwgYW5kIHNpbmNlIGl0IHJlcXVpcmVzIHF1aXRlIGEgYml0Cisrb2YgbWVtb3J5IHRvIHJ1biAod2UgaGF2ZSBzZWVuIGl0IGZhaWwgb24gc3lzdGVtcyB3aXRoIDY0TWlCIG9mCisrbWVtb3J5KSwgaXQgbWF5IG5vdCBiZSBwcmFjdGljYWwgdG8gcnVuIGl0IG9uIHRoZSBob3N0IHN5c3RlbS4KKysKKytJZiBzZXQsIEdMSUJDIHVzZXMgdGhlICdjcm9zcy1sb2NhbGVkZWYnIE1ha2UgdmFyaWFibGUgYXMgdGhlIGNvbW1hbmQKKyt0byBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbSB0byBwcm9jZXNzIGFuZCBpbnN0YWxsIGxvY2FsZXMuICBUaGUKKytsb2NhbGVkZWYgcHJvZ3JhbSBidWlsdCBmcm9tIHRoZSBHTElCQyAnbG9jYWxlZGVmJyBtb2R1bGUgaXMKKytzdWl0YWJsZS4KKysKKytUaGUgdmFsdWUgb2YgJ2Nyb3NzLWxvY2FsZWRlZicgbWF5IGFsc28gaW5jbHVkZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzCisrdG8gYmUgcGFzc2VkIHRvIHRoZSBwcm9ncmFtOyBpZiB5b3UgYXJlIHVzaW5nIEdMSUJDJ3MgJ2xvY2FsZWRlZicsCisreW91IG1heSBpbmNsdWRlIGVuZGlhbm5lc3MgYW5kICd1aW50MzJfdCcgYWxpZ25tZW50IGFyZ3VtZW50cyBoZXJlLgorKworKworK0V4YW1wbGUKKysKKytJbiBkZXZlbG9waW5nIEdMSUJDJ3MgY3Jvc3MtdGVzdGluZyBmYWNpbGl0eSwgd2UgaW52b2tlZCAnbWFrZScgd2l0aAorK3RoZSBmb2xsb3dpbmcgc2NyaXB0OgorKworKyAgICAjIS9iaW4vc2gKKysKKysgICAgc3JjZGlyPS4uLgorKyAgICB0ZXN0X2hvc3RuYW1lPS4uLgorKyAgICBsb2NhbGVkZWZkaXI9Li4uCisrICAgIGNyb3NzX2d4eD0uLi4tZysrCisrCisrICAgIHdyYXBwZXI9IiRzcmNkaXIvc2NyaXB0cy9jcm9zcy10ZXN0LXNzaC5zaCAkdGVzdF9ob3N0bmFtZSIKKysgICAgbG9jYWxlZGVmPSIkbG9jYWxlZGVmZGlyL2xvY2FsZWRlZiAtLWxpdHRsZS1lbmRpYW4gLS11aW50MzItYWxpZ249NCIKKysKKysgICAgbWFrZSBjcm9zcy10ZXN0LXdyYXBwZXI9IiR3cmFwcGVyIiBcCisrICAgICAgICAgY3Jvc3MtbG9jYWxlZGVmPSIkbG9jYWxlZGVmIiBcCisrICAgICAgICAgQ1hYPSIkY3Jvc3NfZ3h4IiBcCisrICAgICAgICAgIiRAIgorKworKworK090aGVyIENyb3NzLVRlc3RpbmcgQ29uY2VybnMKKysKKytIZXJlIGFyZSBub3RlcyBvbiBzb21lIG90aGVyIGlzc3VlcyB3aGljaCB5b3UgbWF5IGVuY291bnRlciBpbiBydW5uaW5nCisrdGhlIEdMSUJDIHRlc3RzIGluIGEgY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50OgorKworKy0gU29tZSB0ZXN0cyByZXF1aXJlIGEgQysrIGNyb3NzLWNvbXBpbGVyOyB5b3Ugc2hvdWxkIHNldCB0aGUgJ0NYWCcKKysgIE1ha2UgdmFyaWFibGUgdG8gdGhlIG5hbWUgb2YgYW4gYXBwcm9wcmlhdGUgY3Jvc3MtY29tcGlsZXIuCisrCisrLSBTb21lIHRlc3RzIHJlcXVpcmUgYWNjZXNzIHRvIGxpYnN0ZGMrKy5zby42IGFuZCBsaWJnY2Nfcy5zby4xOyB3ZQorKyAgc2ltcGx5IHBsYWNlIGNvcGllcyBvZiB0aGVzZSBsaWJyYXJpZXMgaW4gdGhlIHRvcCBHTElCQyBidWlsZAorKyAgZGlyZWN0b3J5LgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNiODBmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMTktZWdsaWJjLUJyaW5nLUVnbGliYy1vcHRpb24tZ3JvdXAtaW5mcmFzdHJ1Y3R1cmUtdG8tZy5wYXRjaApAQCAtMCwwICsxLDE0MzYgQEAKK0Zyb20gYWE3YzVmZTg2ZDA0NTg0YTlhZWQ0ZGM0MGJhODU2YzY1YTFlZjljNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQ1OjE4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMjddIGVnbGliYzogQnJpbmcgRWdsaWJjIG9wdGlvbiBncm91cCBpbmZyYXN0cnVjdHVyZSB0bworIGdsaWJjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgRUdMSUJDLm9wdGlvbi1ncm91cHMgICAgICAgICAgICAgIHwgMTIyICsrKysrKworIE1ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCisgY29uZmlnLm1ha2UuaW4gICAgICAgICAgICAgICAgICAgIHwgICAyICsKKyBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMgKworIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArCisgb3B0aW9uLWdyb3Vwcy5kZWYgICAgICAgICAgICAgICAgIHwgODY4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cyAgICAgICAgICAgIHwgIDQ3ICsrKworIG9wdGlvbi1ncm91cHMubWFrICAgICAgICAgICAgICAgICB8ICA0MSArKworIG9wdGlvbnMtY29uZmlnL01ha2VmaWxlICAgICAgICAgICB8ICA1NSArKysKKyBvcHRpb25zLWNvbmZpZy9jb25maWctcG9zdHByb2MucGwgfCAgNTggKysrCisgb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwgIHwgICA4ICsKKyBzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrICAgICAgICAgfCAgNjMgKysrCisgMTIgZmlsZXMgY2hhbmdlZCwgMTI4OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IEVHTElCQy5vcHRpb24tZ3JvdXBzCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbi1ncm91cHMuZGVmCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbi1ncm91cHMuZGVmYXVsdHMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9uLWdyb3Vwcy5tYWsKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9ucy1jb25maWcvTWFrZWZpbGUKKyBjcmVhdGUgbW9kZSAxMDA2NDQgb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG9wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sKKworZGlmZiAtLWdpdCBhL0VHTElCQy5vcHRpb24tZ3JvdXBzIGIvRUdMSUJDLm9wdGlvbi1ncm91cHMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42YTUwYjhkCistLS0gL2Rldi9udWxsCisrKysgYi9FR0xJQkMub3B0aW9uLWdyb3VwcworQEAgLTAsMCArMSwxMjIgQEAKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBtb2RlOiB0ZXh0IC0qLQorKworKyAgICAgICAgICAgICAgVGhlIEVHTElCQyBDb21wb25lbnQgQ29uZmlndXJhdGlvbiBTeXN0ZW0KKysgICAgICAgICAgICAgICAgICBKaW0gQmxhbmR5IDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisrCisrSW50cm9kdWN0aW9uCisrCisrVGhlIEdOVSBDIGxpYnJhcnkgKEdMSUJDKSBwcm92aWRlcyBhIGJyb2FkIHJhbmdlIG9mIGZ1bmN0aW9uYWxpdHksCisrcmFuZ2luZyBmcm9tIGludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQgdG8gdHJhbnNjZW5kZW50YWwKKyttYXRoZW1hdGljYWwgZnVuY3Rpb25zLiAgSXRzIHdlYnNpdGUgYm9hc3RzIHRoYXQgIm5lYXJseSBhbGwga25vd24gYW5kCisrdXNlZnVsIGZ1bmN0aW9ucyBmcm9tIGFueSBvdGhlciBDIGxpYnJhcnkgYXJlIGF2YWlsYWJsZS4iICBUaGlzCisrZXhoYXVzdGl2ZSBhcHByb2FjaCBoYXMgYmVlbiBvbmUgb2YgR0xJQkMncyBzdHJlbmd0aHMgb24gZGVza3RvcCBhbmQKKytzZXJ2ZXIgc3lzdGVtcywgYnV0IGl0IGhhcyBhbHNvIGdpdmVuIEdMSUJDIGEgbGFyZ2UgZm9vdHByaW50LCBib3RoIGluCisrbWVtb3J5IGFuZCBvbiBkaXNrLCBtYWtpbmcgaXQgYSBjaGFsbGVuZ2UgdG8gdXNlIGluIGVtYmVkZGVkIHN5c3RlbXMKKyt3aXRoIGxpbWl0ZWQgcmVzb3VyY2VzLgorKworK1RoZSBFbWJlZGRlZCBHTlUgQyBsaWJyYXJ5IChFR0xJQkMpIGlzIGEgdmFyaWFudCBvZiB0aGUgR05VIEMgbGlicmFyeQorK2Rlc2lnbmVkIHRvIHdvcmsgd2VsbCBvbiBlbWJlZGRlZCBzeXN0ZW1zLiAgSW4gcGFydGljdWxhciwgRUdMSUJDJ3MKKytjb21wb25lbnQgY29uZmlndXJhdGlvbiBzeXN0ZW0gYWxsb3dzIGVtYmVkZGVkIGRldmVsb3BlcnMgdG8gYnVpbGQKKytjdXN0b21pemVkIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5IHRoYXQgaW5jbHVkZSBvbmx5IHRoZSBmZWF0dXJlcworK3RoZWlyIGFwcGxpY2F0aW9uIHVzZXMsIHJlZHVjaW5nIGl0cyBzcGFjZSByZXF1aXJlbWVudHMuCisrCisrRUdMSUJDJ3MgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIGNhdGVnb3JpemVzIHRoZSBsaWJyYXJ5J3MKKytmdW5jdGlvbnMgaW50byAib3B0aW9uIGdyb3VwcyIsIGFuZCBhbGxvd3MgeW91IHRvIGluY2x1ZGUgb3IgZXhjbHVkZQorK29wdGlvbiBncm91cHMgaW5kaXZpZHVhbGx5LiAgU29tZSBvcHRpb24gZ3JvdXBzIGRlcGVuZCBvbiBvdGhlcnM7CisrRUdMSUJDIHRyYWNrcyB0aGVzZSByZWxhdGlvbnNoaXBzLCBhbmQgZW5zdXJlcyB0aGF0IHRoZSBzZWxlY3RlZAorK2NvbmZpZ3VyYXRpb24geWllbGRzIGEgZnVuY3Rpb25pbmcgbGlicmFyeS4KKysKKysKKytDb25zaXN0ZW50IGFuZCBQcmVkaWN0YWJsZSBCZWhhdmlvcgorKworK0EgZmxleGlibGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaXMgYSBtaXhlZCBibGVzc2luZzogaWYgdGhlIG9wdGlvbnMKKytvZmZlcmVkIGFyZSBwb29ybHkgZGVzaWduZWQsIGl0IGNhbiBiZSBoYXJkIHRvIHNlZSB3aGljaCBjaG9pY2VzIHdpbGwKKytoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdHMsIGFuZCBjaG9pY2VzIHdpdGggb2JzY3VyZSBjb25zZXF1ZW5jZXMgY2FuCisrbWFrZSBkZWJ1Z2dpbmcgZGlmZmljdWx0LiAgRUdMSUJDJ3MgY29uZmlndXJhdGlvbiBmb2xsb3dzIHNvbWUgZ2VuZXJhbAorK3ByaW5jaXBsZXMgdG8gcmVkdWNlIHRoZXNlIHJpc2tzOgorKworKy0gRUdMSUJDIGhhcyBhIHNpbmdsZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggdGFyZ2V0CisrICBhcmNoaXRlY3R1cmUuCisrCisrLSBJbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBhbGwgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZCwgYW5kCisrICBFR0xJQkMgaXMgdXB3YXJkbHkgQVBJLSBhbmQgQUJJLWNvbXBhdGlibGUgd2l0aCBHTElCQy4KKysKKystIEFzIG11Y2ggYXMgcG9zc2libGUsIGNvbmZpZ3VyYXRpb25zIG9ubHkgYWZmZWN0IHdoYXQgZnVuY3Rpb25zIGFyZQorKyAgcHJlc2VudCwgbm90IGhvdyB0aGV5IGJlaGF2ZS4gIElmIHRoZSBzeXN0ZW0gd29ya3Mgd2l0aCBhbiBvcHRpb24KKysgIGdyb3VwIGRpc2FibGVkLCBpdCB3aWxsIHN0aWxsIHdvcmsgd2l0aCBpdCBlbmFibGVkLgorKworKy0gQXMgbXVjaCBhcyBwb3NzaWJsZSwgY29uZmlndXJhdGlvbnMgb25seSBzZWxlY3Qgb3B0aW9uIGdyb3VwcyAtLS0KKysgIHRoZXkgZG8gbm90IGRlc2NyaWJlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KKysKKytUaGVzZSBydWxlcyBtZWFuIHRoYXQgeW91IGhhdmUgYSBzaW1wbGUgZGVidWdnaW5nIHN0cmF0ZWd5IGF2YWlsYWJsZQorK2lmIHlvdSBzdXNwZWN0IHRoYXQgeW91ciBFR0xJQkMgY29uZmlndXJhdGlvbiBtaWdodCBiZSB0aGUgc291cmNlIG9mIGEKKytwcm9ibGVtOiBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgcmUtdGVzdCwgYW5kIHRoZW4KKytkaXNhYmxlIG9wdGlvbiBncm91cHMgb25lIGJ5IG9uZSwgdW50aWwgdGhlIHByb2JsZW0gcmVhcHBlYXJzLgorKworKworK1RoZSBPcHRpb24gR3JvdXBzCisrCisrVG8gc2VlIHRoZSBjdXJyZW50IGZ1bGwgbGlzdCBvZiBpbXBsZW1lbnRlZCBvcHRpb24gZ3JvdXBzLCByZWZlciB0byB0aGUKKytmaWxlICdvcHRpb24tZ3JvdXBzLmRlZicgYXQgdGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsIG9yIHJ1bgorKydtYWtlIG1lbnVjb25maWcnIGZyb20gdGhlIHRvcC1sZXZlbCBidWlsZCBkaXJlY3RvcnkuCisrCisrVGhlIFBPU0lYLjEtMjAwMSBzcGVjaWZpY2F0aW9uIGluY2x1ZGVzIGEgc3VnZ2VzdGVkIHBhcnRpdGlvbiBvZiBhbGwKKyt0aGUgZnVuY3Rpb25zIGluIHRoZSBQT1NJWCBDIEFQSSBpbnRvIG9wdGlvbiBncm91cHM6IG1hdGggZnVuY3Rpb25zCisrbGlrZSAnc2luJyBhbmQgJ2Nvcyc7IG5ldHdvcmtpbmcgZnVuY3Rpb25zIGxpa2UgJ3NvY2tldCcgYW5kCisrJ2Nvbm5lY3QnOyBhbmQgc28gb24uICBFR0xJQkMgY291bGQgdXNlIHRoaXMgcGFydGl0aW9uaW5nIGFzIHRoZSBiYXNpcworK2ZvciBmdXR1cmUgb3B0aW9uIGdyb3Vwcy4KKysKKysKKytJbXBsZW1lbnRhdGlvbgorKworK1RoZSBFR0xJQkMgY29tcG9uZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtIHJlc2VtYmxlcyB0aGUgYXBwcm9hY2ggdXNlZAorK2J5IHRoZSBMaW51eCBrZXJuZWwgdG8gc2VsZWN0IGRldmljZSBkcml2ZXJzLCBuZXR3b3JrIHByb3RvY29scywgYW5kCisrb3RoZXIgZmVhdHVyZXMuICBBIGZpbGUgbmFtZWQgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBpbiB0aGUgdG9wLWxldmVsCisrYnVpbGQgZGlyZWN0b3J5IGNvbnRhaW5zIGFzc2lnbm1lbnRzIHRvIE1ha2UgdmFyaWFibGVzLCBlYWNoIG9mIHdoaWNoCisrZW5hYmxlcyBvciBkaXNhYmxlcyBhIHBhcnRpY3VsYXIgb3B0aW9uIGdyb3VwLiAgSWYgdGhlIHZhcmlhYmxlJ3MKKyt2YWx1ZSBpcyBzZXQgdG8gJ3knLCB0aGVuIHRoZSBvcHRpb24gZ3JvdXAgaXMgZW5hYmxlZDsgaWYgaXQgc2V0IHRvCisrYW55dGhpbmcgZWxzZSwgdGhlIG9wdGlvbiBncm91cCBpcyBvbWl0dGVkLiAgVGhlIGZpbGUKKysnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycsIGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLCBlc3RhYmxpc2hlcworK2RlZmF1bHQgdmFsdWVzIGZvciBhbGwgdmFyaWFibGVzOyBhbGwgb3B0aW9uIGdyb3VwcyBhcmUgZW5hYmxlZCBieQorK2RlZmF1bHQuCisrCisrRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgJ29wdGlvbi1ncm91cHMuY29uZmlnJyB3b3VsZCBvbWl0IGxvY2FsZQorK2RhdGEsIGJ1dCBpbmNsdWRlIG1hdGhlbWF0aWNhbCBmdW5jdGlvbnMsIGFuZCBldmVyeXRoaW5nIGVsc2U6CisrCisrICAgT1BUSU9OX0VHTElCQ19MT0NBTEVTID0gbgorKyAgIE9QVElPTl9FR0xJQkNfTElCTSA9IHkKKysKKytMaWtlIHRoZSBMaW51eCBrZXJuZWwsIEVHTElCQyBzdXBwb3J0cyBhIHNpbWlsYXIgc2V0IG9mICcqY29uZmlnJyBtYWtlCisrdGFyZ2V0cyB0byBtYWtlIGl0IGVhc2llciB0byBjcmVhdGUgJ29wdGlvbi1ncm91cHMuY29uZmlnJywgd2l0aCBhbGwKKytkZXBlbmRlbmNpZXMgYmV0d2VlbiBvcHRpb24gZ3JvdXBzIGF1dG9tYXRpY2FsbHkgc2F0aXNmaWVkLiAgUnVuCisrJ21ha2UgaGVscCcgdG8gc2VlIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBtYWtlIGNvbmZpZyB0YXJnZXRzLiAgRm9yCisrZXhhbXBsZSwgJ21ha2UgbWVudWNvbmZpZycgd2lsbCB1cGRhdGUgdGhlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhCisrbWVudSBiYXNlZCBwcm9ncmFtLgorKworK1RoZSBvcHRpb24gZ3JvdXAgbmFtZXMgYW5kIHRoZWlyIHR5cGUgKGJvb2xlYW4sIGludCwgaGV4LCBzdHJpbmcpLCBoZWxwCisrZGVzY3JpcHRpb24sIGFuZCBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBvcHRpb24gZ3JvdXBzLCBhcmUgZGVzY3JpYmVkIGJ5CisrJ29wdGlvbi1ncm91cHMuZGVmJyBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSwgYW5hbG9nb3VzIHRvIHRoZQorKydLY29uZmlnJyBmaWxlcyBpbiB0aGUgTGludXgga2VybmVsLgorKworK0luIGdlbmVyYWwsIGVhY2ggb3B0aW9uIGdyb3VwIHZhcmlhYmxlIGNvbnRyb2xzIHdoZXRoZXIgYSBnaXZlbiBzZXQgb2YKKytvYmplY3QgZmlsZXMgaW4gRUdMSUJDIGlzIGNvbXBpbGVkIGFuZCBpbmNsdWRlZCBpbiB0aGUgZmluYWwKKytsaWJyYXJpZXMsIG9yIG9taXR0ZWQgZnJvbSB0aGUgYnVpbGQuCisrCisrRWFjaCBzdWJkaXJlY3RvcnkncyBNYWtlZmlsZSBjYXRlZ29yaXplcyBpdHMgcm91dGluZXMsIGxpYnJhcmllcywgYW5kCisrZXhlY3V0YWJsZXMgYnkgb3B0aW9uIGdyb3VwLiAgRm9yIGV4YW1wbGUsIEVHTElCQydzICdtYXRoL01ha2VmaWxlJworK3BsYWNlcyB0aGUgJ2xpYm0nIGxpYnJhcnkgaW4gdGhlIE9QVElPTl9FR0xJQkNfTElCTSBncm91cCBhcyBmb2xsb3dzOgorKworKyAgIGV4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0xJQk0pIDo9IGxpYm0KKysKKytGaW5hbGx5LCBjb21tb24gY29kZSBpbiAnTWFrZXJ1bGVzJyBjaXRlcyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlCisrJ2V4dHJhLWxpYnMteScsIHNlbGVjdGluZyBvbmx5IHRob3NlIGxpYnJhcmllcyB0aGF0IGJlbG9uZyB0byBlbmFibGVkCisrb3B0aW9uIGdyb3VwcyB0byBiZSBidWlsdC4KKysKKysKKytDdXJyZW50IFN0YXR1cyBhbmQgRnV0dXJlIERpcmVjdGlvbnMKKysKKytUaGUgRUdMSUJDIGNvbXBvbmVudCBjb25maWd1cmF0aW9uIHN5c3RlbSBkZXNjcmliZWQgaGVyZSBpcyBzdGlsbAorK3VuZGVyIGRldmVsb3BtZW50LgorKworK1dlIGhhdmUgdXNlZCB0aGUgc3lzdGVtIHRvIHN1YnNldCBzb21lIHBvcnRpb25zIG9mIEVHTElCQydzCisrSW5kZXg6IGxpYmMvY29uZmlndXJlLmFjCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNjU4Y2NmYS4uZjkwNjM5MSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTI0LDYgKzI0LDcgQEAgZW5kaWYKKyAKKyBpbmNsdWRlIE1ha2Vjb25maWcKKyAKKytpbmNsdWRlIG9wdGlvbnMtY29uZmlnL01ha2VmaWxlCisgCisgIyBUaGlzIGlzIHRoZSBkZWZhdWx0IHRhcmdldDsgaXQgbWFrZXMgZXZlcnl0aGluZyBleGNlcHQgdGhlIHRlc3RzLgorIC5QSE9OWTogYWxsCitkaWZmIC0tZ2l0IGEvY29uZmlnLm1ha2UuaW4gYi9jb25maWcubWFrZS5pbgoraW5kZXggYTlmNTY5Ni4uMjk0ZjhkMSAxMDA2NDQKKy0tLSBhL2NvbmZpZy5tYWtlLmluCisrKysgYi9jb25maWcubWFrZS5pbgorQEAgLTQ3LDYgKzQ3LDggQEAgYysrLXN5c2luY2x1ZGVzID0gQENYWF9TWVNJTkNMVURFU0AKKyBhbGwtd2FybmluZ3MgPSBAYWxsX3dhcm5pbmdzQAorIGVuYWJsZS13ZXJyb3IgPSBAZW5hYmxlX3dlcnJvckAKKyAKKytrY29uZmlnX3Rvb2xzID0gQEtDT05GSUdfVE9PTFNACisrCisgaGF2ZS16LWNvbWJyZWxvYyA9IEBsaWJjX2N2X3pfY29tYnJlbG9jQAorIGhhdmUtei1leGVjc3RhY2sgPSBAbGliY19jdl96X2V4ZWNzdGFja0AKKyBoYXZlLUJncm91cCA9IEBsaWJjX2N2X0Jncm91cEAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDdkNzI5OWEuLjQxMTY0MDQgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY0MSw2ICs2NDEsNyBAQCBJTlNUQUxMX0lORk8KKyBQRVJMCisgQkFTSF9TSEVMTAorIGxpYmNfY3ZfZ2NjX3N0YXRpY19saWJnY2MKKytLQ09ORklHX1RPT0xTCisgQ1hYX1NZU0lOQ0xVREVTCisgU1lTSU5DTFVERVMKKyBBVVRPQ09ORgorQEAgLTc1NSw2ICs3NTYsNyBAQCB3aXRoX2ZwCisgd2l0aF9iaW51dGlscworIHdpdGhfc2VsaW51eAorIHdpdGhfaGVhZGVycworK3dpdGhfa2NvbmZpZworIHdpdGhfZGVmYXVsdF9saW5rCisgZW5hYmxlX3Nhbml0eV9jaGVja3MKKyBlbmFibGVfc2hhcmVkCitAQCAtMTQ1OSw2ICsxNDYxLDkgQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtc2VsaW51eCAgICAgICAgICBpZiBidWlsZGluZyB3aXRoIFNFTGludXggc3VwcG9ydAorICAgLS13aXRoLWhlYWRlcnM9UEFUSCAgICAgbG9jYXRpb24gb2Ygc3lzdGVtIGhlYWRlcnMgdG8gdXNlIChmb3IgZXhhbXBsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgL3Vzci9zcmMvbGludXgvaW5jbHVkZSkgW2RlZmF1bHQ9Y29tcGlsZXIgZGVmYXVsdF0KKysgIC0td2l0aC1rY29uZmlnPVBBVEggICAgIGxvY2F0aW9uIG9mIGtjb25maWcgdG9vbHMgdG8gdXNlIChmcm9tIExpbnV4IGtlcm5lbAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRzKSB0byByZS11c2UgZm9yIGNvbmZpZ3VyaW5nIEVHTElCQyBvcHRpb24KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwcworICAgLS13aXRoLWRlZmF1bHQtbGluayAgICAgZG8gbm90IHVzZSBleHBsaWNpdCBsaW5rZXIgc2NyaXB0cworICAgLS13aXRoLWNwdT1DUFUgICAgICAgICAgc2VsZWN0IGNvZGUgZm9yIENQVSB2YXJpYW50CisgCitAQCAtMzUxNyw2ICszNTIyLDE0IEBAIGZpCisgCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rY29uZmlnIHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfa2NvbmZpZytzZXR9IiA9IHNldDsgdGhlbgorKyAgd2l0aHZhbD0kd2l0aF9rY29uZmlnOyBLQ09ORklHX1RPT0xTPSR3aXRodmFsCisrZWxzZQorKyAgS0NPTkZJR19UT09MUz0nJworK2ZpCisrCisrCisgCisgIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LWxpbmsgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7d2l0aF9kZWZhdWx0X2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4gOgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYTQ2N2E2OS4uZmMwZWQ0ZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTM2LDYgKzEzNiwxNiBAQCBBQ19BUkdfV0lUSChbaGVhZGVyc10sCisgCSAgICBbc3lzaGVhZGVycz0nJ10pCisgQUNfU1VCU1Qoc3lzaGVhZGVycykKKyAKKytBQ19BUkdfV0lUSChba2NvbmZpZ10sCisrCSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWtjb25maWc9UEFUSF0sCisrCQkJICAgW2xvY2F0aW9uIG9mIGtjb25maWcgdG9vbHMgdG8gdXNlIChmcm9tIExpbnV4CisrCQkJICAgIGtlcm5lbCBidWlsZHMpIHRvIHJlLXVzZSBmb3IgY29uZmlndXJpbmcgRUdMSUJDCisrCQkJICAgIG9wdGlvbiBncm91cHNdKSwKKysJICAgIFtLQ09ORklHX1RPT0xTPSR3aXRodmFsXSwKKysJICAgIFtLQ09ORklHX1RPT0xTPScnXSkKKytBQ19TVUJTVChLQ09ORklHX1RPT0xTKQorKworKworIEFDX1NVQlNUKHVzZV9kZWZhdWx0X2xpbmspCisgQUNfQVJHX1dJVEgoW2RlZmF1bHQtbGlua10sCisgCSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWRlZmF1bHQtbGlua10sCitkaWZmIC0tZ2l0IGEvb3B0aW9uLWdyb3Vwcy5kZWYgYi9vcHRpb24tZ3JvdXBzLmRlZgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjZhZWJkOTQKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbi1ncm91cHMuZGVmCitAQCAtMCwwICsxLDg2OCBAQAorKyMgVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgb3B0aW9uIGdyb3VwcyBFR0xJQkMgY3VycmVudGx5IHN1cHBvcnRzLCBpbgorKyMgYSBmb3JtYXQgYWtpbiB0byB0aGUgTGludXggS2NvbmZpZyBzeXN0ZW0ncy4gIFRoZSBzeW50YXggbWF5IGNoYW5nZQorKyMgb3ZlciB0aW1lLgorKyMKKysjIEFuIGVudHJ5IG9mIHRoZSBmb3JtOgorKyMKKysjICAgY29uZmlnIEdST1VQX05BTUUKKysjICAgICAgIGJvb2wgIm9uZS1saW5lIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhpcyBvcHRpb24gZ3JvdXAgY29udHJvbHMiCisrIyAgICAgICBoZWxwCisrIyAgICAgICAgICAgTXVsdGktbGluZSBoZWxwIGV4cGxhaW5pbmcgdGhlIG9wdGlvbiBncm91cCdzIG1lYW5pbmcgaW4KKysjICAgICAgICAgICBzb21lIGRldGFpbCwgdGVybWluYXRlZCBieSBpbmRlbnRhdGlvbiBsZXZlbC4KKysjCisrIyBkZWZpbmVzIGFuIG9wdGlvbiBncm91cCB3aG9zZSB2YXJpYWJsZSBpcyBHUk9VUF9OQU1FLCB3aXRoCisrIyBtZWFuaW5nZnVsIHZhbHVlcyAneScgKGVuYWJsZWQpIGFuZCAnbicgKGRpc2FibGVkKS4gIFRoZQorKyMgZG9jdW1lbnRhdGlvbiBpcyBmb3JtYXR0ZWQgdG8gYmUgY29uc3VtZWQgYnkgc29tZSBzb3J0IG9mCisrIyBpbnRlcmFjdGl2ZSBjb25maWd1cmF0aW9uIGludGVyZmFjZSwgYnV0IEVHTElCQyBkb2Vzbid0IGhhdmUgc3VjaCBhbgorKyMgaW50ZXJmYWNlIHlldC4KKysjCisrIyBBbiBvcHRpb24gbWF5IGhhdmUgYSAnZGVwZW5kcyBvbicgbGluZSwgaW5kaWNhdGluZyB3aGljaCBvdGhlciBvcHRpb25zCisrIyBtdXN0IGFsc28gYmUgZW5hYmxlZCBpZiB0aGlzIG9wdGlvbiBpcy4gIEF0IHByZXNlbnQsIEVHTElCQyBkb2Vzbid0CisrIyBjaGVjayB0aGF0IHRoZXNlIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLgorKyMKKysjIE9wdGlvbiBncm91cCB2YXJpYWJsZXMgZ2V0IHRoZWlyIGRlZmF1bHQgdmFsdWVzIGZyb20gdGhlIGZpbGUKKysjICdvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJywgaW4gdGhlIHRvcCBkaXJlY3Rvcnkgb2YgdGhlIEVHTElCQyBzb3VyY2UKKysjIHRyZWUuICBCeSBkZWZhdWx0LCBhbGwgRUdMSUJDIG9wdGlvbiBncm91cHMgYXJlIGVuYWJsZWQgLS0tIHRoZWlyCisrIyB2YXJpYWJsZXMgYXJlIHNldCB0byAneScuCisrIworKyMgQWZ0ZXIgaW5jbHVkaW5nICdvcHRpb24tZ3JvdXBzLmRlZmF1bHRzJywgdGhlIEVHTElCQyBtYWtlIG1hY2hpbmVyeQorKyMgaW5jbHVkZXMgdGhlIGZpbGUgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBmcm9tIHRoZSB0b3Agb2YgdGhlIGJ1aWxkCisrIyB0cmVlLCBpZiBpdCBpcyBwcmVzZW50LiAgRGV2ZWxvcGVycyBjYW4gcGxhY2UgYXNzaWdubWVudHMgdG8gb3B0aW9uCisrIyBncm91cCB2YXJpYWJsZXMgaW4gdGhhdCBmaWxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy4gIEZvciBleGFtcGxlLAorKyMgdG8gZGlzYWJsZSBhbiBvcHRpb24gZ3JvdXAsIHBsYWNlIGEgbGluZSBvZiB0aGUgZm9ybToKKysjCisrIyAgICBPUFRJT05fR1JPVVBfTkFNRSA9IG4KKysjCisrIyBpbiAnb3B0aW9uLWdyb3Vwcy5jb25maWcnIGF0IHRoZSB0b3Agb2YgeW91ciBidWlsZCB0cmVlLiAgVG8KKysjIGV4cGxpY2l0bHkgZW5hYmxlIGFuIG9wdGlvbiBncm91cCwgeW91IG1heSBhbHNvIHdyaXRlOgorKyMKKysjICAgIE9QVElPTl9HUk9VUF9OQU1FID0geQorKyMKKysjIGFsdGhvdWdoIHRoaXMgc2ltcGx5IHJlZXN0YWJsaXNoZXMgdGhlIHZhbHVlIGFscmVhZHkgc2V0IGJ5CisrIyAnb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cycuCisrCisrY29uZmlnIEVHTElCQ19BRFZBTkNFRF9JTkVUNgorKyAgIGJvb2wgIklQdjYgQWR2YW5jZWQgU29ja2V0cyBBUEkgc3VwcG9ydCAoUkZDMzU0MikiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZ1bmN0aW9ucyBzcGVjaWZpZWQgYnkgUkZDIDM1NDIsCisrICAgICAgICJBZHZhbmNlZCBTb2NrZXRzIEFwcGxpY2F0aW9uIFByb2dyYW0gSW50ZXJmYWNlIChBUEkpIGZvcgorKyAgICAgICBJUHY2Ii4KKysKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgaW5ldDZfb3B0X2FwcGVuZAorKyAgICAgICAgIGluZXQ2X29wdF9maW5kCisrICAgICAgICAgaW5ldDZfb3B0X2ZpbmlzaAorKyAgICAgICAgIGluZXQ2X29wdF9nZXRfdmFsCisrICAgICAgICAgaW5ldDZfb3B0X2luaXQKKysgICAgICAgICBpbmV0Nl9vcHRpb25fYWxsb2MKKysgICAgICAgICBpbmV0Nl9vcHRpb25fYXBwZW5kCisrICAgICAgICAgaW5ldDZfb3B0aW9uX2ZpbmQKKysgICAgICAgICBpbmV0Nl9vcHRpb25faW5pdAorKyAgICAgICAgIGluZXQ2X29wdGlvbl9uZXh0CisrICAgICAgICAgaW5ldDZfb3B0aW9uX3NwYWNlCisrICAgICAgICAgaW5ldDZfb3B0X25leHQKKysgICAgICAgICBpbmV0Nl9vcHRfc2V0X3ZhbAorKyAgICAgICAgIGluZXQ2X3J0aF9hZGQKKysgICAgICAgICBpbmV0Nl9ydGhfZ2V0YWRkcgorKyAgICAgICAgIGluZXQ2X3J0aF9pbml0CisrICAgICAgICAgaW5ldDZfcnRoX3JldmVyc2UKKysgICAgICAgICBpbmV0Nl9ydGhfc2VnbWVudHMKKysgICAgICAgICBpbmV0Nl9ydGhfc3BhY2UKKysKKytjb25maWcgRUdMSUJDX0JBQ0tUUkFDRQorKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgcHJvZHVjaW5nIGJhY2t0cmFjZXMiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHByb2R1Y2luZyBhIGxpc3Qgb2YKKysgICAgICAgdGhlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUgaW4gYSB0aHJlYWQsIGZyb20KKysgICAgICAgd2l0aGluIHRoZSB0aHJlYWQgaXRzZWxmLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvZnRlbiB1c2VkCisrICAgICAgIHdpdGhpbiBzaWduYWwgaGFuZGxlcnMsIHRvIHByb2R1Y2UgZGlhZ25vc3RpYyBvdXRwdXQuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGJhY2t0cmFjZQorKyAgICAgICAgIGJhY2t0cmFjZV9zeW1ib2xzCisrICAgICAgICAgYmFja3RyYWNlX3N5bWJvbHNfZmQKKysKKytjb25maWcgRUdMSUJDX0JJR19NQUNST1MKKysgICBib29sICJVc2UgZXh0ZW5zaXZlIGlubGluZSBjb2RlIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgc3BlY2lmaWVzIHdoZXRoZXIgY2VydGFpbiBwaWVjZXMgb2YgY29kZQorKyAgICAgICBzaG91bGQgYmUgaW5saW5lZCB0byBhY2hpZXZlIG1heGltdW0gc3BlZWQuICBJZiB0aGlzIG9wdGlvbgorKyAgICAgICBncm91cCBpcyBub3Qgc2VsZWN0ZWQsIGZ1bmN0aW9uIGNhbGxzIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLAorKyAgICAgICBoZW5jZSByZWR1Y2luZyB0aGUgbGlicmFyeSBmb290cHJpbnQuCisrCisrY29uZmlnIEVHTElCQ19CU0QKKysgICBib29sICJCU0Qtc3BlY2lmaWMgZnVuY3Rpb25zLCBhbmQgdGhlaXIgY29tcGF0aWJpbGl0eSBzdHVicyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBCU0Qga2VybmVscy4KKysgICAgICAgQSBudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGhhdmUgc3R1YiB2ZXJzaW9ucyB0aGF0IGFyZSBhbHNvCisrICAgICAgIGluY2x1ZGVkIGluIGxpYnJhcmllcyBidWlsdCBmb3Igbm9uLUJTRCBzeXN0ZW1zIGZvcgorKyAgICAgICBjb21wYXRpYmlsaXR5LgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBjaGZsYWdzCisrICAgICAgICAgZmNoZmxhZ3MKKysgICAgICAgICBsY2htb2QKKysgICAgICAgICByZXZva2UKKysgICAgICAgICBzZXRsb2dpbgorKworK2NvbmZpZyBFR0xJQkNfQ1hYX1RFU1RTCisrICAgYm9vbCAiVGVzdHMgdGhhdCBsaW5rIGFnYWluc3QgdGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJ5LiIKKysgICBkZXBlbmRzIG9uIFBPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8gJiYgRUdMSUJDX0xJQk0KKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGRvZXMgbm90IGluY2x1ZGUgYW55IEMgbGlicmFyeSBmdW5jdGlvbnM7CisrICAgICAgIGluc3RlYWQsIGl0IGNvbnRyb2xzIHdoaWNoIEVHTElCQyB0ZXN0cyBhbiBvcmRpbmFyeSAnbWFrZQorKyAgICAgICB0ZXN0cycgcnVucy4gIFdpdGggdGhpcyBncm91cCBkaXNhYmxlZCwgdGVzdHMgdGhhdCB3b3VsZAorKyAgICAgICBub3JtYWxseSBsaW5rIGFnYWluc3QgdGhlIHN0YW5kYXJkIEMrKyBsaWJyYXJ5IGFyZSBub3QKKysgICAgICAgcnVuLgorKworKyAgICAgICBUaGUgc3RhbmRhcmQgQysrIGxpYnJhcnkgZGVwZW5kcyBvbiB0aGUgbWF0aCBsaWJyYXJ5ICdsaWJtJyBhbmQKKysgICAgICAgdGhlIHdpZGUgY2hhcmFjdGVyIEkvTyBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gRUdMSUJDLiAgU28gdGhvc2UKKysgICAgICAgb3B0aW9uIGdyb3VwcyBtdXN0IGJlIGVuYWJsZWQgaWYgdGhpcyB0ZXN0IGlzIGVuYWJsZWQuCisrCisrY29uZmlnIEVHTElCQ19DQVRHRVRTCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgbWVzc2FnZSBjYXRhbG9ncyIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19MT0NBTEVfQ09ERQorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgbWVzc2FnZQorKyAgICAgICBjYXRhbG9nczogY2F0b3BlbiwgY2F0Y2xvc2UsIGFuZCBjYXRnZXRzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBkZXBlbmRzIG9uIHRoZSBFR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICAgb3B0aW9uIGdyb3VwLgorKworK2NvbmZpZyBFR0xJQkNfQ0hBUlNFVFMKKysgICBib29sICJpY29udi9nY29udiBjaGFyYWN0ZXIgc2V0IGNvbnZlcnNpb24gbGlicmFyaWVzIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgc3VwcG9ydCBmb3IgY2hhcmFjdGVyIHNldHMgb3RoZXIKKysgICAgICAgdGhhbiBBU0NJSSAoQU5TSV9YMy40LTE5NjgpIGFuZCBVbmljb2RlIGFuZCBJU08tMTA2NDYgaW4gdGhlaXIKKysgICAgICAgdmFyaW91cyBlbmNvZGluZ3MuICBUaGlzIGFmZmVjdHMgYm90aCB0aGUgY2hhcmFjdGVyIHNldHMKKysgICAgICAgc3VwcG9ydGVkIGJ5IHRoZSB3aWRlIGFuZCBtdWx0aWJ5dGUgY2hhcmFjdGVyIGZ1bmN0aW9ucywgYW5kCisrICAgICAgIHRob3NlIHN1cHBvcnRlZCBieSB0aGUgJ2ljb252JyBmdW5jdGlvbnMuCisrCisrICAgICAgIFdpdGggdGhpcyBvcHRpb24gZ3JvdXAgZGlzYWJsZWQsIEVHTElCQyBzdXBwb3J0cyBvbmx5IHRoZQorKyAgICAgICBmb2xsb3dpbmcgY2hhcmFjdGVyIHNldHM6CisrCisrICAgICAgICAgIEFOU0lfWDMuNCAgICAgICAgIC0gQVNDSUkKKysgICAgICAgICAgQU5TSV9YMy40LTE5NjgKKysgICAgICAgICAgQU5TSV9YMy40LTE5ODYKKysgICAgICAgICAgQVNDSUkKKysgICAgICAgICAgQ1AzNjcKKysgICAgICAgICAgQ1NBU0NJSQorKyAgICAgICAgICBJQk0zNjcKKysgICAgICAgICAgSVNPLUlSLTYKKysgICAgICAgICAgSVNPNjQ2LVVTCisrICAgICAgICAgIElTT182NDYuSVJWOjE5OTEKKysgICAgICAgICAgT1NGMDAwMTAwMjAKKysgICAgICAgICAgVVMKKysgICAgICAgICAgVVMtQVNDSUkKKysKKysgICAgICAgICAgMTA2NDYtMToxOTkzICAgICAgLSBJU08gMTA2NDYsIGluIGJpZy1lbmRpYW4gVUNTNCBmb3JtCisrICAgICAgICAgIDEwNjQ2LTE6MTk5My9VQ1M0CisrICAgICAgICAgIENTVUNTNAorKyAgICAgICAgICBJU08tMTA2NDYKKysgICAgICAgICAgSVNPLTEwNjQ2L1VDUzQKKysgICAgICAgICAgT1NGMDAwMTAxMDQKKysgICAgICAgICAgT1NGMDAwMTAxMDUKKysgICAgICAgICAgT1NGMDAwMTAxMDYKKysgICAgICAgICAgVUNTLTQKKysgICAgICAgICAgVUNTLTRCRQorKyAgICAgICAgICBVQ1M0CisrCisrICAgICAgICAgIFVDUy00TEUgICAgICAgICAgIC0gSVNPIDEwNjQ2LCBpbiBsaXR0bGUtZW5kaWFuIFVDUzQgZm9ybQorKworKyAgICAgICAgICBJU08tMTA2NDYvVVRGLTggICAtIElTTyAxMDY0NiwgaW4gVVRGLTggZm9ybQorKyAgICAgICAgICBJU08tMTA2NDYvVVRGOAorKyAgICAgICAgICBJU08tSVItMTkzCisrICAgICAgICAgIE9TRjA1MDEwMDAxCisrICAgICAgICAgIFVURi04CisrICAgICAgICAgIFVURjgKKysKKysgICAgICAgICAgSVNPLTEwNjQ2L1VDUzIgICAgLSBJU08gMTA2NDYsIGluIHRhcmdldC1lbmRpYW4gVUNTMiBmb3JtCisrICAgICAgICAgIE9TRjAwMDEwMTAwCisrICAgICAgICAgIE9TRjAwMDEwMTAxCisrICAgICAgICAgIE9TRjAwMDEwMTAyCisrICAgICAgICAgIFVDUy0yCisrICAgICAgICAgIFVDUzIKKysKKysgICAgICAgICAgVUNTLTJCRSAgICAgICAgICAgLSBJU08gMTA2NDYsIGluIGJpZy1lbmRpYW4gVUNTMiBmb3JtCisrICAgICAgICAgIFVOSUNPREVCSUcKKysKKysgICAgICAgICAgVUNTLTJMRSAgICAgICAgICAgLSBJU08gMTA2NDYsIGluIGxpdHRsZS1lbmRpYW4gVUNTMiBmb3JtCisrICAgICAgICAgIFVOSUNPREVMSVRUTEUKKysKKysgICAgICAgICAgV0NIQVJfVCAgICAgICAgICAgLSBFR0xJQkMncyBpbnRlcm5hbCBmb3JtICh0YXJnZXQtZW5kaWFuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLWJpdCBJU08gMTA2NDYpCisrCisrY29uZmlnIEVHTElCQ19DUllQVAorKyAgIGJvb2wgIkVuY3J5cHRpb24gbGlicmFyeSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGliY3J5cHQnIGxpYnJhcnkgd2hpY2gKKysgICAgICAgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBvbmUtd2F5IGVuY3J5cHRpb24uICBTdXBwb3J0ZWQKKysgICAgICAgZW5jcnlwdGlvbiBhbGdvcml0aG1zIGluY2x1ZGUgTUQ1LCBTSEEtMjU2LCBTSEEtNTEyIGFuZCBERVMuCisrCisrY29uZmlnIEVHTElCQ19DUllQVF9VRkMKKysgICBib29sICJVbHRyYSBmYXN0IGBjcnlwdCcgaW1wbGVtZW50YXRpb24iCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfQ1JZUFQKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIHByb3ZpZGVzIHVsdHJhIGZhc3QgREVTLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mCisrICAgICAgIHRoZSBgY3J5cHQnIGZ1bmN0aW9uLiAgV2hlbiB0aGlzIG9wdGlvbiBncm91cCBpcyBkaXNhYmxlZCwKKysgICAgICAgKGEpIHRoZSBsaWJyYXJ5IHdpbGwgbm90IHByb3ZpZGUgdGhlIHNldGtleVtfcl0gYW5kIGVuY3J5cHRbX3JdCisrICAgICAgIGZ1bmN0aW9ucyBhbmQgKGIpIHRoZSBjcnlwdFtfcl0gZnVuY3Rpb24gd2lsbCByZXR1cm4gTlVMTCBhbmQgc2V0IHRoZQorKyAgICAgICBlcnJubyB0byBFTk9TWVMgaWYgL3NhbHQvIHBhc3NlZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGVpdGhlciBNRDUsCisrICAgICAgIFNIQS0yNTYgb3IgU0hBLTUxMiBhbGdvcml0aG0uCisrCisrY29uZmlnIEVHTElCQ19EQl9BTElBU0VTCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgdGhlIG1haWwgYWxpYXNlcyBkYXRhYmFzZSIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZHVlcyBmdW5jdGlvbnMgZm9yIGxvb2tpbmcgdXAgbWFpbAorKyAgICAgICBhbGlhc2VzIGluICcvZXRjL2FsaWFzZXMnIG9yIHVzaW5nIG5zc3dpdGNoLiAgSXQgaW5jbHVkZXMgdGhlCisrICAgICAgIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICAgZW5kYWxpYXNlbnQKKysgICAgICAgICBnZXRhbGlhc2J5bmFtZQorKyAgICAgICAgIGdldGFsaWFzYnluYW1lX3IKKysgICAgICAgICBnZXRhbGlhc2VudAorKyAgICAgICAgIGdldGFsaWFzZW50X3IKKysgICAgICAgICBzZXRhbGlhc2VudAorKworKyAgICAgICBXaGVuIHRoaXMgb3B0aW9uIGdyb3VwIGlzIGRpc2FibGVkLCB0aGUgTlNTIHNlcnZpY2UgbGlicmFyaWVzCisrICAgICAgIGFsc28gbGFjayBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGVpciBtYWlsIGFsaWFzIHRhYmxlcy4KKysKKytjb25maWcgRUdMSUJDX0VOVloKKysgICBib29sICJGdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGVudnotc3R5bGUgZW52aXJvbm1lbnQgdmVjdG9ycy4iCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBjb250YWlucyBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIGFuZCBvcGVyYXRpbmcKKysgICAgICAgb24gZW52eiB2ZWN0b3JzLiAgQW4gImVudnogdmVjdG9yIiBpcyBhIHZlY3RvciBvZiBzdHJpbmdzIGluIGEKKysgICAgICAgY29udGlndW91cyBibG9jayBvZiBtZW1vcnksIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBhIG5hbWUtdmFsdWUKKysgICAgICAgcGFpciwgYW5kIGVsZW1lbnRzIGFyZSBzZXBhcmF0ZWQgZnJvbSB0aGVpciBuZWlnaGJvcnMgYnkgbnVsbAorKyAgICAgICBjaGFyYWN0ZXJzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIGVudnpfYWRkICAgICAgICBlbnZ6X21lcmdlCisrICAgICAgICBlbnZ6X2VudHJ5ICAgICAgZW52el9yZW1vdmUKKysgICAgICAgIGVudnpfZ2V0ICAgICAgICBlbnZ6X3N0cmlwCisrCisrY29uZmlnIEVHTElCQ19GQ1ZUCisrICAgYm9vbCAiRnVuY3Rpb25zIGZvciBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgdG8gc3RyaW5ncyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgY29udmVydGluZworKyAgICAgICBmbG9hdGluZy1wb2ludCBudW1iZXJzIHRvIHN0cmluZ3MuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVjdnQgICAgICAgICAgIHFlY3Z0CisrCSBlY3Z0X3IJCXFlY3Z0X3IKKysgICAgICAgICBmY3Z0CQlxZmN2dAorKwkgZmN2dF9yCQlxZmN2dF9yCisrICAgICAgICAgZ2N2dAkJcWdjdnQKKysKKytjb25maWcgRUdMSUJDX0ZNVE1TRworKyAgIGJvb2wgIkZ1bmN0aW9ucyBmb3IgZm9ybWF0dGluZyBtZXNzYWdlcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGFkZHNldmVyaXR5ICAgIGZtdG1zZworKworK2NvbmZpZyBFR0xJQkNfRlNUQUIKKysgICBib29sICJBY2Nlc3MgZnVuY3Rpb25zIGZvciAnZnN0YWInIgorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIHRoZSBtb3VudAorKyAgICAgICBwb2ludCBzcGVjaWZpY2F0aW9uIHRhYmxlLCAnL2V0Yy9mc3RhYicuICBUaGVzZSBmdW5jdGlvbnMgYXJlCisrICAgICAgIG5vdCBpbmNsdWRlZCBpbiB0aGUgUE9TSVggc3RhbmRhcmQsIHdoaWNoIHByb3ZpZGVzIHRoZQorKyAgICAgICAnZ2V0bW50ZW50JyBmYW1pbHkgb2YgZnVuY3Rpb25zIGluc3RlYWQuCisrCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorKworKyAgICAgICAgIGVuZGZzZW50ICAgICAgIGdldGZzc3BlYworKyAgICAgICAgIGdldGZzZW50ICAgICAgIHNldGZzZW50CisrICAgICAgICAgZ2V0ZnNmaWxlCisrCisrY29uZmlnIEVHTElCQ19GVFJBVkVSU0UKKysgICBib29sICJGdW5jdGlvbnMgZm9yIHRyYXZlcnNpbmcgZmlsZSBoaWVyYXJjaGllcyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgdHJhdmVyc2luZyBmaWxlCisrICAgICAgIFVOSVggZmlsZSBoaWVyYWNoaWVzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBmdHNfb3BlbiAgICAgICBmdHcKKysJIGZ0c19yZWFkCW5mdHcKKysgICAgICAgICBmdHNfY2hpbGRyZW4JZnR3NjQKKysJIGZ0c19zZXQJbmZ0dzY0CisrICAgICAgICAgZnRzX2Nsb3NlCisrCisrY29uZmlnIEVHTElCQ19HRVRMT0dJTgorKyAgIGJvb2wgIlRoZSBnZXRsb2dpbiBmdW5jdGlvbiIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19VVE1QCisrICAgaGVscAorKyAgICAgICBUaGlzIGZ1bmN0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSAnZ2V0bG9naW4nIGFuZCAnZ2V0bG9naW5fcicKKysgICAgICAgZnVuY3Rpb25zLCB3aGljaCByZXR1cm4gdGhlIHVzZXIgbmFtZSBhc3NvY2lhdGVkIGJ5IHRoZSBsb2dpbgorKyAgICAgICBhY3Rpdml0eSB3aXRoIHRoZSBjdXJyZW50IHByb2Nlc3MncyBjb250cm9sbGluZyB0ZXJtaW5hbC4KKysKKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBkaXNhYmxlZCwgdGhlICdnbG9iJyBmdW5jdGlvbiB3aWxsIG5vdAorKyAgICAgICBmYWxsIGJhY2sgb24gJ2dldGxvZ2luJyB0byBmaW5kIHRoZSB1c2VyJ3MgbG9naW4gbmFtZSBmb3IgdGlsZGUKKysgICAgICAgZXhwYW5zaW9uIHdoZW4gdGhlICdIT01FJyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LgorKworK2NvbmZpZyBFR0xJQkNfSUROCisrICAgYm9vbCAiSW50ZXJuYXRpb25hbCBkb21haW4gbmFtZXMgc3VwcG9ydCIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBgbGliY2lkbicgbGlicmFyeSB3aGljaAorKyAgICAgICBwcm92aWRlcyBzdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsIGRvbWFpbiBuYW1lcy4KKysKKytjb25maWcgRUdMSUJDX0lORVQKKysgICBib29sICJOZXR3b3JraW5nIHN1cHBvcnQiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBuZXR3b3JraW5nLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQKKysgICAgICAgZGF0YS4gIFdpdGggRUdMSUJDX0lORVQgZGlzYWJsZWQsIHRoZSBFR0xJQkMKKysgICAgICAgaW5zdGFsbGF0aW9uIGFuZCBBUEkgY2hhbmdlcyBhcyBmb2xsb3dzOgorKworKyAgICAgICAtIFRoZSBmb2xsb3dpbmcgbGlicmFyaWVzIGFyZSBub3QgaW5zdGFsbGVkOgorKworKyAgICAgICAgIGxpYm5zbAorKyAgICAgICAgIGxpYm5zc19jb21wYXQKKysgICAgICAgICBsaWJuc3NfZG5zCisrICAgICAgICAgbGlibnNzX2hlc2lvZAorKyAgICAgICAgIGxpYm5zc19uaXMKKysgICAgICAgICBsaWJuc3NfbmlzcGx1cworKyAgICAgICAgIGxpYnJlc29sdgorKworKyAgICAgICAtIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgYXJlIG9taXR0ZWQgZnJvbSBsaWJjOgorKworKyAgICAgICAgIGF1dGhkZXNfY3JlYXRlICAgICAgICAgICBoc3RyZXJyb3IgICAgICAgICAgICAgIHN2Y19mZHNldAorKyAgICAgICAgIGF1dGhkZXNfZ2V0dWNyZWQgICAgICAgICBodG9ubCAgICAgICAgICAgICAgICAgIHN2Y19nZXRyZXEKKysgICAgICAgICBhdXRoZGVzX3BrX2NyZWF0ZSAgICAgICAgaHRvbnMgICAgICAgICAgICAgICAgICBzdmNfZ2V0cmVxX2NvbW1vbgorKyAgICAgICAgIGF1dGhub25lX2NyZWF0ZSAgICAgICAgICBpZl9mcmVlbmFtZWluZGV4ICAgICAgIHN2Y19nZXRyZXFfcG9sbAorKyAgICAgICAgIGF1dGh1bml4X2NyZWF0ZSAgICAgICAgICBpZl9pbmRleHRvbmFtZSAgICAgICAgIHN2Y19nZXRyZXFzZXQKKysgICAgICAgICBhdXRodW5peF9jcmVhdGVfZGVmYXVsdCAgaWZfbmFtZWluZGV4ICAgICAgICAgICBzdmNfbWF4X3BvbGxmZAorKyAgICAgICAgIGJpbmRyZXN2cG9ydCAgICAgICAgICAgICBpZl9uYW1ldG9pbmRleCAgICAgICAgIHN2Y19wb2xsZmQKKysgICAgICAgICBjYWxscnBjICAgICAgICAgICAgICAgICAgaW42YWRkcl9hbnkgICAgICAgICAgICBzdmNyYXdfY3JlYXRlCisrICAgICAgICAgY2JjX2NyeXB0ICAgICAgICAgICAgICAgIGluNmFkZHJfbG9vcGJhY2sgICAgICAgc3ZjX3JlZ2lzdGVyCisrICAgICAgICAgY2xudF9icm9hZGNhc3QgICAgICAgICAgIGluZXQ2X29wdF9hcHBlbmQgICAgICAgc3ZjX3J1bgorKyAgICAgICAgIGNsbnRfY3JlYXRlICAgICAgICAgICAgICBpbmV0Nl9vcHRfZmluZCAgICAgICAgIHN2Y19zZW5kcmVwbHkKKysgICAgICAgICBjbG50X3BjcmVhdGVlcnJvciAgICAgICAgaW5ldDZfb3B0X2ZpbmlzaCAgICAgICBzdmN0Y3BfY3JlYXRlCisrICAgICAgICAgY2xudF9wZXJybm8gICAgICAgICAgICAgIGluZXQ2X29wdF9nZXRfdmFsICAgICAgc3ZjdWRwX2J1ZmNyZWF0ZQorKyAgICAgICAgIGNsbnRfcGVycm9yICAgICAgICAgICAgICBpbmV0Nl9vcHRfaW5pdCAgICAgICAgIHN2Y3VkcF9jcmVhdGUKKysgICAgICAgICBjbG50cmF3X2NyZWF0ZSAgICAgICAgICAgaW5ldDZfb3B0aW9uX2FsbG9jICAgICBzdmN1ZHBfZW5hYmxlY2FjaGUKKysgICAgICAgICBjbG50X3NwY3JlYXRlZXJyb3IgICAgICAgaW5ldDZfb3B0aW9uX2FwcGVuZCAgICBzdmN1bml4X2NyZWF0ZQorKyAgICAgICAgIGNsbnRfc3BlcnJubyAgICAgICAgICAgICBpbmV0Nl9vcHRpb25fZmluZCAgICAgIHN2Y3VuaXhmZF9jcmVhdGUKKysgICAgICAgICBjbG50X3NwZXJyb3IgICAgICAgICAgICAgaW5ldDZfb3B0aW9uX2luaXQgICAgICBzdmNfdW5yZWdpc3RlcgorKyAgICAgICAgIGNsbnR0Y3BfY3JlYXRlICAgICAgICAgICBpbmV0Nl9vcHRpb25fbmV4dCAgICAgIHVzZXIybmV0bmFtZQorKyAgICAgICAgIGNsbnR1ZHBfYnVmY3JlYXRlICAgICAgICBpbmV0Nl9vcHRpb25fc3BhY2UgICAgIHhkZWNyeXB0CisrICAgICAgICAgY2xudHVkcF9jcmVhdGUgICAgICAgICAgIGluZXQ2X29wdF9uZXh0ICAgICAgICAgeGRyX2FjY2VwdGVkX3JlcGx5CisrICAgICAgICAgY2xudHVuaXhfY3JlYXRlICAgICAgICAgIGluZXQ2X29wdF9zZXRfdmFsICAgICAgeGRyX2FycmF5CisrICAgICAgICAgZGVzX3NldHBhcml0eSAgICAgICAgICAgIGluZXQ2X3J0aF9hZGQgICAgICAgICAgeGRyX2F1dGhkZXNfY3JlZAorKyAgICAgICAgIGVjYl9jcnlwdCAgICAgICAgICAgICAgICBpbmV0Nl9ydGhfZ2V0YWRkciAgICAgIHhkcl9hdXRoZGVzX3ZlcmYKKysgICAgICAgICBlbmRhbGlhc2VudCAgICAgICAgICAgICAgaW5ldDZfcnRoX2luaXQgICAgICAgICB4ZHJfYXV0aHVuaXhfcGFybXMKKysgICAgICAgICBlbmRob3N0ZW50ICAgICAgICAgICAgICAgaW5ldDZfcnRoX3JldmVyc2UgICAgICB4ZHJfYm9vbAorKyAgICAgICAgIGVuZG5ldGVudCAgICAgICAgICAgICAgICBpbmV0Nl9ydGhfc2VnbWVudHMgICAgIHhkcl9ieXRlcworKyAgICAgICAgIGVuZG5ldGdyZW50ICAgICAgICAgICAgICBpbmV0Nl9ydGhfc3BhY2UgICAgICAgIHhkcl9jYWxsaGRyCisrICAgICAgICAgZW5kcHJvdG9lbnQgICAgICAgICAgICAgIGluZXRfYWRkciAgICAgICAgICAgICAgeGRyX2NhbGxtc2cKKysgICAgICAgICBlbmRycGNlbnQgICAgICAgICAgICAgICAgaW5ldF9hdG9uICAgICAgICAgICAgICB4ZHJfY2hhcgorKyAgICAgICAgIGVuZHNlcnZlbnQgICAgICAgICAgICAgICBpbmV0X2xuYW9mICAgICAgICAgICAgIHhkcl9jcnlwdGtleWFyZworKyAgICAgICAgIGV0aGVyX2F0b24gICAgICAgICAgICAgICBpbmV0X21ha2VhZGRyICAgICAgICAgIHhkcl9jcnlwdGtleWFyZzIKKysgICAgICAgICBldGhlcl9hdG9uX3IgICAgICAgICAgICAgaW5ldF9uZXRvZiAgICAgICAgICAgICB4ZHJfY3J5cHRrZXlyZXMKKysgICAgICAgICBldGhlcl9ob3N0dG9uICAgICAgICAgICAgaW5ldF9uZXR3b3JrICAgICAgICAgICB4ZHJfZGVzX2Jsb2NrCisrICAgICAgICAgZXRoZXJfbGluZSAgICAgICAgICAgICAgIGluZXRfbnNhcF9hZGRyICAgICAgICAgeGRyX2RvdWJsZQorKyAgICAgICAgIGV0aGVyX250b2EgICAgICAgICAgICAgICBpbmV0X25zYXBfbnRvYSAgICAgICAgIHhkcl9lbnVtCisrICAgICAgICAgZXRoZXJfbnRvYV9yICAgICAgICAgICAgIGluZXRfbnRvYSAgICAgICAgICAgICAgeGRyX2Zsb2F0CisrICAgICAgICAgZXRoZXJfbnRvaG9zdCAgICAgICAgICAgIGluZXRfbnRvcCAgICAgICAgICAgICAgeGRyX2ZyZWUKKysgICAgICAgICBmcmVlYWRkcmluZm8gICAgICAgICAgICAgaW5ldF9wdG9uICAgICAgICAgICAgICB4ZHJfZ2V0Y3JlZHJlcworKyAgICAgICAgIGZyZWVpZmFkZHJzICAgICAgICAgICAgICBpbm5ldGdyICAgICAgICAgICAgICAgIHhkcl9oeXBlcgorKyAgICAgICAgIGdhaV9zdHJlcnJvciAgICAgICAgICAgICBpcnVzZXJvayAgICAgICAgICAgICAgIHhkcl9pbnQKKysgICAgICAgICBnZXRhZGRyaW5mbyAgICAgICAgICAgICAgaXJ1c2Vyb2tfYWYgICAgICAgICAgICB4ZHJfaW50MTZfdAorKyAgICAgICAgIGdldGFsaWFzYnluYW1lICAgICAgICAgICBrZXlfZGVjcnlwdHNlc3Npb24gICAgIHhkcl9pbnQzMl90CisrICAgICAgICAgZ2V0YWxpYXNieW5hbWVfciAgICAgICAgIGtleV9kZWNyeXB0c2Vzc2lvbl9wayAgeGRyX2ludDY0X3QKKysgICAgICAgICBnZXRhbGlhc2VudCAgICAgICAgICAgICAga2V5X2VuY3J5cHRzZXNzaW9uICAgICB4ZHJfaW50OF90CisrICAgICAgICAgZ2V0YWxpYXNlbnRfciAgICAgICAgICAgIGtleV9lbmNyeXB0c2Vzc2lvbl9wayAgeGRyX2tleWJ1ZgorKyAgICAgICAgIGdldGhvc3RieWFkZHIgICAgICAgICAgICBrZXlfZ2VuZGVzICAgICAgICAgICAgIHhkcl9rZXlfbmV0c3RhcmcKKysgICAgICAgICBnZXRob3N0YnlhZGRyX3IgICAgICAgICAga2V5X2dldF9jb252ICAgICAgICAgICB4ZHJfa2V5X25ldHN0cmVzCisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZSAgICAgICAgICAgIGtleV9zZWNyZXRrZXlfaXNfc2V0ICAgeGRyX2tleXN0YXR1cworKyAgICAgICAgIGdldGhvc3RieW5hbWUyICAgICAgICAgICBrZXlfc2V0bmV0ICAgICAgICAgICAgIHhkcl9sb25nCisrICAgICAgICAgZ2V0aG9zdGJ5bmFtZTJfciAgICAgICAgIGtleV9zZXRzZWNyZXQgICAgICAgICAgeGRyX2xvbmdsb25nX3QKKysgICAgICAgICBnZXRob3N0YnluYW1lX3IgICAgICAgICAgbmV0bmFtZTJob3N0ICAgICAgICAgICB4ZHJtZW1fY3JlYXRlCisrICAgICAgICAgZ2V0aG9zdGVudCAgICAgICAgICAgICAgIG5ldG5hbWUydXNlciAgICAgICAgICAgeGRyX25ldG5hbWVzdHIKKysgICAgICAgICBnZXRob3N0ZW50X3IgICAgICAgICAgICAgbnRvaGwgICAgICAgICAgICAgICAgICB4ZHJfbmV0b2JqCisrICAgICAgICAgZ2V0aWZhZGRycyAgICAgICAgICAgICAgIG50b2hzICAgICAgICAgICAgICAgICAgeGRyX29wYXF1ZQorKyAgICAgICAgIGdldGlwdjRzb3VyY2VmaWx0ZXIgICAgICBwYXNzd2QyZGVzICAgICAgICAgICAgIHhkcl9vcGFxdWVfYXV0aAorKyAgICAgICAgIGdldF9teWFkZHJlc3MgICAgICAgICAgICBwbWFwX2dldG1hcHMgICAgICAgICAgIHhkcl9wbWFwCisrICAgICAgICAgZ2V0bmFtZWluZm8gICAgICAgICAgICAgIHBtYXBfZ2V0cG9ydCAgICAgICAgICAgeGRyX3BtYXBsaXN0CisrICAgICAgICAgZ2V0bmV0YnlhZGRyICAgICAgICAgICAgIHBtYXBfcm10Y2FsbCAgICAgICAgICAgeGRyX3BvaW50ZXIKKysgICAgICAgICBnZXRuZXRieWFkZHJfciAgICAgICAgICAgcG1hcF9zZXQgICAgICAgICAgICAgICB4ZHJfcXVhZF90CisrICAgICAgICAgZ2V0bmV0YnluYW1lICAgICAgICAgICAgIHBtYXBfdW5zZXQgICAgICAgICAgICAgeGRycmVjX2NyZWF0ZQorKyAgICAgICAgIGdldG5ldGJ5bmFtZV9yICAgICAgICAgICByY21kICAgICAgICAgICAgICAgICAgIHhkcnJlY19lbmRvZnJlY29yZAorKyAgICAgICAgIGdldG5ldGVudCAgICAgICAgICAgICAgICByY21kX2FmICAgICAgICAgICAgICAgIHhkcnJlY19lb2YKKysgICAgICAgICBnZXRuZXRlbnRfciAgICAgICAgICAgICAgcmVnaXN0ZXJycGMgICAgICAgICAgICB4ZHJyZWNfc2tpcHJlY29yZAorKyAgICAgICAgIGdldG5ldGdyZW50ICAgICAgICAgICAgICByZXNfaW5pdCAgICAgICAgICAgICAgIHhkcl9yZWZlcmVuY2UKKysgICAgICAgICBnZXRuZXRncmVudF9yICAgICAgICAgICAgcmV4ZWMgICAgICAgICAgICAgICAgICB4ZHJfcmVqZWN0ZWRfcmVwbHkKKysgICAgICAgICBnZXRuZXRuYW1lICAgICAgICAgICAgICAgcmV4ZWNfYWYgICAgICAgICAgICAgICB4ZHJfcmVwbHltc2cKKysgICAgICAgICBnZXRwcm90b2J5bmFtZSAgICAgICAgICAgcmV4ZWNvcHRpb25zICAgICAgICAgICB4ZHJfcm10Y2FsbF9hcmdzCisrICAgICAgICAgZ2V0cHJvdG9ieW5hbWVfciAgICAgICAgIHJwY19jcmVhdGVlcnIgICAgICAgICAgeGRyX3JtdGNhbGxyZXMKKysgICAgICAgICBnZXRwcm90b2J5bnVtYmVyICAgICAgICAgcnJlc3Zwb3J0ICAgICAgICAgICAgICB4ZHJfc2hvcnQKKysgICAgICAgICBnZXRwcm90b2J5bnVtYmVyX3IgICAgICAgcnJlc3Zwb3J0X2FmICAgICAgICAgICB4ZHJfc2l6ZW9mCisrICAgICAgICAgZ2V0cHJvdG9lbnQgICAgICAgICAgICAgIHJ0aW1lICAgICAgICAgICAgICAgICAgeGRyc3RkaW9fY3JlYXRlCisrICAgICAgICAgZ2V0cHJvdG9lbnRfciAgICAgICAgICAgIHJ1c2Vyb2sgICAgICAgICAgICAgICAgeGRyX3N0cmluZworKyAgICAgICAgIGdldHB1YmxpY2tleSAgICAgICAgICAgICBydXNlcm9rX2FmICAgICAgICAgICAgIHhkcl91X2NoYXIKKysgICAgICAgICBnZXRycGNieW5hbWUgICAgICAgICAgICAgcnVzZXJwYXNzICAgICAgICAgICAgICB4ZHJfdV9oeXBlcgorKyAgICAgICAgIGdldHJwY2J5bmFtZV9yICAgICAgICAgICBzZXRhbGlhc2VudCAgICAgICAgICAgIHhkcl91X2ludAorKyAgICAgICAgIGdldHJwY2J5bnVtYmVyICAgICAgICAgICBzZXRob3N0ZW50ICAgICAgICAgICAgIHhkcl91aW50MTZfdAorKyAgICAgICAgIGdldHJwY2J5bnVtYmVyX3IgICAgICAgICBzZXRpcHY0c291cmNlZmlsdGVyICAgIHhkcl91aW50MzJfdAorKyAgICAgICAgIGdldHJwY2VudCAgICAgICAgICAgICAgICBzZXRuZXRlbnQgICAgICAgICAgICAgIHhkcl91aW50NjRfdAorKyAgICAgICAgIGdldHJwY2VudF9yICAgICAgICAgICAgICBzZXRuZXRncmVudCAgICAgICAgICAgIHhkcl91aW50OF90CisrICAgICAgICAgZ2V0cnBjcG9ydCAgICAgICAgICAgICAgIHNldHByb3RvZW50ICAgICAgICAgICAgeGRyX3VfbG9uZworKyAgICAgICAgIGdldHNlY3JldGtleSAgICAgICAgICAgICBzZXRycGNlbnQgICAgICAgICAgICAgIHhkcl91X2xvbmdsb25nX3QKKysgICAgICAgICBnZXRzZXJ2YnluYW1lICAgICAgICAgICAgc2V0c2VydmVudCAgICAgICAgICAgICB4ZHJfdW5pb24KKysgICAgICAgICBnZXRzZXJ2YnluYW1lX3IgICAgICAgICAgc2V0c291cmNlZmlsdGVyICAgICAgICB4ZHJfdW5peGNyZWQKKysgICAgICAgICBnZXRzZXJ2Ynlwb3J0ICAgICAgICAgICAgc3ZjYXV0aGRlc19zdGF0cyAgICAgICB4ZHJfdV9xdWFkX3QKKysgICAgICAgICBnZXRzZXJ2Ynlwb3J0X3IgICAgICAgICAgc3ZjZXJyX2F1dGggICAgICAgICAgICB4ZHJfdV9zaG9ydAorKyAgICAgICAgIGdldHNlcnZlbnQgICAgICAgICAgICAgICBzdmNlcnJfZGVjb2RlICAgICAgICAgIHhkcl92ZWN0b3IKKysgICAgICAgICBnZXRzZXJ2ZW50X3IgICAgICAgICAgICAgc3ZjZXJyX25vcHJvYyAgICAgICAgICB4ZHJfdm9pZAorKyAgICAgICAgIGdldHNvdXJjZWZpbHRlciAgICAgICAgICBzdmNlcnJfbm9wcm9nICAgICAgICAgIHhkcl93cmFwc3RyaW5nCisrICAgICAgICAgaF9lcnJsaXN0ICAgICAgICAgICAgICAgIHN2Y2Vycl9wcm9ndmVycyAgICAgICAgeGVuY3J5cHQKKysgICAgICAgICBoX2Vycm5vICAgICAgICAgICAgICAgICAgc3ZjZXJyX3N5c3RlbWVyciAgICAgICB4cHJ0X3JlZ2lzdGVyCisrICAgICAgICAgaGVycm9yICAgICAgICAgICAgICAgICAgIHN2Y2Vycl93ZWFrYXV0aCAgICAgICAgeHBydF91bnJlZ2lzdGVyCisrICAgICAgICAgaF9uZXJyICAgICAgICAgICAgICAgICAgIHN2Y19leGl0CisrICAgICAgICAgaG9zdDJuZXRuYW1lICAgICAgICAgICAgIHN2Y2ZkX2NyZWF0ZQorKworKyAgICAgICAtIFRoZSBycGNnZW4sIG5zY2QsIGFuZCBycGNpbmZvIGNvbW1hbmRzIGFyZSBub3QgaW5zdGFsbGVkLgorKworKyAgICAgICAtIFRoZSAncnBjJyBmaWxlIChhIHRleHQgZmlsZSBsaXN0aW5nIFJQQyBzZXJ2aWNlcykgaXMgbm90IGluc3RhbGxlZC4KKysKKysgICAgICAgU29ja2V0LXJlbGF0ZWQgc3lzdGVtIGNhbGxzIGRvIG5vdCBmYWxsIGluIHRoaXMgb3B0aW9uIGdyb3VwLAorKyAgICAgICBiZWNhdXNlIG1hbnkgYXJlIGFsc28gdXNlZCBmb3Igb3RoZXIgaW50ZXItcHJvY2VzcworKyAgICAgICBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbXMuICBGb3IgZXhhbXBsZSwgdGhlICdzeXNsb2cnIHJvdXRpbmVzCisrICAgICAgIHVzZSBVbml4LWRvbWFpbiBzb2NrZXRzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHN5c2xvZyBkYWVtb247CisrICAgICAgIHN5c2xvZyBpcyB2YWx1YWJsZSBpbiBub24tbmV0d29ya2VkIGNvbnRleHRzLgorKworK2NvbmZpZyBFR0xJQkNfSU5FVF9BTkwKKysgICBib29sICJBc3luY2hyb25vdXMgbmFtZSBsb29rdXAiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfSU5FVAorKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGBsaWJhbmwnIGxpYnJhcnkgd2hpY2gKKysgICAgICAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYXN5bmNocm9ub3VzIG5hbWUgbG9va3VwLgorKworK2NvbmZpZyBFR0xJQkNfTElCTQorKyAgIGJvb2wgImxpYm0gKG1hdGggbGlicmFyeSkiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgJ2xpYm0nIGxpYnJhcnksIGNvbnRhaW5pbmcKKysgICAgICAgbWF0aGVtYXRpY2FsIGZ1bmN0aW9ucy4gIElmIHRoaXMgb3B0aW9uIGdyb3VwIGlzIG9taXR0ZWQsIHRoZW4KKysgICAgICAgYW4gRUdMSUJDIGluc3RhbGxhdGlvbiBkb2VzIG5vdCBpbmNsdWRlIHNoYXJlZCBvciB1bnNoYXJlZCB2ZXJzaW9ucworKyAgICAgICBvZiB0aGUgbWF0aCBsaWJyYXJ5LgorKworKyAgICAgICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCByZW1vdmUgYWxsIGZsb2F0aW5nLXBvaW50IHJlbGF0ZWQKKysgICAgICAgZnVuY3Rpb25hbGl0eSBmcm9tIEVHTElCQzsgZm9yIGV4YW1wbGUsICdwcmludGYnIGFuZCAnc2NhbmYnCisrICAgICAgIGNhbiBzdGlsbCBwcmludCBhbmQgcmVhZCBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2l0aCB0aGlzIG9wdGlvbgorKyAgICAgICBncm91cCBkaXNhYmxlZC4KKysKKysgICAgICAgTm90ZSB0aGF0IHRoZSBJU08gU3RhbmRhcmQgQysrIGxpYnJhcnkgJ2xpYnN0ZGMrKycgZGVwZW5kcyBvbgorKyAgICAgICBFR0xJQkMncyBtYXRoIGxpYnJhcnkgJ2xpYm0nLiAgSWYgeW91IGRpc2FibGUgdGhpcyBvcHRpb24KKysgICAgICAgZ3JvdXAsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGJ1aWxkICdsaWJzdGRjKysnIGFnYWluc3QgdGhlCisrICAgICAgIHJlc3VsdGluZyBFR0xJQkMgaW5zdGFsbGF0aW9uLgorKworK2NvbmZpZyBFR0xJQkNfTE9DQUxFUworKyAgIGJvb2wgIkxvY2FsZSBkZWZpbml0aW9ucyIKKysgICBoZWxwCisrICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGFsbCBsb2NhbGUgZGVmaW5pdGlvbnMgb3RoZXIgdGhhbgorKyAgICAgICB0aGF0IGZvciB0aGUgIkMiIGxvY2FsZS4gIElmIHRoaXMgb3B0aW9uIGdyb3VwIGlzIG9taXR0ZWQsIHRoZW4KKysgICAgICAgb25seSB0aGUgIkMiIGxvY2FsZSBpcyBzdXBwb3J0ZWQuCisrCisrCisrY29uZmlnIEVHTElCQ19MT0NBTEVfQ09ERQorKyAgIGJvb2wgIkxvY2FsZSBmdW5jdGlvbnMiCisrICAgZGVwZW5kcyBvbiBQT1NJWF9DX0xBTkdfV0lERV9DSEFSCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBsb2NhbGUgc3VwcG9ydCBmdW5jdGlvbnMsIHByb2dyYW1zLAorKyAgICAgICBhbmQgbGlicmFyaWVzLiAgV2l0aCBFR0xJQkNfTE9DQUxFX0NPREUgZGlzYWJsZWQsCisrICAgICAgIEVHTElCQyBzdXBwb3J0cyBvbmx5IHRoZSAnQycgbG9jYWxlIChhbHNvIGtub3duIGFzICdQT1NJWCcpLAorKyAgICAgICBhbmQgaWdub3JlcyB0aGUgc2V0dGluZ3Mgb2YgdGhlICdMQU5HJyBhbmQgJ0xDXyonIGVudmlyb25tZW50CisrICAgICAgIHZhcmlhYmxlcy4KKysKKysgICAgICAgV2l0aCBFR0xJQkNfTE9DQUxFX0NPREUgZGlzYWJsZWQsIHRoZSBmb2xsb3dpbmcKKysgICAgICAgZnVuY3Rpb25zIGFyZSBvbWl0dGVkIGZyb20gbGliYzoKKysKKysgICAgICAgICBkdXBsb2NhbGUgICBsb2NhbGVjb252ICBubF9sYW5naW5mbyAgICBycG1hdGNoICBzdHJmbW9uX2wKKysgICAgICAgICBmcmVlbG9jYWxlICBuZXdsb2NhbGUgICBubF9sYW5naW5mb19sICBzdHJmbW9uICB1c2Vsb2NhbGUKKysKKysgICAgICAgRnVydGhlcm1vcmUsIG9ubHkgdGhlIExDX0NUWVBFIGFuZCBMQ19USU1FIGNhdGVnb3JpZXMgb2YgdGhlCisrICAgICAgIHN0YW5kYXJkICJDIiBsb2NhbGUgYXJlIGF2YWlsYWJsZS4KKysKKysgICAgICAgVGhlIEVHTElCQ19DQVRHRVRTIG9wdGlvbiBncm91cCBkZXBlbmRzIG9uIHRoaXMgb3B0aW9uIGdyb3VwLgorKworKworK2NvbmZpZyBFR0xJQkNfTUVNVVNBR0UKKysgICBib29sICJNZW1vcnkgcHJvZmlsaW5nIGxpYnJhcnkiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgYGxpYm1lbXVzYWdlJyBsaWJyYXJ5IGFuZAorKyAgICAgICB0aGUgYG1lbXVzYWdlJyBhbmQgYG1lbXVzYWdlc3RhdCcgdXRpbGl0aWVzLgorKyAgICAgICBUaGVzZSBjb21wb25lbnRzIHByb3ZpZGUgbWVtb3J5IHByb2ZpbGluZyBmdW5jdGlvbnMuCisrCisrY29uZmlnIEVHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFCisrICAgaW50ICJNZW1vcnkgcHJvZmlsaW5nIGxpYnJhcnkgYnVmZmVyIHNpemUiCisrICAgZGVwZW5kcyBvbiBFR0xJQkNfTUVNVVNBR0UKKysgICBkZWZhdWx0ICIzMjc2OCIKKysgICBoZWxwCisrICAgICAgIExpYm1lbXVzYWdlIGxpYnJhcnkgYnVmZmVycyB0aGUgcHJvZmlsaW5nIGRhdGEgaW4gbWVtb3J5CisrICAgICAgIGJlZm9yZSB3cml0aW5nIGl0IG91dCB0byBkaXNrLiAgQnkgZGVmYXVsdCwgdGhlIGxpYnJhcnkKKysgICAgICAgYWxsb2NhdGVzIDEuNU0gYnVmZmVyLCB3aGljaCBjYW4gYmUgc3Vic3RhbnRpYWwgZm9yIHNvbWUKKysgICAgICAgc3lzdGVtcy4gIEVHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFIG9wdGlvbgorKyAgICAgICBhbGxvd3MgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGJ1ZmZlciBzaXplLiAgSXQgc3BlY2lmaWVzCisrICAgICAgIHRoZSBudW1iZXIgb2YgZW50cmllcyB0aGUgYnVmZmVyIHNob3VsZCBoYXZlLgorKyAgICAgICBPbiBtb3N0IGFyY2hpdGVjdHVyZXMgb25lIGJ1ZmZlciBlbnRyeSBhbW91bnRzIHRvIDQ4IGJ5dGVzLAorKyAgICAgICBzbyBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvIHRoZSB2YWx1ZSBvZiA1MTIgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YKKysgICAgICAgdGhlIG1lbW9yeSBidWZmZXIgdG8gMjRLLgorKworK2NvbmZpZyBFR0xJQkNfTklTCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgTklTLCBOSVMrLCBhbmQgdGhlIHNwZWNpYWwgJ2NvbXBhdCcgc2VydmljZXMuIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQgJiYgRUdMSUJDX1NVTlJQQworKyAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIE5JUywgTklTKywgYW5kICdjb21wYXQnIE5hbWUKKysgICAgICAgU2VydmljZSBTd2l0Y2ggc2VydmljZSBsaWJyYXJpZXMuICBXaGVuIGl0IGlzIGRpc2FibGVkLCB0aG9zZQorKyAgICAgICBzZXJ2aWNlcyBsaWJyYXJpZXMgYXJlIG5vdCBpbnN0YWxsZWQ7IHlvdSBzaG91bGQgcmVtb3ZlIGFueQorKyAgICAgICByZWZlcmVuY2VzIHRvIHRoZW0gZnJvbSB5b3VyICduc3N3aXRjaC5jb25mJyBmaWxlLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBkZXBlbmRzIG9uIHRoZSBFR0xJQkNfSU5FVCBvcHRpb24KKysgICAgICAgZ3JvdXA7IHlvdSBtdXN0IGVuYWJsZSB0aGF0IHRvIGVuYWJsZSB0aGlzIG9wdGlvbiBncm91cC4KKysKKytjb25maWcgRUdMSUJDX05TU1dJVENICisrICAgYm9vbCAiTmFtZSBzZXJ2aWNlIHN3aXRjaCAobnNzd2l0Y2gpIHN1cHBvcnQiCisrICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBzdXBwb3J0IGZvciB0aGUgJ25zc3dpdGNoJyBmYWNpbGl0eS4KKysgICAgICAgV2l0aCB0aGlzIG9wdGlvbiBncm91cCBlbmFibGVkLCBhbGwgRUdMSUJDIGZ1bmN0aW9ucyBmb3IKKysgICAgICAgYWNjZXNzaW5nIHZhcmlvdXMgc3lzdGVtIGRhdGFiYXNlcyAocGFzc3dvcmRzIGFuZCBncm91cHM7CisrICAgICAgIG5ldHdvcmtpbmc7IGFsaWFzZXM7IHB1YmxpYyBrZXlzOyBhbmQgc28gb24pIGNvbnN1bHQgdGhlCisrICAgICAgICcvZXRjL25zc3dpdGNoLmNvbmYnIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkZWNpZGUgaG93IHRvIGhhbmRsZQorKyAgICAgICBxdWVyaWVzLgorKworKyAgICAgICBXaXRoIHRoaXMgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCBFR0xJQkMgdXNlcyBhIGZpeGVkIGxpc3Qgb2YKKysgICAgICAgc2VydmljZXMgdG8gc2F0aXNmeSBxdWVyaWVzIG9uIGVhY2ggZGF0YWJhc2UsIGFzIHJlcXVlc3RlZCBieQorKyAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzIHNwZWNpZmllZCB3aGVuIEVHTElCQyBpcyBidWlsdC4gIFlvdXIKKysgICAgICAgJ29wdGlvbi1ncm91cHMuY29uZmlnJyBmaWxlIG11c3Qgc2V0IHRoZSBmb2xsb3dpbmcgdHdvCisrICAgICAgIHZhcmlhYmxlczoKKysKKytjb25maWcgRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRworKyAgIHN0cmluZyAiTnNzd2l0Y2ggZml4ZWQgY29uZmlnIGZpbGVuYW1lIgorKyAgIGRlcGVuZHMgb24gIUVHTElCQ19OU1NXSVRDSAorKyAgIGRlZmF1bHQgIiIKKysgICBoZWxwCisrICAgICAgICAgIFNldCB0aGlzIHRvIHRoZSBuYW1lIG9mIGEgZmlsZSB3aG9zZSBjb250ZW50cyBvYnNlcnZlIHRoZQorKyAgICAgICAgICBzYW1lIHN5bnRheCBhcyBhbiBvcmRpbmFyeSAnL2V0Yy9uc3N3aXRjaC5jb25mJyBmaWxlLiAgVGhlCisrICAgICAgICAgIEVHTElCQyBidWlsZCBwcm9jZXNzIHBhcnNlcyB0aGlzIGZpbGUganVzdCBhcyBFR0xJQkMgd291bGQKKysgICAgICAgICAgYXQgcnVuIHRpbWUgaWYgRUdMSUJDX05TU1dJVENIIHdlcmUgZW5hYmxlZCwgYW5kCisrICAgICAgICAgIHByb2R1Y2VzIGEgQyBsaWJyYXJ5IHRoYXQgdXNlcyB0aGUgbnNzd2l0Y2ggc2VydmljZQorKyAgICAgICAgICBsaWJyYXJpZXMgdG8gc2VhcmNoIGZvciBkYXRhYmFzZSBlbnRyaWVzIGFzIHRoaXMgZmlsZQorKyAgICAgICAgICBzcGVjaWZpZXMsIGluc3RlYWQgb2YgY29uc3VsdGluZyAnL2V0Yy9uc3N3aXRjaC5jb25mJyBhdCBydW4KKysgICAgICAgICAgdGltZS4KKysKKysgICAgICAgICAgVGhpcyBzaG91bGQgYmUgYW4gYWJzb2x1dGUgZmlsZW5hbWUuICBUaGUgRUdMSUJDIGJ1aWxkCisrICAgICAgICAgIHByb2Nlc3MgbWF5IHVzZSBpdCBmcm9tIHNldmVyYWwgZGlmZmVyZW50IHdvcmtpbmcKKysgICAgICAgICAgZGlyZWN0b3JpZXMuICBJdCBtYXkgaW5jbHVkZSByZWZlcmVuY2VzIHRvIE1ha2VmaWxlCisrICAgICAgICAgIHZhcmlhYmxlcyBsaWtlICdjb21tb24tb2JqcGZ4JyAodGhlIHRvcCBvZiB0aGUgYnVpbGQgdHJlZSwKKysgICAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoKSwgb3IgJy4uJyAodGhlIHRvcCBvZiB0aGUgc291cmNlIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCkuCisrCisrICAgICAgICAgIFRoZSBFR0xJQkMgc291cmNlIHRyZWUgaW5jbHVkZXMgYSBzYW1wbGUgY29uZmlndXJhdGlvbiBmaWxlCisrICAgICAgICAgIG5hbWVkICduc3MvZml4ZWQtbnNzd2l0Y2guY29uZic7IGZvciBzaW1wbGUgY29uZmlndXJhdGlvbnMsCisrICAgICAgICAgIHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZGVsZXRlIHJlZmVyZW5jZXMgdG8gZGF0YWJhc2VzIG5vdAorKyAgICAgICAgICBuZWVkZWQgb24geW91ciBzeXN0ZW0uCisrCisrY29uZmlnIEVHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMKKysgICBzdHJpbmcgIk5zc3dpdGNoIGZpeGVkIGZ1bmN0aW9ucyBmaWxlbmFtZSIKKysgICBkZXBlbmRzIG9uICFFR0xJQkNfTlNTV0lUQ0gKKysgICBkZWZhdWx0ICIiCisrICAgaGVscAorKyAgICAgICAgICBUaGUgRUdMSUJDIGJ1aWxkIHByb2Nlc3MgdXNlcyB0aGlzIGZpbGUgdG8gZGVjaWRlIHdoaWNoCisrICAgICAgICAgIGZ1bmN0aW9ucyB0byBtYWtlIGF2YWlsYWJsZSBmcm9tIHdoaWNoIHNlcnZpY2UgbGlicmFyaWVzLgorKyAgICAgICAgICBUaGUgZmlsZSAnbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucycgc2VydmVzIGFzIGEgc2FtcGxlCisrICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhpcyBzZXR0aW5nLCBhbmQgZXhwbGFpbnMgaXRzIHN5bnRheAorKyAgICAgICAgICBhbmQgbWVhbmluZyBpbiBtb3JlIGRldGFpbC4KKysKKysgICAgICAgICAgVGhpcyBzaG91bGQgYmUgYW4gYWJzb2x1dGUgZmlsZSBuYW1lLiAgVGhlIEVHTElCQyBidWlsZAorKyAgICAgICAgICBwcm9jZXNzIG1heSB1c2UgaXQgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCB3b3JraW5nCisrICAgICAgICAgIGRpcmVjdG9yaWVzLiAgSXQgbWF5IGluY2x1ZGUgcmVmZXJlbmNlcyB0byBNYWtlZmlsZQorKyAgICAgICAgICB2YXJpYWJsZXMgbGlrZSAnY29tbW9uLW9ianBmeCcgKHRoZSB0b3Agb2YgdGhlIGJ1aWxkIHRyZWUsCisrICAgICAgICAgIHdpdGggYSB0cmFpbGluZyBzbGFzaCksIG9yICcuLicgKHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlLAorKyAgICAgICAgICB3aXRoIGEgdHJhaWxpbmcgc2xhc2gpLgorKworKyAgICAgICAgICBCZSBzdXJlIHRvIG1lbnRpb24gZWFjaCBmdW5jdGlvbiBpbiBlYWNoIHNlcnZpY2UgeW91IHdpc2ggdG8KKysgICAgICAgICAgdXNlLiAgSWYgeW91IGRvIG5vdCBtZW50aW9uIGEgc2VydmljZSdzIGZ1bmN0aW9uIGhlcmUsIHRoZQorKyAgICAgICAgICBFR0xJQkMgZGF0YWJhc2UgYWNjZXNzIGZ1bmN0aW9ucyB3aWxsIG5vdCBmaW5kIGl0LCBldmVuIGlmCisrICAgICAgICAgIGl0IGlzIGxpc3RlZCBpbiB0aGUgRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRworKyAgICAgICAgICBmaWxlLgorKworKyAgICAgICAgICBJbiB0aGlzIGFycmFuZ2VtZW50LCBFR0xJQkMgd2lsbCBub3QgdXNlIHRoZSAnZGxvcGVuJyBhbmQKKysgICAgICAgICAgJ2Rsc3ltJyBmdW5jdGlvbnMgdG8gZmluZCBkYXRhYmFzZSBhY2Nlc3MgZnVuY3Rpb25zLiAgSW5zdGVhZCwKKysgICAgICAgICAgbGliYyBoYXJkLWNvZGVzIHJlZmVyZW5jZXMgdG8gdGhlIHNlcnZpY2UgbGlicmFyaWVzJyBkYXRhYmFzZQorKyAgICAgICAgICBhY2Nlc3MgZnVuY3Rpb25zLiAgWW91IG11c3QgZXhwbGljaXRseSBsaW5rIHlvdXIgcHJvZ3JhbQorKyAgICAgICAgICBhZ2FpbnN0IHRoZSBuYW1lIHNlcnZpY2UgbGlicmFyaWVzICh0aG9zZSB3aG9zZSBuYW1lcyBzdGFydAorKyAgICAgICAgICB3aXRoICdsaWJuc3NfJywgaW4gdGhlIHN5c3Jvb3QncyAnL2xpYicgZGlyZWN0b3J5KSB3aG9zZQorKyAgICAgICAgICBmdW5jdGlvbnMgeW91IGludGVuZCB0byB1c2UuICBUaGlzIGFycmFuZ2VtZW50IGhlbHBzCisrICAgICAgICAgIHN5c3RlbS13aWRlIHN0YXRpYyBhbmFseXNpcyB0b29scyBkZWNpZGUgd2hpY2ggZnVuY3Rpb25zIGEKKysgICAgICAgICAgc3lzdGVtIGFjdHVhbGx5IHVzZXMuCisrCisrICAgICAgICAgIE5vdGUgdGhhdCBzb21lIG5zc3dpdGNoIHNlcnZpY2UgbGlicmFyaWVzIHJlcXVpcmUgb3RoZXIgb3B0aW9uCisrICAgICAgICAgIGdyb3VwcyB0byBiZSBlbmFibGVkOyBmb3IgZXhhbXBsZSwgdGhlIEVHTElCQ19JTkVUCisrICAgICAgICAgIG9wdGlvbiBncm91cCBtdXN0IGJlIGVuYWJsZWQgdG8gdXNlIHRoZSAnbGlibnNzX2Rucy5zby4yJworKyAgICAgICAgICBzZXJ2aWNlIGxpYnJhcnksIHdoaWNoIHVzZXMgdGhlIERvbWFpbiBOYW1lIFN5c3RlbSBuZXR3b3JrCisrICAgICAgICAgIHByb3RvY29sIHRvIGFuc3dlciBxdWVyaWVzLgorKworK2NvbmZpZyBFR0xJQkNfUkNNRAorKyAgIGJvb2wgIlN1cHBvcnQgZm9yICdyY21kJyBhbmQgcmVsYXRlZCBsaWJyYXJ5IGZ1bmN0aW9ucyIKKysgICBkZXBlbmRzIG9uIEVHTElCQ19JTkVUCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIGZ1bmN0aW9ucyBmb3IgcnVubmluZyBjb21tYW5kcyBvbgorKyAgICAgIHJlbW90ZSBtYWNoaW5lcyB2aWEgdGhlICdyc2gnIHByb3RvY29sLCBhbmQgZG9pbmcgYXV0aGVudGljYXRpb24KKysgICAgICByZWxhdGVkIHRvIHRob3NlIGZ1bmN0aW9ucy4gIFRoaXMgYWxzbyBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdAorKyAgICAgIHVzZSB0aGUgJ3JleGVjJyBwcm90b2NvbC4KKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIHJjbWQgICAgICAgICAgICBydXNlcm9rCisrICAgICAgICByY21kX2FmICAgICAgICAgcnVzZXJva19hZgorKyAgICAgICAgcmV4ZWMgICAgICAgICAgIGlydXNlcm9rCisrICAgICAgICByZXhlY19hZiAgICAgICAgaXJ1c2Vyb2tfYWYKKysgICAgICAgIHJyZXN2cG9ydCAgICAgICBydXNlcnBhc3MKKysgICAgICAgIHJyZXN2cG9ydF9hZgorKworK2NvbmZpZyBFR0xJQkNfUlRMRF9ERUJVRworKyAgIGJvb2wgIlJ1bnRpbWUgbGlua2VyIGRlYnVnIHByaW50IG91dHMiCisrICAgaGVscAorKyAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGVuYWJsZXMgZGVidWcgb3V0cHV0IG9mIHRoZSBydW50aW1lIGxpbmtlcgorKyAgICAgIHdoaWNoIGlzIGFjdGl2YXRlZCB2aWEgTERfREVCVUcgYW5kIExEX1RSQUNFX1BSRUxJTktJTkcKKysgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZ3JvdXAgeWllbGRzCisrICAgICAgYSBzbWFsbGVyIHJ1bnRpbWUgbGlua2VyIGJpbmFyeS4KKysgICAgICBCRVdBUkU6IERpc2FibGluZyB0aGlzIG9wdGlvbiBncm91cCBpcyBsaWtlbHkgdG8gYnJlYWsKKysgICAgICB0aGUgYGxkZCcgdXRpbGl0eSB3aGljaCBtYXkgYWxzbyBiZSB1c2VkIGJ5IHRoZSBwcmVsaW5rZXIuCisrICAgICAgSW4gcGFydGljdWxhciwgdGhlIGAtLXVudXNlZCcgbGRkIG9wdGlvbiB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4KKysKKytjb25maWcgRUdMSUJDX1NQQVdOCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgUE9TSVggcG9zaXhfc3Bhd24gZnVuY3Rpb25zIgorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgUE9TSVggZnVuY3Rpb25zIGZvciBleGVjdXRpbmcKKysgICAgICBwcm9ncmFtcyBpbiBjaGlsZCBwcm9jZXNzZXMgd2l0aG91dCB1c2luZyAnZm9yaycgb3IgJ3Zmb3JrJy4KKysKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgIHBvc2l4X3NwYXduCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZGVzdHJveQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldGZsYWdzCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0cGdyb3VwCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2NoZWRwYXJhbQorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNjaGVkcG9saWN5CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfZ2V0c2lnZGVmYXVsdAorKyAgICAgICAgcG9zaXhfc3Bhd25hdHRyX2dldHNpZ21hc2sKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9pbml0CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRwZ3JvdXAKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzY2hlZHBhcmFtCisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2NoZWRwb2xpY3kKKysgICAgICAgIHBvc2l4X3NwYXduYXR0cl9zZXRzaWdkZWZhdWx0CisrICAgICAgICBwb3NpeF9zcGF3bmF0dHJfc2V0c2lnbWFzaworKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZGNsb3NlCisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfYWRkZHVwMgorKyAgICAgICAgcG9zaXhfc3Bhd25fZmlsZV9hY3Rpb25zX2FkZG9wZW4KKysgICAgICAgIHBvc2l4X3NwYXduX2ZpbGVfYWN0aW9uc19kZXN0cm95CisrICAgICAgICBwb3NpeF9zcGF3bl9maWxlX2FjdGlvbnNfaW5pdAorKyAgICAgICAgcG9zaXhfc3Bhd25wCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgYWxzbyBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgdGhlIGljb252LAorKyAgICAgIGxvY2FsZWRlZiwgYW5kIGxvY2FsZSBwcm9ncmFtcyB0byBvcGVyYXRlIHRyYW5zcGFyZW50bHkgb24KKysgICAgICBjb21wcmVzc2VkIGNoYXJzZXQgZGVmaW5pdGlvbnMuICBXaGVuIHRoaXMgb3B0aW9uIGdyb3VwIGlzCisrICAgICAgZGlzYWJsZWQsIHRob3NlIHByb2dyYW1zIHdpbGwgb25seSBvcGVyYXRlIG9uIHVuY29tcHJlc3NlZAorKyAgICAgIGNoYXJtYXAgZmlsZXMuCisrCisrY29uZmlnIEVHTElCQ19TVFJFQU1TCisrICAgYm9vbCAiU3VwcG9ydCBmb3IgYWNjZXNzaW5nIFNUUkVBTVMuIgorKyAgIGhlbHAKKysgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcKKysgICAgICBtZXNzYWdlcyB0byBhbmQgZnJvbSBTVFJFQU1TLiAgVGhlIFNUUkVBTVMgaW50ZXJmYWNlIHByb3ZpZGVzIGEKKysgICAgICB1bmlmb3JtIG1lY2hhbmlzbSBmb3IgaW1wbGVtZW50aW5nIG5ldHdvcmtpbmcgc2VydmljZXMgYW5kIG90aGVyCisrICAgICAgY2hhcmFjdGVyLWJhc2VkIEkvTy4gIChTVFJFQU1TIGFyZSBub3QgdG8gYmUgY29uZnVzZWQgd2l0aAorKyAgICAgIDxzdGRpby5oPiBGSUxFIG9iamVjdHMsIGFsc28gY2FsbGVkICdzdHJlYW1zJy4pCisrCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisrCisrICAgICAgICBnZXRtc2cgICAgICAgICAgcHV0cG1zZworKyAgICAgICAgZ2V0cG1zZyAgICAgICAgIGZhdHRhY2gKKysgICAgICAgIGlzYXN0cmVhbSAgICAgICBmZGV0YWNoCisrICAgICAgICBwdXRtc2cKKysKKytjb25maWcgRUdMSUJDX1NVTlJQQworKyAgIGJvb2wgIlN1cHBvcnQgZm9yIHRoZSBTdW4gJ1JQQycgcHJvdG9jb2wuIgorKyAgIGRlcGVuZHMgb24gRUdMSUJDX0lORVQKKysgICBoZWxwCisrICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIFN1biBSUEMgcHJvdG9jb2xzLAorKyAgICAgIGluY2x1ZGluZyB0aGUgJ3JwY2dlbicgYW5kICdycGNpbmZvJyBwcm9ncmFtcy4KKysKKytjb25maWcgRUdMSUJDX1VUTVAKKysgICAgYm9vbCAiT2xkZXIgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgJ3V0bXAnIGxvZ2luIHJlY29yZHMiCisrICAgIGhlbHAKKysgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIG9sZGVyICd1dGVudCcgZmFtaWx5IG9mCisrICAgICAgIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIHVzZXIgbG9naW4gcmVjb3JkcyBpbiB0aGUgJ3V0bXAnIGZpbGUuCisrICAgICAgIFBPU0lYIG9taXRzIHRoZXNlIGZ1bmN0aW9ucyBpbiBmYXZvciBvZiB0aGUgJ3V0eGVudCcgZmFtaWx5LAorKyAgICAgICBhbmQgdGhleSBhcmUgb2Jzb2xldGUgb24gc3lzdGVtcyBvdGhlciB0aGFuIExpbnV4LgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmR1dGVudAorKyAgICAgICAgIGdldHV0ZW50CisrICAgICAgICAgZ2V0dXRlbnRfcgorKyAgICAgICAgIGdldHV0aWQKKysgICAgICAgICBnZXR1dGlkX3IKKysgICAgICAgICBnZXR1dGxpbmUKKysgICAgICAgICBnZXR1dGxpbmVfcgorKyAgICAgICAgIGxvZ3d0bXAKKysgICAgICAgICBwdXR1dGxpbmUKKysgICAgICAgICBzZXR1dGVudAorKyAgICAgICAgIHVwZHd0bXAKKysgICAgICAgICB1dG1wbmFtZQorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGxpYnJhcmllczoKKysKKysgICAgICAgICBsaWJ1dGlsLnNvIChhbmQgbGlidXRpbC5hKQorKworK2NvbmZpZyBFR0xJQkNfVVRNUFgKKysgICAgYm9vbCAiUE9TSVggYWNjZXNzIGZ1bmN0aW9ucyBmb3IgJ3V0bXAnIGxvZ2luIHJlY29yZHMiCisrICAgIGRlcGVuZHMgb24gRUdMSUJDX1VUTVAKKysgICAgaGVscAorKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgUE9TSVggZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZAorKyAgICAgICB3cml0aW5nIHVzZXIgbG9naW4gcmVjb3JkcyBpbiB0aGUgJ3V0bXAnIGZpbGUgKHVzdWFsbHkKKysgICAgICAgJy92YXIvcnVuL3V0bXAnKS4gIFRoZSBQT1NJWCBmdW5jdGlvbnMgb3BlcmF0ZSBvbiAnc3RydWN0CisrICAgICAgIHV0bXB4JyBzdHJ1Y3R1cmVzLCBhcyBvcHBvc2VkIHRvIHRoZSBmYW1pbHkgb2Ygb2xkZXIgJ3V0ZW50JworKyAgICAgICBmdW5jdGlvbnMsIHdoaWNoIG9wZXJhdGUgb24gJ3N0cnVjdCB1dG1wJyBzdHJ1Y3R1cmVzLgorKworKyAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICBlbmR1dHhlbnQKKysgICAgICAgICBnZXR1dG1wCisrICAgICAgICAgZ2V0dXRtcHgKKysgICAgICAgICBnZXR1dHhlbnQKKysgICAgICAgICBnZXR1dHhpZAorKyAgICAgICAgIGdldHV0eGxpbmUKKysgICAgICAgICBwdXR1dHhsaW5lCisrICAgICAgICAgc2V0dXR4ZW50CisrICAgICAgICAgdXBkd3RtcHgKKysgICAgICAgICB1dG1weG5hbWUKKysKKytjb25maWcgRUdMSUJDX1dPUkRFWFAKKysgICAgYm9vbCAiU2hlbGwtc3R5bGUgd29yZCBleHBhbnNpb24iCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSAnd29yZGV4cCcgZnVuY3Rpb24gZm9yCisrICAgICAgICBwZXJmb3JtaW5nIHdvcmQgZXhwYW5zaW9uIGluIHRoZSBtYW5uZXIgb2YgdGhlIHNoZWxsLCBhbmQgdGhlCisrICAgICAgICBhY2NvbXBhbnlpbmcgJ3dvcmRmcmVlJyBmdW5jdGlvbi4KKysKKytjb25maWcgUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyAgICBib29sICJJU08gQyBsaWJyYXJ5IHdpZGUgY2hhcmFjdGVyIGZ1bmN0aW9ucywgZXhjbHVkaW5nIEkvTyIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGJ5IHRoZSBJU08gQworKyAgICAgICAgc3RhbmRhcmQgZm9yIHdvcmtpbmcgd2l0aCB3aWRlIGFuZCBtdWx0aWJ5dGUgY2hhcmFjdGVycyBpbgorKyAgICAgICAgbWVtb3J5LiAgRnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHdpZGUgYW5kIG11bHRpYnl0ZQorKyAgICAgICAgY2hhcmFjdGVycyBmcm9tIGFuZCB0byBmaWxlcyBjYWxsIGluIHRoZQorKyAgICAgICAgUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTyBvcHRpb24gZ3JvdXAuCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgYnRvd2MgICAgICAgICBtYnNpbml0ICAgICAgIHdjc2NzcG4gICAgICAgd2NzdG9sbAorKyAgICAgICAgICBpc3dhbG51bSAgICAgIG1ic3J0b3djcyAgICAgd2NzZnRpbWUgICAgICB3Y3N0b21icworKyAgICAgICAgICBpc3dhbHBoYSAgICAgIG1ic3Rvd2NzICAgICAgd2NzbGVuICAgICAgICB3Y3N0b3VsCisrICAgICAgICAgIGlzd2JsYW5rICAgICAgbWJ0b3djICAgICAgICB3Y3NuY2F0ICAgICAgIHdjc3RvdWxsCisrICAgICAgICAgIGlzd2NudHJsICAgICAgc3dwcmludGYgICAgICB3Y3NuY21wICAgICAgIHdjc3RvdW1heAorKyAgICAgICAgICBpc3djdHlwZSAgICAgIHN3c2NhbmYgICAgICAgd2NzbmNweSAgICAgICB3Y3N4ZnJtCisrICAgICAgICAgIGlzd2RpZ2l0ICAgICAgdG93Y3RyYW5zICAgICB3Y3NwYnJrICAgICAgIHdjdG9iCisrICAgICAgICAgIGlzd2dyYXBoICAgICAgdG93bG93ZXIgICAgICB3Y3NyY2hyICAgICAgIHdjdG9tYgorKyAgICAgICAgICBpc3dsb3dlciAgICAgIHRvd3VwcGVyICAgICAgd2NzcnRvbWJzICAgICB3Y3RyYW5zCisrICAgICAgICAgIGlzd3ByaW50ICAgICAgdnN3cHJpbnRmICAgICB3Y3NzcG4gICAgICAgIHdjdHlwZQorKyAgICAgICAgICBpc3dwdW5jdCAgICAgIHZzd3NjYW5mICAgICAgd2Nzc3RyICAgICAgICB3bWVtY2hyCisrICAgICAgICAgIGlzd3NwYWNlICAgICAgd2NydG9tYiAgICAgICB3Y3N0b2QgICAgICAgIHdtZW1jbXAKKysgICAgICAgICAgaXN3dXBwZXIgICAgICB3Y3NjYXQgICAgICAgIHdjc3RvZiAgICAgICAgd21lbWNweQorKyAgICAgICAgICBpc3d4ZGlnaXQgICAgIHdjc2NociAgICAgICAgd2NzdG9pbWF4ICAgICB3bWVtbW92ZQorKyAgICAgICAgICBtYmxlbiAgICAgICAgIHdjc2NtcCAgICAgICAgd2NzdG9rICAgICAgICB3bWVtc2V0CisrICAgICAgICAgIG1icmxlbiAgICAgICAgd2NzY29sbCAgICAgICB3Y3N0b2wKKysgICAgICAgICAgbWJydG93YyAgICAgICB3Y3NjcHkgICAgICAgIHdjc3RvbGQKKysKKytjb25maWcgUE9TSVhfUkVHRVhQCisrICAgIGJvb2wgIlJlZ3VsYXIgZXhwcmVzc2lvbnMiCisrICAgIGhlbHAKKysgICAgICAgIFRoaXMgb3B0aW9uIGdyb3VwIGluY2x1ZGVzIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24KKysgICAgICAgIGZ1bmN0aW9ucywgYW5kIHRoZSBhc3NvY2lhdGVkIG5vbi1QT1NJWCBleHRlbnNpb25zIGFuZAorKyAgICAgICAgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisrCisrICAgICAgICBXaXRoIFBPU0lYX1JFR0VYUCBkaXNhYmxlZCwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlCisrICAgICAgICBvbWl0dGVkIGZyb20gbGliYzoKKysKKysgICAgICAgICAgcmVfY29tcCAgICAgICAgICAgICAgICAgcmVfbWF4X2ZhaWx1cmVzICAgICAgICAgcmVnY29tcAorKyAgICAgICAgICByZV9jb21waWxlX2Zhc3RtYXAgICAgICByZV9zZWFyY2ggICAgICAgICAgICAgICByZWdlcnJvcgorKyAgICAgICAgICByZV9jb21waWxlX3BhdHRlcm4gICAgICByZV9zZWFyY2hfMiAgICAgICAgICAgICByZWdleGVjCisrICAgICAgICAgIHJlX2V4ZWMgICAgICAgICAgICAgICAgIHJlX3NldF9yZWdpc3RlcnMgICAgICAgIHJlZ2ZyZWUKKysgICAgICAgICAgcmVfbWF0Y2ggICAgICAgICAgICAgICAgcmVfc2V0X3N5bnRheCAgICAgICAgICAgcnBtYXRjaAorKyAgICAgICAgICByZV9tYXRjaF8yICAgICAgICAgICAgICByZV9zeW50YXhfb3B0aW9ucworKworKyAgICAgICAgRnVydGhlcm1vcmUsIHRoZSBjb21wYXRpYmlsaXR5IHJlZ2V4cCBpbnRlcmZhY2UgZGVmaW5lZCBpbiB0aGUKKysgICAgICAgIDxyZWdleHAuaD4gaGVhZGVyIGZpbGUsICdjb21waWxlJywgJ3N0ZXAnLCBhbmQgJ2FkdmFuY2UnLCBpcworKyAgICAgICAgb21pdHRlZC4KKysKKytjb25maWcgUE9TSVhfUkVHRVhQX0dMSUJDCisrICAgIGJvb2wgIlJlZ3VsYXIgZXhwcmVzc2lvbnMgZnJvbSBHTElCQyIKKysgICAgZGVwZW5kcyBvbiBQT1NJWF9SRUdFWFAKKysgICAgaGVscAorKwlUaGlzIG9wdGlvbiBncm91cCBzcGVjaWZpZXMgd2hpY2ggcmVndWxhciBleHByZXNzaW9uCisrICAgICAgICBsaWJyYXJ5IHRvIHVzZS4gIFRoZSBjaG9pY2UgaXMgYmV0d2VlbiByZWdleAorKyAgICAgICAgaW1wbGVtZW50YXRpb24gZnJvbSBHTElCQyBhbmQgcmVnZXggaW1wbGVtZW50YXRpb24gZnJvbQorKyAgICAgICAgbGliaWJlcnR5LiAgVGhlIEdMSUJDIHZhcmlhbnQgaXMgZnVsbHkgUE9TSVggY29uZm9ybWFudCBhbmQKKysgICAgICAgIG9wdGltaXplZCBmb3Igc3BlZWQ7IHJlZ2V4IGZyb20gbGliaWJlcnR5IGlzIG1vcmUgdGhhbiB0d2ljZQorKyAgICAgICAgYXMgc21hbGwgd2hpbGUgc3RpbGwgaXMgZW5vdWdoIGZvciBtb3N0IHByYWN0aWNhbCBwdXJwb3Nlcy4KKysKKytjb25maWcgUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICBib29sICJJbnB1dCBhbmQgb3V0cHV0IGZ1bmN0aW9ucyBmb3Igd2lkZSBjaGFyYWN0ZXJzIgorKyAgICBkZXBlbmRzIG9uIFBPU0lYX0NfTEFOR19XSURFX0NIQVIKKysgICAgaGVscAorKyAgICAgICAgVGhpcyBvcHRpb24gZ3JvdXAgaW5jbHVkZXMgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nCisrICAgICAgICB3aWRlIGNoYXJhY3RlcnMgdG8gYW5kIGZyb20gPHN0ZGlvLmg+IHN0cmVhbXMuCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgZmdldHdjICAgICAgICBmd3ByaW50ZiAgICAgIHB1dHdjaGFyICAgICAgdndzY2FuZgorKyAgICAgICAgICBmZ2V0d3MgICAgICAgIGZ3c2NhbmYgICAgICAgdW5nZXR3YyAgICAgICB3cHJpbnRmCisrICAgICAgICAgIGZwdXR3YyAgICAgICAgZ2V0d2MgICAgICAgICB2ZndwcmludGYgICAgIHdzY2FuZgorKyAgICAgICAgICBmcHV0d3MgICAgICAgIGdldHdjaGFyICAgICAgdmZ3c2NhbmYKKysgICAgICAgICAgZndpZGUgICAgICAgICBwdXR3YyAgICAgICAgIHZ3cHJpbnRmCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBmdXJ0aGVyIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgdW5sb2NrZWQKKysgICAgICAgIHZhcmlhbnRzIG9mIHRoZSBhYm92ZSBmdW5jdGlvbnM6CisrCisrICAgICAgICAgIGZnZXR3Y191bmxvY2tlZCAgICAgICAgICAgZ2V0d2NfdW5sb2NrZWQKKysgICAgICAgICAgZmdldHdzX3VubG9ja2VkICAgICAgICAgICBnZXR3Y2hhcl91bmxvY2tlZAorKyAgICAgICAgICBmcHV0d2NfdW5sb2NrZWQgICAgICAgICAgIHB1dHdjX3VubG9ja2VkCisrICAgICAgICAgIGZwdXR3c191bmxvY2tlZCAgICAgICAgICAgcHV0d2NoYXJfdW5sb2NrZWQKKysKKysgICAgICAgIE5vdGUgdGhhdCB0aGUgR05VIHN0YW5kYXJkIEMrKyBsaWJyYXJ5LCAnbGlic3RkYysrLnNvJywgdXNlcworKyAgICAgICAgc29tZSBvZiB0aGVzZSBmdW5jdGlvbnM7IHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGxpbmsgb3IgcnVuCisrICAgICAgICBDKysgcHJvZ3JhbXMgaWYgeW91IGRpc2FibGUgdGhpcyBvcHRpb24gZ3JvdXAuCisrCisrICAgICAgICBUaGlzIG9wdGlvbiBncm91cCBhbHNvIGFmZmVjdHMgdGhlIGJlaGF2aW9yIG9mIHRoZSBmb2xsb3dpbmcKKysgICAgICAgIGZ1bmN0aW9uczoKKysKKysgICAgICAgICAgZmRvcGVuCisrICAgICAgICAgIGZvcGVuCisrICAgICAgICAgIGZvcGVuNjQKKysgICAgICAgICAgZnJlb3BlbgorKyAgICAgICAgICBmcmVvcGVuNjQKKysKKysgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhbGwgdGFrZSBhbiBPUEVOVFlQRSBwYXJhbWV0ZXIgd2hpY2ggbWF5CisrICAgICAgICBjb250YWluIGEgc3RyaW5nIG9mIHRoZSBmb3JtICIsY2NzPUNIQVJTRVQiLCBpbmRpY2F0aW5nIHRoYXQKKysgICAgICAgIHRoZSB1bmRlcmx5aW5nIGZpbGUgdXNlcyB0aGUgY2hhcmFjdGVyIHNldCBuYW1lZCBDSEFSU0VULgorKyAgICAgICAgVGhpcyBwcm9kdWNlcyBhIHdpZGUtb3JpZW50ZWQgc3RyZWFtLCB3aGljaCBpcyBvbmx5IHVzZWZ1bAorKyAgICAgICAgd2hlbiB0aGUgZnVuY3Rpb25zIGluY2x1ZGVkIGluIHRoaXMgb3B0aW9uIGdyb3VwIGFyZSBwcmVzZW50LgorKyAgICAgICAgSWYgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gb3BlbiBhIGZpbGUgc3BlY2lmeWluZyBhIGNoYXJhY3RlciBzZXQKKysgICAgICAgIGluIHRoZSBPUEVOVFlQRSBwYXJhbWV0ZXIsIGFuZCBFR0xJQkMgd2FzIGJ1aWx0IHdpdGggdGhpcworKyAgICAgICAgb3B0aW9uIGdyb3VwIGRpc2FibGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMLCBhbmQgc2V0cworKyAgICAgICAgZXJybm8gdG8gRUlOVkFMLgorKworKwwKKysjIFRoaXMgaGVscHMgRW1hY3MgdXNlcnMgYnJvd3NlIHRoaXMgZmlsZSB1c2luZyB0aGUgcGFnZSBtb3Rpb24gY29tbWFuZHMKKysjIGFuZCBjb21tYW5kcyBsaWtlICdwYWdlcy1kaXJlY3RvcnknLgorKyMgTG9jYWwgVmFyaWFibGVzOgorKyMgcGFnZS1kZWxpbWl0ZXI6ICJeY29uZmlnXFxzLSIKKysjIEVuZDoKK2RpZmYgLS1naXQgYS9vcHRpb24tZ3JvdXBzLmRlZmF1bHRzIGIvb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjgxNDEyMDEKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbi1ncm91cHMuZGVmYXVsdHMKK0BAIC0wLDAgKzEsNDcgQEAKKysjIFRoaXMgZmlsZSBzZXRzIGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgb3B0aW9uIGdyb3VwIHZhcmlhYmxlcworKyMgbWVudGlvbmVkIGluIG9wdGlvbi1ncm91cHMuZGVmOyBzZWUgdGhhdCBmaWxlIGZvciBhIGRlc2NyaXB0aW9uIG9mCisrIyBlYWNoIG9wdGlvbiBncm91cC4KKysjCisrIyBTdWJkaXJlY3RvcnkgbWFrZWZpbGVzIGluY2x1ZGUgdGhpcyBmaWxlIGJlZm9yZSBpbmNsdWRpbmcgdGhlIHVzZXIncworKyMgc2V0dGluZ3MgZnJvbSBvcHRpb24tZ3JvdXBzLmNvbmZpZyBhdCB0aGUgdG9wIG9mIHRoZSBidWlsZCB0cmVlOworKyMgdGhhdCBmaWxlIG5lZWQgb25seSByZWZlciB0byB0aG9zZSBvcHRpb25zIHdob3NlIGRlZmF1bHQgc2V0dGluZ3MKKysjIGFyZSB0byBiZSBjaGFuZ2VkLgorKyMKKysjIEJ5IGRlZmF1bHQsIGFsbCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkLgorK09QVElPTl9FR0xJQkNfQURWQU5DRURfSU5FVDYgPSB5CisrT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UgPSB5CisrT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID0geQorK09QVElPTl9FR0xJQkNfQlNEID0geQorK09QVElPTl9FR0xJQkNfQ1hYX1RFU1RTID0geQorK09QVElPTl9FR0xJQkNfQ0FUR0VUUyA9IHkKKytPUFRJT05fRUdMSUJDX0NIQVJTRVRTID0geQorK09QVElPTl9FR0xJQkNfQ1JZUFQgPSB5CisrT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgPSB5CisrT1BUSU9OX0VHTElCQ19EQl9BTElBU0VTID0geQorK09QVElPTl9FR0xJQkNfRU5WWiA9IHkKKytPUFRJT05fRUdMSUJDX0ZDVlQgPSB5CisrT1BUSU9OX0VHTElCQ19GTVRNU0cgPSB5CisrT1BUSU9OX0VHTElCQ19GU1RBQiA9IHkKKytPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSA9IHkKKytPUFRJT05fRUdMSUJDX0dFVExPR0lOID0geQorK09QVElPTl9FR0xJQkNfSUROID0geQorK09QVElPTl9FR0xJQkNfSU5FVCA9IHkKKytPUFRJT05fRUdMSUJDX0lORVRfQU5MID0geQorK09QVElPTl9FR0xJQkNfTElCTSA9IHkKKytPUFRJT05fRUdMSUJDX0xPQ0FMRVMgPSB5CisrT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSA9IHkKKytPUFRJT05fRUdMSUJDX01FTVVTQUdFID0geQorK09QVElPTl9FR0xJQkNfTklTID0geQorK09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggPSB5CisrT1BUSU9OX0VHTElCQ19SQ01EID0geQorK09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRyA9IHkKKytPUFRJT05fRUdMSUJDX1NQQVdOID0geQorK09QVElPTl9FR0xJQkNfU1RSRUFNUyA9IHkKKytPUFRJT05fRUdMSUJDX1NVTlJQQyA9IHkKKytPUFRJT05fRUdMSUJDX1VUTVAgPSB5CisrT1BUSU9OX0VHTElCQ19VVE1QWCA9IHkKKytPUFRJT05fRUdMSUJDX1dPUkRFWFAgPSB5CisrT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgPSB5CisrT1BUSU9OX1BPU0lYX1JFR0VYUCA9IHkKKytPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDID0geQorK09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPID0geQorZGlmZiAtLWdpdCBhL29wdGlvbi1ncm91cHMubWFrIGIvb3B0aW9uLWdyb3Vwcy5tYWsKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mODNlMGMxCistLS0gL2Rldi9udWxsCisrKysgYi9vcHRpb24tZ3JvdXBzLm1haworQEAgLTAsMCArMSw0MSBAQAorKyMgU2V0dXAgZmlsZSBmb3Igc3ViZGlyZWN0b3J5IE1ha2VmaWxlcyB0aGF0IGRlZmluZSBFR0xJQkMgb3B0aW9uIGdyb3Vwcy4KKysKKysjIEVHTElCQyBzaG91bGRuJ3QgbmVlZCB0byBvdmVycmlkZSB0aGlzLiAgSG93ZXZlciwgdGhlCisrIyBjcm9zcy1idWlsZC1mcmllbmRseSBsb2NhbGVkZWYgaW5jbHVkZXMgdGhpcyBtYWtlZmlsZSB0byBnZXQgb3B0aW9uCisrIyBncm91cCB2YXJpYWJsZSBkZWZpbml0aW9uczsgaXQgdXNlcyBhIHNpbmdsZSBidWlsZCB0cmVlIGZvciBhbGwgdGhlCisrIyBtdWx0aWxpYnMsIGFuZCBuZWVkcyB0byBiZSBhYmxlIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgb3B0aW9uIGdyb3VwCisrIyBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGVhY2ggbXVsdGlsaWIuCisrb3B0aW9uX2dyb3VwX2NvbmZpZ19maWxlID89ICQob2JqZGlyKS9vcHRpb24tZ3JvdXBzLmNvbmZpZworKworKyMgUmVhZCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgYWxsIG9wdGlvbnMuCisrIyBXZSdyZSBpbmNsdWRlZCBiZWZvcmUgLi4vUnVsZXMsIHNvIHdlIGNhbid0IGFzc3VtZSAkKC4uKSBpcyBzZXQuCisraW5jbHVkZSAkKGZpcnN0d29yZCAkKC4uKSAuLi8pb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cworKworKyMgUmVhZCB0aGUgZGV2ZWxvcGVyJ3Mgb3B0aW9uIGdyb3VwIHNlbGVjdGlvbnMsIG92ZXJyaWRpbmcgdGhlCisrIyBkZWZhdWx0cyBmcm9tIG9wdGlvbi1ncm91cHMuZGVmYXVsdHMuCisrLWluY2x1ZGUgJChvcHRpb25fZ3JvdXBfY29uZmlnX2ZpbGUpCisrCisrIyAkKGNhbGwgb3B0aW9uLWRpc2FibGVkLCBWQVIpIGlzICd5JyBpZiBWQVIgaXMgbm90ICd5Jywgb3IgJ24nIG90aGVyd2lzZS4KKysjIFZBUiBzaG91bGQgYmUgYSB2YXJpYWJsZSBuYW1lLCBub3QgYSB2YXJpYWJsZSByZWZlcmVuY2U7IHRoaXMgaXMKKysjIGxlc3MgZ2VuZXJhbCwgYnV0IG1vcmUgdGVyc2UgZm9yIHRoZSBpbnRlbmRlZCB1c2UuCisrIyBZb3UgY2FuIHVzZSBpdCB0byBhZGQgYSBmaWxlIHRvIGEgbGlzdCBpZiBhbiBvcHRpb24gZ3JvdXAgaXMKKysjIGRpc2FibGVkLCBsaWtlIHRoaXM6CisrIyAgIHJvdXRpbmVzLSQoY2FsbCBvcHRpb24tZGlzYWJsZWQsIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSArPSAuLi4KKytkZWZpbmUgb3B0aW9uLWRpc2FibGVkCisrJChmaXJzdHdvcmQgJChzdWJzdCB5LG4sJChmaWx0ZXIgeSwkKCQoc3RyaXAgJCgxKSkpKSkgeSkKKytlbmRlZgorKworKyMgRXN0YWJsaXNoICdyb3V0aW5lcy15JywgZXRjLiBhcyBzaW1wbHktZXhwYW5kZWQgdmFyaWFibGVzLgorK2F1eC15CSAgICAgICAJICAgIDo9CisrZXh0cmEtbGlicy1vdGhlcnMteSA6PQorK2V4dHJhLWxpYnMteSAgIAkgICAgOj0KKytleHRyYS1vYmpzLXkgICAJICAgIDo9CisraW5zdGFsbC1iaW4teSAgCSAgICA6PQorK2luc3RhbGwtb3RoZXJzLXkgICAgOj0KKytpbnN0YWxsLXNiaW4teSAJICAgIDo9Cisrb3RoZXJzLXkgICAgICAgCSAgICA6PQorK290aGVycy1waWUteSAgIAkgICAgOj0KKytyb3V0aW5lcy15ICAgICAJICAgIDo9CisrdGVzdC1zcmNzLXkgICAgCSAgICA6PQorK3Rlc3RzLXkgICAgICAgIAkgICAgOj0KKyt4dGVzdHMteSAgICAgICAJICAgIDo9CitkaWZmIC0tZ2l0IGEvb3B0aW9ucy1jb25maWcvTWFrZWZpbGUgYi9vcHRpb25zLWNvbmZpZy9NYWtlZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmRiMDA3MDgKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbnMtY29uZmlnL01ha2VmaWxlCitAQCAtMCwwICsxLDU1IEBACisrIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysjIEVHTElCQyBvcHRpb24tZ3JvdXBzIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworKyMgVGhlc2UgdGFyZ2V0cyBhcmUgaW5jbHVkZWQgZnJvbSB0b3AtbGV2ZWwgbWFrZWZpbGUKKysKKytpZm5lcSAoJChrY29uZmlnX3Rvb2xzKSwpCisraWZuZXEgKG5vLCQoUEVSTCkpCisrCisrb2NkaXIgOj0gb3B0aW9ucy1jb25maWcKKysKKytPY29uZmlnRGVmYXVsdHMgICAgIDo9IG9wdGlvbi1ncm91cHMuZGVmYXVsdHMKKytPY29uZmlnRGVmYXVsdHNfdG1wIDo9ICQoY29tbW9uLW9ianBmeCkudG1wLmRlZmNvbmZpZworK09jb25maWdEZWYgICAgICAgICAgOj0gb3B0aW9uLWdyb3Vwcy5kZWYKKytPY29uZmlnICAgICAgICAgICAgIDo9ICQoY29tbW9uLW9ianBmeClvcHRpb24tZ3JvdXBzLmNvbmZpZworK09jb25maWdfdG1wICAgICAgICAgOj0gJChjb21tb24tb2JqcGZ4KS50bXAuY29uZmlnCisrCisrY29uZiAgOj0gJChrY29uZmlnX3Rvb2xzKS9jb25mCisrbWNvbmYgOj0gJChrY29uZmlnX3Rvb2xzKS9tY29uZgorKworK3ByZXByb2MgIDo9ICQoUEVSTCkgJChvY2RpcikvY29uZmlnLXByZXByb2MucGwKKytwb3N0cHJvYyA6PSAkKFBFUkwpICQob2NkaXIpL2NvbmZpZy1wb3N0cHJvYy5wbAorKworK1BIT05ZICs9IGRlZmNvbmZpZyBjb25maWcgbWVudWNvbmZpZworKworK2RlZmNvbmZpZzogJChjb25mKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnRGVmKQorKwlybSAtZiAkKE9jb25maWdEZWZhdWx0c190bXApCisrCXJtIC1mICQoT2NvbmZpZ190bXApCisrCSQocHJlcHJvYykgJChPY29uZmlnRGVmYXVsdHMpID4gJChPY29uZmlnRGVmYXVsdHNfdG1wKQorKwlLQ09ORklHX0NPTkZJRz0kKE9jb25maWdfdG1wKSAkPCAtLWRlZmNvbmZpZz0kKE9jb25maWdEZWZhdWx0c190bXApIFwKKysJCQkJJChPY29uZmlnRGVmKQorKwkkKHBvc3Rwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnX3RtcCkgPiAkKE9jb25maWcpCisrCXJtICQoT2NvbmZpZ190bXApCisrCXJtICQoT2NvbmZpZ0RlZmF1bHRzX3RtcCkKKysKKytjb25maWc6ICQoY29uZikgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ0RlZikKKysJcm0gLWYgJChPY29uZmlnX3RtcCkKKysJJChwcmVwcm9jKSAkKHdpbGRjYXJkICQoT2NvbmZpZykpID4gJChPY29uZmlnX3RtcCkKKysJS0NPTkZJR19DT05GSUc9JChPY29uZmlnX3RtcCkgJDwgLS1vbGRhc2tjb25maWcgJChPY29uZmlnRGVmKQorKwkkKHBvc3Rwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnX3RtcCkgPiAkKE9jb25maWcpCisrCXJtICQoT2NvbmZpZ190bXApCisrCisrbWVudWNvbmZpZzogJChtY29uZikgJChPY29uZmlnRGVmYXVsdHMpICQoT2NvbmZpZ0RlZikKKysJcm0gLWYgJChPY29uZmlnX3RtcCkKKysJJChwcmVwcm9jKSAkKHdpbGRjYXJkICQoT2NvbmZpZykpID4gJChPY29uZmlnX3RtcCkKKysJS0NPTkZJR19DT05GSUc9JChPY29uZmlnX3RtcCkgJDwgJChPY29uZmlnRGVmKQorKwkkKHBvc3Rwcm9jKSAkKE9jb25maWdEZWZhdWx0cykgJChPY29uZmlnX3RtcCkgPiAkKE9jb25maWcpCisrCXJtICQoT2NvbmZpZ190bXApCisrCisrIyBIZWxwIHRleHQgdXNlZCBieSBtYWtlIGhlbHAKKytoZWxwOgorKwlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBmcm9tIGRlZmF1bHQgY29uZmlnJworKwlAZWNobyAgJyAgY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtJworKwlAZWNobyAgJyAgbWVudWNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIG1lbnUgYmFzZWQgcHJvZ3JhbScKKysKKytlbmRpZgorK2VuZGlmCitkaWZmIC0tZ2l0IGEvb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNGRkMWM2MworLS0tIC9kZXYvbnVsbAorKysrIGIvb3B0aW9ucy1jb25maWcvY29uZmlnLXBvc3Rwcm9jLnBsCitAQCAtMCwwICsxLDU4IEBACisrIyEvdXNyL2Jpbi9wZXJsCisrCisrJHVzYWdlID0gInVzYWdlOiAkMCA8ZGVmYXVsdCBjb25maWcgZmlsZT4gPGNvbmZpZyBmaWxlPlxuIjsKKysKKytkaWUgIiR1c2FnZSIgdW5sZXNzIEBBUkdWOworKyRkZWZhdWx0cyA9IHNoaWZ0IEBBUkdWOworK2RpZSAiJHVzYWdlIiB1bmxlc3MgQEFSR1Y7CisrZGllICJDb3VsZCBub3Qgb3BlbiAkQVJHVlswXSIgdW5sZXNzIC1UICRBUkdWWzBdOworKworK3N1YiB5YW5rIHsKKysgICAgQG9wdGlvbiA9IGdyZXAoISgkXyA9fiAvJF9bMF1ccyo9LyksIEBvcHRpb24pOworK30KKysKKytvcGVuKERFRkFVTFRTLCAkZGVmYXVsdHMpIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJGRlZmF1bHRzXG4iOworKworKyMgZ2V0IHRoZSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlnIGZpbGUKKyskaSA9IDA7Cisrd2hpbGUgKDxERUZBVUxUUz4pIHsKKysgICAgaWYgKC9eXHMqT1BUSU9OXyhcdytccyo9LiokKS8pIHsKKysJJG9wdGlvblskaSsrXSA9ICQxOworKyAgICB9CisrfQorKworKyMgbm93IGdvIHRocm91Z2ggdGhlIGNvbmZpZyBmaWxlLCBtYWtpbmcgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzCisrd2hpbGUgKDw+KSB7CisrICAgIGlmICgvTGludXggS2VybmVsIENvbmZpZ3VyYXRpb24vKSB7CisrCSMgY2hhbmdlIHRpdGxlCisrCXMvTGludXggS2VybmVsL09wdGlvbiBHcm91cHMvOworKwlwcmludDsKKysgICAgfSBlbHNpZiAoL15ccypDT05GSUdfKFx3Kylccyo9LykgeworKwkjIHRoaXMgaXMgYW4gZXhwbGljaXQgb3B0aW9uIHNldCBsaW5lLCBjaGFuZ2UgQ09ORklHXyB0byBPUFRJT05fCisrCSMgYmVmb3JlIHByaW50aW5nIGFuZCByZW1vdmUgdGhpcyBvcHRpb24gZnJvbSBvcHRpb24gbGlzdAorKwkkb3B0ID0gJDE7CisrCXlhbmsoJG9wdCk7CisrCXMvQ09ORklHXy9PUFRJT05fL2c7CisrCXByaW50OworKyAgICB9IGVsc2lmICgvXlxzKiNccytDT05GSUdfKFx3KykgaXMgbm90IHNldC8pIHsKKysJIyB0aGlzIGlzIGEgY29tbWVudCBsaW5lIGZvciBhbiB1bnNldCBib29sZWFuIG9wdGlvbiwgY2hhbmdlIENPTkZJR18KKysJIyB0byBPUFRJT05fLCByZW1vdmUgdGhpcyBvcHRpb24gZnJvbSBvcHRpb24gbGlzdCwgYW5kIGNvbnZlcnQgdG8KKysJIyBleHBsaWNpdCBPUFRJT05fRk9PPW4KKysJJG9wdCA9ICQxOworKwl5YW5rKCRvcHQpOworKwlzL0NPTkZJR18vT1BUSU9OXy9nOworKwlwcmludCAiT1BUSU9OXyRvcHQ9blxuIjsKKysgICAgfSBlbHNlIHsKKysJcHJpbnQ7CisrICAgIH0KKyt9CisrCisrIyBhbnkgYm9vbGVhbiBvcHRpb25zIGxlZnQgaW4gQG9wdGlvbnMsIGFyZSBvcHRpb25zIHRoYXQgd2VyZSBub3QgbWVudGlvbmVkIGluCisrIyB0aGUgY29uZmlnIGZpbGUsIGFuZCBpbXBsaWNpdGx5IHRoYXQgbWVhbnMgdGhlIG9wdGlvbiBtdXN0IGJlIHNldCA9biwKKysjIHNvIGRvIHRoYXQgaGVyZS4KKytmb3JlYWNoICRvcHQgKEBvcHRpb24pIHsKKysgICAgaWYgKCRvcHQgPX4gLz1ccypbeW5dLykgeworKwkkb3B0ID1+IHMvPVxzKlt5bl0vPW4vOworKwlwcmludCAiT1BUSU9OXyRvcHRcbiI7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvb3B0aW9ucy1jb25maWcvY29uZmlnLXByZXByb2MucGwgYi9vcHRpb25zLWNvbmZpZy9jb25maWctcHJlcHJvYy5wbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmI4M2JiODUKKy0tLSAvZGV2L251bGwKKysrKyBiL29wdGlvbnMtY29uZmlnL2NvbmZpZy1wcmVwcm9jLnBsCitAQCAtMCwwICsxLDggQEAKKysjIS91c3IvYmluL3BlcmwKKysKKytpZiAoQEFSR1YpIHsKKysgICAgd2hpbGUgKDw+KSB7CisrCXMvT1BUSU9OXy9DT05GSUdfL2c7CisrCXByaW50OworKyAgICB9CisrfQorZGlmZiAtLWdpdCBhL3NjcmlwdHMvb3B0aW9uLWdyb3Vwcy5hd2sgYi9zY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTMzYWYwYworLS0tIC9kZXYvbnVsbAorKysrIGIvc2NyaXB0cy9vcHRpb24tZ3JvdXBzLmF3aworQEAgLTAsMCArMSw2MyBAQAorKyMgb3B0aW9uLWdyb3Vwcy5hd2sgLS0tIGdlbmVyYXRlIG9wdGlvbiBncm91cCBoZWFkZXIgZmlsZQorKyMgR2l2ZW4gaW5wdXQgZmlsZXMgY29udGFpbmluZyBtYWtlZmlsZS1zdHlsZSBhc3NpZ25tZW50cyB0byB2YXJpYWJsZXMsCisrIyBwcmludCBvdXQgYSBoZWFkZXIgZmlsZSB0aGF0ICNkZWZpbmVzIGFuIGFwcHJvcHJpYXRlIHByZXByb2Nlc3NvcgorKyMgc3ltYm9sIGZvciBlYWNoIHZhcmlhYmxlIGxlZnQgc2V0IHRvICd5Jy4KKysKKytCRUdJTiB7IEZTPSI9IiB9CisrCisrIyBUcmltIHNwYWNlcy4KKyt7IGdzdWIgKC9bWzpibGFuazpdXS8sICIiKSB9CisrCisrIyBTa2lwIGNvbW1lbnRzLgorKy9eIy8geyBuZXh0IH0KKysKKysjIFByb2Nlc3MgYXNzaWdubWVudHMuCisrTkYgPT0gMiB7CisrICAgIHZhcnNbJDFdID0gJDIKKyt9CisrCisrIyBQcmludCBmaW5hbCB2YWx1ZXMuCisrRU5EIHsKKysgICAgcHJpbnQgIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrIgorKyAgICBwcmludCAiICAgaW4gdGhlIEVHTElCQyBzb3VyY2UgdHJlZS4iCisrICAgIHByaW50ICIiCisrICAgIHByaW50ICIgICBJdCBkZWZpbmVzIG1hY3JvcyB0aGF0IGluZGljYXRlIHdoaWNoIEVHTElCQyBvcHRpb24gZ3JvdXBzIHdlcmUiCisrICAgIHByaW50ICIgICBjb25maWd1cmVkIGluICdvcHRpb24tZ3JvdXBzLmNvbmZpZycgd2hlbiB0aGlzIEMgbGlicmFyeSB3YXMiCisrICAgIHByaW50ICIgICBidWlsdC4gIEZvciBlYWNoIG9wdGlvbiBncm91cCBuYW1lZCBPUFRJT05fZm9vLCBpdCAjZGVmaW5lcyIKKysgICAgcHJpbnQgIiAgIF9fT1BUSU9OX2ZvbyB0byBiZSAxIGlmIHRoZSBncm91cCBpcyBlbmFibGVkLCBvciAjZGVmaW5lcyB0aGF0IgorKyAgICBwcmludCAiICAgc3ltYm9sIHRvIGJlIDAgaWYgdGhlIGdyb3VwIGlzIGRpc2FibGVkLiAgKi8iCisrICAgIHByaW50ICIiCisrICAgIHByaW50ICIjaWZuZGVmIF9fR05VX09QVElPTl9HUk9VUFNfSCIKKysgICAgcHJpbnQgIiNkZWZpbmUgX19HTlVfT1BUSU9OX0dST1VQU19IIgorKyAgICBwcmludCAiIgorKworKyAgICAjIFByb2R1Y2UgYSBzb3J0ZWQgbGlzdCBvZiB2YXJpYWJsZSBuYW1lcy4KKysgICAgaT0wCisrICAgIGZvciAodmFyIGluIHZhcnMpCisrICAgICAgICBuYW1lc1tpKytdID0gdmFyCisrICAgIG4gPSBhc29ydCAobmFtZXMpCisrCisrICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKQorKyAgICB7CisrICAgICAgICB2YXIgPSBuYW1lc1tpXQorKyAgICAgICAgaWYgKHZhciB+IC9eT1BUSU9OXy8pCisrICAgICAgICB7CisrICAgICAgICAgICAgaWYgKHZhcnNbdmFyXSA9PSAieSIpCisrICAgICAgICAgICAgICAgIHByaW50ICIjZGVmaW5lIF9fIiB2YXIgIiAxIgorKyAgICAgICAgICAgIGVsc2UgaWYgKHZhcnNbdmFyXSA9PSAibiIpCisrICAgICAgICAgICAgICAgIHByaW50ICIjZGVmaW5lIF9fIiB2YXIgIiAwIgorKwkgICAgZWxzZSBpZiAodmFyc1t2YXJdIH4gL15bMC05XSsvIHx8CisrCQkgICAgIHZhcnNbdmFyXSB+IC9eMHhbMC05YUFiQmNDZERlRWZGXSsvIHx8CisrCQkgICAgIHZhcnNbdmFyXSB+IC9eXCIvKQorKwkJIHByaW50ICIjZGVmaW5lIF9fIiB2YXIgIiAiIHZhcnNbdmFyXQorKwkgICAgZWxzZQorKwkJcHJpbnQgIi8qICN1bmRlZiBfXyIgdmFyICIgKi8iCisrICAgICAgICAgICAgIyBJZ25vcmUgdmFyaWFibGVzIHRoYXQgZG9uJ3QgaGF2ZSBib29sZWFuLCBpbnQsIGhleCwgb3IKKysJICAgICMgc3RyaW5nIHZhbHVlcy4gSWRlYWxseSwgdGhpcyB3b3VsZCBiZSBkcml2ZW4gYnkgdGhlIHR5cGVzCisrCSAgICAjIGdpdmVuIGluIG9wdGlvbi1ncm91cHMuZGVmLgorKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIHByaW50ICIiCisrICAgIHByaW50ICIjZW5kaWYgLyogX19HTlVfT1BUSU9OX0dST1VQU19IICovIgorK30KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmOTMwOTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIwLWVnbGliYy1IZWxwLWJvb3RzdHJhcC1jcm9zcy10b29sY2hhaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK0Zyb20gOGZlMGQyOTQ4OGIzNzYwMTFjZGFhYTQ2MmQ1NTdmZmMwYjMxZmI2MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjQ5OjI4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMjddIGVnbGliYzogSGVscCBib290c3RyYXAgY3Jvc3MgdG9vbGNoYWluCisKK1Rha2VuIGZyb20gRUdMSUJDLCByMTQ4NCArIHIxNTI1CisKKyAgICAgICAgMjAwNy0wMi0yMCAgSmltIEJsYW5keSAgPGppbWJAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICAgICAgICAgICogTWFrZWZpbGUgKGluc3RhbGwtaGVhZGVycyk6IFByZXNlcnZlIG9sZCBiZWhhdmlvcjogZGVwZW5kIG9uCisgICAgICAgICAgICAgICAgJChpbnN0X2luY2x1ZGVkaXIpL2dudS9zdHVicy5oIG9ubHkgaWYgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycworICAgICAgICAgICAgICAgIGlzIHNldDsgb3RoZXJ3aXNlLCBwbGFjZSBnbnUvc3R1YnMuaCBvbiB0aGUgJ2luc3RhbGwtb3RoZXJzJyBsaXN0LgorCisgICAgICAgIDIwMDctMDItMTYgIEppbSBCbGFuZHkgIDxqaW1iQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgICAgICAgICAqIE1ha2VmaWxlOiBBbWVuZCBtYWtlIGluc3RhbGwtaGVhZGVycyB0byBpbnN0YWxsIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIGEgY3Jvc3MtY29tcGlsZXIuICBJbnN0YWxsIGdudS9zdHVicy5oIGFzCisgICAgICAgICAgICAgICAgcGFydCBvZiAnaW5zdGFsbC1oZWFkZXJzJywgbm90ICdpbnN0YWxsLW90aGVycycuCisgICAgICAgICAgICAgICAgSWYgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycyBpcyAneWVzJywgaW5zdGFsbCBhIGR1bW15IGNvcHkgb2YKKyAgICAgICAgICAgICAgICBnbnUvc3R1YnMuaCwgaW5zdGVhZCBvZiBjb21wdXRpbmcgdGhlIHJlYWwgdGhpbmcuCisgICAgICAgICAgICAgICAgKiBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oOiBOZXcgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8IDIyICsrKysrKysrKysrKysrKysrKysrKy0KKyBpbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oIHwgMTIgKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmgKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGY5MDYzOTEuLmU0ZTE0OWUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC02OSw5ICs2OSwxOCBAQCBzdWJkaXItZGlycyA9IGluY2x1ZGUKKyB2cGF0aCAlLmggJChzdWJkaXItZGlycykKKyAKKyAjIFdoYXQgdG8gaW5zdGFsbC4KKy1pbnN0YWxsLW90aGVycyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorIGluc3RhbGwtYmluLXNjcmlwdCA9CisgCisrIyBJZiB3ZSdyZSBib290c3RyYXBwaW5nLCBpbnN0YWxsIGEgZHVtbXkgZ251L3N0dWJzLmggYWxvbmcgd2l0aCB0aGUKKysjIG90aGVyIGhlYWRlcnMsIHNvICdtYWtlIGluc3RhbGwtaGVhZGVycycgcHJvZHVjZXMgYSB1c2VhYmxlIGluY2x1ZGUKKysjIHRyZWUuICBPdGhlcndpc2UsIGluc3RhbGwgZ251L3N0dWJzLmggbGF0ZXIsIGFmdGVyIHRoZSByZXN0IG9mIHRoZQorKyMgYnVpbGQgaXMgZG9uZS4KKytpZmVxICgkKGluc3RhbGwtYm9vdHN0cmFwLWhlYWRlcnMpLHllcykKKytpbnN0YWxsLWhlYWRlcnM6ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorK2Vsc2UKKytpbnN0YWxsLW90aGVycyA9ICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaAorK2VuZGlmCisrCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyBoZWFkZXJzICs9IGdudS9saWItbmFtZXMuaAorIGVuZGlmCitAQCAtMTUxLDYgKzE2MCwxNiBAQCBvdGhlcnM6ICQoY29tbW9uLW9ianBmeCl0ZXN0cnVuLnNoCisgCisgc3ViZGlyLXN0dWJzIDo9ICQoZm9yZWFjaCBkaXIsJChzdWJkaXJzKSwkKGNvbW1vbi1vYmpwZngpJChkaXIpL3N0dWJzKQorIAorKyMgZ251L3N0dWJzLmggZGVwZW5kcyAodmlhIHRoZSBzdWJkaXIgJ3N0dWJzJyB0YXJnZXRzKSBvbiBhbGwgdGhlIC5vCisrIyBmaWxlcyBpbiBFR0xJQkMuICBGb3IgYm9vdHN0cmFwcGluZyBhIEdDQy9FR0xJQkMgcGFpciwgYW4gZW1wdHkKKysjIGdudS9zdHVicy5oIGlzIGdvb2QgZW5vdWdoLgorK2lmZXEgKCQoaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycykseWVzKQorKyQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaDogaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaCAkKCtmb3JjZSkKKysJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCisrCSQoSU5TVEFMTF9EQVRBKSAkPCAkQAorKworK2luc3RhbGxlZC1zdHVicyA9CisrZWxzZQorIGlmbmRlZiBhYmktdmFyaWFudHMKKyBpbnN0YWxsZWQtc3R1YnMgPSAkKGluc3RfaW5jbHVkZWRpcikvZ251L3N0dWJzLmgKKyBlbHNlCitAQCAtMTc3LDYgKzE5Niw3IEBAICQoaW5zdF9pbmNsdWRlZGlyKS9nbnUvc3R1YnMuaDogJCgrZm9yY2UpCisgCisgaW5zdGFsbC1vdGhlcnMtbm9zdWJkaXI6ICQoaW5zdGFsbGVkLXN0dWJzKQorIGVuZGlmCisrZW5kaWYKKyAKKyAKKyAjIFNpbmNlIHN0dWJzLmggaXMgbmV2ZXIgbmVlZGVkIHdoZW4gYnVpbGRpbmcgdGhlIGxpYnJhcnksIHdlIHNpbXBsaWZ5IHRoZQorZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3R1YnMtYm9vdHN0cmFwLmggYi9pbmNsdWRlL3N0dWJzLWJvb3RzdHJhcC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMWQyYjY2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9zdHVicy1ib290c3RyYXAuaAorQEAgLTAsMCArMSwxMiBAQAorKy8qIFBsYWNlaG9sZGVyIHN0dWJzLmggZmlsZSBmb3IgYm9vdHN0cmFwcGluZy4KKysKKysgICBXaGVuIGJvb3RzdHJhcHBpbmcgYSBHQ0MvRUdMSUJDIHBhaXIsIEdDQyByZXF1aXJlcyB0aGF0IHRoZSBFR0xJQkMKKysgICBoZWFkZXJzIGJlIGluc3RhbGxlZCwgYnV0IHdlIGNhbid0IGZ1bGx5IGJ1aWxkIEVHTElCQyB3aXRob3V0IHRoYXQKKysgICBHQ0MuICBTbyB3ZSBydW4gdGhlIGNvbW1hbmQ6CisrCisrICAgICAgbWFrZSBpbnN0YWxsLWhlYWRlcnMgaW5zdGFsbC1ib290c3RyYXAtaGVhZGVycz15ZXMKKysKKysgICB0byBpbnN0YWxsIHRoZSBoZWFkZXJzIEdDQyBuZWVkcywgYnV0IGF2b2lkIGJ1aWxkaW5nIGNlcnRhaW4KKysgICBkaWZmaWN1bHQgaGVhZGVycy4gIFRoZSA8Z251L3N0dWJzLmg+IGhlYWRlciBkZXBlbmRzLCB2aWEgdGhlCisrICAgRUdMSUJDIHN1YmRpciAnc3R1YnMnIG1ha2UgdGFyZ2V0cywgb24gZXZlcnkgLm8gZmlsZSBpbiBFR0xJQkMsIGJ1dAorKyAgIGFuIGVtcHR5IHN0dWJzLmggbGlrZSB0aGlzIHdpbGwgZG8gZmluZSBmb3IgR0NDLiAgKi8KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMS1lZ2xpYmMtY2hlcnJ5LXBpY2tlZC1mcm9tLWh0dHAtd3d3LmVnbGliYy5vcmctYXJjaGl2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmI4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIxLWVnbGliYy1jaGVycnktcGlja2VkLWZyb20taHR0cC13d3cuZWdsaWJjLm9yZy1hcmNoaXYucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBmZTJhZTRmODc3OTI4ZGQ2YmZmNWJhYzNmMTViY2U0YjUwZDJiZDEyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMTggTWFyIDIwMTUgMDA6NTE6MTYgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8yN10gZWdsaWJjOiBjaGVycnktcGlja2VkIGZyb20KKyBodHRwOi8vd3d3LmVnbGliYy5vcmcvYXJjaGl2ZXMvcGF0Y2hlcy9tc2cwMDc3Mi5odG1sCisKK0l0IGhhc24ndCB5ZXQgYmVlbiBtZXJnZWQgaW50byBnbGliYworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHJlc29sdi9yZXNfbGliYy5jIHwgMTUgKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9yZXNvbHYvcmVzX2xpYmMuYyBiL3Jlc29sdi9yZXNfbGliYy5jCitpbmRleCBlZTNmYTIxLi4yOWUyMzQwIDEwMDY0NAorLS0tIGEvcmVzb2x2L3Jlc19saWJjLmMKKysrKyBiL3Jlc29sdi9yZXNfbGliYy5jCitAQCAtMjIsMTIgKzIyLDEzIEBACisgI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorICNpbmNsdWRlIDxyZXNvbHYuaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKy0KKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAKKyAvKiBUaGUgZm9sbG93aW5nIGJpdCBpcyBjb3BpZWQgZnJvbSByZXNfZGF0YS5jICh3aGVyZSBpdCBpcyAjaWZkZWYnZWQKKyAgICBvdXQpIHNpbmNlIHJlc19pbml0KCkgc2hvdWxkIGdvIGludG8gbGliYy5zbyBidXQgdGhlIHJlc3Qgb2YgdGhhdAorICAgIGZpbGUgc2hvdWxkIG5vdC4gICovCisgCisrX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmVzX2luaXRzdGFtcCBhdHRyaWJ1dGVfaGlkZGVuOworIC8qIFdlIGhhdmUgYXRvbWljIGluY3JlbWVudCBvcGVyYXRpb25zIG9uIDY0LWJpdCBwbGF0Zm9ybXMuICAqLworICNpZiBfX1dPUkRTSVpFID09IDY0CitAQCAtMzUsNyArMzYsNiBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3Jlc19pbml0c3RhbXAgYXR0cmlidXRlX2hpZGRlbjsKKyAjIGRlZmluZSBhdG9taWNpbmN1bmxvY2sobG9jaykgKHZvaWQpIDAKKyAjIGRlZmluZSBhdG9taWNpbmModmFyKSBjYXRvbWljX2luY3JlbWVudCAoJih2YXIpKQorICNlbHNlCistX19saWJjX2xvY2tfZGVmaW5lX2luaXRpYWxpemVkIChzdGF0aWMsIGxvY2spOworICMgZGVmaW5lIGF0b21pY2luY2xvY2sobG9jaykgX19saWJjX2xvY2tfbG9jayAobG9jaykKKyAjIGRlZmluZSBhdG9taWNpbmN1bmxvY2sobG9jaykgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKQorICMgZGVmaW5lIGF0b21pY2luYyh2YXIpICsrdmFyCitAQCAtOTQsNyArOTQsMTggQEAgcmVzX2luaXQodm9pZCkgeworIGludAorIF9fcmVzX21heWJlX2luaXQgKHJlc19zdGF0ZSByZXNwLCBpbnQgcHJlaW5pdCkKKyB7CisrCXN0YXRpYyB0aW1lX3QgbGFzdF9tdGltZTsKKysJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysJaW50IHJldDsKKysKKyAJaWYgKHJlc3AtPm9wdGlvbnMgJiBSRVNfSU5JVCkgeworKwkJcmV0ID0gc3RhdCAoX1BBVEhfUkVTQ09ORiwgJnN0YXRidWYpOworKwkJX19saWJjX2xvY2tfbG9jayAobG9jayk7CisrCQlpZiAoKHJldCA9PSAwKSAmJiAobGFzdF9tdGltZSAhPSBzdGF0YnVmLnN0X210aW1lKSkgeworKwkJCWxhc3RfbXRpbWUgPSBzdGF0YnVmLnN0X210aW1lOworKwkJCWF0b21pY2luYyAoX19yZXNfaW5pdHN0YW1wKTsKKysJCX0KKysJCV9fbGliY19sb2NrX3VubG9jayAobG9jayk7CisgCQlpZiAoX19yZXNfaW5pdHN0YW1wICE9IHJlc3AtPl91Ll9leHQuaW5pdHN0YW1wKSB7CisgCQkJaWYgKHJlc3AtPm5zY291bnQgPiAwKQorIAkJCQlfX3Jlc19pY2xvc2UgKHJlc3AsIHRydWUpOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0YzljMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjItZWdsaWJjLUNsZWFyLWNhY2hlLWxpbmVzLW9uLXBwYzh4eC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIGJlNzI3MzIyNTY5ODA3NDM0N2E3MWRlNTgwMDY5NzdiYjMwNGQ3ZjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo1Mzo0NyArMDAwMAorU3ViamVjdDogW1BBVENIIDIyLzI3XSBlZ2xpYmM6IENsZWFyIGNhY2hlIGxpbmVzIG9uIHBwYzh4eAorCisyMDA3LTA2LTEzICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBjb2Rlc291cmNlcnkuY29tPgorICAgICAgICAgICAgTWFyayBTaGlud2VsbCAgPHNoaW53ZWxsQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYworICAgICAgICAoX19saWJjX3N0YXJ0X21haW4pOiBEZXRlY3QgOHh4IHBhcnRzIGFuZCBjbGVhcgorICAgICAgICBfX2NhY2hlX2xpbmVfc2l6ZSBpZiBkZXRlY3RlZC4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCisgICAgICAgIChETF9QTEFURk9STV9BVVhWKTogTGlrZXdpc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMgIHwgMTQgKysrKysrKysrKysrKy0KKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYyB8IDE1ICsrKysrKysrKysrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvZGwtc3lzZGVwLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2RsLXN5c2RlcC5jCitpbmRleCBjMjUwNGZmLi5kNTBmMWNiIDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9kbC1zeXNkZXAuYworQEAgLTI0LDkgKzI0LDIxIEBAIGludCBfX2NhY2hlX2xpbmVfc2l6ZSBhdHRyaWJ1dGVfaGlkZGVuOworIC8qIFNjYW4gdGhlIEF1eCBWZWN0b3IgZm9yIHRoZSAiRGF0YSBDYWNoZSBCbG9jayBTaXplIiBlbnRyeS4gIElmIGZvdW5kCisgICAgdmVyaWZ5IHRoYXQgdGhlIHN0YXRpYyBleHRlcm4gX19jYWNoZV9saW5lX3NpemUgaXMgZGVmaW5lZCBieSBjaGVja2luZworICAgIGZvciBub3QgTlVMTC4gIElmIGl0IGlzIGRlZmluZWQgdGhlbiBhc3NpZ24gdGhlIGNhY2hlIGJsb2NrIHNpemUKKy0gICB2YWx1ZSB0byBfX2NhY2hlX2xpbmVfc2l6ZS4gICovCisrICAgdmFsdWUgdG8gX19jYWNoZV9saW5lX3NpemUuICBUaGlzIGlzIHVzZWQgYnkgbWVtc2V0IHRvCisrICAgb3B0aW1pemUgc2V0dGluZyB0byB6ZXJvLiAgV2UgaGF2ZSB0byBkZXRlY3QgOHh4IHByb2Nlc3NvcnMsIHdoaWNoCisrICAgaGF2ZSBidWdneSBkY2J6IGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbm5vdCByZXBvcnQgcGFnZSBmYXVsdHMKKysgICBjb3JyZWN0bHkuICBUaGF0IHJlcXVpcmVzIHJlYWRpbmcgU1BSLCB3aGljaCBpcyBhIHByaXZpbGVnZWQKKysgICBvcGVyYXRpb24uICBGb3J0dW5hdGVseSAyLjIuMTggYW5kIGxhdGVyIGVtdWxhdGVzIFBvd2VyUEMgbWZzcHIKKysgICByZWFkcyBmcm9tIHRoZSBQVlIgcmVnaXN0ZXIuICAgKi8KKyAjZGVmaW5lIERMX1BMQVRGT1JNX0FVWFYJCQkJCQkgICAgICBcCisgICAgICAgY2FzZSBBVF9EQ0FDSEVCU0laRToJCQkJCQkgICAgICBcCisrCWlmIChfX0xJTlVYX0tFUk5FTF9WRVJTSU9OID49IDB4MDIwMjE4KQkJCQkgICAgICBcCisrCSAgewkJCQkJCQkJICAgICAgXAorKwkgICAgdW5zaWduZWQgcHZyID0gMDsJCQkJCQkgICAgICBcCisrCSAgICBhc20gKCJtZnNwciAlMCwgMjg3IiA6ICI9ciIgKHB2cikpOwkJCQkgICAgICBcCisrCSAgICBpZiAoKHB2ciAmIDB4ZmZmZjAwMDApID09IDB4MDA1MDAwMDApCQkJICAgICAgXAorKwkgICAgICBicmVhazsJCQkJCQkJICAgICAgXAorKwkgIH0JCQkJCQkJCSAgICAgIFwKKyAJX19jYWNoZV9saW5lX3NpemUgPSBhdi0+YV91bi5hX3ZhbDsJCQkJICAgICAgXAorIAlicmVhazsKKyAKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9wb3dlcnBjL2xpYmMtc3RhcnQuYyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCitpbmRleCBhOTM2NGM3Li5hM2VkMWQ0IDEwMDY0NAorLS0tIGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvcG93ZXJwYy9saWJjLXN0YXJ0LmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3Bvd2VycGMvbGliYy1zdGFydC5jCitAQCAtNjgsMTEgKzY4LDI0IEBAIF9fbGliY19zdGFydF9tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YsCisgICAgICAgcnRsZF9maW5pID0gTlVMTDsKKyAgICAgfQorIAorLSAgLyogSW5pdGlhbGl6ZSB0aGUgX19jYWNoZV9saW5lX3NpemUgdmFyaWFibGUgZnJvbSB0aGUgYXV4IHZlY3Rvci4gICovCisrICAvKiBJbml0aWFsaXplIHRoZSBfX2NhY2hlX2xpbmVfc2l6ZSB2YXJpYWJsZSBmcm9tIHRoZSBhdXggdmVjdG9yLgorKyAgICAgVGhpcyBpcyB1c2VkIGJ5IG1lbXNldCB0byBvcHRpbWl6ZSBzZXR0aW5nIHRvIHplcm8uICBXZSBoYXZlIHRvCisrICAgICBkZXRlY3QgOHh4IHByb2Nlc3NvcnMsIHdoaWNoIGhhdmUgYnVnZ3kgZGNieiBpbXBsZW1lbnRhdGlvbnMgdGhhdAorKyAgICAgY2Fubm90IHJlcG9ydCBwYWdlIGZhdWx0cyBjb3JyZWN0bHkuICBUaGF0IHJlcXVpcmVzIHJlYWRpbmcgU1BSLAorKyAgICAgd2hpY2ggaXMgYSBwcml2aWxlZ2VkIG9wZXJhdGlvbi4gIEZvcnR1bmF0ZWx5IDIuMi4xOCBhbmQgbGF0ZXIKKysgICAgIGVtdWxhdGVzIFBvd2VyUEMgbWZzcHIgcmVhZHMgZnJvbSB0aGUgUFZSIHJlZ2lzdGVyLiAgKi8KKyAgIGZvciAoRWxmVyAoYXV4dl90KSAqIGF2ID0gYXV4dmVjOyBhdi0+YV90eXBlICE9IEFUX05VTEw7ICsrYXYpCisgICAgIHN3aXRjaCAoYXYtPmFfdHlwZSkKKyAgICAgICB7CisgICAgICAgY2FzZSBBVF9EQ0FDSEVCU0laRToKKysJaWYgKF9fTElOVVhfS0VSTkVMX1ZFUlNJT04gPj0gMHgwMjAyMTgpCisrCSAgeworKwkgICAgdW5zaWduZWQgcHZyID0gMDsKKysKKysJICAgIGFzbSAoIm1mc3ByICUwLCAyODciIDogIj1yIiAocHZyKSA6KTsKKysJICAgIGlmICgocHZyICYgMHhmZmZmMDAwMCkgPT0gMHgwMDUwMDAwMCkKKysJICAgICAgYnJlYWs7CisrCSAgfQorIAlfX2NhY2hlX2xpbmVfc2l6ZSA9IGF2LT5hX3VuLmFfdmFsOworIAlicmVhazsKKyAgICAgICB9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzZDc1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjMtZWdsaWJjLVJlc29sdmUtX19mcHNjcl92YWx1ZXMtb24tU0g0LnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK0Zyb20gNzE4ZTdlNWRiMWM4YjA3M2FkYjlhNzllYzZmMTY3MjM4YzJkOGJkYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAwOjU1OjUzICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMjddIGVnbGliYzogUmVzb2x2ZSBfX2Zwc2NyX3ZhbHVlcyBvbiBTSDQKKworMjAxMC0wOS0yOSAgTm9idWhpcm8gSXdhbWF0c3UgIDxpd2FtYXRzdUBuaWdhdXJpLm9yZz4KKyAgICAgICAgICAgIEFuZHJldyBTdHViYnMgIDxhbXNAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgICAgICBSZXNvbHZlIFNIJ3MgX19mcHNjcl92YWx1ZXMgdG8gc3ltYm9sIGluIGxpYmMuc28uCisKKyAgICAgICAgKiBzeXNkZXBzL3NoL3NoNC9mcHUvZnB1X2NvbnRyb2wuaDogQWRkIEMrKyBfX3NldF9mcHNjciBwcm90b3R5cGUuCisgICAgICAgICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMgKEdMSUJDXzIuMik6IEFkZCBfX2Zwc2NyX3ZhbHVlcy4KKyAgICAgICAgKiBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUyAoX19fZnBzY3JfdmFsdWVzKTogTmV3IGNvbnN0YW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIHwgIDEgKworIHN5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TIHwgMTEgKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL1ZlcnNpb25zIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKK2luZGV4IGUwOTM4YzQuLmNhMWQ3ZGEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9WZXJzaW9ucworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvVmVyc2lvbnMKK0BAIC0yLDYgKzIsNyBAQCBsaWJjIHsKKyAgIEdMSUJDXzIuMiB7CisgICAgICMgZnVuY3Rpb25zIHVzZWQgaW4gb3RoZXIgbGlicmFyaWVzCisgICAgIF9feHN0YXQ2NDsgX19meHN0YXQ2NDsgX19seHN0YXQ2NDsKKysgICAgX19mcHNjcl92YWx1ZXM7CisgCisgICAgICMgYSoKKyAgICAgYWxwaGFzb3J0NjQ7CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy91bml4L3N5c3YvbGludXgvc2gvc3lzZGVwLlMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUworaW5kZXggYTAyYjdlMi4uYjliZTMyNiAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L3NoL3N5c2RlcC5TCisrKysgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9zaC9zeXNkZXAuUworQEAgLTMwLDMgKzMwLDE0IEBAIEVOVFJZIChfX3N5c2NhbGxfZXJyb3IpCisgCisgI2RlZmluZSBfX3N5c2NhbGxfZXJyb3IgX19zeXNjYWxsX2Vycm9yXzEKKyAjaW5jbHVkZSA8c3lzZGVwcy91bml4L3NoL3N5c2RlcC5TPgorKworKyAgICAgICAuZGF0YQorKyAgICAgICAuYWxpZ24gMworKyAgICAgICAuZ2xvYmwgX19fZnBzY3JfdmFsdWVzCisrICAgICAgIC50eXBlIF9fX2Zwc2NyX3ZhbHVlcywgQG9iamVjdAorKyAgICAgICAuc2l6ZSBfX19mcHNjcl92YWx1ZXMsIDgKKytfX19mcHNjcl92YWx1ZXM6CisrICAgICAgIC5sb25nIDAKKysgICAgICAgLmxvbmcgMHg4MDAwMAorK3dlYWtfYWxpYXMgKF9fX2Zwc2NyX3ZhbHVlcywgX19mcHNjcl92YWx1ZXMpCisrCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjQtZWdsaWJjLUZvcndhcmQtcG9ydC1lZ2xpYmMtb3B0aW9ucy1ncm91cHMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTE0ZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTY4NDIgQEAKK0Zyb20gMmE1ZDdiY2YwZmY3OTFjOTVlZTEzODg3NzI0MDhhMWJmNDQ1NDY5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjMzOjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMjddIGVnbGliYzogRm9yd2FyZCBwb3J0IGVnbGliYyBvcHRpb25zIGdyb3VwcyBzdXBwb3J0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZWNvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArLQorIE1ha2VydWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTkgKworIGFyZ3AvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIGFyZ3AvYXJncC1mbXRzdHJlYW0uYyAgICAgICAgICAgICAgICAgICB8ICAgMjUgKy0KKyBhcmdwL2FyZ3AtaGVscC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICstCisgYXJncC9hcmdwLW5hbWVmcm9iLmggICAgICAgICAgICAgICAgICAgIHwgICAgMiArCisgY2F0Z2V0cy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQorIGNyeXB0L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjAgKy0KKyBjcnlwdC9jcnlwdC1lbnRyeS5jICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyBjcnlwdC9jcnlwdF9jb21tb24uYyAgICAgICAgICAgICAgICAgICAgfCAgIDQyICsKKyBjcnlwdC9jcnlwdF91dGlsLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4IC0KKyBjc3UvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyBkZWJ1Zy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQxICstCisgZGVidWcvc2VnZmF1bHQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArLQorIGRlYnVnL3RzdC1jaGsxLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIGRsZmNuL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KKyBlbGYvZGwtc3VwcG9ydC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBlbGYvcnRsZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCisgZXh0cmEtbGliLm1rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQorIGdycC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIGhlc2lvZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBpY29udi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBpY29udi9nY29udl9kYi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKKyBpY29udi9nY29udl90cmFucy5jICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKKyBpY29udi9pY29udl9wcm9nLmMgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsKKyBpY29udmRhdGEvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgIDI3ICstCisgaW5jbHVkZS9uZXRkYi5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArCisgaW5ldC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMiArLQorIGludGwvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KKyBpbnRsL2RjaWdldHRleHQuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM5ICstCisgaW8vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCArLQorIGxpYmlkbi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KKyBsaWJpZG4vdG91dGY4LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICstCisgbGliaW8vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2NiArLQorIGxpYmlvL19fZnB1cmdlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJpby9maWxlb3BzLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCisgbGliaW8vaW9md2lkZS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCisgbGliaW8vaW9zZWVrb2ZmLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIGxpYmlvL2lvc2Vla3Bvcy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJpby9pb3NldGJ1ZmZlci5jICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKKyBsaWJpby9saWJpb1AuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgbGliaW8vd2R1bW15ZmlsZW9wcy5jICAgICAgICAgICAgICAgICAgIHwgIDE2MSArCisgbG9jYWxlL0MtY3R5cGUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArCisgbG9jYWxlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MSArLQorIGxvY2FsZS9jYXRuYW1lcy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDggKworIGxvY2FsZS9kdW1teS1zZXRsb2NhbGUuYyAgICAgICAgICAgICAgICB8ICAgMzMgKworIGxvY2FsZS9sb2NhbGVpbmZvLmggICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYyAgICAgICAgICAgfCAgICA2ICsKKyBsb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jICAgICAgICAgICAgfCAgIDE3ICstCisgbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMgICAgICAgICAgICAgIHwgICAyNyArLQorIGxvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jICAgICAgICAgICB8ICAgIDUgKworIGxvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBsb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jICAgICAgICAgICAgfCAgICAyICstCisgbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jICAgICAgICAgICAgIHwgICAgOCArCisgbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYyAgICAgICAgICAgICAgIHwgICAgNSArLQorIGxvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmggICAgICAgICAgICAgICB8ICAgNTkgKy0KKyBsb2NhbGUvc2V0bG9jYWxlLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDMwIC0KKyBsb2NhbGUveGxvY2FsZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsKKyBsb2NhbGVkYXRhL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDM1ICstCisgbG9naW4vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQorIG1hbGxvYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KKyBtYWxsb2MvbWVtdXNhZ2UuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICstCisgbWFsbG9jL21lbXVzYWdlLnNoICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIG1hdGgvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBtaXNjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI1ICstCisgbWlzYy9lcnIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCisgbWlzYy9lcnJvci5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgbWlzYy90c3QtZWZnY3Z0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQorIG5pcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzEgKy0KKyBucHRsL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI4ICstCisgbnB0bC9wdGhyZWFkX2NyZWF0ZS5jICAgICAgICAgICAgICAgICAgIHwgICAgNSArCisgbnNjZC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMyArLQorIG5zY2QvbmlzX2hhc2guYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIG5zcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjcgKy0KKyBuc3MvZml4ZWQtbnNzd2l0Y2guY29uZiAgICAgICAgICAgICAgICAgfCAgIDIyICsKKyBuc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zICAgICAgICAgICAgfCAgMTIxICsKKyBuc3MvZ2VuLWZpeGVkLW5zc3dpdGNoLmMgICAgICAgICAgICAgICAgfCAgODAzICsrKworIG5zcy9nZXRlbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDYgKy0KKyBuc3MvZ2V0bnNzZW50X3IuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICstCisgbnNzL25zc3dpdGNoLmMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwOSArLQorIG5zcy9uc3N3aXRjaC5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKy0KKyBwb3NpeC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk0ICstCisgcG9zaXgvYnVnLXJlZ2V4MS5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgMyArCisgcG9zaXgvYnVnLXJlZ2V4Ni5jICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArLQorIHBvc2l4L2ZubWF0Y2guYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKy0KKyBwb3NpeC9mbm1hdGNoX2xvb3AuYyAgICAgICAgICAgICAgICAgICAgfCAgIDIzICstCisgcG9zaXgvZ2xvYi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArLQorIHBvc2l4L3JlZ2NvbXAuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTggKy0KKyBwb3NpeC9yZWdleC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsKKyBwb3NpeC9yZWdleF9pbnRlcm5hbC5jICAgICAgICAgICAgICAgICAgfCAgIDQ1ICstCisgcG9zaXgvcmVnZXhfaW50ZXJuYWwuaCAgICAgICAgICAgICAgICAgIHwgICAyMyArLQorIHBvc2l4L3JlZ2V4ZWMtY29tcGF0LmMgICAgICAgICAgICAgICAgICB8ICAgMzkgKworIHBvc2l4L3JlZ2V4ZWMuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzEgKy0KKyBwb3NpeC94cmVnZXguYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCA4MjE1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBwd2QvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyByZXNvbHYvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICstCisgc3RkaW8tY29tbW9uL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICAzNSArLQorIHN0ZGlvLWNvbW1vbi9faTE4bl9udW1iZXIuaCAgICAgICAgICAgICB8ICAgMTMgKworIHN0ZGlvLWNvbW1vbi9meHByaW50Zi5jICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0ZGlvLWNvbW1vbi9wcmludGZfZnAuYyAgICAgICAgICAgICAgICB8ICAgMjIgKworIHN0ZGlvLWNvbW1vbi9wcmludGZfZnBoZXguYyAgICAgICAgICAgICB8ICAgMTMgKworIHN0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jICAgICAgICAgICAgICB8ICAgIDggKworIHN0ZGlvLWNvbW1vbi9zY2FuZjE0LmMgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN0ZGlvLWNvbW1vbi90c3QtcG9wZW4uYyAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jICAgICAgICAgICAgICB8ICAgIDQgKy0KKyBzdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdGRpby1jb21tb24vdmZwcmludGYuYyAgICAgICAgICAgICAgICAgfCAgIDMxICstCisgc3RkaW8tY29tbW9uL3Zmc2NhbmYuYyAgICAgICAgICAgICAgICAgIHwgICA1MyArLQorIHN0ZGxpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzQgKy0KKyBzdGRsaWIvc3RydG9kX2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEzICsKKyBzdGRsaWIvdHN0LXN0cnRvZC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsKKyBzdHJlYW1zL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCisgc3RyaW5nL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCArLQorIHN0cmluZy9zdHJjb2xsX2wuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmluZy9zdHJlcnJvcl9sLmMgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmluZy9zdHJ4ZnJtX2wuYyAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKworIHN0cmluZy90ZXN0LXN0cmNtcC5jICAgICAgICAgICAgICAgICAgICB8ICAgMjggLQorIHN0cmluZy90c3Qtc3RyeGZybS5jICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN0cmluZy90c3Qtc3RyeGZybTIuYyAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN1bnJwYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDQgKy0KKyBzeXNkZXBzL2FybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCisgc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmggICAgICAgICAgICAgIHwgICAgOCArCisgc3lzZGVwcy9nbnUvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgIHwgICAgMyArLQorIHN5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZSAgICAgICB8ICAgMjcgKy0KKyBzeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMgfCAgIDQwICstCisgc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oIHwgICAyNCArLQorIHN5c2RlcHMvbnB0bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgIDMgKworIHN5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oICAgICAgICAgICB8ICAgNDUgKworIHN5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9ja1AuaCAgICAgICAgICB8ICAgNTAgKy0KKyBzeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jICAgICAgICAgfCAgIDcyICsKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYyAgICAgfCAgICA2ICsKKyBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMgICAgfCAgICAzICsKKyB0aW1lL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICstCisgdGltZS9zdHJmdGltZV9sLmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiArLQorIHRpbWUvc3RycHRpbWVfbC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KKyB0aW1lem9uZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgd2NzbWJzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArLQorIHdjc21icy93Y3NtYnNsb2FkLmMgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKworIHdjdHlwZS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKy0KKyAxMzkgZmlsZXMgY2hhbmdlZCwgMTEzNjMgaW5zZXJ0aW9ucygrKSwgNTgzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjcnlwdC9jcnlwdF9jb21tb24uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJpby93ZHVtbXlmaWxlb3BzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbG9jYWxlL2NhdG5hbWVzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbG9jYWxlL2R1bW15LXNldGxvY2FsZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zY2QvbmlzX2hhc2guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc3MvZml4ZWQtbnNzd2l0Y2guY29uZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBuc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG5zcy9nZW4tZml4ZWQtbnNzd2l0Y2guYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBwb3NpeC9yZWdleGVjLWNvbXBhdC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHBvc2l4L3hyZWdleC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMKKworZGlmZiAtLWdpdCBhL01ha2Vjb25maWcgYi9NYWtlY29uZmlnCitpbmRleCBmMTM2Yjg4Li41MmRhZThmIDEwMDY0NAorLS0tIGEvTWFrZWNvbmZpZworKysrIGIvTWFrZWNvbmZpZworQEAgLTYwOSw3ICs2MDksNyBAQCBlbGYtb2JqcGZ4ID0gJChjb21tb24tb2JqcGZ4KWVsZi8KKyAjIGFuZCBydW4gb24gdGhlIGJ1aWxkIHN5c3RlbSwgY2F1c2VzIHRoYXQgcHJvZ3JhbSB3aXRoIHRob3NlCisgIyBhcmd1bWVudHMgdG8gYmUgcnVuIG9uIHRoZSBob3N0IGZvciB3aGljaCB0aGUgbGlicmFyeSBpcyBidWlsdC4KKyBpZm5kZWYgdGVzdC13cmFwcGVyCistdGVzdC13cmFwcGVyID0KKyt0ZXN0LXdyYXBwZXIgPSAkKGNyb3NzLXRlc3Qtd3JhcHBlcikKKyBlbmRpZgorICMgTGlrZXdpc2UsIGJ1dCB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSBpcyBwcmVjZWRlZCBieQorICMgPHZhcmlhYmxlPj08dmFsdWU+IGFzc2lnbm1lbnRzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCitAQCAtMTA4OSw2ICsxMDg5LDI0IEBAIGxpYm0gPSAkKGNvbW1vbi1vYmpwZngpbWF0aC9saWJtLmEKKyBsaWJtdmVjID0gJChjb21tb24tb2JqcGZ4KW1hdGh2ZWMvbGlibXZlYy5hCisgZW5kaWYKKyAKKysjIEdlbmVyYXRlIGEgaGVhZGVyIGZpbGUgdGhhdCAjZGVmaW5lcyBwcmVwcm9jZXNzb3Igc3ltYm9scyBpbmRpY2F0aW5nCisrIyB3aGljaCBvcHRpb24gZ3JvdXBzIGFyZSBlbmFibGVkLiAgTm90ZSB0aGF0IHRoZSBvcHRpb24tZ3JvdXBzLmNvbmZpZyBmaWxlCisrIyBtYXkgbm90IGV4aXN0IGF0IGFsbC4KKytiZWZvcmUtY29tcGlsZSArPSAkKGNvbW1vbi1vYmpwZngpZ251L29wdGlvbi1ncm91cHMuaAorK2NvbW1vbi1nZW5lcmF0ZWQgKz0gZ251L29wdGlvbi1ncm91cHMuaCBnbnUvb3B0aW9uLWdyb3Vwcy5zdG1wCisraGVhZGVycyArPSBnbnUvb3B0aW9uLWdyb3Vwcy5oCisrJChjb21tb24tb2JqcGZ4KWdudS9vcHRpb24tZ3JvdXBzLmg6ICQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5zdG1wOyBAOgorKyQoY29tbW9uLW9ianBmeClnbnUvb3B0aW9uLWdyb3Vwcy5zdG1wOgkJCQkJXAorKwkJJCguLilzY3JpcHRzL29wdGlvbi1ncm91cHMuYXdrCQkJCVwKKysJCSQoLi4pb3B0aW9uLWdyb3Vwcy5kZWZhdWx0cwkJCQlcCisrCQkkKHdpbGRjYXJkICQoY29tbW9uLW9ianBmeClvcHRpb24tZ3JvdXBzLmNvbmZpZykKKysJJChtYWtlLXRhcmdldC1kaXJlY3RvcnkpCisrCUBybSAtZiAke0A6c3RtcD1UfSAkQAorKwlMQ19BTEw9QyAkKEFXSykgLWYgJF4gPiAke0A6c3RtcD1UfQorKwkkKG1vdmUtaWYtY2hhbmdlKSAke0A6c3RtcD1UfSAke0A6c3RtcD1ofQorKwl0b3VjaCAkQAorKworKworICMgVGhlc2UgYXJlIHRoZSBzdWJkaXJlY3RvcmllcyBjb250YWluaW5nIHRoZSBsaWJyYXJ5IHNvdXJjZS4gIFRoZSBvcmRlcgorICMgaXMgbW9yZSBvciBsZXNzIGFyYml0cmFyeS4gIFRoZSBzb3J0aW5nIHN0ZXAgd2lsbCB0YWtlIGNhcmUgb2YgdGhlCisgIyBkZXBlbmRlbmNpZXMuCitkaWZmIC0tZ2l0IGEvTWFrZXJ1bGVzIGIvTWFrZXJ1bGVzCitpbmRleCBmOWNhM2Y1Li4xZGQ0MWFhIDEwMDY0NAorLS0tIGEvTWFrZXJ1bGVzCisrKysgYi9NYWtlcnVsZXMKK0BAIC00NTYsNiArNDU2LDI1IEBAIGRlZmluZSBzZWQtcmVtb3ZlLW9ianBmeAorIGVuZGVmCisgZW5kaWYKKyAMCisrIyBJbmNsdWRlIHRhcmdldHMgaW4gdGhlIHNlbGVjdGVkIG9wdGlvbiBncm91cHMuCisrYXV4ICAgICAgICAgICAgICAgICAgKz0gJChhdXgteSkKKytleHRyYS1saWJzICAgICAgICAgICArPSAkKGV4dHJhLWxpYnMteSkKKytleHRyYS1saWJzLW90aGVycyAgICArPSAkKGV4dHJhLWxpYnMtb3RoZXJzLXkpCisrZXh0cmEtb2JqcyAgICAgICAgICAgKz0gJChleHRyYS1vYmpzLXkpCisraW5zdGFsbC1iaW4gICAgICAgICAgKz0gJChpbnN0YWxsLWJpbi15KQorK2luc3RhbGwtb3RoZXJzICAgICAgICs9ICQoaW5zdGFsbC1vdGhlcnMteSkKKytpbnN0YWxsLXNiaW4gICAgICAgICArPSAkKGluc3RhbGwtc2Jpbi15KQorK21vZHVsZXMgICAgICAgICAgICAgICs9ICQobW9kdWxlcy15KQorK290aGVycyAgICAgICAgICAgICAgICs9ICQob3RoZXJzLXkpCisrb3RoZXJzLXBpZSAgICAgICAgICAgKz0gJChvdGhlcnMtcGllLXkpCisrcm91dGluZXMgICAgICAgICAgICAgKz0gJChyb3V0aW5lcy15KQorK3N0YXRpYy1vbmx5LXJvdXRpbmVzICs9ICQoc3RhdGljLW9ubHktcm91dGluZXMteSkKKytzeXNkZXBfcm91dGluZXMgICAgICArPSAkKHN5c2RlcF9yb3V0aW5lcy15KQorK3Rlc3Qtc3JjcyAgICAgICAgICAgICs9ICQodGVzdC1zcmNzLXkpCisrdGVzdHMgICAgICAgICAgICAgICAgKz0gJCh0ZXN0cy15KQorK3h0ZXN0cyAgICAgICAgICAgICAgICs9ICQoeHRlc3RzLXkpCisrCisrDAorICMgTW9kaWZ5IHRoZSBsaXN0IG9mIHJvdXRpbmVzIHdlIGJ1aWxkIGZvciBkaWZmZXJlbnQgdGFyZ2V0cworIAorIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCitkaWZmIC0tZ2l0IGEvYXJncC9NYWtlZmlsZSBiL2FyZ3AvTWFrZWZpbGUKK2luZGV4IDFhODc2MjkuLmY3YzFlNDAgMTAwNjQ0CistLS0gYS9hcmdwL01ha2VmaWxlCisrKysgYi9hcmdwL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBhcmdwLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGFyZ3AKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK2RpZmYgLS1naXQgYS9hcmdwL2FyZ3AtZm10c3RyZWFtLmMgYi9hcmdwL2FyZ3AtZm10c3RyZWFtLmMKK2luZGV4IDJiODQ1ZTAuLmMzNDRlN2IgMTAwNjQ0CistLS0gYS9hcmdwL2FyZ3AtZm10c3RyZWFtLmMKKysrKyBiL2FyZ3AvYXJncC1mbXRzdHJlYW0uYworQEAgLTQyLDYgKzQyLDcgQEAKKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPHdjaGFyLmg+CisgIyBpbmNsdWRlIDxsaWJpby9saWJpb1AuaD4KKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgIyBkZWZpbmUgX192c25wcmludGYocywgbCwgZiwgYSkgX0lPX3ZzbnByaW50ZiAocywgbCwgZiwgYSkKKyAjZW5kaWYKKyAKK0BAIC0xMDAsNyArMTAxLDExIEBAIF9fYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChmcyk7CisgICBpZiAoZnMtPnAgPiBmcy0+YnVmKQorICAgICB7CisrI2lmZGVmIF9MSUJDCisgICAgICAgX19meHByaW50ZiAoZnMtPnN0cmVhbSwgIiUuKnMiLCAoaW50KSAoZnMtPnAgLSBmcy0+YnVmKSwgZnMtPmJ1Zik7CisrI2Vsc2UKKysgICAgICBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIGZzLT5wIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrI2VuZGlmCisgICAgIH0KKyAgIGZyZWUgKGZzLT5idWYpOworICAgZnJlZSAoZnMpOworQEAgLTE0NSw5ICsxNTAsMTcgQEAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisgCSAgICAgIHNpemVfdCBpOworIAkgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkOyBpKyspCisgCQl7CisrI2lmZGVmIF9MSUJDCisgCQkgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKy0JCSAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgICAgICB7CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworKyAgICAgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICAgICAgICB9CisgCQkgIGVsc2UKKysjZW5kaWYKKyAJCSAgICBwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworIAkJfQorIAkgICAgfQorQEAgLTMwOCw5ICszMjEsMTcgQEAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisgCSAgICAgICpubCsrID0gJyAnOworIAkgIGVsc2UKKyAJICAgIGZvciAoaSA9IDA7IGkgPCBmcy0+d21hcmdpbjsgKytpKQorKyNpZmRlZiBfTElCQworIAkgICAgICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCistCQlwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgIHsKKysjaWZkZWYgT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKysgICAgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICBhYm9ydCAoKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgfQorIAkgICAgICBlbHNlCisrI2VuZGlmCisgCQlwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworIAorIAkgIC8qIENvcHkgdGhlIHRhaWwgb2YgdGhlIG9yaWdpbmFsIGJ1ZmZlciBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlcgorZGlmZiAtLWdpdCBhL2FyZ3AvYXJncC1oZWxwLmMgYi9hcmdwL2FyZ3AtaGVscC5jCitpbmRleCBiMDU1ZTQ1Li42YjNjNGMxIDEwMDY0NAorLS0tIGEvYXJncC9hcmdwLWhlbHAuYworKysrIGIvYXJncC9hcmdwLWhlbHAuYworQEAgLTUxLDYgKzUxLDcgQEAgY2hhciAqYWxsb2NhICgpOworICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8Li4vbGliaW8vbGliaW9QLmg+CisgIyBpbmNsdWRlIDx3Y2hhci5oPgorKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjZW5kaWYKKyAKKyAjaWZuZGVmIF8KK0BAIC0xNzAyLDcgKzE3MDMsNyBAQCBjaGFyICpfX2FyZ3BfYmFzZW5hbWUgKGNoYXIgKm5hbWUpCisgfQorIAorIGNoYXIgKgorLV9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKHZvaWQpCisrKF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUpICh2b2lkKQorIHsKKyAjIGlmIEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRQorICAgcmV0dXJuIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOworQEAgLTE4NzMsOSArMTg3NCwxNyBAQCBfX2FyZ3BfZmFpbHVyZSAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgZXJybnVtLAorICNlbmRpZgorIAkgICAgfQorIAorKyNpZmRlZiBfTElCQworIAkgIGlmIChfSU9fZndpZGUgKHN0cmVhbSwgMCkgPiAwKQorLQkgICAgcHV0d2NfdW5sb2NrZWQgKEwnXG4nLCBzdHJlYW0pOworKyAgICAgICAgICAgIHsKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0cmVhbSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgIGFib3J0ICgpOworKyNlbmRpZgorKyAgICAgICAgICAgIH0KKyAJICBlbHNlCisrI2VuZGlmCisgCSAgICBwdXRjX3VubG9ja2VkICgnXG4nLCBzdHJlYW0pOworIAorICNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKK2RpZmYgLS1naXQgYS9hcmdwL2FyZ3AtbmFtZWZyb2IuaCBiL2FyZ3AvYXJncC1uYW1lZnJvYi5oCitpbmRleCBmNjdjNThmLi5lMjAwMmRjIDEwMDY0NAorLS0tIGEvYXJncC9hcmdwLW5hbWVmcm9iLmgKKysrKyBiL2FyZ3AvYXJncC1uYW1lZnJvYi5oCitAQCAtNzYsMTAgKzc2LDEyIEBACisgI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbgorICNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIGFyZ3BfZm10c3RyZWFtX3dtYXJnaW4KKyAKKysjaWYgMAorICNpbmNsdWRlICJtZW1wY3B5LmgiCisgI2luY2x1ZGUgInN0cmNhc2UuaCIKKyAjaW5jbHVkZSAic3RyY2hybnVsLmgiCisgI2luY2x1ZGUgInN0cm5kdXAuaCIKKysjZW5kaWYKKyAKKyAvKiBub3JtYWwgbGliYyBmdW5jdGlvbnMgd2UgY2FsbCAqLworICN1bmRlZiBfX2Zsb2NrZmlsZQorZGlmZiAtLWdpdCBhL2NhdGdldHMvTWFrZWZpbGUgYi9jYXRnZXRzL01ha2VmaWxlCitpbmRleCA0NjI0YTg4Li4wNTcxNGZkIDEwMDY0NAorLS0tIGEvY2F0Z2V0cy9NYWtlZmlsZQorKysrIGIvY2F0Z2V0cy9NYWtlZmlsZQorQEAgLTIyLDIwICsyMiwyMyBAQCBzdWJkaXIJOj0gY2F0Z2V0cworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBoZWFkZXJzCQk9IG5sX3R5cGVzLmgKKy1yb3V0aW5lcwk9IGNhdGdldHMgb3Blbl9jYXRhbG9nCistb3RoZXJzCQk9IGdlbmNhdAorLWluc3RhbGwtYmluCT0gZ2VuY2F0CistZXh0cmEtb2Jqcwk9ICQoZ2VuY2F0LW1vZHVsZXM6PS5vKQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgICA6PSBjYXRnZXRzIG9wZW5fY2F0YWxvZworK290aGVycy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICAgICA6PSBnZW5jYXQKKytpbnN0YWxsLWJpbi0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgOj0gZ2VuY2F0CisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgIDo9ICQoZ2VuY2F0LW1vZHVsZXM6PS5vKQorIAorLXRlc3RzID0gdHN0LWNhdGdldHMKKy10ZXN0LXNyY3MgPSB0ZXN0LWdlbmNhdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DQVRHRVRTKSAgICAgICA6PSB0c3QtY2F0Z2V0cworK3Rlc3Qtc3Jjcy0kKE9QVElPTl9FR0xJQkNfQ0FUR0VUUykgICA6PSB0ZXN0LWdlbmNhdAorIAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NBVEdFVFMpKQorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClkZS9saWJjLmNhdCAkKG9ianBmeCl0ZXN0MS5jYXQgJChvYmpwZngpdGVzdDIuY2F0IFwKKyAJCSAkKG9ianBmeClzYW1wbGUuU0pJUy5jYXQgJChvYmpwZngpdGVzdC1nZW5jYXQub3V0CisgZW5kaWYKKy0KKytlbmRpZgorIGdlbmNhdC1tb2R1bGVzCT0geG1hbGxvYworIAorICMgVG8gZmluZCB4bWFsbG9jLmMKK2RpZmYgLS1naXQgYS9jcnlwdC9NYWtlZmlsZSBiL2NyeXB0L01ha2VmaWxlCitpbmRleCAzNGM0ZGQ3Li43YzE4Yzg4IDEwMDY0NAorLS0tIGEvY3J5cHQvTWFrZWZpbGUKKysrKyBiL2NyeXB0L01ha2VmaWxlCitAQCAtMTgsMjEgKzE4LDI1IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBjcnlwdCgpIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gY3J5cHQKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzIDo9IGNyeXB0LmgKKyAKKy1leHRyYS1saWJzIDo9IGxpYmNyeXB0CistZXh0cmEtbGlicy1vdGhlcnMgOj0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX0NSWVBUKSA6PSBsaWJjcnlwdAorK2V4dHJhLWxpYnMtb3RoZXJzLXkgOj0gJChleHRyYS1saWJzLXkpCisgCistbGliY3J5cHQtcm91dGluZXMgOj0gY3J5cHQtZW50cnkgbWQ1LWNyeXB0IHNoYTI1Ni1jcnlwdCBzaGE1MTItY3J5cHQgY3J5cHQgXAorLQkJICAgICBjcnlwdF91dGlsCisrbGliY3J5cHQtcm91dGluZXMgOj1jcnlwdC1lbnRyeSAgbWQ1LWNyeXB0IHNoYTI1Ni1jcnlwdCBzaGE1MTItY3J5cHQgY3J5cHRfY29tbW9uCisrbGliY3J5cHQtcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0NSWVBUX1VGQykgOj0gY3J5cHQgY3J5cHRfdXRpbAorK2xpYmNyeXB0LXJvdXRpbmVzICs9ICQobGliY3J5cHQtcm91dGluZXMteSkKKyAKKy10ZXN0cyA6PSBjZXJ0IG1kNWMtdGVzdCBzaGEyNTZjLXRlc3Qgc2hhNTEyYy10ZXN0IGJhZHNhbHR0ZXN0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NSWVBUKSA6PSBtZDVjLXRlc3Qgc2hhMjU2Yy10ZXN0IHNoYTUxMmMtdGVzdCBiYWRzYWx0dGVzdAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DUllQVF9VRkMpICs9IGNlcnQKKyAKKy1pZmVxICgkKGNyeXB0LWluLWxpYmMpLHllcykKKytpZmVxICgkKGNyeXB0LWluLWxpYmMpJChPUFRJT05fRUdMSUJDX0NSWVBUKSx5ZXN5KQorIHJvdXRpbmVzICs9ICQobGliY3J5cHQtcm91dGluZXMpCisgZW5kaWYKKyAKK0BAIC00NCw3ICs0OCw3IEBAIExETElCUy1jcnlwdC5zbyA9IC1sZnJlZWJsMworIGVsc2UKKyBsaWJjcnlwdC1yb3V0aW5lcyArPSBtZDUgc2hhMjU2IHNoYTUxMgorIAorLXRlc3RzICs9IG1kNXRlc3Qgc2hhMjU2dGVzdCBzaGE1MTJ0ZXN0CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0NSWVBUKSArPSBtZDV0ZXN0IHNoYTI1NnRlc3Qgc2hhNTEydGVzdAorIAorICMgVGhlIHRlc3QgbWQ1dGVzdC1naWFudCB1c2VzIHVwIHRvIDQwMCBNQiBvZiBSU1MgYW5kIHJ1bnMgb24gYSBmYXN0CisgIyBtYWNoaW5lIG92ZXIgYSBtaW51dGUuCitAQCAtNjQsOCArNjgsMTAgQEAgJChvYmpwZngpc2hhMjU2dGVzdDogJChwYXRzdWJzdCAlLCAkKG9ianBmeCklLm8sJChzaGEyNTYtcm91dGluZXMpKQorICQob2JqcGZ4KXNoYTUxMnRlc3Q6ICQocGF0c3Vic3QgJSwgJChvYmpwZngpJS5vLCQoc2hhNTEyLXJvdXRpbmVzKSkKKyBlbmRpZgorIAorK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19DUllQVCkseSkKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorICQoYWRkcHJlZml4ICQob2JqcGZ4KSwkKHRlc3RzKSk6ICQob2JqcGZ4KWxpYmNyeXB0LnNvCisgZWxzZQorICQoYWRkcHJlZml4ICQob2JqcGZ4KSwkKHRlc3RzKSk6ICQob2JqcGZ4KWxpYmNyeXB0LmEKKyBlbmRpZgorK2VuZGlmICMgZWdsaWJjOiBPUFRJT05fRUdMSUJDX0NSWVBUCitkaWZmIC0tZ2l0IGEvY3J5cHQvY3J5cHQtZW50cnkuYyBiL2NyeXB0L2NyeXB0LWVudHJ5LmMKK2luZGV4IDdlNjU1YmEuLjZhZTVjMmIgMTAwNjQ0CistLS0gYS9jcnlwdC9jcnlwdC1lbnRyeS5jCisrKysgYi9jcnlwdC9jcnlwdC1lbnRyeS5jCitAQCAtMjcsNiArMjcsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNlbmRpZgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8Zmlwcy1wcml2YXRlLmg+CisgCitAQCAtNzYsOSArNzcsMTEgQEAgX19jcnlwdF9yIChrZXksIHNhbHQsIGRhdGEpCisgICAgICBjb25zdCBjaGFyICpzYWx0OworICAgICAgc3RydWN0IGNyeXB0X2RhdGEgKiBfX3Jlc3RyaWN0IGRhdGE7CisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDCisgICB1ZmNfbG9uZyByZXNbNF07CisgICBjaGFyIGt0YWJbOV07CisgICB1ZmNfbG9uZyB4eCA9IDI1OyAvKiB0byBjb3BlIHdpdGggR0NDIGxvbmcgbG9uZyBjb21waWxlciBidWdzICovCisrI2VuZGlmIC8qX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQyovCisgCisgI2lmZGVmIF9MSUJDCisgICAvKiBUcnkgdG8gZmluZCBvdXQgd2hldGhlciB3ZSBoYXZlIHRvIHVzZSBNRDUgZW5jcnlwdGlvbiByZXBsYWNlbWVudC4gICovCitAQCAtMTA1LDYgKzEwOCw3IEBAIF9fY3J5cHRfciAoa2V5LCBzYWx0LCBkYXRhKQorIAkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgY3J5cHRfZGF0YSkpOworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDCisgICAvKgorICAgICogSGFjayBERVMgdGFibGVzIGFjY29yZGluZyB0byBzYWx0CisgICAgKi8KK0BAIC0xNDQsNiArMTQ4LDEwIEBAIF9fY3J5cHRfciAoa2V5LCBzYWx0LCBkYXRhKQorICAgICovCisgICBfdWZjX291dHB1dF9jb252ZXJzaW9uX3IgKHJlc1swXSwgcmVzWzFdLCBzYWx0LCBkYXRhKTsKKyAgIHJldHVybiBkYXRhLT5jcnlwdF8zX2J1ZjsKKysjZWxzZSAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisrICBfX3NldF9lcnJubyAoRU5PU1lTKTsKKysgIHJldHVybiBOVUxMOworKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQ1JZUFRfVUZDICovCisgfQorIHdlYWtfYWxpYXMgKF9fY3J5cHRfciwgY3J5cHRfcikKKyAKK0BAIC0xNjgsNyArMTc2LDEyIEBAIGNyeXB0IChrZXksIHNhbHQpCisgICAgIHJldHVybiBfX3NoYTUxMl9jcnlwdCAoa2V5LCBzYWx0KTsKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0NSWVBUX1VGQworICAgcmV0dXJuIF9fY3J5cHRfciAoa2V5LCBzYWx0LCAmX3VmY19mb29iYXIpOworKyNlbHNlIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKysgIF9fc2V0X2Vycm5vIChFTk9TWVMpOworKyAgcmV0dXJuIE5VTEw7CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19DUllQVF9VRkMgKi8KKyB9CisgCisgCitkaWZmIC0tZ2l0IGEvY3J5cHQvY3J5cHRfY29tbW9uLmMgYi9jcnlwdC9jcnlwdF9jb21tb24uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNjZTZhMzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2NyeXB0L2NyeXB0X2NvbW1vbi5jCitAQCAtMCwwICsxLDQyIEBACisrLyoKKysgKiBjcnlwdDogY3J5cHQoMykgaW1wbGVtZW50YXRpb24KKysgKgorKyAqIENvcHlyaWdodCAoQykgMTk5MS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKysgKiBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyAqCisrICogR2VuZXJhbCBTdXBwb3J0IHJvdXRpbmVzCisrICoKKysgKi8KKysKKysjaW5jbHVkZSAiY3J5cHQtcHJpdmF0ZS5oIgorKworKy8qIFRhYmxlIHdpdGggY2hhcmFjdGVycyBmb3IgYmFzZTY0IHRyYW5zZm9ybWF0aW9uLiAgKi8KKytzdGF0aWMgY29uc3QgY2hhciBiNjR0WzY0XSA9CisrIi4vMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworKworK3ZvaWQKKytfX2I2NF9mcm9tXzI0Yml0IChjaGFyICoqY3AsIGludCAqYnVmbGVuLAorKwkJICB1bnNpZ25lZCBpbnQgYjIsIHVuc2lnbmVkIGludCBiMSwgdW5zaWduZWQgaW50IGIwLAorKwkJICBpbnQgbikKKyt7CisrICB1bnNpZ25lZCBpbnQgdyA9IChiMiA8PCAxNikgfCAoYjEgPDwgOCkgfCBiMDsKKysgIHdoaWxlIChuLS0gPiAwICYmICgqYnVmbGVuKSA+IDApCisrICAgIHsKKysgICAgICAqKCpjcCkrKyA9IGI2NHRbdyAmIDB4M2ZdOworKyAgICAgIC0tKCpidWZsZW4pOworKyAgICAgIHcgPj49IDY7CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvY3J5cHQvY3J5cHRfdXRpbC5jIGIvY3J5cHQvY3J5cHRfdXRpbC5jCitpbmRleCAxNTk3ODg1Li45Mjk3OTc0IDEwMDY0NAorLS0tIGEvY3J5cHQvY3J5cHRfdXRpbC5jCisrKysgYi9jcnlwdC9jcnlwdF91dGlsLmMKK0BAIC0yNDIsMTAgKzI0Miw2IEBAIHN0YXRpYyB1ZmNfbG9uZyBlcGVybTMydGFiWzRdWzI1Nl1bMl07CisgICovCisgc3RhdGljIHVmY19sb25nIGVmcFsxNl1bNjRdWzJdOworIAorLS8qIFRhYmxlIHdpdGggY2hhcmFjdGVycyBmb3IgYmFzZTY0IHRyYW5zZm9ybWF0aW9uLiAgKi8KKy1zdGF0aWMgY29uc3QgY2hhciBiNjR0WzY0XSA9CistIi4vMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworLQorIC8qCisgICogRm9yIHVzZSBieSB0aGUgb2xkLCBub24tcmVlbnRyYW50IHJvdXRpbmVzCisgICogKGNyeXB0L2VuY3J5cHQvc2V0a2V5KQorQEAgLTk0OSwxNyArOTQ1LDMgQEAgc2V0a2V5KF9fa2V5KQorIHsKKyAgIF9fc2V0a2V5X3IoX19rZXksICZfdWZjX2Zvb2Jhcik7CisgfQorLQorLXZvaWQKKy1fX2I2NF9mcm9tXzI0Yml0IChjaGFyICoqY3AsIGludCAqYnVmbGVuLAorLQkJICB1bnNpZ25lZCBpbnQgYjIsIHVuc2lnbmVkIGludCBiMSwgdW5zaWduZWQgaW50IGIwLAorLQkJICBpbnQgbikKKy17CistICB1bnNpZ25lZCBpbnQgdyA9IChiMiA8PCAxNikgfCAoYjEgPDwgOCkgfCBiMDsKKy0gIHdoaWxlIChuLS0gPiAwICYmICgqYnVmbGVuKSA+IDApCistICAgIHsKKy0gICAgICAqKCpjcCkrKyA9IGI2NHRbdyAmIDB4M2ZdOworLSAgICAgIC0tKCpidWZsZW4pOworLSAgICAgIHcgPj49IDY7CistICAgIH0KKy19CitkaWZmIC0tZ2l0IGEvY3N1L01ha2VmaWxlIGIvY3N1L01ha2VmaWxlCitpbmRleCA5ZjA4NTVhLi5iMWMzMzYzIDEwMDY0NAorLS0tIGEvY3N1L01ha2VmaWxlCisrKysgYi9jc3UvTWFrZWZpbGUKK0BAIC0yMiw2ICsyMiw4IEBACisgIyBjcnRuLm8sIHNwZWNpYWwgImluaXRpYWxpemVyIiBhbmQgImZpbmFsaXplciIgZmlsZXMgdXNlZCBpbiB0aGUgbGluaworICMgdG8gbWFrZSB0aGUgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsgcmlnaHQuCisgCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpciA6PSBjc3UKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK2RpZmYgLS1naXQgYS9kZWJ1Zy9NYWtlZmlsZSBiL2RlYnVnL01ha2VmaWxlCitpbmRleCA5ZmYzNTdiLi5kMjNkOTdkIDEwMDY0NAorLS0tIGEvZGVidWcvTWFrZWZpbGUKKysrKyBiL2RlYnVnL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgZGVidWcgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBkZWJ1ZworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDcgKzI5LDcgQEAgaGVhZGVycwk6PSBleGVjaW5mby5oCisgIyBOb3RlIHRoYXQgcHRzbmFtZV9yX2NoayBhbmQgZ2V0bG9naW5fciBhcmUgbm90IGhlcmUsIGJ1dCBpbgorICMgbG9naW4vTWFrZWZpbGUgaW5zdGVhZC4gIElmIHRoYXQgc3ViZGlyIGlzIG9taXR0ZWQgZnJvbSB0aGUKKyAjIGJ1aWxkLCBpdHMgX0ZPUlRJRllfU09VUkNFIHN1cHBvcnQgd2lsbCBiZSB0b28uCistcm91dGluZXMgID0gYmFja3RyYWNlIGJhY2t0cmFjZXN5bXMgYmFja3RyYWNlc3ltc2ZkIG5vb3Bob29rcyBcCisrcm91dGluZXMgID0gbm9vcGhvb2tzIFwKKyAJICAgIG1lbWNweV9jaGsgbWVtbW92ZV9jaGsgbWVtcGNweV9jaGsgbWVtc2V0X2NoayBzdHBjcHlfY2hrIFwKKyAJICAgIHN0cmNhdF9jaGsgc3RyY3B5X2NoayBzdHJuY2F0X2NoayBzdHJuY3B5X2NoayBzdHBuY3B5X2NoayBcCisgCSAgICBzcHJpbnRmX2NoayB2c3ByaW50Zl9jaGsgc25wcmludGZfY2hrIHZzbnByaW50Zl9jaGsgXAorQEAgLTM2LDIwICszOCwyNyBAQCByb3V0aW5lcyAgPSBiYWNrdHJhY2UgYmFja3RyYWNlc3ltcyBiYWNrdHJhY2VzeW1zZmQgbm9vcGhvb2tzIFwKKyAJICAgIHJlYWRfY2hrIHByZWFkX2NoayBwcmVhZDY0X2NoayByZWN2X2NoayByZWN2ZnJvbV9jaGsgXAorIAkgICAgcmVhZGxpbmtfY2hrIHJlYWRsaW5rYXRfY2hrIGdldHdkX2NoayBnZXRjd2RfY2hrIFwKKyAJICAgIHJlYWxwYXRoX2NoayBmcmVhZF9jaGsgZnJlYWRfdV9jaGsgXAorLQkgICAgd2N0b21iX2NoayB3Y3NjcHlfY2hrIHdtZW1jcHlfY2hrIHdtZW1tb3ZlX2NoayB3bWVtcGNweV9jaGsgXAorLQkgICAgd2NwY3B5X2NoayB3Y3NuY3B5X2NoayB3Y3NjYXRfY2hrIHdjc25jYXRfY2hrIHdtZW1zZXRfY2hrIFwKKy0JICAgIHdjcG5jcHlfY2hrIFwKKy0JICAgIHN3cHJpbnRmX2NoayB2c3dwcmludGZfY2hrIHdwcmludGZfY2hrIGZ3cHJpbnRmX2NoayBcCistCSAgICB2d3ByaW50Zl9jaGsgdmZ3cHJpbnRmX2NoayBmZ2V0d3NfY2hrIGZnZXR3c191X2NoayBcCisgCSAgICBjb25mc3RyX2NoayBnZXRncm91cHNfY2hrIHR0eW5hbWVfcl9jaGsgXAorLQkgICAgZ2V0aG9zdG5hbWVfY2hrIGdldGRvbWFpbm5hbWVfY2hrIHdjcnRvbWJfY2hrIG1ic25ydG93Y3NfY2hrIFwKKy0JICAgIHdjc25ydG9tYnNfY2hrIG1ic3J0b3djc19jaGsgd2NzcnRvbWJzX2NoayBtYnN0b3djc19jaGsgXAorLQkgICAgd2NzdG9tYnNfY2hrIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKysJICAgIGdldGhvc3RuYW1lX2NoayBnZXRkb21haW5uYW1lX2NoayBcCisrCSAgICBhc3ByaW50Zl9jaGsgdmFzcHJpbnRmX2NoayBkcHJpbnRmX2NoayBcCisgCSAgICB2ZHByaW50Zl9jaGsgb2JwcmludGZfY2hrIFwKKyAJICAgIGxvbmdqbXBfY2hrIF9fX19sb25nam1wX2NoayBcCisgCSAgICBmZGVsdF9jaGsgcG9sbF9jaGsgcHBvbGxfY2hrIFwKKyAJICAgIHN0YWNrX2Noa19mYWlsIGZvcnRpZnlfZmFpbCBcCisgCSAgICAkKHN0YXRpYy1vbmx5LXJvdXRpbmVzKQorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UpICs9IGJhY2t0cmFjZSBiYWNrdHJhY2VzeW1zIGJhY2t0cmFjZXN5bXNmZAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pCQkJXAorKwkgKz0gd3ByaW50Zl9jaGsgZndwcmludGZfY2hrCQkJCVwKKysJICAgIHZ3cHJpbnRmX2NoayB2ZndwcmludGZfY2hrIGZnZXR3c19jaGsgZmdldHdzX3VfY2hrCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikJCQkJXAorKwkgKz0gd2N0b21iX2NoayB3Y3NjcHlfY2hrIHdtZW1jcHlfY2hrIHdtZW1tb3ZlX2NoayB3bWVtcGNweV9jaGsJXAorKwkgICAgd2NwY3B5X2NoayB3Y3NuY3B5X2NoayB3Y3NjYXRfY2hrIHdjc25jYXRfY2hrIHdtZW1zZXRfY2hrCVwKKysJICAgIHdjcG5jcHlfY2hrCQkJCQkJCVwKKysJICAgIHN3cHJpbnRmX2NoayB2c3dwcmludGZfY2hrCQkJCQlcCisrCSAgICB3Y3J0b21iX2NoayBtYnNucnRvd2NzX2NoawkJCQkJXAorKwkgICAgd2NzbnJ0b21ic19jaGsgbWJzcnRvd2NzX2NoayB3Y3NydG9tYnNfY2hrIG1ic3Rvd2NzX2NoawlcCisrCSAgICB3Y3N0b21ic19jaGsKKysKKyBzdGF0aWMtb25seS1yb3V0aW5lcyA6PSB3YXJuaW5nLW5vcCBzdGFja19jaGtfZmFpbF9sb2NhbAorIAorIENGTEFHUy1iYWNrdHJhY2UuYyA9IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyCitAQCAtMTMxLDExICsxNDAsMTUgQEAgTERGTEFHUy10c3QtYmFja3RyYWNlNCA9IC1yZHluYW1pYworIExERkxBR1MtdHN0LWJhY2t0cmFjZTUgPSAtcmR5bmFtaWMKKyBMREZMQUdTLXRzdC1iYWNrdHJhY2U2ID0gLXJkeW5hbWljCisgCistdGVzdHMgPSBiYWNrdHJhY2UtdHN0IHRzdC1sb25nam1wX2NoayB0c3QtY2hrMSB0c3QtY2hrMiB0c3QtY2hrMyBcCistCXRzdC1sZnNjaGsxIHRzdC1sZnNjaGsyIHRzdC1sZnNjaGszIHRlc3Qtc3RyY3B5X2NoayB0ZXN0LXN0cGNweV9jaGsgXAorLQl0c3QtY2hrNCB0c3QtY2hrNSB0c3QtY2hrNiB0c3QtbGZzY2hrNCB0c3QtbGZzY2hrNSB0c3QtbGZzY2hrNiBcCistCXRzdC1sb25nam1wX2NoazIgdHN0LWJhY2t0cmFjZTIgdHN0LWJhY2t0cmFjZTMgdHN0LWJhY2t0cmFjZTQgXAorLQl0c3QtYmFja3RyYWNlNSB0c3QtYmFja3RyYWNlNgorK3Rlc3RzID0gdHN0LWxvbmdqbXBfY2hrIHRlc3Qtc3RyY3B5X2NoayB0ZXN0LXN0cGNweV9jaGsgdHN0LWxvbmdqbXBfY2hrMgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKyAgICAgICs9IHRzdC1jaGsxIHRzdC1jaGsyIHRzdC1jaGszIHRzdC1sZnNjaGsxIHRzdC1sZnNjaGsyIHRzdC1sZnNjaGszCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSkgXAorKyAgICAgICs9IGJhY2t0cmFjZS10c3QgdHN0LWJhY2t0cmFjZTIgdHN0LWJhY2t0cmFjZTMgdHN0LWJhY2t0cmFjZTQgXAorKyAgICAgICAgIHRzdC1iYWNrdHJhY2U1IHRzdC1iYWNrdHJhY2U2CisraWZlcSAoeXksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK3Rlc3RzICs9IHRzdC1jaGs0IHRzdC1jaGs1IHRzdC1jaGs2IHRzdC1sZnNjaGs0IHRzdC1sZnNjaGs1IHRzdC1sZnNjaGs2CisrZW5kaWYKKyAKKyBpZmVxICgsJChDWFgpKQorIHRlc3RzLXVuc3VwcG9ydGVkID0gdHN0LWNoazQgdHN0LWNoazUgdHN0LWNoazYgXAorZGlmZiAtLWdpdCBhL2RlYnVnL3NlZ2ZhdWx0LmMgYi9kZWJ1Zy9zZWdmYXVsdC5jCitpbmRleCAzNDU5YTJhLi5lZTlhMTQ2IDEwMDY0NAorLS0tIGEvZGVidWcvc2VnZmF1bHQuYworKysrIGIvZGVidWcvc2VnZmF1bHQuYworQEAgLTMwLDYgKzMwLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPF9pdG9hLmg+CisgI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogVGhpcyBmaWxlIGRlZmluZXMgbWFjcm9zIHRvIGFjY2VzcyB0aGUgY29udGVudCBvZiB0aGUgc2lnY29udGV4dCBlbGVtZW50CisgICAgcGFzc2VkIHVwIGJ5IHRoZSBzaWduYWwgaGFuZGxlci4gICovCitAQCAtNjgsMTEgKzY5LDEzIEBAIHdyaXRlX3N0cnNpZ25hbCAoaW50IGZkLCBpbnQgc2lnbmFsKQorIHN0YXRpYyB2b2lkCisgY2F0Y2hfc2VnZmF1bHQgKGludCBzaWduYWwsIFNJR0NPTlRFWFQgY3R4KQorIHsKKy0gIGludCBmZCwgY250LCBpOworLSAgdm9pZCAqKmFycjsKKysgIGludCBmZDsKKyAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UKKysgIGludCBjbnQsIGk7CisrICB2b2lkICoqYXJyOworICAgdWludHB0cl90IHBjOworLQorKyNlbmRpZgorICAgLyogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3ZSBhcmUgd3JpdGluZyB0by4gIElmIG5vbmUgaXMgZ2l2ZW4KKyAgICAgIG9yIHdlIGNhbm5vdCB3cml0ZSB0byB0aGlzIGZpbGUgd3JpdGUgdG8gc3RkZXJyLiAgKi8KKyAgIGZkID0gMjsKK0BAIC05MSw2ICs5NCw3IEBAIGNhdGNoX3NlZ2ZhdWx0IChpbnQgc2lnbmFsLCBTSUdDT05URVhUIGN0eCkKKyAgIFJFR0lTVEVSX0RVTVA7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19CQUNLVFJBQ0UKKyAgIFdSSVRFX1NUUklORyAoIlxuQmFja3RyYWNlOlxuIik7CisgCisgICAvKiBHZXQgdGhlIGJhY2t0cmFjZS4gICovCitAQCAtMTEzLDYgKzExNyw3IEBAIGNhdGNoX3NlZ2ZhdWx0IChpbnQgc2lnbmFsLCBTSUdDT05URVhUIGN0eCkKKyAKKyAgIC8qIE5vdyBnZW5lcmF0ZSBuaWNlbHkgZm9ybWF0dGVkIG91dHB1dC4gICovCisgICBfX2JhY2t0cmFjZV9zeW1ib2xzX2ZkIChhcnIgKyBpLCBjbnQgLSBpLCBmZCk7CisrI2VuZGlmCisgCisgI2lmZGVmIEhBVkVfUFJPQ19TRUxGCisgICAvKiBOb3cgdGhlIGxpbmsgbWFwLiAgKi8KK2RpZmYgLS1naXQgYS9kZWJ1Zy90c3QtY2hrMS5jIGIvZGVidWcvdHN0LWNoazEuYworaW5kZXggNTM1NTllNi4uMzYyZDkyYSAxMDA2NDQKKy0tLSBhL2RlYnVnL3RzdC1jaGsxLmMKKysrKyBiL2RlYnVnL3RzdC1jaGsxLmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorICNpbmNsdWRlIDxzeXMvdW4uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jCitAQCAtMzA3LDYgKzMwOCw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBzbnByaW50ZiAoYnVmICsgOCwgbDAgKyAzLCAiJWQiLCBudW0yKTsKKyAgIENIS19GQUlMX0VORAorIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBDSEtfRkFJTF9TVEFSVAorICAgc3dwcmludGYgKHdidWYgKyA4LCAzLCBMIiVkIiwgbnVtMSk7CisgICBDSEtfRkFJTF9FTkQKK0BAIC0zMTQsNiArMzE2LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgIENIS19GQUlMX1NUQVJUCisgICBzd3ByaW50ZiAod2J1ZiArIDgsIGwwICsgMywgTCIlZCIsIG51bTEpOworICAgQ0hLX0ZBSUxfRU5ECisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAjIGVuZGlmCisgCisgICBtZW1jcHkgKGJ1Ziwgc3RyMSArIDIsIGwwICsgOSk7CitAQCAtMzgxLDYgKzM4NCw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBDSEtfRkFJTF9FTkQKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorIAorICAgLyogVGhlc2Ugb3BzIGNhbiBiZSBkb25lIHdpdGhvdXQgcnVudGltZSBjaGVja2luZyBvZiBvYmplY3Qgc2l6ZS4gICovCisgICB3bWVtY3B5ICh3YnVmLCBMImFiY2RlZmdoaWoiLCAxMCk7CitAQCAtNjA1LDYgKzYwOSw3IEBAIGRvX3Rlc3QgKHZvaWQpCisgICBDSEtfRkFJTF9FTkQKKyAjZW5kaWYKKyAKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgLyogTm93IGNoZWNrcyBmb3IgJW4gcHJvdGVjdGlvbi4gICovCisgCitAQCAtMTE5Miw2ICsxMTk3LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgImRlX0RFLlVURi04IikgIT0gTlVMTCkKKyAgICAgeworICAgICAgIGFzc2VydCAoTUJfQ1VSX01BWCA8PSAxMCk7CitAQCAtMTM0OCw2ICsxMzU0LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAgICAgICBwdXRzICgiY2Fubm90IHNldCBsb2NhbGUiKTsKKyAgICAgICByZXQgPSAxOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgKi8KKyAKKyAgIGludCBmZCA9IHBvc2l4X29wZW5wdCAoT19SRFdSKTsKKyAgIGlmIChmZCAhPSAtMSkKK2RpZmYgLS1naXQgYS9kbGZjbi9NYWtlZmlsZSBiL2RsZmNuL01ha2VmaWxlCitpbmRleCA3NTk3ODBkLi4zODI3NjA3IDEwMDY0NAorLS0tIGEvZGxmY24vTWFrZWZpbGUKKysrKyBiL2RsZmNuL01ha2VmaWxlCitAQCAtMTUsNiArMTUsOCBAQAorICMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJCTo9IGRsZmNuCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzYsOCArMzgsMTEgQEAgZW5kaWYKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3RzID0gZ2xyZWZtYWluIGZhaWx0ZXN0IHRzdC1kbGFkZHIgZGVmYXVsdCBlcnJtc2cxIHRzdGN4YWF0ZXhpdCBcCisgCWJ1Zy1kbG9wZW4xIGJ1Zy1kbHN5bTEgdHN0LWRsaW5mbyBidWctYXRleGl0MSBidWctYXRleGl0MiBcCistCWJ1Zy1hdGV4aXQzIHRzdGF0ZXhpdCBidWctZGwtbGVhZiB0c3QtcmVjLWRsb3BlbgorKwl0c3RhdGV4aXQgYnVnLWRsLWxlYWYgdHN0LXJlYy1kbG9wZW4KKyBlbmRpZgorKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IGJ1Zy1hdGV4aXQzCisrCisgbW9kdWxlcy1uYW1lcyA9IGdscmVmbGliMSBnbHJlZmxpYjIgZ2xyZWZsaWIzIGZhaWx0ZXN0bW9kIGRlZmF1bHRtb2QxIFwKKyAJCWRlZmF1bHRtb2QyIGVycm1zZzFtb2QgbW9kYXRleGl0IG1vZGN4YWF0ZXhpdCBcCisgCQlidWctZGxzeW0xLWxpYjEgYnVnLWRsc3ltMS1saWIyIGJ1Zy1hdGV4aXQxLWxpYiBcCitkaWZmIC0tZ2l0IGEvZWxmL2RsLXN1cHBvcnQuYyBiL2VsZi9kbC1zdXBwb3J0LmMKK2luZGV4IDRkMDM2ZjEuLmMxNWY0MDUgMTAwNjQ0CistLS0gYS9lbGYvZGwtc3VwcG9ydC5jCisrKysgYi9lbGYvZGwtc3VwcG9ydC5jCitAQCAtMTksNiArMTksNyBAQAorIC8qIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgdGhpbmdzIHRoYXQgZm9yIHRoZSBkeW5hbWljIGxpbmtlciBhcmUgZGVmaW5lZCBpbgorICAgIHJ0bGQuYyBhbmQgZGwtc3lzZGVwLmMgaW4gd2F5cyBhcHByb3ByaWF0ZSB0byBib290c3RyYXAgZHluYW1pYyBsaW5raW5nLiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KK0BAIC00Miw3ICs0Myw5IEBAIGNoYXIgKipfZGxfYXJndiA9ICZfX3Byb2duYW1lOwkvKiBUaGlzIGlzIGNoZWNrZWQgZm9yIHNvbWUgZXJyb3IgbWVzc2FnZXMuICAqLworIGNvbnN0IGNoYXIgKl9kbF9wbGF0Zm9ybTsKKyBzaXplX3QgX2RsX3BsYXRmb3JtbGVuOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIGludCBfZGxfZGVidWdfbWFzazsKKysjZW5kaWYKKyBpbnQgX2RsX2xhenk7CisgRWxmVyhBZGRyKSBfZGxfdXNlX2xvYWRfYmlhcyA9IC0yOworIGludCBfZGxfZHluYW1pY193ZWFrOworZGlmZiAtLWdpdCBhL2VsZi9ydGxkLmMgYi9lbGYvcnRsZC5jCitpbmRleCA2ZDNhZGQ3Li5mYzNhMmRiIDEwMDY0NAorLS0tIGEvZWxmL3J0bGQuYworKysrIGIvZWxmL3J0bGQuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgc2VlCisgICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KK0BAIC0yMjAxLDYgKzIyMDIsNyBAQCBwcmludF9taXNzaW5nX3ZlcnNpb24gKGludCBlcnJjb2RlIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJCSAgICBvYmpuYW1lLCBlcnJzdHJpbmcpOworIH0KKyAMCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgLyogTm9uemVybyBpZiBhbnkgb2YgdGhlIGRlYnVnZ2luZyBvcHRpb25zIGlzIGVuYWJsZWQuICAqLworIHN0YXRpYyBpbnQgYW55X2RlYnVnIGF0dHJpYnV0ZV9yZWxybzsKKyAKK0BAIC0yMzEwLDYgKzIzMTIsNyBAQCBhIGZpbGVuYW1lIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIExEX0RFQlVHX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiIpOworICAgICAgIF9leGl0ICgwKTsKKyAgICAgfQorIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcgKi8KKyAMCisgc3RhdGljIHZvaWQKKyBwcm9jZXNzX2RsX2F1ZGl0IChjaGFyICpzdHIpCitAQCAtMjM0OSw4ICsyMzUyLDkgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorICAgY2hhciAqKnJ1bnAgPSBfZW52aXJvbjsKKyAgIGNoYXIgKmVudmxpbmU7CisgICBlbnVtIG1vZGUgbW9kZSA9IG5vcm1hbDsKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKyAgIGNoYXIgKmRlYnVnX291dHB1dCA9IE5VTEw7CistCisrI2VuZGlmCisgICAvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHBsYWNlIGZvciBwcm9maWxpbmcgZGF0YSBmaWxlLiAgKi8KKyAgIEdMUk8oZGxfcHJvZmlsZV9vdXRwdXQpCisgICAgID0gJiIvdmFyL3RtcFwwL3Zhci9wcm9maWxlIltfX2xpYmNfZW5hYmxlX3NlY3VyZSA/IDkgOiAwXTsKK0BAIC0yMzc3LDEyICsyMzgxLDE0IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICBicmVhazsKKyAKKyAJY2FzZSA1OgorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworIAkgIC8qIERlYnVnZ2luZyBvZiB0aGUgZHluYW1pYyBsaW5rZXI/ICAqLworIAkgIGlmIChtZW1jbXAgKGVudmxpbmUsICJERUJVRyIsIDUpID09IDApCisgCSAgICB7CisgCSAgICAgIHByb2Nlc3NfZGxfZGVidWcgKCZlbnZsaW5lWzZdKTsKKyAJICAgICAgYnJlYWs7CisgCSAgICB9CisrI2VuZGlmCisgCSAgaWYgKG1lbWNtcCAoZW52bGluZSwgIkFVRElUIiwgNSkgPT0gMCkKKyAJICAgIHByb2Nlc3NfZGxfYXVkaXQgKCZlbnZsaW5lWzZdKTsKKyAJICBicmVhazsKK0BAIC0yNDQ4LDEzICsyNDU0LDE0IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJICAgICAgYnJlYWs7CisgCSAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgLyogV2hlcmUgdG8gcGxhY2UgdGhlIHByb2ZpbGluZyBkYXRhIGZpbGUuICAqLworIAkgIGlmIChtZW1jbXAgKGVudmxpbmUsICJERUJVR19PVVRQVVQiLCAxMikgPT0gMCkKKyAJICAgIHsKKyAJICAgICAgZGVidWdfb3V0cHV0ID0gJmVudmxpbmVbMTNdOworIAkgICAgICBicmVhazsKKyAJICAgIH0KKy0KKysjZW5kaWYKKyAJICBpZiAoIV9fbGliY19lbmFibGVfc2VjdXJlCisgCSAgICAgICYmIG1lbWNtcCAoZW52bGluZSwgIkRZTkFNSUNfV0VBSyIsIDEyKSA9PSAwKQorIAkgICAgR0xSTyhkbF9keW5hbWljX3dlYWspID0gMTsKK0BAIC0yNDkxLDcgKzI0OTgsOSBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgICB7CisgCSAgICAgIG1vZGUgPSB0cmFjZTsKKyAJICAgICAgR0xSTyhkbF92ZXJib3NlKSA9IDE7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgICAgIEdMUk8oZGxfZGVidWdfbWFzaykgfD0gRExfREVCVUdfUFJFTElOSzsKKysjZW5kaWYKKyAJICAgICAgR0xSTyhkbF90cmFjZV9wcmVsaW5rKSA9ICZlbnZsaW5lWzE3XTsKKyAJICAgIH0KKyAJICBicmVhazsKK0BAIC0yNTM4LDEyICsyNTQ3LDE1IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAgICAgICBpZiAoX19hY2Nlc3MgKCIvZXRjL3N1aWQtZGVidWciLCBGX09LKSAhPSAwKQorIAl7CisgCSAgdW5zZXRlbnYgKCJNQUxMT0NfQ0hFQ0tfIik7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgCSAgR0xSTyhkbF9kZWJ1Z19tYXNrKSA9IDA7CisrI2VuZGlmCisgCX0KKyAKKyAgICAgICBpZiAobW9kZSAhPSBub3JtYWwpCisgCV9leGl0ICg1KTsKKyAgICAgfQorKyNpZiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRworICAgLyogSWYgd2UgaGF2ZSB0byBydW4gdGhlIGR5bmFtaWMgbGlua2VyIGluIGRlYnVnZ2luZyBtb2RlIGFuZCB0aGUKKyAgICAgIExEX0RFQlVHX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBnaXZlbiwgd2Ugd3JpdGUgdGhlIGRlYnVnCisgICAgICBtZXNzYWdlcyB0byB0aGlzIGZpbGUuICAqLworQEAgLTI1NjgsNiArMjU4MCw3IEBAIHByb2Nlc3NfZW52dmFycyAoZW51bSBtb2RlICptb2RlcCkKKyAJLyogV2UgdXNlIHN0YW5kYXJkIG91dHB1dCBpZiBvcGVuaW5nIHRoZSBmaWxlIGZhaWxlZC4gICovCisgCUdMUk8oZGxfZGVidWdfZmQpID0gU1RET1VUX0ZJTEVOTzsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfUlRMRF9ERUJVRyAqLworIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9leHRyYS1saWIubWsgYi9leHRyYS1saWIubWsKK2luZGV4IGIxMDc0OGQuLmQ3MWEwNmYgMTAwNjQ0CistLS0gYS9leHRyYS1saWIubWsKKysrKyBiL2V4dHJhLWxpYi5taworQEAgLTI1LDcgKzI1LDkgQEAgaW5zdGFsbC1saWIgOj0gJChpbnN0YWxsLWxpYikKKyBleHRyYS1vYmpzIDo9ICQoZXh0cmEtb2JqcykKKyAKKyAjIFRoZSBtb2R1bGVzIHRoYXQgZ28gaW4gJChsaWIpLgorLWFsbC0kKGxpYiktcm91dGluZXMgOj0gJCgkKGxpYiktcm91dGluZXMpICQoJChsaWIpLXN5c2RlcF9yb3V0aW5lcykKKythbGwtJChsaWIpLXJvdXRpbmVzIDo9ICQoJChsaWIpLXJvdXRpbmVzKQkJXAorKwkgICAgICAgICAgICAgICAkKCQobGliKS1yb3V0aW5lcy15KQkJXAorKwkJICAgICAgICQoJChsaWIpLXN5c2RlcF9yb3V0aW5lcykKKyAKKyAjIEFkZCBlYWNoIGZsYXZvciBvZiBsaWJyYXJ5IHRvIHRoZSBsaXN0cyBvZiB0aGluZ3MgdG8gYnVpbGQgYW5kIGluc3RhbGwuCisgaW5zdGFsbC1saWIgKz0gJChmb3JlYWNoIG8sJChvYmplY3Qtc3VmZml4ZXMtJChsaWIpKSwkKGxpYjpsaWIlPSQobGlidHlwZSRvKSkpCitAQCAtMTAxLDcgKzEwMyw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyAjIFRoaXMgd2lsbCBkZWZpbmUgYGxpYm9mLVJPVVRJTkUgOj0gTElCJyBmb3IgZWFjaCBvZiB0aGUgcm91dGluZXMuCistY3BwLXNyY3MtbGVmdCA6PSAkKCQobGliKS1yb3V0aW5lcykgJCgkKGxpYiktc3lzZGVwX3JvdXRpbmVzKQorK2NwcC1zcmNzLWxlZnQgOj0gJChhbGwtJChsaWIpLXJvdXRpbmVzKQorIGlmbmVxICgsJChjcHAtc3Jjcy1sZWZ0KSkKKyBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKWNwcGZsYWdzLWl0ZXJhdG9yLm1rLCQoY3BwLXNyY3MtbGVmdCkpCisgZW5kaWYKK2RpZmYgLS1naXQgYS9ncnAvTWFrZWZpbGUgYi9ncnAvTWFrZWZpbGUKK2luZGV4IGM2M2I1NTIuLjc0ODZmMzIgMTAwNjQ0CistLS0gYS9ncnAvTWFrZWZpbGUKKysrKyBiL2dycC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGdycCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGdycAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI5LDYgKzMxLDkgQEAgcm91dGluZXMgOj0gZmdldGdyZW50IGluaXRncm91cHMgc2V0Z3JvdXBzIFwKKyAJICAgIGdldGdyZW50X3IgZ2V0Z3JnaWRfciBnZXRncm5hbV9yIGZnZXRncmVudF9yCisgCisgdGVzdHMgOj0gdGVzdGdycAorK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSCkpCisrTERMSUJTLXRlc3RncnAgKz0gJChzaGVsbCBjYXQgJChjb21tb24tb2JqcGZ4KW5zcy9maXhlZC1uc3N3aXRjaC1saWJzKQorK2VuZGlmCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0LXNyY3MgOj0gIHRzdF9mZ2V0Z3JlbnQKK2RpZmYgLS1naXQgYS9oZXNpb2QvTWFrZWZpbGUgYi9oZXNpb2QvTWFrZWZpbGUKK2luZGV4IGFjMGJjMDEuLjM4MjYzYjQgMTAwNjQ0CistLS0gYS9oZXNpb2QvTWFrZWZpbGUKKysrKyBiL2hlc2lvZC9NYWtlZmlsZQorQEAgLTE4LDEyICsxOCwxNCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgaGVzaW9kIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaGVzaW9kCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCistZXh0cmEtbGlicyA6PSBsaWJuc3NfaGVzaW9kCistZXh0cmEtbGlicy1vdGhlcnMgPSAkKGV4dHJhLWxpYnMpCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbGlibnNzX2hlc2lvZAorK2V4dHJhLWxpYnMtb3RoZXJzLXkgKz0gJChleHRyYS1saWJzLXkpCisgCisgc3ViZGlyLWRpcnMgPSBuc3NfaGVzaW9kCisgdnBhdGggJS5jIG5zc19oZXNpb2QKK2RpZmYgLS1naXQgYS9pY29udi9NYWtlZmlsZSBiL2ljb252L01ha2VmaWxlCitpbmRleCAwZDU1ZWRhLi5hMTg0N2M2IDEwMDY0NAorLS0tIGEvaWNvbnYvTWFrZWZpbGUKKysrKyBiL2ljb252L01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBpY29udi4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBpY29udgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM5LDYgKzQxLDExIEBAIENGTEFHUy1pY29udl9jaGFybWFwLmMgPSAtSS4uL2xvY2FsZS9wcm9ncmFtcworIENGTEFHUy1kdW1teS1yZXBlcnRvaXJlLmMgPSAtSS4uL2xvY2FsZS9wcm9ncmFtcworIENGTEFHUy1jaGFybWFwLmMgPSAtRENIQVJNQVBfUEFUSD0nIiQoaTE4bmRpcikvY2hhcm1hcHMiJyBcCisgCQkgICAtRERFRkFVTFRfQ0hBUk1BUD1udWxsX3BvaW50ZXIgLURORUVEX05VTExfUE9JTlRFUgorKworK2lmbmVxICh5LCQoT1BUSU9OX0VHTElCQ19TUEFXTikpCisrQ0ZMQUdTLWNoYXJtYXAtZGlyLmMgKz0gLUROT19VTkNPTVBSRVNTCisrZW5kaWYKKysKKyBDRkxBR1MtbGluZXJlYWRlci5jID0gLUROT19UUkFOU0xJVEVSQVRJT04KKyBDRkxBR1Mtc2ltcGxlLWhhc2guYyA9IC1JLi4vbG9jYWxlCisgCitkaWZmIC0tZ2l0IGEvaWNvbnYvZ2NvbnZfZGIuYyBiL2ljb252L2djb252X2RiLmMKK2luZGV4IGNlNDYyMTYuLmVhMTg5NjQgMTAwNjQ0CistLS0gYS9pY29udi9nY29udl9kYi5jCisrKysgYi9pY29udi9nY29udl9kYi5jCitAQCAtMjUsNiArMjUsNyBAQAorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8ZGxmY24uaD4KKyAjaW5jbHVkZSA8Z2NvbnZfaW50Lmg+CitAQCAtODI4LDkgKzgyOSwxMSBAQCBmcmVlX21vZHVsZXNfZGIgKHN0cnVjdCBnY29udl9tb2R1bGUgKm5vZGUpCisgLyogRnJlZSBhbGwgcmVzb3VyY2VzIGlmIG5lY2Vzc2FyeS4gICovCisgbGliY19mcmVlcmVzX2ZuIChmcmVlX21lbSkKKyB7CisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgLyogRmlyc3QgZnJlZSBsb2NhbGUgbWVtb3J5LiAgVGhpcyBuZWVkcyB0byBiZSBkb25lIGJlZm9yZSBmcmVlaW5nIGRlcml2YXRpb25zLAorICAgICAgYXMgY3R5cGUgY2xlYW51cCBmdW5jdGlvbnMgZGVyZWZlcmVuY2Ugc3RlcHMgYXJyYXlzIHdoaWNoIHdlIGZyZWUgYmVsb3cuICAqLworICAgX25sX2xvY2FsZV9zdWJmcmVlcmVzICgpOworKyNlbmRpZgorIAorICAgLyogZmluZGRvbWFpbi5jIGhhcyBzaW1pbGFyIHByb2JsZW0uICAqLworICAgZXh0ZXJuIHZvaWQgX25sX2ZpbmRkb21haW5fc3ViZnJlZXJlcyAodm9pZCkgYXR0cmlidXRlX2hpZGRlbjsKK2RpZmYgLS1naXQgYS9pY29udi9nY29udl90cmFucy5jIGIvaWNvbnYvZ2NvbnZfdHJhbnMuYworaW5kZXggNWQ1ZDRkNy4uYTdkMzA3MiAxMDA2NDQKKy0tLSBhL2ljb252L2djb252X3RyYW5zLmMKKysrKyBiL2ljb252L2djb252X3RyYW5zLmMKK0BAIC0yMyw2ICsyMyw3IEBACisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgI2luY2x1ZGUgImdjb252X2ludC5oIgorQEAgLTM4LDE1ICszOSwxOSBAQCBfX2djb252X3RyYW5zbGl0ZXJhdGUgKHN0cnVjdCBfX2djb252X3N0ZXAgKnN0ZXAsCisgCQkgICAgICAgdW5zaWduZWQgY2hhciAqKm91dGJ1ZnN0YXJ0LCBzaXplX3QgKmlycmV2ZXJzaWJsZSkKKyB7CisgICAvKiBGaW5kIG91dCBhYm91dCB0aGUgbG9jYWxlJ3MgdHJhbnNsaXRlcmF0aW9uLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50X2Zhc3QzMl90IHNpemU7CisgICBjb25zdCB1aW50MzJfdCAqZnJvbV9pZHg7CisgICBjb25zdCB1aW50MzJfdCAqZnJvbV90Ymw7CisgICBjb25zdCB1aW50MzJfdCAqdG9faWR4OworICAgY29uc3QgdWludDMyX3QgKnRvX3RibDsKKysjZW5kaWYKKyAgIGNvbnN0IHVpbnQzMl90ICp3aW5idWY7CisgICBjb25zdCB1aW50MzJfdCAqd2luYnVmZW5kOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnRfZmFzdDMyX3QgbG93OworICAgdWludF9mYXN0MzJfdCBoaWdoOworKyNlbmRpZgorIAorICAgLyogVGhlIGlucHV0IGJ1ZmZlci4gIFRoZXJlIGFyZSBhY3R1YWxseSA0LWJ5dGUgdmFsdWVzLiAgKi8KKyAgIHdpbmJ1ZiA9IChjb25zdCB1aW50MzJfdCAqKSAqaW5idWZwOworQEAgLTU4LDYgKzYzLDcgQEAgX19nY29udl90cmFuc2xpdGVyYXRlIChzdHJ1Y3QgX19nY29udl9zdGVwICpzdGVwLAorICAgICBQVFJfREVNQU5HTEUgKGZjdCk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgLyogSWYgdGhlcmUgaXMgbm8gdHJhbnNsaXRlcmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZSBsb2NhbGUgZG9uJ3QgZG8KKyAgICAgIGFueXRoaW5nIGFuZCByZXR1cm4gdGhlIGVycm9yLiAgKi8KKyAgIHNpemUgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFKTsKK0BAIC0xOTMsNiArMTk5LDcgQEAgX19nY29udl90cmFuc2xpdGVyYXRlIChzdHJ1Y3QgX19nY29udl9zdGVwICpzdGVwLAorICAgICAgICAgICAgICBzb3J0ZWQuICAqLworIAkgIGJyZWFrOworICAgICB9CisrI2VuZGlmCisgCisgICAvKiBPbmUgbGFzdCBjaGFuY2U6IHVzZSB0aGUgZGVmYXVsdCByZXBsYWNlbWVudC4gICovCisgICBpZiAoX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOKSAhPSAwKQorZGlmZiAtLWdpdCBhL2ljb252L2ljb252X3Byb2cuYyBiL2ljb252L2ljb252X3Byb2cuYworaW5kZXggZTI0OWJjZS4uNDAzZWNlNSAxMDA2NDQKKy0tLSBhL2ljb252L2ljb252X3Byb2cuYworKysrIGIvaWNvbnYvaWNvbnZfcHJvZy5jCitAQCAtMzUsNiArMzUsNyBAQAorICNpZmRlZiBfUE9TSVhfTUFQUEVEX0ZJTEVTCisgIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxjaGFybWFwLmg+CisgI2luY2x1ZGUgPGdjb252X2ludC5oPgorICNpbmNsdWRlICJpY29udl9wcm9nLmgiCitAQCAtMjIxLDEwICsyMjIsMTcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJICAgICAgYm9vbCB0b193cm9uZyA9CisgCQkoaWNvbnZfb3BlbiAodG9fY29kZSwgIlVURi04IikgPT0gKGljb252X3QpIC0xCisgCQkgJiYgZXJybm8gPT0gRUlOVkFMKTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgICAgIGNvbnN0IGNoYXIgKmZyb21fcHJldHR5ID0KKyAJCShmcm9tX2NvZGVbMF0gPyBmcm9tX2NvZGUgOiBubF9sYW5naW5mbyAoQ09ERVNFVCkpOworIAkgICAgICBjb25zdCBjaGFyICp0b19wcmV0dHkgPQorIAkJKG9yaWdfdG9fY29kZVswXSA/IG9yaWdfdG9fY29kZSA6IG5sX2xhbmdpbmZvIChDT0RFU0VUKSk7CisrI2Vsc2UKKysJICAgICAgY29uc3QgY2hhciAqZnJvbV9wcmV0dHkgPQorKwkJKGZyb21fY29kZVswXSA/IGZyb21fY29kZSA6ICJBTlNJX1gzLjQtMTk2OCIpOworKwkgICAgICBjb25zdCBjaGFyICp0b19wcmV0dHkgPQorKyAgICAgICAgICAgICAgICAgKG9yaWdfdG9fY29kZVswXSA/IG9yaWdfdG9fY29kZSA6ICJBTlNJX1gzLjQtMTk2OCIpOworKyNlbmRpZgorIAorIAkgICAgICBpZiAoZnJvbV93cm9uZykKKyAJCXsKK2RpZmYgLS1naXQgYS9pY29udmRhdGEvTWFrZWZpbGUgYi9pY29udmRhdGEvTWFrZWZpbGUKK2luZGV4IGEzZDFkMDkuLjA4MzI3MDggMTAwNjQ0CistLS0gYS9pY29udmRhdGEvTWFrZWZpbGUKKysrKyBiL2ljb252ZGF0YS9NYWtlZmlsZQorQEAgLTE4LDEyICsxOCwxNSBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBpY29udiBkYXRhIGFuZCBjb2RlLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IGljb252ZGF0YQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorICMgTmFtZXMgb2YgYWxsIHRoZSBzaGFyZWQgb2JqZWN0cyB3aGljaCBpbXBsZW1lbnQgdGhlIHRyYW5zZm9ybWF0aW9ucy4KKy1tb2R1bGVzCTo9IElTTzg4NTktMSBJU084ODU5LTIgSVNPODg1OS0zIElTTzg4NTktNCBJU084ODU5LTUJCSBcCisrbW9kdWxlcy0kKE9QVElPTl9FR0xJQkNfQ0hBUlNFVFMpCQkJCQkgXAorKwk6PSBJU084ODU5LTEgSVNPODg1OS0yIElTTzg4NTktMyBJU084ODU5LTQgSVNPODg1OS01CQkgXAorIAkgICBJU084ODU5LTYgSVNPODg1OS03IElTTzg4NTktOCBJU084ODU5LTkgSVNPODg1OS0xMAkJIFwKKyAJICAgSVNPODg1OS0xMSBJU084ODU5LTEzIElTTzg4NTktMTQgSVNPODg1OS0xNSBJU084ODU5LTE2CSBcCisgCSAgIFQuNjEgSVNPXzY5MzcgU0pJUyBLT0ktOCBIUC1ST01BTjggSFAtUk9NQU45IEVCQ0RJQy1BVC1ERQkgXAorQEAgLTYzLDExICs2NiwxMyBAQCBtb2R1bGVzCTo9IElTTzg4NTktMSBJU084ODU5LTIgSVNPODg1OS0zIElTTzg4NTktNCBJU084ODU5LTUJCSBcCisgCSAgIE1BQy1DRU5UUkFMRVVST1BFIEtPSTgtUlUgSVNPODg1OS05RQkJCQkgXAorIAkgICBDUDc3MCBDUDc3MSBDUDc3MiBDUDc3MyBDUDc3NAorIAorLW1vZHVsZXMuc28gOj0gJChhZGRzdWZmaXggLnNvLCAkKG1vZHVsZXMpKQorK21vZHVsZXMuc28gOj0gJChhZGRzdWZmaXggLnNvLCAkKG1vZHVsZXMteSkpCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyB0ZXN0cyA9IGJ1Zy1pY29udjEgYnVnLWljb252MiB0c3QtbG9hZGluZyB0c3QtZTJiaWcgdHN0LWljb252NCBidWctaWNvbnY0IFwKKy0JdHN0LWljb252NiBidWctaWNvbnY1IGJ1Zy1pY29udjYgdHN0LWljb252NyBidWctaWNvbnY4IGJ1Zy1pY29udjkKKysJdHN0LWljb252NiBidWctaWNvbnY1IGJ1Zy1pY29udjggYnVnLWljb252OQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gYnVnLWljb252NiB0c3QtaWNvbnY3CisrCisgaWZlcSAoJChoYXZlLXRocmVhZC1saWJyYXJ5KSx5ZXMpCisgdGVzdHMgKz0gYnVnLWljb252MworIGVuZGlmCitAQCAtMTI3LDEzICsxMzIsMTMgQEAgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIFJ1bGUgdG8gZ2VuZXJhdGUgdGhlIHNoYXJlZCBvYmplY3RzLgorIGNoYXJtYXBzID0gLi4vbG9jYWxlZGF0YS9jaGFybWFwcworIC1pbmNsdWRlICQob2JqcGZ4KWljb252LXJ1bGVzCistZXh0cmEtbW9kdWxlcy1sZWZ0IDo9ICQobW9kdWxlcykKKytleHRyYS1tb2R1bGVzLWxlZnQgOj0gJChtb2R1bGVzLXkpCisgaW5jbHVkZSBleHRyYS1tb2R1bGUubWsKKyAKKyAKKyBleHRyYS1vYmpzCSs9ICQobW9kdWxlcy5zbykKKy1pbnN0YWxsLW90aGVycwk9ICQoYWRkcHJlZml4ICQoaW5zdF9nY29udmRpcikvLCAkKG1vZHVsZXMuc28pKQlcCistCQkgICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcworK2luc3RhbGwtb3RoZXJzLXkgKz0gJChhZGRwcmVmaXggJChpbnN0X2djb252ZGlyKS8sICQobW9kdWxlcy5zbykpCisraW5zdGFsbC1vdGhlcnMtJChPUFRJT05fRUdMSUJDX0NIQVJTRVRTKSArPSAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMKKyAKKyAjIFdlIGNhbiBidWlsZCB0aGUgY29udmVyc2lvbiB0YWJsZXMgZm9yIG51bWVyb3VzIGNoYXJzZXRzIGF1dG9tYXRpY2FsbHkuCisgCitAQCAtMjAxLDcgKzIwNiw3IEBAIGJlZm9yZS1jb21waWxlICs9ICQoYWRkcHJlZml4ICQob2JqcGZ4KSwkKGdlbmVyYXRlZC1tb2R1bGVzOj0uaCkpCisgaWZuZGVmIGF2b2lkLWdlbmVyYXRlZAorICQob2JqcGZ4KWljb252LXJ1bGVzOiBNYWtlZmlsZQorIAkkKG1ha2UtdGFyZ2V0LWRpcmVjdG9yeSkKKy0JeyBlY2hvICQoZmlsdGVyLW91dCBsaWIlLCAkKG1vZHVsZXMpKTsgXAorKwl7IGVjaG8gJChmaWx0ZXItb3V0IGxpYiUsICQobW9kdWxlcy15KSk7IFwKKyAJICBlY2hvIDhiaXQgJChnZW4tOGJpdC1tb2R1bGVzKTsgXAorIAkgIGVjaG8gOGJpdC1nYXAgJChnZW4tOGJpdC1nYXAtbW9kdWxlcyk7IH0gfCBcCisgCUxDX0FMTD1DIFwKK0BAIC0yNDUsNyArMjUwLDcgQEAgJChhZGRwcmVmaXggJChpbnN0X2djb252ZGlyKS8sICQobW9kdWxlcy5zbykpOiBcCisgCSQoZG8taW5zdGFsbC1wcm9ncmFtKQorICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlczogZ2NvbnYtbW9kdWxlcyAkKCtmb3JjZSkKKyAJJChkby1pbnN0YWxsKQorLWlmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKysjIGVnbGliYzogaWZlcSAobm8sJChjcm9zcy1jb21waWxpbmcpKQorICMgVXBkYXRlIHRoZSAkKHByZWZpeCkvbGliL2djb252L2djb252LW1vZHVsZXMuY2FjaGUgZmlsZS4gVGhpcyBpcyBuZWNlc3NhcnkKKyAjIGlmIHRoaXMgbGliYyBoYXMgbW9yZSBnY29udiBtb2R1bGVzIHRoYW4gdGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkIG9uZS4KKyAJaWYgdGVzdCAtZiAiJChpbnN0X2djb252ZGlyKS9nY29udi1tb2R1bGVzLmNhY2hlIjsgdGhlbiBcCitAQCAtMjU0LDkgKzI1OSw5IEBAIGlmZXEgKG5vLCQoY3Jvc3MtY29tcGlsaW5nKSkKKyAJICAgJChjb21tb24tb2JqcGZ4KWljb252L2ljb252Y29uZmlnIFwKKyAJICAgICAkKGFkZHByZWZpeCAtLXByZWZpeD0sJChpbnN0YWxsX3Jvb3QpKTsgXAorIAlmaQorLWVsc2UKKy0JQGVjaG8gJypAKkAqQCBZb3Ugc2hvdWxkIHJlY3JlYXRlICQoaW5zdF9nY29udmRpcikvZ2NvbnYtbW9kdWxlcy5jYWNoZScKKy1lbmRpZgorKyMgZWdsaWJjOiBlbHNlCisrIyBlZ2xpYmM6CUBlY2hvICcqQCpAKkAgWW91IHNob3VsZCByZWNyZWF0ZSAkKGluc3RfZ2NvbnZkaXIpL2djb252LW1vZHVsZXMuY2FjaGUnCisrIyBlZ2xpYmM6IGVuZGlmCisgCisgZW5kaWYgIyBidWlsZC1zaGFyZWQgPSB5ZXMKKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL25ldGRiLmggYi9pbmNsdWRlL25ldGRiLmgKK2luZGV4IGUxZjA1MWQuLmY2ZDE1YWEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL25ldGRiLmgKKysrKyBiL2luY2x1ZGUvbmV0ZGIuaAorQEAgLTIzMiw2ICsyMzIsMTAgQEAgZXh0ZXJuIGVudW0gbnNzX3N0YXR1cyBfbnNzXyAjIyBzZXJ2aWNlICMjIF9nZXRob3N0YnluYW1lMl9yCQkgICAgICBcCisgCQkgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgc3RydWN0IGhvc3RlbnQgKmhvc3QsCSAgICAgIFwKKyAJCQljaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4sIGludCAqZXJybm9wLAkgICAgICBcCisgCQkJaW50ICpoX2Vycm5vcCk7CQkJCQkgICAgICBcCisrZXh0ZXJuIGVudW0gbnNzX3N0YXR1cyBfbnNzXyAjIyBzZXJ2aWNlICMjIF9nZXRob3N0YnluYW1lM19yCQkgICAgICBcCisrCQkgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgc3RydWN0IGhvc3RlbnQgKnJlc3VsdCwgICAgIFwKKysJCQljaGFyICpidWZmZXIsIHNpemVfdCBidWZsZW4sIGludCAqZXJybm9wLAkgICAgICBcCisrCQkJaW50ICpoX2Vycm5vcCwgaW50MzJfdCAqdHRscCwgY2hhciAqKmNhbm9ucCk7ICAgICAgICAgXAorIGV4dGVybiBlbnVtIG5zc19zdGF0dXMgX25zc18gIyMgc2VydmljZSAjIyBfZ2V0aG9zdGJ5bmFtZV9yCQkgICAgICBcCisgCQkgICAgICAgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBob3N0ZW50ICpob3N0LCBjaGFyICpidWZmZXIsIFwKKyAJCQlzaXplX3QgYnVmbGVuLCBpbnQgKmVycm5vcCwgaW50ICpoX2Vycm5vcCk7CSAgICAgIFwKK2RpZmYgLS1naXQgYS9pbmV0L01ha2VmaWxlIGIvaW5ldC9NYWtlZmlsZQoraW5kZXggZjFkODcxZi4uN2NiMTcwOSAxMDA2NDQKKy0tLSBhL2luZXQvTWFrZWZpbGUKKysrKyBiL2luZXQvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBpbmV0IHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaW5ldAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTI3LDcgKzI5LDggQEAgaGVhZGVycwk6PSBuZXRpbmV0L2V0aGVyLmggbmV0aW5ldC9pbi5oIG5ldGluZXQvaW5fc3lzdG0uaCBcCisgCSAgIG5ldGluZXQvdGNwLmggbmV0aW5ldC9pcC5oICQod2lsZGNhcmQgYXJwYS8qLmggcHJvdG9jb2xzLyouaCkgXAorIAkgICBhbGlhc2VzLmggaWZhZGRycy5oIG5ldGluZXQvaXA2LmggbmV0aW5ldC9pY21wNi5oIGJpdHMvaW4uaAorIAorLXJvdXRpbmVzIDo9IGh0b25sIGh0b25zCQlcCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJICs9IGh0b25sIGh0b25zIFwKKyAJICAgIGluZXRfbG5hb2YgaW5ldF9ta2FkcglcCisgCSAgICBpbmV0X25ldG9mIGluZXRfbnRvYSBpbmV0X25ldCBoZXJybm8gaGVycm5vLWxvYyBcCisgCSAgICBnZXRoc3RieWFkIGdldGhzdGJ5YWRfciBnZXRoc3RieW5tIGdldGhzdGJ5bm0yIGdldGhzdGJ5bm0yX3IgXAorQEAgLTM5LDE4ICs0MiwyMyBAQCByb3V0aW5lcyA6PSBodG9ubCBodG9ucwkJXAorIAkgICAgZ2V0c2VydmVudF9yCVwKKyAJICAgIGV0aGVyX2F0b24gZXRoZXJfYXRvbl9yIGV0aGVyX2h0b24gZXRoZXJfbGluZSBcCisgCSAgICBldGhlcl9udG9hIGV0aGVyX250b2FfciBldGhlcl9udG9oIFwKKy0JICAgIHJjbWQgcmV4ZWMgcnVzZXJwYXNzIFwKKyAJICAgIGdldG5ldGdyZW50X3IgZ2V0bmV0Z3JlbnQgXAorLQkgICAgZ2V0YWxpYXNlbnRfciBnZXRhbGlhc2VudCBnZXRhbGlhc25hbWUgZ2V0YWxpYXNuYW1lX3IgXAorLQkgICAgaW42X2FkZHIgZ2V0bmFtZWluZm8gaWZfaW5kZXggaWZhZGRycyBpbmV0Nl9vcHRpb24gXAorKwkgICAgaW42X2FkZHIgZ2V0bmFtZWluZm8gaWZfaW5kZXggaWZhZGRycyBcCisgCSAgICBnZXRpcHY0c291cmNlZmlsdGVyIHNldGlwdjRzb3VyY2VmaWx0ZXIgXAorLQkgICAgZ2V0c291cmNlZmlsdGVyIHNldHNvdXJjZWZpbHRlciBpbmV0Nl9vcHQgaW5ldDZfcnRoCisrCSAgICBnZXRzb3VyY2VmaWx0ZXIgc2V0c291cmNlZmlsdGVyCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1JDTUQpIFwKKysJICs9IHJjbWQgcmV4ZWMgcnVzZXJwYXNzCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMpIFwKKysJICs9IGdldGFsaWFzZW50X3IgZ2V0YWxpYXNlbnQgZ2V0YWxpYXNuYW1lIGdldGFsaWFzbmFtZV9yCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0FEVkFOQ0VEX0lORVQ2KSBcCisrCSArPSBpbmV0Nl9vcHRpb24gaW5ldDZfb3B0IGluZXQ2X3J0aAorIAorLWF1eCA6PSBjaGVja19wZiBjaGVja19uYXRpdmUgaWZyZXEKKythdXgtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGNoZWNrX3BmIGNoZWNrX25hdGl2ZSBpZnJlcQorIAorIHRlc3RzIDo9IGh0b250ZXN0IHRlc3RfaWZpbmRleCB0c3QtbnRvYSB0c3QtZXRoZXJfYXRvbiB0c3QtbmV0d29yayBcCistCSB0c3QtZ2V0aG5tIHRlc3QtaWZhZGRycyBidWctaWYxIHRlc3QtaW5ldDZfb3B0IHRzdC1ldGhlcl9saW5lIFwKKysJIHRzdC1nZXRobm0gdGVzdC1pZmFkZHJzIGJ1Zy1pZjEgdHN0LWV0aGVyX2xpbmUgXAorIAkgdHN0LWdldG5pMSB0c3QtZ2V0bmkyIHRzdC1pbmV0Nl9ydGggdHN0LWNoZWNrcworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19BRFZBTkNFRF9JTkVUNikgKz0gdGVzdC1pbmV0Nl9vcHQKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitkaWZmIC0tZ2l0IGEvaW50bC9NYWtlZmlsZSBiL2ludGwvTWFrZWZpbGUKK2luZGV4IDllY2Y4ZmUuLjU4N2JjMGQgMTAwNjQ0CistLS0gYS9pbnRsL01ha2VmaWxlCisrKysgYi9pbnRsL01ha2VmaWxlCitAQCAtMTYsNiArMTYsNyBAQAorICMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMgTWFrZWZpbGUgZm9yIGludGwgc3ViZGlyZWN0b3J5OiBtZXNzYWdlIGhhbmRsaW5nIGNvZGUgZnJvbSBHTlUgZ2V0dGV4dC4KKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisgCisgc3ViZGlyID0gaW50bAorIAorQEAgLTQ4LDcgKzQ5LDcgQEAgZW5kaWYKKyAkKG9ianBmeClwbHVyYWwubzogcGx1cmFsLmMKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorLWlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisraWZlcSAoeXl5ZXMsJChPUFRJT05fRUdMSUJDX0xPQ0FMRVMpJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSQoYnVpbGQtc2hhcmVkKSkKKyBpZm5lcSAoJChzdHJpcCAkKE1TR0ZNVCkpLDopCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtdHJhbnNsaXQub3V0ICQob2JqcGZ4KXRzdC1nZXR0ZXh0Lm91dCBcCisgCQkgJChvYmpwZngpdHN0LWdldHRleHQyLm91dCAkKG9ianBmeCl0c3QtY29kZXNldC5vdXQgXAorZGlmZiAtLWdpdCBhL2ludGwvZGNpZ2V0dGV4dC5jIGIvaW50bC9kY2lnZXR0ZXh0LmMKK2luZGV4IDhhM2YwOTEuLmUyNzE2NDggMTAwNjQ0CistLS0gYS9pbnRsL2RjaWdldHRleHQuYworKysrIGIvaW50bC9kY2lnZXR0ZXh0LmMKK0BAIC0xMDAsMTEgKzEwMCwxNSBAQCBleHRlcm4gaW50IGVycm5vOworICMgaW5jbHVkZSAibGliZ251aW50bC5oIgorICNlbmRpZgorICNpbmNsdWRlICJoYXNoLXN0cmluZy5oIgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKyAKKyAvKiBIYW5kbGUgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb25zLiAgKi8KKyAjaWZkZWYgX0xJQkMKKyAjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisgIyBkZWZpbmUgZ2xfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZCBfX2xpYmNfcndsb2NrX2RlZmluZV9pbml0aWFsaXplZAorKyMgZGVmaW5lIGdsX3J3bG9ja19kZWZpbmUgX19saWJjX3J3bG9ja19kZWZpbmUKKyAjIGRlZmluZSBnbF9yd2xvY2tfcmRsb2NrIF9fbGliY19yd2xvY2tfcmRsb2NrCisgIyBkZWZpbmUgZ2xfcndsb2NrX3dybG9jayBfX2xpYmNfcndsb2NrX3dybG9jaworICMgZGVmaW5lIGdsX3J3bG9ja191bmxvY2sgX19saWJjX3J3bG9ja191bmxvY2sKK0BAIC01MjMsOCArNTI3LDEwIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAKKyAjaWZkZWYgX0xJQkMKKy0gIF9fbGliY19yd2xvY2tfZGVmaW5lIChleHRlcm4sIF9fbGliY19zZXRsb2NhbGVfbG9jayBhdHRyaWJ1dGVfaGlkZGVuKQorLSAgX19saWJjX3J3bG9ja19yZGxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgIGdsX3J3bG9ja19kZWZpbmUgKGV4dGVybiwgX19saWJjX3NldGxvY2FsZV9sb2NrIGF0dHJpYnV0ZV9oaWRkZW4pCisrICBnbF9yd2xvY2tfcmRsb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgZW5kaWYKKyAjZW5kaWYKKyAKKyAgIGdsX3J3bG9ja19yZGxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKK0BAIC01NTAsNyArNTU2LDExIEBAIERDSUdFVFRFWFQgKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKm1zZ2lkMSwgY29uc3QgY2hhciAqbXNnaWQyLAorICNpZmRlZiBIQVZFX1BFUl9USFJFQURfTE9DQUxFCisgIyBpZm5kZWYgSU5fTElCR0xPQ0FMRQorICMgIGlmZGVmIF9MSUJDCistICBsb2NhbGVuYW1lID0gc3RyZHVwYSAoX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSkpOworKyMgICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICBsb2NhbGVuYW1lID0gc3RyZHVwYSAoX19jdXJyZW50X2xvY2FsZV9uYW1lIChjYXRlZ29yeSkpOworKyMgICBlbHNlCisrICAgICAgbG9jYWxlbmFtZSA9ICJDIjsKKysjICAgZW5kaWYKKyAjICBlbHNlCisgICBjYXRlZ29yeW5hbWUgPSBjYXRlZ29yeV90b19uYW1lIChjYXRlZ29yeSk7CisgIyAgIGRlZmluZSBDQVRFR09SWU5BTUVfSU5JVElBTElaRUQKK0BAIC01ODEsMTAgKzU5MSwxMiBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAgICAgICBlbHNlCisgCXJldHZhbCA9IChjaGFyICopICgqZm91bmRwKS0+dHJhbnNsYXRpb247CisgCistICAgICAgZ2xfcndsb2NrX3VubG9jayAoX25sX3N0YXRlX2xvY2spOworICMgaWZkZWYgX0xJQkMKKy0gICAgICBfX2xpYmNfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgIGVuZGlmCisgIyBlbmRpZgorKyAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAgICAgICBfX3NldF9lcnJubyAoc2F2ZWRfZXJybm8pOworICAgICAgIHJldHVybiByZXR2YWw7CisgICAgIH0KK0BAIC04MzgsMTAgKzg1MCwxMyBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAJICAgICAgaWYgKHBsdXJhbCkKKyAJCXJldHZhbCA9IHBsdXJhbF9sb29rdXAgKGRvbWFpbiwgbiwgcmV0dmFsLCByZXRsZW4pOworIAorLQkgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgI2lmZGVmIF9MSUJDCistCSAgICAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrCisrCSAgICAgIGdsX3J3bG9ja191bmxvY2sgKF9fbGliY19zZXRsb2NhbGVfbG9jayk7CisrIyBlbmRpZgorICNlbmRpZgorKwkgICAgICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgCSAgICAgIHJldHVybiByZXR2YWw7CisgCSAgICB9CisgCX0KK0BAIC04NTAsMTAgKzg2NSwxMiBAQCBEQ0lHRVRURVhUIChjb25zdCBjaGFyICpkb21haW5uYW1lLCBjb25zdCBjaGFyICptc2dpZDEsIGNvbnN0IGNoYXIgKm1zZ2lkMiwKKyAgcmV0dXJuX3VudHJhbnNsYXRlZDoKKyAgIC8qIFJldHVybiB0aGUgdW50cmFuc2xhdGVkIE1TR0lELiAgKi8KKyAgIEZSRUVfQkxPQ0tTIChibG9ja19saXN0KTsKKy0gIGdsX3J3bG9ja191bmxvY2sgKF9ubF9zdGF0ZV9sb2NrKTsKKyAjaWZkZWYgX0xJQkMKKy0gIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworKyMgaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrICAgZ2xfcndsb2NrX3VubG9jayAoX19saWJjX3NldGxvY2FsZV9sb2NrKTsKKysjIGVuZGlmCisgI2VuZGlmCisrICBnbF9yd2xvY2tfdW5sb2NrIChfbmxfc3RhdGVfbG9jayk7CisgI2lmbmRlZiBfTElCQworICAgaWYgKCFFTkFCTEVfU0VDVVJFKQorICAgICB7CitAQCAtMTU1MCw3ICsxNTY3LDExIEBAIGd1ZXNzX2NhdGVnb3J5X3ZhbHVlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmNhdGVnb3J5bmFtZSkKKyAgICAgIGBMQ194eHgnLCBhbmQgYExBTkcnLiAgT24gc29tZSBzeXN0ZW1zIHRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlCisgICAgICBgc2V0bG9jYWxlJyBmdW5jdGlvbiBpdHNlbGYuICAqLworICMgaWZkZWYgX0xJQkMKKysjICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGxvY2FsZSA9IF9fY3VycmVudF9sb2NhbGVfbmFtZSAoY2F0ZWdvcnkpOworKyMgIGVsc2UKKysgIGxvY2FsZSA9ICJDIjsKKysjICBlbmRpZgorICMgZWxzZQorICAgbG9jYWxlX2RlZmF1bHRlZCA9IDA7CisgIyAgaWYgSEFWRV9VU0VMT0NBTEUKK2RpZmYgLS1naXQgYS9pby9NYWtlZmlsZSBiL2lvL01ha2VmaWxlCitpbmRleCA2MTNkY2UwLi42OTc0MzllIDEwMDY0NAorLS0tIGEvaW8vTWFrZWZpbGUKKysrKyBiL2lvL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgSS9PIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gaW8KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zNiw3ICszOCw3IEBAIHJvdXRpbmVzIDo9CQkJCQkJCQlcCisgCWZ4c3RhdGF0IGZ4c3RhdGF0NjQJCQkJCQlcCisgCXN0YXRmcyBmc3RhdGZzIHN0YXRmczY0IGZzdGF0ZnM2NAkJCQlcCisgCXN0YXR2ZnMgZnN0YXR2ZnMgc3RhdHZmczY0IGZzdGF0dmZzNjQJCQkJXAorLQl1bWFzayBjaG1vZCBmY2htb2QgbGNobW9kIGZjaG1vZGF0CQkJCVwKKysJdW1hc2sgY2htb2QgZmNobW9kIGZjaG1vZGF0CQkJCQlcCisgCW1rZGlyIG1rZGlyYXQJCQkJCQkJXAorIAlvcGVuIG9wZW5fMiBvcGVuNjQgb3BlbjY0XzIgb3BlbmF0IG9wZW5hdF8yIG9wZW5hdDY0IG9wZW5hdDY0XzIJXAorIAlyZWFkIHdyaXRlIGxzZWVrIGxzZWVrNjQgYWNjZXNzIGV1aWRhY2Nlc3MgZmFjY2Vzc2F0CQlcCitAQCAtNDksMTEgKzUxLDEzIEBAIHJvdXRpbmVzIDo9CQkJCQkJCQlcCisgCXR0eW5hbWUgdHR5bmFtZV9yIGlzYXR0eQkJCQkJXAorIAlsaW5rIGxpbmthdCBzeW1saW5rIHN5bWxpbmthdCByZWFkbGluayByZWFkbGlua2F0CQlcCisgCXVubGluayB1bmxpbmthdCBybWRpcgkJCQkJCVwKKy0JZnR3IGZ0dzY0IGZ0cyBwb2xsIHBwb2xsCQkJCQlcCisrCXBvbGwgcHBvbGwJCQkJCQkJXAorIAlwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhZHZpc2U2NAkJCQkJXAorIAlwb3NpeF9mYWxsb2NhdGUgcG9zaXhfZmFsbG9jYXRlNjQJCQkJXAorIAlzZW5kZmlsZSBzZW5kZmlsZTY0IFwKKyAJdXRpbWVuc2F0IGZ1dGltZW5zCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JTRCkgKz0gbGNobW9kCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkgKz0gZnR3IGZ0dzY0IGZ0cworIAorIGF1eCA6PSBoYXZlX29fY2xvZXhlYworIAorQEAgLTY0LDE4ICs2OCwyMiBAQCBzdGF0aWMtb25seS1yb3V0aW5lcyA9IHN0YXQgZnN0YXQgbHN0YXQgc3RhdDY0IGZzdGF0NjQgbHN0YXQ2NAlcCisgCQkgICAgICAgZnN0YXRhdCBmc3RhdGF0NjQgbWtub2QgbWtub2RhdAorIAorIG90aGVycwkJOj0gcHdkCistdGVzdC1zcmNzCTo9IGZ0d3Rlc3QKKyt0ZXN0LXNyY3MtJChPUFRJT05fRUdMSUJDX0ZUUkFWRVJTRSkgOj0gZnR3dGVzdAorIHRlc3RzCQk6PSB0ZXN0LXV0aW1lIHRlc3Qtc3RhdCB0ZXN0LXN0YXQyIHRlc3QtbGZzIHRzdC1nZXRjd2QgXAorLQkJICAgdHN0LWZjbnRsIGJ1Zy1mdHcxIGJ1Zy1mdHcyIGJ1Zy1mdHczIGJ1Zy1mdHc0IHRzdC1zdGF0dmZzIFwKKysJCSAgIHRzdC1mY250bCB0c3Qtc3RhdHZmcyBcCisgCQkgICB0c3Qtb3BlbmF0IHRzdC11bmxpbmthdCB0c3QtZnN0YXRhdCB0c3QtZnV0aW1lc2F0IFwKKyAJCSAgIHRzdC1yZW5hbWVhdCB0c3QtZmNob3duYXQgdHN0LWZjaG1vZGF0IHRzdC1mYWNjZXNzYXQgXAorIAkJICAgdHN0LXN5bWxpbmthdCB0c3QtbGlua2F0IHRzdC1yZWFkbGlua2F0IHRzdC1ta2RpcmF0IFwKKy0JCSAgIHRzdC1ta25vZGF0IHRzdC1ta2ZpZm9hdCB0c3QtdHR5bmFtZV9yIGJ1Zy1mdHc1IFwKKysJCSAgIHRzdC1ta25vZGF0IHRzdC1ta2ZpZm9hdCB0c3QtdHR5bmFtZV9yIFwKKyAJCSAgIHRzdC1wb3NpeF9mYWxsb2NhdGUKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSArPSBidWctZnR3MSBidWctZnR3MiBidWctZnR3MyBidWctZnR3NCBcCisrCQkJCSAgICBidWctZnR3NQorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfRlRSQVZFUlNFKSkKKyB0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWZ0d3Rlc3Qub3V0CisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9saWJpZG4vTWFrZWZpbGUgYi9saWJpZG4vTWFrZWZpbGUKK2luZGV4IDk0MGZhNTIuLjQzYWFkMGMgMTAwNjQ0CistLS0gYS9saWJpZG4vTWFrZWZpbGUKKysrKyBiL2xpYmlkbi9NYWtlZmlsZQorQEAgLTE2LDYgKzE2LDcgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyAjIE1ha2VmaWxlIGZvciBsaWJpZG4gc3ViZGlyZWN0b3J5IG9mIEdOVSBDIExpYnJhcnkuCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworIAorIHN1YmRpcgk6PSBsaWJpZG4KKyAKK0BAIC0yMyw4ICsyNCw4IEBAIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIHJvdXRpbmVzID0gaWRuLXN0dWIKKyAKKy1leHRyYS1saWJzCQk9IGxpYmNpZG4KKy1leHRyYS1saWJzLW90aGVycwk9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JRE4pID0gbGliY2lkbgorK2V4dHJhLWxpYnMtb3RoZXJzLXkgPSAkKGV4dHJhLWxpYnMteSkKKyAKKyBsaWJjaWRuLXJvdXRpbmVzIDo9IHB1bnljb2RlIHRvdXRmOCBuZmtjIHN0cmluZ3ByZXAgcmZjMzQ1NCBwcm9maWxlcyBpZG5hIFwKKyAJCSAgICBpY29udm1lCitkaWZmIC0tZ2l0IGEvbGliaWRuL3RvdXRmOC5jIGIvbGliaWRuL3RvdXRmOC5jCitpbmRleCBjN2U2N2NhLi42MmRmNDc4IDEwMDY0NAorLS0tIGEvbGliaWRuL3RvdXRmOC5jCisrKysgYi9saWJpZG4vdG91dGY4LmMKK0BAIC0zMyw2ICszMywxMSBAQAorIC8qIEdldCBzdHJsZW4uICovCisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKy8qIEdldCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUuICAqLworKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKysKKyAvKiBHZXQgaWNvbnZfc3RyaW5nLiAqLworICNpbmNsdWRlICJpY29udm1lLmgiCisgCitAQCAtNDcsNyArNTIsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX0xJQkMKKy0jIGRlZmluZSBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0KCkgbmxfbGFuZ2luZm8gKENPREVTRVQpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjICBkZWZpbmUgc3RyaW5ncHJlcF9sb2NhbGVfY2hhcnNldCgpIG5sX2xhbmdpbmZvIChDT0RFU0VUKQorKyMgZWxzZQorKyMgIGRlZmluZSBzdHJpbmdwcmVwX2xvY2FsZV9jaGFyc2V0KCkgIkFOU0lfWDMuNC0xOTY4IgorKyMgZW5kaWYKKyAjZWxzZQorIC8qKgorICAqIHN0cmluZ3ByZXBfbG9jYWxlX2NoYXJzZXQgLSByZXR1cm4gY2hhcnNldCB1c2VkIGluIGN1cnJlbnQgbG9jYWxlCitkaWZmIC0tZ2l0IGEvbGliaW8vTWFrZWZpbGUgYi9saWJpby9NYWtlZmlsZQoraW5kZXggN2IzYmNmOS4uMjdjOTE4NiAxMDA2NDQKKy0tLSBhL2xpYmlvL01ha2VmaWxlCisrKysgYi9saWJpby9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTcGVjaWZpYyBtYWtlZmlsZSBmb3IgbGliaW8uCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbGliaW8KKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNywxNiArMjksMTMgQEAgaGVhZGVycwk6PSBzdGRpby5oIGxpYmlvLmggX0dfY29uZmlnLmggYml0cy9zdGRpby5oIGJpdHMvc3RkaW8tbG9jay5oIFwKKyAKKyByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCWZpbGVkb2FsbG9jIGlvZmNsb3NlIGlvZmRvcGVuIGlvZmZsdXNoIGlvZmdldHBvcyBpb2ZnZXRzIGlvZm9wZW4gICAgICBcCistCWlvZm9wbmNvb2sgaW9mcHV0cyBpb2ZyZWFkIGlvZnNldHBvcyBpb2Z0ZWxsIHdmaWxlZG9hbGxvYwkgICAgICBcCisrCWlvZm9wbmNvb2sgaW9mcHV0cyBpb2ZyZWFkIGlvZnNldHBvcyBpb2Z0ZWxsCQkJICAgICAgXAorIAlpb2Z3cml0ZSBpb2dldGRlbGltIGlvZ2V0bGluZSBpb2dldHMgaW9wYWRuIGlvcG9wZW4gaW9wdXRzCSAgICAgIFwKKyAJaW9zZWVrb2ZmIGlvc2Vla3BvcyBpb3NldGJ1ZmZlciBpb3NldHZidWYgaW91bmdldGMJCSAgICAgIFwKKyAJaW92c3ByaW50ZiBpb3Zzc2NhbmYJCQkJCQkgICAgICBcCisgCWlvZmdldHBvczY0IGlvZm9wZW42NCBpb2ZzZXRwb3M2NAkJCQkgICAgICBcCistCWZwdXR3YyBmcHV0d2NfdSBnZXR3YyBnZXR3Y191IGdldHdjaGFyIGdldHdjaGFyX3UgaW9mZ2V0d3MgaW9mZ2V0d3NfdSBcCistCWlvZnB1dHdzIGlvZnB1dHdzX3UgaW9nZXR3bGluZSBpb3dwYWRuIGlvdW5nZXR3YyBwdXR3YyBwdXR3Y191CSAgICAgIFwKKy0JcHV0d2NoYXIgcHV0d2NoYXJfdSBwdXRjaGFyIHB1dGNoYXJfdSBmd3ByaW50ZiBzd3ByaW50ZiB2d3ByaW50ZiAgICAgIFwKKy0Jd3ByaW50ZiB3c2NhbmYgZndzY2FuZiB2d3NjYW5mIHZzd3ByaW50ZiBpb3Zzd3NjYW5mIHN3c2NhbmYgd2dlbm9wcyAgIFwKKy0Jd3N0cm9wcyB3ZmlsZW9wcyBpb2Z3aWRlIGZ3aWRlIHdtZW1zdHJlYW0JCQkgICAgICBcCisrCXB1dGNoYXIgcHV0Y2hhcl91CQkJCQkJICAgICAgXAorKwlpb2Z3aWRlCQkJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorIAljbGVhcmVyciBmZW9mIGZlcnJvciBmaWxlbm8gZnB1dGMgZnJlb3BlbiBmc2VlayBnZXRjIGdldGNoYXIJICAgICAgXAorIAltZW1zdHJlYW0gcGNsb3NlIHB1dGMgcHV0Y2hhciByZXdpbmQgc2V0YnVmIHNldGxpbmVidWYgdmFzcHJpbnRmICAgICAgXAorQEAgLTQ4LDI0ICs0Nyw0OSBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorIAlsaWJjX2ZhdGFsIGZtZW1vcGVuIG9sZGZtZW1vcGVuCisgCistdGVzdHMgPSB0c3Rfc3dwcmludGYgdHN0X3dwcmludGYgdHN0X3N3c2NhbmYgdHN0X3dzY2FuZiB0c3RfZ2V0d2MgdHN0X3B1dHdjICAgXAorLQl0c3Rfd3ByaW50ZjIgdHN0LXdpZGV0ZXh0IHRlc3QtZm1lbW9wZW4gdHN0LWV4dCB0c3QtZXh0MiBcCistCXRzdC1mZ2V0d3MgdHN0LXVuZ2V0d2MxIHRzdC11bmdldHdjMiB0c3Qtc3dzY2FuZiB0c3Qtc3NjYW5mCSAgICAgIFwKKy0JdHN0LW1tYXAtc2V0dmJ1ZiBidWctdW5nZXR3YzEgYnVnLXVuZ2V0d2MyIHRzdC1hdGltZSB0c3QtZW9mICAgICAgICAgIFwKKy0JdHN0LWZyZW9wZW4gYnVnLXJld2luZCBidWctcmV3aW5kMiBidWctdW5nZXRjIGJ1Zy1mc2VlayBcCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0JCQkJICAgICAgXAorKwl3ZmlsZWRvYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlpb3dwYWRuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlzd3ByaW50ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl2c3dwcmludGYgaW92c3dzY2FuZiBzd3NjYW5mIHdnZW5vcHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl3c3Ryb3BzIHdmaWxlb3BzIHdtZW1zdHJlYW0KKytyb3V0aW5lcy0kKGNhbGwgb3B0aW9uLWRpc2FibGVkLCBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0JICAgICAgXAorKwl3ZHVtbXlmaWxlb3BzCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgKz0JCQkJICAgICAgXAorKwlmcHV0d2MgZnB1dHdjX3UgZ2V0d2MgZ2V0d2NfdSBnZXR3Y2hhciBnZXR3Y2hhcl91IGlvZmdldHdzIGlvZmdldHdzX3UgXAorKwlpb2ZwdXR3cyBpb2ZwdXR3c191IGlvZ2V0d2xpbmUgaW91bmdldHdjIHB1dHdjIHB1dHdjX3UgICAgICAgICAgICAgICAgXAorKwlwdXR3Y2hhciBwdXR3Y2hhcl91IGZ3cHJpbnRmIHZ3cHJpbnRmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwl3cHJpbnRmIHdzY2FuZiBmd3NjYW5mIHZ3c2NhbmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwlmd2lkZQorKworK3Rlc3RzID0gdGVzdC1mbWVtb3BlbiB0c3QtZXh0IHRzdC1leHQyIFwKKysJdHN0LW1tYXAtc2V0dmJ1ZiB0c3QtYXRpbWUgdHN0LWVvZiBcCisrCXRzdC1mcmVvcGVuIGJ1Zy11bmdldGMgYnVnLWZzZWVrIFwKKyAJdHN0LW1tYXAtZW9mc3luYyB0c3QtbW1hcC1mZmx1c2hzeW5jIGJ1Zy1tbWFwLWZmbHVzaCBcCistCXRzdC1tbWFwMi1lb2ZzeW5jIHRzdC1tbWFwLW9mZmVuZCBidWctZm9wZW5hKyBidWctd2ZmbHVzaCBcCistCWJ1Zy11bmdldGMyIGJ1Zy1mdGVsbCBidWctdW5nZXRjMyBidWctdW5nZXRjNCB0c3QtZm9wZW5sb2MyIFwKKysJdHN0LW1tYXAyLWVvZnN5bmMgdHN0LW1tYXAtb2ZmZW5kIGJ1Zy1mb3BlbmErIFwKKysJYnVnLXVuZ2V0YzIgYnVnLXVuZ2V0YzMgYnVnLXVuZ2V0YzQgXAorIAl0c3QtbWVtc3RyZWFtMSB0c3QtbWVtc3RyZWFtMiBcCistCXRzdC13bWVtc3RyZWFtMSB0c3Qtd21lbXN0cmVhbTIgXAorLQlidWctbWVtc3RyZWFtMSBidWctd21lbXN0cmVhbTEgXAorLQl0c3Qtc2V0dmJ1ZjEgdHN0LXBvcGVuMSB0c3QtZmdldHdjIGJ1Zy13c2V0cG9zIHRzdC1mc2VlayBcCistCXRzdC1md3JpdGUtZXJyb3IgdHN0LWZ0ZWxsLXBhcnRpYWwtd2lkZSB0c3QtZnRlbGwtYWN0aXZlLWhhbmRsZXIgXAorLQl0c3QtZnRlbGwtYXBwZW5kIHRzdC1mcHV0d3MKKysJYnVnLW1lbXN0cmVhbTEgdHN0LXBvcGVuMSB0c3QtZndyaXRlLWVycm9yIFwKKysJdHN0LWZ0ZWxsLWFjdGl2ZS1oYW5kbGVyIHRzdC1mdGVsbC1hcHBlbmQKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJKz0gdHN0LXN3c2NhbmYgdHN0LWZnZXR3cyB0c3Qtc2V0dmJ1ZjEgXAorKwl0c3QtdW5nZXR3YzEgdHN0LXVuZ2V0d2MyIGJ1Zy1mdGVsbCBidWctdW5nZXR3YzIgXAorKwl0c3Qtd2lkZXRleHQgdHN0LWZwdXR3cworK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pIFwKKysJKz0gYnVnLXJld2luZCBidWctcmV3aW5kMiBidWctdW5nZXR3YzEgXAorKwlidWctd2ZmbHVzaCBidWctd21lbXN0cmVhbTEgdHN0LWZvcGVubG9jMiBcCisrCXRzdF9nZXR3YyBcCisrCXRzdF9wdXR3YyB0c3Rfd3ByaW50ZiB0c3Rfd3ByaW50ZjIgdHN0X3dzY2FuZiBcCisrCXRzdC1mZ2V0d2MgYnVnLXdzZXRwb3MgdHN0LWZzZWVrIHRzdC1mdGVsbC1wYXJ0aWFsLXdpZGUKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSs9IHRzdF9zd3ByaW50ZiB0c3Rfc3dzY2FuZiBcCisrCXRzdC1zc2NhbmYgXAorKwl0c3Qtd21lbXN0cmVhbTEgdHN0LXdtZW1zdHJlYW0yCisrCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIEFkZCB0ZXN0LWZvcGVubG9jIG9ubHkgaWYgc2hhcmVkIGxpYnJhcnkgaXMgZW5hYmxlZCBzaW5jZSBpdCBkZXBlbmRzIG9uCisgIyBzaGFyZWQgbG9jYWxlZGF0YSBvYmplY3RzLgorLXRlc3RzICs9IHRzdC1mb3BlbmxvYworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gdHN0LWZvcGVubG9jCisgZW5kaWYKKyB0ZXN0LXNyY3MgPSB0ZXN0LWZyZW9wZW4KKyAKK0BAIC0xNjQsMTMgKzE4OCwxNyBAQCBzaGFyZWQtb25seS1yb3V0aW5lcyA9IG9sZGlvZm9wZW4gb2xkaW9mZG9wZW4gb2xkaW9mY2xvc2Ugb2xkZmlsZW9wcwlcCisgCQkgICAgICAgb2xkaW9mc2V0cG9zNjQKKyAKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0ZXN0LWZyZW9wZW4ub3V0CisrZW5kaWYKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKyAjIFJ1biB0c3QtZm9wZW5sb2MtY21wLm91dCBhbmQgdHN0LW9wZW5sb2MtbWVtLm91dCBvbmx5IGlmIHNoYXJlZAorICMgbGlicmFyeSBpcyBlbmFibGVkIHNpbmNlIHRoZXkgZGVwZW5kIG9uIHRzdC1mb3BlbmxvYy5vdXQuCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtZm9wZW5sb2MtY21wLm91dCAkKG9ianBmeCl0c3QtZm9wZW5sb2MtbWVtLm91dAorIGVuZGlmCisgZW5kaWYKKytlbmRpZgorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS9saWJpby9fX2ZwdXJnZS5jIGIvbGliaW8vX19mcHVyZ2UuYworaW5kZXggMDY1Y2Y2MS4uZTMyYTNlOSAxMDA2NDQKKy0tLSBhL2xpYmlvL19fZnB1cmdlLmMKKysrKyBiL2xpYmlvL19fZnB1cmdlLmMKK0BAIC0yMSw3ICsyMSw3IEBACisgdm9pZAorIF9fZnB1cmdlIChGSUxFICpmcCkKKyB7CistICBpZiAoZnAtPl9tb2RlID4gMCkKKysgIGlmIChfSU9faXNfd2lkZSAoZnApKQorICAgICB7CisgICAgICAgLyogV2lkZS1jaGFyIHN0cmVhbS4gICovCisgICAgICAgaWYgKF9JT19pbl9iYWNrdXAgKGZwKSkKK2RpZmYgLS1naXQgYS9saWJpby9maWxlb3BzLmMgYi9saWJpby9maWxlb3BzLmMKK2luZGV4IGNiY2Q2ZjUuLjE5ZTQzYzIgMTAwNjQ0CistLS0gYS9saWJpby9maWxlb3BzLmMKKysrKyBiL2xpYmlvL2ZpbGVvcHMuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaWYgX0xJQkMKKyAjIGluY2x1ZGUgIi4uL3djc21icy93Y3NtYnNsb2FkLmgiCitAQCAtMTczLDcgKzE3NCw3IEBAIF9JT19uZXdfZmlsZV9jbG9zZV9pdCAoX0lPX0ZJTEUgKmZwKQorIAorICAgLyogRnJlZSBidWZmZXIuICovCisgI2lmIGRlZmluZWQgX0xJQkMgfHwgZGVmaW5lZCBfR0xJQkNQUF9VU0VfV0NIQVJfVAorLSAgaWYgKGZwLT5fbW9kZSA+IDApCisrICBpZiAoX0lPX2lzX3dpZGUgKGZwKSkKKyAgICAgeworICAgICAgIGlmIChfSU9faGF2ZV93YmFja3VwIChmcCkpCisgCV9JT19mcmVlX3diYWNrdXBfYXJlYSAoZnApOworQEAgLTM0OCw2ICszNDksNyBAQCBfSU9fbmV3X2ZpbGVfZm9wZW4gKF9JT19GSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgICAgICAgY3MgPSBzdHJzdHIgKGxhc3RfcmVjb2duaXplZCArIDEsICIsY2NzPSIpOworICAgICAgIGlmIChjcyAhPSBOVUxMKQorIAl7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAJICAvKiBZZXAuICBMb2FkIHRoZSBhcHByb3ByaWF0ZSBjb252ZXJzaW9ucyBhbmQgc2V0IHRoZSBvcmllbnRhdGlvbgorIAkgICAgIHRvIHdpZGUuICAqLworIAkgIHN0cnVjdCBnY29udl9mY3RzIGZjdHM7CitAQCAtNDE4LDYgKzQyMCwxMiBAQCBfSU9fbmV3X2ZpbGVfZm9wZW4gKF9JT19GSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsCisgCisgCSAgLyogU2V0IHRoZSBtb2RlIG5vdy4gICovCisgCSAgcmVzdWx0LT5fbW9kZSA9IDE7CisrI2Vsc2UKKysgICAgICAgICAgLyogVHJlYXQgdGhpcyBhcyBpZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc2V0LiAgKi8KKysgICAgICAgICAgKHZvaWQpIF9JT19maWxlX2Nsb3NlX2l0IChmcCk7CisrICAgICAgICAgIF9fc2V0X2Vycm5vIChFSU5WQUwpOworKyAgICAgICAgICByZXR1cm4gTlVMTDsKKysjZW5kaWYKKyAJfQorICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbGliaW8vaW9md2lkZS5jIGIvbGliaW8vaW9md2lkZS5jCitpbmRleCAwYzE3NWQxLi4zZTlmNTJiIDEwMDY0NAorLS0tIGEvbGliaW8vaW9md2lkZS5jCisrKysgYi9saWJpby9pb2Z3aWRlLmMKK0BAIC0yNiw2ICsyNiw3IEBACisgCisgI2luY2x1ZGUgPGxpYmlvUC5oPgorICNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGluY2x1ZGUgPGRsZmNuLmg+CisgIyBpbmNsdWRlIDx3Y2hhci5oPgorICNlbmRpZgorQEAgLTQzLDYgKzQ0LDggQEAKKyAjZW5kaWYKKyAKKyAKKysjaWYgISBkZWZpbmVkIF9MSUJDIHx8IF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKysKKyAvKiBQcm90b3R5cGVzIG9mIGxpYmlvJ3MgY29kZWN2dCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBlbnVtIF9fY29kZWN2dF9yZXN1bHQgZG9fb3V0IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKmNvZGVjdnQsCisgCQkJCSAgICAgX19tYnN0YXRlX3QgKnN0YXRlcCwKK0BAIC00OTksMyArNTAyLDI2IEBAIGRvX21heF9sZW5ndGggKHN0cnVjdCBfSU9fY29kZWN2dCAqY29kZWN2dCkKKyAgIHJldHVybiBNQl9DVVJfTUFYOworICNlbmRpZgorIH0KKysKKysjZWxzZQorKy8qIE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIGlzIGRpc2FibGVkLiAgKi8KKysKKysjdW5kZWYgX0lPX2Z3aWRlCisraW50CisrX0lPX2Z3aWRlIChmcCwgbW9kZSkKKysgICAgIF9JT19GSUxFICpmcDsKKysgICAgIGludCBtb2RlOworK3sKKysgIC8qIERpZSBoZWxwZnVsbHkgaWYgdGhlIHVzZXIgdHJpZXMgdG8gY3JlYXRlIGEgd2lkZSBzdHJlYW07IEkKKysgICAgIGRpc2JlbGlldmUgdGhhdCBtb3N0IHVzZXJzIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgZnJvbQorKyAgICAgJ2Z3aWRlIChmcCwgMSknLiAgKi8KKysgIGFzc2VydCAobW9kZSA8PSAwKTsKKysKKysgIC8qIFdlIGNhbiBvbmx5IG1ha2Ugc3RyZWFtcyBieXRlLW9yaWVudGVkLCB3aGljaCBpcyB0cml2aWFsLiAgKi8KKysgIGlmIChtb2RlIDwgMCkKKysgICAgZnAtPl9tb2RlID0gLTE7CisrCisrICByZXR1cm4gZnAtPl9tb2RlOworK30KKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJpby9pb3NlZWtvZmYuYyBiL2xpYmlvL2lvc2Vla29mZi5jCitpbmRleCAxMTc2NWNmLi4xNWQ2MjMwIDEwMDY0NAorLS0tIGEvbGliaW8vaW9zZWVrb2ZmLmMKKysrKyBiL2xpYmlvL2lvc2Vla29mZi5jCitAQCAtNjAsNyArNjAsNyBAQCBfSU9fc2Vla29mZl91bmxvY2tlZCAoZnAsIG9mZnNldCwgZGlyLCBtb2RlKQorIAkgIGVsc2UKKyAJICAgIGFib3J0ICgpOworIAl9CistICAgICAgaWYgKF9JT19md2lkZSAoZnAsIDApIDwgMCkKKysgICAgICBpZiAoISBfSU9faXNfd2lkZSAoZnApKQorIAlfSU9fZnJlZV9iYWNrdXBfYXJlYSAoZnApOworICAgICAgIGVsc2UKKyAJX0lPX2ZyZWVfd2JhY2t1cF9hcmVhIChmcCk7CitkaWZmIC0tZ2l0IGEvbGliaW8vaW9zZWVrcG9zLmMgYi9saWJpby9pb3NlZWtwb3MuYworaW5kZXggYTc2NTJhMS4uNjkzOGI2OCAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvc2Vla3Bvcy5jCisrKysgYi9saWJpby9pb3NlZWtwb3MuYworQEAgLTM1LDcgKzM1LDcgQEAgX0lPX3NlZWtwb3NfdW5sb2NrZWQgKGZwLCBwb3MsIG1vZGUpCisgICAvKiBJZiB3ZSBoYXZlIGEgYmFja3VwIGJ1ZmZlciwgZ2V0IHJpZCBvZiBpdCwgc2luY2UgdGhlIF9fc2Vla29mZgorICAgICAgY2FsbGJhY2sgbWF5IG5vdCBrbm93IHRvIGRvIHRoZSByaWdodCB0aGluZyBhYm91dCBpdC4KKyAgICAgIFRoaXMgbWF5IGJlIG92ZXIta2lsbCwgYnV0IGl0J2xsIGRvIGZvciBub3cuIFRPRE8gKi8KKy0gIGlmIChfSU9fZndpZGUgKGZwLCAwKSA8PSAwKQorKyAgaWYgKCEgX0lPX2lzX3dpZGUgKGZwKSkKKyAgICAgeworICAgICAgIGlmIChfSU9faGF2ZV9iYWNrdXAgKGZwKSkKKyAJX0lPX2ZyZWVfYmFja3VwX2FyZWEgKGZwKTsKK2RpZmYgLS1naXQgYS9saWJpby9pb3NldGJ1ZmZlci5jIGIvbGliaW8vaW9zZXRidWZmZXIuYworaW5kZXggMGE0MWMxMC4uM2Q5OWZhMCAxMDA2NDQKKy0tLSBhL2xpYmlvL2lvc2V0YnVmZmVyLmMKKysrKyBiL2xpYmlvL2lvc2V0YnVmZmVyLmMKK0BAIC0yNCw2ICsyNCw4IEBACisgICAgVGhpcyBleGNlcHRpb24gYXBwbGllcyB0byBjb2RlIHJlbGVhc2VkIGJ5IGl0cyBjb3B5cmlnaHQgaG9sZGVycworICAgIGluIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGV4Y2VwdGlvbi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrCisgI2luY2x1ZGUgImxpYmlvUC5oIgorIAorIHZvaWQKK0BAIC0zOCw5ICs0MCwxMSBAQCBfSU9fc2V0YnVmZmVyIChmcCwgYnVmLCBzaXplKQorICAgaWYgKCFidWYpCisgICAgIHNpemUgPSAwOworICAgKHZvaWQpIF9JT19TRVRCVUYgKGZwLCBidWYsIHNpemUpOworKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpZiAoX0lPX3Z0YWJsZV9vZmZzZXQgKGZwKSA9PSAwICYmIGZwLT5fbW9kZSA9PSAwICYmIF9JT19DSEVDS19XSURFIChmcCkpCisgICAgIC8qIFdlIGFsc28gaGF2ZSB0byBzZXQgdGhlIGJ1ZmZlciB1c2luZyB0aGUgd2lkZSBjaGFyIGZ1bmN0aW9uLiAgKi8KKyAgICAgKHZvaWQpIF9JT19XU0VUQlVGIChmcCwgYnVmLCBzaXplKTsKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworICAgX0lPX3JlbGVhc2VfbG9jayAoZnApOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9JT19zZXRidWZmZXIpCitkaWZmIC0tZ2l0IGEvbGliaW8vbGliaW9QLmggYi9saWJpby9saWJpb1AuaAoraW5kZXggMGYxNmUyZC4uZDI2MjZkNiAxMDA2NDQKKy0tLSBhL2xpYmlvL2xpYmlvUC5oCisrKysgYi9saWJpby9saWJpb1AuaAorQEAgLTQ0LDYgKzQ0LDEwIEBACisgLyojIGluY2x1ZGUgPGNvbXRocmVhZC5oPiovCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2luY2x1ZGUgPG1hdGhfbGRibF9vcHQuaD4KKyAKKyAjaW5jbHVkZSAiaW9saWJpby5oIgorQEAgLTUyMyw4ICs1MjcsMjAgQEAgZXh0ZXJuIHZvaWQgX0lPX29sZF9pbml0IChfSU9fRklMRSAqZnAsIGludCBmbGFncykgX19USFJPVzsKKyAKKyAKKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9HTElCQ1BQX1VTRV9XQ0hBUl9UCisrCisrLyogX0lPX2lzX3dpZGUgKGZwKSBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gJ19JT19md2lkZSAoZnAsIDApID4gMCcsCisrICAgZXhjZXB0IHRoYXQgd2hlbiBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgaXQKKysgICBleHBhbmRzIHRvIGEgY29uc3RhbnQsIGFsbG93aW5nIHRoZSBjb21waWxlciB0byByZWFsaXplIHRoYXQgaXQgY2FuCisrICAgZWxpbWluYXRlIGNvZGUgdGhhdCByZWZlcmVuY2VzIHdpZGUgc3RyZWFtIGhhbmRsaW5nIGZ1bmN0aW9ucy4KKysgICBUaGlzLCBpbiB0dXJuLCBhbGxvd3MgdXMgdG8gb21pdCB0aGVtLiAgKi8KKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyMgZGVmaW5lIF9JT19pc193aWRlKF9mKSAoKF9mKS0+X21vZGUgPiAwKQorKyNlbHNlCisrIyBkZWZpbmUgX0lPX2lzX3dpZGUoX2YpICgwKQorKyNlbmRpZgorKworICMgZGVmaW5lIF9JT19kb19mbHVzaChfZikgXAorLSAgKChfZiktPl9tb2RlIDw9IDAJCQkJCQkJICAgICAgXAorKyAgKCEgX0lPX2lzX3dpZGUgKF9mKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICA/IF9JT19kb193cml0ZShfZiwgKF9mKS0+X0lPX3dyaXRlX2Jhc2UsCQkJCSAgICAgIFwKKyAJCSAgKF9mKS0+X0lPX3dyaXRlX3B0ci0oX2YpLT5fSU9fd3JpdGVfYmFzZSkJCSAgICAgIFwKKyAgICA6IF9JT193ZG9fd3JpdGUoX2YsIChfZiktPl93aWRlX2RhdGEtPl9JT193cml0ZV9iYXNlLAkJICAgICAgXAorZGlmZiAtLWdpdCBhL2xpYmlvL3dkdW1teWZpbGVvcHMuYyBiL2xpYmlvL3dkdW1teWZpbGVvcHMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMwMTUwYjgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmlvL3dkdW1teWZpbGVvcHMuYworQEAgLTAsMCArMSwxNjEgQEAKKysvKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGxpbmsgdGhlIGNvZGUgaW4gdGhpcyBmaWxlIHdpdGgKKysgICBmaWxlcyBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwKKysgICB0aGF0IGRvZXMgbm90IGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90CisrICAgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlCisrICAgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKyAgIFRoaXMgZXhjZXB0aW9uIGFwcGxpZXMgdG8gY29kZSByZWxlYXNlZCBieSBpdHMgY29weXJpZ2h0IGhvbGRlcnMKKysgICBpbiBmaWxlcyBjb250YWluaW5nIHRoZSBleGNlcHRpb24uICAqLworKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxpYmlvUC5oPgorKworK3N0YXRpYyB2b2lkIF9fVEhST1cgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpCisrX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICh2b2lkKQorK3sKKysgIHN0YXRpYyBjb25zdCBjaGFyIGVycnN0cltdCisrICAgID0gKCJUaGUgYXBwbGljYXRpb24gdHJpZWQgdG8gdXNlIHdpZGUgY2hhcmFjdGVyIEkvTywgYnV0IGxpYmMuc28iCisrICAgICAgICIgd2FzIGNvbXBpbGVkXG4iCisrICAgICAgICJ3aXRoIHRoZSBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBvcHRpb24gZ3JvdXAgZGlzYWJsZWQuXG4iKTsKKysgIF9fbGliY193cml0ZSAoU1RERVJSX0ZJTEVOTywgZXJyc3RyLCBzaXplb2YgKGVycnN0cikgLSAxKTsKKysgIGFib3J0ICgpOworK30KKysKKytzdGF0aWMgdm9pZAorK19JT193ZmlsZV9kaXNhYmxlZF92b2lkX2ludCAoX0lPX0ZJTEUgKmZwLCBpbnQgeCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X2ludCAoX0lPX0ZJTEUgKmZwLCBpbnQgeCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUgKF9JT19GSUxFICpmcCkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3hzcHV0biAoX0lPX0ZJTEUgKmZwLCBjb25zdCB2b2lkICpkYXRhLCBfSU9fc2l6ZV90IG4pCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NpemVfdAorK19JT193ZmlsZV9kaXNhYmxlZF94c2dldG4gKF9JT19GSUxFICpmcCwgdm9pZCAqZGF0YSwgX0lPX3NpemVfdCBuKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19vZmY2NF90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtvZmYgKF9JT19GSUxFICpmcCwgX0lPX29mZjY0X3Qgb2ZmLCBpbnQgZGlyLCBpbnQgbW9kZSkKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBfSU9fb2ZmNjRfdAorK19JT193ZmlsZV9kaXNhYmxlZF9zZWVrcG9zIChfSU9fRklMRSAqZnAsIF9JT19vZmY2NF90IHBvcywgaW50IGZsYWdzKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19GSUxFICoKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2V0YnVmIChfSU9fRklMRSAqZnAsIGNoYXIgKmJ1ZmZlciwgX0lPX3NzaXplX3QgbGVuZ3RoKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIF9JT19zc2l6ZV90CisrX0lPX3dmaWxlX2Rpc2FibGVkX3JlYWQgKF9JT19GSUxFICpmcCwgdm9pZCAqYnVmZmVyLCBfSU9fc3NpemVfdCBsZW5ndGgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX3NzaXplX3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfd3JpdGUgKF9JT19GSUxFICpmcCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBfSU9fc3NpemVfdCBsZW5ndGgpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgX0lPX29mZjY0X3QKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2VlayAoX0lPX0ZJTEUgKmZwLCBfSU9fb2ZmNjRfdCBvZmZzZXQsIGludCBtb2RlKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9jbG9zZSAoX0lPX0ZJTEUgKmZwKQorK3sKKysgIF9JT193ZmlsZV93aWRlX2NoYXJfc3VwcG9ydF9kaXNhYmxlZCAoKTsKKyt9CisrCisrc3RhdGljIGludAorK19JT193ZmlsZV9kaXNhYmxlZF9zdGF0IChfSU9fRklMRSAqZnAsIHZvaWQgKmJ1ZikKKyt7CisrICBfSU9fd2ZpbGVfd2lkZV9jaGFyX3N1cHBvcnRfZGlzYWJsZWQgKCk7CisrfQorKworK3N0YXRpYyBpbnQKKytfSU9fd2ZpbGVfZGlzYWJsZWRfc2hvd21hbnljIChfSU9fRklMRSAqZnApCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgdm9pZAorK19JT193ZmlsZV9kaXNhYmxlZF9pbWJ1ZSAoX0lPX0ZJTEUgKmZwLCB2b2lkICpsb2NhbGUpCisreworKyAgX0lPX3dmaWxlX3dpZGVfY2hhcl9zdXBwb3J0X2Rpc2FibGVkICgpOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IF9JT19qdW1wX3QgX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkID0KKyt7CisrICBKVU1QX0lOSVRfRFVNTVksCisrICBKVU1QX0lOSVQoZmluaXNoLCBfSU9fd2ZpbGVfZGlzYWJsZWRfdm9pZF9pbnQpLAorKyAgSlVNUF9JTklUKG92ZXJmbG93LCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X2ludCksCisrICBKVU1QX0lOSVQodW5kZXJmbG93LCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKHVmbG93LCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKHBiYWNrZmFpbCwgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9pbnQpLAorKyAgSlVNUF9JTklUKHhzcHV0biwgX0lPX3dmaWxlX2Rpc2FibGVkX3hzcHV0biksCisrICBKVU1QX0lOSVQoeHNnZXRuLCBfSU9fd2ZpbGVfZGlzYWJsZWRfeHNnZXRuKSwKKysgIEpVTVBfSU5JVChzZWVrb2ZmLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2Vla29mZiksCisrICBKVU1QX0lOSVQoc2Vla3BvcywgX0lPX3dmaWxlX2Rpc2FibGVkX3NlZWtwb3MpLAorKyAgSlVNUF9JTklUKHNldGJ1ZiwgX0lPX3dmaWxlX2Rpc2FibGVkX3NldGJ1ZiksCisrICBKVU1QX0lOSVQoc3luYywgX0lPX3dmaWxlX2Rpc2FibGVkX2ludF9ub25lKSwKKysgIEpVTVBfSU5JVChkb2FsbG9jYXRlLCBfSU9fd2ZpbGVfZGlzYWJsZWRfaW50X25vbmUpLAorKyAgSlVNUF9JTklUKHJlYWQsIF9JT193ZmlsZV9kaXNhYmxlZF9yZWFkKSwKKysgIEpVTVBfSU5JVCh3cml0ZSwgX0lPX3dmaWxlX2Rpc2FibGVkX3dyaXRlKSwKKysgIEpVTVBfSU5JVChzZWVrLCBfSU9fd2ZpbGVfZGlzYWJsZWRfc2VlayksCisrICBKVU1QX0lOSVQoY2xvc2UsIF9JT193ZmlsZV9kaXNhYmxlZF9jbG9zZSksCisrICBKVU1QX0lOSVQoc3RhdCwgX0lPX3dmaWxlX2Rpc2FibGVkX3N0YXQpLAorKyAgSlVNUF9JTklUKHNob3dtYW55YywgX0lPX3dmaWxlX2Rpc2FibGVkX3Nob3dtYW55YyksCisrICBKVU1QX0lOSVQoaW1idWUsIF9JT193ZmlsZV9kaXNhYmxlZF9pbWJ1ZSkKKyt9OworKworK3N0cm9uZ19hbGlhcyAoX0lPX3dmaWxlX2p1bXBzX2Rpc2FibGVkLCBfSU9fd2ZpbGVfanVtcHMpCisrbGliY19oaWRkZW5fZGF0YV9kZWYgKF9JT193ZmlsZV9qdW1wcykKKytzdHJvbmdfYWxpYXMgKF9JT193ZmlsZV9qdW1wc19kaXNhYmxlZCwgX0lPX3dmaWxlX2p1bXBzX21tYXApCisrc3Ryb25nX2FsaWFzIChfSU9fd2ZpbGVfanVtcHNfZGlzYWJsZWQsIF9JT193ZmlsZV9qdW1wc19tYXliZV9tbWFwKQorZGlmZiAtLWdpdCBhL2xvY2FsZS9DLWN0eXBlLmMgYi9sb2NhbGUvQy1jdHlwZS5jCitpbmRleCBhYTVmMTlmLi4wNmJlMDgxIDEwMDY0NAorLS0tIGEvbG9jYWxlL0MtY3R5cGUuYworKysrIGIvbG9jYWxlL0MtY3R5cGUuYworQEAgLTE5LDggKzE5LDExIEBACisgI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAjaW5jbHVkZSAiQy10cmFuc2xpdC5oIgorKyNlbmRpZgorIAorIC8qIFRoaXMgdGFibGUncyBlbnRyaWVzIGFyZSB0YWtlbiBmcm9tIFBPU0lYLjIgVGFibGUgMi02CisgICAgYGBMQ19DVFlQRSBDYXRlZ29yeSBEZWZpbml0aW9uIGluIHRoZSBQT1NJWCBMb2NhbGUnJy4KK0BAIC02MzQsNiArNjM3LDcgQEAgY29uc3Qgc3RydWN0IF9fbG9jYWxlX2RhdGEgX25sX0NfTENfQ1RZUEUgYXR0cmlidXRlX2hpZGRlbiA9CisgICAgIHsgLndvcmQgPSBMJzcnIH0sCisgICAgIHsgLndvcmQgPSBMJzgnIH0sCisgICAgIHsgLndvcmQgPSBMJzknIH0sCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUgKi8KKyAgICAgeyAud29yZCA9IE5UUkFOU0xJVCB9LAorICAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFggKi8KK0BAIC02NDQsNiArNjQ4LDIyIEBAIGNvbnN0IHN0cnVjdCBfX2xvY2FsZV9kYXRhIF9ubF9DX0xDX0NUWVBFIGF0dHJpYnV0ZV9oaWRkZW4gPQorICAgICB7IC53c3RyID0gdHJhbnNsaXRfdG9faWR4IH0sCisgICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwgKi8KKyAgICAgeyAud3N0ciA9ICh1aW50MzJfdCAqKSB0cmFuc2xpdF90b190YmwgfSwKKysjZWxzZQorKyAgICAvKiBJZiB0aGUgbG9jYWxlIGNvZGUgaXNuJ3QgZW5hYmxlZCwgd2UgZG9uJ3QgaGF2ZSB0aGUKKysgICAgICAgdHJhbnNsaXRlcmF0aW9uIGNvZGUgaW4gaWNvbnYvZ2NvbnZfdHJhbnMuYyBhbnl3YXksIHNvIHRoZXJlJ3MKKysgICAgICAgbm8gbmVlZCBmb3IgdGhlIHRyYW5zbGl0ZXJhdGlvbiB0YWJsZXMgaGVyZS4gIFdlJ2xsIGZhbGwgYmFjaworKyAgICAgICBvbiB0aGUgZGVmYXVsdCBtaXNzaW5nIHJlcGxhY2VtZW50LCAnPycuICAqLworKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUgKi8KKysgICAgeyAud29yZCA9IDAgfSwKKysgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0ZST01fSURYICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCAqLworKyAgICB7IC53c3RyID0gTlVMTCB9LAorKyAgICAvKiBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9fSURYICovCisrICAgIHsgLndzdHIgPSBOVUxMIH0sCisrICAgIC8qIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwgKi8KKysgICAgeyAud3N0ciA9IE5VTEwgfSwKKysjZW5kaWYKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4gKi8KKyAgICAgeyAud29yZCA9IDEgfSwKKyAgICAgLyogX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lORyAqLworZGlmZiAtLWdpdCBhL2xvY2FsZS9NYWtlZmlsZSBiL2xvY2FsZS9NYWtlZmlsZQoraW5kZXggZjFiNDM0My4uNTk5YTFhOSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9NYWtlZmlsZQorKysrIGIvbG9jYWxlL01ha2VmaWxlCitAQCAtMTgsMjcgKzE4LDQzIEBACisgIworICMJTWFrZWZpbGUgZm9yIGxvY2FsZXMuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbG9jYWxlCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJPSBsb2NhbGUuaCBiaXRzL2xvY2FsZS5oIGxhbmdpbmZvLmggeGxvY2FsZS5oCistcm91dGluZXMJPSBzZXRsb2NhbGUgZmluZGxvY2FsZSBsb2FkbG9jYWxlIGxvYWRhcmNoaXZlIFwKKy0JCSAgbG9jYWxlY29udiBubF9sYW5naW5mbyBubF9sYW5naW5mb19sIG1iX2N1cl9tYXggXAorLQkJICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlCistdGVzdHMJCT0gdHN0LUMtbG9jYWxlIHRzdC1sb2NuYW1lIHRzdC1kdXBsb2NhbGUKKysjIGNhdG5hbWVzIGlzIG5lZWRlZCBieSBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGFuZCBieSB0aGUgJ2ludGwnIGNvZGUuCisrIyBJZiB3ZSBwdXQgdGhlIGxhdHRlciBpbiBhbiBvcHRpb24gZ3JvdXAsIHRvbywgd2UgY2FuIG9taXQgY2F0bmFtZXMKKysjIHdoZW4gYm90aCBvcHRpb24gZ3JvdXBzIGFyZSBkaXNhYmxlZC4gIGxpYnN0ZGMrKy12MyBuZWVkcyBtYl9jdXJfbWF4LgorK3JvdXRpbmVzLXkgICAgICA6PSBjYXRuYW1lcyBtYl9jdXJfbWF4Cisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSBzZXRsb2NhbGUgZmluZGxvY2FsZSBsb2FkbG9jYWxlIGxvYWRhcmNoaXZlIFwKKysJCSAgIGxvY2FsZWNvbnYgbmxfbGFuZ2luZm8gbmxfbGFuZ2luZm9fbCBcCisrCQkgICBuZXdsb2NhbGUgZHVwbG9jYWxlIGZyZWVsb2NhbGUgdXNlbG9jYWxlCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKytyb3V0aW5lcy15CSs9IGR1bW15LXNldGxvY2FsZQorK2VuZGlmCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPSB0c3QtQy1sb2NhbGUgdHN0LWxvY25hbWUgdHN0LWR1cGxvY2FsZQorIGNhdGVnb3JpZXMJPSBjdHlwZSBtZXNzYWdlcyBtb25ldGFyeSBudW1lcmljIHRpbWUgcGFwZXIgbmFtZSBcCisgCQkgIGFkZHJlc3MgdGVsZXBob25lIG1lYXN1cmVtZW50IGlkZW50aWZpY2F0aW9uIGNvbGxhdGUKKy1hdXgJCT0gJChjYXRlZ29yaWVzOiU9bGMtJSkgJChjYXRlZ29yaWVzOiU9Qy0lKSBTWVNfbGliYyBDX25hbWUgXAorLQkJICB4bG9jYWxlIGxvY2FsZW5hbWUgZ2xvYmFsLWxvY2FsZSBjb2xsLWxvb2t1cAorLW90aGVycwkJPSBsb2NhbGVkZWYgbG9jYWxlCisrIyBDLW1lc3NhZ2VzIGJlbG9uZ3MgaW4gYW4gaW50bCBvcHRpb24gZ3JvdXAuCisrYXV4LXkJCTo9IEMtY3R5cGUgQy10aW1lIFwKKysJCSAgIFNZU19saWJjIENfbmFtZSB4bG9jYWxlIGdsb2JhbC1sb2NhbGUgY29sbC1sb29rdXAKKythdXgtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCQkrPSAkKGZpbHRlci1vdXQgJChhdXgteSksIFwKKysJICAgICAgICAgICAgICAgICAgICAgICAgJChjYXRlZ29yaWVzOiU9bGMtJSkgJChjYXRlZ29yaWVzOiU9Qy0lKSkgXAorKwkgICAgICAgICAgIGxvY2FsZW5hbWUKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSA9IGxvY2FsZWRlZiBsb2NhbGUKKyAjb3RoZXJzLXN0YXRpYwk9IGxvY2FsZWRlZiBsb2NhbGUKKy1pbnN0YWxsLWJpbgk9IGxvY2FsZWRlZiBsb2NhbGUKKy1leHRyYS1vYmpzCT0gJChsb2NhbGVkZWYtbW9kdWxlczo9Lm8pICQobG9jYWxlZGVmLWF1eDo9Lm8pIFwKKytpbnN0YWxsLWJpbgk9ICQob3RoZXJzLXkpCisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCT0gJChsb2NhbGVkZWYtbW9kdWxlczo9Lm8pICQobG9jYWxlZGVmLWF1eDo9Lm8pIFwKKyAJCSAgJChsb2NhbGUtbW9kdWxlczo9Lm8pICQobGliLW1vZHVsZXM6PS5vKQorIAorLWV4dHJhLWxpYnMJPSBsaWJCcm9rZW5Mb2NhbGUKKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgPSBsaWJCcm9rZW5Mb2NhbGUKKytleHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicy15KQorIAorIGxpYkJyb2tlbkxvY2FsZS1yb3V0aW5lcyA9IGJyb2tlbl9jdXJfbWF4CisgCitAQCAtOTMsNiArMTA5LDkgQEAgQ1BQRkxBR1MtbG9jYWxlLXByb2dyYW1zID0gLURMT0NBTEVfUEFUSD0nJChsb2NhbGVwYXRoKScgXAorIENGTEFHUy1jaGFybWFwLmMgPSAtV25vLXdyaXRlLXN0cmluZ3MgLVduby1jaGFyLXN1YnNjcmlwdHMKKyBDRkxBR1MtbG9jZmlsZS5jID0gLVduby13cml0ZS1zdHJpbmdzIC1Xbm8tY2hhci1zdWJzY3JpcHRzCisgQ0ZMQUdTLWNoYXJtYXAtZGlyLmMgPSAtV25vLXdyaXRlLXN0cmluZ3MKKytpZm5lcSAoeSwkKE9QVElPTl9FR0xJQkNfU1BBV04pKQorK0NGTEFHUy1jaGFybWFwLWRpci5jICs9IC1ETk9fVU5DT01QUkVTUworK2VuZGlmCisgCisgIyBTZXQgbGlib2YtKiBmb3IgZWFjaCByb3V0aW5lLgorIGNwcC1zcmNzLWxlZnQgOj0gJChsb2NhbGVkZWYtbW9kdWxlcykgJChsb2NhbGVkZWYtYXV4KSAkKGxvY2FsZS1tb2R1bGVzKSBcCitkaWZmIC0tZ2l0IGEvbG9jYWxlL2NhdG5hbWVzLmMgYi9sb2NhbGUvY2F0bmFtZXMuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYWQzNTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xvY2FsZS9jYXRuYW1lcy5jCitAQCAtMCwwICsxLDQ4IEBACisrLyogQ29weXJpZ2h0IChDKSAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgImxvY2FsZWluZm8uaCIKKysKKysvKiBEZWZpbmUgYW4gYXJyYXkgb2YgY2F0ZWdvcnkgbmFtZXMgKGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzKS4gICovCisrY29uc3QgdW5pb24gY2F0bmFtZXN0cl90IF9ubF9jYXRlZ29yeV9uYW1lcyBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysgICAgeworKyNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorKyAgICAgIGNhdGVnb3J5X25hbWUsCisrI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKysgICAgfQorKyAgfTsKKysKKytjb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX2lkeHNbX19MQ19MQVNUXSBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgW2NhdGVnb3J5XSA9IG9mZnNldG9mICh1bmlvbiBjYXRuYW1lc3RyX3QsIENBVE5BTUVNRiAoX19MSU5FX18pKSwKKysjaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCisrI3VuZGVmIERFRklORV9DQVRFR09SWQorKyAgfTsKKysKKysvKiBBbiBhcnJheSBvZiB0aGVpciBsZW5ndGhzLCBmb3IgY29udmVuaWVuY2UuICAqLworK2NvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfc2l6ZXNbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKysgIHsKKysjZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKysgICAgW2NhdGVnb3J5XSA9IHNpemVvZiAoY2F0ZWdvcnlfbmFtZSkgLSAxLAorKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYJREVGSU5FX0NBVEVHT1JZCisrICAgIFtMQ19BTExdID0gc2l6ZW9mICgiTENfQUxMIikgLSAxCisrICB9OworZGlmZiAtLWdpdCBhL2xvY2FsZS9kdW1teS1zZXRsb2NhbGUuYyBiL2xvY2FsZS9kdW1teS1zZXRsb2NhbGUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIxOTk2NGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xvY2FsZS9kdW1teS1zZXRsb2NhbGUuYworQEAgLTAsMCArMSwzMyBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bG9jYWxlLmg+CisrCisrY2hhciAqCisrc2V0bG9jYWxlIChpbnQgY2F0ZWdvcnksIGNvbnN0IGNoYXIgKmxvY2FsZSkKKyt7CisrICBpZiAoISBsb2NhbGUKKysgICAgICB8fCBsb2NhbGVbMF0gPT0gJ1wwJworKyAgICAgIHx8IHN0cmNtcCAobG9jYWxlLCAiQyIpID09IDAKKysgICAgICB8fCBzdHJjbXAgKGxvY2FsZSwgIlBPU0lYIikgPT0gMCkKKysgICAgcmV0dXJuIChjaGFyICopICJDIjsKKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoc2V0bG9jYWxlKQorZGlmZiAtLWdpdCBhL2xvY2FsZS9sb2NhbGVpbmZvLmggYi9sb2NhbGUvbG9jYWxlaW5mby5oCitpbmRleCBiZGFiOWZlLi5hNzUxNmMwIDEwMDY0NAorLS0tIGEvbG9jYWxlL2xvY2FsZWluZm8uaAorKysrIGIvbG9jYWxlL2xvY2FsZWluZm8uaAorQEAgLTIzMiw3ICsyMzIsNyBAQCBfX2xpYmNfdHNkX2RlZmluZSAoZXh0ZXJuLCBfX2xvY2FsZV90LCBMT0NBTEUpCisgICAgdW51c2VkLiAgV2UgY2FuIG1hbmFnZSB0aGlzIHBsYXlpbmcgc29tZSB0cmlja3Mgd2l0aCB3ZWFrIHJlZmVyZW5jZXMuCisgICAgQnV0IHdpdGggdGhyZWFkLWxvY2FsIGxvY2FsZSBzZXR0aW5ncywgaXQgYmVjb21lcyBxdWl0ZSB1bmdhaW5seSB1bmxlc3MKKyAgICB3ZSBjYW4gdXNlIF9fdGhyZWFkIHZhcmlhYmxlcy4gIFNvIG9ubHkgaW4gdGhhdCBjYXNlIGRvIHdlIGF0dGVtcHQgdGhpcy4gICovCistI2lmbmRlZiBTSEFSRUQKKysjaWYgIWRlZmluZWQgU0hBUkVEICYmICFkZWZpbmVkIElOX0dMSUJDX0xPQ0FMRURFRgorICMgaW5jbHVkZSA8dGxzLmg+CisgIyBkZWZpbmUgTkxfQ1VSUkVOVF9JTkRJUkVDVAkxCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2NoYXJtYXAtZGlyLmMgYi9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworaW5kZXggY2Y3YWRlYS4uZWYzYjgxMSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9jaGFybWFwLWRpci5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvY2hhcm1hcC1kaXIuYworQEAgLTE5LDcgKzE5LDkgQEAKKyAjaW5jbHVkZSA8ZXJyb3IuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8bGliaW50bC5oPgorKyNpZm5kZWYgTk9fVU5DT01QUkVTUworICNpbmNsdWRlIDxzcGF3bi5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitAQCAtMTU2LDYgKzE1OCw3IEBAIGNoYXJtYXBfY2xvc2VkaXIgKENIQVJNQVBfRElSICpjZGlyKQorICAgcmV0dXJuIGNsb3NlZGlyIChkaXIpOworIH0KKyAKKysjaWZuZGVmIE5PX1VOQ09NUFJFU1MKKyAvKiBDcmVhdGVzIGEgc3VicHJvY2VzcyBkZWNvbXByZXNzaW5nIHRoZSBnaXZlbiBwYXRobmFtZSwgYW5kIHJldHVybnMKKyAgICBhIHN0cmVhbSByZWFkaW5nIGl0cyBvdXRwdXQgKHRoZSBkZWNvbXByZXNzZWQgZGF0YSkuICAqLworIHN0YXRpYworQEAgLTIwNCw2ICsyMDcsNyBAQCBmb3Blbl91bmNvbXByZXNzZWQgKGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjb25zdCBjaGFyICpjb21wcmVzc29yKQorICAgICB9CisgICByZXR1cm4gTlVMTDsKKyB9CisrI2VuZGlmCisgCisgLyogT3BlbnMgYSBjaGFybWFwIGZvciByZWFkaW5nLCBnaXZlbiBpdHMgbmFtZSAobm90IGFuIGFsaWFzIG5hbWUpLiAgKi8KKyBGSUxFICoKK0BAIC0yMjYsNiArMjMwLDcgQEAgY2hhcm1hcF9vcGVuIChjb25zdCBjaGFyICpkaXJlY3RvcnksIGNvbnN0IGNoYXIgKm5hbWUpCisgICBpZiAoc3RyZWFtICE9IE5VTEwpCisgICAgIHJldHVybiBzdHJlYW07CisgCisrI2lmbmRlZiBOT19VTkNPTVBSRVNTCisgICBtZW1jcHkgKHAsICIuZ3oiLCA0KTsKKyAgIHN0cmVhbSA9IGZvcGVuX3VuY29tcHJlc3NlZCAocGF0aG5hbWUsICJnemlwIik7CisgICBpZiAoc3RyZWFtICE9IE5VTEwpCitAQCAtMjM1LDYgKzI0MCw3IEBAIGNoYXJtYXBfb3BlbiAoY29uc3QgY2hhciAqZGlyZWN0b3J5LCBjb25zdCBjaGFyICpuYW1lKQorICAgc3RyZWFtID0gZm9wZW5fdW5jb21wcmVzc2VkIChwYXRobmFtZSwgImJ6aXAyIik7CisgICBpZiAoc3RyZWFtICE9IE5VTEwpCisgICAgIHJldHVybiBzdHJlYW07CisrI2VuZGlmCisgCisgICByZXR1cm4gTlVMTDsKKyB9CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLWNvbGxhdGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jb2xsYXRlLmMKK2luZGV4IGEzOWE5NGYuLjE2ZTkwMzkgMTAwNjQ0CistLS0gYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtY29sbGF0ZS5jCitAQCAtMzUxLDcgKzM1MSw3IEBAIG5ld19lbGVtZW50IChzdHJ1Y3QgbG9jYWxlX2NvbGxhdGVfdCAqY29sbGF0ZSwgY29uc3QgY2hhciAqbWJzLCBzaXplX3QgbWJzbGVuLAorICAgICB9CisgICBpZiAod2NzICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBzaXplX3QgbndjcyA9IHdjc2xlbiAoKHdjaGFyX3QgKikgd2NzKTsKKysgICAgICBzaXplX3QgbndjcyA9IHdjc2xlbl91aW50MzIgKHdjcyk7CisgICAgICAgdWludDMyX3QgemVybyA9IDA7CisgICAgICAgLyogSGFuZGxlIDxVMDAwMD4gYXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgICBpZiAobndjcyA9PSAwKQorQEAgLTE3NzcsOCArMTc3Nyw3IEBAIHN5bWJvbCBgJXMnIGhhcyB0aGUgc2FtZSBlbmNvZGluZyBhcyIpLCAoKmVwdHIpLT5uYW1lKTsKKyAKKyAJICAgICAgaWYgKCgqZXB0ciktPm53Y3MgPT0gcnVucC0+bndjcykKKyAJCXsKKy0JCSAgaW50IGMgPSB3bWVtY21wICgod2NoYXJfdCAqKSAoKmVwdHIpLT53Y3MsCistCQkJCSAgICh3Y2hhcl90ICopIHJ1bnAtPndjcywgcnVucC0+bndjcyk7CisrCQkgIGludCBjID0gd21lbWNtcF91aW50MzIgKCgqZXB0ciktPndjcywgcnVucC0+d2NzLCBydW5wLT5ud2NzKTsKKyAKKyAJCSAgaWYgKGMgPT0gMCkKKyAJCSAgICB7CitAQCAtMjAxMSw5ICsyMDEwLDkgQEAgYWRkX3RvX3RhYmxld2MgKHVpbnQzMl90IGNoLCBzdHJ1Y3QgZWxlbWVudF90ICpydW5wKQorIAkgICAgIG9uZSBjb25zZWN1dGl2ZSBlbnRyeS4gICovCisgCSAgaWYgKHJ1bnAtPndjbmV4dCAhPSBOVUxMCisgCSAgICAgICYmIHJ1bnAtPm53Y3MgPT0gcnVucC0+d2NuZXh0LT5ud2NzCistCSAgICAgICYmIHdtZW1jbXAgKCh3Y2hhcl90ICopIHJ1bnAtPndjcywKKy0JCQkgICh3Y2hhcl90ICopcnVucC0+d2NuZXh0LT53Y3MsCistCQkJICBydW5wLT5ud2NzIC0gMSkgPT0gMAorKwkgICAgICAmJiB3bWVtY21wX3VpbnQzMiAocnVucC0+d2NzLAorKwkJCQkgcnVucC0+d2NuZXh0LT53Y3MsCisrCQkJCSBydW5wLT5ud2NzIC0gMSkgPT0gMAorIAkgICAgICAmJiAocnVucC0+d2NzW3J1bnAtPm53Y3MgLSAxXQorIAkJICA9PSBydW5wLT53Y25leHQtPndjc1tydW5wLT5ud2NzIC0gMV0gKyAxKSkKKyAJICAgIHsKK0BAIC0yMDM3LDkgKzIwMzYsOSBAQCBhZGRfdG9fdGFibGV3YyAodWludDMyX3QgY2gsIHN0cnVjdCBlbGVtZW50X3QgKnJ1bnApCisgCQlydW5wID0gcnVucC0+d2NuZXh0OworIAkgICAgICB3aGlsZSAocnVucC0+d2NuZXh0ICE9IE5VTEwKKyAJCSAgICAgJiYgcnVucC0+bndjcyA9PSBydW5wLT53Y25leHQtPm53Y3MKKy0JCSAgICAgJiYgd21lbWNtcCAoKHdjaGFyX3QgKikgcnVucC0+d2NzLAorLQkJCQkgKHdjaGFyX3QgKilydW5wLT53Y25leHQtPndjcywKKy0JCQkJIHJ1bnAtPm53Y3MgLSAxKSA9PSAwCisrCQkgICAgICYmIHdtZW1jbXBfdWludDMyIChydW5wLT53Y3MsCisrCQkJCQlydW5wLT53Y25leHQtPndjcywKKysJCQkJCXJ1bnAtPm53Y3MgLSAxKSA9PSAwCisgCQkgICAgICYmIChydW5wLT53Y3NbcnVucC0+bndjcyAtIDFdCisgCQkJID09IHJ1bnAtPndjbmV4dC0+d2NzW3J1bnAtPm53Y3MgLSAxXSArIDEpKTsKKyAKK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbGQtY3R5cGUuYyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCitpbmRleCAzZjQ2NGVmLi5iN2I2YjUxIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLWN0eXBlLmMKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sZC1jdHlwZS5jCitAQCAtOTI2LDcgKzkyNiw3IEBAIGN0eXBlX291dHB1dCAoc3RydWN0IGxvY2FsZWRlZl90ICpsb2NhbGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgICBhbGxvY2F0ZV9hcnJheXMgKGN0eXBlLCBjaGFybWFwLCBjdHlwZS0+cmVwZXJ0b2lyZSk7CisgCisgICBkZWZhdWx0X21pc3NpbmdfbGVuID0gKGN0eXBlLT5kZWZhdWx0X21pc3NpbmcKKy0JCQkgPyB3Y3NsZW4gKCh3Y2hhcl90ICopIGN0eXBlLT5kZWZhdWx0X21pc3NpbmcpCisrCQkJID8gd2NzbGVuX3VpbnQzMiAoY3R5cGUtPmRlZmF1bHRfbWlzc2luZykKKyAJCQkgOiAwKTsKKyAKKyAgIGluaXRfbG9jYWxlX2RhdGEgKCZmaWxlLCBuZWxlbXMpOworQEAgLTE5MzcsNyArMTkzNyw3IEBAIHJlYWRfdHJhbnNsaXRfZW50cnkgKHN0cnVjdCBsaW5lcmVhZGVyICpsZGZpbGUsIHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsCisgCSAgICBpZ25vcmUgPSAxOworIAkgIGVsc2UKKyAJICAgIC8qIFRoaXMgdmFsdWUgaXMgdXNhYmxlLiAgKi8KKy0JICAgIG9ic3RhY2tfZ3JvdyAob2IsIHRvX3dzdHIsIHdjc2xlbiAoKHdjaGFyX3QgKikgdG9fd3N0cikgKiA0KTsKKysJICAgIG9ic3RhY2tfZ3JvdyAob2IsIHRvX3dzdHIsIHdjc2xlbl91aW50MzIgKHRvX3dzdHIpICogNCk7CisgCisgCSAgZmlyc3QgPSAwOworIAl9CitAQCAtMjQ3MSw4ICsyNDcxLDggQEAgd2l0aCBjaGFyYWN0ZXIgY29kZSByYW5nZSB2YWx1ZXMgb25lIG11c3QgdXNlIHRoZSBhYnNvbHV0ZSBlbGxpcHNpcyBgLi4uJyIpKTsKKyAJICAgIH0KKyAKKyAJaGFuZGxlX3Rva19kaWdpdDoKKy0JICBjbGFzc19iaXQgPSBfSVN3ZGlnaXQ7CistCSAgY2xhc3MyNTZfYml0ID0gX0lTZGlnaXQ7CisrCSAgY2xhc3NfYml0ID0gQklUdyAodG9rX2RpZ2l0KTsKKysJICBjbGFzczI1Nl9iaXQgPSBCSVQgKHRva19kaWdpdCk7CisgCSAgaGFuZGxlX2RpZ2l0cyA9IDE7CisgCSAgZ290byByZWFkX2NoYXJjbGFzczsKKyAKK0BAIC0zOTI5LDggKzM5MjksNyBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCisgCSAgd2hpbGUgKGlkeCA8IG51bWJlcikKKyAJICAgIHsKKy0JICAgICAgaW50IHJlcyA9IHdjc2NtcCAoKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2lkeF0tPmZyb20sCistCQkJCShjb25zdCB3Y2hhcl90ICopIHJ1bnAtPmZyb20pOworKwkgICAgICBpbnQgcmVzID0gd2NzY21wX3VpbnQzMiAoc29ydGVkW2lkeF0tPmZyb20sIHJ1bnAtPmZyb20pOworIAkgICAgICBpZiAocmVzID09IDApCisgCQl7CisgCQkgIHJlcGxhY2UgPSAxOworQEAgLTM5NjcsMTEgKzM5NjYsMTEgQEAgYWxsb2NhdGVfYXJyYXlzIChzdHJ1Y3QgbG9jYWxlX2N0eXBlX3QgKmN0eXBlLCBjb25zdCBzdHJ1Y3QgY2hhcm1hcF90ICpjaGFybWFwLAorICAgICAgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IG51bWJlcjsgKytjbnQpCisgCXsKKyAJICBzdHJ1Y3QgdHJhbnNsaXRfdG9fdCAqc3J1bnA7CistCSAgZnJvbV9sZW4gKz0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworKwkgIGZyb21fbGVuICs9IHdjc2xlbl91aW50MzIgKHNvcnRlZFtjbnRdLT5mcm9tKSArIDE7CisgCSAgc3J1bnAgPSBzb3J0ZWRbY250XS0+dG87CisgCSAgd2hpbGUgKHNydW5wICE9IE5VTEwpCisgCSAgICB7CistCSAgICAgIHRvX2xlbiArPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIpICsgMTsKKysJICAgICAgdG9fbGVuICs9IHdjc2xlbl91aW50MzIgKHNydW5wLT5zdHIpICsgMTsKKyAJICAgICAgc3J1bnAgPSBzcnVucC0+bmV4dDsKKyAJICAgIH0KKyAJICAvKiBQbHVzIG9uZSBmb3IgdGhlIGV4dHJhIE5VTCBjaGFyYWN0ZXIgbWFya2luZyB0aGUgZW5kIG9mCitAQCAtMzk5NSwxOCArMzk5NCwxOCBAQCBhbGxvY2F0ZV9hcnJheXMgKHN0cnVjdCBsb2NhbGVfY3R5cGVfdCAqY3R5cGUsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCSAgY3R5cGUtPnRyYW5zbGl0X2Zyb21faWR4W2NudF0gPSBmcm9tX2xlbjsKKyAJICBjdHlwZS0+dHJhbnNsaXRfdG9faWR4W2NudF0gPSB0b19sZW47CisgCistCSAgbGVuID0gd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzb3J0ZWRbY250XS0+ZnJvbSkgKyAxOworLQkgIHdtZW1jcHkgKCh3Y2hhcl90ICopICZjdHlwZS0+dHJhbnNsaXRfZnJvbV90YmxbZnJvbV9sZW5dLAorLQkJICAgKGNvbnN0IHdjaGFyX3QgKikgc29ydGVkW2NudF0tPmZyb20sIGxlbik7CisrCSAgbGVuID0gd2NzbGVuX3VpbnQzMiAoc29ydGVkW2NudF0tPmZyb20pICsgMTsKKysJICB3bWVtY3B5X3VpbnQzMiAoJmN0eXBlLT50cmFuc2xpdF9mcm9tX3RibFtmcm9tX2xlbl0sCisrCQkJICBzb3J0ZWRbY250XS0+ZnJvbSwgbGVuKTsKKyAJICBmcm9tX2xlbiArPSBsZW47CisgCisgCSAgY3R5cGUtPnRyYW5zbGl0X3RvX2lkeFtjbnRdID0gdG9fbGVuOworIAkgIHNydW5wID0gc29ydGVkW2NudF0tPnRvOworIAkgIHdoaWxlIChzcnVucCAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICBsZW4gPSB3Y3NsZW4gKChjb25zdCB3Y2hhcl90ICopIHNydW5wLT5zdHIpICsgMTsKKy0JICAgICAgd21lbWNweSAoKHdjaGFyX3QgKikgJmN0eXBlLT50cmFuc2xpdF90b190YmxbdG9fbGVuXSwKKy0JCSAgICAgICAoY29uc3Qgd2NoYXJfdCAqKSBzcnVucC0+c3RyLCBsZW4pOworKwkgICAgICBsZW4gPSB3Y3NsZW5fdWludDMyIChzcnVucC0+c3RyKSArIDE7CisrCSAgICAgIHdtZW1jcHlfdWludDMyICgmY3R5cGUtPnRyYW5zbGl0X3RvX3RibFt0b19sZW5dLAorKwkJCSAgICAgIHNydW5wLT5zdHIsIGxlbik7CisgCSAgICAgIHRvX2xlbiArPSBsZW47CisgCSAgICAgIHNydW5wID0gc3J1bnAtPm5leHQ7CisgCSAgICB9CitkaWZmIC0tZ2l0IGEvbG9jYWxlL3Byb2dyYW1zL2xkLW1lc3NhZ2VzLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYworaW5kZXggZWMxYTgwYi4uNzM2ZWVkOCAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sZC1tZXNzYWdlcy5jCisrKysgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtbWVzc2FnZXMuYworQEAgLTI1LDYgKzI1LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0ZGludC5oPgorICNpbmNsdWRlIDxzeXMvdWlvLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorIAorQEAgLTEyNCw2ICsxMjUsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFAKKyAgICAgICBpbnQgcmVzdWx0OworICAgICAgIHJlZ2V4X3QgcmU7CisgCitAQCAtMTQwLDYgKzE0Miw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAJfQorICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSAwKQorIAlyZWdmcmVlICgmcmUpOworKyNlbmRpZgorICAgICB9CisgCisgICBpZiAobWVzc2FnZXMtPm5vZXhwciA9PSBOVUxMKQorQEAgLTE1OCw2ICsxNjEsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfTUVTU0FHRVMiKSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFAKKyAgICAgICBpbnQgcmVzdWx0OworICAgICAgIHJlZ2V4X3QgcmU7CisgCitAQCAtMTc0LDYgKzE3OCw3IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19NRVNTQUdFUyIpKTsKKyAJfQorICAgICAgIGVsc2UgaWYgKHJlc3VsdCAhPSAwKQorIAlyZWdmcmVlICgmcmUpOworKyNlbmRpZgorICAgICB9CisgfQorIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sZC10aW1lLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGQtdGltZS5jCitpbmRleCBkYjQ5MGM2Li43NWRjNTA1IDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xkLXRpbWUuYworQEAgLTIxNSw4ICsyMTUsMTAgQEAgTm8gZGVmaW5pdGlvbiBmb3IgJXMgY2F0ZWdvcnkgZm91bmQiKSwgIkxDX1RJTUUiKSk7CisgCX0KKyAgICAgICBlbHNlCisgCXsKKysJICBzdGF0aWMgY29uc3QgdWludDMyX3Qgd3RfZm10X2FtcG1bXQorKwkgICAgPSB7ICclJywnSScsJzonLCclJywnTScsJzonLCclJywnUycsJyAnLCclJywncCcsMCB9OworIAkgIHRpbWUtPnRfZm10X2FtcG0gPSAiJUk6JU06JVMgJXAiOworLQkgIHRpbWUtPnd0X2ZtdF9hbXBtID0gKGNvbnN0IHVpbnQzMl90ICopIEwiJUk6JU06JVMgJXAiOworKwkgIHRpbWUtPnd0X2ZtdF9hbXBtID0gd3RfZm10X2FtcG07CisgCX0KKyAgICAgfQorIAorQEAgLTIyNiw3ICsyMjgsNyBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAgICAgICBjb25zdCBpbnQgZGF5c19wZXJfbW9udGhbMTJdID0geyAzMSwgMjksIDMxLCAzMCwgMzEsIDMwLAorIAkJCQkgICAgICAgMzEsIDMxLCAzMCwgMzEgLDMwLCAzMSB9OworICAgICAgIHNpemVfdCBpZHg7CistICAgICAgd2NoYXJfdCAqd3N0cjsKKysgICAgICB1aW50MzJfdCAqd3N0cjsKKyAKKyAgICAgICB0aW1lLT5lcmFfZW50cmllcyA9CisgCShzdHJ1Y3QgZXJhX2RhdGEgKikgeG1hbGxvYyAodGltZS0+bnVtX2VyYQorQEAgLTQ2NCwxOCArNDY2LDE4IEBAIE5vIGRlZmluaXRpb24gZm9yICVzIGNhdGVnb3J5IGZvdW5kIiksICJMQ19USU1FIikpOworIAkgICAgfQorIAorIAkgIC8qIE5vdyBnZW5lcmF0ZSB0aGUgd2lkZSBjaGFyYWN0ZXIgbmFtZSBhbmQgZm9ybWF0LiAgKi8KKy0JICB3c3RyID0gd2NzY2hyICgod2NoYXJfdCAqKSB0aW1lLT53ZXJhW2lkeF0sIEwnOicpOy8qIGVuZCBkaXJlY3Rpb24gKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIG9mZnNldCAqLworLQkgIHdzdHIgPSB3c3RyID8gd2NzY2hyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOwkvKiBlbmQgc3RhcnQgKi8KKy0JICB3c3RyID0gd3N0ciA/IHdjc2NociAod3N0ciArIDEsIEwnOicpIDogTlVMTDsJLyogZW5kIGVuZCAqLworKwkgIHdzdHIgPSB3Y3NjaHJfdWludDMyICh0aW1lLT53ZXJhW2lkeF0sIEwnOicpOyAvKiBlbmQgZGlyZWN0aW9uICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgb2Zmc2V0ICovCisrCSAgd3N0ciA9IHdzdHIgPyB3Y3NjaHJfdWludDMyICh3c3RyICsgMSwgTCc6JykgOiBOVUxMOyAvKiBlbmQgc3RhcnQgKi8KKysJICB3c3RyID0gd3N0ciA/IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKSA6IE5VTEw7IC8qIGVuZCBlbmQgKi8KKyAJICBpZiAod3N0ciAhPSBOVUxMKQorIAkgICAgeworLQkgICAgICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLnduYW1lID0gKHVpbnQzMl90ICopIHdzdHIgKyAxOworLQkgICAgICB3c3RyID0gd2NzY2hyICh3c3RyICsgMSwgTCc6Jyk7CS8qIGVuZCBuYW1lICovCisrCSAgICAgIHRpbWUtPmVyYV9lbnRyaWVzW2lkeF0ud25hbWUgPSB3c3RyICsgMTsKKysJICAgICAgd3N0ciA9IHdjc2Nocl91aW50MzIgKHdzdHIgKyAxLCBMJzonKTsgLyogZW5kIG5hbWUgKi8KKyAJICAgICAgaWYgKHdzdHIgIT0gTlVMTCkKKyAJCXsKKyAJCSAgKndzdHIgPSBMJ1wwJzsKKy0JCSAgdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53Zm9ybWF0ID0gKHVpbnQzMl90ICopIHdzdHIgKyAxOworKwkJICB0aW1lLT5lcmFfZW50cmllc1tpZHhdLndmb3JtYXQgPSB3c3RyICsgMTsKKyAJCX0KKyAJICAgICAgZWxzZQorIAkJdGltZS0+ZXJhX2VudHJpZXNbaWR4XS53bmFtZSA9CitAQCAtNTMwLDcgKzUzMiwxNiBAQCBObyBkZWZpbml0aW9uIGZvciAlcyBjYXRlZ29yeSBmb3VuZCIpLCAiTENfVElNRSIpKTsKKyAgIGlmICh0aW1lLT5kYXRlX2ZtdCA9PSBOVUxMKQorICAgICB0aW1lLT5kYXRlX2ZtdCA9ICIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSI7CisgICBpZiAodGltZS0+d2RhdGVfZm10ID09IE5VTEwpCistICAgIHRpbWUtPndkYXRlX2ZtdCA9IChjb25zdCB1aW50MzJfdCAqKSBMIiVhICViICVlICVIOiVNOiVTICVaICVZIjsKKysgICAgeworKyAgICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCB3ZGF0ZV9mbXRbXSA9CisrCXsgJyUnLCdhJywnICcsCisrCSAgJyUnLCdiJywnICcsCisrCSAgJyUnLCdlJywnICcsCisrCSAgJyUnLCdIJywnOicsJyUnLCdNJywnOicsJyUnLCdTJywnICcsCisrCSAgJyUnLCdaJywnICcsCisrCSAgJyUnLCdZJywwIH07CisrICAgICAgdGltZS0+d2RhdGVfZm10ID0gd2RhdGVfZm10OworKyAgICB9CisgfQorIAorIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9saW5lcmVhZGVyLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbGluZXJlYWRlci5jCitpbmRleCAyZTA1MTMwLi42NTNiNjhjIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xpbmVyZWFkZXIuYworQEAgLTU5NSw3ICs1OTUsNyBAQCBnZXRfc3RyaW5nIChzdHJ1Y3QgbGluZXJlYWRlciAqbHIsIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgeworICAgaW50IHJldHVybl93aWRlc3RyID0gbHItPnJldHVybl93aWRlc3RyOworICAgY2hhciAqYnVmOworLSAgd2NoYXJfdCAqYnVmMiA9IE5VTEw7CisrICB1aW50MzJfdCAqYnVmMiA9IE5VTEw7CisgICBzaXplX3QgYnVmYWN0OworICAgc2l6ZV90IGJ1Zm1heCA9IDU2OworIAorZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworaW5kZXggMmEwZjJhYS4uNTgzZDIzMyAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NhbGVkZWYuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2FsZWRlZi5jCitAQCAtMTE0LDYgKzExNCw3IEBAIHZvaWQgKCphcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKSAoRklMRSAqLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqKSA9IHByaW50X3ZlcnNpb247CisgI2RlZmluZSBPUFRfTElTVF9BUkNISVZFIDMwOQorICNkZWZpbmUgT1BUX0xJVFRMRV9FTkRJQU4gNDAwCisgI2RlZmluZSBPUFRfQklHX0VORElBTiA0MDEKKysjZGVmaW5lIE9QVF9VSU5UMzJfQUxJR04gNDAyCisgCisgLyogRGVmaW5pdGlvbnMgb2YgYXJndW1lbnRzIGZvciBhcmdwIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPQorQEAgLTE1MCw2ICsxNTEsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9CisgICAgIE5fKCJHZW5lcmF0ZSBsaXR0bGUtZW5kaWFuIG91dHB1dCIpIH0sCisgICB7ICJiaWctZW5kaWFuIiwgT1BUX0JJR19FTkRJQU4sIE5VTEwsIDAsCisgICAgIE5fKCJHZW5lcmF0ZSBiaWctZW5kaWFuIG91dHB1dCIpIH0sCisrICB7ICJ1aW50MzItYWxpZ24iLCBPUFRfVUlOVDMyX0FMSUdOLCAiQUxJR05NRU5UIiwgMCwKKysgICAgTl8oIlNldCB0aGUgdGFyZ2V0J3MgdWludDMyX3QgYWxpZ25tZW50IGluIGJ5dGVzIChkZWZhdWx0IDQpIikgfSwKKyAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisgfTsKKyAKK0BAIC0yMzksMTIgKzI0MiwxNCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgY3R5cGUgbG9jYWxlLiAgKFAxMDAzLjIgNC4zNS41LjIpICAqLworICAgc2V0bG9jYWxlIChMQ19DVFlQRSwgIlBPU0lYIik7CisgCisrI2lmbmRlZiBOT19TWVNDT05GCisgICAvKiBMb29rIHdoZXRoZXIgdGhlIHN5c3RlbSByZWFsbHkgYWxsb3dzIGxvY2FsZSBkZWZpbml0aW9ucy4gIFBPU0lYCisgICAgICBkZWZpbmVzIGVycm9yIGNvZGUgMyBmb3IgdGhpcyBzaXR1YXRpb24gc28gSSB0aGluayBpdCBtdXN0IGJlCisgICAgICBhIGZhdGFsIGVycm9yIChzZWUgUDEwMDMuMiA0LjM1LjgpLiAgKi8KKyAgIGlmIChzeXNjb25mIChfU0NfMl9MT0NBTEVERUYpIDwgMCkKKyAgICAgV0lUSF9DVVJfTE9DQUxFIChlcnJvciAoMywgMCwgXygiXAorIEZBVEFMOiBzeXN0ZW0gZG9lcyBub3QgZGVmaW5lIGBfUE9TSVgyX0xPQ0FMRURFRiciKSkpOworKyNlbmRpZgorIAorICAgLyogUHJvY2VzcyBjaGFybWFwIGZpbGUuICAqLworICAgY2hhcm1hcCA9IGNoYXJtYXBfcmVhZCAoY2hhcm1hcF9maWxlLCB2ZXJib3NlLCAxLCBiZV9xdWlldCwgMSk7CitAQCAtMzM4LDYgKzM0Myw5IEBAIHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisgICAgIGNhc2UgT1BUX0JJR19FTkRJQU46CisgICAgICAgc2V0X2JpZ19lbmRpYW4gKHRydWUpOworICAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVF9VSU5UMzJfQUxJR046CisrICAgICAgdWludDMyX2FsaWduX21hc2sgPSBzdHJ0b2wgKGFyZywgTlVMTCwgMCkgLSAxOworKyAgICAgIGJyZWFrOworICAgICBjYXNlICdjJzoKKyAgICAgICBmb3JjZV9vdXRwdXQgPSAxOworICAgICAgIGJyZWFrOworZGlmZiAtLWdpdCBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmMgYi9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5jCitpbmRleCAzM2RhNTJlLi5mNzkwYzRjIDEwMDY0NAorLS0tIGEvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworKysrIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuYworQEAgLTU0NCw2ICs1NDQsOSBAQCBjb21wYXJlX2ZpbGVzIChjb25zdCBjaGFyICpmaWxlbmFtZTEsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwgc2l6ZV90IHNpemUsCisgICAgbWFjaGluZSBydW5uaW5nIGxvY2FsZWRlZi4gICovCisgYm9vbCBzd2FwX2VuZGlhbm5lc3NfcDsKKyAKKysvKiBUaGUgdGFyZ2V0J3MgdmFsdWUgb2YgX19hbGlnbl9fKHVpbnQzMl90KSAtIDEuICAqLworK3Vuc2lnbmVkIGludCB1aW50MzJfYWxpZ25fbWFzayA9IDM7CisrCisgLyogV2hlbiBjYWxsZWQgb3V0c2lkZSBhIHN0YXJ0X2xvY2FsZV9zdHJ1Y3R1cmUvZW5kX2xvY2FsZV9zdHJ1Y3R1cmUKKyAgICBvciBzdGFydF9sb2NhbGVfcHJlbHVkZS9lbmRfbG9jYWxlX3ByZWx1ZGUgYmxvY2ssIHJlY29yZCB0aGF0IHRoZQorICAgIG5leHQgYnl0ZSBpbiBGSUxFJ3Mgb2JzdGFjayB3aWxsIGJlIHRoZSBmaXJzdCBieXRlIG9mIGEgbmV3IGVsZW1lbnQuCitAQCAtNjIxLDcgKzYyNCw3IEBAIGFkZF9sb2NhbGVfc3RyaW5nIChzdHJ1Y3QgbG9jYWxlX2ZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZykKKyB2b2lkCisgYWRkX2xvY2FsZV93c3RyaW5nIChzdHJ1Y3QgbG9jYWxlX2ZpbGUgKmZpbGUsIGNvbnN0IHVpbnQzMl90ICpzdHJpbmcpCisgeworLSAgYWRkX2xvY2FsZV91aW50MzJfYXJyYXkgKGZpbGUsIHN0cmluZywgd2NzbGVuICgoY29uc3Qgd2NoYXJfdCAqKSBzdHJpbmcpICsgMSk7CisrICBhZGRfbG9jYWxlX3VpbnQzMl9hcnJheSAoZmlsZSwgc3RyaW5nLCB3Y3NsZW5fdWludDMyIChzdHJpbmcpICsgMSk7CisgfQorIAorIC8qIFJlY29yZCB0aGF0IEZJTEUncyBuZXh0IGVsZW1lbnQgaXMgdGhlIDMyLWJpdCBpbnRlZ2VyIFZBTFVFLiAgKi8KK2RpZmYgLS1naXQgYS9sb2NhbGUvcHJvZ3JhbXMvbG9jZmlsZS5oIGIvbG9jYWxlL3Byb2dyYW1zL2xvY2ZpbGUuaAoraW5kZXggNmZjNDQxYi4uMTE4YjE3MSAxMDA2NDQKKy0tLSBhL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKKysrKyBiL2xvY2FsZS9wcm9ncmFtcy9sb2NmaWxlLmgKK0BAIC03MSw2ICs3MSw4IEBAIGV4dGVybiB2b2lkIHdyaXRlX2FsbF9jYXRlZ29yaWVzIChzdHJ1Y3QgbG9jYWxlZGVmX3QgKmRlZmluaXRpb25zLAorIAorIGV4dGVybiBib29sIHN3YXBfZW5kaWFubmVzc19wOworIAorK2V4dGVybiB1bnNpZ25lZCBpbnQgdWludDMyX2FsaWduX21hc2s7CisrCisgLyogQ2hhbmdlIHRoZSBvdXRwdXQgdG8gYmUgYmlnLWVuZGlhbiBpZiBCSUdfRU5ESUFOIGlzIHRydWUgYW5kCisgICAgbGl0dGxlLWVuZGlhbiBvdGhlcndpc2UuICAqLworIHN0YXRpYyBpbmxpbmUgdm9pZAorQEAgLTg5LDcgKzkxLDggQEAgbWF5YmVfc3dhcF91aW50MzIgKHVpbnQzMl90IHZhbHVlKQorIH0KKyAKKyAvKiBMaWtld2lzZSwgYnV0IG11bmdlIGFuIGFycmF5IG9mIE4gdWludDMyX3RzIHN0YXJ0aW5nIGF0IEFSUkFZLiAgKi8KKy1zdGF0aWMgaW5saW5lIHZvaWQKKytzdGF0aWMgdm9pZAorK19fYXR0cmlidXRlX18gKCh1bnVzZWQpKQorIG1heWJlX3N3YXBfdWludDMyX2FycmF5ICh1aW50MzJfdCAqYXJyYXksIHNpemVfdCBuKQorIHsKKyAgIGlmIChzd2FwX2VuZGlhbm5lc3NfcCkKK0BAIC05OSw3ICsxMDIsOCBAQCBtYXliZV9zd2FwX3VpbnQzMl9hcnJheSAodWludDMyX3QgKmFycmF5LCBzaXplX3QgbikKKyAKKyAvKiBMaWtlIG1heWJlX3N3YXBfdWludDMyX2FycmF5LCBidXQgdGhlIGFycmF5IG9mIE4gZWxlbWVudHMgaXMgYXQKKyAgICB0aGUgZW5kIG9mIE9CU1RBQ0sncyBjdXJyZW50IG9iamVjdC4gICovCistc3RhdGljIGlubGluZSB2b2lkCisrc3RhdGljIHZvaWQKKytfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKyBtYXliZV9zd2FwX3VpbnQzMl9vYnN0YWNrIChzdHJ1Y3Qgb2JzdGFjayAqb2JzdGFjaywgc2l6ZV90IG4pCisgeworICAgbWF5YmVfc3dhcF91aW50MzJfYXJyYXkgKCh1aW50MzJfdCAqKSBvYnN0YWNrX25leHRfZnJlZSAob2JzdGFjaykgLSBuLCBuKTsKK0BAIC0yNzYsNCArMjgwLDU1IEBAIGV4dGVybiB2b2lkIGlkZW50aWZpY2F0aW9uX291dHB1dCAoc3RydWN0IGxvY2FsZWRlZl90ICpsb2NhbGUsCisgCQkJCSAgIGNvbnN0IHN0cnVjdCBjaGFybWFwX3QgKmNoYXJtYXAsCisgCQkJCSAgIGNvbnN0IGNoYXIgKm91dHB1dF9wYXRoKTsKKyAKKytzdGF0aWMgc2l6ZV90IHdjc2xlbl91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzdHIpIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKytzdGF0aWMgdWludDMyX3QgKiB3bWVtY3B5X3VpbnQzMiAodWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIHVpbnQzMl90ICogd2NzY2hyX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMsIHVpbnQzMl90IGNoKSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7Cisrc3RhdGljIGludCB3Y3NjbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworK3N0YXRpYyBpbnQgd21lbWNtcF91aW50MzIgKGNvbnN0IHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKworK3N0YXRpYyBzaXplX3QKKyt3Y3NsZW5fdWludDMyIChjb25zdCB1aW50MzJfdCAqc3RyKQorK3sKKysgIHNpemVfdCBsZW4gPSAwOworKyAgd2hpbGUgKHN0cltsZW5dICE9IDApCisrICAgIGxlbisrOworKyAgcmV0dXJuIGxlbjsKKyt9CisrCisrc3RhdGljICBpbnQKKyt3bWVtY21wX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMxLCBjb25zdCB1aW50MzJfdCAqczIsIHNpemVfdCBuKQorK3sKKysgIHdoaWxlIChuLS0gIT0gMCkKKysgICAgeworKyAgICAgIGludCBkaWZmID0gKnMxKysgLSAqczIrKzsKKysgICAgICBpZiAoZGlmZiAhPSAwKQorKwlyZXR1cm4gZGlmZjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKyt3Y3NjbXBfdWludDMyIChjb25zdCB1aW50MzJfdCAqczEsIGNvbnN0IHVpbnQzMl90ICpzMikKKyt7CisrICB3aGlsZSAoKnMxICE9IDAgJiYgKnMxID09ICpzMikKKysgICAgczErKywgczIrKzsKKysgIHJldHVybiAqczEgLSAqczI7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCAqCisrd21lbWNweV91aW50MzIgKHVpbnQzMl90ICpzMSwgY29uc3QgdWludDMyX3QgKnMyLCBzaXplX3QgbikKKyt7CisrICByZXR1cm4gbWVtY3B5IChzMSwgczIsIG4gKiBzaXplb2YgKHVpbnQzMl90KSk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCAqCisrd2NzY2hyX3VpbnQzMiAoY29uc3QgdWludDMyX3QgKnMsIHVpbnQzMl90IGNoKQorK3sKKysgIGRvCisrICAgIGlmICgqcyA9PSBjaCkKKysgICAgICByZXR1cm4gKHVpbnQzMl90ICopIHM7CisrICB3aGlsZSAoKnMrKyAhPSAwKTsKKysgIHJldHVybiAwOworK30KKysKKyAjZW5kaWYgLyogbG9jZmlsZS5oICovCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3NldGxvY2FsZS5jIGIvbG9jYWxlL3NldGxvY2FsZS5jCitpbmRleCBmYTljYjNhLi44ZWVlMjg0IDEwMDY0NAorLS0tIGEvbG9jYWxlL3NldGxvY2FsZS5jCisrKysgYi9sb2NhbGUvc2V0bG9jYWxlLmMKK0BAIC02NCwzNiArNjQsNiBAQCBzdGF0aWMgY2hhciAqY29uc3QgX25sX2N1cnJlbnRfdXNlZFtdID0KKyAjZW5kaWYKKyAKKyAKKy0vKiBEZWZpbmUgYW4gYXJyYXkgb2YgY2F0ZWdvcnkgbmFtZXMgKGFsc28gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzKS4gICovCistY29uc3QgdW5pb24gY2F0bmFtZXN0cl90IF9ubF9jYXRlZ29yeV9uYW1lcyBhdHRyaWJ1dGVfaGlkZGVuID0KKy0gIHsKKy0gICAgeworLSNkZWZpbmUgREVGSU5FX0NBVEVHT1JZKGNhdGVnb3J5LCBjYXRlZ29yeV9uYW1lLCBpdGVtcywgYSkgXAorLSAgICAgIGNhdGVnb3J5X25hbWUsCistI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorLSN1bmRlZiBERUZJTkVfQ0FURUdPUlkKKy0gICAgfQorLSAgfTsKKy0KKy1jb25zdCB1aW50OF90IF9ubF9jYXRlZ29yeV9uYW1lX2lkeHNbX19MQ19MQVNUXSBhdHRyaWJ1dGVfaGlkZGVuID0KKy0gIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgW2NhdGVnb3J5XSA9IG9mZnNldG9mICh1bmlvbiBjYXRuYW1lc3RyX3QsIENBVE5BTUVNRiAoX19MSU5FX18pKSwKKy0jaW5jbHVkZSAiY2F0ZWdvcmllcy5kZWYiCistI3VuZGVmIERFRklORV9DQVRFR09SWQorLSAgfTsKKy0KKy0vKiBBbiBhcnJheSBvZiB0aGVpciBsZW5ndGhzLCBmb3IgY29udmVuaWVuY2UuICAqLworLWNvbnN0IHVpbnQ4X3QgX25sX2NhdGVnb3J5X25hbWVfc2l6ZXNbXSBhdHRyaWJ1dGVfaGlkZGVuID0KKy0gIHsKKy0jZGVmaW5lIERFRklORV9DQVRFR09SWShjYXRlZ29yeSwgY2F0ZWdvcnlfbmFtZSwgaXRlbXMsIGEpIFwKKy0gICAgW2NhdGVnb3J5XSA9IHNpemVvZiAoY2F0ZWdvcnlfbmFtZSkgLSAxLAorLSNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKy0jdW5kZWYJREVGSU5FX0NBVEVHT1JZCistICAgIFtMQ19BTExdID0gc2l6ZW9mICgiTENfQUxMIikgLSAxCistICB9OworLQorLQorICNpZmRlZiBOTF9DVVJSRU5UX0lORElSRUNUCisgIyBkZWZpbmUgV0VBS19QT1NUTE9BRChwb3N0bG9hZCkgd2Vha19leHRlcm4gKHBvc3Rsb2FkKQorICNlbHNlCitkaWZmIC0tZ2l0IGEvbG9jYWxlL3hsb2NhbGUuYyBiL2xvY2FsZS94bG9jYWxlLmMKK2luZGV4IGZlYzQ1NjQuLmYwMDI2OWMgMTAwNjQ0CistLS0gYS9sb2NhbGUveGxvY2FsZS5jCisrKysgYi9sb2NhbGUveGxvY2FsZS5jCitAQCAtMTgsNiArMTgsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPGxvY2FsZS5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlICJsb2NhbGVpbmZvLmgiCisgCisgI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCitAQCAtMjUsNiArMjYsMTkgQEAgZXh0ZXJuIHN0cnVjdCBfX2xvY2FsZV9kYXRhIF9ubF9DXyMjY2F0ZWdvcnk7CisgI2luY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorICN1bmRlZglERUZJTkVfQ0FURUdPUlkKKyAKKysvKiBJZiB0aGUgbG9jYWxlIHN1cHBvcnQgY29kZSBpc24ndCBlbmFibGVkLCBkb24ndCBnZW5lcmF0ZSBzdHJvbmcKKysgICByZWZlcmVuY2UgdG8gdGhlIEMgbG9jYWxlX2RhdGEgc3RydWN0dXJlcyBoZXJlOyBsZXQgdGhlIE1ha2VmaWxlCisrICAgZGVjaWRlIHdoaWNoIG9uZXMgdG8gaW5jbHVkZS4gIChJbiB0aGUgc3RhdGljIGxpbmtpbmcgY2FzZSwgdGhlCisrICAgc3Ryb25nIHJlZmVyZW5jZSB0byB0aGUgJ2NsYXNzJywgJ3RvdXBwZXInLCBhbmQgJ3RvbG93ZXInIHRhYmxlcworKyAgIHdpbGwgY2F1c2UgQy1jdHlwZS5vIHRvIGJlIGJyb3VnaHQgaW4sIGFzIGl0IHNob3VsZCBiZSwgZXZlbiB3aGVuCisrICAgdGhlIHJlZmVyZW5jZSB0byBfbmxfQ19MQ19DVFlQRSB3aWxsIGJlIHdlYWsuKSAgKi8KKysjaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSBcCisrICB3ZWFrX2V4dGVybiAoX25sX0NfIyNjYXRlZ29yeSkKKysjIGluY2x1ZGUgImNhdGVnb3JpZXMuZGVmIgorKyMgdW5kZWYJREVGSU5FX0NBVEVHT1JZCisrI2VuZGlmCisrCisgLyogRGVmaW5lZCBpbiBsb2NhbGUvQy1jdHlwZS5jLiAgKi8KKyBleHRlcm4gY29uc3QgY2hhciBfbmxfQ19MQ19DVFlQRV9jbGFzc1tdIGF0dHJpYnV0ZV9oaWRkZW47CisgZXh0ZXJuIGNvbnN0IGNoYXIgX25sX0NfTENfQ1RZUEVfdG91cHBlcltdIGF0dHJpYnV0ZV9oaWRkZW47CitAQCAtNTIsMyArNjYsMjYgQEAgY29uc3Qgc3RydWN0IF9fbG9jYWxlX3N0cnVjdCBfbmxfQ19sb2NvYmogYXR0cmlidXRlX2hpZGRlbiA9CisgICAgIC5fX2N0eXBlX3RvbG93ZXIgPSAoY29uc3QgaW50ICopIF9ubF9DX0xDX0NUWVBFX3RvbG93ZXIgKyAxMjgsCisgICAgIC5fX2N0eXBlX3RvdXBwZXIgPSAoY29uc3QgaW50ICopIF9ubF9DX0xDX0NUWVBFX3RvdXBwZXIgKyAxMjgKKyAgIH07CisrCisrCisrI2lmICEgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrLyogV2hlbiBsb2NhbGUgY29kZSBpcyBlbmFibGVkLCB0aGVzZSBhcmUgZWFjaCBkZWZpbmVkIGluIHRoZQorKyAgIGFwcHJvcHJpYXRlIGxjLUNBVEVHT1JZLmMgZmlsZSwgc28gdGhhdCBzdGF0aWMgbGlua3MgKHdoZW4gX190aHJlYWQKKysgICBpcyBzdXBwb3J0ZWQpIGJyaW5nIGluIG9ubHkgdGhvc2UgbGMtQ0FURUdPUlkubyBmaWxlcyBmb3IKKysgICBjYXRlZ29yaWVzIHRoZSBwcm9ncmFtIGFjdHVhbGx5IHVzZXM7IGxvb2sgZm9yIE5MX0NVUlJFTlRfSU5ESVJFQ1QKKysgICBpbiBsb2NhbGVpbmZvLmguCisrCisrICAgV2hlbiBsb2NhbGUgY29kZSBpcyBkaXNhYmxlZCwgdGhlIF9ubF9DX0NBVEVHT1JZIG9iamVjdHMgYXJlIHRoZQorKyAgIG9ubHkgcG9zc2libGUgcmVmZXJlbnRzLiAgQXQgdGhlIG1vbWVudCwgdGhlcmUgaXNuJ3QgYSB3YXkgdG8gZ2V0CisrICAgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGRlZmluZWQgaW4gZXZlcnkgY29tcGlsYXRpb24gdW5pdCB0aGF0CisrICAgI2luY2x1ZGVzIGxvY2FsZWluZm8uaCwgc28gd2UgY2FuJ3QganVzdCB0dXJuIG9mZgorKyAgIE5MX0NVUlJFTlRfSU5ESVJFQ1QuICBTbyB3ZSdsbCBkZWZpbmUgdGhlIF9ubF9jdXJyZW50X0NBVEVHT1JZCisrICAgcG9pbnRlcnMgaGVyZS4gICovCisrI2lmIGRlZmluZWQgKE5MX0NVUlJFTlRfSU5ESVJFQ1QpCisrI2RlZmluZSBERUZJTkVfQ0FURUdPUlkoY2F0ZWdvcnksIGNhdGVnb3J5X25hbWUsIGl0ZW1zLCBhKSAgICAgIFwKKysgIF9fdGhyZWFkIHN0cnVjdCBfX2xvY2FsZV9kYXRhICogY29uc3QgKl9ubF9jdXJyZW50XyMjY2F0ZWdvcnkgICBcCisrICBhdHRyaWJ1dGVfaGlkZGVuID0gJl9ubF9DX2xvY29iai5fX2xvY2FsZXNbY2F0ZWdvcnldOworKyNpbmNsdWRlICJjYXRlZ29yaWVzLmRlZiIKKysjdW5kZWYgREVGSU5FX0NBVEVHT1JZCisrI2VuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworZGlmZiAtLWdpdCBhL2xvY2FsZWRhdGEvTWFrZWZpbGUgYi9sb2NhbGVkYXRhL01ha2VmaWxlCitpbmRleCBlYmY2YWM5Li4xODcwNzUzIDEwMDY0NAorLS0tIGEvbG9jYWxlZGF0YS9NYWtlZmlsZQorKysrIGIvbG9jYWxlZGF0YS9NYWtlZmlsZQorQEAgLTIxLDEyICsyMSwyMiBAQCBzdWJkaXIgOj0gbG9jYWxlZGF0YQorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorLSMgTGlzdCB3aXRoIGFsbCBhdmFpbGFibGUgY2hhcmFjdGVyIHNldCBkZXNjcmlwdGlvbnMuCistY2hhcm1hcHMgOj0gJCh3aWxkY2FyZCBjaGFybWFwcy9bQS1JXSopICQod2lsZGNhcmQgY2hhcm1hcHMvW0otWl0qKQorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyAjIExpc3Qgd2l0aCBhbGwgYXZhaWxhYmxlIGNoYXJhY3RlciBzZXQgZGVzY3JpcHRpb25zLgorLWxvY2FsZXMgOj0gJCh3aWxkY2FyZCBsb2NhbGVzLyopCistCisrYWxsLWNoYXJtYXBzIDo9ICQod2lsZGNhcmQgY2hhcm1hcHMvW0EtSV0qKSAkKHdpbGRjYXJkIGNoYXJtYXBzL1tKLVpdKikKKysKKythbGwtbG9jYWxlcyA6PSAkKHdpbGRjYXJkIGxvY2FsZXMvKikKKysKKysjIElmIHRoZSBFR0xJQkNfTE9DQUxFUyBvcHRpb24gZ3JvdXAgaXMgbm90IGVuYWJsZWQsIHRyaW0gdGhlCisrIyBsaXN0IG9mIGNoYXJtYXAgYW5kIGxvY2FsZSBzb3VyY2UgZmlsZXMuCisraWZlcSAoJChPUFRJT05fRUdMSUJDX0xPQ0FMRVMpLHkpCisrY2hhcm1hcHMgOj0gJChhbGwtY2hhcm1hcHMpCisrbG9jYWxlcyAgOj0gJChhbGwtbG9jYWxlcykKKytlbHNlCisrY2hhcm1hcHMgOj0KKytsb2NhbGVzICA6PSBsb2NhbGVzL1BPU0lYCisrZW5kaWYKKyAKKyBzdWJkaXItZGlycyA9IHRlc3RzLW1id2MKKyB2cGF0aCAlLmMgdGVzdHMtbWJ3YworQEAgLTcxLDE0ICs4MSwyMCBAQCBsb2NhbGVfdGVzdF9zdWl0ZSA6PSB0c3RfaXN3YWxudW0gdHN0X2lzd2FscGhhIHRzdF9pc3djbnRybCAgICAgICAgICAgIFwKKyAJCSAgICAgdHN0X3djc3hmcm0gdHN0X3djdG9iIHRzdF93Y3RvbWIgdHN0X3djdHJhbnMgICAgICBcCisgCQkgICAgIHRzdF93Y3R5cGUgdHN0X3djd2lkdGgKKyAKKy10ZXN0cyA9ICQobG9jYWxlX3Rlc3Rfc3VpdGUpIHRzdC1kaWdpdHMgdHN0LXNldGxvY2FsZSBidWctaWNvbnYtdHJhbnMgXAorKyMgU2luY2UgdGhlc2UgdGVzdHMgYnVpbGQgdGhlaXIgb3duIGxvY2FsZSBmaWxlcywgdGhleSdyZSBub3QKKysjIGRlcGVuZGVudCBvbiB0aGUgT1BUSU9OX0VHTElCQ19MT0NBTEVTIG9wdGlvbiBncm91cC4gIEJ1dCB0aGV5IGRvCisrIyBuZWVkIHRoZSBsb2NhbGUgZnVuY3Rpb25zIHRvIGJlIHByZXNlbnQuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrICAgICArPSAkKGxvY2FsZV90ZXN0X3N1aXRlKSB0c3QtZGlnaXRzIHRzdC1zZXRsb2NhbGUgYnVnLWljb252LXRyYW5zIFwKKyAJdHN0LWxlYWtzIHRzdC1tYnN3Y3MxIHRzdC1tYnN3Y3MyIHRzdC1tYnN3Y3MzIHRzdC1tYnN3Y3M0IHRzdC1tYnN3Y3M1IFwKKyAJdHN0LW1ic3djczYgdHN0LXhsb2NhbGUxIHRzdC14bG9jYWxlMiBidWctdXNlc2V0bG9jYWxlIFwKKyAJdHN0LXN0cmZtb24xIHRzdC1zc2NhbmYgYnVnLXNldGxvY2FsZTEgdHN0LXNldGxvY2FsZTIgdHN0LXNldGxvY2FsZTMgXAorIAl0c3Qtd2N0eXBlCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpKQorIHRlc3RzLXN0YXRpYyA9IGJ1Zy1zZXRsb2NhbGUxLXN0YXRpYworIHRlc3RzICs9ICQodGVzdHMtc3RhdGljKQorLWlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisrZW5kaWYKKytpZmVxICh5ZXN5LCQoYnVpbGQtc2hhcmVkKSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgaWZuZXEgKG5vLCQoUEVSTCkpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCltdHJhY2UtdHN0LWxlYWtzLm91dAorIGVuZGlmCitAQCAtOTUsNiArMTExLDcgQEAgdGVzdHM6ICQob2JqZGlyKS9pY29udmRhdGEvZ2NvbnYtbW9kdWxlcworIHRlc3RzLXN0YXRpYyArPSB0c3QtbGFuZ2luZm8tc3RhdGljCisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClzb3J0LXRlc3Qub3V0ICQob2JqcGZ4KXRzdC1mbW9uLm91dCBcCisgCQkgJChvYmpwZngpdHN0LWxvY2FsZS5vdXQgJChvYmpwZngpdHN0LXJwbWF0Y2gub3V0IFwKKyAJCSAkKG9ianBmeCl0c3QtdHJhbnMub3V0ICQob2JqcGZ4KXRzdC1jdHlwZS5vdXQgXAorQEAgLTEwOSw2ICsxMjYsNyBAQCBMT0NBTEVTIDo9IGRlX0RFLklTTy04ODU5LTEgZGVfREUuVVRGLTggZW5fVVMuQU5TSV9YMy40LTE5NjggXAorIAkgICB0cl9UUi5JU08tODg1OS05IGVuX0dCLlVURi04IHVrX1VBLlVURi04CisgaW5jbHVkZSAuLi9nZW4tbG9jYWxlcy5taworIGVuZGlmCisrZW5kaWYKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCisgCitAQCAtMTkxLDYgKzIwOSwxMSBAQCBlbmRpZgorIAorIGluY2x1ZGUgU1VQUE9SVEVECisgCisrIyBPbmx5IGluc3RhbGwgbG9jYWxlIGRhdGEgaWYgT1BUSU9OX0VHTElCQ19MT0NBTEVTIGlzIHNlbGVjdGVkLgorK2lmbmVxICgkKE9QVElPTl9FR0xJQkNfTE9DQUxFUykseSkKKytTVVBQT1JURUQtTE9DQUxFUyA6PQorK2VuZGlmCisrCisgSU5TVEFMTC1TVVBQT1JURUQtTE9DQUxFUz0kKGFkZHByZWZpeCBpbnN0YWxsLSwgJChTVVBQT1JURUQtTE9DQUxFUykpCisgCisgIyBTb21ldGltZXMgdGhlIHdob2xlIGNvbGxlY3Rpb24gb2YgbG9jYWxlIGZpbGVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCitkaWZmIC0tZ2l0IGEvbG9naW4vTWFrZWZpbGUgYi9sb2dpbi9NYWtlZmlsZQoraW5kZXggMGY0YmIyMi4uNDAzNmRkYiAxMDA2NDQKKy0tLSBhL2xvZ2luL01ha2VmaWxlCisrKysgYi9sb2dpbi9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDcgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIGxvZ2luIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKyAKKyBzdWJkaXIJOj0gbG9naW4KKyAKK0BAIC0yNSwxNCArMjYsMTYgQEAgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwk6PSB1dG1wLmggYml0cy91dG1wLmggbGFzdGxvZy5oIHB0eS5oCisgCistcm91dGluZXMgOj0gZ2V0bG9naW4gZ2V0bG9naW5fciBzZXRsb2dpbiBnZXRsb2dpbl9yX2NoayBcCistCSAgICBnZXR1dGVudCBnZXR1dGVudF9yIGdldHV0aWQgZ2V0dXRsaW5lIGdldHV0aWRfciBnZXR1dGxpbmVfciBcCistCSAgICB1dG1wX2ZpbGUgdXRtcG5hbWUgdXBkd3RtcCBnZXRwdCBncmFudHB0IHVubG9ja3B0IHB0c25hbWUgXAorLQkgICAgcHRzbmFtZV9yX2NoaworK3JvdXRpbmVzIDo9IGdldHB0IGdyYW50cHQgdW5sb2NrcHQgcHRzbmFtZSBwdHNuYW1lX3JfY2hrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1VUTVApIFwKKysJICs9IGdldHV0ZW50IGdldHV0ZW50X3IgZ2V0dXRpZCBnZXR1dGxpbmUgZ2V0dXRpZF9yIGdldHV0bGluZV9yIFwKKysJICAgIHV0bXBfZmlsZSB1dG1wbmFtZSB1cGR3dG1wCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0dFVExPR0lOKSArPSBnZXRsb2dpbiBnZXRsb2dpbl9yIGdldGxvZ2luX3JfY2hrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0JTRCkgKz0gc2V0bG9naW4KKyAKKyBDRkxBR1MtZ3JhbnRwdC5jID0gLURMSUJFWEVDRElSPSciJChsaWJleGVjZGlyKSInCisgCistb3RoZXJzID0gdXRtcGR1bXAKKytvdGhlcnMtJChPUFRJT05fRUdMSUJDX1VUTVApICs9IHV0bXBkdW1wCisgCisgaWZlcSAoeWVzLCQoYnVpbGQtcHQtY2hvd24pKQorIG90aGVycyArPSBwdF9jaG93bgorQEAgLTQ2LDggKzQ5LDggQEAgdnBhdGggJS5jIHByb2dyYW1zCisgdGVzdHMgOj0gdHN0LXV0bXAgdHN0LXV0bXB4IHRzdC1ncmFudHB0IHRzdC1wdHNuYW1lIHRzdC1nZXRsb2dpbgorIAorICMgQnVpbGQgdGhlIC1sdXRpbCBsaWJyYXJ5IHdpdGggdGhlc2UgZXh0cmEgZnVuY3Rpb25zLgorLWV4dHJhLWxpYnMgICAgICA6PSBsaWJ1dGlsCistZXh0cmEtbGlicy1vdGhlcnMgOj0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtJChPUFRJT05fRUdMSUJDX1VUTVApIDo9IGxpYnV0aWwKKytleHRyYS1saWJzLW90aGVycyA6PSAkKGV4dHJhLWxpYnMteSkKKyAKKyBsaWJ1dGlsLXJvdXRpbmVzOj0gbG9naW4gbG9naW5fdHR5IGxvZ291dCBsb2d3dG1wIG9wZW5wdHkgZm9ya3B0eQorIAorZGlmZiAtLWdpdCBhL21hbGxvYy9NYWtlZmlsZSBiL21hbGxvYy9NYWtlZmlsZQoraW5kZXggNjdlZDI5My4uMjcyY2E0ZCAxMDA2NDQKKy0tLSBhL21hbGxvYy9NYWtlZmlsZQorKysrIGIvbWFsbG9jL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBtYWxsb2Mgcm91dGluZXMKKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBtYWxsb2MKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zOSw5ICs0MSwxNSBAQCBpbnN0YWxsLWxpYiA6PSBsaWJtY2hlY2suYQorIG5vbi1saWIuYSA6PSBsaWJtY2hlY2suYQorIAorICMgQWRkaXRpb25hbCBsaWJyYXJ5LgorK2lmZXEgKCQoT1BUSU9OX0VHTElCQ19NRU1VU0FHRSkseSkKKyBleHRyYS1saWJzID0gbGlibWVtdXNhZ2UKKyBleHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKyAKKytpZmRlZiBPUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKytDUFBGTEFHUy1tZW11c2FnZSArPSAtRF9fT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFPSQoT1BUSU9OX0VHTElCQ19NRU1VU0FHRV9ERUZBVUxUX0JVRkZFUl9TSVpFKQorK2VuZGlmCisrZW5kaWYKKysKKyBsaWJtZW11c2FnZS1yb3V0aW5lcyA9IG1lbXVzYWdlCisgbGlibWVtdXNhZ2UtaW5oaWJpdC1vID0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCitAQCAtNzEsNyArNzksNyBAQCBlbmRpZgorICMgVW5sZXNzIHdlIGdldCBhIHRlc3QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgbGliZ2Qgd2hpY2ggYWxzbyB3b3JrcworICMgZm9yIGNyb3NzLWNvbXBpbGluZyB3ZSBkaXNhYmxlIHRoZSBtZW11c2FnZXN0YXQgZ2VuZXJhdGlvbiBpbiB0aGlzCisgIyBzaXR1YXRpb24uCistaWZuZXEgKCQoY3Jvc3MtY29tcGlsaW5nKSx5ZXMpCisraWZlcSAoJChjcm9zcy1jb21waWxpbmcpJChPUFRJT05fRUdMSUJDX01FTVVTQUdFKSxub3kpCisgIyBJZiB0aGUgZ2QgbGlicmFyeSBpcyBhdmFpbGFibGUgd2UgYnVpbGQgdGhlIGBtZW11c2FnZXN0YXQnIHByb2dyYW0uCisgaWZuZXEgKCQoTElCR0QpLG5vKQorIG90aGVyczogJChvYmpwZngpbWVtdXNhZ2UKK2RpZmYgLS1naXQgYS9tYWxsb2MvbWVtdXNhZ2UuYyBiL21hbGxvYy9tZW11c2FnZS5jCitpbmRleCBhNTdiYThlLi43MzJiYTlkIDEwMDY0NAorLS0tIGEvbWFsbG9jL21lbXVzYWdlLmMKKysrKyBiL21hbGxvYy9tZW11c2FnZS5jCitAQCAtMzMsNiArMzMsNyBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSA8bWVtdXNhZ2UuaD4KKyAKK0BAIC05Myw3ICs5NCwxMSBAQCBzdGF0aWMgX190aHJlYWQgdWludHB0cl90IHN0YXJ0X3NwOworICNkZWZpbmUgcGVha19zdGFjayAgICAgIHBlYWtfdXNlWzFdCisgI2RlZmluZSBwZWFrX3RvdGFsICAgICAgcGVha191c2VbMl0KKyAKKy0jZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUgICAgIDMyNzY4CisrI2lmbmRlZiBfX09QVElPTl9FR0xJQkNfTUVNVVNBR0VfREVGQVVMVF9CVUZGRVJfU0laRQorKyMgZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUJMzI3NjgKKysjZWxzZQorKyMgZGVmaW5lIERFRkFVTFRfQlVGRkVSX1NJWkUJX19PUFRJT05fRUdMSUJDX01FTVVTQUdFX0RFRkFVTFRfQlVGRkVSX1NJWkUKKysjZW5kaWYKKyBzdGF0aWMgc2l6ZV90IGJ1ZmZlcl9zaXplOworIAorIHN0YXRpYyBpbnQgZmQgPSAtMTsKK2RpZmYgLS1naXQgYS9tYWxsb2MvbWVtdXNhZ2Uuc2ggYi9tYWxsb2MvbWVtdXNhZ2Uuc2gKK2luZGV4IDhhYjhjYzIuLmQxOGY0NDYgMTAwNzU1CistLS0gYS9tYWxsb2MvbWVtdXNhZ2Uuc2gKKysrKyBiL21hbGxvYy9tZW11c2FnZS5zaAorQEAgLTM1LDcgKzM1LDcgQEAgZG9fbWlzc2luZ19hcmcoKSB7CisgCisgIyBQcmludCBoZWxwIG1lc3NhZ2UKKyBkb19oZWxwKCkgeworLSAgZWNobyAkIlVzYWdlOiBtZW11c2FnZSBbT1BUSU9OXS4uLiBQUk9HUkFNIFtQUk9HUkFNT1BUSU9OXS4uLgorKyAgcHJpbnRmICQiVXNhZ2U6IG1lbXVzYWdlIFtPUFRJT05dLi4uIFBST0dSQU0gW1BST0dSQU1PUFRJT05dLi4uCisgUHJvZmlsZSBtZW1vcnkgdXNhZ2Ugb2YgUFJPR1JBTS4KKyAKKyAgICAtbiwtLXByb2duYW1lPU5BTUUgICAgIE5hbWUgb2YgdGhlIHByb2dyYW0gZmlsZSB0byBwcm9maWxlCitkaWZmIC0tZ2l0IGEvbWF0aC9NYWtlZmlsZSBiL21hdGgvTWFrZWZpbGUKK2luZGV4IDYzODhiYWUuLmVkMWM1MTEgMTAwNjQ0CistLS0gYS9tYXRoL01ha2VmaWxlCisrKysgYi9tYXRoL01ha2VmaWxlCitAQCAtMjEsNiArMjEsOCBAQCBzdWJkaXIJCTo9IG1hdGgKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgIyBJbnN0YWxsZWQgaGVhZGVyIGZpbGVzLgorIGhlYWRlcnMJCTo9IG1hdGguaCBiaXRzL21hdGhjYWxscy5oIGJpdHMvbWF0aGlubGluZS5oIGJpdHMvaHVnZV92YWwuaCBcCisgCQkgICBiaXRzL2h1Z2VfdmFsZi5oIGJpdHMvaHVnZV92YWxsLmggYml0cy9pbmYuaCBiaXRzL25hbi5oIFwKK0BAIC0zNCw4ICszNiw4IEBAIGF1eAkJOj0gc2V0ZnB1Y3cgZnB1X2NvbnRyb2wKKyAKKyAjIEJ1aWxkIHRoZSAtbG0gbGlicmFyeS4KKyAKKy1leHRyYS1saWJzCTo9IGxpYm0KKy1leHRyYS1saWJzLW90aGVycyA9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSA6PSBsaWJtCisrZXh0cmEtbGlicy1vdGhlcnMtJChPUFRJT05fRUdMSUJDX0xJQk0pID0gJChleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19MSUJNKSkKKyAKKyBsaWJtLXN1cHBvcnQgPSBzX2xpYl92ZXJzaW9uIHNfbWF0aGVyciBzX3NpZ25nYW0JCQlcCisgCSAgICAgICBmY2xyZXhjcHQgZmdldGV4Y3B0ZmxnIGZyYWlzZWV4Y3B0IGZzZXRleGNwdGZsZwkJXAorZGlmZiAtLWdpdCBhL21pc2MvTWFrZWZpbGUgYi9taXNjL01ha2VmaWxlCitpbmRleCBhZWNiMGRhLi5lNmI3YzIzIDEwMDY0NAorLS0tIGEvbWlzYy9NYWtlZmlsZQorKysrIGIvbWlzYy9NYWtlZmlsZQorQEAgLTE5LDYgKzE5LDEwIEBACisgIwlTdWItbWFrZWZpbGUgZm9yIG1pc2MgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisgCisrIyBTb21lIHN5c3RlbS1kZXBlbmRlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoZXNlIGZ1bmN0aW9ucyB1c2Ugb3B0aW9uCisrIyBncm91cHMgKHNlZSBzeXNkZXBzL3VuaXgvc3lzdi9saW51eC9NYWtlZmlsZSwgZm9yIGV4YW1wbGUpLgorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbWlzYworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTQ2LDQwICs1MCw0NyBAQCByb3V0aW5lcyA6PSBicmsgc2JyayBzc3RrIGlvY3RsIFwKKyAJICAgIHNlbGVjdCBwc2VsZWN0IFwKKyAJICAgIGFjY3QgY2hyb290IGZzeW5jIHN5bmMgZmRhdGFzeW5jIHN5bmNmcyByZWJvb3QgXAorIAkgICAgZ2V0aG9zdGlkIHNldGhvc3RpZCBcCistCSAgICByZXZva2Ugdmhhbmd1cCBcCisrCSAgICB2aGFuZ3VwIFwKKyAJICAgIHN3YXBvbiBzd2Fwb2ZmIG1rdGVtcCBta3N0ZW1wIG1rc3RlbXA2NCBta2R0ZW1wIFwKKyAJICAgIG1rb3N0ZW1wIG1rb3N0ZW1wNjQgbWtzdGVtcHMgbWtzdGVtcHM2NCBta29zdGVtcHMgbWtvc3RlbXBzNjQgXAorIAkgICAgdWFsYXJtIHVzbGVlcCBcCisgCSAgICBndHR5IHN0dHkgXAorIAkgICAgcHRyYWNlIFwKKy0JICAgIGZzdGFiIG1udGVudCBtbnRlbnRfciBcCisrCSAgICBtbnRlbnQgbW50ZW50X3IgXAorIAkgICAgdXRpbWVzIGx1dGltZXMgZnV0aW1lcyBmdXRpbWVzYXQgXAorIAkgICAgdHJ1bmNhdGUgZnRydW5jYXRlIHRydW5jYXRlNjQgZnRydW5jYXRlNjQgXAorLQkgICAgY2hmbGFncyBmY2hmbGFncyBcCisgCSAgICBpbnNyZW1xdWUgZ2V0dHR5ZW50IGdldHVzZXJzaGVsbCBnZXRwYXNzIHR0eXNsb3QgXAorIAkgICAgc3lzbG9nIHN5c2NhbGwgZGFlbW9uIFwKKyAJICAgIG1tYXAgbW1hcDY0IG11bm1hcCBtcHJvdGVjdCBtc3luYyBtYWR2aXNlIG1pbmNvcmUgcmVtYXBfZmlsZV9wYWdlc1wKKyAJICAgIG1sb2NrIG11bmxvY2sgbWxvY2thbGwgbXVubG9ja2FsbCBcCistCSAgICBlZmdjdnQgZWZnY3Z0X3IgcWVmZ2N2dCBxZWZnY3Z0X3IgXAorIAkgICAgaHNlYXJjaCBoc2VhcmNoX3IgdHNlYXJjaCBsc2VhcmNoIFwKKyAJICAgIGVyciBlcnJvciB1c3RhdCBcCistCSAgICBnZXRzeXNzdGF0cyBkaXJuYW1lIHJlZ2V4cCBcCisrCSAgICBnZXRzeXNzdGF0cyBkaXJuYW1lIFwKKyAJICAgIGdldGxvYWRhdmcgZ2V0Y2xrdGNrIFwKKyAJICAgIGZnZXR4YXR0ciBmbGlzdHhhdHRyIGZyZW1vdmV4YXR0ciBmc2V0eGF0dHIgZ2V0eGF0dHIgXAorIAkgICAgbGlzdHhhdHRyIGxnZXR4YXR0ciBsbGlzdHhhdHRyIGxyZW1vdmV4YXR0ciBsc2V0eGF0dHIgXAorIAkgICAgcmVtb3ZleGF0dHIgc2V0eGF0dHIgZ2V0YXV4dmFsIGlmdW5jLWltcGwtbGlzdAorIAorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUCkgKz0gcmVnZXhwCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZTVEFCKSArPSBmc3RhYgorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19CU0QpICs9IGNoZmxhZ3MgZmNoZmxhZ3MgcmV2b2tlCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZDVlQpICs9IGVmZ2N2dCBlZmdjdnRfciBxZWZnY3Z0IHFlZmdjdnRfcgorKworIGdlbmVyYXRlZCArPSB0c3QtZXJyb3IxLm10cmFjZSB0c3QtZXJyb3IxLW1lbS5vdXQKKyAKKyBhdXggOj0gaW5pdC1taXNjCisgaW5zdGFsbC1saWIgOj0gbGliZy5hCisgZ3BsMmxncGwgOj0gZXJyb3IuYyBlcnJvci5oCisgCistdGVzdHMgOj0gdHN0LWRpcm5hbWUgdHN0LXRzZWFyY2ggdHN0LWZkc2V0IHRzdC1lZmdjdnQgdHN0LW1udGVudCB0c3QtaHNlYXJjaCBcCistCSB0c3QtZXJyb3IxIHRzdC1wc2VsZWN0IHRzdC1pbnNyZW1xdWUgdHN0LW1udGVudDIgYnVnLWhzZWFyY2gxCisrdGVzdHMgOj0gdHN0LWRpcm5hbWUgdHN0LXRzZWFyY2ggdHN0LWZkc2V0IHRzdC1tbnRlbnQgdHN0LWhzZWFyY2ggXAorKwkgdHN0LXBzZWxlY3QgdHN0LWluc3JlbXF1ZSB0c3QtbW50ZW50MiBidWctaHNlYXJjaDEKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSArPSB0c3QtZXJyb3IxCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0ZDVlQpICs9IHRzdC1lZmdjdnQKKyBpZmVxICgkKHJ1bi1idWlsdC10ZXN0cykseWVzKQorK2lmZXEgKHksJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeCl0c3QtZXJyb3IxLW1lbS5vdXQKKyBlbmRpZgorK2VuZGlmCisgCisgQ0ZMQUdTLXNlbGVjdC5jID0gLWZleGNlcHRpb25zIC1mYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKKyBDRkxBR1MtdHNlYXJjaC5jID0gJCh1c2VzLWNhbGxiYWNrcykKK2RpZmYgLS1naXQgYS9taXNjL2Vyci5jIGIvbWlzYy9lcnIuYworaW5kZXggN2I5ODE1Ny4uZWZjZThkNSAxMDA2NDQKKy0tLSBhL21pc2MvZXJyLmMKKysrKyBiL21pc2MvZXJyLmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPGVycm5vLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDx3Y2hhci5oPgorICNkZWZpbmUgZmxvY2tmaWxlKHMpIF9JT19mbG9ja2ZpbGUgKHMpCitAQCAtMzcsNiArMzgsNyBAQCBleHRlcm4gY2hhciAqX19wcm9nbmFtZTsKKyAgIHZhX2VuZCAoYXApOwkJCQkJCQkJICAgICAgXAorIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIHN0YXRpYyB2b2lkCisgY29udmVydF9hbmRfcHJpbnQgKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgeworQEAgLTgxLDYgKzgzLDcgQEAgY29udmVydF9hbmRfcHJpbnQgKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgCisgICBfX3Zmd3ByaW50ZiAoc3RkZXJyLCB3Zm9ybWF0LCBhcCk7CisgfQorKyNlbmRpZgorIAorIHZvaWQKKyB2d2FybnggKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCitAQCAtODgsOSArOTEsMTMgQEAgdndhcm54IChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorICAgZmxvY2tmaWxlIChzdGRlcnIpOworICAgaWYgKF9JT19md2lkZSAoc3RkZXJyLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIF9fZndwcmludGYgKHN0ZGVyciwgTCIlczogIiwgX19wcm9nbmFtZSk7CisgICAgICAgY29udmVydF9hbmRfcHJpbnQgKGZvcm1hdCwgYXApOworICAgICAgIHB1dHdjX3VubG9ja2VkIChMJ1xuJywgc3RkZXJyKTsKKysjZWxzZQorKyAgICAgIGFib3J0ICgpOworKyNlbmRpZgorICAgICB9CisgICBlbHNlCisgICAgIHsKK0BAIC0xMTEsNiArMTE4LDcgQEAgdndhcm4gKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgYXApCisgICBmbG9ja2ZpbGUgKHN0ZGVycik7CisgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgX19md3ByaW50ZiAoc3RkZXJyLCBMIiVzOiAiLCBfX3Byb2duYW1lKTsKKyAgICAgICBpZiAoZm9ybWF0KQorIAl7CitAQCAtMTE5LDYgKzEyNyw5IEBAIHZ3YXJuIChjb25zdCBjaGFyICpmb3JtYXQsIF9fZ251Y192YV9saXN0IGFwKQorIAl9CisgICAgICAgX19zZXRfZXJybm8gKGVycm9yKTsKKyAgICAgICBfX2Z3cHJpbnRmIChzdGRlcnIsIEwiJW1cbiIpOworKyNlbHNlCisrICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworZGlmZiAtLWdpdCBhL21pc2MvZXJyb3IuYyBiL21pc2MvZXJyb3IuYworaW5kZXggYWFhMTIwZC4uZDZjYmM4MiAxMDA2NDQKKy0tLSBhL21pc2MvZXJyb3IuYworKysrIGIvbWlzYy9lcnJvci5jCitAQCAtMzUsNiArMzUsNyBAQAorICNlbmRpZgorIAorICNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAjIGluY2x1ZGUgPGxpYmludGwuaD4KKyAjIGluY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjIGluY2x1ZGUgPHN0ZGludC5oPgorQEAgLTIwNSw2ICsyMDYsNyBAQCBlcnJvcl90YWlsIChpbnQgc3RhdHVzLCBpbnQgZXJybnVtLCBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFyZ3MpCisgI2lmIF9MSUJDCisgICBpZiAoX0lPX2Z3aWRlIChzdGRlcnIsIDApID4gMCkKKyAgICAgeworKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobWVzc2FnZSkgKyAxOworICAgICAgIHdjaGFyX3QgKndtZXNzYWdlID0gTlVMTDsKKyAgICAgICBtYnN0YXRlX3Qgc3Q7CitAQCAtMjY1LDYgKzI2Nyw5IEBAIGVycm9yX3RhaWwgKGludCBzdGF0dXMsIGludCBlcnJudW0sIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXJncykKKyAKKyAgICAgICBpZiAodXNlX21hbGxvYykKKyAJZnJlZSAod21lc3NhZ2UpOworKyNlbHNlCisrICAgICAgYWJvcnQgKCk7CisrI2VuZGlmCisgICAgIH0KKyAgIGVsc2UKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9taXNjL3RzdC1lZmdjdnQuYyBiL21pc2MvdHN0LWVmZ2N2dC5jCitpbmRleCA1MDgzZmVjLi43OWVkMzZjIDEwMDY0NAorLS0tIGEvbWlzYy90c3QtZWZnY3Z0LmMKKysrKyBiL21pc2MvdHN0LWVmZ2N2dC5jCitAQCAtNTksNyArNTksNyBAQCBzdGF0aWMgdGVzdGNhc2UgZWN2dF90ZXN0c1tdID0KKyAgIHsgMTIzLjAxLCAtNCwgMywgIiIgfSwKKyAgIHsgMTI2LjcxLCAtNCwgMywgIiIgfSwKKyAgIHsgMC4wLCA0LCAxLCAiMDAwMCIgfSwKKy0jaWYgREJMX01BTlRfRElHID09IDUzCisrI2lmIERCTF9NQU5UX0RJRyA9PSA1MyAmJiAhKGRlZmluZWQgX19wb3dlcnBjX18gJiYgZGVmaW5lZCBfX05PX0ZQUlNfXyAmJiAhZGVmaW5lZCBfU09GVF9GTE9BVCAmJiAhZGVmaW5lZCBfU09GVF9ET1VCTEUpCisgICB7IDB4MXAtMTA3NCwgMywgLTMyMywgIjQ5NCIgfSwKKyAgIHsgLTB4MXAtMTA3NCwgMywgLTMyMywgIjQ5NCIgfSwKKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9uaXMvTWFrZWZpbGUgYi9uaXMvTWFrZWZpbGUKK2luZGV4IDAzN2U2NzQuLmM5Njc4NTAgMTAwNjQ0CistLS0gYS9uaXMvTWFrZWZpbGUKKysrKyBiL25pcy9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlNYWtlZmlsZSBmb3IgTklTL05JUysgcGFydC4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBuaXMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCwxOSArMzIsMjYgQEAgZW5kaWYKKyAKKyAjIFRoZXNlIGFyZSB0aGUgZGF0YWJhc2VzIGF2YWlsYWJsZSBmb3IgdGhlIG5pcyAoYW5kIHBlcmhhcHMgbGF0ZXIgbmlzcGx1cykKKyAjIHNlcnZpY2UuICBUaGlzIG11c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgc2VydmljZXMgaW4gbnNzLgorLWRhdGFiYXNlcwkJPSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZ3JwIHB3ZCBycGMgZXRoZXJzIFwKKy0JCQkgIHNwd2QgbmV0Z3JwIGFsaWFzIHB1YmxpY2tleQorK2RhdGFiYXNlcy15CQk6PSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZ3JwIHB3ZCBycGMgZXRoZXJzIFwKKysJCQkgICBzcHdkIG5ldGdycCBwdWJsaWNrZXkKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMpICs9IGFsaWFzCisgCisgIyBTcGVjaWZ5IHJ1bGVzIGZvciB0aGUgbnNzXyogbW9kdWxlcy4KKy1zZXJ2aWNlcwkJOj0gbmlzIG5pc3BsdXMgY29tcGF0CisrIyBUaGUgJ2NvbXBhdCcgbW9kdWxlIGluY2x1ZGVzIG5pcyBzdXBwb3J0LCBhbmQgdGhlICduc3MnIGRpcmVjdG9yeQorKyMgaW5jbHVkZXMgYSBiYXJlLWJvbmVzICJmaWxlcyIgbGlicmFyeSwgc28gd2UnbGwgaW5jbHVkZSAnY29tcGF0JyBpbgorKyMgT1BUSU9OX0VHTElCQ19OSVMuCisrc2VydmljZXMteQkJOj0KKytzZXJ2aWNlcy0kKE9QVElPTl9FR0xJQkNfTklTKSArPSBuaXMgbmlzcGx1cyBjb21wYXQKKysKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19OSVMpICs9IGxpYm5zbAorK2V4dHJhLWxpYnMteQkJKz0gJChzZXJ2aWNlcy15OiU9bGlibnNzXyUpCisgCistZXh0cmEtbGlicwkJPSBsaWJuc2wgJChzZXJ2aWNlczolPWxpYm5zc18lKQorICMgVGhlc2UgbGlicmFyaWVzIHdpbGwgYmUgYnVpbHQgaW4gdGhlIGBvdGhlcnMnIHBhc3MgcmF0aGVyIHRoYW4KKyAjIHRoZSBgbGliJyBwYXNzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIGxpYmMuc28gYmVpbmcgYnVpbHQgYWxyZWFkeS4KKy1leHRyYS1saWJzLW90aGVycwk9ICQoZXh0cmEtbGlicykKKytleHRyYS1saWJzLW90aGVycy15CSs9ICQoZXh0cmEtbGlicy15KQorIAorICMgVGhlIHNvdXJjZXMgYXJlIGZvdW5kIGluIHRoZSBhcHByb3ByaWF0ZSBzdWJkaXIuCistc3ViZGlyLWRpcnMgPSAkKHNlcnZpY2VzOiU9bnNzXyUpCisrc3ViZGlyLWRpcnMgPSAkKHNlcnZpY2VzLXk6JT1uc3NfJSkKKyB2cGF0aCAlLmMgJChzdWJkaXItZGlycykKKyAKKyBsaWJuc2wtcm91dGluZXMgPSB5cF94ZHIgeXBjbG50IHlwdXBkYXRlX3hkciBcCitAQCAtNjAsMTEgKzY5LDExIEBAIGxpYm5zbC1yb3V0aW5lcyA9IHlwX3hkciB5cGNsbnQgeXB1cGRhdGVfeGRyIFwKKyBsaWJuc3NfY29tcGF0LXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IGNvbXBhdC0sZ3JwIHB3ZCBzcHdkIGluaXRncm91cHMpCisgbGlibnNzX2NvbXBhdC1pbmhpYml0LW8JPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKKy1saWJuc3NfbmlzLXJvdXRpbmVzCTo9ICQoYWRkcHJlZml4IG5pcy0sJChkYXRhYmFzZXMpKSBuaXMtaW5pdGdyb3VwcyBcCisrbGlibnNzX25pcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBuaXMtLCQoZGF0YWJhc2VzLXkpKSBuaXMtaW5pdGdyb3VwcyBcCisgCQkJICAgbnNzLW5pcworIGxpYm5zc19uaXMtaW5oaWJpdC1vCT0gJChmaWx0ZXItb3V0IC5vcywkKG9iamVjdC1zdWZmaXhlcykpCisgCistbGlibnNzX25pc3BsdXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzcGx1cy0sJChkYXRhYmFzZXMpKSBuaXNwbHVzLXBhcnNlciBcCisrbGlibnNzX25pc3BsdXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggbmlzcGx1cy0sJChkYXRhYmFzZXMteSkpIG5pc3BsdXMtcGFyc2VyIFwKKyAJCQkgICBuc3MtbmlzcGx1cyBuaXNwbHVzLWluaXRncm91cHMKKyBsaWJuc3NfbmlzcGx1cy1pbmhpYml0LW8gPSAkKGZpbHRlci1vdXQgLm9zLCQob2JqZWN0LXN1ZmZpeGVzKSkKKyAKK0BAIC04MCwxMiArODksMTIgQEAgbGlibnNsLWxpYmMgPSAkKGNvbW1vbi1vYmpwZngpbGlua29iai9saWJjLnNvCisgIyBUYXJnZXQtc3BlY2lmaWMgdmFyaWFibGUgc2V0dGluZyB0byBsaW5rIG9iamVjdHMgdXNpbmcgZGVwcmVjYXRlZAorICMgUlBDIGludGVyZmFjZXMgd2l0aCB0aGUgdmVyc2lvbiBvZiBsaWJjLnNvIHRoYXQgbWFrZXMgdGhlbSBhdmFpbGFibGUKKyAjIGZvciBuZXcgbGlua3M6CistJChzZXJ2aWNlczolPSQob2JqcGZ4KWxpYm5zc18lLnNvKSAkKG9ianBmeClsaWJuc2wuc286IFwKKyskKHNlcnZpY2VzLXk6JT0kKG9ianBmeClsaWJuc3NfJS5zbykgJChvYmpwZngpbGlibnNsLnNvOiBcCisgICBsaWJjLWZvci1saW5rID0gJChsaWJuc2wtbGliYykKKyAKKyAKKyBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorLSQob3RoZXJzOiU9JChvYmpwZngpJSk6ICQob2JqcGZ4KWxpYm5zbC5zbyQobGlibnNsLnNvLXZlcnNpb24pCisrJChvdGhlcnMteTolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuc28kKGxpYm5zbC5zby12ZXJzaW9uKQorIGVsc2UKKy0kKG90aGVyczolPSQob2JqcGZ4KSUpOiAkKG9ianBmeClsaWJuc2wuYQorKyQob3RoZXJzLXk6JT0kKG9ianBmeCklKTogJChvYmpwZngpbGlibnNsLmEKKyBlbmRpZgorZGlmZiAtLWdpdCBhL25wdGwvTWFrZWZpbGUgYi9ucHRsL01ha2VmaWxlCitpbmRleCBhYWNhMGE0Li41OTZjYTNjIDEwMDY0NAorLS0tIGEvbnB0bC9NYWtlZmlsZQorKysrIGIvbnB0bC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIE5QVEwgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBucHRsCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMTE4LDcgKzEyMCw3IEBAIGxpYnB0aHJlYWQtcm91dGluZXMgPSBucHRsLWluaXQgdmFycyBldmVudHMgdmVyc2lvbiBwdC1pbnRlcnAgXAorIAkJICAgICAgcHQtcmFpc2UgcHQtc3lzdGVtIFwKKyAJCSAgICAgIGZsb2NrZmlsZSBmdHJ5bG9ja2ZpbGUgZnVubG9ja2ZpbGUgXAorIAkJICAgICAgc2lnYWN0aW9uIFwKKy0JCSAgICAgIGhlcnJubyByZXMgcHQtYWxsb2NydHNpZyBcCisrCQkgICAgICBwdC1hbGxvY3J0c2lnIFwKKyAJCSAgICAgIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzIFwKKyAJCSAgICAgIHB0aHJlYWRfZ2V0YWZmaW5pdHkgcHRocmVhZF9zZXRhZmZpbml0eSBcCisgCQkgICAgICBwdGhyZWFkX2F0dHJfZ2V0YWZmaW5pdHkgcHRocmVhZF9hdHRyX3NldGFmZmluaXR5IFwKK0BAIC0xMzgsOCArMTQwLDEwIEBAIGxpYnB0aHJlYWQtcm91dGluZXMgPSBucHRsLWluaXQgdmFycyBldmVudHMgdmVyc2lvbiBwdC1pbnRlcnAgXAorICMJCSAgICAgIHB0aHJlYWRfc2V0Z2lkIHB0aHJlYWRfc2V0ZWdpZCBwdGhyZWFkX3NldHJlZ2lkIFwKKyAjCQkgICAgICBwdGhyZWFkX3NldHJlc2dpZAorIAorK2xpYnB0aHJlYWQtcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIDo9IGhlcnJubyByZXMKKyBsaWJwdGhyZWFkLXNoYXJlZC1vbmx5LXJvdXRpbmVzID0gdmVyc2lvbiBwdC1pbnRlcnAgcHQtYWxsb2NydHNpZyBcCisgCQkJCSAgdW53aW5kLWZvcmNlZHVud2luZAorKworIGxpYnB0aHJlYWQtc3RhdGljLW9ubHktcm91dGluZXMgPSBwdGhyZWFkX2F0Zm9yaworIAorICMgU2luY2UgY2FuY2VsbGF0aW9uIGhhbmRsaW5nIGlzIGluIGxhcmdlIHBhcnRzIGhhbmRsZWQgdXNpbmcgZXhjZXB0aW9ucworQEAgLTIyMCw3ICsyMjQsNyBAQCB0ZXN0cyA9IHRzdC10eXBlc2l6ZXMgXAorIAl0c3QtbXV0ZXhwaTEgdHN0LW11dGV4cGkyIHRzdC1tdXRleHBpMyB0c3QtbXV0ZXhwaTQgdHN0LW11dGV4cGk1IFwKKyAJdHN0LW11dGV4cGk1YSB0c3QtbXV0ZXhwaTYgdHN0LW11dGV4cGk3IHRzdC1tdXRleHBpN2EgdHN0LW11dGV4cGk4IFwKKyAJdHN0LW11dGV4cGk5IFwKKy0JdHN0LXNwaW4xIHRzdC1zcGluMiB0c3Qtc3BpbjMgdHN0LXNwaW40IFwKKysJdHN0LXNwaW4xIHRzdC1zcGluMiB0c3Qtc3BpbjMgXAorIAl0c3QtY29uZDEgdHN0LWNvbmQyIHRzdC1jb25kMyB0c3QtY29uZDQgdHN0LWNvbmQ1IHRzdC1jb25kNiB0c3QtY29uZDcgXAorIAl0c3QtY29uZDggdHN0LWNvbmQ5IHRzdC1jb25kMTAgdHN0LWNvbmQxMSB0c3QtY29uZDEyIHRzdC1jb25kMTMgXAorIAl0c3QtY29uZDE0IHRzdC1jb25kMTUgdHN0LWNvbmQxNiB0c3QtY29uZDE3IHRzdC1jb25kMTggdHN0LWNvbmQxOSBcCitAQCAtMjU2LDE0ICsyNjAsMTQgQEAgdGVzdHMgPSB0c3QtdHlwZXNpemVzIFwKKyAJdHN0LWNhbmNlbDYgdHN0LWNhbmNlbDcgdHN0LWNhbmNlbDggdHN0LWNhbmNlbDkgdHN0LWNhbmNlbDEwIFwKKyAJdHN0LWNhbmNlbDExIHRzdC1jYW5jZWwxMiB0c3QtY2FuY2VsMTMgdHN0LWNhbmNlbDE0IHRzdC1jYW5jZWwxNSBcCisgCXRzdC1jYW5jZWwxNiB0c3QtY2FuY2VsMTcgdHN0LWNhbmNlbDE4IHRzdC1jYW5jZWwxOSB0c3QtY2FuY2VsMjAgXAorLQl0c3QtY2FuY2VsMjEgdHN0LWNhbmNlbDIyIHRzdC1jYW5jZWwyMyB0c3QtY2FuY2VsMjQgdHN0LWNhbmNlbDI1IFwKKysJdHN0LWNhbmNlbDIxIHRzdC1jYW5jZWwyMiB0c3QtY2FuY2VsMjMgdHN0LWNhbmNlbDI1IFwKKyAJdHN0LWNhbmNlbC1zZWxmIHRzdC1jYW5jZWwtc2VsZi1jYW5jZWxzdGF0ZSBcCisgCXRzdC1jYW5jZWwtc2VsZi1jYW5jZWx0eXBlIHRzdC1jYW5jZWwtc2VsZi10ZXN0Y2FuY2VsIFwKKyAJdHN0LWNsZWFudXAwIHRzdC1jbGVhbnVwMSB0c3QtY2xlYW51cDIgdHN0LWNsZWFudXAzIHRzdC1jbGVhbnVwNCBcCisgCXRzdC1mbG9jazEgdHN0LWZsb2NrMiBcCisgCXRzdC1zaWduYWwxIHRzdC1zaWduYWwyIHRzdC1zaWduYWwzIHRzdC1zaWduYWw0IHRzdC1zaWduYWw1IFwKKyAJdHN0LXNpZ25hbDYgdHN0LXNpZ25hbDcgXAorLQl0c3QtZXhlYzEgdHN0LWV4ZWMyIHRzdC1leGVjMyB0c3QtZXhlYzQgXAorKwl0c3QtZXhlYzIgdHN0LWV4ZWMzIHRzdC1leGVjNCBcCisgCXRzdC1leGl0MSB0c3QtZXhpdDIgdHN0LWV4aXQzIFwKKyAJdHN0LXN0ZGlvMSB0c3Qtc3RkaW8yIFwKKyAJdHN0LXN0YWNrMSB0c3Qtc3RhY2syIHRzdC1zdGFjazMgdHN0LXN0YWNrNCB0c3QtcHRocmVhZC1nZXRhdHRyIFwKK0BAIC0yNzEsMTMgKzI3NSwxMiBAQCB0ZXN0cyA9IHRzdC10eXBlc2l6ZXMgXAorIAl0c3QtdW5sb2FkIFwKKyAJdHN0LWRsc3ltMSBcCisgCXRzdC1zeXNjb25mIFwKKy0JdHN0LWxvY2FsZTEgdHN0LWxvY2FsZTIgXAorKwl0c3QtbG9jYWxlMiBcCisgCXRzdC11bWFzazEgXAorIAl0c3QtcG9wZW4xIFwKKyAJdHN0LWNsb2NrMSBcCisgCXRzdC1jb250ZXh0MSBcCisgCXRzdC1zY2hlZDEgXAorLQl0c3QtYmFja3RyYWNlMSBcCisgCXRzdC1hYnN0aW1lIFwKKyAJdHN0LXZmb3JrMSB0c3QtdmZvcmsyIHRzdC12Zm9yazF4IHRzdC12Zm9yazJ4IFwKKyAJdHN0LWdldHBpZDMgXAorQEAgLTI4OCw5ICsyOTEsMTYgQEAgeHRlc3RzID0gdHN0LXNldHVpZDEgdHN0LXNldHVpZDEtc3RhdGljIHRzdC1zZXR1aWQyIFwKKyAJdHN0LW11dGV4cHAxIHRzdC1tdXRleHBwNiB0c3QtbXV0ZXhwcDEwCisgdGVzdC1zcmNzID0gdHN0LW9kZHN0YWNrbGltaXQKKyAKKy0jIFRlc3QgZXhwZWN0ZWQgdG8gZmFpbCBvbiBtb3N0IHRhcmdldHMgKGV4Y2VwdCB4ODZfNjQpIGR1ZSB0byBidWcKKy0jIDE4NDM1IC0gcHRocmVhZF9vbmNlIGhhbmdzIHdoZW4gaW5pdCByb3V0aW5lIHRocm93cyBhbiBleGNlcHRpb24uCistdGVzdC14ZmFpbC10c3Qtb25jZTUgPSB5ZXMKKysjIFRoaXMgdGVzdCB1c2VzIHRoZSBwb3NpeF9zcGF3biBmdW5jdGlvbnMuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1NQQVdOKSArPSB0c3QtZXhlYzEKKysKKysjIFRoaXMgdGVzdCB1c2VzIHRoZSAnYmFja3RyYWNlJyBmdW5jdGlvbnMuCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0JBQ0tUUkFDRSkgKz0gdHN0LWJhY2t0cmFjZTEKKysKKysjIFRoaXMgdGVzdCBpcyB3cml0dGVuIGluIEMrKy4KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSB0c3QtY2FuY2VsMjQKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHRzdC1sb2NhbGUxCisgCisgIyBGaWxlcyB3aGljaCBtdXN0IG5vdCBiZSBsaW5rZWQgd2l0aCBsaWJwdGhyZWFkLgorIHRlc3RzLW5vbGlicHRocmVhZCA9IHRzdC11bmxvYWQKK2RpZmYgLS1naXQgYS9ucHRsL3B0aHJlYWRfY3JlYXRlLmMgYi9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKK2luZGV4IGQxMGY0ZWEuLjE0MjU3Y2UgMTAwNjQ0CistLS0gYS9ucHRsL3B0aHJlYWRfY3JlYXRlLmMKKysrKyBiL25wdGwvcHRocmVhZF9jcmVhdGUuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8ZGVmYXVsdC1zY2hlZC5oPgorICNpbmNsdWRlIDxmdXRleC1pbnRlcm5hbC5oPgorIAorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyAKKyAjaW5jbHVkZSA8c3RhcC1wcm9iZS5oPgorQEAgLTI2Miw4ICsyNjMsMTAgQEAgU1RBUlRfVEhSRUFEX0RFRk4KKyAgIFRIUkVBRF9TRVRNRU0gKHBkLCBjcHVjbG9ja19vZmZzZXQsIG5vdyk7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICAvKiBJbml0aWFsaXplIHJlc29sdmVyIHN0YXRlIHBvaW50ZXIuICAqLworICAgX19yZXNwID0gJnBkLT5yZXM7CisrI2VuZGlmCisgCisgICAvKiBJbml0aWFsaXplIHBvaW50ZXJzIHRvIGxvY2FsZSBkYXRhLiAgKi8KKyAgIF9fY3R5cGVfaW5pdCAoKTsKK0BAIC0zNDYsOCArMzQ5LDEwIEBAIFNUQVJUX1RIUkVBRF9ERUZOCisgICAvKiBSdW4gdGhlIGRlc3RydWN0b3IgZm9yIHRoZSB0aHJlYWQtbG9jYWwgZGF0YS4gICovCisgICBfX25wdGxfZGVhbGxvY2F0ZV90c2QgKCk7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICAvKiBDbGVhbiB1cCBhbnkgc3RhdGUgbGliYyBzdG9yZWQgaW4gdGhyZWFkLWxvY2FsIHZhcmlhYmxlcy4gICovCisgICBfX2xpYmNfdGhyZWFkX2ZyZWVyZXMgKCk7CisrI2VuZGlmCisgCisgICAvKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHRocmVhZCB3ZSB0ZXJtaW5hdGUgdGhlIHByb2Nlc3Mgbm93LiAgV2UKKyAgICAgIGRvIG5vdCBub3RpZnkgdGhlIGRlYnVnZ2VyLCBpdCBtaWdodCBqdXN0IGlycml0YXRlIGl0IGlmIHRoZXJlCitkaWZmIC0tZ2l0IGEvbnNjZC9NYWtlZmlsZSBiL25zY2QvTWFrZWZpbGUKK2luZGV4IGVkZTk0MWQuLmY0ZjNmOGQgMTAwNjQ0CistLS0gYS9uc2NkL01ha2VmaWxlCisrKysgYi9uc2NkL01ha2VmaWxlCitAQCAtMTgsMTQgKzE4LDE3IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBuc2NkIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gbnNjZAorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGlmbmVxICgkKHVzZS1uc2NkKSxubykKKy1yb3V0aW5lcyA6PSBuc2NkX2dldHB3X3IgbnNjZF9nZXRncl9yIG5zY2RfZ2V0aHN0X3IgbnNjZF9nZXRhaSBcCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IFwKKysJICAgICBuc2NkX2dldHB3X3IgbnNjZF9nZXRncl9yIG5zY2RfZ2V0aHN0X3IgbnNjZF9nZXRhaSBcCisgCSAgICBuc2NkX2luaXRncm91cHMgbnNjZF9nZXRzZXJ2X3IgbnNjZF9uZXRncm91cAorLWF1eAk6PSBuc2NkX2hlbHBlcgorK2F1eC0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZF9oZWxwZXIKKyBlbmRpZgorIAorICMgVG8gZmluZCB4bWFsbG9jLmMKK0BAIC0zNywxNCArNDAsMTggQEAgbnNjZC1tb2R1bGVzIDo9IG5zY2QgY29ubmVjdGlvbnMgcHdkY2FjaGUgZ2V0cHduYW1fciBnZXRwd3VpZF9yIGdycGNhY2hlIFwKKyAJCWRiZ19sb2cgbnNjZF9jb25mIG5zY2Rfc3RhdCBjYWNoZSBtZW0gbnNjZF9zZXR1cF90aHJlYWQgXAorIAkJeG1hbGxvYyB4c3RyZHVwIGFpY2FjaGUgaW5pdGdyY2FjaGUgZ2FpIHJlc19oY29uZiBcCisgCQluZXRncm91cGNhY2hlCistCisraWZuZXEgKHksJChPUFRJT05fRUdMSUJDX05JUykpCisrIyBJZiB3ZSBoYXZlbid0IGJ1aWxkIGxpYm5zbC5zbywgdGhlbiB3ZSdsbCBuZWVkIHRvIGluY2x1ZGUgb3VyCisrIyBvd24gY29weSBvZiBuaXNfaGFzaC4KKytuc2NkLW1vZHVsZXMgKz0gbmlzX2hhc2gKKytlbmRpZgorIGlmZXEgKCQoYnVpbGQtbnNjZCkkKGhhdmUtdGhyZWFkLWxpYnJhcnkpLHllc3llcykKKyAKKy1vdGhlcnMgKz0gbnNjZAorLW90aGVycy1waWUgKz0gbnNjZAorLWluc3RhbGwtc2JpbiA6PSBuc2NkCisrb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBuc2NkCisrb3RoZXJzLXBpZS0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZAorK2luc3RhbGwtc2Jpbi0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gbnNjZAorIAorLWV4dHJhLW9ianMgPSAkKG5zY2QtbW9kdWxlczo9Lm8pCisrZXh0cmEtb2Jqcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgKz0gJChuc2NkLW1vZHVsZXM6PS5vKQorIAorIGVuZGlmCisgCitAQCAtMTAwLDcgKzEwNywxNSBAQCBpbmNsdWRlICQocGF0c3Vic3QgJSwkKC4uKWNwcGZsYWdzLWl0ZXJhdG9yLm1rLCQoY3BwLXNyY3MtbGVmdCkpCisgJChvYmpwZngpbnNjZDogJChuc2NkLW1vZHVsZXM6JT0kKG9ianBmeCklLm8pCisgCisgaWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKy0kKG9ianBmeCluc2NkOiAkKHNoYXJlZC10aHJlYWQtbGlicmFyeSkgJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuc28KKyskKG9ianBmeCluc2NkOiAkKHNoYXJlZC10aHJlYWQtbGlicmFyeSkKKytlbHNlCisrJChvYmpwZngpbnNjZDogJChzdGF0aWMtdGhyZWFkLWxpYnJhcnkpCisrZW5kaWYKKysKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19OSVMpKQorK2lmZXEgKCQoYnVpbGQtc2hhcmVkKSx5ZXMpCisrJChvYmpwZngpbnNjZDogJChjb21tb24tb2JqcGZ4KW5pcy9saWJuc2wuc28KKyBlbHNlCistJChvYmpwZngpbnNjZDogJChzdGF0aWMtdGhyZWFkLWxpYnJhcnkpICQoY29tbW9uLW9ianBmeCluaXMvbGlibnNsLmEKKyskKG9ianBmeCluc2NkOiAkKGNvbW1vbi1vYmpwZngpbmlzL2xpYm5zbC5hCisrZW5kaWYKKyBlbmRpZgorZGlmZiAtLWdpdCBhL25zY2QvbmlzX2hhc2guYyBiL25zY2QvbmlzX2hhc2guYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQyNDRjNDEKKy0tLSAvZGV2L251bGwKKysrKyBiL25zY2QvbmlzX2hhc2guYworQEAgLTAsMCArMSwzIEBACisrLyogSWYgT1BUSU9OX0VHTElCQ19OSVMgaXMgZGlzYWJsZWQsIG5zY2QgY2FuJ3QgZ2V0IHRoaXMgZnJvbSBsaWJuc2wuc287CisrICAgd2UgbmVlZCBvdXIgb3duIGNvcHkuICAqLworKyNpbmNsdWRlICIuLi9uaXMvbmlzX2hhc2guYyIKK2RpZmYgLS1naXQgYS9uc3MvTWFrZWZpbGUgYi9uc3MvTWFrZWZpbGUKK2luZGV4IDY1YWI3YjUuLjE5ZjBhZWYgMTAwNjQ0CistLS0gYS9uc3MvTWFrZWZpbGUKKysrKyBiL25zcy9NYWtlZmlsZQorQEAgLTE4LDI4ICsxOCwzNSBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBuYW1lIHNlcnZpY2Ugc3dpdGNoLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IG5zcworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJCQk6PSBuc3MuaAorIAorLSMgVGhpcyBpcyB0aGUgdHJpdmlhbCBwYXJ0IHdoaWNoIGdvZXMgaW50byBsaWJjIGl0c2VsZi4KKy1yb3V0aW5lcwkJPSBuc3N3aXRjaCBnZXRuc3NlbnQgZ2V0bnNzZW50X3IgZGlnaXRzX2RvdHMgXAorLQkJCSAgJChhZGRzdWZmaXggLWxvb2t1cCwkKGRhdGFiYXNlcykpCistCisgIyBUaGVzZSBhcmUgdGhlIGRhdGFiYXNlcyB0aGF0IGdvIHRocm91Z2ggbnNzIGRpc3BhdGNoLgorICMgQ2F1dGlvbjogaWYgeW91IGFkZCBhIGRhdGFiYXNlIGhlcmUsIHlvdSBtdXN0IGFkZCBpdHMgcmVhbCBuYW1lCisgIyBpbiBkYXRhYmFzZXMuZGVmLCB0b28uCistZGF0YWJhc2VzCQk9IHByb3RvIHNlcnZpY2UgaG9zdHMgbmV0d29yayBncnAgcHdkIGV0aGVycyBcCistCQkJICBzcHdkIG5ldGdycCBhbGlhcyBzZ3JwCisrZGF0YWJhc2VzLXkJCT0gZ3JwIHB3ZCBzcHdkIHNncnAKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0lORVQpIFwKKysJCQkrPSBwcm90byBzZXJ2aWNlIGhvc3RzIG5ldHdvcmsgZXRoZXJzIFwKKysJCQkgICBuZXRncnAKKytkYXRhYmFzZXMtJChPUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMpICs9IGFsaWFzCisrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGRpZ2l0c19kb3RzCisgCisgaWZuZXEgKCwkKGZpbHRlciBzdW5ycGMsJChzdWJkaXJzKSkpCistZGF0YWJhc2VzCQkrPSBrZXkgcnBjCisrZGF0YWJhc2VzLSQoT1BUSU9OX0VHTElCQ19JTkVUKQkrPSBrZXkgcnBjCisgaGF2ZS1zdW5ycGMJCTo9IDEKKyBlbHNlCisgaGF2ZS1zdW5ycGMJCTo9IDAKKyBlbmRpZgorKyMgVGhpcyBpcyB0aGUgdHJpdmlhbCBwYXJ0IHdoaWNoIGdvZXMgaW50byBsaWJjIGl0c2VsZi4KKytyb3V0aW5lcy15CQkrPSBuc3N3aXRjaCBnZXRuc3NlbnQgZ2V0bnNzZW50X3IgXAorKwkJCSAgJChhZGRzdWZmaXggLWxvb2t1cCwkKGRhdGFiYXNlcy15KSkKKysKKyBDUFBGTEFHUy1nZXRlbnQuYwk9IC1ESEFWRV9TVU5SUEM9JChoYXZlLXN1bnJwYykKKyAKKyBvdGhlcnMgICAgICAgICAgICAgICAgICA6PSBnZXRlbnQgbWFrZWRiCitAQCAtNDcsOCArNTQsOSBAQCBpbnN0YWxsLWJpbiAgICAgICAgICAgICA6PSBnZXRlbnQgbWFrZWRiCisgbWFrZWRiLW1vZHVsZXMgPSB4bWFsbG9jIGhhc2gtc3RyaW5nCisgZXh0cmEtb2JqcwkJKz0gJChtYWtlZGItbW9kdWxlczo9Lm8pCisgCistdGVzdHMJCQk9IHRlc3QtbmV0ZGIgdHN0LW5zcy10ZXN0MSB0ZXN0LWRpZ2l0cy1kb3RzIHRzdC1uc3MtZ2V0cHdlbnQKKy14dGVzdHMJCQk9IGJ1Zy1lcmFuZ2UKKyt0ZXN0cwkJCT0gdHN0LW5zcy10ZXN0MSB0c3QtbnNzLWdldHB3ZW50CisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpCSs9IHRlc3QtbmV0ZGIgdGVzdC1kaWdpdHMtZG90cworK3h0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkJKz0gYnVnLWVyYW5nZQorIAorICMgU3BlY2lmeSBydWxlcyBmb3IgdGhlIG5zc18qIG1vZHVsZXMuICBXZSBoYXZlIHNvbWUgc2VydmljZXMuCisgc2VydmljZXMJCTo9IGZpbGVzIGRiCitAQCAtNjMsNyArNzEsNyBAQCBzdWJkaXItZGlycyA9ICQoc2VydmljZXM6JT1uc3NfJSkKKyB2cGF0aCAlLmMgJChzdWJkaXItZGlycykgLi4vbG9jYWxlL3Byb2dyYW1zIC4uL2ludGwKKyAKKyAKKy1saWJuc3NfZmlsZXMtcm91dGluZXMJOj0gJChhZGRwcmVmaXggZmlsZXMtLCQoZGF0YWJhc2VzKSkgXAorK2xpYm5zc19maWxlcy1yb3V0aW5lcwk6PSAkKGFkZHByZWZpeCBmaWxlcy0sJChkYXRhYmFzZXMteSkpIFwKKyAJCQkgICBmaWxlcy1pbml0Z3JvdXBzIGZpbGVzLWhhdmVfb19jbG9leGVjIGZpbGVzLWluaXQKKyAKKyBsaWJuc3NfZGItZGJzCQk6PSAkKGFkZHByZWZpeCBkYi0sXAorQEAgLTg2LDYgKzk0LDQ1IEBAIHRlc3RzLXN0YXRpYwkJPSB0c3QtbnNzLXN0YXRpYworIHRlc3RzCQkJKz0gJCh0ZXN0cy1zdGF0aWMpCisgZW5kaWYKKyAKKytpZm5lcSAoJChPUFRJT05fRUdMSUJDX05TU1dJVENIKSx5KQorKworK2lmbmRlZiBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRworKyQoZXJyb3IgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcgdmFyaWFibGUgbGVmdCB1bnNldCkKKytlbmRpZgorKworK2lmbmRlZiBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUworKyQoZXJyb3IgT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMgdmFyaWFibGUgbGVmdCB1bnNldCkKKytlbmRpZgorKworK2lmZXEgKCwkKHdpbGRjYXJkICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpKSkKKyskKHdhcm5pbmcgT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCwgYnV0IGZpeGVkIGNvbmZpZyBmaWxlKQorKyQoZXJyb3IgZG9lcyBub3QgZXhpc3Q6ICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9DT05GSUcpKQorK2VuZGlmCisrCisraWZlcSAoLCQod2lsZGNhcmQgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykpKQorKyQod2FybmluZyBPUFRJT05fRUdMSUJDX05TU1dJVENIIGlzIGRpc2FibGVkLCBidXQgZml4ZWQgZnVuY3Rpb25zIGZpbGUpCisrJChlcnJvciBkb2VzIG5vdCBleGlzdDogJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUykpCisrZW5kaWYKKysKKytiZWZvcmUtY29tcGlsZSA6PSAkKG9ianBmeClmaXhlZC1uc3N3aXRjaC5oCisrZ2VuZXJhdGVkIDo9IGZpeGVkLW5zc3dpdGNoLmgKKyskKG9ianBmeClmaXhlZC1uc3N3aXRjaC5oICQob2JqZnB4KWZpeGVkLW5zc3dpdGNoLWxpYnM6CVwKKysgICAgJChvYmpwZngpZ2VuLWZpeGVkLW5zc3dpdGNoCQkJCVwKKysgICAgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykKKysJJDwgJChvYmpwZngpZml4ZWQtbnNzd2l0Y2guaAkJCVwKKysJICAgJChvYmpwZngpZml4ZWQtbnNzd2l0Y2gtbGlicwkJCVwKKysJICAgJChPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0NPTkZJRykKKysKKyskKG9ianBmeClnZW4tZml4ZWQtbnNzd2l0Y2g6IGdlbi1maXhlZC1uc3N3aXRjaC5jCVwKKysgICAgJChjb21tb24tb2JqcGZ4KW9wdGlvbi1ncm91cHMuY29uZmlnCQlcCisrICAgICQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpCisrCSQobmF0aXZlLWNvbXBpbGUpCisrZ2VuLWZpeGVkLW5zc3dpdGNoLUNGTEFHUyA9CQkJCQkJXAorKwktZzMgLU8gLVdhbGwJCQkJCQkJXAorKwktSSAkKG9ianBmeCkJCQkJCQkJXAorKwktREZJWEVEX0ZVTkNUSU9OUz0nIiQoT1BUSU9OX0VHTElCQ19OU1NXSVRDSF9GSVhFRF9GVU5DVElPTlMpIicKKytlbmRpZgorKworIGluY2x1ZGUgLi4vUnVsZXMKKyAKKyBpZmVxICh5ZXMsJChoYXZlLXNlbGludXgpKQorZGlmZiAtLWdpdCBhL25zcy9maXhlZC1uc3N3aXRjaC5jb25mIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MWJiNjc1CistLS0gL2Rldi9udWxsCisrKysgYi9uc3MvZml4ZWQtbnNzd2l0Y2guY29uZgorQEAgLTAsMCArMSwyMiBAQAorKyMgL2V0Yy9uc3N3aXRjaC5jb25mCisrIworKyMgRXhhbXBsZSBjb25maWd1cmF0aW9uIGZvciBmaXhlZCBuYW1lIHNlcnZpY2UuCisrIyBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaW4gb3B0aW9uLWdyb3Vwcy5kZWYKKysjIGZvciBkZXRhaWxzLgorKyMKKysKKythbGlhc2VzOiAgICAgICAgZmlsZXMKKysKKytwYXNzd2Q6ICAgICAgICAgZmlsZXMKKytncm91cDogICAgICAgICAgZmlsZXMKKytzaGFkb3c6ICAgICAgICAgZmlsZXMKKysKKytob3N0czogICAgICAgICAgZmlsZXMgZG5zCisrbmV0d29ya3M6ICAgICAgIGZpbGVzIGRucworKworK3Byb3RvY29sczogICAgICBmaWxlcworK3NlcnZpY2VzOiAgICAgICBmaWxlcworK2V0aGVyczogICAgICAgICBmaWxlcworK3JwYzogICAgICAgICAgICBmaWxlcworKworK25ldGdyb3VwOiAgICAgICBmaWxlcworZGlmZiAtLWdpdCBhL25zcy9maXhlZC1uc3N3aXRjaC5mdW5jdGlvbnMgYi9uc3MvZml4ZWQtbnNzd2l0Y2guZnVuY3Rpb25zCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmYzZmE4MworLS0tIC9kZXYvbnVsbAorKysrIGIvbnNzL2ZpeGVkLW5zc3dpdGNoLmZ1bmN0aW9ucworQEAgLTAsMCArMSwxMjEgQEAKKysvKiBMaXN0IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGZvciBmaXhlZCBOU1MgaW4gR05VIEMgTGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBpcyBkaXNhYmxlZCAoc2VlIG9wdGlvbi1ncm91cHMuZGVmKSwKKysgICBFR0xJQkMgZG9lcyBub3QgdXNlIHRoZSAnZGxvcGVuJyBhbmQgJ2Rsc3ltJyBmdW5jdGlvbnMgdG8gbG9vayBmb3IKKysgICBkYXRhYmFzZSBxdWVyeSBmdW5jdGlvbnMgaW4gdGhlIGluZGl2aWR1YWwgbmFtZSBzZXJ2aWNlIGxpYnJhcmllcy4KKysgICBJbnN0ZWFkLCBpdCB1c2VzIGEgc2V0IG9mIGZ1bmN0aW9ucyBjaG9zZW4gYXQgY29tcGlsZSB0aW1lLCBhcworKyAgIGRpcmVjdGVkIGJ5IHRoZSBPUFRJT05fRUdMSUJDX05TU1dJVENIX0ZJWEVEX0ZVTkNUSU9OUyBmaWxlLiAgVGhpcworKyAgIGZpbGUgaXMgYSBzYW1wbGUgb2Ygd2hhdCB5b3UgbWlnaHQgdXNlIHRoZXJlLgorKworKyAgIFRoaXMgZmlsZSBpcyBDIHNvdXJjZSBjb2RlOyBpdCBzaG91bGQgb25seSBjb250YWluIGludm9jYXRpb25zIG9mCisrICAgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisrCisrICAgLSBERUZJTkVfRU5UIChEQVRBQkFTRSwgU0VSVklDRSwgWCkKKysKKysgICAgIERlY2xhcmUgdGhlICdzZXRYZW50JywgJ2dldFhlbnRfcicsIGFuZCAnZW5kWGVudCcgZnVuY3Rpb25zIHRoYXQKKysgICAgIHF1ZXJ5IERBVEFCQVNFIHVzaW5nIHRoZSBzZXJ2aWNlIGxpYnJhcnkgJ2xpYm5zc19TRVJWSUNFLnNvLjInLgorKyAgICAgREFUQUJBU0Ugc2hvdWxkIGJlIHRoZSBmdWxsIG5hbWUgb2YgdGhlIGRhdGFiYXNlIGFzIGl0IGFwcGVhcnMgaW4KKysgICAgICduc3N3aXRjaC5jb25mJywgbGlrZSAncGFzc3dkJyBvciAnYWxpYXNlcycuCisrCisrICAgICAoVGhlIG5vbi1yZWVudHJhbnQgJ2dldFhlbnQnIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMKKysgICAgIG9mIHRoZSByZWVudHJhbnQgJ2dldFhlbnRfcicgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisrICAgICByZWZlciB0byB0aGVtIGV4cGxpY2l0bHkgaGVyZS4pCisrCisrICAgLSBERUZJTkVfR0VUQlkgKERBVEFCQVNFLCBTRVJWSUNFLCBYLCBLRVkpCisrCisrICAgICBEZWNsYXJlIHRoZSAnZ2V0WGJ5S0VZX3InIGZ1bmN0aW9ucyB0aGF0IHF1ZXJ5IERBVEFCQVNFIHVzaW5nCisrICAgICBTRVJWSUNFLiAgREFUQUJBU0UgYW5kIFNFUlZJQ0UgYXJlIGFzIGRlc2NyaWJlZCBhYm92ZS4KKysKKysgICAgIChUaGUgbm9uLXJlZW50cmFudCAnZ2V0WGJ5S0VZJyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIGluIHRlcm1zCisrICAgICBvZiB0aGUgcmVlbnRyYW50ICdnZXRYYnlLRVlfcicgZnVuY3Rpb25zLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisrICAgICByZWZlciB0byB0aGVtIGV4cGxpY2l0bHkgaGVyZS4pCisrCisrICAgICBVc2UgdGhlIHNwZWNpYWwga2V5ICduYW1lMycgZm9yIHRoZSBzZXJ2aWNlIGxpYnJhcnkgZnVuY3Rpb24gdGhhdAorKyAgICAgaW1wbGVtZW50cyB0aGUgJ2dldGFkZHJpbmZvJyBmdW5jdGlvbi4KKysKKysgICAtIERFRklORV9HRVQgKERBVEFCQVNFLCBTRVJWSUNFLCBRVUVSWSkKKysKKysgICAgIERlY2xhcmUgdGhlICdnZXRRVUVSWV9yJyBmdW5jdGlvbnMgdGhhdCBxdWVyeSBEQVRBQkFTRSB1c2luZworKyAgICAgU0VSVklDRS4gIFRoaXMgaXMgdXNlZCBmb3IgZnVuY3Rpb25zIGxpa2UgJ2dldHB3bmFtJy4KKysKKysgICAgIChUaGUgbm9uLXJlZW50cmFudCAnZ2V0UVVFUlknIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMKKysgICAgIG9mIHRoZSByZWVudHJhbnQgJ2dldFFVRVJZX3InIGZ1bmN0aW9ucywgc28gdGhlcmUgaXMgbm8gbmVlZCB0bworKyAgICAgcmVmZXIgdG8gdGhlbSBleHBsaWNpdGx5IGhlcmUuKQorKworKyAgIFRoaXMgc2FtcGxlIGZpbGUgb25seSBpbmNsdWRlcyBmdW5jdGlvbnMgdGhhdCBjb25zdWx0IHRoZSBmaWxlcyBpbgorKyAgICcvZXRjJywgYW5kIHRoZSBEb21haW4gTmFtZSBTeXN0ZW0gKEROUykuICAqLworKworKy8qIGFsaWFzZXMgKi8KKytERUZJTkVfRU5UIChhbGlhc2VzLCBmaWxlcywgYWxpYXMpCisrREVGSU5FX0dFVEJZIChhbGlhc2VzLCBmaWxlcywgYWxpYXMsIG5hbWUpCisrCisrLyogZXRoZXJzICovCisrREVGSU5FX0VOVCAoZXRoZXJzLCBmaWxlcywgZXRoZXIpCisrCisrLyogZ3JvdXAgKi8KKytERUZJTkVfRU5UIChncm91cCwgZmlsZXMsIGdyKQorK0RFRklORV9HRVQgKGdyb3VwLCBmaWxlcywgZ3JnaWQpCisrREVGSU5FX0dFVCAoZ3JvdXAsIGZpbGVzLCBncm5hbSkKKysKKysvKiBob3N0cyAqLworK0RFRklORV9FTlQgKGhvc3RzLCBmaWxlcywgaG9zdCkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBmaWxlcywgaG9zdCwgYWRkcikKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBmaWxlcywgaG9zdCwgbmFtZSkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBmaWxlcywgaG9zdCwgbmFtZTIpCisrREVGSU5FX0dFVCAoaG9zdHMsIGZpbGVzLCBob3N0dG9uKQorK0RFRklORV9HRVQgKGhvc3RzLCBmaWxlcywgbnRvaG9zdCkKKytERUZJTkVfR0VUQlkgKGhvc3RzLCBkbnMsIGhvc3QsIGFkZHIpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBuYW1lKQorK0RFRklORV9HRVRCWSAoaG9zdHMsIGRucywgaG9zdCwgbmFtZTIpCisrREVGSU5FX0dFVEJZIChob3N0cywgZG5zLCBob3N0LCBuYW1lMykKKysKKysvKiBuZXRncm91cCAqLworK0RFRklORV9FTlQgKG5ldGdyb3VwLCBmaWxlcywgbmV0Z3IpCisrCisrLyogbmV0d29ya3MgKi8KKytERUZJTkVfRU5UIChuZXR3b3JrcywgZmlsZXMsIG5ldCkKKytERUZJTkVfR0VUQlkgKG5ldHdvcmtzLCBmaWxlcywgbmV0LCBuYW1lKQorK0RFRklORV9HRVRCWSAobmV0d29ya3MsIGZpbGVzLCBuZXQsIGFkZHIpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZG5zLCBuZXQsIG5hbWUpCisrREVGSU5FX0dFVEJZIChuZXR3b3JrcywgZG5zLCBuZXQsIGFkZHIpCisrCisrLyogcHJvdG9jb2xzICovCisrREVGSU5FX0VOVCAocHJvdG9jb2xzLCBmaWxlcywgcHJvdG8pCisrREVGSU5FX0dFVEJZIChwcm90b2NvbHMsIGZpbGVzLCBwcm90bywgbmFtZSkKKytERUZJTkVfR0VUQlkgKHByb3RvY29scywgZmlsZXMsIHByb3RvLCBudW1iZXIpCisrCisrLyogcGFzc3dkICovCisrREVGSU5FX0VOVCAocGFzc3dkLCBmaWxlcywgcHcpCisrREVGSU5FX0dFVCAocGFzc3dkLCBmaWxlcywgcHduYW0pCisrREVGSU5FX0dFVCAocGFzc3dkLCBmaWxlcywgcHd1aWQpCisrCisrLyogcnBjICovCisrREVGSU5FX0VOVCAocnBjLCBmaWxlcywgcnBjKQorK0RFRklORV9HRVRCWSAocnBjLCBmaWxlcywgcnBjLCBuYW1lKQorK0RFRklORV9HRVRCWSAocnBjLCBmaWxlcywgcnBjLCBudW1iZXIpCisrCisrLyogc2VydmljZXMgKi8KKytERUZJTkVfRU5UIChzZXJ2aWNlcywgZmlsZXMsIHNlcnYpCisrREVGSU5FX0dFVEJZIChzZXJ2aWNlcywgZmlsZXMsIHNlcnYsIG5hbWUpCisrREVGSU5FX0dFVEJZIChzZXJ2aWNlcywgZmlsZXMsIHNlcnYsIHBvcnQpCisrCisrLyogc2hhZG93ICovCisrREVGSU5FX0VOVCAoc2hhZG93LCBmaWxlcywgc3ApCisrREVGSU5FX0dFVCAoc2hhZG93LCBmaWxlcywgc3BuYW0pCitkaWZmIC0tZ2l0IGEvbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jIGIvbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNmUxYzk4YworLS0tIC9kZXYvbnVsbAorKysrIGIvbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jCitAQCAtMCwwICsxLDgwMyBAQAorKy8qIGdlbi1maXhlZC1uc3N3aXRjaC5jIC0tLSBnZW5lcmF0ZSBmaXhlZCBuYW1lIHNlcnZpY2UgZGF0YSBzdHJ1Y3R1cmVzCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTksIDIwMDEtMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZ251L2xpYi1uYW1lcy5oIgorKyNpbmNsdWRlICJuc3MuaCIKKysKKysvKiBQcm92aWRlIGEgZmFsbGJhY2sgZGVmaW5pdGlvbiB0byBhbGxvdyB0aGlzIGZpbGUgdG8gYmUgY29tcGlsZWQgb3V0c2lkZQorKyAgIGxpYmMuICAqLworKyNpZm5kZWYgaW50ZXJuYWxfZnVuY3Rpb24KKysjIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbgorKyNlbmRpZgorKworKwwKKysvKiBTaW1wbGUgdXRpbGl0aWVzLiAgKi8KKysKKyt2b2lkIF9fYXR0cmlidXRlX18gKChub3JldHVybikpCisrZXJyb3IgKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCisreworKyAgZnByaW50ZiAoc3RkZXJyLCAiJXNcbiIsIG1lc3NhZ2UpOworKyAgZXhpdCAoMSk7CisrfQorKworKworK3ZvaWQgKgorK2NoZWNrX2FsbG9jICh2b2lkICpwKQorK3sKKysgIGlmIChwKQorKyAgICByZXR1cm4gcDsKKysgIGVsc2UKKysgICAgZXJyb3IgKCJvdXQgb2YgbWVtb3J5Iik7CisrfQorKworK3ZvaWQgKgorK3htYWxsb2MgKHNpemVfdCBzaXplKQorK3sKKysgIHJldHVybiBjaGVja19hbGxvYyAobWFsbG9jIChzaXplKSk7CisrfQorKworKworKy8qIEZvcm1hdCBBUkdTIGFjY29yZGluZyB0byBGT1JNQVQsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhCisrICAgbWFsbG9jJ2VkIHN0cmluZy4gICovCisrY2hhciAqCisrc2FwcmludGYgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorK3sKKysgIHZhX2xpc3QgYXJnczsKKysgIHNpemVfdCBsZW47CisrICBjaGFyICpidWY7CisrCisrICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKysgIGxlbiA9IHZzbnByaW50ZiAoTlVMTCwgMCwgZm9ybWF0LCBhcmdzKTsKKysgIHZhX2VuZCAoYXJncyk7CisrCisrICBidWYgPSB4bWFsbG9jIChsZW4gKyAxKTsKKysgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworKyAgYXNzZXJ0IChsZW4gPT0gdnNucHJpbnRmIChidWYsIGxlbiArIDEsIGZvcm1hdCwgYXJncykpOworKyAgdmFfZW5kIChhcmdzKTsKKysKKysgIHJldHVybiBidWY7CisrfQorKworKworKwwKKysvKiBEYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW4gbWVtb3J5LiAgKi8KKysKKysvKiBUaGVzZSBhcmUgY29waWVkIGZyb20gbnNzd2l0Y2guaC4KKysKKysgICBXZSBjb3VsZCBzaW1wbHkgI2luY2x1ZGUgdGhhdCBmaWxlLCBidXQgdGhpcyBwcm9ncmFtIHJ1bnMgb24gdGhlCisrICAgYnVpbGQgbWFjaGluZSBhbmQgbGlua3MgYWdhaW5zdCB0aGUgYnVpbGQgbWFjaGluZSdzIGxpYnJhcmllcywKKysgICB3aGVyZWFzIHRoYXQgaGVhZGVyIGlzIG1lYW50IGZvciB1c2UgYnkgdGFyZ2V0IGNvZGU7IGl0IHVzZXMKKysgICAnbGliY19oaWRkZW5fcHJvdG8nLCAnaW50ZXJuYWxfZnVuY3Rpb24nLCBhbmQgcmVsYXRlZCBoYWlyLiAgU2luY2UKKysgICB3ZSd2ZSBjb3BpZWQgdGhlIHBhcnNpbmcgY29kZSwgd2UgbWlnaHQgYXMgd2VsbCBjb3B5IHRoZSBkYXRhCisrICAgc3RydWN0dXJlIGRlZmluaXRpb25zIGFzIHdlbGwuICAqLworKworKy8qIEFjdGlvbnMgcGVyZm9ybWVkIGFmdGVyIGxvb2t1cCBmaW5pc2hlZC4gICovCisrdHlwZWRlZiBlbnVtCisreworKyAgTlNTX0FDVElPTl9DT05USU5VRSwKKysgIE5TU19BQ1RJT05fUkVUVVJOCisrfSBsb29rdXBfYWN0aW9uczsKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBzZXJ2aWNlX2xpYnJhcnkKKyt7CisrICAvKiBOYW1lIG9mIHNlcnZpY2UgKGBmaWxlcycsIGBkbnMnLCBgbmlzJywgLi4uKS4gICovCisrICBjb25zdCBjaGFyICpuYW1lOworKyAgLyogUG9pbnRlciB0byB0aGUgbG9hZGVkIHNoYXJlZCBsaWJyYXJ5LiAgKi8KKysgIHZvaWQgKmxpYl9oYW5kbGU7CisrICAvKiBBbmQgdGhlIGxpbmsgdG8gdGhlIG5leHQgZW50cnkuICAqLworKyAgc3RydWN0IHNlcnZpY2VfbGlicmFyeSAqbmV4dDsKKyt9IHNlcnZpY2VfbGlicmFyeTsKKysKKysKKysvKiBGb3IgbWFwcGluZyBhIGZ1bmN0aW9uIG5hbWUgdG8gYSBmdW5jdGlvbiBwb2ludGVyLiAgSXQgaXMga25vd24gaW4KKysgICBuc3N3aXRjaC5jOm5zc19sb29rdXBfZnVuY3Rpb24gdGhhdCBhIHN0cmluZyBwb2ludGVyIGZvciB0aGUgbG9va3VwIGtleQorKyAgIGlzIHRoZSBmaXJzdCBtZW1iZXIuICAqLworK3R5cGVkZWYgc3RydWN0CisreworKyAgY29uc3QgY2hhciAqZmN0X25hbWU7CisrICB2b2lkICpmY3RfcHRyOworK30ga25vd25fZnVuY3Rpb247CisrCisrCisrdHlwZWRlZiBzdHJ1Y3Qgc2VydmljZV91c2VyCisreworKyAgLyogQW5kIHRoZSBsaW5rIHRvIHRoZSBuZXh0IGVudHJ5LiAgKi8KKysgIHN0cnVjdCBzZXJ2aWNlX3VzZXIgKm5leHQ7CisrICAvKiBBY3Rpb24gYWNjb3JkaW5nIHRvIHJlc3VsdC4gICovCisrICBsb29rdXBfYWN0aW9ucyBhY3Rpb25zWzVdOworKyAgLyogTGluayB0byB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IG9iamVjdC4gICovCisrICBzZXJ2aWNlX2xpYnJhcnkgKmxpYnJhcnk7CisrICAvKiBDb2xsZWN0aW9uIG9mIGtub3duIGZ1bmN0aW9ucy4KKysKKysgICAgIFdpdGggT1BUSU9OX0VHTElCQ19OU1NXSVRDSCBlbmFibGVkLCB0aGlzIGlzIHRoZSByb290IG9mIGEKKysgICAgICd0c2VhcmNoJy1zdHlsZSB0cmVlLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGRpc2FibGVkLCB0aGlzIGlzIGFuIGFycmF5IG9mCisrICAgICBwb2ludGVycyB0byBrbm93bl9mdW5jdGlvbiBzdHJ1Y3R1cmVzLCBOVUxMLXRlcm1pbmF0ZWQuICAqLworKyAgdW5pb24KKysgIHsKKysgICAgdm9pZCAqdHJlZTsKKysgICAgY29uc3Qga25vd25fZnVuY3Rpb24gKiphcnJheTsKKysgIH0ga25vd247CisrICAvKiBOYW1lIG9mIHRoZSBzZXJ2aWNlIChgZmlsZXMnLCBgZG5zJywgYG5pcycsIC4uLikuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKyt9IHNlcnZpY2VfdXNlcjsKKysKKysvKiBUbyBhY2Nlc3MgdGhlIGFjdGlvbiBiYXNlZCBvbiB0aGUgc3RhdHVzIHZhbHVlIHVzZSB0aGlzIG1hY3JvLiAgKi8KKysjZGVmaW5lIG5zc19uZXh0X2FjdGlvbihuaSwgc3RhdHVzKSAoKG5pKS0+YWN0aW9uc1syICsgc3RhdHVzXSkKKysKKysKKyt0eXBlZGVmIHN0cnVjdCBuYW1lX2RhdGFiYXNlX2VudHJ5CisreworKyAgLyogQW5kIHRoZSBsaW5rIHRvIHRoZSBuZXh0IGVudHJ5LiAgKi8KKysgIHN0cnVjdCBuYW1lX2RhdGFiYXNlX2VudHJ5ICpuZXh0OworKyAgLyogTGlzdCBvZiBzZXJ2aWNlIHRvIGJlIHVzZWQuICAqLworKyAgc2VydmljZV91c2VyICpzZXJ2aWNlOworKyAgLyogTmFtZSBvZiB0aGUgZGF0YWJhc2UuICAqLworKyAgY29uc3QgY2hhciAqbmFtZTsKKyt9IG5hbWVfZGF0YWJhc2VfZW50cnk7CisrCisrCisrdHlwZWRlZiBzdHJ1Y3QgbmFtZV9kYXRhYmFzZQorK3sKKysgIC8qIExpc3Qgb2YgYWxsIGtub3duIGRhdGFiYXNlcy4gICovCisrICBuYW1lX2RhdGFiYXNlX2VudHJ5ICplbnRyeTsKKysgIC8qIExpc3Qgb2YgbGlicmFyaWVzIHdpdGggc2VydmljZSBpbXBsZW1lbnRhdGlvbi4gICovCisrICBzZXJ2aWNlX2xpYnJhcnkgKmxpYnJhcnk7CisrfSBuYW1lX2RhdGFiYXNlOworKworKworKwwKKysvKiBHYXRoZXJpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBGSVhFRF9GVU5DVElPTlMgZmlsZS4gICovCisrCisrLyogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGdlbmVyYXRlIHRoaXMgbGlzdCBhdXRvbWF0aWNhbGx5IGJ5CisrICAgbG9va2luZyBhdCB0aGUgc2VydmljZXMgYW5kIGRhdGFiYXNlcyB1c2VkIGluIHRoZSBuc3N3aXRjaC5jb25mCisrICAgZmlsZSwgYW5kIGhhdmluZyBhIGhhcmQtY29kZWQgc2V0IG9mIHF1ZXJpZXMgc3VwcG9ydGVkIG9uIGVhY2gKKysgICBkYXRhYmFzZS4gICovCisrCisrLyogV2UgI2luY2x1ZGUgdGhlIEZJWEVEX0ZVTkNUSU9OUyBmaWxlIHNldmVyYWwgdGltZXMgdG8gYnVpbGQgYW4KKysgICBhcnJheSBvZiBmdW5jdGlvbiBzdHJ1Y3R1cmVzIGhvbGRpbmcgaXRzIGRhdGEuICAqLworK2VudW0gZnVuY3Rpb25fa2luZCB7CisrICBma19lbmQgPSAwLCAgICAgICAgICAgICAgICAgICAvKiBMYXN0IGVudHJ5LiAgKi8KKysgIGZrX3NldGVudCwgICAgICAgICAgICAgICAgICAgIC8qIExpa2Ugc2V0cHdlbnQuICAqLworKyAgZmtfZ2V0ZW50LCAgICAgICAgICAgICAgICAgICAgLyogTGlrZSBnZXRwd2VudC4gICovCisrICBma19lbmRlbnQsICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGVuZHB3ZW50LiAgKi8KKysgIGZrX2dldGJ5LCAgICAgICAgICAgICAgICAgICAgIC8qIExpa2UgZ2V0aG9zdGJ5bmFtZS4gICovCisrICBma19nZXQgICAgICAgICAgICAgICAgICAgICAgICAvKiBMaWtlIGdldHB3bmFtLiAgKi8KKyt9OworKworKworK3N0cnVjdCBmdW5jdGlvbiB7CisrICAvKiBXaGF0IGtpbmQgb2YgZnVuY3Rpb24gdGhpcyBpcy4gICovCisrICBlbnVtIGZ1bmN0aW9uX2tpbmQga2luZDsKKysKKysgIC8qIFRoZSBkYXRhYmFzZSBhbmQgc2VydmljZSBvZiB0aGUgZnVuY3Rpb24gYmVpbmcgaGFyZHdpcmVkIGluLiAgKi8KKysgIGNoYXIgKmRhdGFiYXNlLCAqc2VydmljZTsKKysKKysgIC8qIFRoZSBraW5kIG9mIGVudHJ5IGJlaW5nIHF1ZXJpZWQsIGZvciAnZmtfc2V0ZW50JywgJ2ZrX2dldGVudCcsCisrICAgICAnZmtfZW5kZW50JywgYW5kICdma19nZXRieScgZnVuY3Rpb25zLiAgKi8KKysgIGNoYXIgKmVudHJ5OworKworKyAgLyogVGhlIGtleSwgZm9yICdma19nZXRieScgZW50cmllcy4gICovCisrICBjaGFyICprZXk7CisrCisrICAvKiBUaGUgdmFsdWUgYW5kIGtleSwgZm9yICdma19nZXQnIGVudHJpZXMuICAqLworKyAgY2hhciAqdmFsdWVfYW5kX2tleTsKKyt9OworKworKworK2NvbnN0IHN0cnVjdCBmdW5jdGlvbiBmdW5jdGlvbnNbXSA9CisrICB7CisrCisrI2RlZmluZSBERUZJTkVfRU5UKGRhdGFiYXNlLCBzZXJ2aWNlLCBlbnRyeSkgICAgXAorKyAgICB7IGZrX3NldGVudCwgI2RhdGFiYXNlLCAjc2VydmljZSwgI2VudHJ5IH0sIFwKKysgICAgeyBma19nZXRlbnQsICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSB9LCBcCisrICAgIHsgZmtfZW5kZW50LCAjZGF0YWJhc2UsICNzZXJ2aWNlLCAjZW50cnkgfSwKKysjZGVmaW5lIERFRklORV9HRVRCWShkYXRhYmFzZSwgc2VydmljZSwgZW50cnksIGtleSkgICBcCisrICAgIHsgZmtfZ2V0YnksICNkYXRhYmFzZSwgI3NlcnZpY2UsICNlbnRyeSwgI2tleSB9LAorKyNkZWZpbmUgREVGSU5FX0dFVChkYXRhYmFzZSwgc2VydmljZSwgdmFsdWVfYW5kX2tleSkgICAgIFwKKysgICAgeyBma19nZXQsICNkYXRhYmFzZSwgI3NlcnZpY2UsIE5VTEwsIE5VTEwsICN2YWx1ZV9hbmRfa2V5IH0sCisrCisrI2luY2x1ZGUgRklYRURfRlVOQ1RJT05TCisrCisrI3VuZGVmIERFRklORV9FTlQKKysjdW5kZWYgREVGSU5FX0dFVEJZCisrI3VuZGVmIERFRklORV9HRVQKKysKKysgICAgeyBma19lbmQgfQorKyAgfTsKKysKKysMCisrLyogUGFyc2luZyB0aGUgY29uZmlnIGZpbGUuICBGdW5jdGlvbnMgY29waWVkIGZyb20gbnNzd2l0Y2guYy4gICovCisrCisrI2RlZmluZSBfX3N0cmNocm51bCBzdHJjaHJudWwKKysjZGVmaW5lIF9fZ2V0bGluZSBnZXRsaW5lCisrI2RlZmluZSBfX3N0cm5jYXNlY21wIHN0cm5jYXNlY21wCisrCisrLyogUHJvdG90eXBlcyBmb3IgdGhlIGxvY2FsIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIG5hbWVfZGF0YWJhc2UgKm5zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkgaW50ZXJuYWxfZnVuY3Rpb247Cisrc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKm5zc19nZXRsaW5lIChjaGFyICpsaW5lKSBpbnRlcm5hbF9mdW5jdGlvbjsKKytzdGF0aWMgc2VydmljZV91c2VyICpuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisrCisrc3RhdGljIG5hbWVfZGF0YWJhc2UgKgorK2ludGVybmFsX2Z1bmN0aW9uCisrbnNzX3BhcnNlX2ZpbGUgKGNvbnN0IGNoYXIgKmZuYW1lKQorK3sKKysgIEZJTEUgKmZwOworKyAgbmFtZV9kYXRhYmFzZSAqcmVzdWx0OworKyAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqbGFzdDsKKysgIGNoYXIgKmxpbmU7CisrICBzaXplX3QgbGVuOworKworKyAgLyogT3BlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiAgKi8KKysgIGZwID0gZm9wZW4gKGZuYW1lLCAicmMiKTsKKysgIGlmIChmcCA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8vIC8qIE5vIHRocmVhZHMgdXNlIHRoaXMgc3RyZWFtLiAgKi8KKysgIC8vIF9fZnNldGxvY2tpbmcgKGZwLCBGU0VUTE9DS0lOR19CWUNBTExFUik7CisrCisrICByZXN1bHQgPSAobmFtZV9kYXRhYmFzZSAqKSB4bWFsbG9jIChzaXplb2YgKG5hbWVfZGF0YWJhc2UpKTsKKysKKysgIHJlc3VsdC0+ZW50cnkgPSBOVUxMOworKyAgcmVzdWx0LT5saWJyYXJ5ID0gTlVMTDsKKysgIGxhc3QgPSBOVUxMOworKyAgbGluZSA9IE5VTEw7CisrICBsZW4gPSAwOworKyAgZG8KKysgICAgeworKyAgICAgIG5hbWVfZGF0YWJhc2VfZW50cnkgKnRoaXM7CisrICAgICAgc3NpemVfdCBuOworKworKyAgICAgIG4gPSBfX2dldGxpbmUgKCZsaW5lLCAmbGVuLCBmcCk7CisrICAgICAgaWYgKG4gPCAwKQorKwlicmVhazsKKysgICAgICBpZiAobGluZVtuIC0gMV0gPT0gJ1xuJykKKysJbGluZVtuIC0gMV0gPSAnXDAnOworKworKyAgICAgIC8qIEJlY2F1c2UgdGhlIGZpbGUgZm9ybWF0IGRvZXMgbm90IGtub3cgYW55IGZvcm0gb2YgcXVvdGluZyB3ZQorKwkgY2FuIHNlYXJjaCBmb3J3YXJkIGZvciB0aGUgbmV4dCAnIycgY2hhcmFjdGVyIGFuZCBpZiBmb3VuZAorKwkgbWFrZSBpdCB0ZXJtaW5hdGluZyB0aGUgbGluZS4gICovCisrICAgICAgKl9fc3RyY2hybnVsIChsaW5lLCAnIycpID0gJ1wwJzsKKysKKysgICAgICAvKiBJZiB0aGUgbGluZSBpcyBibGFuayBpdCBpcyBpZ25vcmVkLiAgKi8KKysgICAgICBpZiAobGluZVswXSA9PSAnXDAnKQorKwljb250aW51ZTsKKysKKysgICAgICAvKiBFYWNoIGxpbmUgY29tcGxldGVseSBzcGVjaWZpZXMgdGhlIGFjdGlvbnMgZm9yIGEgZGF0YWJhc2UuICAqLworKyAgICAgIHRoaXMgPSBuc3NfZ2V0bGluZSAobGluZSk7CisrICAgICAgaWYgKHRoaXMgIT0gTlVMTCkKKysJeworKwkgIGlmIChsYXN0ICE9IE5VTEwpCisrCSAgICBsYXN0LT5uZXh0ID0gdGhpczsKKysJICBlbHNlCisrCSAgICByZXN1bHQtPmVudHJ5ID0gdGhpczsKKysKKysJICBsYXN0ID0gdGhpczsKKysJfQorKyAgICB9CisrICB3aGlsZSAoIWZlb2ZfdW5sb2NrZWQgKGZwKSk7CisrCisrICAvKiBGcmVlIHRoZSBidWZmZXIuICAqLworKyAgZnJlZSAobGluZSk7CisrICAvKiBDbG9zZSBjb25maWd1cmF0aW9uIGZpbGUuICAqLworKyAgZmNsb3NlIChmcCk7CisrCisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKysvKiBSZWFkIHRoZSBzb3VyY2UgbmFtZXM6CisrCWAoIDxzb3VyY2U+ICggIlsiICIhIj8gKDxzdGF0dXM+ICI9IiA8YWN0aW9uPiApKyAiXSIgKT8gKSonCisrICAgKi8KKytzdGF0aWMgc2VydmljZV91c2VyICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK25zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisreworKyAgc2VydmljZV91c2VyICpyZXN1bHQgPSBOVUxMLCAqKm5leHRwID0gJnJlc3VsdDsKKysKKysgIHdoaWxlICgxKQorKyAgICB7CisrICAgICAgc2VydmljZV91c2VyICpuZXdfc2VydmljZTsKKysgICAgICBjb25zdCBjaGFyICpuYW1lOworKworKyAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJKytsaW5lOworKyAgICAgIGlmIChsaW5lWzBdID09ICdcMCcpCisrCS8qIE5vIHNvdXJjZSBzcGVjaWZpZWQuICAqLworKwlyZXR1cm4gcmVzdWx0OworKworKyAgICAgIC8qIFJlYWQgPHNvdXJjZT4gaWRlbnRpZmllci4gICovCisrICAgICAgbmFtZSA9IGxpbmU7CisrICAgICAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnWycpCisrCSsrbGluZTsKKysgICAgICBpZiAobmFtZSA9PSBsaW5lKQorKwlyZXR1cm4gcmVzdWx0OworKworKworKyAgICAgIG5ld19zZXJ2aWNlID0gKHNlcnZpY2VfdXNlciAqKSB4bWFsbG9jIChzaXplb2YgKCpuZXdfc2VydmljZSkpOworKyAgICAgIG5ld19zZXJ2aWNlLT5uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAobGluZSAtIG5hbWUgKyAxKTsKKysKKysgICAgICAqKChjaGFyICopIF9fbWVtcGNweSAoKGNoYXIgKikgbmV3X3NlcnZpY2UtPm5hbWUsIG5hbWUsIGxpbmUgLSBuYW1lKSkKKysgICAgICAgID0gJ1wwJzsKKysKKysgICAgICAvKiBTZXQgZGVmYXVsdCBhY3Rpb25zLiAgKi8KKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19UUllBR0FJTl0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1VOQVZBSUxdID0gTlNTX0FDVElPTl9DT05USU5VRTsKKysgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19OT1RGT1VORF0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKyAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1NVQ0NFU1NdID0gTlNTX0FDVElPTl9SRVRVUk47CisrICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfUkVUVVJOXSA9IE5TU19BQ1RJT05fUkVUVVJOOworKyAgICAgIG5ld19zZXJ2aWNlLT5saWJyYXJ5ID0gTlVMTDsKKysgICAgICBuZXdfc2VydmljZS0+a25vd24udHJlZSA9IE5VTEw7CisrICAgICAgbmV3X3NlcnZpY2UtPm5leHQgPSBOVUxMOworKworKyAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysJKytsaW5lOworKworKyAgICAgIGlmIChsaW5lWzBdID09ICdbJykKKysJeworKwkgIC8qIFJlYWQgY3JpdGVyaW9ucy4gICovCisrCSAgZG8KKysJICAgICsrbGluZTsKKysJICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmIGlzc3BhY2UgKGxpbmVbMF0pKTsKKysKKysJICBkbworKwkgICAgeworKwkgICAgICBpbnQgbm90OworKwkgICAgICBlbnVtIG5zc19zdGF0dXMgc3RhdHVzOworKwkgICAgICBsb29rdXBfYWN0aW9ucyBhY3Rpb247CisrCisrCSAgICAgIC8qIEdyb2sgISBiZWZvcmUgbmFtZSB0byBtZWFuIGFsbCBzdGF0aWkgYnV0IHRoYXQgb25lLiAgKi8KKysJICAgICAgbm90ID0gbGluZVswXSA9PSAnISc7CisrCSAgICAgIGlmIChub3QpCisrCQkrK2xpbmU7CisrCisrCSAgICAgIC8qIFJlYWQgc3RhdHVzIG5hbWUuICAqLworKwkgICAgICBuYW1lID0gbGluZTsKKysJICAgICAgd2hpbGUgKGxpbmVbMF0gIT0gJ1wwJyAmJiAhaXNzcGFjZSAobGluZVswXSkgJiYgbGluZVswXSAhPSAnPScKKysJCSAgICAgJiYgbGluZVswXSAhPSAnXScpCisrCQkrK2xpbmU7CisrCisrCSAgICAgIC8qIENvbXBhcmUgd2l0aCBrbm93biBzdGF0aWkuICAqLworKwkgICAgICBpZiAobGluZSAtIG5hbWUgPT0gNykKKysJCXsKKysJCSAgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJTVUNDRVNTIiwgNykgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX1NVQ0NFU1M7CisrCQkgIGVsc2UgaWYgKF9fc3RybmNhc2VjbXAgKG5hbWUsICJVTkFWQUlMIiwgNykgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX1VOQVZBSUw7CisrCQkgIGVsc2UKKysJCSAgICByZXR1cm4gcmVzdWx0OworKwkJfQorKwkgICAgICBlbHNlIGlmIChsaW5lIC0gbmFtZSA9PSA4KQorKwkJeworKwkJICBpZiAoX19zdHJuY2FzZWNtcCAobmFtZSwgIk5PVEZPVU5EIiwgOCkgPT0gMCkKKysJCSAgICBzdGF0dXMgPSBOU1NfU1RBVFVTX05PVEZPVU5EOworKwkJICBlbHNlIGlmIChfX3N0cm5jYXNlY21wIChuYW1lLCAiVFJZQUdBSU4iLCA4KSA9PSAwKQorKwkJICAgIHN0YXR1cyA9IE5TU19TVEFUVVNfVFJZQUdBSU47CisrCQkgIGVsc2UKKysJCSAgICByZXR1cm4gcmVzdWx0OworKwkJfQorKwkgICAgICBlbHNlCisrCQlyZXR1cm4gcmVzdWx0OworKworKwkgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCQkrK2xpbmU7CisrCSAgICAgIGlmIChsaW5lWzBdICE9ICc9JykKKysJCXJldHVybiByZXN1bHQ7CisrCSAgICAgIGRvCisrCQkrK2xpbmU7CisrCSAgICAgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSk7CisrCisrCSAgICAgIG5hbWUgPSBsaW5lOworKwkgICAgICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICc9JworKwkJICAgICAmJiBsaW5lWzBdICE9ICddJykKKysJCSsrbGluZTsKKysKKysJICAgICAgaWYgKGxpbmUgLSBuYW1lID09IDYgJiYgX19zdHJuY2FzZWNtcCAobmFtZSwgIlJFVFVSTiIsIDYpID09IDApCisrCQlhY3Rpb24gPSBOU1NfQUNUSU9OX1JFVFVSTjsKKysJICAgICAgZWxzZSBpZiAobGluZSAtIG5hbWUgPT0gOAorKwkJICAgICAgICYmIF9fc3RybmNhc2VjbXAgKG5hbWUsICJDT05USU5VRSIsIDgpID09IDApCisrCQlhY3Rpb24gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworKwkgICAgICBlbHNlCisrCQlyZXR1cm4gcmVzdWx0OworKworKwkgICAgICBpZiAobm90KQorKwkJeworKwkJICAvKiBTYXZlIHRoZSBjdXJyZW50IGFjdGlvbiBzZXR0aW5nIGZvciB0aGlzIHN0YXR1cywKKysJCSAgICAgc2V0IHRoZW0gYWxsIHRvIHRoZSBnaXZlbiBhY3Rpb24sIGFuZCByZXNldCB0aGlzIG9uZS4gICovCisrCQkgIGNvbnN0IGxvb2t1cF9hY3Rpb25zIHNhdmUgPSBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgc3RhdHVzXTsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfVFJZQUdBSU5dID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19VTkFWQUlMXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfTk9URk9VTkRdID0gYWN0aW9uOworKwkJICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19TVUNDRVNTXSA9IGFjdGlvbjsKKysJCSAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIHN0YXR1c10gPSBzYXZlOworKwkJfQorKwkgICAgICBlbHNlCisrCQluZXdfc2VydmljZS0+YWN0aW9uc1syICsgc3RhdHVzXSA9IGFjdGlvbjsKKysKKysJICAgICAgLyogU2tpcCB3aGl0ZSBzcGFjZXMuICAqLworKwkgICAgICB3aGlsZSAoaXNzcGFjZSAobGluZVswXSkpCisrCQkrK2xpbmU7CisrCSAgICB9CisrCSAgd2hpbGUgKGxpbmVbMF0gIT0gJ10nKTsKKysKKysJICAvKiBTa2lwIHRoZSAnXScuICAqLworKwkgICsrbGluZTsKKysJfQorKworKyAgICAgICpuZXh0cCA9IG5ld19zZXJ2aWNlOworKyAgICAgIG5leHRwID0gJm5ld19zZXJ2aWNlLT5uZXh0OworKyAgICB9CisrfQorKworK3N0YXRpYyBuYW1lX2RhdGFiYXNlX2VudHJ5ICoKKytpbnRlcm5hbF9mdW5jdGlvbgorK25zc19nZXRsaW5lIChjaGFyICpsaW5lKQorK3sKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBuYW1lX2RhdGFiYXNlX2VudHJ5ICpyZXN1bHQ7CisrICBzaXplX3QgbGVuOworKworKyAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGUgc3BhY2VzLiAgQVRURU5USU9OOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tCisrICAgICB3aGF0IGlzIGltcGxlbWVudGVkIGluIFNvbGFyaXMuICBUaGUgU29sYXJpcyBtYW4gcGFnZSBzYXlzIGEgbGluZQorKyAgICAgYmVnaW5uaW5nIHdpdGggYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIgaXMgaWdub3JlZC4gIFdlIHJlZ2FyZAorKyAgICAgdGhpcyBhcyBqdXN0IGFub3RoZXIgbWlzZmVhdHVyZSBpbiBTb2xhcmlzLiAgKi8KKysgIHdoaWxlIChpc3NwYWNlIChsaW5lWzBdKSkKKysgICAgKytsaW5lOworKworKyAgLyogUmVjb2duaXplIGA8ZGF0YWJhc2U+ICI6IicuICAqLworKyAgbmFtZSA9IGxpbmU7CisrICB3aGlsZSAobGluZVswXSAhPSAnXDAnICYmICFpc3NwYWNlIChsaW5lWzBdKSAmJiBsaW5lWzBdICE9ICc6JykKKysgICAgKytsaW5lOworKyAgaWYgKGxpbmVbMF0gPT0gJ1wwJyB8fCBuYW1lID09IGxpbmUpCisrICAgIC8qIFN5bnRheCBlcnJvci4gICovCisrICAgIHJldHVybiBOVUxMOworKyAgKmxpbmUrKyA9ICdcMCc7CisrCisrICBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMTsKKysKKysgIHJlc3VsdCA9IChuYW1lX2RhdGFiYXNlX2VudHJ5ICopIHhtYWxsb2MgKHNpemVvZiAoKnJlc3VsdCkpOworKyAgcmVzdWx0LT5uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAobGVuKTsKKysKKysgIC8qIFNhdmUgdGhlIGRhdGFiYXNlIG5hbWUuICAqLworKyAgbWVtY3B5ICgoY2hhciAqKSByZXN1bHQtPm5hbWUsIG5hbWUsIGxlbik7CisrCisrICAvKiBQYXJzZSB0aGUgbGlzdCBvZiBzZXJ2aWNlcy4gICovCisrICByZXN1bHQtPnNlcnZpY2UgPSBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChsaW5lKTsKKysKKysgIHJlc3VsdC0+bmV4dCA9IE5VTEw7CisrICByZXR1cm4gcmVzdWx0OworK30KKysKKysKKysMCisrLyogR2VuZXJhdGluZyBjb2RlIGZvciBzdGF0aWNhbGx5IGluaXRpYWxpemVkIG5zc3dpdGNoIHN0cnVjdHVyZXMuICAqLworKworKworKy8qIFJldHVybiB0aGUgc2VydmljZS1uZXV0cmFsIHN1ZmZpeCBvZiB0aGUgbmFtZSBvZiB0aGUgc2VydmljZQorKyAgIGxpYnJhcnkgZnVuY3Rpb24gcmVmZXJyZWQgdG8gYnkgdGhlIGZ1bmN0aW9uIEYuICBUaGUgcmVzdWx0IGlzCisrICAgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KKytjaGFyICoKKytrbm93bl9mdW5jdGlvbl9zdWZmaXggKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZikKKyt7CisrICBzd2l0Y2ggKGYtPmtpbmQpCisrICAgIHsKKysgICAgY2FzZSBma19zZXRlbnQ6CisrICAgICAgcmV0dXJuIHNhcHJpbnRmICgic2V0JXNlbnQiLCBmLT5lbnRyeSk7CisrCisrICAgIGNhc2UgZmtfZ2V0ZW50OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImdldCVzZW50X3IiLCBmLT5lbnRyeSk7CisrCisrICAgIGNhc2UgZmtfZW5kZW50OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImVuZCVzZW50IiwgZi0+ZW50cnkpOworKworKyAgICBjYXNlIGZrX2dldGJ5OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImdldCVzYnklc19yIiwgZi0+ZW50cnksIGYtPmtleSk7CisrCisrICAgIGNhc2UgZmtfZ2V0OgorKyAgICAgIHJldHVybiBzYXByaW50ZiAoImdldCVzX3IiLCBmLT52YWx1ZV9hbmRfa2V5KTsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICBhYm9ydCAoKTsKKysgICAgfQorK30KKysKKysKKysvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgbGlicmFyeSBmdW5jdGlvbiByZWZlcnJlZCB0byBieSB0aGUKKysgICBmdW5jdGlvbiBGLiAgVGhlIHJlc3VsdCBpcyBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MuICAqLworK2NoYXIgKgorK2tub3duX2Z1bmN0aW9uX25hbWUgKGNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZikKKyt7CisrICByZXR1cm4gc2FwcmludGYgKCJfbnNzXyVzXyVzIiwgZi0+c2VydmljZSwga25vd25fZnVuY3Rpb25fc3VmZml4IChmKSk7CisrfQorKworKworKy8qIFdyaXRlIGluaXRpYWxpemVkIGtub3duX2Z1bmN0aW9uIHN0cnVjdHVyZXMgdG8gT1VUIGZvcgorKyAgIGFsbCB0aGUgZnVuY3Rpb25zIHdlJ2xsIHVzZS4gICovCisrdm9pZAorK2dlbmVyYXRlX2tub3duX2Z1bmN0aW9ucyAoRklMRSAqb3V0KQorK3sKKysgIGludCBpOworKworKyAgLyogRmlyc3QsIGdlbmVyYXRlIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgZnVuY3Rpb25zLiAgVGhlIHNlcnZpY2UKKysgICAgIGxpYnJhcmllcyBkZXBlbmQgb24gbGliYywgYW5kIGlmIHRoZXNlIHJlZmVyZW5jZXMgd2VyZW4ndCB3ZWFrLAorKyAgICAgd2UnZCBiZSBtYWtpbmcgbGliYyBkZXBlbmQgY2lyY3VsYXJseSBvbiB0aGUgc2VydmljZQorKyAgICAgbGlicmFyaWVzLiAgKi8KKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIHsKKysgICAgICBjaGFyICpuYW1lID0ga25vd25fZnVuY3Rpb25fbmFtZSAoJmZ1bmN0aW9uc1tpXSk7CisrICAgICAgZnByaW50ZiAob3V0LCAidHlwZW9mICglcykgJXMgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTtcbiIsCisrICAgICAgICAgICAgICAgbmFtZSwgbmFtZSk7CisrICAgIH0KKysgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgLyogVGhlbiwgYSB0YWJsZSBtYXBwaW5nIG5hbWVzIHRvIGZ1bmN0aW9ucy4gICovCisrICBmcHV0cyAoInN0YXRpYyBjb25zdCBrbm93bl9mdW5jdGlvbiBmaXhlZF9rbm93bl9mdW5jdGlvbnNbXSA9IHtcbiIsCisrICAgICAgICAgb3V0KTsKKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gKmYgPSAmZnVuY3Rpb25zW2ldOworKyAgICAgIGNoYXIgKnN1ZmZpeCA9IGtub3duX2Z1bmN0aW9uX3N1ZmZpeCAoZik7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAiICAvKiAlMmQgKi8geyBcIiVzXCIsIF9uc3NfJXNfJXMgfSxcbiIsCisrICAgICAgICAgICAgICAgaSwgc3VmZml4LCBmLT5zZXJ2aWNlLCBzdWZmaXgpOworKyAgICB9CisrICBmcHV0cyAoIn07XG4iLCBvdXQpOworKyAgZnB1dHMgKCJcbiIsIG91dCk7CisrfQorKworKworKy8qIFByaW50IGNvZGUgdG8gT1VUIGZvciBhbiBpbml0aWFsaXplZCBhcnJheSBvZiBwb2ludGVycyB0byB0aGUKKysgICAna25vd25fZnVuY3Rpb24nIHN0cnVjdHVyZXMgbmVlZGVkIGZvciBVU0VSLCB3aGljaCBpcyBmb3IKKysgICBEQVRBQkFTRS4gIFJldHVybiBpdHMgbmFtZSwgYWxsb2NhdGVkIHdpdGggbWFsbG9jLiAgKi8KKytjaGFyICoKKytnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbl9saXN0IChGSUxFICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGF0YWJhc2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZV91c2VyICp1c2VyKQorK3sKKysgIGNoYXIgKmxpc3RfbmFtZSA9IHNhcHJpbnRmICgiZml4ZWRfJXNfJXNfa25vd25fZnVuY3MiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlLT5uYW1lLCB1c2VyLT5uYW1lKTsKKysgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBrbm93bl9mdW5jdGlvbiAqJXNbXSA9IHtcbiIsCisrICAgICAgICAgICBsaXN0X25hbWUpOworKyAgaW50IGk7CisrICBmb3IgKGkgPSAwOyBmdW5jdGlvbnNbaV0ua2luZDsgaSsrKQorKyAgICBpZiAoc3RyY21wIChmdW5jdGlvbnNbaV0uZGF0YWJhc2UsIGRhdGFiYXNlLT5uYW1lKSA9PSAwCisrICAgICAgICAmJiBzdHJjbXAgKGZ1bmN0aW9uc1tpXS5zZXJ2aWNlLCB1c2VyLT5uYW1lKSA9PSAwKQorKyAgICAgIGZwcmludGYgKG91dCwgIiAgJmZpeGVkX2tub3duX2Z1bmN0aW9uc1slZF0sIC8qICVzICovXG4iLAorKyAgICAgICAgICAgICAgIGksIGtub3duX2Z1bmN0aW9uX25hbWUgKCZmdW5jdGlvbnNbaV0pKTsKKysgIGZwdXRzICgiICBOVUxMXG4iLCBvdXQpOworKyAgZnB1dHMgKCJ9O1xuIiwgb3V0KTsKKysgIGZwdXRzICgiXG4iLCBvdXQpOworKworKyAgcmV0dXJuIGxpc3RfbmFtZTsKKyt9CisrCisrCisrLyogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzdGF0dXMgdmFsdWUgU1RBVFVTLCBhcyBhIHN0YXRpY2FsbHkKKysgICBhbGxvY2F0ZWQgc3RyaW5nLiAgKi8KKytjb25zdCBjaGFyICoKKytsb29rdXBfc3RhdHVzX25hbWUgKGVudW0gbnNzX3N0YXR1cyBzdGF0dXMpCisreworKyAgc3dpdGNoIChzdGF0dXMpCisrICAgIHsKKysgICAgY2FzZSBOU1NfU1RBVFVTX1RSWUFHQUlOOiByZXR1cm4gIk5TU19TVEFUVVNfVFJZQUdBSU4iOworKyAgICBjYXNlIE5TU19TVEFUVVNfVU5BVkFJTDogcmV0dXJuICJOU1NfU1RBVFVTX1VOQVZBSUwiOworKyAgICBjYXNlIE5TU19TVEFUVVNfTk9URk9VTkQ6IHJldHVybiAiTlNTX1NUQVRVU19OT1RGT1VORCI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19TVUNDRVNTOiByZXR1cm4gIk5TU19TVEFUVVNfU1VDQ0VTUyI7CisrICAgIGNhc2UgTlNTX1NUQVRVU19SRVRVUk46IHJldHVybiAiTlNTX1NUQVRVU19SRVRVUk4iOworKyAgICBkZWZhdWx0OiBhYm9ydCAoKTsKKysgICAgfTsKKyt9CisrCisrCisrLyogUmV0dXJuIHRoZSBuYW1lIG9mIEFDVElPTiBhcyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHN0cmluZy4gICovCisrY29uc3QgY2hhciAqCisrbG9va3VwX2FjdGlvbl9uYW1lIChsb29rdXBfYWN0aW9ucyBhY3Rpb24pCisreworKyAgc3dpdGNoIChhY3Rpb24pCisrICAgIHsKKysgICAgY2FzZSBOU1NfQUNUSU9OX0NPTlRJTlVFOiByZXR1cm4gIk5TU19BQ1RJT05fQ09OVElOVUUiOworKyAgICBjYXNlIE5TU19BQ1RJT05fUkVUVVJOOiByZXR1cm4gIk5TU19BQ1RJT05fUkVUVVJOIjsKKysgICAgZGVmYXVsdDogYWJvcnQgKCk7CisrICAgIH0KKyt9CisrCisrCisrLyogUHJpbnQgY29kZSB0byBPVVQgZm9yIHRoZSBsaXN0IG9mIHNlcnZpY2VfdXNlciBzdHJ1Y3R1cmVzIHN0YXJ0aW5nCisrICAgd2l0aCBVU0VSLCB3aGljaCBhcmUgYWxsIGZvciBEQVRBQkFTRS4gIFJldHVybiB0aGUgbmFtZSBvZiB0aGUKKysgICBmaXJzdCBzdHJ1Y3R1cmUgaW4gdGhhdCBsaXN0LCBvciB6ZXJvIGlmIFVTRVIgaXMgTlVMTC4gICovCisrY2hhciAqCisrZ2VuZXJhdGVfc2VydmljZV91c2VyX2xpc3QgKEZJTEUgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGF0YWJhc2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VfdXNlciAqdXNlcikKKyt7CisrICBpZiAodXNlcikKKysgICAgeworKyAgICAgIC8qIEdlbmVyYXRlIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiAgKi8KKysgICAgICBjaGFyICpuZXh0X25hbWUgPSBnZW5lcmF0ZV9zZXJ2aWNlX3VzZXJfbGlzdCAob3V0LCBkYXRhYmFzZSwgdXNlci0+bmV4dCk7CisrICAgICAgLyogR2VuZXJhdGUgb3VyIGtub3duIGZ1bmN0aW9uIGxpc3QuICAqLworKyAgICAgIGNoYXIgKmtub3duX2Z1bmN0aW9uX2xpc3RfbmFtZSA9CisrICAgICAgICBnZW5lcmF0ZV9rbm93bl9mdW5jdGlvbl9saXN0IChvdXQsIGRhdGFiYXNlLCB1c2VyKTsKKysKKysgICAgICBjaGFyICpuYW1lID0gc2FwcmludGYgKCJmaXhlZF8lc18lc191c2VyIiwgZGF0YWJhc2UtPm5hbWUsIHVzZXItPm5hbWUpOworKworKyAgICAgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBzZXJ2aWNlX3VzZXIgJXMgPSB7XG4iLCBuYW1lKTsKKysgICAgICBpZiAobmV4dF9uYW1lKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAoc2VydmljZV91c2VyICopICYlcyxcbiIsIG5leHRfbmFtZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLCAvKiBubyBuZXh0IGVudHJ5ICovXG4iKTsKKysgICAgICBmcHV0cyAoIiAge1xuIiwgb3V0KTsKKysgICAgICBpbnQgaTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mICh1c2VyLT5hY3Rpb25zKSAvIHNpemVvZiAodXNlci0+YWN0aW9uc1swXSk7IGkrKykKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgICAlcywgLyogJXMgKi9cbiIsCisrICAgICAgICAgICAgICAgICBsb29rdXBfYWN0aW9uX25hbWUgKHVzZXItPmFjdGlvbnNbaV0pLAorKyAgICAgICAgICAgICAgICAgbG9va3VwX3N0YXR1c19uYW1lIChpIC0gMikpOworKyAgICAgIGZwdXRzICgiICB9LFxuIiwgb3V0KTsKKysgICAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsICAvKiB3ZSBuZXZlciBuZWVkIHRoZSBzZXJ2aWNlIGxpYnJhcnkgKi9cbiIpOworKyAgICAgIGZwcmludGYgKG91dCwgIiAgeyAuYXJyYXkgPSAlcyB9LFxuIiwga25vd25fZnVuY3Rpb25fbGlzdF9uYW1lKTsKKysgICAgICBmcHJpbnRmIChvdXQsICIgIFwiJXNcIlxuIiwgdXNlci0+bmFtZSk7CisrICAgICAgZnB1dHMgKCJ9O1xuIiwgb3V0KTsKKysgICAgICBmcHV0cyAoIlxuIiwgb3V0KTsKKysKKysgICAgICByZXR1cm4gbmFtZTsKKysgICAgfQorKyAgZWxzZQorKyAgICByZXR1cm4gTlVMTDsKKyt9CisrCisrCisrLyogUHJpbnQgY29kZSB0byBPVVQgZm9yIHRoZSBsaXN0IG9mIG5hbWVfZGF0YWJhc2VfZW50cnkgc3RydWN0dXJlcworKyAgIHN0YXJ0aW5nIHdpdGggREFUQUJBU0UuICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHN0cnVjdHVyZQorKyAgIGluIHRoYXQgbGlzdCwgb3IgemVybyBpZiBEQVRBQkFTRSBpcyBOVUxMLiAgKi8KKytjaGFyICoKKytnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlX2VudHJpZXMgKEZJTEUgKm91dCwgbmFtZV9kYXRhYmFzZV9lbnRyeSAqZGF0YWJhc2UpCisreworKyAgaWYgKGRhdGFiYXNlKQorKyAgICB7CisrICAgICAgY2hhciAqbmV4dF9uYW1lID0gZ2VuZXJhdGVfbmFtZV9kYXRhYmFzZV9lbnRyaWVzIChvdXQsIGRhdGFiYXNlLT5uZXh0KTsKKysgICAgICBjaGFyICpzZXJ2aWNlX3VzZXJfbmFtZQorKyAgICAgICAgPSBnZW5lcmF0ZV9zZXJ2aWNlX3VzZXJfbGlzdCAob3V0LCBkYXRhYmFzZSwgZGF0YWJhc2UtPnNlcnZpY2UpOworKyAgICAgIGNoYXIgKm5hbWUgPSBzYXByaW50ZiAoImZpeGVkXyVzX25hbWVfZGF0YWJhc2UiLCBkYXRhYmFzZS0+bmFtZSk7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAic3RhdGljIGNvbnN0IG5hbWVfZGF0YWJhc2VfZW50cnkgJXMgPSB7XG4iLCBuYW1lKTsKKysKKysgICAgICBpZiAobmV4dF9uYW1lKQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSAmJXMsXG4iLCBuZXh0X25hbWUpOworKyAgICAgIGVsc2UKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgTlVMTCxcbiIpOworKworKyAgICAgIGlmIChzZXJ2aWNlX3VzZXJfbmFtZSkKKysgICAgICAgIGZwcmludGYgKG91dCwgIiAgKHNlcnZpY2VfdXNlciAqKSAmJXMsXG4iLCBzZXJ2aWNlX3VzZXJfbmFtZSk7CisrICAgICAgZWxzZQorKyAgICAgICAgZnByaW50ZiAob3V0LCAiICBOVUxMLFxuIik7CisrCisrICAgICAgZnByaW50ZiAob3V0LCAiICBcIiVzXCJcbiIsIGRhdGFiYXNlLT5uYW1lKTsKKysgICAgICBmcHJpbnRmIChvdXQsICJ9O1xuIik7CisrICAgICAgZnB1dHMgKCJcbiIsIG91dCk7CisrCisrICAgICAgcmV0dXJuIG5hbWU7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorKworKworK3ZvaWQKKytnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlIChGSUxFICpvdXQsIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUpCisreworKyAgLyogUHJvZHVjZSBhIGxpbmtlZCBsaXN0IG9mIHRoZSBrbm93biBuYW1lX2RhdGFiYXNlX2VudHJ5CisrICAgICBzdHJ1Y3R1cmVzLiAgKi8KKysgIGNoYXIgKmVudHJpZXMgPSBnZW5lcmF0ZV9uYW1lX2RhdGFiYXNlX2VudHJpZXMgKG91dCwgc2VydmljZV90YWJsZS0+ZW50cnkpOworKworKyAgLyogTm93IHByb2R1Y2UgdGhlIG1haW4gc3RydWN0dXJlIHRoYXQgcG9pbnRzIHRvIHRoZW0gYWxsLiAgKi8KKysgIGZwcmludGYgKG91dCwgInN0YXRpYyBjb25zdCBuYW1lX2RhdGFiYXNlIGZpeGVkX25hbWVfZGF0YWJhc2UgPSB7XG4iKTsKKysgIGlmIChlbnRyaWVzKQorKyAgICBmcHJpbnRmIChvdXQsICIgIChuYW1lX2RhdGFiYXNlX2VudHJ5ICopICYlcyxcbiIsIGVudHJpZXMpOworKyAgZWxzZQorKyAgICBmcHJpbnRmIChvdXQsICIgIE5VTEwsXG4iKTsKKysgIGZwdXRzICgiICBOVUxMIC8qIHdlIGRvbid0IG5lZWQgdGhlIGxpYnJhcmllcyAqL1xuIgorKyAgICAgICAgICJ9O1xuIiwKKysgICAgICAgICBvdXQpOworK30KKysKKysKKysMCisrLyogR2VuZXJhdGluZyB0aGUgbGlzdCBvZiBzZXJ2aWNlIGxpYnJhcmllcyB3ZSBnZW5lcmF0ZSByZWZlcmVuY2VzIHRvLiAgKi8KKysKKysvKiBTdHJpbmcgd2l0aCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuc3Nfc2hsaWJfcmV2aXNpb24gPSBMSUJOU1NfRklMRVNfU08gKyAxNTsKKysKKyt2b2lkCisrZ2VuZXJhdGVfc2VydmljZV9saWJfbGlzdCAoRklMRSAqb3V0LCBuYW1lX2RhdGFiYXNlICpzZXJ2aWNlX3RhYmxlKQorK3sKKysgIGludCBpLCBqOworKyAgaW50IHByaW50ZWRfYW55ID0gMDsKKysKKysgIGZvciAoaSA9IDA7IGZ1bmN0aW9uc1tpXS5raW5kOyBpKyspCisrICAgIHsKKysgICAgICAvKiBNZW50aW9uIGVhY2ggc2VydmljZSBsaWJyYXJ5IG9ubHkgb25jZS4gICovCisrICAgICAgZm9yIChqID0gMDsgaiA8IGk7IGorKykKKysgICAgICAgIGlmIChzdHJjbXAgKGZ1bmN0aW9uc1tpXS5zZXJ2aWNlLCBmdW5jdGlvbnNbal0uc2VydmljZSkgPT0gMCkKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgaWYgKGogPj0gaSkKKysgICAgICAgIHsKKysgICAgICAgICAgaWYgKHByaW50ZWRfYW55KQorKyAgICAgICAgICAgIHB1dGMgKCcgJywgb3V0KTsKKysgICAgICAgICAgZnByaW50ZiAob3V0LCAiLWxuc3NfJXMiLAorKyAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNbaV0uc2VydmljZSwKKysgICAgICAgICAgICAgICAgICAgbnNzX3NobGliX3JldmlzaW9uKTsKKysgICAgICAgICAgcHJpbnRlZF9hbnkgPSAxOworKyAgICAgICAgfQorKyAgICB9CisrfQorKworKwwKKysvKiBNYWluLiAgKi8KKysKKytpbnQKKyttYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgaWYgKGFyZ2MgIT0gNCkKKysgICAgeworKyAgICAgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiBnZW4tZml4ZWQtbnNzd2l0Y2ggSEVBREVSIFNFUlZMSUJTIENPTkZJR1xuIik7CisrICAgICAgZXhpdCAoMSk7CisrICAgIH0KKysKKysgIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUgPSBuc3NfcGFyc2VfZmlsZSAoYXJndlszXSk7CisrCisrICBGSUxFICpoZWFkZXIgPSBmb3BlbiAoYXJndlsxXSwgInciKTsKKysgIGlmICghIGhlYWRlcikKKysgICAgeworKyAgICAgIGZwcmludGYgKHN0ZGVyciwKKysgICAgICAgICAgICAgICAiZ2VuLWZpeGVkLW5zc3dpdGNoOiBjb3VsZG4ndCBvcGVuIG91dHB1dCBmaWxlICVzOiAlc1xuIiwKKysgICAgICAgICAgICAgICBhcmd2WzFdLCBzdHJlcnJvciAoZXJybm8pKTsKKysgICAgICBleGl0ICgxKTsKKysgICAgfQorKyAgZnB1dHMgKCIvKiBHZW5lcmF0ZWQgYnkgbnNzL2dlbi1maXhlZC1uc3N3aXRjaC5jLiAgKi9cbiIsIGhlYWRlcik7CisrICBmcHV0cyAoIlxuIiwgaGVhZGVyKTsKKysgIGdlbmVyYXRlX2tub3duX2Z1bmN0aW9ucyAoaGVhZGVyKTsKKysgIGdlbmVyYXRlX25hbWVfZGF0YWJhc2UgKGhlYWRlciwgc2VydmljZV90YWJsZSk7CisrICBmY2xvc2UgKGhlYWRlcik7CisrCisrICBGSUxFICpzZXJ2aWNlX2xpYl9saXN0ID0gZm9wZW4gKGFyZ3ZbMl0sICJ3Iik7CisrICBpZiAoISBzZXJ2aWNlX2xpYl9saXN0KQorKyAgICB7CisrICAgICAgZnByaW50ZiAoc3RkZXJyLAorKyAgICAgICAgICAgICAgICJnZW4tZml4ZWQtbnNzd2l0Y2g6IGNvdWxkbid0IG9wZW4gb3V0cHV0IGZpbGUgJXM6ICVzXG4iLAorKyAgICAgICAgICAgICAgIGFyZ3ZbMl0sIHN0cmVycm9yIChlcnJubykpOworKyAgICAgIGV4aXQgKDEpOworKyAgICB9CisrICBnZW5lcmF0ZV9zZXJ2aWNlX2xpYl9saXN0IChzZXJ2aWNlX2xpYl9saXN0LCBzZXJ2aWNlX3RhYmxlKTsKKysgIGZjbG9zZSAoc2VydmljZV9saWJfbGlzdCk7CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvbnNzL2dldGVudC5jIGIvbnNzL2dldGVudC5jCitpbmRleCAzNGRmODQ4Li42NzRjOGVlIDEwMDY0NAorLS0tIGEvbnNzL2dldGVudC5jCisrKysgYi9uc3MvZ2V0ZW50LmMKK0BAIC0zOSw2ICszOSw3IEBACisgI2luY2x1ZGUgPG5ldGluZXQvZXRoZXIuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogR2V0IGxpYmMgdmVyc2lvbiBudW1iZXIuICAqLworICNpbmNsdWRlIDx2ZXJzaW9uLmg+CitAQCAtOTEsNiArOTIsNyBAQCB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cblwKKyAgIGZwcmludGYgKHN0cmVhbSwgZ2V0dGV4dCAoIldyaXR0ZW4gYnkgJXMuXG4iKSwgIlRob3JzdGVuIEt1a3VrIik7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfREJfQUxJQVNFUworIC8qIFRoaXMgaXMgZm9yIGFsaWFzZXMgKi8KKyBzdGF0aWMgdm9pZAorIHByaW50X2FsaWFzZXMgKHN0cnVjdCBhbGlhc2VudCAqYWxpYXMpCitAQCAtMTM1LDcgKzEzNyw5IEBAIGFsaWFzZXNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMgKi8KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBUaGlzIGlzIGZvciBldGhlcnMgKi8KKyBzdGF0aWMgaW50CisgZXRoZXJzX2tleXMgKGludCBudW1iZXIsIGNoYXIgKmtleVtdKQorQEAgLTE3OSw2ICsxODMsNyBAQCBldGhlcnNfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgCisgICByZXR1cm4gcmVzdWx0OworIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAvKiBUaGlzIGlzIGZvciBncm91cCAqLworIHN0YXRpYyB2b2lkCitAQCAtMzAxLDYgKzMwNiw3IEBAIGdzaGFkb3dfa2V5cyAoaW50IG51bWJlciwgY2hhciAqa2V5W10pCisgICByZXR1cm4gcmVzdWx0OworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAvKiBUaGlzIGlzIGZvciBob3N0cyAqLworIHN0YXRpYyB2b2lkCisgcHJpbnRfaG9zdHMgKHN0cnVjdCBob3N0ZW50ICpob3N0KQorQEAgLTU5OCw2ICs2MDQsNyBAQCBuZXR3b3Jrc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorIC8qIE5vdyBpcyBhbGwgZm9yIHBhc3N3ZCAqLworIHN0YXRpYyB2b2lkCitAQCAtNjUwLDYgKzY1Nyw3IEBAIHBhc3N3ZF9rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAgIHJldHVybiByZXN1bHQ7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfSU5FVAorIC8qIFRoaXMgaXMgZm9yIHByb3RvY29scyAqLworIHN0YXRpYyB2b2lkCisgcHJpbnRfcHJvdG9jb2xzIChzdHJ1Y3QgcHJvdG9lbnQgKnByb3RvKQorQEAgLTgwNyw2ICs4MTUsNyBAQCBzZXJ2aWNlc19rZXlzIChpbnQgbnVtYmVyLCBjaGFyICprZXlbXSkKKyAKKyAgIHJldHVybiByZXN1bHQ7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworIAorIC8qIFRoaXMgaXMgZm9yIHNoYWRvdyAqLworIHN0YXRpYyB2b2lkCitAQCAtODczLDIzICs4ODIsMzYgQEAgc3RydWN0CisgICB9IGRhdGFiYXNlc1tdID0KKyAgIHsKKyAjZGVmaW5lIEQobmFtZSkgeyAjbmFtZSwgbmFtZSAjIyBfa2V5cyB9LAorLUQoYWhvc3RzKQorLUQoYWhvc3RzdjQpCistRChhaG9zdHN2NikKKy1EKGFsaWFzZXMpCistRChldGhlcnMpCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisrIyBkZWZpbmUgRE4obmFtZSkgRChuYW1lKQorKyNlbHNlCisrIyBkZWZpbmUgRE4obmFtZSkKKysjZW5kaWYKKysKKysjaWYgX19PUFRJT05fRUdMSUJDX0RCX0FMSUFTRVMKKysjIGRlZmluZSBEQShuYW1lKSBEKG5hbWUpCisrI2Vsc2UKKysjIGRlZmluZSBEQShuYW1lKQorKyNlbmRpZgorKworK0ROKGFob3N0cykKKytETihhaG9zdHN2NCkKKytETihhaG9zdHN2NikKKytEQShhbGlhc2VzKQorK0ROKGV0aGVycykKKyBEKGdyb3VwKQorIEQoZ3NoYWRvdykKKy1EKGhvc3RzKQorLUQoaW5pdGdyb3VwcykKKy1EKG5ldGdyb3VwKQorLUQobmV0d29ya3MpCisrRE4oaG9zdHMpCisrRE4oaW5pdGdyb3VwcykKKytETihuZXRncm91cCkKKytETihuZXR3b3JrcykKKyBEKHBhc3N3ZCkKKy1EKHByb3RvY29scykKKytETihwcm90b2NvbHMpCisgI2lmIEhBVkVfU1VOUlBDCistRChycGMpCisrRE4ocnBjKQorICNlbmRpZgorLUQoc2VydmljZXMpCisrRE4oc2VydmljZXMpCisgRChzaGFkb3cpCisgI3VuZGVmIEQKKyAgICAgeyBOVUxMLCBOVUxMIH0KK2RpZmYgLS1naXQgYS9uc3MvZ2V0bnNzZW50X3IuYyBiL25zcy9nZXRuc3NlbnRfci5jCitpbmRleCBmNWI5MDM2Li5mMDlmN2ZlIDEwMDY0NAorLS0tIGEvbnNzL2dldG5zc2VudF9yLmMKKysrKyBiL25zcy9nZXRuc3NlbnRfci5jCitAQCAtMTYsNiArMTYsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPG5ldGRiLmg+CisgI2luY2x1ZGUgIm5zc3dpdGNoLmgiCisgCitAQCAtNTksMTEgKzYwLDEzIEBAIF9fbnNzX3NldGVudCAoY29uc3QgY2hhciAqZnVuY19uYW1lLCBkYl9sb29rdXBfZnVuY3Rpb24gbG9va3VwX2ZjdCwKKyAgIH0gZmN0OworICAgaW50IG5vX21vcmU7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICBpZiAocmVzICYmIF9fcmVzX21heWJlX2luaXQgKCZfcmVzLCAwKSA9PSAtMSkKKyAgICAgeworICAgICAgIF9fc2V0X2hfZXJybm8gKE5FVERCX0lOVEVSTkFMKTsKKyAgICAgICByZXR1cm47CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAgIC8qIEN5Y2xlIHRocm91Z2ggdGhlIHNlcnZpY2VzIGFuZCBydW4gdGhlaXIgYHNldFhYZW50JyBmdW5jdGlvbnMgdW50aWwKKyAgICAgIHdlIGZpbmQgYW4gYXZhaWxhYmxlIHNlcnZpY2UuICAqLworQEAgLTEwMSwxMSArMTA0LDEzIEBAIF9fbnNzX2VuZGVudCAoY29uc3QgY2hhciAqZnVuY19uYW1lLCBkYl9sb29rdXBfZnVuY3Rpb24gbG9va3VwX2ZjdCwKKyAgIH0gZmN0OworICAgaW50IG5vX21vcmU7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICBpZiAocmVzICYmIF9fcmVzX21heWJlX2luaXQgKCZfcmVzLCAwKSA9PSAtMSkKKyAgICAgeworICAgICAgIF9fc2V0X2hfZXJybm8gKE5FVERCX0lOVEVSTkFMKTsKKyAgICAgICByZXR1cm47CisgICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0lORVQgKi8KKyAKKyAgIC8qIEN5Y2xlIHRocm91Z2ggYWxsIHRoZSBzZXJ2aWNlcyBhbmQgcnVuIHRoZWlyIGVuZFhYZW50IGZ1bmN0aW9ucy4gICovCisgICBub19tb3JlID0gc2V0dXAgKGZ1bmNfbmFtZSwgbG9va3VwX2ZjdCwgJmZjdC5wdHIsIG5pcCwgc3RhcnRwLCAxKTsKK0BAIC0xNDEsMTIgKzE0NiwxNCBAQCBfX25zc19nZXRlbnRfciAoY29uc3QgY2hhciAqZ2V0ZW50X2Z1bmNfbmFtZSwKKyAgIGludCBub19tb3JlOworICAgZW51bSBuc3Nfc3RhdHVzIHN0YXR1czsKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0lORVQKKyAgIGlmIChyZXMgJiYgX19yZXNfbWF5YmVfaW5pdCAoJl9yZXMsIDApID09IC0xKQorICAgICB7CisgICAgICAgKmhfZXJybm9wID0gTkVUREJfSU5URVJOQUw7CisgICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICAgcmV0dXJuIGVycm5vOworICAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19JTkVUICovCisgCisgICAvKiBJbml0aWFsaXplIHN0YXR1cyB0byByZXR1cm4gaWYgbm8gbW9yZSBmdW5jdGlvbnMgYXJlIGZvdW5kLiAgKi8KKyAgIHN0YXR1cyA9IE5TU19TVEFUVVNfTk9URk9VTkQ7CitAQCAtMTYxLDcgKzE2OCw3IEBAIF9fbnNzX2dldGVudF9yIChjb25zdCBjaGFyICpnZXRlbnRfZnVuY19uYW1lLAorICAgICAgIGludCBpc19sYXN0X25pcCA9ICpuaXAgPT0gKmxhc3RfbmlwOworIAorICAgICAgIHN0YXR1cyA9IERMX0NBTExfRkNUIChmY3QuZiwKKy0JCQkgICAgKHJlc2J1ZiwgYnVmZmVyLCBidWZsZW4sICZlcnJubywgJmhfZXJybm8pKTsKKysJCQkgICAgKHJlc2J1ZiwgYnVmZmVyLCBidWZsZW4sICZlcnJubywgaF9lcnJub3ApKTsKKyAKKyAgICAgICAvKiBUaGUgc3RhdHVzIGlzIE5TU19TVEFUVVNfVFJZQUdBSU4gYW5kIGVycm5vIGlzIEVSQU5HRSB0aGUKKyAJIHByb3ZpZGVkIGJ1ZmZlciBpcyB0b28gc21hbGwuICBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIGdpdmUKK2RpZmYgLS1naXQgYS9uc3MvbnNzd2l0Y2guYyBiL25zcy9uc3N3aXRjaC5jCitpbmRleCA5NzEyNjIzLi5jODFlMjA3IDEwMDY0NAorLS0tIGEvbnNzL25zc3dpdGNoLmMKKysrKyBiL25zcy9uc3N3aXRjaC5jCitAQCAtMjYsNiArMjYsNyBAQAorICNpbmNsdWRlIDxzdGRpb19leHQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpbmNsdWRlIDxhbGlhc2VzLmg+CisgI2luY2x1ZGUgPGdycC5oPgorQEAgLTQxLDYgKzQyLDE1IEBACisgI2luY2x1ZGUgIi4uL25zY2QvbnNjZF9wcm90by5oIgorICNpbmNsdWRlIDxzeXNkZXAuaD4KKyAKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggaXMgZGlzYWJsZWQsIHdlIHVzZSBmaXhlZCB0YWJsZXMgb2YKKysgICBkYXRhYmFzZXMgYW5kIHNlcnZpY2VzLCBnZW5lcmF0ZWQgYXQgbGlicmFyeSBidWlsZCB0aW1lLiAgVGh1czoKKysgICAtIFdlIGNhbid0IHJlY29uZmlndXJlIGluZGl2aWR1YWwgZGF0YWJhc2VzLCBzbyB3ZSBkb24ndCBuZWVkIGEKKysgICAgIG5hbWUtdG8tZGF0YWJhc2UgbWFwLgorKyAgIC0gV2UgbmV2ZXIgYWRkIGRhdGFiYXNlcyBvciBzZXJ2aWNlIGxpYnJhcmllcywgb3IgbG9vayB1cCBmdW5jdGlvbnMKKysgICAgIGF0IHJ1bnRpbWUsIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBsb2NrIHRvIHByb3RlY3Qgb3VyIHRhYmxlcy4KKysgICBTZWUgLi4vb3B0aW9uLWdyb3Vwcy5kZWYgZm9yIHRoZSBkZXRhaWxzLiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX05TU1dJVENICisrCisgLyogUHJvdG90eXBlcyBmb3IgdGhlIGxvY2FsIGZ1bmN0aW9ucy4gICovCisgc3RhdGljIG5hbWVfZGF0YWJhc2UgKm5zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkgaW50ZXJuYWxfZnVuY3Rpb247Cisgc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKm5zc19nZXRsaW5lIChjaGFyICpsaW5lKSBpbnRlcm5hbF9mdW5jdGlvbjsKK0BAIC03OSw2ICs4OSw5IEBAIGJvb2wgX19uc3NfZGF0YWJhc2VfY3VzdG9tW05TU19EQlNJRFhfbWF4XTsKKyAKKyBfX2xpYmNfbG9ja19kZWZpbmVfaW5pdGlhbGl6ZWQgKHN0YXRpYywgbG9jaykKKyAKKysjZGVmaW5lIGxvY2tfbnNzd2l0Y2ggX19saWJjX2xvY2tfbG9jayAobG9jaykKKysjZGVmaW5lIHVubG9ja19uc3N3aXRjaCBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spCisrCisgI2lmICFkZWZpbmVkIERPX1NUQVRJQ19OU1MgfHwgZGVmaW5lZCBTSEFSRUQKKyAvKiBTdHJpbmcgd2l0aCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIHNoYXJlZCBvYmplY3QgZmlsZXMuICAqLworIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBfX25zc19zaGxpYl9yZXZpc2lvbiA9IExJQk5TU19GSUxFU19TTyArIDE1OworQEAgLTkzLDYgKzEwNiwyMCBAQCBzdGF0aWMgbmFtZV9kYXRhYmFzZSAqc2VydmljZV90YWJsZTsKKyAgICBfX2xpYmNfZnJlZXJlcy4gICovCisgc3RhdGljIG5hbWVfZGF0YWJhc2VfZW50cnkgKmRlZmNvbmZpZ19lbnRyaWVzOworIAorKyNlbHNlIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworKworKy8qIEJyaW5nIGluIHRoZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHNlcnZpY2UgdGFibGUgd2UgZ2VuZXJhdGVkIGF0CisrICAgYnVpbGQgdGltZS4gICovCisrI2luY2x1ZGUgImZpeGVkLW5zc3dpdGNoLmgiCisrCisrY29uc3Qgc3RhdGljIG5hbWVfZGF0YWJhc2UgKnNlcnZpY2VfdGFibGUgPSAmZml4ZWRfbmFtZV9kYXRhYmFzZTsKKysKKysvKiBOb3RoaW5nIGV2ZXIgY2hhbmdlcywgc28gdGhlcmUncyBubyBuZWVkIHRvIGxvY2sgYW55dGhpbmcuICAqLworKyNkZWZpbmUgbG9ja19uc3N3aXRjaCAoMCkKKysjZGVmaW5lIHVubG9ja19uc3N3aXRjaCAoMCkKKysKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX05TU1dJVENIICovCisrCisgCisgI2lmZGVmIFVTRV9OU0NECisgLyogTm9uemVybyBpZiB0aGlzIGlzIHRoZSBuc2NkIHByb2Nlc3MuICAqLworQEAgLTEwOSwyMCArMTM2LDIyIEBAIF9fbnNzX2RhdGFiYXNlX2xvb2t1cCAoY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKmFsdGVybmF0ZV9uYW1lLAorIAkJICAgICAgIGNvbnN0IGNoYXIgKmRlZmNvbmZpZywgc2VydmljZV91c2VyICoqbmkpCisgeworICAgLyogUHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRvIGNoYW5nZSB0aGUgc2VydmljZSB0YWJsZS4gICovCistICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysgIGxvY2tfbnNzd2l0Y2g7CisgCisgICAvKiBSZWNvbnNpZGVyIGRhdGFiYXNlIHZhcmlhYmxlIGluIGNhc2Ugc29tZSBvdGhlciB0aHJlYWQgY2FsbGVkCisgICAgICBgX19uc3NfY29uZmlndXJlX2xvb2t1cCcgd2hpbGUgd2Ugd2FpdGVkIGZvciB0aGUgbG9jay4gICovCisgICBpZiAoKm5pICE9IE5VTEwpCisgICAgIHsKKy0gICAgICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgICAgIHVubG9ja19uc3N3aXRjaDsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyAgIC8qIEFyZSB3ZSBpbml0aWFsaXplZCB5ZXQ/ICAqLworICAgaWYgKHNlcnZpY2VfdGFibGUgPT0gTlVMTCkKKyAgICAgLyogUmVhZCBjb25maWcgZmlsZS4gICovCisgICAgIHNlcnZpY2VfdGFibGUgPSBuc3NfcGFyc2VfZmlsZSAoX1BBVEhfTlNTV0lUQ0hfQ09ORik7CisrI2VuZGlmCisgCisgICAvKiBUZXN0IHdoZXRoZXIgY29uZmlndXJhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZS4gICovCisgICBpZiAoc2VydmljZV90YWJsZSAhPSBOVUxMKQorQEAgLTE0NCw2ICsxNzMsNyBAQCBfX25zc19kYXRhYmFzZV9sb29rdXAgKGNvbnN0IGNoYXIgKmRhdGFiYXNlLCBjb25zdCBjaGFyICphbHRlcm5hdGVfbmFtZSwKKyAJICAgICpuaSA9IGVudHJ5LT5zZXJ2aWNlOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorICAgLyogTm8gY29uZmlndXJhdGlvbiBkYXRhIGlzIGF2YWlsYWJsZSwgZWl0aGVyIGJlY2F1c2UgbnNzd2l0Y2guY29uZgorICAgICAgZG9lc24ndCBleGlzdCBvciBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhIGxpbmUgZm9yIHRoaXMgZGF0YWJhc2UuCisgCitAQCAtMTY2LDEzICsxOTYsMjMgQEAgX19uc3NfZGF0YWJhc2VfbG9va3VwIChjb25zdCBjaGFyICpkYXRhYmFzZSwgY29uc3QgY2hhciAqYWx0ZXJuYXRlX25hbWUsCisgCSAgICB7CisgCSAgICAgIGVudHJ5LT5uZXh0ID0gZGVmY29uZmlnX2VudHJpZXM7CisgCSAgICAgIGVudHJ5LT5zZXJ2aWNlID0gKm5pOworLQkgICAgICBlbnRyeS0+bmFtZVswXSA9ICdcMCc7CisrCSAgICAgIGVudHJ5LT5uYW1lID0gIiI7CisgCSAgICAgIGRlZmNvbmZpZ19lbnRyaWVzID0gZW50cnk7CisgCSAgICB9CisgCX0KKyAgICAgfQorKyNlbHNlCisrICAvKiBXaXRob3V0IHRoZSBkeW5hbWljIGJlaGF2aW9yLCB3ZSBjYW4ndCBwcm9jZXNzIGRlZmNvbmZpZy4gIFRoZQorKyAgICAgZGF0YWJhc2VzIHRoZSB1c2VyIHNwZWNpZmllZCBhdCBsaWJyYXJ5IGJ1aWxkIHRpbWUgYXJlIGFsbCB5b3UKKysgICAgIGdldC4gICovCisrICBpZiAoKm5pID09IE5VTEwpCisrICAgIHsKKysgICAgICB1bmxvY2tfbnNzd2l0Y2g7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrI2VuZGlmCisgCistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgdW5sb2NrX25zc3dpdGNoOworIAorICAgcmV0dXJuICpuaSAhPSBOVUxMID8gMCA6IC0xOworIH0KK0BAIC0yNTIsNiArMjkyLDcgQEAgX19uc3NfbmV4dDIgKHNlcnZpY2VfdXNlciAqKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSwgY29uc3QgY2hhciAqZmN0Ml9uYW1lLAorIGxpYmNfaGlkZGVuX2RlZiAoX19uc3NfbmV4dDIpCisgCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19uc3NfbmV4dCAoc2VydmljZV91c2VyICoqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lLCB2b2lkICoqZmN0cCwgaW50IHN0YXR1cywKK0BAIC0zMDAsMTMgKzM0MSwxMyBAQCBfX25zc19jb25maWd1cmVfbG9va3VwIChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnNlcnZpY2VfbGluZSkKKyAgICAgfQorIAorICAgLyogUHJldmVudCBtdWx0aXBsZSB0aHJlYWRzIHRvIGNoYW5nZSB0aGUgc2VydmljZSB0YWJsZS4gICovCistICBfX2xpYmNfbG9ja19sb2NrIChsb2NrKTsKKysgIGxvY2tfbnNzd2l0Y2g7CisgCisgICAvKiBJbnN0YWxsIG5ldyBydWxlcy4gICovCisgICAqZGF0YWJhc2VzW2NudF0uZGJwID0gbmV3X2RiOworICAgX19uc3NfZGF0YWJhc2VfY3VzdG9tW2NudF0gPSB0cnVlOworIAorLSAgX19saWJjX2xvY2tfdW5sb2NrIChsb2NrKTsKKysgIHVubG9ja19uc3N3aXRjaDsKKyAKKyAgIHJldHVybiAwOworIH0KK0BAIC00MDIsNyArNDQzLDcgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAgIHZvaWQgKipmb3VuZCwgKnJlc3VsdDsKKyAKKyAgIC8qIFdlIG5vdyBtb2RpZnkgZ2xvYmFsIGRhdGEuICBQcm90ZWN0IGl0LiAgKi8KKy0gIF9fbGliY19sb2NrX2xvY2sgKGxvY2spOworKyAgbG9ja19uc3N3aXRjaDsKKyAKKyAgIC8qIFNlYXJjaCB0aGUgdHJlZSBvZiBmdW5jdGlvbnMgcHJldmlvdXNseSByZXF1ZXN0ZWQuICBEYXRhIGluIHRoZQorICAgICAgdHJlZSBhcmUgYGtub3duX2Z1bmN0aW9uJyBzdHJ1Y3R1cmVzLCB3aG9zZSBmaXJzdCBtZW1iZXIgaXMgYQorQEAgLTQxMyw3ICs0NTQsNyBAQCBfX25zc19sb29rdXBfZnVuY3Rpb24gKHNlcnZpY2VfdXNlciAqbmksIGNvbnN0IGNoYXIgKmZjdF9uYW1lKQorICAgICAgZW5vdWdoIHRvIGEgcG9pbnRlciB0byBvdXIgc3RydWN0dXJlIHRvIHVzZSBhcyBhIGxvb2t1cCBrZXkgdGhhdAorICAgICAgd2lsbCBiZSBwYXNzZWQgdG8gYGtub3duX2NvbXBhcmUnIChhYm92ZSkuICAqLworIAorLSAgZm91bmQgPSBfX3RzZWFyY2ggKCZmY3RfbmFtZSwgJm5pLT5rbm93biwgJmtub3duX2NvbXBhcmUpOworKyAgZm91bmQgPSBfX3RzZWFyY2ggKCZmY3RfbmFtZSwgJm5pLT5rbm93bi50cmVlLCAma25vd25fY29tcGFyZSk7CisgICBpZiAoZm91bmQgPT0gTlVMTCkKKyAgICAgLyogVGhpcyBtZWFucyBvdXQtb2YtbWVtb3J5LiAgKi8KKyAgICAgcmVzdWx0ID0gTlVMTDsKK0BAIC00NDAsNyArNDgxLDcgQEAgX19uc3NfbG9va3VwX2Z1bmN0aW9uIChzZXJ2aWNlX3VzZXIgKm5pLCBjb25zdCBjaGFyICpmY3RfbmFtZSkKKyAjZW5kaWYKKyAJICAvKiBPb3BzLiAgV2UgY2FuJ3QgaW5zdGFudGlhdGUgdGhpcyBub2RlIHByb3Blcmx5LgorIAkgICAgIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLiAgKi8KKy0JICBfX3RkZWxldGUgKCZmY3RfbmFtZSwgJm5pLT5rbm93biwgJmtub3duX2NvbXBhcmUpOworKwkgIF9fdGRlbGV0ZSAoJmZjdF9uYW1lLCAmbmktPmtub3duLnRyZWUsICZrbm93bl9jb21wYXJlKTsKKyAJICBmcmVlIChrbm93bik7CisgCSAgcmVzdWx0ID0gTlVMTDsKKyAJfQorQEAgLTUyMCwxMyArNTYxLDQzIEBAIF9fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisgICAgIH0KKyAKKyAgIC8qIFJlbW92ZSB0aGUgbG9jay4gICovCistICBfX2xpYmNfbG9ja191bmxvY2sgKGxvY2spOworKyAgdW5sb2NrX25zc3dpdGNoOworIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25zc19sb29rdXBfZnVuY3Rpb24pCisgCisgCisrI2Vsc2UgLyogYmVsb3cgaWYgISBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0ggKi8KKysKKysKKytpbnQKKytfX25zc19jb25maWd1cmVfbG9va3VwIChjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnNlcnZpY2VfbGluZSkKKyt7CisrICAvKiBXZSBjYW4ndCBkeW5hbWljYWxseSBjb25maWd1cmUgbG9va3VwIHdpdGhvdXQKKysgICAgIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0guICAqLworKyAgX19zZXRfZXJybm8gKEVJTlZBTCk7CisrICByZXR1cm4gLTE7CisrfQorKworKworK3ZvaWQgKgorK19fbnNzX2xvb2t1cF9mdW5jdGlvbiAoc2VydmljZV91c2VyICpuaSwgY29uc3QgY2hhciAqZmN0X25hbWUpCisreworKyAgaW50IGk7CisrICBjb25zdCBrbm93bl9mdW5jdGlvbiAqKmtub3duID0gbmktPmtub3duLmFycmF5OworKworKyAgZm9yIChpID0gMDsga25vd25baV07IGkrKykKKysgICAgaWYgKHN0cmNtcCAoZmN0X25hbWUsIGtub3duW2ldLT5mY3RfbmFtZSkgPT0gMCkKKysgICAgICByZXR1cm4ga25vd25baV0tPmZjdF9wdHI7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX25zc19sb29rdXBfZnVuY3Rpb24pCisrI2VuZGlmCisrCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSAorIHN0YXRpYyBuYW1lX2RhdGFiYXNlICoKKyBpbnRlcm5hbF9mdW5jdGlvbgorIG5zc19wYXJzZV9maWxlIChjb25zdCBjaGFyICpmbmFtZSkKK0BAIC02MzIsOCArNzAzLDEwIEBAIG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGNvbnN0IGNoYXIgKmxpbmUpCisgCQkJCQkgICAgICsgKGxpbmUgLSBuYW1lICsgMSkpOworICAgICAgIGlmIChuZXdfc2VydmljZSA9PSBOVUxMKQorIAlyZXR1cm4gcmVzdWx0OworKyAgICAgIG5ld19zZXJ2aWNlLT5uYW1lID0gKGNoYXIgKikgKG5ld19zZXJ2aWNlICsgMSk7CisgCistICAgICAgKigoY2hhciAqKSBfX21lbXBjcHkgKG5ld19zZXJ2aWNlLT5uYW1lLCBuYW1lLCBsaW5lIC0gbmFtZSkpID0gJ1wwJzsKKysgICAgICAqKChjaGFyICopIF9fbWVtcGNweSAoKGNoYXIgKikgbmV3X3NlcnZpY2UtPm5hbWUsIG5hbWUsIGxpbmUgLSBuYW1lKSkKKysgICAgICAgID0gJ1wwJzsKKyAKKyAgICAgICAvKiBTZXQgZGVmYXVsdCBhY3Rpb25zLiAgKi8KKyAgICAgICBuZXdfc2VydmljZS0+YWN0aW9uc1syICsgTlNTX1NUQVRVU19UUllBR0FJTl0gPSBOU1NfQUNUSU9OX0NPTlRJTlVFOworQEAgLTY0Miw3ICs3MTUsNyBAQCBuc3NfcGFyc2Vfc2VydmljZV9saXN0IChjb25zdCBjaGFyICpsaW5lKQorICAgICAgIG5ld19zZXJ2aWNlLT5hY3Rpb25zWzIgKyBOU1NfU1RBVFVTX1NVQ0NFU1NdID0gTlNTX0FDVElPTl9SRVRVUk47CisgICAgICAgbmV3X3NlcnZpY2UtPmFjdGlvbnNbMiArIE5TU19TVEFUVVNfUkVUVVJOXSA9IE5TU19BQ1RJT05fUkVUVVJOOworICAgICAgIG5ld19zZXJ2aWNlLT5saWJyYXJ5ID0gTlVMTDsKKy0gICAgICBuZXdfc2VydmljZS0+a25vd24gPSBOVUxMOworKyAgICAgIG5ld19zZXJ2aWNlLT5rbm93bi50cmVlID0gTlVMTDsKKyAgICAgICBuZXdfc2VydmljZS0+bmV4dCA9IE5VTEw7CisgCisgICAgICAgd2hpbGUgKGlzc3BhY2UgKGxpbmVbMF0pKQorQEAgLTc3OCw5ICs4NTEsMTAgQEAgbnNzX2dldGxpbmUgKGNoYXIgKmxpbmUpCisgICByZXN1bHQgPSAobmFtZV9kYXRhYmFzZV9lbnRyeSAqKSBtYWxsb2MgKHNpemVvZiAobmFtZV9kYXRhYmFzZV9lbnRyeSkgKyBsZW4pOworICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKysgIHJlc3VsdC0+bmFtZSA9IChjaGFyICopIChyZXN1bHQgKyAxKTsKKyAKKyAgIC8qIFNhdmUgdGhlIGRhdGFiYXNlIG5hbWUuICAqLworLSAgbWVtY3B5IChyZXN1bHQtPm5hbWUsIG5hbWUsIGxlbik7CisrICBtZW1jcHkgKChjaGFyICopIHJlc3VsdC0+bmFtZSwgbmFtZSwgbGVuKTsKKyAKKyAgIC8qIFBhcnNlIHRoZSBsaXN0IG9mIHNlcnZpY2VzLiAgKi8KKyAgIHJlc3VsdC0+c2VydmljZSA9IG5zc19wYXJzZV9zZXJ2aWNlX2xpc3QgKGxpbmUpOworQEAgLTgxNiw2ICs4OTAsNyBAQCBuc3NfbmV3X3NlcnZpY2UgKG5hbWVfZGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpuYW1lKQorICAgcmV0dXJuICpjdXJyZW50cDsKKyB9CisgI2VuZGlmCisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworIAorIAorICNpZiBkZWZpbmVkIFNIQVJFRCAmJiBkZWZpbmVkIFVTRV9OU0NECitAQCAtODM0LDYgKzkwOSw3IEBAIG5zc19sb2FkX2FsbF9saWJyYXJpZXMgKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGNvbnN0IGNoYXIgKmRlZikKKyB9CisgCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgLyogQ2FsbGVkIGJ5IG5zY2QgYW5kIG5zY2QgYWxvbmUuICAqLworIHZvaWQKKyBfX25zc19kaXNhYmxlX25zY2QgKHZvaWQgKCpjYikgKHNpemVfdCwgc3RydWN0IHRyYWNlZF9maWxlICopKQorQEAgLTg1Nyw4ICs5MzMsMTAgQEAgX19uc3NfZGlzYWJsZV9uc2NkICh2b2lkICgqY2IpIChzaXplX3QsIHN0cnVjdCB0cmFjZWRfZmlsZSAqKSkKKyAgIF9fbnNzX25vdF91c2VfbnNjZF9zZXJ2aWNlcyA9IC0xOworICAgX19uc3Nfbm90X3VzZV9uc2NkX25ldGdyb3VwID0gLTE7CisgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfSU5FVCAqLworICNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTlNTV0lUQ0gKKyBzdGF0aWMgdm9pZAorIGZyZWVfZGF0YWJhc2VfZW50cmllcyAobmFtZV9kYXRhYmFzZV9lbnRyeSAqZW50cnkpCisgeworQEAgLTg3MSw4ICs5NDksOCBAQCBmcmVlX2RhdGFiYXNlX2VudHJpZXMgKG5hbWVfZGF0YWJhc2VfZW50cnkgKmVudHJ5KQorIAl7CisgCSAgc2VydmljZV91c2VyICpvbGRzID0gc2VydmljZTsKKyAKKy0JICBpZiAoc2VydmljZS0+a25vd24gIT0gTlVMTCkKKy0JICAgIF9fdGRlc3Ryb3kgKHNlcnZpY2UtPmtub3duLCBmcmVlKTsKKysJICBpZiAoc2VydmljZS0+a25vd24udHJlZSAhPSBOVUxMKQorKwkgICAgX190ZGVzdHJveSAoc2VydmljZS0+a25vd24udHJlZSwgZnJlZSk7CisgCisgCSAgc2VydmljZSA9IHNlcnZpY2UtPm5leHQ7CisgCSAgZnJlZSAob2xkcyk7CitAQCAtOTI2LDMgKzEwMDQsNCBAQCBsaWJjX2ZyZWVyZXNfZm4gKGZyZWVfbWVtKQorIAorICAgZnJlZSAodG9wKTsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19OU1NXSVRDSCAqLworZGlmZiAtLWdpdCBhL25zcy9uc3N3aXRjaC5oIGIvbnNzL25zc3dpdGNoLmgKK2luZGV4IGE1MzE4ZmEuLjE3MzA5NzcgMTAwNjQ0CistLS0gYS9uc3MvbnNzd2l0Y2guaAorKysrIGIvbnNzL25zc3dpdGNoLmgKK0BAIC02NSwxMCArNjUsMjAgQEAgdHlwZWRlZiBzdHJ1Y3Qgc2VydmljZV91c2VyCisgICBsb29rdXBfYWN0aW9ucyBhY3Rpb25zWzVdOworICAgLyogTGluayB0byB0aGUgdW5kZXJseWluZyBsaWJyYXJ5IG9iamVjdC4gICovCisgICBzZXJ2aWNlX2xpYnJhcnkgKmxpYnJhcnk7CistICAvKiBDb2xsZWN0aW9uIG9mIGtub3duIGZ1bmN0aW9ucy4gICovCistICB2b2lkICprbm93bjsKKysgIC8qIENvbGxlY3Rpb24gb2Yga25vd24gZnVuY3Rpb25zLgorKworKyAgICAgV2l0aCBPUFRJT05fRUdMSUJDX05TU1dJVENIIGVuYWJsZWQsIHRoaXMgaXMgdGhlIHJvb3Qgb2YgYQorKyAgICAgJ3RzZWFyY2gnLXN0eWxlIHRyZWUuCisrCisrICAgICBXaXRoIE9QVElPTl9FR0xJQkNfTlNTV0lUQ0ggZGlzYWJsZWQsIHRoaXMgaXMgYW4gYXJyYXkgb2YKKysgICAgIHBvaW50ZXJzIHRvIGtub3duX2Z1bmN0aW9uIHN0cnVjdHVyZXMsIE5VTEwtdGVybWluYXRlZC4gICovCisrICB1bmlvbgorKyAgeworKyAgICB2b2lkICp0cmVlOworKyAgICBjb25zdCBrbm93bl9mdW5jdGlvbiAqKmFycmF5OworKyAgfSBrbm93bjsKKyAgIC8qIE5hbWUgb2YgdGhlIHNlcnZpY2UgKGBmaWxlcycsIGBkbnMnLCBgbmlzJywgLi4uKS4gICovCistICBjaGFyIG5hbWVbMF07CisrICBjb25zdCBjaGFyICpuYW1lOworIH0gc2VydmljZV91c2VyOworIAorIC8qIFRvIGFjY2VzcyB0aGUgYWN0aW9uIGJhc2VkIG9uIHRoZSBzdGF0dXMgdmFsdWUgdXNlIHRoaXMgbWFjcm8uICAqLworQEAgLTgyLDcgKzkyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgbmFtZV9kYXRhYmFzZV9lbnRyeQorICAgLyogTGlzdCBvZiBzZXJ2aWNlIHRvIGJlIHVzZWQuICAqLworICAgc2VydmljZV91c2VyICpzZXJ2aWNlOworICAgLyogTmFtZSBvZiB0aGUgZGF0YWJhc2UuICAqLworLSAgY2hhciBuYW1lWzBdOworKyAgY29uc3QgY2hhciAqbmFtZTsKKyB9IG5hbWVfZGF0YWJhc2VfZW50cnk7CisgCisgCitkaWZmIC0tZ2l0IGEvcG9zaXgvTWFrZWZpbGUgYi9wb3NpeC9NYWtlZmlsZQoraW5kZXggMTVlODgxOC4uNjA5ZWQwMyAxMDA2NDQKKy0tLSBhL3Bvc2l4L01ha2VmaWxlCisrKysgYi9wb3NpeC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDggQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIFBPU0lYIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gcG9zaXgKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC00MywxMyArNDUsMjQgQEAgcm91dGluZXMgOj0JCQkJCQkJCSAgICAgIFwKKyAJZ2V0cGdpZCBzZXRwZ2lkIGdldHBncnAgYnNkLWdldHBncnAgc2V0cGdycCBnZXRzaWQgc2V0c2lkCSAgICAgIFwKKyAJZ2V0cmVzdWlkIGdldHJlc2dpZCBzZXRyZXN1aWQgc2V0cmVzZ2lkCQkJCSAgICAgIFwKKyAJcGF0aGNvbmYgc3lzY29uZiBmcGF0aGNvbmYJCQkJCSAgICAgIFwKKy0JZ2xvYiBnbG9iNjQgZm5tYXRjaCByZWdleAkJCQkJICAgICAgXAorKwlnbG9iIGdsb2I2NCBmbm1hdGNoCQkJCQkJICAgICAgXAorIAljb25mc3RyCQkJCQkJCQkgICAgICBcCisgCWdldG9wdCBnZXRvcHQxIGdldG9wdF9pbml0CQkJCQkgICAgICBcCisgCXNjaGVkX3NldHAgc2NoZWRfZ2V0cCBzY2hlZF9zZXRzIHNjaGVkX2dldHMgc2NoZWRfeWllbGQgc2NoZWRfcHJpbWF4ICBcCisgCXNjaGVkX3ByaW1pbiBzY2hlZF9ycl9naSBzY2hlZF9nZXRhZmZpbml0eSBzY2hlZF9zZXRhZmZpbml0eQkgICAgICBcCistCWdldGFkZHJpbmZvIGdhaV9zdHJlcnJvciB3b3JkZXhwCQkJCSAgICAgIFwKKyAJcHJlYWQgcHdyaXRlIHByZWFkNjQgcHdyaXRlNjQJCQkJCSAgICAgIFwKKysJcG9zaXhfbWFkdmlzZQkJCQkJCQkgICAgICBcCisrCWdldF9jaGlsZF9tYXggc2NoZWRfY3B1Y291bnQgc2NoZWRfY3B1YWxsb2Mgc2NoZWRfY3B1ZnJlZQorKworK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBnZXRhZGRyaW5mbyBnYWlfc3RyZXJyb3IKKysKKytpZmVxICh5LCQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykpCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfUkVHRVhQKSArPSByZWdleAorK2Vsc2UKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9SRUdFWFApICs9IHhyZWdleAorK2VuZGlmCisrCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX1NQQVdOKSArPQkJCQkJICAgICAgXAorIAlzcGF3bl9mYWN0aW9uX2luaXQgc3Bhd25fZmFjdGlvbl9kZXN0cm95IHNwYXduX2ZhY3Rpb25fYWRkY2xvc2UJICAgICAgXAorIAlzcGF3bl9mYWN0aW9uX2FkZG9wZW4gc3Bhd25fZmFjdGlvbl9hZGRkdXAyCQkJICAgICAgXAorIAlzcGF3bmF0dHJfaW5pdCBzcGF3bmF0dHJfZGVzdHJveQkJCQkgICAgICBcCitAQCAtNjEsMzcgKzc0LDU0IEBAIHJvdXRpbmVzIDo9CQkJCQkJCQkgICAgICBcCisgCXBvc2l4X21hZHZpc2UJCQkJCQkJICAgICAgXAorIAlnZXRfY2hpbGRfbWF4IHNjaGVkX2NwdWNvdW50IHNjaGVkX2NwdWFsbG9jIHNjaGVkX2NwdWZyZWUKKyAKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfV09SREVYUCkgKz0gd29yZGV4cAorKworIGF1eAkJOj0gaW5pdC1wb3NpeCBlbnZpcm9uCistdGVzdHMJCTo9IHRzdGdldG9wdCB0ZXN0Zm5tIHJ1bnRlc3RzIHJ1bnB0ZXN0cwkgICAgIFwKKyt0ZXN0cwkJOj0gdHN0Z2V0b3B0IHRlc3Rmbm0gcnVudGVzdHMgXAorIAkJICAgdHN0LXByZWFkd3JpdGUgdHN0LXByZWFkd3JpdGU2NCB0ZXN0LXZmb3JrIHJlZ2V4YnVnMSBcCistCQkgICB0c3QtbW1hcCB0c3QtZ2V0YWRkcmluZm8gdHN0LXRydW5jYXRlIFwKKy0JCSAgIHRzdC10cnVuY2F0ZTY0IHRzdC1mb3JrIHRzdC1mbm1hdGNoIHRzdC1yZWdleGxvYyB0c3QtZGlyIFwKKy0JCSAgIHRzdC1jaG1vZCBidWctcmVnZXgxIGJ1Zy1yZWdleDIgYnVnLXJlZ2V4MyBidWctcmVnZXg0IFwKKy0JCSAgIHRzdC1nbnVnbG9iIHRzdC1yZWdleCBidWctcmVnZXg1IGJ1Zy1yZWdleDYgYnVnLXJlZ2V4NyBcCistCQkgICBidWctcmVnZXg4IGJ1Zy1yZWdleDkgYnVnLXJlZ2V4MTAgYnVnLXJlZ2V4MTEgYnVnLXJlZ2V4MTIgXAorLQkJICAgYnVnLXJlZ2V4MTMgYnVnLXJlZ2V4MTQgYnVnLXJlZ2V4MTUgYnVnLXJlZ2V4MTYgXAorLQkJICAgYnVnLXJlZ2V4MTcgYnVnLXJlZ2V4MTggYnVnLXJlZ2V4MTkgYnVnLXJlZ2V4MjAgXAorLQkJICAgYnVnLXJlZ2V4MjEgYnVnLXJlZ2V4MjIgYnVnLXJlZ2V4MjMgYnVnLXJlZ2V4MjQgXAorLQkJICAgYnVnLXJlZ2V4MjUgYnVnLXJlZ2V4MjYgYnVnLXJlZ2V4MjcgYnVnLXJlZ2V4MjggXAorKwkJICAgdHN0LW1tYXAgdHN0LXRydW5jYXRlIFwKKysJCSAgIHRzdC10cnVuY2F0ZTY0IHRzdC1mb3JrIHRzdC1kaXIgXAorKwkJICAgdHN0LWNobW9kIGJ1Zy1yZWdleDIgYnVnLXJlZ2V4MyBidWctcmVnZXg0IFwKKysJCSAgIHRzdC1nbnVnbG9iIGJ1Zy1yZWdleDYgYnVnLXJlZ2V4NyBcCisrCQkgICBidWctcmVnZXg4IGJ1Zy1yZWdleDkgYnVnLXJlZ2V4MTAgYnVnLXJlZ2V4MTIgXAorKwkJICAgYnVnLXJlZ2V4MTQgYnVnLXJlZ2V4MTUgXAorKwkJICAgYnVnLXJlZ2V4MjEgYnVnLXJlZ2V4MjQgXAorKwkJICAgYnVnLXJlZ2V4MjcgYnVnLXJlZ2V4MjggXAorIAkJICAgYnVnLXJlZ2V4MjkgYnVnLXJlZ2V4MzAgYnVnLXJlZ2V4MzEgYnVnLXJlZ2V4MzIgXAorLQkJICAgYnVnLXJlZ2V4MzMgdHN0LW5pY2UgdHN0LW5hbm9zbGVlcCB0c3QtcmVnZXgyIFwKKy0JCSAgIHRyYW5zYnVnIHRzdC1yeHNwZW5jZXIgdHN0LXBjcmUgdHN0LWJvb3N0IFwKKy0JCSAgIGJ1Zy1nYTEgdHN0LXZmb3JrMSB0c3QtdmZvcmsyIHRzdC12Zm9yazMgdHN0LXdhaXRpZCBcCistCQkgICB0c3QtZ2V0YWRkcmluZm8yIGJ1Zy1nbG9iMSBidWctZ2xvYjIgYnVnLWdsb2IzIHRzdC1zeXNjb25mIFwKKysJCSAgIHRzdC1uaWNlIHRzdC1uYW5vc2xlZXAgXAorKwkJICAgdHJhbnNidWcgXAorKwkJICAgdHN0LXZmb3JrMSB0c3QtdmZvcmsyIHRzdC12Zm9yazMgdHN0LXdhaXRpZCBcCisrCQkgICBidWctZ2xvYjEgYnVnLWdsb2IyIGJ1Zy1nbG9iMyB0c3Qtc3lzY29uZiBcCisgCQkgICB0c3QtZXhlY3ZwMSB0c3QtZXhlY3ZwMiB0c3QtZXhlY2xwMSB0c3QtZXhlY2xwMiBcCisgCQkgICB0c3QtZXhlY3YxIHRzdC1leGVjdjIgdHN0LWV4ZWNsMSB0c3QtZXhlY2wyIFwKKyAJCSAgIHRzdC1leGVjdmUxIHRzdC1leGVjdmUyIHRzdC1leGVjbGUxIHRzdC1leGVjbGUyIFwKKy0JCSAgIHRzdC1leGVjdnAzIHRzdC1leGVjdnA0IHRzdC1yZmMzNDg0IHRzdC1yZmMzNDg0LTIgXAorLQkJICAgdHN0LXJmYzM0ODQtMyBcCistCQkgICB0c3QtZ2V0YWRkcmluZm8zIHRzdC1mbm1hdGNoMiB0c3QtY3B1Y291bnQgdHN0LWNwdXNldCBcCisrCQkgICB0c3QtZXhlY3ZwMyB0c3QtZXhlY3ZwNCBcCisrCQkgICB0c3QtZm5tYXRjaDIgdHN0LWNwdWNvdW50IHRzdC1jcHVzZXQgXAorIAkJICAgYnVnLWdldG9wdDEgYnVnLWdldG9wdDIgYnVnLWdldG9wdDMgYnVnLWdldG9wdDQgXAorIAkJICAgYnVnLWdldG9wdDUgdHN0LWdldG9wdF9sb25nMSBidWctcmVnZXgzNCBidWctcmVnZXgzNSBcCisgCQkgICB0c3QtcGF0aGNvbmYgdHN0LWdldGFkZHJpbmZvNCB0c3QtcnhzcGVuY2VyLW5vLXV0ZjggXAorIAkJICAgdHN0LWZubWF0Y2gzIGJ1Zy1yZWdleDM2IHRzdC1nZXRhZGRyaW5mbzUKKy14dGVzdHMJCTo9IGJ1Zy1nYTIKKysKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJCSs9IHRzdC1mbm1hdGNoIHRzdC1yZWdleGxvYyBidWctcmVnZXgxIGJ1Zy1yZWdleDUgXAorKwkJICAgYnVnLXJlZ2V4MjMgYnVnLXJlZ2V4MjUgYnVnLXJlZ2V4MzIgYnVnLXJlZ2V4MzMKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkJKz0gdHN0LWdldGFkZHJpbmZvIGJ1Zy1nYTEgdHN0LWdldGFkZHJpbmZvMiBcCisrCQkgICB0c3QtcmZjMzQ4NCB0c3QtcmZjMzQ4NC0yIHRzdC1yZmMzNDg0LTMgdHN0LWdldGFkZHJpbmZvMworK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQykgXAorKwkJKz0gcnVucHRlc3RzIGJ1Zy1yZWdleDExIGJ1Zy1yZWdleDEzIGJ1Zy1yZWdleDE2IFwKKysJCSAgIHRzdC1yZWdleDIgdHN0LXJ4c3BlbmNlciB0c3QtcGNyZSB0c3QtYm9vc3QKKytpZmVxICh5eSwkKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpJChPUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDKSkKKyt0ZXN0cwkJKz0gdHN0LXJlZ2V4IGJ1Zy1yZWdleDE3IGJ1Zy1yZWdleDE4IGJ1Zy1yZWdleDE5IGJ1Zy1yZWdleDIwIFwKKysJCSAgIGJ1Zy1yZWdleDIyIGJ1Zy1yZWdleDI2CisrZW5kaWYKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IGJ1Zy1nYTIKKysKKyBpZmVxICh5ZXMsJChidWlsZC1zaGFyZWQpKQorIHRlc3Qtc3Jjcwk6PSBnbG9idGVzdAorLXRlc3RzICAgICAgICAgICArPSB3b3JkZXhwLXRlc3QgdHN0LWV4ZWMgdHN0LXNwYXduCisrdGVzdHMJCSs9IHRzdC1leGVjCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX1NQQVdOKSArPSB0c3Qtc3Bhd24KKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfV09SREVYUCkgKz0gd29yZGV4cC10ZXN0CisgZW5kaWYKKyB0ZXN0cy1zdGF0aWMJPSB0c3QtZXhlYy1zdGF0aWMgdHN0LXNwYXduLXN0YXRpYworIHRlc3RzCQkrPSAkKHRlc3RzLXN0YXRpYykKK0BAIC0xMTcsNyArMTQ3LDEwIEBAIGdlbmVyYXRlZCArPSAkKGFkZHByZWZpeCB3b3JkZXhwLXRlc3QtcmVzdWx0LCAxIDIgMyA0IDUgNiA3IDggOSAxMCkgXAorIAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCisgaWZlcSAoeWVzLCQoYnVpbGQtc2hhcmVkKSkKKy10ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWdsb2J0ZXN0Lm91dCAkKG9ianBmeCl3b3JkZXhwLXRzdC5vdXQKKyt0ZXN0cy1zcGVjaWFsICs9ICQob2JqcGZ4KWdsb2J0ZXN0Lm91dAorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX1dPUkRFWFApKQorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpd29yZGV4cC10c3Qub3V0CisrZW5kaWYKKyBlbmRpZgorIGVuZGlmCisgCitAQCAtMTI1LDEyICsxNTgsMTYgQEAgZW5kaWYKKyAjIFhYWCBQbGVhc2Ugbm90ZSB0aGF0IGZvciBub3cgd2UgaWdub3JlIHRoZSByZXN1bHQgb2YgdGhpcyB0ZXN0LgorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYW5uZXhjLm91dAorIGlmZXEgKCQocnVuLWJ1aWx0LXRlc3RzKSx5ZXMpCistdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctcmVnZXgyLW1lbS5vdXQgJChvYmpwZngpYnVnLXJlZ2V4MTQtbWVtLm91dCBcCisrdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctcmVnZXgyLW1lbS5vdXQgXAorIAkJICQob2JqcGZ4KWJ1Zy1yZWdleDIxLW1lbS5vdXQgJChvYmpwZngpYnVnLXJlZ2V4MzEtbWVtLm91dCBcCistCQkgJChvYmpwZngpdHN0LXJ4c3BlbmNlci1uby11dGY4LW1lbS5vdXQgJChvYmpwZngpdHN0LXBjcmUtbWVtLm91dCBcCistCQkgJChvYmpwZngpdHN0LWJvb3N0LW1lbS5vdXQgJChvYmpwZngpdHN0LWdldGNvbmYub3V0IFwKKysJCSAkKG9ianBmeCl0c3QtZ2V0Y29uZi5vdXQgXAorIAkJICQob2JqcGZ4KWJ1Zy1nbG9iMi1tZW0ub3V0ICQob2JqcGZ4KXRzdC12Zm9yazMtbWVtLm91dCBcCisgCQkgJChvYmpwZngpdHN0LWZubWF0Y2gtbWVtLm91dCAkKG9ianBmeClidWctcmVnZXgzNi1tZW0ub3V0CisraWZlcSAoeSwkKE9QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMpKQorK3Rlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpYnVnLXJlZ2V4MTQtbWVtLm91dCAkKG9ianBmeCl0c3QtcnhzcGVuY2VyLW5vLXV0ZjgtbWVtLm91dCBcCisrICAJCSAkKG9ianBmeCl0c3QtcGNyZS1tZW0ub3V0ICQob2JqcGZ4KXRzdC1ib29zdC1tZW0ub3V0CisrZW5kaWYKKysKKyB4dGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClidWctZ2EyLW1lbS5vdXQKKyBlbmRpZgorIAorQEAgLTE0Myw2ICsxODAsOCBAQCAkKG9ianBmeClnbG9idGVzdC5vdXQ6IGdsb2J0ZXN0LnNoICQob2JqcGZ4KWdsb2J0ZXN0CisgCSQoU0hFTEwpICQ8ICQoY29tbW9uLW9ianBmeCkgJyQodGVzdC12aWEtcnRsZC1wcmVmaXgpJyBcCisgCQknJCh0ZXN0LXByb2dyYW0tcHJlZml4KScgJyQodGVzdC13cmFwcGVyLWVudiknOyBcCisgCSQoZXZhbHVhdGUtdGVzdCkKKytMRExJQlMtZ2xvYnRlc3QgKz0gJChzaGVsbCBjYXQgJChjb21tb24tb2JqcGZ4KW5zcy9maXhlZC1uc3N3aXRjaC1saWJzKQorKworICQob2JqcGZ4KXdvcmRleHAtdHN0Lm91dDogd29yZGV4cC10c3Quc2ggJChvYmpwZngpd29yZGV4cC10ZXN0CisgCSQoU0hFTEwpICQ8ICQoY29tbW9uLW9ianBmeCkgJyQodGVzdC1wcm9ncmFtLXByZWZpeC1iZWZvcmUtZW52KScgXAorIAkJICckKHJ1bi1wcm9ncmFtLWVudiknICckKHRlc3QtcHJvZ3JhbS1wcmVmaXgtYWZ0ZXItZW52KSc7IFwKK0BAIC0yMDUsNyArMjQ0LDEwIEBAIHRzdC1kaXItQVJHUyA9IGBwd2RgIGBjZCAkKGNvbW1vbi1vYmpkaXIpLyQoc3ViZGlyKTsgcHdkYCBgY2QgJChjb21tb24tb2JqZGlyKTsKKyB0c3QtY2htb2QtQVJHUyA9ICQob2JqZGlyKQorIHRzdC12Zm9yazMtQVJHUyA9IC0tdGVzdC1kaXI9JChvYmpwZngpCisgCistdHN0LXJ4c3BlbmNlci1BUkdTID0gLS11dGY4IHJ4c3BlbmNlci90ZXN0cworK3RzdC1yeHNwZW5jZXItQVJHUyA9IHJ4c3BlbmNlci90ZXN0cworK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSkKKyt0c3QtcnhzcGVuY2VyLUFSR1MgKz0gLS11dGY4CisrZW5kaWYKKyB0c3QtcnhzcGVuY2VyLW5vLXV0ZjgtQVJHUyA9IHJ4c3BlbmNlci90ZXN0cworIHRzdC1wY3JlLUFSR1MgPSBQQ1JFLnRlc3RzCisgdHN0LWJvb3N0LUFSR1MgPSBCT09TVC50ZXN0cworZGlmZiAtLWdpdCBhL3Bvc2l4L2J1Zy1yZWdleDEuYyBiL3Bvc2l4L2J1Zy1yZWdleDEuYworaW5kZXggMzhlYjU0My4uMTdjZDFhMCAxMDA2NDQKKy0tLSBhL3Bvc2l4L2J1Zy1yZWdleDEuYworKysrIGIvcG9zaXgvYnVnLXJlZ2V4MS5jCitAQCAtNCw2ICs0LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHJlZ2V4Lmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgaW50CisgbWFpbiAodm9pZCkKK0BAIC0xNyw3ICsxOCw5IEBAIG1haW4gKHZvaWQpCisgICBtZW1zZXQgKCZyZWdleCwgJ1wwJywgc2l6ZW9mIChyZWdleCkpOworIAorICAgc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5JU08tODg1OS0xIik7CisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgIGZ3aWRlIChzdGRvdXQsIC0xKTsKKysjZW5kaWYKKyAKKyAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCB8IFJFX0RFQlVHKTsKKyAKK2RpZmYgLS1naXQgYS9wb3NpeC9idWctcmVnZXg2LmMgYi9wb3NpeC9idWctcmVnZXg2LmMKK2luZGV4IGVmY2M4OTAuLjNiMjcwYzcgMTAwNjQ0CistLS0gYS9wb3NpeC9idWctcmVnZXg2LmMKKysrKyBiL3Bvc2l4L2J1Zy1yZWdleDYuYworQEAgLTIyLDYgKzIyLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIGludAorQEAgLTMwLDcgKzMxLDEyIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICByZWdleF90IHJlOworICAgcmVnbWF0Y2hfdCBtYXRbMTBdOworICAgaW50IGksIGosIHJldCA9IDA7CistICBjb25zdCBjaGFyICpsb2NhbGVzW10gPSB7ICJDIiwgImRlX0RFLlVURi04IiB9OworKyAgY29uc3QgY2hhciAqbG9jYWxlc1tdID0geworKyAgICAiQyIsCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAiZGVfREUuVVRGLTgiCisrI2VuZGlmCisrICB9OworICAgY29uc3QgY2hhciAqc3RyaW5nID0gImh0dHA6Ly93d3cucmVnZXguY29tL3BhdHRlcm4vbWF0Y2hpbmcuaHRtbCNpbnRybyI7CisgICByZWdtYXRjaF90IGV4cGVjdFsxMF0gPSB7CisgICAgIHsgMCwgNDggfSwgeyAwLCA1IH0sIHsgMCwgNCB9LCB7IDUsIDIwIH0sIHsgNywgMjAgfSwgeyAyMCwgNDIgfSwKK2RpZmYgLS1naXQgYS9wb3NpeC9mbm1hdGNoLmMgYi9wb3NpeC9mbm1hdGNoLmMKK2luZGV4IGZkODVlZmEuLjAxY2M5ZmUgMTAwNjQ0CistLS0gYS9wb3NpeC9mbm1hdGNoLmMKKysrKyBiL3Bvc2l4L2ZubWF0Y2guYworQEAgLTMwLDYgKzMwLDEwIEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorKyNpZiBkZWZpbmVkIF9MSUJDCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorKyNlbmRpZgorKworICNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCisgIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyAjZW5kaWYKK0BAIC0xMzEsNyArMTM1LDcgQEAgZXh0ZXJuIGludCBmbm1hdGNoIChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncyk7CisgIyAgIGRlZmluZSBJU1dDVFlQRShXQywgV1QpCWlzd2N0eXBlIChXQywgV1QpCisgIyAgZW5kaWYKKyAKKy0jICBpZiAoSEFWRV9NQlNUQVRFX1QgJiYgSEFWRV9NQlNSVE9XQ1MpIHx8IF9MSUJDCisrIyAgaWYgKEhBVkVfTUJTVEFURV9UICYmIEhBVkVfTUJTUlRPV0NTICYmIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkKKyAvKiBJbiB0aGlzIGNhc2Ugd2UgYXJlIGltcGxlbWVudGluZyB0aGUgbXVsdGlieXRlIGNoYXJhY3RlciBoYW5kbGluZy4gICovCisgIyAgIGRlZmluZSBIQU5ETEVfTVVMVElCWVRFCTEKKyAjICBlbmRpZgorZGlmZiAtLWdpdCBhL3Bvc2l4L2ZubWF0Y2hfbG9vcC5jIGIvcG9zaXgvZm5tYXRjaF9sb29wLmMKK2luZGV4IGY0NmM5ZGYuLjc0ZTE3NTQgMTAwNjQ0CistLS0gYS9wb3NpeC9mbm1hdGNoX2xvb3AuYworKysrIGIvcG9zaXgvZm5tYXRjaF9sb29wLmMKK0BAIC0xNSw2ICsxNSw4IEBACisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrCisgI2luY2x1ZGUgPHN0ZGludC5oPgorIAorIHN0cnVjdCBTVFJVQ1QKK0BAIC01NCwxMCArNTYsMTUgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgICBjb25zdCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IGNoYXIgKikKKyAgICAgX05MX0NVUlJFTlQoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKyAjIGVsc2UKKysjICBpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGNvbnN0IFVDSEFSICpjb2xsc2VxID0gKGNvbnN0IFVDSEFSICopCisgICAgIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CistIyBlbmRpZgorLSNlbmRpZgorKyMgICBkZWZpbmUgQ09MTFNFUV9CWVRFX0xPT0tVUChpeCkgKGNvbGxzZXFbKGl4KV0pCisrIyAgZWxzZQorKyMgICBkZWZpbmUgQ09MTFNFUV9CWVRFX0xPT0tVUChpeCkgKGl4KQorKyMgIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworKyMgZW5kaWYgLyogV0lERV9DSEFSX1ZFUlNJT04gKi8KKysjZW5kaWYgLyogX0xJQkMgKi8KKyAKKyAgIHdoaWxlICgoYyA9ICpwKyspICE9IEwoJ1wwJykpCisgICAgIHsKK0BAIC0yNzcsNyArMjg0LDcgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkgICAgLyogTGVhdmUgcm9vbSBmb3IgdGhlIG51bGwuICAqLworIAkJICAgIENIQVIgc3RyW0NIQVJfQ0xBU1NfTUFYX0xFTkdUSCArIDFdOworIAkJICAgIHNpemVfdCBjMSA9IDA7CistI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKysjaWYgZGVmaW5lZCBfTElCQyA/IF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgOiAoZGVmaW5lZCBIQVZFX1dDVFlQRV9IICYmIGRlZmluZWQgSEFWRV9XQ0hBUl9IKQorIAkJICAgIHdjdHlwZV90IHd0OworICNlbmRpZgorIAkJICAgIGNvbnN0IENIQVIgKnN0YXJ0cCA9IHA7CitAQCAtMzA3LDcgKzMxNCw3IEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJICAgICAgfQorIAkJICAgIHN0cltjMV0gPSBMKCdcMCcpOworIAorLSNpZiBkZWZpbmVkIF9MSUJDIHx8IChkZWZpbmVkIEhBVkVfV0NUWVBFX0ggJiYgZGVmaW5lZCBIQVZFX1dDSEFSX0gpCisrI2lmIGRlZmluZWQgX0xJQkMgPyBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSIDogKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCkKKyAJCSAgICB3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisgCQkgICAgaWYgKHd0ID09IDApCisgCQkgICAgICAvKiBJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgKi8KK0BAIC02ODAsOCArNjg3LDEwIEBAIEZDVCAocGF0dGVybiwgc3RyaW5nLCBzdHJpbmdfZW5kLCBub19sZWFkaW5nX3BlcmlvZCwgZmxhZ3MsIGVuZHMsIGFsbG9jYV91c2VkKQorIAkJCWVsc2UKKyAJCQkgIGxjb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcSwgY29sZCk7CisgIyBlbHNlCistCQkJZmNvbGxzZXEgPSBjb2xsc2VxW2ZuXTsKKy0JCQlsY29sbHNlcSA9IGlzX3NlcXZhbCA/IGNvbGQgOiBjb2xsc2VxWyhVQ0hBUikgY29sZF07CisrCQkJZmNvbGxzZXEgPSBDT0xMU0VRX0JZVEVfTE9PS1VQIChmbik7CisrCQkJbGNvbGxzZXEgPSAoaXNfc2VxdmFsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2xkCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBDT0xMU0VRX0JZVEVfTE9PS1VQICgoVUNIQVIpIGNvbGQpKTsKKyAjIGVuZGlmCisgCisgCQkJaXNfc2VxdmFsID0gMDsKK0BAIC04NTcsNyArODY2LDcgQEAgRkNUIChwYXR0ZXJuLCBzdHJpbmcsIHN0cmluZ19lbmQsIG5vX2xlYWRpbmdfcGVyaW9kLCBmbGFncywgZW5kcywgYWxsb2NhX3VzZWQpCisgCQkJCSAgICBnb3RvIG1hdGNoZWQ7CisgCQkJCSAgfQorICMgZWxzZQorLQkJCQloY29sbHNlcSA9IGNvbGxzZXFbY2VuZF07CisrCQkJCWhjb2xsc2VxID0gQ09MTFNFUV9CWVRFX0xPT0tVUCAoY2VuZCk7CisgIyBlbmRpZgorIAkJCSAgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9wb3NpeC9nbG9iLmMgYi9wb3NpeC9nbG9iLmMKK2luZGV4IGQ2NWU1NWQuLjFhYzAwYTEgMTAwNjQ0CistLS0gYS9wb3NpeC9nbG9iLmMKKysrKyBiL3Bvc2l4L2dsb2IuYworQEAgLTI1LDYgKzI1LDkgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKysjZW5kaWYKKyAKKyAvKiBPdXRjb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBmb3IgcHJvZHVjdGlvbiBxdWFsaXR5IGNvZGUuICAqLworIC8qICNkZWZpbmUgTkRFQlVHIDEgKi8KK0BAIC02MDcsNiArNjEwLDcgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkgIGlmIChob21lX2RpciA9PSBOVUxMIHx8IGhvbWVfZGlyWzBdID09ICdcMCcpCisgCSAgICBob21lX2RpciA9ICJjOi91c2Vycy9kZWZhdWx0IjsgLyogcG9vciBkZWZhdWx0ICovCisgIyAgZWxzZQorKyMgICBpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19HRVRMT0dJTgorIAkgIGlmIChob21lX2RpciA9PSBOVUxMIHx8IGhvbWVfZGlyWzBdID09ICdcMCcpCisgCSAgICB7CisgCSAgICAgIGludCBzdWNjZXNzOworQEAgLTYyMywxOSArNjI3LDE5IEBAIGdsb2IgKHBhdHRlcm4sIGZsYWdzLCBlcnJmdW5jLCBwZ2xvYikKKyAJICAgICAgaWYgKHN1Y2Nlc3MpCisgCQl7CisgCQkgIHN0cnVjdCBwYXNzd2QgKnA7CistIyAgIGlmIGRlZmluZWQgSEFWRV9HRVRQV05BTV9SIHx8IGRlZmluZWQgX0xJQkMKKysjICAgIGlmIGRlZmluZWQgSEFWRV9HRVRQV05BTV9SIHx8IGRlZmluZWQgX0xJQkMKKyAJCSAgbG9uZyBpbnQgcHdidWZsZW4gPSBHRVRQV19SX1NJWkVfTUFYICgpOworIAkJICBjaGFyICpwd3RtcGJ1ZjsKKyAJCSAgc3RydWN0IHBhc3N3ZCBwd2J1ZjsKKyAJCSAgaW50IG1hbGxvY19wd3RtcGJ1ZiA9IDA7CisgCQkgIGludCBzYXZlID0gZXJybm87CisgCistIyAgICBpZm5kZWYgX0xJQkMKKysjICAgICBpZm5kZWYgX0xJQkMKKyAJCSAgaWYgKHB3YnVmbGVuID09IC0xKQorIAkJICAgIC8qIGBzeXNjb25mJyBkb2VzIG5vdCBzdXBwb3J0IF9TQ19HRVRQV19SX1NJWkVfTUFYLgorIAkJICAgICAgIFRyeSBhIG1vZGVyYXRlIHZhbHVlLiAgKi8KKyAJCSAgICBwd2J1ZmxlbiA9IDEwMjQ7CistIyAgICBlbmRpZgorKyMgICAgIGVuZGlmCisgCQkgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAoYWxsb2NhX3VzZWQgKyBwd2J1ZmxlbikpCisgCQkgICAgcHd0bXBidWYgPSBhbGxvY2FfYWNjb3VudCAocHdidWZsZW4sIGFsbG9jYV91c2VkKTsKKyAJCSAgZWxzZQorQEAgLTY4Miw5ICs2ODYsOSBAQCBnbG9iIChwYXR0ZXJuLCBmbGFncywgZXJyZnVuYywgcGdsb2IpCisgCQkJfQorIAkJICAgICAgX19zZXRfZXJybm8gKHNhdmUpOworIAkJICAgIH0KKy0jICAgZWxzZQorKyMgICAgZWxzZQorIAkJICBwID0gZ2V0cHduYW0gKG5hbWUpOworLSMgICBlbmRpZgorKyMgICAgZW5kaWYKKyAJCSAgaWYgKHAgIT0gTlVMTCkKKyAJCSAgICB7CisgCQkgICAgICBpZiAoIW1hbGxvY19wd3RtcGJ1ZikKK0BAIC03MTMsNiArNzE3LDcgQEAgZ2xvYiAocGF0dGVybiwgZmxhZ3MsIGVycmZ1bmMsIHBnbG9iKQorIAkJICAgIH0KKyAJCX0KKyAJICAgIH0KKysjICAgZW5kaWYgLyogISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfR0VUTE9HSU4gKi8KKyAJICBpZiAoaG9tZV9kaXIgPT0gTlVMTCB8fCBob21lX2RpclswXSA9PSAnXDAnKQorIAkgICAgeworIAkgICAgICBpZiAoZmxhZ3MgJiBHTE9CX1RJTERFX0NIRUNLKQorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2NvbXAuYyBiL3Bvc2l4L3JlZ2NvbXAuYworaW5kZXggYmY4YWExNi4uNmE0MTI1MSAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2NvbXAuYworKysrIGIvcG9zaXgvcmVnY29tcC5jCitAQCAtMTgsNiArMTgsNyBAQAorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgPHN0ZGludC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZmRlZiBfTElCQworICMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorQEAgLTMwOSw3ICszMTAsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyB7CisgICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGJ1ZnAtPmJ1ZmZlcjsKKyAgIGludCBub2RlX2NudDsKKy0gIGludCBpY2FzZSA9IChkZmEtPm1iX2N1cl9tYXggPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKysgIGludCBpY2FzZSA9IChkZmFfbWJfY3VyX21heCAoZGZhKSA9PSAxICYmIChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkpOworICAgZm9yIChub2RlX2NudCA9IDA7IG5vZGVfY250IDwgaW5pdF9zdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgIHsKKyAgICAgICBpbnQgbm9kZSA9IGluaXRfc3RhdGUtPm5vZGVzLmVsZW1zW25vZGVfY250XTsKK0BAIC0zMTksOSArMzIwLDkgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCXsKKyAJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGRmYS0+bm9kZXNbbm9kZV0ub3ByLmMpOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisrCSAgaWYgKChidWZwLT5zeW50YXggJiBSRV9JQ0FTRSkgJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkgICAgeworLQkgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBhbGxvY2EgKGRmYS0+bWJfY3VyX21heCksICpwOworKwkgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBhbGxvY2EgKGRmYV9tYl9jdXJfbWF4IChkZmEpKSwgKnA7CisgCSAgICAgIHdjaGFyX3Qgd2M7CisgCSAgICAgIG1ic3RhdGVfdCBzdGF0ZTsKKyAKK0BAIC0zNTIsNyArMzUzLDExIEBAIHJlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorIAkJICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgaWNhc2UsIGNoKTsKKyAJICAgIH0KKyAJfQorLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKworKyAgICAgIC8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhlIGN1cnJlbnQKKysgICAgICAgICBsb2NhbGUgaXMgYWx3YXlzIEMsIHdoaWNoIGhhcyBubyBydWxlcyBhbmQgbm8gbXVsdGktYnl0ZQorKyAgICAgICAgIGNoYXJhY3RlcnMuICAqLworKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorIAl7CisgCSAgcmVfY2hhcnNldF90ICpjc2V0ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIubWJjc2V0OworQEAgLTM4MCw3ICszODUsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJICAgICBpLmUuIHdoZXJlIHdlIHdvdWxkIG5vdCBmaW5kIGFuIGludmFsaWQgc2VxdWVuY2UuICBUaGlzIG9ubHkKKyAJICAgICBhcHBsaWVzIHRvIG11bHRpYnl0ZSBjaGFyYWN0ZXIgc2V0czsgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcgorIAkgICAgIHNldHMsIHRoZSBTSU1QTEVfQlJBQ0tFVCBhZ2FpbiBzdWZmaWNlcy4gICovCistCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEKKysJICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxCisgCSAgICAgICYmIChjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5vbl9tYXRjaCB8fCBjc2V0LT5ucmFuZ2VzCisgIyBpZmRlZiBfTElCQworIAkJICB8fCBjc2V0LT5uZXF1aXZfY2xhc3NlcworQEAgLTQwOCw3ICs0MTMsNyBAQCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwgY29uc3QgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZSwKKyAJCSAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAoc3RhdGUpKTsKKyAJCSAgaWYgKF9fd2NydG9tYiAoYnVmLCBjc2V0LT5tYmNoYXJzW2ldLCAmc3RhdGUpICE9IChzaXplX3QpIC0xKQorIAkJICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgKih1bnNpZ25lZCBjaGFyICopIGJ1Zik7CistCQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisrCQkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJCSAgICB7CisgCQkgICAgICBpZiAoX193Y3J0b21iIChidWYsIF9fdG93bG93ZXIgKGNzZXQtPm1iY2hhcnNbaV0pLCAmc3RhdGUpCisgCQkJICAhPSAoc2l6ZV90KSAtMSkKK0BAIC00MTcsNyArNDIyLDcgQEAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKHJlZ2V4X3QgKmJ1ZnAsIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisgCQl9CisgCSAgICB9CisgCX0KKy0jZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKysjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAJICAgICAgIHx8IHR5cGUgPT0gT1BfVVRGOF9QRVJJT0QKK0BAIC04NjAsMTEgKzg2NSwxNSBAQCBpbml0X2RmYSAocmVfZGZhX3QgKmRmYSwgc2l6ZV90IHBhdF9sZW4pCisgCisgICBkZmEtPm1iX2N1cl9tYXggPSBNQl9DVVJfTUFYOworICNpZmRlZiBfTElCQworLSAgaWYgKGRmYS0+bWJfY3VyX21heCA9PSA2CisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gNgorICAgICAgICYmIHN0cmNtcCAoX05MX0NVUlJFTlQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FKSwgIlVURi04IikgPT0gMCkKKyAgICAgZGZhLT5pc191dGY4ID0gMTsKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgZGZhLT5tYXBfbm90YXNjaWkgPSAoX05MX0NVUlJFTlRfV09SRCAoTENfQ1RZUEUsIF9OTF9DVFlQRV9NQVBfVE9fTk9OQVNDSUkpCisgCQkgICAgICAgIT0gMCk7CisrIyBlbHNlCisrICBkZmEtPm1hcF9ub3Rhc2NpaSA9IDA7CisrIyBlbmRpZgorICNlbHNlCisgIyBpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKyAgIGNvZGVzZXRfbmFtZSA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKK0BAIC04OTAsNyArODk5LDcgQEAgaW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQorICNlbmRpZgorIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICB7CisgICAgICAgaWYgKGRmYS0+aXNfdXRmOCkKKyAJZGZhLT5zYl9jaGFyID0gKHJlX2JpdHNldF9wdHJfdCkgdXRmOF9zYl9tYXA7CitAQCAtMTc4OCw3ICsxNzk3LDcgQEAgcGVla190b2tlbiAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAgIHRva2VuLT53b3JkX2NoYXIgPSAwOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgdG9rZW4tPm1iX3BhcnRpYWwgPSAwOworLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxICYmCisgICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgIHsKKyAgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKK0BAIC0xODA5LDcgKzE4MTgsNyBAQCBwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQorICAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChpbnB1dCkgPiAxKQorIAl7CisgCSAgd2ludF90IHdjID0gcmVfc3RyaW5nX3djaGFyX2F0IChpbnB1dCwKKyAJCQkJCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEpOworQEAgLTE5MjMsNyArMTkzMiw3IEBAIHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCisgCisgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEpCisgICAgIHsKKyAgICAgICB3aW50X3Qgd2MgPSByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKTsKKyAgICAgICB0b2tlbi0+d29yZF9jaGFyID0gSVNfV0lERV9XT1JEX0NIQVIgKHdjKSAhPSAwOworQEAgLTIwMjMsNyArMjAzMiw3IEBAIHBlZWtfdG9rZW5fYnJhY2tldCAocmVfdG9rZW5fdCAqdG9rZW4sIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKKyAgIHRva2VuLT5vcHIuYyA9IGM7CisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxICYmCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKGlucHV0KSA+IDEgJiYKKyAgICAgICAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKGlucHV0LCByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpKSkKKyAgICAgeworICAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworQEAgLTIyNDYsNyArMjI1NSw3IEBAIHBhcnNlX2V4cHJlc3Npb24gKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgIHJldHVybiBOVUxMOworIAl9CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJeworIAkgIHdoaWxlICghcmVfc3RyaW5nX2VvaSAocmVnZXhwKQorIAkJICYmICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSkpCitAQCAtMjM4NCw3ICsyMzkzLDcgQEAgcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgKmVyciA9IFJFR19FU1BBQ0U7CisgCSAgcmV0dXJuIE5VTEw7CisgCX0KKy0gICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAlkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBPUF9XT1JEOgorQEAgLTI2OTAsNyArMjY5OSw3IEBAIGJ1aWxkX3JhbmdlX2V4cCAoYml0c2V0X3Qgc2Jjc2V0LCBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwKKyAgICAgICAgSG93ZXZlciwgZm9yICFfTElCQyB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBlbGVtZW50czogaWYgdGhlCisgICAgICAgIGNoYXJhY3RlciBzZXQgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0CisgICAgICAgIHRoYXQgd2UgYnVpbGQgYmVsb3cgc3VmZmljZXMuICBwYXJzZV9icmFja2V0X2V4cCBwYXNzZXMKKy0gICAgICAgbm8gTUJDU0VUIGlmIGRmYS0+bWJfY3VyX21heCA9PSAxLiAgKi8KKysgICAgICAgbm8gTUJDU0VUIGlmIGRmYV9tYl9jdXJfbWF4IChkZmEpID09IDEuICAqLworICAgICBpZiAobWJjc2V0KQorICAgICAgIHsKKyAJLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworQEAgLTI3ODYsNyArMjc5NSwxMyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCQkgICByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCisgeworICNpZmRlZiBfTElCQworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbGxzZXFtYjsKKysjIGRlZmluZSBDT0xMU0VRTUJfTE9PS1VQKGl4KSAoY29sbHNlcW1iWyhpeCldKQorKyNlbHNlCisrIyBkZWZpbmUgQ09MTFNFUU1CX0xPT0tVUChpeCkgKGl4KQorKyNlbmRpZgorKworICAgY29uc3QgY2hhciAqY29sbHNlcXdjOworICAgdWludDMyX3QgbnJ1bGVzOworICAgaW50MzJfdCB0YWJsZV9zaXplOworQEAgLTI4MzQsMTggKzI4NDksMjAgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkgIGlmIChNQl9DVVJfTUFYID09IDEpCisgCSAgKi8KKyAJICBpZiAobnJ1bGVzID09IDApCistCSAgICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5jaF07CisrCSAgICByZXR1cm4gQ09MTFNFUU1CX0xPT0tVUCAoYnJfZWxlbS0+b3ByLmNoKTsKKyAJICBlbHNlCisgCSAgICB7CisgCSAgICAgIHdpbnRfdCB3YyA9IF9fYnRvd2MgKGJyX2VsZW0tPm9wci5jaCk7CisgCSAgICAgIHJldHVybiBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIHdjKTsKKyAJICAgIH0KKyAJfQorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgICBlbHNlIGlmIChicl9lbGVtLT50eXBlID09IE1CX0NIQVIpCisgCXsKKyAJICBpZiAobnJ1bGVzICE9IDApCisgCSAgICByZXR1cm4gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBicl9lbGVtLT5vcHIud2NoKTsKKyAJfQorKyNlbmRpZgorICAgICAgIGVsc2UgaWYgKGJyX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisgCXsKKyAJICBzaXplX3Qgc3ltX25hbWVfbGVuID0gc3RybGVuICgoY2hhciAqKSBicl9lbGVtLT5vcHIubmFtZSk7CitAQCAtMjg3NiwxMSArMjg5MywxMSBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCQl7CisgCQkgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEgc2luZ2xlIGJ5dGUKKyAJCSAgICAgY2hhcmFjdGVyLiAgKi8KKy0JCSAgcmV0dXJuIGNvbGxzZXFtYlticl9lbGVtLT5vcHIubmFtZVswXV07CisrCQkgIHJldHVybiBDT0xMU0VRTUJfTE9PS1VQIChicl9lbGVtLT5vcHIubmFtZVswXSk7CisgCQl9CisgCSAgICB9CisgCSAgZWxzZSBpZiAoc3ltX25hbWVfbGVuID09IDEpCistCSAgICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKysJICAgIHJldHVybiBDT0xMU0VRTUJfTE9PS1VQIChicl9lbGVtLT5vcHIubmFtZVswXSk7CisgCX0KKyAgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgIH0KK0BAIC0yOTIwLDcgKzI5MzcsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSBIb3dldmVyLCBpZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBlbGVtZW50cywgYW5kIHRoZSBjaGFyYWN0ZXIgc2V0CisgCSBpcyBzaW5nbGUgYnl0ZSwgdGhlIHNpbmdsZSBieXRlIGNoYXJhY3RlciBzZXQgdGhhdCB3ZQorIAkgYnVpbGQgYmVsb3cgc3VmZmljZXMuICovCistICAgICAgaWYgKG5ydWxlcyA+IDAgfHwgZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAobnJ1bGVzID4gMCB8fCBkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCXsKKyAJICAvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisgCSAgaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKK0BAIC0yOTU3LDcgKzI5NzQsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCSAgaWYgKE1CX0NVUl9NQVggPT0gMSkKKyAJICAqLworIAkgIGlmIChucnVsZXMgPT0gMCkKKy0JICAgIGNoX2NvbGxzZXEgPSBjb2xsc2VxbWJbY2hdOworKwkgICAgY2hfY29sbHNlcSA9IENPTExTRVFNQl9MT09LVVAgKGNoKTsKKyAJICBlbHNlCisgCSAgICBjaF9jb2xsc2VxID0gX19jb2xsc2VxX3RhYmxlX2xvb2t1cCAoY29sbHNlcXdjLCBfX2J0b3djIChjaCkpOworIAkgIGlmIChzdGFydF9jb2xsc2VxIDw9IGNoX2NvbGxzZXEgJiYgY2hfY29sbHNlcSA8PSBlbmRfY29sbHNlcSkKK0BAIC0zMDM1LDcgKzMwNTIsMTAgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorICAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworLSAgaW50IGNvbGxfc3ltX2FsbG9jID0gMCwgcmFuZ2VfYWxsb2MgPSAwLCBtYmNoYXJfYWxsb2MgPSAwOworKyAgaW50IGNvbGxfc3ltX2FsbG9jID0gMCwgcmFuZ2VfYWxsb2MgPSAwOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysgIGludCBtYmNoYXJfYWxsb2MgPSAwOworKyNlbmRpZgorICAgaW50IGVxdWl2X2NsYXNzX2FsbG9jID0gMCwgY2hhcl9jbGFzc19hbGxvYyA9IDA7CisgI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgaW50IG5vbl9tYXRjaCA9IDA7CitAQCAtMzA0Myw5ICszMDYzLDE1IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAgIGludCB0b2tlbl9sZW47CisgICBpbnQgZmlyc3Rfcm91bmQgPSAxOworICNpZmRlZiBfTElCQworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGNvbGxzZXFtYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisgICAgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRTUIpOworICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKysjZWxzZQorKyAgLyogVGhpcyBpcyB0cnVlIHdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgYnV0IHRoZQorKyAgICAgY29tcGlsZXIgY2FuJ3QgZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIG5ydWxlcyA9IDA7CisrI2VuZGlmCisgICBpZiAobnJ1bGVzKQorICAgICB7CisgICAgICAgLyoKK0BAIC0zMTc1LDcgKzMyMDEsNyBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgI2Vsc2UKKyAjIGlmZGVmIFJFX0VOQUJMRV9JMThOCisgCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LAorLQkJCQkgIGRmYS0+bWJfY3VyX21heCA+IDEgPyBtYmNzZXQgOiBOVUxMLAorKwkJCQkgIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSA/IG1iY3NldCA6IE5VTEwsCisgCQkJCSAgJnJhbmdlX2FsbG9jLCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyAjIGVsc2UKKyAJICAqZXJyID0gYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworQEAgLTMxOTEsNyArMzIxNyw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKyAJICAgIGNhc2UgU0JfQ0hBUjoKKyAJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBzdGFydF9lbGVtLm9wci5jaCk7CisgCSAgICAgIGJyZWFrOworLSNpZmRlZiBSRV9FTkFCTEVfSTE4TgorKyNpZiBkZWZpbmVkIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgY2FzZSBNQl9DSEFSOgorIAkgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKyAJICAgICAgaWYgKEJFIChtYmNoYXJfYWxsb2MgPT0gbWJjc2V0LT5ubWJjaGFycywgMCkpCitAQCAtMzIwOSw3ICszMjM1LDcgQEAgcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorIAkJfQorIAkgICAgICBtYmNzZXQtPm1iY2hhcnNbbWJjc2V0LT5ubWJjaGFycysrXSA9IHN0YXJ0X2VsZW0ub3ByLndjaDsKKyAJICAgICAgYnJlYWs7CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAkgICAgY2FzZSBFUVVJVl9DTEFTUzoKKyAJICAgICAgKmVyciA9IGJ1aWxkX2VxdWl2X2NsYXNzIChzYmNzZXQsCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCitAQCAtMzI1OSwxMSArMzI4NSwxMSBAQCBwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCAqdG9rZW4sCisgCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAvKiBFbnN1cmUgb25seSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzIGFyZSBzZXQuICAqLworLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICBiaXRzZXRfbWFzayAoc2Jjc2V0LCBkZmEtPnNiX2NoYXIpOworIAorICAgaWYgKG1iY3NldC0+bm1iY2hhcnMgfHwgbWJjc2V0LT5uY29sbF9zeW1zIHx8IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMKKy0gICAgICB8fCBtYmNzZXQtPm5yYW5nZXMgfHwgKGRmYS0+bWJfY3VyX21heCA+IDEgJiYgKG1iY3NldC0+bmNoYXJfY2xhc3NlcworKyAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxICYmIChtYmNzZXQtPm5jaGFyX2NsYXNzZXMKKyAJCQkJCQkgICAgIHx8IG1iY3NldC0+bm9uX21hdGNoKSkpCisgICAgIHsKKyAgICAgICBiaW5fdHJlZV90ICptYmNfdHJlZTsKK0BAIC0zMzMyLDcgKzMzNTgsNyBAQCBwYXJzZV9icmFja2V0X2VsZW1lbnQgKGJyYWNrZXRfZWxlbV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorIAkJICAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCBpbnQgdG9rZW5fbGVuLCByZV9kZmFfdCAqZGZhLAorIAkJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBhY2NlcHRfaHlwaGVuKQorIHsKKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGludCBjdXJfY2hhcl9zaXplOworICAgY3VyX2NoYXJfc2l6ZSA9IHJlX3N0cmluZ19jaGFyX3NpemVfYXQgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpOworICAgaWYgKGN1cl9jaGFyX3NpemUgPiAxKQorQEAgLTMzNDIsNyArMzM2OCw3IEBAIHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoYnJhY2tldF9lbGVtX3QgKmVsZW0sIHJlX3N0cmluZ190ICpyZWdleHAsCisgICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgY3VyX2NoYXJfc2l6ZSk7CisgICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgICB9CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NPTExfRUxFTSB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NIQVJfQ0xBU1MKKyAgICAgICB8fCB0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0VRVUlWX0NMQVNTKQorQEAgLTM0MjIsNyArMzQ0OCw5IEBAIGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorIGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisgI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworIHsKKy0jaWZkZWYgX0xJQkMKKysgIC8qIFdoZW4gX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBvbmx5IHRoZSBDIGxvY2FsZQorKyAgICAgaXMgc3VwcG9ydGVkOyBpdCBoYXMgbm8gY29sbGF0aW9uIHJ1bGVzLiAgKi8KKysjaWYgZGVmaW5lZCBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHVpbnQzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgICBpZiAobnJ1bGVzICE9IDApCisgICAgIHsKK0BAIC0zNDkyLDcgKzM1MjAsNyBAQCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorICAgICAgIG1iY3NldC0+ZXF1aXZfY2xhc3Nlc1ttYmNzZXQtPm5lcXVpdl9jbGFzc2VzKytdID0gaWR4MTsKKyAgICAgfQorICAgZWxzZQorLSNlbmRpZiAvKiBfTElCQyAqLworKyNlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAgICAgeworICAgICAgIGlmIChCRSAoc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKSAhPSAxLCAwKSkKKyAJcmV0dXJuIFJFR19FQ09MTEFURTsKK0BAIC0zNTI2LDcgKzM1NTQsNyBAQCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisgICAgICAgJiYgKHN0cmNtcCAobmFtZSwgInVwcGVyIikgPT0gMCB8fCBzdHJjbXAgKG5hbWUsICJsb3dlciIpID09IDApKQorICAgICBuYW1lID0gImFscGhhIjsKKyAKKy0jaWZkZWYgUkVfRU5BQkxFX0kxOE4KKysjaWYgZGVmaW5lZCBSRV9FTkFCTEVfSTE4TiAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKyAgIGlmIChCRSAoKmNoYXJfY2xhc3NfYWxsb2MgPT0gbWJjc2V0LT5uY2hhcl9jbGFzc2VzLCAwKSkKKyAgICAgeworQEAgLTM1NDIsNyArMzU3MCw3IEBAIGJ1aWxkX2NoYXJjbGFzcyAoUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsIGJpdHNldF90IHNiY3NldCwKKyAgICAgICAqY2hhcl9jbGFzc19hbGxvYyA9IG5ld19jaGFyX2NsYXNzX2FsbG9jOworICAgICB9CisgICBtYmNzZXQtPmNoYXJfY2xhc3Nlc1ttYmNzZXQtPm5jaGFyX2NsYXNzZXMrK10gPSBfX3djdHlwZSAobmFtZSk7CistI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisrI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAorICNkZWZpbmUgQlVJTERfQ0hBUkNMQVNTX0xPT1AoY3R5cGVfZnVuYykJXAorICAgZG8gewkJCQkJCVwKK0BAIC0zNjUzLDcgKzM2ODEsNyBAQCBidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKy0gIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyAjZW5kaWYKKyAKK0BAIC0zNjY1LDcgKzM2OTMsNyBAQCBidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorICAgICBnb3RvIGJ1aWxkX3dvcmRfb3BfZXNwYWNlOworIAorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorICAgICB7CisgICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CisgICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJyYWNrZXQuICAqLworZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4LmggYi9wb3NpeC9yZWdleC5oCitpbmRleCA1YjE5ODFlLi4yOTQxZjk0IDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXguaAorKysrIGIvcG9zaXgvcmVnZXguaAorQEAgLTIxLDYgKzIxLDcgQEAKKyAjZGVmaW5lIF9SRUdFWF9IIDEKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgLyogQWxsb3cgdGhlIHVzZSBpbiBDKysgY29kZS4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCitAQCAtMTU2LDYgKzE1Nyw4IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworICAgIHRyZWF0ZWQgYXMgJ2FcezEnLiAgKi8KKyAjIGRlZmluZSBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCAoUkVfREVCVUcgPDwgMSkKKyAKKysvKiBFR0xJQkM6IE9sZCByZWdleCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlLiAgKi8KKysjIGlmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQworIC8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisgIyBkZWZpbmUgUkVfSUNBU0UgKFJFX0lOVkFMSURfSU5URVJWQUxfT1JEIDw8IDEpCitAQCAtMTcyLDYgKzE3NSw3IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcmVnX3N5bnRheF90OworIC8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBub19zdWIgd2lsbCBiZSBzZXQgdG8gMSBkdXJpbmcKKyAgICByZV9jb21waWxlX3BhdHRlcm4uICAqLworICMgZGVmaW5lIFJFX05PX1NVQiAoUkVfQ09OVEVYVF9JTlZBTElEX0RVUCA8PCAxKQorKyMgZW5kaWYgLyogX19PUFRJT05fUE9TSVhfUkVHRVhQX0dMSUJDICovCisgI2VuZGlmCisgCisgLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciByZWdleHAgc3ludGF4IHRvIHVzZSAoZm9yCitAQCAtMjMxLDggKzIzNSwxMyBAQCBleHRlcm4gcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworICAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0RPVF9ORVdMSU5FICAgICAgfCBSRV9ET1RfTk9UX05VTEwJCVwKKyAgICB8IFJFX0lOVEVSVkFMUyAgfCBSRV9OT19FTVBUWV9SQU5HRVMpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1JFR0VYUF9HTElCQworICNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCQkJCQkJXAorICAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OIHwgUkVfQktfUExVU19RTSB8IFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisrI2Vsc2UKKysjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9CQVNJQwkJCQkJCVwKKysgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0JLX1BMVVNfUU0pCisrI2VuZGlmCisgCisgLyogRGlmZmVycyBmcm9tIC4uLl9QT1NJWF9CQVNJQyBvbmx5IGluIHRoYXQgUkVfQktfUExVU19RTSBiZWNvbWVzCisgICAgUkVfTElNSVRFRF9PUFMsIGkuZS4sIFw/IFwrIFx8IGFyZSBub3QgcmVjb2duaXplZC4gIEFjdHVhbGx5LCB0aGlzCitAQCAtMjk4LDkgKzMwNywxMSBAQCBleHRlcm4gcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworIC8qIExpa2UgUkVHX05PVEJPTCwgZXhjZXB0IGZvciB0aGUgZW5kLW9mLWxpbmUuICAqLworICNkZWZpbmUgUkVHX05PVEVPTCAoMSA8PCAxKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9SRUdFWFBfR0xJQkMKKyAvKiBVc2UgUE1BVENIWzBdIHRvIGRlbGltaXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHNlYXJjaCBpbiB0aGUKKyAgICBidWZmZXIuICAqLworICNkZWZpbmUgUkVHX1NUQVJURU5EICgxIDw8IDIpCisrI2VuZGlmCisgCisgCisgLyogSWYgYW55IGVycm9yIGNvZGVzIGFyZSByZW1vdmVkLCBjaGFuZ2VkLCBvciBhZGRlZCwgdXBkYXRlIHRoZQorZGlmZiAtLWdpdCBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmMgYi9wb3NpeC9yZWdleF9pbnRlcm5hbC5jCitpbmRleCA4NTk3ZDdlLi5kNTNiMmE4IDEwMDY0NAorLS0tIGEvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYworKysrIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuYworQEAgLTQzLDggKzQzLDggQEAgcmVfc3RyaW5nX2FsbG9jYXRlIChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgaW5pdF9sZW4sCisgICBpbnQgaW5pdF9idWZfbGVuOworIAorICAgLyogRW5zdXJlIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgZml0cyBpbnRvIHRoZSBidWZmZXJzLiAgKi8KKy0gIGlmIChpbml0X2xlbiA8IGRmYS0+bWJfY3VyX21heCkKKy0gICAgaW5pdF9sZW4gPSBkZmEtPm1iX2N1cl9tYXg7CisrICBpZiAoaW5pdF9sZW4gPCBkZmFfbWJfY3VyX21heCAoZGZhKSkKKysgICAgaW5pdF9sZW4gPSBkZmFfbWJfY3VyX21heCAoZGZhKTsKKyAgIGluaXRfYnVmX2xlbiA9IChsZW4gKyAxIDwgaW5pdF9sZW4pID8gbGVuICsgMTogaW5pdF9sZW47CisgICByZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoc3RyLCBsZW4sIHBzdHIsIHRyYW5zLCBpY2FzZSwgZGZhKTsKKyAKK0BAIC01NSw3ICs1NSw3IEBAIHJlX3N0cmluZ19hbGxvY2F0ZSAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgaW50IGluaXRfbGVuLAorICAgcHN0ci0+d29yZF9jaGFyID0gZGZhLT53b3JkX2NoYXI7CisgICBwc3RyLT53b3JkX29wc191c2VkID0gZGZhLT53b3JkX29wc191c2VkOworICAgcHN0ci0+bWJzID0gcHN0ci0+bWJzX2FsbG9jYXRlZCA/IHBzdHItPm1icyA6ICh1bnNpZ25lZCBjaGFyICopIHN0cjsKKy0gIHBzdHItPnZhbGlkX2xlbiA9IChwc3RyLT5tYnNfYWxsb2NhdGVkIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpID8gMCA6IGxlbjsKKysgIHBzdHItPnZhbGlkX2xlbiA9IChwc3RyLT5tYnNfYWxsb2NhdGVkIHx8IGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkgPyAwIDogbGVuOworICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKyAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyB9CitAQCAtODIsNyArODIsNyBAQCByZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorICAgaWYgKGljYXNlKQorICAgICB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJeworIAkgIHdoaWxlICgxKQorIAkgICAgeworQEAgLTkxLDcgKzkxLDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKyAJCXJldHVybiByZXQ7CisgCSAgICAgIGlmIChwc3RyLT52YWxpZF9yYXdfbGVuID49IGxlbikKKyAJCWJyZWFrOworLQkgICAgICBpZiAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT52YWxpZF9sZW4gKyBkZmEtPm1iX2N1cl9tYXgpCisrCSAgICAgIGlmIChwc3RyLT5idWZzX2xlbiA+IHBzdHItPnZhbGlkX2xlbiArIGRmYV9tYl9jdXJfbWF4IChkZmEpKQorIAkJYnJlYWs7CisgCSAgICAgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisgCSAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKK0BAIC0xMDUsNyArMTA1LDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwKKyAgIGVsc2UKKyAgICAgeworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorKyAgICAgIGlmIChkZmFfbWJfY3VyX21heCAoZGZhKSA+IDEpCisgCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgICAgIGVsc2UKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCitAQCAtMTMwLDcgKzEzMCw3IEBAIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCisgcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBuZXdfYnVmX2xlbikKKyB7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAgICAgeworICAgICAgIHdpbnRfdCAqbmV3X3djczsKKyAKK0BAIC0xNzcsNyArMTc3LDcgQEAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxlbiwgcmVfc3RyaW5nX3QgKnBzdHIsCisgICBwc3RyLT50cmFucyA9IHRyYW5zOworICAgcHN0ci0+aWNhc2UgPSBpY2FzZSA/IDEgOiAwOworICAgcHN0ci0+bWJzX2FsbG9jYXRlZCA9ICh0cmFucyAhPSBOVUxMIHx8IGljYXNlKTsKKy0gIHBzdHItPm1iX2N1cl9tYXggPSBkZmEtPm1iX2N1cl9tYXg7CisrICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhX21iX2N1cl9tYXggKGRmYSk7CisgICBwc3RyLT5pc191dGY4ID0gZGZhLT5pc191dGY4OworICAgcHN0ci0+bWFwX25vdGFzY2lpID0gZGZhLT5tYXBfbm90YXNjaWk7CisgICBwc3RyLT5zdG9wID0gcHN0ci0+bGVuOworQEAgLTIwMyw3ICsyMDMsNyBAQCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyB7CisgI2lmZGVmIF9MSUJDCisgICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKy0gIGFzc2VydCAoTUJfTEVOX01BWCA+PSBwc3RyLT5tYl9jdXJfbWF4KTsKKysgIGFzc2VydCAoTUJfTEVOX01BWCA+PSBzdHJpbmdfbWJfY3VyX21heCAocHN0cikpOworICNlbHNlCisgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgI2VuZGlmCitAQCAtMjI2LDcgKzIyNiw3IEBAIGJ1aWxkX3djc19idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIAl7CisgCSAgaW50IGksIGNoOworIAorLQkgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisrCSAgZm9yIChpID0gMDsgaSA8IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorIAkgICAgeworIAkgICAgICBjaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHggKyBpXTsKKyAJICAgICAgYnVmW2ldID0gcHN0ci0+bWJzW2J5dGVfaWR4ICsgaV0gPSBwc3RyLT50cmFuc1tjaF07CitAQCAtMjc1LDcgKzI3NSw3IEBAIGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorICAgc2l6ZV90IG1iY2xlbjsKKyAjaWZkZWYgX0xJQkMKKyAgIGNoYXIgYnVmW01CX0xFTl9NQVhdOworLSAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSk7CisgI2Vsc2UKKyAgIGNoYXIgYnVmWzY0XTsKKyAjZW5kaWYKK0BAIC0zNjksNyArMzY5LDcgQEAgYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocmVfc3RyaW5nX3QgKnBzdHIpCisgCSAgeworIAkgICAgaW50IGksIGNoOworIAorLQkgICAgZm9yIChpID0gMDsgaSA8IHBzdHItPm1iX2N1cl9tYXggJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKysJICAgIGZvciAoaSA9IDA7IGkgPCBzdHJpbmdfbWJfY3VyX21heCAocHN0cikgJiYgaSA8IHJlbWFpbl9sZW47ICsraSkKKyAJICAgICAgeworIAkJY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHggKyBpXTsKKyAJCWJ1ZltpXSA9IHBzdHItPnRyYW5zW2NoXTsKK0BAIC01NjcsOCArNTY3LDkgQEAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKQorIH0KKyAKKyAvKiBUaGlzIGZ1bmN0aW9uIHJlLWNvbnN0cnVjdCB0aGUgYnVmZmVycy4KKy0gICBDb25jcmV0ZWx5LCBjb252ZXJ0IHRvIHdpZGUgY2hhcmFjdGVyIGluIGNhc2Ugb2YgcHN0ci0+bWJfY3VyX21heCA+IDEsCistICAgY29udmVydCB0byB1cHBlciBjYXNlIGluIGNhc2Ugb2YgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4gICovCisrICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNoYXJhY3RlciBpbiBjYXNlIG9mCisrICAgc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSwgY29udmVydCB0byB1cHBlciBjYXNlIGluIGNhc2Ugb2YKKysgICBSRUdfSUNBU0UsIGFwcGx5IHRyYW5zbGF0aW9uLiAgKi8KKyAKKyBzdGF0aWMgcmVnX2VycmNvZGVfdAorIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX3dhcm5fdW51c2VkX3Jlc3VsdF9fCitAQCAtNTc5LDcgKzU4MCw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgICAgIHsKKyAgICAgICAvKiBSZXNldCBidWZmZXIuICAqLworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysgICAgICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAJbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW47CitAQCAtNjcwLDcgKzY3MSw3IEBAIHJlX3N0cmluZ19yZWNvbnN0cnVjdCAocmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgsIGludCBlZmxhZ3MpCisgCSAgICAgIHBzdHItPnRpcF9jb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKHBzdHIsIG9mZnNldCAtIDEsCisgCQkJCQkJCWVmbGFncyk7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKysJICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCQltZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKyAJCQkgKHBzdHItPnZhbGlkX2xlbiAtIG9mZnNldCkgKiBzaXplb2YgKHdpbnRfdCkpOworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworQEAgLTY5OSw3ICs3MDAsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorICNlbmRpZgorIAkgIHBzdHItPnZhbGlkX2xlbiA9IDA7CisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistCSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPiAxKQorIAkgICAgeworIAkgICAgICBpbnQgd2NzX2lkeDsKKyAJICAgICAgd2ludF90IHdjID0gV0VPRjsKK0BAIC03MTEsNyArNzEyLDcgQEAgcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKKyAJCSAgLyogU3BlY2lhbCBjYXNlIFVURi04LiAgTXVsdGktYnl0ZSBjaGFycyBzdGFydCB3aXRoIGFueQorIAkJICAgICBieXRlIG90aGVyIHRoYW4gMHg4MCAtIDB4YmYuICAqLworIAkJICByYXcgPSBwc3RyLT5yYXdfbWJzICsgcHN0ci0+cmF3X21ic19pZHg7CistCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBwc3RyLT5tYl9jdXJfbWF4KTsKKysJCSAgZW5kID0gcmF3ICsgKG9mZnNldCAtIHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSk7CisgCQkgIGlmIChlbmQgPCBwc3RyLT5yYXdfbWJzKQorIAkJICAgIGVuZCA9IHBzdHItPnJhd19tYnM7CisgCQkgIHAgPSByYXcgKyBvZmZzZXQgLSAxOworQEAgLTgwMyw3ICs4MDQsNyBAQCByZV9zdHJpbmdfcmVjb25zdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4LCBpbnQgZWZsYWdzKQorIAorICAgLyogVGhlbiBidWlsZCB0aGUgYnVmZmVycy4gICovCisgI2lmZGVmIFJFX0VOQUJMRV9JMThOCistICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICBpZiAoc3RyaW5nX21iX2N1cl9tYXggKHBzdHIpID4gMSkKKyAgICAgeworICAgICAgIGlmIChwc3RyLT5pY2FzZSkKKyAJeworQEAgLTg0MSw3ICs4NDIsNyBAQCByZV9zdHJpbmdfcGVla19ieXRlX2Nhc2UgKGNvbnN0IHJlX3N0cmluZ190ICpwc3RyLCBpbnQgaWR4KQorICAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyAKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEKKyAgICAgICAmJiAhIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyIChwc3RyLCBwc3RyLT5jdXJfaWR4ICsgaWR4KSkKKyAgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisgI2VuZGlmCitAQCAtOTMwLDcgKzkzMSw3IEBAIHJlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgsIGludCBlZmxhZ3MpCisgICAgIHJldHVybiAoKGVmbGFncyAmIFJFR19OT1RFT0wpID8gQ09OVEVYVF9FTkRCVUYKKyAJICAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9FTkRCVUYpOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLSAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAoaW5wdXQpID4gMSkKKyAgICAgeworICAgICAgIHdpbnRfdCB3YzsKKyAgICAgICBpbnQgd2NfaWR4ID0gaWR4OworQEAgLTE0NDQsNyArMTQ0NSw3IEBAIHJlX2RmYV9hZGRfbm9kZSAocmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCB0b2tlbikKKyAgIGRmYS0+bm9kZXNbZGZhLT5ub2Rlc19sZW5dLmNvbnN0cmFpbnQgPSAwOworICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgZGZhLT5ub2Rlc1tkZmEtPm5vZGVzX2xlbl0uYWNjZXB0X21iID0KKy0gICAgKHR5cGUgPT0gT1BfUEVSSU9EICYmIGRmYS0+bWJfY3VyX21heCA+IDEpIHx8IHR5cGUgPT0gQ09NUExFWF9CUkFDS0VUOworKyAgICAodHlwZSA9PSBPUF9QRVJJT0QgJiYgZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKSB8fCB0eXBlID09IENPTVBMRVhfQlJBQ0tFVDsKKyAjZW5kaWYKKyAgIGRmYS0+bmV4dHNbZGZhLT5ub2Rlc19sZW5dID0gLTE7CisgICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmVkZXN0cyArIGRmYS0+bm9kZXNfbGVuKTsKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleF9pbnRlcm5hbC5oIGIvcG9zaXgvcmVnZXhfaW50ZXJuYWwuaAoraW5kZXggMTU0ZTk2OS4uYzQzOTA5YSAxMDA2NDQKKy0tLSBhL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmgKKysrKyBiL3Bvc2l4L3JlZ2V4X2ludGVybmFsLmgKK0BAIC0yNiw2ICsyNiwxMCBAQAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmIGRlZmluZWQgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQgSEFWRV9MQU5HSU5GT19IIHx8IGRlZmluZWQgSEFWRV9MQU5HSU5GT19DT0RFU0VUIHx8IGRlZmluZWQgX0xJQkMKKyAjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2VuZGlmCitAQCAtMzY5LDYgKzM3MywxMyBAQCBzdHJ1Y3QgcmVfc3RyaW5nX3QKKyB9OworIHR5cGVkZWYgc3RydWN0IHJlX3N0cmluZ190IHJlX3N0cmluZ190OworIAorKy8qIFdoZW4gT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSBpcyBkaXNhYmxlZCwgdGhpcyBpcyBhbHdheXMgMTsKKysgICBoZWxwIHRoZSBjb21waWxlciBtYWtlIHVzZSBvZiB0aGF0IGZhY3QuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKysjIGRlZmluZSBzdHJpbmdfbWJfY3VyX21heChzdHIpICgoc3RyKS0+bWJfY3VyX21heCArIDApCisrI2Vsc2UKKysjIGRlZmluZSBzdHJpbmdfbWJfY3VyX21heChzdHIpICgxKQorKyNlbmRpZgorIAorIHN0cnVjdCByZV9kZmFfdDsKKyB0eXBlZGVmIHN0cnVjdCByZV9kZmFfdCByZV9kZmFfdDsKK0BAIC02NTQsNiArNjY1LDE0IEBAIHN0cnVjdCByZV9kZmFfdAorICAgX19saWJjX2xvY2tfZGVmaW5lICgsIGxvY2spCisgfTsKKyAKKysvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoaXMgaXMgYWx3YXlzIDE7CisrICAgaGVscCB0aGUgY29tcGlsZXIgbWFrZSB1c2Ugb2YgdGhhdCBmYWN0LiAgKi8KKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrIyBkZWZpbmUgZGZhX21iX2N1cl9tYXgoZGZhKSAoKGRmYSktPm1iX2N1cl9tYXggKyAwKQorKyNlbHNlCisrIyBkZWZpbmUgZGZhX21iX2N1cl9tYXgoZGZhKSAoMSkKKysjZW5kaWYKKysKKyAjZGVmaW5lIHJlX25vZGVfc2V0X2luaXRfZW1wdHkoc2V0KSBtZW1zZXQgKHNldCwgJ1wwJywgc2l6ZW9mIChyZV9ub2RlX3NldCkpCisgI2RlZmluZSByZV9ub2RlX3NldF9yZW1vdmUoc2V0LGlkKSBcCisgICAocmVfbm9kZV9zZXRfcmVtb3ZlX2F0IChzZXQsIHJlX25vZGVfc2V0X2NvbnRhaW5zIChzZXQsIGlkKSAtIDEpKQorQEAgLTcxNCw3ICs3MzMsNyBAQCBpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgocHVyZSwgdW51c2VkKSkKKyByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChjb25zdCByZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCkKKyB7CisgICBpbnQgYnl0ZV9pZHg7CistICBpZiAocHN0ci0+bWJfY3VyX21heCA9PSAxKQorKyAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA9PSAxKQorICAgICByZXR1cm4gMTsKKyAgIGZvciAoYnl0ZV9pZHggPSAxOyBpZHggKyBieXRlX2lkeCA8IHBzdHItPnZhbGlkX2xlbjsgKytieXRlX2lkeCkKKyAgICAgaWYgKHBzdHItPndjc1tpZHggKyBieXRlX2lkeF0gIT0gV0VPRikKK0BAIC03MjYsNyArNzQ1LDcgQEAgc3RhdGljIHdpbnRfdAorIGludGVybmFsX2Z1bmN0aW9uIF9fYXR0cmlidXRlX18gKChwdXJlLCB1bnVzZWQpKQorIHJlX3N0cmluZ193Y2hhcl9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCisgeworLSAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKysgIGlmIChzdHJpbmdfbWJfY3VyX21heCAocHN0cikgPT0gMSkKKyAgICAgcmV0dXJuICh3aW50X3QpIHBzdHItPm1ic1tpZHhdOworICAgcmV0dXJuICh3aW50X3QpIHBzdHItPndjc1tpZHhdOworIH0KK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleGVjLWNvbXBhdC5jIGIvcG9zaXgvcmVnZXhlYy1jb21wYXQuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjBmOWI3YzcKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc2l4L3JlZ2V4ZWMtY29tcGF0LmMKK0BAIC0wLDAgKzEsMzkgQEAKKysvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorK3ZlcnNpb25lZF9zeW1ib2wgKGxpYmMsIF9fcmVnZXhlYywgcmVnZXhlYywgR0xJQkNfMl8zXzQpOworKworKyMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorK19fdHlwZW9mX18gKF9fcmVnZXhlYykgX19jb21wYXRfcmVnZXhlYzsKKysKKytpbnQKKythdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorK19fY29tcGF0X3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKysJCSAgY29uc3QgY2hhciAqX19yZXN0cmljdCBzdHJpbmcsIHNpemVfdCBubWF0Y2gsCisrCQkgIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpCisreworKyAgcmV0dXJuIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsCisrCQkgIGVmbGFncyAmIChSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCkpOworK30KKytjb21wYXRfc3ltYm9sIChsaWJjLCBfX2NvbXBhdF9yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzApOworKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9wb3NpeC9yZWdleGVjLmMgYi9wb3NpeC9yZWdleGVjLmMKK2luZGV4IDcwY2Q2MDYuLmUzYjQ5ZTQgMTAwNjQ0CistLS0gYS9wb3NpeC9yZWdleGVjLmMKKysrKyBiL3Bvc2l4L3JlZ2V4ZWMuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfaW5pdCAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSwgaW50IGVmbGFncywKKyAJCQkJICAgICBpbnQgbikgaW50ZXJuYWxfZnVuY3Rpb247CitAQCAtMTg2LDExICsxODcsMTEgQEAgc3RhdGljIGludCBidWlsZF90cnRhYmxlIChjb25zdCByZV9kZmFfdCAqZGZhLAorIHN0YXRpYyBpbnQgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJCQkJICAgIGNvbnN0IHJlX3N0cmluZ190ICppbnB1dCwgaW50IGlkeCkKKyAgICAgIGludGVybmFsX2Z1bmN0aW9uOworLSMgaWZkZWYgX0xJQkMKKysjIGlmIGRlZmluZWQgX0xJQkMgJiYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLAorIAkJCQkJCSAgIHNpemVfdCBuYW1lX2xlbikKKyAgICAgIGludGVybmFsX2Z1bmN0aW9uOworLSMgZW5kaWYgLyogX0xJQkMgKi8KKysjIGVuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworICNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworIHN0YXRpYyBpbnQgZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisgCQkJCSAgICAgICBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKK0BAIC0yNTUsMjUgKzI1Niw5IEBAIHJlZ2V4ZWMgKHByZWcsIHN0cmluZywgbm1hdGNoLCBwbWF0Y2gsIGVmbGFncykKKyAgIHJldHVybiBlcnIgIT0gUkVHX05PRVJST1I7CisgfQorIAorLSNpZmRlZiBfTElCQworLSMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+CistdmVyc2lvbmVkX3N5bWJvbCAobGliYywgX19yZWdleGVjLCByZWdleGVjLCBHTElCQ18yXzNfNCk7CistCistIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCistX190eXBlb2ZfXyAoX19yZWdleGVjKSBfX2NvbXBhdF9yZWdleGVjOworLQorLWludAorLWF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCistX19jb21wYXRfcmVnZXhlYyAoY29uc3QgcmVnZXhfdCAqX19yZXN0cmljdCBwcmVnLAorLQkJICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywgc2l6ZV90IG5tYXRjaCwKKy0JCSAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwgaW50IGVmbGFncykKKy17CistICByZXR1cm4gcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwKKy0JCSAgZWZsYWdzICYgKFJFR19OT1RCT0wgfCBSRUdfTk9URU9MKSk7CistfQorLWNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fY29tcGF0X3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfMCk7CistIyBlbmRpZgorLSNlbmRpZgorKy8qIEVHTElCQzogVGhlIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGhlcmUgd2FzIG1vdmUgdG8gYSBzZXBhcmF0ZSBmaWxlCisrICAgc28gdGhhdCBpdCBjYW4gYmUgc2hhcmVkIHdpdGggeHJlZ2V4LmMuICAqLworKyNpbmNsdWRlICJyZWdleGVjLWNvbXBhdC5jIgorIAorIC8qIEVudHJ5IHBvaW50cyBmb3IgR05VIGNvZGUuICAqLworIAorQEAgLTcyOCw3ICs3MTMsNyBAQCByZV9zZWFyY2hfaW50ZXJuYWwgKHByZWcsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgcmFuZ2UsIHN0b3AsIG5tYXRjaCwgcG1hdGNoLAorICAgaW5jciA9IChyYW5nZSA8IDApID8gLTEgOiAxOworICAgbGVmdF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0ICsgcmFuZ2UgOiBzdGFydDsKKyAgIHJpZ2h0X2xpbSA9IChyYW5nZSA8IDApID8gc3RhcnQgOiBzdGFydCArIHJhbmdlOworLSAgc2IgPSBkZmEtPm1iX2N1cl9tYXggPT0gMTsKKysgIHNiID0gZGZhX21iX2N1cl9tYXggKGRmYSkgPT0gMTsKKyAgIG1hdGNoX2tpbmQgPQorICAgICAoZmFzdG1hcAorICAgICAgPyAoKHNiIHx8ICEocHJlZy0+c3ludGF4ICYgUkVfSUNBU0UgfHwgdCkgPyA0IDogMCkKK0BAIC0zNDQ4LDcgKzM0MzMsNyBAQCBvdXRfZnJlZToKKyAJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX3dvcmRbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorIAkgICAgZ290byBvdXRfZnJlZTsKKyAKKy0JICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorKwkgIGlmIChkZXN0X3N0YXRlc1tpXSAhPSBkZXN0X3N0YXRlc193b3JkW2ldICYmIGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJICAgIG5lZWRfd29yZF90cnRhYmxlID0gMTsKKyAKKyAJICBkZXN0X3N0YXRlc19ubFtpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywKK0BAIC0zNTkwLDcgKzM1NzUsNyBAQCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisgICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QpCisgCXsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0JICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICBpZiAoZGZhX21iX2N1cl9tYXggKGRmYSkgPiAxKQorIAkgICAgYml0c2V0X21lcmdlIChhY2NlcHRzLCBkZmEtPnNiX2NoYXIpOworIAkgIGVsc2UKKyAjZW5kaWYKK0BAIC0zNjQxLDcgKzM2MjYsNyBAQCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisgCQkgIGNvbnRpbnVlOworIAkJfQorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKyAJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSAoZGZhLT53b3JkX2NoYXJbal0gfCB+ZGZhLT5zYl9jaGFyW2pdKSk7CisgCSAgICAgIGVsc2UKK0BAIC0zNjYwLDcgKzM2NDUsNyBAQCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisgCQkgIGNvbnRpbnVlOworIAkJfQorICNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLQkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKysJICAgICAgaWYgKGRmYV9tYl9jdXJfbWF4IChkZmEpID4gMSkKKyAJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKyAJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSB+KGRmYS0+d29yZF9jaGFyW2pdICYgZGZhLT5zYl9jaGFyW2pdKSk7CisgCSAgICAgIGVsc2UKK0BAIC0zODM2LDEyICszODIxLDYgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAgIGlmIChub2RlLT50eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKyAgICAgeworICAgICAgIGNvbnN0IHJlX2NoYXJzZXRfdCAqY3NldCA9IG5vZGUtPm9wci5tYmNzZXQ7CistIyBpZmRlZiBfTElCQworLSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbgorLQk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CistICAgICAgaW50IGo7CistICAgICAgdWludDMyX3QgbnJ1bGVzOworLSMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICAgICBpbnQgbWF0Y2hfbGVuID0gMDsKKyAgICAgICB3Y2hhcl90IHdjID0gKChjc2V0LT5ucmFuZ2VzIHx8IGNzZXQtPm5jaGFyX2NsYXNzZXMgfHwgY3NldC0+bm1iY2hhcnMpCisgCQkgICAgPyByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCBzdHJfaWR4KSA6IDApOworQEAgLTM4NTMsNiArMzgzMiw3IEBAIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisgCSAgICBtYXRjaF9sZW4gPSBjaGFyX2xlbjsKKyAJICAgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisgCSAgfQorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgICAgICAvKiBtYXRjaCB3aXRoIGNoYXJhY3Rlcl9jbGFzcz8gICovCisgICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jaGFyX2NsYXNzZXM7ICsraSkKKyAJeworQEAgLTM4NjMsMTQgKzM4NDMsMjIgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJICAgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKyAJICAgIH0KKyAJfQorKyNlbmRpZgorKworKyAgICAgIC8qIFdoZW4gX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBvbmx5IHRoZSBDCisrICAgICAgICAgbG9jYWxlIGlzIHN1cHBvcnRlZDsgaXQgaGFzIG5vIGNvbGxhdGlvbiBydWxlcy4gICovCisrIyBpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBpbgorKwk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CisrICAgICAgaW50IGo7CisrICAgICAgdWludDMyX3QgbnJ1bGVzOworIAorLSMgaWZkZWYgX0xJQkMKKyAgICAgICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICAgICAgIGlmIChucnVsZXMgIT0gMCkKKyAJeworIAkgIHVuc2lnbmVkIGludCBpbl9jb2xsc2VxID0gMDsKKyAJICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworLQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKndlaWdodHMsICpleHRyYTsKKysJICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzLCAqZXh0cmEgPSBOVUxMOworIAkgIGNvbnN0IGNoYXIgKmNvbGxzZXF3YzsKKyAKKyAJICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworQEAgLTM5NTUsOCArMzk0MywxMiBAQCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorIAkgICAgfQorIAl9CisgICAgICAgZWxzZQorLSMgZW5kaWYgLyogX0xJQkMgKi8KKysjIGVuZGlmIC8qIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAl7CisrICAgICAgICAgIC8qIEluIHRoZSBfTElCQyB2ZXJzaW9uLCBpZiBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzCisrICAgICAgICAgICAgIGRpc2FibGVkLCB0aGVyZSBjYW4gYmUgbm8gbXVsdGlieXRlIHJhbmdlIGVuZHBvaW50cywgYW5kCisrICAgICAgICAgICAgIGNzZXQtPm5yYW5nZXMgaXMgYWx3YXlzIHplcm8uICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAvKiBtYXRjaCB3aXRoIHJhbmdlIGV4cHJlc3Npb24/ICAqLworICNpZiBfX0dOVUNfXyA+PSAyCisgCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCB3YywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CitAQCAtMzk3NSw2ICszOTY3LDcgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAJCSAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKyAJCX0KKyAJICAgIH0KKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCX0KKyAgICAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g6CisgICAgICAgaWYgKCFjc2V0LT5ub25fbWF0Y2gpCitAQCAtMzk5MCw3ICszOTgzLDcgQEAgY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlX2lkeCwKKyAgIHJldHVybiAwOworIH0KKyAKKy0jIGlmZGVmIF9MSUJDCisrIyBpZiBkZWZpbmVkIF9MSUJDICYmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIHN0YXRpYyB1bnNpZ25lZCBpbnQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQorQEAgLTQwNDgsNyArNDA0MSw3IEBAIGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQorICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgfQorIH0KKy0jIGVuZGlmIC8qIF9MSUJDICovCisrIyBlbmRpZiAvKiBfTElCQyAmJiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAKKyAvKiBDaGVjayB3aGV0aGVyIHRoZSBub2RlIGFjY2VwdHMgdGhlIGJ5dGUgd2hpY2ggaXMgSURYLXRoCitAQCAtNDEzOSw3ICs0MTMyLDcgQEAgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG1pbl9sZW4pCisgICBpZiAocHN0ci0+aWNhc2UpCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCXsKKyAJICByZXQgPSBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChwc3RyKTsKKyAJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCitAQCAtNDE1Miw3ICs0MTQ1LDcgQEAgZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG1pbl9sZW4pCisgICBlbHNlCisgICAgIHsKKyAjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKy0gICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisrICAgICAgaWYgKHN0cmluZ19tYl9jdXJfbWF4IChwc3RyKSA+IDEpCisgCWJ1aWxkX3djc19idWZmZXIgKHBzdHIpOworICAgICAgIGVsc2UKKyAjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCitkaWZmIC0tZ2l0IGEvcG9zaXgveHJlZ2V4LmMgYi9wb3NpeC94cmVnZXguYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQzZjdhY2UKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc2l4L3hyZWdleC5jCitAQCAtMCwwICsxLDgyMTUgQEAKKysvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LAorKyAgIHZlcnNpb24gMC4xMi4KKysgICAoSW1wbGVtZW50cyBQT1NJWCBkcmFmdCBQMTAwMy4yL0QxMS4yLCBleGNlcHQgZm9yIHNvbWUgb2YgdGhlCisrICAgaW50ZXJuYXRpb25hbGl6YXRpb24gZmVhdHVyZXMuKQorKworKyAgIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKysgICAyMDAyLCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrICAgMDIxMTAtMTMwMSBVU0EuICAqLworKworKy8qIEFJWCByZXF1aXJlcyB0aGlzIHRvIGJlIHRoZSBmaXJzdCB0aGluZyBpbiB0aGUgZmlsZS4gKi8KKysjaWYgZGVmaW5lZCBfQUlYICYmICFkZWZpbmVkIF9fR05VQ19fICYmICFkZWZpbmVkIFJFR0VYX01BTExPQworKyAgI3ByYWdtYSBhbGxvY2EKKysjZW5kaWYKKysKKysjdW5kZWYJX0dOVV9TT1VSQ0UKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2lmbmRlZiBJTlNJREVfUkVDVVJTSU9OCisrIyBpZmRlZiBIQVZFX0NPTkZJR19ICisrIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKworKy8qI2luY2x1ZGUgPGFuc2lkZWNsLmg+Ki8KKysKKysKKysjaWZuZGVmIElOU0lERV9SRUNVUlNJT04KKysKKysjIGlmIGRlZmluZWQgU1REQ19IRUFERVJTICYmICFkZWZpbmVkIGVtYWNzCisrIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisrIyBlbHNlCisrLyogV2UgbmVlZCB0aGlzIGZvciBgcmVnZXguaCcsIGFuZCBwZXJoYXBzIGZvciB0aGUgRW1hY3MgaW5jbHVkZSBmaWxlcy4gICovCisrIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrIyBlbmRpZgorKworKyMgaWYgKGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfQlRPV0MpCisrIyAgZGVmaW5lIFdJREVfQ0hBUl9TVVBQT1JUIChIQVZFX1dDVFlQRV9IICYmIEhBVkVfV0NIQVJfSCAmJiBIQVZFX0JUT1dDKQorKyMgZWxzZQorKyMgIGRlZmluZSBXSURFX0NIQVJfU1VQUE9SVCAwCisrIyBlbmRpZgorKy8qIEZvciBwbGF0Zm9ybSB3aGljaCBzdXBwb3J0IHRoZSBJU08gQyBhbWVuZGVtZW50IDEgZnVuY3Rpb25hbGl0eSB3ZQorKyAgIHN1cHBvcnQgdXNlciBkZWZpbmVkIGNoYXJhY3RlciBjbGFzc2VzLiAgKi8KKysjIGlmIFdJREVfQ0hBUl9TVVBQT1JUCisrLyogU29sYXJpcyAyLjUgaGFzIGEgYnVnOiA8d2NoYXIuaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgPHdjdHlwZS5oPi4gICovCisrIyAgaW5jbHVkZSA8d2NoYXIuaD4KKysjICBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjIGVuZGlmCisrCisrIyBpZmRlZiBfTElCQworKy8qIFdlIGhhdmUgdG8ga2VlcCB0aGUgbmFtZXNwYWNlIGNsZWFuLiAgKi8KKysjICBkZWZpbmUgcmVnZnJlZShwcmVnKSBfX3JlZ2ZyZWUgKHByZWcpCisrIyAgZGVmaW5lIHJlZ2V4ZWMocHIsIHN0LCBubSwgcG0sIGVmKSBfX3JlZ2V4ZWMgKHByLCBzdCwgbm0sIHBtLCBlZikKKysjICBkZWZpbmUgcmVnY29tcChwcmVnLCBwYXR0ZXJuLCBjZmxhZ3MpIF9fcmVnY29tcCAocHJlZywgcGF0dGVybiwgY2ZsYWdzKQorKyMgIGRlZmluZSByZWdlcnJvcihlcnJjb2RlLCBwcmVnLCBlcnJidWYsIGVycmJ1Zl9zaXplKSBcCisrCV9fcmVnZXJyb3IoZXJyY29kZSwgcHJlZywgZXJyYnVmLCBlcnJidWZfc2l6ZSkKKysjICBkZWZpbmUgcmVfc2V0X3JlZ2lzdGVycyhidSwgcmUsIG51LCBzdCwgZW4pIFwKKysJX19yZV9zZXRfcmVnaXN0ZXJzIChidSwgcmUsIG51LCBzdCwgZW4pCisrIyAgZGVmaW5lIHJlX21hdGNoXzIoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApIFwKKysJX19yZV9tYXRjaF8yIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkKKysjICBkZWZpbmUgcmVfbWF0Y2goYnVmcCwgc3RyaW5nLCBzaXplLCBwb3MsIHJlZ3MpIFwKKysJX19yZV9tYXRjaCAoYnVmcCwgc3RyaW5nLCBzaXplLCBwb3MsIHJlZ3MpCisrIyAgZGVmaW5lIHJlX3NlYXJjaChidWZwLCBzdHJpbmcsIHNpemUsIHN0YXJ0cG9zLCByYW5nZSwgcmVncykgXAorKwlfX3JlX3NlYXJjaCAoYnVmcCwgc3RyaW5nLCBzaXplLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MpCisrIyAgZGVmaW5lIHJlX2NvbXBpbGVfcGF0dGVybihwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApIFwKKysJX19yZV9jb21waWxlX3BhdHRlcm4gKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkKKysjICBkZWZpbmUgcmVfc2V0X3N5bnRheChzeW50YXgpIF9fcmVfc2V0X3N5bnRheCAoc3ludGF4KQorKyMgIGRlZmluZSByZV9zZWFyY2hfMihidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApIFwKKysJX19yZV9zZWFyY2hfMiAoYnVmcCwgc3QxLCBzMSwgc3QyLCBzMiwgc3RhcnRwb3MsIHJhbmdlLCByZWdzLCBzdG9wKQorKyMgIGRlZmluZSByZV9jb21waWxlX2Zhc3RtYXAoYnVmcCkgX19yZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApCisrCisrIyAgZGVmaW5lIGJ0b3djIF9fYnRvd2MKKysKKysvKiBXZSBhcmUgYWxzbyB1c2luZyBzb21lIGxpYnJhcnkgaW50ZXJuYWxzLiAgKi8KKysjICBpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyMgIGluY2x1ZGUgPGxvY2FsZS9lbGVtLWhhc2guaD4KKysjICBpbmNsdWRlIDxsYW5naW5mby5oPgorKyMgIGluY2x1ZGUgPGxvY2FsZS9jb2xsLWxvb2t1cC5oPgorKyMgZW5kaWYKKysKKysvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLiAgKi8KKysjIGlmIChIQVZFX0xJQklOVExfSCAmJiBFTkFCTEVfTkxTKSB8fCBkZWZpbmVkIF9MSUJDCisrIyAgaW5jbHVkZSA8bGliaW50bC5oPgorKyMgIGlmZGVmIF9MSUJDCisrIyAgIHVuZGVmIGdldHRleHQKKysjICAgZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0ICgibGliYyIsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisrIyBlbmRpZgorKworKyMgaWZuZGVmIGdldHRleHRfbm9vcAorKy8qIFRoaXMgZGVmaW5lIGlzIHNvIHhnZXR0ZXh0IGNhbiBmaW5kIHRoZSBpbnRlcm5hdGlvbmFsaXphYmxlCisrICAgc3RyaW5ncy4gICovCisrIyAgZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworKyMgZW5kaWYKKysKKysvKiBUaGUgYGVtYWNzJyBzd2l0Y2ggdHVybnMgb24gY2VydGFpbiBtYXRjaGluZyBjb21tYW5kcworKyAgIHRoYXQgbWFrZSBzZW5zZSBvbmx5IGluIEVtYWNzLiAqLworKyMgaWZkZWYgZW1hY3MKKysKKysjICBpbmNsdWRlICJsaXNwLmgiCisrIyAgaW5jbHVkZSAiYnVmZmVyLmgiCisrIyAgaW5jbHVkZSAic3ludGF4LmgiCisrCisrIyBlbHNlICAvKiBub3QgZW1hY3MgKi8KKysKKysvKiBJZiB3ZSBhcmUgbm90IGxpbmtpbmcgd2l0aCBFbWFjcyBwcm9wZXIsCisrICAgd2UgY2FuJ3QgdXNlIHRoZSByZWxvY2F0aW5nIGFsbG9jYXRvcgorKyAgIGV2ZW4gaWYgY29uZmlnLmggc2F5cyB0aGF0IHdlIGNhbi4gICovCisrIyAgdW5kZWYgUkVMX0FMTE9DCisrCisrIyAgaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgZGVmaW5lZCBfTElCQworKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4KKysjICBlbHNlCisrY2hhciAqbWFsbG9jICgpOworK2NoYXIgKnJlYWxsb2MgKCk7CisrIyAgZW5kaWYKKysKKysvKiBXaGVuIHVzZWQgaW4gRW1hY3MncyBsaWItc3JjLCB3ZSBuZWVkIHRvIGdldCBiemVybyBhbmQgYmNvcHkgc29tZWhvdy4KKysgICBJZiBub3RoaW5nIGVsc2UgaGFzIGJlZW4gZG9uZSwgdXNlIHRoZSBtZXRob2QgYmVsb3cuICAqLworKyMgIGlmZGVmIElOSElCSVRfU1RSSU5HX0hFQURFUgorKyMgICBpZiAhKGRlZmluZWQgSEFWRV9CWkVSTyAmJiBkZWZpbmVkIEhBVkVfQkNPUFkpCisrIyAgICBpZiAhZGVmaW5lZCBiemVybyAmJiAhZGVmaW5lZCBiY29weQorKyMgICAgIHVuZGVmIElOSElCSVRfU1RSSU5HX0hFQURFUgorKyMgICAgZW5kaWYKKysjICAgZW5kaWYKKysjICBlbmRpZgorKworKy8qIFRoaXMgaXMgdGhlIG5vcm1hbCB3YXkgb2YgbWFraW5nIHN1cmUgd2UgaGF2ZSBhIGJjb3B5IGFuZCBhIGJ6ZXJvLgorKyAgIFRoaXMgaXMgdXNlZCBpbiBtb3N0IHByb2dyYW1zLS1hIGZldyBvdGhlciBwcm9ncmFtcyBhdm9pZCB0aGlzCisrICAgYnkgZGVmaW5pbmcgSU5ISUJJVF9TVFJJTkdfSEVBREVSLiAgKi8KKysjICBpZm5kZWYgSU5ISUJJVF9TVFJJTkdfSEVBREVSCisrIyAgIGlmIGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIF9MSUJDCisrIyAgICBpbmNsdWRlIDxzdHJpbmcuaD4KKysjICAgIGlmbmRlZiBiemVybworKyMgICAgIGlmbmRlZiBfTElCQworKyMgICAgICBkZWZpbmUgYnplcm8ocywgbikJKG1lbXNldCAocywgJ1wwJywgbiksIChzKSkKKysjICAgICBlbHNlCisrIyAgICAgIGRlZmluZSBiemVybyhzLCBuKQlfX2J6ZXJvIChzLCBuKQorKyMgICAgIGVuZGlmCisrIyAgICBlbmRpZgorKyMgICBlbHNlCisrIyAgICBpbmNsdWRlIDxzdHJpbmdzLmg+CisrIyAgICBpZm5kZWYgbWVtY21wCisrIyAgICAgZGVmaW5lIG1lbWNtcChzMSwgczIsIG4pCWJjbXAgKHMxLCBzMiwgbikKKysjICAgIGVuZGlmCisrIyAgICBpZm5kZWYgbWVtY3B5CisrIyAgICAgZGVmaW5lIG1lbWNweShkLCBzLCBuKQkoYmNvcHkgKHMsIGQsIG4pLCAoZCkpCisrIyAgICBlbmRpZgorKyMgICBlbmRpZgorKyMgIGVuZGlmCisrCisrLyogRGVmaW5lIHRoZSBzeW50YXggc3R1ZmYgZm9yIFw8LCBcPiwgZXRjLiAgKi8KKysKKysvKiBUaGlzIG11c3QgYmUgbm9uemVybyBmb3IgdGhlIHdvcmRjaGFyIGFuZCBub3R3b3JkY2hhciBwYXR0ZXJuCisrICAgY29tbWFuZHMgaW4gcmVfbWF0Y2hfMi4gICovCisrIyAgaWZuZGVmIFN3b3JkCisrIyAgIGRlZmluZSBTd29yZCAxCisrIyAgZW5kaWYKKysKKysjICBpZmRlZiBTV0lUQ0hfRU5VTV9CVUcKKysjICAgZGVmaW5lIFNXSVRDSF9FTlVNX0NBU1QoeCkgKChpbnQpKHgpKQorKyMgIGVsc2UKKysjICAgZGVmaW5lIFNXSVRDSF9FTlVNX0NBU1QoeCkgKHgpCisrIyAgZW5kaWYKKysKKysjIGVuZGlmIC8qIG5vdCBlbWFjcyAqLworKworKyMgaWYgZGVmaW5lZCBfTElCQyB8fCBIQVZFX0xJTUlUU19ICisrIyAgaW5jbHVkZSA8bGltaXRzLmg+CisrIyBlbmRpZgorKworKyMgaWZuZGVmIE1CX0xFTl9NQVgKKysjICBkZWZpbmUgTUJfTEVOX01BWCAxCisrIyBlbmRpZgorKwwKKysvKiBHZXQgdGhlIGludGVyZmFjZSwgaW5jbHVkaW5nIHRoZSBzeW50YXggYml0cy4gICovCisrIyBpbmNsdWRlICJyZWdleC5oIgorKworKy8qIGlzYWxwaGEgZXRjLiBhcmUgdXNlZCBmb3IgdGhlIGNoYXJhY3RlciBjbGFzc2VzLiAgKi8KKysjIGluY2x1ZGUgPGN0eXBlLmg+CisrCisrLyogSmltIE1leWVyaW5nIHdyaXRlczoKKysKKysgICAiLi4uIFNvbWUgY3R5cGUgbWFjcm9zIGFyZSB2YWxpZCBvbmx5IGZvciBjaGFyYWN0ZXIgY29kZXMgdGhhdAorKyAgIGlzYXNjaWkgc2F5cyBhcmUgQVNDSUkgKFNHSSdzIElSSVgtNC4wLjUgaXMgb25lIHN1Y2ggc3lzdGVtIC0td2hlbgorKyAgIHVzaW5nIC9iaW4vY2Mgb3IgZ2NjIGJ1dCB3aXRob3V0IGdpdmluZyBhbiBhbnNpIG9wdGlvbikuICBTbywgYWxsCisrICAgY3R5cGUgdXNlcyBzaG91bGQgYmUgdGhyb3VnaCBtYWNyb3MgbGlrZSBJU1BSSU5ULi4uICBJZgorKyAgIFNURENfSEVBREVSUyBpcyBkZWZpbmVkLCB0aGVuIGF1dG9jb25mIGhhcyB2ZXJpZmllZCB0aGF0IHRoZSBjdHlwZQorKyAgIG1hY3JvcyBkb24ndCBuZWVkIHRvIGJlIGd1YXJkZWQgd2l0aCByZWZlcmVuY2VzIHRvIGlzYXNjaWkuIC4uLgorKyAgIERlZmluaW5nIGlzYXNjaWkgdG8gMSBzaG91bGQgbGV0IGFueSBjb21waWxlciB3b3J0aCBpdHMgc2FsdAorKyAgIGVsaW1pbmF0ZSB0aGUgJiYgdGhyb3VnaCBjb25zdGFudCBmb2xkaW5nLiIKKysgICBTb2xhcmlzIGRlZmluZXMgc29tZSBvZiB0aGVzZSBzeW1ib2xzIHNvIHdlIG11c3QgdW5kZWZpbmUgdGhlbSBmaXJzdC4gICovCisrCisrIyB1bmRlZiBJU0FTQ0lJCisrIyBpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCAoIWRlZmluZWQgaXNhc2NpaSAmJiAhZGVmaW5lZCBIQVZFX0lTQVNDSUkpCisrIyAgZGVmaW5lIElTQVNDSUkoYykgMQorKyMgZWxzZQorKyMgIGRlZmluZSBJU0FTQ0lJKGMpIGlzYXNjaWkoYykKKysjIGVuZGlmCisrCisrIyBpZmRlZiBpc2JsYW5rCisrIyAgZGVmaW5lIElTQkxBTksoYykgKElTQVNDSUkgKGMpICYmIGlzYmxhbmsgKGMpKQorKyMgZWxzZQorKyMgIGRlZmluZSBJU0JMQU5LKGMpICgoYykgPT0gJyAnIHx8IChjKSA9PSAnXHQnKQorKyMgZW5kaWYKKysjIGlmZGVmIGlzZ3JhcGgKKysjICBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSSAoYykgJiYgaXNncmFwaCAoYykpCisrIyBlbHNlCisrIyAgZGVmaW5lIElTR1JBUEgoYykgKElTQVNDSUkgKGMpICYmIGlzcHJpbnQgKGMpICYmICFpc3NwYWNlIChjKSkKKysjIGVuZGlmCisrCisrIyB1bmRlZiBJU1BSSU5UCisrIyBkZWZpbmUgSVNQUklOVChjKSAoSVNBU0NJSSAoYykgJiYgaXNwcmludCAoYykpCisrIyBkZWZpbmUgSVNESUdJVChjKSAoSVNBU0NJSSAoYykgJiYgaXNkaWdpdCAoYykpCisrIyBkZWZpbmUgSVNBTE5VTShjKSAoSVNBU0NJSSAoYykgJiYgaXNhbG51bSAoYykpCisrIyBkZWZpbmUgSVNBTFBIQShjKSAoSVNBU0NJSSAoYykgJiYgaXNhbHBoYSAoYykpCisrIyBkZWZpbmUgSVNDTlRSTChjKSAoSVNBU0NJSSAoYykgJiYgaXNjbnRybCAoYykpCisrIyBkZWZpbmUgSVNMT1dFUihjKSAoSVNBU0NJSSAoYykgJiYgaXNsb3dlciAoYykpCisrIyBkZWZpbmUgSVNQVU5DVChjKSAoSVNBU0NJSSAoYykgJiYgaXNwdW5jdCAoYykpCisrIyBkZWZpbmUgSVNTUEFDRShjKSAoSVNBU0NJSSAoYykgJiYgaXNzcGFjZSAoYykpCisrIyBkZWZpbmUgSVNVUFBFUihjKSAoSVNBU0NJSSAoYykgJiYgaXN1cHBlciAoYykpCisrIyBkZWZpbmUgSVNYRElHSVQoYykgKElTQVNDSUkgKGMpICYmIGlzeGRpZ2l0IChjKSkKKysKKysjIGlmZGVmIF90b2xvd2VyCisrIyAgZGVmaW5lIFRPTE9XRVIoYykgX3RvbG93ZXIoYykKKysjIGVsc2UKKysjICBkZWZpbmUgVE9MT1dFUihjKSB0b2xvd2VyKGMpCisrIyBlbmRpZgorKworKyMgaWZuZGVmIE5VTEwKKysjICBkZWZpbmUgTlVMTCAodm9pZCAqKTAKKysjIGVuZGlmCisrCisrLyogV2UgcmVtb3ZlIGFueSBwcmV2aW91cyBkZWZpbml0aW9uIG9mIGBTSUdOX0VYVEVORF9DSEFSJywKKysgICBzaW5jZSBvdXJzICh3ZSBob3BlKSB3b3JrcyBwcm9wZXJseSB3aXRoIGFsbCBjb21iaW5hdGlvbnMgb2YKKysgICBtYWNoaW5lcywgY29tcGlsZXJzLCBgY2hhcicgYW5kIGB1bnNpZ25lZCBjaGFyJyBhcmd1bWVudCB0eXBlcy4KKysgICAoUGVyIEJvdGhuZXIgc3VnZ2VzdGVkIHRoZSBiYXNpYyBhcHByb2FjaC4pICAqLworKyMgdW5kZWYgU0lHTl9FWFRFTkRfQ0hBUgorKyMgaWYgX19TVERDX18KKysjICBkZWZpbmUgU0lHTl9FWFRFTkRfQ0hBUihjKSAoKHNpZ25lZCBjaGFyKSAoYykpCisrIyBlbHNlICAvKiBub3QgX19TVERDX18gKi8KKysvKiBBcyBpbiBIYXJiaXNvbiBhbmQgU3RlZWxlLiAgKi8KKysjICBkZWZpbmUgU0lHTl9FWFRFTkRfQ0hBUihjKSAoKCgodW5zaWduZWQgY2hhcikgKGMpKSBeIDEyOCkgLSAxMjgpCisrIyBlbmRpZgorKwwKKysjIGlmbmRlZiBlbWFjcworKy8qIEhvdyBtYW55IGNoYXJhY3RlcnMgaW4gdGhlIGNoYXJhY3RlciBzZXQuICAqLworKyMgIGRlZmluZSBDSEFSX1NFVF9TSVpFIDI1NgorKworKyMgIGlmZGVmIFNZTlRBWF9UQUJMRQorKworK2V4dGVybiBjaGFyICpyZV9zeW50YXhfdGFibGU7CisrCisrIyAgZWxzZSAvKiBub3QgU1lOVEFYX1RBQkxFICovCisrCisrc3RhdGljIGNoYXIgcmVfc3ludGF4X3RhYmxlW0NIQVJfU0VUX1NJWkVdOworKworK3N0YXRpYyB2b2lkIGluaXRfc3ludGF4X29uY2UgKHZvaWQpOworKworK3N0YXRpYyB2b2lkCisraW5pdF9zeW50YXhfb25jZSAodm9pZCkKKyt7CisrICAgcmVnaXN0ZXIgaW50IGM7CisrICAgc3RhdGljIGludCBkb25lID0gMDsKKysKKysgICBpZiAoZG9uZSkKKysgICAgIHJldHVybjsKKysgICBiemVybyAocmVfc3ludGF4X3RhYmxlLCBzaXplb2YgcmVfc3ludGF4X3RhYmxlKTsKKysKKysgICBmb3IgKGMgPSAwOyBjIDwgQ0hBUl9TRVRfU0laRTsgKytjKQorKyAgICAgaWYgKElTQUxOVU0gKGMpKQorKwlyZV9zeW50YXhfdGFibGVbY10gPSBTd29yZDsKKysKKysgICByZV9zeW50YXhfdGFibGVbJ18nXSA9IFN3b3JkOworKworKyAgIGRvbmUgPSAxOworK30KKysKKysjICBlbmRpZiAvKiBub3QgU1lOVEFYX1RBQkxFICovCisrCisrIyAgZGVmaW5lIFNZTlRBWChjKSByZV9zeW50YXhfdGFibGVbKHVuc2lnbmVkIGNoYXIpIChjKV0KKysKKysjIGVuZGlmIC8qIGVtYWNzICovCisrDAorKy8qIEludGVnZXIgdHlwZSBmb3IgcG9pbnRlcnMuICAqLworKyMgaWYgIWRlZmluZWQgX0xJQkMgJiYgIWRlZmluZWQgSEFWRV9VSU5UUFRSX1QKKyt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVpbnRwdHJfdDsKKysjIGVuZGlmCisrCisrLyogU2hvdWxkIHdlIHVzZSBtYWxsb2Mgb3IgYWxsb2NhPyAgSWYgUkVHRVhfTUFMTE9DIGlzIG5vdCBkZWZpbmVkLCB3ZQorKyAgIHVzZSBgYWxsb2NhJyBpbnN0ZWFkIG9mIGBtYWxsb2MnLiAgVGhpcyBpcyBiZWNhdXNlIHVzaW5nIG1hbGxvYyBpbgorKyAgIHJlX3NlYXJjaCogb3IgcmVfbWF0Y2gqIGNvdWxkIGNhdXNlIG1lbW9yeSBsZWFrcyB3aGVuIEMtZyBpcyB1c2VkIGluCisrICAgRW1hY3M7IGFsc28sIG1hbGxvYyBpcyBzbG93ZXIgYW5kIGNhdXNlcyBzdG9yYWdlIGZyYWdtZW50YXRpb24uICBPbgorKyAgIHRoZSBvdGhlciBoYW5kLCBtYWxsb2MgaXMgbW9yZSBwb3J0YWJsZSwgYW5kIGVhc2llciB0byBkZWJ1Zy4KKysKKysgICBCZWNhdXNlIHdlIHNvbWV0aW1lcyB1c2UgYWxsb2NhLCBzb21lIHJvdXRpbmVzIGhhdmUgdG8gYmUgbWFjcm9zLAorKyAgIG5vdCBmdW5jdGlvbnMgLS0gYGFsbG9jYSctYWxsb2NhdGVkIHNwYWNlIGRpc2FwcGVhcnMgYXQgdGhlIGVuZCBvZiB0aGUKKysgICBmdW5jdGlvbiBpdCBpcyBjYWxsZWQgaW4uICAqLworKworKyMgaWZkZWYgUkVHRVhfTUFMTE9DCisrCisrIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFIG1hbGxvYworKyMgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFKHNvdXJjZSwgb3NpemUsIG5zaXplKSByZWFsbG9jIChzb3VyY2UsIG5zaXplKQorKyMgIGRlZmluZSBSRUdFWF9GUkVFIGZyZWUKKysKKysjIGVsc2UgLyogbm90IFJFR0VYX01BTExPQyAgKi8KKysKKysvKiBFbWFjcyBhbHJlYWR5IGRlZmluZXMgYWxsb2NhLCBzb21ldGltZXMuICAqLworKyMgIGlmbmRlZiBhbGxvY2EKKysKKysvKiBNYWtlIGFsbG9jYSB3b3JrIHRoZSBiZXN0IHBvc3NpYmxlIHdheS4gICovCisrIyAgIGlmZGVmIF9fR05VQ19fCisrIyAgICBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKysjICAgZWxzZSAvKiBub3QgX19HTlVDX18gKi8KKysjICAgIGlmIEhBVkVfQUxMT0NBX0gKKysjICAgICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjICAgIGVuZGlmIC8qIEhBVkVfQUxMT0NBX0ggKi8KKysjICAgZW5kaWYgLyogbm90IF9fR05VQ19fICovCisrCisrIyAgZW5kaWYgLyogbm90IGFsbG9jYSAqLworKworKyMgIGRlZmluZSBSRUdFWF9BTExPQ0FURSBhbGxvY2EKKysKKysvKiBBc3N1bWVzIGEgYGNoYXIgKmRlc3RpbmF0aW9uJyB2YXJpYWJsZS4gICovCisrIyAgZGVmaW5lIFJFR0VYX1JFQUxMT0NBVEUoc291cmNlLCBvc2l6ZSwgbnNpemUpCQkJXAorKyAgKGRlc3RpbmF0aW9uID0gKGNoYXIgKikgYWxsb2NhIChuc2l6ZSksCQkJCVwKKysgICBtZW1jcHkgKGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9zaXplKSkKKysKKysvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nIHRvIGZyZWUsIGFmdGVyIGFsbG9jYS4gICovCisrIyAgZGVmaW5lIFJFR0VYX0ZSRUUoYXJnKSAoKHZvaWQpMCkgLyogRG8gbm90aGluZyEgIEJ1dCBpbmhpYml0IGdjYyB3YXJuaW5nLiAgKi8KKysKKysjIGVuZGlmIC8qIG5vdCBSRUdFWF9NQUxMT0MgKi8KKysKKysvKiBEZWZpbmUgaG93IHRvIGFsbG9jYXRlIHRoZSBmYWlsdXJlIHN0YWNrLiAgKi8KKysKKysjIGlmIGRlZmluZWQgUkVMX0FMTE9DICYmIGRlZmluZWQgUkVHRVhfTUFMTE9DCisrCisrIyAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFX1NUQUNLKHNpemUpCQkJCVwKKysgIHJfYWxsb2MgKCZmYWlsdXJlX3N0YWNrX3B0ciwgKHNpemUpKQorKyMgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgb3NpemUsIG5zaXplKQkJXAorKyAgcl9yZV9hbGxvYyAoJmZhaWx1cmVfc3RhY2tfcHRyLCAobnNpemUpKQorKyMgIGRlZmluZSBSRUdFWF9GUkVFX1NUQUNLKHB0cikJCQkJCVwKKysgIHJfYWxsb2NfZnJlZSAoJmZhaWx1cmVfc3RhY2tfcHRyKQorKworKyMgZWxzZSAvKiBub3QgdXNpbmcgcmVsb2NhdGluZyBhbGxvY2F0b3IgKi8KKysKKysjICBpZmRlZiBSRUdFWF9NQUxMT0MKKysKKysjICAgZGVmaW5lIFJFR0VYX0FMTE9DQVRFX1NUQUNLIG1hbGxvYworKyMgICBkZWZpbmUgUkVHRVhfUkVBTExPQ0FURV9TVEFDSyhzb3VyY2UsIG9zaXplLCBuc2l6ZSkgcmVhbGxvYyAoc291cmNlLCBuc2l6ZSkKKysjICAgZGVmaW5lIFJFR0VYX0ZSRUVfU1RBQ0sgZnJlZQorKworKyMgIGVsc2UgLyogbm90IFJFR0VYX01BTExPQyAqLworKworKyMgICBkZWZpbmUgUkVHRVhfQUxMT0NBVEVfU1RBQ0sgYWxsb2NhCisrCisrIyAgIGRlZmluZSBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLKHNvdXJjZSwgb3NpemUsIG5zaXplKQkJCVwKKysgICBSRUdFWF9SRUFMTE9DQVRFIChzb3VyY2UsIG9zaXplLCBuc2l6ZSkKKysvKiBObyBuZWVkIHRvIGV4cGxpY2l0bHkgZnJlZSBhbnl0aGluZy4gICovCisrIyAgIGRlZmluZSBSRUdFWF9GUkVFX1NUQUNLKGFyZykKKysKKysjICBlbmRpZiAvKiBub3QgUkVHRVhfTUFMTE9DICovCisrIyBlbmRpZiAvKiBub3QgdXNpbmcgcmVsb2NhdGluZyBhbGxvY2F0b3IgKi8KKysKKysKKysvKiBUcnVlIGlmIGBzaXplMScgaXMgbm9uLU5VTEwgYW5kIFBUUiBpcyBwb2ludGluZyBhbnl3aGVyZSBpbnNpZGUKKysgICBgc3RyaW5nMScgb3IganVzdCBwYXN0IGl0cyBlbmQuICBUaGlzIHdvcmtzIGlmIFBUUiBpcyBOVUxMLCB3aGljaCBpcworKyAgIGEgZ29vZCB0aGluZy4gICovCisrIyBkZWZpbmUgRklSU1RfU1RSSU5HX1AocHRyKSAJCQkJCVwKKysgIChzaXplMSAmJiBzdHJpbmcxIDw9IChwdHIpICYmIChwdHIpIDw9IHN0cmluZzEgKyBzaXplMSkKKysKKysvKiAoUmUpQWxsb2NhdGUgTiBpdGVtcyBvZiB0eXBlIFQgdXNpbmcgbWFsbG9jLCBvciBmYWlsLiAgKi8KKysjIGRlZmluZSBUQUxMT0MobiwgdCkgKCh0ICopIG1hbGxvYyAoKG4pICogc2l6ZW9mICh0KSkpCisrIyBkZWZpbmUgUkVUQUxMT0MoYWRkciwgbiwgdCkgKChhZGRyKSA9ICh0ICopIHJlYWxsb2MgKGFkZHIsIChuKSAqIHNpemVvZiAodCkpKQorKyMgZGVmaW5lIFJFVEFMTE9DX0lGKGFkZHIsIG4sIHQpIFwKKysgIGlmIChhZGRyKSBSRVRBTExPQygoYWRkciksIChuKSwgdCk7IGVsc2UgKGFkZHIpID0gVEFMTE9DICgobiksIHQpCisrIyBkZWZpbmUgUkVHRVhfVEFMTE9DKG4sIHQpICgodCAqKSBSRUdFWF9BTExPQ0FURSAoKG4pICogc2l6ZW9mICh0KSkpCisrCisrIyBkZWZpbmUgQllURVdJRFRIIDggLyogSW4gYml0cy4gICovCisrCisrIyBkZWZpbmUgU1RSRVEoczEsIHMyKSAoKHN0cmNtcCAoczEsIHMyKSA9PSAwKSkKKysKKysjIHVuZGVmIE1BWAorKyMgdW5kZWYgTUlOCisrIyBkZWZpbmUgTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisrIyBkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCisrCisrdHlwZWRlZiBjaGFyIGJvb2xlYW47CisrIyBkZWZpbmUgZmFsc2UgMAorKyMgZGVmaW5lIHRydWUgMQorKworK3N0YXRpYyByZWdfZXJyY29kZV90IGJ5dGVfcmVnZXhfY29tcGlsZSAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysKKytzdGF0aWMgaW50IGJ5dGVfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBzaXplMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0b3ApOworK3N0YXRpYyBpbnQgYnl0ZV9yZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0cG9zLCBpbnQgcmFuZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCk7Cisrc3RhdGljIGludCBieXRlX3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysKKysjaWZkZWYgTUJTX1NVUFBPUlQKKytzdGF0aWMgcmVnX2VycmNvZGVfdCB3Y3NfcmVnZXhfY29tcGlsZSAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IHNpemUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCk7CisrCisrCisrc3RhdGljIGludCB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcxLCBpbnQgY3NpemUxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcyLCBpbnQgY3NpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RvcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbWJzX29mZnNldDEsIGludCAqbWJzX29mZnNldDIpOworK3N0YXRpYyBpbnQgd2NzX3JlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApOworK3N0YXRpYyBpbnQgd2NzX3JlX2NvbXBpbGVfZmFzdG1hcCAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKTsKKysjZW5kaWYKKysMCisrLyogVGhlc2UgYXJlIHRoZSBjb21tYW5kIGNvZGVzIHRoYXQgYXBwZWFyIGluIGNvbXBpbGVkIHJlZ3VsYXIKKysgICBleHByZXNzaW9ucy4gIFNvbWUgb3Bjb2RlcyBhcmUgZm9sbG93ZWQgYnkgYXJndW1lbnQgYnl0ZXMuICBBCisrICAgY29tbWFuZCBjb2RlIGNhbiBzcGVjaWZ5IGFueSBpbnRlcnByZXRhdGlvbiB3aGF0c29ldmVyIGZvciBpdHMKKysgICBhcmd1bWVudHMuICBaZXJvIGJ5dGVzIG1heSBhcHBlYXIgaW4gdGhlIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisrCisrdHlwZWRlZiBlbnVtCisreworKyAgbm9fb3AgPSAwLAorKworKyAgLyogU3VjY2VlZCByaWdodCBhd2F5LS1ubyBtb3JlIGJhY2t0cmFja2luZy4gICovCisrICBzdWNjZWVkLAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgb25lIGJ5dGUgZ2l2aW5nIG4sIHRoZW4gYnkgbiBsaXRlcmFsIGJ5dGVzLiAgKi8KKysgIGV4YWN0biwKKysKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrCS8qIFNhbWUgYXMgZXhhY3RuLCBidXQgY29udGFpbnMgYmluYXJ5IGRhdGEuICAqLworKyAgZXhhY3RuX2JpbiwKKysjIGVuZGlmCisrCisrICAgICAgICAvKiBNYXRjaGVzIGFueSAobW9yZSBvciBsZXNzKSBjaGFyYWN0ZXIuICAqLworKyAgYW55Y2hhciwKKysKKysgICAgICAgIC8qIE1hdGNoZXMgYW55IG9uZSBjaGFyIGJlbG9uZ2luZyB0byBzcGVjaWZpZWQgc2V0LiAgRmlyc3QKKysgICAgICAgICAgIGZvbGxvd2luZyBieXRlIGlzIG51bWJlciBvZiBiaXRtYXAgYnl0ZXMuICBUaGVuIGNvbWUgYnl0ZXMKKysgICAgICAgICAgIGZvciBhIGJpdG1hcCBzYXlpbmcgd2hpY2ggY2hhcnMgYXJlIGluLiAgQml0cyBpbiBlYWNoIGJ5dGUKKysgICAgICAgICAgIGFyZSBvcmRlcmVkIGxvdy1iaXQtZmlyc3QuICBBIGNoYXJhY3RlciBpcyBpbiB0aGUgc2V0IGlmIGl0cworKyAgICAgICAgICAgYml0IGlzIDEuICBBIGNoYXJhY3RlciB0b28gbGFyZ2UgdG8gaGF2ZSBhIGJpdCBpbiB0aGUgbWFwIGlzCisrICAgICAgICAgICBhdXRvbWF0aWNhbGx5IG5vdCBpbiB0aGUgc2V0LiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCBmb2xsb3dpbmcgZWxlbWVudCBpcyBsZW5ndGggb2YgY2hhcmFjdGVyCisrCSAgIGNsYXNzZXMsIGxlbmd0aCBvZiBjb2xsYXRpbmcgc3ltYm9scywgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlCisrCSAgIGNsYXNzZXMsIGxlbmd0aCBvZiBjaGFyYWN0ZXIgcmFuZ2VzLCBhbmQgbGVuZ3RoIG9mIGNoYXJhY3RlcnMuCisrCSAgIE5leHQsIGNoYXJhY3RlciBjbGFzcyBlbGVtZW50LCBjb2xsYXRpbmcgc3ltYm9scyBlbGVtZW50cywKKysJICAgZXF1aXZhbGVuY2UgY2xhc3MgZWxlbWVudHMsIHJhbmdlIGVsZW1lbnRzLCBhbmQgY2hhcmFjdGVyCisrCSAgIGVsZW1lbnRzIGZvbGxvdy4KKysJICAgU2VlIHJlZ2V4X2NvbXBpbGUgZnVuY3Rpb24uICAqLworKyAgY2hhcnNldCwKKysKKysgICAgICAgIC8qIFNhbWUgcGFyYW1ldGVycyBhcyBjaGFyc2V0LCBidXQgbWF0Y2ggYW55IGNoYXJhY3RlciB0aGF0IGlzCisrICAgICAgICAgICBub3Qgb25lIG9mIHRob3NlIHNwZWNpZmllZC4gICovCisrICBjaGFyc2V0X25vdCwKKysKKysgICAgICAgIC8qIFN0YXJ0IHJlbWVtYmVyaW5nIHRoZSB0ZXh0IHRoYXQgaXMgbWF0Y2hlZCwgZm9yIHN0b3JpbmcgaW4gYQorKyAgICAgICAgICAgcmVnaXN0ZXIuICBGb2xsb3dlZCBieSBvbmUgYnl0ZSB3aXRoIHRoZSByZWdpc3RlciBudW1iZXIsIGluCisrICAgICAgICAgICB0aGUgcmFuZ2UgMCB0byBvbmUgbGVzcyB0aGFuIHRoZSBwYXR0ZXJuIGJ1ZmZlcidzIHJlX25zdWIKKysgICAgICAgICAgIGZpZWxkLiAgVGhlbiBmb2xsb3dlZCBieSBvbmUgYnl0ZSB3aXRoIHRoZSBudW1iZXIgb2YgZ3JvdXBzCisrICAgICAgICAgICBpbm5lciB0byB0aGlzIG9uZS4gIChUaGlzIGxhc3QgaGFzIHRvIGJlIHBhcnQgb2YgdGhlCisrICAgICAgICAgICBzdGFydF9tZW1vcnkgb25seSBiZWNhdXNlIHdlIG5lZWQgaXQgaW4gdGhlIG9uX2ZhaWx1cmVfanVtcAorKyAgICAgICAgICAgb2YgcmVfbWF0Y2hfMi4pICAqLworKyAgc3RhcnRfbWVtb3J5LAorKworKyAgICAgICAgLyogU3RvcCByZW1lbWJlcmluZyB0aGUgdGV4dCB0aGF0IGlzIG1hdGNoZWQgYW5kIHN0b3JlIGl0IGluIGEKKysgICAgICAgICAgIG1lbW9yeSByZWdpc3Rlci4gIEZvbGxvd2VkIGJ5IG9uZSBieXRlIHdpdGggdGhlIHJlZ2lzdGVyCisrICAgICAgICAgICBudW1iZXIsIGluIHRoZSByYW5nZSAwIHRvIG9uZSBsZXNzIHRoYW4gYHJlX25zdWInIGluIHRoZQorKyAgICAgICAgICAgcGF0dGVybiBidWZmZXIsIGFuZCBvbmUgYnl0ZSB3aXRoIHRoZSBudW1iZXIgb2YgaW5uZXIgZ3JvdXBzLAorKyAgICAgICAgICAganVzdCBsaWtlIGBzdGFydF9tZW1vcnknLiAgKFdlIG5lZWQgdGhlIG51bWJlciBvZiBpbm5lcgorKyAgICAgICAgICAgZ3JvdXBzIGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSBlYXN5IHdheSBvZiBmaW5kaW5nIHRoZQorKyAgICAgICAgICAgY29ycmVzcG9uZGluZyBzdGFydF9tZW1vcnkgd2hlbiB3ZSdyZSBhdCBhIHN0b3BfbWVtb3J5LikgICovCisrICBzdG9wX21lbW9yeSwKKysKKysgICAgICAgIC8qIE1hdGNoIGEgZHVwbGljYXRlIG9mIHNvbWV0aGluZyByZW1lbWJlcmVkLiBGb2xsb3dlZCBieSBvbmUKKysgICAgICAgICAgIGJ5dGUgY29udGFpbmluZyB0aGUgcmVnaXN0ZXIgbnVtYmVyLiAgKi8KKysgIGR1cGxpY2F0ZSwKKysKKysgICAgICAgIC8qIEZhaWwgdW5sZXNzIGF0IGJlZ2lubmluZyBvZiBsaW5lLiAgKi8KKysgIGJlZ2xpbmUsCisrCisrICAgICAgICAvKiBGYWlsIHVubGVzcyBhdCBlbmQgb2YgbGluZS4gICovCisrICBlbmRsaW5lLAorKworKyAgICAgICAgLyogU3VjY2VlZHMgaWYgYXQgYmVnaW5uaW5nIG9mIGJ1ZmZlciAoaWYgZW1hY3MpIG9yIGF0IGJlZ2lubmluZworKyAgICAgICAgICAgb2Ygc3RyaW5nIHRvIGJlIG1hdGNoZWQgKGlmIG5vdCkuICAqLworKyAgYmVnYnVmLAorKworKyAgICAgICAgLyogQW5hbG9nb3VzbHksIGZvciBlbmQgb2YgYnVmZmVyL3N0cmluZy4gICovCisrICBlbmRidWYsCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28gYnl0ZSByZWxhdGl2ZSBhZGRyZXNzIHRvIHdoaWNoIHRvIGp1bXAuICAqLworKyAganVtcCwKKysKKysJLyogU2FtZSBhcyBqdW1wLCBidXQgbWFya3MgdGhlIGVuZCBvZiBhbiBhbHRlcm5hdGl2ZS4gICovCisrICBqdW1wX3Bhc3RfYWx0LAorKworKyAgICAgICAgLyogRm9sbG93ZWQgYnkgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcyBvZiBwbGFjZSB0byByZXN1bWUgYXQKKysgICAgICAgICAgIGluIGNhc2Ugb2YgZmFpbHVyZS4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIG9uX2ZhaWx1cmVfanVtcCwKKysKKysgICAgICAgIC8qIExpa2Ugb25fZmFpbHVyZV9qdW1wLCBidXQgcHVzaGVzIGEgcGxhY2Vob2xkZXIgaW5zdGVhZCBvZiB0aGUKKysgICAgICAgICAgIGN1cnJlbnQgc3RyaW5nIHBvc2l0aW9uIHdoZW4gZXhlY3V0ZWQuICAqLworKyAgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wLAorKworKyAgICAgICAgLyogVGhyb3cgYXdheSBsYXRlc3QgZmFpbHVyZSBwb2ludCBhbmQgdGhlbiBqdW1wIHRvIGZvbGxvd2luZworKyAgICAgICAgICAgdHdvLWJ5dGUgcmVsYXRpdmUgYWRkcmVzcy4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIHBvcF9mYWlsdXJlX2p1bXAsCisrCisrICAgICAgICAvKiBDaGFuZ2UgdG8gcG9wX2ZhaWx1cmVfanVtcCBpZiBrbm93IHdvbid0IGhhdmUgdG8gYmFja3RyYWNrIHRvCisrICAgICAgICAgICBtYXRjaDsgb3RoZXJ3aXNlIGNoYW5nZSB0byBqdW1wLiAgVGhpcyBpcyB1c2VkIHRvIGp1bXAKKysgICAgICAgICAgIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBhIHJlcGVhdC4gIElmIHdoYXQgZm9sbG93cyB0aGlzIGp1bXAKKysgICAgICAgICAgIGNsZWFybHkgd29uJ3QgbWF0Y2ggd2hhdCB0aGUgcmVwZWF0IGRvZXMsIHN1Y2ggdGhhdCB3ZSBjYW4gYmUKKysgICAgICAgICAgIHN1cmUgdGhhdCB0aGVyZSBpcyBubyB1c2UgYmFja3RyYWNraW5nIG91dCBvZiByZXBldGl0aW9ucworKyAgICAgICAgICAgYWxyZWFkeSBtYXRjaGVkLCB0aGVuIHdlIGNoYW5nZSBpdCB0byBhIHBvcF9mYWlsdXJlX2p1bXAuCisrICAgICAgICAgICBGb2xsb3dlZCBieSB0d28tYnl0ZSBhZGRyZXNzLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgbWF5YmVfcG9wX2p1bXAsCisrCisrICAgICAgICAvKiBKdW1wIHRvIGZvbGxvd2luZyB0d28tYnl0ZSBhZGRyZXNzLCBhbmQgcHVzaCBhIGR1bW15IGZhaWx1cmUKKysgICAgICAgICAgIHBvaW50LiBUaGlzIGZhaWx1cmUgcG9pbnQgd2lsbCBiZSB0aHJvd24gYXdheSBpZiBhbiBhdHRlbXB0CisrICAgICAgICAgICBpcyBtYWRlIHRvIHVzZSBpdCBmb3IgYSBmYWlsdXJlLiAgQSBgKycgY29uc3RydWN0IG1ha2VzIHRoaXMKKysgICAgICAgICAgIGJlZm9yZSB0aGUgZmlyc3QgcmVwZWF0LiAgQWxzbyB1c2VkIGFzIGFuIGludGVybWVkaWFyeSBraW5kCisrICAgICAgICAgICBvZiBqdW1wIHdoZW4gY29tcGlsaW5nIGFuIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgZHVtbXlfZmFpbHVyZV9qdW1wLAorKworKwkvKiBQdXNoIGEgZHVtbXkgZmFpbHVyZSBwb2ludCBhbmQgY29udGludWUuICBVc2VkIGF0IHRoZSBlbmQgb2YKKysJICAgYWx0ZXJuYXRpdmVzLiAgKi8KKysgIHB1c2hfZHVtbXlfZmFpbHVyZSwKKysKKysgICAgICAgIC8qIEZvbGxvd2VkIGJ5IHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MgYW5kIHR3by1ieXRlIG51bWJlciBuLgorKyAgICAgICAgICAgQWZ0ZXIgbWF0Y2hpbmcgTiB0aW1lcywganVtcCB0byB0aGUgYWRkcmVzcyB1cG9uIGZhaWx1cmUuICAqLworKyAgICAgICAgLyogaWZkZWYgTUJTX1NVUFBPUlQsIHRoZSBzaXplIG9mIGFkZHJlc3MgaXMgMS4gICovCisrICBzdWNjZWVkX24sCisrCisrICAgICAgICAvKiBGb2xsb3dlZCBieSB0d28tYnl0ZSByZWxhdGl2ZSBhZGRyZXNzLCBhbmQgdHdvLWJ5dGUgbnVtYmVyIG4uCisrICAgICAgICAgICBKdW1wIHRvIHRoZSBhZGRyZXNzIE4gdGltZXMsIHRoZW4gZmFpbC4gICovCisrICAgICAgICAvKiBpZmRlZiBNQlNfU1VQUE9SVCwgdGhlIHNpemUgb2YgYWRkcmVzcyBpcyAxLiAgKi8KKysgIGp1bXBfbiwKKysKKysgICAgICAgIC8qIFNldCB0aGUgZm9sbG93aW5nIHR3by1ieXRlIHJlbGF0aXZlIGFkZHJlc3MgdG8gdGhlCisrICAgICAgICAgICBzdWJzZXF1ZW50IHR3by1ieXRlIG51bWJlci4gIFRoZSBhZGRyZXNzICppbmNsdWRlcyogdGhlIHR3bworKyAgICAgICAgICAgYnl0ZXMgb2YgbnVtYmVyLiAgKi8KKysgICAgICAgIC8qIGlmZGVmIE1CU19TVVBQT1JULCB0aGUgc2l6ZSBvZiBhZGRyZXNzIGlzIDEuICAqLworKyAgc2V0X251bWJlcl9hdCwKKysKKysgIHdvcmRjaGFyLAkvKiBNYXRjaGVzIGFueSB3b3JkLWNvbnN0aXR1ZW50IGNoYXJhY3Rlci4gICovCisrICBub3R3b3JkY2hhciwJLyogTWF0Y2hlcyBhbnkgY2hhciB0aGF0IGlzIG5vdCBhIHdvcmQtY29uc3RpdHVlbnQuICAqLworKworKyAgd29yZGJlZywJLyogU3VjY2VlZHMgaWYgYXQgd29yZCBiZWdpbm5pbmcuICAqLworKyAgd29yZGVuZCwJLyogU3VjY2VlZHMgaWYgYXQgd29yZCBlbmQuICAqLworKworKyAgd29yZGJvdW5kLAkvKiBTdWNjZWVkcyBpZiBhdCBhIHdvcmQgYm91bmRhcnkuICAqLworKyAgbm90d29yZGJvdW5kCS8qIFN1Y2NlZWRzIGlmIG5vdCBhdCBhIHdvcmQgYm91bmRhcnkuICAqLworKworKyMgaWZkZWYgZW1hY3MKKysgICxiZWZvcmVfZG90LAkvKiBTdWNjZWVkcyBpZiBiZWZvcmUgcG9pbnQuICAqLworKyAgYXRfZG90LAkvKiBTdWNjZWVkcyBpZiBhdCBwb2ludC4gICovCisrICBhZnRlcl9kb3QsCS8qIFN1Y2NlZWRzIGlmIGFmdGVyIHBvaW50LiAgKi8KKysKKysJLyogTWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHdob3NlIHN5bnRheCBpcyBzcGVjaWZpZWQuICBGb2xsb3dlZCBieQorKyAgICAgICAgICAgYSBieXRlIHdoaWNoIGNvbnRhaW5zIGEgc3ludGF4IGNvZGUsIGUuZy4sIFN3b3JkLiAgKi8KKysgIHN5bnRheHNwZWMsCisrCisrCS8qIE1hdGNoZXMgYW55IGNoYXJhY3RlciB3aG9zZSBzeW50YXggaXMgbm90IHRoYXQgc3BlY2lmaWVkLiAgKi8KKysgIG5vdHN5bnRheHNwZWMKKysjIGVuZGlmIC8qIGVtYWNzICovCisrfSByZV9vcGNvZGVfdDsKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysMCisrCisrI2lmZGVmIEJZVEUKKysjIGRlZmluZSBDSEFSX1QgY2hhcgorKyMgZGVmaW5lIFVDSEFSX1QgdW5zaWduZWQgY2hhcgorKyMgZGVmaW5lIENPTVBJTEVEX0JVRkZFUl9WQVIgYnVmcC0+YnVmZmVyCisrIyBkZWZpbmUgT0ZGU0VUX0FERFJFU1NfU0laRSAyCisrIyBkZWZpbmUgUFJFRklYKG5hbWUpIGJ5dGVfIyNuYW1lCisrIyBkZWZpbmUgQVJHX1BSRUZJWChuYW1lKSBuYW1lCisrIyBkZWZpbmUgUFVUX0NIQVIoYykgcHV0Y2hhciAoYykKKysjIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKysjIGRlZmluZSBGSU5ESURYIGZpbmRpZHgKKysjZWxzZQorKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgQ0hBUl9UIHdjaGFyX3QKKysjICBkZWZpbmUgVUNIQVJfVCB3Y2hhcl90CisrIyAgZGVmaW5lIENPTVBJTEVEX0JVRkZFUl9WQVIgd2NfYnVmZmVyCisrIyAgZGVmaW5lIE9GRlNFVF9BRERSRVNTX1NJWkUgMSAvKiB0aGUgc2l6ZSB3aGljaCBTVE9SRV9OVU1CRVIgbWFjcm8gdXNlICovCisrIyAgZGVmaW5lIENIQVJfQ0xBU1NfU0laRSAoKF9fYWxpZ25vZl9fKHdjdHlwZV90KStzaXplb2Yod2N0eXBlX3QpKS9zaXplb2YoQ0hBUl9UKSsxKQorKyMgIGRlZmluZSBQUkVGSVgobmFtZSkgd2NzXyMjbmFtZQorKyMgIGRlZmluZSBBUkdfUFJFRklYKG5hbWUpIGMjI25hbWUKKysvKiBTaG91bGQgd2UgdXNlIHdpZGUgc3RyZWFtPz8gICovCisrIyAgZGVmaW5lIFBVVF9DSEFSKGMpIHByaW50ZiAoIiVDIiwgYyk7CisrIyAgZGVmaW5lIFRSVUUgMQorKyMgIGRlZmluZSBGQUxTRSAwCisrIyAgZGVmaW5lIGZpbmRpZHggZmluZGlkeHdjCisrIyAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodHdjLmg+CisrIyAgdW5kZWYgZmluZGlkeAorKyMgIGRlZmluZSBGSU5ESURYIGZpbmRpZHh3YworKyMgZWxzZQorKyMgIGlmZGVmIE1CU19TVVBQT1JUCisrIyAgIGRlZmluZSBXQ0hBUgorKyMgICBkZWZpbmUgSU5TSURFX1JFQ1VSU0lPTgorKyMgICBpbmNsdWRlICJ4cmVnZXguYyIKKysjICAgdW5kZWYgSU5TSURFX1JFQ1VSU0lPTgorKyMgIGVuZGlmCisrIyAgZGVmaW5lIEJZVEUKKysjICBkZWZpbmUgSU5TSURFX1JFQ1VSU0lPTgorKyMgIGluY2x1ZGUgInhyZWdleC5jIgorKyMgIHVuZGVmIElOU0lERV9SRUNVUlNJT04KKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmZGVmIElOU0lERV9SRUNVUlNJT04KKysvKiBDb21tb24gb3BlcmF0aW9ucyBvbiB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrCisrLyogU3RvcmUgTlVNQkVSIGluIHR3byBjb250aWd1b3VzIGJ5dGVzIHN0YXJ0aW5nIGF0IERFU1RJTkFUSU9OLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2Ugc3RvcmUgTlVNQkVSIGluIDEgZWxlbWVudC4gICovCisrCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBTVE9SRV9OVU1CRVIoZGVzdGluYXRpb24sIG51bWJlcikJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKihkZXN0aW5hdGlvbikgPSAoVUNIQVJfVCkobnVtYmVyKTsJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBTVE9SRV9OVU1CRVIoZGVzdGluYXRpb24sIG51bWJlcikJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKVswXSA9IChudW1iZXIpICYgMDM3NzsJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKVsxXSA9IChudW1iZXIpID4+IDg7CQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBTYW1lIGFzIFNUT1JFX05VTUJFUiwgZXhjZXB0IGluY3JlbWVudCBERVNUSU5BVElPTiB0bworKyAgIHRoZSBieXRlIGFmdGVyIHdoZXJlIHRoZSBudW1iZXIgaXMgc3RvcmVkLiAgVGhlcmVmb3JlLCBERVNUSU5BVElPTgorKyAgIG11c3QgYmUgYW4gbHZhbHVlLiAgKi8KKysvKiBpZmRlZiBNQlNfU1VQUE9SVCwgd2Ugc3RvcmUgTlVNQkVSIGluIDEgZWxlbWVudC4gICovCisrCisrIyBkZWZpbmUgU1RPUkVfTlVNQkVSX0FORF9JTkNSKGRlc3RpbmF0aW9uLCBudW1iZXIpCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgU1RPUkVfTlVNQkVSIChkZXN0aW5hdGlvbiwgbnVtYmVyKTsJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSArPSBPRkZTRVRfQUREUkVTU19TSVpFOwkJCQlcCisrICB9IHdoaWxlICgwKQorKworKy8qIFB1dCBpbnRvIERFU1RJTkFUSU9OIGEgbnVtYmVyIHN0b3JlZCBpbiB0d28gY29udGlndW91cyBieXRlcyBzdGFydGluZworKyAgIGF0IFNPVVJDRS4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHN0b3JlIE5VTUJFUiBpbiAxIGVsZW1lbnQuICAqLworKworKyMgaWZkZWYgV0NIQVIKKysjICBkZWZpbmUgRVhUUkFDVF9OVU1CRVIoZGVzdGluYXRpb24sIHNvdXJjZSkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgKGRlc3RpbmF0aW9uKSA9ICooc291cmNlKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKyMgZWxzZSAvKiBCWVRFICovCisrIyAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSKGRlc3RpbmF0aW9uLCBzb3VyY2UpCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIChkZXN0aW5hdGlvbikgPSAqKHNvdXJjZSkgJiAwMzc3OwkJCQkJXAorKyAgICAoZGVzdGluYXRpb24pICs9IFNJR05fRVhURU5EX0NIQVIgKCooKHNvdXJjZSkgKyAxKSkgPDwgODsJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZgorKworKyMgaWZkZWYgREVCVUcKKytzdGF0aWMgdm9pZCBQUkVGSVgoZXh0cmFjdF9udW1iZXIpIChpbnQgKmRlc3QsIFVDSEFSX1QgKnNvdXJjZSk7Cisrc3RhdGljIHZvaWQKKytQUkVGSVgoZXh0cmFjdF9udW1iZXIpIChpbnQgKmRlc3QsIFVDSEFSX1QgKnNvdXJjZSkKKyt7CisrIyAgaWZkZWYgV0NIQVIKKysgICpkZXN0ID0gKnNvdXJjZTsKKysjICBlbHNlIC8qIEJZVEUgKi8KKysgIGludCB0ZW1wID0gU0lHTl9FWFRFTkRfQ0hBUiAoKihzb3VyY2UgKyAxKSk7CisrICAqZGVzdCA9ICpzb3VyY2UgJiAwMzc3OworKyAgKmRlc3QgKz0gdGVtcCA8PCA4OworKyMgIGVuZGlmCisrfQorKworKyMgIGlmbmRlZiBFWFRSQUNUX01BQ1JPUyAvKiBUbyBkZWJ1ZyB0aGUgbWFjcm9zLiAgKi8KKysjICAgdW5kZWYgRVhUUkFDVF9OVU1CRVIKKysjICAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSKGRlc3QsIHNyYykgUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoJmRlc3QsIHNyYykKKysjICBlbmRpZiAvKiBub3QgRVhUUkFDVF9NQUNST1MgKi8KKysKKysjIGVuZGlmIC8qIERFQlVHICovCisrCisrLyogU2FtZSBhcyBFWFRSQUNUX05VTUJFUiwgZXhjZXB0IGluY3JlbWVudCBTT1VSQ0UgdG8gYWZ0ZXIgdGhlIG51bWJlci4KKysgICBTT1VSQ0UgbXVzdCBiZSBhbiBsdmFsdWUuICAqLworKworKyMgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSKGRlc3RpbmF0aW9uLCBzb3VyY2UpCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgRVhUUkFDVF9OVU1CRVIgKGRlc3RpbmF0aW9uLCBzb3VyY2UpOwkJCQlcCisrICAgIChzb3VyY2UpICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7IAkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjIGlmZGVmIERFQlVHCisrc3RhdGljIHZvaWQgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoaW50ICpkZXN0aW5hdGlvbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICoqc291cmNlKTsKKytzdGF0aWMgdm9pZAorK1BSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKGludCAqZGVzdGluYXRpb24sIFVDSEFSX1QgKipzb3VyY2UpCisreworKyAgUFJFRklYKGV4dHJhY3RfbnVtYmVyKSAoZGVzdGluYXRpb24sICpzb3VyY2UpOworKyAgKnNvdXJjZSArPSBPRkZTRVRfQUREUkVTU19TSVpFOworK30KKysKKysjICBpZm5kZWYgRVhUUkFDVF9NQUNST1MKKysjICAgdW5kZWYgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IKKysjICAgZGVmaW5lIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSKGRlc3QsIHNyYykgXAorKyAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJmRlc3QsICZzcmMpCisrIyAgZW5kaWYgLyogbm90IEVYVFJBQ1RfTUFDUk9TICovCisrCisrIyBlbmRpZiAvKiBERUJVRyAqLworKworKwwKKysKKysvKiBJZiBERUJVRyBpcyBkZWZpbmVkLCBSZWdleCBwcmludHMgbWFueSB2b2x1bWlub3VzIG1lc3NhZ2VzIGFib3V0IHdoYXQKKysgICBpdCBpcyBkb2luZyAoaWYgdGhlIHZhcmlhYmxlIGBkZWJ1ZycgaXMgbm9uemVybykuICBJZiBsaW5rZWQgd2l0aCB0aGUKKysgICBtYWluIHByb2dyYW0gaW4gYGlyZWdleC5jJywgeW91IGNhbiBlbnRlciBwYXR0ZXJucyBhbmQgc3RyaW5ncworKyAgIGludGVyYWN0aXZlbHkuICBBbmQgaWYgbGlua2VkIHdpdGggdGhlIG1haW4gcHJvZ3JhbSBpbiBgbWFpbi5jJyBhbmQKKysgICB0aGUgb3RoZXIgdGVzdCBmaWxlcywgeW91IGNhbiBydW4gdGhlIGFscmVhZHktd3JpdHRlbiB0ZXN0cy4gICovCisrCisrIyBpZmRlZiBERUJVRworKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKysKKysvKiBXZSB1c2Ugc3RhbmRhcmQgSS9PIGZvciBkZWJ1Z2dpbmcuICAqLworKyMgICBpbmNsdWRlIDxzdGRpby5oPgorKworKy8qIEl0IGlzIHVzZWZ1bCB0byB0ZXN0IHRoaW5ncyB0aGF0IGBgbXVzdCcnIGJlIHRydWUgd2hlbiBkZWJ1Z2dpbmcuICAqLworKyMgICBpbmNsdWRlIDxhc3NlcnQuaD4KKysKKytzdGF0aWMgaW50IGRlYnVnOworKworKyMgICBkZWZpbmUgREVCVUdfU1RBVEVNRU5UKGUpIGUKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMSh4KSBpZiAoZGVidWcpIHByaW50ZiAoeCkKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMih4MSwgeDIpIGlmIChkZWJ1ZykgcHJpbnRmICh4MSwgeDIpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDMoeDEsIHgyLCB4MykgaWYgKGRlYnVnKSBwcmludGYgKHgxLCB4MiwgeDMpCisrIyAgIGRlZmluZSBERUJVR19QUklOVDQoeDEsIHgyLCB4MywgeDQpIGlmIChkZWJ1ZykgcHJpbnRmICh4MSwgeDIsIHgzLCB4NCkKKysjICBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrIyAgZGVmaW5lIERFQlVHX1BSSU5UX0NPTVBJTEVEX1BBVFRFUk4ocCwgcywgZSkgCQkJXAorKyAgaWYgKGRlYnVnKSBQUkVGSVgocHJpbnRfcGFydGlhbF9jb21waWxlZF9wYXR0ZXJuKSAocywgZSkKKysjICBkZWZpbmUgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyh3LCBzMSwgc3oxLCBzMiwgc3oyKQkJXAorKyAgaWYgKGRlYnVnKSBQUkVGSVgocHJpbnRfZG91YmxlX3N0cmluZykgKHcsIHMxLCBzejEsIHMyLCBzejIpCisrCisrCisrLyogUHJpbnQgdGhlIGZhc3RtYXAgaW4gaHVtYW4tcmVhZGFibGUgZm9ybS4gICovCisrCisrIyAgaWZuZGVmIERFRklORURfT05DRQorK3ZvaWQKKytwcmludF9mYXN0bWFwIChjaGFyICpmYXN0bWFwKQorK3sKKysgIHVuc2lnbmVkIHdhc19hX3JhbmdlID0gMDsKKysgIHVuc2lnbmVkIGkgPSAwOworKworKyAgd2hpbGUgKGkgPCAoMSA8PCBCWVRFV0lEVEgpKQorKyAgICB7CisrICAgICAgaWYgKGZhc3RtYXBbaSsrXSkKKysJeworKwkgIHdhc19hX3JhbmdlID0gMDsKKysgICAgICAgICAgcHV0Y2hhciAoaSAtIDEpOworKyAgICAgICAgICB3aGlsZSAoaSA8ICgxIDw8IEJZVEVXSURUSCkgICYmICBmYXN0bWFwW2ldKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHdhc19hX3JhbmdlID0gMTsKKysgICAgICAgICAgICAgIGkrKzsKKysgICAgICAgICAgICB9CisrCSAgaWYgKHdhc19hX3JhbmdlKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIHByaW50ZiAoIi0iKTsKKysgICAgICAgICAgICAgIHB1dGNoYXIgKGkgLSAxKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgIH0KKysgIHB1dGNoYXIgKCdcbicpOworK30KKysjICBlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrCisrCisrLyogUHJpbnQgYSBjb21waWxlZCBwYXR0ZXJuIHN0cmluZyBpbiBodW1hbi1yZWFkYWJsZSBmb3JtLCBzdGFydGluZyBhdAorKyAgIHRoZSBTVEFSVCBwb2ludGVyIGludG8gaXQgYW5kIGVuZGluZyBqdXN0IGJlZm9yZSB0aGUgcG9pbnRlciBFTkQuICAqLworKworK3ZvaWQKKytQUkVGSVgocHJpbnRfcGFydGlhbF9jb21waWxlZF9wYXR0ZXJuKSAoVUNIQVJfVCAqc3RhcnQsIFVDSEFSX1QgKmVuZCkKKyt7CisrICBpbnQgbWNudCwgbWNudDI7CisrICBVQ0hBUl9UICpwMTsKKysgIFVDSEFSX1QgKnAgPSBzdGFydDsKKysgIFVDSEFSX1QgKnBlbmQgPSBlbmQ7CisrCisrICBpZiAoc3RhcnQgPT0gTlVMTCkKKysgICAgeworKyAgICAgIHByaW50ZiAoIihudWxsKVxuIik7CisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICAvKiBMb29wIG92ZXIgcGF0dGVybiBjb21tYW5kcy4gICovCisrICB3aGlsZSAocCA8IHBlbmQpCisrICAgIHsKKysjICBpZmRlZiBfTElCQworKyAgICAgIHByaW50ZiAoIiV0ZDpcdCIsIHAgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgICAgIHByaW50ZiAoIiVsZDpcdCIsIChsb25nIGludCkgKHAgLSBzdGFydCkpOworKyMgIGVuZGlmCisrCisrICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwKyspCisrCXsKKysgICAgICAgIGNhc2Ugbm9fb3A6CisrICAgICAgICAgIHByaW50ZiAoIi9ub19vcCIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBleGFjdG46CisrCSAgbWNudCA9ICpwKys7CisrICAgICAgICAgIHByaW50ZiAoIi9leGFjdG4vJWQiLCBtY250KTsKKysgICAgICAgICAgZG8KKysJICAgIHsKKysgICAgICAgICAgICAgIHB1dGNoYXIgKCcvJyk7CisrCSAgICAgIFBVVF9DSEFSICgqcCsrKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIHdoaWxlICgtLW1jbnQpOworKyAgICAgICAgICBicmVhazsKKysKKysjICBpZmRlZiBNQlNfU1VQUE9SVAorKwljYXNlIGV4YWN0bl9iaW46CisrCSAgbWNudCA9ICpwKys7CisrCSAgcHJpbnRmICgiL2V4YWN0bl9iaW4vJWQiLCBtY250KTsKKysgICAgICAgICAgZG8KKysJICAgIHsKKysJICAgICAgcHJpbnRmKCIvJWx4IiwgKGxvbmcgaW50KSAqcCsrKTsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIHdoaWxlICgtLW1jbnQpOworKyAgICAgICAgICBicmVhazsKKysjICBlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKwljYXNlIHN0YXJ0X21lbW9yeToKKysgICAgICAgICAgbWNudCA9ICpwKys7CisrICAgICAgICAgIHByaW50ZiAoIi9zdGFydF9tZW1vcnkvJWQvJWxkIiwgbWNudCwgKGxvbmcgaW50KSAqcCsrKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc3RvcF9tZW1vcnk6CisrICAgICAgICAgIG1jbnQgPSAqcCsrOworKwkgIHByaW50ZiAoIi9zdG9wX21lbW9yeS8lZC8lbGQiLCBtY250LCAobG9uZyBpbnQpICpwKyspOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBkdXBsaWNhdGU6CisrCSAgcHJpbnRmICgiL2R1cGxpY2F0ZS8lbGQiLCAobG9uZyBpbnQpICpwKyspOworKwkgIGJyZWFrOworKworKwljYXNlIGFueWNoYXI6CisrCSAgcHJpbnRmICgiL2FueWNoYXIiKTsKKysJICBicmVhazsKKysKKysJY2FzZSBjaGFyc2V0OgorKyAgICAgICAgY2FzZSBjaGFyc2V0X25vdDoKKysgICAgICAgICAgeworKyMgIGlmZGVmIFdDSEFSCisrCSAgICBpbnQgaSwgbGVuZ3RoOworKwkgICAgd2NoYXJfdCAqd29ya3AgPSBwOworKwkgICAgcHJpbnRmICgiL2NoYXJzZXQgWyVzIiwKKysJICAgICAgICAgICAgKHJlX29wY29kZV90KSAqKHdvcmtwIC0gMSkgPT0gY2hhcnNldF9ub3QgPyAiXiIgOiAiIik7CisrCSAgICBwICs9IDU7CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOyBpKyspCisrCSAgICAgIHByaW50ZigiWzolbHg6XSIsIChsb25nIGludCkgKnArKyk7CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9sICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDspCisrCSAgICAgIHsKKysJCXByaW50ZigiWy4iKTsKKysJCXdoaWxlKCpwICE9IDApCisrCQkgIFBVVF9DSEFSKChpKyssKnArKykpOworKwkJaSsrLHArKzsKKysJCXByaW50ZigiLl0iKTsKKysJICAgICAgfQorKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3MgKi8KKysJICAgIGZvciAoaT0wIDsgaTxsZW5ndGggOykKKysJICAgICAgeworKwkJcHJpbnRmKCJbPSIpOworKwkJd2hpbGUoKnAgIT0gMCkKKysJCSAgUFVUX0NIQVIoKGkrKywqcCsrKSk7CisrCQlpKysscCsrOworKwkJcHJpbnRmKCI9XSIpOworKwkgICAgICB9CisrCSAgICBsZW5ndGggPSAqd29ya3ArKzsgLyogdGhlIGxlbmd0aCBvZiBjaGFyX3JhbmdlICovCisrCSAgICBmb3IgKGk9MCA7IGk8bGVuZ3RoIDsgaSsrKQorKwkgICAgICB7CisrCQl3Y2hhcl90IHJhbmdlX3N0YXJ0ID0gKnArKzsKKysJCXdjaGFyX3QgcmFuZ2VfZW5kID0gKnArKzsKKysJCXByaW50ZigiJUMtJUMiLCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kKTsKKysJICAgICAgfQorKwkgICAgbGVuZ3RoID0gKndvcmtwKys7IC8qIHRoZSBsZW5ndGggb2YgY2hhciAqLworKwkgICAgZm9yIChpPTAgOyBpPGxlbmd0aCA7IGkrKykKKysJICAgICAgcHJpbnRmKCIlQyIsICpwKyspOworKwkgICAgcHV0Y2hhciAoJ10nKTsKKysjICBlbHNlCisrICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGMsIGxhc3QgPSAtMTAwOworKwkgICAgcmVnaXN0ZXIgaW50IGluX3JhbmdlID0gMDsKKysKKysJICAgIHByaW50ZiAoIi9jaGFyc2V0IFslcyIsCisrCSAgICAgICAgICAgIChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gY2hhcnNldF9ub3QgPyAiXiIgOiAiIik7CisrCisrICAgICAgICAgICAgYXNzZXJ0IChwICsgKnAgPCBwZW5kKTsKKysKKysgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMjU2OyBjKyspCisrCSAgICAgIGlmIChjIC8gOCA8ICpwCisrCQkgICYmIChwWzEgKyAoYy84KV0gJiAoMSA8PCAoYyAlIDgpKSkpCisrCQl7CisrCQkgIC8qIEFyZSB3ZSBzdGFydGluZyBhIHJhbmdlPyAgKi8KKysJCSAgaWYgKGxhc3QgKyAxID09IGMgJiYgISBpbl9yYW5nZSkKKysJCSAgICB7CisrCQkgICAgICBwdXRjaGFyICgnLScpOworKwkJICAgICAgaW5fcmFuZ2UgPSAxOworKwkJICAgIH0KKysJCSAgLyogSGF2ZSB3ZSBicm9rZW4gYSByYW5nZT8gICovCisrCQkgIGVsc2UgaWYgKGxhc3QgKyAxICE9IGMgJiYgaW5fcmFuZ2UpCisrICAgICAgICAgICAgICB7CisrCQkgICAgICBwdXRjaGFyIChsYXN0KTsKKysJCSAgICAgIGluX3JhbmdlID0gMDsKKysJCSAgICB9CisrCisrCQkgIGlmICghIGluX3JhbmdlKQorKwkJICAgIHB1dGNoYXIgKGMpOworKworKwkJICBsYXN0ID0gYzsKKysgICAgICAgICAgICAgIH0KKysKKysJICAgIGlmIChpbl9yYW5nZSkKKysJICAgICAgcHV0Y2hhciAobGFzdCk7CisrCisrCSAgICBwdXRjaGFyICgnXScpOworKworKwkgICAgcCArPSAxICsgKnA7CisrIyAgZW5kaWYgLyogV0NIQVIgKi8KKysJICB9CisrCSAgYnJlYWs7CisrCisrCWNhc2UgYmVnbGluZToKKysJICBwcmludGYgKCIvYmVnbGluZSIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBlbmRsaW5lOgorKyAgICAgICAgICBwcmludGYgKCIvZW5kbGluZSIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL29uX2ZhaWx1cmVfanVtcCB0byAlbGQiLCAobG9uZyBpbnQpIChwICsgbWNudCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9vbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgdG8gJWxkIiwKKysJCSAgKGxvbmcgaW50KSAocCArIG1jbnQgLSBzdGFydCkpOworKyMgIGVuZGlmCisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysjICBpZmRlZiBfTElCQworKyAgCSAgcHJpbnRmICgiL2R1bW15X2ZhaWx1cmVfanVtcCB0byAldGQiLCBwICsgbWNudCAtIHN0YXJ0KTsKKysjICBlbHNlCisrICAJICBwcmludGYgKCIvZHVtbXlfZmFpbHVyZV9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBwdXNoX2R1bW15X2ZhaWx1cmU6CisrICAgICAgICAgIHByaW50ZiAoIi9wdXNoX2R1bW15X2ZhaWx1cmUiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIG1heWJlX3BvcF9qdW1wOgorKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudCwgJnApOworKyMgIGlmZGVmIF9MSUJDCisrICAJICBwcmludGYgKCIvbWF5YmVfcG9wX2p1bXAgdG8gJXRkIiwgcCArIG1jbnQgLSBzdGFydCk7CisrIyAgZWxzZQorKyAgCSAgcHJpbnRmICgiL21heWJlX3BvcF9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBwb3BfZmFpbHVyZV9qdW1wOgorKwkgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9wb3BfZmFpbHVyZV9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9wb3BfZmFpbHVyZV9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wX3Bhc3RfYWx0OgorKwkgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9qdW1wX3Bhc3RfYWx0IHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9qdW1wX3Bhc3RfYWx0IHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBqdW1wOgorKwkgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysgIAkgIHByaW50ZiAoIi9qdW1wIHRvICV0ZCIsIHAgKyBtY250IC0gc3RhcnQpOworKyMgIGVsc2UKKysgIAkgIHByaW50ZiAoIi9qdW1wIHRvICVsZCIsIChsb25nIGludCkgKHAgKyBtY250IC0gc3RhcnQpKTsKKysjICBlbmRpZgorKwkgIGJyZWFrOworKworKyAgICAgICAgY2FzZSBzdWNjZWVkX246CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrCSAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQyLCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysJICBwcmludGYgKCIvc3VjY2VlZF9uIHRvICV0ZCwgJWQgdGltZXMiLCBwMSAtIHN0YXJ0LCBtY250Mik7CisrIyAgZWxzZQorKwkgIHByaW50ZiAoIi9zdWNjZWVkX24gdG8gJWxkLCAlZCB0aW1lcyIsCisrCQkgIChsb25nIGludCkgKHAxIC0gc3RhcnQpLCBtY250Mik7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXBfbjoKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQsICZwKTsKKysJICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICBQUkVGSVgoZXh0cmFjdF9udW1iZXJfYW5kX2luY3IpICgmbWNudDIsICZwKTsKKysJICBwcmludGYgKCIvanVtcF9uIHRvICVkLCAlZCB0aW1lcyIsIHAxIC0gc3RhcnQsIG1jbnQyKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHNldF9udW1iZXJfYXQ6CisrICAgICAgICAgIFBSRUZJWChleHRyYWN0X251bWJlcl9hbmRfaW5jcikgKCZtY250LCAmcCk7CisrCSAgcDEgPSBwICsgbWNudDsKKysgICAgICAgICAgUFJFRklYKGV4dHJhY3RfbnVtYmVyX2FuZF9pbmNyKSAoJm1jbnQyLCAmcCk7CisrIyAgaWZkZWYgX0xJQkMKKysJICBwcmludGYgKCIvc2V0X251bWJlcl9hdCBsb2NhdGlvbiAldGQgdG8gJWQiLCBwMSAtIHN0YXJ0LCBtY250Mik7CisrIyAgZWxzZQorKwkgIHByaW50ZiAoIi9zZXRfbnVtYmVyX2F0IGxvY2F0aW9uICVsZCB0byAlZCIsCisrCQkgIChsb25nIGludCkgKHAxIC0gc3RhcnQpLCBtY250Mik7CisrIyAgZW5kaWYKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIHdvcmRib3VuZDoKKysJICBwcmludGYgKCIvd29yZGJvdW5kIik7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugbm90d29yZGJvdW5kOgorKwkgIHByaW50ZiAoIi9ub3R3b3JkYm91bmQiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugd29yZGJlZzoKKysJICBwcmludGYgKCIvd29yZGJlZyIpOworKwkgIGJyZWFrOworKworKwljYXNlIHdvcmRlbmQ6CisrCSAgcHJpbnRmICgiL3dvcmRlbmQiKTsKKysJICBicmVhazsKKysKKysjICBpZmRlZiBlbWFjcworKwljYXNlIGJlZm9yZV9kb3Q6CisrCSAgcHJpbnRmICgiL2JlZm9yZV9kb3QiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgYXRfZG90OgorKwkgIHByaW50ZiAoIi9hdF9kb3QiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgYWZ0ZXJfZG90OgorKwkgIHByaW50ZiAoIi9hZnRlcl9kb3QiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugc3ludGF4c3BlYzoKKysgICAgICAgICAgcHJpbnRmICgiL3N5bnRheHNwZWMiKTsKKysJICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvJWQiLCBtY250KTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2Ugbm90c3ludGF4c3BlYzoKKysgICAgICAgICAgcHJpbnRmICgiL25vdHN5bnRheHNwZWMiKTsKKysJICBtY250ID0gKnArKzsKKysJICBwcmludGYgKCIvJWQiLCBtY250KTsKKysJICBicmVhazsKKysjICBlbmRpZiAvKiBlbWFjcyAqLworKworKwljYXNlIHdvcmRjaGFyOgorKwkgIHByaW50ZiAoIi93b3JkY2hhciIpOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBub3R3b3JkY2hhcjoKKysJICBwcmludGYgKCIvbm90d29yZGNoYXIiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgYmVnYnVmOgorKwkgIHByaW50ZiAoIi9iZWdidWYiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCWNhc2UgZW5kYnVmOgorKwkgIHByaW50ZiAoIi9lbmRidWYiKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICBwcmludGYgKCI/JWxkIiwgKGxvbmcgaW50KSAqKHAtMSkpOworKwl9CisrCisrICAgICAgcHV0Y2hhciAoJ1xuJyk7CisrICAgIH0KKysKKysjICBpZmRlZiBfTElCQworKyAgcHJpbnRmICgiJXRkOlx0ZW5kIG9mIHBhdHRlcm4uXG4iLCBwIC0gc3RhcnQpOworKyMgIGVsc2UKKysgIHByaW50ZiAoIiVsZDpcdGVuZCBvZiBwYXR0ZXJuLlxuIiwgKGxvbmcgaW50KSAocCAtIHN0YXJ0KSk7CisrIyAgZW5kaWYKKyt9CisrCisrCisrdm9pZAorK1BSRUZJWChwcmludF9jb21waWxlZF9wYXR0ZXJuKSAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwKQorK3sKKysgIFVDSEFSX1QgKmJ1ZmZlciA9IChVQ0hBUl9UKikgYnVmcC0+YnVmZmVyOworKworKyAgUFJFRklYKHByaW50X3BhcnRpYWxfY29tcGlsZWRfcGF0dGVybikgKGJ1ZmZlciwgYnVmZmVyCisrCQkJCSAgKyBidWZwLT51c2VkIC8gc2l6ZW9mKFVDSEFSX1QpKTsKKysgIHByaW50ZiAoIiVsZCBieXRlcyB1c2VkLyVsZCBieXRlcyBhbGxvY2F0ZWQuXG4iLAorKwkgIGJ1ZnAtPnVzZWQsIGJ1ZnAtPmFsbG9jYXRlZCk7CisrCisrICBpZiAoYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSAmJiBidWZwLT5mYXN0bWFwKQorKyAgICB7CisrICAgICAgcHJpbnRmICgiZmFzdG1hcDogIik7CisrICAgICAgcHJpbnRfZmFzdG1hcCAoYnVmcC0+ZmFzdG1hcCk7CisrICAgIH0KKysKKysjICBpZmRlZiBfTElCQworKyAgcHJpbnRmICgicmVfbnN1YjogJVpkXHQiLCBidWZwLT5yZV9uc3ViKTsKKysjICBlbHNlCisrICBwcmludGYgKCJyZV9uc3ViOiAlbGRcdCIsIChsb25nIGludCkgYnVmcC0+cmVfbnN1Yik7CisrIyAgZW5kaWYKKysgIHByaW50ZiAoInJlZ3NfYWxsb2M6ICVkXHQiLCBidWZwLT5yZWdzX2FsbG9jYXRlZCk7CisrICBwcmludGYgKCJjYW5fYmVfbnVsbDogJWRcdCIsIGJ1ZnAtPmNhbl9iZV9udWxsKTsKKysgIHByaW50ZiAoIm5ld2xpbmVfYW5jaG9yOiAlZFxuIiwgYnVmcC0+bmV3bGluZV9hbmNob3IpOworKyAgcHJpbnRmICgibm9fc3ViOiAlZFx0IiwgYnVmcC0+bm9fc3ViKTsKKysgIHByaW50ZiAoIm5vdF9ib2w6ICVkXHQiLCBidWZwLT5ub3RfYm9sKTsKKysgIHByaW50ZiAoIm5vdF9lb2w6ICVkXHQiLCBidWZwLT5ub3RfZW9sKTsKKysgIHByaW50ZiAoInN5bnRheDogJWx4XG4iLCBidWZwLT5zeW50YXgpOworKyAgLyogUGVyaGFwcyB3ZSBzaG91bGQgcHJpbnQgdGhlIHRyYW5zbGF0ZSB0YWJsZT8gICovCisrfQorKworKworK3ZvaWQKKytQUkVGSVgocHJpbnRfZG91YmxlX3N0cmluZykgKGNvbnN0IENIQVJfVCAqd2hlcmUsIGNvbnN0IENIQVJfVCAqc3RyaW5nMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplMSwgY29uc3QgQ0hBUl9UICpzdHJpbmcyLCBpbnQgc2l6ZTIpCisreworKyAgaW50IHRoaXNfY2hhcjsKKysKKysgIGlmICh3aGVyZSA9PSBOVUxMKQorKyAgICBwcmludGYgKCIobnVsbCkiKTsKKysgIGVsc2UKKysgICAgeworKyAgICAgIGludCBjbnQ7CisrCisrICAgICAgaWYgKEZJUlNUX1NUUklOR19QICh3aGVyZSkpCisrICAgICAgICB7CisrICAgICAgICAgIGZvciAodGhpc19jaGFyID0gd2hlcmUgLSBzdHJpbmcxOyB0aGlzX2NoYXIgPCBzaXplMTsgdGhpc19jaGFyKyspCisrCSAgICBQVVRfQ0hBUiAoc3RyaW5nMVt0aGlzX2NoYXJdKTsKKysKKysgICAgICAgICAgd2hlcmUgPSBzdHJpbmcyOworKyAgICAgICAgfQorKworKyAgICAgIGNudCA9IDA7CisrICAgICAgZm9yICh0aGlzX2NoYXIgPSB3aGVyZSAtIHN0cmluZzI7IHRoaXNfY2hhciA8IHNpemUyOyB0aGlzX2NoYXIrKykKKysJeworKwkgIFBVVF9DSEFSIChzdHJpbmcyW3RoaXNfY2hhcl0pOworKwkgIGlmICgrK2NudCA+IDEwMCkKKysJICAgIHsKKysJICAgICAgZnB1dHMgKCIuLi4iLCBzdGRvdXQpOworKwkgICAgICBicmVhazsKKysJICAgIH0KKysJfQorKyAgICB9CisrfQorKworKyMgIGlmbmRlZiBERUZJTkVEX09OQ0UKKyt2b2lkCisrcHJpbnRjaGFyIChpbnQgYykKKyt7CisrICBwdXRjIChjLCBzdGRlcnIpOworK30KKysjICBlbmRpZgorKworKyMgZWxzZSAvKiBub3QgREVCVUcgKi8KKysKKysjICBpZm5kZWYgREVGSU5FRF9PTkNFCisrIyAgIHVuZGVmIGFzc2VydAorKyMgICBkZWZpbmUgYXNzZXJ0KGUpCisrCisrIyAgIGRlZmluZSBERUJVR19TVEFURU1FTlQoZSkKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMSh4KQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQyKHgxLCB4MikKKysjICAgZGVmaW5lIERFQlVHX1BSSU5UMyh4MSwgeDIsIHgzKQorKyMgICBkZWZpbmUgREVCVUdfUFJJTlQ0KHgxLCB4MiwgeDMsIHg0KQorKyMgIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysjICBkZWZpbmUgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTihwLCBzLCBlKQorKyMgIGRlZmluZSBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HKHcsIHMxLCBzejEsIHMyLCBzejIpCisrCisrIyBlbmRpZiAvKiBub3QgREVCVUcgKi8KKysKKysMCisrCisrIyBpZmRlZiBXQ0hBUgorKy8qIFRoaXMgIGNvbnZlcnQgYSBtdWx0aWJ5dGUgc3RyaW5nIHRvIGEgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nLgorKyAgIEFuZCB3cml0ZSB0aGVpciBjb3JyZXNwb25kYW5jZXMgdG8gb2Zmc2V0X2J1ZmZlcihzZWUgYmVsb3cpCisrICAgYW5kIHdyaXRlIHdoZXRoZXIgZWFjaCB3Y2hhcl90IGlzIGJpbmFyeSBkYXRhIHRvIGlzX2JpbmFyeS4KKysgICBUaGlzIGFzc3VtZSBpbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZXMgYXMgYmluYXJ5IGRhdGEuCisrICAgV2UgYXNzdW1lIG9mZnNldF9idWZmZXIgYW5kIGlzX2JpbmFyeSBpcyBhbHJlYWR5IGFsbG9jYXRlZAorKyAgIGVub3VnaCBzcGFjZS4gICovCisrCisrc3RhdGljIHNpemVfdCBjb252ZXJ0X21ic190b193Y3MgKENIQVJfVCAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjLAorKwkJCQkgIHNpemVfdCBsZW4sIGludCAqb2Zmc2V0X2J1ZmZlciwKKysJCQkJICBjaGFyICppc19iaW5hcnkpOworK3N0YXRpYyBzaXplX3QKKytjb252ZXJ0X21ic190b193Y3MgKENIQVJfVCAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhcipzcmMsIHNpemVfdCBsZW4sCisrICAgICAgICAgICAgICAgICAgICBpbnQgKm9mZnNldF9idWZmZXIsIGNoYXIgKmlzX2JpbmFyeSkKKysgICAgIC8qIEl0IGhvbGQgY29ycmVzcG9uZGFuY2VzIGJldHdlZW4gc3JjKGNoYXIgc3RyaW5nKSBhbmQKKysJZGVzdCh3Y2hhcl90IHN0cmluZykgZm9yIG9wdGltaXphdGlvbi4KKysJZS5nLiBzcmMgID0gInh4eHl6eiIKKysgICAgICAgICAgICAgZGVzdCA9IHsnWCcsICdZJywgJ1onfQorKwkgICAgICAoZWFjaCAieHh4IiwgInkiIGFuZCAienoiIHJlcHJlc2VudCBvbmUgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkgICAgICAgY29ycmVzcG9uZGluZyB0byAnWCcsICdZJyBhbmQgJ1onLikKKysJICBvZmZzZXRfYnVmZmVyID0gezAsIDArMygieHh4IiksIDArMysxKCJ5IiksIDArMysxKzIoInp6Iil9CisrCSAgCSAgICAgICAgPSB7MCwgMywgNCwgNn0KKysgICAgICovCisreworKyAgd2NoYXJfdCAqcGRlc3QgPSBkZXN0OworKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcHNyYyA9IHNyYzsKKysgIHNpemVfdCB3Y19jb3VudCA9IDA7CisrCisrICBtYnN0YXRlX3QgbWJzOworKyAgaW50IGksIGNvbnN1bWVkOworKyAgc2l6ZV90IG1iX3JlbWFpbiA9IGxlbjsKKysgIHNpemVfdCBtYl9jb3VudCA9IDA7CisrCisrICAvKiBJbml0aWFsaXplIHRoZSBjb252ZXJzaW9uIHN0YXRlLiAgKi8KKysgIG1lbXNldCAoJm1icywgMCwgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysKKysgIG9mZnNldF9idWZmZXJbMF0gPSAwOworKyAgZm9yKCA7IG1iX3JlbWFpbiA+IDAgOyArK3djX2NvdW50LCArK3BkZXN0LCBtYl9yZW1haW4gLT0gY29uc3VtZWQsCisrCSBwc3JjICs9IGNvbnN1bWVkKQorKyAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgY29uc3VtZWQgPSBfX21icnRvd2MgKHBkZXN0LCBwc3JjLCBtYl9yZW1haW4sICZtYnMpOworKyNlbHNlCisrICAgICAgY29uc3VtZWQgPSBtYnJ0b3djIChwZGVzdCwgcHNyYywgbWJfcmVtYWluLCAmbWJzKTsKKysjZW5kaWYKKysKKysgICAgICBpZiAoY29uc3VtZWQgPD0gMCkKKysJLyogZmFpbGVkIHRvIGNvbnZlcnQuIG1heWJlIHNyYyBjb250YWlucyBiaW5hcnkgZGF0YS4KKysJICAgU28gd2UgY29uc3VtZSAxIGJ5dGUgbWFudWFseS4gICovCisrCXsKKysJICAqcGRlc3QgPSAqcHNyYzsKKysJICBjb25zdW1lZCA9IDE7CisrCSAgaXNfYmluYXJ5W3djX2NvdW50XSA9IFRSVUU7CisrCX0KKysgICAgICBlbHNlCisrCWlzX2JpbmFyeVt3Y19jb3VudF0gPSBGQUxTRTsKKysgICAgICAvKiBJbiBzamlzIGVuY29kaW5nLCB3ZSB1c2UgeWVuIHNpZ24gYXMgZXNjYXBlIGNoYXJhY3RlciBpbgorKwkgcGxhY2Ugb2YgcmV2ZXJzZSBzb2xpZHVzLiBTbyB3ZSBjb252ZXJ0IDB4NWMoeWVuIHNpZ24gaW4KKysJIHNqaXMpIHRvIG5vdCAweGE1KHllbiBzaWduIGluIFVDUzIpIGJ1dCAweDVjKHJldmVyc2UKKysJIHNvbGlkdXMgaW4gVUNTMikuICAqLworKyAgICAgIGlmIChjb25zdW1lZCA9PSAxICYmIChpbnQpICpwc3JjID09IDB4NWMgJiYgKGludCkgKnBkZXN0ID09IDB4YTUpCisrCSpwZGVzdCA9ICh3Y2hhcl90KSAqcHNyYzsKKysKKysgICAgICBvZmZzZXRfYnVmZmVyW3djX2NvdW50ICsgMV0gPSBtYl9jb3VudCArPSBjb25zdW1lZDsKKysgICAgfQorKworKyAgLyogRmlsbCByZW1haW4gb2YgdGhlIGJ1ZmZlciB3aXRoIHNlbnRpbmVsLiAgKi8KKysgIGZvciAoaSA9IHdjX2NvdW50ICsgMSA7IGkgPD0gbGVuIDsgaSsrKQorKyAgICBvZmZzZXRfYnVmZmVyW2ldID0gbWJfY291bnQgKyAxOworKworKyAgcmV0dXJuIHdjX2NvdW50OworK30KKysKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrI2Vsc2UgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysvKiBTZXQgYnkgYHJlX3NldF9zeW50YXgnIHRvIHRoZSBjdXJyZW50IHJlZ2V4cCBzeW50YXggdG8gcmVjb2duaXplLiAgQ2FuCisrICAgYWxzbyBiZSBhc3NpZ25lZCB0byBhcmJpdHJhcmlseTogZWFjaCBwYXR0ZXJuIGJ1ZmZlciBzdG9yZXMgaXRzIG93bgorKyAgIHN5bnRheCwgc28gaXQgY2FuIGJlIGNoYW5nZWQgYmV0d2VlbiByZWdleCBjb21waWxhdGlvbnMuICAqLworKy8qIFRoaXMgaGFzIG5vIGluaXRpYWxpemVyIGJlY2F1c2UgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIEVtYWNzCisrICAgYmVjb21lIHJlYWQtb25seSBhZnRlciBkdW1waW5nLiAgKi8KKytyZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisrCisrCisrLyogU3BlY2lmeSB0aGUgcHJlY2lzZSBzeW50YXggb2YgcmVnZXhwcyBmb3IgY29tcGlsYXRpb24uICBUaGlzIHByb3ZpZGVzCisrICAgZm9yIGNvbXBhdGliaWxpdHkgZm9yIHZhcmlvdXMgdXRpbGl0aWVzIHdoaWNoIGhpc3RvcmljYWxseSBoYXZlCisrICAgZGlmZmVyZW50LCBpbmNvbXBhdGlibGUgc3ludGF4ZXMuCisrCisrICAgVGhlIGFyZ3VtZW50IFNZTlRBWCBpcyBhIGJpdCBtYXNrIGNvbXByaXNlZCBvZiB0aGUgdmFyaW91cyBiaXRzCisrICAgZGVmaW5lZCBpbiByZWdleC5oLiAgV2UgcmV0dXJuIHRoZSBvbGQgc3ludGF4LiAgKi8KKysKKytyZWdfc3ludGF4X3QKKytyZV9zZXRfc3ludGF4IChyZWdfc3ludGF4X3Qgc3ludGF4KQorK3sKKysgIHJlZ19zeW50YXhfdCByZXQgPSByZV9zeW50YXhfb3B0aW9uczsKKysKKysgIHJlX3N5bnRheF9vcHRpb25zID0gc3ludGF4OworKyMgaWZkZWYgREVCVUcKKysgIGlmIChzeW50YXggJiBSRV9ERUJVRykKKysgICAgZGVidWcgPSAxOworKyAgZWxzZSBpZiAoZGVidWcpIC8qIHdhcyBvbiBidXQgbm93IGlzIG5vdCAqLworKyAgICBkZWJ1ZyA9IDA7CisrIyBlbmRpZiAvKiBERUJVRyAqLworKyAgcmV0dXJuIHJldDsKKyt9CisrIyBpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2V0X3N5bnRheCwgcmVfc2V0X3N5bnRheCkKKysjIGVuZGlmCisrDAorKy8qIFRoaXMgdGFibGUgZ2l2ZXMgYW4gZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBvZiB0aGUgZXJyb3IgY29kZXMgbGlzdGVkCisrICAgaW4gcmVnZXguaC4gIE9idmlvdXNseSB0aGUgb3JkZXIgaGVyZSBoYXMgdG8gYmUgc2FtZSBhcyB0aGVyZS4KKysgICBQT1NJWCBkb2Vzbid0IHJlcXVpcmUgdGhhdCB3ZSBkbyBhbnl0aGluZyBmb3IgUkVHX05PRVJST1IsCisrICAgYnV0IHdoeSBub3QgYmUgbmljZT8gICovCisrCisrc3RhdGljIGNvbnN0IGNoYXIgKnJlX2Vycm9yX21zZ2lkW10gPQorKyAgeworKyAgICBnZXR0ZXh0X25vb3AgKCJTdWNjZXNzIiksCS8qIFJFR19OT0VSUk9SICovCisrICAgIGdldHRleHRfbm9vcCAoIk5vIG1hdGNoIiksCS8qIFJFR19OT01BVENIICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmVndWxhciBleHByZXNzaW9uIiksIC8qIFJFR19CQURQQVQgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb2xsYXRpb24gY2hhcmFjdGVyIiksIC8qIFJFR19FQ09MTEFURSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lIiksIC8qIFJFR19FQ1RZUEUgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVHJhaWxpbmcgYmFja3NsYXNoIiksIC8qIFJFR19FRVNDQVBFICovCisrICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgYmFjayByZWZlcmVuY2UiKSwgLyogUkVHX0VTVUJSRUcgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkIFsgb3IgW14iKSwJLyogUkVHX0VCUkFDSyAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgKCBvciBcXCgiKSwgLyogUkVHX0VQQVJFTiAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJVbm1hdGNoZWQgXFx7IiksIC8qIFJFR19FQlJBQ0UgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIpLCAvKiBSRUdfQkFEQlIgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByYW5nZSBlbmQiKSwJLyogUkVHX0VSQU5HRSAqLworKyAgICBnZXR0ZXh0X25vb3AgKCJNZW1vcnkgZXhoYXVzdGVkIiksIC8qIFJFR19FU1BBQ0UgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIiksIC8qIFJFR19CQURSUFQgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiUHJlbWF0dXJlIGVuZCBvZiByZWd1bGFyIGV4cHJlc3Npb24iKSwgLyogUkVHX0VFTkQgKi8KKysgICAgZ2V0dGV4dF9ub29wICgiUmVndWxhciBleHByZXNzaW9uIHRvbyBiaWciKSwgLyogUkVHX0VTSVpFICovCisrICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCApIG9yIFxcKSIpIC8qIFJFR19FUlBBUkVOICovCisrICB9OworKwwKKysjZW5kaWYgLyogSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZm5kZWYgREVGSU5FRF9PTkNFCisrLyogQXZvaWRpbmcgYWxsb2NhIGR1cmluZyBtYXRjaGluZywgdG8gcGxhY2F0ZSByX2FsbG9jLiAgKi8KKysKKysvKiBEZWZpbmUgTUFUQ0hfTUFZX0FMTE9DQVRFIHVubGVzcyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorKyAgIHNlYXJjaGluZyBhbmQgbWF0Y2hpbmcgZnVuY3Rpb25zIHNob3VsZCBub3QgY2FsbCBhbGxvY2EuICBPbiBzb21lCisrICAgc3lzdGVtcywgYWxsb2NhIGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIG1hbGxvYywgYW5kIGlmIHdlJ3JlCisrICAgdXNpbmcgdGhlIHJlbG9jYXRpbmcgYWxsb2NhdG9yIHJvdXRpbmVzLCB0aGVuIG1hbGxvYyBjb3VsZCBjYXVzZSBhCisrICAgcmVsb2NhdGlvbiwgd2hpY2ggbWlnaHQgKGlmIHRoZSBzdHJpbmdzIGJlaW5nIHNlYXJjaGVkIGFyZSBpbiB0aGUKKysgICByYWxsb2MgaGVhcCkgc2hpZnQgdGhlIGRhdGEgb3V0IGZyb20gdW5kZXJuZWF0aCB0aGUgcmVnZXhwCisrICAgcm91dGluZXMuCisrCisrICAgSGVyZSdzIGFub3RoZXIgcmVhc29uIHRvIGF2b2lkIGFsbG9jYXRpb246IEVtYWNzCisrICAgcHJvY2Vzc2VzIGlucHV0IGZyb20gWCBpbiBhIHNpZ25hbCBoYW5kbGVyOyBwcm9jZXNzaW5nIFggaW5wdXQgbWF5CisrICAgY2FsbCBtYWxsb2M7IGlmIGlucHV0IGFycml2ZXMgd2hpbGUgYSBtYXRjaGluZyByb3V0aW5lIGlzIGNhbGxpbmcKKysgICBtYWxsb2MsIHRoZW4gd2UncmUgc2Nyb2QuICBCdXQgRW1hY3MgY2FuJ3QganVzdCBibG9jayBpbnB1dCB3aGlsZQorKyAgIGNhbGxpbmcgbWF0Y2hpbmcgcm91dGluZXM7IHRoZW4gd2UgZG9uJ3Qgbm90aWNlIGludGVycnVwdHMgd2hlbgorKyAgIHRoZXkgY29tZSBpbi4gIFNvLCBFbWFjcyBibG9ja3MgaW5wdXQgYXJvdW5kIGFsbCByZWdleHAgY2FsbHMKKysgICBleGNlcHQgdGhlIG1hdGNoaW5nIGNhbGxzLCB3aGljaCBpdCBsZWF2ZXMgdW5wcm90ZWN0ZWQsIGluIHRoZQorKyAgIGZhaXRoIHRoYXQgdGhleSB3aWxsIG5vdCBtYWxsb2MuICAqLworKworKy8qIE5vcm1hbGx5LCB0aGlzIGlzIGZpbmUuICAqLworKyMgZGVmaW5lIE1BVENIX01BWV9BTExPQ0FURQorKworKy8qIFdoZW4gdXNpbmcgR05VIEMsIHdlIGFyZSBub3QgUkVBTExZIHVzaW5nIHRoZSBDIGFsbG9jYSwgbm8gbWF0dGVyCisrICAgd2hhdCBjb25maWcuaCBtYXkgc2F5LiAgU28gZG9uJ3QgdGFrZSBwcmVjYXV0aW9ucyBmb3IgaXQuICAqLworKyMgaWZkZWYgX19HTlVDX18KKysjICB1bmRlZiBDX0FMTE9DQQorKyMgZW5kaWYKKysKKysvKiBUaGUgbWF0Y2ggcm91dGluZXMgbWF5IG5vdCBhbGxvY2F0ZSBpZiAoMSkgdGhleSB3b3VsZCBkbyBpdCB3aXRoIG1hbGxvYworKyAgIGFuZCAoMikgaXQncyBub3Qgc2FmZSBmb3IgdGhlbSB0byB1c2UgbWFsbG9jLgorKyAgIE5vdGUgdGhhdCBpZiBSRUxfQUxMT0MgaXMgZGVmaW5lZCwgbWF0Y2hpbmcgd291bGQgbm90IHVzZSBtYWxsb2MgZm9yIHRoZQorKyAgIGZhaWx1cmUgc3RhY2ssIGJ1dCB3ZSB3b3VsZCBzdGlsbCB1c2UgaXQgZm9yIHRoZSByZWdpc3RlciB2ZWN0b3JzOworKyAgIHNvIFJFTF9BTExPQyBzaG91bGQgbm90IGFmZmVjdCB0aGlzLiAgKi8KKysjIGlmIChkZWZpbmVkIENfQUxMT0NBIHx8IGRlZmluZWQgUkVHRVhfTUFMTE9DKSAmJiBkZWZpbmVkIGVtYWNzCisrIyAgdW5kZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyBlbmRpZgorKyNlbmRpZiAvKiBub3QgREVGSU5FRF9PTkNFICovCisrDAorKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrLyogRmFpbHVyZSBzdGFjayBkZWNsYXJhdGlvbnMgYW5kIG1hY3JvczsgYm90aCByZV9jb21waWxlX2Zhc3RtYXAgYW5kCisrICAgcmVfbWF0Y2hfMiB1c2UgYSBmYWlsdXJlIHN0YWNrLiAgVGhlc2UgaGF2ZSB0byBiZSBtYWNyb3MgYmVjYXVzZSBvZgorKyAgIFJFR0VYX0FMTE9DQVRFX1NUQUNLLiAgKi8KKysKKysKKysvKiBOdW1iZXIgb2YgZmFpbHVyZSBwb2ludHMgZm9yIHdoaWNoIHRvIGluaXRpYWxseSBhbGxvY2F0ZSBzcGFjZQorKyAgIHdoZW4gbWF0Y2hpbmcuICBJZiB0aGlzIG51bWJlciBpcyBleGNlZWRlZCwgd2UgYWxsb2NhdGUgbW9yZQorKyAgIHNwYWNlLCBzbyBpdCBpcyBub3QgYSBoYXJkIGxpbWl0LiAgKi8KKysjIGlmbmRlZiBJTklUX0ZBSUxVUkVfQUxMT0MKKysjICBkZWZpbmUgSU5JVF9GQUlMVVJFX0FMTE9DIDUKKysjIGVuZGlmCisrCisrLyogUm91Z2hseSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmFpbHVyZSBwb2ludHMgb24gdGhlIHN0YWNrLiAgV291bGQgYmUKKysgICBleGFjdGx5IHRoYXQgaWYgYWx3YXlzIHVzZWQgTUFYX0ZBSUxVUkVfSVRFTVMgaXRlbXMgZWFjaCB0aW1lIHdlIGZhaWxlZC4KKysgICBUaGlzIGlzIGEgdmFyaWFibGUgb25seSBzbyB1c2VycyBvZiByZWdleCBjYW4gYXNzaWduIHRvIGl0OyB3ZSBuZXZlcgorKyAgIGNoYW5nZSBpdCBvdXJzZWx2ZXMuICAqLworKworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKworKyMgIGlmZGVmIElOVF9JU18xNkJJVAorKyMgICBkZWZpbmUgUkVfTV9GX1RZUEUgbG9uZyBpbnQKKysjICBlbHNlCisrIyAgIGRlZmluZSBSRV9NX0ZfVFlQRSBpbnQKKysjICBlbmRpZiAvKiBJTlRfSVNfMTZCSVQgKi8KKysKKysjICBpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysvKiA0NDAwIHdhcyBlbm91Z2ggdG8gY2F1c2UgYSBjcmFzaCBvbiBBbHBoYSBPU0YvMSwKKysgICB3aG9zZSBkZWZhdWx0IHN0YWNrIGxpbWl0IGlzIDJtYi4gICovCisrIyAgIGRlZmluZSBSRV9NX0ZfREVGQVVMVCA0MDAwCisrIyAgZWxzZQorKyMgICBkZWZpbmUgUkVfTV9GX0RFRkFVTFQgMjAwMAorKyMgIGVuZGlmIC8qIE1BVENIX01BWV9BTExPQ0FURSAqLworKworKyMgIGluY2x1ZGUgPHNobGliLWNvbXBhdC5oPgorKworKyMgIGlmIFNITElCX0NPTVBBVCAobGliYywgR0xJQkNfMl8wLCBHTElCQ18yXzMpCisrbGlua193YXJuaW5nIChyZV9tYXhfZmFpbHVyZXMsICJ0aGUgJ3JlX21heF9mYWlsdXJlcycgdmFyaWFibGUgaXMgb2Jzb2xldGUgYW5kIHdpbGwgZ28gYXdheS4iKQorK1JFX01fRl9UWVBFIHJlX21heF9mYWlsdXJlcyA9IFJFX01fRl9ERUZBVUxUOworKyMgIGVsc2UKKytSRV9NX0ZfVFlQRSByZV9tYXhfZmFpbHVyZXMgYXR0cmlidXRlX2hpZGRlbiA9IFJFX01fRl9ERUZBVUxUOworKyMgIGVuZGlmIC8qIFNITElCX0NPTVBBVCAqLworKworKyMgIHVuZGVmIFJFX01fRl9UWVBFCisrIyAgdW5kZWYgUkVfTV9GX0RFRkFVTFQKKysKKysjIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKworKyMgaWZkZWYgSU5UX0lTXzE2QklUCisrCisrdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KQorK3sKKysgIFVDSEFSX1QgKnBvaW50ZXI7CisrICBsb25nIGludCBpbnRlZ2VyOworK307CisrCisrdHlwZWRlZiB1bmlvbiBQUkVGSVgoZmFpbF9zdGFja19lbHQpIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqc3RhY2s7CisrICB1bnNpZ25lZCBsb25nIGludCBzaXplOworKyAgdW5zaWduZWQgbG9uZyBpbnQgYXZhaWw7CQkvKiBPZmZzZXQgb2YgbmV4dCBvcGVuIHBvc2l0aW9uLiAgKi8KKyt9IFBSRUZJWChmYWlsX3N0YWNrX3R5cGUpOworKworKyMgZWxzZSAvKiBub3QgSU5UX0lTXzE2QklUICovCisrCisrdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KQorK3sKKysgIFVDSEFSX1QgKnBvaW50ZXI7CisrICBpbnQgaW50ZWdlcjsKKyt9OworKworK3R5cGVkZWYgdW5pb24gUFJFRklYKGZhaWxfc3RhY2tfZWx0KSBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCk7CisrCisrdHlwZWRlZiBzdHJ1Y3QKKyt7CisrICBQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKnN0YWNrOworKyAgdW5zaWduZWQgc2l6ZTsKKysgIHVuc2lnbmVkIGF2YWlsOwkJCS8qIE9mZnNldCBvZiBuZXh0IG9wZW4gcG9zaXRpb24uICAqLworK30gUFJFRklYKGZhaWxfc3RhY2tfdHlwZSk7CisrCisrIyBlbmRpZiAvKiBJTlRfSVNfMTZCSVQgKi8KKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBkZWZpbmUgRkFJTF9TVEFDS19FTVBUWSgpICAgICAoZmFpbF9zdGFjay5hdmFpbCA9PSAwKQorKyMgIGRlZmluZSBGQUlMX1NUQUNLX1BUUl9FTVBUWSgpIChmYWlsX3N0YWNrX3B0ci0+YXZhaWwgPT0gMCkKKysjICBkZWZpbmUgRkFJTF9TVEFDS19GVUxMKCkgICAgICAoZmFpbF9zdGFjay5hdmFpbCA9PSBmYWlsX3N0YWNrLnNpemUpCisrIyBlbmRpZgorKworKworKy8qIERlZmluZSBtYWNyb3MgdG8gaW5pdGlhbGl6ZSBhbmQgZnJlZSB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBEbyBgcmV0dXJuIC0yJyBpZiB0aGUgYWxsb2MgZmFpbHMuICAqLworKworKyMgaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrIyAgZGVmaW5lIElOSVRfRkFJTF9TVEFDSygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgZmFpbF9zdGFjay5zdGFjayA9IChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkgKikJCVwKKysgICAgICBSRUdFWF9BTExPQ0FURV9TVEFDSyAoSU5JVF9GQUlMVVJFX0FMTE9DICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKTsgXAorKwkJCQkJCQkJCVwKKysgICAgaWYgKGZhaWxfc3RhY2suc3RhY2sgPT0gTlVMTCkJCQkJXAorKyAgICAgIHJldHVybiAtMjsJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgZmFpbF9zdGFjay5zaXplID0gSU5JVF9GQUlMVVJFX0FMTE9DOwkJCVwKKysgICAgZmFpbF9zdGFjay5hdmFpbCA9IDA7CQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgIGRlZmluZSBSRVNFVF9GQUlMX1NUQUNLKCkgIFJFR0VYX0ZSRUVfU1RBQ0sgKGZhaWxfc3RhY2suc3RhY2spCisrIyBlbHNlCisrIyAgZGVmaW5lIElOSVRfRkFJTF9TVEFDSygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgZmFpbF9zdGFjay5hdmFpbCA9IDA7CQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKyMgIGRlZmluZSBSRVNFVF9GQUlMX1NUQUNLKCkKKysjIGVuZGlmCisrCisrCisrLyogRG91YmxlIHRoZSBzaXplIG9mIEZBSUxfU1RBQ0ssIHVwIHRvIGFwcHJveGltYXRlbHkgYHJlX21heF9mYWlsdXJlcycgaXRlbXMuCisrCisrICAgUmV0dXJuIDEgaWYgc3VjY2VlZHMsIGFuZCAwIGlmIGVpdGhlciByYW4gb3V0IG9mIG1lbW9yeQorKyAgIGFsbG9jYXRpbmcgc3BhY2UgZm9yIGl0IG9yIGl0IHdhcyBhbHJlYWR5IHRvbyBsYXJnZS4KKysKKysgICBSRUdFWF9SRUFMTE9DQVRFX1NUQUNLIHJlcXVpcmVzIGBkZXN0aW5hdGlvbicgYmUgZGVjbGFyZWQuICAgKi8KKysKKysjIGRlZmluZSBET1VCTEVfRkFJTF9TVEFDSyhmYWlsX3N0YWNrKQkJCQkJXAorKyAgKChmYWlsX3N0YWNrKS5zaXplID4gKHVuc2lnbmVkKSAocmVfbWF4X2ZhaWx1cmVzICogTUFYX0ZBSUxVUkVfSVRFTVMpCVwKKysgICA/IDAJCQkJCQkJCQlcCisrICAgOiAoKGZhaWxfc3RhY2spLnN0YWNrID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKQkJCVwKKysgICAgICAgIFJFR0VYX1JFQUxMT0NBVEVfU1RBQ0sgKChmYWlsX3N0YWNrKS5zdGFjaywgCQkJXAorKyAgICAgICAgICAoZmFpbF9zdGFjaykuc2l6ZSAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSwJXAorKyAgICAgICAgICAoKGZhaWxfc3RhY2spLnNpemUgPDwgMSkgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpLFwKKysJCQkJCQkJCQlcCisrICAgICAgKGZhaWxfc3RhY2spLnN0YWNrID09IE5VTEwJCQkJCVwKKysgICAgICA/IDAJCQkJCQkJCVwKKysgICAgICA6ICgoZmFpbF9zdGFjaykuc2l6ZSA8PD0gMSwgCQkJCQlcCisrICAgICAgICAgMSkpKQorKworKworKy8qIFB1c2ggcG9pbnRlciBQT0lOVEVSIG9uIEZBSUxfU1RBQ0suCisrICAgUmV0dXJuIDEgaWYgd2FzIGFibGUgdG8gZG8gc28gYW5kIDAgaWYgcmFuIG91dCBvZiBtZW1vcnkgYWxsb2NhdGluZworKyAgIHNwYWNlIHRvIGRvIHNvLiAgKi8KKysjIGRlZmluZSBQVVNIX1BBVFRFUk5fT1AoUE9JTlRFUiwgRkFJTF9TVEFDSykJCQkJXAorKyAgKChGQUlMX1NUQUNLX0ZVTEwgKCkJCQkJCQkJXAorKyAgICAmJiAhRE9VQkxFX0ZBSUxfU1RBQ0sgKEZBSUxfU1RBQ0spKQkJCQkJXAorKyAgID8gMAkJCQkJCQkJCVwKKysgICA6ICgoRkFJTF9TVEFDSykuc3RhY2tbKEZBSUxfU1RBQ0spLmF2YWlsKytdLnBvaW50ZXIgPSBQT0lOVEVSLAlcCisrICAgICAgMSkpCisrCisrLyogUHVzaCBhIHBvaW50ZXIgdmFsdWUgb250byB0aGUgZmFpbHVyZSBzdGFjay4KKysgICBBc3N1bWVzIHRoZSB2YXJpYWJsZSBgZmFpbF9zdGFjaycuICBQcm9iYWJseSBzaG91bGQgb25seQorKyAgIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBgUFVTSF9GQUlMVVJFX1BPSU5UJy4gICovCisrIyBkZWZpbmUgUFVTSF9GQUlMVVJFX1BPSU5URVIoaXRlbSkJCQkJCVwKKysgIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCsrXS5wb2ludGVyID0gKFVDSEFSX1QgKikgKGl0ZW0pCisrCisrLyogVGhpcyBwdXNoZXMgYW4gaW50ZWdlci12YWx1ZWQgaXRlbSBvbnRvIHRoZSBmYWlsdXJlIHN0YWNrLgorKyAgIEFzc3VtZXMgdGhlIHZhcmlhYmxlIGBmYWlsX3N0YWNrJy4gIFByb2JhYmx5IHNob3VsZCBvbmx5CisrICAgYmUgY2FsbGVkIGZyb20gd2l0aGluIGBQVVNIX0ZBSUxVUkVfUE9JTlQnLiAgKi8KKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfSU5UKGl0ZW0pCQkJCQlcCisrICBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwrK10uaW50ZWdlciA9IChpdGVtKQorKworKy8qIFB1c2ggYSBmYWlsX3N0YWNrX2VsdF90IHZhbHVlIG9udG8gdGhlIGZhaWx1cmUgc3RhY2suCisrICAgQXNzdW1lcyB0aGUgdmFyaWFibGUgYGZhaWxfc3RhY2snLiAgUHJvYmFibHkgc2hvdWxkIG9ubHkKKysgICBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYFBVU0hfRkFJTFVSRV9QT0lOVCcuICAqLworKyMgZGVmaW5lIFBVU0hfRkFJTFVSRV9FTFQoaXRlbSkJCQkJCVwKKysgIGZhaWxfc3RhY2suc3RhY2tbZmFpbF9zdGFjay5hdmFpbCsrXSA9ICAoaXRlbSkKKysKKysvKiBUaGVzZSB0aHJlZSBQT1AuLi4gb3BlcmF0aW9ucyBjb21wbGVtZW50IHRoZSB0aHJlZSBQVVNILi4uIG9wZXJhdGlvbnMuCisrICAgQWxsIGFzc3VtZSB0aGF0IGBmYWlsX3N0YWNrJyBpcyBub25lbXB0eS4gICovCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfUE9JTlRFUigpIGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5wb2ludGVyCisrIyBkZWZpbmUgUE9QX0ZBSUxVUkVfSU5UKCkgZmFpbF9zdGFjay5zdGFja1stLWZhaWxfc3RhY2suYXZhaWxdLmludGVnZXIKKysjIGRlZmluZSBQT1BfRkFJTFVSRV9FTFQoKSBmYWlsX3N0YWNrLnN0YWNrWy0tZmFpbF9zdGFjay5hdmFpbF0KKysKKysvKiBVc2VkIHRvIG9taXQgcHVzaGluZyBmYWlsdXJlIHBvaW50IGlkJ3Mgd2hlbiB3ZSdyZSBub3QgZGVidWdnaW5nLiAgKi8KKysjIGlmZGVmIERFQlVHCisrIyAgZGVmaW5lIERFQlVHX1BVU0ggUFVTSF9GQUlMVVJFX0lOVAorKyMgIGRlZmluZSBERUJVR19QT1AoaXRlbV9hZGRyKSAqKGl0ZW1fYWRkcikgPSBQT1BfRkFJTFVSRV9JTlQgKCkKKysjIGVsc2UKKysjICBkZWZpbmUgREVCVUdfUFVTSChpdGVtKQorKyMgIGRlZmluZSBERUJVR19QT1AoaXRlbV9hZGRyKQorKyMgZW5kaWYKKysKKysKKysvKiBQdXNoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgd2Ugd2lsbCBuZWVkCisrICAgaWYgd2UgZXZlciBmYWlsIGJhY2sgdG8gaXQuCisrCisrICAgUmVxdWlyZXMgdmFyaWFibGVzIGZhaWxfc3RhY2ssIHJlZ3N0YXJ0LCByZWdlbmQsIHJlZ19pbmZvLCBhbmQKKysgICBudW1fcmVnc19wdXNoZWQgYmUgZGVjbGFyZWQuICBET1VCTEVfRkFJTF9TVEFDSyByZXF1aXJlcyBgZGVzdGluYXRpb24nCisrICAgYmUgZGVjbGFyZWQuCisrCisrICAgRG9lcyBgcmV0dXJuIEZBSUxVUkVfQ09ERScgaWYgcnVucyBvdXQgb2YgbWVtb3J5LiAgKi8KKysKKysjIGRlZmluZSBQVVNIX0ZBSUxVUkVfUE9JTlQocGF0dGVybl9wbGFjZSwgc3RyaW5nX3BsYWNlLCBmYWlsdXJlX2NvZGUpCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIGNoYXIgKmRlc3RpbmF0aW9uOwkJCQkJCQlcCisrICAgIC8qIE11c3QgYmUgaW50LCBzbyB3aGVuIHdlIGRvbid0IHNhdmUgYW55IHJlZ2lzdGVycywgdGhlIGFyaXRobWV0aWMJXAorKyAgICAgICBvZiAwICsgLTEgaXNuJ3QgZG9uZSBhcyB1bnNpZ25lZC4gICovCQkJCVwKKysgICAgLyogQ2FuJ3QgYmUgaW50LCBzaW5jZSB0aGVyZSBpcyBub3QgYSBzaHJlZCBvZiBhIGd1YXJhbnRlZSB0aGF0IGludAlcCisrICAgICAgIGlzIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSB2YWx1ZSBvZiBzb21ldGhpbmcgdG8gd2hpY2ggcG9pbnRlciBjYW4JXAorKyAgICAgICBiZSBhc3NpZ25lZCAqLwkJCQkJCQlcCisrICAgIGFjdGl2ZV9yZWdfdCB0aGlzX3JlZzsJCQkJCQlcCisrICAgIAkJCQkJCQkJCVwKKysgICAgREVCVUdfU1RBVEVNRU5UIChmYWlsdXJlX2lkKyspOwkJCQkJXAorKyAgICBERUJVR19TVEFURU1FTlQgKG5mYWlsdXJlX3BvaW50c19wdXNoZWQrKyk7CQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiXG5QVVNIX0ZBSUxVUkVfUE9JTlQgIyV1OlxuIiwgZmFpbHVyZV9pZCk7CQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgQmVmb3JlIHB1c2gsIG5leHQgYXZhaWw6ICVkXG4iLCAoZmFpbF9zdGFjaykuYXZhaWwpO1wKKysgICAgREVCVUdfUFJJTlQyICgiICAgICAgICAgICAgICAgICAgICAgc2l6ZTogJWRcbiIsIChmYWlsX3N0YWNrKS5zaXplKTtcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIHNsb3RzIG5lZWRlZDogJWxkXG4iLCBOVU1fRkFJTFVSRV9JVEVNUyk7CQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgICAgYXZhaWxhYmxlOiAlZFxuIiwgUkVNQUlOSU5HX0FWQUlMX1NMT1RTKTsJXAorKwkJCQkJCQkJCVwKKysgICAgLyogRW5zdXJlIHdlIGhhdmUgZW5vdWdoIHNwYWNlIGFsbG9jYXRlZCBmb3Igd2hhdCB3ZSB3aWxsIHB1c2guICAqLwlcCisrICAgIHdoaWxlIChSRU1BSU5JTkdfQVZBSUxfU0xPVFMgPCBOVU1fRkFJTFVSRV9JVEVNUykJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysgICAgICAgIGlmICghRE9VQkxFX0ZBSUxfU1RBQ0sgKGZhaWxfc3RhY2spKQkJCQlcCisrICAgICAgICAgIHJldHVybiBmYWlsdXJlX2NvZGU7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgICAgIERFQlVHX1BSSU5UMiAoIlxuICBEb3VibGVkIHN0YWNrOyBzaXplIG5vdzogJWRcbiIsCQlcCisrCQkgICAgICAgKGZhaWxfc3RhY2spLnNpemUpOwkJCQlcCisrICAgICAgICBERUJVR19QUklOVDIgKCIgIHNsb3RzIGF2YWlsYWJsZTogJWRcbiIsIFJFTUFJTklOR19BVkFJTF9TTE9UUyk7XAorKyAgICAgIH0JCQkJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICAvKiBQdXNoIHRoZSBpbmZvLCBzdGFydGluZyB3aXRoIHRoZSByZWdpc3RlcnMuICAqLwkJCVwKKysgICAgREVCVUdfUFJJTlQxICgiXG4iKTsJCQkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBpZiAoMSkJCQkJCQkJCVwKKysgICAgICBmb3IgKHRoaXNfcmVnID0gbG93ZXN0X2FjdGl2ZV9yZWc7IHRoaXNfcmVnIDw9IGhpZ2hlc3RfYWN0aXZlX3JlZzsgXAorKwkgICB0aGlzX3JlZysrKQkJCQkJCQlcCisrCXsJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgcmVnOiAlbHVcbiIsIHRoaXNfcmVnKTsJCVwKKysJICBERUJVR19TVEFURU1FTlQgKG51bV9yZWdzX3B1c2hlZCsrKTsJCQkJXAorKwkJCQkJCQkJCVwKKysJICBERUJVR19QUklOVDIgKCIgICAgc3RhcnQ6ICVwXG4iLCByZWdzdGFydFt0aGlzX3JlZ10pOwkJXAorKwkgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChyZWdzdGFydFt0aGlzX3JlZ10pOwkJCVwKKysJCQkJCQkJCQlcCisrCSAgREVCVUdfUFJJTlQyICgiICAgIGVuZDogJXBcbiIsIHJlZ2VuZFt0aGlzX3JlZ10pOwkJXAorKwkgIFBVU0hfRkFJTFVSRV9QT0lOVEVSIChyZWdlbmRbdGhpc19yZWddKTsJCQlcCisrCQkJCQkJCQkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiAgICBpbmZvOiAlcFxuICAgICAgIiwJCQkJXAorKwkJCXJlZ19pbmZvW3RoaXNfcmVnXS53b3JkLnBvaW50ZXIpOwkJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBtYXRjaF9udWxsPSVkIiwJCQkJXAorKwkJCVJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMiAoIiBhY3RpdmU9JWQiLCBJU19BQ1RJVkUgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQyICgiIG1hdGNoZWRfc29tZXRoaW5nPSVkIiwJCQlcCisrCQkJTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3RoaXNfcmVnXSkpOwlcCisrCSAgREVCVUdfUFJJTlQyICgiIGV2ZXJfbWF0Y2hlZD0lZCIsCQkJCVwKKysJCQlFVkVSX01BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1t0aGlzX3JlZ10pKTsJXAorKwkgIERFQlVHX1BSSU5UMSAoIlxuIik7CQkJCQkJXAorKwkgIFBVU0hfRkFJTFVSRV9FTFQgKHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkKTsJCQlcCisrCX0JCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICAgIERFQlVHX1BSSU5UMiAoIiAgUHVzaGluZyAgbG93IGFjdGl2ZSByZWc6ICVsZFxuIiwgbG93ZXN0X2FjdGl2ZV9yZWcpO1wKKysgICAgUFVTSF9GQUlMVVJFX0lOVCAobG93ZXN0X2FjdGl2ZV9yZWcpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgaGlnaCBhY3RpdmUgcmVnOiAlbGRcbiIsIGhpZ2hlc3RfYWN0aXZlX3JlZyk7XAorKyAgICBQVVNIX0ZBSUxVUkVfSU5UIChoaWdoZXN0X2FjdGl2ZV9yZWcpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgcGF0dGVybiAlcDpcbiIsIHBhdHRlcm5fcGxhY2UpOwkJXAorKyAgICBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwYXR0ZXJuX3BsYWNlLCBwZW5kKTsJCVwKKysgICAgUFVTSF9GQUlMVVJFX1BPSU5URVIgKHBhdHRlcm5fcGxhY2UpOwkJCQlcCisrCQkJCQkJCQkJXAorKyAgICBERUJVR19QUklOVDIgKCIgIFB1c2hpbmcgc3RyaW5nICVwOiBgIiwgc3RyaW5nX3BsYWNlKTsJCVwKKysgICAgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyAoc3RyaW5nX3BsYWNlLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgICBcCisrCQkJCSBzaXplMik7CQkJCVwKKysgICAgREVCVUdfUFJJTlQxICgiJ1xuIik7CQkJCQkJXAorKyAgICBQVVNIX0ZBSUxVUkVfUE9JTlRFUiAoc3RyaW5nX3BsYWNlKTsJCQkJXAorKwkJCQkJCQkJCVwKKysgICAgREVCVUdfUFJJTlQyICgiICBQdXNoaW5nIGZhaWx1cmUgaWQ6ICV1XG4iLCBmYWlsdXJlX2lkKTsJCVwKKysgICAgREVCVUdfUFVTSCAoZmFpbHVyZV9pZCk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysvKiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgcHVzaGVkIGFuZCBwb3BwZWQgb24gdGhlIHN0YWNrCisrICAgZm9yIGVhY2ggcmVnaXN0ZXIuICAqLworKyMgIGRlZmluZSBOVU1fUkVHX0lURU1TICAzCisrCisrLyogSW5kaXZpZHVhbCBpdGVtcyBhc2lkZSBmcm9tIHRoZSByZWdpc3RlcnMuICAqLworKyMgIGlmZGVmIERFQlVHCisrIyAgIGRlZmluZSBOVU1fTk9OUkVHX0lURU1TIDUgLyogSW5jbHVkZXMgZmFpbHVyZSBwb2ludCBpZC4gICovCisrIyAgZWxzZQorKyMgICBkZWZpbmUgTlVNX05PTlJFR19JVEVNUyA0CisrIyAgZW5kaWYKKysKKysvKiBXZSBwdXNoIGF0IG1vc3QgdGhpcyBtYW55IGl0ZW1zIG9uIHRoZSBzdGFjay4gICovCisrLyogV2UgdXNlZCB0byB1c2UgKG51bV9yZWdzIC0gMSksIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJzCisrICAgdGhpcyByZWdleHAgd2lsbCBzYXZlOyBidXQgdGhhdCB3YXMgY2hhbmdlZCB0byA1CisrICAgdG8gYXZvaWQgc3RhY2sgb3ZlcmZsb3cgZm9yIGEgcmVnZXhwIHdpdGggbG90cyBvZiBwYXJlbnMuICAqLworKyMgIGRlZmluZSBNQVhfRkFJTFVSRV9JVEVNUyAoNSAqIE5VTV9SRUdfSVRFTVMgKyBOVU1fTk9OUkVHX0lURU1TKQorKworKy8qIFdlIGFjdHVhbGx5IHB1c2ggdGhpcyBtYW55IGl0ZW1zLiAgKi8KKysjICBkZWZpbmUgTlVNX0ZBSUxVUkVfSVRFTVMJCQkJXAorKyAgKCgoMAkJCQkJCQlcCisrICAgICA/IDAgOiBoaWdoZXN0X2FjdGl2ZV9yZWcgLSBsb3dlc3RfYWN0aXZlX3JlZyArIDEpCVwKKysgICAgKiBOVU1fUkVHX0lURU1TKQkJCQkJXAorKyAgICsgTlVNX05PTlJFR19JVEVNUykKKysKKysvKiBIb3cgbWFueSBpdGVtcyBjYW4gc3RpbGwgYmUgYWRkZWQgdG8gdGhlIHN0YWNrIHdpdGhvdXQgb3ZlcmZsb3dpbmcgaXQuICAqLworKyMgIGRlZmluZSBSRU1BSU5JTkdfQVZBSUxfU0xPVFMgKChmYWlsX3N0YWNrKS5zaXplIC0gKGZhaWxfc3RhY2spLmF2YWlsKQorKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKworKy8qIFBvcHMgd2hhdCBQVVNIX0ZBSUxfU1RBQ0sgcHVzaGVzLgorKworKyAgIFdlIHJlc3RvcmUgaW50byB0aGUgcGFyYW1ldGVycywgYWxsIG9mIHdoaWNoIHNob3VsZCBiZSBsdmFsdWVzOgorKyAgICAgU1RSIC0tIHRoZSBzYXZlZCBkYXRhIHBvc2l0aW9uLgorKyAgICAgUEFUIC0tIHRoZSBzYXZlZCBwYXR0ZXJuIHBvc2l0aW9uLgorKyAgICAgTE9XX1JFRywgSElHSF9SRUcgLS0gdGhlIGhpZ2hlc3QgYW5kIGxvd2VzdCBhY3RpdmUgcmVnaXN0ZXJzLgorKyAgICAgUkVHU1RBUlQsIFJFR0VORCAtLSBhcnJheXMgb2Ygc3RyaW5nIHBvc2l0aW9ucy4KKysgICAgIFJFR19JTkZPIC0tIGFycmF5IG9mIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc3ViZXhwcmVzc2lvbi4KKysKKysgICBBbHNvIGFzc3VtZXMgdGhlIHZhcmlhYmxlcyBgZmFpbF9zdGFjaycgYW5kIChpZiBkZWJ1Z2dpbmcpLCBgYnVmcCcsCisrICAgYHBlbmQnLCBgc3RyaW5nMScsIGBzaXplMScsIGBzdHJpbmcyJywgYW5kIGBzaXplMicuICAqLworKyMgZGVmaW5lIFBPUF9GQUlMVVJFX1BPSU5UKHN0ciwgcGF0LCBsb3dfcmVnLCBoaWdoX3JlZywgcmVnc3RhcnQsIHJlZ2VuZCwgcmVnX2luZm8pXAorK3sJCQkJCQkJCQlcCisrICBERUJVR19TVEFURU1FTlQgKHVuc2lnbmVkIGZhaWx1cmVfaWQ7KQkJCQlcCisrICBhY3RpdmVfcmVnX3QgdGhpc19yZWc7CQkJCQkJXAorKyAgY29uc3QgVUNIQVJfVCAqc3RyaW5nX3RlbXA7CQkJCQkJXAorKwkJCQkJCQkJCVwKKysgIGFzc2VydCAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpOwkJCQkJXAorKwkJCQkJCQkJCVwKKysgIC8qIFJlbW92ZSBmYWlsdXJlIHBvaW50cyBhbmQgcG9pbnQgdG8gaG93IG1hbnkgcmVncyBwdXNoZWQuICAqLwlcCisrICBERUJVR19QUklOVDEgKCJQT1BfRkFJTFVSRV9QT0lOVDpcbiIpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIEJlZm9yZSBwb3AsIG5leHQgYXZhaWw6ICVkXG4iLCBmYWlsX3N0YWNrLmF2YWlsKTsJXAorKyAgREVCVUdfUFJJTlQyICgiICAgICAgICAgICAgICAgICAgICBzaXplOiAlZFxuIiwgZmFpbF9zdGFjay5zaXplKTsJXAorKwkJCQkJCQkJCVwKKysgIGFzc2VydCAoZmFpbF9zdGFjay5hdmFpbCA+PSBOVU1fTk9OUkVHX0lURU1TKTsJCQlcCisrCQkJCQkJCQkJXAorKyAgREVCVUdfUE9QICgmZmFpbHVyZV9pZCk7CQkJCQkJXAorKyAgREVCVUdfUFJJTlQyICgiICBQb3BwaW5nIGZhaWx1cmUgaWQ6ICV1XG4iLCBmYWlsdXJlX2lkKTsJCVwKKysJCQkJCQkJCQlcCisrICAvKiBJZiB0aGUgc2F2ZWQgc3RyaW5nIGxvY2F0aW9uIGlzIE5VTEwsIGl0IGNhbWUgZnJvbSBhbgkJXAorKyAgICAgb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wIG9wY29kZSwgYW5kIHdlIHdhbnQgdG8gdGhyb3cgYXdheSB0aGUJXAorKyAgICAgc2F2ZWQgTlVMTCwgdGh1cyByZXRhaW5pbmcgb3VyIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZy4gICovCVwKKysgIHN0cmluZ190ZW1wID0gUE9QX0ZBSUxVUkVfUE9JTlRFUiAoKTsJCQkJCVwKKysgIGlmIChzdHJpbmdfdGVtcCAhPSBOVUxMKQkJCQkJCVwKKysgICAgc3RyID0gKGNvbnN0IENIQVJfVCAqKSBzdHJpbmdfdGVtcDsJCQkJCVwKKysJCQkJCQkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgc3RyaW5nICVwOiBgIiwgc3RyKTsJCQkJXAorKyAgREVCVUdfUFJJTlRfRE9VQkxFX1NUUklORyAoc3RyLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIpOwlcCisrICBERUJVR19QUklOVDEgKCInXG4iKTsJCQkJCQkJXAorKwkJCQkJCQkJCVwKKysgIHBhdCA9IChVQ0hBUl9UICopIFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CQkJCVwKKysgIERFQlVHX1BSSU5UMiAoIiAgUG9wcGluZyBwYXR0ZXJuICVwOlxuIiwgcGF0KTsJCQlcCisrICBERUJVR19QUklOVF9DT01QSUxFRF9QQVRURVJOIChidWZwLCBwYXQsIHBlbmQpOwkJCVwKKysJCQkJCQkJCQlcCisrICAvKiBSZXN0b3JlIHJlZ2lzdGVyIGluZm8uICAqLwkJCQkJCVwKKysgIGhpZ2hfcmVnID0gKGFjdGl2ZV9yZWdfdCkgUE9QX0ZBSUxVUkVfSU5UICgpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgaGlnaCBhY3RpdmUgcmVnOiAlbGRcbiIsIGhpZ2hfcmVnKTsJCVwKKysJCQkJCQkJCQlcCisrICBsb3dfcmVnID0gKGFjdGl2ZV9yZWdfdCkgUE9QX0ZBSUxVUkVfSU5UICgpOwkJCQlcCisrICBERUJVR19QUklOVDIgKCIgIFBvcHBpbmcgIGxvdyBhY3RpdmUgcmVnOiAlbGRcbiIsIGxvd19yZWcpOwkJXAorKwkJCQkJCQkJCVwKKysgIGlmICgxKQkJCQkJCQkJXAorKyAgICBmb3IgKHRoaXNfcmVnID0gaGlnaF9yZWc7IHRoaXNfcmVnID49IGxvd19yZWc7IHRoaXNfcmVnLS0pCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysJREVCVUdfUFJJTlQyICgiICAgIFBvcHBpbmcgcmVnOiAlbGRcbiIsIHRoaXNfcmVnKTsJCVwKKysJCQkJCQkJCQlcCisrCXJlZ19pbmZvW3RoaXNfcmVnXS53b3JkID0gUE9QX0ZBSUxVUkVfRUxUICgpOwkJCVwKKysJREVCVUdfUFJJTlQyICgiICAgICAgaW5mbzogJXBcbiIsCQkJCVwKKysJCSAgICAgIHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkLnBvaW50ZXIpOwkJCVwKKysJCQkJCQkJCQlcCisrCXJlZ2VuZFt0aGlzX3JlZ10gPSAoY29uc3QgQ0hBUl9UICopIFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CVwKKysJREVCVUdfUFJJTlQyICgiICAgICAgZW5kOiAlcFxuIiwgcmVnZW5kW3RoaXNfcmVnXSk7CQlcCisrCQkJCQkJCQkJXAorKwlyZWdzdGFydFt0aGlzX3JlZ10gPSAoY29uc3QgQ0hBUl9UICopIFBPUF9GQUlMVVJFX1BPSU5URVIgKCk7CVwKKysJREVCVUdfUFJJTlQyICgiICAgICAgc3RhcnQ6ICVwXG4iLCByZWdzdGFydFt0aGlzX3JlZ10pOwkJXAorKyAgICAgIH0JCQkJCQkJCQlcCisrICBlbHNlCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGZvciAodGhpc19yZWcgPSBoaWdoZXN0X2FjdGl2ZV9yZWc7IHRoaXNfcmVnID4gaGlnaF9yZWc7IHRoaXNfcmVnLS0pIFwKKysJewkJCQkJCQkJXAorKwkgIHJlZ19pbmZvW3RoaXNfcmVnXS53b3JkLmludGVnZXIgPSAwOwkJCQlcCisrCSAgcmVnZW5kW3RoaXNfcmVnXSA9IDA7CQkJCQkJXAorKwkgIHJlZ3N0YXJ0W3RoaXNfcmVnXSA9IDA7CQkJCQlcCisrCX0JCQkJCQkJCVwKKysgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSBoaWdoX3JlZzsJCQkJCVwKKysgICAgfQkJCQkJCQkJCVwKKysJCQkJCQkJCQlcCisrICBzZXRfcmVnc19tYXRjaGVkX2RvbmUgPSAwOwkJCQkJCVwKKysgIERFQlVHX1NUQVRFTUVOVCAobmZhaWx1cmVfcG9pbnRzX3BvcHBlZCsrKTsJCQkJXAorK30gLyogUE9QX0ZBSUxVUkVfUE9JTlQgKi8KKysMCisrLyogU3RydWN0dXJlIGZvciBwZXItcmVnaXN0ZXIgKGEuay5hLiBwZXItZ3JvdXApIGluZm9ybWF0aW9uLgorKyAgIE90aGVyIHJlZ2lzdGVyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZQorKyAgIHN0YXJ0aW5nIGFuZCBlbmRpbmcgcG9zaXRpb25zICh3aGljaCBhcmUgYWRkcmVzc2VzKSwgYW5kIHRoZSBsaXN0IG9mCisrICAgaW5uZXIgZ3JvdXBzICh3aGljaCBpcyBhIGJpdHMgbGlzdCkgYXJlIG1haW50YWluZWQgaW4gc2VwYXJhdGUKKysgICB2YXJpYWJsZXMuCisrCisrICAgV2UgYXJlIG1ha2luZyBhIChzdHJpY3RseSBzcGVha2luZykgbm9ucG9ydGFibGUgYXNzdW1wdGlvbiBoZXJlOiB0aGF0CisrICAgdGhlIGNvbXBpbGVyIHdpbGwgcGFjayBvdXIgYml0IGZpZWxkcyBpbnRvIHNvbWV0aGluZyB0aGF0IGZpdHMgaW50bworKyAgIHRoZSB0eXBlIG9mIGB3b3JkJywgaS5lLiwgaXMgc29tZXRoaW5nIHRoYXQgZml0cyBpbnRvIG9uZSBpdGVtIG9uIHRoZQorKyAgIGZhaWx1cmUgc3RhY2suICAqLworKworKworKy8qIERlY2xhcmF0aW9ucyBhbmQgbWFjcm9zIGZvciByZV9tYXRjaF8yLiAgKi8KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpIHdvcmQ7CisrICBzdHJ1Y3QKKysgIHsKKysgICAgICAvKiBUaGlzIGZpZWxkIGlzIG9uZSBpZiB0aGlzIGdyb3VwIGNhbiBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLAorKyAgICAgICAgIHplcm8gaWYgbm90LiAgSWYgbm90IHlldCBkZXRlcm1pbmVkLCAgYE1BVENIX05VTExfVU5TRVRfVkFMVUUnLiAgKi8KKysjIGRlZmluZSBNQVRDSF9OVUxMX1VOU0VUX1ZBTFVFIDMKKysgICAgdW5zaWduZWQgbWF0Y2hfbnVsbF9zdHJpbmdfcCA6IDI7CisrICAgIHVuc2lnbmVkIGlzX2FjdGl2ZSA6IDE7CisrICAgIHVuc2lnbmVkIG1hdGNoZWRfc29tZXRoaW5nIDogMTsKKysgICAgdW5zaWduZWQgZXZlcl9tYXRjaGVkX3NvbWV0aGluZyA6IDE7CisrICB9IGJpdHM7CisrfSBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKTsKKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBkZWZpbmUgUkVHX01BVENIX05VTExfU1RSSU5HX1AoUikgICgoUikuYml0cy5tYXRjaF9udWxsX3N0cmluZ19wKQorKyMgIGRlZmluZSBJU19BQ1RJVkUoUikgICgoUikuYml0cy5pc19hY3RpdmUpCisrIyAgZGVmaW5lIE1BVENIRURfU09NRVRISU5HKFIpICAoKFIpLmJpdHMubWF0Y2hlZF9zb21ldGhpbmcpCisrIyAgZGVmaW5lIEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcoUikgICgoUikuYml0cy5ldmVyX21hdGNoZWRfc29tZXRoaW5nKQorKworKworKy8qIENhbGwgdGhpcyB3aGVuIGhhdmUgbWF0Y2hlZCBhIHJlYWwgY2hhcmFjdGVyOyBpdCBzZXRzIGBtYXRjaGVkJyBmbGFncworKyAgIGZvciB0aGUgc3ViZXhwcmVzc2lvbnMgd2hpY2ggd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUuICBBbHNvIHJlY29yZHMKKysgICB0aGF0IHRob3NlIHN1YmV4cHJzIGhhdmUgbWF0Y2hlZC4gICovCisrIyAgZGVmaW5lIFNFVF9SRUdTX01BVENIRUQoKQkJCQkJCVwKKysgIGRvCQkJCQkJCQkJXAorKyAgICB7CQkJCQkJCQkJXAorKyAgICAgIGlmICghc2V0X3JlZ3NfbWF0Y2hlZF9kb25lKQkJCQkJXAorKwl7CQkJCQkJCQlcCisrCSAgYWN0aXZlX3JlZ190IHI7CQkJCQkJXAorKwkgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDE7CQkJCQlcCisrCSAgZm9yIChyID0gbG93ZXN0X2FjdGl2ZV9yZWc7IHIgPD0gaGlnaGVzdF9hY3RpdmVfcmVnOyByKyspCVwKKysJICAgIHsJCQkJCQkJCVwKKysJICAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3JdKQkJCQlcCisrCQk9IEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW3JdKQkJCVwKKysJCT0gMTsJCQkJCQkJXAorKwkgICAgfQkJCQkJCQkJXAorKwl9CQkJCQkJCQlcCisrICAgIH0JCQkJCQkJCQlcCisrICB3aGlsZSAoMCkKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBSZWdpc3RlcnMgYXJlIHNldCB0byBhIHNlbnRpbmVsIHdoZW4gdGhleSBoYXZlbid0IHlldCBtYXRjaGVkLiAgKi8KKytzdGF0aWMgQ0hBUl9UIFBSRUZJWChyZWdfdW5zZXRfZHVtbXkpOworKyMgZGVmaW5lIFJFR19VTlNFVF9WQUxVRSAoJlBSRUZJWChyZWdfdW5zZXRfZHVtbXkpKQorKyMgZGVmaW5lIFJFR19VTlNFVChlKSAoKGUpID09IFJFR19VTlNFVF9WQUxVRSkKKysKKysvKiBTdWJyb3V0aW5lIGRlY2xhcmF0aW9ucyBhbmQgbWFjcm9zIGZvciByZWdleF9jb21waWxlLiAgKi8KKytzdGF0aWMgdm9pZCBQUkVGSVgoc3RvcmVfb3AxKSAocmVfb3Bjb2RlX3Qgb3AsIFVDSEFSX1QgKmxvYywgaW50IGFyZyk7Cisrc3RhdGljIHZvaWQgUFJFRklYKHN0b3JlX29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcxLCBpbnQgYXJnMik7Cisrc3RhdGljIHZvaWQgUFJFRklYKGluc2VydF9vcDEpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZywgVUNIQVJfVCAqZW5kKTsKKytzdGF0aWMgdm9pZCBQUkVGSVgoaW5zZXJ0X29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnMSwgaW50IGFyZzIsIFVDSEFSX1QgKmVuZCk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGF0X2JlZ2xpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnBhdHRlcm4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKytzdGF0aWMgYm9vbGVhbiBQUkVGSVgoYXRfZW5kbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENIQVJfVCAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpOworKyMgaWZkZWYgV0NIQVIKKytzdGF0aWMgcmVnX2VycmNvZGVfdCB3Y3NfY29tcGlsZV9yYW5nZSAoQ0hBUl9UIHJhbmdlX3N0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKipwX3B0ciwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0hBUl9UICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIQVJfVCAqY2hhcl9zZXQpOworK3N0YXRpYyB2b2lkIGluc2VydF9zcGFjZSAoaW50IG51bSwgQ0hBUl9UICpsb2MsIENIQVJfVCAqZW5kKTsKKysjIGVsc2UgLyogQllURSAqLworK3N0YXRpYyByZWdfZXJyY29kZV90IGJ5dGVfY29tcGlsZV9yYW5nZSAodW5zaWduZWQgaW50IHJhbmdlX3N0YXJ0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpiKTsKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrLyogRmV0Y2ggdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSB1bmNvbXBpbGVkIHBhdHRlcm4tLS10cmFuc2xhdGluZyBpdAorKyAgIGlmIG5lY2Vzc2FyeS4gIEFsc28gY2FzdCBmcm9tIGEgc2lnbmVkIGNoYXJhY3RlciBpbiB0aGUgY29uc3RhbnQKKysgICBzdHJpbmcgcGFzc2VkIHRvIHVzIGJ5IHRoZSB1c2VyIHRvIGFuIHVuc2lnbmVkIGNoYXIgdGhhdCB3ZSBjYW4gdXNlCisrICAgYXMgYW4gYXJyYXkgaW5kZXggKGluLCBlLmcuLCBgdHJhbnNsYXRlJykuICAqLworKy8qIGlmZGVmIE1CU19TVVBQT1JULCB3ZSB0cmFuc2xhdGUgb25seSBpZiBjaGFyYWN0ZXIgPD0gMHhmZiwKKysgICBiZWNhdXNlIGl0IGlzIGltcG9zc2libGUgdG8gYWxsb2NhdGUgNEdCIGFycmF5IGZvciBzb21lIGVuY29kaW5ncworKyAgIHdoaWNoIGhhdmUgNCBieXRlIGNoYXJhY3Rlcl9zZXQgbGlrZSBVQ1M0LiAgKi8KKysjIGlmbmRlZiBQQVRGRVRDSAorKyMgIGlmZGVmIFdDSEFSCisrIyAgIGRlZmluZSBQQVRGRVRDSChjKQkJCQkJCQlcCisrICBkbyB7aWYgKHAgPT0gcGVuZCkgcmV0dXJuIFJFR19FRU5EOwkJCQkJXAorKyAgICBjID0gKFVDSEFSX1QpICpwKys7CQkJCQkJCVwKKysgICAgaWYgKHRyYW5zbGF0ZSAmJiAoYyA8PSAweGZmKSkgYyA9IChVQ0hBUl9UKSB0cmFuc2xhdGVbY107CQlcCisrICB9IHdoaWxlICgwKQorKyMgIGVsc2UgLyogQllURSAqLworKyMgICBkZWZpbmUgUEFURkVUQ0goYykJCQkJCQkJXAorKyAgZG8ge2lmIChwID09IHBlbmQpIHJldHVybiBSRUdfRUVORDsJCQkJCVwKKysgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcCsrOwkJCQkJCVwKKysgICAgaWYgKHRyYW5zbGF0ZSkgYyA9ICh1bnNpZ25lZCBjaGFyKSB0cmFuc2xhdGVbY107CQkJXAorKyAgfSB3aGlsZSAoMCkKKysjICBlbmRpZiAvKiBXQ0hBUiAqLworKyMgZW5kaWYKKysKKysvKiBGZXRjaCB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybiwgd2l0aCBubworKyAgIHRyYW5zbGF0aW9uLiAgKi8KKysjIGRlZmluZSBQQVRGRVRDSF9SQVcoYykJCQkJCQlcCisrICBkbyB7aWYgKHAgPT0gcGVuZCkgcmV0dXJuIFJFR19FRU5EOwkJCQkJXAorKyAgICBjID0gKFVDSEFSX1QpICpwKys7IAkgICAgICAgCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKy8qIEdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuLiAgKi8KKysjIGRlZmluZSBQQVRVTkZFVENIIHAtLQorKworKworKy8qIElmIGB0cmFuc2xhdGUnIGlzIG5vbi1udWxsLCByZXR1cm4gdHJhbnNsYXRlW0RdLCBlbHNlIGp1c3QgRC4gIFdlCisrICAgY2FzdCB0aGUgc3Vic2NyaXB0IHRvIHRyYW5zbGF0ZSBiZWNhdXNlIHNvbWUgZGF0YSBpcyBkZWNsYXJlZCBhcworKyAgIGBjaGFyIConLCB0byBhdm9pZCB3YXJuaW5ncyB3aGVuIGEgc3RyaW5nIGNvbnN0YW50IGlzIHBhc3NlZC4gIEJ1dAorKyAgIHdoZW4gd2UgdXNlIGEgY2hhcmFjdGVyIGFzIGEgc3Vic2NyaXB0IHdlIG11c3QgbWFrZSBpdCB1bnNpZ25lZC4gICovCisrLyogaWZkZWYgTUJTX1NVUFBPUlQsIHdlIHRyYW5zbGF0ZSBvbmx5IGlmIGNoYXJhY3RlciA8PSAweGZmLAorKyAgIGJlY2F1c2UgaXQgaXMgaW1wb3NzaWJsZSB0byBhbGxvY2F0ZSA0R0IgYXJyYXkgZm9yIHNvbWUgZW5jb2RpbmdzCisrICAgd2hpY2ggaGF2ZSA0IGJ5dGUgY2hhcmFjdGVyX3NldCBsaWtlIFVDUzQuICAqLworKworKyMgaWZuZGVmIFRSQU5TTEFURQorKyMgIGlmZGVmIFdDSEFSCisrIyAgIGRlZmluZSBUUkFOU0xBVEUoZCkgXAorKyAgKCh0cmFuc2xhdGUgJiYgKChVQ0hBUl9UKSAoZCkpIDw9IDB4ZmYpIFwKKysgICA/IChjaGFyKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpIChkKV0gOiAoZCkpCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICAgZGVmaW5lIFRSQU5TTEFURShkKSBcCisrICAodHJhbnNsYXRlID8gKGNoYXIpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKGQpXSA6IChjaGFyKSAoZCkpCisrIyAgZW5kaWYgLyogV0NIQVIgKi8KKysjIGVuZGlmCisrCisrCisrLyogTWFjcm9zIGZvciBvdXRwdXR0aW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuIGludG8gYGJ1ZmZlcicuICAqLworKworKy8qIElmIHRoZSBidWZmZXIgaXNuJ3QgYWxsb2NhdGVkIHdoZW4gaXQgY29tZXMgaW4sIHVzZSB0aGlzLiAgKi8KKysjIGRlZmluZSBJTklUX0JVRl9TSVpFICAoMzIgKiBzaXplb2YoVUNIQVJfVCkpCisrCisrLyogTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgTiBtb3JlIGJ5dGVzIG9mIHNwYWNlIGluIGJ1ZmZlci4gICovCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBHRVRfQlVGRkVSX1NQQUNFKG4pCQkJCQkJXAorKyAgICB3aGlsZSAoKCh1bnNpZ25lZCBsb25nKWIgLSAodW5zaWduZWQgbG9uZylDT01QSUxFRF9CVUZGRVJfVkFSCVwKKysgICAgICAgICAgICArIChuKSpzaXplb2YoQ0hBUl9UKSkgPiBidWZwLT5hbGxvY2F0ZWQpCQkJXAorKyAgICAgIEVYVEVORF9CVUZGRVIgKCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBHRVRfQlVGRkVSX1NQQUNFKG4pCQkJCQkJXAorKyAgICB3aGlsZSAoKHVuc2lnbmVkIGxvbmcpIChiIC0gYnVmcC0+YnVmZmVyICsgKG4pKSA+IGJ1ZnAtPmFsbG9jYXRlZCkJXAorKyAgICAgIEVYVEVORF9CVUZGRVIgKCkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrLyogTWFrZSBzdXJlIHdlIGhhdmUgb25lIG1vcmUgYnl0ZSBvZiBidWZmZXIgc3BhY2UgYW5kIHRoZW4gYWRkIEMgdG8gaXQuICAqLworKyMgZGVmaW5lIEJVRl9QVVNIKGMpCQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEpOwkJCQkJCVwKKysgICAgKmIrKyA9IChVQ0hBUl9UKSAoYyk7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysKKysvKiBFbnN1cmUgd2UgaGF2ZSB0d28gbW9yZSBieXRlcyBvZiBidWZmZXIgc3BhY2UgYW5kIHRoZW4gYXBwZW5kIEMxIGFuZCBDMi4gICovCisrIyBkZWZpbmUgQlVGX1BVU0hfMihjMSwgYzIpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgR0VUX0JVRkZFUl9TUEFDRSAoMik7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMSk7CQkJCQkJXAorKyAgICAqYisrID0gKFVDSEFSX1QpIChjMik7CQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysKKysKKysvKiBBcyB3aXRoIEJVRl9QVVNIXzIsIGV4Y2VwdCBmb3IgdGhyZWUgYnl0ZXMuICAqLworKyMgZGVmaW5lIEJVRl9QVVNIXzMoYzEsIGMyLCBjMykJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBHRVRfQlVGRkVSX1NQQUNFICgzKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMxKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMyKTsJCQkJCQlcCisrICAgICpiKysgPSAoVUNIQVJfVCkgKGMzKTsJCQkJCQlcCisrICB9IHdoaWxlICgwKQorKworKy8qIFN0b3JlIGEganVtcCB3aXRoIG9wY29kZSBPUCBhdCBMT0MgdG8gbG9jYXRpb24gVE8uICBXZSBzdG9yZSBhCisrICAgcmVsYXRpdmUgYWRkcmVzcyBvZmZzZXQgYnkgdGhlIHRocmVlIGJ5dGVzIHRoZSBqdW1wIGl0c2VsZiBvY2N1cGllcy4gICovCisrIyBkZWZpbmUgU1RPUkVfSlVNUChvcCwgbG9jLCB0bykgXAorKyBQUkVGSVgoc3RvcmVfb3AxKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpKQorKworKy8qIExpa2V3aXNlLCBmb3IgYSB0d28tYXJndW1lbnQganVtcC4gICovCisrIyBkZWZpbmUgU1RPUkVfSlVNUDIob3AsIGxvYywgdG8sIGFyZykgXAorKyAgUFJFRklYKHN0b3JlX29wMikgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSwgYXJnKQorKworKy8qIExpa2UgYFNUT1JFX0pVTVAnLCBidXQgZm9yIGluc2VydGluZy4gIEFzc3VtZSBgYicgaXMgdGhlIGJ1ZmZlciBlbmQuICAqLworKyMgZGVmaW5lIElOU0VSVF9KVU1QKG9wLCBsb2MsIHRvKSBcCisrICBQUkVGSVgoaW5zZXJ0X29wMSkgKG9wLCBsb2MsIChpbnQpICgodG8pIC0gKGxvYykgLSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKSwgYikKKysKKysvKiBMaWtlIGBTVE9SRV9KVU1QMicsIGJ1dCBmb3IgaW5zZXJ0aW5nLiAgQXNzdW1lIGBiJyBpcyB0aGUgYnVmZmVyIGVuZC4gICovCisrIyBkZWZpbmUgSU5TRVJUX0pVTVAyKG9wLCBsb2MsIHRvLCBhcmcpIFwKKysgIFBSRUZJWChpbnNlcnRfb3AyKSAob3AsIGxvYywgKGludCkgKCh0bykgLSAobG9jKSAtICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSkpLFwKKysJICAgICAgYXJnLCBiKQorKworKy8qIFRoaXMgaXMgbm90IGFuIGFyYml0cmFyeSBsaW1pdDogdGhlIGFyZ3VtZW50cyB3aGljaCByZXByZXNlbnQgb2Zmc2V0cworKyAgIGludG8gdGhlIHBhdHRlcm4gYXJlIHR3byBieXRlcyBsb25nLiAgU28gaWYgMl4xNiBieXRlcyB0dXJucyBvdXQgdG8KKysgICBiZSB0b28gc21hbGwsIG1hbnkgdGhpbmdzIHdvdWxkIGhhdmUgdG8gY2hhbmdlLiAgKi8KKysvKiBBbnkgb3RoZXIgY29tcGlsZXIgd2hpY2gsIGxpa2UgTVNDLCBoYXMgYWxsb2NhdGlvbiBsaW1pdCBiZWxvdyAyXjE2CisrICAgYnl0ZXMgd2lsbCBoYXZlIHRvIHVzZSBhcHByb2FjaCBzaW1pbGFyIHRvIHdoYXQgd2FzIGRvbmUgYmVsb3cgZm9yCisrICAgTVNDIGFuZCBkcm9wIE1BWF9CVUZfU0laRSBhIGJpdC4gIE90aGVyd2lzZSB5b3UgbWF5IGVuZCB1cAorKyAgIHJlYWxsb2NhdGluZyB0byAwIGJ5dGVzLiAgU3VjaCB0aGluZyBpcyBub3QgZ29pbmcgdG8gd29yayB0b28gd2VsbC4KKysgICBZb3UgaGF2ZSBiZWVuIHdhcm5lZCEhICAqLworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGlmIGRlZmluZWQgX01TQ19WRVIgICYmICFkZWZpbmVkIFdJTjMyCisrLyogTWljcm9zb2Z0IEMgMTYtYml0IHZlcnNpb25zIGxpbWl0IG1hbGxvYyB0byBhcHByb3ggNjU1MTIgYnl0ZXMuCisrICAgVGhlIFJFQUxMT0MgZGVmaW5lIGVsaW1pbmF0ZXMgYSBmbHVycnkgb2YgY29udmVyc2lvbiB3YXJuaW5ncywKKysgICBidXQgaXMgbm90IHJlcXVpcmVkLiAqLworKyMgICBkZWZpbmUgTUFYX0JVRl9TSVpFICA2NTUwMEwKKysjICAgZGVmaW5lIFJFQUxMT0MocCxzKSByZWFsbG9jICgocCksIChzaXplX3QpIChzKSkKKysjICBlbHNlCisrIyAgIGRlZmluZSBNQVhfQlVGX1NJWkUgKDFMIDw8IDE2KQorKyMgICBkZWZpbmUgUkVBTExPQyhwLHMpIHJlYWxsb2MgKChwKSwgKHMpKQorKyMgIGVuZGlmCisrCisrLyogRXh0ZW5kIHRoZSBidWZmZXIgYnkgdHdpY2UgaXRzIGN1cnJlbnQgc2l6ZSB2aWEgcmVhbGxvYyBhbmQKKysgICByZXNldCB0aGUgcG9pbnRlcnMgdGhhdCBwb2ludGVkIGludG8gdGhlIG9sZCBibG9jayB0byBwb2ludCB0byB0aGUKKysgICBjb3JyZWN0IHBsYWNlcyBpbiB0aGUgbmV3IG9uZS4gIElmIGV4dGVuZGluZyB0aGUgYnVmZmVyIHJlc3VsdHMgaW4gaXQKKysgICBiZWluZyBsYXJnZXIgdGhhbiBNQVhfQlVGX1NJWkUsIHRoZW4gZmxhZyBtZW1vcnkgZXhoYXVzdGVkLiAgKi8KKysjICBpZm5kZWYgX19CT1VOREVEX1BPSU5URVJTX18KKysjICAgIGRlZmluZSBfX0JPVU5ERURfUE9JTlRFUlNfXyAwCisrIyAgZW5kaWYKKysjICBpZiBfX0JPVU5ERURfUE9JTlRFUlNfXworKyMgICBkZWZpbmUgU0VUX0hJR0hfQk9VTkQoUCkgKF9fcHRyaGlnaCAoUCkgPSBfX3B0cmxvdyAoUCkgKyBidWZwLT5hbGxvY2F0ZWQpCisrIyAgIGRlZmluZSBNT1ZFX0JVRkZFUl9QT0lOVEVSKFApIFwKKysgIChfX3B0cmxvdyAoUCkgKz0gaW5jciwgU0VUX0hJR0hfQk9VTkQgKFApLCBfX3B0cnZhbHVlIChQKSArPSBpbmNyKQorKyMgICBkZWZpbmUgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQJXAorKyAgZWxzZQkJCQkJCVwKKysgICAgewkJCQkJCVwKKysgICAgICBTRVRfSElHSF9CT1VORCAoYik7CQkJXAorKyAgICAgIFNFVF9ISUdIX0JPVU5EIChiZWdhbHQpOwkJCVwKKysgICAgICBpZiAoZml4dXBfYWx0X2p1bXApCQkJXAorKwlTRVRfSElHSF9CT1VORCAoZml4dXBfYWx0X2p1bXApOwlcCisrICAgICAgaWYgKGxhc3RzdGFydCkJCQkJXAorKwlTRVRfSElHSF9CT1VORCAobGFzdHN0YXJ0KTsJCVwKKysgICAgICBpZiAocGVuZGluZ19leGFjdCkJCQlcCisrCVNFVF9ISUdIX0JPVU5EIChwZW5kaW5nX2V4YWN0KTsJCVwKKysgICAgfQorKyMgIGVsc2UKKysjICAgZGVmaW5lIE1PVkVfQlVGRkVSX1BPSU5URVIoUCkgKFApICs9IGluY3IKKysjICAgZGVmaW5lIEVMU0VfRVhURU5EX0JVRkZFUl9ISUdIX0JPVU5ECisrIyAgZW5kaWYKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEVYVEVORF9CVUZGRVIoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFVDSEFSX1QgKm9sZF9idWZmZXIgPSBDT01QSUxFRF9CVUZGRVJfVkFSOwkJCQlcCisrICAgIGludCB3Y2hhcl9jb3VudDsJCQkJCQkJXAorKyAgICBpZiAoYnVmcC0+YWxsb2NhdGVkICsgc2l6ZW9mKFVDSEFSX1QpID4gTUFYX0JVRl9TSVpFKQkJXAorKyAgICAgIHJldHVybiBSRUdfRVNJWkU7CQkJCQkJCVwKKysgICAgYnVmcC0+YWxsb2NhdGVkIDw8PSAxOwkJCQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA+IE1BWF9CVUZfU0laRSkJCQkJCVwKKysgICAgICBidWZwLT5hbGxvY2F0ZWQgPSBNQVhfQlVGX1NJWkU7CQkJCQlcCisrICAgIC8qIEhvdyBtYW55IGNoYXJhY3RlcnMgdGhlIG5ldyBidWZmZXIgY2FuIGhhdmU/ICAqLwkJCVwKKysgICAgd2NoYXJfY291bnQgPSBidWZwLT5hbGxvY2F0ZWQgLyBzaXplb2YoVUNIQVJfVCk7CQkJXAorKyAgICBpZiAod2NoYXJfY291bnQgPT0gMCkgd2NoYXJfY291bnQgPSAxOwkJCQlcCisrICAgIC8qIFRydW5jYXRlIHRoZSBidWZmZXIgdG8gQ0hBUl9UIGFsaWduLiAgKi8JCQlcCisrICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IHdjaGFyX2NvdW50ICogc2l6ZW9mKFVDSEFSX1QpOwkJCVwKKysgICAgUkVUQUxMT0MgKENPTVBJTEVEX0JVRkZFUl9WQVIsIHdjaGFyX2NvdW50LCBVQ0hBUl9UKTsJCVwKKysgICAgYnVmcC0+YnVmZmVyID0gKGNoYXIqKUNPTVBJTEVEX0JVRkZFUl9WQVI7CQkJCVwKKysgICAgaWYgKENPTVBJTEVEX0JVRkZFUl9WQVIgPT0gTlVMTCkJCQkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsJCQkJCQlcCisrICAgIC8qIElmIHRoZSBidWZmZXIgbW92ZWQsIG1vdmUgYWxsIHRoZSBwb2ludGVycyBpbnRvIGl0LiAgKi8JCVwKKysgICAgaWYgKG9sZF9idWZmZXIgIT0gQ09NUElMRURfQlVGRkVSX1ZBUikJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCWludCBpbmNyID0gQ09NUElMRURfQlVGRkVSX1ZBUiAtIG9sZF9idWZmZXI7CQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiKTsJCQkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYmVnYWx0KTsJCQkJCVwKKysJaWYgKGZpeHVwX2FsdF9qdW1wKQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChmaXh1cF9hbHRfanVtcCk7CQkJCVwKKysJaWYgKGxhc3RzdGFydCkJCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGxhc3RzdGFydCk7CQkJCVwKKysJaWYgKHBlbmRpbmdfZXhhY3QpCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKHBlbmRpbmdfZXhhY3QpOwkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRVhURU5EX0JVRkZFUigpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgVUNIQVJfVCAqb2xkX2J1ZmZlciA9IENPTVBJTEVEX0JVRkZFUl9WQVI7CQkJCVwKKysgICAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA9PSBNQVhfQlVGX1NJWkUpCQkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTSVpFOwkJCQkJCQlcCisrICAgIGJ1ZnAtPmFsbG9jYXRlZCA8PD0gMTsJCQkJCQlcCisrICAgIGlmIChidWZwLT5hbGxvY2F0ZWQgPiBNQVhfQlVGX1NJWkUpCQkJCQlcCisrICAgICAgYnVmcC0+YWxsb2NhdGVkID0gTUFYX0JVRl9TSVpFOwkJCQkJXAorKyAgICBidWZwLT5idWZmZXIgPSAoVUNIQVJfVCAqKSBSRUFMTE9DIChDT01QSUxFRF9CVUZGRVJfVkFSLAkJXAorKwkJCQkJCWJ1ZnAtPmFsbG9jYXRlZCk7CVwKKysgICAgaWYgKENPTVBJTEVEX0JVRkZFUl9WQVIgPT0gTlVMTCkJCQkJCVwKKysgICAgICByZXR1cm4gUkVHX0VTUEFDRTsJCQkJCQlcCisrICAgIC8qIElmIHRoZSBidWZmZXIgbW92ZWQsIG1vdmUgYWxsIHRoZSBwb2ludGVycyBpbnRvIGl0LiAgKi8JCVwKKysgICAgaWYgKG9sZF9idWZmZXIgIT0gQ09NUElMRURfQlVGRkVSX1ZBUikJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrCWludCBpbmNyID0gQ09NUElMRURfQlVGRkVSX1ZBUiAtIG9sZF9idWZmZXI7CQkJXAorKwlNT1ZFX0JVRkZFUl9QT0lOVEVSIChiKTsJCQkJCVwKKysJTU9WRV9CVUZGRVJfUE9JTlRFUiAoYmVnYWx0KTsJCQkJCVwKKysJaWYgKGZpeHVwX2FsdF9qdW1wKQkJCQkJCVwKKysJICBNT1ZFX0JVRkZFUl9QT0lOVEVSIChmaXh1cF9hbHRfanVtcCk7CQkJCVwKKysJaWYgKGxhc3RzdGFydCkJCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKGxhc3RzdGFydCk7CQkJCVwKKysJaWYgKHBlbmRpbmdfZXhhY3QpCQkJCQkJXAorKwkgIE1PVkVfQlVGRkVSX1BPSU5URVIgKHBlbmRpbmdfZXhhY3QpOwkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgICAgRUxTRV9FWFRFTkRfQlVGRkVSX0hJR0hfQk9VTkQJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKworKyMgaWZuZGVmIERFRklORURfT05DRQorKy8qIFNpbmNlIHdlIGhhdmUgb25lIGJ5dGUgcmVzZXJ2ZWQgZm9yIHRoZSByZWdpc3RlciBudW1iZXIgYXJndW1lbnQgdG8KKysgICB7c3RhcnQsc3RvcH1fbWVtb3J5LCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZ3JvdXBzIHdlIGNhbiByZXBvcnQKKysgICB0aGluZ3MgYWJvdXQgaXMgd2hhdCBmaXRzIGluIHRoYXQgYnl0ZS4gICovCisrIyAgZGVmaW5lIE1BWF9SRUdOVU0gMjU1CisrCisrLyogQnV0IHBhdHRlcm5zIGNhbiBoYXZlIG1vcmUgdGhhbiBgTUFYX1JFR05VTScgcmVnaXN0ZXJzLiAgV2UganVzdAorKyAgIGlnbm9yZSB0aGUgZXhjZXNzLiAgKi8KKyt0eXBlZGVmIHVuc2lnbmVkIHJlZ251bV90OworKworKworKy8qIE1hY3JvcyBmb3IgdGhlIGNvbXBpbGUgc3RhY2suICAqLworKworKy8qIFNpbmNlIG9mZnNldHMgY2FuIGdvIGVpdGhlciBmb3J3YXJkcyBvciBiYWNrd2FyZHMsIHRoaXMgdHlwZSBuZWVkcyB0bworKyAgIGJlIGFibGUgdG8gaG9sZCB2YWx1ZXMgZnJvbSAtKE1BWF9CVUZfU0laRSAtIDEpIHRvIE1BWF9CVUZfU0laRSAtIDEuICAqLworKy8qIGludCBtYXkgYmUgbm90IGVub3VnaCB3aGVuIHNpemVvZihpbnQpID09IDIuICAqLworK3R5cGVkZWYgbG9uZyBwYXR0ZXJuX29mZnNldF90OworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgcGF0dGVybl9vZmZzZXRfdCBiZWdhbHRfb2Zmc2V0OworKyAgcGF0dGVybl9vZmZzZXRfdCBmaXh1cF9hbHRfanVtcDsKKysgIHBhdHRlcm5fb2Zmc2V0X3QgaW5uZXJfZ3JvdXBfb2Zmc2V0OworKyAgcGF0dGVybl9vZmZzZXRfdCBsYXN0c3RhcnRfb2Zmc2V0OworKyAgcmVnbnVtX3QgcmVnbnVtOworK30gY29tcGlsZV9zdGFja19lbHRfdDsKKysKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysgIGNvbXBpbGVfc3RhY2tfZWx0X3QgKnN0YWNrOworKyAgdW5zaWduZWQgc2l6ZTsKKysgIHVuc2lnbmVkIGF2YWlsOwkJCS8qIE9mZnNldCBvZiBuZXh0IG9wZW4gcG9zaXRpb24uICAqLworK30gY29tcGlsZV9zdGFja190eXBlOworKworKworKyMgIGRlZmluZSBJTklUX0NPTVBJTEVfU1RBQ0tfU0laRSAzMgorKworKyMgIGRlZmluZSBDT01QSUxFX1NUQUNLX0VNUFRZICAoY29tcGlsZV9zdGFjay5hdmFpbCA9PSAwKQorKyMgIGRlZmluZSBDT01QSUxFX1NUQUNLX0ZVTEwgIChjb21waWxlX3N0YWNrLmF2YWlsID09IGNvbXBpbGVfc3RhY2suc2l6ZSkKKysKKysvKiBUaGUgbmV4dCBhdmFpbGFibGUgZWxlbWVudC4gICovCisrIyAgZGVmaW5lIENPTVBJTEVfU1RBQ0tfVE9QIChjb21waWxlX3N0YWNrLnN0YWNrW2NvbXBpbGVfc3RhY2suYXZhaWxdKQorKworKyMgZW5kaWYgLyogbm90IERFRklORURfT05DRSAqLworKworKy8qIFNldCB0aGUgYml0IGZvciBjaGFyYWN0ZXIgQyBpbiBhIGxpc3QuICAqLworKyMgaWZuZGVmIERFRklORURfT05DRQorKyMgIGRlZmluZSBTRVRfTElTVF9CSVQoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgKGJbKCh1bnNpZ25lZCBjaGFyKSAoYykpIC8gQllURVdJRFRIXSAgICAgICAgICAgICAgIFwKKysgICB8PSAxIDw8ICgoKHVuc2lnbmVkIGNoYXIpIGMpICUgQllURVdJRFRIKSkKKysjIGVuZGlmIC8qIERFRklORURfT05DRSAqLworKworKy8qIEdldCB0aGUgbmV4dCB1bnNpZ25lZCBudW1iZXIgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybi4gICovCisrIyBkZWZpbmUgR0VUX1VOU0lHTkVEX05VTUJFUihudW0pIFwKKysgIHsJCQkJCQkJCQlcCisrICAgIHdoaWxlIChwICE9IHBlbmQpCQkJCQkJCVwKKysgICAgICB7CQkJCQkJCQkJXAorKwlQQVRGRVRDSCAoYyk7CQkJCQkJCVwKKysJaWYgKGMgPCAnMCcgfHwgYyA+ICc5JykJCQkJCQlcCisrCSAgYnJlYWs7CQkJCQkJCVwKKysJaWYgKG51bSA8PSBSRV9EVVBfTUFYKQkJCQkJCVwKKysJICB7CQkJCQkJCQlcCisrCSAgICBpZiAobnVtIDwgMCkJCQkJCQlcCisrCSAgICAgIG51bSA9IDA7CQkJCQkJCVwKKysJICAgIG51bSA9IG51bSAqIDEwICsgYyAtICcwJzsJCQkJCVwKKysJICB9CQkJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIH0KKysKKysjIGlmbmRlZiBERUZJTkVEX09OQ0UKKysjICBpZiBXSURFX0NIQVJfU1VQUE9SVAorKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IHByb3ZpZGVzIHN1cHBvcnQgZm9yIHVzZXItZGVmaW5lZCBjaGFyYWN0ZXIgY2xhc3NlcworKyAgIGFuZCB0aGUgZnVuY3Rpb25zIGZyb20gSVNPIEMgYW1lbmRlbWVudCAxLiAgKi8KKysjICAgaWZkZWYgQ0hBUkNMQVNTX05BTUVfTUFYCisrIyAgICBkZWZpbmUgQ0hBUl9DTEFTU19NQVhfTEVOR1RIIENIQVJDTEFTU19OQU1FX01BWAorKyMgICBlbHNlCisrLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBzb21lIGltcGxlbWVudGF0aW9uIG1pZ2h0IHN0aWxsIGhhdmUgdGhpcworKyAgIHByb2JsZW0uICBVc2UgYSByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWUuICAqLworKyMgICAgZGVmaW5lIENIQVJfQ0xBU1NfTUFYX0xFTkdUSCAyNTYKKysjICAgZW5kaWYKKysKKysjICAgaWZkZWYgX0xJQkMKKysjICAgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykgX193Y3R5cGUgKHN0cmluZykKKysjICAgZWxzZQorKyMgICAgZGVmaW5lIElTX0NIQVJfQ0xBU1Moc3RyaW5nKSB3Y3R5cGUgKHN0cmluZykKKysjICAgZW5kaWYKKysjICBlbHNlCisrIyAgIGRlZmluZSBDSEFSX0NMQVNTX01BWF9MRU5HVEggIDYgLyogTmFtZWx5LCBgeGRpZ2l0Jy4gICovCisrCisrIyAgIGRlZmluZSBJU19DSEFSX0NMQVNTKHN0cmluZykJCQkJCVwKKysgICAoU1RSRVEgKHN0cmluZywgImFscGhhIikgfHwgU1RSRVEgKHN0cmluZywgInVwcGVyIikJCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJsb3dlciIpIHx8IFNUUkVRIChzdHJpbmcsICJkaWdpdCIpCQlcCisrICAgIHx8IFNUUkVRIChzdHJpbmcsICJhbG51bSIpIHx8IFNUUkVRIChzdHJpbmcsICJ4ZGlnaXQiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAic3BhY2UiKSB8fCBTVFJFUSAoc3RyaW5nLCAicHJpbnQiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAicHVuY3QiKSB8fCBTVFJFUSAoc3RyaW5nLCAiZ3JhcGgiKQkJXAorKyAgICB8fCBTVFJFUSAoc3RyaW5nLCAiY250cmwiKSB8fCBTVFJFUSAoc3RyaW5nLCAiYmxhbmsiKSkKKysjICBlbmRpZgorKyMgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrDAorKyMgaWZuZGVmIE1BVENIX01BWV9BTExPQ0FURQorKworKy8qIElmIHdlIGNhbm5vdCBhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIHdpdGhpbiByZV9tYXRjaF8yX2ludGVybmFsLAorKyAgIHdlIG1ha2UgdGhlIGZhaWwgc3RhY2sgYW5kIHJlZ2lzdGVyIHZlY3RvcnMgZ2xvYmFsLgorKyAgIFRoZSBmYWlsIHN0YWNrLCB3ZSBncm93IHRvIHRoZSBtYXhpbXVtIHNpemUgd2hlbiBhIHJlZ2V4cAorKyAgIGlzIGNvbXBpbGVkLgorKyAgIFRoZSByZWdpc3RlciB2ZWN0b3JzLCB3ZSBhZGp1c3QgaW4gc2l6ZSBlYWNoIHRpbWUgd2UKKysgICBjb21waWxlIGEgcmVnZXhwLCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiByZWdpc3RlcnMgaXQgbmVlZHMuICAqLworKworK3N0YXRpYyBQUkVGSVgoZmFpbF9zdGFja190eXBlKSBmYWlsX3N0YWNrOworKworKy8qIFNpemUgd2l0aCB3aGljaCB0aGUgZm9sbG93aW5nIHZlY3RvcnMgYXJlIGN1cnJlbnRseSBhbGxvY2F0ZWQuCisrICAgVGhhdCBpcyBzbyB3ZSBjYW4gbWFrZSB0aGVtIGJpZ2dlciBhcyBuZWVkZWQsCisrICAgYnV0IG5ldmVyIG1ha2UgdGhlbSBzbWFsbGVyLiAgKi8KKysjICBpZmRlZiBERUZJTkVEX09OQ0UKKytzdGF0aWMgaW50IHJlZ3NfYWxsb2NhdGVkX3NpemU7CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKiogICAgIHJlZ3N0YXJ0LCAqKiAgICAgcmVnZW5kOworK3N0YXRpYyBjb25zdCBjaGFyICoqIG9sZF9yZWdzdGFydCwgKiogb2xkX3JlZ2VuZDsKKytzdGF0aWMgY29uc3QgY2hhciAqKmJlc3RfcmVnc3RhcnQsICoqYmVzdF9yZWdlbmQ7Cisrc3RhdGljIGNvbnN0IGNoYXIgKipyZWdfZHVtbXk7CisrIyAgZW5kaWYgLyogREVGSU5FRF9PTkNFICovCisrCisrc3RhdGljIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpQUkVGSVgocmVnX2luZm8pOworK3N0YXRpYyBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqUFJFRklYKHJlZ19pbmZvX2R1bW15KTsKKysKKysvKiBNYWtlIHRoZSByZWdpc3RlciB2ZWN0b3JzIGJpZyBlbm91Z2ggZm9yIE5VTV9SRUdTIHJlZ2lzdGVycywKKysgICBidXQgZG9uJ3QgbWFrZSB0aGVtIHNtYWxsZXIuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKHJlZ2V4X2dyb3dfcmVnaXN0ZXJzKSAoaW50IG51bV9yZWdzKQorK3sKKysgIGlmIChudW1fcmVncyA+IHJlZ3NfYWxsb2NhdGVkX3NpemUpCisrICAgIHsKKysgICAgICBSRVRBTExPQ19JRiAocmVnc3RhcnQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAocmVnZW5kLAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKG9sZF9yZWdzdGFydCwgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKG9sZF9yZWdlbmQsCSBudW1fcmVncywgY29uc3QgY2hhciAqKTsKKysgICAgICBSRVRBTExPQ19JRiAoYmVzdF9yZWdzdGFydCwgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKGJlc3RfcmVnZW5kLAkgbnVtX3JlZ3MsIGNvbnN0IGNoYXIgKik7CisrICAgICAgUkVUQUxMT0NfSUYgKFBSRUZJWChyZWdfaW5mbyksIG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrICAgICAgUkVUQUxMT0NfSUYgKHJlZ19kdW1teSwJIG51bV9yZWdzLCBjb25zdCBjaGFyICopOworKyAgICAgIFJFVEFMTE9DX0lGIChQUkVGSVgocmVnX2luZm9fZHVtbXkpLCBudW1fcmVncywgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkpOworKworKyAgICAgIHJlZ3NfYWxsb2NhdGVkX3NpemUgPSBudW1fcmVnczsKKysgICAgfQorK30KKysKKysjIGVuZGlmIC8qIG5vdCBNQVRDSF9NQVlfQUxMT0NBVEUgKi8KKysMCisrIyBpZm5kZWYgREVGSU5FRF9PTkNFCisrc3RhdGljIGJvb2xlYW4gZ3JvdXBfaW5fY29tcGlsZV9zdGFjayAoY29tcGlsZV9zdGFja190eXBlIGNvbXBpbGVfc3RhY2ssCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnbnVtX3QgcmVnbnVtKTsKKysjIGVuZGlmIC8qIG5vdCBERUZJTkVEX09OQ0UgKi8KKysKKysvKiBgcmVnZXhfY29tcGlsZScgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIFNJWkUpIGFjY29yZGluZyB0byBTWU5UQVguCisrICAgUmV0dXJucyBvbmUgb2YgZXJyb3IgY29kZXMgZGVmaW5lZCBpbiBgcmVnZXguaCcsIG9yIHplcm8gZm9yIHN1Y2Nlc3MuCisrCisrICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScKKysgICBmaWVsZHMgYXJlIHNldCBpbiBCVUZQIG9uIGVudHJ5LgorKworKyAgIElmIGl0IHN1Y2NlZWRzLCByZXN1bHRzIGFyZSBwdXQgaW4gQlVGUCAoaWYgaXQgcmV0dXJucyBhbiBlcnJvciwgdGhlCisrICAgY29udGVudHMgb2YgQlVGUCBhcmUgdW5kZWZpbmVkKToKKysgICAgIGBidWZmZXInIGlzIHRoZSBjb21waWxlZCBwYXR0ZXJuOworKyAgICAgYHN5bnRheCcgaXMgc2V0IHRvIFNZTlRBWDsKKysgICAgIGB1c2VkJyBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGBmYXN0bWFwX2FjY3VyYXRlJyBpcyB6ZXJvOworKyAgICAgYHJlX25zdWInIGlzIHRoZSBudW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgaW4gUEFUVEVSTjsKKysgICAgIGBub3RfYm9sJyBhbmQgYG5vdF9lb2wnIGFyZSB6ZXJvOworKworKyAgIFRoZSBgZmFzdG1hcCcgYW5kIGBuZXdsaW5lX2FuY2hvcicgZmllbGRzIGFyZSBuZWl0aGVyCisrICAgZXhhbWluZWQgbm9yIHNldC4gICovCisrCisrLyogUmV0dXJuLCBmcmVlaW5nIHN0b3JhZ2Ugd2UgYWxsb2NhdGVkLiAgKi8KKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEZSRUVfU1RBQ0tfUkVUVVJOKHZhbHVlKQkJXAorKyAgcmV0dXJuIChmcmVlKHBhdHRlcm4pLCBmcmVlKG1ic19vZmZzZXQpLCBmcmVlKGlzX2JpbmFyeSksIGZyZWUgKGNvbXBpbGVfc3RhY2suc3RhY2spLCB2YWx1ZSkKKysjIGVsc2UKKysjICBkZWZpbmUgRlJFRV9TVEFDS19SRVRVUk4odmFsdWUpCQlcCisrICByZXR1cm4gKGZyZWUgKGNvbXBpbGVfc3RhY2suc3RhY2spLCB2YWx1ZSkKKysjIGVuZGlmIC8qIFdDSEFSICovCisrCisrc3RhdGljIHJlZ19lcnJjb2RlX3QKKytQUkVGSVgocmVnZXhfY29tcGlsZSkgKGNvbnN0IGNoYXIgKkFSR19QUkVGSVgocGF0dGVybiksCisrICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgQVJHX1BSRUZJWChzaXplKSwgcmVnX3N5bnRheF90IHN5bnRheCwKKysgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICAvKiBXZSBmZXRjaCBjaGFyYWN0ZXJzIGZyb20gUEFUVEVSTiBoZXJlLiAgRXZlbiB0aG91Z2ggUEFUVEVSTiBpcworKyAgICAgYGNoYXIgKicgKGkuZS4sIHNpZ25lZCksIHdlIGRlY2xhcmUgdGhlc2UgdmFyaWFibGVzIGFzIHVuc2lnbmVkLCBzbworKyAgICAgdGhleSBjYW4gYmUgcmVsaWFibHkgdXNlZCBhcyBhcnJheSBpbmRpY2VzLiAgKi8KKysgIHJlZ2lzdGVyIFVDSEFSX1QgYywgYzE7CisrCisrI2lmZGVmIFdDSEFSCisrICAvKiBBIHRlbXBvcmFyeSBzcGFjZSB0byBrZWVwIHdjaGFyX3QgcGF0dGVybiBhbmQgY29tcGlsZWQgcGF0dGVybi4gICovCisrICBDSEFSX1QgKnBhdHRlcm4sICpDT01QSUxFRF9CVUZGRVJfVkFSOworKyAgc2l6ZV90IHNpemU7CisrICAvKiBvZmZzZXQgYnVmZmVyIGZvciBvcHRpbWl6YXRpb24uIFNlZSBjb252ZXJ0X21ic190b193Yy4gICovCisrICBpbnQgKm1ic19vZmZzZXQgPSBOVUxMOworKyAgLyogSXQgaG9sZCB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciAqaXNfYmluYXJ5ID0gTlVMTDsKKysgIC8qIEEgZmxhZyB3aGV0aGVyIGV4YWN0biBpcyBoYW5kbGluZyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciBpc19leGFjdG5fYmluID0gRkFMU0U7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAvKiBBIHJhbmRvbSB0ZW1wb3Jhcnkgc3BvdCBpbiBQQVRURVJOLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqcDE7CisrCisrICAvKiBQb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB3aGVyZSB3ZSBzaG91bGQgYXBwZW5kLiAgKi8KKysgIHJlZ2lzdGVyIFVDSEFSX1QgKmI7CisrCisrICAvKiBLZWVwcyB0cmFjayBvZiB1bmNsb3NlZCBncm91cHMuICAqLworKyAgY29tcGlsZV9zdGFja190eXBlIGNvbXBpbGVfc3RhY2s7CisrCisrICAvKiBQb2ludHMgdG8gdGhlIGN1cnJlbnQgKGVuZGluZykgcG9zaXRpb24gaW4gdGhlIHBhdHRlcm4uICAqLworKyNpZmRlZiBXQ0hBUgorKyAgY29uc3QgQ0hBUl9UICpwOworKyAgY29uc3QgQ0hBUl9UICpwZW5kOworKyNlbHNlIC8qIEJZVEUgKi8KKysgIGNvbnN0IENIQVJfVCAqcCA9IHBhdHRlcm47CisrICBjb25zdCBDSEFSX1QgKnBlbmQgPSBwYXR0ZXJuICsgc2l6ZTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIEhvdyB0byB0cmFuc2xhdGUgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4uICAqLworKyAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOworKworKyAgLyogQWRkcmVzcyBvZiB0aGUgY291bnQtYnl0ZSBvZiB0aGUgbW9zdCByZWNlbnRseSBpbnNlcnRlZCBgZXhhY3RuJworKyAgICAgY29tbWFuZC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gdGVsbCBpZiBhIG5ldyBleGFjdC1tYXRjaAorKyAgICAgY2hhcmFjdGVyIGNhbiBiZSBhZGRlZCB0byB0aGF0IGNvbW1hbmQgb3IgaWYgdGhlIGNoYXJhY3RlciByZXF1aXJlcworKyAgICAgYSBuZXcgYGV4YWN0bicgY29tbWFuZC4gICovCisrICBVQ0hBUl9UICpwZW5kaW5nX2V4YWN0ID0gMDsKKysKKysgIC8qIEFkZHJlc3Mgb2Ygc3RhcnQgb2YgdGhlIG1vc3QgcmVjZW50bHkgZmluaXNoZWQgZXhwcmVzc2lvbi4KKysgICAgIFRoaXMgdGVsbHMsIGUuZy4sIHBvc3RmaXggKiB3aGVyZSB0byBmaW5kIHRoZSBzdGFydCBvZiBpdHMKKysgICAgIG9wZXJhbmQuICBSZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGdyb3VwcyBhbmQgYWx0ZXJuYXRpdmVzLiAgKi8KKysgIFVDSEFSX1QgKmxhc3RzdGFydCA9IDA7CisrCisrICAvKiBBZGRyZXNzIG9mIGJlZ2lubmluZyBvZiByZWdleHAsIG9yIGluc2lkZSBvZiBsYXN0IGdyb3VwLiAgKi8KKysgIFVDSEFSX1QgKmJlZ2FsdDsKKysKKysgIC8qIEFkZHJlc3Mgb2YgdGhlIHBsYWNlIHdoZXJlIGEgZm9yd2FyZCBqdW1wIHNob3VsZCBnbyB0byB0aGUgZW5kIG9mCisrICAgICB0aGUgY29udGFpbmluZyBleHByZXNzaW9uLiAgRWFjaCBhbHRlcm5hdGl2ZSBvZiBhbiBgb3InIC0tIGV4Y2VwdCB0aGUKKysgICAgIGxhc3QgLS0gZW5kcyB3aXRoIGEgZm9yd2FyZCBqdW1wIG9mIHRoaXMgc29ydC4gICovCisrICBVQ0hBUl9UICpmaXh1cF9hbHRfanVtcCA9IDA7CisrCisrICAvKiBDb3VudHMgb3Blbi1ncm91cHMgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQuICBSZW1lbWJlcmVkIGZvciB0aGUKKysgICAgIG1hdGNoaW5nIGNsb3NlLWdyb3VwIG9uIHRoZSBjb21waWxlIHN0YWNrLCBzbyB0aGUgc2FtZSByZWdpc3RlcgorKyAgICAgbnVtYmVyIGlzIHB1dCBpbiB0aGUgc3RvcF9tZW1vcnkgYXMgdGhlIHN0YXJ0X21lbW9yeS4gICovCisrICByZWdudW1fdCByZWdudW0gPSAwOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogSW5pdGlhbGl6ZSB0aGUgd2NoYXJfdCBQQVRURVJOIGFuZCBvZmZzZXRfYnVmZmVyLiAgKi8KKysgIHAgPSBwZW5kID0gcGF0dGVybiA9IFRBTExPQyhjc2l6ZSArIDEsIENIQVJfVCk7CisrICBtYnNfb2Zmc2V0ID0gVEFMTE9DKGNzaXplICsgMSwgaW50KTsKKysgIGlzX2JpbmFyeSA9IFRBTExPQyhjc2l6ZSArIDEsIGNoYXIpOworKyAgaWYgKHBhdHRlcm4gPT0gTlVMTCB8fCBtYnNfb2Zmc2V0ID09IE5VTEwgfHwgaXNfYmluYXJ5ID09IE5VTEwpCisrICAgIHsKKysgICAgICBmcmVlKHBhdHRlcm4pOworKyAgICAgIGZyZWUobWJzX29mZnNldCk7CisrICAgICAgZnJlZShpc19iaW5hcnkpOworKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOworKyAgICB9CisrICBwYXR0ZXJuW2NzaXplXSA9IEwnXDAnOwkvKiBzZW50aW5lbCAqLworKyAgc2l6ZSA9IGNvbnZlcnRfbWJzX3RvX3djcyhwYXR0ZXJuLCBjcGF0dGVybiwgY3NpemUsIG1ic19vZmZzZXQsIGlzX2JpbmFyeSk7CisrICBwZW5kID0gcCArIHNpemU7CisrICBpZiAoc2l6ZSA8IDApCisrICAgIHsKKysgICAgICBmcmVlKHBhdHRlcm4pOworKyAgICAgIGZyZWUobWJzX29mZnNldCk7CisrICAgICAgZnJlZShpc19iaW5hcnkpOworKyAgICAgIHJldHVybiBSRUdfQkFEUEFUOworKyAgICB9CisrI2VuZGlmCisrCisrI2lmZGVmIERFQlVHCisrICBERUJVR19QUklOVDEgKCJcbkNvbXBpbGluZyBwYXR0ZXJuOiAiKTsKKysgIGlmIChkZWJ1ZykKKysgICAgeworKyAgICAgIHVuc2lnbmVkIGRlYnVnX2NvdW50OworKworKyAgICAgIGZvciAoZGVidWdfY291bnQgPSAwOyBkZWJ1Z19jb3VudCA8IHNpemU7IGRlYnVnX2NvdW50KyspCisrICAgICAgICBQVVRfQ0hBUiAocGF0dGVybltkZWJ1Z19jb3VudF0pOworKyAgICAgIHB1dGNoYXIgKCdcbicpOworKyAgICB9CisrI2VuZGlmIC8qIERFQlVHICovCisrCisrICAvKiBJbml0aWFsaXplIHRoZSBjb21waWxlIHN0YWNrLiAgKi8KKysgIGNvbXBpbGVfc3RhY2suc3RhY2sgPSBUQUxMT0MgKElOSVRfQ09NUElMRV9TVEFDS19TSVpFLCBjb21waWxlX3N0YWNrX2VsdF90KTsKKysgIGlmIChjb21waWxlX3N0YWNrLnN0YWNrID09IE5VTEwpCisrICAgIHsKKysjaWZkZWYgV0NIQVIKKysgICAgICBmcmVlKHBhdHRlcm4pOworKyAgICAgIGZyZWUobWJzX29mZnNldCk7CisrICAgICAgZnJlZShpc19iaW5hcnkpOworKyNlbmRpZgorKyAgICAgIHJldHVybiBSRUdfRVNQQUNFOworKyAgICB9CisrCisrICBjb21waWxlX3N0YWNrLnNpemUgPSBJTklUX0NPTVBJTEVfU1RBQ0tfU0laRTsKKysgIGNvbXBpbGVfc3RhY2suYXZhaWwgPSAwOworKworKyAgLyogSW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIuICAqLworKyAgYnVmcC0+c3ludGF4ID0gc3ludGF4OworKyAgYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDA7CisrICBidWZwLT5ub3RfYm9sID0gYnVmcC0+bm90X2VvbCA9IDA7CisrCisrICAvKiBTZXQgYHVzZWQnIHRvIHplcm8sIHNvIHRoYXQgaWYgd2UgcmV0dXJuIGFuIGVycm9yLCB0aGUgcGF0dGVybgorKyAgICAgcHJpbnRlciAoZm9yIGRlYnVnZ2luZykgd2lsbCB0aGluayB0aGVyZSdzIG5vIHBhdHRlcm4uICBXZSByZXNldCBpdAorKyAgICAgYXQgdGhlIGVuZC4gICovCisrICBidWZwLT51c2VkID0gMDsKKysKKysgIC8qIEFsd2F5cyBjb3VudCBncm91cHMsIHdoZXRoZXIgb3Igbm90IGJ1ZnAtPm5vX3N1YiBpcyBzZXQuICAqLworKyAgYnVmcC0+cmVfbnN1YiA9IDA7CisrCisrI2lmICFkZWZpbmVkIGVtYWNzICYmICFkZWZpbmVkIFNZTlRBWF9UQUJMRQorKyAgLyogSW5pdGlhbGl6ZSB0aGUgc3ludGF4IHRhYmxlLiAgKi8KKysgICBpbml0X3N5bnRheF9vbmNlICgpOworKyNlbmRpZgorKworKyAgaWYgKGJ1ZnAtPmFsbG9jYXRlZCA9PSAwKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZnAtPmJ1ZmZlcikKKysJeyAvKiBJZiB6ZXJvIGFsbG9jYXRlZCwgYnV0IGJ1ZmZlciBpcyBub24tbnVsbCwgdHJ5IHRvIHJlYWxsb2MKKysgICAgICAgICAgICAgZW5vdWdoIHNwYWNlLiAgVGhpcyBsb3NlcyBpZiBidWZmZXIncyBhZGRyZXNzIGlzIGJvZ3VzLCBidXQKKysgICAgICAgICAgICAgdGhhdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LiAgKi8KKysjaWZkZWYgV0NIQVIKKysJICAvKiBGcmVlIGJ1ZnAtPmJ1ZmZlciBhbmQgYWxsb2NhdGUgYW4gYXJyYXkgZm9yIHdjaGFyX3QgcGF0dGVybgorKwkgICAgIGJ1ZmZlci4gICovCisrICAgICAgICAgIGZyZWUoYnVmcC0+YnVmZmVyKTsKKysgICAgICAgICAgQ09NUElMRURfQlVGRkVSX1ZBUiA9IFRBTExPQyAoSU5JVF9CVUZfU0laRS9zaXplb2YoVUNIQVJfVCksCisrCQkJCQlVQ0hBUl9UKTsKKysjZWxzZQorKyAgICAgICAgICBSRVRBTExPQyAoQ09NUElMRURfQlVGRkVSX1ZBUiwgSU5JVF9CVUZfU0laRSwgVUNIQVJfVCk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeyAvKiBDYWxsZXIgZGlkIG5vdCBhbGxvY2F0ZSBhIGJ1ZmZlci4gIERvIGl0IGZvciB0aGVtLiAgKi8KKysgICAgICAgICAgQ09NUElMRURfQlVGRkVSX1ZBUiA9IFRBTExPQyAoSU5JVF9CVUZfU0laRSAvIHNpemVvZihVQ0hBUl9UKSwKKysJCQkJCVVDSEFSX1QpOworKyAgICAgICAgfQorKworKyAgICAgIGlmICghQ09NUElMRURfQlVGRkVSX1ZBUikgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FU1BBQ0UpOworKyNpZmRlZiBXQ0hBUgorKyAgICAgIGJ1ZnAtPmJ1ZmZlciA9IChjaGFyKilDT01QSUxFRF9CVUZGRVJfVkFSOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgIGJ1ZnAtPmFsbG9jYXRlZCA9IElOSVRfQlVGX1NJWkU7CisrICAgIH0KKysjaWZkZWYgV0NIQVIKKysgIGVsc2UKKysgICAgQ09NUElMRURfQlVGRkVSX1ZBUiA9IChVQ0hBUl9UKikgYnVmcC0+YnVmZmVyOworKyNlbmRpZgorKworKyAgYmVnYWx0ID0gYiA9IENPTVBJTEVEX0JVRkZFUl9WQVI7CisrCisrICAvKiBMb29wIHRocm91Z2ggdGhlIHVuY29tcGlsZWQgcGF0dGVybiB1bnRpbCB3ZSdyZSBhdCB0aGUgZW5kLiAgKi8KKysgIHdoaWxlIChwICE9IHBlbmQpCisrICAgIHsKKysgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgc3dpdGNoIChjKQorKyAgICAgICAgeworKyAgICAgICAgY2FzZSAnXic6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAoICAgLyogSWYgYXQgc3RhcnQgb2YgcGF0dGVybiwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgICAgIHAgPT0gcGF0dGVybiArIDEKKysgICAgICAgICAgICAgICAgICAgLyogSWYgY29udGV4dCBpbmRlcGVuZGVudCwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIHx8IHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUworKyAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGRlcGVuZHMgb24gd2hhdCdzIGNvbWUgYmVmb3JlLiAgKi8KKysgICAgICAgICAgICAgICAgfHwgUFJFRklYKGF0X2JlZ2xpbmVfbG9jX3ApIChwYXR0ZXJuLCBwLCBzeW50YXgpKQorKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGJlZ2xpbmUpOworKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICBjYXNlICckJzoKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmICggICAvKiBJZiBhdCBlbmQgb2YgcGF0dGVybiwgaXQncyBhbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgICAgIHAgPT0gcGVuZAorKyAgICAgICAgICAgICAgICAgICAvKiBJZiBjb250ZXh0IGluZGVwZW5kZW50LCBpdCdzIGFuIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgfHwgc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCisrICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgZGVwZW5kcyBvbiB3aGF0J3MgbmV4dC4gICovCisrICAgICAgICAgICAgICAgIHx8IFBSRUZJWChhdF9lbmRsaW5lX2xvY19wKSAocCwgcGVuZCwgc3ludGF4KSkKKysgICAgICAgICAgICAgICBCVUZfUFVTSCAoZW5kbGluZSk7CisrICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgfQorKyAgICAgICAgICAgYnJlYWs7CisrCisrCisrCWNhc2UgJysnOgorKyAgICAgICAgY2FzZSAnPyc6CisrICAgICAgICAgIGlmICgoc3ludGF4ICYgUkVfQktfUExVU19RTSkKKysgICAgICAgICAgICAgIHx8IChzeW50YXggJiBSRV9MSU1JVEVEX09QUykpCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgIGhhbmRsZV9wbHVzOgorKyAgICAgICAgY2FzZSAnKic6CisrICAgICAgICAgIC8qIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHBhdHRlcm4uLi4gKi8KKysgICAgICAgICAgaWYgKCFsYXN0c3RhcnQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMpCisrICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfQkFEUlBUKTsKKysgICAgICAgICAgICAgIGVsc2UgaWYgKCEoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgeworKyAgICAgICAgICAgIC8qIEFyZSB3ZSBvcHRpbWl6aW5nIHRoaXMganVtcD8gICovCisrICAgICAgICAgICAgYm9vbGVhbiBrZWVwX3N0cmluZ19wID0gZmFsc2U7CisrCisrICAgICAgICAgICAgLyogMSBtZWFucyB6ZXJvIChtYW55KSBtYXRjaGVzIGlzIGFsbG93ZWQuICAqLworKyAgICAgICAgICAgIGNoYXIgemVyb190aW1lc19vayA9IDAsIG1hbnlfdGltZXNfb2sgPSAwOworKworKyAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIGEgc2VxdWVuY2Ugb2YgcmVwZXRpdGlvbiBjaGFycywgY29sbGFwc2UgaXQKKysgICAgICAgICAgICAgICBkb3duIHRvIGp1c3Qgb25lICh0aGUgcmlnaHQgb25lKS4gIFdlIGNhbid0IGNvbWJpbmUKKysgICAgICAgICAgICAgICBpbnRlcnZhbCBvcGVyYXRvcnMgd2l0aCB0aGVzZSBiZWNhdXNlIG9mLCBlLmcuLCBgYXsyfSonLAorKyAgICAgICAgICAgICAgIHdoaWNoIHNob3VsZCBvbmx5IG1hdGNoIGFuIGV2ZW4gbnVtYmVyIG9mIGBhJ3MuICAqLworKworKyAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIHplcm9fdGltZXNfb2sgfD0gYyAhPSAnKyc7CisrICAgICAgICAgICAgICAgIG1hbnlfdGltZXNfb2sgfD0gYyAhPSAnPyc7CisrCisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpCisrICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyonCisrICAgICAgICAgICAgICAgICAgICB8fCAoIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSAmJiAoYyA9PSAnKycgfHwgYyA9PSAnPycpKSkKKysgICAgICAgICAgICAgICAgICA7CisrCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0JLX1BMVVNfUU0gICYmICBjID09ICdcXCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrICAgICAgICAgICAgICAgICAgICBpZiAoIShjMSA9PSAnKycgfHwgYzEgPT0gJz8nKSkKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgICAgYyA9IGMxOworKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIElmIHdlIGdldCBoZXJlLCB3ZSBmb3VuZCBhbm90aGVyIHJlcGVhdCBjaGFyYWN0ZXIuICAqLworKyAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBTdGFyLCBldGMuIGFwcGxpZWQgdG8gYW4gZW1wdHkgcGF0dGVybiBpcyBlcXVpdmFsZW50CisrICAgICAgICAgICAgICAgdG8gYW4gZW1wdHkgcGF0dGVybi4gICovCisrICAgICAgICAgICAgaWYgKCFsYXN0c3RhcnQpCisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAvKiBOb3cgd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB6ZXJvIG1hdGNoZXMgaXMgYWxsb3dlZAorKyAgICAgICAgICAgICAgIGFuZCBhbHNvIHdoZXRoZXIgb3Igbm90IHR3byBvciBtb3JlIG1hdGNoZXMgaXMgYWxsb3dlZC4gICovCisrICAgICAgICAgICAgaWYgKG1hbnlfdGltZXNfb2spCisrICAgICAgICAgICAgICB7IC8qIE1vcmUgdGhhbiBvbmUgcmVwZXRpdGlvbiBpcyBhbGxvd2VkLCBzbyBwdXQgaW4gYXQgdGhlCisrICAgICAgICAgICAgICAgICAgIGVuZCBhIGJhY2t3YXJkIHJlbGF0aXZlIGp1bXAgZnJvbSBgYicgdG8gYmVmb3JlIHRoZSBuZXh0CisrICAgICAgICAgICAgICAgICAgIGp1bXAgd2UncmUgZ29pbmcgdG8gcHV0IGluIGJlbG93ICh3aGljaCBqdW1wcyBmcm9tCisrICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCB0byBhZnRlciB0aGlzIGp1bXApLgorKworKyAgICAgICAgICAgICAgICAgICBCdXQgaWYgd2UgYXJlIGF0IHRoZSBgKicgaW4gdGhlIGV4YWN0IHNlcXVlbmNlIGAuKlxuJywKKysgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGFuIHVuY29uZGl0aW9uYWwganVtcCBiYWNrd2FyZHMgdG8gdGhlIC4sCisrICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcC4gIFRoaXMgd2F5IHdlIG9ubHkKKysgICAgICAgICAgICAgICAgICAgcHVzaCBhIGZhaWx1cmUgcG9pbnQgb25jZSwgaW5zdGVhZCBvZiBldmVyeSB0aW1lCisrICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIGxvb3AuICAqLworKyAgICAgICAgICAgICAgICBhc3NlcnQgKHAgLSAxID4gcGF0dGVybik7CisrCisrICAgICAgICAgICAgICAgIC8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgdGhlIGp1bXAuICAqLworKyAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrCisrICAgICAgICAgICAgICAgIC8qIFdlIGtub3cgd2UgYXJlIG5vdCBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwYXR0ZXJuLAorKyAgICAgICAgICAgICAgICAgICBiZWNhdXNlIGxhc3RzdGFydCB3YXMgbm9uemVyby4gIEFuZCB3ZSd2ZSBhbHJlYWR5CisrICAgICAgICAgICAgICAgICAgIGluY3JlbWVudGVkIGBwJywgYnkgdGhlIHdheSwgdG8gYmUgdGhlIGNoYXJhY3RlciBhZnRlcgorKyAgICAgICAgICAgICAgICAgICB0aGUgYConLiAgRG8gd2UgaGF2ZSB0byBkbyBzb21ldGhpbmcgYW5hbG9nb3VzIGhlcmUKKysgICAgICAgICAgICAgICAgICAgZm9yIG51bGwgYnl0ZXMsIGJlY2F1c2Ugb2YgUkVfRE9UX05PVF9OVUxMPyAgKi8KKysgICAgICAgICAgICAgICAgaWYgKFRSQU5TTEFURSAoKihwIC0gMikpID09IFRSQU5TTEFURSAoJy4nKQorKwkJICAgICYmIHplcm9fdGltZXNfb2sKKysgICAgICAgICAgICAgICAgICAgICYmIHAgPCBwZW5kICYmIFRSQU5TTEFURSAoKnApID09IFRSQU5TTEFURSAoJ1xuJykKKysgICAgICAgICAgICAgICAgICAgICYmICEoc3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorKyAgICAgICAgICAgICAgICAgIHsgLyogV2UgaGF2ZSAuKlxuLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIFNUT1JFX0pVTVAgKGp1bXAsIGIsIGxhc3RzdGFydCk7CisrICAgICAgICAgICAgICAgICAgICBrZWVwX3N0cmluZ19wID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAvKiBBbnl0aGluZyBlbHNlLiAgKi8KKysgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChtYXliZV9wb3BfanVtcCwgYiwgbGFzdHN0YXJ0IC0KKysJCQkgICAgICAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpKTsKKysKKysgICAgICAgICAgICAgICAgLyogV2UndmUgYWRkZWQgbW9yZSBzdHVmZiB0byB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBPbiBmYWlsdXJlLCBqdW1wIGZyb20gbGFzdHN0YXJ0IHRvIGIgKyAzLCB3aGljaCB3aWxsIGJlIHRoZQorKyAgICAgICAgICAgICAgIGVuZCBvZiB0aGUgYnVmZmVyIGFmdGVyIHRoaXMganVtcCBpcyBpbnNlcnRlZC4gICovCisrCSAgICAvKiBpZmRlZiBXQ0hBUiwgJ2IgKyAxICsgT0ZGU0VUX0FERFJFU1NfU0laRScgaW5zdGVhZCBvZgorKwkgICAgICAgJ2IgKyAzJy4gICovCisrICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgIElOU0VSVF9KVU1QIChrZWVwX3N0cmluZ19wID8gb25fZmFpbHVyZV9rZWVwX3N0cmluZ19qdW1wCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBvbl9mYWlsdXJlX2p1bXAsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCwgYiArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICBwZW5kaW5nX2V4YWN0ID0gMDsKKysgICAgICAgICAgICBiICs9IDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgIGlmICghemVyb190aW1lc19vaykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogQXQgbGVhc3Qgb25lIHJlcGV0aXRpb24gaXMgcmVxdWlyZWQsIHNvIGluc2VydCBhCisrICAgICAgICAgICAgICAgICAgIGBkdW1teV9mYWlsdXJlX2p1bXAnIGJlZm9yZSB0aGUgaW5pdGlhbAorKyAgICAgICAgICAgICAgICAgICBgb25fZmFpbHVyZV9qdW1wJyBpbnN0cnVjdGlvbiBvZiB0aGUgbG9vcC4gVGhpcworKyAgICAgICAgICAgICAgICAgICBlZmZlY3RzIGEgc2tpcCBvdmVyIHRoYXQgaW5zdHJ1Y3Rpb24gdGhlIGZpcnN0IHRpbWUKKysgICAgICAgICAgICAgICAgICAgd2UgaGl0IHRoYXQgbG9vcC4gICovCisrICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgSU5TRVJUX0pVTVAgKGR1bW15X2ZhaWx1cmVfanVtcCwgbGFzdHN0YXJ0LCBsYXN0c3RhcnQgKworKwkJCSAgICAgMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2UgJy4nOgorKyAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICBCVUZfUFVTSCAoYW55Y2hhcik7CisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgY2FzZSAnWyc6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICBib29sZWFuIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrI2lmZGVmIFdDSEFSCisrCSAgICBDSEFSX1QgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyNlbHNlCisrCSAgICB1bnNpZ25lZCBpbnQgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyNlbmRpZgorKyAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysjaWZkZWYgV0NIQVIKKysJICAgIC8qIFdlIGFzc3VtZSBhIGNoYXJzZXQoX25vdCkgc3RydWN0dXJlIGFzIGEgd2NoYXJfdCBhcnJheS4KKysJICAgICAgIGNoYXJzZXRbMF0gPSAocmVfb3Bjb2RlX3QpIGNoYXJzZXQoX25vdCkKKysgICAgICAgICAgICAgICBjaGFyc2V0WzFdID0gbCAoPSBsZW5ndGggb2YgY2hhcl9jbGFzc2VzKQorKyAgICAgICAgICAgICAgIGNoYXJzZXRbMl0gPSBtICg9IGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9scykKKysgICAgICAgICAgICAgICBjaGFyc2V0WzNdID0gbiAoPSBsZW5ndGggb2YgZXF1aXZhbGVuY2VfY2xhc3NlcykKKysJICAgICAgIGNoYXJzZXRbNF0gPSBvICg9IGxlbmd0aCBvZiBjaGFyX3JhbmdlcykKKysJICAgICAgIGNoYXJzZXRbNV0gPSBwICg9IGxlbmd0aCBvZiBjaGFycykKKysKKysgICAgICAgICAgICAgICBjaGFyc2V0WzZdID0gY2hhcl9jbGFzcyAod2N0eXBlX3QpCisrICAgICAgICAgICAgICAgY2hhcnNldFs2K0NIQVJfQ0xBU1NfU0laRV0gPSBjaGFyX2NsYXNzICh3Y3R5cGVfdCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrICAgICAgICAgICAgICAgY2hhcnNldFtsKzVdICA9IGNoYXJfY2xhc3MgKHdjdHlwZV90KQorKworKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCs2XSAgPSBjb2xsYXRpbmdfc3ltYm9sICh3Y2hhcl90KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysgICAgICAgICAgICAgICBjaGFyc2V0W2wrbSs1XSAgPSBjb2xsYXRpbmdfc3ltYm9sICh3Y2hhcl90KQorKwkJCQkJaWZkZWYgX0xJQkMgd2UgdXNlIHRoZSBpbmRleCBpZgorKwkJCQkJX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CIGluc3RlYWQgb2YKKysJCQkJCXdjaGFyX3Qgc3RyaW5nLgorKworKyAgICAgICAgICAgICAgIGNoYXJzZXRbbCttKzZdICA9IGVxdWl2YWxlbmNlX2NsYXNzZXMgKHdjaGFyX3QpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrICAgICAgICAgICAgICAgY2hhcnNldFtsK20rbis1XSAgPSBlcXVpdmFsZW5jZV9jbGFzc2VzICh3Y2hhcl90KQorKwkJCQkJaWZkZWYgX0xJQkMgd2UgdXNlIHRoZSBpbmRleCBpbgorKwkJCQkJX05MX0NPTExBVEVfV0VJR0hUIGluc3RlYWQgb2YKKysJCQkJCXdjaGFyX3Qgc3RyaW5nLgorKworKwkgICAgICAgY2hhcnNldFtsK20rbis2XSA9IHJhbmdlX3N0YXJ0CisrCSAgICAgICBjaGFyc2V0W2wrbStuKzddID0gcmFuZ2VfZW5kCisrCSAgICAgICAgICAgICAgICAgICAgICAgLi4uCisrCSAgICAgICBjaGFyc2V0W2wrbStuKzJvKzRdID0gcmFuZ2Vfc3RhcnQKKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rNV0gPSByYW5nZV9lbmQKKysJCQkJCWlmZGVmIF9MSUJDIHdlIHVzZSB0aGUgdmFsdWUgbG9va2VkIHVwCisrCQkJCQlpbiBfTkxfQ09MTEFURV9DT0xMU0VRIGluc3RlYWQgb2YKKysJCQkJCXdjaGFyX3QgY2hhcmFjdGVyLgorKworKwkgICAgICAgY2hhcnNldFtsK20rbisybys2XSA9IGNoYXIKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4KKysJICAgICAgIGNoYXJzZXRbbCttK24rMm8rcCs1XSA9IGNoYXIKKysKKysJICAgICAqLworKworKwkgICAgLyogV2UgbmVlZCBhdCBsZWFzdCA2IHNwYWNlczogdGhlIG9wY29kZSwgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGNoYXJfY2xhc3NlcywgdGhlIGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9scywgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGVxdWl2YWxlbmNlX2NsYXNzZXMsIHRoZSBsZW5ndGggb2YgY2hhcl9yYW5nZXMsIHRoZSBsZW5ndGggb2YKKysgICAgICAgICAgICAgICBjaGFycy4gICovCisrCSAgICBHRVRfQlVGRkVSX1NQQUNFICg2KTsKKysKKysJICAgIC8qIFNhdmUgYiBhcyBsYXN0c3RhcnQuIEFuZCBXZSB1c2UgbGFzdHN0YXJ0IGFzIHRoZSBwb2ludGVyCisrCSAgICAgICB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgY2hhcnNldCBoZXJlLgorKwkgICAgICAgSW4gb3RoZXIgd29yZHMsIGxhc3RzdGFydFtpXSBpbmRpY2F0ZXMgY2hhcnNldFtpXS4gICovCisrICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysKKysgICAgICAgICAgICAvKiBXZSB0ZXN0IGAqcCA9PSAnXicgdHdpY2UsIGluc3RlYWQgb2YgdXNpbmcgYW4gaWYKKysgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCBvbmUgQlVGX1BVU0guICAqLworKyAgICAgICAgICAgIEJVRl9QVVNIICgqcCA9PSAnXicgPyBjaGFyc2V0X25vdCA6IGNoYXJzZXQpOworKyAgICAgICAgICAgIGlmICgqcCA9PSAnXicpCisrICAgICAgICAgICAgICBwKys7CisrCisrICAgICAgICAgICAgLyogUHVzaCB0aGUgbGVuZ3RoIG9mIGNoYXJfY2xhc3NlcywgdGhlIGxlbmd0aCBvZgorKyAgICAgICAgICAgICAgIGNvbGxhdGluZ19zeW1ib2xzLCB0aGUgbGVuZ3RoIG9mIGVxdWl2YWxlbmNlX2NsYXNzZXMsIHRoZQorKyAgICAgICAgICAgICAgIGxlbmd0aCBvZiBjaGFyX3JhbmdlcyBhbmQgdGhlIGxlbmd0aCBvZiBjaGFycy4gICovCisrICAgICAgICAgICAgQlVGX1BVU0hfMyAoMCwgMCwgMCk7CisrICAgICAgICAgICAgQlVGX1BVU0hfMiAoMCwgMCk7CisrCisrICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICAqLworKyAgICAgICAgICAgIHAxID0gcDsKKysKKysgICAgICAgICAgICAvKiBjaGFyc2V0X25vdCBtYXRjaGVzIG5ld2xpbmUgYWNjb3JkaW5nIHRvIGEgc3ludGF4IGJpdC4gICovCisrICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgYlstNl0gPT0gY2hhcnNldF9ub3QKKysgICAgICAgICAgICAgICAgJiYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkpCisrCSAgICAgIHsKKysJCUJVRl9QVVNIKCdcbicpOworKwkJbGFzdHN0YXJ0WzVdKys7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCSAgICAgIH0KKysKKysgICAgICAgICAgICAvKiBSZWFkIGluIGNoYXJhY3RlcnMgYW5kIHJhbmdlcywgc2V0dGluZyBtYXAgYml0cy4gICovCisrICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYyk7CisrCisrICAgICAgICAgICAgICAgIC8qIFwgbWlnaHQgZXNjYXBlIGNoYXJhY3RlcnMgaW5zaWRlIFsuLi5dIGFuZCBbXi4uLl0uICAqLworKyAgICAgICAgICAgICAgICBpZiAoKHN5bnRheCAmIFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMpICYmIGMgPT0gJ1xcJykKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VFU0NBUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMxKTsKKysJCSAgICBCVUZfUFVTSChjMSk7CisrCQkgICAgbGFzdHN0YXJ0WzVdKys7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJzICAqLworKwkJICAgIHJhbmdlX3N0YXJ0ID0gYzE7CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qIENvdWxkIGJlIHRoZSBlbmQgb2YgdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIElmIGl0J3MKKysgICAgICAgICAgICAgICAgICAgbm90IChpLmUuLCB3aGVuIHRoZSBicmFja2V0IGV4cHJlc3Npb24gaXMgYFtdJyBzbworKyAgICAgICAgICAgICAgICAgICBmYXIpLCB0aGUgJ10nIGNoYXJhY3RlciBiaXQgZ2V0cyBzZXQgd2F5IGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ10nICYmIHAgIT0gcDEgKyAxKQorKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAvKiBMb29rIGFoZWFkIHRvIHNlZSBpZiBpdCdzIGEgcmFuZ2Ugd2hlbiB0aGUgbGFzdCB0aGluZworKyAgICAgICAgICAgICAgICAgICB3YXMgYSBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICBpZiAoaGFkX2NoYXJfY2xhc3MgJiYgYyA9PSAnLScgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRVJBTkdFKTsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyOiBpZiB0aGlzIGlzIGEgaHlwaGVuIG5vdCBhdCB0aGUKKysgICAgICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgYSBsaXN0LCB0aGVuIGl0J3MgdGhlIHJhbmdlCisrICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGMgPT0gJy0nCisrICAgICAgICAgICAgICAgICAgICAmJiAhKHAgLSAyID49IHBhdHRlcm4gJiYgcFstMl0gPT0gJ1snKQorKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMyA+PSBwYXR0ZXJuICYmIHBbLTNdID09ICdbJyAmJiBwWy0yXSA9PSAnXicpCisrICAgICAgICAgICAgICAgICAgICAmJiAqcCAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgcmVnX2VycmNvZGVfdCByZXQ7CisrCQkgICAgLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciByYW5nZV9zdGFydCBhbmQgcmFuZ2VfZW5kLiAgKi8KKysJCSAgICBHRVRfQlVGRkVSX1NQQUNFICgyKTsKKysJCSAgICAvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICBiICs9IDI7CisrICAgICAgICAgICAgICAgICAgICByZXQgPSB3Y3NfY29tcGlsZV9yYW5nZSAocmFuZ2Vfc3RhcnQsICZwLCBwZW5kLCB0cmFuc2xhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW50YXgsIGIsIGxhc3RzdGFydCk7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysgICAgICAgICAgICAgICAgICAgIHJhbmdlX3N0YXJ0ID0gMHhmZmZmZmZmZjsKKysgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBbMF0gPT0gJy0nICYmIHBbMV0gIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsgLyogVGhpcyBoYW5kbGVzIHJhbmdlcyBtYWRlIHVwIG9mIGNoYXJhY3RlcnMgb25seS4gICovCisrICAgICAgICAgICAgICAgICAgICByZWdfZXJyY29kZV90IHJldDsKKysKKysJCSAgICAvKiBNb3ZlIHBhc3QgdGhlIGAtJy4gICovCisrICAgICAgICAgICAgICAgICAgICBQQVRGRVRDSCAoYzEpOworKwkJICAgIC8qIEFsbG9jYXRlIHRoZSBzcGFjZSBmb3IgcmFuZ2Vfc3RhcnQgYW5kIHJhbmdlX2VuZC4gICovCisrCQkgICAgR0VUX0JVRkZFUl9TUEFDRSAoMik7CisrCQkgICAgLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgYiArPSAyOworKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gd2NzX2NvbXBpbGVfcmFuZ2UgKGMsICZwLCBwZW5kLCB0cmFuc2xhdGUsIHN5bnRheCwgYiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RzdGFydCk7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysJCSAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBTZWUgaWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBvc3NpYmxlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnOicpCisrICAgICAgICAgICAgICAgICAgeyAvKiBMZWF2ZSByb29tIGZvciB0aGUgbnVsbC4gICovCisrICAgICAgICAgICAgICAgICAgICBjaGFyIHN0cltDSEFSX0NMQVNTX01BWF9MRU5HVEggKyAxXTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgIGMxID0gMDsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbOicuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPT0gJzonICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCQkJaWYgKGMxIDwgQ0hBUl9DTEFTU19NQVhfTEVOR1RIKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIGlzbid0IGEgd29yZCBicmFja2V0ZWQgYnkgYFs6JyBhbmQgYDpdJzoKKysgICAgICAgICAgICAgICAgICAgICAgIHVuZG8gdGhlIGVuZGluZyBjaGFyYWN0ZXIsIHRoZSBsZXR0ZXJzLCBhbmQgbGVhdmUKKysgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsZWFkaW5nIGA6JyBhbmQgYFsnIChidXQgc3RvcmUgdGhlbSBhcyBjaGFyYWN0ZXIpLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIGlmIChjID09ICc6JyAmJiAqcCA9PSAnXScpCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysJCQl3Y3R5cGVfdCB3dDsKKysJCQl1aW50cHRyX3QgYWxpZ25lZHA7CisrCisrCQkJLyogUXVlcnkgdGhlIGNoYXJhY3RlciBjbGFzcyBhcyB3Y3R5cGVfdC4gICovCisrCQkJd3QgPSBJU19DSEFSX0NMQVNTIChzdHIpOworKwkJCWlmICh3dCA9PSAwKQorKwkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ1RZUEUpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBwZW5kKSBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VCUkFDSyk7CisrCisrCQkJLyogQWxsb2NhdGUgdGhlIHNwYWNlIGZvciBjaGFyYWN0ZXIgY2xhc3MuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UoQ0hBUl9DTEFTU19TSVpFKTsKKysJCQkvKiBVcGRhdGUgdGhlIHBvaW50ZXIgdG8gaW5kaWNhdGUgZW5kIG9mIGJ1ZmZlci4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgYiArPSBDSEFSX0NMQVNTX1NJWkU7CisrCQkJLyogTW92ZSBkYXRhIHdoaWNoIGZvbGxvdyBjaGFyYWN0ZXIgY2xhc3NlcworKwkJCSAgICBub3QgdG8gdmlvbGF0ZSB0aGUgZGF0YS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0X3NwYWNlKENIQVJfQ0xBU1NfU0laRSwKKysJCQkJICAgICBsYXN0c3RhcnQgKyA2ICsgbGFzdHN0YXJ0WzFdLAorKwkJCQkgICAgIGIgLSAxKTsKKysJCQlhbGlnbmVkcCA9ICgodWludHB0cl90KShsYXN0c3RhcnQgKyA2ICsgbGFzdHN0YXJ0WzFdKQorKwkJCQkgICAgKyBfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKQorKwkJCSAgCSAgICAmIH4odWludHB0cl90KShfX2FsaWdub2ZfXyh3Y3R5cGVfdCkgLSAxKTsKKysJCQkvKiBTdG9yZSB0aGUgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAqKCh3Y3R5cGVfdCopYWxpZ25lZHApID0gd3Q7CisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVXBkYXRlIGxlbmd0aCBvZiBjaGFyX2NsYXNzZXMgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnRbMV0gKz0gQ0hBUl9DTEFTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKCc6Jyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0WzVdICs9IDI7IC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkJcmFuZ2Vfc3RhcnQgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICgqcCA9PSAnPScKKysJCQkJCQkJICB8fCAqcCA9PSAnLicpKQorKwkJICB7CisrCQkgICAgQ0hBUl9UIHN0clsxMjhdOwkvKiBTaG91bGQgYmUgbGFyZ2UgZW5vdWdoLiAgKi8KKysJCSAgICBDSEFSX1QgZGVsaW0gPSAqcDsgLyogJz0nIG9yICcuJyAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgdWludDMyX3QgbnJ1bGVzID0KKysJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZgorKwkJICAgIFBBVEZFVENIIChjKTsKKysJCSAgICBjMSA9IDA7CisrCisrCQkgICAgLyogSWYgcGF0dGVybiBpcyBgW1s9JyBvciAnW1suJy4gICovCisrCQkgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJICAgIGZvciAoOzspCisrCQkgICAgICB7CisrCQkJUEFURkVUQ0ggKGMpOworKwkJCWlmICgoYyA9PSBkZWxpbSAmJiAqcCA9PSAnXScpIHx8IHAgPT0gcGVuZCkKKysJCQkgIGJyZWFrOworKwkJCWlmIChjMSA8IHNpemVvZiAoc3RyKSAtIDEpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgICBzdHJbYzFdID0gJ1wwJzsKKysKKysJCSAgICBpZiAoYyA9PSBkZWxpbSAmJiAqcCA9PSAnXScgJiYgc3RyWzBdICE9ICdcMCcpCisrCQkgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGksIG9mZnNldDsKKysJCQkvKiBJZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBkYXRhIHdlIHVzZSB0aGUgZGVmYXVsdAorKwkJCSAgIGNvbGxhdGlvbiBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBpcyBpbiBhIGNsYXNzCisrCQkJICAgYnkgaXRzZWxmLiAgSXQgYWxzbyBtZWFucyB0aGF0IEFTQ0lJIGlzIHRoZQorKwkJCSAgIGNoYXJhY3RlciBzZXQgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIKKysJCQkgICB3aXRoIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgbXVsdGlieXRlCisrCQkJICAgcmVwcmVzZW50YXRpb24uICAqLworKworKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vdCBkZWZpbmVkIF9MSUJDLCB3ZSBwdXNoIHRoZSBuYW1lIGFuZAorKwkJCSAgIGBcMCcgZm9yIHRoZSBzYWtlIG9mIG1hdGNoaW5nIHBlcmZvcm1hbmNlLiAgKi8KKysJCQlpbnQgZGF0YXNpemUgPSBjMSArIDE7CisrCisrIyBpZmRlZiBfTElCQworKwkJCWludDMyX3QgaWR4ID0gMDsKKysJCQlpZiAobnJ1bGVzID09IDApCisrIyBlbmRpZgorKwkJCSAgeworKwkJCSAgICBpZiAoYzEgIT0gMSkKKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysJCQkgIH0KKysjIGlmZGVmIF9MSUJDCisrCQkJZWxzZQorKwkJCSAgeworKwkJCSAgICBjb25zdCBpbnQzMl90ICp0YWJsZTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqd2VpZ2h0czsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqZXh0cmE7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKmluZGlyZWN0OworKwkJCSAgICB3aW50X3QgKmNwOworKworKwkJCSAgICBpZihkZWxpbSA9PSAnPScpCisrCQkJICAgICAgeworKwkJCQkvKiBXZSBwdXNoIHRoZSBpbmRleCBmb3IgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworKwkJCQljcCA9ICh3aW50X3QqKXN0cjsKKysKKysJCQkJdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX1RBQkxFV0MpOworKwkJCQl3ZWlnaHRzID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9XRUlHSFRXQyk7CisrCQkJCWV4dHJhID0gKGNvbnN0IHdpbnRfdCAqKQorKwkJCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorKwkJCQkJICAgICAgIF9OTF9DT0xMQVRFX0VYVFJBV0MpOworKwkJCQlpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQyk7CisrCisrCQkJCWlkeCA9IEZJTkRJRFggKHRhYmxlLCBpbmRpcmVjdCwgZXh0cmEsICZjcCwgMSk7CisrCQkJCWlmIChpZHggPT0gMCB8fCBjcCA8ICh3aW50X3QqKSBzdHIgKyBjMSkKKysJCQkJICAvKiBUaGlzIGlzIG5vIHZhbGlkIGNoYXJhY3Rlci4gICovCisrCQkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJCXN0clswXSA9ICh3Y2hhcl90KWlkeDsKKysJCQkgICAgICB9CisrCQkJICAgIGVsc2UgLyogZGVsaW0gPT0gJy4nICovCisrCQkJICAgICAgeworKwkJCQkvKiBXZSBwdXNoIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZQorKwkJCQkgICBmb3IgY29sbGF0aW5nIHN5bWJvbC4gICovCisrCQkJCWludDMyX3QgdGFibGVfc2l6ZTsKKysJCQkJY29uc3QgaW50MzJfdCAqc3ltYl90YWJsZTsKKysJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZXh0cmE7CisrCQkJCWludDMyX3QgaWR4OworKwkJCQlpbnQzMl90IGVsZW07CisrCQkJCWludDMyX3Qgc2Vjb25kOworKwkJCQlpbnQzMl90IGhhc2g7CisrCQkJCWNoYXIgY2hhcl9zdHJbYzFdOworKworKwkJCQkvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIG5hbWUgdG8gYSBzaW5nbGUtYnl0ZQorKwkJCQkgICBzdHJpbmcuICBUaGlzIGlzIHBvc3NpYmxlIHNpbmNlIHRoZSBuYW1lcworKwkJCQkgICBjb25zaXN0IG9mIEFTQ0lJIGNoYXJhY3RlcnMgYW5kIHRoZSBpbnRlcm5hbAorKwkJCQkgICByZXByZXNlbnRhdGlvbiBpcyBVQ1M0LiAgKi8KKysJCQkJZm9yIChpID0gMDsgaSA8IGMxOyArK2kpCisrCQkJCSAgY2hhcl9zdHJbaV0gPSBzdHJbaV07CisrCisrCQkJCXRhYmxlX3NpemUgPQorKwkJCQkgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsCisrCQkJCQkJICAgIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIpOworKwkJCQlzeW1iX3RhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgICAgICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIpOworKwkJCQlleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkgICAgICAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKysKKysJCQkJLyogTG9jYXRlIHRoZSBjaGFyYWN0ZXIgaW4gdGhlIGhhc2hpbmcgdGFibGUuICAqLworKwkJCQloYXNoID0gZWxlbV9oYXNoIChjaGFyX3N0ciwgYzEpOworKworKwkJCQlpZHggPSAwOworKwkJCQllbGVtID0gaGFzaCAlIHRhYmxlX3NpemU7CisrCQkJCXNlY29uZCA9IGhhc2ggJSAodGFibGVfc2l6ZSAtIDIpOworKwkJCQl3aGlsZSAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKysJCQkJICB7CisrCQkJCSAgICAvKiBGaXJzdCBjb21wYXJlIHRoZSBoYXNoaW5nIHZhbHVlLiAgKi8KKysJCQkJICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSBoYXNoCisrCQkJCQkmJiBjMSA9PSBleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV1dCisrCQkJCQkmJiBtZW1jbXAgKGNoYXJfc3RyLAorKwkJCQkJCSAgICZleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV0KKysJCQkJCQkJICsgMV0sIGMxKSA9PSAwKQorKwkJCQkgICAgICB7CisrCQkJCQkvKiBZZXAsIHRoaXMgaXMgdGhlIGVudHJ5LiAgKi8KKysJCQkJCWlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0gKyAxXTsKKysJCQkJCWlkeCArPSAxICsgZXh0cmFbaWR4XTsKKysJCQkJCWJyZWFrOworKwkJCQkgICAgICB9CisrCisrCQkJCSAgICAvKiBOZXh0IGVudHJ5LiAgKi8KKysJCQkJICAgIGVsZW0gKz0gc2Vjb25kOworKwkJCQkgIH0KKysKKysJCQkJaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisrCQkJCSAgeworKwkJCQkgICAgLyogQ29tcHV0ZSB0aGUgaW5kZXggb2YgdGhlIGJ5dGUgc2VxdWVuY2UKKysJCQkJICAgICAgIGluIHRoZSB0YWJsZS4gICovCisrCQkJCSAgICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisrCQkJCSAgICAvKiBBZGp1c3QgZm9yIHRoZSBhbGlnbm1lbnQuICAqLworKwkJCQkgICAgaWR4ID0gKGlkeCArIDMpICYgfjM7CisrCisrCQkJCSAgICBzdHJbMF0gPSAod2NoYXJfdCkgaWR4ICsgNDsKKysJCQkJICB9CisrCQkJCWVsc2UgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDAgJiYgYzEgPT0gMSkKKysJCQkJICB7CisrCQkJCSAgICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhCisrCQkJCSAgICAgICBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworKwkJCQkgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCQkJICAgIEJVRl9QVVNIKHN0clswXSk7CisrCQkJCSAgICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjaGFyYWN0ZXJzICAqLworKwkJCQkgICAgbGFzdHN0YXJ0WzVdKys7CisrCQkJCSAgICByYW5nZV9zdGFydCA9IHN0clswXTsKKysKKysJCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUKKysJCQkJICAgICAgIGNvbGxhdGluZyBzeW1ib2wuICAqLworKwkJCQkgICAgUEFURkVUQ0ggKGMpOworKwkJCQkgICAgLyogZXhpdCBmcm9tIHRoZSBzd2l0Y2ggYmxvY2suICAqLworKwkJCQkgICAgY29udGludWU7CisrCQkJCSAgfQorKwkJCQllbHNlCisrCQkJCSAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCQkJICAgICAgfQorKwkJCSAgICBkYXRhc2l6ZSA9IDE7CisrCQkJICB9CisrIyBlbmRpZgorKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyAob3IgY29sbGF0aW5nIHN5bWJvbCkuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkvKiBBbGxvY2F0ZSB0aGUgc3BhY2UgZm9yIHRoZSBlcXVpdmFsZW5jZSBjbGFzcworKwkJCSAgIChvciBjb2xsYXRpbmcgc3ltYm9sKSAoYW5kICdcMCcgaWYgbmVlZGVkKS4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRShkYXRhc2l6ZSk7CisrCQkJLyogVXBkYXRlIHRoZSBwb2ludGVyIHRvIGluZGljYXRlIGVuZCBvZiBidWZmZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gZGF0YXNpemU7CisrCisrCQkJaWYgKGRlbGltID09ICc9JykKKysJCQkgIHsgLyogZXF1aXZhbGVuY2UgY2xhc3MgICovCisrCQkJICAgIC8qIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIGNoYXJfcmFuZ2VzLAorKwkJCSAgICAgICB3aGljaCBpcyBuZXh0IHRvIGVxdWl2YWxlbmNlX2NsYXNzZXMuICAqLworKwkJCSAgICBvZmZzZXQgPSBsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0KKysJCQkgICAgICArIGxhc3RzdGFydFszXSArNjsKKysJCQkgICAgLyogSW5zZXJ0IHNwYWNlLiAgKi8KKysJCQkgICAgaW5zZXJ0X3NwYWNlKGRhdGFzaXplLCBsYXN0c3RhcnQgKyBvZmZzZXQsIGIgLSAxKTsKKysKKysJCQkgICAgLyogV3JpdGUgdGhlIGVxdWl2YWxlbmNlX2NsYXNzIGFuZCBcMC4gICovCisrCQkJICAgIGZvciAoaSA9IDAgOyBpIDwgZGF0YXNpemUgOyBpKyspCisrCQkJICAgICAgbGFzdHN0YXJ0W29mZnNldCArIGldID0gc3RyW2ldOworKworKwkJCSAgICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBlcXVpdmFsZW5jZV9jbGFzc2VzLiAgKi8KKysJCQkgICAgbGFzdHN0YXJ0WzNdICs9IGRhdGFzaXplOworKwkJCSAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrCQkJICB9CisrCQkJZWxzZSAvKiBkZWxpbSA9PSAnLicgKi8KKysJCQkgIHsgLyogY29sbGF0aW5nIHN5bWJvbCAgKi8KKysJCQkgICAgLyogQ2FsY3VsYXRlIHRoZSBvZmZzZXQgb2YgdGhlIGVxdWl2YWxlbmNlX2NsYXNzZXMsCisrCQkJICAgICAgIHdoaWNoIGlzIG5leHQgdG8gY29sbGF0aW5nX3N5bWJvbHMuICAqLworKwkJCSAgICBvZmZzZXQgPSBsYXN0c3RhcnRbMV0gKyBsYXN0c3RhcnRbMl0gKyA2OworKwkJCSAgICAvKiBJbnNlcnQgc3BhY2UgYW5kIHdyaXRlIHRoZSBjb2xsYXRpb25nX3N5bWJvbAorKwkJCSAgICAgICBhbmQgXDAuICAqLworKwkJCSAgICBpbnNlcnRfc3BhY2UoZGF0YXNpemUsIGxhc3RzdGFydCArIG9mZnNldCwgYi0xKTsKKysJCQkgICAgZm9yIChpID0gMCA7IGkgPCBkYXRhc2l6ZSA7IGkrKykKKysJCQkgICAgICBsYXN0c3RhcnRbb2Zmc2V0ICsgaV0gPSBzdHJbaV07CisrCisrCQkJICAgIC8qIEluIHJlX21hdGNoXzJfaW50ZXJuYWwgaWYgcmFuZ2Vfc3RhcnQgPCAtMSwgd2UKKysJCQkgICAgICAgYXNzdW1lIC1yYW5nZV9zdGFydCBpcyB0aGUgb2Zmc2V0IG9mIHRoZQorKwkJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sIHdoaWNoIGlzIHNwZWNpZmllZCBhcworKwkJCSAgICAgICB0aGUgY2hhcmFjdGVyIG9mIHRoZSByYW5nZSBzdGFydC4gIFNvIHdlIGFzc2lnbgorKwkJCSAgICAgICAtKGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXSArIDYpIHRvCisrCQkJICAgICAgIHJhbmdlX3N0YXJ0LiAgKi8KKysJCQkgICAgcmFuZ2Vfc3RhcnQgPSAtKGxhc3RzdGFydFsxXSArIGxhc3RzdGFydFsyXSArIDYpOworKwkJCSAgICAvKiBVcGRhdGUgdGhlIGxlbmd0aCBvZiBjb2xsYXRpbmdfc3ltYm9sLiAgKi8KKysJCQkgICAgbGFzdHN0YXJ0WzJdICs9IGRhdGFzaXplOworKwkJCSAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKwkJCSAgfQorKwkJICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAgYzErKzsKKysgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYzEtLSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIFBBVFVORkVUQ0g7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgQlVGX1BVU0ggKGRlbGltKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBsYXN0c3RhcnRbNV0gKz0gMjsgLyogVXBkYXRlIHRoZSBsZW5ndGggb2YgY2hhcmFjdGVycyAgKi8KKysJCQlyYW5nZV9zdGFydCA9IGRlbGltOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCSAgICBCVUZfUFVTSChjKTsKKysJCSAgICBsYXN0c3RhcnRbNV0rKzsgIC8qIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIGNoYXJhY3RlcnMgICovCisrCQkgICAgcmFuZ2Vfc3RhcnQgPSBjOworKyAgICAgICAgICAgICAgICAgIH0KKysJICAgICAgfQorKworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSB0byBwdXNoIGEgY2hhcnNldDogdGhlCisrICAgICAgICAgICAgICAgb3Bjb2RlLCB0aGUgbGVuZ3RoIGNvdW50LCBhbmQgdGhlIGJpdHNldDsgMzQgYnl0ZXMgaW4gYWxsLiAgKi8KKysJICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDM0KTsKKysKKysgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKworKyAgICAgICAgICAgIC8qIFdlIHRlc3QgYCpwID09ICdeJyB0d2ljZSwgaW5zdGVhZCBvZiB1c2luZyBhbiBpZgorKyAgICAgICAgICAgICAgIHN0YXRlbWVudCwgc28gd2Ugb25seSBuZWVkIG9uZSBCVUZfUFVTSC4gICovCisrICAgICAgICAgICAgQlVGX1BVU0ggKCpwID09ICdeJyA/IGNoYXJzZXRfbm90IDogY2hhcnNldCk7CisrICAgICAgICAgICAgaWYgKCpwID09ICdeJykKKysgICAgICAgICAgICAgIHArKzsKKysKKysgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gICovCisrICAgICAgICAgICAgcDEgPSBwOworKworKyAgICAgICAgICAgIC8qIFB1c2ggdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYml0bWFwLiAgKi8KKysgICAgICAgICAgICBCVUZfUFVTSCAoKDEgPDwgQllURVdJRFRIKSAvIEJZVEVXSURUSCk7CisrCisrICAgICAgICAgICAgLyogQ2xlYXIgdGhlIHdob2xlIG1hcC4gICovCisrICAgICAgICAgICAgYnplcm8gKGIsICgxIDw8IEJZVEVXSURUSCkgLyBCWVRFV0lEVEgpOworKworKyAgICAgICAgICAgIC8qIGNoYXJzZXRfbm90IG1hdGNoZXMgbmV3bGluZSBhY2NvcmRpbmcgdG8gYSBzeW50YXggYml0LiAgKi8KKysgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBiWy0yXSA9PSBjaGFyc2V0X25vdAorKyAgICAgICAgICAgICAgICAmJiAoc3ludGF4ICYgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FKSkKKysgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1xuJyk7CisrCisrICAgICAgICAgICAgLyogUmVhZCBpbiBjaGFyYWN0ZXJzIGFuZCByYW5nZXMsIHNldHRpbmcgbWFwIGJpdHMuICAqLworKyAgICAgICAgICAgIGZvciAoOzspCisrICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAvKiBcIG1pZ2h0IGVzY2FwZSBjaGFyYWN0ZXJzIGluc2lkZSBbLi4uXSBhbmQgW14uLi5dLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChzeW50YXggJiBSRV9CQUNLU0xBU0hfRVNDQVBFX0lOX0xJU1RTKSAmJiBjID09ICdcXCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FRVNDQVBFKTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKGMxKTsKKysJCSAgICByYW5nZV9zdGFydCA9IGMxOworKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBDb3VsZCBiZSB0aGUgZW5kIG9mIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICBJZiBpdCdzCisrICAgICAgICAgICAgICAgICAgIG5vdCAoaS5lLiwgd2hlbiB0aGUgYnJhY2tldCBleHByZXNzaW9uIGlzIGBbXScgc28KKysgICAgICAgICAgICAgICAgICAgZmFyKSwgdGhlICddJyBjaGFyYWN0ZXIgYml0IGdldHMgc2V0IHdheSBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICddJyAmJiBwICE9IHAxICsgMSkKKysgICAgICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICAgICAgLyogTG9vayBhaGVhZCB0byBzZWUgaWYgaXQncyBhIHJhbmdlIHdoZW4gdGhlIGxhc3QgdGhpbmcKKysgICAgICAgICAgICAgICAgICAgd2FzIGEgY2hhcmFjdGVyIGNsYXNzLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKGhhZF9jaGFyX2NsYXNzICYmIGMgPT0gJy0nICYmICpwICE9ICddJykKKysgICAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VSQU5HRSk7CisrCisrICAgICAgICAgICAgICAgIC8qIExvb2sgYWhlYWQgdG8gc2VlIGlmIGl0J3MgYSByYW5nZSB3aGVuIHRoZSBsYXN0IHRoaW5nCisrICAgICAgICAgICAgICAgICAgIHdhcyBhIGNoYXJhY3RlcjogaWYgdGhpcyBpcyBhIGh5cGhlbiBub3QgYXQgdGhlCisrICAgICAgICAgICAgICAgICAgIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgbGlzdCwgdGhlbiBpdCdzIHRoZSByYW5nZQorKyAgICAgICAgICAgICAgICAgICBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICAgIGlmIChjID09ICctJworKyAgICAgICAgICAgICAgICAgICAgJiYgIShwIC0gMiA+PSBwYXR0ZXJuICYmIHBbLTJdID09ICdbJykKKysgICAgICAgICAgICAgICAgICAgICYmICEocCAtIDMgPj0gcGF0dGVybiAmJiBwWy0zXSA9PSAnWycgJiYgcFstMl0gPT0gJ14nKQorKyAgICAgICAgICAgICAgICAgICAgJiYgKnAgIT0gJ10nKQorKyAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0CisrICAgICAgICAgICAgICAgICAgICAgID0gYnl0ZV9jb21waWxlX3JhbmdlIChyYW5nZV9zdGFydCwgJnAsIHBlbmQsIHRyYW5zbGF0ZSwKKysJCQkJCSAgICBzeW50YXgsIGIpOworKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBSRUdfTk9FUlJPUikgRlJFRV9TVEFDS19SRVRVUk4gKHJldCk7CisrCQkgICAgcmFuZ2Vfc3RhcnQgPSAweGZmZmZmZmZmOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgZWxzZSBpZiAocFswXSA9PSAnLScgJiYgcFsxXSAhPSAnXScpCisrICAgICAgICAgICAgICAgICAgeyAvKiBUaGlzIGhhbmRsZXMgcmFuZ2VzIG1hZGUgdXAgb2YgY2hhcmFjdGVycyBvbmx5LiAgKi8KKysgICAgICAgICAgICAgICAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworKworKwkJICAgIC8qIE1vdmUgcGFzdCB0aGUgYC0nLiAgKi8KKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjMSk7CisrCisrICAgICAgICAgICAgICAgICAgICByZXQgPSBieXRlX2NvbXBpbGVfcmFuZ2UgKGMsICZwLCBwZW5kLCB0cmFuc2xhdGUsIHN5bnRheCwgYik7CisrICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFJFR19OT0VSUk9SKSBGUkVFX1NUQUNLX1JFVFVSTiAocmV0KTsKKysJCSAgICByYW5nZV9zdGFydCA9IDB4ZmZmZmZmZmY7CisrICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAvKiBTZWUgaWYgd2UncmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBvc3NpYmxlIGNoYXJhY3RlcgorKyAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrCisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN5bnRheCAmIFJFX0NIQVJfQ0xBU1NFUyAmJiBjID09ICdbJyAmJiAqcCA9PSAnOicpCisrICAgICAgICAgICAgICAgICAgeyAvKiBMZWF2ZSByb29tIGZvciB0aGUgbnVsbC4gICovCisrICAgICAgICAgICAgICAgICAgICBjaGFyIHN0cltDSEFSX0NMQVNTX01BWF9MRU5HVEggKyAxXTsKKysKKysgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgIGMxID0gMDsKKysKKysgICAgICAgICAgICAgICAgICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbOicuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKyAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPT0gJzonICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCQkJaWYgKCgoaW50KSBjMSkgPCBDSEFSX0NMQVNTX01BWF9MRU5HVEgpCisrCQkJICBzdHJbYzErK10gPSBjOworKwkJCWVsc2UKKysJCQkgIC8qIFRoaXMgaXMgaW4gYW55IGNhc2UgYW4gaW52YWxpZCBjbGFzcyBuYW1lLiAgKi8KKysJCQkgIHN0clswXSA9ICdcMCc7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIHN0cltjMV0gPSAnXDAnOworKworKyAgICAgICAgICAgICAgICAgICAgLyogSWYgaXNuJ3QgYSB3b3JkIGJyYWNrZXRlZCBieSBgWzonIGFuZCBgOl0nOgorKyAgICAgICAgICAgICAgICAgICAgICAgdW5kbyB0aGUgZW5kaW5nIGNoYXJhY3RlciwgdGhlIGxldHRlcnMsIGFuZCBsZWF2ZQorKyAgICAgICAgICAgICAgICAgICAgICAgdGhlIGxlYWRpbmcgYDonIGFuZCBgWycgKGJ1dCBzZXQgYml0cyBmb3IgdGhlbSkuICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJzonICYmICpwID09ICddJykKKysgICAgICAgICAgICAgICAgICAgICAgeworKyMgaWYgV0lERV9DSEFSX1NVUFBPUlQKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2xvd2VyID0gU1RSRVEgKHN0ciwgImxvd2VyIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc191cHBlciA9IFNUUkVRIChzdHIsICJ1cHBlciIpOworKwkJCXdjdHlwZV90IHd0OworKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaDsKKysKKysJCQl3dCA9IElTX0NIQVJfQ0xBU1MgKHN0cik7CisrCQkJaWYgKHd0ID09IDApCisrCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCAxIDw8IEJZVEVXSURUSDsgKytjaCkKKysJCQkgIHsKKysjICBpZmRlZiBfTElCQworKwkJCSAgICBpZiAoX19pc3djdHlwZSAoX19idG93YyAoY2gpLCB3dCkpCisrCQkJICAgICAgU0VUX0xJU1RfQklUIChjaCk7CisrIyAgZWxzZQorKwkJCSAgICBpZiAoaXN3Y3R5cGUgKGJ0b3djIChjaCksIHd0KSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysjICBlbmRpZgorKworKwkJCSAgICBpZiAodHJhbnNsYXRlICYmIChpc191cHBlciB8fCBpc19sb3dlcikKKysJCQkJJiYgKElTVVBQRVIgKGNoKSB8fCBJU0xPV0VSIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgfQorKworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gdHJ1ZTsKKysjIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2g7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19hbG51bSA9IFNUUkVRIChzdHIsICJhbG51bSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYWxwaGEgPSBTVFJFUSAoc3RyLCAiYWxwaGEiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2JsYW5rID0gU1RSRVEgKHN0ciwgImJsYW5rIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19jbnRybCA9IFNUUkVRIChzdHIsICJjbnRybCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfZGlnaXQgPSBTVFJFUSAoc3RyLCAiZGlnaXQiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX2dyYXBoID0gU1RSRVEgKHN0ciwgImdyYXBoIik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19sb3dlciA9IFNUUkVRIChzdHIsICJsb3dlciIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfcHJpbnQgPSBTVFJFUSAoc3RyLCAicHJpbnQiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3B1bmN0ID0gU1RSRVEgKHN0ciwgInB1bmN0Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc19zcGFjZSA9IFNUUkVRIChzdHIsICJzcGFjZSIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNfdXBwZXIgPSBTVFJFUSAoc3RyLCAidXBwZXIiKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzX3hkaWdpdCA9IFNUUkVRIChzdHIsICJ4ZGlnaXQiKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlTX0NIQVJfQ0xBU1MgKHN0cikpCisrCQkJICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDVFlQRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcy4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoID0gMDsgY2ggPCAxIDw8IEJZVEVXSURUSDsgY2grKykKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKysJCQkgICAgLyogVGhpcyB3YXMgc3BsaXQgaW50byAzIGlmJ3MgdG8KKysJCQkgICAgICAgYXZvaWQgYW4gYXJiaXRyYXJ5IGxpbWl0IGluIHNvbWUgY29tcGlsZXIuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICAgKGlzX2FsbnVtICAmJiBJU0FMTlVNIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfYWxwaGEgICYmIElTQUxQSEEgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19ibGFuayAgJiYgSVNCTEFOSyAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX2NudHJsICAmJiBJU0NOVFJMIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgICBpZiAoICAgKGlzX2RpZ2l0ICAmJiBJU0RJR0lUIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfZ3JhcGggICYmIElTR1JBUEggKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc19sb3dlciAgJiYgSVNMT1dFUiAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3ByaW50ICAmJiBJU1BSSU5UIChjaCkpKQorKwkJCSAgICAgIFNFVF9MSVNUX0JJVCAoY2gpOworKwkJCSAgICBpZiAoICAgKGlzX3B1bmN0ICAmJiBJU1BVTkNUIChjaCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaXNfc3BhY2UgICYmIElTU1BBQ0UgKGNoKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpc191cHBlciAgJiYgSVNVUFBFUiAoY2gpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGlzX3hkaWdpdCAmJiBJU1hESUdJVCAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkgICAgaWYgKCAgIHRyYW5zbGF0ZSAmJiAoaXNfdXBwZXIgfHwgaXNfbG93ZXIpCisrCQkJCSYmIChJU1VQUEVSIChjaCkgfHwgSVNMT1dFUiAoY2gpKSkKKysJCQkgICAgICBTRVRfTElTVF9CSVQgKGNoKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrIyBlbmRpZgkvKiBsaWJjIHx8IHdjdHlwZS5oICovCisrICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCc6Jyk7CisrCQkJcmFuZ2Vfc3RhcnQgPSAnOic7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTICYmIGMgPT0gJ1snICYmICpwID09ICc9JykKKysJCSAgeworKwkJICAgIHVuc2lnbmVkIGNoYXIgc3RyW01CX0xFTl9NQVggKyAxXTsKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgdWludDMyX3QgbnJ1bGVzID0KKysJCSAgICAgIF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrIyBlbmRpZgorKworKwkJICAgIFBBVEZFVENIIChjKTsKKysJCSAgICBjMSA9IDA7CisrCisrCQkgICAgLyogSWYgcGF0dGVybiBpcyBgW1s9Jy4gICovCisrCQkgICAgaWYgKHAgPT0gcGVuZCkgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQlJBQ0spOworKworKwkJICAgIGZvciAoOzspCisrCQkgICAgICB7CisrCQkJUEFURkVUQ0ggKGMpOworKwkJCWlmICgoYyA9PSAnPScgJiYgKnAgPT0gJ10nKSB8fCBwID09IHBlbmQpCisrCQkJICBicmVhazsKKysJCQlpZiAoYzEgPCBNQl9MRU5fTUFYKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrCQkgICAgaWYgKGMgPT0gJz0nICYmICpwID09ICddJyAmJiBzdHJbMF0gIT0gJ1wwJykKKysJCSAgICAgIHsKKysJCQkvKiBJZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBkYXRhIHdlIHVzZSB0aGUgZGVmYXVsdAorKwkJCSAgIGNvbGxhdGlvbiBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBpcyBpbiBhIGNsYXNzCisrCQkJICAgYnkgaXRzZWxmLiAgSXQgYWxzbyBtZWFucyB0aGF0IEFTQ0lJIGlzIHRoZQorKwkJCSAgIGNoYXJhY3RlciBzZXQgYW5kIHRoZXJlZm9yZSB3ZSBjYW5ub3QgaGF2ZSBjaGFyYWN0ZXIKKysJCQkgICB3aXRoIG1vcmUgdGhhbiBvbmUgYnl0ZSBpbiB0aGUgbXVsdGlieXRlCisrCQkJICAgcmVwcmVzZW50YXRpb24uICAqLworKyMgaWZkZWYgX0xJQkMKKysJCQlpZiAobnJ1bGVzID09IDApCisrIyBlbmRpZgorKwkJCSAgeworKwkJCSAgICBpZiAoYzEgIT0gMSkKKysJCQkgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VDT0xMQVRFKTsKKysKKysJCQkgICAgLyogVGhyb3cgYXdheSB0aGUgXSBhdCB0aGUgZW5kIG9mIHRoZSBlcXVpdmFsZW5jZQorKwkJCSAgICAgICBjbGFzcy4gICovCisrCQkJICAgIFBBVEZFVENIIChjKTsKKysKKysJCQkgICAgLyogU2V0IHRoZSBiaXQgZm9yIHRoZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBTRVRfTElTVF9CSVQgKHN0clswXSk7CisrCQkJICB9CisrIyBpZmRlZiBfTElCQworKwkJCWVsc2UKKysJCQkgIHsKKysJCQkgICAgLyogVHJ5IHRvIG1hdGNoIHRoZSBieXRlIHNlcXVlbmNlIGluIGBzdHInIGFnYWluc3QKKysJCQkgICAgICAgdGhvc2Uga25vd24gdG8gdGhlIGNvbGxhdGUgaW1wbGVtZW50YXRpb24uCisrCQkJICAgICAgIEZpcnN0IGZpbmQgb3V0IHdoZXRoZXIgdGhlIGJ5dGVzIGluIGBzdHInIGFyZQorKwkJCSAgICAgICBhY3R1YWxseSBmcm9tIGV4YWN0bHkgb25lIGNoYXJhY3Rlci4gICovCisrCQkJICAgIGNvbnN0IGludDMyX3QgKnRhYmxlOworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp3ZWlnaHRzOworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKysJCQkgICAgY29uc3QgaW50MzJfdCAqaW5kaXJlY3Q7CisrCQkJICAgIGludDMyX3QgaWR4OworKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCA9IHN0cjsKKysJCQkgICAgaW50IGNoOworKworKwkJCSAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX1RBQkxFTUIpOworKwkJCSAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfV0VJR0hUTUIpOworKwkJCSAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0VYVFJBTUIpOworKwkJCSAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopCisrCQkJICAgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0lORElSRUNUTUIpOworKwkJCSAgICBpZHggPSBGSU5ESURYICh0YWJsZSwgaW5kaXJlY3QsIGV4dHJhLCAmY3AsIDEpOworKwkJCSAgICBpZiAoaWR4ID09IDAgfHwgY3AgPCBzdHIgKyBjMSkKKysJCQkgICAgICAvKiBUaGlzIGlzIG5vIHZhbGlkIGNoYXJhY3Rlci4gICovCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIE5vdyB3ZSBoYXZlIHRvIGdvIHRocm91Z2h0IHRoZSB3aG9sZSB0YWJsZQorKwkJCSAgICAgICBhbmQgZmluZCBhbGwgY2hhcmFjdGVycyB3aGljaCBoYXZlIHRoZSBzYW1lCisrCQkJICAgICAgIGZpcnN0IGxldmVsIHdlaWdodC4KKysKKysJCQkgICAgICAgWFhYIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBlbnRpcmVseSBjb3JyZWN0LgorKwkJCSAgICAgICB3ZSB3b3VsZCBoYXZlIHRvIG1hdGNoIG11bHRpYnl0ZSBzZXF1ZW5jZXMKKysJCQkgICAgICAgYnV0IHRoaXMgaXMgbm90IHBvc3NpYmxlIHdpdGggdGhlIGN1cnJlbnQKKysJCQkgICAgICAgaW1wbGVtZW50YXRpb24uICAqLworKwkJCSAgICBmb3IgKGNoID0gMTsgY2ggPCAyNTY7ICsrY2gpCisrCQkJICAgICAgLyogWFhYIFRoaXMgdGVzdCB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQgaWYgd2UKKysJCQkJIHdvdWxkIGFsbG93IG1hdGNoaW5nIG11bHRpYnl0ZSBzZXF1ZW5jZXMuICAqLworKwkJCSAgICAgIGlmICh0YWJsZVtjaF0gPiAwKQorKwkJCQl7CisrCQkJCSAgaW50MzJfdCBpZHgyID0gdGFibGVbY2hdOworKwkJCQkgIHNpemVfdCBsZW4gPSB3ZWlnaHRzW2lkeDJdOworKworKwkJCQkgIC8qIFRlc3Qgd2hldGhlciB0aGUgbGVuZ2h0cyBtYXRjaC4gICovCisrCQkJCSAgaWYgKHdlaWdodHNbaWR4XSA9PSBsZW4pCisrCQkJCSAgICB7CisrCQkJCSAgICAgIC8qIFRoZXkgZG8uICBOZXcgY29tcGFyZSB0aGUgYnl0ZXMgb2YKKysJCQkJCSB0aGUgd2VpZ2h0LiAgKi8KKysJCQkJICAgICAgc2l6ZV90IGNudCA9IDA7CisrCisrCQkJCSAgICAgIHdoaWxlIChjbnQgPCBsZW4KKysJCQkJCSAgICAgJiYgKHdlaWdodHNbaWR4ICsgMSArIGNudF0KKysJCQkJCQkgPT0gd2VpZ2h0c1tpZHgyICsgMSArIGNudF0pKQorKwkJCQkJKytjbnQ7CisrCisrCQkJCSAgICAgIGlmIChjbnQgPT0gbGVuKQorKwkJCQkJLyogVGhleSBtYXRjaC4gIE1hcmsgdGhlIGNoYXJhY3RlciBhcworKwkJCQkJICAgYWNjZXB0YWJsZS4gICovCisrCQkJCQlTRVRfTElTVF9CSVQgKGNoKTsKKysJCQkJICAgIH0KKysJCQkJfQorKwkJCSAgfQorKyMgZW5kaWYKKysJCQloYWRfY2hhcl9jbGFzcyA9IHRydWU7CisrCQkgICAgICB9CisrICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBjMSsrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjMS0tKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgUEFUVU5GRVRDSDsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCdbJyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUICgnPScpOworKwkJCXJhbmdlX3N0YXJ0ID0gJz0nOworKyAgICAgICAgICAgICAgICAgICAgICAgIGhhZF9jaGFyX2NsYXNzID0gZmFsc2U7CisrICAgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgfQorKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DSEFSX0NMQVNTRVMgJiYgYyA9PSAnWycgJiYgKnAgPT0gJy4nKQorKwkJICB7CisrCQkgICAgdW5zaWduZWQgY2hhciBzdHJbMTI4XTsJLyogU2hvdWxkIGJlIGxhcmdlIGVub3VnaC4gICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIHVpbnQzMl90IG5ydWxlcyA9CisrCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYKKysKKysJCSAgICBQQVRGRVRDSCAoYyk7CisrCQkgICAgYzEgPSAwOworKworKwkJICAgIC8qIElmIHBhdHRlcm4gaXMgYFtbLicuICAqLworKwkJICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUJSQUNLKTsKKysKKysJCSAgICBmb3IgKDs7KQorKwkJICAgICAgeworKwkJCVBBVEZFVENIIChjKTsKKysJCQlpZiAoKGMgPT0gJy4nICYmICpwID09ICddJykgfHwgcCA9PSBwZW5kKQorKwkJCSAgYnJlYWs7CisrCQkJaWYgKGMxIDwgc2l6ZW9mIChzdHIpKQorKwkJCSAgc3RyW2MxKytdID0gYzsKKysJCQllbHNlCisrCQkJICAvKiBUaGlzIGlzIGluIGFueSBjYXNlIGFuIGludmFsaWQgY2xhc3MgbmFtZS4gICovCisrCQkJICBzdHJbMF0gPSAnXDAnOworKyAgICAgICAgICAgICAgICAgICAgICB9CisrCQkgICAgc3RyW2MxXSA9ICdcMCc7CisrCisrCQkgICAgaWYgKGMgPT0gJy4nICYmICpwID09ICddJyAmJiBzdHJbMF0gIT0gJ1wwJykKKysJCSAgICAgIHsKKysJCQkvKiBJZiB3ZSBoYXZlIG5vIGNvbGxhdGlvbiBkYXRhIHdlIHVzZSB0aGUgZGVmYXVsdAorKwkJCSAgIGNvbGxhdGlvbiBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBpcyB0aGUgbmFtZQorKwkJCSAgIGZvciBpdHMgb3duIGNsYXNzIHdoaWNoIGNvbnRhaW5zIG9ubHkgdGhlIG9uZQorKwkJCSAgIGNoYXJhY3Rlci4gIEl0IGFsc28gbWVhbnMgdGhhdCBBU0NJSSBpcyB0aGUKKysJCQkgICBjaGFyYWN0ZXIgc2V0IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90IGhhdmUgY2hhcmFjdGVyCisrCQkJICAgd2l0aCBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIG11bHRpYnl0ZQorKwkJCSAgIHJlcHJlc2VudGF0aW9uLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkJaWYgKG5ydWxlcyA9PSAwKQorKyMgZW5kaWYKKysJCQkgIHsKKysJCQkgICAgaWYgKGMxICE9IDEpCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIFNldCB0aGUgYml0IGZvciB0aGUgY2hhcmFjdGVyLiAgKi8KKysJCQkgICAgU0VUX0xJU1RfQklUIChzdHJbMF0pOworKwkJCSAgICByYW5nZV9zdGFydCA9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIpWzBdOworKwkJCSAgfQorKyMgaWZkZWYgX0xJQkMKKysJCQllbHNlCisrCQkJICB7CisrCQkJICAgIC8qIFRyeSB0byBtYXRjaCB0aGUgYnl0ZSBzZXF1ZW5jZSBpbiBgc3RyJyBhZ2FpbnN0CisrCQkJICAgICAgIHRob3NlIGtub3duIHRvIHRoZSBjb2xsYXRlIGltcGxlbWVudGF0aW9uLgorKwkJCSAgICAgICBGaXJzdCBmaW5kIG91dCB3aGV0aGVyIHRoZSBieXRlcyBpbiBgc3RyJyBhcmUKKysJCQkgICAgICAgYWN0dWFsbHkgZnJvbSBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuICAqLworKwkJCSAgICBpbnQzMl90IHRhYmxlX3NpemU7CisrCQkJICAgIGNvbnN0IGludDMyX3QgKnN5bWJfdGFibGU7CisrCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhOworKwkJCSAgICBpbnQzMl90IGlkeDsKKysJCQkgICAgaW50MzJfdCBlbGVtOworKwkJCSAgICBpbnQzMl90IHNlY29uZDsKKysJCQkgICAgaW50MzJfdCBoYXNoOworKworKwkJCSAgICB0YWJsZV9zaXplID0KKysJCQkgICAgICBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLAorKwkJCQkJCV9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIpOworKwkJCSAgICBzeW1iX3RhYmxlID0gKGNvbnN0IGludDMyX3QgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQik7CisrCQkJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKysJCQkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKysJCQkJCSAgIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQik7CisrCisrCQkJICAgIC8qIExvY2F0ZSB0aGUgY2hhcmFjdGVyIGluIHRoZSBoYXNoaW5nIHRhYmxlLiAgKi8KKysJCQkgICAgaGFzaCA9IGVsZW1faGFzaCAoKGNvbnN0IGNoYXIgKikgc3RyLCBjMSk7CisrCisrCQkJICAgIGlkeCA9IDA7CisrCQkJICAgIGVsZW0gPSBoYXNoICUgdGFibGVfc2l6ZTsKKysJCQkgICAgc2Vjb25kID0gaGFzaCAlICh0YWJsZV9zaXplIC0gMik7CisrCQkJICAgIHdoaWxlIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorKwkJCSAgICAgIHsKKysJCQkJLyogRmlyc3QgY29tcGFyZSB0aGUgaGFzaGluZyB2YWx1ZS4gICovCisrCQkJCWlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSBoYXNoCisrCQkJCSAgICAmJiBjMSA9PSBleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV1dCisrCQkJCSAgICAmJiBtZW1jbXAgKHN0ciwKKysJCQkJCSAgICAgICAmZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdCisrCQkJCQkJICAgICArIDFdLAorKwkJCQkJICAgICAgIGMxKSA9PSAwKQorKwkJCQkgIHsKKysJCQkJICAgIC8qIFllcCwgdGhpcyBpcyB0aGUgZW50cnkuICAqLworKwkJCQkgICAgaWR4ID0gc3ltYl90YWJsZVsyICogZWxlbSArIDFdOworKwkJCQkgICAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworKwkJCQkgICAgYnJlYWs7CisrCQkJCSAgfQorKworKwkJCQkvKiBOZXh0IGVudHJ5LiAgKi8KKysJCQkJZWxlbSArPSBzZWNvbmQ7CisrCQkJICAgICAgfQorKworKwkJCSAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gMCkKKysJCQkgICAgICAvKiBUaGlzIGlzIG5vIHZhbGlkIGNoYXJhY3Rlci4gICovCisrCQkJICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FQ09MTEFURSk7CisrCisrCQkJICAgIC8qIFRocm93IGF3YXkgdGhlIF0gYXQgdGhlIGVuZCBvZiB0aGUgZXF1aXZhbGVuY2UKKysJCQkgICAgICAgY2xhc3MuICAqLworKwkJCSAgICBQQVRGRVRDSCAoYyk7CisrCisrCQkJICAgIC8qIE5vdyBhZGQgdGhlIG11bHRpYnl0ZSBjaGFyYWN0ZXIocykgd2UgZm91bmQKKysJCQkgICAgICAgdG8gdGhlIGFjY2VwdCBsaXN0LgorKworKwkJCSAgICAgICBYWFggTm90ZSB0aGF0IHRoaXMgaXMgbm90IGVudGlyZWx5IGNvcnJlY3QuCisrCQkJICAgICAgIHdlIHdvdWxkIGhhdmUgdG8gbWF0Y2ggbXVsdGlieXRlIHNlcXVlbmNlcworKwkJCSAgICAgICBidXQgdGhpcyBpcyBub3QgcG9zc2libGUgd2l0aCB0aGUgY3VycmVudAorKwkJCSAgICAgICBpbXBsZW1lbnRhdGlvbi4gIEFsc28sIHdlIGhhdmUgdG8gbWF0Y2gKKysJCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbHMsIHdoaWNoIGV4cGFuZCB0byBtb3JlIHRoYW4KKysJCQkgICAgICAgb25lIGZpbGUsIGFzIGEgd2hvbGUgYW5kIG5vdCBhbGxvdyB0aGUKKysJCQkgICAgICAgaW5kaXZpZHVhbCBieXRlcy4gICovCisrCQkJICAgIGMxID0gZXh0cmFbaWR4KytdOworKwkJCSAgICBpZiAoYzEgPT0gMSkKKysJCQkgICAgICByYW5nZV9zdGFydCA9IGV4dHJhW2lkeF07CisrCQkJICAgIHdoaWxlIChjMS0tID4gMCkKKysJCQkgICAgICB7CisrCQkJCVNFVF9MSVNUX0JJVCAoZXh0cmFbaWR4XSk7CisrCQkJCSsraWR4OworKwkJCSAgICAgIH0KKysJCQkgIH0KKysjIGVuZGlmCisrCQkJaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysJCSAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGMxKys7CisrICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMxLS0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBQQVRVTkZFVENIOworKyAgICAgICAgICAgICAgICAgICAgICAgIFNFVF9MSVNUX0JJVCAoJ1snKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBTRVRfTElTVF9CSVQgKCcuJyk7CisrCQkJcmFuZ2Vfc3RhcnQgPSAnLic7CisrICAgICAgICAgICAgICAgICAgICAgICAgaGFkX2NoYXJfY2xhc3MgPSBmYWxzZTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICBoYWRfY2hhcl9jbGFzcyA9IGZhbHNlOworKyAgICAgICAgICAgICAgICAgICAgU0VUX0xJU1RfQklUIChjKTsKKysJCSAgICByYW5nZV9zdGFydCA9IGM7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIERpc2NhcmQgYW55IChub24pbWF0Y2hpbmcgbGlzdCBieXRlcyB0aGF0IGFyZSBhbGwgMCBhdCB0aGUKKysgICAgICAgICAgICAgICBlbmQgb2YgdGhlIG1hcC4gIERlY3JlYXNlIHRoZSBtYXAtbGVuZ3RoIGJ5dGUgdG9vLiAgKi8KKysgICAgICAgICAgICB3aGlsZSAoKGludCkgYlstMV0gPiAwICYmIGJbYlstMV0gLSAxXSA9PSAwKQorKyAgICAgICAgICAgICAgYlstMV0tLTsKKysgICAgICAgICAgICBiICs9IGJbLTFdOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgICB9CisrICAgICAgICAgIGJyZWFrOworKworKworKwljYXNlICcoJzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9vcGVuOworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJyknOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Nsb3NlOworKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysKKysgICAgICAgIGNhc2UgJ1xuJzoKKysgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKQorKyAgICAgICAgICAgIGdvdG8gaGFuZGxlX2FsdDsKKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrCWNhc2UgJ3wnOgorKyAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUikKKysgICAgICAgICAgICBnb3RvIGhhbmRsZV9hbHQ7CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKworKyAgICAgICAgY2FzZSAneyc6CisrICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfSU5URVJWQUxTICYmIHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykKKysgICAgICAgICAgICAgZ290byBoYW5kbGVfaW50ZXJ2YWw7CisrICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrCisrCisrICAgICAgICBjYXNlICdcXCc6CisrICAgICAgICAgIGlmIChwID09IHBlbmQpIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfRUVTQ0FQRSk7CisrCisrICAgICAgICAgIC8qIERvIG5vdCB0cmFuc2xhdGUgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgXCwgc28gdGhhdCB3ZSBjYW4KKysgICAgICAgICAgICAgZGlzdGluZ3Vpc2gsIGUuZy4sIFxCIGZyb20gXGIsIGV2ZW4gaWYgd2Ugbm9ybWFsbHkgd291bGQKKysgICAgICAgICAgICAgdHJhbnNsYXRlLCBlLmcuLCBCIHRvIGIuICAqLworKyAgICAgICAgICBQQVRGRVRDSF9SQVcgKGMpOworKworKyAgICAgICAgICBzd2l0Y2ggKGMpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgIGNhc2UgJygnOgorKyAgICAgICAgICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUykKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgIGhhbmRsZV9vcGVuOgorKyAgICAgICAgICAgICAgYnVmcC0+cmVfbnN1YisrOworKyAgICAgICAgICAgICAgcmVnbnVtKys7CisrCisrICAgICAgICAgICAgICBpZiAoQ09NUElMRV9TVEFDS19GVUxMKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgUkVUQUxMT0MgKGNvbXBpbGVfc3RhY2suc3RhY2ssIGNvbXBpbGVfc3RhY2suc2l6ZSA8PCAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlX3N0YWNrX2VsdF90KTsKKysgICAgICAgICAgICAgICAgICBpZiAoY29tcGlsZV9zdGFjay5zdGFjayA9PSBOVUxMKSByZXR1cm4gUkVHX0VTUEFDRTsKKysKKysgICAgICAgICAgICAgICAgICBjb21waWxlX3N0YWNrLnNpemUgPDw9IDE7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIFRoZXNlIGFyZSB0aGUgdmFsdWVzIHRvIHJlc3RvcmUgd2hlbiB3ZSBoaXQgZW5kIG9mIHRoaXMKKysgICAgICAgICAgICAgICAgIGdyb3VwLiAgVGhleSBhcmUgYWxsIHJlbGF0aXZlIG9mZnNldHMsIHNvIHRoYXQgaWYgdGhlCisrICAgICAgICAgICAgICAgICB3aG9sZSBwYXR0ZXJuIG1vdmVzIGJlY2F1c2Ugb2YgcmVhbGxvYywgdGhleSB3aWxsIHN0aWxsCisrICAgICAgICAgICAgICAgICBiZSB2YWxpZC4gICovCisrICAgICAgICAgICAgICBDT01QSUxFX1NUQUNLX1RPUC5iZWdhbHRfb2Zmc2V0ID0gYmVnYWx0IC0gQ09NUElMRURfQlVGRkVSX1ZBUjsKKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmZpeHVwX2FsdF9qdW1wCisrICAgICAgICAgICAgICAgID0gZml4dXBfYWx0X2p1bXAgPyBmaXh1cF9hbHRfanVtcCAtIENPTVBJTEVEX0JVRkZFUl9WQVIgKyAxIDogMDsKKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLmxhc3RzdGFydF9vZmZzZXQgPSBiIC0gQ09NUElMRURfQlVGRkVSX1ZBUjsKKysgICAgICAgICAgICAgIENPTVBJTEVfU1RBQ0tfVE9QLnJlZ251bSA9IHJlZ251bTsKKysKKysgICAgICAgICAgICAgIC8qIFdlIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHRoZSAwIHdpdGggdGhlIG51bWJlciBvZgorKyAgICAgICAgICAgICAgICAgZ3JvdXBzIGlubmVyIHRvIHRoaXMgb25lLiAgQnV0IGRvIG5vdCBwdXNoIGEKKysgICAgICAgICAgICAgICAgIHN0YXJ0X21lbW9yeSBmb3IgZ3JvdXBzIGJleW9uZCB0aGUgbGFzdCBvbmUgd2UgY2FuCisrICAgICAgICAgICAgICAgICByZXByZXNlbnQgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4uICAqLworKyAgICAgICAgICAgICAgaWYgKHJlZ251bSA8PSBNQVhfUkVHTlVNKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgQ09NUElMRV9TVEFDS19UT1AuaW5uZXJfZ3JvdXBfb2Zmc2V0ID0gYgorKwkJICAgIC0gQ09NUElMRURfQlVGRkVSX1ZBUiArIDI7CisrICAgICAgICAgICAgICAgICAgQlVGX1BVU0hfMyAoc3RhcnRfbWVtb3J5LCByZWdudW0sIDApOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICBjb21waWxlX3N0YWNrLmF2YWlsKys7CisrCisrICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcCA9IDA7CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSAwOworKyAgICAgICAgICAgICAgYmVnYWx0ID0gYjsKKysJICAgICAgLyogSWYgd2UndmUgcmVhY2hlZCBNQVhfUkVHTlVNIGdyb3VwcywgdGhlbiB0aGlzIG9wZW4KKysJCSB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbnkgY29kZSwgc28gd2UnbGwgaGF2ZSB0bworKwkJIGNsZWFyIHBlbmRpbmdfZXhhY3QgZXhwbGljaXRseS4gICovCisrCSAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnKSc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKSBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrCisrICAgICAgICAgICAgICBpZiAoQ09NUElMRV9TVEFDS19FTVBUWSkKKysJCXsKKysJCSAgaWYgKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisrCQkgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKwkJICBlbHNlCisrCQkgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUlBBUkVOKTsKKysJCX0KKysKKysgICAgICAgICAgICBoYW5kbGVfY2xvc2U6CisrICAgICAgICAgICAgICBpZiAoZml4dXBfYWx0X2p1bXApCisrICAgICAgICAgICAgICAgIHsgLyogUHVzaCBhIGR1bW15IGZhaWx1cmUgcG9pbnQgYXQgdGhlIGVuZCBvZiB0aGUKKysgICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSBmb3IgYSBwb3NzaWJsZSBmdXR1cmUKKysgICAgICAgICAgICAgICAgICAgICBgcG9wX2ZhaWx1cmVfanVtcCcgdG8gcG9wLiAgU2VlIGNvbW1lbnRzIGF0CisrICAgICAgICAgICAgICAgICAgICAgYHB1c2hfZHVtbXlfZmFpbHVyZScgaW4gYHJlX21hdGNoXzInLiAgKi8KKysgICAgICAgICAgICAgICAgICBCVUZfUFVTSCAocHVzaF9kdW1teV9mYWlsdXJlKTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBXZSBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoaXMganVtcCB3aGVuIHdlIGFzc2lnbmVkCisrICAgICAgICAgICAgICAgICAgICAgdG8gYGZpeHVwX2FsdF9qdW1wJywgaW4gdGhlIGBoYW5kbGVfYWx0JyBjYXNlIGJlbG93LiAgKi8KKysgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QIChqdW1wX3Bhc3RfYWx0LCBmaXh1cF9hbHRfanVtcCwgYiAtIDEpOworKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBTZWUgc2ltaWxhciBjb2RlIGZvciBiYWNrc2xhc2hlZCBsZWZ0IHBhcmVuIGFib3ZlLiAgKi8KKysgICAgICAgICAgICAgIGlmIChDT01QSUxFX1NUQUNLX0VNUFRZKQorKwkJeworKwkJICBpZiAoc3ludGF4ICYgUkVfVU5NQVRDSEVEX1JJR0hUX1BBUkVOX09SRCkKKysJCSAgICBnb3RvIG5vcm1hbF9jaGFyOworKwkJICBlbHNlCisrCQkgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FUlBBUkVOKTsKKysJCX0KKysKKysgICAgICAgICAgICAgIC8qIFNpbmNlIHdlIGp1c3QgY2hlY2tlZCBmb3IgYW4gZW1wdHkgc3RhY2sgYWJvdmUsIHRoaXMKKysgICAgICAgICAgICAgICAgIGBgY2FuJ3QgaGFwcGVuJycuICAqLworKyAgICAgICAgICAgICAgYXNzZXJ0IChjb21waWxlX3N0YWNrLmF2YWlsICE9IDApOworKyAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAvKiBXZSBkb24ndCBqdXN0IHdhbnQgdG8gcmVzdG9yZSBpbnRvIGByZWdudW0nLCBiZWNhdXNlCisrICAgICAgICAgICAgICAgICAgIGxhdGVyIGdyb3VwcyBzaG91bGQgY29udGludWUgdG8gYmUgbnVtYmVyZWQgaGlnaGVyLAorKyAgICAgICAgICAgICAgICAgICBhcyBpbiBgKGFiKWMoZGUpJyAtLSB0aGUgc2Vjb25kIGdyb3VwIGlzICMyLiAgKi8KKysgICAgICAgICAgICAgICAgcmVnbnVtX3QgdGhpc19ncm91cF9yZWdudW07CisrCisrICAgICAgICAgICAgICAgIGNvbXBpbGVfc3RhY2suYXZhaWwtLTsKKysgICAgICAgICAgICAgICAgYmVnYWx0ID0gQ09NUElMRURfQlVGRkVSX1ZBUiArIENPTVBJTEVfU1RBQ0tfVE9QLmJlZ2FsdF9vZmZzZXQ7CisrICAgICAgICAgICAgICAgIGZpeHVwX2FsdF9qdW1wCisrICAgICAgICAgICAgICAgICAgPSBDT01QSUxFX1NUQUNLX1RPUC5maXh1cF9hbHRfanVtcAorKyAgICAgICAgICAgICAgICAgICAgPyBDT01QSUxFRF9CVUZGRVJfVkFSICsgQ09NUElMRV9TVEFDS19UT1AuZml4dXBfYWx0X2p1bXAgLSAxCisrICAgICAgICAgICAgICAgICAgICA6IDA7CisrICAgICAgICAgICAgICAgIGxhc3RzdGFydCA9IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5sYXN0c3RhcnRfb2Zmc2V0OworKyAgICAgICAgICAgICAgICB0aGlzX2dyb3VwX3JlZ251bSA9IENPTVBJTEVfU1RBQ0tfVE9QLnJlZ251bTsKKysJCS8qIElmIHdlJ3ZlIHJlYWNoZWQgTUFYX1JFR05VTSBncm91cHMsIHRoZW4gdGhpcyBvcGVuCisrCQkgICB3b24ndCBhY3R1YWxseSBnZW5lcmF0ZSBhbnkgY29kZSwgc28gd2UnbGwgaGF2ZSB0bworKwkJICAgY2xlYXIgcGVuZGluZ19leGFjdCBleHBsaWNpdGx5LiAgKi8KKysJCXBlbmRpbmdfZXhhY3QgPSAwOworKworKyAgICAgICAgICAgICAgICAvKiBXZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBncm91cCwgc28gbm93IHdlIGtub3cgaG93IG1hbnkKKysgICAgICAgICAgICAgICAgICAgZ3JvdXBzIHdlcmUgaW5zaWRlIHRoaXMgb25lLiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKHRoaXNfZ3JvdXBfcmVnbnVtIDw9IE1BWF9SRUdOVU0pCisrICAgICAgICAgICAgICAgICAgeworKwkJICAgIFVDSEFSX1QgKmlubmVyX2dyb3VwX2xvYworKyAgICAgICAgICAgICAgICAgICAgICA9IENPTVBJTEVEX0JVRkZFUl9WQVIgKyBDT01QSUxFX1NUQUNLX1RPUC5pbm5lcl9ncm91cF9vZmZzZXQ7CisrCisrICAgICAgICAgICAgICAgICAgICAqaW5uZXJfZ3JvdXBfbG9jID0gcmVnbnVtIC0gdGhpc19ncm91cF9yZWdudW07CisrICAgICAgICAgICAgICAgICAgICBCVUZfUFVTSF8zIChzdG9wX21lbW9yeSwgdGhpc19ncm91cF9yZWdudW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdudW0gLSB0aGlzX2dyb3VwX3JlZ251bSk7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnfCc6CQkJCQkvKiBgXHwnLiAgKi8KKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9MSU1JVEVEX09QUyB8fCBzeW50YXggJiBSRV9OT19CS19WQkFSKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9iYWNrc2xhc2g7CisrICAgICAgICAgICAgaGFuZGxlX2FsdDoKKysgICAgICAgICAgICAgIGlmIChzeW50YXggJiBSRV9MSU1JVEVEX09QUykKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysgICAgICAgICAgICAgIC8qIEluc2VydCBiZWZvcmUgdGhlIHByZXZpb3VzIGFsdGVybmF0aXZlIGEganVtcCB3aGljaAorKyAgICAgICAgICAgICAgICAganVtcHMgdG8gdGhpcyBhbHRlcm5hdGl2ZSBpZiB0aGUgZm9ybWVyIGZhaWxzLiAgKi8KKysgICAgICAgICAgICAgIEdFVF9CVUZGRVJfU1BBQ0UgKDEgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgIElOU0VSVF9KVU1QIChvbl9mYWlsdXJlX2p1bXAsIGJlZ2FsdCwKKysJCQkgICBiICsgMiArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKyAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgIC8qIFRoZSBhbHRlcm5hdGl2ZSBiZWZvcmUgdGhpcyBvbmUgaGFzIGEganVtcCBhZnRlciBpdAorKyAgICAgICAgICAgICAgICAgd2hpY2ggZ2V0cyBleGVjdXRlZCBpZiBpdCBnZXRzIG1hdGNoZWQuICBBZGp1c3QgdGhhdAorKyAgICAgICAgICAgICAgICAganVtcCBzbyBpdCB3aWxsIGp1bXAgdG8gdGhpcyBhbHRlcm5hdGl2ZSdzIGFuYWxvZ291cworKyAgICAgICAgICAgICAgICAganVtcCAocHV0IGluIGJlbG93LCB3aGljaCBpbiB0dXJuIHdpbGwganVtcCB0byB0aGUgbmV4dAorKyAgICAgICAgICAgICAgICAgKGlmIGFueSkgYWx0ZXJuYXRpdmUncyBzdWNoIGp1bXAsIGV0Yy4pLiAgVGhlIGxhc3Qgc3VjaAorKyAgICAgICAgICAgICAgICAganVtcCBqdW1wcyB0byB0aGUgY29ycmVjdCBmaW5hbCBkZXN0aW5hdGlvbi4gIEEgcGljdHVyZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fIF9fX19fCisrICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCB8ICAgfAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHYgfCAgIHYKKysgICAgICAgICAgICAgICAgICAgICAgICAgYSB8IGIgICB8IGMKKysKKysgICAgICAgICAgICAgICAgIElmIHdlIGFyZSBhdCBgYicsIHRoZW4gZml4dXBfYWx0X2p1bXAgcmlnaHQgbm93IHBvaW50cyB0byBhCisrICAgICAgICAgICAgICAgICB0aHJlZS1ieXRlIHNwYWNlIGFmdGVyIGBhJy4gIFdlJ2xsIHB1dCBpbiB0aGUganVtcCwgc2V0CisrICAgICAgICAgICAgICAgICBmaXh1cF9hbHRfanVtcCB0byByaWdodCBhZnRlciBgYicsIGFuZCBsZWF2ZSBiZWhpbmQgdGhyZWUKKysgICAgICAgICAgICAgICAgIGJ5dGVzIHdoaWNoIHdlJ2xsIGZpbGwgaW4gd2hlbiB3ZSBnZXQgdG8gYWZ0ZXIgYGMnLiAgKi8KKysKKysgICAgICAgICAgICAgIGlmIChmaXh1cF9hbHRfanVtcCkKKysgICAgICAgICAgICAgICAgU1RPUkVfSlVNUCAoanVtcF9wYXN0X2FsdCwgZml4dXBfYWx0X2p1bXAsIGIpOworKworKyAgICAgICAgICAgICAgLyogTWFyayBhbmQgbGVhdmUgc3BhY2UgZm9yIGEganVtcCBhZnRlciB0aGlzIGFsdGVybmF0aXZlLAorKyAgICAgICAgICAgICAgICAgdG8gYmUgZmlsbGVkIGluIGxhdGVyIGVpdGhlciBieSBuZXh0IGFsdGVybmF0aXZlIG9yCisrICAgICAgICAgICAgICAgICB3aGVuIGtub3cgd2UncmUgYXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiBhbHRlcm5hdGl2ZXMuICAqLworKyAgICAgICAgICAgICAgZml4dXBfYWx0X2p1bXAgPSBiOworKyAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgYiArPSAxICsgT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgIGxhc3RzdGFydCA9IDA7CisrICAgICAgICAgICAgICBiZWdhbHQgPSBiOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAneyc6CisrICAgICAgICAgICAgICAvKiBJZiBceyBpcyBhIGxpdGVyYWwuICAqLworKyAgICAgICAgICAgICAgaWYgKCEoc3ludGF4ICYgUkVfSU5URVJWQUxTKQorKyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlJ3JlIGF0IGBceycgYW5kIGl0J3Mgbm90IHRoZSBvcGVuLWludGVydmFsCisrICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuICAqLworKwkJICB8fCAoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKSkKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgIGhhbmRsZV9pbnRlcnZhbDoKKysgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgLyogSWYgZ290IGhlcmUsIHRoZW4gdGhlIHN5bnRheCBhbGxvd3MgaW50ZXJ2YWxzLiAgKi8KKysKKysgICAgICAgICAgICAgICAgLyogQXQgbGVhc3QgKG1vc3QpIHRoaXMgbWFueSBtYXRjaGVzIG11c3QgYmUgbWFkZS4gICovCisrICAgICAgICAgICAgICAgIGludCBsb3dlcl9ib3VuZCA9IC0xLCB1cHBlcl9ib3VuZCA9IC0xOworKworKwkJLyogUGxhY2UgaW4gdGhlIHVuY29tcGlsZWQgcGF0dGVybiAoaS5lLiwganVzdCBhZnRlcgorKwkJICAgdGhlICd7JykgdG8gZ28gYmFjayB0byBpZiB0aGUgaW50ZXJ2YWwgaXMgaW52YWxpZC4gICovCisrCQljb25zdCBDSEFSX1QgKmJlZ19pbnRlcnZhbCA9IHA7CisrCisrICAgICAgICAgICAgICAgIGlmIChwID09IHBlbmQpCisrCQkgIGdvdG8gaW52YWxpZF9pbnRlcnZhbDsKKysKKysgICAgICAgICAgICAgICAgR0VUX1VOU0lHTkVEX05VTUJFUiAobG93ZXJfYm91bmQpOworKworKyAgICAgICAgICAgICAgICBpZiAoYyA9PSAnLCcpCisrICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgR0VUX1VOU0lHTkVEX05VTUJFUiAodXBwZXJfYm91bmQpOworKwkJICAgIGlmICh1cHBlcl9ib3VuZCA8IDApCisrCQkgICAgICB1cHBlcl9ib3VuZCA9IFJFX0RVUF9NQVg7CisrICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgLyogSW50ZXJ2YWwgc3VjaCBhcyBgezF9JyA9PiBtYXRjaCBleGFjdGx5IG9uY2UuICovCisrICAgICAgICAgICAgICAgICAgdXBwZXJfYm91bmQgPSBsb3dlcl9ib3VuZDsKKysKKysgICAgICAgICAgICAgICAgaWYgKCEgKDAgPD0gbG93ZXJfYm91bmQgJiYgbG93ZXJfYm91bmQgPD0gdXBwZXJfYm91bmQpKQorKwkJICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrCisrICAgICAgICAgICAgICAgIGlmICghKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisrICAgICAgICAgICAgICAgICAgeworKwkJICAgIGlmIChjICE9ICdcXCcgfHwgcCA9PSBwZW5kKQorKwkJICAgICAgZ290byBpbnZhbGlkX2ludGVydmFsOworKyAgICAgICAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgaWYgKGMgIT0gJ30nKQorKwkJICBnb3RvIGludmFsaWRfaW50ZXJ2YWw7CisrCisrICAgICAgICAgICAgICAgIC8qIElmIGl0J3MgaW52YWxpZCB0byBoYXZlIG5vIHByZWNlZGluZyByZS4gICovCisrICAgICAgICAgICAgICAgIGlmICghbGFzdHN0YXJ0KQorKyAgICAgICAgICAgICAgICAgIHsKKysJCSAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX09QUworKwkJCSYmICEoc3ludGF4ICYgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpKQorKyAgICAgICAgICAgICAgICAgICAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0JBRFJQVCk7CisrICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOREVQX09QUykKKysgICAgICAgICAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgICAgZ290byB1bmZldGNoX2ludGVydmFsOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgLyogV2UganVzdCBwYXJzZWQgYSB2YWxpZCBpbnRlcnZhbC4gICovCisrCisrICAgICAgICAgICAgICAgIGlmIChSRV9EVVBfTUFYIDwgdXBwZXJfYm91bmQpCisrCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChSRUdfQkFEQlIpOworKworKyAgICAgICAgICAgICAgICAvKiBJZiB0aGUgdXBwZXIgYm91bmQgaXMgemVybywgZG9uJ3Qgd2FudCB0byBzdWNjZWVkIGF0CisrICAgICAgICAgICAgICAgICAgIGFsbDsganVtcCBmcm9tIGBsYXN0c3RhcnQnIHRvIGBiICsgMycsIHdoaWNoIHdpbGwgYmUKKysJCSAgIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB3ZSBpbnNlcnQgdGhlIGp1bXAuICAqLworKwkJLyogaWZkZWYgV0NIQVIsICdiICsgMSArIE9GRlNFVF9BRERSRVNTX1NJWkUnCisrCQkgICBpbnN0ZWFkIG9mICdiICsgMycuICAqLworKyAgICAgICAgICAgICAgICAgaWYgKHVwcGVyX2JvdW5kID09IDApCisrICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICBHRVRfQlVGRkVSX1NQQUNFICgxICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrICAgICAgICAgICAgICAgICAgICAgSU5TRVJUX0pVTVAgKGp1bXAsIGxhc3RzdGFydCwgYiArIDEKKysJCQkJICArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgd2UgaGF2ZSBhIG5vbnRyaXZpYWwgaW50ZXJ2YWwuICBXaGVuCisrICAgICAgICAgICAgICAgICAgICB3ZSdyZSBhbGwgZG9uZSwgdGhlIHBhdHRlcm4gd2lsbCBsb29rIGxpa2U6CisrICAgICAgICAgICAgICAgICAgICAgIHNldF9udW1iZXJfYXQgPGp1bXAgY291bnQ+IDx1cHBlciBib3VuZD4KKysgICAgICAgICAgICAgICAgICAgICAgc2V0X251bWJlcl9hdCA8c3VjY2VlZF9uIGNvdW50PiA8bG93ZXIgYm91bmQ+CisrICAgICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRfbiA8YWZ0ZXIganVtcCBhZGRyPiA8c3VjY2VlZF9uIGNvdW50PgorKyAgICAgICAgICAgICAgICAgICAgICA8Ym9keSBvZiBsb29wPgorKyAgICAgICAgICAgICAgICAgICAgICBqdW1wX24gPHN1Y2NlZWRfbiBhZGRyPiA8anVtcCBjb3VudD4KKysgICAgICAgICAgICAgICAgICAgIChUaGUgdXBwZXIgYm91bmQgYW5kIGBqdW1wX24nIGFyZSBvbWl0dGVkIGlmCisrICAgICAgICAgICAgICAgICAgICBgdXBwZXJfYm91bmQnIGlzIDEsIHRob3VnaC4pICAqLworKyAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICB7IC8qIElmIHRoZSB1cHBlciBib3VuZCBpcyA+IDEsIHdlIG5lZWQgdG8gaW5zZXJ0CisrICAgICAgICAgICAgICAgICAgICAgICAgbW9yZSBhdCB0aGUgZW5kIG9mIHRoZSBsb29wLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBuYnl0ZXMgPSAyICsgNCAqIE9GRlNFVF9BRERSRVNTX1NJWkUgKworKwkJICAgICAgICh1cHBlcl9ib3VuZCA+IDEpICogKDIgKyA0ICogT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrCisrICAgICAgICAgICAgICAgICAgICAgR0VUX0JVRkZFUl9TUEFDRSAobmJ5dGVzKTsKKysKKysgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIGxvd2VyIGJvdW5kIG9mIHRoZSBgc3VjY2VlZF9uJywgZXZlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIHRob3VnaCBpdCB3aWxsIGJlIHNldCBkdXJpbmcgbWF0Y2hpbmcgYnkgaXRzCisrICAgICAgICAgICAgICAgICAgICAgICAgYXR0ZW5kYW50IGBzZXRfbnVtYmVyX2F0JyAoaW5zZXJ0ZWQgbmV4dCksCisrICAgICAgICAgICAgICAgICAgICAgICAgYmVjYXVzZSBgcmVfY29tcGlsZV9mYXN0bWFwJyBuZWVkcyB0byBrbm93LgorKyAgICAgICAgICAgICAgICAgICAgICAgIEp1bXAgdG8gdGhlIGBqdW1wX24nIHdlIG1pZ2h0IGluc2VydCBiZWxvdy4gICovCisrICAgICAgICAgICAgICAgICAgICAgSU5TRVJUX0pVTVAyIChzdWNjZWVkX24sIGxhc3RzdGFydCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgKyAxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUKKysJCQkJICAgKyAodXBwZXJfYm91bmQgPiAxKSAqICgxICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkUpCisrCQkJCSAgICwgbG93ZXJfYm91bmQpOworKyAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgIC8qIENvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgbG93ZXIgYm91bmQuICBJbnNlcnQKKysgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGBzdWNjZWVkX24nLiAgVGhlIGA1JyBpcyB0aGUgbGFzdCB0d28KKysgICAgICAgICAgICAgICAgICAgICAgICBieXRlcyBvZiB0aGlzIGBzZXRfbnVtYmVyX2F0JywgcGx1cyAzIGJ5dGVzIG9mCisrICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZyBgc3VjY2VlZF9uJy4gICovCisrCQkgICAgIC8qIGlmZGVmIFdDSEFSLCBUaGUgJzErMipPRkZTRVRfQUREUkVTU19TSVpFJworKwkJCWlzIHRoZSAnc2V0X251bWJlcl9hdCcsIHBsdXMgJzErT0ZGU0VUX0FERFJFU1NfU0laRScKKysJCQlvZiB0aGUgZm9sbG93aW5nIGBzdWNjZWVkX24nLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICBQUkVGSVgoaW5zZXJ0X29wMikgKHNldF9udW1iZXJfYXQsIGxhc3RzdGFydCwgMQorKwkJCQkgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSwgbG93ZXJfYm91bmQsIGIpOworKyAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAgICAgICAgICAgIGlmICh1cHBlcl9ib3VuZCA+IDEpCisrICAgICAgICAgICAgICAgICAgICAgICB7IC8qIE1vcmUgdGhhbiBvbmUgcmVwZXRpdGlvbiBpcyBhbGxvd2VkLCBzbworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmQgYSBiYWNrd2FyZCBqdW1wIHRvIHRoZSBgc3VjY2VlZF9uJworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHN0YXJ0cyB0aGlzIGludGVydmFsLgorKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGVuIHdlJ3ZlIHJlYWNoZWQgdGhpcyBkdXJpbmcgbWF0Y2hpbmcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlJ2xsIGhhdmUgbWF0Y2hlZCB0aGUgaW50ZXJ2YWwgb25jZSwgc28KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAganVtcCBiYWNrIG9ubHkgYHVwcGVyX2JvdW5kIC0gMScgdGltZXMuICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICBTVE9SRV9KVU1QMiAoanVtcF9uLCBiLCBsYXN0c3RhcnQKKysJCQkJICAgICAgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSArIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZCAtIDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgICBiICs9IDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGxvY2F0aW9uIHdlIHdhbnQgdG8gc2V0IGlzIHRoZSBzZWNvbmQKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIG9mIHRoZSBganVtcF9uJzsgdGhhdCBpcyBgYi0yJyBhcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhYnNvbHV0ZSBhZGRyZXNzLiAgYGxhc3RzdGFydCcgd2lsbCBiZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYHNldF9udW1iZXJfYXQnIHdlJ3JlIGFib3V0IHRvIGluc2VydDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGxhc3RzdGFydCszJyB0aGUgbnVtYmVyIHRvIHNldCwgdGhlIHNvdXJjZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHJlbGF0aXZlIGFkZHJlc3MuICBCdXQgd2UgYXJlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGluZyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIHBhdHRlcm4gLS0KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc28gZXZlcnl0aGluZyBpcyBnZXR0aW5nIG1vdmVkIHVwIGJ5IDUuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmNsdXNpb246IChiIC0gMikgLSAobGFzdHN0YXJ0ICsgMykgKyA1LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLmUuLCBiIC0gbGFzdHN0YXJ0LgorKworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZSBpbnNlcnQgdGhpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb29wCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvIHRoYXQgaWYgd2UgZmFpbCBkdXJpbmcgbWF0Y2hpbmcsIHdlJ2xsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW5pdGlhbGl6ZSB0aGUgYm91bmRzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKGluc2VydF9vcDIpIChzZXRfbnVtYmVyX2F0LCBsYXN0c3RhcnQsCisrCQkJCQkgICAgIGIgLSBsYXN0c3RhcnQsCisrCQkJCQkgICAgIHVwcGVyX2JvdW5kIC0gMSwgYik7CisrICAgICAgICAgICAgICAgICAgICAgICAgIGIgKz0gMSArIDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIHBlbmRpbmdfZXhhY3QgPSAwOworKwkJYnJlYWs7CisrCisrCSAgICAgIGludmFsaWRfaW50ZXJ2YWw6CisrCQlpZiAoIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkpCisrCQkgIEZSRUVfU1RBQ0tfUkVUVVJOIChwID09IHBlbmQgPyBSRUdfRUJSQUNFIDogUkVHX0JBREJSKTsKKysJICAgICAgdW5mZXRjaF9pbnRlcnZhbDoKKysJCS8qIE1hdGNoIHRoZSBjaGFyYWN0ZXJzIGFzIGxpdGVyYWxzLiAgKi8KKysJCXAgPSBiZWdfaW50ZXJ2YWw7CisrCQljID0gJ3snOworKwkJaWYgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykKKysJCSAgZ290byBub3JtYWxfY2hhcjsKKysJCWVsc2UKKysJCSAgZ290byBub3JtYWxfYmFja3NsYXNoOworKwkgICAgICB9CisrCisrI2lmZGVmIGVtYWNzCisrICAgICAgICAgICAgLyogVGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgdGhlIGJlZm9yZV9kb3QgYW5kIGFmdGVyX2RvdAorKyAgICAgICAgICAgICAgIG9wZXJhdG9ycy4gIHJtcyBzYXlzIHRoaXMgaXMgb2suICAtLWthcmwgICovCisrICAgICAgICAgICAgY2FzZSAnPSc6CisrICAgICAgICAgICAgICBCVUZfUFVTSCAoYXRfZG90KTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ3MnOgorKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIFBBVEZFVENIIChjKTsKKysgICAgICAgICAgICAgIEJVRl9QVVNIXzIgKHN5bnRheHNwZWMsIHN5bnRheF9zcGVjX2NvZGVbY10pOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnUyc6CisrICAgICAgICAgICAgICBsYXN0c3RhcnQgPSBiOworKyAgICAgICAgICAgICAgUEFURkVUQ0ggKGMpOworKyAgICAgICAgICAgICAgQlVGX1BVU0hfMiAobm90c3ludGF4c3BlYywgc3ludGF4X3NwZWNfY29kZVtjXSk7CisrICAgICAgICAgICAgICBicmVhazsKKysjZW5kaWYgLyogZW1hY3MgKi8KKysKKysKKysgICAgICAgICAgICBjYXNlICd3JzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkY2hhcik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICdXJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIIChub3R3b3JkY2hhcik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgICAgICBjYXNlICc8JzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKHdvcmRiZWcpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgY2FzZSAnPic6CisrCSAgICAgIGlmIChzeW50YXggJiBSRV9OT19HTlVfT1BTKQorKwkJZ290byBub3JtYWxfY2hhcjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIICh3b3JkZW5kKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ2InOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAod29yZGJvdW5kKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ0InOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAobm90d29yZGJvdW5kKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ2AnOgorKwkgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fR05VX09QUykKKysJCWdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgICBCVUZfUFVTSCAoYmVnYnVmKTsKKysgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgIGNhc2UgJ1wnJzoKKysJICAgICAgaWYgKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpCisrCQlnb3RvIG5vcm1hbF9jaGFyOworKyAgICAgICAgICAgICAgQlVGX1BVU0ggKGVuZGJ1Zik7CisrICAgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6CisrICAgICAgICAgICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUkVGUykKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY2hhcjsKKysKKysgICAgICAgICAgICAgIGMxID0gYyAtICcwJzsKKysKKysgICAgICAgICAgICAgIGlmIChjMSA+IHJlZ251bSkKKysgICAgICAgICAgICAgICAgRlJFRV9TVEFDS19SRVRVUk4gKFJFR19FU1VCUkVHKTsKKysKKysgICAgICAgICAgICAgIC8qIENhbid0IGJhY2sgcmVmZXJlbmNlIHRvIGEgc3ViZXhwcmVzc2lvbiBpZiBpbnNpZGUgb2YgaXQuICAqLworKyAgICAgICAgICAgICAgaWYgKGdyb3VwX2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2ssIChyZWdudW1fdCkgYzEpKQorKyAgICAgICAgICAgICAgICBnb3RvIG5vcm1hbF9jaGFyOworKworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysgICAgICAgICAgICAgIEJVRl9QVVNIXzIgKGR1cGxpY2F0ZSwgYzEpOworKyAgICAgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAgICAgY2FzZSAnKyc6CisrICAgICAgICAgICAgY2FzZSAnPyc6CisrICAgICAgICAgICAgICBpZiAoc3ludGF4ICYgUkVfQktfUExVU19RTSkKKysgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfcGx1czsKKysgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgZ290byBub3JtYWxfYmFja3NsYXNoOworKworKyAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgbm9ybWFsX2JhY2tzbGFzaDoKKysgICAgICAgICAgICAgIC8qIFlvdSBtaWdodCB0aGluayBpdCB3b3VsZCBiZSB1c2VmdWwgZm9yIFwgdG8gbWVhbgorKyAgICAgICAgICAgICAgICAgbm90IHRvIHRyYW5zbGF0ZTsgYnV0IGlmIHdlIGRvbid0IHRyYW5zbGF0ZSBpdAorKyAgICAgICAgICAgICAgICAgaXQgd2lsbCBuZXZlciBtYXRjaCBhbnl0aGluZy4gICovCisrICAgICAgICAgICAgICBjID0gVFJBTlNMQVRFIChjKTsKKysgICAgICAgICAgICAgIGdvdG8gbm9ybWFsX2NoYXI7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBicmVhazsKKysKKysKKysJZGVmYXVsdDoKKysgICAgICAgIC8qIEV4cGVjdHMgdGhlIGNoYXJhY3RlciBpbiBgYycuICAqLworKwlub3JtYWxfY2hhcjoKKysJICAgICAgLyogSWYgbm8gZXhhY3RuIGN1cnJlbnRseSBiZWluZyBidWlsdC4gICovCisrICAgICAgICAgIGlmICghcGVuZGluZ19leGFjdAorKyNpZmRlZiBXQ0hBUgorKwkgICAgICAvKiBJZiBsYXN0IGV4YWN0biBoYW5kbGUgYmluYXJ5KG9yIGNoYXJhY3RlcikgYW5kCisrCQkgbmV3IGV4YWN0biBoYW5kbGUgY2hhcmFjdGVyKG9yIGJpbmFyeSkuICAqLworKwkgICAgICB8fCBpc19leGFjdG5fYmluICE9IGlzX2JpbmFyeVtwIC0gMSAtIHBhdHRlcm5dCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAgICAgICAgICAgICAvKiBJZiBsYXN0IGV4YWN0biBub3QgYXQgY3VycmVudCBwb3NpdGlvbi4gICovCisrICAgICAgICAgICAgICB8fCBwZW5kaW5nX2V4YWN0ICsgKnBlbmRpbmdfZXhhY3QgKyAxICE9IGIKKysKKysgICAgICAgICAgICAgIC8qIFdlIGhhdmUgb25seSBvbmUgYnl0ZSBmb2xsb3dpbmcgdGhlIGV4YWN0biBmb3IgdGhlIGNvdW50LiAgKi8KKysJICAgICAgfHwgKnBlbmRpbmdfZXhhY3QgPT0gKDEgPDwgQllURVdJRFRIKSAtIDEKKysKKysgICAgICAgICAgICAgIC8qIElmIGZvbGxvd2VkIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvci4gICovCisrICAgICAgICAgICAgICB8fCAqcCA9PSAnKicgfHwgKnAgPT0gJ14nCisrCSAgICAgIHx8ICgoc3ludGF4ICYgUkVfQktfUExVU19RTSkKKysJCSAgPyAqcCA9PSAnXFwnICYmIChwWzFdID09ICcrJyB8fCBwWzFdID09ICc/JykKKysJCSAgOiAoKnAgPT0gJysnIHx8ICpwID09ICc/JykpCisrCSAgICAgIHx8ICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKQorKyAgICAgICAgICAgICAgICAgICYmICgoc3ludGF4ICYgUkVfTk9fQktfQlJBQ0VTKQorKwkJICAgICAgPyAqcCA9PSAneycKKysgICAgICAgICAgICAgICAgICAgICAgOiAocFswXSA9PSAnXFwnICYmIHBbMV0gPT0gJ3snKSkpKQorKwkgICAgeworKwkgICAgICAvKiBTdGFydCBidWlsZGluZyBhIG5ldyBleGFjdG4uICAqLworKworKyAgICAgICAgICAgICAgbGFzdHN0YXJ0ID0gYjsKKysKKysjaWZkZWYgV0NIQVIKKysJICAgICAgLyogSXMgdGhpcyBleGFjdG4gYmluYXJ5IGRhdGEgb3IgY2hhcmFjdGVyPyAqLworKwkgICAgICBpc19leGFjdG5fYmluID0gaXNfYmluYXJ5W3AgLSAxIC0gcGF0dGVybl07CisrCSAgICAgIGlmIChpc19leGFjdG5fYmluKQorKwkJICBCVUZfUFVTSF8yIChleGFjdG5fYmluLCAwKTsKKysJICAgICAgZWxzZQorKwkJICBCVUZfUFVTSF8yIChleGFjdG4sIDApOworKyNlbHNlCisrCSAgICAgIEJVRl9QVVNIXzIgKGV4YWN0biwgMCk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCSAgICAgIHBlbmRpbmdfZXhhY3QgPSBiIC0gMTsKKysgICAgICAgICAgICB9CisrCisrCSAgQlVGX1BVU0ggKGMpOworKyAgICAgICAgICAoKnBlbmRpbmdfZXhhY3QpKys7CisrCSAgYnJlYWs7CisrICAgICAgICB9IC8qIHN3aXRjaCAoYykgKi8KKysgICAgfSAvKiB3aGlsZSBwICE9IHBlbmQgKi8KKysKKysKKysgIC8qIFRocm91Z2ggdGhlIHBhdHRlcm4gbm93LiAgKi8KKysKKysgIGlmIChmaXh1cF9hbHRfanVtcCkKKysgICAgU1RPUkVfSlVNUCAoanVtcF9wYXN0X2FsdCwgZml4dXBfYWx0X2p1bXAsIGIpOworKworKyAgaWYgKCFDT01QSUxFX1NUQUNLX0VNUFRZKQorKyAgICBGUkVFX1NUQUNLX1JFVFVSTiAoUkVHX0VQQVJFTik7CisrCisrICAvKiBJZiB3ZSBkb24ndCB3YW50IGJhY2t0cmFja2luZywgZm9yY2Ugc3VjY2VzcworKyAgICAgdGhlIGZpcnN0IHRpbWUgd2UgcmVhY2ggdGhlIGVuZCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrICBpZiAoc3ludGF4ICYgUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HKQorKyAgICBCVUZfUFVTSCAoc3VjY2VlZCk7CisrCisrI2lmZGVmIFdDSEFSCisrICBmcmVlIChwYXR0ZXJuKTsKKysgIGZyZWUgKG1ic19vZmZzZXQpOworKyAgZnJlZSAoaXNfYmluYXJ5KTsKKysjZW5kaWYKKysgIGZyZWUgKGNvbXBpbGVfc3RhY2suc3RhY2spOworKworKyAgLyogV2UgaGF2ZSBzdWNjZWVkZWQ7IHNldCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgYnVmcC0+dXNlZCA9ICh1aW50cHRyX3QpIGIgLSAodWludHB0cl90KSBDT01QSUxFRF9CVUZGRVJfVkFSOworKyNlbHNlCisrICBidWZwLT51c2VkID0gYiAtIGJ1ZnAtPmJ1ZmZlcjsKKysjZW5kaWYKKysKKysjaWZkZWYgREVCVUcKKysgIGlmIChkZWJ1ZykKKysgICAgeworKyAgICAgIERFQlVHX1BSSU5UMSAoIlxuQ29tcGlsZWQgcGF0dGVybjogXG4iKTsKKysgICAgICBQUkVGSVgocHJpbnRfY29tcGlsZWRfcGF0dGVybikgKGJ1ZnApOworKyAgICB9CisrI2VuZGlmIC8qIERFQlVHICovCisrCisrI2lmbmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysgIC8qIEluaXRpYWxpemUgdGhlIGZhaWx1cmUgc3RhY2sgdG8gdGhlIGxhcmdlc3QgcG9zc2libGUgc3RhY2suICBUaGlzCisrICAgICBpc24ndCBuZWNlc3NhcnkgdW5sZXNzIHdlJ3JlIHRyeWluZyB0byBhdm9pZCBjYWxsaW5nIGFsbG9jYSBpbgorKyAgICAgdGhlIHNlYXJjaCBhbmQgbWF0Y2ggcm91dGluZXMuICAqLworKyAgeworKyAgICBpbnQgbnVtX3JlZ3MgPSBidWZwLT5yZV9uc3ViICsgMTsKKysKKysgICAgLyogU2luY2UgRE9VQkxFX0ZBSUxfU1RBQ0sgcmVmdXNlcyB0byBkb3VibGUgb25seSBpZiB0aGUgY3VycmVudCBzaXplCisrICAgICAgIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiByZV9tYXhfZmFpbHVyZXMsIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHN0YWNrCisrICAgICAgIGlzIDIgKiByZV9tYXhfZmFpbHVyZXMgZmFpbHVyZSBwb2ludHMuICAqLworKyAgICBpZiAoZmFpbF9zdGFjay5zaXplIDwgKDIgKiByZV9tYXhfZmFpbHVyZXMgKiBNQVhfRkFJTFVSRV9JVEVNUykpCisrICAgICAgeworKwlmYWlsX3N0YWNrLnNpemUgPSAoMiAqIHJlX21heF9mYWlsdXJlcyAqIE1BWF9GQUlMVVJFX0lURU1TKTsKKysKKysjIGlmZGVmIGVtYWNzCisrCWlmICghIGZhaWxfc3RhY2suc3RhY2spCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIHhtYWxsb2MgKGZhaWxfc3RhY2suc2l6ZQorKwkJCQkgICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpOworKwllbHNlCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIHhyZWFsbG9jIChmYWlsX3N0YWNrLnN0YWNrLAorKwkJCQkgICAgIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgICAgKiBzaXplb2YgKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSkpKTsKKysjIGVsc2UgLyogbm90IGVtYWNzICovCisrCWlmICghIGZhaWxfc3RhY2suc3RhY2spCisrCSAgZmFpbF9zdGFjay5zdGFjaworKwkgICAgPSAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpICopIG1hbGxvYyAoZmFpbF9zdGFjay5zaXplCisrCQkJCSAgICogc2l6ZW9mIChQUkVGSVgoZmFpbF9zdGFja19lbHRfdCkpKTsKKysJZWxzZQorKwkgIGZhaWxfc3RhY2suc3RhY2sKKysJICAgID0gKFBSRUZJWChmYWlsX3N0YWNrX2VsdF90KSAqKSByZWFsbG9jIChmYWlsX3N0YWNrLnN0YWNrLAorKwkJCQkJICAgIChmYWlsX3N0YWNrLnNpemUKKysJCQkJICAgICAqIHNpemVvZiAoUFJFRklYKGZhaWxfc3RhY2tfZWx0X3QpKSkpOworKyMgZW5kaWYgLyogbm90IGVtYWNzICovCisrICAgICAgfQorKworKyAgIFBSRUZJWChyZWdleF9ncm93X3JlZ2lzdGVycykgKG51bV9yZWdzKTsKKysgIH0KKysjZW5kaWYgLyogbm90IE1BVENIX01BWV9BTExPQ0FURSAqLworKworKyAgcmV0dXJuIFJFR19OT0VSUk9SOworK30gLyogcmVnZXhfY29tcGlsZSAqLworKworKy8qIFN1YnJvdXRpbmVzIGZvciBgcmVnZXhfY29tcGlsZScuICAqLworKworKy8qIFN0b3JlIE9QIGF0IExPQyBmb2xsb3dlZCBieSB0d28tYnl0ZSBpbnRlZ2VyIHBhcmFtZXRlciBBUkcuICAqLworKy8qIGlmZGVmIFdDSEFSLCBpbnRlZ2VyIHBhcmFtZXRlciBpcyAxIHdjaGFyX3QuICAqLworKworK3N0YXRpYyB2b2lkCisrUFJFRklYKHN0b3JlX29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcpCisreworKyAgKmxvYyA9IChVQ0hBUl9UKSBvcDsKKysgIFNUT1JFX05VTUJFUiAobG9jICsgMSwgYXJnKTsKKyt9CisrCisrCisrLyogTGlrZSBgc3RvcmVfb3AxJywgYnV0IGZvciB0d28gdHdvLWJ5dGUgcGFyYW1ldGVycyBBUkcxIGFuZCBBUkcyLiAgKi8KKysvKiBpZmRlZiBXQ0hBUiwgaW50ZWdlciBwYXJhbWV0ZXIgaXMgMSB3Y2hhcl90LiAgKi8KKysKKytzdGF0aWMgdm9pZAorK1BSRUZJWChzdG9yZV9vcDIpIChyZV9vcGNvZGVfdCBvcCwgVUNIQVJfVCAqbG9jLCBpbnQgYXJnMSwgaW50IGFyZzIpCisreworKyAgKmxvYyA9IChVQ0hBUl9UKSBvcDsKKysgIFNUT1JFX05VTUJFUiAobG9jICsgMSwgYXJnMSk7CisrICBTVE9SRV9OVU1CRVIgKGxvYyArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFLCBhcmcyKTsKKyt9CisrCisrCisrLyogQ29weSB0aGUgYnl0ZXMgZnJvbSBMT0MgdG8gRU5EIHRvIG9wZW4gdXAgdGhyZWUgYnl0ZXMgb2Ygc3BhY2UgYXQgTE9DCisrICAgZm9yIE9QIGZvbGxvd2VkIGJ5IHR3by1ieXRlIGludGVnZXIgcGFyYW1ldGVyIEFSRy4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoaW5zZXJ0X29wMSkgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcsIFVDSEFSX1QgKmVuZCkKKyt7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZnJvbSA9IGVuZDsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnB0byA9IGVuZCArIDEgKyBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgd2hpbGUgKHBmcm9tICE9IGxvYykKKysgICAgKi0tcHRvID0gKi0tcGZyb207CisrCisrICBQUkVGSVgoc3RvcmVfb3AxKSAob3AsIGxvYywgYXJnKTsKKyt9CisrCisrCisrLyogTGlrZSBgaW5zZXJ0X29wMScsIGJ1dCBmb3IgdHdvIHR3by1ieXRlIHBhcmFtZXRlcnMgQVJHMSBhbmQgQVJHMi4gICovCisrLyogaWZkZWYgV0NIQVIsIGludGVnZXIgcGFyYW1ldGVyIGlzIDEgd2NoYXJfdC4gICovCisrCisrc3RhdGljIHZvaWQKKytQUkVGSVgoaW5zZXJ0X29wMikgKHJlX29wY29kZV90IG9wLCBVQ0hBUl9UICpsb2MsIGludCBhcmcxLAorKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZzIsIFVDSEFSX1QgKmVuZCkKKyt7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZnJvbSA9IGVuZDsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnB0byA9IGVuZCArIDEgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgIHdoaWxlIChwZnJvbSAhPSBsb2MpCisrICAgICotLXB0byA9ICotLXBmcm9tOworKworKyAgUFJFRklYKHN0b3JlX29wMikgKG9wLCBsb2MsIGFyZzEsIGFyZzIpOworK30KKysKKysKKysvKiBQIHBvaW50cyB0byBqdXN0IGFmdGVyIGEgXiBpbiBQQVRURVJOLiAgUmV0dXJuIHRydWUgaWYgdGhhdCBeIGNvbWVzCisrICAgYWZ0ZXIgYW4gYWx0ZXJuYXRpdmUgb3IgYSBiZWdpbi1zdWJleHByZXNzaW9uLiAgV2UgYXNzdW1lIHRoZXJlIGlzIGF0CisrICAgbGVhc3Qgb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIF4uICAqLworKworK3N0YXRpYyBib29sZWFuCisrUFJFRklYKGF0X2JlZ2xpbmVfbG9jX3ApIChjb25zdCBDSEFSX1QgKnBhdHRlcm4sIGNvbnN0IENIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCisreworKyAgY29uc3QgQ0hBUl9UICpwcmV2ID0gcCAtIDI7CisrICBib29sZWFuIHByZXZfcHJldl9iYWNrc2xhc2ggPSBwcmV2ID4gcGF0dGVybiAmJiBwcmV2Wy0xXSA9PSAnXFwnOworKworKyAgcmV0dXJuCisrICAgICAgIC8qIEFmdGVyIGEgc3ViZXhwcmVzc2lvbj8gICovCisrICAgICAgICgqcHJldiA9PSAnKCcgJiYgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUyB8fCBwcmV2X3ByZXZfYmFja3NsYXNoKSkKKysgICAgICAgLyogQWZ0ZXIgYW4gYWx0ZXJuYXRpdmU/ICAqLworKyAgICB8fCAoKnByZXYgPT0gJ3wnICYmIChzeW50YXggJiBSRV9OT19CS19WQkFSIHx8IHByZXZfcHJldl9iYWNrc2xhc2gpKTsKKyt9CisrCisrCisrLyogVGhlIGR1YWwgb2YgYXRfYmVnbGluZV9sb2NfcC4gIFRoaXMgb25lIGlzIGZvciAkLiAgV2UgYXNzdW1lIHRoZXJlIGlzCisrICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBhZnRlciB0aGUgJCwgaS5lLiwgYFAgPCBQRU5EJy4gICovCisrCisrc3RhdGljIGJvb2xlYW4KKytQUkVGSVgoYXRfZW5kbGluZV9sb2NfcCkgKGNvbnN0IENIQVJfVCAqcCwgY29uc3QgQ0hBUl9UICpwZW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCkKKyt7CisrICBjb25zdCBDSEFSX1QgKm5leHQgPSBwOworKyAgYm9vbGVhbiBuZXh0X2JhY2tzbGFzaCA9ICpuZXh0ID09ICdcXCc7CisrICBjb25zdCBDSEFSX1QgKm5leHRfbmV4dCA9IHAgKyAxIDwgcGVuZCA/IHAgKyAxIDogMDsKKysKKysgIHJldHVybgorKyAgICAgICAvKiBCZWZvcmUgYSBzdWJleHByZXNzaW9uPyAgKi8KKysgICAgICAgKHN5bnRheCAmIFJFX05PX0JLX1BBUkVOUyA/ICpuZXh0ID09ICcpJworKyAgICAgICAgOiBuZXh0X2JhY2tzbGFzaCAmJiBuZXh0X25leHQgJiYgKm5leHRfbmV4dCA9PSAnKScpCisrICAgICAgIC8qIEJlZm9yZSBhbiBhbHRlcm5hdGl2ZT8gICovCisrICAgIHx8IChzeW50YXggJiBSRV9OT19CS19WQkFSID8gKm5leHQgPT0gJ3wnCisrICAgICAgICA6IG5leHRfYmFja3NsYXNoICYmIG5leHRfbmV4dCAmJiAqbmV4dF9uZXh0ID09ICd8Jyk7CisrfQorKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogUmV0dXJucyB0cnVlIGlmIFJFR05VTSBpcyBpbiBvbmUgb2YgQ09NUElMRV9TVEFDSydzIGVsZW1lbnRzIGFuZAorKyAgIGZhbHNlIGlmIGl0J3Mgbm90LiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK2dyb3VwX2luX2NvbXBpbGVfc3RhY2sgKGNvbXBpbGVfc3RhY2tfdHlwZSBjb21waWxlX3N0YWNrLCByZWdudW1fdCByZWdudW0pCisreworKyAgaW50IHRoaXNfZWxlbWVudDsKKysKKysgIGZvciAodGhpc19lbGVtZW50ID0gY29tcGlsZV9zdGFjay5hdmFpbCAtIDE7CisrICAgICAgIHRoaXNfZWxlbWVudCA+PSAwOworKyAgICAgICB0aGlzX2VsZW1lbnQtLSkKKysgICAgaWYgKGNvbXBpbGVfc3RhY2suc3RhY2tbdGhpc19lbGVtZW50XS5yZWdudW0gPT0gcmVnbnVtKQorKyAgICAgIHJldHVybiB0cnVlOworKworKyAgcmV0dXJuIGZhbHNlOworK30KKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysjaWZkZWYgSU5TSURFX1JFQ1VSU0lPTgorKworKyNpZmRlZiBXQ0hBUgorKy8qIFRoaXMgaW5zZXJ0IHNwYWNlLCB3aGljaCBzaXplIGlzICJudW0iLCBpbnRvIHRoZSBwYXR0ZXJuIGF0ICJsb2MiLgorKyAgICJlbmQiIG11c3QgcG9pbnQgdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJ1ZmZlci4gICovCisrc3RhdGljIHZvaWQKKytpbnNlcnRfc3BhY2UgKGludCBudW0sIENIQVJfVCAqbG9jLCBDSEFSX1QgKmVuZCkKKyt7CisrICByZWdpc3RlciBDSEFSX1QgKnB0byA9IGVuZDsKKysgIHJlZ2lzdGVyIENIQVJfVCAqcGZyb20gPSBlbmQgLSBudW07CisrCisrICB3aGlsZSAocGZyb20gPj0gbG9jKQorKyAgICAqcHRvLS0gPSAqcGZyb20tLTsKKyt9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrI2lmZGVmIFdDSEFSCisrc3RhdGljIHJlZ19lcnJjb2RlX3QKKyt3Y3NfY29tcGlsZV9yYW5nZSAoQ0hBUl9UIHJhbmdlX3N0YXJ0X2NoYXIsIGNvbnN0IENIQVJfVCAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnBlbmQsIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSwKKysgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgQ0hBUl9UICpiLCBDSEFSX1QgKmNoYXJfc2V0KQorK3sKKysgIGNvbnN0IENIQVJfVCAqcCA9ICpwX3B0cjsKKysgIENIQVJfVCByYW5nZV9zdGFydCwgcmFuZ2VfZW5kOworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrIyBpZmRlZiBfTElCQworKyAgdWludDMyX3QgbnJ1bGVzOworKyAgdWludDMyX3Qgc3RhcnRfdmFsLCBlbmRfdmFsOworKyMgZW5kaWYKKysgIGlmIChwID09IHBlbmQpCisrICAgIHJldHVybiBSRUdfRVJBTkdFOworKworKyMgaWZkZWYgX0xJQkMKKysgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisrICBpZiAobnJ1bGVzICE9IDApCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IGNoYXIgKikgX05MX0NVUlJFTlQoTENfQ09MTEFURSwKKysJCQkJCQkgICAgICAgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKysgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKyAgICAgIGlmIChyYW5nZV9zdGFydF9jaGFyIDwgLTEpCisrCXsKKysJICAvKiByYW5nZV9zdGFydCBpcyBhIGNvbGxhdGluZyBzeW1ib2wuICAqLworKwkgIGludDMyX3QgKndleHRyYTsKKysJICAvKiBSZXRyZWl2ZSB0aGUgaW5kZXggYW5kIGdldCBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworKwkgIHdleHRyYSA9IChpbnQzMl90KikoZXh0cmEgKyBjaGFyX3NldFstcmFuZ2Vfc3RhcnRfY2hhcl0pOworKwkgIHN0YXJ0X3ZhbCA9IHdleHRyYVsxICsgKndleHRyYV07CisrCX0KKysgICAgICBlbHNlCisrCXN0YXJ0X3ZhbCA9IGNvbGxzZXFfdGFibGVfbG9va3VwKGNvbGxzZXEsIFRSQU5TTEFURShyYW5nZV9zdGFydF9jaGFyKSk7CisrCisrICAgICAgZW5kX3ZhbCA9IGNvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2VxLCBUUkFOU0xBVEUgKHBbMF0pKTsKKysKKysgICAgICAvKiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHJhbmdlIGlzIGVtcHR5IGFuZCB0aGUgc3ludGF4IHByb2hpYml0cworKwkgdGhpcy4gICovCisrICAgICAgcmV0ID0gKChzeW50YXggJiBSRV9OT19FTVBUWV9SQU5HRVMpCisrCSAgICAgJiYgKHN0YXJ0X3ZhbCA+IGVuZF92YWwpKT8gUkVHX0VSQU5HRSA6IFJFR19OT0VSUk9SOworKworKyAgICAgIC8qIEluc2VydCBzcGFjZSB0byB0aGUgZW5kIG9mIHRoZSBjaGFyX3Jhbmdlcy4gICovCisrICAgICAgaW5zZXJ0X3NwYWNlKDIsIGIgLSBjaGFyX3NldFs1XSAtIDIsIGIgLSAxKTsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDIpID0gKHdjaGFyX3Qpc3RhcnRfdmFsOworKyAgICAgICooYiAtIGNoYXJfc2V0WzVdIC0gMSkgPSAod2NoYXJfdCllbmRfdmFsOworKyAgICAgIGNoYXJfc2V0WzRdKys7IC8qIHJhbmdlc19pbmRleCAqLworKyAgICB9CisrICBlbHNlCisrIyBlbmRpZgorKyAgICB7CisrICAgICAgcmFuZ2Vfc3RhcnQgPSAocmFuZ2Vfc3RhcnRfY2hhciA+PSAwKT8gVFJBTlNMQVRFIChyYW5nZV9zdGFydF9jaGFyKToKKysJcmFuZ2Vfc3RhcnRfY2hhcjsKKysgICAgICByYW5nZV9lbmQgPSBUUkFOU0xBVEUgKHBbMF0pOworKyAgICAgIC8qIFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgcmFuZ2UgaXMgZW1wdHkgYW5kIHRoZSBzeW50YXggcHJvaGliaXRzCisrCSB0aGlzLiAgKi8KKysgICAgICByZXQgPSAoKHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUykKKysJICAgICAmJiAocmFuZ2Vfc3RhcnQgPiByYW5nZV9lbmQpKT8gUkVHX0VSQU5HRSA6IFJFR19OT0VSUk9SOworKworKyAgICAgIC8qIEluc2VydCBzcGFjZSB0byB0aGUgZW5kIG9mIHRoZSBjaGFyX3Jhbmdlcy4gICovCisrICAgICAgaW5zZXJ0X3NwYWNlKDIsIGIgLSBjaGFyX3NldFs1XSAtIDIsIGIgLSAxKTsKKysgICAgICAqKGIgLSBjaGFyX3NldFs1XSAtIDIpID0gcmFuZ2Vfc3RhcnQ7CisrICAgICAgKihiIC0gY2hhcl9zZXRbNV0gLSAxKSA9IHJhbmdlX2VuZDsKKysgICAgICBjaGFyX3NldFs0XSsrOyAvKiByYW5nZXNfaW5kZXggKi8KKysgICAgfQorKyAgLyogSGF2ZSB0byBpbmNyZW1lbnQgdGhlIHBvaW50ZXIgaW50byB0aGUgcGF0dGVybiBzdHJpbmcsIHNvIHRoZQorKyAgICAgY2FsbGVyIGlzbid0IHN0aWxsIGF0IHRoZSBlbmRpbmcgY2hhcmFjdGVyLiAgKi8KKysgICgqcF9wdHIpKys7CisrCisrICByZXR1cm4gcmV0OworK30KKysjZWxzZSAvKiBCWVRFICovCisrLyogUmVhZCB0aGUgZW5kaW5nIGNoYXJhY3RlciBvZiBhIHJhbmdlIChpbiBhIGJyYWNrZXQgZXhwcmVzc2lvbikgZnJvbSB0aGUKKysgICB1bmNvbXBpbGVkIHBhdHRlcm4gKlBfUFRSICh3aGljaCBlbmRzIGF0IFBFTkQpLiAgV2UgYXNzdW1lIHRoZQorKyAgIHN0YXJ0aW5nIGNoYXJhY3RlciBpcyBpbiBgUFstMl0nLiAgKGBQWy0xXScgaXMgdGhlIGNoYXJhY3RlciBgLScuKQorKyAgIFRoZW4gd2Ugc2V0IHRoZSB0cmFuc2xhdGlvbiBvZiBhbGwgYml0cyBiZXR3ZWVuIHRoZSBzdGFydGluZyBhbmQKKysgICBlbmRpbmcgY2hhcmFjdGVycyAoaW5jbHVzaXZlKSBpbiB0aGUgY29tcGlsZWQgcGF0dGVybiBCLgorKworKyAgIFJldHVybiBhbiBlcnJvciBjb2RlLgorKworKyAgIFdlIHVzZSB0aGVzZSBzaG9ydCB2YXJpYWJsZSBuYW1lcyBzbyB3ZSBjYW4gdXNlIHRoZSBzYW1lIG1hY3JvcyBhcworKyAgIGByZWdleF9jb21waWxlJyBpdHNlbGYuICAqLworKworK3N0YXRpYyByZWdfZXJyY29kZV90CisrYnl0ZV9jb21waWxlX3JhbmdlICh1bnNpZ25lZCBpbnQgcmFuZ2Vfc3RhcnRfY2hhciwgY29uc3QgY2hhciAqKnBfcHRyLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGVuZCwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlLAorKyAgICAgICAgICAgICAgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgdW5zaWduZWQgY2hhciAqYikKKyt7CisrICB1bnNpZ25lZCB0aGlzX2NoYXI7CisrICBjb25zdCBjaGFyICpwID0gKnBfcHRyOworKyAgcmVnX2VycmNvZGVfdCByZXQ7CisrIyBpZiBfTElCQworKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcTsKKysgIHVuc2lnbmVkIGludCBzdGFydF9jb2xzZXE7CisrICB1bnNpZ25lZCBpbnQgZW5kX2NvbHNlcTsKKysjIGVsc2UKKysgIHVuc2lnbmVkIGVuZF9jaGFyOworKyMgZW5kaWYKKysKKysgIGlmIChwID09IHBlbmQpCisrICAgIHJldHVybiBSRUdfRVJBTkdFOworKworKyAgLyogSGF2ZSB0byBpbmNyZW1lbnQgdGhlIHBvaW50ZXIgaW50byB0aGUgcGF0dGVybiBzdHJpbmcsIHNvIHRoZQorKyAgICAgY2FsbGVyIGlzbid0IHN0aWxsIGF0IHRoZSBlbmRpbmcgY2hhcmFjdGVyLiAgKi8KKysgICgqcF9wdHIpKys7CisrCisrICAvKiBSZXBvcnQgYW4gZXJyb3IgaWYgdGhlIHJhbmdlIGlzIGVtcHR5IGFuZCB0aGUgc3ludGF4IHByb2hpYml0cyB0aGlzLiAgKi8KKysgIHJldCA9IHN5bnRheCAmIFJFX05PX0VNUFRZX1JBTkdFUyA/IFJFR19FUkFOR0UgOiBSRUdfTk9FUlJPUjsKKysKKysjIGlmIF9MSUJDCisrICBjb2xsc2VxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisrCQkJCQkJIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisrCisrICBzdGFydF9jb2xzZXEgPSBjb2xsc2VxWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKHJhbmdlX3N0YXJ0X2NoYXIpXTsKKysgIGVuZF9jb2xzZXEgPSBjb2xsc2VxWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKHBbMF0pXTsKKysgIGZvciAodGhpc19jaGFyID0gMDsgdGhpc19jaGFyIDw9ICh1bnNpZ25lZCBjaGFyKSAtMTsgKyt0aGlzX2NoYXIpCisrICAgIHsKKysgICAgICB1bnNpZ25lZCBpbnQgdGhpc19jb2xzZXEgPSBjb2xsc2VxWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKHRoaXNfY2hhcildOworKworKyAgICAgIGlmIChzdGFydF9jb2xzZXEgPD0gdGhpc19jb2xzZXEgJiYgdGhpc19jb2xzZXEgPD0gZW5kX2NvbHNlcSkKKysJeworKwkgIFNFVF9MSVNUX0JJVCAoVFJBTlNMQVRFICh0aGlzX2NoYXIpKTsKKysJICByZXQgPSBSRUdfTk9FUlJPUjsKKysJfQorKyAgICB9CisrIyBlbHNlCisrICAvKiBIZXJlIHdlIHNlZSB3aHkgYHRoaXNfY2hhcicgaGFzIHRvIGJlIGxhcmdlciB0aGFuIGFuIGB1bnNpZ25lZAorKyAgICAgY2hhcicgLS0gd2Ugd291bGQgb3RoZXJ3aXNlIGdvIGludG8gYW4gaW5maW5pdGUgbG9vcCwgc2luY2UgYWxsCisrICAgICBjaGFyYWN0ZXJzIDw9IDB4ZmYuICAqLworKyAgcmFuZ2Vfc3RhcnRfY2hhciA9IFRSQU5TTEFURSAocmFuZ2Vfc3RhcnRfY2hhcik7CisrICAvKiBUUkFOU0xBVEUocFswXSkgaXMgY2FzdGVkIHRvIGNoYXIgKG5vdCB1bnNpZ25lZCBjaGFyKSBpbiBUUkFOU0xBVEUsCisrICAgICBhbmQgc29tZSBjb21waWxlcnMgY2FzdCBpdCB0byBpbnQgaW1wbGljaXRseSwgc28gZm9sbG93aW5nIGZvcl9sb29wCisrICAgICBtYXkgZmFsbCB0byAoYWxtb3N0KSBpbmZpbml0ZSBsb29wLgorKyAgICAgZS5nLiBJZiB0cmFuc2xhdGVbcFswXV0gPSAweGZmLCBlbmRfY2hhciBtYXkgZXF1YWxzIHRvIDB4ZmZmZmZmZmYuCisrICAgICBUbyBhdm9pZCB0aGlzLCB3ZSBjYXN0IHBbMF0gdG8gdW5zaWduZWQgaW50IGFuZCB0cnVuY2F0ZSBpdC4gICovCisrICBlbmRfY2hhciA9ICgodW5zaWduZWQpVFJBTlNMQVRFKHBbMF0pICYgKCgxIDw8IEJZVEVXSURUSCkgLSAxKSk7CisrCisrICBmb3IgKHRoaXNfY2hhciA9IHJhbmdlX3N0YXJ0X2NoYXI7IHRoaXNfY2hhciA8PSBlbmRfY2hhcjsgKyt0aGlzX2NoYXIpCisrICAgIHsKKysgICAgICBTRVRfTElTVF9CSVQgKFRSQU5TTEFURSAodGhpc19jaGFyKSk7CisrICAgICAgcmV0ID0gUkVHX05PRVJST1I7CisrICAgIH0KKysjIGVuZGlmCisrCisrICByZXR1cm4gcmV0OworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysMCisrLyogcmVfY29tcGlsZV9mYXN0bWFwIGNvbXB1dGVzIGEgYGBmYXN0bWFwJycgZm9yIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluCisrICAgQlVGUC4gIEEgZmFzdG1hcCByZWNvcmRzIHdoaWNoIG9mIHRoZSAoMSA8PCBCWVRFV0lEVEgpIHBvc3NpYmxlCisrICAgY2hhcmFjdGVycyBjYW4gc3RhcnQgYSBzdHJpbmcgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuLiAgVGhpcyBmYXN0bWFwCisrICAgaXMgdXNlZCBieSByZV9zZWFyY2ggdG8gc2tpcCBxdWlja2x5IG92ZXIgaW1wb3NzaWJsZSBzdGFydGluZyBwb2ludHMuCisrCisrICAgVGhlIGNhbGxlciBtdXN0IHN1cHBseSB0aGUgYWRkcmVzcyBvZiBhICgxIDw8IEJZVEVXSURUSCktYnl0ZSBkYXRhCisrICAgYXJlYSBhcyBCVUZQLT5mYXN0bWFwLgorKworKyAgIFdlIHNldCB0aGUgYGZhc3RtYXAnLCBgZmFzdG1hcF9hY2N1cmF0ZScsIGFuZCBgY2FuX2JlX251bGwnIGZpZWxkcyBpbgorKyAgIHRoZSBwYXR0ZXJuIGJ1ZmZlci4KKysKKysgICBSZXR1cm5zIDAgaWYgd2Ugc3VjY2VlZCwgLTIgaWYgYW4gaW50ZXJuYWwgZXJyb3IuICAgKi8KKysKKysjaWZkZWYgV0NIQVIKKysvKiBsb2NhbCBmdW5jdGlvbiBmb3IgcmVfY29tcGlsZV9mYXN0bWFwLgorKyAgIHRydW5jYXRlIHdjaGFyX3QgY2hhcmFjdGVyIHRvIGNoYXIuICAqLworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHRydW5jYXRlX3djaGFyIChDSEFSX1QgYyk7CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIKKyt0cnVuY2F0ZV93Y2hhciAoQ0hBUl9UIGMpCisreworKyAgdW5zaWduZWQgY2hhciBidWZbTUJfQ1VSX01BWF07CisrICBtYnN0YXRlX3Qgc3RhdGU7CisrICBpbnQgcmV0dmFsOworKyAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAoc3RhdGUpKTsKKysjIGlmZGVmIF9MSUJDCisrICByZXR2YWwgPSBfX3djcnRvbWIgKGJ1ZiwgYywgJnN0YXRlKTsKKysjIGVsc2UKKysgIHJldHZhbCA9IHdjcnRvbWIgKGJ1ZiwgYywgJnN0YXRlKTsKKysjIGVuZGlmCisrICByZXR1cm4gcmV0dmFsID4gMCA/IGJ1ZlswXSA6ICh1bnNpZ25lZCBjaGFyKSBjOworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKytzdGF0aWMgaW50CisrUFJFRklYKHJlX2NvbXBpbGVfZmFzdG1hcCkgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICBpbnQgaiwgazsKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFCisrICBQUkVGSVgoZmFpbF9zdGFja190eXBlKSBmYWlsX3N0YWNrOworKyNlbmRpZgorKyNpZm5kZWYgUkVHRVhfTUFMTE9DCisrICBjaGFyICpkZXN0aW5hdGlvbjsKKysjZW5kaWYKKysKKysgIHJlZ2lzdGVyIGNoYXIgKmZhc3RtYXAgPSBidWZwLT5mYXN0bWFwOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogV2UgbmVlZCB0byBjYXN0IHBhdHRlcm4gdG8gKHdjaGFyX3QqKSwgYmVjYXVzZSB3ZSBjYXN0ZWQgdGhpcyBjb21waWxlZAorKyAgICAgcGF0dGVybiB0byAoY2hhciopIGluIHJlZ2V4X2NvbXBpbGUuICAqLworKyAgVUNIQVJfVCAqcGF0dGVybiA9IChVQ0hBUl9UKilidWZwLT5idWZmZXI7CisrICByZWdpc3RlciBVQ0hBUl9UICpwZW5kID0gKFVDSEFSX1QqKSAoYnVmcC0+YnVmZmVyICsgYnVmcC0+dXNlZCk7CisrI2Vsc2UgLyogQllURSAqLworKyAgVUNIQVJfVCAqcGF0dGVybiA9IGJ1ZnAtPmJ1ZmZlcjsKKysgIHJlZ2lzdGVyIFVDSEFSX1QgKnBlbmQgPSBwYXR0ZXJuICsgYnVmcC0+dXNlZDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysgIFVDSEFSX1QgKnAgPSBwYXR0ZXJuOworKworKyNpZmRlZiBSRUxfQUxMT0MKKysgIC8qIFRoaXMgaG9sZHMgdGhlIHBvaW50ZXIgdG8gdGhlIGZhaWx1cmUgc3RhY2ssIHdoZW4KKysgICAgIGl0IGlzIGFsbG9jYXRlZCByZWxvY2F0YWJseS4gICovCisrICBmYWlsX3N0YWNrX2VsdF90ICpmYWlsdXJlX3N0YWNrX3B0cjsKKysjZW5kaWYKKysKKysgIC8qIEFzc3VtZSB0aGF0IGVhY2ggcGF0aCB0aHJvdWdoIHRoZSBwYXR0ZXJuIGNhbiBiZSBudWxsIHVudGlsCisrICAgICBwcm92ZW4gb3RoZXJ3aXNlLiAgV2Ugc2V0IHRoaXMgZmFsc2UgYXQgdGhlIGJvdHRvbSBvZiBzd2l0Y2gKKysgICAgIHN0YXRlbWVudCwgdG8gd2hpY2ggd2UgZ2V0IG9ubHkgaWYgYSBwYXJ0aWN1bGFyIHBhdGggZG9lc24ndAorKyAgICAgbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gICovCisrICBib29sZWFuIHBhdGhfY2FuX2JlX251bGwgPSB0cnVlOworKworKyAgLyogV2UgYXJlbid0IGRvaW5nIGEgYHN1Y2NlZWRfbicgdG8gYmVnaW4gd2l0aC4gICovCisrICBib29sZWFuIHN1Y2NlZWRfbl9wID0gZmFsc2U7CisrCisrICBhc3NlcnQgKGZhc3RtYXAgIT0gTlVMTCAmJiBwICE9IE5VTEwpOworKworKyAgSU5JVF9GQUlMX1NUQUNLICgpOworKyAgYnplcm8gKGZhc3RtYXAsIDEgPDwgQllURVdJRFRIKTsgIC8qIEFzc3VtZSBub3RoaW5nJ3MgdmFsaWQuICAqLworKyAgYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDE7CSAgICAvKiBJdCB3aWxsIGJlIHdoZW4gd2UncmUgZG9uZS4gICovCisrICBidWZwLT5jYW5fYmVfbnVsbCA9IDA7CisrCisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIGlmIChwID09IHBlbmQgfHwgKnAgPT0gKFVDSEFSX1QpIHN1Y2NlZWQpCisrCXsKKysJICAvKiBXZSBoYXZlIHJlYWNoZWQgdGhlIChlZmZlY3RpdmUpIGVuZCBvZiBwYXR0ZXJuLiAgKi8KKysJICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpCisrCSAgICB7CisrCSAgICAgIGJ1ZnAtPmNhbl9iZV9udWxsIHw9IHBhdGhfY2FuX2JlX251bGw7CisrCisrCSAgICAgIC8qIFJlc2V0IGZvciBuZXh0IHBhdGguICAqLworKwkgICAgICBwYXRoX2Nhbl9iZV9udWxsID0gdHJ1ZTsKKysKKysJICAgICAgcCA9IGZhaWxfc3RhY2suc3RhY2tbLS1mYWlsX3N0YWNrLmF2YWlsXS5wb2ludGVyOworKworKwkgICAgICBjb250aW51ZTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICBicmVhazsKKysJfQorKworKyAgICAgIC8qIFdlIHNob3VsZCBuZXZlciBiZSBhYm91dCB0byBnbyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gICovCisrICAgICAgYXNzZXJ0IChwIDwgcGVuZCk7CisrCisrICAgICAgc3dpdGNoIChTV0lUQ0hfRU5VTV9DQVNUICgocmVfb3Bjb2RlX3QpICpwKyspKQorKwl7CisrCisrICAgICAgICAvKiBJIGd1ZXNzIHRoZSBpZGVhIGhlcmUgaXMgdG8gc2ltcGx5IG5vdCBib3RoZXIgd2l0aCBhIGZhc3RtYXAKKysgICAgICAgICAgIGlmIGEgYmFja3JlZmVyZW5jZSBpcyB1c2VkLCBzaW5jZSBpdCdzIHRvbyBoYXJkIHRvIGZpZ3VyZSBvdXQKKysgICAgICAgICAgIHRoZSBmYXN0bWFwIGZvciB0aGUgY29ycmVzcG9uZGluZyBncm91cC4gIFNldHRpbmcKKysgICAgICAgICAgIGBjYW5fYmVfbnVsbCcgc3RvcHMgYHJlX3NlYXJjaF8yJyBmcm9tIHVzaW5nIHRoZSBmYXN0bWFwLCBzbworKyAgICAgICAgICAgdGhhdCBpcyBhbGwgd2UgZG8uICAqLworKwljYXNlIGR1cGxpY2F0ZToKKysJICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisrICAgICAgICAgIGdvdG8gZG9uZTsKKysKKysKKysgICAgICAvKiBGb2xsb3dpbmcgYXJlIHRoZSBjYXNlcyB3aGljaCBtYXRjaCBhIGNoYXJhY3Rlci4gIFRoZXNlIGVuZAorKyAgICAgICAgIHdpdGggYGJyZWFrJy4gICovCisrCisrI2lmZGVmIFdDSEFSCisrCWNhc2UgZXhhY3RuOgorKyAgICAgICAgICBmYXN0bWFwW3RydW5jYXRlX3djaGFyKHBbMV0pXSA9IDE7CisrCSAgYnJlYWs7CisrI2Vsc2UgLyogQllURSAqLworKwljYXNlIGV4YWN0bjoKKysgICAgICAgICAgZmFzdG1hcFtwWzFdXSA9IDE7CisrCSAgYnJlYWs7CisrI2VuZGlmIC8qIFdDSEFSICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCWNhc2UgZXhhY3RuX2JpbjoKKysJICBmYXN0bWFwW3BbMV1dID0gMTsKKysJICBicmVhazsKKysjZW5kaWYKKysKKysjaWZkZWYgV0NIQVIKKysgICAgICAgIC8qIEl0IGlzIGhhcmQgdG8gZGlzdGluZ3Vpc2ggZmFzdG1hcCBmcm9tIChtdWx0aSBieXRlKSBjaGFyYWN0ZXJzCisrICAgICAgICAgICB3aGljaCBkZXBlbmRzIG9uIGN1cnJlbnQgbG9jYWxlLiAgKi8KKysgICAgICAgIGNhc2UgY2hhcnNldDoKKysJY2FzZSBjaGFyc2V0X25vdDoKKysJY2FzZSB3b3JkY2hhcjoKKysJY2FzZSBub3R3b3JkY2hhcjoKKysgICAgICAgICAgYnVmcC0+Y2FuX2JlX251bGwgPSAxOworKyAgICAgICAgICBnb3RvIGRvbmU7CisrI2Vsc2UgLyogQllURSAqLworKyAgICAgICAgY2FzZSBjaGFyc2V0OgorKyAgICAgICAgICBmb3IgKGogPSAqcCsrICogQllURVdJRFRIIC0gMTsgaiA+PSAwOyBqLS0pCisrCSAgICBpZiAocFtqIC8gQllURVdJRFRIXSAmICgxIDw8IChqICUgQllURVdJRFRIKSkpCisrICAgICAgICAgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBjaGFyc2V0X25vdDoKKysJICAvKiBDaGFycyBiZXlvbmQgZW5kIG9mIG1hcCBtdXN0IGJlIGFsbG93ZWQuICAqLworKwkgIGZvciAoaiA9ICpwICogQllURVdJRFRIOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKyAgICAgICAgICAgIGZhc3RtYXBbal0gPSAxOworKworKwkgIGZvciAoaiA9ICpwKysgKiBCWVRFV0lEVEggLSAxOyBqID49IDA7IGotLSkKKysJICAgIGlmICghKHBbaiAvIEJZVEVXSURUSF0gJiAoMSA8PCAoaiAlIEJZVEVXSURUSCkpKSkKKysgICAgICAgICAgICAgIGZhc3RtYXBbal0gPSAxOworKyAgICAgICAgICBicmVhazsKKysKKysKKysJY2FzZSB3b3JkY2hhcjoKKysJICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgaWYgKFNZTlRBWCAoaikgPT0gU3dvcmQpCisrCSAgICAgIGZhc3RtYXBbal0gPSAxOworKwkgIGJyZWFrOworKworKworKwljYXNlIG5vdHdvcmRjaGFyOgorKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSAhPSBTd29yZCkKKysJICAgICAgZmFzdG1hcFtqXSA9IDE7CisrCSAgYnJlYWs7CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICAgICAgICBjYXNlIGFueWNoYXI6CisrCSAgeworKwkgICAgaW50IGZhc3RtYXBfbmV3bGluZSA9IGZhc3RtYXBbJ1xuJ107CisrCisrCSAgICAvKiBgLicgbWF0Y2hlcyBhbnl0aGluZyAuLi4gICovCisrCSAgICBmb3IgKGogPSAwOyBqIDwgKDEgPDwgQllURVdJRFRIKTsgaisrKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysKKysJICAgIC8qIC4uLiBleGNlcHQgcGVyaGFwcyBuZXdsaW5lLiAgKi8KKysJICAgIGlmICghKGJ1ZnAtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKysJICAgICAgZmFzdG1hcFsnXG4nXSA9IGZhc3RtYXBfbmV3bGluZTsKKysKKysJICAgIC8qIFJldHVybiBpZiB3ZSBoYXZlIGFscmVhZHkgc2V0IGBjYW5fYmVfbnVsbCc7IGlmIHdlIGhhdmUsCisrCSAgICAgICB0aGVuIHRoZSBmYXN0bWFwIGlzIGlycmVsZXZhbnQuICBTb21ldGhpbmcncyB3cm9uZyBoZXJlLiAgKi8KKysJICAgIGVsc2UgaWYgKGJ1ZnAtPmNhbl9iZV9udWxsKQorKwkgICAgICBnb3RvIGRvbmU7CisrCisrCSAgICAvKiBPdGhlcndpc2UsIGhhdmUgdG8gY2hlY2sgYWx0ZXJuYXRpdmUgcGF0aHMuICAqLworKwkgICAgYnJlYWs7CisrCSAgfQorKworKyNpZmRlZiBlbWFjcworKyAgICAgICAgY2FzZSBzeW50YXhzcGVjOgorKwkgIGsgPSAqcCsrOworKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSA9PSAoZW51bSBzeW50YXhjb2RlKSBrKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysJY2FzZSBub3RzeW50YXhzcGVjOgorKwkgIGsgPSAqcCsrOworKwkgIGZvciAoaiA9IDA7IGogPCAoMSA8PCBCWVRFV0lEVEgpOyBqKyspCisrCSAgICBpZiAoU1lOVEFYIChqKSAhPSAoZW51bSBzeW50YXhjb2RlKSBrKQorKwkgICAgICBmYXN0bWFwW2pdID0gMTsKKysJICBicmVhazsKKysKKysKKysgICAgICAvKiBBbGwgY2FzZXMgYWZ0ZXIgdGhpcyBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgVGhlc2UgZW5kIHdpdGgKKysgICAgICAgICBgY29udGludWUnLiAgKi8KKysKKysKKysJY2FzZSBiZWZvcmVfZG90OgorKwljYXNlIGF0X2RvdDoKKysJY2FzZSBhZnRlcl9kb3Q6CisrICAgICAgICAgIGNvbnRpbnVlOworKyNlbmRpZiAvKiBlbWFjcyAqLworKworKworKyAgICAgICAgY2FzZSBub19vcDoKKysgICAgICAgIGNhc2UgYmVnbGluZToKKysgICAgICAgIGNhc2UgZW5kbGluZToKKysJY2FzZSBiZWdidWY6CisrCWNhc2UgZW5kYnVmOgorKwljYXNlIHdvcmRib3VuZDoKKysJY2FzZSBub3R3b3JkYm91bmQ6CisrCWNhc2Ugd29yZGJlZzoKKysJY2FzZSB3b3JkZW5kOgorKyAgICAgICAgY2FzZSBwdXNoX2R1bW15X2ZhaWx1cmU6CisrICAgICAgICAgIGNvbnRpbnVlOworKworKworKwljYXNlIGp1bXBfbjoKKysgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysJY2FzZSBtYXliZV9wb3BfanVtcDoKKysJY2FzZSBqdW1wOgorKyAgICAgICAgY2FzZSBqdW1wX3Bhc3RfYWx0OgorKwljYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKGosIHApOworKwkgIHAgKz0gajsKKysJICBpZiAoaiA+IDApCisrCSAgICBjb250aW51ZTsKKysKKysgICAgICAgICAgLyogSnVtcCBiYWNrd2FyZCBpbXBsaWVzIHdlIGp1c3Qgd2VudCB0aHJvdWdoIHRoZSBib2R5IG9mIGEKKysgICAgICAgICAgICAgbG9vcCBhbmQgbWF0Y2hlZCBub3RoaW5nLiAgT3Bjb2RlIGp1bXBlZCB0byBzaG91bGQgYmUKKysgICAgICAgICAgICAgYG9uX2ZhaWx1cmVfanVtcCcgb3IgYHN1Y2NlZWRfbicuICBKdXN0IHRyZWF0IGl0IGxpa2UgYW4KKysgICAgICAgICAgICAgb3JkaW5hcnkganVtcC4gIEZvciBhICogbG9vcCwgaXQgaGFzIHB1c2hlZCBpdHMgZmFpbHVyZQorKyAgICAgICAgICAgICBwb2ludCBhbHJlYWR5OyBpZiBzbywgZGlzY2FyZCB0aGF0IGFzIHJlZHVuZGFudC4gICovCisrICAgICAgICAgIGlmICgocmVfb3Bjb2RlX3QpICpwICE9IG9uX2ZhaWx1cmVfanVtcAorKwkgICAgICAmJiAocmVfb3Bjb2RlX3QpICpwICE9IHN1Y2NlZWRfbikKKysJICAgIGNvbnRpbnVlOworKworKyAgICAgICAgICBwKys7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChqLCBwKTsKKysgICAgICAgICAgcCArPSBqOworKworKyAgICAgICAgICAvKiBJZiB3aGF0J3Mgb24gdGhlIHN0YWNrIGlzIHdoZXJlIHdlIGFyZSBub3csIHBvcCBpdC4gICovCisrICAgICAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKQorKwkgICAgICAmJiBmYWlsX3N0YWNrLnN0YWNrW2ZhaWxfc3RhY2suYXZhaWwgLSAxXS5wb2ludGVyID09IHApCisrICAgICAgICAgICAgZmFpbF9zdGFjay5hdmFpbC0tOworKworKyAgICAgICAgICBjb250aW51ZTsKKysKKysKKysgICAgICAgIGNhc2Ugb25fZmFpbHVyZV9qdW1wOgorKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXA6CisrCWhhbmRsZV9vbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChqLCBwKTsKKysKKysgICAgICAgICAgLyogRm9yIHNvbWUgcGF0dGVybnMsIGUuZy4sIGAoYT8pPycsIGBwK2onIGhlcmUgcG9pbnRzIHRvIHRoZQorKyAgICAgICAgICAgICBlbmQgb2YgdGhlIHBhdHRlcm4uICBXZSBkb24ndCB3YW50IHRvIHB1c2ggc3VjaCBhIHBvaW50LAorKyAgICAgICAgICAgICBzaW5jZSB3aGVuIHdlIHJlc3RvcmUgaXQgYWJvdmUsIGVudGVyaW5nIHRoZSBzd2l0Y2ggd2lsbAorKyAgICAgICAgICAgICBpbmNyZW1lbnQgYHAnIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFdlIGRvbid0IG5lZWQKKysgICAgICAgICAgICAgdG8gcHVzaCBzdWNoIGEgcG9pbnQgc2luY2Ugd2Ugb2J2aW91c2x5IHdvbid0IGZpbmQgYW55IG1vcmUKKysgICAgICAgICAgICAgZmFzdG1hcCBlbnRyaWVzIGJleW9uZCBgcGVuZCcuICBTdWNoIGEgcGF0dGVybiBjYW4gbWF0Y2gKKysgICAgICAgICAgICAgdGhlIG51bGwgc3RyaW5nLCB0aG91Z2guICAqLworKyAgICAgICAgICBpZiAocCArIGogPCBwZW5kKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmICghUFVTSF9QQVRURVJOX09QIChwICsgaiwgZmFpbF9zdGFjaykpCisrCQl7CisrCQkgIFJFU0VUX0ZBSUxfU1RBQ0sgKCk7CisrCQkgIHJldHVybiAtMjsKKysJCX0KKysgICAgICAgICAgICB9CisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICBidWZwLT5jYW5fYmVfbnVsbCA9IDE7CisrCisrICAgICAgICAgIGlmIChzdWNjZWVkX25fcCkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAoaywgcCk7CS8qIFNraXAgdGhlIG4uICAqLworKyAgICAgICAgICAgICAgc3VjY2VlZF9uX3AgPSBmYWxzZTsKKysJICAgIH0KKysKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2Ugc3VjY2VlZF9uOgorKyAgICAgICAgICAvKiBHZXQgdG8gdGhlIG51bWJlciBvZiB0aW1lcyB0byBzdWNjZWVkLiAgKi8KKysgICAgICAgICAgcCArPSBPRkZTRVRfQUREUkVTU19TSVpFOworKworKyAgICAgICAgICAvKiBJbmNyZW1lbnQgcCBwYXN0IHRoZSBuIGZvciB3aGVuIGsgIT0gMC4gICovCisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChrLCBwKTsKKysgICAgICAgICAgaWYgKGsgPT0gMCkKKysJICAgIHsKKysgICAgICAgICAgICAgIHAgLT0gMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAJICAgICAgc3VjY2VlZF9uX3AgPSB0cnVlOyAgLyogU3BhZ2hldHRpIGNvZGUgYWxlcnQuICAqLworKyAgICAgICAgICAgICAgZ290byBoYW5kbGVfb25fZmFpbHVyZV9qdW1wOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2Ugc2V0X251bWJlcl9hdDoKKysgICAgICAgICAgcCArPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgY29udGludWU7CisrCisrCisrCWNhc2Ugc3RhcnRfbWVtb3J5OgorKyAgICAgICAgY2FzZSBzdG9wX21lbW9yeToKKysJICBwICs9IDI7CisrCSAgY29udGludWU7CisrCisrCisrCWRlZmF1bHQ6CisrICAgICAgICAgIGFib3J0ICgpOyAvKiBXZSBoYXZlIGxpc3RlZCBhbGwgdGhlIGNhc2VzLiAgKi8KKysgICAgICAgIH0gLyogc3dpdGNoICpwKysgKi8KKysKKysgICAgICAvKiBHZXR0aW5nIGhlcmUgbWVhbnMgd2UgaGF2ZSBmb3VuZCB0aGUgcG9zc2libGUgc3RhcnRpbmcKKysgICAgICAgICBjaGFyYWN0ZXJzIGZvciBvbmUgcGF0aCBvZiB0aGUgcGF0dGVybiAtLSBhbmQgdGhhdCB0aGUgZW1wdHkKKysgICAgICAgICBzdHJpbmcgZG9lcyBub3QgbWF0Y2guICBXZSBuZWVkIG5vdCBmb2xsb3cgdGhpcyBwYXRoIGZ1cnRoZXIuCisrICAgICAgICAgSW5zdGVhZCwgbG9vayBhdCB0aGUgbmV4dCBhbHRlcm5hdGl2ZSAocmVtZW1iZXJlZCBvbiB0aGUKKysgICAgICAgICBzdGFjayksIG9yIHF1aXQgaWYgbm8gbW9yZS4gIFRoZSB0ZXN0IGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AKKysgICAgICAgICBkb2VzIHRoZXNlIHRoaW5ncy4gICovCisrICAgICAgcGF0aF9jYW5fYmVfbnVsbCA9IGZhbHNlOworKyAgICAgIHAgPSBwZW5kOworKyAgICB9IC8qIHdoaWxlIHAgKi8KKysKKysgIC8qIFNldCBgY2FuX2JlX251bGwnIGZvciB0aGUgbGFzdCBwYXRoIChhbHNvIHRoZSBmaXJzdCBwYXRoLCBpZiB0aGUKKysgICAgIHBhdHRlcm4gaXMgZW1wdHkpLiAgKi8KKysgIGJ1ZnAtPmNhbl9iZV9udWxsIHw9IHBhdGhfY2FuX2JlX251bGw7CisrCisrIGRvbmU6CisrICBSRVNFVF9GQUlMX1NUQUNLICgpOworKyAgcmV0dXJuIDA7CisrfQorKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisraW50CisrcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCisreworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldHVybiB3Y3NfcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0dXJuIGJ5dGVfcmVfY29tcGlsZV9mYXN0bWFwKGJ1ZnApOworK30gLyogcmVfY29tcGlsZV9mYXN0bWFwICovCisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9jb21waWxlX2Zhc3RtYXAsIHJlX2NvbXBpbGVfZmFzdG1hcCkKKysjZW5kaWYKKysMCisrCisrLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisrICAgRU5EUy4gIFN1YnNlcXVlbnQgbWF0Y2hlcyB1c2luZyBQQVRURVJOX0JVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZQorKyAgIHRoaXMgbWVtb3J5IGZvciByZWNvcmRpbmcgcmVnaXN0ZXIgaW5mb3JtYXRpb24uICBTVEFSVFMgYW5kIEVORFMKKysgICBtdXN0IGJlIGFsbG9jYXRlZCB1c2luZyB0aGUgbWFsbG9jIGxpYnJhcnkgcm91dGluZSwgYW5kIG11c3QgZWFjaAorKyAgIGJlIGF0IGxlYXN0IE5VTV9SRUdTICogc2l6ZW9mIChyZWdvZmZfdCkgYnl0ZXMgbG9uZy4KKysKKysgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisrICAgcmVnaXN0ZXIgZGF0YS4KKysKKysgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKysgICBQQVRURVJOX0JVRkZFUiB3aWxsIGFsbG9jYXRlIGl0cyBvd24gcmVnaXN0ZXIgZGF0YSwgd2l0aG91dAorKyAgIGZyZWVpbmcgdGhlIG9sZCBkYXRhLiAgKi8KKysKKyt2b2lkCisrcmVfc2V0X3JlZ2lzdGVycyAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorKyAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIHVuc2lnbmVkIG51bV9yZWdzLAorKyAgICAgICAgICAgICAgICAgIHJlZ29mZl90ICpzdGFydHMsIHJlZ29mZl90ICplbmRzKQorK3sKKysgIGlmIChudW1fcmVncykKKysgICAgeworKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19SRUFMTE9DQVRFOworKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gbnVtX3JlZ3M7CisrICAgICAgcmVncy0+c3RhcnQgPSBzdGFydHM7CisrICAgICAgcmVncy0+ZW5kID0gZW5kczsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gMDsKKysgICAgICByZWdzLT5zdGFydCA9IHJlZ3MtPmVuZCA9IChyZWdvZmZfdCAqKSAwOworKyAgICB9CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2V0X3JlZ2lzdGVycywgcmVfc2V0X3JlZ2lzdGVycykKKysjZW5kaWYKKysMCisrLyogU2VhcmNoaW5nIHJvdXRpbmVzLiAgKi8KKysKKysvKiBMaWtlIHJlX3NlYXJjaF8yLCBiZWxvdywgYnV0IG9ubHkgb25lIHN0cmluZyBpcyBzcGVjaWZpZWQsIGFuZAorKyAgIGRvZXNuJ3QgbGV0IHlvdSBzYXkgd2hlcmUgdG8gc3RvcCBtYXRjaGluZy4gICovCisrCisraW50CisrcmVfc2VhcmNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IHNpemUsCisrICAgICAgICAgICBpbnQgc3RhcnRwb3MsIGludCByYW5nZSwgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncykKKyt7CisrICByZXR1cm4gcmVfc2VhcmNoXzIgKGJ1ZnAsIE5VTEwsIDAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLAorKwkJICAgICAgcmVncywgc2l6ZSk7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoLCByZV9zZWFyY2gpCisrI2VuZGlmCisrCisrCisrLyogVXNpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUC0+YnVmZmVyLCBmaXJzdCB0cmllcyB0byBtYXRjaCB0aGUKKysgICB2aXJ0dWFsIGNvbmNhdGVuYXRpb24gb2YgU1RSSU5HMSBhbmQgU1RSSU5HMiwgc3RhcnRpbmcgZmlyc3QgYXQgaW5kZXgKKysgICBTVEFSVFBPUywgdGhlbiBhdCBTVEFSVFBPUyArIDEsIGFuZCBzbyBvbi4KKysKKysgICBTVFJJTkcxIGFuZCBTVFJJTkcyIGhhdmUgbGVuZ3RoIFNJWkUxIGFuZCBTSVpFMiwgcmVzcGVjdGl2ZWx5LgorKworKyAgIFJBTkdFIGlzIGhvdyBmYXIgdG8gc2NhbiB3aGlsZSB0cnlpbmcgdG8gbWF0Y2guICBSQU5HRSA9IDAgbWVhbnMgdHJ5CisrICAgb25seSBhdCBTVEFSVFBPUzsgaW4gZ2VuZXJhbCwgdGhlIGxhc3Qgc3RhcnQgdHJpZWQgaXMgU1RBUlRQT1MgKworKyAgIFJBTkdFLgorKworKyAgIEluIFJFR1MsIHJldHVybiB0aGUgaW5kaWNlcyBvZiB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEKKysgICBhbmQgU1RSSU5HMiB0aGF0IG1hdGNoZWQgdGhlIGVudGlyZSBCVUZQLT5idWZmZXIgYW5kIGl0cyBjb250YWluZWQKKysgICBzdWJleHByZXNzaW9ucy4KKysKKysgICBEbyBub3QgY29uc2lkZXIgbWF0Y2hpbmcgb25lIHBhc3QgdGhlIGluZGV4IFNUT1AgaW4gdGhlIHZpcnR1YWwKKysgICBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIuCisrCisrICAgV2UgcmV0dXJuIGVpdGhlciB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmluZ3MgYXQgd2hpY2ggdGhlIG1hdGNoIHdhcworKyAgIGZvdW5kLCAtMSBpZiBubyBtYXRjaCwgb3IgLTIgaWYgZXJyb3IgKHN1Y2ggYXMgZmFpbHVyZQorKyAgIHN0YWNrIG92ZXJmbG93KS4gICovCisrCisraW50CisrcmVfc2VhcmNoXzIgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IHNpemUxLAorKyAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCBpbnQgc3RvcCkKKyt7CisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0dXJuIHdjc19yZV9zZWFyY2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBzdGFydHBvcywKKysJCQkgICAgcmFuZ2UsIHJlZ3MsIHN0b3ApOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmV0dXJuIGJ5dGVfcmVfc2VhcmNoXzIgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLCBzaXplMiwgc3RhcnRwb3MsCisrCQkJICAgICByYW5nZSwgcmVncywgc3RvcCk7CisrfSAvKiByZV9zZWFyY2hfMiAqLworKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfc2VhcmNoXzIsIHJlX3NlYXJjaF8yKQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyMgZGVmaW5lIEZSRUVfVkFSKHZhcikgaWYgKHZhcikgUkVHRVhfRlJFRSAodmFyKTsgdmFyID0gTlVMTAorKyNlbHNlCisrIyBkZWZpbmUgRlJFRV9WQVIodmFyKSBpZiAodmFyKSBmcmVlICh2YXIpOyB2YXIgPSBOVUxMCisrI2VuZGlmCisrCisrI2lmZGVmIFdDSEFSCisrIyBkZWZpbmUgTUFYX0FMTE9DQV9TSVpFCTIwMDAKKysKKysjIGRlZmluZSBGUkVFX1dDU19CVUZGRVJTKCkgXAorKyAgZG8gewkJCQkJCQkJCSAgICAgIFwKKysgICAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCWZyZWUgKHdjc19zdHJpbmcxKTsJCQkJCQkgICAgICBcCisrCWZyZWUgKG1ic19vZmZzZXQxKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSICh3Y3Nfc3RyaW5nMSk7CQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAobWJzX29mZnNldDEpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpIAkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCWZyZWUgKHdjc19zdHJpbmcyKTsJCQkJCQkgICAgICBcCisrCWZyZWUgKG1ic19vZmZzZXQyKTsJCQkJCQkgICAgICBcCisrICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKysgICAgZWxzZQkJCQkJCQkJICAgICAgXAorKyAgICAgIHsJCQkJCQkJCQkgICAgICBcCisrCUZSRUVfVkFSICh3Y3Nfc3RyaW5nMik7CQkJCQkJICAgICAgXAorKwlGUkVFX1ZBUiAobWJzX29mZnNldDIpOwkJCQkJCSAgICAgIFwKKysgICAgICB9CQkJCQkJCQkJICAgICAgXAorKyAgfSB3aGlsZSAoMCkKKysKKysjZW5kaWYKKysKKysKKytzdGF0aWMgaW50CisrUFJFRklYKHJlX3NlYXJjaF8yKSAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLCBjb25zdCBjaGFyICpzdHJpbmcxLAorKyAgICAgICAgICAgICAgICAgICAgIGludCBzaXplMSwgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydHBvcywgaW50IHJhbmdlLAorKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsIGludCBzdG9wKQorK3sKKysgIGludCB2YWw7CisrICByZWdpc3RlciBjaGFyICpmYXN0bWFwID0gYnVmcC0+ZmFzdG1hcDsKKysgIHJlZ2lzdGVyIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zbGF0ZSA9IGJ1ZnAtPnRyYW5zbGF0ZTsKKysgIGludCB0b3RhbF9zaXplID0gc2l6ZTEgKyBzaXplMjsKKysgIGludCBlbmRwb3MgPSBzdGFydHBvcyArIHJhbmdlOworKyNpZmRlZiBXQ0hBUgorKyAgLyogV2UgbmVlZCB3Y2hhcl90KiBidWZmZXJzIGNvcnJlc3BvbmQgdG8gY3N0cmluZzEsIGNzdHJpbmcyLiAgKi8KKysgIHdjaGFyX3QgKndjc19zdHJpbmcxID0gTlVMTCwgKndjc19zdHJpbmcyID0gTlVMTDsKKysgIC8qIFdlIG5lZWQgdGhlIHNpemUgb2Ygd2NoYXJfdCBidWZmZXJzIGNvcnJlc3BvbmQgdG8gY3NpemUxLCBjc2l6ZTIuICAqLworKyAgaW50IHdjc19zaXplMSA9IDAsIHdjc19zaXplMiA9IDA7CisrICAvKiBvZmZzZXQgYnVmZmVyIGZvciBvcHRpbWl6YXRvaW4uIFNlZSBjb252ZXJ0X21ic190b193Yy4gICovCisrICBpbnQgKm1ic19vZmZzZXQxID0gTlVMTCwgKm1ic19vZmZzZXQyID0gTlVMTDsKKysgIC8qIFRoZXkgaG9sZCB3aGV0aGVyIGVhY2ggd2NoYXJfdCBpcyBiaW5hcnkgZGF0YSBvciBub3QuICAqLworKyAgY2hhciAqaXNfYmluYXJ5ID0gTlVMTDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgU1RBUlRQT1MuICAqLworKyAgaWYgKHN0YXJ0cG9zIDwgMCB8fCBzdGFydHBvcyA+IHRvdGFsX3NpemUpCisrICAgIHJldHVybiAtMTsKKysKKysgIC8qIEZpeCB1cCBSQU5HRSBpZiBpdCBtaWdodCBldmVudHVhbGx5IHRha2UgdXMgb3V0c2lkZQorKyAgICAgdGhlIHZpcnR1YWwgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyLgorKyAgICAgTWFrZSBzdXJlIHdlIHdvbid0IG1vdmUgU1RBUlRQT1MgYmVsb3cgMCBvciBhYm92ZSBUT1RBTF9TSVpFLiAgKi8KKysgIGlmIChlbmRwb3MgPCAwKQorKyAgICByYW5nZSA9IDAgLSBzdGFydHBvczsKKysgIGVsc2UgaWYgKGVuZHBvcyA+IHRvdGFsX3NpemUpCisrICAgIHJhbmdlID0gdG90YWxfc2l6ZSAtIHN0YXJ0cG9zOworKworKyAgLyogSWYgdGhlIHNlYXJjaCBpc24ndCB0byBiZSBhIGJhY2t3YXJkcyBvbmUsIGRvbid0IHdhc3RlIHRpbWUgaW4gYQorKyAgICAgc2VhcmNoIGZvciBhIHBhdHRlcm4gdGhhdCBtdXN0IGJlIGFuY2hvcmVkLiAgKi8KKysgIGlmIChidWZwLT51c2VkID4gMCAmJiByYW5nZSA+IDAKKysgICAgICAmJiAoKHJlX29wY29kZV90KSBidWZwLT5idWZmZXJbMF0gPT0gYmVnYnVmCisrCSAgLyogYGJlZ2xpbmUnIGlzIGxpa2UgYGJlZ2J1ZicgaWYgaXQgY2Fubm90IG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KKysJICB8fCAoKHJlX29wY29kZV90KSBidWZwLT5idWZmZXJbMF0gPT0gYmVnbGluZQorKwkgICAgICAmJiAhYnVmcC0+bmV3bGluZV9hbmNob3IpKSkKKysgICAgeworKyAgICAgIGlmIChzdGFydHBvcyA+IDApCisrCXJldHVybiAtMTsKKysgICAgICBlbHNlCisrCXJhbmdlID0gMTsKKysgICAgfQorKworKyNpZmRlZiBlbWFjcworKyAgLyogSW4gYSBmb3J3YXJkIHNlYXJjaCBmb3Igc29tZXRoaW5nIHRoYXQgc3RhcnRzIHdpdGggXD0uCisrICAgICBkb24ndCBrZWVwIHNlYXJjaGluZyBwYXN0IHBvaW50LiAgKi8KKysgIGlmIChidWZwLT51c2VkID4gMCAmJiAocmVfb3Bjb2RlX3QpIGJ1ZnAtPmJ1ZmZlclswXSA9PSBhdF9kb3QgJiYgcmFuZ2UgPiAwKQorKyAgICB7CisrICAgICAgcmFuZ2UgPSBQVCAtIHN0YXJ0cG9zOworKyAgICAgIGlmIChyYW5nZSA8PSAwKQorKwlyZXR1cm4gLTE7CisrICAgIH0KKysjZW5kaWYgLyogZW1hY3MgKi8KKysKKysgIC8qIFVwZGF0ZSB0aGUgZmFzdG1hcCBub3cgaWYgbm90IGNvcnJlY3QgYWxyZWFkeS4gICovCisrICBpZiAoZmFzdG1hcCAmJiAhYnVmcC0+ZmFzdG1hcF9hY2N1cmF0ZSkKKysgICAgaWYgKHJlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCkgPT0gLTIpCisrICAgICAgcmV0dXJuIC0yOworKworKyNpZmRlZiBXQ0hBUgorKyAgLyogQWxsb2NhdGUgd2NoYXJfdCBhcnJheSBmb3Igd2NzX3N0cmluZzEgYW5kIHdjc19zdHJpbmcyIGFuZAorKyAgICAgZmlsbCB0aGVtIHdpdGggY29udmVydGVkIHN0cmluZy4gICovCisrICBpZiAoc2l6ZTEgIT0gMCkKKysgICAgeworKyAgICAgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkKKysJeworKwkgIHdjc19zdHJpbmcxID0gVEFMTE9DIChzaXplMSArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDEgPSBUQUxMT0MgKHNpemUxICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBUQUxMT0MgKHNpemUxICsgMSwgY2hhcik7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICB3Y3Nfc3RyaW5nMSA9IFJFR0VYX1RBTExPQyAoc2l6ZTEgKyAxLCBDSEFSX1QpOworKwkgIG1ic19vZmZzZXQxID0gUkVHRVhfVEFMTE9DIChzaXplMSArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChzaXplMSArIDEsIGNoYXIpOworKwl9CisrICAgICAgaWYgKCF3Y3Nfc3RyaW5nMSB8fCAhbWJzX29mZnNldDEgfHwgIWlzX2JpbmFyeSkKKysJeworKwkgIGlmIChzaXplMSA+IE1BWF9BTExPQ0FfU0laRSkKKysJICAgIHsKKysJICAgICAgZnJlZSAod2NzX3N0cmluZzEpOworKwkgICAgICBmcmVlIChtYnNfb2Zmc2V0MSk7CisrCSAgICAgIGZyZWUgKGlzX2JpbmFyeSk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBGUkVFX1ZBUiAod2NzX3N0cmluZzEpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDEpOworKwkgICAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICAgIH0KKysJICByZXR1cm4gLTI7CisrCX0KKysgICAgICB3Y3Nfc2l6ZTEgPSBjb252ZXJ0X21ic190b193Y3Mod2NzX3N0cmluZzEsIHN0cmluZzEsIHNpemUxLAorKwkJCQkgICAgIG1ic19vZmZzZXQxLCBpc19iaW5hcnkpOworKyAgICAgIHdjc19zdHJpbmcxW3djc19zaXplMV0gPSBMJ1wwJzsgLyogZm9yIGEgc2VudGluZWwgICovCisrICAgICAgaWYgKHNpemUxID4gTUFYX0FMTE9DQV9TSVpFKQorKwlmcmVlIChpc19iaW5hcnkpOworKyAgICAgIGVsc2UKKysJRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrICAgIH0KKysgIGlmIChzaXplMiAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKHNpemUyID4gTUFYX0FMTE9DQV9TSVpFKQorKwl7CisrCSAgd2NzX3N0cmluZzIgPSBUQUxMT0MgKHNpemUyICsgMSwgQ0hBUl9UKTsKKysJICBtYnNfb2Zmc2V0MiA9IFRBTExPQyAoc2l6ZTIgKyAxLCBpbnQpOworKwkgIGlzX2JpbmFyeSA9IFRBTExPQyAoc2l6ZTIgKyAxLCBjaGFyKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIHdjc19zdHJpbmcyID0gUkVHRVhfVEFMTE9DIChzaXplMiArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDIgPSBSRUdFWF9UQUxMT0MgKHNpemUyICsgMSwgaW50KTsKKysJICBpc19iaW5hcnkgPSBSRUdFWF9UQUxMT0MgKHNpemUyICsgMSwgY2hhcik7CisrCX0KKysgICAgICBpZiAoIXdjc19zdHJpbmcyIHx8ICFtYnNfb2Zmc2V0MiB8fCAhaXNfYmluYXJ5KQorKwl7CisrCSAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysJICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpCisrCSAgICBmcmVlIChpc19iaW5hcnkpOworKwkgIGVsc2UKKysJICAgIEZSRUVfVkFSIChpc19iaW5hcnkpOworKwkgIHJldHVybiAtMjsKKysJfQorKyAgICAgIHdjc19zaXplMiA9IGNvbnZlcnRfbWJzX3RvX3djcyh3Y3Nfc3RyaW5nMiwgc3RyaW5nMiwgc2l6ZTIsCisrCQkJCSAgICAgbWJzX29mZnNldDIsIGlzX2JpbmFyeSk7CisrICAgICAgd2NzX3N0cmluZzJbd2NzX3NpemUyXSA9IEwnXDAnOyAvKiBmb3IgYSBzZW50aW5lbCAgKi8KKysgICAgICBpZiAoc2l6ZTIgPiBNQVhfQUxMT0NBX1NJWkUpCisrCWZyZWUgKGlzX2JpbmFyeSk7CisrICAgICAgZWxzZQorKwlGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysgICAgfQorKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKworKyAgLyogTG9vcCB0aHJvdWdoIHRoZSBzdHJpbmcsIGxvb2tpbmcgZm9yIGEgcGxhY2UgdG8gc3RhcnQgbWF0Y2hpbmcuICAqLworKyAgZm9yICg7OykKKysgICAgeworKyAgICAgIC8qIElmIGEgZmFzdG1hcCBpcyBzdXBwbGllZCwgc2tpcCBxdWlja2x5IG92ZXIgY2hhcmFjdGVycyB0aGF0CisrICAgICAgICAgY2Fubm90IGJlIHRoZSBzdGFydCBvZiBhIG1hdGNoLiAgSWYgdGhlIHBhdHRlcm4gY2FuIG1hdGNoIHRoZQorKyAgICAgICAgIG51bGwgc3RyaW5nLCBob3dldmVyLCB3ZSBkb24ndCBuZWVkIHRvIHNraXAgY2hhcmFjdGVyczsgd2Ugd2FudAorKyAgICAgICAgIHRoZSBmaXJzdCBudWxsIHN0cmluZy4gICovCisrICAgICAgaWYgKGZhc3RtYXAgJiYgc3RhcnRwb3MgPCB0b3RhbF9zaXplICYmICFidWZwLT5jYW5fYmVfbnVsbCkKKysJeworKwkgIGlmIChyYW5nZSA+IDApCS8qIFNlYXJjaGluZyBmb3J3YXJkcy4gICovCisrCSAgICB7CisrCSAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKmQ7CisrCSAgICAgIHJlZ2lzdGVyIGludCBsaW0gPSAwOworKwkgICAgICBpbnQgaXJhbmdlID0gcmFuZ2U7CisrCisrICAgICAgICAgICAgICBpZiAoc3RhcnRwb3MgPCBzaXplMSAmJiBzdGFydHBvcyArIHJhbmdlID49IHNpemUxKQorKyAgICAgICAgICAgICAgICBsaW0gPSByYW5nZSAtIChzaXplMSAtIHN0YXJ0cG9zKTsKKysKKysJICAgICAgZCA9IChzdGFydHBvcyA+PSBzaXplMSA/IHN0cmluZzIgLSBzaXplMSA6IHN0cmluZzEpICsgc3RhcnRwb3M7CisrCisrICAgICAgICAgICAgICAvKiBXcml0dGVuIG91dCBhcyBhbiBpZi1lbHNlIHRvIGF2b2lkIHRlc3RpbmcgYHRyYW5zbGF0ZScKKysgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgbG9vcC4gICovCisrCSAgICAgIGlmICh0cmFuc2xhdGUpCisrICAgICAgICAgICAgICAgIHdoaWxlIChyYW5nZSA+IGxpbQorKyAgICAgICAgICAgICAgICAgICAgICAgJiYgIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpCisrCQkJCSAgIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKmQrK11dKQorKyAgICAgICAgICAgICAgICAgIHJhbmdlLS07CisrCSAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgd2hpbGUgKHJhbmdlID4gbGltICYmICFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKSAqZCsrXSkKKysgICAgICAgICAgICAgICAgICByYW5nZS0tOworKworKwkgICAgICBzdGFydHBvcyArPSBpcmFuZ2UgLSByYW5nZTsKKysJICAgIH0KKysJICBlbHNlCQkJCS8qIFNlYXJjaGluZyBiYWNrd2FyZHMuICAqLworKwkgICAgeworKwkgICAgICByZWdpc3RlciBDSEFSX1QgYyA9IChzaXplMSA9PSAwIHx8IHN0YXJ0cG9zID49IHNpemUxCisrCQkJCSAgICAgID8gc3RyaW5nMltzdGFydHBvcyAtIHNpemUxXQorKwkJCQkgICAgICA6IHN0cmluZzFbc3RhcnRwb3NdKTsKKysKKysJICAgICAgaWYgKCFmYXN0bWFwWyh1bnNpZ25lZCBjaGFyKSBUUkFOU0xBVEUgKGMpXSkKKysJCWdvdG8gYWR2YW5jZTsKKysJICAgIH0KKysJfQorKworKyAgICAgIC8qIElmIGNhbid0IG1hdGNoIHRoZSBudWxsIHN0cmluZywgYW5kIHRoYXQncyBhbGwgd2UgaGF2ZSBsZWZ0LCBmYWlsLiAgKi8KKysgICAgICBpZiAocmFuZ2UgPj0gMCAmJiBzdGFydHBvcyA9PSB0b3RhbF9zaXplICYmIGZhc3RtYXAKKysgICAgICAgICAgJiYgIWJ1ZnAtPmNhbl9iZV9udWxsKQorKyAgICAgICB7CisrI2lmZGVmIFdDSEFSCisrICAgICAgICAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgIH0KKysKKysjaWZkZWYgV0NIQVIKKysgICAgICB2YWwgPSB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsCisrCQkJCSAgICAgc2l6ZTIsIHN0YXJ0cG9zLCByZWdzLCBzdG9wLAorKwkJCQkgICAgIHdjc19zdHJpbmcxLCB3Y3Nfc2l6ZTEsCisrCQkJCSAgICAgd2NzX3N0cmluZzIsIHdjc19zaXplMiwKKysJCQkJICAgICBtYnNfb2Zmc2V0MSwgbWJzX29mZnNldDIpOworKyNlbHNlIC8qIEJZVEUgKi8KKysgICAgICB2YWwgPSBieXRlX3JlX21hdGNoXzJfaW50ZXJuYWwgKGJ1ZnAsIHN0cmluZzEsIHNpemUxLCBzdHJpbmcyLAorKwkJCQkgICAgICBzaXplMiwgc3RhcnRwb3MsIHJlZ3MsIHN0b3ApOworKyNlbmRpZiAvKiBCWVRFICovCisrCisrI2lmbmRlZiBSRUdFWF9NQUxMT0MKKysjIGlmZGVmIENfQUxMT0NBCisrICAgICAgYWxsb2NhICgwKTsKKysjIGVuZGlmCisrI2VuZGlmCisrCisrICAgICAgaWYgKHZhbCA+PSAwKQorKwl7CisrI2lmZGVmIFdDSEFSCisrCSAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysJICByZXR1cm4gc3RhcnRwb3M7CisrCX0KKysKKysgICAgICBpZiAodmFsID09IC0yKQorKwl7CisrI2lmZGVmIFdDSEFSCisrCSAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysJICByZXR1cm4gLTI7CisrCX0KKysKKysgICAgYWR2YW5jZToKKysgICAgICBpZiAoIXJhbmdlKQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZWxzZSBpZiAocmFuZ2UgPiAwKQorKyAgICAgICAgeworKyAgICAgICAgICByYW5nZS0tOworKyAgICAgICAgICBzdGFydHBvcysrOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgcmFuZ2UrKzsKKysgICAgICAgICAgc3RhcnRwb3MtLTsKKysgICAgICAgIH0KKysgICAgfQorKyNpZmRlZiBXQ0hBUgorKyAgRlJFRV9XQ1NfQlVGRkVSUyAoKTsKKysjZW5kaWYKKysgIHJldHVybiAtMTsKKyt9CisrCisrI2lmZGVmIFdDSEFSCisrLyogVGhpcyBjb252ZXJ0cyBQVFIsIGEgcG9pbnRlciBpbnRvIG9uZSBvZiB0aGUgc2VhcmNoIHdjaGFyX3Qgc3RyaW5ncworKyAgIGBzdHJpbmcxJyBhbmQgYHN0cmluZzInIGludG8gYW4gbXVsdGlieXRlIHN0cmluZyBvZmZzZXQgZnJvbSB0aGUKKysgICBiZWdpbm5pbmcgb2YgdGhhdCBzdHJpbmcuIFdlIHVzZSBtYnNfb2Zmc2V0IHRvIG9wdGltaXplLgorKyAgIFNlZSBjb252ZXJ0X21ic190b193Y3MuICAqLworKyMgZGVmaW5lIFBPSU5URVJfVE9fT0ZGU0VUKHB0cikJCQkJCQlcCisrICAoRklSU1RfU1RSSU5HX1AgKHB0cikJCQkJCQkJXAorKyAgID8gKChyZWdvZmZfdCkobWJzX29mZnNldDEgIT0gTlVMTD8gbWJzX29mZnNldDFbKHB0ciktc3RyaW5nMV0gOiAwKSkJXAorKyAgIDogKChyZWdvZmZfdCkoKG1ic19vZmZzZXQyICE9IE5VTEw/IG1ic19vZmZzZXQyWyhwdHIpLXN0cmluZzJdIDogMCkJXAorKwkJICsgY3NpemUxKSkpCisrI2Vsc2UgLyogQllURSAqLworKy8qIFRoaXMgY29udmVydHMgUFRSLCBhIHBvaW50ZXIgaW50byBvbmUgb2YgdGhlIHNlYXJjaCBzdHJpbmdzIGBzdHJpbmcxJworKyAgIGFuZCBgc3RyaW5nMicgaW50byBhbiBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgc3RyaW5nLiAgKi8KKysjIGRlZmluZSBQT0lOVEVSX1RPX09GRlNFVChwdHIpCQkJXAorKyAgKEZJUlNUX1NUUklOR19QIChwdHIpCQkJCVwKKysgICA/ICgocmVnb2ZmX3QpICgocHRyKSAtIHN0cmluZzEpKQkJXAorKyAgIDogKChyZWdvZmZfdCkgKChwdHIpIC0gc3RyaW5nMiArIHNpemUxKSkpCisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrLyogTWFjcm9zIGZvciBkZWFsaW5nIHdpdGggdGhlIHNwbGl0IHN0cmluZ3MgaW4gcmVfbWF0Y2hfMi4gICovCisrCisrI2RlZmluZSBNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcgIChkZW5kID09IGVuZF9tYXRjaF8xKQorKworKy8qIENhbGwgYmVmb3JlIGZldGNoaW5nIGEgY2hhcmFjdGVyIHdpdGggKmQuICBUaGlzIHN3aXRjaGVzIG92ZXIgdG8KKysgICBzdHJpbmcyIGlmIG5lY2Vzc2FyeS4gICovCisrI2RlZmluZSBQUkVGRVRDSCgpCQkJCQkJCVwKKysgIHdoaWxlIChkID09IGRlbmQpCQkJCQkJICAgIAlcCisrICAgIHsJCQkJCQkJCQlcCisrICAgICAgLyogRW5kIG9mIHN0cmluZzIgPT4gZmFpbC4gICovCQkJCQlcCisrICAgICAgaWYgKGRlbmQgPT0gZW5kX21hdGNoXzIpIAkJCQkJCVwKKysgICAgICAgIGdvdG8gZmFpbDsJCQkJCQkJXAorKyAgICAgIC8qIEVuZCBvZiBzdHJpbmcxID0+IGFkdmFuY2UgdG8gc3RyaW5nMi4gICovIAkJCVwKKysgICAgICBkID0gc3RyaW5nMjsJCQkJCQkgICAgICAgIFwKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzI7CQkJCQkJXAorKyAgICB9CisrCisrLyogVGVzdCBpZiBhdCB2ZXJ5IGJlZ2lubmluZyBvciBhdCB2ZXJ5IGVuZCBvZiB0aGUgdmlydHVhbCBjb25jYXRlbmF0aW9uCisrICAgb2YgYHN0cmluZzEnIGFuZCBgc3RyaW5nMicuICBJZiBvbmx5IG9uZSBzdHJpbmcsIGl0J3MgYHN0cmluZzInLiAgKi8KKysjZGVmaW5lIEFUX1NUUklOR1NfQkVHKGQpICgoZCkgPT0gKHNpemUxID8gc3RyaW5nMSA6IHN0cmluZzIpIHx8ICFzaXplMikKKysjZGVmaW5lIEFUX1NUUklOR1NfRU5EKGQpICgoZCkgPT0gZW5kMikKKysKKysKKysvKiBUZXN0IGlmIEQgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIHdoaWNoIGlzIHdvcmQtY29uc3RpdHVlbnQuICBXZSBoYXZlCisrICAgdHdvIHNwZWNpYWwgY2FzZXMgdG8gY2hlY2sgZm9yOiBpZiBwYXN0IHRoZSBlbmQgb2Ygc3RyaW5nMSwgbG9vayBhdAorKyAgIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gc3RyaW5nMjsgYW5kIGlmIGJlZm9yZSB0aGUgYmVnaW5uaW5nIG9mCisrICAgc3RyaW5nMiwgbG9vayBhdCB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gc3RyaW5nMS4gICovCisrI2lmZGVmIFdDSEFSCisrLyogVXNlIGludGVybmF0aW9uYWxpemVkIEFQSSBpbnN0ZWFkIG9mIFNZTlRBWC4gICovCisrIyBkZWZpbmUgV09SRENIQVJfUChkKQkJCQkJCQlcCisrICAoaXN3YWxudW0gKCh3aW50X3QpKChkKSA9PSBlbmQxID8gKnN0cmluZzIJCQkJXAorKyAgICAgICAgICAgOiAoZCkgPT0gc3RyaW5nMiAtIDEgPyAqKGVuZDEgLSAxKSA6ICooZCkpKSAhPSAwCQlcCisrICAgfHwgKChkKSA9PSBlbmQxID8gKnN0cmluZzIJCQkJCQlcCisrICAgICAgIDogKGQpID09IHN0cmluZzIgLSAxID8gKihlbmQxIC0gMSkgOiAqKGQpKSA9PSBMJ18nKQorKyNlbHNlIC8qIEJZVEUgKi8KKysjIGRlZmluZSBXT1JEQ0hBUl9QKGQpCQkJCQkJCVwKKysgIChTWU5UQVggKChkKSA9PSBlbmQxID8gKnN0cmluZzIJCQkJCVwKKysgICAgICAgICAgIDogKGQpID09IHN0cmluZzIgLSAxID8gKihlbmQxIC0gMSkgOiAqKGQpKQkJCVwKKysgICA9PSBTd29yZCkKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBEaXNhYmxlZCBkdWUgdG8gYSBjb21waWxlciBidWcgLS0gc2VlIGNvbW1lbnQgYXQgY2FzZSB3b3JkYm91bmQgKi8KKysjaWYgMAorKy8qIFRlc3QgaWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgRCBhbmQgdGhlIG9uZSBhdCBEIGRpZmZlciB3aXRoIHJlc3BlY3QKKysgICB0byBiZWluZyB3b3JkLWNvbnN0aXR1ZW50LiAgKi8KKysjZGVmaW5lIEFUX1dPUkRfQk9VTkRBUlkoZCkJCQkJCQlcCisrICAoQVRfU1RSSU5HU19CRUcgKGQpIHx8IEFUX1NUUklOR1NfRU5EIChkKQkJCQlcCisrICAgfHwgV09SRENIQVJfUCAoZCAtIDEpICE9IFdPUkRDSEFSX1AgKGQpKQorKyNlbmRpZgorKworKy8qIEZyZWUgZXZlcnl0aGluZyB3ZSBtYWxsb2MuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUKKysjIGlmZGVmIFdDSEFSCisrIyAgZGVmaW5lIEZSRUVfVkFSSUFCTEVTKCkJCQkJCQlcCisrICBkbyB7CQkJCQkJCQkJXAorKyAgICBSRUdFWF9GUkVFX1NUQUNLIChmYWlsX3N0YWNrLnN0YWNrKTsJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnc3RhcnQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ2VuZCk7CQkJCQkJCVwKKysgICAgRlJFRV9WQVIgKG9sZF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAoYmVzdF9yZWdlbmQpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdfZHVtbXkpOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19pbmZvX2R1bW15KTsJCQkJCQlcCisrICAgIGlmICghY2FudF9mcmVlX3djc19idWYpCQkJCQkJXAorKyAgICAgIHsJCQkJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKHN0cmluZzIpOwkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChtYnNfb2Zmc2V0MSk7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQyKTsJCQkJCQlcCisrICAgICAgfQkJCQkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbHNlIC8qIEJZVEUgKi8KKysjICBkZWZpbmUgRlJFRV9WQVJJQUJMRVMoKQkJCQkJCVwKKysgIGRvIHsJCQkJCQkJCQlcCisrICAgIFJFR0VYX0ZSRUVfU1RBQ0sgKGZhaWxfc3RhY2suc3RhY2spOwkJCQlcCisrICAgIEZSRUVfVkFSIChyZWdzdGFydCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnZW5kKTsJCQkJCQkJXAorKyAgICBGUkVFX1ZBUiAob2xkX3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChvbGRfcmVnZW5kKTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ3N0YXJ0KTsJCQkJCQlcCisrICAgIEZSRUVfVkFSIChiZXN0X3JlZ2VuZCk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm8pOwkJCQkJCVwKKysgICAgRlJFRV9WQVIgKHJlZ19kdW1teSk7CQkJCQkJXAorKyAgICBGUkVFX1ZBUiAocmVnX2luZm9fZHVtbXkpOwkJCQkJCVwKKysgIH0gd2hpbGUgKDApCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKyNlbHNlCisrIyBpZmRlZiBXQ0hBUgorKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpCQkJCQkJXAorKyAgZG8gewkJCQkJCQkJCVwKKysgICAgaWYgKCFjYW50X2ZyZWVfd2NzX2J1ZikJCQkJCQlcCisrICAgICAgewkJCQkJCQkJCVwKKysgICAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAoc3RyaW5nMik7CQkJCQkJXAorKyAgICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsJCQkJCQlcCisrICAgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDIpOwkJCQkJCVwKKysgICAgICB9CQkJCQkJCQkJXAorKyAgfSB3aGlsZSAoMCkKKysjIGVsc2UgLyogQllURSAqLworKyMgIGRlZmluZSBGUkVFX1ZBUklBQkxFUygpICgodm9pZCkwKSAvKiBEbyBub3RoaW5nISAgQnV0IGluaGliaXQgZ2NjIHdhcm5pbmcuICovCisrIyBlbmRpZiAvKiBXQ0hBUiAqLworKyNlbmRpZiAvKiBub3QgTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrLyogVGhlc2UgdmFsdWVzIG11c3QgbWVldCBzZXZlcmFsIGNvbnN0cmFpbnRzLiAgVGhleSBtdXN0IG5vdCBiZSB2YWxpZAorKyAgIHJlZ2lzdGVyIHZhbHVlczsgc2luY2Ugd2UgaGF2ZSBhIGxpbWl0IG9mIDI1NSByZWdpc3RlcnMgKGJlY2F1c2UKKysgICB3ZSB1c2Ugb25seSBvbmUgYnl0ZSBpbiB0aGUgcGF0dGVybiBmb3IgdGhlIHJlZ2lzdGVyIG51bWJlciksIHdlIGNhbgorKyAgIHVzZSBudW1iZXJzIGxhcmdlciB0aGFuIDI1NS4gIFRoZXkgbXVzdCBkaWZmZXIgYnkgMSwgYmVjYXVzZSBvZgorKyAgIE5VTV9GQUlMVVJFX0lURU1TIGFib3ZlLiAgQW5kIHRoZSB2YWx1ZSBmb3IgdGhlIGxvd2VzdCByZWdpc3RlciBtdXN0CisrICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIGZvciB0aGUgaGlnaGVzdCByZWdpc3Rlciwgc28gd2UgZG8gbm90IHRyeQorKyAgIHRvIGFjdHVhbGx5IHNhdmUgYW55IHJlZ2lzdGVycyB3aGVuIG5vbmUgYXJlIGFjdGl2ZS4gICovCisrI2RlZmluZSBOT19ISUdIRVNUX0FDVElWRV9SRUcgKDEgPDwgQllURVdJRFRIKQorKyNkZWZpbmUgTk9fTE9XRVNUX0FDVElWRV9SRUcgKE5PX0hJR0hFU1RfQUNUSVZFX1JFRyArIDEpCisrDAorKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrLyogTWF0Y2hpbmcgcm91dGluZXMuICAqLworKworKyNpZm5kZWYgZW1hY3MgICAvKiBFbWFjcyBuZXZlciB1c2VzIHRoaXMuICAqLworKy8qIHJlX21hdGNoIGlzIGxpa2UgcmVfbWF0Y2hfMiBleGNlcHQgaXQgdGFrZXMgb25seSBhIHNpbmdsZSBzdHJpbmcuICAqLworKworK2ludAorK3JlX21hdGNoIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZywKKysgICAgICAgICAgaW50IHNpemUsIGludCBwb3MsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MpCisreworKyAgaW50IHJlc3VsdDsKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXN1bHQgPSB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgTlVMTCwgMCwgc3RyaW5nLCBzaXplLAorKwkJCQkgICAgICBwb3MsIHJlZ3MsIHNpemUsCisrCQkJCSAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmVzdWx0ID0gYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBOVUxMLCAwLCBzdHJpbmcsIHNpemUsCisrCQkJCSAgcG9zLCByZWdzLCBzaXplKTsKKysjIGlmbmRlZiBSRUdFWF9NQUxMT0MKKysjICBpZmRlZiBDX0FMTE9DQQorKyAgYWxsb2NhICgwKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysgIHJldHVybiByZXN1bHQ7CisrfQorKyMgaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlX21hdGNoLCByZV9tYXRjaCkKKysjIGVuZGlmCisrI2VuZGlmIC8qIG5vdCBlbWFjcyAqLworKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApIChVQ0hBUl9UICoqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmVuZCwKKysJCQkJCVBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbyk7Cisrc3RhdGljIGJvb2xlYW4gUFJFRklYKGFsdF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUl9UICplbmQsCisrCQkJCQlQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pOworK3N0YXRpYyBib29sZWFuIFBSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSX1QgKmVuZCwKKysJCQkJCVBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbyk7Cisrc3RhdGljIGludCBQUkVGSVgoYmNtcF90cmFuc2xhdGUpIChjb25zdCBDSEFSX1QgKnMxLCBjb25zdCBDSEFSX1QgKnMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgaW50IGxlbiwKKysJCQkJICAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlKTsKKysjZWxzZSAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKy8qIHJlX21hdGNoXzIgbWF0Y2hlcyB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZQIGFnYWluc3QgdGhlCisrICAgdGhlICh2aXJ0dWFsKSBjb25jYXRlbmF0aW9uIG9mIFNUUklORzEgYW5kIFNUUklORzIgKG9mIGxlbmd0aCBTSVpFMQorKyAgIGFuZCBTSVpFMiwgcmVzcGVjdGl2ZWx5KS4gIFdlIHN0YXJ0IG1hdGNoaW5nIGF0IFBPUywgYW5kIHN0b3AKKysgICBtYXRjaGluZyBhdCBTVE9QLgorKworKyAgIElmIFJFR1MgaXMgbm9uLW51bGwgYW5kIHRoZSBgbm9fc3ViJyBmaWVsZCBvZiBCVUZQIGlzIG5vbnplcm8sIHdlCisrICAgc3RvcmUgb2Zmc2V0cyBmb3IgdGhlIHN1YnN0cmluZyBlYWNoIGdyb3VwIG1hdGNoZWQgaW4gUkVHUy4gIFNlZSB0aGUKKysgICBkb2N1bWVudGF0aW9uIGZvciBleGFjdGx5IGhvdyBtYW55IGdyb3VwcyB3ZSBmaWxsLgorKworKyAgIFdlIHJldHVybiAtMSBpZiBubyBtYXRjaCwgLTIgaWYgYW4gaW50ZXJuYWwgZXJyb3IgKHN1Y2ggYXMgdGhlCisrICAgZmFpbHVyZSBzdGFjayBvdmVyZmxvd2luZykuICBPdGhlcndpc2UsIHdlIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZQorKyAgIG1hdGNoZWQgc3Vic3RyaW5nLiAgKi8KKysKKytpbnQKKytyZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsIGludCBwb3MsCisrICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisreworKyAgaW50IHJlc3VsdDsKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXN1bHQgPSB3Y3NfcmVfbWF0Y2hfMl9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLAorKwkJCQkgICAgICBwb3MsIHJlZ3MsIHN0b3AsCisrCQkJCSAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIE5VTEwpOworKyAgZWxzZQorKyMgZW5kaWYKKysgICAgcmVzdWx0ID0gYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsCisrCQkJCSAgcG9zLCByZWdzLCBzdG9wKTsKKysKKysjaWZuZGVmIFJFR0VYX01BTExPQworKyMgaWZkZWYgQ19BTExPQ0EKKysgIGFsbG9jYSAoMCk7CisrIyBlbmRpZgorKyNlbmRpZgorKyAgcmV0dXJuIHJlc3VsdDsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZV9tYXRjaF8yLCByZV9tYXRjaF8yKQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBub3QgSU5TSURFX1JFQ1VSU0lPTiAqLworKworKyNpZmRlZiBJTlNJREVfUkVDVVJTSU9OCisrCisrI2lmZGVmIFdDSEFSCisrc3RhdGljIGludCBjb3VudF9tYnNfbGVuZ3RoIChpbnQgKiwgaW50KTsKKysKKysvKiBUaGlzIGNoZWNrIHRoZSBzdWJzdHJpbmcgKGZyb20gMCwgdG8gbGVuZ3RoKSBvZiB0aGUgbXVsdGlieXRlIHN0cmluZywKKysgICB0byB3aGljaCBvZmZzZXRfYnVmZmVyIGNvcnJlc3BvbmQuIEFuZCBjb3VudCBob3cgbWFueSB3Y2hhcl90X2NoYXJhY3RlcnMKKysgICB0aGUgc3Vic3RyaW5nIG9jY3VweS4gV2UgdXNlIG9mZnNldF9idWZmZXIgdG8gb3B0aW1pemF0aW9uLgorKyAgIFNlZSBjb252ZXJ0X21ic190b193Y3MuICAqLworKworK3N0YXRpYyBpbnQKKytjb3VudF9tYnNfbGVuZ3RoKGludCAqb2Zmc2V0X2J1ZmZlciwgaW50IGxlbmd0aCkKKyt7CisrICBpbnQgdXBwZXIsIGxvd2VyOworKworKyAgLyogQ2hlY2sgd2hldGhlciB0aGUgc2l6ZSBpcyB2YWxpZC4gICovCisrICBpZiAobGVuZ3RoIDwgMCkKKysgICAgcmV0dXJuIC0xOworKworKyAgaWYgKG9mZnNldF9idWZmZXIgPT0gTlVMTCkKKysgICAgcmV0dXJuIDA7CisrCisrICAvKiBJZiB0aGVyZSBhcmUgbm8gbXVsdGlieXRlIGNoYXJhY3Rlciwgb2Zmc2V0X2J1ZmZlcltpXSA9PSBpLgorKyAgIE9wdG1pemUgZm9yIHRoaXMgY2FzZS4gICovCisrICBpZiAob2Zmc2V0X2J1ZmZlcltsZW5ndGhdID09IGxlbmd0aCkKKysgICAgcmV0dXJuIGxlbmd0aDsKKysKKysgIC8qIFNldCB1cCB1cHBlciB3aXRoIGxlbmd0aC4gKGJlY2F1c2UgZm9yIGFsbCBpLCBvZmZzZXRfYnVmZmVyW2ldID49IGkpICAqLworKyAgdXBwZXIgPSBsZW5ndGg7CisrICBsb3dlciA9IDA7CisrCisrICB3aGlsZSAodHJ1ZSkKKysgICAgeworKyAgICAgIGludCBtaWRkbGUgPSAobG93ZXIgKyB1cHBlcikgLyAyOworKyAgICAgIGlmIChtaWRkbGUgPT0gbG93ZXIgfHwgbWlkZGxlID09IHVwcGVyKQorKwlicmVhazsKKysgICAgICBpZiAob2Zmc2V0X2J1ZmZlclttaWRkbGVdID4gbGVuZ3RoKQorKwl1cHBlciA9IG1pZGRsZTsKKysgICAgICBlbHNlIGlmIChvZmZzZXRfYnVmZmVyW21pZGRsZV0gPCBsZW5ndGgpCisrCWxvd2VyID0gbWlkZGxlOworKyAgICAgIGVsc2UKKysJcmV0dXJuIG1pZGRsZTsKKysgICAgfQorKworKyAgcmV0dXJuIC0xOworK30KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysvKiBUaGlzIGlzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gdGhhdCB3ZSBjYW4gZm9yY2UgYW4gYWxsb2NhIGNsZWFudXAKKysgICBhZnRlcndhcmRzLiAgKi8KKysjaWZkZWYgV0NIQVIKKytzdGF0aWMgaW50Cisrd2NzX3JlX21hdGNoXzJfaW50ZXJuYWwgKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3N0cmluZzEsIGludCBjc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzdHJpbmcyLCBpbnQgY3NpemUyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKwkJCSBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RvcCwKKysgICAgIC8qIHN0cmluZzEgPT0gc3RyaW5nMiA9PSBOVUxMIG1lYW5zIHN0cmluZzEvMiwgc2l6ZTEvMiBhbmQKKysJbWJzX29mZnNldDEvMiBuZWVkIHNldGluZyB1cCBpbiB0aGlzIGZ1bmN0aW9uLiAgKi8KKysgICAgIC8qIFdlIG5lZWQgd2NoYXJfdCogYnVmZmVycyBjb3JyZXNwb25kIHRvIGNzdHJpbmcxLCBjc3RyaW5nMi4gICovCisrICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKnN0cmluZzEsIGludCBzaXplMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqc3RyaW5nMiwgaW50IHNpemUyLAorKyAgICAgLyogb2Zmc2V0IGJ1ZmZlciBmb3Igb3B0aW1pemF0b2luLiBTZWUgY29udmVydF9tYnNfdG9fd2MuICAqLworKwkJCSBpbnQgKm1ic19vZmZzZXQxLCBpbnQgKm1ic19vZmZzZXQyKQorKyNlbHNlIC8qIEJZVEUgKi8KKytzdGF0aWMgaW50CisrYnl0ZV9yZV9tYXRjaF8yX2ludGVybmFsIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgc2l6ZTEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgc2l6ZTIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcG9zLAorKwkJCSAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCisrI2VuZGlmIC8qIEJZVEUgKi8KKyt7CisrICAvKiBHZW5lcmFsIHRlbXBvcmFyaWVzLiAgKi8KKysgIGludCBtY250OworKyAgVUNIQVJfVCAqcDE7CisrI2lmZGVmIFdDSEFSCisrICAvKiBUaGV5IGhvbGQgd2hldGhlciBlYWNoIHdjaGFyX3QgaXMgYmluYXJ5IGRhdGEgb3Igbm90LiAgKi8KKysgIGNoYXIgKmlzX2JpbmFyeSA9IE5VTEw7CisrICAvKiBJZiB0cnVlLCB3ZSBjYW4ndCBmcmVlIHN0cmluZzEvMiwgbWJzX29mZnNldDEvMi4gICovCisrICBpbnQgY2FudF9mcmVlX3djc19idWYgPSAxOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogSnVzdCBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqZW5kMSwgKmVuZDI7CisrCisrICAvKiBQb2ludGVycyBpbnRvIHN0cmluZzEgYW5kIHN0cmluZzIsIGp1c3QgcGFzdCB0aGUgbGFzdCBjaGFyYWN0ZXJzIGluCisrICAgICBlYWNoIHRvIGNvbnNpZGVyIG1hdGNoaW5nLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqZW5kX21hdGNoXzEsICplbmRfbWF0Y2hfMjsKKysKKysgIC8qIFdoZXJlIHdlIGFyZSBpbiB0aGUgZGF0YSwgYW5kIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3RyaW5nLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqZCwgKmRlbmQ7CisrCisrICAvKiBXaGVyZSB3ZSBhcmUgaW4gdGhlIHBhdHRlcm4sIGFuZCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiAgKi8KKysjaWZkZWYgV0NIQVIKKysgIFVDSEFSX1QgKnBhdHRlcm4sICpwOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZDsKKysjZWxzZSAvKiBCWVRFICovCisrICBVQ0hBUl9UICpwID0gYnVmcC0+YnVmZmVyOworKyAgcmVnaXN0ZXIgVUNIQVJfVCAqcGVuZCA9IHAgKyBidWZwLT51c2VkOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogTWFyayB0aGUgb3Bjb2RlIGp1c3QgYWZ0ZXIgYSBzdGFydF9tZW1vcnksIHNvIHdlIGNhbiB0ZXN0IGZvciBhbgorKyAgICAgZW1wdHkgc3VicGF0dGVybiB3aGVuIHdlIGdldCB0byB0aGUgc3RvcF9tZW1vcnkuICAqLworKyAgVUNIQVJfVCAqanVzdF9wYXN0X3N0YXJ0X21lbSA9IDA7CisrCisrICAvKiBXZSB1c2UgdGhpcyB0byBtYXAgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuICAqLworKyAgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnNsYXRlID0gYnVmcC0+dHJhbnNsYXRlOworKworKyAgLyogRmFpbHVyZSBwb2ludCBzdGFjay4gIEVhY2ggcGxhY2UgdGhhdCBjYW4gaGFuZGxlIGEgZmFpbHVyZSBmdXJ0aGVyCisrICAgICBkb3duIHRoZSBsaW5lIHB1c2hlcyBhIGZhaWx1cmUgcG9pbnQgb24gdGhpcyBzdGFjay4gIEl0IGNvbnNpc3RzIG9mCisrICAgICByZXN0YXJ0LCByZWdlbmQsIGFuZCByZWdfaW5mbyBmb3IgYWxsIHJlZ2lzdGVycyBjb3JyZXNwb25kaW5nIHRvCisrICAgICB0aGUgc3ViZXhwcmVzc2lvbnMgd2UncmUgY3VycmVudGx5IGluc2lkZSwgcGx1cyB0aGUgbnVtYmVyIG9mIHN1Y2gKKysgICAgIHJlZ2lzdGVycywgYW5kLCBmaW5hbGx5LCB0d28gY2hhciAqJ3MuICBUaGUgZmlyc3QgY2hhciAqIGlzIHdoZXJlCisrICAgICB0byByZXN1bWUgc2Nhbm5pbmcgdGhlIHBhdHRlcm47IHRoZSBzZWNvbmQgb25lIGlzIHdoZXJlIHRvIHJlc3VtZQorKyAgICAgc2Nhbm5pbmcgdGhlIHN0cmluZ3MuICBJZiB0aGUgbGF0dGVyIGlzIHplcm8sIHRoZSBmYWlsdXJlIHBvaW50IGlzCisrICAgICBhIGBgZHVtbXknJzsgaWYgYSBmYWlsdXJlIGhhcHBlbnMgYW5kIHRoZSBmYWlsdXJlIHBvaW50IGlzIGEgZHVtbXksCisrICAgICBpdCBnZXRzIGRpc2NhcmRlZCBhbmQgdGhlIG5leHQgbmV4dCBvbmUgaXMgdHJpZWQuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGlzIGlzIGdsb2JhbC4gICovCisrICBQUkVGSVgoZmFpbF9zdGFja190eXBlKSBmYWlsX3N0YWNrOworKyNlbmRpZgorKyNpZmRlZiBERUJVRworKyAgc3RhdGljIHVuc2lnbmVkIGZhaWx1cmVfaWQ7CisrICB1bnNpZ25lZCBuZmFpbHVyZV9wb2ludHNfcHVzaGVkID0gMCwgbmZhaWx1cmVfcG9pbnRzX3BvcHBlZCA9IDA7CisrI2VuZGlmCisrCisrI2lmZGVmIFJFTF9BTExPQworKyAgLyogVGhpcyBob2xkcyB0aGUgcG9pbnRlciB0byB0aGUgZmFpbHVyZSBzdGFjaywgd2hlbgorKyAgICAgaXQgaXMgYWxsb2NhdGVkIHJlbG9jYXRhYmx5LiAgKi8KKysgIGZhaWxfc3RhY2tfZWx0X3QgKmZhaWx1cmVfc3RhY2tfcHRyOworKyNlbmRpZgorKworKyAgLyogV2UgZmlsbCBhbGwgdGhlIHJlZ2lzdGVycyBpbnRlcm5hbGx5LCBpbmRlcGVuZGVudCBvZiB3aGF0IHdlCisrICAgICByZXR1cm4sIGZvciB1c2UgaW4gYmFja3JlZmVyZW5jZXMuICBUaGUgbnVtYmVyIGhlcmUgaW5jbHVkZXMKKysgICAgIGFuIGVsZW1lbnQgZm9yIHJlZ2lzdGVyIHplcm8uICAqLworKyAgc2l6ZV90IG51bV9yZWdzID0gYnVmcC0+cmVfbnN1YiArIDE7CisrCisrICAvKiBUaGUgY3VycmVudGx5IGFjdGl2ZSByZWdpc3RlcnMuICAqLworKyAgYWN0aXZlX3JlZ190IGxvd2VzdF9hY3RpdmVfcmVnID0gTk9fTE9XRVNUX0FDVElWRV9SRUc7CisrICBhY3RpdmVfcmVnX3QgaGlnaGVzdF9hY3RpdmVfcmVnID0gTk9fSElHSEVTVF9BQ1RJVkVfUkVHOworKworKyAgLyogSW5mb3JtYXRpb24gb24gdGhlIGNvbnRlbnRzIG9mIHJlZ2lzdGVycy4gVGhlc2UgYXJlIHBvaW50ZXJzIGludG8KKysgICAgIHRoZSBpbnB1dCBzdHJpbmdzOyB0aGV5IHJlY29yZCBqdXN0IHdoYXQgd2FzIG1hdGNoZWQgKG9uIHRoaXMKKysgICAgIGF0dGVtcHQpIGJ5IGEgc3ViZXhwcmVzc2lvbiBwYXJ0IG9mIHRoZSBwYXR0ZXJuLCB0aGF0IGlzLCB0aGUKKysgICAgIHJlZ251bS10aCByZWdzdGFydCBwb2ludGVyIHBvaW50cyB0byB3aGVyZSBpbiB0aGUgcGF0dGVybiB3ZSBiZWdhbgorKyAgICAgbWF0Y2hpbmcgYW5kIHRoZSByZWdudW0tdGggcmVnZW5kIHBvaW50cyB0byByaWdodCBhZnRlciB3aGVyZSB3ZQorKyAgICAgc3RvcHBlZCBtYXRjaGluZyB0aGUgcmVnbnVtLXRoIHN1YmV4cHJlc3Npb24uICAoVGhlIHplcm90aCByZWdpc3RlcgorKyAgICAga2VlcHMgdHJhY2sgb2Ygd2hhdCB0aGUgd2hvbGUgcGF0dGVybiBtYXRjaGVzLikgICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoZXNlIGFyZSBnbG9iYWwuICAqLworKyAgY29uc3QgQ0hBUl9UICoqcmVnc3RhcnQsICoqcmVnZW5kOworKyNlbmRpZgorKworKyAgLyogSWYgYSBncm91cCB0aGF0J3Mgb3BlcmF0ZWQgdXBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IgZmFpbHMgdG8KKysgICAgIG1hdGNoIGFueXRoaW5nLCB0aGVuIHRoZSByZWdpc3RlciBmb3IgaXRzIHN0YXJ0IHdpbGwgbmVlZCB0byBiZQorKyAgICAgcmVzdG9yZWQgYmVjYXVzZSBpdCB3aWxsIGhhdmUgYmVlbiBzZXQgdG8gd2hlcmV2ZXIgaW4gdGhlIHN0cmluZyB3ZQorKyAgICAgYXJlIHdoZW4gd2UgbGFzdCBzZWUgaXRzIG9wZW4tZ3JvdXAgb3BlcmF0b3IuICBTaW1pbGFybHkgZm9yIGEKKysgICAgIHJlZ2lzdGVyJ3MgZW5kLiAgKi8KKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipvbGRfcmVnc3RhcnQsICoqb2xkX3JlZ2VuZDsKKysjZW5kaWYKKysKKysgIC8qIFRoZSBpc19hY3RpdmUgZmllbGQgb2YgcmVnX2luZm8gaGVscHMgdXMga2VlcCB0cmFjayBvZiB3aGljaCAocG9zc2libHkKKysgICAgIG5lc3RlZCkgc3ViZXhwcmVzc2lvbnMgd2UgYXJlIGN1cnJlbnRseSBpbi4gVGhlIG1hdGNoZWRfc29tZXRoaW5nCisrICAgICBmaWVsZCBvZiByZWdfaW5mb1tyZWdfbnVtXSBoZWxwcyB1cyB0ZWxsIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUKKysgICAgIG1hdGNoZWQgYW55IG9mIHRoZSBwYXR0ZXJuIHNvIGZhciB0aGlzIHRpbWUgdGhyb3VnaCB0aGUgcmVnX251bS10aAorKyAgICAgc3ViZXhwcmVzc2lvbi4gIFRoZXNlIHR3byBmaWVsZHMgZ2V0IHJlc2V0IGVhY2ggdGltZSB0aHJvdWdoIGFueQorKyAgICAgbG9vcCB0aGVpciByZWdpc3RlciBpcyBpbi4gICovCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURSAvKiBvdGhlcndpc2UsIHRoaXMgaXMgZ2xvYmFsLiAgKi8KKysgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbzsKKysjZW5kaWYKKysKKysgIC8qIFRoZSBmb2xsb3dpbmcgcmVjb3JkIHRoZSByZWdpc3RlciBpbmZvIGFzIGZvdW5kIGluIHRoZSBhYm92ZQorKyAgICAgdmFyaWFibGVzIHdoZW4gd2UgZmluZCBhIG1hdGNoIGJldHRlciB0aGFuIGFueSB3ZSd2ZSBzZWVuIGJlZm9yZS4KKysgICAgIFRoaXMgaGFwcGVucyBhcyB3ZSBiYWNrdHJhY2sgdGhyb3VnaCB0aGUgZmFpbHVyZSBwb2ludHMsIHdoaWNoIGluCisrICAgICB0dXJuIGhhcHBlbnMgb25seSBpZiB3ZSBoYXZlIG5vdCB5ZXQgbWF0Y2hlZCB0aGUgZW50aXJlIHN0cmluZy4gKi8KKysgIHVuc2lnbmVkIGJlc3RfcmVnc19zZXQgPSBmYWxzZTsKKysjaWZkZWYgTUFUQ0hfTUFZX0FMTE9DQVRFIC8qIG90aGVyd2lzZSwgdGhlc2UgYXJlIGdsb2JhbC4gICovCisrICBjb25zdCBDSEFSX1QgKipiZXN0X3JlZ3N0YXJ0LCAqKmJlc3RfcmVnZW5kOworKyNlbmRpZgorKworKyAgLyogTG9naWNhbGx5LCB0aGlzIGlzIGBiZXN0X3JlZ2VuZFswXScuICBCdXQgd2UgZG9uJ3Qgd2FudCB0byBoYXZlIHRvCisrICAgICBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhhdCBpZiB3ZSdyZSBub3QgYWxsb2NhdGluZyBzcGFjZSBmb3IgYW55dGhpbmcKKysgICAgIGVsc2UgKHNlZSBiZWxvdykuICBBbHNvLCB3ZSBuZXZlciBuZWVkIGluZm8gYWJvdXQgcmVnaXN0ZXIgMCBmb3IKKysgICAgIGFueSBvZiB0aGUgb3RoZXIgcmVnaXN0ZXIgdmVjdG9ycywgYW5kIGl0IHNlZW1zIHJhdGhlciBhIGtsdWRnZSB0bworKyAgICAgdHJlYXQgYGJlc3RfcmVnZW5kJyBkaWZmZXJlbnRseSB0aGFuIHRoZSByZXN0LiAgU28gd2Uga2VlcCB0cmFjayBvZgorKyAgICAgdGhlIGVuZCBvZiB0aGUgYmVzdCBtYXRjaCBzbyBmYXIgaW4gYSBzZXBhcmF0ZSB2YXJpYWJsZS4gIFdlCisrICAgICBpbml0aWFsaXplIHRoaXMgdG8gTlVMTCBzbyB0aGF0IHdoZW4gd2UgYmFja3RyYWNrIHRoZSBmaXJzdCB0aW1lCisrICAgICBhbmQgbmVlZCB0byB0ZXN0IGl0LCBpdCdzIG5vdCBnYXJiYWdlLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqbWF0Y2hfZW5kID0gTlVMTDsKKysKKysgIC8qIFRoaXMgaGVscHMgU0VUX1JFR1NfTUFUQ0hFRCBhdm9pZCBkb2luZyByZWR1bmRhbnQgd29yay4gICovCisrICBpbnQgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsKKysKKysgIC8qIFVzZWQgd2hlbiB3ZSBwb3AgdmFsdWVzIHdlIGRvbid0IGNhcmUgYWJvdXQuICAqLworKyNpZmRlZiBNQVRDSF9NQVlfQUxMT0NBVEUgLyogb3RoZXJ3aXNlLCB0aGVzZSBhcmUgZ2xvYmFsLiAgKi8KKysgIGNvbnN0IENIQVJfVCAqKnJlZ19kdW1teTsKKysgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mb19kdW1teTsKKysjZW5kaWYKKysKKysjaWZkZWYgREVCVUcKKysgIC8qIENvdW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIHJlZ2lzdGVycyBwdXNoZWQuICAqLworKyAgdW5zaWduZWQgbnVtX3JlZ3NfcHVzaGVkID0gMDsKKysjZW5kaWYKKysKKysgIERFQlVHX1BSSU5UMSAoIlxuXG5FbnRlcmluZyByZV9tYXRjaF8yLlxuIik7CisrCisrICBJTklUX0ZBSUxfU1RBQ0sgKCk7CisrCisrI2lmZGVmIE1BVENIX01BWV9BTExPQ0FURQorKyAgLyogRG8gbm90IGJvdGhlciB0byBpbml0aWFsaXplIGFsbCB0aGUgcmVnaXN0ZXIgdmFyaWFibGVzIGlmIHRoZXJlIGFyZQorKyAgICAgbm8gZ3JvdXBzIGluIHRoZSBwYXR0ZXJuLCBhcyBpdCB0YWtlcyBhIGZhaXIgYW1vdW50IG9mIHRpbWUuICBJZgorKyAgICAgdGhlcmUgYXJlIGdyb3Vwcywgd2UgaW5jbHVkZSBzcGFjZSBmb3IgcmVnaXN0ZXIgMCAodGhlIHdob2xlCisrICAgICBwYXR0ZXJuKSwgZXZlbiB0aG91Z2ggd2UgbmV2ZXIgdXNlIGl0LCBzaW5jZSBpdCBzaW1wbGlmaWVzIHRoZQorKyAgICAgYXJyYXkgaW5kZXhpbmcuICBXZSBzaG91bGQgZml4IHRoaXMuICAqLworKyAgaWYgKGJ1ZnAtPnJlX25zdWIpCisrICAgIHsKKysgICAgICByZWdzdGFydCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICByZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgb2xkX3JlZ3N0YXJ0ID0gUkVHRVhfVEFMTE9DIChudW1fcmVncywgY29uc3QgQ0hBUl9UICopOworKyAgICAgIG9sZF9yZWdlbmQgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgYmVzdF9yZWdzdGFydCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICBiZXN0X3JlZ2VuZCA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIGNvbnN0IENIQVJfVCAqKTsKKysgICAgICByZWdfaW5mbyA9IFJFR0VYX1RBTExPQyAobnVtX3JlZ3MsIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpKTsKKysgICAgICByZWdfZHVtbXkgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBjb25zdCBDSEFSX1QgKik7CisrICAgICAgcmVnX2luZm9fZHVtbXkgPSBSRUdFWF9UQUxMT0MgKG51bV9yZWdzLCBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSk7CisrCisrICAgICAgaWYgKCEocmVnc3RhcnQgJiYgcmVnZW5kICYmIG9sZF9yZWdzdGFydCAmJiBvbGRfcmVnZW5kICYmIHJlZ19pbmZvCisrICAgICAgICAgICAgJiYgYmVzdF9yZWdzdGFydCAmJiBiZXN0X3JlZ2VuZCAmJiByZWdfZHVtbXkgJiYgcmVnX2luZm9fZHVtbXkpKQorKyAgICAgICAgeworKyAgICAgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICAgICAgcmV0dXJuIC0yOworKyAgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAvKiBXZSBtdXN0IGluaXRpYWxpemUgYWxsIG91ciB2YXJpYWJsZXMgdG8gTlVMTCwgc28gdGhhdAorKyAgICAgICAgIGBGUkVFX1ZBUklBQkxFUycgZG9lc24ndCB0cnkgdG8gZnJlZSB0aGVtLiAgKi8KKysgICAgICByZWdzdGFydCA9IHJlZ2VuZCA9IG9sZF9yZWdzdGFydCA9IG9sZF9yZWdlbmQgPSBiZXN0X3JlZ3N0YXJ0CisrICAgICAgICA9IGJlc3RfcmVnZW5kID0gcmVnX2R1bW15ID0gTlVMTDsKKysgICAgICByZWdfaW5mbyA9IHJlZ19pbmZvX2R1bW15ID0gKFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICopIE5VTEw7CisrICAgIH0KKysjZW5kaWYgLyogTUFUQ0hfTUFZX0FMTE9DQVRFICovCisrCisrICAvKiBUaGUgc3RhcnRpbmcgcG9zaXRpb24gaXMgYm9ndXMuICAqLworKyNpZmRlZiBXQ0hBUgorKyAgaWYgKHBvcyA8IDAgfHwgcG9zID4gY3NpemUxICsgY3NpemUyKQorKyNlbHNlIC8qIEJZVEUgKi8KKysgIGlmIChwb3MgPCAwIHx8IHBvcyA+IHNpemUxICsgc2l6ZTIpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysKKysjaWZkZWYgV0NIQVIKKysgIC8qIEFsbG9jYXRlIHdjaGFyX3QgYXJyYXkgZm9yIHN0cmluZzEgYW5kIHN0cmluZzIgYW5kCisrICAgICBmaWxsIHRoZW0gd2l0aCBjb252ZXJ0ZWQgc3RyaW5nLiAgKi8KKysgIGlmIChzdHJpbmcxID09IE5VTEwgJiYgc3RyaW5nMiA9PSBOVUxMKQorKyAgICB7CisrICAgICAgLyogV2UgbmVlZCBzZXRpbmcgdXAgYnVmZmVycyBoZXJlLiAgKi8KKysKKysgICAgICAvKiBXZSBtdXN0IGZyZWUgd2NzIGJ1ZmZlcnMgaW4gdGhpcyBmdW5jdGlvbi4gICovCisrICAgICAgY2FudF9mcmVlX3djc19idWYgPSAwOworKworKyAgICAgIGlmIChjc2l6ZTEgIT0gMCkKKysJeworKwkgIHN0cmluZzEgPSBSRUdFWF9UQUxMT0MgKGNzaXplMSArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDEgPSBSRUdFWF9UQUxMT0MgKGNzaXplMSArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChjc2l6ZTEgKyAxLCBjaGFyKTsKKysJICBpZiAoIXN0cmluZzEgfHwgIW1ic19vZmZzZXQxIHx8ICFpc19iaW5hcnkpCisrCSAgICB7CisrCSAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsKKysJICAgICAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCSAgICAgIHJldHVybiAtMjsKKysJICAgIH0KKysJfQorKyAgICAgIGlmIChjc2l6ZTIgIT0gMCkKKysJeworKwkgIHN0cmluZzIgPSBSRUdFWF9UQUxMT0MgKGNzaXplMiArIDEsIENIQVJfVCk7CisrCSAgbWJzX29mZnNldDIgPSBSRUdFWF9UQUxMT0MgKGNzaXplMiArIDEsIGludCk7CisrCSAgaXNfYmluYXJ5ID0gUkVHRVhfVEFMTE9DIChjc2l6ZTIgKyAxLCBjaGFyKTsKKysJICBpZiAoIXN0cmluZzIgfHwgIW1ic19vZmZzZXQyIHx8ICFpc19iaW5hcnkpCisrCSAgICB7CisrCSAgICAgIEZSRUVfVkFSIChzdHJpbmcxKTsKKysJICAgICAgRlJFRV9WQVIgKG1ic19vZmZzZXQxKTsKKysJICAgICAgRlJFRV9WQVIgKHN0cmluZzIpOworKwkgICAgICBGUkVFX1ZBUiAobWJzX29mZnNldDIpOworKwkgICAgICBGUkVFX1ZBUiAoaXNfYmluYXJ5KTsKKysJICAgICAgcmV0dXJuIC0yOworKwkgICAgfQorKwkgIHNpemUyID0gY29udmVydF9tYnNfdG9fd2NzKHN0cmluZzIsIGNzdHJpbmcyLCBjc2l6ZTIsCisrCQkJCSAgICAgbWJzX29mZnNldDIsIGlzX2JpbmFyeSk7CisrCSAgc3RyaW5nMltzaXplMl0gPSBMJ1wwJzsgLyogZm9yIGEgc2VudGluZWwgICovCisrCSAgRlJFRV9WQVIgKGlzX2JpbmFyeSk7CisrCX0KKysgICAgfQorKworKyAgLyogV2UgbmVlZCB0byBjYXN0IHBhdHRlcm4gdG8gKHdjaGFyX3QqKSwgYmVjYXVzZSB3ZSBjYXN0ZWQgdGhpcyBjb21waWxlZAorKyAgICAgcGF0dGVybiB0byAoY2hhciopIGluIHJlZ2V4X2NvbXBpbGUuICAqLworKyAgcCA9IHBhdHRlcm4gPSAoQ0hBUl9UKilidWZwLT5idWZmZXI7CisrICBwZW5kID0gKENIQVJfVCopKGJ1ZnAtPmJ1ZmZlciArIGJ1ZnAtPnVzZWQpOworKworKyNlbmRpZiAvKiBXQ0hBUiAqLworKworKyAgLyogSW5pdGlhbGl6ZSBzdWJleHByZXNzaW9uIHRleHQgcG9zaXRpb25zIHRvIC0xIHRvIG1hcmsgb25lcyB0aGF0IG5vCisrICAgICBzdGFydF9tZW1vcnkvc3RvcF9tZW1vcnkgaGFzIGJlZW4gc2VlbiBmb3IuIEFsc28gaW5pdGlhbGl6ZSB0aGUKKysgICAgIHJlZ2lzdGVyIGluZm9ybWF0aW9uIHN0cnVjdC4gICovCisrICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBudW1fcmVnczsgbWNudCsrKQorKyAgICB7CisrICAgICAgcmVnc3RhcnRbbWNudF0gPSByZWdlbmRbbWNudF0KKysgICAgICAgID0gb2xkX3JlZ3N0YXJ0W21jbnRdID0gb2xkX3JlZ2VuZFttY250XSA9IFJFR19VTlNFVF9WQUxVRTsKKysKKysgICAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bbWNudF0pID0gTUFUQ0hfTlVMTF9VTlNFVF9WQUxVRTsKKysgICAgICBJU19BQ1RJVkUgKHJlZ19pbmZvW21jbnRdKSA9IDA7CisrICAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvW21jbnRdKSA9IDA7CisrICAgICAgRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bbWNudF0pID0gMDsKKysgICAgfQorKworKyAgLyogV2UgbW92ZSBgc3RyaW5nMScgaW50byBgc3RyaW5nMicgaWYgdGhlIGxhdHRlcidzIGVtcHR5IC0tIGJ1dCBub3QgaWYKKysgICAgIGBzdHJpbmcxJyBpcyBudWxsLiAgKi8KKysgIGlmIChzaXplMiA9PSAwICYmIHN0cmluZzEgIT0gTlVMTCkKKysgICAgeworKyAgICAgIHN0cmluZzIgPSBzdHJpbmcxOworKyAgICAgIHNpemUyID0gc2l6ZTE7CisrICAgICAgc3RyaW5nMSA9IDA7CisrICAgICAgc2l6ZTEgPSAwOworKyNpZmRlZiBXQ0hBUgorKyAgICAgIG1ic19vZmZzZXQyID0gbWJzX29mZnNldDE7CisrICAgICAgY3NpemUyID0gY3NpemUxOworKyAgICAgIG1ic19vZmZzZXQxID0gTlVMTDsKKysgICAgICBjc2l6ZTEgPSAwOworKyNlbmRpZgorKyAgICB9CisrICBlbmQxID0gc3RyaW5nMSArIHNpemUxOworKyAgZW5kMiA9IHN0cmluZzIgKyBzaXplMjsKKysKKysgIC8qIENvbXB1dGUgd2hlcmUgdG8gc3RvcCBtYXRjaGluZywgd2l0aGluIHRoZSB0d28gc3RyaW5ncy4gICovCisrI2lmZGVmIFdDSEFSCisrICBpZiAoc3RvcCA8PSBjc2l6ZTEpCisrICAgIHsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0MSwgc3RvcCk7CisrICAgICAgZW5kX21hdGNoXzEgPSBzdHJpbmcxICsgbWNudDsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGlmIChzdG9wID4gY3NpemUxICsgY3NpemUyKQorKwlzdG9wID0gY3NpemUxICsgY3NpemUyOworKyAgICAgIGVuZF9tYXRjaF8xID0gZW5kMTsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0Miwgc3RvcC1jc2l6ZTEpOworKyAgICAgIGVuZF9tYXRjaF8yID0gc3RyaW5nMiArIG1jbnQ7CisrICAgIH0KKysgIGlmIChtY250IDwgMCkKKysgICAgeyAvKiBjb3VudF9tYnNfbGVuZ3RoIHJldHVybiBlcnJvci4gICovCisrICAgICAgRlJFRV9WQVJJQUJMRVMgKCk7CisrICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrI2Vsc2UKKysgIGlmIChzdG9wIDw9IHNpemUxKQorKyAgICB7CisrICAgICAgZW5kX21hdGNoXzEgPSBzdHJpbmcxICsgc3RvcDsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGVuZF9tYXRjaF8xID0gZW5kMTsKKysgICAgICBlbmRfbWF0Y2hfMiA9IHN0cmluZzIgKyBzdG9wIC0gc2l6ZTE7CisrICAgIH0KKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgIC8qIGBwJyBzY2FucyB0aHJvdWdoIHRoZSBwYXR0ZXJuIGFzIGBkJyBzY2FucyB0aHJvdWdoIHRoZSBkYXRhLgorKyAgICAgYGRlbmQnIGlzIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZyB0aGF0IGBkJyBwb2ludHMgd2l0aGluLiAgYGQnCisrICAgICBpcyBhZHZhbmNlZCBpbnRvIHRoZSBmb2xsb3dpbmcgaW5wdXQgc3RyaW5nIHdoZW5ldmVyIG5lY2Vzc2FyeSwgYnV0CisrICAgICB0aGlzIGhhcHBlbnMgYmVmb3JlIGZldGNoaW5nOyB0aGVyZWZvcmUsIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisrICAgICBsb29wLCBgZCcgY2FuIGJlIHBvaW50aW5nIGF0IHRoZSBlbmQgb2YgYSBzdHJpbmcsIGJ1dCBpdCBjYW5ub3QKKysgICAgIGVxdWFsIGBzdHJpbmcyJy4gICovCisrI2lmZGVmIFdDSEFSCisrICBpZiAoc2l6ZTEgPiAwICYmIHBvcyA8PSBjc2l6ZTEpCisrICAgIHsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0MSwgcG9zKTsKKysgICAgICBkID0gc3RyaW5nMSArIG1jbnQ7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8xOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBtY250ID0gY291bnRfbWJzX2xlbmd0aChtYnNfb2Zmc2V0MiwgcG9zLWNzaXplMSk7CisrICAgICAgZCA9IHN0cmluZzIgKyBtY250OworKyAgICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysgICAgfQorKworKyAgaWYgKG1jbnQgPCAwKQorKyAgICB7IC8qIGNvdW50X21ic19sZW5ndGggcmV0dXJuIGVycm9yLiAgKi8KKysgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysjZWxzZQorKyAgaWYgKHNpemUxID4gMCAmJiBwb3MgPD0gc2l6ZTEpCisrICAgIHsKKysgICAgICBkID0gc3RyaW5nMSArIHBvczsKKysgICAgICBkZW5kID0gZW5kX21hdGNoXzE7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGQgPSBzdHJpbmcyICsgcG9zIC0gc2l6ZTE7CisrICAgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKyAgICB9CisrI2VuZGlmIC8qIFdDSEFSICovCisrCisrICBERUJVR19QUklOVDEgKCJUaGUgY29tcGlsZWQgcGF0dGVybiBpczpcbiIpOworKyAgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTiAoYnVmcCwgcCwgcGVuZCk7CisrICBERUJVR19QUklOVDEgKCJUaGUgc3RyaW5nIHRvIG1hdGNoIGlzOiBgIik7CisrICBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HIChkLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIpOworKyAgREVCVUdfUFJJTlQxICgiJ1xuIik7CisrCisrICAvKiBUaGlzIGxvb3BzIG92ZXIgcGF0dGVybiBjb21tYW5kcy4gIEl0IGV4aXRzIGJ5IHJldHVybmluZyBmcm9tIHRoZQorKyAgICAgZnVuY3Rpb24gaWYgdGhlIG1hdGNoIGlzIGNvbXBsZXRlLCBvciBpdCBkcm9wcyB0aHJvdWdoIGlmIHRoZSBtYXRjaAorKyAgICAgZmFpbHMgYXQgdGhpcyBzdGFydGluZyBwb2ludCBpbiB0aGUgaW5wdXQgZGF0YS4gICovCisrICBmb3IgKDs7KQorKyAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgREVCVUdfUFJJTlQyICgiXG4lcDogIiwgcCk7CisrI2Vsc2UKKysgICAgICBERUJVR19QUklOVDIgKCJcbjB4JXg6ICIsIHApOworKyNlbmRpZgorKworKyAgICAgIGlmIChwID09IHBlbmQpCisrCXsgLyogRW5kIG9mIHBhdHRlcm4gbWVhbnMgd2UgbWlnaHQgaGF2ZSBzdWNjZWVkZWQuICAqLworKyAgICAgICAgICBERUJVR19QUklOVDEgKCJlbmQgb2YgcGF0dGVybiAuLi4gIik7CisrCisrCSAgLyogSWYgd2UgaGF2ZW4ndCBtYXRjaGVkIHRoZSBlbnRpcmUgc3RyaW5nLCBhbmQgd2Ugd2FudCB0aGUKKysgICAgICAgICAgICAgbG9uZ2VzdCBtYXRjaCwgdHJ5IGJhY2t0cmFja2luZy4gICovCisrICAgICAgICAgIGlmIChkICE9IGVuZF9tYXRjaF8yKQorKwkgICAgeworKwkgICAgICAvKiAxIGlmIHRoaXMgbWF0Y2ggZW5kcyBpbiB0aGUgc2FtZSBzdHJpbmcgKHN0cmluZzEgb3Igc3RyaW5nMikKKysJCSBhcyB0aGUgYmVzdCBwcmV2aW91cyBtYXRjaC4gICovCisrCSAgICAgIGJvb2xlYW4gc2FtZV9zdHJfcCA9IChGSVJTVF9TVFJJTkdfUCAobWF0Y2hfZW5kKQorKwkJCQkgICAgPT0gTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HKTsKKysJICAgICAgLyogMSBpZiB0aGlzIG1hdGNoIGlzIHRoZSBiZXN0IHNlZW4gc28gZmFyLiAgKi8KKysJICAgICAgYm9vbGVhbiBiZXN0X21hdGNoX3A7CisrCisrCSAgICAgIC8qIEFJWCBjb21waWxlciBnb3QgY29uZnVzZWQgd2hlbiB0aGlzIHdhcyBjb21iaW5lZAorKwkJIHdpdGggdGhlIHByZXZpb3VzIGRlY2xhcmF0aW9uLiAgKi8KKysJICAgICAgaWYgKHNhbWVfc3RyX3ApCisrCQliZXN0X21hdGNoX3AgPSBkID4gbWF0Y2hfZW5kOworKwkgICAgICBlbHNlCisrCQliZXN0X21hdGNoX3AgPSAhTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HOworKworKyAgICAgICAgICAgICAgREVCVUdfUFJJTlQxICgiYmFja3RyYWNraW5nLlxuIik7CisrCisrICAgICAgICAgICAgICBpZiAoIUZBSUxfU1RBQ0tfRU1QVFkgKCkpCisrICAgICAgICAgICAgICAgIHsgLyogTW9yZSBmYWlsdXJlIHBvaW50cyB0byB0cnkuICAqLworKworKyAgICAgICAgICAgICAgICAgIC8qIElmIGV4Y2VlZHMgYmVzdCBtYXRjaCBzbyBmYXIsIHNhdmUgaXQuICAqLworKyAgICAgICAgICAgICAgICAgIGlmICghYmVzdF9yZWdzX3NldCB8fCBiZXN0X21hdGNoX3ApCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgIGJlc3RfcmVnc19zZXQgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICBtYXRjaF9lbmQgPSBkOworKworKyAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCJcblNBVklORyBtYXRjaCBhcyBiZXN0IHNvIGZhci5cbiIpOworKworKyAgICAgICAgICAgICAgICAgICAgICBmb3IgKG1jbnQgPSAxOyAodW5zaWduZWQpIG1jbnQgPCBudW1fcmVnczsgbWNudCsrKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfcmVnc3RhcnRbbWNudF0gPSByZWdzdGFydFttY250XTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfcmVnZW5kW21jbnRdID0gcmVnZW5kW21jbnRdOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIElmIG5vIGZhaWx1cmUgcG9pbnRzLCBkb24ndCByZXN0b3JlIGdhcmJhZ2UuICBBbmQgaWYKKysgICAgICAgICAgICAgICAgIGxhc3QgbWF0Y2ggaXMgcmVhbCBiZXN0IG1hdGNoLCBkb24ndCByZXN0b3JlIHNlY29uZAorKyAgICAgICAgICAgICAgICAgYmVzdCBvbmUuICovCisrICAgICAgICAgICAgICBlbHNlIGlmIChiZXN0X3JlZ3Nfc2V0ICYmICFiZXN0X21hdGNoX3ApCisrICAgICAgICAgICAgICAgIHsKKysgIAkgICAgICAgIHJlc3RvcmVfYmVzdF9yZWdzOgorKyAgICAgICAgICAgICAgICAgIC8qIFJlc3RvcmUgYmVzdCBtYXRjaC4gIEl0IG1heSBoYXBwZW4gdGhhdCBgZGVuZCA9PQorKyAgICAgICAgICAgICAgICAgICAgIGVuZF9tYXRjaF8xJyB3aGlsZSB0aGUgcmVzdG9yZWQgZCBpcyBpbiBzdHJpbmcyLgorKyAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybiBgeC4qeS4qeicgYWdhaW5zdCB0aGUKKysgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzIGB4LScgYW5kIGB5LXotJywgaWYgdGhlIHR3byBzdHJpbmdzIGFyZQorKyAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25zZWN1dGl2ZSBpbiBtZW1vcnkuICAqLworKyAgICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIlJlc3RvcmluZyBiZXN0IHJlZ2lzdGVycy5cbiIpOworKworKyAgICAgICAgICAgICAgICAgIGQgPSBtYXRjaF9lbmQ7CisrICAgICAgICAgICAgICAgICAgZGVuZCA9ICgoZCA+PSBzdHJpbmcxICYmIGQgPD0gZW5kMSkKKysJCSAgICAgICAgICAgPyBlbmRfbWF0Y2hfMSA6IGVuZF9tYXRjaF8yKTsKKysKKysJCSAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgbnVtX3JlZ3M7IG1jbnQrKykKKysJCSAgICB7CisrCQkgICAgICByZWdzdGFydFttY250XSA9IGJlc3RfcmVnc3RhcnRbbWNudF07CisrCQkgICAgICByZWdlbmRbbWNudF0gPSBiZXN0X3JlZ2VuZFttY250XTsKKysJCSAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9IC8qIGQgIT0gZW5kX21hdGNoXzIgKi8KKysKKysJc3VjY2VlZF9sYWJlbDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiQWNjZXB0aW5nIG1hdGNoLlxuIik7CisrICAgICAgICAgIC8qIElmIGNhbGxlciB3YW50cyByZWdpc3RlciBjb250ZW50cyBkYXRhIGJhY2ssIGRvIGl0LiAgKi8KKysgICAgICAgICAgaWYgKHJlZ3MgJiYgIWJ1ZnAtPm5vX3N1YikKKysJICAgIHsKKysJICAgICAgLyogSGF2ZSB0aGUgcmVnaXN0ZXIgZGF0YSBhcnJheXMgYmVlbiBhbGxvY2F0ZWQ/ICAqLworKyAgICAgICAgICAgICAgaWYgKGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID09IFJFR1NfVU5BTExPQ0FURUQpCisrICAgICAgICAgICAgICAgIHsgLyogTm8uICBTbyBhbGxvY2F0ZSB0aGVtIHdpdGggbWFsbG9jLiAgV2UgbmVlZCBvbmUKKysgICAgICAgICAgICAgICAgICAgICBleHRyYSBlbGVtZW50IGJleW9uZCBgbnVtX3JlZ3MnIGZvciB0aGUgYC0xJyBtYXJrZXIKKysgICAgICAgICAgICAgICAgICAgICBHTlUgY29kZSB1c2VzLiAgKi8KKysgICAgICAgICAgICAgICAgICByZWdzLT5udW1fcmVncyA9IE1BWCAoUkVfTlJFR1MsIG51bV9yZWdzICsgMSk7CisrICAgICAgICAgICAgICAgICAgcmVncy0+c3RhcnQgPSBUQUxMT0MgKHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgcmVncy0+ZW5kID0gVEFMTE9DIChyZWdzLT5udW1fcmVncywgcmVnb2ZmX3QpOworKyAgICAgICAgICAgICAgICAgIGlmIChyZWdzLT5zdGFydCA9PSBOVUxMIHx8IHJlZ3MtPmVuZCA9PSBOVUxMKQorKwkJICAgIHsKKysJCSAgICAgIEZSRUVfVkFSSUFCTEVTICgpOworKwkJICAgICAgcmV0dXJuIC0yOworKwkJICAgIH0KKysgICAgICAgICAgICAgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IFJFR1NfUkVBTExPQ0FURTsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgZWxzZSBpZiAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19SRUFMTE9DQVRFKQorKyAgICAgICAgICAgICAgICB7IC8qIFllcy4gIElmIHdlIG5lZWQgbW9yZSBlbGVtZW50cyB0aGFuIHdlcmUgYWxyZWFkeQorKyAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCwgcmVhbGxvY2F0ZSB0aGVtLiAgSWYgd2UgbmVlZCBmZXdlciwganVzdAorKyAgICAgICAgICAgICAgICAgICAgIGxlYXZlIGl0IGFsb25lLiAgKi8KKysgICAgICAgICAgICAgICAgICBpZiAocmVncy0+bnVtX3JlZ3MgPCBudW1fcmVncyArIDEpCisrICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgIHJlZ3MtPm51bV9yZWdzID0gbnVtX3JlZ3MgKyAxOworKyAgICAgICAgICAgICAgICAgICAgICBSRVRBTExPQyAocmVncy0+c3RhcnQsIHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgICAgIFJFVEFMTE9DIChyZWdzLT5lbmQsIHJlZ3MtPm51bV9yZWdzLCByZWdvZmZfdCk7CisrICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWdzLT5zdGFydCA9PSBOVUxMIHx8IHJlZ3MtPmVuZCA9PSBOVUxMKQorKwkJCXsKKysJCQkgIEZSRUVfVkFSSUFCTEVTICgpOworKwkJCSAgcmV0dXJuIC0yOworKwkJCX0KKysgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgZWxzZQorKwkJeworKwkJICAvKiBUaGVzZSBicmFjZXMgZmVuZCBvZmYgYSAiZW1wdHkgYm9keSBpbiBhbiBlbHNlLXN0YXRlbWVudCIKKysJCSAgICAgd2FybmluZyB1bmRlciBHQ0Mgd2hlbiBhc3NlcnQgZXhwYW5kcyB0byBub3RoaW5nLiAgKi8KKysJCSAgYXNzZXJ0IChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX0ZJWEVEKTsKKysJCX0KKysKKysgICAgICAgICAgICAgIC8qIENvbnZlcnQgdGhlIHBvaW50ZXIgZGF0YSBpbiBgcmVnc3RhcnQnIGFuZCBgcmVnZW5kJyB0bworKyAgICAgICAgICAgICAgICAgaW5kaWNlcy4gIFJlZ2lzdGVyIHplcm8gaGFzIHRvIGJlIHNldCBkaWZmZXJlbnRseSwKKysgICAgICAgICAgICAgICAgIHNpbmNlIHdlIGhhdmVuJ3Qga2VwdCB0cmFjayBvZiBhbnkgaW5mbyBmb3IgaXQuICAqLworKyAgICAgICAgICAgICAgaWYgKHJlZ3MtPm51bV9yZWdzID4gMCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0WzBdID0gcG9zOworKyNpZmRlZiBXQ0hBUgorKwkJICBpZiAoTUFUQ0hJTkdfSU5fRklSU1RfU1RSSU5HKQorKwkJICAgIHJlZ3MtPmVuZFswXSA9IG1ic19vZmZzZXQxICE9IE5VTEwgPworKwkJCQkJbWJzX29mZnNldDFbZC1zdHJpbmcxXSA6IDA7CisrCQkgIGVsc2UKKysJCSAgICByZWdzLT5lbmRbMF0gPSBjc2l6ZTEgKyAobWJzX29mZnNldDIgIT0gTlVMTCA/CisrCQkJCQkgICAgIG1ic19vZmZzZXQyW2Qtc3RyaW5nMl0gOiAwKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgICAgIHJlZ3MtPmVuZFswXSA9IChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcKKysJCQkJICA/ICgocmVnb2ZmX3QpIChkIC0gc3RyaW5nMSkpCisrCQkJICAgICAgICAgIDogKChyZWdvZmZfdCkgKGQgLSBzdHJpbmcyICsgc2l6ZTEpKSk7CisrI2VuZGlmIC8qIFdDSEFSICovCisrICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgIC8qIEdvIHRocm91Z2ggdGhlIGZpcnN0IGBtaW4gKG51bV9yZWdzLCByZWdzLT5udW1fcmVncyknCisrICAgICAgICAgICAgICAgICByZWdpc3RlcnMsIHNpbmNlIHRoYXQgaXMgYWxsIHdlIGluaXRpYWxpemVkLiAgKi8KKysJICAgICAgZm9yIChtY250ID0gMTsgKHVuc2lnbmVkKSBtY250IDwgTUlOIChudW1fcmVncywgcmVncy0+bnVtX3JlZ3MpOworKwkJICAgbWNudCsrKQorKwkJeworKyAgICAgICAgICAgICAgICAgIGlmIChSRUdfVU5TRVQgKHJlZ3N0YXJ0W21jbnRdKSB8fCBSRUdfVU5TRVQgKHJlZ2VuZFttY250XSkpCisrICAgICAgICAgICAgICAgICAgICByZWdzLT5zdGFydFttY250XSA9IHJlZ3MtPmVuZFttY250XSA9IC0xOworKyAgICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICAgIHsKKysJCSAgICAgIHJlZ3MtPnN0YXJ0W21jbnRdCisrCQkJPSAocmVnb2ZmX3QpIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdzdGFydFttY250XSk7CisrICAgICAgICAgICAgICAgICAgICAgIHJlZ3MtPmVuZFttY250XQorKwkJCT0gKHJlZ29mZl90KSBQT0lOVEVSX1RPX09GRlNFVCAocmVnZW5kW21jbnRdKTsKKysgICAgICAgICAgICAgICAgICAgIH0KKysJCX0KKysKKysgICAgICAgICAgICAgIC8qIElmIHRoZSByZWdzIHN0cnVjdHVyZSB3ZSByZXR1cm4gaGFzIG1vcmUgZWxlbWVudHMgdGhhbgorKyAgICAgICAgICAgICAgICAgd2VyZSBpbiB0aGUgcGF0dGVybiwgc2V0IHRoZSBleHRyYSBlbGVtZW50cyB0byAtMS4gIElmCisrICAgICAgICAgICAgICAgICB3ZSAocmUpYWxsb2NhdGVkIHRoZSByZWdpc3RlcnMsIHRoaXMgaXMgdGhlIGNhc2UsCisrICAgICAgICAgICAgICAgICBiZWNhdXNlIHdlIGFsd2F5cyBhbGxvY2F0ZSBlbm91Z2ggdG8gaGF2ZSBhdCBsZWFzdCBvbmUKKysgICAgICAgICAgICAgICAgIC0xIGF0IHRoZSBlbmQuICAqLworKyAgICAgICAgICAgICAgZm9yIChtY250ID0gbnVtX3JlZ3M7ICh1bnNpZ25lZCkgbWNudCA8IHJlZ3MtPm51bV9yZWdzOyBtY250KyspCisrICAgICAgICAgICAgICAgIHJlZ3MtPnN0YXJ0W21jbnRdID0gcmVncy0+ZW5kW21jbnRdID0gLTE7CisrCSAgICB9IC8qIHJlZ3MgJiYgIWJ1ZnAtPm5vX3N1YiAqLworKworKyAgICAgICAgICBERUJVR19QUklOVDQgKCIldSBmYWlsdXJlIHBvaW50cyBwdXNoZWQsICV1IHBvcHBlZCAoJXUgcmVtYWluKS5cbiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgbmZhaWx1cmVfcG9pbnRzX3B1c2hlZCwgbmZhaWx1cmVfcG9pbnRzX3BvcHBlZCwKKysgICAgICAgICAgICAgICAgICAgICAgICBuZmFpbHVyZV9wb2ludHNfcHVzaGVkIC0gbmZhaWx1cmVfcG9pbnRzX3BvcHBlZCk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiV1IHJlZ2lzdGVycyBwdXNoZWQuXG4iLCBudW1fcmVnc19wdXNoZWQpOworKworKyNpZmRlZiBXQ0hBUgorKwkgIGlmIChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcpCisrCSAgICBtY250ID0gbWJzX29mZnNldDEgIT0gTlVMTCA/IG1ic19vZmZzZXQxW2Qtc3RyaW5nMV0gOiAwOworKwkgIGVsc2UKKysJICAgIG1jbnQgPSAobWJzX29mZnNldDIgIT0gTlVMTCA/IG1ic19vZmZzZXQyW2Qtc3RyaW5nMl0gOiAwKSArCisrCQkJY3NpemUxOworKyAgICAgICAgICBtY250IC09IHBvczsKKysjZWxzZQorKyAgICAgICAgICBtY250ID0gZCAtIHBvcyAtIChNQVRDSElOR19JTl9GSVJTVF9TVFJJTkcKKysJCQkgICAgPyBzdHJpbmcxCisrCQkJICAgIDogc3RyaW5nMiAtIHNpemUxKTsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiUmV0dXJuaW5nICVkIGZyb20gcmVfbWF0Y2hfMi5cbiIsIG1jbnQpOworKworKyAgICAgICAgICBGUkVFX1ZBUklBQkxFUyAoKTsKKysgICAgICAgICAgcmV0dXJuIG1jbnQ7CisrICAgICAgICB9CisrCisrICAgICAgLyogT3RoZXJ3aXNlIG1hdGNoIG5leHQgcGF0dGVybiBjb21tYW5kLiAgKi8KKysgICAgICBzd2l0Y2ggKFNXSVRDSF9FTlVNX0NBU1QgKChyZV9vcGNvZGVfdCkgKnArKykpCisrCXsKKysgICAgICAgIC8qIElnbm9yZSB0aGVzZS4gIFVzZWQgdG8gaWdub3JlIHRoZSBuIG9mIHN1Y2NlZWRfbidzIHdoaWNoCisrICAgICAgICAgICBjdXJyZW50bHkgaGF2ZSBuID09IDAuICAqLworKyAgICAgICAgY2FzZSBub19vcDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vX29wLlxuIik7CisrICAgICAgICAgIGJyZWFrOworKworKwljYXNlIHN1Y2NlZWQ6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBzdWNjZWVkLlxuIik7CisrCSAgZ290byBzdWNjZWVkX2xhYmVsOworKworKyAgICAgICAgLyogTWF0Y2ggdGhlIG5leHQgbiBwYXR0ZXJuIGNoYXJhY3RlcnMgZXhhY3RseS4gIFRoZSBmb2xsb3dpbmcKKysgICAgICAgICAgIGJ5dGUgaW4gdGhlIHBhdHRlcm4gZGVmaW5lcyBuLCBhbmQgdGhlIG4gYnl0ZXMgYWZ0ZXIgdGhhdAorKyAgICAgICAgICAgYXJlIHRoZSBjaGFyYWN0ZXJzIHRvIG1hdGNoLiAgKi8KKysJY2FzZSBleGFjdG46CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCWNhc2UgZXhhY3RuX2JpbjoKKysjZW5kaWYKKysJICBtY250ID0gKnArKzsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGV4YWN0biAlZC5cbiIsIG1jbnQpOworKworKyAgICAgICAgICAvKiBUaGlzIGlzIHdyaXR0ZW4gb3V0IGFzIGFuIGlmLWVsc2Ugc28gd2UgZG9uJ3Qgd2FzdGUgdGltZQorKyAgICAgICAgICAgICB0ZXN0aW5nIGB0cmFuc2xhdGUnIGluc2lkZSB0aGUgbG9vcC4gICovCisrICAgICAgICAgIGlmICh0cmFuc2xhdGUpCisrCSAgICB7CisrCSAgICAgIGRvCisrCQl7CisrCQkgIFBSRUZFVENIICgpOworKyNpZmRlZiBXQ0hBUgorKwkJICBpZiAoKmQgPD0gMHhmZikKKysJCSAgICB7CisrCQkgICAgICBpZiAoKFVDSEFSX1QpIHRyYW5zbGF0ZVsodW5zaWduZWQgY2hhcikgKmQrK10KKysJCQkgICE9IChVQ0hBUl9UKSAqcCsrKQorKwkJCWdvdG8gZmFpbDsKKysJCSAgICB9CisrCQkgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICBpZiAoKmQrKyAhPSAoQ0hBUl9UKSAqcCsrKQorKwkJCWdvdG8gZmFpbDsKKysJCSAgICB9CisrI2Vsc2UKKysJCSAgaWYgKChVQ0hBUl9UKSB0cmFuc2xhdGVbKHVuc2lnbmVkIGNoYXIpICpkKytdCisrCQkgICAgICAhPSAoVUNIQVJfVCkgKnArKykKKysgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysjZW5kaWYgLyogV0NIQVIgKi8KKysJCX0KKysJICAgICAgd2hpbGUgKC0tbWNudCk7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBkbworKwkJeworKwkJICBQUkVGRVRDSCAoKTsKKysJCSAgaWYgKCpkKysgIT0gKENIQVJfVCkgKnArKykgZ290byBmYWlsOworKwkJfQorKwkgICAgICB3aGlsZSAoLS1tY250KTsKKysJICAgIH0KKysJICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBicmVhazsKKysKKysKKysgICAgICAgIC8qIE1hdGNoIGFueSBjaGFyYWN0ZXIgZXhjZXB0IHBvc3NpYmx5IGEgbmV3bGluZSBvciBhIG51bGwuICAqLworKwljYXNlIGFueWNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBhbnljaGFyLlxuIik7CisrCisrICAgICAgICAgIFBSRUZFVENIICgpOworKworKyAgICAgICAgICBpZiAoKCEoYnVmcC0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpICYmIFRSQU5TTEFURSAoKmQpID09ICdcbicpCisrICAgICAgICAgICAgICB8fCAoYnVmcC0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMICYmIFRSQU5TTEFURSAoKmQpID09ICdcMDAwJykpCisrCSAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgTWF0Y2hlZCBgJWxkJy5cbiIsIChsb25nIGludCkgKmQpOworKyAgICAgICAgICBkKys7CisrCSAgYnJlYWs7CisrCisrCisrCWNhc2UgY2hhcnNldDoKKysJY2FzZSBjaGFyc2V0X25vdDoKKysJICB7CisrCSAgICByZWdpc3RlciBVQ0hBUl9UIGM7CisrI2lmZGVmIFdDSEFSCisrCSAgICB1bnNpZ25lZCBpbnQgaSwgY2hhcl9jbGFzc19sZW5ndGgsIGNvbGxfc3ltYm9sX2xlbmd0aCwKKysgICAgICAgICAgICAgIGVxdWl2X2NsYXNzX2xlbmd0aCwgcmFuZ2VzX2xlbmd0aCwgY2hhcnNfbGVuZ3RoLCBsZW5ndGg7CisrCSAgICBDSEFSX1QgKndvcmtwLCAqd29ya3AyLCAqY2hhcnNldF90b3A7CisrI2RlZmluZSBXT1JLX0JVRkZFUl9TSVpFIDEyOAorKyAgICAgICAgICAgIENIQVJfVCBzdHJfYnVmW1dPUktfQlVGRkVSX1NJWkVdOworKyMgaWZkZWYgX0xJQkMKKysJICAgIHVpbnQzMl90IG5ydWxlczsKKysjIGVuZGlmIC8qIF9MSUJDICovCisrI2VuZGlmIC8qIFdDSEFSICovCisrCSAgICBib29sZWFuIG5lZ2F0ZSA9IChyZV9vcGNvZGVfdCkgKihwIC0gMSkgPT0gY2hhcnNldF9ub3Q7CisrCisrICAgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGNoYXJzZXQlcy5cbiIsIG5lZ2F0ZSA/ICJfbm90IiA6ICIiKTsKKysJICAgIFBSRUZFVENIICgpOworKwkgICAgYyA9IFRSQU5TTEFURSAoKmQpOyAvKiBUaGUgY2hhcmFjdGVyIHRvIG1hdGNoLiAgKi8KKysjaWZkZWYgV0NIQVIKKysjIGlmZGVmIF9MSUJDCisrCSAgICBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworKyMgZW5kaWYgLyogX0xJQkMgKi8KKysJICAgIGNoYXJzZXRfdG9wID0gcCAtIDE7CisrCSAgICBjaGFyX2NsYXNzX2xlbmd0aCA9ICpwKys7CisrCSAgICBjb2xsX3N5bWJvbF9sZW5ndGggPSAqcCsrOworKwkgICAgZXF1aXZfY2xhc3NfbGVuZ3RoID0gKnArKzsKKysJICAgIHJhbmdlc19sZW5ndGggPSAqcCsrOworKwkgICAgY2hhcnNfbGVuZ3RoID0gKnArKzsKKysJICAgIC8qIHAgcG9pbnRzIGNoYXJzZXRbNl0sIHNvIHRoZSBhZGRyZXNzIG9mIHRoZSBuZXh0IGluc3RydWN0aW9uCisrCSAgICAgICAoY2hhcnNldFtsK20rbisybytrK3AnXSkgZXF1YWxzIHBbbCttK24rMipvK3AnXSwKKysJICAgICAgIHdoZXJlIGw9bGVuZ3RoIG9mIGNoYXJfY2xhc3NlcywgbT1sZW5ndGggb2YgY29sbGF0aW5nX3N5bWJvbCwKKysJICAgICAgIG49ZXF1aXZhbGVuY2VfY2xhc3MsIG89bGVuZ3RoIG9mIGNoYXJfcmFuZ2UsCisrCSAgICAgICBwJz1sZW5ndGggb2YgY2hhcmFjdGVyLiAgKi8KKysJICAgIHdvcmtwID0gcDsKKysJICAgIC8qIFVwZGF0ZSBwIHRvIGluZGljYXRlIHRoZSBuZXh0IGluc3RydWN0aW9uLiAgKi8KKysJICAgIHAgKz0gY2hhcl9jbGFzc19sZW5ndGggKyBjb2xsX3N5bWJvbF9sZW5ndGgrIGVxdWl2X2NsYXNzX2xlbmd0aCArCisrICAgICAgICAgICAgICAyKnJhbmdlc19sZW5ndGggKyBjaGFyc19sZW5ndGg7CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyX2NsYXNzPyAgKi8KKysJICAgIGZvciAoaSA9IDA7IGkgPCBjaGFyX2NsYXNzX2xlbmd0aCA7IGkgKz0gQ0hBUl9DTEFTU19TSVpFKQorKwkgICAgICB7CisrCQl3Y3R5cGVfdCB3Y3R5cGU7CisrCQl1aW50cHRyX3QgYWxpZ25lZHAgPSAoKHVpbnRwdHJfdCl3b3JrcAorKwkJCQkgICAgICArIF9fYWxpZ25vZl9fKHdjdHlwZV90KSAtIDEpCisrCQkgIAkJICAgICAgJiB+KHVpbnRwdHJfdCkoX19hbGlnbm9mX18od2N0eXBlX3QpIC0gMSk7CisrCQl3Y3R5cGUgPSAqKCh3Y3R5cGVfdCopYWxpZ25lZHApOworKwkJd29ya3AgKz0gQ0hBUl9DTEFTU19TSVpFOworKyMgaWZkZWYgX0xJQkMKKysJCWlmIChfX2lzd2N0eXBlKCh3aW50X3QpYywgd2N0eXBlKSkKKysJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKyMgZWxzZQorKwkJaWYgKGlzd2N0eXBlKCh3aW50X3QpYywgd2N0eXBlKSkKKysJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKyMgZW5kaWYKKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY29sbGF0aW5nX3N5bWJvbD8gICovCisrIyBpZmRlZiBfTElCQworKwkgICAgaWYgKG5ydWxlcyAhPSAwKQorKwkgICAgICB7CisrCQljb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworKworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGNvbGxfc3ltYm9sX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDsKKysJCSAgICAgd29ya3ArKykKKysJCSAgeworKwkJICAgIGludDMyX3QgKndleHRyYTsKKysJCSAgICB3ZXh0cmEgPSAoaW50MzJfdCopKGV4dHJhICsgKndvcmtwKyspOworKwkJICAgIGZvciAoaSA9IDA7IGkgPCAqd2V4dHJhOyArK2kpCisrCQkgICAgICBpZiAoVFJBTlNMQVRFKGRbaV0pICE9IHdleHRyYVsxICsgaV0pCisrCQkJYnJlYWs7CisrCisrCQkgICAgaWYgKGkgPT0gKndleHRyYSkKKysJCSAgICAgIHsKKysJCQkvKiBVcGRhdGUgZCwgaG93ZXZlciBkIHdpbGwgYmUgaW5jcmVtZW50ZWQgYXQKKysJCQkgICBjaGFyX3NldF9tYXRjaGVkOiwgd2UgZGVjcmVtZW50IGQgaGVyZS4gICovCisrCQkJZCArPSBpIC0gMTsKKysJCQlnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCQkgICAgICB9CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgZWxzZSAvKiAobnJ1bGVzID09IDApICovCisrIyBlbmRpZgorKwkgICAgICAvKiBJZiB3ZSBjYW4ndCBsb29rIHVwIGNvbGxhdGlvbiBkYXRhLCB3ZSB1c2Ugd2NzY29sbAorKwkJIGluc3RlYWQuICAqLworKwkgICAgICB7CisrCQlmb3IgKHdvcmtwMiA9IHdvcmtwICsgY29sbF9zeW1ib2xfbGVuZ3RoIDsgd29ya3AgPCB3b3JrcDIgOykKKysJCSAgeworKwkJICAgIGNvbnN0IENIQVJfVCAqYmFja3VwX2QgPSBkLCAqYmFja3VwX2RlbmQgPSBkZW5kOworKyMgaWZkZWYgX0xJQkMKKysJCSAgICBsZW5ndGggPSBfX3djc2xlbiAod29ya3ApOworKyMgZWxzZQorKwkJICAgIGxlbmd0aCA9IHdjc2xlbiAod29ya3ApOworKyMgZW5kaWYKKysKKysJCSAgICAvKiBJZiB3Y3Njb2xsKHRoZSBjb2xsYXRpbmcgc3ltYm9sLCB3aG9sZSBzdHJpbmcpID4gMCwKKysJCSAgICAgICBhbnkgc3Vic3RyaW5nIG9mIHRoZSBzdHJpbmcgbmV2ZXIgbWF0Y2ggd2l0aCB0aGUKKysJCSAgICAgICBjb2xsYXRpbmcgc3ltYm9sLiAgKi8KKysjIGlmZGVmIF9MSUJDCisrCQkgICAgaWYgKF9fd2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVsc2UKKysJCSAgICBpZiAod2NzY29sbCAod29ya3AsIGQpID4gMCkKKysjIGVuZGlmCisrCQkgICAgICB7CisrCQkJd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCQljb250aW51ZTsKKysJCSAgICAgIH0KKysKKysJCSAgICAvKiBGaXJzdCwgd2UgY29tcGFyZSB0aGUgY29sbGF0aW5nIHN5bWJvbCB3aXRoCisrCQkgICAgICAgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nLgorKwkJICAgICAgIElmIGl0IGRvbid0IG1hdGNoLCB3ZSBhZGQgdGhlIG5leHQgY2hhcmFjdGVyIHRvCisrCQkgICAgICAgdGhlIGNvbXBhcmUgYnVmZmVyIGluIHR1cm4uICAqLworKwkJICAgIGZvciAoaSA9IDAgOyBpIDwgV09SS19CVUZGRVJfU0laRS0xIDsgaSsrLCBkKyspCisrCQkgICAgICB7CisrCQkJaW50IG1hdGNoOworKwkJCWlmIChkID09IGRlbmQpCisrCQkJICB7CisrCQkJICAgIGlmIChkZW5kID09IGVuZF9tYXRjaF8yKQorKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICBkID0gc3RyaW5nMjsKKysJCQkgICAgZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJCSAgfQorKworKwkJCS8qIGFkZCBuZXh0IGNoYXJhY3RlciB0byB0aGUgY29tcGFyZSBidWZmZXIuICAqLworKwkJCXN0cl9idWZbaV0gPSBUUkFOU0xBVEUoKmQpOworKwkJCXN0cl9idWZbaSsxXSA9ICdcMCc7CisrCisrIyBpZmRlZiBfTElCQworKwkJCW1hdGNoID0gX193Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbHNlCisrCQkJbWF0Y2ggPSB3Y3Njb2xsICh3b3JrcCwgc3RyX2J1Zik7CisrIyBlbmRpZgorKwkJCWlmIChtYXRjaCA9PSAwKQorKwkJCSAgZ290byBjaGFyX3NldF9tYXRjaGVkOworKworKwkJCWlmIChtYXRjaCA8IDApCisrCQkJICAvKiAoc3RyX2J1ZiA+IHdvcmtwKSBpbmRpY2F0ZSAoc3RyX2J1ZiArIFggPiB3b3JrcCksCisrCQkJICAgICBiZWNhdXNlIGZvciBhbGwgWCAoc3RyX2J1ZiArIFggPiBzdHJfYnVmKS4KKysJCQkgICAgIFNvIHdlIGRvbid0IG5lZWQgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCQkgIGJyZWFrOworKworKwkJCS8qIE90aGVyd2lzZShzdHJfYnVmIDwgd29ya3ApLAorKwkJCSAgIChzdHJfYnVmK25leHRfY2hhcmFjdGVyKSBtYXkgZXF1YWxzICh3b3JrcCkuCisrCQkJICAgU28gd2UgY29udGludWUgdGhpcyBsb29wLiAgKi8KKysJCSAgICAgIH0KKysJCSAgICAvKiBub3QgbWF0Y2hlZCAqLworKwkJICAgIGQgPSBiYWNrdXBfZDsKKysJCSAgICBkZW5kID0gYmFja3VwX2RlbmQ7CisrCQkgICAgd29ya3AgKz0gbGVuZ3RoICsgMTsKKysJCSAgfQorKyAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggZXF1aXZhbGVuY2VfY2xhc3M/ICAqLworKyMgaWZkZWYgX0xJQkMKKysJICAgIGlmIChucnVsZXMgIT0gMCkKKysJICAgICAgeworKyAgICAgICAgICAgICAgICBjb25zdCBDSEFSX1QgKmJhY2t1cF9kID0gZCwgKmJhY2t1cF9kZW5kID0gZGVuZDsKKysJCS8qIFRyeSB0byBtYXRjaCB0aGUgZXF1aXZhbGVuY2UgY2xhc3MgYWdhaW5zdAorKwkJICAgdGhvc2Uga25vd24gdG8gdGhlIGNvbGxhdGUgaW1wbGVtZW50YXRpb24uICAqLworKwkJY29uc3QgaW50MzJfdCAqdGFibGU7CisrCQljb25zdCBpbnQzMl90ICp3ZWlnaHRzOworKwkJY29uc3QgaW50MzJfdCAqZXh0cmE7CisrCQljb25zdCBpbnQzMl90ICppbmRpcmVjdDsKKysJCWludDMyX3QgaWR4LCBpZHgyOworKwkJd2ludF90ICpjcDsKKysJCXNpemVfdCBsZW47CisrCisrCQl0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRVdDKTsKKysJCXdlaWdodHMgPSAoY29uc3Qgd2ludF90ICopCisrCQkgIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRXQyk7CisrCQlleHRyYSA9IChjb25zdCB3aW50X3QgKikKKysJCSAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0VYVFJBV0MpOworKwkJaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorKwkJICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RXQyk7CisrCisrCQkvKiBXcml0ZSAxIGNvbGxhdGluZyBlbGVtZW50IHRvIHN0cl9idWYsIGFuZAorKwkJICAgZ2V0IGl0cyBpbmRleC4gICovCisrCQlpZHgyID0gMDsKKysKKysJCWZvciAoaSA9IDAgOyBpZHgyID09IDAgJiYgaSA8IFdPUktfQlVGRkVSX1NJWkUgLSAxOyBpKyspCisrCQkgIHsKKysJCSAgICBjcCA9ICh3aW50X3QqKXN0cl9idWY7CisrCQkgICAgaWYgKGQgPT0gZGVuZCkKKysJCSAgICAgIHsKKysJCQlpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQkgIGJyZWFrOworKwkJCWQgPSBzdHJpbmcyOworKwkJCWRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCSAgICAgIH0KKysJCSAgICBzdHJfYnVmW2ldID0gVFJBTlNMQVRFKCooZCtpKSk7CisrCQkgICAgc3RyX2J1ZltpKzFdID0gJ1wwJzsgLyogc2VudGluZWwgKi8KKysJCSAgICBpZHgyID0gRklORElEWCAodGFibGUsIGluZGlyZWN0LCBleHRyYSwgJmNwLCAxKTsKKysJCSAgfQorKworKwkJLyogVXBkYXRlIGQsIGhvd2V2ZXIgZCB3aWxsIGJlIGluY3JlbWVudGVkIGF0CisrCQkgICBjaGFyX3NldF9tYXRjaGVkOiwgd2UgZGVjcmVtZW50IGQgaGVyZS4gICovCisrCQlkID0gYmFja3VwX2QgKyAoKHdjaGFyX3QqKWNwIC0gKHdjaGFyX3QqKXN0cl9idWYgLSAxKTsKKysJCWlmIChkID49IGRlbmQpCisrCQkgIHsKKysJCSAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQlkID0gZGVuZDsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJZCA9IHN0cmluZzI7CisrCQkJZGVuZCA9IGVuZF9tYXRjaF8yOworKwkJICAgICAgfQorKwkJICB9CisrCisrCQlsZW4gPSB3ZWlnaHRzW2lkeDJdOworKworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGVxdWl2X2NsYXNzX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDsKKysJCSAgICAgd29ya3ArKykKKysJCSAgeworKwkJICAgIGlkeCA9IChpbnQzMl90KSp3b3JrcDsKKysJCSAgICAvKiBXZSBhbHJlYWR5IGNoZWNrZWQgaWR4ICE9IDAgaW4gcmVnZXhfY29tcGlsZS4gKi8KKysKKysJCSAgICBpZiAoaWR4MiAhPSAwICYmIGxlbiA9PSB3ZWlnaHRzW2lkeF0pCisrCQkgICAgICB7CisrCQkJaW50IGNudCA9IDA7CisrCQkJd2hpbGUgKGNudCA8IGxlbiAmJiAod2VpZ2h0c1tpZHggKyAxICsgY250XQorKwkJCQkJICAgICA9PSB3ZWlnaHRzW2lkeDIgKyAxICsgY250XSkpCisrCQkJICArK2NudDsKKysKKysJCQlpZiAoY250ID09IGxlbikKKysJCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgICAgIH0KKysJCSAgfQorKwkJLyogbm90IG1hdGNoZWQgKi8KKysgICAgICAgICAgICAgICAgZCA9IGJhY2t1cF9kOworKyAgICAgICAgICAgICAgICBkZW5kID0gYmFja3VwX2RlbmQ7CisrCSAgICAgIH0KKysJICAgIGVsc2UgLyogKG5ydWxlcyA9PSAwKSAqLworKyMgZW5kaWYKKysJICAgICAgLyogSWYgd2UgY2FuJ3QgbG9vayB1cCBjb2xsYXRpb24gZGF0YSwgd2UgdXNlIHdjc2NvbGwKKysJCSBpbnN0ZWFkLiAgKi8KKysJICAgICAgeworKwkJZm9yICh3b3JrcDIgPSB3b3JrcCArIGVxdWl2X2NsYXNzX2xlbmd0aCA7IHdvcmtwIDwgd29ya3AyIDspCisrCQkgIHsKKysJCSAgICBjb25zdCBDSEFSX1QgKmJhY2t1cF9kID0gZCwgKmJhY2t1cF9kZW5kID0gZGVuZDsKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgbGVuZ3RoID0gX193Y3NsZW4gKHdvcmtwKTsKKysjIGVsc2UKKysJCSAgICBsZW5ndGggPSB3Y3NsZW4gKHdvcmtwKTsKKysjIGVuZGlmCisrCisrCQkgICAgLyogSWYgd2NzY29sbCh0aGUgY29sbGF0aW5nIHN5bWJvbCwgd2hvbGUgc3RyaW5nKSA+IDAsCisrCQkgICAgICAgYW55IHN1YnN0cmluZyBvZiB0aGUgc3RyaW5nIG5ldmVyIG1hdGNoIHdpdGggdGhlCisrCQkgICAgICAgY29sbGF0aW5nIHN5bWJvbC4gICovCisrIyBpZmRlZiBfTElCQworKwkJICAgIGlmIChfX3djc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbHNlCisrCQkgICAgaWYgKHdjc2NvbGwgKHdvcmtwLCBkKSA+IDApCisrIyBlbmRpZgorKwkJICAgICAgeworKwkJCXdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkJYnJlYWs7CisrCQkgICAgICB9CisrCisrCQkgICAgLyogRmlyc3QsIHdlIGNvbXBhcmUgdGhlIGVxdWl2YWxlbmNlIGNsYXNzIHdpdGgKKysJCSAgICAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcuCisrCQkgICAgICAgSWYgaXQgZG9uJ3QgbWF0Y2gsIHdlIGFkZCB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8KKysJCSAgICAgICB0aGUgY29tcGFyZSBidWZmZXIgaW4gdHVybi4gICovCisrCQkgICAgZm9yIChpID0gMCA7IGkgPCBXT1JLX0JVRkZFUl9TSVpFIC0gMSA7IGkrKywgZCsrKQorKwkJICAgICAgeworKwkJCWludCBtYXRjaDsKKysJCQlpZiAoZCA9PSBkZW5kKQorKwkJCSAgeworKwkJCSAgICBpZiAoZGVuZCA9PSBlbmRfbWF0Y2hfMikKKysJCQkgICAgICBicmVhazsKKysJCQkgICAgZCA9IHN0cmluZzI7CisrCQkJICAgIGRlbmQgPSBlbmRfbWF0Y2hfMjsKKysJCQkgIH0KKysKKysJCQkvKiBhZGQgbmV4dCBjaGFyYWN0ZXIgdG8gdGhlIGNvbXBhcmUgYnVmZmVyLiAgKi8KKysJCQlzdHJfYnVmW2ldID0gVFJBTlNMQVRFKCpkKTsKKysJCQlzdHJfYnVmW2krMV0gPSAnXDAnOworKworKyMgaWZkZWYgX0xJQkMKKysJCQltYXRjaCA9IF9fd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZWxzZQorKwkJCW1hdGNoID0gd2NzY29sbCAod29ya3AsIHN0cl9idWYpOworKyMgZW5kaWYKKysKKysJCQlpZiAobWF0Y2ggPT0gMCkKKysJCQkgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysKKysJCQlpZiAobWF0Y2ggPCAwKQorKwkJCS8qIChzdHJfYnVmID4gd29ya3ApIGluZGljYXRlIChzdHJfYnVmICsgWCA+IHdvcmtwKSwKKysJCQkgICBiZWNhdXNlIGZvciBhbGwgWCAoc3RyX2J1ZiArIFggPiBzdHJfYnVmKS4KKysJCQkgICBTbyB3ZSBkb24ndCBuZWVkIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkJICBicmVhazsKKysKKysJCQkvKiBPdGhlcndpc2Uoc3RyX2J1ZiA8IHdvcmtwKSwKKysJCQkgICAoc3RyX2J1ZituZXh0X2NoYXJhY3RlcikgbWF5IGVxdWFscyAod29ya3ApLgorKwkJCSAgIFNvIHdlIGNvbnRpbnVlIHRoaXMgbG9vcC4gICovCisrCQkgICAgICB9CisrCQkgICAgLyogbm90IG1hdGNoZWQgKi8KKysJCSAgICBkID0gYmFja3VwX2Q7CisrCQkgICAgZGVuZCA9IGJhY2t1cF9kZW5kOworKwkJICAgIHdvcmtwICs9IGxlbmd0aCArIDE7CisrCQkgIH0KKysJICAgICAgfQorKworKyAgICAgICAgICAgIC8qIG1hdGNoIHdpdGggY2hhcl9yYW5nZT8gICovCisrIyBpZmRlZiBfTElCQworKwkgICAgaWYgKG5ydWxlcyAhPSAwKQorKwkgICAgICB7CisrCQl1aW50MzJfdCBjb2xsc2VxdmFsOworKwkJY29uc3QgY2hhciAqY29sbHNlcSA9IChjb25zdCBjaGFyICopCisrCQkgIF9OTF9DVVJSRU5UKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFXQyk7CisrCisrCQljb2xsc2VxdmFsID0gY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXEsIGMpOworKworKwkJZm9yICg7IHdvcmtwIDwgcCAtIGNoYXJzX2xlbmd0aCA7KQorKwkJICB7CisrCQkgICAgdWludDMyX3Qgc3RhcnRfdmFsLCBlbmRfdmFsOworKworKwkJICAgIC8qIFdlIGFscmVhZHkgY29tcHV0ZSB0aGUgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlCisrCQkgICAgICAgb2YgdGhlIGNoYXJhY3RlcnMgKG9yIGNvbGxhdGluZyBzeW1ib2xzKS4gICovCisrCQkgICAgc3RhcnRfdmFsID0gKHVpbnQzMl90KSAqd29ya3ArKzsgLyogcmFuZ2Vfc3RhcnQgKi8KKysJCSAgICBlbmRfdmFsID0gKHVpbnQzMl90KSAqd29ya3ArKzsgLyogcmFuZ2VfZW5kICovCisrCisrCQkgICAgaWYgKHN0YXJ0X3ZhbCA8PSBjb2xsc2VxdmFsICYmIGNvbGxzZXF2YWwgPD0gZW5kX3ZhbCkKKysJCSAgICAgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgfQorKwkgICAgICB9CisrCSAgICBlbHNlCisrIyBlbmRpZgorKwkgICAgICB7CisrCQkvKiBXZSBzZXQgcmFuZ2Vfc3RhcnRfY2hhciBhdCBzdHJfYnVmWzBdLCByYW5nZV9lbmRfY2hhcgorKwkJICAgYXQgc3RyX2J1Zls0XSwgYW5kIGNvbXBhcmVkIGNoYXIgYXQgc3RyX2J1ZlsyXS4gICovCisrCQlzdHJfYnVmWzFdID0gMDsKKysJCXN0cl9idWZbMl0gPSBjOworKwkJc3RyX2J1ZlszXSA9IDA7CisrCQlzdHJfYnVmWzVdID0gMDsKKysJCWZvciAoOyB3b3JrcCA8IHAgLSBjaGFyc19sZW5ndGggOykKKysJCSAgeworKwkJICAgIHdjaGFyX3QgKnJhbmdlX3N0YXJ0X2NoYXIsICpyYW5nZV9lbmRfY2hhcjsKKysKKysJCSAgICAvKiBtYXRjaCBpZiAocmFuZ2Vfc3RhcnRfY2hhciA8PSBjIDw9IHJhbmdlX2VuZF9jaGFyKS4gICovCisrCisrCQkgICAgLyogSWYgcmFuZ2Vfc3RhcnQob3IgZW5kKSA8IDAsIHdlIGFzc3VtZSAtcmFuZ2Vfc3RhcnQoZW5kKQorKwkJICAgICAgIGlzIHRoZSBvZmZzZXQgb2YgdGhlIGNvbGxhdGluZyBzeW1ib2wgd2hpY2ggaXMgc3BlY2lmaWVkCisrCQkgICAgICAgYXMgdGhlIGNoYXJhY3RlciBvZiB0aGUgcmFuZ2Ugc3RhcnQoZW5kKS4gICovCisrCisrCQkgICAgLyogcmFuZ2Vfc3RhcnQgKi8KKysJCSAgICBpZiAoKndvcmtwIDwgMCkKKysJCSAgICAgIHJhbmdlX3N0YXJ0X2NoYXIgPSBjaGFyc2V0X3RvcCAtICgqd29ya3ArKyk7CisrCQkgICAgZWxzZQorKwkJICAgICAgeworKwkJCXN0cl9idWZbMF0gPSAqd29ya3ArKzsKKysJCQlyYW5nZV9zdGFydF9jaGFyID0gc3RyX2J1ZjsKKysJCSAgICAgIH0KKysKKysJCSAgICAvKiByYW5nZV9lbmQgKi8KKysJCSAgICBpZiAoKndvcmtwIDwgMCkKKysJCSAgICAgIHJhbmdlX2VuZF9jaGFyID0gY2hhcnNldF90b3AgLSAoKndvcmtwKyspOworKwkJICAgIGVsc2UKKysJCSAgICAgIHsKKysJCQlzdHJfYnVmWzRdID0gKndvcmtwKys7CisrCQkJcmFuZ2VfZW5kX2NoYXIgPSBzdHJfYnVmICsgNDsKKysJCSAgICAgIH0KKysKKysjIGlmZGVmIF9MSUJDCisrCQkgICAgaWYgKF9fd2NzY29sbCAocmFuZ2Vfc3RhcnRfY2hhciwgc3RyX2J1ZisyKSA8PSAwCisrCQkJJiYgX193Y3Njb2xsIChzdHJfYnVmKzIsIHJhbmdlX2VuZF9jaGFyKSA8PSAwKQorKyMgZWxzZQorKwkJICAgIGlmICh3Y3Njb2xsIChyYW5nZV9zdGFydF9jaGFyLCBzdHJfYnVmKzIpIDw9IDAKKysJCQkmJiB3Y3Njb2xsIChzdHJfYnVmKzIsIHJhbmdlX2VuZF9jaGFyKSA8PSAwKQorKyMgZW5kaWYKKysJCSAgICAgIGdvdG8gY2hhcl9zZXRfbWF0Y2hlZDsKKysJCSAgfQorKwkgICAgICB9CisrCisrICAgICAgICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyPyAgKi8KKysJICAgIGZvciAoOyB3b3JrcCA8IHAgOyB3b3JrcCsrKQorKwkgICAgICBpZiAoYyA9PSAqd29ya3ApCisrCQlnb3RvIGNoYXJfc2V0X21hdGNoZWQ7CisrCisrCSAgICBuZWdhdGUgPSAhbmVnYXRlOworKworKwkgIGNoYXJfc2V0X21hdGNoZWQ6CisrCSAgICBpZiAobmVnYXRlKSBnb3RvIGZhaWw7CisrI2Vsc2UKKysgICAgICAgICAgICAvKiBDYXN0IHRvIGB1bnNpZ25lZCcgaW5zdGVhZCBvZiBgdW5zaWduZWQgY2hhcicgaW4gY2FzZSB0aGUKKysgICAgICAgICAgICAgICBiaXQgbGlzdCBpcyBhIGZ1bGwgMzIgYnl0ZXMgbG9uZy4gICovCisrCSAgICBpZiAoYyA8ICh1bnNpZ25lZCkgKCpwICogQllURVdJRFRIKQorKwkJJiYgcFsxICsgYyAvIEJZVEVXSURUSF0gJiAoMSA8PCAoYyAlIEJZVEVXSURUSCkpKQorKwkgICAgICBuZWdhdGUgPSAhbmVnYXRlOworKworKwkgICAgcCArPSAxICsgKnA7CisrCisrCSAgICBpZiAoIW5lZ2F0ZSkgZ290byBmYWlsOworKyN1bmRlZiBXT1JLX0JVRkZFUl9TSVpFCisrI2VuZGlmIC8qIFdDSEFSICovCisrCSAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICAgIGQrKzsKKysJICAgIGJyZWFrOworKwkgIH0KKysKKysKKysgICAgICAgIC8qIFRoZSBiZWdpbm5pbmcgb2YgYSBncm91cCBpcyByZXByZXNlbnRlZCBieSBzdGFydF9tZW1vcnkuCisrICAgICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgcmVnaXN0ZXIgbnVtYmVyIGluIHRoZSBuZXh0IGJ5dGUsIGFuZCB0aGUKKysgICAgICAgICAgIG51bWJlciBvZiBncm91cHMgaW5uZXIgdG8gdGhpcyBvbmUgaW4gdGhlIG5leHQuICBUaGUgdGV4dAorKyAgICAgICAgICAgbWF0Y2hlZCB3aXRoaW4gdGhlIGdyb3VwIGlzIHJlY29yZGVkIChpbiB0aGUgaW50ZXJuYWwKKysgICAgICAgICAgIHJlZ2lzdGVycyBkYXRhIHN0cnVjdHVyZSkgdW5kZXIgdGhlIHJlZ2lzdGVyIG51bWJlci4gICovCisrICAgICAgICBjYXNlIHN0YXJ0X21lbW9yeToKKysJICBERUJVR19QUklOVDMgKCJFWEVDVVRJTkcgc3RhcnRfbWVtb3J5ICVsZCAoJWxkKTpcbiIsCisrCQkJKGxvbmcgaW50KSAqcCwgKGxvbmcgaW50KSBwWzFdKTsKKysKKysgICAgICAgICAgLyogRmluZCBvdXQgaWYgdGhpcyBncm91cCBjYW4gbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gICovCisrCSAgcDEgPSBwOwkJLyogVG8gc2VuZCB0byBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wLiAgKi8KKysKKysgICAgICAgICAgaWYgKFJFR19NQVRDSF9OVUxMX1NUUklOR19QIChyZWdfaW5mb1sqcF0pID09IE1BVENIX05VTExfVU5TRVRfVkFMVUUpCisrICAgICAgICAgICAgUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvWypwXSkKKysgICAgICAgICAgICAgID0gUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIHBlbmQsIHJlZ19pbmZvKTsKKysKKysgICAgICAgICAgLyogU2F2ZSB0aGUgcG9zaXRpb24gaW4gdGhlIHN0cmluZyB3aGVyZSB3ZSB3ZXJlIHRoZSBsYXN0IHRpbWUKKysgICAgICAgICAgICAgd2Ugd2VyZSBhdCB0aGlzIG9wZW4tZ3JvdXAgb3BlcmF0b3IgaW4gY2FzZSB0aGUgZ3JvdXAgaXMKKysgICAgICAgICAgICAgb3BlcmF0ZWQgdXBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IsIGUuZy4sIHdpdGggYChhKikqYicKKysgICAgICAgICAgICAgYWdhaW5zdCBgYWInOyB0aGVuIHdlIHdhbnQgdG8gaWdub3JlIHdoZXJlIHdlIGFyZSBub3cgaW4KKysgICAgICAgICAgICAgdGhlIHN0cmluZyBpbiBjYXNlIHRoaXMgYXR0ZW1wdCB0byBtYXRjaCBmYWlscy4gICovCisrICAgICAgICAgIG9sZF9yZWdzdGFydFsqcF0gPSBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBSRUdfVU5TRVQgKHJlZ3N0YXJ0WypwXSkgPyBkIDogcmVnc3RhcnRbKnBdCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlZ3N0YXJ0WypwXTsKKysJICBERUJVR19QUklOVDIgKCIgIG9sZF9yZWdzdGFydDogJWRcbiIsCisrCQkJIFBPSU5URVJfVE9fT0ZGU0VUIChvbGRfcmVnc3RhcnRbKnBdKSk7CisrCisrICAgICAgICAgIHJlZ3N0YXJ0WypwXSA9IGQ7CisrCSAgREVCVUdfUFJJTlQyICgiICByZWdzdGFydDogJWRcbiIsIFBPSU5URVJfVE9fT0ZGU0VUIChyZWdzdGFydFsqcF0pKTsKKysKKysgICAgICAgICAgSVNfQUNUSVZFIChyZWdfaW5mb1sqcF0pID0gMTsKKysgICAgICAgICAgTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkgPSAwOworKworKwkgIC8qIENsZWFyIHRoaXMgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSByZWdpc3RlciBhY3Rpdml0eSBzdGF0dXMuICAqLworKwkgIHNldF9yZWdzX21hdGNoZWRfZG9uZSA9IDA7CisrCisrICAgICAgICAgIC8qIFRoaXMgaXMgdGhlIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3Rlci4gICovCisrICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9ICpwOworKworKyAgICAgICAgICAvKiBJZiBub3RoaW5nIHdhcyBhY3RpdmUgYmVmb3JlLCB0aGlzIGlzIHRoZSBuZXcgbG93ZXN0IGFjdGl2ZQorKyAgICAgICAgICAgICByZWdpc3Rlci4gICovCisrICAgICAgICAgIGlmIChsb3dlc3RfYWN0aXZlX3JlZyA9PSBOT19MT1dFU1RfQUNUSVZFX1JFRykKKysgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9ICpwOworKworKyAgICAgICAgICAvKiBNb3ZlIHBhc3QgdGhlIHJlZ2lzdGVyIG51bWJlciBhbmQgaW5uZXIgZ3JvdXAgY291bnQuICAqLworKyAgICAgICAgICBwICs9IDI7CisrCSAganVzdF9wYXN0X3N0YXJ0X21lbSA9IHA7CisrCisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgLyogVGhlIHN0b3BfbWVtb3J5IG9wY29kZSByZXByZXNlbnRzIHRoZSBlbmQgb2YgYSBncm91cC4gIEl0cworKyAgICAgICAgICAgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBzdGFydF9tZW1vcnknczogdGhlIHJlZ2lzdGVyCisrICAgICAgICAgICBudW1iZXIsIGFuZCB0aGUgbnVtYmVyIG9mIGlubmVyIGdyb3Vwcy4gICovCisrCWNhc2Ugc3RvcF9tZW1vcnk6CisrCSAgREVCVUdfUFJJTlQzICgiRVhFQ1VUSU5HIHN0b3BfbWVtb3J5ICVsZCAoJWxkKTpcbiIsCisrCQkJKGxvbmcgaW50KSAqcCwgKGxvbmcgaW50KSBwWzFdKTsKKysKKysgICAgICAgICAgLyogV2UgbmVlZCB0byBzYXZlIHRoZSBzdHJpbmcgcG9zaXRpb24gdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGF0CisrICAgICAgICAgICAgIHRoaXMgY2xvc2UtZ3JvdXAgb3BlcmF0b3IgaW4gY2FzZSB0aGUgZ3JvdXAgaXMgb3BlcmF0ZWQKKysgICAgICAgICAgICAgdXBvbiBieSBhIHJlcGV0aXRpb24gb3BlcmF0b3IsIGUuZy4sIHdpdGggYCgoYSopKihiKikqKSonCisrICAgICAgICAgICAgIGFnYWluc3QgYGFiYSc7IHRoZW4gd2Ugd2FudCB0byBpZ25vcmUgd2hlcmUgd2UgYXJlIG5vdyBpbgorKyAgICAgICAgICAgICB0aGUgc3RyaW5nIGluIGNhc2UgdGhpcyBhdHRlbXB0IHRvIG1hdGNoIGZhaWxzLiAgKi8KKysgICAgICAgICAgb2xkX3JlZ2VuZFsqcF0gPSBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnBdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgID8gUkVHX1VOU0VUIChyZWdlbmRbKnBdKSA/IGQgOiByZWdlbmRbKnBdCisrCQkJICAgOiByZWdlbmRbKnBdOworKwkgIERFQlVHX1BSSU5UMiAoIiAgICAgIG9sZF9yZWdlbmQ6ICVkXG4iLAorKwkJCSBQT0lOVEVSX1RPX09GRlNFVCAob2xkX3JlZ2VuZFsqcF0pKTsKKysKKysgICAgICAgICAgcmVnZW5kWypwXSA9IGQ7CisrCSAgREVCVUdfUFJJTlQyICgiICAgICAgcmVnZW5kOiAlZFxuIiwgUE9JTlRFUl9UT19PRkZTRVQgKHJlZ2VuZFsqcF0pKTsKKysKKysgICAgICAgICAgLyogVGhpcyByZWdpc3RlciBpc24ndCBhY3RpdmUgYW55bW9yZS4gICovCisrICAgICAgICAgIElTX0FDVElWRSAocmVnX2luZm9bKnBdKSA9IDA7CisrCisrCSAgLyogQ2xlYXIgdGhpcyB3aGVuZXZlciB3ZSBjaGFuZ2UgdGhlIHJlZ2lzdGVyIGFjdGl2aXR5IHN0YXR1cy4gICovCisrCSAgc2V0X3JlZ3NfbWF0Y2hlZF9kb25lID0gMDsKKysKKysgICAgICAgICAgLyogSWYgdGhpcyB3YXMgdGhlIG9ubHkgcmVnaXN0ZXIgYWN0aXZlLCBub3RoaW5nIGlzIGFjdGl2ZQorKyAgICAgICAgICAgICBhbnltb3JlLiAgKi8KKysgICAgICAgICAgaWYgKGxvd2VzdF9hY3RpdmVfcmVnID09IGhpZ2hlc3RfYWN0aXZlX3JlZykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZyA9IE5PX0xPV0VTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gTk9fSElHSEVTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHsgLyogV2UgbXVzdCBzY2FuIGZvciB0aGUgbmV3IGhpZ2hlc3QgYWN0aXZlIHJlZ2lzdGVyLCBzaW5jZQorKyAgICAgICAgICAgICAgICAgaXQgaXNuJ3QgbmVjZXNzYXJpbHkgb25lIGxlc3MgdGhhbiBub3c6IGNvbnNpZGVyCisrICAgICAgICAgICAgICAgICAoYShiKWMoZChlKWYpZykuICBXaGVuIGdyb3VwIDMgZW5kcywgYWZ0ZXIgdGhlIGYpLCB0aGUKKysgICAgICAgICAgICAgICAgIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3RlciBpcyAxLiAgKi8KKysgICAgICAgICAgICAgIFVDSEFSX1QgciA9ICpwIC0gMTsKKysgICAgICAgICAgICAgIHdoaWxlIChyID4gMCAmJiAhSVNfQUNUSVZFIChyZWdfaW5mb1tyXSkpCisrICAgICAgICAgICAgICAgIHItLTsKKysKKysgICAgICAgICAgICAgIC8qIElmIHdlIGVuZCB1cCBhdCByZWdpc3RlciB6ZXJvLCB0aGF0IG1lYW5zIHRoYXQgd2Ugc2F2ZWQKKysgICAgICAgICAgICAgICAgIHRoZSByZWdpc3RlcnMgYXMgdGhlIHJlc3VsdCBvZiBhbiBgb25fZmFpbHVyZV9qdW1wJywgbm90CisrICAgICAgICAgICAgICAgICBhIGBzdGFydF9tZW1vcnknLCBhbmQgd2UganVtcGVkIHRvIHBhc3QgdGhlIGlubmVybW9zdAorKyAgICAgICAgICAgICAgICAgYHN0b3BfbWVtb3J5Jy4gIEZvciBleGFtcGxlLCBpbiAoKC4pKikgd2Ugc2F2ZQorKyAgICAgICAgICAgICAgICAgcmVnaXN0ZXJzIDEgYW5kIDIgYXMgYSByZXN1bHQgb2YgdGhlICosIGJ1dCB3aGVuIHdlIHBvcAorKyAgICAgICAgICAgICAgICAgYmFjayB0byB0aGUgc2Vjb25kICksIHdlIGFyZSBhdCB0aGUgc3RvcF9tZW1vcnkgMS4KKysgICAgICAgICAgICAgICAgIFRodXMsIG5vdGhpbmcgaXMgYWN0aXZlLiAgKi8KKysJICAgICAgaWYgKHIgPT0gMCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gTk9fTE9XRVNUX0FDVElWRV9SRUc7CisrICAgICAgICAgICAgICAgICAgaGlnaGVzdF9hY3RpdmVfcmVnID0gTk9fSElHSEVTVF9BQ1RJVkVfUkVHOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIGhpZ2hlc3RfYWN0aXZlX3JlZyA9IHI7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAvKiBJZiBqdXN0IGZhaWxlZCB0byBtYXRjaCBzb21ldGhpbmcgdGhpcyB0aW1lIGFyb3VuZCB3aXRoIGEKKysgICAgICAgICAgICAgZ3JvdXAgdGhhdCdzIG9wZXJhdGVkIG9uIGJ5IGEgcmVwZXRpdGlvbiBvcGVyYXRvciwgdHJ5IHRvCisrICAgICAgICAgICAgIGZvcmNlIGV4aXQgZnJvbSB0aGUgYGBsb29wJycsIGFuZCByZXN0b3JlIHRoZSByZWdpc3RlcgorKyAgICAgICAgICAgICBpbmZvcm1hdGlvbiBmb3IgdGhpcyBncm91cCB0aGF0IHdlIGhhZCBiZWZvcmUgdHJ5aW5nIHRoaXMKKysgICAgICAgICAgICAgbGFzdCBtYXRjaC4gICovCisrICAgICAgICAgIGlmICgoIU1BVENIRURfU09NRVRISU5HIChyZWdfaW5mb1sqcF0pCisrICAgICAgICAgICAgICAgfHwganVzdF9wYXN0X3N0YXJ0X21lbSA9PSBwIC0gMSkKKysJICAgICAgJiYgKHAgKyAyKSA8IHBlbmQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgYm9vbGVhbiBpc19hX2p1bXBfbiA9IGZhbHNlOworKworKyAgICAgICAgICAgICAgcDEgPSBwICsgMjsKKysgICAgICAgICAgICAgIG1jbnQgPSAwOworKyAgICAgICAgICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSsrKQorKyAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgY2FzZSBqdW1wX246CisrCQkgICAgaXNfYV9qdW1wX24gPSB0cnVlOworKyAgICAgICAgICAgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysJCSAgY2FzZSBtYXliZV9wb3BfanVtcDoKKysJCSAgY2FzZSBqdW1wOgorKwkJICBjYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrCQkgICAgaWYgKGlzX2FfanVtcF9uKQorKwkJICAgICAgcDEgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgICAgICAgICAgICAvKiBkbyBub3RoaW5nICovIDsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgICBwMSArPSBtY250OworKworKyAgICAgICAgICAgICAgLyogSWYgdGhlIG5leHQgb3BlcmF0aW9uIGlzIGEganVtcCBiYWNrd2FyZHMgaW4gdGhlIHBhdHRlcm4KKysJICAgICAgICAgdG8gYW4gb25fZmFpbHVyZV9qdW1wIHJpZ2h0IGJlZm9yZSB0aGUgc3RhcnRfbWVtb3J5CisrICAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3RvcF9tZW1vcnksIGV4aXQgZnJvbSB0aGUgbG9vcAorKyAgICAgICAgICAgICAgICAgYnkgZm9yY2luZyBhIGZhaWx1cmUgYWZ0ZXIgcHVzaGluZyBvbiB0aGUgc3RhY2sgdGhlCisrICAgICAgICAgICAgICAgICBvbl9mYWlsdXJlX2p1bXAncyBqdW1wIGluIHRoZSBwYXR0ZXJuLCBhbmQgZC4gICovCisrICAgICAgICAgICAgICBpZiAobWNudCA8IDAgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gb25fZmFpbHVyZV9qdW1wCisrICAgICAgICAgICAgICAgICAgJiYgKHJlX29wY29kZV90KSBwMVsxK09GRlNFVF9BRERSRVNTX1NJWkVdID09IHN0YXJ0X21lbW9yeQorKwkJICAmJiBwMVsyK09GRlNFVF9BRERSRVNTX1NJWkVdID09ICpwKQorKwkJeworKyAgICAgICAgICAgICAgICAgIC8qIElmIHRoaXMgZ3JvdXAgZXZlciBtYXRjaGVkIGFueXRoaW5nLCB0aGVuIHJlc3RvcmUKKysgICAgICAgICAgICAgICAgICAgICB3aGF0IGl0cyByZWdpc3RlcnMgd2VyZSBiZWZvcmUgdHJ5aW5nIHRoaXMgbGFzdAorKyAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCBtYXRjaCwgZS5nLiwgd2l0aCBgKGEqKSpiJyBhZ2FpbnN0IGBhYicgZm9yCisrICAgICAgICAgICAgICAgICAgICAgcmVnc3RhcnRbMV0sIGFuZCwgZS5nLiwgd2l0aCBgKChhKikqKGIqKSopKicKKysgICAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGBhYmEnIGZvciByZWdlbmRbM10uCisrCisrICAgICAgICAgICAgICAgICAgICAgQWxzbyByZXN0b3JlIHRoZSByZWdpc3RlcnMgZm9yIGlubmVyIGdyb3VwcyBmb3IsCisrICAgICAgICAgICAgICAgICAgICAgZS5nLiwgYCgoYSopKGIqKSkqJyBhZ2FpbnN0IGBhYmEnIChyZWdpc3RlciAzIHdvdWxkCisrICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGdldCB0cmFzaGVkKS4gICovCisrCisrICAgICAgICAgICAgICAgICAgaWYgKEVWRVJfTUFUQ0hFRF9TT01FVEhJTkcgKHJlZ19pbmZvWypwXSkpCisrCQkgICAgeworKwkJICAgICAgdW5zaWduZWQgcjsKKysKKysgICAgICAgICAgICAgICAgICAgICAgRVZFUl9NQVRDSEVEX1NPTUVUSElORyAocmVnX2luZm9bKnBdKSA9IDA7CisrCisrCQkgICAgICAvKiBSZXN0b3JlIHRoaXMgYW5kIGlubmVyIGdyb3VwcycgKGlmIGFueSkgcmVnaXN0ZXJzLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gKnA7IHIgPCAodW5zaWduZWQpICpwICsgKHVuc2lnbmVkKSAqKHAgKyAxKTsKKysJCQkgICByKyspCisrICAgICAgICAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnc3RhcnRbcl0gPSBvbGRfcmVnc3RhcnRbcl07CisrCisrICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4eCB3aHkgdGhpcyB0ZXN0PyAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfcmVnZW5kW3JdID49IHJlZ3N0YXJ0W3JdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdlbmRbcl0gPSBvbGRfcmVnZW5kW3JdOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgIH0KKysJCSAgcDErKzsKKysgICAgICAgICAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAocDEgKyBtY250LCBkLCAtMik7CisrCisrICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAvKiBNb3ZlIHBhc3QgdGhlIHJlZ2lzdGVyIG51bWJlciBhbmQgdGhlIGlubmVyIGdyb3VwIGNvdW50LiAgKi8KKysgICAgICAgICAgcCArPSAyOworKyAgICAgICAgICBicmVhazsKKysKKysKKysJLyogXDxkaWdpdD4gaGFzIGJlZW4gdHVybmVkIGludG8gYSBgZHVwbGljYXRlJyBjb21tYW5kIHdoaWNoIGlzCisrICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgbnVtZXJpYyB2YWx1ZSBvZiA8ZGlnaXQ+IGFzIHRoZSByZWdpc3RlciBudW1iZXIuICAqLworKyAgICAgICAgY2FzZSBkdXBsaWNhdGU6CisrCSAgeworKwkgICAgcmVnaXN0ZXIgY29uc3QgQ0hBUl9UICpkMiwgKmRlbmQyOworKwkgICAgaW50IHJlZ25vID0gKnArKzsgICAvKiBHZXQgd2hpY2ggcmVnaXN0ZXIgdG8gbWF0Y2ggYWdhaW5zdC4gICovCisrCSAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcgZHVwbGljYXRlICVkLlxuIiwgcmVnbm8pOworKworKwkgICAgLyogQ2FuJ3QgYmFjayByZWZlcmVuY2UgYSBncm91cCB3aGljaCB3ZSd2ZSBuZXZlciBtYXRjaGVkLiAgKi8KKysgICAgICAgICAgICBpZiAoUkVHX1VOU0VUIChyZWdzdGFydFtyZWdub10pIHx8IFJFR19VTlNFVCAocmVnZW5kW3JlZ25vXSkpCisrICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrCisrICAgICAgICAgICAgLyogV2hlcmUgaW4gaW5wdXQgdG8gdHJ5IHRvIHN0YXJ0IG1hdGNoaW5nLiAgKi8KKysgICAgICAgICAgICBkMiA9IHJlZ3N0YXJ0W3JlZ25vXTsKKysKKysgICAgICAgICAgICAvKiBXaGVyZSB0byBzdG9wIG1hdGNoaW5nOyBpZiBib3RoIHRoZSBwbGFjZSB0byBzdGFydCBhbmQKKysgICAgICAgICAgICAgICB0aGUgcGxhY2UgdG8gc3RvcCBtYXRjaGluZyBhcmUgaW4gdGhlIHNhbWUgc3RyaW5nLCB0aGVuCisrICAgICAgICAgICAgICAgc2V0IHRvIHRoZSBwbGFjZSB0byBzdG9wLCBvdGhlcndpc2UsIGZvciBub3cgaGF2ZSB0byB1c2UKKysgICAgICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBmaXJzdCBzdHJpbmcuICAqLworKworKyAgICAgICAgICAgIGRlbmQyID0gKChGSVJTVF9TVFJJTkdfUCAocmVnc3RhcnRbcmVnbm9dKQorKwkJICAgICAgPT0gRklSU1RfU1RSSU5HX1AgKHJlZ2VuZFtyZWdub10pKQorKwkJICAgICA/IHJlZ2VuZFtyZWdub10gOiBlbmRfbWF0Y2hfMSk7CisrCSAgICBmb3IgKDs7KQorKwkgICAgICB7CisrCQkvKiBJZiBuZWNlc3NhcnksIGFkdmFuY2UgdG8gbmV4dCBzZWdtZW50IGluIHJlZ2lzdGVyCisrICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLiAgKi8KKysJCXdoaWxlIChkMiA9PSBkZW5kMikKKysJCSAgeworKwkJICAgIGlmIChkZW5kMiA9PSBlbmRfbWF0Y2hfMikgYnJlYWs7CisrCQkgICAgaWYgKGRlbmQyID09IHJlZ2VuZFtyZWdub10pIGJyZWFrOworKworKyAgICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIHN0cmluZzEgPT4gYWR2YW5jZSB0byBzdHJpbmcyLiAqLworKyAgICAgICAgICAgICAgICAgICAgZDIgPSBzdHJpbmcyOworKyAgICAgICAgICAgICAgICAgICAgZGVuZDIgPSByZWdlbmRbcmVnbm9dOworKwkJICB9CisrCQkvKiBBdCBlbmQgb2YgcmVnaXN0ZXIgY29udGVudHMgPT4gc3VjY2VzcyAqLworKwkJaWYgKGQyID09IGRlbmQyKSBicmVhazsKKysKKysJCS8qIElmIG5lY2Vzc2FyeSwgYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgaW4gZGF0YS4gICovCisrCQlQUkVGRVRDSCAoKTsKKysKKysJCS8qIEhvdyBtYW55IGNoYXJhY3RlcnMgbGVmdCBpbiB0aGlzIHNlZ21lbnQgdG8gbWF0Y2guICAqLworKwkJbWNudCA9IGRlbmQgLSBkOworKworKwkJLyogV2FudCBob3cgbWFueSBjb25zZWN1dGl2ZSBjaGFyYWN0ZXJzIHdlIGNhbiBtYXRjaCBpbgorKyAgICAgICAgICAgICAgICAgICBvbmUgc2hvdCwgc28sIGlmIG5lY2Vzc2FyeSwgYWRqdXN0IHRoZSBjb3VudC4gICovCisrICAgICAgICAgICAgICAgIGlmIChtY250ID4gZGVuZDIgLSBkMikKKysJCSAgbWNudCA9IGRlbmQyIC0gZDI7CisrCisrCQkvKiBDb21wYXJlIHRoYXQgbWFueTsgZmFpbHVyZSBpZiBtaXNtYXRjaCwgZWxzZSBtb3ZlCisrICAgICAgICAgICAgICAgICAgIHBhc3QgdGhlbS4gICovCisrCQlpZiAodHJhbnNsYXRlCisrICAgICAgICAgICAgICAgICAgICA/IFBSRUZJWChiY21wX3RyYW5zbGF0ZSkgKGQsIGQyLCBtY250LCB0cmFuc2xhdGUpCisrICAgICAgICAgICAgICAgICAgICA6IG1lbWNtcCAoZCwgZDIsIG1jbnQqc2l6ZW9mKFVDSEFSX1QpKSkKKysJCSAgZ290byBmYWlsOworKwkJZCArPSBtY250LCBkMiArPSBtY250OworKworKwkJLyogRG8gdGhpcyBiZWNhdXNlIHdlJ3ZlIG1hdGNoIHNvbWUgY2hhcmFjdGVycy4gICovCisrCQlTRVRfUkVHU19NQVRDSEVEICgpOworKwkgICAgICB9CisrCSAgfQorKwkgIGJyZWFrOworKworKworKyAgICAgICAgLyogYmVnbGluZSBtYXRjaGVzIHRoZSBlbXB0eSBzdHJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nCisrICAgICAgICAgICAodW5sZXNzIGBub3RfYm9sJyBpcyBzZXQgaW4gYGJ1ZnAnKSwgYW5kLCBpZgorKyAgICAgICAgICAgYG5ld2xpbmVfYW5jaG9yJyBpcyBzZXQsIGFmdGVyIG5ld2xpbmVzLiAgKi8KKysJY2FzZSBiZWdsaW5lOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYmVnbGluZS5cbiIpOworKworKyAgICAgICAgICBpZiAoQVRfU1RSSU5HU19CRUcgKGQpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmICghYnVmcC0+bm90X2JvbCkgYnJlYWs7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICBlbHNlIGlmIChkWy0xXSA9PSAnXG4nICYmIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgLyogSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBmYWlsLiAgKi8KKysgICAgICAgICAgZ290byBmYWlsOworKworKworKyAgICAgICAgLyogZW5kbGluZSBpcyB0aGUgZHVhbCBvZiBiZWdsaW5lLiAgKi8KKysJY2FzZSBlbmRsaW5lOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgZW5kbGluZS5cbiIpOworKworKyAgICAgICAgICBpZiAoQVRfU1RSSU5HU19FTkQgKGQpKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGlmICghYnVmcC0+bm90X2VvbCkgYnJlYWs7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAvKiBXZSBoYXZlIHRvIGBgcHJlZmV0Y2gnJyB0aGUgbmV4dCBjaGFyYWN0ZXIuICAqLworKyAgICAgICAgICBlbHNlIGlmICgoZCA9PSBlbmQxID8gKnN0cmluZzIgOiAqZCkgPT0gJ1xuJworKyAgICAgICAgICAgICAgICAgICAmJiBidWZwLT5uZXdsaW5lX2FuY2hvcikKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICB9CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysJLyogTWF0Y2ggYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBkYXRhLiAgKi8KKysgICAgICAgIGNhc2UgYmVnYnVmOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgYmVnYnVmLlxuIik7CisrICAgICAgICAgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkpCisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysKKysJLyogTWF0Y2ggYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBkYXRhLiAgKi8KKysgICAgICAgIGNhc2UgZW5kYnVmOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgZW5kYnVmLlxuIik7CisrCSAgaWYgKEFUX1NUUklOR1NfRU5EIChkKSkKKysJICAgIGJyZWFrOworKyAgICAgICAgICBnb3RvIGZhaWw7CisrCisrCisrICAgICAgICAvKiBvbl9mYWlsdXJlX2tlZXBfc3RyaW5nX2p1bXAgaXMgdXNlZCB0byBvcHRpbWl6ZSBgLipcbicuICBJdAorKyAgICAgICAgICAgcHVzaGVzIE5VTEwgYXMgdGhlIHZhbHVlIGZvciB0aGUgc3RyaW5nIG9uIHRoZSBzdGFjay4gIFRoZW4KKysgICAgICAgICAgIGBwb3BfZmFpbHVyZV9wb2ludCcgd2lsbCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIGZvciB0aGUKKysgICAgICAgICAgIHN0cmluZywgaW5zdGVhZCBvZiByZXN0b3JpbmcgaXQuICBUbyBzZWUgd2h5LCBjb25zaWRlcgorKyAgICAgICAgICAgbWF0Y2hpbmcgYGZvb1xuYmFyJyBhZ2FpbnN0IGAuKlxuJy4gIFRoZSAuKiBtYXRjaGVzIHRoZSBmb287CisrICAgICAgICAgICB0aGVuIHRoZSAuIGZhaWxzIGFnYWluc3QgdGhlIFxuLiAgQnV0IHRoZSBuZXh0IHRoaW5nIHdlIHdhbnQKKysgICAgICAgICAgIHRvIGRvIGlzIG1hdGNoIHRoZSBcbiBhZ2FpbnN0IHRoZSBcbjsgaWYgd2UgcmVzdG9yZWQgdGhlCisrICAgICAgICAgICBzdHJpbmcgdmFsdWUsIHdlIHdvdWxkIGJlIGJhY2sgYXQgdGhlIGZvby4KKysKKysgICAgICAgICAgIEJlY2F1c2UgdGhpcyBpcyB1c2VkIG9ubHkgaW4gc3BlY2lmaWMgY2FzZXMsIHdlIGRvbid0IG5lZWQgdG8KKysgICAgICAgICAgIGNoZWNrIGFsbCB0aGUgdGhpbmdzIHRoYXQgYG9uX2ZhaWx1cmVfanVtcCcgZG9lcywgdG8gbWFrZQorKyAgICAgICAgICAgc3VyZSB0aGUgcmlnaHQgdGhpbmdzIGdldCBzYXZlZCBvbiB0aGUgc3RhY2suICBIZW5jZSB3ZSBkb24ndAorKyAgICAgICAgICAgc2hhcmUgaXRzIGNvZGUuICBUaGUgb25seSByZWFzb24gdG8gcHVzaCBhbnl0aGluZyBvbiB0aGUKKysgICAgICAgICAgIHN0YWNrIGF0IGFsbCBpcyB0aGF0IG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIGNoYW5nZQorKyAgICAgICAgICAgYGFueWNoYXIncyBjb2RlIHRvIGRvIHNvbWV0aGluZyBiZXNpZGVzIGdvdG8gZmFpbCBpbiB0aGlzCisrICAgICAgICAgICBjYXNlOyB0aGF0IHNlZW1zIHdvcnNlIHRoYW4gdGhpcy4gICovCisrICAgICAgICBjYXNlIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG9uX2ZhaWx1cmVfa2VlcF9zdHJpbmdfanVtcCIpOworKworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gJXApOlxuIiwgbWNudCwgcCArIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAlZCAodG8gMHgleCk6XG4iLCBtY250LCBwICsgbWNudCk7CisrI2VuZGlmCisrCisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAocCArIG1jbnQsIE5VTEwsIC0yKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrCS8qIFVzZXMgb2Ygb25fZmFpbHVyZV9qdW1wOgorKworKyAgICAgICAgICAgRWFjaCBhbHRlcm5hdGl2ZSBzdGFydHMgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAgdGhhdCBwb2ludHMKKysgICAgICAgICAgIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgYWx0ZXJuYXRpdmUuICBFYWNoIGFsdGVybmF0aXZlCisrICAgICAgICAgICBleGNlcHQgdGhlIGxhc3QgZW5kcyB3aXRoIGEganVtcCB0aGF0IGluIGVmZmVjdCBqdW1wcyBwYXN0CisrICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgYWx0ZXJuYXRpdmVzLiAgKFRoZXkgcmVhbGx5IGp1bXAgdG8gdGhlCisrICAgICAgICAgICBlbmRpbmcganVtcCBvZiB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlLCBiZWNhdXNlIHRlbnNpb25pbmcKKysgICAgICAgICAgIHRoZXNlIGp1bXBzIGlzIGEgaGFzc2xlLikKKysKKysgICAgICAgICAgIFJlcGVhdHMgc3RhcnQgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAgdGhhdCBwb2ludHMgcGFzdCBib3RoCisrICAgICAgICAgICB0aGUgcmVwZXRpdGlvbiB0ZXh0IGFuZCBlaXRoZXIgdGhlIGZvbGxvd2luZyBqdW1wIG9yCisrICAgICAgICAgICBwb3BfZmFpbHVyZV9qdW1wIGJhY2sgdG8gdGhpcyBvbl9mYWlsdXJlX2p1bXAuICAqLworKwljYXNlIG9uX2ZhaWx1cmVfanVtcDoKKysgICAgICAgIG9uX2ZhaWx1cmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBvbl9mYWlsdXJlX2p1bXAiKTsKKysKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHApOworKyNpZmRlZiBfTElCQworKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvICVwKSIsIG1jbnQsIHAgKyBtY250KTsKKysjZWxzZQorKyAgICAgICAgICBERUJVR19QUklOVDMgKCIgJWQgKHRvIDB4JXgpIiwgbWNudCwgcCArIG1jbnQpOworKyNlbmRpZgorKworKyAgICAgICAgICAvKiBJZiB0aGlzIG9uX2ZhaWx1cmVfanVtcCBjb21lcyByaWdodCBiZWZvcmUgYSBncm91cCAoaS5lLiwKKysgICAgICAgICAgICAgdGhlIG9yaWdpbmFsICogYXBwbGllZCB0byBhIGdyb3VwKSwgc2F2ZSB0aGUgaW5mb3JtYXRpb24KKysgICAgICAgICAgICAgZm9yIHRoYXQgZ3JvdXAgYW5kIGFsbCBpbm5lciBvbmVzLCBzbyB0aGF0IGlmIHdlIGZhaWwgYmFjaworKyAgICAgICAgICAgICB0byB0aGlzIHBvaW50LCB0aGUgZ3JvdXAncyBpbmZvcm1hdGlvbiB3aWxsIGJlIGNvcnJlY3QuCisrICAgICAgICAgICAgIEZvciBleGFtcGxlLCBpbiBcKGEqXCkqXDEsIHdlIG5lZWQgdGhlIHByZWNlZGluZyBncm91cCwKKysgICAgICAgICAgICAgYW5kIGluIFwoenpcKGEqXCliKlwpXDIsIHdlIG5lZWQgdGhlIGlubmVyIGdyb3VwLiAgKi8KKysKKysgICAgICAgICAgLyogV2UgY2FuJ3QgdXNlIGBwJyB0byBjaGVjayBhaGVhZCBiZWNhdXNlIHdlIHB1c2gKKysgICAgICAgICAgICAgYSBmYWlsdXJlIHBvaW50IHRvIGBwICsgbWNudCcgYWZ0ZXIgd2UgZG8gdGhpcy4gICovCisrICAgICAgICAgIHAxID0gcDsKKysKKysgICAgICAgICAgLyogV2UgbmVlZCB0byBza2lwIG5vX29wJ3MgYmVmb3JlIHdlIGxvb2sgZm9yIHRoZQorKyAgICAgICAgICAgICBzdGFydF9tZW1vcnkgaW4gY2FzZSB0aGlzIG9uX2ZhaWx1cmVfanVtcCBpcyBoYXBwZW5pbmcgYXMKKysgICAgICAgICAgICAgdGhlIHJlc3VsdCBvZiBhIGNvbXBsZXRlZCBzdWNjZWVkX24sIGFzIGluIFwoYVwpXHsxLDNcfWJcMQorKyAgICAgICAgICAgICBhZ2FpbnN0IGFiYS4gICovCisrICAgICAgICAgIHdoaWxlIChwMSA8IHBlbmQgJiYgKHJlX29wY29kZV90KSAqcDEgPT0gbm9fb3ApCisrICAgICAgICAgICAgcDErKzsKKysKKysgICAgICAgICAgaWYgKHAxIDwgcGVuZCAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBzdGFydF9tZW1vcnkpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgLyogV2UgaGF2ZSBhIG5ldyBoaWdoZXN0IGFjdGl2ZSByZWdpc3RlciBub3cuICBUaGlzIHdpbGwKKysgICAgICAgICAgICAgICAgIGdldCByZXNldCBhdCB0aGUgc3RhcnRfbWVtb3J5IHdlIGFyZSBhYm91dCB0byBnZXQgdG8sCisrICAgICAgICAgICAgICAgICBidXQgd2Ugd2lsbCBoYXZlIHNhdmVkIGFsbCB0aGUgcmVnaXN0ZXJzIHJlbGV2YW50IHRvCisrICAgICAgICAgICAgICAgICB0aGlzIHJlcGV0aXRpb24gb3AsIGFzIGRlc2NyaWJlZCBhYm92ZS4gICovCisrICAgICAgICAgICAgICBoaWdoZXN0X2FjdGl2ZV9yZWcgPSAqKHAxICsgMSkgKyAqKHAxICsgMik7CisrICAgICAgICAgICAgICBpZiAobG93ZXN0X2FjdGl2ZV9yZWcgPT0gTk9fTE9XRVNUX0FDVElWRV9SRUcpCisrICAgICAgICAgICAgICAgIGxvd2VzdF9hY3RpdmVfcmVnID0gKihwMSArIDEpOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiOlxuIik7CisrICAgICAgICAgIFBVU0hfRkFJTFVSRV9QT0lOVCAocCArIG1jbnQsIGQsIC0yKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrCisrICAgICAgICAvKiBBIHNtYXJ0IHJlcGVhdCBlbmRzIHdpdGggYG1heWJlX3BvcF9qdW1wJy4KKysJICAgV2UgY2hhbmdlIGl0IHRvIGVpdGhlciBgcG9wX2ZhaWx1cmVfanVtcCcgb3IgYGp1bXAnLiAgKi8KKysgICAgICAgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIG1heWJlX3BvcF9qdW1wICVkLlxuIiwgbWNudCk7CisrICAgICAgICAgIHsKKysJICAgIHJlZ2lzdGVyIFVDSEFSX1QgKnAyID0gcDsKKysKKysgICAgICAgICAgICAvKiBDb21wYXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlcGVhdCB3aXRoIHdoYXQgaW4gdGhlCisrICAgICAgICAgICAgICAgcGF0dGVybiBmb2xsb3dzIGl0cyBlbmQuIElmIHdlIGNhbiBlc3RhYmxpc2ggdGhhdCB0aGVyZQorKyAgICAgICAgICAgICAgIGlzIG5vdGhpbmcgdGhhdCB0aGV5IHdvdWxkIGJvdGggbWF0Y2gsIGkuZS4sIHRoYXQgd2UKKysgICAgICAgICAgICAgICB3b3VsZCBoYXZlIHRvIGJhY2t0cmFjayBiZWNhdXNlIG9mIChhcyBpbiwgZS5nLiwgYGEqYScpCisrICAgICAgICAgICAgICAgdGhlbiB3ZSBjYW4gY2hhbmdlIHRvIHBvcF9mYWlsdXJlX2p1bXAsIGJlY2F1c2Ugd2UnbGwKKysgICAgICAgICAgICAgICBuZXZlciBoYXZlIHRvIGJhY2t0cmFjay4KKysKKysgICAgICAgICAgICAgICBUaGlzIGlzIG5vdCB0cnVlIGluIHRoZSBjYXNlIG9mIGFsdGVybmF0aXZlczogaW4KKysgICAgICAgICAgICAgICBgKGF8YWIpKicgd2UgZG8gbmVlZCB0byBiYWNrdHJhY2sgdG8gdGhlIGBhYicgYWx0ZXJuYXRpdmUKKysgICAgICAgICAgICAgICAoZS5nLiwgaWYgdGhlIHN0cmluZyB3YXMgYGFiJykuICBCdXQgaW5zdGVhZCBvZiB0cnlpbmcgdG8KKysgICAgICAgICAgICAgICBkZXRlY3QgdGhhdCBoZXJlLCB0aGUgYWx0ZXJuYXRpdmUgaGFzIHB1dCBvbiBhIGR1bW15CisrICAgICAgICAgICAgICAgZmFpbHVyZSBwb2ludCB3aGljaCBpcyB3aGF0IHdlIHdpbGwgZW5kIHVwIHBvcHBpbmcuICAqLworKworKwkgICAgLyogU2tpcCBvdmVyIG9wZW4vY2xvc2UtZ3JvdXAgY29tbWFuZHMuCisrCSAgICAgICBJZiB3aGF0IGZvbGxvd3MgdGhpcyBsb29wIGlzIGEgLi4uKyBjb25zdHJ1Y3QsCisrCSAgICAgICBsb29rIGF0IHdoYXQgYmVnaW5zIGl0cyBib2R5LCBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8KKysJICAgICAgIG1hdGNoIGF0IGxlYXN0IG9uZSBvZiB0aGF0LiAgKi8KKysJICAgIHdoaWxlICgxKQorKwkgICAgICB7CisrCQlpZiAocDIgKyAyIDwgcGVuZAorKwkJICAgICYmICgocmVfb3Bjb2RlX3QpICpwMiA9PSBzdG9wX21lbW9yeQorKwkJCXx8IChyZV9vcGNvZGVfdCkgKnAyID09IHN0YXJ0X21lbW9yeSkpCisrCQkgIHAyICs9IDM7CisrCQllbHNlIGlmIChwMiArIDIgKyAyICogT0ZGU0VUX0FERFJFU1NfU0laRSA8IHBlbmQKKysJCQkgJiYgKHJlX29wY29kZV90KSAqcDIgPT0gZHVtbXlfZmFpbHVyZV9qdW1wKQorKwkJICBwMiArPSAyICsgMiAqIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrCQllbHNlCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCisrCSAgICBwMSA9IHAgKyBtY250OworKwkgICAgLyogcDFbMF0gLi4uIHAxWzJdIGFyZSB0aGUgYG9uX2ZhaWx1cmVfanVtcCcgY29ycmVzcG9uZGluZworKwkgICAgICAgdG8gdGhlIGBtYXliZV9maW5hbGl6ZV9qdW1wJyBvZiB0aGlzIGNhc2UuICBFeGFtaW5lIHdoYXQKKysJICAgICAgIGZvbGxvd3MuICAqLworKworKyAgICAgICAgICAgIC8qIElmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHdlIGNhbiBjaGFuZ2UuICAqLworKyAgICAgICAgICAgIGlmIChwMiA9PSBwZW5kKQorKwkgICAgICB7CisrCQkvKiBDb25zaWRlciB3aGF0IGhhcHBlbnMgd2hlbiBtYXRjaGluZyAiOlwoLipcKSIKKysJCSAgIGFnYWluc3QgIjovIi4gIEkgZG9uJ3QgcmVhbGx5IHVuZGVyc3RhbmQgdGhpcyBjb2RlCisrCQkgICB5ZXQuICAqLworKyAgCSAgICAgICAgcFstKDErT0ZGU0VUX0FERFJFU1NfU0laRSldID0gKFVDSEFSX1QpCisrCQkgIHBvcF9mYWlsdXJlX2p1bXA7CisrICAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMQorKyAgICAgICAgICAgICAgICAgICgiICBFbmQgb2YgcGF0dGVybjogY2hhbmdlIHRvIGBwb3BfZmFpbHVyZV9qdW1wJy5cbiIpOworKyAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIGVsc2UgaWYgKChyZV9vcGNvZGVfdCkgKnAyID09IGV4YWN0bgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICAgICB8fCAocmVfb3Bjb2RlX3QpICpwMiA9PSBleGFjdG5fYmluCisrI2VuZGlmCisrCQkgICAgIHx8IChidWZwLT5uZXdsaW5lX2FuY2hvciAmJiAocmVfb3Bjb2RlX3QpICpwMiA9PSBlbmRsaW5lKSkKKysJICAgICAgeworKwkJcmVnaXN0ZXIgVUNIQVJfVCBjCisrICAgICAgICAgICAgICAgICAgPSAqcDIgPT0gKFVDSEFSX1QpIGVuZGxpbmUgPyAnXG4nIDogcDJbMl07CisrCisrICAgICAgICAgICAgICAgIGlmICgoKHJlX29wY29kZV90KSBwMVsxK09GRlNFVF9BRERSRVNTX1NJWkVdID09IGV4YWN0bgorKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJICAgICB8fCAocmVfb3Bjb2RlX3QpIHAxWzErT0ZGU0VUX0FERFJFU1NfU0laRV0gPT0gZXhhY3RuX2JpbgorKyNlbmRpZgorKwkJICAgICkgJiYgcDFbMytPRkZTRVRfQUREUkVTU19TSVpFXSAhPSBjKQorKyAgICAgICAgICAgICAgICAgIHsKKysgIAkJICAgIHBbLSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSA9IChVQ0hBUl9UKQorKwkJICAgICAgcG9wX2ZhaWx1cmVfanVtcDsKKysjaWZkZWYgV0NIQVIKKysJCSAgICAgIERFQlVHX1BSSU5UMyAoIiAgJUMgIT0gJUMgPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIsCisrCQkJCSAgICAod2ludF90KSBjLAorKwkJCQkgICAgKHdpbnRfdCkgcDFbMytPRkZTRVRfQUREUkVTU19TSVpFXSk7CisrI2Vsc2UKKysJCSAgICAgIERFQlVHX1BSSU5UMyAoIiAgJWMgIT0gJWMgPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIsCisrCQkJCSAgICAoY2hhcikgYywKKysJCQkJICAgIChjaGFyKSBwMVszK09GRlNFVF9BRERSRVNTX1NJWkVdKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICB9CisrCisrI2lmbmRlZiBXQ0hBUgorKwkJZWxzZSBpZiAoKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0CisrCQkJIHx8IChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldF9ub3QpCisrCQkgIHsKKysJCSAgICBpbnQgbmVnYXRlID0gKHJlX29wY29kZV90KSBwMVszXSA9PSBjaGFyc2V0X25vdDsKKysKKysJCSAgICBpZiAoYyA8ICh1bnNpZ25lZCkgKHAxWzRdICogQllURVdJRFRIKQorKwkJCSYmIHAxWzUgKyBjIC8gQllURVdJRFRIXSAmICgxIDw8IChjICUgQllURVdJRFRIKSkpCisrCQkgICAgICBuZWdhdGUgPSAhbmVnYXRlOworKworKyAgICAgICAgICAgICAgICAgICAgLyogYG5lZ2F0ZScgaXMgZXF1YWwgdG8gMSBpZiBjIHdvdWxkIG1hdGNoLCB3aGljaCBtZWFucworKyAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgd2UgY2FuJ3QgY2hhbmdlIHRvIHBvcF9mYWlsdXJlX2p1bXAuICAqLworKwkJICAgIGlmICghbmVnYXRlKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICAgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrI2VuZGlmIC8qIG5vdCBXQ0hBUiAqLworKwkgICAgICB9CisrI2lmbmRlZiBXQ0hBUgorKyAgICAgICAgICAgIGVsc2UgaWYgKChyZV9vcGNvZGVfdCkgKnAyID09IGNoYXJzZXQpCisrCSAgICAgIHsKKysJCS8qIFdlIHdpbiBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsb29wIGlzIG5vdCBwYXJ0CisrICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjaGFyc2V0LiAgKi8KKysgICAgICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gZXhhY3RuCisrIAkJICAgICYmICEgKChpbnQpIHAyWzFdICogQllURVdJRFRIID4gKGludCkgcDFbNV0KKysgCQkJICAmJiAocDJbMiArIHAxWzVdIC8gQllURVdJRFRIXQorKyAJCQkgICAgICAmICgxIDw8IChwMVs1XSAlIEJZVEVXSURUSCkpKSkpCisrCQkgIHsKKysJCSAgICBwWy0zXSA9ICh1bnNpZ25lZCBjaGFyKSBwb3BfZmFpbHVyZV9qdW1wOworKwkJICAgIERFQlVHX1BSSU5UMSAoIiAgTm8gbWF0Y2ggPT4gcG9wX2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAgICAgICAgIH0KKysKKysJCWVsc2UgaWYgKChyZV9vcGNvZGVfdCkgcDFbM10gPT0gY2hhcnNldF9ub3QpCisrCQkgIHsKKysJCSAgICBpbnQgaWR4OworKwkJICAgIC8qIFdlIHdpbiBpZiB0aGUgY2hhcnNldF9ub3QgaW5zaWRlIHRoZSBsb29wCisrCQkgICAgICAgbGlzdHMgZXZlcnkgY2hhcmFjdGVyIGxpc3RlZCBpbiB0aGUgY2hhcnNldCBhZnRlci4gICovCisrCQkgICAgZm9yIChpZHggPSAwOyBpZHggPCAoaW50KSBwMlsxXTsgaWR4KyspCisrCQkgICAgICBpZiAoISAocDJbMiArIGlkeF0gPT0gMAorKwkJCSAgICAgfHwgKGlkeCA8IChpbnQpIHAxWzRdCisrCQkJCSAmJiAoKHAyWzIgKyBpZHhdICYgfiBwMVs1ICsgaWR4XSkgPT0gMCkpKSkKKysJCQlicmVhazsKKysKKysJCSAgICBpZiAoaWR4ID09IHAyWzFdKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICAgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrCQllbHNlIGlmICgocmVfb3Bjb2RlX3QpIHAxWzNdID09IGNoYXJzZXQpCisrCQkgIHsKKysJCSAgICBpbnQgaWR4OworKwkJICAgIC8qIFdlIHdpbiBpZiB0aGUgY2hhcnNldCBpbnNpZGUgdGhlIGxvb3AKKysJCSAgICAgICBoYXMgbm8gb3ZlcmxhcCB3aXRoIHRoZSBvbmUgYWZ0ZXIgdGhlIGxvb3AuICAqLworKwkJICAgIGZvciAoaWR4ID0gMDsKKysJCQkgaWR4IDwgKGludCkgcDJbMV0gJiYgaWR4IDwgKGludCkgcDFbNF07CisrCQkJIGlkeCsrKQorKwkJICAgICAgaWYgKChwMlsyICsgaWR4XSAmIHAxWzUgKyBpZHhdKSAhPSAwKQorKwkJCWJyZWFrOworKworKwkJICAgIGlmIChpZHggPT0gcDJbMV0gfHwgaWR4ID09IHAxWzRdKQorKyAgICAgICAgICAgICAgICAgICAgICB7CisrICAJCSAgICAgICAgcFstM10gPSAodW5zaWduZWQgY2hhcikgcG9wX2ZhaWx1cmVfanVtcDsKKysgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19QUklOVDEgKCIgIE5vIG1hdGNoID0+IHBvcF9mYWlsdXJlX2p1bXAuXG4iKTsKKysgICAgICAgICAgICAgICAgICAgICAgfQorKwkJICB9CisrCSAgICAgIH0KKysjZW5kaWYgLyogbm90IFdDSEFSICovCisrCSAgfQorKwkgIHAgLT0gT0ZGU0VUX0FERFJFU1NfU0laRTsJLyogUG9pbnQgYXQgcmVsYXRpdmUgYWRkcmVzcyBhZ2Fpbi4gICovCisrCSAgaWYgKChyZV9vcGNvZGVfdCkgcFstMV0gIT0gcG9wX2ZhaWx1cmVfanVtcCkKKysJICAgIHsKKysJICAgICAgcFstMV0gPSAoVUNIQVJfVCkganVtcDsKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIiAgTWF0Y2ggPT4ganVtcC5cbiIpOworKwkgICAgICBnb3RvIHVuY29uZGl0aW9uYWxfanVtcDsKKysJICAgIH0KKysgICAgICAgIC8qIE5vdGUgZmFsbCB0aHJvdWdoLiAgKi8KKysKKysKKysJLyogVGhlIGVuZCBvZiBhIHNpbXBsZSByZXBlYXQgaGFzIGEgcG9wX2ZhaWx1cmVfanVtcCBiYWNrIHRvCisrICAgICAgICAgICBpdHMgbWF0Y2hpbmcgb25fZmFpbHVyZV9qdW1wLCB3aGVyZSB0aGUgbGF0dGVyIHdpbGwgcHVzaCBhCisrICAgICAgICAgICBmYWlsdXJlIHBvaW50LiAgVGhlIHBvcF9mYWlsdXJlX2p1bXAgdGFrZXMgb2ZmIGZhaWx1cmUKKysgICAgICAgICAgIHBvaW50cyBwdXQgb24gYnkgdGhpcyBwb3BfZmFpbHVyZV9qdW1wJ3MgbWF0Y2hpbmcKKysgICAgICAgICAgIG9uX2ZhaWx1cmVfanVtcDsgd2UgZ290IHRocm91Z2ggdGhlIHBhdHRlcm4gdG8gaGVyZSBmcm9tIHRoZQorKyAgICAgICAgICAgbWF0Y2hpbmcgb25fZmFpbHVyZV9qdW1wLCBzbyBkaWRuJ3QgZmFpbC4gICovCisrICAgICAgICBjYXNlIHBvcF9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIHsKKysgICAgICAgICAgICAvKiBXZSBuZWVkIHRvIHBhc3Mgc2VwYXJhdGUgc3RvcmFnZSBmb3IgdGhlIGxvd2VzdCBhbmQKKysgICAgICAgICAgICAgICBoaWdoZXN0IHJlZ2lzdGVycywgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUKKysgICAgICAgICAgICAgICBhY3R1YWwgdmFsdWVzLiAgT3RoZXJ3aXNlLCB3ZSB3aWxsIHJlc3RvcmUgb25seSBvbmUKKysgICAgICAgICAgICAgICByZWdpc3RlciBmcm9tIHRoZSBzdGFjaywgc2luY2UgbG93ZXN0IHdpbGwgPT0gaGlnaGVzdCBpbgorKyAgICAgICAgICAgICAgIGBwb3BfZmFpbHVyZV9wb2ludCcuICAqLworKyAgICAgICAgICAgIGFjdGl2ZV9yZWdfdCBkdW1teV9sb3dfcmVnLCBkdW1teV9oaWdoX3JlZzsKKysgICAgICAgICAgICBVQ0hBUl9UICpwZHVtbXkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpID0gTlVMTDsKKysgICAgICAgICAgICBjb25zdCBDSEFSX1QgKnNkdW1teSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkgPSBOVUxMOworKworKyAgICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBwb3BfZmFpbHVyZV9qdW1wLlxuIik7CisrICAgICAgICAgICAgUE9QX0ZBSUxVUkVfUE9JTlQgKHNkdW1teSwgcGR1bW15LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9sb3dfcmVnLCBkdW1teV9oaWdoX3JlZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX2R1bW15LCByZWdfZHVtbXksIHJlZ19pbmZvX2R1bW15KTsKKysgICAgICAgICAgfQorKwkgIC8qIE5vdGUgZmFsbCB0aHJvdWdoLiAgKi8KKysKKysJdW5jb25kaXRpb25hbF9qdW1wOgorKyNpZmRlZiBfTElCQworKwkgIERFQlVHX1BSSU5UMiAoIlxuJXA6ICIsIHApOworKyNlbHNlCisrCSAgREVCVUdfUFJJTlQyICgiXG4weCV4OiAiLCBwKTsKKysjZW5kaWYKKysgICAgICAgICAgLyogTm90ZSBmYWxsIHRocm91Z2guICAqLworKworKyAgICAgICAgLyogVW5jb25kaXRpb25hbGx5IGp1bXAgKHdpdGhvdXQgcG9wcGluZyBhbnkgZmFpbHVyZSBwb2ludHMpLiAgKi8KKysgICAgICAgIGNhc2UganVtcDoKKysJICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcCk7CS8qIEdldCB0aGUgYW1vdW50IHRvIGp1bXAuICAqLworKyAgICAgICAgICBERUJVR19QUklOVDIgKCJFWEVDVVRJTkcganVtcCAlZCAiLCBtY250KTsKKysJICBwICs9IG1jbnQ7CQkJCS8qIERvIHRoZSBqdW1wLiAgKi8KKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiKHRvICVwKS5cbiIsIHApOworKyNlbHNlCisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIih0byAweCV4KS5cbiIsIHApOworKyNlbmRpZgorKwkgIGJyZWFrOworKworKworKyAgICAgICAgLyogV2UgbmVlZCB0aGlzIG9wY29kZSBzbyB3ZSBjYW4gZGV0ZWN0IHdoZXJlIGFsdGVybmF0aXZlcyBlbmQKKysgICAgICAgICAgIGluIGBncm91cF9tYXRjaF9udWxsX3N0cmluZ19wJyBldCBhbC4gICovCisrICAgICAgICBjYXNlIGp1bXBfcGFzdF9hbHQ6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBqdW1wX3Bhc3RfYWx0LlxuIik7CisrICAgICAgICAgIGdvdG8gdW5jb25kaXRpb25hbF9qdW1wOworKworKworKyAgICAgICAgLyogTm9ybWFsbHksIHRoZSBvbl9mYWlsdXJlX2p1bXAgcHVzaGVzIGEgZmFpbHVyZSBwb2ludCwgd2hpY2gKKysgICAgICAgICAgIHRoZW4gZ2V0cyBwb3BwZWQgYXQgcG9wX2ZhaWx1cmVfanVtcC4gIFdlIHdpbGwgZW5kIHVwIGF0CisrICAgICAgICAgICBwb3BfZmFpbHVyZV9qdW1wLCBhbHNvLCBhbmQgd2l0aCBhIHBhdHRlcm4gb2YsIHNheSwgYGErJywgd2UKKysgICAgICAgICAgIGFyZSBza2lwcGluZyBvdmVyIHRoZSBvbl9mYWlsdXJlX2p1bXAsIHNvIHdlIGhhdmUgdG8gcHVzaAorKyAgICAgICAgICAgc29tZXRoaW5nIG1lYW5pbmdsZXNzIGZvciBwb3BfZmFpbHVyZV9qdW1wIHRvIHBvcC4gICovCisrICAgICAgICBjYXNlIGR1bW15X2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGR1bW15X2ZhaWx1cmVfanVtcC5cbiIpOworKyAgICAgICAgICAvKiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1c2ggZm9yIHRoZSBzdHJpbmcgaGVyZS4gIFdoYXQKKysgICAgICAgICAgICAgdGhlIGNvZGUgYXQgYGZhaWwnIHRlc3RzIGlzIHRoZSB2YWx1ZSBmb3IgdGhlIHBhdHRlcm4uICAqLworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKE5VTEwsIE5VTEwsIC0yKTsKKysgICAgICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrCisrCisrICAgICAgICAvKiBBdCB0aGUgZW5kIG9mIGFuIGFsdGVybmF0aXZlLCB3ZSBuZWVkIHRvIHB1c2ggYSBkdW1teSBmYWlsdXJlCisrICAgICAgICAgICBwb2ludCBpbiBjYXNlIHdlIGFyZSBmb2xsb3dlZCBieSBhIGBwb3BfZmFpbHVyZV9qdW1wJywgYmVjYXVzZQorKyAgICAgICAgICAgd2UgZG9uJ3Qgd2FudCB0aGUgZmFpbHVyZSBwb2ludCBmb3IgdGhlIGFsdGVybmF0aXZlIHRvIGJlCisrICAgICAgICAgICBwb3BwZWQuICBGb3IgZXhhbXBsZSwgbWF0Y2hpbmcgYChhfGFiKSonIGFnYWluc3QgYGFhYicKKysgICAgICAgICAgIHJlcXVpcmVzIHRoYXQgd2UgbWF0Y2ggdGhlIGBhYicgYWx0ZXJuYXRpdmUuICAqLworKyAgICAgICAgY2FzZSBwdXNoX2R1bW15X2ZhaWx1cmU6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBwdXNoX2R1bW15X2ZhaWx1cmUuXG4iKTsKKysgICAgICAgICAgLyogU2VlIGNvbW1lbnRzIGp1c3QgYWJvdmUgYXQgYGR1bW15X2ZhaWx1cmVfanVtcCcgYWJvdXQgdGhlCisrICAgICAgICAgICAgIHR3byB6ZXJvZXMuICAqLworKyAgICAgICAgICBQVVNIX0ZBSUxVUkVfUE9JTlQgKE5VTEwsIE5VTEwsIC0yKTsKKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAvKiBIYXZlIHRvIHN1Y2NlZWQgbWF0Y2hpbmcgd2hhdCBmb2xsb3dzIGF0IGxlYXN0IG4gdGltZXMuCisrICAgICAgICAgICBBZnRlciB0aGF0LCBoYW5kbGUgbGlrZSBgb25fZmFpbHVyZV9qdW1wJy4gICovCisrICAgICAgICBjYXNlIHN1Y2NlZWRfbjoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVIgKG1jbnQsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIHN1Y2NlZWRfbiAlZC5cbiIsIG1jbnQpOworKworKyAgICAgICAgICBhc3NlcnQgKG1jbnQgPj0gMCk7CisrICAgICAgICAgIC8qIE9yaWdpbmFsbHksIHRoaXMgaXMgaG93IG1hbnkgdGltZXMgd2UgSEFWRSB0byBzdWNjZWVkLiAgKi8KKysgICAgICAgICAgaWYgKG1jbnQgPiAwKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBtY250LS07CisrCSAgICAgICBwICs9IE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgU1RPUkVfTlVNQkVSX0FORF9JTkNSIChwLCBtY250KTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwIC0gT0ZGU0VUX0FERFJFU1NfU0laRQorKwkJCSAgICAgLCBtY250KTsKKysjZWxzZQorKyAgICAgICAgICAgICAgIERFQlVHX1BSSU5UMyAoIiAgU2V0dGluZyAweCV4IHRvICVkLlxuIiwgcCAtIE9GRlNFVF9BRERSRVNTX1NJWkUKKysJCQkgICAgICwgbWNudCk7CisrI2VuZGlmCisrICAgICAgICAgICAgfQorKwkgIGVsc2UgaWYgKG1jbnQgPT0gMCkKKysgICAgICAgICAgICB7CisrI2lmZGVmIF9MSUJDCisrICAgICAgICAgICAgICBERUJVR19QUklOVDIgKCIgIFNldHRpbmcgdHdvIGJ5dGVzIGZyb20gJXAgdG8gbm9fb3AuXG4iLAorKwkJCSAgICBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgIERFQlVHX1BSSU5UMiAoIiAgU2V0dGluZyB0d28gYnl0ZXMgZnJvbSAweCV4IHRvIG5vX29wLlxuIiwKKysJCQkgICAgcCArIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKyNlbmRpZiAvKiBfTElCQyAqLworKworKyNpZmRlZiBXQ0hBUgorKwkgICAgICBwWzFdID0gKFVDSEFSX1QpIG5vX29wOworKyNlbHNlCisrCSAgICAgIHBbMl0gPSAoVUNIQVJfVCkgbm9fb3A7CisrICAgICAgICAgICAgICBwWzNdID0gKFVDSEFSX1QpIG5vX29wOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgICAgICAgICAgZ290byBvbl9mYWlsdXJlOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICBjYXNlIGp1bXBfbjoKKysgICAgICAgICAgRVhUUkFDVF9OVU1CRVIgKG1jbnQsIHAgKyBPRkZTRVRfQUREUkVTU19TSVpFKTsKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIGp1bXBfbiAlZC5cbiIsIG1jbnQpOworKworKyAgICAgICAgICAvKiBPcmlnaW5hbGx5LCB0aGlzIGlzIGhvdyBtYW55IHRpbWVzIHdlIENBTiBqdW1wLiAgKi8KKysgICAgICAgICAgaWYgKG1jbnQpCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgIG1jbnQtLTsKKysgICAgICAgICAgICAgICBTVE9SRV9OVU1CRVIgKHAgKyBPRkZTRVRfQUREUkVTU19TSVpFLCBtY250KTsKKysKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSwKKysJCQkgICAgIG1jbnQpOworKyNlbHNlCisrICAgICAgICAgICAgICAgREVCVUdfUFJJTlQzICgiICBTZXR0aW5nIDB4JXggdG8gJWQuXG4iLCBwICsgT0ZGU0VUX0FERFJFU1NfU0laRSwKKysJCQkgICAgIG1jbnQpOworKyNlbmRpZiAvKiBfTElCQyAqLworKwkgICAgICAgZ290byB1bmNvbmRpdGlvbmFsX2p1bXA7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAvKiBJZiBkb24ndCBoYXZlIHRvIGp1bXAgYW55IG1vcmUsIHNraXAgb3ZlciB0aGUgcmVzdCBvZiBjb21tYW5kLiAgKi8KKysJICBlbHNlCisrCSAgICBwICs9IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICBicmVhazsKKysKKysJY2FzZSBzZXRfbnVtYmVyX2F0OgorKwkgIHsKKysgICAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgc2V0X251bWJlcl9hdC5cbiIpOworKworKyAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysgICAgICAgICAgICBwMSA9IHAgKyBtY250OworKyAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwKTsKKysjaWZkZWYgX0xJQkMKKysgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgJXAgdG8gJWQuXG4iLCBwMSwgbWNudCk7CisrI2Vsc2UKKysgICAgICAgICAgICBERUJVR19QUklOVDMgKCIgIFNldHRpbmcgMHgleCB0byAlZC5cbiIsIHAxLCBtY250KTsKKysjZW5kaWYKKysJICAgIFNUT1JFX05VTUJFUiAocDEsIG1jbnQpOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICB9CisrCisrI2lmIDAKKysJLyogVGhlIERFQyBBbHBoYSBDIGNvbXBpbGVyIDMueCBnZW5lcmF0ZXMgaW5jb3JyZWN0IGNvZGUgZm9yIHRoZQorKwkgICB0ZXN0ICBXT1JEQ0hBUl9QIChkIC0gMSkgIT0gV09SRENIQVJfUCAoZCkgIGluIHRoZSBleHBhbnNpb24gb2YKKysJICAgQVRfV09SRF9CT1VOREFSWSwgc28gdGhpcyBjb2RlIGlzIGRpc2FibGVkLiAgRXhwYW5kaW5nIHRoZQorKwkgICBtYWNybyBhbmQgaW50cm9kdWNpbmcgdGVtcG9yYXJ5IHZhcmlhYmxlcyB3b3JrcyBhcm91bmQgdGhlIGJ1Zy4gICovCisrCisrCWNhc2Ugd29yZGJvdW5kOgorKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyB3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfV09SRF9CT1VOREFSWSAoZCkpCisrCSAgICBicmVhazsKKysJICBnb3RvIGZhaWw7CisrCisrCWNhc2Ugbm90d29yZGJvdW5kOgorKwkgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub3R3b3JkYm91bmQuXG4iKTsKKysJICBpZiAoQVRfV09SRF9CT1VOREFSWSAoZCkpCisrCSAgICBnb3RvIGZhaWw7CisrCSAgYnJlYWs7CisrI2Vsc2UKKysJY2FzZSB3b3JkYm91bmQ6CisrCXsKKysJICBib29sZWFuIHByZXZjaGFyLCB0aGlzY2hhcjsKKysKKysJICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGJvdW5kLlxuIik7CisrCSAgaWYgKEFUX1NUUklOR1NfQkVHIChkKSB8fCBBVF9TVFJJTkdTX0VORCAoZCkpCisrCSAgICBicmVhazsKKysKKysJICBwcmV2Y2hhciA9IFdPUkRDSEFSX1AgKGQgLSAxKTsKKysJICB0aGlzY2hhciA9IFdPUkRDSEFSX1AgKGQpOworKwkgIGlmIChwcmV2Y2hhciAhPSB0aGlzY2hhcikKKysJICAgIGJyZWFrOworKwkgIGdvdG8gZmFpbDsKKysJfQorKworKyAgICAgIGNhc2Ugbm90d29yZGJvdW5kOgorKwl7CisrCSAgYm9vbGVhbiBwcmV2Y2hhciwgdGhpc2NoYXI7CisrCisrCSAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vdHdvcmRib3VuZC5cbiIpOworKwkgIGlmIChBVF9TVFJJTkdTX0JFRyAoZCkgfHwgQVRfU1RSSU5HU19FTkQgKGQpKQorKwkgICAgZ290byBmYWlsOworKworKwkgIHByZXZjaGFyID0gV09SRENIQVJfUCAoZCAtIDEpOworKwkgIHRoaXNjaGFyID0gV09SRENIQVJfUCAoZCk7CisrCSAgaWYgKHByZXZjaGFyICE9IHRoaXNjaGFyKQorKwkgICAgZ290byBmYWlsOworKwkgIGJyZWFrOworKwl9CisrI2VuZGlmCisrCisrCWNhc2Ugd29yZGJlZzoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIHdvcmRiZWcuXG4iKTsKKysJICBpZiAoIUFUX1NUUklOR1NfRU5EIChkKSAmJiBXT1JEQ0hBUl9QIChkKQorKwkgICAgICAmJiAoQVRfU1RSSU5HU19CRUcgKGQpIHx8ICFXT1JEQ0hBUl9QIChkIC0gMSkpKQorKwkgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysJY2FzZSB3b3JkZW5kOgorKyAgICAgICAgICBERUJVR19QUklOVDEgKCJFWEVDVVRJTkcgd29yZGVuZC5cbiIpOworKwkgIGlmICghQVRfU1RSSU5HU19CRUcgKGQpICYmIFdPUkRDSEFSX1AgKGQgLSAxKQorKyAgICAgICAgICAgICAgJiYgKEFUX1NUUklOR1NfRU5EIChkKSB8fCAhV09SRENIQVJfUCAoZCkpKQorKwkgICAgYnJlYWs7CisrICAgICAgICAgIGdvdG8gZmFpbDsKKysKKysjaWZkZWYgZW1hY3MKKysgIAljYXNlIGJlZm9yZV9kb3Q6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBiZWZvcmVfZG90LlxuIik7CisrIAkgIGlmIChQVFJfQ0hBUl9QT1MgKCh1bnNpZ25lZCBjaGFyICopIGQpID49IHBvaW50KQorKyAgCSAgICBnb3RvIGZhaWw7CisrICAJICBicmVhazsKKysKKysgIAljYXNlIGF0X2RvdDoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIGF0X2RvdC5cbiIpOworKyAJICBpZiAoUFRSX0NIQVJfUE9TICgodW5zaWduZWQgY2hhciAqKSBkKSAhPSBwb2ludCkKKysgIAkgICAgZ290byBmYWlsOworKyAgCSAgYnJlYWs7CisrCisrICAJY2FzZSBhZnRlcl9kb3Q6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBhZnRlcl9kb3QuXG4iKTsKKysgICAgICAgICAgaWYgKFBUUl9DSEFSX1BPUyAoKHVuc2lnbmVkIGNoYXIgKikgZCkgPD0gcG9pbnQpCisrICAJICAgIGdvdG8gZmFpbDsKKysgIAkgIGJyZWFrOworKworKwljYXNlIHN5bnRheHNwZWM6CisrICAgICAgICAgIERFQlVHX1BSSU5UMiAoIkVYRUNVVElORyBzeW50YXhzcGVjICVkLlxuIiwgbWNudCk7CisrCSAgbWNudCA9ICpwKys7CisrCSAgZ290byBtYXRjaHN5bnRheDsKKysKKysgICAgICAgIGNhc2Ugd29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBFbWFjcyB3b3JkY2hhci5cbiIpOworKwkgIG1jbnQgPSAoaW50KSBTd29yZDsKKysgICAgICAgIG1hdGNoc3ludGF4OgorKwkgIFBSRUZFVENIICgpOworKwkgIC8qIENhbid0IHVzZSAqZCsrIGhlcmU7IFNZTlRBWCBtYXkgYmUgYW4gdW5zYWZlIG1hY3JvLiAgKi8KKysJICBkKys7CisrCSAgaWYgKFNZTlRBWCAoZFstMV0pICE9IChlbnVtIHN5bnRheGNvZGUpIG1jbnQpCisrCSAgICBnb3RvIGZhaWw7CisrICAgICAgICAgIFNFVF9SRUdTX01BVENIRUQgKCk7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugbm90c3ludGF4c3BlYzoKKysgICAgICAgICAgREVCVUdfUFJJTlQyICgiRVhFQ1VUSU5HIG5vdHN5bnRheHNwZWMgJWQuXG4iLCBtY250KTsKKysJICBtY250ID0gKnArKzsKKysJICBnb3RvIG1hdGNobm90c3ludGF4OworKworKyAgICAgICAgY2FzZSBub3R3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIEVtYWNzIG5vdHdvcmRjaGFyLlxuIik7CisrCSAgbWNudCA9IChpbnQpIFN3b3JkOworKyAgICAgICAgbWF0Y2hub3RzeW50YXg6CisrCSAgUFJFRkVUQ0ggKCk7CisrCSAgLyogQ2FuJ3QgdXNlICpkKysgaGVyZTsgU1lOVEFYIG1heSBiZSBhbiB1bnNhZmUgbWFjcm8uICAqLworKwkgIGQrKzsKKysJICBpZiAoU1lOVEFYIChkWy0xXSkgPT0gKGVudW0gc3ludGF4Y29kZSkgbWNudCkKKysJICAgIGdvdG8gZmFpbDsKKysJICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBicmVhazsKKysKKysjZWxzZSAvKiBub3QgZW1hY3MgKi8KKysJY2FzZSB3b3JkY2hhcjoKKysgICAgICAgICAgREVCVUdfUFJJTlQxICgiRVhFQ1VUSU5HIG5vbi1FbWFjcyB3b3JkY2hhci5cbiIpOworKwkgIFBSRUZFVENIICgpOworKyAgICAgICAgICBpZiAoIVdPUkRDSEFSX1AgKGQpKQorKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysJICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBkKys7CisrCSAgYnJlYWs7CisrCisrCWNhc2Ugbm90d29yZGNoYXI6CisrICAgICAgICAgIERFQlVHX1BSSU5UMSAoIkVYRUNVVElORyBub24tRW1hY3Mgbm90d29yZGNoYXIuXG4iKTsKKysJICBQUkVGRVRDSCAoKTsKKysJICBpZiAoV09SRENIQVJfUCAoZCkpCisrICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICBTRVRfUkVHU19NQVRDSEVEICgpOworKyAgICAgICAgICBkKys7CisrCSAgYnJlYWs7CisrI2VuZGlmIC8qIG5vdCBlbWFjcyAqLworKworKyAgICAgICAgZGVmYXVsdDoKKysgICAgICAgICAgYWJvcnQgKCk7CisrCX0KKysgICAgICBjb250aW51ZTsgIC8qIFN1Y2Nlc3NmdWxseSBleGVjdXRlZCBvbmUgcGF0dGVybiBjb21tYW5kOyBrZWVwIGdvaW5nLiAgKi8KKysKKysKKysgICAgLyogV2UgZ290byBoZXJlIGlmIGEgbWF0Y2hpbmcgb3BlcmF0aW9uIGZhaWxzLiAqLworKyAgICBmYWlsOgorKyAgICAgIGlmICghRkFJTF9TVEFDS19FTVBUWSAoKSkKKysJeyAvKiBBIHJlc3RhcnQgcG9pbnQgaXMga25vd24uICBSZXN0b3JlIHRvIHRoYXQgc3RhdGUuICAqLworKyAgICAgICAgICBERUJVR19QUklOVDEgKCJcbkZBSUw6XG4iKTsKKysgICAgICAgICAgUE9QX0ZBSUxVUkVfUE9JTlQgKGQsIHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlc3RfYWN0aXZlX3JlZywgaGlnaGVzdF9hY3RpdmVfcmVnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnc3RhcnQsIHJlZ2VuZCwgcmVnX2luZm8pOworKworKyAgICAgICAgICAvKiBJZiB0aGlzIGZhaWx1cmUgcG9pbnQgaXMgYSBkdW1teSwgdHJ5IHRoZSBuZXh0IG9uZS4gICovCisrICAgICAgICAgIGlmICghcCkKKysJICAgIGdvdG8gZmFpbDsKKysKKysgICAgICAgICAgLyogSWYgd2UgZmFpbGVkIHRvIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIGRvbid0IGV4YW1pbmUgKnAuICAqLworKwkgIGFzc2VydCAocCA8PSBwZW5kKTsKKysgICAgICAgICAgaWYgKHAgPCBwZW5kKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGJvb2xlYW4gaXNfYV9qdW1wX24gPSBmYWxzZTsKKysKKysgICAgICAgICAgICAgIC8qIElmIGZhaWxlZCB0byBhIGJhY2t3YXJkcyBqdW1wIHRoYXQncyBwYXJ0IG9mIGEgcmVwZXRpdGlvbgorKyAgICAgICAgICAgICAgICAgbG9vcCwgbmVlZCB0byBwb3AgdGhpcyBmYWlsdXJlIHBvaW50IGFuZCB1c2UgdGhlIG5leHQgb25lLiAgKi8KKysgICAgICAgICAgICAgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICBjYXNlIGp1bXBfbjoKKysgICAgICAgICAgICAgICAgICBpc19hX2p1bXBfbiA9IHRydWU7CisrICAgICAgICAgICAgICAgIGNhc2UgbWF5YmVfcG9wX2p1bXA6CisrICAgICAgICAgICAgICAgIGNhc2UgcG9wX2ZhaWx1cmVfanVtcDoKKysgICAgICAgICAgICAgICAgY2FzZSBqdW1wOgorKyAgICAgICAgICAgICAgICAgIHAxID0gcCArIDE7CisrICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgICAgICAgICBwMSArPSBtY250OworKworKyAgICAgICAgICAgICAgICAgIGlmICgoaXNfYV9qdW1wX24gJiYgKHJlX29wY29kZV90KSAqcDEgPT0gc3VjY2VlZF9uKQorKyAgICAgICAgICAgICAgICAgICAgICB8fCAoIWlzX2FfanVtcF9uCisrICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocmVfb3Bjb2RlX3QpICpwMSA9PSBvbl9mYWlsdXJlX2p1bXApKQorKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworKyAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorKyAgICAgICAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8gOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICBpZiAoZCA+PSBzdHJpbmcxICYmIGQgPD0gZW5kMSkKKysJICAgIGRlbmQgPSBlbmRfbWF0Y2hfMTsKKysgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICBicmVhazsgICAvKiBNYXRjaGluZyBhdCB0aGlzIHN0YXJ0aW5nIHBvaW50IHJlYWxseSBmYWlscy4gICovCisrICAgIH0gLyogZm9yICg7OykgKi8KKysKKysgIGlmIChiZXN0X3JlZ3Nfc2V0KQorKyAgICBnb3RvIHJlc3RvcmVfYmVzdF9yZWdzOworKworKyAgRlJFRV9WQVJJQUJMRVMgKCk7CisrCisrICByZXR1cm4gLTE7ICAgICAgICAgCQkJLyogRmFpbHVyZSB0byBtYXRjaC4gICovCisrfSAvKiByZV9tYXRjaF8yICovCisrDAorKy8qIFN1YnJvdXRpbmUgZGVmaW5pdGlvbnMgZm9yIHJlX21hdGNoXzIuICAqLworKworKworKy8qIFdlIGFyZSBwYXNzZWQgUCBwb2ludGluZyB0byBhIHJlZ2lzdGVyIG51bWJlciBhZnRlciBhIHN0YXJ0X21lbW9yeS4KKysKKysgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0dGVybiB1cCB0byB0aGUgY29ycmVzcG9uZGluZyBzdG9wX21lbW9yeSBjYW4KKysgICBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorKworKyAgIElmIHdlIGZpbmQgdGhlIG1hdGNoaW5nIHN0b3BfbWVtb3J5LCBzZXRzIFAgdG8gcG9pbnQgdG8gb25lIHBhc3QgaXRzIG51bWJlci4KKysgICBPdGhlcndpc2UsIHNldHMgUCB0byBhbiB1bmRlZmluZWQgYnl0ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gRU5ELgorKworKyAgIFdlIGRvbid0IGhhbmRsZSBkdXBsaWNhdGVzIHByb3Blcmx5ICh5ZXQpLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChncm91cF9tYXRjaF9udWxsX3N0cmluZ19wKSAoVUNIQVJfVCAqKnAsIFVDSEFSX1QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUZJWChyZWdpc3Rlcl9pbmZvX3R5cGUpICpyZWdfaW5mbykKKyt7CisrICBpbnQgbWNudDsKKysgIC8qIFBvaW50IHRvIGFmdGVyIHRoZSBhcmdzIHRvIHRoZSBzdGFydF9tZW1vcnkuICAqLworKyAgVUNIQVJfVCAqcDEgPSAqcCArIDI7CisrCisrICB3aGlsZSAocDEgPCBlbmQpCisrICAgIHsKKysgICAgICAvKiBTa2lwIG92ZXIgb3Bjb2RlcyB0aGF0IGNhbiBtYXRjaCBub3RoaW5nLCBhbmQgcmV0dXJuIHRydWUgb3IKKysJIGZhbHNlLCBhcyBhcHByb3ByaWF0ZSwgd2hlbiB3ZSBnZXQgdG8gb25lIHRoYXQgY2FuJ3QsIG9yIHRvIHRoZQorKyAgICAgICAgIG1hdGNoaW5nIHN0b3BfbWVtb3J5LiAgKi8KKysKKysgICAgICBzd2l0Y2ggKChyZV9vcGNvZGVfdCkgKnAxKQorKyAgICAgICAgeworKyAgICAgICAgLyogQ291bGQgYmUgZWl0aGVyIGEgbG9vcCBvciBhIHNlcmllcyBvZiBhbHRlcm5hdGl2ZXMuICAqLworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIHAxKys7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrCisrICAgICAgICAgIC8qIElmIHRoZSBuZXh0IG9wZXJhdGlvbiBpcyBub3QgYSBqdW1wIGJhY2t3YXJkcyBpbiB0aGUKKysJICAgICBwYXR0ZXJuLiAgKi8KKysKKysJICBpZiAobWNudCA+PSAwKQorKwkgICAgeworKyAgICAgICAgICAgICAgLyogR28gdGhyb3VnaCB0aGUgb25fZmFpbHVyZV9qdW1wcyBvZiB0aGUgYWx0ZXJuYXRpdmVzLAorKyAgICAgICAgICAgICAgICAgc2VlaW5nIGlmIGFueSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGNhbm5vdCBtYXRjaCBub3RoaW5nLgorKyAgICAgICAgICAgICAgICAgVGhlIGxhc3QgYWx0ZXJuYXRpdmUgc3RhcnRzIHdpdGggb25seSBhIGp1bXAsCisrICAgICAgICAgICAgICAgICB3aGVyZWFzIHRoZSByZXN0IHN0YXJ0IHdpdGggb25fZmFpbHVyZV9qdW1wIGFuZCBlbmQKKysgICAgICAgICAgICAgICAgIHdpdGggYSBqdW1wLCBlLmcuLCBoZXJlIGlzIHRoZSBwYXR0ZXJuIGZvciBgYXxifGMnOgorKworKyAgICAgICAgICAgICAgICAgL29uX2ZhaWx1cmVfanVtcC8wLzYvZXhhY3RuLzEvYS9qdW1wX3Bhc3RfYWx0LzAvNgorKyAgICAgICAgICAgICAgICAgL29uX2ZhaWx1cmVfanVtcC8wLzYvZXhhY3RuLzEvYi9qdW1wX3Bhc3RfYWx0LzAvMworKyAgICAgICAgICAgICAgICAgL2V4YWN0bi8xL2MKKysKKysgICAgICAgICAgICAgICAgIFNvLCB3ZSBoYXZlIHRvIGZpcnN0IGdvIHRocm91Z2ggdGhlIGZpcnN0IChuLTEpCisrICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZXMgYW5kIHRoZW4gZGVhbCB3aXRoIHRoZSBsYXN0IG9uZSBzZXBhcmF0ZWx5LiAgKi8KKysKKysKKysgICAgICAgICAgICAgIC8qIERlYWwgd2l0aCB0aGUgZmlyc3QgKG4tMSkgYWx0ZXJuYXRpdmVzLCB3aGljaCBzdGFydAorKyAgICAgICAgICAgICAgICAgd2l0aCBhbiBvbl9mYWlsdXJlX2p1bXAgKHNlZSBhYm92ZSkgdGhhdCBqdW1wcyB0byByaWdodAorKyAgICAgICAgICAgICAgICAgcGFzdCBhIGp1bXBfcGFzdF9hbHQuICAqLworKworKyAgICAgICAgICAgICAgd2hpbGUgKChyZV9vcGNvZGVfdCkgcDFbbWNudC0oMStPRkZTRVRfQUREUkVTU19TSVpFKV0gPT0KKysJCSAgICAganVtcF9wYXN0X2FsdCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgIC8qIGBtY250JyBob2xkcyBob3cgbWFueSBieXRlcyBsb25nIHRoZSBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgICAgICAgICAgIGlzLCBpbmNsdWRpbmcgdGhlIGVuZGluZyBganVtcF9wYXN0X2FsdCcgYW5kCisrICAgICAgICAgICAgICAgICAgICAgaXRzIG51bWJlci4gICovCisrCisrICAgICAgICAgICAgICAgICAgaWYgKCFQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChwMSwgcDEgKyBtY250IC0KKysJCQkJCQkoMSArIE9GRlNFVF9BRERSRVNTX1NJWkUpLAorKwkJCQkJCXJlZ19pbmZvKSkKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysKKysgICAgICAgICAgICAgICAgICAvKiBNb3ZlIHRvIHJpZ2h0IGFmdGVyIHRoaXMgYWx0ZXJuYXRpdmUsIGluY2x1ZGluZyB0aGUKKysJCSAgICAganVtcF9wYXN0X2FsdC4gICovCisrICAgICAgICAgICAgICAgICAgcDEgKz0gbWNudDsKKysKKysgICAgICAgICAgICAgICAgICAvKiBCcmVhayBpZiBpdCdzIHRoZSBiZWdpbm5pbmcgb2YgYW4gbi10aCBhbHRlcm5hdGl2ZQorKyAgICAgICAgICAgICAgICAgICAgIHRoYXQgZG9lc24ndCBiZWdpbiB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcC4gICovCisrICAgICAgICAgICAgICAgICAgaWYgKChyZV9vcGNvZGVfdCkgKnAxICE9IG9uX2ZhaWx1cmVfanVtcCkKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKworKwkJICAvKiBTdGlsbCBoYXZlIHRvIGNoZWNrIHRoYXQgaXQncyBub3QgYW4gbi10aAorKwkJICAgICBhbHRlcm5hdGl2ZSB0aGF0IHN0YXJ0cyB3aXRoIGFuIG9uX2ZhaWx1cmVfanVtcC4gICovCisrCQkgIHAxKys7CisrICAgICAgICAgICAgICAgICAgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IgKG1jbnQsIHAxKTsKKysgICAgICAgICAgICAgICAgICBpZiAoKHJlX29wY29kZV90KSBwMVttY250LSgxK09GRlNFVF9BRERSRVNTX1NJWkUpXSAhPQorKwkJICAgICAganVtcF9wYXN0X2FsdCkKKysgICAgICAgICAgICAgICAgICAgIHsKKysJCSAgICAgIC8qIEdldCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuLXRoIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgICAgICAgICAgICAgICAgcDEgLT0gMSArIE9GRlNFVF9BRERSRVNTX1NJWkU7CisrICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAvKiBEZWFsIHdpdGggdGhlIGxhc3QgYWx0ZXJuYXRpdmU6IGdvIGJhY2sgYW5kIGdldCBudW1iZXIKKysgICAgICAgICAgICAgICAgIG9mIHRoZSBganVtcF9wYXN0X2FsdCcganVzdCBiZWZvcmUgaXQuICBgbWNudCcgY29udGFpbnMKKysgICAgICAgICAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSIChtY250LCBwMSAtIE9GRlNFVF9BRERSRVNTX1NJWkUpOworKworKyAgICAgICAgICAgICAgaWYgKCFQUkVGSVgoYWx0X21hdGNoX251bGxfc3RyaW5nX3ApIChwMSwgcDEgKyBtY250LCByZWdfaW5mbykpCisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysKKysgICAgICAgICAgICAgIHAxICs9IG1jbnQ7CS8qIEdldCBwYXN0IHRoZSBuLXRoIGFsdGVybmF0aXZlLiAgKi8KKysgICAgICAgICAgICB9IC8qIGlmIG1jbnQgPiAwICovCisrICAgICAgICAgIGJyZWFrOworKworKworKyAgICAgICAgY2FzZSBzdG9wX21lbW9yeToKKysJICBhc3NlcnQgKHAxWzFdID09ICoqcCk7CisrICAgICAgICAgICpwID0gcDEgKyAyOworKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKysKKysKKysgICAgICAgIGRlZmF1bHQ6CisrICAgICAgICAgIGlmICghUFJFRklYKGNvbW1vbl9vcF9tYXRjaF9udWxsX3N0cmluZ19wKSAoJnAxLCBlbmQsIHJlZ19pbmZvKSkKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9CisrICAgIH0gLyogd2hpbGUgcDEgPCBlbmQgKi8KKysKKysgIHJldHVybiBmYWxzZTsKKyt9IC8qIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AgKi8KKysKKysKKysvKiBTaW1pbGFyIHRvIGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3AsIGJ1dCBkb2Vzbid0IGRlYWwgd2l0aCBhbHRlcm5hdGl2ZXM6CisrICAgSXQgZXhwZWN0cyBQIHRvIGJlIHRoZSBmaXJzdCBieXRlIG9mIGEgc2luZ2xlIGFsdGVybmF0aXZlIGFuZCBFTkQgb25lCisrICAgYnl0ZSBwYXN0IHRoZSBsYXN0LiBUaGUgYWx0ZXJuYXRpdmUgY2FuIGNvbnRhaW4gZ3JvdXBzLiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKnAsIFVDSEFSX1QgKmVuZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVGSVgocmVnaXN0ZXJfaW5mb190eXBlKSAqcmVnX2luZm8pCisreworKyAgaW50IG1jbnQ7CisrICBVQ0hBUl9UICpwMSA9IHA7CisrCisrICB3aGlsZSAocDEgPCBlbmQpCisrICAgIHsKKysgICAgICAvKiBTa2lwIG92ZXIgb3Bjb2RlcyB0aGF0IGNhbiBtYXRjaCBub3RoaW5nLCBhbmQgYnJlYWsgd2hlbiB3ZSBnZXQKKysgICAgICAgICB0byBvbmUgdGhhdCBjYW4ndC4gICovCisrCisrICAgICAgc3dpdGNoICgocmVfb3Bjb2RlX3QpICpwMSkKKysgICAgICAgIHsKKysJLyogSXQncyBhIGxvb3AuICAqLworKyAgICAgICAgY2FzZSBvbl9mYWlsdXJlX2p1bXA6CisrICAgICAgICAgIHAxKys7CisrICAgICAgICAgIEVYVFJBQ1RfTlVNQkVSX0FORF9JTkNSIChtY250LCBwMSk7CisrICAgICAgICAgIHAxICs9IG1jbnQ7CisrICAgICAgICAgIGJyZWFrOworKworKwlkZWZhdWx0OgorKyAgICAgICAgICBpZiAoIVBSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKCZwMSwgZW5kLCByZWdfaW5mbykpCisrICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworKyAgICAgICAgfQorKyAgICB9ICAvKiB3aGlsZSBwMSA8IGVuZCAqLworKworKyAgcmV0dXJuIHRydWU7CisrfSAvKiBhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcCAqLworKworKworKy8qIERlYWxzIHdpdGggdGhlIG9wcyBjb21tb24gdG8gZ3JvdXBfbWF0Y2hfbnVsbF9zdHJpbmdfcCBhbmQKKysgICBhbHRfbWF0Y2hfbnVsbF9zdHJpbmdfcC4KKysKKysgICBTZXRzIFAgdG8gb25lIGFmdGVyIHRoZSBvcCBhbmQgaXRzIGFyZ3VtZW50cywgaWYgYW55LiAgKi8KKysKKytzdGF0aWMgYm9vbGVhbgorK1BSRUZJWChjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCkgKFVDSEFSX1QgKipwLCBVQ0hBUl9UICplbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFRklYKHJlZ2lzdGVyX2luZm9fdHlwZSkgKnJlZ19pbmZvKQorK3sKKysgIGludCBtY250OworKyAgYm9vbGVhbiByZXQ7CisrICBpbnQgcmVnX25vOworKyAgVUNIQVJfVCAqcDEgPSAqcDsKKysKKysgIHN3aXRjaCAoKHJlX29wY29kZV90KSAqcDErKykKKysgICAgeworKyAgICBjYXNlIG5vX29wOgorKyAgICBjYXNlIGJlZ2xpbmU6CisrICAgIGNhc2UgZW5kbGluZToKKysgICAgY2FzZSBiZWdidWY6CisrICAgIGNhc2UgZW5kYnVmOgorKyAgICBjYXNlIHdvcmRiZWc6CisrICAgIGNhc2Ugd29yZGVuZDoKKysgICAgY2FzZSB3b3JkYm91bmQ6CisrICAgIGNhc2Ugbm90d29yZGJvdW5kOgorKyNpZmRlZiBlbWFjcworKyAgICBjYXNlIGJlZm9yZV9kb3Q6CisrICAgIGNhc2UgYXRfZG90OgorKyAgICBjYXNlIGFmdGVyX2RvdDoKKysjZW5kaWYKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBzdGFydF9tZW1vcnk6CisrICAgICAgcmVnX25vID0gKnAxOworKyAgICAgIGFzc2VydCAocmVnX25vID4gMCAmJiByZWdfbm8gPD0gTUFYX1JFR05VTSk7CisrICAgICAgcmV0ID0gUFJFRklYKGdyb3VwX21hdGNoX251bGxfc3RyaW5nX3ApICgmcDEsIGVuZCwgcmVnX2luZm8pOworKworKyAgICAgIC8qIEhhdmUgdG8gc2V0IHRoaXMgaGVyZSBpbiBjYXNlIHdlJ3JlIGNoZWNraW5nIGEgZ3JvdXAgd2hpY2gKKysgICAgICAgICBjb250YWlucyBhIGdyb3VwIGFuZCBhIGJhY2sgcmVmZXJlbmNlIHRvIGl0LiAgKi8KKysKKysgICAgICBpZiAoUkVHX01BVENIX05VTExfU1RSSU5HX1AgKHJlZ19pbmZvW3JlZ19ub10pID09IE1BVENIX05VTExfVU5TRVRfVkFMVUUpCisrICAgICAgICBSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bcmVnX25vXSkgPSByZXQ7CisrCisrICAgICAgaWYgKCFyZXQpCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIC8qIElmIHRoaXMgaXMgYW4gb3B0aW1pemVkIHN1Y2NlZWRfbiBmb3IgemVybyB0aW1lcywgbWFrZSB0aGUganVtcC4gICovCisrICAgIGNhc2UganVtcDoKKysgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgIGlmIChtY250ID49IDApCisrICAgICAgICBwMSArPSBtY250OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBzdWNjZWVkX246CisrICAgICAgLyogR2V0IHRvIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gc3VjY2VlZC4gICovCisrICAgICAgcDEgKz0gT0ZGU0VUX0FERFJFU1NfU0laRTsKKysgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKworKyAgICAgIGlmIChtY250ID09IDApCisrICAgICAgICB7CisrICAgICAgICAgIHAxIC09IDIgKiBPRkZTRVRfQUREUkVTU19TSVpFOworKyAgICAgICAgICBFWFRSQUNUX05VTUJFUl9BTkRfSU5DUiAobWNudCwgcDEpOworKyAgICAgICAgICBwMSArPSBtY250OworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBkdXBsaWNhdGU6CisrICAgICAgaWYgKCFSRUdfTUFUQ0hfTlVMTF9TVFJJTkdfUCAocmVnX2luZm9bKnAxXSkpCisrICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2Ugc2V0X251bWJlcl9hdDoKKysgICAgICBwMSArPSAyICogT0ZGU0VUX0FERFJFU1NfU0laRTsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICAvKiBBbGwgb3RoZXIgb3Bjb2RlcyBtZWFuIHdlIGNhbm5vdCBtYXRjaCB0aGUgZW1wdHkgc3RyaW5nLiAgKi8KKysgICAgICByZXR1cm4gZmFsc2U7CisrICB9CisrCisrICAqcCA9IHAxOworKyAgcmV0dXJuIHRydWU7CisrfSAvKiBjb21tb25fb3BfbWF0Y2hfbnVsbF9zdHJpbmdfcCAqLworKworKworKy8qIFJldHVybiB6ZXJvIGlmIFRSQU5TTEFURVtTMV0gYW5kIFRSQU5TTEFURVtTMl0gYXJlIGlkZW50aWNhbCBmb3IgTEVOCisrICAgYnl0ZXM7IG5vbnplcm8gb3RoZXJ3aXNlLiAgKi8KKysKKytzdGF0aWMgaW50CisrUFJFRklYKGJjbXBfdHJhbnNsYXRlKSAoY29uc3QgQ0hBUl9UICpzMSwgY29uc3QgQ0hBUl9UICpzMiwgcmVnaXN0ZXIgaW50IGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFuc2xhdGUpCisreworKyAgcmVnaXN0ZXIgY29uc3QgVUNIQVJfVCAqcDEgPSAoY29uc3QgVUNIQVJfVCAqKSBzMTsKKysgIHJlZ2lzdGVyIGNvbnN0IFVDSEFSX1QgKnAyID0gKGNvbnN0IFVDSEFSX1QgKikgczI7CisrICB3aGlsZSAobGVuKQorKyAgICB7CisrI2lmZGVmIFdDSEFSCisrICAgICAgaWYgKCgoKnAxPD0weGZmKT90cmFuc2xhdGVbKnAxKytdOipwMSsrKQorKwkgICE9ICgoKnAyPD0weGZmKT90cmFuc2xhdGVbKnAyKytdOipwMisrKSkKKysJcmV0dXJuIDE7CisrI2Vsc2UgLyogQllURSAqLworKyAgICAgIGlmICh0cmFuc2xhdGVbKnAxKytdICE9IHRyYW5zbGF0ZVsqcDIrK10pIHJldHVybiAxOworKyNlbmRpZiAvKiBXQ0hBUiAqLworKyAgICAgIGxlbi0tOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrDAorKworKyNlbHNlIC8qIG5vdCBJTlNJREVfUkVDVVJTSU9OICovCisrCisrLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisrCisrLyogcmVfY29tcGlsZV9wYXR0ZXJuIGlzIHRoZSBHTlUgcmVndWxhciBleHByZXNzaW9uIGNvbXBpbGVyOiBpdAorKyAgIGNvbXBpbGVzIFBBVFRFUk4gKG9mIGxlbmd0aCBTSVpFKSBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIEJVRlAuCisrICAgUmV0dXJucyAwIGlmIHRoZSBwYXR0ZXJuIHdhcyB2YWxpZCwgb3RoZXJ3aXNlIGFuIGVycm9yIHN0cmluZy4KKysKKysgICBBc3N1bWVzIHRoZSBgYWxsb2NhdGVkJyAoYW5kIHBlcmhhcHMgYGJ1ZmZlcicpIGFuZCBgdHJhbnNsYXRlJyBmaWVsZHMKKysgICBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuCisrCisrICAgV2UgY2FsbCByZWdleF9jb21waWxlIHRvIGRvIHRoZSBhY3R1YWwgY29tcGlsYXRpb24uICAqLworKworK2NvbnN0IGNoYXIgKgorK3JlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVybiwgc2l6ZV90IGxlbmd0aCwKKysgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCkKKyt7CisrICByZWdfZXJyY29kZV90IHJldDsKKysKKysgIC8qIEdOVSBjb2RlIGlzIHdyaXR0ZW4gdG8gYXNzdW1lIGF0IGxlYXN0IFJFX05SRUdTIHJlZ2lzdGVycyB3aWxsIGJlIHNldAorKyAgICAgKGFuZCBhdCBsZWFzdCBvbmUgZXh0cmEgd2lsbCBiZSAtMSkuICAqLworKyAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1VOQUxMT0NBVEVEOworKworKyAgLyogQW5kIEdOVSBjb2RlIGRldGVybWluZXMgd2hldGhlciBvciBub3QgdG8gZ2V0IHJlZ2lzdGVyIGluZm9ybWF0aW9uCisrICAgICBieSBwYXNzaW5nIG51bGwgZm9yIHRoZSBSRUdTIGFyZ3VtZW50IHRvIHJlX21hdGNoLCBldGMuLCBub3QgYnkKKysgICAgIHNldHRpbmcgbm9fc3ViLiAgKi8KKysgIGJ1ZnAtPm5vX3N1YiA9IDA7CisrCisrICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmUuICAqLworKyAgYnVmcC0+bmV3bGluZV9hbmNob3IgPSAxOworKworKyMgaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEpCisrICAgIHJldCA9IHdjc19yZWdleF9jb21waWxlIChwYXR0ZXJuLCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zLCBidWZwKTsKKysgIGVsc2UKKysjIGVuZGlmCisrICAgIHJldCA9IGJ5dGVfcmVnZXhfY29tcGlsZSAocGF0dGVybiwgbGVuZ3RoLCByZV9zeW50YXhfb3B0aW9ucywgYnVmcCk7CisrCisrICBpZiAoIXJldCkKKysgICAgcmV0dXJuIE5VTEw7CisrICByZXR1cm4gZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgcmV0XSk7CisrfQorKyNpZmRlZiBfTElCQworK3dlYWtfYWxpYXMgKF9fcmVfY29tcGlsZV9wYXR0ZXJuLCByZV9jb21waWxlX3BhdHRlcm4pCisrI2VuZGlmCisrDAorKy8qIEVudHJ5IHBvaW50cyBjb21wYXRpYmxlIHdpdGggNC4yIEJTRCByZWdleCBsaWJyYXJ5LiAgV2UgZG9uJ3QgZGVmaW5lCisrICAgdGhlbSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHJlcXVlc3RlZC4gICovCisrCisrI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgZGVmaW5lZCBfTElCQworKworKy8qIEJTRCBoYXMgb25lIGFuZCBvbmx5IG9uZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisrc3RhdGljIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZV9jb21wX2J1ZjsKKysKKytjaGFyICoKKysjaWZkZWYgX0xJQkMKKysvKiBNYWtlIHRoZXNlIGRlZmluaXRpb25zIHdlYWsgaW4gbGliYywgc28gUE9TSVggcHJvZ3JhbXMgY2FuIHJlZGVmaW5lCisrICAgdGhlc2UgbmFtZXMgaWYgdGhleSBkb24ndCB1c2Ugb3VyIGZ1bmN0aW9ucywgYW5kIHN0aWxsIHVzZQorKyAgIHJlZ2NvbXAvcmVnZXhlYyBiZWxvdyB3aXRob3V0IGxpbmsgZXJyb3JzLiAgKi8KKyt3ZWFrX2Z1bmN0aW9uCisrI2VuZGlmCisrcmVfY29tcCAoY29uc3QgY2hhciAqcykKKyt7CisrICByZWdfZXJyY29kZV90IHJldDsKKysKKysgIGlmICghcykKKysgICAgeworKyAgICAgIGlmICghcmVfY29tcF9idWYuYnVmZmVyKQorKwlyZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIpOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKysgICAgeworKyAgICAgIHJlX2NvbXBfYnVmLmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyAoMjAwKTsKKysgICAgICBpZiAocmVfY29tcF9idWYuYnVmZmVyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAocmVfZXJyb3JfbXNnaWRbKGludCkgUkVHX0VTUEFDRV0pOworKyAgICAgIHJlX2NvbXBfYnVmLmFsbG9jYXRlZCA9IDIwMDsKKysKKysgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jICgxIDw8IEJZVEVXSURUSCk7CisrICAgICAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKysJcmV0dXJuIChjaGFyICopIGdldHRleHQgKHJlX2Vycm9yX21zZ2lkWyhpbnQpIFJFR19FU1BBQ0VdKTsKKysgICAgfQorKworKyAgLyogU2luY2UgYHJlX2V4ZWMnIGFsd2F5cyBwYXNzZXMgTlVMTCBmb3IgdGhlIGByZWdzJyBhcmd1bWVudCwgd2UKKysgICAgIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIgZmllbGRzIHdoaWNoIGFmZmVjdCBpdC4gICovCisrCisrICAvKiBNYXRjaCBhbmNob3JzIGF0IG5ld2xpbmVzLiAgKi8KKysgIHJlX2NvbXBfYnVmLm5ld2xpbmVfYW5jaG9yID0gMTsKKysKKysjIGlmZGVmIE1CU19TVVBQT1JUCisrICBpZiAoTUJfQ1VSX01BWCAhPSAxKQorKyAgICByZXQgPSB3Y3NfcmVnZXhfY29tcGlsZSAocywgc3RybGVuIChzKSwgcmVfc3ludGF4X29wdGlvbnMsICZyZV9jb21wX2J1Zik7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXQgPSBieXRlX3JlZ2V4X2NvbXBpbGUgKHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zLCAmcmVfY29tcF9idWYpOworKworKyAgaWYgKCFyZXQpCisrICAgIHJldHVybiBOVUxMOworKworKyAgLyogWWVzLCB3ZSdyZSBkaXNjYXJkaW5nIGBjb25zdCcgaGVyZSBpZiAhSEFWRV9MSUJJTlRMLiAgKi8KKysgIHJldHVybiAoY2hhciAqKSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFsoaW50KSByZXRdKTsKKyt9CisrCisrCisraW50CisrI2lmZGVmIF9MSUJDCisrd2Vha19mdW5jdGlvbgorKyNlbmRpZgorK3JlX2V4ZWMgKGNvbnN0IGNoYXIgKnMpCisreworKyAgY29uc3QgaW50IGxlbiA9IHN0cmxlbiAocyk7CisrICByZXR1cm4KKysgICAgMCA8PSByZV9zZWFyY2ggKCZyZV9jb21wX2J1ZiwgcywgbGVuLCAwLCBsZW4sIChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICopIDApOworK30KKysKKysjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKysMCisrLyogUE9TSVguMiBmdW5jdGlvbnMuICBEb24ndCBkZWZpbmUgdGhlc2UgZm9yIEVtYWNzLiAgKi8KKysKKysjaWZuZGVmIGVtYWNzCisrCisrLyogcmVnY29tcCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcyBhIHN0cmluZyBhbmQgY29tcGlsZXMgaXQuCisrCisrICAgUFJFRyBpcyBhIHJlZ2V4X3QgKi4gIFdlIGRvIG5vdCBleHBlY3QgYW55IGZpZWxkcyB0byBiZSBpbml0aWFsaXplZCwKKysgICBzaW5jZSBQT1NJWCBzYXlzIHdlIHNob3VsZG4ndC4gIFRodXMsIHdlIHNldAorKworKyAgICAgYGJ1ZmZlcicgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm47CisrICAgICBgdXNlZCcgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjsKKysgICAgIGBzeW50YXgnIHRvIFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCBpZiB0aGUKKysgICAgICAgUkVHX0VYVEVOREVEIGJpdCBpbiBDRkxBR1MgaXMgc2V0OyBvdGhlcndpc2UsIHRvCisrICAgICAgIFJFX1NZTlRBWF9QT1NJWF9CQVNJQzsKKysgICAgIGBuZXdsaW5lX2FuY2hvcicgdG8gUkVHX05FV0xJTkUgYmVpbmcgc2V0IGluIENGTEFHUzsKKysgICAgIGBmYXN0bWFwJyB0byBhbiBhbGxvY2F0ZWQgc3BhY2UgZm9yIHRoZSBmYXN0bWFwOworKyAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIHRvIHplcm87CisrICAgICBgcmVfbnN1YicgdG8gdGhlIG51bWJlciBvZiBzdWJleHByZXNzaW9ucyBpbiBQQVRURVJOLgorKworKyAgIFBBVFRFUk4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4gc3RyaW5nLgorKworKyAgIENGTEFHUyBpcyBhIHNlcmllcyBvZiBiaXRzIHdoaWNoIGFmZmVjdCBjb21waWxhdGlvbi4KKysKKysgICAgIElmIFJFR19FWFRFTkRFRCBpcyBzZXQsIHdlIHVzZSBQT1NJWCBleHRlbmRlZCBzeW50YXg7IG90aGVyd2lzZSwgd2UKKysgICAgIHVzZSBQT1NJWCBiYXNpYyBzeW50YXguCisrCisrICAgICBJZiBSRUdfTkVXTElORSBpcyBzZXQsIHRoZW4gLiBhbmQgW14uLi5dIGRvbid0IG1hdGNoIG5ld2xpbmUuCisrICAgICBBbHNvLCByZWdleGVjIHdpbGwgdHJ5IGEgbWF0Y2ggYmVnaW5uaW5nIGFmdGVyIGV2ZXJ5IG5ld2xpbmUuCisrCisrICAgICBJZiBSRUdfSUNBU0UgaXMgc2V0LCB0aGVuIHdlIGNvbnNpZGVycyB1cHBlci0gYW5kIGxvd2VyY2FzZQorKyAgICAgdmVyc2lvbnMgb2YgbGV0dGVycyB0byBiZSBlcXVpdmFsZW50IHdoZW4gbWF0Y2hpbmcuCisrCisrICAgICBJZiBSRUdfTk9TVUIgaXMgc2V0LCB0aGVuIHdoZW4gUFJFRyBpcyBwYXNzZWQgdG8gcmVnZXhlYywgdGhhdAorKyAgICAgcm91dGluZSB3aWxsIHJlcG9ydCBvbmx5IHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIG5vdGhpbmcgYWJvdXQgdGhlCisrICAgICByZWdpc3RlcnMuCisrCisrICAgSXQgcmV0dXJucyAwIGlmIGl0IHN1Y2NlZWRzLCBub256ZXJvIGlmIGl0IGRvZXNuJ3QuICAoU2VlIHJlZ2V4LmggZm9yCisrICAgdGhlIHJldHVybiBjb2RlcyBhbmQgdGhlaXIgbWVhbmluZ3MuKSAgKi8KKysKKytpbnQKKytyZWdjb21wIChyZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgY2ZsYWdzKQorK3sKKysgIHJlZ19lcnJjb2RlX3QgcmV0OworKyAgcmVnX3N5bnRheF90IHN5bnRheAorKyAgICA9IChjZmxhZ3MgJiBSRUdfRVhURU5ERUQpID8KKysgICAgICBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQgOiBSRV9TWU5UQVhfUE9TSVhfQkFTSUM7CisrCisrICAvKiByZWdleF9jb21waWxlIHdpbGwgYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybi4gICovCisrICBwcmVnLT5idWZmZXIgPSAwOworKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKysgIHByZWctPnVzZWQgPSAwOworKworKyAgLyogVHJ5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZmFzdG1hcC4gICovCisrICBwcmVnLT5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jICgxIDw8IEJZVEVXSURUSCk7CisrCisrICBpZiAoY2ZsYWdzICYgUkVHX0lDQVNFKQorKyAgICB7CisrICAgICAgaW50IGk7CisrCisrICAgICAgcHJlZy0+dHJhbnNsYXRlCisrCT0gKFJFX1RSQU5TTEFURV9UWVBFKSBtYWxsb2MgKENIQVJfU0VUX1NJWkUKKysJCQkJICAgICAgKiBzaXplb2YgKCooUkVfVFJBTlNMQVRFX1RZUEUpMCkpOworKyAgICAgIGlmIChwcmVnLT50cmFuc2xhdGUgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiAoaW50KSBSRUdfRVNQQUNFOworKworKyAgICAgIC8qIE1hcCB1cHBlcmNhc2UgY2hhcmFjdGVycyB0byBjb3JyZXNwb25kaW5nIGxvd2VyY2FzZSBvbmVzLiAgKi8KKysgICAgICBmb3IgKGkgPSAwOyBpIDwgQ0hBUl9TRVRfU0laRTsgaSsrKQorKyAgICAgICAgcHJlZy0+dHJhbnNsYXRlW2ldID0gSVNVUFBFUiAoaSkgPyBUT0xPV0VSIChpKSA6IGk7CisrICAgIH0KKysgIGVsc2UKKysgICAgcHJlZy0+dHJhbnNsYXRlID0gTlVMTDsKKysKKysgIC8qIElmIFJFR19ORVdMSU5FIGlzIHNldCwgbmV3bGluZXMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuICAqLworKyAgaWYgKGNmbGFncyAmIFJFR19ORVdMSU5FKQorKyAgICB7IC8qIFJFR19ORVdMSU5FIGltcGxpZXMgbmVpdGhlciAuIG5vciBbXi4uLl0gbWF0Y2ggbmV3bGluZS4gICovCisrICAgICAgc3ludGF4ICY9IH5SRV9ET1RfTkVXTElORTsKKysgICAgICBzeW50YXggfD0gUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FOworKyAgICAgIC8qIEl0IGFsc28gY2hhbmdlcyB0aGUgbWF0Y2hpbmcgYmVoYXZpb3IuICAqLworKyAgICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMTsKKysgICAgfQorKyAgZWxzZQorKyAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDA7CisrCisrICBwcmVnLT5ub19zdWIgPSAhIShjZmxhZ3MgJiBSRUdfTk9TVUIpOworKworKyAgLyogUE9TSVggc2F5cyBhIG51bGwgY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuIHRlcm1pbmF0ZXMgaXQsIHNvIHdlCisrICAgICBjYW4gdXNlIHN0cmxlbiBoZXJlIGluIGNvbXBpbGluZyB0aGUgcGF0dGVybi4gICovCisrIyBpZmRlZiBNQlNfU1VQUE9SVAorKyAgaWYgKE1CX0NVUl9NQVggIT0gMSkKKysgICAgcmV0ID0gd2NzX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIHN0cmxlbiAocGF0dGVybiksIHN5bnRheCwgcHJlZyk7CisrICBlbHNlCisrIyBlbmRpZgorKyAgICByZXQgPSBieXRlX3JlZ2V4X2NvbXBpbGUgKHBhdHRlcm4sIHN0cmxlbiAocGF0dGVybiksIHN5bnRheCwgcHJlZyk7CisrCisrICAvKiBQT1NJWCBkb2Vzbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5tYXRjaGVkIG9wZW4tZ3JvdXAgYW5kIGFuCisrICAgICB1bm1hdGNoZWQgY2xvc2UtZ3JvdXA6IGJvdGggYXJlIFJFR19FUEFSRU4uICAqLworKyAgaWYgKHJldCA9PSBSRUdfRVJQQVJFTikgcmV0ID0gUkVHX0VQQVJFTjsKKysKKysgIGlmIChyZXQgPT0gUkVHX05PRVJST1IgJiYgcHJlZy0+ZmFzdG1hcCkKKysgICAgeworKyAgICAgIC8qIENvbXB1dGUgdGhlIGZhc3RtYXAgbm93LCBzaW5jZSByZWdleGVjIGNhbm5vdCBtb2RpZnkgdGhlIHBhdHRlcm4KKysJIGJ1ZmZlci4gICovCisrICAgICAgaWYgKHJlX2NvbXBpbGVfZmFzdG1hcCAocHJlZykgPT0gLTIpCisrCXsKKysJICAvKiBTb21lIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbXB1dGluZyB0aGUgZmFzdG1hcCwganVzdCBmb3JnZXQKKysJICAgICBhYm91dCBpdC4gICovCisrCSAgZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisrCSAgcHJlZy0+ZmFzdG1hcCA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuIChpbnQpIHJldDsKKyt9CisrI2lmZGVmIF9MSUJDCisrd2Vha19hbGlhcyAoX19yZWdjb21wLCByZWdjb21wKQorKyNlbmRpZgorKworKworKy8qIHJlZ2V4ZWMgc2VhcmNoZXMgZm9yIGEgZ2l2ZW4gcGF0dGVybiwgc3BlY2lmaWVkIGJ5IFBSRUcsIGluIHRoZQorKyAgIHN0cmluZyBTVFJJTkcuCisrCisrICAgSWYgTk1BVENIIGlzIHplcm8gb3IgUkVHX05PU1VCIHdhcyBzZXQgaW4gdGhlIGNmbGFncyBhcmd1bWVudCB0bworKyAgIGByZWdjb21wJywgd2UgaWdub3JlIFBNQVRDSC4gIE90aGVyd2lzZSwgd2UgYXNzdW1lIFBNQVRDSCBoYXMgYXQKKysgICBsZWFzdCBOTUFUQ0ggZWxlbWVudHMsIGFuZCB3ZSBzZXQgdGhlbSB0byB0aGUgb2Zmc2V0cyBvZiB0aGUKKysgICBjb3JyZXNwb25kaW5nIG1hdGNoZWQgc3Vic3RyaW5ncy4KKysKKysgICBFRkxBR1Mgc3BlY2lmaWVzIGBleGVjdXRpb24gZmxhZ3MnIHdoaWNoIGFmZmVjdCBtYXRjaGluZzogaWYKKysgICBSRUdfTk9UQk9MIGlzIHNldCwgdGhlbiBeIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisrICAgc3RyaW5nOyBpZiBSRUdfTk9URU9MIGlzIHNldCwgdGhlbiAkIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBlbmQuCisrCisrICAgV2UgcmV0dXJuIDAgaWYgd2UgZmluZCBhIG1hdGNoIGFuZCBSRUdfTk9NQVRDSCBpZiBub3QuICAqLworKworK2ludAorK3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IG5tYXRjaCwKKysgICAgICAgICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQorK3sKKysgIGludCByZXQ7CisrICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzIHJlZ3M7CisrICByZWdleF90IHByaXZhdGVfcHJlZzsKKysgIGludCBsZW4gPSBzdHJsZW4gKHN0cmluZyk7CisrICBib29sZWFuIHdhbnRfcmVnX2luZm8gPSAhcHJlZy0+bm9fc3ViICYmIG5tYXRjaCA+IDA7CisrCisrICBwcml2YXRlX3ByZWcgPSAqcHJlZzsKKysKKysgIHByaXZhdGVfcHJlZy5ub3RfYm9sID0gISEoZWZsYWdzICYgUkVHX05PVEJPTCk7CisrICBwcml2YXRlX3ByZWcubm90X2VvbCA9ICEhKGVmbGFncyAmIFJFR19OT1RFT0wpOworKworKyAgLyogVGhlIHVzZXIgaGFzIHRvbGQgdXMgZXhhY3RseSBob3cgbWFueSByZWdpc3RlcnMgdG8gcmV0dXJuCisrICAgICBpbmZvcm1hdGlvbiBhYm91dCwgdmlhIGBubWF0Y2gnLiAgV2UgaGF2ZSB0byBwYXNzIHRoYXQgb24gdG8gdGhlCisrICAgICBtYXRjaGluZyByb3V0aW5lcy4gICovCisrICBwcml2YXRlX3ByZWcucmVnc19hbGxvY2F0ZWQgPSBSRUdTX0ZJWEVEOworKworKyAgaWYgKHdhbnRfcmVnX2luZm8pCisrICAgIHsKKysgICAgICByZWdzLm51bV9yZWdzID0gbm1hdGNoOworKyAgICAgIHJlZ3Muc3RhcnQgPSBUQUxMT0MgKG5tYXRjaCAqIDIsIHJlZ29mZl90KTsKKysgICAgICBpZiAocmVncy5zdGFydCA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIChpbnQpIFJFR19OT01BVENIOworKyAgICAgIHJlZ3MuZW5kID0gcmVncy5zdGFydCArIG5tYXRjaDsKKysgICAgfQorKworKyAgLyogUGVyZm9ybSB0aGUgc2VhcmNoaW5nIG9wZXJhdGlvbi4gICovCisrICByZXQgPSByZV9zZWFyY2ggKCZwcml2YXRlX3ByZWcsIHN0cmluZywgbGVuLAorKyAgICAgICAgICAgICAgICAgICAvKiBzdGFydDogKi8gMCwgLyogcmFuZ2U6ICovIGxlbiwKKysgICAgICAgICAgICAgICAgICAgd2FudF9yZWdfaW5mbyA/ICZyZWdzIDogKHN0cnVjdCByZV9yZWdpc3RlcnMgKikgMCk7CisrCisrICAvKiBDb3B5IHRoZSByZWdpc3RlciBpbmZvcm1hdGlvbiB0byB0aGUgUE9TSVggc3RydWN0dXJlLiAgKi8KKysgIGlmICh3YW50X3JlZ19pbmZvKQorKyAgICB7CisrICAgICAgaWYgKHJldCA+PSAwKQorKyAgICAgICAgeworKyAgICAgICAgICB1bnNpZ25lZCByOworKworKyAgICAgICAgICBmb3IgKHIgPSAwOyByIDwgbm1hdGNoOyByKyspCisrICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgcG1hdGNoW3JdLnJtX3NvID0gcmVncy5zdGFydFtyXTsKKysgICAgICAgICAgICAgIHBtYXRjaFtyXS5ybV9lbyA9IHJlZ3MuZW5kW3JdOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAvKiBJZiB3ZSBuZWVkZWQgdGhlIHRlbXBvcmFyeSByZWdpc3RlciBpbmZvLCBmcmVlIHRoZSBzcGFjZSBub3cuICAqLworKyAgICAgIGZyZWUgKHJlZ3Muc3RhcnQpOworKyAgICB9CisrCisrICAvKiBXZSB3YW50IHplcm8gcmV0dXJuIHRvIG1lYW4gc3VjY2VzcywgdW5saWtlIGByZV9zZWFyY2gnLiAgKi8KKysgIHJldHVybiByZXQgPj0gMCA/IChpbnQpIFJFR19OT0VSUk9SIDogKGludCkgUkVHX05PTUFUQ0g7CisrfQorKyNpZmRlZiBfTElCQworKy8qIEVHTElCQzogVGhpcyBpcyBoYW5kbGVkIGluIHJlZ2V4ZWMtY29tcGF0LmMuICAqLworKy8qd2Vha19hbGlhcyAoX19yZWdleGVjLCByZWdleGVjKSovCisrI2luY2x1ZGUgInJlZ2V4ZWMtY29tcGF0LmMiCisrI2VuZGlmCisrCisrCisrLyogUmV0dXJucyBhIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhbiBlcnJvciBjb2RlLCBFUlJDT0RFLCByZXR1cm5lZAorKyAgIGZyb20gZWl0aGVyIHJlZ2NvbXAgb3IgcmVnZXhlYy4gICBXZSBkb24ndCB1c2UgUFJFRyBoZXJlLiAgKi8KKysKKytzaXplX3QKKytyZWdlcnJvciAoaW50IGVycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKnByZWcgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKyAgICAgICAgICBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKKyt7CisrICBjb25zdCBjaGFyICptc2c7CisrICBzaXplX3QgbXNnX3NpemU7CisrCisrICBpZiAoZXJyY29kZSA8IDAKKysgICAgICB8fCBlcnJjb2RlID49IChpbnQpIChzaXplb2YgKHJlX2Vycm9yX21zZ2lkKQorKwkJCSAgIC8gc2l6ZW9mIChyZV9lcnJvcl9tc2dpZFswXSkpKQorKyAgICAvKiBPbmx5IGVycm9yIGNvZGVzIHJldHVybmVkIGJ5IHRoZSByZXN0IG9mIHRoZSBjb2RlIHNob3VsZCBiZSBwYXNzZWQKKysgICAgICAgdG8gdGhpcyByb3V0aW5lLiAgSWYgd2UgYXJlIGdpdmVuIGFueXRoaW5nIGVsc2UsIG9yIGlmIG90aGVyIHJlZ2V4CisrICAgICAgIGNvZGUgZ2VuZXJhdGVzIGFuIGludmFsaWQgZXJyb3IgY29kZSwgdGhlbiB0aGUgcHJvZ3JhbSBoYXMgYSBidWcuCisrICAgICAgIER1bXAgY29yZSBzbyB3ZSBjYW4gZml4IGl0LiAgKi8KKysgICAgYWJvcnQgKCk7CisrCisrICBtc2cgPSBnZXR0ZXh0IChyZV9lcnJvcl9tc2dpZFtlcnJjb2RlXSk7CisrCisrICBtc2dfc2l6ZSA9IHN0cmxlbiAobXNnKSArIDE7IC8qIEluY2x1ZGVzIHRoZSBudWxsLiAgKi8KKysKKysgIGlmIChlcnJidWZfc2l6ZSAhPSAwKQorKyAgICB7CisrICAgICAgaWYgKG1zZ19zaXplID4gZXJyYnVmX3NpemUpCisrICAgICAgICB7CisrI2lmIGRlZmluZWQgSEFWRV9NRU1QQ1BZIHx8IGRlZmluZWQgX0xJQkMKKysJICAqKChjaGFyICopIG1lbXBjcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpKSA9ICdcMCc7CisrI2Vsc2UKKysgICAgICAgICAgbWVtY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKTsKKysgICAgICAgICAgZXJyYnVmW2VycmJ1Zl9zaXplIC0gMV0gPSAwOworKyNlbmRpZgorKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIG1zZ19zaXplKTsKKysgICAgfQorKworKyAgcmV0dXJuIG1zZ19zaXplOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlZ2Vycm9yLCByZWdlcnJvcikKKysjZW5kaWYKKysKKysKKysvKiBGcmVlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzcGFjZSB1c2VkIGJ5IFBSRUcuICAqLworKworK3ZvaWQKKytyZWdmcmVlIChyZWdleF90ICpwcmVnKQorK3sKKysgIGlmIChwcmVnLT5idWZmZXIgIT0gTlVMTCkKKysgICAgZnJlZSAocHJlZy0+YnVmZmVyKTsKKysgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisrCisrICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworKyAgcHJlZy0+dXNlZCA9IDA7CisrCisrICBpZiAocHJlZy0+ZmFzdG1hcCAhPSBOVUxMKQorKyAgICBmcmVlIChwcmVnLT5mYXN0bWFwKTsKKysgIHByZWctPmZhc3RtYXAgPSBOVUxMOworKyAgcHJlZy0+ZmFzdG1hcF9hY2N1cmF0ZSA9IDA7CisrCisrICBpZiAocHJlZy0+dHJhbnNsYXRlICE9IE5VTEwpCisrICAgIGZyZWUgKHByZWctPnRyYW5zbGF0ZSk7CisrICBwcmVnLT50cmFuc2xhdGUgPSBOVUxMOworK30KKysjaWZkZWYgX0xJQkMKKyt3ZWFrX2FsaWFzIChfX3JlZ2ZyZWUsIHJlZ2ZyZWUpCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIG5vdCBlbWFjcyAgKi8KKysKKysjZW5kaWYgLyogbm90IElOU0lERV9SRUNVUlNJT04gKi8KKysKKysMCisrI3VuZGVmIFNUT1JFX05VTUJFUgorKyN1bmRlZiBTVE9SRV9OVU1CRVJfQU5EX0lOQ1IKKysjdW5kZWYgRVhUUkFDVF9OVU1CRVIKKysjdW5kZWYgRVhUUkFDVF9OVU1CRVJfQU5EX0lOQ1IKKysKKysjdW5kZWYgREVCVUdfUFJJTlRfQ09NUElMRURfUEFUVEVSTgorKyN1bmRlZiBERUJVR19QUklOVF9ET1VCTEVfU1RSSU5HCisrCisrI3VuZGVmIElOSVRfRkFJTF9TVEFDSworKyN1bmRlZiBSRVNFVF9GQUlMX1NUQUNLCisrI3VuZGVmIERPVUJMRV9GQUlMX1NUQUNLCisrI3VuZGVmIFBVU0hfUEFUVEVSTl9PUAorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfUE9JTlRFUgorKyN1bmRlZiBQVVNIX0ZBSUxVUkVfSU5UCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9FTFQKKysjdW5kZWYgUE9QX0ZBSUxVUkVfUE9JTlRFUgorKyN1bmRlZiBQT1BfRkFJTFVSRV9JTlQKKysjdW5kZWYgUE9QX0ZBSUxVUkVfRUxUCisrI3VuZGVmIERFQlVHX1BVU0gKKysjdW5kZWYgREVCVUdfUE9QCisrI3VuZGVmIFBVU0hfRkFJTFVSRV9QT0lOVAorKyN1bmRlZiBQT1BfRkFJTFVSRV9QT0lOVAorKworKyN1bmRlZiBSRUdfVU5TRVRfVkFMVUUKKysjdW5kZWYgUkVHX1VOU0VUCisrCisrI3VuZGVmIFBBVEZFVENICisrI3VuZGVmIFBBVEZFVENIX1JBVworKyN1bmRlZiBQQVRVTkZFVENICisrI3VuZGVmIFRSQU5TTEFURQorKworKyN1bmRlZiBJTklUX0JVRl9TSVpFCisrI3VuZGVmIEdFVF9CVUZGRVJfU1BBQ0UKKysjdW5kZWYgQlVGX1BVU0gKKysjdW5kZWYgQlVGX1BVU0hfMgorKyN1bmRlZiBCVUZfUFVTSF8zCisrI3VuZGVmIFNUT1JFX0pVTVAKKysjdW5kZWYgU1RPUkVfSlVNUDIKKysjdW5kZWYgSU5TRVJUX0pVTVAKKysjdW5kZWYgSU5TRVJUX0pVTVAyCisrI3VuZGVmIEVYVEVORF9CVUZGRVIKKysjdW5kZWYgR0VUX1VOU0lHTkVEX05VTUJFUgorKyN1bmRlZiBGUkVFX1NUQUNLX1JFVFVSTgorKworKyMgdW5kZWYgUE9JTlRFUl9UT19PRkZTRVQKKysjIHVuZGVmIE1BVENISU5HX0lOX0ZSU1RfU1RSSU5HCisrIyB1bmRlZiBQUkVGRVRDSAorKyMgdW5kZWYgQVRfU1RSSU5HU19CRUcKKysjIHVuZGVmIEFUX1NUUklOR1NfRU5ECisrIyB1bmRlZiBXT1JEQ0hBUl9QCisrIyB1bmRlZiBGUkVFX1ZBUgorKyMgdW5kZWYgRlJFRV9WQVJJQUJMRVMKKysjIHVuZGVmIE5PX0hJR0hFU1RfQUNUSVZFX1JFRworKyMgdW5kZWYgTk9fTE9XRVNUX0FDVElWRV9SRUcKKysKKysjIHVuZGVmIENIQVJfVAorKyMgdW5kZWYgVUNIQVJfVAorKyMgdW5kZWYgQ09NUElMRURfQlVGRkVSX1ZBUgorKyMgdW5kZWYgT0ZGU0VUX0FERFJFU1NfU0laRQorKyMgdW5kZWYgQ0hBUl9DTEFTU19TSVpFCisrIyB1bmRlZiBQUkVGSVgKKysjIHVuZGVmIEFSR19QUkVGSVgKKysjIHVuZGVmIFBVVF9DSEFSCisrIyB1bmRlZiBCWVRFCisrIyB1bmRlZiBXQ0hBUgorKworKyMgZGVmaW5lIERFRklORURfT05DRQorZGlmZiAtLWdpdCBhL3B3ZC9NYWtlZmlsZSBiL3B3ZC9NYWtlZmlsZQoraW5kZXggN2Y2ZGUwMy4uOTE2ZDU0NiAxMDA2NDQKKy0tLSBhL3B3ZC9NYWtlZmlsZQorKysrIGIvcHdkL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3IgcHdkIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gcHdkCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitkaWZmIC0tZ2l0IGEvcmVzb2x2L01ha2VmaWxlIGIvcmVzb2x2L01ha2VmaWxlCitpbmRleCAxZGNiNzVmLi4yZTRiNjMwIDEwMDY0NAorLS0tIGEvcmVzb2x2L01ha2VmaWxlCisrKysgYi9yZXNvbHYvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciByZXNvbHYgcG9ydGlvbiBvZiB0aGUgbGlicmFyeS4KKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSByZXNvbHYKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0yNywyMSArMjksMjIgQEAgaGVhZGVycwk6PSByZXNvbHYuaCBcCisgCSAgIGFycGEvbmFtZXNlci5oIGFycGEvbmFtZXNlcl9jb21wYXQuaCBcCisgCSAgIHN5cy9iaXR5cGVzLmgKKyAKKy1yb3V0aW5lcyA6PSBoZXJyb3IgaW5ldF9hZGRyIGluZXRfbnRvcCBpbmV0X3B0b24gbnNhcF9hZGRyIHJlc19pbml0IFwKKy0JICAgIHJlc19oY29uZiByZXNfbGliYyByZXMtc3RhdGUKKytyb3V0aW5lcy0kKE9QVElPTl9FR0xJQkNfSU5FVCkgXAorKwkrPSBoZXJyb3IgaW5ldF9hZGRyIGluZXRfbnRvcCBpbmV0X3B0b24gbnNhcF9hZGRyIHJlc19pbml0IFwKKysJICAgcmVzX2hjb25mIHJlc19saWJjIHJlcy1zdGF0ZQorIAorLXRlc3RzID0gdHN0LWF0b24gdHN0LWxlYWtzIHRzdC1pbmV0X250b3AKKy14dGVzdHMgPSB0c3QtbGVha3MyCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0lORVQpICs9IHRzdC1hdG9uIHRzdC1sZWFrcyB0c3QtaW5ldF9udG9wCisreHRlc3RzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSB0c3QtbGVha3MyCisgCisgZ2VuZXJhdGUgOj0gbXRyYWNlLXRzdC1sZWFrcy5vdXQgdHN0LWxlYWtzLm10cmFjZSB0c3QtbGVha3MyLm10cmFjZQorIAorLWV4dHJhLWxpYnMgOj0gbGlicmVzb2x2IGxpYm5zc19kbnMKKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBsaWJyZXNvbHYgbGlibnNzX2RucworIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorLWV4dHJhLWxpYnMgKz0gbGliYW5sCistcm91dGluZXMgKz0gZ2FpX3NpZ3F1ZXVlCisrZXh0cmEtbGlicy0kKE9QVElPTl9FR0xJQkNfSU5FVF9BTkwpICs9IGxpYmFubAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19JTkVUKSArPSBnYWlfc2lncXVldWUKKyB0ZXN0cyArPSB0c3QtcmVzX2hjb25mX3Jlb3JkZXIKKyBlbmRpZgorLWV4dHJhLWxpYnMtb3RoZXJzID0gJChleHRyYS1saWJzKQorK2V4dHJhLWxpYnMtb3RoZXJzLXkgKz0gJChleHRyYS1saWJzLXkpCisgbGlicmVzb2x2LXJvdXRpbmVzIDo9IGdldGhuYW1hZGRyIHJlc19jb21wIHJlc19kZWJ1ZwlcCisgCQkgICAgICByZXNfZGF0YSByZXNfbWtxdWVyeSByZXNfcXVlcnkgcmVzX3NlbmQJCVwKKyAJCSAgICAgIGluZXRfbmV0X250b3AgaW5ldF9uZXRfcHRvbiBpbmV0X25ldGEgYmFzZTY0CVwKK0BAIC02MSw3ICs2NCw3IEBAIHJvdXRpbmVzICAgICAgICAgICAgICAgICs9ICQobGlibnNzX2Rucy1yb3V0aW5lcykgJChsaWJyZXNvbHYtcm91dGluZXMpCisgc3RhdGljLW9ubHktcm91dGluZXMgICAgKz0gJChsaWJuc3NfZG5zLXJvdXRpbmVzKSAkKGxpYnJlc29sdi1yb3V0aW5lcykKKyBlbmRpZgorIAorLWlmZXEgKHllc3llcywkKGJ1aWxkLXNoYXJlZCkkKGhhdmUtdGhyZWFkLWxpYnJhcnkpKQorK2lmZXEgKHllc3llc3ksJChidWlsZC1zaGFyZWQpJChoYXZlLXRocmVhZC1saWJyYXJ5KSQoT1BUSU9OX0VHTElCQ19JTkVUX0FOTCkpCisgdGVzdHM6ICQob2JqcGZ4KWdhX3Rlc3QKKyBlbmRpZgorIAorZGlmZiAtLWdpdCBhL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZSBiL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQoraW5kZXggZDBiZjBlMS4uODY1NTgwMSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9NYWtlZmlsZQorKysrIGIvc3RkaW8tY29tbW9uL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVNwZWNpZmljIG1ha2VmaWxlIGZvciBzdGRpby1jb21tb24uCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3RkaW8tY29tbW9uCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsNyArMzIsNyBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCXZmcHJpbnRmIHZwcmludGYgcHJpbnRmX2ZwIHJlZy1wcmludGYgcHJpbnRmLXBycyBwcmludGZfZnBoZXgJICAgICAgXAorIAlyZWctbW9kaWZpZXIgcmVnLXR5cGUJCQkJCQkgICAgICBcCisgCXByaW50Zl9zaXplIGZwcmludGYgcHJpbnRmIHNucHJpbnRmIHNwcmludGYgYXNwcmludGYgZHByaW50ZgkgICAgICBcCistCXZmd3ByaW50ZiB2ZnNjYW5mIHZmd3NjYW5mCQkJCQkgICAgICBcCisrCXZmc2NhbmYJCQkJCQkJCSAgICAgIFwKKyAJZnNjYW5mIHNjYW5mIHNzY2FuZgkJCQkJCSAgICAgIFwKKyAJcGVycm9yIHBzaWduYWwJCQkJCQkJICAgICAgXAorIAl0bXBmaWxlIHRtcGZpbGU2NCB0bXBuYW0gdG1wbmFtX3IgdGVtcG5hbSB0ZW1wbmFtZQkJICAgICAgXAorQEAgLTQxLDIzICs0MywzNiBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCWlzb2M5OV92c3NjYW5mCQkJCQkJCSAgICAgIFwKKyAJcHNpZ2luZm8KKyAKKy1hdXgJOj0gZXJybGlzdCBzaWdsaXN0IHByaW50Zi1wYXJzZW1iIHByaW50Zi1wYXJzZXdjIGZ4cHJpbnRmCisrIyBJZGVhbGx5LCBfaXRvd2EgYW5kIGl0b3dhLWRpZ2l0cyB3b3VsZCBiZSBpbiB0aGlzIG9wdGlvbiBncm91cCBhcworKyMgd2VsbCwgYnV0IGl0IGlzIHVzZWQgdW5jb25kaXRpb25hbGx5IGJ5IHByaW50Zl9mcCBhbmQgcHJpbnRmX2ZwaGV4LAorKyMgYW5kIGl0IGRpZG4ndCBzZWVtIHN0cmFpZ2h0Zm9yd2FyZCB0byBkaXNlbnRhbmdsZSBpdC4KKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCSs9IHZmd3ByaW50ZiB2ZndzY2FuZgorKworK2F1eAk6PSBlcnJsaXN0IHNpZ2xpc3QgcHJpbnRmLXBhcnNlbWIgZnhwcmludGYKKythdXgtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0gcHJpbnRmLXBhcnNld2MKKyAKKyB0ZXN0cyA6PSB0c3RzY2FuZiB0ZXN0X3Jkd3IgdGVzdC1wb3BlbiB0c3RnZXRsbiB0ZXN0LWZzZWVrIFwKKyAJIHRlbXB0ZXN0IHRzdC1maWxlbm8gdGVzdC1md3JpdGUgdHN0LXVuZ2V0YyB0c3QtZmVycm9yIFwKKyAJIHhidWcgZXJybm9idWcgXAorIAkgYnVnMSBidWcyIGJ1ZzMgYnVnNCBidWc1IGJ1ZzYgYnVnNyBidWc4IGJ1ZzkgYnVnMTAgYnVnMTEgYnVnMTIgYnVnMTMgXAorLQkgdGZmb3JtYXQgdGlmb3JtYXQgdGxsZm9ybWF0IHRzdGRpb21pc2MgdHN0LXByaW50ZnN6IHRzdC13Yy1wcmludGYgXAorKwkgdGZmb3JtYXQgdGlmb3JtYXQgdGxsZm9ybWF0IHRzdGRpb21pc2MgdHN0LXByaW50ZnN6IFwKKyAJIHNjYW5mMSBzY2FuZjIgc2NhbmYzIHNjYW5mNCBzY2FuZjUgc2NhbmY3IHNjYW5mOCBzY2FuZjkgc2NhbmYxMCBcCistCSBzY2FuZjExIHNjYW5mMTIgdHN0LXRtcG5hbSB0c3QtY29va2llIHRzdC1vYnByaW50ZiB0c3Qtc3NjYW5mIFwKKy0JIHRzdC1zd3ByaW50ZiB0c3QtZnNlZWsgdHN0LWZtZW1vcGVuIHRlc3QtdmZwcmludGYgdHN0LWdldHMgXAorLQkgdHN0LXBlcnJvciB0c3Qtc3ByaW50ZiB0c3Qtcm5kc2VlayB0c3QtZmRvcGVuIHRzdC1mcGhleCBidWcxNCBcCisrCSBzY2FuZjExIHNjYW5mMTIgdHN0LXRtcG5hbSB0c3QtY29va2llIHRzdC1vYnByaW50ZiBcCisrCSB0c3QtZnNlZWsgdHN0LWZtZW1vcGVuIHRzdC1nZXRzIFwKKysJIHRzdC1zcHJpbnRmIHRzdC1ybmRzZWVrIHRzdC1mZG9wZW4gdHN0LWZwaGV4IFwKKyAJIHRzdC1wb3BlbiB0c3QtdW5sb2NrZWRpbyB0c3QtZm1lbW9wZW4yIHRzdC1wdXQtZXJyb3IgdHN0LWZnZXRzIFwKKy0JIHRzdC1md3JpdGUgYnVnMTYgYnVnMTcgdHN0LXN3c2NhbmYgdHN0LXNwcmludGYyIGJ1ZzE4IGJ1ZzE4YSBcCistCSBidWcxOSBidWcxOWEgdHN0LXBvcGVuMiBzY2FuZjEzIHNjYW5mMTQgc2NhbmYxNSBidWcyMCBidWcyMSBidWcyMiBcCistCSBzY2FuZjE2IHNjYW5mMTcgdHN0LXNldHZidWYxIHRzdC1ncm91cGluZyBidWcyMyBidWcyNCBcCistCSBidWctdmZwcmludGYtbmFyZ3MgdHN0LWxvbmctZGJsLWZwaGV4IHRzdC1mcGhleC13aWRlIHRzdC1zcHJpbnRmMyBcCisrCSB0c3QtZndyaXRlIGJ1ZzE2IGJ1ZzE3IHRzdC1zcHJpbnRmMiBidWcxOCBcCisrCSBidWcxOSB0c3QtcG9wZW4yIHNjYW5mMTQgc2NhbmYxNSBidWcyMSBidWcyMiBcCisrCSBzY2FuZjE2IHNjYW5mMTcgdHN0LXNldHZidWYxIGJ1ZzIzIGJ1ZzI0IFwKKysJIGJ1Zy12ZnByaW50Zi1uYXJncyB0c3Qtc3ByaW50ZjMgXAorIAkgYnVnMjUgdHN0LXByaW50Zi1yb3VuZCBidWcyMy0yIGJ1ZzIzLTMgYnVnMjMtNCBidWcyNiB0c3QtZm1lbW9wZW4zCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSBcCisrCSArPSB0c3Qtc3NjYW5mIHRzdC1zd3ByaW50ZiB0ZXN0LXZmcHJpbnRmIGJ1ZzE0IHNjYW5mMTMgdHN0LWdyb3VwaW5nCisrdGVzdHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgXAorKwkgKz0gdHN0LXBlcnJvciBidWcxOWEgYnVnMjAgdHN0LWxvbmctZGJsLWZwaGV4IHRzdC1mcGhleC13aWRlCisrdGVzdHMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkgKz0gYnVnMThhIHRzdC1zd3NjYW5mIHRzdC13Yy1wcmludGYKKyAKKyB0ZXN0LXNyY3MgPSB0c3QtdW5icHV0YyB0c3QtcHJpbnRmCisgCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oIGIvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oCitpbmRleCAzYzczMDQ0Li5hYzYyYjNhIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL19pMThuX251bWJlci5oCisrKysgYi9zdGRpby1jb21tb24vX2kxOG5fbnVtYmVyLmgKK0BAIC0xOSwxMCArMTksMTMgQEAKKyAjaW5jbHVkZSA8c3RkYm9vbC5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorICNpbmNsdWRlIDx3Y3R5cGUuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSAiLi4vbG9jYWxlL291dGRpZ2l0cy5oIgorICNpbmNsdWRlICIuLi9sb2NhbGUvb3V0ZGlnaXRzd2MuaCIKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisrCisgc3RhdGljIENIQVJfVCAqCisgX2kxOG5fbnVtYmVyX3Jld3JpdGUgKENIQVJfVCAqdywgQ0hBUl9UICpyZWFyX3B0ciwgQ0hBUl9UICplbmQpCisgeworQEAgLTExNSwzICsxMTgsMTMgQEAgX2kxOG5fbnVtYmVyX3Jld3JpdGUgKENIQVJfVCAqdywgQ0hBUl9UICpyZWFyX3B0ciwgQ0hBUl9UICplbmQpCisgCisgICByZXR1cm4gdzsKKyB9CisrCisrI2Vsc2UKKysKKytzdGF0aWMgQ0hBUl9UICoKKytfaTE4bl9udW1iZXJfcmV3cml0ZSAoQ0hBUl9UICp3LCBDSEFSX1QgKnJlYXJfcHRyLCBDSEFSX1QgKmVuZCkKKyt7CisrICByZXR1cm4gdzsKKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL2Z4cHJpbnRmLmMgYi9zdGRpby1jb21tb24vZnhwcmludGYuYworaW5kZXggN2IyZWI5NC4uODQ3NjA3NiAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9meHByaW50Zi5jCisrKysgYi9zdGRpby1jb21tb24vZnhwcmludGYuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8d2NoYXIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGxpYmlvUC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIGludAorQEAgLTM3LDYgKzM4LDcgQEAgX19meHByaW50ZiAoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgaW50IHJlczsKKyAgIGlmIChfSU9fZndpZGUgKGZwLCAwKSA+IDApCisgICAgIHsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKGZtdCkgKyAxOworICAgICAgIHdjaGFyX3Qgd2ZtdFtsZW5dOworICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCitAQCAtNDUsNiArNDcsOSBAQCBfX2Z4cHJpbnRmIChGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgCSAgd2ZtdFtpXSA9IGZtdFtpXTsKKyAJfQorICAgICAgIHJlcyA9IF9fdmZ3cHJpbnRmIChmcCwgd2ZtdCwgYXApOworKyNlbHNlCisrICAgICAgYWJvcnQoKTsKKysjZW5kaWYKKyAgICAgfQorICAgZWxzZQorICAgICByZXMgPSBfSU9fdmZwcmludGYgKGZwLCBmbXQsIGFwKTsKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMKK2luZGV4IDMwMjNiMjAuLmJkMGRmNjYgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vcHJpbnRmX2ZwLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi9wcmludGZfZnAuYworQEAgLTM5LDYgKzM5LDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHJvdW5kaW5nLW1vZGUuaD4KKyAKK0BAIC0xNDIsNiArMTQzLDEwIEBAIGV4dGVybiBtcF9zaXplX3QgX19tcG5fZXh0cmFjdF9sb25nX2RvdWJsZSAobXBfcHRyIHJlc19wdHIsIG1wX3NpemVfdCBzaXplLAorIGV4dGVybiB1bnNpZ25lZCBpbnQgX19ndWVzc19ncm91cGluZyAodW5zaWduZWQgaW50IGludGRpZ19tYXgsCisgCQkJCSAgICAgIGNvbnN0IGNoYXIgKmdyb3VwaW5nKTsKKyAKKysvKiBJZGVhbGx5LCB3aGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHRoaXMgc2hvdWxkIGRvCisrICAgYWxsIGl0cyB3b3JrIGluIG9yZGluYXJ5IGNoYXJhY3RlcnMsIHJhdGhlciB0aGFuIGRvaW5nIGl0IGluIHdpZGUKKysgICBjaGFyYWN0ZXJzIGFuZCB0aGVuIGNvbnZlcnRpbmcgYXQgdGhlIGVuZC4gIEJ1dCB0aGF0IGlzIGEgY2hhbGxlbmdlCisrICAgZm9yIGFub3RoZXIgZGF5LiAgKi8KKyAKKyBzdGF0aWMgd2NoYXJfdCAqZ3JvdXBfbnVtYmVyICh3Y2hhcl90ICpidWYsIHdjaGFyX3QgKmJ1ZmVuZCwKKyAJCQkgICAgICB1bnNpZ25lZCBpbnQgaW50ZGlnX25vLCBjb25zdCBjaGFyICpncm91cGluZywKK0BAIC0yNTEsNyArMjU2LDE0IEBAIF9fX3ByaW50Zl9mcCAoRklMRSAqZnAsCisgICBtcF9saW1iX3QgY3k7CisgCisgICAvKiBOb256ZXJvIGlmIHRoaXMgaXMgb3V0cHV0IG9uIGEgd2lkZSBjaGFyYWN0ZXIgc3RyZWFtLiAgKi8KKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaW50IHdpZGUgPSBpbmZvLT53aWRlOworKyNlbHNlCisrICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSB3aWRlLW9yaWVudGVkIHN0cmVhbSB3aGVuCisrICAgICBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgYnV0IHRoZSBjb21waWxlciBjYW4ndAorKyAgICAgYmUgdHJ1c3RlZCB0byBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgY29uc3QgaW50IHdpZGUgPSAwOworKyNlbmRpZgorIAorICAgLyogQnVmZmVyIGluIHdoaWNoIHdlIHByb2R1Y2UgdGhlIG91dHB1dC4gICovCisgICB3Y2hhcl90ICp3YnVmZmVyID0gTlVMTDsKK0BAIC0yNjEsNiArMjczLDcgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgIHAuZXhwc2lnbiA9IDA7CisgCisgICAvKiBGaWd1cmUgb3V0IHRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3Rlci4gICovCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKGluZm8tPmV4dHJhID09IDApCisgICAgIHsKKyAgICAgICBkZWNpbWFsID0gX05MX0NVUlJFTlQgKExDX05VTUVSSUMsIERFQ0lNQUxfUE9JTlQpOworQEAgLTI4MCw3ICsyOTMsMTMgQEAgX19fcHJpbnRmX2ZwIChGSUxFICpmcCwKKyAgIC8qIFRoZSBkZWNpbWFsIHBvaW50IGNoYXJhY3RlciBtdXN0IG5vdCBiZSB6ZXJvLiAgKi8KKyAgIGFzc2VydCAoKmRlY2ltYWwgIT0gJ1wwJyk7CisgICBhc3NlcnQgKGRlY2ltYWx3YyAhPSBMJ1wwJyk7CisrI2Vsc2UKKysgIC8qIEhhcmQtY29kZSB2YWx1ZXMgZnJvbSAnQycgbG9jYWxlLiAgKi8KKysgIGRlY2ltYWwgPSAiLiI7CisrICBkZWNpbWFsd2MgPSBMJy4nOworKyNlbmRpZgorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChpbmZvLT5ncm91cCkKKyAgICAgeworICAgICAgIGlmIChpbmZvLT5leHRyYSA9PSAwKQorQEAgLTMyNCw2ICszNDMsOSBAQCBfX19wcmludGZfZnAgKEZJTEUgKmZwLAorICAgICB9CisgICBlbHNlCisgICAgIGdyb3VwaW5nID0gTlVMTDsKKysjZWxzZQorKyAgZ3JvdXBpbmcgPSBOVUxMOworKyNlbmRpZgorIAorICAgLyogRmV0Y2ggdGhlIGFyZ3VtZW50IHZhbHVlLgkqLworICNpZm5kZWYgX19OT19MT05HX0RPVUJMRV9NQVRICitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jIGIvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jCitpbmRleCA2YzNiNWU5Li5mNjYwY2UwIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3ByaW50Zl9mcGhleC5jCisrKysgYi9zdGRpby1jb21tb24vcHJpbnRmX2ZwaGV4LmMKK0BAIC0yOCw2ICsyOCw3IEBACisgI2luY2x1ZGUgPF9pdG9hLmg+CisgI2luY2x1ZGUgPF9pdG93YS5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICNpbmNsdWRlIDxzdGRib29sLmg+CisgI2luY2x1ZGUgPHJvdW5kaW5nLW1vZGUuaD4KKyAKK0BAIC0xMzksMTAgKzE0MCwxOCBAQCBfX3ByaW50Zl9mcGhleCAoRklMRSAqZnAsCisgICBpbnQgZG9uZSA9IDA7CisgCisgICAvKiBOb256ZXJvIGlmIHRoaXMgaXMgb3V0cHV0IG9uIGEgd2lkZSBjaGFyYWN0ZXIgc3RyZWFtLiAgKi8KKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgaW50IHdpZGUgPSBpbmZvLT53aWRlOworKyNlbHNlCisrICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSB3aWRlLW9yaWVudGVkIHN0cmVhbSB3aGVuCisrICAgICBPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiBpcyBkaXNhYmxlZCwgYnV0IHRoZSBjb21waWxlciBjYW4ndAorKyAgICAgYmUgdHJ1c3RlZCB0byBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgY29uc3QgaW50IHdpZGUgPSAwOworKyNlbmRpZgorIAorIAorICAgLyogRmlndXJlIG91dCB0aGUgZGVjaW1hbCBwb2ludCBjaGFyYWN0ZXIuICAqLworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChpbmZvLT5leHRyYSA9PSAwKQorICAgICB7CisgICAgICAgZGVjaW1hbCA9IF9OTF9DVVJSRU5UIChMQ19OVU1FUklDLCBERUNJTUFMX1BPSU5UKTsKK0BAIC0xNTYsNiArMTY1LDEwIEBAIF9fcHJpbnRmX2ZwaGV4IChGSUxFICpmcCwKKyAgICAgfQorICAgLyogVGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyIG11c3QgbmV2ZXIgYmUgemVyby4gICovCisgICBhc3NlcnQgKCpkZWNpbWFsICE9ICdcMCcgJiYgZGVjaW1hbHdjICE9IEwnXDAnKTsKKysjZWxzZQorKyAgZGVjaW1hbCA9ICIuIjsKKysgIGRlY2ltYWx3YyA9IEwnLic7CisrI2VuZGlmCisgCisgCisgICAvKiBGZXRjaCB0aGUgYXJndW1lbnQgdmFsdWUuCSovCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ByaW50Zl9zaXplLmMgYi9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYworaW5kZXggN2RjZDU4ZS4uNmZiNzQ5MSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi9wcmludGZfc2l6ZS5jCisrKysgYi9zdGRpby1jb21tb24vcHJpbnRmX3NpemUuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDxwcmludGYuaD4KKyAjaW5jbHVkZSA8bGliaW9QLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgLyogVGhpcyBkZWZpbmVzIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIHRoZSBzYW1lIGNvZGUgZm9yIEdOVSBDIGxpYnJhcnkgYW5kCitAQCAtMTE2LDcgKzExNywxNCBAQCBfX3ByaW50Zl9zaXplIChGSUxFICpmcCwgY29uc3Qgc3RydWN0IHByaW50Zl9pbmZvICppbmZvLAorIAorICAgc3RydWN0IHByaW50Zl9pbmZvIGZwX2luZm87CisgICBpbnQgZG9uZSA9IDA7CisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIGludCB3aWRlID0gaW5mby0+d2lkZTsKKysjZWxzZQorKyAgLyogVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgd2lkZS1vcmllbnRlZCBzdHJlYW0gd2hlbgorKyAgICAgT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIgaXMgZGlzYWJsZWQsIGJ1dCB0aGUgY29tcGlsZXIgY2FuJ3QKKysgICAgIGJlIHRydXN0ZWQgdG8gZmlndXJlIHRoYXQgb3V0LiAgKi8KKysgIGNvbnN0IGludCB3aWRlID0gMDsKKysjZW5kaWYKKyAgIGludCByZXM7CisgCisgICAvKiBGZXRjaCB0aGUgYXJndW1lbnQgdmFsdWUuCSovCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3NjYW5mMTQuYyBiL3N0ZGlvLWNvbW1vbi9zY2FuZjE0LmMKK2luZGV4IGNmZmNjYjAuLjZjYzI2MGEgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vc2NhbmYxNC5jCisrKysgYi9zdGRpby1jb21tb24vc2NhbmYxNC5jCitAQCAtMyw2ICszLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjZGVmaW5lIEZBSUwoKSBcCisgICBkbyB7CQkJCQkJCVwKK0BAIC00OCw2ICs0OSw3IEBAIG1haW4gKHZvaWQpCisgICAvKiBTZWUgZXhwbGFuYXRpb24gYWJvdmUuICAqLworICAgRElBR19QVVNIX05FRURTX0NPTU1FTlQ7CisgICBESUFHX0lHTk9SRV9ORUVEU19DT01NRU5UICg0LjksICItV2Zvcm1hdCIpOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGlmIChzc2NhbmYgKCIgMy4yNVMgeCIsICIlNGFTJTNjIiwgJmxzcCwgYykgIT0gMikKKyAgICAgRkFJTCAoKTsKKyAgIGVsc2UKK0BAIC01Nyw2ICs1OSw3IEBAIG1haW4gKHZvaWQpCisgICAgICAgbWVtc2V0IChsc3AsICd4Jywgc2l6ZW9mIEwiMy4yNSIpOworICAgICAgIGZyZWUgKGxzcCk7CisgICAgIH0KKysjZW5kaWYKKyAgIGlmIChzc2NhbmYgKCI0LjI1WzAtOS5dIHgiLCAiJWFbMC05Ll0lOGMiLCAmc3AsIGMpICE9IDIpCisgICAgIEZBSUwgKCk7CisgICBlbHNlCitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jIGIvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jCitpbmRleCA1ZGVmMjdmLi43YzliOTFlIDEwMDY0NAorLS0tIGEvc3RkaW8tY29tbW9uL3RzdC1wb3Blbi5jCisrKysgYi9zdGRpby1jb21tb24vdHN0LXBvcGVuLmMKK0BAIC0xOSw2ICsxOSw3IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx3Y2hhci5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyBkb190ZXN0ICh2b2lkKQorQEAgLTM0LDEyICszNSwxNCBAQCBkb190ZXN0ICh2b2lkKQorICAgICAgIHJldHVybiAxOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyAgIC8qIFBPU0lYIHNheXMgdGhhdCBwaXBlIHN0cmVhbXMgYXJlIGJ5dGUtb3JpZW50ZWQuICAqLworICAgaWYgKGZ3aWRlIChmLCAwKSA+PSAwKQorICAgICB7CisgICAgICAgcHV0cyAoInBvcGVuIGRpZCBub3QgcmV0dXJuIGJ5dGUtb3JpZW50ZWQgc3RyZWFtIik7CisgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgfQorKyNlbmRpZgorIAorICAgaWYgKGdldGxpbmUgKCZsaW5lLCAmbGVuLCBmKSAhPSA1KQorICAgICB7CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3RzdC1zcHJpbnRmLmMgYi9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYworaW5kZXggZDUyODRiOS4uZjFlM2QyMSAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi90c3Qtc3ByaW50Zi5jCisrKysgYi9zdGRpby1jb21tb24vdHN0LXNwcmludGYuYworQEAgLTMsNyArMyw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bGliYy1pbnRlcm5hbC5oPgorLQorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0YXRpYyBpbnQKKyBkb190ZXN0ICh2b2lkKQorQEAgLTExLDEyICsxMSwxNCBAQCBkb190ZXN0ICh2b2lkKQorICAgY2hhciBidWZbMTAwXTsKKyAgIGludCByZXN1bHQgPSAwOworIAorKyNpZiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSCisgICBpZiAoc3ByaW50ZiAoYnVmLCAiJS4wbHMiLCBMImZvbyIpICE9IDAKKyAgICAgICB8fCBzdHJsZW4gKGJ1ZikgIT0gMCkKKyAgICAgeworICAgICAgIHB1dHMgKCJzcHJpbnRmIChidWYsIFwiJS4wbHNcIiwgTFwiZm9vXCIpIHByb2R1Y2VkIHNvbWUgb3V0cHV0Iik7CisgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgI2RlZmluZSBTSVpFICgxMDI0KjcwMDAwKQorICNkZWZpbmUgU1RSKHgpICN4CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3RzdGRpb21pc2MuYyBiL3N0ZGlvLWNvbW1vbi90c3RkaW9taXNjLmMKK2luZGV4IDU1NDhhNzEuLjMxZWQwMjQgMTAwNjQ0CistLS0gYS9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jCisrKysgYi9zdGRpby1jb21tb24vdHN0ZGlvbWlzYy5jCitAQCAtNCw2ICs0LDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHdjaGFyLmg+CisgI2luY2x1ZGUgPGxpYmMtaW50ZXJuYWwuaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgaW50CisgdDEgKHZvaWQpCitAQCAtMTM0LDYgKzEzNSw3IEBAIEYgKHZvaWQpCisgICBwcmludGYgKCJleHBlY3RlZCBcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgXCIlc1wiXG4iLAorIAkgIGJ1Zik7CisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIKKyAgIHN3cHJpbnRmICh3YnVmLCBzaXplb2Ygd2J1ZiAvIHNpemVvZiAod2J1ZlswXSksIEwiJWEgJUEgJWUgJUUgJWYgJUYgJWcgJUciLAorIAkgICAgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCwgcW5hbnZhbCwKKyAJICAgIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwsIHFuYW52YWwpOworQEAgLTE3MSw2ICsxNzMsNyBAQCBGICh2b2lkKQorICAgcmVzdWx0IHw9IHdjc2NtcCAod2J1ZiwgTCItaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYiKSAhPSAwOworICAgcHJpbnRmICgiZXhwZWN0ZWQgTFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBMXCIlU1wiXG4iLAorIAkgIHdidWYpOworKyNlbmRpZiAvKiBfX09QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSICovCisgCisgICBscW5hbnZhbCA9IE5BTjsKKyAKK0BAIC0yMTUsNiArMjE4LDcgQEAgRiAodm9pZCkKKyAgIHByaW50ZiAoImV4cGVjdGVkIFwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GXCIsIGdvdCBcIiVzXCJcbiIsCisgCSAgYnVmKTsKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorICAgc3dwcmludGYgKHdidWYsIHNpemVvZiB3YnVmIC8gc2l6ZW9mICh3YnVmWzBdKSwKKyAJICAgIEwiJUxhICVMQSAlTGUgJUxFICVMZiAlTEYgJUxnICVMRyIsCisgCSAgICBscW5hbnZhbCwgbHFuYW52YWwsIGxxbmFudmFsLCBscW5hbnZhbCwKK0BAIC0yNTksNiArMjYzLDcgQEAgRiAodm9pZCkKKyAgIHJlc3VsdCB8PSB3Y3NjbXAgKHdidWYsIEwiLWluZiAtSU5GIC1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIikgIT0gMDsKKyAgIHByaW50ZiAoImV4cGVjdGVkIExcIi1pbmYgLUlORiAtaW5mIC1JTkYgLWluZiAtSU5GIC1pbmYgLUlORlwiLCBnb3QgTFwiJVNcIlxuIiwKKyAJICB3YnVmKTsKKysjZW5kaWYgLyogX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUiAqLworIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CitkaWZmIC0tZ2l0IGEvc3RkaW8tY29tbW9uL3ZmcHJpbnRmLmMgYi9zdGRpby1jb21tb24vdmZwcmludGYuYworaW5kZXggMDU5MmU3MC4uZjIxZDk3MyAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi92ZnByaW50Zi5jCisrKysgYi9zdGRpby1jb21tb24vdmZwcmludGYuYworQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSA8X2l0b2EuaD4KKyAjaW5jbHVkZSA8bG9jYWxlL2xvY2FsZWluZm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAvKiBUaGlzIGNvZGUgaXMgc2hhcmVkIGJldHdlZW4gdGhlIHN0YW5kYXJkIHN0ZGlvIGltcGxlbWVudGF0aW9uIGZvdW5kCisgICAgaW4gR05VIEMgbGlicmFyeSBhbmQgdGhlIGxpYmlvIGltcGxlbWVudGF0aW9uIG9yaWdpbmFsbHkgZm91bmQgaW4KK0BAIC0xNDAsNiArMTQxLDE4IEBAIHR5cGVkZWYgd2NoYXJfdCBUSE9VU0FORFNfU0VQX1Q7CisgIyBkZWZpbmUgRU9GIFdFT0YKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgxKQorKyNlbHNlCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDApCisrI2VuZGlmCisrCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorKyMgZGVmaW5lIExPQ0FMRV9TVVBQT1JUICgxKQorKyNlbHNlCisrIyBkZWZpbmUgTE9DQUxFX1NVUFBPUlQgKDApCisrI2VuZGlmCisrCisgI2luY2x1ZGUgIl9pMThuX251bWJlci5oIgorIAorIC8qIEluY2x1ZGUgdGhlIHNoYXJlZCBjb2RlIGZvciBwYXJzaW5nIHRoZSBmb3JtYXQgc3RyaW5nLiAgKi8KK0BAIC0xMDY1LDggKzEwNzgsMTEgQEAgc3RhdGljIGNvbnN0IHVpbnQ4X3QganVtcF90YWJsZVtdID0KKyAjIGRlZmluZSBwcm9jZXNzX3N0cmluZ19hcmcoZnNwZWMpIFwKKyAgICAgTEFCRUwgKGZvcm1fY2hhcmFjdGVyKToJCQkJCQkgICAgICBcCisgICAgICAgLyogQ2hhcmFjdGVyLiAgKi8JCQkJCQkJICAgICAgXAorLSAgICAgIGlmIChpc19sb25nKQkJCQkJCQkgICAgICBcCistCWdvdG8gTEFCRUwgKGZvcm1fd2NoYXJhY3Rlcik7CQkJCQkgICAgICBcCisrICAgICAgaWYgKGlzX2xvbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgIGdvdG8gTEFCRUwgKGZvcm1fd2NoYXJhY3Rlcik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAtLXdpZHRoOwkvKiBBY2NvdW50IGZvciB0aGUgY2hhcmFjdGVyIGl0c2VsZi4gICovCQkgICAgICBcCisgICAgICAgaWYgKCFsZWZ0KQkJCQkJCQkgICAgICBcCisgCVBBRCAoJyAnKTsJCQkJCQkJICAgICAgXAorQEAgLTEwNzksNiArMTA5NSw3IEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGp1bXBfdGFibGVbXSA9CisgICAgICAgYnJlYWs7CQkJCQkJCQkgICAgICBcCisgCQkJCQkJCQkJICAgICAgXAorICAgICBMQUJFTCAoZm9ybV93Y2hhcmFjdGVyKToJCQkJCQkgICAgICBcCisrICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHsJCQkJCQkJCQkgICAgICBcCisgCS8qIFdpZGUgY2hhcmFjdGVyLiAgKi8JCQkJCQkgICAgICBcCisgCWNoYXIgYnVmW01CX0NVUl9NQVhdOwkJCQkJCSAgICAgIFwKK0BAIC0xMTQ1LDYgKzExNjIsNyBAQCBzdGF0aWMgY29uc3QgdWludDhfdCBqdW1wX3RhYmxlW10gPQorIAkgIH0JCQkJCQkJCSAgICAgIFwKKyAJZWxzZQkJCQkJCQkJICAgICAgXAorIAkgIHsJCQkJCQkJCSAgICAgIFwKKysgICAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICBjb25zdCB3Y2hhcl90ICpzMiA9IChjb25zdCB3Y2hhcl90ICopIHN0cmluZzsJCSAgICAgIFwKKyAJICAgIG1ic3RhdGVfdCBtYnN0YXRlOwkJCQkJCSAgICAgIFwKKyAJCQkJCQkJCQkgICAgICBcCitAQCAtMTM5OSw3ICsxNDE3LDkgQEAgdmZwcmludGYgKEZJTEUgKnMsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCB2YV9saXN0IGFwKQorICAgICBMQUJFTCAoZmxhZ19xdW90ZSk6CisgICAgICAgZ3JvdXAgPSAxOworIAorLSAgICAgIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKysgICAgICBpZiAoISBMT0NBTEVfU1VQUE9SVCkKKysgICAgICAgIGdyb3VwaW5nID0gTlVMTDsKKysgICAgICBlbHNlIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKyAJeworICNpZmRlZiBDT01QSUxFX1dQUklOVEYKKyAJICB0aG91c2FuZHNfc2VwID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywKK0BAIC0xNzI4LDggKzE3NDgsOSBAQCBwcmludGZfcG9zaXRpb25hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IENIQVJfVCAqZm9ybWF0LCBpbnQgcmVhZG9ubHlfZm9ybWF0LAorICAgc2l6ZV90IGNudDsKKyAKKyAgIENIQVJfVCAqd29ya3N0YXJ0ID0gTlVMTDsKKy0KKy0gIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKysgIGlmICghIExPQ0FMRV9TVVBQT1JUKQorKyAgICBncm91cGluZyA9IE5VTEw7CisrICBlbHNlIGlmIChncm91cGluZyA9PSAoY29uc3QgY2hhciAqKSAtMSkKKyAgICAgeworICNpZmRlZiBDT01QSUxFX1dQUklOVEYKKyAgICAgICB0aG91c2FuZHNfc2VwID0gX05MX0NVUlJFTlRfV09SRCAoTENfTlVNRVJJQywKK2RpZmYgLS1naXQgYS9zdGRpby1jb21tb24vdmZzY2FuZi5jIGIvc3RkaW8tY29tbW9uL3Zmc2NhbmYuYworaW5kZXggMGUyMDRlNy4uNjZjYzBhZiAxMDA2NDQKKy0tLSBhL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMKKysrKyBiL3N0ZGlvLWNvbW1vbi92ZnNjYW5mLmMKK0BAIC0yOSw2ICsyOSw3IEBACisgI2luY2x1ZGUgPHdjdHlwZS5oPgorICNpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorICNpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorICNpZmRlZglfX0dOVUNfXworICMgZGVmaW5lIEhBVkVfTE9OR0xPTkcKK0BAIC0xMzMsNiArMTM0LDEyIEBACisgIyBkZWZpbmUgV0lOVF9UCQlpbnQKKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUgorKyMgZGVmaW5lIE1VTFRJQllURV9TVVBQT1JUICgxKQorKyNlbHNlCisrIyBkZWZpbmUgTVVMVElCWVRFX1NVUFBPUlQgKDApCisrI2VuZGlmCisrCisgI2RlZmluZSBlbmNvZGVfZXJyb3IoKSBkbyB7CQkJCQkJICAgICAgXAorIAkJCSAgZXJydmFsID0gNDsJCQkJCSAgICAgIFwKKyAJCQkgIF9fc2V0X2Vycm5vIChFSUxTRVEpOwkJCQkgICAgICBcCitAQCAtMzE2LDI0ICszMjMsMzUgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAgIEFSR0NIRUNLIChzLCBmb3JtYXQpOworIAorICB7CistI2lmbmRlZiBDT01QSUxFX1dTQ0FORgorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgJiYgIWRlZmluZWQgKENPTVBJTEVfV1NDQU5GKQorICAgIHN0cnVjdCBfX2xvY2FsZV9kYXRhICpjb25zdCBjdXJudW1lcmljID0gbG9jLT5fX2xvY2FsZXNbTENfTlVNRVJJQ107CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgIC8qIEZpZ3VyZSBvdXQgdGhlIGRlY2ltYWwgcG9pbnQgY2hhcmFjdGVyLiAgKi8KKy0jaWZkZWYgQ09NUElMRV9XU0NBTkYKKysjIGlmZGVmIENPTVBJTEVfV1NDQU5GCisgICAgZGVjaW1hbCA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX05VTUVSSUMsIF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MpOworLSNlbHNlCisrIyBlbHNlCisgICAgZGVjaW1hbCA9IGN1cm51bWVyaWMtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoREVDSU1BTF9QT0lOVCldLnN0cmluZzsKKy0jZW5kaWYKKysjIGVuZGlmCisgICAgLyogRmlndXJlIG91dCB0aGUgdGhvdXNhbmRzIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAqLworLSNpZmRlZiBDT01QSUxFX1dTQ0FORgorKyMgaWZkZWYgQ09NUElMRV9XU0NBTkYKKyAgICB0aG91c2FuZHMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19OVU1FUklDLCBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDKTsKKy0jZWxzZQorKyMgZWxzZQorICAgIHRob3VzYW5kcyA9IGN1cm51bWVyaWMtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoVEhPVVNBTkRTX1NFUCldLnN0cmluZzsKKyAgICBpZiAoKnRob3VzYW5kcyA9PSAnXDAnKQorICAgICAgdGhvdXNhbmRzID0gTlVMTDsKKy0jZW5kaWYKKysjIGVuZGlmCisrI2Vsc2UgLyogaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKysgICAvKiBIYXJkLWNvZGUgdmFsdWVzIGZyb20gdGhlIEMgbG9jYWxlLiAgKi8KKysjIGlmZGVmIENPTVBJTEVfV1NDQU5GCisrICAgZGVjaW1hbCA9IEwnLic7CisrICAgdGhvdXNhbmRzID0gTCdcMCc7CisrIyBlbHNlCisrICAgZGVjaW1hbCA9ICIuIjsKKysgICB0aG91c2FuZHMgPSBOVUxMOworKyMgZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgIH0KKyAKKyAgIC8qIExvY2sgdGhlIHN0cmVhbS4gICovCitAQCAtMzg1LDYgKzQwMyw4IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgI2lmbmRlZiBDT01QSUxFX1dTQ0FORgorICAgICAgIGlmICghaXNhc2NpaSAoKHVuc2lnbmVkIGNoYXIpICpmKSkKKyAJeworKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysKKyAJICAvKiBOb24tQVNDSUksIG1heSBiZSBhIG11bHRpYnl0ZS4gICovCisgCSAgaW50IGxlbiA9IF9fbWJybGVuIChmLCBzdHJsZW4gKGYpLCAmc3RhdGUpOworIAkgIGlmIChsZW4gPiAwKQorQEAgLTgzMCw2ICs4NTAsOCBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgICAgfQorIAkgIC8qIEZBTExUSFJPVUdIICovCisgCWNhc2UgTF8oJ0MnKToKKysgICAgICAgICAgYXNzZXJ0IChNVUxUSUJZVEVfU1VQUE9SVCk7CisrCisgCSAgaWYgKHdpZHRoID09IC0xKQorIAkgICAgd2lkdGggPSAxOworIAorQEAgLTExNzIsNiArMTE5NCw4IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgLyogRkFMTFRIUk9VR0ggKi8KKyAKKyAJY2FzZSBMXygnUycpOgorKyAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKysKKyAJICB7CisgI2lmbmRlZiBDT01QSUxFX1dTQ0FORgorIAkgICAgbWJzdGF0ZV90IGNzdGF0ZTsKK0BAIC0xNDE5LDEwICsxNDQzLDE3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgICAgIGNvbnN0IGNoYXIgKm1iZGlnaXRzWzEwXTsKKyAJICAgICAgY29uc3QgY2hhciAqbWJkaWdpdHNfZXh0ZW5kZWRbMTBdOworICNlbmRpZgorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgLyogICJ0b19pbnB1bmN0IiBpcyBhIG1hcCBmcm9tIEFTQ0lJIGRpZ2l0cyB0byB0aGVpcgorIAkJICBlcXVpdmFsZW50IGluIGxvY2FsZS4gVGhpcyBpcyBkZWZpbmVkIGZvciBsb2NhbGVzCisgCQkgIHdoaWNoIHVzZSBhbiBleHRyYSBkaWdpdHMgc2V0LiAgKi8KKyAJICAgICAgd2N0cmFuc190IG1hcCA9IF9fd2N0cmFucyAoInRvX2lucHVuY3QiKTsKKysjZWxzZQorKyAgICAgICAgICAgICAgLyogVGhpcyB3aWxsIGFsd2F5cyBiZSB0aGUgY2FzZSB3aGVuCisrICAgICAgICAgICAgICAgICBPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFIGlzIGRpc2FibGVkLCBidXQgdGhlCisrICAgICAgICAgICAgICAgICBjb21waWxlciBjYW4ndCBmaWd1cmUgdGhhdCBvdXQuICAqLworKyAgICAgICAgICAgICAgd2N0cmFuc190IG1hcCA9IE5VTEw7CisrI2VuZGlmCisgCSAgICAgIGludCBuOworIAorIAkgICAgICBmcm9tX2xldmVsID0gMDsKK0BAIC0yMDg4LDYgKzIxMTksNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkJLS13aWR0aDsKKyAJICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgCSAgd2N0cmFuc190IG1hcDsKKyAJICBpZiAoX19idWlsdGluX2V4cGVjdCAoKGZsYWdzICYgSTE4TikgIT0gMCwgMCkKKyAJICAgICAgLyogSGV4YWRlY2ltYWwgZmxvYXRzIG1ha2Ugbm8gc2Vuc2UsIGZpeGluZyBsb2NhbGl6ZWQKK0BAIC0yMzA0LDYgKzIzMzYsNyBAQCBfSU9fdmZzY2FuZl9pbnRlcm5hbCAoX0lPX0ZJTEUgKnMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX0lPX3ZhX2xpc3QgYXJncHRyLAorIAkgICAgICA7CisgI2VuZGlmCisgCSAgICB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworIAorIAkgIC8qIEhhdmUgd2UgcmVhZCBhbnkgY2hhcmFjdGVyPyAgSWYgd2UgdHJ5IHRvIHJlYWQgYSBudW1iZXIKKyAJICAgICBpbiBoZXhhZGVjaW1hbCBub3RhdGlvbiBhbmQgd2UgaGF2ZSByZWFkIG9ubHkgdGhlIGAweCcKK0BAIC0yMzQzLDcgKzIzNzYsMTAgQEAgX0lPX3Zmc2NhbmZfaW50ZXJuYWwgKF9JT19GSUxFICpzLCBjb25zdCBjaGFyICpmb3JtYXQsIF9JT192YV9saXN0IGFyZ3B0ciwKKyAKKyAJY2FzZSBMXygnWycpOgkvKiBDaGFyYWN0ZXIgY2xhc3MuICAqLworIAkgIGlmIChmbGFncyAmIExPTkcpCistCSAgICBTVFJJTkdfQVJHICh3c3RyLCB3Y2hhcl90LCAxMDApOworKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIGFzc2VydCAoTVVMVElCWVRFX1NVUFBPUlQpOworKyAgICAgICAgICAgICAgU1RSSU5HX0FSRyAod3N0ciwgd2NoYXJfdCwgMTAwKTsKKysgICAgICAgICAgICB9CisgCSAgZWxzZQorIAkgICAgU1RSSU5HX0FSRyAoc3RyLCBjaGFyLCAxMDApOworIAorQEAgLTI0MTcsNiArMjQ1Myw3IEBAIF9JT192ZnNjYW5mX2ludGVybmFsIChfSU9fRklMRSAqcywgY29uc3QgY2hhciAqZm9ybWF0LCBfSU9fdmFfbGlzdCBhcmdwdHIsCisgCSAgaWYgKGZsYWdzICYgTE9ORykKKyAJICAgIHsKKyAJICAgICAgc2l6ZV90IG5vdyA9IHJlYWRfaW47CisrICAgICAgICAgICAgICBhc3NlcnQgKE1VTFRJQllURV9TVVBQT1JUKTsKKyAjaWZkZWYgQ09NUElMRV9XU0NBTkYKKyAJICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKGluY2hhciAoKSA9PSBXRU9GKSkKKyAJCWlucHV0X2Vycm9yICgpOworZGlmZiAtLWdpdCBhL3N0ZGxpYi9NYWtlZmlsZSBiL3N0ZGxpYi9NYWtlZmlsZQoraW5kZXggNDAyNDY2YS4uN2U3ZTMwNCAxMDA2NDQKKy0tLSBhL3N0ZGxpYi9NYWtlZmlsZQorKysrIGIvc3RkbGliL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBzdGRsaWIgcm91dGluZXMKKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSBzdGRsaWIKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKK0BAIC0zMCw3ICszMiw3IEBAIGhlYWRlcnMJOj0gc3RkbGliLmggYml0cy9zdGRsaWIuaCBiaXRzL3N0ZGxpYi1sZGJsLmggYml0cy9zdGRsaWItZmxvYXQuaCAgICAgIFwKKyAJICAgYWxsb2NhLmggZm10bXNnLmgJCQkJCQkgICAgICBcCisgCSAgIGJpdHMvc3RkbGliLWJzZWFyY2guaAorIAorLXJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKytyb3V0aW5lcy15CTo9CQkJCQkJCSAgICAgIFwKKyAJYXRvZiBhdG9pIGF0b2wgYXRvbGwJCQkJCQkgICAgICBcCisgCWFib3J0CQkJCQkJCQkgICAgICBcCisgCWJzZWFyY2ggcXNvcnQgbXNvcnQJCQkJCQkgICAgICBcCitAQCAtMzksNyArNDEsNiBAQCByb3V0aW5lcwk6PQkJCQkJCQkgICAgICBcCisgCXF1aWNrX2V4aXQgYXRfcXVpY2tfZXhpdCBjeGFfYXRfcXVpY2tfZXhpdCBjeGFfdGhyZWFkX2F0ZXhpdF9pbXBsICAgICBcCisgCWFicyBsYWJzIGxsYWJzCQkJCQkJCSAgICAgIFwKKyAJZGl2IGxkaXYgbGxkaXYJCQkJCQkJICAgICAgXAorLQltYmxlbiBtYnN0b3djcyBtYnRvd2Mgd2NzdG9tYnMgd2N0b21iCQkJCSAgICAgIFwKKyAJcmFuZG9tIHJhbmRvbV9yIHJhbmQgcmFuZF9yCQkJCQkgICAgICBcCisgCWRyYW5kNDggZXJhbmQ0OCBscmFuZDQ4IG5yYW5kNDggbXJhbmQ0OCBqcmFuZDQ4CQkJICAgICAgXAorIAlzcmFuZDQ4IHNlZWQ0OCBsY29uZzQ4CQkJCQkJICAgICAgXAorQEAgLTUyLDkgKzUzLDE4IEBAIHJvdXRpbmVzCTo9CQkJCQkJCSAgICAgIFwKKyAJc3RydG9mX2wgc3RydG9kX2wgc3RydG9sZF9sCQkJCQkgICAgICBcCisgCXN5c3RlbSBjYW5vbmljYWxpemUJCQkJCQkgICAgICBcCisgCWE2NGwgbDY0YQkJCQkJCQkgICAgICBcCistCXJwbWF0Y2ggc3RyZm1vbiBzdHJmbW9uX2wgZ2V0c3Vib3B0IHhwZ19iYXNlbmFtZSBmbXRtc2cJCSAgICAgIFwKKy0Jc3RydG9pbWF4IHN0cnRvdW1heCB3Y3N0b2ltYXggd2NzdG91bWF4CQkJCSAgICAgIFwKKysJZ2V0c3Vib3B0IHhwZ19iYXNlbmFtZQkJCQkJCSAgICAgIFwKKysJc3RydG9pbWF4IHN0cnRvdW1heAkJCQkJCSAgICAgIFwKKyAJZ2V0Y29udGV4dCBzZXRjb250ZXh0IG1ha2Vjb250ZXh0IHN3YXBjb250ZXh0Cisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFKSArPQkJCQkgICAgICBcCisrCXN0cmZtb24gc3RyZm1vbl9sCisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgKz0JCQkJICAgICAgXAorKwltYmxlbiBtYnN0b3djcyBtYnRvd2Mgd2NzdG9tYnMgd2N0b21iCQkJCSAgICAgIFwKKysJd2NzdG9pbWF4IHdjc3RvdW1heAorK2lmZXEgKHl5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkkKE9QVElPTl9QT1NJWF9SRUdFWFApKQorK3JvdXRpbmVzLXkgKz0gcnBtYXRjaAorK2VuZGlmCisrcm91dGluZXMtJChPUFRJT05fRUdMSUJDX0ZNVE1TRykgKz0gZm10bXNnCisgYXV4ID0JZ3JvdXBpbmcgZ3JvdXBpbmd3YyB0ZW5zX2luX2xpbWIKKyAKKyAjIFRoZXNlIHJvdXRpbmVzIHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBsaWJjIHNoYXJlZCBvYmplY3QuCitAQCAtNjIsMjAgKzcyLDI0IEBAIGF1eCA9CWdyb3VwaW5nIGdyb3VwaW5nd2MgdGVuc19pbl9saW1iCisgIyBsaW5rZWQgYWdhaW5zdCB3aGVuIHRoZSBzaGFyZWQgbGlicmFyeSB3aWxsIGJlIHVzZWQuCisgc3RhdGljLW9ubHktcm91dGluZXMgPSBhdGV4aXQgYXRfcXVpY2tfZXhpdAorIAorLXRlc3Qtc3Jjcwk6PSB0c3QtZm10bXNnCistdGVzdHMJCTo9IHRzdC1zdHJ0b2wgdHN0LXN0cnRvZCB0ZXN0bWIgdGVzdHJhbmQgdGVzdHNvcnQgdGVzdGRpdiAgIFwKKyt0ZXN0LXNyY3MtJChPUFRJT05fRUdMSUJDX0ZNVE1TRykJOj0gdHN0LWZtdG1zZworK3Rlc3RzCQk6PSB0c3Qtc3RydG9sIHRzdC1zdHJ0b2QgdGVzdHJhbmQgdGVzdHNvcnQgdGVzdGRpdgkgICAgXAorIAkJICAgdGVzdC1jYW5vbiB0ZXN0LWNhbm9uMiB0c3Qtc3RydG9sbCB0c3QtZW52aXJvbgkgICAgXAorIAkJICAgdHN0LXhwZy1iYXNlbmFtZSB0c3QtcmFuZG9tIHRzdC1yYW5kb20yIHRzdC1ic2VhcmNoCSAgICBcCisgCQkgICB0c3QtbGltaXRzIHRzdC1yYW5kNDggYnVnLXN0cnRvZCB0c3Qtc2V0Y29udGV4dCAgICAgICAgICBcCistCQkgICB0c3Qtc2V0Y29udGV4dDIgdGVzdC1hNjRsIHRzdC1xc29ydCB0c3Qtc3lzdGVtIHRlc3RtYjIgICBcCistCQkgICBidWctc3RydG9kMiB0c3QtYXRvZjEgdHN0LWF0b2YyIHRzdC1zdHJ0b2QyIHRzdC1zdHJ0b2QzICBcCistCQkgICB0c3QtcmFuZDQ4LTIgdHN0LW1ha2Vjb250ZXh0IHRzdC1zdHJ0b2Q0IHRzdC1zdHJ0b2Q1ICAgICBcCisrCQkgICB0c3Qtc2V0Y29udGV4dDIgdGVzdC1hNjRsIHRzdC1xc29ydCB0c3Qtc3lzdGVtCSAgICBcCisrCQkgICBidWctc3RydG9kMiB0c3QtYXRvZjEgdHN0LWF0b2YyIHRzdC1zdHJ0b2QyIAkJICAgIFwKKysJCSAgIHRzdC1yYW5kNDgtMiB0c3QtbWFrZWNvbnRleHQgCQkJICAgIFwKKyAJCSAgIHRzdC1xc29ydDIgdHN0LW1ha2Vjb250ZXh0MiB0c3Qtc3RydG9kNiB0c3QtdW5zZXRlbnYxICAgIFwKKyAJCSAgIHRzdC1tYWtlY29udGV4dDMgYnVnLWdldGNvbnRleHQgYnVnLWZtdG1zZzEJCSAgICBcCisgCQkgICB0c3Qtc2VjdXJlLWdldGVudiB0c3Qtc3RydG9kLW92ZXJmbG93IHRzdC1zdHJ0b2Qtcm91bmQgICBcCisgCQkgICB0c3QtdGluaW5lc3MgdHN0LXN0cnRvZC11bmRlcmZsb3cgdHN0LXRscy1hdGV4aXQJICAgIFwKKyAJCSAgIHRzdC1zZXRjb250ZXh0MyB0c3QtdGxzLWF0ZXhpdC1ub2RlbGV0ZQorIHRlc3RzLXN0YXRpYwk6PSB0c3Qtc2VjdXJlLWdldGVudgorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gdHN0LXN0cnRvZDMgdHN0LXN0cnRvZDQgdHN0LXN0cnRvZDUgdGVzdG1iMgorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJCSs9IHRlc3RtYgorIAorIG1vZHVsZXMtbmFtZXMJPSB0c3QtdGxzLWF0ZXhpdC1saWIKKyAKK0BAIC0xMTYsOCArMTMwLDEwIEBAIENGTEFHUy10c3QtbWFrZWNvbnRleHQyLmMgPSAkKHN0YWNrLWFsaWduLXRlc3QtZmxhZ3MpCisgdGVzdHMtc3BlY2lhbCArPSAkKG9ianBmeClpc29tYWMub3V0CisgCisgaWZlcSAoJChydW4tYnVpbHQtdGVzdHMpLHllcykKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19GTVRNU0cpKQorIHRlc3RzLXNwZWNpYWwgKz0gJChvYmpwZngpdHN0LWZtdG1zZy5vdXQKKyBlbmRpZgorK2VuZGlmCisgCisgaW5jbHVkZSAuLi9SdWxlcworIAorZGlmZiAtLWdpdCBhL3N0ZGxpYi9zdHJ0b2RfbC5jIGIvc3RkbGliL3N0cnRvZF9sLmMKK2luZGV4IGUxM2FiMWUuLjYzZWZlNDEgMTAwNjQ0CistLS0gYS9zdGRsaWIvc3RydG9kX2wuYworKysrIGIvc3RkbGliL3N0cnRvZF9sLmMKK0BAIC0xNyw2ICsxNyw3IEBACisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgI2luY2x1ZGUgPHhsb2NhbGUuaD4KKyAKKyBleHRlcm4gZG91YmxlIF9fX19zdHJ0b2RfbF9pbnRlcm5hbCAoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQsIF9fbG9jYWxlX3QpOworQEAgLTU0OCw2ICs1NDksNyBAQCBfX19fU1RSVE9GX0lOVEVSTkFMIChucHRyLCBlbmRwdHIsIGdyb3VwLCBsb2MpCisgICAvKiBVc2VkIGluIHNldmVyYWwgcGxhY2VzLiAgKi8KKyAgIGludCBjbnQ7CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgc3RydWN0IF9fbG9jYWxlX2RhdGEgKmN1cnJlbnQgPSBsb2MtPl9fbG9jYWxlc1tMQ19OVU1FUklDXTsKKyAKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChncm91cCkpCitAQCAtNTg2LDYgKzU4OCwxNyBAQCBfX19fU1RSVE9GX0lOVEVSTkFMIChucHRyLCBlbmRwdHIsIGdyb3VwLCBsb2MpCisgICBkZWNpbWFsX2xlbiA9IHN0cmxlbiAoZGVjaW1hbCk7CisgICBhc3NlcnQgKGRlY2ltYWxfbGVuID4gMCk7CisgI2VuZGlmCisrI2Vsc2UgLyogaWYgISBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgKi8KKysgIC8qIEhhcmQtY29kZSB2YWx1ZXMgZnJvbSB0aGUgJ0MnIGxvY2FsZS4gICovCisrICBncm91cGluZyA9IE5VTEw7CisrI2lmZGVmIFVTRV9XSURFX0NIQVIKKysgIGRlY2ltYWwgPSBMJy4nOworKyMgZGVmaW5lIGRlY2ltYWxfbGVuIDEKKysjZWxzZQorKyAgZGVjaW1hbCA9ICIuIjsKKysgIGRlY2ltYWxfbGVuID0gMTsKKysjZW5kaWYKKysjZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFICovCisgCisgICAvKiBQcmVwYXJlIG51bWJlciByZXByZXNlbnRhdGlvbi4gICovCisgICBleHBvbmVudCA9IDA7CitkaWZmIC0tZ2l0IGEvc3RkbGliL3RzdC1zdHJ0b2QuYyBiL3N0ZGxpYi90c3Qtc3RydG9kLmMKK2luZGV4IGE0NjkyMDguLjI4ZmI0MjMgMTAwNjQ0CistLS0gYS9zdGRsaWIvdHN0LXN0cnRvZC5jCisrKysgYi9zdGRsaWIvdHN0LXN0cnRvZC5jCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8bWF0aC5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIHN0cnVjdCBsdGVzdAorICAgeworQEAgLTE3Niw3ICsxNzcsOSBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKiBhcmd2KQorIAorICAgc3RhdHVzIHw9IGxvbmdfZGJsICgpOworIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHN0YXR1cyB8PSBsb2NhbGVfdGVzdCAoKTsKKysjZW5kaWYKKyAKKyAgIHJldHVybiBzdGF0dXMgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1M7CisgfQorQEAgLTIxOSw2ICsyMjIsNyBAQCBsb25nX2RibCAodm9pZCkKKyAgIHJldHVybiAwOworIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgLyogUGVyZm9ybSBhIGZldyB0ZXN0cyBpbiBhIGxvY2FsZSB3aXRoIHRob3VzYW5kcyBzZXBhcmF0b3JzLiAgKi8KKyBzdGF0aWMgaW50CisgbG9jYWxlX3Rlc3QgKHZvaWQpCitAQCAtMjc2LDMgKzI4MCw0IEBAIGxvY2FsZV90ZXN0ICh2b2lkKQorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CisrI2VuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSAqLworZGlmZiAtLWdpdCBhL3N0cmVhbXMvTWFrZWZpbGUgYi9zdHJlYW1zL01ha2VmaWxlCitpbmRleCBhOGE2MTYyLi5jZWI0MjNmIDEwMDY0NAorLS0tIGEvc3RyZWFtcy9NYWtlZmlsZQorKysrIGIvc3RyZWFtcy9NYWtlZmlsZQorQEAgLTE4LDExICsxOCwxNCBAQAorICMKKyAjCU1ha2VmaWxlIGZvciBzdHJlYW1zLgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0cmVhbXMKKyAKKyBpbmNsdWRlIC4uL01ha2Vjb25maWcKKyAKKyBoZWFkZXJzCQk9IHN0cm9wdHMuaCBzeXMvc3Ryb3B0cy5oIGJpdHMvc3Ryb3B0cy5oIGJpdHMveHRpdHlwZXMuaAorLXJvdXRpbmVzCT0gaXNhc3RyZWFtIGdldG1zZyBnZXRwbXNnIHB1dG1zZyBwdXRwbXNnIGZhdHRhY2ggZmRldGFjaAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TVFJFQU1TKSBcCisrCSs9IGlzYXN0cmVhbSBnZXRtc2cgZ2V0cG1zZyBwdXRtc2cgcHV0cG1zZyBmYXR0YWNoIGZkZXRhY2gKKyAKKyBpbmNsdWRlIC4uL1J1bGVzCitkaWZmIC0tZ2l0IGEvc3RyaW5nL01ha2VmaWxlIGIvc3RyaW5nL01ha2VmaWxlCitpbmRleCA4NDI0YTYxLi41OTg4ODM0IDEwMDY0NAorLS0tIGEvc3RyaW5nL01ha2VmaWxlCisrKysgYi9zdHJpbmcvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJU3ViLW1ha2VmaWxlIGZvciBzdHJpbmcgcG9ydGlvbiBvZiBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHN0cmluZworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTM5LDEwICs0MSwxMiBAQCByb3V0aW5lcwk6PSBzdHJjYXQgc3RyY2hyIHN0cmNtcCBzdHJjb2xsIHN0cmNweSBzdHJjc3BuCQlcCisgCQkgICAkKGFkZHByZWZpeCBhcmd6LSxhcHBlbmQgY291bnQgY3JlYXRlIGN0c2VwIG5leHQJXAorIAkJCQkgICAgIGRlbGV0ZSBleHRyYWN0IGluc2VydCBzdHJpbmdpZnkJXAorIAkJCQkgICAgIGFkZHNlcCByZXBsYWNlKQkJCVwKKy0JCSAgIGVudnogYmFzZW5hbWUJCQkJCVwKKysJCSAgIGJhc2VuYW1lCQkJCQkJXAorIAkJICAgc3RyY29sbF9sIHN0cnhmcm1fbCBzdHJpbmctaW5saW5lcyBtZW1yY2hyCQlcCisgCQkgICB4cGctc3RyZXJyb3Igc3RyZXJyb3JfbAorIAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19FTlZaKSArPSBlbnZ6CisrCisgc3Ryb3AtdGVzdHMJOj0gbWVtY2hyIG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1wY3B5IG1lbXNldCBtZW1jY3B5CVwKKyAJCSAgIHN0cGNweSBzdHBuY3B5IHN0cmNhdCBzdHJjaHIgc3RyY21wIHN0cmNweSBzdHJjc3BuCVwKKyAJCSAgIHN0cmxlbiBzdHJuY21wIHN0cm5jcHkgc3RycGJyayBzdHJyY2hyIHN0cnNwbiBtZW1tZW0JXAorQEAgLTUxLDEwICs1NSwxMiBAQCBzdHJvcC10ZXN0cwk6PSBtZW1jaHIgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXBjcHkgbWVtc2V0IG1lbWNjcHkJXAorIHRlc3RzCQk6PSB0ZXN0ZXIgaW5sLXRlc3RlciBub2lubC10ZXN0ZXIgdGVzdGNvcHkgdGVzdC1mZnMJXAorIAkJICAgdHN0LXN0cmxlbiBzdHJhdGNsaWZmIHRzdC1zdmMgdHN0LWlubGNhbGwJCVwKKyAJCSAgIGJ1Zy1zdHJuY2F0MSBidWctc3Ryc3BuMSBidWctc3RycGJyazEgdHN0LWJzd2FwCVwKKy0JCSAgIHRzdC1zdHJ0b2sgdHN0LXN0cnhmcm0gYnVnLXN0cmNvbGwxIHRzdC1zdHJmcnkJXAorKwkJICAgdHN0LXN0cnRvayB0c3Qtc3RyZnJ5CVwKKyAJCSAgIGJ1Zy1zdHJ0b2sxICQoYWRkcHJlZml4IHRlc3QtLCQoc3Ryb3AtdGVzdHMpKQlcCistCQkgICBidWctZW52ejEgdHN0LXN0cnhmcm0yIHRzdC1lbmRpYW4gdHN0LXN2YzIJCVwKKy0JCSAgIHRzdC1zdHJ0b2tfcgorKwkJICAgdHN0LXN0cnhmcm0yIHRzdC1lbmRpYW4gdHN0LXN2YzIgdHN0LXN0cnRva19yCisrdGVzdHMtJChPUFRJT05fRUdMSUJDX0VOVlopICs9IGJ1Zy1lbnZ6MQorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkJKz0gdHN0LXN0cnhmcm0gYnVnLXN0cmNvbGwxCisgCisgeHRlc3RzID0gdHN0LXN0cmNvbGwtb3ZlcmZsb3cKKyAKK2RpZmYgLS1naXQgYS9zdHJpbmcvc3RyY29sbF9sLmMgYi9zdHJpbmcvc3RyY29sbF9sLmMKK2luZGV4IDhmMTIyNWYuLmIzNmIxOGMgMTAwNjQ0CistLS0gYS9zdHJpbmcvc3RyY29sbF9sLmMKKysrKyBiL3N0cmluZy9zdHJjb2xsX2wuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZuZGVmIFNUUklOR19UWVBFCisgIyBkZWZpbmUgU1RSSU5HX1RZUEUgY2hhcgorQEAgLTI2MCw3ICsyNjEsMTEgQEAgaW50CisgU1RSQ09MTCAoY29uc3QgU1RSSU5HX1RZUEUgKnMxLCBjb25zdCBTVFJJTkdfVFlQRSAqczIsIF9fbG9jYWxlX3QgbCkKKyB7CisgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY3VycmVudCA9IGwtPl9fbG9jYWxlc1tMQ19DT0xMQVRFXTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICB1aW50X2Zhc3QzMl90IG5ydWxlcyA9IGN1cnJlbnQtPnZhbHVlc1tfTkxfSVRFTV9JTkRFWCAoX05MX0NPTExBVEVfTlJVTEVTKV0ud29yZDsKKysjZWxzZQorKyAgY29uc3QgdWludF9mYXN0MzJfdCBucnVsZXMgPSAwOworKyNlbmRpZgorICAgLyogV2UgZG9uJ3QgYXNzaWduIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHJpZ2h0IGF3YXkgc2luY2UgaXQgbWlnaHQgYmUKKyAgICAgIHVubmVjZXNzYXJ5IGluIGNhc2UgdGhlcmUgYXJlIG5vIHJ1bGVzLiAgKi8KKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJ1bGVzZXRzOworZGlmZiAtLWdpdCBhL3N0cmluZy9zdHJlcnJvcl9sLmMgYi9zdHJpbmcvc3RyZXJyb3JfbC5jCitpbmRleCAyZWQ3OGI1Li42NTg0ODEzIDEwMDY0NAorLS0tIGEvc3RyaW5nL3N0cmVycm9yX2wuYworKysrIGIvc3RyaW5nL3N0cmVycm9yX2wuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAKKyBzdGF0aWMgX190aHJlYWQgY2hhciAqbGFzdF92YWx1ZTsKK0BAIC0yOSwxMCArMzAsMTQgQEAgc3RhdGljIF9fdGhyZWFkIGNoYXIgKmxhc3RfdmFsdWU7Cisgc3RhdGljIGNvbnN0IGNoYXIgKgorIHRyYW5zbGF0ZSAoY29uc3QgY2hhciAqc3RyLCBsb2NhbGVfdCBsb2MpCisgeworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIGxvY2FsZV90IG9sZGxvYyA9IF9fdXNlbG9jYWxlIChsb2MpOworICAgY29uc3QgY2hhciAqcmVzID0gXyhzdHIpOworICAgX191c2Vsb2NhbGUgKG9sZGxvYyk7CisgICByZXR1cm4gcmVzOworKyNlbHNlCisrICByZXR1cm4gc3RyOworKyNlbmRpZgorIH0KKyAKKyAKK2RpZmYgLS1naXQgYS9zdHJpbmcvc3RyeGZybV9sLmMgYi9zdHJpbmcvc3RyeGZybV9sLmMKK2luZGV4IDhiNjFlYTIuLjQxZmRjMjIgMTAwNjQ0CistLS0gYS9zdHJpbmcvc3RyeGZybV9sLmMKKysrKyBiL3N0cmluZy9zdHJ4ZnJtX2wuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaWZuZGVmIFNUUklOR19UWVBFCisgIyBkZWZpbmUgU1RSSU5HX1RZUEUgY2hhcgorQEAgLTY2OSw3ICs2NzAsMTEgQEAgU1RSWEZSTSAoU1RSSU5HX1RZUEUgKmRlc3QsIGNvbnN0IFNUUklOR19UWVBFICpzcmMsIHNpemVfdCBuLCBfX2xvY2FsZV90IGwpCisgeworICAgbG9jYWxlX2RhdGFfdCBsX2RhdGE7CisgICBzdHJ1Y3QgX19sb2NhbGVfZGF0YSAqY3VycmVudCA9IGwtPl9fbG9jYWxlc1tMQ19DT0xMQVRFXTsKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBsX2RhdGEubnJ1bGVzID0gY3VycmVudC0+dmFsdWVzW19OTF9JVEVNX0lOREVYIChfTkxfQ09MTEFURV9OUlVMRVMpXS53b3JkOworKyNlbHNlCisrICBsX2RhdGEubnJ1bGVzID0gMDsKKysjZW5kaWYKKyAKKyAgIC8qIEhhbmRsZSBieXRlIGNvbXBhcmlzb24gY2FzZS4gICovCisgICBpZiAobF9kYXRhLm5ydWxlcyA9PSAwKQorZGlmZiAtLWdpdCBhL3N0cmluZy90ZXN0LXN0cmNtcC5jIGIvc3RyaW5nL3Rlc3Qtc3RyY21wLmMKK2luZGV4IGRjNGJhNmYuLmE5Nzg2NTYgMTAwNjQ0CistLS0gYS9zdHJpbmcvdGVzdC1zdHJjbXAuYworKysrIGIvc3RyaW5nL3Rlc3Qtc3RyY21wLmMKK0BAIC0zMjksMzQgKzMyOSw2IEBAIGNoZWNrICh2b2lkKQorIAkJRk9SX0VBQ0hfSU1QTCAoaW1wbCwgMCkKKyAJCWNoZWNrX3Jlc3VsdCAoaW1wbCwgczEgKyBpMSwgczIgKyBpMiwgZXhwX3Jlc3VsdCk7CisgICAgICAgfQorLQorLSAgLyogVGVzdCBjYXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgemVybyBieXRlcyBhZnRlciB0aGUgZmlyc3QuICAqLworLQorLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAxNiArIDE7IGkrKykKKy0gICAgeworLSAgICAgIHMxW2ldID0gMHgwMDsKKy0gICAgICBzMltpXSA9IDB4MDA7CistICAgIH0KKy0KKy0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTY7IGkrKykKKy0gICAgeworLSAgICAgIGludCBleHBfcmVzdWx0OworLQorLSAgICAgIGZvciAoaW50IHZhbCA9IDB4MDE7IHZhbCA8IDB4MTAwOyB2YWwrKykKKy0JeworLQkgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgaTsgaisrKQorLQkgICAgeworLQkgICAgICBzMVtqXSA9IHZhbDsKKy0JICAgICAgczJbal0gPSB2YWw7CistCSAgICB9CistCistCSAgczJbaV0gPSB2YWw7CistCistCSAgZXhwX3Jlc3VsdCA9IFNJTVBMRV9TVFJDTVAgKHMxLCBzMik7CistCSAgRk9SX0VBQ0hfSU1QTCAoaW1wbCwgMCkKKy0JICAgIGNoZWNrX3Jlc3VsdCAoaW1wbCwgczEsIHMyLCBleHBfcmVzdWx0KTsKKy0JfQorLSAgICB9CisgfQorIAorIAorZGlmZiAtLWdpdCBhL3N0cmluZy90c3Qtc3RyeGZybS5jIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMKK2luZGV4IGY0OGNmYzAuLmMzYTUxZjkgMTAwNjQ0CistLS0gYS9zdHJpbmcvdHN0LXN0cnhmcm0uYworKysrIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtLmMKK0BAIC0zLDYgKzMsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgCisgY2hhciBjb25zdCBzdHJpbmdbXSA9ICIiOworQEAgLTY0LDggKzY1LDEwIEBAIGRvX3Rlc3QgKHZvaWQpCisgICBpbnQgcmVzdWx0ID0gMDsKKyAKKyAgIHJlc3VsdCB8PSB0ZXN0ICgiQyIpOworKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAgIHJlc3VsdCB8PSB0ZXN0ICgiZW5fVVMuSVNPLTg4NTktMSIpOworICAgcmVzdWx0IHw9IHRlc3QgKCJkZV9ERS5VVEYtOCIpOworKyNlbmRpZgorIAorICAgcmV0dXJuIHJlc3VsdDsKKyB9CitkaWZmIC0tZ2l0IGEvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jIGIvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jCitpbmRleCBkNWExMTE1Li4xOWM3ZjMwIDEwMDY0NAorLS0tIGEvc3RyaW5nL3RzdC1zdHJ4ZnJtMi5jCisrKysgYi9zdHJpbmcvdHN0LXN0cnhmcm0yLmMKK0BAIC0xLDYgKzEsNyBAQAorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgc3RhdGljIGludAorIGRvX3Rlc3QgKHZvaWQpCitAQCAtMzgsNiArMzksNyBAQCBkb190ZXN0ICh2b2lkKQorICAgICAgIHJlcyA9IDE7CisgICAgIH0KKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICJkZV9ERS5VVEYtOCIpID09IE5VTEwpCisgICAgIHsKKyAgICAgICBwdXRzICgic2V0bG9jYWxlIGZhaWxlZCIpOworQEAgLTc1LDYgKzc3LDcgQEAgZG9fdGVzdCAodm9pZCkKKyAJICByZXMgPSAxOworIAl9CisgICAgIH0KKysjZW5kaWYKKyAKKyAgIHJldHVybiByZXM7CisgfQorZGlmZiAtLWdpdCBhL3N1bnJwYy9NYWtlZmlsZSBiL3N1bnJwYy9NYWtlZmlsZQoraW5kZXggNjBjYWEwYS4uNWJjNzBhYiAxMDA2NDQKKy0tLSBhL3N1bnJwYy9NYWtlZmlsZQorKysrIGIvc3VucnBjL01ha2VmaWxlCitAQCAtMTgsNiArMTgsOCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igc3VucnBjIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gc3VucnBjCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtNTUsNyArNTcsNiBAQCBoZWFkZXJzLWluLXRpcnBjID0gJChhZGRwcmVmaXggcnBjLyxhdXRoLmggYXV0aF91bml4LmggY2xudC5oIHBtYXBfY2xudC5oIFwKKyBoZWFkZXJzLW5vdC1pbi10aXJwYyA9ICQoYWRkcHJlZml4IHJwYy8sa2V5X3Byb3QuaCBycGNfZGVzLmgpIFwKKyAJCSAgICAgICAkKHJwY3N2YzolPXJwY3N2Yy8lKSBycGNzdmMvYm9vdHBhcmFtLmgKKyBoZWFkZXJzID0gcnBjL25ldGRiLmgKKy1pbnN0YWxsLW90aGVycyA9ICQoaW5zdF9zeXNjb25mZGlyKS9ycGMKKyBnZW5lcmF0ZWQgKz0gJChycGNzdmM6JS54PXJwY3N2Yy8lLmgpICQocnBjc3ZjOiUueD14JS5jKSAkKHJwY3N2YzolLng9eCUuc3RtcCkgXAorIAkgICAgICQocnBjc3ZjOiUueD1ycGNzdmMvJS5zdG1wKSBycGNnZW4KKyBnZW5lcmF0ZWQtZGlycyArPSBycGNzdmMKK0BAIC02NSwyMCArNjYsMjggQEAgaGVhZGVycyArPSAkKGhlYWRlcnMtaW4tdGlycGMpICQoaGVhZGVycy1ub3QtaW4tdGlycGMpCisgZW5kaWYKKyAKKyBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorLW5lZWQtZXhwb3J0LXJvdXRpbmVzIDo9IGF1dGhfZGVzIGF1dGhfdW5peCBjbG50X2dlbiBjbG50X3BlcnIgY2xudF90Y3AgXAorK25lZWQtZXhwb3J0LXJvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpIDo9IFwKKysJCQlhdXRoX2RlcyBhdXRoX3VuaXggY2xudF9nZW4gY2xudF9wZXJyIGNsbnRfdGNwIFwKKyAJCQljbG50X3VkcCBnZXRfbXlhZGRyIGtleV9jYWxsIG5ldG5hbWUgcG1fZ2V0cG9ydCBcCistCQkJcnBjX3RocmVhZCBzdmMgc3ZjX3RjcCBzdmNfdWRwIHhjcnlwdCB4ZHJfYXJyYXkgeGRyIFwKKysJCQlycGNfdGhyZWFkIHN2YyBzdmNfdGNwIHN2Y191ZHAgeGRyX2FycmF5IHhkciBcCisgCQkJeGRyX2ludFhYX3QgeGRyX21lbSB4ZHJfcmVmIHhkcl9zaXplb2YgeGRyX3N0ZGlvIFwKKyAJCQlzdmNfcnVuCisrbmVlZC1leHBvcnQtcm91dGluZXMteSArPSB4Y3J5cHQKKytuZWVkLWV4cG9ydC1yb3V0aW5lcyA6PSAkKG5lZWQtZXhwb3J0LXJvdXRpbmVzLXkpCisgCistcm91dGluZXMgOj0gYXV0aF9ub25lIGF1dGh1eHByb3QgYmluZHJzdnBydCBjbG50X3JhdyBjbG50X3NpbXAgXAorK3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpIDo9IFwKKysJICAgIGF1dGhfbm9uZSBhdXRodXhwcm90IGJpbmRyc3ZwcnQgY2xudF9yYXcgY2xudF9zaW1wIFwKKyAJICAgIHJwY19kdGFibGUgZ2V0cnBjcG9ydCBwbWFwX2NsbnQgcG1fZ2V0bWFwcyBwbWFwX3Byb3QgcG1hcF9wcm90MiBcCisgCSAgICBwbWFwX3JtdCBycGNfcHJvdCBycGNfY29tbW9uIHJwY19jbXNnIHN2Y19hdXRoIHN2Y19hdXRodXggc3ZjX3JhdyBcCisgCSAgICBzdmNfc2ltcGxlIHhkcl9mbG9hdCB4ZHJfcmVjIHB1YmxpY2tleSBhdXRoZGVzX3Byb3QgXAorLQkgICAgZGVzX2NyeXB0IGRlc19pbXBsIGRlc19zb2Z0IGtleV9wcm90IG9wZW5jaGlsZCBydGltZSBzdmNhdXRoX2RlcyBcCisrCSAgICBrZXlfcHJvdCBvcGVuY2hpbGQgcnRpbWUgc3ZjYXV0aF9kZXMgXAorIAkgICAgZ2V0cnBjZW50IGdldHJwY2J5bmFtZSBnZXRycGNieW51bWJlciBcCisgCSAgICBnZXRycGNlbnRfciBnZXRycGNieW5hbWVfciBnZXRycGNieW51bWJlcl9yIFwKKy0JICAgIGNsbnRfdW5peCBzdmNfdW5peCBjcmVhdGVfeGlkICQobmVlZC1leHBvcnQtcm91dGluZXMpCisrCSAgICBjbG50X3VuaXggc3ZjX3VuaXggY3JlYXRlX3hpZAorKworKyMgeGRlY3J5cHQgaXMgYWxzbyB1c2VkIGJ5IG5zcy9uc3NfZmlsZXMvZmlsZXMta2V5LmMuCisrcm91dGluZXMteSArPSBkZXNfY3J5cHQgZGVzX2ltcGwgZGVzX3NvZnQgJChuZWVkLWV4cG9ydC1yb3V0aW5lcykKKysKKyBpZm5lcSAoJChsaW5rLW9ic29sZXRlLXJwYykseWVzKQorICMgV2Ugb25seSBhZGQgdGhlIFJQQyBmb3IgY29tcGF0aWJpbGl0eSB0byBsaWJjLnNvLgorIHNoYXJlZC1vbmx5LXJvdXRpbmVzID0gJChyb3V0aW5lcykKK0BAIC04NywyNSArOTYsMjggQEAgZW5kaWYKKyAKKyAjIFdlIGRvIG5vdCBidWlsZCBycGNpbmZvIGFueW1vcmUuICBJdCBpcyBub3QgbmVlZGVkIGZvciBhIGJvb3RzdHJhcAorICMgYW5kIG5vdCB3YW50ZWQgb24gY29tcGxldGUgc3lzdGVtcy4KKy0jIG90aGVycyA6PSBycGNpbmZvCistIyBpbnN0YWxsLXNiaW4gOj0gcnBjaW5mbworLWluc3RhbGwtYmluIDo9IHJwY2dlbgorKyMgb3RoZXJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IHJwY2luZm8KKysjIGluc3RhbGwtc2Jpbi0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNpbmZvCisraW5zdGFsbC1iaW4tJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gcnBjZ2VuCisgcnBjZ2VuLW9ianMgPSBycGNfbWFpbi5vIHJwY19ob3V0Lm8gcnBjX2NvdXQubyBycGNfcGFyc2UubyBcCisgCSAgICAgIHJwY19zY2FuLm8gcnBjX3V0aWwubyBycGNfc3Zjb3V0Lm8gcnBjX2NsbnRvdXQubyBcCisgCSAgICAgIHJwY190YmxvdXQubyBycGNfc2FtcGxlLm8KKy1leHRyYS1vYmpzID0gJChycGNnZW4tb2JqcykgJChhZGRwcmVmaXggY3Jvc3MtLCQocnBjZ2VuLW9ianMpKQorLW90aGVycyArPSBycGNnZW4KKytleHRyYS1vYmpzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpID0gJChycGNnZW4tb2JqcykgJChhZGRwcmVmaXggY3Jvc3MtLCQocnBjZ2VuLW9ianMpKQorK290aGVycy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSBycGNnZW4KKysKKytpbnN0YWxsLW90aGVycy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSArPSAkKGluc3Rfc3lzY29uZmRpcikvcnBjCisgCistdGVzdHMgPSB0c3QteGRybWVtIHRzdC14ZHJtZW0yIHRlc3QtcnBjZW50CisteHRlc3RzIDo9IHRzdC1nZXRteWFkZHIKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfU1VOUlBDKSA9IHRzdC14ZHJtZW0gdHN0LXhkcm1lbTIgdGVzdC1ycGNlbnQKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgOj0gdHN0LWdldG15YWRkcgorIAorIGlmZXEgKCQoaGF2ZS10aHJlYWQtbGlicmFyeSkseWVzKQorLXh0ZXN0cyArPSB0aHJzdmMKKyt4dGVzdHMtJChPUFRJT05fRUdMSUJDX1NVTlJQQykgKz0gdGhyc3ZjCisgZW5kaWYKKyAKKyBoZWFkZXJzICs9ICQocnBjc3ZjOiUueD1ycGNzdmMvJS5oKQorLWV4dHJhLWxpYnMgOj0gbGlicnBjc3ZjCistZXh0cmEtbGlicy1vdGhlcnMgOj0gbGlicnBjc3ZjICMgTWFrZSBpdCBpbiBgb3RoZXJzJyBwYXNzLCBub3QgYGxpYicgcGFzcy4KKytleHRyYS1saWJzLSQoT1BUSU9OX0VHTElCQ19TVU5SUEMpICs9IGxpYnJwY3N2YworKyMgTWFrZSBpdCBpbiBgb3RoZXJzJyBwYXNzLCBub3QgYGxpYicgcGFzcy4KKytleHRyYS1saWJzLW90aGVycy15ICs9ICQoZXh0cmEtbGlicy15KQorIGxpYnJwY3N2Yy1yb3V0aW5lcyA9ICQocnBjc3ZjOiUueD14JSkKKyBsaWJycGNzdmMtaW5oaWJpdC1vID0gLm9zICMgQnVpbGQgbm8gc2hhcmVkIHJwY3N2YyBsaWJyYXJ5LgorIG9taXQtZGVwcyA9ICQobGlicnBjc3ZjLXJvdXRpbmVzKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvYXJtL01ha2VmaWxlIGIvc3lzZGVwcy9hcm0vTWFrZWZpbGUKK2luZGV4IDE3YzEyOWIuLjU0Mzc5MWEgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2FybS9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9hcm0vTWFrZWZpbGUKK0BAIC0zNywxMCArMzcsMTMgQEAgaWZlcSAoJChzdWJkaXIpLGNzdSkKKyAjIGdldCBvZmZzZXQgdG8gcnRsZF9nbG9iYWwuX2RsX2h3Y2FwCisgZ2VuLWFzLWNvbnN0LWhlYWRlcnMgKz0gcnRsZC1nbG9iYWwtb2Zmc2V0cy5zeW0gdGxzZGVzYy5zeW0KKyBhZWFiaV9jb25zdGFudHMgPSBhZWFiaV9sY3N0cyBhZWFiaV9zaWdoYW5kbGVycyBhZWFiaV9tYXRoCistYWVhYmlfcm91dGluZXMgPSBhZWFiaV9hc3NlcnQgYWVhYmlfbG9jYWxlY29udiBhZWFiaV9lcnJub19hZGRyIFwKKythZWFiaV9yb3V0aW5lcyA9IGFlYWJpX2Fzc2VydCBhZWFiaV9lcnJub19hZGRyIFwKKyAJCSBhZWFiaV9tYl9jdXJfbWF4IGFlYWJpX2F0ZXhpdCBhZWFiaV9tZW1jbHIgYWVhYmlfbWVtY3B5IFwKKyAJCSBhZWFiaV9tZW1tb3ZlIGFlYWJpX21lbXNldCBcCisgCQkgYWVhYmlfcmVhZF90cCBsaWJjLWFlYWJpX3JlYWRfdHAKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkpCisrYWVhYmlfcm91dGluZXMgKz0gYWVhYmlfbG9jYWxlY29udgorK2VuZGlmCisgCisgc3lzZGVwX3JvdXRpbmVzICs9ICQoYWVhYmlfY29uc3RhbnRzKSAkKGFlYWJpX3JvdXRpbmVzKQorIHN0YXRpYy1vbmx5LXJvdXRpbmVzICs9ICQoYWVhYmlfY29uc3RhbnRzKSBhZWFiaV9yZWFkX3RwCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9nZW5lcmljL2xkc29kZWZzLmggYi9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaAoraW5kZXggN2EwZmU4ZC4uYTNlMmMwYSAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvZ2VuZXJpYy9sZHNvZGVmcy5oCisrKysgYi9zeXNkZXBzL2dlbmVyaWMvbGRzb2RlZnMuaAorQEAgLTQzNSw2ICs0MzUsMTIgQEAgZXh0ZXJuIHN0cnVjdCBydGxkX2dsb2JhbCBfcnRsZF9nbG9iYWwgX19ydGxkX2dsb2JhbF9hdHRyaWJ1dGVfXzsKKyAjIHVuZGVmIF9fcnRsZF9nbG9iYWxfYXR0cmlidXRlX18KKyAjZW5kaWYKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX1JUTERfREVCVUcKKysjIGRlZmluZSBHTFJPX2RsX2RlYnVnX21hc2sgR0xSTyhkbF9kZWJ1Z19tYXNrKQorKyNlbHNlCisrIyBkZWZpbmUgR0xST19kbF9kZWJ1Z19tYXNrIDAKKysjZW5kaWYKKysKKyAjaWZuZGVmIFNIQVJFRAorICMgZGVmaW5lIEdMUk8obmFtZSkgXyMjbmFtZQorICNlbHNlCitAQCAtNDQ3LDggKzQ1MywxMCBAQCBzdHJ1Y3QgcnRsZF9nbG9iYWxfcm8KKyB7CisgI2VuZGlmCisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisgICAvKiBJZiBub256ZXJvIHRoZSBhcHByb3ByaWF0ZSBkZWJ1ZyBpbmZvcm1hdGlvbiBpcyBwcmludGVkLiAgKi8KKyAgIEVYVEVSTiBpbnQgX2RsX2RlYnVnX21hc2s7CisrI2VuZGlmCisgI2RlZmluZSBETF9ERUJVR19MSUJTCSAgICAoMSA8PCAwKQorICNkZWZpbmUgRExfREVCVUdfSU1QQ0FMTFMgICAoMSA8PCAxKQorICNkZWZpbmUgRExfREVCVUdfQklORElOR1MgICAoMSA8PCAyKQorZGlmZiAtLWdpdCBhL3N5c2RlcHMvZ251L01ha2VmaWxlIGIvc3lzZGVwcy9nbnUvTWFrZWZpbGUKK2luZGV4IGVhNjgwMzcuLjMxNzVjYzMgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2dudS9NYWtlZmlsZQorKysrIGIvc3lzZGVwcy9nbnUvTWFrZWZpbGUKK0BAIC01OSw3ICs1OSw4IEBAICQoZm9yZWFjaCBvLCQob2JqZWN0LXN1ZmZpeGVzKSAkKG9iamVjdC1zdWZmaXhlczo9LmQpLFwKKyBlbmRpZgorIAorIGlmZXEgKCQoc3ViZGlyKSxsb2dpbikKKy1zeXNkZXBfcm91dGluZXMgKz0gc2V0dXR4ZW50IGdldHV0eGVudCBlbmR1dHhlbnQgZ2V0dXR4aWQgZ2V0dXR4bGluZSBcCisrc3lzZGVwX3JvdXRpbmVzLSQoT1BUSU9OX0VHTElCQ19VVE1QWCkgXAorKwkJKz0gc2V0dXR4ZW50IGdldHV0eGVudCBlbmR1dHhlbnQgZ2V0dXR4aWQgZ2V0dXR4bGluZSBcCisgCQkgICBwdXR1dHhsaW5lIHV0bXB4bmFtZSB1cGR3dG1weCBnZXR1dG1weCBnZXR1dG1wCisgCisgc3lzZGVwX2hlYWRlcnMgKz0gdXRtcHguaCBiaXRzL3V0bXB4LmgKK2RpZmYgLS1naXQgYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUKK2luZGV4IDIyMjEyMmQuLjQ1MDkzNTcgMTAwNjQ0CistLS0gYS9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvaWVlZTc1NC9sZGJsLW9wdC9NYWtlZmlsZQorQEAgLTExLDE5ICsxMSwxOCBAQCBsaWJtLXJvdXRpbmVzICs9IHNfbmV4dHRvd2FyZGZkCisgcm91dGluZXMgKz0gbWF0aF9sZGJsX29wdCBubGRibC1jb21wYXQKKyAKKyBleHRyYS1saWJzICs9IGxpYm5sZGJsCistbGlibmxkYmwtY2FsbHMgPSBhc3ByaW50ZiBkcHJpbnRmIGZwcmludGYgZnNjYW5mIGZ3cHJpbnRmIGZ3c2NhbmYgaW92ZnNjYW5mIFwKKytsaWJubGRibC1jYWxscyA9IGFzcHJpbnRmIGRwcmludGYgZnByaW50ZiBmc2NhbmYgaW92ZnNjYW5mIFwKKyAJCSBvYnN0YWNrX3ByaW50ZiBvYnN0YWNrX3ZwcmludGYgcHJpbnRmIHNjYW5mIHNucHJpbnRmIFwKKy0JCSBzcHJpbnRmIHNzY2FuZiBzd3ByaW50ZiBzd3NjYW5mIHZhc3ByaW50ZiB2ZHByaW50ZiB2ZnByaW50ZiBcCistCQkgdmZzY2FuZiB2ZndwcmludGYgdmZ3c2NhbmYgdnByaW50ZiB2c2NhbmYgdnNucHJpbnRmIFwKKy0JCSB2c3ByaW50ZiB2c3NjYW5mIHZzd3ByaW50ZiB2c3dzY2FuZiB2d3ByaW50ZiB2d3NjYW5mIFwKKy0JCSB3cHJpbnRmIHdzY2FuZiBwcmludGZfZnAgcHJpbnRmX3NpemUgXAorLQkJIGZwcmludGZfY2hrIGZ3cHJpbnRmX2NoayBwcmludGZfY2hrIHNucHJpbnRmX2NoayBzcHJpbnRmX2NoayBcCistCQkgc3dwcmludGZfY2hrIHZmcHJpbnRmX2NoayB2ZndwcmludGZfY2hrIHZwcmludGZfY2hrIFwKKy0JCSB2c25wcmludGZfY2hrIHZzcHJpbnRmX2NoayB2c3dwcmludGZfY2hrIHZ3cHJpbnRmX2NoayBcCistCQkgd3ByaW50Zl9jaGsgYXNwcmludGZfY2hrIHZhc3ByaW50Zl9jaGsgZHByaW50Zl9jaGsgXAorKwkJIHNwcmludGYgc3NjYW5mIHZhc3ByaW50ZiB2ZHByaW50ZiB2ZnByaW50ZiBcCisrCQkgdmZzY2FuZiB2cHJpbnRmIHZzY2FuZiB2c25wcmludGYgXAorKwkJIHZzcHJpbnRmIHZzc2NhbmYgXAorKwkJIHByaW50Zl9mcCBwcmludGZfc2l6ZSBcCisrCQkgZnByaW50Zl9jaGsgcHJpbnRmX2NoayBzbnByaW50Zl9jaGsgc3ByaW50Zl9jaGsgXAorKwkJIHZmcHJpbnRmX2NoayB2cHJpbnRmX2NoayBcCisrCQkgdnNucHJpbnRmX2NoayB2c3ByaW50Zl9jaGsgXAorKwkJIGFzcHJpbnRmX2NoayB2YXNwcmludGZfY2hrIGRwcmludGZfY2hrIFwKKyAJCSB2ZHByaW50Zl9jaGsgb2JzdGFja19wcmludGZfY2hrIG9ic3RhY2tfdnByaW50Zl9jaGsgXAorIAkJIHN5c2xvZyBzeXNsb2dfY2hrIHZzeXNsb2cgdnN5c2xvZ19jaGsgXAorLQkJIHN0cmZtb24gc3RyZm1vbl9sIFwKKyAJCSBzdHJ0b2xkIHN0cnRvbGRfbCBzdHJ0b2xkaW50IHdjc3RvbGQgd2NzdG9sZF9sIHdjc3RvbGRpbnQgXAorIAkJIHFlY3Z0IHFmY3Z0IHFnY3Z0IHFlY3Z0X3IgcWZjdnRfciBcCisgCQkgaXNpbmYgaXNuYW4gZmluaXRlIHNpZ25iaXQgc2NhbGIgbG9nMiBsZ2FtbWFfciBjZWlsIFwKK0BAIC0zOCw5ICszNywxNSBAQCBsaWJubGRibC1jYWxscyA9IGFzcHJpbnRmIGRwcmludGYgZnByaW50ZiBmc2NhbmYgZndwcmludGYgZndzY2FuZiBpb3Zmc2NhbmYgXAorIAkJIGNhc2luaCBjZXhwIGNsb2cgY3Byb2ogY3NpbiBjc2luaCBjc3FydCBjdGFuIGN0YW5oIGNwb3cgXAorIAkJIGNhYnMgY2FyZyBjaW1hZyBjcmVhbCBjbG9nMTAgXAorIAkJIGlzb2M5OV9zY2FuZiBpc29jOTlfZnNjYW5mIGlzb2M5OV9zc2NhbmYgXAorLQkJIGlzb2M5OV92c2NhbmYgaXNvYzk5X3Zmc2NhbmYgaXNvYzk5X3Zzc2NhbmYgXAorKwkJIGlzb2M5OV92c2NhbmYgaXNvYzk5X3Zmc2NhbmYgaXNvYzk5X3Zzc2NhbmYKKytsaWJubGRibC1jYWxscy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICs9IHN0cmZtb24gc3RyZm1vbl9sCisrbGlibmxkYmwtY2FsbHMtJChPUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTykgKz0gZndwcmludGYgZndzY2FuZiBcCisrCQkgc3dwcmludGYgc3dzY2FuZiB2ZndwcmludGYgdmZ3c2NhbmYgdnN3cHJpbnRmIHZzd3NjYW5mIFwKKysJCSB2d3ByaW50ZiB2d3NjYW5mIHdwcmludGYgd3NjYW5mIGZ3cHJpbnRmX2NoayBzd3ByaW50Zl9jaGsgXAorKwkJIHZmd3ByaW50Zl9jaGsgdnN3cHJpbnRmX2NoayB2d3ByaW50Zl9jaGsgd3ByaW50Zl9jaGsgXAorIAkJIGlzb2M5OV93c2NhbmYgaXNvYzk5X2Z3c2NhbmYgaXNvYzk5X3N3c2NhbmYgXAorIAkJIGlzb2M5OV92d3NjYW5mIGlzb2M5OV92ZndzY2FuZiBpc29jOTlfdnN3c2NhbmYKKytsaWJubGRibC1jYWxscyArPSAkKGxpYm5sZGJsLWNhbGxzLXkpCisgbGlibmxkYmwtcm91dGluZXMgPSAkKGxpYm5sZGJsLWNhbGxzOiU9bmxkYmwtJSkKKyBsaWJubGRibC1pbmhpYml0LW8gPSAkKG9iamVjdC1zdWZmaXhlcykKKyBsaWJubGRibC1zdGF0aWMtb25seS1yb3V0aW5lcyA9ICQobGlibmxkYmwtcm91dGluZXMpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jCitpbmRleCAwMTk4ODg2Li41NTUwMWNkIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5jCisrKysgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmMKK0BAIC0yNiw2ICsyNiw3IEBACisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisgI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKyAjaW5jbHVkZSA8Yml0cy9saWJjLWxvY2suaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyAjaW5jbHVkZSAibmxkYmwtY29tcGF0LmgiCisgCitAQCAtMzMsMjAgKzM0LDE0IEBAIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZmcHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3Zzc2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnNwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdmZzY2FuZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndzY2FuZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZHByaW50ZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dzY2FuZikKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndwcmludGYpCistbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3cHJpbnRmKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX3ZzbnByaW50ZikKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92YXNwcmludGYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfb2JzdGFja192cHJpbnRmKQorLWxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmZ3cHJpbnRmX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzbnByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192ZnByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192c3lzbG9nX2NoaykKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzcHJpbnRmX2NoaykKKy1saWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zzd3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX192YXNwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmRwcmludGZfY2hrKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fb2JzdGFja192cHJpbnRmX2NoaykKK0BAIC01NCw4ICs0OSwxNyBAQCBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3ZzdHJmbW9uKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdnN0cmZtb25fbCkKKyBsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX2lzb2M5OV92c3NjYW5mKQorIGxpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19faXNvYzk5X3Zmc2NhbmYpCisrCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndzY2FuZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92c3dzY2FuZikKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF92ZndwcmludGYpCisrbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfdnN3cHJpbnRmKQorK2xpYmNfaGlkZGVuX3Byb3RvIChfX25sZGJsX19fdmZ3cHJpbnRmX2NoaykKKytsaWJjX2hpZGRlbl9wcm90byAoX19ubGRibF9fX3Zzd3ByaW50Zl9jaGspCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdnN3c2NhbmYpCisgbGliY19oaWRkZW5fcHJvdG8gKF9fbmxkYmxfX19pc29jOTlfdmZ3c2NhbmYpCisrI2VuZGlmCisgCisgc3RhdGljIHZvaWQKKyBfX25sZGJsX2NsZWFudXAgKHZvaWQgKmFyZykKK0BAIC0xMTcsNiArMTIxLDcgQEAgX19ubGRibF9mcHJpbnRmIChGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorIH0KKyB3ZWFrX2FsaWFzIChfX25sZGJsX2ZwcmludGYsIF9fbmxkYmxfX0lPX2ZwcmludGYpCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbiB3ZWFrX2Z1bmN0aW9uCisgX19ubGRibF9md3ByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKK0BAIC0xMzAsNiArMTM1LDcgQEAgX19ubGRibF9md3ByaW50ZiAoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTIyNiw2ICsyMzIsNyBAQCBfX25sZGJsX3NucHJpbnRmIChjaGFyICpzLCBzaXplX3QgbWF4bGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9zd3ByaW50ZiAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorQEAgLTIzOSw2ICsyNDYsNyBAQCBfX25sZGJsX3N3cHJpbnRmICh3Y2hhcl90ICpzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorQEAgLTI2NCw2ICsyNzIsNyBAQCBfX25sZGJsX3ZkcHJpbnRmIChpbnQgZCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZykKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX3ZkcHJpbnRmKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorIF9fbmxkYmxfdmZ3cHJpbnRmIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtMjc1LDYgKzI4NCw3IEBAIF9fbmxkYmxfdmZ3cHJpbnRmIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCisgICByZXR1cm4gcmVzOworIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfdmZ3cHJpbnRmKQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtMjk3LDYgKzMwNyw3IEBAIF9fbmxkYmxfdnNucHJpbnRmIChjaGFyICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIGNvbnN0IGNoYXIgKmZtdCwKKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfdnNucHJpbnRmKQorIHdlYWtfYWxpYXMgKF9fbmxkYmxfdnNucHJpbnRmLCBfX25sZGJsX19fdnNucHJpbnRmKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24gd2Vha19mdW5jdGlvbgorIF9fbmxkYmxfdnN3cHJpbnRmICh3Y2hhcl90ICpzdHJpbmcsIHNpemVfdCBtYXhsZW4sIGNvbnN0IHdjaGFyX3QgKmZtdCwKK0BAIC0zMzAsNiArMzQxLDcgQEAgX19ubGRibF93cHJpbnRmIChjb25zdCB3Y2hhcl90ICpmbXQsIC4uLikKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTQxOSw2ICs0MzEsNyBAQCBfX25sZGJsX3NjYW5mIChjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF92ZndzY2FuZiAoRklMRSAqcywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTQ5MSw2ICs1MDQsNyBAQCBfX25sZGJsX3dzY2FuZiAoY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCisgCisgICByZXR1cm4gZG9uZTsKKyB9CisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC01MDYsNiArNTIwLDcgQEAgX19ubGRibF9fX2ZwcmludGZfY2hrIChGSUxFICpzdHJlYW0sIGludCBmbGFnLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX2Z3cHJpbnRmX2NoayAoRklMRSAqc3RyZWFtLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCAuLi4pCitAQCAtNTE5LDYgKzUzNCw3IEBAIF9fbmxkYmxfX19md3ByaW50Zl9jaGsgKEZJTEUgKnN0cmVhbSwgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNTYzLDYgKzU3OSw3IEBAIF9fbmxkYmxfX19zcHJpbnRmX2NoayAoY2hhciAqcywgaW50IGZsYWcsIHNpemVfdCBzbGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyAgIHJldHVybiBkb25lOworIH0KKyAKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCisgX19ubGRibF9fX3N3cHJpbnRmX2NoayAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGludCBmbGFnLCBzaXplX3Qgc2xlbiwKK0BAIC01NzcsNiArNTk0LDcgQEAgX19ubGRibF9fX3N3cHJpbnRmX2NoayAod2NoYXJfdCAqcywgc2l6ZV90IG4sIGludCBmbGFnLCBzaXplX3Qgc2xlbiwKKyAKKyAgIHJldHVybiBkb25lOworIH0KKysjZW5kaWYKKyAKKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorQEAgLTU5MCw2ICs2MDgsNyBAQCBfX25sZGJsX19fdmZwcmludGZfY2hrIChGSUxFICpzLCBpbnQgZmxhZywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQorIH0KKyBsaWJjX2hpZGRlbl9kZWYgKF9fbmxkYmxfX192ZnByaW50Zl9jaGspCisgCisrI2lmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBpbnQKKyBhdHRyaWJ1dGVfY29tcGF0X3RleHRfc2VjdGlvbgorIF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpzLCBpbnQgZmxhZywgY29uc3Qgd2NoYXJfdCAqZm10LCB2YV9saXN0IGFwKQorQEAgLTYwMSw2ICs2MjAsNyBAQCBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqcywgaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgdmFfbGlzdCBhcCkKKyAgIHJldHVybiByZXM7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3Zmd3ByaW50Zl9jaGspCisrI2VuZGlmCisgCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK0BAIC02MzUsNiArNjU1LDcgQEAgX19ubGRibF9fX3ZzcHJpbnRmX2NoayAoY2hhciAqc3RyaW5nLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sIGNvbnN0IGNoYXIgKmZtdCwKKyB9CisgbGliY19oaWRkZW5fZGVmIChfX25sZGJsX19fdnNwcmludGZfY2hrKQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqc3RyaW5nLCBzaXplX3QgbWF4bGVuLCBpbnQgZmxhZywgc2l6ZV90IHNsZW4sCitAQCAtNjY4LDYgKzY4OSw3IEBAIF9fbmxkYmxfX193cHJpbnRmX2NoayAoaW50IGZsYWcsIGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorIGludAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtNzc1LDYgKzc5Nyw3IEBAIF9fbmxkYmxfX19wcmludGZfZnAgKEZJTEUgKmZwLCBjb25zdCBzdHJ1Y3QgcHJpbnRmX2luZm8gKmluZm8sCisgICByZXR1cm4gX19fcHJpbnRmX2ZwIChmcCwgJmluZm9fbm9fbGRibCwgYXJncyk7CisgfQorIAorKyNpZiBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyBzc2l6ZV90CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX3N0cmZtb24gKGNoYXIgKnMsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK0BAIC04MjksNiArODUyLDcgQEAgX19ubGRibF9fX3ZzdHJmbW9uX2wgKGNoYXIgKnMsIHNpemVfdCBtYXhzaXplLCBfX2xvY2FsZV90IGxvYywKKyAgIHJldHVybiByZXM7CisgfQorIGxpYmNfaGlkZGVuX2RlZiAoX19ubGRibF9fX3ZzdHJmbW9uX2wpCisrI2VuZGlmCisgCisgdm9pZAorIGF0dHJpYnV0ZV9jb21wYXRfdGV4dF9zZWN0aW9uCitAQCAtOTQxLDYgKzk2NSw3IEBAIF9fbmxkYmxfX19pc29jOTlfc2NhbmYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgcmV0dXJuIGRvbmU7CisgfQorIAorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisgaW50CisgYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KKyBfX25sZGJsX19faXNvYzk5X3Zmd3NjYW5mIChGSUxFICpzLCBjb25zdCB3Y2hhcl90ICpmbXQsIHZhX2xpc3QgYXApCitAQCAtMTAxNCw2ICsxMDM5LDcgQEAgX19ubGRibF9fX2lzb2M5OV93c2NhbmYgKGNvbnN0IHdjaGFyX3QgKmZtdCwgLi4uKQorIAorICAgcmV0dXJuIGRvbmU7CisgfQorKyNlbmRpZgorIAorICNpZiBMT05HX0RPVUJMRV9DT01QQVQobGliYywgR0xJQkNfMl8wKQorIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfX0lPX3ByaW50ZiwgX0lPX3ByaW50ZiwgR0xJQkNfMl8wKTsKK0BAIC0xMDU3LDYgKzEwODMsNyBAQCBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3ByaW50Zl9zaXplLCBwcmludGZfc2l6ZSwgR0xJQkNfMl8xKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX19fc3RyZm1vbl9sLCBfX3N0cmZtb25fbCwgR0xJQkNfMl8xKTsKKyAjZW5kaWYKKyAjaWYgTE9OR19ET1VCTEVfQ09NUEFUKGxpYmMsIEdMSUJDXzJfMikKKysjIGlmIF9fT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8KKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3N3cHJpbnRmLCBzd3ByaW50ZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3Z3cHJpbnRmLCB2d3ByaW50ZiwgR0xJQkNfMl8yKTsKKyBjb21wYXRfc3ltYm9sIChsaWJjLCBfX25sZGJsX3dwcmludGYsIHdwcmludGYsIEdMSUJDXzJfMik7CitAQCAtMTA2OSw2ICsxMDk2LDcgQEAgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92ZndzY2FuZiwgdmZ3c2NhbmYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92c3dzY2FuZiwgdnN3c2NhbmYsIEdMSUJDXzJfMik7CisgY29tcGF0X3N5bWJvbCAobGliYywgX19ubGRibF92d3NjYW5mLCB2d3NjYW5mLCBHTElCQ18yXzIpOworIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfd3NjYW5mLCB3c2NhbmYsIEdMSUJDXzJfMik7CisrIyBlbmRpZgorICNlbmRpZgorICNpZiBMT05HX0RPVUJMRV9DT01QQVQobGliYywgR0xJQkNfMl8zKQorIGNvbXBhdF9zeW1ib2wgKGxpYmMsIF9fbmxkYmxfc3RyZm1vbl9sLCBzdHJmbW9uX2wsIEdMSUJDXzJfMyk7CitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oIGIvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oCitpbmRleCAwZDJjOGFmLi5mNGNlYTUwIDEwMDY0NAorLS0tIGEvc3lzZGVwcy9pZWVlNzU0L2xkYmwtb3B0L25sZGJsLWNvbXBhdC5oCisrKysgYi9zeXNkZXBzL2llZWU3NTQvbGRibC1vcHQvbmxkYmwtY29tcGF0LmgKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPG1hdGguaD4KKyAjaW5jbHVkZSA8bW9uZXRhcnkuaD4KKyAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPgorKyNpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorIAorIAorIC8qIERlY2xhcmUgdGhlIF9fbmxkYmxfTkFNRSBmdW5jdGlvbiB0aGUgd3JhcHBlcnMgY2FsbCB0aGF0J3MgaW4gbGliYy5zby4gICovCitAQCAtMzcsMTkgKzM4LDE1IEBACisgCisgTkxEQkxfREVDTCAoX0lPX3Zmc2NhbmYpOworIE5MREJMX0RFQ0wgKHZmc2NhbmYpOworLU5MREJMX0RFQ0wgKHZmd3NjYW5mKTsKKyBOTERCTF9ERUNMIChvYnN0YWNrX3ZwcmludGYpOworIE5MREJMX0RFQ0wgKHZhc3ByaW50Zik7CisgTkxEQkxfREVDTCAoZHByaW50Zik7CisgTkxEQkxfREVDTCAodmRwcmludGYpOworIE5MREJMX0RFQ0wgKGZwcmludGYpOworIE5MREJMX0RFQ0wgKHZmcHJpbnRmKTsKKy1OTERCTF9ERUNMICh2ZndwcmludGYpOworIE5MREJMX0RFQ0wgKHZzbnByaW50Zik7CisgTkxEQkxfREVDTCAodnNwcmludGYpOworIE5MREJMX0RFQ0wgKHZzc2NhbmYpOworLU5MREJMX0RFQ0wgKHZzd3ByaW50Zik7CistTkxEQkxfREVDTCAodnN3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9fYXNwcmludGYpOworIE5MREJMX0RFQ0wgKGFzcHJpbnRmKTsKKyBOTERCTF9ERUNMIChfX3ByaW50Zl9mcCk7CitAQCAtNjYsMTIgKzYzLDE4IEBAIE5MREJMX0RFQ0wgKF9faXNvYzk5X3NzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdnNjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92ZnNjYW5mKTsKKyBOTERCTF9ERUNMIChfX2lzb2M5OV92c3NjYW5mKTsKKysjaWYgX19PUFRJT05fUE9TSVhfV0lERV9DSEFSX0RFVklDRV9JTworK05MREJMX0RFQ0wgKHZmd3NjYW5mKTsKKytOTERCTF9ERUNMICh2ZndwcmludGYpOworK05MREJMX0RFQ0wgKHZzd3ByaW50Zik7CisrTkxEQkxfREVDTCAodnN3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfZndzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfc3dzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdndzY2FuZik7CisgTkxEQkxfREVDTCAoX19pc29jOTlfdmZ3c2NhbmYpOworIE5MREJMX0RFQ0wgKF9faXNvYzk5X3Zzd3NjYW5mKTsKKysjZW5kaWYKKyAKKyAvKiBUaGlzIG9uZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbm9ybWFsIGludGVyZmFjZSwgb25seQorICAgIF9fbmxkYmxfX192c3RyZm1vbiByZWFsbHkgZXhpc3RzLiAgKi8KK0BAIC04MiwyMiArODUsMjMgQEAgZXh0ZXJuIHNzaXplX3QgX19ubGRibF9fX3ZzdHJmbW9uIChjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCB2YV9saXN0KQorICAgIHNpbmNlIHdlIGRvbid0IGNvbXBpbGUgd2l0aCBfRk9SVElGWV9TT1VSQ0UuICAqLworIGV4dGVybiBpbnQgX19ubGRibF9fX3ZmcHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCwgaW50LAorIAkJCQkgICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBfR192YV9saXN0KTsKKy1leHRlcm4gaW50IF9fbmxkYmxfX192ZndwcmludGZfY2hrIChGSUxFICpfX3Jlc3RyaWN0LCBpbnQsCistCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCk7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdnNwcmludGZfY2hrIChjaGFyICpfX3Jlc3RyaWN0LCBpbnQsIHNpemVfdCwKKyAJCQkJICAgY29uc3QgY2hhciAqX19yZXN0cmljdCwgX0dfdmFfbGlzdCkgX19USFJPVzsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192c25wcmludGZfY2hrIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGludCwgc2l6ZV90LAorIAkJCQkgICAgY29uc3QgY2hhciAqX19yZXN0cmljdCwgX0dfdmFfbGlzdCkKKyAgIF9fVEhST1c7CistZXh0ZXJuIGludCBfX25sZGJsX19fdnN3cHJpbnRmX2NoayAod2NoYXJfdCAqX19yZXN0cmljdCwgc2l6ZV90LCBpbnQsIHNpemVfdCwKKy0JCQkJICAgIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsIF9fZ251Y192YV9saXN0KQorLSAgX19USFJPVzsKKyBleHRlcm4gaW50IF9fbmxkYmxfX192YXNwcmludGZfY2hrIChjaGFyICoqLCBpbnQsIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCkKKyAgIF9fVEhST1c7CisgZXh0ZXJuIGludCBfX25sZGJsX19fdmRwcmludGZfY2hrIChpbnQsIGludCwgY29uc3QgY2hhciAqLCBfR192YV9saXN0KTsKKyBleHRlcm4gaW50IF9fbmxkYmxfX19vYnN0YWNrX3ZwcmludGZfY2hrIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKKyAJCQkJCSAgX0dfdmFfbGlzdCkgX19USFJPVzsKKyBleHRlcm4gdm9pZCBfX25sZGJsX19fdnN5c2xvZ19jaGsgKGludCwgaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworLQorKyNpZiBfX09QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPCisrZXh0ZXJuIGludCBfX25sZGJsX19fdmZ3cHJpbnRmX2NoayAoRklMRSAqX19yZXN0cmljdCwgaW50LAorKwkJCQkgICAgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwgX19nbnVjX3ZhX2xpc3QpOworK2V4dGVybiBpbnQgX19ubGRibF9fX3Zzd3ByaW50Zl9jaGsgKHdjaGFyX3QgKl9fcmVzdHJpY3QsIHNpemVfdCwgaW50LCBzaXplX3QsCisrCQkJCSAgICBjb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LCBfX2dudWNfdmFfbGlzdCkKKysgIF9fVEhST1c7CisrI2VuZGlmCisgCisgI2VuZGlmIC8qIF9fTkxEQkxfQ09NUEFUX0ggKi8KK2RpZmYgLS1naXQgYS9zeXNkZXBzL25wdGwvTWFrZWZpbGUgYi9zeXNkZXBzL25wdGwvTWFrZWZpbGUKK2luZGV4IGU5MzM5YTMuLjc4MjAwOWIgMTAwNjQ0CistLS0gYS9zeXNkZXBzL25wdGwvTWFrZWZpbGUKKysrKyBiL3N5c2RlcHMvbnB0bC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDkgQEAKKyAKKyBpZmVxICgkKHN1YmRpciksbnB0bCkKKyBsaWJwdGhyZWFkLXN5c2RlcF9yb3V0aW5lcyArPSBlcnJuby1sb2MKKytpZmVxICgkKE9QVElPTl9FR0xJQkNfQklHX01BQ1JPUyksbikKKytzeXNkZXBfcm91dGluZXMgKz0gc21hbGwtbWFjcm9zLWZucworK2VuZGlmCisgZW5kaWYKKyAKKyBpZmVxICgkKHN1YmRpcikscnQpCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrLmggYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaAoraW5kZXggNTU5OWNmMS4uYjgzOTM3OCAxMDA2NDQKKy0tLSBhL3N5c2RlcHMvbnB0bC9iaXRzL2xpYmMtbG9jay5oCisrKysgYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2suaAorQEAgLTI0LDYgKzI0LDE0IEBACisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorIAorIAorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8bG93bGV2ZWxsb2NrLmg+CisrIyBpbmNsdWRlIDx0bHMuaD4KKysjIGluY2x1ZGUgPHB0aHJlYWQtZnVuY3Rpb25zLmg+CisrIyBpbmNsdWRlIDxlcnJuby5oPiAvKiBGb3IgRUJVU1kuICAqLworKyMgaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4gLyogRm9yIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLiAgKi8KKysjZW5kaWYKKysKKyAvKiBNdXRleCB0eXBlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyB8fCBkZWZpbmVkIF9JT19NVFNBRkVfSU8KKyAjIGlmICghSVNfSU4gKGxpYmMpICYmICFJU19JTiAobGlicHRocmVhZCkpIHx8ICFkZWZpbmVkIF9MSUJDCitAQCAtODcsNiArOTUsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgX19saWJjX2xvY2tfcmVjdXJzaXZlX29wYXF1ZV9fIF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OworIAorIC8qIExvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyAmJiAoSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKSkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIHZvaWQgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja19sb2NrX3JlY3Vyc2l2ZV9mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworKworICMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIGRvIHsJCQkJCQkJCQkgICAgICBcCisgICAgIHZvaWQgKnNlbGYgPSBUSFJFQURfU0VMRjsJCQkJCQkgICAgICBcCitAQCAtOTcsNiArMTE0LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAgICAgICB9CQkJCQkJCQkJICAgICAgXAorICAgICArKyhOQU1FKS5jbnQ7CQkJCQkJCSAgICAgIFwKKyAgIH0gd2hpbGUgKDApCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkJCQkJXAorKyAgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF9sb2NrLCAoJihOQU1FKS5tdXRleCksIDApCitAQCAtMTA0LDYgKzEyNSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCisgLyogVHJ5IHRvIGxvY2sgdGhlIHJlY3Vyc2l2ZSBuYW1lZCBsb2NrIHZhcmlhYmxlLiAgKi8KKyAjaWYgZGVmaW5lZCBfTElCQyAmJiAoSVNfSU4gKGxpYmMpIHx8IElTX0lOIChsaWJwdGhyZWFkKSkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TIG9yIHdlIGFyZSB1c2luZyBhIGJhY2sgZG9vciBmcm9tCisrICAgc21hbGwtbWFjcm9zLWZucy5jIChfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyA9PSAyKS4gICovCisrZXh0ZXJuIGludCBfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgKHsJCQkJCQkJCQkgICAgICBcCisgICAgIGludCByZXN1bHQgPSAwOwkJCQkJCQkgICAgICBcCitAQCAtMTIyLDYgKzE1MSwxMCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgICAgICAgKysoTkFNRSkuY250OwkJCQkJCQkgICAgICBcCisgICAgIHJlc3VsdDsJCQkJCQkJCSAgICAgIFwKKyAgIH0pCisrIyBlbHNlCisrIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgX19saWJjX21heWJlX2NhbGwgKF9fcHRocmVhZF9tdXRleF90cnlsb2NrLCAoJihOQU1FKS5tdXRleCksIDApCitAQCAtMTI5LDYgKzE2MiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBfX2xpYmNfbG9ja19yZWN1cnNpdmVfb3BhcXVlX18gX19saWJjX2xvY2tfcmVjdXJzaXZlX3Q7CisgCisgLyogVW5sb2NrIHRoZSByZWN1cnNpdmUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIGRlZmluZWQgX0xJQkMgJiYgKElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkpCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxCisrLyogRUdMSUJDOiBEZWNsYXJlIHdyYXBwZXIgZnVuY3Rpb24gZm9yIGEgYmlnIG1hY3JvIGlmIGVpdGhlcgorKyAgICFfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUywgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlX2ZuIChfX2xpYmNfbG9ja19yZWN1cnNpdmVfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbik7CisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAhPSAxICovCisrIyBpZiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUworIC8qIFdlIGRvIG5vIGVycm9yIGNoZWNraW5nIGhlcmUuICAqLworICMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorICAgZG8gewkJCQkJCQkJCSAgICAgIFwKK0BAIC0xMzgsNiArMTc5LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV9vcGFxdWVfXyBfX2xpYmNfbG9ja19yZWN1cnNpdmVfdDsKKyAJbGxsX3VubG9jayAoKE5BTUUpLmxvY2ssIExMTF9QUklWQVRFKTsJCQkJICAgICAgXAorICAgICAgIH0JCQkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmUoTkFNRSkgXAorKyAgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbiAoJihOQU1FKSkKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICovCisgI2Vsc2UKKyAjIGRlZmluZSBfX2xpYmNfbG9ja191bmxvY2tfcmVjdXJzaXZlKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrLCAoJihOQU1FKS5tdXRleCksIDApCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oIGIvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oCitpbmRleCBmNTVmNjIxLi5kYTk4ODY5IDEwMDY0NAorLS0tIGEvc3lzZGVwcy9ucHRsL2JpdHMvbGliYy1sb2NrUC5oCisrKysgYi9zeXNkZXBzL25wdGwvYml0cy9saWJjLWxvY2tQLmgKK0BAIC0zMyw2ICszMyw4IEBACisgI2luY2x1ZGUgPGxvd2xldmVsbG9jay5oPgorICNpbmNsdWRlIDx0bHMuaD4KKyAjaW5jbHVkZSA8cHRocmVhZC1mdW5jdGlvbnMuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4gLyogRm9yIEVCVVNZLiAgKi8KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4gLyogRm9yIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLiAgKi8KKyAKKyAjaWYgSVNfSU4gKGxpYnB0aHJlYWQpCisgLyogVGhpcyBnZXRzIHVzIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIF9fcHRocmVhZF8qIGludGVybmFsIG5hbWVzLAorQEAgLTE3MSwxMCArMTczLDIyIEBAIHR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2xpYmNfa2V5X3Q7CisgCisgLyogTG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkKKy0jIGlmbmRlZiBfX2xpYmNfbG9ja19sb2NrCistIyAgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgXAorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gdm9pZCBfX2xpYmNfbG9ja19sb2NrX2ZuIChfX2xpYmNfbG9ja190ICopOworK2xpYmNfaGlkZGVuX3Byb3RvIChfX2xpYmNfbG9ja19sb2NrX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisrIyAgaWZuZGVmIF9fbGliY19sb2NrX2xvY2sKKysjICAgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgXAorICAgKHsgbGxsX2xvY2sgKE5BTUUsIExMTF9QUklWQVRFKTsgMDsgfSkKKy0jIGVuZGlmCisrIyAgZW5kaWYKKysjIGVsc2UKKysjICBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSAgICAgICAgICAgICAgIFwKKysgIF9fbGliY19sb2NrX2xvY2tfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyB1bmRlZiBfX2xpYmNfbG9ja19sb2NrCisgIyBkZWZpbmUgX19saWJjX2xvY2tfbG9jayhOQU1FKSBcCitAQCAtMTg3LDEwICsyMDEsMjIgQEAgdHlwZWRlZiBwdGhyZWFkX2tleV90IF9fbGliY19rZXlfdDsKKyAKKyAvKiBUcnkgdG8gbG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkKKy0jIGlmbmRlZiBfX2xpYmNfbG9ja190cnlsb2NrCistIyAgZGVmaW5lIF9fbGliY19sb2NrX3RyeWxvY2soTkFNRSkgXAorKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMQorKy8qIEVHTElCQzogRGVjbGFyZSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBhIGJpZyBtYWNybyBpZiBlaXRoZXIKKysgICAhX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1Mgb3Igd2UgYXJlIHVzaW5nIGEgYmFjayBkb29yIGZyb20KKysgICBzbWFsbC1tYWNyb3MtZm5zLmMgKF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TID09IDIpLiAgKi8KKytleHRlcm4gaW50IF9fbGliY19sb2NrX3RyeWxvY2tfZm4gKF9fbGliY19sb2NrX3QgKik7CisrbGliY19oaWRkZW5fcHJvdG8gKF9fbGliY19sb2NrX3RyeWxvY2tfZm4pOworKyMgZW5kaWYgLyogX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgIT0gMSAqLworKyMgaWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysjICBpZm5kZWYgX19saWJjX2xvY2tfdHJ5bG9jaworKyMgICBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCisgICBsbGxfdHJ5bG9jayAoTkFNRSkKKy0jIGVuZGlmCisrIyAgZW5kaWYKKysjIGVsc2UKKysjIGRlZmluZSBfX2xpYmNfbG9ja190cnlsb2NrKE5BTUUpIFwKKysgIF9fbGliY19sb2NrX3RyeWxvY2tfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyB1bmRlZiBfX2xpYmNfbG9ja190cnlsb2NrCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdHJ5bG9jayhOQU1FKSBcCitAQCAtMjA2LDggKzIzMiwyMCBAQCB0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19saWJjX2tleV90OworIAorIC8qIFVubG9jayB0aGUgbmFtZWQgbG9jayB2YXJpYWJsZS4gICovCisgI2lmIElTX0lOIChsaWJjKSB8fCBJU19JTiAobGlicHRocmVhZCkKKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEKKysvKiBFR0xJQkM6IERlY2xhcmUgd3JhcHBlciBmdW5jdGlvbiBmb3IgYSBiaWcgbWFjcm8gaWYgZWl0aGVyCisrICAgIV9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TLCBvciB3ZSBhcmUgdXNpbmcgYSBiYWNrIGRvb3IgZnJvbQorKyAgIHNtYWxsLW1hY3Jvcy1mbnMuYyAoX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MgPT0gMikuICAqLworK2V4dGVybiB2b2lkIF9fbGliY19sb2NrX3VubG9ja19mbiAoX19saWJjX2xvY2tfdCAqKTsKKytsaWJjX2hpZGRlbl9wcm90byAoX19saWJjX2xvY2tfdW5sb2NrX2ZuKTsKKysjIGVuZGlmIC8qIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TICE9IDEgKi8KKysjIGlmIF9fT1BUSU9OX0VHTElCQ19CSUdfTUFDUk9TCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIFwKKyAgIGxsbF91bmxvY2sgKE5BTUUsIExMTF9QUklWQVRFKQorKyMgZWxzZQorKyMgZGVmaW5lIF9fbGliY19sb2NrX3VubG9jayhOQU1FKSBcCisrICBfX2xpYmNfbG9ja191bmxvY2tfZm4gKCYoTkFNRSkpCisrIyBlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAqLworICNlbHNlCisgIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIFwKKyAgIF9fbGliY19tYXliZV9jYWxsIChfX3B0aHJlYWRfbXV0ZXhfdW5sb2NrLCAoJihOQU1FKSksIDApCitkaWZmIC0tZ2l0IGEvc3lzZGVwcy9ucHRsL3NtYWxsLW1hY3Jvcy1mbnMuYyBiL3N5c2RlcHMvbnB0bC9zbWFsbC1tYWNyb3MtZm5zLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mNzUxMDUzCistLS0gL2Rldi9udWxsCisrKysgYi9zeXNkZXBzL25wdGwvc21hbGwtbWFjcm9zLWZucy5jCitAQCAtMCwwICsxLDcyIEBACisrLyogRUdMSUJDOiBmdW5jdGlvbiB3cmFwcGVycyBmb3IgYmlnIG1hY3Jvcy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisrICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUKKysgICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LAorKyAgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKysgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrCisrLyogSGFuZGxlIG1hY3JvcyBmcm9tIC4vYml0cy9saWJjLWxvY2suaC4gICovCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkKKysKKysvKiBHZXQgdGhlIG1hY3JvcyBmb3IgZnVuY3Rpb24gYm9kaWVzIHRocm91Z2ggYSBiYWNrIGRvb3IuICAqLworKyMgdW5kZWYgX19PUFRJT05fRUdMSUJDX0JJR19NQUNST1MKKysjIGRlZmluZSBfX09QVElPTl9FR0xJQkNfQklHX01BQ1JPUyAyCisrIyBpbmNsdWRlIDxiaXRzL2xpYmMtbG9jay5oPgorKworK3ZvaWQKKytfX2xpYmNfbG9ja19sb2NrX2ZuIChfX2xpYmNfbG9ja190ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX2xvY2sgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja19sb2NrX2ZuKTsKKysKKyt2b2lkCisrX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4gKF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90ICpuYW1lKQorK3sKKysgIF9fbGliY19sb2NrX2xvY2tfcmVjdXJzaXZlICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfbG9ja19yZWN1cnNpdmVfZm4pOworKworK2ludAorK19fbGliY19sb2NrX3RyeWxvY2tfZm4gKF9fbGliY19sb2NrX3QgKm5hbWUpCisreworKyAgcmV0dXJuIF9fbGliY19sb2NrX3RyeWxvY2sgKCpuYW1lKTsKKyt9CisrbGliY19oaWRkZW5fZGVmIChfX2xpYmNfbG9ja190cnlsb2NrX2ZuKTsKKysKKytpbnQKKytfX2xpYmNfbG9ja190cnlsb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKm5hbWUpCisreworKyAgcmV0dXJuIF9fbGliY19sb2NrX3RyeWxvY2tfcmVjdXJzaXZlICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdHJ5bG9ja19yZWN1cnNpdmVfZm4pOworKworK3ZvaWQKKytfX2xpYmNfbG9ja191bmxvY2tfZm4gKF9fbGliY19sb2NrX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfdW5sb2NrICgqbmFtZSk7CisrfQorK2xpYmNfaGlkZGVuX2RlZiAoX19saWJjX2xvY2tfdW5sb2NrX2ZuKTsKKysKKyt2b2lkCisrX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZV9mbiAoX19saWJjX2xvY2tfcmVjdXJzaXZlX3QgKm5hbWUpCisreworKyAgX19saWJjX2xvY2tfdW5sb2NrX3JlY3Vyc2l2ZSAoKm5hbWUpOworK30KKytsaWJjX2hpZGRlbl9kZWYgKF9fbGliY19sb2NrX3VubG9ja19yZWN1cnNpdmVfZm4pOworKworKyNlbmRpZiAvKmRlZmluZWQgX0xJQkMgJiYgKCFkZWZpbmVkIE5PVF9JTl9saWJjIHx8IGRlZmluZWQgSVNfSU5fbGlicHRocmVhZCkqLworZGlmZiAtLWdpdCBhL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2dldGhvc3RpZC5jIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMKK2luZGV4IDI2ZTQ2OTIuLmQwYTI2YzggMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRob3N0aWQuYworKysrIGIvc3lzZGVwcy91bml4L3N5c3YvbGludXgvZ2V0aG9zdGlkLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxub3QtY2FuY2VsLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2RlZmluZSBIT1NUSURGSUxFICIvZXRjL2hvc3RpZCIKKyAKK0BAIC04OSw2ICs5MCw3IEBAIGdldGhvc3RpZCAodm9pZCkKKyAJcmV0dXJuIGlkOworICAgICB9CisgCisrI2lmIF9fT1BUSU9OX0VHTElCQ19JTkVUCisgICAvKiBHZXR0aW5nIGZyb20gdGhlIGZpbGUgd2FzIG5vdCBzdWNjZXNzZnVsLiAgQW4gaW50ZWxsaWdlbnQgZ3Vlc3MgZm9yCisgICAgICBhIHVuaXF1ZSBudW1iZXIgb2YgYSBob3N0IGlzIGl0cyBJUCBhZGRyZXNzLiAgUmV0dXJuIHRoaXMuICAqLworICAgaWYgKF9fZ2V0aG9zdG5hbWUgKGhvc3RuYW1lLCBNQVhIT1NUTkFNRUxFTikgPCAwIHx8IGhvc3RuYW1lWzBdID09ICdcMCcpCitAQCAtMTE1LDUgKzExNyw5IEBAIGdldGhvc3RpZCAodm9pZCkKKyAgIC8qIEZvciB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIG5vdCBleGFjdGx5IHRoZSBJUCBhZGRyZXNzIHdlIGRvIHNvbWUKKyAgICAgIGJpdCBmaWRkbGluZy4gICovCisgICByZXR1cm4gKGludDMyX3QpIChpbi5zX2FkZHIgPDwgMTYgfCBpbi5zX2FkZHIgPj4gMTYpOworKyNlbHNlCisrICAvKiBSZXR1cm4gYW4gYXJiaXRyYXJ5IHZhbHVlLiAgKi8KKysgIHJldHVybiAwOworKyNlbmRpZgorIH0KKyAjZW5kaWYKK2RpZmYgLS1naXQgYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMgYi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMKK2luZGV4IDUzYThiYmIuLmNiMTEwZDQgMTAwNjQ0CistLS0gYS9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9saWJjX2ZhdGFsLmMKKysrKyBiL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2xpYmNfZmF0YWwuYworQEAgLTIzLDYgKzIzLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisgI2luY2x1ZGUgPHN5cy91aW8uaD4KKysjaW5jbHVkZSA8Z251L29wdGlvbi1ncm91cHMuaD4KKyAKKyBzdGF0aWMgYm9vbAorIHdyaXRldl9mb3JfZmF0YWwgKGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHNpemVfdCBuaW92LCBzaXplX3QgdG90YWwpCitAQCAtNDAsNiArNDEsNyBAQCB3cml0ZXZfZm9yX2ZhdGFsIChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBzaXplX3Qgbmlvdiwgc2l6ZV90IHRvdGFsKQorIHN0YXRpYyB2b2lkCisgYmFja3RyYWNlX2FuZF9tYXBzIChpbnQgZG9fYWJvcnQsIGJvb2wgd3JpdHRlbiwgaW50IGZkKQorIHsKKysjaWYgX19PUFRJT05fRUdMSUJDX0JBQ0tUUkFDRQorICAgaWYgKGRvX2Fib3J0ID4gMSAmJiB3cml0dGVuKQorICAgICB7CisgICAgICAgdm9pZCAqYWRkcnNbNjRdOworQEAgLTYyLDYgKzY0LDcgQEAgYmFja3RyYWNlX2FuZF9tYXBzIChpbnQgZG9fYWJvcnQsIGJvb2wgd3JpdHRlbiwgaW50IGZkKQorICAgICAgICAgICBjbG9zZV9ub3RfY2FuY2VsX25vX3N0YXR1cyAoZmQyKTsKKyAgICAgICAgIH0KKyAgICAgfQorKyNlbmRpZiAvKiBfX09QVElPTl9FR0xJQkNfQkFDS1RSQUNFICovCisgfQorICNkZWZpbmUgQkVGT1JFX0FCT1JUCQliYWNrdHJhY2VfYW5kX21hcHMKKyAKK2RpZmYgLS1naXQgYS90aW1lL01ha2VmaWxlIGIvdGltZS9NYWtlZmlsZQoraW5kZXggYTQxMWY2Mi4uMmQwMjJjYSAxMDA2NDQKKy0tLSBhL3RpbWUvTWFrZWZpbGUKKysrKyBiL3RpbWUvTWFrZWZpbGUKK0BAIC0xOCw2ICsxOCw4IEBACisgIworICMJTWFrZWZpbGUgZm9yIHRpbWUgcm91dGluZXMKKyAjCisraW5jbHVkZSAuLi9vcHRpb24tZ3JvdXBzLm1haworKworIHN1YmRpcgk6PSB0aW1lCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCitAQCAtMzAsMTUgKzMyLDIzIEBAIHJvdXRpbmVzIDo9IG9mZnRpbWUgYXNjdGltZSBjbG9jayBjdGltZSBjdGltZV9yIGRpZmZ0aW1lIFwKKyAJICAgIHR6ZmlsZSBnZXRpdGltZXIgc2V0aXRpbWVyCQkJIFwKKyAJICAgIHN0aW1lIGR5c2l6ZSB0aW1lZ20gZnRpbWUJCQkgXAorIAkgICAgZ2V0ZGF0ZSBzdHJwdGltZSBzdHJwdGltZV9sCQkJIFwKKy0JICAgIHN0cmZ0aW1lIHdjc2Z0aW1lIHN0cmZ0aW1lX2wgd2NzZnRpbWVfbAkgXAorKwkgICAgc3RyZnRpbWUgc3RyZnRpbWVfbAkJCQkgXAorIAkgICAgdGltZXNwZWNfZ2V0CistYXV4IDo9CSAgICBlcmEgYWx0X2RpZ2l0IGxjLXRpbWUtY2xlYW51cAorIAorLXRlc3RzCTo9IHRlc3RfdGltZSBjbG9ja3Rlc3QgdHN0LXBvc2l4dHogdHN0LXN0cnB0aW1lIHRzdF93Y3NmdGltZSBcCistCSAgIHRzdC1nZXRkYXRlIHRzdC1ta3RpbWUgdHN0LW1rdGltZTIgdHN0LWZ0aW1lX2wgdHN0LXN0cmZ0aW1lIFwKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSAgICAgICAgICAgICAgICBcCisrCSAgICA6PSB3Y3NmdGltZSB3Y3NmdGltZV9sCisrYXV4LSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgKz0gYWx0X2RpZ2l0IGVyYSBsYy10aW1lLWNsZWFudXAKKysKKyt0ZXN0cwk6PSB0ZXN0X3RpbWUgY2xvY2t0ZXN0IHRzdC1wb3NpeHR6IFwKKysJICAgdHN0LWdldGRhdGUgdHN0LW1rdGltZSB0c3QtbWt0aW1lMiB0c3Qtc3RyZnRpbWUgXAorIAkgICB0c3QtbWt0aW1lMyB0c3Qtc3RycHRpbWUyIGJ1Zy1hc2N0aW1lIGJ1Zy1hc2N0aW1lX3IgYnVnLW1rdGltZTEgXAorIAkgICB0c3Qtc3RycHRpbWUzIGJ1Zy1nZXRkYXRlMSB0c3Qtc3RycHRpbWUtd2hpdGVzcGFjZSB0c3QtZnRpbWUKKyAKKyt0ZXN0cy0kKE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpIFwKKysJICAgICAgICArPSB0c3Qtc3RycHRpbWUgdHN0LWZ0aW1lX2wKKyt0ZXN0cy0kKE9QVElPTl9QT1NJWF9XSURFX0NIQVJfREVWSUNFX0lPKSBcCisrCSAgICAgICAgKz0gdHN0X3djc2Z0aW1lCisrCisgaW5jbHVkZSAuLi9SdWxlcworIAorIHR6LWNmbGFncyA9IC1EVFpESVI9JyIkKHpvbmVkaXIpIicgXAorZGlmZiAtLWdpdCBhL3RpbWUvc3RyZnRpbWVfbC5jIGIvdGltZS9zdHJmdGltZV9sLmMKK2luZGV4IGI0OGVmMzQuLmJmZGQ2MTggMTAwNjQ0CistLS0gYS90aW1lL3N0cmZ0aW1lX2wuYworKysrIGIvdGltZS9zdHJmdGltZV9sLmMKK0BAIC0zNSw2ICszNSwxMCBAQAorICMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyAjZW5kaWYKKyAKKysjaWZkZWYgX0xJQkMKKysjIGluY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisrI2VuZGlmCisrCisgI2lmIGRlZmluZWQgZW1hY3MgJiYgIWRlZmluZWQgSEFWRV9CQ09QWQorICMgZGVmaW5lIEhBVkVfTUVNQ1BZIDEKKyAjZW5kaWYKK0BAIC04ODIsNyArODg2LDcgQEAgX19zdHJmdGltZV9pbnRlcm5hbCAocywgbWF4c2l6ZSwgZm9ybWF0LCB0cCwgdHpzZXRfY2FsbGVkIHV0X2FyZ3VtZW50CisgCWNhc2UgTF8oJ0MnKToKKyAJICBpZiAobW9kaWZpZXIgPT0gTF8oJ0UnKSkKKyAJICAgIHsKKy0jaWYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisrI2lmICghIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgJiYgSEFWRV9TVFJVQ1RfRVJBX0VOVFJZCisgCSAgICAgIHN0cnVjdCBlcmFfZW50cnkgKmVyYSA9IF9ubF9nZXRfZXJhX2VudHJ5ICh0cCBIRUxQRVJfTE9DQUxFX0FSRyk7CisgCSAgICAgIGlmIChlcmEpCisgCQl7CitAQCAtOTU1LDcgKzk1OSw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAorIAkgIGlmIChtb2RpZmllciA9PSBMXygnTycpICYmIDAgPD0gbnVtYmVyX3ZhbHVlKQorIAkgICAgeworLSNpZmRlZiBfTkxfQ1VSUkVOVAorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIGRlZmluZWQgKF9OTF9DVVJSRU5UKQorIAkgICAgICAvKiBHZXQgdGhlIGxvY2FsZSBzcGVjaWZpYyBhbHRlcm5hdGUgcmVwcmVzZW50YXRpb24gb2YKKyAJCSB0aGUgbnVtYmVyIE5VTUJFUl9WQUxVRS4gIElmIG5vbmUgZXhpc3QgTlVMTCBpcyByZXR1cm5lZC4gICovCisgCSAgICAgIGNvbnN0IENIQVJfVCAqY3AgPSBubF9nZXRfYWx0X2RpZ2l0IChudW1iZXJfdmFsdWUKK0BAIC0xMjYwLDcgKzEyNjQsNyBAQCBfX3N0cmZ0aW1lX2ludGVybmFsIChzLCBtYXhzaXplLCBmb3JtYXQsIHRwLCB0enNldF9jYWxsZWQgdXRfYXJndW1lbnQKKyAJY2FzZSBMXygnWScpOgorIAkgIGlmIChtb2RpZmllciA9PSAnRScpCisgCSAgICB7CistI2lmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorIAkgICAgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBfbmxfZ2V0X2VyYV9lbnRyeSAodHAgSEVMUEVSX0xPQ0FMRV9BUkcpOworIAkgICAgICBpZiAoZXJhKQorIAkJeworQEAgLTEyODUsNyArMTI4OSw3IEBAIF9fc3RyZnRpbWVfaW50ZXJuYWwgKHMsIG1heHNpemUsIGZvcm1hdCwgdHAsIHR6c2V0X2NhbGxlZCB1dF9hcmd1bWVudAorIAljYXNlIExfKCd5Jyk6CisgCSAgaWYgKG1vZGlmaWVyID09IExfKCdFJykpCisgCSAgICB7CistI2lmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIEhBVkVfU1RSVUNUX0VSQV9FTlRSWQorIAkgICAgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBfbmxfZ2V0X2VyYV9lbnRyeSAodHAgSEVMUEVSX0xPQ0FMRV9BUkcpOworIAkgICAgICBpZiAoZXJhKQorIAkJeworZGlmZiAtLWdpdCBhL3RpbWUvc3RycHRpbWVfbC5jIGIvdGltZS9zdHJwdGltZV9sLmMKK2luZGV4IDU2NDBjY2UuLjc4NGNjYmMgMTAwNjQ0CistLS0gYS90aW1lL3N0cnB0aW1lX2wuYworKysrIGIvdGltZS9zdHJwdGltZV9sLmMKK0BAIC0yOSw2ICsyOSw3IEBACisgCisgI2lmZGVmIF9MSUJDCisgIyBkZWZpbmUgSEFWRV9MT0NBTFRJTUVfUiAwCisrIyBpbmNsdWRlIDxnbnUvb3B0aW9uLWdyb3Vwcy5oPgorICMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyAjZW5kaWYKKyAKK0BAIC04NCw3ICs4NSw3IEBAIGxvY2FsdGltZV9yICh0LCB0cCkKKyAgICAgaWYgKHZhbCA8IGZyb20gfHwgdmFsID4gdG8pCQkJCQkJICAgICAgXAorICAgICAgIHJldHVybiBOVUxMOwkJCQkJCQkgICAgICBcCisgICB9IHdoaWxlICgwKQorLSNpZmRlZiBfTkxfQ1VSUkVOVAorKyNpZiAoISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUpICYmIGRlZmluZWQgKF9OTF9DVVJSRU5UKQorICMgZGVmaW5lIGdldF9hbHRfbnVtYmVyKGZyb20sIHRvLCBuKSBcCisgICAoewkJCQkJCQkJCSAgICAgIFwKKyAgICAgIF9fbGFiZWxfXyBkb19ub3JtYWw7CQkJCQkJICAgICAgXAorQEAgLTI1Nyw4ICsyNTgsMTAgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorICAgaW50IGNudDsKKyAgIGludCBjbnRfbG9uZ2VzdDsKKyAgIHNpemVfdCB2YWw7CisrI2lmICEgX0xJQkMgfHwgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgICBzaXplX3QgbnVtX2VyYXM7CisgICBzdHJ1Y3QgZXJhX2VudHJ5ICplcmEgPSBOVUxMOworKyNlbmRpZgorICAgZW51bSBwdGltZV9sb2NhbGVfc3RhdHVzIHsgbm90LCBsb2MsIHJhdyB9IGRlY2lkZWRfbG9uZ2VzdDsKKyAgIHN0cnVjdCBfX3N0cnB0aW1lX3N0YXRlCisgICB7CitAQCAtODIwLDYgKzgyMyw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAJICAgICAgcy53YW50X3hkYXkgPSAxOworIAkgICAgICBicmVhazsKKyAJICAgIGNhc2UgJ0MnOgorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorIAkgICAgICBpZiAocy5kZWNpZGVkICE9IHJhdykKKyAJCXsKKyAJCSAgaWYgKHMuZXJhX2NudCA+PSAwKQorQEAgLTg1NiwxMCArODYwLDEyIEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAKKyAJCSAgcy5kZWNpZGVkID0gcmF3OworIAkJfQorKyNlbmRpZgorIAkgICAgICAvKiBUaGUgQyBsb2NhbGUgaGFzIG5vIGVyYSBpbmZvcm1hdGlvbiwgc28gdXNlIHRoZQorIAkJIG5vcm1hbCByZXByZXNlbnRhdGlvbi4gICovCisgCSAgICAgIGdvdG8gbWF0Y2hfY2VudHVyeTsKKyAgCSAgICBjYXNlICd5JzoKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgaWYgKHMuZGVjaWRlZCAhPSByYXcpCisgCQl7CisgCQkgIGdldF9udW1iZXIoMCwgOTk5OSwgNCk7CitAQCAtOTE4LDkgKzkyNCwxMCBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCisgCQkgIHMuZGVjaWRlZCA9IHJhdzsKKyAJCX0KKy0KKysjZW5kaWYKKyAJICAgICAgZ290byBtYXRjaF95ZWFyX2luX2NlbnR1cnk7CisgCSAgICBjYXNlICdZJzoKKysjaWYgISBfTElCQyB8fCBfX09QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUKKyAJICAgICAgaWYgKHMuZGVjaWRlZCAhPSByYXcpCisgCQl7CisgCQkgIG51bV9lcmFzID0gX05MX0NVUlJFTlRfV09SRCAoTENfVElNRSwKK0BAIC05NDgsNiArOTU1LDcgQEAgX19zdHJwdGltZV9pbnRlcm5hbCAocnAsIGZtdCwgdG1wLCBzdGF0ZXAgTE9DQUxFX1BBUkFNKQorIAorIAkJICBzLmRlY2lkZWQgPSByYXc7CisgCQl9CisrI2VuZGlmCisgCSAgICAgIGdldF9udW1iZXIgKDAsIDk5OTksIDQpOworIAkgICAgICB0bS0+dG1feWVhciA9IHZhbCAtIDE5MDA7CisgCSAgICAgIHMud2FudF9jZW50dXJ5ID0gMDsKK0BAIC0xMTE4LDYgKzExMjYsNyBAQCBfX3N0cnB0aW1lX2ludGVybmFsIChycCwgZm10LCB0bXAsIHN0YXRlcCBMT0NBTEVfUEFSQU0pCisgCXRtLT50bV95ZWFyID0gKHMuY2VudHVyeSAtIDE5KSAqIDEwMDsKKyAgICAgfQorIAorKyNpZiAhIF9MSUJDIHx8IF9fT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERQorICAgaWYgKHMuZXJhX2NudCAhPSAtMSkKKyAgICAgeworICAgICAgIGVyYSA9IF9ubF9zZWxlY3RfZXJhX2VudHJ5IChzLmVyYV9jbnQgSEVMUEVSX0xPQ0FMRV9BUkcpOworQEAgLTExMzIsNiArMTE0MSw3IEBAIF9fc3RycHRpbWVfaW50ZXJuYWwgKHJwLCBmbXQsIHRtcCwgc3RhdGVwIExPQ0FMRV9QQVJBTSkKKyAJdG0tPnRtX3llYXIgPSBlcmEtPnN0YXJ0X2RhdGVbMF07CisgICAgIH0KKyAgIGVsc2UKKysjZW5kaWYKKyAgICAgaWYgKHMud2FudF9lcmEpCisgICAgICAgeworIAkvKiBObyBlcmEgZm91bmQgYnV0IHdlIGhhdmUgc2VlbiBhbiBFIG1vZGlmaWVyLiAgUmVjdGlmeSBzb21lCitkaWZmIC0tZ2l0IGEvdGltZXpvbmUvTWFrZWZpbGUgYi90aW1lem9uZS9NYWtlZmlsZQoraW5kZXggODg2YjA2ZS4uZjkyMjY4NCAxMDA2NDQKKy0tLSBhL3RpbWV6b25lL01ha2VmaWxlCisrKysgYi90aW1lem9uZS9NYWtlZmlsZQorQEAgLTEyNyw3ICsxMjcsNyBAQCAkKHRlc3RkYXRhKS9YVCU6IHRlc3RkYXRhL1hUJQorIAorICQob2JqcGZ4KXR6c2VsZWN0OiB0enNlbGVjdC5rc2ggJChjb21tb24tb2JqcGZ4KWNvbmZpZy5tYWtlCisgCXNlZCAtZSAnc3wvYmluL2Jhc2h8L2Jpbi9zaHwnIFwKKy0JICAgIC1lICdzfFRaRElSPVtefV0qfFRaRElSPSQoem9uZWRpcil8JyBcCisrCSAgICAtZSAnL1RaRElSPS9zfFwkJChwd2QpfCQoem9uZWRpcil8JyBcCisgCSAgICAtZSAnL1RaVkVSU0lPTj0vc3xzZWVfTWFrZWZpbGV8IiQodmVyc2lvbikifCcgXAorIAkgICAgLWUgJy9QS0dWRVJTSU9OPS9zfD0uKnw9IiQoUEtHVkVSU0lPTikifCcgXAorIAkgICAgLWUgJy9SRVBPUlRfQlVHU19UTz0vc3w9Lip8PSIkKFJFUE9SVF9CVUdTX1RPKSJ8JyBcCitkaWZmIC0tZ2l0IGEvd2NzbWJzL01ha2VmaWxlIGIvd2NzbWJzL01ha2VmaWxlCitpbmRleCA0NGE0NDk0Li5kYjlmYzI0IDEwMDY0NAorLS0tIGEvd2NzbWJzL01ha2VmaWxlCisrKysgYi93Y3NtYnMvTWFrZWZpbGUKK0BAIC0xOCwxNSArMTgsMjEgQEAKKyAjCisgIwlTdWItbWFrZWZpbGUgZm9yIHdjc21icyBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICMKKytpbmNsdWRlIC4uL29wdGlvbi1ncm91cHMubWFrCisrCisgc3ViZGlyCTo9IHdjc21icworIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworIAorIGhlYWRlcnMJOj0gd2NoYXIuaCBiaXRzL3djaGFyLmggYml0cy93Y2hhcjIuaCBiaXRzL3djaGFyLWxkYmwuaCB1Y2hhci5oCisgCistcm91dGluZXMgOj0gd2NzY2F0IHdjc2NociB3Y3NjbXAgd2NzY3B5IHdjc2NzcG4gd2NzZHVwIHdjc2xlbiB3Y3NuY2F0IFwKKysjIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBieSBwcmludGZfZnAuYywgZXZlbiBpbiB0aGUgcGxhaW4gY2FzZTsgc2VlCisrIyBjb21tZW50cyB0aGVyZSBmb3IgT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERS4KKytyb3V0aW5lcyAgOj0gd21lbWNweSB3bWVtc2V0Cisrcm91dGluZXMtJChPUFRJT05fUE9TSVhfQ19MQU5HX1dJREVfQ0hBUikgXAorKwkgIDo9IHdjc2NhdCB3Y3NjaHIgd2NzY21wIHdjc2NweSB3Y3Njc3BuIHdjc2R1cCB3Y3NsZW4gd2NzbmNhdCBcCisgCSAgICB3Y3NuY21wIHdjc25jcHkgd2NzcGJyayB3Y3NyY2hyIHdjc3NwbiB3Y3N0b2sgd2Nzc3RyIHdtZW1jaHIgXAorLQkgICAgd21lbWNtcCB3bWVtY3B5IHdtZW1tb3ZlIHdtZW1zZXQgd2NwY3B5IHdjcG5jcHkgd21lbXBjcHkgXAorKwkgICAgd21lbWNtcCB3bWVtbW92ZSB3Y3BjcHkgd2NwbmNweSB3bWVtcGNweSBcCisgCSAgICBidG93YyB3Y3RvYiBtYnNpbml0IFwKKyAJICAgIG1icmxlbiBtYnJ0b3djIHdjcnRvbWIgbWJzcnRvd2NzIHdjc3J0b21icyBcCisgCSAgICBtYnNucnRvd2NzIHdjc25ydG9tYnMgd2NzbmxlbiB3Y3NjaHJudWwgXAorQEAgLTM4LDE0ICs0NCwyMSBAQCByb3V0aW5lcyA6PSB3Y3NjYXQgd2NzY2hyIHdjc2NtcCB3Y3NjcHkgd2NzY3NwbiB3Y3NkdXAgd2NzbGVuIHdjc25jYXQgXAorIAkgICAgd2NzY29sbF9sIHdjc3hmcm1fbCBcCisgCSAgICB3Y3NjYXNlY21wIHdjc25jYXNlIHdjc2Nhc2VjbXBfbCB3Y3NuY2FzZV9sIFwKKyAJICAgIHdjc21ic2xvYWQgbWJzcnRvd2NzX2wgXAorLQkgICAgaXNvYzk5X3dzY2FuZiBpc29jOTlfdndzY2FuZiBpc29jOTlfZndzY2FuZiBpc29jOTlfdmZ3c2NhbmYgXAorIAkgICAgaXNvYzk5X3N3c2NhbmYgaXNvYzk5X3Zzd3NjYW5mIFwKKyAJICAgIG1icnRvYzE2IGMxNnJ0b21iCisgCistc3Ryb3AtdGVzdHMgOj0gIHdjc2NtcCB3Y3NuY21wIHdtZW1jbXAgd2NzbGVuIHdjc2NociB3Y3NyY2hyIHdjc2NweQorLXRlc3RzIDo9IHRzdC13Y3N0b2Ygd2NzbWJzLXRzdDEgdHN0LXdjc25sZW4gdHN0LWJ0b3djIHRzdC1tYnJ0b3djIFwKKy0JIHRzdC13Y3J0b21iIHRzdC13Y3BuY3B5IHRzdC1tYnNydG93Y3MgdHN0LXdjaGFyLWggdHN0LW1icnRvd2MyIFwKKy0JIHRzdC1jMTZjMzItMSB3Y3NhdGNsaWZmICQoYWRkcHJlZml4IHRlc3QtLCQoc3Ryb3AtdGVzdHMpKQorK3JvdXRpbmVzLSQoT1BUSU9OX1BPU0lYX1dJREVfQ0hBUl9ERVZJQ0VfSU8pICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkrPSBpc29jOTlfd3NjYW5mIGlzb2M5OV92d3NjYW5mIGlzb2M5OV9md3NjYW5mIGlzb2M5OV92ZndzY2FuZgorKworK3N0cm9wLXRlc3RzIDo9ICB3Y3NjbXAgd21lbWNtcCB3bWVtY21wIHdjc2xlbiB3Y3NjaHIgd2NzcmNociB3Y3NjcHkKKysKKyt0ZXN0cyA6PSB0c3Qtd2NoYXItaAorK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19MT0NBTEVfQ09ERSkgXAorKwkrPSB0c3QtYnRvd2MgdHN0LW1icnRvd2MgdHN0LW1icnRvd2MyIHRzdC13Y3J0b21iIHRzdC1jMTZjMzItMQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysJKz0gdHN0LXdjc3RvZiB3Y3NtYnMtdHN0MSB0c3Qtd2NzbmxlbiBcCisrCXRzdC13Y3BuY3B5IHRzdC1tYnNydG93Y3MgXAorKwl3Y3NhdGNsaWZmICQoYWRkcHJlZml4IHRlc3QtLCQoc3Ryb3AtdGVzdHMpKQorIAorIGluY2x1ZGUgLi4vUnVsZXMKKyAKK2RpZmYgLS1naXQgYS93Y3NtYnMvd2NzbWJzbG9hZC5jIGIvd2NzbWJzL3djc21ic2xvYWQuYworaW5kZXggNmJiNDliYy4uMmFiOWQwNyAxMDA2NDQKKy0tLSBhL3djc21icy93Y3NtYnNsb2FkLmMKKysrKyBiL3djc21icy93Y3NtYnNsb2FkLmMKK0BAIC0yMSw2ICsyMSw3IEBACisgI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGdudS9vcHRpb24tZ3JvdXBzLmg+CisgCisgI2luY2x1ZGUgPGxvY2FsZS9sb2NhbGVpbmZvLmg+CisgI2luY2x1ZGUgPHdjc21ic2xvYWQuaD4KK0BAIC0xNDMsNiArMTQ0LDcgQEAgX193Y3NtYnNfZ2V0ZmN0IChjb25zdCBjaGFyICp0bywgY29uc3QgY2hhciAqZnJvbSwgc2l6ZV90ICpuc3RlcHNwKQorICAgfSkKKyAKKyAKKysjaWYgX19PUFRJT05fRUdMSUJDX0xPQ0FMRV9DT0RFCisgLyogU29tZSBvZiB0aGUgZnVuY3Rpb25zIGhlcmUgbXVzdCBub3QgYmUgdXNlZCB3aGlsZSBzZXRsb2NhbGUgaXMgY2FsbGVkLiAgKi8KKyBfX2xpYmNfcndsb2NrX2RlZmluZSAoZXh0ZXJuLCBfX2xpYmNfc2V0bG9jYWxlX2xvY2sgYXR0cmlidXRlX2hpZGRlbikKKyAKK0BAIC0yMTEsNiArMjEzLDE3IEBAIF9fd2NzbWJzX2xvYWRfY29udiAoc3RydWN0IF9fbG9jYWxlX2RhdGEgKm5ld19jYXRlZ29yeSkKKyAKKyAgIF9fbGliY19yd2xvY2tfdW5sb2NrIChfX2xpYmNfc2V0bG9jYWxlX2xvY2spOworIH0KKysjZWxzZQorK3ZvaWQKKytpbnRlcm5hbF9mdW5jdGlvbgorK19fd2NzbWJzX2xvYWRfY29udiAoc3RydWN0IF9fbG9jYWxlX2RhdGEgKm5ld19jYXRlZ29yeSkKKyt7CisrICAvKiBXaGVuIE9QVElPTl9FR0xJQkNfTE9DQUxFX0NPREUgaXMgZGlzYWJsZWQsIHdlIHNob3VsZCBuZXZlciByZWFjaAorKyAgICAgdGhpcyBwb2ludDogdGhlcmUgaXMgbm8gd2F5IHRvIGNoYW5nZSBsb2NhbGVzLCBzbyBldmVyeSBsb2NhbGUKKysgICAgIHBhc3NlZCB0byBnZXRfZ2NvbnZfZmN0cyBzaG91bGQgYmUgX25sX0NfTENfQ1RZUEUuICAqLworKyAgYWJvcnQgKCk7CisrfQorKyNlbmRpZgorIAorIAorIC8qIENsb25lIHRoZSBjdXJyZW50IGNvbnZlcnNpb24gZnVuY3Rpb24gc2V0LiAgKi8KK2RpZmYgLS1naXQgYS93Y3R5cGUvTWFrZWZpbGUgYi93Y3R5cGUvTWFrZWZpbGUKK2luZGV4IGM1NmYwN2MuLjRlOGFmNDMgMTAwNjQ0CistLS0gYS93Y3R5cGUvTWFrZWZpbGUKKysrKyBiL3djdHlwZS9NYWtlZmlsZQorQEAgLTE4LDE0ICsxOCwyMCBAQAorICMKKyAjCVN1Yi1tYWtlZmlsZSBmb3Igd2N0eXBlIHBvcnRpb24gb2YgdGhlIGxpYnJhcnkuCisgIworK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJOj0gd2N0eXBlCisgCisgaW5jbHVkZSAuLi9NYWtlY29uZmlnCisgCisgaGVhZGVycwkJOj0gd2N0eXBlLmgKKy1yb3V0aW5lcwk6PSB3Y2Z1bmNzIHdjdHlwZSBpc3djdHlwZSB3Y3RyYW5zIHRvd2N0cmFucyBcCistCQkgICB3Y2Z1bmNzX2wgd2N0eXBlX2wgaXN3Y3R5cGVfbCB3Y3RyYW5zX2wgdG93Y3RyYW5zX2wKKy0KKy10ZXN0cwk6PSB0ZXN0X3djdHlwZSB0ZXN0X3djZnVuY3MgYnVnLXdjdHlwZWgKKytyb3V0aW5lcyAJOj0gd2N0cmFucyB0b3djdHJhbnMgdG93Y3RyYW5zX2wKKytyb3V0aW5lcy0kKE9QVElPTl9QT1NJWF9DX0xBTkdfV0lERV9DSEFSKSBcCisrCQk6PSB3Y2Z1bmNzIHdjdHlwZSBpc3djdHlwZSBcCisrCQkgICB3Y2Z1bmNzX2wgd2N0eXBlX2wgaXN3Y3R5cGVfbCB3Y3RyYW5zX2wKKysKKyt0ZXN0cwk6PQorK3Rlc3RzLSQoT1BUSU9OX1BPU0lYX0NfTEFOR19XSURFX0NIQVIpIFwKKysgICAgICs9IHRlc3Rfd2N0eXBlIHRlc3Rfd2NmdW5jcyBidWctd2N0eXBlaAorIAorIGluY2x1ZGUgLi4vUnVsZXMKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI1LWVnbGliYy1JbnN0YWxsLVBJQy1hcmNoaXZlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzU5Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNS1lZ2xpYmMtSW5zdGFsbC1QSUMtYXJjaGl2ZXMucGF0Y2gKQEAgLTAsMCArMSwxMjMgQEAKK0Zyb20gNTc3MzQxN2ZhOTFhMThjZDM5ZmIzNWM5OTA3ZDcyYWYwZWQ5ZWEzMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE4IE1hciAyMDE1IDAxOjU3OjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMjddIGVnbGliYzogSW5zdGFsbCBQSUMgYXJjaGl2ZXMKKworRm9yd2FyZCBwb3J0IGZyb20gZWdsaWJjCisKKzIwMDgtMDItMDcgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogTWFrZXJ1bGVzIChpbnN0YWxsLWV4dHJhcywgaW5zdGFsbC1tYXApOiBOZXcgdmFyaWFibGVzLgorICAgICAgICAoaW5zdGFsbGVkLWxpYmNzKTogQWRkIGxpYmNfcGljLmEuCisgICAgICAgIChpbnN0YWxsLWxpYik6IEluY2x1ZGUgX3BpYy5hIGZpbGVzIGZvciB2ZXJzaW9uZWQgc2hhcmVkCisgICAgICAgIGxpYnJhcmllcy4KKyAgICAgICAgKGluc3RhbGwtbWFwLW5vc3ViZGlyLCBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcik6IEFkZCBydWxlcyBmb3IKKyAgICAgICAgaW5zdGFsbGluZyBleHRyYSBmaWxlcy4KKyAgICAgICAgKGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyKTogRGVwZW5kIG9uIGluc3RhbGwtbWFwLW5vc3ViZGlyIGFuZAorICAgICAgICBpbnN0YWxsLWV4dHJhcy1ub3N1YmRpci4KKworMjAwOC0wNC0wMSAgTWF4aW0gS3V2eXJrb3YgIDxtYXhpbUBjb2Rlc291cmNlcnkuY29tPgorCisgICAgICAgICogTWFrZXJ1bGVzIChpbnN0YWxsLWxpYik6IERvbid0IGluc3RhbGwgbGlicHRocmVhZF9waWMuYS4KKyAgICAgICAgKGluc3RhbGwtbWFwKTogRG9uJ3QgaW5zdGFsbCBsaWJwdGhyZWFkX3BpYy5tYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgTWFrZXJ1bGVzIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlcnVsZXMgYi9NYWtlcnVsZXMKK2luZGV4IDFkZDQxYWEuLjQxNzc4ZTEgMTAwNjQ0CistLS0gYS9NYWtlcnVsZXMKKysrKyBiL01ha2VydWxlcworQEAgLTcxMyw2ICs3MTMsOSBAQCBpZmVxICgkKGJ1aWxkLXNoYXJlZCkseWVzKQorICQoY29tbW9uLW9ianBmeClsaWJjLnNvOiAkKGNvbW1vbi1vYmpwZngpbGliYy5tYXAKKyBlbmRpZgorIGNvbW1vbi1nZW5lcmF0ZWQgKz0gbGliYy5zbyBsaWJjX3BpYy5vcworK2lmbmRlZiBzdWJkaXIKKytpbnN0YWxsLWV4dHJhcyA6PSBzb2luaXQubyBzb2ZpbmkubworK2VuZGlmCisgaWZkZWYgbGliYy5zby12ZXJzaW9uCisgJChjb21tb24tb2JqcGZ4KWxpYmMuc28kKGxpYmMuc28tdmVyc2lvbik6ICQoY29tbW9uLW9ianBmeClsaWJjLnNvCisgCSQobWFrZS1saW5rKQorQEAgLTk1NSw2ICs5NTgsNyBAQCBlbmRpZgorIAorIGluc3RhbGw6IGNoZWNrLWluc3RhbGwtc3VwcG9ydGVkCisgCisraW5zdGFsbGVkLWxpYmNzIDo9ICQoaW5zdGFsbGVkLWxpYmNzKSAkKGluc3RfbGliZGlyKS9saWJjX3BpYy5hCisgaW5zdGFsbDogJChpbnN0YWxsZWQtbGliY3MpCisgJChpbnN0YWxsZWQtbGliY3MpOiAkKGluc3RfbGliZGlyKS9saWIkKGxpYnByZWZpeCklOiBsaWIgJCgrZm9yY2UpCisgCSQobWFrZS10YXJnZXQtZGlyZWN0b3J5KQorQEAgLTk4Myw2ICs5ODcsMjIgQEAgdmVyc2lvbmVkIDo9ICQoc3RyaXAgJChmb3JlYWNoIHNvLCQoaW5zdGFsbC1saWIuc28pLFwKKyBpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQgOj0gJChmaWx0ZXIgJCh2ZXJzaW9uZWQpLCAkKGluc3RhbGwtbGliLnNvKSkKKyBpbnN0YWxsLWxpYi5zby11bnZlcnNpb25lZCA6PSAkKGZpbHRlci1vdXQgJCh2ZXJzaW9uZWQpLCAkKGluc3RhbGwtbGliLnNvKSkKKyAKKysjIEluc3RhbGwgdGhlIF9waWMuYSBmaWxlcyBmb3IgdmVyc2lvbmVkIGxpYnJhcmllcywgYW5kIGNvcnJlc3BvbmRpbmcKKysjIC5tYXAgZmlsZXMuCisrIyBsaWJwdGhyZWFkX3BpYy5hIGJyZWFrcyBta2xpYnMsIHNvIGRvbid0IGluc3RhbGwgaXQgYW5kIGl0cyBtYXAuCisraW5zdGFsbC1saWIgOj0gJChpbnN0YWxsLWxpYikgJChpbnN0YWxsLWxpYi5zby12ZXJzaW9uZWQ6JS5zbz0lX3BpYy5hKQorK2luc3RhbGwtbGliIDo9ICQoZmlsdGVyLW91dCBsaWJwdGhyZWFkX3BpYy5hLCQoaW5zdGFsbC1saWIpKQorKyMgRGVzcGl0ZSBoYXZpbmcgYSBzb25hbWUgbGliaHVyZHVzZXIgYW5kIGxpYm1hY2h1c2VyIGRvIG5vdCB1c2Ugc3ltYm9sCisrIyB2ZXJzaW9uaW5nLCBzbyBkb24ndCBpbnN0YWxsIHRoZSBjb3JyZXNwb25kaW5nIC5tYXAgZmlsZXMuCisraWZlcSAoJChidWlsZC1zaGFyZWQpLHllcykKKytpbnN0YWxsLW1hcCA6PSAkKHBhdHN1YnN0ICUuc28sJS5tYXAsXAorKwkJCSQoZm9yZWFjaCBMLCQoaW5zdGFsbC1saWIuc28tdmVyc2lvbmVkKSwkKG5vdGRpciAkTCkpKQorK2luc3RhbGwtbWFwIDo9ICQoZmlsdGVyLW91dCBsaWJodXJkdXNlci5tYXAgbGlibWFjaHVzZXIubWFwIGxpYnB0aHJlYWQubWFwLCQoaW5zdGFsbC1tYXApKQorK2lmbmRlZiBzdWJkaXIKKytpbnN0YWxsLW1hcCA6PSAkKGluc3RhbGwtbWFwKSBsaWJjLm1hcAorK2VuZGlmCisrZW5kaWYKKysKKyAjIEZvciB2ZXJzaW9uZWQgbGlicmFyaWVzLCB3ZSBpbnN0YWxsIHRocmVlIGZpbGVzOgorICMJJChpbnN0X2xpYmRpcikvbGliZm9vLnNvCS0tIGZvciBsaW5raW5nLCBzeW1saW5rIG9yIGxkIHNjcmlwdAorICMJJChpbnN0X3NsaWJkaXIpL2xpYmZvby5zby5OTgktLSBmb3IgbG9hZGluZyBieSBTT05BTUUsIHN5bWxpbmsKK0BAIC0xMjI1LDkgKzEyNDUsMjIgQEAgJChhZGRwcmVmaXggJChpbnN0X2luY2x1ZGVkaXIpLywkKGhlYWRlcnMtbm9uaCkpOiAkKGluc3RfaW5jbHVkZWRpcikvJTogXAorIGVuZGlmCSMgaGVhZGVycy1ub25oCisgZW5kaWYJIyBoZWFkZXJzCisgCisraWZkZWYgaW5zdGFsbC1tYXAKKyskKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS8sJChwYXRzdWJzdCBsaWIlLm1hcCxsaWIlX3BpYy5tYXAsJChpbnN0YWxsLW1hcCkpKTogXAorKyAgJChpbnN0X2xpYmRpcikvbGliJV9waWMubWFwOiAkKGNvbW1vbi1vYmpwZngpbGliJS5tYXAgJCgrZm9yY2UpCisrCSQoZG8taW5zdGFsbCkKKytlbmRpZgorKworK2lmZGVmIGluc3RhbGwtZXh0cmFzCisrJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvbGliY19waWMvLCQoaW5zdGFsbC1leHRyYXMpKTogXAorKyAgJChpbnN0X2xpYmRpcikvbGliY19waWMvJS5vOiAkKGVsZi1vYmpwZngpJS5vcyAkKCtmb3JjZSkKKysJJChkby1pbnN0YWxsKQorK2VuZGlmCisrCisgLlBIT05ZOiBpbnN0YWxsLWJpbi1ub3N1YmRpciBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXIgXAorIAlpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyIGluc3RhbGwtc2Jpbi1ub3N1YmRpciBpbnN0YWxsLWxpYi1ub3N1YmRpciBcCistCWluc3RhbGwtZGF0YS1ub3N1YmRpciBpbnN0YWxsLWhlYWRlcnMtbm9zdWJkaXIKKysJaW5zdGFsbC1kYXRhLW5vc3ViZGlyIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpciBpbnN0YWxsLW1hcC1ub3N1YmRpciBcCisrCWluc3RhbGwtZXh0cmFzLW5vc3ViZGlyCisgaW5zdGFsbC1iaW4tbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9iaW5kaXIpLywkKGluc3RhbGwtYmluKSkKKyBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9iaW5kaXIpLywkKGluc3RhbGwtYmluLXNjcmlwdCkpCisgaW5zdGFsbC1yb290c2Jpbi1ub3N1YmRpcjogXAorQEAgLTEyNDAsNiArMTI3MywxMCBAQCBpbnN0YWxsLWRhdGEtbm9zdWJkaXI6ICQoYWRkcHJlZml4ICQoaW5zdF9kYXRhZGlyKS8sJChpbnN0YWxsLWRhdGEpKQorIGluc3RhbGwtaGVhZGVycy1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2luY2x1ZGVkaXIpLywkKGhlYWRlcnMpKQorIGluc3RhbGwtb3RoZXJzLW5vc3ViZGlyOiAkKGluc3RhbGwtb3RoZXJzKQorIGluc3RhbGwtb3RoZXJzLXByb2dyYW1zLW5vc3ViZGlyOiAkKGluc3RhbGwtb3RoZXJzLXByb2dyYW1zKQorK2luc3RhbGwtbWFwLW5vc3ViZGlyOiAkKGFkZHByZWZpeCAkKGluc3RfbGliZGlyKS8sXAorKwkJICAgICAgICQocGF0c3Vic3QgbGliJS5tYXAsbGliJV9waWMubWFwLCQoaW5zdGFsbC1tYXApKSkKKytpbnN0YWxsLWV4dHJhcy1ub3N1YmRpcjogJChhZGRwcmVmaXggJChpbnN0X2xpYmRpcikvbGliY19waWMvLFwKKysJCSAgICAgICAkKGluc3RhbGwtZXh0cmFzKSkKKyAKKyAjIFdlIG5lZWQgYWxsIHRoZSBgLW5vc3ViZGlyJyB0YXJnZXRzIHNvIHRoYXQgYGluc3RhbGwnIGluIHRoZSBwYXJlbnQKKyAjIGRvZXNuJ3QgZGVwZW5kIG9uIHNldmVyYWwgdGhpbmdzIHdoaWNoIGVhY2ggaXRlcmF0ZSBvdmVyIHRoZSBzdWJkaXJzLgorQEAgLTEyNDksNyArMTI4Niw4IEBAIGluc3RhbGwtJTo6IGluc3RhbGwtJS1ub3N1YmRpciA7CisgCisgLlBIT05ZOiBpbnN0YWxsIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyCisgaW5zdGFsbC1uby1saWJjLmEtbm9zdWJkaXI6IGluc3RhbGwtaGVhZGVycy1ub3N1YmRpciBpbnN0YWxsLWRhdGEtbm9zdWJkaXIgXAorLQkJCSAgICBpbnN0YWxsLWxpYi1ub3N1YmRpciBpbnN0YWxsLW90aGVycy1ub3N1YmRpcgorKwkJCSAgICBpbnN0YWxsLWxpYi1ub3N1YmRpciBpbnN0YWxsLW90aGVycy1ub3N1YmRpciBcCisrCQkJICAgIGluc3RhbGwtbWFwLW5vc3ViZGlyIGluc3RhbGwtZXh0cmFzLW5vc3ViZGlyCisgaWZlcSAoJChidWlsZC1wcm9ncmFtcykseWVzKQorIGluc3RhbGwtbm8tbGliYy5hLW5vc3ViZGlyOiBpbnN0YWxsLWJpbi1ub3N1YmRpciBpbnN0YWxsLWJpbi1zY3JpcHQtbm9zdWJkaXIgXAorIAkJCSAgICBpbnN0YWxsLXJvb3RzYmluLW5vc3ViZGlyIGluc3RhbGwtc2Jpbi1ub3N1YmRpciBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjYxMWRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvMDAyNi1lZ2xpYmMtZGxfZGVidWdfbWFzay1pcy1jb250cm9sbGVkLWJ5LV9fT1BUSU9OX0VHTElCLnBhdGNoCkBAIC0wLDAgKzEsNTU2IEBACitGcm9tIGJhMDY5YjMxMDdmNWFkMjAwYzRhYjk1ZTY5Y2YzNjhlMjM1M2IwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxOCBNYXIgMjAxNSAwMDo0Njo1MCArMDAwMAorU3ViamVjdDogW1BBVENIIDI2LzI3XSBlZ2xpYmM6IGRsX2RlYnVnX21hc2sgaXMgY29udHJvbGxlZCBieQorIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCisKK3VzZSBHTFJPX2RsX2RlYnVnX21hc2sKKworU2luZ2VkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjc3UvbGliYy1zdGFydC5jICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1jYWNoZS5jICAgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWNsb3NlLmMgICAgICAgICB8ICA2ICsrKy0tLQorIGVsZi9kbC1jb25mbGljdC5jICAgICAgfCAgMiArLQorIGVsZi9kbC1kZXBzLmMgICAgICAgICAgfCAgNiArKystLS0KKyBlbGYvZGwtZXJyb3IuYyAgICAgICAgIHwgIDIgKy0KKyBlbGYvZGwtZmluaS5jICAgICAgICAgIHwgIDQgKystLQorIGVsZi9kbC1pbml0LmMgICAgICAgICAgfCAgNCArKy0tCisgZWxmL2RsLWxvYWQuYyAgICAgICAgICB8IDE2ICsrKysrKysrLS0tLS0tLS0KKyBlbGYvZGwtbG9va3VwLmMgICAgICAgIHwgMTQgKysrKysrKy0tLS0tLS0KKyBlbGYvZGwtb2JqZWN0LmMgICAgICAgIHwgIDIgKy0KKyBlbGYvZGwtb3Blbi5jICAgICAgICAgIHwgMTAgKysrKystLS0tLQorIGVsZi9kbC1yZWxvYy5jICAgICAgICAgfCAgMiArLQorIGVsZi9kbC12ZXJzaW9uLmMgICAgICAgfCAgMiArLQorIGVsZi9nZXQtZHluYW1pYy1pbmZvLmggfCAgMiArLQorIGVsZi9ydGxkLmMgICAgICAgICAgICAgfCAyMiArKysrKysrKysrKy0tLS0tLS0tLS0tCisgMTYgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgNTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jc3UvbGliYy1zdGFydC5jIGIvY3N1L2xpYmMtc3RhcnQuYworaW5kZXggMGFmYTdjMC4uMjE1MWZiNiAxMDA2NDQKKy0tLSBhL2NzdS9saWJjLXN0YXJ0LmMKKysrKyBiL2NzdS9saWJjLXN0YXJ0LmMKK0BAIC0yMzgsNyArMjM4LDcgQEAgTElCQ19TVEFSVF9NQUlOIChpbnQgKCptYWluKSAoaW50LCBjaGFyICoqLCBjaGFyICoqIE1BSU5fQVVYVkVDX0RFQ0wpLAorIAorICAgLyogQ2FsbCB0aGUgaW5pdGlhbGl6ZXIgb2YgdGhlIHByb2dyYW0sIGlmIGFueS4gICovCisgI2lmZGVmIFNIQVJFRAorLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUywgMCkpCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMsIDApKQorICAgICBHTFJPKGRsX2RlYnVnX3ByaW50ZikgKCJcbmluaXRpYWxpemUgcHJvZ3JhbTogJXNcblxuIiwgYXJndlswXSk7CisgI2VuZGlmCisgICBpZiAoaW5pdCkKK0BAIC0yNjEsNyArMjYxLDcgQEAgTElCQ19TVEFSVF9NQUlOIChpbnQgKCptYWluKSAoaW50LCBjaGFyICoqLCBjaGFyICoqIE1BSU5fQVVYVkVDX0RFQ0wpLAorICNlbmRpZgorIAorICNpZmRlZiBTSEFSRUQKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTKSkKKyAgICAgR0xSTyhkbF9kZWJ1Z19wcmludGYpICgiXG50cmFuc2ZlcnJpbmcgY29udHJvbDogJXNcblxuIiwgYXJndlswXSk7CisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNhY2hlLmMgYi9lbGYvZGwtY2FjaGUuYworaW5kZXggODYyZjFkOC4uZGFiOWM1MSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jYWNoZS5jCisrKysgYi9lbGYvZGwtY2FjaGUuYworQEAgLTE5NCw3ICsxOTQsNyBAQCBfZGxfbG9hZF9jYWNoZV9sb29rdXAgKGNvbnN0IGNoYXIgKm5hbWUpCisgICBjb25zdCBjaGFyICpiZXN0OworIAorICAgLyogUHJpbnQgYSBtZXNzYWdlIGlmIHRoZSBsb2FkaW5nIG9mIGxpYnMgaXMgdHJhY2VkLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgc2VhcmNoIGNhY2hlPSVzXG4iLCBMRF9TT19DQUNIRSk7CisgCisgICBpZiAoY2FjaGUgPT0gTlVMTCkKK0BAIC0yOTIsNyArMjkyLDcgQEAgX2RsX2xvYWRfY2FjaGVfbG9va3VwIChjb25zdCBjaGFyICpuYW1lKQorICAgICB9CisgCisgICAvKiBQcmludCBvdXIgcmVzdWx0IGlmIHdhbnRlZC4gICovCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMsIDApCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywgMCkKKyAgICAgICAmJiBiZXN0ICE9IE5VTEwpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgIHRyeWluZyBmaWxlPSVzXG4iLCBiZXN0KTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtY2xvc2UuYyBiL2VsZi9kbC1jbG9zZS5jCitpbmRleCBjODk3MjQ3Li5iMWI0YmQ1IDEwMDY0NAorLS0tIGEvZWxmL2RsLWNsb3NlLmMKKysrKyBiL2VsZi9kbC1jbG9zZS5jCitAQCAtMTI1LDcgKzEyNSw3IEBAIF9kbF9jbG9zZV93b3JrZXIgKHN0cnVjdCBsaW5rX21hcCAqbWFwLCBib29sIGZvcmNlKQorIAlkbF9jbG9zZV9zdGF0ZSA9IHJlcnVuOworIAorICAgICAgIC8qIFRoZXJlIGFyZSBzdGlsbCByZWZlcmVuY2VzIHRvIHRoaXMgb2JqZWN0LiAgRG8gbm90aGluZyBtb3JlLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG5jbG9zaW5nIGZpbGU9JXM7IGRpcmVjdF9vcGVuY291bnQ9JXVcbiIsCisgCQkJICBtYXAtPmxfbmFtZSwgbWFwLT5sX2RpcmVjdF9vcGVuY291bnQpOworIAorQEAgLTI2OSw3ICsyNjksNyBAQCBfZGxfY2xvc2Vfd29ya2VyIChzdHJ1Y3QgbGlua19tYXAgKm1hcCwgYm9vbCBmb3JjZSkKKyAJICBpZiAoaW1hcC0+bF9pbml0X2NhbGxlZCkKKyAJICAgIHsKKyAJICAgICAgLyogV2hlbiBkZWJ1Z2dpbmcgcHJpbnQgYSBtZXNzYWdlIGZpcnN0LiAgKi8KKy0JICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUywKKysJICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0lNUENBTExTLAorIAkJCQkgICAgMCkpCisgCQlfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIGZpbmk6ICVzIFslbHVdXG5cbiIsCisgCQkJCSAgaW1hcC0+bF9uYW1lLCBuc2lkKTsKK0BAIC03MTEsNyArNzExLDcgQEAgX2RsX2Nsb3NlX3dvcmtlciAoc3RydWN0IGxpbmtfbWFwICptYXAsIGJvb2wgZm9yY2UpCisgCSAgZnJlZSAoaW1hcC0+bF9yZWxkZXBzKTsKKyAKKyAJICAvKiBQcmludCBkZWJ1Z2dpbmcgbWVzc2FnZS4gICovCistCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykpCisrCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAJICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmZpbGU9JXMgWyVsdV07ICBkZXN0cm95aW5nIGxpbmsgbWFwXG4iLAorIAkJCSAgICAgIGltYXAtPmxfbmFtZSwgaW1hcC0+bF9ucyk7CisgCitkaWZmIC0tZ2l0IGEvZWxmL2RsLWNvbmZsaWN0LmMgYi9lbGYvZGwtY29uZmxpY3QuYworaW5kZXggNDdhOTQ2ZS4uZTZhM2YyMSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1jb25mbGljdC5jCisrKysgYi9lbGYvZGwtY29uZmxpY3QuYworQEAgLTMyLDcgKzMyLDcgQEAgX2RsX3Jlc29sdmVfY29uZmxpY3RzIChzdHJ1Y3QgbGlua19tYXAgKmwsIEVsZlcoUmVsYSkgKmNvbmZsaWN0LAorIAkJICAgICAgIEVsZlcoUmVsYSkgKmNvbmZsaWN0ZW5kKQorIHsKKyAjaWYgISBFTEZfTUFDSElORV9OT19SRUxBCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1JFTE9DKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19SRUxPQykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbmNvbmZsaWN0IHByb2Nlc3Npbmc6ICVzXG4iLCBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSkpOworIAorICAgeworZGlmZiAtLWdpdCBhL2VsZi9kbC1kZXBzLmMgYi9lbGYvZGwtZGVwcy5jCitpbmRleCBlZWUxNDZhLi4xYTRiMDA0IDEwMDY0NAorLS0tIGEvZWxmL2RsLWRlcHMuYworKysrIGIvZWxmL2RsLWRlcHMuYworQEAgLTEyNyw3ICsxMjcsNyBAQCBlbXB0eSBkeW5hbWljIHN0cmluZyB0b2tlbiBzdWJzdGl0dXRpb24iKSk7CQkJCSAgICAgIFwKKyAJICAgIGVsc2UJCQkJCQkJICAgICAgXAorIAkgICAgICB7CQkJCQkJCQkgICAgICBcCisgCQkvKiBUaGlzIGlzIGZvciBEVF9BVVhJTElBUlkuICAqLwkJCSAgICAgIFwKKy0JCWlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpICAgXAorKwkJaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKSAgIFwKKyAJCSAgX2RsX2RlYnVnX3ByaW50ZiAoTl8oIlwKKyBjYW5ub3QgbG9hZCBhdXhpbGlhcnkgYCVzJyBiZWNhdXNlIG9mIGVtcHR5IGR5bmFtaWMgc3RyaW5nIHRva2VuICIJICAgICAgXAorIAkJCQkJICAgICJzdWJzdGl0dXRpb25cbiIpLCBfX3N0cik7CSAgICAgIFwKK0BAIC0zMDMsNyArMzAzLDcgQEAgX2RsX21hcF9vYmplY3RfZGVwcyAoc3RydWN0IGxpbmtfbWFwICptYXAsCisgCQlhcmdzLm5hbWUgPSBuYW1lOworIAorIAkJLyogU2F5IHRoYXQgd2UgYXJlIGFib3V0IHRvIGxvYWQgYW4gYXV4aWxpYXJ5IGxpYnJhcnkuICAqLworLQkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTLAorKwkJaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMsCisgCQkJCSAgICAgIDApKQorIAkJICBfZGxfZGVidWdfcHJpbnRmICgibG9hZCBhdXhpbGlhcnkgb2JqZWN0PSVzIgorIAkJCQkgICAgIiByZXF1ZXN0ZWQgYnkgZmlsZT0lc1xuIiwKK0BAIC01MjAsNyArNTIwLDcgQEAgX2RsX21hcF9vYmplY3RfZGVwcyAoc3RydWN0IGxpbmtfbWFwICptYXAsCisgICAgICAgcnVucC0+bWFwLT5sX3Jlc2VydmVkID0gMDsKKyAgICAgfQorIAorLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LLCAwKSAhPSAwCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSywgMCkgIT0gMAorICAgICAgICYmIG1hcCA9PSBHTChkbF9ucylbTE1fSURfQkFTRV0uX25zX2xvYWRlZCkKKyAgICAgeworICAgICAgIC8qIElmIHdlIGFyZSB0byBjb21wdXRlIGNvbmZsaWN0cywgd2UgaGF2ZSB0byBidWlsZCBsb2NhbCBzY29wZQorZGlmZiAtLWdpdCBhL2VsZi9kbC1lcnJvci5jIGIvZWxmL2RsLWVycm9yLmMKK2luZGV4IDBmYzNmZDguLmVhODJmNGQgMTAwNjQ0CistLS0gYS9lbGYvZGwtZXJyb3IuYworKysrIGIvZWxmL2RsLWVycm9yLmMKK0BAIC0xMzksNyArMTM5LDcgQEAgaW50ZXJuYWxfZnVuY3Rpb24KKyBfZGxfc2lnbmFsX2NlcnJvciAoaW50IGVycmNvZGUsIGNvbnN0IGNoYXIgKm9iam5hbWUsIGNvbnN0IGNoYXIgKm9jY2F0aW9uLAorIAkJICAgY29uc3QgY2hhciAqZXJyc3RyaW5nKQorIHsKKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPKGRsX2RlYnVnX21hc2spCisrICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrCisgCQkJJiB+KERMX0RFQlVHX1NUQVRJU1RJQ1N8RExfREVCVUdfUFJFTElOSyksIDApKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiJXM6IGVycm9yOiAlczogJXMgKCVzKVxuIiwgb2JqbmFtZSwgb2NjYXRpb24sCisgCQkgICAgICBlcnJzdHJpbmcsIHJlY2VpdmVyID8gImNvbnRpbnVlZCIgOiAiZmF0YWwiKTsKK2RpZmYgLS1naXQgYS9lbGYvZGwtZmluaS5jIGIvZWxmL2RsLWZpbmkuYworaW5kZXggNmNmZTY1MS4uZjU5ZjdmZSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1maW5pLmMKKysrKyBiL2VsZi9kbC1maW5pLmMKK0BAIC0yMzQsNyArMjM0LDcgQEAgX2RsX2ZpbmkgKHZvaWQpCisgCQkgIHx8IGwtPmxfaW5mb1tEVF9GSU5JXSAhPSBOVUxMKQorIAkJeworIAkJICAvKiBXaGVuIGRlYnVnZ2luZyBwcmludCBhIG1lc3NhZ2UgZmlyc3QuICAqLworLQkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xSTyhkbF9kZWJ1Z19tYXNrKQorKwkJICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrCisgCQkJCQkmIERMX0RFQlVHX0lNUENBTExTLCAwKSkKKyAJCSAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIGZpbmk6ICVzIFslbHVdXG5cbiIsCisgCQkJCSAgICAgIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSwKK0BAIC0yODYsNyArMjg2LDcgQEAgX2RsX2ZpbmkgKHZvaWQpCisgICAgICAgZ290byBhZ2FpbjsKKyAgICAgfQorIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TVEFUSVNUSUNTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxucnVudGltZSBsaW5rZXIgc3RhdGlzdGljczpcbiIKKyAJCSAgICAgICIgICAgICAgICAgIGZpbmFsIG51bWJlciBvZiByZWxvY2F0aW9uczogJWx1XG4iCisgCQkgICAgICAiZmluYWwgbnVtYmVyIG9mIHJlbG9jYXRpb25zIGZyb20gY2FjaGU6ICVsdVxuIiwKK2RpZmYgLS1naXQgYS9lbGYvZGwtaW5pdC5jIGIvZWxmL2RsLWluaXQuYworaW5kZXggMmY4NTczMS4uZTQ2ZThiNiAxMDA2NDQKKy0tLSBhL2VsZi9kbC1pbml0LmMKKysrKyBiL2VsZi9kbC1pbml0LmMKK0BAIC00Niw3ICs0Niw3IEBAIGNhbGxfaW5pdCAoc3RydWN0IGxpbmtfbWFwICpsLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNoYXIgKiplbnYpCisgICAgIHJldHVybjsKKyAKKyAgIC8qIFByaW50IGEgZGVidWcgbWVzc2FnZSBpZiB3YW50ZWQuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19JTVBDQUxMUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfSU1QQ0FMTFMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5jYWxsaW5nIGluaXQ6ICVzXG5cbiIsCisgCQkgICAgICBEU09fRklMRU5BTUUgKGwtPmxfbmFtZSkpOworIAorQEAgLTk2LDcgKzk2LDcgQEAgX2RsX2luaXQgKHN0cnVjdCBsaW5rX21hcCAqbWFpbl9tYXAsIGludCBhcmdjLCBjaGFyICoqYXJndiwgY2hhciAqKmVudikKKyAgICAgICBFbGZXKEFkZHIpICphZGRyczsKKyAgICAgICB1bnNpZ25lZCBpbnQgY250OworIAorLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSU1QQ0FMTFMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19JTVBDQUxMUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbmNhbGxpbmcgcHJlaW5pdDogJXNcblxuIiwKKyAJCQkgIERTT19GSUxFTkFNRSAobWFpbl9tYXAtPmxfbmFtZSkpOworIAorZGlmZiAtLWdpdCBhL2VsZi9kbC1sb2FkLmMgYi9lbGYvZGwtbG9hZC5jCitpbmRleCBmNjY0ZjUwLi44YzI4NzQ0IDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvYWQuYworKysrIGIvZWxmL2RsLWxvYWQuYworQEAgLTk0Myw3ICs5NDMsNyBAQCBfZGxfbWFwX29iamVjdF9mcm9tX2ZkIChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmQsIHN0cnVjdCBmaWxlYnVmICpmYnAsCisgICAgIH0KKyAKKyAgIC8qIFByaW50IGRlYnVnZ2luZyBtZXNzYWdlLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoImZpbGU9JXMgWyVsdV07ICBnZW5lcmF0aW5nIGxpbmsgbWFwXG4iLCBuYW1lLCBuc2lkKTsKKyAKKyAgIC8qIFRoaXMgaXMgdGhlIEVMRiBoZWFkZXIuICBXZSByZWFkIGl0IGluIGBvcGVuX3ZlcmlmeScuICAqLworQEAgLTEzNDcsNyArMTM0Nyw3IEBAIGNhbm5vdCBlbmFibGUgZXhlY3V0YWJsZSBzdGFjayBhcyBzaGFyZWQgb2JqZWN0IHJlcXVpcmVzIik7CisgCisgICBsLT5sX2VudHJ5ICs9IGwtPmxfYWRkcjsKKyAKKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0ZJTEVTKSkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlwKKyAgIGR5bmFtaWM6IDB4JTAqbHggIGJhc2U6IDB4JTAqbHggICBzaXplOiAweCUwKlp4XG5cCisgICAgIGVudHJ5OiAweCUwKmx4ICBwaGRyOiAweCUwKmx4ICBwaG51bTogICAlKnVcblxuIiwKK0BAIC0xNzg5LDcgKzE3ODksNyBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKKyAKKyAgICAgICAvKiBJZiB3ZSBhcmUgZGVidWdnaW5nIHRoZSBzZWFyY2ggZm9yIGxpYnJhcmllcyBwcmludCB0aGUgcGF0aAorIAkgbm93IGlmIGl0IGhhc24ndCBoYXBwZW5lZCBub3cuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykKKyAJICAmJiBjdXJyZW50X3doYXQgIT0gdGhpc19kaXItPndoYXQpCisgCXsKKyAJICBjdXJyZW50X3doYXQgPSB0aGlzX2Rpci0+d2hhdDsKK0BAIC0xODEwLDcgKzE4MTAsNyBAQCBvcGVuX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLCBpbnQgbW9kZSwKKyAJICAgICAtIGJ1Zik7CisgCisgCSAgLyogUHJpbnQgbmFtZSB3ZSB0cnkgaWYgdGhpcyBpcyB3YW50ZWQuICAqLworLQkgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAkgICAgX2RsX2RlYnVnX3ByaW50ZiAoIiAgdHJ5aW5nIGZpbGU9JXNcbiIsIGJ1Zik7CisgCisgCSAgZmQgPSBvcGVuX3ZlcmlmeSAoYnVmLCBmYnAsIGxvYWRlciwgd2hhdGNvZGUsIG1vZGUsCitAQCAtMTk1NSw3ICsxOTU1LDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorICAgICB9CisgCisgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGlmIHdlIGFyZSBkZWJ1Z2dpbmcuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUykKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykKKyAgICAgICAmJiBsb2FkZXIgIT0gTlVMTCkKKyAgICAgX2RsX2RlYnVnX3ByaW50ZiAoKG1vZGUgJiBfX1JUTERfQ0FMTE1BUCkgPT0gMAorIAkJICAgICAgPyAiXG5maWxlPSVzIFslbHVdOyAgbmVlZGVkIGJ5ICVzIFslbHVdXG4iCitAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgX2RsX21hcF9vYmplY3QgKHN0cnVjdCBsaW5rX21hcCAqbG9hZGVyLCBjb25zdCBjaGFyICpuYW1lLAorIAorICAgICAgIHNpemVfdCBuYW1lbGVuID0gc3RybGVuIChuYW1lKSArIDE7CisgCistICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19MSUJTKSkKKysgICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJmaW5kIGxpYnJhcnk9JXMgWyVsdV07IHNlYXJjaGluZ1xuIiwgbmFtZSwgbnNpZCk7CisgCisgICAgICAgZmQgPSAtMTsKK0BAIC0yMTE5LDcgKzIxMTksNyBAQCBfZGxfbWFwX29iamVjdCAoc3RydWN0IGxpbmtfbWFwICpsb2FkZXIsIGNvbnN0IGNoYXIgKm5hbWUsCisgI2VuZGlmCisgCisgICAgICAgLyogQWRkIGFub3RoZXIgbmV3bGluZSB3aGVuIHdlIGFyZSB0cmFjaW5nIHRoZSBsaWJyYXJ5IGxvYWRpbmcuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfTElCUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX0xJQlMpKQorIAlfZGxfZGVidWdfcHJpbnRmICgiXG4iKTsKKyAgICAgfQorICAgZWxzZQorQEAgLTIxNTIsNyArMjE1Miw3IEBAIF9kbF9tYXBfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmxvYWRlciwgY29uc3QgY2hhciAqbmFtZSwKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChmZCA9PSAtMSkpCisgICAgIHsKKyAgICAgICBpZiAodHJhY2VfbW9kZQorLQkgICYmIF9fZ2xpYmNfbGlrZWx5ICgoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1BSRUxJTkspID09IDApKQorKwkgICYmIF9fZ2xpYmNfbGlrZWx5ICgoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfUFJFTElOSykgPT0gMCkpCisgCXsKKyAJICAvKiBXZSBoYXZlbid0IGZvdW5kIGFuIGFwcHJvcHJpYXRlIGxpYnJhcnkuICBCdXQgc2luY2Ugd2UKKyAJICAgICBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0aGlzIGlzbid0CitkaWZmIC0tZ2l0IGEvZWxmL2RsLWxvb2t1cC5jIGIvZWxmL2RsLWxvb2t1cC5jCitpbmRleCAxMWNiNDRiLi41ODhjM2U0IDEwMDY0NAorLS0tIGEvZWxmL2RsLWxvb2t1cC5jCisrKysgYi9lbGYvZGwtbG9va3VwLmMKK0BAIC0zMDIsNyArMzAyLDcgQEAgZG9fbG9va3VwX3VuaXF1ZSAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgdWludF9mYXN0MzJfdCBuZXdfaGFzaCwKKyAJIGhhc2ggdGFibGUuICAqLworICAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5ICh0YWItPnNpemUpKQorIAl7CistCSAgYXNzZXJ0IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfUFJFTElOSyk7CisrCSAgYXNzZXJ0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKTsKKyAJICBnb3RvIHN1Y2Nlc3M7CisgCX0KKyAjZW5kaWYKK0BAIC0zNzgsNyArMzc4LDcgQEAgZG9fbG9va3VwX3ggKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHVpbnRfZmFzdDMyX3QgbmV3X2hhc2gsCisgCWNvbnRpbnVlOworIAorICAgICAgIC8qIFByaW50IHNvbWUgZGVidWdnaW5nIGluZm8gaWYgd2FudGVkLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NZTUJPTFMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TWU1CT0xTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoInN5bWJvbD0lczsgIGxvb2t1cCBpbiBmaWxlPSVzIFslbHVdXG4iLAorIAkJCSAgdW5kZWZfbmFtZSwgRFNPX0ZJTEVOQU1FIChtYXAtPmxfbmFtZSksCisgCQkJICBtYXAtPmxfbnMpOworQEAgLTc1NSw3ICs3NTUsNyBAQCBhZGRfZGVwZW5kZW5jeSAoc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsIHN0cnVjdCBsaW5rX21hcCAqbWFwLCBpbnQgZmxhZ3MpCisgCX0KKyAKKyAgICAgICAvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGlmIHdlIGFyZSBkZWJ1Z2dpbmcuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcCisgXG5maWxlPSVzIFslbHVdOyAgbmVlZGVkIGJ5ICVzIFslbHVdIChyZWxvY2F0aW9uIGRlcGVuZGVuY3kpXG5cbiIsCisgCQkJICBEU09fRklMRU5BTUUgKG1hcC0+bF9uYW1lKSwKK0BAIC04NTksNyArODU5LDcgQEAgX2RsX2xvb2t1cF9zeW1ib2xfeCAoY29uc3QgY2hhciAqdW5kZWZfbmFtZSwgc3RydWN0IGxpbmtfbWFwICp1bmRlZl9tYXAsCisgICAgIHsKKyAgICAgICBpZiAoKCpyZWYgPT0gTlVMTCB8fCBFTEZXKFNUX0JJTkQpICgoKnJlZiktPnN0X2luZm8pICE9IFNUQl9XRUFLKQorIAkgICYmIHNraXBfbWFwID09IE5VTEwKKy0JICAmJiAhKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpKQorKwkgICYmICEoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKSkKKyAJeworIAkgIC8qIFdlIGNvdWxkIGZpbmQgbm8gdmFsdWUgZm9yIGEgc3Ryb25nIHJlZmVyZW5jZS4gICovCisgCSAgY29uc3QgY2hhciAqcmVmZXJlbmNlX25hbWUgPSB1bmRlZl9tYXAgPyB1bmRlZl9tYXAtPmxfbmFtZSA6ICIiOworQEAgLTkzNSw3ICs5MzUsNyBAQCBfZGxfbG9va3VwX3N5bWJvbF94IChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChjdXJyZW50X3ZhbHVlLm0tPmxfdXNlZCA9PSAwKSkKKyAgICAgY3VycmVudF92YWx1ZS5tLT5sX3VzZWQgPSAxOworIAorLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sKKyAJCQkmIChETF9ERUJVR19CSU5ESU5HU3xETF9ERUJVR19QUkVMSU5LKSkpCisgICAgIF9kbF9kZWJ1Z19iaW5kaW5ncyAodW5kZWZfbmFtZSwgdW5kZWZfbWFwLCByZWYsCisgCQkJJmN1cnJlbnRfdmFsdWUsIHZlcnNpb24sIHR5cGVfY2xhc3MsIHByb3RlY3RlZCk7CitAQCAtMTAwMCw3ICsxMDAwLDcgQEAgX2RsX2RlYnVnX2JpbmRpbmdzIChjb25zdCBjaGFyICp1bmRlZl9uYW1lLCBzdHJ1Y3QgbGlua19tYXAgKnVuZGVmX21hcCwKKyB7CisgICBjb25zdCBjaGFyICpyZWZlcmVuY2VfbmFtZSA9IHVuZGVmX21hcC0+bF9uYW1lOworIAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19CSU5ESU5HUykKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19CSU5ESU5HUykKKyAgICAgeworICAgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJiaW5kaW5nIGZpbGUgJXMgWyVsdV0gdG8gJXMgWyVsdV06ICVzIHN5bWJvbCBgJXMnIiwKKyAJCQlEU09fRklMRU5BTUUgKHJlZmVyZW5jZV9uYW1lKSwKK0BAIC0xMDE0LDcgKzEwMTQsNyBAQCBfZGxfZGVidWdfYmluZGluZ3MgKGNvbnN0IGNoYXIgKnVuZGVmX25hbWUsIHN0cnVjdCBsaW5rX21hcCAqdW5kZWZfbWFwLAorIAlfZGxfZGVidWdfcHJpbnRmX2MgKCJcbiIpOworICAgICB9CisgI2lmZGVmIFNIQVJFRAorLSAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKQorKyAgaWYgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspCisgICAgIHsKKyAgICAgICBpbnQgY29uZmxpY3QgPSAwOworICAgICAgIHN0cnVjdCBzeW1fdmFsIHZhbCA9IHsgTlVMTCwgTlVMTCB9OworZGlmZiAtLWdpdCBhL2VsZi9kbC1vYmplY3QuYyBiL2VsZi9kbC1vYmplY3QuYworaW5kZXggMWQ1OGJiYy4uOTM4YTI1NyAxMDA2NDQKKy0tLSBhL2VsZi9kbC1vYmplY3QuYworKysrIGIvZWxmL2RsLW9iamVjdC5jCitAQCAtOTgsNyArOTgsNyBAQCBfZGxfbmV3X29iamVjdCAoY2hhciAqcmVhbG5hbWUsIGNvbnN0IGNoYXIgKmxpYm5hbWUsIGludCB0eXBlLAorICAgbmV3LT5sX3R5cGUgPSB0eXBlOworICAgLyogSWYgd2Ugc2V0IHRoZSBiaXQgbm93IHNpbmNlIHdlIGtub3cgaXQgaXMgbmV2ZXIgdXNlZCB3ZSBhdm9pZAorICAgICAgZGlydHlpbmcgdGhlIGNhY2hlIGxpbmUgbGF0ZXIuICAqLworLSAgaWYgKChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfVU5VU0VEKSA9PSAwKQorKyAgaWYgKChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpID09IDApCisgICAgIG5ldy0+bF91c2VkID0gMTsKKyAgIG5ldy0+bF9sb2FkZXIgPSBsb2FkZXI7CisgI2lmIE5PX1RMU19PRkZTRVQgIT0gMAorZGlmZiAtLWdpdCBhL2VsZi9kbC1vcGVuLmMgYi9lbGYvZGwtb3Blbi5jCitpbmRleCAyZGIxYzAyLi4xMjg4NjA0IDEwMDY0NAorLS0tIGEvZWxmL2RsLW9wZW4uYworKysrIGIvZWxmL2RsLW9wZW4uYworQEAgLTE0Nyw3ICsxNDcsNyBAQCBhZGRfdG9fZ2xvYmFsIChzdHJ1Y3QgbGlua19tYXAgKm5ldykKKyAJICBucy0+X25zX21haW5fc2VhcmNobGlzdC0+cl9saXN0W25ld19ubGlzdCsrXSA9IG1hcDsKKyAKKyAJICAvKiBXZSBtb2RpZnkgdGhlIGdsb2JhbCBzY29wZS4gIFJlcG9ydCB0aGlzLiAgKi8KKy0JICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrCSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgCSAgICBfZGxfZGVidWdfcHJpbnRmICgiXG5hZGQgJXMgWyVsdV0gdG8gZ2xvYmFsIHNjb3BlXG4iLAorIAkJCSAgICAgIG1hcC0+bF9uYW1lLCBtYXAtPmxfbnMpOworIAl9CitAQCAtMjUxLDcgKzI1MSw3IEBAIGRsX29wZW5fd29ya2VyICh2b2lkICphKQorICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKG5ldy0+bF9zZWFyY2hsaXN0LnJfbGlzdCAhPSBOVUxMKSkKKyAgICAgeworICAgICAgIC8qIExldCB0aGUgdXNlciBrbm93IGFib3V0IHRoZSBvcGVuY291bnQuICAqLworLSAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfRklMRVMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgCV9kbF9kZWJ1Z19wcmludGYgKCJvcGVuaW5nIGZpbGU9JXMgWyVsdV07IGRpcmVjdF9vcGVuY291bnQ9JXVcblxuIiwKKyAJCQkgIG5ldy0+bF9uYW1lLCBuZXctPmxfbnMsIG5ldy0+bF9kaXJlY3Rfb3BlbmNvdW50KTsKKyAKK0BAIC0zMDIsNyArMzAyLDcgQEAgZGxfb3Blbl93b3JrZXIgKHZvaWQgKmEpCisgICBMSUJDX1BST0JFIChtYXBfY29tcGxldGUsIDMsIGFyZ3MtPm5zaWQsIHIsIG5ldyk7CisgCisgICAvKiBQcmludCBzY29wZSBpbmZvcm1hdGlvbi4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfU0NPUEVTKSkKKyAgICAgX2RsX3Nob3dfc2NvcGUgKG5ldywgMCk7CisgCisgICAvKiBPbmx5IGRvIGxhenkgcmVsb2NhdGlvbiBpZiBgTERfQklORF9OT1cnIGlzIG5vdCBzZXQuICAqLworQEAgLTUxOSw3ICs1MTksNyBAQCBkbF9vcGVuX3dvcmtlciAodm9pZCAqYSkKKyAJfQorIAorICAgICAgIC8qIFByaW50IHNjb3BlIGluZm9ybWF0aW9uLiAgKi8KKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NDT1BFUykpCisrICAgICAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NDT1BFUykpCisgCV9kbF9zaG93X3Njb3BlIChpbWFwLCBmcm9tX3Njb3BlKTsKKyAgICAgfQorIAorQEAgLTU3Nyw3ICs1NzcsNyBAQCBUTFMgZ2VuZXJhdGlvbiBjb3VudGVyIHdyYXBwZWQhICBQbGVhc2UgcmVwb3J0IHRoaXMuIikpOworICNlbmRpZgorIAorICAgLyogTGV0IHRoZSB1c2VyIGtub3cgYWJvdXQgdGhlIG9wZW5jb3VudC4gICovCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0ZJTEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19GSUxFUykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJvcGVuaW5nIGZpbGU9JXMgWyVsdV07IGRpcmVjdF9vcGVuY291bnQ9JXVcblxuIiwKKyAJCSAgICAgIG5ldy0+bF9uYW1lLCBuZXctPmxfbnMsIG5ldy0+bF9kaXJlY3Rfb3BlbmNvdW50KTsKKyB9CitkaWZmIC0tZ2l0IGEvZWxmL2RsLXJlbG9jLmMgYi9lbGYvZGwtcmVsb2MuYworaW5kZXggNjEyNTJkNy4uNGM4MzgxNSAxMDA2NDQKKy0tLSBhL2VsZi9kbC1yZWxvYy5jCisrKysgYi9lbGYvZGwtcmVsb2MuYworQEAgLTE3OCw3ICsxNzgsNyBAQCBfZGxfcmVsb2NhdGVfb2JqZWN0IChzdHJ1Y3QgbGlua19tYXAgKmwsIHN0cnVjdCByX3Njb3BlX2VsZW0gKnNjb3BlW10sCisgICAgICAgJiYgX19idWlsdGluX2V4cGVjdCAobC0+bF9pbmZvW0RUX0JJTkRfTk9XXSAhPSBOVUxMLCAwKSkKKyAgICAgbGF6eSA9IDA7CisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1JFTE9DKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19SRUxPQykpCisgICAgIF9kbF9kZWJ1Z19wcmludGYgKCJcbnJlbG9jYXRpb24gcHJvY2Vzc2luZzogJXMlc1xuIiwKKyAJCSAgICAgIERTT19GSUxFTkFNRSAobC0+bF9uYW1lKSwgbGF6eSA/ICIgKGxhenkpIiA6ICIiKTsKKyAKK2RpZmYgLS1naXQgYS9lbGYvZGwtdmVyc2lvbi5jIGIvZWxmL2RsLXZlcnNpb24uYworaW5kZXggZjZlNWNkOS4uMzIwNjI4YyAxMDA2NDQKKy0tLSBhL2VsZi9kbC12ZXJzaW9uLmMKKysrKyBiL2VsZi9kbC12ZXJzaW9uLmMKK0BAIC04Miw3ICs4Miw3IEBAIG1hdGNoX3N5bWJvbCAoY29uc3QgY2hhciAqbmFtZSwgTG1pZF90IG5zLCBFbGZXKFdvcmQpIGhhc2gsIGNvbnN0IGNoYXIgKnN0cmluZywKKyAgIGludCByZXN1bHQgPSAwOworIAorICAgLyogRGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHdlIGFyZSBkb2luZyB3aGlsZSBkZWJ1Z2dpbmcuICAqLworLSAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19WRVJTSU9OUykpCisrICBpZiAoX19nbGliY191bmxpa2VseSAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVkVSU0lPTlMpKQorICAgICBfZGxfZGVidWdfcHJpbnRmICgiXAorIGNoZWNraW5nIGZvciB2ZXJzaW9uIGAlcycgaW4gZmlsZSAlcyBbJWx1XSByZXF1aXJlZCBieSBmaWxlICVzIFslbHVdXG4iLAorIAkJICAgICAgc3RyaW5nLCBEU09fRklMRU5BTUUgKG1hcC0+bF9uYW1lKSwKK2RpZmYgLS1naXQgYS9lbGYvZ2V0LWR5bmFtaWMtaW5mby5oIGIvZWxmL2dldC1keW5hbWljLWluZm8uaAoraW5kZXggZGM4MzU5ZC4uNzc3NGZkYSAxMDA2NDQKKy0tLSBhL2VsZi9nZXQtZHluYW1pYy1pbmZvLmgKKysrKyBiL2VsZi9nZXQtZHluYW1pYy1pbmZvLmgKK0BAIC0xNjYsNyArMTY2LDcgQEAgZWxmX2dldF9keW5hbWljX2luZm8gKHN0cnVjdCBsaW5rX21hcCAqbCwgRWxmVyhEeW4pICp0ZW1wKQorIAkgdGhlbS4gVGhlcmVmb3JlIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGFwcGxpY2F0aW9ucyB0aGUKKyAJIGJlc3Qgd2UgY2FuIGRvIGlzIGFkZCBhIHdhcm5pbmcgZHVyaW5nIGRlYnVnZ2luZyB3aXRoIHRoZQorIAkgaW50ZW50IG9mIG5vdGlmeWluZyB0aGUgdXNlciBvZiB0aGUgcHJvYmxlbS4gICovCistICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19GSUxFUywgMCkKKysgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfRklMRVMsIDApCisgCSAgJiYgbC0+bF9mbGFnc18xICYgfkRUXzFfU1VQUE9SVEVEX01BU0spCisgCV9kbF9kZWJ1Z19wcmludGYgKCJcbldBUk5JTkc6IFVuc3VwcG9ydGVkIGZsYWcgdmFsdWUocykgb2YgMHgleCBpbiBEVF9GTEFHU18xLlxuIiwKKyAJCQkgIGwtPmxfZmxhZ3NfMSAmIH5EVF8xX1NVUFBPUlRFRF9NQVNLKTsKK2RpZmYgLS1naXQgYS9lbGYvcnRsZC5jIGIvZWxmL3J0bGQuYworaW5kZXggZmMzYTJkYi4uNTljNDYzNyAxMDA2NDQKKy0tLSBhL2VsZi9ydGxkLmMKKysrKyBiL2VsZi9ydGxkLmMKK0BAIC0zMjMsNyArMzIzLDcgQEAgX2RsX3N0YXJ0X2ZpbmFsICh2b2lkICphcmcsIHN0cnVjdCBkbF9zdGFydF9maW5hbF9pbmZvICppbmZvKQorICAgICB9CisgI2VuZGlmCisgCistICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorKyAgaWYgKF9fZ2xpYmNfdW5saWtlbHkgKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1NUQVRJU1RJQ1MpKQorICAgICB7CisgI2lmbmRlZiBIUF9USU1JTkdfTk9OQVZBSUwKKyAgICAgICBwcmludF9zdGF0aXN0aWNzICgmcnRsZF90b3RhbF90aW1lKTsKK0BAIC0xNzAxLDcgKzE3MDEsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgCSBhZnRlciByZWxvY2F0aW9uLiAgKi8KKyAgICAgICBzdHJ1Y3QgbGlua19tYXAgKmw7CisgCistICAgICAgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKQorKyAgICAgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19QUkVMSU5LKQorIAl7CisgCSAgc3RydWN0IHJfc2NvcGVfZWxlbSAqc2NvcGUgPSAmbWFpbl9tYXAtPmxfc2VhcmNobGlzdDsKKyAKK0BAIC0xNzMxLDcgKzE3MzEsNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgCQlfZGxfcHJpbnRmICgiXG4iKTsKKyAJICAgIH0KKyAJfQorLSAgICAgIGVsc2UgaWYgKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19VTlVTRUQpCisrICAgICAgZWxzZSBpZiAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfVU5VU0VEKQorIAl7CisgCSAgLyogTG9vayB0aHJvdWdoIHRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIG1haW4gZXhlY3V0YWJsZQorIAkgICAgIGFuZCBkZXRlcm1pbmUgd2hpY2ggb2YgdGhlbSBpcyBub3QgYWN0dWFsbHkKK0BAIC0xODM5LDcgKzE4MzksNyBAQCBFUlJPUjogbGQuc286IG9iamVjdCAnJXMnIGNhbm5vdCBiZSBsb2FkZWQgYXMgYXVkaXQgaW50ZXJmYWNlOiAlczsgaWdub3JlZC5cbiIsCisgCQkgICAgfQorIAkJfQorIAorLQkgICAgICBpZiAoKEdMUk8oZGxfZGVidWdfbWFzaykgJiBETF9ERUJVR19QUkVMSU5LKQorKwkgICAgICBpZiAoKEdMUk9fZGxfZGVidWdfbWFzayAmIERMX0RFQlVHX1BSRUxJTkspCisgCQkgICYmIHJ0bGRfbXVsdGlwbGVfcmVmKQorIAkJeworIAkJICAvKiBNYXJrIHRoZSBsaW5rIG1hcCBhcyBub3QgeWV0IHJlbG9jYXRlZCBhZ2Fpbi4gICovCitAQCAtMTk3Miw3ICsxOTcyLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorICAgICAgIGlmIChyX2xpc3QgPT0gcl9saXN0ZW5kICYmIGxpYmxpc3QgPT0gbGlibGlzdGVuZCkKKyAJcHJlbGlua2VkID0gdHJ1ZTsKKyAKKy0gICAgICBpZiAoX19nbGliY191bmxpa2VseSAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX0xJQlMpKQorKyAgICAgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTKSkKKyAJX2RsX2RlYnVnX3ByaW50ZiAoIlxucHJlbGluayBjaGVja2luZzogJXNcbiIsCisgCQkJICBwcmVsaW5rZWQgPyAib2siIDogImZhaWxlZCIpOworICAgICB9CitAQCAtMTk5MCw3ICsxOTkwLDcgQEAgRVJST1I6IGxkLnNvOiBvYmplY3QgJyVzJyBjYW5ub3QgYmUgbG9hZGVkIGFzIGF1ZGl0IGludGVyZmFjZTogJXM7IGlnbm9yZWQuXG4iLAorICAgR0xSTyhkbF9pbml0X2FsbF9kaXJzKSA9IEdMKGRsX2FsbF9kaXJzKTsKKyAKKyAgIC8qIFByaW50IHNjb3BlIGluZm9ybWF0aW9uLiAgKi8KKy0gIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfU0NPUEVTKSkKKysgIGlmIChfX2dsaWJjX3VubGlrZWx5IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19TQ09QRVMpKQorICAgICB7CisgICAgICAgX2RsX2RlYnVnX3ByaW50ZiAoIlxuSW5pdGlhbCBvYmplY3Qgc2NvcGVzXG4iKTsKKyAKK0BAIC0yMjY1LDcgKzIyNjUsNyBAQCBwcm9jZXNzX2RsX2RlYnVnIChjb25zdCBjaGFyICpkbF9kZWJ1ZykKKyAJICAgIGlmIChkZWJvcHRzW2NudF0ubGVuID09IGxlbgorIAkJJiYgbWVtY21wIChkbF9kZWJ1ZywgZGVib3B0c1tjbnRdLm5hbWUsIGxlbikgPT0gMCkKKyAJICAgICAgeworLQkJR0xSTyhkbF9kZWJ1Z19tYXNrKSB8PSBkZWJvcHRzW2NudF0ubWFzazsKKysJCUdMUk9fZGxfZGVidWdfbWFzayB8PSBkZWJvcHRzW2NudF0ubWFzazsKKyAJCWFueV9kZWJ1ZyA9IDE7CisgCQlicmVhazsKKyAJICAgICAgfQorQEAgLTIyODYsNyArMjI4Niw3IEBAIHdhcm5pbmc6IGRlYnVnIG9wdGlvbiBgJXMnIHVua25vd247IHRyeSBMRF9ERUJVRz1oZWxwXG4iLCBjb3B5KTsKKyAgICAgICArK2RsX2RlYnVnOworICAgICB9CisgCistICBpZiAoR0xSTyhkbF9kZWJ1Z19tYXNrKSAmIERMX0RFQlVHX1VOVVNFRCkKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19VTlVTRUQpCisgICAgIHsKKyAgICAgICAvKiBJbiBvcmRlciB0byBnZXQgYW4gYWNjdXJhdGUgcGljdHVyZSBvZiB3aGV0aGVyIGEgcGFydGljdWxhcgorIAkgRFRfTkVFREVEIGVudHJ5IGlzIGFjdHVhbGx5IHVzZWQgd2UgaGF2ZSB0byBwcm9jZXNzIGJvdGgKK0BAIC0yMjk0LDcgKzIyOTQsNyBAQCB3YXJuaW5nOiBkZWJ1ZyBvcHRpb24gYCVzJyB1bmtub3duOyB0cnkgTERfREVCVUc9aGVscFxuIiwgY29weSk7CisgICAgICAgR0xSTyhkbF9sYXp5KSA9IDA7CisgICAgIH0KKyAKKy0gIGlmIChHTFJPKGRsX2RlYnVnX21hc2spICYgRExfREVCVUdfSEVMUCkKKysgIGlmIChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19IRUxQKQorICAgICB7CisgICAgICAgc2l6ZV90IGNudDsKKyAKK0BAIC0yNDk5LDcgKzI0OTksNyBAQCBwcm9jZXNzX2VudnZhcnMgKGVudW0gbW9kZSAqbW9kZXApCisgCSAgICAgIG1vZGUgPSB0cmFjZTsKKyAJICAgICAgR0xSTyhkbF92ZXJib3NlKSA9IDE7CisgI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCistCSAgICAgIEdMUk8oZGxfZGVidWdfbWFzaykgfD0gRExfREVCVUdfUFJFTElOSzsKKysJICAgICAgR0xST19kbF9kZWJ1Z19tYXNrIHw9IERMX0RFQlVHX1BSRUxJTks7CisgI2VuZGlmCisgCSAgICAgIEdMUk8oZGxfdHJhY2VfcHJlbGluaykgPSAmZW52bGluZVsxN107CisgCSAgICB9CitAQCAtMjU0OCw3ICsyNTQ4LDcgQEAgcHJvY2Vzc19lbnZ2YXJzIChlbnVtIG1vZGUgKm1vZGVwKQorIAl7CisgCSAgdW5zZXRlbnYgKCJNQUxMT0NfQ0hFQ0tfIik7CisgI2lmIF9fT1BUSU9OX0VHTElCQ19SVExEX0RFQlVHCistCSAgR0xSTyhkbF9kZWJ1Z19tYXNrKSA9IDA7CisrCSAgR0xST19kbF9kZWJ1Z19tYXNrID0gMDsKKyAjZW5kaWYKKyAJfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwNjE2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjLzAwMjctZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzLUNvbmRpdGlvbmFsbHktZXhjbHVkZS1jLXRlcy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorRnJvbSBlOTg3NzlhYTU2ZmFlMDM0NmRmZjJkMGI3MmFjYWRkMGVhZjAxODkxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjcgTWF5IDIwMTUgMTY6MTA6NTAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAyNy8yN10gZWdsaWJjLXVzZS1vcHRpb24tZ3JvdXBzOiBDb25kaXRpb25hbGx5IGV4Y2x1ZGUgYysrCisgdGVzdHMKKworICAgIFNvbWUgdGVzdCBwcm9ncmFtcyB3cml0dGVuIGluIGMrKyBhcmUgc3RpbGwgaW5jbHVkZWQgaW4gc3BpdGUgb2YKKyAgICAibGliYy1jeHgtdGVzdHMiIGJlaW5nIG9taXR0ZWQgZnJvbSBESVNUUk9fRkVBVFVSRVNfTElCQy4KKyAgICBBbGwgLmNjIHByb2dyYW1zIGFyZSBjb21waWxlZCB3aXRoIGcrKy4KKyAgICBnKysgYXV0b21hdGljYWxseSBzcGVjaWZpZXMgbGlua2luZyBhZ2FpbnN0IHRoZSBDKysgbGlicmFyeS4KKyAgICBUaGlzIHBhdGNoIGNvbmRpdGlvbmFsbHkgZXhjbHVkZXMgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcyB3ZWxsOgorCisgICAgICBidWctYXRleGl0My1saWIuY2MKKyAgICAgIHRzdC1jYW5jZWwyNC5jYworICAgICAgdHN0LWNhbmNlbDI0LXN0YXRpYy5jYworICAgICAgdHN0LXVuaXF1ZTNsaWIuY2MKKyAgICAgIHRzdC11bmlxdWUzbGliMi5jYworICAgICAgdHN0LXVuaXF1ZTRsaWIuY2MKKyAgICAgIHRzdC11bmlxdWUzLmNjCisgICAgICB0c3QtdW5pcXVlNC5jYworCisgICAgVGVzdGVkIHdpdGggRElTVFJPX0ZFQVRVUkVTX0xJQkNfcmVtb3ZlID0gIiBsaWJjLWN4eC10ZXN0cyIKKworICAgIFtZT0NUTyAjNzAwM10KKworU2lnbmVkLW9mZi1ieTogSnVybyBCeXN0cmlja3kgPGp1cm8uYnlzdHJpY2t5QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBkbGZjbi9NYWtlZmlsZSB8ICA4ICsrKysrKy0tCisgZWxmL01ha2VmaWxlICAgfCAxOSArKysrKysrKysrKysrKy0tLS0tCisgbnB0bC9NYWtlZmlsZSAgfCAxMiArKysrKysrKysrLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kbGZjbi9NYWtlZmlsZSBiL2RsZmNuL01ha2VmaWxlCitpbmRleCAzODI3NjA3Li45MjBiZDU4IDEwMDY0NAorLS0tIGEvZGxmY24vTWFrZWZpbGUKKysrKyBiL2RsZmNuL01ha2VmaWxlCitAQCAtMzksMTYgKzM5LDIwIEBAIGlmZXEgKHllcywkKGJ1aWxkLXNoYXJlZCkpCisgdGVzdHMgPSBnbHJlZm1haW4gZmFpbHRlc3QgdHN0LWRsYWRkciBkZWZhdWx0IGVycm1zZzEgdHN0Y3hhYXRleGl0IFwKKyAJYnVnLWRsb3BlbjEgYnVnLWRsc3ltMSB0c3QtZGxpbmZvIGJ1Zy1hdGV4aXQxIGJ1Zy1hdGV4aXQyIFwKKyAJdHN0YXRleGl0IGJ1Zy1kbC1sZWFmIHRzdC1yZWMtZGxvcGVuCistZW5kaWYKKy0KKyB0ZXN0cy0kKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSArPSBidWctYXRleGl0MworIAorK2VuZGlmCisrCisgbW9kdWxlcy1uYW1lcyA9IGdscmVmbGliMSBnbHJlZmxpYjIgZ2xyZWZsaWIzIGZhaWx0ZXN0bW9kIGRlZmF1bHRtb2QxIFwKKyAJCWRlZmF1bHRtb2QyIGVycm1zZzFtb2QgbW9kYXRleGl0IG1vZGN4YWF0ZXhpdCBcCisgCQlidWctZGxzeW0xLWxpYjEgYnVnLWRsc3ltMS1saWIyIGJ1Zy1hdGV4aXQxLWxpYiBcCisgCQlidWctYXRleGl0Mi1saWIgYnVnLWRsLWxlYWYtbGliIFwKKyAJCWJ1Zy1kbC1sZWFmLWxpYi1jYiBtb2RkdW1teTEgbW9kZHVtbXkyCisgCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyttb2R1bGVzLW5hbWVzICs9IGJ1Zy1hdGV4aXQzLWxpYgorK2VuZGlmCisrCisgZmFpbHRlc3Rtb2Quc28tbm8tei1kZWZzID0geWVzCisgZ2xyZWZsaWIyLnNvLW5vLXotZGVmcyA9IHllcworIGVycm1zZzFtb2Quc28tbm8tei1kZWZzID0geWVzCitkaWZmIC0tZ2l0IGEvZWxmL01ha2VmaWxlIGIvZWxmL01ha2VmaWxlCitpbmRleCA3MWExOGExLi4yNmZlM2M1IDEwMDY0NAorLS0tIGEvZWxmL01ha2VmaWxlCisrKysgYi9lbGYvTWFrZWZpbGUKK0BAIC0xNyw2ICsxNyw4IEBACisgCisgIyBNYWtlZmlsZSBmb3IgZWxmIHN1YmRpcmVjdG9yeSBvZiBHTlUgQyBMaWJyYXJ5LgorIAorK2luY2x1ZGUgLi4vb3B0aW9uLWdyb3Vwcy5tYWsKKysKKyBzdWJkaXIJCTo9IGVsZgorIAorIGluY2x1ZGUgLi4vTWFrZWNvbmZpZworQEAgLTE0NSwxMiArMTQ3LDE1IEBAIHRlc3RzICs9IGxvYWR0ZXN0IHJlc3Rlc3QxIHByZWxvYWR0ZXN0IGxvYWRmYWlsIG11bHRpbG9hZCBvcmlndGVzdCByZXNvbHZmYWlsIFwKKyAJIHVubG9hZDMgdW5sb2FkNCB1bmxvYWQ1IHVubG9hZDYgdW5sb2FkNyB1bmxvYWQ4IHRzdC1nbG9iYWwxIG9yZGVyMiBcCisgCSB0c3QtYXVkaXQxIHRzdC1hdWRpdDIgdHN0LWF1ZGl0OCB0c3QtYXVkaXQ5IFwKKyAJIHRzdC1zdGFja2d1YXJkMSB0c3QtYWRkcjEgdHN0LXRocmxvY2sgXAorLQkgdHN0LXVuaXF1ZTEgdHN0LXVuaXF1ZTIgJChpZiAkKENYWCksdHN0LXVuaXF1ZTMgdHN0LXVuaXF1ZTQgXAorLQkgdHN0LW5vZGVsZXRlKSBcCisrCSB0c3QtdW5pcXVlMSB0c3QtdW5pcXVlMiBcCisgCSB0c3QtaW5pdG9yZGVyIHRzdC1pbml0b3JkZXIyIHRzdC1yZWxzb3J0MSB0c3QtbnVsbC1hcmd2IFwKKyAJIHRzdC1wdHJndWFyZDEgdHN0LXRsc2FsaWduIHRzdC10bHNhbGlnbi1leHRlcm4gdHN0LW5vZGVsZXRlLW9wZW5lZCBcCisgCSB0c3Qtbm9kZWxldGUyCisgIwkgcmVsZGVwOQorK2lmZXEgKHksJChPUFRJT05fRUdMSUJDX0NYWF9URVNUUykpCisrdGVzdHMgKz0gJChpZiAkKENYWCksdHN0LXVuaXF1ZTMgdHN0LXVuaXF1ZTQgdHN0LW5vZGVsZXRlKQorK2VuZGlmCisrCisgaWZlcSAoJChidWlsZC1oYXJkY29kZWQtcGF0aC1pbi10ZXN0cykseWVzKQorIHRlc3RzICs9IHRzdC1kbG9wZW4tYW91dAorIExERkxBR1MtdHN0LWRsb3Blbi1hb3V0ID0gJChuby1waWUtbGRmbGFnKQorQEAgLTIwOSw5ICsyMTQsNiBAQCBtb2R1bGVzLW5hbWVzID0gdGVzdG9iajEgdGVzdG9iajIgdGVzdG9iajMgdGVzdG9iajQgdGVzdG9iajUgdGVzdG9iajYgXAorIAkJdHN0LXVuaXF1ZTFtb2QxIHRzdC11bmlxdWUxbW9kMiBcCisgCQl0c3QtdW5pcXVlMm1vZDEgdHN0LXVuaXF1ZTJtb2QyIFwKKyAJCXRzdC1hdWRpdG1vZDlhIHRzdC1hdWRpdG1vZDliIFwKKy0JCSQoaWYgJChDWFgpLHRzdC11bmlxdWUzbGliIHRzdC11bmlxdWUzbGliMiB0c3QtdW5pcXVlNGxpYiBcCistCQkgIHRzdC1ub2RlbGV0ZS11bmlxdWVtb2QgdHN0LW5vZGVsZXRlLXJ0bGRtb2QgXAorLQkJICB0c3Qtbm9kZWxldGUtem1vZCkgXAorIAkJdHN0LWluaXRvcmRlcmExIHRzdC1pbml0b3JkZXJiMSBcCisgCQl0c3QtaW5pdG9yZGVyYTIgdHN0LWluaXRvcmRlcmIyIFwKKyAJCXRzdC1pbml0b3JkZXJhMyB0c3QtaW5pdG9yZGVyYTQgXAorQEAgLTIyMCw2ICsyMjIsMTMgQEAgbW9kdWxlcy1uYW1lcyA9IHRlc3RvYmoxIHRlc3RvYmoyIHRlc3RvYmozIHRlc3RvYmo0IHRlc3RvYmo1IHRlc3RvYmo2IFwKKyAJCXRzdC1yZWxzb3J0MW1vZDEgdHN0LXJlbHNvcnQxbW9kMiB0c3QtYXJyYXkyZGVwIFwKKyAJCXRzdC1hcnJheTVkZXAgdHN0LW51bGwtYXJndi1saWIgXAorIAkJdHN0LXRsc2FsaWduLWxpYiB0c3Qtbm9kZWxldGUtb3BlbmVkLWxpYiB0c3Qtbm9kZWxldGUybW9kCisrCisraWZlcSAoeSwkKE9QVElPTl9FR0xJQkNfQ1hYX1RFU1RTKSkKKyttb2R1bGVzLW5hbWVzICs9ICQoaWYgJChDWFgpLHRzdC11bmlxdWUzbGliIHRzdC11bmlxdWUzbGliMiB0c3QtdW5pcXVlNGxpYiBcCisrCQkgIHRzdC1ub2RlbGV0ZS11bmlxdWVtb2QgdHN0LW5vZGVsZXRlLXJ0bGRtb2QgXAorKwkJICB0c3Qtbm9kZWxldGUtem1vZCkKKytlbmRpZgorKworIGlmZXEgKHllcywkKGhhdmUtcHJvdGVjdGVkLWRhdGEpKQorIG1vZHVsZXMtbmFtZXMgKz0gdHN0LXByb3RlY3RlZDFtb2RhIHRzdC1wcm90ZWN0ZWQxbW9kYgorIHRlc3RzICs9IHRzdC1wcm90ZWN0ZWQxYSB0c3QtcHJvdGVjdGVkMWIKK2RpZmYgLS1naXQgYS9ucHRsL01ha2VmaWxlIGIvbnB0bC9NYWtlZmlsZQoraW5kZXggNTk2Y2EzYy4uNTBhNzA4YiAxMDA2NDQKKy0tLSBhL25wdGwvTWFrZWZpbGUKKysrKyBiL25wdGwvTWFrZWZpbGUKK0BAIC0zOTAsMTIgKzM5MCwyMCBAQCBsaW5rLWxpYmMtc3RhdGljIDo9ICQoY29tbW9uLW9ianBmeClsaWJjLmEgJChzdGF0aWMtZ251bGliKSBcCisgCQkgICAgJChjb21tb24tb2JqcGZ4KWxpYmMuYQorIAorIHRlc3RzLXN0YXRpYyArPSB0c3QtbG9jYWxlMSB0c3QtbG9jYWxlMiB0c3Qtc3RhY2tndWFyZDEtc3RhdGljIFwKKy0JCXRzdC1jYW5jZWwyMS1zdGF0aWMgdHN0LWNhbmNlbDI0LXN0YXRpYyB0c3QtY29uZDgtc3RhdGljIFwKKysJCXRzdC1jYW5jZWwyMS1zdGF0aWMgdHN0LWNvbmQ4LXN0YXRpYyBcCisgCQl0c3QtbXV0ZXg4LXN0YXRpYyB0c3QtbXV0ZXhwaTgtc3RhdGljIHRzdC1zZW0xMS1zdGF0aWMgXAorIAkJdHN0LXNlbTEyLXN0YXRpYworLXRlc3RzICs9IHRzdC1zdGFja2d1YXJkMS1zdGF0aWMgdHN0LWNhbmNlbDIxLXN0YXRpYyB0c3QtY2FuY2VsMjQtc3RhdGljIFwKKysKKytpZmVxICh5LCQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpKQorK3Rlc3RzLXN0YXRpYyArPSB0c3QtY2FuY2VsMjQtc3RhdGljCisrZW5kaWYKKysKKyt0ZXN0cyArPSB0c3Qtc3RhY2tndWFyZDEtc3RhdGljIHRzdC1jYW5jZWwyMS1zdGF0aWMgXAorIAkgdHN0LWNvbmQ4LXN0YXRpYyB0c3QtbXV0ZXg4LXN0YXRpYyB0c3QtbXV0ZXhwaTgtc3RhdGljIFwKKyAJIHRzdC1zZW0xMS1zdGF0aWMgdHN0LXNlbTEyLXN0YXRpYworKworK3Rlc3RzLSQoT1BUSU9OX0VHTElCQ19DWFhfVEVTVFMpICs9IHRzdC1jYW5jZWwyNC1zdGF0aWMKKysKKyB4dGVzdHMtc3RhdGljICs9IHRzdC1zZXR1aWQxLXN0YXRpYworIAorICMgVGhlc2UgdGVzdHMgYXJlIGxpbmtlZCB3aXRoIGxpYmMgYmVmb3JlIGxpYnB0aHJlYWQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZXRjL2xkLnNvLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliYy9ldGMvbGQuc28uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZXRjL2xkLnNvLmNvbmYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2dlbmVyYXRlLXN1cHBvcnRlZC5tayBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2dsaWJjL2dlbmVyYXRlLXN1cHBvcnRlZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmEyOGMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmMvZ2VuZXJhdGUtc3VwcG9ydGVkLm1rCkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vbWFrZQorCitpbmNsdWRlICQoSU4pCisKK2FsbDoKKwlybSAtZiAkKE9VVCkKKwl0b3VjaCAkKE9VVCkKKwlmb3IgbG9jYWxlIGluICQoU1VQUE9SVEVELUxPQ0FMRVMpOyBkbyBcCisJCVsgJCRsb2NhbGUgPSB0cnVlIF0gJiYgY29udGludWU7IFwKKwkJZWNobyAkJGxvY2FsZSB8IHNlZCAncywvLCAsJyA+PiAkKE9VVCk7IFwKKwlkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9nbGliY18yLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUxZmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvZ2xpYmNfMi4yMi5iYgpAQCAtMCwwICsxLDEzNSBAQAorcmVxdWlyZSBnbGliYy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRVM7bWQ1PWU5YTU1OGUyNDNiMzZkMzIwOWYzODBkZWIzOTRiMjEzIFwKKyAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICBmaWxlOi8vcG9zaXgvcnhzcGVuY2VyL0NPUFlSSUdIVDttZDU9ZGM1NDg1YmIzOTRhMTNiMjMzMmVjMWM3ODVmNWQ4M2EgXAorICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIGtjb25maWctZnJvbnRlbmRzLW5hdGl2ZSIKKworU1JDUkVWID89ICJhMzRkMWM2YWZjODY1MjFkNmFkMTc2NjJhM2I1MzYyZDg0ODE1MTRjIgorCitCUkFOQ0ggPz0gInJlbGVhc2UvJHtQVn0vbWFzdGVyIgorCitHTElCQ19HSVRfVVJJID89ICJnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2xpYmMuZ2l0IgorCitTUkNfVVJJID0gIiR7R0xJQkNfR0lUX1VSSX07YnJhbmNoPSR7QlJBTkNIfTtuYW1lPWdsaWJjIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtQmFja3BvcnQtaHR0cHMtc291cmNld2FyZS5vcmctbWwtbGliYy1wb3J0cy0yMDA3LTEyLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LWZzbC1lNTAwLWU1NTAwLWU2NTAwLTYwM2UtZnNxcnQtaW1wbGVtZW50YXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi1yZWFkbGliLUFkZC1PRUNPUkVfS05PV05fSU5URVJQUkVURVJfTkFNRVMtdG8ta25vd24tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDctcHBjLXNxcnQtRml4LXVuZGVmaW5lZC1yZWZlcmVuY2UtdG8tX19zcXJ0X2Zpbml0ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LV9faWVlZTc1NF9zcXJ0LWYtYXJlLW5vdy1pbmxpbmUtZnVuY3Rpb25zLWFuZC1jYWxsLW8ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1RdW90ZS1mcm9tLWJ1Zy0xNDQzLXdoaWNoLWV4cGxhaW5zLXdoYXQtdGhlLXBhdGNoLWRvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtZWdsaWJjLXJ1bi1saWJtLWVyci10YWIucGwtd2l0aC1zcGVjaWZpYy1kaXJzLWluLVMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1fX2llZWU3NTRfc3FydC1mLWFyZS1ub3ctaW5saW5lLWZ1bmN0aW9ucy1hbmQtY2FsbC1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItTWFrZS1sZC12ZXJzaW9uLW91dHB1dC1tYXRjaGluZy1ncm9rLWdvbGQtcy1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1zeXNkZXBzLWdudS1jb25maWd1cmUuYWMtaGFuZGxlLWNvcnJlY3RseS1saWJjX2N2X3JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtQWRkLXVudXNlZC1hdHRyaWJ1dGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS1XaGVuLWRpc2FibGluZy1TU0UtYWxzby1tYWtlLXN1cmUtdGhhdC1mcG1hdGgtaXMtbm90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYteWVzLXdpdGhpbi10aGUtcGF0aC1zZXRzLXdyb25nLWNvbmZpZy12YXJpYWJsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy10aW1lem9uZS1yZS13cml0dGVuLXR6c2VsZWN0LWFzLXBvc2l4LXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTgtZWdsaWJjLUNyb3NzLWJ1aWxkaW5nLWFuZC10ZXN0aW5nLWluc3RydWN0aW9ucy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE5LWVnbGliYy1CcmluZy1FZ2xpYmMtb3B0aW9uLWdyb3VwLWluZnJhc3RydWN0dXJlLXRvLWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1lZ2xpYmMtSGVscC1ib290c3RyYXAtY3Jvc3MtdG9vbGNoYWluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtZWdsaWJjLWNoZXJyeS1waWNrZWQtZnJvbS1odHRwLXd3dy5lZ2xpYmMub3JnLWFyY2hpdi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIyLWVnbGliYy1DbGVhci1jYWNoZS1saW5lcy1vbi1wcGM4eHgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMy1lZ2xpYmMtUmVzb2x2ZS1fX2Zwc2NyX3ZhbHVlcy1vbi1TSDQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNC1lZ2xpYmMtRm9yd2FyZC1wb3J0LWVnbGliYy1vcHRpb25zLWdyb3Vwcy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjUtZWdsaWJjLUluc3RhbGwtUElDLWFyY2hpdmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtZWdsaWJjLWRsX2RlYnVnX21hc2staXMtY29udHJvbGxlZC1ieS1fX09QVElPTl9FR0xJQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LWVnbGliYy11c2Utb3B0aW9uLWdyb3Vwcy1Db25kaXRpb25hbGx5LWV4Y2x1ZGUtYy10ZXMucGF0Y2ggXAorIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgIGZpbGU6Ly9ldGMvbGQuc28uY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1zdXBwb3J0ZWQubWsgXAorIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1uYXRpdmVzZGstZ2xpYmMtTG9vay1mb3ItaG9zdC1zeXN0ZW0tbGQuc28uY2FjaGUtYXMtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItbmF0aXZlc2RrLWdsaWJjLUZpeC1idWZmZXItb3ZlcnJ1bi13aXRoLWEtcmVsb2NhdGVkLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLW5hdGl2ZXNkay1nbGliYy1SYWlzZS10aGUtc2l6ZS1vZi1hcnJheXMtY29udGFpbmluZy0ucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorQiA9ICIke1dPUktESVJ9L2J1aWxkLSR7VEFSR0VUX1NZU30iCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiIgorCisjIHRoZSAtaXN5c3RlbSBpbiBiaXRiYWtlLmNvbmYgc2NyZXdzIHVwIGdsaWJjIGRvX3N0YWdlCitCVUlMRF9DUFBGTEFHUyA9ICItSSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK1RBUkdFVF9DUFBGTEFHUyA9ICItSSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7aW5jbHVkZWRpcn0iCisKK0dMSUJDX0JST0tFTl9MT0NBTEVTID0gIiBfRVIgX0VUIHNvX0VUIHluX0VSIHNpZF9FVCB0cl9UUiBtbl9NTiBnZXpfRVQgZ2V6X0VSIGJuX0JEIHRlX0lOIGVzX0NSLklTTy04ODU5LTEiCisKKyMKKyMgV2Ugd2lsbCBza2lwIHBhcnNpbmcgZ2xpYmMgd2hlbiB0YXJnZXQgc3lzdGVtIEMgbGlicmFyeSBzZWxlY3Rpb24gaXMgbm90IGdsaWJjCisjIHRoaXMgaGVscHMgaW4gZWFzaW5nIG91dCBwYXJzaW5nIGZvciBub24tZ2xpYmMgc3lzdGVtIGxpYnJhcmllcworIworQ09NUEFUSUJMRV9IT1NUX2xpYmMtbXVzbF9jbGFzcy10YXJnZXQgPSAibnVsbCIKK0NPTVBBVElCTEVfSE9TVF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAibnVsbCIKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLWtlcm5lbD0ke09MREVTVF9LRVJORUx9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY3ZzIC0tZGlzYWJsZS1wcm9maWxlIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGVidWcgLS13aXRob3V0LWdkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1jbG9jYWxlPWdudSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtYWRkLW9ucyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWhlYWRlcnM9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1zZWxpbnV4IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1vYnNvbGV0ZS1ycGMgXAorICAgICAgICAgICAgICAgIC0td2l0aC1rY29uZmlnPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSBcCisgICAgICAgICAgICAgICAgJHtHTElCQ19FWFRSQV9PRUNPTkZ9IgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGdldF9saWJjX2ZwdV9zZXR0aW5nKGJiLCBkKX0iCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGliYy1pbmV0LWFubCcsICctLWVuYWJsZS1uc2NkJywgJy0tZGlzYWJsZS1uc2NkJywgZCl9IgorCisKK2RvX3BhdGNoX2FwcGVuZCgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2ZpeF9yZWFkbGliX2MnLCBkKQorfQorCitkb19maXhfcmVhZGxpYl9jICgpIHsKKwlzZWQgLWkgLWUgJ3MjT0VDT1JFX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTIyR7RUdMSUJDX0tOT1dOX0lOVEVSUFJFVEVSX05BTUVTfSMnICR7U30vZWxmL3JlYWRsaWIuYworfQorCitkb19jb25maWd1cmUgKCkgeworIyBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIGF2b2lkIHRoZSBhdXRvY29uZi9hdXRvbWFrZS9hY2xvY2FsL2F1dG9oZWFkZXIKKyMgY2FsbHMgZm9yIG5vdworIyBkb24ndCBwYXNzIENQUEZMQUdTIGludG8gY29uZmlndXJlLCBzaW5jZSBpdCB1cHNldHMgdGhlIGtlcm5lbC1oZWFkZXJzCisjIHZlcnNpb24gY2hlY2sgYW5kIGRvZXNuJ3QgcmVhbGx5IGhlbHAgd2l0aCBhbnl0aGluZworICAgICAgICAoY2QgJHtTfSAmJiBnbnUtY29uZmlnaXplKSB8fCBkaWUgImZhaWx1cmUgaW4gcnVubmluZyBnbnUtY29uZmlnaXplIgorICAgICAgICBmaW5kICR7U30gLW5hbWUgImNvbmZpZ3VyZSIgfCB4YXJncyB0b3VjaAorICAgICAgICBDUFBGTEFHUz0iIiBvZV9ydW5jb25mCit9CisKK3JwY3N2YyA9ICJib290cGFyYW1fcHJvdC54IG5sbV9wcm90LnggcnN0YXQueCBcCisJICB5cHBhc3N3ZC54IGtsbV9wcm90LnggcmV4Lnggc21faW50ZXIueCBtb3VudC54IFwKKwkgIHJ1c2Vycy54IHNwcmF5LnggbmZzX3Byb3QueCBycXVvdGEueCBrZXlfcHJvdC54IgorCitkb19jb21waWxlICgpIHsKKwkjIC1XbCwtcnBhdGgtbGluayA8c3RhZ2luZz4vbGliIGluIExERkxBR1MgY2FuIGNhdXNlIGJyZWFrYWdlIGlmIGFub3RoZXIgZ2xpYmMgaXMgaW4gc3RhZ2luZworCXVuc2V0IExERkxBR1MKKwliYXNlX2RvX2NvbXBpbGUKKwkoCisJCWNkICR7U30vc3VucnBjL3JwY3N2YworCQlmb3IgciBpbiAke3JwY3N2Y307IGRvCisJCQloPWBlY2hvICRyfHNlZCAtZSdzLFwueCQsLmgsJ2AKKwkJCXJtIC1mICRoCisJCQkke0J9L3N1bnJwYy9jcm9zcy1ycGNnZW4gLWggJHIgLW8gJGggfHwgYmJ3YXJuICIke1BOfTogdW5hYmxlIHRvIGdlbmVyYXRlIGhlYWRlciBmb3IgJHIiCisJCWRvbmUKKwkpCisJZWNobyAiQWRqdXN0IGxkZCBzY3JpcHQiCisJaWYgWyAtbiAiJHtSVExETElTVH0iIF0KKwl0aGVuCisJCXByZXZydGxkPWBjYXQgJHtCfS9lbGYvbGRkIHwgZ3JlcCAiXlJUTERMSVNUPSIgfCBzZWQgJ3MjXlJUTERMSVNUPSJcP1woW14iXSpcKSJcPyQjXDEjJ2AKKwkJaWYgWyAiJHtwcmV2cnRsZH0iICE9ICIke1JUTERMSVNUfSIgXQorCQl0aGVuCisJCQlzZWQgLWkgJHtCfS9lbGYvbGRkIC1lICJzI15SVExETElTVD0uKlwkI1JUTERMSVNUPVwiJHtwcmV2cnRsZH0gJHtSVExETElTVH1cIiMiCisJCWZpCisJZmkKKworfQorCityZXF1aXJlIGdsaWJjLXBhY2thZ2UuaW5jCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS8zMmFuZDY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZmVhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLzMyYW5kNjRiaXQucGF0Y2gKQEAgLTAsMCArMSwzMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1dlIHJ1biB0aGUgbGRjb25maWcgaW4gdGhlIGNyb3NzIGZhc2hpb24uIG1ha2UgdGhlIGNvZGUgYml0c2l6ZSBhd2FyZSBzbyB0aGF0IAord2UgY2FuIGNyb3NzIGJ1aWxkIGxkY29uZmlnIGNhY2hlIGZvciB2YXJpb3VzIGFyY2hpdGVjdHVyZXMuCisKK1JpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPiAyMDA5LzA1LzE5CitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDA5LzAzLzI5CisKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkZWxmbGliLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3JlYWRlbGZsaWIuYworQEAgLTQwLDM5ICs0MCwyMTIgQEAgZG8JCQkJCQkJCVwKKyAKKyAvKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyBvaywgIT0gMCBpbiBjYXNlIG9mIGVycm9yLiAgKi8KKyBpbnQKKy1wcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorK3Byb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAJCSAgdW5zaWduZWQgaW50ICpvc3ZlcnNpb24sIGNoYXIgKipzb25hbWUsIHZvaWQgKmZpbGVfY29udGVudHMsCisgCQkgIHNpemVfdCBmaWxlX2xlbmd0aCkKKyB7CisgICBpbnQgaTsKKyAgIHVuc2lnbmVkIGludCBqOworLSAgRWxmVyhBZGRyKSBsb2FkYWRkcjsKKysgIEVsZjMyX0FkZHIgbG9hZGFkZHI7CisgICB1bnNpZ25lZCBpbnQgZHluYW1pY19hZGRyOworICAgc2l6ZV90IGR5bmFtaWNfc2l6ZTsKKyAgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisgCistICBFbGZXKEVoZHIpICplbGZfaGVhZGVyOworLSAgRWxmVyhQaGRyKSAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworLSAgRWxmVyhEeW4pICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisrICBFbGYzMl9FaGRyICplbGZfaGVhZGVyOworKyAgRWxmMzJfUGhkciAqZWxmX3BoZWFkZXIsICpzZWdtZW50OworKyAgRWxmMzJfRHluICpkeW5hbWljX3NlZ21lbnQsICpkeW5fZW50cnk7CisgICBjaGFyICpkeW5hbWljX3N0cmluZ3M7CisgCistICBlbGZfaGVhZGVyID0gKEVsZlcoRWhkcikgKikgZmlsZV9jb250ZW50czsKKysgIGVsZl9oZWFkZXIgPSAoRWxmMzJfRWhkciAqKSBmaWxlX2NvbnRlbnRzOworICAgKm9zdmVyc2lvbiA9IDA7CisgCistICBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdICE9IEVsZlcgKENMQVNTKSkKKysgIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorICAgICB7CistICAgICAgaWYgKG9wdF92ZXJib3NlKQorKyAgICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBub3QgYSBzaGFyZWQgb2JqZWN0IGZpbGUgKFR5cGU6ICVkKS5cbiIpLCBmaWxlX25hbWUsCisrCSAgICAgZWxmX2hlYWRlci0+ZV90eXBlKTsKKysgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZWxmIHByb2dyYW0gaGVhZGVyLiAgKi8KKysgIGVsZl9waGVhZGVyID0gKEVsZjMyX1BoZHIgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKysgIGNoZWNrX3B0ciAoZWxmX3BoZWFkZXIpOworKworKyAgLyogVGhlIGxpYnJhcnkgaXMgYW4gZWxmIGxpYnJhcnksIG5vdyBzZWFyY2ggZm9yIHNvbmFtZSBhbmQKKysgICAgIGxpYmM1L2xpYmM2LiAgKi8KKysgICpmbGFnID0gRkxBR19FTEY7CisrCisrICBsb2FkYWRkciA9IC0xOworKyAgZHluYW1pY19hZGRyID0gMDsKKysgIGR5bmFtaWNfc2l6ZSA9IDA7CisrICBwcm9ncmFtX2ludGVycHJldGVyID0gTlVMTDsKKysgIGZvciAoaSA9IDAsIHNlZ21lbnQgPSBlbGZfcGhlYWRlcjsKKysgICAgICAgaSA8IGVsZl9oZWFkZXItPmVfcGhudW07IGkrKywgc2VnbWVudCsrKQorKyAgICB7CisrICAgICAgY2hlY2tfcHRyIChzZWdtZW50KTsKKysKKysgICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKKyAJeworLQkgIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikKKy0JICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBhIDMyIGJpdCBFTEYgZmlsZS5cbiIpLCBmaWxlX25hbWUpOworLQkgIGVsc2UgaWYgKGVsZl9oZWFkZXItPmVfaWRlbnQgW0VJX0NMQVNTXSA9PSBFTEZDTEFTUzY0KQorLQkgICAgZXJyb3IgKDAsIDAsIF8oIiVzIGlzIGEgNjQgYml0IEVMRiBmaWxlLlxuIiksIGZpbGVfbmFtZSk7CistCSAgZWxzZQorLQkgICAgZXJyb3IgKDAsIDAsIF8oIlVua25vd24gRUxGQ0xBU1MgaW4gZmlsZSAlcy5cbiIpLCBmaWxlX25hbWUpOworKwljYXNlIFBUX0xPQUQ6CisrCSAgaWYgKGxvYWRhZGRyID09IChFbGYzMl9BZGRyKSAtMSkKKysJICAgIGxvYWRhZGRyID0gc2VnbWVudC0+cF92YWRkciAtIHNlZ21lbnQtPnBfb2Zmc2V0OworKwkgIGJyZWFrOworKworKwljYXNlIFBUX0RZTkFNSUM6CisrCSAgaWYgKGR5bmFtaWNfYWRkcikKKysJICAgIGVycm9yICgwLCAwLCBfKCJtb3JlIHRoYW4gb25lIGR5bmFtaWMgc2VnbWVudFxuIikpOworKworKwkgIGR5bmFtaWNfYWRkciA9IHNlZ21lbnQtPnBfb2Zmc2V0OworKwkgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgIGJyZWFrOworKworKwljYXNlIFBUX0lOVEVSUDoKKysJICBwcm9ncmFtX2ludGVycHJldGVyID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgY2hlY2tfcHRyIChwcm9ncmFtX2ludGVycHJldGVyKTsKKysKKysJICAvKiBDaGVjayBpZiB0aGlzIGlzIGVub3VnaCB0byBjbGFzc2lmeSB0aGUgYmluYXJ5LiAgKi8KKysJICBmb3IgKGogPSAwOyBqIDwgc2l6ZW9mIChpbnRlcnByZXRlcnMpIC8gc2l6ZW9mIChpbnRlcnByZXRlcnMgWzBdKTsKKysJICAgICAgICsraikKKysJICAgIGlmIChzdHJjbXAgKHByb2dyYW1faW50ZXJwcmV0ZXIsIGludGVycHJldGVyc1tqXS5zb25hbWUpID09IDApCisrCSAgICAgIHsKKysJCSpmbGFnID0gaW50ZXJwcmV0ZXJzW2pdLmZsYWc7CisrCQlicmVhazsKKysJICAgICAgfQorKwkgIGJyZWFrOworKworKwljYXNlIFBUX05PVEU6CisrCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHNlZ21lbnQtPnBfZmlsZXN6ID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKysJICAgIHsKKysJICAgICAgRWxmMzJfV29yZCAqYWJpX25vdGUgPSAoRWxmMzJfV29yZCAqKSAoZmlsZV9jb250ZW50cworKwkJCQkJCSAgICAgKyBzZWdtZW50LT5wX29mZnNldCk7CisrCSAgICAgIEVsZjMyX0FkZHIgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKworKwkgICAgICB3aGlsZSAoYWJpX25vdGUgWzBdICE9IDQgfHwgYWJpX25vdGUgWzFdICE9IDE2CisrCQkgICAgIHx8IGFiaV9ub3RlIFsyXSAhPSAxCisrCQkgICAgIHx8IG1lbWNtcCAoYWJpX25vdGUgKyAzLCAiR05VIiwgNCkgIT0gMCkKKysJCXsKKysjZGVmaW5lIFJPVU5EKGxlbikgKCgobGVuKSArIHNpemVvZiAoRWxmMzJfV29yZCkpIC0gMSkgJiAtc2l6ZW9mIChFbGYzMl9Xb3JkKSkpCisrCQkgIEVsZjMyX0FkZHIpIG5vdGVfc2l6ZSA9IDMgKiBzaXplb2YgKEVsZjMyX1dvcmQpKQorKwkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzBdKQorKwkJCQkJICsgUk9VTkQgKGFiaV9ub3RlWzFdKTsKKysKKysJCSAgaWYgKHNpemUgLSAzMiA8IG5vdGVfc2l6ZSB8fCBub3RlX3NpemUgPT0gMCkKKysJCSAgICB7CisrCQkgICAgICBzaXplID0gMDsKKysJCSAgICAgIGJyZWFrOworKwkJICAgIH0KKysJCSAgc2l6ZSAtPSBub3RlX3NpemU7CisrCQkgIGFiaV9ub3RlID0gKHZvaWQgKikgYWJpX25vdGUgKyBub3RlX3NpemU7CisrCQl9CisrCisrCSAgICAgIGlmIChzaXplID09IDApCisrCQlicmVhazsKKysKKysJICAgICAgKm9zdmVyc2lvbiA9IChhYmlfbm90ZSBbNF0gPDwgMjQpIHwKKysJCQkgICAoKGFiaV9ub3RlIFs1XSAmIDB4ZmYpIDw8IDE2KSB8CisrCQkJICAgKChhYmlfbm90ZSBbNl0gJiAweGZmKSA8PCA4KSB8CisrCQkJICAgKGFiaV9ub3RlIFs3XSAmIDB4ZmYpOworKwkgICAgfQorKwkgIGJyZWFrOworKworKwlkZWZhdWx0OgorKwkgIGJyZWFrOworKwl9CisrCisrICAgIH0KKysgIGlmIChsb2FkYWRkciA9PSAoRWxmMzJfQWRkcikgLTEpCisrICAgIHsKKysgICAgICAvKiBWZXJ5IHN0cmFuZ2UuICovCisrICAgICAgbG9hZGFkZHIgPSAwOworKyAgICB9CisrCisrICAvKiBOb3cgd2UgY2FuIHJlYWQgdGhlIGR5bmFtaWMgc2VjdGlvbnMuICAqLworKyAgaWYgKGR5bmFtaWNfc2l6ZSA9PSAwKQorKyAgICByZXR1cm4gMTsKKysKKysgIGR5bmFtaWNfc2VnbWVudCA9IChFbGYzMl9EeW4gKikgKGZpbGVfY29udGVudHMgKyBkeW5hbWljX2FkZHIpOworKyAgY2hlY2tfcHRyIChkeW5hbWljX3NlZ21lbnQpOworKworKyAgLyogRmluZCB0aGUgc3RyaW5nIHRhYmxlLiAgKi8KKysgIGR5bmFtaWNfc3RyaW5ncyA9IE5VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgICAgICArK2R5bl9lbnRyeSkKKysgICAgeworKyAgICAgIGNoZWNrX3B0ciAoZHluX2VudHJ5KTsKKysgICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TVFJUQUIpCisrCXsKKysJICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyKTsKKysJICBjaGVja19wdHIgKGR5bmFtaWNfc3RyaW5ncyk7CisrCSAgYnJlYWs7CisgCX0KKy0gICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorKyAgaWYgKGR5bmFtaWNfc3RyaW5ncyA9PSBOVUxMKQorKyAgICByZXR1cm4gMTsKKysKKysgIC8qIE5vdyByZWFkIHRoZSBEVF9ORUVERUQgYW5kIERUX1NPTkFNRSBlbnRyaWVzLiAgKi8KKysgIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICAgICAgICsrZHluX2VudHJ5KQorKyAgICB7CisrICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEIHx8IGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwl7CisrCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbDsKKysJICBjaGVja19wdHIgKG5hbWUpOworKworKwkgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCkKKysJICAgIHsKKysKKysJICAgICAgaWYgKCpmbGFnID09IEZMQUdfRUxGKQorKwkJeworKwkJICAvKiBDaGVjayBpZiB0aGlzIGlzIGVub3VnaCB0byBjbGFzc2lmeSB0aGUgYmluYXJ5LiAgKi8KKysJCSAgZm9yIChqID0gMDsKKysJCSAgICAgICBqIDwgc2l6ZW9mIChrbm93bl9saWJzKSAvIHNpemVvZiAoa25vd25fbGlicyBbMF0pOworKwkJICAgICAgICsraikKKysJCSAgICBpZiAoc3RyY21wIChuYW1lLCBrbm93bl9saWJzIFtqXS5zb25hbWUpID09IDApCisrCQkgICAgICB7CisrCQkJKmZsYWcgPSBrbm93bl9saWJzIFtqXS5mbGFnOworKwkJCWJyZWFrOworKwkJICAgICAgfQorKwkJfQorKwkgICAgfQorKworKwkgIGVsc2UgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU09OQU1FKQorKwkgICAgKnNvbmFtZSA9IHhzdHJkdXAgKG5hbWUpOworKworKwkgIC8qIERvIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkPyAgKi8KKysJICBpZiAoKnNvbmFtZSAmJiAqZmxhZyAhPSBGTEFHX0VMRikKKysJICAgIHJldHVybiAwOworKwl9CisrICAgIH0KKysKKysgIC8qIFdlIHJlYWNoIHRoaXMgcG9pbnQgb25seSBpZiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gYSBEVF9TT05BTUUKKysgICAgIG9yIGlmIHdlIGNhbid0IGNsYXNzaWZ5IHRoZSBsaWJyYXJ5LiAgSWYgaXQgZG9lc24ndCBoYXZlIGEKKysgICAgIHNvbmFtZSwgcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5LiAgKi8KKysgIGlmICgqc29uYW1lID09IE5VTEwpCisrICAgICpzb25hbWUgPSB4c3RyZHVwIChsaWIpOworKworKyAgcmV0dXJuIDA7CisrfQorKworK2ludAorK3Byb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKysJCSAgdW5zaWduZWQgaW50ICpvc3ZlcnNpb24sIGNoYXIgKipzb25hbWUsIHZvaWQgKmZpbGVfY29udGVudHMsCisrCQkgIHNpemVfdCBmaWxlX2xlbmd0aCkKKyt7CisrICBpbnQgaTsKKysgIHVuc2lnbmVkIGludCBqOworKyAgRWxmNjRfQWRkciBsb2FkYWRkcjsKKysgIHVuc2lnbmVkIGludCBkeW5hbWljX2FkZHI7CisrICBzaXplX3QgZHluYW1pY19zaXplOworKyAgY2hhciAqcHJvZ3JhbV9pbnRlcnByZXRlcjsKKysKKysgIEVsZjY0X0VoZHIgKmVsZl9oZWFkZXI7CisrICBFbGY2NF9QaGRyICplbGZfcGhlYWRlciwgKnNlZ21lbnQ7CisrICBFbGY2NF9EeW4gKmR5bmFtaWNfc2VnbWVudCwgKmR5bl9lbnRyeTsKKysgIGNoYXIgKmR5bmFtaWNfc3RyaW5nczsKKysKKysgIGVsZl9oZWFkZXIgPSAoRWxmNjRfRWhkciAqKSBmaWxlX2NvbnRlbnRzOworKyAgKm9zdmVyc2lvbiA9IDA7CisrCisgICBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKyAgICAgeworICAgICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBub3QgYSBzaGFyZWQgb2JqZWN0IGZpbGUgKFR5cGU6ICVkKS5cbiIpLCBmaWxlX25hbWUsCitAQCAtODEsNyArMjU0LDcgQEAgcHJvY2Vzc19lbGZfZmlsZSAoY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgICB9CisgCisgICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworLSAgZWxmX3BoZWFkZXIgPSAoRWxmVyhQaGRyKSAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgZWxmX3BoZWFkZXIgPSAoRWxmNjRfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworICAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisgCisgICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorQEAgLTEwMCw3ICsyNzMsNyBAQCBwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgICAgc3dpdGNoIChzZWdtZW50LT5wX3R5cGUpCisgCXsKKyAJY2FzZSBQVF9MT0FEOgorLQkgIGlmIChsb2FkYWRkciA9PSAoRWxmVyhBZGRyKSkgLTEpCisrCSAgaWYgKGxvYWRhZGRyID09IChFbGY2NF9BZGRyKSAtMSkKKyAJICAgIGxvYWRhZGRyID0gc2VnbWVudC0+cF92YWRkciAtIHNlZ21lbnQtPnBfb2Zmc2V0OworIAkgIGJyZWFrOworIAorQEAgLTEyOSwxNiArMzAyLDE2IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAJY2FzZSBQVF9OT1RFOgorIAkgIGlmICghKm9zdmVyc2lvbiAmJiBzZWdtZW50LT5wX2ZpbGVzeiA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisgCSAgICB7CistCSAgICAgIEVsZlcoV29yZCkgKmFiaV9ub3RlID0gKEVsZlcoV29yZCkgKikgKGZpbGVfY29udGVudHMKKysJICAgICAgRWxmNjRfV29yZCAqYWJpX25vdGUgPSAoRWxmNjRfV29yZCAqKSAoZmlsZV9jb250ZW50cworIAkJCQkJCSAgICAgKyBzZWdtZW50LT5wX29mZnNldCk7CistCSAgICAgIEVsZlcoQWRkcikgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkgICAgICBFbGY2NF9BZGRyIHNpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKyAKKyAJICAgICAgd2hpbGUgKGFiaV9ub3RlIFswXSAhPSA0IHx8IGFiaV9ub3RlIFsxXSAhPSAxNgorIAkJICAgICB8fCBhYmlfbm90ZSBbMl0gIT0gMQorIAkJICAgICB8fCBtZW1jbXAgKGFiaV9ub3RlICsgMywgIkdOVSIsIDQpICE9IDApCisgCQl7CistI2RlZmluZSBST1VORChsZW4pICgoKGxlbikgKyBzaXplb2YgKEVsZlcoV29yZCkpIC0gMSkgJiAtc2l6ZW9mIChFbGZXKFdvcmQpKSkKKy0JCSAgRWxmVyhBZGRyKSBub3RlX3NpemUgPSAzICogc2l6ZW9mIChFbGZXKFdvcmQpKQorKyNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGY2NF9Xb3JkKSAtIDEpICYgLXNpemVvZiAoRWxmNjRfV29yZCkpCisrCQkgIEVsZjY0X0FkZHIgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmNjRfV29yZCkKKyAJCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKyAJCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisgCitAQCAtMTY2LDcgKzMzOSw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAJfQorIAorICAgICB9CistICBpZiAobG9hZGFkZHIgPT0gKEVsZlcoQWRkcikpIC0xKQorKyAgaWYgKGxvYWRhZGRyID09IChFbGY2NF9BZGRyKSAtMSkKKyAgICAgeworICAgICAgIC8qIFZlcnkgc3RyYW5nZS4gKi8KKyAgICAgICBsb2FkYWRkciA9IDA7CitAQCAtMTc2LDcgKzM0OSw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAgIGlmIChkeW5hbWljX3NpemUgPT0gMCkKKyAgICAgcmV0dXJuIDE7CisgCistICBkeW5hbWljX3NlZ21lbnQgPSAoRWxmVyhEeW4pICopIChmaWxlX2NvbnRlbnRzICsgZHluYW1pY19hZGRyKTsKKysgIGR5bmFtaWNfc2VnbWVudCA9IChFbGY2NF9EeW4gKikgKGZpbGVfY29udGVudHMgKyBkeW5hbWljX2FkZHIpOworICAgY2hlY2tfcHRyIChkeW5hbWljX3NlZ21lbnQpOworIAorICAgLyogRmluZCB0aGUgc3RyaW5nIHRhYmxlLiAgKi8KK0BAIC0yMzMsMyArNDA2LDMzIEBAIHByb2Nlc3NfZWxmX2ZpbGUgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwKKyAKKyAgIHJldHVybiAwOworIH0KKysvKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyBvaywgIT0gMCBpbiBjYXNlIG9mIGVycm9yLiAgKi8KKytpbnQKKytwcm9jZXNzX2VsZl9maWxlIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorKwkJICB1bnNpZ25lZCBpbnQgKm9zdmVyc2lvbiwgY2hhciAqKnNvbmFtZSwgdm9pZCAqZmlsZV9jb250ZW50cywKKysJCSAgc2l6ZV90IGZpbGVfbGVuZ3RoKQorK3sKKysgIGludCBpOworKyAgdW5zaWduZWQgaW50IGo7CisrICBFbGZXKEFkZHIpIGxvYWRhZGRyOworKyAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKysgIHNpemVfdCBkeW5hbWljX3NpemU7CisrICBjaGFyICpwcm9ncmFtX2ludGVycHJldGVyOworKworKyAgRWxmVyhFaGRyKSAqZWxmX2hlYWRlcjsKKysgIEVsZlcoUGhkcikgKmVsZl9waGVhZGVyLCAqc2VnbWVudDsKKysgIEVsZlcoRHluKSAqZHluYW1pY19zZWdtZW50LCAqZHluX2VudHJ5OworKyAgY2hhciAqZHluYW1pY19zdHJpbmdzOworKworKyAgZWxmX2hlYWRlciA9IChFbGZXKEVoZHIpICopIGZpbGVfY29udGVudHM7CisrICAqb3N2ZXJzaW9uID0gMDsKKysKKysgIGlmIChlbGZfaGVhZGVyLT5lX2lkZW50IFtFSV9DTEFTU10gPT0gRUxGQ0xBU1MzMikKKysgICAgcmV0dXJuIHByb2Nlc3NfZWxmX2ZpbGUzMihmaWxlX25hbWUsIGxpYixmbGFnLCBvc3ZlcnNpb24sIHNvbmFtZSwgZmlsZV9jb250ZW50cywgZmlsZV9sZW5ndGgpOworKyAgZWxzZSBpZiAoZWxmX2hlYWRlci0+ZV9pZGVudCBbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpCisrICAgIHJldHVybiBwcm9jZXNzX2VsZl9maWxlNjQoZmlsZV9uYW1lLCBsaWIsZmxhZywgb3N2ZXJzaW9uLCBzb25hbWUsIGZpbGVfY29udGVudHMsIGZpbGVfbGVuZ3RoKTsKKysgIGVycm9yICgwLCAwLCBfKCJVbmtub3duIEVMRkNMQVNTIGluIGZpbGUgJXMuXG4iKSwgZmlsZV9uYW1lKTsKKysgIHJldHVybiAxOworK30KKysKKysKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvUkVBRE1FIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNmYjk4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvUkVBRE1FCkBAIC0wLDAgKzEsOCBAQAorVGhlIGZpbGVzIGFyZSBwdWxsZWQgdmVyYmF0aW0gZnJvbSBnbGliYyAyLjUgYW5kIHRoZW4gcGF0Y2hlZCB0byBhbGxvdworc3RhbmRhbG9uZSBjb21waWxhdGlvbiBvZiBsZGNvbmZpZy4KKworUmljaGFyZCBQdXJkaWUKK09wZW5lZEhhbmQgTHRkLgorCitVcGdyYWRlZCB0aGUgbGRjb25maWcgcmVjaXBlIHRvIGVnbGliYyAyLjEyLjEKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDMvMjkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9hZGQtNjQtYml0LWZsYWctZm9yLUVMRjY0LWVudHJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhZjExMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvYWRkLTY0LWJpdC1mbGFnLWZvci1FTEY2NC1lbnRyaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTAzIEBACitGcm9tIDlkNjI1NDQwOTBiMDg4NDkyMThjZDFmYzUyYTM2Y2RkNWQ5MDM2M2UgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDI0IEFwciAyMDE1IDAzOjI5OjMxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCA2NC1iaXQgZmxhZyBmb3IgRUxGNjQgZW50cmllcy4KKworbGRjb25maWctbmF0aXZlIHdhcyBncmVwcGVkIGZyb20gYW4gb2xkIHZlcnNpb24gb2YgZ2xpYmMsIGFuZCBpdHMgb3V0cHV0CitsYWNrcyBuZWNjZXNzYXJ5IDY0Yml0IGZsYWcgaW4gZW50cmllcy4KK0R1ZSB0byB0aGlzIGRlZmVjdCwgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCkgcHl0aG9uIGZ1bmN0aW9uIGZhaWxzIHRvCitkZXRlY3QgYW55IGxpYnJhcnkgZHVlIHRvIHRoZSBvbGQgZmlsZSBmb3JtYXQgdGhhdCBsZGNvbmZpZy1uYXRpdmUKK2NyZWF0ZXMuIFRoaXMgZml4IHNldHMgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCA2NGJpdCBmbGFncyBmb3IgNjQtYml0IEVMRi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY2FjaGUuYyAgICAgIHwgIDQgKysrKworIGxkY29uZmlnLmggICB8ICA0ICsrKysKKyByZWFkZWxmbGliLmMgfCAzNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jYWNoZS5jIGIvY2FjaGUuYworaW5kZXggYTkwNGQ0NC4uYzRmNTQxMSAxMDA2NDQKKy0tLSBhL2NhY2hlLmMKKysrKyBiL2NhY2hlLmMKK0BAIC0xMjEsNiArMTIxLDEwIEBAIHByaW50X2VudHJ5IChjb25zdCBjaGFyICpsaWIsIGludCBmbGFnLCB1bnNpZ25lZCBpbnQgb3N2ZXJzaW9uLAorICAgICAgIGJyZWFrOworICAgICBjYXNlIEZMQUdfTUlQUzY0X0xJQk42NDoKKyAgICAgICBmcHV0cyAoIiw2NGJpdCIsIHN0ZG91dCk7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRkxBR19BQVJDSDY0X0xJQjY0OgorKyAgICAgIGZwdXRzICgiLEFBcmNoNjQiLCBzdGRvdXQpOworKyAgICAgIGJyZWFrOworICAgICBjYXNlIDA6CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEvbGRjb25maWcuaCBiL2xkY29uZmlnLmgKK2luZGV4IGZhZGQ1ZWMuLjZhOGE3NTAgMTAwNjQ0CistLS0gYS9sZGNvbmZpZy5oCisrKysgYi9sZGNvbmZpZy5oCitAQCAtMzQsNiArMzQsMTAgQEAKKyAjZGVmaW5lIEZMQUdfUE9XRVJQQ19MSUI2NAkweDA1MDAKKyAjZGVmaW5lIEZMQUdfTUlQUzY0X0xJQk4zMgkweDA2MDAKKyAjZGVmaW5lIEZMQUdfTUlQUzY0X0xJQk42NAkweDA3MDAKKysjZGVmaW5lIEZMQUdfWDg2NjRfTElCWDMyCQkweDA4MDAKKysjZGVmaW5lIEZMQUdfQVJNX0xJQkhGCQkJMHgwOTAwCisrI2RlZmluZSBGTEFHX0FBUkNINjRfTElCNjQJCTB4MGEwMAorKyNkZWZpbmUgRkxBR19BUk1fTElCU0YJCQkweDBiMDAKKyAKKyAvKiBOYW1lIG9mIGF1eGlsaWFyeSBjYWNoZS4gICovCisgI2RlZmluZSBfUEFUSF9MRENPTkZJR19BVVhfQ0FDSEUgIi92YXIvY2FjaGUvbGRjb25maWcvYXV4LWNhY2hlIgorZGlmZiAtLWdpdCBhL3JlYWRlbGZsaWIuYyBiL3JlYWRlbGZsaWIuYworaW5kZXggMGJmMGRlMy4uNmU4N2FmYyAxMDA2NDQKKy0tLSBhL3JlYWRlbGZsaWIuYworKysrIGIvcmVhZGVsZmxpYi5jCitAQCAtMjgsNiArMjgsMTEgQEAKKyAKKyAjaW5jbHVkZSAiZW5kaWFuX2V4dHJhLmgiCisgCisrLyogV29yay1hcm91bmQgZm9yIG9sZCBob3N0IHRoYXQgZG9lcyBub3QgaGF2ZSBBQXJjaDY0IGRlZmluZWQgaW4gZWxmLmguICovCisrI2lmbmRlZiBFTV9BQVJDSDY0CisrI2RlZmluZSBFTV9BQVJDSDY0CTE4MwkJLyogQVJNIEFBUkNINjQgKi8KKysjZW5kaWYKKysKKyAjdW5kZWYgY2hlY2tfcHRyCisgI2RlZmluZSBjaGVja19wdHIocHRyKQkJCQkJCVwKKyBkbwkJCQkJCQkJXAorQEAgLTI5MCw2ICsyOTUsMzUgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorICAgICAgbGliYzUvbGliYzYuICAqLworICAgKmZsYWcgPSBGTEFHX0VMRjsKKyAKKysgIC8qIFNldCBmbGFncyBhY2NvcmRpbmcgdG8gaW5mb3JtYXRpb24gaW4gRUxGIGhlYWRlciB0byBhbGlnbiB3aXRoIHRhcmdldAorKyAgICAgbGRjb25maWcgKi8KKysgIHN3aXRjaCAoZWxmX2hlYWRlci0+ZV9tYWNoaW5lKQorKyAgICB7CisrICAgIGNhc2UgRU1fSUFfNjQ6CisrICAgICAgKmZsYWcgfD0gRkxBR19JQTY0X0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX1g4Nl82NDoKKysgICAgICAqZmxhZyB8PSBGTEFHX1g4NjY0X0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX1MzOTA6CisrICAgICAgKmZsYWcgfD0gRkxBR19TMzkwX0xJQjY0OworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVNX1BQQzY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfUE9XRVJQQ19MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9NSVBTOgorKyAgICBjYXNlIEVNX01JUFNfUlMzX0xFOgorKyAgICAgICpmbGFnIHw9IEZMQUdfTUlQUzY0X0xJQk42NDsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTV9BQVJDSDY0OgorKyAgICAgICpmbGFnIHw9IEZMQUdfQUFSQ0g2NF9MSUI2NDsKKysgICAgICBicmVhazsKKysgICAgZGVmYXVsdDoKKysgICAgICBlcnJvcigwLCAwLCAiJXMgaXMgYSA2NC1iaXQgRUxGIGZvciB1bmtub3duIG1hY2hpbmUgJWx4XG4iLAorKyAgICAgICAgICAgIGZpbGVfbmFtZSwgKGxvbmcpZWxmX2hlYWRlci0+ZV9tYWNoaW5lKTsKKysgICAgICBicmVhazsKKysgICAgfQorKworICAgbG9hZGFkZHIgPSAtMTsKKyAgIGR5bmFtaWNfYWRkciA9IDA7CisgICBkeW5hbWljX3NpemUgPSAwOworLS0gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhlNGRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDQ1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRG8gZGF0YSBpbnB1dC9vdXRwdXQgaGFuZGxpbmcgYWNjb3JkaW5nIHRvIGVuZGllbi1uZXNzIG9mIHRoZSBsaWJyYXJ5IGZpbGUuIFRoYXQgCitlbmFibGVzIHVzZSBvZiBsZGNvbmZpZyBpbiB0aGUgY3Jvc3MgZmFzaGlvbiBmb3IgYW55IGFyY2hpdGVjdHVyZS4KKworMjAxMS8wNC8wNAorUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitOaXRpbiBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCitAQCAtMzgsNiArMzgsMjggQEAgZG8JCQkJCQkJCVwKKyAgIH0JCQkJCQkJCVwKKyAgd2hpbGUgKDApOworIAorK2ludCBiZTsKKytzdGF0aWMgdWludDE2X3QgcmVhZDE2KHVpbnQxNl90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gYmUxNnRvaCh4KTsKKysgIHJldHVybiBsZTE2dG9oKHgpOworK30KKysKKytzdGF0aWMgdWludDMyX3QgcmVhZDMyKHVpbnQzMl90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gYmUzMnRvaCh4KTsKKysgIHJldHVybiBsZTMydG9oKHgpOworK30KKysKKytzdGF0aWMgdWludDY0X3QgcmVhZDY0KHVpbnQ2NF90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gYmU2NHRvaCh4KTsKKysgIHJldHVybiBsZTY0dG9oKHgpOworK30KKysKKyAvKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyBvaywgIT0gMCBpbiBjYXNlIG9mIGVycm9yLiAgKi8KKyBpbnQKKyBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCitAQCAtNTksMTUgKzgxLDE3IEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgIGVsZl9oZWFkZXIgPSAoRWxmMzJfRWhkciAqKSBmaWxlX2NvbnRlbnRzOworICAgKm9zdmVyc2lvbiA9IDA7CisgCistICBpZiAoZWxmX2hlYWRlci0+ZV90eXBlICE9IEVUX0RZTikKKysgIGJlID0gKGVsZl9oZWFkZXItPmVfaWRlbnRbRUlfREFUQV0gPT0gRUxGREFUQTJNU0IpOworKworKyAgaWYgKHJlYWQxNihlbGZfaGVhZGVyLT5lX3R5cGUsIGJlKSAhPSBFVF9EWU4pCisgICAgIHsKKyAgICAgICBlcnJvciAoMCwgMCwgXygiJXMgaXMgbm90IGEgc2hhcmVkIG9iamVjdCBmaWxlIChUeXBlOiAlZCkuXG4iKSwgZmlsZV9uYW1lLAorLQkgICAgIGVsZl9oZWFkZXItPmVfdHlwZSk7CisrCSAgICAgcmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpKTsKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorICAgLyogR2V0IGluZm9ybWF0aW9uIGZyb20gZWxmIHByb2dyYW0gaGVhZGVyLiAgKi8KKy0gIGVsZl9waGVhZGVyID0gKEVsZjMyX1BoZHIgKikgKGVsZl9oZWFkZXItPmVfcGhvZmYgKyBmaWxlX2NvbnRlbnRzKTsKKysgIGVsZl9waGVhZGVyID0gKEVsZjMyX1BoZHIgKikgKHJlYWQzMihlbGZfaGVhZGVyLT5lX3Bob2ZmLCBiZSkgKyBmaWxlX2NvbnRlbnRzKTsKKyAgIGNoZWNrX3B0ciAoZWxmX3BoZWFkZXIpOworIAorICAgLyogVGhlIGxpYnJhcnkgaXMgYW4gZWxmIGxpYnJhcnksIG5vdyBzZWFyY2ggZm9yIHNvbmFtZSBhbmQKK0BAIC03OSwyNyArMTAzLDI3IEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgIGR5bmFtaWNfc2l6ZSA9IDA7CisgICBwcm9ncmFtX2ludGVycHJldGVyID0gTlVMTDsKKyAgIGZvciAoaSA9IDAsIHNlZ21lbnQgPSBlbGZfcGhlYWRlcjsKKy0gICAgICAgaSA8IGVsZl9oZWFkZXItPmVfcGhudW07IGkrKywgc2VnbWVudCsrKQorKyAgICAgICBpIDwgcmVhZDE2KGVsZl9oZWFkZXItPmVfcGhudW0sIGJlKTsgaSsrLCBzZWdtZW50KyspCisgICAgIHsKKyAgICAgICBjaGVja19wdHIgKHNlZ21lbnQpOworIAorLSAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorKyAgICAgIHN3aXRjaCAocmVhZDMyKHNlZ21lbnQtPnBfdHlwZSwgYmUpKQorIAl7CisgCWNhc2UgUFRfTE9BRDoKKyAJICBpZiAobG9hZGFkZHIgPT0gKEVsZjMyX0FkZHIpIC0xKQorLQkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgICBsb2FkYWRkciA9IHJlYWQzMihzZWdtZW50LT5wX3ZhZGRyLCBiZSkgLSByZWFkMzIoc2VnbWVudC0+cF9vZmZzZXQsIGJlKTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9EWU5BTUlDOgorIAkgIGlmIChkeW5hbWljX2FkZHIpCisgCSAgICBlcnJvciAoMCwgMCwgXygibW9yZSB0aGFuIG9uZSBkeW5hbWljIHNlZ21lbnRcbiIpKTsKKyAKKy0JICBkeW5hbWljX2FkZHIgPSBzZWdtZW50LT5wX29mZnNldDsKKy0JICBkeW5hbWljX3NpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJICBkeW5hbWljX2FkZHIgPSByZWFkMzIoc2VnbWVudC0+cF9vZmZzZXQsIGJlKTsKKysJICBkeW5hbWljX3NpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9JTlRFUlA6CistCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgc2VnbWVudC0+cF9vZmZzZXQpOworKwkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQzMihzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKyAJICBjaGVja19wdHIgKHByb2dyYW1faW50ZXJwcmV0ZXIpOworIAorIAkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworQEAgLTExMywyMCArMTM3LDIwIEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9OT1RFOgorLQkgIGlmICghKm9zdmVyc2lvbiAmJiBzZWdtZW50LT5wX2ZpbGVzeiA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisrCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpID49IDMyICYmIHNlZ21lbnQtPnBfYWxpZ24gPj0gNCkKKyAJICAgIHsKKyAJICAgICAgRWxmMzJfV29yZCAqYWJpX25vdGUgPSAoRWxmMzJfV29yZCAqKSAoZmlsZV9jb250ZW50cworLQkJCQkJCSAgICAgKyBzZWdtZW50LT5wX29mZnNldCk7CistCSAgICAgIEVsZjMyX0FkZHIgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkJCQkJCSAgICAgKyByZWFkMzIoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CisrCSAgICAgIEVsZjMyX0FkZHIgc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAorLQkgICAgICB3aGlsZSAoYWJpX25vdGUgWzBdICE9IDQgfHwgYWJpX25vdGUgWzFdICE9IDE2CistCQkgICAgIHx8IGFiaV9ub3RlIFsyXSAhPSAxCisrCSAgICAgIHdoaWxlIChyZWFkMzIoYWJpX25vdGUgWzBdLCBiZSkgIT0gNCB8fCByZWFkMzIoYWJpX25vdGUgWzFdLCBiZSkgIT0gMTYKKysJCSAgICAgfHwgcmVhZDMyKGFiaV9ub3RlIFsyXSwgYmUpICE9IDEKKyAJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorIAkJeworLSNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGYzMl9Xb3JkKSkgLSAxKSAmIC1zaXplb2YgKEVsZjMyX1dvcmQpKSkKKy0JCSAgRWxmMzJfQWRkcikgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmMzJfV29yZCkpCistCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMF0pCistCQkJCQkgKyBST1VORCAoYWJpX25vdGVbMV0pOworKyNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGYzMl9Xb3JkKSAtIDEpICYgLXNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkgIEVsZjMyX0FkZHIgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmMzJfV29yZCkKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMF0sIGJlKSkKKysJCQkJCSArIFJPVU5EIChyZWFkMzIoYWJpX25vdGVbMV0sIGJlKSk7CisgCisgCQkgIGlmIChzaXplIC0gMzIgPCBub3RlX3NpemUgfHwgbm90ZV9zaXplID09IDApCisgCQkgICAgeworQEAgLTE0MCwxMCArMTY0LDEwIEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJICAgICAgaWYgKHNpemUgPT0gMCkKKyAJCWJyZWFrOworIAorLQkgICAgICAqb3N2ZXJzaW9uID0gKGFiaV9ub3RlIFs0XSA8PCAyNCkgfAorLQkJCSAgICgoYWJpX25vdGUgWzVdICYgMHhmZikgPDwgMTYpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs2XSAmIDB4ZmYpIDw8IDgpIHwKKy0JCQkgICAoYWJpX25vdGUgWzddICYgMHhmZik7CisrCSAgICAgICpvc3ZlcnNpb24gPSAocmVhZDMyKGFiaV9ub3RlIFs0XSwgYmUpIDw8IDI0KSB8CisrCQkJICAgKChyZWFkMzIoYWJpX25vdGUgWzVdLCBiZSkgJiAweGZmKSA8PCAxNikgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs2XSwgYmUpICYgMHhmZikgPDwgOCkgfAorKwkJCSAgIChyZWFkMzIoYWJpX25vdGUgWzddLCBiZSkgJiAweGZmKTsKKyAJICAgIH0KKyAJICBicmVhazsKKyAKK0BAIC0xNjcsMTMgKzE5MSwxMyBAQCBwcm9jZXNzX2VsZl9maWxlMzIgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCisgICAvKiBGaW5kIHRoZSBzdHJpbmcgdGFibGUuICAqLworICAgZHluYW1pY19zdHJpbmdzID0gTlVMTDsKKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworICAgICAgIGNoZWNrX3B0ciAoZHluX2VudHJ5KTsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TVFJUQUIpCisrICAgICAgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU1RSVEFCKQorIAl7CistCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyBkeW5fZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcik7CisrCSAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgKGZpbGVfY29udGVudHMgKyByZWFkMzIoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSkgLSBsb2FkYWRkcik7CisgCSAgY2hlY2tfcHRyIChkeW5hbWljX3N0cmluZ3MpOworIAkgIGJyZWFrOworIAl9CitAQCAtMTgzLDE1ICsyMDcsMTUgQEAgcHJvY2Vzc19lbGZfZmlsZTMyIChjb25zdCBjaGFyICpmaWxlX25hbQorICAgICByZXR1cm4gMTsKKyAKKyAgIC8qIE5vdyByZWFkIHRoZSBEVF9ORUVERUQgYW5kIERUX1NPTkFNRSBlbnRyaWVzLiAgKi8KKy0gIGZvciAoZHluX2VudHJ5ID0gZHluYW1pY19zZWdtZW50OyBkeW5fZW50cnktPmRfdGFnICE9IERUX05VTEw7CisrICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgcmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSAhPSBEVF9OVUxMOworICAgICAgICArK2R5bl9lbnRyeSkKKyAgICAgeworLSAgICAgIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX05FRURFRCB8fCBkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysgICAgICBpZiAocmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9ORUVERUQgfHwgcmVhZDMyKGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCXsKKy0JICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsOworKwkgIGNoYXIgKm5hbWUgPSBkeW5hbWljX3N0cmluZ3MgKyByZWFkMzIoZHluX2VudHJ5LT5kX3VuLmRfdmFsLCBiZSk7CisgCSAgY2hlY2tfcHRyIChuYW1lKTsKKyAKKy0JICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQpCisrCSAgaWYgKHJlYWQzMihkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEKQorIAkgICAgeworIAorIAkgICAgICBpZiAoKmZsYWcgPT0gRkxBR19FTEYpCitAQCAtMjA4LDcgKzIzMiw3IEBAIHByb2Nlc3NfZWxmX2ZpbGUzMiAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJCX0KKyAJICAgIH0KKyAKKy0JICBlbHNlIGlmIChkeW5fZW50cnktPmRfdGFnID09IERUX1NPTkFNRSkKKysJICBlbHNlIGlmIChyZWFkMzIoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NPTkFNRSkKKyAJICAgICpzb25hbWUgPSB4c3RyZHVwIChuYW1lKTsKKyAKKyAJICAvKiBEbyB3ZSBoYXZlIGV2ZXJ5dGhpbmcgd2UgbmVlZD8gICovCitAQCAtMjQ2LDE1ICsyNzAsMTcgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorICAgZWxmX2hlYWRlciA9IChFbGY2NF9FaGRyICopIGZpbGVfY29udGVudHM7CisgICAqb3N2ZXJzaW9uID0gMDsKKyAKKy0gIGlmIChlbGZfaGVhZGVyLT5lX3R5cGUgIT0gRVRfRFlOKQorKyAgYmUgPSAoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMk1TQik7CisrCisrICBpZiAocmVhZDE2KGVsZl9oZWFkZXItPmVfdHlwZSwgYmUpICE9IEVUX0RZTikKKyAgICAgeworICAgICAgIGVycm9yICgwLCAwLCBfKCIlcyBpcyBub3QgYSBzaGFyZWQgb2JqZWN0IGZpbGUgKFR5cGU6ICVkKS5cbiIpLCBmaWxlX25hbWUsCistCSAgICAgZWxmX2hlYWRlci0+ZV90eXBlKTsKKysJICAgICByZWFkMTYoZWxmX2hlYWRlci0+ZV90eXBlLCBiZSkpOworICAgICAgIHJldHVybiAxOworICAgICB9CisgCisgICAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBlbGYgcHJvZ3JhbSBoZWFkZXIuICAqLworLSAgZWxmX3BoZWFkZXIgPSAoRWxmNjRfUGhkciAqKSAoZWxmX2hlYWRlci0+ZV9waG9mZiArIGZpbGVfY29udGVudHMpOworKyAgZWxmX3BoZWFkZXIgPSAoRWxmNjRfUGhkciAqKSAocmVhZDY0KGVsZl9oZWFkZXItPmVfcGhvZmYsIGJlKSArIGZpbGVfY29udGVudHMpOworICAgY2hlY2tfcHRyIChlbGZfcGhlYWRlcik7CisgCisgICAvKiBUaGUgbGlicmFyeSBpcyBhbiBlbGYgbGlicmFyeSwgbm93IHNlYXJjaCBmb3Igc29uYW1lIGFuZAorQEAgLTI2NiwyNyArMjkyLDI3IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgIGR5bmFtaWNfc2l6ZSA9IDA7CisgICBwcm9ncmFtX2ludGVycHJldGVyID0gTlVMTDsKKyAgIGZvciAoaSA9IDAsIHNlZ21lbnQgPSBlbGZfcGhlYWRlcjsKKy0gICAgICAgaSA8IGVsZl9oZWFkZXItPmVfcGhudW07IGkrKywgc2VnbWVudCsrKQorKyAgICAgICBpIDwgcmVhZDE2KGVsZl9oZWFkZXItPmVfcGhudW0sIGJlKTsgaSsrLCBzZWdtZW50KyspCisgICAgIHsKKyAgICAgICBjaGVja19wdHIgKHNlZ21lbnQpOworIAorLSAgICAgIHN3aXRjaCAoc2VnbWVudC0+cF90eXBlKQorKyAgICAgIHN3aXRjaCAocmVhZDMyKHNlZ21lbnQtPnBfdHlwZSwgYmUpKQorIAl7CisgCWNhc2UgUFRfTE9BRDoKKyAJICBpZiAobG9hZGFkZHIgPT0gKEVsZjY0X0FkZHIpIC0xKQorLQkgICAgbG9hZGFkZHIgPSBzZWdtZW50LT5wX3ZhZGRyIC0gc2VnbWVudC0+cF9vZmZzZXQ7CisrCSAgICBsb2FkYWRkciA9IHJlYWQ2NChzZWdtZW50LT5wX3ZhZGRyLCBiZSkgLSByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9EWU5BTUlDOgorIAkgIGlmIChkeW5hbWljX2FkZHIpCisgCSAgICBlcnJvciAoMCwgMCwgXygibW9yZSB0aGFuIG9uZSBkeW5hbWljIHNlZ21lbnRcbiIpKTsKKyAKKy0JICBkeW5hbWljX2FkZHIgPSBzZWdtZW50LT5wX29mZnNldDsKKy0JICBkeW5hbWljX3NpemUgPSBzZWdtZW50LT5wX2ZpbGVzejsKKysJICBkeW5hbWljX2FkZHIgPSByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKTsKKysJICBkeW5hbWljX3NpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9JTlRFUlA6CistCSAgcHJvZ3JhbV9pbnRlcnByZXRlciA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgc2VnbWVudC0+cF9vZmZzZXQpOworKwkgIHByb2dyYW1faW50ZXJwcmV0ZXIgPSAoY2hhciAqKSAoZmlsZV9jb250ZW50cyArIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKyAJICBjaGVja19wdHIgKHByb2dyYW1faW50ZXJwcmV0ZXIpOworIAorIAkgIC8qIENoZWNrIGlmIHRoaXMgaXMgZW5vdWdoIHRvIGNsYXNzaWZ5IHRoZSBiaW5hcnkuICAqLworQEAgLTMwMCwyMCArMzI2LDIxIEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9OT1RFOgorLQkgIGlmICghKm9zdmVyc2lvbiAmJiBzZWdtZW50LT5wX2ZpbGVzeiA+PSAzMiAmJiBzZWdtZW50LT5wX2FsaWduID49IDQpCisrCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpID49IDMyICYmIHJlYWQzMihzZWdtZW50LT5wX2FsaWduLCBiZSkgPj0gNCkKKyAJICAgIHsKKyAJICAgICAgRWxmNjRfV29yZCAqYWJpX25vdGUgPSAoRWxmNjRfV29yZCAqKSAoZmlsZV9jb250ZW50cworLQkJCQkJCSAgICAgKyBzZWdtZW50LT5wX29mZnNldCk7CistCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6OworKwkJCQkJCSAgICAgKyByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKSk7CisrCSAgICAgIEVsZjY0X0FkZHIgc2l6ZSA9IHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpOworIAorLQkgICAgICB3aGlsZSAoYWJpX25vdGUgWzBdICE9IDQgfHwgYWJpX25vdGUgWzFdICE9IDE2CistCQkgICAgIHx8IGFiaV9ub3RlIFsyXSAhPSAxCisrCSAgICAgIHdoaWxlIChyZWFkMzIoYWJpX25vdGUgWzBdLCBiZSkgIT0gNCB8fCByZWFkMzIoYWJpX25vdGUgWzFdLCBiZSkgIT0gMTYKKysJCSAgICAgfHwgcmVhZDMyKGFiaV9ub3RlIFsyXSwgYmUpICE9IDEKKyAJCSAgICAgfHwgbWVtY21wIChhYmlfbm90ZSArIDMsICJHTlUiLCA0KSAhPSAwKQorIAkJeworKyN1bmRlZiBST1VORAorICNkZWZpbmUgUk9VTkQobGVuKSAoKChsZW4pICsgc2l6ZW9mIChFbGY2NF9Xb3JkKSAtIDEpICYgLXNpemVvZiAoRWxmNjRfV29yZCkpCisgCQkgIEVsZjY0X0FkZHIgbm90ZV9zaXplID0gMyAqIHNpemVvZiAoRWxmNjRfV29yZCkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVswXSkKKy0JCQkJCSArIFJPVU5EIChhYmlfbm90ZVsxXSk7CisrCQkJCQkgKyBST1VORCAocmVhZDMyKGFiaV9ub3RlWzBdLCBiZSkpCisrCQkJCQkgKyBST1VORCAocmVhZDMyKGFiaV9ub3RlWzFdLCBiZSkpOworIAorIAkJICBpZiAoc2l6ZSAtIDMyIDwgbm90ZV9zaXplIHx8IG5vdGVfc2l6ZSA9PSAwKQorIAkJICAgIHsKK0BAIC0zMjcsMTAgKzM1NCwxMCBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCSAgICAgIGlmIChzaXplID09IDApCisgCQlicmVhazsKKyAKKy0JICAgICAgKm9zdmVyc2lvbiA9IChhYmlfbm90ZSBbNF0gPDwgMjQpIHwKKy0JCQkgICAoKGFiaV9ub3RlIFs1XSAmIDB4ZmYpIDw8IDE2KSB8CistCQkJICAgKChhYmlfbm90ZSBbNl0gJiAweGZmKSA8PCA4KSB8CistCQkJICAgKGFiaV9ub3RlIFs3XSAmIDB4ZmYpOworKwkgICAgICAqb3N2ZXJzaW9uID0gKHJlYWQzMihhYmlfbm90ZSBbNF0sIGJlKSA8PCAyNCkgfAorKwkJCSAgICgocmVhZDMyKGFiaV9ub3RlIFs1XSwgYmUpICYgMHhmZikgPDwgMTYpIHwKKysJCQkgICAoKHJlYWQzMihhYmlfbm90ZSBbNl0sIGJlKSAmIDB4ZmYpIDw8IDgpIHwKKysJCQkgICAocmVhZDMyKGFiaV9ub3RlIFs3XSwgYmUpICYgMHhmZik7CisgCSAgICB9CisgCSAgYnJlYWs7CisgCitAQCAtMzU0LDEzICszODEsMTMgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbQorIAorICAgLyogRmluZCB0aGUgc3RyaW5nIHRhYmxlLiAgKi8KKyAgIGR5bmFtaWNfc3RyaW5ncyA9IE5VTEw7CistICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgIT0gRFRfTlVMTDsKKyAgICAgICAgKytkeW5fZW50cnkpCisgICAgIHsKKyAgICAgICBjaGVja19wdHIgKGR5bl9lbnRyeSk7CistICAgICAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfU1RSVEFCKQorKyAgICAgIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX1NUUlRBQikKKyAJeworLQkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgZHluX2VudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHIpOworKwkgIGR5bmFtaWNfc3RyaW5ncyA9IChjaGFyICopIChmaWxlX2NvbnRlbnRzICsgcmVhZDY0KGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCwgYmUpIC0gbG9hZGFkZHIpOworIAkgIGNoZWNrX3B0ciAoZHluYW1pY19zdHJpbmdzKTsKKyAJICBicmVhazsKKyAJfQorQEAgLTM3MCwxNSArMzk3LDE1IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW0KKyAgICAgcmV0dXJuIDE7CisgCisgICAvKiBOb3cgcmVhZCB0aGUgRFRfTkVFREVEIGFuZCBEVF9TT05BTUUgZW50cmllcy4gICovCistICBmb3IgKGR5bl9lbnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZHluX2VudHJ5LT5kX3RhZyAhPSBEVF9OVUxMOworKyAgZm9yIChkeW5fZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7IHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgIT0gRFRfTlVMTDsKKyAgICAgICAgKytkeW5fZW50cnkpCisgICAgIHsKKy0gICAgICBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9ORUVERUQgfHwgZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrICAgICAgaWYgKHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfTkVFREVEIHx8IHJlYWQ2NChkeW5fZW50cnktPmRfdGFnLCBiZSkgPT0gRFRfU09OQU1FKQorIAl7CistCSAgY2hhciAqbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIGR5bl9lbnRyeS0+ZF91bi5kX3ZhbDsKKysJICBjaGFyICpuYW1lID0gZHluYW1pY19zdHJpbmdzICsgcmVhZDY0KGR5bl9lbnRyeS0+ZF91bi5kX3ZhbCwgYmUpOworIAkgIGNoZWNrX3B0ciAobmFtZSk7CisgCistCSAgaWYgKGR5bl9lbnRyeS0+ZF90YWcgPT0gRFRfTkVFREVEKQorKwkgIGlmIChyZWFkNjQoZHluX2VudHJ5LT5kX3RhZywgYmUpID09IERUX05FRURFRCkKKyAJICAgIHsKKyAKKyAJICAgICAgaWYgKCpmbGFnID09IEZMQUdfRUxGKQorQEAgLTM5NSw3ICs0MjIsNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtCisgCQl9CisgCSAgICB9CisgCistCSAgZWxzZSBpZiAoZHluX2VudHJ5LT5kX3RhZyA9PSBEVF9TT05BTUUpCisrCSAgZWxzZSBpZiAocmVhZDY0KGR5bl9lbnRyeS0+ZF90YWcsIGJlKSA9PSBEVF9TT05BTUUpCisgCSAgICAqc29uYW1lID0geHN0cmR1cCAobmFtZSk7CisgCisgCSAgLyogRG8gd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQ/ICAqLworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCitAQCAtMTY5LDcgKzE2OSw4IEBAIHByb2Nlc3NfZmlsZSAoY29uc3QgY2hhciAqcmVhbF9maWxlX25hbWUKKyAgICAgICByZXQgPSAxOworICAgICB9CisgICAvKiBMaWJyYXJpZXMgaGF2ZSB0byBiZSBzaGFyZWQgb2JqZWN0IGZpbGVzLiAgKi8KKy0gIGVsc2UgaWYgKGVsZl9oZWFkZXItPmVfdHlwZSAhPSBFVF9EWU4pCisrICBlbHNlIGlmICgoZWxmX2hlYWRlci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBFTEZEQVRBMk1TQiAmJiBiZTE2dG9oKGVsZl9oZWFkZXItPmVfdHlwZSkgIT0gRVRfRFlOKSB8fAorKyAgICAgIChlbGZfaGVhZGVyLT5lX2lkZW50W0VJX0RBVEFdID09IEVMRkRBVEEyTFNCICYmIGxlMTZ0b2goZWxmX2hlYWRlci0+ZV90eXBlKSAhPSBFVF9EWU4pKQorICAgICByZXQgPSAxOworICAgZWxzZSBpZiAocHJvY2Vzc19lbGZfZmlsZSAoZmlsZV9uYW1lLCBsaWIsIGZsYWcsIG9zdmVyc2lvbiwgc29uYW1lLAorIAkJCSAgICAgZmlsZV9jb250ZW50cywgc3RhdGJ1Zi5zdF9zaXplKSkKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2FjaGUuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworQEAgLTM5LDYgKzM5LDI5IEBACisgIyBkZWZpbmUgTl8obXNnaWQpICBtc2dpZAorICNkZWZpbmUgXyhtc2cpIG1zZworIAorK2V4dGVybiBpbnQgYmU7CisrCisrc3RhdGljIHVpbnQxNl90IHdyaXRlMTYodWludDE2X3QgeCwgaW50IGJlKQorK3sKKysgIGlmIChiZSkKKysgICAgICAgIHJldHVybiBodG9iZTE2KHgpOworKyAgcmV0dXJuIGh0b2xlMTYoeCk7CisrfQorKworK3N0YXRpYyB1aW50MzJfdCB3cml0ZTMyKHVpbnQzMl90IHgsIGludCBiZSkKKyt7CisrICBpZiAoYmUpCisrICAgICAgICByZXR1cm4gaHRvYmUzMih4KTsKKysgIHJldHVybiBodG9sZTMyKHgpOworK30KKysKKytzdGF0aWMgdWludDY0X3Qgd3JpdGU2NCh1aW50NjRfdCB4LCBpbnQgYmUpCisreworKyAgaWYgKGJlKQorKyAgICAgICAgcmV0dXJuIGh0b2JlNjQoeCk7CisrICByZXR1cm4gaHRvbGU2NCh4KTsKKyt9CisrCisgc3RydWN0IGNhY2hlX2VudHJ5CisgeworICAgY2hhciAqbGliOwkJCS8qIExpYnJhcnkgbmFtZS4gICovCitAQCAtMjc5LDcgKzMwMiwxMiBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgLyogTnVtYmVyIG9mIG5vcm1hbCBjYWNoZSBlbnRyaWVzLiAgKi8KKyAgIGludCBjYWNoZV9lbnRyeV9vbGRfY291bnQgPSAwOworIAorLSAgZm9yIChlbnRyeSA9IGVudHJpZXM7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gZW50cnktPm5leHQpCisrICAgIGlmIChiZSkKKysgICAgICBwcmludGYoInNhdmluZyBjYWNoZSBpbiBiaWcgZW5kaWFuIGVuY29kaW5nXG4iKTsKKysgICAgZWxzZQorKyAgICAgIHByaW50Zigic2F2aW5nIGNhY2hlIGluIGxpdHRsZSBlbmRpYW4gZW5jb2RpbmdcbiIpOworKworKyAgICBmb3IgKGVudHJ5ID0gZW50cmllczsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBlbnRyeS0+bmV4dCkKKyAgICAgeworICAgICAgIC8qIEFjY291bnQgdGhlIGZpbmFsIE5VTHMuICAqLworICAgICAgIHRvdGFsX3N0cmxlbiArPSBzdHJsZW4gKGVudHJ5LT5saWIpICsgc3RybGVuIChlbnRyeS0+cGF0aCkgKyAyOworQEAgLTMxMCw3ICszMzgsNyBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgICAgIG1lbXNldCAoZmlsZV9lbnRyaWVzLCAnXDAnLCBzaXplb2YgKHN0cnVjdCBjYWNoZV9maWxlKSk7CisgICAgICAgbWVtY3B5IChmaWxlX2VudHJpZXMtPm1hZ2ljLCBDQUNIRU1BR0lDLCBzaXplb2YgQ0FDSEVNQUdJQyAtIDEpOworIAorLSAgICAgIGZpbGVfZW50cmllcy0+bmxpYnMgPSBjYWNoZV9lbnRyeV9vbGRfY291bnQ7CisrICAgICAgZmlsZV9lbnRyaWVzLT5ubGlicyA9IHdyaXRlMzIoY2FjaGVfZW50cnlfb2xkX2NvdW50LCBiZSk7CisgICAgIH0KKyAKKyAgIHN0cnVjdCBjYWNoZV9maWxlX25ldyAqZmlsZV9lbnRyaWVzX25ldyA9IE5VTEw7CitAQCAtMzMwLDggKzM1OCw4IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgbWVtY3B5IChmaWxlX2VudHJpZXNfbmV3LT52ZXJzaW9uLCBDQUNIRV9WRVJTSU9OLAorIAkgICAgICBzaXplb2YgQ0FDSEVfVkVSU0lPTiAtIDEpOworIAorLSAgICAgIGZpbGVfZW50cmllc19uZXctPm5saWJzID0gY2FjaGVfZW50cnlfY291bnQ7CistICAgICAgZmlsZV9lbnRyaWVzX25ldy0+bGVuX3N0cmluZ3MgPSB0b3RhbF9zdHJsZW47CisrICAgICAgZmlsZV9lbnRyaWVzX25ldy0+bmxpYnMgPSB3cml0ZTMyKGNhY2hlX2VudHJ5X2NvdW50LCBiZSk7CisrICAgICAgZmlsZV9lbnRyaWVzX25ldy0+bGVuX3N0cmluZ3MgPSB3cml0ZTMyKHRvdGFsX3N0cmxlbiwgYmUpOworICAgICB9CisgCisgICAvKiBQYWQgZm9yIGFsaWdubWVudCBvZiBjYWNoZV9maWxlX25ldy4gICovCitAQCAtMzU4LDkgKzM4Niw5IEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgICAgICAgLyogRmlyc3QgdGhlIGxpYnJhcnkuICAqLworICAgICAgIGlmIChvcHRfZm9ybWF0ICE9IDIgJiYgZW50cnktPmh3Y2FwID09IDApCisgCXsKKy0JICBmaWxlX2VudHJpZXMtPmxpYnNbaWR4X29sZF0uZmxhZ3MgPSBlbnRyeS0+ZmxhZ3M7CisrCSAgZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLmZsYWdzID0gd3JpdGUzMihlbnRyeS0+ZmxhZ3MsIGJlKTsKKyAJICAvKiBYWFg6IEFjdHVhbGx5IHdlIGNhbiBvcHRpbWl6ZSBoZXJlIGFuZCByZW1vdmUgZHVwbGljYXRlcy4gICovCistCSAgZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLmtleSA9IHN0cl9vZmZzZXQgKyBwYWQ7CisrCSAgZmlsZV9lbnRyaWVzLT5saWJzW2lkeF9vbGRdLmtleSA9IHdyaXRlMzIoc3RyX29mZnNldCArIHBhZCwgYmUpOworIAl9CisgICAgICAgaWYgKG9wdF9mb3JtYXQgIT0gMCkKKyAJeworQEAgLTM2OCwxMCArMzk2LDEwIEBAIHNhdmVfY2FjaGUgKGNvbnN0IGNoYXIgKmNhY2hlX25hbWUpCisgCSAgICAgbm90IGRvaW5nIHNvIG1ha2VzIHRoZSBjb2RlIGVhc2llciwgdGhlIHN0cmluZyB0YWJsZQorIAkgICAgIGFsd2F5cyBiZWdpbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGhlIG5ldyBjYWNoZQorIAkgICAgIHN0cnVjdC4gICovCistCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5mbGFncyA9IGVudHJ5LT5mbGFnczsKKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLm9zdmVyc2lvbiA9IGVudHJ5LT5vc3ZlcnNpb247CistCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5od2NhcCA9IGVudHJ5LT5od2NhcDsKKy0JICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmtleSA9IHN0cl9vZmZzZXQ7CisrCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5mbGFncyA9IHdyaXRlMzIoZW50cnktPmZsYWdzLCBiZSk7CisrCSAgZmlsZV9lbnRyaWVzX25ldy0+bGlic1tpZHhfbmV3XS5vc3ZlcnNpb24gPSB3cml0ZTMyKGVudHJ5LT5vc3ZlcnNpb24sIGJlKTsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmh3Y2FwID0gd3JpdGU2NChlbnRyeS0+aHdjYXAsIGJlKTsKKysJICBmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLmtleSA9IHdyaXRlMzIoc3RyX29mZnNldCwgYmUpOworIAl9CisgCisgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAoZW50cnktPmxpYikgKyAxOworQEAgLTM3OSw5ICs0MDcsOSBAQCBzYXZlX2NhY2hlIChjb25zdCBjaGFyICpjYWNoZV9uYW1lKQorICAgICAgIHN0cl9vZmZzZXQgKz0gbGVuOworICAgICAgIC8qIFRoZW4gdGhlIHBhdGguICAqLworICAgICAgIGlmIChvcHRfZm9ybWF0ICE9IDIgJiYgZW50cnktPmh3Y2FwID09IDApCistCWZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS52YWx1ZSA9IHN0cl9vZmZzZXQgKyBwYWQ7CisrCWZpbGVfZW50cmllcy0+bGlic1tpZHhfb2xkXS52YWx1ZSA9IHdyaXRlMzIoc3RyX29mZnNldCArIHBhZCwgYmUpOworICAgICAgIGlmIChvcHRfZm9ybWF0ICE9IDApCistCWZpbGVfZW50cmllc19uZXctPmxpYnNbaWR4X25ld10udmFsdWUgPSBzdHJfb2Zmc2V0OworKwlmaWxlX2VudHJpZXNfbmV3LT5saWJzW2lkeF9uZXddLnZhbHVlID0gd3JpdGUzMihzdHJfb2Zmc2V0LCBiZSk7CisgICAgICAgbGVuID0gc3RybGVuIChlbnRyeS0+cGF0aCkgKyAxOworICAgICAgIHN0ciA9IG1lbXBjcHkgKHN0ciwgZW50cnktPnBhdGgsIGxlbik7CisgICAgICAgc3RyX29mZnNldCArPSBsZW47CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZWNmZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbi1uZXNzX2hhbmRsaW5nX2ZpeC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGaXggcHJvYmxlbSBkdXJpbmcgcGFyc2luZyBvZiBFTEYgaGVhZGVycyBmb3IgNjRiaXQgb24gYmlnLWVuZGlhbi4KK1NvbWUgaGVhZGVyIGZpZWxkcyB3ZXJlIHJlYWQgd2l0aCB3cm9uZyBzaXplLgorCisyMDE0LzEwLzI0CitQYXIgT2xzc29uIDxQYXIuT2xzc29uQHdpbmRyaXZlci5jb20+CitTaGFuIEhhaSA8c2hhbi5oYWlAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3JlYWRlbGZsaWIuYyBiL3JlYWRlbGZsaWIuYworaW5kZXggM2Y1YjI1Yi4uMGJmMGRlMyAxMDA2NDQKKy0tLSBhL3JlYWRlbGZsaWIuYworKysrIGIvcmVhZGVsZmxpYi5jCitAQCAtMjYxLDggKzI2MSw4IEBAIHByb2Nlc3NfZWxmX2ZpbGU2NCAoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBjb25zdCBjaGFyICpsaWIsIGludCAqZmxhZywKKyAgIGludCBpOworICAgdW5zaWduZWQgaW50IGo7CisgICBFbGY2NF9BZGRyIGxvYWRhZGRyOworLSAgdW5zaWduZWQgaW50IGR5bmFtaWNfYWRkcjsKKy0gIHNpemVfdCBkeW5hbWljX3NpemU7CisrICBFbGY2NF9BZGRyIGR5bmFtaWNfYWRkcjsKKysgIEVsZjY0X1h3b3JkIGR5bmFtaWNfc2l6ZTsKKyAgIGNoYXIgKnByb2dyYW1faW50ZXJwcmV0ZXI7CisgCisgICBFbGY2NF9FaGRyICplbGZfaGVhZGVyOworQEAgLTMxMSw3ICszMTEsNyBAQCBwcm9jZXNzX2VsZl9maWxlNjQgKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3QgY2hhciAqbGliLCBpbnQgKmZsYWcsCisgCSAgICBlcnJvciAoMCwgMCwgXygibW9yZSB0aGFuIG9uZSBkeW5hbWljIHNlZ21lbnRcbiIpKTsKKyAKKyAJICBkeW5hbWljX2FkZHIgPSByZWFkNjQoc2VnbWVudC0+cF9vZmZzZXQsIGJlKTsKKy0JICBkeW5hbWljX3NpemUgPSByZWFkMzIoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKysJICBkeW5hbWljX3NpemUgPSByZWFkNjQoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAJICBicmVhazsKKyAKKyAJY2FzZSBQVF9JTlRFUlA6CitAQCAtMzI5LDExICszMjksMTEgQEAgcHJvY2Vzc19lbGZfZmlsZTY0IChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IGNoYXIgKmxpYiwgaW50ICpmbGFnLAorIAkgIGJyZWFrOworIAorIAljYXNlIFBUX05PVEU6CistCSAgaWYgKCEqb3N2ZXJzaW9uICYmIHJlYWQzMihzZWdtZW50LT5wX2ZpbGVzeiwgYmUpID49IDMyICYmIHJlYWQzMihzZWdtZW50LT5wX2FsaWduLCBiZSkgPj0gNCkKKysJICBpZiAoISpvc3ZlcnNpb24gJiYgcmVhZDY0KHNlZ21lbnQtPnBfZmlsZXN6LCBiZSkgPj0gMzIgJiYgcmVhZDY0KHNlZ21lbnQtPnBfYWxpZ24sIGJlKSA+PSA0KQorIAkgICAgeworIAkgICAgICBFbGY2NF9Xb3JkICphYmlfbm90ZSA9IChFbGY2NF9Xb3JkICopIChmaWxlX2NvbnRlbnRzCisgCQkJCQkJICAgICArIHJlYWQ2NChzZWdtZW50LT5wX29mZnNldCwgYmUpKTsKKy0JICAgICAgRWxmNjRfQWRkciBzaXplID0gcmVhZDMyKHNlZ21lbnQtPnBfZmlsZXN6LCBiZSk7CisrCSAgICAgIEVsZjY0X1h3b3JkIHNpemUgPSByZWFkNjQoc2VnbWVudC0+cF9maWxlc3osIGJlKTsKKyAKKyAJICAgICAgd2hpbGUgKHJlYWQzMihhYmlfbm90ZSBbMF0sIGJlKSAhPSA0IHx8IHJlYWQzMihhYmlfbm90ZSBbMV0sIGJlKSAhPSAxNgorIAkJICAgICB8fCByZWFkMzIoYWJpX25vdGUgWzJdLCBiZSkgIT0gMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGIyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbmVzcy1oZWFkZXIucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZml4IHBva3kgcGF0Y2hdCisKK1RoaXMgcGF0Y2ggZml4ZXMgYnVpbGQgaXNzdWVzIHdpdGggYSBwcmV2aW91cyBlbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaCBvbgorZGlzdHJvcyB0aGF0IGRvbid0IGhhdmUgbWFjcm9zIHJlZmVyZW5jZWQKKworNy8yMC8yMDExCitNYXR0aGV3IE1jQ2xpbnRvY2sgPG1zbUBmcmVlc2NhbGUuY29tPgorCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9lbmRpYW5fZXh0cmEuaCBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2VuZGlhbl9leHRyYS5oCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2VuZGlhbl9leHRyYS5oCTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9lbmRpYW5fZXh0cmEuaAkyMDExLTA3LTE5IDE4OjA5OjE0LjMyMzA0ODQxNyAtMDUwMAorQEAgLTAsMCArMSw2NCBAQAorKy8qIENvcHlyaWdodCAoQykgMTk5MiwgMTk5NiwgMTk5NywgMjAwMCwgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKworKyNpZm5kZWYJX0VORElBTl9FWFRSQV9ICisrI2RlZmluZQlfRU5ESUFOX0VYVFJBX0gJMQorKworKy8qIERvbid0IHJlZGVmaW5lIHRoZXNlIG1hY3JvcyBpZiB0aGV5IGFscmVhZHkgZXhpc3QgKi8KKysjaWZuZGVmIGh0b2JlMTYKKysjaWZkZWYgX19VU0VfQlNECisrLyogQ29udmVyc2lvbiBpbnRlcmZhY2VzLiAgKi8KKysjIGluY2x1ZGUgPGJ5dGVzd2FwLmg+CisrCisrIyBpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrIyAgZGVmaW5lIGh0b2JlMTYoeCkgX19ic3dhcF8xNiAoeCkKKysjICBkZWZpbmUgaHRvbGUxNih4KSAoeCkKKysjICBkZWZpbmUgYmUxNnRvaCh4KSBfX2Jzd2FwXzE2ICh4KQorKyMgIGRlZmluZSBsZTE2dG9oKHgpICh4KQorKworKyMgIGRlZmluZSBodG9iZTMyKHgpIF9fYnN3YXBfMzIgKHgpCisrIyAgZGVmaW5lIGh0b2xlMzIoeCkgKHgpCisrIyAgZGVmaW5lIGJlMzJ0b2goeCkgX19ic3dhcF8zMiAoeCkKKysjICBkZWZpbmUgbGUzMnRvaCh4KSAoeCkKKysKKysjICBkZWZpbmUgaHRvYmU2NCh4KSBfX2Jzd2FwXzY0ICh4KQorKyMgIGRlZmluZSBodG9sZTY0KHgpICh4KQorKyMgIGRlZmluZSBiZTY0dG9oKHgpIF9fYnN3YXBfNjQgKHgpCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgKHgpCisrIyBlbHNlCisrIyAgZGVmaW5lIGh0b2JlMTYoeCkgKHgpCisrIyAgZGVmaW5lIGh0b2xlMTYoeCkgX19ic3dhcF8xNiAoeCkKKysjICBkZWZpbmUgYmUxNnRvaCh4KSAoeCkKKysjICBkZWZpbmUgbGUxNnRvaCh4KSBfX2Jzd2FwXzE2ICh4KQorKworKyMgIGRlZmluZSBodG9iZTMyKHgpICh4KQorKyMgIGRlZmluZSBodG9sZTMyKHgpIF9fYnN3YXBfMzIgKHgpCisrIyAgZGVmaW5lIGJlMzJ0b2goeCkgKHgpCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgX19ic3dhcF8zMiAoeCkKKysKKysjICBkZWZpbmUgaHRvYmU2NCh4KSAoeCkKKysjICBkZWZpbmUgaHRvbGU2NCh4KSBfX2Jzd2FwXzY0ICh4KQorKyMgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorKyMgIGRlZmluZSBsZTY0dG9oKHgpIF9fYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyNlbmRpZgorKyNlbmRpZgorKworKyNlbmRpZgkvKiBlbmRpYW5fZXh0cmEuaCAqLworZGlmZiAtcHVyTiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2FjaGUuYyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2FjaGUuYwkyMDExLTA3LTE5IDE4OjIxOjI4LjM0NzA0MTMwMSAtMDUwMAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYwkyMDExLTA3LTE5IDE4OjIyOjU0LjExODA0ODA2NCAtMDUwMAorQEAgLTM5LDYgKzM5LDggQEAKKyAjIGRlZmluZSBOXyhtc2dpZCkgIG1zZ2lkCisgI2RlZmluZSBfKG1zZykgbXNnCisgCisrI2luY2x1ZGUgImVuZGlhbl9leHRyYS5oIgorKworIGV4dGVybiBpbnQgYmU7CisgCisgc3RhdGljIHVpbnQxNl90IHdyaXRlMTYodWludDE2X3QgeCwgaW50IGJlKQorZGlmZiAtcHVyTiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGVsZmxpYi5jIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRlbGZsaWIuYwkyMDExLTA3LTE5IDE4OjIxOjI4LjM0NjA0MTU5MyAtMDUwMAorKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGVsZmxpYi5jCTIwMTEtMDctMTkgMTg6MjM6MDUuMzI0MDU5ODc1IC0wNTAwCitAQCAtMjUsNiArMjUsOSBAQAorIAorIC8qIGNoZWNrX3B0ciBjaGVja3MgdGhhdCBhIHBvaW50ZXIgaXMgaW4gdGhlIG1tYXBlZCBmaWxlIGFuZCBkb2Vzbid0CisgICAgcG9pbnQgb3V0c2lkZSBpdC4gICovCisrCisrI2luY2x1ZGUgImVuZGlhbl9leHRyYS5oIgorKworICN1bmRlZiBjaGVja19wdHIKKyAjZGVmaW5lIGNoZWNrX3B0cihwdHIpCQkJCQkJXAorIGRvCQkJCQkJCQlcCitkaWZmIC1wdXJOIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9yZWFkbGliLmMgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCTIwMTEtMDctMTkgMTg6MjE6MjguMzQ2MDQxNTkzIC0wNTAwCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMJMjAxMS0wNy0xOSAxODoyMzoyMy44NzcwNDYyMTAgLTA1MDAKK0BAIC00MCw2ICs0MCw4IEBACisgCisgI2luY2x1ZGUgImxkY29uZmlnLmgiCisgCisrI2luY2x1ZGUgImVuZGlhbl9leHRyYS5oIgorKworICNkZWZpbmUgXyhtc2cpIG1zZworIAorICNkZWZpbmUgRWxmMzJfQ0xBU1MgRUxGQ0xBU1MzMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9mbGFnX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5YWFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZmxhZ19maXgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIG5hdGl2ZSB2ZXJzaW9uIG9mIGxkY29uZmlnIHdhcyB1c2luZyBuYXRpdmUgZGVmaW5pdGlvbiBvZiBMRF9TTyAoaS5lLiAKK2xkLWxpbnV4LXg4Ni02NC5zby4yICkgd2hpY2ggaXMgbm90IGNvcnJlY3QgZm9yIGRvaW5nIHRoZSBjcm9zcyBsZGNvbmZpZy4KK1RoaXMgd2FzIGNhdXNpbmcgbGliYy5zbyBvbiB0aGUgdGFyZ2V0IG1hcmtlZCBhcyBFTEYgbGliIHJhdGhlciB0aGFuIAorRkxBR19FTEZfTElCQzYgaW4gdGhlIGxkLnNvLmNhY2hlLgorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzQKKworSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL3JlYWRsaWIuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvcmVhZGxpYi5jCitAQCAtNTEsNiArNTEsMTAgQEAgc3RydWN0IGtub3duX25hbWVzCisgICBpbnQgZmxhZzsKKyB9OworIAorKy8qIGRvbid0IHVzZSBob3N0J3MgZGVmaW5pdGlvbiBvZiBMRF9TTyAqLworKyN1bmRlZiBMRF9TTyAKKysjZGVmaW5lIExEX1NPICJsZC5zby4xIgorKworIHN0YXRpYyBzdHJ1Y3Qga25vd25fbmFtZXMgaW50ZXJwcmV0ZXJzW10gPQorIHsKKyAgIHsgIi9saWIvIiBMRF9TTywgRkxBR19FTEZfTElCQzYgfSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctZGVmYXVsdC10by1hbGwtbXVsdGlsaWItZGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ0ZjZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1kZWZhdWx0LXRvLWFsbC1tdWx0aWxpYi1kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK21ha2UgbGRjb25maWcgZGVmYXVsdCB0byBib3RoIC9saWIrL3Vzci9saWIsIC9saWIzMisvdXNyL2xpYjMyIGFuZAorL2xpYjY0Ky91c3IvbGliNjQgb24gYmktQUJJIGFyY2hpdGVjdHVyZXMuCisKKy0tLQorIGxkY29uZmlnLmMgfCAgIDEwICsrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC11cnBOIGEvbGRjb25maWcuYyBiL2xkY29uZmlnLmMKKy0tLSBhL2xkY29uZmlnLmMKKysrKyBiL2xkY29uZmlnLmMKK0BAIC01Miw3ICs1MiwxMSBAQAorIAorICNkZWZpbmUgU1lTQ09ORkRJUiAiL2V0YyIKKyAjZGVmaW5lIExJQkRJUiAiL3Vzci9saWIiCisrI2RlZmluZSBMSUJESVIzMiAiL3Vzci9saWIzMiIKKysjZGVmaW5lIExJQkRJUjY0ICIvdXNyL2xpYjY0IgorICNkZWZpbmUgU0xJQkRJUiAiL2xpYiIKKysjZGVmaW5lIFNMSUJESVIzMiAiL2xpYjMyIgorKyNkZWZpbmUgU0xJQkRJUjY0ICIvbGliNjQiCisgIyBkZWZpbmUgTl8obXNnaWQpICBtc2dpZAorICNkZWZpbmUgXyhtc2cpIG1zZworIAorQEAgLTEzNzMsNiArMTM3NywxMiBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgYWRkX3N5c3RlbV9kaXIgKFNMSUJESVIpOworICAgICAgIGlmIChzdHJjbXAgKFNMSUJESVIsIExJQkRJUikpCisgCWFkZF9zeXN0ZW1fZGlyIChMSUJESVIpOworKyAgICAgIGFkZF9zeXN0ZW1fZGlyIChTTElCRElSMzIpOworKyAgICAgIGlmIChzdHJjbXAgKFNMSUJESVIzMiwgTElCRElSMzIpKQorKwlhZGRfc3lzdGVtX2RpciAoTElCRElSMzIpOworKyAgICAgIGFkZF9zeXN0ZW1fZGlyIChTTElCRElSNjQpOworKyAgICAgIGlmIChzdHJjbXAgKFNMSUJESVI2NCwgTElCRElSNjQpKQorKwlhZGRfc3lzdGVtX2RpciAoTElCRElSNjQpOworICAgICB9CisgCisgICBjb25zdCBjaGFyICphdXhfY2FjaGVfZmlsZSA9IF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlLTIuMTIuMS9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xLnRhci5iejIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMxZTc5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWctbmF0aXZlLTIuMTIuMS50YXIuYnoyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTg2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDcxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitlbmFibGUgc3RhbmRhbG9uZSBidWlsZGluZyBvZiBsZGNvbmZpZworCistLS0KKyBjYWNoZS5jICAgICAgICB8ICAgMTEgKy0KKyBjaHJvb3RfY2Fub24uYyB8ICAgIDcgKworIGRsLWNhY2hlLmMgICAgIHwgIDIzNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbC1jYWNoZS5oICAgICB8ICAgIDMgCisgbGRjb25maWcuYyAgICAgfCAgIDI3ICsrKystLQorIHJlYWRsaWIuYyAgICAgIHwgICAgNyArCisgeHN0cmR1cC5jICAgICAgfCAgIDExIC0tCisgNyBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAyNTYgZGVsZXRpb25zKC0pCisKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2NhY2hlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvY2FjaGUuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvY2FjaGUuYworQEAgLTE2LDYgKzE2LDkgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworIAorKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8ZXJyb3IuaD4KKyAjaW5jbHVkZSA8ZGlyZW50Lmg+CitAQCAtMzEsOCArMzQsMTAgQEAKKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgCistI2luY2x1ZGUgPGxkY29uZmlnLmg+CistI2luY2x1ZGUgPGRsLWNhY2hlLmg+CisrI2luY2x1ZGUgImxkY29uZmlnLmgiCisrI2luY2x1ZGUgImRsLWNhY2hlLmgiCisrIyBkZWZpbmUgTl8obXNnaWQpICBtc2dpZAorKyNkZWZpbmUgXyhtc2cpIG1zZworIAorIHN0cnVjdCBjYWNoZV9lbnRyeQorIHsKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2Nocm9vdF9jYW5vbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGRjb25maWctbmF0aXZlLTIuMTIuMS5vcmlnL2Nocm9vdF9jYW5vbi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9jaHJvb3RfY2Fub24uYworQEAgLTE3LDYgKzE3LDkgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworIAorKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KK0BAIC0yNyw3ICszMCw5IEBACisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysKKysjZGVmaW5lIF9fc2V0X2Vycm5vKFZhbCkgZXJybm8gPSAoVmFsKQorIAorICNpZm5kZWYgUEFUSF9NQVgKKyAjZGVmaW5lIFBBVEhfTUFYIDEwMjQKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2RsLWNhY2hlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvZGwtY2FjaGUuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuYworQEAgLTIwLDEyICsyMCwxMiBAQAorIAorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CistI2luY2x1ZGUgPGxkc29kZWZzLmg+CisrLy8jaW5jbHVkZSAibGRzb2RlZnMuaCIKKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyAjaW5jbHVkZSA8ZGwtY2FjaGUuaD4KKyAjaW5jbHVkZSA8ZGwtcHJvY2luZm8uaD4KKyAKKy0jaW5jbHVkZSA8c3RkaW8tY29tbW9uL19pdG9hLmg+CisrLy8jaW5jbHVkZSAiX2l0b2EuaCIKKyAKKyAjaWZuZGVmIF9ETF9QTEFURk9STVNfQ09VTlQKKyAjIGRlZmluZSBfRExfUExBVEZPUk1TX0NPVU5UIDAKK0BAIC0zOSwxMDMgKzM5LDcgQEAgc3RhdGljIHNpemVfdCBjYWNoZXNpemU7CisgLyogMSBpZiBjYWNoZV9kYXRhICsgUFRSIHBvaW50cyBpbnRvIHRoZSBjYWNoZS4gICovCisgI2RlZmluZSBfZGxfY2FjaGVfdmVyaWZ5X3B0cihwdHIpIChwdHIgPCBjYWNoZV9kYXRhX3NpemUpCisgCistI2RlZmluZSBTRUFSQ0hfQ0FDSEUoY2FjaGUpIFwKKy0vKiBXZSB1c2UgYmluYXJ5IHNlYXJjaCBzaW5jZSB0aGUgdGFibGUgaXMgc29ydGVkIGluIHRoZSBjYWNoZSBmaWxlLgkgICAgICBcCistICAgVGhlIGZpcnN0IG1hdGNoaW5nIGVudHJ5IGluIHRoZSB0YWJsZSBpcyByZXR1cm5lZC4JCQkgICAgICBcCistICAgSXQgaXMgaW1wb3J0YW50IHRvIHVzZSB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdXNlZCB3aGlsZSBnZW5lcmF0aW5nCSAgICAgIFwKKy0gICB0aGUgY2FjaGUgZmlsZS4gICovCQkJCQkJCSAgICAgIFwKKy1kbwkJCQkJCQkJCSAgICAgIFwKKy0gIHsJCQkJCQkJCQkgICAgICBcCistICAgIGxlZnQgPSAwOwkJCQkJCQkJICAgICAgXAorLSAgICByaWdodCA9IGNhY2hlLT5ubGlicyAtIDE7CQkJCQkJICAgICAgXAorLQkJCQkJCQkJCSAgICAgIFwKKy0gICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpCQkJCQkJICAgICAgXAorLSAgICAgIHsJCQkJCQkJCQkgICAgICBcCistCV9fdHlwZW9mX18gKGNhY2hlLT5saWJzWzBdLmtleSkga2V5OwkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQltaWRkbGUgPSAobGVmdCArIHJpZ2h0KSAvIDI7CQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQlrZXkgPSBjYWNoZS0+bGlic1ttaWRkbGVdLmtleTsJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCS8qIE1ha2Ugc3VyZSBzdHJpbmcgdGFibGUgaW5kaWNlcyBhcmUgbm90IGJvZ3VzIGJlZm9yZSB1c2luZwkgICAgICBcCistCSAgIHRoZW0uICAqLwkJCQkJCQkgICAgICBcCistCWlmICghIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChrZXkpKQkJCQkgICAgICBcCistCSAgewkJCQkJCQkJICAgICAgXAorLQkgICAgY21wcmVzID0gMTsJCQkJCQkJICAgICAgXAorLQkgICAgYnJlYWs7CQkJCQkJCSAgICAgIFwKKy0JICB9CQkJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkvKiBBY3R1YWxseSBjb21wYXJlIHRoZSBlbnRyeSB3aXRoIHRoZSBrZXkuICAqLwkJCSAgICAgIFwKKy0JY21wcmVzID0gX2RsX2NhY2hlX2xpYmNtcCAobmFtZSwgY2FjaGVfZGF0YSArIGtleSk7CQkgICAgICBcCistCWlmIChfX2J1aWx0aW5fZXhwZWN0IChjbXByZXMgPT0gMCwgMCkpCQkJCSAgICAgIFwKKy0JICB7CQkJCQkJCQkgICAgICBcCistCSAgICAvKiBGb3VuZCBpdC4gIExFRlQgbm93IG1hcmtzIHRoZSBsYXN0IGVudHJ5IGZvciB3aGljaCB3ZQkgICAgICBcCistCSAgICAgICBrbm93IHRoZSBuYW1lIGlzIGNvcnJlY3QuICAqLwkJCQkgICAgICBcCistCSAgICBsZWZ0ID0gbWlkZGxlOwkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCSAgICAvKiBUaGVyZSBtaWdodCBiZSBlbnRyaWVzIHdpdGggdGhpcyBuYW1lIGJlZm9yZSB0aGUgb25lIHdlCSAgICAgIFwKKy0JICAgICAgIGZvdW5kLiAgU28gd2UgaGF2ZSB0byBmaW5kIHRoZSBiZWdpbm5pbmcuICAqLwkJICAgICAgXAorLQkgICAgd2hpbGUgKG1pZGRsZSA+IDApCQkJCQkJICAgICAgXAorLQkgICAgICB7CQkJCQkJCQkgICAgICBcCistCQlfX3R5cGVvZl9fIChjYWNoZS0+bGlic1swXS5rZXkpIGtleTsJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkJa2V5ID0gY2FjaGUtPmxpYnNbbWlkZGxlIC0gMV0ua2V5OwkJCSAgICAgIFwKKy0JCS8qIE1ha2Ugc3VyZSBzdHJpbmcgdGFibGUgaW5kaWNlcyBhcmUgbm90IGJvZ3VzIGJlZm9yZQkgICAgICBcCistCQkgICB1c2luZyB0aGVtLiAgKi8JCQkJCSAgICAgIFwKKy0JCWlmICghIF9kbF9jYWNoZV92ZXJpZnlfcHRyIChrZXkpCQkJICAgICAgXAorLQkJICAgIC8qIEFjdHVhbGx5IGNvbXBhcmUgdGhlIGVudHJ5LiAgKi8JCQkgICAgICBcCistCQkgICAgfHwgX2RsX2NhY2hlX2xpYmNtcCAobmFtZSwgY2FjaGVfZGF0YSArIGtleSkgIT0gMCkJICAgICAgXAorLQkJICBicmVhazsJCQkJCQkgICAgICBcCistCQktLW1pZGRsZTsJCQkJCQkgICAgICBcCistCSAgICAgIH0JCQkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCSAgICBkbwkJCQkJCQkJICAgICAgXAorLQkgICAgICB7CQkJCQkJCQkgICAgICBcCistCQlpbnQgZmxhZ3M7CQkJCQkJICAgICAgXAorLQkJX190eXBlb2ZfXyAoY2FjaGUtPmxpYnNbMF0pICpsaWIgPSAmY2FjaGUtPmxpYnNbbWlkZGxlXTsgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQkJLyogT25seSBwZXJmb3JtIHRoZSBuYW1lIHRlc3QgaWYgbmVjZXNzYXJ5LiAgKi8JCSAgICAgIFwKKy0JCWlmIChtaWRkbGUgPiBsZWZ0CQkJCQkgICAgICBcCistCQkgICAgLyogV2UgaGF2ZW4ndCBzZWVuIHRoaXMgc3RyaW5nIHNvIGZhci4gIFRlc3Qgd2hldGhlciB0aGUgIFwKKy0JCSAgICAgICBpbmRleCBpcyBvayBhbmQgd2hldGhlciB0aGUgbmFtZSBtYXRjaGVzLiAgT3RoZXJ3aXNlICAgXAorLQkJICAgICAgIHdlIGFyZSBkb25lLiAgKi8JCQkJCSAgICAgIFwKKy0JCSAgICAmJiAoISBfZGxfY2FjaGVfdmVyaWZ5X3B0ciAobGliLT5rZXkpCQkgICAgICBcCistCQkJfHwgKF9kbF9jYWNoZV9saWJjbXAgKG5hbWUsIGNhY2hlX2RhdGEgKyBsaWItPmtleSkgICAgXAorLQkJCSAgICAhPSAwKSkpCQkJCQkgICAgICBcCistCQkgIGJyZWFrOwkJCQkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQlmbGFncyA9IGxpYi0+ZmxhZ3M7CQkJCQkgICAgICBcCistCQlpZiAoX2RsX2NhY2hlX2NoZWNrX2ZsYWdzIChmbGFncykJCQkgICAgICBcCistCQkgICAgJiYgX2RsX2NhY2hlX3ZlcmlmeV9wdHIgKGxpYi0+dmFsdWUpKQkJICAgICAgXAorLQkJICB7CQkJCQkJCSAgICAgIFwKKy0JCSAgICBpZiAoYmVzdCA9PSBOVUxMIHx8IGZsYWdzID09IEdMUk8oZGxfY29ycmVjdF9jYWNoZV9pZCkpICAgXAorLQkJICAgICAgewkJCQkJCQkgICAgICBcCistCQkJSFdDQVBfQ0hFQ0s7CQkJCQkgICAgICBcCistCQkJYmVzdCA9IGNhY2hlX2RhdGEgKyBsaWItPnZhbHVlOwkJCSAgICAgIFwKKy0JCQkJCQkJCQkgICAgICBcCistCQkJaWYgKGZsYWdzID09IEdMUk8oZGxfY29ycmVjdF9jYWNoZV9pZCkpCQkgICAgICBcCistCQkJICAvKiBXZSd2ZSBmb3VuZCBhbiBleGFjdCBtYXRjaCBmb3IgdGhlIHNoYXJlZAkgICAgICBcCistCQkJICAgICBvYmplY3QgYW5kIG5vIGdlbmVyYWwgYEVMRicgcmVsZWFzZS4gIFN0b3AJICAgICAgXAorLQkJCSAgICAgc2VhcmNoaW5nLiAgKi8JCQkJICAgICAgXAorLQkJCSAgYnJlYWs7CQkJCQkgICAgICBcCistCQkgICAgICB9CQkJCQkJCSAgICAgIFwKKy0JCSAgfQkJCQkJCQkgICAgICBcCistCSAgICAgIH0JCQkJCQkJCSAgICAgIFwKKy0JICAgIHdoaWxlICgrK21pZGRsZSA8PSByaWdodCk7CQkJCQkgICAgICBcCistCSAgICBicmVhazsJCQkJCQkJICAgICAgXAorLQl9CQkJCQkJCQkgICAgICBcCistCQkJCQkJCQkJICAgICAgXAorLQlpZiAoY21wcmVzIDwgMCkJCQkJCQkJICAgICAgXAorLQkgIGxlZnQgPSBtaWRkbGUgKyAxOwkJCQkJCSAgICAgIFwKKy0JZWxzZQkJCQkJCQkJICAgICAgXAorLQkgIHJpZ2h0ID0gbWlkZGxlIC0gMTsJCQkJCQkgICAgICBcCistICAgICAgfQkJCQkJCQkJCSAgICAgIFwKKy0gIH0JCQkJCQkJCQkgICAgICBcCistd2hpbGUgKDApCistCistCisgaW50CistaW50ZXJuYWxfZnVuY3Rpb24KKyBfZGxfY2FjaGVfbGliY21wIChjb25zdCBjaGFyICpwMSwgY29uc3QgY2hhciAqcDIpCisgeworICAgd2hpbGUgKCpwMSAhPSAnXDAnKQorQEAgLTE3MiwxMzkgKzc2LDMgQEAgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IAorICAgICB9CisgICByZXR1cm4gKnAxIC0gKnAyOworIH0KKy0KKy0KKy0vKiBMb29rIHVwIE5BTUUgaW4gbGQuc28uY2FjaGUgYW5kIHJldHVybiB0aGUgZmlsZSBuYW1lIHN0b3JlZCB0aGVyZSwKKy0gICBvciBudWxsIGlmIG5vbmUgaXMgZm91bmQuICAqLworLQorLWNvbnN0IGNoYXIgKgorLWludGVybmFsX2Z1bmN0aW9uCistX2RsX2xvYWRfY2FjaGVfbG9va3VwIChjb25zdCBjaGFyICpuYW1lKQorLXsKKy0gIGludCBsZWZ0LCByaWdodCwgbWlkZGxlOworLSAgaW50IGNtcHJlczsKKy0gIGNvbnN0IGNoYXIgKmNhY2hlX2RhdGE7CistICB1aW50MzJfdCBjYWNoZV9kYXRhX3NpemU7CistICBjb25zdCBjaGFyICpiZXN0OworLQorLSAgLyogUHJpbnQgYSBtZXNzYWdlIGlmIHRoZSBsb2FkaW5nIG9mIGxpYnMgaXMgdHJhY2VkLiAgKi8KKy0gIGlmIChfX2J1aWx0aW5fZXhwZWN0IChHTFJPX2RsX2RlYnVnX21hc2sgJiBETF9ERUJVR19MSUJTLCAwKSkKKy0gICAgX2RsX2RlYnVnX3ByaW50ZiAoIiBzZWFyY2ggY2FjaGU9JXNcbiIsIExEX1NPX0NBQ0hFKTsKKy0KKy0gIGlmIChjYWNoZSA9PSBOVUxMKQorLSAgICB7CistICAgICAgLyogUmVhZCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuICAqLworLSAgICAgIHZvaWQgKmZpbGUgPSBfZGxfc3lzZGVwX3JlYWRfd2hvbGVfZmlsZSAoTERfU09fQ0FDSEUsICZjYWNoZXNpemUsCistCQkJCQkgICAgICAgUFJPVF9SRUFEKTsKKy0KKy0gICAgICAvKiBXZSBjYW4gaGFuZGxlIHRocmVlIGRpZmZlcmVudCBjYWNoZSBmaWxlIGZvcm1hdHMgaGVyZToKKy0JIC0gdGhlIG9sZCBsaWJjNS9nbGliYzIuMC8yLjEgZm9ybWF0CistCSAtIHRoZSBvbGQgZm9ybWF0IHdpdGggdGhlIG5ldyBmb3JtYXQgaW4gaXQKKy0JIC0gb25seSB0aGUgbmV3IGZvcm1hdAorLQkgVGhlIGZvbGxvd2luZyBjaGVja3MgaWYgdGhlIGNhY2hlIGNvbnRhaW5zIGFueSBvZiB0aGVzZSBmb3JtYXRzLiAgKi8KKy0gICAgICBpZiAoZmlsZSAhPSBNQVBfRkFJTEVEICYmIGNhY2hlc2l6ZSA+IHNpemVvZiAqY2FjaGUKKy0JICAmJiBtZW1jbXAgKGZpbGUsIENBQ0hFTUFHSUMsIHNpemVvZiBDQUNIRU1BR0lDIC0gMSkgPT0gMCkKKy0JeworLQkgIHNpemVfdCBvZmZzZXQ7CistCSAgLyogTG9va3Mgb2suICAqLworLQkgIGNhY2hlID0gZmlsZTsKKy0KKy0JICAvKiBDaGVjayBmb3IgbmV3IHZlcnNpb24uICAqLworLQkgIG9mZnNldCA9IEFMSUdOX0NBQ0hFIChzaXplb2YgKHN0cnVjdCBjYWNoZV9maWxlKQorLQkJCQkrIGNhY2hlLT5ubGlicyAqIHNpemVvZiAoc3RydWN0IGZpbGVfZW50cnkpKTsKKy0KKy0JICBjYWNoZV9uZXcgPSAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3ICopICgodm9pZCAqKSBjYWNoZSArIG9mZnNldCk7CistCSAgaWYgKGNhY2hlc2l6ZSA8IChvZmZzZXQgKyBzaXplb2YgKHN0cnVjdCBjYWNoZV9maWxlX25ldykpCistCSAgICAgIHx8IG1lbWNtcCAoY2FjaGVfbmV3LT5tYWdpYywgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVywKKy0JCQkgc2l6ZW9mIENBQ0hFTUFHSUNfVkVSU0lPTl9ORVcgLSAxKSAhPSAwKQorLQkgICAgY2FjaGVfbmV3ID0gKHZvaWQgKikgLTE7CistCX0KKy0gICAgICBlbHNlIGlmIChmaWxlICE9IE1BUF9GQUlMRUQgJiYgY2FjaGVzaXplID4gc2l6ZW9mICpjYWNoZV9uZXcKKy0JICAgICAgICYmIG1lbWNtcCAoZmlsZSwgQ0FDSEVNQUdJQ19WRVJTSU9OX05FVywKKy0JCQkgIHNpemVvZiBDQUNIRU1BR0lDX1ZFUlNJT05fTkVXIC0gMSkgPT0gMCkKKy0JeworLQkgIGNhY2hlX25ldyA9IGZpbGU7CistCSAgY2FjaGUgPSBmaWxlOworLQl9CistICAgICAgZWxzZQorLQl7CistCSAgaWYgKGZpbGUgIT0gTUFQX0ZBSUxFRCkKKy0JICAgIF9fbXVubWFwIChmaWxlLCBjYWNoZXNpemUpOworLQkgIGNhY2hlID0gKHZvaWQgKikgLTE7CistCX0KKy0KKy0gICAgICBhc3NlcnQgKGNhY2hlICE9IE5VTEwpOworLSAgICB9CistCistICBpZiAoY2FjaGUgPT0gKHZvaWQgKikgLTEpCistICAgIC8qIFByZXZpb3VzbHkgbG9va2VkIGZvciB0aGUgY2FjaGUgZmlsZSBhbmQgZGlkbid0IGZpbmQgaXQuICAqLworLSAgICByZXR1cm4gTlVMTDsKKy0KKy0gIGJlc3QgPSBOVUxMOworLQorLSAgaWYgKGNhY2hlX25ldyAhPSAodm9pZCAqKSAtMSkKKy0gICAgeworLSAgICAgIHVpbnQ2NF90IHBsYXRmb3JtOworLQorLSAgICAgIC8qIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3Mgc3RhcnQuICAqLworLSAgICAgIGNhY2hlX2RhdGEgPSAoY29uc3QgY2hhciAqKSBjYWNoZV9uZXc7CistCistICAgICAgLyogTm93IHdlIGNhbiBjb21wdXRlIGhvdyBsYXJnZSB0aGUgc3RyaW5nIHRhYmxlIGlzLiAgKi8KKy0gICAgICBjYWNoZV9kYXRhX3NpemUgPSAoY29uc3QgY2hhciAqKSBjYWNoZSArIGNhY2hlc2l6ZSAtIGNhY2hlX2RhdGE7CistCistICAgICAgcGxhdGZvcm0gPSBfZGxfc3RyaW5nX3BsYXRmb3JtIChHTFJPKGRsX3BsYXRmb3JtKSk7CistICAgICAgaWYgKHBsYXRmb3JtICE9ICh1aW50NjRfdCkgLTEpCistCXBsYXRmb3JtID0gMVVMTCA8PCBwbGF0Zm9ybTsKKy0KKy0jZGVmaW5lIF9ETF9IV0NBUF9UTFNfTUFTSyAoMUxMIDw8IDYzKQorLSAgICAgIHVpbnQ2NF90IGh3Y2FwX2V4Y2x1ZGUgPSB+KChHTFJPKGRsX2h3Y2FwKSAmIEdMUk8oZGxfaHdjYXBfbWFzaykpCistCQkJCSB8IF9ETF9IV0NBUF9QTEFURk9STSB8IF9ETF9IV0NBUF9UTFNfTUFTSyk7CistCistICAgICAgLyogT25seSBhY2NlcHQgaHdjYXAgaWYgaXQncyBmb3IgdGhlIHJpZ2h0IHBsYXRmb3JtLiAgKi8KKy0jZGVmaW5lIEhXQ0FQX0NIRUNLIFwKKy0gICAgICBpZiAobGliLT5od2NhcCAmIGh3Y2FwX2V4Y2x1ZGUpCQkJCQkgICAgICBcCistCWNvbnRpbnVlOwkJCQkJCQkgICAgICBcCistICAgICAgaWYgKEdMUk8oZGxfb3N2ZXJzaW9uKSAmJiBsaWItPm9zdmVyc2lvbiA+IEdMUk8oZGxfb3N2ZXJzaW9uKSkJICAgICAgXAorLQljb250aW51ZTsJCQkJCQkJICAgICAgXAorLSAgICAgIGlmIChfRExfUExBVEZPUk1TX0NPVU5UCQkJCQkJICAgICAgXAorLQkgICYmIChsaWItPmh3Y2FwICYgX0RMX0hXQ0FQX1BMQVRGT1JNKSAhPSAwCQkJICAgICAgXAorLQkgICYmIChsaWItPmh3Y2FwICYgX0RMX0hXQ0FQX1BMQVRGT1JNKSAhPSBwbGF0Zm9ybSkJCSAgICAgIFwKKy0JY29udGludWUKKy0gICAgICBTRUFSQ0hfQ0FDSEUgKGNhY2hlX25ldyk7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIC8qIFRoaXMgaXMgd2hlcmUgdGhlIHN0cmluZ3Mgc3RhcnQuICAqLworLSAgICAgIGNhY2hlX2RhdGEgPSAoY29uc3QgY2hhciAqKSAmY2FjaGUtPmxpYnNbY2FjaGUtPm5saWJzXTsKKy0KKy0gICAgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgaG93IGxhcmdlIHRoZSBzdHJpbmcgdGFibGUgaXMuICAqLworLSAgICAgIGNhY2hlX2RhdGFfc2l6ZSA9IChjb25zdCBjaGFyICopIGNhY2hlICsgY2FjaGVzaXplIC0gY2FjaGVfZGF0YTsKKy0KKy0jdW5kZWYgSFdDQVBfQ0hFQ0sKKy0jZGVmaW5lIEhXQ0FQX0NIRUNLIGRvIHt9IHdoaWxlICgwKQorLSAgICAgIFNFQVJDSF9DQUNIRSAoY2FjaGUpOworLSAgICB9CistCistICAvKiBQcmludCBvdXIgcmVzdWx0IGlmIHdhbnRlZC4gICovCistICBpZiAoX19idWlsdGluX2V4cGVjdCAoR0xST19kbF9kZWJ1Z19tYXNrICYgRExfREVCVUdfTElCUywgMCkKKy0gICAgICAmJiBiZXN0ICE9IE5VTEwpCistICAgIF9kbF9kZWJ1Z19wcmludGYgKCIgIHRyeWluZyBmaWxlPSVzXG4iLCBiZXN0KTsKKy0KKy0gIHJldHVybiBiZXN0OworLX0KKy0KKy0jaWZuZGVmIE1BUF9DT1BZCistLyogSWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IE1BUF9DT1BZIHdlIGNhbm5vdCBsZWF2ZSB0aGUgZmlsZSBvcGVuCistICAgYWxsIHRoZSB0aW1lIHNpbmNlIHRoaXMgd291bGQgY3JlYXRlIHByb2JsZW1zIHdoZW4gdGhlIGZpbGUgaXMgcmVwbGFjZWQuCistICAgVGhlcmVmb3JlIHdlIHByb3ZpZGUgdGhpcyBmdW5jdGlvbiB0byBjbG9zZSB0aGUgZmlsZSBhbmQgb3BlbiBpdCBhZ2FpbgorLSAgIG9uY2UgbmVlZGVkLiAgKi8KKy12b2lkCistX2RsX3VubG9hZF9jYWNoZSAodm9pZCkKKy17CistICBpZiAoY2FjaGUgIT0gTlVMTCAmJiBjYWNoZSAhPSAoc3RydWN0IGNhY2hlX2ZpbGUgKikgLTEpCistICAgIHsKKy0gICAgICBfX211bm1hcCAoY2FjaGUsIGNhY2hlc2l6ZSk7CistICAgICAgY2FjaGUgPSBOVUxMOworLSAgICB9CistfQorLSNlbmRpZgorSW5kZXg6IGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvZGwtY2FjaGUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy9kbC1jYWNoZS5oCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9kbC1jYWNoZS5oCitAQCAtMTAxLDUgKzEwMSw0IEBAIHN0cnVjdCBjYWNoZV9maWxlX25ldworICgoKGFkZHIpICsgX19hbGlnbm9mX18gKHN0cnVjdCBjYWNoZV9maWxlX25ldykgLTEpCVwKKyAgJiAofihfX2FsaWdub2ZfXyAoc3RydWN0IGNhY2hlX2ZpbGVfbmV3KSAtIDEpKSkKKyAKKy1leHRlcm4gaW50IF9kbF9jYWNoZV9saWJjbXAgKGNvbnN0IGNoYXIgKnAxLCBjb25zdCBjaGFyICpwMikKKy0gICAgIGludGVybmFsX2Z1bmN0aW9uOworK2V4dGVybiBpbnQgX2RsX2NhY2hlX2xpYmNtcCAoY29uc3QgY2hhciAqcDEsIGNvbnN0IGNoYXIgKnAyKTsKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvbGRjb25maWcuYworKysrIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWcuYworQEAgLTE2LDYgKzE2LDkgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworIAorKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRQorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKyAjZGVmaW5lIFBST0NJTkZPX0NMQVNTIHN0YXRpYworICNpbmNsdWRlIDxhbGxvY2EuaD4KKyAjaW5jbHVkZSA8YXJncC5oPgorQEAgLTM5LDEwICs0MiwyMCBAQAorICNpbmNsdWRlIDxnbG9iLmg+CisgI2luY2x1ZGUgPGxpYmdlbi5oPgorIAorLSNpbmNsdWRlIDxsZGNvbmZpZy5oPgorLSNpbmNsdWRlIDxkbC1jYWNoZS5oPgorKyNpbmNsdWRlICJsZGNvbmZpZy5oIgorKyNpbmNsdWRlICJkbC1jYWNoZS5oIgorKworKyNpbmNsdWRlICJkbC1wcm9jaW5mby5oIgorKworKyNpbmNsdWRlICJhcmdwLmgiCisrCisrCisrI2RlZmluZSBTWVNDT05GRElSICIvZXRjIgorKyNkZWZpbmUgTElCRElSICIvdXNyL2xpYiIKKysjZGVmaW5lIFNMSUJESVIgIi9saWIiCisrIyBkZWZpbmUgTl8obXNnaWQpICBtc2dpZAorKyNkZWZpbmUgXyhtc2cpIG1zZworIAorLSNpbmNsdWRlIDxkbC1wcm9jaW5mby5oPgorIAorICNpZmRlZiBfRExfRklSU1RfUExBVEZPUk0KKyAjIGRlZmluZSBfRExfRklSU1RfRVhUUkEgKF9ETF9GSVJTVF9QTEFURk9STSArIF9ETF9QTEFURk9STVNfQ09VTlQpCitAQCAtNTUsNyArNjgsNyBAQAorICNlbmRpZgorIAorIC8qIEdldCBsaWJjIHZlcnNpb24gbnVtYmVyLiAgKi8KKy0jaW5jbHVkZSA8dmVyc2lvbi5oPgorKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisgCisgI2RlZmluZSBQQUNLQUdFIF9saWJjX2ludGxfZG9tYWlubmFtZQorIAorQEAgLTE1Miw4ICsxNjUsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbCisgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwsIDAgfQorIH07CisgCistI2RlZmluZSBQUk9DSU5GT19DTEFTUyBzdGF0aWMKKy0jaW5jbHVkZSA8ZGwtcHJvY2luZm8uYz4KKysvLyNkZWZpbmUgUFJPQ0lORk9fQ0xBU1Mgc3RhdGljCisrLy8jaW5jbHVkZSA8ZGwtcHJvY2luZm8uYz4KKyAKKyAvKiBTaG9ydCBkZXNjcmlwdGlvbiBvZiBwcm9ncmFtLiAgKi8KKyBzdGF0aWMgY29uc3QgY2hhciBkb2NbXSA9IE5fKCJDb25maWd1cmUgRHluYW1pYyBMaW5rZXIgUnVuIFRpbWUgQmluZGluZ3MuIik7CitAQCAtMjkxLDYgKzMwNCw3IEBAIHBhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXIKKyAgIHJldHVybiAwOworIH0KKyAKKysjZGVmaW5lIFJFUE9SVF9CVUdTX1RPICJtYWlsaW5nIGxpc3QgOiBwb2t5QHlvY3RvcHJvamVjdC5vcmciCisgLyogUHJpbnQgYnVnLXJlcG9ydGluZyBpbmZvcm1hdGlvbiBpbiB0aGUgaGVscCBtZXNzYWdlLiAgKi8KKyBzdGF0aWMgY2hhciAqCisgbW9yZV9oZWxwIChpbnQga2V5LCBjb25zdCBjaGFyICp0ZXh0LCB2b2lkICppbnB1dCkKK0BAIC0zMTUsNyArMzI5LDcgQEAgRm9yIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zLCBwbGVhc2UgcworIHN0YXRpYyB2b2lkCisgcHJpbnRfdmVyc2lvbiAoRklMRSAqc3RyZWFtLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisgeworLSAgZnByaW50ZiAoc3RyZWFtLCAibGRjb25maWcgJXMlc1xuIiwgUEtHVkVSU0lPTiwgVkVSU0lPTik7CisrICBmcHJpbnRmIChzdHJlYW0sICJsZGNvbmZpZyAoSGFja2VkIFBva3kgVmVyc2lvbilcbiIpOworICAgZnByaW50ZiAoc3RyZWFtLCBnZXR0ZXh0ICgiXAorIENvcHlyaWdodCAoQykgJXMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuXG5cCisgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk9cblwKK0BAIC0xMjMzLDYgKzEyNDcsNyBAQCBzZXRfaHdjYXAgKHZvaWQpCisgICAgIGh3Y2FwX21hc2sgPSBzdHJ0b3VsIChtYXNrLCBOVUxMLCAwKTsKKyB9CisgCisrY29uc3QgY2hhciBfbGliY19pbnRsX2RvbWFpbm5hbWVbXSA9ICJsaWJjIjsKKyAKKyBpbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCitJbmRleDogbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvcmVhZGxpYi5jCisrKysgbGRjb25maWctbmF0aXZlLTIuMTIuMS9yZWFkbGliLmMKK0BAIC0yMiw2ICsyMiw5IEBACisgICAgZGV2ZWxvcG1lbnQgdmVyc2lvbi4gIEJlc2lkZXMgdGhlIHNpbXBsaWZpY2F0aW9uLCBpdCBoYXMgYWxzbyBiZWVuCisgICAgbW9kaWZpZWQgdG8gcmVhZCBzb21lIG90aGVyIGZpbGUgZm9ybWF0cy4gICovCisgCisrI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKworICNpbmNsdWRlIDxhLm91dC5oPgorICNpbmNsdWRlIDxlbGYuaD4KKyAjaW5jbHVkZSA8ZXJyb3IuaD4KK0BAIC0zNSw3ICszOCw5IEBACisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPGdudS9saWItbmFtZXMuaD4KKyAKKy0jaW5jbHVkZSA8bGRjb25maWcuaD4KKysjaW5jbHVkZSAibGRjb25maWcuaCIKKysKKysjZGVmaW5lIF8obXNnKSBtc2cKKyAKKyAjZGVmaW5lIEVsZjMyX0NMQVNTIEVMRkNMQVNTMzIKKyAjZGVmaW5lIEVsZjY0X0NMQVNTIEVMRkNMQVNTNjQKK0luZGV4OiBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3hzdHJkdXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxkY29uZmlnLW5hdGl2ZS0yLjEyLjEub3JpZy94c3RyZHVwLmMKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL3hzdHJkdXAuYworQEAgLTE2LDE1ICsxNiwxMCBAQAorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisgCistI2lmZGVmIEhBVkVfQ09ORklHX0gKKy0jIGluY2x1ZGUgPGNvbmZpZy5oPgorLSNlbmRpZgorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVFJJTkdfSCB8fCBfTElCQworLSMgaW5jbHVkZSA8c3RyaW5nLmg+CistI2Vsc2UKKy0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KKy0jZW5kaWYKKyB2b2lkICp4bWFsbG9jIChzaXplX3QgbikgX19USFJPVzsKKyBjaGFyICp4c3RyZHVwIChjaGFyICpzdHJpbmcpIF9fVEhST1c7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEvbGRjb25maWdfYXV4LWNhY2hlX3BhdGhfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmM0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnX2F1eC1jYWNoZV9wYXRoX2ZpeC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ29taW5nIGZyb20gdGhpcyBidWc6IGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTExNDkKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4yMDExLzAzLzI5CisKKy0tLSBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xLm9yaWcvbGRjb25maWcuYwkKKysrKyBsZGNvbmZpZy1uYXRpdmUtMi4xMi4xL2xkY29uZmlnLmMJCitAQCAtMTM1OSwxNCArMTM1OSw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAgIGNvbnN0IGNoYXIgKmF1eF9jYWNoZV9maWxlID0gX1BBVEhfTERDT05GSUdfQVVYX0NBQ0hFOworICAgaWYgKG9wdF9jaHJvb3QpCistICAgIHsKKy0gICAgICBhdXhfY2FjaGVfZmlsZSA9IGNocm9vdF9jYW5vbiAob3B0X2Nocm9vdCwgYXV4X2NhY2hlX2ZpbGUpOworLSAgICAgIGlmIChhdXhfY2FjaGVfZmlsZSA9PSBOVUxMKQorLQllcnJvciAoRVhJVF9GQUlMVVJFLCBlcnJubywgXygiQ2FuJ3Qgb3BlbiBjYWNoZSBmaWxlICVzXG4iKSwKKy0JICAgICAgIF9QQVRIX0xEQ09ORklHX0FVWF9DQUNIRSk7CistICAgIH0KKysgICAgYXV4X2NhY2hlX2ZpbGUgPSBjaHJvb3RfY2Fub24gKG9wdF9jaHJvb3QsIGF1eF9jYWNoZV9maWxlKTsKKyAKKy0gIGlmICghIG9wdF9pZ25vcmVfYXV4X2NhY2hlKQorKyAgaWYgKCEgb3B0X2lnbm9yZV9hdXhfY2FjaGUgJiYgYXV4X2NhY2hlX2ZpbGUpCisgICAgIGxvYWRfYXV4X2NhY2hlIChhdXhfY2FjaGVfZmlsZSk7CisgICBlbHNlCisgICAgIGluaXRfYXV4X2NhY2hlICgpOworQEAgLTEzNzYsNyArMTM3MSw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgIGlmIChvcHRfYnVpbGRfY2FjaGUpCisgICAgIHsKKyAgICAgICBzYXZlX2NhY2hlIChjYWNoZV9maWxlKTsKKy0gICAgICBzYXZlX2F1eF9jYWNoZSAoYXV4X2NhY2hlX2ZpbGUpOworKyAgICAgIGlmIChhdXhfY2FjaGVfZmlsZSkKKysgICAgICAgIHNhdmVfYXV4X2NhY2hlIChhdXhfY2FjaGVfZmlsZSk7CisgICAgIH0KKyAKKyAgIHJldHVybiAwOworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9sZGNvbmZpZy1uYXRpdmVfMi4xMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2MwYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvbGRjb25maWctbmF0aXZlXzIuMTIuMS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkEgc3RhbmRhbG9uZSBuYXRpdmUgbGRjb25maWcgYnVpbGQiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1N9L2xkY29uZmlnLmM7ZW5kbGluZT0xNzttZDU9MWQxNWYyMDkzN2MwNTVjYjVkZTIzMjlhNGMwNTQzOTkiCisKK1NSQ19VUkkgPSAiZmlsZTovL2xkY29uZmlnLW5hdGl2ZS0yLjEyLjEudGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9sZGNvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9sZGNvbmZpZ19hdXgtY2FjaGVfcGF0aF9maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMzJhbmQ2NGJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmRpYW4tbmVzc19oYW5kbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mbGFnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmRpYW5lc3MtaGVhZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkY29uZmlnLWRlZmF1bHQtdG8tYWxsLW11bHRpbGliLWRpcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuLW5lc3NfaGFuZGxpbmdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC02NC1iaXQtZmxhZy1mb3ItRUxGNjQtZW50cmllcy5wYXRjaCBcCisiCisKK1BSID0gInIyIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1B9OiIKKworaW5oZXJpdCBuYXRpdmUKKworUyA9ICIke1dPUktESVJ9LyR7UE59LSR7UFZ9IgorCitkb19jb21waWxlICgpIHsKKwkkQ0MgbGRjb25maWcuYyAtc3RkPWdudTk5IGNocm9vdF9jYW5vbi5jIHhtYWxsb2MuYyB4c3RyZHVwLmMgY2FjaGUuYyByZWFkbGliLmMgIC1JLiBkbC1jYWNoZS5jIC1vIGxkY29uZmlnCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0vCisJaW5zdGFsbCBsZGNvbmZpZyAke0R9LyR7YmluZGlyfS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2Z1bmNzIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjODUzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCkBAIC0wLDAgKzEsNDc0IEBACithNjRsCithYnMKK2FjY2VzcworX19hZGp0aW1leAorYWxhcm0KK2FscGhhc29ydAorYXJnel9hcHBlbmQKK19fYXJnel9jb3VudAorYXJnel9jcmVhdGVfc2VwCithcmd6X2luc2VydAorX19hcmd6X25leHQKK2FyZ3pfbmV4dAorX19hcmd6X3N0cmluZ2lmeQorYXJnel9zdHJpbmdpZnkKK2FzcHJpbnRmCithdGV4aXQKK2F0b2YKK2F0b2kKK2JjbXAKK2Jjb3B5CitiaW5kcmVzdnBvcnQKK2JpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0CitidG93YworYnplcm8KK2NhbGxvYworY2Fub25pY2FsaXplX2ZpbGVfbmFtZQorY2F0Z2V0cworY2ZnZXRvc3BlZWQKK2Nmc2V0aXNwZWVkCitjZnNldHNwZWVkCitjaG1vZAorY2hvd24KK2Nocm9vdAorY2xvY2sKK2Nsb3NlCitjbG9zZWRpcgorY2xvc2Vsb2cKK2NvbmZzdHIKK2Nvbm5lY3QKK2RhZW1vbgorZGNnZXR0ZXh0CitkaWZmdGltZQorZGlyZmQKK2Rpcm5hbWUKK2RuZ2V0dGV4dAorZHVwMgorZWN2dAorZW5kZ3JlbnQKK2VuZG1udGVudAorZW5kcHdlbnQKK2VuZHV0ZW50CitlbmR1dHhlbnQKK2Vwb2xsX2N0bAorZXJyCitldGhlcl9ob3N0dG9uCitldGhlcl9udG9ob3N0CitldWlkYWNjZXNzCitleGVjdgorZmNoZGlyCitmY2htb2QKK2ZjaG1vZGF0CitmY2hvd24KK2ZjaG93bmF0CitmY250bAorZmN2dAorZmRhdGFzeW5jCitmZG9wZW5kaXIKK2Zlb2ZfdW5sb2NrZWQKK2ZnZXRzX3VubG9ja2VkCitmZ2V0eGF0dHIKK2Zpbml0ZQorZmxpc3R4YXR0cgorZmxvY2sKK2Zsb2NrZmlsZQorZm5tYXRjaAorZm9yaworZnBhdGhjb25mCitfX2ZwZW5kaW5nCitmcHJpbnRmCitmcmVlCitmcmVlYWRkcmluZm8KK2ZyZWVpZmFkZHJzCitmc2Vla28KK19fZnNldGxvY2tpbmcKK2ZzZXR4YXR0cgorZnN0YXQ2NAorZnN0YXQKK2ZzdGF0ZnMKK2ZzeW5jCitmdGVsbG8KK2Z0aW1lCitmdHJ1bmNhdGUKK2Z1bmxvY2tmaWxlCitmdXRpbWVzCitmdXRpbWVzYXQKK2dhaV9zdHJlcnJvcgorZ2N2dAorZ2V0YWRkcmluZm8KK2dldGNfdW5sb2NrZWQKK2dldGN3ZAorZ2V0ZGVsaW0KK2dldGRvbWFpbm5hbWUKK2dldGR0YWJsZXNpemUKK2dldGVnaWQKK2dldGVudgorZ2V0ZXVpZAorZ2V0Z2lkCitnZXRncmVudAorZ2V0Z3JlbnRfcgorZ2V0Z3JnaWRfcgorZ2V0Z3JuYW0KK2dldGdybmFtX3IKK2dldGdyb3VwbGlzdAorZ2V0Z3JvdXBzCitnZXRob3N0YnlhZGRyX3IKK2dldGhvc3RieW5hbWUyCitnZXRob3N0YnluYW1lCitnZXRob3N0YnluYW1lX3IKK2dldGhvc3RlbnQKK2dldGhvc3RpZAorZ2V0aG9zdG5hbWUKK2dldGlmYWRkcnMKK2dldGxpbmUKK2dldGxvYWRhdmcKK2dldG1udGVudAorZ2V0bXNnCitnZXRuYW1laW5mbworZ2V0bmV0YnlhZGRyX3IKK2dldG5ldGdyZW50X3IKK2dldG9wdAorZ2V0b3B0X2xvbmcKK2dldG9wdF9sb25nX29ubHkKK2dldHBhZ2VzaXplCitnZXRwYXNzCitnZXRwZWVybmFtZQorZ2V0cGdycAorZ2V0cGlkCitnZXRwcGlkCitnZXRwcm90b2VudF9yCitnZXRwd2VudAorZ2V0cHdlbnRfcgorZ2V0cHduYW0KK2dldHB3bmFtX3IKK2dldHB3dWlkCitnZXRwd3VpZF9yCitnZXRyZXN1aWQKK2dldHJsaW1pdAorZ2V0cnVzYWdlCitnZXRzZXJ2YnluYW1lCitnZXRzZXJ2YnluYW1lX3IKK2dldHNlcnZieXBvcnRfcgorZ2V0c2VydmVudAorZ2V0c2VydmVudF9yCitnZXRzcG5hbQorZ2V0c3BuYW1fcgorZ2V0dGltZW9mZGF5CitnZXR0dHllbnQKK2dldHR0eW5hbQorZ2V0dWlkCitnZXR1c2Vyc2hlbGwKK2dldHV0ZW50CitnZXR1dGlkCitnZXR1dGxpbmUKK2dldHV0bXAKK2dldHV0bXB4CitnZXR1dHhlbnQKK2dldHV0eGlkCitnZXR1dHhsaW5lCitnZXR3ZAorZ2V0eGF0dHIKK2dsb2IKK2dtdGltZQorZ210aW1lX3IKK2dyYW50cHQKK2dyb3VwX21lbWJlcgoraGVycm9yCitoc3RyZXJyb3IKK2ljb252CitpY29udl9vcGVuCitpZl9mcmVlbmFtZWluZGV4CitpZl9pbmRleHRvbmFtZQoraWZfbmFtZWluZGV4CitpZl9uYW1ldG9pbmRleAoraW5kZXgKK2luZXRfYWRkcgoraW5ldF9hdG9uCitpbmV0X250b2EKK2luZXRfbnRvcAoraW5ldF9wdG9uCitpbml0Z3JvdXBzCitpbm5ldGdyCitpcnVzZXJvaworaXNhc2NpaQoraXNhdHR5Citpc2JsYW5rCitpc2dyYXBoCitpc2luZgoraXNuYW4KK2lzcHJpbnQKK2lzc3BhY2UKK2lzd2FsbnVtCitpc3djbnRybAoraXN3Y3R5cGUKK2lzd3ByaW50Citpc3dzcGFjZQoraXN3dXBwZXIKK2lzeGRpZ2l0CitraWxsCitraWxscGcKK2xjaG93bgorbGNrcHdkZgorbGdldHhhdHRyCitsaW5rCitsaXN0eGF0dHIKK2xsaXN0eGF0dHIKK2xvY2FsdGltZQorbG9jYWx0aW1lX3IKK2xvY2tmCitscmFuZDQ4Citsc2VhcmNoCitsc2VlazY0Citsc2V0eGF0dHIKK2xzdGF0CittYWxsaW5mbworbWFsbG9jCittYmxlbgorbWJybGVuCittYnJ0b3djCittYnNpbml0CittYnNydG93Y3MKK21idG93YworbWVtYWxpZ24KK21lbWNocgorbWVtY21wCittZW1jcHkKK21lbW1vdmUKK21lbXBjcHkKK21lbXJjaHIKK21lbXNldAorbWtkaXIKK21rZGlyYXQKK21rZHRlbXAKK21rZmlmbworbWtub2QKK21rc3RlbXA2NAorbWtzdGVtcAorbWt0aW1lCittbG9jaworbW1hcAorbXRyYWNlCittdW5sb2NrCittdW5tYXAKK25hbm9zbGVlcAorbmljZQorbmxfbGFuZ2luZm8KK250cF9hZGp0aW1lCitudHBfZ2V0dGltZQorX29ic3RhY2tfZnJlZQorb25fZXhpdAorb3BlbjY0CitvcGVuCitvcGVuYXQKK29wZW5kaXIKK29wZW5sb2cKK3BhdGhjb25mCitwaXBlCitwb2xsCitwb3BlbgorcG9zaXhfbWVtYWxpZ24KK3ByY3RsCitwcmVhZAorcHJpbnRmCitfX3Byb2duYW1lCitwc2VsZWN0CitwdGhyZWFkX211dGV4X2xvY2sKK3B0c25hbWUKK3B1dGVudgorcHV0Z3JlbnQKK3B1dHB3ZW50CitwdXRzcGVudAorcHV0dXRsaW5lCitwdXR1dHhsaW5lCitwdXR3YworcHdyaXRlCitxc29ydAorcmFpc2UKK3JhbmQKK3JhbmRvbQorcmFuZF9yCityZWFkCityZWFkZGlyCityZWFkZGlyX3IKK3JlYWRsaW5rCityZWFsbG9jCityZWFscGF0aAorcmVfY29tcAorcmVjdm1zZworcmVfZXhlYworcmVnY29tcAorcmVnZXhlYworcmVtb3ZlCityZW5hbWUKK3JlX3NlYXJjaAorcm1kaXIKK3JwbWF0Y2gKK3JyZXN2cG9ydF9hZgorcnVzZXJvaworcnVzZXJva19hZgorc2Jyaworc2NhbmRpcgorc2NoZWRfc2V0c2NoZWR1bGVyCitzY2hlZF95aWVsZAorX19zZWN1cmVfZ2V0ZW52CitzZWxlY3QKK3NlbWN0bAorc2VtZ2V0CitzZW5kbXNnCitzZXRidWYKK3NldGJ1ZmZlcgorc2V0ZWdpZAorc2V0ZW52CitzZXRldWlkCitzZXRnaWQKK3NldGdyb3Vwcworc2V0aG9zdG5hbWUKK3NldGl0aW1lcgorX3NldGptcAorc2V0am1wCitzZXRsaW5lYnVmCitzZXRsb2NhbGUKK3NldG1udGVudAorc2V0cGdpZAorc2V0cGdycAorc2V0cHJpb3JpdHkKK3NldHJlZ2lkCitzZXRyZXNnaWQKK3NldHJlc3VpZAorc2V0cmV1aWQKK3NldHJsaW1pdAorc2V0c2lkCitzZXRzb2Nrb3B0CitzZXR0aW1lb2ZkYXkKK3NldHVpZAorc2V0dXRlbnQKK3NldHV0eGVudAorc2V0dmJ1Zgorc2V0eGF0dHIKK3NnZXRzcGVudAorc2htYXQKK3NobWN0bAorc2htZHQKK3NobWdldAorc2h1dGRvd24KK3NpZ2FjdGlvbgorc2lnYWRkc2V0CitzaWdhbHRzdGFjaworc2lnYmxvY2sKK3NpZ2VtcHR5c2V0CitzaWdob2xkCitzaWdpbnRlcnJ1cHQKK3NpZ25hbAorc2lncHJvY21hc2sKK3NpZ3NldAorc2lnc2V0bWFzaworc2lnc3RhY2sKK3NpZ3N1c3BlbmQKK3NpZ3ZlYworc25wcmludGYKK3NvY2tldAorc29ja2V0cGFpcgorc3ByaW50Zgorc3JhbmQ0OAorc3JhbmQKK3NyYW5kb20KK3NzY2FuZgorc3RhdAorc3RhdGZzCitzdGF0dmZzCitzdGltZQorc3RwY3B5CitzdHJjYXNlY21wCitzdHJjYXNlc3RyCitzdHJjaHIKK3N0cmNocm51bAorc3RyY21wCitzdHJjc3BuCitzdHJkdXAKK3N0cmVycm9yCitzdHJlcnJvcl9yCitzdHJmdGltZQorc3RybGVuCitzdHJuY2FzZWNtcAorc3RybmNtcAorc3RybmR1cAorc3Rybmxlbgorc3RycGJyaworc3RycHRpbWUKK3N0cnJjaHIKK3N0cnNlcAorc3Ryc2lnbmFsCitzdHJzcG4KK3N0cnN0cgorc3RydG9kCitzdHJ0b2ltYXgKK3N0cnRva19yCitzdHJ0b2wKK3N0cnRvbGwKK3N0cnRvdWwKK3N0cnRvdWxsCitzdHJ0b3VtYXgKK3N0cnZlcnNjbXAKK3N0cnhmcm0KK3N5bWxpbmsKK3N5bmMKK3N5c2NvbmYKK3N5c2N0bAorc3lzaW5mbworc3lzbG9nCitfc3lzX3NpZ2xpc3QKK3N5c19zaWdsaXN0CitzeXN0ZW0KK3RjZ2V0YXR0cgordGNnZXRwZ3JwCit0Y3NldGF0dHIKK3Rjc2V0cGdycAordGltZQordGltZWdtCit0aW1lcwordGltZXpvbmUKK3RtcG5hbQordG93bG93ZXIKK3Rvd3VwcGVyCit0cnVuY2F0ZQordHNlYXJjaAordHR5bmFtZQordHpzZXQKK3VsaW1pdAordW1hc2sKK3VuYW1lCit1bmxpbmsKK3Vuc2V0ZW52Cit1bnNoYXJlCit1cGR3dG1wCit1cGR3dG1weAordXNsZWVwCit1c3RhdAordXRpbWUKK3V0aW1lcwordXRtcG5hbWUKK3V0bXB4bmFtZQordmFsbG9jCit2YXNwcmludGYKK3ZlcnJ4Cit2Zm9yawordmZwcmludGYKK3Zmc2NhbmYKK3ZoYW5ndXAKK3ZwcmludGYKK3ZzbnByaW50ZgordnNwcmludGYKK3dhaXQzCit3YWl0NAord2FpdHBpZAord2NydG9tYgord2NzY29sbAord2NzZHVwCit3Y3NsZW4KK3djdG9iCit3Y3RvbWIKK3djdHlwZQord2N3aWR0aAord21lbWNocgord21lbWNweQord21lbXBjcHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOWFiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9nbGliYy9zaXRlX2NvbmZpZy9oZWFkZXJzCkBAIC0wLDAgKzEsMTU2IEBACithaW8uaAorYWxsb2NhLmgKK2FyZ3ouaAorYXJwYS9pbmV0LmgKK2FycGEvbmFtZXNlci5oCithc20vYnl0ZW9yZGVyLmgKK2FzbS9pb2N0bHMuaAorYXNtL3BhZ2UuaAorYXNtL3R5cGVzLmgKK2Fzc2VydC5oCitieXRlc3dhcC5oCitjcnlwdC5oCitjdHlwZS5oCitkaXJlbnQuaAorZGxmY24uaAorZWxmLmgKK2VuZGlhbi5oCitlcnIuaAorZXJybm8uaAorZXhlY2luZm8uaAorZmNudGwuaAorZmVhdHVyZXMuaAorZmxvYXQuaAorZnN0YWIuaAorZnR3LmgKK2dldG9wdC5oCitnbG9iLmgKK2dycC5oCitpY29udi5oCitpZmFkZHJzLmgKK2ludHR5cGVzLmgKK2xhbmdpbmZvLmgKK2xhc3Rsb2cuaAorbGliZ2VuLmgKK2xpYmludGwuaAorbGltaXRzLmgKK2xpbnV4L2NhcGFiaWxpdHkuaAorbGludXgvZmQuaAorbGludXgvZnMuaAorbGludXgvaGF5ZXNlc3AuaAorbGludXgvaGRyZWcuaAorbGludXgvaWNtcC5oCitsaW51eC9pbjYuaAorbGludXgvam95c3RpY2suaAorbGludXgvcHRyYWNlLmgKK2xpbnV4L3NlcmlhbC5oCitsaW51eC9zb255cGkuaAorbGludXgvdW5pc3RkLmgKK2xpbnV4L3V0c25hbWUuaAorbGludXgvdmVyc2lvbi5oCitsb2NhbGUuaAorbWFsbG9jLmgKK21hdGguaAorbWNoZWNrLmgKK21lbW9yeS5oCittbnRlbnQuaAorbXF1ZXVlLmgKK25ldGRiLmgKK25ldC9pZi5oCituZXRpbmV0L2V0aGVyLmgKK25ldGluZXQvaW4uaAorbmV0aW5ldC9pcDYuaAorbmV0aW5ldC9pcC5oCituZXRpbmV0L3RjcC5oCituZXRpbmV0L3VkcC5oCituZXRpcHgvaXB4LmgKK25ldC9yb3V0ZS5oCitwYXRocy5oCitwb2xsLmgKK3B0aHJlYWQuaAorcHR5LmgKK3B3ZC5oCityZWdleC5oCityZXNvbHYuaAorcnBjL3JwYy5oCitycGMvdHlwZXMuaAorc2NoZWQuaAorc2NzaS9zY3NpLmgKK3NlYXJjaC5oCitzZW1hcGhvcmUuaAorc2V0am1wLmgKK3NndHR5LmgKK3NoYWRvdy5oCitzaWduYWwuaAorc3RkYXJnLmgKK3N0ZGJvb2wuaAorc3RkYworc3RkZGVmLmgKK3N0ZGludC5oCitzdGRpby5oCitzdGRsaWIuaAorc3RyaW5nLmgKK3N0cmluZ3MuaAorc3Ryb3B0cy5oCitzeXMvYml0eXBlcy5oCitzeXMvY2RlZnMuaAorc3lzL2Rpci5oCitzeXMvZXBvbGwuaAorc3lzZXhpdHMuaAorc3lzL2ZjbnRsLmgKK3N5cy9maWxlLmgKK3N5cy9mc3VpZC5oCitzeXMvaW9jdGwuaAorc3lzL2lwYy5oCitzeXNsb2cuaAorc3lzL21tYW4uaAorc3lzL21vdW50LmgKK3N5cy9tdGlvLmgKK3N5cy9wYXJhbS5oCitzeXMvcG9sbC5oCitzeXMvcHJjdGwuaAorc3lzL3B0cmFjZS5oCitzeXMvcXVldWUuaAorc3lzL3JlZy5oCitzeXMvcmVzb3VyY2UuaAorc3lzL3NlbGVjdC5oCitzeXMvc2VtLmgKK3N5cy9zaG0uaAorc3lzL3NpZ25hbC5oCitzeXMvc29ja2V0LmgKK3N5cy9zb2NrZXR2YXIuaAorc3lzL3NvdW5kY2FyZC5oCitzeXMvc3RhdGZzLmgKK3N5cy9zdGF0LmgKK3N5cy9zdGF0dmZzLmgKK3N5cy9zdHJvcHRzLmgKK3N5cy9zd2FwLmgKK3N5cy9zeXNjdGwuaAorc3lzL3N5c2luZm8uaAorc3lzL3N5c21hY3Jvcy5oCitzeXMvdGVybWlvcy5oCitzeXMvdGltZWIuaAorc3lzL3RpbWUuaAorc3lzL3RpbWVzLmgKK3N5cy90aW1leC5oCitzeXMvdHlwZXMuaAorc3lzL3Vpby5oCitzeXMvdW4uaAorc3lzL3VuaXN0ZC5oCitzeXMvdXNlci5oCitzeXMvdXRzbmFtZS5oCitzeXMvdmZzLmgKK3N5cy93YWl0LmgKK3Rlcm1pby5oCit0ZXJtaW9zLmgKK3RpbWUuaAordHR5ZW50LmgKK3VsaW1pdC5oCit1bmlzdGQuaAordXN0YXQuaAordXRpbWUuaAordXRtcC5oCit1dG1weC5oCit2YWx1ZXMuaAord2NoYXIuaAord2N0eXBlLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL3R5cGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvZ2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4YmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2dsaWJjL3NpdGVfY29uZmlnL3R5cGVzCkBAIC0wLDAgKzEsMjEgQEAKK2NoYXIKK2NoYXIgKgorZG91YmxlCitmbG9hdAoraW50Citsb25nCitsb25nIGRvdWJsZQorbG9uZyBpbnQKK2xvbmcgbG9uZworbG9uZyBsb25nIGludAorc2hvcnQKK3Nob3J0IGludAorc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGNoYXIKK3Vuc2lnbmVkIGludAordW5zaWduZWQgbG9uZwordW5zaWduZWQgbG9uZyBpbnQKK3Vuc2lnbmVkIGxvbmcgbG9uZyBpbnQKK3Vuc2lnbmVkIHNob3J0Cit1bnNpZ25lZCBzaG9ydCBpbnQKK3ZvaWQgKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvOTlfbmV0d29yayBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkNTg5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzLzk5X25ldHdvcmsKQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDc1NSAvcnVuL25ldHdvcmsgbm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vZmlsZXMvZGVmbjItYy1tYW4tZG9uLXQtcmVseS1vbi1kcGtnLWFyY2hpdGVjdHVyZS10by1zZXQtYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0ZDk1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSA3YWY5ZGI3NDg5NzRjYjNhMmM2ZWY4ZjllMDNkN2RiMWY5ZjhlZTE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDYgQXVnIDIwMTQgMTQ6NTQ6MTIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGRlZm4yW2N8bWFuXTogZG9uJ3QgcmVseSBvbiBkcGtnLWFyY2hpdGVjdHVyZSB0byBzZXQgYXJjaAorCitJbiB5b2N0byB3ZSdsbCBhbHdheXMgYmUgY3Jvc3MgY29tcGlsaW5nLCBhbmQgd2UnbGwgYWx3YXlzCitiZSBidWlsZGluZyBvbiBsaW51eCBmb3IgbGludXggKHZzLiAqQlNELCBodXJkLCBldGMuKQorCitXaXRob3V0IHRoaXMgdGhlIGFyY2ggaXMgbm90IGRldGVjdGVkLCBidXQgaXQgZG9lc24ndCBlcnJvcgorb3V0LCBhbmQgaGVuY2UgeW91IGdldCB1c2VsZXNzIGJpbmFyaWVzIHRoYXQgZG9uJ3Qga25vdyBhbnkKK2FyY2ggc3BlY2lmaWMgbWV0aG9kcywgYW5kIHRoZSBlbmQgcmVzdWx0IHdpbGwgYmUgc3RyYW5nZW5lc3MKK2xpa2UgdGhlIGxvb3BiYWNrIGRldmljZSBub3QgYmVpbmcgY29uZmlndXJlZC9lbmFibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEdvcnRtYWtlciA8cGF1bC5nb3J0bWFrZXJAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRlZm4yYy5wbCAgIHwgNiArKystLS0KKyBkZWZuMm1hbi5wbCB8IDYgKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kZWZuMmMucGwgYi9kZWZuMmMucGwKK2luZGV4IGM0NDlkZTJmM2QxYy4uMzg4NDVlMzc0Yzc2IDEwMDc1NQorLS0tIGEvZGVmbjJjLnBsCisrKysgYi9kZWZuMmMucGwKK0BAIC0yLDkgKzIsOSBAQAorIAorIHVzZSBzdHJpY3Q7CisgCistbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSBgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9BUkNIX09TYDsKKy0KKy0kREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrI215ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CisrIyRERUJfSE9TVF9BUkNIX09TID1+IHMvXG4vLzsKKytteSAkREVCX0hPU1RfQVJDSF9PUyA9ImxpbnV4IjsKKyAKKyAjIGRlY2xhcmF0aW9ucworIG15ICRhZGRyZXNzX2ZhbWlseSA9ICIiOworZGlmZiAtLWdpdCBhL2RlZm4ybWFuLnBsIGIvZGVmbjJtYW4ucGwKK2luZGV4IDZkZGNmZGQ0ZmU2OC4uYzljNGRkMDQ2NTk3IDEwMDc1NQorLS0tIGEvZGVmbjJtYW4ucGwKKysrKyBiL2RlZm4ybWFuLnBsCitAQCAtMiw5ICsyLDkgQEAKKyAKKyB1c2Ugc3RyaWN0OworIAorLW15ICRERUJfSE9TVF9BUkNIX09TID0gYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSF9PU2A7CistCistJERFQl9IT1NUX0FSQ0hfT1MgPX4gcy9cbi8vOworKyNteSAkREVCX0hPU1RfQVJDSF9PUyA9IGBkcGtnLWFyY2hpdGVjdHVyZSAtcURFQl9IT1NUX0FSQ0hfT1NgOworKyMkREVCX0hPU1RfQVJDSF9PUyA9fiBzL1xuLy87CisrbXkgJERFQl9IT1NUX0FSQ0hfT1MgPSAibGludXgiOworIAorICMgZGVjbGFyYXRpb25zCisgbXkgJGxpbmU7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmYzNTJlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2lmdXBkb3duL2ZpbGVzL2luZXQtNi0uZGVmbi1maXgtaW52ZXJ0ZWQtY2hlY2tzLWZvci1sb29wYmFjay5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorRnJvbSA3NDE1MmFjNzRhM2UxZWEwZjNiZTI5MmFhMWVlY2E1YWQxZmU2OWMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBHb3J0bWFrZXIgPHBhdWwuZ29ydG1ha2VyQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDYgQXVnIDIwMTQgMTU6MTI6MTEgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGluZXRbNl0uZGVmbjogZml4IGludmVydGVkIGNoZWNrcyBmb3IgbG9vcGJhY2sKKworQ29tcGFyZWQgdG8gdGhlIGh1cmQgbGluay5kZWZuIGZvciBsb29wYmFjaywgd2Ugc2VlIHRoZXNlCithcmUgaW52ZXJ0ZWQsIG1lYW5pbmcgdGhhdCB5b3Ugd291bGQgb25seSBiZSBhYmxlIHRvIGNvbmZpZ3VyZQorYSBsb29wYmFjayBkZXZpY2UgdGhhdCB3YXMgX25vdF8gbmFtZWQgImxvIiAodW5saWtlbHkgdG8gZXhpc3QpLgorCitUaGUgcmVzdWx0IHdhcyB0aGF0IHdlJ2QgdXBkYXRlIC9ydW4vbmV0d29yay9pZnN0YXRlIGZvciAibG8iCitidXQgbmV2ZXIgYWN0dWFsbHkgZG8gYW55dGhpbmcgZm9yIHVwL2Rvd24sIGFzIHNob3duIGJlbG93OgorCityb290QGxvY2FsaG9zdDp+IyBpZmNvbmZpZyAtcworSWZhY2UgICBNVFUgTWV0ICAgUlgtT0sgUlgtRVJSIFJYLURSUCBSWC1PVlIgICAgVFgtT0sgVFgtRVJSIFRYLURSUCBUWC1PVlIgRmxnCitldGgwICAgICAgIDE1MDAgMCAgIDc3MzYzMjkgICAgICAwICAgMjAxNiAwICAgICAgIDUyODk0MjIgICAgICAwICAgICAgMCAgICAgIDAgQk1SVQorbG8gICAgICAgIDY1NTM2IDAgICAgICAgIDE4ICAgICAgMCAgICAgIDAgMCAgICAgICAgICAgIDE4ICAgICAgMCAgICAgIDAgICAgICAwIExSVQorcm9vdEBsb2NhbGhvc3Q6fiMgaWZkb3duIGxvCityb290QGxvY2FsaG9zdDp+IyBlY2hvICQ/CiswCityb290QGxvY2FsaG9zdDp+IyBpZmNvbmZpZyAtcworSWZhY2UgICBNVFUgTWV0ICAgUlgtT0sgUlgtRVJSIFJYLURSUCBSWC1PVlIgICAgVFgtT0sgVFgtRVJSIFRYLURSUCBUWC1PVlIgRmxnCitldGgwICAgICAgIDE1MDAgMCAgIDc3MzY0MDYgICAgICAwICAgMjAxNiAwICAgICAgIDUyODk0NTUgICAgICAwICAgICAgMCAgICAgIDAgQk1SVQorbG8gICAgICAgIDY1NTM2IDAgICAgICAgIDE4ICAgICAgMCAgICAgIDAgMCAgICAgICAgICAgIDE4ICAgICAgMCAgICAgIDAgICAgICAwIExSVQorcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgbG8gZG93bgorcm9vdEBsb2NhbGhvc3Q6fiMgaWZjb25maWcgLXMKK0lmYWNlICAgTVRVIE1ldCAgIFJYLU9LIFJYLUVSUiBSWC1EUlAgUlgtT1ZSICAgIFRYLU9LIFRYLUVSUiBUWC1EUlAgVFgtT1ZSIEZsZworZXRoMCAgICAgICAxNTAwIDAgICA3NzM2NDc0ICAgICAgMCAgIDIwMTYgMCAgICAgICA1Mjg5NDgxICAgICAgMCAgICAgIDAgICAgICAwIEJNUlUKK3Jvb3RAbG9jYWxob3N0On4jCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorLS0tCisgaW5ldC5kZWZuICB8IDEyICsrKysrKy0tLS0tLQorIGluZXQ2LmRlZm4gfCAgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9pbmV0LmRlZm4gYi9pbmV0LmRlZm4KK2luZGV4IGIxNzZhYjRlZDAzZS4uNWZkZmIxNGEwZTFjIDEwMDY0NAorLS0tIGEvaW5ldC5kZWZuCisrKysgYi9pbmV0LmRlZm4KK0BAIC02LDEwICs2LDEwIEBAIG1ldGhvZCBsb29wYmFjaworICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byBkZWZpbmUgdGhlIElQdjQgbG9vcGJhY2sgaW50ZXJmYWNlLgorIAorICAgdXAKKy0gICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgdXAgaWYgKCFpZmFjZV9pc19sbygpKQorKyAgICBpcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCBpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyAgIGRvd24KKy0gICAgaXAgbGluayBzZXQgZGV2ICVpZmFjZSUgZG93biBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIGlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KK0BAIC0yMTIsMTEgKzIxMiwxMSBAQCBtZXRob2QgbG9vcGJhY2sKKyAKKyAgIHVwCisgICAgIGlmY29uZmlnICVpZmFjZSUgMTI3LjAuMC4xIHVwIFwKKy0JaWYgKCFpZmFjZV9pc19sbygpKQorKwlpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyAgIGRvd24KKyAgICAgaWZjb25maWcgJWlmYWNlJSBkb3duIFwKKy0JaWYgKCFpZmFjZV9pc19sbygpKQorKwlpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyBtZXRob2Qgc3RhdGljCisgICBkZXNjcmlwdGlvbgorQEAgLTM3MSwxMSArMzcxLDExIEBAIG1ldGhvZCBsb29wYmFjaworIAorICAgdXAKKyAgICAgaW5ldHV0aWxzLWlmY29uZmlnIC0taW50ZXJmYWNlICVpZmFjZSUgLS1hZGRyZXNzIDEyNy4wLjAuMSAtLXVwIFwKKy0JaWYgKCFpZmFjZV9pc19sbygpKQorKwlpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyAgIGRvd24KKyAgICAgaW5ldHV0aWxzLWlmY29uZmlnIC0taW50ZXJmYWNlICVpZmFjZSUgLS1kb3duIFwKKy0JaWYgKCFpZmFjZV9pc19sbygpKQorKwlpZiAoaWZhY2VfaXNfbG8oKSkKKyAKKyBtZXRob2Qgc3RhdGljCisgICBkZXNjcmlwdGlvbgorZGlmZiAtLWdpdCBhL2luZXQ2LmRlZm4gYi9pbmV0Ni5kZWZuCitpbmRleCAwOTMyNTUzOWNkMDEuLjRkZjY0YWZmMzhjYyAxMDA2NDQKKy0tLSBhL2luZXQ2LmRlZm4KKysrKyBiL2luZXQ2LmRlZm4KK0BAIC0zMywxMSArMzMsMTEgQEAgbWV0aG9kIGxvb3BiYWNrCisgICBkZXNjcmlwdGlvbgorICAgICBUaGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byBkZWZpbmUgdGhlIElQdjYgbG9vcGJhY2sgaW50ZXJmYWNlLgorICAgdXAKKy0gICAgLWlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIHVwIDI+L2Rldi9udWxsIGlmICghaWZhY2VfaXNfbG8oKSkKKy0gICAgLWlwIGFkZHIgYWRkIGRldiAlaWZhY2UlIDo6MSAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCisrICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSB1cCAyPi9kZXYvbnVsbCBpZiAoaWZhY2VfaXNfbG8oKSkKKysgICAgLWlwIGFkZHIgYWRkIGRldiAlaWZhY2UlIDo6MSAyPi9kZXYvbnVsbCBpZiAoaWZhY2VfaXNfbG8oKSkKKyAgIGRvd24KKy0gICAgLWlwIGFkZHIgZGVsIGRldiAlaWZhY2UlIDo6MSAyPi9kZXYvbnVsbCBpZiAoIWlmYWNlX2lzX2xvKCkpCistICAgIC1pcCBsaW5rIHNldCBkZXYgJWlmYWNlJSBkb3duIDI+L2Rldi9udWxsIGlmICghaWZhY2VfaXNfbG8oKSkKKysgICAgLWlwIGFkZHIgZGVsIGRldiAlaWZhY2UlIDo6MSAyPi9kZXYvbnVsbCBpZiAoaWZhY2VfaXNfbG8oKSkKKysgICAgLWlwIGxpbmsgc2V0IGRldiAlaWZhY2UlIGRvd24gMj4vZGV2L251bGwgaWYgKGlmYWNlX2lzX2xvKCkpCisgCisgbWV0aG9kIHN0YXRpYworICAgZGVzY3JpcHRpb24KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vaWZ1cGRvd25fMC43LjQ4LjEuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pZnVwZG93bi9pZnVwZG93bl8wLjcuNDguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGViODdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaWZ1cGRvd24vaWZ1cGRvd25fMC43LjQ4LjEuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJpZnVwZG93bjogYmFzaWMgaWZ1cCBhbmQgaWZkb3duIHVzZWQgYnkgaW5pdHNjcmlwdHMiCitERVNDUklQVElPTiA9ICJIaWdoIGxldmVsIHRvb2xzIHRvIGNvbmZpZ3VyZSBuZXR3b3JrIGludGVyZmFjZXMgXAorVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB0b29scyBpZnVwIGFuZCBpZmRvd24gd2hpY2ggbWF5IGJlIHVzZWQgdG8gXAorY29uZmlndXJlIChvciwgcmVzcGVjdGl2ZWx5LCBkZWNvbmZpZ3VyZSkgbmV0d29yayBpbnRlcmZhY2VzLCBiYXNlZCBvbiBcCit0aGUgZmlsZSAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcy4iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL2FyY2hpdmUudWJ1bnR1LmNvbS91YnVudHUvcG9vbC9tYWluL2kvaWZ1cGRvd24vaWZ1cGRvd25fMC43LjQ4LjF1YnVudHU1LnRhci5neiBcCisJICAgZmlsZTovL2RlZm4yLWMtbWFuLWRvbi10LXJlbHktb24tZHBrZy1hcmNoaXRlY3R1cmUtdG8tc2V0LWEucGF0Y2ggXAorCSAgIGZpbGU6Ly9pbmV0LTYtLmRlZm4tZml4LWludmVydGVkLWNoZWNrcy1mb3ItbG9vcGJhY2sucGF0Y2ggXAorCSAgIGZpbGU6Ly85OV9uZXR3b3JrIFwKKwkgICIKKworRVhUUkFfT0VNQUtFID0gIiIKKworIyBuZWVkZWQgc28gd2UgZG9uJ3QgZ2V0IGRlZmF1bHQgUz0iJHtXT1JLRElSfS9pZnVwZG93bi0ke1BWfSIKK1MgPSAiJHtXT1JLRElSfS9pZnVwZG93bi0ke1BWfXVidW50dTUiCisKKworaW5oZXJpdCB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2RvX2NvbXBpbGUgKCkgeworCWNobW9kIGErcnggKi5wbCAqLnNoCisJb2VfcnVubWFrZSAnQ0M9JHtDQ30nICJDRkxBR1M9JHtDRkxBR1N9IC1XYWxsIC1XIC1EJ0lGVVBET1dOX1ZFUlNJT049XCIke1BWfVwiJyIKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggXAorCQkgICR7RH0ke21hbmRpcn0vbWFuNSBcCisJCSAgJHtEfSR7YmFzZV9zYmluZGlyfQorCisJIyBJZiB2b2xhdGlsZXMgYXJlIHVzZWQsIHRoZW4gd2UnbGwgYWxzbyBuZWVkIC9ydW4vbmV0d29yayB0aGVyZSB0b28uCisJaW5zdGFsbCAtZCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X25ldHdvcmsgJHtEfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMKKworCWluc3RhbGwgLW0gMDc1NSBpZnVwICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisJbG4gJHtEfSR7YmFzZV9zYmluZGlyfS9pZnVwICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaWZkb3duCisJaW5zdGFsbCAtbSAwNjQ0IGlmdXAuOCAke0R9JHttYW5kaXJ9L21hbjgKKwlpbnN0YWxsIC1tIDA2NDQgaW50ZXJmYWNlcy41ICR7RH0ke21hbmRpcn0vbWFuNQorCWNkICR7RH0ke21hbmRpcn0vbWFuOCAmJiBsbiAtcyBpZnVwLjggaWZkb3duLjgKK30KKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiaWZ1cCBpZmRvd24iCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpZnVwXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaWZ1cCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtpZmRvd25dID0gIiR7YmFzZV9zYmluZGlyfS9pZmRvd24iCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJpZnVwIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMzkgUyAuIHN0b3AgMzkgMCA2IDEgLiIKKworU1JDX1VSSVttZDVzdW1dID0gIjg1YmEzNzVmM2M2ZjI2ZDM0ZWZiMmE4NTc1ZTc3ZmM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA4ZGNlMTQ2OTJjMDdiNzJiNTgzYjg2YzRkM2FjZTBkOWRhYzE5Mjg5MjUxNDRjYzNkZGRlMTViNjk0ZWJiZGYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXggYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ3MmU4NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9idWlsZC1hcHBsaWFuY2UtaW1hZ2UvWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteApAQCAtMCwwICsxLDQ2IEBACisuZW5jb2RpbmcgPSAiVVRGLTgiCitjb25maWcudmVyc2lvbiA9ICI4IgordmlydHVhbEhXLnZlcnNpb24gPSAiMTAiCitudW12Y3B1cyA9ICIyIgordmNwdS5ob3RhZGQgPSAiVFJVRSIKK21lbXNpemUgPSAiNDA5NiIKK21lbS5ob3RhZGQgPSAiVFJVRSIKK3NhdGEwLnByZXNlbnQgPSAiVFJVRSIKK3NhdGEwOjAucHJlc2VudCA9ICJUUlVFIgorc2F0YTA6MC5maWxlTmFtZSA9ICJZb2N0b19CdWlsZF9BcHBsaWFuY2Uudm1kayIKK2V0aGVybmV0MC5wcmVzZW50ID0gIlRSVUUiCitldGhlcm5ldDAudmlydHVhbERldiA9ICJlMTAwMCIKK2V0aGVybmV0MC53YWtlT25QY2t0UmN2ID0gIkZBTFNFIgorZXRoZXJuZXQwLmFkZHJlc3NUeXBlID0gImdlbmVyYXRlZCIKK3VzYi5wcmVzZW50ID0gIlRSVUUiCitlaGNpLnBjaVNsb3ROdW1iZXIgPSAiMCIKK3NvdW5kLnByZXNlbnQgPSAiVFJVRSIKK3NvdW5kLmZpbGVOYW1lID0gIi0xIgorc291bmQuYXV0b2RldGVjdCA9ICJUUlVFIgorcGNpQnJpZGdlMC5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U0LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTQudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U0LmZ1bmN0aW9ucyA9ICI4IgorcGNpQnJpZGdlNS5wcmVzZW50ID0gIlRSVUUiCitwY2lCcmlkZ2U1LnZpcnR1YWxEZXYgPSAicGNpZVJvb3RQb3J0IgorcGNpQnJpZGdlNS5mdW5jdGlvbnMgPSAiOCIKK3BjaUJyaWRnZTYucHJlc2VudCA9ICJUUlVFIgorcGNpQnJpZGdlNi52aXJ0dWFsRGV2ID0gInBjaWVSb290UG9ydCIKK3BjaUJyaWRnZTYuZnVuY3Rpb25zID0gIjgiCitwY2lCcmlkZ2U3LnByZXNlbnQgPSAiVFJVRSIKK3BjaUJyaWRnZTcudmlydHVhbERldiA9ICJwY2llUm9vdFBvcnQiCitwY2lCcmlkZ2U3LmZ1bmN0aW9ucyA9ICI4Igordm1jaTAucHJlc2VudCA9ICJUUlVFIgoraHBldDAucHJlc2VudCA9ICJUUlVFIgordXNiLnZibHVldG9vdGguc3RhcnRDb25uZWN0ZWQgPSAiVFJVRSIKK2Rpc3BsYXlOYW1lID0gIllvY3RvIEJ1aWxkIEFwcGxpYW5jZSIKK2d1ZXN0T1MgPSAib3RoZXIzeGxpbnV4LTY0IgordmlydHVhbEhXLnByb2R1Y3RDb21wYXRpYmlsaXR5ID0gImhvc3RlZCIKK2d1aS5leGl0T25DTElITFQgPSAiRkFMU0UiCitwb3dlclR5cGUucG93ZXJPZmYgPSAic29mdCIKK3Bvd2VyVHlwZS5wb3dlck9uID0gInNvZnQiCitwb3dlclR5cGUuc3VzcGVuZCA9ICJzb2Z0IgorcG93ZXJUeXBlLnJlc2V0ID0gInNvZnQiCitleHRlbmRlZENvbmZpZ0ZpbGUgPSAiWW9jdG9fQnVpbGRfQXBwbGlhbmNlLnZteGYiCitzY3NpMDowLnByZXNlbnQgPSAiRkFMU0UiCitmbG9wcHkwLnByZXNlbnQgPSAiRkFMU0UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk0MWZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14ZgpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPEZvdW5kcnk+Cis8Vk0+Cis8Vk1JZCB0eXBlPSJzdHJpbmciPjUyIGE1IGQ4IGNiIGVkIDZjIDg1IDQ4LWNkIDk5IDY4IGFmIGNjIDMwIGEwIDk4PC9WTUlkPgorPENsaWVudE1ldGFEYXRhPgorPGNsaWVudE1ldGFEYXRhQXR0cmlidXRlcy8+Cis8SGlzdG9yeUV2ZW50TGlzdC8+PC9DbGllbnRNZXRhRGF0YT4KKzx2bXhQYXRoTmFtZSB0eXBlPSJzdHJpbmciPllvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXg8L3ZteFBhdGhOYW1lPjwvVk0+PC9Gb3VuZHJ5PgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xMi4wLjEuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvYnVpbGQtYXBwbGlhbmNlLWltYWdlXzEyLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTg2YmE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2J1aWxkLWFwcGxpYW5jZS1pbWFnZV8xMi4wLjEuYmIKQEAgLTAsMCArMSw5MyBAQAorU1VNTUFSWSA9ICJBbiBpbWFnZSBjb250YWluaW5nIHRoZSBidWlsZCBzeXN0ZW0gaXRzZWxmIgorREVTQ1JJUFRJT04gPSAiQW4gaW1hZ2UgY29udGFpbmluZyB0aGUgYnVpbGQgc3lzdGVtIHRoYXQgeW91IGNhbiBib290IGFuZCBydW4gdXNpbmcgZWl0aGVyIFZNd2FyZSBQbGF5ZXIgb3IgVk13YXJlIFdvcmtzdGF0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZy9kb2N1bWVudGF0aW9uL2J1aWxkLWFwcGxpYW5jZSIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU1BR0VfSU5TVEFMTCA9ICJwYWNrYWdlZ3JvdXAtY29yZS1ib290IHBhY2thZ2Vncm91cC1jb3JlLXNzaC1vcGVuc3NoIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZCIKKworSU1BR0VfRkVBVFVSRVMgKz0gIngxMS1iYXNlIHBhY2thZ2UtbWFuYWdlbWVudCBzcGxhc2giCisKKyMgRW5zdXJlIHRoZXJlJ3MgZW5vdWdoIHNwYWNlIHRvIGRvIGEgY29yZS1pbWFnZS1zYXRvIGJ1aWxkLCB3aXRoIHJtX3dvcmsgZW5hYmxlZAorSU1BR0VfUk9PVEZTX0VYVFJBX1NQQUNFID0gIjQxOTQzMDQwIgorCisjIERvIGEgcXVpZXQgYm9vdCB3aXRoIGxpbWl0ZWQgY29uc29sZSBtZXNzYWdlcworQVBQRU5EICs9ICJyb290ZnN0eXBlPWV4dDQgcXVpZXQiCisKK0RFUEVORFMgPSAiemlwLW5hdGl2ZSIKK0lNQUdFX0ZTVFlQRVMgPSAidm1kayIKKworaW5oZXJpdCBjb3JlLWltYWdlCisKK1NSQ1JFViA/PSAiZDAxY2Q1MzQyOWIxYzIwZjAxZGFjOTdmMWI5YjY1OWNiOWRjOTgxMiIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcG9reSBcCisgICAgICAgICAgIGZpbGU6Ly9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm14IFwKKyAgICAgICAgICAgZmlsZTovL1lvY3RvX0J1aWxkX0FwcGxpYW5jZS52bXhmIFwKKyAgICAgICAgICAiCisKK0lNQUdFX0NNRF9leHQ0X2FwcGVuZCAoKSB7CisJIyBXZSBkb24ndCBuZWVkIHRvIHJlc2VydmUgbXVjaCBzcGFjZSBmb3Igcm9vdCwgMC41JSBpcyBtb3JlIHRoYW4gZW5vdWdoCisJdHVuZTJmcyAtbSAwLjUgJHtERVBMT1lfRElSX0lNQUdFfS8ke0lNQUdFX05BTUV9LnJvb3Rmcy5leHQ0Cit9CisKK2Zha2Vyb290IGRvX3BvcHVsYXRlX3Bva3lfc3JjICgpIHsKKwkjIEJlY2F1c2UgZmV0Y2gyJ3MgZ2l0J3MgdW5wYWNrIHVzZXMgLXMgY2xvbmVmbGFnLCB0aGUgdW5wYWNrZWQgZ2l0IHJlcG8KKwkjIHdpbGwgYmVjb21lIGludmFsaWQgaW4gdGhlIHRhcmdldC4KKwlybSAtcmYgJHtXT1JLRElSfS9naXQvLmdpdAorCXJtIC1mICR7V09SS0RJUn0vZ2l0Ly5naXRpZ25vcmUKKworCWNwIC1ScCAke1dPUktESVJ9L2dpdCAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyL3Bva3kKKworCW1rZGlyIC1wICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9jb25mCisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2Rvd25sb2FkcworCWNwIC1ScEwgJHtETF9ESVJ9LyogJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2Rvd25sb2Fkcy8KKworCSMgUmVtb3ZlIHRoZSBnaXQyXyogdGFyYmFsbHMgLS0gdGhpcyBpcyBvayBzaW5jZSB3ZSBzdGlsbCBoYXZlIHRoZSBnaXQyLy4KKwlybSAtcmYgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2Rvd25sb2Fkcy9naXQyXyoKKworCWVjaG8gIi91c3IvYmluIiA+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvcG9reS9idWlsZC9wc2V1ZG9kb25lCisJZWNobyAiSU5IRVJJVCArPSBcInJtX3dvcmtcIiIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5L2J1aWxkL2NvbmYvYXV0by5jb25mCisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wc2V1ZG8KKwllY2hvICJleHBvcnQgUFNFVURPX1BSRUZJWD0vdXNyIiA+PiAke0lNQUdFX1JPT1RGU30vaG9tZS9idWlsZGVyLy5iYXNocmMKKwllY2hvICJleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVI9L2hvbWUvYnVpbGRlci9wc2V1ZG8iID4+ICR7SU1BR0VfUk9PVEZTfS9ob21lL2J1aWxkZXIvLmJhc2hyYworCWVjaG8gImV4cG9ydCBQU0VVRE9fTElCRElSPS91c3IvbGliL3BzZXVkby9saWI2NCIgPj4gJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci8uYmFzaHJjCisKKwljaG93biBidWlsZGVyLmJ1aWxkZXIgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wc2V1ZG8KKworCWNob3duIC1SIGJ1aWxkZXIuYnVpbGRlciAgJHtJTUFHRV9ST09URlN9L2hvbWUvYnVpbGRlci9wb2t5CisKKwkjIEFsbG93IGJ1aWxkZXIgdG8gdXNlIHN1ZG8gdG8gc2V0dXAgdGFwL3R1bgorCWVjaG8gImJ1aWxkZXIgQUxMPShBTEwpIE5PUEFTU1dEOiBBTEwiID4+ICR7SU1BR0VfUk9PVEZTfS9ldGMvc3Vkb2VycworCisJIyBVc2UgQ2xlYXJsb29rcyBHVEsrIHRoZW1lCisJbWtkaXIgLXAgJHtJTUFHRV9ST09URlN9L2V0Yy9ndGstMi4wCisJZWNobyAnZ3RrLXRoZW1lLW5hbWUgPSAiQ2xlYXJsb29rcyInID4gJHtJTUFHRV9ST09URlN9L2V0Yy9ndGstMi4wL2d0a3JjCit9CisKK0lNQUdFX1BSRVBST0NFU1NfQ09NTUFORCArPSAiZG9fcG9wdWxhdGVfcG9reV9zcmM7ICIKKworYWRkdGFzayByb290ZnMgYWZ0ZXIgZG9fdW5wYWNrCisKK3B5dGhvbiAoKSB7CisJIyBFbnN1cmUgd2UgcnVuIHRoZXNlIHVzdWFsbHkgbm9leGVjIHRhc2tzCisJZC5kZWxWYXJGbGFnKCJkb19mZXRjaCIsICJub2V4ZWMiKQorCWQuZGVsVmFyRmxhZygiZG9fdW5wYWNrIiwgIm5vZXhlYyIpCit9CisKK2NyZWF0ZV9idW5kbGVfZmlsZXMgKCkgeworCWNkICR7V09SS0RJUn0KKwlta2RpciAtcCBZb2N0b19CdWlsZF9BcHBsaWFuY2UKKwljcCAqLnZteCogWW9jdG9fQnVpbGRfQXBwbGlhbmNlCisJbG4gLXNmICR7REVQTE9ZX0RJUl9JTUFHRX0vJHtJTUFHRV9OQU1FfS52bWRrIFlvY3RvX0J1aWxkX0FwcGxpYW5jZS9Zb2N0b19CdWlsZF9BcHBsaWFuY2Uudm1kaworCXppcCAtciAke0RFUExPWV9ESVJfSU1BR0V9L1lvY3RvX0J1aWxkX0FwcGxpYW5jZS0ke0RBVEVUSU1FfS56aXAgWW9jdG9fQnVpbGRfQXBwbGlhbmNlCisJbG4gLXNmIFlvY3RvX0J1aWxkX0FwcGxpYW5jZS0ke0RBVEVUSU1FfS56aXAgJHtERVBMT1lfRElSX0lNQUdFfS9Zb2N0b19CdWlsZF9BcHBsaWFuY2UuemlwIAorfQorCitweXRob24gZG9fYnVuZGxlX2ZpbGVzKCkgeworICAgIGJiLmJ1aWxkLmV4ZWNfZnVuYygnY3JlYXRlX2J1bmRsZV9maWxlcycsIGQpCit9CisKK2FkZHRhc2sgYnVuZGxlX2ZpbGVzIGFmdGVyIGRvX3ZtaW1nIGJlZm9yZSBkb19idWlsZAorZG9fYnVuZGxlX2ZpbGVzW25vc3RhbXBdID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1iYXNlLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWEwOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtYmFzZS5iYgpAQCAtMCwwICsxLDggQEAKK1NVTU1BUlkgPSAiQSBjb25zb2xlLW9ubHkgaW1hZ2UgdGhhdCBmdWxseSBzdXBwb3J0cyB0aGUgdGFyZ2V0IGRldmljZSBcCitoYXJkd2FyZS4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2giCisKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNvcmUtaW1hZ2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtZGV2LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlYWQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtZGV2LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjb3JlLWltYWdlLW1pbmltYWwuYmIKKworREVTQ1JJUFRJT04gPSAiQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdCBhbmQgXAoraXMgc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IHdvcmsuIgorCitJTUFHRV9GRUFUVVJFUyArPSAiZGV2LXBrZ3MiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW1hZ2VzL2NvcmUtaW1hZ2UtbWluaW1hbC1pbml0cmFtZnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtaW5pdHJhbWZzLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgU2ltcGxlIGluaXRyYW1mcyBpbWFnZS4gTW9zdGx5IHVzZWQgZm9yIGxpdmUgaW1hZ2VzLgorREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlLiBUaGUga2VybmVsIGluY2x1ZGVzIFwKK3RoZSBNaW5pbWFsIFJBTS1iYXNlZCBJbml0aWFsIFJvb3QgRmlsZXN5c3RlbSAoaW5pdHJhbWZzKSwgd2hpY2ggZmluZHMgdGhlIFwKK2ZpcnN0ICdpbml0JyBwcm9ncmFtIG1vcmUgZWZmaWNpZW50bHkuIgorCitQQUNLQUdFX0lOU1RBTEwgPSAiaW5pdHJhbWZzLWxpdmUtYm9vdCBpbml0cmFtZnMtbGl2ZS1pbnN0YWxsIGluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpIGJ1c3lib3ggdWRldiBiYXNlLXBhc3N3ZCAke1JPT1RGU19CT09UU1RSQVBfSU5TVEFMTH0iCisKKyMgRG8gbm90IHBvbGx1dGUgdGhlIGluaXRyZCBpbWFnZSB3aXRoIHJvb3RmcyBmZWF0dXJlcworSU1BR0VfRkVBVFVSRVMgPSAiIgorCitleHBvcnQgSU1BR0VfQkFTRU5BTUUgPSAiY29yZS1pbWFnZS1taW5pbWFsLWluaXRyYW1mcyIKK0lNQUdFX0xJTkdVQVMgPSAiIgorCitMSUNFTlNFID0gIk1JVCIKKworSU1BR0VfRlNUWVBFUyA9ICIke0lOSVRSQU1GU19GU1RZUEVTfSIKK2luaGVyaXQgY29yZS1pbWFnZQorCitJTUFHRV9ST09URlNfU0laRSA9ICI4MTkyIgorCitCQURfUkVDT01NRU5EQVRJT05TICs9ICJidXN5Ym94LXN5c2xvZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwtbXRkdXRpbHMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MjIzNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLW10ZHV0aWxzLmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjb3JlLWltYWdlLW1pbmltYWwuYmIKKworREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggc3VwcG9ydCBmb3IgdGhlIFwKK01pbmltYWwgTVREIFV0aWxpdGllcywgd2hpY2ggbGV0IHRoZSB1c2VyIGludGVyYWN0IHdpdGggdGhlIE1URCBzdWJzeXN0ZW0gaW4gXAordGhlIGtlcm5lbCB0byBwZXJmb3JtIG9wZXJhdGlvbnMgb24gZmxhc2ggZGV2aWNlcy4iCisKK0lNQUdFX0lOU1RBTEwgKz0gIm10ZC11dGlscyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDc3YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdC4iCisKK0lNQUdFX0lOU1RBTEwgPSAicGFja2FnZWdyb3VwLWNvcmUtYm9vdCAke1JPT1RGU19QS0dNQU5BR0VfQk9PVFNUUkFQfSAke0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTH0iCisKK0lNQUdFX0xJTkdVQVMgPSAiICIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCitJTUFHRV9ST09URlNfU0laRSA/PSAiODE5MiIKK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJzeXN0ZW1kIiwgIiArIDQwOTYiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9jb3B5cmlnaHQgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2NvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYThlMGQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9jb3B5cmlnaHQKQEAgLTAsMCArMSwxMSBAQAorVGhpcyBwYWNrYWdlIHdhcyBjcmVhdGVkIGJ5IFBldGVyIFRvYmlhcyB0b2JpYXNAZXQtaW5mLmZoby1lbWRlbi5kZSBvbgorV2VkLCAyNCBBdWcgMTk5NCAyMTozMzoyOCArMDIwMCBhbmQgbWFpbnRhaW5lZCBieSBBbnRob255IFRvd25zCis8YWp0QGRlYmlhbi5vcmc+IHVudGlsIDIwMDEuCitJdCBpcyBjdXJyZW50bHkgbWFpbnRhaW5lZCBieSBNYXJjbyBkJ0l0cmkgPG1kQGxpbnV4Lml0Pi4KKworQ29weXJpZ2h0IDE5OTQtMjAxMCBQZXRlciBUb2JpYXMsIEFudGhvbnkgVG93bnMgYW5kIE1hcmNvIGQnSXRyaQorCitUaGUgcHJvZ3JhbXMgaW4gdGhpcyBwYWNrYWdlIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIGFzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiBPbiBEZWJpYW4gc3lzdGVtcywgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBtYXkgYmUgZm91bmQgaW4KKy91c3Ivc2hhcmUvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzFjNjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2luaXQKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoIC1lCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBuZXR3b3JraW5nCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcyAkbG9jYWxfZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcworIyBTaG91bGQtU3RhcnQ6ICAgICAgaWZ1cGRvd24KKyMgU2hvdWxkLVN0b3A6ICAgICAgIGlmdXBkb3duCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFJhaXNlIG5ldHdvcmsgaW50ZXJmYWNlcy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9Ii91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiIKKworWyAteCAvc2Jpbi9pZnVwIF0gfHwgZXhpdCAwCisKK2NoZWNrX25ldHdvcmtfZmlsZV9zeXN0ZW1zKCkgeworICAgIFsgLWUgL3Byb2MvbW91bnRzIF0gfHwgcmV0dXJuIDAKKworICAgIGlmIFsgLWUgL2V0Yy9pc2NzaS9pc2NzaS5pbml0cmFtZnMgXTsgdGhlbgorCWVjaG8gIm5vdCBkZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlczogaVNDU0kgcm9vdCBpcyBtb3VudGVkLiIKKwlleGl0IDAKKyAgICBmaQorCisgICAgZXhlYyA5PCYwIDwgL3Byb2MvbW91bnRzCisgICAgd2hpbGUgcmVhZCBERVYgTVRQVCBGU1RZUEUgUkVTVDsgZG8KKwljYXNlICRERVYgaW4KKwkvZGV2L25iZCp8L2Rldi9uZFthLXpdKnwvZGV2L2V0aGVyZC9lKikKKwkgICAgZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBuZXR3b3JrIGRldmljZXMgc3RpbGwgbW91bnRlZC4iCisJICAgIGV4aXQgMAorCSAgICA7OworCWVzYWMKKwljYXNlICRGU1RZUEUgaW4KKwluZnN8bmZzNHxzbWJmc3xuY3B8bmNwZnN8Y2lmc3xjb2RhfG9jZnMyfGdmc3xwdmZzfHB2ZnMyfGZ1c2UuaHR0cGZzfGZ1c2UuY3VybGZ0cGZzKQorCSAgICBlY2hvICJub3QgZGVjb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXM6IG5ldHdvcmsgZmlsZSBzeXN0ZW1zIHN0aWxsIG1vdW50ZWQuIgorCSAgICBleGl0IDAKKwkgICAgOzsKKwllc2FjCisgICAgZG9uZQorICAgIGV4ZWMgMDwmOSA5PCYtCit9CisKK2NoZWNrX25ldHdvcmtfc3dhcCgpIHsKKyAgICBbIC1lIC9wcm9jL3N3YXBzIF0gfHwgcmV0dXJuIDAKKworICAgIGV4ZWMgOTwmMCA8IC9wcm9jL3N3YXBzCisgICAgd2hpbGUgcmVhZCBERVYgTVRQVCBGU1RZUEUgUkVTVDsgZG8KKwljYXNlICRERVYgaW4KKwkvZGV2L25iZCp8L2Rldi9uZFthLXpdKnwvZGV2L2V0aGVyZC9lKikKKwkgICAgZWNobyAibm90IGRlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzOiBuZXR3b3JrIHN3YXAgc3RpbGwgbW91bnRlZC4iCisJICAgIGV4aXQgMAorCSAgICA7OworCWVzYWMKKyAgICBkb25lCisgICAgZXhlYyAwPCY5IDk8Ji0KK30KKworY2FzZSAiJDEiIGluCitzdGFydCkKKwllY2hvIC1uICJDb25maWd1cmluZyBuZXR3b3JrIGludGVyZmFjZXMuLi4gIgorCXN5c2N0bCAtZSAtcCAvZXRjL3N5c2N0bC5jb25mID4vZGV2L251bGwgMj4mMQorCWlmdXAgLWEKKwllY2hvICJkb25lLiIKKwk7OworCitzdG9wKQorCWNoZWNrX25ldHdvcmtfZmlsZV9zeXN0ZW1zCisJY2hlY2tfbmV0d29ya19zd2FwCisKKwllY2hvIC1uICJEZWNvbmZpZ3VyaW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4uLiAiCisJaWZkb3duIC1hCisJZWNobyAiZG9uZS4iCisJOzsKKworZm9yY2UtcmVsb2FkfHJlc3RhcnQpCisJZWNobyAiUnVubmluZyAkMCAkMSBpcyBkZXByZWNhdGVkIGJlY2F1c2UgaXQgbWF5IG5vdCBlbmFibGUgYWdhaW4gc29tZSBpbnRlcmZhY2VzIgorCWVjaG8gIlJlY29uZmlndXJpbmcgbmV0d29yayBpbnRlcmZhY2VzLi4uICIKKwlpZmRvd24gLWEgfHwgdHJ1ZQorCWlmdXAgLWEKKwllY2hvICJkb25lLiIKKwk7OworCisqKQorCWVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9uZXR3b3JraW5nIHtzdGFydHxzdG9wfSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhY2Y0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL2ludGVyZmFjZXMKQEAgLTAsMCArMSwzMSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKyMgV2lyZWxlc3MgaW50ZXJmYWNlcworaWZhY2Ugd2xhbjAgaW5ldCBkaGNwCisJd2lyZWxlc3NfbW9kZSBtYW5hZ2VkCisJd2lyZWxlc3NfZXNzaWQgYW55CisJd3BhLWRyaXZlciB3ZXh0CisJd3BhLWNvbmYgL2V0Yy93cGFfc3VwcGxpY2FudC5jb25mCisKK2lmYWNlIGF0bWwwIGluZXQgZGhjcAorCisjIFdpcmVkIG9yIHdpcmVsZXNzIGludGVyZmFjZXMKK2F1dG8gZXRoMAoraWZhY2UgZXRoMCBpbmV0IGRoY3AKK2lmYWNlIGV0aDEgaW5ldCBkaGNwCisKKyMgRXRoZXJuZXQvUk5ESVMgZ2FkZ2V0IChnX2V0aGVyKQorIyAuLi4gb3Igb24gaG9zdCBzaWRlLCB1c2JuZXQgYW5kIHJhbmRvbSBod2FkZHIKK2lmYWNlIHVzYjAgaW5ldCBzdGF0aWMKKwlhZGRyZXNzIDE5Mi4xNjguNy4yCisJbmV0bWFzayAyNTUuMjU1LjI1NS4wCisJbmV0d29yayAxOTIuMTY4LjcuMAorCWdhdGV3YXkgMTkyLjE2OC43LjEKKworIyBCbHVldG9vdGggbmV0d29ya2luZworaWZhY2UgYm5lcDAgaW5ldCBkaGNwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvbmZzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTBjMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9uZnNyb290CkBAIC0wLDAgKzEsMzkgQEAKKyMhIC9iaW4vc2gKKworIyBJbiBjYXNlIHRoZSBpbnRlcmZhY2UgaXMgdXNlZCBhcyBuZnNyb290LCBhdm9pZCBpZnVwLCBvdGhlcndpc2UKKyMgbmZzcm9vdCBtYXkgbG9zZSByZXNwb25zZQorCituZnNyb290PTAKKworaWYgdGVzdCAieCRJRkFDRSIgPSB4bG8gOyB0aGVuCisJZXhpdCAwCitmaQorCitleGVjIDk8JjAgPCAvcHJvYy9tb3VudHMKK3doaWxlIHJlYWQgZGV2IG10cHQgZnN0eXBlIHJlc3Q7IGRvCisgICAgaWYgdGVzdCAkbXRwdCA9ICIvIiA7IHRoZW4KKyAgICAgICAgY2FzZSAkZnN0eXBlIGluCisgICAgICAgICAgICBuZnMgfCBuZnM0KQorICAgICAgICAgICAgICAgIG5mc3Jvb3Q9MQorICAgICAgICAgICAgICAgIG5mc19hZGRyPWBlY2hvICRyZXN0IHwgc2VkIC1lICdzL14uKmFkZHI9XChbMC05Ll0qXCkuKiQvXDEvJ2AKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorZG9uZQorZXhlYyAwPCY5IDk8Ji0KKwordGVzdCAkbmZzcm9vdCAtZXEgMCAmJiBleGl0IDAKKworaWYgWyAteCAvYmluL2lwIC1vIC14IC9zYmluL2lwIF0gOyB0aGVuCisgICAgbmZzX2lmYWNlPWBpcCByb3V0ZSBnZXQgJG5mc19hZGRyIHwgZ3JlcCBkZXYgfCBzZWQgLWUgJ3MvXi4qZGV2IFwoWy1hLXowLTkuXSpcKS4qJC9cMS8nYAorZmkKKworaWYgdGVzdCAieCRJRkFDRSIgPSAieCRuZnNfaWZhY2UiIDsgdGhlbgorICAgIGVjaG8gImlmdXAgc2tpcHBlZCBmb3IgbmZzcm9vdCBpbnRlcmZhY2UgJG5mc19pZmFjZSIKKyAgICBleGl0IDEKK2ZpCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtL2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm0vaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtL2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybTY0L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OTY3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm02NC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsNSBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVhcm12Ni9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjk2Nzc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjYvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDUgQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11YXJtdjcvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY5Njc3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdWFybXY3L2ludGVyZmFjZXMKQEAgLTAsMCArMSw1IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHMvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11bWlwcy9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzNjQvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdW1pcHM2NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVtaXBzNjQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11cHBjL2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXVwcGMvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11cHBjL2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXNoNC9pbnRlcmZhY2VzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11c2g0L2ludGVyZmFjZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYyYjlhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXNoNC9pbnRlcmZhY2VzCkBAIC0wLDAgKzEsOCBAQAorIyAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyAtLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGlmdXAoOCksIGlmZG93big4KQorIAorIyBUaGUgbG9vcGJhY2sgaW50ZXJmYWNlCithdXRvIGxvCitpZmFjZSBsbyBpbmV0IGxvb3BiYWNrCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYtNjQvaW50ZXJmYWNlcyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bi0xLjAvcWVtdXg4Ni02NC9pbnRlcmZhY2VzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MmI5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYtNjQvaW50ZXJmYWNlcwpAQCAtMCwwICsxLDggQEAKKyMgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMgLS0gY29uZmlndXJhdGlvbiBmaWxlIGZvciBpZnVwKDgpLCBpZmRvd24oOCkKKyAKKyMgVGhlIGxvb3BiYWNrIGludGVyZmFjZQorYXV0byBsbworaWZhY2UgbG8gaW5ldCBsb29wYmFjaworCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2L2ludGVyZmFjZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd24tMS4wL3FlbXV4ODYvaW50ZXJmYWNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdC1pZnVwZG93bi9pbml0LWlmdXBkb3duLTEuMC9xZW11eDg2L2ludGVyZmFjZXMKQEAgLTAsMCArMSw4IEBACisjIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIC0tIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaWZ1cCg4KSwgaWZkb3duKDgpCisgCisjIFRoZSBsb29wYmFjayBpbnRlcmZhY2UKK2F1dG8gbG8KK2lmYWNlIGxvIGluZXQgbG9vcGJhY2sKKworCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXQtaWZ1cGRvd24vaW5pdC1pZnVwZG93bl8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczM2FlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0LWlmdXBkb3duL2luaXQtaWZ1cGRvd25fMS4wLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiQmFzaWMgVENQL0lQIG5ldHdvcmtpbmcgaW5pdCBzY3JpcHRzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIGhpZ2ggbGV2ZWwgdG9vbHMgdG8gY29uZmlndXJlIG5ldHdvcmsgaW50ZXJmYWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL2lmdXBkb3duIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vY29weXJpZ2h0O21kNT0zZGQ2MTkyZDMwNmY1ODJkZWU3Njg3ZGEzZDg3NDhhYiIKK1BSID0gInI3IgorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJuZXR3b3JraW5nIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDEgMiAzIDQgNSAuIHN0b3AgODAgMCA2IDEgLiIKKworU1JDX1VSSSA9ICJmaWxlOi8vY29weXJpZ2h0IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQgXAorICAgICAgICAgICBmaWxlOi8vaW50ZXJmYWNlcyBcCisgICAgICAgICAgIGZpbGU6Ly9uZnNyb290IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIFwKKwkJCSR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQgXAorCQkJJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9pZi11cC5kIFwKKwkJCSR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtZG93bi5kIFwKKwkJCSR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcG9zdC1kb3duLmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9uZXR3b3JraW5nCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vaW50ZXJmYWNlcyAke0R9JHtzeXNjb25mZGlyfS9uZXR3b3JrL2ludGVyZmFjZXMKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9uZnNyb290ICR7RH0ke3N5c2NvbmZkaXJ9L25ldHdvcmsvaWYtcHJlLXVwLmQKK30KKworZG9faW5zdGFsbF9hcHBlbmRfcWVtdWFsbCAoKSB7CisJIyBEaXNhYmxlIG5ldHdvcmsgbWFuYWdlciBvbiBtYWNoaW5lcyB0aGF0IGNvbW1vbmx5IGRvIE5GUyBib290aW5nCisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbmV0d29yay9ubS1kaXNhYmxlZC1ldGgwCit9CisKK1BBQ0tBR0VfQVJDSF9xZW11YWxsID0gIiR7TUFDSElORV9BUkNIfSIKK1JERVBFTkRTXyR7UE59ID0gIm5ldGJhc2UiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm5ldGJhc2UgKDwgMTo1LjApIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9uZXR3b3JrL2ludGVyZmFjZXMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtYm9vdC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1ib290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MmViYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtYm9vdC5zaApAQCAtMCwwICsxLDEwIEBACisjIS9iaW4vc2gKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCitta2RpciAvcHJvYworbWtkaXIgL3N5cworbW91bnQgLXQgcHJvYyBwcm9jIC9wcm9jCittb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisKK2V4ZWMgc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLWVmaS10ZXN0ZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMGI0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoCkBAIC0wLDAgKzEsMTk5IEBACisjIS9iaW4vc2ggLWUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEyLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgaW5zdGFsbC5zaCBbZGV2aWNlX25hbWVdIFtyb290ZnNfbmFtZV0KKyMKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdlIG5lZWQgMjAwIE1iIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24KK2Jvb3Rfc2l6ZT0yMDAKKworIyA1MCUgZm9yIHRoZSBzZWNvbmQgcm9vdGZzCit0ZXN0ZnNfcmF0aW89NTAKKworZm91bmQ9Im5vIgorCitlY2hvICJTZWFyY2hpbmcgZm9yIGEgaGFyZCBkcml2ZS4uLiIKK2ZvciBkZXZpY2UgaW4gJ2hkYScgJ2hkYicgJ3NkYScgJ3NkYicgJ21tY2JsazAnICdtbWNibGsxJworZG8KKyAgICBpZiBbIC1lIC9zeXMvYmxvY2svJHtkZXZpY2V9L3JlbW92YWJsZSBdOyB0aGVuCisgICAgICAgIGlmIFsgIiQoY2F0IC9zeXMvYmxvY2svJHtkZXZpY2V9L3JlbW92YWJsZSkiID0gIjAiIF07IHRoZW4KKyAgICAgICAgICAgIGZvdW5kPSJ5ZXMiCisKKyAgICAgICAgICAgIHdoaWxlIHRydWU7IGRvCisgICAgICAgICAgICAgICAgIyBUcnkgc2xlZXBpbmcgaGVyZSB0byBhdm9pZCBnZXR0aW5nIGtlcm5lbCBtZXNzYWdlcworICAgICAgICAgICAgICAgICMgb2JzY3VyaW5nL2NvbmZ1c2luZyB1c2VyCisgICAgICAgICAgICAgICAgc2xlZXAgNQorICAgICAgICAgICAgICAgIGVjaG8gIkZvdW5kIGRyaXZlIGF0IC9kZXYvJHtkZXZpY2V9LiBEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmUgPyBbeS9uXSIKKyAgICAgICAgICAgICAgICByZWFkIGFuc3dlcgorICAgICAgICAgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgIGlmIFsgIiRhbnN3ZXIiID0gIm4iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGZvdW5kPW5vCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgIGVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICBpZiBbICIkZm91bmQiID0gInllcyIgXTsgdGhlbgorICAgICAgICBicmVhazsKKyAgICBmaQorCitkb25lCisKK2lmIFsgIiRmb3VuZCIgPSAibm8iIF07IHRoZW4KKyAgICBleGl0IDEKK2ZpCisKK2VjaG8gIkluc3RhbGxpbmcgaW1hZ2Ugb24gL2Rldi8ke2RldmljZX0iCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50IC9kZXYvJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK21rZGlyIC1wIC90bXAKK2NhdCAvcHJvYy9tb3VudHMgPiAvZXRjL210YWIKKworZGlza19zaXplPSQocGFydGVkIC9kZXYvJHtkZXZpY2V9IHVuaXQgbWIgcHJpbnQgfCBncmVwIERpc2sgfCBjdXQgLWQiICIgLWYgMyB8IHNlZCAtZSAicy9NQi8vIikKKwordGVzdGZzX3NpemU9JCgoZGlza19zaXplKnRlc3Rmc19yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJvb3Rfc2l6ZS10ZXN0ZnNfc2l6ZSkpCisKK3Jvb3Rmc19zdGFydD0kKChib290X3NpemUpKQorcm9vdGZzX2VuZD0kKChyb290ZnNfc3RhcnQrcm9vdGZzX3NpemUpKQordGVzdGZzX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisgICAgcGFydF9wcmVmaXg9InAiCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKK2Jvb3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorcm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCit0ZXN0ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiVGVzdGZzIHBhcnRpdGlvbiBzaXplOiAgICR0ZXN0ZnNfc2l6ZSBNQiAoJHRlc3RmcykiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAvZGV2LyR7ZGV2aWNlfSAuLi4iCitkZCBpZj0vZGV2L3plcm8gb2Y9L2Rldi8ke2RldmljZX0gYnM9NTEyIGNvdW50PTIKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAvZGV2LyR7ZGV2aWNlfSAuLi4iCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtsYWJlbCBncHQKKworZWNobyAiQ3JlYXRpbmcgYm9vdCBwYXJ0aXRpb24gb24gJGJvb3RmcyIKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBta3BhcnQgcHJpbWFyeSAwJSAkYm9vdF9zaXplCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gc2V0IDEgYm9vdCBvbgorCitlY2hvICJDcmVhdGluZyByb290ZnMgcGFydGl0aW9uIG9uICRyb290ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgJHJvb3Rmc19zdGFydCAkcm9vdGZzX2VuZAorCitlY2hvICJDcmVhdGluZyB0ZXN0ZnMgcGFydGl0aW9uIG9uICR0ZXN0ZnMiCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgJHRlc3Rmc19zdGFydCAxMDAlCisKK3BhcnRlZCAvZGV2LyR7ZGV2aWNlfSBwcmludAorCitlY2hvICJGb3JtYXR0aW5nICRib290ZnMgdG8gdmZhdC4uLiIKK21rZnMudmZhdCAtbiAiYm9vdCIgJGJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICRyb290ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAtTCAicGxhdGZvcm0iICRyb290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkdGVzdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInRlc3Ryb290ZnMiICR0ZXN0ZnMKKworbWtkaXIgL3NzZAorbWtkaXIgL3Jvb3RtbnQKK21rZGlyIC9ib290bW50CisKK21vdW50ICRyb290ZnMgL3NzZAorbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kMS8kMiAvcm9vdG1udAorCitlY2hvICJDb3B5aW5nIHJvb3RmcyBmaWxlcy4uLiIKK2NwIC1hIC9yb290bW50LyogL3NzZAorCit0b3VjaCAvc3NkL2V0Yy9tYXN0ZXJpbWFnZQorCitpZiBbIC1kIC9zc2QvZXRjLyBdIDsgdGhlbgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC9zc2QvZXRjL3VkZXYvIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIi9kZXYvJHtkZXZpY2V9IiA+PiAvc3NkL2V0Yy91ZGV2L21vdW50LmJsYWNrbGlzdAorICAgIGZpCitmaQorCit1bW91bnQgL3NzZAordW1vdW50IC9yb290bW50CisKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKK21vdW50ICRib290ZnMgL3NzZAorCitFRklESVI9Ii9zc2QvRUZJL0JPT1QiCitta2RpciAtcCAkRUZJRElSCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL3NzZAorIyBDb3B5IHRoZSBlZmkgbG9hZGVyCitjcCAvcnVuL21lZGlhLyQxL0VGSS9CT09ULyouZWZpICRFRklESVIKKworaWYgWyAtZiAvcnVuL21lZGlhLyQxL0VGSS9CT09UL2dydWIuY2ZnIF07IHRoZW4KKyAgICBHUlVCQ0ZHPSIkRUZJRElSL2dydWIuY2ZnIgorICAgIGNwIC9ydW4vbWVkaWEvJDEvRUZJL0JPT1QvZ3J1Yi5jZmcgJEdSVUJDRkcKKyAgICAjIFVwZGF0ZSBncnViIGNvbmZpZyBmb3IgdGhlIGluc3RhbGxlZCBpbWFnZQorICAgICMgRGVsZXRlIHRoZSBpbnN0YWxsIGVudHJ5CisgICAgc2VkIC1pICIvbWVudWVudHJ5ICdpbnN0YWxsJy8sL159L2QiICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgdGhlIGluaXRyZCBsaW5lcworICAgIHNlZCAtaSAiL2luaXRyZCAvZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1JVQkNGRworICAgICMgQWRkIHRoZSByb290PSBhbmQgb3RoZXIgc3RhbmRhcmQgYm9vdCBvcHRpb25zCisgICAgc2VkIC1pICJzQGxpbnV4IC92bWxpbnV6ICpAbGludXggL3ZtbGludXogcm9vdD0kcm9vdGZzIHJ3ICRyb290d2FpdCBxdWlldCBAIiAkR1JVQkNGRworZmkKKworaWYgWyAtZCAvcnVuL21lZGlhLyQxL2xvYWRlciBdOyB0aGVuCisgICAgR1VNTUlCT09UX0NGR1M9Ii9zc2QvbG9hZGVyL2VudHJpZXMvKi5jb25mIgorICAgICMgY29weSBjb25maWcgZmlsZXMgZm9yIGd1bW1pYm9vdAorICAgIGNwIC1kciAvcnVuL21lZGlhLyQxL2xvYWRlciAvc3NkCisgICAgIyBkZWxldGUgdGhlIGluc3RhbGwgZW50cnkKKyAgICBybSAtZiAvc3NkL2xvYWRlci9lbnRyaWVzL2luc3RhbGwuY29uZgorICAgICMgZGVsZXRlIHRoZSBpbml0cmQgbGluZXMKKyAgICBzZWQgLWkgIi9pbml0cmQgL2QiICRHVU1NSUJPT1RfQ0ZHUworICAgICMgZGVsZXRlIGFueSBMQUJFTD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gTEFCRUw9W14gXSovIC8iICRHVU1NSUJPT1RfQ0ZHUworICAgICMgZGVsZXRlIGFueSByb290PSBzdHJpbmdzCisgICAgc2VkIC1pICJzLyByb290PVteIF0qLyAvIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGFkZCB0aGUgcm9vdD0gYW5kIG90aGVyIHN0YW5kYXJkIGJvb3Qgb3B0aW9ucworICAgIHNlZCAtaSAic0BvcHRpb25zICpAb3B0aW9ucyByb290PSRyb290ZnMgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHVU1NSUJPT1RfQ0ZHUworICAgICMgQWRkIHRoZSB0ZXN0IGxhYmVsCisgICAgZWNobyAtbmUgInRpdGxlIHRlc3RcbmxpbnV4IC90ZXN0LWtlcm5lbFxub3B0aW9ucyByb290PSR0ZXN0ZnMgcncgJHJvb3R3YWl0IHF1aWV0XG4iID4gL3NzZC9sb2FkZXIvZW50cmllcy90ZXN0LmNvbmYKK2ZpCisKK3Vtb3VudCAvc3NkCitzeW5jCisKK2VjaG8gIlJlbW92ZSB5b3VyIGluc3RhbGxhdGlvbiBtZWRpYSwgYW5kIHByZXNzIEVOVEVSIgorCityZWFkIGVudGVyCisKK2VjaG8gIlJlYm9vdGluZy4uLiIKK3JlYm9vdCAtZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWluc3RhbGwtZWZpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWQ3NGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC1lZmkuc2gKQEAgLTAsMCArMSwyNTAgQEAKKyMhL2Jpbi9zaCAtZQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLgorIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBpbnN0YWxsLnNoIFtkZXZpY2VfbmFtZV0gW3Jvb3Rmc19uYW1lXQorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgV2UgbmVlZCAyMCBNYiBmb3IgdGhlIGJvb3QgcGFydGl0aW9uCitib290X3NpemU9MjAKKworIyA1JSBmb3Igc3dhcAorc3dhcF9yYXRpbz01CisKKyMgR2V0IGEgbGlzdCBvZiBoYXJkIGRyaXZlcworaGRuYW1lbGlzdD0iIgorbGl2ZV9kZXZfbmFtZT1gY2F0IC9wcm9jL21vdW50cyB8IGdyZXAgJHsxJS99IHwgYXdrICd7cHJpbnQgJDF9J2AKK2xpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lI1wvZGV2L30KKyMgT25seSBzdHJpcCB0aGUgZGlnaXQgaWRlbnRpZmllciBpZiB0aGUgZGV2aWNlIGlzIG5vdCBhbiBtbWMKK2Nhc2UgJGxpdmVfZGV2X25hbWUgaW4KKyAgICBtbWNibGsqKQorICAgIDs7CisgICAgKikKKyAgICAgICAgbGl2ZV9kZXZfbmFtZT0ke2xpdmVfZGV2X25hbWUlJVswLTldKn0KKyAgICA7OworZXNhYworCitlY2hvICJTZWFyY2hpbmcgZm9yIGhhcmQgZHJpdmVzIC4uLiIKKworZm9yIGRldmljZSBpbiBgbHMgL3N5cy9ibG9jay9gOyBkbworICAgIGNhc2UgJGRldmljZSBpbgorICAgICAgICBsb29wKikKKyAgICAgICAgICAgICMgc2tpcCBsb29wIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgc3IqKQorICAgICAgICAgICAgIyBza2lwIENEUk9NIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgcmFtKikKKyAgICAgICAgICAgICMgc2tpcCByYW0gZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2UgTGl2ZU9TIGlzIG9uCisgICAgICAgICAgICAjIEFkZCB2YWxpZCBoYXJkIGRyaXZlIG5hbWUgdG8gdGhlIGxpc3QKKyAgICAgICAgICAgIGNhc2UgJGRldmljZSBpbgorICAgICAgICAgICAgICAgICRsaXZlX2Rldl9uYW1lKikKKyAgICAgICAgICAgICAgICAjIHNraXAgdGhlIGRldmljZSB3ZSBhcmUgcnVubmluZyBmcm9tCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICBoZG5hbWVsaXN0PSIkaGRuYW1lbGlzdCAkZGV2aWNlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworaWYgWyAteiAiJHtoZG5hbWVsaXN0fSIgXTsgdGhlbgorICAgIGVjaG8gIllvdSBuZWVkIGFub3RoZXIgZGV2aWNlIChiZXNpZGVzIHRoZSBsaXZlIGRldmljZSAvZGV2LyR7bGl2ZV9kZXZfbmFtZX0pIHRvIGluc3RhbGwgdGhlIGltYWdlLiBJbnN0YWxsYXRpb24gYWJvcnRlZC4iCisgICAgZXhpdCAxCitmaQorCitUQVJHRVRfREVWSUNFX05BTUU9IiIKK2ZvciBoZG5hbWUgaW4gJGhkbmFtZWxpc3Q7IGRvCisgICAgIyBEaXNwbGF5IGZvdW5kIGhhcmQgZHJpdmVzIGFuZCB0aGVpciBiYXNpYyBpbmZvCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBlY2hvIC9kZXYvJGhkbmFtZQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS92ZW5kb3IgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJWRU5ET1I9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS92ZW5kb3IKKyAgICBmaQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS9tb2RlbCBdOyB0aGVuCisgICAgICAgIGVjaG8gLW4gIk1PREVMPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwKKyAgICBmaQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS91ZXZlbnQgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJVRVZFTlQ9IgorICAgICAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS91ZXZlbnQKKyAgICBmaQorICAgIGVjaG8KKyAgICAjIEdldCB1c2VyIGNob2ljZQorICAgIHdoaWxlIHRydWU7IGRvCisgICAgICAgIGVjaG8gLW4gIkRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhpcyBpbWFnZSB0aGVyZT8gW3kvbl0gIgorICAgICAgICByZWFkIGFuc3dlcgorICAgICAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiAtbyAiJGFuc3dlciIgPSAibiIgXTsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAiUGxlYXNlIGFuc3dlciB5IG9yIG4iCisgICAgZG9uZQorICAgIGlmIFsgIiRhbnN3ZXIiID0gInkiIF07IHRoZW4KKyAgICAgICAgVEFSR0VUX0RFVklDRV9OQU1FPSRoZG5hbWUKKyAgICAgICAgYnJlYWsKKyAgICBmaQorZG9uZQorCitpZiBbIC1uICIkVEFSR0VUX0RFVklDRV9OQU1FIiBdOyB0aGVuCisgICAgZWNobyAiSW5zdGFsbGluZyBpbWFnZSBvbiAvZGV2LyRUQVJHRVRfREVWSUNFX05BTUUgLi4uIgorZWxzZQorICAgIGVjaG8gIk5vIGhhcmQgZHJpdmUgc2VsZWN0ZWQuIEluc3RhbGxhdGlvbiBhYm9ydGVkLiIKKyAgICBleGl0IDEKK2ZpCisKK2RldmljZT0vZGV2LyRUQVJHRVRfREVWSUNFX05BTUUKKworIworIyBUaGUgdWRldiBhdXRvbW91bnRlciBjYW4gY2F1c2UgcGFpbiBoZXJlLCBraWxsIGl0CisjCitybSAtZiAvZXRjL3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKK3JtIC1mIC9ldGMvdWRldi9zY3JpcHRzL21vdW50KgorCisjCisjIFVubW91bnQgYW55dGhpbmcgdGhlIGF1dG9tb3VudGVyIGhhZCBtb3VudGVkCisjCit1bW91bnQgJHtkZXZpY2V9KiAyPiAvZGV2L251bGwgfHwgL2Jpbi90cnVlCisKK21rZGlyIC1wIC90bXAKK2NhdCAvcHJvYy9tb3VudHMgPiAvZXRjL210YWIKKworZGlza19zaXplPSQocGFydGVkICR7ZGV2aWNlfSB1bml0IG1iIHByaW50IHwgZ3JlcCBEaXNrIHwgY3V0IC1kIiAiIC1mIDMgfCBzZWQgLWUgInMvTUIvLyIpCisKK3N3YXBfc2l6ZT0kKChkaXNrX3NpemUqc3dhcF9yYXRpby8xMDApKQorcm9vdGZzX3NpemU9JCgoZGlza19zaXplLWJvb3Rfc2l6ZS1zd2FwX3NpemUpKQorCityb290ZnNfc3RhcnQ9JCgoYm9vdF9zaXplKSkKK3Jvb3Rmc19lbmQ9JCgocm9vdGZzX3N0YXJ0K3Jvb3Rmc19zaXplKSkKK3N3YXBfc3RhcnQ9JCgocm9vdGZzX2VuZCkpCisKKyMgTU1DIGRldmljZXMgYXJlIHNwZWNpYWwgaW4gYSBjb3VwbGUgb2Ygd2F5cworIyAxKSB0aGV5IHVzZSBhIHBhcnRpdGlvbiBwcmVmaXggY2hhcmFjdGVyICdwJworIyAyKSB0aGV5IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseSAobmVlZCByb290d2FpdCkKK3Jvb3R3YWl0PSIiCitwYXJ0X3ByZWZpeD0iIgoraWYgWyAhICIke2RldmljZSNtbWNibGt9IiA9ICIke2RldmljZX0iIF07IHRoZW4KKyAgICBwYXJ0X3ByZWZpeD0icCIKKyAgICByb290d2FpdD0icm9vdHdhaXQiCitmaQorYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorcm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9Mgorc3dhcD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTMKKworZWNobyAiKioqKioqKioqKioqKioqKioiCitlY2hvICJCb290IHBhcnRpdGlvbiBzaXplOiAgICRib290X3NpemUgTUIgKCRib290ZnMpIgorZWNobyAiUm9vdGZzIHBhcnRpdGlvbiBzaXplOiAkcm9vdGZzX3NpemUgTUIgKCRyb290ZnMpIgorZWNobyAiU3dhcCBwYXJ0aXRpb24gc2l6ZTogICAkc3dhcF9zaXplIE1CICgkc3dhcCkiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgorZGQgaWY9L2Rldi96ZXJvIG9mPSR7ZGV2aWNlfSBicz01MTIgY291bnQ9MzUKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAke2RldmljZX0gLi4uIgorcGFydGVkICR7ZGV2aWNlfSBta2xhYmVsIGdwdAorCitlY2hvICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkYm9vdGZzIgorcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgYm9vdCBmYXQzMiAwJSAkYm9vdF9zaXplCitwYXJ0ZWQgJHtkZXZpY2V9IHNldCAxIGJvb3Qgb24KKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgcm9vdCBleHQzICRyb290ZnNfc3RhcnQgJHJvb3Rmc19lbmQKKworZWNobyAiQ3JlYXRpbmcgc3dhcCBwYXJ0aXRpb24gb24gJHN3YXAiCitwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBzd2FwIGxpbnV4LXN3YXAgJHN3YXBfc3RhcnQgMTAwJQorCitwYXJ0ZWQgJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byB2ZmF0Li4uIgorbWtmcy52ZmF0ICRib290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkcm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgJHJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nIHN3YXAgcGFydGl0aW9uLi4uKCRzd2FwKSIKK21rc3dhcCAkc3dhcAorCitta2RpciAvdGd0X3Jvb3QKK21rZGlyIC9zcmNfcm9vdAorbWtkaXIgLXAgL2Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IHJvb3QgcGFydGl0aW9uCittb3VudCAkcm9vdGZzIC90Z3Rfcm9vdAorbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kMS8kMiAvc3JjX3Jvb3QKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3NyY19yb290LyogL3RndF9yb290CitpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvIF0gOyB0aGVuCisgICAgYm9vdF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgVVVJRCAke2RldmljZX0xKQorICAgIHN3YXBfcGFydF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgUEFSVFVVSUQgJHtkZXZpY2V9MykKKyAgICBlY2hvICIvZGV2L2Rpc2svYnktcGFydHV1aWQvJHN3YXBfcGFydF91dWlkICAgICAgICAgICAgICAgIHN3YXAgICAgICAgICAgICAgc3dhcCAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMCAgMCIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgIGVjaG8gIlVVSUQ9JGJvb3RfdXVpZCAgICAgICAgICAgICAgL2Jvb3QgICAgICAgICAgICB2ZmF0ICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAyIiA+PiAvdGd0X3Jvb3QvZXRjL2ZzdGFiCisgICAgIyBXZSBkb250IHdhbnQgdWRldiB0byBtb3VudCBvdXIgcm9vdCBkZXZpY2Ugd2hpbGUgd2UncmUgYm9vdGluZy4uLgorICAgIGlmIFsgLWQgL3RndF9yb290L2V0Yy91ZGV2LyBdIDsgdGhlbgorICAgICAgICBlY2hvICIke2RldmljZX0iID4+IC90Z3Rfcm9vdC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3QKKyAgICBmaQorZmkKKwordW1vdW50IC9zcmNfcm9vdAorCisjIEhhbmRsaW5nIG9mIHRoZSB0YXJnZXQgYm9vdCBwYXJ0aXRpb24KK21vdW50ICRib290ZnMgL2Jvb3QKK2VjaG8gIlByZXBhcmluZyBib290IHBhcnRpdGlvbi4uLiIKKworRUZJRElSPSIvYm9vdC9FRkkvQk9PVCIKK21rZGlyIC1wICRFRklESVIKKyMgQ29weSB0aGUgZWZpIGxvYWRlcgorY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC8qLmVmaSAkRUZJRElSCisKK2lmIFsgLWYgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyBdOyB0aGVuCisgICAgcm9vdF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX0yKQorICAgIEdSVUJDRkc9IiRFRklESVIvZ3J1Yi5jZmciCisgICAgY3AgL3J1bi9tZWRpYS8kMS9FRkkvQk9PVC9ncnViLmNmZyAkR1JVQkNGRworICAgICMgVXBkYXRlIGdydWIgY29uZmlnIGZvciB0aGUgaW5zdGFsbGVkIGltYWdlCisgICAgIyBEZWxldGUgdGhlIGluc3RhbGwgZW50cnkKKyAgICBzZWQgLWkgIi9tZW51ZW50cnkgJ2luc3RhbGwnLywvXn0vZCIgJEdSVUJDRkcKKyAgICAjIERlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1JVQkNGRworICAgICMgRGVsZXRlIGFueSBMQUJFTD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gTEFCRUw9W14gXSovIC8iICRHUlVCQ0ZHCisgICAgIyBEZWxldGUgYW55IHJvb3Q9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIHJvb3Q9W14gXSovIC8iICRHUlVCQ0ZHCisgICAgIyBBZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAbGludXggL3ZtbGludXogKkBsaW51eCAvdm1saW51eiByb290PVBBUlRVVUlEPSRyb290X3BhcnRfdXVpZCBydyAkcm9vdHdhaXQgcXVpZXQgQCIgJEdSVUJDRkcKK2ZpCisKK2lmIFsgLWQgL3J1bi9tZWRpYS8kMS9sb2FkZXIgXTsgdGhlbgorICAgIEdVTU1JQk9PVF9DRkdTPSIvYm9vdC9sb2FkZXIvZW50cmllcy8qLmNvbmYiCisgICAgIyBjb3B5IGNvbmZpZyBmaWxlcyBmb3IgZ3VtbWlib290CisgICAgY3AgLWRyIC9ydW4vbWVkaWEvJDEvbG9hZGVyIC9ib290CisgICAgIyBkZWxldGUgdGhlIGluc3RhbGwgZW50cnkKKyAgICBybSAtZiAvYm9vdC9sb2FkZXIvZW50cmllcy9pbnN0YWxsLmNvbmYKKyAgICAjIGRlbGV0ZSB0aGUgaW5pdHJkIGxpbmVzCisgICAgc2VkIC1pICIvaW5pdHJkIC9kIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgTEFCRUw9IHN0cmluZ3MKKyAgICBzZWQgLWkgInMvIExBQkVMPVteIF0qLyAvIiAkR1VNTUlCT09UX0NGR1MKKyAgICAjIGRlbGV0ZSBhbnkgcm9vdD0gc3RyaW5ncworICAgIHNlZCAtaSAicy8gcm9vdD1bXiBdKi8gLyIgJEdVTU1JQk9PVF9DRkdTCisgICAgIyBhZGQgdGhlIHJvb3Q9IGFuZCBvdGhlciBzdGFuZGFyZCBib290IG9wdGlvbnMKKyAgICBzZWQgLWkgInNAb3B0aW9ucyAqQG9wdGlvbnMgcm9vdD1QQVJUVVVJRD0kcm9vdHV1aWQgcncgJHJvb3R3YWl0IHF1aWV0IEAiICRHVU1NSUJPT1RfQ0ZHUworZmkKKwordW1vdW50IC90Z3Rfcm9vdAorCitjcCAvcnVuL21lZGlhLyQxL3ZtbGludXogL2Jvb3QKKwordW1vdW50IC9ib290CisKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC10ZXN0ZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2MjE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLXRlc3Rmcy5zaApAQCAtMCwwICsxLDIyMCBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDExIEludGVsCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdIFt2aWRlb19tb2RlXSBbdmdhX21vZGVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwIE1iIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24KK2Jvb3Rfc2l6ZT0yMDAKKworIyA1MCUgZm9yIHRoZSB0aGUgdGVzdCBwYXJ0aXRpb24KK3Rlc3Rmc19yYXRpbz01MAorCisjIEdldCBhIGxpc3Qgb2YgaGFyZCBkcml2ZXMKK2hkbmFtZWxpc3Q9IiIKK2xpdmVfZGV2X25hbWU9JHsxJSUvKn0KKworZWNobyAiU2VhcmNoaW5nIGZvciBoYXJkIGRyaXZlcyAuLi4iCisKK2ZvciBkZXZpY2UgaW4gYGxzIC9zeXMvYmxvY2svYDsgZG8KKyAgICBjYXNlICRkZXZpY2UgaW4KKwlsb29wKikKKyAgICAgICAgICAgICMgc2tpcCBsb29wIGRldmljZQorCSAgICA7OworCXJhbSopCisgICAgICAgICAgICAjIHNraXAgcmFtIGRldmljZQorCSAgICA7OworCSopCisJICAgICMgc2tpcCB0aGUgZGV2aWNlIExpdmVPUyBpcyBvbgorCSAgICAjIEFkZCB2YWxpZCBoYXJkIGRyaXZlIG5hbWUgdG8gdGhlIGxpc3QKKwkgICAgaWYgWyAkZGV2aWNlICE9ICRsaXZlX2Rldl9uYW1lIC1hIC1lIC9kZXYvJGRldmljZSBdOyB0aGVuCisJCWhkbmFtZWxpc3Q9IiRoZG5hbWVsaXN0ICRkZXZpY2UiCisJICAgIGZpCisJICAgIDs7CisgICAgZXNhYworZG9uZQorCitUQVJHRVRfREVWSUNFX05BTUU9IiIKK2ZvciBoZG5hbWUgaW4gJGhkbmFtZWxpc3Q7IGRvCisgICAgIyBEaXNwbGF5IGZvdW5kIGhhcmQgZHJpdmVzIGFuZCB0aGVpciBiYXNpYyBpbmZvCisgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICBlY2hvIC9kZXYvJGhkbmFtZQorICAgIGlmIFsgLXIgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS92ZW5kb3IgXTsgdGhlbgorCWVjaG8gLW4gIlZFTkRPUj0iCisJY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yCisgICAgZmkKKyAgICBlY2hvIC1uICJNT0RFTD0iCisgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwKKyAgICBjYXQgL3N5cy9ibG9jay8kaGRuYW1lL2RldmljZS91ZXZlbnQKKyAgICBlY2hvCisgICAgIyBHZXQgdXNlciBjaG9pY2UKKyAgICB3aGlsZSB0cnVlOyBkbworCWVjaG8gLW4gIkRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhpcyBpbWFnZSB0aGVyZT8gW3kvbl0gIgorCXJlYWQgYW5zd2VyCisJaWYgWyAiJGFuc3dlciIgPSAieSIgLW8gIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KKwkgICAgYnJlYWsKKwlmaQorCWVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgorICAgIGRvbmUKKyAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdOyB0aGVuCisJVEFSR0VUX0RFVklDRV9OQU1FPSRoZG5hbWUKKwlicmVhaworICAgIGZpCitkb25lCisKK2lmIFsgLW4gIiRUQVJHRVRfREVWSUNFX05BTUUiIF07IHRoZW4KKyAgICBlY2hvICJJbnN0YWxsaW5nIGltYWdlIG9uIC9kZXYvJFRBUkdFVF9ERVZJQ0VfTkFNRSAuLi4iCitlbHNlCisgICAgZWNobyAiTm8gaGFyZCBkcml2ZSBzZWxlY3RlZC4gSW5zdGFsbGF0aW9uIGFib3J0ZWQuIgorICAgIGV4aXQgMQorZmkKKworZGV2aWNlPSRUQVJHRVRfREVWSUNFX05BTUUKKworIworIyBUaGUgdWRldiBhdXRvbW91bnRlciBjYW4gY2F1c2UgcGFpbiBoZXJlLCBraWxsIGl0CisjCitybSAtZiAvZXRjL3VkZXYvcnVsZXMuZC9hdXRvbW91bnQucnVsZXMKK3JtIC1mIC9ldGMvdWRldi9zY3JpcHRzL21vdW50KgorCisjCisjIFVubW91bnQgYW55dGhpbmcgdGhlIGF1dG9tb3VudGVyIGhhZCBtb3VudGVkCisjCit1bW91bnQgL2Rldi8ke2RldmljZX0qIDI+IC9kZXYvbnVsbCB8fCAvYmluL3RydWUKKworaWYgWyAhIC1iIC9kZXYvbG9vcDAgXSA7IHRoZW4KKyAgICBta25vZCAvZGV2L2xvb3AwIGIgNyAwCitmaQorCitta2RpciAtcCAvdG1wCitpZiBbICEgLUwgL2V0Yy9tdGFiIF07IHRoZW4KKwljYXQgL3Byb2MvbW91bnRzID4gL2V0Yy9tdGFiCitmaQorCitkaXNrX3NpemU9JChwYXJ0ZWQgL2Rldi8ke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCit0ZXN0ZnNfc2l6ZT0kKChkaXNrX3NpemUqdGVzdGZzX3JhdGlvLzEwMCkpCityb290ZnNfc2l6ZT0kKChkaXNrX3NpemUtYm9vdF9zaXplLXRlc3Rmc19zaXplKSkKKworcm9vdGZzX3N0YXJ0PSQoKGJvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCit0ZXN0ZnNfc3RhcnQ9JCgocm9vdGZzX2VuZCkpCisKKyMgTU1DIGRldmljZXMgYXJlIHNwZWNpYWwgaW4gYSBjb3VwbGUgb2Ygd2F5cworIyAxKSB0aGV5IHVzZSBhIHBhcnRpdGlvbiBwcmVmaXggY2hhcmFjdGVyICdwJworIyAyKSB0aGV5IGFyZSBkZXRlY3RlZCBhc3luY2hyb25vdXNseSAobmVlZCByb290d2FpdCkKK3Jvb3R3YWl0PSIiCitwYXJ0X3ByZWZpeD0iIgoraWYgWyAhICIke2RldmljZSNtbWNibGt9IiA9ICIke2RldmljZX0iIF07IHRoZW4KKwlwYXJ0X3ByZWZpeD0icCIKKwlyb290d2FpdD0icm9vdHdhaXQiCitmaQorYm9vdGZzPS9kZXYvJHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0xCityb290ZnM9L2Rldi8ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKK3Rlc3Rmcz0vZGV2LyR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MworCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkJvb3QgcGFydGl0aW9uIHNpemU6ICAgJGJvb3Rfc2l6ZSBNQiAoJGJvb3RmcykiCitlY2hvICJSb290ZnMgcGFydGl0aW9uIHNpemU6ICRyb290ZnNfc2l6ZSBNQiAoJHJvb3RmcykiCitlY2hvICJUZXN0ZnMgcGFydGl0aW9uIHNpemU6ICR0ZXN0ZnNfc2l6ZSBNQiAoJHRlc3RmcykiCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK2VjaG8gIkRlbGV0aW5nIHBhcnRpdGlvbiB0YWJsZSBvbiAvZGV2LyR7ZGV2aWNlfSAuLi4iCitkZCBpZj0vZGV2L3plcm8gb2Y9L2Rldi8ke2RldmljZX0gYnM9NTEyIGNvdW50PTIKKworZWNobyAiQ3JlYXRpbmcgbmV3IHBhcnRpdGlvbiB0YWJsZSBvbiAvZGV2LyR7ZGV2aWNlfSAuLi4iCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gbWtsYWJlbCBtc2RvcworCitlY2hvICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkYm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5IDAlICRib290X3NpemUKKworZWNobyAiQ3JlYXRpbmcgcm9vdGZzIHBhcnRpdGlvbiBvbiAkcm9vdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICRyb290ZnNfc3RhcnQgJHJvb3Rmc19lbmQKKworZWNobyAiQ3JlYXRpbmcgdGVzdGZzIHBhcnRpdGlvbiBvbiAkdGVzdGZzIgorcGFydGVkIC9kZXYvJHtkZXZpY2V9IG1rcGFydCBwcmltYXJ5ICR0ZXN0ZnNfc3RhcnQgMTAwJQorCitwYXJ0ZWQgL2Rldi8ke2RldmljZX0gcHJpbnQKKworZWNobyAiRm9ybWF0dGluZyAkYm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgImJvb3QiICRib290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkcm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgLUwgInJvb3RmcyIgJHJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nICR0ZXN0ZnMgdG8gZXh0My4uLiIKK21rZnMuZXh0MyAtTCAidGVzdHJvb3RmcyIgJHRlc3RmcworCitta2RpciAvdGd0X3Jvb3QKK21rZGlyIC9zcmNfcm9vdAorbWtkaXIgLXAgL2Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IHJvb3QgcGFydGl0aW9uCittb3VudCAkcm9vdGZzIC90Z3Rfcm9vdAorbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kMS8kMiAvc3JjX3Jvb3QKKworZWNobyAiQ29weWluZyByb290ZnMgZmlsZXMuLi4iCitjcCAtYSAvc3JjX3Jvb3QvKiAvdGd0X3Jvb3QKKwordG91Y2ggL3RndF9yb290L2V0Yy9tYXN0ZXJpbWFnZQorCitpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvIF0gOyB0aGVuCisgICAgZWNobyAiJGJvb3RmcyAgICAgICAgICAgICAgL2Jvb3QgICAgICAgICAgICBleHQzICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAxICAyIiA+PiAvdGd0X3Jvb3QvZXRjL2ZzdGFiCisgICAgIyBXZSBkb250IHdhbnQgdWRldiB0byBtb3VudCBvdXIgcm9vdCBkZXZpY2Ugd2hpbGUgd2UncmUgYm9vdGluZy4uLgorICAgIGlmIFsgLWQgL3RndF9yb290L2V0Yy91ZGV2LyBdIDsgdGhlbgorCWVjaG8gIi9kZXYvJHtkZXZpY2V9IiA+PiAvdGd0X3Jvb3QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCit1bW91bnQgL3RndF9yb290Cit1bW91bnQgL3NyY19yb290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCBib290IHBhcnRpdGlvbgorbW91bnQgJGJvb3RmcyAvYm9vdAorZWNobyAiUHJlcGFyaW5nIGJvb3QgcGFydGl0aW9uLi4uIgoraWYgWyAtZiAvZXRjL2dydWIuZC8wMF9oZWFkZXIgXSA7IHRoZW4KKyAgICBlY2hvICJQcmVwYXJpbmcgY3VzdG9tIGdydWIyIG1lbnUuLi4iCisgICAgR1JVQkNGRz0iL2Jvb3QvZ3J1Yi9ncnViLmNmZyIKKyAgICBta2RpciAtcCAkKGRpcm5hbWUgJEdSVUJDRkcpCisgICAgY2F0ID4kR1JVQkNGRyA8PF9FT0YgCitzZXJpYWwgLS1zcGVlZD0xMTUyMDAgLS11bml0PTAgLS13b3JkPTggLS1wYXJpdHk9bm8gLS1zdG9wPTEKK3Rlcm1pbmFsX2lucHV0IC0tYXBwZW5kICBzZXJpYWwKK3Rlcm1pbmFsX291dHB1dCAtLWFwcGVuZCBzZXJpYWwKK3NldCB0aW1lb3V0X3N0eWxlPWhpZGRlbgorc2V0IHRpbWVvdXQ9NQorbWVudWVudHJ5ICJMaW51eCIgeworICAgIHNldCByb290PShoZDAsMSkKKyAgICBsaW51eCAvdm1saW51eiByb290PSRyb290ZnMgJHJvb3R3YWl0IHJ3ICQ1ICQzICQ0IHF1aWV0Cit9CitfRU9GCisgICAgIyBBZGQgdGhlIHRlc3QgbGFiZWwKKyAgICBlY2hvIC1uZSAiXG5tZW51ZW50cnkgJ3Rlc3QnIC0taG90a2V5IHgge1xubGludXggL3Rlc3Qta2VybmVsIHJvb3Q9JHRlc3RmcyBydyAkcm9vdHdhaXQgcXVpZXRcbn1cbiIgPj4gJEdSVUJDRkcKKworICAgIGNobW9kIDA0NDQgJEdSVUJDRkcKK2ZpCitncnViLWluc3RhbGwgL2Rldi8ke2RldmljZX0KK2VjaG8gIihoZDApIC9kZXYvJHtkZXZpY2V9IiA+IC9ib290L2dydWIvZGV2aWNlLm1hcAorCisjIElmIGdydWIuY2ZnIGRvZXNuJ3QgZXhpc3QsIGFzc3VtZSBHUlVCIDAuOTcgYW5kIGNyZWF0ZSBhIG1lbnUubHN0CitpZiBbICEgLWYgL2Jvb3QvZ3J1Yi9ncnViLmNmZyBdIDsgdGhlbgorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YiBtZW51Li4uIgorICAgIGVjaG8gImRlZmF1bHQgMCIgPiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGltZW91dCAzMCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gInRpdGxlIExpdmUgQm9vdC9JbnN0YWxsLUltYWdlIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAicm9vdCAgKGhkMCwwKSIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorICAgIGVjaG8gImtlcm5lbCAvdm1saW51eiByb290PSRyb290ZnMgcncgJDMgJDQgcXVpZXQiID4+IC9ib290L2dydWIvbWVudS5sc3QKK2ZpCisKK2NwIC9ydW4vbWVkaWEvJDEvdm1saW51eiAvYm9vdC8KKwordW1vdW50IC9ib290CisKK3N5bmMKKworZWNobyAiUmVtb3ZlIHlvdXIgaW5zdGFsbGF0aW9uIG1lZGlhLCBhbmQgcHJlc3MgRU5URVIiCisKK3JlYWQgZW50ZXIKKworZWNobyAiUmVib290aW5nLi4uIgorcmVib290IC1mCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1pbnN0YWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTk3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2ZpbGVzL2luaXQtaW5zdGFsbC5zaApAQCAtMCwwICsxLDI3MiBAQAorIyEvYmluL3NoIC1lCisjCisjIENvcHlyaWdodCAoQykgMjAwOC0yMDExIEludGVsCisjCisjIGluc3RhbGwuc2ggW2RldmljZV9uYW1lXSBbcm9vdGZzX25hbWVdIFt2aWRlb19tb2RlXSBbdmdhX21vZGVdCisjCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBXZSBuZWVkIDIwIE1iIGZvciB0aGUgYm9vdCBwYXJ0aXRpb24KK2Jvb3Rfc2l6ZT0yMAorCisjIDUlIGZvciB0aGUgc3dhcAorc3dhcF9yYXRpbz01CisKKyMgR2V0IGEgbGlzdCBvZiBoYXJkIGRyaXZlcworaGRuYW1lbGlzdD0iIgorbGl2ZV9kZXZfbmFtZT1gY2F0IC9wcm9jL21vdW50cyB8IGdyZXAgJHsxJS99IHwgYXdrICd7cHJpbnQgJDF9J2AKK2xpdmVfZGV2X25hbWU9JHtsaXZlX2Rldl9uYW1lI1wvZGV2L30KKyMgT25seSBzdHJpcCB0aGUgZGlnaXQgaWRlbnRpZmllciBpZiB0aGUgZGV2aWNlIGlzIG5vdCBhbiBtbWMKK2Nhc2UgJGxpdmVfZGV2X25hbWUgaW4KKyAgICBtbWNibGsqKQorICAgIDs7CisgICAgKikKKyAgICAgICAgbGl2ZV9kZXZfbmFtZT0ke2xpdmVfZGV2X25hbWUlJVswLTldKn0KKyAgICA7OworZXNhYworCitlY2hvICJTZWFyY2hpbmcgZm9yIGhhcmQgZHJpdmVzIC4uLiIKKworZm9yIGRldmljZSBpbiBgbHMgL3N5cy9ibG9jay9gOyBkbworICAgIGNhc2UgJGRldmljZSBpbgorICAgICAgICBsb29wKikKKyAgICAgICAgICAgICMgc2tpcCBsb29wIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgc3IqKQorICAgICAgICAgICAgIyBza2lwIENEUk9NIGRldmljZQorICAgICAgICAgICAgOzsKKyAgICAgICAgcmFtKikKKyAgICAgICAgICAgICMgc2tpcCByYW0gZGV2aWNlCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgIyBza2lwIHRoZSBkZXZpY2UgTGl2ZU9TIGlzIG9uCisgICAgICAgICAgICAjIEFkZCB2YWxpZCBoYXJkIGRyaXZlIG5hbWUgdG8gdGhlIGxpc3QKKyAgICAgICAgICAgIGNhc2UgJGRldmljZSBpbgorICAgICAgICAgICAgICAgICRsaXZlX2Rldl9uYW1lKikKKyAgICAgICAgICAgICAgICAjIHNraXAgdGhlIGRldmljZSB3ZSBhcmUgcnVubmluZyBmcm9tCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICBoZG5hbWVsaXN0PSIkaGRuYW1lbGlzdCAkZGV2aWNlIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworVEFSR0VUX0RFVklDRV9OQU1FPSIiCitmb3IgaGRuYW1lIGluICRoZG5hbWVsaXN0OyBkbworICAgICMgRGlzcGxheSBmb3VuZCBoYXJkIGRyaXZlcyBhbmQgdGhlaXIgYmFzaWMgaW5mbworICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZWNobyAvZGV2LyRoZG5hbWUKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yIF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVkVORE9SPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdmVuZG9yCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvbW9kZWwgXTsgdGhlbgorICAgICAgICBlY2hvIC1uICJNT0RFTD0iCisgICAgICAgIGNhdCAvc3lzL2Jsb2NrLyRoZG5hbWUvZGV2aWNlL21vZGVsCisgICAgZmkKKyAgICBpZiBbIC1yIC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50IF07IHRoZW4KKyAgICAgICAgZWNobyAtbiAiVUVWRU5UPSIKKyAgICAgICAgY2F0IC9zeXMvYmxvY2svJGhkbmFtZS9kZXZpY2UvdWV2ZW50CisgICAgZmkKKyAgICBlY2hvCisgICAgIyBHZXQgdXNlciBjaG9pY2UKKyAgICB3aGlsZSB0cnVlOyBkbworICAgICAgICBlY2hvIC1uICJEbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgaW1hZ2UgdGhlcmU/IFt5L25dICIKKyAgICAgICAgcmVhZCBhbnN3ZXIKKyAgICAgICAgaWYgWyAiJGFuc3dlciIgPSAieSIgLW8gIiRhbnN3ZXIiID0gIm4iIF07IHRoZW4KKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIGVjaG8gIlBsZWFzZSBhbnN3ZXIgeSBvciBuIgorICAgIGRvbmUKKyAgICBpZiBbICIkYW5zd2VyIiA9ICJ5IiBdOyB0aGVuCisgICAgICAgIFRBUkdFVF9ERVZJQ0VfTkFNRT0kaGRuYW1lCisgICAgICAgIGJyZWFrCisgICAgZmkKK2RvbmUKKworaWYgWyAtbiAiJFRBUkdFVF9ERVZJQ0VfTkFNRSIgXTsgdGhlbgorICAgIGVjaG8gIkluc3RhbGxpbmcgaW1hZ2Ugb24gL2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FIC4uLiIKK2Vsc2UKKyAgICBlY2hvICJObyBoYXJkIGRyaXZlIHNlbGVjdGVkLiBJbnN0YWxsYXRpb24gYWJvcnRlZC4iCisgICAgZXhpdCAxCitmaQorCitkZXZpY2U9L2Rldi8kVEFSR0VUX0RFVklDRV9OQU1FCisKKyMKKyMgVGhlIHVkZXYgYXV0b21vdW50ZXIgY2FuIGNhdXNlIHBhaW4gaGVyZSwga2lsbCBpdAorIworcm0gLWYgL2V0Yy91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCitybSAtZiAvZXRjL3VkZXYvc2NyaXB0cy9tb3VudCoKKworIworIyBVbm1vdW50IGFueXRoaW5nIHRoZSBhdXRvbW91bnRlciBoYWQgbW91bnRlZAorIwordW1vdW50ICR7ZGV2aWNlfSogMj4gL2Rldi9udWxsIHx8IC9iaW4vdHJ1ZQorCitpZiBbICEgLWIgL2Rldi9sb29wMCBdIDsgdGhlbgorICAgIG1rbm9kIC9kZXYvbG9vcDAgYiA3IDAKK2ZpCisKK21rZGlyIC1wIC90bXAKK2lmIFsgISAtTCAvZXRjL210YWIgXTsgdGhlbgorICAgIGNhdCAvcHJvYy9tb3VudHMgPiAvZXRjL210YWIKK2ZpCisKK2Rpc2tfc2l6ZT0kKHBhcnRlZCAke2RldmljZX0gdW5pdCBtYiBwcmludCB8IGdyZXAgRGlzayB8IGN1dCAtZCIgIiAtZiAzIHwgc2VkIC1lICJzL01CLy8iKQorCitncnViX3ZlcnNpb249JChncnViLWluc3RhbGwgLXZ8c2VkICdzLy4qIFwoWzAtOV1cKS4qL1wxLycpCisKK2lmIFsgJGdydWJfdmVyc2lvbiAtZXEgMCBdIDsgdGhlbgorICAgIGJpb3NfYm9vdF9zaXplPTAKK2Vsc2UKKyAgICAjIEZvciBHUlVCIDIgd2UgbmVlZCBzZXBhcmF0ZSBwYXJpdGlvbiB0byBzdG9yZSBzdGFnZTIgZ3J1YiBpbWFnZQorICAgICMgMk1iIHZhbHVlIGlzIGNob3NlbiB0byBhbGlnbiBwYXJ0aXRpb24gZm9yIGJlc3QgcGVyZm9ybWFuY2UuCisgICAgYmlvc19ib290X3NpemU9MgorZmkKKworc3dhcF9zaXplPSQoKGRpc2tfc2l6ZSpzd2FwX3JhdGlvLzEwMCkpCityb290ZnNfc2l6ZT0kKChkaXNrX3NpemUtYmlvc19ib290X3NpemUtYm9vdF9zaXplLXN3YXBfc2l6ZSkpCisKK2Jvb3Rfc3RhcnQ9JCgoYmlvc19ib290X3NpemUpKQorcm9vdGZzX3N0YXJ0PSQoKGJpb3NfYm9vdF9zaXplK2Jvb3Rfc2l6ZSkpCityb290ZnNfZW5kPSQoKHJvb3Rmc19zdGFydCtyb290ZnNfc2l6ZSkpCitzd2FwX3N0YXJ0PSQoKHJvb3Rmc19lbmQpKQorCisjIE1NQyBkZXZpY2VzIGFyZSBzcGVjaWFsIGluIGEgY291cGxlIG9mIHdheXMKKyMgMSkgdGhleSB1c2UgYSBwYXJ0aXRpb24gcHJlZml4IGNoYXJhY3RlciAncCcKKyMgMikgdGhleSBhcmUgZGV0ZWN0ZWQgYXN5bmNocm9ub3VzbHkgKG5lZWQgcm9vdHdhaXQpCityb290d2FpdD0iIgorcGFydF9wcmVmaXg9IiIKK2lmIFsgISAiJHtkZXZpY2UjbW1jYmxrfSIgPSAiJHtkZXZpY2V9IiBdOyB0aGVuCisgICAgcGFydF9wcmVmaXg9InAiCisgICAgcm9vdHdhaXQ9InJvb3R3YWl0IgorZmkKKworaWYgWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gOyB0aGVuCisgICAgYmlvc19ib290PScnCisgICAgYm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MQorICAgIHJvb3Rmcz0ke2RldmljZX0ke3BhcnRfcHJlZml4fTIKKyAgICBzd2FwPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MworZWxzZQorICAgIGJpb3NfYm9vdD0ke2RldmljZX0ke3BhcnRfcHJlZml4fTEKKyAgICBib290ZnM9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH0yCisgICAgcm9vdGZzPSR7ZGV2aWNlfSR7cGFydF9wcmVmaXh9MworICAgIHN3YXA9JHtkZXZpY2V9JHtwYXJ0X3ByZWZpeH00CitmaQorCitlY2hvICIqKioqKioqKioqKioqKioqKiIKK1sgJGdydWJfdmVyc2lvbiAtbmUgMCBdICYmIGVjaG8gIkJJT1MgYm9vdCBwYXJ0aXRpb24gc2l6ZTogJGJpb3NfYm9vdF9zaXplIE1CICgkYmlvc19ib290KSIKK2VjaG8gIkJvb3QgcGFydGl0aW9uIHNpemU6ICAgJGJvb3Rfc2l6ZSBNQiAoJGJvb3RmcykiCitlY2hvICJSb290ZnMgcGFydGl0aW9uIHNpemU6ICRyb290ZnNfc2l6ZSBNQiAoJHJvb3RmcykiCitlY2hvICJTd2FwIHBhcnRpdGlvbiBzaXplOiAgICRzd2FwX3NpemUgTUIgKCRzd2FwKSIKK2VjaG8gIioqKioqKioqKioqKioqKioqIgorZWNobyAiRGVsZXRpbmcgcGFydGl0aW9uIHRhYmxlIG9uICR7ZGV2aWNlfSAuLi4iCitkZCBpZj0vZGV2L3plcm8gb2Y9JHtkZXZpY2V9IGJzPTUxMiBjb3VudD0zNQorCitlY2hvICJDcmVhdGluZyBuZXcgcGFydGl0aW9uIHRhYmxlIG9uICR7ZGV2aWNlfSAuLi4iCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rdGFibGUgbXNkb3MKKyAgICBlY2hvICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkYm9vdGZzIgorICAgIHBhcnRlZCAke2RldmljZX0gbWtwYXJ0IHByaW1hcnkgZXh0MyAwJSAkYm9vdF9zaXplCitlbHNlCisgICAgcGFydGVkICR7ZGV2aWNlfSBta3RhYmxlIGdwdAorICAgIGVjaG8gIkNyZWF0aW5nIEJJT1MgYm9vdCBwYXJ0aXRpb24gb24gJGJpb3NfYm9vdCIKKyAgICBwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCBiaW9zX2Jvb3QgMCUgJGJpb3NfYm9vdF9zaXplCisgICAgcGFydGVkICR7ZGV2aWNlfSBzZXQgMSBiaW9zX2dydWIgb24KKyAgICBlY2hvICJDcmVhdGluZyBib290IHBhcnRpdGlvbiBvbiAkYm9vdGZzIgorICAgIHBhcnRlZCAke2RldmljZX0gbWtwYXJ0IGJvb3QgZXh0MyAkYm9vdF9zdGFydCAkYm9vdF9zaXplCitmaQorCitlY2hvICJDcmVhdGluZyByb290ZnMgcGFydGl0aW9uIG9uICRyb290ZnMiCitbICRncnViX3ZlcnNpb24gLWVxIDAgXSAmJiBwbmFtZT0ncHJpbWFyeScgfHwgcG5hbWU9J3Jvb3QnCitwYXJ0ZWQgJHtkZXZpY2V9IG1rcGFydCAkcG5hbWUgZXh0MyAkcm9vdGZzX3N0YXJ0ICRyb290ZnNfZW5kCisKK2VjaG8gIkNyZWF0aW5nIHN3YXAgcGFydGl0aW9uIG9uICRzd2FwIgorWyAkZ3J1Yl92ZXJzaW9uIC1lcSAwIF0gJiYgcG5hbWU9J3ByaW1hcnknIHx8IHBuYW1lPSdzd2FwJworcGFydGVkICR7ZGV2aWNlfSBta3BhcnQgJHBuYW1lIGxpbnV4LXN3YXAgJHN3YXBfc3RhcnQgMTAwJQorCitwYXJ0ZWQgJHtkZXZpY2V9IHByaW50CisKK2VjaG8gIkZvcm1hdHRpbmcgJGJvb3RmcyB0byBleHQzLi4uIgorbWtmcy5leHQzICRib290ZnMKKworZWNobyAiRm9ybWF0dGluZyAkcm9vdGZzIHRvIGV4dDMuLi4iCitta2ZzLmV4dDMgJHJvb3RmcworCitlY2hvICJGb3JtYXR0aW5nIHN3YXAgcGFydGl0aW9uLi4uKCRzd2FwKSIKK21rc3dhcCAkc3dhcAorCitta2RpciAvdGd0X3Jvb3QKK21rZGlyIC9zcmNfcm9vdAorbWtkaXIgLXAgL2Jvb3QKKworIyBIYW5kbGluZyBvZiB0aGUgdGFyZ2V0IHJvb3QgcGFydGl0aW9uCittb3VudCAkcm9vdGZzIC90Z3Rfcm9vdAorbW91bnQgLW8gcncsbG9vcCxub2F0aW1lLG5vZGlyYXRpbWUgL3J1bi9tZWRpYS8kMS8kMiAvc3JjX3Jvb3QKK2VjaG8gIkNvcHlpbmcgcm9vdGZzIGZpbGVzLi4uIgorY3AgLWEgL3NyY19yb290LyogL3RndF9yb290CitpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvIF0gOyB0aGVuCisgICAgaWYgWyAkZ3J1Yl92ZXJzaW9uIC1uZSAwIF0gOyB0aGVuCisgICAgICAgIGJvb3RfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFVVSUQgJHtkZXZpY2V9MikKKyAgICAgICAgc3dhcF9wYXJ0X3V1aWQ9JChibGtpZCAtbyB2YWx1ZSAtcyBQQVJUVVVJRCAke2RldmljZX00KQorICAgICAgICBib290ZGV2PSJVVUlEPSRib290X3V1aWQiCisgICAgICAgIHN3YXBkZXY9L2Rldi9kaXNrL2J5LXBhcnR1dWlkLyRzd2FwX3BhcnRfdXVpZAorICAgIGVsc2UKKyAgICAgICAgYm9vdGRldj0ke2RldmljZX0yCisgICAgICAgIHN3YXBkZXY9JHtkZXZpY2V9NAorICAgIGZpCisgICAgZWNobyAiJHN3YXBkZXYgICAgICAgICAgICAgICAgc3dhcCAgICAgICAgICAgICBzd2FwICAgICAgIGRlZmF1bHRzICAgICAgICAgICAgICAwICAwIiA+PiAvdGd0X3Jvb3QvZXRjL2ZzdGFiCisgICAgZWNobyAiJGJvb3RkZXYgICAgICAgICAgICAgIC9ib290ICAgICAgICAgICAgZXh0MyAgICAgICBkZWZhdWx0cyAgICAgICAgICAgICAgMSAgMiIgPj4gL3RndF9yb290L2V0Yy9mc3RhYgorICAgICMgV2UgZG9udCB3YW50IHVkZXYgdG8gbW91bnQgb3VyIHJvb3QgZGV2aWNlIHdoaWxlIHdlJ3JlIGJvb3RpbmcuLi4KKyAgICBpZiBbIC1kIC90Z3Rfcm9vdC9ldGMvdWRldi8gXSA7IHRoZW4KKyAgICAgICAgZWNobyAiJHtkZXZpY2V9IiA+PiAvdGd0X3Jvb3QvZXRjL3VkZXYvbW91bnQuYmxhY2tsaXN0CisgICAgZmkKK2ZpCit1bW91bnQgL3RndF9yb290Cit1bW91bnQgL3NyY19yb290CisKKyMgSGFuZGxpbmcgb2YgdGhlIHRhcmdldCBib290IHBhcnRpdGlvbgorbW91bnQgJGJvb3RmcyAvYm9vdAorZWNobyAiUHJlcGFyaW5nIGJvb3QgcGFydGl0aW9uLi4uIgoraWYgWyAtZiAvZXRjL2dydWIuZC8wMF9oZWFkZXIgLWEgJGdydWJfdmVyc2lvbiAtbmUgMCBdIDsgdGhlbgorICAgIGVjaG8gIlByZXBhcmluZyBjdXN0b20gZ3J1YjIgbWVudS4uLiIKKyAgICByb290X3BhcnRfdXVpZD0kKGJsa2lkIC1vIHZhbHVlIC1zIFBBUlRVVUlEICR7ZGV2aWNlfTMpCisgICAgYm9vdF91dWlkPSQoYmxraWQgLW8gdmFsdWUgLXMgVVVJRCAke2RldmljZX0yKQorICAgIEdSVUJDRkc9Ii9ib290L2dydWIvZ3J1Yi5jZmciCisgICAgbWtkaXIgLXAgJChkaXJuYW1lICRHUlVCQ0ZHKQorICAgIGNhdCA+JEdSVUJDRkcgPDxfRU9GCittZW51ZW50cnkgIkxpbnV4IiB7CisgICAgc2VhcmNoIC0tbm8tZmxvcHB5IC0tZnMtdXVpZCAkYm9vdF91dWlkIC0tc2V0IHJvb3QKKyAgICBsaW51eCAvdm1saW51eiByb290PVBBUlRVVUlEPSRyb290X3BhcnRfdXVpZCAkcm9vdHdhaXQgcncgJDUgJDMgJDQgcXVpZXQKK30KK19FT0YKKyAgICBjaG1vZCAwNDQ0ICRHUlVCQ0ZHCitmaQorZ3J1Yi1pbnN0YWxsICR7ZGV2aWNlfQorCitpZiBbICRncnViX3ZlcnNpb24gLWVxIDAgXSA7IHRoZW4KKyAgICBlY2hvICIoaGQwKSAke2RldmljZX0iID4gL2Jvb3QvZ3J1Yi9kZXZpY2UubWFwCisgICAgZWNobyAiUHJlcGFyaW5nIGN1c3RvbSBncnViIG1lbnUuLi4iCisgICAgZWNobyAiZGVmYXVsdCAwIiA+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJ0aW1lb3V0IDMwIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAidGl0bGUgTGl2ZSBCb290L0luc3RhbGwtSW1hZ2UiID4+IC9ib290L2dydWIvbWVudS5sc3QKKyAgICBlY2hvICJyb290ICAoaGQwLDApIiA+PiAvYm9vdC9ncnViL21lbnUubHN0CisgICAgZWNobyAia2VybmVsIC92bWxpbnV6IHJvb3Q9JHJvb3RmcyBydyAkMyAkNCBxdWlldCIgPj4gL2Jvb3QvZ3J1Yi9tZW51LmxzdAorZmkKKworY3AgL3J1bi9tZWRpYS8kMS92bWxpbnV6IC9ib290LworCit1bW91bnQgL2Jvb3QKKworc3luYworCitlY2hvICJSZW1vdmUgeW91ciBpbnN0YWxsYXRpb24gbWVkaWEsIGFuZCBwcmVzcyBFTlRFUiIKKworcmVhZCBlbnRlcgorCitlY2hvICJSZWJvb3RpbmcuLi4iCityZWJvb3QgLWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9maWxlcy9pbml0LWxpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MmM1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvZmlsZXMvaW5pdC1saXZlLnNoCkBAIC0wLDAgKzEsMjM1IEBACisjIS9iaW4vc2gKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCitST09UX01PVU5UPSIvcm9vdGZzLyIKK1JPT1RfSU1BR0U9InJvb3Rmcy5pbWciCitNT1VOVD0iL2Jpbi9tb3VudCIKK1VNT1VOVD0iL2Jpbi91bW91bnQiCitJU09MSU5VWD0iIgorCitST09UX0RJU0s9IiIKKworIyBDb3BpZWQgZnJvbSBpbml0cmFtZnMtZnJhbWV3b3JrLiBUaGUgY29yZSBvZiB0aGlzIHNjcmlwdCBwcm9iYWJseSBzaG91bGQgYmUKKyMgdHVybmVkIGludG8gaW5pdHJhbWZzLWZyYW1ld29yayBtb2R1bGVzIHRvIHJlZHVjZSBkdXBsaWNhdGlvbi4KK3VkZXZfZGFlbW9uKCkgeworCU9QVElPTlM9Ii9zYmluL3VkZXYvdWRldmQgL3NiaW4vdWRldmQgL2xpYi91ZGV2L3VkZXZkIC9saWIvc3lzdGVtZC9zeXN0ZW1kLXVkZXZkIgorCisJZm9yIG8gaW4gJE9QVElPTlM7IGRvCisJCWlmIFsgLXggIiRvIiBdOyB0aGVuCisJCQllY2hvICRvCisJCQlyZXR1cm4gMAorCQlmaQorCWRvbmUKKworCXJldHVybiAxCit9CisKK19VREVWX0RBRU1PTj1gdWRldl9kYWVtb25gCisKK2Vhcmx5X3NldHVwKCkgeworICAgIG1rZGlyIC1wIC9wcm9jCisgICAgbWtkaXIgLXAgL3N5cworICAgIG1vdW50IC10IHByb2MgcHJvYyAvcHJvYworICAgIG1vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKKyAgICBtb3VudCAtdCBkZXZ0bXBmcyBub25lIC9kZXYKKworICAgICMgc3VwcG9ydCBtb2R1bGFyIGtlcm5lbAorICAgIG1vZHByb2JlIGlzb2ZzIDI+IC9kZXYvbnVsbAorCisgICAgbWtkaXIgLXAgL3J1bgorICAgIG1rZGlyIC1wIC92YXIvcnVuCisKKyAgICAkX1VERVZfREFFTU9OIC0tZGFlbW9uCisgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZAorfQorCityZWFkX2FyZ3MoKSB7CisgICAgWyAteiAiJENNRExJTkUiIF0gJiYgQ01ETElORT1gY2F0IC9wcm9jL2NtZGxpbmVgCisgICAgZm9yIGFyZyBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgb3B0YXJnPWBleHByICJ4JGFyZyIgOiAneFtePV0qPVwoLipcKSdgCisgICAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgICAgICAgcm9vdD0qKQorICAgICAgICAgICAgICAgIFJPT1RfREVWSUNFPSRvcHRhcmcgOzsKKyAgICAgICAgICAgIHJvb3RpbWFnZT0qKQorICAgICAgICAgICAgICAgIFJPT1RfSU1BR0U9JG9wdGFyZyA7OworICAgICAgICAgICAgcm9vdGZzdHlwZT0qKQorICAgICAgICAgICAgICAgIG1vZHByb2JlICRvcHRhcmcgMj4gL2Rldi9udWxsIDs7CisgICAgICAgICAgICBMQUJFTD0qKQorICAgICAgICAgICAgICAgIGxhYmVsPSRvcHRhcmcgOzsKKyAgICAgICAgICAgIHZpZGVvPSopCisgICAgICAgICAgICAgICAgdmlkZW9fbW9kZT0kYXJnIDs7CisgICAgICAgICAgICB2Z2E9KikKKyAgICAgICAgICAgICAgICB2Z2FfbW9kZT0kYXJnIDs7CisgICAgICAgICAgICBjb25zb2xlPSopCisgICAgICAgICAgICAgICAgaWYgWyAteiAiJHtjb25zb2xlX3BhcmFtc30iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY29uc29sZV9wYXJhbXM9JGFyZworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZV9wYXJhbXM9IiRjb25zb2xlX3BhcmFtcyAkYXJnIgorICAgICAgICAgICAgICAgIGZpIDs7CisgICAgICAgICAgICBkZWJ1Z3NoZWxsKikKKyAgICAgICAgICAgICAgICBpZiBbIC16ICIkb3B0YXJnIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbHRpbWVvdXQ9MzAKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbHRpbWVvdXQ9JG9wdGFyZworICAgICAgICAgICAgICAgIGZpIAorICAgICAgICBlc2FjCisgICAgZG9uZQorfQorCitib290X2xpdmVfcm9vdCgpIHsKKyAgICAjIFdhdGNoZXMgdGhlIHVkZXYgZXZlbnQgcXVldWUsIGFuZCBleGl0cyBpZiBhbGwgY3VycmVudCBldmVudHMgYXJlIGhhbmRsZWQKKyAgICB1ZGV2YWRtIHNldHRsZSAtLXRpbWVvdXQ9MyAtLXF1aWV0CisgICAga2lsbGFsbCAiJHtfVURFVl9EQUVNT04jIyovfSIgMj4vZGV2L251bGwKKworICAgICMgQWxsb3cgZm9yIGlkZW50aWZpY2F0aW9uIG9mIHRoZSByZWFsIHJvb3QgZXZlbiBhZnRlciBib290CisgICAgbWtkaXIgLXAgICR7Uk9PVF9NT1VOVH0vbWVkaWEvcmVhbHJvb3QKKyAgICBtb3VudCAtbiAtLW1vdmUgIi9ydW4vbWVkaWEvJHtST09UX0RJU0t9IiAke1JPT1RfTU9VTlR9L21lZGlhL3JlYWxyb290CisKKyAgICAjIE1vdmUgdGhlIG1vdW50IHBvaW50cyBvZiBzb21lIGZpbGVzeXN0ZW1zIG92ZXIgdG8KKyAgICAjIHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdG9yaWVzIHVuZGVyIHRoZSByZWFsIHJvb3QgZmlsZXN5c3RlbS4KKyAgICBmb3IgZGlyIGluIGBhd2sgJy9cL2Rldi4qIFwvcnVuXC9tZWRpYS97cHJpbnQgJDJ9JyAvcHJvYy9tb3VudHNgOyBkbworICAgICAgICBta2RpciAtcCAgJHtST09UX01PVU5UfS9tZWRpYS8ke2RpciMjKi99CisgICAgICAgIG1vdW50IC1uIC0tbW92ZSAkZGlyICR7Uk9PVF9NT1VOVH0vbWVkaWEvJHtkaXIjIyovfQorICAgIGRvbmUKKyAgICBtb3VudCAtbiAtLW1vdmUgL3Byb2MgJHtST09UX01PVU5UfS9wcm9jCisgICAgbW91bnQgLW4gLS1tb3ZlIC9zeXMgJHtST09UX01PVU5UfS9zeXMKKyAgICBtb3VudCAtbiAtLW1vdmUgL2RldiAke1JPT1RfTU9VTlR9L2RldgorCisgICAgY2QgJFJPT1RfTU9VTlQKKworICAgICMgYnVzeWJveCBzd2l0Y2hfcm9vdCBzdXBwb3J0cyAtYyBvcHRpb24KKyAgICBleGVjIHN3aXRjaF9yb290IC1jIC9kZXYvY29uc29sZSAkUk9PVF9NT1VOVCAvc2Jpbi9pbml0ICRDTURMSU5FIHx8CisgICAgICAgIGZhdGFsICJDb3VsZG4ndCBzd2l0Y2hfcm9vdCwgZHJvcHBpbmcgdG8gc2hlbGwiCit9CisKK2ZhdGFsKCkgeworICAgIGVjaG8gJDEgPiRDT05TT0xFCisgICAgZWNobyA+JENPTlNPTEUKKyAgICBleGVjIHNoCit9CisKK2Vhcmx5X3NldHVwCisKK1sgLXogIiRDT05TT0xFIiBdICYmIENPTlNPTEU9Ii9kZXYvY29uc29sZSIKKworcmVhZF9hcmdzCisKK2VjaG8gIldhaXRpbmcgZm9yIHJlbW92YWJsZSBtZWRpYS4uLiIKK0M9MAord2hpbGUgdHJ1ZQorZG8KKyAgZm9yIGkgaW4gYGxzIC9ydW4vbWVkaWEgMj4vZGV2L251bGxgOyBkbworICAgICAgaWYgWyAtZiAvcnVuL21lZGlhLyRpLyRST09UX0lNQUdFIF0gOyB0aGVuCisJCWZvdW5kPSJ5ZXMiCisJCVJPT1RfRElTSz0iJGkiCisJCWJyZWFrCisJICBlbGlmIFsgLWYgL3J1bi9tZWRpYS8kaS9pc29saW51eC8kUk9PVF9JTUFHRSBdOyB0aGVuCisJCWZvdW5kPSJ5ZXMiCisJCUlTT0xJTlVYPSJpc29saW51eCIKKwkJUk9PVF9ESVNLPSIkaSIKKwkJYnJlYWsJCisgICAgICBmaQorICBkb25lCisgIGlmIFsgIiRmb3VuZCIgPSAieWVzIiBdOyB0aGVuCisgICAgICBicmVhazsKKyAgZmkKKyAgIyBkb24ndCB3YWl0IGZvciBtb3JlIHRoYW4gJHNoZWxsdGltZW91dCBzZWNvbmRzLCBpZiBpdCdzIHNldAorICBpZiBbIC1uICIkc2hlbGx0aW1lb3V0IiBdOyB0aGVuCisgICAgICBlY2hvIC1uICIgIiAkKCggJHNoZWxsdGltZW91dCAtICRDICkpCisgICAgICBpZiBbICRDIC1nZSAkc2hlbGx0aW1lb3V0IF07IHRoZW4KKyAgICAgICAgICAgZWNobyAiLi4uIgorCSAgIGVjaG8gIk1vdW50ZWQgZmlsZXN5c3RlbXMiCisgICAgICAgICAgIG1vdW50IHwgZ3JlcCBtZWRpYQorICAgICAgICAgICBlY2hvICJBdmFpbGFibGUgYmxvY2sgZGV2aWNlcyIKKyAgICAgICAgICAgY2F0IC9wcm9jL3BhcnRpdGlvbnMKKyAgICAgICAgICAgZmF0YWwgIkNhbm5vdCBmaW5kICRST09UX0lNQUdFIGZpbGUgaW4gL3J1bi9tZWRpYS8qICwgZHJvcHBpbmcgdG8gYSBzaGVsbCAiCisgICAgICBmaQorICAgICAgQz0kKCggQyArIDEgKSkKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorCisjIFRyeSB0byBtb3VudCB0aGUgcm9vdCBpbWFnZSByZWFkLXdyaXRlIGFuZCB0aGVuIGJvb3QgaXQgdXAuCisjIFRoaXMgZnVuY3Rpb24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGEgcmVhZC1vbmx5IGltYWdlIGFuZCBhIHJlYWQtd3JpdGUgaW1hZ2UuCisjIEluIHRoZSBmb3JtZXIgY2FzZSAodHlwaWNhbGx5IGFuIGlzbyksIGl0IHRyaWVzIHRvIG1ha2UgYSB1bmlvbiBtb3VudCBpZiBwb3NzaWJsZS4KKyMgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgcm9vdCBpbWFnZSBjb3VsZCBiZSBtb3VudGVkIGFuZCB0aGVuIGRpcmVjdGx5IGJvb3RlZCB1cC4KK21vdW50X2FuZF9ib290KCkgeworICAgIG1rZGlyICRST09UX01PVU5UCisgICAgbWtub2QgL2Rldi9sb29wMCBiIDcgMCAyPi9kZXYvbnVsbAorCisgICAgaWYgISBtb3VudCAtbyBydyxsb29wLG5vYXRpbWUsbm9kaXJhdGltZSAvcnVuL21lZGlhLyRST09UX0RJU0svJElTT0xJTlVYLyRST09UX0lNQUdFICRST09UX01PVU5UIDsgdGhlbgorCWZhdGFsICJDb3VsZCBub3QgbW91bnQgcm9vdGZzIGltYWdlIgorICAgIGZpCisKKyAgICBpZiB0b3VjaCAkUk9PVF9NT1VOVC9iaW4gMj4vZGV2L251bGw7IHRoZW4KKwkjIFRoZSByb290IGltYWdlIGlzIHJlYWQtd3JpdGUsIGRpcmVjdGx5IGJvb3QgaXQgdXAuCisJYm9vdF9saXZlX3Jvb3QKKyAgICBmaQorCisgICAgIyBkZXRlcm1pbmUgd2hpY2ggdW5pZmljYXRpb24gZmlsZXN5c3RlbSB0byB1c2UKKyAgICB1bmlvbl9mc190eXBlPSIiCisgICAgaWYgZ3JlcCAtcSAtdyAib3ZlcmxheWZzIiAvcHJvYy9maWxlc3lzdGVtczsgdGhlbgorCXVuaW9uX2ZzX3R5cGU9Im92ZXJsYXlmcyIKKyAgICBlbGlmIGdyZXAgLXEgLXcgImF1ZnMiIC9wcm9jL2ZpbGVzeXN0ZW1zOyB0aGVuCisJdW5pb25fZnNfdHlwZT0iYXVmcyIKKyAgICBlbHNlCisJdW5pb25fZnNfdHlwZT0iIgorICAgIGZpCisKKyAgICAjIG1ha2UgYSB1bmlvbiBtb3VudCBpZiBwb3NzaWJsZQorICAgIGNhc2UgJHVuaW9uX2ZzX3R5cGUgaW4KKwkib3ZlcmxheWZzIikKKwkgICAgbWtkaXIgLXAgL3Jvb3Rmcy5ybyAvcm9vdGZzLnJ3CisJICAgIGlmICEgbW91bnQgLW4gLS1tb3ZlICRST09UX01PVU5UIC9yb290ZnMucm87IHRoZW4KKwkJcm0gLXJmIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCQlmYXRhbCAiQ291bGQgbm90IG1vdmUgcm9vdGZzIG1vdW50IHBvaW50IgorCSAgICBlbHNlCisJCW1vdW50IC10IHRtcGZzIC1vIHJ3LG5vYXRpbWUsbW9kZT03NTUgdG1wZnMgL3Jvb3Rmcy5ydworCQltb3VudCAtdCBvdmVybGF5ZnMgLW8gImxvd2VyZGlyPS9yb290ZnMucm8sdXBwZXJkaXI9L3Jvb3Rmcy5ydyIgb3ZlcmxheWZzICRST09UX01PVU5UCisJCW1rZGlyIC1wICRST09UX01PVU5UL3Jvb3Rmcy5ybyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkJbW91bnQgLS1tb3ZlIC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJvCisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJ3ICRST09UX01PVU5UL3Jvb3Rmcy5ydworCSAgICBmaQorCSAgICA7OworCSJhdWZzIikKKwkgICAgbWtkaXIgLXAgL3Jvb3Rmcy5ybyAvcm9vdGZzLnJ3CisJICAgIGlmICEgbW91bnQgLW4gLS1tb3ZlICRST09UX01PVU5UIC9yb290ZnMucm87IHRoZW4KKwkJcm0gLXJmIC9yb290ZnMucm8gL3Jvb3Rmcy5ydworCQlmYXRhbCAiQ291bGQgbm90IG1vdmUgcm9vdGZzIG1vdW50IHBvaW50IgorCSAgICBlbHNlCisJCW1vdW50IC10IHRtcGZzIC1vIHJ3LG5vYXRpbWUsbW9kZT03NTUgdG1wZnMgL3Jvb3Rmcy5ydworCQltb3VudCAtdCBhdWZzIC1vICJkaXJzPS9yb290ZnMucnc9cnc6L3Jvb3Rmcy5ybz1ybyIgYXVmcyAkUk9PVF9NT1VOVAorCQlta2RpciAtcCAkUk9PVF9NT1VOVC9yb290ZnMucm8gJFJPT1RfTU9VTlQvcm9vdGZzLnJ3CisJCW1vdW50IC0tbW92ZSAvcm9vdGZzLnJvICRST09UX01PVU5UL3Jvb3Rmcy5ybworCQltb3VudCAtLW1vdmUgL3Jvb3Rmcy5ydyAkUk9PVF9NT1VOVC9yb290ZnMucncKKwkgICAgZmkKKwkgICAgOzsKKwkiIikKKwkgICAgbW91bnQgLXQgdG1wZnMgLW8gcncsbm9hdGltZSxtb2RlPTc1NSB0bXBmcyAkUk9PVF9NT1VOVC9tZWRpYQorCSAgICA7OworICAgIGVzYWMKKworICAgICMgYm9vdCB0aGUgaW1hZ2UKKyAgICBib290X2xpdmVfcm9vdAorfQorCitjYXNlICRsYWJlbCBpbgorICAgIGJvb3QpCisJbW91bnRfYW5kX2Jvb3QKKwk7OworICAgIGluc3RhbGx8aW5zdGFsbC1lZmkpCisJaWYgWyAtZiAvcnVuL21lZGlhLyRpLyRJU09MSU5VWC8kUk9PVF9JTUFHRSBdIDsgdGhlbgorCSAgICAuLyRsYWJlbC5zaCAkaS8kSVNPTElOVVggJFJPT1RfSU1BR0UgJHZpZGVvX21vZGUgJHZnYV9tb2RlICRjb25zb2xlX3BhcmFtcworCWVsc2UKKwkgICAgZmF0YWwgIkNvdWxkIG5vdCBmaW5kICRsYWJlbCBzY3JpcHQiCisJZmkKKworCSMgSWYgd2UncmUgZ2V0dGluZyBoZXJlLCB3ZSBmYWlsZWQuLi4KKwlmYXRhbCAiSW5zdGFsbGF0aW9uIGltYWdlIGZhaWxlZCIKKwk7OworICAgICopCisJIyBOb3Qgc3VyZSB3aGF0IGJvb3QgbGFiZWwgaXMgcHJvdmlkZWQuICBUcnkgdG8gYm9vdCB0byBhdm9pZCBsb2NraW5nIHVwLgorCW1vdW50X2FuZF9ib290CisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWJvb3RfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtYm9vdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNzk2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWJvb3RfMS4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiRXh0cmVtZWx5IGJhc2ljIGxpdmUgaW1hZ2UgaW5pdCBzY3JpcHQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1ib290LnNoIgorCitQUiA9ICJyMiIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWJvb3Quc2ggJHtEfS9pbml0Cit9CisKK2luaGVyaXQgYWxsYXJjaAorCitGSUxFU18ke1BOfSArPSAiIC9pbml0ICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9kZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGJmZDdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2RlYnVnCkBAIC0wLDAgKzEsODIgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCisjIEFkZHMgc3VwcG9ydCB0byBkeW5hbWljIGRlYnVnZ2luZyBvZiBpbml0cmFtZnMgdXNpbmcgYm9vdHBhcmFtIGluCisjIGZvbGxvd2luZyBmb3JtYXQ6CisjICAgc2hlbGwgICAgICAgICAgICAgICAgIDogc3RhcnRzIGEgc2hlbGwgYmVmb3JlIGFuZCBhZnRlciBlYWNoIG1vZHVsZQorIyAgIHNoZWxsPWJlZm9yZTo8bW9kdWxlPiA6IHN0YXJ0cyBhIHNoZWxsIGJlZm9yZSA8bW9kdWxlPiBpcyBsb2FkZWQgYW5kIHJ1bgorIyAgIHNoZWxsPWFmdGVyOjxtb2R1bGU+ICA6IHN0YXJ0cyBhIHNoZWxsIGFmdGVyIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisjCisjICAgc2hlbGwtZGVidWcgICAgICAgICAgICAgICAgIDogcnVuIHNldCAteCBhcyBzb29uIGFzIHBvc3NpYmxlCisjICAgc2hlbGwtZGVidWc9YmVmb3JlOjxtb2R1bGU+IDogcnVuIHNldCAteCBiZWZvcmUgPG1vZHVsZT4gaXMgbG9hZGVkIGFuZCBydW4KKyMgICBzaGVsbC1kZWJ1Zz1hZnRlcjo8bW9kdWxlPiAgOiBydW4gc2V0IC14IGFmdGVyIDxtb2R1bGU+IGlzIGxvYWRlZCBhbmQgcnVuCisKK0RFQlVHX1NIRUxMPSJmYWxzZSIKKworZGVidWdfaG9va19oYW5kbGVyKCkgeworCXN0YXR1cz0kMQorCW1vZHVsZT0kMgorCisJaWYgWyAtbiAiJGJvb3RwYXJhbV9zaGVsbCIgXSAmJiBbICIkYm9vdHBhcmFtX3NoZWxsIiAhPSAidHJ1ZSIgXTsgdGhlbgorCQlzaGVsbF93YW50ZWRfc3RhdHVzPWBleHByICRib290cGFyYW1fc2hlbGwgOiAnXCguKlwpOi4qJ2AKKwkJc2hlbGxfd2FudGVkX21vZHVsZT1gZXhwciAkYm9vdHBhcmFtX3NoZWxsIDogJy4qOlwoLipcKSdgCisKKwkJaWYgWyAiJHNoZWxsX3dhbnRlZF9zdGF0dXMiID0gImJlZm9yZSIgXTsgdGhlbgorCQkJc2hlbGxfd2FudGVkX3N0YXR1cz1wcmUKKwkJZWxzZQorCQkJc2hlbGxfd2FudGVkX3N0YXR1cz1wb3N0CisJCWZpCisJZmkKKworCWlmIFsgIiRib290cGFyYW1fc2hlbGwiID0gInRydWUiIF0gfHwKKwkJKCBbICIkc3RhdHVzIiA9ICIkc2hlbGxfd2FudGVkX3N0YXR1cyIgXSAmJgorCQkJWyAiJG1vZHVsZSIgPSAiJHNoZWxsX3dhbnRlZF9tb2R1bGUiIF0gKTsgdGhlbgorCQlpZiBbICIkc3RhdHVzIiA9ICJwcmUiIF07IHRoZW4KKwkJCXN0YXR1c19tc2c9ImJlZm9yZSIKKwkJZWxzZQorCQkJc3RhdHVzX21zZz0iYWZ0ZXIiCisJCWZpCisKKwkJbXNnICJTdGFydGluZyBzaGVsbCAkc3RhdHVzX21zZyAkbW9kdWxlLi4uIgorCQlzaAorCWZpCisKKwlpZiBbIC1uICIkYm9vdHBhcmFtX3NoZWxsX2RlYnVnIiBdICYmIFsgIiRib290cGFyYW1fc2hlbGxfZGVidWciICE9ICJ0cnVlIiBdOyB0aGVuCisJCXNoZWxsX2RlYnVnX3dhbnRlZF9zdGF0dXM9YGV4cHIgJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyA6ICdcKC4qXCk6LionYAorCQlzaGVsbF9kZWJ1Z193YW50ZWRfbW9kdWxlPWBleHByICRib290cGFyYW1fc2hlbGxfZGVidWcgOiAnLio6XCguKlwpJ2AKKworCQlpZiBbICIkc2hlbGxfZGVidWdfd2FudGVkX3N0YXR1cyIgPSAiYmVmb3JlIiBdOyB0aGVuCisJCQlzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzPXByZQorCQllbHNlCisJCQlzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzPXBvc3QKKwkJZmkKKwlmaQorCisJaWYgWyAiJGJvb3RwYXJhbV9zaGVsbF9kZWJ1ZyIgPSAidHJ1ZSIgXSB8fAorCQkoIFsgIiRzdGF0dXMiID0gIiRzaGVsbF9kZWJ1Z193YW50ZWRfc3RhdHVzIiBdICYmCisJCQlbICIkbW9kdWxlIiA9ICIkc2hlbGxfZGVidWdfd2FudGVkX21vZHVsZSIgXSApOyB0aGVuCisJCWlmIFsgIiRERUJVR19TSEVMTCIgPSAidHJ1ZSIgXTsgdGhlbgorCQkJcmV0dXJuIDAKKwkJZmkKKworCQlpZiBbICIkc3RhdHVzIiA9ICJwcmUiIF07IHRoZW4KKwkJCXN0YXR1c19tc2c9ImJlZm9yZSIKKwkJZWxzZQorCQkJc3RhdHVzX21zZz0iYWZ0ZXIiCisJCWZpCisKKwkJbXNnICJTdGFydGluZyBzaGVsbCBkZWJ1Z2dpbmcgJHN0YXR1c19tc2cgJG1vZHVsZS4uLiIKKwkJREVCVUdfU0hFTEw9InRydWUiCisJCXNldCAteAorCWZpCit9CisKK2RlYnVnX2VuYWJsZWQoKSB7CisJcmV0dXJuIDAKK30KKworZGVidWdfcnVuKCkgeworCWFkZF9tb2R1bGVfcHJlX2hvb2sgImRlYnVnX2hvb2tfaGFuZGxlciIKKwlhZGRfbW9kdWxlX3Bvc3RfaG9vayAiZGVidWdfaG9va19oYW5kbGVyIgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2UyZnMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvZTJmcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOWY4MDFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2UyZnMKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisKK2UyZnNfZW5hYmxlZCgpIHsKKwlyZXR1cm4gMAorfQorCitlMmZzX3J1bigpIHsKKwlmaWxlc3lzdGVtcz0iZXh0NCBleHQzIGV4dDIiCisKKwkjIGxvYWQgbW9kdWxlcworCWZvciBmcyBpbiAkZmlsZXN5c3RlbXM7IGRvCisJCWxvYWRfa2VybmVsX21vZHVsZSAkZnMKKwlkb25lCisKKwlmb3IgZnMgaW4gJGZpbGVzeXN0ZW1zOyBkbworCQlldmFsICJmc19vcHRpb25zPVwkYm9vdHBhcmFtXyR7ZnN9IgorCQlpZiBbIC1uICIkZnNfb3B0aW9ucyIgXTsgdGhlbgorCQkgICAgZGV2PWBleHByICIkZnNfb3B0aW9ucyIgOiAnXChbXjpdKlwpLionYAorCQkgICAgcGF0aD1gZXhwciAiJGZzX29wdGlvbnMiIDogJ1teOl0qOlwoW146XSpcKS4qJ2AKKworCQkgICAgaW5mbyAiTW91bnRpbmcgJGRldiBhcyAkZnMgb24gJHBhdGggYXMgJGZzLi4uIgorCQkJbWtkaXIgLXAgJHBhdGgKKwkJICAgIG1vdW50IC10ICRmcyAkZGV2ICRwYXRoCisJCWZpCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL2ZpbmlzaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTcxMmZmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9maW5pc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisKK2ZpbmlzaF9lbmFibGVkKCkgeworCXJldHVybiAwCit9CisKK2ZpbmlzaF9ydW4oKSB7CisJaWYgWyAtbiAiJFJPT1RGU19ESVIiIF07IHRoZW4KKwkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290ZGVsYXkiIF07IHRoZW4KKwkJCWRlYnVnICJTbGVlcGluZyBmb3IgJHJvb3RkZWxheSBzZWNvbmQocykgdG8gd2FpdCByb290IHRvIHNldHRsZS4uLiIKKwkJCXNsZWVwICRib290cGFyYW1fcm9vdGRlbGF5CisJCWZpCisKKwkJaWYgWyAtbiAiJGJvb3RwYXJhbV9yb290IiBdOyB0aGVuCisJCQlkZWJ1ZyAiTm8gZTJmcyBjb21wYXRpYmxlIGZpbGVzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZCwgbW91bnRpbmcgJGJvb3RwYXJhbV9yb290Li4uIgorCisJCQlpZiBbICJgZWNobyAke2Jvb3RwYXJhbV9yb290fSB8IGN1dCAtYzEtNWAiID0gIlVVSUQ9IiBdOyB0aGVuCisJCQkJcm9vdF91dWlkPWBlY2hvICRib290cGFyYW1fcm9vdCB8IGN1dCAtYzYtYAorCQkJCWJvb3RwYXJhbV9yb290PSIvZGV2L2Rpc2svYnktdXVpZC8kcm9vdF91dWlkIgorCQkJZmkKKworCQkJaWYgWyAtZSAiJGJvb3RwYXJhbV9yb290IiBdOyB0aGVuCisJCQkJZmxhZ3M9IiIKKwkJCQlpZiBbIC1uICIkYm9vdHBhcmFtX3JvIiBdOyB0aGVuCisJCQkJCWlmIFsgIC1uICIkYm9vdHBhcmFtX3Jvb3RmbGFncyIgXTsgdGhlbgorCQkJCQkJYm9vdHBhcmFtX3Jvb3RmbGFncz0iJGJvb3RwYXJhbV9yb290ZmxhZ3MsIgorCQkJCQlmaQorCQkJCQlib290cGFyYW1fcm9vdGZsYWdzPSIke2Jvb3RwYXJhbV9yb290ZmxhZ3N9cm8iCisJCQkJZmkKKwkJCQlpZiBbIC1uICIkYm9vdHBhcmFtX3Jvb3RmbGFncyIgXTsgdGhlbgorCQkJCQlmbGFncz0iJGZsYWdzIC1vJGJvb3RwYXJhbV9yb290ZmxhZ3MiCisJCQkJZmkKKwkJCQlpZiBbIC1uICIkYm9vdHBhcmFtX3Jvb3Rmc3R5cGUiIF07IHRoZW4KKwkJCQkJZmxhZ3M9IiRmbGFncyAtdCRib290cGFyYW1fcm9vdGZzdHlwZSIKKwkJCQlmaQorCQkJCW1vdW50ICRmbGFncyAkYm9vdHBhcmFtX3Jvb3QgJFJPT1RGU19ESVIKKwkJCWVsc2UKKwkJCQlkZWJ1ZyAicm9vdCAnJGJvb3RwYXJhbV9yb290JyBkb2Vzbid0IGV4aXN0LiIKKwkJCWZpCisJCWZpCisKKwkJaWYgWyAhIC1kICRST09URlNfRElSL2RldiBdOyB0aGVuCisJCQlmYXRhbCAiRVJST1I6IFRoZXJlJ3Mgbm8gJy9kZXYnIG9uIHJvb3Rmcy4iCisJCWZpCisKKwkJaW5mbyAiU3dpdGNoaW5nIHJvb3QgdG8gJyRST09URlNfRElSJy4uLiIKKworCQlkZWJ1ZyAiTW92aW5nIC9kZXYsIC9wcm9jIGFuZCAvc3lzIG9udG8gcm9vdGZzLi4uIgorCQltb3VudCAtLW1vdmUgL2RldiAkUk9PVEZTX0RJUi9kZXYKKwkJbW91bnQgLS1tb3ZlIC9wcm9jICRST09URlNfRElSL3Byb2MKKwkJbW91bnQgLS1tb3ZlIC9zeXMgJFJPT1RGU19ESVIvc3lzCisKKwkJY2QgJFJPT1RGU19ESVIKKwkJZXhlYyBzd2l0Y2hfcm9vdCAtYyAvZGV2L2NvbnNvbGUgJFJPT1RGU19ESVIgJHtib290cGFyYW1faW5pdDotL3NiaW4vaW5pdH0KKwllbHNlCisJCWRlYnVnICJObyByb290ZnMgaGFzIGJlZW4gc2V0IgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkyOTFhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1mcmFtZXdvcmsvaW5pdApAQCAtMCwwICsxLDE0NSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoQykgMjAxMSBPLlMuIFN5c3RlbXMgU29mdHdhcmUgTFREQS4KKyMgTGljZW5zZWQgb24gTUlUCisjCisjIFByb3ZpZGVzIHRoZSBBUEkgdG8gYmUgdXNlZCBieSB0aGUgaW5pdHJhbWZzIG1vZHVsZXMKKyMKKyMgTW9kdWxlcyBuZWVkIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisjCisjIDxtb2R1bGU+X2VuYWJsZWQgOiBjaGVjayBpZiB0aGUgbW9kdWxlIG91Z2h0IHRvIHJ1biAocmV0dXJuIDEgdG8gc2tpcCkKKyMgPG1vZHVsZT5fcnVuICAgICA6IGRvIHdoYXQgaXMgbmVlZAorIworIyBCb290IHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZSBvbiBlbnZpcm9ubWVudCBpbiB0aGUgYXM6CisjCisjICdmb289dmFsdWUnIGFzICdib290cGFyYW1fZm9vPXZhbHVlJworIyAnZm9vJyBhcyAnYm9vdHBhcmFtX2Zvbz10cnVlJworIyAnZm9vLmJhcls9dmFsdWVdIGFzICdmb29fYmFyPVt2YWx1ZXx0cnVlXScKKworIyBSZWdpc3RlciBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBiZWZvcmUgcnVubmluZyBhIG1vZHVsZQorIyBUaGUgaG9vayBpcyBjYWxsZWQgYXM6CisjICAgPGZ1bmN0aW9uPiBwcmUgPG1vZHVsZT4KK2FkZF9tb2R1bGVfcHJlX2hvb2soKSB7CisJTU9EVUxFX1BSRV9IT09LUz0iJE1PRFVMRV9QUkVfSE9PS1MgJDEiCit9CisKKyMgUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgcnVubmluZyBhIG1vZHVsZQorIyBUaGUgaG9vayBpcyBjYWxsZWQgYXM6CisjICAgPGZ1bmN0aW9uPiBwb3N0IDxtb2R1bGU+CithZGRfbW9kdWxlX3Bvc3RfaG9vaygpIHsKKwlNT0RVTEVfUE9TVF9IT09LUz0iJE1PRFVMRV9QT1NUX0hPT0tTICQxIgorfQorCisjIExvYWQga2VybmVsIG1vZHVsZQorbG9hZF9rZXJuZWxfbW9kdWxlKCkgeworCWlmIG1vZHByb2JlICQxID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlpbmZvICJMb2FkZWQgbW9kdWxlICQxIgorCWVsc2UKKwkJZGVidWcgIkZhaWxlZCB0byBsb2FkIG1vZHVsZSAkMSIKKwlmaQorfQorCisjIFByaW50cyBpbmZvcm1hdGlvbgorbXNnKCkgeworCWVjaG8gIiRAIiA+L2Rldi9jb25zb2xlCit9CisKKyMgUHJpbnRzIGluZm9ybWF0aW9uIGlmIHZlcmJvc2UgYm9vdHBhcmFtIGlzIHVzZWQKK2luZm8oKSB7CisJWyAtbiAiJGJvb3RwYXJhbV92ZXJib3NlIiBdICYmIGVjaG8gIiRAIiA+L2Rldi9jb25zb2xlCit9CisKKyMgUHJpbnRzIGluZm9ybWF0aW9uIGlmIGRlYnVnIGJvb3RwYXJhbSBpcyB1c2VkCitkZWJ1ZygpIHsKKwlbIC1uICIkYm9vdHBhcmFtX2RlYnVnIiBdICYmIGVjaG8gIkRFQlVHOiAkQCIgPi9kZXYvY29uc29sZQorfQorCisjIFByaW50cyBhIG1lc3NhZ2UgYW5kIHN0YXJ0IGEgZW5kbGVzcyBsb29wCitmYXRhbCgpIHsKKyAgICBlY2hvICQxID4vZGV2L2NvbnNvbGUKKyAgICBlY2hvID4vZGV2L2NvbnNvbGUKKworICAgIGlmIFsgLW4gImJvb3RwYXJhbV9pbml0X2ZhdGFsX3NoIiBdOyB0aGVuCisgICAgICAgIHNoCisgICAgZWxzZQorCXdoaWxlIFsgInRydWUiIF07IGRvCisJCXNsZWVwIDM2MDAKKwlkb25lCisgICAgZmkKK30KKworIyBWYXJpYWJsZXMgc2hhcmVkIGFtb3VuZyBtb2R1bGVzCitST09URlNfRElSPSIvcm9vdGZzIiAjIHdoZXJlIHRvIGRvIHRoZSBzd2l0Y2ggcm9vdAorTU9EVUxFX1BSRV9IT09LUz0iIiAgIyBmdW5jdGlvbnMgdG8gY2FsbCBiZWZvcmUgcnVubmluZyBlYWNoIG1vZHVsZQorTU9EVUxFX1BPU1RfSE9PS1M9IiIgIyBmdW5jdGlvbnMgdG8gY2FsbCBhZnRlciBydW5uaW5nIGVhY2ggbW9kdWxlCitNT0RVTEVTX0RJUj0vaW5pdC5kICAjIHBsYWNlIHRvIGxvb2sgZm9yIG1vZHVsZXMKKworIyBtYWtlIG1vdW50IHN0b3AgY29tcGxhaW5pbmcgYWJvdXQgbWlzc2luZyAvZXRjL2ZzdGFiCit0b3VjaCAvZXRjL2ZzdGFiCisKKyMgaW5pdGlhbGl6ZSAvcHJvYywgL3N5cyBhbmQgL3Zhci9sb2NrCitta2RpciAtcCAvcHJvYyAvc3lzIC92YXIvbG9jaworbW91bnQgLXQgcHJvYyBwcm9jIC9wcm9jCittb3VudCAtdCBzeXNmcyBzeXNmcyAvc3lzCisKKyMgcG9wdWxhdGUgYm9vdHBhcmFtIGVudmlyb25tZW50Citmb3IgcCBpbiBgY2F0IC9wcm9jL2NtZGxpbmVgOyBkbworCW9wdD1gZWNobyAkcCB8IGN1dCAtZCc9JyAtZjFgCisJb3B0PWBlY2hvICRvcHQgfCB0ciAnLi0nICdfXydgCisJaWYgWyAiYGVjaG8gJHAgfCBjdXQgLWQnPScgLWYxYCIgPSAiJHAiIF07IHRoZW4KKwkJZXZhbCAiYm9vdHBhcmFtXyR7b3B0fT10cnVlIgorCWVsc2UKKwkJdmFsdWU9ImBlY2hvICRwIHwgY3V0IC1kJz0nIC1mMi1gIgorCQlldmFsICJib290cGFyYW1fJHtvcHR9PVwiJHt2YWx1ZX1cIiIKKwlmaQorZG9uZQorCisjIHVzZSAvZGV2IHdpdGggZGV2dG1wZnMKK2lmIGdyZXAgLXEgZGV2dG1wZnMgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKwlta2RpciAtcCAvZGV2CisJbW91bnQgLXQgZGV2dG1wZnMgZGV2dG1wZnMgL2RldgorZWxzZQorCWlmIFsgISAtZCAvZGV2IF07IHRoZW4KKwkJZmF0YWwgIkVSUk9SOiAvZGV2IGRvZXNuJ3QgZXhpc3QgYW5kIGtlcm5lbCBkb2Vzbid0IGhhcyBkZXZ0bXBmcyBlbmFibGVkLiIKKwlmaQorZmkKKworbWtkaXIgJFJPT1RGU19ESVIKKworIyBMb2FkIGFuZCBydW4gbW9kdWxlcworZm9yIG0gaW4gJE1PRFVMRVNfRElSLyo7IGRvCisJIyBTa2lwIGJhY2t1cCBmaWxlcworCWlmIFsgImBlY2hvICRtIHwgc2VkIC1lICdzL1x+JC8vJ2AiICE9ICIkbSIgXTsgdGhlbgorCQljb250aW51ZQorCWZpCisKKwltb2R1bGU9YGJhc2VuYW1lICRtIHwgY3V0IC1kJy0nIC1mIDJgCisJZGVidWcgIkxvYWRpbmcgbW9kdWxlICRtb2R1bGUiCisKKwkjIHByZSBob29rcworCWZvciBoIGluICRNT0RVTEVfUFJFX0hPT0tTOyBkbworCQlkZWJ1ZyAiQ2FsbGluZyBtb2R1bGUgaG9vayAocHJlKTogJGgiCisJCWV2YWwgIiRoIHByZSAkbW9kdWxlIgorCQlkZWJ1ZyAiRmluaXNoZWQgbW9kdWxlIGhvb2sgKHByZSk6ICRoIgorCWRvbmUKKworCSMgcHJvY2VzcyBtb2R1bGUKKwkuICRtCisKKwlpZiAhIGV2YWwgIiR7bW9kdWxlfV9lbmFibGVkIjsgdGhlbgorCQlkZWJ1ZyAiU2tpcHBpbmcgbW9kdWxlICRtb2R1bGUiCisJCWNvbnRpbnVlCisJZmkKKworCWRlYnVnICJSdW5uaW5nICR7bW9kdWxlfV9ydW4iCisJZXZhbCAiJHttb2R1bGV9X3J1biIKKworCSMgcG9zdCBob29rcworCWZvciBoIGluICRNT0RVTEVfUE9TVF9IT09LUzsgZG8KKwkJZGVidWcgIkNhbGxpbmcgbW9kdWxlIGhvb2sgKHBvc3QpOiAkaCIKKwkJZXZhbCAiJGggcG9zdCAkbW9kdWxlIgorCQlkZWJ1ZyAiRmluaXNoZWQgbW9kdWxlIGhvb2sgKHBvc3QpOiAkaCIKKwlkb25lCitkb25lCisKKyMgQ2F0Y2ggYWxsCitmYXRhbCAiRVJST1I6IEluaXRyYW1mcyBmYWlsZWQgdG8gaW5pdGlhbGl6ZSB0aGUgc3lzdGVtLiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL21kZXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVkZjFkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay9tZGV2CkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCittZGV2X2VuYWJsZWQoKSB7CisJaWYgWyAhIC1lIC9zYmluL21kZXYgXTsgdGhlbgorCQlkZWJ1ZyAiL3NiaW4vbWRldiBkb2Vzbid0IGV4aXN0IgorCQlyZXR1cm4gMQorCWZpCisKKwlyZXR1cm4gMAorfQorCittZGV2X3J1bigpIHsKKwkjIHNldHVwIHRoZSBlbnZpcm9ubWVudAorCW1vdW50IC10IHRtcGZzIHRtcGZzIC9kZXYKKworCW1rZGlyIC1tIDE3NzcgL2Rldi9zaG0KKworCW1rZGlyIC1tIDA3NTUgL2Rldi9wdHMKKwltb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzCisKKwllY2hvIC9zYmluL21kZXYgPiAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcKKwltZGV2IC1zCisKKwkjIGxvYWQgbW9kdWxlcyBmb3IgZGV2aWNlcworCWZpbmQgL3N5cyAtbmFtZSBtb2RhbGlhcyB8IHdoaWxlIHJlYWQgbTsgZG8KKwkJbG9hZF9rZXJuZWxfbW9kdWxlICQoY2F0ICRtKQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay91ZGV2IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrL3VkZXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NjJkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29yay91ZGV2CkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgTy5TLiBTeXN0ZW1zIFNvZnR3YXJlIExUREEuCisjIExpY2Vuc2VkIG9uIE1JVAorCit1ZGV2X3NodXRkb3duX2hvb2tfaGFuZGxlcigpIHsKKwlzdGF0dXM9JDEKKwltb2R1bGU9JDIKKwlpZiBbICIkc3RhdHVzIiA9ICJwcmUiIF0gJiYgWyAiJG1vZHVsZSIgPSAiZmluaXNoIiBdOyB0aGVuCisJCWtpbGxhbGwgYGJhc2VuYW1lICRfVURFVl9EQUVNT05gIDI+L2Rldi9udWxsCisJZmkKK30KKwordWRldl9kYWVtb24oKSB7CisJT1BUSU9OUz0iL3NiaW4vdWRldi91ZGV2ZCAvc2Jpbi91ZGV2ZCAvbGliL3VkZXYvdWRldmQgL2xpYi9zeXN0ZW1kL3N5c3RlbWQtdWRldmQiCisKKwlmb3IgbyBpbiAkT1BUSU9OUzsgZG8KKwkJaWYgWyAteCAiJG8iIF07IHRoZW4KKwkJCWVjaG8gJG8KKwkJCXJldHVybiAwCisJCWZpCisJZG9uZQorCisJcmV0dXJuIDEKK30KKworX1VERVZfREFFTU9OPWB1ZGV2X2RhZW1vbmAKKwordWRldl9lbmFibGVkKCkgeworCWlmIFsgLXogIiRfVURFVl9EQUVNT04iIF07IHRoZW4KKwkJbXNnICJXQVJOSU5HOiBDYW5ub3QgZmluZCB0aGUgdWRldiBkYWVtb247IGRhZW1vbiB3aWxsIG5vdCBiZSBzdGFydGVkIGluIGluaXRyYW1mcy4iCisJCXJldHVybiAxCisJZmkKKworCXJldHVybiAwCit9CisKK3VkZXZfcnVuKCkgeworCWFkZF9tb2R1bGVfcHJlX2hvb2sgInVkZXZfc2h1dGRvd25faG9va19oYW5kbGVyIgorCisJbWtkaXIgLXAgL3J1bgorCisJJF9VREVWX0RBRU1PTiAtLWRhZW1vbgorCXVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKKwl1ZGV2YWRtIHNldHRsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtZnJhbWV3b3JrXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzN2I5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWZyYW1ld29ya18xLjAuYmIKQEAgLTAsMCArMSw2NiBAQAorU1VNTUFSWSA9ICJNb2R1bGFyIGluaXRyYW1mcyBzeXN0ZW0iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUkRFUEVORFNfJHtQTn0gKz0gImJ1c3lib3giCisKK1BSID0gInIyIgorCitpbmhlcml0IGFsbGFyY2gKKworU1JDX1VSSSA9ICJmaWxlOi8vaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9maW5pc2ggXAorICAgICAgICAgICBmaWxlOi8vbWRldiBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2IFwKKyAgICAgICAgICAgZmlsZTovL2UyZnMgXAorICAgICAgICAgICBmaWxlOi8vZGVidWciCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vaW5pdC5kCisKKyAgICAjIGJhc2UKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0vaW5pdAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2ZpbmlzaCAke0R9L2luaXQuZC85OS1maW5pc2gKKworICAgICMgbWRldgorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L21kZXYgJHtEfS9pbml0LmQvMDEtbWRldgorCisgICAgIyB1ZGV2CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdWRldiAke0R9L2luaXQuZC8wMS11ZGV2CisKKyAgICAjIGUyZnMKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9lMmZzICR7RH0vaW5pdC5kLzEwLWUyZnMKKworICAgICMgZGVidWcKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kZWJ1ZyAke0R9L2luaXQuZC8wMC1kZWJ1ZworCisgICAgIyBDcmVhdGUgZGV2aWNlIG5vZGVzIGV4cGVjdGVkIGJ5IHNvbWUga2VybmVscyBpbiBpbml0cmFtZnMKKyAgICAjIGJlZm9yZSBldmVuIGV4ZWN1dGluZyAvaW5pdC4KKyAgICBpbnN0YWxsIC1kICR7RH0vZGV2CisgICAgbWtub2QgLW0gNjIyICR7RH0vZGV2L2NvbnNvbGUgYyA1IDEKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tYmFzZSBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLW1kZXYgXAorICAgICAgICAgICAgaW5pdHJhbWZzLW1vZHVsZS11ZGV2IFwKKyAgICAgICAgICAgIGluaXRyYW1mcy1tb2R1bGUtZTJmcyBcCisgICAgICAgICAgICBpbml0cmFtZnMtbW9kdWxlLWRlYnVnIgorCitGSUxFU18ke1BOfS1iYXNlID0gIi9pbml0IC9pbml0LmQvOTktZmluaXNoIC9kZXYiCisKK1NVTU1BUllfaW5pdHJhbWZzLW1vZHVsZS1tZGV2ID0gImluaXRyYW1mcyBzdXBwb3J0IGZvciBtZGV2IgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS1tZGV2ID0gIiR7UE59LWJhc2UiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLW1kZXYgPSAiL2luaXQuZC8wMS1tZGV2IgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtdWRldiA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgdWRldiIKK1JERVBFTkRTX2luaXRyYW1mcy1tb2R1bGUtdWRldiA9ICIke1BOfS1iYXNlIHVkZXYiCitGSUxFU19pbml0cmFtZnMtbW9kdWxlLXVkZXYgPSAiL2luaXQuZC8wMS11ZGV2IgorCitTVU1NQVJZX2luaXRyYW1mcy1tb2R1bGUtZTJmcyA9ICJpbml0cmFtZnMgc3VwcG9ydCBmb3IgZXh0NC9leHQzL2V4dDIgZmlsZXN5c3RlbXMiCitSREVQRU5EU19pbml0cmFtZnMtbW9kdWxlLWUyZnMgPSAiJHtQTn0tYmFzZSIKK0ZJTEVTX2luaXRyYW1mcy1tb2R1bGUtZTJmcyA9ICIvaW5pdC5kLzEwLWUyZnMiCisKK1NVTU1BUllfaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyA9ICJpbml0cmFtZnMgZHluYW1pYyBkZWJ1ZyBzdXBwb3J0IgorUkRFUEVORFNfaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyA9ICIke1BOfS1iYXNlIgorRklMRVNfaW5pdHJhbWZzLW1vZHVsZS1kZWJ1ZyA9ICIvaW5pdC5kLzAwLWRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1ib290XzEuMC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtYm9vdF8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiMzAyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtYm9vdF8xLjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaXZlIGltYWdlIGluaXQgc2NyaXB0IgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK0RFUEVORFMgPSAidmlydHVhbC9rZXJuZWwiCitSREVQRU5EU18ke1BOfSA9ICJ1ZGV2IHVkZXYtZXh0cmFjb25mIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1saXZlLnNoIgorCitQUiA9ICJyMTIiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1saXZlLnNoICR7RH0vaW5pdAorICAgICAgICBpbnN0YWxsIC1kICR7RH0vZGV2CisgICAgICAgIG1rbm9kIC1tIDYyMiAke0R9L2Rldi9jb25zb2xlIGMgNSAxCit9CisKK0ZJTEVTXyR7UE59ICs9ICIgL2luaXQgL2RldiAiCisKKyMgRHVlIHRvIGtlcm5lbCBkZXBlbmRlbmN5CitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaS10ZXN0ZnNfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2JkMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3Rmc18xLjAuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJMaXZlIGltYWdlIGluc3RhbGwgc2NyaXB0IGZvciB3aXRoIGEgc2Vjb25kIHJvb3Rmcy9rZXJuZWwgb3B0aW9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKK1NSQ19VUkkgPSAiZmlsZTovL2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoIgorCitSREVQRU5EU18ke1BOfSA9ICJwYXJ0ZWQgZTJmc3Byb2dzLW1rZTJmcyBkb3Nmc3Rvb2xzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC1lZmktdGVzdGZzLnNoICR7RH0vaW5zdGFsbC1lZmkuc2gKK30KKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0ZJTEVTXyR7UE59ID0gIiAvaW5zdGFsbC1lZmkuc2ggIgorQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLWVmaV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJjMWZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbC1lZmlfMS4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCBmb3IgZ3J1Yi1lZmkiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorU1JDX1VSSSA9ICJmaWxlOi8vaW5pdC1pbnN0YWxsLWVmaS5zaCIKKworUFIgPSAicjEiCisKK1JERVBFTkRTXyR7UE59ID0gInBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIGRvc2ZzdG9vbHMgdXRpbC1saW51eC1ibGtpZCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0LWluc3RhbGwtZWZpLnNoICR7RH0vaW5zdGFsbC1lZmkuc2gKK30KKworIyBXaGlsZSB0aGlzIHBhY2thZ2UgbWF5YmUgYW4gYWxsYXJjaCBkdWUgdG8gaXQgYmVpbmcgYQorIyBzaW1wbGUgc2NyaXB0LCByZWFsaXR5IGlzIHRoYXQgaXQgaXMgSG9zdCBzcGVjaWZpYyBiYXNlZAorIyBvbiB0aGUgQ09NUEFUSUJMRV9IT1NUIGJlbG93LCB3aGljaCBuZWVkcyB0byB0YWtlIHByZWNlZGVuY2UKKyNpbmhlcml0IGFsbGFyY2gKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK0ZJTEVTXyR7UE59ID0gIiAvaW5zdGFsbC1lZmkuc2ggIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0KS4qLWxpbnV4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3Rmc18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdiZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHJkc2NyaXB0cy9pbml0cmFtZnMtbGl2ZS1pbnN0YWxsLXRlc3Rmc18xLjAuYmIKQEAgLTAsMCArMSwxNiBAQAorU1VNTUFSWSA9ICJMaXZlIGltYWdlIGluc3RhbGwgc2NyaXB0IHdpdGggYSBzZWNvbmQgcm9vdGZzL2tlcm5lbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwtdGVzdGZzLnNoIgorCitSREVQRU5EU18ke1BOfSA9ICJncnViIHBhcnRlZCBlMmZzcHJvZ3MtbWtlMmZzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQtaW5zdGFsbC10ZXN0ZnMuc2ggJHtEfS9pbnN0YWxsLnNoCit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitGSUxFU18ke1BOfSA9ICIgL2luc3RhbGwuc2ggIgorQ09NUEFUSUJMRV9IT1NUID0gIihpLjg2fHg4Nl82NCkuKi1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRyZHNjcmlwdHMvaW5pdHJhbWZzLWxpdmUtaW5zdGFsbF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGxfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YjNiMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0cmRzY3JpcHRzL2luaXRyYW1mcy1saXZlLWluc3RhbGxfMS4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiTGl2ZSBpbWFnZSBpbnN0YWxsIHNjcmlwdCBmb3IgZ3J1YiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitTUkNfVVJJID0gImZpbGU6Ly9pbml0LWluc3RhbGwuc2giCisKK1BSID0gInI5IgorCitTID0gIiR7V09SS0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gImdydWIgcGFydGVkIGUyZnNwcm9ncy1ta2UyZnMgdXRpbC1saW51eC1ibGtpZCIKKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1pbnN0YWxsLnNoICR7RH0vaW5zdGFsbC5zaAorfQorCisjIFdoaWxlIHRoaXMgcGFja2FnZSBtYXliZSBhbiBhbGxhcmNoIGR1ZSB0byBpdCBiZWluZyBhIAorIyBzaW1wbGUgc2NyaXB0LCByZWFsaXR5IGlzIHRoYXQgaXQgaXMgSG9zdCBzcGVjaWZpYyBiYXNlZAorIyBvbiB0aGUgQ09NUEFUSUJMRV9IT1NUIGJlbG93LCB3aGljaCBuZWVkcyB0byB0YWtlIHByZWNlZGVuY2UKKyNpbmhlcml0IGFsbGFyY2gKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK0ZJTEVTXyR7UE59ID0gIiAvaW5zdGFsbC5zaCAiCisKK0NPTVBBVElCTEVfSE9TVCA9ICIoaS44Nnx4ODZfNjQpLiotbGludXgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvR1BMdjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVlODE4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9HUEx2Mi5wYXRjaApAQCAtMCwwICsxLDM0NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ1MTE5MDUKKy0tLSAvZGV2L251bGwKKysrKyBiL0NPUFlJTkcKK0BAIC0wLDAgKzEsMzM5IEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKworKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKworK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKworKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9hcm0vYWxpZ25tZW50LnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2FybS9hbGlnbm1lbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3N2I5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9hcm0vYWxpZ25tZW50LnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogYWxpZ25tZW50CisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudGtlcm5mcworIyBSZXF1aXJlZC1TdG9wOiAgICAgbW91bnRrZXJuZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyMjIEVORCBJTklUIElORk8KKworaWYgWyAtZSAvcHJvYy9jcHUvYWxpZ25tZW50IF07IHRoZW4KKyAgIGVjaG8gIjMiID4gL3Byb2MvY3B1L2FsaWdubWVudAorZmkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jhbm5lci5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9iYW5uZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyYjA5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9iYW5uZXIuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiBiYW5uZXIKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgISAtZSAvZGV2L3R0eSBdOyB0aGVuCisgICAgL2Jpbi9ta25vZCAtbSAwNjY2IC9kZXYvdHR5IGMgNSAwCitmaQorCitpZiAoID4gL2Rldi90dHkwICkgMj4vZGV2L251bGw7IHRoZW4KKyAgICB2dG1hc3Rlcj0vZGV2L3R0eTAKK2VsaWYgKCA+IC9kZXYvdmMvMCApIDI+L2Rldi9udWxsOyB0aGVuCisgICAgdnRtYXN0ZXI9L2Rldi92Yy8wCitlbGlmICggPiAvZGV2L2NvbnNvbGUgKSAyPi9kZXYvbnVsbDsgdGhlbgorICAgIHZ0bWFzdGVyPS9kZXYvY29uc29sZQorZWxzZQorICAgIHZ0bWFzdGVyPS9kZXYvbnVsbAorZmkKK2VjaG8gPiAkdnRtYXN0ZXIKK2VjaG8gIlBsZWFzZSB3YWl0OiBib290aW5nLi4uIiA+ICR2dG1hc3RlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Jvb3RtaXNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmNTUzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvYm9vdG1pc2Muc2gKQEAgLTAsMCArMSw4MSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBib290bWlzYworIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbG9jYWxfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTWlzYyBhbmQgb3RoZXIuCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9yY1MKKyMKKyMgUHV0IGEgbm9sb2dpbiBmaWxlIGluIC9ldGMgdG8gcHJldmVudCBwZW9wbGUgZnJvbSBsb2dnaW5nIGluIGJlZm9yZQorIyBzeXN0ZW0gc3RhcnR1cCBpcyBjb21wbGV0ZS4KKyMKK2lmIHRlc3QgIiRERUxBWUxPR0lOIiA9IHllcwordGhlbgorICBlY2hvICJTeXN0ZW0gYm9vdHVwIGluIHByb2dyZXNzIC0gcGxlYXNlIHdhaXQiID4gL2V0Yy9ub2xvZ2luCisgIGNwIC9ldGMvbm9sb2dpbiAvZXRjL25vbG9naW4uYm9vdAorZmkKKworIworIyBTZXQgcHNldWRvLXRlcm1pbmFsIGFjY2VzcyBwZXJtaXNzaW9ucy4KKyMKK2lmIHRlc3QgLWMgL2Rldi90dHlwMAordGhlbgorCWNobW9kIDY2NiAvZGV2L3R0eVtwLXphLWVdWzAtOWEtZl0KKwljaG93biByb290OnR0eSAvZGV2L3R0eVtwLXphLWVdWzAtOWEtZl0KK2ZpCisKKyMKKyMgQXBwbHkgL3Byb2Mgc2V0dGluZ3MgaWYgZGVmaW5lZAorIworU1lTQ1RMX0NPTkY9Ii9ldGMvc3lzY3RsLmNvbmYiCitpZiBbIC1mICIke1NZU0NUTF9DT05GfSIgXQordGhlbgorCWlmIFsgLXggIi9zYmluL3N5c2N0bCIgXQorCXRoZW4KKwkJIyBidXN5Ym94IHN5c2N0bCBkb2VzIG5vdCBzdXBwb3J0IC1xCisJCVZFUkJPU0VfUkVESVI9IjE+L2Rldi9udWxsIgorCQlpZiBbICIke1ZFUkJPU0V9IiAhPSAibm8iIF07IHRoZW4KKwkJCVZFUkJPU0VfUkVESVI9IjE+JjEiCisJCWZpCisJCWV2YWwgL3NiaW4vc3lzY3RsIC1wICIke1NZU0NUTF9DT05GfSIgJFZFUkJPU0VfUkVESVIKKwllbHNlCisJCWVjaG8gIlRvIGhhdmUgJHtTWVNDVExfQ09ORn0gYXBwbGllZCBkdXJpbmcgYm9vdCwgaW5zdGFsbCBwYWNrYWdlIDxwcm9jcHM+LiIKKwlmaQorZmkKKworIworIyBVcGRhdGUgL2V0Yy9tb3RkLgorIworaWYgdGVzdCAiJEVESVRNT1REIiAhPSBubwordGhlbgorCXVuYW1lIC1hID4gL2V0Yy9tb3RkLnRtcAorCXNlZCAxZCAvZXRjL21vdGQgPj4gL2V0Yy9tb3RkLnRtcAorCW12IC9ldGMvbW90ZC50bXAgL2V0Yy9tb3RkCitmaQorCisjCisjIFRoaXMgaXMgYXMgZ29vZCBhIHBsYWNlIGFzIGFueSBmb3IgYSBzYW5pdHkgY2hlY2sKKyMKKyMgU2V0IHRoZSBzeXN0ZW0gY2xvY2sgZnJvbSBoYXJkd2FyZSBjbG9jaworIyBJZiB0aGUgdGltZXN0YW1wIGlzIG1vcmUgcmVjZW50IHRoYW4gdGhlIGN1cnJlbnQgdGltZSwKKyMgdXNlIHRoZSB0aW1lc3RhbXAgaW5zdGVhZC4KK3Rlc3QgLXggL2V0Yy9pbml0LmQvaHdjbG9jay5zaCAmJiAvZXRjL2luaXQuZC9od2Nsb2NrLnNoIHN0YXJ0CitpZiB0ZXN0IC1lIC9ldGMvdGltZXN0YW1wCit0aGVuCisJU1lTVEVNREFURT1gZGF0ZSAtdSArJTRZJTJtJTJkJTJIJTJNJTJTYAorCXJlYWQgVElNRVNUQU1QIDwgL2V0Yy90aW1lc3RhbXAKKwlpZiBbICR7VElNRVNUQU1QfSAtZ3QgJFNZU1RFTURBVEUgXTsgdGhlbgorCQkjIGZvcm1hdCB0aGUgdGltZXN0YW1wIGFzIGRhdGUgZXhwZWN0cyBpdCAoMm0yZDJIMk00WS4yUykKKwkJVFNfWVI9JHtUSU1FU1RBTVAlPz8/Pz8/Pz8/P30KKwkJVFNfU0VDPSR7VElNRVNUQU1QIz8/Pz8/Pz8/Pz8/P30KKwkJVFNfRklSU1QxMj0ke1RJTUVTVEFNUCU/P30KKwkJVFNfTUlERExFOD0ke1RTX0ZJUlNUMTIjPz8/P30KKwkJZGF0ZSAtdSAke1RTX01JRERMRTh9JHtUU19ZUn0uJHtUU19TRUN9CisJCXRlc3QgLXggL2V0Yy9pbml0LmQvaHdjbG9jay5zaCAmJiAvZXRjL2luaXQuZC9od2Nsb2NrLnNoIHN0b3AKKwlmaQorZmkKKzogZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tmcy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja2ZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyODY5NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvY2hlY2tmcy5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGNoZWNrZnMKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIGNoZWNrcm9vdAorIyBSZXF1aXJlZC1TdG9wOiAgICAgCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IENoZWNrIGFsbCBvdGhlciBmaWxlIHN5c3RlbXMKKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworCisjCisjIENoZWNrIHRoZSByZXN0IG9mIHRoZSBmaWxlc3lzdGVtcy4KKyMKK2lmIHRlc3QgISAtZiAvZmFzdGJvb3QKK3RoZW4KKyAgICBpZiB0ZXN0IC1mIC9mb3JjZWZzY2sKKyAgICB0aGVuCisgICAgICAgIGZvcmNlPSItZiIKKyAgICBlbHNlCisgICAgICAgIGZvcmNlPSIiCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRlNDS0ZJWCIgID0geWVzCisgICAgdGhlbgorCWZpeD0iLXkiCisgICAgZWxzZQorCWZpeD0iLWEiCisgICAgZmkKKyAgICBzcGlubmVyPSItQyIKKyAgICBjYXNlICIkVEVSTSIgaW4KKwlkdW1ifG5ldHdvcmt8dW5rbm93bnwiIikgc3Bpbm5lcj0iIiA7OworICAgIGVzYWMKKyAgICB0ZXN0ICJgdW5hbWUgLW1gIiA9ICJzMzkwIiAmJiBzcGlubmVyPSIiICMgVGhpcyBzaG91bGQgZ28gYXdheQorICAgIHRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJDaGVja2luZyBhbGwgZmlsZXN5c3RlbXMuLi4iCisgICAgZnNjayAkc3Bpbm5lciAtUiAtQSAkZml4ICRmb3JjZQorICAgIGlmIHRlc3QgIiQ/IiAtZ3QgMQorICAgIHRoZW4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gImZzY2sgZmFpbGVkLiAgUGxlYXNlIHJlcGFpciBtYW51YWxseS4iCisgICAgICBlY2hvCisgICAgICBlY2hvICJDT05UUk9MLUQgd2lsbCBleGl0IGZyb20gdGhpcyBzaGVsbCBhbmQgY29udGludWUgc3lzdGVtIHN0YXJ0dXAuIgorICAgICAgZWNobworICAgICAgIyBTdGFydCBhIHNpbmdsZSB1c2VyIHNoZWxsIG9uIHRoZSBjb25zb2xlCisgICAgICAvc2Jpbi9zdWxvZ2luICRDT05TT0xFCisgICAgZmkKK2ZpCitybSAtZiAvZmFzdGJvb3QgL2ZvcmNlZnNjaworCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2NoZWNrcm9vdC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja3Jvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZlZTJhZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9jaGVja3Jvb3Quc2gKQEAgLTAsMCArMSwxNDggQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgY2hlY2tyb290CisjIFJlcXVpcmVkLVN0YXJ0OiAgICB1ZGV2CisjIFJlcXVpcmVkLVN0b3A6ICAgICAKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogQ2hlY2sgdG8gcm9vdCBmaWxlIHN5c3RlbS4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworCisjCisjIFNldCBTVUxPR0lOIGluIC9ldGMvZGVmYXVsdC9yY1MgdG8geWVzIGlmIHlvdSB3YW50IGEgc3Vsb2dpbiB0byBiZSBzcGF3bmVkCisjIGZyb20gdGhpcyBzY3JpcHQgKmJlZm9yZSBhbnl0aGluZyBlbHNlKiB3aXRoIGEgdGltZW91dCwgbGlrZSBTQ08gZG9lcy4KKyMKK3Rlc3QgIiRTVUxPR0lOIiA9IHllcyAmJiBzdWxvZ2luIC10IDMwICRDT05TT0xFCisKKyMKKyMgUmVhZCAvZXRjL2ZzdGFiLgorIworZXhlYyA5PCAvZXRjL2ZzdGFiCityb290bW9kZT1ydworcm9vdG9wdHM9cncKK3Jvb3RjaGVjaz0kRU5BQkxFX1JPT1RGU19GU0NLCitzd2FwX29uX21kPW5vCitkZXZmcz0KK3doaWxlIHJlYWQgZnMgbW50IHR5cGUgb3B0cyBkdW1wIHBhc3MganVuayA8JjkKK2RvCisJY2FzZSAiJGZzIiBpbgorCQkiInxcIyopCisJCQljb250aW51ZTsKKwkJCTs7CisJCS9kZXYvbWQqKQorCQkJIyBTd2FwIG9uIG1kIGRldmljZS4KKwkJCXRlc3QgIiR0eXBlIiA9IHN3YXAgJiYgc3dhcF9vbl9tZD15ZXMKKwkJCTs7CisJCS9kZXYvKikKKwkJCTs7CisJCSopCisJCQkjIE1pZ2h0IGJlIGEgc3dhcGZpbGUuCisJCQl0ZXN0ICIkdHlwZSIgPSBzd2FwICYmIHN3YXBfb25fbWQ9eWVzCisJCQk7OworCWVzYWMKKwl0ZXN0ICIkdHlwZSIgPSBkZXZmcyAmJiBkZXZmcz0iJGZzIgorCXRlc3QgIiRtbnQiICE9IC8gJiYgY29udGludWUKKwlyb290b3B0cz0iJG9wdHMiCisJdGVzdCAiJHBhc3MiID0gMCAtbyAiJHBhc3MiID0gIiIgJiYgcm9vdGNoZWNrPW5vCisJY2FzZSAiJG9wdHMiIGluCisJCXJvfHJvLCp8Kixyb3wqLHJvLCopCisJCQlyb290bW9kZT1ybworCQkJOzsKKwllc2FjCitkb25lCitleGVjIDA+JjkgOT4mLQorCisjIENoZWNrIGZvciBjb25mbGljdGluZyBjb25maWd1cmF0aW9ucworaWYgWyAiJHJvb3Rtb2RlIiA9ICJybyIgLWEgIiRST09URlNfUkVBRF9PTkxZIiA9ICJubyIgXSB8fCBcCisJWyAiJHJvb3Rtb2RlIiA9ICJydyIgLWEgIiRST09URlNfUkVBRF9PTkxZIiA9ICJ5ZXMiIF07IHRoZW4KKwllY2hvICIiCisJZWNobyAiV0FSTjogY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgaW4gL2V0Yy9mc3RhYiBhbmQgL2V0Yy9kZWZhdWx0L3JjUyIKKwllY2hvICIgICAgICByZWdhcmRpbmcgdGhlIHdyaXRhYmlsaXR5IG9mIHJvb3Rmcy4gUGxlYXNlIGZpeCBvbmUgb2YgdGhlbS4iCisJZWNobyAiIgorZmkKKworCisjCisjIEFjdGl2YXRlIHRoZSBzd2FwIGRldmljZShzKSBpbiAvZXRjL2ZzdGFiLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUKKyMgYmVmb3JlIGZzY2ssIHNpbmNlIGZzY2sgY2FuIGJlIHF1aXRlIG1lbW9yeS1odW5ncnkuCisjCit0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiQWN0aXZhdGluZyBzd2FwIgorc3dhcG9uIC1hIDI+IC9kZXYvbnVsbAorCisjCisjIENoZWNrIHRoZSByb290IGZpbGVzeXN0ZW0uCisjCitpZiB0ZXN0IC1mIC9mYXN0Ym9vdCB8fCB0ZXN0ICRyb290Y2hlY2sgPSBubwordGhlbgorICB0ZXN0ICRyb290Y2hlY2sgPSB5ZXMgJiYgZWNobyAiRmFzdCBib290LCBubyBmaWxlc3lzdGVtIGNoZWNrIgorZWxzZQorICAjCisgICMgRW5zdXJlIHRoYXQgcm9vdCBpcyBxdWllc2NlbnQgYW5kIHJlYWQtb25seSBiZWZvcmUgZnNjaydpbmcuCisgICMKKyAgbW91bnQgLW4gLW8gcmVtb3VudCxybyAvCisgIGlmIHRlc3QgJD8gPSAwCisgIHRoZW4KKyAgICBpZiB0ZXN0IC1mIC9mb3JjZWZzY2sKKyAgICB0aGVuCisJZm9yY2U9Ii1mIgorICAgIGVsc2UKKwlmb3JjZT0iIgorICAgIGZpCisgICAgaWYgdGVzdCAiJEZTQ0tGSVgiID0geWVzCisgICAgdGhlbgorCWZpeD0iLXkiCisgICAgZWxzZQorCWZpeD0iLWEiCisgICAgZmkKKyAgICBzcGlubmVyPSItQyIKKyAgICBjYXNlICIkVEVSTSIgaW4KKyAgICAgICAgZHVtYnxuZXR3b3JrfHVua25vd258IiIpIHNwaW5uZXI9IiIgOzsKKyAgICBlc2FjCisgICAgdGVzdCBgdW5hbWUgLW1gID0gczM5MCAmJiBzcGlubmVyPSIiICMgVGhpcyBzaG91bGQgZ28gYXdheQorICAgIHRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJDaGVja2luZyByb290IGZpbGVzeXN0ZW0uLi4iCisgICAgZnNjayAkc3Bpbm5lciAkZm9yY2UgJGZpeCAvCisgICAgIworICAgICMgSWYgdGhlcmUgd2FzIGEgZmFpbHVyZSwgZHJvcCBpbnRvIHNpbmdsZS11c2VyIG1vZGUuCisgICAgIworICAgICMgTk9URTogImZhaWx1cmUiIGlzIGRlZmluZWQgYXMgZXhpdGluZyB3aXRoIGEgcmV0dXJuIGNvZGUgb2YKKyAgICAjIDIgb3IgbGFyZ2VyLiAgQSByZXR1cm4gY29kZSBvZiAxIGluZGljYXRlcyB0aGF0IGZpbGVzeXN0ZW0KKyAgICAjIGVycm9ycyB3ZXJlIGNvcnJlY3RlZCBidXQgdGhhdCB0aGUgYm9vdCBtYXkgcHJvY2VlZC4KKyAgICAjCisgICAgaWYgdGVzdCAiJD8iIC1ndCAxCisgICAgdGhlbgorICAgICAgIyBTdXJwcmlzZSEgUmUtZGlyZWN0aW5nIGZyb20gYSBIRVJFIGRvY3VtZW50IChhcyBpbgorICAgICAgIyAiY2F0IDw8IEVPRiIpIHdvbid0IHdvcmssIGJlY2F1c2UgdGhlIHJvb3QgaXMgcmVhZC1vbmx5LgorICAgICAgZWNobworICAgICAgZWNobyAiZnNjayBmYWlsZWQuICBQbGVhc2UgcmVwYWlyIG1hbnVhbGx5IGFuZCByZWJvb3QuICBQbGVhc2Ugbm90ZSIKKyAgICAgIGVjaG8gInRoYXQgdGhlIHJvb3QgZmlsZXN5c3RlbSBpcyBjdXJyZW50bHkgbW91bnRlZCByZWFkLW9ubHkuICBUbyIKKyAgICAgIGVjaG8gInJlbW91bnQgaXQgcmVhZC13cml0ZToiCisgICAgICBlY2hvCisgICAgICBlY2hvICIgICAjIG1vdW50IC1uIC1vIHJlbW91bnQscncgLyIKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIkNPTlRST0wtRCB3aWxsIGV4aXQgZnJvbSB0aGlzIHNoZWxsIGFuZCBSRUJPT1QgdGhlIHN5c3RlbS4iCisgICAgICBlY2hvCisgICAgICAjIFN0YXJ0IGEgc2luZ2xlIHVzZXIgc2hlbGwgb24gdGhlIGNvbnNvbGUKKyAgICAgIC9zYmluL3N1bG9naW4gJENPTlNPTEUKKyAgICAgIHJlYm9vdCAtZgorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIqKiogRVJST1IhICBDYW5ub3QgZnNjayByb290IGZzIGJlY2F1c2UgaXQgaXMgbm90IG1vdW50ZWQgcmVhZC1vbmx5ISIKKyAgICBlY2hvCisgIGZpCitmaQorCisjCisjCUlmIHRoZSByb290IGZpbGVzeXN0ZW0gd2FzIG5vdCBtYXJrZWQgYXMgcmVhZC1vbmx5IGluIC9ldGMvZnN0YWIsCisjCXJlbW91bnQgdGhlIHJvb3RmcyBydyBidXQgZG8gbm90IHRyeSB0byBjaGFuZ2UgbXRhYiBiZWNhdXNlIGl0CisjCWlzIG9uIGEgcm8gZnMgdW50aWwgdGhlIHJlbW91bnQgc3VjY2VlZGVkLiBUaGVuIGNsZWFuIHVwIG9sZCBtdGFicworIwlhbmQgZmluYWxseSB3cml0ZSB0aGUgbmV3IG10YWIuCisjCittb3VudCAtbiAtbyByZW1vdW50LCRyb290bW9kZSAvCitpZiB0ZXN0ICIkcm9vdG1vZGUiID0gcncKK3RoZW4KKwlsbiAtc2YgL3Byb2MvbW91bnRzIC9kZXYvbXRhYgorZmkKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kZXZwdHMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDk3OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzCkBAIC0wLDAgKzEsNSBAQAorIyBHSUQgb2YgdGhlIGB0dHknIGdyb3VwCitUVFlHUlA9NQorIAorIyBTZXQgdG8gNjAwIHRvIGhhdmUgYG1lc2cgbicgYmUgdGhlIGRlZmF1bHQKK1RUWU1PREU9NjIwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZGV2cHRzLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNjA0M2ZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RldnB0cy5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGRldnB0cworIyBSZXF1aXJlZC1TdGFydDogdWRldgorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBNb3VudCAvZGV2L3B0cyBmaWxlIHN5c3RlbXMuCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvZGVmYXVsdC9kZXZwdHMKKworaWYgZ3JlcCAtcSBkZXZwdHMgL3Byb2MvZmlsZXN5c3RlbXMKK3RoZW4KKwkjCisJIwlDcmVhdGUgbXVsdGlwbGV4b3IgZGV2aWNlLgorCSMKKwl0ZXN0IC1jIC9kZXYvcHRteCB8fCBta25vZCAtbSA2NjYgL2Rldi9wdG14IGMgNSAyCisKKwkjCisJIwlNb3VudCAvZGV2L3B0cyBpZiBuZWVkZWQuCisJIworCWlmICEgZ3JlcCAtcSBkZXZwdHMgL3Byb2MvbW91bnRzCisJdGhlbgorCQlta2RpciAtcCAvZGV2L3B0cworCQltb3VudCAtdCBkZXZwdHMgZGV2cHRzIC9kZXYvcHRzIC1vZ2lkPSR7VFRZR1JQfSxtb2RlPSR7VFRZTU9ERX0KKwlmaQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9kbWVzZy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTdiMDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2RtZXNnLnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgZG1lc2cKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIFsgLWYgL3Zhci9sb2cvZG1lc2cgXTsgdGhlbgorCWlmIFsgLWYgL3Vzci9zYmluL2xvZ3JvdGF0ZSBdOyB0aGVuCisJCWxvZ3JvdGF0ZSAtZiAvZXRjL2xvZ3JvdGF0ZS1kbWVzZy5jb25mCisJZWxzZQorCQltdiAtZiAvdmFyL2xvZy9kbWVzZyAvdmFyL2xvZy9kbWVzZy5vbGQKKwlmaQorZmkKK2RtZXNnIC1zIDEzMTA3MiA+IC92YXIvbG9nL2RtZXNnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvZnVuY3Rpb25zIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Z1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMWFkMWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL2Z1bmN0aW9ucwpAQCAtMCwwICsxLDkxIEBACisjIC0qLVNoZWxsLXNjcmlwdC0qLQorIworIyBmdW5jdGlvbnMgICAgIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgdG8gYmUgdXNlZCBieSBtb3N0IG9yIGFsbAorIyAgICAgICAgICAgICAgIHNoZWxsIHNjcmlwdHMgaW4gdGhlIC9ldGMvaW5pdC5kIGRpcmVjdG9yeS4KKyMKKworTk9STUFMPSJcXDAzM1swOzM5bSIgICAgICAgICAjIFN0YW5kYXJkIGNvbnNvbGUgZ3JleQorU1VDQ0VTUz0iXFwwMzNbMTszMm0iICAgICAgICAjIFN1Y2Nlc3MgaXMgZ3JlZW4KK1dBUk5JTkc9IlxcMDMzWzE7MzNtIiAgICAgICAgIyBXYXJuaW5ncyBhcmUgeWVsbG93CitGQUlMVVJFPSJcXDAzM1sxOzMxbSIgICAgICAgICMgRmFpbHVyZXMgYXJlIHJlZAorSU5GTz0iXFwwMzNbMTszNm0iICAgICAgICAgICAjIEluZm9ybWF0aW9uIGlzIGxpZ2h0IGN5YW4KK0JSQUNLRVQ9IlxcMDMzWzE7MzRtIiAgICAgICAgIyBCcmFja2V0cyBhcmUgYmx1ZQorCisjIE5PVEU6IFRoZSBwaWRvZnByb2MgKCkgZG9lc24ndCBzdXBwb3J0IHRoZSBwcm9jZXNzIHdoaWNoIGlzIGEgc2NyaXB0IHVubGVzcworIyAgICAgICB0aGUgcGlkb2Ygc3VwcG9ydHMgIi14IiBvcHRpb24uIElmIHlvdSB3YW50IHRvIHVzZSBpdCBmb3Igc3VjaCBhCisjICAgICAgIHByb2Nlc3M6CisjICAgICAgIDEpIElmIHRoZXJlIGlzIG5vICJwaWRvZiAteCIsIHJlcGxhY2UgdGhlICJwaWRvZiAkMSIgd2l0aCBhbm90aGVyCisjICAgICAgICAgIGNvbW1hbmQgbGlrZShmb3IgY29yZS1pbWFnZS1taW5pbWFsKToKKyMgICAgICAgICAgICBwcyB8IGF3ayAnLyciJDEiJy8ge3ByaW50ICQxfScKKyMgICAgICAgT3IKKyMgICAgICAgMikgSWYgdGhlcmUgaXMgInBpZG9mIC14IiwgcmVwbGFjZSAicGlkb2YiIHdpdGggInBpZG9mIC14Ii4KKyMKKyMgcGlkb2Zwcm9jIC0gcHJpbnQgdGhlIHBpZCBvZiBhIHByb2Nlc3MKKyMgJDE6IHRoZSBuYW1lIG9mIHRoZSBwcm9jZXNzCitwaWRvZnByb2MgKCkgeworCisJIyBwaWRvZiBvdXRwdXQgbnVsbCB3aGVuIG5vIHByb2dyYW0gaXMgcnVubmluZywgc28gbm8gIjI+L2Rldi9udWxsIi4KKwlwaWQ9YHBpZG9mICQxYAorCXN0YXR1cz0kPworCWNhc2UgJHN0YXR1cyBpbgorCTApCisJCWVjaG8gJHBpZAorCQlyZXR1cm4gMAorCQk7OworCTEyNykKKwkJZWNobyAiRVJST1I6IGNvbW1hbmQgcGlkb2Ygbm90IGZvdW5kIiA+JjIKKwkJZXhpdCAxMjcKKwkJOzsKKwkqKQorCQlyZXR1cm4gJHN0YXR1cworCQk7OworCWVzYWMKK30KKworbWFjaGluZV9pZCgpIHsgIyByZXR1cm4gdGhlIG1hY2hpbmUgSUQKKwlhd2sgJ0JFR0lOIHsgRlM9IjogIiB9IC9IYXJkd2FyZS8gXAorCQl7IGdzdWIoIiAiLCAiXyIsICQyKTsgcHJpbnQgdG9sb3dlcigkMikgfSAnIDwvcHJvYy9jcHVpbmZvCit9CisKK2tpbGxwcm9jKCkgeyAjIGtpbGwgdGhlIG5hbWVkIHByb2Nlc3MoZXMpCisJcGlkPWBwaWRvZnByb2MgJDFgICYmIGtpbGwgJHBpZAorfQorCitzdGF0dXMoKSB7CisgICAgbG9jYWwgcGlkCisgICAgaWYgWyAiJCMiID0gMCBdOyB0aGVuCisgICAgICAgIGVjaG8gIlVzYWdlOiBzdGF0dXMge3Byb2dyYW19IgorICAgICAgICByZXR1cm4gMQorICAgIGZpCisgICAgcGlkPWBwaWRvZnByb2MgJDFgCisgICAgaWYgWyAtbiAiJHBpZCIgXTsgdGhlbgorICAgICAgICBlY2hvICIkMSAocGlkICRwaWQpIGlzIHJ1bm5pbmcuLi4iCisgICAgICAgIHJldHVybiAwCisgICAgZWxzZQorICAgICAgICBlY2hvICIkMSBpcyBzdG9wcGVkIgorICAgIGZpCisgICAgcmV0dXJuIDMKK30KKworc3VjY2VzcygpIHsKKyAgICBlY2hvIC1uIC1lICIke0JSQUNLRVR9WyR7U1VDQ0VTU30gIE9LICAke0JSQUNLRVR9XSR7Tk9STUFMfSIKKyAgICByZXR1cm4gMAorfQorCitmYWlsdXJlKCkgeworICAgIGxvY2FsIHJjPSQqCisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske0ZBSUxVUkV9IEZBSUwgJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuICRyYworfQorCit3YXJuaW5nKCkgeworICAgIGxvY2FsIHJjPSQqCisgICAgZWNobyAtbiAtZSAiJHtCUkFDS0VUfVske1dBUk5JTkd9IFdBUk4gJHtCUkFDS0VUfV0ke05PUk1BTH0iCisgICAgcmV0dXJuICRyYworfQorCitwYXNzZWQoKSB7CisgICAgbG9jYWwgcmM9JCoKKyAgICBlY2hvIC1uIC1lICIke0JSQUNLRVR9WyR7U1VDQ0VTU30gUEFTUyAke0JSQUNLRVR9XSR7Tk9STUFMfSIKKyAgICByZXR1cm4gJHJjCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaGFsdCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9oYWx0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1NmY3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaGFsdApAQCAtMCwwICsxLDI5IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGhhbHQKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwCisjIFNob3J0LURlc2NyaXB0aW9uOiBFeGVjdXRlIHRoZSBoYWx0IGNvbW1hbmQuCisjIERlc2NyaXB0aW9uOgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFNlZSBpZiB3ZSBuZWVkIHRvIGN1dCB0aGUgcG93ZXIuCitpZiB0ZXN0IC14IC9ldGMvaW5pdC5kL3Vwcy1tb25pdG9yCit0aGVuCisJL2V0Yy9pbml0LmQvdXBzLW1vbml0b3IgcG93ZXJvZmYKK2ZpCisKKyMgRG9uJ3Qgc2h1dCBkb3duIGRyaXZlcyBpZiB3ZSdyZSB1c2luZyBSQUlELgoraGRkb3duPSItaCIKK2lmIGdyZXAgLXFzICdebWQuKmFjdGl2ZScgL3Byb2MvbWRzdGF0Cit0aGVuCisJaGRkb3duPSIiCitmaQorCitoYWx0IFNFRF9IQUxUQVJHUyAtcCAkaGRkb3duCisKKzogZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaG9zdG5hbWUuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaG9zdG5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUyODdjYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvaG9zdG5hbWUuc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBob3N0bmFtZQorIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogU2V0IGhvc3RuYW1lIGJhc2VkIG9uIC9ldGMvaG9zdG5hbWUKKyMjIyBFTkQgSU5JVCBJTkZPCitIT1NUTkFNRT0kKC9iaW4vaG9zdG5hbWUpCisKK2hvc3RuYW1lIC1iIC1GIC9ldGMvaG9zdG5hbWUgMj4gL2Rldi9udWxsCitpZiBbICQ/IC1lcSAwIF07IHRoZW4KKwlleGl0CitmaQorCisjIEJ1c3lib3ggaG9zdG5hbWUgZG9lc24ndCBzdXBwb3J0IC1iIHNvIHdlIG5lZWQgaW1wbGVtZW50IGl0IG9uIG91ciBvd24KK2lmIFsgLWYgL2V0Yy9ob3N0bmFtZSBdO3RoZW4KKwlob3N0bmFtZSBgY2F0IC9ldGMvaG9zdG5hbWVgCitlbGlmIFsgLXogIiRIT1NUTkFNRSIgLW8gIiRIT1NUTkFNRSIgPSAiKG5vbmUpIiAtbyAhIC16ICJgZWNobyAkSE9TVE5BTUUgfCBzZWQgLW4gJy9eWzAtOV0qXC5bMC05XS4qL3AnYCIgXSA7IHRoZW4KKwlob3N0bmFtZSBsb2NhbGhvc3QKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbG9ncm90YXRlLWRtZXNnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY0NmU0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9sb2dyb3RhdGUtZG1lc2cuY29uZgpAQCAtMCwwICsxLDkgQEAKKyMgc2VlICJtYW4gbG9ncm90YXRlIiBmb3IgZGV0YWlscworIyByb3RhdGUgZG1lc2csIGFuZCBrZWVwIDUgdmVyc2lvbnMuCisKKy92YXIvbG9nL2RtZXNnIHsKKwljcmVhdGUKKwlyb3RhdGUgNQorCW5vZGF0ZWV4dAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRiYWU0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9tb3VudGFsbC5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vdW50YWxsCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudHZpcnRmcworIyBSZXF1aXJlZC1TdG9wOiAKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogTW91bnQgYWxsIGZpbGVzeXN0ZW1zLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworCisjCisjIE1vdW50IGxvY2FsIGZpbGVzeXN0ZW1zIGluIC9ldGMvZnN0YWIuIEZvciBzb21lIHJlYXNvbiwgcGVvcGxlCisjIG1pZ2h0IHdhbnQgdG8gbW91bnQgInByb2MiIHNldmVyYWwgdGltZXMsIGFuZCBtb3VudCAtdiBjb21wbGFpbnMKKyMgYWJvdXQgdGhpcy4gU28gd2UgbW91bnQgInByb2MiIGZpbGVzeXN0ZW1zIHdpdGhvdXQgLXYuCisjCit0ZXN0ICIkVkVSQk9TRSIgIT0gbm8gJiYgZWNobyAiTW91bnRpbmcgbG9jYWwgZmlsZXN5c3RlbXMuLi4iCittb3VudCAtYXQgbm9uZnMsbm9zbWJmcyxub25jcGZzIDI+L2Rldi9udWxsCisKKyMKKyMgV2UgbWlnaHQgaGF2ZSBtb3VudGVkIHNvbWV0aGluZyBvdmVyIC9kZXYsIHNlZSBpZiAvZGV2L2luaXRjdGwgaXMgdGhlcmUuCisjCitpZiB0ZXN0ICEgLXAgL2Rldi9pbml0Y3RsCit0aGVuCisJcm0gLWYgL2Rldi9pbml0Y3RsCisJbWtub2QgLW0gNjAwIC9kZXYvaW5pdGN0bCBwCitmaQora2lsbCAtVVNSMSAxCisKKyMKKyMgRXhlY3V0ZSBzd2Fwb24gY29tbWFuZCBhZ2FpbiwgaW4gY2FzZSB3ZSB3YW50IHRvIHN3YXAgdG8KKyMgYSBmaWxlIG9uIGEgbm93IG1vdW50ZWQgZmlsZXN5c3RlbS4KKyMKK3N3YXBvbiAtYSAyPiAvZGV2L251bGwKKworOiBleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL21vdW50bmZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlNmMxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvbW91bnRuZnMuc2gKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBtb3VudG5mcworIyBSZXF1aXJlZC1TdGFydDogICAgJGxvY2FsX2ZzICRuZXR3b3JrICRycGNiaW5kCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMjIyBFTkQgSU5JVCBJTkZPCisKKyMKKyMJUnVuIGluIGEgc3Vic2hlbGwgYmVjYXVzZSBvZiBJL08gcmVkaXJlY3Rpb24uCisjCit0ZXN0IC1mIC9ldGMvZnN0YWIgJiYgKAorCisjCisjCVJlYWQgdGhyb3VnaCBmc3RhYiBsaW5lIGJ5IGxpbmUuIElmIGl0IGlzIE5GUywgc2V0IHRoZSBmbGFnCisjCWZvciBtb3VudGluZyBORlMgZmlsZXN5c3RlbXMuIElmIGFueSBORlMgcGFydGl0aW9uIGlzIGZvdW5kIGFuZCBpdAorIwlub3QgbW91bnRlZCB3aXRoIHRoZSBub2xvY2sgb3B0aW9uLCB3ZSBzdGFydCB0aGUgcnBjYmluZC4KKyMKK3JwY2JpbmQ9bm8KK21vdW50X25mcz1ubworbW91bnRfc21iPW5vCittb3VudF9uY3A9bm8KK21vdW50X2NpZnM9bm8KK3doaWxlIHJlYWQgZGV2aWNlIG1vdW50cHQgZnN0eXBlIG9wdGlvbnMKK2RvCisJY2FzZSAiJGRldmljZSIgaW4KKwkJIiJ8XCMqKQorCQkJY29udGludWUKKwkJCTs7CisJZXNhYworCisJY2FzZSAiJG9wdGlvbnMiIGluCisJCSpub2F1dG8qKQorCQkJY29udGludWUKKwkJCTs7CisJZXNhYworCisJaWYgdGVzdCAiJGZzdHlwZSIgPSBuZnMKKwl0aGVuCisJCW1vdW50X25mcz15ZXMKKwkJY2FzZSAiJG9wdGlvbnMiIGluCisJCQkqbm9sb2NrKikKKwkJCQk7OworCQkJKikKKwkJCQlycGNiaW5kPXllcworCQkJCTs7CisJCWVzYWMKKwlmaQorCWlmIHRlc3QgIiRmc3R5cGUiID0gc21iZnMKKwl0aGVuCisJCW1vdW50X3NtYj15ZXMKKwlmaQorCWlmIHRlc3QgIiRmc3R5cGUiID0gbmNwZnMKKwl0aGVuCisJCW1vdW50X25jcD15ZXMKKwlmaQorCWlmIHRlc3QgIiRmc3R5cGUiID0gY2lmcworCXRoZW4KKwkJbW91bnRfY2lmcz15ZXMKKwlmaQorZG9uZQorCitleGVjIDA+JjEKKworaWYgdGVzdCAiJHJwY2JpbmQiID0geWVzCit0aGVuCisJaWYgdGVzdCAteCAvdXNyL3NiaW4vcnBjYmluZAorCXRoZW4KKwkJZWNobyAtbiAiU3RhcnRpbmcgcnBjYmluZC4uLiAiCisJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWV4ZWMgL3Vzci9zYmluL3JwY2JpbmQKKwkJc2xlZXAgMgorCWZpCitmaQorCitpZiB0ZXN0ICIkbW91bnRfbmZzIiA9IHllcyB8fCB0ZXN0ICIkbW91bnRfc21iIiA9IHllcyB8fCB0ZXN0ICIkbW91bnRfbmNwIiA9IHllcyB8fCB0ZXN0ICIkbW91bnRfY2lmcyIgPSB5ZXMKK3RoZW4KKwllY2hvICJNb3VudGluZyByZW1vdGUgZmlsZXN5c3RlbXMuLi4iCisJdGVzdCAiJG1vdW50X25mcyIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgbmZzCisJdGVzdCAiJG1vdW50X3NtYiIgPSB5ZXMgJiYgbW91bnQgLWEgLXQgc21iZnMKKwl0ZXN0ICIkbW91bnRfbmNwIiA9IHllcyAmJiBtb3VudCAtYSAtdCBuY3BmcworCXRlc3QgIiRtb3VudF9jaWZzIiA9IHllcyAmJiBtb3VudCAtYSAtdCBjaWZzCitmaQorCispIDwgL2V0Yy9mc3RhYgorCis6IGV4aXQgMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcG9wdWxhdGUtdm9sYXRpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTA0MDM3ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9wb3B1bGF0ZS12b2xhdGlsZS5zaApAQCAtMCwwICsxLDIyMiBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICAgICB2b2xhdGlsZQorIyBSZXF1aXJlZC1TdGFydDogICAgICAgJGxvY2FsX2ZzCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgJGxvY2FsX2ZzCisjIERlZmF1bHQtU3RhcnQ6ICAgICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246ICBQb3B1bGF0ZSB0aGUgdm9sYXRpbGUgZmlsZXN5c3RlbQorIyMjIEVORCBJTklUIElORk8KKworIyBHZXQgUk9PVF9ESVIKK0RJUk5BTUU9YGRpcm5hbWUgJDBgCitST09UX0RJUj1gZWNobyAkRElSTkFNRSB8IHNlZCAtbmUgJ3M6L2V0Yy8uKjo6cCdgCisKK1sgLWUgJHtST09UX0RJUn0vZXRjL2RlZmF1bHQvcmNTIF0gJiYgLiAke1JPT1RfRElSfS9ldGMvZGVmYXVsdC9yY1MKKyMgV2hlbiBydW5uaW5nIHBvcHVsYXRlLXZvbGF0aWxlLnNoIGF0IHJvb3RmcyB0aW1lLCBkaXNhYmxlIGNhY2hlLgorWyAtbiAiJFJPT1RfRElSIiBdICYmIFZPTEFUSUxFX0VOQUJMRV9DQUNIRT1ubworIyBJZiByb290ZnMgaXMgcmVhZC1vbmx5LCBkaXNhYmxlIGNhY2hlLgorWyAiJFJPT1RGU19SRUFEX09OTFkiID0gInllcyIgXSAmJiBWT0xBVElMRV9FTkFCTEVfQ0FDSEU9bm8KKworQ0ZHRElSPSIke1JPT1RfRElSfS9ldGMvZGVmYXVsdC92b2xhdGlsZXMiCitUTVBST09UPSIke1JPT1RfRElSfS92YXIvdm9sYXRpbGUvdG1wIgorQ09SRURFRj0iMDBfY29yZSIKKworWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIlBvcHVsYXRpbmcgdm9sYXRpbGUgRmlsZXN5c3RlbXMuIgorCitjcmVhdGVfZmlsZSgpIHsKKwlFWEVDPSIKKwl0b3VjaCBcIiQxXCI7CisJY2hvd24gJHtUVVNFUn0uJHtUR1JPVVB9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG93bmVyIC0ke1RVU0VSfS0gZm9yIC0kMS0uXCIgPi9kZXYvdHR5MCAyPiYxOworCWNobW9kICR7VE1PREV9ICQxIHx8IGVjaG8gXCJGYWlsZWQgdG8gc2V0IG1vZGUgLSR7VE1PREV9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjEgIgorCisJdGVzdCAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSB5ZXMgJiYgZWNobyAiJEVYRUMiID4+IC9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKworCVsgLWUgIiQxIiBdICYmIHsKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIlRhcmdldCBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcuIgorCX0gfHwgeworCQlpZiBbIC16ICIkUk9PVF9ESVIiIF07IHRoZW4KKwkJCWV2YWwgJEVYRUMgJgorCQllbHNlCisJCQkjIENyZWF0aW5nIHNvbWUgZmlsZXMgYXQgcm9vdGZzIHRpbWUgbWF5IGZhaWwgYW5kIHNob3VsZCBmYWlsLAorCQkJIyBidXQgdGhlc2UgZmFpbHVyZXMgc2hvdWxkIG5vdCBiZSBsb2dnZWQgdG8gbWFrZSBzdXJlIHRoZSBkb19yb290ZnMKKwkJCSMgcHJvY2VzcyBkb2Vzbid0IGZhaWwuIFRoaXMgZG9lcyBubyBoYXJtLCBhcyB0aGlzIHNjcmlwdCB3aWxsCisJCQkjIHJ1biBvbiB0YXJnZXQgdG8gc2V0IHVwIHRoZSBjb3JyZWN0IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKwkJCWV2YWwgJEVYRUMgPiAvZGV2L251bGwgMj4mMQorCQlmaQorCX0KK30KKworbWtfZGlyKCkgeworCUVYRUM9IgorCW1rZGlyIC1wIFwiJDFcIjsKKwljaG93biAke1RVU0VSfS4ke1RHUk9VUH0gJDEgfHwgZWNobyBcIkZhaWxlZCB0byBzZXQgb3duZXIgLSR7VFVTRVJ9LSBmb3IgLSQxLS5cIiA+L2Rldi90dHkwIDI+JjE7CisJY2htb2QgJHtUTU9ERX0gJDEgfHwgZWNobyBcIkZhaWxlZCB0byBzZXQgbW9kZSAtJHtUTU9ERX0tIGZvciAtJDEtLlwiID4vZGV2L3R0eTAgMj4mMSAiCisKKwl0ZXN0ICIkVk9MQVRJTEVfRU5BQkxFX0NBQ0hFIiA9IHllcyAmJiBlY2hvICIkRVhFQyIgPj4gL2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZAorCVsgLWUgIiQxIiBdICYmIHsKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIlRhcmdldCBhbHJlYWR5IGV4aXN0cy4gU2tpcHBpbmcuIgorCX0gfHwgeworCQlpZiBbIC16ICIkUk9PVF9ESVIiIF07IHRoZW4KKwkJCWV2YWwgJEVYRUMKKwkJZWxzZQorCQkJIyBGb3IgdGhlIHNhbWUgcmVhc29uIHdpdGggY3JlYXRlX2ZpbGUoKSwgZmFpbHVyZXMgc2hvdWxkCisJCQkjIG5vdCBiZSBsb2dnZWQuCisJCQlldmFsICRFWEVDID4gL2Rldi9udWxsIDI+JjEKKwkJZmkKKwl9Cit9CisKK2xpbmtfZmlsZSgpIHsKKwlFWEVDPSIKKwlpZiBbIC1MIFwiJDJcIiBdOyB0aGVuCisJCVsgXCJcJChyZWFkbGluayAtZiBcIiQyXCIpXCIgIT0gXCJcJChyZWFkbGluayAtZiBcIiQxXCIpXCIgXSAmJiB7IHJtIC1mIFwiJDJcIjsgbG4gLXNmIFwiJDFcIiBcIiQyXCI7IH07CisJZWxpZiBbIC1kIFwiJDJcIiBdOyB0aGVuCisJCWlmIGF3ayAnXCQyID09IFwiJDJcIiB7ZXhpdCAxfScgL3Byb2MvbW91bnRzOyB0aGVuCisJCQljcCAtYSAkMi8qICQxIDI+L2Rldi9udWxsOworCQkJY3AgLWEgJDIvLlshLl0qICQxIDI+L2Rldi9udWxsOworCQkJcm0gLXJmIFwiJDJcIjsKKwkJCWxuIC1zZiBcIiQxXCIgXCIkMlwiOworCQlmaQorCWVsc2UKKwkJbG4gLXNmIFwiJDFcIiBcIiQyXCI7CisJZmkKKyAgICAgICAgIgorCisJdGVzdCAiJFZPTEFUSUxFX0VOQUJMRV9DQUNIRSIgPSB5ZXMgJiYgZWNobyAiCSRFWEVDIiA+PiAvZXRjL3ZvbGF0aWxlLmNhY2hlLmJ1aWxkCisKKwlpZiBbIC16ICIkUk9PVF9ESVIiIF07IHRoZW4KKwkJZXZhbCAkRVhFQyAmCisJZWxzZQorCQkjIEZvciB0aGUgc2FtZSByZWFzb24gd2l0aCBjcmVhdGVfZmlsZSgpLCBmYWlsdXJlcyBzaG91bGQKKwkJIyBub3QgYmUgbG9nZ2VkLgorCQlldmFsICRFWEVDID4gL2Rldi9udWxsIDI+JjEKKwlmaQorfQorCitjaGVja19yZXF1aXJlbWVudHMoKSB7CisJY2xlYW51cCgpIHsKKwkJcm0gIiR7VE1QX0lOVEVSTUVEfSIKKwkJcm0gIiR7VE1QX0RFRklORUR9IgorCQlybSAiJHtUTVBfQ09NQklORUR9IgorCX0KKworCUNGR0ZJTEU9IiQxIgorCVsgYGJhc2VuYW1lICIke0NGR0ZJTEV9ImAgPSAiJHtDT1JFREVGfSIgXSAmJiByZXR1cm4gMAorCisJVE1QX0lOVEVSTUVEPSIke1RNUFJPT1R9L3RtcC4kJCIKKwlUTVBfREVGSU5FRD0iJHtUTVBST09UfS90bXBkZWZpbmVkLiQkIgorCVRNUF9DT01CSU5FRD0iJHtUTVBST09UfS90bXBjb21iaW5lZC4kJCIKKworCXNlZCAnc0BcKF46XCkqOi4qQFwxQCcgJHtST09UX0RJUn0vZXRjL3Bhc3N3ZCB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0RFRklORUR9IgorCWNhdCAke0NGR0ZJTEV9IHwgZ3JlcCAtdiAiXiMiIHwgY3V0IC1zIC1kICIgIiAtZiAyID4gIiR7VE1QX0lOVEVSTUVEfSIKKwljYXQgIiR7VE1QX0RFRklORUR9IiAiJHtUTVBfSU5URVJNRUR9IiB8IHNvcnQgfCB1bmlxID4gIiR7VE1QX0NPTUJJTkVEfSIKKwlOUl9ERUZJTkVEX1VTRVJTPSJgY2F0ICIke1RNUF9ERUZJTkVEfSIgfCB3YyAtbGAiCisJTlJfQ09NQklORURfVVNFUlM9ImBjYXQgIiR7VE1QX0NPTUJJTkVEfSIgfCB3YyAtbGAiCisKKwlbICIke05SX0RFRklORURfVVNFUlN9IiAtbmUgIiR7TlJfQ09NQklORURfVVNFUlN9IiBdICYmIHsKKwkJZWNobyAiVW5kZWZpbmVkIHVzZXJzOiIKKwkJZGlmZiAiJHtUTVBfREVGSU5FRH0iICIke1RNUF9DT01CSU5FRH0iIHwgZ3JlcCAiXj4iCisJCWNsZWFudXAKKwkJcmV0dXJuIDEKKwl9CisKKworCXNlZCAnc0BcKF46XCkqOi4qQFwxQCcgJHtST09UX0RJUn0vZXRjL2dyb3VwIHwgc29ydCB8IHVuaXEgPiAiJHtUTVBfREVGSU5FRH0iCisJY2F0ICR7Q0ZHRklMRX0gfCBncmVwIC12ICJeIyIgfCBjdXQgLXMgLWQgIiAiIC1mIDMgPiAiJHtUTVBfSU5URVJNRUR9IgorCWNhdCAiJHtUTVBfREVGSU5FRH0iICIke1RNUF9JTlRFUk1FRH0iIHwgc29ydCB8IHVuaXEgPiAiJHtUTVBfQ09NQklORUR9IgorCisJTlJfREVGSU5FRF9HUk9VUFM9ImBjYXQgIiR7VE1QX0RFRklORUR9IiB8IHdjIC1sYCIKKwlOUl9DT01CSU5FRF9HUk9VUFM9ImBjYXQgIiR7VE1QX0NPTUJJTkVEfSIgfCB3YyAtbGAiCisKKwlbICIke05SX0RFRklORURfR1JPVVBTfSIgLW5lICIke05SX0NPTUJJTkVEX0dST1VQU30iIF0gJiYgeworCQllY2hvICJVbmRlZmluZWQgZ3JvdXBzOiIKKwkJZGlmZiAiJHtUTVBfREVGSU5FRH0iICIke1RNUF9DT01CSU5FRH0iIHwgZ3JlcCAiXj4iCisJCWNsZWFudXAKKwkJcmV0dXJuIDEKKwl9CisKKwkjIEFkZCBjaGVja3MgZm9yIHJlcXVpcmVkIGRpcmVjdG9yaWVzIGhlcmUKKworCWNsZWFudXAKKwlyZXR1cm4gMAorfQorCithcHBseV9jZmdmaWxlKCkgeworCUNGR0ZJTEU9IiQxIgorCisJY2hlY2tfcmVxdWlyZW1lbnRzICIke0NGR0ZJTEV9IiB8fCB7CisJCWVjaG8gIlNraXBwaW5nICR7Q0ZHRklMRX0iCisJCXJldHVybiAxCisJfQorCisJY2F0ICR7Q0ZHRklMRX0gfCBncmVwIC12ICJeIyIgfCBcCisJCXdoaWxlIHJlYWQgTElORTsgZG8KKwkJZXZhbCBgZWNobyAiJExJTkUiIHwgc2VkIC1uICJzL1woLipcKVwgXCguKlwpIFwoLipcKVwgXCguKlwpXCBcKC4qXClcIFwoLipcKS9UVFlQRT1cMSA7IFRVU0VSPVwyOyBUR1JPVVA9XDM7IFRNT0RFPVw0OyBUTkFNRT1cNSBUTFRBUkdFVD1cNi9wImAKKwkJVE5BTUU9JHtST09UX0RJUn0ke1ROQU1FfQorCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ2hlY2tpbmcgZm9yIC0ke1ROQU1FfS0uIgorCisJCVsgIiR7VFRZUEV9IiA9ICJsIiBdICYmIHsKKwkJCVRTT1VSQ0U9IiRUTFRBUkdFVCIKKwkJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBsaW5rIC0ke1ROQU1FfS0gcG9pbnRpbmcgdG8gLSR7VFNPVVJDRX0tLiIKKwkJCWxpbmtfZmlsZSAiJHtUU09VUkNFfSIgIiR7VE5BTUV9IgorCQkJY29udGludWUKKwkJfQorCisJCVsgLUwgIiR7VE5BTUV9IiBdICYmIHsKKwkJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJGb3VuZCBsaW5rLiIKKwkJCU5FV05BTUU9YGxzIC1sICIke1ROQU1FfSIgfCBzZWQgLWUgJ3MvXi4qLT4gXCguKlwpJC9cMS8nYAorCQkJZWNobyAke05FV05BTUV9IHwgZ3JlcCAtdiAiXi8iID4vZGV2L251bGwgJiYgeworCQkJCVROQU1FPSJgZWNobyAke1ROQU1FfSB8IHNlZCAtZSAnc0BcKC4qXCkvLipAXDFAJ2AvJHtORVdOQU1FfSIKKwkJCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiQ29udmVydGVkIHJlbGF0aXZlIGxpbmt0YXJnZXQgdG8gYWJzb2x1dGUgcGF0aCAtJHtUTkFNRX0tLiIKKwkJCX0gfHwgeworCQkJCVROQU1FPSIke05FV05BTUV9IgorCQkJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJVc2luZyBhYnNvbHV0ZSBsaW5rIHRhcmdldCAtJHtUTkFNRX0tLiIKKwkJCX0KKwkJfQorCisJCWNhc2UgIiR7VFRZUEV9IiBpbgorCQkJImYiKSAgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkNyZWF0aW5nIGZpbGUgLSR7VE5BTUV9LS4iCisJCQkJY3JlYXRlX2ZpbGUgIiR7VE5BTUV9IiAmCisJCQkJOzsKKwkJCSJkIikgIFsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgLSR7VE5BTUV9LS4iCisJCQkJbWtfZGlyICIke1ROQU1FfSIKKwkJCQkjIEFkZCBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbiBlbnRyeSBpbiBmc3RhYiB0byBtb3VudC4KKwkJCQk7OworCQkJKikgICAgWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIkludmFsaWQgdHlwZSAtJHtUVFlQRX0tLiIKKwkJCQljb250aW51ZQorCQkJCTs7CisJCWVzYWMKKwlkb25lCisJcmV0dXJuIDAKK30KKworY2xlYXJjYWNoZT0wCitleGVjIDk8L3Byb2MvY21kbGluZQord2hpbGUgcmVhZCBsaW5lIDwmOQorZG8KKwljYXNlICIkbGluZSIgaW4KKwkJKmNsZWFyY2FjaGUqKSAgY2xlYXJjYWNoZT0xCisJCQkgICAgICAgOzsKKwkJKikJICAgICAgIGNvbnRpbnVlCisJCQkgICAgICAgOzsKKwllc2FjCitkb25lCitleGVjIDk+Ji0KKworaWYgdGVzdCAtZSAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUgLWEgIiRWT0xBVElMRV9FTkFCTEVfQ0FDSEUiID0gInllcyIgLWEgIngkMSIgIT0gInh1cGRhdGUiIC1hICJ4JGNsZWFyY2FjaGUiID0gIngwIgordGhlbgorCXNoICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZQorZWxzZQorCXJtIC1mICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZSAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQKKwlmb3IgZmlsZSBpbiBgbHMgLTEgIiR7Q0ZHRElSfSIgfCBzb3J0YDsgZG8KKwkJYXBwbHlfY2ZnZmlsZSAiJHtDRkdESVJ9LyR7ZmlsZX0iCisJZG9uZQorCisJWyAtZSAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUuYnVpbGQgXSAmJiBzeW5jICYmIG12ICR7Uk9PVF9ESVJ9L2V0Yy92b2xhdGlsZS5jYWNoZS5idWlsZCAke1JPT1RfRElSfS9ldGMvdm9sYXRpbGUuY2FjaGUKK2ZpCisKK2lmIFsgLXogIiR7Uk9PVF9ESVJ9IiBdICYmIFsgLWYgL2V0Yy9sZC5zby5jYWNoZSBdICYmIFsgISAtZiAvdmFyL3J1bi9sZC5zby5jYWNoZSBdCit0aGVuCisJbG4gLXMgL2V0Yy9sZC5zby5jYWNoZSAvdmFyL3J1bi9sZC5zby5jYWNoZQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDMyOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVhZC1vbmx5LXJvb3Rmcy1ob29rLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZGVmYXVsdC9yY1MKKworWyAiJFJPT1RGU19SRUFEX09OTFkiID0gIm5vIiBdICYmIGV4aXQgMAorCitpc19vbl9yZWFkX29ubHlfcGFydGl0aW9uICgpIHsKKwlESVJFQ1RPUlk9JDEKKwlkaXI9YHJlYWRsaW5rIC1mICRESVJFQ1RPUllgCisJd2hpbGUgdHJ1ZTsgZG8KKwkJaWYgWyAhIC1kICIkZGlyIiBdOyB0aGVuCisJCQllY2hvICJFUlJPUjogJGRpciBpcyBub3QgYSBkaXJlY3RvcnkiCisJCQlleGl0IDEKKwkJZWxzZQorCQkJZm9yIGZsYWcgaW4gYGF3ayAtdiBkaXI9JGRpciAneyBpZiAoJDIgPT0gZGlyKSB7IHByaW50ICJGT1VORCI7IHNwbGl0KCQ0LEZMQUdTLCIsIikgfSB9OyBcCisJCQkJRU5EIHsgZm9yIChmIGluIEZMQUdTKSBwcmludCBGTEFHU1tmXSB9JyA8IC9wcm9jL21vdW50c2A7IGRvCisJCQkJWyAiJGZsYWciID0gIkZPVU5EIiBdICYmIHBhcnRpdGlvbj0icmVhZC13cml0ZSIKKwkJCQlbICIkZmxhZyIgPSAicm8iIF0gJiYgeyBwYXJ0aXRpb249InJlYWQtb25seSI7IGJyZWFrOyB9CisJCQlkb25lCisJCQlpZiBbICIkZGlyIiA9ICIvIiAtbyAtbiAiJHBhcnRpdGlvbiIgXTsgdGhlbgorCQkJCWJyZWFrCisJCQllbHNlCisJCQkJZGlyPWBkaXJuYW1lICRkaXJgCisJCQlmaQorCQlmaQorCWRvbmUKKwlbICIkcGFydGl0aW9uIiA9ICJyZWFkLW9ubHkiIF0gJiYgZWNobyAieWVzIiB8fCBlY2hvICJubyIKK30KKworaWYgWyAiJDEiID0gInN0YXJ0IiBdIDsgdGhlbgorCWlmIFsgYGlzX29uX3JlYWRfb25seV9wYXJ0aXRpb24gL3Zhci9saWJgID0gInllcyIgXTsgdGhlbgorCQlncmVwIC1xICJ0bXBmcyAvdmFyL3ZvbGF0aWxlIiAvcHJvYy9tb3VudHMgfHwgbW91bnQgL3Zhci92b2xhdGlsZQorCQlta2RpciAtcCAvdmFyL3ZvbGF0aWxlL2xpYgorCQljcCAtYSAvdmFyL2xpYi8qIC92YXIvdm9sYXRpbGUvbGliCisJCW1vdW50IC0tYmluZCAvdmFyL3ZvbGF0aWxlL2xpYiAvdmFyL2xpYgorCWZpCitmaQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcmVib290IGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYm9vdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODdkOGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3JlYm9vdApAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHJlYm9vdAorIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEV4ZWN1dGUgdGhlIHJlYm9vdCBjb21tYW5kLgorIyBEZXNjcmlwdGlvbjoKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworZWNobyAtbiAiUmVib290aW5nLi4uICIKK3JlYm9vdCBTRURfSEFMVEFSR1MKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9ybW5vbG9naW4uc2ggYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcm1ub2xvZ2luLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc2ZGUzNDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvcm1ub2xvZ2luLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgcm1ub2xvZ2luCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkcmVtb3RlX2ZzICRhbGwKKyMgUmVxdWlyZWQtU3RvcDogCisjIERlZmF1bHQtU3RhcnQ6ICAgICAyIDMgNCA1CisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFJlbW92ZSAvZXRjL25vbG9naW4gYXQgYm9vdAorIyBEZXNjcmlwdGlvbjogICAgICAgVGhpcyBzY3JpcHQgcmVtb3ZlcyB0aGUgL2V0Yy9ub2xvZ2luIGZpbGUgYXMgdGhlCisjICAgICAgICAgICAgICAgICAgICBsYXN0IHN0ZXAgaW4gdGhlIGJvb3QgcHJvY2VzcywgaWYgREVMQVlMT0dJTj15ZXMuCisjICAgICAgICAgICAgICAgICAgICBJZiBERUxBWUxPR0lOPW5vLCAvZXRjL25vbG9naW4gd2FzIG5vdCBjcmVhdGVkIGJ5CisjICAgICAgICAgICAgICAgICAgICBib290bWlzYyBlYXJsaWVyIGluIHRoZSBib290IHByb2Nlc3MuCisjIyMgRU5EIElOSVQgSU5GTworCitpZiB0ZXN0IC1mIC9ldGMvbm9sb2dpbi5ib290Cit0aGVuCisJcm0gLWYgL2V0Yy9ub2xvZ2luIC9ldGMvbm9sb2dpbi5ib290CitmaQorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NhdmUtcnRjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzhmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2F2ZS1ydGMuc2gKQEAgLTAsMCArMSwxMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBzYXZlLXJ0YworIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcyBod2Nsb2NrCisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0b3JlIHN5c3RlbSBjbG9jayBpbnRvIGZpbGUKKyMgRGVzY3JpcHRpb246ICAgICAgIAorIyMjIEVORCBJTklUIElORk8KKworIyBVcGRhdGUgdGhlIHRpbWVzdGFtcAorZGF0ZSAtdSArJTRZJTJtJTJkJTJIJTJNJTJTID4gL2V0Yy90aW1lc3RhbXAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zZW5kc2lncwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNGUxYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3NlbmRzaWdzCkBAIC0wLDAgKzEsMjEgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgc2VuZHNpZ3MKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIAorIyBSZXF1aXJlZC1TdG9wOiAgICAgdW1vdW50bmZzCisjIERlZmF1bHQtU3RhcnQ6CisjIERlZmF1bHQtU3RvcDogICAgICAwIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IEtpbGwgYWxsIHJlbWFpbmluZyBwcm9jZXNzZXMuCisjIERlc2NyaXB0aW9uOiAKKyMjIyBFTkQgSU5JVCBJTkZPCisKK1BBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KKworIyBLaWxsIGFsbCBwcm9jZXNzZXMuCitlY2hvICJTZW5kaW5nIGFsbCBwcm9jZXNzZXMgdGhlIFRFUk0gc2lnbmFsLi4uIgora2lsbGFsbDUgLTE1CitzbGVlcCA1CitlY2hvICJTZW5kaW5nIGFsbCBwcm9jZXNzZXMgdGhlIEtJTEwgc2lnbmFsLi4uIgora2lsbGFsbDUgLTkKKworOiBleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zaW5nbGUgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2luZ2xlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhODJkMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc2luZ2xlCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgc2luZ2xlCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbG9jYWxfZnMgJGFsbCBraWxscHJvY3MKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIDEKKyMgRGVmYXVsdC1TdG9wOgorIyBTaG9ydC1EZXNjcmlwdGlvbjogZXhlY3V0ZWQgYnkgaW5pdCg4KSB1cG9uIGVudGVyaW5nIHJ1bmxldmVsIDEgKHNpbmdsZSkuCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPSIvc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiIKKworIyBLaWxsIGFsbCBwcm9jZXNzZXMuCitlY2hvICJTZW5kaW5nIGFsbCBwcm9jZXNzZXMgdGhlIFRFUk0gc2lnbmFsLi4uIgora2lsbGFsbDUgLTE1CitzbGVlcCA1CitlY2hvICJTZW5kaW5nIGFsbCBwcm9jZXNzZXMgdGhlIEtJTEwgc2lnbmFsLi4uIgora2lsbGFsbDUgLTkKKworIyBXZSBzdGFydCB1cGRhdGUgaGVyZSwgc2luY2Ugd2UganVzdCBraWxsZWQgaXQuCit0ZXN0IC14IC9zYmluL3VwZGF0ZSAmJiB1cGRhdGUKKworZWNobyAiRW50ZXJpbmcgc2luZ2xlLXVzZXIgbW9kZS4uLiIKK2V4ZWMgaW5pdCAtdDEgUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N1c2hlbGwgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvc3VzaGVsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzE5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N1c2hlbGwKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKKworWyAteiAiJFNVU0hFTEwiIF0gJiYgU1VTSEVMTD0vYmluL3NoCisKK2V4ZWMgJFNVU0hFTEwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC9zeXNmcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2ZlNzZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3N5c2ZzLnNoCkBAIC0wLDAgKzEsMjMgQEAKKyMhL2Jpbi9zaAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IE1vdW50IGtlcm5lbCB2aXJ0dWFsIGZpbGUgc3lzdGVtcy4KKyMgRGVzY3JpcHRpb246ICAgICAgIE1vdW50IGluaXRpYWwgc2V0IG9mIHZpcnR1YWwgZmlsZXN5c3RlbXMgdGhlIGtlcm5lbAorIyAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXMgYW5kIHRoYXQgYXJlIHJlcXVpcmVkIGJ5IGV2ZXJ5dGhpbmcuCisjIyMgRU5EIElOSVQgSU5GTworCitpZiBbIC1lIC9wcm9jIF0gJiYgISBbIC1lIC9wcm9jL21vdW50cyBdOyB0aGVuCisgIG1vdW50IC10IHByb2MgcHJvYyAvcHJvYworZmkKKworaWYgWyAtZSAvc3lzIF0gJiYgZ3JlcCAtcSBzeXNmcyAvcHJvYy9maWxlc3lzdGVtcyAmJiAhIFsgLWUgL3N5cy9jbGFzcyBdOyB0aGVuCisgIG1vdW50IC10IHN5c2ZzIHN5c2ZzIC9zeXMKK2ZpCisKK2lmIFsgLWUgL3N5cy9rZXJuZWwvZGVidWcgXSAmJiBncmVwIC1xIGRlYnVnZnMgL3Byb2MvZmlsZXN5c3RlbXM7IHRoZW4KKyAgbW91bnQgLXQgZGVidWdmcyBkZWJ1Z2ZzIC9zeXMva2VybmVsL2RlYnVnCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudGZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxMzI0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdW1vdW50ZnMKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1bW91bnRmcworIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OgorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBUdXJuIG9mZiBzd2FwIGFuZCB1bm1vdW50IGFsbCBsb2NhbCBmaWxlIHN5c3RlbXMuCisjIERlc2NyaXB0aW9uOgorIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCitlY2hvICJEZWFjdGl2YXRpbmcgc3dhcC4uLiIKK3N3YXBvZmYgLWEKKworIyBXZSBsZWF2ZSAvcHJvYyBtb3VudGVkLgorZWNobyAiVW5tb3VudGluZyBsb2NhbCBmaWxlc3lzdGVtcy4uLiIKK2dyZXAgLXEgL21udC9yYW0gL3Byb2MvbW91bnRzICYmIG1vdW50IC1vIHJlbW91bnQscm8gL21udC9yYW0KK21vdW50IC1vIHJlbW91bnQscm8gLworCit1bW91bnQgLWYgLWEgLXIgPiAvZGV2L251bGwgMj4mMQorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3Vtb3VudG5mcy5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRuZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWYwNzU0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC91bW91bnRuZnMuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1bW91bnRuZnMKKyMgUmVxdWlyZWQtU3RhcnQ6CisjIFJlcXVpcmVkLVN0b3A6ICAgICB1bW91bnRmcworIyBTaG91bGQtU3RvcDogICAgICAgJG5ldHdvcmsgJHBvcnRtYXAKKyMgRGVmYXVsdC1TdGFydDoKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogVW5tb3VudCBhbGwgbmV0d29yayBmaWxlc3lzdGVtcworIyMjIEVORCBJTklUIElORk8KKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorCisjIFdyaXRlIGEgcmVib290IHJlY29yZCB0byAvdmFyL2xvZy93dG1wIGJlZm9yZSB1bm1vdW50aW5nCitoYWx0IC13CisKK2VjaG8gIlVubW91bnRpbmcgcmVtb3RlIGZpbGVzeXN0ZW1zLi4uIgorCit0ZXN0IC1mIC9ldGMvZnN0YWIgJiYgKAorCisjCisjCVJlYWQgdGhyb3VnaCBmc3RhYiBsaW5lIGJ5IGxpbmUgYW5kIHVub3VudCBuZXR3b3JrIGZpbGUgc3lzdGVtcworIword2hpbGUgcmVhZCBkZXZpY2UgbW91bnRwdCBmc3R5cGUgb3B0aW9ucworZG8KKwlpZiB0ZXN0ICIkZnN0eXBlIiA9IG5mcyB8fCAgdGVzdCAiJGZzdHlwZSIgPSBzbWJmcyB8fCAgdGVzdCAiJGZzdHlwZSIgPSBuY3BmcyB8fCB0ZXN0ICIkZnN0eXBlIiA9IGNpZnMKKwl0aGVuCisJCXVtb3VudCAtZiAkbW91bnRwdAorCWZpCitkb25lCispIDwgL2V0Yy9mc3RhYgorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3VyYW5kb20gYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdXJhbmRvbQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjE2MjViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvaW5pdHNjcmlwdHMvaW5pdHNjcmlwdHMtMS4wL3VyYW5kb20KQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1cmFuZG9tCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbG9jYWxfZnMgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgICRsb2NhbF9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6ICAgICAgMCA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBTYXZlIGFuZCByZXN0b3JlIHRoZSByYW5kb20gc2VlZAorIyBEZXNjcmlwdGlvbjogICAgICAgU2F2ZSB0aGUgcmFuZG9tIHNlZWQgb24gc2h1dGRvd24gYW5kIHJlc3RvcmUgaXQgb24gYm9vdCwKKyMgICAgICAgICAgICAgICAgICAgIHRvIGVuc3VyZSB0aGF0IHRoZSBzZWVkIGlzbid0IHByZWRpY2FibGUgb24gc3RhcnR1cAorIyAgICAgICAgICAgICAgICAgICAgKGJlY2F1c2UgdGhlIGJvb3QgcHJvY2VzcyBpcyBwcmVkaWN0YWJsZSkKKyMjIyBFTkQgSU5JVCBJTkZPCisKK3Rlc3QgLWMgL2Rldi91cmFuZG9tIHx8IGV4aXQgMAorCitSQU5ET01fU0VFRF9GSUxFPS92YXIvbGliL3VyYW5kb20vcmFuZG9tLXNlZWQKKworLiAvZXRjL2RlZmF1bHQvcmNTCitbIC1mIC9ldGMvZGVmYXVsdC91cmFuZG9tIF0gJiYgLiAvZXRjL2RlZmF1bHQvdXJhbmRvbQorCitjYXNlICIkMSIgaW4KKwlzdGFydHwiIikKKwkJdGVzdCAiJFZFUkJPU0UiICE9IG5vICYmIGVjaG8gIkluaXRpYWxpemluZyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4uLiIKKwkJIyBMb2FkIGFuZCB0aGVuIHNhdmUgNTEyIGJ5dGVzLCB3aGljaCBpcyB0aGUgc2l6ZSBvZiB0aGUgZW50cm9weQorCQkjIHBvb2wuIEFsc28gbG9hZCB0aGUgY3VycmVudCBkYXRlLCBpbiBjYXNlIHRoZSBzZWVkIGZpbGUgaXMKKwkJIyBlbXB0eS4KKwkJKCBkYXRlICslcy4lTjsgWyAtZiAiJFJBTkRPTV9TRUVEX0ZJTEUiIF0gJiYgY2F0ICIkUkFORE9NX1NFRURfRklMRSIgKSBcCisJCQk+L2Rldi91cmFuZG9tCisJCXJtIC1mICIkUkFORE9NX1NFRURfRklMRSIKKwkJdW1hc2sgMDc3CisJCWRkIGlmPS9kZXYvdXJhbmRvbSBvZj0kUkFORE9NX1NFRURfRklMRSBjb3VudD0xIFwKKwkJCT4vZGV2L251bGwgMj4mMSB8fCBlY2hvICJ1cmFuZG9tIHN0YXJ0OiBmYWlsZWQuIgorCQl1bWFzayAwMjIKKwkJOzsKKwlzdG9wKQorCQkjIENhcnJ5IGEgcmFuZG9tIHNlZWQgZnJvbSBzaHV0LWRvd24gdG8gc3RhcnQtdXA7CisJCSMgc2VlIGRvY3VtZW50YXRpb24gaW4gbGludXgvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisJCXRlc3QgIiRWRVJCT1NFIiAhPSBubyAmJiBlY2hvICJTYXZpbmcgcmFuZG9tIHNlZWQuLi4iCisJCXVtYXNrIDA3NworCQlkZCBpZj0vZGV2L3VyYW5kb20gb2Y9JFJBTkRPTV9TRUVEX0ZJTEUgY291bnQ9MSBcCisJCQk+L2Rldi9udWxsIDI+JjEgfHwgZWNobyAidXJhbmRvbSBzdG9wOiBmYWlsZWQuIgorCQk7OworCSopCisJCWVjaG8gIlVzYWdlOiB1cmFuZG9tIHtzdGFydHxzdG9wfSIgPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzLTEuMC92b2xhdGlsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NzI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0xLjAvdm9sYXRpbGVzCkBAIC0wLDAgKzEsMzYgQEAKKyMgVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgbGlzdHMgZmlsZXN5c3RlbSBvYmplY3RzIHRoYXQgc2hvdWxkIGdldCB2ZXJpZmllZAorIyBkdXJpbmcgc3RhcnR1cCBhbmQgYmUgY3JlYXRlZCBpZiBtaXNzaW5nLgorIworIyBFdmVyeSBsaW5lIG11c3QgZWl0aGVyIGJlIGEgY29tbWVudCBzdGFydGluZyB3aXRoICMKKyMgb3IgYSBkZWZpbml0aW9uIG9mIGZvcm1hdDoKKyMgPHR5cGU+IDxvd25lcj4gPGdyb3VwPiA8bW9kZT4gPHBhdGg+IDxsaW5rc291cmNlPgorIyB3aGVyZSB0aGUgaXRlbXMgYXJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlICEKKyMKKyMgPHR5cGU+IDogZHxmfGwgOiAoZClpcmVjdG9yeXwoZilpbGV8KGwpaW5rCisjCisjIEEgbGlua2luZyBleGFtcGxlOgorIyBsIHJvb3Qgcm9vdCAwNzc3IC92YXIvdGVzdCAvdG1wL3Rlc3RmaWxlCisjIGYgcm9vdCByb290IDA2NDQgL3Zhci90ZXN0IG5vbmUKKyMKKyMgVW5kZXJzdGFuZGluZyBsaW5rczoKKyMgV2hlbiBwb3B1bGF0ZS12b2xhdGlsZSBpcyB0byB2ZXJpZnkvY3JlYXRlIGEgZGlyZWN0b3J5IG9yIGZpbGUsIGl0IHdpbGwgZmlyc3QKKyMgY2hlY2sgaXQncyBleGlzdGVuY2UuIElmIGEgbGluayBpcyBmb3VuZCB0byBleGlzdCBpbiB0aGUgcGxhY2Ugb2YgdGhlIHRhcmdldCwKKyMgdGhlIHBhdGggb2YgdGhlIHRhcmdldCBpcyByZXBsYWNlZCB3aXRoIHRoZSB0YXJnZXQgdGhlIGxpbmsgcG9pbnRzIHRvLgorIyBUaHVzLCBpZiBhIGxpbmsgaXMgaW4gdGhlIHBsYWNlIHRvIGJlIHZlcmlmaWVkLCB0aGUgb2JqZWN0IHdpbGwgYmUgY3JlYXRlZAorIyBpbiB0aGUgcGxhY2UgdGhlIGxpbmsgcG9pbnRzIHRvIGluc3RlYWQuCisjIFRoaXMgZXhwbGFpbnMgdGhlIG9yZGVyIG9mICJsaW5rIGJlZm9yZSBvYmplY3QiIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLCB3aGVyZQorIyBhIGxpbmsgd2lsbCBiZSBjcmVhdGVkIGF0IC92YXIvdGVzdCBwb2ludGluZyB0byAvdG1wL3Rlc3RmaWxlIGFuZCBkdWUgdG8gdGhpcworIyBsaW5rIHRoZSBmaWxlIGRlZmluZWQgYXMgL3Zhci90ZXN0IHdpbGwgYWN0dWFsbHkgYmUgY3JlYXRlZCBhcyAvdG1wL3Rlc3RmaWxlLgorZCByb290IHJvb3QgMTc3NyAvcnVuL2xvY2sgbm9uZQorZCByb290IHJvb3QgMDc1NSAvdmFyL3ZvbGF0aWxlL2xvZyBub25lCitkIHJvb3Qgcm9vdCAxNzc3IC92YXIvdm9sYXRpbGUvdG1wIG5vbmUKK2wgcm9vdCByb290IDE3NzcgL3Zhci9sb2NrIC9ydW4vbG9jaworbCByb290IHJvb3QgMDc1NSAvdmFyL2xvZyAvdmFyL3ZvbGF0aWxlL2xvZworbCByb290IHJvb3QgMDc1NSAvdmFyL3J1biAvcnVuCitsIHJvb3Qgcm9vdCAxNzc3IC92YXIvdG1wIC92YXIvdm9sYXRpbGUvdG1wCitsIHJvb3Qgcm9vdCAxNzc3IC90bXAgL3Zhci90bXAKK2Qgcm9vdCByb290IDA3NTUgL3Zhci9sb2NrL3N1YnN5cyBub25lCitmIHJvb3Qgcm9vdCAwNjY0IC92YXIvbG9nL3d0bXAgbm9uZQorZiByb290IHJvb3QgMDY2NCAvdmFyL3J1bi91dG1wIG5vbmUKK2wgcm9vdCByb290IDA2NDQgL2V0Yy9yZXNvbHYuY29uZiAvdmFyL3J1bi9yZXNvbHYuY29uZgorZiByb290IHJvb3QgMDY0NCAvdmFyL3J1bi9yZXNvbHYuY29uZiBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9pbml0c2NyaXB0cy9pbml0c2NyaXB0c18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwZGU2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2luaXRzY3JpcHRzL2luaXRzY3JpcHRzXzEuMC5iYgpAQCAtMCwwICsxLDE4MiBAQAorU1VNTUFSWSA9ICJTeXNWIGluaXQgc2NyaXB0cyIKK0RFU0NSSVBUSU9OID0gIkluaXRzY3JpcHRzIHByb3ZpZGUgdGhlIGJhc2ljIHN5c3RlbSBzdGFydHVwIGluaXRpYWxpemF0aW9uIHNjcmlwdHMgZm9yIHRoZSBzeXN0ZW0uICBUaGVzZSBzY3JpcHRzIGluY2x1ZGUgYWN0aW9ucyBzdWNoIGFzIGZpbGVzeXN0ZW0gbW91bnRpbmcsIGZzY2ssIFJUQyBtYW5pcHVsYXRpb24gYW5kIG90aGVyIGFjdGlvbnMgcm91dGluZWx5IHBlcmZvcm1lZCBhdCBzeXN0ZW0gc3RhcnR1cC4gIEluIGFkZGl0aW9uLCB0aGUgc2NyaXB0cyBhcmUgYWxzbyB1c2VkIGR1cmluZyBzeXN0ZW0gc2h1dGRvd24gdG8gcmV2ZXJzZSB0aGUgYWN0aW9ucyBwZXJmb3JtZWQgYXQgc3RhcnR1cC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitQUiA9ICJyMTU1IgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitTUkNfVVJJID0gImZpbGU6Ly9mdW5jdGlvbnMgXAorICAgICAgICAgICBmaWxlOi8vaGFsdCBcCisgICAgICAgICAgIGZpbGU6Ly91bW91bnRmcyBcCisgICAgICAgICAgIGZpbGU6Ly9kZXZwdHMuc2ggXAorICAgICAgICAgICBmaWxlOi8vZGV2cHRzIFwKKyAgICAgICAgICAgZmlsZTovL2hvc3RuYW1lLnNoIFwKKyAgICAgICAgICAgZmlsZTovL21vdW50YWxsLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2Jhbm5lci5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9ib290bWlzYy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9tb3VudG5mcy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWJvb3QgXAorICAgICAgICAgICBmaWxlOi8vY2hlY2tmcy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaW5nbGUgXAorICAgICAgICAgICBmaWxlOi8vc2VuZHNpZ3MgXAorICAgICAgICAgICBmaWxlOi8vdXJhbmRvbSBcCisgICAgICAgICAgIGZpbGU6Ly9ybW5vbG9naW4uc2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2tyb290LnNoIFwKKyAgICAgICAgICAgZmlsZTovL3Vtb3VudG5mcy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNmcy5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9wb3B1bGF0ZS12b2xhdGlsZS5zaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggXAorICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzIFwKKyAgICAgICAgICAgZmlsZTovL3NhdmUtcnRjLnNoIFwKKyAgICAgICAgICAgZmlsZTovL0dQTHYyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RtZXNnLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ3JvdGF0ZS1kbWVzZy5jb25mIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3NlbGludXgnLCdmaWxlOi8vc3VzaGVsbCcsJycsZCl9IFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCitTUkNfVVJJX2FwcGVuZF9hcm0gPSAiIGZpbGU6Ly9hbGlnbm1lbnQuc2giCisKK0tFUk5FTF9WRVJTSU9OID0gIiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCitERVBFTkRTX2FwcGVuZCA9ICIgdXBkYXRlLXJjLmQtbmF0aXZlIgorREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCisKK1BBQ0tBR0VTID0rICIke1BOfS1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfSA9ICIke1BOfS1mdW5jdGlvbnMgXAorICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3NlbGludXgnLCdiYXNoJywnJyxkKX0gXAorCQkgIgorRklMRVNfJHtQTn0tZnVuY3Rpb25zID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucyoiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWZ1bmN0aW9ucyA9ICI5MCIKK0FMVEVSTkFUSVZFXyR7UE59LWZ1bmN0aW9ucyA9ICJmdW5jdGlvbnMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCisKK0hBTFRBUkdTID89ICItZCAtZiIKKworZG9fY29uZmlndXJlKCkgeworCXNlZCAtaSAtZSAiczpTRURfSEFMVEFSR1M6JHtIQUxUQVJHU306ZyIgJHtXT1JLRElSfS9oYWx0CisJc2VkIC1pIC1lICJzOlNFRF9IQUxUQVJHUzoke0hBTFRBUkdTfTpnIiAke1dPUktESVJ9L3JlYm9vdAorfQorCitkb19pbnN0YWxsICgpIHsKKyMKKyMgQ3JlYXRlIGRpcmVjdG9yaWVzIGFuZCBpbnN0YWxsIGRldmljZSBpbmRlcGVuZGVudCBzY3JpcHRzCisjCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjUy5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzAuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmMxLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjMi5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzMuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcmM0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjNS5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9yYzYuZAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKwkjIEhvbGRzIHN0YXRlIGluZm9ybWF0aW9uIHBlcnRhaW5pbmcgdG8gdXJhbmRvbQorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL3VyYW5kb20KKworCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L2Z1bmN0aW9ucwkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vYm9vdG1pc2Muc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vY2hlY2tyb290LnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2hhbHQJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2hvc3RuYW1lLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L21vdW50YWxsLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L21vdW50bmZzLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3JlYm9vdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vcm1ub2xvZ2luLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3NlbmRzaWdzCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9zaW5nbGUJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3Vtb3VudG5mcy5zaAkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS91cmFuZG9tCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlzZWQgLWkgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VyYW5kb20gLWUgJ3MsL3Zhci8sJHtsb2NhbHN0YXRlZGlyfS8sZztzLC9ldGMvLCR7c3lzY29uZmRpcn0vLGcnCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vZGV2cHRzLnNoCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2RldnB0cwkJJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3N5c2ZzLnNoCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9wb3B1bGF0ZS12b2xhdGlsZS5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vc2F2ZS1ydGMuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbSAwNjQ0ICAgICR7V09SS0RJUn0vdm9sYXRpbGVzCQkke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy8wMF9jb3JlCisJaW5zdGFsbCAtbSAwNzU1ICAgICR7V09SS0RJUn0vZG1lc2cuc2gJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAgICAke1dPUktESVJ9L2xvZ3JvdGF0ZS1kbWVzZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9LworCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImFybSIgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9hbGlnbm1lbnQuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJZmkKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzZWxpbnV4JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfQorCQlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zdXNoZWxsICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisJZmkKKyMKKyMgSW5zdGFsbCBkZXZpY2UgZGVwZW5kZW50IHNjcmlwdHMKKyMKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9iYW5uZXIuc2gJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Jhbm5lci5zaAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3Vtb3VudGZzCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91bW91bnRmcworIworIyBDcmVhdGUgcnVubGV2ZWwgbGlua3MKKyMKKwl1cGRhdGUtcmMuZCAtciAke0R9IHJtbm9sb2dpbi5zaCBzdGFydCA5OSAyIDMgNCA1IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHNlbmRzaWdzIHN0YXJ0IDIwIDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSB1cmFuZG9tIHN0YXJ0IDMwIFMgMCA2IC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHVtb3VudG5mcy5zaCBzdGFydCAzMSAwIDEgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSB1bW91bnRmcyBzdGFydCA0MCAwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gcmVib290IHN0YXJ0IDkwIDYgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gaGFsdCBzdGFydCA5MCAwIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHNhdmUtcnRjLnNoIHN0YXJ0IDI1IDAgNiAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBiYW5uZXIuc2ggc3RhcnQgMDIgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBjaGVja3Jvb3Quc2ggc3RhcnQgMDYgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBtb3VudGFsbC5zaCBzdGFydCAwMyBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IGhvc3RuYW1lLnNoIHN0YXJ0IDM5IFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gbW91bnRuZnMuc2ggc3RhcnQgMTUgMiAzIDQgNSAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBib290bWlzYy5zaCBzdGFydCA1NSBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHN5c2ZzLnNoIHN0YXJ0IDAyIFMgLgorCXVwZGF0ZS1yYy5kIC1yICR7RH0gcG9wdWxhdGUtdm9sYXRpbGUuc2ggc3RhcnQgMzcgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSByZWFkLW9ubHktcm9vdGZzLWhvb2suc2ggc3RhcnQgMjkgUyAuCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBkZXZwdHMuc2ggc3RhcnQgMzggUyAuCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImFybSIgXTsgdGhlbgorCSAgICAgICAgdXBkYXRlLXJjLmQgLXIgJHtEfSBhbGlnbm1lbnQuc2ggc3RhcnQgMDYgUyAuCisJZmkKKwkjIFdlIHdpc2ggdG8gaGF2ZSAvdmFyL2xvZyByZWFkeSBhdCB0aGlzIHN0YWdlIHNvIGV4ZWN1dGUgdGhpcyBhZnRlcgorCSMgcG9wdWxhdGUtdm9sYXRpbGUuc2gKKwl1cGRhdGUtcmMuZCAtciAke0R9IGRtZXNnLnNoIHN0YXJ0IDM4IFMgLgorfQorCitNQVNLRURfU0NSSVBUUyA9ICIgXAorICBiYW5uZXIgXAorICBib290bWlzYyBcCisgIGNoZWNrZnMgXAorICBjaGVja3Jvb3QgXAorICBkZXZwdHMgXAorICBkbWVzZyBcCisgIGhvc3RuYW1lIFwKKyAgbW91bnRhbGwgXAorICBtb3VudG5mcyBcCisgIHBvcHVsYXRlLXZvbGF0aWxlIFwKKyAgcmVhZC1vbmx5LXJvb3Rmcy1ob29rIFwKKyAgcm1ub2xvZ2luIFwKKyAgc3lzZnMgXAorICB1cmFuZG9tIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJZm9yIFNFUlZJQ0UgaW4gJHtNQVNLRURfU0NSSVBUU307IGRvCisJCQlzeXN0ZW1jdGwgJE9QVFMgbWFzayAkU0VSVklDRS5zZXJ2aWNlCisJCWRvbmUKKwlmaQorCisgICAgIyBEZWxldGUgYW55IG9sZCB2b2xhdGlsZSBjYWNoZSBzY3JpcHQsIGFzIGRpcmVjdG9yaWVzIG1heSBoYXZlIG1vdmVkCisgICAgaWYgWyAteiAiJEQiIF07IHRoZW4KKyAgICAgICAgcm0gLWYgIi9ldGMvdm9sYXRpbGUuY2FjaGUiCisgICAgZmkKK30KKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9jaGVja3Jvb3Quc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9qcGVnL2pwZWdfOWEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZTY1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2pwZWcvanBlZ185YS5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gImxpYmpwZWcgaXMgYSBsaWJyYXJ5IGZvciBoYW5kbGluZyB0aGUgSlBFRyAoSkZJRikgaW1hZ2UgZm9ybWF0IgorREVTQ1JJUFRJT04gPSAibGlianBlZyBjb250YWlucyBhIGxpYnJhcnkgZm9yIGhhbmRsaW5nIHRoZSBKUEVHIChKRklGKSBpbWFnZSBmb3JtYXQsIGFzIHdlbGwgYXMgcmVsYXRlZCBwcm9ncmFtcyBmb3IgYWNjZXNzaW5nIHRoZSBsaWJqcGVnIGZ1bmN0aW9ucy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmlqZy5vcmcvIgorCitMSUNFTlNFID0iQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT1lYTkzYThhMmZlZDEwMTA2YjYzYmMyMTY3OWVkYWNiOSIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaWpnLm9yZy9maWxlcy9qcGVnc3JjLnYke1BWfS50YXIuZ3ogXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzM1Mzk5MmFlY2FlZTE4MDVlZjQxMDlhYWRkNDMzZTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2E3NTNlYTQ4ZDkxNzk0NWRkNTRhMmQ5N2RlMzg4YWEwNmNhMmViMTA2NmNiZmRjNjY1MjAzNjM0OWZlMDVhNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRVMgPSsgCQkianBlZy10b29scyAiCitERVNDUklQVElPTl9qcGVnLXRvb2xzID0gIlRoZSBqcGVnLXRvb2xzIHBhY2thZ2UgaW5jbHVkZXMgdGhlIGNsaWVudCBwcm9ncmFtcyBmb3IgYWNjZXNzIGxpYmpwZWcgZnVuY3Rpb25hbGl0eS4gIFRoZXNlIHRvb2xzIGFsbG93IGZvciB0aGUgY29tcHJlc3Npb24sIGRlY29tcHJlc3Npb24sIHRyYW5zZm9ybWF0aW9uIGFuZCBkaXNwbGF5IG9mIEpQRUcgZmlsZXMuIgorRklMRVNfanBlZy10b29scyA9IAkiJHtiaW5kaXJ9LyoiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitwa2dfcG9zdGluc3RfJHtQTn1fbGludXhzdGRiYXNlICgpIHsKKyAgICBpZiBbICEgLWUgJEQke2xpYmRpcn0vbGlianBlZy5zby42MiBdOyB0aGVuCisgICAgICAgIEpQRUc9YGZpbmQgJEQke2xpYmRpcn0gLXR5cGUgZiAtbmFtZSBsaWJqcGVnLnNvLlwqLlwqLlwqYAorICAgICAgICBsbiAtc2YgYGJhc2VuYW1lICRKUEVHYCAkRCR7bGliZGlyfS9saWJqcGVnLnNvLjYyCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZC8wMDAzLU9ubHktaW5sdWNsdWRlLWtlcm5lbC1oZWFkZXJzLXdpdGgtZ2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmY2IwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gM2M1YzdhY2M3ZWY4NzRiOTE5YjI2NTgzZDM4OTJlMjFiOTA3ODMzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4KK0RhdGU6IFdlZCwgMjAgQXVnIDIwMTQgMDk6MDA6MDMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIE9ubHkgaW5sdWNsdWRlIGtlcm5lbCBoZWFkZXJzIHdpdGggZ2xpYmMKKworVGhpcyBmaXhlcyBjb21waWxlIGVycm9ycyB3aXRoIG11c2wgbGliYworCitTaWduZWQtb2ZmLWJ5OiBOYXRhbmFlbCBDb3BhIDxuY29wYUBhbHBpbmVsaW51eC5vcmc+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9yZXNpemVjb25zLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcmVzaXplY29ucy5jIGIvc3JjL3Jlc2l6ZWNvbnMuYworaW5kZXggNWY4NDg0NS4uNjkxZGZjYyAxMDA2NDQKKy0tLSBhL3NyYy9yZXNpemVjb25zLmMKKysrKyBiL3NyYy9yZXNpemVjb25zLmMKK0BAIC04MCw3ICs4MCw3IEBACisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpZiAoX19HTlVfTElCUkFSWV9fID49IDYpCisgI2luY2x1ZGUgPHN5cy9wZXJtLmg+CistI2Vsc2UKKysjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykKKyAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyAjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgorICNlbmRpZgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkL3VjbGliYy1zdGRhcmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3ZjMyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2tiZC9rYmQvdWNsaWJjLXN0ZGFyZy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitJbiBmaWxlIGluY2x1ZGVkIGZyb20ga2V5bWFwLmg6NTowLAorICAgICAgICAgICAgICAgICBmcm9tIGtzeW1zLmM6NjoKKy4va2V5bWFwL2NvbW1vbi5oOjY1OjM4OiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ3ZhX2xpc3QnCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy4va2V5bWFwL2NvbW1vbi5oOjY2OjM6IGVycm9yOiBleHBlY3RlZCAnOycsICcsJyBvciAnKScgYmVmb3JlICdjb25zdCcKKyAgIGNvbnN0IHZvaWQgKmRhdGEpOworICAgXgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitJbmRleDoga2JkLTIuMC4wL3NyYy9saWJrZXltYXAvY29udGV4dFAuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtiZC0yLjAuMC5vcmlnL3NyYy9saWJrZXltYXAvY29udGV4dFAuaAkyMDEzLTA4LTEzIDA2OjQ2OjIzLjAwMDAwMDAwMCAtMDcwMAorKysrIGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2NvbnRleHRQLmgJMjAxMy0xMS0wNSAyMjozMzo0OS4yMDA1MjgyMjYgLTA4MDAKK0BAIC0yLDcgKzIsNyBAQAorICNkZWZpbmUgTEtfQ09OVEVYVFBfSAorIAorICNpbmNsdWRlICJrZXltYXAuaCIKKy0KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisgLyoqCisgICogQGJyaWVmIENvcHkgb2Ygc3RydWN0IGtiZGlhY3J1Yy4KKyAgKi8KK0luZGV4OiBrYmQtMi4wLjAvc3JjL2xpYmtleW1hcC9rZXltYXAvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrYmQtMi4wLjAub3JpZy9zcmMvbGlia2V5bWFwL2tleW1hcC9jb21tb24uaAkyMDEzLTA4LTEzIDA2OjQ2OjIzLjAwMDAwMDAwMCAtMDcwMAorKysrIGtiZC0yLjAuMC9zcmMvbGlia2V5bWFwL2tleW1hcC9jb21tb24uaAkyMDEzLTExLTA1IDIyOjMzOjU5Ljk2NDUyODQzOCAtMDgwMAorQEAgLTYsNiArNiw3IEBACisgICovCisgCisgI2luY2x1ZGUgPGtleW1hcC9jb250ZXh0Lmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorIAorIC8qKiBJbml0aWFsaXplcyB0aGUgc3RydWN0dXJlcyBuZWNlc3NhcnkgdG8gcmVhZCBhbmQvb3IgcGFyc2Uga2V5bWFwLgorICAqCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9rYmQva2JkXzIuMC4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzZkYzdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUva2JkL2tiZF8yLjAuMi5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIktleXRhYmxlIGZpbGVzIGFuZCBrZXlib2FyZCB1dGlsaXRpZXMiCisjIGV2ZXJ5dGhpbmcgbWludXMgY29uc29sZS1mb250cyBpcyBHUEx2MisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTVmY2MzNjEyMWQ5M2UxZjY5ZDk2YTMxMzA3OGM4YjUiCitERVBFTkRTID0gImxpYmNoZWNrIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHB0ZXN0IHBrZ2NvbmZpZworCitSUkVQTEFDRVNfJHtQTn0gPSAiY29uc29sZS10b29scyIKK1JQUk9WSURFU18ke1BOfSA9ICJjb25zb2xlLXRvb2xzIgorUkNPTkZMSUNUU18ke1BOfSA9ICJjb25zb2xlLXRvb2xzIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly91Y2xpYmMtc3RkYXJnLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMy1Pbmx5LWlubHVjbHVkZS1rZXJuZWwtaGVhZGVycy13aXRoLWdsaWJjLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzQ3NWViNzhiMWQ2ZTZhYjA2Njg2ZGQzMjNhZDRiYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGZkZGFiZjk2MDEyZTMyOWM0YmViYjk2YTIxYWVlZjdjMzg3MmY2MjRlOTZlODE1NmJhNTQyYjgyYWViOTEyIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXZsb2NrLCAtLWRpc2FibGUtdmxvY2ssIGxpYnBhbSwiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1jb25zb2xlZm9udHMgJHtQTn0ta2V5bWFwcyAke1BOfS11bmltYXBzICR7UE59LWNvbnNvbGV0cmFucyIKKworRklMRVNfJHtQTn0tY29uc29sZWZvbnRzID0gIiR7ZGF0YWRpcn0vY29uc29sZWZvbnRzIgorRklMRVNfJHtQTn0tY29uc29sZXRyYW5zID0gIiR7ZGF0YWRpcn0vY29uc29sZXRyYW5zIgorRklMRVNfJHtQTn0ta2V5bWFwcyA9ICIke2RhdGFkaXJ9L2tleW1hcHMiCitGSUxFU18ke1BOfS11bmltYXBzID0gIiR7ZGF0YWRpcn0vdW5pbWFwcyIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNodnQgZGVhbGxvY3Z0IGZnY29uc29sZSBvcGVudnQiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGliY2dyb3VwL2xpYmNncm91cF8wLjQxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYmExZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJjZ3JvdXAvbGliY2dyb3VwXzAuNDEuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJMaW51eCBjb250cm9sIGdyb3VwIGFic3RyYWN0aW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJsaWJjZ3JvdXAgaXMgYSBsaWJyYXJ5IHRoYXQgYWJzdHJhY3RzIHRoZSBjb250cm9sIGdyb3VwIGZpbGUgc3lzdGVtIFwKK2luIExpbnV4LiBDb250cm9sIGdyb3VwcyBhbGxvdyB5b3UgdG8gbGltaXQsIGFjY291bnQgYW5kIGlzb2xhdGUgcmVzb3VyY2UgdXNhZ2UgXAorKENQVSwgbWVtb3J5LCBkaXNrIEkvTywgZXRjLikgb2YgZ3JvdXBzIG9mIHByb2Nlc3Nlcy4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xpYmNnLyR7QlBOfS92MC40MS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjNkZWE5ZDUwYjhhNWI3M2ZmMGJmMWNkY2IyMTBmNjNmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU0ZTM4YmRjN2VmNzA2NDVjZTMzNzQwZGRjY2EwNTEyNDhkNTZiNTMyODNjMGRjNmQ0MDRlMTc3MDZmNmZiNTEiCisKK0VYVFJBX09FQ09ORiA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLWVuYWJsZS1wYW0tbW9kdWxlLWRpcj0ke2Jhc2VfbGliZGlyfS9zZWN1cml0eSAtLWVuYWJsZS1wYW09eWVzJywgJy0tZW5hYmxlLXBhbT1ubycsIGQpfSIKKworUEFDS0FHRVMgPSsgImNncm91cHMtcGFtLXBsdWdpbiIKK0ZJTEVTX2Nncm91cHMtcGFtLXBsdWdpbiA9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fY2dyb3VwLnNvKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLmxhIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIE1vdmluZyBsaWJjZ3JvdXAgdG8gYmFzZV9saWJkaXIKKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbWtkaXIgLXAgJHtEfS8ke2Jhc2VfbGliZGlyfS8KKwkJbXYgLWYgJHtEfSR7bGliZGlyfS9saWJjZ3JvdXAuc28uKiAke0R9JHtiYXNlX2xpYmRpcn0vCisJCXJlbF9saWJfcHJlZml4PWBlY2hvICR7bGliZGlyfSB8IHNlZCAncyxcKF4vXHxcKVteL11bXi9dKiwuLixnJ2AKKwkJbG4gLXNmICR7cmVsX2xpYl9wcmVmaXh9JHtiYXNlX2xpYmRpcn0vbGliY2dyb3VwLnNvLjEgJHtEfSR7bGliZGlyfS9saWJjZ3JvdXAuc28KKwlmaQorCSMgcGFtIG1vZHVsZXMgaW4gJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvIHNob3VsZCBiZSBiaW5hcnkgLnNvIGZpbGVzLCBub3Qgc3ltbGlua3MuCisJaWYgWyAtZiAke0R9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2Nncm91cC5zby4wLjAuMCBdOyB0aGVuCisJCW12IC1mICR7RH0ke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fY2dyb3VwLnNvLjAuMC4wICR7RH0ke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fY2dyb3VwLnNvCisJCXJtIC1mICR7RH0ke2Jhc2VfbGliZGlyfS9zZWN1cml0eS9wYW1fY2dyb3VwLnNvLioKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjM2MzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi5pbmMKQEAgLTAsMCArMSw3OCBAQAorU1VNTUFSWSA9ICJYTUwgQyBQYXJzZXIgTGlicmFyeSBhbmQgVG9vbGtpdCIKK0RFU0NSSVBUSU9OID0gIlRoZSBYTUwgUGFyc2VyIExpYnJhcnkgYWxsb3dzIGZvciBtYW5pcHVsYXRpb24gb2YgWE1MIGZpbGVzLiAgTGlieG1sMiBleHBvcnRzIFB1c2ggYW5kIFB1bGwgdHlwZSBwYXJzZXIgaW50ZXJmYWNlcyBmb3IgYm90aCBYTUwgYW5kIEhUTUwuICBJdCBjYW4gZG8gRFREIHZhbGlkYXRpb24gYXQgcGFyc2UgdGltZSwgb24gYSBwYXJzZWQgZG9jdW1lbnQgaW5zdGFuY2Ugb3Igd2l0aCBhbiBhcmJpdHJhcnkgRFRELiAgTGlieG1sMiBpbmNsdWRlcyBjb21wbGV0ZSBYUGF0aCwgWFBvaW50ZXIgYW5kIFhpbmNsdWRlIGltcGxlbWVudGF0aW9ucy4gIEl0IGFsc28gaGFzIGEgU0FYIGxpa2UgaW50ZXJmYWNlLCB3aGljaCBpcyBkZXNpZ25lZCB0byBiZSBjb21wYXRpYmxlIHdpdGggRXhwYXQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54bWxzb2Z0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1saWJ4bWwyIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQ7bWQ1PTIwNDQ0MTdlMmU1MDA2YjY1YThiOTA2N2I2ODNmY2YxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2hhc2guYztiZWdpbmxpbmU9NjtlbmRsaW5lPTE1O21kNT05NmY3Mjk2NjA1ZWFlODA3NjcwZmIwODk0NzgyOTk2OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saXN0LmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xMzttZDU9Y2RiZmEzZGVlNTFjMDk5ZWRiMDRlMzlmNzYyZWU5MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdHJpby5jO2JlZ2lubGluZT01O2VuZGxpbmU9MTQ7bWQ1PTZjMDI1NzUzYzg2ZDk1ODcyMmVjNzZlOTRjYWU5MzJlIgorCitERVBFTkRTID0rICJ6bGliIgorCitTUkNfVVJJID0gImZ0cDovL3htbHNvZnQub3JnL2xpYnhtbDIvbGlieG1sMi0ke1BWfS50YXIuZ3o7bmFtZT1saWJ0YXIgXAorICAgICAgICAgICBmaWxlOi8vbGlieG1sLTY0Yml0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Fuc2lkZWNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bnRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHl0aG9uLXNpdGVwYWNrYWdlcy1kaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNWRS0yMDE1LTE4MTktRW5mb3JjZS10aGUtcmVhZGVyLXRvLXJ1bi1pbi1jb25zdGFudC0ucGF0Y2ggXAorICAgICAgICAgICIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS94bWwyLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBweXRob25uYXRpdmUgcHRlc3QKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gInB5dGhvbi1jb3JlIgorCitSREVQRU5EU18ke1BOfS1weXRob24gKz0gInB5dGhvbi1jb3JlIgorCitSREVQRU5EU18ke1BOfS1wdGVzdF9hcHBlbmRfbGliYy1nbGliYyArPSAiZ2xpYmMtZ2NvbnYtZWJjZGljLXVzIGdsaWJjLWdjb252LWlibTExNDEiCisKKyMgV2UgZG9uJ3QgREVQRU5EIG9uIGJpbnV0aWxzIGZvciBhbnNpZGVjbC5oIHNvIGVuc3VyZSB3ZSBkb24ndCB1c2UgdGhlIGhlYWRlcgorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXNlZCAtaSAtZSAnLy4qYW5zaWRlY2wuaC4qL2QnICR7U30vY29uZmlndXJlLmFjCit9CisKK2V4cG9ydCBQWVRIT05fU0lURV9QQUNLQUdFUz0iJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICJweXRob24iCisKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7UFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbiIKKyMgV0FSTklORzogemxpYiBpcyByZXF1aXJlIGZvciBSUE0gdXNlCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LWRlYnVnIC0td2l0aG91dC1sZWdhY3kgLS13aXRoLWNhdGFsb2cgLS13aXRob3V0LWRvY2Jvb2sgLS13aXRoLWMxNG4gLS13aXRob3V0LWx6bWEgLS13aXRoLWZleGNlcHRpb25zIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQtbGVnYWN5IC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC16bGliIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGhvdXQtbGVnYWN5IC0td2l0aG91dC1kb2Nib29rIC0td2l0aC1jMTRuIC0td2l0aG91dC1sem1hIC0td2l0aC16bGliIgorRVhUUkFfT0VDT05GX2xpbnV4c3RkYmFzZSA9ICItLXdpdGgtZGVidWcgLS13aXRoLWxlZ2FjeSAtLXdpdGgtZG9jYm9vayAtLXdpdGgtYzE0biAtLXdpdGhvdXQtbHptYSAtLXdpdGgtemxpYiIKKworIyByZXF1aXJlZCBmb3IgcHl0aG9uZyBiaW5kaW5nCitleHBvcnQgSE9TVF9TWVMKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorZXhwb3J0IFNUQUdJTkdfSU5DRElSCisKK2V4cG9ydCBMREZMQUdTICs9ICItbGRsIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgIyBhdXRvbmFtZXIgd291bGQgY2FsbCB0aGlzIGxpYnhtbDItMiwgYnV0IHdlIGRvbid0IHdhbnQgdGhhdAorICAgIGlmIGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCBUcnVlKToKKyAgICAgICAgZC5zZXRWYXIoJ1BLR19saWJ4bWwyJywgJyR7TUxQUkVGSVh9bGlieG1sMicpCit9CisKK1BBQ0tBR0VTICs9ICIke1BOfS11dGlscyAke1BOfS1weXRob24iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vLmRlYnVnIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qLmEiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS94bWwyQ29uZi5zaCAke2xpYmRpcn0vY21ha2UvKiIKK0ZJTEVTXyR7UE59LXV0aWxzICs9ICIke2JpbmRpcn0vKiIKK0ZJTEVTXyR7UE59LXB5dGhvbiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKK2RvX2luc3RhbGxfcHRlc3QgKCkgeworICBjcCAtciAke1dPUktESVJ9L3htbGNvbmYgJHtEfSR7UFRFU1RfUEFUSH0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS1DVkUtMjAxNS0xODE5LUVuZm9yY2UtdGhlLXJlYWRlci10by1ydW4taW4tY29uc3RhbnQtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDU4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi8wMDAxLUNWRS0yMDE1LTE4MTktRW5mb3JjZS10aGUtcmVhZGVyLXRvLXJ1bi1pbi1jb25zdGFudC0ucGF0Y2gKQEAgLTAsMCArMSwxODEgQEAKK0Zyb20gMjEzZjFmZTBkNzZkMzBlYWVkNmU1ODUzMDU3ZGVmYzQzZTZkZjJjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK0RhdGU6IFR1ZSwgMTQgQXByIDIwMTUgMTc6NDE6NDggKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQ1ZFLTIwMTUtMTgxOSBFbmZvcmNlIHRoZSByZWFkZXIgdG8gcnVuIGluIGNvbnN0YW50IG1lbW9yeQorCitPbmUgb2YgdGhlIG9wZXJhdGlvbiBvbiB0aGUgcmVhZGVyIGNvdWxkIHJlc29sdmUgZW50aXRpZXMKK2xlYWRpbmcgdG8gdGhlIGNsYXNzaWMgZXhwYW5zaW9uIGlzc3VlLiBNYWtlIHN1cmUgdGhlCitidWZmZXIgdXNlZCBmb3IgeG1scmVhZGVyIG9wZXJhdGlvbiBpcyBib3VuZGVkLgorSW50cm9kdWNlIGEgbmV3IGFsbG9jYXRpb24gdHlwZSBmb3IgdGhlIGJ1ZmZlcnMgZm9yIHRoaXMgZWZmZWN0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPFl1ZS5UYW9Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgYnVmLmMgICAgICAgICAgICAgICAgIHwgICA0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgaW5jbHVkZS9saWJ4bWwvdHJlZS5oIHwgICAgMyArKy0KKyB4bWxyZWFkZXIuYyAgICAgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKystCisgMyBmaWxlcyBjaGFuZ2VkLCA2MyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVmLmMgYi9idWYuYworaW5kZXggNmVmYzdiNi4uMDc5MjJmZiAxMDA2NDQKKy0tLSBhL2J1Zi5jCisrKysgYi9idWYuYworQEAgLTI3LDYgKzI3LDcgQEAKKyAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyAjaW5jbHVkZSA8bGlieG1sL2dsb2JhbHMuaD4KKyAjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKysjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPiAvKiBmb3IgWE1MX01BWF9URVhUX0xFTkdUSCAqLworICNpbmNsdWRlICJidWYuaCIKKyAKKyAjZGVmaW5lIFdJVEhfQlVGRkVSX0NPTVBBVAorQEAgLTI5OSw3ICszMDAsOCBAQCB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHhtbEJ1ZlB0ciBidWYsCisgICAgIGlmICgoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfRE9VQkxFSVQpIHx8CisgICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfRVhBQ1QpIHx8CisgICAgICAgICAoc2NoZW1lID09IFhNTF9CVUZGRVJfQUxMT0NfSFlCUklEKSB8fAorLSAgICAgICAgKHNjaGVtZSA9PSBYTUxfQlVGRkVSX0FMTE9DX0lNTVVUQUJMRSkpIHsKKysgICAgICAgIChzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUpIHx8CisrCShzY2hlbWUgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSkgeworIAlidWYtPmFsbG9jID0gc2NoZW1lOworICAgICAgICAgaWYgKGJ1Zi0+YnVmZmVyKQorICAgICAgICAgICAgIGJ1Zi0+YnVmZmVyLT5hbGxvYyA9IHNjaGVtZTsKK0BAIC00NTgsNiArNDYwLDE4IEBAIHhtbEJ1Zkdyb3dJbnRlcm5hbCh4bWxCdWZQdHIgYnVmLCBzaXplX3QgbGVuKSB7CisgICAgIHNpemUgPSBidWYtPnVzZSArIGxlbiArIDEwMDsKKyAjZW5kaWYKKyAKKysgICAgaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrICAgICAgICAvKgorKwkgKiBVc2VkIHRvIHByb3ZpZGUgcGFyc2luZyBsaW1pdHMKKysJICovCisrICAgICAgICBpZiAoKGJ1Zi0+dXNlICsgbGVuID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHx8CisrCSAgICAoYnVmLT5zaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpKSB7CisrCSAgICB4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkgICAgcmV0dXJuKDApOworKwl9CisrCWlmIChzaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpCisrCSAgICBzaXplID0gWE1MX01BWF9URVhUX0xFTkdUSDsKKysgICAgfQorICAgICBpZiAoKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19JTykgJiYgKGJ1Zi0+Y29udGVudElPICE9IE5VTEwpKSB7CisgICAgICAgICBzaXplX3Qgc3RhcnRfYnVmID0gYnVmLT5jb250ZW50IC0gYnVmLT5jb250ZW50SU87CisgCitAQCAtNzM5LDYgKzc1MywxNSBAQCB4bWxCdWZSZXNpemUoeG1sQnVmUHRyIGJ1Ziwgc2l6ZV90IHNpemUpCisgICAgIENIRUNLX0NPTVBBVChidWYpCisgCisgICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfSU1NVVRBQkxFKSByZXR1cm4oMCk7CisrICAgIGlmIChidWYtPmFsbG9jID09IFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCkgeworKyAgICAgICAgLyoKKysJICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAqLworKyAgICAgICAgaWYgKHNpemUgPj0gWE1MX01BWF9URVhUX0xFTkdUSCkgeworKwkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiYnVmZmVyIGVycm9yOiB0ZXh0IHRvbyBsb25nXG4iKTsKKysJICAgIHJldHVybigwKTsKKysJfQorKyAgICB9CisgCisgICAgIC8qIERvbid0IHJlc2l6ZSBpZiB3ZSBkb24ndCBoYXZlIHRvICovCisgICAgIGlmIChzaXplIDwgYnVmLT5zaXplKQorQEAgLTg2Nyw2ICs4OTAsMTUgQEAgeG1sQnVmQWRkKHhtbEJ1ZlB0ciBidWYsIGNvbnN0IHhtbENoYXIgKnN0ciwgaW50IGxlbikgeworIAorICAgICBuZWVkU2l6ZSA9IGJ1Zi0+dXNlICsgbGVuICsgMjsKKyAgICAgaWYgKG5lZWRTaXplID4gYnVmLT5zaXplKXsKKysJaWYgKGJ1Zi0+YWxsb2MgPT0gWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKSB7CisrCSAgICAvKgorKwkgICAgICogVXNlZCB0byBwcm92aWRlIHBhcnNpbmcgbGltaXRzCisrCSAgICAgKi8KKysJICAgIGlmIChuZWVkU2l6ZSA+PSBYTUxfTUFYX1RFWFRfTEVOR1RIKSB7CisrCQl4bWxCdWZNZW1vcnlFcnJvcihidWYsICJidWZmZXIgZXJyb3I6IHRleHQgdG9vIGxvbmdcbiIpOworKwkJcmV0dXJuKC0xKTsKKysJICAgIH0KKysJfQorICAgICAgICAgaWYgKCF4bWxCdWZSZXNpemUoYnVmLCBuZWVkU2l6ZSkpeworIAkgICAgeG1sQnVmTWVtb3J5RXJyb3IoYnVmLCAiZ3Jvd2luZyBidWZmZXIiKTsKKyAgICAgICAgICAgICByZXR1cm4gWE1MX0VSUl9OT19NRU1PUlk7CitAQCAtOTM4LDYgKzk3MCwxNSBAQCB4bWxCdWZBZGRIZWFkKHhtbEJ1ZlB0ciBidWYsIGNvbnN0IHhtbENoYXIgKnN0ciwgaW50IGxlbikgeworICAgICB9CisgICAgIG5lZWRTaXplID0gYnVmLT51c2UgKyBsZW4gKyAyOworICAgICBpZiAobmVlZFNpemUgPiBidWYtPnNpemUpeworKwlpZiAoYnVmLT5hbGxvYyA9PSBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpIHsKKysJICAgIC8qCisrCSAgICAgKiBVc2VkIHRvIHByb3ZpZGUgcGFyc2luZyBsaW1pdHMKKysJICAgICAqLworKwkgICAgaWYgKG5lZWRTaXplID49IFhNTF9NQVhfVEVYVF9MRU5HVEgpIHsKKysJCXhtbEJ1Zk1lbW9yeUVycm9yKGJ1ZiwgImJ1ZmZlciBlcnJvcjogdGV4dCB0b28gbG9uZ1xuIik7CisrCQlyZXR1cm4oLTEpOworKwkgICAgfQorKwl9CisgICAgICAgICBpZiAoIXhtbEJ1ZlJlc2l6ZShidWYsIG5lZWRTaXplKSl7CisgCSAgICB4bWxCdWZNZW1vcnlFcnJvcihidWYsICJncm93aW5nIGJ1ZmZlciIpOworICAgICAgICAgICAgIHJldHVybiBYTUxfRVJSX05PX01FTU9SWTsKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2xpYnhtbC90cmVlLmggYi9pbmNsdWRlL2xpYnhtbC90cmVlLmgKK2luZGV4IDJmOTA3MTcuLjRhOWIzYmMgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpYnhtbC90cmVlLmgKKysrKyBiL2luY2x1ZGUvbGlieG1sL3RyZWUuaAorQEAgLTc2LDcgKzc2LDggQEAgdHlwZWRlZiBlbnVtIHsKKyAgICAgWE1MX0JVRkZFUl9BTExPQ19FWEFDVCwJLyogZ3JvdyBvbmx5IHRvIHRoZSBtaW5pbWFsIHNpemUgKi8KKyAgICAgWE1MX0JVRkZFUl9BTExPQ19JTU1VVEFCTEUsIC8qIGltbXV0YWJsZSBidWZmZXIgKi8KKyAgICAgWE1MX0JVRkZFUl9BTExPQ19JTywJLyogc3BlY2lhbCBhbGxvY2F0aW9uIHNjaGVtZSB1c2VkIGZvciBJL08gKi8KKy0gICAgWE1MX0JVRkZFUl9BTExPQ19IWUJSSUQJLyogZXhhY3QgdXAgdG8gYSB0aHJlc2hvbGQsIGFuZCBkb3VibGVpdCB0aGVyZWFmdGVyICovCisrICAgIFhNTF9CVUZGRVJfQUxMT0NfSFlCUklELAkvKiBleGFjdCB1cCB0byBhIHRocmVzaG9sZCwgYW5kIGRvdWJsZWl0IHRoZXJlYWZ0ZXIgKi8KKysgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVECS8qIGxpbWl0IHRoZSB1cHBlciBzaXplIG9mIHRoZSBidWZmZXIgKi8KKyB9IHhtbEJ1ZmZlckFsbG9jYXRpb25TY2hlbWU7CisgCisgLyoqCitkaWZmIC0tZ2l0IGEveG1scmVhZGVyLmMgYi94bWxyZWFkZXIuYworaW5kZXggZjE5ZTEyMy4uNDcxZTdlMiAxMDA2NDQKKy0tLSBhL3htbHJlYWRlci5jCisrKysgYi94bWxyZWFkZXIuYworQEAgLTIwOTEsNiArMjA5MSw5IEBAIHhtbE5ld1RleHRSZWFkZXIoeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgaW5wdXQsIGNvbnN0IGNoYXIgKlVSSSkgeworIAkJInhtbE5ld1RleHRSZWFkZXIgOiBtYWxsb2MgZmFpbGVkXG4iKTsKKyAJcmV0dXJuKE5VTEwpOworICAgICB9CisrICAgIC8qIG5vIG9wZXJhdGlvbiBvbiBhIHJlYWRlciBzaG91bGQgcmVxdWlyZSBhIGh1Z2UgYnVmZmVyICovCisrICAgIHhtbEJ1ZlNldEFsbG9jYXRpb25TY2hlbWUocmV0LT5idWZmZXIsCisrCQkJICAgICAgWE1MX0JVRkZFUl9BTExPQ19CT1VOREVEKTsKKyAgICAgcmV0LT5zYXggPSAoeG1sU0FYSGFuZGxlciAqKSB4bWxNYWxsb2Moc2l6ZW9mKHhtbFNBWEhhbmRsZXIpKTsKKyAgICAgaWYgKHJldC0+c2F4ID09IE5VTEwpIHsKKyAJeG1sQnVmRnJlZShyZXQtPmJ1ZmZlcik7CitAQCAtMzYxNiw2ICszNjE5LDcgQEAgeG1sVGV4dFJlYWRlckNvbnN0VmFsdWUoeG1sVGV4dFJlYWRlclB0ciByZWFkZXIpIHsKKyAJICAgIHJldHVybigoKHhtbE5zUHRyKSBub2RlKS0+aHJlZik7CisgICAgICAgICBjYXNlIFhNTF9BVFRSSUJVVEVfTk9ERTp7CisgCSAgICB4bWxBdHRyUHRyIGF0dHIgPSAoeG1sQXR0clB0cikgbm9kZTsKKysJICAgIGNvbnN0IHhtbENoYXIgKnJldDsKKyAKKyAJICAgIGlmICgoYXR0ci0+Y2hpbGRyZW4gIT0gTlVMTCkgJiYKKyAJICAgICAgICAoYXR0ci0+Y2hpbGRyZW4tPnR5cGUgPT0gWE1MX1RFWFRfTk9ERSkgJiYKK0BAIC0zNjI5LDEwICszNjMzLDIxIEBAIHhtbFRleHRSZWFkZXJDb25zdFZhbHVlKHhtbFRleHRSZWFkZXJQdHIgcmVhZGVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ4bWxUZXh0UmVhZGVyU2V0dXAgOiBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgfQorKwkJICAgIHhtbEJ1ZlNldEFsbG9jYXRpb25TY2hlbWUocmVhZGVyLT5idWZmZXIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIHhtbEJ1ZkVtcHR5KHJlYWRlci0+YnVmZmVyKTsKKyAJICAgICAgICB4bWxCdWZHZXROb2RlQ29udGVudChyZWFkZXItPmJ1ZmZlciwgbm9kZSk7CistCQlyZXR1cm4oeG1sQnVmQ29udGVudChyZWFkZXItPmJ1ZmZlcikpOworKwkJcmV0ID0geG1sQnVmQ29udGVudChyZWFkZXItPmJ1ZmZlcik7CisrCQlpZiAocmV0ID09IE5VTEwpIHsKKysJCSAgICAvKiBlcnJvciBvbiB0aGUgYnVmZmVyIGJlc3QgdG8gcmVhbGxvY2F0ZSAqLworKwkJICAgIHhtbEJ1ZkZyZWUocmVhZGVyLT5idWZmZXIpOworKwkJICAgIHJlYWRlci0+YnVmZmVyID0geG1sQnVmQ3JlYXRlU2l6ZSgxMDApOworKwkJICAgIHhtbEJ1ZlNldEFsbG9jYXRpb25TY2hlbWUocmVhZGVyLT5idWZmZXIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQlVGRkVSX0FMTE9DX0JPVU5ERUQpOworKwkJICAgIHJldCA9IEJBRF9DQVNUICIiOworKwkJfQorKwkJcmV0dXJuKHJldCk7CisgCSAgICB9CisgCSAgICBicmVhazsKKyAJfQorQEAgLTUxMzEsNiArNTE0Niw5IEBAIHhtbFRleHRSZWFkZXJTZXR1cCh4bWxUZXh0UmVhZGVyUHRyIHJlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAieG1sVGV4dFJlYWRlclNldHVwIDogbWFsbG9jIGZhaWxlZFxuIik7CisgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgfQorKyAgICAvKiBubyBvcGVyYXRpb24gb24gYSByZWFkZXIgc2hvdWxkIHJlcXVpcmUgYSBodWdlIGJ1ZmZlciAqLworKyAgICB4bWxCdWZTZXRBbGxvY2F0aW9uU2NoZW1lKHJlYWRlci0+YnVmZmVyLAorKwkJCSAgICAgIFhNTF9CVUZGRVJfQUxMT0NfQk9VTkRFRCk7CisgICAgIGlmIChyZWFkZXItPnNheCA9PSBOVUxMKQorIAlyZWFkZXItPnNheCA9ICh4bWxTQVhIYW5kbGVyICopIHhtbE1hbGxvYyhzaXplb2YoeG1sU0FYSGFuZGxlcikpOworICAgICBpZiAocmVhZGVyLT5zYXggPT0gTlVMTCkgeworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjUzYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvMDAwMS10aHJlYWRzLURlZmluZS1wdGhyZWFkLWRlZmluaXRpb25zLWZvci1nbGliYy1jb21wbGlhLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gNjc1MGNjNTY0YTE3YzgxMjU1NWNjYTU4NzY2MDI0MGNjZmZhYWVkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDQgQXByIDIwMTUgMDg6NTA6NDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdGhyZWFkczogRGVmaW5lIHB0aHJlYWQqIGRlZmluaXRpb25zIGZvciBnbGliYyBjb21wbGlhbnQgbGlicworCitUaGlzIGNvZGUgaXMgYXNzdW1pbmcgZ2xpYmMgYnV0IG5vdCBleHBsaWNpdGx5IHNheWluZyBpdAorc28gbGV0cyBtYWtlIGl0IHNvLiBGaXhlcyBmb2xsb3dpbmcgb24gbXVzbAorCit0aHJlYWRzLmM6ODA6Mjc6IGVycm9yOiBtYWNybyAicHRocmVhZF9lcXVhbCIgcmVxdWlyZXMgMiBhcmd1bWVudHMsIGJ1dAorb25seSAxIGdpdmVuCit8ICBleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKCkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyB0aHJlYWRzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBsaWJ4bWwyLTIuOS4yL3RocmVhZHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhtbDItMi45LjIub3JpZy90aHJlYWRzLmMKKysrKyBsaWJ4bWwyLTIuOS4yL3RocmVhZHMuYworQEAgLTQ3LDcgKzQ3LDcgQEAKKyAjaWZkZWYgSEFWRV9QVEhSRUFEX0gKKyAKKyBzdGF0aWMgaW50IGxpYnhtbF9pc190aHJlYWRlZCA9IC0xOworLSNpZmRlZiBfX0dOVUNfXworKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fR0xJQkNfXykKKyAjaWZkZWYgbGludXgKKyAjaWYgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMykgfHwgKF9fR05VQ19fID4gMykKKyBleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvNzJhNDZhNTE5Y2U3MzI2ZDlhMDBmMGI2YTdmMmE4ZTk1OGNkMTY3NS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhODExMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyLzcyYTQ2YTUxOWNlNzMyNmQ5YTAwZjBiNmE3ZjJhOGU5NThjZDE2NzUucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSA3MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGFuaWVsIFZlaWxsYXJkIDx2ZWlsbGFyZEByZWRoYXQuY29tPgorRGF0ZTogVGh1LCAyMyBPY3QgMjAxNCAxMTozNTozNiArMDgwMAorU3ViamVjdDogRml4IG1pc3NpbmcgZW50aXRpZXMgYWZ0ZXIgQ1ZFLTIwMTQtMzY2MCBmaXgKKworRm9yIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzg4MDUKKworVGhlIGZpeCBmb3IgQ1ZFLTIwMTQtMzY2MCBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbiBpbiBzb21lIGNhc2UKK3doZXJlIGVudGl0eSBzdWJzdGl0dXRpb24gaXMgcmVxdWlyZWQgYW5kIHRoZSBlbnRpdHkgaXMgdXNlZAorZmlyc3QgaW4gYW5vdHRoZXIgZW50aXR5IHJlZmVyZW5jZWQgZnJvbSBhbiBhdHRyaWJ1dGUgdmFsdWUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC0tZ2l0IGEvcGFyc2VyLmMgYi9wYXJzZXIuYworaW5kZXggNjdjOWRmZC4uYThkMWI2NyAxMDA2NDQKKy0tLSBhL3BhcnNlci5jCisrKysgYi9wYXJzZXIuYworQEAgLTcyMzUsNyArNzIzNSw4IEBAIHhtbFBhcnNlUmVmZXJlbmNlKHhtbFBhcnNlckN0eHRQdHIgY3R4dCkgeworICAgICAgKiBmYXIgbW9yZSBzZWN1cmUgYXMgdGhlIHBhcnNlciB3aWxsIG9ubHkgcHJvY2VzcyBkYXRhIGNvbWluZyBmcm9tCisgICAgICAqIHRoZSBkb2N1bWVudCBlbnRpdHkgYnkgZGVmYXVsdC4KKyAgICAgICovCistICAgIGlmICgoZW50LT5jaGVja2VkID09IDApICYmCisrICAgIGlmICgoKGVudC0+Y2hlY2tlZCA9PSAwKSB8fAorKyAgICAgICAgICgoZW50LT5jaGlsZHJlbiA9PSBOVUxMKSAmJiAoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9OT0VOVCkpKSAmJgorICAgICAgICAgKChlbnQtPmV0eXBlICE9IFhNTF9FWFRFUk5BTF9HRU5FUkFMX1BBUlNFRF9FTlRJVFkpIHx8CisgICAgICAgICAgKGN0eHQtPm9wdGlvbnMgJiAoWE1MX1BBUlNFX05PRU5UIHwgWE1MX1BBUlNFX0RURFZBTElEKSkpKSB7CisgCXVuc2lnbmVkIGxvbmcgb2xkbmJlbnQgPSBjdHh0LT5uYmVudGl0aWVzOworLS0gCitjZ2l0IHYwLjEwLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvYW5zaWRlY2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9hbnNpZGVjbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDUyZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvYW5zaWRlY2wucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorU2FkbHkgY21ha2UgaXMgYnJva2VuLiBJZiBpdCBzZWVzIHRoaXMgcmVmZXJlbmNlIGFuZCBhbnNpZGVjbCBpcyBwcmVzZW50LCBpdCB3aWxsIGFkZCBhIAorZGVwZW5kZW5jeSB1cG9uIGl0LCBldmVuIGlmIEhBVkVfQU5TSURFQ19IIGlzIG5ldmVyIHNldC4KKworVGhlIGVhc2llc3Qgc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoZXNlIGxpbmVzLCBvdGhlcndpc2UgcmVjaXBlcyBsaWtlIGxpYnp5cHAgY2FuIGhhdmUgYSAKK2RlcGVuZGVuY3kgb24gdGhlIGFuc2lkZWNsLmggaGVhZGVyIHZpYSBjbWFrZS4gVGhpcyBjYW4gbGVhZCB0byBvZGQgcmVzdWx0cyBpZiB0aGUgCitoZWFkZXIgaXMgcmVtb3ZlZCAoY2xlYW4gYmludXRpbHMpIGFuZCB0aGVuIHRoZSBjb2RlIGlzIHJlY29tcGlsZWQuCisKK1JQIDIwMTIvNy8xMAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2l0cyByZWFsbHkgYSBjbWFrZSBidWddCisKK0luZGV4OiBsaWJ4bWwyLTIuOC4wL2luY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnhtbDItMi44LjAub3JpZy9pbmNsdWRlL2xpYnhtbC94bWx2ZXJzaW9uLmguaW4JMjAxMi0wNy0xMCAxMTo1MTo1Mi40NjA3NTA1NzMgKzAwMDAKKysrKyBsaWJ4bWwyLTIuOC4wL2luY2x1ZGUvbGlieG1sL3htbHZlcnNpb24uaC5pbgkyMDEyLTA3LTEwIDExOjUyOjQxLjQzNjc0OTM5NyArMDAwMAorQEAgLTQwMSw5ICs0MDEsNiBAQAorICNlbmRpZgorIAorICNpZmRlZiBfX0dOVUNfXworLSNpZmRlZiBIQVZFX0FOU0lERUNMX0gKKy0jaW5jbHVkZSA8YW5zaWRlY2wuaD4KKy0jZW5kaWYKKyAKKyAvKioKKyAgKiBBVFRSSUJVVEVfVU5VU0VEOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvY29uZmlndXJlLmFjLWZpeC1jcm9zcy1jb21waWxpbmctd2FybmluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4MDc5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2NvbmZpZ3VyZS5hYy1maXgtY3Jvc3MtY29tcGlsaW5nLXdhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorY29uZmlndXJlLmFjOiBmaXggY3Jvc3MgY29tcGlsaW5nIHdhcm5pbmcKKworVGhlcmUgaXMgYSB3YXJuaW5nIHdoaWxlIGNyb3NzIGNvbXBpbGluZyB3aGljaCB0cmlnZ2VyZWQgYQorZmFpbHVyZSBieSBkb19xYV9jb25maWd1cmUKKy4uLgorfGNvbmZpZ3VyZToxMjY1MjogY2hlY2tpbmcgZm9yIGd6cmVhZCBpbiAtbHoKK3xjb25maWd1cmU6MTI2Nzc6IG1pcHMtcG9reS1saW51eC1nY2MgIC1tZWIgLW1hYmk9MzIgLW1oYXJkLWZsb2F0CisgLUwvbGliIGNvbmZ0ZXN0LmMgLWx6ICAgPiY1Cit8bGQ6IHdhcm5pbmc6IGxpYnJhcnkgc2VhcmNoIHBhdGggIi9saWIiIGlzIHVuc2FmZSBmb3IgY3Jvc3MtY29tcGlsYXRpb24KKy4uLgorCitXaGlsZSBkbyB0aGUgbGliIGNoZWNraW5nLCBkbyBub3QgYWRkICctTCR7Wl9ESVJ9L2xpYicgdG8gTERGTEFHUyBjb3VsZCBmaXggaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCA1ICstLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5YTkwNjAwLi4wYmFjOGE0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zOTEsOCArMzkxLDYgQEAgaWYgdGVzdCAiJHdpdGhfemxpYiIgPSAibm8iOyB0aGVuCisgICAgIGVjaG8gIkRpc2FibGluZyBjb21wcmVzc2lvbiBzdXBwb3J0IgorIGVsc2UKKyAgICAgQUNfQ0hFQ0tfSEVBREVSUyh6bGliLmgsCistICAgICAgICBbU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgorLQkgTERGTEFHUz0iLUwke1pfRElSfS9saWIiCisgCUFDX0NIRUNLX0xJQih6LCBnenJlYWQsWworIAkgICAgQUNfREVGSU5FKFtIQVZFX0xJQlpdLCBbMV0sIFtIYXZlIGNvbXByZXNzaW9uIGxpYnJhcnldKQorIAkgICAgV0lUSF9aTElCPTEKK0BAIC00MDYsOCArNDA0LDcgQEAgZWxzZQorIAkJZXNhY10KKyAJICAgIGVsc2UKKyAJCVpfTElCUz0iLWx6IgorLQkgICAgZmldKQorLQkgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9Il0pCisrCSAgICBmaV0pKQorIGZpCisgCisgQUNfU1VCU1QoWl9DRkxBR1MpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbC02NGJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTQ3MDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLTY0Yml0LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gZGViaWFuOiBidWdzLmRlYmlhbi5vcmcvNDM5ODQzXQorCistLS0KKyBsaWJ4bWwuaCB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCistLS0gbGlieG1sMi0yLjYuMjkub3JpZy9saWJ4bWwuaAorKysrIGxpYnhtbDItMi42LjI5L2xpYnhtbC5oCitAQCAtMTEsMTAgKzExLDEzIEBACisgCisgI2lmbmRlZiBOT19MQVJHRUZJTEVfU09VUkNFCisgI2lmbmRlZiBfTEFSR0VGSUxFX1NPVVJDRQorICNkZWZpbmUgX0xBUkdFRklMRV9TT1VSQ0UKKyAjZW5kaWYKKysjaWZuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKysjZW5kaWYKKyAjaWZuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisgI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorICNlbmRpZgorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwtbTQtdXNlLXBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM4NDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvbGlieG1sLW00LXVzZS1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyMDQgQEAKK0FNX1BBVEhfWE1MMiB1c2VzIHhtbC1jb25maWcgd2hpY2ggd2UgZGlzYWJsZSB0aHJvdWdoCitiaW5jb25maWctZGlzYWJsZWQuYmJjbGFzcywgc28gcG9ydCBpdCB0byB1c2UgcGtnLWNvbmZpZyBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9saWJ4bWwubTQgYi9saWJ4bWwubTQKK2luZGV4IDY4Y2Q4MjQuLjVmYTBhOWIgMTAwNjQ0CistLS0gYS9saWJ4bWwubTQKKysrKyBiL2xpYnhtbC5tNAorQEAgLTEsMTg4ICsxLDEyIEBACistIyBDb25maWd1cmUgcGF0aHMgZm9yIExJQlhNTDIKKy0jIE1pa2UgSG9tbWV5IDIwMDQtMDYtMTkKKy0jIHVzZSBDUFBGTEFHUyBpbnN0ZWFkIG9mIENGTEFHUworLSMgVG9zaGlvIEt1cmF0b21pIDIwMDEtMDQtMjEKKy0jIEFkYXB0ZWQgZnJvbToKKy0jIENvbmZpZ3VyZSBwYXRocyBmb3IgR0xJQgorLSMgT3dlbiBUYXlsb3IgICAgIDk3LTExLTMKKy0KKyBkbmwgQU1fUEFUSF9YTUwyKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKKyBkbmwgVGVzdCBmb3IgWE1MLCBhbmQgZGVmaW5lIFhNTF9DUFBGTEFHUyBhbmQgWE1MX0xJQlMKKyBkbmwKKy1BQ19ERUZVTihbQU1fUEFUSF9YTUwyXSxbIAorLUFDX0FSR19XSVRIKHhtbC1wcmVmaXgsCistICAgICAgICAgICAgWyAgLS13aXRoLXhtbC1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIGxpYnhtbCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgeG1sX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgeG1sX2NvbmZpZ19wcmVmaXg9IiIpCistQUNfQVJHX1dJVEgoeG1sLWV4ZWMtcHJlZml4LAorLSAgICAgICAgICAgIFsgIC0td2l0aC14bWwtZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIGxpYnhtbCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgeG1sX2NvbmZpZ19leGVjX3ByZWZpeD0iJHdpdGh2YWwiLCB4bWxfY29uZmlnX2V4ZWNfcHJlZml4PSIiKQorLUFDX0FSR19FTkFCTEUoeG1sdGVzdCwKKy0gICAgICAgICAgICAgIFsgIC0tZGlzYWJsZS14bWx0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBMSUJYTUwgcHJvZ3JhbV0sLAorLSAgICAgICAgICAgICAgZW5hYmxlX3htbHRlc3Q9eWVzKQorLQorLSAgaWYgdGVzdCB4JHhtbF9jb25maWdfZXhlY19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIHhtbF9jb25maWdfYXJncz0iJHhtbF9jb25maWdfYXJncyIKKy0gICAgIGlmIHRlc3QgeCR7WE1MMl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgWE1MMl9DT05GSUc9JHhtbF9jb25maWdfZXhlY19wcmVmaXgvYmluL3htbDItY29uZmlnCistICAgICBmaQorLSAgZmkKKy0gIGlmIHRlc3QgeCR4bWxfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICAgeG1sX2NvbmZpZ19hcmdzPSIkeG1sX2NvbmZpZ19hcmdzIC0tcHJlZml4PSR4bWxfY29uZmlnX3ByZWZpeCIKKy0gICAgIGlmIHRlc3QgeCR7WE1MMl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgICAgWE1MMl9DT05GSUc9JHhtbF9jb25maWdfcHJlZml4L2Jpbi94bWwyLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCistCistICBBQ19QQVRIX1BST0coWE1MMl9DT05GSUcsIHhtbDItY29uZmlnLCBubykKKy0gIG1pbl94bWxfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDIuMC4wLFskMV0pCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGxpYnhtbCAtIHZlcnNpb24gPj0gJG1pbl94bWxfdmVyc2lvbikKKy0gIG5vX3htbD0iIgorLSAgaWYgdGVzdCAiJFhNTDJfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgIG5vX3htbD15ZXMKKy0gIGVsc2UKKy0gICAgWE1MX0NQUEZMQUdTPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgWE1MX0xJQlM9YCRYTUwyX0NPTkZJRyAkeG1sX2NvbmZpZ19hcmdzIC0tbGlic2AKKy0gICAgeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgeG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uPWAkWE1MMl9DT05GSUcgJHhtbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAieCRlbmFibGVfeG1sdGVzdCIgPSAieHllcyIgOyB0aGVuCistICAgICAgYWNfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorLSAgICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCistICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWE1MX0NQUEZMQUdTIgorLSAgICAgIExJQlM9IiRYTUxfTElCUyAkTElCUyIKKy1kbmwKKy1kbmwgTm93IGNoZWNrIGlmIHRoZSBpbnN0YWxsZWQgbGlieG1sIGlzIHN1ZmZpY2llbnRseSBuZXcuCistZG5sIChBbHNvIHNhbml0eSBjaGVja3MgdGhlIHJlc3VsdHMgb2YgeG1sMi1jb25maWcgdG8gc29tZSBleHRlbnQpCistZG5sCistICAgICAgcm0gLWYgY29uZi54bWx0ZXN0CistICAgICAgQUNfVFJZX1JVTihbCistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdGRpby5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKy0jaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKy0KKy1pbnQgCistbWFpbigpCisteworLSAgaW50IHhtbF9tYWpvcl92ZXJzaW9uLCB4bWxfbWlub3JfdmVyc2lvbiwgeG1sX21pY3JvX3ZlcnNpb247CistICBpbnQgbWFqb3IsIG1pbm9yLCBtaWNybzsKKy0gIGNoYXIgKnRtcF92ZXJzaW9uOworLQorLSAgc3lzdGVtKCJ0b3VjaCBjb25mLnhtbHRlc3QiKTsKKy0KKy0gIC8qIENhcHR1cmUgeG1sMi1jb25maWcgb3V0cHV0IHZpYSBhdXRvY29uZi9jb25maWd1cmUgdmFyaWFibGVzICovCistICAvKiBIUC9VWCA5ICglQCMhKSB3cml0ZXMgdG8gc3NjYW5mIHN0cmluZ3MgKi8KKy0gIHRtcF92ZXJzaW9uID0gKGNoYXIgKilzdHJkdXAoIiRtaW5feG1sX3ZlcnNpb24iKTsKKy0gIGlmIChzc2NhbmYodG1wX3ZlcnNpb24sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmbWljcm8pICE9IDMpIHsKKy0gICAgIHByaW50ZigiJXMsIGJhZCB2ZXJzaW9uIHN0cmluZyBmcm9tIHhtbDItY29uZmlnXG4iLCAiJG1pbl94bWxfdmVyc2lvbiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistICAgZnJlZSh0bXBfdmVyc2lvbik7CistCistICAgLyogQ2FwdHVyZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBoZWFkZXIgZmlsZXMgKi8KKy0gICB0bXBfdmVyc2lvbiA9IChjaGFyICopc3RyZHVwKExJQlhNTF9ET1RURURfVkVSU0lPTik7CistICAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJnhtbF9tYWpvcl92ZXJzaW9uLCAmeG1sX21pbm9yX3ZlcnNpb24sICZ4bWxfbWljcm9fdmVyc2lvbikgIT0gMykgeworLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nIGZyb20gbGlieG1sIGluY2x1ZGVzXG4iLCAiTElCWE1MX0RPVFRFRF9WRVJTSU9OIik7CistICAgICBleGl0KDEpOworLSAgIH0KKy0gICBmcmVlKHRtcF92ZXJzaW9uKTsKKy0KKy0gLyogQ29tcGFyZSB4bWwyLWNvbmZpZyBvdXRwdXQgdG8gdGhlIGxpYnhtbCBoZWFkZXJzICovCistICBpZiAoKHhtbF9tYWpvcl92ZXJzaW9uICE9ICR4bWxfY29uZmlnX21ham9yX3ZlcnNpb24pIHx8CistICAgICAgKHhtbF9taW5vcl92ZXJzaW9uICE9ICR4bWxfY29uZmlnX21pbm9yX3ZlcnNpb24pIHx8CistICAgICAgKHhtbF9taWNyb192ZXJzaW9uICE9ICR4bWxfY29uZmlnX21pY3JvX3ZlcnNpb24pKQorLSAgICB7CistICAgICAgcHJpbnRmKCIqKiogbGlieG1sIGhlYWRlciBmaWxlcyAodmVyc2lvbiAlZC4lZC4lZCkgZG8gbm90IG1hdGNoXG4iLAorLSAgICAgICAgIHhtbF9tYWpvcl92ZXJzaW9uLCB4bWxfbWlub3JfdmVyc2lvbiwgeG1sX21pY3JvX3ZlcnNpb24pOworLSAgICAgIHByaW50ZigiKioqIHhtbDItY29uZmlnICh2ZXJzaW9uICVkLiVkLiVkKVxuIiwKKy0gICAgICAgICAkeG1sX2NvbmZpZ19tYWpvcl92ZXJzaW9uLCAkeG1sX2NvbmZpZ19taW5vcl92ZXJzaW9uLCAkeG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKTsKKy0gICAgICByZXR1cm4gMTsKKy0gICAgfSAKKy0vKiBDb21wYXJlIHRoZSBoZWFkZXJzIHRvIHRoZSBsaWJyYXJ5IHRvIG1ha2Ugc3VyZSB3ZSBtYXRjaCAqLworLSAgLyogTGVzcyB0aGFuIGlkZWFsIC0tIGRvZXNuJ3QgcHJvdmlkZSB1cyB3aXRoIHJldHVybiB2YWx1ZSBmZWVkYmFjaywgCistICAgKiBvbmx5IGV4aXRzIGlmIHRoZXJlJ3MgYSBzZXJpb3VzIG1pc21hdGNoIGJldHdlZW4gaGVhZGVyIGFuZCBsaWJyYXJ5LgorLSAgICovCistICAgIExJQlhNTF9URVNUX1ZFUlNJT047CistCistICAgIC8qIFRlc3QgdGhhdCB0aGUgbGlicmFyeSBpcyBncmVhdGVyIHRoYW4gb3VyIG1pbmltdW0gdmVyc2lvbiAqLworLSAgICBpZiAoKHhtbF9tYWpvcl92ZXJzaW9uID4gbWFqb3IpIHx8CistICAgICAgICAoKHhtbF9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoeG1sX21pbm9yX3ZlcnNpb24gPiBtaW5vcikpIHx8CistICAgICAgICAoKHhtbF9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoeG1sX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmCistICAgICAgICAoeG1sX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKKy0gICAgICB7CistICAgICAgICByZXR1cm4gMDsKKy0gICAgICAgfQorLSAgICAgZWxzZQorLSAgICAgIHsKKy0gICAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgbGlieG1sICglZC4lZC4lZCkgd2FzIGZvdW5kLlxuIiwKKy0gICAgICAgICAgICAgICB4bWxfbWFqb3JfdmVyc2lvbiwgeG1sX21pbm9yX3ZlcnNpb24sIHhtbF9taWNyb192ZXJzaW9uKTsKKy0gICAgICAgIHByaW50ZigiKioqIFlvdSBuZWVkIGEgdmVyc2lvbiBvZiBsaWJ4bWwgbmV3ZXIgdGhhbiAlZC4lZC4lZC4gVGhlIGxhdGVzdCB2ZXJzaW9uIG9mXG4iLAorLSAgICAgICAgICAgbWFqb3IsIG1pbm9yLCBtaWNybyk7CistICAgICAgICBwcmludGYoIioqKiBsaWJ4bWwgaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC54bWxzb2Z0Lm9yZy5cbiIpOworLSAgICAgICAgcHJpbnRmKCIqKipcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogSWYgeW91IGhhdmUgYWxyZWFkeSBpbnN0YWxsZWQgYSBzdWZmaWNpZW50bHkgbmV3IHZlcnNpb24sIHRoaXMgZXJyb3JcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgd3JvbmcgY29weSBvZiB0aGUgeG1sMi1jb25maWcgc2hlbGwgc2NyaXB0IGlzXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIGJlaW5nIGZvdW5kLiBUaGUgZWFzaWVzdCB3YXkgdG8gZml4IHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBvbGQgdmVyc2lvblxuIik7CistICAgICAgICBwcmludGYoIioqKiBvZiBMSUJYTUwsIGJ1dCB5b3UgY2FuIGFsc28gc2V0IHRoZSBYTUwyX0NPTkZJRyBlbnZpcm9ubWVudCB0byBwb2ludCB0byB0aGVcbiIpOworLSAgICAgICAgcHJpbnRmKCIqKiogY29ycmVjdCBjb3B5IG9mIHhtbDItY29uZmlnLiAoSW4gdGhpcyBjYXNlLCB5b3Ugd2lsbCBoYXZlIHRvXG4iKTsKKy0gICAgICAgIHByaW50ZigiKioqIG1vZGlmeSB5b3VyIExEX0xJQlJBUllfUEFUSCBlbnZpcm9tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZlxuIik7CistICAgICAgICBwcmludGYoIioqKiBzbyB0aGF0IHRoZSBjb3JyZWN0IGxpYnJhcmllcyBhcmUgZm91bmQgYXQgcnVuLXRpbWUpKVxuIik7CistICAgIH0KKy0gIHJldHVybiAxOworLX0KKy1dLCwgbm9feG1sPXllcyxbZWNobyAkYWNfbiAiY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWVkIE9LLi4uICRhY19jIl0pCistICAgICAgIENQUEZMQUdTPSIkYWNfc2F2ZV9DUFBGTEFHUyIKKy0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKy0gICAgIGZpCistICBmaQorK0FDX0RFRlVOKFtBTV9QQVRIX1hNTDJdLFsKKysgIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorIAorLSAgaWYgdGVzdCAieCRub194bWwiID0geCA7IHRoZW4KKy0gICAgIEFDX01TR19SRVNVTFQoeWVzICh2ZXJzaW9uICR4bWxfY29uZmlnX21ham9yX3ZlcnNpb24uJHhtbF9jb25maWdfbWlub3JfdmVyc2lvbi4keG1sX2NvbmZpZ19taWNyb192ZXJzaW9uKSkKKy0gICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pICAgICAKKy0gIGVsc2UKKy0gICAgIEFDX01TR19SRVNVTFQobm8pCistICAgICBpZiB0ZXN0ICIkWE1MMl9DT05GSUciID0gIm5vIiA7IHRoZW4KKy0gICAgICAgZWNobyAiKioqIFRoZSB4bWwyLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IExJQlhNTCBjb3VsZCBub3QgYmUgZm91bmQiCistICAgICAgIGVjaG8gIioqKiBJZiBsaWJ4bWwgd2FzIGluc3RhbGxlZCBpbiBQUkVGSVgsIG1ha2Ugc3VyZSBQUkVGSVgvYmluIGlzIGluIgorLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIFhNTDJfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKKy0gICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byB4bWwyLWNvbmZpZy4iCistICAgICBlbHNlCistICAgICAgIGlmIHRlc3QgLWYgY29uZi54bWx0ZXN0IDsgdGhlbgorLSAgICAgICAgOgorLSAgICAgICBlbHNlCistICAgICAgICAgIGVjaG8gIioqKiBDb3VsZCBub3QgcnVuIGxpYnhtbCB0ZXN0IHByb2dyYW0sIGNoZWNraW5nIHdoeS4uLiIKKy0gICAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAkWE1MX0NQUEZMQUdTIgorLSAgICAgICAgICBMSUJTPSIkTElCUyAkWE1MX0xJQlMiCistICAgICAgICAgIEFDX1RSWV9MSU5LKFsKKy0jaW5jbHVkZSA8bGlieG1sL3htbHZlcnNpb24uaD4KKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy1dLCAgICAgIFsgTElCWE1MX1RFU1RfVkVSU0lPTjsgcmV0dXJuIDA7XSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorLSAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIExJQlhNTCBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKy0gICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgTElCWE1MLiBJZiBpdCBpcyBub3QgZmluZGluZyBMSUJYTUwsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKy0gICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKy0gICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorLSAgICAgICAgICBlY2hvICIqKioiCistICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKy0gICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIiBdLAorLSAgICAgICAgWyBlY2hvICIqKiogVGhlIHRlc3QgcHJvZ3JhbSBmYWlsZWQgdG8gY29tcGlsZSBvciBsaW5rLiBTZWUgdGhlIGZpbGUgY29uZmlnLmxvZyBmb3IgdGhlIgorLSAgICAgICAgICBlY2hvICIqKiogZXhhY3QgZXJyb3IgdGhhdCBvY2N1cmVkLiBUaGlzIHVzdWFsbHkgbWVhbnMgTElCWE1MIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCistICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIExJQlhNTCBzaW5jZSBpdCB3YXMgaW5zdGFsbGVkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHlvdSIKKy0gICAgICAgICAgZWNobyAiKioqIG1heSB3YW50IHRvIGVkaXQgdGhlIHhtbDItY29uZmlnIHNjcmlwdDogJFhNTDJfQ09ORklHIiBdKQorLSAgICAgICAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiCistICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICAgIGZpCistICAgICBmaQorKyAgdmVyZGVwPWlmZWxzZShbJDFdLCBbXSwgW10sIFs+PSAkMV0pCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhYTUwsIFtsaWJ4bWwtMi4wICR2ZXJkZXBdLCBbJDJdLCBbJDNdKQorIAorLSAgICAgWE1MX0NQUEZMQUdTPSIiCistICAgICBYTUxfTElCUz0iIgorLSAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKy0gIGZpCisrICBYTUxfQ1BQRkxBR1M9JFhNTF9DRkxBR1MKKyAgIEFDX1NVQlNUKFhNTF9DUFBGTEFHUykKKy0gIEFDX1NVQlNUKFhNTF9MSUJTKQorLSAgcm0gLWYgY29uZi54bWx0ZXN0CisgXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL2xpYnhtbDItQ1ZFLTIwMTQtMDE5MS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDVhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9saWJ4bWwyLUNWRS0yMDE0LTAxOTEtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb206IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK0RhdGU6IFR1ZSwgMjIgQXByIDIwMTQgMTU6MzA6NTYgKzA4MDAKK1N1YmplY3Q6IERvIG5vdCBmZXRjaCBleHRlcm5hbCBwYXJhbWV0ZXIgZW50aXRpZXMKKworVW5sZXNzIGV4cGxpY2l0ZWx5IGFza2VkIGZvciB3aGVuIHZhbGlkYXRpbmcgb3IgcmVwbGFjaW5nIGVudGl0aWVzCit3aXRoIHRoZWlyIHZhbHVlLiBQcm9ibGVtIHBvaW50ZWQgb3V0IGJ5IERhbmllbCBCZXJyYW5nZSA8YmVycmFuZ2VAcmVkaGF0LmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorUmVmZXJlbmNlOiBodHRwczovL2FjY2Vzcy5yZWRoYXQuY29tL3NlY3VyaXR5L2N2ZS9DVkUtMjAxNC0wMTkxCisKK1NpZ25lZC1vZmYtYnk6IERhbmllbCBWZWlsbGFyZCA8dmVpbGxhcmRAcmVkaGF0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CistLS0KK2RpZmYgLU5hdXIgbGlieG1sMi0yLjkuMS1vcmlnL3BhcnNlci5jIGxpYnhtbDItMi45LjEvcGFyc2VyLmMKKy0tLSBsaWJ4bWwyLTIuOS4xLW9yaWcvcGFyc2VyLmMJMjAxMy0wNC0xNiAxNTozOToxOC4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJ4bWwyLTIuOS4xL3BhcnNlci5jCTIwMTQtMDUtMDcgMTM6MzU6NDYuODgzNjg3OTQ2ICswMjAwCitAQCAtMjU5NSw2ICsyNTk1LDIwIEBACisgCQkgICAgeG1sQ2hhckVuY29kaW5nIGVuYzsKKyAKKyAJCSAgICAvKgorKwkJICAgICAqIE5vdGU6IGV4dGVybmFsIHBhcnNlZCBlbnRpdGllcyB3aWxsIG5vdCBiZSBsb2FkZWQsIGl0IGlzCisrCQkgICAgICogbm90IHJlcXVpcmVkIGZvciBhIG5vbi12YWxpZGF0aW5nIHBhcnNlciwgdW5sZXNzIHRoZQorKwkJICAgICAqIG9wdGlvbiBvZiB2YWxpZGF0aW5nLCBvciBzdWJzdGl0dXRpbmcgZW50aXRpZXMgd2VyZQorKwkJICAgICAqIGdpdmVuLiBEb2luZyBzbyBpcyBmYXIgbW9yZSBzZWN1cmUgYXMgdGhlIHBhcnNlciB3aWxsCisrCQkgICAgICogb25seSBwcm9jZXNzIGRhdGEgY29taW5nIGZyb20gdGhlIGRvY3VtZW50IGVudGl0eSBieQorKwkJICAgICAqIGRlZmF1bHQuCisrCQkgICAgICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoKGVudGl0eS0+ZXR5cGUgPT0gWE1MX0VYVEVSTkFMX1BBUkFNRVRFUl9FTlRJVFkpICYmCisrCQkgICAgICAgICgoY3R4dC0+b3B0aW9ucyAmIFhNTF9QQVJTRV9OT0VOVCkgPT0gMCkgJiYKKysJCQkoKGN0eHQtPm9wdGlvbnMgJiBYTUxfUEFSU0VfRFREVkFMSUQpID09IDApICYmCisrCQkJKGN0eHQtPnZhbGlkYXRlID09IDApKQorKwkJCXJldHVybjsKKysKKysJCSAgICAvKgorIAkJICAgICAqIGhhbmRsZSB0aGUgZXh0cmEgc3BhY2VzIGFkZGVkIGJlZm9yZSBhbmQgYWZ0ZXIKKyAJCSAgICAgKiBjLmYuIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwjYXMtUEUKKyAJCSAgICAgKiB0aGlzIGlzIGRvbmUgaW5kZXBlbmRlbnRseS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcHl0aG9uLXNpdGVwYWNrYWdlcy1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzYzgzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3B5dGhvbi1zaXRlcGFja2FnZXMtZGlyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0FsbG93IHVzIHRvIHBhc3MgaW4gUFlUSE9OX1NJVEVfUEFDS0FHRVMKKworVGhlIHB5dGhvbiBiaW5hcnkgdXNlZCB3aGVuIGJ1aWxkaW5nIGZvciBuYXRpdmVzZGsgZG9lc24ndCBnaXZlIHVzIHRoZQorY29ycmVjdCBwYXRoIGhlcmUgc28gd2UgbmVlZCB0byBiZSBhYmxlIHRvIHNwZWNpZnkgaXQgb3Vyc2VsdmVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitSZWJhc2UgdG8gMi45LjIKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTgxMyw3ICs4MTMsOCBAQCBkbmwKKyAKKyBQWVRIT05fVkVSU0lPTj0KKyBQWVRIT05fSU5DTFVERVM9CistUFlUSE9OX1NJVEVfUEFDS0FHRVM9CisrIyBBbGxvdyB0aGlzIHRvIGJlIHNldCBleHRlcm5hbGx5CisrI1BZVEhPTl9TSVRFX1BBQ0tBR0VTPQorIFBZVEhPTl9URVNUUz0KKyBweXRob25kaXI9CisgaWYgdGVzdCAiJHdpdGhfcHl0aG9uIiAhPSAibm8iIDsgdGhlbgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczZDBiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1rIHJ1bnRlc3RzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9saWJ4bWwvbGlieG1sMi9ydW50ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVudGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTdhYjIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDIvcnVudGVzdC5wYXRjaApAQCAtMCwwICsxLDgyMCBAQAorQWRkICdpbnN0YWxsLXB0ZXN0JyBydWxlLgorUHJpbnQgYSBzdGFuZGFyZCByZXN1bHQgbGluZSBmb3IgZWFjaCB0ZXN0LgorCitTaWduZWQtb2ZmLWJ5OiBNaWhhZWxhIFNlbmRyZWEgPG1paGFlbGEuc2VuZHJlYUBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC11TnIgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDE0OjUxOjQyLjYzMzM4NjQ3NyArMDIwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wNC0xOSAxNDo0Nzo1MS41NDQ3MjA1NjggKzAyMDAKK0BAIC0yMDIsMTAgKzIwMiwxOSBAQAorICN0ZXN0T09NX0RFUEVOREVOQ0lFUyA9ICQoREVQUykKKyAjdGVzdE9PTV9MREFERD0gJChMREFERFMpCisgCisraW5zdGFsbC1wdGVzdDoKKysJQChpZiBbIC1kIC5saWJzIF0gOyB0aGVuIGNkIC5saWJzOyBmaTsgXAorKwlpbnN0YWxsICQobm9pbnN0X1BST0dSQU1TKSAkKERFU1RESVIpKQorKwljcCAtciAkKHNyY2RpcikvdGVzdCAkKERFU1RESVIpCisrCWNwIC1yICQoc3JjZGlyKS9yZXN1bHQgJChERVNURElSKQorKwljcCAtciAkKHNyY2RpcikvcHl0aG9uICQoREVTVERJUikKKysJY3AgTWFrZWZpbGUgJChERVNURElSKQorKwlzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJChERVNURElSKS9NYWtlZmlsZQorKworIHJ1bnRlc3RzOgorIAlbIC1kIHRlc3QgICBdIHx8ICQoTE5fUykgJChzcmNkaXIpL3Rlc3QgICAuCisgCVsgLWQgcmVzdWx0IF0gfHwgJChMTl9TKSAkKHNyY2RpcikvcmVzdWx0IC4KKy0JJChDSEVDS0VSKSAuL3J1bnRlc3QkKEVYRUVYVCkgJiYgJChDSEVDS0VSKSAuL3Rlc3RyZWN1cnNlJChFWEVFWFQpICYmJChDSEVDS0VSKSAuL3Rlc3RhcGkkKEVYRUVYVCkgJiYgJChDSEVDS0VSKSAuL3Rlc3RjaGFyJChFWEVFWFQpJiYgJChDSEVDS0VSKSAuL3Rlc3RkaWN0JChFWEVFWFQpICYmICQoQ0hFQ0tFUikgLi9ydW54bWxjb25mJChFWEVFWFQpCisrCS4vcnVudGVzdCQoRVhFRVhUKSA7IC4vdGVzdHJlY3Vyc2UkKEVYRUVYVCkgOyAuL3Rlc3RhcGkkKEVYRUVYVCkgOyAuL3Rlc3RjaGFyJChFWEVFWFQpIDsgLi90ZXN0ZGljdCQoRVhFRVhUKSA7IC4vcnVueG1sY29uZiQoRVhFRVhUKQorIAlAKGlmIFsgIiQoUFlUSE9OX1NVQkRJUikiICE9ICIiIF0gOyB0aGVuIGNkIHB5dGhvbiA7IFwKKyAJICAgICQoTUFLRSkgdGVzdHMgOyBmaSkKKyAKK2RpZmYgLXVOciBhL3J1bnN1aXRlLmMgYi9ydW5zdWl0ZS5jCistLS0gYS9ydW5zdWl0ZS5jCTIwMTMtMDQtMTIgMTY6MTc6MTEuNDYyODIzMjM4ICswMjAwCisrKysgYi9ydW5zdWl0ZS5jCTIwMTMtMDQtMTcgMTQ6MDc6MjQuMzUyNjkzMjExICswMjAwCitAQCAtMTE2Miw2ICsxMTYyLDcgQEAKKyAKKyAgICAgaWYgKGxvZ2ZpbGUgIT0gTlVMTCkKKyAgICAgICAgIGZjbG9zZShsb2dmaWxlKTsKKysgICAgcHJpbnRmKCIlczogcnVuc3VpdGVcblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybihyZXQpOworIH0KKyAjZWxzZSAvKiAhU0NIRU1BUyAqLworZGlmZiAtdU5yIGEvcnVudGVzdC5jIGIvcnVudGVzdC5jCistLS0gYS9ydW50ZXN0LmMJMjAxMy0wNC0xNiAxMzoxOToxNS4wODc5OTcyOTAgKzAyMDAKKysrKyBiL3J1bnRlc3QuYwkyMDEzLTA0LTE3IDE0OjA4OjI5LjUyOTk0OTY1NSArMDIwMAorQEAgLTQzODYsNiArNDM4Niw3IEBACisgCSAgICBlcnIrKzsKKyAJfQorICAgICB9CisrICAgIHByaW50ZigiJXM6ICVzXG4iLCAoZXJyID09IDApID8gIlBBU1MiIDogIkZBSUwiLCB0c3QtPmRlc2MpOworICAgICByZXR1cm4oZXJyKTsKKyB9CisgCitAQCAtNDQ1NSw2ICs0NDU2LDcgQEAKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisgCisrICAgIHByaW50ZigiJXM6IHJ1bnRlc3RcblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybihyZXQpOworIH0KKyAKK2RpZmYgLXVOciBhL3J1bnhtbGNvbmYuYyBiL3J1bnhtbGNvbmYuYworLS0tIGEvcnVueG1sY29uZi5jCTIwMTMtMDQtMTYgMTI6NTM6NDkuOTAwOTgyOTkwICswMjAwCisrKysgYi9ydW54bWxjb25mLmMJMjAxMy0wNC0xNyAxNDowOToyMS4xMTE3NzgxMDQgKzAyMDAKK0BAIC01OTUsNiArNTk1LDcgQEAKKyAKKyAgICAgaWYgKGxvZ2ZpbGUgIT0gTlVMTCkKKyAgICAgICAgIGZjbG9zZShsb2dmaWxlKTsKKysgICAgcHJpbnRmKCIlczogcnVueG1sY29uZlxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybihyZXQpOworIH0KKyAKK2RpZmYgLXVOciBhL3Rlc3RhcGkuYyBiL3Rlc3RhcGkuYworLS0tIGEvdGVzdGFwaS5jCTIwMTMtMDQtMTIgMTY6MTY6NTcuNzYzNDE3NjU5ICswMjAwCisrKysgYi90ZXN0YXBpLmMJMjAxMy0wNC0xNyAxNDoxMDoyOC44NzY5MjQ4ODEgKzAyMDAKK0BAIC0xMjQ1LDQ5ICsxMjQ1LDkxIEBACisgdGVzdGxpYnhtbDIodm9pZCkKKyB7CisgICAgIGludCB0ZXN0X3JldCA9IDA7CisrICAgIGludCByZXQgPSAwOworIAorLSAgICB0ZXN0X3JldCArPSB0ZXN0X0hUTUxwYXJzZXIoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9IVE1MdHJlZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X1NBWDIoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9jMTRuKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfY2F0YWxvZygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2NodmFsaWQoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9kZWJ1Z1hNTCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2RpY3QoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9lbmNvZGluZygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2VudGl0aWVzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfaGFzaCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X2xpc3QoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9uYW5vZnRwKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfbmFub2h0dHAoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9wYXJzZXIoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9wYXJzZXJJbnRlcm5hbHMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9wYXR0ZXJuKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfcmVsYXhuZygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3NjaGVtYXNJbnRlcm5hbHMoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF9zY2hlbWF0cm9uKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfdHJlZSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3VyaSgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3ZhbGlkKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeGluY2x1ZGUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxJTygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbGF1dG9tYXRhKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sZXJyb3IoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxtb2R1bGUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxyZWFkZXIoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxyZWdleHAoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWxzYXZlKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeG1sc2NoZW1hcygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHNjaGVtYXN0eXBlcygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHN0cmluZygpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3htbHVuaWNvZGUoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94bWx3cml0ZXIoKTsKKy0gICAgdGVzdF9yZXQgKz0gdGVzdF94cGF0aCgpOworLSAgICB0ZXN0X3JldCArPSB0ZXN0X3hwYXRoSW50ZXJuYWxzKCk7CistICAgIHRlc3RfcmV0ICs9IHRlc3RfeHBvaW50ZXIoKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfSFRNTHBhcnNlcigpKTsKKysgICAgcHJpbnRmKCIlczogSFRNTHBhcnNlclxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X0hUTUx0cmVlKCkpOworKyAgICBwcmludGYoIiVzOiBIVE1MdHJlZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X1NBWDIoKSk7CisrICAgIHByaW50ZigiJXM6IFNBWDJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9jMTRuKCkpOworKyAgICBwcmludGYoIiVzOiBjMTRuXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfY2F0YWxvZygpKTsKKysgICAgcHJpbnRmKCIlczogY2F0YWxvZ1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2NodmFsaWQoKSk7CisrICAgIHByaW50ZigiJXM6IGNodmFsaWRcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9kZWJ1Z1hNTCgpKTsKKysgICAgcHJpbnRmKCIlczogZGVidWdYTUxcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9kaWN0KCkpOworKyAgICBwcmludGYoIiVzOiBkaWN0XG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZW5jb2RpbmcoKSk7CisrICAgIHByaW50ZigiJXM6IGVuY29kaW5nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfZW50aXRpZXMoKSk7CisrICAgIHByaW50ZigiJXM6IGVudGl0aWVzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfaGFzaCgpKTsKKysgICAgcHJpbnRmKCIlczogaGFzaFxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X2xpc3QoKSk7CisrICAgIHByaW50ZigiJXM6IGxpc3RcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9uYW5vZnRwKCkpOworKyAgICBwcmludGYoIiVzOiBuYW5vZnRwXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfbmFub2h0dHAoKSk7CisrICAgIHByaW50ZigiJXM6IG5hbm9odHRwXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfcGFyc2VyKCkpOworKyAgICBwcmludGYoIiVzOiBwYXJzZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9wYXJzZXJJbnRlcm5hbHMoKSk7CisrICAgIHByaW50ZigiJXM6IHBhcnNlckludGVybmFsc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3BhdHRlcm4oKSk7CisrICAgIHByaW50ZigiJXM6IHBhdHRlcm5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF9yZWxheG5nKCkpOworKyAgICBwcmludGYoIiVzOiByZWxheG5nXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3Rfc2NoZW1hc0ludGVybmFscygpKTsKKysgICAgcHJpbnRmKCIlczogc2NoZW1hc0ludGVybmFsc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3NjaGVtYXRyb24oKSk7CisrICAgIHByaW50ZigiJXM6IHNjaGVtYXRyb25cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF90cmVlKCkpOworKyAgICBwcmludGYoIiVzOiB0cmVlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfdXJpKCkpOworKyAgICBwcmludGYoIiVzOiB1cmlcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF92YWxpZCgpKTsKKysgICAgcHJpbnRmKCIlczogdmFsaWRcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94aW5jbHVkZSgpKTsKKysgICAgcHJpbnRmKCIlczogeGluY2x1ZGVcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxJTygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sSU9cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxhdXRvbWF0YSgpKTsKKysgICAgcHJpbnRmKCIlczogeG1sYXV0b21hdGFcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxlcnJvcigpKTsKKysgICAgcHJpbnRmKCIlczogeG1sZXJyb3JcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxtb2R1bGUoKSk7CisrICAgIHByaW50ZigiJXM6IHhtbG1vZHVsZVxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHJlYWRlcigpKTsKKysgICAgcHJpbnRmKCIlczogeG1scmVhZGVyXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1scmVnZXhwKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxyZWdleHBcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWxzYXZlKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxzYXZlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc2NoZW1hcygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc2NoZW1hc1xuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisrICAgIHRlc3RfcmV0ICs9IChyZXQgPSB0ZXN0X3htbHNjaGVtYXN0eXBlcygpKTsKKysgICAgcHJpbnRmKCIlczogeG1sc2NoZW1hc3R5cGVzXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sc3RyaW5nKCkpOworKyAgICBwcmludGYoIiVzOiB4bWxzdHJpbmdcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94bWx1bmljb2RlKCkpOworKyAgICBwcmludGYoIiVzOiB4bWx1bmljb2RlXG4iLCAocmV0ID09IDApID8gIlBBU1MiIDogIkZBSUwiKTsKKysgICAgdGVzdF9yZXQgKz0gKHJldCA9IHRlc3RfeG1sd3JpdGVyKCkpOworKyAgICBwcmludGYoIiVzOiB4bWx3cml0ZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94cGF0aCgpKTsKKysgICAgcHJpbnRmKCIlczogeHBhdGhcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94cGF0aEludGVybmFscygpKTsKKysgICAgcHJpbnRmKCIlczogeHBhdGhJbnRlcm5hbHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworKyAgICB0ZXN0X3JldCArPSAocmV0ID0gdGVzdF94cG9pbnRlcigpKTsKKysgICAgcHJpbnRmKCIlczogeHBvaW50ZXJcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworIAorICAgICBwcmludGYoIlRvdGFsOiAlZCBmdW5jdGlvbnMsICVkIHRlc3RzLCAlZCBlcnJvcnNcbiIsCisgICAgICAgICAgICBmdW5jdGlvbl90ZXN0cywgY2FsbF90ZXN0cywgdGVzdF9yZXQpOworKworKyAgICBwcmludGYoIiVzOiB0ZXN0YXBpXG5cbiIsICh0ZXN0X3JldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybih0ZXN0X3JldCk7CisgfQorIAorZGlmZiAtdU5yIGEvdGVzdGNoYXIuYyBiL3Rlc3RjaGFyLmMKKy0tLSBhL3Rlc3RjaGFyLmMJMjAxMy0wNC0xNyAxMDo1MDozMC4yNTAxNDc0MTggKzAyMDAKKysrKyBiL3Rlc3RjaGFyLmMJMjAxMy0wNC0xOCAxNjoxMToyOC40NTU3MzM4MDAgKzAyMDAKK0BAIC0yMyw3ICsyMyw3IEBACisgY2hhciBkb2N1bWVudDFbMTAwXSA9ICI8ZG9jPlhYWFg8L2RvYz4iOworIGNoYXIgZG9jdW1lbnQyWzEwMF0gPSAiPGRvYyBmb289J1hYWFgnLz4iOworIAorLXN0YXRpYyB2b2lkIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKytzdGF0aWMgaW50IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbGVuLCAgY2hhciAqZGF0YSwgaW50IGZvcmJpZDEsIGludCBmb3JiaWQyKSB7CisgICAgIGludCBpOworICAgICB4bWxEb2NQdHIgcmVzOworQEAgLTM3LDMzICszNyw0MSBAQAorIAlyZXMgPSB4bWxSZWFkTWVtb3J5KGRvY3VtZW50LCBsZW4sICJ0ZXN0IiwgTlVMTCwgMCk7CisgCisgCWlmICgoaSA9PSBmb3JiaWQxKSB8fCAoaSA9PSBmb3JiaWQyKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYOiAlY1xuIiwKKyAJCSAgICAgICAgaSwgaSk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJZWxzZSBpZiAoKGkgPT0gJzwnKSB8fCAoaSA9PSAnJicpKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKQorKwkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkgeworIAkgICAgICAgIGZwcmludGYoc3RkZXJyLAorIAkJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGlsbGVnYWwgY2hhciAlYyBmb3IgQnl0ZSAweCUwMlhcbiIsIGksIGkpOworKwkJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAllbHNlIGlmICgoKGkgPCAweDIwKSB8fCAoaSA+PSAweDgwKSkgJiYKKyAJICAgIChpICE9IDB4OSkgJiYgKGkgIT0gMHhBKSAmJiAoaSAhPSAweEQpKSB7CistCSAgICBpZiAoKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgJiYgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSAmJiAocmVzICE9IE5VTEwpKSB7CisgCSAgICAgICAgZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCWVsc2UgaWYgKHJlcyA9PSBOVUxMKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgdmFsaWQgY2hhciBmb3IgQnl0ZSAweCUwMlggOiAlY1xuIiwgaSwgaSk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAJaWYgKHJlcyAhPSBOVUxMKQorIAkgICAgeG1sRnJlZURvYyhyZXMpOworICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdERvY3VtZW50UmFuZ2VCeXRlMih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRvY3VtZW50LAorK3N0YXRpYyBpbnQgdGVzdERvY3VtZW50UmFuZ2VCeXRlMih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgIGludCBsZW4sICBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqOworICAgICB4bWxEb2NQdHIgcmVzOworQEAgLTgwLDEwICs4OCwxMiBAQAorIAorIAkvKiBpZiBmaXJzdCBiaXQgb2YgZmlyc3QgY2hhciBpcyBzZXQsIHRoZW4gc2Vjb25kIGJpdCBtdXN0IHRvbyAqLworIAlpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDQwKSA9PSAwKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtOTEsMTAgKzEwMSwxMiBAQAorIAkgKiBiaXRzIG11c3QgYmUgMTAKKyAJICovCisgCWVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChqICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpCisrCSAgICBpZiAoKGxhc3RFcnJvciA9PSAwKSB8fCAocmVzICE9IE5VTEwpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTEwMiwxMCArMTE0LDEyIEBACisgCSAqIHRoYW4gMHg4MCwgaS5lLiBvbmUgb2YgYml0cyA1IHRvIDEgb2YgaSBtdXN0IGJlIHNldAorIAkgKi8KKyAJZWxzZSBpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDFFKSA9PSAwKSkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGopOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMTEzLDEwICsxMjcsMTIgQEAKKyAJICogYXQgbGVhc3QgMyBieXRlcywgYnV0IHdlIGdpdmUgb25seSAyICEKKyAJICovCisgCWVsc2UgaWYgKChpICYgMHhFMCkgPT0gMHhFMCkgeworLQkgICAgaWYgKChsYXN0RXJyb3IgPT0gMCkgfHwgKHJlcyAhPSBOVUxMKSkKKysJICAgIGlmICgobGFzdEVycm9yID09IDApIHx8IChyZXMgIT0gTlVMTCkpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkgICAgIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4MDBcbiIsCisgCQkJaSwgaik7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC0xMjUsMTEgKzE0MSwxMyBAQAorIAllbHNlIGlmICgobGFzdEVycm9yICE9IDApIHx8IChyZXMgPT0gTlVMTCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBwYXJzZSBkb2N1bWVudCBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWFxuIiwgaSwgaik7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAJaWYgKHJlcyAhPSBOVUxMKQorIAkgICAgeG1sRnJlZURvYyhyZXMpOworICAgICB9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKyAvKioKK0BAIC0xNDEsOSArMTU5LDEwIEBACisgICogQ0RBVEEgaW4gdGV4dCBvciBpbiBhdHRyaWJ1dGUgdmFsdWVzLgorICAqLworIAorLXN0YXRpYyB2b2lkIHRlc3REb2N1bWVudFJhbmdlcyh2b2lkKSB7Cisrc3RhdGljIGludCB0ZXN0RG9jdW1lbnRSYW5nZXModm9pZCkgeworICAgICB4bWxQYXJzZXJDdHh0UHRyIGN0eHQ7CisgICAgIGNoYXIgKmRhdGE7CisrICAgIGludCB0ZXN0X3JldCA9IDA7CisgCisgICAgIC8qCisgICAgICAqIFNldCB1cCBhIHBhcnNpbmcgY29udGV4dCB1c2luZyB0aGUgZmlyc3QgZG9jdW1lbnQgYXMKK0BAIC0xNTIsNyArMTcxLDcgQEAKKyAgICAgY3R4dCA9IHhtbE5ld1BhcnNlckN0eHQoKTsKKyAgICAgaWYgKGN0eHQgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gYWxsb2NhdGUgcGFyc2VyIGNvbnRleHRcbiIpOworLQlyZXR1cm47CisrCXJldHVybigxKTsKKyAgICAgfQorIAorICAgICBwcmludGYoInRlc3RpbmcgMSBieXRlIGNoYXIgaW4gZG9jdW1lbnQ6IDEiKTsKK0BAIC0xNjMsNyArMTgyLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgLTEsIC0xKTsKKyAgICAgcHJpbnRmKCIgMiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0xNzIsNyArMTkxLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGVuZCBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArIDMsIC0xLCAtMSk7CisgCisgICAgIHByaW50ZigiIDMiKTsKK0BAIC0xODMsNyArMjAyLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAxIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTEoY3R4dCwgJmRvY3VtZW50MlswXSwgc3RybGVuKGRvY3VtZW50MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgJ1wnJywgLTEpOworICAgICBwcmludGYoIiA0Iik7CisgICAgIGZmbHVzaChzdGRvdXQpOworQEAgLTE5Miw3ICsyMTEsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDEgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMShjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMywgJ1wnJywgLTEpOworICAgICBwcmludGYoIiBkb25lXG4iKTsKKyAKK0BAIC0yMDQsNyArMjIzLDcgQEAKKyAgICAgZGF0YVsyXSA9ICcgJzsKKyAgICAgZGF0YVszXSA9ICcgJzsKKyAgICAgLyogdGVzdCAyIGJ5dGUgaW5qZWN0aW9uIGF0IGJlZ2lubmluZyBvZiBhcmVhICovCistICAgIHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisrICAgIHRlc3RfcmV0ICs9IHRlc3REb2N1bWVudFJhbmdlQnl0ZTIoY3R4dCwgJmRvY3VtZW50MVswXSwgc3RybGVuKGRvY3VtZW50MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CisgICAgIHByaW50ZigiIDIiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CitAQCAtMjEzLDcgKzIzMiw3IEBACisgICAgIGRhdGFbMl0gPSAnICc7CisgICAgIGRhdGFbM10gPSAnICc7CisgICAgIC8qIHRlc3QgMiBieXRlIGluamVjdGlvbiBhdCBlbmQgb2YgYXJlYSAqLworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorKyAgICB0ZXN0X3JldCArPSB0ZXN0RG9jdW1lbnRSYW5nZUJ5dGUyKGN0eHQsICZkb2N1bWVudDFbMF0sIHN0cmxlbihkb2N1bWVudDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyAyKTsKKyAKKyAgICAgcHJpbnRmKCIgMyIpOworQEAgLTIyNCw3ICsyNDMsNyBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgYmVnaW5uaW5nIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKKyAgICAgcHJpbnRmKCIgNCIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKK0BAIC0yMzMsMTQgKzI1MiwxNSBAQAorICAgICBkYXRhWzJdID0gJyAnOworICAgICBkYXRhWzNdID0gJyAnOworICAgICAvKiB0ZXN0IDIgYnl0ZSBpbmplY3Rpb24gYXQgZW5kIG9mIGFyZWEgKi8KKy0gICAgdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKysgICAgdGVzdF9yZXQgKz0gdGVzdERvY3VtZW50UmFuZ2VCeXRlMihjdHh0LCAmZG9jdW1lbnQyWzBdLCBzdHJsZW4oZG9jdW1lbnQyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICsgMik7CisgICAgIHByaW50ZigiIGRvbmVcbiIpOworIAorICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKysgICAgcmV0dXJuKHRlc3RfcmV0KTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGUxKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSA9IDA7CisgICAgIGludCBsZW4sIGM7CisgCitAQCAtMjU1LDE5ICsyNzUsMjUgQEAKKyAgICAgICAgIGMgPSB4bWxDdXJyZW50Q2hhcihjdHh0LCAmbGVuKTsKKyAJaWYgKChpID09IDApIHx8IChpID49IDB4ODApKSB7CisgCSAgICAvKiB3ZSBtdXN0IHNlZSBhbiBlcnJvciB0aGVyZSAqLworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGUgMHglMDJYXG4iLCBpKTsKKysJCQlyZXR1cm4oMSk7CisrCQl9CisgCX0gZWxzZSBpZiAoaSA9PSAweEQpIHsKKy0JICAgIGlmICgoYyAhPSAweEEpIHx8IChsZW4gIT0gMSkpCisrCSAgICBpZiAoKGMgIT0gMHhBKSB8fCAobGVuICE9IDEpKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBjb252ZXJ0IGNoYXIgZm9yIEJ5dGUgMHglMDJYXG4iLCBpKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfSBlbHNlIGlmICgoYyAhPSBpKSB8fCAobGVuICE9IDEpKSB7CisgCSAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlIDB4JTAyWFxuIiwgaSk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAgICAgfQorKwlyZXR1cm4oMCk7CisgfQorIAorLXN0YXRpYyB2b2lkIHRlc3RDaGFyUmFuZ2VCeXRlMih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKytzdGF0aWMgaW50IHRlc3RDaGFyUmFuZ2VCeXRlMih4bWxQYXJzZXJDdHh0UHRyIGN0eHQsIGNoYXIgKmRhdGEpIHsKKyAgICAgaW50IGksIGo7CisgICAgIGludCBsZW4sIGM7CisgCitAQCAtMjg0LDEwICszMTAsMTIgQEAKKyAKKyAJICAgIC8qIGlmIGZpcnN0IGJpdCBvZiBmaXJzdCBjaGFyIGlzIHNldCwgdGhlbiBzZWNvbmQgYml0IG11c3QgdG9vICovCisgCSAgICBpZiAoKGkgJiAweDgwKSAmJiAoKGkgJiAweDQwKSA9PSAwKSkgeworLQkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlhcbiIsCisgCQkgICAgICAgICAgICBpLCBqKTsKKysJCQlyZXR1cm4oMSk7CisrCQkJfQorIAkgICAgfQorIAorIAkgICAgLyoKK0BAIC0yOTUsMTAgKzMyMywxMiBAQAorIAkgICAgICogYml0cyBtdXN0IGJlIDEwCisgCSAgICAgKi8KKyAJICAgIGVsc2UgaWYgKChpICYgMHg4MCkgJiYgKChqICYgMHhDMCkgIT0gMHg4MCkpIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlg6ICVkXG4iLAorIAkJICAgICAgICAgICAgaSwgaiwgYyk7CisrCQkJcmV0dXJuKDEpOworKwkJCX0KKyAJICAgIH0KKyAKKyAJICAgIC8qCitAQCAtMzA2LDEwICszMzYsMTIgQEAKKyAJICAgICAqIHRoYW4gMHg4MCwgaS5lLiBvbmUgb2YgYml0cyA1IHRvIDEgb2YgaSBtdXN0IGJlIHNldAorIAkgICAgICovCisgCSAgICBlbHNlIGlmICgoaSAmIDB4ODApICYmICgoaSAmIDB4MUUpID09IDApKSB7CistCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkJaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYOiAlZFxuIiwKKyAJCSAgICAgICAgICAgIGksIGosIGMpOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgCSAgICAvKgorQEAgLTMxNywxMCArMzQ5LDEyIEBACisgCSAgICAgKiBhdCBsZWFzdCAzIGJ5dGVzLCBidXQgd2UgZ2l2ZSBvbmx5IDIgIQorIAkgICAgICovCisgCSAgICBlbHNlIGlmICgoaSAmIDB4RTApID09IDB4RTApIHsKKy0JCWlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCQlpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQkgICAgZnByaW50ZihzdGRlcnIsCisgCQkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHgwMFxuIiwKKyAJCSAgICAgICAgICAgIGksIGopOworKwkJCXJldHVybigxKTsKKysJCQl9CisgCSAgICB9CisgCisgICAgICAgICAgICAgLyoKK0BAIC0zMjksNiArMzYzLDcgQEAKKyAJICAgIGVsc2UgaWYgKChsYXN0RXJyb3IgIT0gMCkgfHwgKGxlbiAhPSAyKSkgeworIAkJZnByaW50ZihzdGRlcnIsCisgCQkgICAgIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYXG4iLCBpLCBqKTsKKysJCXJldHVybigxKTsKKyAJICAgIH0KKyAKKyAgICAgICAgICAgICAvKgorQEAgLTMzOCwxMiArMzczLDE0IEBACisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYOiBleHBlY3QgJWQgZ290ICVkXG4iLAorIAkgICAgICAgICAgICAgICAgaSwgaiwgKChqICYgMHgzRikgKyAoKGkgJiAweDFGKSA8PCA2KSksIGMpOworKwkJcmV0dXJuKDEpOworIAkgICAgfQorICAgICAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZUJ5dGUzKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZUJ5dGUzKHhtbFBhcnNlckN0eHRQdHIgY3R4dCwgY2hhciAqZGF0YSkgeworICAgICBpbnQgaSwgaiwgaywgSzsKKyAgICAgaW50IGxlbiwgYzsKKyAgICAgdW5zaWduZWQgY2hhciBsb3dzWzZdID0gezAsIDB4ODAsIDB4ODEsIDB4QzEsIDB4RkYsIDB4QkZ9OworQEAgLTM2OCwyMCArNDA1LDI0IEBACisgCSAqIGF0IGxlYXN0IDQgYnl0ZXMsIGJ1dCB3ZSBnaXZlIG9ubHkgMyAhCisgCSAqLworIAlpZiAoKGkgJiAweEYwKSA9PSAweEYwKSB7CistCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKQorKwkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikgeworIAkJZnByaW50ZihzdGRlcnIsCisgCSJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIGRhdGFbM10pOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorIAkgKiBUaGUgc2Vjb25kIGFuZCB0aGUgdGhpcmQgYnl0ZXMgbXVzdCBzdGFydCB3aXRoIDEwCisgCSAqLworIAllbHNlIGlmICgoKGogJiAweEMwKSAhPSAweDgwKSB8fCAoKEsgJiAweEMwKSAhPSAweDgwKSkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEspOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtMzkwLDEwICs0MzEsMTIgQEAKKyAJICogdGhlIDZ0aCBieXRlIG9mIGRhdGFbMV0gbXVzdCBiZSBzZXQKKyAJICovCisgCWVsc2UgaWYgKCgoaSAmIDB4RikgPT0gMCkgJiYgKChqICYgMHgyMCkgPT0gMCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJICAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAgICAgICAgIC8qCitAQCAtNDAxLDEwICs0NDQsMTIgQEAKKyAJICovCisgCWVsc2UgaWYgKCgodmFsdWUgPiAweEQ3RkYpICYmICh2YWx1ZSA8MHhFMDAwKSkgfHwKKyAJICAgICAgICAgKCh2YWx1ZSA+IDB4RkZGRCkgJiYgKHZhbHVlIDwweDEwMDAwKSkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIDB4JTA0WCBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJdmFsdWUsIGksIGosIEspOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgCS8qCitAQCAtNDE0LDYgKzQ1OSw3IEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAJCSJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkgICAgaSwgaiwgSyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAKKyAJLyoKK0BAIC00MjMsMTMgKzQ2OSwxNSBAQAorIAkgICAgZnByaW50ZihzdGRlcnIsCisgICAgICJGYWlsZWQgdG8gcGFyc2UgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlg6IGV4cGVjdCAlZCBnb3QgJWRcbiIsCisgCQlpLCBqLCBkYXRhWzJdLCB2YWx1ZSwgYyk7CisrCQlyZXR1cm4oMSk7CisgCX0KKyAgICAgfQorICAgICB9CisgICAgIH0KKysJcmV0dXJuKDApOworIH0KKyAKKy1zdGF0aWMgdm9pZCB0ZXN0Q2hhclJhbmdlQnl0ZTQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7Cisrc3RhdGljIGludCB0ZXN0Q2hhclJhbmdlQnl0ZTQoeG1sUGFyc2VyQ3R4dFB0ciBjdHh0LCBjaGFyICpkYXRhKSB7CisgICAgIGludCBpLCBqLCBrLCBLLCBsLCBMOworICAgICBpbnQgbGVuLCBjOworICAgICB1bnNpZ25lZCBjaGFyIGxvd3NbNl0gPSB7MCwgMHg4MCwgMHg4MSwgMHhDMSwgMHhGRiwgMHhCRn07CitAQCAtNDU4LDEwICs1MDYsMTIgQEAKKyAJICogYXQgbGVhc3QgNSBieXRlcywgYnV0IHdlIGdpdmUgb25seSA0ICEKKyAJICovCisgCWlmICgoaSAmIDB4RjgpID09IDB4RjgpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAgICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciBmb3IgQnl0ZXMgMHglMDJYIDB4JTAyWCAweCUwMlggMHglMDJYXG4iLAorIAkJCWksIGosIEssIGRhdGFbM10pOworKwkJcmV0dXJuKDEpOworKwkJfQorIAl9CisgCisgICAgICAgICAvKgorQEAgLTQ2OSwxMCArNTE5LDEyIEBACisgCSAqLworIAllbHNlIGlmICgoKGogJiAweEMwKSAhPSAweDgwKSB8fCAoKEsgJiAweEMwKSAhPSAweDgwKSB8fAorIAkgICAgICAgICAoKEwgJiAweEMwKSAhPSAweDgwKSkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorIAkiRmFpbGVkIHRvIGRldGVjdCBpbnZhbGlkIGNoYXIgZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQlpLCBqLCBLLCBMKTsKKysJCXJldHVybigxKTsKKysJCX0KKyAJfQorIAorIAkvKgorQEAgLTQ4MSwxMCArNTMzLDEyIEBACisgCSAqIHRoZSA2IG9yIDV0aCBieXRlIG9mIGogbXVzdCBiZSBzZXQKKyAJICovCisgCWVsc2UgaWYgKCgoaSAmIDB4NykgPT0gMCkgJiYgKChqICYgMHgzMCkgPT0gMCkpIHsKKy0JICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpCisrCSAgICBpZiAobGFzdEVycm9yICE9IFhNTF9FUlJfSU5WQUxJRF9DSEFSKSB7CisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJIkZhaWxlZCB0byBkZXRlY3QgaW52YWxpZCBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWCAweCUwMlhcbiIsCisgCQkJaSwgaiwgSywgTCk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAgICAgICAgIC8qCitAQCAtNDkzLDEwICs1NDcsMTIgQEAKKyAJZWxzZSBpZiAoKCh2YWx1ZSA+IDB4RDdGRikgJiYgKHZhbHVlIDwweEUwMDApKSB8fAorIAkgICAgICAgICAoKHZhbHVlID4gMHhGRkZEKSAmJiAodmFsdWUgPDB4MTAwMDApKSB8fAorIAkJICh2YWx1ZSA+IDB4MTBGRkZGKSkgeworLQkgICAgaWYgKGxhc3RFcnJvciAhPSBYTUxfRVJSX0lOVkFMSURfQ0hBUikKKysJICAgIGlmIChsYXN0RXJyb3IgIT0gWE1MX0VSUl9JTlZBTElEX0NIQVIpIHsKKyAJCWZwcmludGYoc3RkZXJyLAorICJGYWlsZWQgdG8gZGV0ZWN0IGludmFsaWQgY2hhciAweCUwNFggZm9yIEJ5dGVzIDB4JTAyWCAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCQl2YWx1ZSwgaSwgaiwgSywgTCk7CisrCQlyZXR1cm4oMSk7CisrCQl9CisgCX0KKyAKKyAJLyoKK0BAIC01MDYsNiArNTYyLDcgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLAorIAkJIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWFxuIiwKKyAJCSAgICBpLCBqLCBLKTsKKysJCXJldHVybigxKTsKKyAJfQorIAorIAkvKgorQEAgLTUxNSwxMSArNTcyLDEzIEBACisgCSAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgIkZhaWxlZCB0byBwYXJzZSBjaGFyIGZvciBCeXRlcyAweCUwMlggMHglMDJYIDB4JTAyWDogZXhwZWN0ICVkIGdvdCAlZFxuIiwKKyAJCWksIGosIGRhdGFbMl0sIHZhbHVlLCBjKTsKKysJCXJldHVybigxKTsKKyAJfQorICAgICB9CisgICAgIH0KKyAgICAgfQorICAgICB9CisrCXJldHVybigwKTsKKyB9CisgCisgLyoqCitAQCAtNTMwLDExICs1ODksMTIgQEAKKyAgKiBjb3ZlciB0aGUgZnVsbCByYW5nZSBvZiBVVEYtOCBjaGFycyBhY2NlcHRlZCBieSBYTUwtMS4wCisgICovCisgCistc3RhdGljIHZvaWQgdGVzdENoYXJSYW5nZXModm9pZCkgeworK3N0YXRpYyBpbnQgdGVzdENoYXJSYW5nZXModm9pZCkgeworICAgICBjaGFyIGRhdGFbNV07CisgICAgIHhtbFBhcnNlckN0eHRQdHIgY3R4dDsKKyAgICAgeG1sUGFyc2VySW5wdXRCdWZmZXJQdHIgYnVmOworICAgICB4bWxQYXJzZXJJbnB1dFB0ciBpbnB1dDsKKysgICAgaW50IHRlc3RfcmV0ID0gMDsKKyAKKyAgICAgbWVtc2V0KGRhdGEsIDAsIDUpOworIAorQEAgLTU0NSwxNyArNjA1LDE5IEBACisgICAgIGN0eHQgPSB4bWxOZXdQYXJzZXJDdHh0KCk7CisgICAgIGlmIChjdHh0ID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHBhcnNlciBjb250ZXh0XG4iKTsKKy0JcmV0dXJuOworKwlyZXR1cm4oMSk7CisgICAgIH0KKyAgICAgYnVmID0geG1sUGFyc2VySW5wdXRCdWZmZXJDcmVhdGVTdGF0aWMoZGF0YSwgc2l6ZW9mKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKKyAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpbnB1dCBidWZmZXJcbiIpOworKyAgICAgICAgdGVzdF9yZXQgPSAxOworIAlnb3RvIGVycm9yOworICAgICB9CisgICAgIGlucHV0ID0geG1sTmV3SW5wdXRTdHJlYW0oY3R4dCk7CisgICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7CisgICAgICAgICB4bWxGcmVlUGFyc2VySW5wdXRCdWZmZXIoYnVmKTsKKysgICAgICAgIHRlc3RfcmV0ID0gMTsKKyAJZ290byBlcnJvcjsKKyAgICAgfQorICAgICBpbnB1dC0+ZmlsZW5hbWUgPSBOVUxMOworQEAgLTU2NywyNSArNjI5LDI4IEBACisgCisgICAgIHByaW50ZigidGVzdGluZyBjaGFyIHJhbmdlOiAxIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTEoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlMShjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgMiIpOworICAgICBmZmx1c2goc3Rkb3V0KTsKKy0gICAgdGVzdENoYXJSYW5nZUJ5dGUyKGN0eHQsIGRhdGEpOworKyAgICB0ZXN0X3JldCArPSB0ZXN0Q2hhclJhbmdlQnl0ZTIoY3R4dCwgZGF0YSk7CisgICAgIHByaW50ZigiIDMiKTsKKyAgICAgZmZsdXNoKHN0ZG91dCk7CistICAgIHRlc3RDaGFyUmFuZ2VCeXRlMyhjdHh0LCBkYXRhKTsKKysgICAgdGVzdF9yZXQgKz0gdGVzdENoYXJSYW5nZUJ5dGUzKGN0eHQsIGRhdGEpOworICAgICBwcmludGYoIiA0Iik7CisgICAgIGZmbHVzaChzdGRvdXQpOworLSAgICB0ZXN0Q2hhclJhbmdlQnl0ZTQoY3R4dCwgZGF0YSk7CisrICAgIHRlc3RfcmV0ICs9IHRlc3RDaGFyUmFuZ2VCeXRlNChjdHh0LCBkYXRhKTsKKyAgICAgcHJpbnRmKCIgZG9uZVxuIik7CisgICAgIGZmbHVzaChzdGRvdXQpOworIAorIGVycm9yOgorICAgICB4bWxGcmVlUGFyc2VyQ3R4dChjdHh0KTsKKysgICAgcmV0dXJuKHRlc3RfcmV0KTsKKyB9CisgCisgaW50IG1haW4odm9pZCkgeworIAorKyAgICBpbnQgcmV0ID0gMDsKKysKKyAgICAgLyoKKyAgICAgICogdGhpcyBpbml0aWFsaXplIHRoZSBsaWJyYXJ5IGFuZCBjaGVjayBwb3RlbnRpYWwgQUJJIG1pc21hdGNoZXMKKyAgICAgICogYmV0d2VlbiB0aGUgdmVyc2lvbiBpdCB3YXMgY29tcGlsZWQgZm9yIGFuZCB0aGUgYWN0dWFsIHNoYXJlZAorQEAgLTYwMiw4ICs2NjcsOSBAQAorICAgICAvKgorICAgICAgKiBSdW4gdGhlIHRlc3RzCisgICAgICAqLworLSAgICB0ZXN0Q2hhclJhbmdlcygpOworLSAgICB0ZXN0RG9jdW1lbnRSYW5nZXMoKTsKKysgICAgcmV0ICs9IHRlc3RDaGFyUmFuZ2VzKCk7CisrICAgIHJldCArPSB0ZXN0RG9jdW1lbnRSYW5nZXMoKTsKKysgICAgcHJpbnRmKCIlczogdGVzdGNoYXJcblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgCisgICAgIC8qCisgICAgICAqIENsZWFudXAgZnVuY3Rpb24gZm9yIHRoZSBYTUwgbGlicmFyeS4KK2RpZmYgLXVOciBhL3Rlc3RkaWN0LmMgYi90ZXN0ZGljdC5jCistLS0gYS90ZXN0ZGljdC5jCTIwMTMtMDQtMTYgMTU6MDg6NDIuOTcxMTc3MTkzICswMjAwCisrKysgYi90ZXN0ZGljdC5jCTIwMTMtMDQtMTggMTU6NTk6MDAuNjk5NDgyNDM5ICswMjAwCitAQCAtNDQwLDUgKzQ0MCw2IEBACisgICAgIGNsZWFuX3N0cmluZ3MoKTsKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisrICAgIHByaW50ZigiJXM6IHRlc3RkaWN0XG5cbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CitkaWZmIC11TnIgYS90ZXN0bGltaXRzLmMgYi90ZXN0bGltaXRzLmMKKy0tLSBhL3Rlc3RsaW1pdHMuYwkyMDEzLTA0LTEyIDE2OjE2OjM2LjE4MDM1NDE3NyArMDIwMAorKysrIGIvdGVzdGxpbWl0cy5jCTIwMTMtMDQtMTcgMTQ6MDM6MTcuMjAzMDkyOTg3ICswMjAwCitAQCAtMTYzMCw1ICsxNjMwLDYgQEAKKyAgICAgeG1sQ2xlYW51cFBhcnNlcigpOworICAgICB4bWxNZW1vcnlEdW1wKCk7CisgCisrICAgIHByaW50ZigiJXM6IHRlc3RsaW1pdHNcbiIsIChyZXQgPT0gMCkgPyAiUEFTUyIgOiAiRkFJTCIpOworICAgICByZXR1cm4ocmV0KTsKKyB9CitkaWZmIC11TnIgYS90ZXN0cmVjdXJzZS5jIGIvdGVzdHJlY3Vyc2UuYworLS0tIGEvdGVzdHJlY3Vyc2UuYwkyMDEzLTA0LTE2IDEzOjE5OjQ5LjM2NjUzNjI5NSArMDIwMAorKysrIGIvdGVzdHJlY3Vyc2UuYwkyMDEzLTA0LTE3IDE0OjA2OjI3LjM2NzA5MTYyMiArMDIwMAorQEAgLTg5Miw2ICs4OTIsNyBAQAorIAkgICAgZXJyKys7CisgCX0KKyAgICAgfQorKyAgICBwcmludGYoIiVzOiAlc1xuIiwgKGVyciA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIiwgdHN0LT5kZXNjKTsKKyAgICAgcmV0dXJuKGVycik7CisgfQorIAorQEAgLTk2MSw1ICs5NjIsNiBAQAorICAgICB4bWxDbGVhbnVwUGFyc2VyKCk7CisgICAgIHhtbE1lbW9yeUR1bXAoKTsKKyAKKysgICAgcHJpbnRmKCIlczogdGVzdHJlY3Vyc2VcblxuIiwgKHJldCA9PSAwKSA/ICJQQVNTIiA6ICJGQUlMIik7CisgICAgIHJldHVybihyZXQpOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS4yLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbGlieG1sL2xpYnhtbDJfMi45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhMzk1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL2xpYnhtbC9saWJ4bWwyXzIuOS4yLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgbGlieG1sMi5pbmMKKworU1JDX1VSSSArPSAiaHR0cDovL3d3dy53My5vcmcvWE1ML1Rlc3QveG1sdHMyMDA4MDgyNy50YXIuZ3o7bmFtZT10ZXN0dGFyIFwKKyAgICAgICAgICAgIGZpbGU6Ly83MmE0NmE1MTljZTczMjZkOWEwMGYwYjZhN2YyYThlOTU4Y2QxNjc1LnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDEtdGhyZWFkcy1EZWZpbmUtcHRocmVhZC1kZWZpbml0aW9ucy1mb3ItZ2xpYmMtY29tcGxpYS5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW2xpYnRhci5tZDVzdW1dID0gIjllNmE5YWNhOWQxNTU3Mzc4NjhiM2RjNWZkODJmNzg4IgorU1JDX1VSSVtsaWJ0YXIuc2hhMjU2c3VtXSA9ICI1MTc4YzMwYjE1MWQwNDRhZWZiMWIwOGJmNTRjMzAwM2EwYWM1NWM1OWM4NjY3NjM5OTc1MjlkNjA3NzBkNWJjIgorU1JDX1VSSVt0ZXN0dGFyLm1kNXN1bV0gPSAiYWUzZDFlYmUwMDBhMzk3MmFmYTEwNGNhN2YwZTFiNGEiCitTUkNfVVJJW3Rlc3R0YXIuc2hhMjU2c3VtXSA9ICI5NjE1MTY4NWNlYzk5N2UxZjlmMzM4N2UzNjI2ZDYxZTYyODRkNGQ2ZTY2ZTBlNDQwYzIwOTI4NmMwM2U5Y2M3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL2J1aWxkdG9vbHMtdGFyYmFsbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA0MzRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9idWlsZHRvb2xzLXRhcmJhbGwuYmIKQEAgLTAsMCArMSw1OSBAQAorREVTQ1JJUFRJT04gPSAiU0RLIHR5cGUgdGFyZ2V0IGZvciBidWlsZGluZyBhIHN0YW5kYWxvbmUgdGFyYmFsbCBjb250YWluaW5nIHB5dGhvbiwgY2hycGF0aCwgbWFrZSwgZ2l0IGFuZCB0YXIuIFRoZSBcCisgICAgICAgICAgICAgICB0YXJiYWxsIGNhbiBiZSB1c2VkIHRvIHJ1biBiaXRiYWtlIGJ1aWxkcyBvbiBzeXN0ZW1zIHdoaWNoIGRvbid0IG1lZXQgdGhlIHVzdWFsIHZlcnNpb24gcmVxdWlyZW1lbnRzLiIKK1NVTU1BUlkgPSAiU3RhbmRhbG9uZSB0YXJiYWxsIGZvciBydW5uaW5nIGJ1aWxkcyBvbiBzeXN0ZW1zIHdpdGggaW5hZGVxdWF0ZSBzb2Z0d2FyZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA/PSAiIgorCitUT09MQ0hBSU5fSE9TVF9UQVNLID89ICJcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1jb3JlIFwKKyAgICBuYXRpdmVzZGstcHl0aG9uLW1vZHVsZXMgXAorICAgIG5hdGl2ZXNkay1weXRob24tbWlzYyBcCisgICAgbmF0aXZlc2RrLXB5dGhvbi1naXQgXAorICAgIG5hdGl2ZXNkay1weXRob24tcGV4cGVjdCBcCisgICAgbmF0aXZlc2RrLW5jdXJzZXMtdGVybWluZm8tYmFzZSBcCisgICAgbmF0aXZlc2RrLWNocnBhdGggXAorICAgIG5hdGl2ZXNkay10YXIgXAorICAgIG5hdGl2ZXNkay1idWlsZHRvb2xzLXBlcmwtZHVtbXkgXAorICAgIG5hdGl2ZXNkay1naXQgXAorICAgIG5hdGl2ZXNkay1naXQtcGVybHRvb2xzIFwKKyAgICBuYXRpdmVzZGstcGlneiBcCisgICAgbmF0aXZlc2RrLW1ha2UgXAorICAgIG5hdGl2ZXNkay13Z2V0IFwKKyAgICBuYXRpdmVzZGstY2EtY2VydGlmaWNhdGVzIFwKKyAgICAiCisKK1NES19QQUNLQUdFX0FSQ0hTID0rICJidWlsZHRvb2xzLWR1bW15LSR7U0RLUEtHU1VGRklYfSIKKworVE9PTENIQUlOX09VVFBVVE5BTUUgPz0gIiR7U0RLX05BTUV9LWJ1aWxkdG9vbHMtbmF0aXZlc2RrLXN0YW5kYWxvbmUtJHtESVNUUk9fVkVSU0lPTn0iCisKK1NES19USVRMRSA9ICJCdWlsZCB0b29scyIKKworUkRFUEVORFMgPSAiJHtUT09MQ0hBSU5fSE9TVF9UQVNLfSIKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCisKK2luaGVyaXQgbWV0YQoraW5oZXJpdCBwb3B1bGF0ZV9zZGsKK2luaGVyaXQgdG9vbGNoYWluLXNjcmlwdHMKKworY3JlYXRlX3Nka19maWxlc19hcHBlbmQgKCkgeworCXJtIC1mICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9zaXRlLWNvbmZpZy0qCisJcm0gLWYgJHtTREtfT1VUUFVUfS8ke1NES1BBVEh9L2Vudmlyb25tZW50LXNldHVwLSoKKwlybSAtZiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vdmVyc2lvbi0qCisKKwkjIEdlbmVyYXRlIG5ldyAobWluaSkgc2RrLWVudmlyb25tZW50LXNldHVwIGZpbGUKKwlzY3JpcHQ9JHsxOi0ke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vZW52aXJvbm1lbnQtc2V0dXAtJHtTREtfU1lTfX0KKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFBBVEg9JHtTREtQQVRITkFUSVZFfSR7YmluZGlyX25hdGl2ZXNka306JFBBVEgnID4+ICRzY3JpcHQKKwkjIEluIG9yZGVyIGZvciB0aGUgc2VsZi1leHRyYWN0aW9uIHNjcmlwdCB0byBjb3JyZWN0bHkgZXh0cmFjdCBhbmQgc2V0IHVwIHRoaW5ncywKKwkjIHdlIG5lZWQgYSAnT0VDT1JFX05BVElWRV9TWVNST09UPXh4eCcgbGluZSBpbiBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQuCisJIyBIb3dldmVyLCBidWlsZHRvb2xzLXRhcmJhbGwgaXMgaW5oZXJlbnRseSBhIHRvb2wgc2V0IGluc3RlYWQgb2YgYSBmdWxseSBmdW5jdGlvbmFsIFNESywKKwkjIHNvIGluc3RlYWQgb2YgZXhwb3J0aW5nIHRoZSB2YXJpYWJsZSwgd2UgdXNlIGEgY29tbWVudCBoZXJlLgorCWVjaG8gJyNPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiR7U0RLUEFUSE5BVElWRX0iJyA+PiAkc2NyaXB0CisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvbiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vdmVyc2lvbi0ke1NES19TWVN9CisKKwllY2hvICdleHBvcnQgR0lUX1NTTF9DQUlORk89IiR7U0RLUEFUSE5BVElWRX0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0IicgPj4kc2NyaXB0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtZW52aXJvbm1lbnQtZXh0c2RrLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LWV4dHNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU1OTYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LWV4dHNkay5iYgpAQCAtMCwwICsxLDEyIEBACisjIG1ldGEtZW52aXJvbm1lbnQgZm9yIGV4dGVuc2libGUgU0RLCisKK3JlcXVpcmUgbWV0YS1lbnZpcm9ubWVudC5iYgorCitQTiA9ICJtZXRhLWVudmlyb25tZW50LWV4dHNkay0ke01BQ0hJTkV9IgorCitjcmVhdGVfc2RrX2ZpbGVzX2FwcGVuZCgpIHsKKwlsb2NhbCBzeXNyb290PSR7U0RLUEFUSH0vJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9UQVJHRVQnLCBUcnVlKSwgZC5nZXRWYXIoJ1RPUERJUicsIFRydWUpKX0KKwlsb2NhbCBzZGtwYXRobmF0aXZlPSR7U0RLUEFUSH0vJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdTVEFHSU5HX0RJUl9OQVRJVkUnLFRydWUpLCBkLmdldFZhcignVE9QRElSJywgVHJ1ZSkpfQorCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfZW52X3NjcmlwdCAnJyAnJyAkc3lzcm9vdCAnJyAke2JpbmRpcl9uYXRpdmV9ICR7cHJlZml4X25hdGl2ZX0gJHNka3BhdGhuYXRpdmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1lbnZpcm9ubWVudC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWQ0NWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLWVudmlyb25tZW50LmJiCkBAIC0wLDAgKzEsNzUgQEAKK1NVTU1BUlkgPSAiUGFja2FnZSBvZiBlbnZpcm9ubWVudCBmaWxlcyBmb3IgU0RLIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI4IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworTU9ESUZZVE9TID0gIjAiCisKK1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVMgPSAiJHtUVU5FX1BLR0FSQ0h9JHtUQVJHRVRfVkVORE9SfS0ke1RBUkdFVF9PU30iCisKK2luaGVyaXQgdG9vbGNoYWluLXNjcmlwdHMKK1RPT0xDSEFJTl9ORUVEX0NPTkZJR1NJVEVfQ0FDSEVfYXBwZW5kID0gIiB6bGliIgorCitTREtfRElSID0gIiR7V09SS0RJUn0vc2RrIgorU0RLX09VVFBVVCA9ICIke1NES19ESVJ9L2ltYWdlIgorU0RLVEFSR0VUU1lTUk9PVCA9ICIke1NES1BBVEh9L3N5c3Jvb3RzLyR7UkVBTF9NVUxUSU1BQ0hfVEFSR0VUX1NZU30iCisKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4KKworZG9fZ2VuZXJhdGVfY29udGVudFtjbGVhbmRpcnNdID0gIiR7U0RLX09VVFBVVH0iCitkb19nZW5lcmF0ZV9jb250ZW50W2RpcnNdID0gIiR7U0RLX09VVFBVVH0vJHtTREtQQVRIfSIKK3B5dGhvbiBkb19nZW5lcmF0ZV9jb250ZW50KCkgeworICAgICMgSGFuZGxlIG11bHRpbGlicyBpbiB0aGUgU0RLIGVudmlyb25tZW50LCBzaXRlY29uZmlnLCBldGMgZmlsZXMuLi4KKyAgICBsb2NhbGRhdGEgPSBiYi5kYXRhLmNyZWF0ZUNvcHkoZCkKKworICAgICMgbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHRoZSBXT1JLRElSIHZhbHVlIGZyb20gJ2QnLCBvciBpdCBjYW4gY2hhbmdlCisgICAgbG9jYWxkYXRhLnNldFZhcignV09SS0RJUicsIGQuZ2V0VmFyKCdXT1JLRElSJywgVHJ1ZSkpCisKKyAgICAjIG1ha2Ugc3VyZSB3ZSBvbmx5IHVzZSB0aGUgU0RLVEFSR0VUU1lTUk9PVCB2YWx1ZSBmcm9tICdkJworICAgIGxvY2FsZGF0YS5zZXRWYXIoJ1NES1RBUkdFVFNZU1JPT1QnLCBkLmdldFZhcignU0RLVEFSR0VUU1lTUk9PVCcsIFRydWUpKQorICAgIGxvY2FsZGF0YS5zZXRWYXIoJ2xpYmRpcicsIGQuZ2V0VmFyKCd0YXJnZXRfbGliZGlyJywgRmFsc2UpKQorCisgICAgIyBQcm9jZXNzIERFRkFVTFRUVU5FCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCJjcmVhdGVfc2RrX2ZpbGVzIiwgbG9jYWxkYXRhKQorCisgICAgdmFyaWFudHMgPSBkLmdldFZhcigiTVVMVElMSUJfVkFSSUFOVFMiLCBUcnVlKSBvciAiIgorICAgIGZvciBpdGVtIGluIHZhcmlhbnRzLnNwbGl0KCk6CisgICAgICAgICMgTG9hZCBvdmVycmlkZXMgZnJvbSAnZCcgdG8gYXZvaWQgaGF2aW5nIHRvIHJlc2V0IHRoZSB2YWx1ZS4uLgorICAgICAgICBvdmVycmlkZXMgPSBkLmdldFZhcigiT1ZFUlJJREVTIiwgRmFsc2UpICsgIjp2aXJ0Y2xhc3MtbXVsdGlsaWItIiArIGl0ZW0KKyAgICAgICAgbG9jYWxkYXRhLnNldFZhcigiT1ZFUlJJREVTIiwgb3ZlcnJpZGVzKQorICAgICAgICBsb2NhbGRhdGEuc2V0VmFyKCJNTFBSRUZJWCIsIGl0ZW0gKyAiLSIpCisgICAgICAgIGJiLmRhdGEudXBkYXRlX2RhdGEobG9jYWxkYXRhKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoImNyZWF0ZV9zZGtfZmlsZXMiLCBsb2NhbGRhdGEpCit9CithZGR0YXNrIGdlbmVyYXRlX2NvbnRlbnQgYmVmb3JlIGRvX2luc3RhbGwgYWZ0ZXIgZG9fY29tcGlsZQorCitjcmVhdGVfc2RrX2ZpbGVzKCkgeworCSMgU2V0dXAgc2l0ZSBmaWxlIGZvciBleHRlcm5hbCB1c2UKKwl0b29sY2hhaW5fY3JlYXRlX3Nka19zaXRlY29uZmlnICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9zaXRlLWNvbmZpZy0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9CisKKwl0b29sY2hhaW5fY3JlYXRlX3Nka19lbnZfc2NyaXB0ICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9lbnZpcm9ubWVudC1zZXR1cC0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9CisKKwkjIEFkZCB2ZXJzaW9uIGluZm9ybWF0aW9uCisJdG9vbGNoYWluX2NyZWF0ZV9zZGtfdmVyc2lvbiAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0vdmVyc2lvbi0ke1JFQUxfTVVMVElNQUNIX1RBUkdFVF9TWVN9Cit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7U0RLUEFUSH0KKyAgICBpbnN0YWxsIC1tIDA2NDQgLXQgJHtEfS8ke1NES1BBVEh9ICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8qCit9CisKK1BOID0gIm1ldGEtZW52aXJvbm1lbnQtJHtNQUNISU5FfSIKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn09ICIgXAorICAgICR7U0RLUEFUSH0vKiBcCisgICAgIgorCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL21ldGEtaWRlLXN1cHBvcnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY5MjkxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS1pZGUtc3VwcG9ydC5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgc3VwcG9ydCIKK0RFU0NSSVBUSU9OID0gIk1ldGEgcGFja2FnZSBmb3IgZW5zdXJpbmcgdGhlIGJ1aWxkIGRpcmVjdG9yeSBjb250YWlucyBhbGwgYXBwcm9wcmlhdGUgdG9vbGNoYWluIHBhY2thZ2VzIGZvciB1c2luZyBhbiBJREUiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitERVBFTkRTID0gInZpcnR1YWwvbGliYyBnZGItY3Jvc3MtJHtUQVJHRVRfQVJDSH0gcWVtdS1uYXRpdmUgcWVtdS1oZWxwZXItbmF0aXZlIHVuZnMzLW5hdGl2ZSIKK1BSID0gInIzIgorCitpbmhlcml0IG1ldGEgdG9vbGNoYWluLXNjcmlwdHMKKworZG9fcG9wdWxhdGVfaWRlX3N1cHBvcnQgKCkgeworICB0b29sY2hhaW5fY3JlYXRlX3RyZWVfZW52X3NjcmlwdAorfQorCitkb19wb3B1bGF0ZV9pZGVfc3VwcG9ydFtub3N0YW1wXSA9ICIxIgorYWRkdGFzayBwb3B1bGF0ZV9pZGVfc3VwcG9ydCBiZWZvcmUgZG9fYnVpbGQgYWZ0ZXIgZG9faW5zdGFsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE5ZmQ4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvbWV0YS10b29sY2hhaW4uYmIKQEAgLTAsMCArMSw5IEBACitTVU1NQVJZID0gIk1ldGEgcGFja2FnZSBmb3IgYnVpbGRpbmcgYSBpbnN0YWxsYWJsZSB0b29sY2hhaW4iCitMSUNFTlNFID0gIk1JVCIKKworUFIgPSAicjciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitpbmhlcml0IHBvcHVsYXRlX3NkawpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9uYXRpdmVzZGstYnVpbGR0b29scy1wZXJsLWR1bW15LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NzFjM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9tZXRhL25hdGl2ZXNkay1idWlsZHRvb2xzLXBlcmwtZHVtbXkuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJEdW1teSBwYWNrYWdlIHdoaWNoIGVuc3VyZXMgcGVybCBpcyBleGNsdWRlZCBmcm9tIGJ1aWxkdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09NTU9OX0xJQ0VOU0VfRElSfS9NSVQ7bWQ1PTA4MzVhZGU2OThlMGJjZjg1MDZlY2RhMmY3YjRmMzAyIgorCitpbmhlcml0IG5hdGl2ZXNkaworCisjIFB1dCBpdCBzb21ld2hlcmUgc2VwYXJhdGUgdG8gZW5zdXJlIGl0J3MgbmV2ZXIgdXNlZCBleGNlcHQgd2hlbiB3ZSB3YW50IGl0CitQQUNLQUdFX0FSQ0ggPSAiYnVpbGR0b29scy1kdW1teS0ke1NES1BLR1NVRkZJWH0iCisKK1BFUkxQQUNLQUdFUyA9ICJuYXRpdmVzZGstcGVybCBcCisgICAgICAgICAgICAgICAgbmF0aXZlc2RrLXBlcmwtbW9kdWxlLWZpbGUtcGF0aCIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgZC5hcHBlbmRWYXIoJ1JQUk9WSURFU18ke1BOfScsICcke1BFUkxQQUNLQUdFU30nKQorICAgIGQuYXBwZW5kVmFyKCdSQ09ORkxJQ1RTXyR7UE59JywgJyR7UEVSTFBBQ0tBR0VTfScpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvcGFja2FnZS1pbmRleC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzQ2YjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS9wYWNrYWdlLWluZGV4LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiUmVidWlsZHMgdGhlIHBhY2thZ2UgaW5kZXgiCitMSUNFTlNFID0gIk1JVCIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK1BBQ0tBR0VTID0gIiIKKworZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZG9fdW5wYWNrW25vZXhlY10gPSAiMSIKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX2luc3RhbGxbbm9leGVjXSA9ICIxIgorZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlZGF0YVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltub2V4ZWNdID0gIjEiCitkb19wb3B1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworZG9fcGFja2FnZV9pbmRleFtub3N0YW1wXSA9ICIxIgorZG9fcGFja2FnZV9pbmRleFtkZXBlbmRzXSArPSAiJHtQQUNLQUdFSU5ERVhERVBTfSIKKworcHl0aG9uIGRvX3BhY2thZ2VfaW5kZXgoKSB7CisgICAgZnJvbSBvZS5yb290ZnMgaW1wb3J0IGdlbmVyYXRlX2luZGV4X2ZpbGVzCisgICAgZ2VuZXJhdGVfaW5kZXhfZmlsZXMoZCkKK30KK2FkZHRhc2sgZG9fcGFja2FnZV9pbmRleCBiZWZvcmUgZG9fYnVpbGQKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbWV0YS91bmluYXRpdmUtdGFyYmFsbC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFmNzkyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL21ldGEvdW5pbmF0aXZlLXRhcmJhbGwuYmIKQEAgLTAsMCArMSw1MCBAQAorU1VNTUFSWSA9ICJsaWJjIGFuZCBwYXRjaGVsZiB0YXJiYWxsIGZvciB1c2Ugd2l0aCB1bmluYXRpdmUuYmJjbGFzcyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1RPT0xDSEFJTl9UQVJHRVRfVEFTSyA9ICIiCisKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPSAiXAorICAgIG5hdGl2ZXNkay1nbGliYyBcCisgICAgbmF0aXZlc2RrLXBhdGNoZWxmIFwKKyAgICAiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1RPT0xDSEFJTl9PVVRQVVROQU1FID89ICIke0JVSUxEX0FSQ0h9LW5hdGl2ZXNkay1saWJjIgorCitSREVQRU5EUyA9ICIke1RPT0xDSEFJTl9IT1NUX1RBU0t9IgorCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKKworaW5oZXJpdCBtZXRhCitpbmhlcml0IHBvcHVsYXRlX3NkaworCitkZWx0YXNrIGluc3RhbGwKK2RlbHRhc2sgcGFja2FnZQorZGVsdGFzayBwYWNrYWdlZGF0YQorCitTREtfREVQRU5EUyArPSAicGF0Y2hlbGYtbmF0aXZlIgorCitTREtfUEFDS0FHSU5HX0ZVTkMgPSAiIgorCitmYWtlcm9vdCBjcmVhdGVfc2RrX2ZpbGVzKCkgeworCWNwICR7Q09SRUJBU0V9L3NjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS8KKworCSMgUmVwbGFjZSB0aGUgIyNERUZBVUxUX0lOU1RBTExfRElSIyMgd2l0aCB0aGUgY29ycmVjdCBwYXR0ZXJuLgorCSMgRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlICcrJyBhbmQgJy4nIGluIHRoZSBTREtQQVRICisJZXNjYXBlZF9zZGtwYXRoPSQoZWNobyAke1NES1BBVEh9L3N5c3Jvb3RzLyR7U0RLX1NZU30gfHNlZCAtZSAiczpbXCtcLl06XFxcXFxcXFxcMDpnIikKKwlzZWQgLWkgLWUgInM6IyNERUZBVUxUX0lOU1RBTExfRElSIyM6JGVzY2FwZWRfc2RrcGF0aDoiICR7U0RLX09VVFBVVH0vJHtTREtQQVRIfS9yZWxvY2F0ZV9zZGsucHkKK30KKworCitmYWtlcm9vdCB0YXJfc2RrKCkgeworCW1rZGlyIC1wICR7U0RLX0RFUExPWX0KKwljZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSH0KKwltdiBzeXNyb290cy8ke1NES19TWVN9IC4vJHtCVUlMRF9TWVN9CisJcm0gc3lzcm9vdHMgLXJmCisJcGF0Y2hlbGYgLS1zZXQtaW50ZXJwcmV0ZXIgJHtAJycuam9pbignYScgZm9yIG4gaW4geHJhbmdlKDEwMjQpKX0gLi8ke0JVSUxEX1NZU30vdXNyL2Jpbi9wYXRjaGVsZgorCW12IC4vJHtCVUlMRF9TWVN9L3Vzci9iaW4vcGF0Y2hlbGYgLi8ke0JVSUxEX1NZU30vdXNyL2Jpbi9wYXRjaGVsZi11bmluYXRpdmUKKwl0YXIgJHtTREtUQVJPUFRTfSAtYyAtaiAtLWZpbGU9JHtTREtfREVQTE9ZfS8ke1RPT0xDSEFJTl9PVVRQVVROQU1FfS50YXIuYnoyIC4KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvY29uZmlnLmNhY2hlIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLTUuOS9jb25maWcuY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5MjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvY29uZmlnLmNhY2hlCkBAIC0wLDAgKzEsNCBAQAorIyEgL2Jpbi9zaAorCitjZl9jdl9mdW5jX25hbm9zbGVlcD15ZXMKK2NmX2N2X2Z1bmNfbWtzdGVtcD15ZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlcy01LjkvdGljLWhhbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L3RpYy1oYW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTg5ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMtNS45L3RpYy1oYW5nLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworJ3RpYycgb2Ygc29tZSBsaW51eCBkaXN0cmlidXRpb25zIChlLmcuIGZlZG9yYSAxMSkgaGFuZyBpbiBhbiBpbmZpbml0ZQorbG9vcCB3aGVuIHByb2Nlc3NpbmcgdGhlIG9yaWdpbmFsIGZpbGUuCisKK0luZGV4OiBuY3Vyc2VzLTUuNy9taXNjL3Rlcm1pbmZvLnNyYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5jdXJzZXMtNS43Lm9yaWcvbWlzYy90ZXJtaW5mby5zcmMKKysrKyBuY3Vyc2VzLTUuNy9taXNjL3Rlcm1pbmZvLnNyYworQEAgLTM3MDYsMTIgKzM3MDYsMTEgQEAga29uc29sZS14ZjN4fEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIGtleQorICMgVGhlIHZhbHVlIGZvciBrYnMgcmVmbGVjdHMgbG9jYWwgY3VzdG9taXphdGlvbiByYXRoZXIgdGhhbiB0aGUgc2V0dGluZ3MgdXNlZAorICMgZm9yIFhGcmVlODYgeHRlcm0uCisga29uc29sZS14ZjR4fEtERSBjb25zb2xlIHdpbmRvdyB3aXRoIGtleWJvYXJkIGZvciBYRnJlZTg2IDQueCB4dGVybSwKKy0Ja2VuZD1cRU9GLCBraG9tZT1cRU9ILCB1c2U9a29uc29sZStwY2ZrZXlzLAorLQl1c2U9a29uc29sZS12dDEwMCwKKy0jIEtvbnNvbGUgZG9lcyBub3QgaW1wbGVtZW50IHNoaWZ0ZWQgY3Vyc29yLWtleXMuCista29uc29sZStwY2ZrZXlzfGtvbnNvbGUgc3Vic2V0IG9mIHh0ZXJtK3BjZmtleXMsCistCWtMRlRALCBrUklUQCwga2NidD1cRVtaLCBraW5kQCwga3JpQCwga0ROQCwga1VQQCwgdXNlPXh0ZXJtK3BjYzIsCistCXVzZT14dGVybStwY2YwLAorKwlrZW5kPVxFT0YsIGtmMT1cRU9QLCBrZjEzPVxFTzJQLCBrZjE0PVxFTzJRLCBrZjE1PVxFTzJSLAorKwlrZjE2PVxFTzJTLCBrZjE3PVxFWzE1OzJ+LCBrZjE4PVxFWzE3OzJ+LCBrZjE5PVxFWzE4OzJ+LAorKwlrZjI9XEVPUSwga2YyMD1cRVsxOTsyfiwga2YyMT1cRVsyMDsyfiwga2YyMj1cRVsyMTsyfiwKKysJa2YyMz1cRVsyMzsyfiwga2YyND1cRVsyNDsyfiwga2YzPVxFT1IsIGtmND1cRU9TLAorKwlraG9tZT1cRU9ILCB1c2U9a29uc29sZS12dDEwMCwKKyAjIEtERSdzICJ2dDEwMCIga2V5Ym9hcmQgaGFzIG5vIHJlbGF0aW9uc2hpcCB0byBhbnkgdGVybWluYWwgdGhhdCBERUMgbWFkZSwgYnV0CisgIyBpdCBpcyBzdGlsbCB1c2VmdWwgZm9yIGRlcml2aW5nIHRoZSBvdGhlciBlbnRyaWVzLgorIGtvbnNvbGUtdnQxMDB8S0RFIGNvbnNvbGUgd2luZG93IHdpdGggdnQxMDAgKHNpYykga2V5Ym9hcmQsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL25jdXJzZXMuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ4MGVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzLmluYwpAQCAtMCwwICsxLDMwNiBAQAorU1VNTUFSWSA9ICJUaGUgTmV3IEN1cnNlcyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiU1ZyNCBhbmQgWFNJLUN1cnNlcyBjb21wYXRpYmxlIGN1cnNlcyBsaWJyYXJ5IGFuZCB0ZXJtaW5mbyB0b29scyBpbmNsdWRpbmcgdGljLCBpbmZvY21wLCBjYXB0b2luZm8uIFN1cHBvcnRzIGNvbG9yLCBtdWx0aXBsZSBoaWdobGlnaHRzLCBmb3Jtcy1kcmF3aW5nIGNoYXJhY3RlcnMsIGFuZCBhdXRvbWF0aWMgcmVjb2duaXRpb24gb2Yga2V5cGFkIGFuZCBmdW5jdGlvbi1rZXkgc2VxdWVuY2VzLiBFeHRlbnNpb25zIGluY2x1ZGUgcmVzaXphYmxlIHdpbmRvd3MgYW5kIG1vdXNlIHN1cHBvcnQgb24gYm90aCB4dGVybSBhbmQgTGludXggY29uc29sZSB1c2luZyB0aGUgZ3BtIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL25jdXJzZXMvbmN1cnNlcy5odG1sIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9uY3Vyc2VzL2Jhc2UvdmVyc2lvbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PWNiYzE4MGE4YzQ0Y2E2NDJlOTdjMzU0NTJmYWI1ZjY2IgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJuY3Vyc2VzLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0lOQ19QUiA9ICJyMTUiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbmN1cnNlcy1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIgcGtnY29uZmlnCisKKyMgVXBzdHJlYW0gaGFzIHVzZWZ1bCBwYXRjaGVzIGF0IHRpbWVzIGF0IGZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvCitTUkNfVVJJID0gImZ0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0LyR7QlBOfS9jdXJyZW50LyR7QlB9LSR7UkVWSVNJT059LnRneiIKKworRVhUUkFfQVVUT1JFQ09ORiA9ICItSSBtNCIKK0NPTkZJR19TSVRFID0rICIke1dPUktESVJ9L2NvbmZpZy5jYWNoZSIKKworIyBXaGV0aGVyIHRvIGVuYWJsZSBzZXBhcmF0ZSB3aWRlYyBsaWJyYXJpZXM7IG11c3QgYmUgJ3RydWUnIG9yICdmYWxzZScKKyMKKyMgVE9ETzogcmVtb3ZlIHRoaXMgdmFyaWFibGUgd2hlbiB3aWRlYyBpcyBzdXBwb3J0ZWQgaW4gZXZlcnkgc2V0dXA/CitFTkFCTEVfV0lERUMgPz0gInRydWUiCisKKyMgX0dOVV9TT1VSQ0UgaXMgcmVxdWlyZWQgZm9yIHdpZGVjIHN0dWZmIGFuZCBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5CisjIGZvciB0YXJnZXQgb2JqZWN0cy4gIEJ1dCBpdCBtdXN0IGJlIHNldCBtYW51YWxseSBmb3IgbmF0aXZlIGFuZCBzZGsKKyMgYnVpbGRzLgorQlVJTERfQ1BQRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCisKKyMgbmF0aXZlcyBkb24ndCBnZW5lcmFsbHkgbG9vayBpbiBiYXNlX2xpYmRpcgorYmFzZV9saWJkaXJfY2xhc3MtbmF0aXZlID0gIiR7bGliZGlyfSIKKworIyBEaXNwbGF5IGNvcnJ1cHRpb24gb2NjdXJzIG9uIDY0IGJpdCBob3N0cyB3aXRob3V0IHRoZXNlIHNldHRpbmdzCisjIFRoaXMgd2FzIGRlcnJpdmVkIGZyb20gdGhlIHVwc3RyZWFtIGRlYmlhbiBuY3Vyc2VzIHdoaWNoIHVzZXMKKyMgdGhlc2Ugc2V0dGluZ3MgZm9yIDMyIGFuZCA2NCBiaXQgaG9zdHMuCitFWENPTkZJR19BUkdTID0gIiIKK0VYQ09ORklHX0FSR1NfY2xhc3MtbmF0aXZlID0gIiBcCisJCS0tZGlzYWJsZS1scDY0IFwKKwkJLS13aXRoLWNodHlwZT0nbG9uZycgXAorCQktLXdpdGgtbW1hc2stdD0nbG9uZyciCitFWENPTkZJR19BUkdTX2NsYXNzLW5hdGl2ZXNkayA9ICIgXAorCQktLWRpc2FibGUtbHA2NCBcCisJCS0td2l0aC1jaHR5cGU9J2xvbmcnIFwKKwkJLS13aXRoLW1tYXNrLXQ9J2xvbmcnIgorCitQQUNLQUdFU19EWU5BTUlDID0gIl4ke1BOfS1saWIuKiIKKworIyBGYWxsIGJhY2sgdG8gdGhlIGhvc3QgdGVybWNhcCAvIHRlcm1pbmZvIGZvciAtbmF0aXZlc2RrIGFuZCAtbmF0aXZlCisjIFRoZSByZWFsaXR5IGlzIGEgd29yayBhcm91bmQgZm9yIHN0cmFuZ2UgcHJvYmxlbXMgd2l0aCB0aGluZ3MgbGlrZQorIyAiYml0YmFrZSAtYyBtZW51Y29uZmlnIGJ1c3lib3giIHdoZXJlIGl0IGNhbm5vdCBmaW5kIHRoZSB0ZXJtaW5mbworIyBiZWNhdXNlIHRoZSBzc3RhdGUgaGFkIGEgaGFyZCBjb2RlZCBzZWFyY2ggcGF0aC4gIFVudGlsIHRoaXMgaXMgZml4ZWQKKyMgYW5vdGhlciB3YXkgdGhpcyBpcyBkZWVtZWQgZ29vZCBlbm91Z2guCitFWF9URVJNQ0FQID0gIiIKK0VYX1RFUk1DQVBfY2xhc3MtbmF0aXZlID0gIjovZXRjL3Rlcm1jYXA6L3Vzci9zaGFyZS9taXNjL3Rlcm1jYXAiCitFWF9URVJNQ0FQX2NsYXNzLW5hdGl2ZXNkayA9ICI6L2V0Yy90ZXJtY2FwOi91c3Ivc2hhcmUvbWlzYy90ZXJtY2FwIgorRVhfVEVSTUlORk8gPSAiIgorRVhfVEVSTUlORk9fY2xhc3MtbmF0aXZlID0gIjovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8iCitFWF9URVJNSU5GT19jbGFzcy1uYXRpdmVzZGsgPSAiOi9ldGMvdGVybWluZm86L3Vzci9zaGFyZS90ZXJtaW5mbzovdXNyL3NoYXJlL21pc2MvdGVybWluZm86L2xpYi90ZXJtaW5mbyIKKworIyBIZWxwZXIgZnVuY3Rpb24gZm9yIGRvX2NvbmZpZ3VyZSB0byBhbGxvdyBtdWx0aXBsZSBjb25maWd1cmF0aW9ucworIyAkMSB0aGUgZGlyZWN0b3J5IHRvIHJ1biBjb25maWd1cmUgaW4KKyMgJEAgdGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIGNvbmZpZ3VyZQorbmN1cnNlc19jb25maWd1cmUoKSB7CisJbWtkaXIgLXAgJDEKKwljZCAkMQorCXNoaWZ0CisJb2VfcnVuY29uZiBcCisJICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKKwkgICAgICAgIC0td2l0aG91dC1kZWJ1ZyBcCisJICAgICAgICAtLXdpdGhvdXQtYWRhIFwKKwkgICAgICAgIC0td2l0aG91dC1ncG0gXAorCSAgICAgICAgLS1lbmFibGUtaGFyZC10YWJzIFwKKwkgICAgICAgIC0tZW5hYmxlLXhtYy1nbGl0Y2ggXAorCSAgICAgICAgLS1lbmFibGUtY29sb3JmZ2JnIFwKKwkgICAgICAgIC0td2l0aC10ZXJtcGF0aD0nJHtzeXNjb25mZGlyfS90ZXJtY2FwOiR7ZGF0YWRpcn0vbWlzYy90ZXJtY2FwJHtFWF9URVJNQ0FQfScgXAorCSAgICAgICAgLS13aXRoLXRlcm1pbmZvLWRpcnM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86JHtkYXRhZGlyfS90ZXJtaW5mbyR7RVhfVEVSTUlORk99JyBcCisJICAgICAgICAtLXdpdGgtc2hhcmVkIFwKKwkgICAgICAgIC0tZGlzYWJsZS1iaWctY29yZSBcCisJICAgICAgICAtLXByb2dyYW0tcHJlZml4PSBcCisJICAgICAgICAtLXdpdGgtdGljbGliIFwKKwkgICAgICAgIC0td2l0aC10ZXJtbGliPXRpbmZvIFwKKwkgICAgICAgIC0tZW5hYmxlLXNpZ3dpbmNoIFwKKwkgICAgICAgIC0tZW5hYmxlLXBjLWZpbGVzIFwKKwkgICAgICAgIC0tZGlzYWJsZS1ycGF0aC1oYWNrIFwKKwkJJHtFWENPTkZJR19BUkdTfSBcCisJICAgICAgICAtLXdpdGgtbWFucGFnZS1mb3JtYXQ9bm9ybWFsIFwKKwkgICAgICAgICIkQCIgfHwgcmV0dXJuIDEKKwljZCAuLgorfQorCisjIE92ZXJyaWRlIHRoZSBmdW5jdGlvbiBmcm9tIHRoZSBhdXRvdG9vbHMgY2xhc3M7IG5jdXJzZXMgcmVxdWlyZXMgYQorIyBwYXRjaGVkIGF1dG9jb25mMjEzIHRvIGdlbmVyYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0LiBUaGlzIGF1dG9jb25mCisjIGlzIG5vdCBhdmFpbGFibGUgc28gdGhhdCB0aGUgc2hpcHBlZCBzY3JpcHQgd2lsbCBiZSB1c2VkLgorZG9fY29uZmlndXJlKCkgeworICAgICAgICAjIGNoZWNrIGRvZXMgbm90IHdvcmsgd2l0aCBjcm9zcy1jb21waWxpbmcgYW5kIGlzIGdlbmVyYWxseQorICAgICAgICAjIGJyb2tlbiBiZWNhdXNlIGl0IHJlcXVpcmVzIHN0ZGluIHRvIGJlIHBvbGxhYmxlICh3aGljaCBpcworICAgICAgICAjIG5vdCB0aGUgY2FzZSBmb3IgL2Rldi9udWxsIHJlZGlyZWN0aW9ucykKKyAgICAgICAgZXhwb3J0IGNmX2N2X3dvcmtpbmdfcG9sbD15ZXMKKwkjUmVtb3ZlICR7aW5jbHVkZWRpcn0gZnJvbSBDUFBGTEFHUywgbmVlZCBmb3IgY3Jvc3MgY29tcGlsZQorCXNlZCAtaSAncyMtSSR7Y2ZfaW5jbHVkZWRpcn0jI2cnICR7U30vY29uZmlndXJlIHx8IGRpZSAic2VkIENQUEZMQUdTIgorCisJIyBUaGUgLS1lbmFibGUtcGMtZmlsZXMgcmVxdWlyZXMgUEtHX0NPTkZJR19MSUJESVIgZXhpc3RlZAorCW1rZGlyIC1wICR7UEtHX0NPTkZJR19MSUJESVJ9CisJKCBjZCAke1N9OyBnbnUtY29uZmlnaXplIC0tZm9yY2UgKQorCW5jdXJzZXNfY29uZmlndXJlICJuYXJyb3djIiB8fCBcCisJCXJldHVybiAxCisJISAke0VOQUJMRV9XSURFQ30gfHwgXAorCQluY3Vyc2VzX2NvbmZpZ3VyZSAid2lkZWMiICItLWVuYWJsZS13aWRlYyIgIi0td2l0aG91dC1wcm9ncyIKKworfQorCitkb19jb21waWxlKCkgeworICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MgbGlicworICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MvcHJvZ3MKKworICAgICAgICAhICR7RU5BQkxFX1dJREVDfSB8fCBcCisgICAgICAgICAgICBvZV9ydW5tYWtlIC1DIHdpZGVjIGxpYnMKK30KKworIyBzZXQgb2YgZXhwZWN0ZWQgZGlmZmVyZW5jZXMgYmV0d2VlbiBuYXJyb3djIGFuZCB3aWRlYyBoZWFkZXIKKyMKKyMgVE9ETzogdGhlIE5DVVJTRVNfQ0hfVCBkaWZmZXJlbmNlIGNhbiBjYXVzZSByZWFsIHByb2JsZW1zIDooCitfdW5pZmRlZl9jbGVhbnVwID0gIiBcCisgIC1lICdcIS9cKiBcJElkOiBjdXJzZXMud2lkZSx2ISxcIS9cKiBcJElkOiBjdXJzZXMudGFpbCx2IWQnIFwKKyAgLWUgJy9eI2RlZmluZSBOQ1VSU0VTX0NIX1QgL2QnIFwKKyAgLWUgJy9eI2luY2x1ZGUgPHdjaGFyLmg+L2QnIFwKKyAgLWUgJ1whXi9cKiAuKiBcKi8hZCcgXAorIgorCitkb190ZXN0W2RlcGVuZHNdID0gInVuaWZkZWYtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCitkb190ZXN0W2RpcnNdID0gIiR7U30iCitkb190ZXN0KCkgeworICAgICAgICAke0VOQUJMRV9XSURFQ30gfHwgcmV0dXJuIDAKKworICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSBuYXJyb3cgYW5kIHdpZGVjIGhlYWRlciBhcmUgY29tcGF0aWJsZQorICAgICAgICAjIGFuZCBkaWZmZXIgb25seSBpbiBtaW5vciBkZXRhaWxzLgorICAgICAgICB1bmlmZGVmIC1rIG5hcnJvd2MvaW5jbHVkZS9jdXJzZXMuaCB8IFwKKyAgICAgICAgICAgIHNlZCAke191bmlmZGVmX2NsZWFudXB9ID4gY3Vyc2VzLW5hcnJvd2MuaAorICAgICAgICB1bmlmZGVmIC1rIHdpZGVjL2luY2x1ZGUvY3Vyc2VzLmggfCBcCisgICAgICAgICAgICBzZWQgJHtfdW5pZmRlZl9jbGVhbnVwfSA+IGN1cnNlcy13aWRlYy5oCisKKyAgICAgICAgZGlmZiBjdXJzZXMtbmFycm93Yy5oIGN1cnNlcy13aWRlYy5oCit9CisKKyMgU3BsaXQgb3JpZ2luYWwgX2luc3RhbGxfb3B0cyB0byB0d28gcGFydHMuCisjIE9uZSBpcyB0aGUgb3B0aW9ucyB0byBpbnN0YWxsIGNvbnRlbnRzLCB0aGUgb3RoZXIgaXMgdGhlIHBhcmFtZXRlcnMgXAorIyB3aGVuIHJ1bm5pbmcgY29tbWFuZCAibWFrZSBpbnN0YWxsIgorX2luc3RhbGxfb3B0cyA9ICJcCisgIGluc3RhbGwubGlicyBpbnN0YWxsLmluY2x1ZGVzIGluc3RhbGwubWFuIFwKKyIKK19pbnN0YWxsX2NmZ3MgPSAiXAorICBERVNURElSPScke0R9JyBcCisgIFBLR19DT05GSUdfTElCRElSPScke2xpYmRpcn0vcGtnY29uZmlnJyBcCisiCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgICMgT3JkZXIgb2YgaW5zdGFsbGF0aW9uIGlzIGltcG9ydGFudDsgd2lkZWMgaW5zdGFsbHMgYSAnY3Vyc2VzLmgnCisgICAgICAgICMgaGVhZGVyIHdpdGggbW9yZSBkZWZpbml0aW9ucyBhbmQgbXVzdCBiZSBpbnN0YWxsZWQgbGFzdCBoZW5jZS4KKyAgICAgICAgIyBDb21wYXRpYmlsaXR5IG9mIHRoZXNlIGhlYWRlcnMgd2lsbCBiZSBjaGVja2VkIGluICdkb190ZXN0KCknLgorICAgICAgICBvZV9ydW5tYWtlIC1DIG5hcnJvd2MgJHtfaW5zdGFsbF9jZmdzfSAke19pbnN0YWxsX29wdHN9IFwKKyAgICAgICAgICAgICAgICBpbnN0YWxsLnByb2dzCisKKyAgICAgICAgIyBUaGUgaW5zdGFsbC5kYXRhIHNob3VsZCBydW4gYWZ0ZXIgaW5zdGFsbC5saWJzLCBvdGhlcndpc2UKKyAgICAgICAgIyB0aGVyZSB3b3VsZCBiZSBhIHJhY2UgaXNzdWUgaW4gYSB2ZXJ5IGNyaXRpY2FsIGNvbmRpdG9uLCBzaW5jZQorICAgICAgICAjIHRpYyB3aWxsIGJlIHJ1biBieSBpbnN0YWxsLmRhdGEsIGFuZCB0aWMgbmVlZHMgbGlidGluZm8uc28KKyAgICAgICAgIyB3aGljaCB3b3VsZCBiZSByZWdlbmVyYXRlZCBieSBpbnN0YWxsLmxpYnMuCisgICAgICAgIG9lX3J1bm1ha2UgLUMgbmFycm93YyAke19pbnN0YWxsX2NmZ3N9IFwKKyAgICAgICAgICAgICAgICBpbnN0YWxsLmRhdGEKKworCisgICAgICAgICEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKyAgICAgICAgICAgIG9lX3J1bm1ha2UgLUMgd2lkZWMgJHtfaW5zdGFsbF9jZmdzfSAke19pbnN0YWxsX29wdHN9CisKKyAgICAgICAgY2QgbmFycm93YworCisgICAgICAgICMgaW5jbHVkZSBzb21lIGJhc2ljIHRlcm1pbmZvIGZpbGVzCisgICAgICAgICMgc3RvbGVuIDspIGZyb20gZ2VudG9vIGFuZCBtb2RpZmllZCBhIGJpdAorICAgICAgICBmb3IgeCBpbiBhbnNpIGNvbnNvbGUgZHVtYiBsaW51eCByeHZ0IHNjcmVlbiBzY3JlZW4tMjU2Y29sb3Igc3VuIHZ0NTIgdnQxMDAgdnQxMDIgdnQyMDAgdnQyMjAgeHRlcm0tY29sb3IgeHRlcm0teGZyZWU4NiB4dGVybS0yNTZjb2xvcgorICAgICAgICBkbworICAgICAgICAgICAgICAgIGxvY2FsIHRlcm1maWxlPSIkKGZpbmQgIiR7RH0ke2RhdGFkaXJ9L3Rlcm1pbmZvLyIgLW5hbWUgIiR7eH0iIDI+L2Rldi9udWxsKSIKKyAgICAgICAgICAgICAgICBsb2NhbCBiYXNlZGlyPSIkKGJhc2VuYW1lICQoZGlybmFtZSAiJHt0ZXJtZmlsZX0iKSkiCisKKyAgICAgICAgICAgICAgICBpZiBbIC1uICIke3Rlcm1maWxlfSIgXQorICAgICAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdGVybWluZm8vJHtiYXNlZGlyfQorICAgICAgICAgICAgICAgICAgICAgICAgbXYgJHt0ZXJtZmlsZX0gJHtEfSR7c3lzY29uZmRpcn0vdGVybWluZm8vJHtiYXNlZGlyfS8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxuIC1zIC9ldGMvdGVybWluZm8vJHtiYXNlZGlyfS8ke3h9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtEfSR7ZGF0YWRpcn0vdGVybWluZm8vJHtiYXNlZGlyfS8ke3h9CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICAjIGkgdGhpbmsgd2UgY2FuIHVzZSB4dGVybS1jb2xvciBhcyBkZWZhdWx0IHh0ZXJtCisgICAgICAgIGlmIFsgLWUgJHtEfSR7c3lzY29uZmRpcn0vdGVybWluZm8veC94dGVybS1jb2xvciBdCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBsbiAtc2YgeHRlcm0tY29sb3IgJHtEfSR7c3lzY29uZmRpcn0vdGVybWluZm8veC94dGVybQorICAgICAgICBmaQorCisgICAgICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vdGVybWluZm8KKworICAgICAgICAjIGNyZWF0ZSBsaW5rZXIgc2NyaXB0cyBmb3IgbGliY3Vyc2VzLnNvIGFuZCBsaWJuY3Vyc2VzIHRvCisgICAgICAgICMgbGluayBhZ2FpbnN0IC1sdGluZm8gd2hlbiBuZWVkZWQuIFNvbWUgYnVpbGRzIG1pZ2h0IGJyZWFrCisgICAgICAgICMgZWxzZSB3aGVuICctV2wsLS1uby1jb3B5LWR0LW5lZWRlZC1lbnRyaWVzJyBoYXMgYmVlbiBzZXQgaW4KKyAgICAgICAgIyBsaW5rZXIgZmxhZ3MuCisgICAgICAgIGZvciBpIGluIGxpYm5jdXJzZXMgbGlibmN1cnNlc3c7IGRvCisgICAgICAgICAgICAgICAgZj0ke0R9JHtsaWJkaXJ9LyRpLnNvCisgICAgICAgICAgICAgICAgdGVzdCAtaCAkZiB8fCBjb250aW51ZQorICAgICAgICAgICAgICAgIHJtIC1mICRmCisgICAgICAgICAgICAgICAgZWNobyAnLyogR05VIGxkIHNjcmlwdCAqLycgID4kZgorICAgICAgICAgICAgICAgIGVjaG8gIklOUFVUKCRpLnNvLjUgQVNfTkVFREVEKC1sdGluZm8pKSIgPj4kZgorICAgICAgICBkb25lCisKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBsaWJjdXJzZXMgaXMgbGlua2VkIHNvIHRoYXQgaXQgZ2V0cyAtbHRpbmZvCisgICAgICAgICMgYWxzbywgdGhpcyBzaG91bGQgYmUgYWRkcmVzc2VkIHVwc3RyZWFtIHJlYWxseS4KKyAgICAgICAgbG4gLXNmIGxpYm5jdXJzZXMuc28gJHtEfSR7bGliZGlyfS9saWJjdXJzZXMuc28KKworICAgICAgICAjIGNyZWF0ZSBsaWJ0ZXJtY2FwLnNvIGxpbmtlciBzY3JpcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAgICAgICAgZj0ke0R9JHtsaWJkaXJ9L2xpYnRlcm1jYXAuc28KKyAgICAgICAgZWNobyAnLyogR05VIGxkIHNjcmlwdCAqLycgPiRmCisgICAgICAgIGVjaG8gJ0lOUFVUKEFTX05FRURFRCgtbHRpbmZvKSknID4+JGYKKworICAgICAgICBpZiBbICEgLWQgIiR7RH0ke2Jhc2VfbGliZGlyfSIgXTsgdGhlbgorICAgICAgICAgICAgIyBTZXR0aW5nIGJhc2VfbGliZGlyIHRvIGxpYmRpciBhcyBpcyBkb25lIGluIHRoZSAtbmF0aXZlCisgICAgICAgICAgICAjIGNhc2Ugd2lsbCBza2lwIHRoaXMgY29kZQorICAgICAgICAgICAgbWtkaXIgJHtEfSR7YmFzZV9saWJkaXJ9CisgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L2xpYm5jdXJzZXMuc28uKiAke0R9JHtiYXNlX2xpYmRpcn0KKyAgICAgICAgICAgICEgJHtFTkFCTEVfV0lERUN9IHx8IFwKKyAgICAgICAgICAgICAgICBtdiAke0R9JHtsaWJkaXJ9L2xpYm5jdXJzZXN3LnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9CisKKyAgICAgICAgICAgIG12ICR7RH0ke2xpYmRpcn0vbGlidGluZm8uc28uKiAke0R9JHtiYXNlX2xpYmRpcn0KKyAgICAgICAgICAgIHJtICR7RH0ke2xpYmRpcn0vbGlidGluZm8uc28KKworICAgICAgICAgICAgIyBVc2UgbG5yIHRvIGVuc3VyZSB0aGlzIGlzIGEgcmVsYXRpdmUgbGluayBkZXNwaXRlIGFic29sdXRlIHBhdGhzCisgICAgICAgICAgICAjIChhcyB3ZSBjYW4ndCBrbm93IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBiYXNlX2xpYmRpciBhbmQgbGliZGlyKS4KKyAgICAgICAgICAgICMgQXQgc29tZSBwb2ludCB3ZSBjYW4gcmVseSBvbiBjb3JldXRpbHMgOC4xNiB3aGljaCBoYXMgbG4gLXIuCisgICAgICAgICAgICBsbnIgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYnRpbmZvLnNvLjUgJHtEfSR7bGliZGlyfS9saWJ0aW5mby5zbworICAgICAgICBmaQorICAgICAgICBpZiBbIC1kICIke0R9JHtpbmNsdWRlZGlyfS9uY3Vyc2VzIiBdOyB0aGVuCisgICAgICAgICAgICBmb3IgZiBpbiBgZmluZCAke0R9JHtpbmNsdWRlZGlyfS9uY3Vyc2VzIC1uYW1lICIqLmgiYAorICAgICAgICAgICAgZG8KKwkgICAgICAgIGY9YGJhc2VuYW1lICRmYAorCSAgICAgICAgdGVzdCAtZSAke0R9JHtpbmNsdWRlZGlyfS8kZiAmJiBjb250aW51ZQorICAgICAgICAgICAgICAgIGxuIC1zZiBuY3Vyc2VzLyRmICR7RH0ke2luY2x1ZGVkaXJ9LyRmCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisgICAgICAgIG9lX211bHRpbGliX2hlYWRlciBjdXJzZXMuaAorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgbGliZGlyID0gZC5leHBhbmQoIiR7bGliZGlyfSIpCisgICAgYmFzZV9saWJkaXIgPSBkLmV4cGFuZCgiJHtiYXNlX2xpYmRpcn0iKQorICAgIHBuYmFzZSA9IGQuZXhwYW5kKCIke1BOfS1saWIlcyIpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnXmxpYiguKilcLnNvXC4uKicsIHBuYmFzZSwgJ25jdXJzZXMgJXMgbGlicmFyeScsIHByZXBlbmQ9VHJ1ZSwgZXh0cmFfZGVwZW5kcyA9ICcnLCBhbGxvd19saW5rcz1UcnVlKQorICAgIGlmIGxpYmRpciBpcyBub3QgYmFzZV9saWJkaXI6CisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGJhc2VfbGliZGlyLCAnXmxpYiguKilcLnNvXC4uKicsIHBuYmFzZSwgJ25jdXJzZXMgJXMgbGlicmFyeScsIHByZXBlbmQ9VHJ1ZSwgZXh0cmFfZGVwZW5kcyA9ICcnLCBhbGxvd19saW5rcz1UcnVlKQorfQorCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFX25jdXJzZXMtdG9vbHNfY2xhc3MtdGFyZ2V0ID0gImNsZWFyIHJlc2V0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VTICs9ICIgXAorICAke1BOfS10b29scyBcCisgICR7UE59LXRlcm1pbmZvIFwKKyAgJHtQTn0tdGVybWluZm8tYmFzZSBcCisiCisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgJHtiaW5kaXJ9L3RwdXQgXAorICAke2JpbmRpcn0vdHNldCBcCisgICR7YmluZGlyfS9uY3Vyc2VzNS1jb25maWcgXAorICAke2JpbmRpcn0vbmN1cnNlc3c1LWNvbmZpZyBcCisgICR7ZGF0YWRpcn0vdGFic2V0IFwKKyIKKworIyBUaGlzIGtlZXBzIG9ubHkgdHB1dC90c2V0IGluIG5jdXJzZXMKKyMgY2xlYXIvcmVzZXQgYXJlIGluIGFscmVhZHkgYnVzeWJveAorRklMRVNfJHtQTn0tdG9vbHMgPSAiXAorICAke2JpbmRpcn0vdGljIFwKKyAgJHtiaW5kaXJ9L3RvZSBcCisgICR7YmluZGlyfS9pbmZvdG9jYXAgXAorICAke2JpbmRpcn0vY2FwdG9pbmZvIFwKKyAgJHtiaW5kaXJ9L2luZm9jbXAgXAorICAke2JpbmRpcn0vY2xlYXIke0BbJycsICcuJHtCUE5ceDdkJ11bJyR7Q0xBU1NPVkVSUklERX0nID09ICdjbGFzcy10YXJnZXQnXX0gXAorICAke2JpbmRpcn0vcmVzZXQke0BbJycsICcuJHtCUE5ceDdkJ11bJyR7Q0xBU1NPVkVSUklERX0nID09ICdjbGFzcy10YXJnZXQnXX0gXAorICAke2JpbmRpcn0vdGFjayBcCisgICR7YmluZGlyfS90YWJzIFwKKyIKKworIyAncmVzZXQnIGlzIGEgc3ltbGluayB0byAndHNldCcgd2hpY2ggaXMgaW4gdGhlICduY3Vyc2VzJyBwYWNrYWdlCitSREVQRU5EU18ke1BOfS10b29scyA9ICIke1BOfSIKKworRklMRVNfJHtQTn0tdGVybWluZm8gPSAiXAorICAke2RhdGFkaXJ9L3Rlcm1pbmZvIFwKKyIKKworRklMRVNfJHtQTn0tdGVybWluZm8tYmFzZSA9ICJcCisgICR7c3lzY29uZmRpcn0vdGVybWluZm8gXAorIgorCitSU1VHR0VTVFNfJHtQTn0tbGlidGluZm8gPSAiJHtQTn0tdGVybWluZm8iCitSUkVDT01NRU5EU18ke1BOfS1saWJ0aW5mbyA9ICIke1BOfS10ZXJtaW5mby1iYXNlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9uY3Vyc2VzXzUuOS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc181LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRkMjdhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25jdXJzZXMvbmN1cnNlc181LjkuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBuY3Vyc2VzLmluYworCitSRVZJU0lPTiA9ICIyMDE1MDMyOSIKKworUFIgPSAiJHtJTkNfUFJ9LjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly90aWMtaGFuZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlnLmNhY2hlIFwKKyIKK1MgPSAiJHtXT1JLRElSfS8ke0JQfS0ke1JFVklTSU9OfSIKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZWU5OTFkMDllNjllNjBlYmVkZWY0MjQ4MDRjNTJkNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1YjY0ZjQwZTRkY2U3M2UzYWE4M2QxNWJkOTI1N2M2ZWZmODc5MGVjNDExNTBmMDkzOGJkODdjMGViNzU4MjhmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvbmN1cnNlcy9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4N2I3YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9uY3Vyc2VzL3NpdGVfY29uZmlnL2hlYWRlcnMKQEAgLTAsMCArMSw1IEBACitjdXJzZXMuaAorbmN1cnNlcy9jdXJzZXMuaAorbmN1cnNlcy5oCituY3Vyc2VzL3Rlcm1jYXAuaAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMgYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvaG9zdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMzI0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZS9ob3N0cwpAQCAtMCwwICsxLDIgQEAKKzEyNy4wLjAuMQlsb2NhbGhvc3QubG9jYWxkb21haW4JCWxvY2FsaG9zdAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9uZXRiYXNlL25ldGJhc2UvbmV0YmFzZS1hZGQtcnBjYmluZC1hcy1hbi1hbGlhcy10by1zdW5ycGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjZTIxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZS9uZXRiYXNlLWFkZC1ycGNiaW5kLWFzLWFuLWFsaWFzLXRvLXN1bnJwYy5wYXRjaApAQCAtMCwwICsxLDQ0IEBACituZXRiYXNlOiBhZGQgcnBjYmluZCBhcyBhbiBhbGlhcyB0byBzdW5ycGMKKwordGhlIHBhdGNoIGNvbWVzIGZyb206CitodHRwczovL2J1Z3MuYXJjaGxpbnV4Lm9yZy90YXNrLzIwMjczCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMaSBXYW5nIDxsaS53YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBldGMtcnBjICAgICAgfCAgICAyICstCisgZXRjLXNlcnZpY2VzIHwgICAgNCArKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ldGMtcnBjIGIvZXRjLXJwYworaW5kZXggMWIzMDYyNS4uOWE5YTgxYSAxMDA2NDQKKy0tLSBhL2V0Yy1ycGMKKysrKyBiL2V0Yy1ycGMKK0BAIC0xLDcgKzEsNyBAQAorICMgVGhpcyBmaWxlIGNvbnRhaW5zIHVzZXIgcmVhZGFibGUgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCBpbiBwbGFjZSBvZiBycGMKKyAjIHByb2dyYW0gbnVtYmVycy4KKyAKKy1wb3J0bWFwcGVyCTEwMDAwMAlwb3J0bWFwIHN1bnJwYworK3BvcnRtYXBwZXIJMTAwMDAwCXBvcnRtYXAgc3VucnBjIHJwY2JpbmQKKyByc3RhdGQJCTEwMDAwMQlyc3RhdCByc3RhdF9zdmMgcnVwIHBlcmZtZXRlcgorIHJ1c2Vyc2QJCTEwMDAwMglydXNlcnMKKyBuZnMJCTEwMDAwMwluZnNwcm9nCitkaWZmIC0tZ2l0IGEvZXRjLXNlcnZpY2VzIGIvZXRjLXNlcnZpY2VzCitpbmRleCA5ZDY0YTUyLi5hMTlmN2M4IDEwMDY0NAorLS0tIGEvZXRjLXNlcnZpY2VzCisrKysgYi9ldGMtc2VydmljZXMKK0BAIC03Miw4ICs3Miw4IEBAIHBvcDIJCTEwOS90Y3AJCXBvc3RvZmZpY2UgcG9wLTIgIyBQT1AgdmVyc2lvbiAyCisgcG9wMgkJMTA5L3VkcAkJcG9wLTIKKyBwb3AzCQkxMTAvdGNwCQlwb3AtMwkJIyBQT1AgdmVyc2lvbiAzCisgcG9wMwkJMTEwL3VkcAkJcG9wLTMKKy1zdW5ycGMJCTExMS90Y3AJCXBvcnRtYXBwZXIJIyBSUEMgNC4wIHBvcnRtYXBwZXIKKy1zdW5ycGMJCTExMS91ZHAJCXBvcnRtYXBwZXIKKytzdW5ycGMJCTExMS90Y3AJCXBvcnRtYXBwZXIgcnBjYmluZAkjIFJQQyA0LjAgcG9ydG1hcHBlcgorK3N1bnJwYwkJMTExL3VkcAkJcG9ydG1hcHBlciBycGNiaW5kCisgYXV0aAkJMTEzL3RjcAkJYXV0aGVudGljYXRpb24gdGFwIGlkZW50Cisgc2Z0cAkJMTE1L3RjcAorIHV1Y3AtcGF0aAkxMTcvdGNwCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvbmV0YmFzZS9uZXRiYXNlXzUuMy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkODlmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL25ldGJhc2UvbmV0YmFzZV81LjMuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJCYXNpYyBUQ1AvSVAgbmV0d29ya2luZyBzdXBwb3J0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJhc2ljIFRDUC9JUCBiYXNlZCBuZXR3b3JraW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvbmV0YmFzZSIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kZWJpYW4vY29weXJpZ2h0O21kNT0zZGQ2MTkyZDMwNmY1ODJkZWU3Njg3ZGEzZDg3NDhhYiIKK1BFID0gIjEiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL24vbmV0YmFzZS9uZXRiYXNlXyR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9uZXRiYXNlLWFkZC1ycGNiaW5kLWFzLWFuLWFsaWFzLXRvLXN1bnJwYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ob3N0cyIKKworU1JDX1VSSVttZDVzdW1dID0gIjI2MzdhMjdmZDNkZTAyYTI3OGQyYjViZTdlNjU1OGMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgxZjZjNjk3OTUwNDRkNjJiOGFkOTU5Y2Y5ZGFmMDQ5ZDA1NDVmZDQ2NmM1Mjg2MGFkM2Y5MzNiMWU5N2I4OGIiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke21hbmRpcn0vbWFuOCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2hvc3RzICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RzCisJaW5zdGFsbCAtbSAwNjQ0IGV0Yy1ycGMgJHtEfSR7c3lzY29uZmRpcn0vcnBjCisJaW5zdGFsbCAtbSAwNjQ0IGV0Yy1wcm90b2NvbHMgJHtEfSR7c3lzY29uZmRpcn0vcHJvdG9jb2xzCisJaW5zdGFsbCAtbSAwNjQ0IGV0Yy1zZXJ2aWNlcyAke0R9JHtzeXNjb25mZGlyfS9zZXJ2aWNlcworfQorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9ob3N0cyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL29zLXJlbGVhc2Uvb3MtcmVsZWFzZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQzMWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvb3MtcmVsZWFzZS9vcy1yZWxlYXNlLmJiCkBAIC0wLDAgKzEsNDkgQEAKK2luaGVyaXQgYWxsYXJjaAorCitTVU1NQVJZID0gIk9wZXJhdGluZyBzeXN0ZW0gaWRlbnRpZmljYXRpb24iCitERVNDUklQVElPTiA9ICJUaGUgL2V0Yy9vcy1yZWxlYXNlIGZpbGUgY29udGFpbnMgb3BlcmF0aW5nIHN5c3RlbSBpZGVudGlmaWNhdGlvbiBkYXRhLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCitkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKKworIyBPdGhlciB2YWxpZCBmaWVsZHM6IEJVSUxEX0lEIElEX0xJS0UgQU5TSV9DT0xPUiBDUEVfTkFNRQorIyAgICAgICAgICAgICAgICAgICAgIEhPTUVfVVJMIFNVUFBPUlRfVVJMIEJVR19SRVBPUlRfVVJMCitPU19SRUxFQVNFX0ZJRUxEUyA9ICJJRCBJRF9MSUtFIE5BTUUgVkVSU0lPTiBWRVJTSU9OX0lEIFBSRVRUWV9OQU1FIgorCitJRCA9ICIke0RJU1RST30iCitOQU1FID0gIiR7RElTVFJPX05BTUV9IgorVkVSU0lPTiA9ICIke0RJU1RST19WRVJTSU9OfSR7QCcgKCVzKScgJSBESVNUUk9fQ09ERU5BTUUgaWYgJ0RJU1RST19DT0RFTkFNRScgaW4gZCBlbHNlICcnfSIKK1ZFUlNJT05fSUQgPSAiJHtESVNUUk9fVkVSU0lPTn0iCitQUkVUVFlfTkFNRSA9ICIke0RJU1RST19OQU1FfSAke1ZFUlNJT059IgorQlVJTERfSUQgPz0gIiR7REFURVRJTUV9IgorQlVJTERfSURbdmFyZGVwc2V4Y2x1ZGVdID0gIkRBVEVUSU1FIgorCitweXRob24gZG9fY29tcGlsZSAoKSB7CisgICAgaW1wb3J0IHNodXRpbAorICAgIHdpdGggb3BlbihkLmV4cGFuZCgnJHtCfS9vcy1yZWxlYXNlJyksICd3JykgYXMgZjoKKyAgICAgICAgZm9yIGZpZWxkIGluIGQuZ2V0VmFyKCdPU19SRUxFQVNFX0ZJRUxEUycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgICAgICB2YWx1ZSA9IGQuZ2V0VmFyKGZpZWxkLCBUcnVlKQorICAgICAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnezB9PXsxfVxuJy5mb3JtYXQoZmllbGQsIHZhbHVlKSkKKyAgICBpZiBkLmdldFZhcignUlBNX1NJR05fUEFDS0FHRVMnLCBUcnVlKSA9PSAnMSc6CisgICAgICAgIHJwbV9ncGdfcHVia2V5ID0gZC5nZXRWYXIoJ1JQTV9HUEdfUFVCS0VZJywgVHJ1ZSkKKyAgICAgICAgb3MubWtkaXIoJyR7Qn0vcnBtLWdwZycpCisgICAgICAgIGRpc3Ryb192ZXJzaW9uID0gc2VsZi5kLmdldFZhcignRElTVFJPX1ZFUlNJT04nLCBUcnVlKSBvciAib2UuMCIKKyAgICAgICAgc2h1dGlsLmNvcHkyKHJwbV9ncGdfcHVia2V5LCBkLmV4cGFuZCgnJHtCfS9ycG0tZ3BnL1JQTS1HUEctS0VZLSVzJyAlIGRpc3Ryb192ZXJzaW9uKSkKK30KK2RvX2NvbXBpbGVbdmFyZGVwc10gKz0gIiR7T1NfUkVMRUFTRV9GSUVMRFN9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisgICAgaW5zdGFsbCAtbSAwNjQ0IG9zLXJlbGVhc2UgJHtEfSR7c3lzY29uZmRpcn0vCisKKyAgICBpZiBbIC1kICJycG0tZ3BnIiBdOyB0aGVuCisgICAgICAgIGluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L3BraSIKKyAgICAgICAgY3AgLXIgInJwbS1ncGciICIke0R9JHtzeXNjb25mZGlyfS9wa2kvIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM2YTUzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1zZGstaG9zdC5iYgpAQCAtMCwwICsxLDMzIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZAorIworCitTVU1NQVJZID0gIkhvc3QgcGFja2FnZXMgZm9yIHRoZSBzdGFuZGFsb25lIFNESyBvciBleHRlcm5hbCB0b29sY2hhaW4iCitQUiA9ICJyMTIiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgbmF0aXZlc2RrCisKK1BBQ0tBR0VHUk9VUF9ESVNBQkxFX0NPTVBMRU1FTlRBUlkgPSAiMSIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIG5hdGl2ZXNkay1wa2djb25maWcgXAorICAgIG5hdGl2ZXNkay1xZW11IFwKKyAgICBuYXRpdmVzZGstcWVtdS1oZWxwZXIgXAorICAgIG5hdGl2ZXNkay1wc2V1ZG8gXAorICAgIG5hdGl2ZXNkay11bmZzMyBcCisgICAgbmF0aXZlc2RrLW9wa2cgXAorICAgIG5hdGl2ZXNkay1saWJ0b29sIFwKKyAgICBuYXRpdmVzZGstYXV0b2NvbmYgXAorICAgIG5hdGl2ZXNkay1hdXRvbWFrZSBcCisgICAgbmF0aXZlc2RrLXNoYWRvdyBcCisgICAgbmF0aXZlc2RrLW1ha2VkZXZzIFwKKyAgICBuYXRpdmVzZGstc21hcnRwbSBcCisgICAgbmF0aXZlc2RrLXBvc3RpbnN0LWludGVyY2VwdCBcCisgICAgIgorCitSREVQRU5EU18ke1BOfV9kYXJ3aW4gPSAiXAorICAgIG5hdGl2ZXNkay1wa2djb25maWcgXAorICAgIG5hdGl2ZXNkay1vcGtnIFwKKyAgICBuYXRpdmVzZGstbGlidG9vbCBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtYmFzZS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0MGIyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWJhc2UuYmIKQEAgLTAsMCArMSwzNjkgQEAKK1NVTU1BUlkgPSAiTWVyZ2UgbWFjaGluZSBhbmQgZGlzdHJvIG9wdGlvbnMgdG8gY3JlYXRlIGEgYmFzaWMgbWFjaGluZSB0YXNrL3BhY2thZ2UiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI4MyIKKworIworIyBwYWNrYWdlcyB3aGljaCBjb250ZW50IGRlcGVuZCBvbiBNQUNISU5FX0ZFQVRVUkVTIG5lZWQgdG8gYmUgTUFDSElORV9BUkNICisjCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAoraW5oZXJpdCBibHVldG9vdGgKKworUFJPVklERVMgPSAiJHtQQUNLQUdFU30iCitQQUNLQUdFUyA9ICcgXAorICAgICAgICAgICAgcGFja2FnZWdyb3VwLWJhc2UgXAorICAgICAgICAgICAgcGFja2FnZWdyb3VwLWJhc2UtZXh0ZW5kZWQgXAorICAgICAgICAgICAgcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlIFwKKyAgICAgICAgICAgIHBhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgXAorICAgICAgICAgICAgXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWNwaSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1hY3BpIiwgIiIsZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFsc2EiLCAicGFja2FnZWdyb3VwLWJhc2UtYWxzYSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgInBhY2thZ2Vncm91cC1iYXNlLWFwbSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiZXh0MiIsICJwYWNrYWdlZ3JvdXAtYmFzZS1leHQyIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJ2ZmF0IiwgInBhY2thZ2Vncm91cC1iYXNlLXZmYXQiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImlyZGEiLCAicGFja2FnZWdyb3VwLWJhc2UtaXJkYSIsICIiLGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJrZXlib2FyZCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAicGNpIiwgInBhY2thZ2Vncm91cC1iYXNlLXBjaSIsICIiLGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwY21jaWEiLCAicGFja2FnZWdyb3VwLWJhc2UtcGNtY2lhIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJwaG9uZSIsICJwYWNrYWdlZ3JvdXAtYmFzZS1waG9uZSIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAic2VyaWFsIiwgInBhY2thZ2Vncm91cC1iYXNlLXNlcmlhbCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidXNiZ2FkZ2V0IiwgInBhY2thZ2Vncm91cC1iYXNlLXVzYmdhZGdldCIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidXNiaG9zdCIsICJwYWNrYWdlZ3JvdXAtYmFzZS11c2Job3N0IiwgIiIsIGQpfSBcCisgICAgICAgICAgICBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImJsdWV0b290aCIsICJwYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGgiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAid2lmaSIsICJwYWNrYWdlZ3JvdXAtYmFzZS13aWZpIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIjNnIiwgInBhY2thZ2Vncm91cC1iYXNlLTNnIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm5mYyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1uZmMiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAiY3JhbWZzIiwgInBhY2thZ2Vncm91cC1iYXNlLWNyYW1mcyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJpcHNlYyIsICJwYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJpcHY2IiwgInBhY2thZ2Vncm91cC1iYXNlLWlwdjYiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAibmZzIiwgInBhY2thZ2Vncm91cC1iYXNlLW5mcyIsICIiLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJwcHAiLCAicGFja2FnZWdyb3VwLWJhc2UtcHBwIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInNtYmZzIiwgInBhY2thZ2Vncm91cC1iYXNlLXNtYmZzIiwgIiIsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgInplcm9jb25mIiwgInBhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mIiwgIiIsIGQpfSBcCisgICAgICAgICAgICBcCisgICAgICAgICAgICAnCisKKyMgT3ZlcnJpZGUgYnkgZGlzdHJvIGlmIG5lZWRlZAorVklSVFVBTC1SVU5USU1FX2tleW1hcHMgPz0gImtleW1hcHMiCisKKyMKKyMgcGFja2FnZWdyb3VwLWJhc2UgY29udGFpbiBzdHVmZiBuZWVkZWQgZm9yIGJhc2Ugc3lzdGVtIChtYWNoaW5lIHJlbGF0ZWQpCisjCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZSA9ICJcCisgICAgcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlIFwKKyAgICBwYWNrYWdlZ3JvdXAtbWFjaGluZS1iYXNlIFwKKyAgICBcCisgICAgc3lzZnN1dGlscyBcCisgICAgbW9kdWxlLWluaXQtdG9vbHMgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2FwbScsICdwYWNrYWdlZ3JvdXAtYmFzZS1hcG0nLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ2FjcGknLCAncGFja2FnZWdyb3VwLWJhc2UtYWNwaScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ01BQ0hJTkVfRkVBVFVSRVMnLCAna2V5Ym9hcmQnLCAncGFja2FnZWdyb3VwLWJhc2Uta2V5Ym9hcmQnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3Bob25lJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBob25lJywgJycsZCl9IFwKKyAgICBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2Fsc2EnLCAncGFja2FnZWdyb3VwLWJhc2UtYWxzYScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2V4dDInLCAncGFja2FnZWdyb3VwLWJhc2UtZXh0MicsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3ZmYXQnLCAncGFja2FnZWdyb3VwLWJhc2UtdmZhdCcsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2lyZGEnLCAncGFja2FnZWdyb3VwLWJhc2UtaXJkYScsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjaScsICdwYWNrYWdlZ3JvdXAtYmFzZS1wY2knLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAncGFja2FnZWdyb3VwLWJhc2UtcGNtY2lhJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiZ2FkZ2V0JywgJ3BhY2thZ2Vncm91cC1iYXNlLXVzYmdhZGdldCcsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAncGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCcsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdwYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGgnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd3aWZpJywgJ3BhY2thZ2Vncm91cC1iYXNlLXdpZmknLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICczZycsICdwYWNrYWdlZ3JvdXAtYmFzZS0zZycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ25mYycsICdwYWNrYWdlZ3JvdXAtYmFzZS1uZmMnLCAnJyxkKX0gXAorICAgIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ25mcycsICdwYWNrYWdlZ3JvdXAtYmFzZS1uZnMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnY3JhbWZzJywgJ3BhY2thZ2Vncm91cC1iYXNlLWNyYW1mcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzbWJmcycsICdwYWNrYWdlZ3JvdXAtYmFzZS1zbWJmcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdpcHY2JywgJ3BhY2thZ2Vncm91cC1iYXNlLWlwdjYnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXBzZWMnLCAncGFja2FnZWdyb3VwLWJhc2UtaXBzZWMnLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHBwJywgJ3BhY2thZ2Vncm91cC1iYXNlLXBwcCcsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd6ZXJvY29uZicsICdwYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZicsICcnLGQpfSBcCisgICAgIgorCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLW5scy11dGY4IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlucHV0IFwKKyAgICBrZXJuZWwtbW9kdWxlLXVpbnB1dCBcCisgICAga2VybmVsLW1vZHVsZS1ydGMtZGV2IFwKKyAgICBrZXJuZWwtbW9kdWxlLXJ0Yy1wcm9jIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJ0Yy1zeXNmcyBcCisgICAga2VybmVsLW1vZHVsZS11bml4IgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1leHRlbmRlZCA9ICJcCisgICAgcGFja2FnZWdyb3VwLWJhc2UgXAorICAgICR7QUREX1dJRkl9IFwKKyAgICAke0FERF9CVH0gXAorICAgICR7QUREXzNHfSBcCisgICAgJHtBRERfTkZDfSBcCisgICAgIgorCitBRERfV0lGSSA9ICIiCitBRERfQlQgPSAiIgorQUREXzNHID0gIiIKK0FERF9ORkMgPSAiIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgICMgSWYgRGlzdHJvIHdhbnQgd2lmaSBhbmQgbWFjaGluZSBmZWF0dXJlIHdpZmkvcGNpL3BjbWNpYS91c2Job3N0IChvbmUgb2YgdGhlbSkKKyAgICAjIHRoZW4gaW5jbHVkZSBwYWNrYWdlZ3JvdXAtYmFzZS13aWZpIGluIHBhY2thZ2Vncm91cC1iYXNlCisKKyAgICBkaXN0cm9fZmVhdHVyZXMgPSBzZXQoZC5nZXRWYXIoIkRJU1RST19GRUFUVVJFUyIsIFRydWUpLnNwbGl0KCkpCisgICAgbWFjaGluZV9mZWF0dXJlcz0gc2V0KGQuZ2V0VmFyKCJNQUNISU5FX0ZFQVRVUkVTIiwgVHJ1ZSkuc3BsaXQoKSkKKworICAgIGlmICJibHVldG9vdGgiIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICJibHVldG9vdGgiIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgicGNtY2lhIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJwY2kiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREX0JUIiwgInBhY2thZ2Vncm91cC1iYXNlLWJsdWV0b290aCIpCisKKyAgICBpZiAid2lmaSIgaW4gZGlzdHJvX2ZlYXR1cmVzIGFuZCBub3QgIndpZmkiIGluIG1hY2hpbmVfZmVhdHVyZXMgYW5kICgicGNtY2lhIiBpbiBtYWNoaW5lX2ZlYXR1cmVzIG9yICJwY2kiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInVzYmhvc3QiIGluIG1hY2hpbmVfZmVhdHVyZXMpOgorICAgICAgICBkLnNldFZhcigiQUREX1dJRkkiLCAicGFja2FnZWdyb3VwLWJhc2Utd2lmaSIpCisKKyAgICBpZiAiM2ciIGluIGRpc3Ryb19mZWF0dXJlcyBhbmQgbm90ICIzZyIgaW4gbWFjaGluZV9mZWF0dXJlcyBhbmQgKCJwY21jaWEiIGluIG1hY2hpbmVfZmVhdHVyZXMgb3IgInBjaSIgaW4gbWFjaGluZV9mZWF0dXJlcyBvciAidXNiaG9zdCIgaW4gbWFjaGluZV9mZWF0dXJlcyk6CisgICAgICAgIGQuc2V0VmFyKCJBRERfM0ciLCAicGFja2FnZWdyb3VwLWJhc2UtM2ciKQorCisgICAgaWYgIm5mYyIgaW4gZGlzdHJvX2ZlYXR1cmVzIGFuZCBub3QgIm5mYyIgaW4gbWFjaGluZV9mZWF0dXJlcyBhbmQgKCJ1c2Job3N0IiBpbiBtYWNoaW5lX2ZlYXR1cmVzKToKKyAgICAgICAgZC5zZXRWYXIoIkFERF9ORkMiLCAicGFja2FnZWdyb3VwLWJhc2UtbmZjIikKK30KKworIworIyBwYWNrYWdlcyBhZGRlZCBieSBkaXN0cmlidXRpb24KKyMKK1NVTU1BUllfcGFja2FnZWdyb3VwLWRpc3Ryby1iYXNlID0gIiR7RElTVFJPfSBleHRyYXMiCitERVBFTkRTX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST19FWFRSQV9ERVBFTkRTfSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1kaXN0cm8tYmFzZSA9ICIke0RJU1RST19FWFRSQV9SREVQRU5EU30iCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtZGlzdHJvLWJhc2UgPSAiJHtESVNUUk9fRVhUUkFfUlJFQ09NTUVORFN9IgorCisjCisjIHBhY2thZ2VzIGFkZGVkIGJ5IG1hY2hpbmUgY29uZmlnCisjCitTVU1NQVJZX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiJHtNQUNISU5FfSBleHRyYXMiCitTVU1NQVJZX3BhY2thZ2Vncm91cC1tYWNoaW5lLWJhc2UgPSAiRXh0cmEgcGFja2FnZXMgcmVxdWlyZWQgdG8gZnVsbHkgc3VwcG9ydCAke01BQ0hJTkV9IGhhcmR3YXJlIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSA9ICIke01BQ0hJTkVfRVhUUkFfUkRFUEVORFN9IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLW1hY2hpbmUtYmFzZSA9ICIke01BQ0hJTkVfRVhUUkFfUlJFQ09NTUVORFN9IgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWtleWJvYXJkID0gIktleWJvYXJkIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1rZXlib2FyZCA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfa2V5bWFwc30iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtcGNpID0gIlBDSSBidXMgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBjaSA9ICJcCisgICAgcGNpdXRpbHMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtYWNwaSA9ICJBQ1BJIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1hY3BpID0gIlwKKyAgICBhY3BpZCBcCisgICAgbGliYWNwaSAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtYXBtID0gIkFQTSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYXBtID0gIlwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9hcG19IFwKKyAgICBhcG1kIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWV4dDIgPSAiZXh0MiBmaWxlc3lzdGVtIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1leHQyID0gIlwKKyAgICBoZHBhcm0gXAorICAgIGUyZnNwcm9ncyBcCisgICAgZTJmc3Byb2dzLWUyZnNjayBcCisgICAgZTJmc3Byb2dzLW1rZTJmcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS12ZmF0ID0gIkZBVCBmaWxlc3lzdGVtIHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS12ZmF0ID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLW1zZG9zIFwKKyAgICBrZXJuZWwtbW9kdWxlLXZmYXQgXAorICAgIGtlcm5lbC1tb2R1bGUtbmxzLWlzbzg4NTktMSBcCisgICAga2VybmVsLW1vZHVsZS1ubHMtY3A0MzcgXAorICAgIGRvc2ZzdG9vbHMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtYWxzYSA9ICJBTFNBIHNvdW5kIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1hbHNhID0gIlwKKyAgICBhbHNhLXV0aWxzLWFsc2FjdGwgXAorICAgIGFsc2EtdXRpbHMtYWxzYW1peGVyIFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9hbHNhLXN0YXRlfSIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtYWxzYSA9ICJcCisgICAga2VybmVsLW1vZHVsZS1zbmQtbWl4ZXItb3NzIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNuZC1wY20tb3NzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSA9ICJQQyBjYXJkIHNsb3Qgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBjbWNpYSA9ICJcCisgICAgcGNtY2lhdXRpbHMgXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtcGNtY2lhID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXBjbWNpYSBcCisgICAga2VybmVsLW1vZHVsZS1haXJvLWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLXBjbmV0LWNzIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNlcmlhbC1jcyBcCisgICAga2VybmVsLW1vZHVsZS1pZGUtY3MgXAorICAgIGtlcm5lbC1tb2R1bGUtaWRlLWRpc2sgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2lmaScsICdrZXJuZWwtbW9kdWxlLWhvc3RhcC1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywgJ2tlcm5lbC1tb2R1bGUtb3Jpbm9jby1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3aWZpJywgJ2tlcm5lbC1tb2R1bGUtc3BlY3RydW0tY3MnLCAnJyxkKX0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIkJsdWV0b290aCBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtYmx1ZXRvb3RoID0gIlwKKyAgICAke0JMVUVafSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ2Fsc2EnLCAnbGliYXNvdW5kLW1vZHVsZS1ibHVleicsICcnLGQpfSBcCisgICAgIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1ibHVldG9vdGggPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtYmx1ZXRvb3RoIFwKKyAgICBrZXJuZWwtbW9kdWxlLWwyY2FwIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJmY29tbSBcCisgICAga2VybmVsLW1vZHVsZS1oY2ktdmhjaSBcCisgICAga2VybmVsLW1vZHVsZS1ibmVwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWhpZHAgXAorICAgIGtlcm5lbC1tb2R1bGUtaGNpLXVhcnQgXAorICAgIGtlcm5lbC1tb2R1bGUtc2NvIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAndXNiaG9zdCcsICdrZXJuZWwtbW9kdWxlLWhjaS11c2InLCAnJyxkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAna2VybmVsLW1vZHVsZS1ibHVldG9vdGgzYy1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWJsdWVjYXJkLWNzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNtY2lhJywgJ2tlcm5lbC1tb2R1bGUtYmx1ZXRvb3RodWFydC1jcycsICcnLGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3BjbWNpYScsICdrZXJuZWwtbW9kdWxlLWR0bDEtY3MnLCAnJyxkKX0gXAorICAgICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1pcmRhID0gIklyREEgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlyZGEgPSAiXAorICAgIGlyZGEtdXRpbHMiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlyZGEgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtcHhhZmljcC1pciBcCisgICAga2VybmVsLW1vZHVsZS1pcmRhIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlyY29tbSBcCisgICAga2VybmVsLW1vZHVsZS1pcmNvbW0tdHR5IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlybGFuIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BwcCcsICdrZXJuZWwtbW9kdWxlLWlybmV0JywgJycsZCl9IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlycG9ydCBcCisgICAga2VybmVsLW1vZHVsZS1pcnR0eSBcCisgICAga2VybmVsLW1vZHVsZS1pcnR0eS1zaXIgXAorICAgIGtlcm5lbC1tb2R1bGUtc2lyLWRldiBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0NPTUJJTkVEX0ZFQVRVUkVTJywgJ3VzYmhvc3QnLCAna2VybmVsLW1vZHVsZS1pci11c2InLCAnJyxkKX0gIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXVzYmdhZGdldCA9ICJVU0IgZ2FkZ2V0IHN1cHBvcnQiCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS11c2JnYWRnZXQgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtcHhhMjd4X3VkYyBcCisgICAga2VybmVsLW1vZHVsZS1nYWRnZXRmcyBcCisgICAga2VybmVsLW1vZHVsZS1nLWZpbGUtc3RvcmFnZSBcCisgICAga2VybmVsLW1vZHVsZS1nLXNlcmlhbCBcCisgICAga2VybmVsLW1vZHVsZS1nLWV0aGVyIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QgPSAiVVNCIGhvc3Qgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXVzYmhvc3QgPSAiXAorICAgIHVzYnV0aWxzICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtdXNiaG9zdCA9ICJcCisgICAga2VybmVsLW1vZHVsZS11aGNpLWhjZCBcCisgICAga2VybmVsLW1vZHVsZS1vaGNpLWhjZCBcCisgICAga2VybmVsLW1vZHVsZS1laGNpLWhjZCBcCisgICAga2VybmVsLW1vZHVsZS11c2Jjb3JlIFwKKyAgICBrZXJuZWwtbW9kdWxlLXVzYmhpZCBcCisgICAga2VybmVsLW1vZHVsZS11c2JuZXQgXAorICAgIGtlcm5lbC1tb2R1bGUtc2QtbW9kIFwKKyAgICBrZXJuZWwtbW9kdWxlLXNjc2ktbW9kIFwKKyAgICBrZXJuZWwtbW9kdWxlLXVzYm1vdXNlIFwKKyAgICBrZXJuZWwtbW9kdWxlLW1vdXNlZGV2IFwKKyAgICBrZXJuZWwtbW9kdWxlLXVzYnNlcmlhbCBcCisgICAga2VybmVsLW1vZHVsZS11c2Itc3RvcmFnZSAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtcHBwID0gIlBQUCBkaWFsLXVwIHByb3RvY29sIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1wcHAgPSAiXAorICAgIHBwcCBcCisgICAgcHBwLWRpYWxpbiIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtcHBwID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLXBwcC1hc3luYyBcCisgICAga2VybmVsLW1vZHVsZS1wcHAtZGVmbGF0ZSBcCisgICAga2VybmVsLW1vZHVsZS1wcHAtZ2VuZXJpYyBcCisgICAga2VybmVsLW1vZHVsZS1wcHAtbXBwZSBcCisgICAga2VybmVsLW1vZHVsZS1zbGhjIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLWlwc2VjID0gIklQU0VDIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyA9ICJcCisgICAgIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS1pcHNlYyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1pcHNlYyIKKworIworIyBwYWNrYWdlZ3JvdXAtYmFzZS13aWZpIGNvbnRhaW4gZXZlcnl0aGluZyBuZWVkZWQgdG8gZ2V0IFdpRmkgd29ya2luZworIyBXRVAvV1BBIGNvbm5lY3Rpb24gbmVlZHMgdG8gYmUgc3VwcG9ydGVkIG91dC1vZi1ib3gKKyMKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Utd2lmaSA9ICJXaUZpIHN1cHBvcnQiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS13aWZpID0gIlwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV93aXJlbGVzcy10b29sc30gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICdwY21jaWEnLCAnaG9zdGFwLXV0aWxzJywgJycsZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnQ09NQklORURfRkVBVFVSRVMnLCAncGNpJywgJ2hvc3RhcC11dGlscycsICcnLGQpfSBcCisgICAgd3BhLXN1cHBsaWNhbnQiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLXdpZmkgPSAiXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdDT01CSU5FRF9GRUFUVVJFUycsICd1c2Job3N0JywgJ2tlcm5lbC1tb2R1bGUtemQxMjExcncnLCAnJyxkKX0gXAorICAgIGtlcm5lbC1tb2R1bGUtaWVlZTgwMjExLWNyeXB0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdC1jY21wIFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdC10a2lwIFwKKyAgICBrZXJuZWwtbW9kdWxlLWllZWU4MDIxMS1jcnlwdC13ZXAgXAorICAgIGtlcm5lbC1tb2R1bGUtZWNiIFwKKyAgICBrZXJuZWwtbW9kdWxlLWFyYzQgXAorICAgIGtlcm5lbC1tb2R1bGUtY3J5cHRvX2FsZ2FwaSBcCisgICAga2VybmVsLW1vZHVsZS1jcnlwdG9tZ3IgXAorICAgIGtlcm5lbC1tb2R1bGUtbWljaGFlbC1taWMgXAorICAgIGtlcm5lbC1tb2R1bGUtYWVzLWdlbmVyaWMgXAorICAgIGtlcm5lbC1tb2R1bGUtYWVzIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1iYXNlLW5mYyA9ICJOZWFyIEZpZWxkIENvbW11bmljYXRpb24gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mYyA9ICJcCisgICAgbmVhcmQiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mYyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1uZmMiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtM2cgPSAiQ2VsbHVsYXIgZGF0YSBzdXBwb3J0IgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWJhc2UtM2cgPSAiXAorICAgIG9mb25vIgorCitSUkVDT01NRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS0zZyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1jZGMtYWNtIFwKKyAgICBrZXJuZWwtbW9kdWxlLWNkYy13ZG0iCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2Utc21iZnMgPSAiU01CIG5ldHdvcmsgZmlsZXN5c3RlbSBzdXBwb3J0IgorUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2Utc21iZnMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtY2lmcyBcCisgICAga2VybmVsLW1vZHVsZS1zbWJmcyIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1jcmFtZnMgPSAiY3JhbWZzIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1iYXNlLWNyYW1mcyA9ICJcCisgICAga2VybmVsLW1vZHVsZS1jcmFtZnMiCisKKyMKKyMgcGFja2FnZWdyb3VwLWJhc2UtbmZzIHByb3ZpZGVzIE9OTFkgY2xpZW50IHN1cHBvcnQgLSBzZXJ2ZXIgaXMgaW4gbmZzLXV0aWxzIHBhY2thZ2UKKyMKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtbmZzID0gIk5GUyBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLW5mcyA9ICJcCisgICAgcnBjYmluZCIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtbmZzID0gIlwKKyAgICBrZXJuZWwtbW9kdWxlLW5mcyAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtemVyb2NvbmYgPSAiWmVyb2NvbmYgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXplcm9jb25mID0gIlwKKyAgICBhdmFoaS1kYWVtb24iCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtYmFzZS16ZXJvY29uZl9hcHBlbmRfbGliYy1nbGliYyA9ICJcCisgICAgbGlibnNzLW1kbnMgXAorICAgICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1pcHY2ID0gIklQdjYgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLWlwdjYgPSAiXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLWJhc2UtaXB2NiA9ICJcCisgICAga2VybmVsLW1vZHVsZS1pcHY2ICIKKworU1VNTUFSWV9wYWNrYWdlZ3JvdXAtYmFzZS1zZXJpYWwgPSAiU2VyaWFsIHBvcnQgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXNlcmlhbCA9ICJcCisgICAgc2V0c2VyaWFsIFwKKyAgICBscnpzeiAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWJhc2UtcGhvbmUgPSAiQ2VsbHVsYXIgdGVsZXBob255ICh2b2ljZSkgc3VwcG9ydCIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1iYXNlLXBob25lID0gIlwKKyAgICBvZm9ubyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtYm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY1MzczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1ib290LmJiCkBAIC0wLDAgKzEsNDcgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIk1pbmltYWwgYm9vdCByZXF1aXJlbWVudHMiCitERVNDUklQVElPTiA9ICJUaGUgbWluaW1hbCBzZXQgb2YgcGFja2FnZXMgcmVxdWlyZWQgdG8gYm9vdCB0aGUgc3lzdGVtIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMTciCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKKyMKKyMgU2V0IGJ5IHRoZSBtYWNoaW5lIGNvbmZpZ3VyYXRpb24gd2l0aCBwYWNrYWdlcyBlc3NlbnRpYWwgZm9yIGRldmljZSBib290dXAKKyMKK01BQ0hJTkVfRVNTRU5USUFMX0VYVFJBX1JERVBFTkRTID89ICIiCitNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EUyA/PSAiIgorCisjIERpc3RybyBjYW4gb3ZlcnJpZGUgdGhlIGZvbGxvd2luZyBWSVJUVUFMLVJVTlRJTUUgcHJvdmlkZXJzOgorVklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyID89ICJ1ZGV2IgorVklSVFVBTC1SVU5USU1FX2xvZ2luX21hbmFnZXIgPz0gImJ1c3lib3giCitWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID89ICJzeXN2aW5pdCIKK1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0cyA/PSAiaW5pdHNjcmlwdHMiCitWSVJUVUFMLVJVTlRJTUVfa2V5bWFwcyA/PSAia2V5bWFwcyIKKworU1lTVklOSVRfU0NSSVBUUyA9ICIke0BiYi51dGlscy5jb250YWlucygnTUFDSElORV9GRUFUVVJFUycsICdydGMnLCAnYnVzeWJveC1od2Nsb2NrJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgIG1vZHV0aWxzLWluaXRzY3JpcHRzIFwKKyAgICAgICAgICAgICAgICAgICAgaW5pdC1pZnVwZG93biBcCisgICAgICAgICAgICAgICAgICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzfSBcCisgICAgICAgICAgICAgICAgICAgIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgYmFzZS1maWxlcyBcCisgICAgYmFzZS1wYXNzd2QgXAorICAgIGJ1c3lib3ggXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAic3lzdmluaXQiLCAiJHtTWVNWSU5JVF9TQ1JJUFRTfSIsICIiLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImtleWJvYXJkIiwgIiR7VklSVFVBTC1SVU5USU1FX2tleW1hcHN9IiwgIiIsIGQpfSBcCisgICAgbmV0YmFzZSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRfbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX2Rldl9tYW5hZ2VyfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30gXAorICAgICR7TUFDSElORV9FU1NFTlRJQUxfRVhUUkFfUkRFUEVORFN9IgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisgICAgJHtNQUNISU5FX0VTU0VOVElBTF9FWFRSQV9SUkVDT01NRU5EU30iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGVkMjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbC5iYgpAQCAtMCwwICsxLDI5IEBACisjCisjIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kIEx0ZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEyIFJlZCBIYXQsIEluYy4KKyMKKworU1VNTUFSWSA9ICJFc3NlbnRpYWwgYnVpbGQgZGVwZW5kZW5jaWVzIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsID0gIlwKKyAgICBhdXRvY29uZiBcCisgICAgYXV0b21ha2UgXAorICAgIGJpbnV0aWxzIFwKKyAgICBiaW51dGlscy1zeW1saW5rcyBcCisgICAgY3BwIFwKKyAgICBjcHAtc3ltbGlua3MgXAorICAgIGdjYyBcCisgICAgZ2NjLXN5bWxpbmtzIFwKKyAgICBnKysgXAorICAgIGcrKy1zeW1saW5rcyBcCisgICAgZ2V0dGV4dCBcCisgICAgbWFrZSBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystZGV2IFwKKyAgICBsaWJ0b29sIFwKKyAgICBwa2djb25maWcgXAorICAgICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1lY2xpcHNlLWRlYnVnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YjAxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWVjbGlwc2UtZGVidWcuYmIKQEAgLTAsMCArMSwxMCBAQAorU1VNTUFSWSA9ICJSZW1vdGUgZGVidWdnaW5nIHRvb2xzIGZvciBFY2xpcHNlIGludGVncmF0aW9uIgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBnZGJzZXJ2ZXIgXAorICAgIHRjZi1hZ2VudCBcCisgICAgb3BlbnNzaC1zZnRwLXNlcnZlciBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLW5mcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODgyZDNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1uZnMuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiTkZTIHBhY2thZ2UgZ3JvdXBzIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMiIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUFJPVklERVMgPSAiJHtQQUNLQUdFU30iCitQQUNLQUdFUyA9ICIke1BOfS1zZXJ2ZXIgJHtQTn0tY2xpZW50IgorCitTVU1NQVJZXyR7UE59LWNsaWVudCA9ICJORlMgY2xpZW50IgorUkRFUEVORFNfJHtQTn0tY2xpZW50ID0gIm5mcy11dGlscy1jbGllbnQiCisKK1NVTU1BUllfJHtQTn0tc2VydmVyID0gIk5GUyBzZXJ2ZXIiCitSREVQRU5EU18ke1BOfS1zZXJ2ZXIgPSAiXAorICAgIG5mcy11dGlscyBcCisgICAgbmZzLXV0aWxzLWNsaWVudCBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFkZDBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zZGsuYmIKQEAgLTAsMCArMSw4MyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiU29mdHdhcmUgZGV2ZWxvcG1lbnQgdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI5IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCisjUEFDS0FHRUZVTkNTID0rICdnZW5lcmF0ZV9zZGtfcGtncycKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtc2RrID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1idWlsZGVzc2VudGlhbCBcCisgICAgY29yZXV0aWxzIFwKKyAgICBjY2FjaGUgXAorICAgIGRpZmZ1dGlscyBcCisgICAgaW50bHRvb2wgXAorICAgIHBlcmwtbW9kdWxlLXJlIFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXdyYXAgXAorICAgIGZpbmR1dGlscyBcCisgICAgcXVpbHQgXAorICAgIGxlc3MgXAorICAgIGxkZCBcCisgICAgZmlsZSBcCisgICAgdGNsIgorCitTQU5JVElaRVJTID0gImxpYmFzYW4tZGV2IGxpYnVic2FuLWRldiIKK1NBTklUSVpFUlNfYWFyY2g2NCA9ICIiCitTQU5JVElaRVJTX21pcHMgPSAiIgorU0FOSVRJWkVSU19taXBzNjQgPSAiIgorU0FOSVRJWkVSU19taXBzNjRuMzIgPSAiIgorU0FOSVRJWkVSU19wb3dlcnBjNjQgPSAiIgorU0FOSVRJWkVSU19zcGFyYyA9ICIiCitTQU5JVElaRVJTX2xpYmMtbXVzbCA9ICIiCisKK1JSRUNPTU1FTkRTX3BhY2thZ2Vncm91cC1jb3JlLXNkayA9ICJcCisgICAgbGliZ29tcCBcCisgICAgbGliZ29tcC1kZXYgXAorICAgICR7U0FOSVRJWkVSU30iCisKKyNweXRob24gZ2VuZXJhdGVfc2RrX3BrZ3MgKCkgeworIyAgICBwb2t5X3BrZ3MgPSByZWFkX3BrZ2RhdGEoJ3BhY2thZ2Vncm91cC1jb3JlJywgZClbJ1BBQ0tBR0VTJ10KKyMgICAgcGtncyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyMgICAgZm9yIHBrZyBpbiBwb2t5X3BrZ3Muc3BsaXQoKToKKyMgICAgICAgIG5ld3BrZyA9IHBrZy5yZXBsYWNlKCdwYWNrYWdlZ3JvdXAtY29yZScsICdwYWNrYWdlZ3JvdXAtY29yZS1zZGsnKQorIworIyAgICAgICAgIyBmb3IgZWFjaCBvZiB0aGUgdGFzayBwYWNrYWdlcywgYWRkIGEgY29ycmVzcG9uZGluZyBzZGsgdGFzaworIyAgICAgICAgcGtncy5hcHBlbmQobmV3cGtnKQorIworIyAgICAgICAgIyBmb3IgZWFjaCBzZGsgdGFzaywgdGFrZSB0aGUgcmRlcGVuZHMgb2YgdGhlIG5vbi1zZGsgdGFzaywgYW5kIHR1cm4KKyMgICAgICAgICMgdGhhdCBpbnRvIHJyZWNvbW1lbmRzIHVwb24gdGhlIC1kZXYgdmVyc2lvbnMgb2YgdGhvc2UsIG5vdCB1bmxpa2UKKyMgICAgICAgICMgdGhlIHBhY2thZ2UgZGVwY2hhaW4gY29kZQorIyAgICAgICAgc3BrZ2RhdGEgPSByZWFkX3N1YnBrZ2RhdGEocGtnLCBkKQorIworIyAgICAgICAgcmRlcGVuZHMgPSBleHBsb2RlX2RlcHMoc3BrZ2RhdGEuZ2V0KCdSREVQRU5EU18lcycgJSBwa2cpIG9yICcnKQorIyAgICAgICAgcnJlY2xpc3QgPSBbXQorIworIyAgICAgICAgZm9yIGRlcGVuZCBpbiByZGVwZW5kczoKKyMgICAgICAgICAgICBzcGxpdF9kZXBlbmQgPSBkZXBlbmQuc3BsaXQoJyAoJykKKyMgICAgICAgICAgICBuYW1lID0gc3BsaXRfZGVwZW5kWzBdLnN0cmlwKCkKKyMgICAgICAgICAgICBpZiBwYWNrYWdlZCgnJXMtZGV2JyAlIG5hbWUsIGQpOgorIyAgICAgICAgICAgICAgICBycmVjbGlzdC5hcHBlbmQoJyVzLWRldicgJSBuYW1lKQorIyAgICAgICAgICAgIGVsc2U6CisjICAgICAgICAgICAgICAgIGRlcHBrZ2RhdGEgPSByZWFkX3N1YnBrZ2RhdGEobmFtZSwgZCkKKyMgICAgICAgICAgICAgICAgcmRlcGVuZHMyID0gZXhwbG9kZV9kZXBzKGRlcHBrZ2RhdGEuZ2V0KCdSREVQRU5EU18lcycgJSBuYW1lKSBvciAnJykKKyMgICAgICAgICAgICAgICAgZm9yIGRlcGVuZCBpbiByZGVwZW5kczI6CisjICAgICAgICAgICAgICAgICAgICBzcGxpdF9kZXBlbmQgPSBkZXBlbmQuc3BsaXQoJyAoJykKKyMgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzcGxpdF9kZXBlbmRbMF0uc3RyaXAoKQorIyAgICAgICAgICAgICAgICAgICAgaWYgcGFja2FnZWQoJyVzLWRldicgJSBuYW1lLCBkKToKKyMgICAgICAgICAgICAgICAgICAgICAgICBycmVjbGlzdC5hcHBlbmQoJyVzLWRldicgJSBuYW1lKQorIworIyAgICAgICAgICAgIG9sZHJyZWMgPSBkLmdldFZhcignUlJFQ09NTUVORFNfJXMnICUgbmV3cGtnLCBGYWxzZSkgb3IgJycKKyMgICAgICAgICAgICBkLnNldFZhcignUlJFQ09NTUVORFNfJXMnICUgbmV3cGtnLCBvbGRycmVjICsgJyAnICsgJyAnLmpvaW4ocnJlY2xpc3QpKQorIyAgICAgICAgICAgICMgYmIubm90ZSgnUlJFQ09NTUVORFNfJXMgPSAiJXMiJyAlIChuZXdwa2csIGQuZ2V0VmFyKCdSUkVDT01NRU5EU18lcycgJSBuZXdwa2csIEZhbHNlKSkpCisjCisjICAgICMgYmIubm90ZSgncGtncyBpcyAlcycgJSBwa2dzKQorIyAgICBkLnNldFZhcignUEFDS0FHRVMnLCAnICcuam9pbihwa2dzKSkKKyN9CisjCisjUEFDS0FHRVNfRFlOQU1JQyArPSAiXnBhY2thZ2Vncm91cC1jb3JlLXNkay0uKiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtZHJvcGJlYXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5OTQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLWRyb3BiZWFyLmJiCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJEcm9wYmVhciBTU0ggY2xpZW50L3NlcnZlciIKK0xJQ0VOU0UgPSAiTUlUIgorUFIgPSAicjEiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1JERVBFTkRTXyR7UE59ID0gImRyb3BiZWFyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zc2gtb3BlbnNzaC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJkMjBlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtc3NoLW9wZW5zc2guYmIKQEAgLTAsMCArMSw3IEBACitTVU1NQVJZID0gIk9wZW5TU0ggU1NIIGNsaWVudC9zZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIxIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitSREVQRU5EU18ke1BOfSA9ICJvcGVuc3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXN0YW5kYWxvbmUtc2RrLXRhcmdldC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Y1ZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1zdGFuZGFsb25lLXNkay10YXJnZXQuYmIKQEAgLTAsMCArMSwxMyBAQAorU1VNTUFSWSA9ICJUYXJnZXQgcGFja2FnZXMgZm9yIHRoZSBzdGFuZGFsb25lIFNESyIKK1BSID0gInI4IgorTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBsaWJnY2MgXAorICAgIGxpYmdjYy1kZXYgXAorICAgIGxpYnN0ZGMrKyBcCisgICAgbGlic3RkYysrLWRldiBcCisgICAgJHtMSUJDX0RFUEVOREVOQ0lFU30gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtZGVidWcuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzQ3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLWRlYnVnLmJiCkBAIC0wLDAgKzEsMjAgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIkRlYnVnZ2luZyB0b29scyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitQUiA9ICJyMyIKKworTVRSQUNFID0gIiIKK01UUkFDRV9saWJjLWdsaWJjID0gImxpYmMtbXRyYWNlIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgZ2RiIFwKKyAgICBnZGJzZXJ2ZXIgXAorICAgIHN0cmFjZSBcCisgICAgJHtNVFJBQ0V9IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXByb2ZpbGUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmNTkzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtcHJvZmlsZS5iYgpAQCAtMCwwICsxLDgxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAwOCBPcGVuZWRIYW5kIEx0ZC4KKyMKKworU1VNTUFSWSA9ICJQcm9maWxpbmcgdG9vbHMiCitMSUNFTlNFID0gIk1JVCIKKworUFIgPSAicjMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwCisKK1BST0ZJTEVfVE9PTFNfWCA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdzeXNwcm9mJywgJycsIGQpfSIKKyMgc3lzcHJvZiBkb2Vzbid0IHN1cHBvcnQgYWFyY2g2NAorUFJPRklMRV9UT09MU19YX2FhcmNoNjQgPSAiIgorUFJPRklMRV9UT09MU19TWVNURU1EID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kLWFuYWx5emUnLCAnJywgZCl9IgorCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisgICAgcGVyZiBcCisgICAgdHJhY2UtY21kIFwKKyAgICBibGt0cmFjZSBcCisgICAgJHtQUk9GSUxFX1RPT0xTX1h9IFwKKyAgICAke1BST0ZJTEVfVE9PTFNfU1lTVEVNRH0gXAorICAgICIKKworUFJPRklMRVRPT0xTID0gIlwKKyAgICBwb3dlcnRvcCBcCisgICAgbGF0ZW5jeXRvcCBcCisgICAgIgorCisjIHN5c3RlbXRhcCBuZWVkcyBlbGZ1dGlscyB3aGljaCBpcyBub3QgZnVsbHkgYnVpbGRhYmxlIG9uIHVjbGliYworIyBoZW5jZSB3ZSBleGNsdWRlIGl0IGZyb20gdWNsaWJjIGJhc2VkIGJ1aWxkcworU1lTVEVNVEFQID0gInN5c3RlbXRhcCIKK1NZU1RFTVRBUF9saWJjLXVjbGliYyA9ICIiCitTWVNURU1UQVBfbWlwcyA9ICIiCitTWVNURU1UQVBfbWlwczY0ID0gIiIKK1NZU1RFTVRBUF9taXBzNjRuMzIgPSAiIgorU1lTVEVNVEFQX2FhcmNoNjQgPSAiIgorCisjIGx0dG5nLXVzdCB1c2VzIHNjaGVkX2dldGNwdSgpIHdoaWNoIGlzIG5vdCB0aGVyZSBvbiB1Y2xpYmMKKyMgZm9yIHNvbWUgb2YgdGhlIGFyY2hpdGVjdHVyZXMgaXQgY2FuIGJlIHBhdGNoZWQgdG8gY2FsbCB0aGUKKyMgc3lzY2FsbCBkaXJlY3RseSBidXQgZm9yIHg4Nl82NCBfX05SX2dldGNwdSBpcyBhIHZzeXNjYWxsCisjIHdoaWNoIG1lYW5zIHdlIGNhbiBub3QgdXNlIHN5c2NhbGwoKSB0byBjYWxsIGl0LiBTbyB3ZSBpZ25vcmUKKyMgaXQgZm9yIHg4Nl82NC91Y2xpYmMKKworTFRUTkdVU1QgPSAibHR0bmctdXN0IgorTFRUTkdVU1RfbGliYy11Y2xpYmMgPSAiIgorTFRUTkdVU1RfYWFyY2g2NCA9ICIiCisKK0xUVE5HVE9PTFMgPSAibHR0bmctdG9vbHMiCitMVFROR1RPT0xTX2FhcmNoNjQgPSAiIgorCitMVFROR01PRFVMRVMgPSAibHR0bmctbW9kdWxlcyIKK0xUVE5HTU9EVUxFU19hYXJjaDY0ID0gIiIKKworQkFCRUxUUkFDRSA9ICJiYWJlbHRyYWNlIgorQkFCRUxUUkFDRV9hYXJjaDY0ID0gIiIKKworIyB2YWxncmluZCBkb2VzIG5vdCB3b3JrIG9uIG1pcHMKKworVkFMR1JJTkQgPSAidmFsZ3JpbmQiCitWQUxHUklORF9saWJjLXVjbGliYyA9ICIiCitWQUxHUklORF9taXBzID0gIiIKK1ZBTEdSSU5EX21pcHM2NCA9ICIiCitWQUxHUklORF9taXBzNjRuMzIgPSAiIgorVkFMR1JJTkRfYXJtID0gIiIKK1ZBTEdSSU5EX2FhcmNoNjQgPSAiIgorCisjICAgIGV4bWFwLWNvbnNvbGUKKyMgICAgZXhtYXAtc2VydmVyCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BST0ZJTEVUT09MU30gXAorICAgICR7TFRUTkdVU1R9IFwKKyAgICAke0xUVE5HVE9PTFN9IFwKKyAgICAke0xUVE5HTU9EVUxFU30gXAorICAgICR7QkFCRUxUUkFDRX0gXAorICAgICR7U1lTVEVNVEFQfSBcCisgICAgJHtWQUxHUklORH0gXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtdG9vbHMtdGVzdGFwcHMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YjM5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXRvb2xzLXRlc3RhcHBzLmJiCkBAIC0wLDAgKzEsNTYgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA4IE9wZW5lZEhhbmQgTHRkLgorIworCitTVU1NQVJZID0gIlRlc3RpbmcgdG9vbHMvYXBwbGljYXRpb25zIgorTElDRU5TRSA9ICJNSVQiCisKK1BSID0gInIyIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCisjIGtleGVjLXRvb2xzIGRvZXNuJ3Qgd29yayBvbiBNaXBzCitLRVhFQ1RPT0xTID89ICJrZXhlYyIKK0tFWEVDVE9PTFNfbWlwcyA/PSAiIgorS0VYRUNUT09MU19taXBzZWwgPz0gIiIKK0tFWEVDVE9PTFNfcG93ZXJwYyA/PSAiIgorS0VYRUNUT09MU19lNTUwMC02NGIgPz0gIiIKK0tFWEVDVE9PTFNfYWFyY2g2NCA/PSAiIgorCitYMTFHTFRPT0xTID0gIlwKKyAgICBtZXNhLWRlbW9zIFwKKyAgICBwaWdsaXQgXAorICAgICIKKworM0dUT09MUyA9ICJcCisgICAgb2Zvbm8tdGVzdHMgXAorICAgICIKKworWDExVE9PTFMgPSAiXAorICAgIGZzdGVzdHMgXAorICAgIGdzdC1wbGF5ZXItYmluIFwKKyAgICB4MTFwZXJmIFwKKyAgICB4cmVzdG9wIFwKKyAgICB4d2luaW5mbyBcCisgICAgeHByb3AgXAorICAgIHh2aWRlby10ZXN0cyBcCisgICAgIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgYmxrdG9vbCBcCisgICAgdHNsaWItY2FsaWJyYXRlIFwKKyAgICB0c2xpYi10ZXN0cyBcCisgICAgbHJ6c3ogXAorICAgICR7S0VYRUNUT09MU30gXAorICAgIGFsc2EtdXRpbHMtYW1peGVyIFwKKyAgICBhbHNhLXV0aWxzLWFwbGF5IFwKKyAgICBsdHAgXAorICAgIGNvbm5tYW4tdG9vbHMgXAorICAgIGNvbm5tYW4tdGVzdHMgXAorICAgIGNvbm5tYW4tY2xpZW50IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICIke1gxMVRPT0xTfSIsICIiLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExIG9wZW5nbCcsICIke1gxMUdMVE9PTFN9IiwgIiIsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICczZycsICIkezNHVE9PTFN9IiwgIiIsIGQpfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jcm9zcy1jYW5hZGlhbi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODBkZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4uYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJIb3N0IFNESyBwYWNrYWdlIGZvciBjcm9zcyBjYW5hZGlhbiB0b29sY2hhaW4iCitQTiA9ICJwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJHtNQUNISU5FfSIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNyb3NzLWNhbmFkaWFuIHBhY2thZ2Vncm91cAorCitQQUNLQUdFR1JPVVBfRElTQUJMRV9DT01QTEVNRU5UQVJZID0gIjEiCisKKyMgVXNlIGluZGlyZWN0aW9uIHRvIHN0b3AgdGhlc2UgYmVpbmcgZXhwYW5kZWQgcHJlbWF0dXJlbHkKK0JJTlVUSUxTID0gImJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitHQ0MgPSAiZ2NjLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitHREIgPSAiZ2RiLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke0BhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgJ0JJTlVUSUxTJyl9IFwKKyAgICAke0BhbGxfbXVsdGlsaWJfdHVuZV92YWx1ZXMoZCwgJ0dDQycpfSBcCisgICAgJHtAYWxsX211bHRpbGliX3R1bmVfdmFsdWVzKGQsICdHREInKX0gXAorICAgIG1ldGEtZW52aXJvbm1lbnQtJHtNQUNISU5FfSBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhiZTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQuYmIKQEAgLTAsMCArMSwyMDIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiU2VsZi1ob3N0aW5nIgorREVTQ1JJUFRJT04gPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gcnVuIHRoZSBidWlsZCBzeXN0ZW0iCitQUiA9ICJyMTMiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiBsaWJ4MTEtZGV2CitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9ICJcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZGVidWcgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGsgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWdyYXBoaWNzIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtaG9zdC10b29scyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQgPSAiXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1kZWJ1ZyBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLXNkayBcCisgICAgcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZ3JhcGhpY3MgXAorICAgIHBhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1ob3N0LXRvb2xzID0gIlwKKyAgICBjb25ubWFuIFwKKyAgICBjb25ubWFuLXBsdWdpbi1ldGhlcm5ldCBcCisgICAgZGhjcC1jbGllbnQgXAorICAgIGUyZnNwcm9ncyBcCisgICAgZTJmc3Byb2dzLWUyZnNjayBcCisgICAgZTJmc3Byb2dzLW1rZTJmcyBcCisgICAgZTJmc3Byb2dzLXR1bmUyZnMgXAorICAgIGhkcGFybSBcCisgICAgaXB0YWJsZXMgXAorICAgIGxzYiBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIHBhcnRlZCBcCisgICAgcHNldWRvIFwKKyAgICBzY3JlZW4gXAorICAgICIKKworUlJFQ09NTUVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWhvc3QtdG9vbHMgPSAiXAorICAgIGtlcm5lbC1tb2R1bGUtdHVuIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtcmF3IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtbmF0IFwKKyAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtbWFuZ2xlIFwKKyAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtZmlsdGVyIFwKKwkiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1zZWxmLWhvc3RlZC1zZGsgPSAiXAorICAgIGF1dG9jb25mIFwKKyAgICBhdXRvbWFrZSBcCisgICAgYmludXRpbHMgXAorICAgIGJpbnV0aWxzLXN5bWxpbmtzIFwKKyAgICBjY2FjaGUgXAorICAgIGNvcmV1dGlscyBcCisgICAgY3BwIFwKKyAgICBjcHAtc3ltbGlua3MgXAorICAgIGRpc3RjYyBcCisgICAgZ2xpYmMtZ2NvbnYtaWJtODUwIFwKKyAgICBmaWxlIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGcrKyBcCisgICAgZysrLXN5bWxpbmtzIFwKKyAgICBnY2MgXAorICAgIGdjYy1zeW1saW5rcyBcCisgICAgaW50bHRvb2wgXAorICAgIGxkZCBcCisgICAgbGVzcyBcCisgICAgbGlic3NwIFwKKyAgICBsaWJzc3AtZGV2IFwKKyAgICBsaWJzc3Atc3RhdGljZGV2IFwKKyAgICBsaWJzdGRjKysgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgIGxpYnRvb2wgXAorICAgIG1ha2UgXAorICAgIG1rdGVtcCBcCisgICAgcGVybC1tb2R1bGUtcmUgXAorICAgIHBlcmwtbW9kdWxlLXRleHQtd3JhcCBcCisgICAgcGtnY29uZmlnIFwKKyAgICBxdWlsdCBcCisgICAgc2VkIFwKKyAgICAiCisjIGdsaWJjLXV0aWxzOiBmb3IgcnBjZ2VuCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtc2RrX2FwcGVuZF9saWJjLWdsaWJjID0gIlwKKyAgICBnbGliYy11dGlscyBcCisgICAgIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWRlYnVnID0gIiBcCisgICAgZ2RiIFwKKyAgICBnZGJzZXJ2ZXIgXAorICAgIHJzeW5jIFwKKyAgICBzdHJhY2UgXAorICAgIHRjZi1hZ2VudCIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtc2VsZi1ob3N0ZWQtZXh0ZW5kZWQgPSAiXAorICAgIGJ6aXAyIFwKKyAgICBjaGtjb25maWcgXAorICAgIGNocnBhdGggXAorICAgIGNwaW8gXAorICAgIGN1cmwgXAorICAgIGRpZmZzdGF0IFwKKyAgICBkaWZmdXRpbHMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBleHBhdCBcCisgICAgZ2F3ayBcCisgICAgZ2RibSBcCisgICAgZ2V0dGV4dCBcCisgICAgZ2V0dGV4dC1ydW50aW1lIFwKKyAgICBnaXQgXAorICAgIGdpdC1wZXJsdG9vbHMgXAorICAgIGdyZXAgXAorICAgIGdyb2ZmIFwKKyAgICBnemlwIFwKKyAgICBzZXR0aW5ncy1kYWVtb24gXAorICAgIGhpY29sb3ItaWNvbi10aGVtZSBcCisgICAgc2F0by1pY29uLXRoZW1lIFwKKyAgICBsaWJhaW8gXAorICAgIGxpYnVzYjEgXAorICAgIGxpYnhtbDIgXAorICAgIGxyenN6IFwKKyAgICBsc29mIFwKKyAgICBsem8gXAorICAgIG1hbiBcCisgICAgbWFuLXBhZ2VzIFwKKyAgICBtZGFkbSBcCisgICAgbWluaWNvbSBcCisgICAgbXRvb2xzIFwKKyAgICBuY3Vyc2VzIFwKKyAgICBuY3Vyc2VzLXRlcm1pbmZvLWJhc2UgXAorICAgIG5lb24gXAorICAgIG5mcy11dGlscyBcCisgICAgbmZzLXV0aWxzLWNsaWVudCBcCisgICAgb3BlbnNzbCBcCisgICAgb3BlbnNzaC1zZnRwLXNlcnZlciBcCisgICAgb3BrZyBcCisgICAgb3BrZy11dGlscyBcCisgICAgcGF0Y2ggXAorICAgIHBlcmwgXAorICAgIHBlcmwtZGV2IFwKKyAgICBwZXJsLW1vZHVsZXMgXAorICAgIHBlcmwtcG9kIFwKKyAgICAke1BUSH0gXAorICAgIHB5dGhvbiBcCisgICAgcHl0aG9uLWNvbXBpbGVyIFwKKyAgICBweXRob24tZ2l0IFwKKyAgICBweXRob24tbWlzYyBcCisgICAgcHl0aG9uLW1vZHVsZXMgXAorICAgIHB5dGhvbi1ycG0gXAorICAgIHF1b3RhIFwKKyAgICByZWFkbGluZSBcCisgICAgcnBtIFwKKyAgICBzZXRzZXJpYWwgXAorICAgIHNvY2F0IFwKKyAgICBzdWJ2ZXJzaW9uIFwKKyAgICBzdWRvIFwKKyAgICBzeXNzdGF0IFwKKyAgICB0YXIgXAorICAgIHRjbCBcCisgICAgdGV4aTJodG1sIFwKKyAgICB0ZXhpbmZvIFwKKyAgICB1bnppcCBcCisgICAgdXNidXRpbHMgXAorICAgIHdhdGNoZG9nIFwKKyAgICB3Z2V0IFwKKyAgICB3aGljaCBcCisgICAgeGluZXRkIFwKKyAgICB6aXAgXAorICAgIHpsaWIgXAorICAgIHh6IFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLXNlbGYtaG9zdGVkLWdyYXBoaWNzID0gIlwKKyAgICBidWlsZGVyIFwKKyAgICBsaWJnbCBcCisgICAgbGliZ2wtZGV2IFwKKyAgICBsaWJnbHUgXAorICAgIGxpYmdsdS1kZXYgXAorICAgIGxpYnNkbCBcCisgICAgbGlic2RsLWRldiBcCisgICAgbGlieDExLWRldiBcCisgICAgcHl0aG9uLXB5Z3RrIFwKKyAgICBndGstdGhlbWUtY2xlYXJsb29rcyBcCisgICAgeGRnLXV0aWxzIFwKKyAgICBlcGlwaGFueSBcCisgICAgbGVhZnBhZCBcCisgICAgcGNtYW5mbSBcCisgICAgdnRlIFwKKyAgICAiCitQVEggPSAicHRoIgorUFRIX2xpYmMtdWNsaWJjID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy8wMDAxLXBzcGxhc2gtZmItQ29udmVydC1wc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwtdG8tYS1zdGF0aWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiM2M2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvMDAwMS1wc3BsYXNoLWZiLUNvbnZlcnQtcHNwbGFzaF9mYl9wbG90X3BpeGVsLXRvLWEtc3RhdGljLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK0Zyb20gOGY1ZGUxMmNjNzViZmFhODQwMGFkZjMyZjMwYzAxNWQ4ZjgxMzU0MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIyIEF1ZyAyMDE1IDA3OjEyOjIwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHBzcGxhc2gtZmI6IENvbnZlcnQgcHNwbGFzaF9mYl9wbG90X3BpeGVsKCkgdG8gYSBzdGF0aWMKKyBpbmxpbmUKKworVGhpcyBmdW5jdGlvbiBpcyBub3QgdXNlZCBvdXRzaWRlIHBzcGxhc2gtZmIuYyBhbmQgYnkgbWFraW5nIGl0CitzdGF0aWMgaW5saW5lIHdlIGtlZXAgdGhlIHBlcmZvcm1hbmNlIGFuZCBhbHNvIG1ha2UgaXQgcG9ydGFibGUgYWNyb3NzCittdWx0aXBsZSBjb21waWxlcnMgYW5kIGdjYyB2ZXJzaW9ucworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHBzcGxhc2gtZmIuYyB8IDIgKy0KKyBwc3BsYXNoLWZiLmggfCA4IC0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3BzcGxhc2gtZmIuYyBiL3BzcGxhc2gtZmIuYworaW5kZXggYmQ5Y2Q5ZC4uNmQyMzVkYiAxMDA2NDQKKy0tLSBhL3BzcGxhc2gtZmIuYworKysrIGIvcHNwbGFzaC1mYi5jCitAQCAtMjYwLDcgKzI2MCw3IEBAIHBzcGxhc2hfZmJfbmV3IChpbnQgYW5nbGUpCisgCisgI2RlZmluZSBPRkZTRVQoZmIseCx5KSAoKCh5KSAqIChmYiktPnN0cmlkZSkgKyAoKHgpICogKChmYiktPmJwcCA+PiAzKSkpCisgCistaW5saW5lIHZvaWQKKytzdGF0aWMgaW5saW5lIHZvaWQKKyBwc3BsYXNoX2ZiX3Bsb3RfcGl4ZWwgKFBTcGxhc2hGQiAgICAqZmIsCisgCQkgICAgICAgaW50ICAgICAgICAgIHgsCisgCQkgICAgICAgaW50ICAgICAgICAgIHksCitkaWZmIC0tZ2l0IGEvcHNwbGFzaC1mYi5oIGIvcHNwbGFzaC1mYi5oCitpbmRleCA0MjU5MmVkLi5jNmMzMTQ0IDEwMDY0NAorLS0tIGEvcHNwbGFzaC1mYi5oCisrKysgYi9wc3BsYXNoLWZiLmgKK0BAIC01NywxNCArNTcsNiBAQCBwc3BsYXNoX2ZiX2Rlc3Ryb3kgKFBTcGxhc2hGQiAqZmIpOworIFBTcGxhc2hGQioKKyBwc3BsYXNoX2ZiX25ldyAoaW50IGFuZ2xlKTsKKyAKKy1pbmxpbmUgdm9pZAorLXBzcGxhc2hfZmJfcGxvdF9waXhlbCAoUFNwbGFzaEZCICAgICpmYiwgCistCQkgICAgICAgaW50ICAgICAgICAgIHgsIAorLQkJICAgICAgIGludCAgICAgICAgICB5LCAKKy0JCSAgICAgICB1aW50OCAgICAgICAgcmVkLAorLQkJICAgICAgIHVpbnQ4ICAgICAgICBncmVlbiwKKy0JCSAgICAgICB1aW50OCAgICAgICAgYmx1ZSk7CistCisgdm9pZAorIHBzcGxhc2hfZmJfZHJhd19yZWN0IChQU3BsYXNoRkIgICAgKmZiLCAKKyAJCSAgICAgIGludCAgICAgICAgICB4LCAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL2ZpbGVzL3BzcGxhc2gtaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmM4NWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLWluaXQKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoIAorIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgICAgcHNwbGFzaAorIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIFMKKyMgRGVmYXVsdC1TdG9wOgorIyMjIEVORCBJTklUIElORk8KKworcmVhZCBDTURMSU5FIDwgL3Byb2MvY21kbGluZQorZm9yIHggaW4gJENNRExJTkU7IGRvCisgICAgICAgIGNhc2UgJHggaW4KKyAgICAgICAgcHNwbGFzaD1mYWxzZSkKKwkJZWNobyAiQm9vdCBzcGxhc2hzY3JlZW4gZGlzYWJsZWQiIAorCQlleGl0IDA7CisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZG9uZQorCitleHBvcnQgVE1QRElSPS9tbnQvLnBzcGxhc2gKK21vdW50IHRtcGZzIC10IHRtcGZzICRUTVBESVIgLW8sc2l6ZT00MGsKKworcm90YXRpb249MAoraWYgWyAtZSAvZXRjL3JvdGF0aW9uIF07IHRoZW4KKwlyZWFkIHJvdGF0aW9uIDwgL2V0Yy9yb3RhdGlvbgorZmkKKworL3Vzci9iaW4vcHNwbGFzaCAtLWFuZ2xlICRyb3RhdGlvbiAmCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oIGIvbWV0YS9yZWNpcGVzLWNvcmUvcHNwbGFzaC9maWxlcy9wc3BsYXNoLXBva3ktaW1nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1NmFhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvZmlsZXMvcHNwbGFzaC1wb2t5LWltZy5oCkBAIC0wLDAgKzEsMTI1OSBAQAorLyogR2RrUGl4YnVmIFJHQiBDLVNvdXJjZSBpbWFnZSBkdW1wIDEtYnl0ZS1ydW4tbGVuZ3RoLWVuY29kZWQgKi8KKworI2RlZmluZSBQT0tZX0lNR19ST1dTVFJJREUgKDE5MjApCisjZGVmaW5lIFBPS1lfSU1HX1dJRFRIICg2NDApCisjZGVmaW5lIFBPS1lfSU1HX0hFSUdIVCAoNDgwKQorI2RlZmluZSBQT0tZX0lNR19CWVRFU19QRVJfUElYRUwgKDMpIC8qIDM6UkdCLCA0OlJHQkEgKi8KKyNkZWZpbmUgUE9LWV9JTUdfUkxFX1BJWEVMX0RBVEEgKCh1aW50OCopIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjM3XDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxIiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NCIgXAorICAiXDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzYzXDM3NlwzNzdcMzc0XDNcMzczXDM3NSIgXAorICAiXDM3MlwzNjBcMzY2XDM3MFwzNTNcMzYwXDM2M1wyMDJcMzQ3XDM1NVwzNTdcNVwzNDZcMzU0XDM1NlwzNDdcMzU1XDM1NyIgXAorICAiXDM1MVwzNTZcMzYwXDM2MFwzNjZcMzcwXDM3MVwzNzNcMzcwXDM2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNTNcMzc2XDM3N1wzNzRcMTBcMzU2IiBcCisgICJcMzYzXDM2NlwzMjRcMzMxXDMzM1wyNzdcMzA0XDMwNlwyNTJcMjYyXDI3MlwyMjdcMjM3XDI0N31cMjIwXDIzM3BcMjAzIiBcCisgICJcMjE2ZXdcMjAyXDIxMl1velwxMGR2XDIwMW5cMjAxXDIxNH5cMjE1XDIyM1wyMTZcMjM2XDI0NFwyNDdcMjU3XDI2NyIgXAorICAiXDI3NFwzMDFcMzAzXDMyMFwzMjZcMzMwXDM1MlwzNTdcMzYyXDM1M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNDZcMzc2XDM3N1wzNzRcNVwzNjYiIFwKKyAgIlwzNzBcMzY0XDMyMFwzMjZcMzMwXDI1NVwyNjVcMjc1XDIxMFwyMjdcMjM1an1cMjEwXDIzMl1velw1Z3lcMjA0XDIwNCIgXAorICAiXDIyM1wyMzFcMjUwXDI2MFwyNzBcMzE0XDMyMVwzMjRcMzU1XDM2MlwzNjVcMzQ2XDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM0MlwzNzZcMzc3IiBcCisgICJcMzc0XDVcMzczXDM3NVwzNzJcMzI3XDMzNFwzMzdcMjUzXDI2M1wyNzN4XDIxM1wyMjdecHtcMjQzXW96XDRxXDIwNCIgXAorICAiXDIxN1wyNDJcMjUyXDI2MlwzMjBcMzI2XDMzMFwzNjVcMzcyXDM3NVwzNDJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzM3XDM3NlwzNzdcMzc0IiBcCisgICJcNFwzNzFcMzczXDM3MFwzMTdcMzI0XDMyN1wyMjVcMjQ1XDI1M2V3XDIwMlwyNTJdb3pcNGJ0XDE3N1wyMTFcMjMwXDIzNiIgXAorICAiXDMwNlwzMTRcMzE2XDM2N1wzNzFcMzY2XDMzN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzVcMzc2XDM3N1wzNzRcM1wzMzNcMzQwXDM0M1wyMzYiIFwKKyAgIlwyNDZcMjU2ZnhcMjAzXDI2MF1velwzYnRcMTc3XDIyNVwyMzVcMjQ1XDMyMFwzMjZcMzMwXDMzNVwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMzIiIFwKKyAgIlwzNzZcMzc3XDM3NFwzXDM2N1wzNzFcMzY2XDI3NlwzMDNcMzA1dVwyMTBcMjI0XDI2Nl1velwzbVwyMDBcMjEzXDI1NyIgXAorICAiXDI2N1wyNzdcMzU1XDM2MlwzNjVcMzMyXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMzMFwzNzZcMzc3XDM3NFwzXDM1M1wzNjBcMzYzXDI1MlwyNjIiIFwKKyAgIlwyNzJmeFwyMDNcMjcyXW96XDNhc35cMjMwXDI1MFwyNTZcMzQyXDM0N1wzNTJcMzMwXDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMyNlwzNzZcMzc3IiBcCisgICJcMzc0XDNcMzUyXDM1N1wzNjJcMjM2XDI0NlwyNTZhc35cMjc2XW96XDNecHtcMjE2XDIzNlwyNDRcMzQxXDM0NlwzNTEiIFwKKyAgIlwzMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMzI0XDM3NlwzNzdcMzc0XDNcMzU0XDM2MVwzNjRcMjQ2XDI1NlwyNjZhc35cMzAyXW96XDNecCIgXAorICAie1wyMjdcMjM3XDI0N1wzNDZcMzU0XDM1NlwzMjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzIyXDM3NlwzNzdcMzc0XDNcMzcyXDM3NFwzNzFcMjY1IiBcCisgICJcMjc2XDMwNmZ4XDIwM1wzMDZdb3pcM2FzflwyNTBcMjYwXDI3MFwzNjJcMzY3XDM3MVwzMjJcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzIxXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMjBcMzI2XDMzMHBcMjAzXDIxNlwzMTJdb3pcMmh6XDIwNVwzMDJcMzA3XDMxMlwzMjFcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwzMTdcMzc2XDM3N1wzNzRcMlwzNTZcMzYzXDM2NlwyMzFcMjQxXDI1MVwzMTZdb3pcMlwyMDRcMjIzXDIzMVwzNDVcMzUyIiBcCisgICJcMzU1XDMxN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wzMTZcMzc2XDM3N1wzNzRcMlwzMTFcMzE2XDMyMWl7XDIwNlwzMjBdb3pcMmJ0XDE3N1wyNjQiIFwKKyAgIlwyNzRcMzA1XDMxNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMTRcMzc2XDM3N1wzNzRcMlwzNjJcMzY3XDM3MVwyMjZcMjQ2XDI1NFwzMjRdbyIgXAorICAielwyXDIwNlwyMjVcMjMzXDM1M1wzNjBcMzYzXDMxNFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMTNcMzc2XDM3N1wzNzRcMlwzMzRcMzQyXDM0NG9cMjAyIiBcCisgICJcMjE1XDMyNl1velwyZ3lcMjA0XDMxNVwzMjJcMzI1XDMxM1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMTJcMzc2XDM3N1wzNzRcMlwzMDJcMzA3XDMxMiIgXAorICAiYXN+XDMzMF1velwzXnB7XDI1NFwyNjRcMjc0XDM3M1wzNzVcMzcyXDMxMVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMTBcMzc2XDM3N1wzNzRcMlwzNzIiIFwKKyAgIlwzNzRcMzcxXDIzNlwyNDZcMjU2XDMzNF1velwyXDIxMFwyMjdcMjM1XDM2MFwzNjZcMzcwXDMxMFwzNzZcMzc3XDM3NCIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDciIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDM2MFwzNjZcMzcwXDIwNVwyMjRcMjMyXDMzNl1velwyc1wyMDZcMjIxXDM0N1wzNTVcMzU3IiBcCisgICJcMzA3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDMwNlwzNzZcMzc3XDM3NFwyXDM0N1wzNTVcMzU3dFwyMDdcMjIyXDM0MF1velwyaXtcMjA2XDMzMyIgXAorICAiXDM0MFwzNDNcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDMwNVwzNzZcMzc3XDM3NFwyXDM0M1wzNTBcMzUzan1cMjEwXDI1MV1velw3YnRcMTc3IiBcCisgICJ3XDIxMlwyMjZcMjE1XDIzNFwyNDNcMjM2XDI0NlwyNTZcMjQ2XDI1NlwyNjZcMjU0XDI2NFwyNzRcMjY0XDI3NFwzMDUiIFwKKyAgIlwyMDJcMzAwXDMwNVwzMTBcN1wyNjRcMjc0XDMwNVwyNTVcMjY1XDI3NVwyNTBcMjYwXDI3MFwyMzNcMjUyXDI2MVwyMjIiIFwKKyAgIlwyNDFcMjQ3flwyMTVcMjIzZXdcMjAyXDI1MV1velwyY3VcMjAwXDMyMlwzMzBcMzMyXDMwNVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzMDRcMzc2IiBcCisgICJcMzc3XDM3NFwyXDMzN1wzNDRcMzQ2aXtcMjA2XDI0NV1velw1an1cMjEwXDIzMFwyNDBcMjUwXDI3MFwzMDBcMzExXDMyMiIgXAorICAiXDMzMFwzMzJcMzUxXDM1NlwzNjBcMjIwXDM3NlwzNzdcMzc0XDVcMzU0XDM2MVwzNjRcMzI2XDMzM1wzMzVcMzAwXDMwNSIgXAorICAiXDMxMFwyMzZcMjQ2XDI1NnBcMjAzXDIxNlwyNDVdb3pcMmFzflwzMTZcMzIzXDMyNlwzMDRcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzAzXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMzVcMzQzXDM0NWd5XDIwNFwyNDJdb3pcNGV3XDIwMlwyMjJcMjQxXDI0N1wyNzZcMzAzXDMwNVwzNDIiIFwKKyAgIlwzNDdcMzUyXDIzMlwzNzZcMzc3XDM3NFw0XDM1MlwzNTdcMzYyXDMwNFwzMTFcMzE0XDIzM1wyNDNcMjUzan1cMjEwIiBcCisgICJcMjQyXW96XDJhc35cMzEzXDMyMFwzMjJcMzAzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwMlwzNzZcMzc3XDM3NFwyXDM0MVwzNDZcMzUxaHoiIFwKKyAgIlwyMDVcMjQwXW96XDRfcXxcMjExXDIzMFwyMzZcMzA3XDMxNVwzMTdcMzcwXDM3MlwzNjdcMjQwXDM3NlwzNzdcMzc0IiBcCisgICJcNFwzNzNcMzc1XDM3MlwzMjBcMzI2XDMzMFwyMzFcMjQxXDI1MWJ0XDE3N1wyNDBdb3pcMmFzflwzMTdcMzI0XDMyNyIgXAorICAiXDMwMlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzMDFcMzc2XDM3N1wzNzRcMlwzNDNcMzUwXDM1M2l7XDIwNlwyMzddb3pcM3FcMjA0XDIxN1wyNjYiIFwKKyAgIlwyNzdcMzA3XDM1NFwzNjFcMzY0XDI0NlwzNzZcMzc3XDM3NFwzXDM2NlwzNzBcMzY0XDMwM1wzMTBcMzEzXDE3N1wyMTYiIFwKKyAgIlwyMjRcMjM3XW96XDJidFwxNzdcMzI1XDMzMlwzMzRcMzAxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDMwMFwzNzZcMzc3XDM3NFwyXDM1NVwzNjJcMzY1IiBcCisgICJsXDE3N1wyMTJcMjM2XW96XDN1XDIxMFwyMjRcMzA3XDMxNVwzMTdcMzczXDM3NVwzNzJcMjUzXDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzMjRcMzMxXDMzM1wyMDRcMjIzXDIzMVwyMzZdb3pcMmV3XDIwMlwzNDFcMzQ2XDM1MVwzMDBcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjc3XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNjVcMzcyXDM3NVwxNzdcMjE2XDIyNFwyMzVdb3pcMn5cMjE1XDIyM1wzMTVcMzIyXDMyNVwyNjAiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDMzMVwzMzZcMzQxXDIxMVwyMzBcMjM2XDIzNV1velwybFwxNzdcMjEyXDM1M1wzNjBcMzYzIiBcCisgICJcMjc3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDI3N1wzNzZcMzc3XDM3NFwxXDIxNFwyMzNcMjQyXDIzNF1velwyaXtcMjA2XDMwNVwzMTJcMzE1IiBcCisgICJcMjY0XDM3NlwzNzdcMzc0XDJcMzI0XDMzMVwzMzNxXDIwNFwyMTdcMjM0XW96XDJ1XDIxMFwyMjRcMzY3XDM3MVwzNjYiIFwKKyAgIlwyNzZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjc2XDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjMzXW96XDNecHtcMjQyXDI1MlwyNjJcMzYyIiBcCisgICJcMzY3XDM3MVwyNjZcMzc2XDM3N1wzNzRcM1wzNzJcMzc0XDM3MVwyNjFcMjcxXDMwMmJ0XDE3N1wyMzNdb3pcMVwyMjUiIFwKKyAgIlwyMzVcMjQ1XDI3NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzVcMzc2XDM3N1wzNzRcMlwzMTdcMzI0XDMyN15we1wyMzJdb3pcMndcMjEyXDIyNiIgXAorICAiXDMzNVwzNDNcMzQ1XDI3MlwzNzZcMzc3XDM3NFwyXDM1MVwzNTZcMzYwXDIxMVwyMzBcMjM2XDIzM11velwxXDI2NFwyNzQiIFwKKyAgIlwzMDVcMjc1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI3NFwzNzZcMzc3XDM3NFwyXDM0N1wzNTVcMzU3ZXdcMjAyXDIzMl1velwyXDI0MlwyNTIiIFwKKyAgIlwyNjJcMzcxXDM3M1wzNzBcMjI1XDM3NlwzNzdcMzc0XDEwXDMzNlwzNjdcMzc0XDI2MlwzNTVcMzcwXDIyMFwzNDNcMzYxIiBcCisgICJtXDMzMlwzNjFHXDMxN1wzNTMsXDMxMVwzNTIoXDMwN1wzNTAjXDMwNFwzNDZcMjAyXDBcMzAxXDM1MFwxMFwwXDMwNCIgXAorICAiXDM1MihcMzA3XDM1MCxcMzExXDM1MkJcMzE0XDM0N2lcMzI2XDM1NlwyMDdcMzQxXDM2NFwyNjBcMzUzXDM2NlwzMzMiIFwKKyAgIlwzNjRcMzcxXDIyNlwzNzZcMzc3XDM3NFwyXDI2NlwyNzdcMzA3YXN+XDIzMV1velwyX3F8XDMyN1wzMzRcMzM3XDI3NCIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI3M1wzNzZcMzc3XDM3NFwyXDM3M1wzNzVcMzcyfVwyMjBcMjMzXDIzMV1velwyZXdcMjAyXDMxM1wzMjAiIFwKKyAgIlwzMjJcMjIzXDM3NlwzNzdcMzc0XDRcMzM0XDM2NVwzNzJcMjMzXDM0NVwzNjRNXDMyM1wzNTdcMFwzMDRcMzUyXDIyMiIgXAorICAiXDI1XDI3NFwzNDRcNFwwXDMwMVwzNTBKXDMyMVwzNTVcMjExXDM0MlwzNjVcMzE0XDM2MVwzNzJcMjIzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzMzJcMzM3XDM0Mm1cMjAwXDIxM1wyMzFdb3pcMmxcMTc3XDIxMlwzNjBcMzY2XDM3MFwyNzNcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNzNcMzc2XDM3N1wzNzRcMVwyNTdcMjY3XDI3N1wyMzFdb3pcMnhcMjEzXDIyN1wzNDdcMzU1XDM1N1wyMjFcMzc2IiBcCisgICJcMzc3XDM3NFwzXDMzNlwzNjdcMzc0XDIwNlwzNDBcMzYzKlwzMTBcMzUxXDIzMlwyNVwyNzRcMzQ0XDMjXDMwNFwzNDYiIFwKKyAgIndcMzMzXDM1NlwzMTZcMzYzXDM3NFwyMjFcMzc2XDM3N1wzNzRcMlwzNjBcMzY2XDM3MFwyMTRcMjMzXDI0MlwyMzFdIiBcCisgICJvelwxXDIyN1wyMzdcMjQ3XDI3M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzJcMzc2XDM3N1wzNzRcMlwzMzVcMzQzXDM0NV9xfFwyMzBdb3oiIFwKKyAgIlwyXDIxMFwyMjdcMjM1XDM2NFwzNzFcMzc0XDIxN1wzNzZcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDI1NlwzNTBcMzY0IiBcCisgICJCXDMxNFwzNDdcMjQwXDI1XDI3NFwzNDRcMypcMzEwXDM1MVwyMzNcMzQ1XDM2NFwzNjdcMzc1XDM3N1wyMTdcMzc2XDM3NyIgXAorICAiXDM3NFwyXDM3M1wzNzVcMzcyXDI0MlwyNTJcMjYyXDIzMV1velwxXDMwNVwzMTJcMzE1XDI3MlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzFcMzc2IiBcCisgICJcMzc3XDM3NFwyXDM3MlwzNzRcMzcxd1wyMTJcMjI2XDIzMF1velwyXDIzMVwyNDFcMjUxXDM3MlwzNzRcMzcxXDIxNiIgXAorICAiXDM3NlwzNzdcMzc0XDNcMzY3XDM3NVwzNzdcMjMzXDM0NVwzNjQoXDMwN1wzNTBcMjQ0XDI1XDI3NFwzNDRcM1wwXDMwMiIgXAorICAiXDM1MVwyMDZcMzQwXDM2M1wzNTZcMzczXDM3NFwyMTdcMzc2XDM3N1wzNzRcMVwyNTdcMjY3XDI3N1wyMzBdb3pcMmgiIFwKKyAgInpcMjA1XDM1NlwzNjNcMzY2XDI3MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNzFcMzc2XDM3N1wzNzRcMVwyNTdcMjY3XDI3N1wyMzBdb3pcMVwyNDYiIFwKKyAgIlwyNTZcMjY2XDIxN1wzNzZcMzc3XDM3NFwyXDIzN1wzNTBcMzY3XDBcMzA0XDM1MlwyNTBcMjVcMjc0XDM0NFwzXDBcMjc2IiBcCisgICJcMzQ1XDIwN1wzNDFcMzY0XDM3MFwzNzZcMzc3XDIxNlwzNzZcMzc3XDM3NFwyXDI3N1wzMDRcMzA2X3F8XDIyN11veiIgXAorICAiXDFcMjMxXDI0MVwyNTFcMjcxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI3MFwzNzZcMzc3XDM3NFwyXDM0NlwzNTRcMzU2YnRcMTc3XDIyN11velwxIiBcCisgICJcMjUxXDI2MVwyNzFcMjE2XDM3NlwzNzdcMzc0XDJcMzE1XDM2MlwzNzMxXDMxM1wzNTRcMjU0XDI1XDI3NFwzNDRcMiIgXAorICAiKFwzMDdcMzUwXDI2MlwzNTVcMzcwXDIxNlwzNzZcMzc3XDM3NFwyXDMwNVwzMTJcMzE1XnB7XDIyN11velwxXDMyMlwzMzAiIFwKKyAgIlwzMzJcMjcwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI3MFwzNzZcMzc3XDM3NFwxXDIxNVwyMzRcMjQzXDIyN11velwxXDIzM1wyNTJcMjYxXDIxNSIgXAorICAiXDM3NlwzNzdcMzc0XDNcMzY3XDM3NVwzNzdtXDMzMlwzNjFcMFwyNzZcMzQ1XDI1N1wyNVwyNzRcMzQ0XDJMXDMyMlwzNTYiIFwKKyAgIlwzNTZcMzczXDM3NFwyMTVcMzc2XDM3N1wzNzRcMVwyNzRcMzAxXDMwM1wyMjddb3pcMnRcMjA3XDIyMlwzNzNcMzc1IiBcCisgICJcMzcyXDI2N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjdcMzc2XDM3N1wzNzRcMVwzMjVcMzMyXDMzNFwyMjddb3pcMlwyMTRcMjMzXDI0MlwzNzMiIFwKKyAgIlwzNzVcMzcyXDIxNFwzNzZcMzc3XDM3NFwyXDMzM1wzNjRcMzcxLFwzMTFcMzUyXDI2MlwyNVwyNzRcMzQ0XDJcMFwzMDQiIFwKKyAgIlwzNTJcMzAxXDM1NlwzNjZcMjE1XDM3NlwzNzdcMzc0XDFcMjUyXDI2MlwyNzJcMjI3XW96XDFcMjc0XDMwMVwzMDNcMjY3IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjY3XDM3NlwzNzdcMzc0XDF2XDIxMVwyMjVcMjI2XW96XDJcMjA1XDIyNFwyMzJcMzY1XDM3MlwzNzUiIFwKKyAgIlwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjY0XDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVcMjAzIiBcCisgICJcMzM0XDM2MFwzNzBcMzc2XDM3N1wyMTRcMzc2XDM3N1wzNzRcMVwyMzZcMjQ2XDI1NlwyMjZdb3pcMmh6XDIwNVwzNjIiIFwKKyAgIlwzNjdcMzcxXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjZcMzc2XDM3N1wzNzRcMVwzMDdcMzE1XDMxN1wyMjZdb3pcMm5cMjAxXDIxNCIgXAorICAiXDM2MFwzNjZcMzcwXDIxNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDI3MFwyNVwyNzRcMzQ0XDJJXDMyMFwzNTRcMzY2IiBcCisgICJcMzczXDM3NlwyMTNcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3MlwyMDNcMjIyXDIzMFwyMjZdb3pcMVwyNTRcMjY0XDI3NCIgXAorICAiXDI2NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMlwzNzNcMzc1XDM3MnNcMjA2XDIyMVwyMjVdb3pcMmFzflwzMzNcMzQwIiBcCisgICJcMzQzXDIxM1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3TVwzMjNcMzU3XDI3MlwyNVwyNzRcMzQ0XDIiIjFcMzEzXDM1NCIgXAorICAiXDM1NlwzNzNcMzc0XDIxM1wzNzZcMzc3XDM3NFwyXDM1M1wzNjBcMzYzaXtcMjA2XDIyNV1velwyZXdcMjAyXDM1N1wzNjUiIFwKKyAgIlwzNjdcMjY1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2NVwzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyNl1velwxXDI2NVwyNzZcMzA2XDIxMyIgXAorICAiXDM3NlwzNzdcMzc0XDJcMzY2XDM3M1wzNzZCXDMxNFwzNDdcMjc0XDI1XDI3NFwzNDRcMihcMzA3XDM1MFwzMzZcMzY3IiBcCisgICJcMzc0XDIxM1wzNzZcMzc3XDM3NFwyXDMyMlwzMzBcMzMyXnB7XDIyNV1velwxXDI1MlwyNjJcMjcyXDI2NVwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDI2NVwzNzZcMzc3XDM3NFwxdVwyMTBcMjI0XDIyNV1velwxXDIxNFwyMzNcMjQyXDIxM1wzNzZcMzc3XDM3NFwyXDM2NiIgXAorICAiXDM3M1wzNzZCXDMxNFwzNDdcMjc2XDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMzdcMzcwXDM3NVwyMTNcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDI1M1wyNjNcMjczXDIyNV1velwyZnhcMjAzXDM2N1wzNzFcMzY2XDI2NFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMyMlwzMzBcMzMyXDIyNV1velwyaXtcMjA2XDM2MFwzNjZcMzcwXDIxMlwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3IiBcCisgICJJXDMyMFwzNTRcMzAwXDI1XDI3NFwzNDRcMipcMzEwXDM1MVwzNTdcMzc0XDM3NVwyMTJcMzc2XDM3N1wzNzRcMlwzNzMiIFwKKyAgIlwzNzVcMzcyflwyMTVcMjIzXDIyNV1velwxXDI2NFwyNzRcMzA1XDI2NFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMVwyMTAiIFwKKyAgIlwyMjdcMjM1XDIyNV1velwxXDMwM1wzMTBcMzEzXDIxM1wzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDMwMlwyNVwyNzRcMzQ0IiBcCisgICJcMkJcMzE0XDM0N1wzNzBcMzc2XDM3N1wyMTJcMzc2XDM3N1wzNzRcMlwzMzVcMzQzXDM0NV5we1wyMjRdb3pcMm1cMjAwIiBcCisgICJcMjEzXDM3M1wzNzVcMzcyXDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjNcMzc2XDM3N1wzNzRcMlwzNDVcMzUyXDM1NV5we1wyMjRdb3oiIFwKKyAgIlwxflwyMjFcMjM1XDIxM1wzNzZcMzc3XDM3NFwxeVwzMzZcMzYwXDMwNFwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjEzIiBcCisgICJcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjVdb3pcMVwzMTVcMzIyXDMyNVwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyNTJcMjYyXDI3MlwyMjRdb3pcMl9xfFwzNDFcMzQ2XDM1MVwyMTJcMzc2XDM3N1wzNzRcMlwyNzRcMzU1IiBcCisgICJcMzczXDBcMjc2XDM0NVwzMDVcMjVcMjc0XDM0NFwxXDIyMFwzNDNcMzYxXDIxMlwzNzZcMzc3XDM3NFwyXDM2MFwzNjYiIFwKKyAgIlwzNzBpe1wyMDZcMjI0XW96XDFcMjExXDIzMFwyMzZcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MlwzNzZcMzc3XDM3NFwyXDM3MlwzNzRcMzcxIiBcCisgICJpe1wyMDZcMjI0XW96XDFcMjUwXDI2MFwyNzBcMjEyXDM3NlwzNzdcMzc0XDJcMzUwXDM3MVwzNzdcMFwzMDRcMzUyXDMwNiIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzE2XDM2M1wzNzRcMjEyXDM3NlwzNzdcMzc0XDFcMzAzXDMxMFwzMTNcMjI0IiBcCisgICJdb3pcMl5we1wzNTJcMzU3XDM2MlwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYyXDM3NlwzNzdcMzc0XDFcMzE1XDMyMlwzMjVcMjI0XW8iIFwKKyAgInpcMmR2XDIwMVwzNTdcMzY1XDM2N1wyMTJcMzc2XDM3N1wzNzRcMUdcMzE3XDM1M1wyNDBcMjVcMjc0XDM0NFwzXDBcMzAyIiBcCisgICJcMzUxLFwzMTFcMzUySlwzMjFcMzU1XDIwM0xcMzIyXDM1NlwyQlwzMTRcMzQ3I1wzMDRcMzQ2XDI0MFwyNVwyNzRcMzQ0IiBcCisgICJcMipcMzEwXDM1MVwzNjdcMzc1XDM3N1wyMTJcMzc2XDM3N1wzNzRcMXFcMjA0XDIxN1wyMjRdb3pcMVwyNTdcMjY3XDI3NyIgXAorICAiXDI2MlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzRcMVwyMzBcMjQwXDI1MFwyMjRdb3pcMVwyNDdcMjU3XDI2N1wyMTJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIzM1wzNDVcMzY0XDIzNVwyNVwyNzRcMzQ0XDQqXDMxMFwzNTFuXDMzM1wzNjJcMjczXDM1NFwzNzEiIFwKKyAgIlwzNjBcMzc1XDM3NlwyMTBcMzc2XDM3N1wzNzRcNFwzNTdcMzc0XDM3NVwzMDNcMzYxXDM3MFwyMDZcMzQwXDM2My9cMzEyIiBcCisgICJcMzUzXDIzNVwyNVwyNzRcMzQ0XDF3XDMzM1wzNTZcMjEyXDM3NlwzNzdcMzc0XDFcMzAzXDMxMFwzMTNcMjI0XW96XDEiIFwKKyAgInZcMjExXDIyNVwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVkdlwyMDFcMjIzXW96XDJhc34iIFwKKyAgIlwzNTNcMzYwXDM2M1wyMTFcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NFwwXDMwMlwzNTFcMjMyXDI1XDI3NFwzNDRcMyIgXAorICAiXDBcMjc2XDM0NW1cMzMyXDM2MVwzMzVcMzY2XDM3M1wyMjBcMzc2XDM3N1wzNzRcMlwzMzZcMzY3XDM3NChcMzA3XDM1MCIgXAorICAiXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjEyXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzEiIFwKKyAgIm5cMjAxXDIxNFwyMjRdb3pcMVwzNDNcMzUwXDM1M1wyNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYxXDM3NlwzNzdcMzc0XDFcMzEzXDMyMFwzMjIiIFwKKyAgIlwyMjRdb3pcMVwyMzNcMjUyXDI2MVwyMTJcMzc2XDM3N1wzNzRcMWtcMzI3XDM1N1wyMzFcMjVcMjc0XDM0NFwzXDBcMjc2IiBcCisgICJcMzQ1XDIwNlwzNDBcMzYzXDM1N1wzNzRcMzc1XDIyMlwzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIzMlwyNVwyNzRcMzQ0IiBcCisgICJcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMVwyNzZcMzAzXDMwNVwyMjRdb3pcMVwyNTdcMjY3IiBcCisgICJcMjc3XDI2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMVwyMjZcMjQ2XDI1NFwyMjNdb3pcMl5we1wzNDdcMzU1XDM1NyIgXAorICAiXDIxMVwzNzZcMzc3XDM3NFwyXDMxNlwzNjNcMzc0XDBcMjc2XDM0NVwyMzBcMjVcMjc0XDM0NFwySlwzMjFcMzU1XDMzNyIgXAorICAiXDM3MFwzNzVcMjIzXDM3NlwzNzdcMzc0XDFrXDMyN1wzNTdcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3IiBcCisgICJcMzc0XDIxNVwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3aXtcMjA2XDIyM11velwxXDE3N1wyMTZcMjI0XDI2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MVwzNzZcMzc3XDM3NFwxa35cMjExXDIyM11velwxXDIwNVwyMjRcMjMyXDIxMlwzNzZcMzc3XDM3NFwxSiIgXAorICAiXDMyMVwzNTVcMjI3XDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMjU3XDM1MVwzNjVcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMiIgXAorICAiXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxN1wzNzZcMzc3XDM3NFwxXDI0NlwyNTYiIFwKKyAgIlwyNjZcMjIzXW96XDJecHtcMzU2XDM2M1wzNjZcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDMzNVwzNDNcMzQ1IiBcCisgICJcMjI0XW96XDFcMzAzXDMxMFwzMTNcMjExXDM3NlwzNzdcMzc0XDJcMzMzXDM2NFwzNzFcMFwyNzZcMzQ1XDIyNlwyNSIgXAorICAiXDI3NFwzNDRcMiNcMzA0XDM0NlwzMTZcMzYzXDM3NFwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0IiBcCisgICJcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjIwXDM3NlwzNzdcMzc0XDFcMzM1XDM0M1wzNDVcMjI0XW96XDFcMzA2IiBcCisgICJcMzE0XDMxNlwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDFcMjY0XDI3NFwzMDVcMjIzXW96XDJjdVwyMDBcMzY3IiBcCisgICJcMzcxXDM2NlwyMTFcMzc2XDM3N1wzNzRcMWlcMzI2XDM1NlwyMjZcMjVcMjc0XDM0NFwyLFwzMTFcMzUyXDM0N1wzNzAiIFwKKyAgIlwzNzZcMjI0XDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NCIgXAorICAiXDIyMlwzNzZcMzc3XDM3NFwxdFwyMDdcMjIyXDIyM11velwxXDIzNlwyNDZcMjU2XDI2MFwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIxNVwyMzRcMjQzXDIyM11velwxXDIzMVwyNDFcMjUxXDIxMVwzNzZcMzc3XDM3NFwyXDM0N1wzNzAiIFwKKyAgIlwzNzZcMFwyNzZcMzQ1XDIyNVwyNVwyNzRcMzQ0XDIqXDMxMFwzNTFcMzU3XDM3NFwzNzVcMjI0XDM3NlwzNzdcMzc0IiBcCisgICJcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIyM1wzNzZcMzc3XDM3NFwxXDI2MSIgXAorICAiXDI3MVwzMDJcMjIzXW96XDFxXDIwNFwyMTdcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MFwzNzZcMzc3XDM3NFwxaXtcMjA2XDIyM11velwxIiBcCisgICJcMzE3XDMyNFwzMjdcMjExXDM3NlwzNzdcMzc0XDFcMjA3XDM0MVwzNjRcMjI1XDI1XDI3NFwzNDRcMiNcMzA0XDM0NiIgXAorICAiXDMzN1wzNzBcMzc1XDIyNFwzNzZcMzc3XDM3NFwxbVwzMzJcMzYxXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2IiBcCisgICJcMzY3XDM3NFwyMjRcMzc2XDM3N1wzNzRcMVwzNTFcMzU2XDM2MFwyMjRdb3pcMVwzNTZcMzYzXDM2NlwyNTdcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNTdcMzc2XDM3N1wzNzRcMVwzNDVcMzUyXDM1NVwyMjNdb3pcMmFzflwzNzBcMzcyXDM2N1wyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxLFwzMTFcMzUyXDIyNFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxM1wzNjBcMzcxXDIyNFwzNzZcMzc3XDM3NFwxIiBcCisgICJtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMjZcMzc2XDM3N1wzNzRcMXFcMjA0IiBcCisgICJcMjE3XDIyM11velwxXDMxNFwzMjFcMzI0XDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMVwzMTFcMzE2XDMyMVwyMjMiIFwKKyAgIl1velwxXDIwMlwyMjFcMjI3XDIxMVwzNzZcMzc3XDM3NFwxXDMyMFwzNjVcMzc2XDIyNVwyNVwyNzRcMzQ0XDFcMjA3IiBcCisgICJcMzQxXDM2NFwyMjRcMzc2XDM3N1wzNzRcMW1cMzMyXDM2MVwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjciIFwKKyAgIlwzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMjM3XDM1MFwzNjdcMjExXDM3NlwzNzdcMzc0XDFcMjM2IiBcCisgICJcMjQ2XDI1NlwyMjNdb3pcMVwyNTVcMjY1XDI3NVwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMjU0XDI2NFwyNzQiIFwKKyAgIlwyMjNdb3pcMVwyNTVcMjY1XDI3NVwyMTFcMzc2XDM3N1wzNzRcMXlcMzM2XDM2MFwyMjRcMjVcMjc0XDM0NFwyL1wzMTIiIFwKKyAgIlwzNTNcMzcwXDM3NlwzNzdcMjIzXDM3NlwzNzdcMzc0XDFtXDMzMlwzNjFcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0NyIgXAorICAiXDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwzXDIzNlwzNDdcMzY2XDBcMjc2XDM0NUpcMzIxXDM1NVwyMTFcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMxMVwzMTZcMzIxXDIyM11velwxXDIxNVwyMzRcMjQzXDI1N1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIxNFwyMzNcMjQyXDIyM11velwxXDMyNlwzMzNcMzM1XDIxMVwzNzZcMzc3XDM3NFwxLFwzMTFcMzUyXDIyNFwyNSIgXAorICAiXDI3NFwzNDRcMVwzMTJcMzU3XDM3MFwyMjNcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDUiIFwKKyAgIlwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDVcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDI1XDI3NFwzNDRcMCIgXAorICAiXDI3NlwzNDVcMzY3XDM3NVwzNzdcMjEwXDM3NlwzNzdcMzc0XDJcMzU2XDM2M1wzNjZecHtcMjIyXW96XDFvXDIwMlwyMTUiIFwKKyAgIlwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFvXDIwMlwyMTVcMjIyXW96XDJhc35cMzY2XDM3M1wzNzZcMjEwXDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNTdcMzc0XDM3NVwwXDI3NlwzNDVcMjIzXDI1XDI3NFwzNDRcMUpcMzIxXDM1NVwyMjNcMzc2XDM3NyIgXAorICAiXDM3NFwxblwzMzNcMzYyXDIzMlwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0IiBcCisgICJcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcMVwyNzRcMzU1XDM3M1wyMTFcMzc2XDM3N1wzNzQiIFwKKyAgIlwxdVwyMTBcMjI0XDIyMl1velwyXnB7XDM3MFwzNzJcMzY3XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMlwzNzNcMzc1IiBcCisgICJcMzcyX3F8XDIyMl1velwxdVwyMTBcMjI0XDIxMVwzNzZcMzc3XDM3NFwxXDI2MVwzNTRcMzY3XDIyNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwzMTJcMzU3XDM3MFwyMjJcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNiIgXAorICAiXDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIwNFwyNVwyNzRcMzQ0XDFcMjA0IiBcCisgICJcMzM1XDM2MVwyMTFcMzc2XDM3N1wzNzRcMVwyMzBcMjQwXDI1MFwyMjNdb3pcMVwzNDJcMzQ3XDM1MlwyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNTZcMzc2XDM3N1wzNzRcMVwzNTFcMzU2XDM2MFwyMjNdb3pcMVwyMjVcMjM1XDI0NVwyMTFcMzc2XDM3N1wzNzRcMSIgXAorICAiblwzMzNcMzYyXDIyM1wyNVwyNzRcMzQ0XDEsXDMxMVwzNTJcMjIyXDM3NlwzNzdcMzc0XDFuXDMzM1wzNjJcMjMyXDI1IiBcCisgICJcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NSIgXAorICAiXDIwNVwyNVwyNzRcMzQ0XDFCXDMxNFwzNDdcMjExXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjIzXW96XDFcMzE3IiBcCisgICJcMzI0XDMyN1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMzI2XDMzM1wzMzVcMjIzXW96XDFcMjUzXDI2M1wyNzMiIFwKKyAgIlwyMTFcMzc2XDM3N1wzNzRcMUJcMzE0XDM0N1wyMjNcMjVcMjc0XDM0NFwxXDIxMVwzNDJcMzY1XDIyMVwzNzZcMzc3IiBcCisgICJcMzc0XDFuXDMzM1wzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMDZcMjVcMjc0XDM0NFwxXDBcMzAyXDM1MVwyMTFcMzc2XDM3N1wzNzRcMSIgXAorICAiXDMwN1wzMTVcMzE3XDIyM11velwxXDI3NlwzMDNcMzA1XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0IiBcCisgICJcMzE2XDIyM11velwxXDMwNVwzMTJcMzE1XDIxMVwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIyM1wyNVwyNzRcMzQ0XDEiIFwKKyAgIlwzMzdcMzcwXDM3NVwyMjBcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMzJcMjVcMjc0XDM0NFwyJVwzMDVcMzQ3XDMzNiIgXAorICAiXDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxMFwyNVwyNzRcMzQ0XDFcMzU2IiBcCisgICJcMzczXDM3NFwyMTBcMzc2XDM3N1wzNzRcMVwzMzdcMzQ0XDM0NlwyMjNdb3pcMVwyNTNcMjYzXDI3M1wyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNTZcMzc2XDM3N1wzNzRcMVwyNzRcMzAxXDMwM1wyMjNdb3pcMVwzMzNcMzQwXDM0M1wyMTBcMzc2XDM3N1wzNzRcMiIgXAorICAiXDM2N1wzNzVcMzc3XDBcMjc2XDM0NVwyMjJcMjVcMjc0XDM0NFwxKFwzMDdcMzUwXDIyMFwzNzZcMzc3XDM3NFwxXDIzMSIgXAorICAiXDM0MlwzNjJcMjMyXDI1XDI3NFwzNDRcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzYiIFwKKyAgIlwzNDdcMzY2XDBcMjc2XDM0NVwyMTFcMjVcMjc0XDM0NFwxXDMwMlwzNTdcMzY3XDIxMFwzNzZcMzc3XDM3NFwyXDM2NCIgXAorICAiXDM3MVwzNzRecHtcMjIyXW96XDFcMjM2XDI0NlwyNTZcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI1N1wyNjciIFwKKyAgIlwyNzdcMjIzXW96XDFcMzUzXDM2MFwzNjNcMjEwXDM3NlwzNzdcMzc0XDFcMzE2XDM2M1wzNzRcMjIzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXFxcMzI2XDM1NVwyMTdcMzc2XDM3N1wzNzRcMlwzMjBcMzY1XDM3NlwzMVwyNzVcMzQ1XDIzMVwyNVwyNzRcMzQ0IiBcCisgICJcMiVcMzA1XDM0N1wzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjEyXDI1IiBcCisgICJcMjc0XDM0NFwxXDIzN1wzNTBcMzY3XDIxMVwzNzZcMzc3XDM3NFwxZ3lcMjA0XDIyMl1velwxXDIxNlwyMzZcMjQ0XDI1NiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDI0MlwyNTJcMjYyXDIyM11velwxXDM2NlwzNzBcMzY0XDIxMFwzNzZcMzc3IiBcCisgICJcMzc0XDFcMjYyXDM1NVwzNzBcMjIzXDI1XDI3NFwzNDRcMVwyMjBcMzQzXDM2MVwyMTdcMzc2XDM3N1wzNzRcMUpcMzIxIiBcCisgICJcMzU1XDIzMVwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0NyIgXAorICAiXDM2NlwwXDI3NlwzNDVcMjEzXDI1XDI3NFwzNDRcMVwyMTFcMzQyXDM2NVwyMTFcMzc2XDM3N1wzNzRcMW1cMjAwXDIxMyIgXAorICAiXDIyMl1velwxXDIwNFwyMjNcMjMxXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwyMjZcMjQ2XDI1NFwyMjNdbyIgXAorICAielwyMTFcMzc2XDM3N1wzNzRcMVwyMzdcMzUwXDM2N1wyMjNcMjVcMjc0XDM0NFwxXDI2MlwzNTVcMzcwXDIxNlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzUwXDM3MVwzNzdcMFwyNzZcMzQ1XDIzMFwyNVwyNzRcMzQ0XDIlXDMwNVwzNDdcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMTRcMzc2XDM3N1wzNzRcMlwyMzZcMzQ3XDM2NlwwXDI3NlwzNDVcMjE0XDI1XDI3NFwzNDRcMW5cMzMzXDM2MlwyMTEiIFwKKyAgIlwzNzZcMzc3XDM3NFwxdVwyMTBcMjI0XDIyMl1velwxeVwyMTRcMjMwXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzMVwyNDFcMjUxXDIyMl1velwxY3VcMjAwXDIxMVwzNzZcMzc3XDM3NFwxXDIzM1wzNDVcMzY0XDIyM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwzMTZcMzYzXDM3NFwyMTZcMzc2XDM3N1wzNzRcMVwyMzVcMzQ2XDM2NVwyMzBcMjVcMjc0XDM0NFwyJVwzMDUiIFwKKyAgIlwzNDdcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM2XDM0N1wzNjZcMFwyNzZcMzQ1XDIxNVwyNVwyNzRcMzQ0IiBcCisgICJcMWtcMzI3XDM1N1wyMTFcMzc2XDM3N1wzNzRcMVwyMDBcMjE3XDIyNVwyMjJdb3pcMXVcMjEwXDIyNFwyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNTZcMzc2XDM3N1wzNzRcMVwyMjJcMjQxXDI0N1wyMjJdb3pcMWp9XDIxMFwyMTFcMzc2XDM3N1wzNzRcMVwyMjBcMzQzIiBcCisgICJcMzYxXDIyM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjE2XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjI3XDI1XDI3NCIgXAorICAiXDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDIzNlwzNDdcMzY2XDBcMjc2XDM0NVwyMTYiIFwKKyAgIlwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjExXDM3NlwzNzdcMzc0XDFcMjEwXDIyN1wyMzVcMjIyXW96XDFzXDIwNlwyMjEiIFwKKyAgIlwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjExXDIzMFwyMzZcMjIyXW96XDFuXDIwMVwyMTRcMjExXDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMjNcMjVcMjc0XDM0NFwxXDM1MFwzNzFcMzc3XDIxNlwzNzZcMzc3XDM3NFwxIiBcCisgICJpXDMyNlwzNTZcMjI2XDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTRcMzc2XDM3N1wzNzRcMlwyMzYiIFwKKyAgIlwzNDdcMzY2XDBcMjc2XDM0NVwyMTdcMjVcMjc0XDM0NFwxTVwzMjNcMzU3XDIxMVwzNzZcMzc3XDM3NFwxXDIxNVwyMzQiIFwKKyAgIlwyNDNcMjIyXW96XDFtXDIwMFwyMTNcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3XDM3NFwxXDIyMlwyNDFcMjQ3XDIyMl1vIiBcCisgICJ6XDFsXDE3N1wyMTJcMjExXDM3NlwzNzdcMzc0XDFcMjA3XDM0MVwzNjRcMjIzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDIxNlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIyNVwyNVwyNzRcMzQ0XDIjXDMwNFwzNDZcMzM2XDM2N1wzNzRcMjE0IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyMzVcMzQ2XDM2NVwwXDI3NlwzNDVcMjIwXDI1XDI3NFwzNDRcMU1cMzIzXDM1N1wyMTFcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIyMl1velwxc1wyMDZcMjIxXDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIzMVwyNDFcMjUxXDIyMl1velwxZXdcMjAyXDIxMVwzNzZcMzc3XDM3NFwxXDIzMVwzNDJcMzYyXDIyM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwzMjBcMzY1XDM3NlwyMTZcMzc2XDM3N1wzNzRcMVwyMjFcMzQ0XDM2MlwyMjRcMjVcMjc0XDM0NFwyI1wzMDQiIFwKKyAgIlwzNDZcMzM2XDM2N1wzNzRcMjE0XDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMFwyNzZcMzQ1XDIyMVwyNVwyNzRcMzQ0IiBcCisgICJcMWlcMzI2XDM1NlwyMTFcMzc2XDM3N1wzNzRcMVwyMDJcMjIxXDIyN1wyMjJdb3pcMXVcMjEwXDIyNFwyNTZcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNTZcMzc2XDM3N1wzNzRcMVwyNDJcMjUyXDI2MlwyMjJdb3pcMV5we1wyMTFcMzc2XDM3N1wzNzRcMVwyMzdcMzUwIiBcCisgICJcMzY3XDIyM1wyNVwyNzRcMzQ0XDFcMzAxXDM1NlwzNjZcMjE2XDM3NlwzNzdcMzc0XDFcMzMzXDM2NFwzNzFcMjIzXDI1IiBcCisgICJcMjc0XDM0NFwyI1wzMDRcMzQ2XDMzNlwzNjdcMzc0XDIxNFwzNzZcMzc3XDM3NFwyXDM1NlwzNzNcMzc0XDBcMjc2XDM0NSIgXAorICAiXDIyMlwyNVwyNzRcMzQ0XDFuXDMzM1wzNjJcMjExXDM3NlwzNzdcMzc0XDF3XDIxMlwyMjZcMjIyXW96XDFcMjAyXDIyMSIgXAorICAiXDIyN1wyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjQ2XDI1NlwyNjZcMjIzXW96XDFcMzcwXDM3MlwzNjdcMjEwIiBcCisgICJcMzc2XDM3N1wzNzRcMVwyNjBcMzUzXDM2NlwyMjNcMjVcMjc0XDM0NFwxXDIzM1wzNDVcMzY0XDIxN1wzNzZcMzc3XDM3NCIgXAorICAiXDEsXDMxMVwzNTJcMjIxXDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTVcMzc2XDM3N1wzNzRcMVwzMTIiIFwKKyAgIlwzNTdcMzcwXDIyM1wyNVwyNzRcMzQ0XDFcMjA0XDMzNVwzNjFcMjExXDM3NlwzNzdcMzc0XDFvXDIwMlwyMTVcMjIyIiBcCisgICJdb3pcMVwyMDVcMjI0XDIzMlwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjUyXDI2MlwyNzJcMjIzXW96XDFcMzU1IiBcCisgICJcMzYyXDM2NVwyMTBcMzc2XDM3N1wzNzRcMVwzMTRcMzYxXDM3MlwyMjNcMjVcMjc0XDM0NFwxbVwzMzJcMzYxXDIxNyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjczXDM1NFwzNzFcMjIwXDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3XDM3NFwyMTYiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDIzM1wzNDVcMzY0XDIyM1wyNVwyNzRcMzQ0XDFcMjM2XDM0N1wzNjZcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMWl7XDIwNlwyMjJdb3pcMVwyMTFcMjMwXDIzNlwyNTZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU2XDM3NlwzNzdcMzc0XDFcMjY2XDI3N1wzMDciIFwKKyAgIlwyMjNdb3pcMVwzNDBcMzQ1XDM1MFwyMTBcMzc2XDM3N1wzNzRcMVwzNTZcMzczXDM3NFwyMjNcMjVcMjc0XDM0NFwxIiBcCisgICIsXDMxMVwzNTJcMjIwXDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjE2XDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMzZcMzY3IiBcCisgICJcMzc0XDIxN1wzNzZcMzc3XDM3NFwxXFxcMzI2XDM1NVwyMjNcMjVcMjc0XDM0NFwxXDI3NFwzNTVcMzczXDIxMFwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFfcXxcMjIyXW96XDFcMjI2XDI0NlwyNTRcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1NlwzNzZcMzc3IiBcCisgICJcMzc0XDFcMzA3XDMxNVwzMTdcMjIzXW96XDFcMzEzXDMyMFwzMjJcMjExXDM3NlwzNzdcMzc0XDFcMFwzMDJcMzUxXDIyMiIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzU3XDM3NFwzNzVcMjE3XDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdHXDMxNyIgXAorICAiXDM1M1wyMTRcMjVcMjc0XDM0NFwyKFwzMDdcMzUwXDMzNlwzNjdcMzc0XDIyMFwzNzZcMzc3XDM3NFwxJVwzMDVcMzQ3IiBcCisgICJcMjIzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMTBcMzc2XDM3N1wzNzRcMVwzNDNcMzUwXDM1M1wyMjNdb3pcMSIgXAorICAiXDI1NFwyNjRcMjc0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwzMjdcMzM0XDMzN1wyMjNdb3pcMVwyNTdcMjY3IiBcCisgICJcMjc3XDIxMVwzNzZcMzc3XDM3NFwxQlwzMTRcMzQ3XDIyM1wyNVwyNzRcMzQ0XDFcMjM3XDM1MFwzNjdcMjIwXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzNzBcMzc2XDM3N25cMzMzXDM2MlwzMVwyNzVcMzQ1XDIxMVwyNVwyNzRcMzQ0XDJKXDMyMVwzNTUiIFwKKyAgIlwzNTZcMzczXDM3NFwyMjBcMzc2XDM3N1wzNzRcMVwzMTVcMzYyXDM3M1wyMjNcMjVcMjc0XDM0NFwxXDBcMzAxXDM1MCIgXAorICAiXDIxMVwzNzZcMzc3XDM3NFwxXDMxNlwzMjNcMzI2XDIyM11velwxXDI3NlwzMDNcMzA1XDI1NlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2IiBcCisgICJcMzc3XDM3NFwxXDM0NlwzNTRcMzU2XDIyM11velwxXDIyNVwyNDVcMjUzXDIxMVwzNzZcMzc3XDM3NFwxa1wzMjdcMzU3IiBcCisgICJcMjIzXDI1XDI3NFwzNDRcMUdcMzE3XDM1M1wyMjJcMzc2XDM3N1wzNzRcM1wzMjBcMzY1XDM3NlpcMzI1XDM1NFwwXDMwMSIgXAorICAiXDM1MFwyMDRcMjVcMjc0XDM0NFwzXDBcMjc2XDM0NUdcMzE3XDM1M1wyNzRcMzU1XDM3M1wyMjJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxd1wzMzNcMzU2XDIyM1wyNVwyNzRcMzQ0XDEiIjNcMzE0XDM1NVwyMTFcMzc2XDM3N1wzNzRcMVwyNjRcMjc0XDMwNSIgXAorICAiXDIyM11velwxXDMxNVwzMjJcMzI1XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNTZcMzc2XDM3N1wzNzRcMVwzNjZcMzczXDM3NlwyMjNdbyIgXAorICAielwxelwyMTVcMjMxXDIxMVwzNzZcMzc3XDM3NFwxXDIzN1wzNTBcMzY3XDIyM1wyNVwyNzRcMzQ0XDJcMzFcMjc1XDM0NSIgXAorICAiXDMzNVwzNjZcMzczXDIyM1wzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNlwzNjNcMzc0XDIwMlwyNjFcMzU0XDM2NyIgXAorICAiXDJcMzEzXDM2MFwzNzFcMzY2XDM3M1wzNzZcMjIzXDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMFwzMDJcMzUxXDIyMyIgXAorICAiXDI1XDI3NFwzNDRcMW5cMzMzXDM2MlwyMTFcMzc2XDM3N1wzNzRcMVwyMzBcMjUwXDI1NlwyMjNdb3pcMVwzMzRcMzQyIiBcCisgICJcMzQ0XDI1NlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyNTdcMzc2XDM3N1wzNzRcMW1cMjAwXDIxM1wyMjJdb3pcMWV3XDIwMlwyMTFcMzc2XDM3NyIgXAorICAiXDM3NFwxXDM0N1wzNzBcMzc2XDIyNFwyNVwyNzRcMzQ0XDFtXDMzMlwzNjFcMjU0XDM3NlwzNzdcMzc0XDFcMjMzXDM0NSIgXAorICAiXDM2NFwyMjRcMjVcMjc0XDM0NFwxXDI2MVwzNTRcMzY3XDIxMVwzNzZcMzc3XDM3NFwxfVwyMjBcMjMzXDIyM11velwxIiBcCisgICJcMzY2XDM3MFwzNjRcMjU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI1N1wzNzZcMzc3XDM3NFwxXDIxMVwyMzBcMjM2XDIyM11velwxXDMzNVwzNDMiIFwKKyAgIlwzNDVcMjExXDM3NlwzNzdcMzc0XDElXDMwNVwzNDdcMjIzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzM2XDM2N1wzNzQiIFwKKyAgIlwyNTJcMzc2XDM3N1wzNzRcMlwzNjdcMzc1XDM3NyNcMzA0XDM0NlwyMjNcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDVcMzU3IiBcCisgICJcMzc0XDM3NVwyMTBcMzc2XDM3N1wzNzRcMlwzNzBcMzcyXDM2N2FzflwyMjJdb3pcMW1cMjAwXDIxM1wyNTdcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyNTdcMzc2XDM3N1wzNzRcMVwyNTFcMjYxXDI3MVwyMjNdb3pcMVwyNjRcMjc0XDMwNVwyMTFcMzc2XDM3N1wzNzRcMSIgXAorICAia1wzMjdcMzU3XDIyNFwyNVwyNzRcMzQ0XDFMXDMyMlwzNTZcMjUyXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjI0IiBcCisgICJcMjVcMjc0XDM0NFwxIiIzXDMxNFwzNTVcMjExXDM3NlwzNzdcMzc0XDFcMzIyXDMzMFwzMzJcMjIzXW96XDFcMjExXDIzMCIgXAorICAiXDIzNlwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMzA1XDMxMlwzMTVcMjIzXW96XDFcMjExXDIzMFwyMzZcMjExIiBcCisgICJcMzc2XDM3N1wzNzRcMVwzMDFcMzU2XDM2NlwyMjVcMjVcMjc0XDM0NFwxXDI2MlwzNTVcMzcwXDI1MFwzNzZcMzc3XDM3NCIgXAorICAiXDJcMzM0XDM2NVwzNzJcMFwyNzZcMzQ1XDIyNFwyNVwyNzRcMzQ0XDFcMjIwXDM0M1wzNjFcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMVwyNTJcMjYyXDI3MlwyMjNdb3pcMVwyNTFcMjYxXDI3MVwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDFcMzM3XDM0NCIgXAorICAiXDM0NlwyMjNdb3pcMmV3XDIwMlwzNzNcMzc1XDM3MlwyMTBcMzc2XDM3N1wzNzRcMlwzNzBcMzc2XDM3NyNcMzA0XDM0NiIgXAorICAiXDIyNFwyNVwyNzRcMzQ0XDJcMFwzMDJcMzUxXDM0N1wzNzBcMzc2XDI0NlwzNzZcMzc3XDM3NFwyXDM2N1wzNzVcMzc3IiBcCisgICIsXDMxMVwzNTJcMjI0XDI1XDI3NFwzNDRcMlwwXDI3NlwzNDVcMzM3XDM3MFwzNzVcMjExXDM3NlwzNzdcMzc0XDFcMTc3IiBcCisgICJcMjE2XDIyNFwyMjNdb3pcMVwzMDVcMzEyXDMxNVwyNTdcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjU3XDM3NlwzNzdcMzc0XDJcMzczXDM3NVwzNzIiIFwKKyAgImR2XDIwMVwyMjNdb3pcMVwzMzFcMzM2XDM0MVwyMTFcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMjVcMjVcMjc0XDM0NCIgXAorICAiXDJCXDMxNFwzNDdcMzcwXDM3NlwzNzdcMjQ1XDM3NlwzNzdcMzc0XDFpXDMyNlwzNTZcMjI1XDI1XDI3NFwzNDRcMUIiIFwKKyAgIlwzMTRcMzQ3XDIxMVwzNzZcMzc3XDM3NFwyXDM2MlwzNjdcMzcxX3F8XDIyM11velwxXDM0NlwzNTRcMzU2XDI1N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MFwzNzZcMzc3XDM3NFwxXDIxMFwyMjdcMjM1XDIyM11velwxXDI0NlwyNTZcMjY2XDIxMVwzNzZcMzc3XDM3NCIgXAorICAiXDFcMzE2XDM2M1wzNzRcMjI2XDI1XDI3NFwzNDRcMk1cMzIzXDM1N1wzNzBcMzc2XDM3N1wyNDNcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIwNlwzNDBcMzYzXDIyNlwyNVwyNzRcMzQ0XDFcMjU2XDM1MFwzNjRcMjExXDM3NlwzNzdcMzc0XDFcMzAxXDMwNiIgXAorICAiXDMxMVwyMjNdb3pcMWt+XDIxMVwyNjBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYwXDM3NlwzNzdcMzc0XDFcMjU3XDI2N1wyNzdcMjIzXW96XDJpIiBcCisgICJ7XDIwNlwzNzNcMzc1XDM3MlwyMTFcMzc2XDM3N1wzNzRcMUdcMzE3XDM1M1wyMjZcMjVcMjc0XDM0NFwyXFxcMzI2XDM1NSIgXAorICAiXDM3MFwzNzZcMzc3XDI0MVwzNzZcMzc3XDM3NFwxXDIyMFwzNDNcMzYxXDIyNlwyNVwyNzRcMzQ0XDJcMFwzMDRcMzUyIiBcCisgICJcMzcwXDM3NlwzNzdcMjExXDM3NlwzNzdcMzc0XDFcMjA0XDIyM1wyMzFcMjIzXW96XDFcMjMwXDI0MFwyNTBcMjYwXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMjYwXDM3NlwzNzdcMzc0XDFcMzMxXDMzNlwzNDFcMjI0XW96XDFcMzE3XDMyNFwzMjdcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMDFcMzU2XDM2NlwyMjdcMjVcMjc0XDM0NFwySlwzMjFcMzU1XDM2N1wzNzVcMzc3XDIzN1wzNzZcMzc3XDM3NCIgXAorICAiXDF3XDMzM1wzNTZcMjI3XDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMTFcMzc2XDM3N1wzNzRcMlwzNTFcMzU2XDM2MCIgXAorICAiXnB7XDIyM11velwxXDI3N1wzMDRcMzA2XDI2MFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjBcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MWN1IiBcCisgICJcMjAwXDIyM11velwxXDIyMlwyNDFcMjQ3XDIxMlwzNzZcMzc3XDM3NFwxL1wzMTJcMzUzXDIyN1wyNVwyNzRcMzQ0XDIiIFwKKyAgIixcMzExXDM1MlwzMzRcMzY1XDM3MlwyMzRcMzc2XDM3N1wzNzRcMlwzNTZcMzczXDM3NElcMzIwXDM1NFwyMjdcMjVcMjc0IiBcCisgICJcMzQ0XDJcMFwzMDFcMzUwXDM2NlwzNzNcMzc2XDIxMVwzNzZcMzc3XDM3NFwxXDI2MVwyNzFcMzAyXDIyNF1velwxXDM0MyIgXAorICAiXDM1MFwzNTNcMjYwXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDIxNlwyMzZcMjQ0XDIyM11velwyY3VcMjAwXDM2MiIgXAorICAiXDM2N1wzNzFcMjExXDM3NlwzNzdcMzc0XDFcMjYxXDM1NFwzNjdcMjMwXDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVcMjMzIiBcCisgICJcMzQ1XDM2NFwzNzBcMzc2XDM3N1wyMzFcMzc2XDM3N1wzNzRcMlwyNjJcMzU1XDM3MFwwXDMwNFwzNTJcMjMwXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIxMlwzNzZcMzc3XDM3NFwxc1wyMDZcMjIxXDIyM11velwxcVwyMDRcMjE3XDI2MVwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDI2MVwzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyNF1velwxXDI1N1wyNjdcMjc3XDIxMlwzNzZcMzc3XDM3NCIgXAorICAiXDFCXDMxNFwzNDdcMjMxXDI1XDI3NFwzNDRcMiIiMVwzMTNcMzU0XDMwM1wzNjFcMzcwXDIyNlwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzM0XDM2NVwzNzJKXDMyMVwzNTVcMjMxXDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzNjZcMzczXDM3NlwyMTFcMzc2XDM3NyIgXAorICAiXDM3NFwxXDMxNVwzMjJcMzI1XDIyNF1velwxXDI1MVwyNjFcMjcxXDI2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjFcMzc2XDM3N1wzNzRcMlwzNjIiIFwKKyAgIlwzNjdcMzcxYXN+XDIyM11velwyaHpcMjA1XDM3MFwzNzJcMzY3XDIxMVwzNzZcMzc3XDM3NFwyXDMzNFwzNjVcMzcyIiBcCisgICJcMFwyNzZcMzQ1XDIzMlwyNVwyNzRcMzQ0XDNCXDMxNFwzNDdcMjYyXDM1NVwzNzBcMzcwXDM3NlwzNzdcMjIxXDM3NiIgXAorICAiXDM3N1wzNzRcM1wzMTNcMzYwXDM3MUxcMzIyXDM1NlwwXDI3NlwzNDVcMjMyXDI1XDI3NFwzNDRcMVwyNTZcMzUwXDM2NCIgXAorICAiXDIxMlwzNzZcMzc3XDM3NFwxelwyMTVcMjMxXDIyNF1velwxXDMzM1wzNDBcMzQzXDI2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwN1wyMjZcMjM0XDIyNF1velwxXDI3MFwzMDBcMzExXDIxMlwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2IiBcCisgICJcMjM0XDI1XDI3NFwzNDRcNFwwXDMwNFwzNTJtXDMzMlwzNjFcMjczXDM1NFwzNzFcMzY2XDM3M1wzNzZcMjEyXDM3NiIgXAorICAiXDM3N1wzNzRcNFwzNzBcMzc2XDM3N1wzMDJcMzU3XDM2N3lcMzM2XDM2MChcMzA3XDM1MFwyMzRcMjVcMjc0XDM0NFwxIiBcCisgICJCXDMxNFwzNDdcMjEyXDM3NlwzNzdcMzc0XDFcMzI0XDMzMVwzMzNcMjI0XW96XDFrflwyMTFcMjYyXDM3NlwzNzdcMzc0IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2MiIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzAxXDMwNlwzMTFcMjI0XW96XDJrflwyMTFcMzcyXDM3NFwzNzFcMjExXDM3NlwzNzdcMzc0IiBcCisgICJcMlwzNjZcMzczXDM3NihcMzA3XDM1MFwyMzZcMjVcMjc0XDM0NFw1XDMxXDI3NVwzNDUsXDMxMVwzNTJNXDMyM1wzNTciIFwKKyAgInlcMzM2XDM2MFwyMTFcMzQyXDM2NVwyMDJcMjMzXDM0NVwzNjRcNVwyMjBcMzQzXDM2MVwyMDRcMzM1XDM2MVpcMzI1IiBcCisgICJcMzU0MVwzMTNcMzU0XDBcMjc2XDM0NVwyMzZcMjVcMjc0XDM0NFwyXDBcMzAxXDM1MFwzMzZcMzY3XDM3NFwyMTJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwNVwyMjRcMjMyXDIyNF1velwxXDI0NlwyNTZcMjY2XDI2MlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjJcMzc2XDM3N1wzNzQiIFwKKyAgIlwyXDM2N1wzNzFcMzY2ZHZcMjAxXDIyNF1velwxXDI3NFwzMDFcMzAzXDIxMlwzNzZcMzc3XDM3NFwyXDMxNVwzNjJcMzczIiBcCisgICJcMFwyNzZcMzQ1XDMwN1wyNVwyNzRcMzQ0XDFcMjM2XDM0N1wzNjZcMjEyXDM3NlwzNzdcMzc0XDFcMzI1XDMzMlwzMzQiIFwKKyAgIlwyMjVdb3pcMVwzNDFcMzQ2XDM1MVwyNjJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzdcMzc0XDFcMjM2XDI0NlwyNTZcMjI0XW8iIFwKKyAgInpcMmZ4XDIwM1wzNTZcMzYzXDM2NlwyMTJcMzc2XDM3N1wzNzRcMVwyMjFcMzQ0XDM2MlwzMDZcMjVcMjc0XDM0NFwxIiBcCisgICJNXDMyM1wzNTdcMjEyXDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzF0XDIwN1wyMjJcMjI0XW96XDFcMTc3XDIxNlwyMjQiIFwKKyAgIlwyNjNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjYzXDM3NlwzNzdcMzc0XDFcMzMzXDM0MFwzNDNcMjI1XW96XDFcMjI2XDI0NlwyNTRcMjEzXDM3NiIgXAorICAiXDM3N1wzNzRcMUxcMzIyXDM1NlwzMDRcMjVcMjc0XDM0NFwyLFwzMTFcMzUyXDM2NlwzNzNcMzc2XDIxMlwzNzZcMzc3IiBcCisgICJcMzc0XDFcMjY1XDI3NlwzMDZcMjI1XW96XDFcMzAyXDMwN1wzMTJcMjYzXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NFwzNzZcMzc3XDM3NFwxdVwyMTAiIFwKKyAgIlwyMjRcMjI0XW96XDJecHtcMzMxXDMzNlwzNDFcMjEyXDM3NlwzNzdcMzc0XDJcMzY2XDM3M1wzNzYvXDMxMlwzNTNcMzAyIiBcCisgICJcMjVcMjc0XDM0NFwyXDBcMzAyXDM1MVwzMzZcMzY3XDM3NFwyMTJcMzc2XDM3N1wzNzRcMlwzNTNcMzYwXDM2M2R2XDIwMSIgXAorICAiXDIyNF1velwyZHZcMjAxXDM2NFwzNzFcMzc0XDI2M1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjRcMzc2XDM3N1wzNzRcMVwzMDJcMzA3XDMxMlwyMjUiIFwKKyAgIl1velwyd1wyMTJcMjI2XDM3MlwzNzRcMzcxXDIxMlwzNzZcMzc3XDM3NFwyXDM1MFwzNzFcMzc3JVwzMDVcMzQ3XDMwMCIgXAorICAiXDI1XDI3NFwzNDRcMlwwXDMwMVwzNTBcMzE0XDM2MVwzNzJcMjEzXDM3NlwzNzdcMzc0XDFcMjI3XDIzN1wyNDdcMjI1IiBcCisgICJdb3pcMVwyNDZcMjU2XDI2NlwyNjRcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjY0XDM3NlwzNzdcMzc0XDJcMzcyXDM3NFwzNzFsXDE3N1wyMTJcMjI1IiBcCisgICJdb3pcMVwyNTJcMjYyXDI3MlwyMTNcMzc2XDM3N1wzNzRcMlwzMzdcMzcwXDM3NVwwXDMwNFwzNTJcMjc2XDI1XDI3NCIgXAorICAiXDM0NFwyXDBcMjc2XDM0NVwyNzRcMzU1XDM3M1wyMTNcMzc2XDM3N1wzNzRcMVwzMDVcMzEyXDMxNVwyMjVdb3pcMmEiIFwKKyAgInN+XDM1M1wzNjBcMzYzXDI2NFwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNjVcMzc2XDM3N1wzNzRcMVwyNzBcMzAwXDMxMVwyMjVdb3pcMl5we1wzMjIiIFwKKyAgIlwzMzBcMzMyXDIxM1wzNzZcMzc3XDM3NFwyXDMzMlwzNjNcMzcwI1wzMDRcMzQ2XDI3NFwyNVwyNzRcMzQ0XDJcMFwyNzYiIFwKKyAgIlwzNDVcMjczXDM1NFwzNzFcMjEzXDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNkdlwyMDFcMjI1XW96XDFcMjM2XDI0NiIgXAorICAiXDI1NlwyNjVcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMjY1XDM3NlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVoelwyMDVcMjI1XW96XDJpe1wyMDZcMzU0IiBcCisgICJcMzYxXDM2NFwyMTNcMzc2XDM3N1wzNzRcMlwzMzdcMzcwXDM3NSpcMzEwXDM1MVwyNzJcMjVcMjc0XDM0NFwyXDBcMzAyIiBcCisgICJcMzUxXDMxNFwzNjFcMzcyXDIxM1wzNzZcMzc3XDM3NFwyXDM3MVwzNzNcMzcweFwyMTNcMjI3XDIyNV1velwyX3F8XDM0NiIgXAorICAiXDM1NFwzNTZcMjY1XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDI2NlwzNzZcMzc3XDM3NFwxXDI2MVwyNzFcMzAyXDIyNl1velwyXDIwNVwyMjRcMjMyIiBcCisgICJcMzczXDM3NVwzNzJcMjEzXDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRCXDMxNFwzNDdcMjcwXDI1XDI3NFwzNDRcMiIgXAorICAiJVwzMDVcMzQ3XDMzNVwzNjZcMzczXDIxNFwzNzZcMzc3XDM3NFwxXDI0MlwyNTJcMjYyXDIyNl1velwxXDIzMVwyNDEiIFwKKyAgIlwyNTFcMjY2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2NlwzNzZcMzc3XDM3NFwyXDM3MFwzNzJcMzY3bVwyMDBcMjEzXDIyNl1velwxXDI0MiIgXAorICAiXDI1MlwyNjJcMjE0XDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzdpXDMyNlwzNTZcMjY2XDI1XDI3NFwzNDRcMkJcMzE0IiBcCisgICJcMzQ3XDM1MFwzNzFcMzc3XDIxNFwzNzZcMzc3XDM3NFwxXDI3N1wzMDRcMzA2XDIyNl1velwyYnRcMTc3XDM1MVwzNTYiIFwKKyAgIlwzNjBcMjY2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI2N1wzNzZcMzc3XDM3NFwxXDMwNVwzMTJcMzE1XDIyN11velwxXDI2MVwyNzFcMzAyXDIxNSIgXAorICAiXDM3NlwzNzdcMzc0XDJcMjUwXDM0N1wzNzFcMFwzMDFcMzUwXDI2MlwyNVwyNzRcMzQ0XDNcMzFcMjc1XDM0NVwyMDYiIFwKKyAgIlwzNDBcMzYzXDM3MFwzNzZcMzc3XDIxNFwzNzZcMzc3XDM3NFwyXDMxNlwzMjNcMzI2X3F8XDIyNl1velwxXDI1MVwyNjEiIFwKKyAgIlwyNzFcMjY3XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDI3MFwzNzZcMzc3XDM3NFwxeVwyMTRcMjMwXDIyNl1velwyXnB7XDMwMVwzMDZcMzExXDIxNSIgXAorICAiXDM3NlwzNzdcMzc0XDJcMzM1XDM2NlwzNzMvXDMxMlwzNTNcMjYwXDI1XDI3NFwzNDRcMiNcMzA0XDM0NlwzMTJcMzU3IiBcCisgICJcMzcwXDIxNVwzNzZcMzc3XDM3NFwyXDMzMFwzMzVcMzQwY3VcMjAwXDIyNl1velwyaHpcMjA1XDM2NlwzNzBcMzY0XDI2NyIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI3MFwzNzZcMzc3XDM3NFwxXDMzMlwzMzdcMzQyXDIzMFwyMjJcMjQxXDI0N1wxXDM1M1wzNjBcMzYzIiBcCisgICJcMjE1XDM3NlwzNzdcMzc0XDNcMzcwXDM3NlwzNzdcMjMxXDM0MlwzNjJcMFwzMDFcMzUwXDI1NFwyNVwyNzRcMzQ0XDMiIFwKKyAgIlwwXDI3NlwzNDV3XDMzM1wzNTZcMzY2XDM3M1wzNzZcMjE1XDM3NlwzNzdcMzc0XDJcMzY1XDM3MlwzNzVcMjM2XDI0NiIgXAorICAiXDI1NlwyMjdcMjIyXDI0MVwyNDdcMVwzMDdcMzE1XDMxN1wyNzBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQxXDM3NlwzNzdcMzc0XDNcMzU2XDM3MyIgXAorICAiXDM3NGlcMzI2XDM1NlwwXDI3NlwzNDVcMjUxXDI1XDI3NFwzNDRcMkpcMzIxXDM1NVwzMzVcMzY2XDM3M1wzNDFcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wzNDNcMzc2XDM3N1wzNzRcM1wzMTZcMzYzXDM3NFpcMzI1XDM1NFwzMVwyNzVcMzQ1XDI0NVwyNVwyNzRcMzQ0IiBcCisgICJcMkdcMzE3XDM1M1wzMDJcMzU3XDM2N1wzNDNcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzQ1XDM3NlwzNzdcMzc0XDNcMzM2XDM2N1wzNzRtXDMzMlwzNjEiIFwKKyAgIlwwXDI3NlwzNDVcMjQwXDI1XDI3NFwzNDRcM1wzMVwyNzVcMzQ1TVwzMjNcMzU3XDMxNlwzNjNcMzc0XDM0NVwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM0N1wzNzZcMzc3XDM3NFw0XDM2NlwzNzNcMzc2XDIzN1wzNTBcMzY3SVwzMjBcMzU0XDMxXDI3NVwzNDVcMjMyXDI1IiBcCisgICJcMjc0XDM0NFw0XDBcMjc2XDM0NUJcMzE0XDM0N1wyMzFcMzQyXDM2MlwzNTZcMzczXDM3NFwzNDdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzUyIiBcCisgICJcMzc2XDM3N1wzNzRcNFwzNTZcMzczXDM3NFwyMzVcMzQ2XDM2NVpcMzI1XDM1NCNcMzA0XDM0NlwyMjRcMjVcMjc0XDM0NCIgXAorICAiXDRcMFwzMDJcMzUxTFwzMjJcMzU2XDIyMVwzNDRcMzYyXDMzNlwzNjdcMzc0XDM1MlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNTZcMzc2XDM3NyIgXAorICAiXDM3NFw2XDMzNlwzNjdcMzc0XDIzN1wzNTBcMzY3d1wzMzNcMzU2TVwzMjNcMzU3LFwzMTFcMzUyXDBcMjc2XDM0NVwyMTAiIFwKKyAgIlwyNVwyNzRcMzQ0XDZcMFwyNzZcMzQ1KlwzMTBcMzUxSlwzMjFcMzU1blwzMzNcMzYyXDIzM1wzNDVcMzY0XDMyMFwzNjUiIFwKKyAgIlwzNzZcMzU2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMjIzXDM3N1wzNzdcMzc3XDM2NFwzNzZcMzc3XDM3NFwxMFwzNjdcMzc1XDM3N1wzNTZcMzczXDM3NFwzMzVcMzY2XDM3MyIgXAorICAiXDMxNlwzNjNcMzc0XDMxNVwzNjJcMzczXDMzNVwzNjZcMzczXDM1MFwzNzFcMzc3XDM2NlwzNzNcMzc2XDM2NFwzNzYiIFwKKyAgIlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2IiBcCisgICJcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzVcMzc2XDM3N1wzNzRcMjAyIiBcCisgICJcMzcwXDM3NlwzNzdcMjUwXDM3NlwzNzdcMzc0XDFcMzY3XDM3NVwzNzdcMjE3XDM3NlwzNzdcMzc0XDFcMzY3XDM3NSIgXAorICAiXDM3N1wyMzdcMzc2XDM3N1wzNzRcMVwzNjdcMzc1XDM3N1wyMzBcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDRcMjM3XDM1MCIgXAorICAiXDM2N1wwXDI3NlwzNDVcMzFcMjc1XDM0NVwyMDNcMzM0XDM2MFwyNDVcMzc2XDM3N1wzNzRcNVwzMTZcMzYzXDM3NCMiIFwKKyAgIlwzMDRcMzQ2XDI1XDI3NFwzNDRHXDMxN1wzNTNcMzY3XDM3NVwzNzdcMjEzXDM3NlwzNzdcMzc0XDVcMzM1XDM2NlwzNzMiIFwKKyAgIihcMzA3XDM1MFwyNVwyNzRcMzQ0QlwzMTRcMzQ3XDM2NlwzNzNcMzc2XDIzM1wzNzZcMzc3XDM3NFw1XDM1NlwzNzNcMzc0IiBcCisgICIvXDMxMlwzNTNcMjVcMjc0XDM0NCpcMzEwXDM1MVwzMzdcMzcwXDM3NVwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0IiBcCisgICJcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDM1N1wzNzRcMzc1XDI0NFwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwyNjBcMzUzXDM2NlwyMTNcMzc2XDM3N1wzNzRcMW5cMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwxIiBcCisgICJcMjM1XDM0NlwzNjVcMjMzXDM3NlwzNzdcMzc0XDFcMjMxXDM0MlwzNjJcMjAzXDI1XDI3NFwzNDRcMXlcMzM2XDM2MCIgXAorICAiXDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjMiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzRcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NCIgXAorICAiXDI0NFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzciIFwKKyAgIlwzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDAiIFwKKyAgIlwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwIiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyNDRcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDFcMjMxXDM0MlwzNjJcMjEzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2MyIgXAorICAiXDIzM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzciIFwKKyAgIlwzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3IiBcCisgICJcMzc0XDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzciIFwKKyAgIlwzNzRcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3IiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMzNcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3NFwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxIiBcCisgICJcMzM2XDM2N1wzNzRcMjQ0XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MiIgXAorICAiXDIxM1wzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwyMDZcMzQwXDM2M1wyMDNcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzRcMzc2XDM3NyIgXAorICAiXDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDI0NFwzNzZcMzc3XDM3NFwxSVwzMjAiIFwKKyAgIlwzNTRcMjAzXDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMTNcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjMzXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3IiBcCisgICJcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyMzJcMzc2XDM3N1wzNzRcN1wzMTFcMzE2XDMyMVwyMTFcMjMwXDIzNmp9XDIxMGN1XDIwMCIgXAorICAiblwyMDFcMjE0XDIzM1wyNDNcMjUzXDMzM1wzNDBcMzQzXDIwNlwzNzZcMzc3XDM3NFwyXDIzNlwyNDZcMjU2ZHZcMjAxIiBcCisgICJcMjA1XW96XDRfcXxrflwyMTFcMjIyXDI0MVwyNDdcMzM3XDM0NFwzNDZcMjEwXDM3NlwzNzdcMzc0XDdcMzIyXDMzMCIgXAorICAiXDMzMlwyMjJcMjQxXDI0N2xcMTc3XDIxMmN1XDIwMGt+XDIxMVwyMjJcMjQxXDI0N1wzMjJcMzMwXDMzMlwyMDZcMzc2IiBcCisgICJcMzc3XDM3NFwyXDI1N1wyNjdcMjc3Z3lcMjA0XDIwNV1velw0XnB7aXtcMjA2XDIxMVwyMzBcMjM2XDMyNVwzMzJcMzM0IiBcCisgICJcMjEwXDM3NlwzNzdcMzc0XDEwXDMxM1wzNjBcMzcxXFxcMzI2XDM1NSVcMzA1XDM0N1wwXDI3NlwzNDVcMFwzMDJcMzUxIiBcCisgICJHXDMxN1wzNTNcMjM3XDM1MFwzNjdcMzcwXDM3NlwzNzdcMjA1XDM3NlwzNzdcMzc0XDJcMjM1XDM0NlwzNjVcMFwzMDQiIFwKKyAgIlwzNTJcMjEyXDI1XDI3NFwzNDRcNFwwXDI3NlwzNDVcMFwzMDRcMzUyTVwzMjNcMzU3XDMxNVwzNjJcMzczXDIwNVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwN1wyNVwyNzRcMzQ0XDRcMFwzMDFcMzUwQlwzMTRcMzQ3XDIzM1wzNDVcMzY0IiBcCisgICJcMzcwXDM3NlwzNzdcMjA3XDM3NlwzNzdcMzc0XDdcMzAyXDM1N1wzNjdNXDMyM1wzNTcjXDMwNFwzNDZcMFwyNzZcMzQ1IiBcCisgICJcMFwzMDRcMzUySlwzMjFcMzU1XDI2MFwzNTNcMzY2XDIxMFwzNzZcMzc3XDM3NFw0XDMxNVwzNjJcMzczTVwzMjNcMzU3IiBcCisgICIjXDMwNFwzNDZcMzFcMjc1XDM0NVwyMDdcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwNFwzNzZcMzc3XDM3NFw0XDMyMyIgXAorICAiXDM2NFwzNjdcXFwzMjZcMzU1JVwzMDVcMzQ3XDBcMjc2XDM0NVwyMDdcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDEwXDMzNFwzNjVcMzcybVwzMzJcMzYxKFwzMDdcMzUwXDBcMjc2XDM0NVwwXDMwMlwzNTFCXDMxNCIgXAorICAiXDM0N1wyMzNcMzQ1XDM2NFwzNzBcMzc2XDM3N1wyMDdcMzc2XDM3N1wzNzRcNFwzMzZcMzY3XDM3NG1cMzMyXDM2MSgiIFwKKyAgIlwzMDdcMzUwXDBcMjc2XDM0NVwyMDdcMjVcMjc0XDM0NFwxa1wzMjdcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMzBcMzc2XDM3NyIgXAorICAiXDM3NFwyXDM1NlwzNjNcMzY2XDIwMlwyMjFcMjI3XDIwNl1velwzXnB7XDI0N1wyNTdcMjY3XDM3M1wzNzVcMzcyXDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDFcMzI3XDMzNFwzMzdcMjEyXW96XDJfcXxcMzAzXDMxMFwzMTNcMjA1XDM3NlwzNzdcMzc0XDIiIFwKKyAgIlwzNjRcMzcxXDM3NFwyMjJcMjQxXDI0N1wyMDddb3pcMlwyMjJcMjQxXDI0N1wzNzBcMzcyXDM2N1wyMDNcMzc2XDM3NyIgXAorICAiXDM3NFwyXDM1M1wzNjBcMzYzXnB7XDIxMl1velwxXDI1NFwyNjRcMjc0XDIwNVwzNzZcMzc3XDM3NFwyXDM3MFwzNzYiIFwKKyAgIlwzNzdtXDMzMlwzNjFcMjA3XDI1XDI3NFwzNDRcMkJcMzE0XDM0N1wzNTBcMzcxXDM3N1wyMDNcMzc2XDM3N1wzNzRcMiIgXAorICAiXDM3MFwzNzZcMzc3XDBcMjc2XDM0NVwyMTZcMjVcMjc0XDM0NFwyXDMxXDI3NVwzNDVcMjM1XDM0NlwzNjVcMjA0XDM3NiIgXAorICAiXDM3N1wzNzRcMVwwXDMwMVwzNTBcMjEyXDI1XDI3NFwzNDRcMkJcMzE0XDM0N1wzNTdcMzc0XDM3NVwyMDRcMzc2XDM3NyIgXAorICAiXDM3NFwyXDM2N1wzNzVcMzc3WlwzMjVcMzU0XDIwN1wyNVwyNzRcMzQ0XDJHXDMxN1wzNTNcMzU3XDM3NFwzNzVcMjA1IiBcCisgICJcMzc2XDM3N1wzNzRcMlwyMzVcMzQ2XDM2NVwzMVwyNzVcMzQ1XDIxMlwyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAzIiBcCisgICJcMzc2XDM3N1wzNzRcMlwyNTZcMzUwXDM2NFwwXDI3NlwzNDVcMjEyXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDQiIFwKKyAgIlwzNzZcMzc3XDM3NFwyXDIwNlwzNDBcMzYzXDMxXDI3NVwzNDVcMjA2XDI1XDI3NFwzNDRcMipcMzEwXDM1MVwzMzVcMzY2IiBcCisgICJcMzczXDIwNVwzNzZcMzc3XDM3NFwyXDMwMlwzNTdcMzY3XDBcMzAxXDM1MFwyMTJcMjVcMjc0XDM0NFwxa1wzMjdcMzU3IiBcCisgICJcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDIyN1wzNzZcMzc3XDM3NFwyXDM2NFwzNzFcMzc0dVwyMTBcMjI0XDIxMV1velwxXDI0MlwyNTIiIFwKKyAgIlwyNjJcMjAzXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjEzXW96XDJfcXxcMzI1XDMzMlwzMzRcMjAzXDM3NlwzNzciIFwKKyAgIlwzNzRcMlwzNzNcMzc1XDM3MlwyMTBcMjI3XDIzNVwyMTFdb3pcMlwyMTFcMjMwXDIzNlwzNzNcMzc1XDM3MlwyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMzMFwzMzVcMzQwXDIxNF1velwxXDMwNFwzMTFcMzE0XDIwNFwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2IiBcCisgICJcMjExXDI1XDI3NFwzNDRcMipcMzEwXDM1MVwzNjZcMzczXDM3NlwyMDJcMzc2XDM3N1wzNzRcMVwzNTdcMzc0XDM3NSIgXAorICAiXDIyMFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDI3NFwzNTVcMzczXDIwM1wzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFNXDMyM1wzNTdcMjA0XDM3NlwzNzdcMzc0XDFMXDMyMlwzNTZcMjExXDI1XDI3NFwzNDRcMiIiMyIgXAorICAiXDMxNFwzNTVcMzcwXDM3NlwzNzdcMjAzXDM3NlwzNzdcMzc0XDJcMzEzXDM2MFwzNzFcMFwyNzZcMzQ1XDIxM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMlwzMzNcMzY0XDM3MVwwXDI3NlwzNDVcMjEzXDI1XDI3NCIgXAorICAiXDM0NFwxXDIwNlwzNDBcMzYzXDIwM1wzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIxMVwyNVwyNzRcMzQ0XDJcMFwzMDQiIFwKKyAgIlwzNTJcMzQ3XDM3MFwzNzZcMjAzXDM3NlwzNzdcMzc0XDJcMzU2XDM3M1wzNzRcMFwzMDRcMzUyXDIxM1wyNVwyNzRcMzQ0IiBcCisgICJcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI3XDM3NlwzNzdcMzc0XDFcMjUxXDI2MVwyNzFcMjEzXW96XDFcMzIyXDMzMFwzMzIiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTRdb3pcMVwyMDBcMjE3XDIyNVwyMDNcMzc2XDM3N1wzNzRcMSIgXAorICAiXDI3N1wzMDRcMzA2XDIxM11velwxXDI3N1wzMDRcMzA2XDIwMlwzNzZcMzc3XDM3NFwxXDMzMFwzMzVcMzQwXDIxNF0iIFwKKyAgIm96XDJqfVwyMTBcMzczXDM3NVwzNzJcMjAyXDM3NlwzNzdcMzc0XDFcMjczXDM1NFwzNzFcMjEzXDI1XDI3NFwzNDRcMSIgXAorICAiblwzMzNcMzYyXDIwMlwzNzZcMzc3XDM3NFwxXDM1N1wzNzRcMzc1XDIyMVwyNVwyNzRcMzQ0XDEiIjFcMzEzXDM1NFwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMTRcMjVcMjc0XDM0NFwxXDMzMlwzNjNcMzcwXDIwMlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjM3XDM1MFwzNjdcMjEzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDNcMzc2XDM3N1wzNzRcMUlcMzIwXDM1NCIgXAorICAiXDIxNFwyNVwyNzRcMzQ0XDFcMjMxXDM0MlwzNjJcMjAyXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjE0XDI1XDI3NFwzNDQiIFwKKyAgIlwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwyXDMyMFwzNjVcMzc2XDMxXDI3NVwzNDVcMjEyXDI1XDI3NFwzNDQiIFwKKyAgIlwxTFwzMjJcMzU2XDIwM1wzNzZcMzc3XDM3NFwxXDIwM1wzMzRcMzYwXDIxNFwyNVwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2IiBcCisgICJcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3NyIgXAorICAiXDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDJcMzcwXDM3MlwzNjdjdVwyMDBcMjAzXW96XDVzXDIwNlwyMjFcMzE3XDMyNCIgXAorICAiXDMyN1wzNDNcMzUwXDM1M1wyNzZcMzAzXDMwNWV3XDIwMlwyMDNdb3pcMVwyMTBcMjI3XDIzNVwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMwNlwzMTRcMzE2XDIwM11velwxeVwyMTRcMjMwXDIwM1wzNDdcMzU1XDM1N1wyXDM0NlwzNTRcMzU2XDI2NFwyNzQiIFwKKyAgIlwzMDVcMjAzXW96XDJecHtcMzU3XDM2NVwzNjdcMjAyXDM3NlwzNzdcMzc0XDFwXDIwM1wyMTZcMjAzXW96XDVrflwyMTEiIFwKKyAgIlwzMDdcMzE1XDMxN1wzNDNcMzUwXDM1M1wzMDZcMzE0XDMxNmt+XDIxMVwyMDNdb3pcMXBcMjAzXDIxNlwyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDMzMFwzMzVcMzQwXDIwM11velwxa35cMjExXDIwNFwzNDdcMzU1XDM1N1wyXDMwNFwzMTFcMzE0XyIgXAorICAicXxcMjAzXW96XDFcMzM0XDM0MlwzNDRcMjAyXDM3NlwzNzdcMzc0XDFCXDMxNFwzNDdcMjAzXDI1XDI3NFwzNDRcNVwwIiBcCisgICJcMzAxXDM1MFwyMzNcMzQ1XDM2NFwzMzNcMzY0XDM3MVwyNjBcMzUzXDM2NihcMzA3XDM1MFwyMDNcMjVcMjc0XDM0NCIgXAorICAiXDRcMFwyNzZcMzQ1XDM2N1wzNzVcMzc3XDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzMzUiIFwKKyAgIlwzNjZcMzczXDIwNFwyNVwyNzRcMzQ0XDNcMzAyXDM1N1wzNjdcMzM1XDM2NlwzNzNcMjA2XDM0MFwzNjNcMjA0XDI1IiBcCisgICJcMjc0XDM0NFwxXDM1NlwzNzNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMwMiIgXAorICAiXDM1N1wzNjdcMjAzXDMzNVwzNjZcMzczXDJcMzAyXDM1N1wzNjdcMFwzMDRcMzUyXDIwM1wyNVwyNzRcMzQ0XDFcMjA3IiBcCisgICJcMzQxXDM2NFwyMDJcMzc2XDM3N1wzNzRcMSxcMzExXDM1MlwyMDNcMjVcMjc0XDM0NFw1XDBcMzAyXDM1MVwyMzZcMzQ3IiBcCisgICJcMzY2XDMzMlwzNjNcMzcwXDI1NlwzNTBcMzY0I1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDVcMFwzMDJcMzUxXDM3MCIgXAorICAiXDM3NlwzNzdcMzc2XDM3N1wzNzRcMzcwXDM3NlwzNzdcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDF3XDMzM1wzNTYiIFwKKyAgIlwyMDRcMzM1XDM2NlwzNzNcMUJcMzE0XDM0N1wyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3IiBcCisgICJcMzc0XDFcMFwyNzZcMzQ1XDIwM1wyNVwyNzRcMzQ0XDJtXDMzMlwzNjFcMzM0XDM2NVwzNzJcMjAzXDMzNVwzNjZcMzczIiBcCisgICJcMUlcMzIwXDM1NFwyMDNcMjVcMjc0XDM0NFwxXDIwNlwzNDBcMzYzXDIwMlwzNzZcMzc3XDM3NFwxaVwzMjZcMzU2XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcNVwwXDI3NlwzNDVcMjA2XDM0MFwzNjNcMzIzXDM2NFwzNjdcMjczXDM1NFwzNzExXDMxM1wzNTQiIFwKKyAgIlwyMDRcMjVcMjc0XDM0NFwxXDMzNVwzNjZcMzczXDIwMlwzNzZcMzc3XDM3NFwxLFwzMTFcMzUyXDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcMkxcMzIyXDM1NlwzMzJcMzYzXDM3MFwyMDNcMzM1XDM2NlwzNzNcMW5cMzMzXDM2MlwyMDNcMjVcMjc0XDM0NFwxayIgXAorICAiXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMjIzXDM3N1wzNzdcMzc3XDIyNlwzNzZcMzc3XDM3NFwxXDMyNFwzMzFcMzMzXDIwM11velwyY3VcMjAwXDM1MyIgXAorICAiXDM2MFwzNjNcMjAzXDM3NlwzNzdcMzc0XDFcMzA3XDMxNVwzMTdcMjAzXW96XDRhc35cMzcyXDM3NFwzNzFcMzc2XDM3NyIgXAorICAiXDM3NFwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyN1wyMDVcMzc2XDM3N1wzNzRcMWh6XDIwNVwyMDNdb3oiIFwKKyAgIlwzXDM0MVwzNDZcMzUxXDM3NlwzNzdcMzc0XDM0N1wzNTVcMzU3XDIwM11velwyXnB7XDMzNVwzNDNcMzQ1XDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMzMzXDM0MFwzNDNcMjA0XW96XDNcMzQ3XDM1NVwzNTdcMzc2XDM3N1wzNzRcMzMwXDMzNVwzNDBcMjAzIiBcCisgICJdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzRcMX5cMjE1XDIyM1wyMDNdb3pcNFwzMTNcMzIwXDMyMlwzNzZcMzc3IiBcCisgICJcMzc0XDM3MFwzNzZcMzc3XDMxXDI3NVwzNDVcMjAzXDI1XDI3NFwzNDRcMVwyNTZcMzUwXDM2NFwyMDNcMzc2XDM3NyIgXAorICAiXDM3NFwyXDMzNlwzNjdcMzc0XDBcMjc2XDM0NVwyMDNcMjVcMjc0XDM0NFwzXDI3NFwzNTVcMzczXDM3NlwzNzdcMzc0IiBcCisgICJcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2NyIgXAorICAiXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMjNcMzY0XDM2N1wyMDJcMzc2IiBcCisgICJcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxbiIgXAorICAiXDMzM1wzNjJcMjAzXDI1XDI3NFwzNDRcM21cMzMyXDM2MVwzNzZcMzc3XDM3NFwzNTZcMzczXDM3NFwyMDRcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjc0XDM1NVwzNzNcMjAzXDM3NlwzNzdcMzc0XDJcMzIzXDM2NFwzNjdcMFwyNzZcMzQ1XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM1wzMTVcMzYyXDM3M1wzNzZcMzc3XDM3NFwzMzVcMzY2XDM3M1wyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NSIgXAorICAiXDM3MFwzNzZcMzc3XDIwNFwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjIiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNjZcMzczXDM3NlwyMDRcMjVcMjc0XDM0NFwxXDM2NlwzNzNcMzc2XDIwNFwzNzZcMzc3XDM3NCIgXAorICAiXDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMSVcMzA1XDM0N1wyMDMiIFwKKyAgIlwyNVwyNzRcMzQ0XDFcMjA3XDM0MVwzNjRcMjAzXDM3NlwzNzdcMzc0XDJcMzYwXDM3NVwzNzZcMFwzMDRcMzUyXDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwyMzNcMzQ1XDM2NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDMyM1wzNjRcMzY3XDIwNFwzNzZcMzc3XDM3NFwxXDIwNlwzNDBcMzYzXDIwM1wyNVwyNzRcMzQ0XDFrXDMyN1wzNTciIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzIiBcCisgICJcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0XDFcMzAzXDMxMFwzMTNcMjAzXW96XDFcMjA0XDIyM1wyMzFcMjA0XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzBcMzcyXDM2N19xfFwyMDNdb3pcM1wzNTRcMzYxXDM2NFwzNzZcMzc3XDM3NFwzMDZcMzE0XDMxNiIgXAorICAiXDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3XDM3NFwxbVwyMDBcMjEzXDIwM11velwzXDM0MVwzNDZcMzUxIiBcCisgICJcMzc2XDM3N1wzNzRcMzI2XDMzM1wzMzVcMjAzXW96XDFuXDIwMVwyMTRcMjA1XDM3NlwzNzdcMzc0XDFsXDE3N1wyMTIiIFwKKyAgIlwyMDNdb3pcM1wzMjdcMzM0XDMzN1wzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2IiBcCisgICJcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzN1wzNzBcMzc1XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMlwzMVwyNzVcMzQ1XDM3MFwzNzZcMzc3XDIwNFwzNzZcMzc3XDM3NFwxIiIzXDMxNFwzNTVcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwzXDIzNlwzNDdcMzY2XDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwMyIgXAorICAiXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDYiIFwKKyAgIlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDF3XDMzM1wzNTZcMjAzXDI1XDI3NFwzNDRcM2tcMzI3XDM1NyIgXAorICAiXDM3NlwzNzdcMzc0XDMxNVwzNjJcMzczXDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxIiBcCisgICIqXDMxMFwzNTFcMjAzXDI1XDI3NFwzNDRcM1wyNjFcMzU0XDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzXDM3NFwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxIiBcCisgICJcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3N1wzNzRcMU1cMzIzIiBcCisgICJcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFcMzFcMjc1XDM0NVwyMDNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFcMzM1XDM2NlwzNzNcMjA0XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDMiIFwKKyAgIlwzMzRcMzYwXDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNCIgXAorICAiXDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI2IiBcCisgICJcMzc2XDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMDNdb3pcMVwyMTFcMjMwXDIzNlwyMDVcMzc2XDM3N1wzNzRcMWV3XDIwMiIgXAorICAiXDIwM11velwzXDM1MlwzNTdcMzYyXDM3NlwzNzdcMzc0XDMwNlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNSIgXAorICAiXDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjAzXW96XDNcMzQxXDM0NlwzNTFcMzc2XDM3N1wzNzRcMzE3XDMyNFwzMjciIFwKKyAgIlwyMDNdb3pcMWFzflwyMDVvXDIwMlwyMTVcMWFzflwyMDNdb3pcM1wzMTdcMzI0XDMyN1wzNzZcMzc3XDM3NFwzMzBcMzM1IiBcCisgICJcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwzXDMwNlwzMTQiIFwKKyAgIlwzMTZcMzc2XDM3N1wzNzRcMzM2XDM2N1wzNzRcMjAzXDI1XDI3NFwzNDRcMVwwXDI3NlwzNDVcMjA1JVwzMDVcMzQ3IiBcCisgICJcMVwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDQiIFwKKyAgIlwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3IiBcCisgICJcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMSIgXAorICAiXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM2tcMzI3XDM1N1wzNzZcMzc3XDM3NFwzMDJcMzU3XDM2N1wyMDNcMjVcMjc0XDM0NFwxXDMxXDI3NVwzNDVcMjA1IiBcCisgICIlXDMwNVwzNDdcMVwwXDI3NlwzNDVcMjAzXDI1XDI3NFwzNDRcM1wyMzdcMzUwXDM2N1wzNzZcMzc3XDM3NFwzMTZcMzYzIiBcCisgICJcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDFcMzUwXDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzQiIFwKKyAgIlwzNDRcMSNcMzA0XDM0NlwyMDQlXDMwNVwzNDdcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMXdcMzMzXDM1NlwyMDIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwyNzdcMzA0XDMwNlwyMDNdb3pcMVwyMTFcMjMwXDIzNlwyMDVcMzc2XDM3N1wzNzRcMWV3XDIwMlwyMDNdb3pcMyIgXAorICAiXDM1MlwzNTdcMzYyXDM3NlwzNzdcMzc0XDMwNlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzZcMzc3IiBcCisgICJcMzc0XDFtXDIwMFwyMTNcMjAzXW96XDNcMzQxXDM0NlwzNTFcMzc2XDM3N1wzNzRcMzE3XDMyNFwzMjdcMjE1XW96XDMiIFwKKyAgIlwzMTdcMzI0XDMyN1wzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDIwMlwyMjFcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIxNVwyNVwyNzQiIFwKKyAgIlwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3NyIgXAorICAiXDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3IiBcCisgICJcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTdcMzc2XDM3N1wzNzQiIFwKKyAgIlwzMDJcMzU3XDM2N1wyMTVcMjVcMjc0XDM0NFwzXDIzN1wzNTBcMzY3XDM3NlwzNzdcMzc0XDMxNlwzNjNcMzc0XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTBcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcM1wyMzEiIFwKKyAgIlwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwNVwzNzZcMzc3XDM3NFwxTVwzMjMiIFwKKyAgIlwzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMjE1XDI1XDI3NFwzNDRcMXdcMzMzIiBcCisgICJcMzU2XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI2XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMDNdb3pcMVwyMTFcMjMwXDIzNlwyMDVcMzc2XDM3N1wzNzRcMWV3XDIwMlwyMDMiIFwKKyAgIl1velwzXDM1MlwzNTdcMzYyXDM3NlwzNzdcMzc0XDMwNlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDIwNVwzNzYiIFwKKyAgIlwzNzdcMzc0XDFtXDIwMFwyMTNcMjAzXW96XDNcMzQxXDM0NlwzNTFcMzc2XDM3N1wzNzRcMzE3XDMyNFwzMjdcMjE1IiBcCisgICJdb3pcM1wzMTdcMzI0XDMyN1wzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxM1wyMDVcMzc2XDM3NyIgXAorICAiXDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjdcMzc0XDIxNVwyNSIgXAorICAiXDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2IiBcCisgICJcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwMyIgXAorICAiXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTdcMzc2IiBcCisgICJcMzc3XDM3NFwzMDJcMzU3XDM2N1wyMTVcMjVcMjc0XDM0NFwzXDIzN1wzNTBcMzY3XDM3NlwzNzdcMzc0XDMxNlwzNjMiIFwKKyAgIlwzNzRcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTBcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwNVwzNzZcMzc3IiBcCisgICJcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMjE1XDI1XDI3NCIgXAorICAiXDM0NFwxd1wzMzNcMzU2XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjciIFwKKyAgIlwzNzRcMjA0XDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwyNzdcMzA0XDMwNlwyMDNdb3pcMVwyMTFcMjMwXDIzNlwyMDVcMzc2XDM3N1wzNzQiIFwKKyAgIlwxZXdcMjAyXDIwM11velwzXDM1MlwzNTdcMzYyXDM3NlwzNzdcMzc0XDMwNlwzMTRcMzE2XDIwM11velwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjA1XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjAzXW96XDNcMzQxXDM0NlwzNTFcMzc2XDM3N1wzNzRcMzE3IiBcCisgICJcMzI0XDMyN1wyMTVdb3pcM1wzMTdcMzI0XDMyN1wzNzZcMzc3XDM3NFwzMzBcMzM1XDM0MFwyMDNdb3pcMW1cMjAwXDIxMyIgXAorICAiXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwzXDMwNlwzMTRcMzE2XDM3NlwzNzdcMzc0XDMzNlwzNjciIFwKKyAgIlwzNzRcMjE1XDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0IiBcCisgICJcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxIyIgXAorICAiXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzIiBcCisgICJcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0XDMiIFwKKyAgImtcMzI3XDM1N1wzNzZcMzc3XDM3NFwzMDJcMzU3XDM2N1wyMTVcMjVcMjc0XDM0NFwzXDIzN1wzNTBcMzY3XDM3NlwzNzciIFwKKyAgIlwzNzRcMzE2XDM2M1wzNzRcMjAzXDI1XDI3NFwzNDRcMVwwXDMwMVwzNTBcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTQiIFwKKyAgIlwyMDNcMjVcMjc0XDM0NFwzXDIzMVwzNDJcMzYyXDM3NlwzNzdcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0IiBcCisgICJcMjA1XDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3NyIgXAorICAiXDM3NFwyMTVcMjVcMjc0XDM0NFwxd1wzMzNcMzU2XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMzM2XDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3IiBcCisgICJcMzU3XDIyNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDIyM1wzNzdcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMDBcMzA1XDMxMFwyMDNdb3pcMVwyMTFcMjMwXDIzNlwyMDUiIFwKKyAgIlwzNzZcMzc3XDM3NFwxYnRcMTc3XDIwM11velwzXDM1MlwzNTdcMzYyXDM3NlwzNzdcMzc0XDMwNlwzMTRcMzE2XDIwMyIgXAorICAiXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFtXDIwMFwyMTNcMjAzXW96XDNcMzQxXDM0NlwzNTFcMzc2IiBcCisgICJcMzc3XDM3NFwzMTdcMzI0XDMyN1wyMDNdb3pcMXBcMjAzXDIxNlwyMTFcMzM1XDM0M1wzNDVcM1wzNjZcMzcwXDM2NCIgXAorICAiXDM3NlwzNzdcMzc0XDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjAzXW96XDNcMzA2XDMxNFwzMTZcMzc2XDM3N1wzNzRcMzM2XDM2N1wzNzRcMjAzXDI1XDI3NFwzNDRcMVwwIiBcCisgICJcMjc2XDM0NVwyMTFcMzE0XDM2MVwzNzJcM1wzNTBcMzcxXDM3N1wzNzZcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjUiIFwKKyAgIlwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NFwyMDRcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NCIgXAorICAiXDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDRcMVwzMTZcMzYzXDM3NFwyMDJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTAiIFwKKyAgIlwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0XDIwNFwzNzZcMzc3XDM3NFwxd1wzMzNcMzU2XDIwM1wyNVwyNzRcMzQ0IiBcCisgICJcM2tcMzI3XDM1N1wzNzZcMzc3XDM3NFwzMDJcMzU3XDM2N1wyMDNcMjVcMjc0XDM0NFwxXDBcMzAyXDM1MVwyMTFcMzE0IiBcCisgICJcMzYxXDM3MlwzXDM1NlwzNzNcMzc0XDM3NlwzNzdcMzc0XDMxNlwzNjNcMzc0XDIwM1wyNVwyNzRcMzQ0XDFcMFwzMDEiIFwKKyAgIlwzNTBcMjA1XDM3NlwzNzdcMzc0XDFJXDMyMFwzNTRcMjAzXDI1XDI3NFwzNDRcM1wyMzFcMzQyXDM2MlwzNzZcMzc3IiBcCisgICJcMzc0XDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwNVwzNzZcMzc3XDM3NFwxTVwzMjNcMzU3XDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMDFcMzU2XDM2NlwyMTBcMzE0IiBcCisgICJcMzYxXDM3MlwxXDMzN1wzNzBcMzc1XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNiIgXAorICAiXDM2N1wzNzRcMjA0XDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjYiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wyMjZcMzc2XDM3N1wzNzRcMVwzMTRcMzIxXDMyNFwyMDNdb3pcMmxcMTc3XDIxMlwzNzJcMzc0XDM3MSIgXAorICAiXDIwM1wzNzZcMzc3XDM3NFwxXDMzM1wzNDBcMzQzXDIwM11velw0XnB7XDM2NlwzNzNcMzc2XDM3NlwzNzdcMzc0XDMwNiIgXAorICAiXDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA1XDM3NlwzNzdcMzc0XDFrflwyMTFcMjAzXW96XDNcMzQxXDM0NiIgXAorICAiXDM1MVwzNzZcMzc3XDM3NFwzMjBcMzI2XDMzMFwyMDNdb3pcMXRcMjA3XDIyMlwyMTNcMzc2XDM3N1wzNzRcMVwzMzAiIFwKKyAgIlwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11velwzXDMwNiIgXAorICAiXDMxNFwzMTZcMzc2XDM3N1wzNzRcMzM2XDM2N1wzNzRcMjAzXDI1XDI3NFwzNDRcMVwwXDI3NlwzNDVcMjEzXDM3NlwzNzciIFwKKyAgIlwzNzRcMVwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwyMDNcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwzMzYiIFwKKyAgIlwzNjdcMzc0XDIwMlwzNzZcMzc3XDM3NFwxI1wzMDRcMzQ2XDIwM1wyNVwyNzRcMzQ0XDFcMzE2XDM2M1wzNzRcMjAyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwwXDMwMVwzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzZcMzY3XDM3NFwyMDRcMzc2XDM3N1wzNzQiIFwKKyAgIlwxblwzMzNcMzYyXDIwM1wyNVwyNzRcMzQ0XDNrXDMyN1wzNTdcMzc2XDM3N1wzNzRcMzAzXDM2MVwzNzBcMjAzXDI1IiBcCisgICJcMjc0XDM0NFwxXDBcMzA0XDM1MlwyMTNcMzc2XDM3N1wzNzRcMVwzMzJcMzYzXDM3MFwyMDNcMjVcMjc0XDM0NFwxXDAiIFwKKyAgIlwyNzZcMzQ1XDIwNVwzNzZcMzc3XDM3NFwxSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDNcMjMxXDM0MlwzNjJcMzc2IiBcCisgICJcMzc3XDM3NFwzNTdcMzc0XDM3NVwyMDRcMjVcMjc0XDM0NFwxXDM3MFwzNzZcMzc3XDIwNFwzNzZcMzc3XDM3NFwxTSIgXAorICAiXDMyM1wzNTdcMjAzXDI1XDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMjA0XDI1XDI3NFwzNDQiIFwKKyAgIlwxXDM1NlwzNzNcMzc0XDIxM1wzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNVwzNjZcMzczIiBcCisgICJcMjA0XDM3NlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3NyIgXAorICAiXDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjZcMzc2XDM3N1wzNzRcMlwzNTNcMzYwXDM2M15we1wyMDNdb3pcNVwyMzZcMjQ2XDI1NlwzNjZcMzczXDM3NlwzNzYiIFwKKyAgIlwzNzdcMzc0XDM0N1wzNTVcMzU3d1wyMTJcMjI2XDIwM11velwxflwyMTVcMjIzXDIwMlwzNzZcMzc3XDM3NFwxXDMwNiIgXAorICAiXDMxNFwzMTZcMjAzXW96XDFcMjAyXDIyMVwyMjdcMjA0XDM3NlwzNzdcMzc0XDJcMzM1XDM0M1wzNDVecHtcMjAzXW8iIFwKKyAgInpcM1wzNTFcMzU2XDM2MFwzNzZcMzc3XDM3NFwzMzVcMzQzXDM0NVwyMDNdb3pcMmJ0XDE3N1wzNDNcMzUwXDM1M1wyMTIiIFwKKyAgIlwzNzZcMzc3XDM3NFwxXDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjEiIFwKKyAgIlwyMjdcMjAzXW96XDNcMzA2XDMxNFwzMTZcMzc2XDM3N1wzNzRcMzU2XDM3M1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwyNzQiIFwKKyAgIlwzNTVcMzczXDIxMlwzNzZcMzc3XDM3NFwxXDM1N1wzNzRcMzc1XDIwNFwyNVwyNzRcMzQ0XDIwM1wzNzZcMzc3XDM3NCIgXAorICAiXDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzRcMjAyXDM3NlwzNzdcMzc0XDEjXDMwNFwzNDZcMjAzXDI1XDI3NFwzNDQiIFwKKyAgIlwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDMzNlwzNjdcMzc0IiBcCisgICJcMjAzXDM3NlwzNzdcMzc0XDJcMzY3XDM3NVwzNzcvXDMxMlwzNTNcMjAzXDI1XDI3NFwzNDRcM1wyMDRcMzM1XDM2MSIgXAorICAiXDM3NlwzNzdcMzc0XDMzNFwzNjVcMzcyXDIwM1wyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxNFwzNjFcMzcyXDIxMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMzU2XDM3M1wzNzRcMjA0XDI1XDI3NFwzNDRcMVwyNzRcMzU1XDM3M1wyMDRcMzc2XDM3N1wzNzRcMSIgXAorICAiSVwzMjBcMzU0XDIwM1wyNVwyNzRcMzQ0XDRcMjMxXDM0MlwzNjJcMzc2XDM3N1wzNzRcMzcwXDM3NlwzNzdcMFwyNzYiIFwKKyAgIlwzNDVcMjAzXDI1XDI3NFwzNDRcMVwyNTdcMzUxXDM2NVwyMDRcMzc2XDM3N1wzNzRcMU1cMzIzXDM1N1wyMDNcMjVcMjc0IiBcCisgICJcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDFcMjMzXDM0NSIgXAorICAiXDM2NFwyMTNcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDIwN1wzNDFcMzY0XDIwNFwzNzYiIFwKKyAgIlwzNzdcMzc0XDFcMjA2XDM0MFwzNjNcMjAzXDI1XDI3NFwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI3XDM3NiIgXAorICAiXDM3N1wzNzRcMVwyMTFcMjMwXDIzNlwyMDRdb3pcM2N1XDIwMHBcMjAzXDIxNl5we1wyMDRdb3pcMVwyNzdcMzA0XDMwNiIgXAorICAiXDIwMlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwM11velwxZHZcMjAxXDIwM35cMjE1XDIyM1wydlwyMTFcMjI1IiBcCisgICJhc35cMjAzXW96XDFuXDIwMVwyMTRcMjAyXDM3NlwzNzdcMzc0XDJcMzcxXDM3M1wzNzBkdlwyMDFcMjAzXW96XDJidCIgXAorICAiXDE3N3dcMjEyXDIyNlwyMDV+XDIxNVwyMjNcMlwyMDNcMjIyXDIzMFwzMDRcMzExXDMxNFwyMDJcMzc2XDM3N1wzNzQiIFwKKyAgIlwxXDMzMFwzMzVcMzQwXDIwM11velwxbVwyMDBcMjEzXDIwNVwzNzZcMzc3XDM3NFwxXDIwMlwyMjFcMjI3XDIwM11vIiBcCisgICJ6XDFcMzA2XDMxNFwzMTZcMjAyXDM3NlwzNzdcMzc0XDEoXDMwN1wzNTBcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUiIFwKKyAgIipcMzEwXDM1MVwyMDUsXDMxMVwzNTJcMiIiMVwzMTNcMzU0XDIwN1wzNDFcMzY0XDIwMlwzNzZcMzc3XDM3NFwxXDM1NyIgXAorICAiXDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0XDFcMzM2XDM2N1wzNzQiIFwKKyAgIlwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3IiBcCisgICJcMzc0XDFcMFwzMDFcMzUwXDIwM1wyNVwyNzRcMzQ0XDEqXDMxMFwzNTFcMjAzLFwzMTFcMzUyXDFcMFwzMDJcMzUxXDIwNCIgXAorICAiXDI1XDI3NFwzNDRcNFwyNzRcMzU1XDM3M1wzNzZcMzc3XDM3NFwzNzBcMzc2XDM3N1wwXDMwMlwzNTFcMjAzXDI1XDI3NCIgXAorICAiXDM0NFwyXDMxXDI3NVwzNDUqXDMxMFwzNTFcMjA1LFwzMTFcMzUyXDJCXDMxNFwzNDdcMjMxXDM0MlwzNjJcMjAzXDM3NiIgXAorICAiXDM3N1wzNzRcMSVcMzA1XDM0N1wyMDNcMjVcMjc0XDM0NFwyXDBcMjc2XDM0NSpcMzEwXDM1MVwyMDMsXDMxMVwzNTIiIFwKKyAgIlwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDIzMVwzNDJcMzYyXDIwMlwzNzZcMzc3XDM3NFwxL1wzMTJcMzUzIiBcCisgICJcMjAzXDI1XDI3NFwzNDRcMlwwXDI3NlwzNDUqXDMxMFwzNTFcMjAzLFwzMTFcMzUyXDFcMFwzMDFcMzUwXDIwM1wyNSIgXAorICAiXDI3NFwzNDRcMVwyMDZcMzQwXDM2M1wyMDJcMzc2XDM3N1wzNzRcMUdcMzE3XDM1M1wyMDRcMjVcMjc0XDM0NFwxKFwzMDciIFwKKyAgIlwzNTBcMjA1LFwzMTFcMzUyXDMiIjFcMzEzXDM1NHdcMzMzXDM1NlwzNzBcMzc2XDM3N1wyMDJcMzc2XDM3N1wzNzRcMSIgXAorICAiTVwzMjNcMzU3XDIwNFwyNVwyNzRcMzQ0XDEoXDMwN1wzNTBcMjAzLFwzMTFcMzUyXDFcMFwzMDRcMzUyXDIwM1wyNVwyNzQiIFwKKyAgIlwzNDRcMWtcMzI3XDM1N1wyMjZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjI3XDM3NlwzNzdcMzc0XDJcMzQzXDM1MFwzNTNld1wyMDJcMjExXW96XDIiIFwKKyAgIlwxNzdcMjE2XDIyNFwzNzNcMzc1XDM3MlwyMDJcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMTRdb3pcMVwyNzBcMzAwIiBcCisgICJcMzExXDIwM1wzNzZcMzc3XDM3NFwxXDI1M1wyNjNcMjczXDIxM11velw0X3F8XDM1MlwzNTdcMzYyXDM3NlwzNzdcMzc0IiBcCisgICJcMzMwXDMzNVwzNDBcMjAzXW96XDFtXDIwMFwyMTNcMjA1XDM3NlwzNzdcMzc0XDFcMjAyXDIyMVwyMjdcMjAzXW96XDEiIFwKKyAgIlwzMDZcMzE0XDMxNlwyMDJcMzc2XDM3N1wzNzRcMVwyMzNcMzQ1XDM2NFwyMTRcMjVcMjc0XDM0NFwzXDMwMVwzNTZcMzY2IiBcCisgICJcMzc2XDM3N1wzNzRcMzU3XDM3NFwzNzVcMjA0XDI1XDI3NFwzNDRcMjAzXDM3NlwzNzdcMzc0XDIwNFwyNVwyNzRcMzQ0IiBcCisgICJcMVwzMzZcMzY3XDM3NFwyMDJcMzc2XDM3N1wzNzRcMSNcMzA0XDM0NlwyMDNcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0IiBcCisgICJcMjAyXDM3NlwzNzdcMzc0XDFcMFwzMDFcMzUwXDIxM1wyNVwyNzRcMzQ0XDIsXDMxMVwzNTJcMzcwXDM3NlwzNzdcMjAyIiBcCisgICJcMzc2XDM3N1wzNzRcMVwyMDZcMzQwXDM2M1wyMTRcMjVcMjc0XDM0NFwxXDMxNlwzNjNcMzc0XDIwMlwzNzZcMzc3XDM3NCIgXAorICAiXDFcMjMzXDM0NVwzNjRcMjE0XDI1XDI3NFwzNDRcMVwyMzFcMzQyXDM2MlwyMDJcMzc2XDM3N1wzNzRcMVwyNTBcMzQ3IiBcCisgICJcMzcxXDIxNFwyNVwyNzRcMzQ0XDFcMjA2XDM0MFwzNjNcMjAyXDM3NlwzNzdcMzc0XDFcMjczXDM1NFwzNzFcMjE0XDI1IiBcCisgICJcMjc0XDM0NFwxXDIzNlwzNDdcMzY2XDIwMlwzNzZcMzc3XDM3NFwyXDMxM1wzNjBcMzcxXDBcMjc2XDM0NVwyMTNcMjUiIFwKKyAgIlwyNzRcMzQ0XDFrXDMyN1wzNTdcMjI2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDIzMFwzNzZcMzc3XDM3NFwyXDMyNVwzMzJcMzM0Z3lcMjA0XDIwNyIgXAorICAiXW96XDJ4XDIxM1wyMjdcMzU0XDM2MVwzNjRcMjAzXDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjEzXW96XDFcMjI1IiBcCisgICJcMjM1XDI0NVwyMDRcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MX5cMjIxXDIzNVwyMTNdb3pcM1wzMzNcMzQwXDM0MyIgXAorICAiXDM3NlwzNzdcMzc0XDM0MlwzNDdcMzUyXDIwM11velwxdFwyMDdcMjIyXDIwNVwzNzZcMzc3XDM3NFwxXDIxMVwyMzAiIFwKKyAgIlwyMzZcMjAzXW96XDFcMzE3XDMyNFwzMjdcMjAzXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjEzXDI1XDI3NFwzNDRcNCIgXAorICAiXDIzN1wzNTBcMzY3XDM3NlwzNzdcMzc0XDM2N1wzNzVcMzc3XDBcMjc2XDM0NVwyMDJcMjVcMjc0XDM0NFwxXDBcMjc2IiBcCisgICJcMzQ1XDIwM1wzNzZcMzc3XDM3NFwxXDBcMzAxXDM1MFwyMDNcMjVcMjc0XDM0NFwxXDM1N1wzNzRcMzc1XDIwMlwzNzYiIFwKKyAgIlwzNzdcMzc0XDEoXDMwN1wzNTBcMjAzXDI1XDI3NFwzNDRcMVwzMzVcMzY2XDM3M1wyMDJcMzc2XDM3N1wzNzRcMVwwIiBcCisgICJcMzAyXDM1MVwyMTJcMjVcMjc0XDM0NFwyXDBcMzAxXDM1MFwzMzNcMzY0XDM3MVwyMDNcMzc2XDM3N1wzNzRcMlwzNzAiIFwKKyAgIlwzNzZcMzc3R1wzMTdcMzUzXDIxM1wyNVwyNzRcMzQ0XDFcMjczXDM1NFwzNzFcMjAzXDM3NlwzNzdcMzc0XDFNXDMyMyIgXAorICAiXDM1N1wyMTNcMjVcMjc0XDM0NFwxXDIzN1wzNTBcMzY3XDIwM1wzNzZcMzc3XDM3NFwxa1wzMjdcMzU3XDIxM1wyNVwyNzQiIFwKKyAgIlwzNDRcMVwyMzFcMzQyXDM2MlwyMDNcMzc2XDM3N1wzNzRcMXdcMzMzXDM1NlwyMTNcMjVcMjc0XDM0NFwxXDIwNlwzNDAiIFwKKyAgIlwzNjNcMjAzXDM3NlwzNzdcMzc0XDFcMjA3XDM0MVwzNjRcMjEzXDI1XDI3NFwzNDRcMW5cMzMzXDM2MlwyMjZcMzc2IiBcCisgICJcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3NyIgXAorICAiXDM3N1wyMzFcMzc2XDM3N1wzNzRcM1wzNTFcMzU2XDM2MFwyMzFcMjQxXDI1MWJ0XDE3N1wyMDNdb3pcM2t+XDIxMVwyNTciIFwKKyAgIlwyNjdcMjc3XDM3MFwzNzJcMzY3XDIwNFwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIxMV1velwzZ3lcMjA0XDI2MSIgXAorICAiXDI3MVwzMDJcMzczXDM3NVwzNzJcMjA1XDM3NlwzNzdcMzc0XDNcMzcxXDM3M1wzNzBcMjUyXDI2MlwyNzJkdlwyMDEiIFwKKyAgIlwyMTBdb3pcMnhcMjEzXDIyN1wzNzJcMzc0XDM3MVwyMDJcMzc2XDM3N1wzNzRcNH1cMjIwXDIzM11vel5we1wyNjZcMjc3IiBcCisgICJcMzA3XDIwNVwzNzZcMzc3XDM3NFw1XDMxMVwzMTZcMzIxX3F8XW96cVwyMDRcMjE3XDM3MFwzNzJcMzY3XDIwM1wzNzYiIFwKKyAgIlwzNzdcMzc0XDNcMzcwXDM3NlwzNzdcMjExXDM0MlwzNjVcMFwzMDFcMzUwXDIxMFwyNVwyNzRcMzQ0XDJcMFwzMDRcMzUyIiBcCisgICJcMzU2XDM3M1wzNzRcMjAyXDM3NlwzNzdcMzc0XDFNXDMyM1wzNTdcMjAyXDI1XDI3NFwzNDRcMW1cMzMyXDM2MVwyMDMiIFwKKyAgIlwzNzZcMzc3XDM3NFwxblwzMzNcMzYyXDIwMlwyNVwyNzRcMzQ0XDFMXDMyMlwzNTZcMjAzXDM3NlwzNzdcMzc0XDFcMjA2IiBcCisgICJcMzQwXDM2M1wyMDJcMjVcMjc0XDM0NFwyQlwzMTRcMzQ3XDM3MFwzNzZcMzc3XDIwMlwzNzZcMzc3XDM3NFwxd1wzMzMiIFwKKyAgIlwzNTZcMjEwXDI1XDI3NFwzNDRcM1wwXDI3NlwzNDVMXDMyMlwzNTZcMzM2XDM2N1wzNzRcMjA1XDM3NlwzNzdcMzc0IiBcCisgICJcM1wzNzBcMzc2XDM3N1wyMDRcMzM1XDM2MVwwXDMwMVwzNTBcMjEwXDI1XDI3NFwzNDRcMihcMzA3XDM1MFwzNjZcMzczIiBcCisgICJcMzc2XDIwM1wzNzZcMzc3XDM3NFwzXDM3MFwzNzZcMzc3XDIxMVwzNDJcMzY1XDBcMzAxXDM1MFwyMTBcMjVcMjc0XDM0NCIgXAorICAiXDIjXDMwNFwzNDZcMzU2XDM3M1wzNzRcMjA0XDM3NlwzNzdcMzc0XDJcMjMzXDM0NVwzNjRcMFwzMDJcMzUxXDIxMFwyNSIgXAorICAiXDI3NFwzNDRcMlwwXDMwMlwzNTFcMzM3XDM3MFwzNzVcMjA0XDM3NlwzNzdcMzc0XDJcMjM3XDM1MFwzNjcjXDMwNFwzNDYiIFwKKyAgIlwyMTBcMjVcMjc0XDM0NFwyXDBcMzAxXDM1MFwzMzNcMzY0XDM3MVwyMDRcMzc2XDM3N1wzNzRcMlwyNTdcMzUxXDM2NSIgXAorICAiJVwzMDVcMzQ3XDIxMFwyNVwyNzRcMzQ0XDJcMFwyNzZcMzQ1XDMxNFwzNjFcMzcyXDIyNlwzNzZcMzc3XDM3NFwzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyMzNcMzc2IiBcCisgICJcMzc3XDM3NFw0XDM2NVwzNzJcMzc1XDMzNVwzNDNcMzQ1XDMyNVwzMzJcMzM0XDM0M1wzNTBcMzUzXDIwN1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDF1XDIxMFwyMjRcMjA0XDMyNFwzMzFcMzMzXDJcMzM1XDM0M1wzNDVcMzczIiBcCisgICJcMzc1XDM3MlwyMTFcMzc2XDM3N1wzNzRcMlwzNzJcMzc0XDM3MVwzMzRcMzQyXDM0NFwyMDZcMzI0XDMzMVwzMzNcMiIgXAorICAiXDMzMVwzMzZcMzQxXDM3MlwzNzRcMzcxXDIwM1wzNzZcMzc3XDM3NFwzXDM3M1wzNzVcMzcyXDMzMlwzMzdcMzQyXDM0MyIgXAorICAiXDM1MFwzNTNcMjA3XDM3NlwzNzdcMzc0XDNcMzUxXDM1NlwzNjBcMzMwXDMzNVwzNDBcMzY2XDM3M1wzNzZcMjA2XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzNzBcMzc2XDM3N1wzMTZcMzYzXDM3NFwyMDZcMjczXDM1NFwzNzFcMlwzMDJcMzU3XDM2N1wzNjYiIFwKKyAgIlwzNzNcMzc2XDIwNFwzNzZcMzc3XDM3NFwyXDMxNFwzNjFcMzcyXDMxNVwzNjJcMzczXDIwNVwzNzZcMzc3XDM3NFwyIiBcCisgICJcMzE2XDM2M1wzNzRcMzEzXDM2MFwzNzFcMjA1XDM3NlwzNzdcMzc0XDNcMzMyXDM2M1wzNzBcMzEyXDM1N1wzNzBcMzcwIiBcCisgICJcMzc2XDM3N1wyMDRcMzc2XDM3N1wzNzRcMVwzMTZcMzYzXDM3NFwyMDZcMjczXDM1NFwzNzFcMlwzMDJcMzU3XDM2NyIgXAorICAiXDM1NlwzNzNcMzc0XDIxMVwzNzZcMzc3XDM3NFwyXDM3MFwzNzZcMzc3XDMxNFwzNjFcMzcyXDIwNlwyNzNcMzU0XDM3MSIgXAorICAiXDJcMzAyXDM1N1wzNjdcMzY3XDM3NVwzNzdcMjA2XDM3NlwzNzdcMzc0XDJcMzcwXDM3NlwzNzdcMzE2XDM2M1wzNzQiIFwKKyAgIlwyMDZcMjczXDM1NFwzNzFcMlwzMDJcMzU3XDM2N1wzNjZcMzczXDM3NlwyMDZcMzc2XDM3N1wzNzRcMlwzNzBcMzc2IiBcCisgICJcMzc3XDMxNlwzNjNcMzc0XDIwNlwyNzNcMzU0XDM3MVwyXDMwMVwzNTZcMzY2XDM1N1wzNzRcMzc1XDIwN1wzNzZcMzc3IiBcCisgICJcMzc0XDFcMzMyXDM2M1wzNzBcMjA2XDI3M1wzNTRcMzcxXDJcMzAxXDM1NlwzNjZcMzU2XDM3M1wzNzRcMjA3XDM3NiIgXAorICAiXDM3N1wzNzRcMlwzMzNcMzY0XDM3MVwyNzRcMzU1XDM3M1wyMDVcMjczXDM1NFwzNzFcMlwyNzRcMzU1XDM3M1wzNTAiIFwKKyAgIlwzNzFcMzc3XDIyN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0XDMxNlwyMDNdb3pcMVwyMDJcMjIxXDIyNyIgXAorICAiXDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0XDFcMzA2XDMxNFwzMTZcMjAzXW96XDFcMjAyIiBcCisgICJcMjIxXDIyN1wzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzZcMzc3XDM3NFwxXDMwNlwzMTRcMzE2XDIwMyIgXAorICAiXW96XDFcMjAyXDIyMVwyMjdcMzc3XDM3NlwzNzdcMzc0XDMwNlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wyNDZcMzc2XDM3N1wzNzRcMVwzMDZcMzE0IiBcCisgICJcMzE2XDIwM11velwxXDIwMlwyMjFcMjI3XDM3N1wzNzZcMzc3XDM3NFwzMDZcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMjQ2XDM3NlwzNzdcMzc0IiBcCisgICJcMVwzMTVcMzIyXDMyNVwyMDNdb3pcMVwyMTFcMjMwXDIzNlwzNzdcMzc2XDM3N1wzNzRcMzA2XDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDI0NlwzNzYiIFwKKyAgIlwzNzdcMzc0XDJcMzYwXDM2NlwzNzBpe1wyMDZcMjAyXW96XDFcMzAyXDMwN1wzMTJcMzc3XDM3NlwzNzdcMzc0XDMwNiIgXAorICAiXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzciIFwKKyAgIlwzNzdcMzc3XDI0N1wzNzZcMzc3XDM3NFwzXDM1N1wzNjVcMzY3XDMxM1wzMjBcMzIyXDMzNVwzNDNcMzQ1XDM3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDMwN1wzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjEiIFwKKyAgIlwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzQiIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0IiBcCisgICJcMzYxXDM3NlwzNzdcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyMyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3IiBcCisgICJcMzc0XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzZcMzc3XDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3NyIgXAorICAiXDM3NFwzNjFcMzc2XDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwyMjNcMzc3XDM3N1wzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NiIgXAorICAiXDM3N1wzNzRcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3NlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDIyM1wzNzdcMzc3XDM3N1wzNzdcMzc2XDM3N1wzNzRcMzYxXDM3NlwzNzdcMzc0XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMjIzXDM3N1wzNzdcMzc3XDM3N1wzNzYiIFwKKyAgIlwzNzdcMzc0XDM2MVwzNzZcMzc3XDM3NFwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzciIFwKKyAgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3IiBcCisgICJcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIgXAorICAiXDM3N1wzNzdcMzc3XDM3N1wyMzJcMzc3XDM3N1wzNzciKQorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3BzcGxhc2gvcHNwbGFzaF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYjY0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9wc3BsYXNoL3BzcGxhc2hfZ2l0LmJiCkBAIC0wLDAgKzEsMTIyIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBmcmFtZWJ1ZmZlciBib290IGxvZ28gYmFzZWQgb24gdXNwbGFzaCIKK0RFU0NSSVBUSU9OID0gIlBTcGxhc2ggaXMgYSB1c2Vyc3BhY2UgZ3JhcGhpY2FsIGJvb3Qgc3BsYXNoIHNjcmVlbiBmb3IgbWFpbmx5IGVtYmVkZGVkIExpbnV4IGRldmljZXMgc3VwcG9ydGluZyBhIDE2YnBwIG9yIDMyYnBwIGZyYW1lYnVmZmVyLiBJdCBoYXMgZmV3IGRlcGVuZGVuY2llcyAoanVzdCBsaWJjKSwgc3VwcG9ydHMgYmFzaWMgaW1hZ2VzIGFuZCB0ZXh0IGFuZCBoYW5kbGVzIHJvdGF0aW9uLiBJdHMgdmlzdWFsIGxvb2sgaXMgY29uZmlndXJhYmxlIGJ5IGJhc2ljIHNvdXJjZSBjaGFuZ2VzLiBBbHNvIGluY2x1ZGVkIGlzIGEgJ2NsaWVudCcgY29tbWFuZCB1dGlsaXR5IGZvciBzZW5kaW5nIGluZm9ybWF0aW9uIHRvIHBzcGxhc2ggc3VjaCBhcyBib290IHByb2dyZXNzIGluZm9ybWF0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3BzcGxhc2giCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BzcGxhc2guaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE2O21kNT04NDBmYjIzNTZiMTBhODViZWQ3OGRkMDlkYzc3NDVjNiIKKworU1JDUkVWID0gIjE0YzhmN2I3MDVkZTk0NGJlYjRkZTNmMjk2NTA2ZDgwODcxZTQxMGYiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCitQUiA9ICJyMTUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcHNwbGFzaC1mYi1Db252ZXJ0LXBzcGxhc2hfZmJfcGxvdF9waXhlbC10by1hLXN0YXRpYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wc3BsYXNoLWluaXQgXAorICAgICAgICAgICAke1NQTEFTSF9JTUFHRVN9IgorCitTUExBU0hfSU1BR0VTID0gImZpbGU6Ly9wc3BsYXNoLXBva3ktaW1nLmg7b3V0c3VmZml4PWRlZmF1bHQiCisKK3B5dGhvbiBfX2Fub255bW91cygpIHsKKyAgICBvbGRwa2dzID0gZC5nZXRWYXIoIlBBQ0tBR0VTIiwgVHJ1ZSkuc3BsaXQoKQorICAgIHNwbGFzaGZpbGVzID0gZC5nZXRWYXIoJ1NQTEFTSF9JTUFHRVMnLCBUcnVlKS5zcGxpdCgpCisgICAgcGtncyA9IFtdCisgICAgbG9jYWxwYXRocyA9IFtdCisgICAgaGFzcG5nID0gRmFsc2UKKyAgICBmb3IgdXJpIGluIHNwbGFzaGZpbGVzOgorICAgICAgICBmZXRjaGVyID0gYmIuZmV0Y2gyLkZldGNoKFt1cmldLCBkKQorICAgICAgICBmbG9jYWwgPSBvcy5wYXRoLmJhc2VuYW1lKGZldGNoZXIubG9jYWxwYXRoKHVyaSkpCisgICAgICAgIGZiYXNlID0gb3MucGF0aC5zcGxpdGV4dChmbG9jYWwpWzBdCisgICAgICAgIG91dHN1ZmZpeCA9IGZldGNoZXIudWRbdXJpXS5wYXJtLmdldCgib3V0c3VmZml4IikKKyAgICAgICAgaWYgbm90IG91dHN1ZmZpeDoKKyAgICAgICAgICAgIGlmIGZiYXNlLnN0YXJ0c3dpdGgoInBzcGxhc2gtIik6CisgICAgICAgICAgICAgICAgb3V0c3VmZml4ID0gZmJhc2VbODpdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dHN1ZmZpeCA9IGZiYXNlCisgICAgICAgICAgICBpZiBvdXRzdWZmaXguZW5kc3dpdGgoJy1pbWcnKToKKyAgICAgICAgICAgICAgICBvdXRzdWZmaXggPSBvdXRzdWZmaXhbOi00XQorICAgICAgICBvdXRuYW1lID0gInBzcGxhc2gtJXMiICUgb3V0c3VmZml4CisgICAgICAgIGlmIG91dG5hbWUgPT0gJycgb3Igb3V0bmFtZSBpbiBvbGRwa2dzOgorICAgICAgICAgICAgYmIuZmF0YWwoIlRoZSBvdXRwdXQgbmFtZSAnJXMnIGRlcml2ZWQgZnJvbSB0aGUgVVJJICVzIGlzIG5vdCB2YWxpZCwgcGxlYXNlIHNwZWNpZnkgdGhlIG91dHN1ZmZpeCBwYXJhbWV0ZXIiICUgKG91dG5hbWUsIHVyaSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwa2dzLmFwcGVuZChvdXRuYW1lKQorICAgICAgICBpZiBmbG9jYWwuZW5kc3dpdGgoIi5wbmciKToKKyAgICAgICAgICAgIGhhc3BuZyA9IFRydWUKKyAgICAgICAgbG9jYWxwYXRocy5hcHBlbmQoZmxvY2FsKQorCisgICAgIyBTZXQgdGhlc2Ugc28gdGhhdCB3ZSBoYXZlIGxlc3Mgd29yayB0byBkbyBpbiBkb19jb21waWxlIGFuZCBkb19pbnN0YWxsX2FwcGVuZAorICAgIGQuc2V0VmFyKCJTUExBU0hfSU5TVEFMTCIsICIgIi5qb2luKHBrZ3MpKQorICAgIGQuc2V0VmFyKCJTUExBU0hfTE9DQUxQQVRIUyIsICIgIi5qb2luKGxvY2FscGF0aHMpKQorCisgICAgaWYgaGFzcG5nOgorICAgICAgICBkLmFwcGVuZFZhcigiREVQRU5EUyIsICIgZ2RrLXBpeGJ1Zi1uYXRpdmUiKQorCisgICAgZC5wcmVwZW5kVmFyKCJQQUNLQUdFUyIsICIlcyAiICUgKCIgIi5qb2luKHBrZ3MpKSkKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKSBvciAnJworICAgIGZvciBwIGluIHBrZ3M6CisgICAgICAgIGVwID0gJyVzJXMnICUgKG1scHJlZml4LCBwKQorICAgICAgICBlcHNwbGFzaCA9ICclcyVzJyAlIChtbHByZWZpeCwgJ3BzcGxhc2gnKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgZXAsICIke2JpbmRpcn0vJXMiICUgcCkKKyAgICAgICAgZC5zZXRWYXIoIkFMVEVSTkFUSVZFXyVzIiAlIGVwLCAncHNwbGFzaCcpCisgICAgICAgIGQuc2V0VmFyRmxhZygiQUxURVJOQVRJVkVfVEFSR0VUXyVzIiAlIGVwLCAncHNwbGFzaCcsICcke2JpbmRpcn0vJXMnICUgcCkKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJERVBFTkRTXyVzIiAlIGVwLCAiICVzIiAlIHBuKQorICAgICAgICBpZiBwID09ICJwc3BsYXNoLWRlZmF1bHQiOgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJSRUNPTU1FTkRTXyVzIiAlIHBuLCAiICVzIiAlIGVwKQorfQorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcHNwbGFzaF0gPSAiJHtiaW5kaXJ9L3BzcGxhc2giCisKK3B5dGhvbiBkb19jb21waWxlICgpIHsKKyAgICBpbXBvcnQgc2h1dGlsCisKKyAgICAjIEJ1aWxkIGEgc2VwYXJhdGUgZXhlY3V0YWJsZSBmb3IgZWFjaCBzcGxhc2ggaW1hZ2UKKyAgICB3b3JrZGlyID0gZC5nZXRWYXIoJ1dPUktESVInLCBUcnVlKQorICAgIGNvbnZlcnRzY3JpcHQgPSAiJXMvbWFrZS1pbWFnZS1oZWFkZXIuc2giICUgZC5nZXRWYXIoJ1MnLCBUcnVlKQorICAgIGRlc3RmaWxlID0gIiVzL3BzcGxhc2gtcG9reS1pbWcuaCIgJSBkLmdldFZhcignUycsIFRydWUpCisgICAgbG9jYWxmaWxlcyA9IGQuZ2V0VmFyKCdTUExBU0hfTE9DQUxQQVRIUycsIFRydWUpLnNwbGl0KCkKKyAgICBvdXRwdXRmaWxlcyA9IGQuZ2V0VmFyKCdTUExBU0hfSU5TVEFMTCcsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgbG9jYWxmaWxlLCBvdXRwdXRmaWxlIGluIHppcChsb2NhbGZpbGVzLCBvdXRwdXRmaWxlcyk6CisgICAgICAgIGlmIGxvY2FsZmlsZS5lbmRzd2l0aCgiLnBuZyIpOgorICAgICAgICAgICAgb3V0cCA9IG9lLnV0aWxzLmdldHN0YXR1c291dHB1dCgnJXMgJXMgUE9LWScgJSAoY29udmVydHNjcmlwdCwgb3MucGF0aC5qb2luKHdvcmtkaXIsIGxvY2FsZmlsZSkpKQorICAgICAgICAgICAgcHJpbnQob3V0cFsxXSkKKyAgICAgICAgICAgIGZiYXNlID0gb3MucGF0aC5zcGxpdGV4dChsb2NhbGZpbGUpWzBdCisgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoIiVzLWltZy5oIiAlIGZiYXNlLCBkZXN0ZmlsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4od29ya2RpciwgbG9jYWxmaWxlKSwgZGVzdGZpbGUpCisgICAgICAgICMgRm9yIHNvbWUgcmVhc29uIGp1c3QgdXBkYXRpbmcgdGhlIGhlYWRlciBpcyBub3QgZW5vdWdoLCB3ZSBoYXZlIHRvIHRvdWNoIHRoZSAuYworICAgICAgICAjIGZpbGUgaW4gb3JkZXIgdG8gZ2V0IGl0IHRvIHJlYnVpbGQKKyAgICAgICAgb3MudXRpbWUoIiVzL3BzcGxhc2guYyIgJSBkLmdldFZhcignUycsIFRydWUpLCBOb25lKQorICAgICAgICBiYi5idWlsZC5leGVjX2Z1bmMoIm9lX3J1bm1ha2UiLCBkKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoInBzcGxhc2giLCBvdXRwdXRmaWxlKQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vbW50Ly5wc3BsYXNoLworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BzcGxhc2gtaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcHNwbGFzaC5zaAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWZvciBpIGluICR7U1BMQVNIX0lOU1RBTEx9IDsgZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRpICR7RH0ke2JpbmRpcn0vJGkKKwlkb25lCisJcm0gLWYgJHtEfSR7YmluZGlyfS9wc3BsYXNoCit9CisKK0ZJTEVTXyR7UE59ICs9ICIvbW50Ly5wc3BsYXNoIgorCitJTklUU0NSSVBUX05BTUUgPSAicHNwbGFzaC5zaCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDAgUyAuIHN0b3AgMjAgMCAxIDYgLiIKKworREVQRU5EU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlJywnJyxkKX0iCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkJCU9QVFM9Ii0tcm9vdD0kRCIKKwkJZmkKKwkJc3lzdGVtY3RsICRPUFRTIG1hc2sgcHNwbGFzaC5zZXJ2aWNlCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmZmMDNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvY29uZmlnLWRpcmVudC1zeW1ib2xzLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0ZpeCB0aGUgbmFtZXMgb2YgdGhlIFNUUlVDVF9ESVJFTlRfRCBzeW1ib2xzIHRvIG1hdGNoIHRoZSBuYW1lcyB1c2VkIGJ5IGJvdGgKK2NvbmZpZ3VyZSBhbmQgdGhlIHNvdXJjZSBjb2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDE0LTA1L21zZzAwMDA4Lmh0bWwpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGU0ODY1NjgxMTU1MDc3NDg5MmZkNGUwZjRiM2M3ZDQxODQyMmRhNTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyNyBNYXkgMjAxNCAyMjozMjozMSArMDEwMAorU3ViamVjdDogW1BBVENIXSBjb25maWcuaC5pbjogZml4IG5hbWVzIG9mIFNUUlVDVF9ESVJFTlRfRCBzeW1ib2xzCisKKy0tLQorIGNvbmZpZy5oLmluIHwgICAgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy5oLmluIGIvY29uZmlnLmguaW4KK2luZGV4IGE2N2U0M2UuLmE0MmFjYzUgMTAwNjQ0CistLS0gYS9jb25maWcuaC5pbgorKysrIGIvY29uZmlnLmguaW4KK0BAIC0yNDQsOSArMjQ0LDkgQEAKKyAKKyAjdW5kZWYgSEFWRV9HRVRQV19ERUNMUworIAorLSN1bmRlZiBTVFJVQ1RfRElSRU5UX0hBU19EX0lOTworKyN1bmRlZiBIQVZFX1NUUlVDVF9ESVJFTlRfRF9JTk8KKyAKKy0jdW5kZWYgU1RSVUNUX0RJUkVOVF9IQVNfRF9GSUxFTk8KKysjdW5kZWYgSEFWRV9TVFJVQ1RfRElSRU5UX0RfRklMRU5PCisgCisgI3VuZGVmIEhBVkVfQlNEX1NJR05BTFMKKyAKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvZmlsZXMvbm9ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL25vcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3MTU4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL2ZpbGVzL25vcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBzdXBwb3J0IHNjcmlwdCBlbmRzIHVwIGhhcmRjb2RpbmcgdW5uZWNlc3NhcnkgcnBhdGhzIGludG8gdGhlIGxpYnJhcmllcy4gV2UKK3dpbGwgc2VhcmNoICRsaWJkaXIgYXV0b21hdGljYWxseSBzbyB0aGlzIGlzIGp1c3Qgd2FzdGVzIHNwYWNlLiBUaGVyZSBtYXkgYmUgc29tZQorY2FzZXMgdGhpcyBpcyBuZWNlc3NhcnkgYnV0IG91ciB1c2UgY2FzZXMgYXJlbid0IG9uZSBvZiB0aGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworUlAgMjAxMi8yLzIzCisKK0luZGV4OiByZWFkbGluZS02LjIvc3VwcG9ydC9zaG9iai1jb25mCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcmVhZGxpbmUtNi4yLm9yaWcvc3VwcG9ydC9zaG9iai1jb25mCTIwMTItMDItMjMgMTE6MDY6MzcuMTkzMTc5Mzc5ICswMDAwCisrKysgcmVhZGxpbmUtNi4yL3N1cHBvcnQvc2hvYmotY29uZgkyMDEyLTAyLTIzIDExOjA2OjUwLjA0OTE3ODkxOCArMDAwMAorQEAgLTExNCw3ICsxMTQsNyBAQAorIAlTSE9CSl9MRD0nJHtDQ30nCisgCVNIT0JKX0xERkxBR1M9Jy1zaGFyZWQgLVdsLC1zb25hbWUsJEAnCisgCistCVNITElCX1hMREZMQUdTPSctV2wsLXJwYXRoLCQobGliZGlyKSAtV2wsLXNvbmFtZSxgYmFzZW5hbWUgJEAgJChTSExJQl9NSU5PUilgJworKwlTSExJQl9YTERGTEFHUz0nLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKyAJU0hMSUJfTElCVkVSU0lPTj0nJChTSExJQl9MSUJTVUZGKS4kKFNITElCX01BSk9SKSQoU0hMSUJfTUlOT1IpJworIAk7OworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS01LjIvY29uZmlndXJlLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTYwYTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2NvbmZpZ3VyZS1maXgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dpdGhvdXQgdGhpcyBpdCBmYWlscyB0byBsaW5rIGFnYWluc3QgbGlidGVybWNhcCBjYXVzaW5nIHZhcmlvdXMgbWlzc2luZyBzeW1ib2xzIAoraXNzdWVzLgorCitSUCAtIDgvMTAvMDgKKworSW5kZXg6IHJlYWRsaW5lLTUuMi9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSByZWFkbGluZS01LjIub3JpZy9jb25maWd1cmUuaW4JMjAwOC0xMC0wOCAwOTo1ODo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyByZWFkbGluZS01LjIvY29uZmlndXJlLmluCTIwMDgtMTAtMDggMDk6NTk6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjExLDEwICsyMTEsMTAgQEAKKyAgICAgICAgIEFDX01TR19DSEVDS0lORyhjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzKQorICAgICAgICAgZXZhbCBgVEVSTUNBUF9MSUI9JFRFUk1DQVBfTElCICR7Q09ORklHX1NIRUxMLS9iaW4vc2h9ICR7c3JjZGlyfS9zdXBwb3J0L3Nob2JqLWNvbmYgLUMgIiR7Q0N9IiAtYyAke2hvc3RfY3B1fSAtbyAke2hvc3Rfb3N9IC12ICR7aG9zdF92ZW5kb3J9YAorIAorLSMJY2FzZSAiJFNITElCX0xJQlMiIGluCistIwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworLSMJKikJCQlTSExJQl9MSUJTPSIkU0hMSUJfTElCUyAkVEVSTUNBUF9MSUIiIDs7CistIwllc2FjCisrCWNhc2UgIiRTSExJQl9MSUJTIiBpbgorKwkqY3Vyc2VzKnwqdGVybWNhcCp8KnRlcm1saWIqKQk7OworKwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKysJZXNhYworIAkKKyAgICAgICAgIEFDX1NVQlNUKFNIT0JKX0NDKQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS01LjIvZml4LXJlZHVuZGFudC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTY2YjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNS4yL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVGhpcyBzdXBwb3J0IHNjcmlwdCBlbmRzIHVwIGhhcmRjb2RpbmcgdW5uZWNlc3NhcnkgcnBhdGhzIGludG8gdGhlIGxpYnJhcmllcy4gV2UKK3dpbGwgc2VhcmNoICRsaWJkaXIgYXV0b21hdGljYWxseSBzbyB0aGlzIGlzIGp1c3Qgd2FzdGVzIHNwYWNlLiBUaGVyZSBtYXkgYmUgc29tZQorY2FzZXMgdGhpcyBpcyBuZWNlc3NhcnkgYnV0IG91ciB1c2UgY2FzZXMgYXJlbid0IG9uZSBvZiB0aGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcmVhZGxpbmUtNS4yL3N1cHBvcnQvc2hvYmotY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJlYWRsaW5lLTUuMi5vcmlnL3N1cHBvcnQvc2hvYmotY29uZgorKysrIHJlYWRsaW5lLTUuMi9zdXBwb3J0L3Nob2JqLWNvbmYKK0BAIC0xMTAsNyArMTEwLDcgQEAgbGludXgqLSp8Z251Ki0qfGsqYnNkKi1nbnUtKikKKyAJU0hPQkpfTEQ9JyR7Q0N9JworIAlTSE9CSl9MREZMQUdTPSctc2hhcmVkIC1XbCwtc29uYW1lLCRAJworIAorLQlTSExJQl9YTERGTEFHUz0nLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zb25hbWUsYGJhc2VuYW1lICRAICQoU0hMSUJfTUlOT1IpYCcKKysJU0hMSUJfWExERkxBR1M9Jy1XbCwtc29uYW1lLGBiYXNlbmFtZSAkQCAkKFNITElCX01JTk9SKWAnCisgCVNITElCX0xJQlZFUlNJT049JyQoU0hMSUJfTElCU1VGRikuJChTSExJQl9NQUpPUikkKFNITElCX01JTk9SKScKKyAJOzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9jb25maWd1cmUtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYzMTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9jb25maWd1cmUtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMgaXQgZmFpbHMgdG8gbGluayBhZ2FpbnN0IGxpYnRlcm1jYXAgY2F1c2luZyB2YXJpb3VzIG1pc3NpbmcKK3N5bWJvbHMgaXNzdWVzLgorCitSUCAtIDgvMTAvMDgKKworU3VwcG9ydCA2LjMgd2hpY2ggdXNlcyBjb25maWd1cmUuYWMgcmF0aGVyIHRoYW4gY29uZmlndXJlLmluLgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGNlYThmOTEuLjkwNzViOGYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTIxOCwxMCArMjE4LDEwIEBAIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L3N1cHBvcnQvc2hvYmotY29uZjsgdGhlbgorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKGNvbmZpZ3VyYXRpb24gZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMpCisgICAgICAgICBldmFsIGBURVJNQ0FQX0xJQj0kVEVSTUNBUF9MSUIgJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJHtzcmNkaXJ9L3N1cHBvcnQvc2hvYmotY29uZiAtQyAiJHtDQ30iIC1jICR7aG9zdF9jcHV9IC1vICR7aG9zdF9vc30gLXYgJHtob3N0X3ZlbmRvcn1gCisgCistIwljYXNlICIkU0hMSUJfTElCUyIgaW4KKy0jCSpjdXJzZXMqfCp0ZXJtY2FwKnwqdGVybWxpYiopCTs7CistIwkqKQkJCVNITElCX0xJQlM9IiRTSExJQl9MSUJTICRURVJNQ0FQX0xJQiIgOzsKKy0jCWVzYWMKKysJY2FzZSAiJFNITElCX0xJQlMiIGluCisrCSpjdXJzZXMqfCp0ZXJtY2FwKnwqdGVybWxpYiopCTs7CisrCSopCQkJU0hMSUJfTElCUz0iJFNITElCX0xJQlMgJFRFUk1DQVBfTElCIiA7OworKwllc2FjCisgCQorICAgICAgICAgQUNfU1VCU1QoU0hPQkpfQ0MpCisgICAgICAgICBBQ19TVUJTVChTSE9CSl9DRkxBR1MpCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lLWRpc3BhdGNoLW11bHRpa2V5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZDFhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS02LjMvcmVhZGxpbmUtZGlzcGF0Y2gtbXVsdGlrZXkucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA4ZWY4NTJhNWJlNzJjNzVlMTdmMjUxMGJlYTUyNDU1ZjgwOWI1NmNlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hldCBSYW1leSA8Y2hldC5yYW1leUBjYXNlLmVkdT4KK0RhdGU6IEZyaSwgMjggTWFyIDIwMTQgMTQ6MDc6NDIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8xMF0gUmVhZGxpbmUtNi4zIHBhdGNoIDIKKworRml4ZXMgbXVsdGkta2V5IGlzc3VlIGlkZW50aWZpZWQgaW4gdGhpcyB0aHJlYWQ6CitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLXJlYWRsaW5lLzIwMTQtMDMvbXNnMDAwMTAuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIHJlYWRsaW5lLmMgfCAzICsrLQorIDEgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcmVhZGxpbmUuYyBiL3JlYWRsaW5lLmMKK2luZGV4IGViNGVhZTMuLmFiYjI5YTAgMTAwNjQ0CistLS0gYS9yZWFkbGluZS5jCisrKysgYi9yZWFkbGluZS5jCitAQCAtNzQ0LDcgKzc0NCw4IEBAIF9ybF9kaXNwYXRjaF9jYWxsYmFjayAoY3h0KQorICAgICByID0gX3JsX3N1YnNlcV9yZXN1bHQgKHIsIGN4dC0+b2xkbWFwLCBjeHQtPm9rZXksIChjeHQtPmZsYWdzICYgS1NFUV9TVUJTRVEpKTsKKyAKKyAgIFJMX0NIRUNLX1NJR05BTFMgKCk7CistICBpZiAociA9PSAwKQkJCS8qIHN1Y2Nlc3MhICovCisrICAvKiBXZSBvbmx5IHRyZWF0IHZhbHVlcyA8IDAgc3BlY2lhbGx5IHRvIHNpbXVsYXRlIHJlY3Vyc2lvbi4gKi8KKysgIGlmIChyID49IDAgfHwgKHIgPT0gLTEgJiYgKGN4dC0+ZmxhZ3MgJiBLU0VRX1NVQlNFUSkgPT0gMCkpCS8qIHN1Y2Nlc3MhIG9yIGZhaWx1cmUhICovCisgICAgIHsKKyAgICAgICBfcmxfa2V5c2VxX2NoYWluX2Rpc3Bvc2UgKCk7CisgICAgICAgUkxfVU5TRVRTVEFURSAoUkxfU1RBVEVfTVVMVElLRVkpOworLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lLTYuMy9yZWFkbGluZTYzLTAwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGE5ZDgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUtNi4zL3JlYWRsaW5lNjMtMDAzCkBAIC0wLDAgKzEsNDMgQEAKK3JlYWRsaW5lOiBTZWN1cml0eSBBZHZpc29yeSAtIHJlYWRsaW5lIC0gQ1ZFLTIwMTQtMjUyNAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKworCQkJICAgUkVBRExJTkUgUEFUQ0ggUkVQT1JUCisJCQkgICA9PT09PT09PT09PT09PT09PT09PT0KKworUmVhZGxpbmUtUmVsZWFzZTogNi4zCitQYXRjaC1JRDogcmVhZGxpbmU2My0wMDMKKworQnVnLVJlcG9ydGVkLWJ5OgorQnVnLVJlZmVyZW5jZS1JRDoKK0J1Zy1SZWZlcmVuY2UtVVJMOgorCitCdWctRGVzY3JpcHRpb246CisKK1RoZXJlIGFyZSBkZWJ1Z2dpbmcgZnVuY3Rpb25zIGluIHRoZSByZWFkbGluZSByZWxlYXNlIHRoYXQgYXJlIHRoZW9yZXRpY2FsbHkKK2V4cGxvaXRhYmxlIGFzIHNlY3VyaXR5IHByb2JsZW1zLiAgVGhleSBhcmUgbm90IHB1YmxpYyBmdW5jdGlvbnMsIGJ1dCBoYXZlCitnbG9iYWwgbGlua2FnZS4KKworUGF0Y2ggKGFwcGx5IHdpdGggYHBhdGNoIC1wMCcpOgorCisqKiogLi4vcmVhZGxpbmUtNi4zL3V0aWwuYwkyMDEzLTA5LTAyIDEzOjM2OjEyLjAwMDAwMDAwMCAtMDQwMAorLS0tIHV0aWwuYwkyMDE0LTAzLTIwIDEwOjI1OjUzLjAwMDAwMDAwMCAtMDQwMAorKioqKioqKioqKioqKioqCisqKiogNDc3LDQ4MCAqKioqCistLS0gNDc5LDQ4MyAtLS0tCisgIH0KKyAgCisrICNpZiBkZWZpbmVkIChERUJVRykKKyAgI2lmIGRlZmluZWQgKFVTRV9WQVJBUkdTKQorICBzdGF0aWMgRklMRSAqX3JsX3RyYWNlZnA7CisqKioqKioqKioqKioqKioKKyoqKiA1MzksNTQyICoqKioKKy0tLSA1NDIsNTQ2IC0tLS0KKyAgfQorICAjZW5kaWYKKysgI2VuZGlmIC8qIERFQlVHICovCisgIAorICAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjYyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZS5pbmMKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBlZGl0aW5nIHR5cGVkIGNvbW1hbmQgbGluZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIFJlYWRsaW5lIGxpYnJhcnkgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIHRoYXQgYWxsb3cgdXNlcnMgdG8gZWRpdCBcCitjb21tYW5kIGxpbmVzIGFzIHRoZXkgYXJlIHR5cGVkIGluLiBCb3RoIEVtYWNzIGFuZCB2aSBlZGl0aW5nIG1vZGVzIGFyZSBhdmFpbGFibGUuIFRoZSBSZWFkbGluZSBsaWJyYXJ5IGluY2x1ZGVzICBcCithZGRpdGlvbmFsIGZ1bmN0aW9ucyB0byBtYWludGFpbiBhIGxpc3Qgb2YgcHJldmlvdXNseS1lbnRlcmVkIGNvbW1hbmQgbGluZXMsIHRvIHJlY2FsbCBhbmQgcGVyaGFwcyByZWVkaXQgdGhvc2UgICBcCitsaW5lcywgYW5kIHBlcmZvcm0gY3NoLWxpa2UgaGlzdG9yeSBleHBhbnNpb24gb24gcHJldmlvdXMgY29tbWFuZHMuIgorU0VDVElPTiA9ICJsaWJzIgorCisjIEdQTHYyKyAoPCA2LjApLCBHUEx2MysgKD49IDYuMCkKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK0RFUEVORFMgKz0gIm5jdXJzZXMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9yZWFkbGluZS8ke0JQTn0tJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZy1kaXJlbnQtc3ltYm9scy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub3JwYXRoLnBhdGNoIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitMRUFEX1NPTkFNRSA9ICJsaWJyZWFkbGluZS5zbyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1ha2UgaW5zdGFsbCBkb2Vzbid0IHByb3Blcmx5IGluc3RhbGwgdGhlc2UKKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBzaGxpYiBsaWJoaXN0b3J5ICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBzaGxpYiBsaWJyZWFkbGluZSAke0R9JHtsaWJkaXJ9CisKKwlybWRpciAke0R9JHtiaW5kaXJ9Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTAwN2EyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvcmVhZGxpbmUvcmVhZGxpbmVfNS4yLmJiCkBAIC0wLDAgKzEsODQgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZWRpdGluZyB0eXBlZCBjb21tYW5kIGxpbmVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSBSZWFkbGluZSBsaWJyYXJ5IHByb3ZpZGVzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHVzZXJzIHRvIGVkaXQgXAorY29tbWFuZCBsaW5lcyBhcyB0aGV5IGFyZSB0eXBlZCBpbi4gQm90aCBFbWFjcyBhbmQgdmkgZWRpdGluZyBtb2RlcyBhcmUgYXZhaWxhYmxlLiBUaGUgUmVhZGxpbmUgbGlicmFyeSBpbmNsdWRlcyAgXAorYWRkaXRpb25hbCBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gYSBsaXN0IG9mIHByZXZpb3VzbHktZW50ZXJlZCBjb21tYW5kIGxpbmVzLCB0byByZWNhbGwgYW5kIHBlcmhhcHMgcmVlZGl0IHRob3NlICAgXAorbGluZXMsIGFuZCBwZXJmb3JtIGNzaC1saWtlIGhpc3RvcnkgZXhwYW5zaW9uIG9uIHByZXZpb3VzIGNvbW1hbmRzLiIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wM2IzNmZkZDg0Zjc0YjhkODE4OWEyMDJiOTgwYjY3ZiIKKworREVQRU5EUyArPSAibmN1cnNlcyIKKworUFIgPSAicjkiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9yZWFkbGluZS8ke0JQTn0tJHtQVn0udGFyLmd6O25hbWU9YXJjaGl2ZSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDE7bmFtZT1wYXRjaDE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDI7bmFtZT1wYXRjaDI7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDM7bmFtZT1wYXRjaDM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDQ7bmFtZT1wYXRjaDQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDU7bmFtZT1wYXRjaDU7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDY7bmFtZT1wYXRjaDY7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDc7bmFtZT1wYXRjaDc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDg7bmFtZT1wYXRjaDg7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMDk7bmFtZT1wYXRjaDk7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTA7bmFtZT1wYXRjaDEwO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDExO25hbWU9cGF0Y2gxMTthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9yZWFkbGluZS9yZWFkbGluZS01LjItcGF0Y2hlcy9yZWFkbGluZTUyLTAxMjtuYW1lPXBhdGNoMTI7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vcmVhZGxpbmUvcmVhZGxpbmUtNS4yLXBhdGNoZXMvcmVhZGxpbmU1Mi0wMTM7bmFtZT1wYXRjaDEzO2FwcGx5PXllcztzdHJpcGxldmVsPTAgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L3JlYWRsaW5lL3JlYWRsaW5lLTUuMi1wYXRjaGVzL3JlYWRsaW5lNTItMDE0O25hbWU9cGF0Y2gxNDthcHBseT15ZXM7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnLWRpcmVudC1zeW1ib2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1yZWR1bmRhbnQtcnBhdGgucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImUzOTMzMWYzMmFkMTQwMDliOWZmNDljYzEwYzVlNzUxIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTJlODhkOTZhZWUyY2QxMTkyNTAwMzU2ZjA1MzU1NDBkYjQ5OTI4MmNhN2Y3NjMzOWZiNDIyOGMzMTI0OWY0NSIKKworU1JDX1VSSVtwYXRjaDEubWQ1c3VtXSAgICA9ICI5ZDRkNDE2MjJhYTliMjMwYzU3ZjY4NTQ4Y2U4N2Q4ZiIKK1NSQ19VUklbcGF0Y2gxLnNoYTI1NnN1bV0gPSAiZWFjMzA0YzM2OTE1NDA1OWY5MzA0OWFkYTMyODczOWZhYWY0MDMzOGQzY2IxZmI0YjU0NGM5M2Q1Y2UzZjhkNSIKK1NSQ19VUklbcGF0Y2gyLm1kNXN1bV0gICAgPSAiZjAzZTUxMmQxNDIwNmUzN2Y3ZDZhNzQ4YjU2Yjk0NzYiCitTUkNfVVJJW3BhdGNoMi5zaGEyNTZzdW1dID0gIjlkZWFjYWVmMjU1MDdhMGMyYWUwYjY2MWJmOTM0MjU1OWI1OWEyOTU0ZDY2ZWEzYzVmNWJjZDkwMGZkZmNmNzgiCitTUkNfVVJJW3BhdGNoMy5tZDVzdW1dICAgID0gIjI1MmI0MmQ4NzUwZjFhOTRiNmJkZjA4NjYxMmRjZWIyIgorU1JDX1VSSVtwYXRjaDMuc2hhMjU2c3VtXSA9ICIyYTU1ZDJlY2IxYzliMDE0N2FlYjE5M2E2MzIzNjE2YWIzMWMxYzUyNWE4M2IyZGIzYTk5NGIxNTU5NGJhOTM0IgorU1JDX1VSSVtwYXRjaDQubWQ1c3VtXSAgICA9ICJhMzIzMzNjMmU2MDNhM2VkMjUwNTE0ZTkxMDUwZTU1MiIKK1NSQ19VUklbcGF0Y2g0LnNoYTI1NnN1bV0gPSAiYTAzYjY1NjMzNzgxZWZhN2MzYWFlNWQ1NzE2Mjk4NWU3YjdhM2MxMGFjZjBmMjYyMWJlNjEwZTE2ZjI3ZTVmMiIKK1NSQ19VUklbcGF0Y2g1Lm1kNXN1bV0gICAgPSAiODEwNjc5NmMwOWI3ODk1MjNhM2E3OGFiNjljMDRiNmQiCitTUkNfVVJJW3BhdGNoNS5zaGEyNTZzdW1dID0gIjA2MDAxODk2NTE0MTQ4YTc1N2VhNmVkYmJkNDBjNGZjNDMzMWRjNjUzODQ3MjQ0Mzg2YzM3YjEzOGIxNTBmNjQiCitTUkNfVVJJW3BhdGNoNi5tZDVzdW1dICAgID0gIjUxMjE4OGUyYmYwODM3ZjdlY2ExOWRiZjcxZjE4MmFlIgorU1JDX1VSSVtwYXRjaDYuc2hhMjU2c3VtXSA9ICJkZmVmM2U5ODJjMGFkZjhiYjVhOWI3ZDA0NjhlYzhmNWYxODEzOGIzMjVlMjg3NTk0Mzc0NjRkZTViZTcxMDEzIgorU1JDX1VSSVtwYXRjaDcubWQ1c3VtXSAgICA9ICJhYzE3YWNhNjJlYjZmYjM5OGM5ZjJmZTlkZTU0MGFmZiIKK1NSQ19VUklbcGF0Y2g3LnNoYTI1NnN1bV0gPSAiNzc1YjAyOGM3Yjc2MTM5N2FjNmFlMWJkZmJhYzdlODk2ZGMzYjliM2FkYzJmOTEzMTI0OTkxODBjYTEzYmRkMSIKK1NSQ19VUklbcGF0Y2g4Lm1kNXN1bV0gICAgPSAiMjQ4NGMzOTJkYjAyMTkwNWYxMTJjZjk3YTk0ZGZkNGMiCitTUkNfVVJJW3BhdGNoOC5zaGEyNTZzdW1dID0gImEyMWI0ZTBiZjA1MzBiODc4YmFkMjRkNWJlMjNkMThhOWUwM2E3NWEzMWFlMzA4NDRkYzA5MzNiYjNkNzdlY2QiCitTUkNfVVJJW3BhdGNoOS5tZDVzdW1dICAgID0gImZjNmViMzVkMDc5MTRmYWU1YzU3ZDQ5YzEyNDgzZmY3IgorU1JDX1VSSVtwYXRjaDkuc2hhMjU2c3VtXSA9ICIxMzhkNWUwZjA3MDlhNDdhMmQxNjIxMjk1YTNkZDVlM2NjNzNiNjNiNWNjMjhkYWIwM2FiYzRlOTRmZTk1ZWNmIgorU1JDX1VSSVtwYXRjaDEwLm1kNXN1bV0gICAgPSAiN2EyYmYzZGM3YWM3NjgwYjE0NjFhNTcwMTEwMGU5MWIiCitTUkNfVVJJW3BhdGNoMTAuc2hhMjU2c3VtXSA9ICI4M2Y4YzFhYWRiODZiMWEyZmFkODgyMWE5YzZiZTcyYThkZTVhZmQ3ZmQ5ZmRlNThhMzBiM2I1N2Q5Mzk2OTNlIgorU1JDX1VSSVtwYXRjaDExLm1kNXN1bV0gICAgPSAiZWY2Y2VmNjgyMjY2MzQ3MGY2YWM4YzUxN2M1YTdlYzYiCitTUkNfVVJJW3BhdGNoMTEuc2hhMjU2c3VtXSA9ICIwOGFkMzM4NGFiMDkwNmU2ZmE0Y2M0MTdlYjhjNDNmZjU5Mzc1YmNlYWQxNWZkNWM4ZTMxNzMwZjA0MTNiM2Q2IgorU1JDX1VSSVtwYXRjaDEyLm1kNXN1bV0gICAgPSAiZTNlOWY0NDFjODExMTU4OTg1NWJjMzYzZTU2NDBmNmMiCitTUkNfVVJJW3BhdGNoMTIuc2hhMjU2c3VtXSA9ICIyMGYwMjQzYmUyMjk5YzIzMjEzNDkyY2MyYzE5Y2ZkMTVjYzUyOGQyYjU2NmE3NmEyZGU1ODMwNmJiOWU0YzllIgorU1JDX1VSSVtwYXRjaDEzLm1kNXN1bV0gICAgPSAiM2UyZTVmNTQzZWQyNjhhNjhmZDFmYTgzOWZhYWRlMWEiCitTUkNfVVJJW3BhdGNoMTMuc2hhMjU2c3VtXSA9ICIwY2M2NDk1MTZhNWJkZmE2MWM1ZTU2OTM3NDA3NTcwMjg4YjY5NzJkNzVhYTFiZDA2MGFkMzBlYmU5ODE0NGQ1IgorU1JDX1VSSVtwYXRjaDE0Lm1kNXN1bV0gICAgPSAiYTFiZTMwZTFjNmYxMDk5YmI1ZmNlZjAwYTI2MzFmYjgiCitTUkNfVVJJW3BhdGNoMTQuc2hhMjU2c3VtXSA9ICI2ZjFhNjgzMjBkMDE1MjJjYTFlYTVhNzM3MTI0ZWNjODczOWYzZGNiZmVhMmRlZTIxZTNjY2Y4MzlhMjFhODE3IgorCitpbmhlcml0IGF1dG90b29scworCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWV4Y2x1ZGU9YXV0b2hlYWRlciIKKworTEVBRF9TT05BTUUgPSAibGlicmVhZGxpbmUuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljYXQgJHtTfS9hY2xvY2FsLm00ID4gJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBNYWtlIGluc3RhbGwgZG9lc24ndCBwcm9wZXJseSBpbnN0YWxsIHRoZXNlCisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGliaGlzdG9yeSAke0R9JHtsaWJkaXJ9CisJb2VfbGliaW5zdGFsbCAtc28gLUMgc2hsaWIgbGlicmVhZGxpbmUgJHtEfSR7bGliZGlyfQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9yZWFkbGluZS9yZWFkbGluZV82LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5NjRhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3JlYWRsaW5lL3JlYWRsaW5lXzYuMy5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgcmVhZGxpbmUuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZWFkbGluZTYzLTAwMyBcCisgICAgICAgICAgICBmaWxlOi8vcmVhZGxpbmUtZGlzcGF0Y2gtbXVsdGlrZXkucGF0Y2giCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMzYzhmYjI3OWU5ODEyNzRmNDg1ZmQ5MWRhNzdlOTRhIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNTZiYTYwNzFiOTQ2MmY5ODBjNWE3MmFiMDAyMzg5M2I2NWJhNmRlYmI0ZWViNDc1ZDdhNTYzZGM2NWNhZmQ0MyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4MjhkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM2MDAzNDUmZ3JvdXBfaWQ9NDQ0MjcmYXRpZD00Mzk1NDRdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjIHN5c2ZzdXRpbHMtMi4xLjAvY29uZmlndXJlLmFjCistLS0gc3lzZnN1dGlscy0yLjEuMC9jb25maWd1cmUuYWMJMjAwNi0wOC0wNyAwODowODowMC4wMDAwMDAwMDAgKzAzMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTExIDA4OjEzOjA4LjY1MTU1MDYzNCArMDIwMAorQEAgLTIsNyArMiw3IEBACisgQUNfSU5JVChzeXNmc3V0aWxzLCAyLjEuMCwgbGludXgtZGlhZy1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQpCisgQU1fSU5JVF9BVVRPTUFLRQorIEFDX0NPTkZJR19TUkNESVIoW2NvbmZpZy5oLmluXSkKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworICMgQ2hlY2tzIGZvciBLTElCQyBzdXBwb3J0IChzaG91bGQgYmUgYmVmb3JlIEFDX1BST0dfTElCVE9PTCBhbmQgQUNfUFJPR19DQykKKyBBQ19DSEVDS19LTElCQwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3NlcGFyYXRlYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHMtMi4xLjAvc2VwYXJhdGVidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmU3MjVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3NlcGFyYXRlYnVpbGQucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0ZpeCBvdXQgb2YgdHJlZSBidWlsZCBpc3N1ZXMgc28gJHtCfSAhPSAke1N9IHdvcmtzLgorCitSUCAyMDEzLzAzLzE4CisKK0luZGV4OiBzeXNmc3V0aWxzLTIuMS4wL2NtZC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy9jbWQvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy4yMjQ1NTY1MDggKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL2NtZC9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDA4OjU3OjI3LjQ4MDU1NjUwMiArMDAwMAorQEAgLTEsNiArMSw2IEBACisgYmluX1BST0dSQU1TID0gc3lzdG9vbCAKKyBzeXN0b29sX1NPVVJDRVMgPSBzeXN0b29sLmMgbmFtZXMuYyBuYW1lcy5oCistSU5DTFVERVMgPSAtSS4uL2luY2x1ZGUKKytJTkNMVURFUyA9IC1JJChzcmNkaXIpLy4uL2luY2x1ZGUKKyBMREFERCA9IC4uL2xpYi9saWJzeXNmcy5sYQorIEVYVFJBX0NGTEFHUyA9IEBFWFRSQV9DRkxBR1NACisgQU1fQ0ZMQUdTID0gLVdhbGwgLVcgLVdzdHJpY3QtcHJvdG90eXBlcyAkKEVYVFJBX0NGTEFHUykKK0luZGV4OiBzeXNmc3V0aWxzLTIuMS4wL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2ZzdXRpbHMtMi4xLjAub3JpZy9saWIvTWFrZWZpbGUuYW0JMjAxMy0wMy0wOCAwODo1NzoyNy4yMjQ1NTY1MDggKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL2xpYi9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDA4OjU3OjI3LjQ4MDU1NjUwMiArMDAwMAorQEAgLTEsNyArMSw3IEBACisgbGliX0xUTElCUkFSSUVTID0gbGlic3lzZnMubGEKKyBsaWJzeXNmc19sYV9TT1VSQ0VTID0gc3lzZnNfdXRpbHMuYyBzeXNmc19hdHRyLmMgc3lzZnNfY2xhc3MuYyBkbGlzdC5jIFwKKyAgICAgICBzeXNmc19kZXZpY2UuYyBzeXNmc19kcml2ZXIuYyBzeXNmc19idXMuYyBzeXNmc19tb2R1bGUuYyBzeXNmcy5oCistSU5DTFVERVMgPSAtSS4uL2luY2x1ZGUKKytJTkNMVURFUyA9IC1JJChzcmNkaXIpLy4uL2luY2x1ZGUKKyBsaWJzeXNmc19sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyAyOjE6MAorIEVYVFJBX0NGTEFHUyA9IEBFWFRSQV9DTEZBR1NACisgbGlic3lzZnNfbGFfQ0ZMQUdTID0gLVdhbGwgLVcgLVdzdHJpY3QtcHJvdG90eXBlcyAkKEVYVFJBX0NMRkFHUykKK0luZGV4OiBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNmc3V0aWxzLTIuMS4wLm9yaWcvdGVzdC9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDA4OjU3OjI3LjIyNDU1NjUwOCArMDAwMAorKysrIHN5c2ZzdXRpbHMtMi4xLjAvdGVzdC9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDA5OjA2OjQ4LjE5NjU0MzMyNiArMDAwMAorQEAgLTIsMTQgKzIsMTQgQEAKKyBCVUlMVF9TT1VSQ0VTID0gdGVzdC5oCisgQ0xFQU5GSUxFUyA9IHRlc3QuaAorIHRlc3QuaDoKKy0JLi9jcmVhdGUtdGVzdAorKwkkKHNyY2RpcikvY3JlYXRlLXRlc3QgJChzcmNkaXIpL2xpYnN5c2ZzLmNvbmYKKyBnZXRfZGV2aWNlX1NPVVJDRVMgPSBnZXRfZGV2aWNlLmMKKyBnZXRfZHJpdmVyX1NPVVJDRVMgPSBnZXRfZHJpdmVyLmMKKyBnZXRfbW9kdWxlX1NPVVJDRVMgPSBnZXRfbW9kdWxlLmMKKyB0ZXN0bGlic3lzZnNfU09VUkNFUyA9IHRlc3QuYyB0ZXN0X2F0dHIuYyB0ZXN0X2J1cy5jIHRlc3RfY2xhc3MuYyBcCisgCQkgICAgICAgdGVzdF9kZXZpY2UuYyB0ZXN0X2RyaXZlci5jIHRlc3RfbW9kdWxlLmMgdGVzdF91dGlscy5jIFwKKyAJCSAgICAgICB0ZXN0b3V0LmMgdGVzdC1kZWZzLmggbGlic3lzZnMuY29uZiBjcmVhdGUtdGVzdAorLUlOQ0xVREVTID0gLUkuLi9pbmNsdWRlCisrSU5DTFVERVMgPSAtSSQoc3JjZGlyKS8uLi9pbmNsdWRlCisgTERBREQgPSAuLi9saWIvbGlic3lzZnMubGEKKyBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0xGQUdTQAorIEFNX0NGTEFHUyA9IC1XYWxsIC1XIC1Xc3RyaWN0LXByb3RvdHlwZXMgJChFWFRSQV9DTEZBR1MpCitJbmRleDogc3lzZnN1dGlscy0yLjEuMC90ZXN0L2NyZWF0ZS10ZXN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lzZnN1dGlscy0yLjEuMC5vcmlnL3Rlc3QvY3JlYXRlLXRlc3QJMjAwNS0xMS0yOCAxMDoyMjoxMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wL3Rlc3QvY3JlYXRlLXRlc3QJMjAxMy0wMy0wOCAwOTowNzowMy4zNzI1NDI4MzggKzAwMDAKK0BAIC0yLDcgKzIsNyBAQAorIAorIHJtIC1mIHRlc3QuaAorIAorLWNvbmZfZmlsZT0uL2xpYnN5c2ZzLmNvbmYKKytjb25mX2ZpbGU9JDEKKyAKKyAuICRjb25mX2ZpbGUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlscy0yLjEuMC9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTM1Yjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzZnN1dGlscy9zeXNmc3V0aWxzLTIuMS4wL3N5c2ZzdXRpbHMtMi4wLjAtY2xhc3MtZHVwLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2Zyb20gZmVkb3JhIGNvcmUgOV0KKworVGhpcyBwYXRjaCBpcyBmcm9tIHRoZSBGZWRvcmEgQ29yZSA5IHN5c2ZzdXRpbHMtMi4xLjAtMy5mYzkgcGFja2FnZS4KKworSXQgZml4ZXMgYSBwcm9ibGVtIGluIHRoZSB1cHN0cmVhbSBwYWNrYWdlIHdoZXJlIG5vdCBhbGwgZGV2aWNlcyAKK3dpbGwgYmUgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLgorCitUaGUgcGFja2FnZSBMaWNlbnNlIGluZGljYXRlcyB0aGlzIGlzIEdQTHYyIGxpY2Vuc2VkLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXB1TiBsaWIvc3lzZnNfY2xhc3MuY35zeXNmc3V0aWxzX2NsYXNzX2R1cCBsaWIvc3lzZnNfY2xhc3MuYworLS0tIHN5c2ZzdXRpbHMtMi4xLjAvbGliL3N5c2ZzX2NsYXNzLmN+c3lzZnN1dGlsc19jbGFzc19kdXAJMjAwNi0wOS0wNyAxNzowMToyNi4wMDAwMDAwMDAgLTA1MDAKKysrKyBzeXNmc3V0aWxzLTIuMS4wLWJqa2luZzEvbGliL3N5c2ZzX2NsYXNzLmMJMjAwNi0wOS0wNyAxNzowMToyNi4wMDAwMDAwMDAgLTA1MDAKK0BAIC02Niw3ICs2Niw3IEBAIHN0YXRpYyBpbnQgY2Rldl9uYW1lX2VxdWFsKHZvaWQgKmEsIHZvaWQKKyAJCXJldHVybiAwOworIAorIAlpZiAoc3RybmNtcCgoY2hhciAqKWEsICgoc3RydWN0IHN5c2ZzX2NsYXNzX2RldmljZSAqKWIpLT5uYW1lLAorLQkJCQlzdHJsZW4oKGNoYXIgKilhKSkgPT0gMCkKKysJCQkJU1lTRlNfTkFNRV9MRU4pID09IDApCisgCQlyZXR1cm4gMTsKKyAKKyAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXNmc3V0aWxzL3N5c2ZzdXRpbHNfMi4xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlmNDBmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c2ZzdXRpbHMvc3lzZnN1dGlsc18yLjEuMC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB3b3JraW5nIHdpdGggc3lzZnMiCitERVNDUklQVElPTiA9ICJUb29scyBmb3Igd29ya2luZyB3aXRoIHRoZSBzeXNmcyB2aXJ0dWFsIGZpbGVzeXN0ZW0uICBUaGUgdG9vbCAnc3lzdG9vbCcgY2FuIHF1ZXJ5IGRldmljZXMgYnkgYnVzLCBjbGFzcyBhbmQgdG9wb2xvZ3kuIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpbnV4LWRpYWcuc291cmNlZm9yZ2UubmV0L1N5c2ZzdXRpbHMuaHRtbCIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MiIKK0xJQ0VOU0VfbGlic3lzZnMgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZDA2NDAzZWE1NGM3NTc0YTllNTgxYzY0NzhjYzM5MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jbWQvR1BMO21kNT1kNDFkNGUyZTFlMTA4NTU0ZTAzODhlYTRhZWNkOGQyNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvTEdQTDttZDU9Yjc1ZDA2OTc5MTEwM2ZmZTFjMGQ2NDM1ZGVlZmY3MmUiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGludXgtZGlhZy9zeXNmc3V0aWxzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNmc3V0aWxzLTIuMC4wLWNsYXNzLWR1cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VwYXJhdGVidWlsZC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjE0ZTdkY2QwNDM2ZDJmNDlhYTQwM2Y2N2UxZWY3ZGRjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU4NjVkZTJjMWY1NTlmZmYwZDNmYzkzNmU2NjBjMGVmYWY3YWZlNjYyMDY0ZjJmYjk3Y2NhZDFlYzI4ZDIwOGEiCitTID0gIiR7V09SS0RJUn0vc3lzZnN1dGlscy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRVMgPSsgImxpYnN5c2ZzIgorRklMRVNfbGlic3lzZnMgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCitGSUxFU19saWJzeXNmcy1kZXYgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU0RFVn0gJHtpbmNsdWRlZGlyfSIKK0ZJTEVTX2xpYnN5c2ZzLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliKi5hIgorCitleHBvcnQgbGliZGlyID0gIiR7YmFzZV9saWJkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLWNvbXBhdC11bml0cy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI4ZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1jb21wYXQtdW5pdHMuYmIKQEAgLTAsMCArMSw0MyBAQAorU1VNTUFSWSA9ICJFbmhhbmNlcyBzeXN0ZW1kIGNvbXBhdGlsaWJpdHkgd2l0aCBleGlzdGluZyBTeXNWaW5pdCBzY3JpcHRzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitQUiA9ICJyMjkiCisKK0RFUEVORFMgPSAic3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgYWxsYXJjaAorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitTWVNURU1EX0RJU0FCTEVEX1NZU1ZfU0VSVklDRVMgPSAiIFwKKyAgYnVzeWJveC11ZGhjcGMgXAorICBod2Nsb2NrIFwKKyAgbmV0d29ya2luZyBcCisgIG5mc3NlcnZlciBcCisgIG5mc2NvbW1vbiBcCisgIHN5c2xvZy5idXN5Ym94IFwKKyIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwljZCAkRCR7c3lzY29uZmRpcn0vaW5pdC5kCisKKwllY2hvICJEaXNhYmxpbmcgdGhlIGZvbGxvd2luZyBzeXN2IHNjcmlwdHM6ICIKKworCU9QVFM9IiIKKworCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCU9QVFM9Ii0tcm9vdD0kRCIKKwlmaQorCisJZm9yIGkgaW4gJHtTWVNURU1EX0RJU0FCTEVEX1NZU1ZfU0VSVklDRVN9IDsgZG8KKwkJaWYgWyBcKCAtZSAkaSAtbyAkaS5zaCBcKSAtYSAhIFwoIC1lICREJHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS8kaS5zZXJ2aWNlIC1vICAtZSAkRCR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vJGkuc2VydmljZSBcKSBdIDsgdGhlbgorCQkJZWNobyAtbiAiJGk6ICIgOyBzeXN0ZW1jdGwgJHtPUFRTfSBtYXNrICRpLnNlcnZpY2UKKwkJZmkKKwlkb25lIDsgZWNobworfQorCitSRFBFUEVORFNfJHtQTn0gPSAic3lzdGVtZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjhiMTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiU2VyaWFsIHRlcm1pbmFsIHN1cHBvcnQgZm9yIHN5c3RlbWQiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvZmlsZXMvY29tbW9uLWxpY2Vuc2VzL0dQTC0yLjA7bWQ1PTgwMWY4MDk4MGQxNzFkZDY0MjU2MTA4MzNhMjJkYmU2IgorCitQUiA9ICJyNSIKKworU0VSSUFMX0NPTlNPTEUgPz0gIjExNTIwMCB0dHlTMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vc2VyaWFsLWdldHR5QC5zZXJ2aWNlIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaWYgWyAhIC16ICIke1NFUklBTF9DT05TT0xFU30iIF0gOyB0aGVuCisJCWRlZmF1bHRfYmF1ZHJhdGU9YGVjaG8gIiR7U0VSSUFMX0NPTlNPTEVTfSIgfCBzZWQgJ3MvXDsuKi8vJ2AKKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS9nZXR0eS50YXJnZXQud2FudHMvCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3NlcmlhbC1nZXR0eUAuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKwkJc2VkIC1pIC1lIHMvXEBCQVVEUkFURVxALyRkZWZhdWx0X2JhdWRyYXRlL2cgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5QC5zZXJ2aWNlCisKKwkJdG1wPSIke1NFUklBTF9DT05TT0xFU30iCisJCWZvciBlbnRyeSBpbiAkdG1wIDsgZG8KKwkJCWJhdWRyYXRlPWBlY2hvICRlbnRyeSB8IHNlZCAncy9cOy4qLy8nYAorCQkJdHR5ZGV2PWBlY2hvICRlbnRyeSB8IHNlZCAtZSAncy9eWzAtOV0qXDsvLycgLWUgJ3MvXDsuKi8vJ2AKKwkJCWlmIFsgIiRiYXVkcmF0ZSIgPSAiJGRlZmF1bHRfYmF1ZHJhdGUiIF0gOyB0aGVuCisJCQkJIyBlbmFibGUgdGhlIHNlcnZpY2UKKwkJCQlsbiAtc2YgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgXAorCQkJCQkke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL3N5c3RlbS9nZXR0eS50YXJnZXQud2FudHMvc2VyaWFsLWdldHR5QCR0dHlkZXYuc2VydmljZQorCQkJZWxzZQorCQkJCSMgaW5zdGFsbCBjdXN0b20gc2VydmljZSBmaWxlIGZvciB0aGUgbm9uLWRlZmF1bHQgYmF1ZHJhdGUKKwkJCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5JGJhdWRyYXRlQC5zZXJ2aWNlCisJCQkJc2VkIC1pIC1lIHMvXEBCQVVEUkFURVxALyRiYXVkcmF0ZS9nICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAuc2VydmljZQorCQkJCSMgZW5hYmxlIHRoZSBzZXJ2aWNlCisJCQkJbG4gLXNmICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5JGJhdWRyYXRlQC5zZXJ2aWNlIFwKKwkJCQkJJHtEfSR7c3lzY29uZmRpcn0vc3lzdGVtZC9zeXN0ZW0vZ2V0dHkudGFyZ2V0LndhbnRzL3NlcmlhbC1nZXR0eSRiYXVkcmF0ZUAkdHR5ZGV2LnNlcnZpY2UKKwkJCWZpCisJCWRvbmUKKwlmaQorfQorCitSREVQRU5EU18ke1BOfSA9ICJzeXN0ZW1kIgorCisjIFRoaXMgaXMgYSBtYWNoaW5lIHNwZWNpZmljIGZpbGUKK0ZJTEVTXyR7UE59ID0gIiR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi5zZXJ2aWNlICR7c3lzY29uZmRpcn0iCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisjIEFzIHRoaXMgcGFja2FnZSBpcyB0aWVkIHRvIHN5c3RlbWQsIG9ubHkgYnVpbGQgaXQgd2hlbiB3ZSdyZSBhbHNvIGJ1aWxkaW5nIHN5c3RlbWQuCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXNlcmlhbGdldHR5L3NlcmlhbC1nZXR0eUAuc2VydmljZSBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyMTY3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zZXJpYWxnZXR0eS9zZXJpYWwtZ2V0dHlALnNlcnZpY2UKQEAgLTAsMCArMSwzNyBAQAorIyAgVGhpcyBmaWxlIGlzIHBhcnQgb2Ygc3lzdGVtZC4KKyMKKyMgIHN5c3RlbWQgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitbVW5pdF0KK0Rlc2NyaXB0aW9uPVNlcmlhbCBHZXR0eSBvbiAlSQorRG9jdW1lbnRhdGlvbj1tYW46YWdldHR5KDgpIG1hbjpzeXN0ZW1kLWdldHR5LWdlbmVyYXRvcig4KQorRG9jdW1lbnRhdGlvbj1odHRwOi8vMHBvaW50ZXIuZGUvYmxvZy9wcm9qZWN0cy9zZXJpYWwtY29uc29sZS5odG1sCitCaW5kc1RvPWRldi0laS5kZXZpY2UKK0FmdGVyPWRldi0laS5kZXZpY2Ugc3lzdGVtZC11c2VyLXNlc3Npb25zLnNlcnZpY2UgcGx5bW91dGgtcXVpdC13YWl0LnNlcnZpY2UKK0FmdGVyPXJjLWxvY2FsLnNlcnZpY2UKKworIyBJZiBhZGRpdGlvbmFsIGdldHR5cyBhcmUgc3Bhd25lZCBkdXJpbmcgYm9vdCB0aGVuIHdlIHNob3VsZCBtYWtlCisjIHN1cmUgdGhhdCB0aGlzIGlzIHN5bmNocm9uaXplZCBiZWZvcmUgZ2V0dHkudGFyZ2V0LCBldmVuIHRob3VnaAorIyBnZXR0eS50YXJnZXQgZGlkbid0IGFjdHVhbGx5IHB1bGwgaXQgaW4uCitCZWZvcmU9Z2V0dHkudGFyZ2V0CitJZ25vcmVPbklzb2xhdGU9eWVzCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnQ9IlRFUk09eHRlcm0iCitFeGVjU3RhcnQ9LS9zYmluL2FnZXR0eSAtOCAtTCAtLWtlZXAtYmF1ZCAlSSBAQkFVRFJBVEVAICRURVJNCitUeXBlPWlkbGUKK1Jlc3RhcnQ9YWx3YXlzCitSZXN0YXJ0U2VjPTAKK1V0bXBJZGVudGlmaWVyPSVJCitUVFlQYXRoPS9kZXYvJUkKK1RUWVJlc2V0PXllcworVFRZVkhhbmd1cD15ZXMKK0tpbGxNb2RlPXByb2Nlc3MKK0lnbm9yZVNJR1BJUEU9bm8KK1NlbmRTSUdIVVA9eWVzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9Z2V0dHkudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZS5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC1zeXN0ZW1jdGwtbmF0aXZlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZGM5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZS5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIldyYXBwZXIgZm9yIGVuYWJsaW5nIHN5c3RlbWQgc2VydmljZXMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAiCisKK1BSID0gInI2IgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJID0gImZpbGU6Ly9zeXN0ZW1jdGwiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9zeXN0ZW1jdGwgJHtEfSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQtc3lzdGVtY3RsL3N5c3RlbWN0bApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTE2M2JkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLXN5c3RlbWN0bC9zeXN0ZW1jdGwKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9zaAorZWNobyAiU3RhcnRlZCAkMCAkKiIKKworUk9PVD0KKworIyBwYXJzZSBjb21tYW5kIGxpbmUgcGFyYW1zCithY3Rpb249Cit3aGlsZSBbICQjICE9IDAgXTsgZG8KKwlvcHQ9IiQxIgorCisJY2FzZSAiJG9wdCIgaW4KKwkJZW5hYmxlKQorCQkJc2hpZnQKKworCQkJYWN0aW9uPSIkb3B0IgorCQkJc2VydmljZXM9IiQxIgorCQkJY21kX2FyZ3M9IjEiCisJCQlzaGlmdAorCQkJOzsKKwkJZGlzYWJsZSkKKwkJCXNoaWZ0CisKKwkJCWFjdGlvbj0iJG9wdCIKKwkJCXNlcnZpY2VzPSIkMSIKKwkJCWNtZF9hcmdzPSIxIgorCQkJc2hpZnQKKwkJCTs7CisJCW1hc2spCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQlwcmVzZXQpCisJCQlzaGlmdAorCisJCQlhY3Rpb249IiRvcHQiCisJCQlzZXJ2aWNlcz0iJDEiCisJCQljbWRfYXJncz0iMSIKKwkJCXNoaWZ0CisJCQk7OworCQktLXJvb3Q9KikKKwkJCVJPT1Q9JHtvcHQjIy0tcm9vdD19CisJCQljbWRfYXJncz0iMCIKKwkJCXNoaWZ0CisJCQk7OworCQkqKQorCQkJaWYgWyAiJGNtZF9hcmdzIiA9ICIxIiBdOyB0aGVuCisJCQkJc2VydmljZXM9IiRzZXJ2aWNlcyAkb3B0IiAKKwkJCQlzaGlmdAorCQkJZWxzZQorCQkJCWVjaG8gIickb3B0JyBpcyBhbiB1bmtvd24gb3B0aW9uOyBleGl0aW5nIHdpdGggZXJyb3IiCisJCQkJZXhpdCAxCisJCQlmaQorCQkJOzsKKwllc2FjCitkb25lCitpZiBbICIkYWN0aW9uIiA9ICJwcmVzZXQiIC1hICIkc2VydmljZV9maWxlIiA9ICIiIF07IHRoZW4KKwlzZXJ2aWNlcz0kKGZvciBmIGluIGBmaW5kICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbSAkUk9PVC9saWIvc3lzdGVtZC9zeXN0ZW0gJFJPT1QvdXNyL2xpYi9zeXN0ZW1kL3N5c3RlbSAtdHlwZSBmIDI+MWA7IGRvIGJhc2VuYW1lICRmOyBkb25lKQorCXNlcnZpY2VzPSIkc2VydmljZXMgJG9wdCIKKwlwcmVzZXRhbGw9MQorZmkKKworZm9yIHNlcnZpY2UgaW4gJHNlcnZpY2VzOyBkbworCWlmIFsgIiRwcmVzZXRhbGwiID0gIjEiIF07IHRoZW4KKwkJYWN0aW9uPSJwcmVzZXQiCisJZmkKKwlpZiBbICIkYWN0aW9uIiA9ICJtYXNrIiBdOyB0aGVuCisJCWlmIFsgISAtZCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vIF07IHRoZW4KKwkJCW1rZGlyIC1wICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8KKwkJZmkKKwkJY21kPSJsbiAtcyAvZGV2L251bGwgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRzZXJ2aWNlIgorCQllY2hvICIkY21kIgorCQkkY21kCisJCWV4aXQgMAorCWZpCisKKwlzZXJ2aWNlX2Jhc2VfZmlsZT1gZWNobyAkc2VydmljZSB8IHNlZCAncy9cKEBcKS4qXChcLlteLl1cK1wpL1wxXDIvJ2AKKwlpZiBbIC16IGBlY2hvICRzZXJ2aWNlIHwgc2VkICcvQC9wO2QnYCBdOyB0aGVuCisJCWVjaG8gIlRyeSB0byBmaW5kIGxvY2F0aW9uIG9mICRzZXJ2aWNlLi4uIgorCQlzZXJ2aWNlX3RlbXBsYXRlPWZhbHNlCisJZWxzZQorCQllY2hvICJUcnkgdG8gZmluZCBsb2NhdGlvbiBvZiB0ZW1wbGF0ZSAkc2VydmljZV9iYXNlX2ZpbGUgb2YgaW5zdGFuY2UgJHNlcnZpY2UuLi4iCisJCXNlcnZpY2VfdGVtcGxhdGU9dHJ1ZQorCQlpZiBbIC16IGBlY2hvICRzZXJ2aWNlIHwgc2VkICdzL14uXCtAXCguKlwpXC5bXi5dXCsvXDEvJ2AgXTsgdGhlbgorCQkJaW5zdGFuY2Vfc3BlY2lmaWVkPWZhbHNlCisJCWVsc2UKKwkJCWluc3RhbmNlX3NwZWNpZmllZD10cnVlCisJCWZpCisJZmkKKworCSMgZmluZCBzZXJ2aWNlIGZpbGUKKwlmb3IgcCBpbiAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0gXAorCQkgJFJPT1QvbGliL3N5c3RlbWQvc3lzdGVtIFwKKwkJICRST09UL3Vzci9saWIvc3lzdGVtZC9zeXN0ZW07IGRvCisJCWlmIFsgLWUgJHAvJHNlcnZpY2VfYmFzZV9maWxlIF07IHRoZW4KKwkJCXNlcnZpY2VfZmlsZT0kcC8kc2VydmljZV9iYXNlX2ZpbGUKKwkJCXNlcnZpY2VfZmlsZT0ke3NlcnZpY2VfZmlsZSMjJFJPT1R9CisJCWZpCisJZG9uZQorCWlmIFsgLXogIiRzZXJ2aWNlX2ZpbGUiIF07IHRoZW4KKwkJZWNobyAiJyRzZXJ2aWNlX2Jhc2VfZmlsZScgY291bGRuJ3QgYmUgZm91bmQ7IGV4aXRpbmcgd2l0aCBlcnJvciIKKwkJZXhpdCAxCisJZmkKKwllY2hvICJGb3VuZCAkc2VydmljZSBpbiAkc2VydmljZV9maWxlIgorCisJIyBJZiBhbnkgbmV3IHVuaXQgdHlwZXMgYXJlIGFkZGVkIHRvIHN5c3RlbWQgdGhleSBzaG91bGQgYmUgYWRkZWQKKwkjIHRvIHRoaXMgcmVndWxhciBleHByZXNzaW9uLgorCXVuaXRfdHlwZXNfcmU9J1wuXChzZXJ2aWNlXHxzb2NrZXRcfGRldmljZVx8bW91bnRcfGF1dG9tb3VudFx8c3dhcFx8dGFyZ2V0XHxwYXRoXHx0aW1lclx8c25hcHNob3RcKSQnCisJaWYgWyAiJGFjdGlvbiIgPSAicHJlc2V0IiBdOyB0aGVuCisJCWFjdGlvbj1gZWdyZXAgLXNoICAkc2VydmljZSAkUk9PVC9ldGMvc3lzdGVtZC91c2VyLXByZXNldC8qLnByZXNldCB8IGN1dCAtZjEgLWQnICdgCisJCWlmIFsgLXogIiRhY3Rpb24iIF07IHRoZW4KKwkJCWdsb2JhbHByZXNldD1gZWdyZXAgLXNoICAnXConICAkUk9PVC9ldGMvc3lzdGVtZC91c2VyLXByZXNldC8qLnByZXNldCB8IGN1dCAtZjEgLWQnICdgCisJCQlpZiBbIC1uICIkZ2xvYmFscHJlc2V0IiBdOyB0aGVuCisJCQkJYWN0aW9uPSIkZ2xvYmFscHJlc2V0IgorCQkJZWxzZQorCQkJCWFjdGlvbj0iZW5hYmxlIgorCQkJZmkKKwkJZmkKKwlmaQorCSMgY3JlYXRlIHRoZSByZXF1aXJlZCBzeW1ib2xpYyBsaW5rcworCXdhbnRlZF9ieT0kKHNlZCAnL15XYW50ZWRCeVtbOnNwYWNlOl1dKj0vcyxbXj1dKj0sLHA7ZCcgIiRST09ULyRzZXJ2aWNlX2ZpbGUiIFwKKwkJICAgICAgICB8IHRyICcsJyAnXG4nIFwKKwkJICAgICAgICB8IGdyZXAgIiR1bml0X3R5cGVzX3JlIikKKworCWZvciByIGluICR3YW50ZWRfYnk7IGRvCisJCWVjaG8gIldhbnRlZEJ5PSRyIGZvdW5kIGluICRzZXJ2aWNlIgorCQlpZiBbICIkYWN0aW9uIiA9ICJlbmFibGUiIF07IHRoZW4KKwkJCWVuYWJsZV9zZXJ2aWNlPSRzZXJ2aWNlCisJCQlpZiBbICIkc2VydmljZV90ZW1wbGF0ZSIgPSB0cnVlIC1hICIkaW5zdGFuY2Vfc3BlY2lmaWVkIiA9IGZhbHNlIF07IHRoZW4KKwkJCQlkZWZhdWx0X2luc3RhbmNlPSQoc2VkICcvXkRlZmF1bHRJbnN0YW5jZVtbOnNwYWNlOl1dKj0vcyxbXj1dKj0sLHA7ZCcgIiRST09ULyRzZXJ2aWNlX2ZpbGUiKQorCQkJCWlmIFsgLXogJGRlZmF1bHRfaW5zdGFuY2UgXTsgdGhlbgorCQkJCQllY2hvICJUZW1wbGF0ZSB1bml0IHdpdGhvdXQgaW5zdGFuY2Ugb3IgRGVmYXVsdEluc3RhbmNlIGRpcmVjdGl2ZSwgbm90aGluZyB0byBlbmFibGUiCisJCQkJCWNvbnRpbnVlCisJCQkJZWxzZQorCQkJCQllY2hvICJGb3VuZCBEZWZhdWx0SW5zdGFuY2UgJGRlZmF1bHRfaW5zdGFuY2UsIGVuYWJsaW5nIGl0IgorCQkJCQllbmFibGVfc2VydmljZT0kKGVjaG8gJHNlcnZpY2UgfCBzZWQgInMvQC9AJGRlZmF1bHRfaW5zdGFuY2UvIikKKwkJCQlmaQorCQkJZmkKKwkJCW1rZGlyIC1wICRST09UL2V0Yy9zeXN0ZW1kL3N5c3RlbS8kci53YW50cworCQkJbG4gLXMgJHNlcnZpY2VfZmlsZSAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMvJGVuYWJsZV9zZXJ2aWNlCisJCQllY2hvICJFbmFibGVkICRlbmFibGVfc2VydmljZSBmb3IgJHdhbnRlZF9ieS4iCisJCWVsc2UKKwkJCWlmIFsgIiRzZXJ2aWNlX3RlbXBsYXRlIiA9IHRydWUgLWEgIiRpbnN0YW5jZV9zcGVjaWZpZWQiID0gZmFsc2UgXTsgdGhlbgorCQkJCWRpc2FibGVfc2VydmljZT0iJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyLndhbnRzL2BlY2hvICRzZXJ2aWNlIHwgc2VkICdzL0AvQCovJ2AiCisJCQllbHNlCisJCQkJZGlzYWJsZV9zZXJ2aWNlPSIkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMvJHNlcnZpY2UiCisJCQlmaQorCQkJcm0gLWYgJGRpc2FibGVfc2VydmljZQorCQkJWyAtZCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMgXSAmJiBybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMKKwkJCWVjaG8gIkRpc2FibGVkICR7ZGlzYWJsZV9zZXJ2aWNlIyMkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIud2FudHMvfSBmb3IgJHdhbnRlZF9ieS4iCisJCWZpCisJZG9uZQorCisJIyBjcmVhdGUgdGhlIHJlcXVpcmVkIHN5bWJvbGljICdBbGlhcycgbGlua3MKKwlhbGlhcz0kKHNlZCAnL15BbGlhc1tbOnNwYWNlOl1dKj0vcyxbXj1dKj0sLHA7ZCcgIiRST09ULyRzZXJ2aWNlX2ZpbGUiIFwKKwkJICAgICAgICB8IHRyICcsJyAnXG4nIFwKKwkJICAgICAgICB8IGdyZXAgIiR1bml0X3R5cGVzX3JlIikKKworCWZvciByIGluICRhbGlhczsgZG8KKwkJaWYgWyAiJGFjdGlvbiIgPSAiZW5hYmxlIiBdOyB0aGVuCisJCQlta2RpciAtcCAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0KKwkJCWxuIC1zICRzZXJ2aWNlX2ZpbGUgJFJPT1QvZXRjL3N5c3RlbWQvc3lzdGVtLyRyCisJCQllY2hvICJFbmFibGVkICRzZXJ2aWNlIGZvciAkYWxpYXMuIgorCQllbHNlCisJCQlybSAtZiAkUk9PVC9ldGMvc3lzdGVtZC9zeXN0ZW0vJHIKKwkJCWVjaG8gIkRpc2FibGVkICRzZXJ2aWNlIGZvciAkYWxpYXMuIgorCQlmaQorCWRvbmUKKworCSMgY2FsbCB1cyBmb3IgdGhlIG90aGVyIHJlcXVpcmVkIHNjcmlwdHMKKwlhbHNvPSQoc2VkICcvXkFsc29bWzpzcGFjZTpdXSo9L3MsW149XSo9LCxwO2QnICIkUk9PVC8kc2VydmljZV9maWxlIiBcCisJCSAgIHwgdHIgJywnICdcbicpCisJZm9yIGEgaW4gJGFsc287IGRvCisJCWVjaG8gIkFsc289JGEgZm91bmQgaW4gJHNlcnZpY2UiCisJCWlmIFsgIiRhY3Rpb24iID0gImVuYWJsZSIgXTsgdGhlbgorCQkJJDAgLS1yb290PSRST09UIGVuYWJsZSAkYQorCQlmaQorCWRvbmUKK2RvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2NiZTFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwLWNyZWF0ZS12b2xhdGlsZS5jb25mCkBAIC0wLDAgKzEsNyBAQAorI1RoaXMgZ29lcyBoYW5kLWluLWhhbmQgd2l0aCB0aGUgYmFzZS1maWxlcyBvZiBPRS1Db3JlLiBUaGUgZmlsZSBtdXN0CisjIGJlIHNvcnRlZCBiZWZvcmUgJ3N5c3RlbWQuY29uZicgYmVjdWFzZSB0aGlzIGF0dGVtcHRzIHRvIGNyZWF0ZSBhIGZpbGUKKyMgaW5zaWRlIC92YXIvbG9nLgorCisKK2QJCS92YXIvdm9sYXRpbGUvbG9nCQktCS0JLQktCitkCQkvdmFyL3ZvbGF0aWxlL3RtcAkJMTc3NwktCS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YWI1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwMS11bml0cy1QcmVmZXItZ2V0dHktdG8tYWdldHR5LWluLWNvbnNvbGUtc2V0dXAtc3lzdGVtLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gMTAwZTUwNjA0ZWZjNDAzMjAwMWEyZGU2YTZiNDc4NTNjMDAwMzgxNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI5OjE1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTFdIHVuaXRzOiBQcmVmZXIgZ2V0dHkgdG8gYWdldHR5IGluIGNvbnNvbGUgc2V0dXAgc3lzdGVtZAorIHVuaXRzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbiBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQgICAgICAgIHwgMiArLQorIHVuaXRzL3NlcmlhbC1nZXR0eUAuc2VydmljZS5tNCB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VuaXRzL2dldHR5QC5zZXJ2aWNlLm00IGIvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKK2luZGV4IDQ2MTY0YWIuLmJkZjZlYzggMTAwNjQ0CistLS0gYS91bml0cy9nZXR0eUAuc2VydmljZS5tNAorKysrIGIvdW5pdHMvZ2V0dHlALnNlcnZpY2UubTQKK0BAIC0yNyw3ICsyNyw3IEBAIENvbmRpdGlvblBhdGhFeGlzdHM9L2Rldi90dHkwCisgCisgW1NlcnZpY2VdCisgIyB0aGUgVlQgaXMgY2xlYXJlZCBieSBUVFlWVERpc2FsbG9jYXRlCistRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLS1ub2NsZWFyICVJICRURVJNCisrRXhlY1N0YXJ0PS0vc2Jpbi9nZXR0eSAtTCAlSSAkVEVSTQorIFR5cGU9aWRsZQorIFJlc3RhcnQ9YWx3YXlzCisgUmVzdGFydFNlYz0wCitkaWZmIC0tZ2l0IGEvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00IGIvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00CitpbmRleCA0NTIyZDBkLi5lNmQ0OTlkIDEwMDY0NAorLS0tIGEvdW5pdHMvc2VyaWFsLWdldHR5QC5zZXJ2aWNlLm00CisrKysgYi91bml0cy9zZXJpYWwtZ2V0dHlALnNlcnZpY2UubTQKK0BAIC0yMiw3ICsyMiw3IEBAIEJlZm9yZT1nZXR0eS50YXJnZXQKKyBJZ25vcmVPbklzb2xhdGU9eWVzCisgCisgW1NlcnZpY2VdCistRXhlY1N0YXJ0PS0vc2Jpbi9hZ2V0dHkgLS1rZWVwLWJhdWQgMTE1MjAwLDM4NDAwLDk2MDAgJUkgJFRFUk0KKytFeGVjU3RhcnQ9LS9zYmluL2dldHR5IC1MIDExNTIwMCAlSSAkVEVSTQorIFR5cGU9aWRsZQorIFJlc3RhcnQ9YWx3YXlzCisgVXRtcElkZW50aWZpZXI9JUkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDMtYmluZm10LURvbi10LWluc3RhbGwtZGVwZW5kZW5jeS1saW5rcy1hdC1pbnN0YWxsLXRpbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyMGZkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDAzLWJpbmZtdC1Eb24tdC1pbnN0YWxsLWRlcGVuZGVuY3ktbGlua3MtYXQtaW5zdGFsbC10aW0ucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorRnJvbSAxODRhODljYWFjZmEwMGYwN2U3Mjc1YmNhNTkyYmQ3ZGRhMWI1NDFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MDM6NDQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xMV0gYmluZm10OiBEb24ndCBpbnN0YWxsIGRlcGVuZGVuY3kgbGlua3MgYXQgaW5zdGFsbCB0aW1lCisgZm9yIHRoZSBiaW5mbXQgc2VydmljZXMKKwordXNlIFtJbnN0YWxsXSBibG9ja3Mgc28gdGhhdCB0aGV5IGdldCBjcmVhdGVkIHdoZW4gdGhlIHNlcnZpY2UgaXMgZW5hYmxlZAorbGlrZSBhIHRyYWRpdGlvbmFsIHNlcnZpY2UuCisKK1RoZSBbSW5zdGFsbF0gYmxvY2tzIHdlcmUgcmVqZWN0ZWQgdXBzdHJlYW0gYXMgdGhleSBkb24ndCBoYXZlIGEgd2F5IHRvCisiZW5hYmxlIgoraXQgb24gaW5zdGFsbCB3aXRob3V0IHN0YXRpYyBzeW1saW5rcyB3aGljaCBjYW4ndCBiZSBkaXNhYmxlZCwgb25seQorbWFza2VkLiAgV2UKK2hvd2V2ZXIgY2FuIGRvIHRoYXQgaW4gYSBwb3N0aW5zdC4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA0IC0tLS0KKyB1bml0cy9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQgfCAzICsrKworIHVuaXRzL3N5c3RlbWQtYmluZm10LnNlcnZpY2UuaW4gICAgICAgICB8IDUgKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2l0L01ha2VmaWxlLmFtCitAQCAtNDI3MSwxMCArNDI3MSw2IEBAIElOU1RBTExfRElSUyArPSBcCisgCSQocHJlZml4KS9saWIvYmluZm10LmQgXAorIAkkKHN5c2NvbmZkaXIpL2JpbmZtdC5kCisgCistU1lTSU5JVF9UQVJHRVRfV0FOVFMgKz0gXAorLQlzeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlIFwKKy0JcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CistCisgZW5kaWYKKyAKKyBFWFRSQV9ESVNUICs9IFwKK0luZGV4OiBnaXQvdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvcHJvYy1zeXMtZnMtYmluZm10X21pc2MuYXV0b21vdW50CisrKysgZ2l0L3VuaXRzL3Byb2Mtc3lzLWZzLWJpbmZtdF9taXNjLmF1dG9tb3VudAorQEAgLTE2LDMgKzE2LDYgQEAgQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPS9wcm9jL3N5cy8KKyAKKyBbQXV0b21vdW50XQorIFdoZXJlPS9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYworKworK1tJbnN0YWxsXQorK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CitJbmRleDogZ2l0L3VuaXRzL3N5c3RlbWQtYmluZm10LnNlcnZpY2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9zeXN0ZW1kLWJpbmZtdC5zZXJ2aWNlLmluCisrKysgZ2l0L3VuaXRzL3N5c3RlbWQtYmluZm10LnNlcnZpY2UuaW4KK0BAIC0xMSw2ICsxMSw4IEBAIERvY3VtZW50YXRpb249bWFuOnN5c3RlbWQtYmluZm10LnNlcnZpY2UKKyBEb2N1bWVudGF0aW9uPWh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL0RvY3VtZW50YXRpb24vYmluZm10X21pc2MudHh0CisgRGVmYXVsdERlcGVuZGVuY2llcz1ubworIENvbmZsaWN0cz1zaHV0ZG93bi50YXJnZXQKKytXYW50cz1wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKKysKKyBBZnRlcj1wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy5hdXRvbW91bnQKKyBCZWZvcmU9c3lzaW5pdC50YXJnZXQgc2h1dGRvd24udGFyZ2V0CisgQ29uZGl0aW9uUGF0aElzUmVhZFdyaXRlPS9wcm9jL3N5cy8KK0BAIC0yNSwzICsyNyw2IEBAIFR5cGU9b25lc2hvdAorIFJlbWFpbkFmdGVyRXhpdD15ZXMKKyBFeGVjU3RhcnQ9QHJvb3RsaWJleGVjZGlyQC9zeXN0ZW1kLWJpbmZtdAorIFRpbWVvdXRTZWM9OTBzCisrCisrW0luc3RhbGxdCisrV2FudGVkQnk9c3lzaW5pdC50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA0LWNvbmZpZ3VyZS1DaGVjay1mb3ItYWRkaXRpb25hbC1mZWF0dXJlcy10aGF0LXVjbGliYy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNzhkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNC1jb25maWd1cmUtQ2hlY2stZm9yLWFkZGl0aW9uYWwtZmVhdHVyZXMtdGhhdC11Y2xpYmMtLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gNGUyZThkYmYzZjIzYWI3ZGNhMzIyODZjYzBmMzdiZmY2YWM0OWUyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjA1OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMTFdIGNvbmZpZ3VyZTogQ2hlY2sgZm9yIGFkZGl0aW9uYWwgZmVhdHVyZXMgdGhhdCB1Y2xpYmMKKyBkb2VzbnQgc3VwcG9ydAorCitUaGlzIGhlbHBzIGluIHN1cHBvcnRpbmcgdWNsaWJjIHdoaWNoIGRvZXMgbm90IGhhdmUgYWxsIGZlYXR1cmVzIHRoYXQKK2dsaWJjIG1pZ2h0IGhhdmUKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxOCArKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKQorCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC0xMTAsNiArMTEwLDI0IEBAIEFDX1BBVEhfUFJPRyhbVU1PVU5UX1BBVEhdLCBbdW1vdW50XSwgWy8KKyAKKyBBU19JRihbISBsbiAtLXJlbGF0aXZlIC0taGVscCA+IC9kZXYvbnVsbCAyPiYxXSwgW0FDX01TR19FUlJPUihbKioqIGxuIGRvZXNuJ3Qgc3VwcG9ydCAtLXJlbGF0aXZlICoqKl0pXSkKKyAKKysjIGNoZWNrIGZvciBmZXcgZnVuY3Rpb25zIG5vdCBpbXBsZW1lbnRlZCBpbiB1Q2xpYmMKKysKKytBQ19DSEVDS19GVU5DU19PTkNFKG1rb3N0ZW1wIGV4ZWN2cGUgcG9zaXhfZmFsbG9jYXRlKQorKworKyMgY2hlY2sgZm9yICVtcyBmb3JtYXQgc3VwcG9ydCAtIGFzc3VtZSBhbHdheXMgbm8gaWYgY3Jvc3MgY29tcGlsaW5nCisrCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICVtcyBmb3JtYXQgaXMgc3VwcG9ydGVkIGJ5ICpzY2FuZl0pCisrCisrQUNfTElOS19JRkVMU0UoCisrCVtBQ19MQU5HX1BST0dSQU0oWworKwkgI2luY2x1ZGUgPHN0ZGlvLmg+CisrCSBdLFsKKysJICAgIGNoYXIgKmJ1ZjEsICpidWYyLCAqYnVmMywgc3RyPSIxIDIuMyBhYmNkZSIgOworKwkgICAgaW50IHJjID0gc3NjYW5mKHN0ciwgIiVtcyAlbXMgJW1zIiwgJmJ1ZjEsICZidWYyLCAmYnVmMykgOworKwkgICAgcmV0dXJuIChyYz09Myk/MDoxO10pXSwKKysJW0FDX0RFRklORShbSEFWRV9NU0ZPUk1BVF0sIFsxXSwgW0RlZmluZSBpZiAlbXMgZm9ybWF0IGlzIHN1cHBvcnRlZCBieSAqc2NhbmYuXSldLAorKwlbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisrCisgTTRfREVGSU5FUz0KKyAKKyBBQ19DSEVDS19UT09MKE9CSkNPUFksIG9iamNvcHkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNS1uc3Bhd24tVXNlLWV4ZWN2cGUtb25seS13aGVuLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhMDA4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA1LW5zcGF3bi1Vc2UtZXhlY3ZwZS1vbmx5LXdoZW4tbGliYy1zdXBwb3J0cy1pdC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGE3NDE3YzJlNjk1MGQ1NWMyMmMxYjBkMTU3ODM4OThiOGZmMjI5ZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwNToxMDozNyArMDAwMAorU3ViamVjdDogW1BBVENIIDA1LzExXSBuc3Bhd246IFVzZSBleGVjdnBlIG9ubHkgd2hlbiBsaWJjIHN1cHBvcnRzIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtubyBkZXNpcmUgZm9yIHVjbGliYyBzdXBwb3J0XQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL25zcGF3bi9uc3Bhd24uYyB8IDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworSW5kZXg6IGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL25zcGF3bi9uc3Bhd24uYworKysrIGdpdC9zcmMvbnNwYXduL25zcGF3bi5jCitAQCAtMTQzLDYgKzE0Myw4IEBAIHR5cGVkZWYgc3RydWN0IEN1c3RvbU1vdW50IHsKKyAgICAgICAgIGNoYXIgKipsb3dlcjsKKyB9IEN1c3RvbU1vdW50OworIAorKyNpbmNsdWRlICJjb25maWcuaCIKKysKKyBzdGF0aWMgY2hhciAqYXJnX2RpcmVjdG9yeSA9IE5VTEw7Cisgc3RhdGljIGNoYXIgKmFyZ190ZW1wbGF0ZSA9IE5VTEw7Cisgc3RhdGljIGNoYXIgKmFyZ191c2VyID0gTlVMTDsKK0BAIC00MjM4LDcgKzQyNDAsMTIgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKKyAgICAgICAgICAgICAgICAgYVswXSA9IChjaGFyKikgIi9zYmluL2luaXQiOworICAgICAgICAgICAgICAgICBleGVjdmUoYVswXSwgYSwgZW52X3VzZSk7CisgICAgICAgICB9IGVsc2UgaWYgKGFyZ2MgPiBvcHRpbmQpCisrI2lmZGVmIEhBVkVfRVhFQ1ZQRQorICAgICAgICAgICAgICAgICBleGVjdnBlKGFyZ3Zbb3B0aW5kXSwgYXJndiArIG9wdGluZCwgZW52X3VzZSk7CisrI2Vsc2UKKysgICAgICAgICAgICAgICAgZW52aXJvbiA9IGVudl91c2U7CisrICAgICAgICAgICAgICAgIGV4ZWN2cChhcmd2W29wdGluZF0sIGFyZ3YgKyBvcHRpbmQpOworKyNlbmRpZiAvKiBIQVZFX0VYRUNWUEUgKi8KKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICBjaGRpcihob21lID8gaG9tZSA6ICIvcm9vdCIpOworICAgICAgICAgICAgICAgICBleGVjbGUoIi9iaW4vYmFzaCIsICItYmFzaCIsIE5VTEwsIGVudl91c2UpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDYtam91cm5hbC1Vc2UtcG9zaXgtZmFsbG9jYXRlLW9ubHktaWYtYXZhaWxhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMWRkNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNi1qb3VybmFsLVVzZS1wb3NpeC1mYWxsb2NhdGUtb25seS1pZi1hdmFpbGFibGUucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSAzNGE2MWI2YzllZWQzZmFkMzYwMDY2ZmI2MzEzMmViYzdlMGFhYWE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTI6NDggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xMV0gam91cm5hbDogVXNlIHBvc2l4IGZhbGxvY2F0ZSBvbmx5IGlmIGF2YWlsYWJsZQorCitTb21lIGFyY2hpdGVjdHVyZSBwb3J0cyBpbiB1Y2xpYmMgZGlkIG5vdCBzdXBwb3J0IGl0IGluIHBhc3QKKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQgW25vIGRlc2lyZSBmb3IgdWNsaWJjIHN1cHBvcnRdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYyAgfCAxNiArKysrKysrKysrKysrKystCisgc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jIHwgMTUgKysrKysrKysrKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2pvdXJuYWwvam91cm5hbC1maWxlLmMgYi9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYworaW5kZXggMjg0NWUwNS4uOTQzMTE3MSAxMDA2NDQKKy0tLSBhL3NyYy9qb3VybmFsL2pvdXJuYWwtZmlsZS5jCisrKysgYi9zcmMvam91cm5hbC9qb3VybmFsLWZpbGUuYworQEAgLTM2LDYgKzM2LDggQEAKKyAjaW5jbHVkZSAiY29tcHJlc3MuaCIKKyAjaW5jbHVkZSAiZnNwcmcuaCIKKyAKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrCisgI2RlZmluZSBERUZBVUxUX0RBVEFfSEFTSF9UQUJMRV9TSVpFICgyMDQ3VUxMKnNpemVvZihIYXNoSXRlbSkpCisgI2RlZmluZSBERUZBVUxUX0ZJRUxEX0hBU0hfVEFCTEVfU0laRSAoMzMzVUxMKnNpemVvZihIYXNoSXRlbSkpCisgCitAQCAtMzU0LDcgKzM1Niw3IEBAIHN0YXRpYyBpbnQgam91cm5hbF9maWxlX2ZzdGF0KEpvdXJuYWxGaWxlICpmKSB7CisgCisgc3RhdGljIGludCBqb3VybmFsX2ZpbGVfYWxsb2NhdGUoSm91cm5hbEZpbGUgKmYsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkgeworICAgICAgICAgdWludDY0X3Qgb2xkX3NpemUsIG5ld19zaXplOworLSAgICAgICAgaW50IHI7CisrICAgICAgICBpbnQgciA9IDA7CisgCisgICAgICAgICBhc3NlcnQoZik7CisgCitAQCAtNDE4LDkgKzQyMCwyMSBAQCBzdGF0aWMgaW50IGpvdXJuYWxfZmlsZV9hbGxvY2F0ZShKb3VybmFsRmlsZSAqZiwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQorICAgICAgICAgLyogTm90ZSB0aGF0IHRoZSBnbGliYyBmYWxsb2NhdGUoKSBmYWxsYmFjayBpcyB2ZXJ5CisgICAgICAgICAgICBpbmVmZmljaWVudCwgaGVuY2Ugd2UgdHJ5IHRvIG1pbmltaXplIHRoZSBhbGxvY2F0aW9uIGFyZWEKKyAgICAgICAgICAgIGFzIHdlIGNhbi4gKi8KKysjaWZkZWYgSEFWRV9QT1NJWF9GQUxMT0NBVEUKKyAgICAgICAgIHIgPSBwb3NpeF9mYWxsb2NhdGUoZi0+ZmQsIG9sZF9zaXplLCBuZXdfc2l6ZSAtIG9sZF9zaXplKTsKKyAgICAgICAgIGlmIChyICE9IDApCisgICAgICAgICAgICAgICAgIHJldHVybiAtcjsKKysjZWxzZQorKyAgICAgICAgLyogV3JpdGUgc29tZXRoaW5nIGV2ZXJ5IDUxMiBieXRlcyB0byBtYWtlIHN1cmUgdGhlIGJsb2NrIGlzIGFsbG9jYXRlZCAqLworKyAgICAgICAgdWludDY0X3QgbGVuID0gbmV3X3NpemUgLSBvbGRfc2l6ZTsKKysgICAgICAgIHVpbnQ2NF90IG9mZnNldCA9IG9sZF9zaXplOworKyAgICAgICAgZm9yIChvZmZzZXQgKz0gKGxlbi0xKSAlIDUxMjsgbGVuID4gMDsgb2Zmc2V0ICs9IDUxMikgeworKyAgICAgICAgICAgICAgICBsZW4gLT0gNTEyOworKyAgICAgICAgICAgICAgICBpZiAocHdyaXRlKGYtPmZkLCAiIiwgMSwgb2Zmc2V0KSAhPSAxKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisrICAgICAgICB9CisrCisrI2VuZGlmIC8qIEhBVkVfUE9TSVhfRkFMTE9DQVRFICovCisgCisgICAgICAgICBmLT5oZWFkZXItPmFyZW5hX3NpemUgPSBodG9sZTY0KG5ld19zaXplIC0gbGU2NHRvaChmLT5oZWFkZXItPmhlYWRlcl9zaXplKSk7CisgCitkaWZmIC0tZ2l0IGEvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jIGIvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jCitpbmRleCBjNDIxNmM0Li5hOTk4ZWQ1IDEwMDY0NAorLS0tIGEvc3JjL2pvdXJuYWwvam91cm5hbGQta21zZy5jCisrKysgYi9zcmMvam91cm5hbC9qb3VybmFsZC1rbXNnLmMKK0BAIC00MzYsNiArNDM2LDcgQEAgZmFpbDoKKyBpbnQgc2VydmVyX29wZW5fa2VybmVsX3NlcW51bShTZXJ2ZXIgKnMpIHsKKyAgICAgICAgIF9jbGVhbnVwX2Nsb3NlXyBpbnQgZmQ7CisgICAgICAgICB1aW50NjRfdCAqcDsKKysgICAgICAgIGludCByID0gMDsKKyAKKyAgICAgICAgIGFzc2VydChzKTsKKyAKK0BAIC00NDksNyArNDUwLDE5IEBAIGludCBzZXJ2ZXJfb3Blbl9rZXJuZWxfc2VxbnVtKFNlcnZlciAqcykgeworICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKyAKKy0gICAgICAgIGlmIChwb3NpeF9mYWxsb2NhdGUoZmQsIDAsIHNpemVvZih1aW50NjRfdCkpIDwgMCkgeworKyNpZmRlZiBIQVZFX1BPU0lYX0ZBTExPQ0FURQorKyAgICAgICAgciA9IHBvc2l4X2ZhbGxvY2F0ZShmZCwgMCwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrI2Vsc2UKKysgICAgICAgIC8qIFVzZSBnb29kIG9sZCBtZXRob2QgdG8gd3JpdGUgemVyb3MgaW50byB0aGUgam91cm5hbCBmaWxlCisrICAgICAgICAgICBwZXJoYXBzIHZlcnkgaW5lZmZpY2llbnQgeWV0IHdvcmtpbmcuICovCisrICAgICAgICBjaGFyICpidWYgPSBhbGxvY2Eoc2l6ZW9mKHVpbnQ2NF90KSk7CisrICAgICAgICBvZmZfdCBvbGRwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOworKyAgICAgICAgYnplcm8oYnVmLCBzaXplb2YodWludDY0X3QpKTsKKysgICAgICAgIGxzZWVrKGZkLCAwLCBTRUVLX1NFVCk7CisrICAgICAgICByID0gd3JpdGUoZmQsIGJ1Ziwgc2l6ZW9mKHVpbnQ2NF90KSk7CisrICAgICAgICBsc2VlayhmZCwgb2xkcG9zLCBTRUVLX1NFVCk7CisrI2VuZGlmIC8qIEhBVkVfUE9TSVhfRkFMTE9DQVRFICovCisrICAgICAgICBpZiAociA8IDApIHsKKyAgICAgICAgICAgICAgICAgbG9nX2Vycm9yX2Vycm5vKGVycm5vLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNlcXVlbnRpYWwgbnVtYmVyIGZpbGUsIGlnbm9yaW5nOiAlbSIpOworICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDctdXRpbC1Vc2UtbWtvc3RlbXAtb25seS1pZi1saWJjLXN1cHBvcnRzLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWI3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwNy11dGlsLVVzZS1ta29zdGVtcC1vbmx5LWlmLWxpYmMtc3VwcG9ydHMtaXQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBmNzcxNDA3ZDNlMDI4OGNhMGMwNmE4OTQxOTRkM2RkYWQ2OWI5YThlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MTc6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xMV0gdXRpbDogVXNlIG1rb3N0ZW1wIG9ubHkgaWYgbGliYyBzdXBwb3J0cyBpdAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbbm8gZGVzaXJlIGZvciB1Y2xpYmMgc3VwcG9ydF0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9iYXNpYy91dGlsLmMgfCA4ICsrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3V0aWwuYyBiL3NyYy9iYXNpYy91dGlsLmMKK2luZGV4IGRjNjUyODAuLjcyZjQ2NjUgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvdXRpbC5jCitAQCAtOTcsNiArOTcsOCBAQAorICNpbmNsdWRlICJkZWYuaCIKKyAjaW5jbHVkZSAic3BhcnNlLWVuZGlhbi5oIgorIAorKyNpbmNsdWRlICJjb25maWcuaCIKKysKKyBpbnQgc2F2ZWRfYXJnYyA9IDA7CisgY2hhciAqKnNhdmVkX2FyZ3YgPSBOVUxMOworIAorQEAgLTY2ODIsNyArNjY4NCwxMyBAQCBpbnQgbWtvc3RlbXBfc2FmZShjaGFyICpwYXR0ZXJuLCBpbnQgZmxhZ3MpIHsKKyAKKyAgICAgICAgIHUgPSB1bWFzaygwNzcpOworIAorKyNpZmRlZiBIQVZFX01LT1NURU1QCisgICAgICAgICBmZCA9IG1rb3N0ZW1wKHBhdHRlcm4sIGZsYWdzKTsKKysjZWxzZQorKyAgICAgICAgZmQgPSBta3N0ZW1wKHBhdHRlcm4pOworKyAgICAgICAgaWYgKGZkID49IDApIGZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyk7CisrI2VuZGlmIC8qIEhBVkVfTUtPU1RFTVAgKi8KKysKKyAgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgICAgICAgICAgIHJldHVybiAtZXJybm87CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNGQ0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOC11dGlsLWJ5cGFzcy11bmltcGxlbWVudGVkLV9TQ19QSFlTX1BBR0VTLXN5c3RlbS1jb25mLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYjQ1ZWEzYmZkNjYzNTc0NGM4YTZiNzRkMGFjNzAxYjQ0YmIxZDI5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjE5OjM3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTFdIHV0aWw6IGJ5cGFzcyB1bmltcGxlbWVudGVkIF9TQ19QSFlTX1BBR0VTIHN5c3RlbQorIGNvbmZpZ3VyYXRpb24gQVBJIG9uIHVjbGliYworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYy1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9iYXNpYy91dGlsLmMgfCAxNSArKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2Jhc2ljL3V0aWwuYyBiL3NyYy9iYXNpYy91dGlsLmMKK2luZGV4IDcyZjQ2NjUuLmNiYmUzYjEgMTAwNjQ0CistLS0gYS9zcmMvYmFzaWMvdXRpbC5jCisrKysgYi9zcmMvYmFzaWMvdXRpbC5jCitAQCAtNjc5MywxMCArNjc5MywyNSBAQCB1aW50NjRfdCBwaHlzaWNhbF9tZW1vcnkodm9pZCkgeworICAgICAgICAgLyogV2UgcmV0dXJuIHRoaXMgYXMgdWludDY0X3QgaW4gY2FzZSB3ZSBhcmUgcnVubmluZyBhcyAzMmJpdAorICAgICAgICAgICogcHJvY2VzcyBvbiBhIDY0Yml0IGtlcm5lbCB3aXRoIGh1Z2UgYW1vdW50cyBvZiBtZW1vcnkgKi8KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICAgICAgY2hhciBsaW5lWzEyOF07CisrICAgICAgICBGSUxFICpmID0gZm9wZW4oIi9wcm9jL21lbWluZm8iLCAiciIpOworKyAgICAgICAgaWYgKGYgPT0gTlVMTCkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB3aGlsZSAoIWZlb2YoZikgJiYgZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLTEsIGYpKSB7CisrICAgICAgICAgICAgICAgIGlmIChzc2NhbmYobGluZSwgIk1lbVRvdGFsOiAlbCBrQiIsICZtZW0pID09IDEpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBtZW0gKj0gMTAyNDsKKysgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgICAgZmNsb3NlKGYpOworKyAgICAgICAgcmV0dXJuICh1aW50NjRfdCkgbWVtOworKyNlbHNlCisgICAgICAgICBtZW0gPSBzeXNjb25mKF9TQ19QSFlTX1BBR0VTKTsKKyAgICAgICAgIGFzc2VydChtZW0gPiAwKTsKKyAKKyAgICAgICAgIHJldHVybiAodWludDY0X3QpIG1lbSAqICh1aW50NjRfdCkgcGFnZV9zaXplKCk7CisrI2VuZGlmCisgfQorIAorIHZvaWQgaGV4ZHVtcChGSUxFICpmLCBjb25zdCB2b2lkICpwLCBzaXplX3QgcykgeworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWEzZTgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMDktc3lzdi1nZW5lcmF0b3ItYWRkLXN1cHBvcnQtZm9yLWV4ZWN1dGluZy1zY3JpcHRzLXVuZC5wYXRjaApAQCAtMCwwICsxLDE0MyBAQAorRnJvbSA4NzkxYjViMzkzNGM1NTY5NDg3MmI2OTE1YTY3MzQwNjgzZWFkOTFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MjI6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8xMV0gc3lzdi1nZW5lcmF0b3I6IGFkZCBzdXBwb3J0IGZvciBleGVjdXRpbmcgc2NyaXB0cyB1bmRlcgorIC9ldGMvcmNTLmQvCisKK1RvIGJlIGNvbXBhdGlibGUsIGFsbCBzZXJ2aWNlcyB0cmFuc2xhdGVkIGZyb20gc2NyaXB0cyB1bmRlciAvZXRjL3JjUy5kIHdvdWxkCitydW4gYmVmb3JlIHNlcnZpY2VzIHRyYW5zbGF0ZWQgZnJvbSBzY3JpcHRzIHVuZGVyIC9ldGMvcmNOLmQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc3lzdi1nZW5lcmF0b3Ivc3lzdi1nZW5lcmF0b3IuYyBiL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jCitpbmRleCBiZDY3ZjMyLi42NzU2Y2M2IDEwMDY0NAorLS0tIGEvc3JjL3N5c3YtZ2VuZXJhdG9yL3N5c3YtZ2VuZXJhdG9yLmMKKysrKyBiL3NyYy9zeXN2LWdlbmVyYXRvci9zeXN2LWdlbmVyYXRvci5jCitAQCAtNDIsNyArNDIsOCBAQAorIAorIHR5cGVkZWYgZW51bSBSdW5sZXZlbFR5cGUgeworICAgICAgICAgUlVOTEVWRUxfVVAsCistICAgICAgICBSVU5MRVZFTF9ET1dOCisrICAgICAgICBSVU5MRVZFTF9ET1dOLAorKyAgICAgICAgUlVOTEVWRUxfU1lTSU5JVAorIH0gUnVubGV2ZWxUeXBlOworIAorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworQEAgLTU3LDYgKzU4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICB7ICJyYzQuZCIsICBTUEVDSUFMX01VTFRJX1VTRVJfVEFSR0VULCBSVU5MRVZFTF9VUCB9LAorICAgICAgICAgeyAicmM1LmQiLCAgU1BFQ0lBTF9HUkFQSElDQUxfVEFSR0VULCAgUlVOTEVWRUxfVVAgfSwKKyAKKysgICAgICAgIC8qIERlYmlhbiBzdHlsZSByY1MuZCwgYWxzbyBhZG9wdGVkIGJ5IE9FICovCisrICAgICAgICB7ICJyY1MuZCIsICBTUEVDSUFMX1NZU0lOSVRfVEFSR0VULCAgIFJVTkxFVkVMX1NZU0lOSVR9LAorKworICAgICAgICAgLyogU3RhbmRhcmQgU3lzViBydW5sZXZlbHMgZm9yIHNodXRkb3duICovCisgICAgICAgICB7ICJyYzAuZCIsICBTUEVDSUFMX1BPV0VST0ZGX1RBUkdFVCwgIFJVTkxFVkVMX0RPV04gfSwKKyAgICAgICAgIHsgInJjNi5kIiwgIFNQRUNJQUxfUkVCT09UX1RBUkdFVCwgICAgUlVOTEVWRUxfRE9XTiB9CitAQCAtNjUsNyArNjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgICAgIGRpcmVjdG9yaWVzIGluIHRoaXMgb3JkZXIsIGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgICAgICBzeXN2X3N0YXJ0X3ByaW9yaXR5IGlzIGtub3duIHdoZW4gd2UgZmlyc3QgbG9hZCB0aGUKKyAgICAgICAgICAgIHVuaXQuIEFuZCB0aGF0IHZhbHVlIHdlIG9ubHkga25vdyBmcm9tIFMgbGlua3MuIEhlbmNlCistICAgICAgICAgICBVUCBtdXN0IGJlIHJlYWQgYmVmb3JlIERPV04gKi8KKysgICAgICAgICAgIFVQL1NZU0lOSVQgbXVzdCBiZSByZWFkIGJlZm9yZSBET1dOICovCisgfTsKKyAKKyB0eXBlZGVmIHN0cnVjdCBTeXN2U3R1YiB7CitAQCAtODEsNiArODUsOCBAQCB0eXBlZGVmIHN0cnVjdCBTeXN2U3R1YiB7CisgICAgICAgICBjaGFyICoqY29uZmxpY3RzOworICAgICAgICAgYm9vbCBoYXNfbHNiOworICAgICAgICAgYm9vbCByZWxvYWQ7CisrICAgICAgICBib29sIGRlZmF1bHRfZGVwZW5kZW5jaWVzOworKyAgICAgICAgYm9vbCBmcm9tX3Jjc2Q7CisgfSBTeXN2U3R1YjsKKyAKKyBjb25zdCBjaGFyICphcmdfZGVzdCA9ICIvdG1wIjsKK0BAIC0xODMsNiArMTg5LDkgQEAgc3RhdGljIGludCBnZW5lcmF0ZV91bml0X2ZpbGUoU3lzdlN0dWIgKnMpIHsKKyAgICAgICAgICAgICAgICAgIkRlc2NyaXB0aW9uPSVzXG4iLAorICAgICAgICAgICAgICAgICBzLT5wYXRoLCBzLT5kZXNjcmlwdGlvbik7CisgCisrICAgICAgICBpZiAoIXMtPmRlZmF1bHRfZGVwZW5kZW5jaWVzKQorKyAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICJEZWZhdWx0RGVwZW5kZW5jaWVzPW5vXG4iKTsKKysKKyAgICAgICAgIGlmICghaXNlbXB0eShiZWZvcmUpKQorICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICJCZWZvcmU9JXNcbiIsIGJlZm9yZSk7CisgICAgICAgICBpZiAoIWlzZW1wdHkoYWZ0ZXIpKQorQEAgLTcwNCwxOCArNzEzLDMwIEBAIHN0YXRpYyBpbnQgZml4X29yZGVyKFN5c3ZTdHViICpzLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgaWYgKHMtPmhhc19sc2IgJiYgb3RoZXItPmhhc19sc2IpCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgCistICAgICAgICAgICAgICAgIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA8IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKy0gICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmFmdGVyLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgIC8qIEFsbCBzY3JpcHRzIHVuZGVyIC9ldGMvcmNTLmQgc2hvdWxkIGV4ZWN1dGUgYmVmb3JlIHNjcmlwdHMgdW5kZXIKKysgICAgICAgICAgICAgICAgICogL2V0Yy9yY04uZCAqLworKyAgICAgICAgICAgICAgICBpZiAoIW90aGVyLT5mcm9tX3Jjc2QgJiYgcy0+ZnJvbV9yY3NkKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5iZWZvcmUsIG90aGVyLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworLSAgICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID4gcy0+c3lzdl9zdGFydF9wcmlvcml0eSkgeworLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YmVmb3JlLCBvdGhlci0+bmFtZSk7CisrICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3RoZXItPmZyb21fcmNzZCAmJiAhcy0+ZnJvbV9yY3NkKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgciA9IHN0cnZfZXh0ZW5kKCZzLT5hZnRlciwgb3RoZXItPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CistICAgICAgICAgICAgICAgIH0KKy0gICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlci0+c3lzdl9zdGFydF9wcmlvcml0eSA8IHMtPnN5c3Zfc3RhcnRfcHJpb3JpdHkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzdHJ2X2V4dGVuZCgmcy0+YWZ0ZXIsIG90aGVyLT5uYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKysgICAgICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3RoZXItPnN5c3Zfc3RhcnRfcHJpb3JpdHkgPiBzLT5zeXN2X3N0YXJ0X3ByaW9yaXR5KSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc3Rydl9leHRlbmQoJnMtPmJlZm9yZSwgb3RoZXItPm5hbWUpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9nX29vbSgpOworKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAgICAgLyogRklYTUU6IE1heWJlIHdlIHNob3VsZCBjb21wYXJlIHRoZSBuYW1lIGhlcmUgbGV4aWNvZ3JhcGhpY2FsbHk/ICovCisgICAgICAgICB9CitAQCAtNzc4LDYgKzc5OSw4IEBAIHN0YXRpYyBpbnQgZW51bWVyYXRlX3N5c3YoTG9va3VwUGF0aHMgbHAsIEhhc2htYXAgKmFsbF9zZXJ2aWNlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvZ19vb20oKTsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID0gLTE7CisrICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+ZGVmYXVsdF9kZXBlbmRlbmNpZXMgPSB0cnVlOworKyAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPmZyb21fcmNzZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPm5hbWUgPSBuYW1lOworICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UtPnBhdGggPSBmcGF0aDsKKyAKK0BAIC04NjQsOSArODg3LDExIEBAIHN0YXRpYyBpbnQgc2V0X2RlcGVuZGVuY2llc19mcm9tX3JjbmQoTG9va3VwUGF0aHMgbHAsIEhhc2htYXAgKmFsbF9zZXJ2aWNlcykgeworIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlLT5kX25hbWVbMF0gPT0gJ1MnKSAgeworIAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1VQKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyY25kX3RhYmxlW2ldLnR5cGUgPT0gUlVOTEVWRUxfVVAgfHwgcmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1NZU0lOSVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlLT5zeXN2X3N0YXJ0X3ByaW9yaXR5ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWChhKjEwICsgYiwgc2VydmljZS0+c3lzdl9zdGFydF9wcmlvcml0eSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+ZGVmYXVsdF9kZXBlbmRlbmNpZXMgPSAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX1NZU0lOSVQpP2ZhbHNlOnRydWU7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS0+ZnJvbV9yY3NkID0gKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKT90cnVlOmZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBzZXRfZW5zdXJlX2FsbG9jYXRlZCgmcnVubGV2ZWxfc2VydmljZXNbaV0sIE5VTEwpOworQEAgLTg3OCw3ICs5MDMsOCBAQCBzdGF0aWMgaW50IHNldF9kZXBlbmRlbmNpZXNfZnJvbV9yY25kKExvb2t1cFBhdGhzIGxwLCBIYXNobWFwICphbGxfc2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGUtPmRfbmFtZVswXSA9PSAnSycgJiYKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9ET1dOKSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmNuZF90YWJsZVtpXS50eXBlID09IFJVTkxFVkVMX0RPV04gfHwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjbmRfdGFibGVbaV0udHlwZSA9PSBSVU5MRVZFTF9TWVNJTklUKSkgeworIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gc2V0X2Vuc3VyZV9hbGxvY2F0ZWQoJnNodXRkb3duX3NlcnZpY2VzLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAwKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMC1NYWtlLXJvb3Qtcy1ob21lLWRpcmVjdG9yeS1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ3ZmY1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEwLU1ha2Utcm9vdC1zLWhvbWUtZGlyZWN0b3J5LWNvbmZpZ3VyYWJsZS5wYXRjaApAQCAtMCwwICsxLDE4MSBAQAorRnJvbSAzZGM3MzFjMWQyNzBlMmUxNDNkZTYyMWRiOWJkODk4Mjk5ZmQ4NDlkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDU6MjQ6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xMV0gTWFrZSByb290J3MgaG9tZSBkaXJlY3RvcnkgY29uZmlndXJhYmxlCisKK09wZW5FbWJlZGRlZCBoYXMgYSBjb25maWd1cmFibGUgaG9tZSBkaXJlY3RvcnkgZm9yIHJvb3QuIEFsbG93CitzeXN0ZW1kIHRvIGJlIGJ1aWx0IHVzaW5nIGl0cyBpZGVhIG9mIHdoYXQgcm9vdCdzIGhvbWUgZGlyZWN0b3J5CitzaG91bGQgYmUuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitVcHN0cmVhbSB3YW50cyB0byBoYXZlIGEgdW5pZmllZCBoaWVyYXJjaHkgd2hlcmUgZXZlcnlvbmUgaXMKK3VzaW5nIHRoZSBzYW1lIHJvb3QgZm9sZGVyLgoraHR0cHM6Ly9naXRodWIuY29tL3N5c3RlbWQvc3lzdGVtZC9pc3N1ZXMvNTQxCisKK1NpZ25lZC1vZmYtYnk6IERhbiBNY0dyZWdvciA8ZGFuLm1jZ3JlZ29yQHVzYXNrLmNhPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICB8IDIgKysKKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgfCA3ICsrKysrKysKKyBzcmMvY29yZS91bml0LXByaW50Zi5jICAgICAgICAgICAgfCAyICstCisgc3JjL25zcGF3bi9uc3Bhd24uYyAgICAgICAgICAgICAgIHwgNCArKy0tCisgc3JjL2Jhc2ljL3V0aWwuYyAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyB1bml0cy9jb25zb2xlLXNoZWxsLnNlcnZpY2UubTQuaW4gfCA0ICsrLS0KKyB1bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbiAgICAgICAgfCA0ICsrLS0KKyB1bml0cy9yZXNjdWUuc2VydmljZS5pbiAgICAgICAgICAgfCA0ICsrLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2l0L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnaXQvTWFrZWZpbGUuYW0KK0BAIC0yMDgsNiArMjA4LDcgQEAgQU1fQ1BQRkxBR1MgPSBcCisgCS1ETElCRElSPVwiJChsaWJkaXIpXCIgXAorIAktRFJPT1RMSUJESVI9XCIkKHJvb3RsaWJkaXIpXCIgXAorIAktRFJPT1RMSUJFWEVDRElSPVwiJChyb290bGliZXhlY2RpcilcIiBcCisrCS1EUk9PVEhPTUVESVI9XCIkKHJvb3Rob21lZGlyKVwiIFwKKyAJLURURVNUX0RJUj1cIiQoYWJzX3RvcF9zcmNkaXIpL3Rlc3RcIiBcCisgCS1JICQodG9wX3NyY2Rpcikvc3JjIFwKKyAJLUkgJCh0b3BfYnVpbGRkaXIpL3NyYy9iYXNpYyBcCitAQCAtNTYxNSw2ICs1NjE2LDcgQEAgRVhUUkFfRElTVCArPSBcCisgc3Vic3RpdHV0aW9ucyA9IFwKKyAgICAgICAgJ3xyb290bGliZXhlY2Rpcj0kKHJvb3RsaWJleGVjZGlyKXwnIFwKKyAgICAgICAgJ3xyb290YmluZGlyPSQocm9vdGJpbmRpcil8JyBcCisrICAgICAgICd8cm9vdGhvbWVkaXI9JChyb290aG9tZWRpcil8JyBcCisgICAgICAgICd8YmluZGlyPSQoYmluZGlyKXwnIFwKKyAgICAgICAgJ3xTWVNURU1DVEw9JChyb290YmluZGlyKS9zeXN0ZW1jdGx8JyBcCisgICAgICAgICd8U1lTVEVNRF9OT1RJRlk9JChyb290YmluZGlyKS9zeXN0ZW1kLW5vdGlmeXwnIFwKK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTEzODMsNiArMTM4MywxMSBAQCBBQ19BUkdfV0lUSChbcm9vdGxpYmRpcl0sCisgICAgICAgICBbd2l0aF9yb290bGliZGlyPSR7bGliZGlyfV0pCisgQVhfTk9STUFMSVpFX1BBVEgoW3dpdGhfcm9vdGxpYmRpcl0pCisgCisrQUNfQVJHX1dJVEgoW3Jvb3Rob21lZGlyXSwKKysgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcm9vdGhvbWVkaXI9RElSXSwgW0hvbWUgZGlyZWN0b3J5IGZvciB0aGUgcm9vdCB1c2VyXSksCisrICAgICAgICBbXSwKKysgICAgICAgIFt3aXRoX3Jvb3Rob21lZGlyPS9yb290XSkKKysKKyBBQ19BUkdfV0lUSChbcGFtbGliZGlyXSwKKyAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFtbGliZGlyPURJUl0sIFtEaXJlY3RvcnkgZm9yIFBBTSBtb2R1bGVzXSksCisgICAgICAgICBbXSwKK0BAIC0xNDc0LDYgKzE0NzksNyBAQCBBQ19TVUJTVChbcGFtbGliZGlyXSwgWyR3aXRoX3BhbWxpYmRpcl0pCisgQUNfU1VCU1QoW3BhbWNvbmZkaXJdLCBbJHdpdGhfcGFtY29uZmRpcl0pCisgQUNfU1VCU1QoW3Jvb3RwcmVmaXhdLCBbJHdpdGhfcm9vdHByZWZpeF0pCisgQUNfU1VCU1QoW3Jvb3RsaWJkaXJdLCBbJHdpdGhfcm9vdGxpYmRpcl0pCisrQUNfU1VCU1QoW3Jvb3Rob21lZGlyXSwgWyR3aXRoX3Jvb3Rob21lZGlyXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgTWFrZWZpbGUKK0BAIC0xNTYzLDYgKzE1NjksNyBAQCBBQ19NU0dfUkVTVUxUKFsKKyAgICAgICAgIGluY2x1ZGVkaXI6ICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9CisgICAgICAgICBsaWIgZGlyOiAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9CisgICAgICAgICByb290bGliIGRpcjogICAgICAgICAgICAgJHt3aXRoX3Jvb3RsaWJkaXJ9CisrICAgICAgICByb290IGhvbWUgZGlyOiAgICAgICAgICAgJHt3aXRoX3Jvb3Rob21lZGlyfQorICAgICAgICAgU3lzViBpbml0IHNjcmlwdHM6ICAgICAgICR7U1lTVEVNX1NZU1ZJTklUX1BBVEh9CisgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgJHtTWVNURU1fU1lTVlJDTkRfUEFUSH0KKyAgICAgICAgIEJ1aWxkIFB5dGhvbjogICAgICAgICAgICAke1BZVEhPTn0KK0luZGV4OiBnaXQvc3JjL2NvcmUvdW5pdC1wcmludGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9jb3JlL3VuaXQtcHJpbnRmLmMKKysrKyBnaXQvc3JjL2NvcmUvdW5pdC1wcmludGYuYworQEAgLTIzNyw3ICsyMzcsNyBAQCBzdGF0aWMgaW50IHNwZWNpZmllcl91c2VyX2hvbWUoY2hhciBzcGVjCisgICAgICAgICAgICAgICAgICAqIGJlc3Qgb2YgaXQgaWYgd2UgY2FuLCBidXQgZmFpbCBpZiB3ZSBjYW4ndCAqLworIAorICAgICAgICAgICAgICAgICBpZiAoIWMtPnVzZXIgfHwgc3RyZXEoYy0+dXNlciwgInJvb3QiKSB8fCBzdHJlcShjLT51c2VyLCAiMCIpKQorLSAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHJkdXAoIi9yb290Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHN0cmR1cChST09USE9NRURJUik7CisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisgCitJbmRleDogZ2l0L3NyYy9uc3Bhd24vbnNwYXduLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvbnNwYXduL25zcGF3bi5jCisrKysgZ2l0L3NyYy9uc3Bhd24vbnNwYXduLmMKK0BAIC00MTc2LDcgKzQxNzYsNyBAQCBzdGF0aWMgaW50IGlubmVyX2NoaWxkKAorICAgICAgICAgaWYgKGVudnBbbl9lbnZdKQorICAgICAgICAgICAgICAgICBuX2VudiArKzsKKyAKKy0gICAgICAgIGlmICgoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiSE9NRT0lcyIsIGhvbWUgPyBob21lOiAiL3Jvb3QiKSA8IDApIHx8CisrICAgICAgICBpZiAoKGFzcHJpbnRmKChjaGFyKiopKGVudnAgKyBuX2VudisrKSwgIkhPTUU9JXMiLCBob21lID8gaG9tZTogUk9PVEhPTUVESVIpIDwgMCkgfHwKKyAgICAgICAgICAgICAoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiVVNFUj0lcyIsIGFyZ191c2VyID8gYXJnX3VzZXIgOiAicm9vdCIpIDwgMCkgfHwKKyAgICAgICAgICAgICAoYXNwcmludGYoKGNoYXIqKikoZW52cCArIG5fZW52KyspLCAiTE9HTkFNRT0lcyIsIGFyZ191c2VyID8gYXJnX3VzZXIgOiAicm9vdCIpIDwgMCkpCisgICAgICAgICAgICAgICAgIHJldHVybiBsb2dfb29tKCk7CitAQCAtNDI0Nyw3ICs0MjQ3LDcgQEAgc3RhdGljIGludCBpbm5lcl9jaGlsZCgKKyAgICAgICAgICAgICAgICAgZXhlY3ZwKGFyZ3Zbb3B0aW5kXSwgYXJndiArIG9wdGluZCk7CisgI2VuZGlmIC8qIEhBVkVfRVhFQ1ZQRSAqLworICAgICAgICAgZWxzZSB7CistICAgICAgICAgICAgICAgIGNoZGlyKGhvbWUgPyBob21lIDogIi9yb290Iik7CisrICAgICAgICAgICAgICAgIGNoZGlyKGhvbWUgPyBob21lIDogUk9PVEhPTUVESVIpOworICAgICAgICAgICAgICAgICBleGVjbGUoIi9iaW4vYmFzaCIsICItYmFzaCIsIE5VTEwsIGVudl91c2UpOworICAgICAgICAgICAgICAgICBleGVjbGUoIi9iaW4vc2giLCAiLXNoIiwgTlVMTCwgZW52X3VzZSk7CisgICAgICAgICB9CitJbmRleDogZ2l0L3NyYy9iYXNpYy91dGlsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvYmFzaWMvdXRpbC5jCisrKysgZ2l0L3NyYy9iYXNpYy91dGlsLmMKK0BAIC0zMjMzLDcgKzMyMzMsNyBAQCBpbnQgZ2V0X3VzZXJfY3JlZHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgKmdpZCA9IDA7CisgCisgICAgICAgICAgICAgICAgIGlmIChob21lKQorLSAgICAgICAgICAgICAgICAgICAgICAgICpob21lID0gIi9yb290IjsKKysgICAgICAgICAgICAgICAgICAgICAgICAqaG9tZSA9IFJPT1RIT01FRElSOworIAorICAgICAgICAgICAgICAgICBpZiAoc2hlbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgKnNoZWxsID0gIi9iaW4vc2giOworQEAgLTQwNjksNyArNDA2OSw3IEBAIGludCBnZXRfaG9tZV9kaXIoY2hhciAqKl9oKSB7CisgICAgICAgICAvKiBIYXJkY29kZSBob21lIGRpcmVjdG9yeSBmb3Igcm9vdCB0byBhdm9pZCBOU1MgKi8KKyAgICAgICAgIHUgPSBnZXR1aWQoKTsKKyAgICAgICAgIGlmICh1ID09IDApIHsKKy0gICAgICAgICAgICAgICAgaCA9IHN0cmR1cCgiL3Jvb3QiKTsKKysgICAgICAgICAgICAgICAgaCA9IHN0cmR1cChST09USE9NRURJUik7CisgICAgICAgICAgICAgICAgIGlmICghaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAKK0luZGV4OiBnaXQvdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdW5pdHMvY29uc29sZS1zaGVsbC5zZXJ2aWNlLm00LmluCisrKysgZ2l0L3VuaXRzL2NvbnNvbGUtc2hlbGwuc2VydmljZS5tNC5pbgorQEAgLTE1LDggKzE1LDggQEAgQWZ0ZXI9cmMtbG9jYWwuc2VydmljZQorIEJlZm9yZT1nZXR0eS50YXJnZXQKKyAKKyBbU2VydmljZV0KKy1FbnZpcm9ubWVudD1IT01FPS9yb290CistV29ya2luZ0RpcmVjdG9yeT0vcm9vdAorK0Vudmlyb25tZW50PUhPTUU9QHJvb3Rob21lZGlyQAorK1dvcmtpbmdEaXJlY3Rvcnk9QHJvb3Rob21lZGlyQAorIEV4ZWNTdGFydD0tQFNVTE9HSU5ACisgRXhlY1N0b3BQb3N0PS1AU1lTVEVNQ1RMQCBwb3dlcm9mZgorIFR5cGU9aWRsZQorSW5kZXg6IGdpdC91bml0cy9lbWVyZ2VuY3kuc2VydmljZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluCisrKysgZ2l0L3VuaXRzL2VtZXJnZW5jeS5zZXJ2aWNlLmluCitAQCAtMTQsOCArMTQsOCBAQCBDb25mbGljdHM9cmVzY3VlLnNlcnZpY2UKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgCisgW1NlcnZpY2VdCistRW52aXJvbm1lbnQ9SE9NRT0vcm9vdAorLVdvcmtpbmdEaXJlY3Rvcnk9L3Jvb3QKKytFbnZpcm9ubWVudD1IT01FPUByb290aG9tZWRpckAKKytXb3JraW5nRGlyZWN0b3J5PUByb290aG9tZWRpckAKKyBFeGVjU3RhcnRQcmU9LS9iaW4vcGx5bW91dGggLS13YWl0IHF1aXQKKyBFeGVjU3RhcnRQcmU9LS9iaW4vZWNobyAtZSAnV2VsY29tZSB0byBlbWVyZ2VuY3kgbW9kZSEgQWZ0ZXIgbG9nZ2luZyBpbiwgdHlwZSAiam91cm5hbGN0bCAteGIiIHRvIHZpZXdcXG5zeXN0ZW0gbG9ncywgInN5c3RlbWN0bCByZWJvb3QiIHRvIHJlYm9vdCwgInN5c3RlbWN0bCBkZWZhdWx0IiBvciBeRCB0b1xcbnRyeSBhZ2FpbiB0byBib290IGludG8gZGVmYXVsdCBtb2RlLicKKyBFeGVjU3RhcnQ9LS9iaW4vc2ggLWMgIkBTVUxPR0lOQDsgQFNZU1RFTUNUTEAgLS1qb2ItbW9kZT1mYWlsIC0tbm8tYmxvY2sgZGVmYXVsdCIKK0luZGV4OiBnaXQvdW5pdHMvcmVzY3VlLnNlcnZpY2UuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91bml0cy9yZXNjdWUuc2VydmljZS5pbgorKysrIGdpdC91bml0cy9yZXNjdWUuc2VydmljZS5pbgorQEAgLTE0LDggKzE0LDggQEAgQWZ0ZXI9c3lzaW5pdC50YXJnZXQgcGx5bW91dGgtc3RhcnQuc2VydgorIEJlZm9yZT1zaHV0ZG93bi50YXJnZXQKKyAKKyBbU2VydmljZV0KKy1FbnZpcm9ubWVudD1IT01FPS9yb290CistV29ya2luZ0RpcmVjdG9yeT0vcm9vdAorK0Vudmlyb25tZW50PUhPTUU9QHJvb3Rob21lZGlyQAorK1dvcmtpbmdEaXJlY3Rvcnk9QHJvb3Rob21lZGlyQAorIEV4ZWNTdGFydFByZT0tL2Jpbi9wbHltb3V0aCBxdWl0CisgRXhlY1N0YXJ0UHJlPS0vYmluL2VjaG8gLWUgJ1dlbGNvbWUgdG8gZW1lcmdlbmN5IG1vZGUhIEFmdGVyIGxvZ2dpbmcgaW4sIHR5cGUgImpvdXJuYWxjdGwgLXhiIiB0byB2aWV3XFxuc3lzdGVtIGxvZ3MsICJzeXN0ZW1jdGwgcmVib290IiB0byByZWJvb3QsICJzeXN0ZW1jdGwgZGVmYXVsdCIgb3IgXkQgdG9cXG5ib290IGludG8gZGVmYXVsdCBtb2RlLicKKyBFeGVjU3RhcnQ9LS9iaW4vc2ggLWMgIkBTVUxPR0lOQDsgQFNZU1RFTUNUTEAgLS1qb2ItbW9kZT1mYWlsIC0tbm8tYmxvY2sgZGVmYXVsdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDExLXN5c3RlbWQtdXNlci1hdm9pZC11c2luZy1zeXN0ZW0tYXV0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTYyYmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTEtc3lzdGVtZC11c2VyLWF2b2lkLXVzaW5nLXN5c3RlbS1hdXRoLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gN2UyMDJmNzE3ODViZjVhNjdjOGE0ZjZiNThkMzU4NTYwOGZiZmRjNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDA1OjI2OjI1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTFdIHN5c3RlbWQtdXNlcjogYXZvaWQgdXNpbmcgc3lzdGVtLWF1dGgKKworSW4gT0UsIHdlIGRvbid0IHByb3ZpZGUgc3lzdGVtLWF1dGgsIGluc3RlYWQsIHdlIHVzZSBjb21tb24tKiBmaWxlcy4KK1NvIG1vZGlmeSBzeXN0ZW1kLXVzZXIgZmlsZSB0byB1c2UgY29tbW9uLSogZmlsZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvbG9naW4vc3lzdGVtZC11c2VyIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9sb2dpbi9zeXN0ZW1kLXVzZXIgYi9zcmMvbG9naW4vc3lzdGVtZC11c2VyCitpbmRleCA4MTEyZDc0Li45OTYzNWFmIDEwMDY0NAorLS0tIGEvc3JjL2xvZ2luL3N5c3RlbWQtdXNlcgorKysrIGIvc3JjL2xvZ2luL3N5c3RlbWQtdXNlcgorQEAgLTIsNSArMiw1IEBACisgIworICMgVXNlZCBieSBzeXN0ZW1kIC0tdXNlciBpbnN0YW5jZXMuCisgCistYWNjb3VudCAgaW5jbHVkZSBzeXN0ZW0tYXV0aAorLXNlc3Npb24gIGluY2x1ZGUgc3lzdGVtLWF1dGgKKythY2NvdW50ICBpbmNsdWRlIGNvbW1vbi1hY2NvdW50Cisrc2Vzc2lvbiAgaW5jbHVkZSBjb21tb24tc2Vzc2lvbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxMi1pbXBsbWVudC1zeXN0ZW1kLXN5c3YtaW5zdGFsbC1mb3ItT0UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiNDVhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDEyLWltcGxtZW50LXN5c3RlbWQtc3lzdi1pbnN0YWxsLWZvci1PRS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDVmOGI5ZjJkMjc2YzBkZGJjYmY1NDIzNzMzYTIzZjA0M2Q2ODgwMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCA1IFNlcCAyMDE1IDA2OjMxOjQ3ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGltcGxtZW50IHN5c3RlbWQtc3lzdi1pbnN0YWxsIGZvciBPRQorCitVc2UgdXBkYXRlLXJjLmQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBhbmQgc3RhdHVzIGNvbW1hbmQKK3RvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHN5c3Ygc2VydmljZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLVNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTiB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9zcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL3N5c3RlbWN0bC9zeXN0ZW1kLXN5c3YtaW5zdGFsbC5TS0VMRVRPTgorKysrIGdpdC9zcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OCitAQCAtMzAsMTcgKzMwLDE3IEBAIGNhc2UgIiQxIiBpbgorICAgICBlbmFibGUpCisgICAgICAgICAjIGNhbGwgdGhlIGNvbW1hbmQgdG8gZW5hYmxlIFN5c1YgaW5pdCBzY3JpcHQgJE5BTUUgaGVyZQorICAgICAgICAgIyAoY29uc2lkZXIgb3B0aW9uYWwgJFJPT1QpCistICAgICAgICBlY2hvICJJTVBMRU1FTlQgTUU6IGVuYWJsaW5nIFN5c1YgaW5pdC5kIHNjcmlwdCAkTkFNRSIKKysgICAgICAgIHVwZGF0ZS1yYy5kIC1mICROQU1FIGRlZmF1bHRzCisgICAgICAgICA7OworICAgICBkaXNhYmxlKQorICAgICAgICAgIyBjYWxsIHRoZSBjb21tYW5kIHRvIGRpc2FibGUgU3lzViBpbml0IHNjcmlwdCAkTkFNRSBoZXJlCisgICAgICAgICAjIChjb25zaWRlciBvcHRpb25hbCAkUk9PVCkKKy0gICAgICAgIGVjaG8gIklNUExFTUVOVCBNRTogZGlzYWJsaW5nIFN5c1YgaW5pdC5kIHNjcmlwdCAkTkFNRSIKKysgICAgICAgIHVwZGF0ZS1yYy5kIC1mICROQU1FIHJlbW92ZQorICAgICAgICAgOzsKKyAgICAgaXMtZW5hYmxlZCkKKyAgICAgICAgICMgZXhpdCB3aXRoIDAgaWYgJE5BTUUgaXMgZW5hYmxlZCwgbm9uLXplcm8gaWYgaXQgaXMgZGlzYWJsZWQKKyAgICAgICAgICMgKGNvbnNpZGVyIG9wdGlvbmFsICRST09UKQorLSAgICAgICAgZWNobyAiSU1QTEVNRU5UIE1FOiBjaGVja2luZyBTeXNWIGluaXQuZCBzY3JpcHQgJE5BTUUiCisrICAgICAgICAvZXRjL2luaXQuZC8kTkFNRSBzdGF0dXMKKyAgICAgICAgIDs7CisgICAgICopCisgICAgICAgICB1c2FnZSA7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMmJhNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNC1SZXZlcnQtcnVsZXMtcmVtb3ZlLWZpcm13YXJlLWxvYWRpbmctcnVsZXMucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA0ZjBhNzIyNDg5MTU0ZGE5OWU3ZjZiMzA1MWFmZGU5ODRlZWQyZjc0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNTowMToyOSArMTEwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgInJ1bGVzOiByZW1vdmUgZmlybXdhcmUgbG9hZGluZyBydWxlcyIKKworVGhpcyByZXZlcnRzIGNvbW1pdCA3MGU3ZDc1NGRkYjM1NmZiMWEyOTQyYjI2MmY4Y2VlOTY1MGUyYTE5LgorVXNlcnNwYWNlIGZpcm13YXJlIGxvYWRpbmcgc3VwcG9ydCBpcyBuZWVkZWQgZm9yIExpbnV4IDwgMy43LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CistLS0KKyBydWxlcy81MC1maXJtd2FyZS5ydWxlcyB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBydWxlcy81MC1maXJtd2FyZS5ydWxlcworCitkaWZmIC0tZ2l0IGEvcnVsZXMvNTAtZmlybXdhcmUucnVsZXMgYi9ydWxlcy81MC1maXJtd2FyZS5ydWxlcworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYwYWU2ODQKKy0tLSAvZGV2L251bGwKKysrKyBiL3J1bGVzLzUwLWZpcm13YXJlLnJ1bGVzCitAQCAtMCwwICsxLDMgQEAKKysjIGRvIG5vdCBlZGl0IHRoaXMgZmlsZSwgaXQgd2lsbCBiZSBvdmVyd3JpdHRlbiBvbiB1cGRhdGUKKysKKytTVUJTWVNURU09PSJmaXJtd2FyZSIsIEFDVElPTj09ImFkZCIsIFJVTntidWlsdGlufT0iZmlybXdhcmUiCistLSAKKzIuMy4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC8wMDE1LVJldmVydC11ZGV2LXJlbW92ZS11c2Vyc3BhY2UtZmlybXdhcmUtbG9hZGluZy1zdXBwb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDhjYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvMDAxNS1SZXZlcnQtdWRldi1yZW1vdmUtdXNlcnNwYWNlLWZpcm13YXJlLWxvYWRpbmctc3VwcG9yLnBhdGNoCkBAIC0wLDAgKzEsMzY0IEBACitGcm9tIDdmMDc0ZGVmNGUzMjA0NTM1M2JhNDMzNmQ3MDNlMTdiOGRlN2VjNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE1OjAxOjMzICsxMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAidWRldjogcmVtb3ZlIHVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQiCisKK1RoaXMgcmV2ZXJ0cyBjb21taXQgYmUyZWE3MjNiMWQwMjNiM2QzODVkM2I3OTFlZTQ2MDdjYmZiMjBjYS4KK1VzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIHN1cHBvcnQgaXMgbmVlZGVkIGZvciBMaW51eCA8IDMuNy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgMTIgKysrCisgUkVBRE1FICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKystCisgVE9ETyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgIHwgIDIwICsrKysrCisgc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMgfCAxNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL3VkZXYvdWRldi1idWlsdGluLmMgICAgICAgICAgfCAgIDMgKworIHNyYy91ZGV2L3VkZXYuaCAgICAgICAgICAgICAgICAgIHwgICA2ICsrCisgc3JjL3VkZXYvdWRldmQuYyAgICAgICAgICAgICAgICAgfCAgMTMgKysrKworIDggZmlsZXMgY2hhbmdlZCwgMjE0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5hbQorKysrIGdpdC9NYWtlZmlsZS5hbQorQEAgLTM0NzAsNiArMzQ3MCwxOCBAQCBsaWJ1ZGV2X2NvcmVfbGFfTElCQUREID0gXAorIAkkKEJMS0lEX0xJQlMpIFwKKyAJJChLTU9EX0xJQlMpCisgCisrbGlidWRldl9jb3JlX2xhX0NQUEZMQUdTID0gXAorKwkkKEFNX0NQUEZMQUdTKSBcCisrCS1ERklSTVdBUkVfUEFUSD0iJChGSVJNV0FSRV9QQVRIKSIKKysKKytpZiBFTkFCTEVfRklSTVdBUkUKKytsaWJ1ZGV2X2NvcmVfbGFfU09VUkNFUyArPSBcCisrCXNyYy91ZGV2L3VkZXYtYnVpbHRpbi1maXJtd2FyZS5jCisrCisrZGlzdF91ZGV2cnVsZXNfREFUQSArPSBcCisrCXJ1bGVzLzUwLWZpcm13YXJlLnJ1bGVzCisrZW5kaWYKKysKKyBpZiBIQVZFX0tNT0QKKyBsaWJ1ZGV2X2NvcmVfbGFfU09VUkNFUyArPSBcCisgCXNyYy91ZGV2L3VkZXYtYnVpbHRpbi1rbW9kLmMKK0luZGV4OiBnaXQvUkVBRE1FCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvUkVBRE1FCisrKysgZ2l0L1JFQURNRQorQEAgLTM2LDcgKzM2LDggQEAgTElDRU5TRToKKyAgICAgICAgIC0gZXhjZXB0IHNyYy91ZGV2Lyogd2hpY2ggaXMgKGN1cnJlbnRseSBzdGlsbCkgR1BMdjIsIEdQTHYyKworIAorIFJFUVVJUkVNRU5UUzoKKy0gICAgICAgIExpbnV4IGtlcm5lbCA+PSAzLjcKKysgICAgICAgIExpbnV4IGtlcm5lbCA+PSAzLjAKKysgICAgICAgIExpbnV4IGtlcm5lbCA+PSAzLjMgZm9yIGxvb3AgZGV2aWNlIHBhcnRpdGlvbiBzdXBwb3J0IGZlYXR1cmVzIHdpdGggbnNwYXduCisgICAgICAgICBMaW51eCBrZXJuZWwgPj0gMy44IGZvciBTbWFjayBzdXBwb3J0CisgCisgICAgICAgICBLZXJuZWwgQ29uZmlnIE9wdGlvbnM6CitAQCAtNTEsMTQgKzUyLDE0IEBAIFJFUVVJUkVNRU5UUzoKKyAgICAgICAgICAgQ09ORklHX1BST0NfRlMKKyAgICAgICAgICAgQ09ORklHX0ZIQU5ETEUgKGxpYnVkZXYsIG1vdW50IGFuZCBiaW5kIG1vdW50IGhhbmRsaW5nKQorIAorLSAgICAgICAgdWRldiB3aWxsIGZhaWwgdG8gd29yayB3aXRoIHRoZSBsZWdhY3kgc3lzZnMgbGF5b3V0OgorKyAgICAgICAgVWRldiB3aWxsIGZhaWwgdG8gd29yayB3aXRoIHRoZSBsZWdhY3kgbGF5b3V0OgorICAgICAgICAgICBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD1uCisgCisgICAgICAgICBMZWdhY3kgaG90cGx1ZyBzbG93cyBkb3duIHRoZSBzeXN0ZW0gYW5kIGNvbmZ1c2VzIHVkZXY6CisgICAgICAgICAgIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9IiIKKyAKKy0gICAgICAgIFVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHNob3VsZAorLSAgICAgICAgYmUgZGlzYWJsZWQgaW4gdGhlIGtlcm5lbDoKKysgICAgICAgIFVzZXJzcGFjZSBmaXJtd2FyZSBsb2FkaW5nIGlzIGRlcHJlY2F0ZWQsIHdpbGwgZ28gYXdheSwgYW5kCisrICAgICAgICBzb21ldGltZXMgY2F1c2VzIHByb2JsZW1zOgorICAgICAgICAgICBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSPW4KKyAKKyAgICAgICAgIFNvbWUgdWRldiBydWxlcyBhbmQgdmlydHVhbGl6YXRpb24gZGV0ZWN0aW9uIHJlbGllcyBvbiBpdDoKK0luZGV4OiBnaXQvVE9ETworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL1RPRE8KKysrKyBnaXQvVE9ETworQEAgLTc1NCw2ICs3NTQsNyBAQCBGZWF0dXJlczoKKyAqIEV4ZWNPbkZhaWx1cmU9L3Vzci9iaW4vZm9vCisgCisgKiB1ZGV2OgorKyAgLSByZW1vdmUgc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMgKENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVI9bikKKyAgIC0gbW92ZSB0byBMR1BMCisgICAtIGtpbGwgc2NzaV9pZAorICAgLSBhZGQgdHJpZ2dlciAtLXN1YnN5c3RlbS1tYXRjaD11c2IvdXNiX2RldmljZSBkZXZpY2UKK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTEyNjgsNiArMTI2OCwyNiBAQCBmaQorIEFNX0NPTkRJVElPTkFMKEhBVkVfTVlIT1NUTkFNRSwgW3Rlc3QgIiRoYXZlX215aG9zdG5hbWUiID0gInllcyJdKQorIAorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrQUNfQVJHX1dJVEgoZmlybXdhcmUtcGF0aCwKKysgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1maXJtd2FyZS1wYXRoPURJUltbWzpESVJbLi4uXV1dXV0sCisrICAgICAgICAgIFtGaXJtd2FyZSBzZWFyY2ggcGF0aCAoZGVmYXVsdD0iIildKSwKKysgICAgICAgW10sIFt3aXRoX2Zpcm13YXJlX3BhdGg9IiJdKQorK09MRF9JRlM9JElGUworK0lGUz06CisrZm9yIGkgaW4gJHdpdGhfZmlybXdhcmVfcGF0aDsgZG8KKysgICAgICAgaWYgdGVzdCAieCR7RklSTVdBUkVfUEFUSH0iID0gIngiOyB0aGVuCisrICAgICAgICAgICAgICBGSVJNV0FSRV9QQVRIPSJcXFwiJHtpfS9cXFwiIgorKyAgICAgICBlbHNlCisrICAgICAgICAgICAgICBGSVJNV0FSRV9QQVRIPSIke0ZJUk1XQVJFX1BBVEh9LCBcXFwiJHtpfS9cXFwiIgorKyAgICAgICBmaQorK2RvbmUKKytJRlM9JE9MRF9JRlMKKytBQ19TVUJTVChGSVJNV0FSRV9QQVRIKQorK0FTX0lGKFt0ZXN0ICJ4JHtGSVJNV0FSRV9QQVRIfSIgIT0gIngiXSwgWyBBQ19ERUZJTkUoSEFWRV9GSVJNV0FSRSwgMSwgW0RlZmluZSBpZiBGSVJNV0FSRSBpcyBhdmFpbGFibGVdKSBdKQorK0FNX0NPTkRJVElPTkFMKEVOQUJMRV9GSVJNV0FSRSwgW3Rlc3QgIngke0ZJUk1XQVJFX1BBVEh9IiAhPSAieCJdKQorKworKworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUNfQVJHX0VOQUJMRShod2RiLCBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1od2RiXSwgW2Rpc2FibGUgaGFyZHdhcmUgZGF0YWJhc2Ugc3VwcG9ydF0pXSwKKyAgICAgICAgZW5hYmxlX2h3ZGI9JGVuYWJsZXZhbCwgZW5hYmxlX2h3ZGI9eWVzKQorIEFNX0NPTkRJVElPTkFMKEVOQUJMRV9IV0RCLCBbdGVzdCB4JGVuYWJsZV9od2RiID0geHllc10pCitAQCAtMTU3NCw2ICsxNTk0LDcgQEAgQUNfTVNHX1JFU1VMVChbCisgICAgICAgICBTeXNWIHJjPy5kIGRpcmVjdG9yaWVzOiAgJHtTWVNURU1fU1lTVlJDTkRfUEFUSH0KKyAgICAgICAgIEJ1aWxkIFB5dGhvbjogICAgICAgICAgICAke1BZVEhPTn0KKyAgICAgICAgIHNwaGlueCBiaW5hcnk6ICAgICAgICAgICAke1NQSElOWF9CVUlMRH0KKysgICAgICAgIGZpcm13YXJlIHBhdGg6ICAgICAgICAgICAke0ZJUk1XQVJFX1BBVEh9CisgICAgICAgICBQQU0gbW9kdWxlcyBkaXI6ICAgICAgICAgJHt3aXRoX3BhbWxpYmRpcn0KKyAgICAgICAgIFBBTSBjb25maWd1cmF0aW9uIGRpcjogICAke3dpdGhfcGFtY29uZmRpcn0KKyAgICAgICAgIEQtQnVzIHBvbGljeSBkaXI6ICAgICAgICAke3dpdGhfZGJ1c3BvbGljeWRpcn0KK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnaXQvc3JjL3VkZXYvdWRldi1idWlsdGluLWZpcm13YXJlLmMKK0BAIC0wLDAgKzEsMTU0IEBACisrLyoKKysgKiBmaXJtd2FyZSAtIEtlcm5lbCBmaXJtd2FyZSBsb2FkZXIKKysgKgorKyAqIENvcHlyaWdodCAoQykgMjAwOSBQaXRlciBQdW5rIDxwaXRlcnB1bmtAc2xhY2t3YXJlLmNvbT4KKysgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBLYXkgU2lldmVycyA8a2F5QHZyZnkub3JnPgorKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisrICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisrICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysgKgorKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHM6KgorKyAqLworKworKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxnZXRvcHQuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8c3RkYm9vbC5oPgorKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKworKyNpbmNsdWRlICJ1ZGV2LmgiCisrCisrc3RhdGljIGJvb2wgc2V0X2xvYWRpbmcoc3RydWN0IHVkZXYgKnVkZXYsIGNoYXIgKmxvYWRwYXRoLCBjb25zdCBjaGFyICpzdGF0ZSkgeworKyAgICAgICAgRklMRSAqbGRmaWxlOworKworKyAgICAgICAgbGRmaWxlID0gZm9wZW4obG9hZHBhdGgsICJ3ZSIpOworKyAgICAgICAgaWYgKGxkZmlsZSA9PSBOVUxMKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiZXJyb3I6IGNhbiBub3Qgb3BlbiAnJXMnIiwgbG9hZHBhdGgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9OworKyAgICAgICAgZnByaW50ZihsZGZpbGUsICIlc1xuIiwgc3RhdGUpOworKyAgICAgICAgZmNsb3NlKGxkZmlsZSk7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKyt9CisrCisrc3RhdGljIGJvb2wgY29weV9maXJtd2FyZShzdHJ1Y3QgdWRldiAqdWRldiwgY29uc3QgY2hhciAqc291cmNlLCBjb25zdCBjaGFyICp0YXJnZXQsIHNpemVfdCBzaXplKSB7CisrICAgICAgICBjaGFyICpidWY7CisrICAgICAgICBGSUxFICpmc291cmNlID0gTlVMTCwgKmZ0YXJnZXQgPSBOVUxMOworKyAgICAgICAgYm9vbCByZXQgPSBmYWxzZTsKKysKKysgICAgICAgIGJ1ZiA9IG1hbGxvYyhzaXplKTsKKysgICAgICAgIGlmIChidWYgPT0gTlVMTCkgeworKyAgICAgICAgICAgICAgICBsb2dfZXJyb3IoIk5vIG1lbW9yeSBhdmFpbGFibGUgdG8gbG9hZCBmaXJtd2FyZSBmaWxlIik7CisrICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICAgIH0KKysKKysgICAgICAgIGxvZ19kZWJ1Zygid3JpdGluZyAnJXMnICglemkpIHRvICclcyciLCBzb3VyY2UsIHNpemUsIHRhcmdldCk7CisrCisrICAgICAgICBmc291cmNlID0gZm9wZW4oc291cmNlLCAicmUiKTsKKysgICAgICAgIGlmIChmc291cmNlID09IE5VTEwpCisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIGZ0YXJnZXQgPSBmb3Blbih0YXJnZXQsICJ3ZSIpOworKyAgICAgICAgaWYgKGZ0YXJnZXQgPT0gTlVMTCkKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgaWYgKGZyZWFkKGJ1Ziwgc2l6ZSwgMSwgZnNvdXJjZSkgIT0gMSkKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgaWYgKGZ3cml0ZShidWYsIHNpemUsIDEsIGZ0YXJnZXQpID09IDEpCisrICAgICAgICAgICAgICAgIHJldCA9IHRydWU7CisrZXhpdDoKKysgICAgICAgIGlmIChmdGFyZ2V0ICE9IE5VTEwpCisrICAgICAgICAgICAgICAgIGZjbG9zZShmdGFyZ2V0KTsKKysgICAgICAgIGlmIChmc291cmNlICE9IE5VTEwpCisrICAgICAgICAgICAgICAgIGZjbG9zZShmc291cmNlKTsKKysgICAgICAgIGZyZWUoYnVmKTsKKysgICAgICAgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgYnVpbHRpbl9maXJtd2FyZShzdHJ1Y3QgdWRldl9kZXZpY2UgKmRldiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgYm9vbCB0ZXN0KSB7CisrICAgICAgICBzdHJ1Y3QgdWRldiAqdWRldiA9IHVkZXZfZGV2aWNlX2dldF91ZGV2KGRldik7CisrICAgICAgICBzdGF0aWMgY29uc3QgY2hhciAqc2VhcmNocGF0aFtdID0geyBGSVJNV0FSRV9QQVRIIH07CisrICAgICAgICBjaGFyIGxvYWRwYXRoW1VUSUxfUEFUSF9TSVpFXTsKKysgICAgICAgIGNoYXIgZGF0YXBhdGhbVVRJTF9QQVRIX1NJWkVdOworKyAgICAgICAgY2hhciBmd3BhdGhbVVRJTF9QQVRIX1NJWkVdOworKyAgICAgICAgY29uc3QgY2hhciAqZmlybXdhcmU7CisrICAgICAgICBGSUxFICpmd2ZpbGUgPSBOVUxMOworKyAgICAgICAgc3RydWN0IHV0c25hbWUga2VybmVsOworKyAgICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKysgICAgICAgIHVuc2lnbmVkIGludCBpOworKyAgICAgICAgaW50IHJjID0gRVhJVF9TVUNDRVNTOworKworKyAgICAgICAgZmlybXdhcmUgPSB1ZGV2X2RldmljZV9nZXRfcHJvcGVydHlfdmFsdWUoZGV2LCAiRklSTVdBUkUiKTsKKysgICAgICAgIGlmIChmaXJtd2FyZSA9PSBOVUxMKSB7CisrICAgICAgICAgICAgICAgIGxvZ19lcnJvcigiZmlybXdhcmUgcGFyYW1ldGVyIG1pc3NpbmciKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIGxvb2t1cCBmaXJtd2FyZSBmaWxlICovCisrICAgICAgICB1bmFtZSgma2VybmVsKTsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBFTEVNRU5UU09GKHNlYXJjaHBhdGgpOyBpKyspIHsKKysgICAgICAgICAgICAgICAgc3Ryc2NweWwoZndwYXRoLCBzaXplb2YoZndwYXRoKSwgc2VhcmNocGF0aFtpXSwga2VybmVsLnJlbGVhc2UsICIvIiwgZmlybXdhcmUsIE5VTEwpOworKyAgICAgICAgICAgICAgICBmd2ZpbGUgPSBmb3Blbihmd3BhdGgsICJyZSIpOworKyAgICAgICAgICAgICAgICBpZiAoZndmaWxlICE9IE5VTEwpCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrCisrICAgICAgICAgICAgICAgIHN0cnNjcHlsKGZ3cGF0aCwgc2l6ZW9mKGZ3cGF0aCksIHNlYXJjaHBhdGhbaV0sIGZpcm13YXJlLCBOVUxMKTsKKysgICAgICAgICAgICAgICAgZndmaWxlID0gZm9wZW4oZndwYXRoLCAicmUiKTsKKysgICAgICAgICAgICAgICAgaWYgKGZ3ZmlsZSAhPSBOVUxMKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgc3Ryc2NweWwobG9hZHBhdGgsIHNpemVvZihsb2FkcGF0aCksIHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGRldiksICIvbG9hZGluZyIsIE5VTEwpOworKworKyAgICAgICAgaWYgKGZ3ZmlsZSA9PSBOVUxMKSB7CisrICAgICAgICAgICAgICAgIGxvZ19kZWJ1ZygiZGlkIG5vdCBmaW5kIGZpcm13YXJlIGZpbGUgJyVzJyIsIGZpcm13YXJlKTsKKysgICAgICAgICAgICAgICAgcmMgPSBFWElUX0ZBSUxVUkU7CisrICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAqIERvIG5vdCBjYW5jZWwgdGhlIHJlcXVlc3QgaW4gdGhlIGluaXRyZCwgdGhlIHJlYWwgcm9vdCBtaWdodCBoYXZlCisrICAgICAgICAgICAgICAgICAqIHRoZSBmaXJtd2FyZSBmaWxlIGFuZCB0aGUgJ2NvbGRwbHVnJyBydW4gaW4gdGhlIHJlYWwgcm9vdCB3aWxsIGZpbmQKKysgICAgICAgICAgICAgICAgICogdGhpcyBwZW5kaW5nIHJlcXVlc3QgYW5kIGZ1bGZpbGwgb3IgY2FuY2VsIGl0LgorKyAgICAgICAgICAgICAgICAgKiAqLworKyAgICAgICAgICAgICAgICBpZiAoIWluX2luaXRyZCgpKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sb2FkaW5nKHVkZXYsIGxvYWRwYXRoLCAiLTEiKTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHN0YXQoZndwYXRoLCAmc3RhdGJ1ZikgPCAwIHx8IHN0YXRidWYuc3Rfc2l6ZSA9PSAwKSB7CisrICAgICAgICAgICAgICAgIGlmICghaW5faW5pdHJkKCkpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICItMSIpOworKyAgICAgICAgICAgICAgICByYyA9IEVYSVRfRkFJTFVSRTsKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKCFzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIjEiKSkKKysgICAgICAgICAgICAgICAgZ290byBleGl0OworKworKyAgICAgICAgc3Ryc2NweWwoZGF0YXBhdGgsIHNpemVvZihkYXRhcGF0aCksIHVkZXZfZGV2aWNlX2dldF9zeXNwYXRoKGRldiksICIvZGF0YSIsIE5VTEwpOworKyAgICAgICAgaWYgKCFjb3B5X2Zpcm13YXJlKHVkZXYsIGZ3cGF0aCwgZGF0YXBhdGgsIHN0YXRidWYuc3Rfc2l6ZSkpIHsKKysgICAgICAgICAgICAgICAgbG9nX2Vycm9yKCJlcnJvciBzZW5kaW5nIGZpcm13YXJlICclcycgdG8gZGV2aWNlIiwgZmlybXdhcmUpOworKyAgICAgICAgICAgICAgICBzZXRfbG9hZGluZyh1ZGV2LCBsb2FkcGF0aCwgIi0xIik7CisrICAgICAgICAgICAgICAgIHJjID0gRVhJVF9GQUlMVVJFOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICB9OworKworKyAgICAgICAgc2V0X2xvYWRpbmcodWRldiwgbG9hZHBhdGgsICIwIik7CisrZXhpdDoKKysgICAgICAgIGlmIChmd2ZpbGUpCisrICAgICAgICAgICAgICAgIGZjbG9zZShmd2ZpbGUpOworKyAgICAgICAgcmV0dXJuIHJjOworK30KKysKKytjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9maXJtd2FyZSA9IHsKKysgICAgICAgIC5uYW1lID0gImZpcm13YXJlIiwKKysgICAgICAgIC5jbWQgPSBidWlsdGluX2Zpcm13YXJlLAorKyAgICAgICAgLmhlbHAgPSAia2VybmVsIGZpcm13YXJlIGxvYWRlciIsCisrICAgICAgICAucnVuX29uY2UgPSB0cnVlLAorK307CitJbmRleDogZ2l0L3NyYy91ZGV2L3VkZXYtYnVpbHRpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL3VkZXYvdWRldi1idWlsdGluLmMKKysrKyBnaXQvc3JjL3VkZXYvdWRldi1idWlsdGluLmMKK0BAIC0zMCw2ICszMCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluICpidWlsdGkKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fQkxLSURdID0gJnVkZXZfYnVpbHRpbl9ibGtpZCwKKyAjZW5kaWYKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fQlRSRlNdID0gJnVkZXZfYnVpbHRpbl9idHJmcywKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgW1VERVZfQlVJTFRJTl9GSVJNV0FSRV0gPSAmdWRldl9idWlsdGluX2Zpcm13YXJlLAorKyNlbmRpZgorICAgICAgICAgW1VERVZfQlVJTFRJTl9IV0RCXSA9ICZ1ZGV2X2J1aWx0aW5faHdkYiwKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fSU5QVVRfSURdID0gJnVkZXZfYnVpbHRpbl9pbnB1dF9pZCwKKyAgICAgICAgIFtVREVWX0JVSUxUSU5fS0VZQk9BUkRdID0gJnVkZXZfYnVpbHRpbl9rZXlib2FyZCwKK0luZGV4OiBnaXQvc3JjL3VkZXYvdWRldi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL3VkZXYvdWRldi5oCisrKysgZ2l0L3NyYy91ZGV2L3VkZXYuaAorQEAgLTE0Niw2ICsxNDYsOSBAQCBlbnVtIHVkZXZfYnVpbHRpbl9jbWQgeworICAgICAgICAgVURFVl9CVUlMVElOX0JMS0lELAorICNlbmRpZgorICAgICAgICAgVURFVl9CVUlMVElOX0JUUkZTLAorKyNpZmRlZiBIQVZFX0ZJUk1XQVJFCisrICAgICAgICBVREVWX0JVSUxUSU5fRklSTVdBUkUsCisrI2VuZGlmCisgICAgICAgICBVREVWX0JVSUxUSU5fSFdEQiwKKyAgICAgICAgIFVERVZfQlVJTFRJTl9JTlBVVF9JRCwKKyAgICAgICAgIFVERVZfQlVJTFRJTl9LRVlCT0FSRCwKK0BAIC0xNzQsNiArMTc3LDkgQEAgc3RydWN0IHVkZXZfYnVpbHRpbiB7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2Jsa2lkOworICNlbmRpZgorIGV4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9idHJmczsKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorK2V4dGVybiBjb25zdCBzdHJ1Y3QgdWRldl9idWlsdGluIHVkZXZfYnVpbHRpbl9maXJtd2FyZTsKKysjZW5kaWYKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5faHdkYjsKKyBleHRlcm4gY29uc3Qgc3RydWN0IHVkZXZfYnVpbHRpbiB1ZGV2X2J1aWx0aW5faW5wdXRfaWQ7CisgZXh0ZXJuIGNvbnN0IHN0cnVjdCB1ZGV2X2J1aWx0aW4gdWRldl9idWlsdGluX2tleWJvYXJkOworSW5kZXg6IGdpdC9zcmMvdWRldi91ZGV2ZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL3VkZXYvdWRldmQuYworKysrIGdpdC9zcmMvdWRldi91ZGV2ZC5jCitAQCAtMTE2LDYgKzExNiw5IEBAIHN0cnVjdCBldmVudCB7CisgICAgICAgICBib29sIGlzX2Jsb2NrOworICAgICAgICAgc2RfZXZlbnRfc291cmNlICp0aW1lb3V0X3dhcm5pbmc7CisgICAgICAgICBzZF9ldmVudF9zb3VyY2UgKnRpbWVvdXQ7CisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIGJvb2wgbm9kZWxheTsKKysjZW5kaWYKKyB9OworIAorIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV2ZW50ICpub2RlX3RvX2V2ZW50KHN0cnVjdCB1ZGV2X2xpc3Rfbm9kZSAqbm9kZSkgeworQEAgLTYwNyw2ICs2MTAsMTAgQEAgc3RhdGljIGludCBldmVudF9xdWV1ZV9pbnNlcnQoTWFuYWdlciAqbQorICAgICAgICAgZXZlbnQtPmRldm51bSA9IHVkZXZfZGV2aWNlX2dldF9kZXZudW0oZGV2KTsKKyAgICAgICAgIGV2ZW50LT5pc19ibG9jayA9IHN0cmVxKCJibG9jayIsIHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0oZGV2KSk7CisgICAgICAgICBldmVudC0+aWZpbmRleCA9IHVkZXZfZGV2aWNlX2dldF9pZmluZGV4KGRldik7CisrI2lmZGVmIEhBVkVfRklSTVdBUkUKKysgICAgICAgIGlmIChzdHJlcSh1ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKGRldiksICJmaXJtd2FyZSIpKQorKyAgICAgICAgICAgICAgICBldmVudC0+bm9kZWxheSA9IHRydWU7CisrI2VuZGlmCisgCisgICAgICAgICBsb2dfZGVidWcoInNlcSAlbGx1IHF1ZXVlZCwgJyVzJyAnJXMnIiwgdWRldl9kZXZpY2VfZ2V0X3NlcW51bShkZXYpLAorICAgICAgICAgICAgICB1ZGV2X2RldmljZV9nZXRfYWN0aW9uKGRldiksIHVkZXZfZGV2aWNlX2dldF9zdWJzeXN0ZW0oZGV2KSk7CitAQCAtNjkyLDYgKzY5OSwxMiBAQCBzdGF0aWMgYm9vbCBpc19kZXZwYXRoX2J1c3koTWFuYWdlciAqbWFuCisgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgIH0KKyAKKysjaWZkZWYgSEFWRV9GSVJNV0FSRQorKyAgICAgICAgICAgICAgICAvKiBhbGxvdyB0byBieXBhc3MgdGhlIGRlcGVuZGVuY3kgdHJhY2tpbmcgKi8KKysgICAgICAgICAgICAgICAgaWYgKGV2ZW50LT5ub2RlbGF5KQorKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyNlbmRpZgorKworICAgICAgICAgICAgICAgICAvKiBwYXJlbnQgZGV2aWNlIGV2ZW50IGZvdW5kICovCisgICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGV2cGF0aFtjb21tb25dID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LT5kZWxheWluZ19zZXFudW0gPSBsb29wX2V2ZW50LT5zZXFudW07CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvaW5pdCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNTJiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvaW5pdApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHVkZXYKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgIG1vdW50dmlydGZzCisjIFJlcXVpcmVkLVN0b3A6CisjIERlZmF1bHQtU3RhcnQ6ICAgICBTCisjIERlZmF1bHQtU3RvcDoKKyMgU2hvcnQtRGVzY3JpcHRpb246IFN0YXJ0IHVkZXZkLCBwb3B1bGF0ZSAvZGV2IGFuZCBsb2FkIGRyaXZlcnMuCisjIyMgRU5EIElOSVQgSU5GTworCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitleHBvcnQgVFo9L2V0Yy9sb2NhbHRpbWUKKworWyAtZCAvc3lzL2NsYXNzIF0gfHwgZXhpdCAxCitbIC1yIC9wcm9jL21vdW50cyBdIHx8IGV4aXQgMQorWyAteCBAVURFVkRAIF0gfHwgZXhpdCAxCitbIC1mIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlIF0gJiYgLiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZQorWyAtZiAvZXRjL3VkZXYvdWRldi5jb25mIF0gJiYgLiAvZXRjL3VkZXYvdWRldi5jb25mCisKK3JlYWRmaWxlICgpIHsKKyAgIGZpbGVuYW1lPSQxCisgICBSRUFEREFUQT0iIgorICAgaWYgWyAtciAkZmlsZW5hbWUgXTsgdGhlbgorICAgICAgIHdoaWxlIHJlYWQgbGluZTsgZG8KKyAgICAgICAgICAgUkVBRERBVEE9IiRSRUFEREFUQSRsaW5lIgorICAgICAgIGRvbmUgPCAkZmlsZW5hbWUKKyAgIGZpCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICBleHBvcnQgQUNUSU9OPWFkZAorICAgICMgcHJvcGFnYXRlIC9kZXYgZnJvbSAvc3lzCisgICAgZWNobyAiU3RhcnRpbmcgdWRldiIKKworICAgICMgbW91bnQgdGhlIGRldnRtcGZzIG9uIC9kZXYsIGlmIG5vdCBhbHJlYWR5IGRvbmUKKyAgICBMQU5HPUMgYXdrICckMiA9PSAiL2RldiIgJiYgKCQzID09ICJkZXZ0bXBmcyIpIHsgZXhpdCAxIH0nIC9wcm9jL21vdW50cyAmJiB7CisgICAgICAgICAgICBtb3VudCAtbiAtbyBtb2RlPTA3NTUgLXQgZGV2dG1wZnMgbm9uZSAiL2RldiIKKyAgICB9CisgICAgWyAtZSAvZGV2L3B0cyBdIHx8IG1rZGlyIC1tIDA3NTUgL2Rldi9wdHMKKyAgICBbIC1lIC9kZXYvc2htIF0gfHwgbWtkaXIgLW0gMTc3NyAvZGV2L3NobQorICAgIG1vdW50IC1hIC10IHRtcGZzIDI+L2Rldi9udWxsCisKKyAgICAjIGNhY2hlIGhhbmRsaW5nCisgICAgaWYgWyAiJERFVkNBQ0hFIiAhPSAiIiBdOyB0aGVuCisgICAgICAgICAgICByZWFkZmlsZSAvcHJvYy92ZXJzaW9uCisgICAgICAgICAgICBWRVJTSU9OPSIkUkVBRERBVEEiCisgICAgICAgICAgICByZWFkZmlsZSAvcHJvYy9jbWRsaW5lCisgICAgICAgICAgICBDTURMSU5FPSIkUkVBRERBVEEiCisgICAgICAgICAgICByZWFkZmlsZSAvcHJvYy9kZXZpY2VzCisgICAgICAgICAgICBERVZJQ0VTPSIkUkVBRERBVEEiCisgICAgICAgICAgICByZWFkZmlsZSAvcHJvYy9hdGFncworICAgICAgICAgICAgQVRBR1M9IiRSRUFEREFUQSIKKworICAgICAgICAgICAgaWYgWyAtZSAkREVWQ0FDSEUgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICByZWFkZmlsZSAvZXRjL3VkZXYvY2FjaGUuZGF0YQorICAgICAgICAgICAgICAgICAgICBpZiBbICIkUkVBRERBVEEiID0gIiRWRVJTSU9OJENNRExJTkUkREVWSUNFUyRBVEFHUyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZCAvOyB0YXIgeGYgJERFVkNBQ0hFID4gL2Rldi9udWxsIDI+JjEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90X2ZpcnN0X2Jvb3Q9MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAidWRldjogdXNpbmcgY2FjaGUgZmlsZSAkREVWQ0FDSEUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyAtZSAvZGV2L3NobS91ZGV2LmNhY2hlIF0gJiYgcm0gLWYgL2Rldi9zaG0vdWRldi5jYWNoZQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJFZFUlNJT04kQ01ETElORSRERVZJQ0VTJEFUQUdTIiA+IC9kZXYvc2htL3VkZXYuY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZWNobyAiJFZFUlNJT04kQ01ETElORSRERVZJQ0VTJEFUQUdTIiA+IC9kZXYvc2htL3VkZXYuY2FjaGUKKyAgICAgICAgICAgIGZpCisgICAgZmkKKworICAgICMgbWFrZV9leHRyYV9ub2RlcworICAgIGtpbGxwcm9jIHN5c3RlbWQtdWRldmQgPiAiL2Rldi9udWxsIiAyPiYxCisKKyAgICAjIHRyaWdnZXIgdGhlIHNvcnRlZCBldmVudHMKKyAgICBlY2hvIC1lICdcMDAwXDAwMFwwMDBcMDAwJyA+IC9wcm9jL3N5cy9rZXJuZWwvaG90cGx1ZworICAgIEBVREVWREAgLWQKKworICAgIHVkZXZhZG0gY29udHJvbCAtLWVudj1TVEFSVFVQPTEKKyAgICBpZiBbICIkbm90X2ZpcnN0X2Jvb3QiICE9ICIiIF07dGhlbgorICAgICAgICAgICAgdWRldmFkbSB0cmlnZ2VyIC0tYWN0aW9uPWFkZCAtLXN1YnN5c3RlbS1ub21hdGNoPXR0eSAtLXN1YnN5c3RlbS1ub21hdGNoPW1lbSAtLXN1YnN5c3RlbS1ub21hdGNoPXZjIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dnRjb25zb2xlIC0tc3Vic3lzdGVtLW5vbWF0Y2g9bWlzYyAtLXN1YnN5c3RlbS1ub21hdGNoPWRjb24gLS1zdWJzeXN0ZW0tbm9tYXRjaD1wY2lfYnVzICAtLXN1YnN5c3RlbS1ub21hdGNoPWdyYXBoaWNzCSAtLXN1YnN5c3RlbS1ub21hdGNoPWJhY2tsaWdodCAtLXN1YnN5c3RlbS1ub21hdGNoPXZpZGVvNGxpbnV4CS0tc3Vic3lzdGVtLW5vbWF0Y2g9cGxhdGZvcm0KKyAgICAgICAgICAgICh1ZGV2YWRtIHNldHRsZSAtLXRpbWVvdXQ9MzsgdWRldmFkbSBjb250cm9sIC0tZW52PVNUQVJUVVA9KSYKKyAgICBlbHNlCisgICAgICAgICAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkCisgICAgICAgICAgICB1ZGV2YWRtIHNldHRsZQorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvICJTdG9wcGluZyB1ZGV2ZCIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1uYW1lIHN5c3RlbWQtdWRldmQgLS1xdWlldAorICAgIDs7CisgIHJlc3RhcnQpCisgICAgJDAgc3RvcAorICAgIHNsZWVwIDEKKyAgICAkMCBzdGFydAorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgc3lzdGVtZC11ZGV2ZAorICAgIDs7CisgICopCisgICAgZWNobyAiVXNhZ2U6ICQwIHtzdGFydHxzdG9wfHN0YXR1c3xyZXN0YXJ0fSIKKyAgICBleGl0IDEKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kL3FlbXVhbGxfaW9fbGF0ZW5jeS1jb3JlLWRldmljZS5jLUNoYW5nZS10aGUtZGVmYXVsdC1kZXZpY2UtdGltZW91dC10by0yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTE3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcWVtdWFsbF9pb19sYXRlbmN5LWNvcmUtZGV2aWNlLmMtQ2hhbmdlLXRoZS1kZWZhdWx0LWRldmljZS10aW1lb3V0LXRvLTIucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtTcGVjaWZpYyBjYXNlIFFFTVUvQUJdCisKK0Zyb20gN2I4YzRlMGE2N2E3OWE3NWUxYmQ3N2RmM2E0NTJhNTQ5NzMyMjEwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9Bbj1DMz1BRGJhbD0yMExpbT1DMz1CM24/PSA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMjcgQXVnIDIwMTUgMTc6NTg6MjYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29yZS9kZXZpY2UuYzogQ2hhbmdlIHRoZSBkZWZhdWx0IGRldmljZSB0aW1lb3V0IHRvIDI0MCBzZWMuCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgc3JjL2NvcmUvZGV2aWNlLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZS9kZXZpY2UuYyBiL3NyYy9jb3JlL2RldmljZS5jCitpbmRleCBlN2VmY2YwLi40ZWQ4ZjA4IDEwMDY0NAorLS0tIGEvc3JjL2NvcmUvZGV2aWNlLmMKKysrKyBiL3NyYy9jb3JlL2RldmljZS5jCitAQCAtMTEwLDcgKzExMCw3IEBAIHN0YXRpYyB2b2lkIGRldmljZV9pbml0KFVuaXQgKnUpIHsKKyAgICAgICAgICAqIGluZGVmaW5pdGVseSBmb3IgcGx1Z2dlZCBpbiBkZXZpY2VzLCBzb21ldGhpbmcgd2hpY2ggY2Fubm90CisgICAgICAgICAgKiBoYXBwZW4gZm9yIHRoZSBvdGhlciB1bml0cyBzaW5jZSB0aGVpciBvcGVyYXRpb25zIHRpbWUgb3V0CisgICAgICAgICAgKiBhbnl3YXkuICovCistICAgICAgICB1LT5qb2JfdGltZW91dCA9IHUtPm1hbmFnZXItPmRlZmF1bHRfdGltZW91dF9zdGFydF91c2VjOworKyAgICAgICAgdS0+am9iX3RpbWVvdXQgPSAoMjQwICogVVNFQ19QRVJfU0VDKTsKKyAKKyAgICAgICAgIHUtPmlnbm9yZV9vbl9pc29sYXRlID0gdHJ1ZTsKKyAgICAgICAgIHUtPmlnbm9yZV9vbl9zbmFwc2hvdCA9IHRydWU7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDYxYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK3RhciAtQyB0ZXN0IC14SmYgdGVzdC9zeXMudGFyLnh6CittYWtlIHRlc3QvcnVsZXMtdGVzdC5zaC5sb2cKK21ha2UgdGVzdC91ZGV2LXRlc3QucGwubG9nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWQvdG91Y2hzY3JlZW4ucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzZmQxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3RlbWQvc3lzdGVtZC90b3VjaHNjcmVlbi5ydWxlcwpAQCAtMCwwICsxLDE4IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgQ3JlYXRlIGEgc3ltbGluayB0byBhbnkgdG91Y2hzY3JlZW4gaW5wdXQgZGV2aWNlCitTVUJTWVNURU09PSJpbnB1dCIsIEtFUk5FTD09ImV2ZW50WzAtOV0qIiwgQVRUUlN7bW9kYWxpYXN9PT0iaW5wdXQ6Ki1lMCosMywqYTAsMSwqMTgsKiIsIFNZTUxJTksrPSJpbnB1dC90b3VjaHNjcmVlbjAiCitTVUJTWVNURU09PSJpbnB1dCIsIEtFUk5FTD09ImV2ZW50WzAtOV0qIiwgQVRUUlN7bW9kYWxpYXN9PT0iYWRzNzg0NiIsIFNZTUxJTksrPSJpbnB1dC90b3VjaHNjcmVlbjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN0ZW1kL3N5c3RlbWRfMjI1LmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIyNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM5OWNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdGVtZC9zeXN0ZW1kXzIyNS5iYgpAQCAtMCwwICsxLDQxNSBAQAorU1VNTUFSWSA9ICJBIFN5c3RlbSBhbmQgc2VydmljZSBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9zeXN0ZW1kIgorCitERVNDUklQVElPTiA9ICJzeXN0ZW1kIGlzIGEgc3lzdGVtIGFuZCBzZXJ2aWNlIG1hbmFnZXIgZm9yIExpbnV4LCBjb21wYXRpYmxlIHdpdGggXAorU3lzViBhbmQgTFNCIGluaXQgc2NyaXB0cy4gc3lzdGVtZCBwcm92aWRlcyBhZ2dyZXNzaXZlIHBhcmFsbGVsaXphdGlvbiBcCitjYXBhYmlsaXRpZXMsIHVzZXMgc29ja2V0IGFuZCBELUJ1cyBhY3RpdmF0aW9uIGZvciBzdGFydGluZyBzZXJ2aWNlcywgXAorb2ZmZXJzIG9uLWRlbWFuZCBzdGFydGluZyBvZiBkYWVtb25zLCBrZWVwcyB0cmFjayBvZiBwcm9jZXNzZXMgdXNpbmcgXAorTGludXggY2dyb3Vwcywgc3VwcG9ydHMgc25hcHNob3R0aW5nIGFuZCByZXN0b3Jpbmcgb2YgdGhlIHN5c3RlbSBcCitzdGF0ZSwgbWFpbnRhaW5zIG1vdW50IGFuZCBhdXRvbW91bnQgcG9pbnRzIGFuZCBpbXBsZW1lbnRzIGFuIFwKK2VsYWJvcmF0ZSB0cmFuc2FjdGlvbmFsIGRlcGVuZGVuY3ktYmFzZWQgc2VydmljZSBjb250cm9sIGxvZ2ljLiBJdCBjYW4gXAord29yayBhcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHN5c3Zpbml0LiIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5HUEwyO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkxHUEwyLjE7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIgorCitQUk9WSURFUyA9ICJ1ZGV2IgorCitQRSA9ICIxIgorCitERVBFTkRTID0gImttb2QgZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlIGludGx0b29sLW5hdGl2ZSBncGVyZi1uYXRpdmUgYWNsIHJlYWRsaW5lIGRidXMgbGliY2FwIGxpYmNncm91cCBnbGliLTIuMCBxZW11LW5hdGl2ZSB1dGlsLWxpbnV4IgorCitTRUNUSU9OID0gImJhc2Uvc2hlbGwiCisKK2luaGVyaXQgdXNlcmFkZCBwa2djb25maWcgYXV0b3Rvb2xzIHBlcmxuYXRpdmUgdXBkYXRlLXJjLmQgdXBkYXRlLWFsdGVybmF0aXZlcyBxZW11IHN5c3RlbWQgcHRlc3QgZ2V0dGV4dAorCitTUkNSRVYgPSAiZTE0MzlhMTQ3MmM1ZjY5MTczM2I4ZWYxMGU3MDJiZWFjMjQ5NmE2MyIKKworUFYgPSAiMjI1K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vc3lzdGVtZC9zeXN0ZW1kLmdpdDtwcm90b2NvbD1naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1iaW5mbXQtRG9uLXQtaW5zdGFsbC1kZXBlbmRlbmN5LWxpbmtzLWF0LWluc3RhbGwtdGltLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtY29uZmlndXJlLUNoZWNrLWZvci1hZGRpdGlvbmFsLWZlYXR1cmVzLXRoYXQtdWNsaWJjLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LW5zcGF3bi1Vc2UtZXhlY3ZwZS1vbmx5LXdoZW4tbGliYy1zdXBwb3J0cy1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA2LWpvdXJuYWwtVXNlLXBvc2l4LWZhbGxvY2F0ZS1vbmx5LWlmLWF2YWlsYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXV0aWwtVXNlLW1rb3N0ZW1wLW9ubHktaWYtbGliYy1zdXBwb3J0cy1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LXV0aWwtYnlwYXNzLXVuaW1wbGVtZW50ZWQtX1NDX1BIWVNfUEFHRVMtc3lzdGVtLWNvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1zeXN2LWdlbmVyYXRvci1hZGQtc3VwcG9ydC1mb3ItZXhlY3V0aW5nLXNjcmlwdHMtdW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtTWFrZS1yb290LXMtaG9tZS1kaXJlY3RvcnktY29uZmlndXJhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtc3lzdGVtZC11c2VyLWF2b2lkLXVzaW5nLXN5c3RlbS1hdXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItaW1wbG1lbnQtc3lzdGVtZC1zeXN2LWluc3RhbGwtZm9yLU9FLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtUmV2ZXJ0LXJ1bGVzLXJlbW92ZS1maXJtd2FyZS1sb2FkaW5nLXJ1bGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTUtUmV2ZXJ0LXVkZXYtcmVtb3ZlLXVzZXJzcGFjZS1maXJtd2FyZS1sb2FkaW5nLXN1cHBvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b3VjaHNjcmVlbi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfcWVtdWFsbCA9ICJmaWxlOi8vcWVtdWFsbF9pb19sYXRlbmN5LWNvcmUtZGV2aWNlLmMtQ2hhbmdlLXRoZS1kZWZhdWx0LWRldmljZS10aW1lb3V0LXRvLTIucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIlwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVuaXRzLVByZWZlci1nZXR0eS10by1hZ2V0dHktaW4tY29uc29sZS1zZXR1cC1zeXN0ZW0ucGF0Y2ggXAorICAgICAgICAgICAiCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLWxydCIKKworR1RLRE9DX0RPQ0RJUiA9ICIke1N9L2RvY3MvIgorCitQQUNLQUdFQ09ORklHID8/PSAieHogbGRjb25maWcgXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3hrYmNvbW1vbicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc2VsaW51eCcsICdzZWxpbnV4JywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbam91cm5hbC11cGxvYWRdID0gIi0tZW5hYmxlLWxpYmN1cmwsLS1kaXNhYmxlLWxpYmN1cmwsY3VybCIKKyMgU2lnbiB0aGUgam91cm5hbCBmb3IgYW50aS10YW1wZXJpbmcKK1BBQ0tBR0VDT05GSUdbZ2NyeXB0XSA9ICItLWVuYWJsZS1nY3J5cHQsLS1kaXNhYmxlLWdjcnlwdCxsaWJnY3J5cHQiCisjIHJlZ2FyZGxlc3Mgb2YgUEFDS0FHRUNPTkZJRywgbGliZ2NyeXB0IGlzIGFsd2F5cyByZXF1aXJlZCB0byBleHBhbmQKKyMgdGhlIEFNX1BBVEhfTElCR0NSWVBUIGF1dG9jb25mIG1hY3JvCitERVBFTkRTICs9ICJsaWJnY3J5cHQiCisjIENvbXByZXNzIHRoZSBqb3VybmFsCitQQUNLQUdFQ09ORklHW3h6XSA9ICItLWVuYWJsZS14eiwtLWRpc2FibGUteHoseHoiCitQQUNLQUdFQ09ORklHW2NyeXB0c2V0dXBdID0gIi0tZW5hYmxlLWxpYmNyeXB0c2V0dXAsLS1kaXNhYmxlLWxpYmNyeXB0c2V0dXAsY3J5cHRzZXR1cCIKK1BBQ0tBR0VDT05GSUdbbWljcm9odHRwZF0gPSAiLS1lbmFibGUtbWljcm9odHRwZCwtLWRpc2FibGUtbWljcm9odHRwZCxsaWJtaWNyb2h0dHBkIgorUEFDS0FHRUNPTkZJR1tlbGZ1dGlsc10gPSAiLS1lbmFibGUtZWxmdXRpbHMsLS1kaXNhYmxlLWVsZnV0aWxzLGVsZnV0aWxzIgorUEFDS0FHRUNPTkZJR1tyZXNvbHZlZF0gPSAiLS1lbmFibGUtcmVzb2x2ZWQsLS1kaXNhYmxlLXJlc29sdmVkIgorUEFDS0FHRUNPTkZJR1tuZXR3b3JrZF0gPSAiLS1lbmFibGUtbmV0d29ya2QsLS1kaXNhYmxlLW5ldHdvcmtkIgorUEFDS0FHRUNPTkZJR1tsaWJpZG5dID0gIi0tZW5hYmxlLWxpYmlkbiwtLWRpc2FibGUtbGliaWRuLGxpYmlkbiIKK1BBQ0tBR0VDT05GSUdbYXVkaXRdID0gIi0tZW5hYmxlLWF1ZGl0LC0tZGlzYWJsZS1hdWRpdCxhdWRpdCIKK1BBQ0tBR0VDT05GSUdbbWFucGFnZXNdID0gIi0tZW5hYmxlLW1hbnBhZ2VzLC0tZGlzYWJsZS1tYW5wYWdlcyxsaWJ4c2x0LW5hdGl2ZSB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorUEFDS0FHRUNPTkZJR1twYW1dID0gIi0tZW5hYmxlLXBhbSwtLWRpc2FibGUtcGFtLGxpYnBhbSIKKyMgVmVyaWZ5IGtleW1hcHMgb24gbG9jYWxlIGNoYW5nZQorUEFDS0FHRUNPTkZJR1t4a2Jjb21tb25dID0gIi0tZW5hYmxlLXhrYmNvbW1vbiwtLWRpc2FibGUteGtiY29tbW9uLGxpYnhrYmNvbW1vbiIKKyMgVXBkYXRlIE5BVCBmaXJld2FsbCBydWxlcworUEFDS0FHRUNPTkZJR1tpcHRjXSA9ICItLWVuYWJsZS1saWJpcHRjLC0tZGlzYWJsZS1saWJpcHRjLGlwdGFibGVzIgorUEFDS0FHRUNPTkZJR1tsZGNvbmZpZ10gPSAiLS1lbmFibGUtbGRjb25maWcsLS1kaXNhYmxlLWxkY29uZmlnLCwiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIi0tZW5hYmxlLXNlbGludXgsLS1kaXNhYmxlLXNlbGludXgsbGlic2VsaW51eCIKK1BBQ0tBR0VDT05GSUdbdmFsZ3JpbmRdID0gImFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPXllcyBhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaD15ZXMgLGFjX2N2X2hlYWRlcl92YWxncmluZF9tZW1jaGVja19oPW5vIGFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vICx2YWxncmluZCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfS0lMTD0ke2Jhc2VfYmluZGlyfS9raWxsIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfS01PRD0ke2Jhc2VfYmluZGlyfS9rbW9kIgorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfUVVPVEFDSEVDSz0ke3NiaW5kaXJ9L3F1b3RhY2hlY2siCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9RVU9UQU9OPSR7c2JpbmRpcn0vcXVvdGFvbiIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX1NVTE9HSU49JHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4iCisKKyMgSGVscGVyIHZhcmlhYmxlcyB0byBjbGFyaWZ5IGxvY2F0aW9ucy4gIFRoaXMgbWlycm9ycyB0aGUgbG9naWMgaW4gc3lzdGVtZCdzCisjIGJ1aWxkIHN5c3RlbS4KK3Jvb3RwcmVmaXggPz0gIiR7YmFzZV9wcmVmaXh9Igorcm9vdGxpYmRpciA/PSAiJHtiYXNlX2xpYmRpcn0iCityb290bGliZXhlY2RpciA9ICIke3Jvb3RwcmVmaXh9L2xpYiIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlNfY2xhc3MtdGFyZ2V0ID0gIlwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX01PVU5UX1BBVEg9JHtiYXNlX2JpbmRpcn0vbW91bnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfVU1PVU5UX1BBVEg9JHtiYXNlX2JpbmRpcn0vdW1vdW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX0tNT0Q9JHtiYXNlX2JpbmRpcn0va21vZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9LSUxMPSR7YmFzZV9iaW5kaXJ9L2tpbGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfU1VMT0dJTj0ke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYWNfY3ZfcGF0aF9LRVhFQz0ke3NiaW5kaXJ9L2tleGVjIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1FVT1RBQ0hFQ0s9JHtzYmluZGlyfS9xdW90YWNoZWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY19jdl9wYXRoX1FVT1RBT049JHtzYmluZGlyfS9xdW90YW9uIFwKKwkJCSAiCisKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXJvb3RwcmVmaXg9JHtyb290cHJlZml4fSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1yb290bGliZGlyPSR7cm9vdGxpYmRpcn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGhvbWVkaXI9JHtST09UX0hPTUV9IFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWNvcmVkdW1wIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc3BsaXQtdXNyIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LXB5dGhvbiBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1zeXN2cmNuZC1wYXRoPSR7c3lzY29uZmRpcn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZmlybXdhcmUtcGF0aD0vbGliL2Zpcm13YXJlIFwKKyAgICAgICAgICAgICAgICIKKyMgdWNsaWJjIGRvZXMgbm90IGhhdmUgTlNTCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtbXlob3N0bmFtZSAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWV4cG9ydCBOTT0iJHtIT1NUX1BSRUZJWH1nY2Mtbm0iCisJZXhwb3J0IEFSPSIke0hPU1RfUFJFRklYfWdjYy1hciIKKwlleHBvcnQgUkFOTElCPSIke0hPU1RfUFJFRklYfWdjYy1yYW5saWIiCisJZXhwb3J0IEtNT0Q9IiR7YmFzZV9iaW5kaXJ9L2ttb2QiCisJaWYgWyAtZCAke1N9L3VuaXRzLnByZV9zZWQgXSA7IHRoZW4KKwkJY3AgLXIgJHtTfS91bml0cy5wcmVfc2VkICR7U30vdW5pdHMKKwllbHNlCisJCWNwIC1yICR7U30vdW5pdHMgJHtTfS91bml0cy5wcmVfc2VkCisJZmkKKwlzZWQgLWkgJy9sbiAtLXJlbGF0aXZlIC0taGVscC9kJyAke1N9L2NvbmZpZ3VyZS5hYworCXNlZCAtaSAtZSAnczpcJChMTl9TKSAtLXJlbGF0aXZlIC1mOmxucjpnJyAke1N9L01ha2VmaWxlLmFtCisJc2VkIC1pIC1lICdzOlwkKExOX1MpIC0tcmVsYXRpdmU6bG5yOmcnICR7U30vTWFrZWZpbGUuYW0KK30KKworZG9faW5zdGFsbCgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfS8ke2Jhc2Vfc2JpbmRpcn0KKwkjIFByb3ZpZGVkIGJ5IGEgc2VwYXJhdGUgcmVjaXBlCisJcm0gJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc2VyaWFsLWdldHR5KiAtZgorCisJIyBQcm92aWRlIHN1cHBvcnQgZm9yIGluaXRyYW1mcworCVsgISAtZSAke0R9L2luaXQgXSAmJiBsbiAtcyAke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQgJHtEfS9pbml0CisJWyAhIC1lICR7RH0vJHtiYXNlX3NiaW5kaXJ9L3VkZXZkIF0gJiYgbG4gLXMgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLXVkZXZkICR7RH0vJHtiYXNlX3NiaW5kaXJ9L3VkZXZkCisKKwkjIENyZWF0ZSBtYWNoaW5lLWlkCisJIyAyMDoxMiA8IG1lemNhbGVybz4ga29lbjogeW91IGhhdmUgdGhyZWUgb3B0aW9uczogYSkgcnVuIHN5c3RlbWQtbWFjaGluZS1pZC1zZXR1cCBhdCBpbnN0YWxsIHRpbWUsIGIpIGhhdmUgLyByZWFkLW9ubHkgYW5kIGFuIGVtcHR5IGZpbGUgdGhlcmUgKGZvciBzdGF0ZWxlc3MpIGFuZCBjKSBib290IHdpdGggLyB3cml0YWJsZQorCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L21hY2hpbmUtaWQKKworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5ydWxlcyAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS8wMC1jcmVhdGUtdm9sYXRpbGUuY29uZiAke0R9JHtzeXNjb25mZGlyfS90bXBmaWxlcy5kLworCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwkJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3lzdGVtZC11ZGV2ZAorCQlzZWQgLWkgcyVAVURFVkRAJSR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c3RlbWQtdWRldmQKKwlmaQorCisJY2hvd24gcm9vdDpzeXN0ZW1kLWpvdXJuYWwgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9qb3VybmFsCisKKyAgICAgICAgIyBEZWxldGUgam91cm5hbCBSRUFETUUsIGFzIGxvZyBjYW4gYmUgc3ltbGlua2VkIGluc2lkZSB2b2xhdGlsZS4KKyAgICAgICAgcm0gLWYgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9SRUFETUUKKworCSMgQ3JlYXRlIHN5bWxpbmtzIGZvciBzeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2dyYXBoaWNhbC50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL211bHRpLXVzZXIudGFyZ2V0LndhbnRzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wb3dlcm9mZi50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JlYm9vdC50YXJnZXQud2FudHMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Jlc2N1ZS50YXJnZXQud2FudHMKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2dyYXBoaWNhbC50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9tdWx0aS11c2VyLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3Bvd2Vyb2ZmLnRhcmdldC53YW50cy9zeXN0ZW1kLXVwZGF0ZS11dG1wLXJ1bmxldmVsLnNlcnZpY2UKKwlsbiAtc2YgLi4vc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3JlYm9vdC50YXJnZXQud2FudHMvc3lzdGVtZC11cGRhdGUtdXRtcC1ydW5sZXZlbC5zZXJ2aWNlCisJbG4gLXNmIC4uL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9yZXNjdWUudGFyZ2V0LndhbnRzL3N5c3RlbWQtdXBkYXRlLXV0bXAtcnVubGV2ZWwuc2VydmljZQorCisJIyBFbmFibGUgam91cm5hbCB0byBmb3J3YXJkIG1lc3NhZ2UgdG8gc3lzbG9nIGRhZW1vbgorCXNlZCAtaSAtZSAncy8uKkZvcndhcmRUb1N5c2xvZy4qL0ZvcndhcmRUb1N5c2xvZz15ZXMvJyAke0R9JHtzeXNjb25mZGlyfS9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYKKwkjIHRoaXMgZmlsZSBpcyBuZWVkZWQgdG8gZXhpc3QgaWYgbmV0d29ya2QgaXMgZGlzYWJsZWQgYnV0IHRpbWVzeW5jZCBpcyBzdGlsbCBpbiB1c2Ugc2luY2UgdGltZXN5bmNkIGNoZWNrcyBpdAorCSMgZm9yIGV4aXN0ZW5jZSBlbHNlIGl0IGZhaWxzCisJaWYgWyAtcyAke0R9JHtsaWJkaXJ9L3RtcGZpbGVzLmQvc3lzdGVtZC5jb25mIF07IHRoZW4KKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbmV0d29ya2QnLCAnOicsICdzZWQgLWkgLWUgIlwkYWQgL3J1bi9zeXN0ZW1kL25ldGlmL2xpbmtzIDA3NTUgcm9vdCByb290IC0iICR7RH0ke2xpYmRpcn0vdG1wZmlsZXMuZC9zeXN0ZW1kLmNvbmYnLCBkKX0KKwlmaQorCWluc3RhbGwgLURtIDA3NTUgJHtTfS9zcmMvc3lzdGVtY3RsL3N5c3RlbWQtc3lzdi1pbnN0YWxsLlNLRUxFVE9OICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtZC1zeXN2LWluc3RhbGwKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisgICAgICAgY3AgLXJmICR7U30vdGVzdC8qICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKyAgICAgICBpbnN0YWxsIC1tIDA3NTUgICR7Qn0vdGVzdC11ZGV2ICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgIGluc3RhbGwgLWQgJHtEfSR7UFRFU1RfUEFUSH0vYnVpbGQtYXV4CisgICAgICAgY3AgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHtEfSR7UFRFU1RfUEFUSH0vYnVpbGQtYXV4LworICAgICAgIGNwIC1yZiAke0J9L3J1bGVzICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgICMgVGhpcyBkaXJlY3RvcnkgbmVlZHMgdG8gYmUgdGhlcmUgZm9yIHVkZXYtdGVzdC5wbCB0byB3b3JrLgorICAgICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS91ZGV2L3J1bGVzLmQKKyAgICAgICBjcCAke0J9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9LworICAgICAgIGNwICR7U30vdGVzdC9zeXMudGFyLnh6ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKyAgICAgICBzZWQgLWkgJ3MvInRyZWUiLyJscyIvJyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0L3VkZXYtdGVzdC5wbAorICAgICAgIHNlZCAtaSAncyMke1N9IyR7UFRFU1RfUEFUSH0jZycgJHtEfSR7UFRFU1RfUEFUSH0vTWFrZWZpbGUKKyAgICAgICBzZWQgLWkgJ3MjJHtCfSMke1BURVNUX1BBVEh9I2cnICR7RH0ke1BURVNUX1BBVEh9L01ha2VmaWxlCit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpeworICAgIHN5c3RlbWRsaWJkaXIgPSBkLmdldFZhcigicm9vdGxpYmRpciIsIFRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgc3lzdGVtZGxpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdTeXN0ZW1kICVzIGxpYnJhcnknLCBleHRyYV9kZXBlbmRzPScnLCBhbGxvd19saW5rcz1UcnVlKQorfQorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYih1ZGV2fHN5c3RlbWQpLioiCisKK1BBQ0tBR0VTID0rICIke1BOfS1ndWkgJHtQTn0tdmNvbnNvbGUtc2V0dXAgJHtQTn0taW5pdHJhbWZzICR7UE59LWFuYWx5emUgJHtQTn0ta2VybmVsLWluc3RhbGwgXAorICAgICAgICAgICAgICR7UE59LXJwbS1tYWNyb3MgJHtQTn0tYmluZm10ICR7UE59LXBhbSAke1BOfS16c2ggJHtQTn0teG9yZy14aW5pdHJjIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59LWJpbmZtdCIKK1NZU1RFTURfU0VSVklDRV8ke1BOfS1iaW5mbXQgPSAic3lzdGVtZC1iaW5mbXQuc2VydmljZSIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK1VTRVJBRERfUEFSQU1fJHtQTn0gKz0gIi0tc3lzdGVtIHN5c3RlbWQtam91cm5hbC1nYXRld2F5OyAtLXN5c3RlbSBzeXN0ZW1kLXRpbWVzeW5jIgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLXIgbG9jazsgLXIgc3lzdGVtZC1qb3VybmFsIgorCitGSUxFU18ke1BOfS1hbmFseXplID0gIiR7YmluZGlyfS9zeXN0ZW1kLWFuYWx5emUiCisKK0ZJTEVTXyR7UE59LWluaXRyYW1mcyA9ICIvaW5pdCIKK1JERVBFTkRTXyR7UE59LWluaXRyYW1mcyA9ICIke1BOfSIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gInBlcmwgcHl0aG9uIGJhc2giCitGSUxFU18ke1BOfS1wdGVzdCArPSAiJHtsaWJkaXJ9L3VkZXYvcnVsZXMuZCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vc3lzdGVtZC9wdGVzdC8uZGVidWciCisKK0ZJTEVTXyR7UE59LWd1aSA9ICIke2JpbmRpcn0vc3lzdGVtYWRtIgorCitGSUxFU18ke1BOfS12Y29uc29sZS1zZXR1cCA9ICIke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQtdmNvbnNvbGUtc2V0dXAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXN0ZW1kLXZjb25zb2xlLXNldHVwLnNlcnZpY2UgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9zeXNpbml0LnRhcmdldC53YW50cy9zeXN0ZW1kLXZjb25zb2xlLXNldHVwLnNlcnZpY2UiCisKK1JERVBFTkRTXyR7UE59LWtlcm5lbC1pbnN0YWxsICs9ICJiYXNoIgorRklMRVNfJHtQTn0ta2VybmVsLWluc3RhbGwgPSAiJHtiaW5kaXJ9L2tlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0va2VybmVsLyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIva2VybmVsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tcnBtLW1hY3JvcyA9ICIke2V4ZWNfcHJlZml4fS9saWIvcnBtIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LXhvcmcteGluaXRyYyA9ICIke3N5c2NvbmZkaXJ9L1gxMS94aW5pdC94aW5pdHJjLmQvKiIKKworRklMRVNfJHtQTn0tenNoID0gIiR7ZGF0YWRpcn0venNoL3NpdGUtZnVuY3Rpb25zIgorCitGSUxFU18ke1BOfS1iaW5mbXQgPSAiJHtzeXNjb25mZGlyfS9iaW5mbXQuZC8gXAorICAgICAgICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9iaW5mbXQuZCBcCisgICAgICAgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC9zeXN0ZW1kLWJpbmZtdCBcCisgICAgICAgICAgICAgICAgICAgICAgJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9wcm9jLXN5cy1mcy1iaW5mbXRfbWlzYy4qIFwKKyAgICAgICAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3N5c3RlbWQtYmluZm10LnNlcnZpY2UiCitSUkVDT01NRU5EU18ke1BOfS1iaW5mbXQgPSAia2VybmVsLW1vZHVsZS1iaW5mbXQtbWlzYyIKKworUlJFQ09NTUVORFNfJHtQTn0tdmNvbnNvbGUtc2V0dXAgPSAia2JkIGtiZC1jb25zb2xlZm9udHMga2JkLWtleW1hcHMiCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3N5c3RlbWQvam91cm5hbGQuY29uZiBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9zeXN0ZW1kL2xvZ2luZC5jb25mIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvc3lzdGVtLmNvbmYgXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzdGVtZC91c2VyLmNvbmYiCisKK0ZJTEVTXyR7UE59ID0gIiAke2Jhc2VfYmluZGlyfS8qIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZGJ1cy0xL3N5c3RlbS1zZXJ2aWNlcyBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9wb2xraXQtMSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS8ke0JQTn0gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZmFjdG9yeSBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vZGJ1cy0xLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9tYWNoaW5lLWlkIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L21vZHVsZXMtbG9hZC5kLyBcCisgICAgICAgICAgICAgICAgJHtzeXNjb25mZGlyfS9wYW0uZC8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vc3lzY3RsLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3N5c3RlbWQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQvIFwKKyAgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L3hkZy8gXAorICAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL1JFQURNRSBcCisgICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vc3lzdGVtZC8qIFwKKyAgICAgICAgICAgICAgICAke3N5c3RlbWRfdW5pdGRpcn0vKiBcCisgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5zbyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5zc18qIFwKKyAgICAgICAgICAgICAgICAvY2dyb3VwIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vc3lzdGVtZCogXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9idXNjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9sb2NhbGVjdGwgXAorICAgICAgICAgICAgICAgICR7YmluZGlyfS9ob3N0bmFtZWN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3RpbWVkYXRlY3RsIFwKKyAgICAgICAgICAgICAgICAke2JpbmRpcn0vYm9vdGN0bCBcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2tlcm5lbC1pbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvdG1wZmlsZXMuZC8qLmNvbmYgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXN0ZW1kIFwKKyAgICAgICAgICAgICAgICAke2V4ZWNfcHJlZml4fS9saWIvbW9kdWxlcy1sb2FkLmQgXAorICAgICAgICAgICAgICAgICR7ZXhlY19wcmVmaXh9L2xpYi9zeXNjdGwuZCBcCisgICAgICAgICAgICAgICAgJHtleGVjX3ByZWZpeH0vbGliL3N5c3VzZXJzLmQgXAorICAgICAgICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzcwLXVhY2Nlc3MucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzcxLXNlYXQucnVsZXMgXAorICAgICAgICAgICAgICAgICR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLzczLXNlYXQtbGF0ZS5ydWxlcyBcCisgICAgICAgICAgICAgICAgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2L3J1bGVzLmQvOTktc3lzdGVtZC5ydWxlcyBcCisgICAgICAgICAgICAgICAiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtyb290bGliZGlyfS8uZGVidWcgJHtzeXN0ZW1kX3VuaXRkaXJ9Ly5kZWJ1ZyAke3N5c3RlbWRfdW5pdGRpcn0vKi8uZGVidWcgJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnLyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvKi5sYSAke2RhdGFkaXJ9L2RidXMtMS9pbnRlcmZhY2VzLyAke3N5c2NvbmZkaXJ9L3JwbS9tYWNyb3Muc3lzdGVtZCIKKworUkRFUEVORFNfJHtQTn0gKz0gImttb2QgZGJ1cyB1dGlsLWxpbnV4LW1vdW50IHVkZXYgKD0gJHtFWFRFTkRQS0dWfSkiCitSREVQRU5EU18ke1BOfSArPSAidm9sYXRpbGUtYmluZHMgdXBkYXRlLXJjLmQiCisKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICJzeXN0ZW1kLXNlcmlhbGdldHR5IHN5c3RlbWQtdmNvbnNvbGUtc2V0dXAgXAorICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQtY29tcGF0LXVuaXRzIHVkZXYtaHdkYiBcCisgICAgICAgICAgICAgICAgICAgICAgdXRpbC1saW51eC1hZ2V0dHkgIHV0aWwtbGludXgtZnNjayBlMmZzcHJvZ3MtZTJmc2NrIFwKKyAgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWF1dG9mczQga2VybmVsLW1vZHVsZS11bml4IGtlcm5lbC1tb2R1bGUtaXB2NiBcCisgICAgICAgICAgICAgICAgICAgICAgb3MtcmVsZWFzZSBcCisiCisKK1BBQ0tBR0VTID0rICJ1ZGV2LWRiZyB1ZGV2IHVkZXYtaHdkYiIKKworRklMRVNfdWRldi1kYmcgKz0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi8uZGVidWciCisKK1JQUk9WSURFU191ZGV2ID0gImhvdHBsdWciCisKK1JERVBFTkRTX3VkZXYtaHdkYiArPSAidWRldiIKKworRklMRVNfdWRldiArPSAiJHtiYXNlX3NiaW5kaXJ9L3VkZXZkIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3N5c3RlbWQvc3lzdGVtZC11ZGV2ZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2FjY2VsZXJvbWV0ZXIgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9hdGFfaWQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9jZHJvbV9pZCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2NvbGxlY3QgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9maW5ka2V5Ym9hcmRzIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYva2V5Ym9hcmQtZm9yY2UtcmVsZWFzZS5zaCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L2tleW1hcCBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L210ZF9wcm9iZSBcCisgICAgICAgICAgICAgICAke3Jvb3RsaWJleGVjZGlyfS91ZGV2L3Njc2lfaWQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi92NGxfaWQgXAorICAgICAgICAgICAgICAgJHtyb290bGliZXhlY2Rpcn0vdWRldi9rZXltYXBzIFwKKyAgICAgICAgICAgICAgICR7cm9vdGxpYmV4ZWNkaXJ9L3VkZXYvcnVsZXMuZC8qLnJ1bGVzIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vdWRldiBcCisgICAgICAgICAgICAgICAke3N5c2NvbmZkaXJ9L2luaXQuZC9zeXN0ZW1kLXVkZXZkIFwKKyAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKnVkZXYqIFwKKyAgICAgICAgICAgICAgICR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vKi53YW50cy8qdWRldiogXAorICAgICAgICAgICAgICAgJHtiYXNlX2JpbmRpcn0vdWRldmFkbSBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy91ZGV2YWRtIFwKKyAgICAgICAgICAgICAgIgorCitGSUxFU191ZGV2LWh3ZGIgPSAiJHtyb290bGliZXhlY2Rpcn0vdWRldi9od2RiLmQiCisKK0lOSVRTQ1JJUFRfUEFDS0FHRVMgPSAidWRldiIKK0lOSVRTQ1JJUFRfTkFNRV91ZGV2ID0gInN5c3RlbWQtdWRldmQiCitJTklUU0NSSVBUX1BBUkFNU191ZGV2ID0gInN0YXJ0IDAzIFMgLiIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkLnNldFZhcigiSU5ISUJJVF9VUERBVEVSQ0RfQkJDTEFTUyIsICIxIikKK30KKworIyBUT0RPOgorIyB1LWEgZm9yIHJ1bmxldmVsIGFuZCB0ZWxpbml0CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImluaXQgaGFsdCByZWJvb3Qgc2h1dGRvd24gcG93ZXJvZmYgcnVubGV2ZWwiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtpbml0XSA9ICIke3Jvb3RsaWJleGVjZGlyfS9zeXN0ZW1kL3N5c3RlbWQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5pdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L2luaXQiCitBTFRFUk5BVElWRV9QUklPUklUWVtpbml0XSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbaGFsdF0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hhbHRdID0gIiR7YmFzZV9zYmluZGlyfS9oYWx0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbaGFsdF0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3JlYm9vdF0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JlYm9vdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JlYm9vdCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3JlYm9vdF0gPz0gIjMwMCIKKworQUxURVJOQVRJVkVfVEFSR0VUW3NodXRkb3duXSA9ICIke2Jhc2VfYmluZGlyfS9zeXN0ZW1jdGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2h1dGRvd25dID0gIiR7YmFzZV9zYmluZGlyfS9zaHV0ZG93biIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZW3NodXRkb3duXSA/PSAiMzAwIgorCitBTFRFUk5BVElWRV9UQVJHRVRbcG93ZXJvZmZdID0gIiR7YmFzZV9iaW5kaXJ9L3N5c3RlbWN0bCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwb3dlcm9mZl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3Bvd2Vyb2ZmIgorQUxURVJOQVRJVkVfUFJJT1JJVFlbcG93ZXJvZmZdID89ICIzMDAiCisKK0FMVEVSTkFUSVZFX1RBUkdFVFtydW5sZXZlbF0gPSAiJHtiYXNlX2JpbmRpcn0vc3lzdGVtY3RsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3J1bmxldmVsXSA9ICIke2Jhc2Vfc2JpbmRpcn0vcnVubGV2ZWwiCitBTFRFUk5BVElWRV9QUklPUklUWVtydW5sZXZlbF0gPz0gIjMwMCIKKworcGtnX3Bvc3RpbnN0X3VkZXYtaHdkYiAoKSB7CisJaWYgdGVzdCAtbiAiJEQiOyB0aGVuCisJCSR7QHFlbXVfcnVuX2JpbmFyeShkLCAnJEQnLCAnJHtiYXNlX2JpbmRpcn0vdWRldmFkbScpfSBod2RiIC0tdXBkYXRlIFwKKwkJCS0tcm9vdCAkRAorCWVsc2UKKwkJdWRldmFkbSBod2RiIC0tdXBkYXRlCisJZmkKK30KKworcGtnX3ByZXJtX3VkZXYtaHdkYiAoKSB7CisJaWYgdGVzdCAtbiAiJEQiOyB0aGVuCisJCWV4aXQgMQorCWZpCisKKwlybSAtZiAke3N5c2NvbmZkaXJ9L3VkZXYvaHdkYi5iaW4KK30KKworIyBBcyB0aGlzIHJlY2lwZSBidWlsZHMgdWRldiwgcmVzcGVjdCBzeXN0ZW1kIGJlaW5nIGluIERJU1RST19GRUFUVVJFUyBzbworIyB0aGF0IHdlIGRvbid0IGJ1aWxkIGJvdGggdWRldiBhbmQgc3lzdGVtZCBpbiB3b3JsZCBidWlsZHMuCitweXRob24gKCkgeworICAgIGlmIG5vdCBiYi51dGlscy5jb250YWlucyAoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiJ3N5c3RlbWQnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9jcnlwdC1saWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL2NyeXB0LWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjM0MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9jcnlwdC1saWIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisjIFRoZSBzcmMgTWFrZWZpbGUgd2FzIGNoZWNraW5nIGZvciBsaWJjcnlwdC5hIG9uIHRoZSBob3N0LCBub3QgaW4gdGhlCisjIGJ1aWxkIGVudmlyb25tZW50LiAgVGhpcyBwYXRjaCBjaGVja3MgZm9yICRMQ1JZUFQgaW4gdGhlIGVudmlyb25tZW50CisjIGFuZCB1c2VzIGl0IGlmIGl0J3MgdGhlcmUuCisjIC0gamRpa2VAbGludXguaW50ZWwuY29tCisKK0luZGV4OiBzeXN2aW5pdC0yLjg4ZHNmL3NyYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c3Zpbml0LTIuODhkc2Yub3JpZy9zcmMvTWFrZWZpbGUKKysrKyBzeXN2aW5pdC0yLjg4ZHNmL3NyYy9NYWtlZmlsZQorQEAgLTg1LDkgKzg1LDEzIEBAIGVsc2UKKyBlbmRpZgorIAorICMgQWRkaXRpb25hbCBsaWJzIGZvciBHTlUgbGliYy4KKytpZm5lcSAoJChMQ1JZUFQpLCkKKysgIFNVTE9HSU5MSUJTCSs9ICQoTENSWVBUKQorK2Vsc2UKKyBpZm5lcSAoJCh3aWxkY2FyZCAvdXNyL2xpYiovbGliY3J5cHQuYSksKQorICAgU1VMT0dJTkxJQlMJKz0gLWxjcnlwdAorIGVuZGlmCisrZW5kaWYKKyAKKyBhbGw6CQkkKEJJTikgJChTQklOKSAkKFVTUkJJTikKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQyMjVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtMi44OGRzZi9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlIGIvc3JjL01ha2VmaWxlCitpbmRleCBlMmI4MDI4Li4zZTExZTkyIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlCisrKysgYi9zcmMvTWFrZWZpbGUKK0BAIC02NSw3ICs2NSwxNCBAQCBlbHNlCisgICBJTlNUQUxMX0RBVEEJPSBpbnN0YWxsIC1tIDY0NAorIGVuZGlmCisgSU5TVEFMTF9ESVIJPSBpbnN0YWxsIC1tIDc1NSAtZAorLU1BTkRJUgkJPSAvdXNyL3NoYXJlL21hbgorKworK1JPT1QgICAgICAgICA/PQorK2Jhc2VfYmluZGlyICA/PSAvYmluCisrYmFzZV9zYmluZGlyID89IC9zYmluCisrYmluZGlyICAgICAgID89IC91c3IvYmluCisrc3lzY29uZmRpciAgID89IC9ldGMKKytpbmNsdWRlZGlyICAgPz0gL3Vzci9pbmNsdWRlCisrbWFuZGlyICAgICAgID89IC91c3Ivc2hhcmUvbWFuCisgCisgaWZlcSAoJChXSVRIX1NFTElOVVgpLHllcykKKyAgIFNFTElOVVhfREVGCT0gIC1EV0lUSF9TRUxJTlVYCitAQCAtMTM4LDM5ICsxNDUsMzkgQEAgY2xvYmJlcjoJY2xlYW5vYmpzCisgZGlzdGNsZWFuOgljbG9iYmVyCisgCisgaW5zdGFsbDoKKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkvYmluLyAkKFJPT1QpL3NiaW4vCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpL3Vzci9iaW4vCisrCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChiYXNlX2JpbmRpcikvICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvCisrCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChiaW5kaXIpLworIAkJZm9yIGkgaW4gJChCSU4pOyBkbyBcCistCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpL2Jpbi8gOyBcCisrCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpJChiYXNlX2JpbmRpcikvIDsgXAorIAkJZG9uZQorIAkJZm9yIGkgaW4gJChTQklOKTsgZG8gXAorLQkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKS9zYmluLyA7IFwKKysJCQkkKElOU1RBTExfRVhFQykgJCRpICQoUk9PVCkkKGJhc2Vfc2JpbmRpcikvIDsgXAorIAkJZG9uZQorIAkJZm9yIGkgaW4gJChVU1JCSU4pOyBkbyBcCistCQkJJChJTlNUQUxMX0VYRUMpICQkaSAkKFJPT1QpL3Vzci9iaW4vIDsgXAorKwkJCSQoSU5TVEFMTF9FWEVDKSAkJGkgJChST09UKSQoYmluZGlyKS8gOyBcCisgCQlkb25lCistCQkjICQoSU5TVEFMTF9ESVIpICQoUk9PVCkvZXRjLworLQkJIyAkKElOU1RBTExfRVhFQykgaW5pdHNjcmlwdC5zYW1wbGUgJChST09UKS9ldGMvCistCQlsbiAtc2YgaGFsdCAkKFJPT1QpL3NiaW4vcmVib290CistCQlsbiAtc2YgaGFsdCAkKFJPT1QpL3NiaW4vcG93ZXJvZmYKKy0JCWxuIC1zZiBpbml0ICQoUk9PVCkvc2Jpbi90ZWxpbml0CistCQlsbiAtc2YgL3NiaW4va2lsbGFsbDUgJChST09UKS9iaW4vcGlkb2YKKy0JCWlmIFsgISAtZiAkKFJPT1QpL3Vzci9iaW4vbGFzdGIgXTsgdGhlbiBcCistCQkJbG4gLXNmIGxhc3QgJChST09UKS91c3IvYmluL2xhc3RiOyBcCisrCQkjICQoSU5TVEFMTF9ESVIpICQoUk9PVCkkKHN5c2NvbmZkaXIpLworKwkJIyAkKElOU1RBTExfRVhFQykgaW5pdHNjcmlwdC5zYW1wbGUgJChST09UKSQoc3lzY29uZmRpcikvCisrCQlsbiAtc2YgaGFsdCAkKFJPT1QpJChiYXNlX3NiaW5kaXIpL3JlYm9vdAorKwkJbG4gLXNmIGhhbHQgJChST09UKSQoYmFzZV9zYmluZGlyKS9wb3dlcm9mZgorKwkJbG4gLXNmIGluaXQgJChST09UKSQoYmFzZV9zYmluZGlyKS90ZWxpbml0CisrCQlsbiAtc2YgJChiYXNlX3NiaW5kaXIpL2tpbGxhbGw1ICQoUk9PVCkkKGJhc2VfYmluZGlyKS9waWRvZgorKwkJaWYgWyAhIC1mICQoUk9PVCkkKGJpbmRpcikvbGFzdGIgXTsgdGhlbiBcCisrCQkJbG4gLXNmIGxhc3QgJChST09UKSQoYmluZGlyKS9sYXN0YjsgXAorIAkJZmkKKy0JCSQoSU5TVEFMTF9ESVIpICQoUk9PVCkvdXNyL2luY2x1ZGUvCistCQkkKElOU1RBTExfREFUQSkgaW5pdHJlcS5oICQoUk9PVCkvdXNyL2luY2x1ZGUvCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChNQU5ESVIpL21hbjEvCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChNQU5ESVIpL21hbjUvCistCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChNQU5ESVIpL21hbjgvCisrCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChpbmNsdWRlZGlyKS8KKysJCSQoSU5TVEFMTF9EQVRBKSBpbml0cmVxLmggJChST09UKSQoaW5jbHVkZWRpcikvCisrCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChtYW5kaXIpL21hbjEvCisrCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChtYW5kaXIpL21hbjUvCisrCQkkKElOU1RBTExfRElSKSAkKFJPT1QpJChtYW5kaXIpL21hbjgvCisgCQlmb3IgaSBpbiAkKE1BTjEpOyBkbyBcCistCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQoTUFORElSKS9tYW4xLzsgXAorKwkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKG1hbmRpcikvbWFuMS87IFwKKyAJCWRvbmUKKyAJCWZvciBpIGluICQoTUFONSk7IGRvIFwKKy0JCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChNQU5ESVIpL21hbjUvOyBcCisrCQkJJChJTlNUQUxMX0RBVEEpIC4uL21hbi8kJGkgJChST09UKSQobWFuZGlyKS9tYW41LzsgXAorIAkJZG9uZQorIAkJZm9yIGkgaW4gJChNQU44KTsgZG8gXAorLQkJCSQoSU5TVEFMTF9EQVRBKSAuLi9tYW4vJCRpICQoUk9PVCkkKE1BTkRJUikvbWFuOC87IFwKKysJCQkkKElOU1RBTExfREFUQSkgLi4vbWFuLyQkaSAkKFJPT1QpJChtYW5kaXIpL21hbjgvOyBcCisgCQlkb25lCisgaWZlcSAoJChST09UKSwpCisgCQkjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL3BpZG9mLWFkZC1tLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LTIuODhkc2YvcGlkb2YtYWRkLW0tb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNWRmZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC0yLjg4ZHNmL3BpZG9mLWFkZC1tLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDE4OSBAQAorcGlkb2Y6IGFkZCAtbSBvcHRpb24KKworV2hlbiB1c2VkIHdpdGggLW8sIHdpbGwgYWxzbyBvbWl0IGFueSBwcm9jZXNzZXMgdGhhdCBoYXZlIHRoZSBzYW1lCithcmd2WzBdIGFuZCBhcmd2WzFdIGFzIGFueSBleHBsaWNpdGx5IG9taXR0ZWQgcHJvY2VzcyBpZHMuIFRoaXMgY2FuIGJlCit1c2VkIHRvIGF2b2lkIG11bHRpcGxlIHNoZWxsIHNjcmlwdHMgY29uY3VycmVudGx5IGNhbGxpbmcgcGlkb2YgcmV0dXJuaW5nCitlYWNoIG90aGVyJ3MgcGlkcy4KKworaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD04ODM4NTYKKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorSW1wb3J0ZWQgcGF0Y2ggZnJvbTogaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL2F0dGFjaG1lbnQuY2dpP2lkPTY1ODE2NgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBtYW4vcGlkb2YuOCAgICB8ICA2ICsrKysrKworIHNyYy9raWxsYWxsNS5jIHwgNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL21hbi9waWRvZi44IGIvbWFuL3BpZG9mLjgKKy0tLSBhL21hbi9waWRvZi44CisrKysgYi9tYW4vcGlkb2YuOAorQEAgLTI0LDYgKzI0LDcgQEAgcGlkb2YgLS0gZmluZCB0aGUgcHJvY2VzcyBJRCBvZiBhIHJ1bm5pbmcgcHJvZ3JhbS4KKyAuUkIgWyBcLWMgXQorIC5SQiBbIFwtbiBdCisgLlJCIFsgXC14IF0KKysuUkIgWyBcLW0gXQorIC5SQiBbIFwtbworIC5JUiBvbWl0cGlkWyxvbWl0cGlkLi5dIF0KKyAuUkIgWyBcLW8KK0BAIC02Myw2ICs2NCwxMSBAQCBzaGVsbHMgcnVubmluZyB0aGUgbmFtZWQgc2NyaXB0cy4KKyBUZWxscyBcZklwaWRvZlxmUCB0byBvbWl0IHByb2Nlc3NlcyB3aXRoIHRoYXQgcHJvY2VzcyBpZC4gVGhlIHNwZWNpYWwKKyBwaWQgXGZCJVBQSURcZlAgY2FuIGJlIHVzZWQgdG8gbmFtZSB0aGUgcGFyZW50IHByb2Nlc3Mgb2YgdGhlIFxmSXBpZG9mXGZQCisgcHJvZ3JhbSwgaW4gb3RoZXIgd29yZHMgdGhlIGNhbGxpbmcgc2hlbGwgb3Igc2hlbGwgc2NyaXB0LgorKy5JUCAtbQorK1doZW4gdXNlZCB3aXRoIC1vLCB3aWxsIGFsc28gb21pdCBhbnkgcHJvY2Vzc2VzIHRoYXQgaGF2ZSB0aGUgc2FtZQorK2FyZ3ZbMF0gYW5kIGFyZ3ZbMV0gYXMgYW55IGV4cGxpY2l0bHkgb21pdHRlZCBwcm9jZXNzIGlkcy4gVGhpcyBjYW4gYmUKKyt1c2VkIHRvIGF2b2lkIG11bHRpcGxlIHNoZWxsIHNjcmlwdHMgY29uY3VycmVudGx5IGNhbGxpbmcgcGlkb2YgcmV0dXJuaW5nCisrZWFjaCBvdGhlcidzIHBpZHMuCisgLlNIICJFWElUIFNUQVRVUyIKKyAuVFAKKyAuQiAwCitkaWZmIC0tZ2l0IGEvc3JjL2tpbGxhbGw1LmMgYi9zcmMva2lsbGFsbDUuYworaW5kZXggNTkzN2Q5OC4uZTczODg1ZSAxMDA2NDQKKy0tLSBhL3NyYy9raWxsYWxsNS5jCisrKysgYi9zcmMva2lsbGFsbDUuYworQEAgLTExOCw2ICsxMTgsNyBAQCB0eXBlZGVmIHN0cnVjdCBfc19uZnMKKyAKKyAvKiBMaXN0IG9mIHByb2Nlc3Nlcy4gKi8KKyBQUk9DICpwbGlzdDsKKytQUk9DICpvbGlzdDsKKyAKKyAvKiBMaXN0IG9mIHByb2Nlc3NlcyB0byBvbWl0LiAqLworIE9NSVQgKm9taXQ7CitAQCAtMzQ1LDYgKzM0NiwyMCBAQCBzdGF0aWMgdm9pZCBjbGVhcl9tbnQodm9pZCkKKyAJfQorIH0KKyAKKytzdGF0aWMgdm9pZCBjbGVhcl9vbWl0KHZvaWQpCisreworKwlPTUlUICpvOworKwlQUk9DICpwOworKwlmb3IgKG8gPSBvbWl0OyBvOyBvID0gb21pdCkgeworKwkJb21pdCA9IG9taXQtPm5leHQ7CisrCQlmcmVlKG8pOworKwl9CisrCWZvciAocCA9IG9saXN0OyBwOyBwID0gb2xpc3QpIHsKKysJCW9saXN0ID0gb2xpc3QtPm5leHQ7CisrCQlmcmVlKHApOworKwl9CisrfQorKworIC8qCisgICogICAgIENoZWNrIGlmIHBhdGggaXMgaWEgc2hhZG93IG9mZiBhIE5GUyBwYXJ0aXRpb24uCisgICovCitAQCAtNDUyLDYgKzQ2Nyw3IEBAIGludCByZWFkcHJvYyhpbnQgZG9fc3RhdCkKKyAJRElSCQkqZGlyOworIAlGSUxFCQkqZnA7CisgCVBST0MJCSpwLCAqbjsKKysJT01JVAkJKm8sICptOworIAlzdHJ1Y3QgZGlyZW50CSpkOworIAlzdHJ1Y3Qgc3RhdAlzdDsKKyAJY2hhcgkJcGF0aFtQQVRIX01BWCsxXTsKK0BAIC02MjQsNiArNjQwLDE3IEBAIGludCByZWFkcHJvYyhpbnQgZG9fc3RhdCkKKyAJCXAtPm5leHQgPSBwbGlzdDsKKyAJCXBsaXN0ID0gcDsKKyAJCXAtPnBpZCA9IHBpZDsKKysJCS8qIENvdWxkIGJlIHNtYXJ0ZXIsIGJ1dCBpdCdzIGEgc21hbGwgbGlzdC4gKi8KKysJCW0gPSBvbWl0OworKwkJZm9yIChvID0gb21pdDsgbTsgbyA9IG0pIHsKKysJCQltID0gby0+bmV4dDsKKysJCQlpZiAoby0+cGlkID09IHAtPnBpZCkgeworKwkJCQluID0gKFBST0MqKXhtYWxsb2Moc2l6ZW9mKFBST0MpKTsKKysJCQkJKm4gPSAqcDsKKysJCQkJbi0+bmV4dCA9IG9saXN0OworKwkJCQlvbGlzdCA9IG47CisrCQkJfQorKwkJfQorIAl9CisgCWNsb3NlZGlyKGRpcik7CisgCitAQCAtODEzLDYgKzg0MCwyNiBAQCBQSURRX0hFQUQgKnBpZG9mKGNoYXIgKnByb2cpCisgCXJldHVybiBxOworIH0KKyAKKytpbnQgbWF0Y2hlcyhQUk9DICpvLCBQUk9DICpwKQorK3sKKysJaW50IHJldCA9IDA7CisrCWNoYXIgKm9hcmd2MSwgKnBhcmd2MTsKKysJaWYgKChvLT5hcmd2MCAmJiBwLT5hcmd2MCAmJiAhc3RyY21wKG8tPmFyZ3YwLHAtPmFyZ3YwKSkpIHsKKysJCWlmIChvLT5hcmd2MSAmJiBwLT5hcmd2MSkgeworKwkJCWlmICgob2FyZ3YxID0gY2Fub25pY2FsaXplX2ZpbGVfbmFtZShvLT5hcmd2MSkpID09IE5VTEwpCisrCQkJCW9hcmd2MSA9IHN0cmR1cChvLT5hcmd2MSk7CisrCQkJaWYgKChwYXJndjEgPSBjYW5vbmljYWxpemVfZmlsZV9uYW1lKHAtPmFyZ3YxKSkgPT0gTlVMTCkKKysJCQkJcGFyZ3YxID0gc3RyZHVwKHAtPmFyZ3YxKTsKKysJCQlpZiAoISBzdHJjbXAob2FyZ3YxLCBwYXJndjEpKSB7CisrCQkJCXJldCA9IDE7CisrCQkJfQorKwkJCWZyZWUob2FyZ3YxKTsKKysJCQlmcmVlKHBhcmd2MSk7CisrCQl9CisrCX0KKysJcmV0dXJuIHJldDsKKyt9CisrCisgLyogR2l2ZSB1c2FnZSBtZXNzYWdlIGFuZCBleGl0LiAqLworIHZvaWQgdXNhZ2Uodm9pZCkKKyB7CitAQCAtODQ1LDYgKzg5Miw3IEBAIHZvaWQgbnN5c2xvZyhpbnQgcHJpLCBjaGFyICpmbXQsIC4uLikKKyAjZGVmaW5lIFBJRE9GX1NJTkdMRQkweDAxCisgI2RlZmluZSBQSURPRl9PTUlUCTB4MDIKKyAjZGVmaW5lIFBJRE9GX05FVEZTCTB4MDQKKysjZGVmaW5lIFBJRE9GX09NSVRfT01JVF9NQVRDSEVTCTB4MDgKKyAKKyAvKgorICAqCVBpZG9mIGZ1bmN0aW9uYWxpdHkuCitAQCAtODYxLDYgKzkwOSw3IEBAIGludCBtYWluX3BpZG9mKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJc3RydWN0IHN0YXQJc3Q7CisgCWNoYXIJCXRtcFs1MTJdOworIAorKwlvbGlzdCA9IChQUk9DKikwOworIAlvbWl0ID0gKE9NSVQqKTA7CisgCW5saXN0ID0gKE5GUyopMDsKKyAJb3B0ZXJyID0gMDsKK0BAIC04NjgsNyArOTE3LDcgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlpZiAoKHRva2VuID0gZ2V0ZW52KCJQSURPRl9ORVRGUyIpKSAmJiAoc3RyY21wKHRva2VuLCJubyIpICE9IDApKQorIAkJZmxhZ3MgfD0gUElET0ZfTkVURlM7CisgCistCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsYXJndiwiaGNvOnN4biIpKSAhPSBFT0YpIHN3aXRjaCAob3B0KSB7CisrCXdoaWxlICgob3B0ID0gZ2V0b3B0KGFyZ2MsYXJndiwiaGNtbzpzeG4iKSkgIT0gRU9GKSBzd2l0Y2ggKG9wdCkgeworIAkJY2FzZSAnPyc6CisgCQkJbnN5c2xvZyhMT0dfRVJSLCJpbnZhbGlkIG9wdGlvbnMgb24gY29tbWFuZCBsaW5lIVxuIik7CisgCQkJY2xvc2Vsb2coKTsKK0BAIC05MDcsNiArOTU2LDkgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJY2FzZSAneCc6CisgCQkJc2NyaXB0c190b28rKzsKKyAJCQlicmVhazsKKysJCWNhc2UgJ20nOgorKwkJCWZsYWdzIHw9IFBJRE9GX09NSVRfT01JVF9NQVRDSEVTOworKwkJCWJyZWFrOworIAkJY2FzZSAnbic6CisgCQkJZmxhZ3MgfD0gUElET0ZfTkVURlM7CisgCQkJYnJlYWs7CitAQCAtOTM4LDEwICs5OTAsMTMgQEAgaW50IG1haW5fcGlkb2YoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXBpZF90IHNwaWQgPSAwOworIAkJCXdoaWxlICgocCA9IGdldF9uZXh0X2Zyb21fcGlkX3EocSkpKSB7CisgCQkJCWlmICgoZmxhZ3MgJiBQSURPRl9PTUlUKSAmJiBvbWl0KSB7CistCQkJCQlPTUlUICogb3B0cjsKKy0JCQkJCWZvciAob3B0ciA9IG9taXQ7IG9wdHI7IG9wdHIgPSBvcHRyLT5uZXh0KSB7CisrCQkJCQlQUk9DICogb3B0cjsKKysJCQkJCWZvciAob3B0ciA9IG9saXN0OyBvcHRyOyBvcHRyID0gb3B0ci0+bmV4dCkgeworIAkJCQkJCWlmIChvcHRyLT5waWQgPT0gcC0+cGlkKQorIAkJCQkJCQlicmVhazsKKysJCQkJCQlpZiAoZmxhZ3MgJiBQSURPRl9PTUlUX09NSVRfTUFUQ0hFUykKKysJCQkJCQkJaWYgKG1hdGNoZXMob3B0ciwgcCkpCisrCQkJCQkJCQlicmVhazsKKyAJCQkJCX0KKyAKKyAJCQkJCS8qCitAQCAtOTc3LDYgKzEwMzIsNyBAQCBpbnQgbWFpbl9waWRvZihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWlmICghZmlyc3QpCisgCQlwcmludGYoIlxuIik7CisgCisrCWNsZWFyX29taXQoKTsKKyAJY2xlYXJfbW50KCk7CisgCisgCWNsb3NlbG9nKCk7CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYi9pbml0dGFiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYmJkZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC1pbml0dGFiL2luaXR0YWIKQEAgLTAsMCArMSwzMCBAQAorIyAvZXRjL2luaXR0YWI6IGluaXQoOCkgY29uZmlndXJhdGlvbi4KKyMgJElkOiBpbml0dGFiLHYgMS45MSAyMDAyLzAxLzI1IDEzOjM1OjIxIG1pcXVlbHMgRXhwICQKKworIyBUaGUgZGVmYXVsdCBydW5sZXZlbC4KK2lkOjU6aW5pdGRlZmF1bHQ6CisKKyMgQm9vdC10aW1lIHN5c3RlbSBjb25maWd1cmF0aW9uL2luaXRpYWxpemF0aW9uIHNjcmlwdC4KKyMgVGhpcyBpcyBydW4gZmlyc3QgZXhjZXB0IHdoZW4gYm9vdGluZyBpbiBlbWVyZ2VuY3kgKC1iKSBtb2RlLgorc2k6OnN5c2luaXQ6L2V0Yy9pbml0LmQvcmNTCisKKyMgV2hhdCB0byBkbyBpbiBzaW5nbGUtdXNlciBtb2RlLgorfn46Uzp3YWl0Oi9zYmluL3N1bG9naW4KKworIyAvZXRjL2luaXQuZCBleGVjdXRlcyB0aGUgUyBhbmQgSyBzY3JpcHRzIHVwb24gY2hhbmdlCisjIG9mIHJ1bmxldmVsLgorIworIyBSdW5sZXZlbCAwIGlzIGhhbHQuCisjIFJ1bmxldmVsIDEgaXMgc2luZ2xlLXVzZXIuCisjIFJ1bmxldmVscyAyLTUgYXJlIG11bHRpLXVzZXIuCisjIFJ1bmxldmVsIDYgaXMgcmVib290LgorCitsMDowOndhaXQ6L2V0Yy9pbml0LmQvcmMgMAorbDE6MTp3YWl0Oi9ldGMvaW5pdC5kL3JjIDEKK2wyOjI6d2FpdDovZXRjL2luaXQuZC9yYyAyCitsMzozOndhaXQ6L2V0Yy9pbml0LmQvcmMgMworbDQ6NDp3YWl0Oi9ldGMvaW5pdC5kL3JjIDQKK2w1OjU6d2FpdDovZXRjL2luaXQuZC9yYyA1CitsNjo2OndhaXQ6L2V0Yy9pbml0LmQvcmMgNgorIyBOb3JtYWxseSBub3QgcmVhY2hlZCwgYnV0IGZhbGx0aHJvdWdoIGluIGNhc2Ugb2YgZW1lcmdlbmN5LgorejY6NjpyZXNwYXduOi9zYmluL3N1bG9naW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LWluaXR0YWJfMi44OGRzZi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWIxMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQtaW5pdHRhYl8yLjg4ZHNmLmJiCkBAIC0wLDAgKzEsODMgQEAKK1NVTU1BUlkgPSAiSW5pdHRhYiBjb25maWd1cmF0aW9uIGZvciBTeXNWaW5pdCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2NvbW1vbi1saWNlbnNlcy9HUEwtMi4wO21kNT04MDFmODA5ODBkMTcxZGQ2NDI1NjEwODMzYTIyZGJlNiIKKworUFIgPSAicjEwIgorCitTUkNfVVJJID0gImZpbGU6Ly9pbml0dGFiIgorCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbml0dGFiICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKworICAgIHNldCAteAorICAgIHRtcD0iJHtTRVJJQUxfQ09OU09MRVN9IgorICAgIGZvciBpIGluICR0bXAKKyAgICBkbworCWo9YGVjaG8gJHtpfSB8IHNlZCBzL1w7L1wgL2dgCisJbGFiZWw9YGVjaG8gJHtpfSB8IHNlZCAtZSAncy90dHkvLycgLWUgJ3MvXi4qOy8vJyAtZSAncy87LiovLydgCisJZWNobyAiJGxhYmVsOjEyMzQ1OnJlc3Bhd246JHtiYXNlX3NiaW5kaXJ9L2dldHR5IC1MICR7an0iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXR0YWIKKyAgICBkb25lCisKKyAgICBpZiBbICIke1VTRV9WVH0iID0gIjEiIF07IHRoZW4KKyAgICAgICAgY2F0IDw8RU9GID4+JHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorIyAke2Jhc2Vfc2JpbmRpcn0vZ2V0dHkgaW52b2NhdGlvbnMgZm9yIHRoZSBydW5sZXZlbHMuCisjCisjIFRoZSAiaWQiIGZpZWxkIE1VU1QgYmUgdGhlIHNhbWUgYXMgdGhlIGxhc3QKKyMgY2hhcmFjdGVycyBvZiB0aGUgZGV2aWNlIChhZnRlciAidHR5IikuCisjCisjIEZvcm1hdDoKKyMgIDxpZD46PHJ1bmxldmVscz46PGFjdGlvbj46PHByb2Nlc3M+CisjCisKK0VPRgorCisgICAgICAgIGZvciBuIGluICR7U1lTVklOSVRfRU5BQkxFRF9HRVRUWVN9CisgICAgICAgIGRvCisgICAgICAgICAgICBlY2hvICIkbjoxMjM0NTpyZXNwYXduOiR7YmFzZV9zYmluZGlyfS9nZXR0eSAzODQwMCB0dHkkbiIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorICAgICAgICBkb25lCisgICAgICAgIGVjaG8gIiIgPj4gJHtEfSR7c3lzY29uZmRpcn0vaW5pdHRhYgorICAgIGZpCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisjIHJ1biB0aGlzIG9uIHRoZSB0YXJnZXQKK2lmIFsgIngkRCIgPSAieCIgXSAmJiBbIC1lIC9wcm9jL2NvbnNvbGVzIF07IHRoZW4KKwl0bXA9IiR7U0VSSUFMX0NPTlNPTEVTX0NIRUNLfSIKKwlmb3IgaSBpbiAkdG1wCisJZG8KKwkJaj1gZWNobyAke2l9IHwgc2VkIHMvXi4qXDsvL2dgCisJCWlmIFsgLXogImBncmVwICR7an0gL3Byb2MvY29uc29sZXNgIiBdOyB0aGVuCisJCQlzZWQgLWkgL14uKiR7an0kL2QgL2V0Yy9pbml0dGFiCisJCWZpCisJZG9uZQorCWtpbGwgLUhVUCAxCitlbHNlCisJaWYgWyAiJHtTRVJJQUxfQ09OU09MRVNfQ0hFQ0t9IiA9ICIiIF07IHRoZW4KKwkJZXhpdCAwCisJZWxzZQorCQlleGl0IDEKKwlmaQorZmkKK30KKworIyBVU0VfVlQgYW5kIFNFUklBTF9DT05TT0xFUyBhcmUgZ2VuZXJhbGx5IGRlZmluZWQgYnkgdGhlIE1BQ0hJTkUgLmNvbmYuCisjIFNldCBQQUNLQUdFX0FSQ0ggYXBwcm9wcmlhdGVseS4KK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK0ZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vaW5pdHRhYiIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2luaXR0YWIiCisKK1VTRV9WVCA/PSAiMSIKK1NZU1ZJTklUX0VOQUJMRURfR0VUVFlTID89ICIxIgorCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDAwMS1UaGlzLWZpeGVzLWFuLWlzc3VlLXRoYXQtY2xhbmctcmVwb3J0cy1hYm91dC1tdXRsaXBsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNWMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC8wMDAxLVRoaXMtZml4ZXMtYW4taXNzdWUtdGhhdC1jbGFuZy1yZXBvcnRzLWFib3V0LW11dGxpcGwucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSAzNmFjOTdiZmU1MTc5NzQ1ODQ0MmE2MDM1MjE5YTUwNGE0MmU3MDNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjEgQXVnIDIwMTUgMTA6NTY6NDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVGhpcyBmaXhlcyBhbiBpc3N1ZSB0aGF0IGNsYW5nIHJlcG9ydHMgYWJvdXQgbXV0bGlwbGUgb3V0cHV0CisgZmlsZXMKKworSXNzdWUgaXMgdGhhdCB3ZSBhcmUgcGFzc2luZyAuaCBmaWxlIHRvIGxpbmsgc3RlcCBhcyBzZWVuIGJlbG93LgorCit8IGFybS1vZS1saW51eC1nbnVlYWJpLWNsYW5nICAtbWFyY2g9YXJtdjctYSAtbXRodW1iICAtbWZsb2F0LWFiaT1oYXJkCistbWZwdT1uZW9uLXZmcHY0IC1tdHVuZT1jb3J0ZXgtYTcgLURfX2V4dGVybl9hbHdheXNfaW5saW5lPWlubGluZQorLW5vLWludGVncmF0ZWQtYXMKKy0tc3lzcm9vdD0vbW50L2hvbWUva3Jhai93b3JrL2FuZ3N0cm9tL3NvdXJjZXMvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3Jhc3BiZXJyeXBpMgorLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgIGhhbHQubyBpZmRvd24ubyBoZGRvd24ubwordXRtcC5vIHJlYm9vdC5oICAgLW8gaGFsdAorfCBjbGFuZy0zLjc6IGVycm9yOiBjYW5ub3Qgc3BlY2lmeSAtbyB3aGVuIGdlbmVyYXRpbmcgbXVsdGlwbGUgb3V0cHV0CitmaWxlcworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9NYWtlZmlsZSB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZSBiL3NyYy9NYWtlZmlsZQoraW5kZXggZTc3ZWQ1Zi4uYTZmOWY0MCAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZQorKysrIGIvc3JjL01ha2VmaWxlCitAQCAtMTAzLDkgKzEwMyw5IEBAIGFsbDoJCSQoQklOKSAkKFNCSU4pICQoVVNSQklOKQorIGluaXQ6CQlMRExJQlMgKz0gJChJTklUTElCUykgJChTVEFUSUMpCisgaW5pdDoJCWluaXQubyBpbml0X3V0bXAubworIAorLWhhbHQ6CQloYWx0Lm8gaWZkb3duLm8gaGRkb3duLm8gdXRtcC5vIHJlYm9vdC5oCisraGFsdDoJCWhhbHQubyBpZmRvd24ubyBoZGRvd24ubyB1dG1wLm8KKyAKKy1sYXN0OgkJbGFzdC5vIG9sZHV0bXAuaAorK2xhc3Q6CQlsYXN0Lm8KKyAKKyBtZXNnOgkJbWVzZy5vCisgCitAQCAtMTIwLDcgKzEyMCw3IEBAIHN1bG9naW46CXN1bG9naW4ubworIAorIHdhbGw6CQlkb3dhbGwubyB3YWxsLm8KKyAKKy1zaHV0ZG93bjoJZG93YWxsLm8gc2h1dGRvd24ubyB1dG1wLm8gcmVib290LmgKKytzaHV0ZG93bjoJZG93YWxsLm8gc2h1dGRvd24ubyB1dG1wLm8KKyAKKyBib290bG9nZDoJTERMSUJTICs9IC1sdXRpbAorIGJvb3Rsb2dkOglib290bG9nZC5vCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAxX2Jvb3Rsb2dkIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvMDFfYm9vdGxvZ2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY4OWQ5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0LzAxX2Jvb3Rsb2dkCkBAIC0wLDAgKzEgQEAKK2Ygcm9vdCByb290IDA2NDQgL3Zhci9sb2cvYm9vdCBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9ib290bG9nZC5pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZjVhYTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvYm9vdGxvZ2QuaW5pdApAQCAtMCwwICsxLDk4IEBACisjISAvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBib290bG9nZAorIyBSZXF1aXJlZC1TdGFydDoKKyMgUmVxdWlyZWQtU3RvcDoKKyMgRGVmYXVsdC1TdGFydDogICAgIFMKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDIgMyA0IDUKKyMgU2hvcnQtRGVzY3JpcHRpb246IE9uZSBvZiB0aGUgZmlyc3Qgc2NyaXB0cyB0byBiZSBleGVjdXRlZC4gU3RhcnRzIG9yIHN0b3BzCisjICAgICAgICAgICAgICAgdGhlIGJvb3Rsb2dkIGxvZyBwcm9ncmFtLiBJZiB0aGlzIHNjcmlwdCBpcyBjYWxsZWQgYXMKKyMgICAgICAgICAgICAgICAic3RvcC1ib290bG9nZCIsIGl0IHdpbGwgc3RvcCB0aGUgZGFlbW9uIGluc3RlYWQgb2YKKyMgICAgICAgICAgICAgICBzdGFydGluZyBpdCBldmVuIHdoZW4gY2FsbGVkIHdpdGggdGhlICJzdGFydCIgYXJndW1lbnQuCisjCisjIyMgRU5EIElOSVQgSU5GTworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitEQUVNT049L3NiaW4vYm9vdGxvZ2QKK05BTUU9Ym9vdGxvZ2QKK0RFU0M9IkJvb3Rsb2cgZGFlbW9uIgorCisjIHNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5CisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCit0ZXN0IC1mICREQUVNT04gfHwgZXhpdCAwCisKK1sgLXIgL2V0Yy9kZWZhdWx0L2Jvb3Rsb2dkIF0gJiYgLiAvZXRjL2RlZmF1bHQvYm9vdGxvZ2QKKworIyMgc2V0IC1lICMgbm90IG5lZWRlZAorCitjYXNlICIkQk9PVExPR0RfRU5BQkxFIiBpbgorCVtObl0qKQorCQlleGl0IDAKKwkJOzsKK2VzYWMKKworU1RPUFBFUj0KK0FDVElPTj0iJDEiCitjYXNlICIkMCIgaW4KKwkqc3RvcC1ib290bG9nKikKKwkJU1RPUFBFUj1ZCisJCWlmIFsgIiRBQ1RJT04iID0gc3RhcnQgXQorCQl0aGVuCisJCQlBQ1RJT049c3RvcAorCQlmaQorCQk7OworZXNhYworCitjYXNlICIkQUNUSU9OIiBpbgorCXN0YXJ0KQorCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAtbiAiU3RhcnRpbmcgJERFU0M6ICIKKwkJaWYgWyAtZCAvcHJvYy8xLy4gXQorCQl0aGVuCisJCQl1bWFzayAwMjcKKwkJCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCBcCisJCQkJLS1leGVjICREQUVNT04gLS0gLXIgLWMKKwkJZWxzZQorCQkJJERBRU1PTiAtciAtYworCQlmaQorCQlbICIke1ZFUkJPU0V9IiAhPSAibm8iIF0gJiYgZWNobyAiJE5BTUUuIgorCQk7OworCXN0b3ApCisJCSMgc3RvcCBtYXkgZ2V0IGNhbGxlZCBkdXJpbmcgYm9vdHVwLCBzbyBsZXQgaXQgaG9ub3IKKwkJIyByY1MgVkVSQk9TRSBzZXR0aW5nCisJCVsgIiR7VkVSQk9TRX0iICE9ICJubyIgXSAmJiBlY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgJERBRU1PTgorCisJCWlmIFsgIiRTVE9QUEVSIiBdICYmIFsgIiQod2hpY2ggc2F2ZWxvZyAyPi9kZXYvbnVsbCkiIF0gJiYgXAorCQkgICBbIC1mIC92YXIvbG9nL2Jvb3QgXSAmJiBbIC1mIC92YXIvbG9nL2Jvb3R+IF0KKwkJdGhlbgorCQkJY2QgL3Zhci9sb2cKKwkJCWNoZ3JwIGFkbSBib290CisJCQlzYXZlbG9nIC1wIC1jIDUgYm9vdCA+IC9kZXYvbnVsbCAyPiYxCisJCQltdiBib290LjAgYm9vdAorCQkJbXYgYm9vdH4gYm9vdC4wCisJCWZpCisKKwkJWyAiJHtWRVJCT1NFfSIgIT0gIm5vIiBdICYmIGVjaG8gIiROQU1FLiIKKwkJOzsKKwkgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJCWVjaG8gLW4gIlJlc3RhcnRpbmcgJERFU0M6ICIKKwkJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1leGVjICREQUVNT04KKwkJc2xlZXAgMQorCQlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjICREQUVNT04KKwkJZWNobyAiJE5BTUUuIgorCQk7OworCXN0YXR1cykKKwkJc3RhdHVzICREQUVNT04KKwkJZXhpdCAkPworCQk7OworCSopCisJCU49JHswIyMqL30KKwkJTj0ke04jW1NLXT8/fQorCQllY2hvICJVc2FnZTogJE4ge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmMgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2E0MWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmMKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9zaAorIworIyByYwkJVGhpcyBmaWxlIGlzIHJlc3BvbnNpYmxlIGZvciBzdGFydGluZy9zdG9wcGluZworIwkJc2VydmljZXMgd2hlbiB0aGUgcnVubGV2ZWwgY2hhbmdlcy4KKyMKKyMJCU9wdGltaXphdGlvbiBmZWF0dXJlOgorIwkJQSBzdGFydHVwIHNjcmlwdCBpcyBfbm90XyBydW4gd2hlbiB0aGUgc2VydmljZSB3YXMKKyMJCXJ1bm5pbmcgaW4gdGhlIHByZXZpb3VzIHJ1bmxldmVsIGFuZCBpdCB3YXNuJ3Qgc3RvcHBlZAorIwkJaW4gdGhlIHJ1bmxldmVsIHRyYW5zaXRpb24gKG1vc3QgRGViaWFuIHNlcnZpY2VzIGRvbid0CisjCQloYXZlIEs/PyBsaW5rcyBpbiByY3sxLDIsMyw0LDV9ICkKKyMKKyMgQXV0aG9yOglNaXF1ZWwgdmFuIFNtb29yZW5idXJnIDxtaXF1ZWxzQGNpc3Ryb24ubmw+CisjCQlCcnVjZSBQZXJlbnMgPEJydWNlQFBpeGFyLmNvbT4KKyMKKyMgVmVyc2lvbjoJQCgjKXJjICAyLjc4ICAwNy1Ob3YtMTk5OSAgbWlxdWVsc0BjaXN0cm9uLm5sCisjCisKKy4gL2V0Yy9kZWZhdWx0L3JjUworZXhwb3J0IFZFUkJPU0UKKworc3RhcnR1cF9wcm9ncmVzcygpIHsKKyAgICBzdGVwPSQoKCRzdGVwICsgJHN0ZXBfY2hhbmdlKSkKKyAgICBpZiBbICIkbnVtX3N0ZXBzIiAhPSAiMCIgXTsgdGhlbgorICAgICAgICBwcm9ncmVzcz0kKCgoJHN0ZXAgKiAkcHJvZ3Jlc3Nfc2l6ZSAvICRudW1fc3RlcHMpICsgJGZpcnN0X3N0ZXApKQorICAgIGVsc2UKKyAgICAgICAgcHJvZ3Jlc3M9JHByb2dyZXNzX3NpemUKKyAgICBmaQorICAgICNlY2hvICJQUk9HUkVTUyBpcyAkcHJvZ3Jlc3MgJHJ1bmxldmVsICRmaXJzdF9zdGVwICsgKCRzdGVwIG9mICRudW1fc3RlcHMpICRzdGVwX2NoYW5nZSAkcHJvZ3Jlc3Nfc2l6ZSIKKyAgICAjaWYgdHlwZSBwc3BsYXNoLXdyaXRlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICMgICAgVE1QRElSPS9tbnQvLnBzcGxhc2ggcHNwbGFzaC13cml0ZSAiUFJPR1JFU1MgJHByb2dyZXNzIiB8fCB0cnVlCisgICAgI2ZpCisgICAgaWYgWyAtZSAvbW50Ly5wc3BsYXNoL3BzcGxhc2hfZmlmbyBdOyB0aGVuCisgICAgICAgIGVjaG8gIlBST0dSRVNTICRwcm9ncmVzcyIgPiAvbW50Ly5wc3BsYXNoL3BzcGxhc2hfZmlmbworICAgIGZpCit9CisKKworIworIyBTdGFydCBzY3JpcHQgb3IgcHJvZ3JhbS4KKyMKK3N0YXJ0dXAoKSB7CisgICMgSGFuZGxlIHZlcmJvc2l0eQorICBbICIkVkVSQk9TRSIgPSB2ZXJ5IF0gJiYgZWNobyAiSU5JVDogUnVubmluZyAkQC4uLiIKKworICBjYXNlICIkMSIgaW4KKwkqLnNoKQorCQkjIFNvdXJjZSBzaGVsbCBzY3JpcHQgZm9yIHNwZWVkLgorCQkoCisJCQl0cmFwIC0gSU5UIFFVSVQgVFNUUAorCQkJc2NyaXB0bmFtZT0kMQorCQkJc2hpZnQKKwkJCS4gJHNjcmlwdG5hbWUKKwkJKQorCQk7OworCSopCisJCSIkQCIKKwkJOzsKKyAgZXNhYworICBzdGFydHVwX3Byb2dyZXNzCit9CisKKyAgIyBJZ25vcmUgQ1RSTC1DIG9ubHkgaW4gdGhpcyBzaGVsbCwgc28gd2UgY2FuIGludGVycnVwdCBzdWJwcm9jZXNzZXMuCisgIHRyYXAgIjoiIElOVCBRVUlUIFRTVFAKKworICAjIFNldCBvbmxjciB0byBhdm9pZCBzdGFpcmNhc2UgZWZmZWN0LgorICBzdHR5IG9ubGNyIDA+JjEKKworICAjIExpbWl0IHN0YWNrIHNpemUgZm9yIHN0YXJ0dXAgc2NyaXB0cworICBbICIkU1RBQ0tfU0laRSIgPT0gIiIgXSB8fCB1bGltaXQgLVMgLXMgJFNUQUNLX1NJWkUKKworICAjIE5vdyBmaW5kIG91dCB3aGF0IHRoZSBjdXJyZW50IGFuZCB3aGF0IHRoZSBwcmV2aW91cyBydW5sZXZlbCBhcmUuCisKKyAgcnVubGV2ZWw9JFJVTkxFVkVMCisgICMgR2V0IGZpcnN0IGFyZ3VtZW50LiBTZXQgbmV3IHJ1bmxldmVsIHRvIHRoaXMgYXJndW1lbnQuCisgIFsgIiQxIiAhPSAiIiBdICYmIHJ1bmxldmVsPSQxCisgIGlmIFsgIiRydW5sZXZlbCIgPSAiIiBdCisgIHRoZW4KKwllY2hvICJVc2FnZTogJDAgPHJ1bmxldmVsPiIgPiYyCisJZXhpdCAxCisgIGZpCisgIHByZXZpb3VzPSRQUkVWTEVWRUwKKyAgWyAiJHByZXZpb3VzIiA9ICIiIF0gJiYgcHJldmlvdXM9TgorCisgIGV4cG9ydCBydW5sZXZlbCBwcmV2aW91cworCisgICMgSXMgdGhlcmUgYW4gcmMgZGlyZWN0b3J5IGZvciB0aGlzIG5ldyBydW5sZXZlbD8KKyAgaWYgWyAtZCAvZXRjL3JjJHJ1bmxldmVsLmQgXQorICB0aGVuCisJIyBGaW5kIG91dCB3aGVyZSBpbiB0aGUgcHJvZ3Jlc3MgYmFyIHRoZSBpbml0cmFtZnMgZ290IHRvLgorCVBST0dSRVNTX1NUQVRFPTAKKwkjaWYgWyAtZiAvZGV2Ly5pbml0cmFtZnMvcHJvZ3Jlc3Nfc3RhdGUgXTsgdGhlbgorCSMgICAgLiAvZGV2Ly5pbml0cmFtZnMvcHJvZ3Jlc3Nfc3RhdGUKKwkjZmkKKworCSMgU3BsaXQgdGhlIHJlbWFpbmluZyBwb3J0aW9uIG9mIHRoZSBwcm9ncmVzcyBiYXIgaW50byB0aGlyZHMKKwlwcm9ncmVzc19zaXplPSQoKCgxMDAgLSAkUFJPR1JFU1NfU1RBVEUpIC8gMykpCisKKwljYXNlICIkcnVubGV2ZWwiIGluCisJCTB8NikKKwkJCSMgQ291bnQgZG93biBmcm9tIC0xMDAgdG8gMCBhbmQgdXNlIHRoZSBlbnRpcmUgYmFyCisJCQlmaXJzdF9zdGVwPS0xMDAKKwkJCXByb2dyZXNzX3NpemU9MTAwCisJCQlzdGVwX2NoYW5nZT0xCisJCQk7OworCSAgICAgICAgUykKKwkJCSMgQmVnaW4gd2hlcmUgdGhlIGluaXRyYW1mcyBsZWZ0IG9mZiBhbmQgdXNlIDIvMworCQkJIyBvZiB0aGUgcmVtYWluaW5nIHNwYWNlCisJCQlmaXJzdF9zdGVwPSRQUk9HUkVTU19TVEFURQorCQkJcHJvZ3Jlc3Nfc2l6ZT0kKCgkcHJvZ3Jlc3Nfc2l6ZSAqIDIpKQorCQkJc3RlcF9jaGFuZ2U9MQorCQkJOzsKKwkJKikKKwkJCSMgQmVnaW4gd2hlcmUgcmNTIGxlZnQgb2ZmIGFuZCB1c2UgdGhlIGZpbmFsIDEvMyBvZgorCQkJIyB0aGUgc3BhY2UgKGJ5IGxlYXZpbmcgcHJvZ3Jlc3Nfc2l6ZSB1bmNoYW5nZWQpCisJCQlmaXJzdF9zdGVwPSQoKCRwcm9ncmVzc19zaXplICogMiArICRQUk9HUkVTU19TVEFURSkpCisJCQlzdGVwX2NoYW5nZT0xCisJCQk7OworCWVzYWMKKworCW51bV9zdGVwcz0wCisJZm9yIHMgaW4gL2V0Yy9yYyRydW5sZXZlbC5kL1tTS10qOyBkbworICAgICAgICAgICAgY2FzZSAiJHtzIyMvZXRjL3JjJHJ1bmxldmVsLmQvUz8/fSIgaW4KKyAgICAgICAgICAgICAgICBnZG18eGRtfGtkbXxyZWJvb3R8aGFsdCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIG51bV9zdGVwcz0kKCgkbnVtX3N0ZXBzICsgMSkpCisgICAgICAgIGRvbmUKKyAgICAgICAgc3RlcD0wCisKKwkjIEZpcnN0LCBydW4gdGhlIEtJTEwgc2NyaXB0cy4KKwlpZiBbICRwcmV2aW91cyAhPSBOIF0KKwl0aGVuCisJCWZvciBpIGluIC9ldGMvcmMkcnVubGV2ZWwuZC9LWzAtOV1bMC05XSoKKwkJZG8KKwkJCSMgQ2hlY2sgaWYgdGhlIHNjcmlwdCBpcyB0aGVyZS4KKwkJCVsgISAtZiAkaSBdICYmIGNvbnRpbnVlCisKKwkJCSMgU3RvcCB0aGUgc2VydmljZS4KKwkJCXN0YXJ0dXAgJGkgc3RvcAorCQlkb25lCisJZmkKKworCSMgTm93IHJ1biB0aGUgU1RBUlQgc2NyaXB0cyBmb3IgdGhpcyBydW5sZXZlbC4KKwlmb3IgaSBpbiAvZXRjL3JjJHJ1bmxldmVsLmQvUyoKKwlkbworCQlbICEgLWYgJGkgXSAmJiBjb250aW51ZQorCisJCWlmIFsgJHByZXZpb3VzICE9IE4gXSAmJiBbICRwcmV2aW91cyAhPSBTIF0KKwkJdGhlbgorCQkJIworCQkJIyBGaW5kIHN0YXJ0IHNjcmlwdCBpbiBwcmV2aW91cyBydW5sZXZlbCBhbmQKKwkJCSMgc3RvcCBzY3JpcHQgaW4gdGhpcyBydW5sZXZlbC4KKwkJCSMKKwkJCXN1ZmZpeD0ke2kjL2V0Yy9yYyRydW5sZXZlbC5kL1NbMC05XVswLTldfQorCQkJc3RvcD0vZXRjL3JjJHJ1bmxldmVsLmQvS1swLTldWzAtOV0kc3VmZml4CisJCQlwcmV2aW91c19zdGFydD0vZXRjL3JjJHByZXZpb3VzLmQvU1swLTldWzAtOV0kc3VmZml4CisJCQkjCisJCQkjIElmIHRoZXJlIGlzIGEgc3RhcnQgc2NyaXB0IGluIHRoZSBwcmV2aW91cyBsZXZlbAorCQkJIyBhbmQgX25vXyBzdG9wIHNjcmlwdCBpbiB0aGlzIGxldmVsLCB3ZSBkb24ndAorCQkJIyBoYXZlIHRvIHJlLXN0YXJ0IHRoZSBzZXJ2aWNlLgorCQkJIworCQkJWyAtZiAkcHJldmlvdXNfc3RhcnQgXSAmJiBbICEgLWYgJHN0b3AgXSAmJiBjb250aW51ZQorCQlmaQorCQljYXNlICIkcnVubGV2ZWwiIGluCisJCQkwfDYpCisJCQkJc3RhcnR1cCAkaSBzdG9wCisJCQkJOzsKKwkJCSopCisJCQkJc3RhcnR1cCAkaSBzdGFydAorCQkJCTs7CisJCWVzYWMKKwlkb25lCisgIGZpCisKKyNVbmNvbW1lbnQgdG8gY2F1c2UgcHNwbGFzaCB0byBleGl0IG1hbnVhbGx5LCBvdGhlcndpc2UgaXQgZXhpdHMgd2hlbiBpdCBzZWVzIGEgVkMgc3dpdGNoCitpZiBbICJ4JHJ1bmxldmVsIiAhPSAieFMiIF0gJiYgWyAhIC14IC9ldGMvcmMke3J1bmxldmVsfS5kL1M/P3hzZXJ2ZXItbm9kbSBdOyB0aGVuCisgICAgaWYgdHlwZSBwc3BsYXNoLXdyaXRlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICBUTVBESVI9L21udC8ucHNwbGFzaCBwc3BsYXNoLXdyaXRlICJRVUlUIiB8fCB0cnVlCisgICAgCXVtb3VudCAtbCAvbW50Ly5wc3BsYXNoCisgICAgZmkKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDgwYjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0L3JjUwpAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKyMKKyMgcmNTCQlDYWxsIGFsbCBTPz8qIHNjcmlwdHMgaW4gL2V0Yy9yY1MuZCBpbgorIwkJbnVtZXJpY2FsL2FscGhhYmV0aWNhbCBvcmRlci4KKyMKKyMgVmVyc2lvbjoJQCgjKS9ldGMvaW5pdC5kL3JjUyAgMi43NiAgMTktQXByLTE5OTkgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCitQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitydW5sZXZlbD1TCitwcmV2bGV2ZWw9TgordW1hc2sgMDIyCitleHBvcnQgUEFUSCBydW5sZXZlbCBwcmV2bGV2ZWwKKworIwlNYWtlIHN1cmUgcHJvYyBpcyBtb3VudGVkCisjCitbIC1kICIvcHJvYy8xIiBdIHx8IG1vdW50IC9wcm9jCisKKyMKKyMJU291cmNlIGRlZmF1bHRzLgorIworLiAvZXRjL2RlZmF1bHQvcmNTCisKKyMKKyMJVHJhcCBDVFJMLUMgJmMgb25seSBpbiB0aGlzIHNoZWxsIHNvIHdlIGNhbiBpbnRlcnJ1cHQgc3VicHJvY2Vzc2VzLgorIwordHJhcCAiOiIgSU5UIFFVSVQgVFNUUAorCisjCisjCUNhbGwgYWxsIHBhcnRzIGluIG9yZGVyLgorIworZXhlYyAvZXRjL2luaXQuZC9yYyBTCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTLWRlZmF1bHQgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdC9yY1MtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDljZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvc3lzdmluaXQvc3lzdmluaXQvcmNTLWRlZmF1bHQKQEAgLTAsMCArMSwyOSBAQAorIworIwlEZWZhdWx0cyBmb3IgdGhlIGJvb3Qgc2NyaXB0cyBpbiAvZXRjL3JjUy5kCisjCisKKyMgVGltZSBmaWxlcyBpbiAvdG1wIGFyZSBrZXB0IGluIGRheXMuCitUTVBUSU1FPTAKKyMgU2V0IHRvIHllcyBpZiB5b3Ugd2FudCBzdWxvZ2luIHRvIGJlIHNwYXduZWQgb24gYm9vdHVwCitTVUxPR0lOPW5vCisjIFNldCB0byBubyBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGxvZ2luIG92ZXIgdGVsbmV0L3Jsb2dpbgorIyBiZWZvcmUgc3lzdGVtIHN0YXJ0dXAgaXMgY29tcGxldGUgKGFzIHNvb24gYXMgaW5ldGQgaXMgc3RhcnRlZCkKK0RFTEFZTE9HSU49bm8KKyMgQXNzdW1lIHRoYXQgdGhlIEJJT1MgY2xvY2sgaXMgc2V0IHRvIFVUQyB0aW1lIChyZWNvbW1lbmRlZCkKK1VUQz15ZXMKKyMgU2V0IFZFUkJPU0UgdG8gIm5vIiBpZiB5b3Ugd291bGQgbGlrZSBhIG1vcmUgcXVpZXQgYm9vdHVwLgorVkVSQk9TRT1ubworIyBTZXQgRURJVE1PVEQgdG8gIm5vIiBpZiB5b3UgZG9uJ3Qgd2FudCAvZXRjL21vdGQgdG8gYmUgZWRpdGVkIGF1dG9tYXRpY2FsbHkKK0VESVRNT1REPW5vCisjIFdoZXRoZXIgdG8gZnNjayByb290IG9uIGJvb3QKK0VOQUJMRV9ST09URlNfRlNDSz1ubworIyBTZXQgRlNDS0ZJWCB0byAieWVzIiBpZiB5b3Ugd2FudCB0byBhZGQgIi15IiB0byB0aGUgZnNjayBhdCBzdGFydHVwLgorRlNDS0ZJWD15ZXMKKyMgU2V0IFRJQ0tBREogdG8gdGhlIGNvcnJlY3QgdGljayB2YWx1ZSBmb3IgdGhpcyBzcGVjaWZpYyBtYWNoaW5lCisjVElDS0FESj0xMDAwMAorIyBFbmFibGUgY2FjaGluZyBpbiBwb3B1bGF0ZS12b2xhdGlsZS5zaAorVk9MQVRJTEVfRU5BQkxFX0NBQ0hFPXllcworIyBJbmRpY2F0ZSB3aGV0aGVyIHRoZSByb290ZnMgaXMgaW50ZW5kZWQgdG8gYmUgcmVhZC1vbmx5IG9yIG5vdC4KKyMgU2V0dGluZyBST09URlNfUkVBRF9PTkxZIHRvIHllcyBhbmQgcmVib290aW5nIHdpbGwgZ2l2ZSB5b3UgYSByZWFkLW9ubHkgcm9vdGZzLgorIyBOb3JtYWxseSB5b3Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhpcyB2YWx1ZS4KK1JPT1RGU19SRUFEX09OTFk9bm8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3N5c3Zpbml0L3N5c3Zpbml0XzIuODhkc2YuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZmUzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS9zeXN2aW5pdC9zeXN2aW5pdF8yLjg4ZHNmLmJiCkBAIC0wLDAgKzEsMTA4IEBACitTVU1NQVJZID0gIlN5c3RlbS1WIGxpa2UgaW5pdCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBpcyByZXF1aXJlZCB0byBib290IGluIG1vc3QgY29uZmlndXJhdGlvbnMuICBJdCBwcm92aWRlcyB0aGUgL3NiaW4vaW5pdCBwcm9ncmFtLiAgVGhpcyBpcyB0aGUgZmlyc3QgcHJvY2VzcyBzdGFydGVkIG9uIGJvb3QsIGFuZCB0aGUgbGFzdCBwcm9jZXNzIHRlcm1pbmF0ZWQgYmVmb3JlIHRoZSBzeXN0ZW0gaGFsdHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvc3lzdmluaXQvIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZUklHSFQ7ZW5kbGluZT0xNTttZDU9MzQ5Yzg3MmUwMDY2MTU1ZTE4MThiNzg2OTM4ODc2YTQiCitQUiA9ICJyMTQiCisKK1JERVBFTkRTXyR7UE59ID0gIiR7UE59LWluaXR0YWIiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9zeXN2aW5pdC9zeXN2aW5pdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3J5cHQtbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BpZG9mLWFkZC1tLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVRoaXMtZml4ZXMtYW4taXNzdWUtdGhhdC1jbGFuZy1yZXBvcnRzLWFib3V0LW11dGxpcGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmNTLWRlZmF1bHQgXAorICAgICAgICAgICBmaWxlOi8vcmMgXAorICAgICAgICAgICBmaWxlOi8vcmNTIFwKKyAgICAgICAgICAgZmlsZTovL2Jvb3Rsb2dkLmluaXQgXAorICAgICAgICAgICBmaWxlOi8vMDFfYm9vdGxvZ2QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmVkYThhOTdiODZlMGE2ZjU5ZGFiYmYyNTIwMmFhNmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjBiYmM4YzFlMTc5MjA1NmUyMzc2MWQyMjk2MGIzMGJiMTNlY2NjMmNhYmZmOGM3MzEwYTAxZjRkNWRmMTUxOSIKKworUyA9ICIke1dPUktESVJ9L3N5c3Zpbml0LSR7UFZ9IgorQiA9ICIke1N9L3NyYyIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCitERVBFTkRTX2FwcGVuZCA9ICIgdXBkYXRlLXJjLmQtbmF0aXZlIGJhc2UtcGFzc3dkIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJpbml0IG1vdW50cG9pbnQgaGFsdCByZWJvb3QgcnVubGV2ZWwgc2h1dGRvd24gcG93ZXJvZmYgbGFzdCBsYXN0YiBtZXNnIHV0bXBkdW1wIHdhbGwiCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjIwMCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2luaXRdID0gIiR7YmFzZV9zYmluZGlyfS9pbml0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbaW5pdF0gPSAiNTAiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3VudHBvaW50XSA9ICIke2Jhc2VfYmluZGlyfS9tb3VudHBvaW50IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hhbHRdID0gIiR7YmFzZV9zYmluZGlyfS9oYWx0IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JlYm9vdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JlYm9vdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW5sZXZlbF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3J1bmxldmVsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NodXRkb3duXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcG93ZXJvZmZdID0gIiR7YmFzZV9zYmluZGlyfS9wb3dlcm9mZiIKKworQUxURVJOQVRJVkVfJHtQTn0tcGlkb2YgPSAicGlkb2YiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGlkb2ZdID0gIiR7YmFzZV9iaW5kaXJ9L3BpZG9mIgorCitBTFRFUk5BVElWRV8ke1BOfS1zdWxvZ2luID0gInN1bG9naW4iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4iCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJtb3VudHBvaW50LjEgbGFzdC4xIG1lc2cuMSB3YWxsLjEgc3Vsb2dpbi44IHV0bXBkdW1wLjEiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsYXN0LjFdID0gIiR7bWFuZGlyfS9tYW4xL2xhc3QuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttZXNnLjFdID0gIiR7bWFuZGlyfS9tYW4xL21lc2cuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3VudHBvaW50LjFdID0gIiR7bWFuZGlyfS9tYW4xL21vdW50cG9pbnQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzdWxvZ2luLjhdID0gIiR7bWFuZGlyfS9tYW44L3N1bG9naW4uOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1dG1wZHVtcC4xXSA9ICIke21hbmRpcn0vbWFuMS91dG1wZHVtcC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3dhbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEvd2FsbC4xIgorCitQQUNLQUdFUyA9KyAic3lzdmluaXQtcGlkb2Ygc3lzdmluaXQtc3Vsb2dpbiIKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2Vfc2JpbmRpcn0vKiAke2Jhc2VfYmluZGlyfS8qIgorRklMRVNfc3lzdmluaXQtcGlkb2YgPSAiJHtiYXNlX2JpbmRpcn0vcGlkb2Yuc3lzdmluaXQgJHtiYXNlX3NiaW5kaXJ9L2tpbGxhbGw1IgorRklMRVNfc3lzdmluaXQtc3Vsb2dpbiA9ICIke2Jhc2Vfc2JpbmRpcn0vc3Vsb2dpbi5zeXN2aW5pdCIKKworUkRFUEVORFNfJHtQTn0gKz0gInN5c3Zpbml0LXBpZG9mIGluaXRzY3JpcHRzLWZ1bmN0aW9ucyIKKworQ0ZMQUdTX3ByZXBlbmQgPSAiLURfR05VX1NPVVJDRSAiCitleHBvcnQgTENSWVBUID0gIi1sY3J5cHQiCitFWFRSQV9PRU1BS0UgKz0gIidiYXNlX2JpbmRpcj0ke2Jhc2VfYmluZGlyfScgXAorCQkgJ2Jhc2Vfc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0nIFwKKwkJICdiaW5kaXI9JHtiaW5kaXJ9JyBcCisJCSAnc2JpbmRpcj0ke3NiaW5kaXJ9JyBcCisJCSAnc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9JyBcCisJCSAnaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9JyBcCisJCSAnbWFuZGlyPSR7bWFuZGlyfSciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ1JPT1Q9JHtEfScgaW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfSBcCisJCSAgICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQgXAorCQkgICAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlmb3IgbGV2ZWwgaW4gUyAwIDEgMiAzIDQgNSA2OyBkbworCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3JjJGxldmVsLmQKKwlkb25lCisKKwlpbnN0YWxsIC1tIDA2NDQgICAgJHtXT1JLRElSfS9yY1MtZGVmYXVsdAkke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3JjUworCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L3JjCQkke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9yY1MJCSR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAgICAke1dPUktESVJ9L2Jvb3Rsb2dkLmluaXQgICAgICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9ib290bG9nZAorCWxuIC1zZiBib290bG9nZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvc3RvcC1ib290bG9nZAorCisJdXBkYXRlLXJjLmQgLXIgJHtEfSBib290bG9nZCBzdGFydCAwNyBTIC4KKwl1cGRhdGUtcmMuZCAtciAke0R9IHN0b3AtYm9vdGxvZ2Qgc3RhcnQgOTkgMiAzIDQgNSAuCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMDFfYm9vdGxvZ2QgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMKKworCWNob3duIHJvb3Quc2h1dGRvd24gJHtEfSR7YmFzZV9zYmluZGlyfS9oYWx0ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vc2h1dGRvd24KKwljaG1vZCBvLXgsdStzICR7RH0ke2Jhc2Vfc2JpbmRpcn0vaGFsdCAke0R9JHtiYXNlX3NiaW5kaXJ9L3NodXRkb3duCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdmluaXQnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2Z1bmNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYzg1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvZnVuY3MKQEAgLTAsMCArMSw0NzQgQEAKK2E2NGwKK2FicworYWNjZXNzCitfX2FkanRpbWV4CithbGFybQorYWxwaGFzb3J0Cithcmd6X2FwcGVuZAorX19hcmd6X2NvdW50Cithcmd6X2NyZWF0ZV9zZXAKK2FyZ3pfaW5zZXJ0CitfX2FyZ3pfbmV4dAorYXJnel9uZXh0CitfX2FyZ3pfc3RyaW5naWZ5Cithcmd6X3N0cmluZ2lmeQorYXNwcmludGYKK2F0ZXhpdAorYXRvZgorYXRvaQorYmNtcAorYmNvcHkKK2JpbmRyZXN2cG9ydAorYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQKK2J0b3djCitiemVybworY2FsbG9jCitjYW5vbmljYWxpemVfZmlsZV9uYW1lCitjYXRnZXRzCitjZmdldG9zcGVlZAorY2ZzZXRpc3BlZWQKK2Nmc2V0c3BlZWQKK2NobW9kCitjaG93bgorY2hyb290CitjbG9jaworY2xvc2UKK2Nsb3NlZGlyCitjbG9zZWxvZworY29uZnN0cgorY29ubmVjdAorZGFlbW9uCitkY2dldHRleHQKK2RpZmZ0aW1lCitkaXJmZAorZGlybmFtZQorZG5nZXR0ZXh0CitkdXAyCitlY3Z0CitlbmRncmVudAorZW5kbW50ZW50CitlbmRwd2VudAorZW5kdXRlbnQKK2VuZHV0eGVudAorZXBvbGxfY3RsCitlcnIKK2V0aGVyX2hvc3R0b24KK2V0aGVyX250b2hvc3QKK2V1aWRhY2Nlc3MKK2V4ZWN2CitmY2hkaXIKK2ZjaG1vZAorZmNobW9kYXQKK2ZjaG93bgorZmNob3duYXQKK2ZjbnRsCitmY3Z0CitmZGF0YXN5bmMKK2Zkb3BlbmRpcgorZmVvZl91bmxvY2tlZAorZmdldHNfdW5sb2NrZWQKK2ZnZXR4YXR0cgorZmluaXRlCitmbGlzdHhhdHRyCitmbG9jaworZmxvY2tmaWxlCitmbm1hdGNoCitmb3JrCitmcGF0aGNvbmYKK19fZnBlbmRpbmcKK2ZwcmludGYKK2ZyZWUKK2ZyZWVhZGRyaW5mbworZnJlZWlmYWRkcnMKK2ZzZWVrbworX19mc2V0bG9ja2luZworZnNldHhhdHRyCitmc3RhdDY0Citmc3RhdAorZnN0YXRmcworZnN5bmMKK2Z0ZWxsbworZnRpbWUKK2Z0cnVuY2F0ZQorZnVubG9ja2ZpbGUKK2Z1dGltZXMKK2Z1dGltZXNhdAorZ2FpX3N0cmVycm9yCitnY3Z0CitnZXRhZGRyaW5mbworZ2V0Y191bmxvY2tlZAorZ2V0Y3dkCitnZXRkZWxpbQorZ2V0ZG9tYWlubmFtZQorZ2V0ZHRhYmxlc2l6ZQorZ2V0ZWdpZAorZ2V0ZW52CitnZXRldWlkCitnZXRnaWQKK2dldGdyZW50CitnZXRncmVudF9yCitnZXRncmdpZF9yCitnZXRncm5hbQorZ2V0Z3JuYW1fcgorZ2V0Z3JvdXBsaXN0CitnZXRncm91cHMKK2dldGhvc3RieWFkZHJfcgorZ2V0aG9zdGJ5bmFtZTIKK2dldGhvc3RieW5hbWUKK2dldGhvc3RieW5hbWVfcgorZ2V0aG9zdGVudAorZ2V0aG9zdGlkCitnZXRob3N0bmFtZQorZ2V0aWZhZGRycworZ2V0bGluZQorZ2V0bG9hZGF2ZworZ2V0bW50ZW50CitnZXRtc2cKK2dldG5hbWVpbmZvCitnZXRuZXRieWFkZHJfcgorZ2V0bmV0Z3JlbnRfcgorZ2V0b3B0CitnZXRvcHRfbG9uZworZ2V0b3B0X2xvbmdfb25seQorZ2V0cGFnZXNpemUKK2dldHBhc3MKK2dldHBlZXJuYW1lCitnZXRwZ3JwCitnZXRwaWQKK2dldHBwaWQKK2dldHByb3RvZW50X3IKK2dldHB3ZW50CitnZXRwd2VudF9yCitnZXRwd25hbQorZ2V0cHduYW1fcgorZ2V0cHd1aWQKK2dldHB3dWlkX3IKK2dldHJlc3VpZAorZ2V0cmxpbWl0CitnZXRydXNhZ2UKK2dldHNlcnZieW5hbWUKK2dldHNlcnZieW5hbWVfcgorZ2V0c2VydmJ5cG9ydF9yCitnZXRzZXJ2ZW50CitnZXRzZXJ2ZW50X3IKK2dldHNwbmFtCitnZXRzcG5hbV9yCitnZXR0aW1lb2ZkYXkKK2dldHR0eWVudAorZ2V0dHR5bmFtCitnZXR1aWQKK2dldHVzZXJzaGVsbAorZ2V0dXRlbnQKK2dldHV0aWQKK2dldHV0bGluZQorZ2V0dXRtcAorZ2V0dXRtcHgKK2dldHV0eGVudAorZ2V0dXR4aWQKK2dldHV0eGxpbmUKK2dldHdkCitnZXR4YXR0cgorZ2xvYgorZ210aW1lCitnbXRpbWVfcgorZ3JhbnRwdAorZ3JvdXBfbWVtYmVyCitoZXJyb3IKK2hzdHJlcnJvcgoraWNvbnYKK2ljb252X29wZW4KK2lmX2ZyZWVuYW1laW5kZXgKK2lmX2luZGV4dG9uYW1lCitpZl9uYW1laW5kZXgKK2lmX25hbWV0b2luZGV4CitpbmRleAoraW5ldF9hZGRyCitpbmV0X2F0b24KK2luZXRfbnRvYQoraW5ldF9udG9wCitpbmV0X3B0b24KK2luaXRncm91cHMKK2lubmV0Z3IKK2lydXNlcm9rCitpc2FzY2lpCitpc2F0dHkKK2lzYmxhbmsKK2lzZ3JhcGgKK2lzaW5mCitpc25hbgoraXNwcmludAoraXNzcGFjZQoraXN3YWxudW0KK2lzd2NudHJsCitpc3djdHlwZQoraXN3cHJpbnQKK2lzd3NwYWNlCitpc3d1cHBlcgoraXN4ZGlnaXQKK2tpbGwKK2tpbGxwZworbGNob3duCitsY2twd2RmCitsZ2V0eGF0dHIKK2xpbmsKK2xpc3R4YXR0cgorbGxpc3R4YXR0cgorbG9jYWx0aW1lCitsb2NhbHRpbWVfcgorbG9ja2YKK2xyYW5kNDgKK2xzZWFyY2gKK2xzZWVrNjQKK2xzZXR4YXR0cgorbHN0YXQKK21hbGxpbmZvCittYWxsb2MKK21ibGVuCittYnJsZW4KK21icnRvd2MKK21ic2luaXQKK21ic3J0b3djcworbWJ0b3djCittZW1hbGlnbgorbWVtY2hyCittZW1jbXAKK21lbWNweQorbWVtbW92ZQorbWVtcGNweQorbWVtcmNocgorbWVtc2V0Citta2RpcgorbWtkaXJhdAorbWtkdGVtcAorbWtmaWZvCitta25vZAorbWtzdGVtcDY0Citta3N0ZW1wCitta3RpbWUKK21sb2NrCittbWFwCittdHJhY2UKK211bmxvY2sKK211bm1hcAorbmFub3NsZWVwCituaWNlCitubF9sYW5naW5mbworbnRwX2FkanRpbWUKK250cF9nZXR0aW1lCitfb2JzdGFja19mcmVlCitvbl9leGl0CitvcGVuNjQKK29wZW4KK29wZW5hdAorb3BlbmRpcgorb3BlbmxvZworcGF0aGNvbmYKK3BpcGUKK3BvbGwKK3BvcGVuCitwb3NpeF9tZW1hbGlnbgorcHJjdGwKK3ByZWFkCitwcmludGYKK19fcHJvZ25hbWUKK3BzZWxlY3QKK3B0aHJlYWRfbXV0ZXhfbG9jaworcHRzbmFtZQorcHV0ZW52CitwdXRncmVudAorcHV0cHdlbnQKK3B1dHNwZW50CitwdXR1dGxpbmUKK3B1dHV0eGxpbmUKK3B1dHdjCitwd3JpdGUKK3Fzb3J0CityYWlzZQorcmFuZAorcmFuZG9tCityYW5kX3IKK3JlYWQKK3JlYWRkaXIKK3JlYWRkaXJfcgorcmVhZGxpbmsKK3JlYWxsb2MKK3JlYWxwYXRoCityZV9jb21wCityZWN2bXNnCityZV9leGVjCityZWdjb21wCityZWdleGVjCityZW1vdmUKK3JlbmFtZQorcmVfc2VhcmNoCitybWRpcgorcnBtYXRjaAorcnJlc3Zwb3J0X2FmCitydXNlcm9rCitydXNlcm9rX2FmCitzYnJrCitzY2FuZGlyCitzY2hlZF9zZXRzY2hlZHVsZXIKK3NjaGVkX3lpZWxkCitfX3NlY3VyZV9nZXRlbnYKK3NlbGVjdAorc2VtY3RsCitzZW1nZXQKK3NlbmRtc2cKK3NldGJ1Zgorc2V0YnVmZmVyCitzZXRlZ2lkCitzZXRlbnYKK3NldGV1aWQKK3NldGdpZAorc2V0Z3JvdXBzCitzZXRob3N0bmFtZQorc2V0aXRpbWVyCitfc2V0am1wCitzZXRqbXAKK3NldGxpbmVidWYKK3NldGxvY2FsZQorc2V0bW50ZW50CitzZXRwZ2lkCitzZXRwZ3JwCitzZXRwcmlvcml0eQorc2V0cmVnaWQKK3NldHJlc2dpZAorc2V0cmVzdWlkCitzZXRyZXVpZAorc2V0cmxpbWl0CitzZXRzaWQKK3NldHNvY2tvcHQKK3NldHRpbWVvZmRheQorc2V0dWlkCitzZXR1dGVudAorc2V0dXR4ZW50CitzZXR2YnVmCitzZXR4YXR0cgorc2dldHNwZW50CitzaG1hdAorc2htY3RsCitzaG1kdAorc2htZ2V0CitzaHV0ZG93bgorc2lnYWN0aW9uCitzaWdhZGRzZXQKK3NpZ2FsdHN0YWNrCitzaWdibG9jaworc2lnZW1wdHlzZXQKK3NpZ2hvbGQKK3NpZ2ludGVycnVwdAorc2lnbmFsCitzaWdwcm9jbWFzaworc2lnc2V0CitzaWdzZXRtYXNrCitzaWdzdGFjaworc2lnc3VzcGVuZAorc2lndmVjCitzbnByaW50Zgorc29ja2V0Citzb2NrZXRwYWlyCitzcHJpbnRmCitzcmFuZDQ4CitzcmFuZAorc3JhbmRvbQorc3NjYW5mCitzdGF0CitzdGF0ZnMKK3N0YXR2ZnMKK3N0aW1lCitzdHBjcHkKK3N0cmNhc2VjbXAKK3N0cmNhc2VzdHIKK3N0cmNocgorc3RyY2hybnVsCitzdHJjbXAKK3N0cmNzcG4KK3N0cmR1cAorc3RyZXJyb3IKK3N0cmVycm9yX3IKK3N0cmZ0aW1lCitzdHJsZW4KK3N0cm5jYXNlY21wCitzdHJuY21wCitzdHJuZHVwCitzdHJubGVuCitzdHJwYnJrCitzdHJwdGltZQorc3RycmNocgorc3Ryc2VwCitzdHJzaWduYWwKK3N0cnNwbgorc3Ryc3RyCitzdHJ0b2QKK3N0cnRvaW1heAorc3RydG9rX3IKK3N0cnRvbAorc3RydG9sbAorc3RydG91bAorc3RydG91bGwKK3N0cnRvdW1heAorc3RydmVyc2NtcAorc3RyeGZybQorc3ltbGluaworc3luYworc3lzY29uZgorc3lzY3RsCitzeXNpbmZvCitzeXNsb2cKK19zeXNfc2lnbGlzdAorc3lzX3NpZ2xpc3QKK3N5c3RlbQordGNnZXRhdHRyCit0Y2dldHBncnAKK3Rjc2V0YXR0cgordGNzZXRwZ3JwCit0aW1lCit0aW1lZ20KK3RpbWVzCit0aW1lem9uZQordG1wbmFtCit0b3dsb3dlcgordG93dXBwZXIKK3RydW5jYXRlCit0c2VhcmNoCit0dHluYW1lCit0enNldAordWxpbWl0Cit1bWFzawordW5hbWUKK3VubGluawordW5zZXRlbnYKK3Vuc2hhcmUKK3VwZHd0bXAKK3VwZHd0bXB4Cit1c2xlZXAKK3VzdGF0Cit1dGltZQordXRpbWVzCit1dG1wbmFtZQordXRtcHhuYW1lCit2YWxsb2MKK3Zhc3ByaW50ZgordmVycngKK3Zmb3JrCit2ZnByaW50ZgordmZzY2FuZgordmhhbmd1cAordnByaW50ZgordnNucHJpbnRmCit2c3ByaW50Zgord2FpdDMKK3dhaXQ0Cit3YWl0cGlkCit3Y3J0b21iCit3Y3Njb2xsCit3Y3NkdXAKK3djc2xlbgord2N0b2IKK3djdG9tYgord2N0eXBlCit3Y3dpZHRoCit3bWVtY2hyCit3bWVtY3B5Cit3bWVtcGNweQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDlhYjUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL2hlYWRlcnMKQEAgLTAsMCArMSwxNTYgQEAKK2Fpby5oCithbGxvY2EuaAorYXJnei5oCithcnBhL2luZXQuaAorYXJwYS9uYW1lc2VyLmgKK2FzbS9ieXRlb3JkZXIuaAorYXNtL2lvY3Rscy5oCithc20vcGFnZS5oCithc20vdHlwZXMuaAorYXNzZXJ0LmgKK2J5dGVzd2FwLmgKK2NyeXB0LmgKK2N0eXBlLmgKK2RpcmVudC5oCitkbGZjbi5oCitlbGYuaAorZW5kaWFuLmgKK2Vyci5oCitlcnJuby5oCitleGVjaW5mby5oCitmY250bC5oCitmZWF0dXJlcy5oCitmbG9hdC5oCitmc3RhYi5oCitmdHcuaAorZ2V0b3B0LmgKK2dsb2IuaAorZ3JwLmgKK2ljb252LmgKK2lmYWRkcnMuaAoraW50dHlwZXMuaAorbGFuZ2luZm8uaAorbGFzdGxvZy5oCitsaWJnZW4uaAorbGliaW50bC5oCitsaW1pdHMuaAorbGludXgvY2FwYWJpbGl0eS5oCitsaW51eC9mZC5oCitsaW51eC9mcy5oCitsaW51eC9oYXllc2VzcC5oCitsaW51eC9oZHJlZy5oCitsaW51eC9pY21wLmgKK2xpbnV4L2luNi5oCitsaW51eC9qb3lzdGljay5oCitsaW51eC9wdHJhY2UuaAorbGludXgvc2VyaWFsLmgKK2xpbnV4L3NvbnlwaS5oCitsaW51eC91bmlzdGQuaAorbGludXgvdXRzbmFtZS5oCitsaW51eC92ZXJzaW9uLmgKK2xvY2FsZS5oCittYWxsb2MuaAorbWF0aC5oCittY2hlY2suaAorbWVtb3J5LmgKK21udGVudC5oCittcXVldWUuaAorbmV0ZGIuaAorbmV0L2lmLmgKK25ldGluZXQvZXRoZXIuaAorbmV0aW5ldC9pbi5oCituZXRpbmV0L2lwNi5oCituZXRpbmV0L2lwLmgKK25ldGluZXQvdGNwLmgKK25ldGluZXQvdWRwLmgKK25ldGlweC9pcHguaAorbmV0L3JvdXRlLmgKK3BhdGhzLmgKK3BvbGwuaAorcHRocmVhZC5oCitwdHkuaAorcHdkLmgKK3JlZ2V4LmgKK3Jlc29sdi5oCitycGMvcnBjLmgKK3JwYy90eXBlcy5oCitzY2hlZC5oCitzY3NpL3Njc2kuaAorc2VhcmNoLmgKK3NlbWFwaG9yZS5oCitzZXRqbXAuaAorc2d0dHkuaAorc2hhZG93LmgKK3NpZ25hbC5oCitzdGRhcmcuaAorc3RkYm9vbC5oCitzdGRjCitzdGRkZWYuaAorc3RkaW50LmgKK3N0ZGlvLmgKK3N0ZGxpYi5oCitzdHJpbmcuaAorc3RyaW5ncy5oCitzdHJvcHRzLmgKK3N5cy9iaXR5cGVzLmgKK3N5cy9jZGVmcy5oCitzeXMvZGlyLmgKK3N5cy9lcG9sbC5oCitzeXNleGl0cy5oCitzeXMvZmNudGwuaAorc3lzL2ZpbGUuaAorc3lzL2ZzdWlkLmgKK3N5cy9pb2N0bC5oCitzeXMvaXBjLmgKK3N5c2xvZy5oCitzeXMvbW1hbi5oCitzeXMvbW91bnQuaAorc3lzL210aW8uaAorc3lzL3BhcmFtLmgKK3N5cy9wb2xsLmgKK3N5cy9wcmN0bC5oCitzeXMvcHRyYWNlLmgKK3N5cy9xdWV1ZS5oCitzeXMvcmVnLmgKK3N5cy9yZXNvdXJjZS5oCitzeXMvc2VsZWN0LmgKK3N5cy9zZW0uaAorc3lzL3NobS5oCitzeXMvc2lnbmFsLmgKK3N5cy9zb2NrZXQuaAorc3lzL3NvY2tldHZhci5oCitzeXMvc291bmRjYXJkLmgKK3N5cy9zdGF0ZnMuaAorc3lzL3N0YXQuaAorc3lzL3N0YXR2ZnMuaAorc3lzL3N0cm9wdHMuaAorc3lzL3N3YXAuaAorc3lzL3N5c2N0bC5oCitzeXMvc3lzaW5mby5oCitzeXMvc3lzbWFjcm9zLmgKK3N5cy90ZXJtaW9zLmgKK3N5cy90aW1lYi5oCitzeXMvdGltZS5oCitzeXMvdGltZXMuaAorc3lzL3RpbWV4LmgKK3N5cy90eXBlcy5oCitzeXMvdWlvLmgKK3N5cy91bi5oCitzeXMvdW5pc3RkLmgKK3N5cy91c2VyLmgKK3N5cy91dHNuYW1lLmgKK3N5cy92ZnMuaAorc3lzL3dhaXQuaAordGVybWlvLmgKK3Rlcm1pb3MuaAordGltZS5oCit0dHllbnQuaAordWxpbWl0LmgKK3VuaXN0ZC5oCit1c3RhdC5oCit1dGltZS5oCit1dG1wLmgKK3V0bXB4LmgKK3ZhbHVlcy5oCit3Y2hhci5oCit3Y3R5cGUuaApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3NpdGVfY29uZmlnL3R5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGJkODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvc2l0ZV9jb25maWcvdHlwZXMKQEAgLTAsMCArMSwyMSBAQAorY2hhcgorY2hhciAqCitkb3VibGUKK2Zsb2F0CitpbnQKK2xvbmcKK2xvbmcgZG91YmxlCitsb25nIGludAorbG9uZyBsb25nCitsb25nIGxvbmcgaW50CitzaG9ydAorc2hvcnQgaW50CitzaWduZWQgY2hhcgordW5zaWduZWQgY2hhcgordW5zaWduZWQgaW50Cit1bnNpZ25lZCBsb25nCit1bnNpZ25lZCBsb25nIGludAordW5zaWduZWQgbG9uZyBsb25nIGludAordW5zaWduZWQgc2hvcnQKK3Vuc2lnbmVkIHNob3J0IGludAordm9pZCAqCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWNvbmZpZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5ZTQxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtY29uZmlnLmluYwpAQCAtMCwwICsxLDE0MiBAQAorREVQRU5EUyArPSAia2Vybi10b29scy1uYXRpdmUiCitpbmhlcml0IGNtbDEKKyMKKyMgU2V0IHRoZSBBUkNIIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB1Q2xpYmMgY29tcGlsYXRpb24uCisjIFJldHVybiB2YWx1ZSBtdXN0IG1hdGNoIG9uZSBvZiB0aGUgYXJjaGl0ZWN0dXJlcyBrbm93biB0byB1Q2xpYmM6CisjIGxpYmMvc3lzZGVwcy8qLyoKKyMKKwordmFsaWRfYXJjaHMgPSAiXAorYWxwaGEgXAorYXJtIFwKK2F2cjMyIFwKK2JmaW4gXAorYzZ4IFwKK2NyaXMgXAorZTEgXAorZnJ2IFwKK2g4MzAwIFwKK2hwcGEgXAoraTM4NiBcCitpOTYwIFwKK2lhNjQgXAorbTY4ayBcCittaWNyb2JsYXplIFwKK21pcHMgXAorbmlvcyBcCituaW9zMiBcCitwb3dlcnBjIFwKK3NoIFwKK3NoNjQgXAorc3BhcmMgXAordjg1MCBcCit2YXggXAoreDg2XzY0IFwKK3h0ZW5zYSBcCisiCitkZWYgbWFwX3VjbGliY19hcmNoKGEsIGQpOgorICAgICIiIlJldHVybiB0aGUgdUNsaWJjIGFyY2hpdGVjdHVyZSBmb3IgdGhlIGdpdmVuIFRBUkdFVF9BUkNILiIiIgorICAgIGltcG9ydCByZQorCisgICAgdmFsaWRfYXJjaHMgPSBkLmdldFZhcigndmFsaWRfYXJjaHMnLCBUcnVlKS5zcGxpdCgpCisKKyAgICBpZiByZS5tYXRjaCgnXihhcm18c2ExMTApLionLCBhKToKKyAgICAgICAgcmV0dXJuICdhcm0nCisgICAgZWxpZiByZS5tYXRjaCgnXihpLjg2fGF0aGxvbikkJywgYSk6CisgICAgICAgIHJldHVybiAnaTM4NicKKyAgICBlbGlmIHJlLm1hdGNoKCdebWlwcy4qJywgYSk6CisgICAgICAgIHJldHVybiAnbWlwcycKKyAgICBlbGlmIHJlLm1hdGNoKCdecGFyaXNjLionLCBhKToKKyAgICAgICAgcmV0dXJuICdocHBhJworICAgIGVsaWYgcmUubWF0Y2goJ15wcGMuKicsIGEpOgorICAgICAgICByZXR1cm4gJ3Bvd2VycGMnCisgICAgZWxpZiByZS5tYXRjaCgnXnMzOTAuKicsIGEpOgorICAgICAgICByZXR1cm4gJ3MzOTAnCisgICAgZWxpZiByZS5tYXRjaCgnXnNoLionLCBhKToKKyAgICAgICAgcmV0dXJuICdzaCcKKyAgICBlbGlmIHJlLm1hdGNoKCdeKHN1bnxzcGFyYykuKicsIGEpOgorICAgICAgICByZXR1cm4gJ3NwYXJjJworICAgIGVsaWYgcmUubWF0Y2goJ154dGVuc2EuKicsIGEpOgorICAgICAgICByZXR1cm4gJ3h0ZW5zYScKKyAgICBlbGlmIGEgaW4gdmFsaWRfYXJjaHM6CisgICAgICAgIHJldHVybiBhCisgICAgZWxzZToKKyAgICAgICAgYmIuZXJyb3IoImNhbm5vdCBtYXAgJyVzJyB0byBhIHVDbGliYyBhcmNoaXRlY3R1cmUiICUgYSkKKworZXhwb3J0IFVDTElCQ19BUkNIID0gIiR7QG1hcF91Y2xpYmNfYXJjaChkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCl9IgorCitkZWYgbWFwX3VjbGliY19hYmkobywgZCk6CisgICAgIiIiUmV0dXJuIHRoZSB1Q2xpYmMgQUJJIGZvciB0aGUgZ2l2ZW4gVEFSR0VUX09TLiIiIgorICAgIGltcG9ydCByZQorCisgICAgYXJjaCA9IGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpCisgICAgaWYgbWFwX3VjbGliY19hcmNoKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSCcsIFRydWUpLCBkKSA9PSAiYXJtIjoKKyAgICAgICAgaWYgcmUubWF0Y2goJy4qZWFiaSQnLCBvKToKKyAgICAgICAgICAgIHJldHVybiAnQVJNX0VBQkknCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ0FSTV9PQUJJJworICAgICMgRklYTUU6IFRoaXMgaXMgaW5hY2N1cmF0ZSEgSGFuZGxlIG8zMiwgbjMyLCBuNjQKKyAgICBlbGlmIHJlLm1hdGNoKCdebWlwcy4qNjQkJywgYXJjaCk6CisgICAgICAgIHJldHVybiAnTUlQU19ONjRfQUJJJworICAgIGVsaWYgcmUubWF0Y2goJ15taXBzLionLCBhcmNoKToKKyAgICAgICAgcmV0dXJuICdNSVBTX08zMl9BQkknCisgICAgcmV0dXJuICIiCisKK2V4cG9ydCBVQ0xJQkNfQUJJID0gIiR7QG1hcF91Y2xpYmNfYWJpKGQuZ2V0VmFyKCdUQVJHRVRfT1MnLCBUcnVlKSwgZCl9IgorCitkZWYgbWFwX3VjbGliY19lbmRpYW4oYSwgZCk6CisgICAgIiIiUmV0dXJuIHRoZSB1Q2xpYmMgZW5kaWFuZXNzIGZvciB0aGUgZ2l2ZW4gVEFSR0VUX0FSQ0guIiIiCisgICAgaW1wb3J0IHJlCisKKyAgICAjIEFsd2F5cyBCRQorICAgIGlmIHJlLm1hdGNoKCdeKGF2cjMyfGUxfGZydnwocGFyaXNjfGhwcGEpfG02OGt8bWljcm9ibGF6ZXxwb3dlcnBjLip8KHNwYXJjfHN1bikuKikkJywgYSk6CisgICAgICAgIHJldHVybiAnQklHJworICAgICMgUG9zc2libHkgQkUKKyAgICBlbGlmIHJlLm1hdGNoKCdeKCgoYXJtfHNhMTEwKS4qZWIpfGg4MzAwLiplYnwocGFyaXNjfGhwcGEpLiplYnxtaXBzfG1pcHM2NHxzaC4qZWJ8eHRlbnNhLiplYikkJywgYSk6CisgICAgICAgIHJldHVybiAnQklHJworICAgIHJldHVybiAnTElUVExFJworCitleHBvcnQgVUNMSUJDX0VORElBTiA9ICIke0BtYXBfdWNsaWJjX2VuZGlhbihkLmdldFZhcignVEFSR0VUX0FSQ0gnLCBUcnVlKSwgZCl9IgorCisjIGludGVybmFsIGhlbHBlcgorZGVmIHVjbGliY19jZmcoZmVhdHVyZSwgZmVhdHVyZXMsIHRva2VucywgY25mLCByZW0pOgorICAgIGlmIHR5cGUodG9rZW5zKSA9PSB0eXBlKCIiKToKKyAgICAgICAgdG9rZW5zID0gW3Rva2Vuc10KKyAgICByZW0uZXh0ZW5kKFsnL15bIyBdKicgKyB0b2tlbiArICdbID1dL2QnIGZvciB0b2tlbiBpbiB0b2tlbnNdKQorICAgIGlmIHR5cGUoZmVhdHVyZXMpID09IHR5cGUoW10pIGFuZCBmZWF0dXJlIGluIGZlYXR1cmVzOgorICAgICAgICBjbmYuZXh0ZW5kKFt0b2tlbiArICc9eScgZm9yIHRva2VuIGluIHRva2Vuc10pCisgICAgZWxzZToKKyAgICAgICAgY25mLmV4dGVuZChbJyMgJyArIHRva2VuICsgJyBpcyBub3Qgc2V0JyBmb3IgdG9rZW4gaW4gdG9rZW5zXSkKKworIyBNYXAgZGlzdHJvIGZlYXR1cmVzIHRvIGNvbmZpZyBzZXR0aW5ncworZGVmIGZlYXR1cmVzX3RvX3VjbGliY19zZXR0aW5ncyhkKToKKyAgICBjbmYsIHJlbSA9IChbXSwgW10pCisgICAgZGlzdHJvX2ZlYXR1cmVzID0gZC5nZXRWYXIoJ0RJU1RST19GRUFUVVJFUycsIFRydWUpLnNwbGl0KCkKKyAgICB1Y2xpYmNfY2ZnKCdpcHY0JywgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0lQVjQnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdpcHY2JywgICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0lQVjYnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdsYXJnZWZpbGUnLCBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX0xGUycsIGNuZiwgcmVtKQorICAgIHVjbGliY19jZmcoJ25scycsICAgICAgIGRpc3Ryb19mZWF0dXJlcywgJ1VDTElCQ19IQVNfTE9DQUxFJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygndGh1bWItaW50ZXJ3b3JrJywgZGlzdHJvX2ZlYXR1cmVzLCdVU0VfQlgnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCd4YXR0cicsICAgICBkaXN0cm9fZmVhdHVyZXMsICdVQ0xJQkNfSEFTX1hBVFRSJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnc3NwJywgICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19TU1AnLCBjbmYsIHJlbSkKKyAgICB1Y2xpYmNfY2ZnKCdhcmdwJywgICAgICAgZGlzdHJvX2ZlYXR1cmVzLCAnVUNMSUJDX0hBU19BUkdQJywgY25mLCByZW0pCisgICAgdWNsaWJjX2NmZygnbGliYy1wb3NpeC1jbGFuZy13Y2hhcicsICBkaXN0cm9fZmVhdHVyZXMsJ1VDTElCQ19IQVNfV0NIQVInLCBjbmYsIHJlbSkKKyAgICByZXR1cm4gIlxuIi5qb2luKGNuZiksICJcbiIuam9pbihyZW0pCisjIFgsIFkgPSAke0BmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCl9CisjIHVuZm9ydHVuYXRlbHkgZG9lc24ndCBzZWVtIHRvIHdvcmsgd2l0aCBiaXRiYWtlLCB3b3JrYXJvdW5kOgorZGVmIGZlYXR1cmVzX3RvX3VjbGliY19jb25mKGQpOgorICAgIGNuZiwgcmVtID0gZmVhdHVyZXNfdG9fdWNsaWJjX3NldHRpbmdzKGQpCisgICAgcmV0dXJuIGNuZgorZGVmIGZlYXR1cmVzX3RvX3VjbGliY19kZWwoZCk6CisgICAgY25mLCByZW0gPSBmZWF0dXJlc190b191Y2xpYmNfc2V0dGluZ3MoZCkKKyAgICByZXR1cm4gcmVtCisKKyMgcmV0dXJucyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNyYyB1cmkgdGhhdCBhcmUgLmNmZyBmaWxlcworZGVmIGZpbmRfY2ZncyhkKToKKyAgICBzb3VyY2VzPXNyY19wYXRjaGVzKGQsIFRydWUpCisgICAgc291cmNlc19saXN0PVtdCisgICAgZm9yIHMgaW4gc291cmNlczoKKyAgICAgICAgaWYgcy5lbmRzd2l0aCgnLmNmZycpOgorICAgICAgICAgICAgc291cmNlc19saXN0LmFwcGVuZChzKQorCisgICAgcmV0dXJuIHNvdXJjZXNfbGlzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTU3N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC5pbmMKQEAgLTAsMCArMSwyMCBAQAorU1JDUkVWID0gImNhMWM3NGQ2N2RkMTE1ZDA1OWE4NzUxNTBlMTBiODU2MGE5YzM1YTgiCisKK1BWID0gIjAuOS4zMytnaXQke1NSQ1BWfSIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vdWNsaWJjLWdpdDoiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vdWNsaWJjLm9yZy91Q2xpYmMuZ2l0O2JyYW5jaD1tYXN0ZXIgXAorICAgICAgICBmaWxlOi8vdUNsaWJjLm1hY2hpbmUgXAorICAgICAgICBmaWxlOi8vdUNsaWJjLmRpc3RybyBcCisgICAgICAgIGZpbGU6Ly9vYnN0YWNrLmNmZyBcCisgICAgICAgIGZpbGU6Ly9sb2NhbGUuY2ZnIFwKKyAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1scm91bnRfdGVzLWZ1bmN0aW9uLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwNi1sZHNvLWxpbWl0ZWQtc3VwcG9ydC1mb3ItT1JJR0lOLWluLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDctbnB0bC1hdGZvcmstSGlkZS1wdGhyZWFkX2F0Zm9yay1pbi1zaGFyZWQtdmVyc2lvbnMucGF0Y2ggXAorIgorUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDEtRGlzYWJsZS1scm91bnRfdGVzLWZ1bmN0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMS1EaXNhYmxlLWxyb3VudF90ZXMtZnVuY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA2ZjE0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDEtRGlzYWJsZS1scm91bnRfdGVzLWZ1bmN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gMTRiODY1YjM0MzhkMGRmMjliNDk2OTE0ODY3OGQ4ZmE4OTQzZTFlZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjQ5OjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMS83XSBEaXNhYmxlIGxyb3VudF90ZXMoKSBmdW5jdGlvbgorCitJdHMgbm90IHVzZWQgYW55d2F5LCBhdm9pZHMgc29tZSBzdHJpY3QgY29tcGlsZXIgd2FybmluZ3MKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyB0ZXN0L21hdGgvbGlibS10ZXN0LmluYyB8IDIgLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3QvbWF0aC9saWJtLXRlc3QuaW5jIGIvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMKK2luZGV4IGY1MGI0OGIuLjZkNzBhOTUgMTAwNjQ0CistLS0gYS90ZXN0L21hdGgvbGlibS10ZXN0LmluYworKysrIGIvdGVzdC9tYXRoL2xpYm0tdGVzdC5pbmMKK0BAIC0zNDcwLDcgKzM0NzAsNiBAQCBsb2diX3Rlc3QgKHZvaWQpCisgfQorIAorIAorLSNpZiAwCisgc3RhdGljIHZvaWQKKyBscm91bmRfdGVzdCAodm9pZCkKKyB7CitAQCAtMzYwNSw3ICszNjA0LDYgQEAgbGxyb3VuZF90ZXN0ICh2b2lkKQorIAorICAgRU5EIChsbHJvdW5kKTsKKyB9CistI2VuZGlmCisgCisgc3RhdGljIHZvaWQKKyBtb2RmX3Rlc3QgKHZvaWQpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDItQWRkLWltcGxlbWVudGF0aW9uLWZvci1jb3B5c2lnbmwtZm9yLXBwYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDI3NWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwMi1BZGQtaW1wbGVtZW50YXRpb24tZm9yLWNvcHlzaWdubC1mb3ItcHBjLnBhdGNoCkBAIC0wLDAgKzEsMTI1IEBACitGcm9tIDVkMzYyMDc0ZTU5NzViMTUwYTM1YmNmYTc3ZWFiMWJmYTRlMzBkZTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1MDo1NiAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvN10gQWRkIGltcGxlbWVudGF0aW9uIGZvciBjb3B5c2lnbmwgZm9yIHBwYworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGxpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2ggfCAgMiArLQorIGxpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jICAgfCA4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgOTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYworCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvTWFrZWZpbGUuYXJjaCBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL01ha2VmaWxlLmFyY2gKK2luZGV4IDRmYmNiMTEuLjdjMDljODcgMTAwNjQ0CistLS0gYS9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoCisrKysgYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9NYWtlZmlsZS5hcmNoCitAQCAtNSw3ICs1LDcgQEAKKyAjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisgIworIAorLUNTUkMteSA6PSBfX3N5c2NhbGxfZXJyb3IuYyBpb2N0bC5jCisrQ1NSQy15IDo9IF9fc3lzY2FsbF9lcnJvci5jIGlvY3RsLmMgY29weXNpZ25sLmMKKyAKKyBTU1JDLXkgOj0gXAorIAlfX2xvbmdqbXAuUyBzZXRqbXAuUyBic2Qtc2V0am1wLlMgYnNkLV9zZXRqbXAuUyBicmsuUyBcCitkaWZmIC0tZ2l0IGEvbGliYy9zeXNkZXBzL2xpbnV4L3Bvd2VycGMvY29weXNpZ25sLmMgYi9saWJjL3N5c2RlcHMvbGludXgvcG93ZXJwYy9jb3B5c2lnbmwuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAwMGY2NTMKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYmMvc3lzZGVwcy9saW51eC9wb3dlcnBjL2NvcHlzaWdubC5jCitAQCAtMCwwICsxLDg5IEBACisrLyogc19jb3B5c2lnbmwuYyAtLSBsb25nIGRvdWJsZSB2ZXJzaW9uIG9mIHNfY29weXNpZ24uYy4KKysgKiBDb252ZXJzaW9uIHRvIGxvbmcgZG91YmxlIGJ5IFVscmljaCBEcmVwcGVyLAorKyAqIEN5Z251cyBTdXBwb3J0LCBkcmVwcGVyQGN5Z251cy5jb20uCisrICovCisrCisrLyoKKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKysgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisrICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKysgKiBpcyBwcmVzZXJ2ZWQuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKy8qCisrICogY29weXNpZ25sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCisrICogY29weXNpZ25sKHgseSkgcmV0dXJucyBhIHZhbHVlIHdpdGggdGhlIG1hZ25pdHVkZSBvZiB4IGFuZAorKyAqIHdpdGggdGhlIHNpZ24gYml0IG9mIHkuCisrICovCisrCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaWYgX19GTE9BVF9XT1JEX09SREVSID09IEJJR19FTkRJQU4KKysKKyt0eXBlZGVmIHVuaW9uCisreworKyAgbG9uZyBkb3VibGUgdmFsdWU7CisrICBzdHJ1Y3QKKysgIHsKKysgICAgaW50IHNpZ25fZXhwb25lbnQ6MTY7CisrICAgIHVuc2lnbmVkIGludCBlbXB0eToxNjsKKysgICAgdWludDMyX3QgbXN3OworKyAgICB1aW50MzJfdCBsc3c7CisrICB9IHBhcnRzOworK30gaWVlZV9sb25nX2RvdWJsZV9zaGFwZV90eXBlOworKworKyNlbmRpZgorKworKyNpZiBfX0ZMT0FUX1dPUkRfT1JERVIgPT0gTElUVExFX0VORElBTgorKworK3R5cGVkZWYgdW5pb24KKyt7CisrICBsb25nIGRvdWJsZSB2YWx1ZTsKKysgIHN0cnVjdAorKyAgeworKyAgICB1aW50MzJfdCBsc3c7CisrICAgIHVpbnQzMl90IG1zdzsKKysgICAgaW50IHNpZ25fZXhwb25lbnQ6MTY7CisrICAgIHVuc2lnbmVkIGludCBlbXB0eToxNjsKKysgIH0gcGFydHM7CisrfSBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGU7CisrCisrI2VuZGlmCisrCisrLyogR2V0IGludCBmcm9tIHRoZSBleHBvbmVudCBvZiBhIGxvbmcgZG91YmxlLiAgKi8KKysKKysjZGVmaW5lIEdFVF9MRE9VQkxFX0VYUChleHAsZCkJCQkJCVwKKytkbyB7CQkJCQkJCQlcCisrICBpZWVlX2xvbmdfZG91YmxlX3NoYXBlX3R5cGUgZ2VfdTsJCQkJXAorKyAgZ2VfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisrICAoZXhwKSA9IGdlX3UucGFydHMuc2lnbl9leHBvbmVudDsJCQkJXAorK30gd2hpbGUgKDApCisrCisrLyogU2V0IGV4cG9uZW50IG9mIGEgbG9uZyBkb3VibGUgZnJvbSBhbiBpbnQuICAqLworKworKyNkZWZpbmUgU0VUX0xET1VCTEVfRVhQKGQsZXhwKQkJCQkJXAorK2RvIHsJCQkJCQkJCVwKKysgIGllZWVfbG9uZ19kb3VibGVfc2hhcGVfdHlwZSBzZV91OwkJCQlcCisrICBzZV91LnZhbHVlID0gKGQpOwkJCQkJCVwKKysgIHNlX3UucGFydHMuc2lnbl9leHBvbmVudCA9IChleHApOwkJCQlcCisrICAoZCkgPSBzZV91LnZhbHVlOwkJCQkJCVwKKyt9IHdoaWxlICgwKQorKworK2xvbmcgZG91YmxlIGNvcHlzaWdubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KTsKKytsaWJjX2hpZGRlbl9wcm90byhjb3B5c2lnbmwpOworKworK2xvbmcgZG91YmxlIGNvcHlzaWdubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQorK3sKKysJdWludDMyX3QgZXMxLGVzMjsKKysJR0VUX0xET1VCTEVfRVhQKGVzMSx4KTsKKysJR0VUX0xET1VCTEVfRVhQKGVzMix5KTsKKysJU0VUX0xET1VCTEVfRVhQKHgsKGVzMSYweDdmZmYpfChlczImMHg4MDAwKSk7CisrICAgICAgICByZXR1cm4geDsKKyt9CisrCisrbGliY19oaWRkZW5fZGVmKGNvcHlzaWdubCk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDMtQWRkLWFyZ3AtaW1wbGVtZW50YXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTQ0ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDAzLUFkZC1hcmdwLWltcGxlbWVudGF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNTgxMSBAQAorRnJvbSBlYWFlODE2ZmIyMjkyOTQ2OWFhNGNjMzQwMmI5MWI1MTJmYzY5NTQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNyb0BzdC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjUzOjM3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMy83XSBBZGQgYXJncCBpbXBsZW1lbnRhdGlvbgorCitBcmdwIGlzIGFuIGFkdmFuY2VkIHN1cHBvcnQgZm9yIHBhcnNpbmcgdW5peC1zdHlsZSBhcmd1bWVudCB2ZWN0b3JzLgorSW4gYWRkaXRpb24gdG8gdGhlIGNvbW1vbiBnZXRvcHQgaW50ZXJmYWNlLCBpdCBwcm92aWRlcyBhdXRvbWF0aWMKK3Jlc3BvbnNlCit0byBgLS1oZWxwJyBhbmQgYC0tdmVyc2lvbicgb3B0aW9ucyBhbmQgdXNlIG9mIGN1c3RvbSBwYXJzZXIgaW4KK2Nvbmp1bmN0aW9uCit3aXRoIGFyZ3AgbmF0aXZlIG9wdGlvbiBwYXJzZXIsIGFtb25nIG90aGVycy4KK0FyZ3Agc3VwcG9ydCBpcyByZXF1aXJlZCBieSBlbGZ1dGlscyBwYWNrYWdlIGFuZCBwcmVsaW5rLgorCitJbiB1Q2xpYmMgYXJncCBmdW5jdGlvbmFsaXRpZXMgaGFzIGJlZW4gbW92ZWQgZnJvbSBDIGxpYnJhcnkgdG8KK2xpYnVhcmdwLnNvCitGdXJ0aGVyIHRoZSBsaWJjLnNvIGxpbmtlciBzY3JpcHQgY29udGFpbnMgYW4gQVNfTkVFREVEIGVudHJ5IHNvIHRoYXQKK2l0IGRvZXNuJ3QgbmVlZCB0byBsaW5rIGxpYnVhcmdwLnNvIGV4cGxpY2l0ZWx5LgorCitTaWduZWQtb2ZmLWJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvQHN0LmNvbT4KK1NpZ25lZC1vZmYtYnk6IEZpbGlwcG8gQXJjaWRpYWNvbm8gPGZpbGlwcG8uYXJjaWRpYWNvbm9Ac3QuY29tPgorU2lnbmVkLW9mZi1ieTogQ2FybWVsbyBBbW9yb3NvIDxjYXJtZWxvLmFtb3Jvc29Ac3QuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBNYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArCisgTWFrZXJ1bGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KKyBSdWxlcy5tYWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMyArCisgZXh0cmEvQ29uZmlncy9Db25maWcuaW4gICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKworIGluY2x1ZGUvYXJncC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTY2ICsrKysrKysrCisgbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaCB8ICAxMzYgKysKKyBsaWJjL3VuaXN0ZC9nZXRvcHQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOSArLQorIGxpYnVhcmdwL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsKKyBsaWJ1YXJncC9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3MyArKworIGxpYnVhcmdwL2FyZ3AtYmEuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI2ICsKKyBsaWJ1YXJncC9hcmdwLWVleHN0LmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArCisgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYyAgICAgICAgICAgICAgICAgICB8ICA0MzkgKysrKysrKworIGxpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmggICAgICAgICAgICAgICAgICAgfCAgMzE0ICsrKysrCisgbGlidWFyZ3AvYXJncC1mcy14aW5sLmMgICAgICAgICAgICAgICAgICAgICB8ICAgNDQgKworIGxpYnVhcmdwL2FyZ3AtaGVscC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAxODgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKworIGxpYnVhcmdwL2FyZ3AtcGFyc2UuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgOTQ5ICsrKysrKysrKysrKysrCisgbGlidWFyZ3AvYXJncC1wdi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjUgKworIGxpYnVhcmdwL2FyZ3AtcHZoLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsKKyBsaWJ1YXJncC9hcmdwLXhpbmwuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzNSArCisgdGVzdC9hcmdwL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKworIHRlc3QvYXJncC9NYWtlZmlsZS5pbiAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsKKyB0ZXN0L2FyZ3AvYXJncC1leDEuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArCisgdGVzdC9hcmdwL2FyZ3AtZXgyLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDUgKworIHRlc3QvYXJncC9hcmdwLWV4My5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTUzICsrKworIHRlc3QvYXJncC9hcmdwLWV4NC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTY3ICsrKworIHRlc3QvYXJncC9hcmdwLXRlc3QuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMjA5ICsrKworIHRlc3QvYXJncC9idWctYXJncDEuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDI2ICsKKyB0ZXN0L2FyZ3AvdHN0LWFyZ3AxLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDExOCArKworIHRlc3QvYXJncC90c3QtYXJncDIuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAxICsrCisgMjkgZmlsZXMgY2hhbmdlZCwgNTQ4MSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2FyZ3AuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL01ha2VmaWxlCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL01ha2VmaWxlLmluCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtYmEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWVleHN0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtZnMteGlubC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtaGVscC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnVhcmdwL2FyZ3AtcGFyc2UuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXB2LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlidWFyZ3AvYXJncC1wdmguYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJ1YXJncC9hcmdwLXhpbmwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvTWFrZWZpbGUKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL01ha2VmaWxlLmluCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9hcmdwLWV4MS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9hcmdwLWV4Mi5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9hcmdwLWV4My5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9hcmdwLWV4NC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC9hcmdwLXRlc3QuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdC9hcmdwL3RzdC1hcmdwMS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvYXJncC90c3QtYXJncDIuYworCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMDQ2NzFhNC4uYTQ1MGFmOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTM5LDYgKzM5LDcgQEAgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlicmVzb2x2L01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlidXRpbC9NYWtlZmlsZS5pbgorIGluY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnB0aHJlYWQvTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcilsaWJydC9NYWtlZmlsZS5pbgorK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKWxpYnVhcmdwL01ha2VmaWxlLmluCisgaW5jbHVkZSAkKHRvcF9zcmNkaXIpbGlidWJhY2t0cmFjZS9NYWtlZmlsZS5pbgorIAorICMgbGFzdCBpbmNsdWRlZCB0byBjYXRjaCBhbGwgdGhlIG9iamVjdHMgYWRkZWQgYnkgb3RoZXJzIChsb2NhbGVzL3RocmVhZHMpCitAQCAtMjYyLDYgKzI2Myw3IEBAIEhFQURFUlNfUk0tICs9IHNndHR5LmgKKyBlbmRpZgorIEhFQURFUlNfUk0tJChIQVZFX1NIQVJFRCkgICAgICAgICAgICAgICAgICAgICs9IGRsZmNuLmggYml0cy9kbGZjbi5oCisgSEVBREVSU19STS0kKFBUSFJFQURTX0RFQlVHX1NVUFBPUlQpICAgICAgICAgKz0gdGhyZWFkX2RiLmgKKytIRUFERVJTX1JNLSQoVUNMSUJDX0hBU19BUkdQKSAgICAgICAgICAgICAgICArPSBhcmdwLmgKKyBIRUFERVJTX1JNLSQoVUNMSUJDX0hBU19CU0RfRVJSKSAgICAgICAgICAgICArPSBlcnIuaAorIEhFQURFUlNfUk0tJChVQ0xJQkNfSEFTX0NSWVBUKSAgICAgICAgICAgICAgICs9IGNyeXB0LmgKKyBIRUFERVJTX1JNLSQoVUNMSUJDX0hBU19FUE9MTCkgICAgICAgICAgICAgICArPSBzeXMvZXBvbGwuaAorQEAgLTM4Niw2ICszODgsMTMgQEAgZWxzZQorIAktJChJTlNUQUxMKSAtbSA3NTUgJCh0b3BfYnVpbGRkaXIpbGliL2xpYmMuc28gJChQUkVGSVgpJChERVZFTF9QUkVGSVgpJChNVUxUSUxJQl9ESVIpLworIGVuZGlmCisgCWVjaG8gIiQoVUJBQ0tUUkFDRV9BU05FRURFRCkiID4+ICQoUFJFRklYKSQoREVWRUxfUFJFRklYKSQoTVVMVElMSUJfRElSKS9saWJjLnNvCisraWZlcSAoJChVQ0xJQkNfSEFTX0FSR1ApLHkpCisrIyBBZGQgdGhlIEFTX05FRURFRCBlbnRyeSBmb3IgbGlidWFyZ3Auc28KKysJaWYgWyAtZiAkKHRvcF9idWlsZGRpcilsaWIvbGliYy5zbyAtYSAtZiAkKFBSRUZJWCkkKFJVTlRJTUVfUFJFRklYKSQoTVVMVElMSUJfRElSKS8kKFNIQVJFRF9NQUpPUk5BTUUpIF0gOyB0aGVuIFwKKysJCWVjaG8gIkdST1VQICggJChVQVJHUF9BU05FRURFRCkgKSIgPj4gJChQUkVGSVgpJChERVZFTF9QUkVGSVgpJChNVUxUSUxJQl9ESVIpL2xpYmMuc287IFwKKysJZmkKKytlbmRpZgorKworIGlmZXEgKCQoVUNMSUJDX0hBU19USFJFQURTKSx5KQorIGlmbmVxICgkKExJTlVYVEhSRUFEU19PTEQpLHkpCisgaWZlcSAoJChIQVJEV0lSRURfQUJTUEFUSCkseSkKK2RpZmYgLS1naXQgYS9NYWtlcnVsZXMgYi9NYWtlcnVsZXMKK2luZGV4IGQ2ZjdlMjQuLmU3MDA1MGQgMTAwNjQ0CistLS0gYS9NYWtlcnVsZXMKKysrKyBiL01ha2VydWxlcworQEAgLTQ4LDYgKzQ4LDcgQEAgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnJlc29sdiwkKGxpYnJlc29sdi1hLXkpICQobGlicmVzb2x2LXNvLXkpKSkKKyAkKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlicnQsJChsaWJydC1hLXkpICQobGlicnQtc28teSkpKQorICQoZXZhbCAkKGNhbGwgYWRkX0lTX0lOX2xpYixsaWJ1dGlsLCQobGlidXRpbC1hLXkpICQobGlidXRpbC1zby15KSkpCisgJChldmFsICQoY2FsbCBhZGRfSVNfSU5fbGliLGxpYnViYWNrdHJhY2UsJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpKSkKKyskKGV2YWwgJChjYWxsIGFkZF9JU19JTl9saWIsbGlidWFyZ3AsJChsaWJ1YXJncC1hLXkpICQobGlidWFyZ3Atc28teSkpKQorIAorIHNoYXJlZF9vYmpzID0gJChsaWJjLXk6Lm89Lm9zKSAkKGxpYmMtc2hhcmVkLXkpICQobGliYy1ub25zaGFyZWQteSkgXAorIAkkKGxpYmNyeXB0LXNvLXkpICQobGliZGwtc28teSkgXAorQEAgLTU1LDEyICs1NiwxMiBAQCBzaGFyZWRfb2JqcyA9ICQobGliYy15Oi5vPS5vcykgJChsaWJjLXNoYXJlZC15KSAkKGxpYmMtbm9uc2hhcmVkLXkpIFwKKyAJJChsaWJwdGhyZWFkLXNvLXkpICQobGlicHRocmVhZC1ub25zaGFyZWQteSkgJChsaWJ0aHJlYWRfZGItc28teSkgXAorIAkkKGxpYnJlc29sdi1zby15KSAkKGxpYnJ0LXNvLXkpIFwKKyAJJChsZHNvLXkpIFwKKy0JJChsaWJ1dGlsLXNvLXkpICQobGlidWJhY2t0cmFjZS1zby15KQorKwkkKGxpYnV0aWwtc28teSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpICQobGlidWFyZ3Atc28teSkKKyAKKyBhcl9vYmpzID0gICQobGliYy15KSAkKGxpYmMtc3RhdGljLXkpICQobGliY3J5cHQtYS15KSBcCisgCSQobGliZGwtYS15KSAkKGxpYmludGwtYS15KSAkKGxpYm0tYS15KSAkKGxpYm5zbC1hLXkpIFwKKyAJJChsaWJwdGhyZWFkLWEteSkgJChsaWJ0aHJlYWRfZGItYS15KSBcCistCSQobGlicmVzb2x2LWEteSkgJChsaWJydC1hLXkpICQobGlidXRpbC1hLXkpICQobGlidWJhY2t0cmFjZS1hLXkpCisrCSQobGlicmVzb2x2LWEteSkgJChsaWJydC1hLXkpICQobGlidXRpbC1hLXkpICQobGlidWJhY2t0cmFjZS1hLXkpICQobGlidWFyZ3AtYS15KQorIGlmZXEgKCQoRE9QSUMpLHkpCisgYXJfb2JqcyA6PSAkKGFyX29ianM6Lm89Lm9zKQorIGVuZGlmCitAQCAtNDk4LDcgKzQ5OSw3IEBAIGZpbGVzLmRlcCA6PSAkKGxpYmMtYS15KSAkKGxpYmMtc28teSkgJChsaWJjLW5vbnNoYXJlZC15KSBcCisgCSQobGlicnQtYS15KSAkKGxpYnJ0LXNvLXkpICAkKGxpYnJlc29sdi1hLXkpICQobGlicmVzb2x2LXNvLXkpIFwKKyAJJChsaWJjcnlwdC1hLXkpICQobGliY3J5cHQtc28teSkgJChsaWJ1dGlsLWEteSkgJChsaWJ1dGlsLXNvLXkpIFwKKyAJJChsaWJuc2wtYS15KSAkKGxpYm5zbC1zby15KSAkKGxkc28teSkgJChsaWJkbC1hLXkpICQobGliZGwtc28teSkgXAorLQkkKGxpYnViYWNrdHJhY2UtYS15KSAkKGxpYnViYWNrdHJhY2Utc28teSkKKysJJChsaWJ1YmFja3RyYWNlLWEteSkgJChsaWJ1YmFja3RyYWNlLXNvLXkpICQobGlidWFyZ3Atc28teSkgJChsaWJ1YXJncC1hLXkpCisgLmRlcGVuZHMuZGVwIDo9IFwKKyAJJChwYXRzdWJzdCAlLnMsJS5zLmRlcCwkKGZpbHRlciAlLnMsJChmaWxlcy5kZXApKSkgXAorIAkkKHBhdHN1YnN0ICUubywlLm8uZGVwLCQoZmlsdGVyICUubywkKGZpbGVzLmRlcCkpKSBcCitkaWZmIC0tZ2l0IGEvUnVsZXMubWFrIGIvUnVsZXMubWFrCitpbmRleCBkZTlmZmIzLi5hMmJhZjU4IDEwMDY0NAorLS0tIGEvUnVsZXMubWFrCisrKysgYi9SdWxlcy5tYWsKK0BAIC02MDIsNiArNjAyLDE5IEBAIGV4cG9ydCBVQkFDS1RSQUNFX0FTTkVFREVEOj0kKHNoZWxsICQoQ0MpIC1XbCwtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwIC1xIC0tIC0tCisgZWxzZQorIGV4cG9ydCBVQkFDS1RSQUNFX0FTTkVFREVEOj0iIgorIGVuZGlmCisraWZlcSAoJChVQ0xJQkNfSEFTX0FSR1ApLHkpCisraWZlcSAoJChIQVJEV0lSRURfQUJTUEFUSCkseSkKKysjIE9ubHkgdXNlZCBpbiBpbnN0YWxsZWQgbGliYy5zbyBsaW5rZXIgc2NyaXB0CisrVUFSR1BfRlVMTF9OQU1FIDo9ICQoc3Vic3QgLy8sLywkKFJVTlRJTUVfUFJFRklYKSQoTVVMVElMSUJfRElSKS9saWJ1YXJncC5zby4kKE1BSk9SX1ZFUlNJT04pKQorK2Vsc2UKKytVQVJHUF9GVUxMX05BTUUgOj0gbGlidWFyZ3Auc28uJChNQUpPUl9WRVJTSU9OKQorK2VuZGlmCisrZXhwb3J0IFVBUkdQX0FTTkVFREVEOj0kKHNoZWxsICQoQ0MpIC1XbCwtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwIC1xIC0tIC0tYXMtbmVlZGVkICYmIFwKKysJZWNobyAiR1JPVVAgKCBBU19ORUVERUQgKCAkKFVBUkdQX0ZVTExfTkFNRSkgKSApIiB8fCBcCisrCWVjaG8gIkdST1VQICggJChVQVJHUF9GVUxMX05BTUUpICkiKQorK2Vsc2UKKytleHBvcnQgVUFSR1BfQVNORUVERUQ6PSIiCisrZW5kaWYKKyBlbmRpZgorIAorICMgQWRkIGEgYnVuY2ggb2YgZXh0cmEgcGVkYW50aWMgYW5ub3lpbmdseSBzdHJpY3QgY2hlY2tzCitkaWZmIC0tZ2l0IGEvZXh0cmEvQ29uZmlncy9Db25maWcuaW4gYi9leHRyYS9Db25maWdzL0NvbmZpZy5pbgoraW5kZXggMjQyZTQ1YS4uYjM2ZDRjOSAxMDA2NDQKKy0tLSBhL2V4dHJhL0NvbmZpZ3MvQ29uZmlnLmluCisrKysgYi9leHRyYS9Db25maWdzL0NvbmZpZy5pbgorQEAgLTE5NDMsNiArMTk0MywyMyBAQCBjb25maWcgVUNMSUJDX0hBU19HTlVfR0VUU1VCT1BUCisgCSAgQW5zd2VyIFkgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBnZXRzdWJvcHQoKS4KKyAKKyAJICBNb3N0IHBlb3BsZSB3aWxsIGFuc3dlciBZLgorKworK2NvbmZpZyBVQ0xJQkNfSEFTX0FSR1AKKysgICAgICAgYm9vbCAiU3VwcG9ydCBhcmdwIChhcyBzdGFuZGFsb25lIHNoYXJlZCBvYmplY3QpIgorKyAgICAgICBkZWZhdWx0IG4KKysgICAgICAgaGVscAorKyAgICAgICAgIEFyZ3AgaXMgYW4gaW50ZXJmYWNlIGZvciBwYXJzaW5nIHVuaXgtc3R5bGUgYXJndW1lbnQgdmVjdG9ycy4gVW5saWtlCisrICAgICAgICAgdGhlIGNvbW1vbiBnZXRvcHQgaW50ZXJmYWNlLCBpdCBwcm92aWRlcyBtYW55IGFkdmFuY2VkIGZlYXR1cmVzIGluCisrICAgICAgICAgYWRkaXRpb24gdG8gcGFyc2luZyBvcHRpb25zLCBzdWNoIGFzIGF1dG9tYXRpYyBvdXRwdXQgaW4gcmVzcG9uc2UgdG8KKysgICAgICAgICBgLS1oZWxwJyBhbmQgYC0tdmVyc2lvbicgb3B0aW9ucy4KKysgICAgICAgICBBIGxpYnJhcnkgY2FuIGV4cG9ydCBhbiBhcmdwIG9wdGlvbiBwYXJzZXIsIHdoaWNoIHByb2dyYW1zIGNhbiBlYXNpbHkKKysgICAgICAgICB1c2UgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVpciBvd24gb3B0aW9uIHBhcnNlci4KKysgICAgICAgICBBIG5ldyBzaGFyZWQgb2JqZWN0ICJsaWJ1YXJncCIgaXMgY3JlYXRlZC4gVGhlICJsaWJjLnNvIiBsaW5rZXIgc2NyaXB0CisrICAgICAgICAgY29udGFpbnMgdGhlIEFTX05FRURFRCBlbnRyeSBmb3IgZ2V0dGluZyB0aGUgbGlidWFyZ3AgbGlua2VkIGF1dG9tYXRpY2FsbHkuCisrICAgICAgICAgQXJncCBzdXBwb3J0IGlzIG5lZWRlZCBieSBlbGZ1dGlscyBsaWJkdy4KKysKKysgICAgICAgICBNb3N0IHBlb3BsZSBjYW4gc2FmZWx5IGFuc3dlciBOLgorKworIGVuZG1lbnUKKyAKKyAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL2FyZ3AuaCBiL2luY2x1ZGUvYXJncC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOWQ1MzcyOAorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS9hcmdwLmgKK0BAIC0wLDAgKzEsNTY2IEBACisrLyogSGllcmFyY2hpYWwgYXJndW1lbnQgcGFyc2luZywgbGF5ZXJlZCBvdmVyIGdldG9wdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4KKysKKysgICBNb2RpZmllZCBmb3IgdUNsaWJjIGJ5OiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysqLworKworKyNpZm5kZWYgX0FSR1BfSAorKyNkZWZpbmUgX0FSR1BfSAorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysKKysjZGVmaW5lIF9fbmVlZF9lcnJvcl90CisrI2luY2x1ZGUgPGVycm5vLmg+CisrCisrI2lmbmRlZiBfX2NvbnN0CisrIyBkZWZpbmUgX19jb25zdCBjb25zdAorKyNlbmRpZgorKworKyNpZm5kZWYgX19USFJPVworKyMgZGVmaW5lIF9fVEhST1cKKysjZW5kaWYKKysjaWZuZGVmIF9fTlRICisrIyBkZWZpbmUgX19OVEgoZmN0KSBmY3QgX19USFJPVworKyNlbmRpZgorKworKyNpZm5kZWYgX19hdHRyaWJ1dGVfXworKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisrIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKysjIGVuZGlmCisrLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcworKyAgIGFyZSBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBHQ0MgMi45NSBhbmQgbGF0ZXIgaGF2ZSAiX19yZXN0cmljdCI7IEM5OSBjb21waWxlcnMgaGF2ZQorKyAgICJyZXN0cmljdCIsIGFuZCAiY29uZmlndXJlIiBtYXkgaGF2ZSBkZWZpbmVkICJyZXN0cmljdCIuICAqLworKyNpZm5kZWYgX19yZXN0cmljdAorKyMgaWYgISAoMiA8IF9fR05VQ19fIHx8ICgyID09IF9fR05VQ19fICYmIDk1IDw9IF9fR05VQ19NSU5PUl9fKSkKKysjICBpZiBkZWZpbmVkIHJlc3RyaWN0IHx8IDE5OTkwMUwgPD0gX19TVERDX1ZFUlNJT05fXworKyMgICBkZWZpbmUgX19yZXN0cmljdCByZXN0cmljdAorKyMgIGVsc2UKKysjICAgZGVmaW5lIF9fcmVzdHJpY3QKKysjICBlbmRpZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fZXJyb3JfdF9kZWZpbmVkCisrdHlwZWRlZiBpbnQgZXJyb3JfdDsKKysjIGRlZmluZSBfX2Vycm9yX3RfZGVmaW5lZAorKyNlbmRpZgorKwwKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrLyogQSBkZXNjcmlwdGlvbiBvZiBhIHBhcnRpY3VsYXIgb3B0aW9uLiAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mCisrICAgdGhlc2UgaXMgcGFzc2VkIGluIHRoZSBPUFRJT05TIGZpZWxkIG9mIGFuIGFyZ3Agc3RydWN0dXJlLiAgRWFjaCBvcHRpb24KKysgICBlbnRyeSBjYW4gY29ycmVzcG9uZCB0byBvbmUgbG9uZyBvcHRpb24gYW5kL29yIG9uZSBzaG9ydCBvcHRpb247IG1vcmUKKysgICBuYW1lcyBmb3IgdGhlIHNhbWUgb3B0aW9uIGNhbiBiZSBhZGRlZCBieSBmb2xsb3dpbmcgYW4gZW50cnkgaW4gYW4gb3B0aW9uCisrICAgYXJyYXkgd2l0aCBvcHRpb25zIGhhdmluZyB0aGUgT1BUSU9OX0FMSUFTIGZsYWcgc2V0LiAgKi8KKytzdHJ1Y3QgYXJncF9vcHRpb24KKyt7CisrICAvKiBUaGUgbG9uZyBvcHRpb24gbmFtZS4gIEZvciBtb3JlIHRoYW4gb25lIG5hbWUgZm9yIHRoZSBzYW1lIG9wdGlvbiwgeW91CisrICAgICBjYW4gdXNlIGZvbGxvd2luZyBvcHRpb25zIHdpdGggdGhlIE9QVElPTl9BTElBUyBmbGFnIHNldC4gICovCisrICBfX2NvbnN0IGNoYXIgKm5hbWU7CisrCisrICAvKiBXaGF0IGtleSBpcyByZXR1cm5lZCBmb3IgdGhpcyBvcHRpb24uICBJZiA+IDAgYW5kIHByaW50YWJsZSwgdGhlbiBpdCdzCisrICAgICBhbHNvIGFjY2VwdGVkIGFzIGEgc2hvcnQgb3B0aW9uLiAgKi8KKysgIGludCBrZXk7CisrCisrICAvKiBJZiBub24tTlVMTCwgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXJndW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKysgICAgIG9wdGlvbiwgd2hpY2ggaXMgcmVxdWlyZWQgdW5sZXNzIHRoZSBPUFRJT05fQVJHX09QVElPTkFMIGZsYWcgaXMgc2V0LiAqLworKyAgX19jb25zdCBjaGFyICphcmc7CisrCisrICAvKiBPUFRJT05fIGZsYWdzLiAgKi8KKysgIGludCBmbGFnczsKKysKKysgIC8qIFRoZSBkb2Mgc3RyaW5nIGZvciB0aGlzIG9wdGlvbi4gIElmIGJvdGggTkFNRSBhbmQgS0VZIGFyZSAwLCBUaGlzIHN0cmluZworKyAgICAgd2lsbCBiZSBwcmludGVkIG91dGRlbnRlZCBmcm9tIHRoZSBub3JtYWwgb3B0aW9uIGNvbHVtbiwgbWFraW5nIGl0CisrICAgICB1c2VmdWwgYXMgYSBncm91cCBoZWFkZXIgKGl0IHdpbGwgYmUgdGhlIGZpcnN0IHRoaW5nIHByaW50ZWQgaW4gaXRzCisrICAgICBncm91cCk7IGluIHRoaXMgdXNhZ2UsIGl0J3MgY29udmVudGlvbmFsIHRvIGVuZCB0aGUgc3RyaW5nIHdpdGggYSBgOicuICAqLworKyAgX19jb25zdCBjaGFyICpkb2M7CisrCisrICAvKiBUaGUgZ3JvdXAgdGhpcyBvcHRpb24gaXMgaW4uICBJbiBhIGxvbmcgaGVscCBtZXNzYWdlLCBvcHRpb25zIGFyZSBzb3J0ZWQKKysgICAgIGFscGhhYmV0aWNhbGx5IHdpdGhpbiBlYWNoIGdyb3VwLCBhbmQgdGhlIGdyb3VwcyBwcmVzZW50ZWQgaW4gdGhlIG9yZGVyCisrICAgICAwLCAxLCAyLCAuLi4sIG4sIC1tLCAuLi4sIC0yLCAtMS4gIEV2ZXJ5IGVudHJ5IGluIGFuIG9wdGlvbnMgYXJyYXkgd2l0aAorKyAgICAgaWYgdGhpcyBmaWVsZCAwIHdpbGwgaW5oZXJpdCB0aGUgZ3JvdXAgbnVtYmVyIG9mIHRoZSBwcmV2aW91cyBlbnRyeSwgb3IKKysgICAgIHplcm8gaWYgaXQncyB0aGUgZmlyc3Qgb25lLCB1bmxlc3MgaXRzIGEgZ3JvdXAgaGVhZGVyIChOQU1FIGFuZCBLRVkgYm90aAorKyAgICAgMCksIGluIHdoaWNoIGNhc2UsIHRoZSBwcmV2aW91cyBlbnRyeSArIDEgaXMgdGhlIGRlZmF1bHQuICBBdXRvbWFnaWMKKysgICAgIG9wdGlvbnMgc3VjaCBhcyAtLWhlbHAgYXJlIHB1dCBpbnRvIGdyb3VwIC0xLiAgKi8KKysgIGludCBncm91cDsKKyt9OworKworKy8qIFRoZSBhcmd1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcHRpb24gaXMgb3B0aW9uYWwuICAqLworKyNkZWZpbmUgT1BUSU9OX0FSR19PUFRJT05BTAkweDEKKysKKysvKiBUaGlzIG9wdGlvbiBpc24ndCBkaXNwbGF5ZWQgaW4gYW55IGhlbHAgbWVzc2FnZXMuICAqLworKyNkZWZpbmUgT1BUSU9OX0hJRERFTgkgICAgICAgCTB4MgorKworKy8qIFRoaXMgb3B0aW9uIGlzIGFuIGFsaWFzIGZvciB0aGUgY2xvc2VzdCBwcmV2aW91cyBub24tYWxpYXMgb3B0aW9uLiAgVGhpcworKyAgIG1lYW5zIHRoYXQgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgaGVscCBlbnRyeSwgYW5kIHdpbGwgaW5oZXJpdAorKyAgIGZpZWxkcyBvdGhlciB0aGFuIE5BTUUgYW5kIEtFWSBmcm9tIHRoZSBhbGlhc2VkIG9wdGlvbi4gICovCisrI2RlZmluZSBPUFRJT05fQUxJQVMJCTB4NAorKworKy8qIFRoaXMgb3B0aW9uIGlzbid0IGFjdHVhbGx5IGFuIG9wdGlvbiAoYW5kIHNvIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZQorKyAgIGFjdHVhbCBvcHRpb24gcGFyc2VyKSwgYnV0IHJhdGhlciBhbiBhcmJpdHJhcnkgcGllY2Ugb2YgZG9jdW1lbnRhdGlvbiB0aGF0CisrICAgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBtdWNoIHRoZSBzYW1lIG1hbm5lciBhcyB0aGUgb3B0aW9ucy4gIElmIHRoaXMgZmxhZworKyAgIGlzIHNldCwgdGhlbiB0aGUgb3B0aW9uIE5BTUUgZmllbGQgaXMgZGlzcGxheWVkIHVubW9kaWZpZWQgKGUuZy4sIG5vIGAtLScKKysgICBwcmVmaXggaXMgYWRkZWQpIGF0IHRoZSBsZWZ0LW1hcmdpbiAod2hlcmUgYSAqc2hvcnQqIG9wdGlvbiB3b3VsZCBub3JtYWxseQorKyAgIGJlIGRpc3BsYXllZCksIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgaW4gdGhlIG5vcm1hbCBwbGFjZS4gIEZvcgorKyAgIHB1cnBvc2VzIG9mIHNvcnRpbmcsIGFueSBsZWFkaW5nIHdoaXRlc3BhY2UgYW5kIHB1bmN0dWF0aW9uIGlzIGlnbm9yZWQsCisrICAgZXhjZXB0IHRoYXQgaWYgdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBub3QgYC0nLCB0aGlzIGVudHJ5CisrICAgaXMgZGlzcGxheWVkIGFmdGVyIGFsbCBvcHRpb25zIChhbmQgT1BUSU9OX0RPQyBlbnRyaWVzIHdpdGggYSBsZWFkaW5nIGAtJykKKysgICBpbiB0aGUgc2FtZSBncm91cC4gICovCisrI2RlZmluZSBPUFRJT05fRE9DCQkweDgKKysKKysvKiBUaGlzIG9wdGlvbiBzaG91bGRuJ3QgYmUgaW5jbHVkZWQgaW4gYGxvbmcnIHVzYWdlIG1lc3NhZ2VzIChidXQgaXMgc3RpbGwKKysgICBpbmNsdWRlZCBpbiBoZWxwIG1lc3NhZ2VzKS4gIFRoaXMgaXMgbWFpbmx5IGludGVuZGVkIGZvciBvcHRpb25zIHRoYXQgYXJlCisrICAgY29tcGxldGVseSBkb2N1bWVudGVkIGluIGFuIGFyZ3AncyBBUkdTX0RPQyBmaWVsZCwgaW4gd2hpY2ggY2FzZSBpbmNsdWRpbmcKKysgICB0aGUgb3B0aW9uIGluIHRoZSBnZW5lcmljIHVzYWdlIGxpc3Qgd291bGQgYmUgcmVkdW5kYW50LiAgRm9yIGluc3RhbmNlLAorKyAgIGlmIEFSR1NfRE9DIGlzICJGT08gQkFSXG4teCBCTEFIIiwgYW5kIHRoZSBgLXgnIG9wdGlvbidzIHB1cnBvc2UgaXMgdG8KKysgICBkaXN0aW5ndWlzaCB0aGVzZSB0d28gY2FzZXMsIC14IHNob3VsZCBwcm9iYWJseSBiZSBtYXJrZWQKKysgICBPUFRJT05fTk9fVVNBR0UuICAqLworKyNkZWZpbmUgT1BUSU9OX05PX1VTQUdFCQkweDEwCisrDAorK3N0cnVjdCBhcmdwOwkJCS8qIGZ3ZCBkZWNsYXJlIHRoaXMgdHlwZSAqLworK3N0cnVjdCBhcmdwX3N0YXRlOwkJLyogIiAqLworK3N0cnVjdCBhcmdwX2NoaWxkOwkJLyogIiAqLworKworKy8qIFRoZSB0eXBlIG9mIGEgcG9pbnRlciB0byBhbiBhcmdwIHBhcnNpbmcgZnVuY3Rpb24uICAqLworK3R5cGVkZWYgZXJyb3JfdCAoKmFyZ3BfcGFyc2VyX3QpIChpbnQgX19rZXksIGNoYXIgKl9fYXJnLAorKwkJCQkgIHN0cnVjdCBhcmdwX3N0YXRlICpfX3N0YXRlKTsKKysKKysvKiBXaGF0IHRvIHJldHVybiBmb3IgdW5yZWNvZ25pemVkIGtleXMuICBGb3Igc3BlY2lhbCBBUkdQX0tFWV8ga2V5cywgc3VjaAorKyAgIHJldHVybnMgd2lsbCBzaW1wbHkgYmUgaWdub3JlZC4gIEZvciB1c2VyIGtleXMsIHRoaXMgZXJyb3Igd2lsbCBiZSB0dXJuZWQKKysgICBpbnRvIEVJTlZBTCAoaWYgdGhlIGNhbGwgdG8gYXJncF9wYXJzZSBpcyBzdWNoIHRoYXQgZXJyb3JzIGFyZSBwcm9wYWdhdGVkCisrICAgYmFjayB0byB0aGUgdXNlciBpbnN0ZWFkIG9mIGV4aXRpbmcpOyByZXR1cm5pbmcgRUlOVkFMIGl0c2VsZiB3b3VsZCByZXN1bHQKKysgICBpbiBhbiBpbW1lZGlhdGUgc3RvcCB0byBwYXJzaW5nIGluICphbGwqIGNhc2VzLiAgKi8KKysjZGVmaW5lIEFSR1BfRVJSX1VOS05PV04JRTJCSUcgLyogSHVyZCBzaG91bGQgbmV2ZXIgbmVlZCBFMkJJRy4gIFhYWCAqLworKworKy8qIFNwZWNpYWwgdmFsdWVzIGZvciB0aGUgS0VZIGFyZ3VtZW50IHRvIGFuIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb24uCisrICAgQVJHUF9FUlJfVU5LTk9XTiBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhleSBhcmVuJ3QgdW5kZXJzdG9vZC4KKysKKysgICBUaGUgc2VxdWVuY2Ugb2Yga2V5cyB0byBhIHBhcnNpbmcgZnVuY3Rpb24gaXMgZWl0aGVyICh3aGVyZSBlYWNoCisrICAgdXBwZXJjYXNlZCB3b3JkIHNob3VsZCBiZSBwcmVmaXhlZCBieSBgQVJHUF9LRVlfJyBhbmQgb3B0IGlzIGEgdXNlciBrZXkpOgorKworKyAgICAgICBJTklUIG9wdC4uLiBOT19BUkdTIEVORCBTVUNDRVNTICAtLSBObyBub24tb3B0aW9uIGFyZ3VtZW50cyBhdCBhbGwKKysgICBvciAgSU5JVCAob3B0IHwgQVJHKS4uLiBFTkQgU1VDQ0VTUyAgLS0gQWxsIG5vbi1vcHRpb24gYXJncyBwYXJzZWQKKysgICBvciAgSU5JVCAob3B0IHwgQVJHKS4uLiBTVUNDRVNTICAgICAgLS0gU29tZSBub24tb3B0aW9uIGFyZyB1bnJlY29nbml6ZWQKKysKKysgICBUaGUgdGhpcmQgY2FzZSBpcyB3aGVyZSBldmVyeSBwYXJzZXIgcmV0dXJuZWQgQVJHUF9LRVlfVU5LTk9XTiBmb3IgYW4KKysgICBhcmd1bWVudCwgaW4gd2hpY2ggY2FzZSBwYXJzaW5nIHN0b3BzIGF0IHRoYXQgYXJndW1lbnQgKHJldHVybmluZyB0aGUKKysgICB1bnBhcnNlZCBhcmd1bWVudHMgdG8gdGhlIGNhbGxlciBvZiBhcmdwX3BhcnNlIGlmIHJlcXVlc3RlZCwgb3Igc3RvcHBpbmcKKysgICB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgbm90KS4KKysKKysgICBJZiBhbiBlcnJvciBvY2N1cnMgKGVpdGhlciBkZXRlY3RlZCBieSBhcmdwLCBvciBiZWNhdXNlIHRoZSBwYXJzaW5nCisrICAgZnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3IgdmFsdWUpLCB0aGVuIHRoZSBwYXJzZXIgaXMgY2FsbGVkIHdpdGgKKysgICBBUkdQX0tFWV9FUlJPUiwgYW5kIG5vIGZ1cnRoZXIgY2FsbHMgYXJlIG1hZGUuICAqLworKworKy8qIFRoaXMgaXMgbm90IGFuIG9wdGlvbiBhdCBhbGwsIGJ1dCByYXRoZXIgYSBjb21tYW5kIGxpbmUgYXJndW1lbnQuICBJZiBhCisrICAgcGFyc2VyIHJlY2VpdmluZyB0aGlzIGtleSByZXR1cm5zIHN1Y2Nlc3MsIHRoZSBmYWN0IGlzIHJlY29yZGVkLCBhbmQgdGhlCisrICAgQVJHUF9LRVlfTk9fQVJHUyBjYXNlIHdvbid0IGJlIHVzZWQuICBIT1dFVkVSLCBpZiB3aGlsZSBwcm9jZXNzaW5nIHRoZQorKyAgIGFyZ3VtZW50LCBhIHBhcnNlciBmdW5jdGlvbiBkZWNyZW1lbnRzIHRoZSBORVhUIGZpZWxkIG9mIHRoZSBzdGF0ZSBpdCdzCisrICAgcGFzc2VkLCB0aGUgb3B0aW9uIHdvbid0IGJlIGNvbnNpZGVyZWQgcHJvY2Vzc2VkOyB0aGlzIGlzIHRvIGFsbG93IHlvdSB0bworKyAgIGFjdHVhbGx5IG1vZGlmeSB0aGUgYXJndW1lbnQgKHBlcmhhcHMgaW50byBhbiBvcHRpb24pLCBhbmQgaGF2ZSBpdAorKyAgIHByb2Nlc3NlZCBhZ2Fpbi4gICovCisrI2RlZmluZSBBUkdQX0tFWV9BUkcJCTAKKysvKiBUaGVyZSBhcmUgcmVtYWluaW5nIGFyZ3VtZW50cyBub3QgcGFyc2VkIGJ5IGFueSBwYXJzZXIsIHdoaWNoIG1heSBiZSBmb3VuZAorKyAgIHN0YXJ0aW5nIGF0IChTVEFURS0+YXJndiArIFNUQVRFLT5uZXh0KS4gIElmIHN1Y2Nlc3MgaXMgcmV0dXJuZWQsIGJ1dAorKyAgIFNUQVRFLT5uZXh0IGxlZnQgdW50b3VjaGVkLCBpdCdzIGFzc3VtZWQgdGhhdCBhbGwgYXJndW1lbnRzIHdlcmUgY29uc3VtZSwKKysgICBvdGhlcndpc2UsIHRoZSBwYXJzZXIgc2hvdWxkIGFkanVzdCBTVEFURS0+bmV4dCB0byByZWZsZWN0IGFueSBhcmd1bWVudHMKKysgICBjb25zdW1lZC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9BUkdTCQkweDEwMDAwMDYKKysvKiBUaGVyZSBhcmUgbm8gbW9yZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGF0IGFsbC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9FTkQJCTB4MTAwMDAwMQorKy8qIEJlY2F1c2UgaXQncyBjb21tb24gdG8gd2FudCB0byBkbyBzb21lIHNwZWNpYWwgcHJvY2Vzc2luZyBpZiB0aGVyZSBhcmVuJ3QKKysgICBhbnkgbm9uLW9wdGlvbiBhcmdzLCB1c2VyIHBhcnNlcnMgYXJlIGNhbGxlZCB3aXRoIHRoaXMga2V5IGlmIHRoZXkgZGlkbid0CisrICAgc3VjY2Vzc2Z1bGx5IHByb2Nlc3MgYW55IG5vbi1vcHRpb24gYXJndW1lbnRzLiAgQ2FsbGVkIGp1c3QgYmVmb3JlCisrICAgQVJHUF9LRVlfRU5EICh3aGVyZSBtb3JlIGdlbmVyYWwgdmFsaWRpdHkgY2hlY2tzIG9uIHByZXZpb3VzbHkgcGFyc2VkCisrICAgYXJndW1lbnRzIGNhbiB0YWtlIHBsYWNlKS4gICovCisrI2RlZmluZSBBUkdQX0tFWV9OT19BUkdTCTB4MTAwMDAwMgorKy8qIFBhc3NlZCBpbiBiZWZvcmUgYW55IHBhcnNpbmcgaXMgZG9uZS4gIEFmdGVyd2FyZHMsIHRoZSB2YWx1ZXMgb2YgZWFjaAorKyAgIGVsZW1lbnQgb2YgdGhlIENISUxEX0lOUFVUIGZpZWxkLCBpZiBhbnksIGluIHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgaXMKKysgICBjb3BpZWQgdG8gZWFjaCBjaGlsZCdzIHN0YXRlIHRvIGJlIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBJTlBVVCBmaWVsZC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9JTklUCQkweDEwMDAwMDMKKysvKiBVc2UgYWZ0ZXIgYWxsIG90aGVyIGtleXMsIGluY2x1ZGluZyBTVUNDRVNTICYgRU5ELiAgKi8KKysjZGVmaW5lIEFSR1BfS0VZX0ZJTkkJCTB4MTAwMDAwNworKy8qIFBhc3NlZCBpbiB3aGVuIHBhcnNpbmcgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIGNvbXBsZXRlZCAoZXZlbiBpZiB0aGVyZSBhcmUKKysgICBzdGlsbCBhcmd1bWVudHMgcmVtYWluaW5nKS4gICovCisrI2RlZmluZSBBUkdQX0tFWV9TVUNDRVNTCTB4MTAwMDAwNAorKy8qIFBhc3NlZCBpbiBpZiBhbiBlcnJvciBvY2N1cnMuICAqLworKyNkZWZpbmUgQVJHUF9LRVlfRVJST1IJCTB4MTAwMDAwNQorKworKy8qIEFuIGFyZ3Agc3RydWN0dXJlIGNvbnRhaW5zIGEgc2V0IG9mIG9wdGlvbnMgZGVjbGFyYXRpb25zLCBhIGZ1bmN0aW9uIHRvCisrICAgZGVhbCB3aXRoIHBhcnNpbmcgb25lLCBkb2N1bWVudGF0aW9uIHN0cmluZywgYSBwb3NzaWJsZSB2ZWN0b3Igb2YgY2hpbGQKKysgICBhcmdwJ3MsIGFuZCBwZXJoYXBzIGEgZnVuY3Rpb24gdG8gZmlsdGVyIGhlbHAgb3V0cHV0LiAgV2hlbiBhY3R1YWxseQorKyAgIHBhcnNpbmcgb3B0aW9ucywgZ2V0b3B0IGlzIGNhbGxlZCB3aXRoIHRoZSB1bmlvbiBvZiBhbGwgdGhlIGFyZ3AKKysgICBzdHJ1Y3R1cmVzIGNoYWluZWQgdG9nZXRoZXIgdGhyb3VnaCB0aGVpciBDSElMRCBwb2ludGVycywgd2l0aCBjb25mbGljdHMKKysgICBiZWluZyByZXNvbHZlZCBpbiBmYXZvciBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiB0aGUgY2hhaW4uICAqLworK3N0cnVjdCBhcmdwCisreworKyAgLyogQW4gYXJyYXkgb2YgYXJncF9vcHRpb24gc3RydWN0dXJlcywgdGVybWluYXRlZCBieSBhbiBlbnRyeSB3aXRoIGJvdGgKKysgICAgIE5BTUUgYW5kIEtFWSBoYXZpbmcgYSB2YWx1ZSBvZiAwLiAgKi8KKysgIF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHRpb25zOworKworKyAgLyogV2hhdCB0byBkbyB3aXRoIGFuIG9wdGlvbiBmcm9tIHRoaXMgc3RydWN0dXJlLiAgS0VZIGlzIHRoZSBrZXkKKysgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3B0aW9uLCBhbmQgQVJHIGlzIGFueSBhc3NvY2lhdGVkIGFyZ3VtZW50IChOVUxMIGlmCisrICAgICBub25lIHdhcyBzdXBwbGllZCkuICBJZiBLRVkgaXNuJ3QgdW5kZXJzdG9vZCwgQVJHUF9FUlJfVU5LTk9XTiBzaG91bGQgYmUKKysgICAgIHJldHVybmVkLiAgSWYgYSBub24temVybywgbm9uLUFSR1BfRVJSX1VOS05PV04gdmFsdWUgaXMgcmV0dXJuZWQsIHRoZW4KKysgICAgIHBhcnNpbmcgaXMgc3RvcHBlZCBpbW1lZGlhdGVseSwgYW5kIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQgZnJvbQorKyAgICAgYXJncF9wYXJzZSgpLiAgRm9yIHNwZWNpYWwgKG5vbi11c2VyLXN1cHBsaWVkKSB2YWx1ZXMgb2YgS0VZLCBzZWUgdGhlCisrICAgICBBUkdQX0tFWV8gZGVmaW5pdGlvbnMgYmVsb3cuICAqLworKyAgYXJncF9wYXJzZXJfdCBwYXJzZXI7CisrCisrICAvKiBBIHN0cmluZyBkZXNjcmliaW5nIHdoYXQgb3RoZXIgYXJndW1lbnRzIGFyZSB3YW50ZWQgYnkgdGhpcyBwcm9ncmFtLiAgSXQKKysgICAgIGlzIG9ubHkgdXNlZCBieSBhcmdwX3VzYWdlIHRvIHByaW50IHRoZSBgVXNhZ2U6JyBtZXNzYWdlLiAgSWYgaXQKKysgICAgIGNvbnRhaW5zIG5ld2xpbmVzLCB0aGUgc3RyaW5ncyBzZXBhcmF0ZWQgYnkgdGhlbSBhcmUgY29uc2lkZXJlZAorKyAgICAgYWx0ZXJuYXRpdmUgdXNhZ2UgcGF0dGVybnMsIGFuZCBwcmludGVkIG9uIHNlcGFyYXRlIGxpbmVzIChsaW5lcyBhZnRlcgorKyAgICAgdGhlIGZpcnN0IGFyZSBwcmVmaXggYnkgYCAgb3I6ICcgaW5zdGVhZCBvZiBgVXNhZ2U6JykuICAqLworKyAgX19jb25zdCBjaGFyICphcmdzX2RvYzsKKysKKysgIC8qIElmIG5vbi1OVUxMLCBhIHN0cmluZyBjb250YWluaW5nIGV4dHJhIHRleHQgdG8gYmUgcHJpbnRlZCBiZWZvcmUgYW5kCisrICAgICBhZnRlciB0aGUgb3B0aW9ucyBpbiBhIGxvbmcgaGVscCBtZXNzYWdlIChzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCB0YWIKKysgICAgIGBcdicgY2hhcmFjdGVyKS4gICovCisrICBfX2NvbnN0IGNoYXIgKmRvYzsKKysKKysgIC8qIEEgdmVjdG9yIG9mIGFyZ3BfY2hpbGRyZW4gc3RydWN0dXJlcywgdGVybWluYXRlZCBieSBhIG1lbWJlciB3aXRoIGEgMAorKyAgICAgYXJncCBmaWVsZCwgcG9pbnRpbmcgdG8gY2hpbGQgYXJncHMgc2hvdWxkIGJlIHBhcnNlZCB3aXRoIHRoaXMgb25lLiAgQW55CisrICAgICBjb25mbGljdHMgYXJlIHJlc29sdmVkIGluIGZhdm9yIG9mIHRoaXMgYXJncCwgb3IgZWFybHkgYXJncHMgaW4gdGhlCisrICAgICBDSElMRFJFTiBsaXN0LiAgVGhpcyBmaWVsZCBpcyB1c2VmdWwgaWYgeW91IHVzZSBsaWJyYXJpZXMgdGhhdCBzdXBwbHkKKysgICAgIHRoZWlyIG93biBhcmdwIHN0cnVjdHVyZSwgd2hpY2ggeW91IHdhbnQgdG8gdXNlIGluIGNvbmp1bmN0aW9uIHdpdGggeW91cgorKyAgICAgb3duLiAgKi8KKysgIF9fY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkcmVuOworKworKyAgLyogSWYgbm9uLXplcm8sIHRoaXMgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdG8gZmlsdGVyIHRoZSBvdXRwdXQgb2YgaGVscAorKyAgICAgbWVzc2FnZXMuICBLRVkgaXMgZWl0aGVyIGEga2V5IGZyb20gYW4gb3B0aW9uLCBpbiB3aGljaCBjYXNlIFRFWFQgaXMKKysgICAgIHRoYXQgb3B0aW9uJ3MgaGVscCB0ZXh0LCBvciBhIHNwZWNpYWwga2V5IGZyb20gdGhlIEFSR1BfS0VZX0hFTFBfCisrICAgICBkZWZpbmVzLCBiZWxvdywgZGVzY3JpYmluZyB3aGljaCBvdGhlciBoZWxwIHRleHQgVEVYVCBpcy4gIFRoZSBmdW5jdGlvbgorKyAgICAgc2hvdWxkIHJldHVybiBlaXRoZXIgVEVYVCwgaWYgaXQgc2hvdWxkIGJlIHVzZWQgYXMtaXMsIGEgcmVwbGFjZW1lbnQKKysgICAgIHN0cmluZywgd2hpY2ggc2hvdWxkIGJlIG1hbGxvY2VkLCBhbmQgd2lsbCBiZSBmcmVlZCBieSBhcmdwLCBvciBOVUxMLAorKyAgICAgbWVhbmluZyBgcHJpbnQgbm90aGluZycuICBUaGUgdmFsdWUgZm9yIFRFWFQgaXMgKmFmdGVyKiBhbnkgdHJhbnNsYXRpb24KKysgICAgIGhhcyBiZWVuIGRvbmUsIHNvIGlmIGFueSBvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBhbHNvIG5lZWRzIHRyYW5zbGF0aW9uLAorKyAgICAgdGhhdCBzaG91bGQgYmUgZG9uZSBieSB0aGUgZmlsdGVyIGZ1bmN0aW9uLiAgSU5QVVQgaXMgZWl0aGVyIHRoZSBpbnB1dAorKyAgICAgc3VwcGxpZWQgdG8gYXJncF9wYXJzZSwgb3IgTlVMTCwgaWYgYXJncF9oZWxwIHdhcyBjYWxsZWQgZGlyZWN0bHkuICAqLworKyAgY2hhciAqKCpoZWxwX2ZpbHRlcikgKGludCBfX2tleSwgX19jb25zdCBjaGFyICpfX3RleHQsIHZvaWQgKl9faW5wdXQpOworKworKyAgLyogSWYgbm9uLXplcm8gdGhlIHN0cmluZ3MgdXNlZCBpbiB0aGUgYXJncCBsaWJyYXJ5IGFyZSB0cmFuc2xhdGVkIHVzaW5nCisrICAgICB0aGUgZG9tYWluIGRlc2NyaWJlZCBieSB0aGlzIHN0cmluZy4gIE90aGVyd2lzZSB0aGUgY3VycmVudGx5IGluc3RhbGxlZAorKyAgICAgZGVmYXVsdCBkb21haW4gaXMgdXNlZC4gICovCisrICBjb25zdCBjaGFyICphcmdwX2RvbWFpbjsKKyt9OworKworKy8qIFBvc3NpYmxlIEtFWSBhcmd1bWVudHMgdG8gYSBoZWxwIGZpbHRlciBmdW5jdGlvbi4gICovCisrI2RlZmluZSBBUkdQX0tFWV9IRUxQX1BSRV9ET0MJMHgyMDAwMDAxIC8qIEhlbHAgdGV4dCBwcmVjZWVkaW5nIG9wdGlvbnMuICovCisrI2RlZmluZSBBUkdQX0tFWV9IRUxQX1BPU1RfRE9DCTB4MjAwMDAwMiAvKiBIZWxwIHRleHQgZm9sbG93aW5nIG9wdGlvbnMuICovCisrI2RlZmluZSBBUkdQX0tFWV9IRUxQX0hFQURFUgkweDIwMDAwMDMgLyogT3B0aW9uIGhlYWRlciBzdHJpbmcuICovCisrI2RlZmluZSBBUkdQX0tFWV9IRUxQX0VYVFJBCTB4MjAwMDAwNCAvKiBBZnRlciBhbGwgb3RoZXIgZG9jdW1lbnRhdGlvbjsKKysJCQkJCSAgICAgVEVYVCBpcyBOVUxMIGZvciB0aGlzIGtleS4gICovCisrLyogRXhwbGFuYXRvcnkgbm90ZSBlbWl0dGVkIHdoZW4gZHVwbGljYXRlIG9wdGlvbiBhcmd1bWVudHMgaGF2ZSBiZWVuCisrICAgc3VwcHJlc3NlZC4gICovCisrI2RlZmluZSBBUkdQX0tFWV9IRUxQX0RVUF9BUkdTX05PVEUgMHgyMDAwMDA1CisrI2RlZmluZSBBUkdQX0tFWV9IRUxQX0FSR1NfRE9DCTB4MjAwMDAwNiAvKiBBcmd1bWVudCBkb2Mgc3RyaW5nLiAgKi8KKysMCisrLyogV2hlbiBhbiBhcmdwIGhhcyBhIG5vbi16ZXJvIENISUxEUkVOIGZpZWxkLCBpdCBzaG91bGQgcG9pbnQgdG8gYSB2ZWN0b3Igb2YKKysgICBhcmdwX2NoaWxkIHN0cnVjdHVyZXMsIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgc3Vic2lkaWFyeSBhcmdwLiAgKi8KKytzdHJ1Y3QgYXJncF9jaGlsZAorK3sKKysgIC8qIFRoZSBjaGlsZCBwYXJzZXIuICAqLworKyAgX19jb25zdCBzdHJ1Y3QgYXJncCAqYXJncDsKKysKKysgIC8qIEZsYWdzIGZvciB0aGlzIGNoaWxkLiAgKi8KKysgIGludCBmbGFnczsKKysKKysgIC8qIElmIG5vbi16ZXJvLCBhbiBvcHRpb25hbCBoZWFkZXIgdG8gYmUgcHJpbnRlZCBpbiBoZWxwIG91dHB1dCBiZWZvcmUgdGhlCisrICAgICBjaGlsZCBvcHRpb25zLiAgQXMgYSBzaWRlLWVmZmVjdCwgYSBub24temVybyB2YWx1ZSBmb3JjZXMgdGhlIGNoaWxkCisrICAgICBvcHRpb25zIHRvIGJlIGdyb3VwZWQgdG9nZXRoZXI7IHRvIGFjaGlldmUgdGhpcyBlZmZlY3Qgd2l0aG91dCBhY3R1YWxseQorKyAgICAgcHJpbnRpbmcgYSBoZWFkZXIgc3RyaW5nLCB1c2UgYSB2YWx1ZSBvZiAiIi4gICovCisrICBfX2NvbnN0IGNoYXIgKmhlYWRlcjsKKysKKysgIC8qIFdoZXJlIHRvIGdyb3VwIHRoZSBjaGlsZCBvcHRpb25zIHJlbGF0aXZlIHRvIHRoZSBvdGhlciAoYGNvbnNvbGlkYXRlZCcpCisrICAgICBvcHRpb25zIGluIHRoZSBwYXJlbnQgYXJncDsgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIEdST1VQIGZpZWxkCisrICAgICBpbiBhcmdwX29wdGlvbiBzdHJ1Y3RzLCBidXQgYWxsIGNoaWxkLWdyb3VwaW5ncyBmb2xsb3cgcGFyZW50IG9wdGlvbnMgYXQKKysgICAgIGEgcGFydGljdWxhciBncm91cCBsZXZlbC4gIElmIGJvdGggdGhpcyBmaWVsZCBhbmQgSEVBREVSIGFyZSB6ZXJvLCB0aGVuCisrICAgICB0aGV5IGFyZW4ndCBncm91cGVkIGF0IGFsbCwgYnV0IHJhdGhlciBtZXJnZWQgd2l0aCB0aGUgcGFyZW50IG9wdGlvbnMKKysgICAgIChtZXJnaW5nIHRoZSBjaGlsZCdzIGdyb3VwaW5nIGxldmVscyB3aXRoIHRoZSBwYXJlbnRzKS4gICovCisrICBpbnQgZ3JvdXA7CisrfTsKKysMCisrLyogUGFyc2luZyBzdGF0ZS4gIFRoaXMgaXMgcHJvdmlkZWQgdG8gcGFyc2luZyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFyZ3AsCisrICAgd2hpY2ggbWF5IGV4YW1pbmUgYW5kLCBhcyBub3RlZCwgbW9kaWZ5IGZpZWxkcy4gICovCisrc3RydWN0IGFyZ3Bfc3RhdGUKKyt7CisrICAvKiBUaGUgdG9wIGxldmVsIEFSR1AgYmVpbmcgcGFyc2VkLiAgKi8KKysgIF9fY29uc3Qgc3RydWN0IGFyZ3AgKnJvb3RfYXJncDsKKysKKysgIC8qIFRoZSBhcmd1bWVudCB2ZWN0b3IgYmVpbmcgcGFyc2VkLiAgTWF5IGJlIG1vZGlmaWVkLiAgKi8KKysgIGludCBhcmdjOworKyAgY2hhciAqKmFyZ3Y7CisrCisrICAvKiBUaGUgaW5kZXggaW4gQVJHViBvZiB0aGUgbmV4dCBhcmcgdGhhdCB0byBiZSBwYXJzZWQuICBNYXkgYmUgbW9kaWZpZWQuICovCisrICBpbnQgbmV4dDsKKysKKysgIC8qIFRoZSBmbGFncyBzdXBwbGllZCB0byBhcmdwX3BhcnNlLiAgTWF5IGJlIG1vZGlmaWVkLiAgKi8KKysgIHVuc2lnbmVkIGZsYWdzOworKworKyAgLyogV2hpbGUgY2FsbGluZyBhIHBhcnNpbmcgZnVuY3Rpb24gd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9BUkcsIHRoaXMgaXMgdGhlCisrICAgICBudW1iZXIgb2YgdGhlIGN1cnJlbnQgYXJnLCBzdGFydGluZyBhdCB6ZXJvLCBhbmQgaW5jcmVtZW50ZWQgYWZ0ZXIgZWFjaAorKyAgICAgc3VjaCBjYWxsIHJldHVybnMuICBBdCBhbGwgb3RoZXIgdGltZXMsIHRoaXMgaXMgdGhlIG51bWJlciBvZiBzdWNoCisrICAgICBhcmd1bWVudHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgKi8KKysgIHVuc2lnbmVkIGFyZ19udW07CisrCisrICAvKiBJZiBub24temVybywgdGhlIGluZGV4IGluIEFSR1Ygb2YgdGhlIGZpcnN0IGFyZ3VtZW50IGZvbGxvd2luZyBhIHNwZWNpYWwKKysgICAgIGAtLScgYXJndW1lbnQgKHdoaWNoIHByZXZlbnRzIGFueXRoaW5nIGZvbGxvd2luZyBiZWluZyBpbnRlcnByZXRlZCBhcyBhbgorKyAgICAgb3B0aW9uKS4gIE9ubHkgc2V0IG9uY2UgYXJndW1lbnQgcGFyc2luZyBoYXMgcHJvY2VlZGVkIHBhc3QgdGhpcyBwb2ludC4gKi8KKysgIGludCBxdW90ZWQ7CisrCisrICAvKiBBbiBhcmJpdHJhcnkgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB0aGUgdXNlci4gICovCisrICB2b2lkICppbnB1dDsKKysgIC8qIFZhbHVlcyB0byBwYXNzIHRvIGNoaWxkIHBhcnNlcnMuICBUaGlzIHZlY3RvciB3aWxsIGJlIHRoZSBzYW1lIGxlbmd0aCBhcworKyAgICAgdGhlIG51bWJlciBvZiBjaGlsZHJlbiBmb3IgdGhlIGN1cnJlbnQgcGFyc2VyLiAgKi8KKysgIHZvaWQgKipjaGlsZF9pbnB1dHM7CisrCisrICAvKiBGb3IgdGhlIHBhcnNlcidzIHVzZS4gIEluaXRpYWxpemVkIHRvIDAuICAqLworKyAgdm9pZCAqaG9vazsKKysKKysgIC8qIFRoZSBuYW1lIHVzZWQgd2hlbiBwcmludGluZyBtZXNzYWdlcy4gIFRoaXMgaXMgaW5pdGlhbGl6ZWQgdG8gQVJHVlswXSwKKysgICAgIG9yIFBST0dSQU1fSU5WT0NBVElPTl9OQU1FIGlmIHRoYXQgaXMgdW5hdmFpbGFibGUuICAqLworKyAgY2hhciAqbmFtZTsKKysKKysgIC8qIFN0cmVhbXMgdXNlZCB3aGVuIGFyZ3AgcHJpbnRzIHNvbWV0aGluZy4gICovCisrICBGSUxFICplcnJfc3RyZWFtOwkJLyogRm9yIGVycm9yczsgaW5pdGlhbGl6ZWQgdG8gc3RkZXJyLiAqLworKyAgRklMRSAqb3V0X3N0cmVhbTsJCS8qIEZvciBpbmZvcm1hdGlvbjsgaW5pdGlhbGl6ZWQgdG8gc3Rkb3V0LiAqLworKworKyAgdm9pZCAqcHN0YXRlOwkJCS8qIFByaXZhdGUsIGZvciB1c2UgYnkgYXJncC4gICovCisrfTsKKysMCisrLyogRmxhZ3MgZm9yIGFyZ3BfcGFyc2UgKG5vdGUgdGhhdCB0aGUgZGVmYXVsdHMgYXJlIHRob3NlIHRoYXQgYXJlCisrICAgY29udmVuaWVudCBmb3IgcHJvZ3JhbSBjb21tYW5kIGxpbmUgcGFyc2luZyk6ICovCisrCisrLyogRG9uJ3QgaWdub3JlIHRoZSBmaXJzdCBlbGVtZW50IG9mIEFSR1YuICBOb3JtYWxseSAoYW5kIGFsd2F5cyB1bmxlc3MKKysgICBBUkdQX05PX0VSUlMgaXMgc2V0KSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgYXJndW1lbnQgdmVjdG9yIGlzCisrICAgc2tpcHBlZCBmb3Igb3B0aW9uIHBhcnNpbmcgcHVycG9zZXMsIGFzIGl0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm9ncmFtIG5hbWUKKysgICBpbiBhIGNvbW1hbmQgbGluZS4gICovCisrI2RlZmluZSBBUkdQX1BBUlNFX0FSR1YwICAweDAxCisrCisrLyogRG9uJ3QgcHJpbnQgZXJyb3IgbWVzc2FnZXMgZm9yIHVua25vd24gb3B0aW9ucyB0byBzdGRlcnI7IHVubGVzcyB0aGlzIGZsYWcKKysgICBpcyBzZXQsIEFSR1BfUEFSU0VfQVJHVjAgaXMgaWdub3JlZCwgYXMgQVJHVlswXSBpcyB1c2VkIGFzIHRoZSBwcm9ncmFtCisrICAgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZXMuICBUaGlzIGZsYWcgaW1wbGllcyBBUkdQX05PX0VYSVQgKG9uIHRoZQorKyAgIGFzc3VtcHRpb24gdGhhdCBzaWxlbnQgZXhpdGluZyB1cG9uIGVycm9ycyBpcyBiYWQgYmVoYXZpb3VyKS4gICovCisrI2RlZmluZSBBUkdQX05PX0VSUlMJMHgwMgorKworKy8qIERvbid0IHBhcnNlIGFueSBub24tb3B0aW9uIGFyZ3MuICBOb3JtYWxseSBub24tb3B0aW9uIGFyZ3MgYXJlIHBhcnNlZCBieQorKyAgIGNhbGxpbmcgdGhlIHBhcnNlIGZ1bmN0aW9ucyB3aXRoIGEga2V5IG9mIEFSR1BfS0VZX0FSRywgYW5kIHRoZSBhY3R1YWwgYXJnCisrICAgYXMgdGhlIHZhbHVlLiAgU2luY2UgaXQncyBpbXBvc3NpYmxlIHRvIGtub3cgd2hpY2ggcGFyc2UgZnVuY3Rpb24gd2FudHMgdG8KKysgICBoYW5kbGUgaXQsIGVhY2ggb25lIGlzIGNhbGxlZCBpbiB0dXJuLCB1bnRpbCBvbmUgcmV0dXJucyAwIG9yIGFuIGVycm9yCisrICAgb3RoZXIgdGhhbiBBUkdQX0VSUl9VTktOT1dOOyBpZiBhbiBhcmd1bWVudCBpcyBoYW5kbGVkIGJ5IG5vIG9uZSwgdGhlCisrICAgYXJncF9wYXJzZSByZXR1cm5zIHByZW1hdHVyZWx5IChidXQgd2l0aCBhIHJldHVybiB2YWx1ZSBvZiAwKS4gIElmIGFsbAorKyAgIGFyZ3MgaGF2ZSBiZWVuIHBhcnNlZCB3aXRob3V0IGVycm9yLCBhbGwgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBvbmUKKysgICBsYXN0IHRpbWUgd2l0aCBhIGtleSBvZiBBUkdQX0tFWV9FTkQuICBUaGlzIGZsYWcgbmVlZG4ndCBub3JtYWxseSBiZSBzZXQsCisrICAgYXMgdGhlIG5vcm1hbCBiZWhhdmlvciBpcyB0byBzdG9wIHBhcnNpbmcgYXMgc29vbiBhcyBzb21lIGFyZ3VtZW50IGNhbid0CisrICAgYmUgaGFuZGxlZC4gICovCisrI2RlZmluZSBBUkdQX05PX0FSR1MJMHgwNAorKworKy8qIFBhcnNlIG9wdGlvbnMgYW5kIGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBvcmRlciB0aGV5IG9jY3VyIG9uIHRoZSBjb21tYW5kCisrICAgbGluZSAtLSBub3JtYWxseSB0aGV5J3JlIHJlYXJyYW5nZWQgc28gdGhhdCBhbGwgb3B0aW9ucyBjb21lIGZpcnN0LiAqLworKyNkZWZpbmUgQVJHUF9JTl9PUkRFUgkweDA4CisrCisrLyogRG9uJ3QgcHJvdmlkZSB0aGUgc3RhbmRhcmQgbG9uZyBvcHRpb24gLS1oZWxwLCB3aGljaCBjYXVzZXMgdXNhZ2UgYW5kCisrICAgICAgb3B0aW9uIGhlbHAgaW5mb3JtYXRpb24gdG8gYmUgb3V0cHV0IHRvIHN0ZG91dCwgYW5kIGV4aXQgKDApIGNhbGxlZC4gKi8KKysjZGVmaW5lIEFSR1BfTk9fSEVMUAkweDEwCisrCisrLyogRG9uJ3QgZXhpdCBvbiBlcnJvcnMgKHRoZXkgbWF5IHN0aWxsIHJlc3VsdCBpbiBlcnJvciBtZXNzYWdlcykuICAqLworKyNkZWZpbmUgQVJHUF9OT19FWElUCTB4MjAKKysKKysvKiBVc2UgdGhlIGdudSBnZXRvcHQgYGxvbmctb25seScgcnVsZXMgZm9yIHBhcnNpbmcgYXJndW1lbnRzLiAgKi8KKysjZGVmaW5lIEFSR1BfTE9OR19PTkxZCTB4NDAKKysKKysvKiBUdXJucyBvZmYgYW55IG1lc3NhZ2UtcHJpbnRpbmcvZXhpdGluZyBvcHRpb25zLiAgKi8KKysjZGVmaW5lIEFSR1BfU0lMRU5UICAgIChBUkdQX05PX0VYSVQgfCBBUkdQX05PX0VSUlMgfCBBUkdQX05PX0hFTFApCisrCisrLyogUGFyc2UgdGhlIG9wdGlvbnMgc3RyaW5ncyBpbiBBUkdDICYgQVJHViBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMgaW4gQVJHUC4KKysgICBGTEFHUyBpcyBvbmUgb2YgdGhlIEFSR1BfIGZsYWdzIGFib3ZlLiAgSWYgQVJHX0lOREVYIGlzIG5vbi1OVUxMLCB0aGUKKysgICBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCB1bnBhcnNlZCBvcHRpb24gaXMgcmV0dXJuZWQgaW4gaXQuICBJZiBhbgorKyAgIHVua25vd24gb3B0aW9uIGlzIHByZXNlbnQsIEFSR1BfRVJSX1VOS05PV04gaXMgcmV0dXJuZWQ7IGlmIHNvbWUgcGFyc2VyCisrICAgcm91dGluZSByZXR1cm5lZCBhIG5vbi16ZXJvIHZhbHVlLCBpdCBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIDAgaXMKKysgICByZXR1cm5lZC4gIFRoaXMgZnVuY3Rpb24gbWF5IGFsc28gY2FsbCBleGl0IHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcKKysgICBpcyBzZXQuICBJTlBVVCBpcyBhIHBvaW50ZXIgdG8gYSB2YWx1ZSB0byBiZSBwYXNzZWQgaW4gdG8gdGhlIHBhcnNlci4gICovCisrZXh0ZXJuIGVycm9yX3QgYXJncF9wYXJzZSAoX19jb25zdCBzdHJ1Y3QgYXJncCAqX19yZXN0cmljdCBfX2FyZ3AsCisrCQkJICAgaW50IF9fYXJnYywgY2hhciAqKl9fcmVzdHJpY3QgX19hcmd2LAorKwkJCSAgIHVuc2lnbmVkIF9fZmxhZ3MsIGludCAqX19yZXN0cmljdCBfX2FyZ19pbmRleCwKKysJCQkgICB2b2lkICpfX3Jlc3RyaWN0IF9faW5wdXQpOworKwwKKysvKiBHbG9iYWwgdmFyaWFibGVzLiAgKi8KKysKKysvKiBJZiBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0CisrICAgb3B0aW9uIC0tdmVyc2lvbiBpcyBhZGRlZCAodW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZyBpcyB1c2VkKSwgd2hpY2gKKysgICB3aWxsIHByaW50IHRoaXMgc3RyaW5nIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBhbmQgZXhpdCAodW5sZXNzIHRoZQorKyAgIEFSR1BfTk9fRVhJVCBmbGFnIGlzIHVzZWQpLiAgT3ZlcnJpZGRlbiBieSBBUkdQX1BST0dSQU1fVkVSU0lPTl9IT09LLiAgKi8KKytleHRlcm4gX19jb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbjsKKysKKysvKiBJZiBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtIHRvIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gYSBkZWZhdWx0CisrICAgb3B0aW9uIC0tdmVyc2lvbiBpcyBhZGRlZCAodW5sZXNzIHRoZSBBUkdQX05PX0hFTFAgZmxhZyBpcyB1c2VkKSwgd2hpY2gKKysgICBjYWxscyB0aGlzIGZ1bmN0aW9uIHdpdGggYSBzdHJlYW0gdG8gcHJpbnQgdGhlIHZlcnNpb24gdG8gYW5kIGEgcG9pbnRlciB0bworKyAgIHRoZSBjdXJyZW50IHBhcnNpbmcgc3RhdGUsIGFuZCB0aGVuIGV4aXRzICh1bmxlc3MgdGhlIEFSR1BfTk9fRVhJVCBmbGFnIGlzCisrICAgdXNlZCkuICBUaGlzIHZhcmlhYmxlIHRha2VzIHByZWNlZGVudCBvdmVyIEFSR1BfUFJPR1JBTV9WRVJTSU9OLiAgKi8KKytleHRlcm4gdm9pZCAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAorKwkJCQkJICBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19yZXN0cmljdAorKwkJCQkJICBfX3N0YXRlKTsKKysKKysvKiBJZiBkZWZpbmVkIG9yIHNldCBieSB0aGUgdXNlciBwcm9ncmFtLCBpdCBzaG91bGQgcG9pbnQgdG8gc3RyaW5nIHRoYXQgaXMKKysgICB0aGUgYnVnLXJlcG9ydGluZyBhZGRyZXNzIGZvciB0aGUgcHJvZ3JhbS4gIEl0IHdpbGwgYmUgcHJpbnRlZCBieQorKyAgIGFyZ3BfaGVscCBpZiB0aGUgQVJHUF9IRUxQX0JVR19BRERSIGZsYWcgaXMgc2V0IChhcyBpdCBpcyBieSB2YXJpb3VzCisrICAgc3RhbmRhcmQgaGVscCBtZXNzYWdlcyksIGVtYmVkZGVkIGluIGEgc2VudGVuY2UgdGhhdCBzYXlzIHNvbWV0aGluZyBsaWtlCisrICAgYFJlcG9ydCBidWdzIHRvIEFERFIuJy4gICovCisrZXh0ZXJuIF9fY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX2J1Z19hZGRyZXNzOworKworKy8qIFRoZSBleGl0IHN0YXR1cyB0aGF0IGFyZ3Agd2lsbCB1c2Ugd2hlbiBleGl0aW5nIGR1ZSB0byBhIHBhcnNpbmcgZXJyb3IuCisrICAgSWYgbm90IGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0sIHRoaXMgZGVmYXVsdHMgdG8gRVhfVVNBR0UgZnJvbQorKyAgIDxzeXNleGl0cy5oPi4gICovCisrZXh0ZXJuIGVycm9yX3QgYXJncF9lcnJfZXhpdF9zdGF0dXM7CisrDAorKy8qIEZsYWdzIGZvciBhcmdwX2hlbHAuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1VTQUdFCQkweDAxIC8qIGEgVXNhZ2U6IG1lc3NhZ2UuICovCisrI2RlZmluZSBBUkdQX0hFTFBfU0hPUlRfVVNBR0UJMHgwMiAvKiAgIiBidXQgZG9uJ3QgYWN0dWFsbHkgcHJpbnQgb3B0aW9ucy4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TRUUJCTB4MDQgLyogYSBgVHJ5IC4uLiBmb3IgbW9yZSBoZWxwJyBtZXNzYWdlLiAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0xPTkcJCTB4MDggLyogYSBsb25nIGhlbHAgbWVzc2FnZS4gKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9QUkVfRE9DCTB4MTAgLyogZG9jIHN0cmluZyBwcmVjZWRpbmcgbG9uZyBoZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9QT1NUX0RPQwkweDIwIC8qIGRvYyBzdHJpbmcgZm9sbG93aW5nIGxvbmcgaGVscC4gICovCisrI2RlZmluZSBBUkdQX0hFTFBfRE9DCQkoQVJHUF9IRUxQX1BSRV9ET0MgfCBBUkdQX0hFTFBfUE9TVF9ET0MpCisrI2RlZmluZSBBUkdQX0hFTFBfQlVHX0FERFIJMHg0MCAvKiBidWcgcmVwb3J0IGFkZHJlc3MgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9MT05HX09OTFkJMHg4MCAvKiBtb2RpZnkgb3V0cHV0IGFwcHJvcHJpYXRlbHkgdG8KKysJCQkJCXJlZmxlY3QgQVJHUF9MT05HX09OTFkgbW9kZS4gICovCisrCisrLyogVGhlc2UgQVJHUF9IRUxQIGZsYWdzIGFyZSBvbmx5IHVuZGVyc3Rvb2QgYnkgYXJncF9zdGF0ZV9oZWxwLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9FWElUX0VSUgkweDEwMCAvKiBDYWxsIGV4aXQoMSkgaW5zdGVhZCBvZiByZXR1cm5pbmcuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX0VYSVRfT0sJMHgyMDAgLyogQ2FsbCBleGl0KDApIGluc3RlYWQgb2YgcmV0dXJuaW5nLiAgKi8KKysKKysvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gYWZ0ZXIgYSBwcm9ncmFtIGNvbW1hbmQgbGluZSBwYXJzaW5nIGVycm9yLCBpZiBhbgorKyAgIGVycm9yIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBwcmludGVkLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TVERfRVJSIFwKKysgIChBUkdQX0hFTFBfU0VFIHwgQVJHUF9IRUxQX0VYSVRfRVJSKQorKy8qIFRoZSBzdGFuZGFyZCB0aGluZyB0byBkbyBhZnRlciBhIHByb2dyYW0gY29tbWFuZCBsaW5lIHBhcnNpbmcgZXJyb3IsIGlmIG5vCisrICAgbW9yZSBzcGVjaWZpYyBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIHByaW50ZWQuICAqLworKyNkZWZpbmUgQVJHUF9IRUxQX1NURF9VU0FHRSBcCisrICAoQVJHUF9IRUxQX1NIT1JUX1VTQUdFIHwgQVJHUF9IRUxQX1NFRSB8IEFSR1BfSEVMUF9FWElUX0VSUikKKysvKiBUaGUgc3RhbmRhcmQgdGhpbmcgdG8gZG8gaW4gcmVzcG9uc2UgdG8gYSAtLWhlbHAgb3B0aW9uLiAgKi8KKysjZGVmaW5lIEFSR1BfSEVMUF9TVERfSEVMUCBcCisrICAoQVJHUF9IRUxQX1NIT1JUX1VTQUdFIHwgQVJHUF9IRUxQX0xPTkcgfCBBUkdQX0hFTFBfRVhJVF9PSyBcCisrICAgfCBBUkdQX0hFTFBfRE9DIHwgQVJHUF9IRUxQX0JVR19BRERSKQorKworKy8qIE91dHB1dCBhIHVzYWdlIG1lc3NhZ2UgZm9yIEFSR1AgdG8gU1RSRUFNLiAgRkxBR1MgYXJlIGZyb20gdGhlIHNldAorKyAgIEFSR1BfSEVMUF8qLiAgKi8KKytleHRlcm4gdm9pZCBhcmdwX2hlbHAgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorKwkJICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisrCQkgICAgICAgdW5zaWduZWQgX19mbGFncywgY2hhciAqX19yZXN0cmljdCBfX25hbWUpOworKwwKKysvKiBUaGUgZm9sbG93aW5nIHJvdXRpbmVzIGFyZSBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYW4gYXJncAorKyAgIHBhcnNpbmcgcm91dGluZSAodGh1cyB0YWtpbmcgYW4gYXJncF9zdGF0ZSBzdHJ1Y3R1cmUgYXMgdGhlIGZpcnN0CisrICAgYXJndW1lbnQpLiAgVGhleSBtYXkgb3IgbWF5IG5vdCBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBleGl0LCBkZXBlbmRpbmcKKysgICBvbiB0aGUgZmxhZ3MgaW4gU1RBVEUgLS0gaW4gYW55IGNhc2UsIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHByZXBhcmVkIGZvcgorKyAgIHRoZW0gKm5vdCogdG8gZXhpdCwgYW5kIHNob3VsZCByZXR1cm4gYW4gYXBwcm9waWF0ZSBlcnJvciBhZnRlciBjYWxsaW5nCisrICAgdGhlbS4gIFthcmdwX3VzYWdlICYgYXJncF9lcnJvciBzaG91bGQgcHJvYmFibHkgYmUgY2FsbGVkIGFyZ3Bfc3RhdGVfLi4uLAorKyAgIGJ1dCB0aGV5J3JlIHVzZWQgb2Z0ZW4gZW5vdWdoIHRoYXQgdGhleSBzaG91bGQgYmUgc2hvcnRdICAqLworKworKy8qIE91dHB1dCwgaWYgYXBwcm9wcmlhdGUsIGEgdXNhZ2UgbWVzc2FnZSBmb3IgU1RBVEUgdG8gU1RSRUFNLiAgRkxBR1MgYXJlCisrICAgZnJvbSB0aGUgc2V0IEFSR1BfSEVMUF8qLiAgKi8KKytleHRlcm4gdm9pZCBhcmdwX3N0YXRlX2hlbHAgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSwKKysJCQkgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCisrCQkJICAgICB1bnNpZ25lZCBpbnQgX19mbGFncyk7CisrLyogUG9zc2libHkgb3V0cHV0IHRoZSBzdGFuZGFyZCB1c2FnZSBtZXNzYWdlIGZvciBBUkdQIHRvIHN0ZGVyciBhbmQgZXhpdC4gICovCisrZXh0ZXJuIHZvaWQgYXJncF91c2FnZSAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19zdGF0ZSk7CisrCisrLyogSWYgYXBwcm9wcmlhdGUsIHByaW50IHRoZSBwcmludGYgc3RyaW5nIEZNVCBhbmQgZm9sbG93aW5nIGFyZ3MsIHByZWNlZGVkCisrICAgYnkgdGhlIHByb2dyYW0gbmFtZSBhbmQgYDonLCB0byBzdGRlcnIsIGFuZCBmb2xsb3dlZCBieSBhIGBUcnkgLi4uIC0taGVscCcKKysgICBtZXNzYWdlLCB0aGVuIGV4aXQgKDEpLiAgKi8KKytleHRlcm4gdm9pZCBhcmdwX2Vycm9yIChfX2NvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpfX3Jlc3RyaWN0IF9fc3RhdGUsCisrCQkJX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKKysvKiBTaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBnbnUgZXJyb3ItcmVwb3J0aW5nIGZ1bmN0aW9uIGVycm9yKCksIGJ1dCB3aWxsCisrICAgcmVzcGVjdCB0aGUgQVJHUF9OT19FWElUIGFuZCBBUkdQX05PX0VSUlMgZmxhZ3MgaW4gU1RBVEUsIGFuZCB3aWxsIHByaW50CisrICAgdG8gU1RBVEUtPmVycl9zdHJlYW0uICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXJndW1lbnQgcGFyc2luZyBjb2RlIHRoYXQgaXMKKysgICBzaGFyZWQgYmV0d2VlbiBwcm9ncmFtIHN0YXJ0dXAgKHdoZW4gZXhpdGluZyBpcyBkZXNpcmVkKSBhbmQgcnVudGltZQorKyAgIG9wdGlvbiBwYXJzaW5nICh3aGVuIHR5cGljYWxseSBhbiBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluc3RlYWQpLiAgVGhlCisrICAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMgZnVuY3Rpb24gYW5kIGFyZ3BfZXJyb3IgaXMgdGhhdCB0aGUgbGF0dGVyIGlzIGZvcgorKyAgICpwYXJzaW5nIGVycm9ycyosIGFuZCB0aGUgZm9ybWVyIGlzIGZvciBvdGhlciBwcm9ibGVtcyB0aGF0IG9jY3VyIGR1cmluZworKyAgIHBhcnNpbmcgYnV0IGRvbid0IHJlZmxlY3QgYSAoc3ludGFjdGljKSBwcm9ibGVtIHdpdGggdGhlIGlucHV0LiAgKi8KKytleHRlcm4gdm9pZCBhcmdwX2ZhaWx1cmUgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSwKKysJCQkgIGludCBfX3N0YXR1cywgaW50IF9fZXJybnVtLAorKwkJCSAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgNCwgNSkpKTsKKysvKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9wdGlvbiBPUFQgaXMgYSB2YWxpZCBzaG9ydCBvcHRpb24uICAqLworK2V4dGVybiBpbnQgX29wdGlvbl9pc19zaG9ydCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSBfX1RIUk9XOworK2V4dGVybiBpbnQgX19vcHRpb25faXNfc2hvcnQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgdGhlIG9wdGlvbiBPUFQgaXMgaW4gZmFjdCB0aGUgbGFzdCAodW51c2VkKSBlbnRyeSBpbiBhbgorKyAgIG9wdGlvbnMgYXJyYXkuICAqLworK2V4dGVybiBpbnQgX29wdGlvbl9pc19lbmQgKF9fY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpfX29wdCkgX19USFJPVzsKKytleHRlcm4gaW50IF9fb3B0aW9uX2lzX2VuZCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSBfX1RIUk9XOworKworKy8qIFJldHVybiB0aGUgaW5wdXQgZmllbGQgZm9yIEFSR1AgaW4gdGhlIHBhcnNlciBjb3JyZXNwb25kaW5nIHRvIFNUQVRFOyB1c2VkCisrICAgYnkgdGhlIGhlbHAgcm91dGluZXMuICAqLworKy8qIFdlIHRoaW5rIHRoaXMgc2hvdWxkIG5vdCBiZSBleHBvcnRlZCAqLworK2V4dGVybiB2b2lkICpfX2FyZ3BfaW5wdXQgKF9fY29uc3Qgc3RydWN0IGFyZ3AgKl9fcmVzdHJpY3QgX19hcmdwLAorKwkJCSAgIF9fY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKl9fcmVzdHJpY3QgX19zdGF0ZSkKKysgICAgIF9fVEhST1c7CisrDAorKyNpZmRlZiBfX1VTRV9FWFRFUk5fSU5MSU5FUworKworKyMgaWZuZGVmIEFSR1BfRUkKKysjICBkZWZpbmUgQVJHUF9FSSBfX2V4dGVybl9pbmxpbmUKKysjIGVuZGlmCisrCisrQVJHUF9FSSB2b2lkCisrYXJncF91c2FnZSAoX19jb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqX19zdGF0ZSkKKyt7CisrICBhcmdwX3N0YXRlX2hlbHAgKF9fc3RhdGUsIHN0ZGVyciwgQVJHUF9IRUxQX1NURF9VU0FHRSk7CisrfQorKworK0FSR1BfRUkgaW50CisrX19OVEggKF9fb3B0aW9uX2lzX3Nob3J0IChfX2NvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqX19vcHQpKQorK3sKKysgIGlmIChfX29wdC0+ZmxhZ3MgJiBPUFRJT05fRE9DKQorKyAgICByZXR1cm4gMDsKKysgIGVsc2UKKysgICAgeworKyAgICAgIGludCBfX2tleSA9IF9fb3B0LT5rZXk7CisrICAgICAgcmV0dXJuIF9fa2V5ID4gMCAmJiBfX2tleSA8PSBVQ0hBUl9NQVggJiYgaXNwcmludCAoX19rZXkpOworKyAgICB9CisrfQorKworK0FSR1BfRUkgaW50CisrX19OVEggKF9fb3B0aW9uX2lzX2VuZCAoX19jb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKl9fb3B0KSkKKyt7CisrICByZXR1cm4gIV9fb3B0LT5rZXkgJiYgIV9fb3B0LT5uYW1lICYmICFfX29wdC0+ZG9jICYmICFfX29wdC0+Z3JvdXA7CisrfQorKyNlbmRpZiAvKiBVc2UgZXh0ZXJuIGlubGluZXMuICAqLworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2VuZGlmCisrCisrI2VuZGlmIC8qIGFyZ3AuaCAqLworZGlmZiAtLWdpdCBhL2xpYmMvc3lzZGVwcy9saW51eC9jb21tb24vYml0cy9nZXRvcHRfaW50LmggYi9saWJjL3N5c2RlcHMvbGludXgvY29tbW9uL2JpdHMvZ2V0b3B0X2ludC5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjkxZWRmZQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliYy9zeXNkZXBzL2xpbnV4L2NvbW1vbi9iaXRzL2dldG9wdF9pbnQuaAorQEAgLTAsMCArMSwxMzYgQEAKKysvKiBJbnRlcm5hbCBkZWNsYXJhdGlvbnMgZm9yIGdldG9wdC4KKysgICBDb3B5cmlnaHQgKEMpIDE5ODktMTk5NCwxOTk2LTE5OTksMjAwMSwyMDAzLDIwMDQKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmbmRlZiBfR0VUT1BUX0lOVF9ICisrI2RlZmluZSBfR0VUT1BUX0lOVF9IICAxCisrCisrZXh0ZXJuIGludCBfZ2V0b3B0X2ludGVybmFsIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpfX2xvbmdvcHRzLCBpbnQgKl9fbG9uZ2luZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fbG9uZ19vbmx5KSBhdHRyaWJ1dGVfaGlkZGVuOworKworKworKy8qIFJlZW50cmFudCB2ZXJzaW9ucyB3aGljaCBjYW4gaGFuZGxlIHBhcnNpbmcgbXVsdGlwbGUgYXJndW1lbnQKKysgICB2ZWN0b3JzIGF0IHRoZSBzYW1lIHRpbWUuICAqLworKworKy8qIEZvciBfX29yZGVyaW5nIG1lbWJlciAqLworK2VudW0geworKyAgICAgICBSRVFVSVJFX09SREVSLCBQRVJNVVRFLCBSRVRVUk5fSU5fT1JERVIKKyt9OworKworKy8qIERhdGEgdHlwZSBmb3IgcmVlbnRyYW50IGZ1bmN0aW9ucy4gICovCisrCisrc3RydWN0IF9nZXRvcHRfZGF0YQorK3sKKysgIC8qIFRoZXNlIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZSBjb3JyZXNwb25kaW5nIGdsb2JhbAorKyAgICAgdmFyaWFibGVzLCBleGNlcHQgdGhhdCB0aGV5IGFyZSB1c2VkIGZvciB0aGUgcmVlbnRyYW50CisrICAgICB2ZXJzaW9ucyBvZiBnZXRvcHQuICAqLworKyAgaW50IG9wdGluZDsKKysgIGludCBvcHRlcnI7CisrICBjaGFyICpvcHRhcmc7CisrICBzbWFsbHVpbnQgb3B0b3B0OyAvKiB3ZSBzdG9yZSBjaGFyYWN0ZXJzIGhlcmUsIGEgYnl0ZSBpcyBlbm91Z2ggKi8KKysKKysgIC8qIEludGVybmFsIG1lbWJlcnMuICAqLworKworKyAgLyogVHJ1ZSBpZiB0aGUgaW50ZXJuYWwgbWVtYmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuICAqLworKyAgc21hbGxpbnQgX19pbml0aWFsaXplZDsKKysKKysgIC8qIERlc2NyaWJlIGhvdyB0byBkZWFsIHdpdGggb3B0aW9ucyB0aGF0IGZvbGxvdyBub24tb3B0aW9uIEFSR1YtZWxlbWVudHMuCisrCisrICAgICBJZiB0aGUgY2FsbGVyIGRpZCBub3Qgc3BlY2lmeSBhbnl0aGluZywKKysgICAgIHRoZSBkZWZhdWx0IGlzIFJFUVVJUkVfT1JERVIgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisrICAgICBQT1NJWExZX0NPUlJFQ1QgaXMgZGVmaW5lZCwgUEVSTVVURSBvdGhlcndpc2UuCisrCisrICAgICBSRVFVSVJFX09SREVSIG1lYW5zIGRvbid0IHJlY29nbml6ZSB0aGVtIGFzIG9wdGlvbnM7CisrICAgICBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nIHdoZW4gdGhlIGZpcnN0IG5vbi1vcHRpb24gaXMgc2Vlbi4KKysgICAgIFRoaXMgaXMgd2hhdCBVbml4IGRvZXMuCisrICAgICBUaGlzIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHNlbGVjdGVkIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudAorKyAgICAgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNULCBvciB1c2luZyBgKycgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcgorKyAgICAgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMuCisrCisrICAgICBQRVJNVVRFIGlzIHRoZSBkZWZhdWx0LiAgV2UgcGVybXV0ZSB0aGUgY29udGVudHMgb2YgQVJHViBhcyB3ZQorKyAgICAgc2Nhbiwgc28gdGhhdCBldmVudHVhbGx5IGFsbCB0aGUgbm9uLW9wdGlvbnMgYXJlIGF0IHRoZSBlbmQuCisrICAgICBUaGlzIGFsbG93cyBvcHRpb25zIHRvIGJlIGdpdmVuIGluIGFueSBvcmRlciwgZXZlbiB3aXRoIHByb2dyYW1zCisrICAgICB0aGF0IHdlcmUgbm90IHdyaXR0ZW4gdG8gZXhwZWN0IHRoaXMuCisrCisrICAgICBSRVRVUk5fSU5fT1JERVIgaXMgYW4gb3B0aW9uIGF2YWlsYWJsZSB0byBwcm9ncmFtcyB0aGF0IHdlcmUKKysgICAgIHdyaXR0ZW4gdG8gZXhwZWN0IG9wdGlvbnMgYW5kIG90aGVyIEFSR1YtZWxlbWVudHMgaW4gYW55IG9yZGVyCisrICAgICBhbmQgdGhhdCBjYXJlIGFib3V0IHRoZSBvcmRlcmluZyBvZiB0aGUgdHdvLiAgV2UgZGVzY3JpYmUgZWFjaAorKyAgICAgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgYXMgaWYgaXQgd2VyZSB0aGUgYXJndW1lbnQgb2YgYW4gb3B0aW9uCisrICAgICB3aXRoIGNoYXJhY3RlciBjb2RlIDEuICBVc2luZyBgLScgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUKKysgICAgIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMgc2VsZWN0cyB0aGlzIG1vZGUgb2Ygb3BlcmF0aW9uLgorKworKyAgICAgVGhlIHNwZWNpYWwgYXJndW1lbnQgYC0tJyBmb3JjZXMgYW4gZW5kIG9mIG9wdGlvbi1zY2FubmluZyByZWdhcmRsZXNzCisrICAgICBvZiB0aGUgdmFsdWUgb2YgYG9yZGVyaW5nJy4gIEluIHRoZSBjYXNlIG9mIFJFVFVSTl9JTl9PUkRFUiwgb25seQorKyAgICAgYC0tJyBjYW4gY2F1c2UgYGdldG9wdCcgdG8gcmV0dXJuIC0xIHdpdGggYG9wdGluZCcgIT0gQVJHQy4gICovCisrICBzbWFsbGludCBfX29yZGVyaW5nOworKworKyAgLyogSWYgdGhlIFBPU0lYTFlfQ09SUkVDVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQuICAqLworKyAgc21hbGxpbnQgX19wb3NpeGx5X2NvcnJlY3Q7CisrCisrICAvKiBUaGUgbmV4dCBjaGFyIHRvIGJlIHNjYW5uZWQgaW4gdGhlIG9wdGlvbi1lbGVtZW50CisrICAgICBpbiB3aGljaCB0aGUgbGFzdCBvcHRpb24gY2hhcmFjdGVyIHdlIHJldHVybmVkIHdhcyBmb3VuZC4KKysgICAgIFRoaXMgYWxsb3dzIHVzIHRvIHBpY2sgdXAgdGhlIHNjYW4gd2hlcmUgd2UgbGVmdCBvZmYuCisrCisrICAgICBJZiB0aGlzIGlzIHplcm8sIG9yIGEgbnVsbCBzdHJpbmcsIGl0IG1lYW5zIHJlc3VtZSB0aGUgc2NhbgorKyAgICAgYnkgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IEFSR1YtZWxlbWVudC4gICovCisrICBjaGFyICpfX25leHRjaGFyOworKworKworKyAgLyogSGFuZGxlIHBlcm11dGF0aW9uIG9mIGFyZ3VtZW50cy4gICovCisrCisrICAvKiBEZXNjcmliZSB0aGUgcGFydCBvZiBBUkdWIHRoYXQgY29udGFpbnMgbm9uLW9wdGlvbnMgdGhhdCBoYXZlCisrICAgICBiZWVuIHNraXBwZWQuICBgZmlyc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3QKKysgICAgIG9mIHRoZW07IGBsYXN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IG9mIHRoZW0uICAqLworKworKyAgaW50IF9fZmlyc3Rfbm9ub3B0OworKyAgaW50IF9fbGFzdF9ub25vcHQ7CisrCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfTk9OT1BUSU9OX0ZMQUdTCisrICBpbnQgX19ub25vcHRpb25fZmxhZ3NfbWF4X2xlbjsKKysgIGludCBfX25vbm9wdGlvbl9mbGFnc19sZW47CisrIyBlbmRpZgorK307CisrCisrLyogVGhlIGluaXRpYWxpemVyIGlzIG5lY2Vzc2FyeSB0byBzZXQgT1BUSU5EIGFuZCBPUFRFUlIgdG8gdGhlaXIKKysgICBkZWZhdWx0IHZhbHVlcyBhbmQgdG8gY2xlYXIgdGhlIGluaXRpYWxpemF0aW9uIGZsYWcuICAqLworKyNkZWZpbmUgX0dFVE9QVF9EQVRBX0lOSVRJQUxJWkVSICAgICAgIHsgMSwgMSB9CisrCisrI2lmIDAgLyogZmlyc3QgaXMgc3RhdGljIG9uIHVDbGliYywgdGhlIG90aGVycyBub3QgdXNlZCAqLworK2V4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbF9yIChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19zaG9ydG9wdHMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fbG9uZ19vbmx5LCBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19HTlVfR0VUT1BUX18gfHwgZGVmaW5lZCBfX1VDTElCQ19IQVNfR0VUT1BUX0xPTkdfXworKyNpZm5kZWYgX19uZWVkX2dldG9wdAorK2V4dGVybiBpbnQgX2dldG9wdF9sb25nX3IgKGludCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywgaW50ICpfX2xvbmdpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpfX2RhdGEpOworKworK2V4dGVybiBpbnQgX2dldG9wdF9sb25nX29ubHlfciAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX3Nob3J0b3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqX19sb25nb3B0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX2xvbmdpbmQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKl9fZGF0YSk7CisrI2VuZGlmCisrI2VuZGlmCisrI2VuZGlmIC8qIGdldG9wdF9pbnQuaCAqLworZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldG9wdC5jIGIvbGliYy91bmlzdGQvZ2V0b3B0LmMKK2luZGV4IGY2MzQ4MmIuLmRiNWUxMmMgMTAwNjQ0CistLS0gYS9saWJjL3VuaXN0ZC9nZXRvcHQuYworKysrIGIvbGliYy91bmlzdGQvZ2V0b3B0LmMKK0BAIC0xMDUsNyArMTA1LDcgQEAKKyAgICB0aGV5IGNhbiBkaXN0aW5ndWlzaCB0aGUgcmVsYXRpdmUgb3JkZXIgb2Ygb3B0aW9ucyBhbmQgb3RoZXIgYXJndW1lbnRzLiAgKi8KKyAKKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CistI2luY2x1ZGUgImdldG9wdF9pbnQuaCIKKysjaW5jbHVkZSA8Yml0cy9nZXRvcHRfaW50Lmg+CisgCisgCisgLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSBgZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgorQEAgLTExNzAsNiArMTE3MCwxNSBAQCBnZXRvcHRfbG9uZyAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorICAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWwgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LCAwKTsKKyB9CisgCisraW50CisrX2dldG9wdF9sb25nX3IgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKysgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqb3B0X2luZGV4LAorKyAgICAgICAgICAgICAgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgKmQpCisreworKyAgcmV0dXJuIF9nZXRvcHRfaW50ZXJuYWxfciAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGQpOworK30KKysKKyAvKiBMaWtlIGdldG9wdF9sb25nLCBidXQgJy0nIGFzIHdlbGwgYXMgJy0tJyBjYW4gaW5kaWNhdGUgYSBsb25nIG9wdGlvbi4KKyAgICBJZiBhbiBvcHRpb24gdGhhdCBzdGFydHMgd2l0aCAnLScgKG5vdCAnLS0nKSBkb2Vzbid0IG1hdGNoIGEgbG9uZyBvcHRpb24sCisgICAgYnV0IGRvZXMgbWF0Y2ggYSBzaG9ydCBvcHRpb24sIGl0IGlzIHBhcnNlZCBhcyBhIHNob3J0IG9wdGlvbgorQEAgLTExODMsNCArMTE5MiwxMiBAQCBnZXRvcHRfbG9uZ19vbmx5IChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisgfQorICNlbmRpZiAvKiBfX1VDTElCQ19IQVNfR0VUT1BUX0xPTkdfXyAqLworIAorK2ludAorK19nZXRvcHRfbG9uZ19vbmx5X3IgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKysgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICpvcHRfaW5kZXgsCisrICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX2dldG9wdF9kYXRhICpkKQorK3sKKysgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsX3IgKGFyZ2MsIGFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgb3B0X2luZGV4LCAxLCBkKTsKKyt9CisrCisgI2VuZGlmCS8qIE5vdCBFTElERV9DT0RFLiAgKi8KK2RpZmYgLS1naXQgYS9saWJ1YXJncC9NYWtlZmlsZSBiL2xpYnVhcmdwL01ha2VmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDVhY2RkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvTWFrZWZpbGUKK0BAIC0wLDAgKzEsMTQgQEAKKysjIE1ha2VmaWxlIGZvciB1Q2xpYmMgKGxpYnVhcmdwKQorKyMKKysjIENvcHlyaWdodCAoQykgMjAxMCBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisrIyBBdXRob3Iocyk6IEZpbGlwcG8gQXJjaWRpYWNvbm8gPGZpbGlwcG8uYXJjaWRpYWNvbm8gYXQgc3QuY29tPgorKyMKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrIworKworK3RvcF9zcmNkaXI9Li4vCisrdG9wX2J1aWxkZGlyPS4uLworK2luY2x1ZGUgJCh0b3BfYnVpbGRkaXIpUnVsZXMubWFrCisrYWxsOiBsaWJzCisraW5jbHVkZSBNYWtlZmlsZS5pbgorK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKU1ha2VydWxlcworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL01ha2VmaWxlLmluIGIvbGlidWFyZ3AvTWFrZWZpbGUuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xNDk4YWJiCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9NYWtlZmlsZS5pbgorQEAgLTAsMCArMSw3MyBAQAorKyMgTWFrZWZpbGUgZm9yIHVDbGliYyAobGlidWFyZ3ApCisrIworKyMgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkLgorKyMgQXV0aG9yKHMpOiBTYWx2YXRvcmUgQ3JvIDxzYWx2YXRvcmUuY3JvIGF0IHN0LmNvbT4KKysjICAgICAgICAgICAgLSBGaXJzdCBpbXBsZW1lbnRhdGlvbiwgZW1iZWRkZWQgaW50byBsaWJjCisrIyAgICAgICAgICAgIEZpbGlwcG8gQXJjaWRpYWNvbm8gPGZpbGlwcG8uYXJjaWRpYWNvbm8gYXQgc3QuY29tPgorKyMgICAgICAgICAgICAtIFJld29ya2VkIGZvciBzdGFuZC1hbG9uZSBsaWJ1YXJncCBpbXBsZW1lbnRhdGlvbgorKworKyMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKysjCisrCisrQ0ZMQUdTLWxpYnVhcmdwIDo9IC1ETk9UX0lOX2xpYmMgLURJU19JTl9saWJ1YXJncCAkKFNTUF9BTExfQ0ZMQUdTKQorKworK0xERkxBR1MtbGlidWFyZ3Auc28gOj0gJChMREZMQUdTKQorKworK0xJQlMtbGlidWFyZ3Auc28gOj0gJChMSUJTKQorKworK2xpYnVhcmdwX0ZVTExfTkFNRSA6PSBsaWJ1YXJncC0kKFZFUlNJT04pLnNvCisrCisrbGlidWFyZ3BfRElSIDo9ICQodG9wX3NyY2RpcilsaWJ1YXJncAorK2xpYnVhcmdwX09VVCA6PSAkKHRvcF9idWlsZGRpcilsaWJ1YXJncAorKworK2xpYnVhcmdwX1NSQy15IDo9CisrbGlidWFyZ3BfU1JDLSQoVUNMSUJDX0hBU19BUkdQKSA6PSAkKGFkZHN1ZmZpeCAuYywkKGFkZHByZWZpeCBhcmdwLSwgYmEgXAorKwkJCWVleHN0IGZtdHN0cmVhbSBmcy14aW5sIGhlbHAgcGFyc2UgcHYgcHZoIHhpbmwpKQorKworK0NGTEFHUy1hcmdwLXhpbmwuYyA9IC1mZ251ODktaW5saW5lCisrCisrbGlidWFyZ3BfU1JDIDo9ICQoYWRkcHJlZml4ICQobGlidWFyZ3BfRElSKS8sJChsaWJ1YXJncF9TUkMteSkpCisrbGlidWFyZ3BfT0JKIDo9ICQocGF0c3Vic3QgJChsaWJ1YXJncF9ESVIpLyUuYywkKGxpYnVhcmdwX09VVCkvJS5vLCQobGlidWFyZ3BfU1JDKSkKKysKKytsaWJ1YXJncF9TUkNTIDo9ICQobGlidWFyZ3BfU1JDKQorK2xpYnVhcmdwX09CSlMgOj0gJChsaWJ1YXJncF9PQkopCisrCisraWZlcSAoJChET1BJQykseSkKKytsaWJ1YXJncC1hLXkgOj0gJChsaWJ1YXJncF9PQkpTOi5vPS5vcykKKytlbHNlCisrbGlidWFyZ3AtYS15IDo9ICQobGlidWFyZ3BfT0JKUykKKytlbmRpZgorK2xpYnVhcmdwLXNvLXkgOj0gJChsaWJ1YXJncF9PQkpTOi5vPS5vcykKKysKKytsaWItYS0kKFVDTElCQ19IQVNfQVJHUCkgKz0gJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLmEKKytsaWItc28tJChVQ0xJQkNfSEFTX0FSR1ApICs9ICQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbworKworK29iamNsZWFuLXkgKz0gQ0xFQU5fbGlidWFyZ3AKKysKKytpZmVxICgkKERPTVVMVEkpLG4pCisraWZlcSAoJChET1BJQykseSkKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3Auc286ICQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5hICQobGliYy5kZXBlbmQpCisrZWxzZQorKyQodG9wX2J1aWxkZGlyKWxpYi9saWJ1YXJncC5zbzogJChsaWJ1YXJncF9PVVQpL2xpYnVhcmdwX3NvLmEgJChsaWJjLmRlcGVuZCkKKytlbmRpZgorKwkkKGNhbGwgbGluay5zbywkKGxpYnVhcmdwX0ZVTExfTkFNRSksJChNQUpPUl9WRVJTSU9OKSkKKytlbHNlCisrJCh0b3BfYnVpbGRkaXIpbGliL2xpYnVhcmdwLnNvOiAkKGxpYnVhcmdwX09VVCkvbGlidWFyZ3Aub1MgJChsaWJjLmRlcGVuZCkKKysJJChjYWxsIGxpbmttLnNvLCQobGlidWFyZ3BfRlVMTF9OQU1FKSwkKE1BSk9SX1ZFUlNJT04pKQorK2VuZGlmCisrCisrJChsaWJ1YXJncF9PVVQpL2xpYnVhcmdwX3NvLmE6ICQobGlidWFyZ3Atc28teSkKKysJJChRKSQoUk0pICRACisrCSQoZG9fYXIpCisrCisrJChsaWJ1YXJncF9PVVQpL2xpYnVhcmdwLm9TOiAkKGxpYnVhcmdwX1NSQ1MpCisrCSQoUSkkKFJNKSAkQAorKwkkKGNvbXBpbGUtbSkKKysKKyskKHRvcF9idWlsZGRpcilsaWIvbGlidWFyZ3AuYTogJChsaWJ1YXJncC1hLXkpCisrCSQoUSkkKElOU1RBTEwpIC1kICQoZGlyICRAKQorKwkkKFEpJChSTSkgJEAKKysJJChkb19hcikKKysKKytDTEVBTl9saWJ1YXJncDoKKysJJChkb19ybSkgJChhZGRwcmVmaXggJChsaWJ1YXJncF9PVVQpLyouLCBvIG9zIG9TIGEpCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1iYS5jIGIvbGlidWFyZ3AvYXJncC1iYS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzUyMmIwMgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1iYS5jCitAQCAtMCwwICsxLDI2IEBACisrLyogRGVmYXVsdCBkZWZpbml0aW9uIGZvciBBUkdQX1BST0dSQU1fQlVHX0FERFJFU1MuCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrLyogSWYgc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0sIGl0IHNob3VsZCBwb2ludCB0byBzdHJpbmcgdGhhdCBpcyB0aGUKKysgICBidWctcmVwb3J0aW5nIGFkZHJlc3MgZm9yIHRoZSBwcm9ncmFtLiAgSXQgd2lsbCBiZSBwcmludGVkIGJ5IGFyZ3BfaGVscCBpZgorKyAgIHRoZSBBUkdQX0hFTFBfQlVHX0FERFIgZmxhZyBpcyBzZXQgKGFzIGl0IGlzIGJ5IHZhcmlvdXMgc3RhbmRhcmQgaGVscAorKyAgIG1lc3NhZ2VzKSwgZW1iZWRkZWQgaW4gYSBzZW50ZW5jZSB0aGF0IHNheXMgc29tZXRoaW5nIGxpa2UgYFJlcG9ydCBidWdzIHRvCisrICAgQUREUi4nLiAgKi8KKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3M7CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1lZXhzdC5jIGIvbGlidWFyZ3AvYXJncC1lZXhzdC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDQ1YjY4ZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1lZXhzdC5jCitAQCAtMCwwICsxLDMyIEBACisrLyogRGVmYXVsdCBkZWZpbml0aW9uIGZvciBBUkdQX0VSUl9FWElUX1NUQVRVUworKyAgIENvcHlyaWdodCAoQykgMTk5NyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3lzZXhpdHMuaD4KKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworKy8qIFRoZSBleGl0IHN0YXR1cyB0aGF0IGFyZ3Agd2lsbCB1c2Ugd2hlbiBleGl0aW5nIGR1ZSB0byBhIHBhcnNpbmcgZXJyb3IuCisrICAgSWYgbm90IGRlZmluZWQgb3Igc2V0IGJ5IHRoZSB1c2VyIHByb2dyYW0sIHRoaXMgZGVmYXVsdHMgdG8gRVhfVVNBR0UgZnJvbQorKyAgIDxzeXNleGl0cy5oPi4gICovCisrZXJyb3JfdCBhcmdwX2Vycl9leGl0X3N0YXR1cyA9IEVYX1VTQUdFOworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmMgYi9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzUyMjdmOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uYworQEAgLTAsMCArMSw0MzkgQEAKKysvKiBXb3JkLXdyYXBwaW5nIGFuZCBsaW5lLXRydW5jYXRpbmcgc3RyZWFtcworKyAgIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5LDIwMDEsMjAwMiwyMDAzLDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrLyogVGhpcyBwYWNrYWdlIGVtdWxhdGVzIGdsaWJjIGBsaW5lX3dyYXBfc3RyZWFtJyBzZW1hbnRpY3MgZm9yIHN5c3RlbXMgdGhhdAorKyAgIGRvbid0IGhhdmUgdGhhdC4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGFyZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJhcmdwLWZtdHN0cmVhbS5oIgorKworKyNpZm5kZWYgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrCisrI2lmbmRlZiBpc2JsYW5rCisrI2RlZmluZSBpc2JsYW5rKGNoKSAoKGNoKT09JyAnIHx8IChjaCk9PSdcdCcpCisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDxsaWJpby9saWJpb1AuaD4KKysjIGRlZmluZSBfX3ZzbnByaW50ZihzLCBsLCBmLCBhKSBfSU9fdnNucHJpbnRmIChzLCBsLCBmLCBhKQorKyNlbHNlCisrIyBkZWZpbmUgX192c25wcmludGYocywgbCwgZiwgYSkgdnNucHJpbnRmIChzLCBsLCBmLCBhKQorKyNlbmRpZgorKworKyNkZWZpbmUgSU5JVF9CVUZfU0laRSAyMDAKKysjZGVmaW5lIFBSSU5URl9TSVpFX0dVRVNTIDE1MAorKworKy8qIFJldHVybiBhbiBhcmdwX2ZtdHN0cmVhbSB0aGF0IG91dHB1dHMgdG8gU1RSRUFNLCBhbmQgd2hpY2ggcHJlZml4ZXMgbGluZXMKKysgICB3cml0dGVuIG9uIGl0IHdpdGggTE1BUkdJTiBzcGFjZXMgYW5kIGxpbWl0cyB0aGVtIHRvIFJNQVJHSU4gY29sdW1ucworKyAgIHRvdGFsLiAgSWYgV01BUkdJTiA+PSAwLCB3b3JkcyB0aGF0IGV4dGVuZCBwYXN0IFJNQVJHSU4gYXJlIHdyYXBwZWQgYnkKKysgICByZXBsYWNpbmcgdGhlIHdoaXRlc3BhY2UgYmVmb3JlIHRoZW0gd2l0aCBhIG5ld2xpbmUgYW5kIFdNQVJHSU4gc3BhY2VzLgorKyAgIE90aGVyd2lzZSwgY2hhcnMgYmV5b25kIFJNQVJHSU4gYXJlIHNpbXBseSBkcm9wcGVkIHVudGlsIGEgbmV3bGluZS4KKysgICBSZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGFuIGVycm9yLiAgKi8KKythcmdwX2ZtdHN0cmVhbV90CisrX19hcmdwX21ha2VfZm10c3RyZWFtIChGSUxFICpzdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsbWFyZ2luLCBzaXplX3Qgcm1hcmdpbiwgc3NpemVfdCB3bWFyZ2luKQorK3sKKysgIGFyZ3BfZm10c3RyZWFtX3QgZnM7CisrCisrICBmcyA9IChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0gKikgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBhcmdwX2ZtdHN0cmVhbSkpOworKyAgaWYgKGZzICE9IE5VTEwpCisrICAgIHsKKysgICAgICBmcy0+c3RyZWFtID0gc3RyZWFtOworKworKyAgICAgIGZzLT5sbWFyZ2luID0gbG1hcmdpbjsKKysgICAgICBmcy0+cm1hcmdpbiA9IHJtYXJnaW47CisrICAgICAgZnMtPndtYXJnaW4gPSB3bWFyZ2luOworKyAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgIGZzLT5wb2ludF9vZmZzID0gMDsKKysKKysgICAgICBmcy0+YnVmID0gKGNoYXIgKikgbWFsbG9jIChJTklUX0JVRl9TSVpFKTsKKysgICAgICBpZiAoISBmcy0+YnVmKQorKyAgICAgICB7CisrICAgICAgICAgZnJlZSAoZnMpOworKyAgICAgICAgIGZzID0gMDsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIGZzLT5wID0gZnMtPmJ1ZjsKKysgICAgICAgICBmcy0+ZW5kID0gZnMtPmJ1ZiArIElOSVRfQlVGX1NJWkU7CisrICAgICAgIH0KKysgICAgfQorKworKyAgcmV0dXJuIGZzOworK30KKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrI2lmZGVmIHdlYWtfYWxpYXMKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfbWFrZV9mbXRzdHJlYW0sIGFyZ3BfbWFrZV9mbXRzdHJlYW0pCisrI2VuZGlmCisrI2VuZGlmCisrCisrLyogRmx1c2ggRlMgdG8gaXRzIHN0cmVhbSwgYW5kIGZyZWUgaXQgKGJ1dCBkb24ndCBjbG9zZSB0aGUgc3RyZWFtKS4gICovCisrdm9pZAorK19fYXJncF9mbXRzdHJlYW1fZnJlZSAoYXJncF9mbXRzdHJlYW1fdCBmcykKKyt7CisrICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoZnMpOworKyAgaWYgKGZzLT5wID4gZnMtPmJ1ZikKKysgICAgeworKyNpZmRlZiBVU0VfSU5fTElCSU8KKysgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qcyIsIChpbnQpIChmcy0+cCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysjZWxzZQorKyAgICAgIGZ3cml0ZV91bmxvY2tlZCAoZnMtPmJ1ZiwgMSwgZnMtPnAgLSBmcy0+YnVmLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKysgICAgfQorKyAgZnJlZSAoZnMtPmJ1Zik7CisrICBmcmVlIChmcyk7CisrfQorKyNpZiAwCisrLyogTm90IGV4cG9ydGVkLiAgKi8KKysjaWZkZWYgd2Vha19hbGlhcworK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fZnJlZSwgYXJncF9mbXRzdHJlYW1fZnJlZSkKKysjZW5kaWYKKysjZW5kaWYKKysKKysvKiBQcm9jZXNzIEZTJ3MgYnVmZmVyIHNvIHRoYXQgbGluZSB3cmFwcGluZyBpcyBkb25lIGZyb20gUE9JTlRfT0ZGUyB0byB0aGUKKysgICBlbmQgb2YgaXRzIGJ1ZmZlci4gIFRoaXMgY29kZSBpcyBtb3N0bHkgZnJvbSBnbGliYyBzdGRpby9saW5ld3JhcC5jLiAgKi8KKyt2b2lkCisrX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgZnMpCisreworKyAgY2hhciAqYnVmLCAqbmw7CisrICBzaXplX3QgbGVuOworKworKyAgLyogU2NhbiB0aGUgYnVmZmVyIGZvciBuZXdsaW5lcy4gICovCisrICBidWYgPSBmcy0+YnVmICsgZnMtPnBvaW50X29mZnM7CisrICB3aGlsZSAoYnVmIDwgZnMtPnApCisrICAgIHsKKysgICAgICBzaXplX3QgcjsKKysKKysgICAgICBpZiAoZnMtPnBvaW50X2NvbCA9PSAwICYmIGZzLT5sbWFyZ2luICE9IDApCisrICAgICAgIHsKKysgICAgICAgICAvKiBXZSBhcmUgc3RhcnRpbmcgYSBuZXcgbGluZS4gIFByaW50IHNwYWNlcyB0byB0aGUgbGVmdCBtYXJnaW4uICAqLworKyAgICAgICAgIGNvbnN0IHNpemVfdCBwYWQgPSBmcy0+bG1hcmdpbjsKKysgICAgICAgICBpZiAoZnMtPnAgKyBwYWQgPCBmcy0+ZW5kKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBXZSBjYW4gZml0IGluIHRoZW0gaW4gdGhlIGJ1ZmZlciBieSBtb3ZpbmcgdGhlCisrICAgICAgICAgICAgICAgIGJ1ZmZlciB0ZXh0IHVwIGFuZCBmaWxsaW5nIGluIHRoZSBiZWdpbm5pbmcuICAqLworKyAgICAgICAgICAgICBtZW1tb3ZlIChidWYgKyBwYWQsIGJ1ZiwgZnMtPnAgLSBidWYpOworKyAgICAgICAgICAgICBmcy0+cCArPSBwYWQ7IC8qIENvbXBlbnNhdGUgZm9yIGJpZ2dlciBidWZmZXIuICovCisrICAgICAgICAgICAgIG1lbXNldCAoYnVmLCAnICcsIHBhZCk7IC8qIEZpbGwgaW4gdGhlIHNwYWNlcy4gICovCisrICAgICAgICAgICAgIGJ1ZiArPSBwYWQ7IC8qIERvbid0IGJvdGhlciBzZWFyY2hpbmcgdGhlbS4gICovCisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBObyBidWZmZXIgc3BhY2UgZm9yIHNwYWNlcy4gIE11c3QgZmx1c2guICAqLworKyAgICAgICAgICAgICBzaXplX3QgaTsKKysgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhZDsgaSsrKQorKyAgICAgICAgICAgICAgIHsKKysjaWZkZWYgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgICAgICBpZiAoX0lPX2Z3aWRlIChmcy0+c3RyZWFtLCAwKSA+IDApCisrICAgICAgICAgICAgICAgICAgIHB1dHdjX3VubG9ja2VkIChMJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBmcy0+c3RyZWFtKTsKKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrICAgICAgICAgZnMtPnBvaW50X2NvbCA9IHBhZDsKKysgICAgICAgfQorKworKyAgICAgIGxlbiA9IGZzLT5wIC0gYnVmOworKyAgICAgIG5sID0gbWVtY2hyIChidWYsICdcbicsIGxlbik7CisrCisrICAgICAgaWYgKGZzLT5wb2ludF9jb2wgPCAwKQorKyAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysKKysgICAgICBpZiAoIW5sKQorKyAgICAgICB7CisrICAgICAgICAgLyogVGhlIGJ1ZmZlciBlbmRzIGluIGEgcGFydGlhbCBsaW5lLiAgKi8KKysKKysgICAgICAgICBpZiAoZnMtPnBvaW50X2NvbCArIGxlbiA8IGZzLT5ybWFyZ2luKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGJ1ZmZlciB0ZXh0IGlzIGEgcGFydGlhbCBsaW5lIGFuZCBmaXRzCisrICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgbWF4aW11bSBsaW5lIHdpZHRoLiAgQWR2YW5jZSBwb2ludCBmb3IgdGhlCisrICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgdG8gYmUgd3JpdHRlbiBhbmQgc3RvcCBzY2FubmluZy4gICovCisrICAgICAgICAgICAgIGZzLT5wb2ludF9jb2wgKz0gbGVuOworKyAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAvKiBTZXQgdGhlIGVuZC1vZi1saW5lIHBvaW50ZXIgZm9yIHRoZSBjb2RlIGJlbG93IHRvCisrICAgICAgICAgICAgICB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgICAgbmwgPSBmcy0+cDsKKysgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKGZzLT5wb2ludF9jb2wgKyAobmwgLSBidWYpIDwgKHNzaXplX3QpIGZzLT5ybWFyZ2luKQorKyAgICAgICB7CisrICAgICAgICAgLyogVGhlIGJ1ZmZlciBjb250YWlucyBhIGZ1bGwgbGluZSB0aGF0IGZpdHMgd2l0aGluIHRoZSBtYXhpbXVtCisrICAgICAgICAgICAgbGluZSB3aWR0aC4gIFJlc2V0IHBvaW50IGFuZCBzY2FuIHRoZSBuZXh0IGxpbmUuICAqLworKyAgICAgICAgIGZzLT5wb2ludF9jb2wgPSAwOworKyAgICAgICAgIGJ1ZiA9IG5sICsgMTsKKysgICAgICAgICBjb250aW51ZTsKKysgICAgICAgfQorKworKyAgICAgIC8qIFRoaXMgbGluZSBpcyB0b28gbG9uZy4gICovCisrICAgICAgciA9IGZzLT5ybWFyZ2luIC0gMTsKKysKKysgICAgICBpZiAoZnMtPndtYXJnaW4gPCAwKQorKyAgICAgICB7CisrICAgICAgICAgLyogVHJ1bmNhdGUgdGhlIGxpbmUgYnkgb3ZlcndyaXRpbmcgdGhlIGV4Y2VzcyB3aXRoIHRoZQorKyAgICAgICAgICAgIG5ld2xpbmUgYW5kIGFueXRoaW5nIGFmdGVyIGl0IGluIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgIGlmIChubCA8IGZzLT5wKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBtZW1tb3ZlIChidWYgKyAociAtIGZzLT5wb2ludF9jb2wpLCBubCwgZnMtPnAgLSBubCk7CisrICAgICAgICAgICAgIGZzLT5wIC09IGJ1ZiArIChyIC0gZnMtPnBvaW50X2NvbCkgLSBubDsKKysgICAgICAgICAgICAgLyogUmVzZXQgcG9pbnQgZm9yIHRoZSBuZXh0IGxpbmUgYW5kIHN0YXJ0IHNjYW5uaW5nIGl0LiAgKi8KKysgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCA9IDA7CisrICAgICAgICAgICAgIGJ1ZiArPSByICsgMTsgLyogU2tpcCBmdWxsIGxpbmUgcGx1cyBcbi4gKi8KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIC8qIFRoZSBidWZmZXIgZW5kcyB3aXRoIGEgcGFydGlhbCBsaW5lIHRoYXQgaXMgYmV5b25kIHRoZQorKyAgICAgICAgICAgICAgICBtYXhpbXVtIGxpbmUgd2lkdGguICBBZHZhbmNlIHBvaW50IGZvciB0aGUgY2hhcmFjdGVycworKyAgICAgICAgICAgICAgICB3cml0dGVuLCBhbmQgZGlzY2FyZCB0aG9zZSBwYXN0IHRoZSBtYXggZnJvbSB0aGUgYnVmZmVyLiAgKi8KKysgICAgICAgICAgICAgZnMtPnBvaW50X2NvbCArPSBsZW47CisrICAgICAgICAgICAgIGZzLT5wIC09IGZzLT5wb2ludF9jb2wgLSByOworKyAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgIH0KKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIC8qIERvIHdvcmQgd3JhcC4gIEdvIHRvIHRoZSBjb2x1bW4ganVzdCBwYXN0IHRoZSBtYXhpbXVtIGxpbmUKKysgICAgICAgICAgICB3aWR0aCBhbmQgc2NhbiBiYWNrIGZvciB0aGUgYmVnaW5uaW5nIG9mIHRoZSB3b3JkIHRoZXJlLgorKyAgICAgICAgICAgIFRoZW4gaW5zZXJ0IGEgbGluZSBicmVhay4gICovCisrCisrICAgICAgICAgY2hhciAqcCwgKm5leHRsaW5lOworKyAgICAgICAgIGludCBpOworKworKyAgICAgICAgIHAgPSBidWYgKyAociArIDEgLSBmcy0+cG9pbnRfY29sKTsKKysgICAgICAgICB3aGlsZSAocCA+PSBidWYgJiYgIWlzYmxhbmsgKCpwKSkKKysgICAgICAgICAgIC0tcDsKKysgICAgICAgICBuZXh0bGluZSA9IHAgKyAxOyAgICAgLyogVGhpcyB3aWxsIGJlZ2luIHRoZSBuZXh0IGxpbmUuICAqLworKworKyAgICAgICAgIGlmIChuZXh0bGluZSA+IGJ1ZikKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogU3dhbGxvdyBzZXBhcmF0aW5nIGJsYW5rcy4gICovCisrICAgICAgICAgICAgIGlmIChwID49IGJ1ZikKKysgICAgICAgICAgICAgICBkbworKyAgICAgICAgICAgICAgICAgLS1wOworKyAgICAgICAgICAgICAgIHdoaWxlIChwID49IGJ1ZiAmJiBpc2JsYW5rICgqcCkpOworKyAgICAgICAgICAgICBubCA9IHAgKyAxOyAgICAgICAvKiBUaGUgbmV3bGluZSB3aWxsIHJlcGxhY2UgdGhlIGZpcnN0IGJsYW5rLiAqLworKyAgICAgICAgICAgfQorKyAgICAgICAgIGVsc2UKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogQSBzaW5nbGUgd29yZCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBsaW5lIHdpZHRoLgorKyAgICAgICAgICAgICAgICBPaCB3ZWxsLiAgUHV0IGl0IG9uIGFuIG92ZXJsb25nIGxpbmUgYnkgaXRzZWxmLiAgKi8KKysgICAgICAgICAgICAgcCA9IGJ1ZiArIChyICsgMSAtIGZzLT5wb2ludF9jb2wpOworKyAgICAgICAgICAgICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIGxvbmcgd29yZC4gICovCisrICAgICAgICAgICAgIGRvCisrICAgICAgICAgICAgICAgKytwOworKyAgICAgICAgICAgICB3aGlsZSAocCA8IG5sICYmICFpc2JsYW5rICgqcCkpOworKyAgICAgICAgICAgICBpZiAocCA9PSBubCkKKysgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAvKiBJdCBhbHJlYWR5IGVuZHMgYSBsaW5lLiAgTm8gZnVzc2luZyByZXF1aXJlZC4gICovCisrICAgICAgICAgICAgICAgICBmcy0+cG9pbnRfY29sID0gMDsKKysgICAgICAgICAgICAgICAgIGJ1ZiA9IG5sICsgMTsKKysgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgLyogV2Ugd2lsbCBtb3ZlIHRoZSBuZXdsaW5lIHRvIHJlcGxhY2UgdGhlIGZpcnN0IGJsYW5rLiAgKi8KKysgICAgICAgICAgICAgbmwgPSBwOworKyAgICAgICAgICAgICAvKiBTd2FsbG93IHNlcGFyYXRpbmcgYmxhbmtzLiAgKi8KKysgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICArK3A7CisrICAgICAgICAgICAgIHdoaWxlIChpc2JsYW5rICgqcCkpOworKyAgICAgICAgICAgICAvKiBUaGUgbmV4dCBsaW5lIHdpbGwgc3RhcnQgaGVyZS4gICovCisrICAgICAgICAgICAgIG5leHRsaW5lID0gcDsKKysgICAgICAgICAgIH0KKysKKysgICAgICAgICAvKiBOb3RlOiBUaGVyZSBhcmUgYSBidW5jaCBvZiB0ZXN0cyBiZWxvdyBmb3IKKysgICAgICAgICAgICBORVhUTElORSA9PSBCVUYgKyBMRU4gKyAxOyB0aGlzIGNhc2UgaXMgd2hlcmUgTkwgaGFwcGVucyB0byBmYWxsCisrICAgICAgICAgICAgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCBhbmQgTkVYVExJTkUgaXMgaW4gZmFjdCBlbXB0eSAoYW5kIHNvCisrICAgICAgICAgICAgd2UgbmVlZCBub3QgYmUgY2FyZWZ1bCB0byBtYWludGFpbiBpdHMgY29udGVudHMpLiAgKi8KKysKKysgICAgICAgICBpZiAoKG5leHRsaW5lID09IGJ1ZiArIGxlbiArIDEKKysgICAgICAgICAgICAgID8gZnMtPmVuZCAtIG5sIDwgZnMtPndtYXJnaW4gKyAxCisrICAgICAgICAgICAgICA6IG5leHRsaW5lIC0gKG5sICsgMSkgPCBmcy0+d21hcmdpbikKKysgICAgICAgICAgICAgJiYgZnMtPnAgPiBuZXh0bGluZSkKKysgICAgICAgICAgIHsKKysgICAgICAgICAgICAgLyogVGhlIG1hcmdpbiBuZWVkcyBtb3JlIGJsYW5rcyB0aGFuIHdlIHJlbW92ZWQuICAqLworKyAgICAgICAgICAgICBpZiAoZnMtPmVuZCAtIGZzLT5wID4gZnMtPndtYXJnaW4gKyAxKQorKyAgICAgICAgICAgICAgIC8qIE1ha2Ugc29tZSBzcGFjZSBmb3IgdGhlbS4gICovCisrICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgc2l6ZV90IG12ID0gZnMtPnAgLSBuZXh0bGluZTsKKysgICAgICAgICAgICAgICAgIG1lbW1vdmUgKG5sICsgMSArIGZzLT53bWFyZ2luLCBuZXh0bGluZSwgbXYpOworKyAgICAgICAgICAgICAgICAgbmV4dGxpbmUgPSBubCArIDEgKyBmcy0+d21hcmdpbjsKKysgICAgICAgICAgICAgICAgIGxlbiA9IG5leHRsaW5lICsgbXYgLSBidWY7CisrICAgICAgICAgICAgICAgICAqbmwrKyA9ICdcbic7CisrICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgLyogT3V0cHV0IHRoZSBmaXJzdCBsaW5lIHNvIHdlIGNhbiB1c2UgdGhlIHNwYWNlLiAgKi8KKysgICAgICAgICAgICAgICB7CisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICAgICAgICAgIF9fZnhwcmludGYgKGZzLT5zdHJlYW0sICIlLipzXG4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkgKG5sIC0gZnMtPmJ1ZiksIGZzLT5idWYpOworKyNlbHNlCisrICAgICAgICAgICAgICAgICBpZiAobmwgPiBmcy0+YnVmKQorKyAgICAgICAgICAgICAgICAgICBmd3JpdGVfdW5sb2NrZWQgKGZzLT5idWYsIDEsIG5sIC0gZnMtPmJ1ZiwgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnXG4nLCBmcy0+c3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICAgICAgICAgIGxlbiArPSBidWYgLSBmcy0+YnVmOworKyAgICAgICAgICAgICAgICAgbmwgPSBidWYgPSBmcy0+YnVmOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgIH0KKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAvKiBXZSBjYW4gZml0IHRoZSBuZXdsaW5lIGFuZCBibGFua3MgaW4gYmVmb3JlCisrICAgICAgICAgICAgICB0aGUgbmV4dCB3b3JkLiAgKi8KKysgICAgICAgICAgICpubCsrID0gJ1xuJzsKKysKKysgICAgICAgICBpZiAobmV4dGxpbmUgLSBubCA+PSBmcy0+d21hcmdpbgorKyAgICAgICAgICAgICB8fCAobmV4dGxpbmUgPT0gYnVmICsgbGVuICsgMSAmJiBmcy0+ZW5kIC0gbmV4dGxpbmUgPj0gZnMtPndtYXJnaW4pKQorKyAgICAgICAgICAgLyogQWRkIGJsYW5rcyB1cCB0byB0aGUgd3JhcCBtYXJnaW4gY29sdW1uLiAgKi8KKysgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmcy0+d21hcmdpbjsgKytpKQorKyAgICAgICAgICAgICAqbmwrKyA9ICcgJzsKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnMtPndtYXJnaW47ICsraSkKKysjaWZkZWYgVVNFX0lOX0xJQklPCisrICAgICAgICAgICAgIGlmIChfSU9fZndpZGUgKGZzLT5zdHJlYW0sIDApID4gMCkKKysgICAgICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCcgJywgZnMtPnN0cmVhbSk7CisrICAgICAgICAgICAgIGVsc2UKKysjZW5kaWYKKysgICAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIGZzLT5zdHJlYW0pOworKworKyAgICAgICAgIC8qIENvcHkgdGhlIHRhaWwgb2YgdGhlIG9yaWdpbmFsIGJ1ZmZlciBpbnRvIHRoZSBjdXJyZW50IGJ1ZmZlcgorKyAgICAgICAgICAgIHBvc2l0aW9uLiAgKi8KKysgICAgICAgICBpZiAobmwgPCBuZXh0bGluZSkKKysgICAgICAgICAgIG1lbW1vdmUgKG5sLCBuZXh0bGluZSwgYnVmICsgbGVuIC0gbmV4dGxpbmUpOworKyAgICAgICAgIGxlbiAtPSBuZXh0bGluZSAtIGJ1ZjsKKysKKysgICAgICAgICAvKiBDb250aW51ZSB0aGUgc2NhbiBvbiB0aGUgcmVtYWluaW5nIGxpbmVzIGluIHRoZSBidWZmZXIuICAqLworKyAgICAgICAgIGJ1ZiA9IG5sOworKworKyAgICAgICAgIC8qIFJlc3RvcmUgYnVmcCB0byBpbmNsdWRlIGFsbCB0aGUgcmVtYWluaW5nIHRleHQuICAqLworKyAgICAgICAgIGZzLT5wID0gbmwgKyBsZW47CisrCisrICAgICAgICAgLyogUmVzZXQgdGhlIGNvdW50ZXIgb2Ygd2hhdCBoYXMgYmVlbiBvdXRwdXQgdGhpcyBsaW5lLiAgSWYgd21hcmdpbgorKyAgICAgICAgICAgIGlzIDAsIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGxtYXJnaW4gZ2V0dGluZyBhZGRlZCwgc28gd2Ugc2V0CisrICAgICAgICAgICAgcG9pbnRfY29sIHRvIGEgbWFnaWMgdmFsdWUgb2YgLTEgaW4gdGhhdCBjYXNlLiAgKi8KKysgICAgICAgICBmcy0+cG9pbnRfY29sID0gZnMtPndtYXJnaW4gPyBmcy0+d21hcmdpbiA6IC0xOworKyAgICAgICB9CisrICAgIH0KKysKKysgIC8qIFJlbWVtYmVyIHRoYXQgd2UndmUgc2Nhbm5lZCBhcyBmYXIgYXMgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKysgIGZzLT5wb2ludF9vZmZzID0gZnMtPnAgLSBmcy0+YnVmOworK30KKysKKysvKiBFbnN1cmUgdGhhdCBGUyBoYXMgc3BhY2UgZm9yIEFNT1VOVCBtb3JlIGJ5dGVzIGluIGl0cyBidWZmZXIsIGVpdGhlciBieQorKyAgIGdyb3dpbmcgdGhlIGJ1ZmZlciwgb3IgYnkgZmx1c2hpbmcgaXQuICBUcnVlIGlzIHJldHVybmVkIGlmZiB3ZSBzdWNjZWVkLiAqLworK2ludAorK19fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChzdHJ1Y3QgYXJncF9mbXRzdHJlYW0gKmZzLCBzaXplX3QgYW1vdW50KQorK3sKKysgIGlmICgoc2l6ZV90KSAoZnMtPmVuZCAtIGZzLT5wKSA8IGFtb3VudCkKKysgICAgeworKyAgICAgIHNzaXplX3Qgd3JvdGU7CisrCisrICAgICAgLyogRmx1c2ggRlMncyBidWZmZXIuICAqLworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChmcyk7CisrCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICBfX2Z4cHJpbnRmIChmcy0+c3RyZWFtLCAiJS4qcyIsIChpbnQpIChmcy0+cCAtIGZzLT5idWYpLCBmcy0+YnVmKTsKKysgICAgICB3cm90ZSA9IGZzLT5wIC0gZnMtPmJ1ZjsKKysjZWxzZQorKyAgICAgIHdyb3RlID0gZndyaXRlX3VubG9ja2VkIChmcy0+YnVmLCAxLCBmcy0+cCAtIGZzLT5idWYsIGZzLT5zdHJlYW0pOworKyNlbmRpZgorKyAgICAgIGlmICh3cm90ZSA9PSBmcy0+cCAtIGZzLT5idWYpCisrICAgICAgIHsKKysgICAgICAgICBmcy0+cCA9IGZzLT5idWY7CisrICAgICAgICAgZnMtPnBvaW50X29mZnMgPSAwOworKyAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgZnMtPnAgLT0gd3JvdGU7CisrICAgICAgICAgZnMtPnBvaW50X29mZnMgLT0gd3JvdGU7CisrICAgICAgICAgbWVtbW92ZSAoZnMtPmJ1ZiwgZnMtPmJ1ZiArIHdyb3RlLCBmcy0+cCAtIGZzLT5idWYpOworKyAgICAgICAgIHJldHVybiAwOworKyAgICAgICB9CisrCisrICAgICAgaWYgKChzaXplX3QpIChmcy0+ZW5kIC0gZnMtPmJ1ZikgPCBhbW91bnQpCisrICAgICAgIC8qIEdvdHRhIGdyb3cgdGhlIGJ1ZmZlci4gICovCisrICAgICAgIHsKKysgICAgICAgICBzaXplX3Qgb2xkX3NpemUgPSBmcy0+ZW5kIC0gZnMtPmJ1ZjsKKysgICAgICAgICBzaXplX3QgbmV3X3NpemUgPSBvbGRfc2l6ZSArIGFtb3VudDsKKysgICAgICAgICBjaGFyICpuZXdfYnVmOworKworKyAgICAgICAgIGlmIChuZXdfc2l6ZSA8IG9sZF9zaXplIHx8ICEgKG5ld19idWYgPSByZWFsbG9jIChmcy0+YnVmLCBuZXdfc2l6ZSkpKQorKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBfX3NldF9lcnJubyAoRU5PTUVNKTsKKysgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgZnMtPmJ1ZiA9IG5ld19idWY7CisrICAgICAgICAgZnMtPmVuZCA9IG5ld19idWYgKyBuZXdfc2l6ZTsKKysgICAgICAgICBmcy0+cCA9IGZzLT5idWY7CisrICAgICAgIH0KKysgICAgfQorKworKyAgcmV0dXJuIDE7CisrfQorKworK3NzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RydWN0IGFyZ3BfZm10c3RyZWFtICpmcywgY29uc3QgY2hhciAqZm10LCAuLi4pCisreworKyAgaW50IG91dDsKKysgIHNpemVfdCBhdmFpbDsKKysgIHNpemVfdCBzaXplX2d1ZXNzID0gUFJJTlRGX1NJWkVfR1VFU1M7IC8qIEhvdyBtdWNoIHNwYWNlIHRvIHJlc2VydmUuICovCisrCisrICBkbworKyAgICB7CisrICAgICAgdmFfbGlzdCBhcmdzOworKworKyAgICAgIGlmICghIF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlIChmcywgc2l6ZV9ndWVzcykpCisrICAgICAgIHJldHVybiAtMTsKKysKKysgICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKysgICAgICBhdmFpbCA9IGZzLT5lbmQgLSBmcy0+cDsKKysgICAgICBvdXQgPSBfX3ZzbnByaW50ZiAoZnMtPnAsIGF2YWlsLCBmbXQsIGFyZ3MpOworKyAgICAgIHZhX2VuZCAoYXJncyk7CisrICAgICAgaWYgKChzaXplX3QpIG91dCA+PSBhdmFpbCkKKysgICAgICAgc2l6ZV9ndWVzcyA9IG91dCArIDE7CisrICAgIH0KKysgIHdoaWxlICgoc2l6ZV90KSBvdXQgPj0gYXZhaWwpOworKworKyAgZnMtPnAgKz0gb3V0OworKworKyAgcmV0dXJuIG91dDsKKyt9CisrI2lmIDAKKysvKiBOb3QgZXhwb3J0ZWQuICAqLworKyNpZmRlZiB3ZWFrX2FsaWFzCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wcmludGYsIGFyZ3BfZm10c3RyZWFtX3ByaW50ZikKKysjZW5kaWYKKysjZW5kaWYKKysKKysjZW5kaWYgLyogIUFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCAqLworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtZm10c3RyZWFtLmggYi9saWJ1YXJncC9hcmdwLWZtdHN0cmVhbS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2E3YzgzNAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1mbXRzdHJlYW0uaAorQEAgLTAsMCArMSwzMTQgQEAKKysvKiBXb3JkLXdyYXBwaW5nIGFuZCBsaW5lLXRydW5jYXRpbmcgc3RyZWFtcy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLgorKworKyAgIE1vZGlmaWVkIGZvciB1Q2xpYmMgYnk6IFNhbHZhdG9yZSBDcm8gPHNhbHZhdG9yZS5jcm8gYXQgc3QuY29tPgorKyovCisrCisrLyogVGhpcyBwYWNrYWdlIGVtdWxhdGVzIGdsaWJjIGBsaW5lX3dyYXBfc3RyZWFtJyBzZW1hbnRpY3MgZm9yIHN5c3RlbXMgdGhhdAorKyAgIGRvbid0IGhhdmUgdGhhdC4gIElmIHRoZSBzeXN0ZW0gZG9lcyBoYXZlIGl0LCBpdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IKKysgICB0aGF0LiAgVGhpcyBoZWFkZXIgZmlsZSBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseSB3aGlsZSBjb21waWxpbmcgYXJncCwgYW5kCisrICAgc2hvdWxkbid0IGJlIGluc3RhbGxlZC4gICovCisrCisrI2lmbmRlZiBfQVJHUF9GTVRTVFJFQU1fSAorKyNkZWZpbmUgX0FSR1BfRk1UU1RSRUFNX0gKKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHVuaXN0ZC5oPgorKworKyNpZm5kZWYgX19hdHRyaWJ1dGVfXworKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fIDwgNSkgfHwgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pCisrIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKysjIGVuZGlmCisrLyogVGhlIF9fLXByb3RlY3RlZCB2YXJpYW50cyBvZiBgZm9ybWF0JyBhbmQgYHByaW50ZicgYXR0cmlidXRlcworKyAgIGFyZSBhY2NlcHRlZCBieSBnY2MgdmVyc2lvbnMgMi42LjQgKGVmZmVjdGl2ZWx5IDIuNykgYW5kIGxhdGVyLiAgKi8KKysjIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDcpIHx8IGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorKyMgIGRlZmluZSBfX2Zvcm1hdF9fIGZvcm1hdAorKyMgIGRlZmluZSBfX3ByaW50Zl9fIHByaW50ZgorKyMgZW5kaWYKKysjZW5kaWYKKysKKysjaWYgMCAvKiB1Q2xpYmM6IGRpc2FibGVkICovCisrI2lmICAgIChfTElCQyAtIDAgJiYgIWRlZmluZWQgKFVTRV9JTl9MSUJJTykpIFwKKysgICAgfHwgKGRlZmluZWQgKF9fR05VX0xJQlJBUllfXykgJiYgZGVmaW5lZCAoSEFWRV9MSU5FV1JBUF9IKSkKKysvKiBsaW5lX3dyYXBfc3RyZWFtIGlzIGF2YWlsYWJsZSwgc28gdXNlIHRoYXQuICAqLworKyNkZWZpbmUgQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQCisrI2VuZGlmCisrI2Vsc2UKKysvKiBsaW5lX3dyYXAgc3RyZWFtIE5PVCBhdmFpbGFibGUgKi8KKysjIHVuZGVmIEFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUAorKyNlbmRpZgorKworKyNpZmRlZiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAKKysvKiBKdXN0IGJlIGEgc2ltcGxlIHdyYXBwZXIgZm9yIGxpbmVfd3JhcF9zdHJlYW07IHRoZSBzZW1hbnRpY3MgYXJlCisrICAgKnNsaWdodGx5KiBkaWZmZXJlbnQsIGFzIGxpbmVfd3JhcF9zdHJlYW0gZG9lc24ndCBhY3R1YWxseSBtYWtlIGEgbmV3CisrICAgb2JqZWN0LCBpdCBqdXN0IG1vZGlmaWVzIHRoZSBnaXZlbiBzdHJlYW0gKHJldmVyc2libHkpIHRvIGRvCisrICAgbGluZS13cmFwcGluZy4gIFNpbmNlIHdlIGNvbnRyb2wgd2hvIHVzZXMgdGhpcyBjb2RlLCBpdCBkb2Vzbid0IG1hdHRlci4gICovCisrCisrI2luY2x1ZGUgPGxpbmV3cmFwLmg+CisrCisrdHlwZWRlZiBGSUxFICphcmdwX2ZtdHN0cmVhbV90OworKworKyNkZWZpbmUgYXJncF9tYWtlX2ZtdHN0cmVhbSBsaW5lX3dyYXBfc3RyZWFtCisrI2RlZmluZSBfX2FyZ3BfbWFrZV9mbXRzdHJlYW0gbGluZV93cmFwX3N0cmVhbQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fZnJlZSBsaW5lX3Vud3JhcF9zdHJlYW0KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fZnJlZSBsaW5lX3Vud3JhcF9zdHJlYW0KKysKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHV0YyhmcyxjaCkgcHV0YyhjaCxmcykKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3B1dGMoZnMsY2gpIHB1dGMoY2gsZnMpCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dHMoZnMsc3RyKSBmcHV0cyhzdHIsZnMpCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9wdXRzKGZzLHN0cikgZnB1dHMoc3RyLGZzKQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV93cml0ZShmcyxzdHIsbGVuKSBmd3JpdGUoc3RyLDEsbGVuLGZzKQorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fd3JpdGUoZnMsc3RyLGxlbikgZndyaXRlKHN0ciwxLGxlbixmcykKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIGZwcmludGYKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3ByaW50ZiBmcHJpbnRmCisrCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX2xtYXJnaW4gbGluZV93cmFwX2xtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX2xtYXJnaW4gbGluZV93cmFwX2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gbGluZV93cmFwX3NldF9sbWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiBsaW5lX3dyYXBfc2V0X2xtYXJnaW4KKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcm1hcmdpbiBsaW5lX3dyYXBfcm1hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcm1hcmdpbiBsaW5lX3dyYXBfcm1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiBsaW5lX3dyYXBfc2V0X3JtYXJnaW4KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIGxpbmVfd3JhcF9zZXRfcm1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIGxpbmVfd3JhcF93bWFyZ2luCisrI2RlZmluZSBhcmdwX2ZtdHN0cmVhbV93bWFyZ2luIGxpbmVfd3JhcF93bWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIGxpbmVfd3JhcF9zZXRfd21hcmdpbgorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gbGluZV93cmFwX3NldF93bWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IGxpbmVfd3JhcF9wb2ludAorKyNkZWZpbmUgYXJncF9mbXRzdHJlYW1fcG9pbnQgbGluZV93cmFwX3BvaW50CisrCisrI2Vsc2UgLyogIUFSR1BfRk1UU1RSRUFNX1VTRV9MSU5FV1JBUCAqLworKy8qIEd1ZXNzIHdlIGhhdmUgdG8gZGVmaW5lIG91ciBvd24gdmVyc2lvbi4gICovCisrCisrI2lmbmRlZiBfX2NvbnN0CisrI2RlZmluZSBfX2NvbnN0IGNvbnN0CisrI2VuZGlmCisrCisrc3RydWN0IGFyZ3BfZm10c3RyZWFtCisreworKyAgRklMRSAqc3RyZWFtOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzdHJlYW0gd2UncmUgb3V0cHV0dGluZyB0by4gICovCisrCisrICBzaXplX3QgbG1hcmdpbiwgcm1hcmdpbjsgICAgIC8qIExlZnQgYW5kIHJpZ2h0IG1hcmdpbnMuICAqLworKyAgc3NpemVfdCB3bWFyZ2luOyAgICAgICAgICAgICAvKiBNYXJnaW4gdG8gd3JhcCB0bywgb3IgLTEgdG8gdHJ1bmNhdGUuICAqLworKworKyAgLyogUG9pbnQgaW4gYnVmZmVyIHRvIHdoaWNoIHdlJ3ZlIHByb2Nlc3NlZCBmb3Igd3JhcHBpbmcsIGJ1dCBub3Qgb3V0cHV0LiAgKi8KKysgIHNpemVfdCBwb2ludF9vZmZzOworKyAgLyogT3V0cHV0IGNvbHVtbiBhdCBQT0lOVF9PRkZTLCBvciAtMSBtZWFuaW5nIDAgYnV0IGRvbid0IGFkZCBsbWFyZ2luLiAgKi8KKysgIHNzaXplX3QgcG9pbnRfY29sOworKworKyAgY2hhciAqYnVmOyAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyLiAgKi8KKysgIGNoYXIgKnA7ICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBlbmQgb2YgdGV4dCBpbiBCVUYuICovCisrICBjaGFyICplbmQ7ICAgICAgICAgICAgICAgICAgIC8qIEFic29sdXRlIGVuZCBvZiBCVUYuICAqLworK307CisrCisrdHlwZWRlZiBzdHJ1Y3QgYXJncF9mbXRzdHJlYW0gKmFyZ3BfZm10c3RyZWFtX3Q7CisrCisrLyogUmV0dXJuIGFuIGFyZ3BfZm10c3RyZWFtIHRoYXQgb3V0cHV0cyB0byBTVFJFQU0sIGFuZCB3aGljaCBwcmVmaXhlcyBsaW5lcworKyAgIHdyaXR0ZW4gb24gaXQgd2l0aCBMTUFSR0lOIHNwYWNlcyBhbmQgbGltaXRzIHRoZW0gdG8gUk1BUkdJTiBjb2x1bW5zCisrICAgdG90YWwuICBJZiBXTUFSR0lOID49IDAsIHdvcmRzIHRoYXQgZXh0ZW5kIHBhc3QgUk1BUkdJTiBhcmUgd3JhcHBlZCBieQorKyAgIHJlcGxhY2luZyB0aGUgd2hpdGVzcGFjZSBiZWZvcmUgdGhlbSB3aXRoIGEgbmV3bGluZSBhbmQgV01BUkdJTiBzcGFjZXMuCisrICAgT3RoZXJ3aXNlLCBjaGFycyBiZXlvbmQgUk1BUkdJTiBhcmUgc2ltcGx5IGRyb3BwZWQgdW50aWwgYSBuZXdsaW5lLgorKyAgIFJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICAqLworK2V4dGVybiBhcmdwX2ZtdHN0cmVhbV90IF9fYXJncF9tYWtlX2ZtdHN0cmVhbSAoRklMRSAqX19zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgX193bWFyZ2luKTsKKytleHRlcm4gYXJncF9mbXRzdHJlYW1fdCBhcmdwX21ha2VfZm10c3RyZWFtIChGSUxFICpfX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xtYXJnaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ybWFyZ2luLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NpemVfdCBfX3dtYXJnaW4pOworKworKy8qIEZsdXNoIF9fRlMgdG8gaXRzIHN0cmVhbSwgYW5kIGZyZWUgaXQgKGJ1dCBkb24ndCBjbG9zZSB0aGUgc3RyZWFtKS4gICovCisrZXh0ZXJuIHZvaWQgX19hcmdwX2ZtdHN0cmVhbV9mcmVlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMpOworK2V4dGVybiB2b2lkIGFyZ3BfZm10c3RyZWFtX2ZyZWUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrCisrZXh0ZXJuIHNzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mbXQsIC4uLikKKysgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDMpKSk7CisrZXh0ZXJuIHNzaXplX3QgYXJncF9mbXRzdHJlYW1fcHJpbnRmIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mbXQsIC4uLikKKysgICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDMpKSk7CisrCisrZXh0ZXJuIGludCBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgaW50IF9fY2gpOworK2V4dGVybiBpbnQgYXJncF9mbXRzdHJlYW1fcHV0YyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBpbnQgX19jaCk7CisrCisrZXh0ZXJuIGludCBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgX19jb25zdCBjaGFyICpfX3N0cik7CisrZXh0ZXJuIGludCBhcmdwX2ZtdHN0cmVhbV9wdXRzIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIF9fY29uc3QgY2hhciAqX19zdHIpOworKworK2V4dGVybiBzaXplX3QgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyLCBzaXplX3QgX19sZW4pOworK2V4dGVybiBzaXplX3QgYXJncF9mbXRzdHJlYW1fd3JpdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHIsIHNpemVfdCBfX2xlbik7CisrCisrLyogQWNjZXNzIG1hY3JvcyBmb3IgdmFyaW91cyBiaXRzIG9mIHN0YXRlLiAgKi8KKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX2xtYXJnaW4oX19mcykgKChfX2ZzKS0+bG1hcmdpbikKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3JtYXJnaW4oX19mcykgKChfX2ZzKS0+cm1hcmdpbikKKysjZGVmaW5lIGFyZ3BfZm10c3RyZWFtX3dtYXJnaW4oX19mcykgKChfX2ZzKS0+d21hcmdpbikKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiBhcmdwX2ZtdHN0cmVhbV9sbWFyZ2luCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3JtYXJnaW4gYXJncF9mbXRzdHJlYW1fcm1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIGFyZ3BfZm10c3RyZWFtX3dtYXJnaW4KKysKKysvKiBTZXQgX19GUydzIGxlZnQgbWFyZ2luIHRvIExNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytleHRlcm4gc2l6ZV90IGFyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sbWFyZ2luKTsKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbG1hcmdpbik7CisrCisrLyogU2V0IF9fRlMncyByaWdodCBtYXJnaW4gdG8gX19STUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcm1hcmdpbik7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3JtYXJnaW4pOworKworKy8qIFNldCBfX0ZTJ3Mgd3JhcCBtYXJnaW4gdG8gX19XTUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fd21hcmdpbik7CisrZXh0ZXJuIHNpemVfdCBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3dtYXJnaW4pOworKworKy8qIFJldHVybiB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgY3VycmVudCBvdXRwdXQgcG9pbnQgaW4gX19GUy4gICovCisrZXh0ZXJuIHNpemVfdCBhcmdwX2ZtdHN0cmVhbV9wb2ludCAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKTsKKytleHRlcm4gc2l6ZV90IF9fYXJncF9mbXRzdHJlYW1fcG9pbnQgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrCisrLyogSW50ZXJuYWwgcm91dGluZXMuICAqLworK2V4dGVybiB2b2lkIF9hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIHZvaWQgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcyk7CisrZXh0ZXJuIGludCBfYXJncF9mbXRzdHJlYW1fZW5zdXJlIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX2Ftb3VudCk7CisrZXh0ZXJuIGludCBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX19hbW91bnQpOworKworKyNpZmRlZiBfX09QVElNSVpFX18KKysvKiBJbmxpbmUgdmVyc2lvbnMgb2YgYWJvdmUgcm91dGluZXMuICAqLworKworKyNpZiAhX0xJQkMKKysjZGVmaW5lIF9fYXJncF9mbXRzdHJlYW1fcHV0YyBhcmdwX2ZtdHN0cmVhbV9wdXRjCisrI2RlZmluZSBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgYXJncF9mbXRzdHJlYW1fcHV0cworKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV93cml0ZSBhcmdwX2ZtdHN0cmVhbV93cml0ZQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiBhcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiBhcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiBhcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbgorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9wb2ludCBhcmdwX2ZtdHN0cmVhbV9wb2ludAorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZQorKyNkZWZpbmUgX19hcmdwX2ZtdHN0cmVhbV9lbnN1cmUgX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZQorKyNlbmRpZgorKworKyNpZm5kZWYgQVJHUF9GU19FSQorKyNkZWZpbmUgQVJHUF9GU19FSSBfX2V4dGVybl9pbmxpbmUKKysjZW5kaWYKKysKKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fd3JpdGUgKGFyZ3BfZm10c3RyZWFtX3QgX19mcywKKysgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHIsIHNpemVfdCBfX2xlbikKKyt7CisrICBpZiAoX19mcy0+cCArIF9fbGVuIDw9IF9fZnMtPmVuZCB8fCBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoX19mcywgX19sZW4pKQorKyAgICB7CisrICAgICAgbWVtY3B5IChfX2ZzLT5wLCBfX3N0ciwgX19sZW4pOworKyAgICAgIF9fZnMtPnAgKz0gX19sZW47CisrICAgICAgcmV0dXJuIF9fbGVuOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAwOworK30KKysKKytBUkdQX0ZTX0VJIGludAorK19fYXJncF9mbXRzdHJlYW1fcHV0cyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBfX2NvbnN0IGNoYXIgKl9fc3RyKQorK3sKKysgIHNpemVfdCBfX2xlbiA9IHN0cmxlbiAoX19zdHIpOworKyAgaWYgKF9fbGVuKQorKyAgICB7CisrICAgICAgc2l6ZV90IF9fd3JvdGUgPSBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChfX2ZzLCBfX3N0ciwgX19sZW4pOworKyAgICAgIHJldHVybiBfX3dyb3RlID09IF9fbGVuID8gMCA6IC0xOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiAwOworK30KKysKKytBUkdQX0ZTX0VJIGludAorK19fYXJncF9mbXRzdHJlYW1fcHV0YyAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBpbnQgX19jaCkKKyt7CisrICBpZiAoX19mcy0+cCA8IF9fZnMtPmVuZCB8fCBfX2FyZ3BfZm10c3RyZWFtX2Vuc3VyZSAoX19mcywgMSkpCisrICAgIHJldHVybiAqX19mcy0+cCsrID0gX19jaDsKKysgIGVsc2UKKysgICAgcmV0dXJuIEVPRjsKKyt9CisrCisrLyogU2V0IF9fRlMncyBsZWZ0IG1hcmdpbiB0byBfX0xNQVJHSU4gYW5kIHJldHVybiB0aGUgb2xkIHZhbHVlLiAgKi8KKytBUkdQX0ZTX0VJIHNpemVfdAorK19fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKGFyZ3BfZm10c3RyZWFtX3QgX19mcywgc2l6ZV90IF9fbG1hcmdpbikKKyt7CisrICBzaXplX3QgX19vbGQ7CisrICBpZiAoKHNpemVfdCkgKF9fZnMtPnAgLSBfX2ZzLT5idWYpID4gX19mcy0+cG9pbnRfb2ZmcykKKysgICAgX19hcmdwX2ZtdHN0cmVhbV91cGRhdGUgKF9fZnMpOworKyAgX19vbGQgPSBfX2ZzLT5sbWFyZ2luOworKyAgX19mcy0+bG1hcmdpbiA9IF9fbG1hcmdpbjsKKysgIHJldHVybiBfX29sZDsKKyt9CisrCisrLyogU2V0IF9fRlMncyByaWdodCBtYXJnaW4gdG8gX19STUFSR0lOIGFuZCByZXR1cm4gdGhlIG9sZCB2YWx1ZS4gICovCisrQVJHUF9GU19FSSBzaXplX3QKKytfX2FyZ3BfZm10c3RyZWFtX3NldF9ybWFyZ2luIChhcmdwX2ZtdHN0cmVhbV90IF9fZnMsIHNpemVfdCBfX3JtYXJnaW4pCisreworKyAgc2l6ZV90IF9fb2xkOworKyAgaWYgKChzaXplX3QpIChfX2ZzLT5wIC0gX19mcy0+YnVmKSA+IF9fZnMtPnBvaW50X29mZnMpCisrICAgIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlIChfX2ZzKTsKKysgIF9fb2xkID0gX19mcy0+cm1hcmdpbjsKKysgIF9fZnMtPnJtYXJnaW4gPSBfX3JtYXJnaW47CisrICByZXR1cm4gX19vbGQ7CisrfQorKworKy8qIFNldCBGUydzIHdyYXAgbWFyZ2luIHRvIF9fV01BUkdJTiBhbmQgcmV0dXJuIHRoZSBvbGQgdmFsdWUuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzLCBzaXplX3QgX193bWFyZ2luKQorK3sKKysgIHNpemVfdCBfX29sZDsKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICBfX29sZCA9IF9fZnMtPndtYXJnaW47CisrICBfX2ZzLT53bWFyZ2luID0gX193bWFyZ2luOworKyAgcmV0dXJuIF9fb2xkOworK30KKysKKysvKiBSZXR1cm4gdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGN1cnJlbnQgb3V0cHV0IHBvaW50IGluIF9fRlMuICAqLworK0FSR1BfRlNfRUkgc2l6ZV90CisrX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoYXJncF9mbXRzdHJlYW1fdCBfX2ZzKQorK3sKKysgIGlmICgoc2l6ZV90KSAoX19mcy0+cCAtIF9fZnMtPmJ1ZikgPiBfX2ZzLT5wb2ludF9vZmZzKQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3VwZGF0ZSAoX19mcyk7CisrICByZXR1cm4gX19mcy0+cG9pbnRfY29sID49IDAgPyBfX2ZzLT5wb2ludF9jb2wgOiAwOworK30KKysKKysjaWYgIV9MSUJDCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fcHV0YworKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3B1dHMKKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV93cml0ZQorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4KKysjdW5kZWYgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbgorKyN1bmRlZiBfX2FyZ3BfZm10c3RyZWFtX3BvaW50CisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fdXBkYXRlCisrI3VuZGVmIF9fYXJncF9mbXRzdHJlYW1fZW5zdXJlCisrI2VuZGlmCisrCisrI2VuZGlmIC8qIF9fT1BUSU1JWkVfXyAqLworKworKyNlbmRpZiAvKiBBUkdQX0ZNVFNUUkVBTV9VU0VfTElORVdSQVAgKi8KKysKKysjZW5kaWYgLyogYXJncC1mbXRzdHJlYW0uaCAqLworZGlmZiAtLWdpdCBhL2xpYnVhcmdwL2FyZ3AtZnMteGlubC5jIGIvbGlidWFyZ3AvYXJncC1mcy14aW5sLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi40NzNjYmJkCistLS0gL2Rldi9udWxsCisrKysgYi9saWJ1YXJncC9hcmdwLWZzLXhpbmwuYworQEAgLTAsMCArMSw0NCBAQAorKy8qIFJlYWwgZGVmaW5pdGlvbnMgZm9yIGV4dGVybiBpbmxpbmUgZnVuY3Rpb25zIGluIGFyZ3AtZm10c3RyZWFtLmgKKysgICBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBBUkdQX0ZTX0VJCisrI3VuZGVmIF9fT1BUSU1JWkVfXworKyNkZWZpbmUgX19PUFRJTUlaRV9fIDEKKysjaW5jbHVkZSAiYXJncC1mbXRzdHJlYW0uaCIKKysKKysjaWYgMAorKy8qIE5vdCBleHBvcnRlZC4gICovCisrLyogQWRkIHdlYWsgYWxpYXNlcy4gICovCisrI2lmIF9MSUJDIC0gMCAmJiAhZGVmaW5lZCAoQVJHUF9GTVRTVFJFQU1fVVNFX0xJTkVXUkFQKSAmJiBkZWZpbmVkICh3ZWFrX2FsaWFzKQorKworK3dlYWtfYWxpYXMgKF9fYXJncF9mbXRzdHJlYW1fcHV0YywgYXJncF9mbXRzdHJlYW1fcHV0YykKKyt3ZWFrX2FsaWFzIChfX2FyZ3BfZm10c3RyZWFtX3B1dHMsIGFyZ3BfZm10c3RyZWFtX3B1dHMpCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV93cml0ZSwgYXJncF9mbXRzdHJlYW1fd3JpdGUpCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiwgYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4pCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9zZXRfcm1hcmdpbiwgYXJncF9mbXRzdHJlYW1fc2V0X3JtYXJnaW4pCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiwgYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4pCisrd2Vha19hbGlhcyAoX19hcmdwX2ZtdHN0cmVhbV9wb2ludCwgYXJncF9mbXRzdHJlYW1fcG9pbnQpCisrCisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1oZWxwLmMgYi9saWJ1YXJncC9hcmdwLWhlbHAuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU4YTVlNmUKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtaGVscC5jCitAQCAtMCwwICsxLDE4ODIgQEAKKysvKiBIaWVyYXJjaGlhbCBhcmd1bWVudCBwYXJzaW5nIGhlbHAgb3V0cHV0CisrICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrIyBkZWZpbmUgX0dOVV9TT1VSQ0UgICAxCisrI2VuZGlmCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrLyogQUlYIHJlcXVpcmVzIHRoaXMgdG8gYmUgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBmaWxlLiAgKi8KKysjaWZuZGVmIF9fR05VQ19fCisrIyBpZiBIQVZFX0FMTE9DQV9IIHx8IGRlZmluZWQgX0xJQkMKKysjICBpbmNsdWRlIDxhbGxvY2EuaD4KKysjIGVsc2UKKysjICBpZmRlZiBfQUlYCisrI3ByYWdtYSBhbGxvY2EKKysjICBlbHNlCisrIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCisrY2hhciAqYWxsb2NhICgpOworKyMgICBlbmRpZgorKyMgIGVuZGlmCisrIyBlbmRpZgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdGRkZWYuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8c3RkYXJnLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpZmRlZiBfTElCQworKyMgaW5jbHVkZSA8d2NoYXIuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZuZGVmIF8KKysvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLiAgKi8KKysjIGlmIChkZWZpbmVkIEhBVkVfTElCSU5UTF9IIHx8IGRlZmluZWQgX0xJQkMpICYmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisrIyAgaWZkZWYgX0xJQkMKKysjICAgdW5kZWYgZGdldHRleHQKKysjICAgZGVmaW5lIGRnZXR0ZXh0KGRvbWFpbiwgbXNnaWQpIFwKKysgIElOVFVTRShfX2RjZ2V0dGV4dCkgKGRvbWFpbiwgbXNnaWQsIExDX01FU1NBR0VTKQorKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgZGVmaW5lIGRnZXR0ZXh0KGRvbWFpbiwgbXNnaWQpIChtc2dpZCkKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfTElCQworKyMgaWYgSEFWRV9TVFJFUlJPUl9SCisrIyAgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SCisrY2hhciAqc3RyZXJyb3JfciAoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKTsKKysjICBlbmRpZgorKyMgZWxzZQorKyMgIGlmICFIQVZFX0RFQ0xfU1RSRVJST1IKKytjaGFyICpzdHJlcnJvciAoaW50IGVycm51bSk7CisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysjaW5jbHVkZSAiYXJncC1mbXRzdHJlYW0uaCIKKysjaW5jbHVkZSA8c3RkYm9vbC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKysKKysjaWZuZGVmIFNJWkVfTUFYCisrIyBkZWZpbmUgU0laRV9NQVggKChzaXplX3QpIC0xKQorKyNlbmRpZgorKworKy8qIFVzZXItc2VsZWN0YWJsZSAodXNpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUpIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKysKKysgICBUaGVzZSBtYXkgYmUgc3BlY2lmaWVkIGluIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbGxlZCBgQVJHUF9IRUxQX0ZNVCcsCisrICAgd2l0aCBhIGNvbnRlbnRzIGxpa2U6ICBWQVIxPVZBTDEsVkFSMj1WQUwyLEJPT0xWQVIyLG5vLUJPT0xWQVIyCisrICAgV2hlcmUgVkFMbiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlci4gIFRoZSBsaXN0IG9mIHZhcmlhYmxlcyBpcyBpbiB0aGUKKysgICBVUEFSQU1fTkFNRVMgdmVjdG9yLCBiZWxvdy4gICovCisrCisrLyogRGVmYXVsdCBwYXJhbWV0ZXJzLiAgKi8KKysjZGVmaW5lIERVUF9BUkdTICAgICAgMCAgICAgICAgICAgICAgICAvKiBUcnVlIGlmIG9wdGlvbiBhcmd1bWVudCBjYW4gYmUgZHVwbGljYXRlZC4gKi8KKysjZGVmaW5lIERVUF9BUkdTX05PVEUgMSAgICAgICAgICAgICAgICAvKiBUcnVlIHRvIHByaW50IGEgbm90ZSBhYm91dCBkdXBsaWNhdGUgYXJncy4gKi8KKysjZGVmaW5lIFNIT1JUX09QVF9DT0wgMiAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggc2hvcnQgb3B0aW9ucyBzdGFydCAqLworKyNkZWZpbmUgTE9OR19PUFRfQ09MICA2ICAgICAgICAgICAgICAgIC8qIGNvbHVtbiBpbiB3aGljaCBsb25nIG9wdGlvbnMgc3RhcnQgKi8KKysjZGVmaW5lIERPQ19PUFRfQ09MICAgMiAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggZG9jIG9wdGlvbnMgc3RhcnQgKi8KKysjZGVmaW5lIE9QVF9ET0NfQ09MICAyOSAgICAgICAgICAgICAgICAvKiBjb2x1bW4gaW4gd2hpY2ggb3B0aW9uIHRleHQgc3RhcnRzICovCisrI2RlZmluZSBIRUFERVJfQ09MICAgIDEgICAgICAgICAgICAgICAgLyogY29sdW1uIGluIHdoaWNoIGdyb3VwIGhlYWRlcnMgYXJlIHByaW50ZWQgKi8KKysjZGVmaW5lIFVTQUdFX0lOREVOVCAxMiAgICAgICAgICAgICAgICAvKiBpbmRlbnRhdGlvbiBvZiB3cmFwcGVkIHVzYWdlIGxpbmVzICovCisrI2RlZmluZSBSTUFSR0lOICAgICAgNzkgICAgICAgICAgICAgICAgLyogcmlnaHQgbWFyZ2luIHVzZWQgZm9yIHdyYXBwaW5nICovCisrCisrLyogVXNlci1zZWxlY3RhYmxlICh1c2luZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSkgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorKyAgIFRoZXkgbXVzdCBhbGwgYmUgb2YgdHlwZSBgaW50JyBmb3IgdGhlIHBhcnNpbmcgY29kZSB0byB3b3JrLiAgKi8KKytzdHJ1Y3QgdXBhcmFtcworK3sKKysgIC8qIElmIHRydWUsIGFyZ3VtZW50cyBmb3IgYW4gb3B0aW9uIGFyZSBzaG93biB3aXRoIGJvdGggc2hvcnQgYW5kIGxvbmcKKysgICAgIG9wdGlvbnMsIGV2ZW4gd2hlbiBhIGdpdmVuIG9wdGlvbiBoYXMgYm90aCwgZS5nLiBgLXggQVJHLCAtLWxvbmd4PUFSRycuCisrICAgICBJZiBmYWxzZSwgdGhlbiBpZiBhbiBvcHRpb24gaGFzIGJvdGgsIHRoZSBhcmd1bWVudCBpcyBvbmx5IHNob3duIHdpdGgKKysgICAgIHRoZSBsb25nIG9uZSwgZS5nLiwgYC14LCAtLWxvbmd4PUFSRycsIGFuZCBhIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0CisrICAgICB0aGlzIHJlYWxseSBtZWFucyBib3RoIGlzIHByaW50ZWQgYmVsb3cgdGhlIG9wdGlvbnMuICAqLworKyAgaW50IGR1cF9hcmdzOworKworKyAgLyogVGhpcyBpcyB0cnVlIGlmIHdoZW4gRFVQX0FSR1MgaXMgZmFsc2UsIGFuZCBzb21lIGR1cGxpY2F0ZSBhcmd1bWVudHMgaGF2ZQorKyAgICAgYmVlbiBzdXBwcmVzc2VkLCBhbiBleHBsYW5hdG9yeSBtZXNzYWdlIHNob3VsZCBiZSBwcmludGVkLiAgKi8KKysgIGludCBkdXBfYXJnc19ub3RlOworKworKyAgLyogVmFyaW91cyBvdXRwdXQgY29sdW1ucy4gICovCisrICBpbnQgc2hvcnRfb3B0X2NvbDsKKysgIGludCBsb25nX29wdF9jb2w7CisrICBpbnQgZG9jX29wdF9jb2w7CisrICBpbnQgb3B0X2RvY19jb2w7CisrICBpbnQgaGVhZGVyX2NvbDsKKysgIGludCB1c2FnZV9pbmRlbnQ7CisrICBpbnQgcm1hcmdpbjsKKyt9OworKworKy8qIFRoaXMgaXMgYSBnbG9iYWwgdmFyaWFibGUsIGFzIHVzZXIgb3B0aW9ucyBhcmUgb25seSBldmVyIHJlYWQgb25jZS4gICovCisrc3RhdGljIHN0cnVjdCB1cGFyYW1zIHVwYXJhbXMgPSB7CisrICBEVVBfQVJHUywgRFVQX0FSR1NfTk9URSwKKysgIFNIT1JUX09QVF9DT0wsIExPTkdfT1BUX0NPTCwgRE9DX09QVF9DT0wsIE9QVF9ET0NfQ09MLCBIRUFERVJfQ09MLAorKyAgVVNBR0VfSU5ERU5ULCBSTUFSR0lOCisrfTsKKysKKysvKiBBIHBhcnRpY3VsYXIgdXBhcmFtLCBhbmQgd2hhdCB0aGUgdXNlciBuYW1lIGlzLiAgKi8KKytzdHJ1Y3QgdXBhcmFtX25hbWUKKyt7CisrICBjb25zdCBjaGFyIG5hbWVbMTRdOyAgICAgICAgIC8qIFVzZXIgbmFtZS4gICovCisrICBib29sIGlzX2Jvb2w7ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2hldGhlciBpdCdzIGBib29sZWFuJy4gICovCisrICB1aW50OF90IHVwYXJhbXNfb2ZmczsgICAgICAgICAgICAgICAgLyogTG9jYXRpb24gb2YgdGhlIChpbnQpIGZpZWxkIGluIFVQQVJBTVMuICAqLworK307CisrCisrLyogVGhlIG5hbWUtZmllbGQgbWFwcGluZ3Mgd2Uga25vdyBhYm91dC4gICovCisrc3RhdGljIGNvbnN0IHN0cnVjdCB1cGFyYW1fbmFtZSB1cGFyYW1fbmFtZXNbXSA9CisreworKyAgeyAiZHVwLWFyZ3MiLCAgICAgICB0cnVlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGR1cF9hcmdzKSB9LAorKyAgeyAiZHVwLWFyZ3Mtbm90ZSIsICB0cnVlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGR1cF9hcmdzX25vdGUpIH0sCisrICB7ICJzaG9ydC1vcHQtY29sIiwgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIHNob3J0X29wdF9jb2wpIH0sCisrICB7ICJsb25nLW9wdC1jb2wiLCAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIGxvbmdfb3B0X2NvbCkgfSwKKysgIHsgImRvYy1vcHQtY29sIiwgICAgZmFsc2UsIG9mZnNldG9mIChzdHJ1Y3QgdXBhcmFtcywgZG9jX29wdF9jb2wpIH0sCisrICB7ICJvcHQtZG9jLWNvbCIsICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIG9wdF9kb2NfY29sKSB9LAorKyAgeyAiaGVhZGVyLWNvbCIsICAgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCBoZWFkZXJfY29sKSB9LAorKyAgeyAidXNhZ2UtaW5kZW50IiwgICBmYWxzZSwgb2Zmc2V0b2YgKHN0cnVjdCB1cGFyYW1zLCB1c2FnZV9pbmRlbnQpIH0sCisrICB7ICJybWFyZ2luIiwgICAgICAgIGZhbHNlLCBvZmZzZXRvZiAoc3RydWN0IHVwYXJhbXMsIHJtYXJnaW4pIH0KKyt9OworKyNkZWZpbmUgbnVwYXJhbV9uYW1lcyAoc2l6ZW9mICh1cGFyYW1fbmFtZXMpIC8gc2l6ZW9mICh1cGFyYW1fbmFtZXNbMF0pKQorKworKy8qIFJlYWQgdXNlciBvcHRpb25zIGZyb20gdGhlIGVudmlyb25tZW50LCBhbmQgZmlsbCBpbiBVUEFSQU1TIGFwcHJvcGlhdGVseS4gICovCisrc3RhdGljIHZvaWQKKytmaWxsX2luX3VwYXJhbXMgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBjb25zdCBjaGFyICp2YXIgPSBnZXRlbnYgKCJBUkdQX0hFTFBfRk1UIik7CisrCisrI2RlZmluZSBTS0lQV1MocCkgZG8geyB3aGlsZSAoaXNzcGFjZSAoKnApKSBwKys7IH0gd2hpbGUgKDApOworKworKyAgaWYgKHZhcikKKysgICAgLyogUGFyc2UgdmFyLiAqLworKyAgICB3aGlsZSAoKnZhcikKKysgICAgICB7CisrICAgICAgIFNLSVBXUyAodmFyKTsKKysKKysgICAgICAgaWYgKGlzYWxwaGEgKCp2YXIpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIHNpemVfdCB2YXJfbGVuOworKyAgICAgICAgICAgY29uc3Qgc3RydWN0IHVwYXJhbV9uYW1lICp1bjsKKysgICAgICAgICAgIGludCB1bnNwZWMgPSAwLCB2YWwgPSAwOworKyAgICAgICAgICAgY29uc3QgY2hhciAqYXJnID0gdmFyOworKworKyAgICAgICAgICAgd2hpbGUgKGlzYWxudW0gKCphcmcpIHx8ICphcmcgPT0gJy0nIHx8ICphcmcgPT0gJ18nKQorKyAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgICAgIHZhcl9sZW4gPSBhcmcgLSB2YXI7CisrCisrICAgICAgICAgICBTS0lQV1MgKGFyZyk7CisrCisrICAgICAgICAgICBpZiAoKmFyZyA9PSAnXDAnIHx8ICphcmcgPT0gJywnKQorKyAgICAgICAgICAgICB1bnNwZWMgPSAxOworKyAgICAgICAgICAgZWxzZSBpZiAoKmFyZyA9PSAnPScpCisrICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgICAgICAgICBTS0lQV1MgKGFyZyk7CisrICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgIGlmICh1bnNwZWMpCisrICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICBpZiAodmFyWzBdID09ICduJyAmJiB2YXJbMV0gPT0gJ28nICYmIHZhclsyXSA9PSAnLScpCisrICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgIHZhbCA9IDA7CisrICAgICAgICAgICAgICAgICAgIHZhciArPSAzOworKyAgICAgICAgICAgICAgICAgICB2YXJfbGVuIC09IDM7CisrICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgdmFsID0gMTsKKysgICAgICAgICAgICAgfQorKyAgICAgICAgICAgZWxzZSBpZiAoaXNkaWdpdCAoKmFyZykpCisrICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICB2YWwgPSBhdG9pIChhcmcpOworKyAgICAgICAgICAgICAgIHdoaWxlIChpc2RpZ2l0ICgqYXJnKSkKKysgICAgICAgICAgICAgICAgIGFyZysrOworKyAgICAgICAgICAgICAgIFNLSVBXUyAoYXJnKTsKKysgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgdW4gPSB1cGFyYW1fbmFtZXM7CisrICAgICAgICAgICBzaXplX3QgdTsKKysgICAgICAgICAgIGZvciAodSA9IDA7IHUgPCBudXBhcmFtX25hbWVzOyArK3VuLCArK3UpCisrICAgICAgICAgICAgIGlmIChzdHJsZW4gKHVuLT5uYW1lKSA9PSB2YXJfbGVuCisrICAgICAgICAgICAgICAgICAmJiBzdHJuY21wICh2YXIsIHVuLT5uYW1lLCB2YXJfbGVuKSA9PSAwKQorKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIGlmICh1bnNwZWMgJiYgIXVuLT5pc19ib29sKQorKyAgICAgICAgICAgICAgICAgICBhcmdwX2ZhaWx1cmUgKHN0YXRlLCAwLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXAorKyUuKnM6IEFSR1BfSEVMUF9GTVQgcGFyYW1ldGVyIHJlcXVpcmVzIGEgdmFsdWUiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHZhcl9sZW4sIHZhcik7CisrICAgICAgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICAgICooaW50ICopKChjaGFyICopJnVwYXJhbXMgKyB1bi0+dXBhcmFtc19vZmZzKSA9IHZhbDsKKysgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgIGlmICh1ID09IG51cGFyYW1fbmFtZXMpCisrICAgICAgICAgICAgIGFyZ3BfZmFpbHVyZSAoc3RhdGUsIDAsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLCAiXAorKyUuKnM6IFVua25vd24gQVJHUF9IRUxQX0ZNVCBwYXJhbWV0ZXIiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHZhcl9sZW4sIHZhcik7CisrCisrICAgICAgICAgICB2YXIgPSBhcmc7CisrICAgICAgICAgICBpZiAoKnZhciA9PSAnLCcpCisrICAgICAgICAgICAgIHZhcisrOworKyAgICAgICAgIH0KKysgICAgICAgZWxzZSBpZiAoKnZhcikKKysgICAgICAgICB7CisrICAgICAgICAgICBhcmdwX2ZhaWx1cmUgKHN0YXRlLCAwLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2FyYmFnZSBpbiBBUkdQX0hFTFBfRk1UOiAlcyIpLCB2YXIpOworKyAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgfQorKyAgICAgIH0KKyt9CisrCisrLyogUmV0dXJucyB0cnVlIGlmIE9QVCBoYXNuJ3QgYmVlbiBtYXJrZWQgaW52aXNpYmxlLiAgVmlzaWJpbGl0eSBvbmx5IGFmZmVjdHMKKysgICB3aGV0aGVyIE9QVCBpcyBkaXNwbGF5ZWQgb3IgdXNlZCBpbiBzb3J0aW5nLCBub3Qgb3B0aW9uIHNoYWRvd2luZy4gICovCisrI2RlZmluZSBvdmlzaWJsZShvcHQpICghICgob3B0KS0+ZmxhZ3MgJiBPUFRJT05fSElEREVOKSkKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGlzIGFuIGFsaWFzIGZvciBhbiBlYXJsaWVyIG9wdGlvbi4gICovCisrI2RlZmluZSBvYWxpYXMob3B0KSAoKG9wdCktPmZsYWdzICYgT1BUSU9OX0FMSUFTKQorKworKy8qIFJldHVybnMgdHJ1ZSBpZiBPUFQgaXMgYW4gZG9jdW1lbnRhdGlvbi1vbmx5IGVudHJ5LiAgKi8KKysjZGVmaW5lIG9kb2Mob3B0KSAoKG9wdCktPmZsYWdzICYgT1BUSU9OX0RPQykKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGlzIHRoZSBlbmQtb2YtbGlzdCBtYXJrZXIgZm9yIGEgbGlzdCBvZiBvcHRpb25zLiAgKi8KKysjZGVmaW5lIG9lbmQob3B0KSBfX29wdGlvbl9pc19lbmQgKG9wdCkKKysKKysvKiBSZXR1cm5zIHRydWUgaWYgT1BUIGhhcyBhIHNob3J0IG9wdGlvbi4gICovCisrI2RlZmluZSBvc2hvcnQob3B0KSBfX29wdGlvbl9pc19zaG9ydCAob3B0KQorKworKy8qCisrICAgVGhlIGhlbHAgZm9ybWF0IGZvciBhIHBhcnRpY3VsYXIgb3B0aW9uIGlzIGxpa2U6CisrCisrICAgICAteEFSRywgLXlBUkcsIC0tbG9uZzE9QVJHLCAtLWxvbmcyPUFSRyAgICAgICAgRG9jdW1lbnRhdGlvbi4uLgorKworKyAgIFdoZXJlIEFSRyB3aWxsIGJlIG9taXR0ZWQgaWYgdGhlcmUncyBubyBhcmd1bWVudCwgZm9yIHRoaXMgb3B0aW9uLCBvcgorKyAgIHdpbGwgYmUgc3Vycm91bmRlZCBieSAiWyIgYW5kICJdIiBhcHByb3BpYXRlbHkgaWYgdGhlIGFyZ3VtZW50IGlzCisrICAgb3B0aW9uYWwuICBUaGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgaXMgd29yZC13cmFwcGVkIGFwcHJvcGlhdGVseSwgYW5kIGlmCisrICAgdGhlIGxpc3Qgb2Ygb3B0aW9ucyBpcyBsb25nIGVub3VnaCwgaXQgd2lsbCBiZSBzdGFydGVkIG9uIGEgc2VwYXJhdGUgbGluZS4KKysgICBJZiB0aGVyZSBhcmUgbm8gc2hvcnQgb3B0aW9ucyBmb3IgYSBnaXZlbiBvcHRpb24sIHRoZSBmaXJzdCBsb25nIG9wdGlvbiBpcworKyAgIGluZGVudGVkIHNsaWdobHkgaW4gYSB3YXkgdGhhdCdzIHN1cHBvc2VkIHRvIG1ha2UgbW9zdCBsb25nIG9wdGlvbnMgYXBwZWFyCisrICAgdG8gYmUgaW4gYSBzZXBhcmF0ZSBjb2x1bW4uCisrCisrICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgb3V0cHV0IChmcm9tIHBzKToKKysKKysgICAgIC1wIFBJRCwgLS1waWQ9UElEICAgICAgICAgIExpc3QgdGhlIHByb2Nlc3MgUElECisrICAgICAgICAtLXBncnA9UEdSUCAgICAgICAgICAgIExpc3QgcHJvY2Vzc2VzIGluIHRoZSBwcm9jZXNzIGdyb3VwIFBHUlAKKysgICAgIC1QLCAteCwgLS1uby1wYXJlbnQgICAgICAgIEluY2x1ZGUgcHJvY2Vzc2VzIHdpdGhvdXQgcGFyZW50cworKyAgICAgLVEsIC0tYWxsLWZpZWxkcyAgICAgICAgICAgRG9uJ3QgZWxpZGUgdW51c2FibGUgZmllbGRzIChub3JtYWxseSBpZiB0aGVyZSdzCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWUgcmVhc29uIHBzIGNhbid0IHByaW50IGEgZmllbGQgZm9yIGFueQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLCBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgb3V0cHV0IGVudGlyZWx5KQorKyAgICAgLXIsIC0tcmV2ZXJzZSwgLS1ncmF0dWl0b3VzbHktbG9uZy1yZXZlcnNlLW9wdGlvbgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXZlcnNlIHRoZSBvcmRlciBvZiBhbnkgc29ydAorKyAgICAgICAgLS1zZXNzaW9uWz1TSURdICAgICAgICBBZGQgdGhlIHByb2Nlc3NlcyBmcm9tIHRoZSBzZXNzaW9uIFNJRCAod2hpY2gKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gdGhlIHNpZCBvZiB0aGUgY3VycmVudCBwcm9jZXNzKQorKworKyAgICBIZXJlIGFyZSBzb21lIG1vcmUgb3B0aW9uczoKKysgICAgIC1mIFpPVCwgLS1mb29ubHk9Wk9UICAgICAgIEdsb3JrIGEgZm9vbmx5CisrICAgICAteiwgLS16YXphICAgICAgICAgICAgICAgICBTbml0IGEgemFyCisrCisrICAgICAtPywgLS1oZWxwICAgICAgICAgICAgICAgICBHaXZlIHRoaXMgaGVscCBsaXN0CisrICAgICAgICAtLXVzYWdlICAgICAgICAgICAgICAgIEdpdmUgYSBzaG9ydCB1c2FnZSBtZXNzYWdlCisrICAgICAtViwgLS12ZXJzaW9uICAgICAgICAgICAgICBQcmludCBwcm9ncmFtIHZlcnNpb24KKysKKysgICBUaGUgc3RydWN0IGFyZ3Bfb3B0aW9uIGFycmF5IGZvciB0aGUgYWJvdmUgY291bGQgbG9vayBsaWtlOgorKworKyAgIHsKKysgICAgIHsicGlkIiwgICAgICAgJ3AnLCAgICAgICJQSUQiLCAgMCwgIkxpc3QgdGhlIHByb2Nlc3MgUElEIn0sCisrICAgICB7InBncnAiLCAgICAgIE9QVF9QR1JQLCAiUEdSUCIsIDAsICJMaXN0IHByb2Nlc3NlcyBpbiB0aGUgcHJvY2VzcyBncm91cCBQR1JQIn0sCisrICAgICB7Im5vLXBhcmVudCIsICdQJywgICAgICAgICAgICAgIDAsICAgICAwLCAiSW5jbHVkZSBwcm9jZXNzZXMgd2l0aG91dCBwYXJlbnRzIn0sCisrICAgICB7MCwgICAgICAgICAgICd4JywgICAgICAgMCwgICAgIE9QVElPTl9BTElBU30sCisrICAgICB7ImFsbC1maWVsZHMiLCdRJywgICAgICAgMCwgICAgIDAsICJEb24ndCBlbGlkZSB1bnVzYWJsZSBmaWVsZHMgKG5vcm1hbGx5IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGlmIHRoZXJlJ3Mgc29tZSByZWFzb24gcHMgY2FuJ3QiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBwcmludCBhIGZpZWxkIGZvciBhbnkgcHJvY2VzcywgaXQncyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZW1vdmVkIGZyb20gdGhlIG91dHB1dCBlbnRpcmVseSkiIH0sCisrICAgICB7InJldmVyc2UiLCAgICdyJywgICAgICAgMCwgICAgIDAsICJSZXZlcnNlIHRoZSBvcmRlciBvZiBhbnkgc29ydCJ9LAorKyAgICAgeyJncmF0dWl0b3VzbHktbG9uZy1yZXZlcnNlLW9wdGlvbiIsIDAsIDAsIE9QVElPTl9BTElBU30sCisrICAgICB7InNlc3Npb24iLCAgIE9QVF9TRVNTLCAgIlNJRCIsIE9QVElPTl9BUkdfT1BUSU9OQUwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGQgdGhlIHByb2Nlc3NlcyBmcm9tIHRoZSBzZXNzaW9uIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgU0lEICh3aGljaCBkZWZhdWx0cyB0byB0aGUgc2lkIG9mIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdGhlIGN1cnJlbnQgcHJvY2VzcykiIH0sCisrCisrICAgICB7MCwwLDAsMCwgIkhlcmUgYXJlIHNvbWUgbW9yZSBvcHRpb25zOiJ9LAorKyAgICAgeyJmb29ubHkiLCAnZicsICJaT1QiLCAwLCAiR2xvcmsgYSBmb29ubHkifSwKKysgICAgIHsiemF6YSIsICd6JywgMCwgMCwgIlNuaXQgYSB6YXIifSwKKysKKysgICAgIHswfQorKyAgIH0KKysKKysgICBOb3RlIHRoYXQgdGhlIGxhc3QgdGhyZWUgb3B0aW9ucyBhcmUgYXV0b21hdGljYWxseSBzdXBwbGllZCBieSBhcmdwX3BhcnNlLAorKyAgIHVubGVzcyB5b3UgdGVsbCBpdCBub3QgdG8gd2l0aCBBUkdQX05PX0hFTFAuCisrCisrKi8KKysKKysvKiBSZXR1cm5zIHRydWUgaWYgQ0ggb2NjdXJzIGJldHdlZW4gQkVHIGFuZCBFTkQuICAqLworK3N0YXRpYyBpbnQKKytmaW5kX2NoYXIgKGNoYXIgY2gsIGNoYXIgKmJlZywgY2hhciAqZW5kKQorK3sKKysgIHdoaWxlIChiZWcgPCBlbmQpCisrICAgIGlmICgqYmVnID09IGNoKQorKyAgICAgIHJldHVybiAxOworKyAgICBlbHNlCisrICAgICAgYmVnKys7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RydWN0IGhvbF9jbHVzdGVyOyAgICAgICAgICAgIC8qIGZ3ZCBkZWNsICovCisrCisrc3RydWN0IGhvbF9lbnRyeQorK3sKKysgIC8qIEZpcnN0IG9wdGlvbi4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdDsKKysgIC8qIE51bWJlciBvZiBvcHRpb25zIChpbmNsdWRpbmcgYWxpYXNlcykuICAqLworKyAgdW5zaWduZWQgbnVtOworKworKyAgLyogQSBwb2ludGVycyBpbnRvIHRoZSBIT0wncyBzaG9ydF9vcHRpb25zIGZpZWxkLCB0byB0aGUgZmlyc3Qgc2hvcnQgb3B0aW9uCisrICAgICBsZXR0ZXIgZm9yIHRoaXMgZW50cnkuICBUaGUgb3JkZXIgb2YgdGhlIGNoYXJhY3RlcnMgZm9sbG93aW5nIHRoaXMgcG9pbnQKKysgICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBvcmRlciBvZiBvcHRpb25zIHBvaW50ZWQgdG8gYnkgT1BULCBhbmQgdGhlcmUgYXJlIGF0CisrICAgICBtb3N0IE5VTS4gIEEgc2hvcnQgb3B0aW9uIHJlY29yZGVkIGluIGEgb3B0aW9uIGZvbGxvd2luZyBPUFQgaXMgb25seQorKyAgICAgdmFsaWQgaWYgaXQgb2NjdXJzIGluIHRoZSByaWdodCBwbGFjZSBpbiBTSE9SVF9PUFRJT05TIChvdGhlcndpc2UgaXQncworKyAgICAgcHJvYmFibHkgYmVlbiBzaGFkb3dlZCBieSBzb21lIG90aGVyIGVudHJ5KS4gICovCisrICBjaGFyICpzaG9ydF9vcHRpb25zOworKworKyAgLyogRW50cmllcyBhcmUgc29ydGVkIGJ5IHRoZWlyIGdyb3VwIGZpcnN0LCBpbiB0aGUgb3JkZXI6CisrICAgICAgIDEsIDIsIC4uLiwgbiwgMCwgLW0sIC4uLiwgLTIsIC0xCisrICAgICBhbmQgdGhlbiBhbHBoYWJldGljYWxseSB3aXRoaW4gZWFjaCBncm91cC4gIFRoZSBkZWZhdWx0IGlzIDAuICAqLworKyAgaW50IGdyb3VwOworKworKyAgLyogVGhlIGNsdXN0ZXIgb2Ygb3B0aW9ucyB0aGlzIGVudHJ5IGJlbG9uZ3MgdG8sIG9yIDAgaWYgbm9uZS4gICovCisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsdXN0ZXI7CisrCisrICAvKiBUaGUgYXJncCBmcm9tIHdoaWNoIHRoaXMgb3B0aW9uIGNhbWUuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrfTsKKysKKysvKiBBIGNsdXN0ZXIgb2YgZW50cmllcyB0byByZWZsZWN0IHRoZSBhcmdwIHRyZWUgc3RydWN0dXJlLiAgKi8KKytzdHJ1Y3QgaG9sX2NsdXN0ZXIKKyt7CisrICAvKiBBIGRlc2NyaXB0aXZlIGhlYWRlciBwcmludGVkIGJlZm9yZSBvcHRpb25zIGluIHRoaXMgY2x1c3Rlci4gICovCisrICBjb25zdCBjaGFyICpoZWFkZXI7CisrCisrICAvKiBVc2VkIHRvIG9yZGVyIGNsdXN0ZXJzIHdpdGhpbiB0aGUgc2FtZSBncm91cCB3aXRoIHRoZSBzYW1lIHBhcmVudCwKKysgICAgIGFjY29yZGluZyB0byB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBvY2N1cnJlZCBpbiB0aGUgcGFyZW50IGFyZ3AncyBjaGlsZAorKyAgICAgbGlzdC4gICovCisrICBpbnQgaW5kZXg7CisrCisrICAvKiBIb3cgdG8gc29ydCB0aGlzIGNsdXN0ZXIgd2l0aCByZXNwZWN0IHRvIG9wdGlvbnMgYW5kIG90aGVyIGNsdXN0ZXJzIGF0IHRoZQorKyAgICAgc2FtZSBkZXB0aCAoY2x1c3RlcnMgYWx3YXlzIGZvbGxvdyBvcHRpb25zIGluIHRoZSBzYW1lIGdyb3VwKS4gICovCisrICBpbnQgZ3JvdXA7CisrCisrICAvKiBUaGUgY2x1c3RlciB0byB3aGljaCB0aGlzIGNsdXN0ZXIgYmVsb25ncywgb3IgMCBpZiBpdCdzIGF0IHRoZSBiYXNlCisrICAgICBsZXZlbC4gICovCisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKnBhcmVudDsKKysKKysgIC8qIFRoZSBhcmdwIGZyb20gd2hpY2ggdGhpcyBjbHVzdGVyIGlzIChldmVudHVhbGx5KSBkZXJpdmVkLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogVGhlIGRpc3RhbmNlIHRoaXMgY2x1c3RlciBpcyBmcm9tIHRoZSByb290LiAgKi8KKysgIGludCBkZXB0aDsKKysKKysgIC8qIENsdXN0ZXJzIGluIGEgZ2l2ZW4gaG9sIGFyZSBrZXB0IGluIGEgbGlua2VkIGxpc3QsIHRvIG1ha2UgZnJlZWluZyB0aGVtCisrICAgICBwb3NzaWJsZS4gICovCisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKm5leHQ7CisrfTsKKysKKysvKiBBIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgaGVscC4gICovCisrc3RydWN0IGhvbAorK3sKKysgIC8qIEFuIGFycmF5IG9mIGhvbF9lbnRyeSdzLiAgKi8KKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJpZXM7CisrICAvKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhpcyBob2wuICBJZiB0aGlzIGZpZWxkIGlzIHplcm8sIHRoZSBvdGhlcnMKKysgICAgIGFyZSB1bmRlZmluZWQuICAqLworKyAgdW5zaWduZWQgbnVtX2VudHJpZXM7CisrCisrICAvKiBBIHN0cmluZyBjb250YWluaW5nIGFsbCBzaG9ydCBvcHRpb25zIGluIHRoaXMgSE9MLiAgRWFjaCBlbnRyeSBjb250YWlucworKyAgICAgcG9pbnRlcnMgaW50byB0aGlzIHN0cmluZywgc28gdGhlIG9yZGVyIGNhbid0IGJlIG1lc3NlZCB3aXRoIGJsaW5kbHkuICAqLworKyAgY2hhciAqc2hvcnRfb3B0aW9uczsKKysKKysgIC8qIENsdXN0ZXJzIG9mIGVudHJpZXMgaW4gdGhpcyBob2wuICAqLworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyczsKKyt9OworKworKy8qIENyZWF0ZSBhIHN0cnVjdCBob2wgZnJvbSB0aGUgb3B0aW9ucyBpbiBBUkdQLiAgQ0xVU1RFUiBpcyB0aGUKKysgICBob2xfY2x1c3RlciBpbiB3aGljaCB0aGVzZSBlbnRyaWVzIG9jY3VyLCBvciAwLCBpZiBhdCB0aGUgcm9vdC4gICovCisrc3RhdGljIHN0cnVjdCBob2wgKgorK21ha2VfaG9sIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgc3RydWN0IGhvbF9jbHVzdGVyICpjbHVzdGVyKQorK3sKKysgIGNoYXIgKnNvOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHRzID0gYXJncC0+b3B0aW9uczsKKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5OworKyAgdW5zaWduZWQgbnVtX3Nob3J0X29wdGlvbnMgPSAwOworKyAgc3RydWN0IGhvbCAqaG9sID0gbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob2wpKTsKKysKKysgIGFzc2VydCAoaG9sKTsKKysKKysgIGhvbC0+bnVtX2VudHJpZXMgPSAwOworKyAgaG9sLT5jbHVzdGVycyA9IDA7CisrCisrICBpZiAob3B0cykKKysgICAgeworKyAgICAgIGludCBjdXJfZ3JvdXAgPSAwOworKworKyAgICAgIC8qIFRoZSBmaXJzdCBvcHRpb24gbXVzdCBub3QgYmUgYW4gYWxpYXMuICAqLworKyAgICAgIGFzc2VydCAoISBvYWxpYXMgKG9wdHMpKTsKKysKKysgICAgICAvKiBDYWxjdWxhdGUgdGhlIHNwYWNlIG5lZWRlZC4gICovCisrICAgICAgZm9yIChvID0gb3B0czsgISBvZW5kIChvKTsgbysrKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKCEgb2FsaWFzIChvKSkKKysgICAgICAgICAgIGhvbC0+bnVtX2VudHJpZXMrKzsKKysgICAgICAgICBpZiAob3Nob3J0IChvKSkKKysgICAgICAgICAgIG51bV9zaG9ydF9vcHRpb25zKys7ICAgICAgICAvKiBUaGlzIGlzIGFuIHVwcGVyIGJvdW5kLiAgKi8KKysgICAgICAgfQorKworKyAgICAgIGhvbC0+ZW50cmllcyA9IG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSAqIGhvbC0+bnVtX2VudHJpZXMpOworKyAgICAgIGhvbC0+c2hvcnRfb3B0aW9ucyA9IG1hbGxvYyAobnVtX3Nob3J0X29wdGlvbnMgKyAxKTsKKysKKysgICAgICBhc3NlcnQgKGhvbC0+ZW50cmllcyAmJiBob2wtPnNob3J0X29wdGlvbnMpOworKyNpZiBTSVpFX01BWCA8PSBVSU5UX01BWAorKyAgICAgIGFzc2VydCAoaG9sLT5udW1fZW50cmllcyA8PSBTSVpFX01BWCAvIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKyNlbmRpZgorKworKyAgICAgIC8qIEZpbGwgaW4gdGhlIGVudHJpZXMuICAqLworKyAgICAgIHNvID0gaG9sLT5zaG9ydF9vcHRpb25zOworKyAgICAgIGZvciAobyA9IG9wdHMsIGVudHJ5ID0gaG9sLT5lbnRyaWVzOyAhIG9lbmQgKG8pOyBlbnRyeSsrKQorKyAgICAgICB7CisrICAgICAgICAgZW50cnktPm9wdCA9IG87CisrICAgICAgICAgZW50cnktPm51bSA9IDA7CisrICAgICAgICAgZW50cnktPnNob3J0X29wdGlvbnMgPSBzbzsKKysgICAgICAgICBlbnRyeS0+Z3JvdXAgPSBjdXJfZ3JvdXAgPQorKyAgICAgICAgICAgby0+Z3JvdXAKKysgICAgICAgICAgID8gby0+Z3JvdXAKKysgICAgICAgICAgIDogKCghby0+bmFtZSAmJiAhby0+a2V5KQorKyAgICAgICAgICAgICAgPyBjdXJfZ3JvdXAgKyAxCisrICAgICAgICAgICAgICA6IGN1cl9ncm91cCk7CisrICAgICAgICAgZW50cnktPmNsdXN0ZXIgPSBjbHVzdGVyOworKyAgICAgICAgIGVudHJ5LT5hcmdwID0gYXJncDsKKysKKysgICAgICAgICBkbworKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBlbnRyeS0+bnVtKys7CisrICAgICAgICAgICAgIGlmIChvc2hvcnQgKG8pICYmICEgZmluZF9jaGFyIChvLT5rZXksIGhvbC0+c2hvcnRfb3B0aW9ucywgc28pKQorKyAgICAgICAgICAgICAgIC8qIE8gaGFzIGEgdmFsaWQgc2hvcnQgb3B0aW9uIHdoaWNoIGhhc24ndCBhbHJlYWR5IGJlZW4gdXNlZC4qLworKyAgICAgICAgICAgICAgICpzbysrID0gby0+a2V5OworKyAgICAgICAgICAgICBvKys7CisrICAgICAgICAgICB9CisrICAgICAgICAgd2hpbGUgKCEgb2VuZCAobykgJiYgb2FsaWFzIChvKSk7CisrICAgICAgIH0KKysgICAgICAqc28gPSAnXDAnOyAgICAgICAgICAgICAgLyogbnVsbCB0ZXJtaW5hdGVkIHNvIHdlIGNhbiBmaW5kIHRoZSBsZW5ndGggKi8KKysgICAgfQorKworKyAgcmV0dXJuIGhvbDsKKyt9CisrCisrLyogQWRkIGEgbmV3IGNsdXN0ZXIgdG8gSE9MLCB3aXRoIHRoZSBnaXZlbiBHUk9VUCBhbmQgSEVBREVSICh0YWtlbiBmcm9tIHRoZQorKyAgIGFzc29jaWF0ZWQgYXJncCBjaGlsZCBsaXN0IGVudHJ5KSwgSU5ERVgsIGFuZCBQQVJFTlQsIGFuZCByZXR1cm4gYSBwb2ludGVyCisrICAgdG8gaXQuICBBUkdQIGlzIHRoZSBhcmdwIHRoYXQgdGhpcyBjbHVzdGVyIHJlc3VsdHMgZnJvbS4gICovCisrc3RhdGljIHN0cnVjdCBob2xfY2x1c3RlciAqCisraG9sX2FkZF9jbHVzdGVyIChzdHJ1Y3QgaG9sICpob2wsIGludCBncm91cCwgY29uc3QgY2hhciAqaGVhZGVyLCBpbnQgaW5kZXgsCisrICAgICAgICAgICAgICAgIHN0cnVjdCBob2xfY2x1c3RlciAqcGFyZW50LCBjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCkKKyt7CisrICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsID0gbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob2xfY2x1c3RlcikpOworKyAgaWYgKGNsKQorKyAgICB7CisrICAgICAgY2wtPmdyb3VwID0gZ3JvdXA7CisrICAgICAgY2wtPmhlYWRlciA9IGhlYWRlcjsKKysKKysgICAgICBjbC0+aW5kZXggPSBpbmRleDsKKysgICAgICBjbC0+cGFyZW50ID0gcGFyZW50OworKyAgICAgIGNsLT5hcmdwID0gYXJncDsKKysgICAgICBjbC0+ZGVwdGggPSBwYXJlbnQgPyBwYXJlbnQtPmRlcHRoICsgMSA6IDA7CisrCisrICAgICAgY2wtPm5leHQgPSBob2wtPmNsdXN0ZXJzOworKyAgICAgIGhvbC0+Y2x1c3RlcnMgPSBjbDsKKysgICAgfQorKyAgcmV0dXJuIGNsOworK30KKysKKysvKiBGcmVlIEhPTCBhbmQgYW55IHJlc291cmNlcyBpdCB1c2VzLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9mcmVlIChzdHJ1Y3QgaG9sICpob2wpCisreworKyAgc3RydWN0IGhvbF9jbHVzdGVyICpjbCA9IGhvbC0+Y2x1c3RlcnM7CisrCisrICB3aGlsZSAoY2wpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKm5leHQgPSBjbC0+bmV4dDsKKysgICAgICBmcmVlIChjbCk7CisrICAgICAgY2wgPSBuZXh0OworKyAgICB9CisrCisrICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgIHsKKysgICAgICBmcmVlIChob2wtPmVudHJpZXMpOworKyAgICAgIGZyZWUgKGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrICAgIH0KKysKKysgIGZyZWUgKGhvbCk7CisrfQorKworK3N0YXRpYyBpbnQKKytob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnksCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKSwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICB1bnNpZ25lZCBub3B0czsKKysgIGludCB2YWwgPSAwOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsICpyZWFsID0gZW50cnktPm9wdDsKKysgIGNoYXIgKnNvID0gZW50cnktPnNob3J0X29wdGlvbnM7CisrCisrICBmb3IgKG9wdCA9IHJlYWwsIG5vcHRzID0gZW50cnktPm51bTsgbm9wdHMgPiAwICYmICF2YWw7IG9wdCsrLCBub3B0cy0tKQorKyAgICBpZiAob3Nob3J0IChvcHQpICYmICpzbyA9PSBvcHQtPmtleSkKKysgICAgICB7CisrICAgICAgIGlmICghb2FsaWFzIChvcHQpKQorKyAgICAgICAgIHJlYWwgPSBvcHQ7CisrICAgICAgIGlmIChvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB2YWwgPSAoKmZ1bmMpKG9wdCwgcmVhbCwgZG9tYWluLCBjb29raWUpOworKyAgICAgICBzbysrOworKyAgICAgIH0KKysKKysgIHJldHVybiB2YWw7CisrfQorKworK3N0YXRpYyBfX2lubGluZV9fIGludAorK19fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKytob2xfZW50cnlfbG9uZ19pdGVyYXRlIChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSwKKysgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZG9tYWluLCB2b2lkICpjb29raWUpCisreworKyAgdW5zaWduZWQgbm9wdHM7CisrICBpbnQgdmFsID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LCAqcmVhbCA9IGVudHJ5LT5vcHQ7CisrCisrICBmb3IgKG9wdCA9IHJlYWwsIG5vcHRzID0gZW50cnktPm51bTsgbm9wdHMgPiAwICYmICF2YWw7IG9wdCsrLCBub3B0cy0tKQorKyAgICBpZiAob3B0LT5uYW1lKQorKyAgICAgIHsKKysgICAgICAgaWYgKCFvYWxpYXMgKG9wdCkpCisrICAgICAgICAgcmVhbCA9IG9wdDsKKysgICAgICAgaWYgKG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHZhbCA9ICgqZnVuYykob3B0LCByZWFsLCBkb21haW4sIGNvb2tpZSk7CisrICAgICAgfQorKworKyAgcmV0dXJuIHZhbDsKKyt9CisrCisrLyogSXRlcmF0b3IgdGhhdCByZXR1cm5zIHRydWUgZm9yIHRoZSBmaXJzdCBzaG9ydCBvcHRpb24uICAqLworK3N0YXRpYyBfX2lubGluZV9fIGludAorK3VudGlsX3Nob3J0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRvbWFpbiwgdm9pZCAqY29va2llKQorK3sKKysgIHJldHVybiBvc2hvcnQgKG9wdCkgPyBvcHQtPmtleSA6IDA7CisrfQorKworKy8qIFJldHVybnMgdGhlIGZpcnN0IHZhbGlkIHNob3J0IG9wdGlvbiBpbiBFTlRSWSwgb3IgMCBpZiB0aGVyZSBpcyBub25lLiAgKi8KKytzdGF0aWMgY2hhcgorK2hvbF9lbnRyeV9maXJzdF9zaG9ydCAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkpCisreworKyAgcmV0dXJuIGhvbF9lbnRyeV9zaG9ydF9pdGVyYXRlIChlbnRyeSwgdW50aWxfc2hvcnQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFyZ3AtPmFyZ3BfZG9tYWluLCAwKTsKKyt9CisrCisrLyogUmV0dXJucyB0aGUgZmlyc3QgdmFsaWQgbG9uZyBvcHRpb24gaW4gRU5UUlksIG9yIDAgaWYgdGhlcmUgaXMgbm9uZS4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2hvbF9lbnRyeV9maXJzdF9sb25nIChjb25zdCBzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSkKKyt7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdDsKKysgIHVuc2lnbmVkIG51bTsKKysgIGZvciAob3B0ID0gZW50cnktPm9wdCwgbnVtID0gZW50cnktPm51bTsgbnVtID4gMDsgb3B0KyssIG51bS0tKQorKyAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgIHJldHVybiBvcHQtPm5hbWU7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogUmV0dXJucyB0aGUgZW50cnkgaW4gSE9MIHdpdGggdGhlIGxvbmcgb3B0aW9uIG5hbWUgTkFNRSwgb3IgMCBpZiB0aGVyZSBpcworKyAgIG5vbmUuICAqLworK3N0YXRpYyBzdHJ1Y3QgaG9sX2VudHJ5ICoKKytob2xfZmluZF9lbnRyeSAoc3RydWN0IGhvbCAqaG9sLCBjb25zdCBjaGFyICpuYW1lKQorK3sKKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5ID0gaG9sLT5lbnRyaWVzOworKyAgdW5zaWduZWQgbnVtX2VudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzOworKworKyAgd2hpbGUgKG51bV9lbnRyaWVzLS0gPiAwKQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQgPSBlbnRyeS0+b3B0OworKyAgICAgIHVuc2lnbmVkIG51bV9vcHRzID0gZW50cnktPm51bTsKKysKKysgICAgICB3aGlsZSAobnVtX29wdHMtLSA+IDApCisrICAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkgJiYgc3RyY21wIChvcHQtPm5hbWUsIG5hbWUpID09IDApCisrICAgICAgICAgcmV0dXJuIGVudHJ5OworKyAgICAgICBlbHNlCisrICAgICAgICAgb3B0Kys7CisrCisrICAgICAgZW50cnkrKzsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIElmIGFuIGVudHJ5IHdpdGggdGhlIGxvbmcgb3B0aW9uIE5BTUUgb2NjdXJzIGluIEhPTCwgc2V0IGl0J3Mgc3BlY2lhbAorKyAgIHNvcnQgcG9zaXRpb24gdG8gR1JPVVAuICAqLworK3N0YXRpYyB2b2lkCisraG9sX3NldF9ncm91cCAoc3RydWN0IGhvbCAqaG9sLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZ3JvdXApCisreworKyAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkgPSBob2xfZmluZF9lbnRyeSAoaG9sLCBuYW1lKTsKKysgIGlmIChlbnRyeSkKKysgICAgZW50cnktPmdyb3VwID0gZ3JvdXA7CisrfQorKworKy8qIE9yZGVyIGJ5IGdyb3VwOiAgMCwgMSwgMiwgLi4uLCBuLCAtbSwgLi4uLCAtMiwgLTEuCisrICAgRVEgaXMgd2hhdCB0byByZXR1cm4gaWYgR1JPVVAxIGFuZCBHUk9VUDIgYXJlIHRoZSBzYW1lLiAgKi8KKytzdGF0aWMgaW50CisrZ3JvdXBfY21wIChpbnQgZ3JvdXAxLCBpbnQgZ3JvdXAyLCBpbnQgZXEpCisreworKyAgaWYgKGdyb3VwMSA9PSBncm91cDIpCisrICAgIHJldHVybiBlcTsKKysgIGVsc2UgaWYgKChncm91cDEgPCAwICYmIGdyb3VwMiA8IDApIHx8IChncm91cDEgPj0gMCAmJiBncm91cDIgPj0gMCkpCisrICAgIHJldHVybiBncm91cDEgLSBncm91cDI7CisrICBlbHNlCisrICAgIHJldHVybiBncm91cDIgLSBncm91cDE7CisrfQorKworKy8qIENvbXBhcmUgY2x1c3RlcnMgQ0wxICYgQ0wyIGJ5IHRoZSBvcmRlciB0aGF0IHRoZXkgc2hvdWxkIGFwcGVhciBpbgorKyAgIG91dHB1dC4gICovCisrc3RhdGljIGludAorK2hvbF9jbHVzdGVyX2NtcCAoY29uc3Qgc3RydWN0IGhvbF9jbHVzdGVyICpjbDEsIGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wyKQorK3sKKysgIC8qIElmIG9uZSBjbHVzdGVyIGlzIGRlZXBlciB0aGFuIHRoZSBvdGhlciwgdXNlIGl0cyBhbmNlc3RvciBhdCB0aGUgc2FtZQorKyAgICAgbGV2ZWwsIHNvIHRoYXQgZmluZGluZyB0aGUgY29tbW9uIGFuY2VzdG9yIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gICovCisrICB3aGlsZSAoY2wxLT5kZXB0aCA+IGNsMi0+ZGVwdGgpCisrICAgIGNsMSA9IGNsMS0+cGFyZW50OworKyAgd2hpbGUgKGNsMi0+ZGVwdGggPiBjbDEtPmRlcHRoKQorKyAgICBjbDIgPSBjbDItPnBhcmVudDsKKysKKysgIC8qIE5vdyByZWR1Y2UgYm90aCBjbHVzdGVycyB0byB0aGVpciBhbmNlc3RvcnMgYXQgdGhlIHBvaW50IHdoZXJlIGJvdGggaGF2ZQorKyAgICAgYSBjb21tb24gcGFyZW50OyB0aGVzZSBjYW4gYmUgZGlyZWN0bHkgY29tcGFyZWQuICAqLworKyAgd2hpbGUgKGNsMS0+cGFyZW50ICE9IGNsMi0+cGFyZW50KQorKyAgICBjbDEgPSBjbDEtPnBhcmVudCwgY2wyID0gY2wyLT5wYXJlbnQ7CisrCisrICByZXR1cm4gZ3JvdXBfY21wIChjbDEtPmdyb3VwLCBjbDItPmdyb3VwLCBjbDItPmluZGV4IC0gY2wxLT5pbmRleCk7CisrfQorKworKy8qIFJldHVybiB0aGUgYW5jZXN0b3Igb2YgQ0wgdGhhdCdzIGp1c3QgYmVsb3cgdGhlIHJvb3QgKGkuZS4sIGhhcyBhIHBhcmVudAorKyAgIG9mIDApLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbF9jbHVzdGVyICoKKytob2xfY2x1c3Rlcl9iYXNlIChzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsKQorK3sKKysgIHdoaWxlIChjbC0+cGFyZW50KQorKyAgICBjbCA9IGNsLT5wYXJlbnQ7CisrICByZXR1cm4gY2w7CisrfQorKworKy8qIFJldHVybiB0cnVlIGlmIENMMSBpcyBhIGNoaWxkIG9mIENMMi4gICovCisrc3RhdGljIGludAorK2hvbF9jbHVzdGVyX2lzX2NoaWxkIChjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMSwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsMikKKyt7CisrICB3aGlsZSAoY2wxICYmIGNsMSAhPSBjbDIpCisrICAgIGNsMSA9IGNsMS0+cGFyZW50OworKyAgcmV0dXJuIGNsMSA9PSBjbDI7CisrfQorKworKy8qIEdpdmVuIHRoZSBuYW1lIG9mIGEgT1BUSU9OX0RPQyBvcHRpb24sIG1vZGlmaWVzIE5BTUUgdG8gc3RhcnQgYXQgdGhlIHRhaWwKKysgICB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBjb21wYXJpc29ucywgYW5kIHJldHVybnMgdHJ1ZSBpZmYgaXQgc2hvdWxkIGJlCisrICAgdHJlYXRlZCBhcyBhIG5vbi1vcHRpb24uICAqLworK3N0YXRpYyBpbnQKKytjYW5vbl9kb2Nfb3B0aW9uIChjb25zdCBjaGFyICoqbmFtZSkKKyt7CisrICBpbnQgbm9uX29wdDsKKysgIC8qIFNraXAgaW5pdGlhbCB3aGl0ZXNwYWNlLiAgKi8KKysgIHdoaWxlIChpc3NwYWNlICgqKm5hbWUpKQorKyAgICAoKm5hbWUpKys7CisrICAvKiBEZWNpZGUgd2hldGhlciB0aGlzIGxvb2tzIGxpa2UgYW4gb3B0aW9uIChsZWFkaW5nIGAtJykgb3Igbm90LiAgKi8KKysgIG5vbl9vcHQgPSAoKipuYW1lICE9ICctJyk7CisrICAvKiBTa2lwIHVudGlsIHBhcnQgb2YgbmFtZSB1c2VkIGZvciBzb3J0aW5nLiAgKi8KKysgIHdoaWxlICgqKm5hbWUgJiYgIWlzYWxudW0gKCoqbmFtZSkpCisrICAgICgqbmFtZSkrKzsKKysgIHJldHVybiBub25fb3B0OworK30KKysKKysvKiBPcmRlciBFTlRSWTEgJiBFTlRSWTIgYnkgdGhlIG9yZGVyIHdoaWNoIHRoZXkgc2hvdWxkIGFwcGVhciBpbiBhIGhlbHAKKysgICBsaXN0aW5nLiAgKi8KKytzdGF0aWMgaW50CisraG9sX2VudHJ5X2NtcCAoY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkxLAorKyAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqZW50cnkyKQorK3sKKysgIC8qIFRoZSBncm91cCBudW1iZXJzIGJ5IHdoaWNoIHRoZSBlbnRyaWVzIHNob3VsZCBiZSBvcmRlcmVkOyBpZiBlaXRoZXIgaXMKKysgICAgIGluIGEgY2x1c3RlciwgdGhlbiB0aGlzIGlzIGp1c3QgdGhlIGdyb3VwIHdpdGhpbiB0aGUgY2x1c3Rlci4gICovCisrICBpbnQgZ3JvdXAxID0gZW50cnkxLT5ncm91cCwgZ3JvdXAyID0gZW50cnkyLT5ncm91cDsKKysKKysgIGlmIChlbnRyeTEtPmNsdXN0ZXIgIT0gZW50cnkyLT5jbHVzdGVyKQorKyAgICB7CisrICAgICAgLyogVGhlIGVudHJpZXMgYXJlIG5vdCB3aXRoaW4gdGhlIHNhbWUgY2x1c3Rlciwgc28gd2UgY2FuJ3QgY29tcGFyZSB0aGVtCisrICAgICAgICBkaXJlY3RseSwgd2UgaGF2ZSB0byB1c2UgdGhlIGFwcHJvcGlhdGUgY2x1c3RlcmluZyBsZXZlbCB0b28uICAqLworKyAgICAgIGlmICghIGVudHJ5MS0+Y2x1c3RlcikKKysgICAgICAgLyogRU5UUlkxIGlzIGF0IHRoZSBgYmFzZSBsZXZlbCcsIG5vdCBpbiBhIGNsdXN0ZXIsIHNvIHdlIGhhdmUgdG8KKysgICAgICAgICAgY29tcGFyZSBpdCdzIGdyb3VwIG51bWJlciB3aXRoIHRoYXQgb2YgdGhlIGJhc2UgY2x1c3RlciBpbiB3aGljaAorKyAgICAgICAgICBFTlRSWTIgcmVzaWRlcy4gIE5vdGUgdGhhdCBpZiB0aGV5J3JlIGluIHRoZSBzYW1lIGdyb3VwLCB0aGUKKysgICAgICAgICAgY2x1c3RlcmVkIG9wdGlvbiBhbHdheXMgY29tZXMgbGFzdGVyLiAgKi8KKysgICAgICAgcmV0dXJuIGdyb3VwX2NtcCAoZ3JvdXAxLCBob2xfY2x1c3Rlcl9iYXNlIChlbnRyeTItPmNsdXN0ZXIpLT5ncm91cCwgLTEpOworKyAgICAgIGVsc2UgaWYgKCEgZW50cnkyLT5jbHVzdGVyKQorKyAgICAgICAvKiBMaWtld2lzZSwgYnV0IEVOVFJZMidzIG5vdCBpbiBhIGNsdXN0ZXIuICAqLworKyAgICAgICByZXR1cm4gZ3JvdXBfY21wIChob2xfY2x1c3Rlcl9iYXNlIChlbnRyeTEtPmNsdXN0ZXIpLT5ncm91cCwgZ3JvdXAyLCAxKTsKKysgICAgICBlbHNlCisrICAgICAgIC8qIEJvdGggZW50cmllcyBhcmUgaW4gY2x1c3RlcnMsIHdlIGNhbiBqdXN0IGNvbXBhcmUgdGhlIGNsdXN0ZXJzLiAgKi8KKysgICAgICAgcmV0dXJuIGhvbF9jbHVzdGVyX2NtcCAoZW50cnkxLT5jbHVzdGVyLCBlbnRyeTItPmNsdXN0ZXIpOworKyAgICB9CisrICBlbHNlIGlmIChncm91cDEgPT0gZ3JvdXAyKQorKyAgICAvKiBUaGUgZW50cmllcyBhcmUgYm90aCBpbiB0aGUgc2FtZSBjbHVzdGVyIGFuZCBncm91cCwgc28gY29tcGFyZSB0aGVtCisrICAgICAgIGFscGhhYmV0aWNhbGx5LiAgKi8KKysgICAgeworKyAgICAgIGludCBzaG9ydDEgPSBob2xfZW50cnlfZmlyc3Rfc2hvcnQgKGVudHJ5MSk7CisrICAgICAgaW50IHNob3J0MiA9IGhvbF9lbnRyeV9maXJzdF9zaG9ydCAoZW50cnkyKTsKKysgICAgICBpbnQgZG9jMSA9IG9kb2MgKGVudHJ5MS0+b3B0KTsKKysgICAgICBpbnQgZG9jMiA9IG9kb2MgKGVudHJ5Mi0+b3B0KTsKKysgICAgICBjb25zdCBjaGFyICpsb25nMSA9IGhvbF9lbnRyeV9maXJzdF9sb25nIChlbnRyeTEpOworKyAgICAgIGNvbnN0IGNoYXIgKmxvbmcyID0gaG9sX2VudHJ5X2ZpcnN0X2xvbmcgKGVudHJ5Mik7CisrCisrICAgICAgaWYgKGRvYzEpCisrICAgICAgIGRvYzEgPSBsb25nMSAhPSBOVUxMICYmIGNhbm9uX2RvY19vcHRpb24gKCZsb25nMSk7CisrICAgICAgaWYgKGRvYzIpCisrICAgICAgIGRvYzIgPSBsb25nMiAhPSBOVUxMICYmIGNhbm9uX2RvY19vcHRpb24gKCZsb25nMik7CisrCisrICAgICAgaWYgKGRvYzEgIT0gZG9jMikKKysgICAgICAgLyogYGRvY3VtZW50YXRpb24nIG9wdGlvbnMgYWx3YXlzIGZvbGxvdyBub3JtYWwgb3B0aW9ucyAob3IKKysgICAgICAgICAgZG9jdW1lbnRhdGlvbiBvcHRpb25zIHRoYXQgKmxvb2sqIGxpa2Ugbm9ybWFsIG9wdGlvbnMpLiAgKi8KKysgICAgICAgcmV0dXJuIGRvYzEgLSBkb2MyOworKyAgICAgIGVsc2UgaWYgKCFzaG9ydDEgJiYgIXNob3J0MiAmJiBsb25nMSAmJiBsb25nMikKKysgICAgICAgLyogT25seSBsb25nIG9wdGlvbnMuICAqLworKyAgICAgICByZXR1cm4gc3RyY2FzZWNtcCAobG9uZzEsIGxvbmcyKTsKKysgICAgICBlbHNlCisrICAgICAgIC8qIENvbXBhcmUgc2hvcnQvc2hvcnQsIGxvbmcvc2hvcnQsIHNob3J0L2xvbmcsIHVzaW5nIHRoZSBmaXJzdAorKyAgICAgICAgICBjaGFyYWN0ZXIgb2YgbG9uZyBvcHRpb25zLiAgRW50cmllcyB3aXRob3V0ICphbnkqIHZhbGlkCisrICAgICAgICAgIG9wdGlvbnMgKHN1Y2ggYXMgb3B0aW9ucyB3aXRoIE9QVElPTl9ISURERU4gc2V0KSB3aWxsIGJlIHB1dAorKyAgICAgICAgICBmaXJzdCwgYnV0IGFzIHRoZXkncmUgbm90IGRpc3BsYXllZCwgaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUKKysgICAgICAgICAgdGhleSBhcmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgY2hhciBmaXJzdDEgPSBzaG9ydDEgPyBzaG9ydDEgOiBsb25nMSA/ICpsb25nMSA6IDA7CisrICAgICAgICAgY2hhciBmaXJzdDIgPSBzaG9ydDIgPyBzaG9ydDIgOiBsb25nMiA/ICpsb25nMiA6IDA7CisrI2lmZGVmIF90b2xvd2VyCisrICAgICAgICAgaW50IGxvd2VyX2NtcCA9IF90b2xvd2VyIChmaXJzdDEpIC0gX3RvbG93ZXIgKGZpcnN0Mik7CisrI2Vsc2UKKysgICAgICAgICBpbnQgbG93ZXJfY21wID0gdG9sb3dlciAoZmlyc3QxKSAtIHRvbG93ZXIgKGZpcnN0Mik7CisrI2VuZGlmCisrICAgICAgICAgLyogQ29tcGFyZSBpZ25vcmluZyBjYXNlLCBleGNlcHQgd2hlbiB0aGUgb3B0aW9ucyBhcmUgYm90aCB0aGUKKysgICAgICAgICAgICBzYW1lIGxldHRlciwgaW4gd2hpY2ggY2FzZSBsb3dlci1jYXNlIGFsd2F5cyBjb21lcyBmaXJzdC4gICovCisrICAgICAgICAgcmV0dXJuIGxvd2VyX2NtcCA/IGxvd2VyX2NtcCA6IGZpcnN0MiAtIGZpcnN0MTsKKysgICAgICAgfQorKyAgICB9CisrICBlbHNlCisrICAgIC8qIFdpdGhpbiB0aGUgc2FtZSBjbHVzdGVyLCBidXQgbm90IHRoZSBzYW1lIGdyb3VwLCBzbyBqdXN0IGNvbXBhcmUKKysgICAgICAgZ3JvdXBzLiAgKi8KKysgICAgcmV0dXJuIGdyb3VwX2NtcCAoZ3JvdXAxLCBncm91cDIsIDApOworK30KKysKKysvKiBWZXJzaW9uIG9mIGhvbF9lbnRyeV9jbXAgd2l0aCBjb3JyZWN0IHNpZ25hdHVyZSBmb3IgcXNvcnQuICAqLworK3N0YXRpYyBpbnQKKytob2xfZW50cnlfcWNtcCAoY29uc3Qgdm9pZCAqZW50cnkxX3YsIGNvbnN0IHZvaWQgKmVudHJ5Ml92KQorK3sKKysgIHJldHVybiBob2xfZW50cnlfY21wIChlbnRyeTFfdiwgZW50cnkyX3YpOworK30KKysKKysvKiBTb3J0IEhPTCBieSBncm91cCBhbmQgYWxwaGFiZXRpY2FsbHkgYnkgb3B0aW9uIG5hbWUgKHdpdGggc2hvcnQgb3B0aW9ucworKyAgIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgbG9uZykuICBTaW5jZSB0aGUgc29ydGluZyBpcyBmb3IgZGlzcGxheSBwdXJwb3NlcworKyAgIG9ubHksIHRoZSBzaGFkb3dpbmcgb2Ygb3B0aW9ucyBpc24ndCBlZmZlY3RlZC4gICovCisrc3RhdGljIHZvaWQKKytob2xfc29ydCAoc3RydWN0IGhvbCAqaG9sKQorK3sKKysgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgcXNvcnQgKGhvbC0+ZW50cmllcywgaG9sLT5udW1fZW50cmllcywgc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSwKKysgICAgICAgICAgaG9sX2VudHJ5X3FjbXApOworK30KKysKKysvKiBBcHBlbmQgTU9SRSB0byBIT0wsIGRlc3Ryb3lpbmcgTU9SRSBpbiB0aGUgcHJvY2Vzcy4gIE9wdGlvbnMgaW4gSE9MIHNoYWRvdworKyAgIGFueSBpbiBNT1JFIHdpdGggdGhlIHNhbWUgbmFtZS4gICovCisrc3RhdGljIHZvaWQKKytob2xfYXBwZW5kIChzdHJ1Y3QgaG9sICpob2wsIHN0cnVjdCBob2wgKm1vcmUpCisreworKyAgc3RydWN0IGhvbF9jbHVzdGVyICoqY2xfZW5kID0gJmhvbC0+Y2x1c3RlcnM7CisrCisrICAvKiBTdGVhbCBNT1JFJ3MgY2x1c3RlciBsaXN0LCBhbmQgYWRkIGl0IHRvIHRoZSBlbmQgb2YgSE9MJ3MuICAqLworKyAgd2hpbGUgKCpjbF9lbmQpCisrICAgIGNsX2VuZCA9ICYoKmNsX2VuZCktPm5leHQ7CisrICAqY2xfZW5kID0gbW9yZS0+Y2x1c3RlcnM7CisrICBtb3JlLT5jbHVzdGVycyA9IDA7CisrCisrICAvKiBNZXJnZSBlbnRyaWVzLiAgKi8KKysgIGlmIChtb3JlLT5udW1fZW50cmllcyA+IDApCisrICAgIHsKKysgICAgICBpZiAoaG9sLT5udW1fZW50cmllcyA9PSAwKQorKyAgICAgICB7CisrICAgICAgICAgaG9sLT5udW1fZW50cmllcyA9IG1vcmUtPm51bV9lbnRyaWVzOworKyAgICAgICAgIGhvbC0+ZW50cmllcyA9IG1vcmUtPmVudHJpZXM7CisrICAgICAgICAgaG9sLT5zaG9ydF9vcHRpb25zID0gbW9yZS0+c2hvcnRfb3B0aW9uczsKKysgICAgICAgICBtb3JlLT5udW1fZW50cmllcyA9IDA7ICAgICAgICAvKiBNYXJrIE1PUkUncyBmaWVsZHMgYXMgaW52YWxpZC4gICovCisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIC8qIEFwcGVuZCB0aGUgZW50cmllcyBpbiBNT1JFIHRvIHRob3NlIGluIEhPTCwgdGFraW5nIGNhcmUgdG8gb25seSBhZGQKKysgICAgICAgICAgbm9uLXNoYWRvd2VkIFNIT1JUX09QVElPTlMgdmFsdWVzLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIHVuc2lnbmVkIGxlZnQ7CisrICAgICAgICAgY2hhciAqc28sICptb3JlX3NvOworKyAgICAgICAgIHN0cnVjdCBob2xfZW50cnkgKmU7CisrICAgICAgICAgdW5zaWduZWQgbnVtX2VudHJpZXMgPSBob2wtPm51bV9lbnRyaWVzICsgbW9yZS0+bnVtX2VudHJpZXM7CisrICAgICAgICAgc3RydWN0IGhvbF9lbnRyeSAqZW50cmllcyA9CisrICAgICAgICAgICBtYWxsb2MgKG51bV9lbnRyaWVzICogc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSk7CisrICAgICAgICAgdW5zaWduZWQgaG9sX3NvX2xlbiA9IHN0cmxlbiAoaG9sLT5zaG9ydF9vcHRpb25zKTsKKysgICAgICAgICBjaGFyICpzaG9ydF9vcHRpb25zID0KKysgICAgICAgICAgIG1hbGxvYyAoaG9sX3NvX2xlbiArIHN0cmxlbiAobW9yZS0+c2hvcnRfb3B0aW9ucykgKyAxKTsKKysKKysgICAgICAgICBhc3NlcnQgKGVudHJpZXMgJiYgc2hvcnRfb3B0aW9ucyk7CisrI2lmIFNJWkVfTUFYIDw9IFVJTlRfTUFYCisrICAgICAgICAgYXNzZXJ0IChudW1fZW50cmllcyA8PSBTSVpFX01BWCAvIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpOworKyNlbmRpZgorKworKyAgICAgICAgIG1lbXBjcHkgKG1lbXBjcHkgKGVudHJpZXMsIGhvbC0+ZW50cmllcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sLT5udW1fZW50cmllcyAqIHNpemVvZiAoc3RydWN0IGhvbF9lbnRyeSkpLAorKyAgICAgICAgICAgICAgICAgICAgbW9yZS0+ZW50cmllcywKKysgICAgICAgICAgICAgICAgICAgIG1vcmUtPm51bV9lbnRyaWVzICogc2l6ZW9mIChzdHJ1Y3QgaG9sX2VudHJ5KSk7CisrCisrICAgICAgICAgbWVtcGNweSAoc2hvcnRfb3B0aW9ucywgaG9sLT5zaG9ydF9vcHRpb25zLCBob2xfc29fbGVuKTsKKysKKysgICAgICAgICAvKiBGaXggdXAgdGhlIHNob3J0IG9wdGlvbnMgcG9pbnRlcnMgZnJvbSBIT0wuICAqLworKyAgICAgICAgIGZvciAoZSA9IGVudHJpZXMsIGxlZnQgPSBob2wtPm51bV9lbnRyaWVzOyBsZWZ0ID4gMDsgZSsrLCBsZWZ0LS0pCisrICAgICAgICAgICBlLT5zaG9ydF9vcHRpb25zICs9IChzaG9ydF9vcHRpb25zIC0gaG9sLT5zaG9ydF9vcHRpb25zKTsKKysKKysgICAgICAgICAvKiBOb3cgYWRkIHRoZSBzaG9ydCBvcHRpb25zIGZyb20gTU9SRSwgZml4aW5nIHVwIGl0cyBlbnRyaWVzCisrICAgICAgICAgICAgdG9vLiAgKi8KKysgICAgICAgICBzbyA9IHNob3J0X29wdGlvbnMgKyBob2xfc29fbGVuOworKyAgICAgICAgIG1vcmVfc28gPSBtb3JlLT5zaG9ydF9vcHRpb25zOworKyAgICAgICAgIGZvciAobGVmdCA9IG1vcmUtPm51bV9lbnRyaWVzOyBsZWZ0ID4gMDsgZSsrLCBsZWZ0LS0pCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGludCBvcHRzX2xlZnQ7CisrICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0OworKworKyAgICAgICAgICAgICBlLT5zaG9ydF9vcHRpb25zID0gc287CisrCisrICAgICAgICAgICAgIGZvciAob3B0c19sZWZ0ID0gZS0+bnVtLCBvcHQgPSBlLT5vcHQ7IG9wdHNfbGVmdDsgb3B0KyssIG9wdHNfbGVmdC0tKQorKyAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgIGludCBjaCA9ICptb3JlX3NvOworKyAgICAgICAgICAgICAgICAgaWYgKG9zaG9ydCAob3B0KSAmJiBjaCA9PSBvcHQtPmtleSkKKysgICAgICAgICAgICAgICAgICAgLyogVGhlIG5leHQgc2hvcnQgb3B0aW9uIGluIE1PUkVfU08sIENILCBpcyBmcm9tIE9QVC4gICovCisrICAgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgICBpZiAoISBmaW5kX2NoYXIgKGNoLCBzaG9ydF9vcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfb3B0aW9ucyArIGhvbF9zb19sZW4pKQorKyAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIHNob3J0IG9wdGlvbiBDSCBpc24ndCBzaGFkb3dlZCBieSBIT0wncyBvcHRpb25zLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc28gYWRkIGl0IHRvIHRoZSBzdW0uICAqLworKyAgICAgICAgICAgICAgICAgICAgICAgKnNvKysgPSBjaDsKKysgICAgICAgICAgICAgICAgICAgICBtb3JlX3NvKys7CisrICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICB9CisrICAgICAgICAgICB9CisrCisrICAgICAgICAgKnNvID0gJ1wwJzsKKysKKysgICAgICAgICBmcmVlIChob2wtPmVudHJpZXMpOworKyAgICAgICAgIGZyZWUgKGhvbC0+c2hvcnRfb3B0aW9ucyk7CisrCisrICAgICAgICAgaG9sLT5lbnRyaWVzID0gZW50cmllczsKKysgICAgICAgICBob2wtPm51bV9lbnRyaWVzID0gbnVtX2VudHJpZXM7CisrICAgICAgICAgaG9sLT5zaG9ydF9vcHRpb25zID0gc2hvcnRfb3B0aW9uczsKKysgICAgICAgfQorKyAgICB9CisrCisrICBob2xfZnJlZSAobW9yZSk7CisrfQorKworKy8qIEluc2VydHMgZW5vdWdoIHNwYWNlcyB0byBtYWtlIHN1cmUgU1RSRUFNIGlzIGF0IGNvbHVtbiBDT0wuICAqLworK3N0YXRpYyB2b2lkCisraW5kZW50X3RvIChhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSwgdW5zaWduZWQgY29sKQorK3sKKysgIGludCBuZWVkZWQgPSBjb2wgLSBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pOworKyAgd2hpbGUgKG5lZWRlZC0tID4gMCkKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICcgJyk7CisrfQorKworKy8qIE91dHB1dCB0byBTVFJFQU0gZWl0aGVyIGEgc3BhY2UsIG9yIGEgbmV3bGluZSBpZiB0aGVyZSBpc24ndCByb29tIGZvciBhdAorKyAgIGxlYXN0IEVOU1VSRSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgcmlnaHQgbWFyZ2luLiAgKi8KKytzdGF0aWMgdm9pZAorK3NwYWNlIChhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSwgc2l6ZV90IGVuc3VyZSkKKyt7CisrICBpZiAoX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKSArIGVuc3VyZQorKyAgICAgID49IF9fYXJncF9mbXRzdHJlYW1fcm1hcmdpbiAoc3RyZWFtKSkKKysgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgZWxzZQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJyAnKTsKKyt9CisrCisrLyogSWYgdGhlIG9wdGlvbiBSRUFMIGhhcyBhbiBhcmd1bWVudCwgd2UgcHJpbnQgaXQgaW4gdXNpbmcgdGhlIHByaW50ZgorKyAgIGZvcm1hdCBSRVFfRk1UIG9yIE9QVF9GTVQgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBhIHJlcXVpcmVkIG9yCisrICAgb3B0aW9uYWwgYXJndW1lbnQuICAqLworK3N0YXRpYyB2b2lkCisrYXJnIChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsIGNvbnN0IGNoYXIgKnJlcV9mbXQsIGNvbnN0IGNoYXIgKm9wdF9mbXQsCisrICAgICBjb25zdCBjaGFyICpkb21haW4sIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGlmIChyZWFsLT5hcmcpCisrICAgIHsKKysgICAgICBpZiAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCBvcHRfZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKGRvbWFpbiwgcmVhbC0+YXJnKSk7CisrICAgICAgZWxzZQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCByZXFfZm10LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKGRvbWFpbiwgcmVhbC0+YXJnKSk7CisrICAgIH0KKyt9CisrCisrLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgaG9sX2VudHJ5X2hlbHAuICAqLworKworKy8qIFN0YXRlIHVzZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2YgaG9sX2hlbHAuICAqLworK3N0cnVjdCBob2xfaGVscF9zdGF0ZQorK3sKKysgIC8qIFBSRVZfRU5UUlkgc2hvdWxkIGNvbnRhaW4gdGhlIHByZXZpb3VzIGVudHJ5IHByaW50ZWQsIG9yIDAuICAqLworKyAgc3RydWN0IGhvbF9lbnRyeSAqcHJldl9lbnRyeTsKKysKKysgIC8qIElmIGFuIGVudHJ5IGlzIGluIGEgZGlmZmVyZW50IGdyb3VwIGZyb20gdGhlIHByZXZpb3VzIG9uZSwgYW5kIFNFUF9HUk9VUFMKKysgICAgIGlzIHRydWUsIHRoZW4gYSBibGFuayBsaW5lIHdpbGwgYmUgcHJpbnRlZCBiZWZvcmUgYW55IG91dHB1dC4gKi8KKysgIGludCBzZXBfZ3JvdXBzOworKworKyAgLyogVHJ1ZSBpZiBhIGR1cGxpY2F0ZSBvcHRpb24gYXJndW1lbnQgd2FzIHN1cHByZXNzZWQgKG9ubHkgZXZlciBzZXQgaWYKKysgICAgIFVQQVJBTVMuZHVwX2FyZ3MgaXMgZmFsc2UpLiAgKi8KKysgIGludCBzdXBwcmVzc2VkX2R1cF9hcmc7CisrfTsKKysKKysvKiBTb21lIHN0YXRlIHVzZWQgd2hpbGUgcHJpbnRpbmcgYSBoZWxwIGVudHJ5ICh1c2VkIHRvIGNvbW11bmljYXRlIHdpdGgKKysgICBoZWxwZXIgZnVuY3Rpb25zKS4gIFNlZSB0aGUgZG9jIGZvciBob2xfZW50cnlfaGVscCBmb3IgbW9yZSBpbmZvLCBhcyBtb3N0CisrICAgb2YgdGhlIGZpZWxkcyBhcmUgY29waWVkIGZyb20gaXRzIGFyZ3VtZW50cy4gICovCisrc3RydWN0IHBlbnRyeV9zdGF0ZQorK3sKKysgIGNvbnN0IHN0cnVjdCBob2xfZW50cnkgKmVudHJ5OworKyAgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW07CisrICBzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUgKmhoc3RhdGU7CisrCisrICAvKiBUcnVlIGlmIG5vdGhpbmcncyBiZWVuIHByaW50ZWQgc28gZmFyLiAgKi8KKysgIGludCBmaXJzdDsKKysKKysgIC8qIElmIG5vbi16ZXJvLCB0aGUgc3RhdGUgdGhhdCB3YXMgdXNlZCB0byBwcmludCB0aGlzIGhlbHAuICAqLworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlOworK307CisrCisrLyogSWYgYSB1c2VyIGRvYyBmaWx0ZXIgc2hvdWxkIGJlIGFwcGxpZWQgdG8gRE9DLCBkbyBzby4gICovCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK2ZpbHRlcl9kb2MgKGNvbnN0IGNoYXIgKmRvYywgaW50IGtleSwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsCisrICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgaWYgKGFyZ3AgJiYgYXJncC0+aGVscF9maWx0ZXIpCisrICAgIC8qIFdlIG11c3QgYXBwbHkgYSB1c2VyIGZpbHRlciB0byB0aGlzIG91dHB1dC4gICovCisrICAgIHsKKysgICAgICB2b2lkICppbnB1dCA9IF9fYXJncF9pbnB1dCAoYXJncCwgc3RhdGUpOworKyAgICAgIHJldHVybiAoKmFyZ3AtPmhlbHBfZmlsdGVyKSAoa2V5LCBkb2MsIGlucHV0KTsKKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBObyBmaWx0ZXIuICAqLworKyAgICByZXR1cm4gZG9jOworK30KKysKKysvKiBQcmludHMgU1RSIGFzIGEgaGVhZGVyIGxpbmUsIHdpdGggdGhlIG1hcmdpbiBsaW5lcyBzZXQgYXBwcm9waWF0ZWx5LCBhbmQKKysgICBub3RlcyB0aGUgZmFjdCB0aGF0IGdyb3VwcyBzaG91bGQgYmUgc2VwYXJhdGVkIHdpdGggYSBibGFuayBsaW5lLiAgQVJHUCBpcworKyAgIHRoZSBhcmdwIHRoYXQgc2hvdWxkIGRpY3RhdGUgYW55IHVzZXIgZG9jIGZpbHRlcmluZyB0byB0YWtlIHBsYWNlLiAgTm90ZQorKyAgIHRoYXQgdGhlIHByZXZpb3VzIHdyYXAgbWFyZ2luIGlzbid0IHJlc3RvcmVkLCBidXQgdGhlIGxlZnQgbWFyZ2luIGlzIHJlc2V0CisrICAgdG8gMC4gICovCisrc3RhdGljIHZvaWQKKytwcmludF9oZWFkZXIgKGNvbnN0IGNoYXIgKnN0ciwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsCisrICAgICAgICAgICAgIHN0cnVjdCBwZW50cnlfc3RhdGUgKnBlc3QpCisreworKyAgY29uc3QgY2hhciAqdHN0ciA9IGRnZXR0ZXh0IChhcmdwLT5hcmdwX2RvbWFpbiwgc3RyKTsKKysgIGNvbnN0IGNoYXIgKmZzdHIgPSBmaWx0ZXJfZG9jICh0c3RyLCBBUkdQX0tFWV9IRUxQX0hFQURFUiwgYXJncCwgcGVzdC0+c3RhdGUpOworKworKyAgaWYgKGZzdHIpCisrICAgIHsKKysgICAgICBpZiAoKmZzdHIpCisrICAgICAgIHsKKysgICAgICAgICBpZiAocGVzdC0+aGhzdGF0ZS0+cHJldl9lbnRyeSkKKysgICAgICAgICAgIC8qIFByZWNlZGUgd2l0aCBhIGJsYW5rIGxpbmUuICAqLworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChwZXN0LT5zdHJlYW0sICdcbicpOworKyAgICAgICAgIGluZGVudF90byAocGVzdC0+c3RyZWFtLCB1cGFyYW1zLmhlYWRlcl9jb2wpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHBlc3QtPnN0cmVhbSwgdXBhcmFtcy5oZWFkZXJfY29sKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChwZXN0LT5zdHJlYW0sIHVwYXJhbXMuaGVhZGVyX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChwZXN0LT5zdHJlYW0sIGZzdHIpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHBlc3QtPnN0cmVhbSwgMCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChwZXN0LT5zdHJlYW0sICdcbicpOworKyAgICAgICB9CisrCisrICAgICAgcGVzdC0+aGhzdGF0ZS0+c2VwX2dyb3VwcyA9IDE7IC8qIFNlcGFyYXRlIHN1YnNlcXVlbnQgZ3JvdXBzLiAqLworKyAgICB9CisrCisrICBpZiAoZnN0ciAhPSB0c3RyKQorKyAgICBmcmVlICgoY2hhciAqKSBmc3RyKTsKKyt9CisrCisrLyogSW5zZXJ0cyBhIGNvbW1hIGlmIHRoaXMgaXNuJ3QgdGhlIGZpcnN0IGl0ZW0gb24gdGhlIGxpbmUsIGFuZCB0aGVuIG1ha2VzCisrICAgc3VyZSB3ZSdyZSBhdCBsZWFzdCB0byBjb2x1bW4gQ09MLiAgSWYgdGhpcyAqaXMqIHRoZSBmaXJzdCBpdGVtIG9uIGEgbGluZSwKKysgICBwcmludHMgYW55IHBlbmRpbmcgd2hpdGVzcGFjZS9oZWFkZXJzIHRoYXQgc2hvdWxkIHByZWNlZGUgdGhpcyBsaW5lLiBBbHNvCisrICAgY2xlYXJzIEZJUlNULiAgKi8KKytzdGF0aWMgdm9pZAorK2NvbW1hICh1bnNpZ25lZCBjb2wsIHN0cnVjdCBwZW50cnlfc3RhdGUgKnBlc3QpCisreworKyAgaWYgKHBlc3QtPmZpcnN0KQorKyAgICB7CisrICAgICAgY29uc3Qgc3RydWN0IGhvbF9lbnRyeSAqcGUgPSBwZXN0LT5oaHN0YXRlLT5wcmV2X2VudHJ5OworKyAgICAgIGNvbnN0IHN0cnVjdCBob2xfY2x1c3RlciAqY2wgPSBwZXN0LT5lbnRyeS0+Y2x1c3RlcjsKKysKKysgICAgICBpZiAocGVzdC0+aGhzdGF0ZS0+c2VwX2dyb3VwcyAmJiBwZSAmJiBwZXN0LT5lbnRyeS0+Z3JvdXAgIT0gcGUtPmdyb3VwKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHBlc3QtPnN0cmVhbSwgJ1xuJyk7CisrCisrICAgICAgaWYgKGNsICYmIGNsLT5oZWFkZXIgJiYgKmNsLT5oZWFkZXIKKysgICAgICAgICAmJiAoIXBlCisrICAgICAgICAgICAgIHx8IChwZS0+Y2x1c3RlciAhPSBjbAorKyAgICAgICAgICAgICAgICAgJiYgIWhvbF9jbHVzdGVyX2lzX2NoaWxkIChwZS0+Y2x1c3RlciwgY2wpKSkpCisrICAgICAgIC8qIElmIHdlJ3JlIGNoYW5naW5nIGNsdXN0ZXJzLCB0aGVuIHRoaXMgbXVzdCBiZSB0aGUgc3RhcnQgb2YgdGhlCisrICAgICAgICAgIEVOVFJZJ3MgY2x1c3RlciB1bmxlc3MgdGhhdCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgcHJldmlvdXMgb25lCisrICAgICAgICAgIChpbiB3aGljaCBjYXNlIHdlIGhhZCBqdXN0IHBvcHBlZCBpbnRvIGEgc3ViLWNsdXN0ZXIgZm9yIGEgYml0KS4KKysgICAgICAgICAgSWYgc28sIHRoZW4gcHJpbnQgdGhlIGNsdXN0ZXIncyBoZWFkZXIgbGluZS4gICovCisrICAgICAgIHsKKysgICAgICAgICBpbnQgb2xkX3dtID0gX19hcmdwX2ZtdHN0cmVhbV93bWFyZ2luIChwZXN0LT5zdHJlYW0pOworKyAgICAgICAgIHByaW50X2hlYWRlciAoY2wtPmhlYWRlciwgY2wtPmFyZ3AsIHBlc3QpOworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X3dtYXJnaW4gKHBlc3QtPnN0cmVhbSwgb2xkX3dtKTsKKysgICAgICAgfQorKworKyAgICAgIHBlc3QtPmZpcnN0ID0gMDsKKysgICAgfQorKyAgZWxzZQorKyAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHBlc3QtPnN0cmVhbSwgIiwgIik7CisrCisrICBpbmRlbnRfdG8gKHBlc3QtPnN0cmVhbSwgY29sKTsKKyt9CisrCisrLyogUHJpbnQgaGVscCBmb3IgRU5UUlkgdG8gU1RSRUFNLiAgKi8KKytzdGF0aWMgdm9pZAorK2hvbF9lbnRyeV9oZWxwIChzdHJ1Y3QgaG9sX2VudHJ5ICplbnRyeSwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLAorKyAgICAgICAgICAgICAgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtLCBzdHJ1Y3QgaG9sX2hlbHBfc3RhdGUgKmhoc3RhdGUpCisreworKyAgdW5zaWduZWQgbnVtOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsID0gZW50cnktPm9wdCwgKm9wdDsKKysgIGNoYXIgKnNvID0gZW50cnktPnNob3J0X29wdGlvbnM7CisrICBpbnQgaGF2ZV9sb25nX29wdCA9IDA7ICAgICAgIC8qIFdlIGhhdmUgYW55IGxvbmcgb3B0aW9ucy4gICovCisrICAvKiBTYXZlZCBtYXJnaW5zLiAgKi8KKysgIGludCBvbGRfbG0gPSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIDApOworKyAgaW50IG9sZF93bSA9IF9fYXJncF9mbXRzdHJlYW1fd21hcmdpbiAoc3RyZWFtKTsKKysgIC8qIFBFU1QgaXMgYSBzdGF0ZSBibG9jayBob2xkaW5nIHNvbWUgb2Ygb3VyIHZhcmlhYmxlcyB0aGF0IHdlJ2QgbGlrZSB0bworKyAgICAgc2hhcmUgd2l0aCBoZWxwZXIgZnVuY3Rpb25zLiAgKi8KKysgIHN0cnVjdCBwZW50cnlfc3RhdGUgcGVzdCA9IHsgZW50cnksIHN0cmVhbSwgaGhzdGF0ZSwgMSwgc3RhdGUgfTsKKysKKysgIGlmICghIG9kb2MgKHJlYWwpKQorKyAgICBmb3IgKG9wdCA9IHJlYWwsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgICBpZiAob3B0LT5uYW1lICYmIG92aXNpYmxlIChvcHQpKQorKyAgICAgICB7CisrICAgICAgICAgaGF2ZV9sb25nX29wdCA9IDE7CisrICAgICAgICAgYnJlYWs7CisrICAgICAgIH0KKysKKysgIC8qIEZpcnN0IGVtaXQgc2hvcnQgb3B0aW9ucy4gICovCisrICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIHVwYXJhbXMuc2hvcnRfb3B0X2NvbCk7IC8qIEZvciB0cnVseSBiaXphcnJlIGNhc2VzLiAqLworKyAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgIGlmIChvc2hvcnQgKG9wdCkgJiYgb3B0LT5rZXkgPT0gKnNvKQorKyAgICAgIC8qIE9QVCBoYXMgYSB2YWxpZCAobm9uIHNoYWRvd2VkKSBzaG9ydCBvcHRpb24uICAqLworKyAgICAgIHsKKysgICAgICAgaWYgKG92aXNpYmxlIChvcHQpKQorKyAgICAgICAgIHsKKysgICAgICAgICAgIGNvbW1hICh1cGFyYW1zLnNob3J0X29wdF9jb2wsICZwZXN0KTsKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnLScpOworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICpzbyk7CisrICAgICAgICAgICBpZiAoIWhhdmVfbG9uZ19vcHQgfHwgdXBhcmFtcy5kdXBfYXJncykKKysgICAgICAgICAgICAgYXJnIChyZWFsLCAiICVzIiwgIlslc10iLAorKyAgICAgICAgICAgICAgICAgIHN0YXRlID09IE5VTEwgPyBOVUxMIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysgICAgICAgICAgIGVsc2UgaWYgKHJlYWwtPmFyZykKKysgICAgICAgICAgICAgaGhzdGF0ZS0+c3VwcHJlc3NlZF9kdXBfYXJnID0gMTsKKysgICAgICAgICB9CisrICAgICAgIHNvKys7CisrICAgICAgfQorKworKyAgLyogTm93LCBsb25nIG9wdGlvbnMuICAqLworKyAgaWYgKG9kb2MgKHJlYWwpKQorKyAgICAvKiBBIGBkb2N1bWVudGF0aW9uJyBvcHRpb24uICAqLworKyAgICB7CisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLmRvY19vcHRfY29sKTsKKysgICAgICBmb3IgKG9wdCA9IHJlYWwsIG51bSA9IGVudHJ5LT5udW07IG51bSA+IDA7IG9wdCsrLCBudW0tLSkKKysgICAgICAgaWYgKG9wdC0+bmFtZSAmJiBvdmlzaWJsZSAob3B0KSkKKysgICAgICAgICB7CisrICAgICAgICAgICBjb21tYSAodXBhcmFtcy5kb2Nfb3B0X2NvbCwgJnBlc3QpOworKyAgICAgICAgICAgLyogQ2FsbGluZyBnZXR0ZXh0IGhlcmUgaXNuJ3QgcXVpdGUgcmlnaHQsIHNpbmNlIHNvcnRpbmcgd2lsbAorKyAgICAgICAgICAgICAgaGF2ZSBiZWVuIGRvbmUgb24gdGhlIG9yaWdpbmFsOyBidXQgZG9jdW1lbnRhdGlvbiBvcHRpb25zCisrICAgICAgICAgICAgICBzaG91bGQgYmUgcHJldHR5IHJhcmUgYW55d2F5Li4uICAqLworKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnZXR0ZXh0IChzdGF0ZSA9PSBOVUxMID8gTlVMTAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdC0+bmFtZSkpOworKyAgICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBBIHJlYWwgbG9uZyBvcHRpb24uICAqLworKyAgICB7CisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLmxvbmdfb3B0X2NvbCk7CisrICAgICAgZm9yIChvcHQgPSByZWFsLCBudW0gPSBlbnRyeS0+bnVtOyBudW0gPiAwOyBvcHQrKywgbnVtLS0pCisrICAgICAgIGlmIChvcHQtPm5hbWUgJiYgb3Zpc2libGUgKG9wdCkpCisrICAgICAgICAgeworKyAgICAgICAgICAgY29tbWEgKHVwYXJhbXMubG9uZ19vcHRfY29sLCAmcGVzdCk7CisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiLS0lcyIsIG9wdC0+bmFtZSk7CisrICAgICAgICAgICBhcmcgKHJlYWwsICI9JXMiLCAiWz0lc10iLAorKyAgICAgICAgICAgICAgICBzdGF0ZSA9PSBOVUxMID8gTlVMTCA6IHN0YXRlLT5yb290X2FyZ3AtPmFyZ3BfZG9tYWluLCBzdHJlYW0pOworKyAgICAgICAgIH0KKysgICAgfQorKworKyAgLyogTmV4dCwgZG9jdW1lbnRhdGlvbiBzdHJpbmdzLiAgKi8KKysgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgMCk7CisrCisrICBpZiAocGVzdC5maXJzdCkKKysgICAgeworKyAgICAgIC8qIERpZG4ndCBwcmludCBhbnkgc3dpdGNoZXMsIHdoYXQncyB1cD8gICovCisrICAgICAgaWYgKCFvc2hvcnQgKHJlYWwpICYmICFyZWFsLT5uYW1lKQorKyAgICAgICAvKiBUaGlzIGlzIGEgZ3JvdXAgaGVhZGVyLCBwcmludCBpdCBuaWNlbHkuICAqLworKyAgICAgICBwcmludF9oZWFkZXIgKHJlYWwtPmRvYywgZW50cnktPmFyZ3AsICZwZXN0KTsKKysgICAgICBlbHNlCisrICAgICAgIC8qIEp1c3QgYSB0b3RhbGx5IHNoYWRvd2VkIG9wdGlvbiBvciBudWxsIGhlYWRlcjsgcHJpbnQgbm90aGluZy4gICovCisrICAgICAgIGdvdG8gY2xlYW51cDsgICAgICAgICAgIC8qIEp1c3QgcmV0dXJuLCBhZnRlciBjbGVhbmluZyB1cC4gICovCisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKnRzdHIgPSByZWFsLT5kb2MgPyBkZ2V0dGV4dCAoc3RhdGUgPT0gTlVMTCA/IE5VTEwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdGF0ZS0+cm9vdF9hcmdwLT5hcmdwX2RvbWFpbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhbC0+ZG9jKSA6IDA7CisrICAgICAgY29uc3QgY2hhciAqZnN0ciA9IGZpbHRlcl9kb2MgKHRzdHIsIHJlYWwtPmtleSwgZW50cnktPmFyZ3AsIHN0YXRlKTsKKysgICAgICBpZiAoZnN0ciAmJiAqZnN0cikKKysgICAgICAgeworKyAgICAgICAgIHVuc2lnbmVkIGludCBjb2wgPSBfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fc2V0X2xtYXJnaW4gKHN0cmVhbSwgdXBhcmFtcy5vcHRfZG9jX2NvbCk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoc3RyZWFtLCB1cGFyYW1zLm9wdF9kb2NfY29sKTsKKysKKysgICAgICAgICBpZiAoY29sID4gKHVuc2lnbmVkIGludCkgKHVwYXJhbXMub3B0X2RvY19jb2wgKyAzKSkKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBlbHNlIGlmIChjb2wgPj0gKHVuc2lnbmVkIGludCkgdXBhcmFtcy5vcHRfZG9jX2NvbCkKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCAiICAgIik7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgaW5kZW50X3RvIChzdHJlYW0sIHVwYXJhbXMub3B0X2RvY19jb2wpOworKworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCBmc3RyKTsKKysgICAgICAgfQorKyAgICAgIGlmIChmc3RyICYmIGZzdHIgIT0gdHN0cikKKysgICAgICAgZnJlZSAoKGNoYXIgKikgZnN0cik7CisrCisrICAgICAgLyogUmVzZXQgdGhlIGxlZnQgbWFyZ2luLiAgKi8KKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIDApOworKyAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgfQorKworKyAgaGhzdGF0ZS0+cHJldl9lbnRyeSA9IGVudHJ5OworKworK2NsZWFudXA6CisrICBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChzdHJlYW0sIG9sZF9sbSk7CisrICBfX2FyZ3BfZm10c3RyZWFtX3NldF93bWFyZ2luIChzdHJlYW0sIG9sZF93bSk7CisrfQorKworKy8qIE91dHB1dCBhIGxvbmcgaGVscCBtZXNzYWdlIGFib3V0IHRoZSBvcHRpb25zIGluIEhPTCB0byBTVFJFQU0uICAqLworK3N0YXRpYyB2b2lkCisraG9sX2hlbHAgKHN0cnVjdCBob2wgKmhvbCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLAorKyAgICAgICAgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIHVuc2lnbmVkIG51bTsKKysgIHN0cnVjdCBob2xfZW50cnkgKmVudHJ5OworKyAgc3RydWN0IGhvbF9oZWxwX3N0YXRlIGhoc3RhdGUgPSB7IDAsIDAsIDAgfTsKKysKKysgIGZvciAoZW50cnkgPSBob2wtPmVudHJpZXMsIG51bSA9IGhvbC0+bnVtX2VudHJpZXM7IG51bSA+IDA7IGVudHJ5KyssIG51bS0tKQorKyAgICBob2xfZW50cnlfaGVscCAoZW50cnksIHN0YXRlLCBzdHJlYW0sICZoaHN0YXRlKTsKKysKKysgIGlmIChoaHN0YXRlLnN1cHByZXNzZWRfZHVwX2FyZyAmJiB1cGFyYW1zLmR1cF9hcmdzX25vdGUpCisrICAgIHsKKysgICAgICBjb25zdCBjaGFyICp0c3RyID0gZGdldHRleHQgKHN0YXRlID09IE5VTEwgPyBOVUxMCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sICJcCisrTWFuZGF0b3J5IG9yIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBsb25nIG9wdGlvbnMgYXJlIGFsc28gbWFuZGF0b3J5IG9yIFwKKytvcHRpb25hbCBmb3IgYW55IGNvcnJlc3BvbmRpbmcgc2hvcnQgb3B0aW9ucy4iKTsKKysgICAgICBjb25zdCBjaGFyICpmc3RyID0gZmlsdGVyX2RvYyAodHN0ciwgQVJHUF9LRVlfSEVMUF9EVVBfQVJHU19OT1RFLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPnJvb3RfYXJncCA6IDAsIHN0YXRlKTsKKysgICAgICBpZiAoZnN0ciAmJiAqZnN0cikKKysgICAgICAgeworKyAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0YyAoc3RyZWFtLCAnXG4nKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKHN0cmVhbSwgZnN0cik7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICB9CisrICAgICAgaWYgKGZzdHIgJiYgZnN0ciAhPSB0c3RyKQorKyAgICAgICBmcmVlICgoY2hhciAqKSBmc3RyKTsKKysgICAgfQorK30KKysKKysvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBob2xfdXNhZ2UuICAqLworKworKy8qIElmIE9QVCBpcyBhIHNob3J0IG9wdGlvbiB3aXRob3V0IGFuIGFyZywgYXBwZW5kIGl0cyBrZXkgdG8gdGhlIHN0cmluZworKyAgIHBvaW50ZXIgcG9pbnRlciB0byBieSBDT09LSUUsIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyLiAgKi8KKytzdGF0aWMgaW50CisrYWRkX2FyZ2xlc3Nfc2hvcnRfb3B0IChjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpyZWFsLAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICBjaGFyICoqc25hb19lbmQgPSBjb29raWU7CisrICBpZiAoIShvcHQtPmFyZyB8fCByZWFsLT5hcmcpCisrICAgICAgJiYgISgob3B0LT5mbGFncyB8IHJlYWwtPmZsYWdzKSAmIE9QVElPTl9OT19VU0FHRSkpCisrICAgICooKnNuYW9fZW5kKSsrID0gb3B0LT5rZXk7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogSWYgT1BUIGlzIGEgc2hvcnQgb3B0aW9uIHdpdGggYW4gYXJnLCBvdXRwdXQgYSB1c2FnZSBlbnRyeSBmb3IgaXQgdG8gdGhlCisrICAgc3RyZWFtIHBvaW50ZWQgYXQgYnkgQ09PS0lFLiAgKi8KKytzdGF0aWMgaW50CisrdXNhZ2VfYXJnZnVsX3Nob3J0X29wdCAoY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSA9IGNvb2tpZTsKKysgIGNvbnN0IGNoYXIgKmFyZyA9IG9wdC0+YXJnOworKyAgaW50IGZsYWdzID0gb3B0LT5mbGFncyB8IHJlYWwtPmZsYWdzOworKworKyAgaWYgKCEgYXJnKQorKyAgICBhcmcgPSByZWFsLT5hcmc7CisrCisrICBpZiAoYXJnICYmICEoZmxhZ3MgJiBPUFRJT05fTk9fVVNBR0UpKQorKyAgICB7CisrICAgICAgYXJnID0gZGdldHRleHQgKGRvbWFpbiwgYXJnKTsKKysKKysgICAgICBpZiAoZmxhZ3MgJiBPUFRJT05fQVJHX09QVElPTkFMKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstJWNbJXNdXSIsIG9wdC0+a2V5LCBhcmcpOworKyAgICAgIGVsc2UKKysgICAgICAgeworKyAgICAgICAgIC8qIE1hbnVhbGx5IGRvIGxpbmUgd3JhcHBpbmcgc28gdGhhdCBpdCAocHJvYmFibHkpIHdvbid0CisrICAgICAgICAgICAgZ2V0IHdyYXBwZWQgYXQgdGhlIGVtYmVkZGVkIHNwYWNlLiAgKi8KKysgICAgICAgICBzcGFjZSAoc3RyZWFtLCA2ICsgc3RybGVuIChhcmcpKTsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiWy0lYyAlc10iLCBvcHQtPmtleSwgYXJnKTsKKysgICAgICAgfQorKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogT3V0cHV0IGEgdXNhZ2UgZW50cnkgZm9yIHRoZSBsb25nIG9wdGlvbiBvcHQgdG8gdGhlIHN0cmVhbSBwb2ludGVkIGF0IGJ5CisrICAgQ09PS0lFLiAgKi8KKytzdGF0aWMgaW50CisrdXNhZ2VfbG9uZ19vcHQgKGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqb3B0LAorKyAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiAqcmVhbCwKKysgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkb21haW4sIHZvaWQgKmNvb2tpZSkKKyt7CisrICBhcmdwX2ZtdHN0cmVhbV90IHN0cmVhbSA9IGNvb2tpZTsKKysgIGNvbnN0IGNoYXIgKmFyZyA9IG9wdC0+YXJnOworKyAgaW50IGZsYWdzID0gb3B0LT5mbGFncyB8IHJlYWwtPmZsYWdzOworKworKyAgaWYgKCEgYXJnKQorKyAgICBhcmcgPSByZWFsLT5hcmc7CisrCisrICBpZiAoISAoZmxhZ3MgJiBPUFRJT05fTk9fVVNBR0UpKQorKyAgICB7CisrICAgICAgaWYgKGFyZykKKysgICAgICAgeworKyAgICAgICAgIGFyZyA9IGRnZXR0ZXh0IChkb21haW4sIGFyZyk7CisrICAgICAgICAgaWYgKGZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTCkKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0tJXNbPSVzXV0iLCBvcHQtPm5hbWUsIGFyZyk7CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKHN0cmVhbSwgIiBbLS0lcz0lc10iLCBvcHQtPm5hbWUsIGFyZyk7CisrICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChzdHJlYW0sICIgWy0tJXNdIiwgb3B0LT5uYW1lKTsKKysgICAgfQorKworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFByaW50IGEgc2hvcnQgdXNhZ2UgZGVzY3JpcHRpb24gZm9yIHRoZSBhcmd1bWVudHMgaW4gSE9MIHRvIFNUUkVBTS4gICovCisrc3RhdGljIHZvaWQKKytob2xfdXNhZ2UgKHN0cnVjdCBob2wgKmhvbCwgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgaWYgKGhvbC0+bnVtX2VudHJpZXMgPiAwKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgbmVudHJpZXM7CisrICAgICAgc3RydWN0IGhvbF9lbnRyeSAqZW50cnk7CisrICAgICAgY2hhciAqc2hvcnRfbm9fYXJnX29wdHMgPSBhbGxvY2EgKHN0cmxlbiAoaG9sLT5zaG9ydF9vcHRpb25zKSArIDEpOworKyAgICAgIGNoYXIgKnNuYW9fZW5kID0gc2hvcnRfbm9fYXJnX29wdHM7CisrCisrICAgICAgLyogRmlyc3Qgd2UgcHV0IGEgbGlzdCBvZiBzaG9ydCBvcHRpb25zIHdpdGhvdXQgYXJndW1lbnRzLiAgKi8KKysgICAgICBmb3IgKGVudHJ5ID0gaG9sLT5lbnRyaWVzLCBuZW50cmllcyA9IGhvbC0+bnVtX2VudHJpZXMKKysgICAgICAgICAgOyBuZW50cmllcyA+IDAKKysgICAgICAgICAgOyBlbnRyeSsrLCBuZW50cmllcy0tKQorKyAgICAgICBob2xfZW50cnlfc2hvcnRfaXRlcmF0ZSAoZW50cnksIGFkZF9hcmdsZXNzX3Nob3J0X29wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgJnNuYW9fZW5kKTsKKysgICAgICBpZiAoc25hb19lbmQgPiBzaG9ydF9ub19hcmdfb3B0cykKKysgICAgICAgeworKyAgICAgICAgICpzbmFvX2VuZCsrID0gMDsKKysgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoc3RyZWFtLCAiIFstJXNdIiwgc2hvcnRfbm9fYXJnX29wdHMpOworKyAgICAgICB9CisrCisrICAgICAgLyogTm93IGEgbGlzdCBvZiBzaG9ydCBvcHRpb25zICp3aXRoKiBhcmd1bWVudHMuICAqLworKyAgICAgIGZvciAoZW50cnkgPSBob2wtPmVudHJpZXMsIG5lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcworKyAgICAgICAgICA7IG5lbnRyaWVzID4gMAorKyAgICAgICAgICA7IGVudHJ5KyssIG5lbnRyaWVzLS0pCisrICAgICAgIGhvbF9lbnRyeV9zaG9ydF9pdGVyYXRlIChlbnRyeSwgdXNhZ2VfYXJnZnVsX3Nob3J0X29wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcmdwLT5hcmdwX2RvbWFpbiwgc3RyZWFtKTsKKysKKysgICAgICAvKiBGaW5hbGx5LCBhIGxpc3Qgb2YgbG9uZyBvcHRpb25zICh3aGV3ISkuICAqLworKyAgICAgIGZvciAoZW50cnkgPSBob2wtPmVudHJpZXMsIG5lbnRyaWVzID0gaG9sLT5udW1fZW50cmllcworKyAgICAgICAgICA7IG5lbnRyaWVzID4gMAorKyAgICAgICAgICA7IGVudHJ5KyssIG5lbnRyaWVzLS0pCisrICAgICAgIGhvbF9lbnRyeV9sb25nX2l0ZXJhdGUgKGVudHJ5LCB1c2FnZV9sb25nX29wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFyZ3AtPmFyZ3BfZG9tYWluLCBzdHJlYW0pOworKyAgICB9CisrfQorKworKy8qIE1ha2UgYSBIT0wgY29udGFpbmluZyBhbGwgbGV2ZWxzIG9mIG9wdGlvbnMgaW4gQVJHUC4gIENMVVNURVIgaXMgdGhlCisrICAgY2x1c3RlciBpbiB3aGljaCBBUkdQJ3MgZW50cmllcyBzaG91bGQgYmUgY2x1c3RlcmVkLCBvciAwLiAgKi8KKytzdGF0aWMgc3RydWN0IGhvbCAqCisrYXJncF9ob2wgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBzdHJ1Y3QgaG9sX2NsdXN0ZXIgKmNsdXN0ZXIpCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrICBzdHJ1Y3QgaG9sICpob2wgPSBtYWtlX2hvbCAoYXJncCwgY2x1c3Rlcik7CisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCkKKysgICAgICB7CisrICAgICAgIHN0cnVjdCBob2xfY2x1c3RlciAqY2hpbGRfY2x1c3RlciA9CisrICAgICAgICAgKChjaGlsZC0+Z3JvdXAgfHwgY2hpbGQtPmhlYWRlcikKKysgICAgICAgICAgLyogUHV0IENISUxELT5hcmdwIHdpdGhpbiBpdHMgb3duIGNsdXN0ZXIuICAqLworKyAgICAgICAgICA/IGhvbF9hZGRfY2x1c3RlciAoaG9sLCBjaGlsZC0+Z3JvdXAsIGNoaWxkLT5oZWFkZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCAtIGFyZ3AtPmNoaWxkcmVuLCBjbHVzdGVyLCBhcmdwKQorKyAgICAgICAgICAvKiBKdXN0IG1lcmdlIGl0IGludG8gdGhlIHBhcmVudCdzIGNsdXN0ZXIuICAqLworKyAgICAgICAgICA6IGNsdXN0ZXIpOworKyAgICAgICBob2xfYXBwZW5kIChob2wsIGFyZ3BfaG9sIChjaGlsZC0+YXJncCwgY2hpbGRfY2x1c3RlcikpIDsKKysgICAgICAgY2hpbGQrKzsKKysgICAgICB9CisrICByZXR1cm4gaG9sOworK30KKysKKysvKiBDYWxjdWxhdGUgaG93IG1hbnkgZGlmZmVyZW50IGxldmVscyB3aXRoIGFsdGVybmF0aXZlIGFyZ3Mgc3RyaW5ncyBleGlzdCBpbgorKyAgIEFSR1AuICAqLworK3N0YXRpYyBzaXplX3QKKythcmdwX2FyZ3NfbGV2ZWxzIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCkKKyt7CisrICBzaXplX3QgbGV2ZWxzID0gMDsKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKworKyAgaWYgKGFyZ3AtPmFyZ3NfZG9jICYmIHN0cmNociAoYXJncC0+YXJnc19kb2MsICdcbicpKQorKyAgICBsZXZlbHMrKzsKKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIGxldmVscyArPSBhcmdwX2FyZ3NfbGV2ZWxzICgoY2hpbGQrKyktPmFyZ3ApOworKworKyAgcmV0dXJuIGxldmVsczsKKyt9CisrCisrLyogUHJpbnQgYWxsIHRoZSBub24tb3B0aW9uIGFyZ3MgZG9jdW1lbnRlZCBpbiBBUkdQIHRvIFNUUkVBTS4gIEFueSBvdXRwdXQgaXMKKysgICBwcmVjZWRlZCBieSBhIHNwYWNlLiAgTEVWRUxTIGlzIGEgcG9pbnRlciB0byBhIGJ5dGUgdmVjdG9yIHRoZSBsZW5ndGgKKysgICByZXR1cm5lZCBieSBhcmdwX2FyZ3NfbGV2ZWxzOyBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgYW5kCisrICAgdXBkYXRlZCBieSB0aGlzIHJvdXRpbmUgZm9yIHRoZSBuZXh0IGNhbGwgaWYgQURWQU5DRSBpcyB0cnVlLiAgVHJ1ZSBpcworKyAgIHJldHVybmVkIGFzIGxvbmcgYXMgdGhlcmUgYXJlIG1vcmUgcGF0dGVybnMgdG8gb3V0cHV0LiAgKi8KKytzdGF0aWMgaW50CisrYXJncF9hcmdzX3VzYWdlIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLAorKyAgICAgICAgICAgICAgICBjaGFyICoqbGV2ZWxzLCBpbnQgYWR2YW5jZSwgYXJncF9mbXRzdHJlYW1fdCBzdHJlYW0pCisreworKyAgY2hhciAqb3VyX2xldmVsID0gKmxldmVsczsKKysgIGludCBtdWx0aXBsZSA9IDA7CisrICBjb25zdCBzdHJ1Y3QgYXJncF9jaGlsZCAqY2hpbGQgPSBhcmdwLT5jaGlsZHJlbjsKKysgIGNvbnN0IGNoYXIgKnRkb2MgPSBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sIGFyZ3AtPmFyZ3NfZG9jKSwgKm5sID0gMDsKKysgIGNvbnN0IGNoYXIgKmZkb2MgPSBmaWx0ZXJfZG9jICh0ZG9jLCBBUkdQX0tFWV9IRUxQX0FSR1NfRE9DLCBhcmdwLCBzdGF0ZSk7CisrCisrICBpZiAoZmRvYykKKysgICAgeworKyAgICAgIGNvbnN0IGNoYXIgKmNwID0gZmRvYzsKKysgICAgICBubCA9IHN0cmNocm51bCAoY3AsICdcbicpOworKyAgICAgIGlmICgqbmwgIT0gJ1wwJykKKysgICAgICAgLyogVGhpcyBpcyBhIGBtdWx0aS1sZXZlbCcgYXJncyBkb2M7IGFkdmFuY2UgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24KKysgICAgICAgICAgYXMgZGV0ZXJtaW5lZCBieSBvdXIgc3RhdGUgaW4gTEVWRUxTLCBhbmQgdXBkYXRlIExFVkVMUy4gICovCisrICAgICAgIHsKKysgICAgICAgICBpbnQgaTsKKysgICAgICAgICBtdWx0aXBsZSA9IDE7CisrICAgICAgICAgZm9yIChpID0gMDsgaSA8ICpvdXJfbGV2ZWw7IGkrKykKKysgICAgICAgICAgIGNwID0gbmwgKyAxLCBubCA9IHN0cmNocm51bCAoY3AsICdcbicpOworKyAgICAgICAgICgqbGV2ZWxzKSsrOworKyAgICAgICB9CisrCisrICAgICAgLyogTWFudWFsbHkgZG8gbGluZSB3cmFwcGluZyBzbyB0aGF0IGl0IChwcm9iYWJseSkgd29uJ3QgZ2V0IHdyYXBwZWQgYXQKKysgICAgICAgIGFueSBlbWJlZGRlZCBzcGFjZXMuICAqLworKyAgICAgIHNwYWNlIChzdHJlYW0sIDEgKyBubCAtIGNwKTsKKysKKysgICAgICBfX2FyZ3BfZm10c3RyZWFtX3dyaXRlIChzdHJlYW0sIGNwLCBubCAtIGNwKTsKKysgICAgfQorKyAgaWYgKGZkb2MgJiYgZmRvYyAhPSB0ZG9jKQorKyAgICBmcmVlICgoY2hhciAqKWZkb2MpOyAgICAgICAvKiBGcmVlIHVzZXIncyBtb2RpZmllZCBkb2Mgc3RyaW5nLiAgKi8KKysKKysgIGlmIChjaGlsZCkKKysgICAgd2hpbGUgKGNoaWxkLT5hcmdwKQorKyAgICAgIGFkdmFuY2UgPSAhYXJncF9hcmdzX3VzYWdlICgoY2hpbGQrKyktPmFyZ3AsIHN0YXRlLCBsZXZlbHMsIGFkdmFuY2UsIHN0cmVhbSk7CisrCisrICBpZiAoYWR2YW5jZSAmJiBtdWx0aXBsZSkKKysgICAgeworKyAgICAgIC8qIE5lZWQgdG8gaW5jcmVtZW50IG91ciBsZXZlbC4gICovCisrICAgICAgaWYgKCpubCkKKysgICAgICAgLyogVGhlcmUncyBtb3JlIHdlIGNhbiBkbyBoZXJlLiAgKi8KKysgICAgICAgeworKyAgICAgICAgICgqb3VyX2xldmVsKSsrOworKyAgICAgICAgIGFkdmFuY2UgPSAwOyAgICAgICAgICAvKiBPdXIgcGFyZW50IHNob3VsZG4ndCBhZHZhbmNlIGFsc28uICovCisrICAgICAgIH0KKysgICAgICBlbHNlIGlmICgqb3VyX2xldmVsID4gMCkKKysgICAgICAgLyogV2UgaGFkIG11bHRpcGxlIGxldmVscywgYnV0IHVzZWQgdGhlbSB1cDsgcmVzZXQgdG8gemVyby4gICovCisrICAgICAgICpvdXJfbGV2ZWwgPSAwOworKyAgICB9CisrCisrICByZXR1cm4gIWFkdmFuY2U7CisrfQorKworKy8qIFByaW50IHRoZSBkb2N1bWVudGF0aW9uIGZvciBBUkdQIHRvIFNUUkVBTTsgaWYgUE9TVCBpcyBmYWxzZSwgdGhlbgorKyAgIGV2ZXJ5dGhpbmcgcHJlY2VlZGluZyBhIGBcdicgY2hhcmFjdGVyIGluIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZ3MgKG9yCisrICAgdGhlIHdob2xlIHN0cmluZywgZm9yIHRob3NlIHdpdGggbm9uZSkgaXMgcHJpbnRlZCwgb3RoZXJ3aXNlLCBldmVyeXRoaW5nCisrICAgZm9sbG93aW5nIHRoZSBgXHYnIGNoYXJhY3RlciAobm90aGluZyBmb3Igc3RyaW5ncyB3aXRob3V0KS4gIEVhY2ggc2VwYXJhdGUKKysgICBiaXQgb2YgZG9jdW1lbnRhdGlvbiBpcyBzZXBhcmF0ZWQgYSBibGFuayBsaW5lLCBhbmQgaWYgUFJFX0JMQU5LIGlzIHRydWUsCisrICAgdGhlbiB0aGUgZmlyc3QgaXMgYXMgd2VsbC4gIElmIEZJUlNUX09OTFkgaXMgdHJ1ZSwgb25seSB0aGUgZmlyc3QKKysgICBvY2N1cnJlbmNlIGlzIG91dHB1dC4gIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgb3V0cHV0LiAgKi8KKytzdGF0aWMgaW50CisrYXJncF9kb2MgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBjb25zdCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUsCisrICAgICAgICAgaW50IHBvc3QsIGludCBwcmVfYmxhbmssIGludCBmaXJzdF9vbmx5LAorKyAgICAgICAgIGFyZ3BfZm10c3RyZWFtX3Qgc3RyZWFtKQorK3sKKysgIGNvbnN0IGNoYXIgKnRleHQ7CisrICBjb25zdCBjaGFyICppbnBfdGV4dDsKKysgIHZvaWQgKmlucHV0ID0gMDsKKysgIGludCBhbnl0aGluZyA9IDA7CisrICBzaXplX3QgaW5wX3RleHRfbGltaXQgPSAwOworKyAgY29uc3QgY2hhciAqZG9jID0gZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCBhcmdwLT5kb2MpOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYXJncC0+Y2hpbGRyZW47CisrCisrICBpZiAoZG9jKQorKyAgICB7CisrICAgICAgY2hhciAqdnQgPSBzdHJjaHIgKGRvYywgJ1x2Jyk7CisrICAgICAgaW5wX3RleHQgPSBwb3N0ID8gKHZ0ID8gdnQgKyAxIDogMCkgOiBkb2M7CisrICAgICAgaW5wX3RleHRfbGltaXQgPSAoIXBvc3QgJiYgdnQpID8gKHZ0IC0gZG9jKSA6IDA7CisrICAgIH0KKysgIGVsc2UKKysgICAgaW5wX3RleHQgPSAwOworKworKyAgaWYgKGFyZ3AtPmhlbHBfZmlsdGVyKQorKyAgICAvKiBXZSBoYXZlIHRvIGZpbHRlciB0aGUgZG9jIHN0cmluZ3MuICAqLworKyAgICB7CisrICAgICAgaWYgKGlucF90ZXh0X2xpbWl0KQorKyAgICAgICAvKiBDb3B5IElOUF9URVhUIHNvIHRoYXQgaXQncyBudWwtdGVybWluYXRlZC4gICovCisrICAgICAgIGlucF90ZXh0ID0gc3RybmR1cCAoaW5wX3RleHQsIGlucF90ZXh0X2xpbWl0KTsKKysgICAgICBpbnB1dCA9IF9fYXJncF9pbnB1dCAoYXJncCwgc3RhdGUpOworKyAgICAgIHRleHQgPQorKyAgICAgICAoKmFyZ3AtPmhlbHBfZmlsdGVyKSAocG9zdAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBBUkdQX0tFWV9IRUxQX1BPU1RfRE9DCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEFSR1BfS0VZX0hFTFBfUFJFX0RPQywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucF90ZXh0LCBpbnB1dCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgdGV4dCA9IChjb25zdCBjaGFyICopIGlucF90ZXh0OworKworKyAgaWYgKHRleHQpCisrICAgIHsKKysgICAgICBpZiAocHJlX2JsYW5rKQorKyAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrCisrICAgICAgaWYgKHRleHQgPT0gaW5wX3RleHQgJiYgaW5wX3RleHRfbGltaXQpCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fd3JpdGUgKHN0cmVhbSwgaW5wX3RleHQsIGlucF90ZXh0X2xpbWl0KTsKKysgICAgICBlbHNlCisrICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHV0cyAoc3RyZWFtLCB0ZXh0KTsKKysKKysgICAgICBpZiAoX19hcmdwX2ZtdHN0cmVhbV9wb2ludCAoc3RyZWFtKSA+IF9fYXJncF9mbXRzdHJlYW1fbG1hcmdpbiAoc3RyZWFtKSkKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKworKyAgICAgIGFueXRoaW5nID0gMTsKKysgICAgfQorKworKyAgaWYgKHRleHQgJiYgdGV4dCAhPSBpbnBfdGV4dCkKKysgICAgZnJlZSAoKGNoYXIgKikgdGV4dCk7ICAgICAgLyogRnJlZSBURVhUIHJldHVybmVkIGZyb20gdGhlIGhlbHAgZmlsdGVyLiAgKi8KKysgIGlmIChpbnBfdGV4dCAmJiBpbnBfdGV4dF9saW1pdCAmJiBhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgZnJlZSAoKGNoYXIgKikgaW5wX3RleHQpOyAgLyogV2UgY29waWVkIElOUF9URVhULCBzbyBmcmVlIGl0IG5vdy4gICovCisrCisrICBpZiAocG9zdCAmJiBhcmdwLT5oZWxwX2ZpbHRlcikKKysgICAgLyogTm93IHNlZSBpZiB3ZSBoYXZlIHRvIG91dHB1dCBhIEFSR1BfS0VZX0hFTFBfRVhUUkEgdGV4dC4gICovCisrICAgIHsKKysgICAgICB0ZXh0ID0gKCphcmdwLT5oZWxwX2ZpbHRlcikgKEFSR1BfS0VZX0hFTFBfRVhUUkEsIDAsIGlucHV0KTsKKysgICAgICBpZiAodGV4dCkKKysgICAgICAgeworKyAgICAgICAgIGlmIChhbnl0aGluZyB8fCBwcmVfYmxhbmspCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKHN0cmVhbSwgJ1xuJyk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRzIChzdHJlYW0sIHRleHQpOworKyAgICAgICAgIGZyZWUgKChjaGFyICopIHRleHQpOworKyAgICAgICAgIGlmIChfX2FyZ3BfZm10c3RyZWFtX3BvaW50IChzdHJlYW0pCisrICAgICAgICAgICAgID4gX19hcmdwX2ZtdHN0cmVhbV9sbWFyZ2luIChzdHJlYW0pKQorKyAgICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChzdHJlYW0sICdcbicpOworKyAgICAgICAgIGFueXRoaW5nID0gMTsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAoY2hpbGQpCisrICAgIHdoaWxlIChjaGlsZC0+YXJncCAmJiAhKGZpcnN0X29ubHkgJiYgYW55dGhpbmcpKQorKyAgICAgIGFueXRoaW5nIHw9CisrICAgICAgIGFyZ3BfZG9jICgoY2hpbGQrKyktPmFyZ3AsIHN0YXRlLAorKyAgICAgICAgICAgICAgICAgcG9zdCwgYW55dGhpbmcgfHwgcHJlX2JsYW5rLCBmaXJzdF9vbmx5LAorKyAgICAgICAgICAgICAgICAgc3RyZWFtKTsKKysKKysgIHJldHVybiBhbnl0aGluZzsKKyt9CisrCisrLyogT3V0cHV0IGEgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBTVFJFQU0uICBJZiBjYWxsZWQgZnJvbQorKyAgIGFyZ3Bfc3RhdGVfaGVscCwgU1RBVEUgaXMgdGhlIHJlbGV2ZW50IHBhcnNpbmcgc3RhdGUuICBGTEFHUyBhcmUgZnJvbSB0aGUKKysgICBzZXQgQVJHUF9IRUxQXyouICBOQU1FIGlzIHdoYXQgdG8gdXNlIHdoZXJldmVyIGEgYHByb2dyYW0gbmFtZScgaXMKKysgICBuZWVkZWQuICovCisrc3RhdGljIHZvaWQKKytfaGVscCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgRklMRSAqc3RyZWFtLAorKyAgICAgICB1bnNpZ25lZCBmbGFncywgY2hhciAqbmFtZSkKKyt7CisrICBpbnQgYW55dGhpbmcgPSAwOyAgICAgICAgICAgIC8qIFdoZXRoZXIgd2UndmUgb3V0cHV0IGFueXRoaW5nLiAgKi8KKysgIHN0cnVjdCBob2wgKmhvbCA9IDA7CisrICBhcmdwX2ZtdHN0cmVhbV90IGZzOworKworKyAgaWYgKCEgc3RyZWFtKQorKyAgICByZXR1cm47CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgZmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgZmlsbF9pbl91cGFyYW1zIChzdGF0ZSk7CisrCisrICBmcyA9IF9fYXJncF9tYWtlX2ZtdHN0cmVhbSAoc3RyZWFtLCAwLCB1cGFyYW1zLnJtYXJnaW4sIDApOworKyAgaWYgKCEgZnMpCisrICAgIHsKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrICAgICAgcmV0dXJuOworKyAgICB9CisrCisrICBpZiAoZmxhZ3MgJiAoQVJHUF9IRUxQX1VTQUdFIHwgQVJHUF9IRUxQX1NIT1JUX1VTQUdFIHwgQVJHUF9IRUxQX0xPTkcpKQorKyAgICB7CisrICAgICAgaG9sID0gYXJncF9ob2wgKGFyZ3AsIDApOworKworKyAgICAgIC8qIElmIHByZXNlbnQsIHRoZXNlIG9wdGlvbnMgYWx3YXlzIGNvbWUgbGFzdC4gICovCisrICAgICAgaG9sX3NldF9ncm91cCAoaG9sLCAiaGVscCIsIC0xKTsKKysgICAgICBob2xfc2V0X2dyb3VwIChob2wsICJ2ZXJzaW9uIiwgLTEpOworKworKyAgICAgIGhvbF9zb3J0IChob2wpOworKyAgICB9CisrCisrICBpZiAoZmxhZ3MgJiAoQVJHUF9IRUxQX1VTQUdFIHwgQVJHUF9IRUxQX1NIT1JUX1VTQUdFKSkKKysgICAgLyogUHJpbnQgYSBzaG9ydCBgVXNhZ2U6JyBtZXNzYWdlLiAgKi8KKysgICAgeworKyAgICAgIGludCBmaXJzdF9wYXR0ZXJuID0gMSwgbW9yZV9wYXR0ZXJuczsKKysgICAgICBzaXplX3QgbnVtX3BhdHRlcm5fbGV2ZWxzID0gYXJncF9hcmdzX2xldmVscyAoYXJncCk7CisrICAgICAgY2hhciAqcGF0dGVybl9sZXZlbHMgPSBhbGxvY2EgKG51bV9wYXR0ZXJuX2xldmVscyk7CisrCisrICAgICAgbWVtc2V0IChwYXR0ZXJuX2xldmVscywgMCwgbnVtX3BhdHRlcm5fbGV2ZWxzKTsKKysKKysgICAgICBkbworKyAgICAgICB7CisrICAgICAgICAgaW50IG9sZF9sbTsKKysgICAgICAgICBpbnQgb2xkX3dtID0gX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoZnMsIHVwYXJhbXMudXNhZ2VfaW5kZW50KTsKKysgICAgICAgICBjaGFyICpsZXZlbHMgPSBwYXR0ZXJuX2xldmVsczsKKysKKysgICAgICAgICBpZiAoZmlyc3RfcGF0dGVybikKKysgICAgICAgICAgIF9fYXJncF9mbXRzdHJlYW1fcHJpbnRmIChmcywgIiVzICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sICJVc2FnZToiKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3ByaW50ZiAoZnMsICIlcyAlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKGFyZ3AtPmFyZ3BfZG9tYWluLCAiICBvcjogIiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CisrCisrICAgICAgICAgLyogV2Ugc2V0IHRoZSBsbWFyZ2luIGFzIHdlbGwgYXMgdGhlIHdtYXJnaW4sIGJlY2F1c2UgaG9sX3VzYWdlCisrICAgICAgICAgICAgbWFudWFsbHkgd3JhcHMgb3B0aW9ucyB3aXRoIG5ld2xpbmUgdG8gYXZvaWQgYW5ub3lpbmcgYnJlYWtzLiAgKi8KKysgICAgICAgICBvbGRfbG0gPSBfX2FyZ3BfZm10c3RyZWFtX3NldF9sbWFyZ2luIChmcywgdXBhcmFtcy51c2FnZV9pbmRlbnQpOworKworKyAgICAgICAgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9TSE9SVF9VU0FHRSkKKysgICAgICAgICAgIC8qIEp1c3Qgc2hvdyB3aGVyZSB0aGUgb3B0aW9ucyBnby4gICovCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGlmIChob2wtPm51bV9lbnRyaWVzID4gMCkKKysgICAgICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dHMgKGZzLCBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgW09QVElPTi4uLl0iKSk7CisrICAgICAgICAgICB9CisrICAgICAgICAgZWxzZQorKyAgICAgICAgICAgLyogQWN0dWFsbHkgcHJpbnQgdGhlIG9wdGlvbnMuICAqLworKyAgICAgICAgICAgeworKyAgICAgICAgICAgICBob2xfdXNhZ2UgKGhvbCwgZnMpOworKyAgICAgICAgICAgICBmbGFncyB8PSBBUkdQX0hFTFBfU0hPUlRfVVNBR0U7IC8qIEJ1dCBvbmx5IGRvIHNvIG9uY2UuICAqLworKyAgICAgICAgICAgfQorKworKyAgICAgICAgIG1vcmVfcGF0dGVybnMgPSBhcmdwX2FyZ3NfdXNhZ2UgKGFyZ3AsIHN0YXRlLCAmbGV2ZWxzLCAxLCBmcyk7CisrCisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfd21hcmdpbiAoZnMsIG9sZF93bSk7CisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9zZXRfbG1hcmdpbiAoZnMsIG9sZF9sbSk7CisrCisrICAgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChmcywgJ1xuJyk7CisrICAgICAgICAgYW55dGhpbmcgPSAxOworKworKyAgICAgICAgIGZpcnN0X3BhdHRlcm4gPSAwOworKyAgICAgICB9CisrICAgICAgd2hpbGUgKG1vcmVfcGF0dGVybnMpOworKyAgICB9CisrCisrICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfUFJFX0RPQykKKysgICAgYW55dGhpbmcgfD0gYXJncF9kb2MgKGFyZ3AsIHN0YXRlLCAwLCAwLCAxLCBmcyk7CisrCisrICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfU0VFKQorKyAgICB7CisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sICJcCisrVHJ5IGAlcyAtLWhlbHAnIG9yIGAlcyAtLXVzYWdlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG5hbWUpOworKyAgICAgIGFueXRoaW5nID0gMTsKKysgICAgfQorKworKyAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX0xPTkcpCisrICAgIC8qIFByaW50IGEgbG9uZywgZGV0YWlsZWQgaGVscCBtZXNzYWdlLiAgKi8KKysgICAgeworKyAgICAgIC8qIFByaW50IGluZm8gYWJvdXQgYWxsIHRoZSBvcHRpb25zLiAgKi8KKysgICAgICBpZiAoaG9sLT5udW1fZW50cmllcyA+IDApCisrICAgICAgIHsKKysgICAgICAgICBpZiAoYW55dGhpbmcpCisrICAgICAgICAgICBfX2FyZ3BfZm10c3RyZWFtX3B1dGMgKGZzLCAnXG4nKTsKKysgICAgICAgICBob2xfaGVscCAoaG9sLCBzdGF0ZSwgZnMpOworKyAgICAgICAgIGFueXRoaW5nID0gMTsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAoZmxhZ3MgJiBBUkdQX0hFTFBfUE9TVF9ET0MpCisrICAgIC8qIFByaW50IGFueSBkb2N1bWVudGF0aW9uIHN0cmluZ3MgYXQgdGhlIGVuZC4gICovCisrICAgIGFueXRoaW5nIHw9IGFyZ3BfZG9jIChhcmdwLCBzdGF0ZSwgMSwgYW55dGhpbmcsIDAsIGZzKTsKKysKKysgIGlmICgoZmxhZ3MgJiBBUkdQX0hFTFBfQlVHX0FERFIpICYmIGFyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzcykKKysgICAgeworKyAgICAgIGlmIChhbnl0aGluZykKKysgICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wdXRjIChmcywgJ1xuJyk7CisrICAgICAgX19hcmdwX2ZtdHN0cmVhbV9wcmludGYgKGZzLCBkZ2V0dGV4dCAoYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVwb3J0IGJ1Z3MgdG8gJXMuXG4iKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MpOworKyAgICAgIGFueXRoaW5nID0gMTsKKysgICAgfQorKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgIGZ1bmxvY2tmaWxlIChzdHJlYW0pOworKyNlbmRpZgorKworKyAgaWYgKGhvbCkKKysgICAgaG9sX2ZyZWUgKGhvbCk7CisrCisrICBfX2FyZ3BfZm10c3RyZWFtX2ZyZWUgKGZzKTsKKyt9CisrCisrLyogT3V0cHV0IGEgdXNhZ2UgbWVzc2FnZSBmb3IgQVJHUCB0byBTVFJFQU0uICBGTEFHUyBhcmUgZnJvbSB0aGUgc2V0CisrICAgQVJHUF9IRUxQXyouICBOQU1FIGlzIHdoYXQgdG8gdXNlIHdoZXJldmVyIGEgYHByb2dyYW0gbmFtZScgaXMgbmVlZGVkLiAqLworK3ZvaWQgYXJncF9oZWxwIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwgRklMRSAqc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3MsIGNoYXIgKm5hbWUpCisreworKyAgX2hlbHAgKGFyZ3AsIDAsIHN0cmVhbSwgZmxhZ3MsIG5hbWUpOworK30KKysKKytjaGFyICoKKytfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICh2b2lkKQorK3sKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19QUk9HUkFNX0lOVk9DQVRJT05fTkFNRV9fCisrLyoKKysgKiB1Q2xpYmMgcHJvdmlkZXMgYm90aCBwcm9ncmFtX2ludm9jYXRpb25fbmFtZSBhbmQKKysgKiBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZQorKyAqLworKyByZXR1cm4gKGNoYXIgKikgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWU7CisrIyBlbHNlCisrICAvKiBGSVhNRTogV2hhdCBub3c/IE1pbGVzIHN1Z2dlc3RzIHRoYXQgaXQgaXMgYmV0dGVyIHRvIHVzZSBOVUxMLAorKyAgICAgYnV0IGN1cnJlbnRseSB0aGUgdmFsdWUgaXMgcGFzc2VkIG9uIGRpcmVjdGx5IHRvIGZwdXRzX3VubG9ja2VkLAorKyAgICAgc28gdGhhdCByZXF1aXJlcyBtb3JlIGNoYW5nZXMuICovCisrIyBpZiBfX0dOVUNfXworKyMgIHdhcm5pbmcgTm8gcmVhc29uYWJsZSB2YWx1ZSB0byByZXR1cm4KKysjIGVuZGlmIC8qIF9fR05VQ19fICovCisrICByZXR1cm4gIiI7CisrIyBlbmRpZgorK30KKysKKysvKiBPdXRwdXQsIGlmIGFwcHJvcHJpYXRlLCBhIHVzYWdlIG1lc3NhZ2UgZm9yIFNUQVRFIHRvIFNUUkVBTS4gIEZMQUdTIGFyZQorKyAgIGZyb20gdGhlIHNldCBBUkdQX0hFTFBfKi4gICovCisrdm9pZAorK2FyZ3Bfc3RhdGVfaGVscCAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBGSUxFICpzdHJlYW0sIHVuc2lnbmVkIGZsYWdzKQorK3sKKysgIGlmICgoIXN0YXRlIHx8ICEgKHN0YXRlLT5mbGFncyAmIEFSR1BfTk9fRVJSUykpICYmIHN0cmVhbSkKKysgICAgeworKyAgICAgIGlmIChzdGF0ZSAmJiAoc3RhdGUtPmZsYWdzICYgQVJHUF9MT05HX09OTFkpKQorKyAgICAgICBmbGFncyB8PSBBUkdQX0hFTFBfTE9OR19PTkxZOworKworKyAgICAgIF9oZWxwIChzdGF0ZSA/IHN0YXRlLT5yb290X2FyZ3AgOiAwLCBzdGF0ZSwgc3RyZWFtLCBmbGFncywKKysgICAgICAgICAgICBzdGF0ZSA/IHN0YXRlLT5uYW1lIDogX19hcmdwX3Nob3J0X3Byb2dyYW1fbmFtZSAoKSk7CisrCisrICAgICAgaWYgKCFzdGF0ZSB8fCAhIChzdGF0ZS0+ZmxhZ3MgJiBBUkdQX05PX0VYSVQpKQorKyAgICAgICB7CisrICAgICAgICAgaWYgKGZsYWdzICYgQVJHUF9IRUxQX0VYSVRfRVJSKQorKyAgICAgICAgICAgZXhpdCAoYXJncF9lcnJfZXhpdF9zdGF0dXMpOworKyAgICAgICAgIGlmIChmbGFncyAmIEFSR1BfSEVMUF9FWElUX09LKQorKyAgICAgICAgICAgZXhpdCAoMCk7CisrICAgICAgIH0KKysgIH0KKyt9CisrCisrLyogSWYgYXBwcm9wcmlhdGUsIHByaW50IHRoZSBwcmludGYgc3RyaW5nIEZNVCBhbmQgZm9sbG93aW5nIGFyZ3MsIHByZWNlZGVkCisrICAgYnkgdGhlIHByb2dyYW0gbmFtZSBhbmQgYDonLCB0byBzdGRlcnIsIGFuZCBmb2xsb3dlZCBieSBhIGBUcnkgLi4uIC0taGVscCcKKysgICBtZXNzYWdlLCB0aGVuIGV4aXQgKDEpLiAgKi8KKyt2b2lkCisrYXJncF9lcnJvciAoY29uc3Qgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyt7CisrICBpZiAoIXN0YXRlIHx8ICEoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FUlJTKSkKKysgICAgeworKyAgICAgIEZJTEUgKnN0cmVhbSA9IHN0YXRlID8gc3RhdGUtPmVycl9zdHJlYW0gOiBzdGRlcnI7CisrCisrICAgICAgaWYgKHN0cmVhbSkKKysgICAgICAgeworKyAgICAgICAgIHZhX2xpc3QgYXA7CisrCisrI2lmIF9MSUJDIHx8IChIQVZFX0ZMT0NLRklMRSAmJiBIQVZFX0ZVTkxPQ0tGSUxFKQorKyAgICAgICAgIGZsb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysKKysgICAgICAgICB2YV9zdGFydCAoYXAsIGZtdCk7CisrCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICBjaGFyICpidWY7CisrCisrICAgICAgICAgaWYgKF9JT192YXNwcmludGYgKCZidWYsIGZtdCwgYXApIDwgMCkKKysgICAgICAgICAgIGJ1ZiA9IE5VTEw7CisrCisrICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiJXM6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgICAgIHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpLCBidWYpOworKworKyAgICAgICAgIGZyZWUgKGJ1Zik7CisrI2Vsc2UKKysgICAgICAgICBmcHV0c191bmxvY2tlZCAoc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSk7CisrICAgICAgICAgcHV0Y191bmxvY2tlZCAoJzonLCBzdHJlYW0pOworKyAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCcgJywgc3RyZWFtKTsKKysKKysgICAgICAgICB2ZnByaW50ZiAoc3RyZWFtLCBmbXQsIGFwKTsKKysKKysgICAgICAgICBwdXRjX3VubG9ja2VkICgnXG4nLCBzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoc3RhdGUsIHN0cmVhbSwgQVJHUF9IRUxQX1NURF9FUlIpOworKworKyAgICAgICAgIHZhX2VuZCAoYXApOworKworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmdW5sb2NrZmlsZSAoc3RyZWFtKTsKKysjZW5kaWYKKysgICAgICAgfQorKyAgICB9CisrfQorKworKy8qIFNpbWlsYXIgdG8gdGhlIHN0YW5kYXJkIGdudSBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24gZXJyb3IoKSwgYnV0IHdpbGwKKysgICByZXNwZWN0IHRoZSBBUkdQX05PX0VYSVQgYW5kIEFSR1BfTk9fRVJSUyBmbGFncyBpbiBTVEFURSwgYW5kIHdpbGwgcHJpbnQKKysgICB0byBTVEFURS0+ZXJyX3N0cmVhbS4gIFRoaXMgaXMgdXNlZnVsIGZvciBhcmd1bWVudCBwYXJzaW5nIGNvZGUgdGhhdCBpcworKyAgIHNoYXJlZCBiZXR3ZWVuIHByb2dyYW0gc3RhcnR1cCAod2hlbiBleGl0aW5nIGlzIGRlc2lyZWQpIGFuZCBydW50aW1lCisrICAgb3B0aW9uIHBhcnNpbmcgKHdoZW4gdHlwaWNhbGx5IGFuIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQgaW5zdGVhZCkuICBUaGUKKysgICBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgYXJncF9lcnJvciBpcyB0aGF0IHRoZSBsYXR0ZXIgaXMgZm9yCisrICAgKnBhcnNpbmcgZXJyb3JzKiwgYW5kIHRoZSBmb3JtZXIgaXMgZm9yIG90aGVyIHByb2JsZW1zIHRoYXQgb2NjdXIgZHVyaW5nCisrICAgcGFyc2luZyBidXQgZG9uJ3QgcmVmbGVjdCBhIChzeW50YWN0aWMpIHByb2JsZW0gd2l0aCB0aGUgaW5wdXQuICAqLworK3ZvaWQKKythcmdwX2ZhaWx1cmUgKGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSwgaW50IHN0YXR1cywgaW50IGVycm51bSwKKysgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKKyt7CisrICBpZiAoIXN0YXRlIHx8ICEoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FUlJTKSkKKysgICAgeworKyAgICAgIEZJTEUgKnN0cmVhbSA9IHN0YXRlID8gc3RhdGUtPmVycl9zdHJlYW0gOiBzdGRlcnI7CisrCisrICAgICAgaWYgKHN0cmVhbSkKKysgICAgICAgeworKyNpZiBfTElCQyB8fCAoSEFWRV9GTE9DS0ZJTEUgJiYgSEFWRV9GVU5MT0NLRklMRSkKKysgICAgICAgICBmbG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBVU0VfSU5fTElCSU8KKysgICAgICAgICBfX2Z4cHJpbnRmIChzdHJlYW0sICIlcyIsCisrICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPyBzdGF0ZS0+bmFtZSA6IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCkpOworKyNlbHNlCisrICAgICAgICAgZnB1dHNfdW5sb2NrZWQgKHN0YXRlID8gc3RhdGUtPm5hbWUgOiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0pOworKyNlbmRpZgorKworKyAgICAgICAgIGlmIChmbXQpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIHZhX2xpc3QgYXA7CisrCisrICAgICAgICAgICAgIHZhX3N0YXJ0IChhcCwgZm10KTsKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICBjaGFyICpidWY7CisrCisrICAgICAgICAgICAgIGlmIChfSU9fdmFzcHJpbnRmICgmYnVmLCBmbXQsIGFwKSA8IDApCisrICAgICAgICAgICAgICAgYnVmID0gTlVMTDsKKysKKysgICAgICAgICAgICAgX19meHByaW50ZiAoc3RyZWFtLCAiOiAlcyIsIGJ1Zik7CisrCisrICAgICAgICAgICAgIGZyZWUgKGJ1Zik7CisrI2Vsc2UKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJzonLCBzdHJlYW0pOworKyAgICAgICAgICAgICBwdXRjX3VubG9ja2VkICgnICcsIHN0cmVhbSk7CisrCisrICAgICAgICAgICAgIHZmcHJpbnRmIChzdHJlYW0sIGZtdCwgYXApOworKyNlbmRpZgorKworKyAgICAgICAgICAgICB2YV9lbmQgKGFwKTsKKysgICAgICAgICAgIH0KKysKKysgICAgICAgICBpZiAoZXJybnVtKQorKyAgICAgICAgICAgeworKyNpZiAoZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTykgfHwgZGVmaW5lZCBIQVZFX1NUUkVSUk9SX1IKKysgICAgICAgICAgICAgY2hhciBidWZbMjAwXTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZCBfTElCQyAmJiBkZWZpbmVkIFVTRV9JTl9MSUJJTworKyAgICAgICAgICAgICBfX2Z4cHJpbnRmIChzdHJlYW0sICI6ICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3JfciAoZXJybnVtLCBidWYsIHNpemVvZiAoYnVmKSkpOworKyNlbHNlCisrICAgICAgICAgICAgIHB1dGNfdW5sb2NrZWQgKCc6Jywgc3RyZWFtKTsKKysgICAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJyAnLCBzdHJlYW0pOworKyMgaWZkZWYgSEFWRV9TVFJFUlJPUl9SCisrICAgICAgICAgICAgIGZwdXRzIChzdHJlcnJvcl9yIChlcnJudW0sIGJ1Ziwgc2l6ZW9mIChidWYpKSwgc3RyZWFtKTsKKysjIGVsc2UKKysgICAgICAgICAgICAgZnB1dHMgKHN0cmVycm9yIChlcnJudW0pLCBzdHJlYW0pOworKyMgZW5kaWYKKysjZW5kaWYKKysgICAgICAgICAgIH0KKysKKysjaWZkZWYgVVNFX0lOX0xJQklPCisrICAgICAgICAgaWYgKF9JT19md2lkZSAoc3RyZWFtLCAwKSA+IDApCisrICAgICAgICAgICBwdXR3Y191bmxvY2tlZCAoTCdcbicsIHN0cmVhbSk7CisrICAgICAgICAgZWxzZQorKyNlbmRpZgorKyAgICAgICAgICAgcHV0Y191bmxvY2tlZCAoJ1xuJywgc3RyZWFtKTsKKysKKysjaWYgX0xJQkMgfHwgKEhBVkVfRkxPQ0tGSUxFICYmIEhBVkVfRlVOTE9DS0ZJTEUpCisrICAgICAgICAgZnVubG9ja2ZpbGUgKHN0cmVhbSk7CisrI2VuZGlmCisrCisrICAgICAgICAgaWYgKHN0YXR1cyAmJiAoIXN0YXRlIHx8ICEoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FWElUKSkpCisrICAgICAgICAgICBleGl0IChzdGF0dXMpOworKyAgICAgICB9CisrICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1wYXJzZS5jIGIvbGlidWFyZ3AvYXJncC1wYXJzZS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODZiMmIyNAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1wYXJzZS5jCitAQCAtMCwwICsxLDk0OSBAQAorKy8qIEhpZXJhcmNoaWFsIGFyZ3VtZW50IHBhcnNpbmcsIGxheWVyZWQgb3ZlciBnZXRvcHQKKysgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBXcml0dGVuIGJ5IE1pbGVzIEJhZGVyIDxtaWxlcyBhdCBnbnUuYWkubWl0LmVkdT4uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BCisrICAgMDIxMTEtMTMwNyBVU0EuCisrCisrICAgTW9kaWZpZWQgZm9yIHVDbGliYyBieTogU2FsdmF0b3JlIENybyA8c2FsdmF0b3JlLmNybyBhdCBzdC5jb20+CisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysvKiBBSVggcmVxdWlyZXMgdGhpcyB0byBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gdGhlIGZpbGUuICAqLworKyNpZm5kZWYgX19HTlVDX18KKysjIGlmIEhBVkVfQUxMT0NBX0ggfHwgZGVmaW5lZCBfTElCQworKyMgIGluY2x1ZGUgPGFsbG9jYS5oPgorKyMgZWxzZQorKyMgIGlmZGVmIF9BSVgKKysjcHJhZ21hIGFsbG9jYQorKyMgIGVsc2UKKysjICAgaWZuZGVmIGFsbG9jYSAvKiBwcmVkZWZpbmVkIGJ5IEhQIGNjICtPbGliY2FsbHMgKi8KKytjaGFyICphbGxvY2EgKCk7CisrIyAgIGVuZGlmCisrIyAgZW5kaWYKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorKyNpbmNsdWRlIDxnZXRvcHQuaD4KKysjaW5jbHVkZSA8Yml0cy9nZXRvcHRfaW50Lmg+CisrCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmbmRlZiBfCisrLyogVGhpcyBpcyBmb3Igb3RoZXIgR05VIGRpc3RyaWJ1dGlvbnMgd2l0aCBpbnRlcm5hdGlvbmFsaXplZCBtZXNzYWdlcy4KKysgICBXaGVuIGNvbXBpbGluZyBsaWJjLCB0aGUgXyBtYWNybyBpcyBwcmVkZWZpbmVkLiAgKi8KKysjIGlmIChkZWZpbmVkIEhBVkVfTElCSU5UTF9IIHx8IGRlZmluZWQgX0xJQkMpICYmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjICBpbmNsdWRlIDxsaWJpbnRsLmg+CisrIyAgaWZkZWYgX0xJQkMKKysjICAgdW5kZWYgZGdldHRleHQKKysjICAgZGVmaW5lIGRnZXR0ZXh0KGRvbWFpbiwgbXNnaWQpIFwKKysgIElOVFVTRShfX2RjZ2V0dGV4dCkgKGRvbWFpbiwgbXNnaWQsIExDX01FU1NBR0VTKQorKyMgIGVuZGlmCisrIyBlbHNlCisrIyAgZGVmaW5lIGRnZXR0ZXh0KGRvbWFpbiwgbXNnaWQpIChtc2dpZCkKKysjICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyMgZW5kaWYKKysjZW5kaWYKKysjaWZuZGVmIE5fCisrIyBkZWZpbmUgTl8obXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworKy8qIEdldG9wdCByZXR1cm4gdmFsdWVzLiAgKi8KKysjZGVmaW5lIEtFWV9FTkQgKC0xKSAgICAgICAgICAgLyogVGhlIGVuZCBvZiB0aGUgb3B0aW9ucy4gICovCisrI2RlZmluZSBLRVlfQVJHIDEgICAgICAgICAgICAgIC8qIEEgbm9uLW9wdGlvbiBhcmd1bWVudC4gICovCisrI2RlZmluZSBLRVlfRVJSICc/JyAgICAgICAgICAgIC8qIEFuIGVycm9yIHBhcnNpbmcgdGhlIG9wdGlvbnMuICAqLworKworKy8qIFRoZSBtZXRhLWFyZ3VtZW50IHVzZWQgdG8gcHJldmVudCBhbnkgZnVydGhlciBhcmd1bWVudHMgYmVpbmcgaW50ZXJwcmV0ZWQKKysgICBhcyBvcHRpb25zLiAgKi8KKysjZGVmaW5lIFFVT1RFICItLSIKKysKKysvKiBUaGUgbnVtYmVyIG9mIGJpdHMgd2Ugc3RlYWwgaW4gYSBsb25nLW9wdGlvbiB2YWx1ZSBmb3Igb3VyIG93biB1c2UuICAqLworKyNkZWZpbmUgR1JPVVBfQklUUyBDSEFSX0JJVAorKworKy8qIFRoZSBudW1iZXIgb2YgYml0cyBhdmFpbGFibGUgZm9yIHRoZSB1c2VyIHZhbHVlLiAgKi8KKysjZGVmaW5lIFVTRVJfQklUUyAoKHNpemVvZiAoKHN0cnVjdCBvcHRpb24gKikwKS0+dmFsICogQ0hBUl9CSVQpIC0gR1JPVVBfQklUUykKKysjZGVmaW5lIFVTRVJfTUFTSyAoKDEgPDwgVVNFUl9CSVRTKSAtIDEpCisrCisrLyogRVogYWxpYXMgZm9yIEFSR1BfRVJSX1VOS05PV04uICAqLworKyNkZWZpbmUgRUJBREtFWSBBUkdQX0VSUl9VTktOT1dOCisrCisrLyogRGVmYXVsdCBvcHRpb25zLiAgKi8KKysKKysvKiBXaGVuIGFyZ3AgaXMgZ2l2ZW4gdGhlIC0tSEFORyBzd2l0Y2gsIF9BUkdQX0hBTkcgaXMgc2V0IGFuZCBhcmdwIHdpbGwgc2xlZXAKKysgICBmb3Igb25lIHNlY29uZCBpbnRlcnZhbHMsIGRlY3JlbWVudGluZyBfQVJHUF9IQU5HIHVudGlsIGl0J3MgemVyby4gIFRodXMKKysgICB5b3UgY2FuIGZvcmNlIHRoZSBwcm9ncmFtIHRvIGNvbnRpbnVlIGJ5IGF0dGFjaGluZyBhIGRlYnVnZ2VyIGFuZCBzZXR0aW5nCisrICAgaXQgdG8gMCB5b3Vyc2VsZi4gICovCisrc3RhdGljIHZvbGF0aWxlIGludCBfYXJncF9oYW5nOworKworKyNkZWZpbmUgT1BUX1BST0dOQU1FICAgLTIKKysjZGVmaW5lIE9QVF9VU0FHRSAgICAgIC0zCisrI2RlZmluZSBPUFRfSEFORyAgICAgICAtNAorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gYXJncF9kZWZhdWx0X29wdGlvbnNbXSA9CisreworKyAgeyJoZWxwIiwgICAgICAgJz8nLCAgICAgICAgICAwLCAwLCAgTl8oIkdpdmUgdGhpcyBoZWxwIGxpc3QiKSwgLTF9LAorKyAgeyJ1c2FnZSIsICAgICAgT1BUX1VTQUdFLCAgICAwLCAwLCAgTl8oIkdpdmUgYSBzaG9ydCB1c2FnZSBtZXNzYWdlIil9LAorKyAgeyJwcm9ncmFtLW5hbWUiLE9QVF9QUk9HTkFNRSwiTkFNRSIsIE9QVElPTl9ISURERU4sIE5fKCJTZXQgdGhlIHByb2dyYW0gbmFtZSIpfSwKKysgIHsiSEFORyIsICAgICAgIE9QVF9IQU5HLCAgICAiU0VDUyIsIE9QVElPTl9BUkdfT1BUSU9OQUwgfCBPUFRJT05fSElEREVOLAorKyAgICAgTl8oIkhhbmcgZm9yIFNFQ1Mgc2Vjb25kcyAoZGVmYXVsdCAzNjAwKSIpfSwKKysgIHswLCAwfQorK307CisrCisrc3RhdGljIGVycm9yX3QKKythcmdwX2RlZmF1bHRfcGFyc2VyIChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlICc/JzoKKysgICAgICBhcmdwX3N0YXRlX2hlbHAgKHN0YXRlLCBzdGF0ZS0+b3V0X3N0cmVhbSwgQVJHUF9IRUxQX1NURF9IRUxQKTsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBPUFRfVVNBR0U6CisrICAgICAgYXJncF9zdGF0ZV9oZWxwIChzdGF0ZSwgc3RhdGUtPm91dF9zdHJlYW0sCisrICAgICAgICAgICAgICAgICAgICAgIEFSR1BfSEVMUF9VU0FHRSB8IEFSR1BfSEVMUF9FWElUX09LKTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBPUFRfUFJPR05BTUU6ICAgICAgICAgLyogU2V0IHRoZSBwcm9ncmFtIG5hbWUuICAqLworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fTkFNRQorKyAgICAgIHByb2dyYW1faW52b2NhdGlvbl9uYW1lID0gYXJnOworKyNlbmRpZgorKyAgICAgIC8qIFtOb3RlIHRoYXQgc29tZSBzeXN0ZW1zIG9ubHkgaGF2ZSBQUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRSAoYWthCisrICAgICAgICBfX1BST0dOQU1FKSwgaW4gd2hpY2ggY2FzZSwgUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUUgaXMganVzdCBkZWZpbmVkCisrICAgICAgICB0byBiZSB0aGF0LCBzbyB3ZSBoYXZlIHRvIGJlIGEgYml0IGNhcmVmdWwgaGVyZS5dICAqLworKworKyAgICAgIC8qIFVwZGF0ZSB3aGF0IHdlIHVzZSBmb3IgbWVzc2FnZXMuICAqLworKyAgICAgIHN0YXRlLT5uYW1lID0gc3RycmNociAoYXJnLCAnLycpOworKyAgICAgIGlmIChzdGF0ZS0+bmFtZSkKKysgICAgICAgc3RhdGUtPm5hbWUrKzsKKysgICAgICBlbHNlCisrICAgICAgIHN0YXRlLT5uYW1lID0gYXJnOworKworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IEhBVkVfREVDTF9QUk9HUkFNX0lOVk9DQVRJT05fU0hPUlRfTkFNRQorKyAgICAgIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lID0gc3RhdGUtPm5hbWU7CisrI2VuZGlmCisrCisrICAgICAgaWYgKChzdGF0ZS0+ZmxhZ3MgJiAoQVJHUF9QQVJTRV9BUkdWMCB8IEFSR1BfTk9fRVJSUykpCisrICAgICAgICAgPT0gQVJHUF9QQVJTRV9BUkdWMCkKKysgICAgICAgLyogVXBkYXRlIHdoYXQgZ2V0b3B0IHVzZXMgdG9vLiAgKi8KKysgICAgICAgc3RhdGUtPmFyZ3ZbMF0gPSBhcmc7CisrCisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgT1BUX0hBTkc6CisrICAgICAgX2FyZ3BfaGFuZyA9IGF0b2kgKGFyZyA/IGFyZyA6ICIzNjAwIik7CisrICAgICAgd2hpbGUgKF9hcmdwX2hhbmctLSA+IDApCisrICAgICAgIHNsZWVwICgxKTsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUJBREtFWTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncCBhcmdwX2RlZmF1bHRfYXJncCA9CisrICB7YXJncF9kZWZhdWx0X29wdGlvbnMsICZhcmdwX2RlZmF1bHRfcGFyc2VyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAibGliYyJ9OworKworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gYXJncF92ZXJzaW9uX29wdGlvbnNbXSA9CisreworKyAgeyJ2ZXJzaW9uIiwgICAgJ1YnLCAgICAgICAgICAwLCAwLCAgTl8oIlByaW50IHByb2dyYW0gdmVyc2lvbiIpLCAtMX0sCisrICB7MCwgMH0KKyt9OworKworK3N0YXRpYyBlcnJvcl90CisrYXJncF92ZXJzaW9uX3BhcnNlciAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgc3dpdGNoIChrZXkpCisrICAgIHsKKysgICAgY2FzZSAnVic6CisrICAgICAgaWYgKGFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spCisrICAgICAgICgqYXJncF9wcm9ncmFtX3ZlcnNpb25faG9vaykgKHN0YXRlLT5vdXRfc3RyZWFtLCBzdGF0ZSk7CisrICAgICAgZWxzZSBpZiAoYXJncF9wcm9ncmFtX3ZlcnNpb24pCisrICAgICAgIGZwcmludGYgKHN0YXRlLT5vdXRfc3RyZWFtLCAiJXNcbiIsIGFyZ3BfcHJvZ3JhbV92ZXJzaW9uKTsKKysgICAgICBlbHNlCisrICAgICAgIGFyZ3BfZXJyb3IgKHN0YXRlLCBkZ2V0dGV4dCAoc3RhdGUtPnJvb3RfYXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFBST0dSQU0gRVJST1IpIE5vIHZlcnNpb24ga25vd24hPyIpKTsKKysgICAgICBpZiAoISAoc3RhdGUtPmZsYWdzICYgQVJHUF9OT19FWElUKSkKKysgICAgICAgZXhpdCAoMCk7CisrICAgICAgYnJlYWs7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3AgYXJncF92ZXJzaW9uX2FyZ3AgPQorKyAge2FyZ3BfdmVyc2lvbl9vcHRpb25zLCAmYXJncF92ZXJzaW9uX3BhcnNlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgImxpYmMifTsKKysKKysvKiBSZXR1cm5zIHRoZSBvZmZzZXQgaW50byB0aGUgZ2V0b3B0IGxvbmcgb3B0aW9ucyBhcnJheSBMT05HX09QVElPTlMgb2YgYQorKyAgIGxvbmcgb3B0aW9uIHdpdGggY2FsbGVkIE5BTUUsIG9yIC0xIGlmIG5vbmUgaXMgZm91bmQuICBQYXNzaW5nIE5VTEwgYXMKKysgICBOQU1FIHdpbGwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygb3B0aW9ucy4gICovCisrc3RhdGljIGludAorK2ZpbmRfbG9uZ19vcHRpb24gKHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrICBzdHJ1Y3Qgb3B0aW9uICpsID0gbG9uZ19vcHRpb25zOworKyAgd2hpbGUgKGwtPm5hbWUgIT0gTlVMTCkKKysgICAgaWYgKG5hbWUgIT0gTlVMTCAmJiBzdHJjbXAgKGwtPm5hbWUsIG5hbWUpID09IDApCisrICAgICAgcmV0dXJuIGwgLSBsb25nX29wdGlvbnM7CisrICAgIGVsc2UKKysgICAgICBsKys7CisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gbCAtIGxvbmdfb3B0aW9uczsKKysgIGVsc2UKKysgICAgcmV0dXJuIC0xOworK30KKysKKysKKysvKiBUaGUgc3RhdGUgb2YgYSBgZ3JvdXAnIGR1cmluZyBwYXJzaW5nLiAgRWFjaCBncm91cCBjb3JyZXNwb25kcyB0byBhCisrICAgcGFydGljdWxhciBhcmdwIHN0cnVjdHVyZSBmcm9tIHRoZSB0cmVlIG9mIHN1Y2ggZGVzY2VuZGluZyBmcm9tIHRoZSB0b3AKKysgICBsZXZlbCBhcmdwIHBhc3NlZCB0byBhcmdwX3BhcnNlLiAgKi8KKytzdHJ1Y3QgZ3JvdXAKKyt7CisrICAvKiBUaGlzIGdyb3VwJ3MgcGFyc2luZyBmdW5jdGlvbi4gICovCisrICBhcmdwX3BhcnNlcl90IHBhcnNlcjsKKysKKysgIC8qIFdoaWNoIGFyZ3AgdGhpcyBncm91cCBpcyBmcm9tLiAgKi8KKysgIGNvbnN0IHN0cnVjdCBhcmdwICphcmdwOworKworKyAgLyogUG9pbnRzIHRvIHRoZSBwb2ludCBpbiBTSE9SVF9PUFRTIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc2hvcnQKKysgICAgIG9wdGlvbnMgZm9yIHRoaXMgZ3JvdXAuICBXZSB1c2UgaXQgdG8gZGV0ZXJtaW5lIGZyb20gd2hpY2ggZ3JvdXAgYQorKyAgICAgcGFydGljdWxhciBzaG9ydCBvcHRpb25zIGlzIGZyb20uICAqLworKyAgY2hhciAqc2hvcnRfZW5kOworKworKyAgLyogVGhlIG51bWJlciBvZiBub24tb3B0aW9uIGFyZ3Mgc3VjZXNzZnVsbHkgaGFuZGxlZCBieSB0aGlzIHBhcnNlci4gICovCisrICB1bnNpZ25lZCBhcmdzX3Byb2Nlc3NlZDsKKysKKysgIC8qIFRoaXMgZ3JvdXAncyBwYXJzZXIncyBwYXJlbnQncyBncm91cC4gICovCisrICBzdHJ1Y3QgZ3JvdXAgKnBhcmVudDsKKysgIHVuc2lnbmVkIHBhcmVudF9pbmRleDsgICAgICAgLyogQW5kIHRoZSBvdXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudC4gICAqLworKworKyAgLyogVGhlc2UgZmllbGRzIGFyZSBzd2FwcGVkIGludG8gYW5kIG91dCBvZiB0aGUgc3RhdGUgc3RydWN0dXJlIHdoZW4KKysgICAgIGNhbGxpbmcgdGhpcyBncm91cCdzIHBhcnNlci4gICovCisrICB2b2lkICppbnB1dCwgKipjaGlsZF9pbnB1dHM7CisrICB2b2lkICpob29rOworK307CisrCisrLyogQ2FsbCBHUk9VUCdzIHBhcnNlciB3aXRoIEtFWSBhbmQgQVJHLCBzd2FwcGluZyBhbnkgZ3JvdXAtc3BlY2lmaWMgaW5mbworKyAgIGZyb20gU1RBVEUgYmVmb3JlIGNhbGxpbmcsIGFuZCBiYWNrIGludG8gc3RhdGUgYWZ0ZXJ3YXJkcy4gIElmIEdST1VQIGhhcworKyAgIG5vIHBhcnNlciwgRUJBREtFWSBpcyByZXR1cm5lZC4gICovCisrc3RhdGljIGVycm9yX3QKKytncm91cF9wYXJzZSAoc3RydWN0IGdyb3VwICpncm91cCwgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlLCBpbnQga2V5LCBjaGFyICphcmcpCisreworKyAgaWYgKGdyb3VwLT5wYXJzZXIpCisrICAgIHsKKysgICAgICBlcnJvcl90IGVycjsKKysgICAgICBzdGF0ZS0+aG9vayA9IGdyb3VwLT5ob29rOworKyAgICAgIHN0YXRlLT5pbnB1dCA9IGdyb3VwLT5pbnB1dDsKKysgICAgICBzdGF0ZS0+Y2hpbGRfaW5wdXRzID0gZ3JvdXAtPmNoaWxkX2lucHV0czsKKysgICAgICBzdGF0ZS0+YXJnX251bSA9IGdyb3VwLT5hcmdzX3Byb2Nlc3NlZDsKKysgICAgICBlcnIgPSAoKmdyb3VwLT5wYXJzZXIpKGtleSwgYXJnLCBzdGF0ZSk7CisrICAgICAgZ3JvdXAtPmhvb2sgPSBzdGF0ZS0+aG9vazsKKysgICAgICByZXR1cm4gZXJyOworKyAgICB9CisrICBlbHNlCisrICAgIHJldHVybiBFQkFES0VZOworK30KKysKKytzdHJ1Y3QgcGFyc2VyCisreworKyAgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3A7CisrCisrICAvKiBTSE9SVF9PUFRTIGlzIHRoZSBnZXRvcHQgc2hvcnQgb3B0aW9ucyBzdHJpbmcgZm9yIHRoZSB1bmlvbiBvZiBhbGwgdGhlCisrICAgICBncm91cHMgb2Ygb3B0aW9ucy4gICovCisrICBjaGFyICpzaG9ydF9vcHRzOworKyAgLyogTE9OR19PUFRTIGlzIHRoZSBhcnJheSBvZiBnZXRvcCBsb25nIG9wdGlvbiBzdHJ1Y3R1cmVzIGZvciB0aGUgdW5pb24gb2YKKysgICAgIGFsbCB0aGUgZ3JvdXBzIG9mIG9wdGlvbnMuICAqLworKyAgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRzOworKyAgLyogT1BUX0RBVEEgaXMgdGhlIGdldG9wdCBkYXRhIHVzZWQgZm9yIHRoZSByZS1lbnRyYW50IGdldG9wdC4gICovCisrICBzdHJ1Y3QgX2dldG9wdF9kYXRhIG9wdF9kYXRhOworKworKyAgLyogU3RhdGVzIG9mIHRoZSB2YXJpb3VzIHBhcnNpbmcgZ3JvdXBzLiAgKi8KKysgIHN0cnVjdCBncm91cCAqZ3JvdXBzOworKyAgLyogVGhlIGVuZCBvZiB0aGUgR1JPVVBTIGFycmF5LiAgKi8KKysgIHN0cnVjdCBncm91cCAqZWdyb3VwOworKyAgLyogQW4gdmVjdG9yIGNvbnRhaW5pbmcgc3RvcmFnZSBmb3IgdGhlIENISUxEX0lOUFVUUyBmaWVsZCBpbiBhbGwgZ3JvdXBzLiAgKi8KKysgIHZvaWQgKipjaGlsZF9pbnB1dHM7CisrCisrICAvKiBUcnVlIGlmIHdlIHRoaW5rIHVzaW5nIGdldG9wdCBpcyBzdGlsbCB1c2VmdWw7IGlmIGZhbHNlLCB0aGVuCisrICAgICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBqdXN0IHBhc3NlZCB2ZXJiYXRpbSB3aXRoIEFSR1BfS0VZX0FSRy4gIFRoaXMgaXMKKysgICAgIGNsZWFyZWQgd2hlbmV2ZXIgZ2V0b3B0IHJldHVybnMgS0VZX0VORCwgYnV0IG1heSBiZSBzZXQgYWdhaW4gaWYgdGhlIHVzZXIKKysgICAgIG1vdmVzIHRoZSBuZXh0IGFyZ3VtZW50IHBvaW50ZXIgYmFja3dhcmRzLiAgKi8KKysgIGludCB0cnlfZ2V0b3B0OworKworKyAgLyogU3RhdGUgYmxvY2sgc3VwcGxpZWQgdG8gcGFyc2luZyByb3V0aW5lcy4gICovCisrICBzdHJ1Y3QgYXJncF9zdGF0ZSBzdGF0ZTsKKysKKysgIC8qIE1lbW9yeSB1c2VkIGJ5IHRoaXMgcGFyc2VyLiAgKi8KKysgIHZvaWQgKnN0b3JhZ2U7CisrfTsKKysKKysvKiBUaGUgbmV4dCB1c2FibGUgZW50cmllcyBpbiB0aGUgdmFyaW91cyBwYXJzZXIgdGFibGVzIGJlaW5nIGZpbGxlZCBpbiBieQorKyAgIGNvbnZlcnRfb3B0aW9ucy4gICovCisrc3RydWN0IHBhcnNlcl9jb252ZXJ0X3N0YXRlCisreworKyAgc3RydWN0IHBhcnNlciAqcGFyc2VyOworKyAgY2hhciAqc2hvcnRfZW5kOworKyAgc3RydWN0IG9wdGlvbiAqbG9uZ19lbmQ7CisrICB2b2lkICoqY2hpbGRfaW5wdXRzX2VuZDsKKyt9OworKworKy8qIENvbnZlcnRzIGFsbCBvcHRpb25zIGluIEFSR1AgKHdoaWNoIGlzIHB1dCBpbiBHUk9VUCkgYW5kIGFuY2VzdG9ycworKyAgIGludG8gZ2V0b3B0IG9wdGlvbnMgc3RvcmVkIGluIFNIT1JUX09QVFMgYW5kIExPTkdfT1BUUzsgU0hPUlRfRU5EIGFuZAorKyAgIENWVC0+TE9OR19FTkQgYXJlIHRoZSBwb2ludHMgYXQgd2hpY2ggbmV3IG9wdGlvbnMgYXJlIGFkZGVkLiAgUmV0dXJucyB0aGUKKysgICBuZXh0IHVudXNlZCBncm91cCBlbnRyeS4gIENWVCBob2xkcyBzdGF0ZSB1c2VkIGR1cmluZyB0aGUgY29udmVyc2lvbi4gICovCisrc3RhdGljIHN0cnVjdCBncm91cCAqCisrY29udmVydF9vcHRpb25zIChjb25zdCBzdHJ1Y3QgYXJncCAqYXJncCwKKysgICAgICAgICAgICAgICAgc3RydWN0IGdyb3VwICpwYXJlbnQsIHVuc2lnbmVkIHBhcmVudF9pbmRleCwKKysgICAgICAgICAgICAgICAgc3RydWN0IGdyb3VwICpncm91cCwgc3RydWN0IHBhcnNlcl9jb252ZXJ0X3N0YXRlICpjdnQpCisreworKyAgLyogUkVBTCBpcyB0aGUgbW9zdCByZWNlbnQgbm9uLWFsaWFzIHZhbHVlIG9mIE9QVC4gICovCisrICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKnJlYWwgPSBhcmdwLT5vcHRpb25zOworKyAgY29uc3Qgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkcmVuID0gYXJncC0+Y2hpbGRyZW47CisrCisrICBpZiAocmVhbCB8fCBhcmdwLT5wYXJzZXIpCisrICAgIHsKKysgICAgICBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gKm9wdDsKKysKKysgICAgICBpZiAocmVhbCkKKysgICAgICAgZm9yIChvcHQgPSByZWFsOyAhX19vcHRpb25faXNfZW5kIChvcHQpOyBvcHQrKykKKysgICAgICAgICB7CisrICAgICAgICAgICBpZiAoISAob3B0LT5mbGFncyAmIE9QVElPTl9BTElBUykpCisrICAgICAgICAgICAgIC8qIE9QVCBpc24ndCBhbiBhbGlhcywgc28gd2UgY2FuIHVzZSB2YWx1ZXMgZnJvbSBpdC4gICovCisrICAgICAgICAgICAgIHJlYWwgPSBvcHQ7CisrCisrICAgICAgICAgICBpZiAoISAocmVhbC0+ZmxhZ3MgJiBPUFRJT05fRE9DKSkKKysgICAgICAgICAgICAgLyogQSByZWFsIG9wdGlvbiAobm90IGp1c3QgZG9jdW1lbnRhdGlvbikuICAqLworKyAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgaWYgKF9fb3B0aW9uX2lzX3Nob3J0IChvcHQpKQorKyAgICAgICAgICAgICAgICAgLyogT1BUIGNhbiBiZSB1c2VkIGFzIGEgc2hvcnQgb3B0aW9uLiAgKi8KKysgICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kKysgPSBvcHQtPmtleTsKKysgICAgICAgICAgICAgICAgICAgaWYgKHJlYWwtPmFyZykKKysgICAgICAgICAgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAgICAgICAgICAqY3Z0LT5zaG9ydF9lbmQrKyA9ICc6JzsKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFsLT5mbGFncyAmIE9QVElPTl9BUkdfT1BUSU9OQUwpCisrICAgICAgICAgICAgICAgICAgICAgICAgICpjdnQtPnNob3J0X2VuZCsrID0gJzonOworKyAgICAgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgICAgKmN2dC0+c2hvcnRfZW5kID0gJ1wwJzsgLyoga2VlcCAwIHRlcm1pbmF0ZWQgKi8KKysgICAgICAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAgICBpZiAob3B0LT5uYW1lCisrICAgICAgICAgICAgICAgICAgICYmIGZpbmRfbG9uZ19vcHRpb24gKGN2dC0+cGFyc2VyLT5sb25nX29wdHMsIG9wdC0+bmFtZSkgPCAwKQorKyAgICAgICAgICAgICAgICAgLyogT1BUIGNhbiBiZSB1c2VkIGFzIGEgbG9uZyBvcHRpb24uICAqLworKyAgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICBjdnQtPmxvbmdfZW5kLT5uYW1lID0gb3B0LT5uYW1lOworKyAgICAgICAgICAgICAgICAgICBjdnQtPmxvbmdfZW5kLT5oYXNfYXJnID0KKysgICAgICAgICAgICAgICAgICAgICAocmVhbC0+YXJnCisrICAgICAgICAgICAgICAgICAgICAgID8gKHJlYWwtPmZsYWdzICYgT1BUSU9OX0FSR19PUFRJT05BTAorKyAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbmFsX2FyZ3VtZW50CisrICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVxdWlyZWRfYXJndW1lbnQpCisrICAgICAgICAgICAgICAgICAgICAgIDogbm9fYXJndW1lbnQpOworKyAgICAgICAgICAgICAgICAgICBjdnQtPmxvbmdfZW5kLT5mbGFnID0gMDsKKysgICAgICAgICAgICAgICAgICAgLyogd2UgYWRkIGEgZGlzYW1iaWd1YXRpbmcgY29kZSB0byBhbGwgdGhlIHVzZXIncworKyAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKHdoaWNoIGlzIHJlbW92ZWQgYmVmb3JlIHdlIGFjdHVhbGx5IGNhbGwKKysgICAgICAgICAgICAgICAgICAgICAgdGhlIGZ1bmN0aW9uIHRvIHBhcnNlIHRoZSB2YWx1ZSk7IHRoaXMgbWVhbnMgdGhhdAorKyAgICAgICAgICAgICAgICAgICAgICB0aGUgdXNlciBsb3NlcyB1c2Ugb2YgdGhlIGhpZ2ggOCBiaXRzIGluIGFsbCBoaXMKKysgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzICh0aGUgc2lnbiBvZiB0aGUgbG93ZXIgYml0cyBpcyBwcmVzZXJ2ZWQKKysgICAgICAgICAgICAgICAgICAgICAgaG93ZXZlcikuLi4gICovCisrICAgICAgICAgICAgICAgICAgIGN2dC0+bG9uZ19lbmQtPnZhbCA9CisrICAgICAgICAgICAgICAgICAgICAgKChvcHQtPmtleSB8IHJlYWwtPmtleSkgJiBVU0VSX01BU0spCisrICAgICAgICAgICAgICAgICAgICAgKyAoKChncm91cCAtIGN2dC0+cGFyc2VyLT5ncm91cHMpICsgMSkgPDwgVVNFUl9CSVRTKTsKKysKKysgICAgICAgICAgICAgICAgICAgLyogS2VlcCB0aGUgTE9OR19PUFRTIGxpc3QgdGVybWluYXRlZC4gICovCisrICAgICAgICAgICAgICAgICAgICgrK2N2dC0+bG9uZ19lbmQpLT5uYW1lID0gTlVMTDsKKysgICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgfQorKyAgICAgICAgICAgfQorKworKyAgICAgIGdyb3VwLT5wYXJzZXIgPSBhcmdwLT5wYXJzZXI7CisrICAgICAgZ3JvdXAtPmFyZ3AgPSBhcmdwOworKyAgICAgIGdyb3VwLT5zaG9ydF9lbmQgPSBjdnQtPnNob3J0X2VuZDsKKysgICAgICBncm91cC0+YXJnc19wcm9jZXNzZWQgPSAwOworKyAgICAgIGdyb3VwLT5wYXJlbnQgPSBwYXJlbnQ7CisrICAgICAgZ3JvdXAtPnBhcmVudF9pbmRleCA9IHBhcmVudF9pbmRleDsKKysgICAgICBncm91cC0+aW5wdXQgPSAwOworKyAgICAgIGdyb3VwLT5ob29rID0gMDsKKysgICAgICBncm91cC0+Y2hpbGRfaW5wdXRzID0gMDsKKysKKysgICAgICBpZiAoY2hpbGRyZW4pCisrICAgICAgIC8qIEFzc2lnbiBHUk9VUCdzIENISUxEX0lOUFVUUyBmaWVsZCBzb21lIHNwYWNlIGZyb20KKysgICAgICAgICAgIENWVC0+Y2hpbGRfaW5wdXRzX2VuZC4qLworKyAgICAgICB7CisrICAgICAgICAgdW5zaWduZWQgbnVtX2NoaWxkcmVuID0gMDsKKysgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bbnVtX2NoaWxkcmVuXS5hcmdwKQorKyAgICAgICAgICAgbnVtX2NoaWxkcmVuKys7CisrICAgICAgICAgZ3JvdXAtPmNoaWxkX2lucHV0cyA9IGN2dC0+Y2hpbGRfaW5wdXRzX2VuZDsKKysgICAgICAgICBjdnQtPmNoaWxkX2lucHV0c19lbmQgKz0gbnVtX2NoaWxkcmVuOworKyAgICAgICB9CisrCisrICAgICAgcGFyZW50ID0gZ3JvdXArKzsKKysgICAgfQorKyAgZWxzZQorKyAgICBwYXJlbnQgPSAwOworKworKyAgaWYgKGNoaWxkcmVuKQorKyAgICB7CisrICAgICAgdW5zaWduZWQgaW5kZXggPSAwOworKyAgICAgIHdoaWxlIChjaGlsZHJlbi0+YXJncCkKKysgICAgICAgZ3JvdXAgPQorKyAgICAgICAgIGNvbnZlcnRfb3B0aW9ucyAoY2hpbGRyZW4rKy0+YXJncCwgcGFyZW50LCBpbmRleCsrLCBncm91cCwgY3Z0KTsKKysgICAgfQorKworKyAgcmV0dXJuIGdyb3VwOworK30KKysKKysvKiBGaW5kIHRoZSBtZXJnZWQgc2V0IG9mIGdldG9wdCBvcHRpb25zLCB3aXRoIGtleXMgYXBwcm9waWF0ZWx5IHByZWZpeGVkLiAqLworK3N0YXRpYyB2b2lkCisrcGFyc2VyX2NvbnZlcnQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGludCBmbGFncykKKyt7CisrICBzdHJ1Y3QgcGFyc2VyX2NvbnZlcnRfc3RhdGUgY3Z0OworKworKyAgY3Z0LnBhcnNlciA9IHBhcnNlcjsKKysgIGN2dC5zaG9ydF9lbmQgPSBwYXJzZXItPnNob3J0X29wdHM7CisrICBjdnQubG9uZ19lbmQgPSBwYXJzZXItPmxvbmdfb3B0czsKKysgIGN2dC5jaGlsZF9pbnB1dHNfZW5kID0gcGFyc2VyLT5jaGlsZF9pbnB1dHM7CisrCisrICBpZiAoZmxhZ3MgJiBBUkdQX0lOX09SREVSKQorKyAgICAqY3Z0LnNob3J0X2VuZCsrID0gJy0nOworKyAgZWxzZSBpZiAoZmxhZ3MgJiBBUkdQX05PX0FSR1MpCisrICAgICpjdnQuc2hvcnRfZW5kKysgPSAnKyc7CisrICAqY3Z0LnNob3J0X2VuZCA9ICdcMCc7CisrCisrICBjdnQubG9uZ19lbmQtPm5hbWUgPSBOVUxMOworKworKyAgcGFyc2VyLT5hcmdwID0gYXJncDsKKysKKysgIGlmIChhcmdwKQorKyAgICBwYXJzZXItPmVncm91cCA9IGNvbnZlcnRfb3B0aW9ucyAoYXJncCwgMCwgMCwgcGFyc2VyLT5ncm91cHMsICZjdnQpOworKyAgZWxzZQorKyAgICBwYXJzZXItPmVncm91cCA9IHBhcnNlci0+Z3JvdXBzOyAvKiBObyBwYXJzZXJzIGF0IGFsbCEgKi8KKyt9CisrCisrLyogTGVuZ3RocyBvZiB2YXJpb3VzIHBhcnNlciBmaWVsZHMgd2hpY2ggd2Ugd2lsbCBhbGxvY2F0ZWQuICAqLworK3N0cnVjdCBwYXJzZXJfc2l6ZXMKKyt7CisrICBzaXplX3Qgc2hvcnRfbGVuOyAgICAgICAgICAgIC8qIEdldG9wdCBzaG9ydCBvcHRpb25zIHN0cmluZy4gICovCisrICBzaXplX3QgbG9uZ19sZW47ICAgICAgICAgICAgIC8qIEdldG9wdCBsb25nIG9wdGlvbnMgdmVjdG9yLiAgKi8KKysgIHNpemVfdCBudW1fZ3JvdXBzOyAgICAgICAgICAgLyogR3JvdXAgc3RydWN0dXJlcyB3ZSBhbGxvY2F0ZS4gICovCisrICBzaXplX3QgbnVtX2NoaWxkX2lucHV0czsgICAgIC8qIENoaWxkIGlucHV0IHNsb3RzLiAgKi8KKyt9OworKworKy8qIEZvciBBUkdQLCBpbmNyZW1lbnRzIHRoZSBOVU1fR1JPVVBTIGZpZWxkIGluIFNaUyBieSB0aGUgdG90YWwgbnVtYmVyIG9mCisrIGFyZ3Agc3RydWN0dXJlcyBkZXNjZW5kZWQgZnJvbSBpdCwgYW5kIHRoZSBTSE9SVF9MRU4gJiBMT05HX0xFTiBmaWVsZHMgYnkKKysgdGhlIG1heGltdW0gbGVuZ3RocyBvZiB0aGUgcmVzdWx0aW5nIG1lcmdlZCBnZXRvcHQgc2hvcnQgb3B0aW9ucyBzdHJpbmcgYW5kCisrIGxvbmctb3B0aW9ucyBhcnJheSwgcmVzcGVjdGl2ZWx5LiAgKi8KKytzdGF0aWMgdm9pZAorK2NhbGNfc2l6ZXMgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCAgc3RydWN0IHBhcnNlcl9zaXplcyAqc3pzKQorK3sKKysgIGNvbnN0IHN0cnVjdCBhcmdwX2NoaWxkICpjaGlsZCA9IGFyZ3AtPmNoaWxkcmVuOworKyAgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uICpvcHQgPSBhcmdwLT5vcHRpb25zOworKworKyAgaWYgKG9wdCB8fCBhcmdwLT5wYXJzZXIpCisrICAgIHsKKysgICAgICBzenMtPm51bV9ncm91cHMrKzsKKysgICAgICBpZiAob3B0KQorKyAgICAgICB7CisrICAgICAgICAgaW50IG51bV9vcHRzID0gMDsKKysgICAgICAgICB3aGlsZSAoIV9fb3B0aW9uX2lzX2VuZCAob3B0KyspKQorKyAgICAgICAgICAgbnVtX29wdHMrKzsKKysgICAgICAgICBzenMtPnNob3J0X2xlbiArPSBudW1fb3B0cyAqIDM7IC8qIG9wdCArIHVwIHRvIDIgYDoncyAqLworKyAgICAgICAgIHN6cy0+bG9uZ19sZW4gKz0gbnVtX29wdHM7CisrICAgICAgIH0KKysgICAgfQorKworKyAgaWYgKGNoaWxkKQorKyAgICB3aGlsZSAoY2hpbGQtPmFyZ3ApCisrICAgICAgeworKyAgICAgICBjYWxjX3NpemVzICgoY2hpbGQrKyktPmFyZ3AsIHN6cyk7CisrICAgICAgIHN6cy0+bnVtX2NoaWxkX2lucHV0cysrOworKyAgICAgIH0KKyt9CisrCisrCisrZXh0ZXJuIGNoYXIgKiBfX2FyZ3Bfc2hvcnRfcHJvZ3JhbV9uYW1lICh2b2lkKTsKKysvKiBJbml0aWFsaXplcyBQQVJTRVIgdG8gcGFyc2UgQVJHUCBpbiBhIG1hbm5lciBkZXNjcmliZWQgYnkgRkxBR1MuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX2luaXQgKHN0cnVjdCBwYXJzZXIgKnBhcnNlciwgY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsCisrICAgICAgICAgICAgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgZmxhZ3MsIHZvaWQgKmlucHV0KQorK3sKKysgIGVycm9yX3QgZXJyID0gMDsKKysgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrICBzdHJ1Y3QgcGFyc2VyX3NpemVzIHN6czsKKysgIHN0cnVjdCBfZ2V0b3B0X2RhdGEgb3B0X2RhdGEgPSBfR0VUT1BUX0RBVEFfSU5JVElBTElaRVI7CisrCisrICBzenMuc2hvcnRfbGVuID0gKGZsYWdzICYgQVJHUF9OT19BUkdTKSA/IDAgOiAxOworKyAgc3pzLmxvbmdfbGVuID0gMDsKKysgIHN6cy5udW1fZ3JvdXBzID0gMDsKKysgIHN6cy5udW1fY2hpbGRfaW5wdXRzID0gMDsKKysKKysgIGlmIChhcmdwKQorKyAgICBjYWxjX3NpemVzIChhcmdwLCAmc3pzKTsKKysKKysgIC8qIExlbmd0aHMgb2YgdGhlIHZhcmlvdXMgYml0cyBvZiBzdG9yYWdlIHVzZWQgYnkgUEFSU0VSLiAgKi8KKysjZGVmaW5lIEdMRU4gKHN6cy5udW1fZ3JvdXBzICsgMSkgKiBzaXplb2YgKHN0cnVjdCBncm91cCkKKysjZGVmaW5lIENMRU4gKHN6cy5udW1fY2hpbGRfaW5wdXRzICogc2l6ZW9mICh2b2lkICopKQorKyNkZWZpbmUgTExFTiAoKHN6cy5sb25nX2xlbiArIDEpICogc2l6ZW9mIChzdHJ1Y3Qgb3B0aW9uKSkKKysjZGVmaW5lIFNMRU4gKHN6cy5zaG9ydF9sZW4gKyAxKQorKworKyAgcGFyc2VyLT5zdG9yYWdlID0gbWFsbG9jIChHTEVOICsgQ0xFTiArIExMRU4gKyBTTEVOKTsKKysgIGlmICghIHBhcnNlci0+c3RvcmFnZSkKKysgICAgcmV0dXJuIEVOT01FTTsKKysKKysgIHBhcnNlci0+Z3JvdXBzID0gcGFyc2VyLT5zdG9yYWdlOworKyAgcGFyc2VyLT5jaGlsZF9pbnB1dHMgPSBwYXJzZXItPnN0b3JhZ2UgKyBHTEVOOworKyAgcGFyc2VyLT5sb25nX29wdHMgPSBwYXJzZXItPnN0b3JhZ2UgKyBHTEVOICsgQ0xFTjsKKysgIHBhcnNlci0+c2hvcnRfb3B0cyA9IHBhcnNlci0+c3RvcmFnZSArIEdMRU4gKyBDTEVOICsgTExFTjsKKysgIHBhcnNlci0+b3B0X2RhdGEgPSBvcHRfZGF0YTsKKysKKysgIG1lbXNldCAocGFyc2VyLT5jaGlsZF9pbnB1dHMsIDAsIHN6cy5udW1fY2hpbGRfaW5wdXRzICogc2l6ZW9mICh2b2lkICopKTsKKysgIHBhcnNlcl9jb252ZXJ0IChwYXJzZXIsIGFyZ3AsIGZsYWdzKTsKKysKKysgIG1lbXNldCAoJnBhcnNlci0+c3RhdGUsIDAsIHNpemVvZiAoc3RydWN0IGFyZ3Bfc3RhdGUpKTsKKysgIHBhcnNlci0+c3RhdGUucm9vdF9hcmdwID0gcGFyc2VyLT5hcmdwOworKyAgcGFyc2VyLT5zdGF0ZS5hcmdjID0gYXJnYzsKKysgIHBhcnNlci0+c3RhdGUuYXJndiA9IGFyZ3Y7CisrICBwYXJzZXItPnN0YXRlLmZsYWdzID0gZmxhZ3M7CisrICBwYXJzZXItPnN0YXRlLmVycl9zdHJlYW0gPSBzdGRlcnI7CisrICBwYXJzZXItPnN0YXRlLm91dF9zdHJlYW0gPSBzdGRvdXQ7CisrICBwYXJzZXItPnN0YXRlLm5leHQgPSAwOyAgICAgIC8qIFRlbGwgZ2V0b3B0IHRvIGluaXRpYWxpemUuICAqLworKyAgcGFyc2VyLT5zdGF0ZS5wc3RhdGUgPSBwYXJzZXI7CisrCisrICBwYXJzZXItPnRyeV9nZXRvcHQgPSAxOworKworKyAgLyogQ2FsbCBlYWNoIHBhcnNlciBmb3IgdGhlIGZpcnN0IHRpbWUsIGdpdmluZyBpdCBhIGNoYW5jZSB0byBwcm9wYWdhdGUKKysgICAgIHZhbHVlcyB0byBjaGlsZCBwYXJzZXJzLiAgKi8KKysgIGlmIChwYXJzZXItPmdyb3VwcyA8IHBhcnNlci0+ZWdyb3VwKQorKyAgICBwYXJzZXItPmdyb3Vwcy0+aW5wdXQgPSBpbnB1dDsKKysgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwczsKKysgICAgICAgZ3JvdXAgPCBwYXJzZXItPmVncm91cCAmJiAoIWVyciB8fCBlcnIgPT0gRUJBREtFWSk7CisrICAgICAgIGdyb3VwKyspCisrICAgIHsKKysgICAgICBpZiAoZ3JvdXAtPnBhcmVudCkKKysgICAgICAgLyogSWYgYSBjaGlsZCBwYXJzZXIsIGdldCB0aGUgaW5pdGlhbCBpbnB1dCB2YWx1ZSBmcm9tIHRoZSBwYXJlbnQuICovCisrICAgICAgIGdyb3VwLT5pbnB1dCA9IGdyb3VwLT5wYXJlbnQtPmNoaWxkX2lucHV0c1tncm91cC0+cGFyZW50X2luZGV4XTsKKysKKysgICAgICBpZiAoIWdyb3VwLT5wYXJzZXIKKysgICAgICAgICAmJiBncm91cC0+YXJncC0+Y2hpbGRyZW4gJiYgZ3JvdXAtPmFyZ3AtPmNoaWxkcmVuLT5hcmdwKQorKyAgICAgICAvKiBGb3IgdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSBubyBwYXJzaW5nIGZ1bmN0aW9uIGlzIHN1cHBsaWVkIGZvciBhbgorKyAgICAgICAgICBhcmdwLCBwcm9wYWdhdGUgaXRzIGlucHV0IHRvIGl0cyBmaXJzdCBjaGlsZCwgaWYgYW55ICh0aGlzIGp1c3QKKysgICAgICAgICAgbWFrZXMgdmVyeSBzaW1wbGUgd3JhcHBlciBhcmdwcyBtb3JlIGNvbnZlbmllbnQpLiAgKi8KKysgICAgICAgZ3JvdXAtPmNoaWxkX2lucHV0c1swXSA9IGdyb3VwLT5pbnB1dDsKKysKKysgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9JTklULCAwKTsKKysgICAgfQorKyAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICBlcnIgPSAwOyAgICAgICAgICAgICAgICAgICAvKiBTb21lIHBhcnNlciBkaWRuJ3QgdW5kZXJzdGFuZC4gICovCisrCisrICBpZiAoZXJyKQorKyAgICByZXR1cm4gZXJyOworKworKyAgaWYgKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX05PX0VSUlMpCisrICAgIHsKKysgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdGVyciA9IDA7CisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX1BBUlNFX0FSR1YwKQorKyAgICAgICAvKiBnZXRvcHQgYWx3YXlzIHNraXBzIEFSR1ZbMF0sIHNvIHdlIGhhdmUgdG8gZmFrZSBpdCBvdXQuICBBcyBsb25nCisrICAgICAgICAgIGFzIE9QVEVSUiBpcyAwLCB0aGVuIGl0IHNob3VsZG4ndCBhY3R1YWxseSB0cnkgdG8gYWNjZXNzIGl0LiAgKi8KKysgICAgICAgcGFyc2VyLT5zdGF0ZS5hcmd2LS0sIHBhcnNlci0+c3RhdGUuYXJnYysrOworKyAgICB9CisrICBlbHNlCisrICAgIHBhcnNlci0+b3B0X2RhdGEub3B0ZXJyID0gMTsgICAgICAgLyogUHJpbnQgZXJyb3IgbWVzc2FnZXMuICAqLworKworKyAgaWYgKHBhcnNlci0+c3RhdGUuYXJndiA9PSBhcmd2ICYmIGFyZ3ZbMF0pCisrICAgIC8qIFRoZXJlJ3MgYW4gYXJndlswXTsgdXNlIGl0IGZvciBtZXNzYWdlcy4gICovCisrICAgIHsKKysgICAgICBjaGFyICpzaG9ydF9uYW1lID0gc3RycmNociAoYXJndlswXSwgJy8nKTsKKysgICAgICBwYXJzZXItPnN0YXRlLm5hbWUgPSBzaG9ydF9uYW1lID8gc2hvcnRfbmFtZSArIDEgOiBhcmd2WzBdOworKyAgICB9CisrICBlbHNlCisrICAgIHBhcnNlci0+c3RhdGUubmFtZSA9IF9fYXJncF9zaG9ydF9wcm9ncmFtX25hbWUgKCk7CisrCisrICByZXR1cm4gMDsKKyt9CisrCisrLyogRnJlZSBhbnkgc3RvcmFnZSBjb25zdW1lZCBieSBQQVJTRVIgKGJ1dCBub3QgUEFSU0VSIGl0c2VsZikuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX2ZpbmFsaXplIChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsCisrICAgICAgICAgICAgICAgIGVycm9yX3QgZXJyLCBpbnQgYXJnX2ViYWRrZXksIGludCAqZW5kX2luZGV4KQorK3sKKysgIHN0cnVjdCBncm91cCAqZ3JvdXA7CisrCisrICBpZiAoZXJyID09IEVCQURLRVkgJiYgYXJnX2ViYWRrZXkpCisrICAgIC8qIFN1cHByZXNzIGVycm9ycyBnZW5lcmF0ZWQgYnkgdW5wYXJzZWQgYXJndW1lbnRzLiAgKi8KKysgICAgZXJyID0gMDsKKysKKysgIGlmICghIGVycikKKysgICAgeworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLm5leHQgPT0gcGFyc2VyLT5zdGF0ZS5hcmdjKQorKyAgICAgICAvKiBXZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGFsbCBhcmd1bWVudHMhICBDYWxsIGFsbCB0aGUgcGFyc2VycyBhZ2FpbiwKKysgICAgICAgICAganVzdCBhIGZldyBtb3JlIHRpbWVzLi4uICovCisrICAgICAgIHsKKysgICAgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7CisrICAgICAgICAgICAgICBncm91cCA8IHBhcnNlci0+ZWdyb3VwICYmICghZXJyIHx8IGVycj09RUJBREtFWSk7CisrICAgICAgICAgICAgICBncm91cCsrKQorKyAgICAgICAgICAgaWYgKGdyb3VwLT5hcmdzX3Byb2Nlc3NlZCA9PSAwKQorKyAgICAgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9OT19BUkdTLCAwKTsKKysgICAgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5lZ3JvdXAgLSAxOworKyAgICAgICAgICAgICAgZ3JvdXAgPj0gcGFyc2VyLT5ncm91cHMgJiYgKCFlcnIgfHwgZXJyPT1FQkFES0VZKTsKKysgICAgICAgICAgICAgIGdyb3VwLS0pCisrICAgICAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9FTkQsIDApOworKworKyAgICAgICAgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgICAgICAgIGVyciA9IDA7ICAgICAgICAgICAgLyogU29tZSBwYXJzZXIgZGlkbid0IHVuZGVyc3RhbmQuICAqLworKworKyAgICAgICAgIC8qIFRlbGwgdGhlIHVzZXIgdGhhdCBhbGwgYXJndW1lbnRzIGFyZSBwYXJzZWQuICAqLworKyAgICAgICAgIGlmIChlbmRfaW5kZXgpCisrICAgICAgICAgICAqZW5kX2luZGV4ID0gcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAoZW5kX2luZGV4KQorKyAgICAgICAvKiBSZXR1cm4gYW55IHJlbWFpbmluZyBhcmd1bWVudHMgdG8gdGhlIHVzZXIuICAqLworKyAgICAgICAqZW5kX2luZGV4ID0gcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgICAgIGVsc2UKKysgICAgICAgLyogTm8gd2F5IHRvIHJldHVybiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIGJvZ3VzLiAqLworKyAgICAgICB7CisrICAgICAgICAgaWYgKCEocGFyc2VyLT5zdGF0ZS5mbGFncyAmIEFSR1BfTk9fRVJSUykKKysgICAgICAgICAgICAgJiYgcGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtKQorKyAgICAgICAgICAgZnByaW50ZiAocGFyc2VyLT5zdGF0ZS5lcnJfc3RyZWFtLAorKyAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHBhcnNlci0+YXJncC0+YXJncF9kb21haW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBUb28gbWFueSBhcmd1bWVudHNcbiIpLAorKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLT5zdGF0ZS5uYW1lKTsKKysgICAgICAgICBlcnIgPSBFQkFES0VZOworKyAgICAgICB9CisrICAgIH0KKysKKysgIC8qIE9rYXksIHdlJ3JlIGFsbCBkb25lLCB3aXRoIGVpdGhlciBhbiBlcnJvciBvciBzdWNjZXNzOyBjYWxsIHRoZSBwYXJzZXJzCisrICAgICB0byBpbmRpY2F0ZSB3aGljaCBvbmUuICAqLworKworKyAgaWYgKGVycikKKysgICAgeworKyAgICAgIC8qIE1heWJlIHByaW50IGFuIGVycm9yIG1lc3NhZ2UuICAqLworKyAgICAgIGlmIChlcnIgPT0gRUJBREtFWSkKKysgICAgICAgLyogQW4gYXBwcm9wcmlhdGUgbWVzc2FnZSBkZXNjcmliaW5nIHdoYXQgdGhlIGVycm9yIHdhcyBzaG91bGQgaGF2ZQorKyAgICAgICAgICBiZWVuIHByaW50ZWQgZWFybGllci4gICovCisrICAgICAgIGFyZ3Bfc3RhdGVfaGVscCAoJnBhcnNlci0+c3RhdGUsIHBhcnNlci0+c3RhdGUuZXJyX3N0cmVhbSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR1BfSEVMUF9TVERfRVJSKTsKKysKKysgICAgICAvKiBTaW5jZSB3ZSBkaWRuJ3QgZXhpdCwgZ2l2ZSBlYWNoIHBhcnNlciBhbiBlcnJvciBpbmRpY2F0aW9uLiAgKi8KKysgICAgICBmb3IgKGdyb3VwID0gcGFyc2VyLT5ncm91cHM7IGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXA7IGdyb3VwKyspCisrICAgICAgIGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX0VSUk9SLCAwKTsKKysgICAgfQorKyAgZWxzZQorKyAgICAvKiBOb3RpZnkgcGFyc2VycyBvZiBzdWNjZXNzLCBhbmQgcHJvcGFnYXRlIGJhY2sgdmFsdWVzIGZyb20gcGFyc2Vycy4gICovCisrICAgIHsKKysgICAgICAvKiBXZSBwYXNzIG92ZXIgdGhlIGdyb3VwcyBpbiByZXZlcnNlIG9yZGVyIHNvIHRoYXQgY2hpbGQgZ3JvdXBzIGFyZQorKyAgICAgICAgZ2l2ZW4gYSBjaGFuY2UgdG8gZG8gdGhlcmUgcHJvY2Vzc2luZyBiZWZvcmUgcGFzc2luZyBiYWNrIGEgdmFsdWUgdG8KKysgICAgICAgIHRoZSBwYXJlbnQuICAqLworKyAgICAgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmVncm91cCAtIDEKKysgICAgICAgICAgOyBncm91cCA+PSBwYXJzZXItPmdyb3VwcyAmJiAoIWVyciB8fCBlcnIgPT0gRUJBREtFWSkKKysgICAgICAgICAgOyBncm91cC0tKQorKyAgICAgICBlcnIgPSBncm91cF9wYXJzZSAoZ3JvdXAsICZwYXJzZXItPnN0YXRlLCBBUkdQX0tFWV9TVUNDRVNTLCAwKTsKKysgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgIGVyciA9IDA7ICAgICAgICAgICAgICAgIC8qIFNvbWUgcGFyc2VyIGRpZG4ndCB1bmRlcnN0YW5kLiAgKi8KKysgICAgfQorKworKyAgLyogQ2FsbCBwYXJzZXJzIG9uY2UgbW9yZSwgdG8gZG8gYW55IGZpbmFsIGNsZWFudXAuICBFcnJvcnMgYXJlIGlnbm9yZWQuICAqLworKyAgZm9yIChncm91cCA9IHBhcnNlci0+ZWdyb3VwIC0gMTsgZ3JvdXAgPj0gcGFyc2VyLT5ncm91cHM7IGdyb3VwLS0pCisrICAgIGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIEFSR1BfS0VZX0ZJTkksIDApOworKworKyAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICBlcnIgPSBFSU5WQUw7CisrCisrICBmcmVlIChwYXJzZXItPnN0b3JhZ2UpOworKworKyAgcmV0dXJuIGVycjsKKyt9CisrCisrLyogQ2FsbCB0aGUgdXNlciBwYXJzZXJzIHRvIHBhcnNlIHRoZSBub24tb3B0aW9uIGFyZ3VtZW50IFZBTCwgYXQgdGhlIGN1cnJlbnQKKysgICBwb3NpdGlvbiwgcmV0dXJuaW5nIGFueSBlcnJvci4gIFRoZSBzdGF0ZSBORVhUIHBvaW50ZXIgaXMgYXNzdW1lZCB0byBoYXZlCisrICAgYmVlbiBhZGp1c3RlZCAoYnkgZ2V0b3B0KSB0byBwb2ludCBhZnRlciB0aGlzIGFyZ3VtZW50OyB0aGlzIGZ1bmN0aW9uIHdpbGwKKysgICBhZGp1c3QgaXQgY29ycmVjdGx5IHRvIHJlZmxlY3QgaG93ZXZlciBtYW55IGFyZ3MgYWN0dWFsbHkgZW5kIHVwIGJlaW5nCisrICAgY29uc3VtZWQuICAqLworK3N0YXRpYyBlcnJvcl90CisrcGFyc2VyX3BhcnNlX2FyZyAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBjaGFyICp2YWwpCisreworKyAgLyogU2F2ZSB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgTkVYVCwgZmlyc3QgYWRqdXN0aW5nIGl0IHNvIHRoYXQgdGhlIGFyZworKyAgICAgd2UncmUgcGFyc2luZyBpcyBhZ2FpbiB0aGUgZnJvbnQgb2YgdGhlIGFyZyB2ZWN0b3IuICAqLworKyAgaW50IGluZGV4ID0gLS1wYXJzZXItPnN0YXRlLm5leHQ7CisrICBlcnJvcl90IGVyciA9IEVCQURLRVk7CisrICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgaW50IGtleSA9IDA7ICAgICAgICAgICAgICAgICAvKiBXaGljaCBvZiBBUkdQX0tFWV9BUkdbU10gd2UgdXNlZC4gICovCisrCisrICAvKiBUcnkgdG8gcGFyc2UgdGhlIGFyZ3VtZW50IGluIGVhY2ggcGFyc2VyLiAgKi8KKysgIGZvciAoZ3JvdXAgPSBwYXJzZXItPmdyb3VwcworKyAgICAgICA7IGdyb3VwIDwgcGFyc2VyLT5lZ3JvdXAgJiYgZXJyID09IEVCQURLRVkKKysgICAgICAgOyBncm91cCsrKQorKyAgICB7CisrICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0Kys7ICAgIC8qIEZvciBBUkdQX0tFWV9BUkcsIGNvbnN1bWUgdGhlIGFyZy4gICovCisrICAgICAga2V5ID0gQVJHUF9LRVlfQVJHOworKyAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIGtleSwgdmFsKTsKKysKKysgICAgICBpZiAoZXJyID09IEVCQURLRVkpCisrICAgICAgIC8qIFRoaXMgcGFyc2VyIGRvZXNuJ3QgbGlrZSBBUkdQX0tFWV9BUkc7IHRyeSBBUkdQX0tFWV9BUkdTIGluc3RlYWQuICovCisrICAgICAgIHsKKysgICAgICAgICBwYXJzZXItPnN0YXRlLm5leHQtLTsgLyogRm9yIEFSR1BfS0VZX0FSR1MsIHB1dCBiYWNrIHRoZSBhcmcuICAqLworKyAgICAgICAgIGtleSA9IEFSR1BfS0VZX0FSR1M7CisrICAgICAgICAgZXJyID0gZ3JvdXBfcGFyc2UgKGdyb3VwLCAmcGFyc2VyLT5zdGF0ZSwga2V5LCAwKTsKKysgICAgICAgfQorKyAgICB9CisrCisrICBpZiAoISBlcnIpCisrICAgIHsKKysgICAgICBpZiAoa2V5ID09IEFSR1BfS0VZX0FSR1MpCisrICAgICAgIC8qIFRoZSBkZWZhdWx0IGZvciBBUkdQX0tFWV9BUkdTIGlzIHRvIGFzc3VtZSB0aGF0IGlmIE5FWFQgaXNuJ3QKKysgICAgICAgICAgY2hhbmdlZCBieSB0aGUgdXNlciwgKmFsbCogYXJndW1lbnRzIHNob3VsZCBiZSBjb25zaWRlcmVkCisrICAgICAgICAgIGNvbnN1bWVkLiAgKi8KKysgICAgICAgcGFyc2VyLT5zdGF0ZS5uZXh0ID0gcGFyc2VyLT5zdGF0ZS5hcmdjOworKworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLm5leHQgPiBpbmRleCkKKysgICAgICAgLyogUmVtZW1iZXIgdGhhdCB3ZSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGEgbm9uLW9wdGlvbgorKyAgICAgICAgICBhcmd1bWVudCAtLSBidXQgb25seSBpZiB0aGUgdXNlciBoYXNuJ3QgZ290dGVuIHRyaWNreSBhbmQgc2V0CisrICAgICAgICAgIHRoZSBjbG9jayBiYWNrLiAgKi8KKysgICAgICAgKC0tZ3JvdXApLT5hcmdzX3Byb2Nlc3NlZCArPSAocGFyc2VyLT5zdGF0ZS5uZXh0IC0gaW5kZXgpOworKyAgICAgIGVsc2UKKysgICAgICAgLyogVGhlIHVzZXIgd2FudHMgdG8gcmVwYXJzZSBzb21lIGFyZ3MsIGdpdmUgZ2V0b3B0IGFub3RoZXIgdHJ5LiAgKi8KKysgICAgICAgcGFyc2VyLT50cnlfZ2V0b3B0ID0gMTsKKysgICAgfQorKworKyAgcmV0dXJuIGVycjsKKyt9CisrCisrLyogQ2FsbCB0aGUgdXNlciBwYXJzZXJzIHRvIHBhcnNlIHRoZSBvcHRpb24gT1BULCB3aXRoIGFyZ3VtZW50IFZBTCwgYXQgdGhlCisrICAgY3VycmVudCBwb3NpdGlvbiwgcmV0dXJuaW5nIGFueSBlcnJvci4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfcGFyc2Vfb3B0IChzdHJ1Y3QgcGFyc2VyICpwYXJzZXIsIGludCBvcHQsIGNoYXIgKnZhbCkKKyt7CisrICAvKiBUaGUgZ3JvdXAga2V5IGVuY29kZWQgaW4gdGhlIGhpZ2ggYml0czsgMCBmb3Igc2hvcnQgb3B0cyBvcgorKyAgICAgZ3JvdXBfbnVtYmVyICsgMSBmb3IgbG9uZyBvcHRzLiAgKi8KKysgIGludCBncm91cF9rZXkgPSBvcHQgPj4gVVNFUl9CSVRTOworKyAgZXJyb3JfdCBlcnIgPSBFQkFES0VZOworKworKyAgaWYgKGdyb3VwX2tleSA9PSAwKQorKyAgICAvKiBBIHNob3J0IG9wdGlvbi4gIEJ5IGNvbXBhcmluZyBPUFQncyBwb3NpdGlvbiBpbiBTSE9SVF9PUFRTIHRvIHRoZQorKyAgICAgICB2YXJpb3VzIHN0YXJ0aW5nIHBvc2l0aW9ucyBpbiBlYWNoIGdyb3VwJ3MgU0hPUlRfRU5EIGZpZWxkLCB3ZSBjYW4KKysgICAgICAgZGV0ZXJtaW5lIHdoaWNoIGdyb3VwIE9QVCBjYW1lIGZyb20uICAqLworKyAgICB7CisrICAgICAgc3RydWN0IGdyb3VwICpncm91cDsKKysgICAgICBjaGFyICpzaG9ydF9pbmRleCA9IHN0cmNociAocGFyc2VyLT5zaG9ydF9vcHRzLCBvcHQpOworKworKyAgICAgIGlmIChzaG9ydF9pbmRleCkKKysgICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwOyBncm91cCsrKQorKyAgICAgICAgIGlmIChncm91cC0+c2hvcnRfZW5kID4gc2hvcnRfaW5kZXgpCisrICAgICAgICAgICB7CisrICAgICAgICAgICAgIGVyciA9IGdyb3VwX3BhcnNlIChncm91cCwgJnBhcnNlci0+c3RhdGUsIG9wdCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0YXJnKTsKKysgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICAgICB9CisrICAgIH0KKysgIGVsc2UKKysgICAgLyogQSBsb25nIG9wdGlvbi4gIFdlIHVzZSBzaGlmdHMgaW5zdGVhZCBvZiBtYXNraW5nIGZvciBleHRyYWN0aW5nCisrICAgICAgIHRoZSB1c2VyIHZhbHVlIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoZSBzaWduLiAgKi8KKysgICAgZXJyID0KKysgICAgICBncm91cF9wYXJzZSAoJnBhcnNlci0+Z3JvdXBzW2dyb3VwX2tleSAtIDFdLCAmcGFyc2VyLT5zdGF0ZSwKKysgICAgICAgICAgICAgICAgICAob3B0IDw8IEdST1VQX0JJVFMpID4+IEdST1VQX0JJVFMsCisrICAgICAgICAgICAgICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRhcmcpOworKworKyAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAvKiBBdCBsZWFzdCBjdXJyZW50bHksIGFuIG9wdGlvbiBub3QgcmVjb2duaXplZCBpcyBhbiBlcnJvciBpbiB0aGUKKysgICAgICAgcGFyc2VyLCBiZWNhdXNlIHdlIHByZS1jb21wdXRlIHdoaWNoIHBhcnNlciBpcyBzdXBwb3NlZCB0byBkZWFsCisrICAgICAgIHdpdGggZWFjaCBvcHRpb24uICAqLworKyAgICB7CisrICAgICAgc3RhdGljIGNvbnN0IGNoYXIgYmFkX2tleV9lcnJbXSA9CisrICAgICAgIE5fKCIoUFJPR1JBTSBFUlJPUikgT3B0aW9uIHNob3VsZCBoYXZlIGJlZW4gcmVjb2duaXplZCE/Iik7CisrICAgICAgaWYgKGdyb3VwX2tleSA9PSAwKQorKyAgICAgICBhcmdwX2Vycm9yICgmcGFyc2VyLT5zdGF0ZSwgIi0lYzogJXMiLCBvcHQsCisrICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHBhcnNlci0+YXJncC0+YXJncF9kb21haW4sIGJhZF9rZXlfZXJyKSk7CisrICAgICAgZWxzZQorKyAgICAgICB7CisrICAgICAgICAgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHQgPSBwYXJzZXItPmxvbmdfb3B0czsKKysgICAgICAgICB3aGlsZSAobG9uZ19vcHQtPnZhbCAhPSBvcHQgJiYgbG9uZ19vcHQtPm5hbWUpCisrICAgICAgICAgICBsb25nX29wdCsrOworKyAgICAgICAgIGFyZ3BfZXJyb3IgKCZwYXJzZXItPnN0YXRlLCAiLS0lczogJXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19vcHQtPm5hbWUgPyBsb25nX29wdC0+bmFtZSA6ICI/Pz8iLAorKyAgICAgICAgICAgICAgICAgICAgICAgZGdldHRleHQgKHBhcnNlci0+YXJncC0+YXJncF9kb21haW4sIGJhZF9rZXlfZXJyKSk7CisrICAgICAgIH0KKysgICAgfQorKworKyAgcmV0dXJuIGVycjsKKyt9CisrCisrLyogUGFyc2UgdGhlIG5leHQgYXJndW1lbnQgaW4gUEFSU0VSIChhcyBpbmRpY2F0ZWQgYnkgUEFSU0VSLT5zdGF0ZS5uZXh0KS4KKysgICBBbnkgZXJyb3IgZnJvbSB0aGUgcGFyc2VycyBpcyByZXR1cm5lZCwgYW5kICpBUkdQX0VCQURLRVkgaW5kaWNhdGVzCisrICAgd2hldGhlciBhIHZhbHVlIG9mIEVCQURLRVkgaXMgZHVlIHRvIGFuIHVucmVjb2duaXplZCBhcmd1bWVudCAod2hpY2ggaXMKKysgICBnZW5lcmFsbHkgbm90IGZhdGFsKS4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZXJfcGFyc2VfbmV4dCAoc3RydWN0IHBhcnNlciAqcGFyc2VyLCBpbnQgKmFyZ19lYmFka2V5KQorK3sKKysgIGludCBvcHQ7CisrICBlcnJvcl90IGVyciA9IDA7CisrCisrICBpZiAocGFyc2VyLT5zdGF0ZS5xdW90ZWQgJiYgcGFyc2VyLT5zdGF0ZS5uZXh0IDwgcGFyc2VyLT5zdGF0ZS5xdW90ZWQpCisrICAgIC8qIFRoZSBuZXh0IGFyZ3VtZW50IHBvaW50ZXIgaGFzIGJlZW4gbW92ZWQgdG8gYmVmb3JlIHRoZSBxdW90ZWQKKysgICAgICAgcmVnaW9uLCBzbyBwcmV0ZW5kIHdlIG5ldmVyIHNhdyB0aGUgcXVvdGluZyBgLS0nLCBhbmQgZ2l2ZSBnZXRvcHQKKysgICAgICAgYW5vdGhlciBjaGFuY2UuICBJZiB0aGUgdXNlciBoYXNuJ3QgcmVtb3ZlZCBpdCwgZ2V0b3B0IHdpbGwganVzdAorKyAgICAgICBwcm9jZXNzIGl0IGFnYWluLiAgKi8KKysgICAgcGFyc2VyLT5zdGF0ZS5xdW90ZWQgPSAwOworKworKyAgaWYgKHBhcnNlci0+dHJ5X2dldG9wdCAmJiAhcGFyc2VyLT5zdGF0ZS5xdW90ZWQpCisrICAgIC8qIEdpdmUgZ2V0b3B0IGEgY2hhbmNlIHRvIHBhcnNlIHRoaXMuICAqLworKyAgICB7CisrICAgICAgLyogUHV0IGl0IGJhY2sgaW4gT1BUSU5EIGZvciBnZXRvcHQuICAqLworKyAgICAgIHBhcnNlci0+b3B0X2RhdGEub3B0aW5kID0gcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgICAgIC8qIERpc3Rpbmd1aXNoIEtFWV9FUlIgZnJvbSBhIHJlYWwgb3B0aW9uLiAgKi8KKysgICAgICBwYXJzZXItPm9wdF9kYXRhLm9wdG9wdCA9IEtFWV9FTkQ7CisrICAgICAgaWYgKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX0xPTkdfT05MWSkKKysgICAgICAgb3B0ID0gX2dldG9wdF9sb25nX29ubHlfciAocGFyc2VyLT5zdGF0ZS5hcmdjLCBwYXJzZXItPnN0YXRlLmFyZ3YsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+c2hvcnRfb3B0cywgcGFyc2VyLT5sb25nX29wdHMsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZXItPm9wdF9kYXRhKTsKKysgICAgICBlbHNlCisrICAgICAgIG9wdCA9IF9nZXRvcHRfbG9uZ19yIChwYXJzZXItPnN0YXRlLmFyZ2MsIHBhcnNlci0+c3RhdGUuYXJndiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci0+c2hvcnRfb3B0cywgcGFyc2VyLT5sb25nX29wdHMsIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyc2VyLT5vcHRfZGF0YSk7CisrICAgICAgLyogQW5kIHNlZSB3aGF0IGdldG9wdCBkaWQuICAqLworKyAgICAgIHBhcnNlci0+c3RhdGUubmV4dCA9IHBhcnNlci0+b3B0X2RhdGEub3B0aW5kOworKworKyAgICAgIGlmIChvcHQgPT0gS0VZX0VORCkKKysgICAgICAgLyogR2V0b3B0IHNheXMgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9ucywgc28gc3RvcCB1c2luZworKyAgICAgICAgICBnZXRvcHQ7IHdlJ2xsIGNvbnRpbnVlIGlmIG5lY2Vzc2FyeSBvbiBvdXIgb3duLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIHBhcnNlci0+dHJ5X2dldG9wdCA9IDA7CisrICAgICAgICAgaWYgKHBhcnNlci0+c3RhdGUubmV4dCA+IDEKKysgICAgICAgICAgICAgJiYgc3RyY21wIChwYXJzZXItPnN0YXRlLmFyZ3ZbcGFyc2VyLT5zdGF0ZS5uZXh0IC0gMV0sIFFVT1RFKQorKyAgICAgICAgICAgICAgICAgID09IDApCisrICAgICAgICAgICAvKiBOb3Qgb25seSBpcyB0aGlzIHRoZSBlbmQgb2YgdGhlIG9wdGlvbnMsIGJ1dCBpdCdzIGEKKysgICAgICAgICAgICAgIGBxdW90ZWQnIHJlZ2lvbiwgd2hpY2ggbWF5IGhhdmUgYXJncyB0aGF0ICpsb29rKiBsaWtlCisrICAgICAgICAgICAgICBvcHRpb25zLCBzbyB3ZSBkZWZpbml0ZWx5IHNob3VsZG4ndCB0cnkgdG8gdXNlIGdldG9wdCBwYXN0CisrICAgICAgICAgICAgICBoZXJlLCB3aGF0ZXZlciBoYXBwZW5zLiAgKi8KKysgICAgICAgICAgIHBhcnNlci0+c3RhdGUucXVvdGVkID0gcGFyc2VyLT5zdGF0ZS5uZXh0OworKyAgICAgICB9CisrICAgICAgZWxzZSBpZiAob3B0ID09IEtFWV9FUlIgJiYgcGFyc2VyLT5vcHRfZGF0YS5vcHRvcHQgIT0gS0VZX0VORCkKKysgICAgICAgLyogS0VZX0VSUiBjYW4gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBhIHZhbGlkIHVzZXIgc2hvcnQKKysgICAgICAgICAgb3B0aW9uLCBidXQgaW4gdGhlIGNhc2Ugb2YgYSByZWFsIGVycm9yLCBnZXRvcHQgc2V0cyBPUFRPUFQKKysgICAgICAgICAgdG8gdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXIsIHdoaWNoIGNhbiBuZXZlciBiZSBLRVlfRU5ELiAgKi8KKysgICAgICAgeworKyAgICAgICAgICphcmdfZWJhZGtleSA9IDA7CisrICAgICAgICAgcmV0dXJuIEVCQURLRVk7CisrICAgICAgIH0KKysgICAgfQorKyAgZWxzZQorKyAgICBvcHQgPSBLRVlfRU5EOworKworKyAgaWYgKG9wdCA9PSBLRVlfRU5EKQorKyAgICB7CisrICAgICAgLyogV2UncmUgcGFzdCB3aGF0IGdldG9wdCBjb25zaWRlcnMgdGhlIG9wdGlvbnMuICAqLworKyAgICAgIGlmIChwYXJzZXItPnN0YXRlLm5leHQgPj0gcGFyc2VyLT5zdGF0ZS5hcmdjCisrICAgICAgICAgfHwgKHBhcnNlci0+c3RhdGUuZmxhZ3MgJiBBUkdQX05PX0FSR1MpKQorKyAgICAgICAvKiBJbmRpY2F0ZSB0aGF0IHdlJ3JlIGRvbmUuICAqLworKyAgICAgICB7CisrICAgICAgICAgKmFyZ19lYmFka2V5ID0gMTsKKysgICAgICAgICByZXR1cm4gRUJBREtFWTsKKysgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgLyogQSBub24tb3B0aW9uIGFyZzsgc2ltdWxhdGUgd2hhdCBnZXRvcHQgbWlnaHQgaGF2ZSBkb25lLiAgKi8KKysgICAgICAgeworKyAgICAgICAgIG9wdCA9IEtFWV9BUkc7CisrICAgICAgICAgcGFyc2VyLT5vcHRfZGF0YS5vcHRhcmcgPSBwYXJzZXItPnN0YXRlLmFyZ3ZbcGFyc2VyLT5zdGF0ZS5uZXh0KytdOworKyAgICAgICB9CisrICAgIH0KKysKKysgIGlmIChvcHQgPT0gS0VZX0FSRykKKysgICAgLyogQSBub24tb3B0aW9uIGFyZ3VtZW50OyB0cnkgZWFjaCBwYXJzZXIgaW4gdHVybi4gICovCisrICAgIGVyciA9IHBhcnNlcl9wYXJzZV9hcmcgKHBhcnNlciwgcGFyc2VyLT5vcHRfZGF0YS5vcHRhcmcpOworKyAgZWxzZQorKyAgICBlcnIgPSBwYXJzZXJfcGFyc2Vfb3B0IChwYXJzZXIsIG9wdCwgcGFyc2VyLT5vcHRfZGF0YS5vcHRhcmcpOworKworKyAgaWYgKGVyciA9PSBFQkFES0VZKQorKyAgICAqYXJnX2ViYWRrZXkgPSAob3B0ID09IEtFWV9FTkQgfHwgb3B0ID09IEtFWV9BUkcpOworKworKyAgcmV0dXJuIGVycjsKKyt9CisrCisrLyogUGFyc2UgdGhlIG9wdGlvbnMgc3RyaW5ncyBpbiBBUkdDICYgQVJHViBhY2NvcmRpbmcgdG8gdGhlIGFyZ3AgaW4gQVJHUC4KKysgICBGTEFHUyBpcyBvbmUgb2YgdGhlIEFSR1BfIGZsYWdzIGFib3ZlLiAgSWYgRU5EX0lOREVYIGlzIG5vbi1OVUxMLCB0aGUKKysgICBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCB1bnBhcnNlZCBvcHRpb24gaXMgcmV0dXJuZWQgaW4gaXQuICBJZiBhbgorKyAgIHVua25vd24gb3B0aW9uIGlzIHByZXNlbnQsIEVJTlZBTCBpcyByZXR1cm5lZDsgaWYgc29tZSBwYXJzZXIgcm91dGluZQorKyAgIHJldHVybmVkIGEgbm9uLXplcm8gdmFsdWUsIGl0IGlzIHJldHVybmVkOyBvdGhlcndpc2UgMCBpcyByZXR1cm5lZC4gICovCisrZXJyb3JfdAorK2FyZ3BfcGFyc2UgKGNvbnN0IHN0cnVjdCBhcmdwICphcmdwLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHVuc2lnbmVkIGZsYWdzLAorKyAgICAgICAgICAgICBpbnQgKmVuZF9pbmRleCwgdm9pZCAqaW5wdXQpCisreworKyAgZXJyb3JfdCBlcnI7CisrICBzdHJ1Y3QgcGFyc2VyIHBhcnNlcjsKKysKKysgIC8qIElmIHRydWUsIHRoZW4gZXJyID09IEVCQURLRVkgaXMgYSByZXN1bHQgb2YgYSBub24tb3B0aW9uIGFyZ3VtZW50IGZhaWxpbmcKKysgICAgIHRvIGJlIHBhcnNlZCAod2hpY2ggaW4gc29tZSBjYXNlcyBpc24ndCBhY3R1YWxseSBhbiBlcnJvcikuICAqLworKyAgaW50IGFyZ19lYmFka2V5ID0gMDsKKysKKysgIGlmICghIChmbGFncyAmIEFSR1BfTk9fSEVMUCkpCisrICAgIC8qIEFkZCBvdXIgb3duIG9wdGlvbnMuICAqLworKyAgICB7CisrICAgICAgc3RydWN0IGFyZ3BfY2hpbGQgKmNoaWxkID0gYWxsb2NhICg0ICogc2l6ZW9mIChzdHJ1Y3QgYXJncF9jaGlsZCkpOworKyAgICAgIHN0cnVjdCBhcmdwICp0b3BfYXJncCA9IGFsbG9jYSAoc2l6ZW9mIChzdHJ1Y3QgYXJncCkpOworKworKyAgICAgIC8qIFRPUF9BUkdQIGhhcyBubyBvcHRpb25zLCBpdCBqdXN0IHNlcnZlcyB0byBncm91cCB0aGUgdXNlciAmIGRlZmF1bHQKKysgICAgICAgIGFyZ3BzLiAgKi8KKysgICAgICBtZW1zZXQgKHRvcF9hcmdwLCAwLCBzaXplb2YgKCp0b3BfYXJncCkpOworKyAgICAgIHRvcF9hcmdwLT5jaGlsZHJlbiA9IGNoaWxkOworKworKyAgICAgIG1lbXNldCAoY2hpbGQsIDAsIDQgKiBzaXplb2YgKHN0cnVjdCBhcmdwX2NoaWxkKSk7CisrCisrICAgICAgaWYgKGFyZ3ApCisrICAgICAgIChjaGlsZCsrKS0+YXJncCA9IGFyZ3A7CisrICAgICAgKGNoaWxkKyspLT5hcmdwID0gJmFyZ3BfZGVmYXVsdF9hcmdwOworKyAgICAgIGlmIChhcmdwX3Byb2dyYW1fdmVyc2lvbiB8fCBhcmdwX3Byb2dyYW1fdmVyc2lvbl9ob29rKQorKyAgICAgICAoY2hpbGQrKyktPmFyZ3AgPSAmYXJncF92ZXJzaW9uX2FyZ3A7CisrICAgICAgY2hpbGQtPmFyZ3AgPSAwOworKworKyAgICAgIGFyZ3AgPSB0b3BfYXJncDsKKysgICAgfQorKworKyAgLyogQ29uc3RydWN0IGEgcGFyc2VyIGZvciB0aGVzZSBhcmd1bWVudHMuICAqLworKyAgZXJyID0gcGFyc2VyX2luaXQgKCZwYXJzZXIsIGFyZ3AsIGFyZ2MsIGFyZ3YsIGZsYWdzLCBpbnB1dCk7CisrCisrICBpZiAoISBlcnIpCisrICAgIC8qIFBhcnNlISAqLworKyAgICB7CisrICAgICAgd2hpbGUgKCEgZXJyKQorKyAgICAgICBlcnIgPSBwYXJzZXJfcGFyc2VfbmV4dCAoJnBhcnNlciwgJmFyZ19lYmFka2V5KTsKKysgICAgICBlcnIgPSBwYXJzZXJfZmluYWxpemUgKCZwYXJzZXIsIGVyciwgYXJnX2ViYWRrZXksIGVuZF9pbmRleCk7CisrICAgIH0KKysKKysgIHJldHVybiBlcnI7CisrfQorKworKy8qIFJldHVybiB0aGUgaW5wdXQgZmllbGQgZm9yIEFSR1AgaW4gdGhlIHBhcnNlciBjb3JyZXNwb25kaW5nIHRvIFNUQVRFOyB1c2VkCisrICAgYnkgdGhlIGhlbHAgcm91dGluZXMuICAqLworK3ZvaWQgKgorK19fYXJncF9pbnB1dCAoY29uc3Qgc3RydWN0IGFyZ3AgKmFyZ3AsIGNvbnN0IHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBpZiAoc3RhdGUpCisrICAgIHsKKysgICAgICBzdHJ1Y3QgZ3JvdXAgKmdyb3VwOworKyAgICAgIHN0cnVjdCBwYXJzZXIgKnBhcnNlciA9IHN0YXRlLT5wc3RhdGU7CisrCisrICAgICAgZm9yIChncm91cCA9IHBhcnNlci0+Z3JvdXBzOyBncm91cCA8IHBhcnNlci0+ZWdyb3VwOyBncm91cCsrKQorKyAgICAgICBpZiAoZ3JvdXAtPmFyZ3AgPT0gYXJncCkKKysgICAgICAgICByZXR1cm4gZ3JvdXAtPmlucHV0OworKyAgICB9CisrCisrICByZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC1wdi5jIGIvbGlidWFyZ3AvYXJncC1wdi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjEyMjdiNQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlidWFyZ3AvYXJncC1wdi5jCitAQCAtMCwwICsxLDI1IEBACisrLyogRGVmYXVsdCBkZWZpbml0aW9uIGZvciBBUkdQX1BST0dSQU1fVkVSU0lPTi4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisrICAgV3JpdHRlbiBieSBNaWxlcyBCYWRlciA8bWlsZXMgYXQgZ251LmFpLm1pdC5lZHU+LgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysvKiBJZiBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdCBvcHRpb24KKysgICAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoIHdpbGwKKysgICBwcmludCB0aGlzIHRoaXMgc3RyaW5nIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBhbmQgZXhpdCAodW5sZXNzIHRoZQorKyAgIEFSR1BfTk9fRVhJVCBmbGFnIGlzIHVzZWQpLiAgT3ZlcnJpZGRlbiBieSBBUkdQX1BST0dSQU1fVkVSU0lPTl9IT09LLiAgKi8KKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbjsKK2RpZmYgLS1naXQgYS9saWJ1YXJncC9hcmdwLXB2aC5jIGIvbGlidWFyZ3AvYXJncC1wdmguYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFmMWQ5NjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AtcHZoLmMKK0BAIC0wLDAgKzEsMzIgQEAKKysvKiBEZWZhdWx0IGRlZmluaXRpb24gZm9yIEFSR1BfUFJPR1JBTV9WRVJTSU9OX0hPT0suCisrICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKysvKiBJZiBzZXQgYnkgdGhlIHVzZXIgcHJvZ3JhbSB0byBhIG5vbi16ZXJvIHZhbHVlLCB0aGVuIGEgZGVmYXVsdCBvcHRpb24KKysgICAtLXZlcnNpb24gaXMgYWRkZWQgKHVubGVzcyB0aGUgQVJHUF9OT19IRUxQIGZsYWcgaXMgdXNlZCksIHdoaWNoIGNhbGxzCisrICAgdGhpcyBmdW5jdGlvbiB3aXRoIGEgc3RyZWFtIHRvIHByaW50IHRoZSB2ZXJzaW9uIHRvIGFuZCBhIHBvaW50ZXIgdG8gdGhlCisrICAgY3VycmVudCBwYXJzaW5nIHN0YXRlLCBhbmQgdGhlbiBleGl0cyAodW5sZXNzIHRoZSBBUkdQX05PX0VYSVQgZmxhZyBpcworKyAgIHVzZWQpLiAgVGhpcyB2YXJpYWJsZSB0YWtlcyBwcmVjZWRlbnQgb3ZlciBBUkdQX1BST0dSQU1fVkVSU0lPTi4gICovCisrdm9pZCAoKmFyZ3BfcHJvZ3JhbV92ZXJzaW9uX2hvb2spIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSk7CitkaWZmIC0tZ2l0IGEvbGlidWFyZ3AvYXJncC14aW5sLmMgYi9saWJ1YXJncC9hcmdwLXhpbmwuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYxZDMwMDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnVhcmdwL2FyZ3AteGlubC5jCitAQCAtMCwwICsxLDM1IEBACisrLyogUmVhbCBkZWZpbml0aW9ucyBmb3IgZXh0ZXJuIGlubGluZSBmdW5jdGlvbnMgaW4gYXJncC5oCisrICAgQ29weXJpZ2h0IChDKSAxOTk3LCAxOTk4LCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkIF9MSUJDIHx8IGRlZmluZWQgSEFWRV9GRUFUVVJFU19ICisrIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgX19VU0VfRVhURVJOX0lOTElORVMKKysjIGRlZmluZSBfX1VTRV9FWFRFUk5fSU5MSU5FUyAgMQorKyNlbmRpZgorKyNkZWZpbmUgQVJHUF9FSQorKyN1bmRlZiBfX09QVElNSVpFX18KKysjZGVmaW5lIF9fT1BUSU1JWkVfXyAxCisrI2luY2x1ZGUgPGFyZ3AuaD4KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvTWFrZWZpbGUgYi90ZXN0L2FyZ3AvTWFrZWZpbGUKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42MTZmZTcxCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvTWFrZWZpbGUKK0BAIC0wLDAgKzEsNyBAQAorKyMgdUNsaWJjIGFyZ3AgdGVzdHMKKysjIExpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIHYyLjEsIHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQiBpbiB0aGlzIHRhcmJhbGwuCisrCisrdG9wX2J1aWxkZGlyPS4uLy4uLworK2luY2x1ZGUgLi4vUnVsZXMubWFrCisrLWluY2x1ZGUgTWFrZWZpbGUuaW4KKytpbmNsdWRlIC4uL1Rlc3QubWFrCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL01ha2VmaWxlLmluIGIvdGVzdC9hcmdwL01ha2VmaWxlLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDgxYjM1OQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL01ha2VmaWxlLmluCitAQCAtMCwwICsxLDEyIEBACisrIyB1Q2xpYmMgYXJncCB0ZXN0cworKyMgTGljZW5zZWQgdW5kZXIgdGhlIExHUEwgdjIuMSwgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCIGluIHRoaXMgdGFyYmFsbC4KKysKKytURVNUUyA6PSAkKGFkZHByZWZpeCBhcmdwLSwgZXgxIGV4MiBleDMgZXg0IHRlc3QpIFwKKysgICAgICAgICBidWctYXJncDEgdHN0LWFyZ3AxIHRzdC1hcmdwMgorKworK0VYVFJBX0xERkxBR1MgPSAtbHVhcmdwCisrCisrT1BUU19hcmdwLWV4MyA9IEFSRzEgQVJHMgorK09QVFNfYXJncC1leDQgPSBBUkcxIHN0cmluZzEgc3RyaW5nMiBzdHJpbmczCisrT1BUU19idWctYXJncDEgPSAtLSAtLWhlbHAKKysKK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDEuYyBiL3Rlc3QvYXJncC9hcmdwLWV4MS5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uN2JiNWYyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXgxLmMKK0BAIC0wLDAgKzEsMTUgQEAKKysvKiBBcmdwIGV4YW1wbGUgIzEgLS0gYSBtaW5pbWFsIHByb2dyYW0gdXNpbmcgYXJncCAqLworKworKy8qIFRoaXMgaXMgKHByb2JhYmx5KSB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJvZ3JhbSB0aGF0CisrICAgdXNlcyBhcmdwLiAgSXQgd29uJ3QgZG8gbXVjaCBleGNlcHQgZ2l2ZSBhbiBlcnJvcgorKyAgIG1lc3NhZ2VzIGFuZCBleGl0IHdoZW4gdGhlcmUgYXJlIGFueSBhcmd1bWVudHMsIGFuZCBwcmludAorKyAgIGEgKHJhdGhlciBwb2ludGxlc3MpIG1lc3NhZ2VzIGZvciAtLWhlbHAuICAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8YXJncC5oPgorKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgYXJncF9wYXJzZSAoMCwgYXJnYywgYXJndiwgMCwgMCwgMCk7CisrICBleGl0ICgwKTsKKyt9CitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL2FyZ3AtZXgyLmMgYi90ZXN0L2FyZ3AvYXJncC1leDIuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmM0OWZiYWMKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLWV4Mi5jCitAQCAtMCwwICsxLDQ1IEBACisrLyogQXJncCBleGFtcGxlICMyIC0tIGEgcHJldHR5IG1pbmltYWwgcHJvZ3JhbSB1c2luZyBhcmdwICovCisrCisrLyogVGhpcyBwcm9ncmFtIGRvZXNuJ3QgdXNlIGFueSBvcHRpb25zIG9yIGFyZ3VtZW50cywgYnV0IHVzZXMKKysgICBhcmdwIHRvIGJlIGNvbXBsaWFudCB3aXRoIHRoZSBHTlUgc3RhbmRhcmQgY29tbWFuZCBsaW5lCisrICAgZm9ybWF0LgorKworKyAgIEluIGFkZGl0aW9uIHRvIG1ha2luZyBzdXJlIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFuZAorKyAgIGltcGxlbWVudGluZyBhIC0taGVscCBvcHRpb24sIHRoaXMgZXhhbXBsZSB3aWxsIGhhdmUgYQorKyAgIC0tdmVyc2lvbiBvcHRpb24sIGFuZCB3aWxsIHB1dCB0aGUgZ2l2ZW4gZG9jdW1lbnRhdGlvbiBzdHJpbmcKKysgICBhbmQgYnVnIGFkZHJlc3MgaW4gdGhlIC0taGVscCBvdXRwdXQsIGFzIHBlciBHTlUgc3RhbmRhcmRzLgorKworKyAgIFRoZSB2YXJpYWJsZSBBUkdQIGNvbnRhaW5zIHRoZSBhcmd1bWVudCBwYXJzZXIgc3BlY2lmaWNhdGlvbjsKKysgICBhZGRpbmcgZmllbGRzIHRvIHRoaXMgc3RydWN0dXJlIGlzIHRoZSB3YXkgbW9zdCBwYXJhbWV0ZXJzIGFyZQorKyAgIHBhc3NlZCB0byBhcmdwX3BhcnNlICh0aGUgZmlyc3QgdGhyZWUgZmllbGRzIGFyZSB1c3VhbGx5IHVzZWQsCisrICAgYnV0IG5vdCBpbiB0aGlzIHNtYWxsIHByb2dyYW0pLiAgVGhlcmUgYXJlIGFsc28gdHdvIGdsb2JhbAorKyAgIHZhcmlhYmxlcyB0aGF0IGFyZ3Aga25vd3MgYWJvdXQgZGVmaW5lZCBoZXJlLAorKyAgIEFSR1BfUFJPR1JBTV9WRVJTSU9OIGFuZCBBUkdQX1BST0dSQU1fQlVHX0FERFJFU1MgKHRoZXkgYXJlCisrICAgZ2xvYmFsIHZhcmlhYmxlcyBiZWNhdXNlIHRoZXkgd2lsbCBhbG1vc3QgYWx3YXlzIGJlIGNvbnN0YW50CisrICAgZm9yIGEgZ2l2ZW4gcHJvZ3JhbSwgZXZlbiBpZiBpdCB1c2VzIGRpZmZlcmVudCBhcmd1bWVudAorKyAgIHBhcnNlcnMgZm9yIHZhcmlvdXMgdGFza3MpLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbiA9CisrICAiYXJncC1leDIgMS4wIjsKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MgPQorKyAgIjxidWctZ251LXV0aWxzQEBnbnUub3JnPiI7CisrCisrLyogUHJvZ3JhbSBkb2N1bWVudGF0aW9uLiAgKi8KKytzdGF0aWMgY2hhciBkb2NbXSA9CisrICAiQXJncCBleGFtcGxlICMyIC0tIGEgcHJldHR5IG1pbmltYWwgcHJvZ3JhbSB1c2luZyBhcmdwIjsKKysKKysvKiBPdXIgYXJndW1lbnQgcGFyc2VyLiAgVGhlIEBjb2Rle29wdGlvbnN9LCBAY29kZXtwYXJzZXJ9LCBhbmQKKysgICBAY29kZXthcmdzX2RvY30gZmllbGRzIGFyZSB6ZXJvIGJlY2F1c2Ugd2UgaGF2ZSBuZWl0aGVyIG9wdGlvbnMgb3IKKysgICBhcmd1bWVudHM7IEBjb2Rle2RvY30gYW5kIEBjb2Rle2FyZ3BfcHJvZ3JhbV9idWdfYWRkcmVzc30gd2lsbCBiZQorKyAgIHVzZWQgaW4gdGhlIG91dHB1dCBmb3IgQHNhbXB7LS1oZWxwfSwgYW5kIHRoZSBAc2FtcHstLXZlcnNpb259CisrICAgb3B0aW9uIHdpbGwgcHJpbnQgb3V0IEBjb2Rle2FyZ3BfcHJvZ3JhbV92ZXJzaW9ufS4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7IDAsIDAsIDAsIGRvYyB9OworKworK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsIDAsIDApOworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLWV4My5jIGIvdGVzdC9hcmdwL2FyZ3AtZXgzLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yNGQ1YzUwCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYXJncC1leDMuYworQEAgLTAsMCArMSwxNTMgQEAKKysvKiBBcmdwIGV4YW1wbGUgIzMgLS0gYSBwcm9ncmFtIHdpdGggb3B0aW9ucyBhbmQgYXJndW1lbnRzIHVzaW5nIGFyZ3AgKi8KKysKKysvKiBUaGlzIHByb2dyYW0gdXNlcyB0aGUgc2FtZSBmZWF0dXJlcyBhcyBleGFtcGxlIDIsIGFuZCB1c2VzIG9wdGlvbnMgYW5kCisrICAgYXJndW1lbnRzLgorKworKyAgIFdlIG5vdyB1c2UgdGhlIGZpcnN0IGZvdXIgZmllbGRzIGluIEFSR1AsIHNvIGhlcmUncyBhIGRlc2NyaXB0aW9uIG9mIHRoZW06CisrICAgICBPUFRJT05TICAtLSBBIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2Ygc3RydWN0IGFyZ3Bfb3B0aW9uIChzZWUgYmVsb3cpCisrICAgICBQQVJTRVIgICAtLSBBIGZ1bmN0aW9uIHRvIHBhcnNlIGEgc2luZ2xlIG9wdGlvbiwgY2FsbGVkIGJ5IGFyZ3AKKysgICAgIEFSR1NfRE9DIC0tIEEgc3RyaW5nIGRlc2NyaWJpbmcgaG93IHRoZSBub24tb3B0aW9uIGFyZ3VtZW50cyBzaG91bGQgbG9vaworKyAgICAgRE9DICAgICAgLS0gQSBkZXNjcmlwdGl2ZSBzdHJpbmcgYWJvdXQgdGhpcyBwcm9ncmFtOyBpZiBpdCBjb250YWlucyBhCisrICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCB0YWIgY2hhcmFjdGVyIChcdiksIHRoZSBwYXJ0IGFmdGVyIGl0IHdpbGwgYmUKKysgICAgICAgICAgICAgICAgIHByaW50ZWQgKmZvbGxvd2luZyogdGhlIG9wdGlvbnMKKysKKysgICBUaGUgZnVuY3Rpb24gUEFSU0VSIHRha2VzIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOgorKyAgICAgS0VZICAtLSBBbiBpbnRlZ2VyIHNwZWNpZnlpbmcgd2hpY2ggb3B0aW9uIHRoaXMgaXMgKHRha2VuCisrICAgICAgICAgICAgIGZyb20gdGhlIEtFWSBmaWVsZCBpbiBlYWNoIHN0cnVjdCBhcmdwX29wdGlvbiksIG9yCisrICAgICAgICAgICAgIGEgc3BlY2lhbCBrZXkgc3BlY2lmeWluZyBzb21ldGhpbmcgZWxzZTsgdGhlIG9ubHkKKysgICAgICAgICAgICAgc3BlY2lhbCBrZXlzIHdlIHVzZSBoZXJlIGFyZSBBUkdQX0tFWV9BUkcsIG1lYW5pbmcKKysgICAgICAgICAgICAgYSBub24tb3B0aW9uIGFyZ3VtZW50LCBhbmQgQVJHUF9LRVlfRU5ELCBtZWFuaW5nCisrICAgICAgICAgICAgIHRoYXQgYWxsIGFyZ3VtZW50cyBoYXZlIGJlZW4gcGFyc2VkCisrICAgICBBUkcgIC0tIEZvciBhbiBvcHRpb24gS0VZLCB0aGUgc3RyaW5nIHZhbHVlIG9mIGl0cworKyAgICAgICAgICAgICBhcmd1bWVudCwgb3IgTlVMTCBpZiBpdCBoYXMgbm9uZQorKyAgICAgU1RBVEUtLSBBIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgYXJncF9zdGF0ZSwgY29udGFpbmluZworKyAgICAgICAgICAgICB2YXJpb3VzIHVzZWZ1bCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyc2luZyBzdGF0ZTsgdXNlZCBoZXJlCisrICAgICAgICAgICAgIGFyZSB0aGUgSU5QVVQgZmllbGQsIHdoaWNoIHJlZmxlY3RzIHRoZSBJTlBVVCBhcmd1bWVudCB0bworKyAgICAgICAgICAgICBhcmdwX3BhcnNlLCBhbmQgdGhlIEFSR19OVU0gZmllbGQsIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgdGhlCisrICAgICAgICAgICAgIGN1cnJlbnQgbm9uLW9wdGlvbiBhcmd1bWVudCBiZWluZyBwYXJzZWQKKysgICBJdCBzaG91bGQgcmV0dXJuIGVpdGhlciAwLCBtZWFuaW5nIHN1Y2Nlc3MsIEFSR1BfRVJSX1VOS05PV04sIG1lYW5pbmcgdGhlCisrICAgZ2l2ZW4gS0VZIHdhc24ndCByZWNvZ25pemVkLCBvciBhbiBlcnJubyB2YWx1ZSBpbmRpY2F0aW5nIHNvbWUgb3RoZXIKKysgICBlcnJvci4KKysKKysgICBOb3RlIHRoYXQgaW4gdGhpcyBleGFtcGxlLCBtYWluIHVzZXMgYSBzdHJ1Y3R1cmUgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUKKysgICBwYXJzZV9vcHQgZnVuY3Rpb24sIGEgcG9pbnRlciB0byB3aGljaCBpdCBwYXNzZXMgaW4gdGhlIElOUFVUIGFyZ3VtZW50IHRvCisrICAgYXJncF9wYXJzZS4gIE9mIGNvdXJzZSwgaXQncyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBnbG9iYWwgdmFyaWFibGVzCisrICAgaW5zdGVhZCwgYnV0IHRoaXMgaXMgc29tZXdoYXQgbW9yZSBmbGV4aWJsZS4KKysKKysgICBUaGUgT1BUSU9OUyBmaWVsZCBjb250YWlucyBhIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2Ygc3RydWN0IGFyZ3Bfb3B0aW9uJ3M7CisrICAgdGhhdCBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmcgZmllbGRzIChpZiB5b3UgYXNzaWduIHlvdXIgb3B0aW9uCisrICAgc3RydWN0dXJlcyB1c2luZyBhcnJheSBpbml0aWFsaXphdGlvbiBsaWtlIHRoaXMgZXhhbXBsZSwgdW5zcGVjaWZpZWQKKysgICBmaWVsZHMgd2lsbCBiZSBkZWZhdWx0ZWQgdG8gMCwgYW5kIG5lZWQgbm90IGJlIHNwZWNpZmllZCk6CisrICAgICBOQU1FICAgLS0gVGhlIG5hbWUgb2YgdGhpcyBvcHRpb24ncyBsb25nIG9wdGlvbiAobWF5IGJlIHplcm8pCisrICAgICBLRVkgICAgLS0gVGhlIEtFWSB0byBwYXNzIHRvIHRoZSBQQVJTRVIgZnVuY3Rpb24gd2hlbiBwYXJzaW5nIHRoaXMgb3B0aW9uLAorKyAgICAgICAgICAgICAgICphbmQqIHRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uJ3Mgc2hvcnQgb3B0aW9uLCBpZiBpdCBpcyBhCisrICAgICAgICAgICAgICAgcHJpbnRhYmxlIGFzY2lpIGNoYXJhY3RlcgorKyAgICAgQVJHICAgIC0tIFRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uJ3MgYXJndW1lbnQsIGlmIGFueQorKyAgICAgRkxBR1MgIC0tIEZsYWdzIGRlc2NyaWJpbmcgdGhpcyBvcHRpb247IHNvbWUgb2YgdGhlbSBhcmU6CisrICAgICAgICAgICAgICAgICBPUFRJT05fQVJHX09QVElPTkFMIC0tIFRoZSBhcmd1bWVudCB0byB0aGlzIG9wdGlvbiBpcyBvcHRpb25hbAorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0FMSUFTICAgICAgICAtLSBUaGlzIG9wdGlvbiBpcyBhbiBhbGlhcyBmb3IgdGhlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzIG9wdGlvbgorKyAgICAgICAgICAgICAgICAgT1BUSU9OX0hJRERFTiAgICAgICAtLSBEb24ndCBzaG93IHRoaXMgb3B0aW9uIGluIC0taGVscCBvdXRwdXQKKysgICAgIERPQyAgICAtLSBBIGRvY3VtZW50YXRpb24gc3RyaW5nIGZvciB0aGlzIG9wdGlvbiwgc2hvd24gaW4gLS1oZWxwIG91dHB1dAorKworKyAgIEFuIG9wdGlvbnMgdmVjdG9yIHNob3VsZCBiZSB0ZXJtaW5hdGVkIGJ5IGFuIG9wdGlvbiB3aXRoIGFsbCBmaWVsZHMgemVyby4gKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbiA9CisrICAiYXJncC1leDMgMS4wIjsKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MgPQorKyAgIjxidWctZ251LXV0aWxzQEBnbnUub3JnPiI7CisrCisrLyogUHJvZ3JhbSBkb2N1bWVudGF0aW9uLiAgKi8KKytzdGF0aWMgY2hhciBkb2NbXSA9CisrICAiQXJncCBleGFtcGxlICMzIC0tIGEgcHJvZ3JhbSB3aXRoIG9wdGlvbnMgYW5kIGFyZ3VtZW50cyB1c2luZyBhcmdwIjsKKysKKysvKiBBIGRlc2NyaXB0aW9uIG9mIHRoZSBhcmd1bWVudHMgd2UgYWNjZXB0LiAgKi8KKytzdGF0aWMgY2hhciBhcmdzX2RvY1tdID0gIkFSRzEgQVJHMiI7CisrCisrLyogVGhlIG9wdGlvbnMgd2UgdW5kZXJzdGFuZC4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwX29wdGlvbiBvcHRpb25zW10gPSB7CisrICB7InZlcmJvc2UiLCAgJ3YnLCAwLCAgICAgIDAsICAiUHJvZHVjZSB2ZXJib3NlIG91dHB1dCIgfSwKKysgIHsicXVpZXQiLCAgICAncScsIDAsICAgICAgMCwgICJEb24ndCBwcm9kdWNlIGFueSBvdXRwdXQiIH0sCisrICB7InNpbGVudCIsICAgJ3MnLCAwLCAgICAgIE9QVElPTl9BTElBUyB9LAorKyAgeyJvdXRwdXQiLCAgICdvJywgIkZJTEUiLCAwLAorKyAgICJPdXRwdXQgdG8gRklMRSBpbnN0ZWFkIG9mIHN0YW5kYXJkIG91dHB1dCIgfSwKKysgIHsgMCB9CisrfTsKKysKKysvKiBVc2VkIGJ5IEBjb2Rle21haW59IHRvIGNvbW11bmljYXRlIHdpdGggQGNvZGV7cGFyc2Vfb3B0fS4gICovCisrc3RydWN0IGFyZ3VtZW50cworK3sKKysgIGNoYXIgKmFyZ3NbMl07ICAgICAgICAgICAgICAgLyogQHZhcnthcmcxfSAmIEB2YXJ7YXJnMn0gKi8KKysgIGludCBzaWxlbnQsIHZlcmJvc2U7CisrICBjaGFyICpvdXRwdXRfZmlsZTsKKyt9OworKworKy8qIFBhcnNlIGEgc2luZ2xlIG9wdGlvbi4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIC8qIEdldCB0aGUgQHZhcntpbnB1dH0gYXJndW1lbnQgZnJvbSBAY29kZXthcmdwX3BhcnNlfSwgd2hpY2ggd2UKKysgICAgIGtub3cgaXMgYSBwb2ludGVyIHRvIG91ciBhcmd1bWVudHMgc3RydWN0dXJlLiAgKi8KKysgIHN0cnVjdCBhcmd1bWVudHMgKmFyZ3VtZW50cyA9IHN0YXRlLT5pbnB1dDsKKysKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJ3EnOiBjYXNlICdzJzoKKysgICAgICBhcmd1bWVudHMtPnNpbGVudCA9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ3YnOgorKyAgICAgIGFyZ3VtZW50cy0+dmVyYm9zZSA9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ28nOgorKyAgICAgIGFyZ3VtZW50cy0+b3V0cHV0X2ZpbGUgPSBhcmc7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfQVJHOgorKyAgICAgIGlmIChzdGF0ZS0+YXJnX251bSA+PSAyKQorKyAgICAgICAvKiBUb28gbWFueSBhcmd1bWVudHMuICAqLworKyAgICAgICBhcmdwX3VzYWdlIChzdGF0ZSk7CisrCisrICAgICAgYXJndW1lbnRzLT5hcmdzW3N0YXRlLT5hcmdfbnVtXSA9IGFyZzsKKysKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9FTkQ6CisrICAgICAgaWYgKHN0YXRlLT5hcmdfbnVtIDwgMikKKysgICAgICAgLyogTm90IGVub3VnaCBhcmd1bWVudHMuICAqLworKyAgICAgICBhcmdwX3VzYWdlIChzdGF0ZSk7CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEFSR1BfRVJSX1VOS05PV047CisrICAgIH0KKysgIHJldHVybiAwOworK30KKysKKysvKiBPdXIgYXJncCBwYXJzZXIuICAqLworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwID0geyBvcHRpb25zLCBwYXJzZV9vcHQsIGFyZ3NfZG9jLCBkb2MgfTsKKysKKytpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysgIHN0cnVjdCBhcmd1bWVudHMgYXJndW1lbnRzOworKworKyAgLyogRGVmYXVsdCB2YWx1ZXMuICAqLworKyAgYXJndW1lbnRzLnNpbGVudCA9IDA7CisrICBhcmd1bWVudHMudmVyYm9zZSA9IDA7CisrICBhcmd1bWVudHMub3V0cHV0X2ZpbGUgPSAiLSI7CisrCisrICAvKiBQYXJzZSBvdXIgYXJndW1lbnRzOyBldmVyeSBvcHRpb24gc2VlbiBieSBAY29kZXtwYXJzZV9vcHR9IHdpbGwKKysgICAgIGJlIHJlZmxlY3RlZCBpbiBAY29kZXthcmd1bWVudHN9LiAgKi8KKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAmYXJndW1lbnRzKTsKKysKKysgIHByaW50ZiAoIkFSRzEgPSAlc1xuQVJHMiA9ICVzXG5PVVRQVVRfRklMRSA9ICVzXG4iCisrICAgICAgICAgIlZFUkJPU0UgPSAlc1xuU0lMRU5UID0gJXNcbiIsCisrICAgICAgICAgYXJndW1lbnRzLmFyZ3NbMF0sIGFyZ3VtZW50cy5hcmdzWzFdLAorKyAgICAgICAgIGFyZ3VtZW50cy5vdXRwdXRfZmlsZSwKKysgICAgICAgICBhcmd1bWVudHMudmVyYm9zZSA/ICJ5ZXMiIDogIm5vIiwKKysgICAgICAgICBhcmd1bWVudHMuc2lsZW50ID8gInllcyIgOiAibm8iKTsKKysKKysgIGV4aXQgKDApOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYXJncC1leDQuYyBiL3Rlc3QvYXJncC9hcmdwLWV4NC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzc3YzdlZgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL2FyZ3AtZXg0LmMKK0BAIC0wLDAgKzEsMTY3IEBACisrLyogQXJncCBleGFtcGxlICM0IC0tIGEgcHJvZ3JhbSB3aXRoIHNvbWV3aGF0IG1vcmUgY29tcGxpY2F0ZWQgb3B0aW9ucyAqLworKworKy8qIFRoaXMgcHJvZ3JhbSB1c2VzIHRoZSBzYW1lIGZlYXR1cmVzIGFzIGV4YW1wbGUgMywgYnV0IGhhcyBtb3JlCisrICAgb3B0aW9ucywgYW5kIHNvbWV3aGF0IG1vcmUgc3RydWN0dXJlIGluIHRoZSAtaGVscCBvdXRwdXQuICBJdAorKyAgIGFsc28gc2hvd3MgaG93IHlvdSBjYW4gYHN0ZWFsJyB0aGUgcmVtYWluZGVyIG9mIHRoZSBpbnB1dAorKyAgIGFyZ3VtZW50cyBwYXN0IGEgY2VydGFpbiBwb2ludCwgZm9yIHByb2dyYW1zIHRoYXQgYWNjZXB0IGEKKysgICBsaXN0IG9mIGl0ZW1zLiAgSXQgYWxzbyBzaG93cyB0aGUgc3BlY2lhbCBhcmdwIEtFWSB2YWx1ZQorKyAgIEFSR1BfS0VZX05PX0FSR1MsIHdoaWNoIGlzIG9ubHkgZ2l2ZW4gaWYgbm8gbm9uLW9wdGlvbgorKyAgIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIHRvIHRoZSBwcm9ncmFtLgorKworKyAgIEZvciBzdHJ1Y3R1cmluZyB0aGUgaGVscCBvdXRwdXQsIHR3byBmZWF0dXJlcyBhcmUgdXNlZCwKKysgICAqaGVhZGVycyogd2hpY2ggYXJlIGVudHJpZXMgaW4gdGhlIG9wdGlvbnMgdmVjdG9yIHdpdGggdGhlCisrICAgZmlyc3QgZm91ciBmaWVsZHMgYmVpbmcgemVybywgYW5kIGEgdHdvIHBhcnQgZG9jdW1lbnRhdGlvbgorKyAgIHN0cmluZyAoaW4gdGhlIHZhcmlhYmxlIERPQyksIHdoaWNoIGFsbG93cyBkb2N1bWVudGF0aW9uIGJvdGgKKysgICBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvcHRpb25zOyB0aGUgdHdvIHBhcnRzIG9mIERPQyBhcmUKKysgICBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbC10YWIgY2hhcmFjdGVyICgnXHYnLCBvciAnXDAxMycpLiAgQnkKKysgICBjb252ZW50aW9uLCB0aGUgZG9jdW1lbnRhdGlvbiBiZWZvcmUgdGhlIG9wdGlvbnMgaXMganVzdCBhCisrICAgc2hvcnQgc3RyaW5nIHNheWluZyB3aGF0IHRoZSBwcm9ncmFtIGRvZXMsIGFuZCB0aGF0IGFmdGVyd2FyZHMKKysgICBpcyBsb25nZXIsIGRlc2NyaWJpbmcgdGhlIGJlaGF2aW9yIGluIG1vcmUgZGV0YWlsLiAgQWxsCisrICAgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGFyZSBhdXRvbWF0aWNhbGx5IGZpbGxlZCBmb3Igb3V0cHV0LAorKyAgIGFsdGhvdWdoIG5ld2xpbmVzIG1heSBiZSBpbmNsdWRlZCB0byBmb3JjZSBhIGxpbmUgYnJlYWsgYXQgYQorKyAgIHBhcnRpY3VsYXIgcG9pbnQuICBBbGwgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGFyZSBhbHNvIHBhc3NlZCB0bworKyAgIHRoZSBgZ2V0dGV4dCcgZnVuY3Rpb24sIGZvciBwb3NzaWJsZSB0cmFuc2xhdGlvbiBpbnRvIHRoZQorKyAgIGN1cnJlbnQgbG9jYWxlLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGVycm9yLmg+CisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fdmVyc2lvbiA9CisrICAiYXJncC1leDQgMS4wIjsKKytjb25zdCBjaGFyICphcmdwX3Byb2dyYW1fYnVnX2FkZHJlc3MgPQorKyAgIjxidWctZ251LXV0aWxzQEBwcmVwLmFpLm1pdC5lZHU+IjsKKysKKysvKiBQcm9ncmFtIGRvY3VtZW50YXRpb24uICAqLworK3N0YXRpYyBjaGFyIGRvY1tdID0KKysgICJBcmdwIGV4YW1wbGUgIzQgLS0gYSBwcm9ncmFtIHdpdGggc29tZXdoYXQgbW9yZSBjb21wbGljYXRlZFwKKytvcHRpb25zXAorK1x2VGhpcyBwYXJ0IG9mIHRoZSBkb2N1bWVudGF0aW9uIGNvbWVzICphZnRlciogdGhlIG9wdGlvbnM7XAorKyBub3RlIHRoYXQgdGhlIHRleHQgaXMgYXV0b21hdGljYWxseSBmaWxsZWQsIGJ1dCBpdCdzIHBvc3NpYmxlXAorKyB0byBmb3JjZSBhIGxpbmUtYnJlYWssIGUuZy5cbjwtLSBoZXJlLiI7CisrCisrLyogQSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzIHdlIGFjY2VwdC4gICovCisrc3RhdGljIGNoYXIgYXJnc19kb2NbXSA9ICJBUkcxIFtTVFJJTkcuLi5dIjsKKysKKysvKiBLZXlzIGZvciBvcHRpb25zIHdpdGhvdXQgc2hvcnQtb3B0aW9ucy4gICovCisrI2RlZmluZSBPUFRfQUJPUlQgIDEgICAgICAgICAgIC8qIC0tYWJvcnQgKi8KKysKKysvKiBUaGUgb3B0aW9ucyB3ZSB1bmRlcnN0YW5kLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdGlvbnNbXSA9IHsKKysgIHsidmVyYm9zZSIsICAndicsIDAsICAgICAgIDAsICJQcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IiB9LAorKyAgeyJxdWlldCIsICAgICdxJywgMCwgICAgICAgMCwgIkRvbid0IHByb2R1Y2UgYW55IG91dHB1dCIgfSwKKysgIHsic2lsZW50IiwgICAncycsIDAsICAgICAgIE9QVElPTl9BTElBUyB9LAorKyAgeyJvdXRwdXQiLCAgICdvJywgIkZJTEUiLCAgMCwKKysgICAiT3V0cHV0IHRvIEZJTEUgaW5zdGVhZCBvZiBzdGFuZGFyZCBvdXRwdXQiIH0sCisrCisrICB7MCwwLDAsMCwgIlRoZSBmb2xsb3dpbmcgb3B0aW9ucyBzaG91bGQgYmUgZ3JvdXBlZCB0b2dldGhlcjoiIH0sCisrICB7InJlcGVhdCIsICAgJ3InLCAiQ09VTlQiLCBPUFRJT05fQVJHX09QVElPTkFMLAorKyAgICJSZXBlYXQgdGhlIG91dHB1dCBDT1VOVCAoZGVmYXVsdCAxMCkgdGltZXMifSwKKysgIHsiYWJvcnQiLCAgICBPUFRfQUJPUlQsIDAsIDAsICJBYm9ydCBiZWZvcmUgc2hvd2luZyBhbnkgb3V0cHV0In0sCisrCisrICB7IDAgfQorK307CisrCisrLyogVXNlZCBieSBAY29kZXttYWlufSB0byBjb21tdW5pY2F0ZSB3aXRoIEBjb2Rle3BhcnNlX29wdH0uICAqLworK3N0cnVjdCBhcmd1bWVudHMKKyt7CisrICBjaGFyICphcmcxOyAgICAgICAgICAgICAgICAgIC8qIEB2YXJ7YXJnMX0gKi8KKysgIGNoYXIgKipzdHJpbmdzOyAgICAgICAgICAgICAgLyogW0B2YXJ7c3RyaW5nfUBkb3Rze31dICovCisrICBpbnQgc2lsZW50LCB2ZXJib3NlLCBhYm9ydDsgIC8qIEBzYW1wey1zfSwgQHNhbXB7LXZ9LCBAc2FtcHstLWFib3J0fSAqLworKyAgY2hhciAqb3V0cHV0X2ZpbGU7ICAgICAgICAgICAvKiBAdmFye2ZpbGV9IGFyZyB0byBAc2FtcHstLW91dHB1dH0gKi8KKysgIGludCByZXBlYXRfY291bnQ7ICAgICAgICAgICAgLyogQHZhcntjb3VudH0gYXJnIHRvIEBzYW1wey0tcmVwZWF0fSAqLworK307CisrCisrLyogUGFyc2UgYSBzaW5nbGUgb3B0aW9uLiAgKi8KKytzdGF0aWMgZXJyb3JfdAorK3BhcnNlX29wdCAoaW50IGtleSwgY2hhciAqYXJnLCBzdHJ1Y3QgYXJncF9zdGF0ZSAqc3RhdGUpCisreworKyAgLyogR2V0IHRoZSBAY29kZXtpbnB1dH0gYXJndW1lbnQgZnJvbSBAY29kZXthcmdwX3BhcnNlfSwgd2hpY2ggd2UKKysgICAgIGtub3cgaXMgYSBwb2ludGVyIHRvIG91ciBhcmd1bWVudHMgc3RydWN0dXJlLiAgKi8KKysgIHN0cnVjdCBhcmd1bWVudHMgKmFyZ3VtZW50cyA9IHN0YXRlLT5pbnB1dDsKKysKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgJ3EnOiBjYXNlICdzJzoKKysgICAgICBhcmd1bWVudHMtPnNpbGVudCA9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ3YnOgorKyAgICAgIGFyZ3VtZW50cy0+dmVyYm9zZSA9IDE7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ28nOgorKyAgICAgIGFyZ3VtZW50cy0+b3V0cHV0X2ZpbGUgPSBhcmc7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgJ3InOgorKyAgICAgIGFyZ3VtZW50cy0+cmVwZWF0X2NvdW50ID0gYXJnID8gYXRvaSAoYXJnKSA6IDEwOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIE9QVF9BQk9SVDoKKysgICAgICBhcmd1bWVudHMtPmFib3J0ID0gMTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9OT19BUkdTOgorKyAgICAgIGFyZ3BfdXNhZ2UgKHN0YXRlKTsKKysKKysgICAgY2FzZSBBUkdQX0tFWV9BUkc6CisrICAgICAgLyogSGVyZSB3ZSBrbm93IHRoYXQgQGNvZGV7c3RhdGUtPmFyZ19udW0gPT0gMH0sIHNpbmNlIHdlCisrICAgICAgICBmb3JjZSBhcmd1bWVudCBwYXJzaW5nIHRvIGVuZCBiZWZvcmUgYW55IG1vcmUgYXJndW1lbnRzIGNhbgorKyAgICAgICAgZ2V0IGhlcmUuICAqLworKyAgICAgIGFyZ3VtZW50cy0+YXJnMSA9IGFyZzsKKysKKysgICAgICAvKiBOb3cgd2UgY29uc3VtZSBhbGwgdGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cy4KKysgICAgICAgIEBjb2Rle3N0YXRlLT5uZXh0fSBpcyB0aGUgaW5kZXggaW4gQGNvZGV7c3RhdGUtPmFyZ3Z9IG9mIHRoZQorKyAgICAgICAgbmV4dCBhcmd1bWVudCB0byBiZSBwYXJzZWQsIHdoaWNoIGlzIHRoZSBmaXJzdCBAdmFye3N0cmluZ30KKysgICAgICAgIHdlJ3JlIGludGVyZXN0ZWQgaW4sIHNvIHdlIGNhbiBqdXN0IHVzZQorKyAgICAgICAgQGNvZGV7JnN0YXRlLT5hcmd2W3N0YXRlLT5uZXh0XX0gYXMgdGhlIHZhbHVlIGZvcgorKyAgICAgICAgYXJndW1lbnRzLT5zdHJpbmdzLgorKworKyAgICAgICAgQGVtcGh7SW4gYWRkaXRpb259LCBieSBzZXR0aW5nIEBjb2Rle3N0YXRlLT5uZXh0fSB0byB0aGUgZW5kCisrICAgICAgICBvZiB0aGUgYXJndW1lbnRzLCB3ZSBjYW4gZm9yY2UgYXJncCB0byBzdG9wIHBhcnNpbmcgaGVyZSBhbmQKKysgICAgICAgIHJldHVybi4gICovCisrICAgICAgYXJndW1lbnRzLT5zdHJpbmdzID0gJnN0YXRlLT5hcmd2W3N0YXRlLT5uZXh0XTsKKysgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5hcmdjOworKworKyAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogT3VyIGFyZ3AgcGFyc2VyLiAgKi8KKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncCA9IHsgb3B0aW9ucywgcGFyc2Vfb3B0LCBhcmdzX2RvYywgZG9jIH07CisrCisraW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrICBpbnQgaSwgajsKKysgIHN0cnVjdCBhcmd1bWVudHMgYXJndW1lbnRzOworKworKyAgLyogRGVmYXVsdCB2YWx1ZXMuICAqLworKyAgYXJndW1lbnRzLnNpbGVudCA9IDA7CisrICBhcmd1bWVudHMudmVyYm9zZSA9IDA7CisrICBhcmd1bWVudHMub3V0cHV0X2ZpbGUgPSAiLSI7CisrICBhcmd1bWVudHMucmVwZWF0X2NvdW50ID0gMTsKKysgIGFyZ3VtZW50cy5hYm9ydCA9IDA7CisrCisrICAvKiBQYXJzZSBvdXIgYXJndW1lbnRzOyBldmVyeSBvcHRpb24gc2VlbiBieSBAY29kZXtwYXJzZV9vcHR9IHdpbGwgYmUKKysgICAgIHJlZmxlY3RlZCBpbiBAY29kZXthcmd1bWVudHN9LiAgKi8KKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAmYXJndW1lbnRzKTsKKysKKysgIGlmIChhcmd1bWVudHMuYWJvcnQpCisrICAgIGVycm9yICgxMCwgMCwgIkFCT1JURUQiKTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHMucmVwZWF0X2NvdW50OyBpKyspCisrICAgIHsKKysgICAgICBwcmludGYgKCJBUkcxID0gJXNcbiIsIGFyZ3VtZW50cy5hcmcxKTsKKysgICAgICBwcmludGYgKCJTVFJJTkdTID0gIik7CisrICAgICAgZm9yIChqID0gMDsgYXJndW1lbnRzLnN0cmluZ3Nbal07IGorKykKKysgICAgICAgcHJpbnRmIChqID09IDAgPyAiJXMiIDogIiwgJXMiLCBhcmd1bWVudHMuc3RyaW5nc1tqXSk7CisrICAgICAgcHJpbnRmICgiXG4iKTsKKysgICAgICBwcmludGYgKCJPVVRQVVRfRklMRSA9ICVzXG5WRVJCT1NFID0gJXNcblNJTEVOVCA9ICVzXG4iLAorKyAgICAgICAgICAgICBhcmd1bWVudHMub3V0cHV0X2ZpbGUsCisrICAgICAgICAgICAgIGFyZ3VtZW50cy52ZXJib3NlID8gInllcyIgOiAibm8iLAorKyAgICAgICAgICAgICBhcmd1bWVudHMuc2lsZW50ID8gInllcyIgOiAibm8iKTsKKysgICAgfQorKworKyAgZXhpdCAoMCk7CisrfQorZGlmZiAtLWdpdCBhL3Rlc3QvYXJncC9hcmdwLXRlc3QuYyBiL3Rlc3QvYXJncC9hcmdwLXRlc3QuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIzZDU3M2IKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3QvYXJncC9hcmdwLXRlc3QuYworQEAgLTAsMCArMSwyMDkgQEAKKysvKiBUZXN0IHByb2dyYW0gZm9yIGFyZ3AgYXJndW1lbnQgcGFyc2VyCisrICAgQ29weXJpZ2h0IChDKSAxOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIFdyaXR0ZW4gYnkgTWlsZXMgQmFkZXIgPG1pbGVzIGF0IGdudS5haS5taXQuZWR1Pi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxhcmdwLmg+CisrCisrY29uc3QgY2hhciAqYXJncF9wcm9ncmFtX3ZlcnNpb24gPSAiYXJncC10ZXN0IDEuMCI7CisrCisrc3RydWN0IGFyZ3Bfb3B0aW9uIHN1Yl9vcHRpb25zW10gPQorK3sKKysgIHsic3Vib3B0MSIsICAgICAgICdzJywgICAgIDAsICAwLCAiTmVzdGVkIG9wdGlvbiAxIn0sCisrICB7InN1Ym9wdDIiLCAgICAgICAnUycsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gMiJ9LAorKworKyAgeyAwLCAwLCAwLCAwLCAiU29tZSBtb3JlIG5lc3RlZCBvcHRpb25zOiIsIDEwfSwKKysgIHsic3Vib3B0MyIsICAgICAgICdwJywgICAgIDAsICAwLCAiTmVzdGVkIG9wdGlvbiAzIn0sCisrCisrICB7InN1Ym9wdDQiLCAgICAgICAncScsICAgICAwLCAgMCwgIk5lc3RlZCBvcHRpb24gNCIsIDF9LAorKworKyAgezB9CisrfTsKKysKKytzdGF0aWMgY29uc3QgY2hhciBzdWJfYXJnc19kb2NbXSA9ICJTVFJJTkcuLi5cbi0iOworK3N0YXRpYyBjb25zdCBjaGFyIHN1Yl9kb2NbXSA9ICJcdlRoaXMgaXMgdGhlIGRvYyBzdHJpbmcgZnJvbSB0aGUgc3ViLWFyZy1wYXJzZXIuIjsKKysKKytzdGF0aWMgZXJyb3JfdAorK3N1Yl9wYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHN3aXRjaCAoa2V5KQorKyAgICB7CisrICAgIGNhc2UgQVJHUF9LRVlfTk9fQVJHUzoKKysgICAgICBwcmludGYgKCJOTyBTVUIgQVJHU1xuIik7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgQVJHUF9LRVlfQVJHOgorKyAgICAgIHByaW50ZiAoIlNVQiBBUkc6ICVzXG4iLCBhcmcpOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICdzJyA6IGNhc2UgJ1MnOiBjYXNlICdwJzogY2FzZSAncSc6CisrICAgICAgcHJpbnRmICgiU1VCIEtFWSAlY1xuIiwga2V5KTsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjaGFyICoKKytzdWJfaGVscF9maWx0ZXIgKGludCBrZXksIGNvbnN0IGNoYXIgKnRleHQsIHZvaWQgKmlucHV0KQorK3sKKysgIGlmIChrZXkgPT0gQVJHUF9LRVlfSEVMUF9FWFRSQSkKKysgICAgcmV0dXJuIHN0cmR1cCAoIlRoaXMgaXMgc29tZSBleHRyYSB0ZXh0IGZyb20gdGhlIHN1YiBwYXJzZXIgKG5vdGUgdGhhdCBpdCBcCisraXMgcHJlY2VkZWQgYnkgYSBibGFuayBsaW5lKS4iKTsKKysgIGVsc2UKKysgICAgcmV0dXJuIChjaGFyICopdGV4dDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIHN1Yl9hcmdwID0geworKyAgc3ViX29wdGlvbnMsIHN1Yl9wYXJzZV9vcHQsIHN1Yl9hcmdzX2RvYywgc3ViX2RvYywgMCwgc3ViX2hlbHBfZmlsdGVyCisrfTsKKysKKysvKiBTdHJ1Y3R1cmUgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBwYXJzaW5nIGZ1bmN0aW9ucy4gICovCisrc3RydWN0IHBhcmFtcworK3sKKysgIHVuc2lnbmVkIGZvb25seTsgICAgICAgICAgICAgLyogVmFsdWUgcGFyc2VkIGZvciBmb29ubHkuICAqLworKyAgdW5zaWduZWQgZm9vbmx5X2RlZmF1bHQ7ICAgICAvKiBEZWZhdWx0IHZhbHVlIGZvciBpdC4gICovCisrfTsKKysKKysjZGVmaW5lIE9QVF9QR1JQIDEKKysjZGVmaW5lIE9QVF9TRVNTIDIKKysKKytzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0KKyt7CisrICB7InBpZCIsICAgICAgICdwJywgICAgICJQSUQiLCAwLCAiTGlzdCB0aGUgcHJvY2VzcyBQSUQifSwKKysgIHsicGdycCIsICAgICAgT1BUX1BHUlAsIlBHUlAiLDAsICJMaXN0IHByb2Nlc3NlcyBpbiB0aGUgcHJvY2VzcyBncm91cCBQR1JQIn0sCisrICB7Im5vLXBhcmVudCIsICdQJywgICAgMCwgICAgIDAsICJJbmNsdWRlIHByb2Nlc3NlcyB3aXRob3V0IHBhcmVudHMifSwKKysgIHswLCAgICAgICAgICAgJ3gnLCAgICAgMCwgICAgIE9QVElPTl9BTElBU30sCisrICB7ImFsbC1maWVsZHMiLCdRJywgICAgIDAsICAgICAwLCAiRG9uJ3QgZWxpZGUgdW51c2FibGUgZmllbGRzIChub3JtYWxseSIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZiB0aGVyZSdzIHNvbWUgcmVhc29uIHBzIGNhbid0IgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHByaW50IGEgZmllbGQgZm9yIGFueSBwcm9jZXNzLCBpdCdzIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlbW92ZWQgZnJvbSB0aGUgb3V0cHV0IGVudGlyZWx5KSIgfSwKKysgIHsicmV2ZXJzZSIsICAgJ3InLCAgICAwLCAgICAgIDAsICJSZXZlcnNlIHRoZSBvcmRlciBvZiBhbnkgc29ydCJ9LAorKyAgeyJncmF0dWl0b3VzbHktbG9uZy1yZXZlcnNlLW9wdGlvbiIsIDAsIDAsIE9QVElPTl9BTElBU30sCisrICB7InNlc3Npb24iLCAgT1BUX1NFU1MsIlNJRCIsICBPUFRJT05fQVJHX09QVElPTkFMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWRkIHRoZSBwcm9jZXNzZXMgZnJvbSB0aGUgc2Vzc2lvbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBTSUQgKHdoaWNoIGRlZmF1bHRzIHRvIHRoZSBzaWQgb2YiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdGhlIGN1cnJlbnQgcHJvY2VzcykiIH0sCisrCisrICB7MCwwLDAsMCwgIkhlcmUgYXJlIHNvbWUgbW9yZSBvcHRpb25zOiJ9LAorKyAgeyJmb29ubHkiLCAnZicsICJaT1QiLCBPUFRJT05fQVJHX09QVElPTkFMLCAiR2xvcmsgYSBmb29ubHkifSwKKysgIHsiemF6YSIsICd6JywgMCwgMCwgIlNuaXQgYSB6YXIifSwKKysKKysgIHswfQorK307CisrCisrc3RhdGljIGNvbnN0IGNoYXIgYXJnc19kb2NbXSA9ICJTVFJJTkciOworK3N0YXRpYyBjb25zdCBjaGFyIGRvY1tdID0gIlRlc3QgcHJvZ3JhbSBmb3IgYXJncC4iCisrICJcdlRoaXMgZG9jIHN0cmluZyBjb21lcyBhZnRlciB0aGUgb3B0aW9ucy4iCisrICJcbkhleSEgIFNvbWUgbWFudWFsIGZvcm1hdHRpbmchIgorKyAiXG5UaGUgY3VycmVudCB0aW1lIGlzOiAlcyI7CisrCisrc3RhdGljIHZvaWQKKytwb3B0IChpbnQga2V5LCBjaGFyICphcmcpCisreworKyAgY2hhciBidWZbMTBdOworKyAgaWYgKGlzcHJpbnQgKGtleSkpCisrICAgIHNwcmludGYgKGJ1ZiwgIiVjIiwga2V5KTsKKysgIGVsc2UKKysgICAgc3ByaW50ZiAoYnVmLCAiJWQiLCBrZXkpOworKyAgaWYgKGFyZykKKysgICAgcHJpbnRmICgiS0VZICVzOiAlc1xuIiwgYnVmLCBhcmcpOworKyAgZWxzZQorKyAgICBwcmludGYgKCJLRVkgJXNcbiIsIGJ1Zik7CisrfQorKworK3N0YXRpYyBlcnJvcl90CisrcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSkKKyt7CisrICBzdHJ1Y3QgcGFyYW1zICpwYXJhbXMgPSBzdGF0ZS0+aW5wdXQ7CisrCisrICBzd2l0Y2ggKGtleSkKKysgICAgeworKyAgICBjYXNlIEFSR1BfS0VZX05PX0FSR1M6CisrICAgICAgcHJpbnRmICgiTk8gQVJHU1xuIik7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgQVJHUF9LRVlfQVJHOgorKyAgICAgIGlmIChzdGF0ZS0+YXJnX251bSA+IDApCisrICAgICAgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOyAvKiBMZWF2ZSBpdCBmb3IgdGhlIHN1Yi1hcmcgcGFyc2VyLiAgKi8KKysgICAgICBwcmludGYgKCJBUkc6ICVzXG4iLCBhcmcpOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICdmJzoKKysgICAgICBpZiAoYXJnKQorKyAgICAgICBwYXJhbXMtPmZvb25seSA9IGF0b2kgKGFyZyk7CisrICAgICAgZWxzZQorKyAgICAgICBwYXJhbXMtPmZvb25seSA9IHBhcmFtcy0+Zm9vbmx5X2RlZmF1bHQ7CisrICAgICAgcG9wdCAoa2V5LCBhcmcpOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlICdwJzogY2FzZSAnUCc6IGNhc2UgT1BUX1BHUlA6IGNhc2UgJ3gnOiBjYXNlICdRJzoKKysgICAgY2FzZSAncic6IGNhc2UgT1BUX1NFU1M6IGNhc2UgJ3onOgorKyAgICAgIHBvcHQgKGtleSwgYXJnKTsKKysgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gQVJHUF9FUlJfVU5LTk9XTjsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjaGFyICoKKytoZWxwX2ZpbHRlciAoaW50IGtleSwgY29uc3QgY2hhciAqdGV4dCwgdm9pZCAqaW5wdXQpCisreworKyAgY2hhciAqbmV3X3RleHQ7CisrICBzdHJ1Y3QgcGFyYW1zICpwYXJhbXMgPSBpbnB1dDsKKysKKysgIGlmIChrZXkgPT0gQVJHUF9LRVlfSEVMUF9QT1NUX0RPQyAmJiB0ZXh0KQorKyAgICB7CisrICAgICAgdGltZV90IG5vdyA9IHRpbWUgKDApOworKyAgICAgIGFzcHJpbnRmICgmbmV3X3RleHQsIHRleHQsIGN0aW1lICgmbm93KSk7CisrICAgIH0KKysgIGVsc2UgaWYgKGtleSA9PSAnZicpCisrICAgIC8qIFNob3cgdGhlIGRlZmF1bHQgZm9yIHRoZSAtLWZvb25seSBvcHRpb24uICAqLworKyAgICBhc3ByaW50ZiAoJm5ld190ZXh0LCAiJXMgKFpPVCBkZWZhdWx0cyB0byAleCkiLAorKyAgICAgICAgICAgICB0ZXh0LCBwYXJhbXMtPmZvb25seV9kZWZhdWx0KTsKKysgIGVsc2UKKysgICAgbmV3X3RleHQgPSAoY2hhciAqKXRleHQ7CisrCisrICByZXR1cm4gbmV3X3RleHQ7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgYXJncF9jaGlsZCBhcmdwX2NoaWxkcmVuW10gPSB7IHsgJnN1Yl9hcmdwIH0sIHsgMCB9IH07Cisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPSB7CisrICBvcHRpb25zLCBwYXJzZV9vcHQsIGFyZ3NfZG9jLCBkb2MsIGFyZ3BfY2hpbGRyZW4sIGhlbHBfZmlsdGVyCisrfTsKKysKKytpbnQKKyttYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKyAgc3RydWN0IHBhcmFtcyBwYXJhbXM7CisrICBwYXJhbXMuZm9vbmx5ID0gMDsKKysgIHBhcmFtcy5mb29ubHlfZGVmYXVsdCA9IHJhbmRvbSAoKTsKKysgIGFyZ3BfcGFyc2UgKCZhcmdwLCBhcmdjLCBhcmd2LCAwLCAwLCAmcGFyYW1zKTsKKysgIHByaW50ZiAoIkFmdGVyIHBhcnNpbmc6IGZvb25seSA9ICV4XG4iLCBwYXJhbXMuZm9vbmx5KTsKKysgIHJldHVybiAwOworK30KK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMgYi90ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hMjhjZjRiCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvYnVnLWFyZ3AxLmMKK0BAIC0wLDAgKzEsMjYgQEAKKysjaW5jbHVkZSA8YXJncC5oPgorKworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gdGVzdF9vcHRpb25zW10gPQorK3sKKysgIHsgTlVMTCwgJ2EnLCBOVUxMLCBPUFRJT05fRE9DLCBOVUxMIH0sCisrICB7IE5VTEwsICdiJywgTlVMTCwgT1BUSU9OX0RPQywgTlVMTCB9LAorKyAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKyt9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCB0ZXN0X2FyZ3AgPQorK3sKKysgIHRlc3Rfb3B0aW9ucworK307CisrCisrCisrc3RhdGljIGludAorK2RvX3Rlc3QgKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgaW50IGk7CisrICBhcmdwX3BhcnNlICgmdGVzdF9hcmdwLCBhcmdjLCBhcmd2LCAwLCAmaSwgTlVMTCk7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2RlZmluZSBURVNUX0ZVTkNUSU9OIGRvX3Rlc3QgKGFyZ2MsIGFyZ3YpCisrI2luY2x1ZGUgIi4uL3Rlc3Qtc2tlbGV0b24uYyIKK2RpZmYgLS1naXQgYS90ZXN0L2FyZ3AvdHN0LWFyZ3AxLmMgYi90ZXN0L2FyZ3AvdHN0LWFyZ3AxLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44MjdkYWNhCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0L2FyZ3AvdHN0LWFyZ3AxLmMKK0BAIC0wLDAgKzEsMTE4IEBACisrLyogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorKyAgIENvbnRyaWJ1dGVkIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyIGF0IHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyAgIDAyMTExLTEzMDcgVVNBLiAgKi8KKysKKysjaW5jbHVkZSA8YXJncC5oPgorKworKworKworKworKyNkZWZpbmUgT1BUX1RPX1RIUkVBRCAgICAgICAgICAzMDAKKysjZGVmaW5lIE9QVF9UT19QUk9DRVNTICAgICAgICAgMzAxCisrI2RlZmluZSBPUFRfU1lOQ19TSUdOQUwgICAgICAgICAgICAgICAgMzAyCisrI2RlZmluZSBPUFRfU1lOQ19KT0lOICAgICAgICAgIDMwMworKyNkZWZpbmUgT1BUX1RPUExFVkVMICAgICAgICAgICAzMDQKKysKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIHRlc3Rfb3B0aW9uc1tdID0KKysgIHsKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK1RoaXMgaXMgYSB0ZXN0IGZvciB0aHJlYWRzIHNvIHdlIGFsbG93IHRoZXIgdXNlciB0byBzZWxlY3Rpb24gdGhlIG51bWJlciBvZiBcCisrdGhyZWFkcyB3aGljaCBhcmUgdXNlZCBhdCBhbnkgb25lIHRpbWUuICBJbmRlcGVuZGVudGx5IHRoZSB0b3RhbCBudW1iZXIgb2YgXAorK3JvdW5kcyBjYW4gYmUgc2VsZWN0ZWQuICBUaGlzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGhyZWFkcyB3aGljaCB3aWxsIGhhdmUgXAorK3J1biB3aGVuIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXM6IiB9LAorKyAgICB7ICJ0aHJlYWRzIiwgJ3QnLCAiTlVNQkVSIiwgMCwgIk51bWJlciBvZiB0aHJlYWRzIHVzZWQgYXQgb25jZSIgfSwKKysgICAgeyAic3RhcnRzIiwgJ3MnLCAiTlVNQkVSIiwgMCwgIlRvdGFsIG51bWJlciBvZiB3b3JraW5nIHRocmVhZHMiIH0sCisrICAgIHsgInRvcGxldmVsIiwgT1BUX1RPUExFVkVMLCAiTlVNQkVSIiwgMCwKKysgICAgICAiTnVtYmVyIG9mIHRvcGxldmVsIHRocmVhZHMgd2hpY2ggc3RhcnQgdGhlIG90aGVyIHRocmVhZHM7IHRoaXMgXAorK2ltcGxpZXMgLS1zeW5jLWpvaW4iIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlwKKytFYWNoIHRocmVhZCBjYW4gZG8gb25lIG9mIHR3byB0aGluZ3M6IHNsZWVwIG9yIGRvIHdvcmsuICBUaGUgbGF0dGVyIGlzIDEwMCUgXAorK0NQVSBib3VuZC4gIFRoZSB3b3JrIGxvYWQgaXMgdGhlIHByb2JhYmlsaXR5IGEgdGhyZWFkIGRvZXMgd29yay4gIEFsbCB2YWx1ZXMgXAorK2Zyb20gemVybyB0byAxMDAgKGluY2x1c2l2ZSkgYXJlIHZhbGlkLiAgSG93IG9mdGVuIGVhY2ggdGhyZWFkIHJlcGVhdHMgdGhpcyBcCisrY2FuIGJlIGRldGVybWluZWQgYnkgdGhlIG51bWJlciBvZiByb3VuZHMuICBUaGUgd29yayBjb3N0IGRldGVybWluZXMgaG93IGxvbmcgXAorK2VhY2ggd29yayBzZXNzaW9uIChub3Qgc2xlZXBpbmcpIHRha2VzLiAgSWYgaXQgaXMgemVybyBhIHRocmVhZCB3b3VsZCBcCisrZWZmZWN0aXZlbHkgbm90aGluZy4gIEJ5IHNldHRpbmcgdGhlIG51bWJlciBvZiByb3VuZHMgdG8gemVybyB0aGUgdGhyZWFkIFwKKytkb2VzIG5vIHdvcmsgYXQgYWxsIGFuZCBwdXJlIHRocmVhZCBjcmVhdGlvbiB0aW1lcyBjYW4gYmUgbWVhc3VyZWQuIiB9LAorKyAgICB7ICJ3b3JrbG9hZCIsICd3JywgIlBFUkNFTlQiLCAwLCAiUGVyY2VudGFnZSBvZiB0aW1lIHNwZW50IHdvcmtpbmciIH0sCisrICAgIHsgIndvcmtjb3N0IiwgJ2MnLCAiTlVNQkVSIiwgMCwKKysgICAgICAiRmFjdG9yIGluIHRoZSBjb3N0IG9mIGVhY2ggcm91bmQgb2Ygd29ya2luZyIgfSwKKysgICAgeyAicm91bmRzIiwgJ3InLCAiTlVNQkVSIiwgMCwgIk51bWJlciBvZiByb3VuZHMgZWFjaCB0aHJlYWQgcnVucyIgfSwKKysKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCAiXAorK1RoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgbWV0aG9kcyBob3cgdGhyZWFkIGNyZWF0aW9uIGNhbiBiZSBcCisrc3luY2hyb25pemVkLiAgU3luY2hyb25pemF0aW9uIGlzIG5lY2Vzc2FyeSBzaW5jZSB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnRseSBcCisrcnVubmluZyB0aHJlYWRzIGlzIGxpbWl0ZWQuIiB9LAorKyAgICB7ICJzeW5jLXNpZ25hbCIsIE9QVF9TWU5DX1NJR05BTCwgTlVMTCwgMCwKKysgICAgICAiU3luY2hyb25pemUgdXNpbmcgYSBzaWduYWwgKGRlZmF1bHQpIiB9LAorKyAgICB7ICJzeW5jLWpvaW4iLCBPUFRfU1lOQ19KT0lOLCBOVUxMLCAwLCAiU3luY2hyb25pemUgdXNpbmcgcHRocmVhZF9qb2luIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJcCisrT25lIHBhcmFtZXRlciBmb3IgZWFjaCB0aHJlYWRzIGV4ZWN1dGlvbiBpcyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2suICBJZiB0aGlzIFwKKytwYXJhbWV0ZXIgaXMgbm90IHVzZWQgdGhlIHN5c3RlbSdzIGRlZmF1bHQgc3RhY2sgc2l6ZSBpcyB1c2VkLiAgSWYgbWFueSBcCisrdGhyZWFkcyBhcmUgdXNlZCB0aGUgc3RhY2sgc2l6ZSBzaG91bGQgYmUgY2hvc2VuIHF1aXRlIHNtYWxsLiIgfSwKKysgICAgeyAic3RhY2tzaXplIiwgJ1MnLCAiQllURVMiLCAwLCAiU2l6ZSBvZiB0aHJlYWRzIHN0YWNrIiB9LAorKyAgICB7ICJndWFyZHNpemUiLCAnZycsICJCWVRFUyIsIDAsCisrICAgICAgIlNpemUgb2Ygc3RhY2sgZ3VhcmQgYXJlYTsgbXVzdCBmaXQgaW50byB0aGUgc3RhY2siIH0sCisrCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgIlNpZ25hbCBvcHRpb25zOiIgfSwKKysgICAgeyAidG8tdGhyZWFkIiwgT1BUX1RPX1RIUkVBRCwgTlVMTCwgMCwgIlNlbmQgc2lnbmFsIHRvIG1haW4gdGhyZWFkIiB9LAorKyAgICB7ICJ0by1wcm9jZXNzIiwgT1BUX1RPX1BST0NFU1MsIE5VTEwsIDAsCisrICAgICAgIlNlbmQgc2lnbmFsIHRvIHByb2Nlc3MgKGRlZmF1bHQpIiB9LAorKworKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsICJBZG1pbmlzdHJhdGl2ZSBvcHRpb25zOiIgfSwKKysgICAgeyAicHJvZ3Jlc3MiLCAncCcsIE5VTEwsIDAsICJTaG93IHNpZ25zIG9mIHByb2dyZXNzIiB9LAorKyAgICB7ICJ0aW1pbmciLCAnVCcsIE5VTEwsIDAsCisrICAgICAgIk1lYXN1cmUgdGltZSBmcm9tIHN0YXJ0dXAgdG8gdGhlIGxhc3QgdGhyZWFkIGZpbmlzaGluZyIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrLyogUHJvdG90eXBlIGZvciBvcHRpb24gaGFuZGxlci4gICovCisrc3RhdGljIGVycm9yX3QgcGFyc2Vfb3B0IChpbnQga2V5LCBjaGFyICphcmcsIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSk7CisrCisrLyogRGF0YSBzdHJ1Y3R1cmUgdG8gY29tbXVuaWNhdGUgd2l0aCBhcmdwIGZ1bmN0aW9ucy4gICovCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3AgPQorK3sKKysgIHRlc3Rfb3B0aW9ucywgcGFyc2Vfb3B0CisrfTsKKysKKysKKytzdGF0aWMgaW50CisrZG9fdGVzdCAodm9pZCkKKyt7CisrICBpbnQgYXJnYyA9IDI7CisrICBjaGFyICphcmd2WzNdID0geyAoY2hhciAqKSAidHN0LWFyZ3AxIiwgKGNoYXIgKikgIi0taGVscCIsIE5VTEwgfTsKKysgIGludCByZW1haW5pbmc7CisrCisrICAvKiBQYXJzZSBhbmQgcHJvY2VzcyBhcmd1bWVudHMuICAqLworKyAgYXJncF9wYXJzZSAoJmFyZ3AsIGFyZ2MsIGFyZ3YsIDAsICZyZW1haW5pbmcsIE5VTEwpOworKworKyAgcmV0dXJuIDA7CisrfQorKworKworKy8qIEhhbmRsZSBwcm9ncmFtIGFyZ3VtZW50cy4gICovCisrc3RhdGljIGVycm9yX3QKKytwYXJzZV9vcHQgKGludCBrZXksIGNoYXIgKmFyZywgc3RydWN0IGFyZ3Bfc3RhdGUgKnN0YXRlKQorK3sKKysgIHJldHVybiBBUkdQX0VSUl9VTktOT1dOOworK30KKysKKysjZGVmaW5lIFRFU1RfRlVOQ1RJT04gZG9fdGVzdCAoKQorKyNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCitkaWZmIC0tZ2l0IGEvdGVzdC9hcmdwL3RzdC1hcmdwMi5jIGIvdGVzdC9hcmdwL3RzdC1hcmdwMi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzA1Y2RjYQorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdC9hcmdwL3RzdC1hcmdwMi5jCitAQCAtMCwwICsxLDEwMSBAQAorKy8qIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKysgICBDb250cmlidXRlZCBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YiBhdCByZWRoYXQuY29tPiwgMjAwNy4KKysKKysgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisrICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKysgICAwMjExMS0xMzA3IFVTQS4gICovCisrCisrI2luY2x1ZGUgPGFyZ3AuaD4KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDFbXSA9CisrICB7CisrICAgIHsgIm9wdDEiLCAnMScsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDEiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0MltdID0KKysgIHsKKysgICAgeyAib3B0MiIsICcyJywgIk5VTUJFUiIsIDAsICJPcHRpb24gMiIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCBhcmdwX29wdGlvbiBvcHQzW10gPQorKyAgeworKyAgICB7ICJvcHQzIiwgJzMnLCAiTlVNQkVSIiwgMCwgIk9wdGlvbiAzIiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwgfQorKyAgfTsKKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGFyZ3Bfb3B0aW9uIG9wdDRbXSA9CisrICB7CisrICAgIHsgIm9wdDQiLCAnNCcsICJOVU1CRVIiLCAwLCAiT3B0aW9uIDQiIH0sCisrICAgIHsgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCB9CisrICB9OworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0NVtdID0KKysgIHsKKysgICAgeyAib3B0NSIsICc1JywgIk5VTUJFUiIsIDAsICJPcHRpb24gNSIgfSwKKysgICAgeyBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMIH0KKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwIGFyZ3A1ID0KKysgIHsKKysgICAgb3B0NSwgTlVMTCwgImFyZ3MgZG9jNSIsICJkb2M1IiwgTlVMTCwgTlVMTCwgTlVMTAorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDQgPQorKyAgeworKyAgICBvcHQ0LCBOVUxMLCAiYXJncyBkb2M0IiwgImRvYzQiLCBOVUxMLCBOVUxMLCBOVUxMCisrICB9OworKworK3N0YXRpYyBzdHJ1Y3QgYXJncCBhcmdwMyA9CisrICB7CisrICAgIG9wdDMsIE5VTEwsICJhcmdzIGRvYzMiLCAiZG9jMyIsIE5VTEwsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwX2NoaWxkIGNoaWxkcmVuMltdID0KKysgIHsKKysgICAgeyAmYXJncDQsIDAsICJjaGlsZDMiLCAzIH0sCisrICAgIHsgJmFyZ3A1LCAwLCAiY2hpbGQ0IiwgNCB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDIgPQorKyAgeworKyAgICBvcHQyLCBOVUxMLCAiYXJncyBkb2MyIiwgImRvYzIiLCBjaGlsZHJlbjIsIE5VTEwsIE5VTEwKKysgIH07CisrCisrc3RhdGljIHN0cnVjdCBhcmdwX2NoaWxkIGNoaWxkcmVuMVtdID0KKysgIHsKKysgICAgeyAmYXJncDIsIDAsICJjaGlsZDEiLCAxIH0sCisrICAgIHsgJmFyZ3AzLCAwLCAiY2hpbGQyIiwgMiB9LAorKyAgICB7IE5VTEwsIDAsIE5VTEwsIDAgfQorKyAgfTsKKysKKytzdGF0aWMgc3RydWN0IGFyZ3AgYXJncDEgPQorKyAgeworKyAgICBvcHQxLCBOVUxMLCAiYXJncyBkb2MxIiwgImRvYzEiLCBjaGlsZHJlbjEsIE5VTEwsIE5VTEwKKysgIH07CisrCisrCisrc3RhdGljIGludAorK2RvX3Rlc3QgKHZvaWQpCisreworKyAgYXJncF9oZWxwICgmYXJncDEsIHN0ZG91dCwgQVJHUF9IRUxQX0xPTkcsIChjaGFyICopICJ0c3QtYXJncDIiKTsKKysgIHJldHVybiAwOworK30KKysKKysKKysjZGVmaW5lIFRFU1RfRlVOQ1RJT04gZG9fdGVzdCAoKQorKyNpbmNsdWRlICIuLi90ZXN0LXNrZWxldG9uLmMiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDQtRG9udC1zdXBwb3J0LWxvY2FsaXNlZC1vcHRpbWl6YXRpb25zLXRoaXMtaGVscHMtdG8taC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjllMTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNC1Eb250LXN1cHBvcnQtbG9jYWxpc2VkLW9wdGltaXphdGlvbnMtdGhpcy1oZWxwcy10by1oLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gMzE3ODVjNTQ0YWJlOGIyMTVkYmIyMjY0ZmIxMWVlNzA1MTUxNTc5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDE2IEF1ZyAyMDE1IDIwOjU4OjU5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggNC83XSBEb250IHN1cHBvcnQgbG9jYWxpc2VkIG9wdGltaXphdGlvbnMgdGhpcyBoZWxwcyB0byBoYXZlIGEKKyBnbG9iYWwgLU8gbGV2ZWwKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvcHRocmVhZF9tdXRleF90aW1lZGxvY2suYyBiL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jCitpbmRleCAwNDE4N2Y2Li5mNTZmNmM1IDEwMDY0NAorLS0tIGEvbGlicHRocmVhZC9ucHRsL3B0aHJlYWRfbXV0ZXhfdGltZWRsb2NrLmMKKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9wdGhyZWFkX211dGV4X3RpbWVkbG9jay5jCitAQCAtMjgsNyArMjgsOSBAQAorICAqIGVycm9yOiBjYW4ndCBmaW5kIGEgcmVnaXN0ZXIgaW4gY2xhc3Mg4oCYR0VORVJBTF9SRUdT4oCZIHdoaWxlIHJlbG9hZGluZyDigJhhc23igJkKKyAgKi8KKyBpbnQKKysjaWZuZGVmICBfX09QVElNSVpFX18KKyBhdHRyaWJ1dGVfb3B0aW1pemUoIk9zIikKKysjZW5kaWYKKyBwdGhyZWFkX211dGV4X3RpbWVkbG9jayAoCisgICAgICBwdGhyZWFkX211dGV4X3QgKm11dGV4LAorICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnN0aW1lKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA1LUFsd2F5cy11c2UtTzItZm9yLWNvbXBpbGluZy1mb3JrLmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ5YjI0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDUtQWx3YXlzLXVzZS1PMi1mb3ItY29tcGlsaW5nLWZvcmsuYy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDg4M2RlYmMyMmUzMGE5NDdmZTU4NThjYzA3ZWU1YWViZDNkMDdhMmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAyMDo1OTo1NiAtMDcwMAorU3ViamVjdDogW1BBVENIIDUvN10gQWx3YXlzIHVzZSAtTzIgZm9yIGNvbXBpbGluZyBmb3JrLmMKKworV2hlbiBjb21waWxpbmcgaW4gdGh1bWIgbW9kZSBmb3IgYXJtIHdpdGggLU9zIGdjYyBnaXZlcyB1cCBzaW5jZSBpdCBjYW4KK25vdCBmaW5kIHJlZ2lzdGVycyB0byBzcGlsbC4gU28gd2UgdXNlIC1PMiBvcHRpb24gZm9yIGNvbXBpbGluZyBmb3JrLmMKK0l0IG1heSBiZSBhZGRyZXNzYWJsZSBpbiBnY2MuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGlicHRocmVhZC9ucHRsL3N5c2RlcHMvdW5peC9zeXN2L2xpbnV4L2FybS9NYWtlZmlsZS5hcmNoIHwgNiArKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2ggYi9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2gKK2luZGV4IDBlYTBiMjkuLjA3NjdlOWMgMTAwNjQ0CistLS0gYS9saWJwdGhyZWFkL25wdGwvc3lzZGVwcy91bml4L3N5c3YvbGludXgvYXJtL01ha2VmaWxlLmFyY2gKKysrKyBiL2xpYnB0aHJlYWQvbnB0bC9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9hcm0vTWFrZWZpbGUuYXJjaAorQEAgLTIxLDMgKzIxLDkgQEAgQVNGTEFHUy1wdC12Zm9yay5TID0gLW1hcm0KKyBDRkxBR1MtT01JVC1wdC12Zm9yay5TID0gLW10aHVtYgorIEFTRkxBR1MtdmZvcmsuUyA9IC1tYXJtCisgQ0ZMQUdTLU9NSVQtdmZvcmsuUyA9IC1tdGh1bWIKKysKKysjIEZvciBhcm0gZm9yay5jIGRvZXMgbm90IGNvbXBpbGUgd2l0aCAtT3Mgd2hlbiBjb21waWxpbmcKKysjIGluIHRodW1iMSBtb2RlCisraWZlcSAoJChDT01QSUxFX0lOX1RIVU1CX01PREUpLHkpCisrQ0ZMQUdTLWZvcmsuYyA9IC1PMgorK2VuZGlmCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0LzAwMDYtbGRzby1saW1pdGVkLXN1cHBvcnQtZm9yLU9SSUdJTi1pbi1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQ4NzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNi1sZHNvLWxpbWl0ZWQtc3VwcG9ydC1mb3ItT1JJR0lOLWluLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjMzIEBACitGcm9tIGI0MGMxMjllZDJkNTNiNjk0NjM4ODNhNTQyMmRkNGEwMTJhMzk4ZjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK0RhdGU6IEZyaSwgMyBBcHIgMjAxNSAwNTowMjoyNyArMDAwMAorU3ViamVjdDogW1BBVENIIDYvN10gbGRzbzogbGltaXRlZCBzdXBwb3J0IGZvciAkT1JJR0lOIGluIHJwYXRoCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0Rlcml2ZWQgZnJvbToKK2h0dHA6Ly9saXN0cy5idXN5Ym94Lm5ldC9waXBlcm1haWwvdWNsaWJjLzIwMTEtTWFyY2gvMDQ1MDAzLmh0bWwKKworSG93ZXZlciwgdGhlIGFib3ZlIHBhdGNoIGludHJvZHVjZWQgJ19kbF9zdHJjaHInIGluIGxkc28vbGRzby9kbC1lbGYuYywKK2FuZCBjYXVzZWQgdGhlIGZvbGxvd2luZyB1bmRlZmluZWQgcmVmZXJlbmNpbmcgY29tcGlsaW5nIGVycm9yOgorCisgIHwgLi4uL2xpYmRsLmEobGliZGwub3MpOiBJbiBmdW5jdGlvbiBgc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5JzoKKyAgfCAuLi4vZGwtZWxmLmM6MTU2OiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfZGxfc3RyY2hyJworICB8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitUaGlzIHByb2JsZW0gd291bGQgYmUgcmVwcm9kdWNlZCB0aHJvdWdoIGNvbXBpbGluZyBnZGIgaW4gc3RhdGljIG1vZGUKK3VzaW5nIHVjbGliYy4KKworU28sIGFkZCB0aGUgZGVmaW5pdGlvbiBvZiAnX2RsX3N0cmNocicgdG8gZml4IGl0LiBUaGUgJ19kbF9zdHJzdHInIGlzCithZGRlZCBhcyB3ZWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBUaW1vIFRlcsOkcyA8dGltby50ZXJhcyBhdCBpa2kuZmk+CitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbGRzby9pbmNsdWRlL2RsLXN0cmluZy5oIHwgIDIgKysKKyBsZHNvL2xkc28vZGwtZWxmLmMgICAgICAgfCA3OSArKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBsZHNvL2xkc28vbGRzby5jICAgICAgICAgfCAxOCArKysrKysrKystLQorIDMgZmlsZXMgY2hhbmdlZCwgNTkgaW5zZXJ0aW9ucygrKSwgNDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9sZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmggYi9sZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmgKK2luZGV4IGFhY2FkMTAuLjE0YWU2MTcgMTAwNjQ0CistLS0gYS9sZHNvL2luY2x1ZGUvZGwtc3RyaW5nLmgKKysrKyBiL2xkc28vaW5jbHVkZS9kbC1zdHJpbmcuaAorQEAgLTIwNCw3ICsyMDQsOSBAQCBzdGF0aWMgX19hbHdheXNfaW5saW5lIGNoYXIgKiBfZGxfZ2V0X2xhc3RfcGF0aF9jb21wb25lbnQoY2hhciAqcGF0aCkKKyAjIGRlZmluZSBfZGxfc3RyY2F0IHN0cmNhdAorICMgZGVmaW5lIF9kbF9zdHJjcHkgc3RyY3B5CisgIyBkZWZpbmUgX2RsX3N0cmNtcCBzdHJjbXAKKysjIGRlZmluZSBfZGxfc3RyY2hyIHN0cmNocgorICMgZGVmaW5lIF9kbF9zdHJyY2hyIHN0cnJjaHIKKysjIGRlZmluZSBfZGxfc3Ryc3RyIHN0cnN0cgorICMgZGVmaW5lIF9kbF9tZW1jcHkgbWVtY3B5CisgIyBkZWZpbmUgX2RsX21lbWNtcCBtZW1jbXAKKyAjIGRlZmluZSBfZGxfbWVtc2V0IG1lbXNldAorZGlmZiAtLWdpdCBhL2xkc28vbGRzby9kbC1lbGYuYyBiL2xkc28vbGRzby9kbC1lbGYuYworaW5kZXggNTYzMTkwNS4uNmFiN2FmZSAxMDA2NDQKKy0tLSBhL2xkc28vbGRzby9kbC1lbGYuYworKysrIGIvbGRzby9sZHNvL2RsLWVsZi5jCitAQCAtMTMzLDU2ICsxMzMsNjAgQEAgX2RsX3Byb3RlY3RfcmVscm8gKHN0cnVjdCBlbGZfcmVzb2x2ZSAqbCkKKyAgKiBpbiB1Q2xpYmMvbGRzby91dGlsL2xkZC5jICovCisgc3RhdGljIHN0cnVjdCBlbGZfcmVzb2x2ZSAqCisgc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIHJmbGFncywgY29uc3QgY2hhciAqcGF0aF9saXN0LAorLQlzdHJ1Y3QgZHluX2VsZiAqKnJwbnQpCisrCXN0cnVjdCBkeW5fZWxmICoqcnBudCwgY29uc3QgY2hhciogb3JpZ2luKQorIHsKKy0JY2hhciAqcGF0aCwgKnBhdGhfbiwgKm15bGlibmFtZTsKKysJY2hhciAqbXlsaWJuYW1lOworKwljb25zdCBjaGFyICpwLCAqcG47CisgCXN0cnVjdCBlbGZfcmVzb2x2ZSAqdHBudDsKKy0JaW50IGRvbmU7CisrCWludCBwbGVuOworIAorIAlpZiAocGF0aF9saXN0PT1OVUxMKQorIAkJcmV0dXJuIE5VTEw7CisgCistCS8qIFdlIG5lZWQgYSB3cml0YWJsZSBjb3B5IG9mIHRoaXMgc3RyaW5nLCBidXQgd2UgZG9uJ3QKKy0JICogbmVlZCB0aGlzIGFsbG9jYXRlZCBwZXJtYW5lbnRseSBzaW5jZSB3ZSBkb24ndCB3YW50CistCSAqIHRvIGxlYWsgbWVtb3J5LCBzbyB1c2UgYWxsb2NhIHRvIHB1dCBwYXRoIG9uIHRoZSBzdGFjayAqLworLQlkb25lID0gX2RsX3N0cmxlbihwYXRoX2xpc3QpOworLQlwYXRoID0gYWxsb2NhKGRvbmUgKyAxKTsKKy0KKyAJLyogYW5vdGhlciBiaXQgb2YgbG9jYWwgc3RvcmFnZSAqLworIAlteWxpYm5hbWUgPSBhbGxvY2EoMjA1MCk7CisgCistCV9kbF9tZW1jcHkocGF0aCwgcGF0aF9saXN0LCBkb25lKzEpOworLQorIAkvKiBVbmxpa2UgbGRkLmMsIGRvbid0IGJvdGhlciB0byBlbGltaW5hdGUgZG91YmxlIC8vcyAqLworIAorIAkvKiBSZXBsYWNlIGNvbG9ucyB3aXRoIHplcm9zIGluIHBhdGhfbGlzdCAqLworIAkvKiA6IGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIHBhdGggbWFwcyB0byBDV0QgKi8KKyAJLyogOjogYW55d2hlcmUgbWFwcyBDV0QgKi8KKyAJLyogIiIgbWFwcyB0byBDV0QgKi8KKy0JZG9uZSA9IDA7CistCXBhdGhfbiA9IHBhdGg7CistCWRvIHsKKy0JCWlmICgqcGF0aCA9PSAwKSB7CistCQkJKnBhdGggPSAnOic7CistCQkJZG9uZSA9IDE7CisrCWZvciAocCA9IHBhdGhfbGlzdDsgcCAhPSBOVUxMOyBwID0gcG4pIHsKKysJCXBuID0gX2RsX3N0cmNocihwICsgMSwgJzonKTsKKysJCWlmIChwbiAhPSBOVUxMKSB7CisrCQkJcGxlbiA9IHBuIC0gcDsKKysJCQlwbisrOworKwkJfSBlbHNlCisrCQkJcGxlbiA9IF9kbF9zdHJsZW4ocCk7CisrCisrCQlpZiAocGxlbiA+PSA3ICYmIF9kbF9tZW1jbXAocCwgIiRPUklHSU4iLCA3KSA9PSAwKSB7CisrCQkJaW50IG9sZW47CisrCQkJaWYgKHJmbGFncyAmJiBwbGVuICE9IDcpCisrCQkJCWNvbnRpbnVlOworKwkJCWlmIChvcmlnaW4gPT0gTlVMTCkKKysJCQkJY29udGludWU7CisrCQkJZm9yIChvbGVuID0gX2RsX3N0cmxlbihvcmlnaW4pIC0gMTsgb2xlbiA+PSAwICYmIG9yaWdpbltvbGVuXSAhPSAnLyc7IG9sZW4tLSkKKysJCQkJOworKwkJCWlmIChvbGVuIDw9IDApCisrCQkJCWNvbnRpbnVlOworKwkJCV9kbF9tZW1jcHkoJm15bGlibmFtZVswXSwgb3JpZ2luLCBvbGVuKTsKKysJCQlfZGxfbWVtY3B5KCZteWxpYm5hbWVbb2xlbl0sIHAgKyA3LCBwbGVuIC0gNyk7CisrCQkJbXlsaWJuYW1lW29sZW4gKyBwbGVuIC0gN10gPSAwOworKwkJfSBlbHNlIGlmIChwbGVuICE9IDApIHsKKysJCQlfZGxfbWVtY3B5KG15bGlibmFtZSwgcCwgcGxlbik7CisrCQkJbXlsaWJuYW1lW3BsZW5dID0gMDsKKysJCX0gZWxzZSB7CisrCQkJX2RsX3N0cmNweShteWxpYm5hbWUsICIuIik7CisgCQl9CistCQlpZiAoKnBhdGggPT0gJzonKSB7CistCQkJKnBhdGggPSAwOworLQkJCWlmICgqcGF0aF9uKQorLQkJCQlfZGxfc3RyY3B5KG15bGlibmFtZSwgcGF0aF9uKTsKKy0JCQllbHNlCistCQkJCV9kbF9zdHJjcHkobXlsaWJuYW1lLCAiLiIpOyAvKiBBc3N1bWUgY3VycmVudCBkaXIgaWYgZW1wdHkgcGF0aCAqLworLQkJCV9kbF9zdHJjYXQobXlsaWJuYW1lLCAiLyIpOworLQkJCV9kbF9zdHJjYXQobXlsaWJuYW1lLCBuYW1lKTsKKysJCV9kbF9zdHJjYXQobXlsaWJuYW1lLCAiLyIpOworKwkJX2RsX3N0cmNhdChteWxpYm5hbWUsIG5hbWUpOworICNpZmRlZiBfX0xEU09fU0FGRV9SVU5QQVRIX18KKy0JCQlpZiAoKm15bGlibmFtZSA9PSAnLycpCisrCQlpZiAoKm15bGlibmFtZSA9PSAnLycpCisgI2VuZGlmCistCQkJCWlmICgodHBudCA9IF9kbF9sb2FkX2VsZl9zaGFyZWRfbGlicmFyeShyZmxhZ3MsIHJwbnQsIG15bGlibmFtZSkpICE9IE5VTEwpCistCQkJCQlyZXR1cm4gdHBudDsKKy0JCQlwYXRoX24gPSBwYXRoKzE7CistCQl9CistCQlwYXRoKys7CistCX0gd2hpbGUgKCFkb25lKTsKKysJCWlmICgodHBudCA9IF9kbF9sb2FkX2VsZl9zaGFyZWRfbGlicmFyeShyZmxhZ3MsIHJwbnQsIG15bGlibmFtZSkpICE9IE5VTEwpCisrCQkJcmV0dXJuIHRwbnQ7CisrCX0KKyAJcmV0dXJuIE5VTEw7CisgfQorIAorQEAgLTIzNCw3ICsyMzgsOCBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAlpZiAocG50KSB7CisgCQlwbnQgKz0gKHVuc2lnbmVkIGxvbmcpIHRwbnQtPmR5bmFtaWNfaW5mb1tEVF9TVFJUQUJdOworIAkJX2RsX2lmX2RlYnVnX2RwcmludCgiXHRzZWFyY2hpbmcgUlBBVEg9JyVzJ1xuIiwgcG50KTsKKy0JCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQpKSAhPSBOVUxMKQorKwkJaWYgKCh0cG50MSA9IHNlYXJjaF9mb3JfbmFtZWRfbGlicmFyeShsaWJuYW1lLCByZmxhZ3MsIHBudCwgcnBudCwKKysJCQkJCQkgICAgICB0cG50LT5saWJuYW1lKSkgIT0gTlVMTCkKKyAJCQlyZXR1cm4gdHBudDE7CisgCX0KKyAjZW5kaWYKK0BAIC0yNDMsNyArMjQ4LDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAJLyogQ2hlY2sgaW4gTERfe0VMRl99TElCUkFSWV9QQVRILCBpZiBzcGVjaWZpZWQgYW5kIGFsbG93ZWQgKi8KKyAJaWYgKF9kbF9saWJyYXJ5X3BhdGgpIHsKKyAJCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIExEX0xJQlJBUllfUEFUSD0nJXMnXG4iLCBfZGxfbGlicmFyeV9wYXRoKTsKKy0JCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBfZGxfbGlicmFyeV9wYXRoLCBycG50KSkgIT0gTlVMTCkKKysJCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBfZGxfbGlicmFyeV9wYXRoLCBycG50LCBOVUxMKSkgIT0gTlVMTCkKKyAJCXsKKyAJCQlyZXR1cm4gdHBudDE7CisgCQl9CitAQCAtMjU3LDcgKzI2Miw3IEBAIHN0cnVjdCBlbGZfcmVzb2x2ZSAqX2RsX2xvYWRfc2hhcmVkX2xpYnJhcnkodW5zaWduZWQgcmZsYWdzLCBzdHJ1Y3QgZHluX2VsZiAqKnJwCisgCWlmIChwbnQpIHsKKyAJCXBudCArPSAodW5zaWduZWQgbG9uZykgdHBudC0+ZHluYW1pY19pbmZvW0RUX1NUUlRBQl07CisgCQlfZGxfaWZfZGVidWdfZHByaW50KCJcdHNlYXJjaGluZyBSVU5QQVRIPSclcydcbiIsIHBudCk7CistCQlpZiAoKHRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgcG50LCBycG50KSkgIT0gTlVMTCkKKysJCWlmICgodHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBwbnQsIHJwbnQsIE5VTEwpKSAhPSBOVUxMKQorIAkJCXJldHVybiB0cG50MTsKKyAJfQorICNlbmRpZgorQEAgLTI5MSw3ICsyOTYsNyBAQCBzdHJ1Y3QgZWxmX3Jlc29sdmUgKl9kbF9sb2FkX3NoYXJlZF9saWJyYXJ5KHVuc2lnbmVkIHJmbGFncywgc3RydWN0IGR5bl9lbGYgKipycAorIAkvKiBMb29rIGZvciBsaWJyYXJpZXMgd2hlcmV2ZXIgdGhlIHNoYXJlZCBsaWJyYXJ5IGxvYWRlcgorIAkgKiB3YXMgaW5zdGFsbGVkICovCisgCV9kbF9pZl9kZWJ1Z19kcHJpbnQoIlx0c2VhcmNoaW5nIGxkc28gZGlyPSclcydcbiIsIF9kbF9sZHNvcGF0aCk7CistCXRwbnQxID0gc2VhcmNoX2Zvcl9uYW1lZF9saWJyYXJ5KGxpYm5hbWUsIHJmbGFncywgX2RsX2xkc29wYXRoLCBycG50KTsKKysJdHBudDEgPSBzZWFyY2hfZm9yX25hbWVkX2xpYnJhcnkobGlibmFtZSwgcmZsYWdzLCBfZGxfbGRzb3BhdGgsIHJwbnQsIE5VTEwpOworIAlpZiAodHBudDEgIT0gTlVMTCkKKyAJCXJldHVybiB0cG50MTsKKyAjZW5kaWYKK0BAIC0zMDQsNyArMzA5LDcgQEAgc3RydWN0IGVsZl9yZXNvbHZlICpfZGxfbG9hZF9zaGFyZWRfbGlicmFyeSh1bnNpZ25lZCByZmxhZ3MsIHN0cnVjdCBkeW5fZWxmICoqcnAKKyAjaWZuZGVmIF9fTERTT19DQUNIRV9TVVBQT1JUX18KKyAJCQkJCSI6IiBVQ0xJQkNfUlVOVElNRV9QUkVGSVggInVzci9YMTFSNi9saWIiCisgI2VuZGlmCistCQkJCQksIHJwbnQpOworKwkJCQkJLCBycG50LCBOVUxMKTsKKyAJaWYgKHRwbnQxICE9IE5VTEwpCisgCQlyZXR1cm4gdHBudDE7CisgCitkaWZmIC0tZ2l0IGEvbGRzby9sZHNvL2xkc28uYyBiL2xkc28vbGRzby9sZHNvLmMKK2luZGV4IGYzOGY5ZTMuLjM4MTI5MDggMTAwNjQ0CistLS0gYS9sZHNvL2xkc28vbGRzby5jCisrKysgYi9sZHNvL2xkc28vbGRzby5jCitAQCAtNDAyLDYgKzQwMiwyMCBAQCBzdGF0aWMgcHRyZGlmZl90IF9kbF9idWlsZF9sb2NhbF9zY29wZSAoc3RydWN0IGVsZl9yZXNvbHZlICoqbGlzdCwKKyAJCQkJcCArPSBfZGxfYnVpbGRfbG9jYWxfc2NvcGUgKHAsIHEtPnRwbnQpOworIAlyZXR1cm4gcCAtIGxpc3Q7CisgfQorKyAKKytzdGF0aWMgdm9pZCBfZGxfc2V0dXBfcHJvZ25hbWUoY29uc3QgY2hhciAqYXJndjApCisreworKwljaGFyIGltYWdlW1BBVEhfTUFYXTsKKysJc3NpemVfdCBzOworKworKwlzID0gX2RsX3JlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGltYWdlLCBzaXplb2YoaW1hZ2UpKTsKKysJaWYgKHMgPiAwICYmIGltYWdlWzBdID09ICcvJykgeworKwkJaW1hZ2Vbc10gPSAwOworKwkJX2RsX3Byb2duYW1lID0gX2RsX3N0cmR1cChpbWFnZSk7CisrCX0gZWxzZSBpZiAoYXJndjApIHsKKysJCV9kbF9wcm9nbmFtZSA9IGFyZ3YwOworKwl9CisrfQorIAorIHZvaWQgKl9kbF9nZXRfcmVhZHlfdG9fcnVuKHN0cnVjdCBlbGZfcmVzb2x2ZSAqdHBudCwgRExfTE9BREFERFJfVFlQRSBsb2FkX2FkZHIsCisgCQkJICBFbGZXKGF1eHZfdCkgYXV4dnRbQVRfRUdJRCArIDFdLCBjaGFyICoqZW52cCwgY2hhciAqKmFyZ3YKK0BAIC00NTQsOSArNDY4LDcgQEAgdm9pZCAqX2RsX2dldF9yZWFkeV90b19ydW4oc3RydWN0IGVsZl9yZXNvbHZlICp0cG50LCBETF9MT0FEQUREUl9UWVBFIGxvYWRfYWRkciwKKyAJICogYmVlbiBmaXhlZCB1cCBieSBub3cuICBTdGlsbCBubyBmdW5jdGlvbiBjYWxscyBvdXRzaWRlIG9mIHRoaXMKKyAJICogbGlicmFyeSwgc2luY2UgdGhlIGR5bmFtaWMgcmVzb2x2ZXIgaXMgbm90IHlldCByZWFkeS4KKyAJICovCistCWlmIChhcmd2WzBdKSB7CistCQlfZGxfcHJvZ25hbWUgPSBhcmd2WzBdOworLQl9CisrCV9kbF9zZXR1cF9wcm9nbmFtZShhcmd2WzBdKTsKKyAKKyAjaWZkZWYgX19EU0JUX18KKyAJX2RsX2xkc29fZHNidCA9ICh2b2lkICopdHBudC0+ZHluYW1pY19pbmZvW0RUX0RTQlRfQkFTRV9JRFhdOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC8wMDA3LW5wdGwtYXRmb3JrLUhpZGUtcHRocmVhZF9hdGZvcmstaW4tc2hhcmVkLXZlcnNpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTkzMmMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvMDAwNy1ucHRsLWF0Zm9yay1IaWRlLXB0aHJlYWRfYXRmb3JrLWluLXNoYXJlZC12ZXJzaW9ucy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDkwNTE2YWY5Zjc3NmY5YzI4MzViNDdmYzUyNzc1ZGNiMzA3YTg1YWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAyMyBKdW4gMjAxMiAxNTo1OTowMSAtMDcwMAorU3ViamVjdDogW1BBVENIIDcvN10gbnB0bC9hdGZvcms6IEhpZGUgcHRocmVhZF9hdGZvcmsgaW4gc2hhcmVkIHZlcnNpb25zCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnB0aHJlYWQvbnB0bC9NYWtlZmlsZS5pbiB8IDMgKystCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluIGIvbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluCitpbmRleCA1NWVlYmEyLi44Y2I4ZmE5IDEwMDY0NAorLS0tIGEvbGlicHRocmVhZC9ucHRsL01ha2VmaWxlLmluCisrKysgYi9saWJwdGhyZWFkL25wdGwvTWFrZWZpbGUuaW4KK0BAIC0xNiw2ICsxNiw3IEBAIGxpYmMtc2hhcmVkLXJvdXRpbmVzLXkgPSBmb3J3YXJkLmMgbGliYy1jYW5jZWxsYXRpb24uYworIGxpYmMtc3RhdGljLXJvdXRpbmVzLXkgPSBhbGxvY2FfY3V0b2ZmLmMgbGliYy1jYW5jZWxsYXRpb24uYworIGxpYnB0aHJlYWQtc2hhcmVkLW9ubHktcm91dGluZXMteSA9IHZlcnNpb24uYworIGxpYnB0aHJlYWQtc3RhdGljLW9ubHktcm91dGluZXMteSA9IHB0aHJlYWRfYXRmb3JrLmMKKysKKyBsaWJwdGhyZWFkLXJvdXRpbmVzLSArPSAkKG5vdGRpciAkKHdpbGRjYXJkICQobGlicHRocmVhZF9ESVIpL2dlbl8qLmMpKSAjIGR1bW15IGdlbmVyYXRlZCBmaWxlcworIGxpYnB0aHJlYWQtcm91dGluZXMtICs9IGFsbG9jYXRlc3RhY2suYyAjIGR1bW15IGluY2x1ZGVkIGJ5IHB0aHJlYWRfY3JlYXRlLmMKKyBsaWJwdGhyZWFkLXJvdXRpbmVzLSArPSBwdGhyZWFkX211dGV4X2dldHByaW9jZWlsaW5nLmMgcHRocmVhZF9tdXRleF9zZXRwcmlvY2VpbGluZy5jICMgWFhYOiBkZWxldGUgdGhvc2Ugb3IgdXNlIHRoZW0hCitAQCAtMjAxLDcgKzIwMiw3IEBAIENGTEFHUy1tc2dzbmQuYyA9IC1mZXhjZXB0aW9ucyAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCisgQ0ZMQUdTLXRjZHJhaW4uYyA9IC1mZXhjZXB0aW9ucyAtZmFzeW5jaHJvbm91cy11bndpbmQtdGFibGVzCisgCisgQ0ZMQUdTLXB0LXN5c3RlbS5jID0gLWZleGNlcHRpb25zIC1JJCh0b3Bfc3JjZGlyKWxpYmMvc3RkbGliCistCisrQ0ZMQUdTLXB0aHJlYWRfYXRmb3JrLmMgPSAtRE5PVF9JTl9saWJjCisgIworICMgVGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlzIHVDbGliYyBzcGVjaWZpYy4KKyAjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L2xvY2FsZS5jZmcgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjY0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9sb2NhbGUuY2ZnCkBAIC0wLDAgKzEsMyBAQAorVUNMSUJDX0hBU19MT0NBTEU9eQorVUNMSUJDX0hBU19YTE9DQUxFPXkKK1VDTElCQ19CVUlMRF9NSU5JTUFMX0xPQ0FMRT15CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L29ic3RhY2suY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YmY5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC9vYnN0YWNrLmNmZwpAQCAtMCwwICsxIEBACitVQ0xJQkNfSEFTX09CU1RBQ0s9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLmRpc3RybyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3NTQ4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtZ2l0L3VDbGliYy5kaXN0cm8KQEAgLTAsMCArMSwxOTMgQEAKKyMKKyMgR2VuZXJhbCBMaWJyYXJ5IFNldHRpbmdzCisjCisjIEhBVkVfTk9fUElDIGlzIG5vdCBzZXQKKyMgRE9QSUMgaXMgbm90IHNldAorIyBIQVZFX05PX1NIQVJFRCBpcyBub3Qgc2V0CisjIEFSQ0hfSEFTX05PX0xEU08gaXMgbm90IHNldAorSEFWRV9TSEFSRUQ9eQorIyBGT1JDRV9TSEFSRUFCTEVfVEVYVF9TRUdNRU5UUyBpcyBub3Qgc2V0CitMRFNPX0xERF9TVVBQT1JUPXkKK0xEU09fQ0FDSEVfU1VQUE9SVD15CisjIExEU09fUFJFTE9BRF9GSUxFX1NVUFBPUlQgaXMgbm90IHNldAorTERTT19CQVNFX0ZJTEVOQU1FPSJsZC5zbyIKKyMgVUNMSUJDX1NUQVRJQ19MRENPTkZJRyBpcyBub3Qgc2V0CitMRFNPX1JVTlBBVEg9eQorVUNMSUJDX0NUT1JfRFRPUj15CitMRFNPX0dOVV9IQVNIX1NVUFBPUlQ9eQorIyBIQVNfTk9fVEhSRUFEUyBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1RIUkVBRFM9eQorVUNMSUJDX0hBU19USFJFQURTX05BVElWRT15CitQVEhSRUFEU19ERUJVR19TVVBQT1JUPXkKKyMgTElOVVhUSFJFQURTX09MRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0xGUz15CisjIE1BTExPQyBpcyBub3Qgc2V0CisjIE1BTExPQ19TSU1QTEUgaXMgbm90IHNldAorTUFMTE9DX1NUQU5EQVJEPXkKK01BTExPQ19HTElCQ19DT01QQVQ9eQorVUNMSUJDX0RZTkFNSUNfQVRFWElUPXkKK0NPTVBBVF9BVEVYSVQ9eQorVUNMSUJDX1NVU1YzX0xFR0FDWT15CitVQ0xJQkNfU1VTVjNfTEVHQUNZX01BQ1JPUz15CitVQ0xJQkNfU1VTVjRfTEVHQUNZPXkKK1VDTElCQ19IQVNfU0hBRE9XPXkKK1VDTElCQ19IQVNfUFJPR1JBTV9JTlZPQ0FUSU9OX05BTUU9eQorVUNMSUJDX0hBU19fX1BST0dOQU1FPXkKK1VOSVg5OFBUWV9PTkxZPXkKK0FTU1VNRV9ERVZQVFM9eQorVUNMSUJDX0hBU19MSUJVVElMPXkKK1VDTElCQ19IQVNfVE1fRVhURU5TSU9OUz15CitVQ0xJQkNfSEFTX1RaX0NBQ0hJTkc9eQorVUNMSUJDX0hBU19UWl9GSUxFPXkKK1VDTElCQ19IQVNfVFpfRklMRV9SRUFEX01BTlk9eQorVUNMSUJDX1RaX0ZJTEVfUEFUSD0iL2V0Yy9UWiIKKworIworIyBBZHZhbmNlZCBMaWJyYXJ5IFNldHRpbmdzCisjCitVQ0xJQkNfUFdEX0JVRkZFUl9TSVpFPTI1NgorVUNMSUJDX0dSUF9CVUZGRVJfU0laRT0yNTYKKworIworIyBOZXR3b3JraW5nIFN1cHBvcnQKKyMKK1VDTElCQ19IQVNfSVBWNj15CitVQ0xJQkNfSEFTX1JQQz15CitVQ0xJQkNfSEFTX0ZVTExfUlBDPXkKK1VDTElCQ19IQVNfUkVFTlRSQU5UX1JQQz15CitVQ0xJQkNfVVNFX05FVExJTks9eQorVUNMSUJDX1NVUFBPUlRfQUlfQUREUkNPTkZJRz15CisKK1VDTElCQ19IQVNfQlNEX1JFU19DTE9TRT15CitVQ0xJQkNfSEFTX0xJQlJFU09MVl9TVFVCPXkKK1VDTElCQ19IQVNfTElCTlNMX1NUVUI9eQorCisjCisjIFN0cmluZyBhbmQgU3RkaW8gU3VwcG9ydAorIworVUNMSUJDX0hBU19TVFJJTkdfR0VORVJJQ19PUFQ9eQorVUNMSUJDX0hBU19TVFJJTkdfQVJDSF9PUFQ9eQorVUNMSUJDX0hBU19DVFlQRV9UQUJMRVM9eQorVUNMSUJDX0hBU19DVFlQRV9TSUdORUQ9eQorIyBVQ0xJQkNfSEFTX0NUWVBFX1VOU0FGRSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0NUWVBFX0NIRUNLRUQ9eQorIyBVQ0xJQkNfSEFTX0NUWVBFX0VORk9SQ0VEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfV0NIQVI9eQorIyBVQ0xJQkNfSEFTX0xPQ0FMRSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0hFWEFERUNJTUFMX0ZMT0FUUz15CitVQ0xJQkNfSEFTX0dMSUJDX0NVU1RPTV9QUklOVEY9eQorVUNMSUJDX1BSSU5URl9TQ0FORl9QT1NJVElPTkFMX0FSR1M9OQorVUNMSUJDX0hBU19TQ0FORl9HTElCQ19BX0ZMQUc9eQorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl9OT05FIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU1RESU9fQlVGU0laXzI1Nj15CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzUxMiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzEwMjQgaXMgbm90IHNldAorIyBVQ0xJQkNfSEFTX1NURElPX0JVRlNJWl8yMDQ4IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUZTSVpfNDA5NiBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfU1RESU9fQlVGU0laXzgxOTIgaXMgbm90IHNldAorVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl9OT05FPXkKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl80IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19CVUlMVElOX0JVRkZFUl84IGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TVERJT19TSFVURE9XTl9PTl9BQk9SVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX1NURElPX0dFVENfTUFDUk89eQorVUNMSUJDX0hBU19TVERJT19QVVRDX01BQ1JPPXkKK1VDTElCQ19IQVNfU1RESU9fQVVUT19SV19UUkFOU0lUSU9OPXkKKyMgVUNMSUJDX0hBU19GT1BFTl9MQVJHRUZJTEVfTU9ERSBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0ZPUEVOX0VYQ0xVU0lWRV9NT0RFPXkKK1VDTElCQ19IQVNfR0xJQkNfQ1VTVE9NX1NUUkVBTVM9eQorVUNMSUJDX0hBU19QUklOVEZfTV9TUEVDPXkKK1VDTElCQ19IQVNfRVJSTk9fTUVTU0FHRVM9eQorIyBVQ0xJQkNfSEFTX1NZU19FUlJMSVNUIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfU0lHTlVNX01FU1NBR0VTPXkKKyMgVUNMSUJDX0hBU19TWVNfU0lHTElTVCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0dOVV9HRVRPUFQ9eQorVUNMSUJDX0hBU19HTlVfR0VUU1VCT1BUPXkKKworIworIyBCaWcgYW5kIFRhbGwKKyMKK1VDTElCQ19IQVNfUkVHRVg9eQorIyBVQ0xJQkNfSEFTX1JFR0VYX09MRCBpcyBub3Qgc2V0CitVQ0xJQkNfSEFTX0ZOTUFUQ0g9eQorIyBVQ0xJQkNfSEFTX0ZOTUFUQ0hfT0xEIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfV09SREVYUD15CitVQ0xJQkNfSEFTX05GVFc9eQorVUNMSUJDX0hBU19GVFc9eQorVUNMSUJDX0hBU19GVFM9eQorVUNMSUJDX0hBU19HTE9CPXkKK1VDTElCQ19IQVNfR05VX0dMT0I9eQorCisjCisjIExpYnJhcnkgSW5zdGFsbGF0aW9uIE9wdGlvbnMKKyMKK1NIQVJFRF9MSUJfTE9BREVSX1BSRUZJWD0iL2xpYiIKK1JVTlRJTUVfUFJFRklYPSIvIgorREVWRUxfUFJFRklYPSIvL3VzciIKK01VTFRJTElCX0RJUj0ibGliIgorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgVUNMSUJDX0JVSUxEX1BJRSBpcyBub3Qgc2V0CisjIFVDTElCQ19IQVNfQVJDNFJBTkRPTSBpcyBub3Qgc2V0CisjIEhBVkVfTk9fU1NQIGlzIG5vdCBzZXQKKyMgVUNMSUJDX0hBU19TU1AgaXMgbm90IHNldAorVUNMSUJDX0JVSUxEX1JFTFJPPXkKK1VDTElCQ19CVUlMRF9OT1c9eQorVUNMSUJDX0JVSUxEX05PRVhFQ1NUQUNLPXkKKworIworIyB1Q2xpYmMgZGV2ZWxvcG1lbnQvZGVidWdnaW5nIG9wdGlvbnMKKyMKK0NST1NTX0NPTVBJTEVSX1BSRUZJWD0iIgorVUNMSUJDX0VYVFJBX0NGTEFHUz0iIgorIyBET0RFQlVHIGlzIG5vdCBzZXQKKyMgRE9ERUJVR19QVCBpcyBub3Qgc2V0CisjIERPU1RSSVAgaXMgbm90IHNldAorIyBET0FTU0VSVFMgaXMgbm90IHNldAorIyBTVVBQT1JUX0xEX0RFQlVHIGlzIG5vdCBzZXQKKyMgU1VQUE9SVF9MRF9ERUJVR19FQVJMWSBpcyBub3Qgc2V0CisjIFVDTElCQ19NQUxMT0NfREVCVUdHSU5HIGlzIG5vdCBzZXQKK1VDTElCQ19IQVNfQkFDS1RSQUNFPXkKK1dBUk5JTkdTPSItV2FsbCIKKyMgRVhUUkFfV0FSTklOR1MgaXMgbm90IHNldAorIyBET01VTFRJIGlzIG5vdCBzZXQKKyMgVUNMSUJDX01KTjNfT05MWSBpcyBub3Qgc2V0CisKKyMgbWF0aCBzdHVmZiBmb3IgcGVybAorRE9fQzk5X01BVEg9eQorVUNMSUJDX0hBU19MT05HX0RPVUJMRV9NQVRIPXkKK1VDTElCQ19IQVNfRkVOVj15CitVQ0xJQkNfTElOVVhfTU9EVUxFXzI2PXkKKyMgVUNMSUJDX0xJTlVYX01PRFVMRV8yNCBpcyBub3Qgc2V0CitVQ0xJQkNfTElOVVhfU1BFQ0lGSUM9eQorVUNMSUJDX0hBU19SRUFMVElNRT15CitVQ0xJQkNfSEFTX0FEVkFOQ0VEX1JFQUxUSU1FPXkKK1VDTElCQ19IQVNfTkVUV09SS19TVVBQT1JUPXkKK1VDTElCQ19IQVNfU09DS0VUPXkKK1VDTElCQ19IQVNfQlNEX0VSUj15CitVQ0xJQkNfSEFTX1NZU0xPRz15CitVQ0xJQkNfSEFTX0NSWVBUPXkKK1VDTElCQ19IQVNfQ1JZUFRfSU1QTD15CitVQ0xJQkNfSEFTX0dOVV9FUlJPUj15CitVQ0xJQkNfSEFTX1BUWT15CitVQ0xJQkNfQlNEX1NQRUNJRklDPXkKK1VDTElCQ19IQVNfRVBPTEw9eQorVUNMSUJDX0hBU19GTE9BVFM9eQorCisjIFRoZSBiZWxvdyBvcHRpb24gaXMgbmVlZGVkIGZvciBBUk0gc2luY2UgZGVwZW5kaW5nCisjIHVwb25nIHdoYXQgaW50cnVjdGlvbiBzZXQgaXMgY2hvc2VuIHRoaXMgd2lsbCBiZQorIyBlbmFibGVkLiBBcyBzdWNoIGl0IGlzIGhhcm1sZXNzIGFuZCB3aWxsIGJlIHB1bnRlZAorIyBieSBtZW51Y29uZmlnIGZvciBvdGhlciBhcmNoZXMuCisKKyMgQ09NUElMRV9JTl9USFVNQl9NT0RFIGlzIG5vdCBzZXQKKworIyBuZWVkZWQgYnkgc3lzdGVtZAorVUNMSUJDX0hBU19VVE1QWD15CitVQ0xJQkNfTElOVVhfTU9EVUxFXzI2PXkKK1VDTElCQ19IQVNfUkVTT0xWRVJfU1VQUE9SVD15CisjIG5lZWRlZCBmb3IgTFRQCitVQ0xJQkNfU1VTVjRfTEVHQUNZPXkKK1VDTElCQ19IQVNfT0JTT0xFVEVfQlNEX1NJR05BTD15CitET19YU0lfTUFUSD15CitVQ0xJQkNfU1Y0X0RFUFJFQ0FURUQ9eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLm1hY2hpbmUgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjLWdpdC91Q2xpYmMubWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTVmNDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1naXQvdUNsaWJjLm1hY2hpbmUKQEAgLTAsMCArMSwxNCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBWZXJzaW9uOiAwLjkuMzItZ2l0CisjIE1vbiBKdWwgMTkgMDE6MzQ6MjkgMjAxMAorIworIworIyBVc2luZyBFTEYgZmlsZSBmb3JtYXQKKyMKK0ZPUkNFX09QVElPTlNfRk9SX0FSQ0g9eQorQVJDSF9IQVNfTU1VPXkKK0FSQ0hfVVNFX01NVT15CitLRVJORUxfSEVBREVSUz0iL3Vzci9pbmNsdWRlIgorSEFWRV9ET1RfQ09ORklHPXkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1pbml0aWFsX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkzN2NjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtaW5pdGlhbF9naXQuYmIKQEAgLTAsMCArMSwzNiBAQAorU0VDVElPTiA9ICJiYXNlIgorcmVxdWlyZSB1Y2xpYmMuaW5jCityZXF1aXJlIHVjbGliYy1naXQuaW5jCisKK0RFUEVORFMgPSAibGludXgtbGliYy1oZWFkZXJzIG5jdXJzZXMtbmF0aXZlIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIGxpYmdjYy1pbml0aWFsIGtlcm4tdG9vbHMtbmF0aXZlIgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1pbml0aWFsIgorCitQQUNLQUdFUyA9ICIiCitQQUNLQUdFU19EWU5BTUlDID0gIiIKKworU1RBR0lOR0NDID0gImdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorU1RBR0lOR0NDX2NsYXNzLW5hdGl2ZXNkayA9ICJnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKKworZG9faW5zdGFsbCgpIHsKKwkjIEluc3RhbGwgaW5pdGlhbCBoZWFkZXJzIGludG8gdGhlIGNyb3NzIGRpcgorCW1ha2UgUFJFRklYPSR7RH0gREVWRUxfUFJFRklYPSR7cHJlZml4fS8gUlVOVElNRV9QUkVGSVg9LyBcCisJCWluc3RhbGxfaGVhZGVycyBpbnN0YWxsX3N0YXJ0ZmlsZXMKKworICAgICAgICAjIGFkZCBsaW5rcyB0byBsaW51eC1saWJjLWhlYWRlcnM6IGZpbmFsIHVjbGliYyBidWlsZCBuZWVkIHRoaXMuCisgICAgICAgIGZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKyAgICAgICAgICAgICAgICBpZiBbIC1kICR7RH0ke2luY2x1ZGVkaXJ9LyR0IF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9LyR0CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBsbiAtc2YgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtpbmNsdWRlZGlyfS8kdCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICAgICAgZG9uZQorCit9Citkb19jb21waWxlKCkgeworCToKK30KKworZG9fc2l0ZWNvbmZpZyAoKSB7CisgICAgICAgIDoKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy1wYWNrYWdlLmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE4MTVmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMtcGFja2FnZS5pbmMKQEAgLTAsMCArMSwzNyBAQAorIyBFbnN1cmUgdGhlIHVjbGliYy1kZXYgcGFja2FnZSBpcyBwcm9jZXNzZWQgYmVmb3JlIHVjbGliYy1zdGF0aWNkZXYgdG8gYWxsb3cKKyMgKl9ub25zaGFyZWQuYSBsaWJyYXJpZXMgdG8gYmUgcGFja2FnZWQgaW4gdGhlIHVjbGliYy1kZXYgcGFja2FnZS4KK1BBQ0tBR0VTID0gImxkZCB1Y2xpYmMtdXRpbHMtZGJnIHVjbGliYy11dGlscyB1Y2xpYmMtZ2NvbnYgdWNsaWJjLXRocmVhZC1kYiB1Y2xpYmMtYXJncCB1Y2xpYmMtYmFja3RyYWNlIHVjbGliYy1saWJjcnlwdCB1Y2xpYmMtbGliaW50bCB1Y2xpYmMtbGlibnNsIHVjbGliYy1saWJyZXNvbHYgdWNsaWJjLWxpYm0gdWNsaWJjLWxpYmRsIHVjbGliYy1saWJ1dGlsIHVjbGliYy1saWJwdGhyZWFkIHVjbGliYy1saWJydCAke1BOfS1kYmcgJHtQTn0tZGV2ICR7UE59LXN0YXRpY2RldiAke1BOfS1kb2MgJHtQTn0iCisKK0ZJTEVTX3VjbGliYy1saWJjcnlwdCA9ICIke2Jhc2VfbGliZGlyfS9saWJjcnlwdCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJjcnlwdC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYmludGwgPSAiJHtiYXNlX2xpYmRpcn0vbGliaW50bCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJpbnRsLSouc28iCitGSUxFU191Y2xpYmMtbGlibnNsID0gIiR7YmFzZV9saWJkaXJ9L2xpYm5zbCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJuc2wtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJyZXNvbHYgPSAiJHtiYXNlX2xpYmRpcn0vbGlicmVzb2x2Ki5zby4qICR7YmFzZV9saWJkaXJ9L2xpYnJlc29sdi0qLnNvIgorRklMRVNfdWNsaWJjLWxpYm0gPSAiJHtiYXNlX2xpYmRpcn0vbGlibSouc28uKiAke2Jhc2VfbGliZGlyfS9saWJtLSouc28iCitGSUxFU191Y2xpYmMtbGliZGwgPSAiJHtiYXNlX2xpYmRpcn0vbGliZGwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGliZGwtKi5zbyIKK0ZJTEVTX3VjbGliYy1saWJ1dGlsID0gIiR7YmFzZV9saWJkaXJ9L2xpYnV0aWwqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlidXRpbC0qLnNvIgorRklMRVNfdWNsaWJjLWxpYnB0aHJlYWQgPSAiJHtiYXNlX2xpYmRpcn0vbGlicHRocmVhZCouc28uKiAke2Jhc2VfbGliZGlyfS9saWJwdGhyZWFkLSouc28iCitGSUxFU191Y2xpYmMtbGlicnQgPSAiJHtiYXNlX2xpYmRpcn0vbGlicnQqLnNvLiogJHtiYXNlX2xpYmRpcn0vbGlicnQtKi5zbyIKKworRklMRVNfbGRkID0gIiR7YmluZGlyfS9sZGQiCitGSUxFU191Y2xpYmMtdXRpbHMgPSAiJHtiaW5kaXJ9ICR7c2JpbmRpcn0iCitGSUxFU191Y2xpYmMtdXRpbHMtZGJnICs9ICIke2JpbmRpcn0vLmRlYnVnICR7c2JpbmRpcn0vLmRlYnVnIgorRklMRVNfdWNsaWJjLWdjb252ID0gIiR7bGliZGlyfS9nY29udiIKK0ZJTEVTX3VjbGliYy10aHJlYWQtZGIgPSAiJHtiYXNlX2xpYmRpcn0vbGlidGhyZWFkX2RiKiIKK0ZJTEVTX3VjbGliYy1hcmdwID0gIiR7YmFzZV9saWJkaXJ9L2xpYnVhcmdwLSouc28gJHtiYXNlX2xpYmRpcn0vbGlidWFyZ3AqLnNvLioiCitGSUxFU191Y2xpYmMtYmFja3RyYWNlID0gIiR7YmFzZV9saWJkaXJ9L2xpYnViYWNrdHJhY2UtKi5zbyAke2Jhc2VfbGliZGlyfS9saWJ1YmFja3RyYWNlKi5zby4qIgorCisjIFRoZSBsYXN0IGxpbmUgKGdkYiBhbmQgbGliMSkgaXMgZm9yIHVjbGludXgtdWNsaWJjIGJ1aWxkcwordWNsaWJjX2Jhc2VsaWJzID0gIiR7YmFzZV9saWJkaXJ9L2xkKi5zby4qICR7YmFzZV9saWJkaXJ9L2xkKi5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vbGliYyouc28uKiAke2Jhc2VfbGliZGlyfS9saWJ1Q2xpYmMtKi5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmMuZ2RiICR7bGliZGlyfS9saWJjICR7YmFzZV9saWJkaXJ9L2xpYjEuc28gXAorICAgICAgICAgICAgICAgICAgIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGV2ICs9ICJcCisgICAgICAgICR7bGliZGlyfS9saWIqLnNvIFwKKyAgICAgICAgJHtsaWJkaXJ9Lypfbm9uc2hhcmVkLmEgXAorICAgICAgICAke2xpYmRpcn0vW1NdKmNydFsxaW5dLm8gXAorICAgICAgICAke2xpYmRpcn0vY3J0cmVsb2MqLm8gXAorICAgICAgICAke2luY2x1ZGVkaXJ9LyouaCAke2luY2x1ZGVkaXJ9LyovKi5oIFwKKyAgICAgICAiCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9ICR7dWNsaWJjX2Jhc2VsaWJzfSAvc2Jpbi9sZGNvbmZpZyBcCisgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9ICR7ZGF0YWRpcn0vem9uZWluZm8gJHtsaWJkaXJ9L2xvY2FsZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWNsaWJjL3VjbGliYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMzYWEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmMuaW5jCkBAIC0wLDAgKzEsMTY4IEBACitTVU1NQVJZID0gIkMgbGlicmFyeSBmb3IgZW1iZWRkZWQgc3lzdGVtcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBuYW1lIHVDbGliYyBpcyBhbiBhYmJyZXZpYXRpb24gZm9yICd0aGUgXAorbWljcm9jb250cm9sbGVyIEMgbGlicmFyeScuIEZvciBzaW1wbGljaXR5LCB1Q2xpYmMgaXMgcHJvbm91bmNlZCBcCisneWV3LXNlZS1saWItc2VlJy4gIFRoZSBnb2FsIG9mIHVDbGliYyBpcyB0byBwcm92aWRlIGFzIG11Y2ggXAorZnVuY3Rpb25hbGl0eSBhcyBwb3NzaWJsZSBpbiBhIHNtYWxsIGFtb3VudCBvZiBzcGFjZSwgYW5kIGl0IGlzIGludGVuZGVkIFwKK3ByaW1hcmlseSBmb3IgZW1iZWRkZWQgdXNlLiBJdCBpcyBhbHNvIGhpZ2hseSBjb25maWd1cmFibGUgaW4gc3VwcG9ydGVkIFwKK2ZlYXR1cmVzLCBhdCB0aGUgY29zdCBvZiBBQkkgZGlmZmVyZW5jZXMgZm9yIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gXAordUNsaWJjIGhhcyBiZWVuIGRlc2lnbmVkIGZyb20gdGhlIGdyb3VuZCB1cCB0byBiZSBhIEMgbGlicmFyeSBmb3IgXAorZW1iZWRkZWQgTGludXguICBJdCBpcyBOT1QgY29tcGF0aWJsZSB3aXRoIGJpbmFyaWVzIGxpbmtlZCBhZ2FpbnN0IGdsaWJjLiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitTRUNUSU9OID0gImxpYnMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTElCLmJvaWxlcnBsYXRlO21kNT1hYWRkZWFkY2RkZWI5MTgyOTdlMGU0YWZjNTJjZTQ2ZiBcCitmaWxlOi8vJHtTfS90ZXN0L3JlZ2V4L3Rlc3RyZWdleC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzE7bWQ1PTIzNGVmYjIyN2QwYTQwNjc3Zjg5NWU0YTFlMjZlOTYwIgorUFIgPSAicjkiCisKK3JlcXVpcmUgdWNsaWJjLWNvbmZpZy5pbmMKKworUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgorVE9PTENIQUlOX09QVElPTlMgPSAiIC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RDQk9PVFNUUkFQfSIKKworIyBzaXRlY29uZmlnLmJiY2xhc3MgcnVucyBjb25maWd1cmUgd2hpY2ggbmVlZHMgYSB3b3JraW5nIGNvbXBpbGVyCisjIEZvciB0aGUgY29tcGlsZXIgdG8gd29yayB3ZSBuZWVkIGEgd29ya2luZyBsaWJjIHlldCBsaWJjIGlzbid0CisjIGluIHRoZSBzeXNyb290cyBkaXJlY3RvcnkgYXQgdGhpcyBwb2ludC4gVGhpcyBtZWFucyB0aGUgbGliYy5zbworIyBsaW5rZXIgc2NyaXB0IHdvbid0IHdvcmsgYXMgdGhlIC0tc3lzcm9vdCBzZXR0aW5nIGlzbid0IGNvcnJlY3QuCisjIEhlcmUgd2UgY3JlYXRlIGEgaGFja2VkIHVwIGxpYmMgbGlua2VyIHNjcmlwdCBhbmQgcGFzcyBpbiB0aGUgcmlnaHQKKyMgZmxhZ3MgdG8gbGV0IGNvbmZpZ3VyZSB3b3JrLiBVZ2x5LgorRVhUUkFTSVRFQ09ORklHID0gIkNGTEFHUz0nJHtDRkxBR1N9IC1XbCwtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7V09SS0RJUn0vc2l0ZV9jb25maWdfbGliYyAtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtTCR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9IC1XbCwtTCR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSAtV2wsLUwke1NZU1JPT1RfREVTVERJUn0ke2Jhc2VfbGliZGlyfSciCitzaXRlY29uZmlnX2RvX3NpdGVjb25maWdfZ2VuY2FjaGVfcHJlcGVuZCA9ICIgXAorbWtkaXIgLXAgJHtXT1JLRElSfS9zaXRlX2NvbmZpZ19saWJjOyBcCitjcCAke1NZU1JPT1RfREVTVERJUn0ke2xpYmRpcn0vbGliYy5zbyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmM7IFwKK3NlZCAtaSAtZSAncyMgJHtiYXNlX2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7YmFzZV9saWJkaXJ9I2cnIC1lICdzIyAke2xpYmRpcn0jICR7U1lTUk9PVF9ERVNURElSfSR7bGliZGlyfSNnJyAke1dPUktESVJ9L3NpdGVfY29uZmlnX2xpYmMvbGliYy5zbzsgXAorIgorCisjIEZvciBub3csIHdlIHdpbGwgc2tpcCBidWlsZGluZyBvZiBhIGdjYyBwYWNrYWdlIGlmIGl0IGlzIGEgdWNsaWJjIG9uZQorIyBhbmQgb3VyIGJ1aWxkIGlzIG5vdCBhIHVjbGliYyBvbmUsIGFuZCB3ZSBza2lwIGEgZ2xpYmMgb25lIGlmIG91ciBidWlsZAorIyBpcyBhIHVjbGliYyBidWlsZC4KK0NPTVBBVElCTEVfSE9TVCA9ICIuKi11Y2xpYmMuKiIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworIyBkb19zdGFnZSBiYXJmcyBvbiBhIENDIHdpdGggd2hpdGVzcGFjZSwgdGhlcmVmb3JlIHB1dCB0aGUgJ0hPU1RfQ0NfQVJDSCcgaW4KKyMgdGhlIENGTEFHUyAod2hlbiBidWlsZGluZyB0aGUgdXRpbHMpLgorT0VNQUtFX05PX0NDID0gIidTVFJJUFRPT0w9dHJ1ZScgJ0xEPSR7TER9JyIKK0VYVFJBX09FTUFLRSA9ICIke09FTUFLRV9OT19DQ30gXAorICAgICAgICAgICAgICAgICdIT1NUQ0M9JHtCVUlMRF9DQ30nIFwKKyAgICAgICAgICAgICAgICAnSE9TVF9DRkxBR1M9JHtCVUlMRF9DRkxBR1N9JyBcCisgICAgICAgICAgICAgICAgJ0NDPSR7Q0N9JyBcCisgICAgICAgICAgICAgICAgQVJDSD0ke1VDTElCQ19BUkNIfSIKKworRVhUUkFfT0VNQUtFX3Rhc2tfZG9fcGFja2FnZSA9ICIke09FTUFLRV9OT19DQ30iCisKKyMgZW5hYmxlIHZlcmJvc2Ugb3V0cHV0OgorZXhwb3J0IFY9IjIiCisKKyMgLU88bj4gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgZW5kcyB1cCB3aXRoIEdDQyBJQ0Ugb24gdGh1bWIgYXMgcmVwb3J0ZWQKKyMgaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00NDg2MAorIworQ0ZMQUdTX2FybSA6PSAiJHtAb2VfZmlsdGVyX291dCgnLWZuby1vbWl0LWZyYW1lLXBvaW50ZXInLCAnJHtDRkxBR1N9JywgZCl9IgorVUNMSUJDX0VYVFJBX0NGTEFHUyAgOj0gIiR7QG9lX2ZpbHRlcl9vdXQoJygtSVxTK3wtaVxTKyknLCAnJHtDRkxBR1N9JywgZCl9IgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworICB1bnNldCBDRkxBR1MgQ1BQRkxBR1MgQ1hYRkxBR1MgTERGTEFHUworICBvZV9ydW5tYWtlIHByZWdlbgorfQorCitjb25maWdtYW5nbGUgPSAnL15LRVJORUxfSEVBREVSUy9kOyBcCisgICAgICAgICAgICAgICAgL15SVU5USU1FX1BSRUZJWC9kOyBcCisgICAgICAgICAgICAgICAgL15ERVZFTF9QUkVGSVgvZDsgXAorICAgICAgICAgICAgICAgIC9eU0hBUkVEX0xJQl9MT0FERVJfUFJFRklYL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlVDTElCQ19FWFRSQV9DRkxBR1MvZDsgXAorICAgICAgICAgICAgICAgIHMsLipVQ0xJQkNfSEFTX1dDSEFSLiosVUNMSUJDX0hBU19XQ0hBUj15LGc7IFwKKyAgICAgICAgICAgICAgICAke0BbIiIsInMsLipDT01QSUxFX0lOX1RIVU1CX01PREUuKixDT01QSUxFX0lOX1RIVU1CX01PREU9eSw7Il1bZC5nZXRWYXIoIkFSTV9JTlNUUlVDVElPTl9TRVQiLCBUcnVlKSAhPSAiYXJtIl19IFwKKyAgICAgICAgICAgICAgICAke0BbIiIsInMsLipVQ0xJQkNfSEFTX0xPQ0FMRS4qLFVDTElCQ19IQVNfTE9DQUxFPXksOyJdW2QuZ2V0VmFyKCJVU0VfTkxTIiwgVHJ1ZSkgPT0gInllcyJdfSBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qTERTT19HTlVfSEFTSF9TVVBQT1JULiosIyBMRFNPX0dOVV9IQVNIX1NVUFBPUlQgaXMgbm90IHNldCw7Il1bZC5nZXRWYXIoIlRBUkdFVF9BUkNIIiwgVHJ1ZSkgaW4gWydtaXBzJywgJ21pcHNlbCcsICdtaXBzNjQnLCAnbWlwczY0ZWwnLCAnYXZyMzInXV19IFwKKyAgICAgICAgICAgICAgICAvXkNST1NTL2Q7IFwKKyAgICAgICAgICAgICAgICAvXlRBUkdFVF9BUkNIPS9kOyBcCisgICAgICAgICAgICAgICAgL15UQVJHRVRfL3MsXlwoW149XSpcKS4qLCMgXDEgaXMgbm90IHNldCxnOyBcCisgICAgICAgICAgICAgICAgcyxeRE9TVFJJUC4qLCMgRE9TVFJJUCBpcyBub3Qgc2V0LGc7IFwKKyAgICAgICAgICAgICAgICAvX1tFT10qQUJJL2Q7IFwKKyAgICAgICAgICAgICAgICAvSEFTX0ZQVS9kOyBcCisgICAgICAgICAgICAgICAgJHtAWyIiLCJzLC4qTVVMVElMSUJfRElSLiosTVVMVElMSUJfRElSPVwiJHtiYXNlbGlifVwiLDsiXVtkLmdldFZhcigiYmFzZWxpYiIsIFRydWUpICE9ICJsaWIiXX0gXAorICAgICAgICAgICAgICAgJworT0VfRkVBVFVSRVMgOj0gIiR7QGZlYXR1cmVzX3RvX3VjbGliY19jb25mKGQpfSIKK09FX0RFTCAgICAgIDo9ICIke0BmZWF0dXJlc190b191Y2xpYmNfZGVsKGQpfSIKK3B5dGhvbiAoKSB7CisgICAgaWYgIiR7T0VfREVMfSI6CisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywgIiR7T0VfREVMfSIgKyAiXG4iKQorCisgICAgIyBieSBkZWZhdWx0IHVjbGliYyB1c2VzIG1pcHMxIElTQSBmb3IgbzMyIEFCSQorICAgICMgaWYgd2UgdXNlIFRBUkdFVF9DQ19BUkNIPSItbWFyY2g9bWlwczMyIiB3ZSBlbmQgdXAgCisgICAgIyB3aXRoIGNvbmZsaWN0aW5nIG1hcmNoIG9wdGlvbnMgdG8gZ2NjLiBIZXJlIHdlCisgICAgIyBhc2sgZm9yIE1JUFMzMiBJU0EgdG8gbWF0Y2ggdGhlIGNob3NlbiBhcmNoCisgICAgdHVuZSA9IGQuZ2V0VmFyKCJERUZBVUxUVFVORSIsIFRydWUpCisgICAgaWYgdHVuZS5zdGFydHN3aXRoKCdtaXBzMzInKToKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIHR1bmUgPSByZS5zdWIoJyhlbCkqKC1uZikqJywgJycsIHR1bmUpCisgICAgICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIE1JUFMzMl9DSEVDSyQvYVxcXG5DT05GSUdfTUlQU19JU0FfJXM9eVxuXG4iICUgKHR1bmUudXBwZXIoKSkpCisgICAgaWYgIiR7T0VfRkVBVFVSRVN9IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICIvXiMjIyBESVNUUk8gRkVBVFVSRVMkL2FcXFxuJXNcblxuIiAlCisgICAgICAgICAgICAgICAgICAgKCJcXG4iLmpvaW4oKGQuZXhwYW5kKCIke09FX0ZFQVRVUkVTfSIpLnNwbGl0KCJcbiIpKSkpKQorICAgIGQuc2V0VmFyKCdjb25maWdtYW5nbGVfYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgIi9eIyMjIENST1NTJC9hXFxcbiVzXG4iICUKKyAgICAgICAgICAgICAgICAgICgiXFxuIi5qb2luKFsiQ1JPU1NfQ09NUElMRVJfUFJFRklYPVwiJHtUQVJHRVRfUFJFRklYfVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJVQ0xJQkNfRVhUUkFfQ0ZMQUdTPVwiJHtVQ0xJQkNfRVhUUkFfQ0ZMQUdTfVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiS0VSTkVMX0hFQURFUlM9XCIke1NUQUdJTkdfSU5DRElSfVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUlVOVElNRV9QUkVGSVg9XCIvXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJERVZFTF9QUkVGSVg9XCIvJHtwcmVmaXh9XCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJTSEFSRURfTElCX0xPQURFUl9QUkVGSVg9XCIvbGliXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICAgICAgICkpCisgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAiL14jIyMgVEdUJC9hXFxcblRBUkdFVF9BUkNIPVwiJXNcIlxcblRBUkdFVF8lcz15XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICgiJHtVQ0xJQkNfQVJDSH0iLCAiJHtVQ0xJQkNfQVJDSH0iKSkKKyAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgIi9eIyMjIEZQVSQvYVxcXG4lc1xuXG4iICUgKFsiVUNMSUJDX0hBU19GUFU9eSIsIiMgVUNMSUJDX0hBU19GUFUgaXMgbm90IHNldCJdW2QuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcgXV0pKQorICAgIGlmICIke1VDTElCQ19FTkRJQU59IjoKKyAgICAgICAgZC5zZXRWYXIoJ2NvbmZpZ21hbmdsZV9hcHBlbmQnLAorICAgICAgICAgICAgICAgICAgICIvXiMjIyBBQkkkL2FcXFxuQVJDSF9XQU5UU18lc19FTkRJQU49eVxuXG4iICUgKCIke1VDTElCQ19FTkRJQU59IikpCisgICAgaWYgIiR7VUNMSUJDX0FCSX0iOgorICAgICAgICBkLnNldFZhcignY29uZmlnbWFuZ2xlX2FwcGVuZCcsCisgICAgICAgICAgICAgICAgICAgIi9eIyMjIEFCSSQvYVxcXG5DT05GSUdfJXM9eVxuXG4iICUgKCIke1VDTElCQ19BQkl9IikpCit9CisKK3B5dGhvbiBkb19wYXRjaF9hcHBlbmQoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICBzdWJwcm9jZXNzLmNhbGwoImxuIC1zZiAke1NUQUdJTkdfSU5DRElSfS9saW51eCAke1N9L2luY2x1ZGUvbGludXgiLCBzaGVsbD1UcnVlKQorICAgIHN1YnByb2Nlc3MuY2FsbCgibG4gLXNmICR7U1RBR0lOR19JTkNESVJ9L2FzbSAke1N9L2luY2x1ZGUvYXNtIiwgc2hlbGw9VHJ1ZSkKK30KKworZG9fY29uZmlndXJlKCkgeworICAgICAgICBybSAtZiAke1N9Ly5jb25maWcKKworICAgICAgICAjIE9wZW5FbWJlZGRlZCBzcGxpdHMgdGhlIHVDbGliYy5jb25maWcgaW4gdHdvIHBhcnRzOgorICAgICAgICAjIHVDbGliYy5tYWNoaW5lLCB1Q2xpYmMuZGlzdHJvCisgICAgICAgIGVjaG8gIiMjIyB1Q2xpYmMubWFjaGluZSAjIyMiID4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgY2F0ICR7V09SS0RJUn0vdUNsaWJjLm1hY2hpbmUgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIHVDbGliYy5kaXN0cm8gIyMjIiA+PiR7U30vbWVyZ2VkLmNvbmZpZworICAgICAgICBjYXQgJHtXT1JLRElSfS91Q2xpYmMuZGlzdHJvID4+JHtTfS9tZXJnZWQuY29uZmlnCisgICAgICAgIGVjaG8gIiMjIyBDUk9TUyIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIFRHVCIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIE1NVSIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIEZQVSIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIEFCSSIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIERJU1RSTyBGRUFUVVJFUyIgPj4ke1N9L21lcmdlZC5jb25maWcKKyAgICAgICAgZWNobyAiIyMjIE1JUFMzMl9DSEVDSyIgPj4ke1N9L21lcmdlZC5jb25maWcKKworICAgICAgICAjIE1hbmdsZSB0aGUgcmVzdWx0aW5nIC5jb25maWcgZGVwZW5kaW5nIG9uIE9FIHZhcmlhYmxlcworICAgICAgICBzZWQgLWkgLWUgJyR7Y29uZmlnbWFuZ2xlfScgJHtTfS9tZXJnZWQuY29uZmlnCisJY3AgJHtTfS9tZXJnZWQuY29uZmlnIC5jb25maWcKKyAgICAgICAgbWVyZ2VfY29uZmlnLnNoIC1yIC1uIC1tIC5jb25maWcgJHtAIiAiLmpvaW4oZmluZF9jZmdzKGQpKX0KKwljbWwxX2RvX2NvbmZpZ3VyZQorCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBQUkVGSVg9JHtEfSBpbnN0YWxsCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L2ljb252LmgKK30KKworIyBidWlsZCBsZGQsIGxkY29uZmlnIGFuZCBmcmllbmRzIGJ1dCBvbmx5IGZvciBmdWxsIHVjbGliYworZG9faW5zdGFsbF9hcHBlbmRfcG4tdWNsaWJjICgpIHsKKyAgICAgICAgb2VfcnVubWFrZSBQUkVGSVg9JHtEfSAiU1NQX0FMTF9DRkxBR1M9JHtUQVJHRVRfTElOS19IQVNIX1NUWUxFfSIgLUMgdXRpbHMgdXRpbHNfaW5zdGFsbAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3VjbGliYy91Y2xpYmNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDJiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91Y2xpYmMvdWNsaWJjX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHVjbGliYy5pbmMKK3JlcXVpcmUgdWNsaWJjLXBhY2thZ2UuaW5jCityZXF1aXJlIHVjbGliYy1naXQuaW5jCisKK1NUQUdJTkdDQyA9ICJnY2MtY3Jvc3MtaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSIKK1NUQUdJTkdDQ19jbGFzcy1uYXRpdmVzZGsgPSAiZ2NjLWNyb3Nzc2RrLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL2xpYmMgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9bGliYy1mb3ItZ2NjIgorCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIFwKKyAgICAgICAgICAgdmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWluaXRpYWwgXAorICAgICAgICAgICB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWluaXRpYWwgXAorICAgICAgICAgICBsaW51eC1saWJjLWhlYWRlcnMgbmN1cnNlcy1uYXRpdmUgXAorICAgICAgICAgICBsaWJnY2MtaW5pdGlhbCBrZXJuLXRvb2xzLW5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gImxpbnV4LWxpYmMtaGVhZGVycy1kZXYiCitSUFJPVklERVNfJHtQTn0tZGV2ICs9ICJsaWJjLWRldiB2aXJ0dWFsLWxpYmMtZGV2IgorIyB1Y2xpYmMgZG9lcyBub3QgcmVhbGx5IGhhdmUgbGlic2VnZmF1bHQgYnV0IHRoZW4gdXNpbmcgdGhlIG9uZSBmcm9tIGdsaWJjIGlzIGFsc28gbm90CisjIGdvaW5nIHRvIHdvcmsuIFNvIHdlIHByZXRlbmQgdGhhdCB3ZSBoYXZlIGl0IHRvIG1ha2UgYml0YmFrZSBub3QgcHVsbCBvdGhlciByZWNpcGVzCisjIHRvIHNhdGlzZnkgdGhpcyBkZXBlbmRlbmN5IGZvciB0aGUgaW1hZ2VzL3Rhc2tzCisKK1JQUk9WSURFU18ke1BOfSArPSAibGlic2VnZmF1bHQgcnRsZChHTlVfSEFTSCkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9tb3VudC5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b21vdW50LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTc4ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2F1dG9tb3VudC5ydWxlcwpAQCAtMCwwICsxLDE5IEBACisjIFRoZXJlIGFyZSBhIG51bWJlciBvZiBtb2RpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHNvbWUKKyMgb2YgdGhlIGRpZmZlcmVudCBmaWVsZHMuIFRoZXkgcHJvdmlkZSB0aGUgZm9sbG93aW5nIHN1YnNpdHV0aW9uczoKKyMKKyMgJW4gdGhlICJrZXJuZWwgbnVtYmVyIiBvZiB0aGUgZGV2aWNlLgorIyAgICBGb3IgZXhhbXBsZSwgJ3NkYTMnIGhhcyBhICJrZXJuZWwgbnVtYmVyIiBvZiAnMycKKyMgJWUgdGhlIHNtYWxsZXN0IG51bWJlciBmb3IgdGhhdCBuYW1lIHdoaWNoIGRvZXMgbm90IG1hdGNoZXMgYW4gZXhpc3Rpbmcgbm9kZQorIyAlayB0aGUga2VybmVsIG5hbWUgZm9yIHRoZSBkZXZpY2UKKyMgJU0gdGhlIGtlcm5lbCBtYWpvciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJW0gdGhlIGtlcm5lbCBtaW5vciBudW1iZXIgZm9yIHRoZSBkZXZpY2UKKyMgJWIgdGhlIGJ1cyBpZCBmb3IgdGhlIGRldmljZQorIyAlYyB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoZSBQUk9HUkFNCisjICVze2ZpbGVuYW1lfSB0aGUgY29udGVudCBvZiBhIHN5c2ZzIGF0dHJpYnV0ZQorIyAlJSB0aGUgJyUnIGNoYXIgaXRzZWxmCisjCisKKyMgTWVkaWEgYXV0b21vdW50aW5nCitTVUJTWVNURU09PSJibG9jayIsIEFDVElPTj09ImFkZCIgICAgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQuc2giCitTVUJTWVNURU09PSJibG9jayIsIEFDVElPTj09InJlbW92ZSIgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbW91bnQuc2giCitTVUJTWVNURU09PSJibG9jayIsIEFDVElPTj09ImNoYW5nZSIsIEVOVntESVNLX01FRElBX0NIQU5HRX09PSIxIiBSVU4rPSIvZXRjL3VkZXYvc2NyaXB0cy9tb3VudC5zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvYXV0b25ldC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY3NmFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9hdXRvbmV0LnJ1bGVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBIYW5kbGUgbmV0d29yayBpbnRlcmZhY2Ugc2V0dXAKK1NVQlNZU1RFTT09Im5ldCIsIEFDVElPTj09ImFkZCIgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbmV0d29yay5zaCIKK1NVQlNZU1RFTT09Im5ldCIsIEFDVElPTj09InJlbW92ZSIgUlVOKz0iL2V0Yy91ZGV2L3NjcmlwdHMvbmV0d29yay5zaCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9sb2NhbGV4dHJhLnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTFkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL2xvY2FsZXh0cmEucnVsZXMKQEAgLTAsMCArMSwyMyBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIFRoZSBmaXJzdCBydGMgZGV2aWNlIGlzIHN5bWxpbmtlZCB0byAvZGV2L3J0YworS0VSTkVMPT0icnRjMCIsIFNZTUxJTksrPSJydGMiCisKKyNUaGUgZmlyc3QgZnJhbWVidWZmZXIgaXMgc3ltbGlua2VkIHRvIC9kZXYvZmIKK0tFUk5FTD09ImZiMCIsICBTWU1MSU5LKz0iZmIiCisKKyMgTWFrZSBhbGwgaW5wdXQgZGV2aWNlcyByZWFkLXdyaXRlIHRvIHRoZSBpbnB1dCBncm91cAorU1VCU1lTVEVNPT0iaW5wdXQiLCBHUk9VUD0iaW5wdXQiLCBNT0RFPSI2NjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LmJsYWNrbGlzdCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuYmxhY2tsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL21vdW50LmJsYWNrbGlzdApAQCAtMCwwICsxLDUgQEAKKy9kZXYvbG9vcAorL2Rldi9yYW0KKy9kZXYvbXRkYmxvY2sKKy9kZXYvbWQKKy9kZXYvZG0tKgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9tb3VudC5zaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VlYTkxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmYvbW91bnQuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoCisjCisjIENhbGxlZCBmcm9tIHVkZXYKKyMKKyMgQXR0ZW1wdCB0byBtb3VudCBhbnkgYWRkZWQgYmxvY2sgZGV2aWNlcyBhbmQgdW1vdW50IGFueSByZW1vdmVkIGRldmljZXMKKworCitNT1VOVD0iL2Jpbi9tb3VudCIKK1BNT1VOVD0iL3Vzci9iaW4vcG1vdW50IgorVU1PVU5UPSIvYmluL3Vtb3VudCIKK2ZvciBsaW5lIGluIGBncmVwIC12IF4jIC9ldGMvdWRldi9tb3VudC5ibGFja2xpc3RgCitkbworCWlmIFsgYCBleHByIG1hdGNoICIkREVWTkFNRSIgIiRsaW5lIiBgIC1ndCAwIF07CisJdGhlbgorCQlsb2dnZXIgInVkZXYvbW91bnQuc2giICJbJERFVk5BTUVdIGlzIGJsYWNrbGlzdGVkLCBpZ25vcmluZyIKKwkJZXhpdCAwCisJZmkKK2RvbmUKKworYXV0b21vdW50KCkgewkKKwluYW1lPSJgYmFzZW5hbWUgIiRERVZOQU1FImAiCisKKwkhIHRlc3QgLWQgIi9ydW4vbWVkaWEvJG5hbWUiICYmIG1rZGlyIC1wICIvcnVuL21lZGlhLyRuYW1lIgorCSMgU2lsZW50IHV0aWwtbGludXgncyB2ZXJzaW9uIG9mIG1vdW50aW5nIGF1dG8KKwlpZiBbICJ4YHJlYWRsaW5rICRNT1VOVGAiID0gIngvYmluL21vdW50LnV0aWwtbGludXgiIF0gOworCXRoZW4KKwkJTU9VTlQ9IiRNT1VOVCAtbyBzaWxlbnQiCisJZmkKKwkKKwkjIElmIGZpbGVzeXN0ZW0gdHlwZSBpcyB2ZmF0LCBjaGFuZ2UgdGhlIG93bmVyc2hpcCBncm91cCB0byAnZGlzaycsIGFuZAorCSMgZ3JhbnQgaXQgd2l0aCAgdy9yL3ggcGVybWlzc2lvbnMuCisJY2FzZSAkSURfRlNfVFlQRSBpbgorCXZmYXR8ZmF0KQorCQlNT1VOVD0iJE1PVU5UIC1vIHVtYXNrPTAwNyxnaWQ9YGF3ayAtRic6JyAnL15kaXNrL3twcmludCAkM30nIC9ldGMvZ3JvdXBgIgorCQk7OworCSMgVE9ETworCSopCisJCTs7CisJZXNhYworCisJaWYgISAkTU9VTlQgLXQgYXV0byAkREVWTkFNRSAiL3J1bi9tZWRpYS8kbmFtZSIKKwl0aGVuCisJCSNsb2dnZXIgIm1vdW50LnNoL2F1dG9tb3VudCIgIiRNT1VOVCAtdCBhdXRvICRERVZOQU1FIFwiL3J1bi9tZWRpYS8kbmFtZVwiIGZhaWxlZCEiCisJCXJtX2RpciAiL3J1bi9tZWRpYS8kbmFtZSIKKwllbHNlCisJCWxvZ2dlciAibW91bnQuc2gvYXV0b21vdW50IiAiQXV0by1tb3VudCBvZiBbL3J1bi9tZWRpYS8kbmFtZV0gc3VjY2Vzc2Z1bCIKKwkJdG91Y2ggIi90bXAvLmF1dG9tb3VudC0kbmFtZSIKKwlmaQorfQorCQorcm1fZGlyKCkgeworCSMgV2UgZG8gbm90IHdhbnQgdG8gcm0gLXIgcG9wdWxhdGVkIGRpcmVjdG9yaWVzCisJaWYgdGVzdCAiYGZpbmQgIiQxIiB8IHdjIC1sIHwgdHIgLWQgIiAiYCIgLWx0IDIgLWEgLWQgIiQxIgorCXRoZW4KKwkJISB0ZXN0IC16ICIkMSIgJiYgcm0gLXIgIiQxIgorCWVsc2UKKwkJbG9nZ2VyICJtb3VudC5zaC9hdXRvbW91bnQiICJOb3QgcmVtb3Zpbmcgbm9uLWVtcHR5IGRpcmVjdG9yeSBbJDFdIgorCWZpCit9CisKKyMgTm8gSURfRlNfVFlQRSBmb3IgY2Ryb20gZGV2aWNlLCB5ZXQgaXQgc2hvdWxkIGJlIG1vdW50ZWQKK25hbWU9ImBiYXNlbmFtZSAiJERFVk5BTUUiYCIKK1sgLWUgL3N5cy9ibG9jay8kbmFtZS9kZXZpY2UvbWVkaWEgXSAmJiBtZWRpYV90eXBlPWBjYXQgL3N5cy9ibG9jay8kbmFtZS9kZXZpY2UvbWVkaWFgCisKK2lmIFsgIiRBQ1RJT04iID0gImFkZCIgXSAmJiBbIC1uICIkREVWTkFNRSIgXSAmJiBbIC1uICIkSURfRlNfVFlQRSIgLW8gIiRtZWRpYV90eXBlIiA9ICJjZHJvbSIgXTsgdGhlbgorCWlmIFsgLXggIiRQTU9VTlQiIF07IHRoZW4KKwkJJFBNT1VOVCAkREVWTkFNRSAyPiAvZGV2L251bGwKKwllbGlmIFsgLXggJE1PVU5UIF07IHRoZW4KKyAgICAJCSRNT1VOVCAkREVWTkFNRSAyPiAvZGV2L251bGwKKwlmaQorCQorCSMgSWYgdGhlIGRldmljZSBpc24ndCBtb3VudGVkIGF0IHRoaXMgcG9pbnQsIGl0IGlzbid0CisJIyBjb25maWd1cmVkIGluIGZzdGFiIChub3RlIHRoZSByb290IGZpbGVzeXN0ZW0gY2FuIHNob3cgdXAgYXMKKwkjIC9kZXYvcm9vdCBpbiAvcHJvYy9tb3VudHMsIHNvIGNoZWNrIHRoZSBkZXZpY2UgbnVtYmVyIHRvbykKKwlpZiBleHByICRNQUpPUiAiKiIgMjU2ICsgJE1JTk9SICE9IGBzdGF0IC1jICVkIC9gOyB0aGVuCisJCWdyZXAgLXEgIl4kREVWTkFNRSAiIC9wcm9jL21vdW50cyB8fCBhdXRvbW91bnQKKwlmaQorZmkKKworCitpZiBbICIkQUNUSU9OIiA9ICJyZW1vdmUiIF0gfHwgWyAiJEFDVElPTiIgPSAiY2hhbmdlIiBdICYmIFsgLXggIiRVTU9VTlQiIF0gJiYgWyAtbiAiJERFVk5BTUUiIF07IHRoZW4KKwlmb3IgbW50IGluIGBjYXQgL3Byb2MvbW91bnRzIHwgZ3JlcCAiJERFVk5BTUUiIHwgY3V0IC1mIDIgLWQgIiAiIGAKKwlkbworCQkkVU1PVU5UICRtbnQKKwlkb25lCisJCisJIyBSZW1vdmUgZW1wdHkgZGlyZWN0b3JpZXMgZnJvbSBhdXRvLW1vdW50ZXIKKwluYW1lPSJgYmFzZW5hbWUgIiRERVZOQU1FImAiCisJdGVzdCAtZSAiL3RtcC8uYXV0b21vdW50LSRuYW1lIiAmJiBybV9kaXIgIi9ydW4vbWVkaWEvJG5hbWUiCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZi9uZXR3b3JrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZTkyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYtZXh0cmFjb25mL25ldHdvcmsuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKKyMgV2UgZ2V0IHR3byAiYWRkIiBldmVudHMgZm9yIGhvc3RhcCBjYXJkcyBkdWUgdG8gd2lmaTAKK2VjaG8gIiRJTlRFUkZBQ0UiIHwgZ3JlcCAtcSB3aWZpICYmIGV4aXQgMAorCisjIHVkZXZkIGRvZXMgY2xlYXJlbnYoKS4gRXhwb3J0IHNoZWxsIFBBVEggdG8gY2hpbGRyZW4uCitleHBvcnQgUEFUSAorCisjIENoZWNrIGlmIC9ldGMvaW5pdC5kL25ldHdvcmsgaGFzIGJlZW4gcnVuIHlldCB0byBzZWUgaWYgd2UgYXJlIAorIyBjYWxsZWQgYnkgc3RhcnRpbmcgL2V0Yy9yY1MuZC9TMDN1ZGV2IGFuZCBub3QgYnkgaG90cGx1Z2dpbmcgYSBkZXZpY2UKKyMKKyMgQXQgdGhpcyBzdGFnZSwgbmV0d29yayBpbnRlcmZhY2VzIHNob3VsZCBub3QgYmUgYnJvdWdodCB1cAorIyBhdXRvbWF0aWNhbGx5IGJlY2F1c2U6CisjIGEpCS9ldGMvaW5pdC5kL25ldHdvcmsgaGFzIG5vdCBiZWVuIHJ1biB5ZXQgKHNlY3VyaXR5IGlzc3VlKQorIyBiKSAJL3ZhciBoYXMgbm90IGJlZW4gcG9wdWxhdGVkIHlldCBzbyAvZXRjL3Jlc29sdixjb25mIHBvaW50cyB0byAKKyMJb2JsaXZpb24sIG1ha2luZyB0aGUgbmV0d29yayB1bnVzYWJsZQorIworCitzcG9vZnA9ImBncmVwIF5zcG9vZnByb3RlY3QgL2V0Yy9uZXR3b3JrL29wdGlvbnNgIgoraWYgdGVzdCAteiAiJHNwb29mcCIKK3RoZW4KKwkjIFRoaXMgaXMgdGhlIGRlZmF1bHQgZnJvbSAvZXRjL2luaXQuZC9uZXR3b3JrCisJc3Bvb2ZwX3ZhbD15ZXMKK2Vsc2UKKwlzcG9vZnBfdmFsPSR7c3Bvb2ZwI3Nwb29mcHJvdGVjdD19CitmaQorCit0ZXN0ICIkc3Bvb2ZwX3ZhbCIgPSB5ZXMgJiYgc3Bvb2ZwX3ZhbD0xIHx8IHNwb29mcF92YWw9MAorCisjIEkgdGhpbmsgaXQgaXMgc2FmZSB0byBhc3N1bWUgdGhhdCAibG8iIHdpbGwgYWx3YXlzIGJlIHRoZXJlIDspCitpZiB0ZXN0ICJgY2F0IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mL2xvL3JwX2ZpbHRlcmAiICE9ICIkc3Bvb2ZwX3ZhbCIgLWEgLW4gIiRzcG9vZnBfdmFsIgordGhlbgorCWVjaG8gIiRJTlRFUkZBQ0UiID4+IC9kZXYvdWRldl9uZXR3b3JrX3F1ZXVlCQorCWV4aXQgMAorZmkKKworIworIyBDb2RlIHRha2VuIGZyb20gcGNtY2lhLWNzOi9ldGMvcGNtY2lhL25ldHdvcmsKKyMKKworIyBpZiB0aGlzIGludGVyZmFjZSBoYXMgYW4gZW50cnkgaW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMsIGxldCBpZnVwZG93bgorIyBoYW5kbGUgaXQKK2lmIGdyZXAgLXEgImlmYWNlIFwrJElOVEVSRkFDRSIgL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXM7IHRoZW4KKyAgY2FzZSAkQUNUSU9OIGluCisgICAgYWRkKQorICAgIAlpZmNvbmZpZyB8IGdyZXAgLXEgIl4kSU5URVJGQUNFIiB8fCBpZnVwICRJTlRFUkZBQ0UKKyAgICAJOzsKKyAgICByZW1vdmUpCisgICAgCWlmZG93biAkSU5URVJGQUNFCisgICAgCTs7CisgIGVzYWMKKyAgCisgIGV4aXQgMAorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmZfMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LWV4dHJhY29uZl8xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi1leHRyYWNvbmZfMS4xLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiRXh0cmEgbWFjaGluZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiRXh0cmEgbWFjaGluZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB1ZGV2LCBzcGVjaWZpY2FsbHkgYmxhY2tsaXN0IGluZm9ybWF0aW9uLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiIFwKKyAgICAgICBmaWxlOi8vYXV0b21vdW50LnJ1bGVzIFwKKyAgICAgICBmaWxlOi8vbW91bnQuc2ggXAorICAgICAgIGZpbGU6Ly9tb3VudC5ibGFja2xpc3QgXAorICAgICAgIGZpbGU6Ly9hdXRvbmV0LnJ1bGVzIFwKKyAgICAgICBmaWxlOi8vbmV0d29yay5zaCBcCisgICAgICAgZmlsZTovL2xvY2FsZXh0cmEucnVsZXMgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvcnVsZXMuZAorCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXV0b21vdW50LnJ1bGVzICAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvYXV0b21vdW50LnJ1bGVzCisgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYXV0b25ldC5ydWxlcyAgICAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvYXV0b25ldC5ydWxlcworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xvY2FsZXh0cmEucnVsZXMgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kL2xvY2FsZXh0cmEucnVsZXMKKworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21vdW50LmJsYWNrbGlzdCAgICAgJHtEfSR7c3lzY29uZmRpcn0vdWRldi8KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9zY3JpcHRzLworCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbW91bnQuc2ggJHtEfSR7c3lzY29uZmRpcn0vdWRldi9zY3JpcHRzL21vdW50LnNoCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vbmV0d29yay5zaCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3NjcmlwdHMKK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS91ZGV2IgorUkRFUEVORFNfJHtQTn0gPSAidWRldiIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3VkZXYvbW91bnQuYmxhY2tsaXN0IgorCisjIHRvIHJlcGxhY2UgdWRldi1leHRyYS1ydWxlcyBmcm9tIG1ldGEtb2UKK1JQUk9WSURFU18ke1BOfSA9ICJ1ZGV2LWV4dHJhLXJ1bGVzIgorUlJFUExBQ0VTXyR7UE59ID0gInVkZXYtZXh0cmEtcnVsZXMiCitSQ09ORkxJQ1RTXyR7UE59ID0gInVkZXYtZXh0cmEtcnVsZXMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYuaW5jIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDBkYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LmluYwpAQCAtMCwwICsxLDExMSBAQAorU1VNTUFSWSA9ICIvZGV2LyBhbmQgaG90cGx1ZyBtYW5hZ2VtZW50IGRhZW1vbiIKK0RFU0NSSVBUSU9OID0gInVkZXYgaXMgYSBkYWVtb24gd2hpY2ggZHluYW1pY2FsbHkgY3JlYXRlcyBhbmQgcmVtb3ZlcyBkZXZpY2Ugbm9kZXMgZnJvbSBcCisvZGV2LywgaGFuZGxlcyBob3RwbHVnIGV2ZW50cyBhbmQgbG9hZHMgZHJpdmVycyBhdCBib290IHRpbWUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy91ZGV2L3VkZXYuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIuMCsgJiBMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyLjArIgorTElDRU5TRV9saWJ1ZGV2ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfbGliZ3VkZXYgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL0NPUFlJTkc7bWQ1PTE3YzRlNWZiNDk1ZTY3MDdhYzkyYTM4NjQ5MjZmOTc5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ndWRldi9DT1BZSU5HO21kNT1mYjQ5NDQ4NWE3ZDA1MDUzMDhjYjY4ZTQ5OTdjYzI2NiIKKworTERGTEFHUyArPSAiLWxydCIKKworREVQRU5EUyA9ICJnbGliLTIuMCBsaWJ1c2IgdXNidXRpbHMgcGNpdXRpbHMgZ2xpYi0yLjAtbmF0aXZlIGdwZXJmLW5hdGl2ZSBsaWJ4c2x0LW5hdGl2ZSB1dGlsLWxpbnV4IgorUlBST1ZJREVTXyR7UE59ID0gImhvdHBsdWciCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy91ZGV2LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeGluZy1rZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoLXNoZWxsLXNjcmlwdC1wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkLW1vdXNlLWF1dG9zdXNwZW5kLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2LnJ1bGVzIFwKKyAgICAgICAgICAgZmlsZTovL2RldmZzLXVkZXYucnVsZXMgXAorICAgICAgICAgICBmaWxlOi8vbGlua3MuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9wZXJtaXNzaW9ucy5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly9sb2NhbC5ydWxlcyBcCisgICAgICAgICAgIGZpbGU6Ly91ZGV2LWNhY2hlIFwKKyAgICAgICAgICAgZmlsZTovL3VkZXYtY2FjaGUuZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcnVsZS1zeW50YXgtcmVnZXgtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2luaXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBwdGVzdAorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UgcGVybCBweXRob24iCisKK2xpYmV4ZWNkaXIgPSAiJHtiYXNlX2xpYmRpcn0iCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24gXAorICAgICAgICAgICAgICAgIC0td2l0aC1yb290bGliZGlyPSR7YmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcGNpLWlkcy1wYXRoPSR7ZGF0YWRpcn0vcGNpLmlkcyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fdXNyX3NoYXJlX3BjaV9pZHM9bm8gXAorICAgICAgICAgICAgICAgIGFjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9od2RhdGFfcGNpX2lkcz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fdXNyX3NoYXJlX21pc2NfcGNpX2lkcz15ZXMgXAorICAgICAgICAgICAgICAgIC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gXAorICAgICAgICAgICAgICAgIC0tbGliZXhlY2Rpcj0ke25vbmFyY2hfYmFzZV9saWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcm9vdGxpYmRpcj0ke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLXJvb3RwcmVmaXg9IFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc3lzdGVtZHN5c3RlbXVuaXRkaXIgXAorICAgICAgICAgICAgICAgIgorCitQQUNLQUdFUyA9KyAidWRldi1jYWNoZSIKK1BBQ0tBR0VTID0rICJsaWJ1ZGV2IgorUEFDS0FHRVMgPSsgImxpYmd1ZGV2IgorCitJTklUU0NSSVBUX1BBQ0tBR0VTID0gInVkZXYgdWRldi1jYWNoZSIKK0lOSVRTQ1JJUFRfTkFNRV91ZGV2ID0gInVkZXYiCitJTklUU0NSSVBUX1BBUkFNU191ZGV2ID0gInN0YXJ0IDA0IFMgLiIKK0lOSVRTQ1JJUFRfTkFNRV91ZGV2LWNhY2hlID0gInVkZXYtY2FjaGUiCitJTklUU0NSSVBUX1BBUkFNU191ZGV2LWNhY2hlID0gInN0YXJ0IDM2IFMgLiIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZXhlY2Rpcn0gJHtsaWJkaXJ9L0NvbnNvbGVLaXQgJHtub25hcmNoX2Jhc2VfbGliZGlyfS91ZGV2ICR7YmluZGlyfS91ZGV2YWRtIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gInVkZXYtY2FjaGUiCisKKyMgdWRldi11dGlscyBoYXMgYmVlbiByZW1vdmVkIGFzIGEgcGFja2FnZS4gIE5vdGUgdGhhdCB1ZGV2IGNvbmZsaWN0cyB3aXRoIHVkZXYtdXRpbHMgc28gdGhhdAorIyB1ZGV2LXV0aWxzIGlzIHJlbW92ZWQgZnJvbSBzeXN0ZW1zIG9uIHVwZ3JhZGUuCitSQ09ORkxJQ1RTXyR7UE59ICs9ICJ1ZGV2LXV0aWxzIgorUlJFUExBQ0VTXyR7UE59ICs9ICJ1ZGV2LXV0aWxzIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vLmRlYnVnIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS91ZGV2Ly5kZWJ1Zy8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7YmFzZV9saWJkaXJ9L3VkZXYvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi8uZGVidWcvKiIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2RhdGFkaXJ9L3BrZ2NvbmZpZy91ZGV2LnBjIFwKKyAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L2xpYnVkZXYuaCAke2xpYmRpcn0vbGlidWRldi5zbyAke2xpYmRpcn0vbGlidWRldi5sYSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYnVkZXYuYSAke2xpYmRpcn0vcGtnY29uZmlnL2xpYnVkZXYucGMgXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZ3VkZXYqICR7bGliZGlyfS9saWJndWRldiouc28gJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5sYSBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYmd1ZGV2Ki5hICR7bGliZGlyfS9wa2djb25maWcvZ3VkZXYqLnBjIgorRklMRVNfbGlidWRldiA9ICIke2Jhc2VfbGliZGlyfS9saWJ1ZGV2LnNvLioiCitGSUxFU19saWJndWRldiA9ICIke2Jhc2VfbGliZGlyfS9saWJndWRldiouc28uKiAke2xpYmRpcn0vbGliZ3VkZXYqLnNvLioiCitGSUxFU191ZGV2LWNhY2hlID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYtY2FjaGUgJHtzeXNjb25mZGlyfS9kZWZhdWx0L3VkZXYtY2FjaGUiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2luaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3VkZXYKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91ZGV2LWNhY2hlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2LWNhY2hlCisJc2VkIC1pIHMlQFVERVZEQCUke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2CisJc2VkIC1pIHMlQFVERVZEQCUke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvdWRldmQlICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC91ZGV2LWNhY2hlCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS91ZGV2LWNhY2hlLmRlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91ZGV2LWNhY2hlCisKKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS91ZGV2L2NhY2hlLmRhdGEKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vdWRldi9ydWxlcy5kLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbG9jYWwucnVsZXMgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS91ZGV2L3J1bGVzLmQvbG9jYWwucnVsZXMKKworCSMgaGlkMmhjaSBoYXMgbW92ZWQgdG8gYmx1ZXo0LiByZW1vdmVkIGluIHVkZXYgYXMgb2YgdmVyc2lvbiAxNjkKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vdWRldi9oaWQyaGNpCisKKwllY2hvICd1ZGV2X3J1bj0iL3Zhci9ydW4vdWRldiInID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3VkZXYvdWRldi5jb25mCit9CisKKyMgQXMgc3lzdGVtZCBhbHNvIGJ1aWxkcyB1ZGV2LCBza2lwIHRoaXMgcGFja2FnZSBpZiB3ZSdyZSBkb2luZyBhIHN5c3RlbWQgYnVpbGQuCitweXRob24gKCkgeworICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCInc3lzdGVtZCcgaW4gRElTVFJPX0ZFQVRVUkVTIikKK30KK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgb2VfcnVubWFrZSB0ZXN0LXVkZXYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi8wMDAxLUZpeGluZy1rZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoLXNoZWxsLXNjcmlwdC1wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2LzAwMDEtRml4aW5nLWtleWJvYXJkX2ZvcmNlX3JlbGVhc2Uuc2gtc2hlbGwtc2NyaXB0LXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkZWFmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi8wMDAxLUZpeGluZy1rZXlib2FyZF9mb3JjZV9yZWxlYXNlLnNoLXNoZWxsLXNjcmlwdC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gMGY4MjkwYzk0M2RhMjk4YWJkMjY5Y2E2MGZkODM3NWRmYjIxOTk3MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydSBEQU1JQU4gPGFsZXhhbmRydS5kYW1pYW5AaW50ZWwuY29tPgorRGF0ZTogVGh1LCAxMiBKdWwgMjAxMiAxMjo1NDo0OCArMDMwMAorU3ViamVjdDogW1BBVENIXSBGaXhpbmcga2V5Ym9hcmRfZm9yY2VfcmVsZWFzZS5zaCBzaGVsbCBzY3JpcHQgcGF0aAorCitXaXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygcm9vdHByZWZpeCwgdGhlIGtleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4KK3dhcyBtb2RpZmllZCB0byBiZSBleGVjdXRlZCB3aXRoIEByb290cHJlZml4QC9iaW4vc2gsIHdoaWNoIGlzIHdyb25nCitiZWNhdXNlIEByb290cHJlZml4QCBkZWZhdWx0cyB0byAvdXNyICh3aGljaCBpcyBjb3JyZWN0KSwgYnV0IHRoZQorc2hlbGwgaXMgYWx3YXlzIGF0IC9iaW4vc2ggKElFRUUgU3RkIDEwMDMuMi0xOTkyKS4KKworVGhlcmVmb3JlIHRoZSBpbnRlcnByZXRlciBmb3Igc2hlbGwgc2NyaXB0cyBuZWVkcyB0byBiZSAvYmluL3NoIGF0IGFsbCB0aW1lcy4KKworVGhlIHVwc3RyZWFtIG1vdmVkIHRvIGNvbmZpZ3VyYWJsZSByb290IHByZWZpeCwgdGhpcyBwYXRjaCB0YWNsa2VzIGEgCit0cmFuc2l0aW9uIGJ1ZywgYW5kIHdpbGwgbm90IGJlIGFwcGxpZWQgdXBzdHJlYW0uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGVnYWN5IHZlcnNpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydSBEQU1JQU4gPGFsZXhhbmRydS5kYW1pYW5AaW50ZWwuY29tPgorLS0tCisgc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluIGIvc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCitpbmRleCBkZDA0MGNlLi41OTdhM2E2IDEwMDc1NQorLS0tIGEvc3JjL2tleW1hcC9rZXlib2FyZC1mb3JjZS1yZWxlYXNlLnNoLmluCisrKysgYi9zcmMva2V5bWFwL2tleWJvYXJkLWZvcmNlLXJlbGVhc2Uuc2guaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhQHJvb3RwcmVmaXhAL2Jpbi9zaCAtZQorKyMhL2Jpbi9zaCAtZQorICMgcmVhZCBsaXN0IG9mIHNjYW5jb2RlcywgY29udmVydCBoZXggdG8gZGVjaW1hbCBhbmQKKyAjIGFwcGVuZCB0byB0aGUgYXRrYmQgZm9yY2VfcmVsZWFzZSBzeXNmcyBhdHRyaWJ1dGUKKyAjICQxIHN5c2ZzIGRldnBhdGggZm9yIHNlcmlvWAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hZGQtaW5zdGFsbC1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMyZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2FkZC1pbnN0YWxsLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK0FkanVzdGVtZW50cyBmb3IgcHRlc3Q6CisKKy0gQWRkICdpbnN0YWxsLXB0ZXN0JyBydWxlLgorLSBQcmludCBhIHN0YW5kYXJkIHJlc3VsdCBsaW5lIGZvciBlYWNoIHRlc3QuCistIFJlcGxhY2UgdGhlIHVzZSBvZiAidHJlZSIgd2l0aCAiZmluZCIuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRyYSBTYWZ0YSA8YWxzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBZGQgbWlzc2luZyBmaWxlcyBmb3IgcnVsZS1zeW50YXgtY2hlY2sKKy0gQWRkIHJ1bGUtc3ludGF4LWNoZWNrLnB5CistIEFkZCB0aGUgZGVwbG95ZWQgdWRldiBydWxlcyB0byB0aGUgdGVzdGRhdGEKKworU2lnbmVkLW9mZi1ieTogTWF4IEtydW1tZW5hY2hlciA8bWF4Lm9zcy4wOUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLSBhL01ha2VmaWxlLmFtCTIwMTItMDMtMTggMTY6Mjg6MTQuMDAwMDAwMDAwICswMTAwCisrKysgYi9NYWtlZmlsZS5hbQkyMDEzLTAyLTE4IDEwOjAzOjM2LjUzMTEwMTI0NCArMDEwMAorQEAgLTcwOCwzICs3MDgsMTggQEAKKyAJZm9yIGkgaW4gc3JjL2RvY3MvaHRtbC8qLntodG1sLGNzcyxwbmd9OyBkbyBlY2hvICQkaTsga3VwIHB1dCAkJGkgJCRpLnNpZ24gL3B1Yi9saW51eC91dGlscy9rZXJuZWwvaG90cGx1Zy9saWJ1ZGV2LzsgZG9uZQorIAlmb3IgaSBpbiBzcmMvZ3VkZXYvZG9jcy9odG1sLyoue2h0bWwsY3NzLHBuZ307IGRvIHJtIC1mICQkaS5zaWduOyBncGcgLS1hcm1vciAtLWRldGFjaC1zaWduIC0tb3V0cHV0PSQkaS5zaWduICQkaTsgZG9uZQorIAlmb3IgaSBpbiBzcmMvZ3VkZXYvZG9jcy9odG1sLyoue2h0bWwsY3NzLHBuZ307IGRvIGVjaG8gJCRpOyBrdXAgcHV0ICQkaSAkJGkuc2lnbiAvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL2d1ZGV2LzsgZG9uZQorKworK1JVTEVTID0gcnVsZXMvKiBzcmMvYWNjZWxlcm9tZXRlci82MS1hY2NlbGVyb21ldGVyLnJ1bGVzIFwKKysJIHNyYy9jZHJvbV9pZC82MC1jZHJvbV9pZC5ydWxlcyBcCisrCSBzcmMva2V5bWFwLzk1LWtleWJvYXJkLWZvcmNlLXJlbGVhc2UucnVsZXMgc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMgXAorKwkgc3JjL210ZF9wcm9iZS83NS1wcm9iZV9tdGQucnVsZXMgc3JjL3Y0bF9pZC82MC1wZXJzaXN0ZW50LXY0bC5ydWxlcworKworK2luc3RhbGwtcHRlc3Q6CisrCWluc3RhbGwgdGVzdC11ZGV2ICQoREVTVERJUikKKysJY3AgTWFrZWZpbGUgJChERVNURElSKQorKwlzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJChERVNURElSKS9NYWtlZmlsZQorKwlpbnN0YWxsIC1kICQoREVTVERJUikvdGVzdCAkKERFU1RESVIpL3J1bGVzCisrCShjZCAkKHRvcF9zcmNkaXIpICYmIGluc3RhbGwgJChURVNUUykgJChERVNURElSKS90ZXN0KQorKwkoY2QgJCh0b3Bfc3JjZGlyKSAmJiBpbnN0YWxsIHRlc3QvcnVsZS1zeW50YXgtY2hlY2sucHkgJChERVNURElSKS90ZXN0KQorKwkoY2QgJCh0b3Bfc3JjZGlyKSAmJiBpbnN0YWxsICQoUlVMRVMpICQoREVTVERJUikvcnVsZXMpCisrCWNwICQodG9wX3NyY2RpcikvdGVzdC9zeXMudGFyLnh6ICQoREVTVERJUikvdGVzdC8KKy0tLSBhL3Rlc3QvdWRldi10ZXN0LnBsCTIwMTItMDMtMTggMTY6NDM6MzYuMDAwMDAwMDAwICswMTAwCisrKysgYi90ZXN0L3VkZXYtdGVzdC5wbAkyMDEzLTAyLTE4IDEwOjMxOjI5LjcwNjM1NzMyMSArMDEwMAorQEAgLTE0NTksMTEgKzE0NTksMTMgQEAKKyAgICAgICAgICAgICAgICAgcHJpbnQgImFkZDogICAgICAgICBlcnJvciI7CisgICAgICAgICAgICAgICAgIGlmICgkcnVsZXMtPntleHBfYWRkX2Vycm9yfSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICIgYXMgZXhwZWN0ZWRcbiI7CisrICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlhGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiBhZGRcbiI7CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKy0gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oInRyZWUgJHVkZXZfcm9vdCIpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZmluZCAkdWRldl9yb290Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAkZXJyb3IrKzsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiRkFJTDogVEVTVCAkbnVtYmVyOiAkcnVsZXMtPntkZXNjfTogYWRkXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgIHNsZWVwKDEpOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICB9CitAQCAtMTQ3OSwxNSArMTQ4MSwxOCBAQAorICAgICAgICAgICAgICAgICBwcmludCAicmVtb3ZlOiAgICAgIGVycm9yIjsKKyAgICAgICAgICAgICAgICAgaWYgKCRydWxlcy0+e2V4cF9yZW1fZXJyb3J9KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiBhcyBleHBlY3RlZFxuIjsKKysgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiWEZBSUw6IFRFU1QgJG51bWJlcjogJHJ1bGVzLT57ZGVzY306IHJlbW92ZVxuIjsKKyAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOworLSAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgidHJlZSAkdWRldl9yb290Iik7CisrICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtKCJmaW5kICR1ZGV2X3Jvb3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcisrOworKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiByZW1vdmVcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAoMSk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgIHByaW50ICJyZW1vdmU6ICAgICAgb2tcbiI7CisrICAgICAgICAgICAgICAgIHByaW50ICJQQVNTOiBURVNUICRudW1iZXI6ICRydWxlcy0+e2Rlc2N9OiByZW1vdmVcbiI7CisgICAgICAgICB9CisgCisgICAgICAgICBwcmludCAiXG4iOworLS0tIGEvY29uZmlndXJlLmFjICAgICAgMjAxMy0xMS0yOCAwOToxNDowMi44MTQyNDg4MjYgKzAxMDAKKysrKyBiL2NvbmZpZ3VyZS5hYyAgICAgIDIwMTMtMTEtMjggMDk6MTQ6MzQuMjYwODc0Mjk2ICswMTAwCitAQCAtNiw3ICs2LDcgQEAKKyAgICAgICAgW2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvdWRldi5odG1sXSkKKyBBQ19DT05GSUdfU1JDRElSKFtzcmMvdWRldmQuY10pCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCistQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgLVdhbGwgLVduby1wb3J0YWJpbGl0eSBzaWxlbnQtcnVsZXMgdGFyLXBheCBuby1kaXN0LWd6aXAgZGlzdC14eiBzdWJkaXItb2JqZWN0c10pCisrQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgLVdhbGwgLVduby1wb3J0YWJpbGl0eSBzaWxlbnQtcnVsZXMgdGFyLXBheCBuby1kaXN0LWd6aXAgZGlzdC14eiBzdWJkaXItb2JqZWN0cyBzZXJpYWwtdGVzdHNdKQorIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIEFDX1NZU19MQVJHRUZJTEUKKyBBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9hdm9pZC1tb3VzZS1hdXRvc3VzcGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzMxYjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2F2b2lkLW1vdXNlLWF1dG9zdXNwZW5kLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1NvdXJjZTogaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL3N5c3RlbWQvc3lzdGVtZC9jb21taXQvcnVsZXMvNDItdXNiLWhpZC1wbS5ydWxlcz9pZD1lMDM4NmNmMjgwOTIxOWJiZGQzMDg5NWY0NmYxZjU2N2I1NjkwMmI2CisKK1NvbWUgVVNCIHBvcnRzIG9uIGV4dGVybmFsIGh1YnMgbWF5IGJlIHJlcG9ydGVkIGFzICJmaXhlZCIuIFdlIG9ubHkgd2FudAordG8gYXV0by1lbmFibGUgdGhpcyBvbiBwb3J0cyB0aGF0IGFyZSBpbnRlcm5hbCB0byB0aGUgbWFjaGluZSwgc28gY2hlY2sKK3RoZSBwYXJlbnQgc3RhdGUgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMy8wOS8xMworCitJbmRleDogdWRldi0xODIvcnVsZXMvNDItdXNiLWhpZC1wbS5ydWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVkZXYtMTgyLm9yaWcvcnVsZXMvNDItdXNiLWhpZC1wbS5ydWxlcworKysrIHVkZXYtMTgyL3J1bGVzLzQyLXVzYi1oaWQtcG0ucnVsZXMKK0BAIC00Niw0ICs0Niw5IEBAIEFDVElPTj09ImFkZCIsIFNVQlNZU1RFTT09InVzYiIsIEFUVFJTe2kKKyBBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBBVFRSe2lkVmVuZG9yfT09IjE0ZGQiLCBBVFRSe2lkUHJvZHVjdH09IjAwMDIiLCBURVNUPT0icG93ZXIvY29udHJvbCIsIEFUVFJ7cG93ZXIvY29udHJvbH09ImF1dG8iCisKKyAjIFVTQiBISUQgZGV2aWNlcyB0aGF0IGFyZSBpbnRlcm5hbCB0byB0aGUgbWFjaGluZSBzaG91bGQgYWxzbyBiZSBzYWZlIHRvIGF1dG9zdXNwZW5kCisrIyBBbmQgc2tpcCBpdCBmb3IgZGV2aWNlcyB3aGljaCBhcmUgZXh0ZXJuYWwgYnV0IHNheSAiZml4ZWQiCisrQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0idXNiIiwgU1VCU1lTVEVNUz09InVzYiIsIEFUVFJTe3JlbW92YWJsZX09PSJyZW1vdmFibGUiLCBHT1RPPSJ1c2JfaGlkX3BtX2VuZCIKKytBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBTVUJTWVNURU1TPT0idXNiIiwgQVRUUlN7cmVtb3ZhYmxlfT09InVua25vd24iLCBHT1RPPSJ1c2JfaGlkX3BtX2VuZCIKKyBBQ1RJT049PSJhZGQiLCBTVUJTWVNURU09PSJ1c2IiLCBBVFRSe2JJbnRlcmZhY2VDbGFzc309PSIwMyIsIEFUVFJTe3JlbW92YWJsZX09PSJmaXhlZCIsIFRFU1Q9PSIuLi9wb3dlci9jb250cm9sIiwgQVRUUnsuLi9wb3dlci9jb250cm9sfT0iYXV0byIKKytMQUJFTD0idXNiX2hpZF9wbV9lbmQiCisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZGV2ZnMtdWRldi5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9kZXZmcy11ZGV2LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYTFhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZGV2ZnMtdWRldi5ydWxlcwpAQCAtMCwwICsxLDEwOCBAQAorIyBUaGUgdXNlIG9mIHRoZXNlIHJ1bGVzIGlzIG5vdCByZWNvbW1lbmRlZCBvciBzdXBwb3J0ZWQuCisjIEluIGEgd29ybGQgd2hlcmUgZGV2aWNlcyBjYW4gY29tZSBhbmQgZ28gYXQgYW55IHRpbWUsIHRoZSBkZXZmcyBzY2hlbWUKKyMgb2Ygc2ltcGxlIGRldmljZSBlbnVtZXJhdGlvbiBkb2VzIG5vdCBoZWxwIF9hbnl0aGluZ18uIEp1c3QgZm9yZ2V0IGFib3V0CisjIGl0LiBVc2UgY3VzdG9tIHJ1bGVzIHRvIG5hbWUgeW91ciBkZXZpY2Ugb3IgbG9vayBhdCB0aGUgcGVyc2lzdGVudCBkZXZpY2UKKyMgbmFtaW5nIHNjaGVtZSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgZm9yIGRpc2tzIGFuZCBhZGQgeW91ciBzdWJzeXN0ZW0uCisKKyMgaWRlIGJsb2NrIGRldmljZXMKK0JVUz0iaWRlIiwgS0VSTkVMPSJoZCoiLCBQUk9HUkFNPSIvZXRjL3VkZXYvaWRlLWRldmZzLnNoICVrICViICVuIiwgTkFNRT0iJWsiLCBTWU1MSU5LPSIlY3sxfSAlY3syfSIKKworIyBtZCBibG9jayBkZXZpY2VzCitLRVJORUw9Im1kWzAtOV0qIiwgTkFNRT0ibWQvJW4iCisKKyMgZmxvcHB5IGRldmljZXMKK0tFUk5FTD0iZmRbMC05XSoiLCBOQU1FPSJmbG9wcHkvJW4iCisKKyMgdHR5IGRldmljZXMKK0tFUk5FTD0idHR5WzAtOV0qIiwgICAgTkFNRT0idmMvJW4iLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0idHR5U1swLTldKiIsICAgTkFNRT0idHRzLyVuIiwgU1lNTElOSz0iJWsiCitLRVJORUw9InR0eVVTQlswLTldKiIsIE5BTUU9InR0cy9VU0IlbiIKKworIyB2YyBkZXZpY2VzCitLRVJORUw9InZjcyIsICAgICAgICBOQU1FPSJ2Y2MvMCIKK0tFUk5FTD0idmNzWzAtOV0qIiwgIE5BTUU9InZjYy8lbiIKK0tFUk5FTD0idmNzYSIsICAgICAgIE5BTUU9InZjYy9hMCIKK0tFUk5FTD0idmNzYVswLTldKiIsIE5BTUU9InZjYy9hJW4iCisKKyMgdjRsIGRldmljZXMKK0tFUk5FTD0idmlkZW9bMC05XSoiLCBOQU1FPSJ2NGwvdmlkZW8lbiIKK0tFUk5FTD0icmFkaW9bMC05XSoiLCBOQU1FPSJ2NGwvcmFkaW8lbiIKK0tFUk5FTD0idmJpWzAtOV0qIiwgICBOQU1FPSJ2NGwvdmJpJW4iCitLRVJORUw9InZ0eFswLTldKiIsICAgTkFNRT0idjRsL3Z0eCVuIgorCisjIGRtIGRldmljZXMgKGlnbm9yZSB0aGVtKQorS0VSTkVMPSJkbS1bMC05XSoiLCBOQU1FPSIiCisKKyMgaTJjIGRldmljZXMKK0tFUk5FTD0iaTJjLVswLTldKiIsIE5BTUU9ImkyYy8lbiIsIFNZTUxJTks9IiVrIgorCisjIGxvb3AgZGV2aWNlcworS0VSTkVMPSJsb29wWzAtOV0qIiwgTkFNRT0ibG9vcC8lbiIsIFNZTUxJTks9IiVrIgorCisjIHJhbWRpc2tzCitLRVJORUw9InJhbVswLTldKiIsIE5BTUU9InJkLyVuIiwgU1lNTElOSz0iJWsiCisKKyMgZnJhbWVidWZmZXIgZGV2aWNlcworS0VSTkVMPSJmYlswLTldKiIsIE5BTUU9ImZiLyVuIiwgU1lNTElOSz0iJWsiCisKKyMgbWlzYworS0VSTkVMPSJydGMiLCAgICAgTkFNRT0ibWlzYy8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJwc2F1eCIsICAgTkFNRT0ibWlzYy8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJhZ3BnYXJ0IiwgTkFNRT0ibWlzYy8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJydGMiLCAgICAgTkFNRT0ibWlzYy8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJwc2F1eCIsICAgTkFNRT0ibWlzYy8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJ1aW5wdXQiLCAgTkFNRT0ibWlzYy8layIsIFNZTUxJTks9IiVrIgorCisjIGFsc2EgZGV2aWNlcworS0VSTkVMPSJjb250cm9sQ1swLTldKiIsIE5BTUU9InNuZC8layIKK0tFUk5FTD0iaHdbQ0QwLTldKiIsICAgICBOQU1FPSJzbmQvJWsiCitLRVJORUw9InBjbVtDRDAtOWNwXSoiLCAgTkFNRT0ic25kLyVrIgorS0VSTkVMPSJtaWRpW0NEMC05XSoiLCAgIE5BTUU9InNuZC8layIKK0tFUk5FTD0idGltZXIiLCAgICAgICAgICBOQU1FPSJzbmQvJWsiCitLRVJORUw9InNlcSIsICAgICAgICAgICAgTkFNRT0ic25kLyVrIgorCisjIG9zcyBkZXZpY2VzCitLRVJORUw9ImF1ZGlvKiIsICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJkbW1pZGkiLCAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0iZHNwKiIsICAgICAgIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCitLRVJORUw9Im1pZGkqIiwgICAgICBOQU1FPSJzb3VuZC8layIsIFNZTUxJTks9IiVrIgorS0VSTkVMPSJtaXhlcioiLCAgICAgTkFNRT0ic291bmQvJWsiLCBTWU1MSU5LPSIlayIKK0tFUk5FTD0ic2VxdWVuY2VyKiIsIE5BTUU9InNvdW5kLyVrIiwgU1lNTElOSz0iJWsiCisKKyMgaW5wdXQgZGV2aWNlcworS0VSTkVMPSJtaWNlIiwgICBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0ibW91c2UqIiwgTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9ImV2ZW50KiIsIE5BTUU9ImlucHV0LyVrIgorS0VSTkVMPSJqcyoiLCAgICBOQU1FPSJpbnB1dC8layIKK0tFUk5FTD0idHMqIiwJIE5BTUU9ImlucHV0LyVrIgorCisjIFVTQiBkZXZpY2VzCitLRVJORUw9ImhpZGRldioiLAlOQU1FPSJ1c2IvJWsiCitLRVJORUw9ImF1ZXIqIiwJCU5BTUU9InVzYi8layIKK0tFUk5FTD0ibGVnb3VzYnRvd2VyKiIsCU5BTUU9InVzYi8layIKK0tFUk5FTD0iZGFidXNiKiIsCU5BTUU9InVzYi8layIKK0JVUz0idXNiIiwgS0VSTkVMPSJscFswLTldKiIsCU5BTUU9InVzYi8layIKKworIyBuZXRsaW5rIGRldmljZXMKK0tFUk5FTD0icm91dGUiLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0ic2tpcCIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ1c2Vyc29jayIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImZ3bW9uaXRvciIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InRjcGRpYWciLAlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJuZmxvZyIsCQlOQU1FPSJuZXRsaW5rLyVrIgorS0VSTkVMPSJ4ZnJtIiwJCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9ImFycGQiLAkJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0icm91dGU2IiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0iaXA2X2Z3IiwJTkFNRT0ibmV0bGluay8layIKK0tFUk5FTD0iZG5ydG1zZyIsCU5BTUU9Im5ldGxpbmsvJWsiCitLRVJORUw9InRhcCoiLAkJTkFNRT0ibmV0bGluay8layIKKworIyBDQVBJIGRldmljZXMKK0tFUk5FTD0iY2FwaSIsCQlOQU1FPSJjYXBpMjAiLCBTWU1MSU5LPSJpc2RuL2NhcGkyMCIKK0tFUk5FTD0iY2FwaSoiLAkJTkFNRT0iY2FwaS8lbiIKKworIyBOZXR3b3JrIGRldmljZXMKK0tFUk5FTD0idHVuIiwJCU5BTUU9Im5ldC8layIKKworIyByYXcgZGV2aWNlcworS0VSTkVMPSJyYXdbMC05XSoiLCAgICAgTkFNRT0icmF3LyVrIiAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9maXhfcnVsZS1zeW50YXgtcmVnZXgtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5M2M0NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvZml4X3J1bGUtc3ludGF4LXJlZ2V4LXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1RoZSBydWxlLXN5bnRheC1jaGVjayBzY3JpcHQgZmFpbHMgd2l0aCBlcnJvcnMgbGlrZSB0aGlzOgorCitJbnZhbGlkIGxpbmUgL2xpYi91ZGV2L3J1bGVzLmQvOTUta2V5bWFwLnJ1bGVzOjQ5OiBFTlZ7RE1JX1ZFTkRPUn09PSJBU1VTKiIsIEtFUk5FTFM9PSJpbnB1dCoiLCBBVFRSU3tuYW1lfT09IkFzdXMgRXh0cmEgQnV0dG9ucyIsIEFUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iVzNKIiwgUlVOKz0ia2V5bWFwICRuYW1lIG1vZHVsZS1hc3VzLXczaiIKKygnICBjbGF1c2U6JywgJ0FUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iVzNKIicpCisoKQorCisKK01vdmUgbGluZSBjb21tZW50IGZyb20gZW5kIG9mIHJ1bGVzIGZpbGUgdG8gaXRzIG93biBsaW5lLCB0aGUgcmVnZXggdXNlZCB0bwordGVzdCBjb3JyZWN0IHN5bnRheCBjaG9rZSBvbiBpdC4KKworVGhlIHJ1bGUtc3ludGF4LWNoZWNrLnB5IHVzZXMgcmVnZXggd2hpY2ggZXJyb3VybmVzc2x5IGNvbXBsYWlucyBvbiBBVFRSIHJ1bGVzCitvZiB0aGUgZm9ybSBBVFRSe1tkbWkvaWRdYm9hcmRfbmFtZX09PSIzMEI3IgorVXNlIHRoZSByZWdleCBmcm9tIHN5c3RlbWQncyBzY3JpcHQgd2hpY2ggYWxsb3cgW10gY2hhcmFjdGVycyBhbmQgYWRkaXRpb25hbAorY29tcGFyZSBvcGVyYXRvcnMKKworVGhlIE1ha2VmaWxlIHBhc3NlcyBydWxlcy10ZXN0LnNoIHNjcmlwdCBhIGJ1aWxkIGhvc3QgcGF0aCB0byB0aGUgdGVzdGRhdGEuCitJZ25vcmUgdGhlIGFyZ3VtZW50IGFuZCB1c2UgYSByZWxhdGl2ZSBwYXRoIGluc3RlYWQuCisKKworU2lnbmVkLW9mZi1ieTogTWF4IEtydW1tZW5hY2hlciA8bWF4Lm9zcy4wOUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKGNyb3NzIGVudmlyb25tZW50IHBhdGgpCisKK2RpZmYgLU5hdXIgdWRldi0xODIub3JpZy9zcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcyB1ZGV2LTE4Mi9zcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcworLS0tIHVkZXYtMTgyLm9yaWcvc3JjL2tleW1hcC85NS1rZXltYXAucnVsZXMJMjAxMi0wMi0wNyAwMDowMTo1NS4xNTQ2NDA3OTIgKzAxMDAKKysrKyB1ZGV2LTE4Mi9zcmMva2V5bWFwLzk1LWtleW1hcC5ydWxlcwkyMDE1LTAxLTI0IDIwOjU4OjQwLjE1NjkzMDUyMCArMDEwMAorQEAgLTk0LDcgKzk0LDggQEAKKyBFTlZ7RE1JX1ZFTkRPUn09PSJIZXdsZXR0LVBhY2thcmQiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IkhQIEc2MiBOb3RlYm9vayBQQyIsIFJVTis9ImtleW1hcCAkbmFtZSAweEIyIHd3dyIKKyBFTlZ7RE1JX1ZFTkRPUn09PSJIZXdsZXR0LVBhY2thcmQiLCBBVFRSe1tkbWkvaWRdcHJvZHVjdF9uYW1lfT09IkhQIFByb0Jvb2sqIiwgUlVOKz0ia2V5bWFwICRuYW1lIDB4RjggcmZraWxsIgorICMgSFAgUGF2aWxsaW9uIGR2NjMxNWVhIGhhcyBlbXB0eSBETUlfVkVORE9SCistQVRUUntbZG1pL2lkXWJvYXJkX3ZlbmRvcn09PSJRdWFudGEiLCBBVFRSe1tkbWkvaWRdYm9hcmRfbmFtZX09PSIzMEI3IiwgQVRUUntbZG1pL2lkXWJvYXJkX3ZlcnNpb259PT0iNjUuMkIiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHg4OCBtZWRpYSIgIyAicXVpY2sgcGxheQorKyMgInF1aWNrIHBsYXkiCisrQVRUUntbZG1pL2lkXWJvYXJkX3ZlbmRvcn09PSJRdWFudGEiLCBBVFRSe1tkbWkvaWRdYm9hcmRfbmFtZX09PSIzMEI3IiwgQVRUUntbZG1pL2lkXWJvYXJkX3ZlcnNpb259PT0iNjUuMkIiLCBSVU4rPSJrZXltYXAgJG5hbWUgMHg4OCBtZWRpYSIKKyAKKyAjIEdhdGV3YXkgY2xvbmUgb2YgQWNlciBBc3BpcmUgT25lIEFPQTExMC9BT0ExNTAKKyBFTlZ7RE1JX1ZFTkRPUn09PSJHYXRld2F5KiIsIEFUVFJ7W2RtaS9pZF1wcm9kdWN0X25hbWV9PT0iKkFPQTEqIiwgUlVOKz0ia2V5bWFwICRuYW1lIGFjZXIiCitkaWZmIC1OYXVyIHVkZXYtMTgyLm9yaWcvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weSB1ZGV2LTE4Mi90ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5CistLS0gdWRldi0xODIub3JpZy90ZXN0L3J1bGUtc3ludGF4LWNoZWNrLnB5CTIwMTItMDItMTUgMjA6MTA6MTIuODcyMzMzMzQyICswMTAwCisrKysgdWRldi0xODIvdGVzdC9ydWxlLXN5bnRheC1jaGVjay5weQkyMDE1LTAxLTI0IDIxOjA4OjAwLjQ5NjA0OTYwMCArMDEwMAorQEAgLTI4LDcgKzI4LDcgQEAKKyBub19hcmdzX3Rlc3RzID0gcmUuY29tcGlsZSgnKEFDVElPTnxERVZQQVRIfEtFUk5FTFM/fE5BTUV8U1lNTElOS3xTVUJTWVNURU1TP3xEUklWRVJTP3xUQUd8UkVTVUxUfFRFU1QpXHMqKD86PXwhKT1ccyoiKFteIl0qKSIkJykKKyBhcmdzX3Rlc3RzID0gcmUuY29tcGlsZSgnKEFUVFJTP3xFTlZ8VEVTVCl7KFthLXpBLVowLTkvXy4qJS1dKyl9XHMqKD86PXwhKT1ccyoiKFteIl0qKSIkJykKKyBub19hcmdzX2Fzc2lnbiA9IHJlLmNvbXBpbGUoJyhOQU1FfFNZTUxJTkt8T1dORVJ8R1JPVVB8TU9ERXxUQUd8UFJPR1JBTXxSVU58TEFCRUx8R09UT3xXQUlUX0ZPUnxPUFRJT05TfElNUE9SVClccyooPzpcKz18Oj18PSlccyoiKFteIl0qKSIkJykKKy1hcmdzX2Fzc2lnbiA9IHJlLmNvbXBpbGUoJyhBVFRSfEVOVnxJTVBPUlQpeyhbYS16QS1aMC05L18uKiUtXSspfVxzKj1ccyoiKFteIl0qKSIkJykKKythcmdzX2Fzc2lnbiA9IHJlLmNvbXBpbGUoJyhBVFRSfEVOVnxJTVBPUlR8UlVOKXsoW11bYS16QS1aMC05L18uKiUtXSspfVxzKig9fD09fFwrPSlccyoiKFteIl0qKSIkJykKKyAKKyByZXN1bHQgPSAwCisgYnVmZmVyID0gJycKKy0tLSB1ZGV2LTE4Mi5vcmlnL3Rlc3QvcnVsZXMtdGVzdC5zaAkyMDEyLTAxLTI5IDAxOjE1OjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIHVkZXYtMTgyL3Rlc3QvcnVsZXMtdGVzdC5zaAkyMDE1LTAxLTI0IDE3OjUzOjUxLjIwMTg1ODY1OCArMDEwMAorQEAgLTQsNyArNCw3IEBACisgIyAoQykgMjAxMCBDYW5vbmljYWwgTHRkLgorICMgQXV0aG9yOiBNYXJ0aW4gUGl0dCA8bWFydGluLnBpdHRAdWJ1bnR1LmNvbT4KKyAKKy1bIC1uICIkc3JjZGlyIiBdIHx8IHNyY2Rpcj1gZGlybmFtZSAkMGAvLi4KKytzcmNkaXI9YGRpcm5hbWUgJDBgLy4uCisgCisgIyBza2lwIGlmIHdlIGRvbid0IGhhdmUgcHl0aG9uCisgdHlwZSBweXRob24gPi9kZXYvbnVsbCAyPiYxIHx8IHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9pbml0IGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2luaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiMDI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9pbml0CkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogICAgICAgICAgdWRldgorIyBSZXF1aXJlZC1TdGFydDogICAgbW91bnR2aXJ0ZnMKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdGFydCB1ZGV2ZCwgcG9wdWxhdGUgL2RldiBhbmQgbG9hZCBkcml2ZXJzLgorIyMjIEVORCBJTklUIElORk8KKworZXhwb3J0IFRaPS9ldGMvbG9jYWx0aW1lCisKK1sgLWQgL3N5cy9jbGFzcyBdIHx8IGV4aXQgMQorWyAtciAvcHJvYy9tb3VudHMgXSB8fCBleGl0IDEKK1sgLXggQFVERVZEQCBdIHx8IGV4aXQgMQorU1lTQ09ORl9DQUNIRUQ9Ii9ldGMvdWRldi9jYWNoZS5kYXRhIgorU1lTQ09ORl9UTVA9Ii9kZXYvc2htL3VkZXYuY2FjaGUiCitERVZDQUNIRV9SRUdFTj0iL2Rldi9zaG0vdWRldi1yZWdlbiIgIyBjcmVhdGUgdG8gcmVxdWVzdCBjYWNoZSByZWdlbgorCisjIEEgbGlzdCBvZiBmaWxlcyB3aGljaCBhcmUgdXNlZCBhcyBhIGNyaXRlcmlhIHRvIGp1ZGdlIHdoZXRoZXIgdGhlIHVkZXYgY2FjaGUgY291bGQgYmUgcmV1c2VkLgorQ01QX0ZJTEVfTElTVD0iL3Byb2MvdmVyc2lvbiAvcHJvYy9jbWRsaW5lIC9wcm9jL2RldmljZXMiCitbIC1mIC9wcm9jL2F0YWdzIF0gJiYgQ01QX0ZJTEVfTElTVD0iJENNUF9GSUxFX0xJU1QgL3Byb2MvYXRhZ3MiCisKKyMgTGlzdCBvZiBmaWxlcyB3aG9zZSBtZXRhZGF0YSAoc2l6ZS9tdGltZS9uYW1lKSB3aWxsIGJlIGluY2x1ZGVkIGluIGNhY2hlZAorIyBzeXN0ZW0gc3RhdGUuCitNRVRBX0ZJTEVfTElTVD0ibGliL3VkZXYvcnVsZXMuZC8qIGV0Yy91ZGV2L3J1bGVzLmQvKiIKKworIyBDb21tYW5kIHRvIGNvbXB1dGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCitzeXNjb25mX2NtZCAoKSB7CisJY2F0IC0tICRDTVBfRklMRV9MSVNUCisJc3RhdCAtYyAnJXMgJVkgJW4nIC0tICRNRVRBX0ZJTEVfTElTVCB8IGF3ayAtRi8gJ3twcmludCAkMSAiICIgJE5GO30nCit9CisKK1sgLWYgL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUgXSAmJiAuIC9ldGMvZGVmYXVsdC91ZGV2LWNhY2hlCitbIC1mIC9ldGMvdWRldi91ZGV2LmNvbmYgXSAmJiAuIC9ldGMvdWRldi91ZGV2LmNvbmYKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworCitraWxsX3VkZXZkICgpIHsKKyAgICBwaWQ9YHBpZG9mIC14IHVkZXZkYAorICAgIFsgLW4gIiRwaWQiIF0gJiYga2lsbCAkcGlkCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICBleHBvcnQgQUNUSU9OPWFkZAorICAgICMgcHJvcGFnYXRlIC9kZXYgZnJvbSAvc3lzCisgICAgZWNobyAiU3RhcnRpbmcgdWRldiIKKworICAgICMgQ2hlY2sgZm9yIHJlcXVpcmVlZCBkZXZ0bXBmcyBiZWZvcmUgdHJ5aW5nIHRvIHN0YXJ0IHVkZXYgYW5kCisgICAgIyBtb3VudCBhIG5vLWV4aXN0YW50IGZzLgorICAgIGlmICEgZ3JlcCAtcSBkZXZ0bXBmcyAvcHJvYy9maWxlc3lzdGVtcworICAgIHRoZW4KKyAgICAgICAgZWNobyAiTWlzc2luZyBkZXZ0bXBmcywgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHVkZXYgdG8gcnVuIjsKKyAgICAgICAgZWNobyAiSGFsdGluZy4uLiIKKyAgICAgICAgaGFsdAorICAgIGZpCisgICAgIyBtb3VudCB0aGUgZGV2dG1wZnMgb24gL2RldiwgaWYgbm90IGFscmVhZHkgZG9uZQorICAgIExBTkc9QyBhd2sgJyQyID09ICIvZGV2IiAmJiAoJDMgPT0gImRldnRtcGZzIikgeyBleGl0IDEgfScgL3Byb2MvbW91bnRzICYmIHsKKyAgICAgICAgICAgIG1vdW50IC1uIC1vIG1vZGU9MDc1NSAtdCBkZXZ0bXBmcyBub25lICIvZGV2IgorICAgIH0KKyAgICBbIC1lIC9kZXYvcHRzIF0gfHwgbWtkaXIgLW0gMDc1NSAvZGV2L3B0cworICAgIFsgLWUgL2Rldi9zaG0gXSB8fCBta2RpciAtbSAxNzc3IC9kZXYvc2htCisgICAgIyB0aGUgYXV0b21vdW50IHJ1bGUgZm9yIHVkZXYgbmVlZHMgL3RtcCBkaXJlY3RvcnkgYXZhaWxhYmxlLCBhcyAvdG1wIGlzIGEgc3ltbGluaworICAgICMgdG8gL3Zhci90bXAgd2hpY2ggaW4gdHVybiBpcyBhIHN5bWxpbmsgdG8gL3Zhci92b2xhdGlsZS90bXAsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCisgICAgIyAvdmFyL3ZvbGF0aWxlL3RtcCBkaXJlY3RvcnkgdG8gYmUgYXZhaWxhYmxlLgorICAgIG1rZGlyIC1tIDE3NzcgLXAgL3Zhci92b2xhdGlsZS90bXAKKworICAgICMgQ2FjaGUgaGFuZGxpbmcuCisgICAgaWYgWyAiJERFVkNBQ0hFIiAhPSAiIiBdOyB0aGVuCisgICAgICAgICAgICBpZiBbIC1lICRERVZDQUNIRSBdOyB0aGVuCisJCSAgICBzeXNjb25mX2NtZCA+ICIkU1lTQ09ORl9UTVAiCisJCSAgICBpZiBjbXAgJFNZU0NPTkZfQ0FDSEVEICRTWVNDT05GX1RNUCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyIHhtZiAkREVWQ0FDSEUgLUMgLyAtbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdF9maXJzdF9ib290PTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICIkVkVSQk9TRSIgIT0gIm5vIiBdICYmIGVjaG8gInVkZXY6IHVzaW5nIGNhY2hlIGZpbGUgJERFVkNBQ0hFIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgLWUgJFNZU0NPTkZfVE1QIF0gJiYgcm0gLWYgIiRTWVNDT05GX1RNUCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIC1lICIkREVWQ0FDSEVfUkVHRU4iIF0gJiYgcm0gLWYgIiRERVZDQUNIRV9SRUdFTiIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorCQkJICAgICMgT3V0cHV0IGRldGFpbGVkIHJlYXNvbiB3aHkgdGhlIGNhY2hlZCAvZGV2IGlzIG5vdCB1c2VkCisJCQkgICAgY2F0IDw8RU9GCit1ZGV2OiBOb3QgdXNpbmcgdWRldiBjYWNoZSBiZWNhdXNlIG9mIGNoYW5nZXMgZGV0ZWN0ZWQgaW4gdGhlIGZvbGxvd2luZyBmaWxlczoKK3VkZXY6ICAgICAkQ01QX0ZJTEVfTElTVAordWRldjogICAgICRNRVRBX0ZJTEVfTElTVAordWRldjogVGhlIHVkZXYgY2FjaGUgd2lsbCBiZSByZWdlbmVyYXRlZC4gVG8gaWRlbnRpZnkgdGhlIGRldGVjdGVkIGNoYW5nZXMsCit1ZGV2OiBjb21wYXJlIHRoZSBjYWNoZWQgc3lzY29uZiBhdCAgICRTWVNDT05GX0NBQ0hFRAordWRldjogYWdhaW5zdCB0aGUgY3VycmVudCBzeXNjb25mIGF0ICAkU1lTQ09ORl9UTVAKK0VPRgorCQkJICAgIHRvdWNoICIkREVWQ0FDSEVfUkVHRU4iCisgICAgICAgICAgICAgICAgICAgIGZpCisJICAgIGVsc2UKKwkJICAgIGlmIFsgIiRST09URlNfUkVBRF9PTkxZIiAhPSAieWVzIiBdOyB0aGVuCisJCQkgICAgIyBJZiByb290ZnMgaXMgbm90IHJlYWQtb25seSwgaXQncyBwb3NzaWJsZSB0aGF0IGEgbmV3IHVkZXYgY2FjaGUgd291bGQgYmUgZ2VuZXJhdGVkOworCQkJICAgICMgb3RoZXJ3aXNlLCB3ZSBkbyBub3QgYm90aGVyIHRvIHJlYWQgZmlsZXMuCisJCQkgICAgdG91Y2ggIiRERVZDQUNIRV9SRUdFTiIKKwkJICAgIGZpCisgICAgICAgICAgICBmaQorICAgIGZpCisKKyAgICAjIG1ha2VfZXh0cmFfbm9kZXMKKyAgICBraWxsX3VkZXZkID4gIi9kZXYvbnVsbCIgMj4mMQorCisgICAgIyB0cmlnZ2VyIHRoZSBzb3J0ZWQgZXZlbnRzCisgICAgWyAtZSAvcHJvYy9zeXMva2VybmVsL2hvdHBsdWcgXSAmJiBlY2hvIC1lICdcMDAwJyA+L3Byb2Mvc3lzL2tlcm5lbC9ob3RwbHVnCisgICAgQFVERVZEQCAtZAorCisgICAgdWRldmFkbSBjb250cm9sIC0tZW52PVNUQVJUVVA9MQorICAgIGlmIFsgIiRub3RfZmlyc3RfYm9vdCIgIT0gIiIgXTt0aGVuCisgICAgICAgICAgICBpZiBbICIkUFJPQkVfUExBVEZPUk1fQlVTIiAhPSAieWVzIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgUExBVEZPUk1fQlVTX05PTUFUQ0g9Ii0tc3Vic3lzdGVtLW5vbWF0Y2g9cGxhdGZvcm0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUExBVEZPUk1fQlVTX05PTUFUQ0g9IiIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICB1ZGV2YWRtIHRyaWdnZXIgLS1hY3Rpb249YWRkIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dHR5IC0tc3Vic3lzdGVtLW5vbWF0Y2g9bWVtIC0tc3Vic3lzdGVtLW5vbWF0Y2g9dmMgLS1zdWJzeXN0ZW0tbm9tYXRjaD12dGNvbnNvbGUgLS1zdWJzeXN0ZW0tbm9tYXRjaD1taXNjIC0tc3Vic3lzdGVtLW5vbWF0Y2g9ZGNvbiAtLXN1YnN5c3RlbS1ub21hdGNoPXBjaV9idXMgLS1zdWJzeXN0ZW0tbm9tYXRjaD1ncmFwaGljcyAtLXN1YnN5c3RlbS1ub21hdGNoPWJhY2tsaWdodCAtLXN1YnN5c3RlbS1ub21hdGNoPXZpZGVvNGxpbnV4ICRQTEFURk9STV9CVVNfTk9NQVRDSAorICAgICAgICAgICAgKHVkZXZhZG0gc2V0dGxlIC0tdGltZW91dD0zOyB1ZGV2YWRtIGNvbnRyb2wgLS1lbnY9U1RBUlRVUD0pJgorICAgIGVsc2UKKyAgICAgICAgICAgIHVkZXZhZG0gdHJpZ2dlciAtLWFjdGlvbj1hZGQKKyAgICAgICAgICAgIHVkZXZhZG0gc2V0dGxlCisgICAgZmkKKyAgICA7OworICBzdG9wKQorICAgIGVjaG8gIlN0b3BwaW5nIHVkZXZkIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLW5hbWUgdWRldmQgLS1xdWlldAorICAgIDs7CisgIHJlc3RhcnQpCisgICAgJDAgc3RvcAorICAgIHNsZWVwIDEKKyAgICAkMCBzdGFydAorICAgIDs7CisgIHN0YXR1cykKKyAgICBwaWQ9YHBpZG9mIC14IHVkZXZkYAorICAgIGlmIFsgLW4gIiRwaWQiIF07IHRoZW4KKwllY2hvICJ1ZGV2ZCAocGlkICRwaWQpIGlzIHJ1bm5pbmcgLi4uIgorICAgIGVsc2UKKwllY2hvICJ1ZGV2ZCBpcyBzdG9wcGVkIgorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBlY2hvICJVc2FnZTogJDAge3N0YXJ0fHN0b3B8c3RhdHVzfHJlc3RhcnR9IgorICAgIGV4aXQgMQorZXNhYworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbGlua3MuY29uZiBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9saW5rcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZmY5MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvbGlua3MuY29uZgpAQCAtMCwwICsxLDIxIEBACisjIFRoaXMgZmlsZSBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIGRvIG5vdCBhc2sgdGhlIGRlYmlhbiBtYWludGFpbmVyIGFib3V0IGl0LgorIyBZb3UgbWF5IHVzZSBpdCB0byBkbyBzdHJhbmdlIGFuZCB3b25kZXJmdWwgdGhpbmdzLCBhdCB5b3VyIHJpc2suCisKK0wgZmQJCS9wcm9jL3NlbGYvZmQKK0wgc3RkaW4JCS9wcm9jL3NlbGYvZmQvMAorTCBzdGRvdXQJL3Byb2Mvc2VsZi9mZC8xCitMIHN0ZGVycgkvcHJvYy9zZWxmL2ZkLzIKK0wgY29yZQkJL3Byb2Mva2NvcmUKK0wgc25kc3RhdAkvcHJvYy9hc291bmQvb3NzL3NuZHN0YXQKK0wgTUFLRURFVgkvc2Jpbi9NQUtFREVWCisKK0QgcHRzCitEIHNobQorCisjIEhpYyBzdW50IGxlb25lcy4KK00gcHBwCQljIDEwOCAwCitEIGxvb3AKK00gbG9vcC8wCWIgNyAwCitEIG5ldAorTSBuZXQvdHVuCWMgMTAgMjAwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9sb2NhbC5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTAyY2RkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L2xvY2FsLnJ1bGVzCkBAIC0wLDAgKzEsMTkgQEAKKyMgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gc29tZQorIyBvZiB0aGUgZGlmZmVyZW50IGZpZWxkcy4gVGhleSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc3Vic2l0dXRpb25zOgorIworIyAlbiB0aGUgImtlcm5lbCBudW1iZXIiIG9mIHRoZSBkZXZpY2UuCisjICAgIEZvciBleGFtcGxlLCAnc2RhMycgaGFzIGEgImtlcm5lbCBudW1iZXIiIG9mICczJworIyAlZSB0aGUgc21hbGxlc3QgbnVtYmVyIGZvciB0aGF0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2hlcyBhbiBleGlzdGluZyBub2RlCisjICVrIHRoZSBrZXJuZWwgbmFtZSBmb3IgdGhlIGRldmljZQorIyAlTSB0aGUga2VybmVsIG1ham9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlbSB0aGUga2VybmVsIG1pbm9yIG51bWJlciBmb3IgdGhlIGRldmljZQorIyAlYiB0aGUgYnVzIGlkIGZvciB0aGUgZGV2aWNlCisjICVjIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhlIFBST0dSQU0KKyMgJXN7ZmlsZW5hbWV9IHRoZSBjb250ZW50IG9mIGEgc3lzZnMgYXR0cmlidXRlCisjICUlIHRoZSAnJScgY2hhciBpdHNlbGYKKyMKKworIyBDcmVhdGUgYSBzeW1saW5rIHRvIGFueSB0b3VjaHNjcmVlbiBpbnB1dCBkZXZpY2UKKyMgVHJpZ2dlciBiYXNlZCBvbiBpbnB1dCB0eXBlLCB0aGF0IHRoZSBldmJpdCAoLWUpIGhhcyBFVl9TWU4gYW5kIEVWX0FCUywKKyMgaGFzIGFuIEVWX0FCUyB2YWx1ZSAoLWEpIHdoaWNoIGlzIHVzZWQgZm9yIHRvdWNoc2NyZWVuIHR5cGUgZGV2aWNlcy4KK1NVQlNZU1RFTT09ImlucHV0IiwgS0VSTkVMPT0iZXZlbnRbMC05XSoiLCBFTlZ7SURfSU5QVVRfVE9VQ0hTQ1JFRU59PT0iMSIsIFNZTUxJTksrPSJpbnB1dC90b3VjaHNjcmVlbjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcGVybWlzc2lvbnMucnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1YjczMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi9wZXJtaXNzaW9ucy5ydWxlcwpAQCAtMCwwICsxLDEzMSBAQAorQUNUSU9OIT0iYWRkIiwgR09UTz0icGVybWlzc2lvbnNfZW5kIgorCisjIHdvcmthcm91bmRzIG5lZWRlZCB0byBzeW5jaHJvbml6ZSB3aXRoIHN5c2ZzCisjIG9ubHkgbmVlZGVkIGZvciBrZXJuZWxzIDwgdjIuNi4xOC1yYzEKK0VOVntQSFlTREVWUEFUSH0hPSI/KiIsIEVOVntQSFlTREVWQlVTfT09Ij8qIiwJV0FJVF9GT1JfU1lTRlM9ImJ1cyIKK1NVQlNZU1RFTT09InNjc2kiLCBLRVJORUw9PSJbMC05XSo6WzAtOV0qIiwJV0FJVF9GT1JfU1lTRlM9ImlvZXJyX2NudCIKKyMgb25seSBuZWVkZWQgZm9yIGtlcm5lbHMgPCAyLjYuMTYKK1NVQlNZU1RFTT09Im5ldCIsCQkJCVdBSVRfRk9SX1NZU0ZTPSJhZGRyZXNzIgorIyBvbmx5IG5lZWRlZCBmb3Iga2VybmVscyA8IDIuNi4xNworU1VCU1lTVEVNPT0ibmV0IiwgRU5We0RSSVZFUn09PSI/KiIsCQlXQUlUX0ZPUl9TWVNGUz0iZGV2aWNlL2RyaXZlciIKKworIyBkZXZpY2VzIG5lZWRlZCB0byBsb2FkIHRoZSBkcml2ZXJzIHByb3ZpZGluZyB0aGVtCitLRVJORUw9PSJ0dW4iLAkJCQkJT1BUSU9OUys9Imlnbm9yZV9yZW1vdmUiCitLRVJORUw9PSJwcHAiLAkJCQkJT1BUSU9OUys9Imlnbm9yZV9yZW1vdmUiCitLRVJORUw9PSJsb29wWzAtOV0qIiwJCQkJT1BUSU9OUys9Imlnbm9yZV9yZW1vdmUiCisKKyMgZGVmYXVsdCBwZXJtaXNzaW9ucyBmb3IgYmxvY2sgZGV2aWNlcworU1VCU1lTVEVNPT0iYmxvY2siLAkJCQlHUk9VUD0iZGlzayIKKyMgdGhlIGFhY3JhaWQgZHJpdmVyIGlzIGJyb2tlbiBhbmQgcmVwb3J0cyB0aGF0IGRpc2tzIHJlbW92YWJsZSAoc2VlICM0MDQ5MjcpCitTVUJTWVNURU09PSJibG9jayIsIEFUVFJTe3JlbW92YWJsZX09PSIxIiwgXAorCURSSVZFUlMhPSJhYWNyYWlkIiwJCQlHUk9VUD0iZmxvcHB5IgorIyBhbGwgYmxvY2sgZGV2aWNlcyBvbiB0aGVzZSBidXNlcyBhcmUgInJlbW92YWJsZSIKK1NVQlNZU1RFTT09ImJsb2NrIiwgU1VCU1lTVEVNUz09InVzYnxpZWVlMTM5NHxtbWN8cGNtY2lhIiwgR1JPVVA9ImZsb3BweSIKKworIyBJREUgZGV2aWNlcworS0VSTkVMPT0iaGRbYS16XXxwY2RbMC05XSoiLCAJCQlEUklWRVJTPT0iaWRlLWNkcm9tfHBjZCIsIFwKKwlJTVBPUlR7cHJvZ3JhbX09ImNkcm9tX2lkIC0tZXhwb3J0ICR0ZW1wbm9kZSIKK0VOVntJRF9DRFJPTX09PSI/KiIsCQkJCUdST1VQPSJjZHJvbSIKK0tFUk5FTD09Imh0WzAtOV0qIiwgCQkJCUdST1VQPSJ0YXBlIgorS0VSTkVMPT0ibmh0WzAtOV0qIiwgCQkJCUdST1VQPSJ0YXBlIgorCisjIFNDU0kgZGV2aWNlcworS0VSTkVMPT0ic3JbMC05XSoiLCBJTVBPUlR7cHJvZ3JhbX09ImNkcm9tX2lkIC0tZXhwb3J0ICR0ZW1wbm9kZSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIxIiwJCQkJR1JPVVA9InRhcGUiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iMyIsIEFUVFJTe3ZlbmRvcn09PSJIUCIsCUdST1VQPSJzY2FubmVyIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjMiLCBBVFRSU3t2ZW5kb3J9PT0iRXBzb24iLAlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSIzIiwgQVRUUlN7dmVuZG9yfT09IkVQU09OIiwJR1JPVVA9InNjYW5uZXIiCitTVUJTWVNURU1TPT0ic2NzaSIsIEFUVFJTe3R5cGV9PT0iNCIsCQkJCUdST1VQPSJjZHJvbSIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI1IiwJCQkJR1JPVVA9ImNkcm9tIgorU1VCU1lTVEVNUz09InNjc2kiLCBBVFRSU3t0eXBlfT09IjYiLAkJCQlHUk9VUD0ic2Nhbm5lciIKK1NVQlNZU1RFTVM9PSJzY3NpIiwgQVRUUlN7dHlwZX09PSI4IiwJCQkJR1JPVVA9InRhcGUiCisKKyMgVVNCIGRldmljZXMKK0tFUk5FTD09ImxlZ291c2J0b3dlcioiLAlNT0RFPSIwNjY2IgorS0VSTkVMPT0ibHBbMC05XSoiLCBTVUJTWVNURU1TPT0idXNiIiwJCUdST1VQPSJscCIKKworIyB1c2Jmcy1saWtlIGRldmljZXMKK1NVQlNZU1RFTT09InVzYiIsIEVOVntERVZUWVBFfT09InVzYl9kZXZpY2UiLCBcCisJCQkJTU9ERT0iMDY2NCIKKworIyBpUml2ZXIgbXVzaWMgcGxheWVycworU1VCU1lTVEVNPT0idXNiIiwgRU5We0RFVlRZUEV9PT0idXNiX2RldmljZSIsCUdST1VQPSJwbHVnZGV2IiwgXAorCUFUVFJTe2lkVmVuZG9yfT09IjQxMDIiLCBBVFRSU3tpZFByb2R1Y3R9PT0iMTBbMDFdWzEzNTc4OV0iCisKKyMgc2VyaWFsIGRldmljZXMKK1NVQlNZU1RFTT09InR0eSIsCQkJCUdST1VQPSJkaWFsb3V0IgorU1VCU1lTVEVNPT0iY2FwaSIsCQkJCUdST1VQPSJkaWFsb3V0IgorU1VCU1lTVEVNPT0ic2xhbXIiLAkJCQlHUk9VUD0iZGlhbG91dCIKK1NVQlNZU1RFTT09InphcHRlbCIsCQkJCUdST1VQPSJkaWFsb3V0IgorCisjIHZjIGRldmljZXMgKGFsbCBtZW1iZXJzIG9mIHRoZSB0dHkgc3Vic3lzdGVtKQorS0VSTkVMPT0icHRteCIsCQkJTU9ERT0iMDY2NiIsCUdST1VQPSJyb290IgorS0VSTkVMPT0iY29uc29sZSIsCQlNT0RFPSIwNjAwIiwJR1JPVVA9InJvb3QiCitLRVJORUw9PSJ0dHkiLAkJCU1PREU9IjA2NjYiLAlHUk9VUD0icm9vdCIKK0tFUk5FTD09InR0eVswLTldKiIsCQkJCUdST1VQPSJyb290IgorS0VSTkVMPT0icHR5KiIsCQkJTU9ERT0iMDY2NiIsCUdST1VQPSJ0dHkiCisKKyMgdmlkZW8gZGV2aWNlcworU1VCU1lTVEVNPT0idmlkZW80bGludXgiLAkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09ImRybSIsCQkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09ImR2YiIsCQkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09ImVtODMwMCIsCQkJCUdST1VQPSJ2aWRlbyIKK1NVQlNZU1RFTT09ImdyYXBoaWNzIiwJCQkJR1JPVVA9InZpZGVvIgorU1VCU1lTVEVNPT0ibnZpZGlhIiwJCQkJR1JPVVA9InZpZGVvIgorCisjIG1pc2MgZGV2aWNlcworS0VSTkVMPT0icmFuZG9tIiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJ1cmFuZG9tIiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJtZW0iLAkJCU1PREU9IjA2NDAiLAlHUk9VUD0ia21lbSIKK0tFUk5FTD09ImttZW0iLAkJCU1PREU9IjA2NDAiLAlHUk9VUD0ia21lbSIKK0tFUk5FTD09InBvcnQiLAkJCU1PREU9IjA2NDAiLAlHUk9VUD0ia21lbSIKK0tFUk5FTD09ImZ1bGwiLAkJCU1PREU9IjA2NjYiCitLRVJORUw9PSJudWxsIiwJCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0iemVybyIsCQkJTU9ERT0iMDY2NiIKK0tFUk5FTD09Imlub3RpZnkiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09InNnaV9mZXRjaG9wIiwJCU1PREU9IjA2NjYiCitLRVJORUw9PSJzb255cGkiLAkJTU9ERT0iMDY2NiIKK0tFUk5FTD09ImFncGdhcnQiLAkJCQlHUk9VUD0idmlkZW8iCitLRVJORUw9PSJudnJhbSIsCQkJCUdST1VQPSJudnJhbSIKK0tFUk5FTD09InJ0Y3xydGNbMC05XSoiLAkJCUdST1VQPSJhdWRpbyIKK0tFUk5FTD09InRwbSoiLAkJCU1PREU9IjA2MDAiLAlPV05FUj0idHNzIiwgR1JPVVA9InRzcyIKK0tFUk5FTD09ImZ1c2UiLAkJCQkJR1JPVVA9ImZ1c2UiCitLRVJORUw9PSJrcWVtdSIsCQlNT0RFPSIwNjY2IgorS0VSTkVMPT0ia3ZtIiwJCQkJCUdST1VQPSJrdm0iCitLRVJORUw9PSJ0dW4iLAkJCU1PREU9IjA2NjYiLAorCitLRVJORUw9PSJjZGVtdVswLTldKiIsCQkJCUdST1VQPSJjZHJvbSIKK0tFUk5FTD09InBrdGNkdmRbMC05XSoiLAkJCUdST1VQPSJjZHJvbSIKK0tFUk5FTD09InBrdGNkdmQiLAkJTU9ERT0iMDY0NCIKKworS0VSTkVMPT0idXZlcmJzKiIsCQkJCUdST1VQPSJyZG1hIgorS0VSTkVMPT0idWNtKiIsCQkJCQlHUk9VUD0icmRtYSIKK0tFUk5FTD09InJkbWFfdWNtIiwJCQkJR1JPVVA9InJkbWEiCisKKyMgcHJpbnRlcnMgYW5kIHBhcmFsbGVsIGRldmljZXMKK1NVQlNZU1RFTT09InByaW50ZXIiLAkJCQlHUk9VUD0ibHAiCitTVUJTWVNURU09PSJwcGRldiIsCQkJCUdST1VQPSJscCIKK0tFUk5FTD09ImlybHB0KiIsCQkJCUdST1VQPSJscCIKK0tFUk5FTD09InB0WzAtOV0qIiwJCQkJR1JPVVA9InRhcGUiCitLRVJORUw9PSJwaHRbMC05XSoiLAkJCQlHUk9VUD0idGFwZSIKKworIyBzb3VuZCBkZXZpY2VzCitTVUJTWVNURU09PSJzb3VuZCIsCQkJCUdST1VQPSJhdWRpbyIKKworIyBpZWVlMTM5NCBkZXZpY2VzICAgICAgIAorS0VSTkVMPT0icmF3MTM5NCIsCQkJCUdST1VQPSJkaXNrIgorS0VSTkVMPT0iZHYxMzk0KiIsCQkJCUdST1VQPSJ2aWRlbyIKK0tFUk5FTD09InZpZGVvMTM5NCoiLAkJCQlHUk9VUD0idmlkZW8iCisKKyMgaW5wdXQgZGV2aWNlcworS0VSTkVMPT0iZXZlbnRbMC05XSoiLCBBVFRSU3tuYW1lfT09IipkdmIqfCpEVkIqfCogSVIgKiIgXAorCQkJCU1PREU9IjA2NjQiLAlHUk9VUD0idmlkZW8iCitLRVJORUw9PSJqc1swLTldKiIsCQlNT0RFPSIwNjY0IgorS0VSTkVMPT0ibGlyY1swLTldKiIsCQkJCUdST1VQPSJ2aWRlbyIKKworIyBBT0UgY2hhcmFjdGVyIGRldmljZXMKK1NVQlNZU1RFTT09ImFvZSIsCQlNT0RFPSIwMjIwIiwJR1JPVVA9ImRpc2siCitTVUJTWVNURU09PSJhb2UiLCBLRVJORUw9PSJlcnIiLCBNT0RFPSIwNDQwIgorCitMQUJFTD0icGVybWlzc2lvbnNfZW5kIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTM5ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCit0YXIgLUMgdGVzdC8gLXhKZiB0ZXN0L3N5cy50YXIueHoKK21ha2UgLWsgY2hlY2stVEVTVFMKK21ha2UgdGVzdC1zeXMtZGlzdGNsZWFuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvcnVuLnJ1bGVzIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQ3MTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3J1bi5ydWxlcwpAQCAtMCwwICsxLDE0IEBACisjIGRlYnVnZ2luZyBtb25pdG9yCitSVU4rPSJzb2NrZXQ6L29yZy9rZXJuZWwvdWRldi9tb25pdG9yIgorCisjIHJ1biBhIGNvbW1hbmQgb24gcmVtb3ZlIGV2ZW50cworQUNUSU9OPT0icmVtb3ZlIiwgRU5We1JFTU9WRV9DTUR9IT0iIiwgUlVOKz0iJGVudntSRU1PVkVfQ01EfSIKKworIyBpZ25vcmUgdGhlIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdmlydHVhbCBjb25zb2xlcworS0VSTkVMPT0icHRteCIsCQlPUFRJT05TKz0ibGFzdF9ydWxlIgorS0VSTkVMPT0iY29uc29sZSIsCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJ0dHkiCSwJT1BUSU9OUys9Imxhc3RfcnVsZSIKK0tFUk5FTD09InR0eVswLTldKiIsCU9QVElPTlMrPSJsYXN0X3J1bGUiCitLRVJORUw9PSJwdHkqIiwJCU9QVElPTlMrPSJsYXN0X3J1bGUiCitTVUJTWVNURU09PSJ2YyIsCU9QVElPTlMrPSJsYXN0X3J1bGUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNmZmYxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LWNhY2hlCkBAIC0wLDAgKzEsNzUgQEAKKyMhL2Jpbi9zaCAtZQorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICB1ZGV2LWNhY2hlCisjIFJlcXVpcmVkLVN0YXJ0OiAgICBtb3VudGFsbAorIyBSZXF1aXJlZC1TdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBjYWNoZSAvZGV2IHRvIHNwZWVkdXAgdGhlIHVkZXYgbmV4dCBib290CisjIyMgRU5EIElOSVQgSU5GTworCitleHBvcnQgVFo9L2V0Yy9sb2NhbHRpbWUKKworWyAtciAvcHJvYy9tb3VudHMgXSB8fCBleGl0IDEKK1sgLXggQFVERVZEQCBdIHx8IGV4aXQgMQorWyAtZCAvc3lzL2NsYXNzIF0gfHwgZXhpdCAxCisKK1sgLWYgL2V0Yy9kZWZhdWx0L3JjUyBdICYmIC4gL2V0Yy9kZWZhdWx0L3JjUworREVWQ0FDSEVfVE1QPSIvZGV2L3NobS91ZGV2LWNhY2hlLXRtcC50YXIiCitTWVNDT05GX0NBQ0hFRD0iL2V0Yy91ZGV2L2NhY2hlLmRhdGEiCitTWVNDT05GX1RNUD0iL2Rldi9zaG0vdWRldi5jYWNoZSIKK0RFVkNBQ0hFX1JFR0VOPSIvZGV2L3NobS91ZGV2LXJlZ2VuIiAjIGNyZWF0ZSB0byByZXF1ZXN0IGNhY2hlIHJlZ2VuCisKKyMgQSBsaXN0IG9mIGZpbGVzIHdoaWNoIGFyZSB1c2VkIGFzIGEgY3JpdGVyaWEgdG8ganVkZ2Ugd2hldGhlciB0aGUgdWRldiBjYWNoZSBjb3VsZCBiZSByZXVzZWQuCitDTVBfRklMRV9MSVNUPSIvcHJvYy92ZXJzaW9uIC9wcm9jL2NtZGxpbmUgL3Byb2MvZGV2aWNlcyIKK1sgLWYgL3Byb2MvYXRhZ3MgXSAmJiBDTVBfRklMRV9MSVNUPSIkQ01QX0ZJTEVfTElTVCAvcHJvYy9hdGFncyIKKworIyBMaXN0IG9mIGZpbGVzIHdob3NlIG1ldGFkYXRhIChzaXplL210aW1lL25hbWUpIHdpbGwgYmUgaW5jbHVkZWQgaW4gY2FjaGVkCisjIHN5c3RlbSBzdGF0ZS4KK01FVEFfRklMRV9MSVNUPSJsaWIvdWRldi9ydWxlcy5kLyogZXRjL3VkZXYvcnVsZXMuZC8qIgorCisjIENvbW1hbmQgdG8gY29tcHV0ZSBzeXN0ZW0gY29uZmlndXJhdGlvbi4KK3N5c2NvbmZfY21kICgpIHsKKwljYXQgLS0gJENNUF9GSUxFX0xJU1QKKwlzdGF0IC1jICclcyAlWSAlbicgLS0gJE1FVEFfRklMRV9MSVNUIHwgYXdrIC1GLyAne3ByaW50ICQxICIgIiAkTkY7fScKK30KKworWyAtZiAvZXRjL2RlZmF1bHQvdWRldi1jYWNoZSBdICYmIC4gL2V0Yy9kZWZhdWx0L3VkZXYtY2FjaGUKKworaWYgWyAiJFJPT1RGU19SRUFEX09OTFkiID0gInllcyIgXTsgdGhlbgorICAgIFsgIiRWRVJCT1NFIiAhPSAibm8iIF0gJiYgZWNobyAidWRldi1jYWNoZTogcmVhZC1vbmx5IHJvb3Rmcywgc2tpcCBnZW5lcmF0aW5nIHVkZXYtY2FjaGUiCisgICAgZXhpdCAwCitmaQorCitbICIkREVWQ0FDSEUiICE9ICIiIF0gfHwgZXhpdCAwCitbICIke1ZFUkJPU0V9IiA9PSAibm8iIF0gfHwgZWNobyAtbiAidWRldi1jYWNoZTogY2hlY2tpbmcgZm9yICR7REVWQ0FDSEVfUkVHRU59Li4uICIKK2lmICEgWyAtZSAiJERFVkNBQ0hFX1JFR0VOIiBdOyB0aGVuCisJWyAiJHtWRVJCT1NFfSIgPT0gIm5vIiBdIHx8IGVjaG8gIm5vdCBmb3VuZC4iCisJZXhpdCAwCitmaQorWyAiJHtWRVJCT1NFfSIgPT0gIm5vIiBdIHx8IGVjaG8gImZvdW5kLiIKK2VjaG8gIlBvcHVsYXRpbmcgZGV2IGNhY2hlIgorCitlcnJfY2xlYW51cCAoKSB7CisgICAgICAgIGVjaG8gInVkZXYtY2FjaGU6IHVwZGF0ZSBmYWlsZWQhIgorICAgICAgICB1ZGV2YWRtIGNvbnRyb2wgLS1zdGFydC1leGVjLXF1ZXVlCisJcm0gLWYgLS0gIiRTWVNDT05GX1RNUCIgIiRERVZDQUNIRV9UTVAiICIkREVWQ0FDSEUiICIkU1lTQ09ORl9DQUNIRUQiCit9CisKKygKKwlzZXQgLWUKKwl0cmFwICdlcnJfY2xlYW51cCcgRVhJVAorCXVkZXZhZG0gY29udHJvbCAtLXN0b3AtZXhlYy1xdWV1ZQorCXN5c2NvbmZfY21kID4gIiRTWVNDT05GX1RNUCIKKwlmaW5kIC9kZXYgLXhkZXYgXCggLXR5cGUgYiAtbyAtdHlwZSBjIC1vIC10eXBlIGwgXCkgfCBjdXQgLWMgMi0gXAorCQl8IHhhcmdzIHRhciBjZiAiJHtERVZDQUNIRV9UTVB9IgorCWd6aXAgPCAiJHtERVZDQUNIRV9UTVB9IiA+ICIkREVWQ0FDSEUiCisJcm0gLWYgIiR7REVWQ0FDSEVfVE1QfSIKKwltdiAiJFNZU0NPTkZfVE1QIiAiJFNZU0NPTkZfQ0FDSEVEIgorCXVkZXZhZG0gY29udHJvbCAtLXN0YXJ0LWV4ZWMtcXVldWUKKwlybSAtZiAiJERFVkNBQ0hFX1JFR0VOIgorCXRyYXAgLSBFWElUCispICYKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi1jYWNoZS5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2I3MzI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdWRldi91ZGV2L3VkZXYtY2FjaGUuZGVmYXVsdApAQCAtMCwwICsxLDUgQEAKKyMgRGVmYXVsdCBmb3IgL2V0Yy9pbml0LmQvdWRldgorCisjIENvbW1lbnQgdGhpcyBvdXQgdG8gZGlzYWJsZSBkZXZpY2UgY2FjaGUKK0RFVkNBQ0hFPSIvZXRjL3VkZXYtY2FjaGUudGFyLmd6IgorUFJPQkVfUExBVEZPUk1fQlVTPSJ5ZXMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi5ydWxlcyBiL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldi91ZGV2LnJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOWQ0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXYvdWRldi5ydWxlcwpAQCAtMCwwICsxLDExNiBAQAorIyBUaGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kaWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCBpbiBzb21lCisjIG9mIHRoZSBkaWZmZXJlbnQgZmllbGRzLiBUaGV5IHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzdWJzaXR1dGlvbnM6CisjCisjICVuIHRoZSAia2VybmVsIG51bWJlciIgb2YgdGhlIGRldmljZS4KKyMgICAgRm9yIGV4YW1wbGUsICdzZGEzJyBoYXMgYSAia2VybmVsIG51bWJlciIgb2YgJzMnCisjICVlIHRoZSBzbWFsbGVzdCBudW1iZXIgZm9yIHRoYXQgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaGVzIGFuIGV4aXN0aW5nIG5vZGUKKyMgJWsgdGhlIGtlcm5lbCBuYW1lIGZvciB0aGUgZGV2aWNlCisjICVNIHRoZSBrZXJuZWwgbWFqb3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICVtIHRoZSBrZXJuZWwgbWlub3IgbnVtYmVyIGZvciB0aGUgZGV2aWNlCisjICViIHRoZSBidXMgaWQgZm9yIHRoZSBkZXZpY2UKKyMgJWMgdGhlIHN0cmluZyByZXR1cm5lZCBieSB0aGUgUFJPR1JBTQorIyAlc3tmaWxlbmFtZX0gdGhlIGNvbnRlbnQgb2YgYSBzeXNmcyBhdHRyaWJ1dGUKKyMgJSUgdGhlICclJyBjaGFyIGl0c2VsZgorIworCisjIHdvcmthcm91bmQgZm9yIGRldmljZXMgd2hpY2ggZG8gbm90IHJlcG9ydCBtZWRpYSBjaGFuZ2VzCitTVUJTWVNURU1TPT0iaWRlIiwgS0VSTkVMPT0iaGRbYS16XSIsIEFUVFJ7cmVtb3ZhYmxlfT09IjEiLCBcCisJRU5We0lEX01PREVMfT09IklPTUVHQV9aSVAqIiwJTkFNRT0iJWsiLCBPUFRJT05TKz0iYWxsX3BhcnRpdGlvbnMiCitTVUJTWVNURU1TPT0iaWRlIiwgS0VSTkVMPT0iaGRbYS16XSIsIEFUVFJTe21lZGlhfT09ImZsb3BweSIsIFwKKwlPUFRJT05TKz0iYWxsX3BhcnRpdGlvbnMiCisKKyMgU0NTSSBkZXZpY2VzCitTVUJTWVNURU1TPT0ic2NzaSIsIEtFUk5FTD09InNyWzAtOV0qIiwJTkFNRT0ic2NkJW4iLCBTWU1MSU5LKz0ic3IlbiIKKworIyBVU0IgZGV2aWNlcworU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImF1ZXJbMC05XSoiLAlOQU1FPSJ1c2IvJWsiCitTVUJTWVNURU1TPT0idXNiIiwgS0VSTkVMPT0iY3BhZFswLTldKiIsCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJkYWJ1c2IqIiwJCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJoaWRkZXYqIiwJCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJsZWdvdXNidG93ZXIqIiwJTkFNRT0idXNiLyVrIgorU1VCU1lTVEVNUz09InVzYiIsIEtFUk5FTD09ImxwWzAtOV0qIiwJCU5BTUU9InVzYi8layIKK1NVQlNZU1RFTVM9PSJ1c2IiLCBLRVJORUw9PSJ0dHlVU0IqIiwgXAorCUFUVFJTe3Byb2R1Y3R9PT0iUGFsbSBIYW5kaGVsZCp8SGFuZHNwcmluZyBWaXNvcnxwYWxtT25lIEhhbmRoZWxkIiwgXAorCQkJCQlTWU1MSU5LKz0icGlsb3QiCisKKyMgdXNiZnMtbGlrZSBkZXZpY2VzCitTVUJTWVNURU09PSJ1c2JfZGV2aWNlIiwJUFJPR1JBTT0iL2Jpbi9zaCAtYyAnSz0lazsgSz0kJHtLI3VzYmRldn07IHByaW50ZiBidXMvdXNiLyUlMDNpLyUlMDNpICQke0slJSUlLip9ICQke0sjKi59JyIsIEFDVElPTj09ImFkZCIsIFwKKwkJCQlOQU1FPSIlYyIKK1NVQlNZU1RFTT09InVzYiIsIEVOVntERVZUWVBFfT09InVzYl9kZXZpY2UiLAlOQU1FPSJidXMvdXNiLyRlbnZ7QlVTTlVNfS8kZW52e0RFVk5VTX0iCisKKyMgc2VyaWFsIGRldmljZXMKK0tFUk5FTD09ImNhcGkiLAkJCU5BTUU9ImNhcGkyMCIsIFNZTUxJTksrPSJpc2RuL2NhcGkyMCIKK0tFUk5FTD09ImNhcGlbMC05XSoiLAkJTkFNRT0iY2FwaS8lbiIKKworIyB2aWRlbyBkZXZpY2VzCitLRVJORUw9PSJkdmIqIiwJCQlQUk9HUkFNPSIvYmluL3NoIC1jICdLPSVrOyBLPSQke0sjZHZifTsgcHJpbnRmIGR2Yi9hZGFwdGVyJSVpLyUlcyAkJHtLJSUlJS4qfSAkJHtLIyoufSIsIEFDVElPTj09ImFkZCIsIFwKKwkJCQlOQU1FPSIlYyIKK0tFUk5FTD09ImNhcmRbMC05XSoiLAkJTkFNRT0iZHJpLyVrIgorCisjIG1pc2MgZGV2aWNlcworS0VSTkVMPT0iaHdfcmFuZG9tIiwJCU5BTUU9Imh3cm5nIgorS0VSTkVMPT0idHVuIiwJCQlOQU1FPSJuZXQvJWsiCitLRVJORUw9PSJldnRjaG4iLAkJTkFNRT0ieGVuLyVrIgorCitLRVJORUw9PSJjZGVtdVswLTldKiIsCQlOQU1FPSJjZGVtdS8lbiIKK0tFUk5FTD09InBrdGNkdmRbMC05XSoiLAlOQU1FPSJwa3RjZHZkLyVuIgorS0VSTkVMPT0icGt0Y2R2ZCIsCQlOQU1FPSJwa3RjZHZkL2NvbnRyb2wiCisKK0tFUk5FTD09ImNwdVswLTldKiIsCQlOQU1FPSJjcHUvJW4vY3B1aWQiCitLRVJORUw9PSJtc3JbMC05XSoiLAkJTkFNRT0iY3B1LyVuL21zciIKK0tFUk5FTD09Im1pY3JvY29kZSIsCQlOQU1FPSJjcHUvbWljcm9jb2RlIgorCitLRVJORUw9PSJ1bWFkKiIsCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorS0VSTkVMPT0iaXNzbSoiLAkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09InV2ZXJicyoiLAkJTkFNRT0iaW5maW5pYmFuZC8layIKK0tFUk5FTD09InVjbSoiLAkJCU5BTUU9ImluZmluaWJhbmQvJWsiCitLRVJORUw9PSJyZG1hX3VjbSIsCQlOQU1FPSJpbmZpbmliYW5kLyVrIgorCisjIEFMU0EgZGV2aWNlcworS0VSTkVMPT0iY29udHJvbENbMC05XSoiLAlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJod0NbRDAtOV0qIiwJCU5BTUU9InNuZC8layIKK0tFUk5FTD09InBjbUNbRDAtOWNwXSoiLAlOQU1FPSJzbmQvJWsiCitLRVJORUw9PSJtaWRpQ1tEMC05XSoiLAkJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0idGltZXIiLAkJTkFNRT0ic25kLyVrIgorS0VSTkVMPT0ic2VxIiwJCQlOQU1FPSJzbmQvJWsiCisKKyMgaWVlZTEzOTQgZGV2aWNlcyAgICAgICAKK0tFUk5FTD09ImR2MTM5NCoiLAkJTkFNRT0iZHYxMzk0LyVuIgorS0VSTkVMPT0idmlkZW8xMzk0KiIsCQlOQU1FPSJ2aWRlbzEzOTQvJW4iCisKKyMgaW5wdXQgZGV2aWNlcworS0VSTkVMPT0ibWljZSIsCQkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJtb3VzZVswLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09ImV2ZW50WzAtOV0qIiwJCU5BTUU9ImlucHV0LyVrIgorS0VSTkVMPT0ianNbMC05XSoiLAkJTkFNRT0iaW5wdXQvJWsiCitLRVJORUw9PSJ0c1swLTldKiIsCQlOQU1FPSJpbnB1dC8layIKK0tFUk5FTD09InVpbnB1dCIsCQlOQU1FPSJpbnB1dC8layIKKworIyBaYXB0ZWwKK0tFUk5FTD09InphcGN0bCIsCQlOQU1FPSJ6YXAvY3RsIgorS0VSTkVMPT0iemFwdGltZXIiLAkJTkFNRT0iemFwL3RpbWVyIgorS0VSTkVMPT0iemFwY2hhbm5lbCIsCQlOQU1FPSJ6YXAvY2hhbm5lbCIKK0tFUk5FTD09InphcHBzZXVkbyIsCQlOQU1FPSJ6YXAvcHNldWRvIgorS0VSTkVMPT0iemFwWzAtOV0qIiwJCU5BTUU9InphcC8lbiIKKworIyBBT0UgY2hhcmFjdGVyIGRldmljZXMKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09ImRpc2NvdmVyIiwJTkFNRT0iZXRoZXJkLyVrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iZXJyIiwJTkFNRT0iZXRoZXJkLyVrIgorU1VCU1lTVEVNPT0iYW9lIiwgS0VSTkVMPT0iaW50ZXJmYWNlcyIsCU5BTUU9ImV0aGVyZC8layIKK1NVQlNZU1RFTT09ImFvZSIsIEtFUk5FTD09InJldmFsaWRhdGUiLAlOQU1FPSJldGhlcmQvJWsiCisKKyMgZGV2aWNlIG1hcHBlciBjcmVhdGVzIGl0cyBvd24gZGV2aWNlIG5vZGVzLCBzbyBpZ25vcmUgdGhlc2UKK0tFUk5FTD09ImRtLVswLTldKiIsCQlPUFRJT05TKz0iaWdub3JlX2RldmljZSIKK0tFUk5FTD09ImRldmljZS1tYXBwZXIiLAlOQU1FPSJtYXBwZXIvY29udHJvbCIKKworS0VSTkVMPT0icmZjb21tWzAtOV0qIiwgTkFNRT0iJWsiLCBHUk9VUD0idXNlcnMiLCBNT0RFPSIwNjYwIgorCisjIEZpcm13YXJlIEhlbHBlcgorQUNUSU9OPT0iYWRkIiwgU1VCU1lTVEVNPT0iZmlybXdhcmUiLCBSVU4rPSIvbGliL3VkZXYvZmlybXdhcmUuc2giCisKKyMgU2Ftc3VuZyBVQVJUUworS0VSTkVMPT0iczNjMjQxMF9zZXJpYWxbMC05XSIsICAgTkFNRT0idHR5U0FDJW4iCisKKyMgTVhDIFVBUlRzCitLRVJORUw9PSJ0dHlteGNbMC00XSIsICAgTkFNRT0idHR5bXhjJW4iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VkZXYvdWRldl8xODIuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTYzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91ZGV2L3VkZXZfMTgyLmJiCkBAIC0wLDAgKzEsOSBAQAoraW5jbHVkZSB1ZGV2LmluYworCitQUiA9ICJyOSIKKworIyBtb2R1bGUtaW5pdC10b29scyBmcm9tIGttb2RfZ2l0IHdpbGwgcHJvdmlkZSBsaWJrbW9kIHJ1bnRpbWUKK0RFUEVORFMgKz0gIm1vZHVsZS1pbml0LXRvb2xzIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI5NjQ0NTYxNzdmYmY0ODAyM2RmZWU3ZGIzYTcwOGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzg1N2VkMTlmYWZkOGYzY2E4ZGU0MTAxOTRlOGM3MzM2ZTllYjhhMjA2MjZlYThhNGJhNjQ0OWIwMTdmYWJhNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2FkZC12ZXJib3NlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvYWRkLXZlcmJvc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0NDNmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2FkZC12ZXJib3NlLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQub3JnCTIwMDUtMDEtMDMgMDA6MzA6NDcuMDAwMDAwMDAwICswMjAwCisrKysgdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQJMjAwNy0xMi0wMSAxOTo0MTowOC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOSw2ICsxOSw3IEBACisgbm90cmVhbGx5PTAKKyBmb3JjZT0wCisgZG9zdGFydD0wCisrdmVyYm9zZT0wCisgCisgdXNhZ2UoKQorIHsKK0BAIC0yOCw2ICsyOSw3IEBACisgICAgICAgIHVwZGF0ZS1yYy5kIFstbl0gWy1yIDxyb290Pl0gWy1zXSA8YmFzZW5hbWU+IHN0YXJ0fHN0b3AgTk4gcnVubHZsIFtydW5sdmxdIFsuLi5dIC4KKyAJCS1uOiBub3QgcmVhbGx5CisgCQktZjogZm9yY2UKKysJCS12OiB2ZXJib3NlCisgCQktcjogYWx0ZXJuYXRlIHJvb3QgcGF0aCAoZGVmYXVsdCBpcyAvKQorIAkJLXM6IGludm9rZSBzdGFydCBtZXRob2RzIGlmIGFwcHJvcHJpYXRlIHRvIGN1cnJlbnQgcnVubGV2ZWwKKyBFT0YKK0BAIC02OSw3ICs3MSw3IEBACisgCWxldj1gZWNobyAkMiB8IGN1dCAtZC8gLWYxYAorIAlubj1gZWNobyAkMiB8IGN1dCAtZC8gLWYyYAorIAlmbj0iJHtldGNkfSR7bGV2fS5kLyR7c3RhcnRzdG9wfSR7bm59JHtibn0iCistCWVjaG8gIiAgJGZuIC0+IC4uL2luaXQuZC8kYm4iCisrCVsgJHZlcmJvc2UgLWVxIDEgXSAmJiBlY2hvICIgICRmbiAtPiAuLi9pbml0LmQvJGJuIgorIAlpZiBbICRub3RyZWFsbHkgLWVxIDAgXTsgdGhlbgorIAkJbWtkaXIgLXAgYGRpcm5hbWUgJGZuYAorICAJCWxuIC1zIC4uL2luaXQuZC8kYm4gJGZuCitAQCAtODksNyArOTEsNyBAQAorIAkJZXhpdCAwCisgCWZpCisgCistCWVjaG8gIiBBZGRpbmcgc3lzdGVtIHN0YXJ0dXAgZm9yICRpbml0ZC8kYm4gLi4uIgorKwllY2hvICIgQWRkaW5nIHN5c3RlbSBzdGFydHVwIGZvciAkaW5pdGQvJGJuLiIKKyAKKyAJZm9yIGkgaW4gJHN0YXJ0bGlua3M7IGRvCisgCQlkb2xpbmsgUyAkaQorQEAgLTEwNSw2ICsxMDcsMTAgQEAKKyAJCQlzaGlmdAorIAkJCWNvbnRpbnVlCisgCQkJOzsKKysJCS12KQl2ZXJib3NlPTEKKysJCQlzaGlmdAorKwkJCWNvbnRpbnVlCisrCQkJOzsKKyAJCS1mKQlmb3JjZT0xCisgCQkJc2hpZnQKKyAJCQljb250aW51ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmQvY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTE3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9jaGVjay1pZi1zeW1saW5rcy1hcmUtdmFsaWQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorQ2hlY2sgaWYgc3ltbGlua3MgYXJlIHZhbGlkCisKK1doZW4gdXNpbmcgcm9vdCBvcHRpb24gYW5kICRpbml0ZC8kYm4gaXMgYSBzeW1saW5rLCB0aGUgc2NyaXB0IHdvdWxkIGZhaWwgYmVjYXVzZQordGhlIHN5bWxpbmsgcG9pbnRzIHRvIGEgcGF0aCBvbiB0YXJnZXQuIEZvciBleGFtcGxlOgorCisvcGF0aC90by90YXJnZXQvcm9vdGZzL2V0Yy9pbml0LmQvc3lzbG9nIC0+IC9ldGMvaW5pdC5kL3N5c2xvZy5idXN5Ym94CisKK0hlbmNlLCBbIC1mIC9wYXRoL3RvL3RhcmdldC9yb290ZnMvZXRjL2luaXQuZC9zeXNsb2cgXSBjb25kaXRpb24gd291bGQgcmV0dXJuCitmYWxzZS4KKworVGhpcyBwYXRjaCBhZGRzIHRoZSBwb3NpYmlsaXR5IHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZpbGUgdGhlIHN5bWxpbmsgcG9pbnRzIHRvCithY3R1YWxseSBleGlzdHMgaW4gcm9vdGZzIHBhdGggYW5kIHRoZW4gY29udGludWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+IAorU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KKworSW5kZXg6IGdpdC91cGRhdGUtcmMuZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3VwZGF0ZS1yYy5kCisrKysgZ2l0L3VwZGF0ZS1yYy5kCitAQCAtMTQ3LDEzICsxNDcsMzQgQEAgZmkKKyBibj0kMQorIHNoaWZ0CisgCisrc249JGluaXRkLyRibgorK2lmIFsgLUwgIiRzbiIgLWEgLW4gIiRyb290IiBdOyB0aGVuCisrCWlmIHdoaWNoIHJlYWRsaW5rID4vZGV2L251bGw7IHRoZW4KKysJCXdoaWxlIHRydWU7IGRvCisrCQkJbGlua3NuPSIkKHJlYWRsaW5rICIkc24iKSIKKysJCQlpZiBbIC16ICIkbGlua3NuIiBdOyB0aGVuCisrCQkJCWJyZWFrCisrCQkJZmkKKysKKysJCQlzbj0iJGxpbmtzbiIKKysJCQljYXNlICIkc24iIGluCisrCQkJCS8qKSBzbj0iJHJvb3Qkc24iIDs7CisrCQkJCSopICBzbj0iJGluaXRkLyRzbiIgOzsKKysJCQllc2FjCisrCQlkb25lCisrCWVsc2UKKysJCWVjaG8gInVwZGF0ZS1yYy5kOiByZWFkbGluayB0b29sIG5vdCBwcmVzZW50LCBjYW5ub3QgY2hlY2sgd2hldGhlciBcCisrCQkJCSRzbiBzeW1saW5rIHBvaW50cyB0byBhIHZhbGlkIGZpbGUuIiA+JjIKKysJZmkKKytmaQorKworIGlmIFsgJDEgIT0gInJlbW92ZSIgXTsgdGhlbgorLQlpZiBbICEgLWYgIiRpbml0ZC8kYm4iIF07IHRoZW4KKysJaWYgWyAhIC1mICIkc24iIF07IHRoZW4KKyAJCWVjaG8gInVwZGF0ZS1yYy5kOiAkaW5pdGQvJGJuOiBmaWxlIGRvZXMgbm90IGV4aXN0IiA+JjIKKyAJCWV4aXQgMQorIAlmaQorIGVsc2UKKy0JaWYgWyAtZiAiJGluaXRkLyRibiIgXTsgdGhlbgorKwlpZiBbIC1mICIkc24iIF07IHRoZW4KKyAJCWlmIFsgJGZvcmNlIC1lcSAxIF07IHRoZW4KKyAJCQllY2hvICJ1cGRhdGUtcmMuZDogJGluaXRkLyRibiBleGlzdHMgZHVyaW5nIHJjLmQgcHVyZ2UgKGNvbnRpbnVpbmcpIiA+JjIKKyAJCWVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kL2ZpeC10by1oYW5kbGUtcHJpb3JpdHktbnVtYmVycy1jb3JyZWN0bHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmMyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91cGRhdGUtcmMuZC91cGRhdGUtcmMuZC9maXgtdG8taGFuZGxlLXByaW9yaXR5LW51bWJlcnMtY29ycmVjdGx5LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggdG8gaGFuZGxlIHByaW9yaXR5IG51bWJlcnMgY29ycmVjdGx5LgorUHJldmlvdXNseSwgaWYgdGhlIHByaW9yaXR5IG51bWJlciBpcyAnMDgnIG9yICcwOScsIGZvciBleGFtcGxlLAordGhlIHNjcmlwdCBjYW5ub3QgaGFuZGxlIHRoZW0gY29ycmVjdGx5IGFzIHRoZXNlIG51bWJlcnMgYXJlIHRyZWF0ZWQKK2FzIG9jdGFsIG51bWJlcnMuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHVwZGF0ZS1yYy5kIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdXBkYXRlLXJjLmQgYi91cGRhdGUtcmMuZAoraW5kZXggZWM1MGQxNS4uYzcwYjg1OSAxMDA2NDQKKy0tLSBhL3VwZGF0ZS1yYy5kCisrKysgYi91cGRhdGUtcmMuZAorQEAgLTIwNSw3ICsyMDUsNyBAQCBjYXNlICQxIGluCisgCQkJCWV4aXQgMQorIAkJCWZpCisgCQkJc2hpZnQKKy0JCQlOTj1gcHJpbnRmICUwMmQgJDFgCisrCQkJTk49YHByaW50ZiAlMDJkICQoZXhwciAkMSArIDApYAorIAkJCXNoaWZ0CisgCQkJd2hpbGUgWyAieCQxIiAhPSAieC4iIF07IGRvCisgCQkJCWlmIFsgJCMgLWVxIDAgXTsgdGhlbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3VwZGF0ZS1yYy5kL3VwZGF0ZS1yYy5kXzAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVjYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXBkYXRlLXJjLmQvdXBkYXRlLXJjLmRfMC43LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAibWFuYWdlIHN5bWxpbmtzIGluIC9ldGMvcmNOLmQiCitERVNDUklQVElPTiA9ICJ1cGRhdGUtcmMuZCBpcyBhIHV0aWxpdGllcyB0aGF0IGFsbG93cyB0aGUgbWFuYWdlbWVudCBvZiBzeW1saW5rcyB0byB0aGUgaW5pdHNjcmlwdHMgaW4gdGhlIC9ldGMvcmNOLmQgZGlyZWN0b3J5IHN0cnVjdHVyZS4iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdXBkYXRlLXJjLmQ7YmVnaW5saW5lPTU7ZW5kbGluZT0xNTttZDU9MTQ4YTQ4MzIxYjEwZWIzN2MxZmEzZWUwMmI5NDBhNzUiCisKK1BSID0gInI1IgorCisjIFJldmlzaW9uIGNvcnJlc3BvbmRpbmcgdG8gdGFnIHVwZGF0ZS1yYy5kXzAuNworU1JDUkVWID0gImVjYTY4MGRkZjI4ZDAyNDk1NDg5NWY1OWEyNDFhNjIyZGQ1NzVjMTEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9waGlsYi91cGRhdGUtcmMuZC5naXQgXAorICAgICAgICAgICBmaWxlOi8vYWRkLXZlcmJvc2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hlY2staWYtc3ltbGlua3MtYXJlLXZhbGlkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC10by1oYW5kbGUtcHJpb3JpdHktbnVtYmVycy1jb3JyZWN0bHkucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhbGxhcmNoCisKK2RvX2NvbXBpbGUoKSB7Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L3VwZGF0ZS1yYy5kICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1yYy5kCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4LmluYyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQwNzJiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC5pbmMKQEAgLTAsMCArMSwyNjggQEAKK1NVTU1BUlkgPSAiQSBzdWl0ZSBvZiBiYXNpYyBzeXN0ZW0gYWRtaW5pc3RyYXRpb24gdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVXRpbC1saW51eCBpbmNsdWRlcyBhIHN1aXRlIG9mIGJhc2ljIHN5c3RlbSBhZG1pbmlzdHJhdGlvbiB1dGlsaXRpZXMgXAorY29tbW9ubHkgZm91bmQgb24gbW9zdCBMaW51eCBzeXN0ZW1zLiAgU29tZSBvZiB0aGUgbW9yZSBpbXBvcnRhbnQgdXRpbGl0aWVzIGluY2x1ZGUgXAorZGlzayBwYXJ0aXRpb25pbmcsIGtlcm5lbCBtZXNzYWdlIG1hbmFnZW1lbnQsIGZpbGVzeXN0ZW0gY3JlYXRpb24sIGFuZCBzeXN0ZW0gbG9naW4uIgorCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErICYgQlNEIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUUubGljZW5zaW5nO21kNT0xNzE1ZjVlZTNlMDEyMDNjYTFlMWUwYjllZTY1OTE4YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0RvY3VtZW50YXRpb24vbGljZW5zZXMvQ09QWUlORy5MR1BMdjIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vRG9jdW1lbnRhdGlvbi9saWNlbnNlcy9DT1BZSU5HLkJTRC0zO21kNT01OGRjZDg0NTI2NTFmYzhiMDdkMWY2NWNlMDdjYThhZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Eb2N1bWVudGF0aW9uL2xpY2Vuc2VzL0NPUFlJTkcuVUNCO21kNT0yNjM4NjBmODk2OGQ4YmFmYTUzOTJjYWI3NDI4NTI2MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJ1dWlkL0NPUFlJTkc7bWQ1PWI0NDJmZmI3NjJjZjhkM2U5ZGYxYjk5ZTBiYjRhZjcwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1vdW50L0NPUFlJTkc7bWQ1PWZiOTNmMDFkNDM2MTA2OWM1NjE2MzI3NzA1MzczYjE2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmJsa2lkL0NPUFlJTkc7bWQ1PWZiOTNmMDFkNDM2MTA2OWM1NjE2MzI3NzA1MzczYjE2IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBzeXN0ZW1kIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHl0aG9uLWRpcgorREVQRU5EUyA9ICJ6bGliIG5jdXJzZXMiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGx6by1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIGx6by1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC91dGlscy91dGlsLWxpbnV4L3Yke01BSk9SX1ZFUlNJT059L3V0aWwtbGludXgtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgIgorCitQQUNLQUdFUyA9KyAidXRpbC1saW51eC1hZ2V0dHkgdXRpbC1saW51eC1mZGlzayB1dGlsLWxpbnV4LWNmZGlzayB1dGlsLWxpbnV4LXNmZGlzayBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1zd2Fwb25vZmYgdXRpbC1saW51eC1sb3NldHVwIHV0aWwtbGludXgtdW1vdW50IFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LW1vdW50IHV0aWwtbGludXgtcmVhZHByb2ZpbGUgdXRpbC1saW51eC11dWlkZCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC11dWlkZ2VuIHV0aWwtbGludXgtbHNjcHUgdXRpbC1saW51eC1mc2NrIHV0aWwtbGludXgtYmxraWQgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtbWtmcyB1dGlsLWxpbnV4LW1jb29raWUgdXRpbC1saW51eC1yZXNldCBcCisgICAgICAgICAgICAgdXRpbC1saW51eC1ta2ZzLmNyYW1mcyB1dGlsLWxpbnV4LWZzY2suY3JhbWZzIHV0aWwtbGludXgtZnN0cmltIFwKKyAgICAgICAgICAgICB1dGlsLWxpbnV4LXBhcnR4ICR7UE59LWJhc2gtY29tcGxldGlvbiB1dGlsLWxpbnV4LWh3Y2xvY2sgXAorICAgICAgICAgICAgIHV0aWwtbGludXgtZmluZGZzIHV0aWwtbGludXgtZ2V0b3B0IHV0aWwtbGludXgtc3Vsb2dpbiIKK1BBQ0tBR0VTICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweWxpYm1vdW50JywgJ3V0aWwtbGludXgtcHlsaWJtb3VudCcsICcnLCBkKX0iCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXnV0aWwtbGludXgtbGliLioiCisKK1NIQVJFRF9FWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXVzZS10dHktZ3JvdXAgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtbWFrZWluc3RhbGwtY2hvd24gXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1raWxsIC0tZW5hYmxlLWxhc3QgLS1lbmFibGUtbWVzZyAtLWVuYWJsZS1wYXJ0eCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXJhdyAtLWVuYWJsZS1yZXNldCAtLWRpc2FibGUtbG9naW4gXAorICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlwdyAtLWRpc2FibGUtbmV3Z3JwIC0tZGlzYWJsZS1jaGZuLWNoc2ggXAorICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS13cml0ZSAtLWVuYWJsZS1tb3VudCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWxpYnV1aWQgLS1lbmFibGUtbGliYmxraWQgLS1lbmFibGUtZnNjayAtLXdpdGhvdXQtdWRldiBcCisgICAgICAgICAgICAgICAgICAgICAgIHVzcnNiaW5fZXhlY2Rpcj0nJHtzYmluZGlyfScgXAorIgorCitFWFRSQV9PRUNPTkYgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworUEFDS0FHRUNPTkZJR19jbGFzcy10YXJnZXQgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ3BhbScsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtc3UgLS1lbmFibGUtcnVudXNlciwtLWRpc2FibGUtc3UgLS1kaXNhYmxlLXJ1bnVzZXIsIGxpYnBhbSwiCisKKyMgUmVzcGVjdCB0aGUgc3lzdGVtZCBmZWF0dXJlIGZvciB1dWlkZAorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZCAtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sIC0td2l0aG91dC1zeXN0ZW1kIC0td2l0aG91dC1zeXN0ZW1kc3lzdGVtdW5pdGRpcixzeXN0ZW1kIgorCisjIEJ1aWxkIHNldHByaXYgcmVxdWlyZXMgbGliY2FwLW5nCitQQUNLQUdFQ09ORklHW2xpYmNhcC1uZ10gPSAiLS1lbmFibGUtc2V0cHJpdiwtLWRpc2FibGUtc2V0cHJpdixsaWJjYXAtbmcsIgorCisjIEJ1aWxkIHB5dGhvbiBiaW5kaW5ncyBmb3IgbGlibW91bnQKK1BBQ0tBR0VDT05GSUdbcHlsaWJtb3VudF0gPSAiLS13aXRoLXB5dGhvbiAtLWVuYWJsZS1weWxpYm1vdW50LC0td2l0aG91dC1weXRob24gLS1kaXNhYmxlLXB5bGlibW91bnQscHl0aG9uIgorCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gKz0gIiR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2dldG9wdC9nZXRvcHQtKi4qIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvcHlsaWJtb3VudC5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vZGlzdC1wYWNrYWdlcy9saWJtb3VudC8uZGVidWcvIgorCitGSUxFU191dGlsLWxpbnV4LWFnZXR0eSA9ICIke2Jhc2Vfc2JpbmRpcn0vYWdldHR5IgorRklMRVNfdXRpbC1saW51eC1mZGlzayA9ICIke2Jhc2Vfc2JpbmRpcn0vZmRpc2suJHtCUE59IgorRklMRVNfdXRpbC1saW51eC1mc3RyaW0gPSAiJHtiYXNlX3NiaW5kaXJ9L2ZzdHJpbSIKK0ZJTEVTX3V0aWwtbGludXgtY2ZkaXNrID0gIiR7YmFzZV9zYmluZGlyfS9jZmRpc2siCitGSUxFU191dGlsLWxpbnV4LXNmZGlzayA9ICIke3NiaW5kaXJ9L3NmZGlzayIKK0ZJTEVTX3V0aWwtbGludXgtc3dhcG9ub2ZmID0gIiR7YmFzZV9zYmluZGlyfS9zd2Fwb24uJHtCUE59ICR7YmFzZV9zYmluZGlyfS9zd2Fwb2ZmLiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtbG9zZXR1cCA9ICIke2Jhc2Vfc2JpbmRpcn0vbG9zZXR1cC4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LW1vdW50ID0gIiR7YmFzZV9iaW5kaXJ9L21vdW50LiR7QlBOfSIKK0ZJTEVTX3V0aWwtbGludXgtbWNvb2tpZSA9ICIke2JpbmRpcn0vbWNvb2tpZSIKK0ZJTEVTX3V0aWwtbGludXgtdW1vdW50ID0gIiR7YmFzZV9iaW5kaXJ9L3Vtb3VudC4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LXJlYWRwcm9maWxlID0gIiR7c2JpbmRpcn0vcmVhZHByb2ZpbGUuJHtCUE59IgorRklMRVNfdXRpbC1saW51eC11dWlkZ2VuID0gIiR7YmluZGlyfS91dWlkZ2VuIgorRklMRVNfdXRpbC1saW51eC11dWlkZCA9ICIke3NiaW5kaXJ9L3V1aWRkIgorRklMRVNfdXRpbC1saW51eC1yZXNldCA9ICIke2Jhc2VfYmluZGlyfS9yZXNldCIKK0ZJTEVTX3V0aWwtbGludXgtcGFydHggPSAiJHtzYmluZGlyfS9wYXJ0eCIKK0ZJTEVTX3V0aWwtbGludXgtaHdjbG9jayA9ICIke2Jhc2Vfc2JpbmRpcn0vaHdjbG9jay4ke0JQTn0iCitGSUxFU191dGlsLWxpbnV4LWZpbmRmcyA9ICIke3NiaW5kaXJ9L2ZpbmRmcyIKK0ZJTEVTX3V0aWwtbGludXgtZ2V0b3B0ID0gIiR7YmFzZV9iaW5kaXJ9L2dldG9wdC4ke0JQTn0iCisKK0ZJTEVTX3V0aWwtbGludXgtcHlsaWJtb3VudCA9ICIke2xpYmRpcn0vJHtQWVRIT05fRElSfS9kaXN0LXBhY2thZ2VzL2xpYm1vdW50L3B5bGlibW91bnQuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L2Rpc3QtcGFja2FnZXMvbGlibW91bnQvX19pbml0X18uKiIKK0ZJTEVTX3V0aWwtbGludXgtbHNjcHUgPSAiJHtiaW5kaXJ9L2xzY3B1IgorCitGSUxFU191dGlsLWxpbnV4LWZzY2sgPSAiJHtiYXNlX3NiaW5kaXJ9L2ZzY2sqIgorRklMRVNfdXRpbC1saW51eC1ta2ZzID0gIiR7c2JpbmRpcn0vbWtmcyIKKworRklMRVNfdXRpbC1saW51eC1mc2NrLmNyYW1mcyA9ICIke3NiaW5kaXJ9L2ZzY2suY3JhbWZzIgorRklMRVNfdXRpbC1saW51eC1ta2ZzLmNyYW1mcyA9ICIke3NiaW5kaXJ9L21rZnMuY3JhbWZzIgorCitGSUxFU191dGlsLWxpbnV4LXN1bG9naW4gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4qIgorCisjIFV0aWwtbGludXgnIGJsa2lkIHJlcGxhY2VzIHRoZSBlMmZzcHJvZ3Mgb25lCitGSUxFU191dGlsLWxpbnV4LWJsa2lkID0gIiR7YmFzZV9zYmluZGlyfS9ibGtpZCoiCitSQ09ORkxJQ1RTX3V0aWwtbGludXgtYmxraWQgPSAiZTJmc3Byb2dzLWJsa2lkIgorUlJFUExBQ0VTX3V0aWwtbGludXgtYmxraWQgPSAiZTJmc3Byb2dzLWJsa2lkIgorCisjIHJlc2V0IGNhbGxzICd0cHV0JworUkRFUEVORFNfdXRpbC1saW51eC1yZXNldCArPSAibmN1cnNlcyIKKworUkRFUEVORFNfJHtQTn0gPSAidXRpbC1saW51eC11bW91bnQgdXRpbC1saW51eC1zd2Fwb25vZmYgdXRpbC1saW51eC1sb3NldHVwIHV0aWwtbGludXgtc3Vsb2dpbiIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInV0aWwtbGludXgtZmRpc2sgdXRpbC1saW51eC1jZmRpc2sgdXRpbC1saW51eC1zZmRpc2sgdXRpbC1saW51eC1tb3VudCB1dGlsLWxpbnV4LXJlYWRwcm9maWxlIHV0aWwtbGludXgtbWtmcyAiCisKK1JSRUNPTU1FTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK1JQUk9WSURFU18ke1BOfS1kZXYgPSAidXRpbC1saW51eC1saWJibGtpZC1kZXYgdXRpbC1saW51eC1saWJtb3VudC1kZXYgdXRpbC1saW51eC1saWJ1dWlkLWRldiIKKworI1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tdXVpZGQgJHtQTn0tZnN0cmltIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXV1aWRkID0gInV1aWRkLnNvY2tldCB1dWlkZC5zZXJ2aWNlIgorU1lTVEVNRF9BVVRPX0VOQUJMRV8ke1BOfS11dWlkZCA9ICJkaXNhYmxlIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LWZzdHJpbSA9ICJmc3RyaW0udGltZXIgZnN0cmltLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFXyR7UE59LWZzdHJpbSA9ICJkaXNhYmxlIgorCitkb19jb21waWxlICgpIHsKKwlzZXQgLWUKKwlvZV9ydW5tYWtlIEFSQ0g9JHtUQVJHRVRfQVJDSH0gQ1BVPSBDUFVPUFQ9ICdPUFQ9JHtDRkxBR1N9JyAKK30KKworZG9faW5zdGFsbCAoKSB7CisJIyB3aXRoIGNjYWNoZSB0aGUgdGltZXN0YW1wcyBvbiBjb21waWxlZCBmaWxlcyBtYXkKKwkjIGVuZCB1cCBlYXJsaWVyIHRoYW4gb24gdGhlaXIgaW5wdXRzLCB0aGlzIGFsbG93cworCSMgZm9yIHRoZSByZXN1bHRhbnQgY29tcGlsYXRpb24gaW4gdGhlIGluc3RhbGwgc3RlcC4KKwlvZV9ydW5tYWtlIEFSQ0g9JHtUQVJHRVRfQVJDSH0gQ1BVPSBDUFVPUFQ9IFwKKwkJJ09QVD0ke0NGTEFHU30nICdDQz0ke0NDfScgJ0xEPSR7TER9JyBcCisJCSdMREZMQUdTPSR7TERGTEFHU30nICdERVNURElSPSR7RH0nIGluc3RhbGwKKworCW1rZGlyIC1wICR7RH0ke2Jhc2VfYmluZGlyfQorCisgICAgICAgIHNiaW5wcm9ncz0iYWdldHR5IGN0cmxhbHRkZWwgY2ZkaXNrIHZpcHcgdmlnciIKKyAgICAgICAgc2JpbnByb2dzX2E9InBpdm90X3Jvb3QgaHdjbG9jayBta3N3YXAgbWtmcy5taW5peCBmc2NrLm1pbml4IGxvc2V0dXAgc3dhcG9uIHN3YXBvZmYgZmRpc2sgZnNjayBibGtpZCBibG9ja2RldiBmc3RyaW0gc3Vsb2dpbiBzd2l0Y2hfcm9vdCIKKyAgICAgICAgYmlucHJvZ3NfYT0iZG1lc2cgZ2V0b3B0IGtpbGwgbW9yZSB1bW91bnQgbW91bnQgbG9naW4gcmVzZXQgc3UiCisKKyAgICAgICAgaWYgWyAiJHtiYXNlX3NiaW5kaXJ9IiAhPSAiJHtzYmluZGlyfSIgXTsgdGhlbgorICAgICAgICAJbWtkaXIgLXAgJHtEfSR7YmFzZV9zYmluZGlyfQorICAgICAgICAgICAgICAgIGZvciBwIGluICRzYmlucHJvZ3MgJHNiaW5wcm9nc19hOyBkbworICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAtZiAiJHtEfSR7c2JpbmRpcn0vJHAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXYgIiR7RH0ke3NiaW5kaXJ9LyRwIiAiJHtEfSR7YmFzZV9zYmluZGlyfS8kcCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorCisgICAgICAgIGlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgIAlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiAkYmlucHJvZ3NfYTsgZG8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgLWYgIiR7RH0ke2JpbmRpcn0vJHAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXYgIiR7RH0ke2JpbmRpcn0vJHAiICIke0R9JHtiYXNlX2JpbmRpcn0vJHAiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC8KKwllY2hvICdNT1VOVEFMTD0iLXQgbm9uZnMsbm9zbWJmcyxub25jcGZzIicgPiAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L21vdW50YWxsCisKKwlybSAtZiAke0R9JHtiaW5kaXJ9L2Noa2R1cGV4ZQorfQorCisjIHJlc2V0IGFuZCBub2xvZ2luIGNhdXNlcyBhIGNvbmZsaWN0IHdpdGggbmN1cnNlcy1uYXRpdmUgYW5kIHNoYWRvdy1uYXRpdmUKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJcm0gLWYgJHtEfSR7YmFzZV9iaW5kaXJ9L3Jlc2V0CisJcm0gLWYgJHtEfSR7YmFzZV9zYmluZGlyfS9ub2xvZ2luCit9CisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gID0gImRtZXNnIGtpbGwgbW9yZSBta3N3YXAgYmxvY2tkZXYgcGl2b3Rfcm9vdCBzd2l0Y2hfcm9vdCIKK0FMVEVSTkFUSVZFXyR7UE59ICs9ICJta2ZzLm1pbml4IGhleGR1bXAgbGFzdCBsYXN0YiBsb2dnZXIgbWVzZyByZW5pY2Ugd2FsbCIKK0FMVEVSTkFUSVZFXyR7UE59ICs9ICJzZXRzaWQgY2hydCBmbG9jayB1dG1wZHVtcCBlamVjdCIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW2RtZXNnXSA9ICIke2Jhc2VfYmluZGlyfS9kbWVzZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtraWxsXSA9ICIke2Jhc2VfYmluZGlyfS9raWxsIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vcmVdID0gIiR7YmFzZV9iaW5kaXJ9L21vcmUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWtzd2FwXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbWtzd2FwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jsb2NrZGV2XSA9ICIke2Jhc2Vfc2JpbmRpcn0vYmxvY2tkZXYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGl2b3Rfcm9vdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3Bpdm90X3Jvb3QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3dpdGNoX3Jvb3RdID0gIiR7YmFzZV9zYmluZGlyfS9zd2l0Y2hfcm9vdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtta2ZzLm1pbml4XSA9ICIke2Jhc2Vfc2JpbmRpcn0vbWtmcy5taW5peCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtlamVjdF0gPSAiJHtiaW5kaXJ9L2VqZWN0IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAibW91bnRwb2ludC4xIGxhc3QuMSBsYXN0Yi4xIG1lc2cuMSB3YWxsLjEgbm9sb2dpbi44IHN1bG9naW4uOCB1dG1wZHVtcC4xIHJlc2V0LjEga2lsbC4xIGxpYmJsa2lkLjMgYmxraWQuOCBmaW5kZnMuOCBmc2NrLjggdXVpZC4zIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGFzdC4xXSA9ICIke21hbmRpcn0vbWFuMS9sYXN0LjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGFzdGIuMV0gPSAiJHttYW5kaXJ9L21hbjEvbGFzdGIuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttZXNnLjFdID0gIiR7bWFuZGlyfS9tYW4xL21lc2cuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb3VudHBvaW50LjFdID0gIiR7bWFuZGlyfS9tYW4xL21vdW50cG9pbnQuMSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtub2xvZ2luLjhdID0gIiR7bWFuZGlyfS9tYW44L25vbG9naW4uOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZXNldC4xXSA9ICIke21hbmRpcn0vbWFuMS9yZXNldC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1bG9naW4uOF0gPSAiJHttYW5kaXJ9L21hbjgvc3Vsb2dpbi44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V0bXBkdW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL3V0bXBkdW1wLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2FsbC4xXSA9ICIke21hbmRpcn0vbWFuMS93YWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVba2lsbC4xXSA9ICIke21hbmRpcn0vbWFuMS9raWxsLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGliYmxraWQuM10gPSAiJHttYW5kaXJ9L21hbjMvbGliYmxraWQuMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZC44XSA9ICIke21hbmRpcn0vbWFuOC9ibGtpZC44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZpbmRmcy44XSA9ICIke21hbmRpcn0vbWFuOC9maW5kZnMuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZzY2suOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt1dWlkLjNdID0gIiR7bWFuZGlyfS9tYW4zL3V1aWQuMyIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1od2Nsb2NrID0gImh3Y2xvY2siCisjIFRoZXJlIHNlZW1zIHRvIGJlIHByb2JsZW0sIGF0bGVhc3Qgb24gbnNsdTIsIHdpdGggdGhlc2UsIHVudGlsbCB0aGV5IGFyZQorIyBmaXhlZCB0aGUgYnVzeWJveCBvbmVzIGhhdmUgaGlnaGVyIHByaW9yaXR5CitBTFRFUk5BVElWRV9QUklPUklUWVtod2Nsb2NrXSA9ICIxMCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtod2Nsb2NrXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaHdjbG9jayIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1mZGlzayA9ICJmZGlzayIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmZGlza10gPSAiJHtiYXNlX3NiaW5kaXJ9L2ZkaXNrIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWFnZXR0eSA9ICJnZXR0eSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2dldHR5IgorQUxURVJOQVRJVkVfVEFSR0VUW2dldHR5XSA9ICIke2Jhc2Vfc2JpbmRpcn0vYWdldHR5IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LW1vdW50ID0gIm1vdW50IgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vdW50XSA9ICIke2Jhc2VfYmluZGlyfS9tb3VudCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC11bW91bnQgPSAidW1vdW50IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3Vtb3VudF0gPSAiJHtiYXNlX2JpbmRpcn0vdW1vdW50IgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LXJlYWRwcm9maWxlID0gInJlYWRwcm9maWxlIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JlYWRwcm9maWxlXSA9ICIke3NiaW5kaXJ9L3JlYWRwcm9maWxlIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWxvc2V0dXAgPSAibG9zZXR1cCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtsb3NldHVwXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbG9zZXR1cCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1zd2Fwb25vZmYgPSAic3dhcG9mZiBzd2Fwb24iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3dhcG9mZl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N3YXBvZmYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3dhcG9uXSA9ICIke2Jhc2Vfc2JpbmRpcn0vc3dhcG9uIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWZzY2sgPSAiZnNjay5taW5peCBmc2NrIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZzY2subWluaXhdID0gIiR7YmFzZV9zYmluZGlyfS9mc2NrLm1pbml4IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZzY2tdID0gIiR7YmFzZV9zYmluZGlyfS9mc2NrIgorCitBTFRFUk5BVElWRV91dGlsLWxpbnV4LWJsa2lkID0gImJsa2lkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2Jsa2lkXSA9ICIke2Jhc2Vfc2JpbmRpcn0vYmxraWQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtcmVzZXQgPSAicmVzZXQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcmVzZXRdID0gIiR7YmluZGlyfS9yZXNldCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtyZXNldF0gPSAiJHtiYXNlX2JpbmRpcn0vcmVzZXQiCisKK0FMVEVSTkFUSVZFX3V0aWwtbGludXgtZ2V0b3B0ID0gImdldG9wdCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtnZXRvcHRdID0gIiR7YmFzZV9iaW5kaXJ9L2dldG9wdCIKKworQUxURVJOQVRJVkVfdXRpbC1saW51eC1zdWxvZ2luID0gInN1bG9naW4iCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3Vsb2dpbl0gPSAiJHtiYXNlX3NiaW5kaXJ9L3N1bG9naW4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworcHl0aG9uIGRvX3BhY2thZ2VfcHJlcGVuZCAoKSB7CisgICAgaWYgJy0tZW5hYmxlLXN1JyBpbiBkLmdldFZhcignRVhUUkFfT0VDT05GJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgYWx0X25hbWUgPSAic3UiCisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgYWx0X25hbWUsICclcy8lcycgJSAoZC5nZXRWYXIoJ2Jhc2VfYmluZGlyJywgVHJ1ZSksIGFsdF9uYW1lKSkKKyAgICAgICAgZC5hcHBlbmRWYXIoJ0FMVEVSTkFUSVZFXyVzJyAlIChkLmdldFZhcignUE4nLCBUcnVlKSksICcgJyArIGFsdF9uYW1lKQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCAnJHtiYXNlX2xpYmRpcn0nLCAnXmxpYiguKilcLnNvXC4uKiQnLAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9wYXR0ZXJuPSd1dGlsLWxpbnV4LWxpYiVzJywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0ndXRpbC1saW51eCBsaWIlcycsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJywgcHJlcGVuZD1UcnVlLCBhbGxvd19saW5rcz1UcnVlKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2NvbmZpZ3VyZS1zYmluZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YjFmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvY29uZmlndXJlLXNiaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAordXRpbC1saW51eDogdGFrZSAke3NiaW5kaXJ9IGZyb20gdGhlIGVudmlyb25tZW50IGlmIGl0IGlzIHNldCB0aGVyZQorZml4IHRoZSB0ZXN0LCB0aGUgWyBdIHN5bnRheCB3YXMgZ2V0dGluZyBlYXRlbiBieSBhdXRvY29uZgorCitTaWduZWQtb2ZmLWJ5OiBQaGlsIEJsdW5kZWxsIDxwYkBwYmNsLm5ldD4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogdXRpbC1saW51eC0yLjIyLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdXRpbC1saW51eC0yLjIyLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKK0BAIC03Myw3ICs3MywxMCBAQCBBQ19TVUJTVChbbG9jYWxzdGF0ZWRpcl0pCisgdXNyYmluX2V4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKKyBBQ19TVUJTVChbdXNyYmluX2V4ZWNkaXJdKQorIAorLXVzcnNiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKKytpZiB0ZXN0IC16ICIkdXNyc2Jpbl9leGVjZGlyIiA7CisrdGhlbgorKyAgIHVzcnNiaW5fZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKKytmaQorIEFDX1NVQlNUKFt1c3JzYmluX2V4ZWNkaXJdKQorIAorIGNhc2UgJGxpYmRpciBpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiMjcxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA3NzRmNTVmOWRkMjJjMDFlNDA0MWExODNkOGRmZjE0ODExZjI5MTE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDQgQXByIDIwMTQgMTc6MzM6MDQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW06IGZpeCBwYXJhbGxlbCBidWlsZCBpc3N1ZQorCitUaGUgcnVsZSBTRVRBUkNIX01BTl9MSU5LUyBpcyB1c2VkIGZvciB0aGUgZmlsZXMgdW5kZXIgdGhlIHN5cy11dGlscworZGlyLCBmb3IgZXhhbXBsZToKKworZWNobyAiLnNvIG1hbjgvc2V0YXJjaC44IiA+IHN5cy11dGlscy9saW51eDMyLjgKKworYnV0IGl0IGRlcGVuZHMgb24gbm90aGluZyBzbyB0aGF0IHRoZSBzeXMtdXRpbHMgZGlyIG1heSBub3QgZXhpc3QsIHdlCitjYW4gY3JlYXRlIHRoZSBzeXMtdXRpbHMgZGlyIHRvIGZpeCBwcm9ibGVtLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzeXMtdXRpbHMvTWFrZW1vZHVsZS5hbSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3lzLXV0aWxzL01ha2Vtb2R1bGUuYW0gYi9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbQoraW5kZXggNjI2NTI4Mi4uNjJlYWQzNyAxMDA2NDQKKy0tLSBhL3N5cy11dGlscy9NYWtlbW9kdWxlLmFtCisrKysgYi9zeXMtdXRpbHMvTWFrZW1vZHVsZS5hbQorQEAgLTEyNCw2ICsxMjQsNyBAQCBtYW5fTUFOUyArPSAkKFNFVEFSQ0hfTUFOX0xJTktTKQorIENMRUFORklMRVMgKz0gJChTRVRBUkNIX01BTl9MSU5LUykKKyAKKyAkKFNFVEFSQ0hfTUFOX0xJTktTKToKKysJJChNS0RJUl9QKSBzeXMtdXRpbHMKKyAJJChBTV9WX0dFTillY2hvICIuc28gbWFuOC9zZXRhcmNoLjgiID4gJEAKKyAKKyBpbnN0YWxsLWV4ZWMtaG9vay1zZXRhcmNoOgorLS0gCisxLjguMi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDMxYTczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3VjbGliYy1fX3Byb2duYW1lLWNvbmZsaWN0LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK2NvbmZpZ3VyZSBzaG91bGQgaW5jbHVkZSBlcnJuby5oIGluc3RlYWQgb2YgYXJncC5oIHdoZW4KK2NoZWNraW5nIGZvciBwcmVzZW5jZSBvZiBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZQordWNsaWJjIGRlZmluZXMgdGhpcyB0byBiZSBjb25zdCBjaGFyKiB1bmxpa2UgdXRpbC1saW51eC1uZword2hpY2ggZGVmaW5lcyB0aGlzIHRvIGJlIGNoYXIqIHNvIHRoaXMgZXJyb3IgZ29lcyB1bm5vdGljZWQKK29uIGdsaWJjL2VnbGliYyBzeXN0ZW1zLgorCitoZXJlIGlzIHRoZSBlcnJvciBpdCBmaXhlcworCitpbiBmaWxlIGluY2x1ZGVkIGZyb20gbW91bnRQLmg6MTQ6MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIGZyb20gY2FjaGUuYzoyOTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvaG9tZS9rcmFqL3dvcmsvc2x1Z29zL2J1aWxkL3RtcC1zbHVnb3MtdWNsaWJjL3N5c3Jvb3RzL25zbHUybGUvdXNyL2luY2x1ZGUvZXJybm8uaDo1NTo0NjogZXJyb3I6IGNvbmZsaWN0aW5nIHR5cGVzIGZvciAnX19wcm9nbmFtZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLi4vLi4vLi4vaW5jbHVkZS9jLmg6MTE4OjE0OiBub3RlOiBwcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnX19wcm9nbmFtZScgd2FzIGhlcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorbWFrZVszXTogKioqIFtjYWNoZS5sb10gRXJyb3IgMSAgICAgICAgICAKKworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiB1dGlsLWxpbnV4LTIuMjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dGlsLWxpbnV4LTIuMjIuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHV0aWwtbGludXgtMi4yMi4xL2NvbmZpZ3VyZS5hYworQEAgLTM3Miw3ICszNzIsNyBAQCBlc2FjCisgCisgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lIGlzIGRlZmluZWRdKQorIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0JI2luY2x1ZGUgPGFyZ3AuaD4KKysJI2luY2x1ZGUgPGVycm5vLmg+CisgXV0sIFtbCisgCXByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lID0gInRlc3QiOworIF1dKV0sIFsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGJmMjJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmF0aXZlLXFzb3J0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gZjIyMGQ4MDliZTFiYWE2NTQ1MDNiZjZmZjUyZjM2MzBiMGQ3MDE1YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNiBNYXIgMjAxNCAwMTozMDoyOSArMDAwMAorU3ViamVjdDogW1BBVENIXSBzdW4uYzogdXNlIHFzb3J0KCkgdG8gaW5zdGVhZCBvZiBxc29ydF9yKCkKKworcXNvcnRfcigpIHdhcyBhZGRlZCB0byBnbGliYyBpbiB2ZXJzaW9uIDIuOCwgc28gdGhlcmUgaXMgbm8gcXNvcnRfcigpIG9uCit0aGUgaG9zdCBsaWtlIENlbnRPUyA1LnguCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZmRpc2svc3JjL3N1bi5jIHwgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiB1dGlsLWxpbnV4LTIuMjQuMi9saWJmZGlzay9zcmMvc3VuLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dGlsLWxpbnV4LTIuMjQuMi5vcmlnL2xpYmZkaXNrL3NyYy9zdW4uYworKysrIHV0aWwtbGludXgtMi4yNC4yL2xpYmZkaXNrL3NyYy9zdW4uYworQEAgLTQzMSwxMCArNDMxLDkgQEAgc3RhdGljIGludCBzdW5fdmVyaWZ5X2Rpc2tsYWJlbChzdHJ1Y3QgZgorICAgICB9CisgICAgIHZlcmlmeV9zdW5fc3RhcnRzID0gc3RhcnRzOworIAorLSAgICBxc29ydF9yKGFycmF5LEFSUkFZX1NJWkUoYXJyYXkpLHNpemVvZihhcnJheVswXSksCistCSAgKGludCAoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKix2b2lkICopKSB2ZXJpZnlfc3VuX2NtcCwKKy0JICB2ZXJpZnlfc3VuX3N0YXJ0cyk7CistCisrICAgIHFzb3J0KGFycmF5LEFSUkFZX1NJWkUoYXJyYXkpLHNpemVvZihhcnJheVswXSksCisrICAgICAgICAgKGludCAoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKikpIHZlcmlmeV9zdW5fY21wKTsKKysgCisgICAgIGlmIChhcnJheVswXSA9PSAtMSkgeworIAlmZGlza19pbmZvKGN4dCwgXygiTm8gcGFydGl0aW9ucyBkZWZpbmVkLiIpKTsKKyAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uYXRpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY0OTZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5hdGl2ZS5wYXRjaApAQCAtMCwwICsxLDU3IEBACitTdXBwb3J0IG9sZGVyIGhvc3RzIHdpdGggbGF0ZXN0IHV0aWwtbGludXgtbmF0aXZlCisKK21rb3N0ZW1wIGlzIG5vdCBkZWZpbmVkIG9uIG9sZGVyIG1hY2hpbmVzLiAgU28gd2UgZGV0ZWN0IHRoaXMgYW5kCitwcm92aWRlIGEgZGVmaW5lIHRoYXQgdXNlcyBta3N0ZW1wIGluc3RlYWQuCisKK09fQ0xPRVhFQyBpcyBub3QgZGVmaW5lZCBvbiBvbGRlciBtYWNoaW5lcy4gIEl0IGlzIGhvd2V2ZXIgZGVmaW5lZAoraW4gdGhlICdjLmgnIGhlYWRlci4gIEZpeCB1cCB0aGUgdXNlcnMgdG8gaW5jbHVkZSAnYy5oJy4KKworZmRpc2tzL2ZkaXNrc3VubGFiZWwuYyB3YXMgbW9kaWZpZWQgdG8gdXNlIHFzb3J0X3IsIGhvd2V2ZXIKK3RoaXMgaXMgbm90IGRlZmluZWQgb24gb2xkZXIgaG9zdHMuICBSZXZlcnQ6CisgIGNvbW1pdCBjNjliYmNhOWMxZjY2NDUwOTdiZDIwZmUzYTIxZjVhOTlhMmEwNjk4CisgIGZkaXNrOiAoc3VuKTogdXNlIGFzayBBUEksIHJlbW92ZSBnbG9iYWwgdmFyaWFibGUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KK1BhdGNoZXMgcmV2ZXJ0IHVwc3RyZWFtIGNoYW5nZXMgaW4gb3JkZXIgdG8gc3VwcG9ydCBvbGRlcgorbWFjaGluZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDEgKworIGluY2x1ZGUvYy5oICB8IDcgKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGViMzY4MGIuLjkzZTAxNWYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxOCw2ICszMTgsNyBAQCBBQ19DSEVDS19GVU5DUyhbIFwKKyAJbGxzZWVrIFwKKyAJbHNlZWs2NCBcCisgCW1lbXBjcHkgXAorKwlta29zdGVtcCBcCisgCW5hbm9zbGVlcCBcCisgCW9wZW5fbWVtc3RyZWFtIFwKKyAJcGVyc29uYWxpdHkgXAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvYy5oIGIvaW5jbHVkZS9jLmgKK2luZGV4IGU0MjNlOGIuLmNmMzNiOTQgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2MuaAorKysrIGIvaW5jbHVkZS9jLmgKK0BAIC0yMzMsNiArMjMzLDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IGRpcmZkKERJUiAqZCkKKyAjZW5kaWYKKyAKKyAvKgorKyAqIG1rb3N0ZW1wIHJlcGxhY2VtZW50CisrICovCisrI2lmbmRlZiBIQVZFX01LT1NURU1QCisrI2RlZmluZSBta29zdGVtcCh0ZW1wbGF0ZSwgZmxhZ3MpIG1rc3RlbXAodGVtcGxhdGUpCisrI2VuZGlmCisrCisrLyoKKyAgKiBNQVhIT1NUTkFNRUxFTiByZXBsYWNlbWVudAorICAqLworIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGdldF9ob3N0bmFtZV9tYXgodm9pZCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy0yLjE2LW1vdW50X2xvY2tfcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzczZDdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4L3V0aWwtbGludXgtbmctMi4xNi1tb3VudF9sb2NrX3BhdGgucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhlIEZIUyBpbmRpY2F0ZXMgdGhhdCAvZXRjIG11c3QgYmUgY2FwYWJsZSBvZiBiZWluZyBtb3VudGVkIFIvTy4KKworVGhlIEZIUyBhbHNvIGluZGljYXRlcyB0aGF0IGxvY2sgZmlsZXMgYmVsb25nIGluIC92YXIvbG9jaywgYW5kIC92YXIgbXVzdAorYmUgUi9XIGFzIHNvb24gYXMgcG9zc2libGUgZHVyaW5nIGJvb3QuCisKK1RoaXMgcGF0Y2ggbW92ZXMgdGhlIG10YWIgbG9jayBmaWxlIGZyb20gdGhlIHBvdGVudGlhbGx5IFIvTyAvZXRjLCB0byB0aGUKK1IvVyAvdmFyL2xvY2sgYXJlYS4gIFRoaXMgbG9jayBmaWxlIGlzIHVzZWQgd2hlbiBtb3VudGluZyBkaXNrcyBhbmQgbWFraW5nCitvdGhlciBtb3VudCBhZGp1c3RtZW50cy4gIFRoZSBfUEFUSF9NT1VOVEVEX1RNUCBpcyBub3QgYWRqdXN0ZWQsIGFzIGZhaWxpbmcKK3RvIHdyaXRlIHRvIHRoaXMgZmlsZSBkb2VzIG5vdCBjYXVzZSBhbnkgZnVuY3Rpb25hbCBsaW1pdGF0aW9ucy4KKworKE5vdGUsIGlmIC9ldGMgaXMgUi9PLCB0aGVuIC9ldGMvbXRhYiBzaG91bGQgYmUgYSBzeW1saW5rIHRvIC9wcm9jL21vdW50cykKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gdXRpbC1saW51eC1uZy0yLjE2L2luY2x1ZGUvcGF0aG5hbWVzLmgub3JpZworKysrIHV0aWwtbGludXgtbmctMi4xNi9pbmNsdWRlL3BhdGhuYW1lcy5oCitAQCAtOTAsNyArOTAsNyBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIF9QQVRIX01PVU5URURfTE9DSwlfUEFUSF9NT1VOVEVEICJ+IgorKyNkZWZpbmUgX1BBVEhfTU9VTlRFRF9MT0NLCSIvdmFyL2xvY2svbXRhYn4iCisgI2RlZmluZSBfUEFUSF9NT1VOVEVEX1RNUAlfUEFUSF9NT1VOVEVEICIudG1wIgorIAorICNpZm5kZWYgX1BBVEhfREVWCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eC91dGlsLWxpbnV4LW5nLXJlcGxhY2Utc2lnaW50ZXJydXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTdhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS91dGlsLWxpbnV4L3V0aWwtbGludXgvdXRpbC1saW51eC1uZy1yZXBsYWNlLXNpZ2ludGVycnVwdC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbG9naW4tdXRpbHMvbG9naW4uYyB8IDUgKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9sb2dpbi11dGlscy9sb2dpbi5jIGIvbG9naW4tdXRpbHMvbG9naW4uYworaW5kZXggZWJiNzZmNS4uMzhjODgxYiAxMDA2NDQKKy0tLSBhL2xvZ2luLXV0aWxzL2xvZ2luLmMKKysrKyBiL2xvZ2luLXV0aWxzL2xvZ2luLmMKK0BAIC0xMTEwLDYgKzExMTAsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWNoYXIgKmJ1ZmY7CisgCWludCBjaGlsZEFyZ2MgPSAwOworIAlpbnQgcmV0Y29kZTsKKysJc3RydWN0IHNpZ2FjdGlvbiBhY3Q7CisgCisgCWNoYXIgKnB3ZGJ1ZiA9IE5VTEw7CisgCXN0cnVjdCBwYXNzd2QgKnB3ZCA9IE5VTEwsIF9wd2Q7CitAQCAtMTEyMyw3ICsxMTI0LDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAl0aW1lb3V0ID0gKHVuc2lnbmVkIGludClnZXRsb2dpbmRlZnNfbnVtKCJMT0dJTl9USU1FT1VUIiwgTE9HSU5fVElNRU9VVCk7CisgCisgCXNpZ25hbChTSUdBTFJNLCB0aW1lZG91dCk7CistCXNpZ2ludGVycnVwdChTSUdBTFJNLCAxKTsJLyogd2UgaGF2ZSB0byBpbnRlcnJ1cHQgc3lzY2FsbHMgbGlrZSBpb2N0bCgpICovCisrCSh2b2lkKSBzaWdhY3Rpb24oU0lHQUxSTSwgTlVMTCwgJmFjdCk7CisrCWFjdC5zYV9mbGFncyAmPSB+U0FfUkVTVEFSVDsKKysJc2lnYWN0aW9uKFNJR0FMUk0sICZhY3QsIE5VTEwpOworIAlhbGFybSh0aW1lb3V0KTsKKyAJc2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOworIAlzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdXRpbC1saW51eC91dGlsLWxpbnV4XzIuMjYuMi5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ZGM2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3V0aWwtbGludXgvdXRpbC1saW51eF8yLjI2LjIuYmIKQEAgLTAsMCArMSwzMCBAQAorTUFKT1JfVkVSU0lPTiA9ICIyLjI2IgorcmVxdWlyZSB1dGlsLWxpbnV4LmluYworCisjIFRvIHN1cHBvcnQgb2xkZXIgaG9zdHMsIHdlIG5lZWQgdG8gcGF0Y2ggYW5kL29yIHJldmVydAorIyBzb21lIHVwc3RyZWFtIGNoYW5nZXMuICBPbmx5IGRvIHRoaXMgZm9yIG5hdGl2ZSBwYWNrYWdlcy4KK09MREhPU1QgPSAiIgorT0xESE9TVF9jbGFzcy1uYXRpdmUgPSAiZmlsZTovL3V0aWwtbGludXgtbmF0aXZlLnBhdGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91dGlsLWxpbnV4LW5hdGl2ZS1xc29ydC5wYXRjaCBcCisJCQkiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly91dGlsLWxpbnV4LW5nLXJlcGxhY2Utc2lnaW50ZXJydXB0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91dGlsLWxpbnV4LW5nLTIuMTYtbW91bnRfbG9ja19wYXRoLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91Y2xpYmMtX19wcm9nbmFtZS1jb25mbGljdC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLXNiaW5kaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1wYXJhbGxlbC1idWlsZC5wYXRjaCBcCisgICAgICAgICAgICAke09MREhPU1R9IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YmRmMzY4YzM5NWYxYjcwMzI1ZDBlYjIyYzdmNDhmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTI5YmRhMTQyNTI4YTQ4YTBhOTUzYzM5ZmY2MzA5MzY1MWE0ODA5MDQyZTE3OTBmYmQ2YWE4NjYzZmQ5NjY2IgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAic2NhbmZfY3ZfYWxsb2NfbW9kaWZpZXI9bXMiCisKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiJHtTSEFSRURfRVhUUkFfT0VDT05GfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mYWxsb2NhdGUgXAorCQkJICAgICAtLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIiR7U0hBUkVEX0VYVFJBX09FQ09ORn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZmFsbG9jYXRlIFwKKwkJCQktLWRpc2FibGUtdXNlLXR0eS1ncm91cCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9DT1BZSU5HLk1JVCBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL0NPUFlJTkcuTUlUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlN2Q1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy9maWxlcy9DT1BZSU5HLk1JVApAQCAtMCwwICsxLDE3IEBACitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKK0RBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SCitUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL21vdW50LWNvcHliaW5kIGIvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvbW91bnQtY29weWJpbmQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmFlYWY4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL21vdW50LWNvcHliaW5kCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorIworIyBQZXJmb3JtIGEgYmluZCBtb3VudCwgY29weWluZyBleGlzdGluZyBmaWxlcyBhcyB3ZSBkbyBzbyB0byBlbnN1cmUgdGhlCisjIG92ZXJsYWlkIHBhdGggaGFzIHRoZSBuZWNlc3NhcnkgY29udGVudC4KKworaWYgWyAkIyAtbHQgMiBdOyB0aGVuCisgICAgZWNobyA+JjIgIlVzYWdlOiAkMCBzcGVjIG1vdW50cG9pbnQgW09QVElPTlNdIgorICAgIGV4aXQgMQorZmkKKworc3BlYz0kMQorbW91bnRwb2ludD0kMgorCitpZiBbICQjIC1ndCAyIF07IHRoZW4KKyAgICBvcHRpb25zPSQzCitlbHNlCisgICAgb3B0aW9ucz0KK2ZpCisKK1sgLW4gIiRvcHRpb25zIiBdICYmIG9wdGlvbnM9Iiwkb3B0aW9ucyIKKworbWtkaXIgLXAgIiR7c3BlYyUvKn0iCitpZiBbIC1kICIkbW91bnRwb2ludCIgXTsgdGhlbgorICAgIGlmIFsgISAtZCAiJHNwZWMiIF07IHRoZW4KKyAgICAgICAgbWtkaXIgIiRzcGVjIgorICAgICAgICBjcCAtcFBSICIkbW91bnRwb2ludCIvLiAiJHNwZWMvIgorICAgIGZpCitlbGlmIFsgLWYgIiRtb3VudHBvaW50IiBdOyB0aGVuCisgICAgaWYgWyAhIC1mICIkc3BlYyIgXTsgdGhlbgorICAgICAgICBjcCAtcFAgIiRtb3VudHBvaW50IiAiJHNwZWMiCisgICAgZmkKK2ZpCisKK21vdW50IC1vICJiaW5kJG9wdGlvbnMiICIkc3BlYyIgIiRtb3VudHBvaW50IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvZmlsZXMvdm9sYXRpbGUtYmluZHMuc2VydmljZS5pbiBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIzMzU1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3ZvbGF0aWxlLWJpbmRzL2ZpbGVzL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4KQEAgLTAsMCArMSwxOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1CaW5kIG1vdW50IHZvbGF0aWxlIEB3aGVyZUAKK0RlZmF1bHREZXBlbmRlbmNpZXM9ZmFsc2UKK0JlZm9yZT1sb2NhbC1mcy50YXJnZXQKK1JlcXVpcmVzTW91bnRzRm9yPUB3aGF0cGFyZW50QCBAd2hlcmVwYXJlbnRACitDb25kaXRpb25QYXRoSXNSZWFkV3JpdGU9QHdoYXRwYXJlbnRACitDb25kaXRpb25QYXRoRXhpc3RzPUB3aGVyZUAKK0NvbmRpdGlvblBhdGhJc1JlYWRXcml0ZT0hQHdoZXJlQAorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorUmVtYWluQWZ0ZXJFeGl0PVllcworU3RhbmRhcmRPdXRwdXQ9c3lzbG9nCitUaW1lb3V0U2VjPTAKK0V4ZWNTdGFydD0vc2Jpbi9tb3VudC1jb3B5YmluZCBAd2hhdEAgQHdoZXJlQAorRXhlY1N0b3A9L2Jpbi91bW91bnQgQHdoZXJlQAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PWxvY2FsLWZzLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvdm9sYXRpbGUtYmluZHMuYmIgYi9tZXRhL3JlY2lwZXMtY29yZS92b2xhdGlsZS1iaW5kcy92b2xhdGlsZS1iaW5kcy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWU3Mjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvdm9sYXRpbGUtYmluZHMvdm9sYXRpbGUtYmluZHMuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJWb2xhdGlsZSBiaW5kIG1vdW50IHNldHVwIGFuZCBjb25maWd1cmF0aW9uIGZvciByZWFkLW9ubHktcm9vdGZzIgorREVTQ1JJUFRJT04gPSAiJHtTVU1NQVJZfSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5NSVQ7bWQ1PTU3NTBmM2FhNGVhMmIwMGMyYmYyMWIyYjJhN2I3MTRkIgorCitTUkNfVVJJID0gIlwKKyAgICBmaWxlOi8vbW91bnQtY29weWJpbmQgXAorICAgIGZpbGU6Ly9DT1BZSU5HLk1JVCBcCisgICAgZmlsZTovL3ZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4gXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgYWxsYXJjaCBzeXN0ZW1kIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAic3lzdGVtZCIKKworVk9MQVRJTEVfQklORFMgPz0gIlwKKyAgICAvdmFyL3ZvbGF0aWxlL2xpYiAvdmFyL2xpYlxuXAorIgorVk9MQVRJTEVfQklORFNbdHlwZV0gPSAibGlzdCIKK1ZPTEFUSUxFX0JJTkRTW3NlcGFyYXRvcl0gPSAiXG4iCisKK2RlZiB2b2xhdGlsZV9zeXN0ZW1kX3NlcnZpY2VzKGQpOgorICAgIHNlcnZpY2VzID0gW10KKyAgICBmb3IgbGluZSBpbiBvZS5kYXRhLnR5cGVkX3ZhbHVlKCJWT0xBVElMRV9CSU5EUyIsIGQpOgorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIHdoYXQsIHdoZXJlID0gbGluZS5zcGxpdChOb25lLCAxKQorICAgICAgICBzZXJ2aWNlcy5hcHBlbmQoIiVzLnNlcnZpY2UiICUgd2hhdFsxOl0ucmVwbGFjZSgiLyIsICItIikpCisgICAgcmV0dXJuICIgIi5qb2luKHNlcnZpY2VzKQorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAiJHtAdm9sYXRpbGVfc3lzdGVtZF9zZXJ2aWNlcyhkKX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLyouc2VydmljZSIKKworZG9fY29tcGlsZSAoKSB7CisgICAgd2hpbGUgcmVhZCBzcGVjIG1vdW50cG9pbnQ7IGRvCisgICAgICAgIGlmIFsgLXogIiRzcGVjIiBdOyB0aGVuCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaQorCisgICAgICAgIHNlcnZpY2VmaWxlPSIke3NwZWMjL30iCisgICAgICAgIHNlcnZpY2VmaWxlPSIkKGVjaG8gIiRzZXJ2aWNlZmlsZSIgfCB0ciAvIC0pLnNlcnZpY2UiCisgICAgICAgIHNlZCAtZSAicyNAd2hhdEAjJHNwZWMjZzsgcyNAd2hlcmVAIyRtb3VudHBvaW50I2ciIFwKKyAgICAgICAgICAgIC1lICJzI0B3aGF0cGFyZW50QCMke3NwZWMlLyp9I2c7IHMjQHdoZXJlcGFyZW50QCMke21vdW50cG9pbnQlLyp9I2ciIFwKKyAgICAgICAgICAgIHZvbGF0aWxlLWJpbmRzLnNlcnZpY2UuaW4gPiRzZXJ2aWNlZmlsZQorICAgIGRvbmUgPDxFTkQKKyR7QGQuZ2V0VmFyKCdWT0xBVElMRV9CSU5EUycsIFRydWUpLnJlcGxhY2UoIlxcbiIsICJcbiIpfQorRU5ECisKKyAgICBpZiBbIC1lIHZhci12b2xhdGlsZS1saWIuc2VydmljZSBdOyB0aGVuCisgICAgICAgICMgQXMgdGhlIHNlZWQgaXMgc3RvcmVkIHVuZGVyIC92YXIvbGliLCBlbnN1cmUgdGhhdCB0aGlzIHNlcnZpY2UgcnVucworICAgICAgICAjIGFmdGVyIHRoZSB2b2xhdGlsZSAvdmFyL2xpYiBpcyBtb3VudGVkLgorICAgICAgICBzZWQgLWkgLWUgIi9eQmVmb3JlPS9zL1wkLyBzeXN0ZW1kLXJhbmRvbS1zZWVkLnNlcnZpY2UvIiBcCisgICAgICAgICAgICAgICAtZSAiL15XYW50ZWRCeT0vcy9cJC8gc3lzdGVtZC1yYW5kb20tc2VlZC5zZXJ2aWNlLyIgXAorICAgICAgICAgICAgICAgdmFyLXZvbGF0aWxlLWxpYi5zZXJ2aWNlCisgICAgZmkKK30KK2RvX2NvbXBpbGVbZGlyc10gPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiYXNlX3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IG1vdW50LWNvcHliaW5kICR7RH0ke2Jhc2Vfc2JpbmRpcn0vCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgZm9yIHNlcnZpY2UgaW4gJHtTWVNURU1EX1NFUlZJQ0Vfdm9sYXRpbGUtYmluZHN9OyBkbworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisgICAgZG9uZQorfQorZG9faW5zdGFsbFtkaXJzXSA9ICIke1dPUktESVJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi9zaXRlX2NvbmZpZy9oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMjY4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3NpdGVfY29uZmlnL2hlYWRlcnMKQEAgLTAsMCArMSBAQAoremxpYi5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvTWFrZWZpbGUtcnVudGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZWE4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9NYWtlZmlsZS1ydW50ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitBZGQgJ3B0ZXN0JyB0YXJnZXQgdG8gTWFrZWZpbGUsIHRvIHJ1biB0ZXN0cyB3aXRob3V0IGNoZWNraW5nIGRlcGVuZGVuY2llcy4KKworU2lnbmVkLW9mZi1ieTogQW5kZXJzIFJveGVsbCA8YW5kZXJzLnJveGVsbEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCistLS0gYS9NYWtlZmlsZS5pbgkyMDEzLTA2LTEwIDEzOjQ4OjE0LjMyMTk1OTE2MiArMDIwMAorKysrIGIvTWFrZWZpbGUuaW4JMjAxMy0wNi0xMCAxMzo0OTozNi42ODY0NzY0NDggKzAyMDAKK0BAIC04Myw2ICs4Myw5IEBACisgdGVzdDogYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZAorIAorIHRlc3RzdGF0aWM6IHN0YXRpYworKwlAbWFrZSBydW50ZXN0c3RhdGljCisrCisrcnVudGVzdHN0YXRpYzoKKyAJQFRNUFNUPXRtcHN0XyQkOyBcCisgCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGUgJCRUTVBTVCA7IHRoZW4gXAorIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBPSyAqKionOyBcCitAQCAtOTIsNiArOTUsOSBAQAorIAlybSAtZiAkJFRNUFNUCisgCisgdGVzdHNoYXJlZDogc2hhcmVkCisrCUBtYWtlIHJ1bnRlc3RzaGFyZWQKKysKKytydW50ZXN0c2hhcmVkOgorIAlATERfTElCUkFSWV9QQVRIPWBwd2RgOiQoTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg7IFwKKyAJTERfTElCUkFSWU4zMl9QQVRIPWBwd2RgOiQoTERfTElCUkFSWU4zMl9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZTjMyX1BBVEg7IFwKKyAJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKK0BAIC0xMDUsNiArMTExLDkgQEAKKyAJcm0gLWYgJCRUTVBTSAorIAorIHRlc3Q2NDogYWxsNjQKKysJQG1ha2UgcnVudGVzdGFsbDY0CisrCisrcnVudGVzdGFsbDY0OgorIAlAVE1QNjQ9dG1wNjRfJCQ7IFwKKyAJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NCAkJFRNUDY0OyB0aGVuIFwKKyAJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IE9LICoqKic7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9sZGZsYWdzLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L2xkZmxhZ3MtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljNDBiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYi0xLjIuOC9sZGZsYWdzLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK09iZXkgTERGTEFHUyBmb3IgdGVzdHMKKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoZXIgTGFyc29uIDxjaHJpc19sYXJzb25AbWVudG9yLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gemxpYi0xLjIuOC5vcmlnL01ha2VmaWxlLmluCisrKysgemxpYi0xLjIuOC9NYWtlZmlsZS5pbgorQEAgLTI2LDcgKzI2LDcgQEAgQ0ZMQUdTPS1PCisKKyBTRkxBR1M9LU8KKyBMREZMQUdTPQorLVRFU1RfTERGTEFHUz0tTC4gbGliei5hCisrVEVTVF9MREZMQUdTPS1MLiAkKExERkxBR1MpCisgTERTSEFSRUQ9JChDQykKKyBDUFA9JChDQykgLUUKKworQEAgLTE3NiwyMiArMTc2LDIyIEBAIHBsYWNlYm8gJChTSEFSRURMSUJWKTogJChQSUNfT0JKUykgbGliei4KKwktQHJtZGlyIG9ianMKKworIGV4YW1wbGUkKEVYRSk6IGV4YW1wbGUubyAkKFNUQVRJQ0xJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRFU1RfTERGTEFHUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBtaW5pZ3ppcCQoRVhFKTogbWluaWd6aXAubyAkKFNUQVRJQ0xJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChURVNUX0xERkxBR1MpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKSAkKFNUQVRJQ0xJQikKKworIGV4YW1wbGVzaCQoRVhFKTogZXhhbXBsZS5vICQoU0hBUkVETElCVikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAtTC4gJChTSEFSRURMSUJWKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoVEVTVF9MREZMQUdTKSAkKFNIQVJFRExJQlYpCisKKyBtaW5pZ3ppcHNoJChFWEUpOiBtaW5pZ3ppcC5vICQoU0hBUkVETElCVikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gLUwuICQoU0hBUkVETElCVikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwLm8gJChURVNUX0xERkxBR1MpICQoU0hBUkVETElCVikKKworIGV4YW1wbGU2NCQoRVhFKTogZXhhbXBsZTY0Lm8gJChTVEFUSUNMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBleGFtcGxlNjQubyAkKFRFU1RfTERGTEFHUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGU2NC5vICQoVEVTVF9MREZMQUdTKSAkKFNUQVRJQ0xJQikKKworIG1pbmlnemlwNjQkKEVYRSk6IG1pbmlnemlwNjQubyAkKFNUQVRJQ0xJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwNjQubyAkKFRFU1RfTERGTEFHUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwNjQubyAkKFRFU1RfTERGTEFHUykgJChTVEFUSUNMSUIpCisKKyBpbnN0YWxsLWxpYnM6ICQoTElCUykKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChleGVjX3ByZWZpeCkgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoZXhlY19wcmVmaXgpOyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwM2I0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorCitXaGVuIC9ldGMvbGQuc28uY2FjaGUgaXMgd3JpdGVhYmxlIGJ5IHVzZXIgcnVubmluZyBiaXRiYWtlIHRoZW4gaXQgY3JlYXRlcyBpbnZhbGlkIGNhY2hlIAorKGluIG15IGNhc2UgbGlic3RkYysrLnNvIGNhbm5vdCBiZSBmb3VuZCBhZnRlciBidWlsZGluZyB6bGliKC1uYXRpdmUpIGFuZCBJIGhhdmUgdG8gY2FsbCAKK3RvdWNoICovbGlic3RkYysrLnNvICYmIC9zYmluL2xkY29uZmlnIHRvIGZpeCBpdC4KKworU28gcmVtb3ZlIGxkY29uZmlnIGNhbGwgZnJvbSBtYWtlIGluc3RhbGwtbGlicworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworZGlmZiAtdU5yIHpsaWItMS4yLjYub3JpZy9NYWtlZmlsZS5pbiB6bGliLTEuMi42L01ha2VmaWxlLmluCistLS0gemxpYi0xLjIuNi5vcmlnL01ha2VmaWxlLmluCTIwMTItMDEtMjggMjM6NDg6NTAuMDAwMDAwMDAwICswMTAwCisrKysgemxpYi0xLjIuNi9NYWtlZmlsZS5pbgkyMDEyLTAyLTEzIDE1OjM4OjIwLjU3NzcwMDcyMyArMDEwMAorQEAgLTE5OSw3ICsxOTksNiBAQAorIAkgIHJtIC1mICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAorIAkgIGxuIC1zICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQik7IFwKKyAJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAorLQkgICgkKExEQ09ORklHKSB8fCB0cnVlKSAgPi9kZXYvbnVsbCAyPiYxOyBcCisgCWZpCisgCWNwIHpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQorIAljaG1vZCA2NDQgJChERVNURElSKSQobWFuM2RpcikvemxpYi4zCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtY29yZS96bGliL3psaWItMS4yLjgvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRkOWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliLTEuMi44L3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBydW50ZXN0c3RhdGljIHJ1bnRlc3RzaGFyZWQgfCBzZWQgLXIgLWUgJ3MvXihccytcKisgKC4rPykgdGVzdCBPSyBcKispL1wxXG5QQVNTOiBcMi8nIC1lICdzL14oXHMrXCorICguKz8pIHRlc3QgRkFJTEVEIFwqKykvXDFcbkZBSUw6IFwyLycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYiBiL21ldGEvcmVjaXBlcy1jb3JlL3psaWIvemxpYl8xLjIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcwYWRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWNvcmUvemxpYi96bGliXzEuMi44LmJiCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiWmxpYiBDb21wcmVzc2lvbiBMaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiWmxpYiBpcyBhIGdlbmVyYWwtcHVycG9zZSwgcGF0ZW50LWZyZWUsIGxvc3NsZXNzIGRhdGEgY29tcHJlc3Npb24gXAorbGlicmFyeSB3aGljaCBpcyB1c2VkIGJ5IG1hbnkgZGlmZmVyZW50IHByb2dyYW1zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly96bGliLm5ldC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIlpsaWIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly96bGliLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0yMzttZDU9ZmRlNjEyZGYxZTU5MzNjNDI4YjczODQ0YTBjNDk0ZmQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy56bGliLm5ldC8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLXJ1bnRlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjhmMTIwNWQ4ZGQyMDAxZjI2ZmVjMWU4YzJjZWJlMzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODMxZGYwNDMyMzZkZjhlOWE3NjY3YjllM2JiMzdlMWZjYjEyMjBhMGYxNjNiNmRlMjYyNjc3NGI5NTkwZDA1NyIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIm1ha2UiCisKK2luaGVyaXQgcHRlc3QKKworZG9fY29uZmlndXJlICgpeworCS4vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLXNoYXJlZCAtLWxpYmRpcj0ke2xpYmRpcn0KK30KKworZG9fY29tcGlsZSAoKXsKKwlvZV9ydW5tYWtlCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBzdGF0aWMgc2hhcmVkCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWluc3RhbGwgJHtCfS9NYWtlZmlsZSAgICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L2V4YW1wbGUgICAgJHtEfSR7UFRFU1RfUEFUSH0KKwlpbnN0YWxsICR7Qn0vbWluaWd6aXAgICAke0R9JHtQVEVTVF9QQVRIfQorCWluc3RhbGwgJHtCfS9leGFtcGxlc2ggICR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAke0J9L21pbmlnemlwc2ggJHtEfSR7UFRFU1RfUEFUSH0KK30KKworIyBNb3ZlIHpsaWIgc2hhcmVkIGxpYnJhcmllcyBmb3IgdGFyZ2V0IGJ1aWxkcyB0byAkYmFzZV9saWJkaXIgc28gdGhlIGxpYnJhcnkKKyMgY2FuIGJlIHVzZWQgaW4gZWFybHkgYm9vdCBiZWZvcmUgJHByZWZpeCBpcyBtb3VudGVkLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworCWlmIFsgJHtiYXNlX2xpYmRpcn0gIT0gJHtsaWJkaXJ9IF0KKwl0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0KKwkJbXYgJHtEfS8ke2xpYmRpcn0vbGliei5zby4qICR7RH0vJHtiYXNlX2xpYmRpcn0KKwkJbGlibmFtZT1gcmVhZGxpbmsgJHtEfS8ke2xpYmRpcn0vbGliei5zb2AKKwkJbG4gLXNmICR7QG9lLnBhdGgucmVsYXRpdmUoIiR7bGliZGlyfSIsICIke2Jhc2VfbGliZGlyfSIpfS8kbGlibmFtZSAke0R9JHtsaWJkaXJ9L2xpYnouc28KKwlmaQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmUuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2NjOWZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtbmF0aXZlLmluYwpAQCAtMCwwICsxLDcwIEBACityZXF1aXJlIGFwdC5pbmMKK2luaGVyaXQgbmF0aXZlCisKK0RFUEVORFMgKz0gImRwa2ctbmF0aXZlIGdldHRleHQtbmF0aXZlIGRiLW5hdGl2ZSBjdXJsLW5hdGl2ZSB4ei1uYXRpdmUiCitQQUNLQUdFUyA9ICIiCitVU0VfTkxTID0gInllcyIKKworU1JDX1VSSSArPSAiZmlsZTovL2RiX2xpbmtpbmdfaGFjay5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1SZXZlcnQtYWx3YXlzLXJ1bi1kcGtnLWNvbmZpZ3VyZS1hLWF0LXRoZS1lbmQtb2Ytb3VyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LXRoZS1nY2MtdmVyc2lvbi1jaGVjay5wYXRjaCBcCisiCisKK3B5dGhvbiBkb19pbnN0YWxsICgpIHsKKyAgICBiYi5idWlsZC5leGVjX2Z1bmMoJ2RvX2luc3RhbGxfYmFzZScsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdkb19pbnN0YWxsX2NvbmZpZycsIGQpCit9CisKK3B5dGhvbiBkb19pbnN0YWxsX2NvbmZpZyAoKSB7CisgICAgaW5kaXIgPSBvcy5wYXRoLmRpcm5hbWUoZC5nZXRWYXIoJ0ZJTEUnLDEpKQorICAgIGluZmlsZSA9IGZpbGUob2UucGF0aC5qb2luKGluZGlyLCAnZmlsZXMnLCAnYXB0LmNvbmYnKSwgJ3InKQorICAgIGRhdGEgPSBpbmZpbGUucmVhZCgpCisgICAgaW5maWxlLmNsb3NlKCkKKworICAgIGRhdGEgPSBkLmV4cGFuZChkYXRhKQorCisgICAgb3V0ZGlyID0gb2UucGF0aC5qb2luKGQuZ2V0VmFyKCdEJywgVHJ1ZSksIGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksICdhcHQnKQorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRkaXIpOgorICAgICAgICBvcy5tYWtlZGlycyhvdXRkaXIpCisKKyAgICBvdXRwYXRoID0gb2UucGF0aC5qb2luKG91dGRpciwgJ2FwdC5jb25mLnNhbXBsZScpCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dHBhdGgpOgorICAgICAgICBvdXRmaWxlID0gZmlsZShvdXRwYXRoLCAndycpCisgICAgICAgIG91dGZpbGUud3JpdGUoZGF0YSkKKyAgICAgICAgb3V0ZmlsZS5jbG9zZSgpCit9CisKK2RvX2luc3RhbGxfYmFzZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2Ryb20gJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1nZXQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jb25maWcgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2FwdC1jYWNoZSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LXNvcnRwa2dzICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZXh0cmFjdHRlbXBsYXRlcyAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWZ0cGFyY2hpdmUgJHtEfSR7YmluZGlyfS8KKworCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtcHJpdmF0ZSAke0R9JHtsaWJkaXJ9LworCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1wa2ckR0xJQkNfVkVSJExJQlNURENQUF9WRVIgJHtEfSR7bGliZGlyfS8KKwlvZV9saWJpbnN0YWxsIC1zbyAtQyBiaW4gbGliYXB0LWluc3QkR0xJQkNfVkVSJExJQlNURENQUF9WRVIgJHtEfSR7bGliZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9hcHQvbWV0aG9kcworCWluc3RhbGwgLW0gMDc1NSBiaW4vbWV0aG9kcy8qICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMvCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdAorCWluc3RhbGwgLW0gMDY0NCAke1N9L2RzZWxlY3QvZGVzYy5hcHQgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L25hbWVzICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC9pbnN0YWxsICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNzU1ICR7U30vZHNlbGVjdC9zZXR1cCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvdXBkYXRlICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vYXB0L2FwdC5jb25mLmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9wcmVmZXJlbmNlcy5kCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYXB0L2xpc3RzL3BhcnRpYWwKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2FwdC9hcmNoaXZlcy9wYXJ0aWFsCisKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2xvZy9hcHQvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1uYXRpdmVfMS4wLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2NjBkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LW5hdGl2ZV8xLjAuMTAuMS5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgYXB0LW5hdGl2ZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL25vY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9uby1jdXJsLnBhdGNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtcGFja2FnZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC1wYWNrYWdlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTUzYWEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQtcGFja2FnZS5pbmMKQEAgLTAsMCArMSw3OCBAQAorYXB0LW1hbnBhZ2VzPSJkb2MvYXB0LWNhY2hlLjggXAorCSAgICAgIGRvYy9hcHQtY2Ryb20uOCBcCisJICAgICAgZG9jL2FwdC1jb25maWcuOCBcCisJICAgICAgZG9jL2FwdC1nZXQuOCBcCisJICAgICAgZG9jL2FwdC44IFwKKwkgICAgICBkb2MvYXB0LmNvbmYuNSBcCisJICAgICAgZG9jL2FwdF9wcmVmZXJlbmNlcy41IFwKKwkgICAgICBkb2Mvc291cmNlcy5saXN0LjUiCithcHQtdXRpbHMtbWFucGFnZXM9ImRvYy9hcHQtZXh0cmFjdHRlbXBsYXRlcy4xIFwKKwkJICAgIGRvYy9hcHQtc29ydHBrZ3MuMSIKKworZGVmIGdldF9maWxlc19hcHRfZG9jKGQsIGJiLCBtYW5wYWdlcyk6CisgICAgaW1wb3J0IHJlCisgICAgbWFucGFnZXMgPSByZS5zdWIocidcYmRvYy8oXFMrKS8oXFMrKVwuXDFcLiguKVxiJywgcicke21hbmRpcn0vXDEvbWFuXDMvXDIuXDMnLCBtYW5wYWdlcykKKyAgICBtYW5wYWdlcyA9IHJlLnN1YihyJ1xiZG9jLyhcUyspXC4oLilcYicsIHInJHttYW5kaXJ9L21hblwyL1wxLlwyJywgbWFucGFnZXMpCisgICAgcmV0dXJuIG1hbnBhZ2VzCisKK2RlZiBnZXRfY29tbWFuZHNfYXB0X2RvYyhkLCBiYiwgbWFucGFnZXMpOgorICAgIHMgPSBsaXN0KCkKKyAgICBfX2Rpcl9jYWNoZV9fID0gbGlzdCgpCisgICAgZm9yIG0gaW4gbWFucGFnZXMuc3BsaXQoKToKKyAgICAgICAgZGVzdCA9IGdldF9maWxlc19hcHRfZG9jKGQsIGJiLCBtKQorICAgICAgICBkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdCkKKyAgICAgICAgaWYgbm90IGRpciBpbiBfX2Rpcl9jYWNoZV9fOgorICAgICAgICAgICAgcy5hcHBlbmQoImluc3RhbGwgLWQgJHtEfS8lcyIgJSBkaXIpCisgICAgICAgICAgICBfX2Rpcl9jYWNoZV9fLmFwcGVuZChkaXIpCisgICAgICAgIHMuYXBwZW5kKCJpbnN0YWxsIC1tIDA2NDQgJXMgJHtEfS8lcyIgJSAobSwgZGVzdCkpCisgICAgcmV0dXJuICJcbiIuam9pbihzKQorCitQQUNLQUdFUyArPSAiJHtQTn0tdXRpbHMgJHtQTn0tdXRpbHMtZG9jIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L2FwdC1jZHJvbSAke2JpbmRpcn0vYXB0LWdldCBcCisJICAgICAgICR7YmluZGlyfS9hcHQtY29uZmlnICR7YmluZGlyfS9hcHQtY2FjaGUgXAorCSAgICAgICAke2xpYmRpcn0vYXB0ICR7bGliZGlyfS9saWJhcHQqLnNvLiogXAorCSAgICAgICAke2xvY2Fsc3RhdGVkaXJ9ICR7c3lzY29uZmRpcn0gXAorCSAgICAgICAke2xpYmRpcn0vZHBrZyIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9hcHQtc29ydHBrZ3MgJHtiaW5kaXJ9L2FwdC1leHRyYWN0dGVtcGxhdGVzIgorRklMRVNfJHtQTn0tZG9jID0gIiR7QGdldF9maWxlc19hcHRfZG9jKGQsIGJiLCBkLmdldFZhcignYXB0LW1hbnBhZ2VzJywgVHJ1ZSkpfSBcCisJCSAgICR7ZG9jZGlyfS9hcHQiCitGSUxFU18ke1BOfS11dGlscy1kb2MgPSAiJHtAZ2V0X2ZpbGVzX2FwdF9kb2MoZCwgYmIsIGQuZ2V0VmFyKCdhcHQtdXRpbHMtbWFucGFnZXMnLCBUcnVlKSl9IgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9saWJhcHQqLnNvICR7aW5jbHVkZWRpcn0iCisKK2RvX2luc3RhbGwgKCkgeworCXNldCAteAorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWtleSAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LWNkcm9tICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZ2V0ICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY29uZmlnICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtY2FjaGUgJHtEfSR7YmluZGlyfS8KKworCWluc3RhbGwgLW0gMDc1NSBiaW4vYXB0LXNvcnRwa2dzICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1IGJpbi9hcHQtZXh0cmFjdHRlbXBsYXRlcyAke0R9JHtiaW5kaXJ9LworCisJb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1wa2cgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLXNvIC1DIGJpbiBsaWJhcHQtaW5zdCAke0R9JHtsaWJkaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vYXB0L21ldGhvZHMKKwlpbnN0YWxsIC1tIDA3NTUgYmluL21ldGhvZHMvKiAke0R9JHtsaWJkaXJ9L2FwdC9tZXRob2RzLworCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9kc2VsZWN0L2Rlc2MuYXB0ICR7RH0ke2xpYmRpcn0vZHBrZy9tZXRob2RzL2FwdC8gCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZHNlbGVjdC9uYW1lcyAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3QvaW5zdGFsbCAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCWluc3RhbGwgLW0gMDc1NSAke1N9L2RzZWxlY3Qvc2V0dXAgJHtEfSR7bGliZGlyfS9kcGtnL21ldGhvZHMvYXB0LyAKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9kc2VsZWN0L3VwZGF0ZSAke0R9JHtsaWJkaXJ9L2Rwa2cvbWV0aG9kcy9hcHQvIAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9hcHQuY29uZi5kCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9hcHQvc291cmNlcy5saXN0LmQKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FwdC9wcmVmZXJlbmNlcy5kCisJaW5zdGFsbCAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYXB0L2xpc3RzL3BhcnRpYWwKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L2NhY2hlL2FwdC9hcmNoaXZlcy9wYXJ0aWFsCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9L2FwdC9leGFtcGxlcworCWluc3RhbGwgLW0gMDY0NCAke1N9L2RvYy9leGFtcGxlcy8qICR7RH0ke2RvY2Rpcn0vYXB0L2V4YW1wbGVzLworCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS9hcHQtcGtnLworCWluc3RhbGwgLW0gMDY0NCBpbmNsdWRlL2FwdC1wa2cvKi5oICR7RH0ke2luY2x1ZGVkaXJ9L2FwdC1wa2cvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0OGI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LmluYwpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkFkdmFuY2VkIGZyb250LWVuZCBmb3IgZHBrZyIKK0xJQ0VOU0UgPSAiR1BMdjIuMCsiCitTRUNUSU9OID0gImJhc2UiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAxNTA4MDVUMDk0OTI4Wi9wb29sL21haW4vYS8ke0JQTn0vJHtCUE59XyR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly91c2UtaG9zdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlcmFjZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ubHMtZHBrZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RydW5jYXRlLWZpbGVuYW1lLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY29uZmlndXJlLWluLW1ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtdGVzdC5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NTA1YzQyOTdiMzM4YWRiMjA4N2NlODdiYmM0YTI3NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZmIxZGU5NTk4MzYzYzQxNjU5MWQ0OWUzYzI4NTQ1OGUwOTViMDM1ZTZjMDZkNWI5NDRhNTRlMTVmYzliNTQzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiLS1leGNsdWRlPWF1dG9wb2ludCxhdXRvaGVhZGVyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBybSAtcmYgJHtTfS9idWlsZGxpYi9jb25maWcuc3ViCisgICAgcm0gLXJmICR7U30vYnVpbGRsaWIvY29uZmlnLmd1ZXNzCit9CisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2FwdC9tZXRob2RzLy5kZWJ1Zy8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLVJldmVydC1hbHdheXMtcnVuLWRwa2ctY29uZmlndXJlLWEtYXQtdGhlLWVuZC1vZi1vdXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMDY5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtUmV2ZXJ0LWFsd2F5cy1ydW4tZHBrZy1jb25maWd1cmUtYS1hdC10aGUtZW5kLW9mLW91ci5wYXRjaApAQCAtMCwwICsxLDM3OCBAQAorRnJvbSAxMDY3OTdmMWM2NmZhNTc4ZGFkMjFmZDkzODBiZjlkNTc2NTczZGZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyMiBNYXkgMjAxNSAwODowNToxNSArMDgwMAorU3ViamVjdDogW1BBVENIXSBSZXZlcnQgImFsd2F5cyBydW4gJ2Rwa2cgLS1jb25maWd1cmUgLWEnIGF0IHRoZSBlbmQgb2Ygb3VyCisgZHBrZyBjYWxsaW5ncyIKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyByZXZlcnRzIGNvbW1pdCBhMmE3NWZmNDUxNmY3NjA5ZjRjNTViNDIyNzBhYmI4ZDA4OTQzYzYwLCB3aGljaAorYWx3YXlzIHJ1biAnZHBrZyAtLWNvbmZpZ3VyZSAtYScgYXQgdGhlIGVuZCBvZiBvdXIgZHBrZyBjYWxsaW5ncywKK2J1dCBpdCBkb2VzIG5vdCB3b3JrIGZvciBjcm9zcy1jb21waWxlLCBzaW5jZSB0aGUgcm9vdGZzIGRpciBjYW4gbm90CitiZSBwYXNzZWQgaW50byBkcGtnLCBhbmQgbGVhZCB0byB0aGUgYmVsb3cgc2ltaWxhciBlcnJvcjoKKyAgIC0tLS0tLS0KKyAgIHxta2RpcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJy91c3IvbGliL29wa2cnOiBQZXJtaXNzaW9uIGRlbmllZAorICAgLS0tLS0tLQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBhcHQtcGtnL2RlYi9kcGtncG0uY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA5ICstLQorIHRlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjUgKysrKy0tLS0KKyB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkICAgICAgICAgICAgICB8IDY3ICsrKysrKysrKy0tLS0tLS0tLS0KKyB0ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMiAgICAgICB8IDE4ICsrLS0tLQorIHRlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IgICAgICAgIHwgIDIgKy0KKyAuLi5lc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1biB8IDc1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAuLi4vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cyAgICAgICB8ICA2ICstCisgNyBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspLCAxNDYgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNzU1IHRlc3QvaW50ZWdyYXRpb24vdGVzdC1idWctNzY5NjA5LXRyaWdnZXJzLXN0aWxsLXBlbmRpbmctYWZ0ZXItcnVuCisKK2RpZmYgLS1naXQgYS9hcHQtcGtnL2RlYi9kcGtncG0uY2MgYi9hcHQtcGtnL2RlYi9kcGtncG0uY2MKK2luZGV4IGIxODdlZmIuLmYyNjk3NjQgMTAwNjQ0CistLS0gYS9hcHQtcGtnL2RlYi9kcGtncG0uY2MKKysrKyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworQEAgLTEwNDksMTIgKzEwNDksNiBAQCB2b2lkIHBrZ0RQa2dQTTo6QnVpbGRQYWNrYWdlc1Byb2dyZXNzTWFwKCkKKyAJIFBhY2thZ2VzVG90YWwrKzsKKyAgICAgICB9CisgICAgfQorLSAgIC8qIG9uZSBleHRyYTogV2UgZG9uJ3Qgd2FudCB0aGUgcHJvZ3Jlc3MgYmFyIHRvIHJlYWNoIDEwMCUsIGVzcGVjaWFsbHkgbm90CistICAgICAgaWYgd2UgY2FsbCBkcGtnIC0tY29uZmlndXJlIC0tcGVuZGluZyBhbmQgcHJvY2VzcyBhIGJ1bmNoIG9mIHRyaWdnZXJzCistICAgICAgd2hpbGUgc2hvd2luZyAxMDAlLiBBbHNvLCBzcGluZG93biB0YWtlcyBhIHdoaWxlLCBzbyBuZXZlciByZWFjaGluZyAxMDAlCistICAgICAgaXMgd2F5IG1vcmUgY29ycmVjdCB0aGFuIHJlYWNoaW5nIDEwMCUgd2hpbGUgc3RpbGwgZG9pbmcgc3R1ZmYgZXZlbiBpZgorLSAgICAgIGRvaW5nIGl0IHRoaXMgd2F5IGlzIHNsaWdodGx5IGJlbmRpbmcgdGhlIHJ1bGVzICovCistICAgKytQYWNrYWdlc1RvdGFsOworIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKn19fSovCisgI2lmIChBUFRfUEtHX01BSk9SID49IDQgJiYgQVBUX1BLR19NSU5PUiA8IDEzKQorQEAgLTEyOTQsOCArMTI4OCw5IEBAIGJvb2wgcGtnRFBrZ1BNOjpHb05vQUJJQnJlYWsoQVBUOjpQcm9ncmVzczo6UGFja2FnZU1hbmFnZXIgKnByb2dyZXNzKQorIAorICAgIC8vIHN1cHBvcnQgc3VicHJlc3Npbmcgb2YgdHJpZ2dlcnMgcHJvY2Vzc2luZyBmb3Igc3BlY2lhbAorICAgIC8vIGNhc2VzIGxpa2UgZC1pIHRoYXQgcnVucyB0aGUgdHJpZ2dlcnMgaGFuZGxpbmcgbWFudWFsbHkKKysgICBib29sIGNvbnN0IFNtYXJ0Q29uZiA9IChfY29uZmlnLT5GaW5kKCJQYWNrYWdlTWFuYWdlcjo6Q29uZmlndXJlIiwgImFsbCIpICE9ICJhbGwiKTsKKyAgICBib29sIGNvbnN0IFRyaWdnZXJzUGVuZGluZyA9IF9jb25maWctPkZpbmRCKCJEUGtnOjpUcmlnZ2Vyc1BlbmRpbmciLCBmYWxzZSk7CistICAgaWYgKF9jb25maWctPkZpbmRCKCJEUGtnOjpDb25maWd1cmVQZW5kaW5nIiwgdHJ1ZSkgPT0gdHJ1ZSkKKysgICBpZiAoX2NvbmZpZy0+RmluZEIoIkRQa2c6OkNvbmZpZ3VyZVBlbmRpbmciLCBTbWFydENvbmYpID09IHRydWUpCisgICAgICAgTGlzdC5wdXNoX2JhY2soSXRlbShJdGVtOjpDb25maWd1cmVQZW5kaW5nLCBQa2dJdGVyYXRvcigpKSk7CisgCisgICAgLy8gZm9yIHRoZSBwcm9ncmVzcworZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vZnJhbWV3b3JrIGIvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsKK2luZGV4IDcwYWQzODEuLjAwNjcyYWQgMTAwNjQ0CistLS0gYS90ZXN0L2ludGVncmF0aW9uL2ZyYW1ld29yaworKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi9mcmFtZXdvcmsKK0BAIC0xMTc4LDEzICsxMTc4LDEwIEBAIHRlc3Rub3BhY2thZ2UoKSB7CisgCWZpCisgfQorIAorLXRlc3RkcGtnc3RhdHVzKCkgeworLQlsb2NhbCBTVEFURT0iJDEiCistCWxvY2FsIE5SPSIkMiIKKy0Jc2hpZnQgMgorLQltc2d0ZXN0ICJUZXN0IHRoYXQgJE5SIHBhY2thZ2UocykgYXJlIGluIHN0YXRlICRTVEFURSB3aXRoIiAiZHBrZyAtbCAkKiIKKy0JbG9jYWwgUEtHUz0iJChkcGtnIC1sICIkQCIgMj4vZGV2L251bGwgfCBncmVwICJeJHtTVEFURX0iIHwgd2MgLWwpIgorLQlpZiBbICIkUEtHUyIgIT0gJE5SIF07IHRoZW4KKyt0ZXN0ZHBrZ2luc3RhbGxlZCgpIHsKKysJbXNndGVzdCAiVGVzdCBmb3IgY29ycmVjdGx5IGluc3RhbGxlZCBwYWNrYWdlKHMpIHdpdGgiICJkcGtnIC1sICQqIgorKwlsb2NhbCBQS0dTPSIkKGRwa2cgLWwgIiRAIiAyPi9kZXYvbnVsbCB8IGdyZXAgJ15pJyB8IHdjIC1sKSIKKysJaWYgWyAiJFBLR1MiICE9ICQjIF07IHRoZW4KKyAJCWVjaG8gPiYyICRQS0dTCisgCQlkcGtnIC1sICIkQCIgfCBncmVwICdeW2Etel0nID4mMgorIAkJbXNnZmFpbAorQEAgLTExOTMsMTIgKzExOTAsMTYgQEAgdGVzdGRwa2dzdGF0dXMoKSB7CisgCWZpCisgfQorIAorLXRlc3RkcGtnaW5zdGFsbGVkKCkgeworLQl0ZXN0ZHBrZ3N0YXR1cyAnaWknICIkIyIgIiRAIgorLX0KKy0KKyB0ZXN0ZHBrZ25vdGluc3RhbGxlZCgpIHsKKy0JdGVzdGRwa2dzdGF0dXMgJ2lpJyAnMCcgIiRAIgorKwltc2d0ZXN0ICJUZXN0IGZvciBjb3JyZWN0bHkgbm90LWluc3RhbGxlZCBwYWNrYWdlKHMpIHdpdGgiICJkcGtnIC1sICQqIgorKwlsb2NhbCBQS0dTPSIkKGRwa2cgLWwgIiRAIiAyPiAvZGV2L251bGwgfCBncmVwICdeaScgfCB3YyAtbCkiCisrCWlmIFsgIiRQS0dTIiAhPSAwIF07IHRoZW4KKysJCWVjaG8KKysJCWRwa2cgLWwgIiRAIiB8IGdyZXAgJ15bYS16XScgPiYyCisrCQltc2dmYWlsCisrCWVsc2UKKysJCW1zZ3Bhc3MKKysJZmkKKyB9CisgCisgdGVzdG1hcmtlZGF1dG8oKSB7CitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZCBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQKK2luZGV4IDY4Y2MwNDMuLmQ3MmU3ZTcgMTAwNzU1CistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkCisrKysgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkCitAQCAtMTksMTQgKzE5LDEzIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjUwOlJ1bm5pbmcgZHBrZworLXBtc3RhdHVzOnRlc3Rpbmc6NTA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6ODMuMzMzMzpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjgzLjMzMzM6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MjA6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NDA6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czpkcGtnLWV4ZWM6NjA6UnVubmluZyBkcGtnCisrcG1zdGF0dXM6dGVzdGluZzo2MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgIyB1cGdyYWRlCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCitAQCAtMzUsMTQgKzM0LDEzIEBAIHRlc3RlcXVhbCAiZGxzdGF0dXM6MTowOlJldHJpZXZpbmcgZmlsZSAxIG9mIDEKKyBkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIHBtc3RhdHVzOmRwa2ctZXhlYzowOlJ1bm5pbmcgZHBrZworIHBtc3RhdHVzOnRlc3Rpbmc6MDpJbnN0YWxsaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MTYuNjY2NzpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzozMy4zMzMzOlVucGFja2luZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjUwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjUwOlJ1bm5pbmcgZHBrZworLXBtc3RhdHVzOnRlc3Rpbmc6NTA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo2Ni42NjY3OkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6ODMuMzMzMzpJbnN0YWxsZWQgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6ZHBrZy1leGVjOjgzLjMzMzM6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3Rpbmc6MjA6UHJlcGFyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NDA6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6NjA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czpkcGtnLWV4ZWM6NjA6UnVubmluZyBkcGtnCisrcG1zdGF0dXM6dGVzdGluZzo2MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjgwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6MTAwOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgIyByZWluc3RhbGwKKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKK0BAIC01MSwyNCArNDksMjIgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzowOkluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzoxNi42NjY3OlByZXBhcmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6NTA6UnVubmluZyBkcGtnCistcG1zdGF0dXM6dGVzdGluZzo1MDpDb25maWd1cmluZyB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo4My4zMzMzOkluc3RhbGxlZCB0ZXN0aW5nIChhbWQ2NCkKKy1wbXN0YXR1czpkcGtnLWV4ZWM6ODMuMzMzMzpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzoyMDpQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo0MDpVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzo2MDpQcmVwYXJpbmcgdG8gY29uZmlndXJlIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOmRwa2ctZXhlYzo2MDpSdW5uaW5nIGRwa2cKKytwbXN0YXR1czp0ZXN0aW5nOjYwOkNvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorK3Btc3RhdHVzOnRlc3Rpbmc6ODA6Q29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzoxMDA6SW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KSIgY2F0IGFwdC1wcm9ncmVzcy5sb2cKKyAKKyAjIGFuZCByZW1vdmUKKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKKyB0ZXN0c3VjY2VzcyBhcHRnZXQgcmVtb3ZlIHRlc3RpbmcgLXkgLW8gQVBUOjpTdGF0dXMtRmQ9MworIHRlc3RlcXVhbCAicG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzowOlJlbW92aW5nIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6MjU6UHJlcGFyaW5nIGZvciByZW1vdmFsIG9mIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOnRlc3Rpbmc6NTA6UmVtb3ZpbmcgdGVzdGluZyAoYW1kNjQpCistcG1zdGF0dXM6dGVzdGluZzo3NTpSZW1vdmVkIHRlc3RpbmcgKGFtZDY0KQorLXBtc3RhdHVzOmRwa2ctZXhlYzo3NTpSdW5uaW5nIGRwa2ciIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisrcG1zdGF0dXM6dGVzdGluZzozMy4zMzMzOlByZXBhcmluZyBmb3IgcmVtb3ZhbCBvZiB0ZXN0aW5nIChhbWQ2NCkKKytwbXN0YXR1czp0ZXN0aW5nOjY2LjY2Njc6UmVtb3ZpbmcgdGVzdGluZyAoYW1kNjQpCisrcG1zdGF0dXM6dGVzdGluZzoxMDA6UmVtb3ZlZCB0ZXN0aW5nIChhbWQ2NCkiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgIyBpbnN0YWxsIG5vbi1uYXRpdmUgYW5kIGVuc3VyZSB3ZSBnZXQgcHJvcGVyIHByb2dyZXNzIGluZm8KKyBleGVjIDM+IGFwdC1wcm9ncmVzcy5sb2cKK0BAIC03OSwxMyArNzUsMTIgQEAgdGVzdGVxdWFsICJkbHN0YXR1czoxOjA6UmV0cmlldmluZyBmaWxlIDEgb2YgMQorIGRsc3RhdHVzOjE6MDpSZXRyaWV2aW5nIGZpbGUgMSBvZiAxCisgcG1zdGF0dXM6ZHBrZy1leGVjOjA6UnVubmluZyBkcGtnCisgcG1zdGF0dXM6dGVzdGluZzI6MDpJbnN0YWxsaW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjE2LjY2Njc6UHJlcGFyaW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjMzLjMzMzM6VW5wYWNraW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjUwOlByZXBhcmluZyB0byBjb25maWd1cmUgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6ZHBrZy1leGVjOjUwOlJ1bm5pbmcgZHBrZworLXBtc3RhdHVzOnRlc3RpbmcyOjUwOkNvbmZpZ3VyaW5nIHRlc3RpbmcyIChpMzg2KQorLXBtc3RhdHVzOnRlc3RpbmcyOjY2LjY2Njc6Q29uZmlndXJpbmcgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6dGVzdGluZzI6ODMuMzMzMzpJbnN0YWxsZWQgdGVzdGluZzIgKGkzODYpCistcG1zdGF0dXM6ZHBrZy1leGVjOjgzLjMzMzM6UnVubmluZyBkcGtnIiBjYXQgYXB0LXByb2dyZXNzLmxvZworK3Btc3RhdHVzOnRlc3RpbmcyOjIwOlByZXBhcmluZyB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czp0ZXN0aW5nMjo0MDpVbnBhY2tpbmcgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6dGVzdGluZzI6NjA6UHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nMiAoaTM4NikKKytwbXN0YXR1czpkcGtnLWV4ZWM6NjA6UnVubmluZyBkcGtnCisrcG1zdGF0dXM6dGVzdGluZzI6NjA6Q29uZmlndXJpbmcgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6dGVzdGluZzI6ODA6Q29uZmlndXJpbmcgdGVzdGluZzIgKGkzODYpCisrcG1zdGF0dXM6dGVzdGluZzI6MTAwOkluc3RhbGxlZCB0ZXN0aW5nMiAoaTM4NikiIGNhdCBhcHQtcHJvZ3Jlc3MubG9nCisgCisgcm0gLWYgYXB0LXByb2dyZXNzKi5sb2cKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWRlYjgyMiBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCitpbmRleCBiYWRjOTg1Li45ZDIyNzk0IDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1kZWI4MjIKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZGViODIyCitAQCAtMjcsNDEgKzI3LDM3IEBAIE1lc3NhZ2U6IEluc3RhbGxpbmcgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiAxNi42NjY3CisrUGVyY2VudDogMjAKKyBNZXNzYWdlOiBQcmVwYXJpbmcgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiAzMy4zMzMzCisrUGVyY2VudDogNDAKKyBNZXNzYWdlOiBVbnBhY2tpbmcgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiA1MAorK1BlcmNlbnQ6IDYwCisgTWVzc2FnZTogUHJlcGFyaW5nIHRvIGNvbmZpZ3VyZSB0ZXN0aW5nIChhbWQ2NCkKKyAKKyBTdGF0dXM6IHByb2dyZXNzCistUGVyY2VudDogNTAKKytQZXJjZW50OiA2MAorIE1lc3NhZ2U6IFJ1bm5pbmcgZHBrZworIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogNTAKKytQZXJjZW50OiA2MAorIE1lc3NhZ2U6IENvbmZpZ3VyaW5nIHRlc3RpbmcgKGFtZDY0KQorIAorIFN0YXR1czogcHJvZ3Jlc3MKKyBQYWNrYWdlOiB0ZXN0aW5nOmFtZDY0CistUGVyY2VudDogNjYuNjY2NworK1BlcmNlbnQ6IDgwCisgTWVzc2FnZTogQ29uZmlndXJpbmcgdGVzdGluZyAoYW1kNjQpCisgCisgU3RhdHVzOiBwcm9ncmVzcworIFBhY2thZ2U6IHRlc3Rpbmc6YW1kNjQKKy1QZXJjZW50OiA4My4zMzMzCisrUGVyY2VudDogMTAwCisgTWVzc2FnZTogSW5zdGFsbGVkIHRlc3RpbmcgKGFtZDY0KQorLQorLVN0YXR1czogcHJvZ3Jlc3MKKy1QZXJjZW50OiA4My4zMzMzCistTWVzc2FnZTogUnVubmluZyBkcGtnCisgIiBjYXQgYXB0LXByb2dyZXNzLmxvZworIAorIAorZGlmZiAtLWdpdCBhL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1hcHQtcHJvZ3Jlc3MtZmQtZXJyb3IgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYXB0LXByb2dyZXNzLWZkLWVycm9yCitpbmRleCA2MzIzMDA3Li5hNDcwOTViIDEwMDc1NQorLS0tIGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvcgorKysrIGIvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWFwdC1wcm9ncmVzcy1mZC1lcnJvcgorQEAgLTE4LDcgKzE4LDcgQEAgc2V0dXBhcHRhcmNoaXZlCisgZXhlYyAzPiBhcHQtcHJvZ3Jlc3MubG9nCisgdGVzdGZhaWx1cmUgYXB0Z2V0IGluc3RhbGwgZm9vMSBmb28yIC15IC1vIEFQVDo6U3RhdHVzLUZkPTMKKyBtc2d0ZXN0ICJFbnN1cmUgY29ycmVjdCBlcnJvciBtZXNzYWdlIgorLWlmIGdyZXAgLXEgImFwdGFyY2hpdmUvcG9vbC9mb28yXzAuOC4xNV9hbWQ2NC5kZWI6MzYuMzYzNjp0cnlpbmcgdG8gb3ZlcndyaXRlICcvdXNyL2Jpbi9maWxlLWNvbmZsaWN0Jywgd2hpY2ggaXMgYWxzbyBpbiBwYWNrYWdlIGZvbzEgMC44LjE1IiBhcHQtcHJvZ3Jlc3MubG9nOyB0aGVuCisraWYgZ3JlcCAtcSAiYXB0YXJjaGl2ZS9wb29sL2ZvbzJfMC44LjE1X2FtZDY0LmRlYjo0MDp0cnlpbmcgdG8gb3ZlcndyaXRlICcvdXNyL2Jpbi9maWxlLWNvbmZsaWN0Jywgd2hpY2ggaXMgYWxzbyBpbiBwYWNrYWdlIGZvbzEgMC44LjE1IiBhcHQtcHJvZ3Jlc3MubG9nOyB0aGVuCisgCW1zZ3Bhc3MKKyBlbHNlCisgCWNhdCBhcHQtcHJvZ3Jlc3MubG9nCitkaWZmIC0tZ2l0IGEvdGVzdC9pbnRlZ3JhdGlvbi90ZXN0LWJ1Zy03Njk2MDktdHJpZ2dlcnMtc3RpbGwtcGVuZGluZy1hZnRlci1ydW4gYi90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1bgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAxNDZmYTc2Li4wMDAwMDAwCistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3QtYnVnLTc2OTYwOS10cmlnZ2Vycy1zdGlsbC1wZW5kaW5nLWFmdGVyLXJ1bgorKysrIC9kZXYvbnVsbAorQEAgLTEsNzUgKzAsMCBAQAorLSMhL2Jpbi9zaAorLXNldCAtZQorLQorLVRFU1RESVI9JChyZWFkbGluayAtZiAkKGRpcm5hbWUgJDApKQorLS4gJFRFU1RESVIvZnJhbWV3b3JrCistCistc2V0dXBlbnZpcm9ubWVudAorLWNvbmZpZ2FyY2hpdGVjdHVyZSAnYW1kNjQnCistCistbXNndGVzdCAnQ2hlY2sgaWYgaW5zdGFsbGVkIGRwa2cgc3VwcG9ydHMnICdub2F3YWl0IHRyaWdnZXInCistaWYgZHBrZy1jaGVja2J1aWxkZGVwcyAtZCAnZHBrZyAoPj0gMS4xNi4xKScgL2Rldi9udWxsOyB0aGVuCistCW1zZ3Bhc3MKKy1lbHNlCistCW1zZ3NraXAgJ2Rwa2cgdmVyc2lvbiB0b28gb2xkJworLQlleGl0IDAKKy1maQorLWNvbmZpZ2Rwa2dub29wY2hyb290CistCistYnVpbGR0cmlnZ2VycGFja2FnZXMoKSB7CistCWxvY2FsIFRZUEU9IiQxIgorLQlzZXR1cHNpbXBsZW5hdGl2ZXBhY2thZ2UgInRyaWdnZXJhYmxlLSRUWVBFIiAnYWxsJyAnMS4wJyAndW5zdGFibGUnICJEZXBlbmRzOiB0cmlnZGVwZW5kcy0kVFlQRSIKKy0JQlVJTERESVI9ImluY29taW5nL3RyaWdnZXJhYmxlLSR7VFlQRX0tMS4wIgorLQljYXQgPiR7QlVJTERESVJ9L2RlYmlhbi9wb3N0aW5zdCA8PEVPRgorLSMhL2Jpbi9zaAorLWlmIFsgIlwkMSIgPSAndHJpZ2dlcmVkJyBdOyB0aGVuCistCWxzIC1sIC9wcm9jL3NlbGYvZmQvCistZmkKKy1FT0YKKy0JZWNobyAiJFRZUEUgL3Vzci9zaGFyZS9kb2MiID4gJHtCVUlMRERJUn0vZGViaWFuL3RyaWdnZXJzCistCWJ1aWxkcGFja2FnZSAiJEJVSUxERElSIiAndW5zdGFibGUnICdtYWluJyAnbmF0aXZlJworLQlybSAtcmYgIiRCVUlMRERJUiIKKy0JYnVpbGRzaW1wbGVuYXRpdmVwYWNrYWdlICJ0cmlnZGVwZW5kcy0kVFlQRSIgJ2FsbCcgJzEuMCcgJ3Vuc3RhYmxlJworLX0KKy0KKy0jYnVpbGR0cmlnZ2VycGFja2FnZXMgJ2ludGVyZXN0JworLWJ1aWxkdHJpZ2dlcnBhY2thZ2VzICdpbnRlcmVzdC1ub2F3YWl0JworLWJ1aWxkc2ltcGxlbmF0aXZlcGFja2FnZSAidHJpZ3N0dWZmIiAnYWxsJyAnMS4wJyAndW5zdGFibGUnCistCistc2V0dXBhcHRhcmNoaXZlCistCistcnVudGVzdHMoKSB7CistCWxvY2FsIFRZUEU9IiQxIgorLQltc2dtc2cgJ1dvcmtpbmcgd2l0aCB0cmlnZ2VyIHR5cGUnICIkVFlQRSIKKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IGluc3RhbGwgdHJpZ2dlcmFibGUtJFRZUEUgLXkKKy0JY3Agcm9vdGRpci90bXAvdGVzdHN1Y2Nlc3Mub3V0cHV0IHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0c3VjY2VzcyBncmVwICdeUkVXUklURSAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ2luc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRQorLQorLQl0ZXN0c3VjY2VzcyBhcHRnZXQgaW5zdGFsbCB0cmlnZGVwZW5kcy0kVFlQRSAteSAtLXJlaW5zdGFsbAorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IGluc3RhbGwgdHJpZ3N0dWZmIC15CistCWNwIHJvb3RkaXIvdG1wL3Rlc3RzdWNjZXNzLm91dHB1dCB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnXlJFV1JJVEUgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdHN1Y2Nlc3MgZ3JlcCAnIHJvb3Qgcm9vdCAnIHRlcm1pbmFsLm91dHB1dAorLQl0ZXN0ZHBrZ2luc3RhbGxlZCB0cmlnZ2VyYWJsZS0kVFlQRSB0cmlnZGVwZW5kcy0kVFlQRSB0cmlnc3R1ZmYKKy0KKy0JdGVzdHN1Y2Nlc3MgYXB0Z2V0IHB1cmdlIHRyaWdzdHVmZiAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RzdWNjZXNzIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKKy0JdGVzdGRwa2dub3RpbnN0YWxsZWQgdHJpZ3N0dWZmCistCistCXRlc3RzdWNjZXNzIGFwdGdldCBwdXJnZSB0cmlnZGVwZW5kcy0kVFlQRSAteQorLQljcCByb290ZGlyL3RtcC90ZXN0c3VjY2Vzcy5vdXRwdXQgdGVybWluYWwub3V0cHV0CistCXRlc3RmYWlsdXJlIGdyZXAgJ15SRVdSSVRFICcgdGVybWluYWwub3V0cHV0CistCXRlc3RmYWlsdXJlIGdyZXAgJyByb290IHJvb3QgJyB0ZXJtaW5hbC5vdXRwdXQKKy0JdGVzdGRwa2dub3RpbnN0YWxsZWQgdHJpZ2dlcmFibGUtJFRZUEUgdHJpZ2RlcGVuZHMtJFRZUEUKKy19CistI3J1bnRlc3RzICdpbnRlcmVzdCcKKy1ydW50ZXN0cyAnaW50ZXJlc3Qtbm9hd2FpdCcKK2RpZmYgLS1naXQgYS90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMgYi90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKK2luZGV4IDQxYzA1NzAuLmQzOTYwZDcgMTAwNzU1CistLS0gYS90ZXN0L2ludGVncmF0aW9uL3Rlc3Qtbm8tZmRzLWxlYWtlZC10by1tYWludGFpbmVyLXNjcmlwdHMKKysrKyBiL3Rlc3QvaW50ZWdyYXRpb24vdGVzdC1uby1mZHMtbGVha2VkLXRvLW1haW50YWluZXItc2NyaXB0cworQEAgLTU5LDggKzU5LDcgQEAgc3RhcnR1cCBwYWNrYWdlcyBjb25maWd1cmUKKyBjb25maWd1cmUgJFBLR05BTUUgMS4wIDxub25lPgorIHN0YXR1cyB1bnBhY2tlZCAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgaGFsZi1jb25maWd1cmVkICRQS0dOQU1FIDEuMAorLXN0YXR1cyBpbnN0YWxsZWQgJFBLR05BTUUgMS4wCistc3RhcnR1cCBwYWNrYWdlcyBjb25maWd1cmUiIGN1dCAtZiAzLSAtZCcgJyByb290ZGlyL3Zhci9sb2cvZHBrZy5sb2cKKytzdGF0dXMgaW5zdGFsbGVkICRQS0dOQU1FIDEuMCIgY3V0IC1mIDMtIC1kJyAnIHJvb3RkaXIvdmFyL2xvZy9kcGtnLmxvZworIH0KKyBjaGVja2luc3RhbGwKKyAKK0BAIC04NSw4ICs4NCw3IEBAIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCisgc3RhdHVzIGNvbmZpZy1maWxlcyAkUEtHTkFNRSAxLjAKKyBzdGF0dXMgY29uZmlnLWZpbGVzICRQS0dOQU1FIDEuMAorIHN0YXR1cyBjb25maWctZmlsZXMgJFBLR05BTUUgMS4wCistc3RhdHVzIG5vdC1pbnN0YWxsZWQgJFBLR05BTUUgPG5vbmU+Cistc3RhcnR1cCBwYWNrYWdlcyBjb25maWd1cmUiIGN1dCAtZiAzLSAtZCcgJyByb290ZGlyL3Zhci9sb2cvZHBrZy5sb2cKKytzdGF0dXMgbm90LWluc3RhbGxlZCAkUEtHTkFNRSA8bm9uZT4iIGN1dCAtZiAzLSAtZCcgJyByb290ZGlyL3Zhci9sb2cvZHBrZy5sb2cKKyB9CisgY2hlY2twdXJnZQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLWZpeC10aGUtZ2NjLXZlcnNpb24tY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVlYTU2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtZml4LXRoZS1nY2MtdmVyc2lvbi1jaGVjay5wYXRjaApAQCAtMCwwICsxLDE2MCBAQAorRnJvbSAxNWM2ZWY2YTgyN2QzNjgxYWQwNmU4NjJkMjdhYjNkZmI4NGNiNjg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyNyBNYXkgMjAxNSAxNDozMDoyOCArMDgwMAorU3ViamVjdDogW1BBVENIXSBmaXggdGhlIGdjYyB2ZXJzaW9uIGNoZWNrCisKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCisiR0NDIGRpYWdub3N0aWMgcHVzaCIgaXMgZ2NjIDQuNiBmZWF0dXJlLCBnY2MgNC40Ljcgb24gY2VudG9zIGRpZCBub3Qga25vdyBpdAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBhcHQtcGtnL2NhY2hlc2V0LmggICAgICAgICAgIHwgIDQgKystLQorIGFwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MgfCAxMiArKysrKystLS0tLS0KKyBhcHQtcGtnL3NyY3JlY29yZHMuY2MgICAgICAgIHwgIDQgKystLQorIGFwdC1wa2cvc3JjcmVjb3Jkcy5oICAgICAgICAgfCAgNCArKy0tCisgYXB0LXBrZy92ZW5kb3JsaXN0LmNjICAgICAgICB8ICA0ICsrLS0KKyA1IGZpbGVzIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9jYWNoZXNldC5oIGIvYXB0LXBrZy9jYWNoZXNldC5oCitpbmRleCBiNzIyOWJjLi44Y2MyOTE3IDEwMDY0NAorLS0tIGEvYXB0LXBrZy9jYWNoZXNldC5oCisrKysgYi9hcHQtcGtnL2NhY2hlc2V0LmgKK0BAIC0xMTksMTIgKzExOSwxMiBAQCBwdWJsaWM6CisgCQlpbmxpbmUgc3RkOjpzdHJpbmcgRnVsbE5hbWUoYm9vbCBjb25zdCBQcmV0dHkpIGNvbnN0IHsgcmV0dXJuIGdldFBrZygpLkZ1bGxOYW1lKFByZXR0eSk7IH0KKyAJCWlubGluZSBzdGQ6OnN0cmluZyBGdWxsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIGdldFBrZygpLkZ1bGxOYW1lKCk7IH0KKyAJCUFQVF9ERVBSRUNBVEVEIGlubGluZSBjb25zdCBjaGFyICpTZWN0aW9uKCkgY29uc3QgeworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKKyAJICAgcmV0dXJuIGdldFBrZygpLlNlY3Rpb24oKTsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCQl9CitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9kZWIvZGVic3JjcmVjb3Jkcy5jYyBiL2FwdC1wa2cvZGViL2RlYnNyY3JlY29yZHMuY2MKK2luZGV4IDQ5YTM0OGQuLjRiYzlkY2YgMTAwNjQ0CistLS0gYS9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCisrKysgYi9hcHQtcGtnL2RlYi9kZWJzcmNyZWNvcmRzLmNjCitAQCAtMTI2LDEzICsxMjYsMTMgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGU+ICZGKQorICAgIGZvciAoc3RkOjp2ZWN0b3I8cGtnU3JjUmVjb3Jkczo6RmlsZTI+Ojpjb25zdF9pdGVyYXRvciBmMiA9IEYyLmJlZ2luKCk7IGYyICE9IEYyLmVuZCgpOyArK2YyKQorICAgIHsKKyAgICAgICBwa2dTcmNSZWNvcmRzOjpGaWxlMiBmOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAjZW5kaWYKKyAgICAgICBmLk1ENUhhc2ggPSBmMi0+TUQ1SGFzaDsKKyAgICAgICBmLlNpemUgPSBmMi0+U2l6ZTsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgICAgICAgZi5QYXRoID0gZjItPlBhdGg7CitAQCAtMTkwLDE0ICsxOTAsMTQgQEAgYm9vbCBkZWJTcmNSZWNvcmRQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkxpc3QpCisgCSAvLyB3ZSBoYXZlIGl0IGFscmVhZHksIHN0b3JlIHRoZSBuZXcgaGFzaCBhbmQgYmUgZG9uZQorIAkgaWYgKGZpbGUgIT0gTGlzdC5lbmQoKSkKKyAJIHsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCS8vIHNldCBmb3IgY29tcGF0aWJpbGl0eSBvbmx5LCBzbyB3YXJuIHVzZXJzIG5vdCB1cworIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorIAkgICAgaWYgKGNoZWNrc3VtRmllbGQgPT0gIkZpbGVzIikKKyAJICAgICAgIGZpbGUtPk1ENUhhc2ggPSBoYXNoOworLSNpZiBfX0dOVUNfXyA+PSA0CisrI2lmIF9fR05VQ19fID49IDQgKyAoNiA+PSBfX0dOVUNfTUlOT1JfXykKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyAjZW5kaWYKKyAJICAgIC8vIGFuIGVycm9yIGhlcmUgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSB0d28gZGlmZmVyZW50IGhhc2hlcyBmb3IgdGhlIHNhbWUgZmlsZQorQEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIGRlYlNyY1JlY29yZFBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmTGlzdCkKKyAJIEYuRmlsZVNpemUgPSBzdHJ0b3VsbChzaXplLmNfc3RyKCksIE5VTEwsIDEwKTsKKyAJIEYuSGFzaGVzLnB1c2hfYmFjayhoYXNoU3RyaW5nKTsKKyAKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCS8vIHNldCBmb3IgY29tcGF0aWJpbGl0eSBvbmx5LCBzbyB3YXJuIHVzZXJzIG5vdCB1cworIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorQEAgLTIyMCw3ICsyMjAsNyBAQCBib29sIGRlYlNyY1JlY29yZFBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmTGlzdCkKKyAJIEYuU2l6ZSA9IEYuRmlsZVNpemU7CisgCSBpZiAoY2hlY2tzdW1GaWVsZCA9PSAiRmlsZXMiKQorIAkgICAgRi5NRDVIYXNoID0gaGFzaDsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9zcmNyZWNvcmRzLmNjIGIvYXB0LXBrZy9zcmNyZWNvcmRzLmNjCitpbmRleCAzMTc1ZWU3Li4zNDBlNzk2IDEwMDY0NAorLS0tIGEvYXB0LXBrZy9zcmNyZWNvcmRzLmNjCisrKysgYi9hcHQtcGtnL3NyY3JlY29yZHMuY2MKK0BAIC0xNjAsNyArMTYwLDcgQEAgYm9vbCBwa2dTcmNSZWNvcmRzOjpQYXJzZXI6OkZpbGVzMihzdGQ6OnZlY3Rvcjxwa2dTcmNSZWNvcmRzOjpGaWxlMj4gJkYyKS8qe3t7Ki8KKyAgICBmb3IgKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGU+Ojpjb25zdF9pdGVyYXRvciBmID0gRi5iZWdpbigpOyBmICE9IEYuZW5kKCk7ICsrZikKKyAgICB7CisgICAgICAgcGtnU3JjUmVjb3Jkczo6RmlsZTIgZjI7CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorQEAgLTE2OCw3ICsxNjgsNyBAQCBib29sIHBrZ1NyY1JlY29yZHM6OlBhcnNlcjo6RmlsZXMyKHN0ZDo6dmVjdG9yPHBrZ1NyY1JlY29yZHM6OkZpbGUyPiAmRjIpLyp7e3sqLworICAgICAgIGYyLlNpemUgPSBmLT5TaXplOworICAgICAgIGYyLkhhc2hlcy5wdXNoX2JhY2soSGFzaFN0cmluZygiTUQ1U3VtIiwgZi0+TUQ1SGFzaCkpOworICAgICAgIGYyLkZpbGVTaXplID0gZi0+U2l6ZTsKKy0jaWYgX19HTlVDX18gPj0gNAorKyNpZiBfX0dOVUNfXyA+PSA0ICsgKDYgPj0gX19HTlVDX01JTk9SX18pCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcG9wCisgI2VuZGlmCisgICAgICAgZjIuUGF0aCA9IGYtPlBhdGg7CitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9zcmNyZWNvcmRzLmggYi9hcHQtcGtnL3NyY3JlY29yZHMuaAoraW5kZXggZGRlMjJiZC4uOTFmODA2MSAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvc3JjcmVjb3Jkcy5oCisrKysgYi9hcHQtcGtnL3NyY3JlY29yZHMuaAorQEAgLTMwLDcgKzMwLDcgQEAgY2xhc3MgcGtnU3JjUmVjb3JkcworIHsKKyAgICBwdWJsaWM6CisgCistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkvLyBlbnN1cmUgdGhhdCBjb24tICYgZGUtc3RydWN0b3IgZG9uJ3QgdHJpZ2dlciB0aGlzIHdhcm5pbmcKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisgCSNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKK0BAIC00OCw3ICs0OCw3IEBAIGNsYXNzIHBrZ1NyY1JlY29yZHMKKyAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgRmlsZVNpemU7CisgICAgICAgSGFzaFN0cmluZ0xpc3QgSGFzaGVzOworICAgIH07CistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2FwdC1wa2cvdmVuZG9ybGlzdC5jYyBiL2FwdC1wa2cvdmVuZG9ybGlzdC5jYworaW5kZXggZmIzM2ZmMS4uYmExZDNjMyAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvdmVuZG9ybGlzdC5jYworKysrIGIvYXB0LXBrZy92ZW5kb3JsaXN0LmNjCitAQCAtMTEsNyArMTEsNyBAQAorIAorICNpbmNsdWRlIDxhcHRpMThuLmg+CisgCistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyAJI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICNlbmRpZgorQEAgLTE2Myw2ICsxNjMsNiBAQCBjb25zdCBWZW5kb3IqIHBrZ1ZlbmRvckxpc3Q6OkZpbmRWZW5kb3IoY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiBHUEdWT3V0cHV0KQkvKgorIH0KKyAJCQkJCQkJCQkvKn19fSovCisgCistI2lmIF9fR05VQ19fID49IDQKKysjaWYgX19HTlVDX18gPj0gNCArICg2ID49IF9fR05VQ19NSU5PUl9fKQorIAkjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAorICNlbmRpZgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC8wMDAxLXJlbW92ZS1Xc3VnZ2VzdC1hdHRyaWJ1dGUtZnJvbS1DRkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0MmZmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0LzAwMDEtcmVtb3ZlLVdzdWdnZXN0LWF0dHJpYnV0ZS1mcm9tLUNGTEFHUy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDJiZmY3ZWUwNmE0Zjk2ZTdkMzI2OTkxZDYxZmI4NmY4YWE2NTFkNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI3IE1heSAyMDE1IDA5OjQ4OjQ1ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHJlbW92ZSBXc3VnZ2VzdC1hdHRyaWJ1dGUgZnJvbSBDWFhGTEFHUworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworV3N1Z2dlc3QtYXR0cmlidXRlIGlzIEdDQyA0LjYgZmVhdHVyZSwgY2VudG9zNiBpcyB1c2luZyBHQ0MKKzQuNC43IHdoaWNoIHVua25vd24gdGhpcyBmbGFnLCBzbyByZW1vdmUgaXQgZnJvbSBDWFhGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBidWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4gfCAxIC0KKyB0ZXN0L2xpYmFwdC9tYWtlZmlsZSAgICAgICAgfCAxIC0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4gYi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KK2luZGV4IGIwYThkOWQuLjkxZWQwMTEgMTAwNjQ0CistLS0gYS9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KKysrKyBiL2J1aWxkbGliL2Vudmlyb25tZW50Lm1hay5pbgorQEAgLTExLDcgKzExLDYgQEAgQ1BQRkxBR1MrPSBAQ1BQRkxBR1NAIEBERUZTQCAtRF9SRUVOVFJBTlQgLURfRk9SVElGWV9TT1VSQ0U9MgorIENYWCA9IEBDWFhACisgQ1hYRkxBR1MrPSBAQ1hYRkxBR1NAIC1XYWxsIC1XZXh0cmEKKyBDWFhGTEFHUys9IC1XY2FzdC1hbGlnbiAtV2xvZ2ljYWwtb3AgLVdyZWR1bmRhbnQtZGVjbHMgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV3Vuc2FmZS1sb29wLW9wdGltaXphdGlvbnMKKy1DWFhGTEFHUys9IC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9cHVyZSAtV3N1Z2dlc3QtYXR0cmlidXRlPWNvbnN0IC1Xc3VnZ2VzdC1hdHRyaWJ1dGU9bm9yZXR1cm4KKyAjIGEgYml0IHRvbyBwZWRhbnRpYyB0byBiZSBydW4gYnkgZGVmYXVsdAorICNDWFhGTEFHUys9IC1XcGVkYW50aWMgLVduby1sb25nLWxvbmcgLVduby12bGEgLVduby12YXJpYWRpYy1tYWNyb3MKKyBOVU1fUFJPQ1MgPSBATlVNX1BST0NTQAorZGlmZiAtLWdpdCBhL3Rlc3QvbGliYXB0L21ha2VmaWxlIGIvdGVzdC9saWJhcHQvbWFrZWZpbGUKK2luZGV4IDdmMjNhY2UuLmU4MDVmMTMgMTAwNjQ0CistLS0gYS90ZXN0L2xpYmFwdC9tYWtlZmlsZQorKysrIGIvdGVzdC9saWJhcHQvbWFrZWZpbGUKK0BAIC0zOSw3ICszOSw2IEBAIENYWEZMQUdTICs9IC1wdGhyZWFkCisgIyBkaXNhYmxlIHNvbWUgZmxhZ3MgZm9yIGd0ZXN0IGFnYWluCisgQ1hYRkxBR1MrPSAtV25vLW1pc3NpbmctZGVjbGFyYXRpb25zCisgQ1hYRkxBR1MrPSAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzCistQ1hYRkxBR1MrPSAtV25vLXN1Z2dlc3QtYXR0cmlidXRlPXB1cmUgLVduby1zdWdnZXN0LWF0dHJpYnV0ZT1jb25zdCAtV25vLXN1Z2dlc3QtYXR0cmlidXRlPW5vcmV0dXJuCisgCisgIyBBbGwgR29vZ2xlIFRlc3QgaGVhZGVycy4gIFVzdWFsbHkgeW91IHNob3VsZG4ndCBjaGFuZ2UgdGhpcyBkZWZpbml0aW9uLgorIEdURVNUX0hFQURFUlMgPSAvdXNyL2luY2x1ZGUvZ3Rlc3QvKi5oIFwKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9kaXNhYmxlLWNvbmZpZ3VyZS1pbi1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzJmNjRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS1jb25maWd1cmUtaW4tbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorRGlzYWJsZSBjb25maWd1cmUgYXQgY29tcGlsYXRpb24gc3RhZ2UKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogYXB0LTAuOS43LjcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjcuNy5vcmlnL01ha2VmaWxlCisrKysgYXB0LTAuOS43LjcvTWFrZWZpbGUKK0BAIC0zMyw3ICszMyw3IEBAIHZlcnljbGVhbjogY2xlYW4KKyAjIFRoZSBzdGFydHVwIHRhcmdldCBidWlsZHMgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmUgc2NyaXB0cy4gSXQgc2hvdWxkCisgIyBiZSB1c2VkIGFmdGVyIGEgQ1ZTIGNoZWNrb3V0LgorIENPTlZFUlRFRD1lbnZpcm9ubWVudC5tYWsgaW5jbHVkZS9jb25maWcuaCBpbmNsdWRlL2FwdGkxOG4uaCBidWlsZC9kb2MvRG94eWZpbGUgbWFrZWZpbGUKKy1pbmNsdWRlIGJ1aWxkbGliL2NvbmZpZ3VyZS5tYWsKKysjaW5jbHVkZSBidWlsZGxpYi9jb25maWd1cmUubWFrCisgJChCVUlMRERJUikvaW5jbHVkZS9jb25maWcuaDogYnVpbGRsaWIvY29uZmlnLmguaW4KKyAkKEJVSUxERElSKS9pbmNsdWRlL2FwdGkxOG4uaDogYnVpbGRsaWIvYXB0aTE4bi5oLmluCisgJChCVUlMRERJUikvZW52aXJvbm1lbnQubWFrOiBidWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2Rpc2FibGUtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY3OTVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvZGlzYWJsZS10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK1tQQVRDSF0gZGlzYWJsZSB0ZXN0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKwordGVzdCBuZWVkcyBndGVzdCBwYWNrYWdlLCBzbyBub3QgYnVpbGQgdGhlIHRlc3QgZGlyCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlICAgICB8IDcgKysrLS0tLQorIGNvbmZpZ3VyZS5hYyB8IDYgLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNWY1ZmIyNy4uNTA3MGU5NiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTksOCArOSw4IEBAIGVuZGlmCisgLlBIT05ZOiBkZWZhdWx0CisgZGVmYXVsdDogc3RhcnR1cCBhbGwKKyAKKy0uUEhPTlk6IGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYWxsIGJpbmFyeSBwcm9ncmFtIGRvYyB0ZXN0IHVwZGF0ZS1wbworLWFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHRlc3QgdXBkYXRlLXBvIHN0YXJ0dXAgZGlyczoKKysuUEhPTlk6IGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYWxsIGJpbmFyeSBwcm9ncmFtIGRvYyB1cGRhdGUtcG8KKythbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB1cGRhdGUtcG8gc3RhcnR1cCBkaXJzOgorIAkkKE1BS0UpIC1DIHZlbmRvciAkQAorIAkkKE1BS0UpIC1DIGFwdC1wa2cgJEAKKyAJJChNQUtFKSAtQyBhcHQtaW5zdCAkQAorQEAgLTIxLDkgKzIxLDggQEAgYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYXJ5IHByb2dyYW0gZG9jIG1hbnBhZ2VzIGRvY2Jvb2sgdGVzdCB1cGQKKyAJJChNQUtFKSAtQyBkc2VsZWN0ICRACisgIwkkKE1BS0UpIC1DIGRvYyAkQAorIAkkKE1BS0UpIC1DIHBvICRACistCSQoTUFLRSkgLUMgdGVzdCAkQAorIAorLWFsbCBoZWFkZXJzIGxpYnJhcnkgY2xlYW4gdmVyeWNsZWFuIGJpbmFyeSBwcm9ncmFtIGRvYyBtYW5wYWdlcyBkb2Nib29rIHRlc3QgdXBkYXRlLXBvOiBzdGFydHVwIGRpcnMKKythbGwgaGVhZGVycyBsaWJyYXJ5IGNsZWFuIHZlcnljbGVhbiBiaW5hcnkgcHJvZ3JhbSBkb2MgbWFucGFnZXMgZG9jYm9vayB1cGRhdGUtcG86IHN0YXJ0dXAgZGlycworIAorIGRpcnM6IHN0YXJ0dXAKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDU2NjNhYWYuLmIwZjk1NjQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTg5LDEyICs4OSw2IEBAIEFDX0NIRUNLX0xJQihjdXJsLCBjdXJsX2Vhc3lfaW5pdCwKKyAgICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiBJIG5lZWQgQ1VSTCBkdWUgaHR0cHMgc3VwcG9ydF0pLAorICkKKyAKKy1BQ19MQU5HX1BVU0goW0MrK10pCistQUNfQ0hFQ0tfSEVBREVSKGd0ZXN0L2d0ZXN0LmgsLAorLSAgICAgQUNfTVNHX0VSUk9SKFtmYWlsZWQ6IEkgbmVlZCBndGVzdCB0byBidWlsZCB0ZXN0c10pLAorLSkKKy1BQ19MQU5HX1BPUChbQysrXSkKKy0KKyAKKyBBQ19TVUJTVChCREJMSUIpCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L2ZpeC1nY2MtNC42LW51bGwtbm90LWRlZmluZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWFlNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9maXgtZ2NjLTQuNi1udWxsLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9hcHQtcGtnL2NvbnRyaWIvd2Vha3B0ci5oCisrKysgYi9hcHQtcGtnL2NvbnRyaWIvd2Vha3B0ci5oCitAQCAtMjEsNiArMjEsNyBAQAorICNpZm5kZWYgV0VBS19QT0lOVEVSX0gKKyAjZGVmaW5lIFdFQUtfUE9JTlRFUl9ICisgCisrI2luY2x1ZGUgPGNzdGRsaWI+CisgI2luY2x1ZGUgPHNldD4KKyAvKioKKyAgKiBDbGFzcyBmb3Igb2JqZWN0cyBwcm92aWRpbmcgc3VwcG9ydCBmb3Igd2VhayBwb2ludGVycy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L21ha2VyYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbWFrZXJhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZlMzE2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L21ha2VyYWNlLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0kgd2FzIHNlZWluZyB2YXJpb3VzIGlzc3VlcyB3aXRoIHBhcmFsbGVsIG1ha2UsIG1haW5seSBkdWUgdG8gdG8gd2hhdCB3YXMgbGlrZWx5IAorcGFydGlhbGx5IGluc3RhbGxlZCBoZWFkZXJzLiBJZiB5b3UgY2hhbmdlIGludG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkgYW5kCisiTk9JU1k9MSBtYWtlICAuLi9vYmovYXB0LXBrZy9zb3VyY2VsaXN0Lm9waWMiIGluIGFwdC1wa2csIHlvdSdsbCBzZWUgaXQgCitkb2Vzbid0IGhhdmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgaGVhZGVycyBiZWluZyBpbnN0YWxsZWQuIFRoaXMgcGF0Y2gKK2ZpeGVzIHRoYXQgc28gdGhpbmdzIGJ1aWxkIGNvcnJlY3RseS4KKworUlAgMjAxMi8zLzE5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogYXB0LTAuOS45LjQvYnVpbGRsaWIvbGlicmFyeS5tYWsKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC45LjkuNC5vcmlnL2J1aWxkbGliL2xpYnJhcnkubWFrCTIwMTMtMDctMzEgMTU6NDU6MDcuMzIwNDQwNTc1ICswMzAwCisrKysgYXB0LTAuOS45LjQvYnVpbGRsaWIvbGlicmFyeS5tYWsJMjAxMy0wNy0zMSAxNTo0Njo0OS40NDA0NDA1NjEgKzAzMDAKK0BAIC02MSw3ICs2MSw3IEBACisgCisgIyBDb21waWxhdGlvbiBydWxlcworIHZwYXRoICUuY2MgJChTVUJESVJTKQorLSQoT0JKKS8lLm9waWM6ICUuY2MgJChMSUJSQVJZREVQRU5EUykKKyskKE9CSikvJS5vcGljOiAlLmNjICQoTElCUkFSWURFUEVORFMpICQoJChMT0NBTCktSEVBREVSUykKKyAJZWNobyBDb21waWxpbmcgJDwgdG8gJEAKKyAJJChDWFgpIC1jICQoSU5MSU5FREVQRkxBRykgJChDUFBGTEFHUykgJChDWFhGTEFHUykgJChQSUNGTEFHUykgLW8gJEAgJDwKKyAJJChEb0RlcCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vLW5scy1kcGtnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm8tbmxzLWRwa2cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5OTZkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vLW5scy1kcGtnLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9hcHQtcGtnL2RlYi9kcGtncG0uY2MKKysrKyBiL2FwdC1wa2cvZGViL2Rwa2dwbS5jYworQEAgLTQyLDYgKzQyLDEyIEBACisgI2luY2x1ZGUgPGFwdGkxOG4uaD4KKyAJCQkJCQkJCQkvKn19fSovCisgCisrI2lmZGVmIFVTRV9OTFMKKysjZGVmaW5lIF9kcGtnKHgpIGRnZXR0ZXh0KCJkcGtnIiwgeCkKKysjZWxzZQorKyNkZWZpbmUgX2Rwa2coeCkgeAorKyNlbmRpZgorKworIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisgCisgbmFtZXNwYWNlCitAQCAtMTI3OSw3ICsxMjg1LDcgQEAgdm9pZCBwa2dEUGtnUE06OldyaXRlQXBwb3J0UmVwb3J0KGNvbnN0CisgICAgfQorIAorICAgIC8vIGNoZWNrIGlmIGl0cyBub3QgYSBmb2xsb3cgdXAgZXJyb3IgCistICAgY29uc3QgY2hhciAqbmVlZGxlID0gZGdldHRleHQoImRwa2ciLCAiZGVwZW5kZW5jeSBwcm9ibGVtcyAtIGxlYXZpbmcgdW5jb25maWd1cmVkIik7CisrICAgY29uc3QgY2hhciAqbmVlZGxlID0gX2Rwa2coImRlcGVuZGVuY3kgcHJvYmxlbXMgLSBsZWF2aW5nIHVuY29uZmlndXJlZCIpOworICAgIGlmKHN0cnN0cihlcnJvcm1zZywgbmVlZGxlKSAhPSBOVUxMKSB7CisgICAgICAgc3RkOjpjbG9nIDw8IF8oIk5vIGFwcG9ydCByZXBvcnQgd3JpdHRlbiBiZWNhdXNlIHRoZSBlcnJvciBtZXNzYWdlIGluZGljYXRlcyBpdHMgYSBmb2xsb3d1cCBlcnJvciBmcm9tIGEgcHJldmlvdXMgZmFpbHVyZS4iKSA8PCBzdGQ6OmVuZGw7CisgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC9ub2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmM2NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCisKK2RpZmYgLS1naXQgYS9hcHQtcGtnL3BhY2thZ2VtYW5hZ2VyLmNjIGIvYXB0LXBrZy9wYWNrYWdlbWFuYWdlci5jYworaW5kZXggMjQ5NTQyYy4uMGExOTExZiAxMDA2NDQKKy0tLSBhL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MKKysrKyBiL2FwdC1wa2cvcGFja2FnZW1hbmFnZXIuY2MKK0BAIC05NTIsMTAgKzk1MiwxMiBAQCBib29sIHBrZ1BhY2thZ2VNYW5hZ2VyOjpTbWFydFVuUGFjayhQa2dJdGVyYXRvciBQa2csIGJvb2wgY29uc3QgSW1tZWRpYXRlLCBpbnQgYworICAgICAgIHJldHVybiBmYWxzZTsKKyAKKyAgICBpZiAoSW1tZWRpYXRlID09IHRydWUpIHsKKysjaWYgMAorICAgICAgIC8vIFBlcmZvcm0gaW1tZWRhdGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcGFja2FnZS4gCisgICAgICAgICAgaWYgKFNtYXJ0Q29uZmlndXJlKFBrZywgRGVwdGggKyAxKSA9PSBmYWxzZSkKKyAgICAgICAgICAgICBfZXJyb3ItPkVycm9yKF8oIkNvdWxkIG5vdCBwZXJmb3JtIGltbWVkaWF0ZSBjb25maWd1cmF0aW9uIG9uICclcycuICIKKyAgICAgICAgICAgICAgICAiUGxlYXNlIHNlZSBtYW4gNSBhcHQuY29uZiB1bmRlciBBUFQ6OkltbWVkaWF0ZS1Db25maWd1cmUgZm9yIGRldGFpbHMuICglZCkiKSxQa2cuRnVsbE5hbWUoKS5jX3N0cigpLDIpOworKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK0BAIC0xMDM4LDYgKzEwNDAsNyBAQCBwa2dQYWNrYWdlTWFuYWdlcjo6T3JkZXJSZXN1bHQgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVySW5zdGFsbCgpCisgICAgICAgfQorICAgIH0KKyAKKysjaWYgMAorICAgIC8vIEZpbmFsIHJ1biB0aHJvdWdoIHRoZSBjb25maWd1cmUgcGhhc2UKKyAgICBpZiAoQ29uZmlndXJlQWxsKCkgPT0gZmFsc2UpCisgICAgICAgcmV0dXJuIEZhaWxlZDsKK0BAIC0xMDUyLDYgKzEwNTUsNyBAQCBwa2dQYWNrYWdlTWFuYWdlcjo6T3JkZXJSZXN1bHQgcGtnUGFja2FnZU1hbmFnZXI6Ok9yZGVySW5zdGFsbCgpCisgCSByZXR1cm4gRmFpbGVkOworICAgICAgIH0KKyAgICB9CisrI2VuZGlmCisgCSAKKyAgICByZXR1cm4gQ29tcGxldGVkOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvbm9kb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ5ZTQyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L25vZG9jLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0Rpc2FibGUgZG9jdW1lbnRhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhcHQtMC45LjcuNy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjkuNy43Lm9yaWcvTWFrZWZpbGUKKysrKyBhcHQtMC45LjcuNy9NYWtlZmlsZQorQEAgLTE3LDcgKzE3LDcgQEAgYWxsIGhlYWRlcnMgbGlicmFyeSBjbGVhbiB2ZXJ5Y2xlYW4gYmluYQorIAkkKE1BS0UpIC1DIGNtZGxpbmUgJEAKKyAJJChNQUtFKSAtQyBmdHBhcmNoaXZlICRACisgCSQoTUFLRSkgLUMgZHNlbGVjdCAkQAorLQkkKE1BS0UpIC1DIGRvYyAkQAorKyMJJChNQUtFKSAtQyBkb2MgJEAKKyAJJChNQUtFKSAtQyBwbyAkQAorIAkkKE1BS0UpIC1DIHRlc3QgJEAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3RydW5jYXRlLWZpbGVuYW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHQvdHJ1bmNhdGUtZmlsZW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxYzQyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3RydW5jYXRlLWZpbGVuYW1lLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK3N0cnV0bC5jYzogdGhlIGZpbGVuYW1lIGNhbid0IGJlIGxvbmdlciB0aGFuIDI1NQorCitUaGUgVVJJdG9GaWxlTmFtZSB0cmFuc2xhdGVzIHRoZSBwYXRoIGludG8gdGhlIGZpbGVuYW1lLCBidXQgdGhlCitmaWxlbmFtZSBjYW4ndCBiZSBsb25nZXIgdGhhbiAyNTUgYWNjb3JkaW5nIHRvCisvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmguCisKK1RydW5jYXRlIGl0IHdoZW4gaXQgaXMgbG9uZ2VyIHRoYW4gMjQwIChsZWF2ZSBzb21lIHNwYWNlcyBmb3IKKyIuUGFja2FnZXMiIGFuZCAiLl9SZWxlYXNlIiBzdWZmaXgpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBhcHQtcGtnL2NvbnRyaWIvc3RydXRsLmNjIHwgICAgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXB0LXBrZy9jb250cmliL3N0cnV0bC5jYyBiL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MKKy0tLSBhL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MKKysrKyBiL2FwdC1wa2cvY29udHJpYi9zdHJ1dGwuY2MKK0BAIC0zOTksNyArMzk5LDEyIEBAIHN0cmluZyBVUkl0b0ZpbGVOYW1lKGNvbnN0IHN0cmluZyAmVVJJKQorICAgIC8vICJceDAwLVx4MjB7fXxcXFxcXlxcW1xcXTw+XCJceDdGLVx4RkYiOworICAgIHN0cmluZyBOZXdVUkkgPSBRdW90ZVN0cmluZyhVLCJcXHx7fVtdPD5cIl5+Xz0hQCMkJV4mKiIpOworICAgIHJlcGxhY2UoTmV3VVJJLmJlZ2luKCksTmV3VVJJLmVuZCgpLCcvJywnXycpOworLSAgIHJldHVybiBOZXdVUkk7CisrCisrICAgLy8gVHJ1bmNhdGUgZnJvbSB0aGUgaGVhZCB3aGVuIGl0IGlzIGxvbmdlciB0aGFuIDI0MAorKyAgIGlmKE5ld1VSSS5sZW5ndGgoKSA+IDI0MCkKKysgICAgICAgcmV0dXJuIE5ld1VSSS5zdWJzdHIoTmV3VVJJLmxlbmd0aCgpIC0gMjQwLCBOZXdVUkkubGVuZ3RoKCkgLSAxKTsKKysgICBlbHNlCisrICAgICAgIHJldHVybiBOZXdVUkk7CisgfQorIAkJCQkJCQkJCS8qfX19Ki8KKyAvLyBCYXNlNjRFbmNvZGUgLSBCYXNlNjQgRW5jb2Rpbmcgcm91dGluZSBmb3Igc2hvcnQgc3RyaW5ncwkJLyp7e3sqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC91c2UtaG9zdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0L3VzZS1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGZjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2FwdC91c2UtaG9zdC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGFwdC0wLjkuNy43L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwdC0wLjkuNy43Lm9yaWcvY29uZmlndXJlLmFjCisrKysgYXB0LTAuOS43LjcvY29uZmlndXJlLmFjCitAQCAtMTEyLDcgKzExMiw3IEBAIGRubCBUaGlzIGlzIG9mdGVuIHRoZSBkcGtnIGFyY2hpdGVjdHVyZQorIGRubCBGaXJzdCBjaGVjayBhZ2FpbnN0IHRoZSBmdWxsIGNhbm9uaWNhbCBjYW5vbmNpYWwtc3lzdGVtLXR5cGUgaW4gJHRhcmdldAorIGRubCBhbmQgaWYgdGhhdCBmYWlscywganVzdCBsb29rIGZvciB0aGUgY3B1CisgQUNfTVNHX0NIRUNLSU5HKGRlYmlhbiBhcmNoaXRlY3R1cmUpCistYXJjaHNldD0iYGRwa2ctYXJjaGl0ZWN0dXJlIC1xREVCX0hPU1RfQVJDSGAiCisrYXJjaHNldD0iYGVjaG8gJGhvc3RfYWxpYXN8Y3V0IC1kJy0nIC1mMWAiCisgaWYgdGVzdCAieCRhcmNoc2V0IiA9ICJ4IjsgdGhlbgorICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiB1c2UgLS1ob3N0PSBvciBvdXRwdXQgZnJvbSBkcGtnLWFyY2hpdGVjdHVyZV0pCisgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9hcHRfMS4wLjEwLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3N2UyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvYXB0XzEuMC4xMC4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK0RFUEVORFMgPSAiY3VybCBkYiIKK1JERVBFTkRTXyR7UE59ID0gImRwa2cgYmFzaCBkZWJpYW51dGlscyIKK3JlcXVpcmUgYXB0LmluYworCityZXF1aXJlIGFwdC1wYWNrYWdlLmluYworCitQQUNLQUdFQ09ORklHID8/PSAibHptYSIKK1BBQ0tBR0VDT05GSUdbbHptYV0gPSAiYWNfY3ZfbGliX2x6bWFfbHptYV9lYXN5X2VuY29kZXI9eWVzLGFjX2N2X2xpYl9sem1hX2x6bWFfZWFzeV9lbmNvZGVyPW5vLHh6IgorCitGSUxFU18ke1BOfSArPSAiJHtiaW5kaXJ9L2FwdC1rZXkiCithcHQtbWFucGFnZXMgKz0gImRvYy9hcHQta2V5LjgiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgICNXcml0ZSB0aGUgY29ycmVjdCBhcHQtYXJjaGl0ZWN0dXJlIHRvIGFwdC5jb25mCisgICAgQVBUX0NPTkY9JHtEfS9ldGMvYXB0L2FwdC5jb25mCisgICAgZWNobyAnQVBUOjpBcmNoaXRlY3R1cmUgIiR7RFBLR19BUkNIfSI7JyA+ICR7QVBUX0NPTkZ9CisgICAgb2VfbGliaW5zdGFsbCAtc28gLUMgYmluIGxpYmFwdC1wcml2YXRlICR7RH0ke2xpYmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2FwdC5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzM1MTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9hcHQuY29uZgpAQCAtMCwwICsxLDQyIEBACitEaXIgIiR7U1RBR0lOR19ESVJfTkFUSVZFfS8iCit7CisgICBTdGF0ZSAidmFyL2xpYi9hcHQvIgorICAgeworICAgICAgTGlzdHMgIiNBUFRDT05GIy9saXN0cy8iOworICAgICAgc3RhdHVzICIjUk9PVEZTIy92YXIvbGliL2Rwa2cvc3RhdHVzIjsKKyAgIH07CisgICBDYWNoZSAidmFyL2NhY2hlL2FwdC8iCisgICB7CisgICAgICBBcmNoaXZlcyAiYXJjaGl2ZXMvIjsKKyAgICAgIHBrZ2NhY2hlICIiOworICAgICAgc3JjcGtnY2FjaGUgIiI7CisgICB9OworICAgQmluICIke1NUQUdJTkdfQklORElSX05BVElWRX0vIgorICAgeworICAgICAgbWV0aG9kcyAiJHtTVEFHSU5HX0xJQkRJUn0vYXB0L21ldGhvZHMvIjsKKyAgICAgIGd6aXAgIi9iaW4vZ3ppcCI7CisgICAgICBkcGtnICJkcGtnIjsKKyAgICAgIGRwa2ctc291cmNlICJkcGtnLXNvdXJjZSI7CisgICAgICBkcGtnLWJ1aWxkcGFja2FnZSAiZHBrZy1idWlsZHBhY2thZ2UiOworICAgICAgYXB0LWdldCAiYXB0LWdldCI7CisgICAgICBhcHQtY2FjaGUgImFwdC1jYWNoZSI7CisgICB9OworICAgRXRjICIjQVBUQ09ORiMiCisgICB7CisgICAgICBQcmVmZXJlbmNlcyAicHJlZmVyZW5jZXMiOworICAgfTsKK307CisKK0FQVAoreworICBJbnN0YWxsLVJlY29tbWVuZHMgInRydWUiOworICBJbW1lZGlhdGUtQ29uZmlndXJlICJmYWxzZSI7CisgIEFyY2hpdGVjdHVyZSAiaTU4NiI7CisgIEdldAorICB7CisgICAgIEFzc3VtZS1ZZXMgInRydWUiOworICAgICBGb3JjZS1ZZXMgInRydWUiCisgIH07Cit9OworCitEUGtnOjpPcHRpb25zIHsiLS1yb290PSNST09URlMjIjsiLS1hZG1pbmRpcj0jUk9PVEZTIy92YXIvbGliL2Rwa2ciOyItLWZvcmNlLWFsbCI7Ii0tbm8tZGVic2lnIn07CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2RiX2xpbmtpbmdfaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZGJfbGlua2luZ19oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWQ0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2RiX2xpbmtpbmdfaGFjay5wYXRjaApAQCAtMCwwICsxLDI5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBhcHQtMC43LjMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXB0LTAuNy4zLm9yaWcvY29uZmlndXJlLmFjCTIwMDctMDctMDEgMTA6Mzg6NDUuMDAwMDAwMDAwICswMDAwCisrKysgYXB0LTAuNy4zL2NvbmZpZ3VyZS5hYwkyMDA3LTA4LTIxIDEzOjM5OjI2LjAwMDAwMDAwMCArMDAwMAorQEAgLTY3LDggKzY3LDIwIEBACisgICAgICAgW0FDX0RFRklORShIQVZFX0JEQikKKyAgICAgICAgQkRCTElCPSItbGRiIgorICAgICAgICBBQ19NU0dfUkVTVUxUKHllcyldLAorLSAgICAgIFtCREJMSUI9IiIKKy0gICAgICAgQUNfTVNHX1JFU1VMVChubyldCisrCisrICAgICAgIExJQlM9IiRMSUJTIC1scHRocmVhZCIKKysgICAgICAgW0FDX01TR19DSEVDS0lORyhpZiB3ZSBjYW4gbGluayBhZ2FpbnN0IEJlcmtlbGV5REIgd2l0aCBwdGhyZWFkKQorKyAgICAgICAgQUNfTElOS19JRkVMU0UoCisrICAgICAgICBbQUNfTEFOR19QUk9HUkFNKAorKyAgICAgICAgIFsjaW5jbHVkZSA8ZGIuaD5dLAorKyAgICAgICAgIFtpbnQgciwgcywgdDsgZGJfdmVyc2lvbigmciwgJnMsICZ0KTtdCisrICAgICAgICApXSwKKysgICAgICAgIFtBQ19ERUZJTkUoSEFWRV9CREIpCisrICAgICAgICAgQkRCTElCPSItbGRiIC1scHRocmVhZCIKKysgICAgICAgICBBQ19NU0dfUkVTVUxUKHllcyldLAorKyAgICAgICAgW0JEQkxJQj0iIgorKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pXQorKyAgICAgICldICAgICAgIAorICAgICApXQorICkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvZW52aXJvbm1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDMwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXB0L2ZpbGVzL2Vudmlyb25tZW50LnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGFwdC0wLjYuNDYuMi9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHQtMC42LjQ2LjIub3JpZy9idWlsZGxpYi9lbnZpcm9ubWVudC5tYWsuaW4JMjAwNy0wMy0yOSAxMTozODo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBhcHQtMC42LjQ2LjIvYnVpbGRsaWIvZW52aXJvbm1lbnQubWFrLmluCTIwMDctMDMtMjkgMTE6Mzk6MTIuMDAwMDAwMDAwICswMTAwCitAQCAtNjIsNyArNjIsNyBAQAorIAorICMgU2hhcmVkIGxpYnJhcnkgdGhpbmdzCisgSE9TVF9PUyA9IEBob3N0X29zQAorLWlmbmVxICgkKHdvcmRzICQoZmlsdGVyIGxpbnV4LWdudSBnbnUlICVnbnUsJChIT1NUX09TKSkpLDApCisraWZuZXEgKCQod29yZHMgJChmaWx0ZXIgbGludXgtZ251IGxpbnV4LWdudWVhYmkgZ251JSAlZ251LCQoSE9TVF9PUykpKSwwKQorICAgIFNPTkFNRV9NQUdJQz0tV2wsLXNvbmFtZSAtV2wsCisgICAgTEZMQUdTX1NPPQorIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hcHQvZmlsZXMvbm8tY3VybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDIzOGZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2FwdC9maWxlcy9uby1jdXJsLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgY29uZmlndXJlLmluICAgICB8ICAgIDYgLS0tLS0tCisgbWV0aG9kcy9tYWtlZmlsZSB8ICAgIDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTMgZGVsZXRpb25zKC0pCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODYsMTIgKzg2LDYgQEAgQUNfQ0hFQ0tfSEVBREVSKGRiLmgsCisgCisgTElCUz0iJHNhdmVMSUJTIgorIAorLUFDX0NIRUNLX0xJQihjdXJsLCBjdXJsX2Vhc3lfaW5pdCwKKy0gICAgIFtBQ19DSEVDS19IRUFERVIoY3VybC9jdXJsLmgsCistICAgICAgICBjdXJsX29rPXllcywKKy0gICAgICAgIGN1cmxfb2s9bm8pXSwKKy0gICAgIEFDX01TR19FUlJPUihbZmFpbGVkOiBJIG5lZWQgQ1VSTCBkdWUgaHR0cHMgc3VwcG9ydF0pLAorLSkKKyAKKyBBQ19TVUJTVChCREJMSUIpCisgCistLS0gYS9tZXRob2RzL21ha2VmaWxlCisrKysgYi9tZXRob2RzL21ha2VmaWxlCitAQCAtNTEsMTMgKzUxLDYgQEAgTElCX01BS0VTID0gYXB0LXBrZy9tYWtlZmlsZQorIFNPVVJDRSA9IGh0dHAuY2MgaHR0cF9tYWluLmNjIHJmYzI1NTNlbXUuY2MgY29ubmVjdC5jYyBzZXJ2ZXIuY2MKKyBpbmNsdWRlICQoUFJPR1JBTV9IKQorIAorLSMgVGhlIGh0dHBzIG1ldGhvZAorLVBST0dSQU09aHR0cHMKKy1TTElCUyA9IC1sYXB0LXBrZyAtbGN1cmwgJChJTlRMTElCUykKKy1MSUJfTUFLRVMgPSBhcHQtcGtnL21ha2VmaWxlCistU09VUkNFID0gaHR0cHMuY2Mgc2VydmVyLmNjCistaW5jbHVkZSAkKFBST0dSQU1fSCkKKy0KKyAjIFRoZSBmdHAgbWV0aG9kCisgUFJPR1JBTT1mdHAKKyBTTElCUyA9IC1sYXB0LXBrZyAkKFNPQ0tFVExJQlMpICQoSU5UTExJQlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGI3N2U4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mLmluYwpAQCAtMCwwICsxLDQzIEBACitTVU1NQVJZID0gIkEgR05VIHRvb2wgdGhhdCBwcm9jdWRlIHNoZWxsIHNjcmlwdHMgdG8gYXV0b21hdGljYWxseSBjb25maWd1cmUgc29mdHdhcmUiCitERVNDUklQVElPTiA9ICJBdXRvY29uZiBpcyBhbiBleHRlbnNpYmxlIHBhY2thZ2Ugb2YgTTQgbWFjcm9zIHRoYXQgcHJvZHVjZSBzaGVsbCBzY3JpcHRzIHRvIGF1dG9tYXRpY2FsbHkgXCAKK2NvbmZpZ3VyZSBzb2Z0d2FyZSBzb3VyY2UgY29kZSBwYWNrYWdlcy4gQXV0b2NvbmYgY3JlYXRlcyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGZvciBhIHBhY2thZ2UgZnJvbSBhIHRlbXBsYXRlIFwKK2ZpbGUgdGhhdCBsaXN0cyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmZWF0dXJlcyB0aGF0IHRoZSBwYWNrYWdlIGNhbiB1c2UsIGluIHRoZSBmb3JtIG9mIE00IG1hY3JvIGNhbGxzLiIKK0xJQ0VOU0UgPSAiR1BMdjMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b2NvbmYvIgorU0VDVElPTiA9ICJkZXZlbCIKK0RFUEVORFMgKz0gIm00LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIm00LW5hdGl2ZSBnbnUtY29uZmlnLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1tNCBuYXRpdmVzZGstZ251LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59ID0gIm00IGdudS1jb25maWcgXAorCQkgIHBlcmwgXAorCQkgIHBlcmwtbW9kdWxlLWNhcnAgXAorCQkgIHBlcmwtbW9kdWxlLWNvbnN0YW50IFwKKwkJICBwZXJsLW1vZHVsZS1lcnJubyBcCisJCSAgcGVybC1tb2R1bGUtZXhwb3J0ZXIgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtYmFzZW5hbWUgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtY29tcGFyZSBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1jb3B5IFwKKwkJICBwZXJsLW1vZHVsZS1maWxlLWdsb2IgXAorCQkgIHBlcmwtbW9kdWxlLWZpbGUtcGF0aCBcCisJCSAgcGVybC1tb2R1bGUtZmlsZS1zdGF0IFwKKwkJICBwZXJsLW1vZHVsZS1nZXRvcHQtbG9uZyBcCisJCSAgcGVybC1tb2R1bGUtaW8tZmlsZSBcCisJCSAgcGVybC1tb2R1bGUtcG9zaXggXAorCQkgIHBlcmwtbW9kdWxlLWRhdGEtZHVtcGVyIFwKKwkJICIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJtNC1uYXRpdmUgZ251LWNvbmZpZy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvY29uZi9hdXRvY29uZi0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9wcm9ncmFtX3ByZWZpeC5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9QRVJMPSR7VVNSQklOUEFUSH0vcGVybCIKKworZG9fY29uZmlndXJlKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gLXJmICR7RH0ke2RhdGFkaXJ9L2VtYWNzCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1leGNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWJkM2EyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaApAQCAtMCwwICsxLDEzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXV0b2NvbmYtMi42My5vcmlnL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6Mzk6MDEuMDAwMDAwMDAwICswMDAwCisrKysgYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjQzOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTc2LDYgKzc2LDcgQEAKKyAgIC1pLCAtLWluc3RhbGwgICAgICAgICAgICBjb3B5IG1pc3NpbmcgYXV4aWxpYXJ5IGZpbGVzCisgICAgICAgLS1uby1yZWN1cnNpdmUgICAgICAgZG9uJ3QgcmVidWlsZCBzdWItcGFja2FnZXMKKyAgIC1zLCAtLXN5bWxpbmsgICAgICAgICAgICB3aXRoIC1pLCBpbnN0YWxsIHN5bWJvbGljIGxpbmtzIGluc3RlYWQgb2YgY29waWVzCisrICAteCwgLS1leGNsdWRlPVNURVBTICAgICAgc3RlcHMgd2Ugc2hvdWxkIG5vdCBydW4KKyAgIC1tLCAtLW1ha2UgICAgICAgICAgICAgICB3aGVuIGFwcGxpY2FibGUsIHJlLXJ1biAuL2NvbmZpZ3VyZSAmJiBtYWtlCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFtzeW50YXhdCisgCitAQCAtMTM2LDYgKzEzNywxMyBAQAorICMgUmVjdXJzZSBpbnRvIHN1YnBhY2thZ2VzCisgbXkgJHJlY3Vyc2l2ZSA9IDE7CisgCisrIyBTdGVwcyB0byBleGNsdWRlCisrbXkgQGV4Y2x1ZGU7CisrbXkgQGV4OworKworK215ICR1c2VzX2dldHRleHQ7CisrbXkgJGNvbmZpZ3VyZV9hYzsKKysKKyAjIyAtLS0tLS0tLS0tICMjCisgIyMgUm91dGluZXMuICAjIworICMjIC0tLS0tLS0tLS0gIyMKK0BAIC0xNTMsNiArMTYxLDcgQEAKKyAJICAnQnxwcmVwZW5kLWluY2x1ZGU9cycJID0+IFxAcHJlcGVuZF9pbmNsdWRlLAorIAkgICdpfGluc3RhbGwnICAgICAgICAgICAgPT4gXCRpbnN0YWxsLAorIAkgICdzfHN5bWxpbmsnICAgICAgICAgICAgPT4gXCRzeW1saW5rLAorKyAgCSAgJ3h8ZXhjbHVkZT1zJyAgICAgICAgICA9PiBcQGV4Y2x1ZGUsCisgCSAgJ218bWFrZScgICAgICAgICAgICAgICA9PiBcJHJ1bl9tYWtlLAorIAkgICdyZWN1cnNpdmUhJyAgICAgICAgICAgPT4gXCRyZWN1cnNpdmUpOworIAorQEAgLTE2Miw2ICsxNzEsOCBAQAorICAgcGFyc2VfV0FSTklOR1M7CisgICBwYXJzZV93YXJuaW5ncyAnLS13YXJuaW5ncycsIEB3YXJuaW5nOworIAorKyAgQGV4Y2x1ZGUgPSBtYXAgeyBzcGxpdCAvLC8gfSBAZXhjbHVkZTsKKysKKyAgICMgRXZlbiBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBjb25maWd1cmUuYWMsIHRyaW0gdG8gZ2V0IHRoZQorICAgIyBkaXJlY3RvcnksIGFuZCBsb29rIGZvciBjb25maWd1cmUuYWMgYWdhaW4uICBCZWNhdXNlIChpKSB0aGUgY29kZQorICAgIyBpcyBzaW1wbGVyLCBhbmQgKGlpKSB3ZSBhcmUgc3RpbGwgYWJsZSB0byBkaWFnbm9zZSBzaW11bHRhbmVvdXMKK0BAIC0yNTUsNiArMjY2LDExIEBACisgeworICAgbXkgKCRhY2xvY2FsLCAkZmxhZ3MpID0gQF87CisgCisrICBAZXggPSBncmVwICgvXmFjbG9jYWwkLywgQGV4Y2x1ZGUpOworKyAgaWYgKCQjZXggIT0gLTEpIHsKKysgICAgcmV0dXJuOworKyAgfQorKworICAgIyBhY2xvY2FsIDEuOCsgZG9lcyBhbGwgdGhpcyBmb3IgZnJlZS4gIEl0IGNhbiBiZSByZWNvZ25pemVkIGJ5IGl0cworICAgIyAtLWZvcmNlIHN1cHBvcnQuCisgICBpZiAoJGFjbG9jYWxfc3VwcG9ydHNfZm9yY2UpCitAQCAtMzY4LDcgKzM4NCwxMCBAQAorICAgICB9CisgICBlbHNlCisgICAgIHsKKy0gICAgICB4c3lzdGVtX2hpbnQgKCJhdXRvcG9pbnQgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgR2V0dGV4dCIsICIkYXV0b3BvaW50Iik7CisrICAgICAgQGV4ID0gZ3JlcCAoL15hdXRvcG9pbnQkLywgQGV4Y2x1ZGUpOworKyAgICAgIGlmICgkI2V4ID09IC0xKSB7CisrICAgICAgICB4c3lzdGVtX2hpbnQgKCJhdXRvcG9pbnQgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgR2V0dGV4dCIsICIkYXV0b3BvaW50Iik7CisrICAgICAgfQorICAgICB9CisgCisgCitAQCAtNTMyLDE2ICs1NTEsMTcgQEAKKyAJeworIAkgICRsaWJ0b29saXplIC49ICIgLS1sdGRsIjsKKyAJfQorLSAgICAgIHhzeXN0ZW1faGludCAoImxpYnRvb2xpemUgaXMgbmVlZGVkIGJlY2F1c2UgdGhpcyBwYWNrYWdlIHVzZXMgTGlidG9vbCIsICRsaWJ0b29saXplKTsKKy0gICAgICAkcmVydW5fYWNsb2NhbCA9IDE7CisrICAgICAgQGV4ID0gZ3JlcCAoL15saWJ0b29saXplJC8sIEBleGNsdWRlKTsKKysgICAgICBpZiAoJCNleCA9PSAtMSkgeworKyAgICAgICAgeHN5c3RlbV9oaW50ICgibGlidG9vbGl6ZSBpcyBuZWVkZWQgYmVjYXVzZSB0aGlzIHBhY2thZ2UgdXNlcyBMaWJ0b29sIiwgJGxpYnRvb2xpemUpOworKyAgICAgICAgJHJlcnVuX2FjbG9jYWwgPSAxOworKyAgICAgIH0KKyAgICAgfQorICAgZWxzZQorICAgICB7CisgICAgICAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogbm90IHJ1bm5pbmcgbGlidG9vbGl6ZTogLS1pbnN0YWxsIG5vdCBnaXZlbiI7CisgICAgIH0KKyAKKy0KKy0KKyAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgICAjIFJlcnVubmluZyBhY2xvY2FsLiAgIworICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMKK0BAIC01NzIsNyArNTkyLDEwIEBACisgICAjIGxhdHRlciBydW5zIHRoZSBmb3JtZXIsIGFuZCAoaWkpIGF1dG9jb25mIGlzIHN0cmljdGVyIHRoYW4KKyAgICMgYXV0b2hlYWRlci4gIFNvIGFsbCBpbiBhbGwsIGF1dG9jb25mIHNob3VsZCBnaXZlIGJldHRlciBlcnJvcgorICAgIyBtZXNzYWdlcy4KKy0gIHhzeXN0ZW0gKCRhdXRvY29uZik7CisrICBAZXggPSBncmVwICgvXmF1dG9jb25mJC8sIEBleGNsdWRlKTsKKysgIGlmICgkI2V4ID09IC0xKSB7CisrICAgIHhzeXN0ZW0gKCIkYXV0b2NvbmYiKTsKKysgIH0KKyAKKyAKKyAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworQEAgLTU5Myw3ICs2MTYsMTAgQEAKKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgeHN5c3RlbSAoJGF1dG9oZWFkZXIpOworKyAgICAgIEBleCA9IGdyZXAgKC9eYXV0b2hlYWRlciQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW0gKCIkYXV0b2hlYWRlciIpOworKyAgICAgIH0KKyAgICAgfQorIAorIAorQEAgLTYxMCw3ICs2MzYsMTAgQEAKKyAgICAgICAjIFdlIHNob3VsZCBhbHdheXMgcnVuIGF1dG9tYWtlLCBhbmQgbGV0IGl0IGRlY2lkZSB3aGV0aGVyIGl0IHNoYWxsCisgICAgICAgIyB1cGRhdGUgdGhlIGZpbGUgb3Igbm90LiAgSW4gZmFjdCwgdGhlIGVmZmVjdCBvZiBgJGZvcmNlJyBpcyBhbHJlYWR5CisgICAgICAgIyBpbmNsdWRlZCBpbiBgJGF1dG9tYWtlJyB2aWEgYC0tbm8tZm9yY2UnLgorLSAgICAgIHhzeXN0ZW0gKCRhdXRvbWFrZSk7CisrICAgICAgQGV4ID0gZ3JlcCAoL15hdXRvbWFrZSQvLCBAZXhjbHVkZSk7CisrICAgICAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgICAgIHhzeXN0ZW0gKCIkYXV0b21ha2UiKTsKKysgICAgICB9CisgICAgIH0KKyAKKyAKK0BAIC02MzQsNyArNjYzLDEwIEBACisgCSAgICB9CisgCSAgZWxzZQorIAkgICAgeworLQkgICAgICB4c3lzdGVtICgiJG1ha2UiKTsKKysgICAgICAgICAgICAgIEBleCA9IGdyZXAgKC9ebWFrZSQvLCBAZXhjbHVkZSk7CisrICAgICAgICAgICAgICBpZiAoJCNleCA9PSAtMSkgeworKwkgICAgICAgIHhzeXN0ZW0gKCIkbWFrZSIpOworKyAgICAgICAgICAgICAgfQorIAkgICAgfQorIAl9CisgICAgIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmYxOGMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtZ251Y29uZmlnaXplLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCitJbmRleDogYXV0b2NvbmYtMi42My9iaW4vYXV0b3JlY29uZi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjMub3JpZy9iaW4vYXV0b3JlY29uZi5pbgkyMDA4LTEyLTMxIDE3OjQzOjU1LjAwMDAwMDAwMCArMDAwMAorKysrIGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0xMi0zMSAxNzo0NjoxNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC01OCw3ICs1OCw3IEBACisgJGhlbHAgPSAiVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtESVJFQ1RPUlldLi4uCisgCisgUnVuIGBhdXRvY29uZicgKGFuZCBgYXV0b2hlYWRlcicsIGBhY2xvY2FsJywgYGF1dG9tYWtlJywgYGF1dG9wb2ludCcKKy0oZm9ybWVybHkgYGdldHRleHRpemUnKSwgYW5kIGBsaWJ0b29saXplJyB3aGVyZSBhcHByb3ByaWF0ZSkKKysoZm9ybWVybHkgYGdldHRleHRpemUnKSwgYGxpYnRvb2xpemUnLCBhbmQgYGdudS1jb25maWdpemUnIHdoZXJlIGFwcHJvcHJpYXRlKQorIHJlcGVhdGVkbHkgdG8gcmVtYWtlIHRoZSBHTlUgQnVpbGQgU3lzdGVtIGZpbGVzIGluIHNwZWNpZmllZAorIERJUkVDVE9SSUVTIGFuZCB0aGVpciBzdWJkaXJlY3RvcmllcyAoZGVmYXVsdGluZyB0byBgLicpLgorIAorQEAgLTExNSw2ICsxMTUsNyBAQAorIG15ICRsaWJ0b29saXplID0gJEVOVnsnTElCVE9PTElaRSd9IHx8ICdsaWJ0b29saXplJzsKKyBteSAkYXV0b3BvaW50ICA9ICRFTlZ7J0FVVE9QT0lOVCd9ICB8fCAnYXV0b3BvaW50JzsKKyBteSAkbWFrZSAgICAgICA9ICRFTlZ7J01BS0UnfSAgICAgICB8fCAnbWFrZSc7CisrbXkgJGdudWNvbmZpZ2l6ZSA9ICRFTlZ7J0dOVUNPTkZJR0laRSd9ICAgICAgIHx8ICdnbnUtY29uZmlnaXplJzsKKyAKKyAjIC0taW5zdGFsbCAtLSBhcyAtLWFkZC1taXNzaW5nIGluIG90aGVyIHRvb2xzLgorIG15ICRpbnN0YWxsID0gMDsKK0BAIC02NDQsNiArNjQ1LDEwIEBACisgICAgICAgfQorICAgICB9CisgCisrICBAZXggPSBncmVwICgvXmdudS1jb25maWdpemUkLywgQGV4Y2x1ZGUpOworKyAgaWYgKCQjZXggPT0gLTEpIHsKKysgICAgeHN5c3RlbSAoIiRnbnVjb25maWdpemUiKTsKKysgIH0KKyAKKyAgICMgLS0tLS0tLS0tLS0tLS0gIworICAgIyBSdW5uaW5nIG1ha2UuICAjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3JlY29uZi1pbmNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTMyNmYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGF1dG9jb25mLTIuNjMvYmluL2F1dG9yZWNvbmYuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjYzLm9yaWcvYmluL2F1dG9yZWNvbmYuaW4JMjAwOC0wOC0yOCAwMzowODoxMC4wMDAwMDAwMDAgKzAxMDAKKysrKyBhdXRvY29uZi0yLjYzL2Jpbi9hdXRvcmVjb25mLmluCTIwMDgtMTItMzEgMTc6Mzg6NDAuMDAwMDAwMDAwICswMDAwCitAQCAtMTkwLDYgKzE5MCw3IEBACisgICAkYXV0b2NvbmYgICAuPSBqb2luICgnIC0tcHJlcGVuZC1pbmNsdWRlPScsICcnLCBtYXAgeyBzaGVsbF9xdW90ZSAoJF8pIH0gQHByZXBlbmRfaW5jbHVkZSk7CisgICAkYXV0b2hlYWRlciAuPSBqb2luICgnIC0taW5jbHVkZT0nLCAnJywgbWFwIHsgc2hlbGxfcXVvdGUgKCRfKSB9IEBpbmNsdWRlKTsKKyAgICRhdXRvaGVhZGVyIC49IGpvaW4gKCcgLS1wcmVwZW5kLWluY2x1ZGU9JywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAcHJlcGVuZF9pbmNsdWRlKTsKKysgICRhY2xvY2FsICAgIC49IGpvaW4gKCcgLUkgJywgJycsIG1hcCB7IHNoZWxsX3F1b3RlICgkXykgfSBAaW5jbHVkZSk7CisgCisgICAjIC0taW5zdGFsbCBhbmQgLS1zeW1saW5rOworICAgaWYgKCRpbnN0YWxsKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG90ZXN0LWF1dG9tYWtlLXJlc3VsdC1mb3JtYXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvYXV0b3Rlc3QtYXV0b21ha2UtcmVzdWx0LWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU4MTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2F1dG90ZXN0LWF1dG9tYWtlLXJlc3VsdC1mb3JtYXQucGF0Y2gKQEAgLTAsMCArMSwxMzYgQEAKK0Zyb20gYTdlNzIyZjk3NGUyNTI5ZDNlNTY0ZDhkOTRjODZjYzhiZGJjNDBlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJhZHUgUGF0cml1IDxyYWR1LnBhdHJpdUBlbmVhLmNvbT4KK0RhdGU6IE1vbiwgMjQgTWFyIDIwMTQgMTY6MzM6MTkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b3Rlc3Q6IG5ldyB0ZXN0c3VpdGUgb3B0aW9uIHRvIGVuYWJsZSBhdXRvbWFrZSB0ZXN0CisgcmVzdWx0IGZvcm1hdAorCisqIGxpYi9hdXRvdGVzdC9nZW5lcmFsLm00OiBhZGRlZCAiLS1hbS1mbXQgfCAtQSIgY29tbWFuZCBsaW5lCitwYXJhbWV0ZXIgZm9yIHRlc3RzdWl0ZSBzY3JpcHQgdG8gZW5hYmxlICJSRVNVTFQ6IHRlc3RuYW1lIiBvdXRwdXQ7Cit3aWxsIGJlIHVzZWQgYnkgeW9jdG8gcHRlc3QgcGFja2FnZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSYWR1IFBhdHJpdSA8cmFkdS5wYXRyaXVAZW5lYS5jb20+CistLS0KKyBsaWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNCB8ICAgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2F1dG90ZXN0L2dlbmVyYWwubTQgYi9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNAoraW5kZXggNjBjMDM1Mi4uYzFmNWE5YiAxMDA2NDQKKy0tLSBhL2xpYi9hdXRvdGVzdC9nZW5lcmFsLm00CisrKysgYi9saWIvYXV0b3Rlc3QvZ2VuZXJhbC5tNAorQEAgLTQxMiw2ICs0MTIsOSBAQCBhdF9yZWNoZWNrPQorICMgV2hldGhlciBhIHdyaXRlIGZhaWx1cmUgb2NjdXJyZWQKKyBhdF93cml0ZV9mYWlsPTAKKyAKKysjIEF1dG9tYWtlIHJlc3VsdCBmb3JtYXQgInJlc3VsdDogdGVzdG5hbWUiCisrYXRfYW1fZm10PWZhbHNlCisrCisgIyBUaGUgZGlyZWN0b3J5IHdlIHJ1biB0aGUgc3VpdGUgaW4uICBEZWZhdWx0IHRvIC4gaWYgbm8gLUMgb3B0aW9uLgorIGF0X2Rpcj1gcHdkYAorICMgQW4gYWJzb2x1dGUgcmVmZXJlbmNlIHRvIHRoaXMgdGVzdHN1aXRlIHNjcmlwdC4KK0BAIC01MzAsNiArNTMzLDEwIEBAIGRvCisgCWF0X2NoZWNrX2ZpbHRlcl90cmFjZT1hdF9mbl9maWx0ZXJfdHJhY2UKKyAJOzsKKyAKKysgICAgLS1hbS1mbXQgfCAtQSApCisrCWF0X2FtX2ZtdD06CisrCTs7CisrCisgICAgIFtbMC05XSB8IFswLTldWzAtOV0gfCBbMC05XVswLTldWzAtOV0gfCBbMC05XVswLTldWzAtOV1bMC05XV0pCisgCWF0X2ZuX3ZhbGlkYXRlX3JhbmdlcyBhdF9vcHRpb24KKyAJQVNfVkFSX0FQUEVORChbYXRfZ3JvdXBzXSwgWyIkYXRfb3B0aW9uJGFzX25sIl0pCitAQCAtNzE4LDEwICs3MjUsMTAgQEAgbTRfZGl2ZXJ0X3B1c2goW0hFTFBfTU9ERVNdKWRubAorIGNhdCA8PF9BVEVPRiB8fCBhdF93cml0ZV9mYWlsPTEKKyAKKyBPcGVyYXRpb24gbW9kZXM6CistICAtaCwgLS1oZWxwICAgICBwcmludCB0aGUgaGVscCBtZXNzYWdlLCB0aGVuIGV4aXQKKy0gIC1WLCAtLXZlcnNpb24gIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKy0gIC1jLCAtLWNsZWFuICAgIHJlbW92ZSBhbGwgdGhlIGZpbGVzIHRoaXMgdGVzdCBzdWl0ZSBtaWdodCBjcmVhdGUgYW5kIGV4aXQKKy0gIC1sLCAtLWxpc3QgICAgIGRlc2NyaWJlcyBhbGwgdGhlIHRlc3RzLCBvciB0aGUgc2VsZWN0ZWQgVEVTVFMKKysgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGUgaGVscCBtZXNzYWdlLCB0aGVuIGV4aXQKKysgIC1WLCAtLXZlcnNpb24gICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisrICAtYywgLS1jbGVhbiAgICAgcmVtb3ZlIGFsbCB0aGUgZmlsZXMgdGhpcyB0ZXN0IHN1aXRlIG1pZ2h0IGNyZWF0ZSBhbmQgZXhpdAorKyAgLWwsIC0tbGlzdCAgICAgIGRlc2NyaWJlcyBhbGwgdGhlIHRlc3RzLCBvciB0aGUgc2VsZWN0ZWQgVEVTVFMKKyBfQVRFT0YKKyBtNF9kaXZlcnRfcG9wKFtIRUxQX01PREVTXSlkbmwKKyBtNF93cmFwKFttNF9kaXZlcnRfcHVzaChbSEVMUF9UVU5JTkdfQkVHSU5dKWRubAorQEAgLTc0Nyw2ICs3NTQsNyBAQCBFeGVjdXRpb24gdHVuaW5nOgorICAgLWQsIC0tZGVidWcgICAgaW5oaWJpdCBjbGVhbiB1cCBhbmQgdG9wLWxldmVsIGxvZ2dpbmcKKyBbICAgICAgICAgICAgICAgICBkZWZhdWx0IGZvciBkZWJ1Z2dpbmcgc2NyaXB0c10KKyAgIC14LCAtLXRyYWNlICAgIGVuYWJsZSB0ZXN0cyBzaGVsbCB0cmFjaW5nCisrICAtQSwgLS1hbS1mbXQgICBhdXRvbWFrZSByZXN1bHQgZm9ybWF0ICJyZXN1bHQ6IHRlc3RuYW1lIgorIF9BVEVPRgorIG00X2RpdmVydF9wb3AoW0hFTFBfVFVOSU5HX0JFR0lOXSldKWRubAorIG00X2RpdmVydF9wdXNoKFtIRUxQX0VORF0pZG5sCitAQCAtMTE2Miw3ICsxMTcwLDkgQEAgYXRfZm5fZ3JvdXBfYmFubmVyICgpCisgICAgIFsqXSkgICAgICAgICAgYXRfZGVzY19saW5lPSIkWzFdOiAiICA7OworICAgZXNhYworICAgQVNfVkFSX0FQUEVORChbYXRfZGVzY19saW5lXSwgWyIkWzNdJFs0XSJdKQorLSAgJGF0X3F1aWV0IEFTX0VDSE9fTihbIiRhdF9kZXNjX2xpbmUiXSkKKysgIGlmICEgJGF0X2FtX2ZtdDsgdGhlbgorKyAgICAkYXRfcXVpZXQgQVNfRUNIT19OKFsiJGF0X2Rlc2NfbGluZSJdKQorKyAgZmkKKyAgIGVjaG8gIiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBjb21waWxhdGlvbiAtKi0iID4+ICIkYXRfZ3JvdXBfbG9nIgorIH0KKyAKK0BAIC0xMTg4LDQyICsxMTk4LDUxIEBAIF9BVEVPRgorICAgY2FzZSAkYXRfeGZhaWw6JGF0X3N0YXR1cyBpbgorICAgICB5ZXM6MCkKKyAJYXRfbXNnPSJVTkVYUEVDVEVEIFBBU1MiCisrCWF0X2FtX21zZz0iWFBBU1MiCisgCWF0X3Jlcz14cGFzcworIAlhdF9lcnJleGl0PSRhdF9lcnJleGl0X3AKKyAJYXRfY29sb3I9JGF0X3JlZAorIAk7OworICAgICBubzowKQorIAlhdF9tc2c9Im9rIgorKwlhdF9hbV9tc2c9IlBBU1MiCisgCWF0X3Jlcz1wYXNzCisgCWF0X2VycmV4aXQ9ZmFsc2UKKyAJYXRfY29sb3I9JGF0X2dybgorIAk7OworICAgICAqOjc3KQorIAlhdF9tc2c9J3NraXBwZWQgKCdgY2F0ICIkYXRfY2hlY2tfbGluZV9maWxlImAnKScKKysJYXRfYW1fbXNnPSJTS0lQIgorIAlhdF9yZXM9c2tpcAorIAlhdF9lcnJleGl0PWZhbHNlCisgCWF0X2NvbG9yPSRhdF9ibHUKKyAJOzsKKyAgICAgbm86KiB8ICo6OTkpCisgCWF0X21zZz0nRkFJTEVEICgnYGNhdCAiJGF0X2NoZWNrX2xpbmVfZmlsZSJgJyknCisrCWF0X2FtX21zZz0iRkFJTCIKKyAJYXRfcmVzPWZhaWwKKyAJYXRfZXJyZXhpdD0kYXRfZXJyZXhpdF9wCisgCWF0X2NvbG9yPSRhdF9yZWQKKyAJOzsKKyAgICAgeWVzOiopCisgCWF0X21zZz0nZXhwZWN0ZWQgZmFpbHVyZSAoJ2BjYXQgIiRhdF9jaGVja19saW5lX2ZpbGUiYCcpJworKwlhdF9hbV9tc2c9IlhGQUlMIgorIAlhdF9yZXM9eGZhaWwKKyAJYXRfZXJyZXhpdD1mYWxzZQorIAlhdF9jb2xvcj0kYXRfbGduCisgCTs7CisgICBlc2FjCisgICBlY2hvICIkYXRfcmVzIiA+ICIkYXRfam9iX2Rpci8kYXRfcmVzIgorLSAgIyBJbiBwYXJhbGxlbCBtb2RlLCBvdXRwdXQgdGhlIHN1bW1hcnkgbGluZSBvbmx5IGFmdGVyd2FyZHMuCistICBpZiB0ZXN0ICRhdF9qb2JzIC1uZSAxICYmIHRlc3QgLW4gIiRhdF92ZXJib3NlIjsgdGhlbgorLSAgICBBU19FQ0hPKFsiJGF0X2Rlc2NfbGluZSAkYXRfY29sb3IkYXRfbXNnJGF0X3N0ZCJdKQorKyAgaWYgJGF0X2FtX2ZtdDsgdGhlbgorKyAgICAgIEFTX0VDSE8oWyIkYXRfYW1fbXNnOiAkYXRfZGVzYyJdKQorICAgZWxzZQorLSAgICAjIE1ha2Ugc3VyZSB0aGVyZSBpcyBhIHNlcGFyYXRvciBldmVuIHdpdGggbG9uZyB0aXRsZXMuCistICAgIEFTX0VDSE8oWyIgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgICAgIyBJbiBwYXJhbGxlbCBtb2RlLCBvdXRwdXQgdGhlIHN1bW1hcnkgbGluZSBvbmx5IGFmdGVyd2FyZHMuCisrICAgIGlmIHRlc3QgJGF0X2pvYnMgLW5lIDEgJiYgdGVzdCAtbiAiJGF0X3ZlcmJvc2UiOyB0aGVuCisrICAgICAgQVNfRUNITyhbIiRhdF9kZXNjX2xpbmUgJGF0X2NvbG9yJGF0X21zZyRhdF9zdGQiXSkKKysgICAgZWxzZQorKyAgICAgICMgTWFrZSBzdXJlIHRoZXJlIGlzIGEgc2VwYXJhdG9yIGV2ZW4gd2l0aCBsb25nIHRpdGxlcy4KKysgICAgICBBU19FQ0hPKFsiICRhdF9jb2xvciRhdF9tc2ckYXRfc3RkIl0pCisrICAgIGZpCisgICBmaQorICAgYXRfbG9nX21zZz0iJGF0X2dyb3VwLiAkYXRfZGVzYyAoJGF0X3NldHVwX2xpbmUpOiAkYXRfbXNnIgorICAgY2FzZSAkYXRfc3RhdHVzIGluCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY2hlY2stYXV0b21ha2UtY3Jvc3Mtd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzM5NGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NoZWNrLWF1dG9tYWtlLWNyb3NzLXdhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXNlIC0td2FybmluZz1jcm9zcyBvbmx5IGlmIHN1cHBvcnRlZCBieSBhdXRvbWFrZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworLS0tIGEvYmluL2F1dG9yZWNvbmYuaW4KKysrKyBiL2Jpbi9hdXRvcmVjb25mLmluCitAQCAtMTI3LDYgKzEyNyw4IEBAIG15ICRhY2xvY2FsX3N1cHBvcnRzX3dhcm5pbmdzID0gMDsKKyBteSAkYXV0b21ha2Vfc3VwcG9ydHNfZm9yY2VfbWlzc2luZyA9IDA7CisgIyBEb2VzIGF1dG9tYWtlIHN1cHBvcnQgLVdmb28/CisgbXkgJGF1dG9tYWtlX3N1cHBvcnRzX3dhcm5pbmdzID0gMDsKKysjIERvZXMgYXV0b21ha2Ugc3VwcG9ydCAtLXdhcm5pbmc9Y3Jvc3MKKytteSAkYXV0b21ha2Vfc3VwcG9ydHNfY3Jvc3Nfd2FybmluZyA9IDA7CisgCisgbXkgQHByZXBlbmRfaW5jbHVkZTsKKyBteSBAaW5jbHVkZTsKK0BAIC0xOTEsNiArMTkzLDcgQEAgc3ViIHBhcnNlX2FyZ3MgKCkKKyAgICRhY2xvY2FsX3N1cHBvcnRzX3dhcm5pbmdzID0gJGFjbG9jYWxfaGVscCA9fiAvLS13YXJuaW5ncy87CisgICAkYXV0b21ha2Vfc3VwcG9ydHNfZm9yY2VfbWlzc2luZyA9ICRhdXRvbWFrZV9oZWxwID1+IC8tLWZvcmNlLW1pc3NpbmcvOworICAgJGF1dG9tYWtlX3N1cHBvcnRzX3dhcm5pbmdzID0gJGF1dG9tYWtlX2hlbHAgPX4gLy0td2FybmluZ3MvOworKyAgJGF1dG9tYWtlX3N1cHBvcnRzX2Nyb3NzX3dhcm5pbmcgPSAkYXV0b21ha2VfaGVscCA9fiAvY3Jvc3MvOworIAorICAgIyBEaXNwYXRjaCBhdXRvcmVjb25mJ3Mgb3B0aW9uIHRvIHRoZSB0b29scy4KKyAgICMgLS1pbmNsdWRlOworQEAgLTI0NCw2ICsyNDcsOCBAQCBzdWIgcGFyc2VfYXJncyAoKQorICAgICAgICRsaWJ0b29saXplIC49ICcgLS1kZWJ1Zyc7CisgICAgIH0KKyAgICMgLS13YXJuaW5nczsKKysgIEB3YXJuaW5nID0gZ3JlcCB7ICRfIG5lICJjcm9zcyIgfSBAd2FybmluZworKyAgICBpZiAhICRhdXRvbWFrZV9zdXBwb3J0c19jcm9zc193YXJuaW5nOworICAgaWYgKEB3YXJuaW5nKQorICAgICB7CisgICAgICAgbXkgJHdhcm4gPSAnIC0td2FybmluZ3M9JyAuIGpvaW4gKCcsJywgQHdhcm5pbmcpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL2NvbmZpZ19zaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDQ0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvY29uZmlnX3NpdGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Bva3kgcHJvdmlkZXMgYSBsaXN0IG9mIHNpdGUgZmlsZXMgaW4gQ09ORklHX1NJVEUgd2hlcmVhcyBhdXRvY29uZiAKK29ubHkgZXhwZWN0cyBvbmUgZmlsZS4gVGhpcyBwYXRjaCBjaGFuZ2VzIGF1dG9jb25mIHRvIGFjY2VwdCBhIGxpc3Qgb2YgCit0aGVtLgorCitSUCAxLzIvMTAKKworVXBkYXRlZCBmb3IgMi42OCB2ZXJzaW9uOiB0aGUgQ09ORklHX1NJVEUgdmFyIHdhcyBub3QgZ2V0dGluZyB1c2VkIGF0IGFsbAorZml4ZWQgdGhlIDIuNjggY29kZSAKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDUvMjcKKworSW5kZXg6IGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY4Lm9yaWcvbGliL2F1dG9jb25mL2dlbmVyYWwubTQKKysrKyBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00CitAQCAtMTg3OCw3ICsxODc4LDYgQEAgQVVfREVGVU4oW0FDX1ZBTElEQVRFX0NBQ0hFRF9TWVNURU1fVFVQTAorIG00X2RlZmluZShbQUNfU0lURV9MT0FEXSwKKyBbIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KKyBhY19zaXRlX2ZpbGUxPU5PTkUKKy1hY19zaXRlX2ZpbGUyPU5PTkUKKyBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICAjIFdlIGRvIG5vdCB3YW50IGEgUEFUSCBzZWFyY2ggZm9yIGNvbmZpZy5zaXRlLgorICAgY2FzZSAkQ09ORklHX1NJVEUgaW4gQCU6QCgoCitAQCAtMTg4NiwxNCArMTg4NSw4IEBAIGlmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgICopICAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICBlc2FjCistZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKy0gIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorLSAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorLWVsc2UKKy0gIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCistICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKKyBmaQorLWZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCisrZm9yIGFjX3NpdGVfZmlsZSBpbiAkYWNfc2l0ZV9maWxlMQorIGRvCisgICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQorICAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvZml4X3BhdGhfeHRyYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9maXhfcGF0aF94dHJhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGY4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvZml4X3BhdGhfeHRyYS5wYXRjaApAQCAtMCwwICsxLDEyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dlIGRvbid0IGJ1aWxkIHhta21mIHNvIGFueSB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBpdCBhcmUgZ29pbmcgdG8gYmUgd3JvbmcuCitVc2luZyBhbnkgcGF0aHMgaW4gL3Vzci8gZm9yIHggaGVhZGVycy9saWJzIGlzIGEgYmFkIGlkZWEgd2hlbiBjcm9zcyBjb21waWxpbmcuCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhlbSB0byBzdG9wIGFueSBjb25mdXNpb24uCisKK1JQIC0gMjAwNzExMTUKKworSW5kZXg6IGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2xpYnMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdXRvY29uZi0yLjY4Lm9yaWcvbGliL2F1dG9jb25mL2xpYnMubTQKKysrKyBhdXRvY29uZi0yLjY4L2xpYi9hdXRvY29uZi9saWJzLm00CitAQCAtMTU5LDUzICsxNTksNiBAQCBtNF9wb3BkZWYoW0FDX0xpYl9OYW1lXSlkbmwKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCisgCisgCistIyBfQUNfUEFUSF9YX1hNS01GCistIyAtLS0tLS0tLS0tLS0tLS0tCistIyBJbnRlcm5hbCBzdWJyb3V0aW5lIG9mIF9BQ19QQVRIX1guCistIyBTZXQgYWNfeF9pbmNsdWRlcyBhbmQvb3IgYWNfeF9saWJyYXJpZXMuCistbTRfZGVmaW5lKFtfQUNfUEFUSF9YX1hNS01GXSwKKy1bQUNfQVJHX1ZBUihYTUtNRiwgW1BhdGggdG8geG1rbWYsIE1ha2VmaWxlIGdlbmVyYXRvciBmb3IgWCBXaW5kb3cgU3lzdGVtXSlkbmwKKy1ybSAtZiAtciBjb25mdGVzdC5kaXIKKy1pZiBta2RpciBjb25mdGVzdC5kaXI7IHRoZW4KKy0gIGNkIGNvbmZ0ZXN0LmRpcgorLSAgY2F0ID5JbWFrZWZpbGUgPDwnX0FDRU9GJworLWluY3Jvb3Q6CistCUBlY2hvIGluY3Jvb3Q9JyR7SU5DUk9PVH0nCistdXNybGliZGlyOgorLQlAZWNobyB1c3JsaWJkaXI9JyR7VVNSTElCRElSfScKKy1saWJkaXI6CistCUBlY2hvIGxpYmRpcj0nJHtMSUJESVJ9JworLV9BQ0VPRgorLSAgaWYgKGV4cG9ydCBDQzsgJHtYTUtNRi14bWttZn0pID4vZGV2L251bGwgMj4vZGV2L251bGwgJiYgdGVzdCAtZiBNYWtlZmlsZTsgdGhlbgorLSAgICAjIEdOVSBtYWtlIHNvbWV0aW1lcyBwcmludHMgIm1ha2VbMV06IEVudGVyaW5nIC4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCistICAgIGZvciBhY192YXIgaW4gaW5jcm9vdCB1c3JsaWJkaXIgbGliZGlyOyBkbworLSAgICAgIGV2YWwgImFjX2ltXyRhY192YXI9XGBcJHtNQUtFLW1ha2V9ICRhY192YXIgMj4vZGV2L251bGwgfCBzZWQgLW4gJ3MvXiRhY192YXI9Ly9wJ1xgIgorLSAgICBkb25lCistICAgICMgT3BlbiBXaW5kb3dzIHhta21mIHJlcG9ydGVkbHkgc2V0cyBMSUJESVIgaW5zdGVhZCBvZiBVU1JMSUJESVIuCistICAgIGZvciBhY19leHRlbnNpb24gaW4gYSBzbyBzbCBkeWxpYiBsYSBkbGw7IGRvCistICAgICAgaWYgdGVzdCAhIC1mICIkYWNfaW1fdXNybGliZGlyL2xpYlgxMS4kYWNfZXh0ZW5zaW9uIiAmJgorLQkgdGVzdCAtZiAiJGFjX2ltX2xpYmRpci9saWJYMTEuJGFjX2V4dGVuc2lvbiI7IHRoZW4KKy0JYWNfaW1fdXNybGliZGlyPSRhY19pbV9saWJkaXI7IGJyZWFrCistICAgICAgZmkKKy0gICAgZG9uZQorLSAgICAjIFNjcmVlbiBvdXQgYm9ndXMgdmFsdWVzIGZyb20gdGhlIGltYWtlIGNvbmZpZ3VyYXRpb24uICBUaGV5IGFyZQorLSAgICAjIGJvZ3VzIGJvdGggYmVjYXVzZSB0aGV5IGFyZSB0aGUgZGVmYXVsdCBhbnl3YXksIGFuZCBiZWNhdXNlCistICAgICMgdXNpbmcgdGhlbSB3b3VsZCBicmVhayBnY2Mgb24gc3lzdGVtcyB3aGVyZSBpdCBuZWVkcyBmaXhlZCBpbmNsdWRlcy4KKy0gICAgY2FzZSAkYWNfaW1faW5jcm9vdCBpbgorLQkvdXNyL2luY2x1ZGUpIGFjX3hfaW5jbHVkZXM9IDs7CistCSopIHRlc3QgLWYgIiRhY19pbV9pbmNyb290L1gxMS9Yb3MuaCIgJiYgYWNfeF9pbmNsdWRlcz0kYWNfaW1faW5jcm9vdDs7CistICAgIGVzYWMKKy0gICAgY2FzZSAkYWNfaW1fdXNybGliZGlyIGluCistCS91c3IvbGliIHwgL3Vzci9saWI2NCB8IC9saWIgfCAvbGliNjQpIDs7CistCSopIHRlc3QgLWQgIiRhY19pbV91c3JsaWJkaXIiICYmIGFjX3hfbGlicmFyaWVzPSRhY19pbV91c3JsaWJkaXIgOzsKKy0gICAgZXNhYworLSAgZmkKKy0gIGNkIC4uCistICBybSAtZiAtciBjb25mdGVzdC5kaXIKKy1maQorLV0pIyBfQUNfUEFUSF9YX1hNS01GCistCistCisgIyBfQUNfUEFUSF9YX0RJUkVDVAorICMgLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEludGVybmFsIHN1YnJvdXRpbmUgb2YgX0FDX1BBVEhfWC4KK0BAIC0yMTMsNDQgKzE2Niw3IEBAIGZpCisgbTRfZGVmaW5lKFtfQUNfUEFUSF9YX0RJUkVDVF0sCisgWyMgU3RhbmRhcmQgc2V0IG9mIGNvbW1vbiBkaXJlY3RvcmllcyBmb3IgWCBoZWFkZXJzLgorICMgQ2hlY2sgWDExIGJlZm9yZSBYMTFSbiBiZWNhdXNlIGl0IGlzIG9mdGVuIGEgc3ltbGluayB0byB0aGUgY3VycmVudCByZWxlYXNlLgorLWFjX3hfaGVhZGVyX2RpcnM9JworLS91c3IvWDExL2luY2x1ZGUKKy0vdXNyL1gxMVI3L2luY2x1ZGUKKy0vdXNyL1gxMVI2L2luY2x1ZGUKKy0vdXNyL1gxMVI1L2luY2x1ZGUKKy0vdXNyL1gxMVI0L2luY2x1ZGUKKy0KKy0vdXNyL2luY2x1ZGUvWDExCistL3Vzci9pbmNsdWRlL1gxMVI3CistL3Vzci9pbmNsdWRlL1gxMVI2CistL3Vzci9pbmNsdWRlL1gxMVI1CistL3Vzci9pbmNsdWRlL1gxMVI0CistCistL3Vzci9sb2NhbC9YMTEvaW5jbHVkZQorLS91c3IvbG9jYWwvWDExUjcvaW5jbHVkZQorLS91c3IvbG9jYWwvWDExUjYvaW5jbHVkZQorLS91c3IvbG9jYWwvWDExUjUvaW5jbHVkZQorLS91c3IvbG9jYWwvWDExUjQvaW5jbHVkZQorLQorLS91c3IvbG9jYWwvaW5jbHVkZS9YMTEKKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExUjcKKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExUjYKKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExUjUKKy0vdXNyL2xvY2FsL2luY2x1ZGUvWDExUjQKKy0KKy0vdXNyL1gzODYvaW5jbHVkZQorLS91c3IveDM4Ni9pbmNsdWRlCistL3Vzci9YRnJlZTg2L2luY2x1ZGUvWDExCistCistL3Vzci9pbmNsdWRlCistL3Vzci9sb2NhbC9pbmNsdWRlCistL3Vzci91bnN1cHBvcnRlZC9pbmNsdWRlCistL3Vzci9hdGhlbmEvaW5jbHVkZQorLS91c3IvbG9jYWwveDExcjUvaW5jbHVkZQorLS91c3IvbHBwL1hhbXBsZXMvaW5jbHVkZQorLQorLS91c3Ivb3Blbndpbi9pbmNsdWRlCistL3Vzci9vcGVud2luL3NoYXJlL2luY2x1ZGUnCisrYWNfeF9oZWFkZXJfZGlycz0nJworIAorIGlmIHRlc3QgIiRhY194X2luY2x1ZGVzIiA9IG5vOyB0aGVuCisgICAjIEd1ZXNzIHdoZXJlIHRvIGZpbmQgaW5jbHVkZSBmaWxlcywgYnkgbG9va2luZyBmb3IgWGxpYi5oLgorQEAgLTI5OSw3ICsyMTUsNiBAQCBBQ19ERUZVTihbX0FDX1BBVEhfWF0sCisgW0FDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX3gsCisgWyMgT25lIG9yIGJvdGggb2YgdGhlIHZhcnMgYXJlIG5vdCBzZXQsIGFuZCB0aGVyZSBpcyBubyBjYWNoZWQgdmFsdWUuCisgYWNfeF9pbmNsdWRlcz1ubyBhY194X2xpYnJhcmllcz1ubworLV9BQ19QQVRIX1hfWE1LTUYKKyBfQUNfUEFUSF9YX0RJUkVDVAorIGNhc2UgJGFjX3hfaW5jbHVkZXMsJGFjX3hfbGlicmFyaWVzIGluICMoCisgICBubywqIHwgKixubyB8ICpcJyopCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJlZmVyYmFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9wcmVmZXJiYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzZlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJlZmVyYmFzaC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGlzIHZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIENPTkZJR19TSEVMTCBhbmQgU0hFTEwgd2hpY2ggbWF5IGdldCBleHBvcnRlZCBpbnRvCitzY3JpcHRzIHNoYXJlZCB2aWEgc3N0YXRlIG9udG8gb3RoZXIgc3lzdGVtcy4KKworU29tZSBzeXN0ZW1zIGhhdmUgL2Jpbi9zaCAtPiBkYXNoIGFuZCBvdGhlcnMgL2Jpbi9zaCAtPiBiYXNoLiBCYXNoIGlzIHByZWZlcnJlZCAKK2J1dCBzb21ldGltZXMgd2UgY2FuIHNvbWV0aW1lcyBlbmQgdXAgZXhwb3J0aW5nIC9iaW4vc2ggeWV0IHVzZSBiYXNoaXNtcy4KKworVGhpcyBwYXRjaCBwdXRzIGJhc2ggZmlyc3QgaW4gdGhlIHNlYXJjaCByZXN1bHRzIHdoaWNoIGF2b2lkcyB0aGUgYmFzaC9kYXNoIGNvbmZ1c2lvbi4KKworUlAgMjAxMi85LzIzCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGF1dG9jb25mLTIuNjkvbGliL200c3VnYXIvbTRzaC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjkub3JpZy9saWIvbTRzdWdhci9tNHNoLm00CTIwMTItMDMtMDcgMTc6MzU6MjYuMDAwMDAwMDAwICswMDAwCisrKysgYXV0b2NvbmYtMi42OS9saWIvbTRzdWdhci9tNHNoLm00CTIwMTMtMDktMjMgMTY6MTI6MzguODUzNTk3NTE1ICswMDAwCitAQCAtMjI5LDcgKzIyOSw3IEBACisgICAgIFtfQVNfUEFUSF9XQUxLKFsvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSF0sCisgICAgICAgW2Nhc2UgJGFzX2RpciBpbiBAJTpAKAorIAkgLyopCistCSAgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKysJICAgZm9yIGFzX2Jhc2UgaW4gYmFzaCBzaCBrc2ggc2g1OyBkbworIAkgICAgICMgVHJ5IG9ubHkgc2hlbGxzIHRoYXQgZXhpc3QsIHRvIHNhdmUgc2V2ZXJhbCBmb3Jrcy4KKyAJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisgCSAgICAgQVNfSUYoW3sgdGVzdCAtZiAiJGFzX3NoZWxsIiB8fCB0ZXN0IC1mICIkYXNfc2hlbGwuZXhlIjsgfSAmJgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9jb25mL2F1dG9jb25mL3Byb2dyYW1fcHJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGE0MDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcHJvZ3JhbV9wcmVmaXgucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKKy0tLSBhdXRvY29uZi0yLjU3L2xpYi9hdXRvY29uZi9nZW5lcmFsLm00fnByb2dyYW1fcHJlZml4CisrKysgYXV0b2NvbmYtMi41Ny9saWIvYXV0b2NvbmYvZ2VuZXJhbC5tNAorQEAgLTE2NzYsOCArMTY3Niw5IEBACisgIyBUaGUgYWxpYXNlcyBzYXZlIHRoZSBuYW1lcyB0aGUgdXNlciBzdXBwbGllZCwgd2hpbGUgJGhvc3QgZXRjLgorICMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KKyB0ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgorLSAgdGVzdCAiJHByb2dyYW1fcHJlZml4JHByb2dyYW1fc3VmZml4JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiID0gXAorLSAgICBOT05FTk9ORXMseCx4LCAmJgorKyAgdGVzdCAiJHRhcmdldF9hbGlhcyIgIT0gIiRob3N0X2FsaWFzIiAmJgorKyAgICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisrICAgICAgTk9ORU5PTkVzLHgseCwgJiYKKyAgIHByb2dyYW1fcHJlZml4PSR7dGFyZ2V0X2FsaWFzfS1bXWRubAorIF0pIyBBQ19DQU5PTklDQUxfVEFSR0VUCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZi9yZW1vdmUtdXNyLWxvY2FsLWxpYi1mcm9tLW00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDJlMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmYvcmVtb3ZlLXVzci1sb2NhbC1saWItZnJvbS1tNC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitXZSBoYXZlIHByb2JsZW0gdXNpbmcgaGFyZGNvZGVkIGRpcmVjdG9yaWVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCit3aGljaCB3aWxsIGJlIGNoZWNrZWQgZm9yIGNyb3NzIGJ1aWxkcy4gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGljaAoraXMgdmFsaWQgZm9yIEFJWCBvbmx5LiBXZSBkbyBub3QgaGF2ZSBBSVggYXMgb25lIG9mIG91ciBzdXBwb3J0ZWQKK2J1aWxkIGhvc3Qgb3IgdGFyZ2V0LiBUaGVyZWZvcmUgd2UgZ2V0IHJpZCBvZiB0aGUgaGFyZGNvZGVkIHBhdGhzCithbmQgbWFrZSBsaWZlIGVhc2llciBmb3IgY3Jvc3MgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtVcHN0cmVhbSBkb2VzIGNhcmUgZm9yIEFJWCB3aGlsZSB3ZSBtYXkgbm90XQorSW5kZXg6IGF1dG9jb25mLTIuNjgvbGliL2F1dG9jb25mL2Z1bmN0aW9ucy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF1dG9jb25mLTIuNjgub3JpZy9saWIvYXV0b2NvbmYvZnVuY3Rpb25zLm00CTIwMTAtMDktMjIgMTQ6NTI6MTkuMDAwMDAwMDAwIC0wNzAwCisrKysgYXV0b2NvbmYtMi42OC9saWIvYXV0b2NvbmYvZnVuY3Rpb25zLm00CTIwMTEtMDgtMDMgMTE6NTc6MDUuODIyMTk5NTEzIC0wNzAwCitAQCAtNzQ5LDE1ICs3NDksNiBAQCBpZiB0ZXN0ICRhY19oYXZlX2Z1bmMgPSBubzsgdGhlbgorICAgICBbTElCUz0iLWx1dGlsICRMSUJTIiBhY19oYXZlX2Z1bmM9eWVzIGFjX2N2X2Z1bmNfZ2V0bG9hZGF2Z19zZXRnaWQ9eWVzXSkKKyBmaQorIAorLWlmIHRlc3QgJGFjX2hhdmVfZnVuYyA9IG5vOyB0aGVuCistICAjIFRoZXJlIGlzIGEgY29tbW9ubHkgYXZhaWxhYmxlIGxpYnJhcnkgZm9yIFJTLzYwMDAgQUlYLgorLSAgIyBTaW5jZSBpdCBpcyBub3QgYSBzdGFuZGFyZCBwYXJ0IG9mIEFJWCwgaXQgbWlnaHQgYmUgaW5zdGFsbGVkIGxvY2FsbHkuCistICBhY19nZXRsb2FkYXZnX0xJQlM9JExJQlMKKy0gIExJQlM9Ii1ML3Vzci9sb2NhbC9saWIgJExJQlMiCistICBBQ19DSEVDS19MSUIoZ2V0bG9hZGF2ZywgZ2V0bG9hZGF2ZywKKy0JICAgICAgIFtMSUJTPSItbGdldGxvYWRhdmcgJExJQlMiXSwgW0xJQlM9JGFjX2dldGxvYWRhdmdfTElCU10pCistZmkKKy0KKyAjIE1ha2Ugc3VyZSBpdCBpcyByZWFsbHkgaW4gdGhlIGxpYnJhcnksIGlmIHdlIHRoaW5rIHdlIGZvdW5kIGl0LAorICMgb3RoZXJ3aXNlIHNldCB1cCB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24uCisgQUNfQ0hFQ0tfRlVOQ1MoZ2V0bG9hZGF2ZywgW10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmZfMi42OS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvY29uZi9hdXRvY29uZl8yLjY5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTAwN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2NvbmYvYXV0b2NvbmZfMi42OS5iYgpAQCAtMCwwICsxLDI1IEBACityZXF1aXJlIGF1dG9jb25mLmluYworCitQUiA9ICJyMTEiCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HdjM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorU1JDX1VSSSArPSAiZmlsZTovL2F1dG9yZWNvbmYtaW5jbHVkZS5wYXRjaCBcCisJICAgIGZpbGU6Ly9jaGVjay1hdXRvbWFrZS1jcm9zcy13YXJuaW5nLnBhdGNoIFwKKwkgICAgZmlsZTovL2F1dG9yZWNvbmYtZXhjbHVkZS5wYXRjaCBcCisJICAgIGZpbGU6Ly9hdXRvcmVjb25mLWdudWNvbmZpZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY29uZmlnX3NpdGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS11c3ItbG9jYWwtbGliLWZyb20tbTQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3ByZWZlcmJhc2gucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F1dG90ZXN0LWF1dG9tYWtlLXJlc3VsdC1mb3JtYXQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MmQwNWUwM2I5M2U0NWY1YTM5YjgyOGRjOWM2YzI5YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NTRiZDY5YjM5MWVkYzEyZDZhNGE1MWEyZGQxNDc2NTQzZGE1YzZiYmYwNWE5NWI1OWRjMGRkNmZkNGMyOTY5IgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGZpbGU6Ly9maXhfcGF0aF94dHJhLnBhdGNoIgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfTTQ9bTQgYWNfY3ZfcHJvZ19URVNUX0VNQUNTPW5vIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuLW5hdGl2ZV81LjE4LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEyODUxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4tbmF0aXZlXzUuMTguNS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkF1dG9tYXRlZCB0ZXh0IGFuZCBwcm9ncmFtIGdlbmVyYXRpb24gdG9vbCIKK0RFU0NSSVBUSU9OID0gIkF1dG9HZW4gaXMgYSB0b29sIGRlc2lnbmVkIHRvIHNpbXBsaWZ5IHRoZSBjcmVhdGlvbiBhbmRcCisgbWFpbnRlbmFuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBjb250YWluIGxhcmdlIGFtb3VudHMgb2YgcmVwZXRpdGlvdXMgdGV4dC5cCisgSXQgaXMgZXNwZWNpYWxseSB2YWx1YWJsZSBpbiBwcm9ncmFtcyB0aGF0IGhhdmUgc2V2ZXJhbCBibG9ja3Mgb2YgdGV4dFwKKyB0aGF0IG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9nZW4vIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2F1dG9nZW4vcmVsJHtQVn0vYXV0b2dlbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vaW5jcmVhc2UtdGltZW91dC1saW1pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzg1ZDdjN2RmYmU2MGJhYmJlZTI2MWMwNTQ5MjNhNTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2JiZGI3M2I1NTE4YmFmNjRjNmQzNzM5ZmIyZWNjNjZkMmNjY2RhODg4Y2U1YWQ1NzNhYmUyMzVhYjVkOTZiYSIKKworREVQRU5EUyA9ICJndWlsZS1uYXRpdmUgbGlidG9vbC1uYXRpdmUgbGlieG1sMi1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gbmF0aXZlIHBrZ2NvbmZpZworCisjIGF1dG9nZW4tbmF0aXZlIGxpbmtzIGFnYWluc3QgbGliZ3VpbGUgd2hpY2ggbWF5IGhhdmUgYmVlbiByZWxvY2F0ZWQgd2l0aCBzc3RhdGUKKyMgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGVuc3VyZSB0aGVyZSBpc24ndCBhIHJlbG9jYXRpb24gaXNzdWUKK2V4cG9ydCBHVUlMRV9MT0FEX1BBVEggPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAiCitleHBvcnQgR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vYXV0b2dlbiBcCisJCUdVSUxFX0xPQURfUEFUSD0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2d1aWxlLzIuMCBcCisJCUdVSUxFX0xPQURfQ09NUElMRURfUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ3VpbGUvMi4wL2NjYWNoZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9pbmNyZWFzZS10aW1lb3V0LWxpbWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNGMxZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL2luY3JlYXNlLXRpbWVvdXQtbGltaXQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorU3ViamVjdDogW1BBVENIXSBhdXRvZ2VuOiBpbmNyZWFzZSB0aW1lb3V0IGxpbWl0IGZvciBzaGVsbCBjb21tYW5kcworCitPbiBzb21lIG92ZXJsb2FkZWQgaG9zdHMsIHNoZWxsIGNvbW1hbmRzIG9mIGF1dG9nZW4gbWF5IGNhbiBub3QKK2ZpbmlzaCBpbiA1IHNlY3MuIFRoaXMgaGFzIGNhdXNlZCBtYW55IGJ1aWxkIGZhaWx1cmVzLCBzbyBpbmNyZWFzZQordGhlIHRpbWVvdXQgbGltaXQgdG8gZml4IHRoaXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWGluIE91eWFuZyA8WGluLk91eWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwYWY3YzE4Li41NTQ0ZjU5IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNzUsOSArMTc1LDkgQEAgY29uZmlnX2VuZF90aW1lPWBkYXRlICslcyAyPi9kZXYvbnVsbGAKKyB0aW1lX2RlbHRhPWBleHByICR7Y29uZmlnX2VuZF90aW1lfSAtICR7Y29uZmlnX3N0YXJ0X3RpbWV9IDI+L2Rldi9udWxsYAorIAorIGlmIHRlc3QgLXogIiR7dGltZV9kZWx0YX0iCistdGhlbiB0aW1lX2RlbHRhPTEwCistZWxpZiB0ZXN0ICR7dGltZV9kZWx0YX0gLWx0IDUKKy10aGVuIHRpbWVfZGVsdGE9NSA7IGZpCisrdGhlbiB0aW1lX2RlbHRhPTYwCisrZWxpZiB0ZXN0ICR7dGltZV9kZWx0YX0gLWx0IDMwCisrdGhlbiB0aW1lX2RlbHRhPTMwIDsgZmkKKyAKKyBBR19USU1FT1VUPSR7dGltZV9kZWx0YX0KKyBdCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9nZW4vYXV0b2dlbi9tay10cGwtY29uZmlnLnNoLWZvcmNlLWV4aXQtdmFsdWUtdG8tYmUtMC1pbi1zdWJwcm9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmRhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL21rLXRwbC1jb25maWcuc2gtZm9yY2UtZXhpdC12YWx1ZS10by1iZS0wLWluLXN1YnByb2MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK21rLXRwbC1jb25maWcuc2g6IGZvcmNlIGV4aXQgdmFsdWUgdG8gYmUgMCBpbiBzdWJwcm9jZXNzCisKK1RoZSByZXR1cm4gdmFsdWUgb2Ygc3RhdGVtZW50IGxpc3Q9YDxzdWJjb21tYW5kcz5gIGlzIHRoZSBleGl0IHZhbHVlIG9mIHRoZQorc3ViY29tbWFuZHMuIFNvIGlmIHRoZSBzdWJjb21tYW5kcyBmYWlscywgdGhlIGNvbXBpbGF0aW9uIGZhaWxzLiBUaGlzIGlzIG9idmlvdXNseQorbm90IGludGVuZGVkLiBJbiB0aGUgbm9ybWFsIGNhc2UsIHdlIGV4cGVjdCB0aGUgZ3JlcCBjb21tYW5kIHRvIGZhaWwgYXMgdGhlcmUgc2hvdWxkCitiZSBubyAnbm9yZXR1cm4nIHdvcmQgaW4gdGhlIGxpYmd1aWxlIGZpbGVzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBhdXRvb3B0cy9tay10cGwtY29uZmlnLnNoIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXV0b29wdHMvbWstdHBsLWNvbmZpZy5zaCBiL2F1dG9vcHRzL21rLXRwbC1jb25maWcuc2gKK2luZGV4IDkyNmY1YWIuLjZiNGEwZmIgMTAwNzU1CistLS0gYS9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCisrKysgYi9hdXRvb3B0cy9tay10cGwtY29uZmlnLnNoCitAQCAtMjAyLDcgKzIwMiw3IEBAIGZpeF9ndWlsZSgpIHsKKyAKKyAgICAgbGlzdD1gc2V0ICtlIDsgZXhlYyAyPi9kZXYvbnVsbAorICAgICAgICAgZmluZCAke2xpYmd1aWxlZGlyfS9saWJndWlsZSogLXR5cGUgZiB8IFwKKy0gICAgICAgICAgICB4YXJncyBncmVwIC1sIC1FICdcPG5vcmV0dXJuXD4nYAorKyAgICAgICAgICAgIHhhcmdzIGdyZXAgLWwgLUUgJ1w8bm9yZXR1cm5cPicgOyBleGl0IDBgCisgCisgICAgIHRlc3QgLXogIiRsaXN0IiAmJiBleGl0IDAKKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b2dlbi9hdXRvZ2VuL3JlZGlyZWN0LW91dHB1dC1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxMjZlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvZ2VuL2F1dG9nZW4vcmVkaXJlY3Qtb3V0cHV0LWRpci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitbUEFUQ0hdIHJlZGlyZWN0IHRoZSBkaXIgb2YgbWtsaWJzcmMtbG9nLnR4CisKK1Vwc3RyZWFtLVN0YXR1ZTogUGVuZGluZworCityZWRpcmVjdCBta2xpYnNyYy1sb2cudHggdG8gYnVpbGRkaXIsIG5vdCAvdG1wOyBvdGhlcndpc2UgbWtsaWJzcmMtbG9nLnR4CittYXliZSB1bmFibGUgdG8gYmUgd3JpdHRlbiBpZiBvdGhlciB1c2VycyBpcyBidWlsZGluZyBhdXRvZ2VuIGF0IHRoZSBzYW1lIHRpbWUuCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHBrZy9saWJvcHRzL21rbGlic3JjLnNoIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGtnL2xpYm9wdHMvbWtsaWJzcmMuc2ggYi9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaAoraW5kZXggNDE2YjQwMi4uZDYxMmZiYyAxMDA2NDQKKy0tLSBhL3BrZy9saWJvcHRzL21rbGlic3JjLnNoCisrKysgYi9wa2cvbGlib3B0cy9ta2xpYnNyYy5zaAorQEAgLTE5LDcgKzE5LDcgQEAKKyAjIyAgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgc2V0IC1leAorLWV4ZWMgMj4gL3RtcC9ta2xpYnNyYy1sb2cudHgKKytleGVjIDI+ICR0b3BfYnVpbGRkaXIvbWtsaWJzcmMtbG9nLnR4CisgCisgdG9wX2J1aWxkZGlyPWBjZCAkdG9wX2J1aWxkZGlyIDsgcHdkYAorIHRvcF9zcmNkaXI9YGNkICR0b3Bfc3JjZGlyIDsgcHdkYAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWRlYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkEgR05VIHRvb2wgZm9yIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBNYWtlZmlsZXMiCitERVNDUklQVElPTiA9ICJBdXRvbWFrZSBpcyBhIHRvb2wgZm9yIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBgTWFrZWZpbGUuaW4nIGZpbGVzIGNvbXBsaWFudCB3aXRoIHRoZSBHTlUgQ29kaW5nIFwKK1N0YW5kYXJkcy4gQXV0b21ha2UgcmVxdWlyZXMgdGhlIHVzZSBvZiBBdXRvY29uZi4iCitMSUNFTlNFID0gIkdQTHYyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9hdXRvbWFrZS9hdXRvbWFrZS0ke1BWfS50YXIuZ3oiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworZG9fY29uZmlndXJlKCkgeworCW9lX3J1bmNvbmYKK30KKworZXhwb3J0IEFVVE9NQUtFID0gIiR7QGJiLnV0aWxzLndoaWNoKCdhdXRvbWFrZScsIGQuZ2V0VmFyKCdQQVRIJywgVHJ1ZSkpfSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXV0b21ha2UqICR7ZGF0YWRpcn0vYWNsb2NhbCoiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvYnVpbGR0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGQ1MzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL2J1aWxkdGVzdC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitTcGxpdCAiY2hlY2stVEVTVFMiIGludG8gYSBidWlsZHRlc3QgYW5kIHJ1bnRlc3QgdGFyZ2V0LCBzbyB0aGF0IHRoZXkgY2FuCitiZSBydW4gc2VwYXJhdGVseS4KKworU2lnbmVkLW9mZi1ieTogQmrDtnJuIFN0ZW5iZXJnIDxianN0QGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2xpYi9hbS9jaGVjay5hbQkyMDEyLTExLTE0IDEzOjQ2OjE2LjMzNTQ3NTk5NSArMDEwMAorKysrIGIvbGliL2FtL2NoZWNrLmFtCTIwMTItMDgtMTMgMTg6NDA6MTIuMDAwMDAwMDAwICswMjAwCitAQCAtNDQsNyArNDQsNyBAQAorIGFtX190dHlfY29sb3JzID0gJChhbV9fdHR5X2NvbG9yc19kdW1teSkKKyBlbmRpZiAhJT9DT0xPUiUKKworLS5QSE9OWTogY2hlY2stVEVTVFMKKysuUEhPTlk6IGNoZWNrLVRFU1RTIGJ1aWxkdGVzdC1URVNUUyBydW50ZXN0LVRFU1RTCisKKyBpZiAlP1BBUkFMTEVMX1RFU1RTJQorCitAQCAtNDY1LDcgKzQ2NSwxNCBAQAorCisgZWxzZSAhJT9QQVJBTExFTF9URVNUUyUKKworLWNoZWNrLVRFU1RTOiAkKFRFU1RTKQorK0FNX1JFQ1VSU0lWRV9UQVJHRVRTICs9IGJ1aWxkdGVzdCBydW50ZXN0CisrCisrYnVpbGR0ZXN0LVRFU1RTOiAkKFRFU1RTKQorKworK2NoZWNrLVRFU1RTOiBidWlsZHRlc3QtVEVTVFMKKysJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgcnVudGVzdC1URVNUUworKworK3J1bnRlc3QtVEVTVFM6CisJQGZhaWxlZD0wOyBhbGw9MDsgeGZhaWw9MDsgeHBhc3M9MDsgc2tpcD0wOyBcCisJc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorICMjIE1ha2Ugc3VyZSBTb2xhcmlzIFZQQVRILWV4cGFuZHMgYWxsIG1lbWJlcnMgb2YgdGhpcyBsaXN0LCBldmVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZS9weS1jb21waWxlLWNvbXBpbGUtb25seS1vcHRpbWl6ZWQtYnl0ZS1jb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzM0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHktY29tcGlsZS1jb21waWxlLW9ubHktb3B0aW1pemVkLWJ5dGUtY29kZS5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisqIE9FLUNvcmUncyBweXRob24gY3JlYXRlcyB0aGUgc2FtZSBiaW5hcnkgb3V0cHV0CisgIGZvciBib3RoIHB5YyBhbmQgcHlvLCBzbyBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZgorICBweWMgZmlsZXMgYnkgYXV0b21ha2UuCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CisKK1VwZGF0ZWQgZm9yIGF1dG9tYWtlLTEuMTIuNgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCitkaWZmIC1OdXJkIGF1dG9tYWtlLTEuMTIuNi9saWIvcHktY29tcGlsZSBhdXRvbWFrZS0xLjEyLjYvbGliL3B5LWNvbXBpbGUKKy0tLSBhdXRvbWFrZS0xLjEyLjYvbGliL3B5LWNvbXBpbGUJMjAxMi0xMi0xMyAyMTo1NzozMS4wMDAwMDAwMDAgKzAyMDAKKysrKyBhdXRvbWFrZS0xLjEyLjYvbGliL3B5LWNvbXBpbGUJMjAxMi0xMi0yNyAxOTozNDowMS40MjYwMTUxNDAgKzAyMDAKK0BAIC0xMTUsMjYgKzExNSw2IEBACisgICAgIGZpbGV0cmFucz0iZmlsZXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKCckZGVzdGRpcicgKyBvcy5zZXAgKyBwYXRoKSIKKyBmaQorIAorLSRQWVRIT04gLWMgIgorLWltcG9ydCBzeXMsIG9zLCBweV9jb21waWxlLCBpbXAKKy0KKy1maWxlcyA9ICcnJyRmaWxlcycnJworLQorLXN5cy5zdGRvdXQud3JpdGUoJ0J5dGUtY29tcGlsaW5nIHB5dGhvbiBtb2R1bGVzLi4uXG4nKQorLWZvciBmaWxlIGluIGZpbGVzLnNwbGl0KCk6CistICAgICRwYXRodHJhbnMKKy0gICAgJGZpbGV0cmFucworLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCAobGVuKGZpbGVwYXRoKSA+PSAzCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZmlsZXBhdGhbLTM6XSA9PSAnLnB5Jyk6CistCSAgICBjb250aW51ZQorLSAgICBzeXMuc3Rkb3V0LndyaXRlKGZpbGUpCistICAgIHN5cy5zdGRvdXQuZmx1c2goKQorLSAgICBpZiBoYXNhdHRyKGltcCwgJ2dldF90YWcnKToKKy0gICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVwYXRoKSwgcGF0aCkKKy0gICAgZWxzZToKKy0gICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlcGF0aCwgZmlsZXBhdGggKyAnYycsIHBhdGgpCistc3lzLnN0ZG91dC53cml0ZSgnXG4nKSIgfHwgZXhpdCAkPworLQorICMgdGhpcyB3aWxsIGZhaWwgZm9yIHB5dGhvbiA8IDEuNSwgYnV0IHRoYXQgZG9lc24ndCBtYXR0ZXIgLi4uCisgJFBZVEhPTiAtTyAtYyAiCisgaW1wb3J0IHN5cywgb3MsIHB5X2NvbXBpbGUsIGltcApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5dGhvbi1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2UvcHl0aG9uLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzU0MWJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2F1dG9tYWtlL2F1dG9tYWtlL3B5dGhvbi1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogS3VtYXIgR2FsYSA8Z2FsYWtAa2VybmVsLmNyYXNoaW5nLm9yZz4KKworVXBkYXRlZCBmb3IgYXV0b21ha2UtMS4xMi42CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK2RpZmYgLU51cmQgYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNCBhdXRvbWFrZS0xLjEyLjYvbTQvcHl0aG9uLm00CistLS0gYXV0b21ha2UtMS4xMi42L200L3B5dGhvbi5tNAkyMDEyLTEyLTEzIDIyOjAyOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIGF1dG9tYWtlLTEuMTIuNi9tNC9weXRob24ubTQJMjAxMi0xMi0yNyAxNzo0MDoyNi41NTgxNjQ2NjAgKzAyMDAKK0BAIC05MSwxMiArOTEsMTMgQEAKKyAgICAgW2FtX2N2X3B5dGhvbl92ZXJzaW9uPWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy52ZXJzaW9uW1s6M11dKSJgXSkKKyAgIEFDX1NVQlNUKFtQWVRIT05fVkVSU0lPTl0sIFskYW1fY3ZfcHl0aG9uX3ZlcnNpb25dKQorIAorLSAgZG5sIFVzZSB0aGUgdmFsdWVzIG9mICRwcmVmaXggYW5kICRleGVjX3ByZWZpeCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKKy0gIGRubCB2YWx1ZXMgb2YgUFlUSE9OX1BSRUZJWCBhbmQgUFlUSE9OX0VYRUNfUFJFRklYLiAgVGhlc2UgYXJlIG1hZGUKKysgIGRubCBVc2UgdGhlIHZhbHVlcyBvZiAkcHJlZml4LCAkbGliZGlyIGFuZCAkZXhlY19wcmVmaXggZm9yIHRoZSBjb3JyZXNwb25kaW5nCisrICBkbmwgdmFsdWVzIG9mIFBZVEhPTl9QUkVGSVggUFlUSE9OX0xJQl9QUkVGSVgsIGFuZCBQWVRIT05fRVhFQ19QUkVGSVguICBUaGVzZSBhcmUgbWFkZQorICAgZG5sIGRpc3RpbmN0IHZhcmlhYmxlcyBzbyB0aGV5IGNhbiBiZSBvdmVycmlkZGVuIGlmIG5lZWQgYmUuICBIb3dldmVyLAorICAgZG5sIGdlbmVyYWwgY29uc2Vuc3VzIGlzIHRoYXQgeW91IHNob3VsZG4ndCBuZWVkIHRoaXMgYWJpbGl0eS4KKyAKKyAgIEFDX1NVQlNUKFtQWVRIT05fUFJFRklYXSwgWycke3ByZWZpeH0nXSkKKysgIEFDX1NVQlNUKFtQWVRIT05fTElCX1BSRUZJWF0sIFsnJHtsaWJkaXJ9J10pCisgICBBQ19TVUJTVChbUFlUSE9OX0VYRUNfUFJFRklYXSwgWycke2V4ZWNfcHJlZml4fSddKQorIAorICAgZG5sIEF0IHRpbWVzIChsaWtlIHdoZW4gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcykgeW91IG1heSB3YW50CitAQCAtMTQ4LDcgKzE0OSw4IEBACisgZWxzZToKKyAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworICAgICBzaXRlZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKDAsIDAsIHByZWZpeD0nJGFtX3B5X3ByZWZpeCcpCistc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSJgCisrc3lzLnN0ZG91dC53cml0ZShzaXRlZGlyKSIgfHwKKysgICAgIGVjaG8gIiRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcyJgCisgICAgICBjYXNlICRhbV9jdl9weXRob25fcHl0aG9uZGlyIGluCisgICAgICAkYW1fcHlfcHJlZml4KikKKyAgICAgICAgYW1fX3N0cmlwX3ByZWZpeD1gZWNobyAiJGFtX3B5X3ByZWZpeCIgfCBzZWQgJ3N8LnwufGcnYAorQEAgLTE1OCw3ICsxNjAsNyBAQAorICAgICAgICBjYXNlICRhbV9weV9wcmVmaXggaW4KKyAgICAgICAgICAvdXNyfC9TeXN0ZW0qKSA7OworICAgICAgICAgICopCistCSAgYW1fY3ZfcHl0aG9uX3B5dGhvbmRpcj0kUFlUSE9OX1BSRUZJWC9saWIvcHl0aG9uJFBZVEhPTl9WRVJTSU9OL3NpdGUtcGFja2FnZXMKKysJICBhbV9jdl9weXRob25fcHl0aG9uZGlyPSRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworIAkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKK0BAIC0xOTAsNyArMTkyLDggQEAKKyBlbHNlOgorICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCisgICAgIHNpdGVkaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoMSwgMCwgcHJlZml4PSckYW1fcHlfcHJlZml4JykKKy1zeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpImAKKytzeXMuc3Rkb3V0LndyaXRlKHNpdGVkaXIpIiB8fAorKyAgICAgZWNobyAiJFBZVEhPTl9MSUJfUFJFRklYL3B5dGhvbiRQWVRIT05fVkVSU0lPTi9zaXRlLXBhY2thZ2VzImAKKyAgICAgIGNhc2UgJGFtX2N2X3B5dGhvbl9weWV4ZWNkaXIgaW4KKyAgICAgICRhbV9weV9leGVjX3ByZWZpeCopCisgICAgICAgIGFtX19zdHJpcF9wcmVmaXg9YGVjaG8gIiRhbV9weV9leGVjX3ByZWZpeCIgfCBzZWQgJ3N8LnwufGcnYAorQEAgLTIwMCw3ICsyMDMsNyBAQAorICAgICAgICBjYXNlICRhbV9weV9leGVjX3ByZWZpeCBpbgorICAgICAgICAgIC91c3J8L1N5c3RlbSopIDs7CisgICAgICAgICAgKikKKy0JICAgYW1fY3ZfcHl0aG9uX3B5ZXhlY2Rpcj0kUFlUSE9OX0VYRUNfUFJFRklYL2xpYi9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworKwkgICBhbV9jdl9weXRob25fcHlleGVjZGlyPSRQWVRIT05fTElCX1BSRUZJWC9weXRob24kUFlUSE9OX1ZFUlNJT04vc2l0ZS1wYWNrYWdlcworIAkgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9hdXRvbWFrZS9hdXRvbWFrZV8xLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2RjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYXV0b21ha2UvYXV0b21ha2VfMS4xNS5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIGF1dG9tYWtlLmluYworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiYXV0b2NvbmYtbmF0aXZlIgorCitOQU1FVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1JERVBFTkRTXyR7UE59ICs9ICJcCisgICAgYXV0b2NvbmYgXAorICAgIHBlcmwgXAorICAgIHBlcmwtbW9kdWxlLWJ5dGVzIFwKKyAgICBwZXJsLW1vZHVsZS1kYXRhLWR1bXBlciBcCisgICAgcGVybC1tb2R1bGUtc3RyaWN0IFwKKyAgICBwZXJsLW1vZHVsZS10ZXh0LXBhcnNld29yZHMgXAorICAgIHBlcmwtbW9kdWxlLXRocmVhZC1xdWV1ZSBcCisgICAgcGVybC1tb2R1bGUtdGhyZWFkcyBcCisgICAgcGVybC1tb2R1bGUtdmFycyAiCisKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJhdXRvY29uZi1uYXRpdmUgcGVybC1uYXRpdmUtcnVudGltZSIKKworU1JDX1VSSSArPSAiIGZpbGU6Ly9weXRob24tbGliZGlyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weS1jb21waWxlLWNvbXBpbGUtb25seS1vcHRpbWl6ZWQtYnl0ZS1jb2RlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9idWlsZHRlc3QucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MTY5NDZhMTA1Y2EyMjhhYjU0NWZjMzdhNzBkZjNhMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OTQ2ZTk0NWE5NmUyODE1MmJhNWE2YmViMDYyNWNhNzE1YzZlMzJhYzU1ZjJlMzUzZWY1NGRlZjBjOGVkOTI0IgorCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfcGF0aF9QRVJMPSR7VVNSQklOUEFUSH0vcGVybCIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjUuMS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtMi4yNS4xLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzgxN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLTIuMjUuMS5pbmMKQEAgLTAsMCArMSw0MyBAQAorTElDX0ZJTEVTX0NIS1NVTT0iXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MlwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0XAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjZcCisgICAgZmlsZTovL2dhcy9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICBmaWxlOi8vaW5jbHVkZS9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MlwKKyAgICBmaWxlOi8vaW5jbHVkZS9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDRcCisgICAgZmlsZTovL2xpYmliZXJ0eS9DT1BZSU5HLkxJQjttZDU9YTkxNjQ2N2I5MTA3NmU2MzFkZDhlZGI3NDI0NzY5YzdcCisgICAgZmlsZTovL2JmZC9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAiCisKK2RlZiBiaW51dGlsc19icmFuY2hfdmVyc2lvbihkKToKKyAgICBwdnNwbGl0ID0gZC5nZXRWYXIoJ1BWJywgVHJ1ZSkuc3BsaXQoJy4nKQorICAgIHJldHVybiBwdnNwbGl0WzBdICsgIl8iICsgcHZzcGxpdFsxXQorCitCSU5VUFYgPSAiJHtAYmludXRpbHNfYnJhbmNoX3ZlcnNpb24oZCl9IgorCitTUkNSRVYgPSAiMmJkMjU5MzAyMjFkZWE0YmYzM2MxM2E4OWMxMTE1MTQ0OTE0NDBlMiIKK1NSQ19VUkkgPSAiXAorICAgICBnaXQ6Ly9zb3VyY2V3YXJlLm9yZy9naXQvYmludXRpbHMtZ2RiLmdpdDticmFuY2g9YmludXRpbHMtJHtCSU5VUFZ9LWJyYW5jaDtwcm90b2NvbD1naXQgXAorICAgICBmaWxlOi8vMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDQtT25seS1nZW5lcmF0ZS1hbi1SUEFUSC1lbnRyeS1pZi1MRF9SVU5fUEFUSC1pcy1ub3QtZS5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDctQWRkLXRoZS1hcm12NWUtYXJjaGl0ZWN0dXJlLXRvLWJpbnV0aWxzLnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDA5LVVwc3RyZWFtLVN0YXR1cy1JbmFwcHJvcHJpYXRlLWRpc3RyaWJ1dGlvbi1jb2Rlc291cmMucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIFwKKyAgICAgZmlsZTovLzAwMTItQWRkLVhMUC1pbnN0cnVjdGlvbnMtc3VwcG9ydC5wYXRjaCBcCisgICAgIGZpbGU6Ly8wMDEzLUZpeC1hbi1pbnRlcm5hbC1lcnJvci1pbi1kb19wcmludF90b19tYXBmaWxlLXNlZW4td2kucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxNC1nb2xkLWFybS1Ta2lwLXBpYy1jaGVjay1mb3ItUl9BUk1fUkVMMzIucGF0Y2ggXAorICAgICBmaWxlOi8vMDAxNS1GaXgtZHluYW1pYy1saXN0LXNvLXRoYXQtc3ltYm9scy1ub3QtaW4tdGhlLWxpc3QtYXJlLnBhdGNoIFwKKyAgICAgZmlsZTovL2JpbnV0aWxzLW9jdGVvbjMucGF0Y2ggXAorICAgICBmaWxlOi8vYWRkLXRodW5kZXJ4LXN1cHBvcnQtZm9yLWdhcy5wYXRjaCBcCisgICAgICIKK1MgID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIHJtIC1yZiAke1N9L2dkYiAke1N9L2xpYmRlY251bWJlciAke1N9L3JlYWRsaW5lICR7U30vc2ltCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTE0NjQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYwpAQCAtMCwwICsxLDI5IEBACitpbmhlcml0IGNyb3NzLWNhbmFkaWFuCisKK1NVTU1BUlkgPSAiR05VIGJpbmFyeSB1dGlsaXRpZXMgKGNyb3NzLWNhbmFkaWFuIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgorUE4gPSAiYmludXRpbHMtY3Jvc3MtY2FuYWRpYW4tJHtUUkFOU0xBVEVEX1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJiaW51dGlscyIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgdmlydHVhbC8ke0hPU1RfUFJFRklYfWdjYy1jcm9zc3NkayB2aXJ0dWFsL25hdGl2ZXNkay1saWJjIG5hdGl2ZXNkay16bGliIG5hdGl2ZXNkay1nZXR0ZXh0IG5hdGl2ZXNkay1mbGV4IgorRVhUUkFfT0VDT05GICs9ICItLXdpdGgtc3lzcm9vdD0ke1NES1BBVEh9L3N5c3Jvb3RzLyR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IFwKKyAgICAgICAgICAgICAgICAiCisKKyMgV2UgaGF2ZSB0byBwb2ludCBiaW51dGlscyBhdCBhIHN5c3Jvb3QgYnV0IHdlIGRvbid0IG5lZWQgdG8gcmVidWlsZCBpZiB0aGlzIGNoYW5nZXMKKyMgZS5nLiB3ZSBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgbWFjaGluZXMgd2l0aCBkaWZmZXJlbnQgdHVuZXMuCitFWFRSQV9PRUNPTkZbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfUEtHQVJDSCIKKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgV2UncmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIGxpYnMgb3IgaGVhZGVycywgdGhlc2Ugd291bGQgY29tZSBmcm9tIHRoZSAKKwkjIG5hdGl2ZXNkayBvciB0YXJnZXQgdmVyc2lvbiBvZiB0aGUgYmludXRpbHMgcmVjaXBlCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfQorCXJtIC1mICR7RH0ke2xpYmRpcn0vbGliYmZkKgorCXJtIC1mICR7RH0ke2xpYmRpcn0vbGliaWJlcnR5KgorCXJtIC1mICR7RH0ke2xpYmRpcn0vbGlib3Bjb2RlcyoKKwlybSAtZiAke0R9JHtpbmNsdWRlZGlyfS8qLmgKKwkKKwljcm9zc19jYW5hZGlhbl9iaW5kaXJsaW5rcworfQorCitCQkNMQVNTRVhURU5EID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy1jYW5hZGlhbl8yLjI1LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYmFhMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3MtY2FuYWRpYW5fMi4yNS4xLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBiaW51dGlscy5pbmMKK3JlcXVpcmUgYmludXRpbHMtJHtQVn0uaW5jCityZXF1aXJlIGJpbnV0aWxzLWNyb3NzLWNhbmFkaWFuLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQzZDgwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zcy5pbmMKQEAgLTAsMCArMSwzMCBAQAoraW5oZXJpdCBjcm9zcworUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMiCisKK1BOID0gImJpbnV0aWxzLWNyb3NzLSR7VEFSR0VUX0FSQ0h9IgorQlBOID0gImJpbnV0aWxzIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWluc3RhbGwtbGliYmZkIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIFwKKyAgICAgICAgICAgICAgICAiCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKworCSMgV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlc2UsIHNvIHdlJ2xsIHJlbW92ZSB0aGVtLi4uCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke2xpYmRpcl9uYXRpdmV9L2xpYmliZXJ0eS5hCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7VEFSR0VUX1NZU30KKwlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vbGliL2xkc2NyaXB0cworCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZS9pbmZvCisJcm0gLXJmICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9L3NoYXJlL2xvY2FsZQorCXJtIC1yZiAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZS9tYW4KKwlybWRpciAke0R9JHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9zaGFyZSB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtsaWJkaXJ9L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfTY0L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7bGliZGlyfSB8fCA6CisJcm1kaXIgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJHtsaWJkaXJ9NjQgfHwgOgorCXJtZGlyICR7RH0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7cHJlZml4fSB8fCA6Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NfMi4yNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmQxZjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLWNyb3NzXzIuMjUuMS5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgYmludXRpbHMuaW5jCityZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYworcmVxdWlyZSBiaW51dGlscy1jcm9zcy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy1jcm9zc3Nka18yLjI1LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODEwNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMtY3Jvc3NzZGtfMi4yNS4xLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgYmludXRpbHMtY3Jvc3NfJHtQVn0uYmIKKworaW5oZXJpdCBjcm9zc3NkaworCitQTiA9ICJiaW51dGlscy1jcm9zc3Nkay0ke1RBUkdFVF9BUkNIfSIKKworUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2giCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlzZWQgLWkgJ3MjL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYiMke1NES1BBVEhOQVRJVkV9L2xpYiAke1NES1BBVEhOQVRJVkV9L3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYiMnICR7U30vbGQvY29uZmlndXJlLnRndAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwNDg2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy5pbmMKQEAgLTAsMCArMSwxNTMgQEAKK1NVTU1BUlkgPSAiR05VIGJpbmFyeSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEJpbnV0aWxzIGFyZSBhIGNvbGxlY3Rpb24gb2YgYmluYXJ5IHRvb2xzLiBcCitUaGUgbWFpbiBvbmVzIGFyZSBsZCAoR05VIExpbmtlciksIGFuZCBhcyAoR05VIEFzc2VtYmxlcikuIFRoaXMgXAorcGFja2FnZSBhbHNvIGluY2x1ZGVzIGFkZGl0aW9uIHRvb2xzIHN1Y2ggYXMgYWRkcjJsaW5lIChDb252ZXJ0cyBcCithZGRyZXNzZXMgaW50byBmaWxlbmFtZXMgYW5kIGxpbmUgbnVtYmVycyksIGFyICh1dGlsaXR5IGZvciBjcmVhdGluZywgXAorbW9kaWZ5aW5nIGFuZCBleHRyYWN0aW5nIGFyY2hpdmVzKSwgbm0gKGxpc3Qgc3ltYm9scyBpbiBvYmplY3QgXAorZmlsZXMpLCBvYmpjb3B5IChjb3B5IGFuZCB0cmFuc2xhdGUgb2JqZWN0IGZpbGVzKSwgb2JqZHVtcCAoRGlzcGxheSBcCitvYmplY3QgaW5mb3JtYXRpb24pLCBhbmQgb3RoZXIgdG9vbHMgYW5kIHJlbGF0ZWQgbGlicmFyaWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iaW51dGlscy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MyIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUgemxpYi1uYXRpdmUgZ251LWNvbmZpZy1uYXRpdmUgYXV0b2NvbmYtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IG11bHRpbGliX2hlYWRlciB0ZXhpbmZvCisKK0ZJTEVTXyR7UE59ID0gIiBcCisJJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH0qIFwKKwkke2xpYmRpcn0vbGliKi0qLnNvIFwKKwkke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4vKiBcCisgICAgICAgICR7YmluZGlyfS9lbWJlZHNwdSIKKworUlBST1ZJREVTXyR7UE59ICs9ICIke1BOfS1zeW1saW5rcyIKKworRklMRVNfJHtQTn0tZGV2ID0gIiBcCisJJHtpbmNsdWRlZGlyfSBcCisJJHtsaWJkaXJ9LyoubGEgXAorCSR7bGliZGlyfS9saWJiZmQuc28gXAorCSR7bGliZGlyfS9saWJvcGNvZGVzLnNvIgorCisjIFJhdGhlciB0aGFuIGR1cGxpY2F0aW5nIG11bHRpcGxlIGVudHJpZXMgZm9yIHRoZXNlLCBtYWtlIG9uZQorIyBsaXN0IGFuZCByZXVzZSBpdC4KKworVVNFX0FMVEVSTkFUSVZFU19GT1IgPSAiIFwKKwlhZGRyMmxpbmUgXAorCWFyIFwKKwlhcyBcCisJYysrZmlsdCBcCisJZWxmZWRpdCBcCisJZ3Byb2YgXAorCWxkIFwKKwlsZC5iZmQgXAorCWxkLmdvbGQgZHdwIFwKKwlubSBcCisJb2JqY29weSBcCisJb2JqZHVtcCBcCisJcmFubGliIFwKKwlyZWFkZWxmIFwKKwlzaXplIFwKKwlzdHJpbmdzIFwKKwlzdHJpcCBcCisiCisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQoKSB7CisgICAgbWFrZV9hbHRzID0gZC5nZXRWYXIoIlVTRV9BTFRFUk5BVElWRVNfRk9SIiwgVHJ1ZSkgb3IgIiIKKyAgICBwcmVmaXggPSBkLmdldFZhcigiVEFSR0VUX1BSRUZJWCIsIFRydWUpCisgICAgYmluZGlyID0gZC5nZXRWYXIoImJpbmRpciIsIFRydWUpCisgICAgZm9yIGFsdCBpbiBtYWtlX2FsdHMuc3BsaXQoKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9UQVJHRVQnLCBhbHQsIGJpbmRpciArICIvIiArIHByZWZpeCArIGFsdCkKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBhbHQsIGJpbmRpciArICIvIiArIGFsdCkKK30KKworIyBGSUxFU18ke1BOfS1kYmcgPSAiJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vYmluLy5kZWJ1ZyAke3ByZWZpeH0vJHtsaWJkaXJ9Ly5kZWJ1ZyIKKworQiA9ICIke1N9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS13ZXJyb3IgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXBsdWdpbnMgXAorICAgICAgICAgICAgICAgICR7TERHT0xEfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCAnLS1lbmFibGUtNjQtYml0LWJmZCcsICcnLCBkKX0iCisKK0xER09MRF9jbGFzcy1uYXRpdmUgPSAiIgorTERHT0xEX2NsYXNzLWNyb3Nzc2RrID0gIiIKK0xER09MRCA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJy0tZW5hYmxlLWdvbGQ9ZGVmYXVsdCAtLWVuYWJsZS10aHJlYWRzJywgJy0tZW5hYmxlLWdvbGQgLS1lbmFibGUtbGQ9ZGVmYXVsdCcsIGQpfSIKKworIyBUaGlzIGlzIG5lY2Vzc2FyeSBkdWUgdG8gYSBidWcgaW4gdGhlIGJpbnV0aWxzIE1ha2VmaWxlcworIyBFWFRSQV9PRU1BS0UgPSAiY29uZmlndXJlLWJ1aWxkLWxpYmliZXJ0eSBhbGwiCisKK2V4cG9ydCBBUiA9ICIke0hPU1RfUFJFRklYfWFyIgorZXhwb3J0IEFTID0gIiR7SE9TVF9QUkVGSVh9YXMiCitleHBvcnQgTEQgPSAiJHtIT1NUX1BSRUZJWH1sZCIKK2V4cG9ydCBOTSA9ICIke0hPU1RfUFJFRklYfW5tIgorZXhwb3J0IFJBTkxJQiA9ICIke0hPU1RfUFJFRklYfXJhbmxpYiIKK2V4cG9ydCBPQkpDT1BZID0gIiR7SE9TVF9QUkVGSVh9b2JqY29weSIKK2V4cG9ydCBPQkpEVU1QID0gIiR7SE9TVF9QUkVGSVh9b2JqZHVtcCIKKworZXhwb3J0IEFSX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWFyIgorZXhwb3J0IEFTX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWFzIgorZXhwb3J0IExEX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWxkIgorZXhwb3J0IE5NX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfW5tIgorZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1yYW5saWIiCisKK2V4cG9ydCBDQ19GT1JfSE9TVCA9ICIke0NDQUNIRX0ke0hPU1RfUFJFRklYfWdjYyAke0hPU1RfQ0NfQVJDSH0iCitleHBvcnQgQ1hYX0ZPUl9IT1NUID0gIiR7Q0NBQ0hFfSR7SE9TVF9QUkVGSVh9Z2NjICR7SE9TVF9DQ19BUkNIfSIKKworIyBhdXRvdG9vbHMuYmJjbGFzcyBzZXRzIHRoZSBfRk9SX0JVSUxEIHZhcmlhYmxlcywgYnV0IGZvciBzb21lIHJlYXNvbiB3ZSBuZWVkCisjIHRvIHVuc2V0IExEX0xJQlJBUllfUEFUSC4KK2V4cG9ydCBDQ19GT1JfQlVJTEQgPSAiTERfTElCUkFSWV9QQVRIPSAke0JVSUxEX0NDfSIKKworTVVMVElBUkNIIDo9ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIm11bHRpYXJjaCIsICJ5ZXMiLCAibm8iLCBkKX0iCitkb19jb25maWd1cmVbdmFyZGVwc10gKz0gIk1VTFRJQVJDSCIKK2RvX2NvbmZpZ3VyZSAoKSB7CisJKGNkICR7U307IGdudS1jb25maWdpemUpIHx8IGRpZSAiRmFpbGVkIHRvIHJ1biBnbnUtY29uZmlnaXplIgorCW9lX3J1bmNvbmYKKyMKKyMgbXVzdCBwcmltZSBjb25maWcuY2FjaGUgdG8gZW5zdXJlIHRoZSBidWlsZCBvZiBsaWJpYmVydHkKKyMKKwlta2RpciAtcCAke0J9L2J1aWxkLSR7QlVJTERfU1lTfQorCWZvciBpIGluICR7Q09ORklHX1NJVEV9OyBkbworCQljYXQgJGkgPj4gJHtCfS9idWlsZC0ke0JVSUxEX1NZU30vY29uZmlnLmNhY2hlIHx8IHRydWUKKwlkb25lCit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoZXNlLCBzbyB3ZSdsbCByZW1vdmUgdGhlbS4uLgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2xkc2NyaXB0cworCisJIyBGaXggdGhlIC91c3IvJHtUQVJHRVRfU1lTfS9iaW4vKiBsaW5rcworCWZvciBsIGluICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9iaW4vKjsgZG8KKwkJcm0gLWYgJGwKKwkJbG4gLXNmIGBlY2hvICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2JpbiBcCisJCQl8IHRyIC1zIC8gXAorCQkJfCBzZWQgLWUgJ3MsXi8sLCcgLWUgJ3MsW14vXSosLi4sZydgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1gYmFzZW5hbWUgJGxgICRsCisJZG9uZQorCisJIyBJbnN0YWxsIHRoZSBsaWJpYmVydHkgaGVhZGVyCisJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9hbnNpZGVjbC5oICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSA2NDQgJHtTfS9pbmNsdWRlL2xpYmliZXJ0eS5oICR7RH0ke2luY2x1ZGVkaXJ9CisKKwljZCAke0R9JHtiaW5kaXJ9CisKKwkjIFN5bWxpbmtzIGZvciBlYXNlIG9mIHJ1bm5pbmcgdGhlc2Ugb24gdGhlIG5hdGl2ZSB0YXJnZXQKKwlmb3IgcCBpbiAke1RBUkdFVF9QUkVGSVh9KiA7IGRvCisJCWxuIC1zZiAkcCBgZWNobyAkcCB8IHNlZCAtZSBzLCR7VEFSR0VUX1BSRUZJWH0sLGAKKwlkb25lCisKKwlmb3IgYWx0IGluICR7VVNFX0FMVEVSTkFUSVZFU19GT1J9OyBkbworCQlybSAtZiAke0R9JHtiaW5kaXJ9LyRhbHQKKwlkb25lCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgYmZkLmgKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtdGFyZ2V0ID0gIiR7VVNFX0FMVEVSTkFUSVZFU19GT1J9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDEtR2VuZXJhdGUtcmVsb2NhdGFibGUtU0RLcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MGMxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAxLUdlbmVyYXRlLXJlbG9jYXRhYmxlLVNES3MucGF0Y2gKQEAgLTAsMCArMSw2MiBAQAorRnJvbSBmNzFlY2YyNTFmODRiNGJiYzliN2E4MzJkNWNkNGE4YmFlOTVkODNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTo1ODo1NCArMDAwMAorU3ViamVjdDogW1BBVENIIDAxLzEzXSBHZW5lcmF0ZSByZWxvY2F0YWJsZSBTREtzCisKK1RoaXMgcGF0Y2ggd2lsbCBtb2RpZnkgdGhlIEVMRiBsaW5rZXIgc2NyaXB0cyBzbyB0aGF0IHRoZSBjcm9zc3NkaworbGlua2VyIHdpbGwgZ2VuZXJhdGUgYmluYXJpZXMgd2l0aCBhIDQwOTYgYnl0ZXMgUFRfSU5URVJQIHNlY3Rpb24uIFdoZW4gdGhlIGJpbmFyaWVzCit3aWxsIGJlIHJlbG9jYXRlZCwgYXQgU0RLIGluc3RhbGwgdGltZSwgdGhlIGludGVycHJldGVyIHBhdGggY2FuIGJlIGVhc2lseQorY2hhbmdlZCBieSB0aGUgcmVsb2NhdGluZyBzY3JpcHQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbU0RLIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGQvZ2Vuc2NyaXB0cy5zaCAgICAgIHwgMyArKysKKyBsZC9zY3JpcHR0ZW1wbC9lbGYuc2MgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xkL2dlbnNjcmlwdHMuc2ggYi9sZC9nZW5zY3JpcHRzLnNoCitpbmRleCA0OTk2MDdhLi4wNzVkZDA0IDEwMDc1NQorLS0tIGEvbGQvZ2Vuc2NyaXB0cy5zaAorKysrIGIvbGQvZ2Vuc2NyaXB0cy5zaAorQEAgLTI3Nyw2ICsyNzcsNyBAQCBEQVRBX0FMSUdOTUVOVF91PSIke0RBVEFfQUxJR05NRU5UX3UtJHtEQVRBX0FMSUdOTUVOVF9yfX0iCisgTERfRkxBRz1yCisgREFUQV9BTElHTk1FTlQ9JHtEQVRBX0FMSUdOTUVOVF9yfQorIERFRkFVTFRfREFUQV9BTElHTk1FTlQ9IkFMSUdOKCR7U0VHTUVOVF9TSVpFfSkiCisrUEFSVElBTF9MSU5LSU5HPSIgIgorICggZWNobyAiLyogU2NyaXB0IGZvciBsZCAtcjogbGluayB3aXRob3V0IHJlbG9jYXRpb24gKi8iCisgICAuICR7Q1VTVE9NSVpFUl9TQ1JJUFR9CisgICAuICR7c3JjZGlyfS9zY3JpcHR0ZW1wbC8ke1NDUklQVF9OQU1FfS5zYworQEAgLTI4NSwxMCArMjg2LDEyIEBAIERFRkFVTFRfREFUQV9BTElHTk1FTlQ9IkFMSUdOKCR7U0VHTUVOVF9TSVpFfSkiCisgTERfRkxBRz11CisgREFUQV9BTElHTk1FTlQ9JHtEQVRBX0FMSUdOTUVOVF91fQorIENPTlNUUlVDVElORz0iICIKKytQQVJUSUFMX0xJTktJTkc9IiAiCisgKCBlY2hvICIvKiBTY3JpcHQgZm9yIGxkIC1VcjogbGluayB3L291dCByZWxvY2F0aW9uLCBkbyBjcmVhdGUgY29uc3RydWN0b3JzICovIgorICAgLiAke0NVU1RPTUlaRVJfU0NSSVBUfQorICAgLiAke3NyY2Rpcn0vc2NyaXB0dGVtcGwvJHtTQ1JJUFRfTkFNRX0uc2MKKyApIHwgc2VkIC1lICcvXiAqJC9kO3MvWyAJXSokLy8nID4gbGRzY3JpcHRzLyR7RU1VTEFUSU9OX05BTUV9Lnh1CisrdW5zZXQgUEFSVElBTF9MSU5LSU5HCisgCisgTERfRkxBRz0KKyBEQVRBX0FMSUdOTUVOVD0ke0RBVEFfQUxJR05NRU5UX30KK2RpZmYgLS1naXQgYS9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MgYi9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKK2luZGV4IDQzNjhmZDkuLjlmMDFlOGMgMTAwNjQ0CistLS0gYS9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKKysrKyBiL2xkL3NjcmlwdHRlbXBsL2VsZi5zYworQEAgLTEzMSw4ICsxMzEsOCBAQCBpZiB0ZXN0IC1uICIke0NPTU1PTlBBR0VTSVpFfSI7IHRoZW4KKyAgIERBVEFfU0VHTUVOVF9FTkQ9Ii4gPSBEQVRBX1NFR01FTlRfRU5EICguKTsiCisgICBEQVRBX1NFR01FTlRfUkVMUk9fRU5EPSIuID0gREFUQV9TRUdNRU5UX1JFTFJPX0VORCAoJHtTRVBBUkFURV9HT1RQTFQtMH0sIC4pOyIKKyBmaQorLWlmIHRlc3QgLXogIiR7SU5JVElBTF9SRUFET05MWV9TRUNUSU9OU30ke0NSRUFURV9TSExJQn0iOyB0aGVuCistICBJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TPSIuaW50ZXJwICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguaW50ZXJwKSB9IgorK2lmIHRlc3QgLXogIiR7SU5JVElBTF9SRUFET05MWV9TRUNUSU9OU30ke0NSRUFURV9TSExJQn0ke1BBUlRJQUxfTElOS0lOR30iOyB0aGVuCisrICBJTklUSUFMX1JFQURPTkxZX1NFQ1RJT05TPSIuaW50ZXJwICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguaW50ZXJwKTsgLiA9IDB4MTAwMDsgfSIKKyBmaQorIGlmIHRlc3QgLXogIiRQTFQiOyB0aGVuCisgICBJUExUPSIuaXBsdCAgICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguaXBsdCkgfSIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwMi1jb25maWd1cmUtd2lkZW4tdGhlLXJlZ2V4cC1mb3ItU0gtYXJjaGl0ZWN0dXJlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGUyMWQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDItY29uZmlndXJlLXdpZGVuLXRoZS1yZWdleHAtZm9yLVNILWFyY2hpdGVjdHVyZXMucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorRnJvbSBkZmJjZmIwZDcxNzY1YjMzN2U2MzU2MjI5OWE5NDMwNDM5MjhkMmQyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMTowNzozMyArMDAwMAorU3ViamVjdDogW1BBVENIIDAyLzEzXSBjb25maWd1cmU6IHdpZGVuIHRoZSByZWdleHAgZm9yIFNIIGFyY2hpdGVjdHVyZXMKKworZ3Byb2YgbmVlZHMgdG8ga25vdyBhYm91dCB1Y2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgICAgICAgfCA0ICsrLS0KKyBncHJvZi9jb25maWd1cmUgfCA1ICsrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDg3Njc3YmMuLmU5ZjJmMTMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTMzNDEsNyArMzM0MSw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgICAgOzsKKyAgIHMzOTAtKi0qIHwgczM5MHgtKi0qKQorICAgICA7OworLSAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisrICBzaCotKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIDs7CisgICBzaDY0LSotKiB8IHNoNSotKi0qKQorICAgICA7OworQEAgLTM4MTIsNyArMzgxMiw3IEBAIGNhc2UgIiR7dGFyZ2V0fSIgaW4KKyAgIG9yMWsqLSotKikKKyAgICAgbm9jb25maWdkaXJzPSIkbm9jb25maWdkaXJzIGdkYiIKKyAgICAgOzsKKy0gIHNoLSotKiB8IHNoNjQtKi0qKQorKyAgc2gqLSotKiB8IHNoNjQtKi0qKQorICAgICBjYXNlICIke3RhcmdldH0iIGluCisgICAgICAgc2gqLSotZWxmKQorICAgICAgICAgIDs7CitkaWZmIC0tZ2l0IGEvZ3Byb2YvY29uZmlndXJlIGIvZ3Byb2YvY29uZmlndXJlCitpbmRleCBiMDljOGZiLi43OTk2MWM1IDEwMDc1NQorLS0tIGEvZ3Byb2YvY29uZmlndXJlCisrKysgYi9ncHJvZi9jb25maWd1cmUKK0BAIC01ODY5LDYgKzU4NjksMTEgQEAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgIDs7CisgCisrbGludXgtdWNsaWJjKikKKysgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisrICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvbGliL2xpYnVDbGliYy0qLnNvYAorKyAgOzsKKysKKyBuZXRic2QqKQorICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDMtUG9pbnQtc2NyaXB0cy1sb2NhdGlvbi10by1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjZTc2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDAzLVBvaW50LXNjcmlwdHMtbG9jYXRpb24tdG8tbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gZGZiMTQxMmRhNjdiYmZlM2U5OTNkMTA3ZDBiNWUzOTJmNDQxNDFhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MDk6NTggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8xM10gUG9pbnQgc2NyaXB0cyBsb2NhdGlvbiB0byBsaWJkaXIKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsZC9NYWtlZmlsZS5hbSB8IDIgKy0KKyBsZC9NYWtlZmlsZS5pbiB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xkL01ha2VmaWxlLmFtIGIvbGQvTWFrZWZpbGUuYW0KK2luZGV4IDk1NzVmMWYuLjg0ZGYwYmYgMTAwNjQ0CistLS0gYS9sZC9NYWtlZmlsZS5hbQorKysrIGIvbGQvTWFrZWZpbGUuYW0KK0BAIC01NCw3ICs1NCw3IEBAIGVuZGlmCisgIyBXZSBwdXQgdGhlIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSAkKHNjcmlwdGRpcikvbGRzY3JpcHRzLgorICMgV2UgY2FuJ3QgcHV0IHRoZSBzY3JpcHRzIGluICQoZGF0YWRpcikgYmVjYXVzZSB0aGUgU0VBUkNIX0RJUgorICMgZGlyZWN0aXZlcyBuZWVkIHRvIGJlIGRpZmZlcmVudCBmb3IgbmF0aXZlIGFuZCBjcm9zcyBsaW5rZXJzLgorLXNjcmlwdGRpciA9ICQodG9vbGRpcikvbGliCisrc2NyaXB0ZGlyID0gJChsaWJkaXIpCisgCisgRU1VTCA9IEBFTVVMQAorIEVNVUxBVElPTl9PRklMRVMgPSBARU1VTEFUSU9OX09GSUxFU0AKK2RpZmYgLS1naXQgYS9sZC9NYWtlZmlsZS5pbiBiL2xkL01ha2VmaWxlLmluCitpbmRleCA5ZjU2Y2ExLi4yNzI4NjBmIDEwMDY0NAorLS0tIGEvbGQvTWFrZWZpbGUuaW4KKysrKyBiL2xkL01ha2VmaWxlLmluCitAQCAtMzg4LDcgKzM4OCw3IEBAIEFNX0NGTEFHUyA9ICQoV0FSTl9DRkxBR1MpCisgIyBXZSBwdXQgdGhlIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSAkKHNjcmlwdGRpcikvbGRzY3JpcHRzLgorICMgV2UgY2FuJ3QgcHV0IHRoZSBzY3JpcHRzIGluICQoZGF0YWRpcikgYmVjYXVzZSB0aGUgU0VBUkNIX0RJUgorICMgZGlyZWN0aXZlcyBuZWVkIHRvIGJlIGRpZmZlcmVudCBmb3IgbmF0aXZlIGFuZCBjcm9zcyBsaW5rZXJzLgorLXNjcmlwdGRpciA9ICQodG9vbGRpcikvbGliCisrc2NyaXB0ZGlyID0gJChsaWJkaXIpCisgQkFTRURJUiA9ICQoc3JjZGlyKS8uLgorIEJGRERJUiA9ICQoQkFTRURJUikvYmZkCisgSU5DRElSID0gJChCQVNFRElSKS9pbmNsdWRlCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA0LU9ubHktZ2VuZXJhdGUtYW4tUlBBVEgtZW50cnktaWYtTERfUlVOX1BBVEgtaXMtbm90LWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2QyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNC1Pbmx5LWdlbmVyYXRlLWFuLVJQQVRILWVudHJ5LWlmLUxEX1JVTl9QQVRILWlzLW5vdC1lLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gMzEyNjYwOGI4Yzk1YTc5MmFkZTU2Y2Y2MmE1MzFkOTM1ZDM5MWM1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6Mjc6MTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8xM10gT25seSBnZW5lcmF0ZSBhbiBSUEFUSCBlbnRyeSBpZiBMRF9SVU5fUEFUSCBpcyBub3QKKyBlbXB0eQorCitmb3IgY2FzZXMgd2hlcmUgLXJwYXRoIGlzbid0IHNwZWNpZmllZC4gZGViaWFuICgjMTUxMDI0KQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hyaXMgQ2hpbWVsaXMgPGNocmlzQGRlYmlhbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGQvZW11bHRlbXBsL2VsZjMyLmVtIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGQvZW11bHRlbXBsL2VsZjMyLmVtIGIvbGQvZW11bHRlbXBsL2VsZjMyLmVtCitpbmRleCAzNmRlZThlLi4wN2JlYTUyIDEwMDY0NAorLS0tIGEvbGQvZW11bHRlbXBsL2VsZjMyLmVtCisrKysgYi9sZC9lbXVsdGVtcGwvZWxmMzIuZW0KK0BAIC0xMTk4LDYgKzExOTgsOCBAQCBmcmFnbWVudCA8PEVPRgorIAkgICAgICAmJiBjb21tYW5kX2xpbmUucnBhdGggPT0gTlVMTCkKKyAJICAgIHsKKyAJICAgICAgbGliX3BhdGggPSAoY29uc3QgY2hhciAqKSBnZXRlbnYgKCJMRF9SVU5fUEFUSCIpOworKwkgICAgICBpZiAoKGxpYl9wYXRoKSAmJiAoc3RybGVuIChsaWJfcGF0aCkgPT0gMCkpCisrCQkgIGxpYl9wYXRoID0gTlVMTDsKKyAJICAgICAgaWYgKGdsZCR7RU1VTEFUSU9OX05BTUV9X3NlYXJjaF9uZWVkZWQgKGxpYl9wYXRoLCAmbiwKKyAJCQkJCQkgICAgICBmb3JjZSkpCisgCQlicmVhazsKK0BAIC0xNDYxLDYgKzE0NjMsOCBAQCBnbGQke0VNVUxBVElPTl9OQU1FfV9iZWZvcmVfYWxsb2NhdGlvbiAodm9pZCkKKyAgIHJwYXRoID0gY29tbWFuZF9saW5lLnJwYXRoOworICAgaWYgKHJwYXRoID09IE5VTEwpCisgICAgIHJwYXRoID0gKGNvbnN0IGNoYXIgKikgZ2V0ZW52ICgiTERfUlVOX1BBVEgiKTsKKysgIGlmICgocnBhdGgpICYmIChzdHJsZW4gKHJwYXRoKSA9PSAwKSkKKysgICAgcnBhdGggPSBOVUxMOworIAorICAgZm9yIChhYmZkID0gbGlua19pbmZvLmlucHV0X2JmZHM7IGFiZmQ7IGFiZmQgPSBhYmZkLT5saW5rLm5leHQpCisgICAgIGlmIChiZmRfZ2V0X2ZsYXZvdXIgKGFiZmQpID09IGJmZF90YXJnZXRfZWxmX2ZsYXZvdXIpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDUtRXhwbGljaXRseS1saW5rLXdpdGgtbGlibS1vbi11Y2xpYmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiZDkzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA1LUV4cGxpY2l0bHktbGluay13aXRoLWxpYm0tb24tdWNsaWJjLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0Zyb20gZjE3MDNiY2M3YTVjNTA3ZTQ3MWUyNjMwYjVhMmRlMTI5MTAwMzE1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MzI6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8xM10gRXhwbGljaXRseSBsaW5rIHdpdGggbGlibSBvbiB1Y2xpYmMKKworRGVzY3JpcHRpb246CisKK1dlIGRvIG5vdCBuZWVkIHRvIGhhdmUgdGhlIGxpYnRvb2wgcGF0Y2ggYW55bW9yZSBmb3IgYmludXRpbHMgYWZ0ZXIKK2xpYnRvb2wgaGFzIGJlZW4gdXBkYXRlZCB1cHN0cmVhbSBpdCBpbmNsdWRlIHN1cHBvcnQgZm9yIGl0LiBIb3dldmVyCitmb3IgYnVpbGRpbmcgZ2FzIG5hdGl2ZWx5IG9uIHVjbGliYyBzeXN0ZW1zIHdlIGhhdmUgdG8gbGluayBpdCB3aXRoCistbG0gc28gdGhhdCBpdCBwaWNrcyB1cCBtaXNzaW5nIHN5bWJvbHMuCisKKy9sb2NhbC9idWlsZF9hcmVhL0JVSUxEL2FybV92NXRfbGVfdWNsaWJjL2JpbnV0aWxzLTIuMTcuNTAvb2JqZGlyL2xpYmliZXJ0eS9waWMvbGliaWJlcnR5LmEoZmxvYXRmb3JtYXQubyk6CitJbiBmdW5jdGlvbiBgZmxvYXRmb3JtYXRfZnJvbV9kb3VibGUnOgorZmxvYXRmb3JtYXQuYzooLnRleHQrMHgxZWMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBmcmV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4MmY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCisvbG9jYWwvYnVpbGRfYXJlYS9CVUlMRC9hcm1fdjV0X2xlX3VjbGliYy9iaW51dGlscy0yLjE3LjUwL29iamRpci9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hKGZsb2F0Zm9ybWF0Lm8pOgorSW4gZnVuY3Rpb24gYGZsb2F0Zm9ybWF0X3RvX2RvdWJsZSc6CitmbG9hdGZvcm1hdC5jOigudGV4dCsweDM4YSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworZmxvYXRmb3JtYXQuYzooLnRleHQrMHgzZDIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsZGV4cCcKK2Zsb2F0Zm9ybWF0LmM6KC50ZXh0KzB4NDNlKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbGRleHAnCitmbG9hdGZvcm1hdC5jOigudGV4dCsweDRlMik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxkZXhwJworY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK21ha2VbNF06ICoqKiBbYXMtbmV3XSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2FzL2NvbmZpZ3VyZS50Z3QgfCA2ICsrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUudGd0IGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK2luZGV4IDlhYmM3NjguLjFkOTJmNTUgMTAwNjQ0CistLS0gYS9nYXMvY29uZmlndXJlLnRndAorKysrIGIvZ2FzL2NvbmZpZ3VyZS50Z3QKK0BAIC00NzcsNiArNDc3LDEyIEBAIGNhc2UgJHtnZW5lcmljX3RhcmdldH0gaW4KKyAgICotKi1uZXR3YXJlKQkJCQlmbXQ9ZWxmIGVtPW5ldHdhcmUgOzsKKyBlc2FjCisgCisrY2FzZSAke2dlbmVyaWNfdGFyZ2V0fSBpbgorKyAgYXJtLSotKnVjbGliYyopCisrICAgIG5lZWRfbGlibT15ZXMKKysgICAgOzsKKytlc2FjCisrCisgY2FzZSAke2NwdV90eXBlfSBpbgorICAgYWFyY2g2NCB8IGFscGhhIHwgYXJtIHwgaTM4NiB8IGlhNjQgfCBtaWNyb2JsYXplIHwgbWlwcyB8IG5zMzJrIHwgb3IxayB8IG9yMWtuZCB8IHBkcDExIHwgcHBjIHwgc3BhcmMgfCB6ODAgfCB6OGspCisgICAgIGJmZF9nYXM9eWVzCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA2LVVzZS1saWJ0b29sLTIuNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk2N2VmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDYtVXNlLWxpYnRvb2wtMi40LnBhdGNoCkBAIC0wLDAgKzEsMTkzNjEgQEAKK0Zyb20gMDNlYjliNGZlNTgzZTg4YTIyZmQ4YzI1YjQzZmJkOWJhZmUyMWFmNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6MzQ6NDEgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xM10gVXNlIGxpYnRvb2wgMi40CisKK1NvIHdlIGNhbiBnZXQgbGlidG9vbCBzeXNyb290IHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiZmQvY29uZmlndXJlICAgICAgICB8IDEzMjAgKysrKysrKysrKysrKysrKystLS0tLS0KKyBiZmQvY29uZmlndXJlLmFjICAgICB8ICAgIDIgKy0KKyBiaW51dGlscy9jb25maWd1cmUgICB8IDEzMTggKysrKysrKysrKysrKysrKystLS0tLS0KKyBjb25maWd1cmUgICAgICAgICAgICB8ICAgIDIgKy0KKyBnYXMvY29uZmlndXJlICAgICAgICB8IDEzMTggKysrKysrKysrKysrKysrKystLS0tLS0KKyBncHJvZi9jb25maWd1cmUgICAgICB8IDEzMjMgKysrKysrKysrKysrKysrKystLS0tLS0KKyBsZC9jb25maWd1cmUgICAgICAgICB8IDE3MDEgKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KKyBsaWJ0b29sLm00ICAgICAgICAgICB8IDEwODYgKysrKysrKysrKysrKy0tLS0tLQorIGx0bWFpbi5zaCAgICAgICAgICAgIHwgMjkyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQorIGx0b3B0aW9ucy5tNCAgICAgICAgIHwgICAgMiArLQorIGx0dmVyc2lvbi5tNCAgICAgICAgIHwgICAxMiArLQorIGx0fm9ic29sZXRlLm00ICAgICAgIHwgICAgMiArLQorIG9wY29kZXMvY29uZmlndXJlICAgIHwgMTMyMCArKysrKysrKysrKysrKysrKy0tLS0tLQorIG9wY29kZXMvY29uZmlndXJlLmFjIHwgICAgMiArLQorIDE0IGZpbGVzIGNoYW5nZWQsIDg5NTIgaW5zZXJ0aW9ucygrKSwgMzM4MSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2JmZC9jb25maWd1cmUgYi9iZmQvY29uZmlndXJlCitpbmRleCA4NWU2YjgyLi4zZDNkZDg4IDEwMDc1NQorLS0tIGEvYmZkL2NvbmZpZ3VyZQorKysrIGIvYmZkL2NvbmZpZ3VyZQorQEAgLTY2OCw2ICs2NjgsOSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKythY19jdF9BUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzgwLDYgKzc4Myw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0NTYsNiArMTQ2MCw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC1tbWFwICAgICAgICAgICAgIHRyeSB1c2luZyBtbWFwIGZvciBCRkQgaW5wdXQgZmlsZXMgaWYgYXZhaWxhYmxlCisgICAtLXdpdGgtc2VwYXJhdGUtZGVidWctZGlyPURJUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgZ2xvYmFsIHNlcGFyYXRlIGRlYnVnIGluZm8gaW4gRElSCitAQCAtNTM4Niw4ICs1MzkyLDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTU0MjcsNyArNTQzMyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTYxMTMsOCArNjExOSw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC02MTYzLDYgKzYxNjksODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYxNzksNiArNjI1OSwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjM0Nyw3ICs2NDMyLDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTY1MDEsNiArNjU4NywyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTY1MTYsOSArNjYxNywxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjUzNCw3ICs2Nzg4LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjU1NCwxMSArNjgwOCwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NTc0LDcgKzY4MzIsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjU5Myw2ICs2ODUxLDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02NjA0LDE2ICs2ODY2LDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorIAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisgCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisgCisgCisgCitAQCAtNjk1NSw4ICs3MjczLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02OTkyLDYgKzczMTAsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNzAzMyw2ICs3MzUyLDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTcwNDQsNyArNzM3NSw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTcwNzAsOCArNzQwMSw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTcwODEsOCArNzQxMiw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTcxMTksNiArNzQ1MCwxNiBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworIAorIAorIAorQEAgLTcxNDAsNiArNzQ4MSw0NSBAQCBmaQorIAorIAorIAorKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworKworKworICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitAQCAtNzM0Niw2ICs3NzI2LDEyMyBAQCBlc2FjCisgCisgbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisgCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1tdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRNQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9NQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPSB4OyB0aGVuCisrICAgIE1BTklGRVNUX1RPT0w9IjoiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBNQU5JRkVTVF9UT09MPSRhY19jdF9NQU5JRkVTVF9UT09MCisrICBmaQorK2Vsc2UKKysgIE1BTklGRVNUX1RPT0w9IiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0KgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KKytpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorKyAgTUFOSUZFU1RfVE9PTD06CisrZmkKKysKKysKKysKKysKKysKKyAKKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKK0BAIC03OTA5LDYgKzg0MDYsOCBAQCBfTFRfRU9GCisgICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mNQorICAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKysgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiY1CisgICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCisgaW50IG1haW4oKSB7IHJldHVybiAwO30KKyBfTFRfRU9GCitAQCAtODA3Myw3ICs4NTcyLDggQEAgZmkKKyBMSUJUT09MX0RFUFM9IiRsdG1haW4iCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIAorIAorIAorQEAgLTgxNjIsNyArODY2Miw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCitAQCAtODQ2MCw4ICs4OTYwLDYgQEAgZmkKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKyAKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKy0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAorICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKK0BAIC04NjI3LDYgKzkxMjUsMTIgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy0tc2hhcmVkJworIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisgCTs7CisrICAgICAgbmFnZm9yKikKKysJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisrCWx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisrCTs7CisgICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKyAJIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKK0BAIC04Njg5LDcgKzkxOTMsNyBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICAqKQorIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CitAQCAtODc0NiwxMyArOTI1MCwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgIDs7CisgZXNhYworLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorLQorLQorLQorLQorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWM9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC04ODEzLDYgKzkzMjEsMTEgQEAgZmkKKyAKKyAKKyAKKysKKysKKysKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC05MTYzLDcgKzk2NzYsOCBAQCBfTFRfRU9GCisgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCisgCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKK0BAIC05MjExLDcgKzk3MjUsNyBAQCBfTFRfRU9GCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorIAkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICAgdGhlbgorLQl0bXBfYWRkZmxhZz0KKysJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisgCXRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJworIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKK0BAIC05MjYyLDEyICs5Nzc2LDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTkyODEsOCArOTc5NSw4IEBAIF9MVF9FT0YKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGZpCisgICAgICAgOzsKKyAKK0BAIC05MzAwLDggKzk4MTQsOCBAQCBfTFRfRU9GCisgCisgX0xUX0VPRgorICAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTM0Nyw4ICs5ODYxLDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTk0NzgsNyArOTk5MiwxMyBAQCBfTFRfRU9GCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCisgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05NDkxLDIyICsxMDAxMSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTUxOCw3ICsxMDA0NSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTUzMSwyMiArMTAwNjQsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAJIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKK0BAIC05NTkxLDIwICsxMDEzMSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTk2NjUsNyArMTAyNDgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05NjczLDcgKzEwMjU2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTY4OSw3ICsxMDI3Miw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05NzEzLDEwICsxMDI5NiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTk3OTUsMjMgKzEwMzc4LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05ODk2LDcgKzEwNDkyLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTkxNSw5ICsxMDUxMSw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDQ5Myw4ICsxMTA4OSw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDUyNywxMyArMTExMjQsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwNjI1LDcgKzExMjgwLDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExNDY1LDEwICsxMjEyMCwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExNTcxLDEwICsxMjIyNiwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTE1MTYzLDcgKzE1ODE4LDcgQEAgU0hBUkVEX0xERkxBR1M9CisgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAjIE1vcmUgaGFja3MgdG8gYnVpbGQgRExMcyBvbiBXaW5kb3dzLgorQEAgLTE2NzgwLDEzICsxNzQzNSwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE2ODAxLDE0ICsxNzQ2MywxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNjg0MSwxMiArMTc1MDYsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTY5MDEsOCArMTc1NjYsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE2OTEyLDEyICsxNzU4MiwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTY5MzMsNyArMTc2MDUsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xNjk2OSw2ICsxNzY0MCw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTc3NDgsNyArMTg0MjAsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE3ODUxLDE5ICsxODUyNCw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNzg5Myw2ICsxODU4OSwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNzkwMiw2ICsxODYwNCw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTgwMTYsMTIgKzE4NzIxLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE4MTA4LDkgKzE4ODEzLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTgxMjYsNiArMTg4MjgsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE4MTU4LDIxMCArMTg4NjMsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2JmZC9jb25maWd1cmUuYWMgYi9iZmQvY29uZmlndXJlLmFjCitpbmRleCBiYTk4ZTM5Li44ODA2M2NmIDEwMDY0NAorLS0tIGEvYmZkL2NvbmZpZ3VyZS5hYworKysrIGIvYmZkL2NvbmZpZ3VyZS5hYworQEAgLTU2NCw3ICs1NjQsNyBAQCBjaGFuZ2VxdW90ZSgsKWRubAorICAgeD1gc2VkIC1uIC1lICdzL15bIAldKlBJQ0ZMQUdbIAldKj1bIAldKi8vcCcgPCAuLi9saWJpYmVydHkvTWFrZWZpbGUgfCBzZWQgLW4gJyRwJ2AKKyBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICBpZiB0ZXN0IC1uICIkeCI7IHRoZW4KKy0gICAgU0hBUkVEX0xJQkFERD0iLUxgcHdkYC8uLi9saWJpYmVydHkvcGljIC1saWJlcnR5IgorKyAgICBTSEFSRURfTElCQUREPSJgcHdkYC8uLi9saWJpYmVydHkvcGljL2xpYmliZXJ0eS5hIgorICAgZmkKKyAKKyAjIE1vcmUgaGFja3MgdG8gYnVpbGQgRExMcyBvbiBXaW5kb3dzLgorZGlmZiAtLWdpdCBhL2JpbnV0aWxzL2NvbmZpZ3VyZSBiL2JpbnV0aWxzL2NvbmZpZ3VyZQoraW5kZXggYmU0YjgxYy4uNjYwNmE1ZiAxMDA3NTUKKy0tLSBhL2JpbnV0aWxzL2NvbmZpZ3VyZQorKysrIGIvYmludXRpbHMvY29uZmlndXJlCitAQCAtNjU1LDggKzY1NSwxMSBAQCBPVE9PTAorIExJUE8KKyBOTUVESVQKKyBEU1lNVVRJTAorK01BTklGRVNUX1RPT0wKKyBSQU5MSUIKKythY19jdF9BUgorIEFSCisrRExMVE9PTAorIE9CSkRVTVAKKyBMTl9TCisgTk0KK0BAIC03NjcsNiArNzcwLDcgQEAgZW5hYmxlX3N0YXRpYworIHdpdGhfcGljCisgZW5hYmxlX2Zhc3RfaW5zdGFsbAorIHdpdGhfZ251X2xkCisrd2l0aF9saWJ0b29sX3N5c3Jvb3QKKyBlbmFibGVfbGlidG9vbF9sb2NrCisgZW5hYmxlX3BsdWdpbnMKKyBlbmFibGVfbGFyZ2VmaWxlCitAQCAtMTQzOSw2ICsxNDQzLDggQEAgT3B0aW9uYWwgUGFja2FnZXM6CisgICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCisgICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisrICAtLXdpdGgtbGlidG9vbC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLgorICAgLS13aXRoLXpsaWIgICAgICAgICAgICAgaW5jbHVkZSB6bGliIHN1cHBvcnQgKGF1dG8veWVzL25vKSBkZWZhdWx0PWF1dG8KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBkZWZhdWx0PW5vCisgICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCitAQCAtNTE1Myw4ICs1MTU5LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTUxOTQsNyArNTIwMCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU4ODAsOCArNTg4Niw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01OTMwLDYgKzU5MzYsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU5NDYsNiArNjAyNiwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNjExNCw3ICs2MTk5LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYyNjgsNiArNjM1NCwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYyODMsOSArNjM4NCwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjMwMSw3ICs2NTU1LDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjMyMSwxMSArNjU3NSwxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MzQxLDcgKzY1OTksNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjM2MCw2ICs2NjE4LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MzcxLDE2ICs2NjMzLDcyIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorKworKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKyAKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorIAorK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisgCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisgCisgCisgCitAQCAtNjcyMiw4ICs3MDQwLDggQEAgZXNhYworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgCisgIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorIAorICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorIG9wdF9jcj0KK0BAIC02NzU5LDYgKzcwNzcsNyBAQCBmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisgICBlbHNlCisgICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbCSBdXCgkc3ltY29kZSRzeW1jb2RlKlwpWwkgXVsJIF0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgICBmaQorKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorIAorICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgICBwaXBlX3dvcmtzPW5vCitAQCAtNjgwMCw2ICs3MTE5LDE4IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJICBjYXQgPDxfTFRfRU9GID4gY29uZnRlc3QuJGFjX2V4dAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNlbmRpZgorQEAgLTY4MTEsNyArNzE0Miw3IEBAIF9MVF9FT0YKKyAJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCistY29uc3Qgc3RydWN0IHsKKytMVF9ETFNZTV9DT05TVCBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgICAgICAgKmFkZHJlc3M7CisgfQorQEAgLTY4MzcsOCArNzE2OCw4IEBAIHN0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgX0xUX0VPRgorIAkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisgCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CistCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKy0JICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKysJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUworKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworIAkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisgCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgorIAkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorQEAgLTY4NDgsOCArNzE3OSw4IEBAIF9MVF9FT0YKKyAgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorIAlmaQorQEAgLTY4ODYsNiArNzIxNywyMCBAQCBlbHNlCisgJGFzX2VjaG8gIm9rIiA+JjY7IH0KKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytmaQorKworKworKworKworKworKworKworKworIAorIAorIAorQEAgLTY5MDUsNiArNzI1MCw0MSBAQCBmaQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisrCisrIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Qgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgd2l0aHZhbD0kd2l0aF9saWJ0b29sX3N5c3Jvb3Q7CisrZWxzZQorKyAgd2l0aF9saWJ0b29sX3N5c3Jvb3Q9bm8KKytmaQorKworKworK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY1CisrJGFzX2VjaG8gIiR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjY7IH0KKysgICBhc19mbl9lcnJvciAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKKysgICA7OworK2VzYWMKKysKKysgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyskYXNfZWNobyAiJHtsdF9zeXNyb290Oi1ub30iID4mNjsgfQorKworKworKworIAorIAorICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgorQEAgLTcxMTMsNiArNzQ5MywxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzY3Niw2ICs4MTczLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTc4NzEsNyArODM3MCw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03OTYwLDcgKzg0NjAsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTgyNTgsOCArODc1OCw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODQyNSw2ICs4OTIzLDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODQ4Nyw3ICs4OTkxLDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTg1NDQsMTMgKzkwNDgsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODYxMSw2ICs5MTE5LDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODk2MSw3ICs5NDc0LDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtOTAwOSw3ICs5NTIzLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtOTA2MCwxMiArOTU3NCwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC05MDc5LDggKzk1OTMsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTA5OCw4ICs5NjEyLDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTkxNDUsOCArOTY1OSw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05Mjc2LDcgKzk3OTAsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTI4OSwyMiArOTgwOSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtOTMxNiw3ICs5ODQzLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MzI5LDIyICs5ODYyLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTM4OSwyMCArOTkyOSw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTk0NjMsNyArMTAwNDYsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05NDcxLDcgKzEwMDU0LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXg5KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGZpCitAQCAtOTQ4Nyw3ICsxMDA3MCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05NTExLDEwICsxMDA5NCwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTk1OTMsMjMgKzEwMTc2LDM2IEBAIGZpCisgCisgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisgCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKyAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKy0gICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCistICAgICAgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCistaW50IGZvbyh2b2lkKSB7fQorK2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH0KKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CistICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCistCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXMKKytlbHNlCisrICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorKwlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCisrICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK0BAIC05Njk0LDcgKzEwMjkwLDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTcxMyw5ICsxMDMwOSw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDI5MSw4ICsxMDg4Nyw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDMyNSwxMyArMTA5MjIsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwNDIzLDcgKzExMDc4LDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExMjYzLDEwICsxMTkxOCwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExMzY5LDEwICsxMjAyNCwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTE1MzczLDEzICsxNjAyOCwyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1Mzk0LDE0ICsxNjA1NiwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTQzNCwxMiArMTYwOTksMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTU0OTQsOCArMTYxNTksMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTE1NTA1LDEyICsxNjE3NSwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTU1MjYsNyArMTYxOTgsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xNTU2Miw2ICsxNjIzMyw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTYzMTksNyArMTY5OTEsOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE2NDIyLDE5ICsxNzA5NSw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNjQ2NCw2ICsxNzE2MCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNjQ3Myw2ICsxNzE3NSw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTY1ODcsMTIgKzE3MjkyLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE2Njc5LDkgKzE3Mzg0LDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTY2OTcsNiArMTczOTksOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE2NzI5LDIxMCArMTc0MzQsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZTlmMmYxMy4uY2JjY2IxOCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtODA0MSw3ICs4MDQxLDcgQEAgY2FzZSAiICRidWlsZF9jb25maWdkaXJzICIgaW4KKyAgICAgIyBGb3IgYW4gaW5zdGFsbGVkIG1ha2VpbmZvLCB3ZSByZXF1aXJlIGl0IHRvIGJlIGZyb20gdGV4aW5mbyA0Ljcgb3IKKyAgICAgIyBoaWdoZXIsIGVsc2Ugd2UgdXNlIHRoZSAibWlzc2luZyIgZHVtbXkuCisgICAgIGlmICR7TUFLRUlORk99IC0tdmVyc2lvbiBcCistICAgICAgIHwgZWdyZXAgJ3RleGluZm9bXjAtOV0qKDRcLihbNy05XXxbMS05XVswLTldKXxbNS05XXxbMS05XVswLTldKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgIHwgZWdyZXAgJ3RleGluZm9bXjAtOV0qKFsxLTNdWzAtOV18NC5bNC05XXw0LlsxLTldWzAtOV0rfFs1LTldKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgOgorICAgICBlbHNlCisgICAgICAgTUFLRUlORk89IiRNSVNTSU5HIG1ha2VpbmZvIgorZGlmZiAtLWdpdCBhL2dhcy9jb25maWd1cmUgYi9nYXMvY29uZmlndXJlCitpbmRleCBlOWJhNTUwLi4wNzQ4ODZmIDEwMDc1NQorLS0tIGEvZ2FzL2NvbmZpZ3VyZQorKysrIGIvZ2FzL2NvbmZpZ3VyZQorQEAgLTY0NSw4ICs2NDUsMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzU3LDYgKzc2MCw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0MjIsNiArMTQyNiw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC16bGliICAgICAgICAgICAgIGluY2x1ZGUgemxpYiBzdXBwb3J0IChhdXRvL3llcy9ubykgZGVmYXVsdD1hdXRvCisgCisgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CitAQCAtNDkwMSw4ICs0OTA3LDggQEAgZXNhYworIAorIAorIAorLW1hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK21hY3JvX3ZlcnNpb249JzIuNCcKKyttYWNyb19yZXZpc2lvbj0nMS4zMjkzJworIAorIAorIAorQEAgLTQ5NDIsNyArNDk0OCw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyAjIFRlc3QgcHJpbnQgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSBhIGJ1aWx0aW4gaWYgcHJlc2VudC4KKy1pZiB0ZXN0ICJYYHByaW50IC1yIC0tIC1uIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorK2lmIHRlc3QgIlhgKCBwcmludCAtciAtLSAtbiApIDI+L2Rldi9udWxsYCIgPSBYLW4gJiYgXAorICAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgICBFQ0hPPSdwcmludCAtciAtLScKKyBlbGlmIHRlc3QgIlhgcHJpbnRmICVzICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorQEAgLTU2MjgsOCArNTYzNCw4IEBAICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7CisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC01Njc4LDYgKzU2ODQsODAgQEAgZXNhYworIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICotKi1jeWd3aW4qICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICAgICotKi1jeWd3aW4qICkKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICAgICAgOzsKKysgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKysgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisrICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b190b29sX2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgorK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorK2Nhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTU2OTQsNiArNTc3NCwxMSBAQCBjYXNlICRyZWxvYWRfZmxhZyBpbgorIGVzYWMKKyByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgY2FzZSAkaG9zdF9vcyBpbgorKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKysgICAgICByZWxvYWRfY21kcz1mYWxzZQorKyAgICBmaQorKyAgICA7OworICAgZGFyd2luKikKKyAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitAQCAtNTg2Miw3ICs1OTQ3LDggQEAgbWluZ3cqIHwgcHczMiopCisgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICAgZWxzZQorLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKysgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgIGZpCisgICA7OworQEAgLTYwMTYsNiArNjEwMiwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTYwMzEsOSArNjEzMiwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjA0OSw3ICs2MzAzLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjA2OSwxMSArNjMyMywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MDg5LDcgKzYzNDcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjEwOCw2ICs2MzY2LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MTE5LDEyICs2MzgxLDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorIAorIAorIAorQEAgLTYxMzYsNiArNjM5Niw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorQEAgLTY0NzAsOCArNjc4OCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjUwNyw2ICs2ODI1LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY1NDgsNiArNjg2NywxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02NTU5LDcgKzY4OTAsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02NTg1LDggKzY5MTYsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02NTk2LDggKzY5MjcsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02NjM0LDYgKzY5NjUsMjEgQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02NjUyLDYgKzY5OTgsNDAgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKyAKKyAKKyAKK0BAIC02ODYxLDYgKzcyNDEsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc0MjQsNiArNzkyMSw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03NjE5LDcgKzgxMTgsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzcwOCw3ICs4MjA4LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MDA2LDggKzg1MDYsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgxNzMsNiArODY3MSwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTgyMzUsNyArODczOSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04MjkyLDEzICs4Nzk2LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTgzNTksNiArODg2NywxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg3MDksNyArOTIyMiw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg3NTcsNyArOTI3MSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTg4MDgsMTIgKzkzMjIsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtODgyNyw4ICs5MzQxLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTg4NDYsOCArOTM2MCw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04ODkzLDggKzk0MDcsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTAyNCw3ICs5NTM4LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkwMzcsMjIgKzk1NTcsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkwNjQsNyArOTU5MSwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTA3NywyMiArOTYxMCwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkxMzcsMjAgKzk2NzcsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MjExLDcgKzk3OTQsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05MjE5LDcgKzk4MDIsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05MjM1LDcgKzk4MTgsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTI1OSwxMCArOTg0MiwxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTkzNDEsMjMgKzk5MjQsMzYgQEAgZmkKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKyAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorIAkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorLSAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKy0gICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKy0gICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKysJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisrCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKysJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy1pbnQgZm9vKHZvaWQpIHt9CisraW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKy0gIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0KKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworK2Vsc2UKKysgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJZmkKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTk0NDIsNyArMTAwMzgsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC05NDYxLDkgKzEwMDU3LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTEwMDM5LDggKzEwNjM1LDkgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgbmVlZF92ZXJzaW9uPW5vCisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAKKy0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqIHwgeWVzLGNlZ2NjKikKKysgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKysgIHllcywqKQorKyAgICAjIGdjYworICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorQEAgLTEwMDczLDEzICsxMDY3MCw3MSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgIDs7CisgICAgIGVzYWMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKysgICAgOzsKKysKKysgICosY2wqKQorKyAgICAjIE5hdGl2ZSBNU1ZDCisrICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisrICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKysgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisrCisrICAgIGNhc2UgJGJ1aWxkX29zIGluCisrICAgIG1pbmd3KikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisrICAgICAgbHRfc2F2ZV9pZnM9JElGUworKyAgICAgIElGUz0nOycKKysgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisrICAgICAgZG8KKysgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisrICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKysgICAgICBkb25lCisrICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKysgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorKyAgICAgIGVsc2UKKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICBmaQorKyAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQorKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKysgICAgICA7OworKyAgICBlc2FjCisrCisrICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKysgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisrICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisrICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisrICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisrICAgICAgICRSTSBcJGRscGF0aCcKKysgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgIDs7CisgCisgICAqKQorKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgIDs7CisgICBlc2FjCistICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgIDs7CitAQCAtMTAxNzEsNyArMTA4MjYsNyBAQCBoYWlrdSopCisgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKy0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9iZW9zL3N5c3RlbS9saWInCisrICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIDs7CisgCitAQCAtMTEwMTEsMTAgKzExNjY2LDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTExMTcsMTAgKzExNzcyLDEwIEBAIGVsc2UKKyAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLworICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorLXZvaWQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworICNlbmRpZgorIAorLXZvaWQgZm5vcmQgKCkgeyBpbnQgaT00MjsgfQorK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQorIGludCBtYWluICgpCisgeworICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CitAQCAtMTUyNzQsMTMgKzE1OTI5LDIwIEBAIGV4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X1NQMk5MPSdgJEVDSE8gIiRsdF9TUDJOTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9jdl90b190b29sX2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZGVwbGlic19jaGVja19tZXRob2Q9J2AkRUNITyAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyt3YW50X25vY2FzZWdsb2I9J2AkRUNITyAiJHdhbnRfbm9jYXNlZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrRExMVE9PTD0nYCRFQ0hPICIkRExMVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSX0ZMQUdTPSdgJEVDSE8gIiRBUl9GTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgUkFOTElCPSdgJEVDSE8gIiRSQU5MSUIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTUyOTUsMTQgKzE1OTU3LDE3IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIHwgJFNFRCAiJGRlCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK25tX2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRubV9maWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE1BR0lDX0NNRD0nYCRFQ0hPICIkTUFHSUNfQ01EIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbG9ja3M9J2AkRUNITyAiJG5lZWRfbG9ja3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIERTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTk1FRElUPSdgJEVDSE8gIiROTUVESVQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIExJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE1MzM1LDEyICsxNjAwMCwxMiBAQCBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcQorIGhhcmRjb2RlX2F1dG9tYXRpYz0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1maXhfc3JjZmlsZV9wYXRoPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhjbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrcG9zdGxpbmtfY21kcz0nYCRFQ0hPICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJGZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG5lZWRfbGliX3ByZWZpeD0nYCRFQ0hPICIkbmVlZF9saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNTM5NSw4ICsxNjA2MCwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTU0MDYsMTIgKzE2MDc2LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xNTQyNyw3ICsxNjA5OSw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE1NDYzLDYgKzE2MTM0LDcgQEAgbW9kdWxlX2NtZHMgXAorIG1vZHVsZV9leHBzeW1fY21kcyBcCisgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgcHJlbGlua19jbWRzIFwKKytwb3N0bGlua19jbWRzIFwKKyBwb3N0aW5zdGFsbF9jbWRzIFwKKyBwb3N0dW5pbnN0YWxsX2NtZHMgXAorIGZpbmlzaF9jbWRzIFwKK0BAIC0xNjIyNyw3ICsxNjg5OSw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTYzMzAsMTkgKzE3MDAzLDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE2MzcyLDYgKzE3MDY4LDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE2MzgxLDYgKzE3MDgzLDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xNjQ5NSwxMiArMTcyMDAsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTY1ODcsOSArMTcyOTIsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xNjYwNSw2ICsxNzMwNyw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTY2MzcsMjEwICsxNzM0MiwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitkaWZmIC0tZ2l0IGEvZ3Byb2YvY29uZmlndXJlIGIvZ3Byb2YvY29uZmlndXJlCitpbmRleCA3OTk2MWM1Li5jNGY2YWM5IDEwMDc1NQorLS0tIGEvZ3Byb2YvY29uZmlndXJlCisrKysgYi9ncHJvZi9jb25maWd1cmUKK0BAIC02MjksOCArNjI5LDExIEBAIE9UT09MCisgTElQTworIE5NRURJVAorIERTWU1VVElMCisrTUFOSUZFU1RfVE9PTAorIFJBTkxJQgorK2FjX2N0X0FSCisgQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc0MSw2ICs3NDQsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfcGx1Z2lucworIGVuYWJsZV9sYXJnZWZpbGUKK0BAIC0xMzk5LDYgKzE0MDMsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgCisgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKK0BAIC00ODMxLDggKzQ4MzcsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNDg3Miw3ICs0ODc4LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTU1OCw4ICs1NTY0LDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU2MDgsNiArNTYxNCw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTYyNCw2ICs1NzA0LDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC01NzkyLDcgKzU4NzcsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNTg2OSwxMSArNTk1NSw2IEBAIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICA7OworIAorLWxpbnV4LXVjbGliYyopCistICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL2xpYi9saWJ1Q2xpYmMtKi5zb2AKKy0gIDs7CistCisgbmV0YnNkKikKKyAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworQEAgLTU5NTEsNiArNjAzMiwyMSBAQCBlc2FjCisgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyAkYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKysKKytmaWxlX21hZ2ljX2dsb2I9Cisrd2FudF9ub2Nhc2VnbG9iPW5vCisraWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKysgIGNhc2UgJGhvc3Rfb3MgaW4KKysgIG1pbmd3KiB8IHB3MzIqKQorKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworKyAgICBlbHNlCisrICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKysgICAgZmkKKysgICAgOzsKKysgIGVzYWMKKytmaQorKworIGZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAorIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorQEAgLTU5NjYsOSArNjA2MiwxNjIgQEAgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisgCisgCisgCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK0RMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyskYXNfZWNobyAiJERMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKworK2ZpCisraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSJkbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKythY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisrICAgIERMTFRPT0w9ImZhbHNlIgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorKyAgZmkKKytlbHNlCisrICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorK2ZpCisrCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorKworKworKworKworKworKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKysKKytjYXNlICRob3N0X29zIGluCisrY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorKyAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisrICAqLS1pZGVudGlmeS1zdHJpY3QqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKysgICAgOzsKKysgICopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworKyAgICA7OworKyAgZXNhYworKyAgOzsKKysqKQorKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisrICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisrICA7OworK2VzYWMKKysKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorKyAgZG8KKysgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTk4NCw3ICs2MjMzLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjAwNCwxMSArNjI1MywxNSBAQCAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisgCisrICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKysgIGRvbmUKKyBmaQorLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgorK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgIGFjX2N0X0FSPSRBUgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCistc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCisrICBmb3IgYWNfcHJvZyBpbiBhcgorK2RvCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MDI0LDcgKzYyNzcsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgIGJyZWFrIDIKKyAgIGZpCitAQCAtNjA0Myw2ICs2Mjk2LDEwIEBAIGVsc2UKKyAkYXNfZWNobyAibm8iID4mNjsgfQorIGZpCisgCisrCisrICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCisrZG9uZQorKworICAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgIEFSPSJmYWxzZSIKKyAgIGVsc2UKK0BAIC02MDU0LDEyICs2MzExLDEwIEBAIGFjX3Rvb2xfd2FybmVkPXllcyA7OworIGVzYWMKKyAgICAgQVI9JGFjX2N0X0FSCisgICBmaQorLWVsc2UKKy0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKKyBmaQorIAorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorKzogJHtBUj1hcn0KKys6ICR7QVJfRkxBR1M9Y3J1fQorIAorIAorIAorQEAgLTYwNzEsNiArNjMyNiw2NCBAQCB0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorIAorIAorIAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9hcl9hdF9maWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworKyAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisraW50CisrbWFpbiAoKQorK3sKKysKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisrICBlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKysgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKysgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorKwlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKKysJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisrICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorKworK2ZpCisrcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisrCisraWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorK2Vsc2UKKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQorK2ZpCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKyBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgorQEAgLTY0MDUsOCArNjcxOCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXClbIF0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtNjQ0Miw2ICs2NzU1LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTY0ODMsNiArNjc5NywxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKysvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorKyNlbHNlCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC02NDk0LDcgKzY4MjAsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICB2b2lkICAgICAgICphZGRyZXNzOworIH0KK0BAIC02NTIwLDggKzY4NDYsOCBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKyAJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKK0BAIC02NTMxLDggKzY4NTcsOCBAQCBfTFRfRU9GCisgICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAJICAgIHBpcGVfd29ya3M9eWVzCisgCSAgZmkKKy0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorLQkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisrCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisgCWVsc2UKKyAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKyAJZmkKK0BAIC02NTY5LDYgKzY4OTUsMTggQEAgZWxzZQorICRhc19lY2hvICJvayIgPiY2OyB9CisgZmkKKyAKKysjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KKytpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCisrZmkKKysKKysKKysKKysKKysKKysKKyAKKyAKKyAKK0BAIC02NTkwLDYgKzY5MjgsNDMgQEAgZmkKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3lzcm9vdC4uLiAiID4mNjsgfQorKworKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlidG9vbC1zeXNyb290IHdhcyBnaXZlbi4KKytpZiB0ZXN0ICIke3dpdGhfbGlidG9vbF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKKysgIHdpdGh2YWw9JHdpdGhfbGlidG9vbF9zeXNyb290OworK2Vsc2UKKysgIHdpdGhfbGlidG9vbF9zeXNyb290PW5vCisrZmkKKysKKysKKytsdF9zeXNyb290PQorK2Nhc2UgJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0gaW4gIygKKysgeWVzKQorKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisrICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgIGZpCisrICAgOzsgIygKKysgLyopCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgOzsgIygKKysgbm98JycpCisrICAgOzsgIygKKysgKikKKysgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNQorKyRhc19lY2hvICIke3dpdGhfbGlidG9vbF9zeXNyb290fSIgPiY2OyB9CisrICAgYXNfZm5fZXJyb3IgIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisrICAgOzsKKytlc2FjCisrCisrIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke2x0X3N5c3Jvb3Q6LW5vfSIgPiY1CisrJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KKysKKysKKysKKysKKysKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOworQEAgLTY3OTYsNiArNzE3MSwxMjMgQEAgZXNhYworIAorIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIAorK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1tdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytNQU5JRkVTVF9UT09MPSRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wKKytpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRNQU5JRkVTVF9UT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdF9NQU5JRkVTVF9UT09MPSRNQU5JRkVTVF9UT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKysgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0iJGFjX2N0X01BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSJtdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorKyAgICBNQU5JRkVTVF9UT09MPSI6IgorKyAgZWxzZQorKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCisreWVzOikKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorK2FjX3Rvb2xfd2FybmVkPXllcyA7OworK2VzYWMKKysgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorKyAgZmkKKytlbHNlCisrICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorK2ZpCisrCisrdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKysgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisrICAgIGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD15ZXMKKysgIGZpCisrICBybSAtZiBjb25mdGVzdCoKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrCisrCisrCisrCisrCisgCisgICBjYXNlICRob3N0X29zIGluCisgICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCitAQCAtNzM1OSw2ICs3ODUxLDggQEAgX0xUX0VPRgorICAgICAgICRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMgMj4mNQorICAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisrICAgICAgZWNobyAiJFJBTkxJQiBsaWJjb25mdGVzdC5hIiA+JjUKKysgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTc1NTQsNyArODA0OCw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC03NjQzLDcgKzgxMzgsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTc5NDEsOCArODQzNiw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODEwOCw2ICs4NjAxLDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODE3MCw3ICs4NjY5LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTgyMjcsMTMgKzg3MjYsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtODI5NCw2ICs4Nzk3LDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtODY0NCw3ICs5MTUyLDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtODY5Miw3ICs5MjAxLDcgQEAgX0xUX0VPRgorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKyAJICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworICAgICAgIHRoZW4KKy0JdG1wX2FkZGZsYWc9CisrCXRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKyAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCitAQCAtODc0MywxMiArOTI1MiwxMiBAQCBfTFRfRU9GCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKy0JICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKysJICBhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKy0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisrCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAJICBmaQorIAkgIDs7CisgCWVzYWMKK0BAIC04NzYyLDggKzkyNzEsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtODc4MSw4ICs5MjkwLDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTg4MjgsOCArOTMzNyw4IEBAIF9MVF9FT0YKKyAKKyAgICAgKikKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC04OTU5LDcgKzk0NjgsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtODk3MiwyMiArOTQ4NywyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCitAQCAtODk5OSw3ICs5NTIxLDEzIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAllbHNlCisgCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAJICMgZW1wdHkgZXhlY3V0YWJsZS4KKy0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysJIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorK2Vsc2UKKysgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGhfK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC05MDEyLDIyICs5NTQwLDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTA3MiwyMCArOTYwNyw2MyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorKyAgICAgIGNsKikKKysJIyBOYXRpdmUgTVNWQworKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwlhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisrCWZpbGVfbGlzdF9zcGVjPSdAJworKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorKwkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBlbHNlCisrCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGZpfgorKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKysJICBsaW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwlleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSxEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrCSMgRG9uJ3QgdXNlIHJhbmxpYgorKwlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCisrCXBvc3RsaW5rX2NtZHM9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKysJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKysJb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTkxNDYsNyArOTcyNCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTkxNTQsNyArOTczMiw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4OSopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBmaQorQEAgLTkxNzAsNyArOTc0OCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICBocHV4MTAqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgZWxzZQorIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICAgZmkKK0BAIC05MTk0LDEwICs5NzcyLDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJaWE2NCopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWVzYWMKKyAgICAgICBlbHNlCitAQCAtOTI3NiwyMyArOTg1NCwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTM3Nyw3ICs5OTY4LDcgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCitAQCAtOTM5Niw5ICs5OTg3LDkgQEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTk5NzQsOCArMTA1NjUsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAwMDgsMTMgKzEwNjAwLDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDEwNiw3ICsxMDc1Niw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMDk0NiwxMCArMTE1OTYsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTA1MiwxMCArMTE3MDIsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMjkyNCwxMyArMTM1NzQsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMjk0NSwxNCArMTM2MDIsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTI5ODUsMTIgKzEzNjQ1LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzMDQ1LDggKzEzNzA1LDEzIEBAIHJlbG9hZF9mbGFnIFwKKyBPQkpEVU1QIFwKKyBkZXBsaWJzX2NoZWNrX21ldGhvZCBcCisgZmlsZV9tYWdpY19jbWQgXAorK2ZpbGVfbWFnaWNfZ2xvYiBcCisrd2FudF9ub2Nhc2VnbG9iIFwKKytETExUT09MIFwKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCBcCisgQVIgXAorIEFSX0ZMQUdTIFwKKythcmNoaXZlcl9saXN0X3NwZWMgXAorIFNUUklQIFwKKyBSQU5MSUIgXAorIENDIFwKK0BAIC0xMzA1NiwxMiArMTM3MjEsMTQgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKKytubV9maWxlX2xpc3Rfc3BlYyBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAorLWx0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfcGljIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyBcCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorIG5lZWRfbG9ja3MgXAorK01BTklGRVNUX1RPT0wgXAorIERTWU1VVElMIFwKKyBOTUVESVQgXAorIExJUE8gXAorQEAgLTEzMDc3LDcgKzEzNzQ0LDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWcgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgXAorIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorLWZpeF9zcmNmaWxlX3BhdGggXAorIGV4Y2x1ZGVfZXhwc3ltcyBcCisgaW5jbHVkZV9leHBzeW1zIFwKKyBmaWxlX2xpc3Rfc3BlYyBcCitAQCAtMTMxMTMsNiArMTM3NzksNyBAQCBtb2R1bGVfY21kcyBcCisgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzIFwKKyBwcmVsaW5rX2NtZHMgXAorK3Bvc3RsaW5rX2NtZHMgXAorIHBvc3RpbnN0YWxsX2NtZHMgXAorIHBvc3R1bmluc3RhbGxfY21kcyBcCisgZmluaXNoX2NtZHMgXAorQEAgLTEzODY5LDcgKzE0NTM2LDggQEAgJGFzX2VjaG8gWCIkZmlsZSIgfAorICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0xMzk3MiwxOSArMTQ2NDAsNDIgQEAgU1AyTkw9JGx0X2x0X1NQMk5MCisgIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorIE5MMlNQPSRsdF9sdF9OTDJTUAorIAorKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KKyt0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisrCisgIyBBbiBvYmplY3Qgc3ltYm9sIGR1bXBlci4KKyBPQkpEVU1QPSRsdF9PQkpEVU1QCisgCisgIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKyAKKy0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiLgorKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyBmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKyAKKysjIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisrCisrIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrd2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKysKKysjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorK0RMTFRPT0w9JGx0X0RMTFRPT0wKKysKKysjIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrCisgIyBUaGUgYXJjaGl2ZXIuCisgQVI9JGx0X0FSCisrCisrIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KKyBBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKyAKKysjIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KKythcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworKworICMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCisgU1RSSVA9JGx0X1NUUklQCisgCitAQCAtMTQwMTQsNiArMTQ3MDUsMTIgQEAgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKyAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorIAorKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgorK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworKworKyMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisrbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorKworICMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorIG9iamRpcj0kb2JqZGlyCisgCitAQCAtMTQwMjMsNiArMTQ3MjAsOSBAQCBNQUdJQ19DTUQ9JE1BR0lDX0NNRAorICMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CisgbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworIAorKyMgTWFuaWZlc3QgdG9vbC4KKytNQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCisrCisgIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorIERTWU1VVElMPSRsdF9EU1lNVVRJTAorIAorQEAgLTE0MTM3LDEyICsxNDgzNywxMiBAQCB3aXRoX2djYz0kR0NDCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKKyAKKy0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCistd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKy0KKyAjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KKyBwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKKysKKyAjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCisgbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKyAKK0BAIC0xNDIyOSw5ICsxNDkyOSw2IEBAIGluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCisgCistIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKKy0KKyAjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KKyBhbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworIAorQEAgLTE0MjQ3LDYgKzE0OTQ0LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKyAjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorIHByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisgCisrIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKyAKK0BAIC0xNDI3OSwyMTAgKzE0OTc5LDE2OSBAQCBsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIGNhc2UgJHhzaV9zaGVsbCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCistIyBjYWxsOgorLSMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCistIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CistIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCistIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCistIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCistIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bworLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKy0gICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworLSAgZXNhYworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCistICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9CistfQorLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorLSAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CistICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworLSAgZXNhYworLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKy0jIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy1mdW5jX2Rpcm5hbWUgKCkKKy17CistICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorLSAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorLSAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKy0gIGVsc2UKKy0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorLSAgZmkKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRiYXNlbmFtZSJgCistfQorLQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCistZnVuY19zdHJpcG5hbWUgKCkKKy17CistICBjYXNlICR7Mn0gaW4KKy0gICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKy0gICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworLSAgZXNhYworLX0KKy0KKy0jIHNlZCBzY3JpcHRzOgorLW15X3NlZF9sb25nX29wdD0nMXMvXlwoLVtePV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtePV0qPS8vJworLQorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorLX0KKy0KKy1fTFRfRU9GCistZXNhYworLQorLWNhc2UgJGx0X3NoZWxsX2FwcGVuZCBpbgorLSAgeWVzKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMSs9XCQyIgorLX0KKy1fTFRfRU9GCistICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkMT1cJCQxXCQyIgorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICBlc2FjCistCistCistICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisrICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisrICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorKworKyAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZSAvY1wKKytmdW5jX2Rpcm5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKKytmdW5jX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCisrZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKKytmdW5jX3N0cmlwbmFtZSAoKVwKKyt7XAorK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKKytcICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3RyaXBuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9sb25nX29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgL2NcCisrZnVuY19zcGxpdF9sb25nX29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9XAorK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCisrZnVuY19sbzJvICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAorK1wgICAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOztcCisrXCAgICBlc2FjXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKKytmdW5jX3hmb3JtICgpXAorK3tcCisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfeGZvcm0gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FyaXRoICgpJC8sL159ICMgZnVuY19hcml0aCAvY1wKKytmdW5jX2FyaXRoICgpXAorK3tcCisrICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCisrZnVuY19sZW4gKClcCisre1wKKysgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworK2ZpCisrCisraWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCisrZnVuY19hcHBlbmQgKClcCisre1wKKysgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCisrZnVuY19hcHBlbmRfcXVvdGVkICgpXAorK3tcCisrXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKKytcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytlbHNlCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQorKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKysKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQorK2ZpCisrCisrCisrICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICAgY2htb2QgK3ggIiRvZmlsZSIKKyAKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUgYi9sZC9jb25maWd1cmUKK2luZGV4IDQ0MDhiMGQuLjJmYmFlYmYgMTAwNzU1CistLS0gYS9sZC9jb25maWd1cmUKKysrKyBiL2xkL2NvbmZpZ3VyZQorQEAgLTY1NCw4ICs2NTQsMTEgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisgUkFOTElCCisrYWNfY3RfQVIKKyBBUgorK0RMTFRPT0wKKyBPQkpEVU1QCisgTE5fUworIE5NCitAQCAtNzc2LDYgKzc3OSw3IEBAIGVuYWJsZV9zdGF0aWMKKyB3aXRoX3BpYworIGVuYWJsZV9mYXN0X2luc3RhbGwKKyB3aXRoX2dudV9sZAorK3dpdGhfbGlidG9vbF9zeXNyb290CisgZW5hYmxlX2xpYnRvb2xfbG9jaworIGVuYWJsZV9wbHVnaW5zCisgZW5hYmxlX2xhcmdlZmlsZQorQEAgLTE0NTMsNiArMTQ1Nyw4IEBAIE9wdGlvbmFsIFBhY2thZ2VzOgorICAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorKyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIKKysgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgIC0td2l0aC1saWItcGF0aD1kaXIxOmRpcjIuLi4gIHNldCBkZWZhdWx0IExJQl9QQVRICisgICAtLXdpdGgtc3lzcm9vdD1ESVIgU2VhcmNoIGZvciB1c3IvbGliIGV0IGFsIHdpdGhpbiBESVIuCisgICAtLXdpdGgtemxpYiAgICAgICAgICAgICBpbmNsdWRlIHpsaWIgc3VwcG9ydCAoYXV0by95ZXMvbm8pIGRlZmF1bHQ9YXV0bworQEAgLTU2NDUsOCArNTY1MSw4IEBAIGVzYWMKKyAKKyAKKyAKKy1tYWNyb192ZXJzaW9uPScyLjIuN2EnCistbWFjcm9fcmV2aXNpb249JzEuMzEzNCcKKyttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyAKKyAKKyAKK0BAIC01Njg2LDcgKzU2OTIsNyBAQCBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzLi4uICIgPiY2OyB9CisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC02MzcyLDggKzYzNzgsOCBAQCAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OworICMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCisgeHNpX3NoZWxsPW5vCisgKCBfbHRfZHVtbXk9ImEvYi9jIgorLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKy0gICAgICA9IGMsYS9iLCwgXAorKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKysgICAgICA9IGMsYS9iLGIvYywgXAorICAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCisgICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICAmJiB4c2lfc2hlbGw9eWVzCitAQCAtNjQyMiw2ICs2NDI4LDgwIEBAIGVzYWMKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrCisrZmkKKysKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorKworKworKworKworKworK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KKytsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKytjYXNlICRob3N0IGluCisrICAqLSotbWluZ3cqICkKKysgICAgY2FzZSAkYnVpbGQgaW4KKysgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisrICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02NDM4LDYgKzY1MTgsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTY2MDYsNyArNjY5MSw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC02NzYwLDYgKzY4NDYsMjEgQEAgZXNhYworIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CisgJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1wxXVwvW1wxXVwvZzsvZyJgCisrICAgIGZpCisrICAgIDs7CisrICBlc2FjCisrZmkKKysKKyBmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKKyB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KK0BAIC02Nzc1LDkgKzY4NzYsMTYyIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIAorIAorIAorKworKworKworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX0RMTFRPT0w9IiRETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfRExMVE9PTD0iJHthY190b29sX3ByZWZpeH1kbGx0b29sIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworK2ZpCisrZmkKKytETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKKytpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRExMVE9PTCIgPiY1CisrJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKytmaQorK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCisrICBhY19jdF9ETExUT09MPSRETExUT09MCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9ETExUT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCisraWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorKyAgICBETExUT09MPSJmYWxzZSIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKysgIGZpCisrZWxzZQorKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisrCisrY2FzZSAkaG9zdF9vcyBpbgorK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKKysgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKysgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisrICAgIDs7CisrICAqKQorKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKysgICAgOzsKKysgIGVzYWMKKysgIDs7CisrKikKKysgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorKyAgOzsKKytlc2FjCisrCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKyt0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisrCisrCisrCisrCisrCisrCisrCisgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKysgIGRvCisrICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTY3OTMsNyArNzA0Nyw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKysgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY4MTMsMTEgKzcwNjcsMTUgQEAgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorIAorKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisrICBkb25lCisgZmkKKy1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKytpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgICBhY19jdF9BUj0kQVIKKy0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSBhcjsgYWNfd29yZD0kMgorKyAgZm9yIGFjX3Byb2cgaW4gYXIKKytkbworKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNjgzMyw3ICs3MDkxLDcgQEAgZG8KKyAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSJhciIKKysgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICBicmVhayAyCisgICBmaQorQEAgLTY4NTIsNiArNzExMCwxMCBAQCBlbHNlCisgJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyBmaQorIAorKworKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworK2RvbmUKKysKKyAgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgICBBUj0iZmFsc2UiCisgICBlbHNlCitAQCAtNjg2MywxMiArNzEyNSwxMiBAQCBhY190b29sX3dhcm5lZD15ZXMgOzsKKyBlc2FjCisgICAgIEFSPSRhY19jdF9BUgorICAgZmkKKy1lbHNlCistICBBUj0iJGFjX2N2X3Byb2dfQVIiCisgZmkKKyAKKy10ZXN0IC16ICIkQVIiICYmIEFSPWFyCistdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKysKKysKKyAKKyAKKyAKK0BAIC02ODc4LDYgKzcxNDAsNjIgQEAgdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKKyAKKyAKKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfYXJfYXRfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X2FyX2F0X2ZpbGU9bm8KKysgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworK2ludAorK21haW4gKCkKKyt7CisrCisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisrICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisrICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKysJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KKysJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisrCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKwlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgorKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKysgICAgICAgIGZpCisrICAgICAgZmkKKysgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKysKKytmaQorK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2FyX2F0X2ZpbGUiID4mNjsgfQorKworK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKysgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KKytlbHNlCisrICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKKytmaQorKworKworKworKworKworIAorIAorIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KK0BAIC03MjE0LDggKzc1MzIsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTcyNTEsNiArNzU2OSw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC03MjkyLDYgKzc2MTEsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNzMwMyw3ICs3NjM0LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNzMyOSw4ICs3NjYwLDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNzM0MCw4ICs3NjcxLDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNzM3OCw2ICs3NzA5LDE5IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisrCisrCisrCisgCisgCisgCitAQCAtNzM5OCw2ICs3NzQyLDQyIEBAIGZpCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisgCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC03NjA1LDYgKzc5ODUsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTgxNjgsNiArODY2NSw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC04MjM2LDYgKzg3MzUsMTYgQEAgZG9uZQorIAorIAorIAorK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQorK3sKKysgIGNhc2UgJHsyfSBpbgorKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKysgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKysgIGVzYWMKKyt9ICMgZnVuY19zdHJpcG5hbWVfY25mCisrCisrCisrCisgCisgCisgIyBTZXQgb3B0aW9ucworQEAgLTgzNjQsNyArODg3Myw4IEBAIGZpCisgTElCVE9PTF9ERVBTPSIkbHRtYWluIgorIAorICMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCistTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisrTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpJworK0xJQlRPT0w9IiRMSUJUT09MLyR7aG9zdF9hbGlhc30tbGlidG9vbCIKKyAKKyAKKyAKK0BAIC04NDUzLDcgKzg5NjMsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTg3NTEsOCArOTI2MSw2IEBAIGZpCisgbHRfcHJvZ19jb21waWxlcl9waWM9CisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCitAQCAtODkxOCw2ICs5NDI2LDEyIEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKyAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKysJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtODk4MCw3ICs5NDk0LDcgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OworQEAgLTkwMzcsMTMgKzk1NTEsMTcgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgorICAgICA7OworIGVzYWMKKy17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKy0kYXNfZWNobyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKy0KKy0KKy0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfcHJvZ19jb21waWxlcl9waWMKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorK2x0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYworIAorICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCitAQCAtOTEwNCw2ICs5NjIyLDExIEBAIGZpCisgCisgCisgCisrCisrCisrCisrCisrCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyAjCitAQCAtOTQ1NCw3ICs5OTc3LDggQEAgX0xUX0VPRgorICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKy0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCitAQCAtOTUwMiw3ICsxMDAyNiw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTk1NTMsMTIgKzEwMDc3LDEyIEBAIF9MVF9FT0YKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworLQkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKyAJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorIAkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKysJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworIAkgIGZpCisgCSAgOzsKKyAJZXNhYworQEAgLTk1NzIsOCArMTAwOTYsOCBAQCBfTFRfRU9GCisgCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKyAJd2xhcmM9CisgICAgICAgZWxzZQorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtOTU5MSw4ICsxMDExNSw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05NjM4LDggKzEwMTYyLDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZWxzZQorIAlsZF9zaGxpYnM9bm8KKyAgICAgICBmaQorQEAgLTk3NjksNyArMTAyOTMsMTMgQEAgX0xUX0VPRgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTc4MiwyMiArMTAzMTIsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTk4MDksNyArMTAzNDYsMTMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTk4MjIsMjIgKzEwMzY1LDI5IEBAIG1haW4gKCkKKyBfQUNFT0YKKyBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworK2ZpCisgCisgCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtOTg4MSwyMSArMTA0MzEsNjQgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKy0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCistICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorLSAgICAgIGxpYmV4dD1saWIKKy0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKy0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKKy0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCistICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKy0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCistICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgICAgY2wqKQorKwkjIE5hdGl2ZSBNU1ZDCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKysJZmlsZV9saXN0X3NwZWM9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgIGVsc2UKKysJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZml+CisrCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgIGxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICk9J3RydWUnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysJIyBEb24ndCB1c2UgcmFubGliCisrCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorKwkgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAqKQorKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCisrCSAgICAgIDs7CisrCSAgZXNhY34KKysJICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorKwkgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgIGZpJworKwk7OworKyAgICAgICopCisrCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgorKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorKwlvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrCTs7CisrICAgICAgZXNhYworICAgICAgIDs7CisgCisgICAgIGRhcndpbiogfCByaGFwc29keSopCitAQCAtOTk1Niw3ICsxMDU0OSw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAorICAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKy0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworQEAgLTk5NjQsNyArMTA1NTcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05OTgwLDcgKzEwNTczLDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTEwMDA0LDEwICsxMDU5NywxMCBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJKikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAllc2FjCisgICAgICAgZWxzZQorQEAgLTEwMDg2LDIzICsxMDY3OSwzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtMTAxODcsNyArMTA3OTMsNyBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgZWxzZQorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKK0BAIC0xMDIwNiw5ICsxMDgxMiw5IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAl3bGFyYz0nJHt3bH0nCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCSAgJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICBlbHNlCisgCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorIAkqIkNvbXBpbGVycyA1LjAiKikKK0BAIC0xMDc4NCw4ICsxMTM5MCw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xMDgxOCwxMyArMTE0MjUsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTEwOTE2LDcgKzExNTgxLDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTExNzEyLDcgKzEyMzc3LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTE3MTUgImNvbmZpZ3VyZSIKKysjbGluZSAkTElORU5PICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTExNzU2LDEwICsxMjQyMSwxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTExODE4LDcgKzEyNDgzLDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTE4MjEgImNvbmZpZ3VyZSIKKysjbGluZSAkTElORU5PICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTExODYyLDEwICsxMjUyNywxMCBAQCBlbHNlCisgLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAorICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKy12b2lkIGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyAjZW5kaWYKKyAKKy12b2lkIGZub3JkICgpIHsgaW50IGk9NDI7IH0KKytpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KKyBpbnQgbWFpbiAoKQorIHsKKyAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworQEAgLTEyMjU3LDYgKzEyOTIyLDcgQEAgJFJNIC1yIGNvbmZ0ZXN0KgorIAorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9JENDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBsdF9zYXZlX0xEPSRMRAorICAgbHRfc2F2ZV9HQ0M9JEdDQworICAgR0NDPSRHWFgKK0BAIC0xMjI3NCw2ICsxMjk0MCw3IEBAICRSTSAtciBjb25mdGVzdCoKKyAgIGZpCisgICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICAgQ0M9JHtDWFgtImMrKyJ9CisrICBDRkxBR1M9JENYWEZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIGNvbXBpbGVyX0NYWD0kQ0MKKyAgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworQEAgLTEyNDEzLDggKzEzMDgwLDggQEAgd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisgICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCitAQCAtMTI1NTYsNyArMTMyMjMsMTMgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWUKKyAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVyb2snCisgICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICAjIGV4ZWN1dGFibGUuCistICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKysgICAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyAKKyBpbnQKK0BAIC0xMjU2OSwyMiArMTMyNDIsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKysgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysKKytmaQorKworKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKKytmaQorIAorICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAKK0BAIC0xMjU5Nyw3ICsxMzI3NywxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgICAgZWxzZQorIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTEyNjEwLDIyICsxMzI5NiwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY3h4X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpCisrICBsdF9haXhfbGlicGF0aF9zZWQ9JworKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKysJICAvXjAvIHsKKysJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKysJICAgICAgcAorKwkgIH0KKysgICAgICB9JworKyAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorKyAgZmkKKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorK2ZpCisgCisgCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCitAQCAtMTI2NjgsMjkgKzEzMzYxLDc1IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorICAgICAgICAgOzsKKyAKKyAgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCistICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKy0gICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCistICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworLSAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKy0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorLSAgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubworLSAgICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCistCistICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCistICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKy0gICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorLSAgICAgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKy0JICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0gICAgICAgICAgZWxzZQorLQkgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBmaX4KKy0gICAgICAgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgZWxzZQorLSAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCistICAgICAgICBmaQorLSAgICAgICAgOzsKKysJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorKwksY2wqIHwgbm8sY2wqKQorKwkgICMgTmF0aXZlIE1TVkMKKysJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisrCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nICcKKysJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKysJICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcworKwkgIGZpbGVfbGlzdF9zcGVjX0NYWD0nQCcKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwkgIGxpYmV4dD1saWIKKysJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJICBzaHJleHRfY21kcz0iLmRsbCIKKysJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCisrCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisrCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZWxzZQorKwkgICAgICAkU0VEIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICAgIGZpfgorKwkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorKwkgICAgbGlua25hbWVzPScKKysJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisrCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsIENYWCk9J3RydWUnCisrCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisrCSAgIyBEb24ndCB1c2UgcmFubGliCisrCSAgb2xkX3Bvc3RpbnN0YWxsX2NtZHNfQ1hYPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJICBwb3N0bGlua19jbWRzX0NYWD0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorKwkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICAgKi5leGV8Ki5FWEUpIDs7CisrCSAgICAgICopCisrCQlsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisrCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkJOzsKKysJICAgIGVzYWN+CisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorKwkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKysJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgICBmaScKKysJICA7OworKwkqKQorKwkgICMgZysrCisrCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisrCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisrCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisrCSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubworKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworKworKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKysJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKysJICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisrCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZWxzZQorKwkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGZpfgorKwkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgIGVsc2UKKysJICAgIGxkX3NobGlic19DWFg9bm8KKysJICBmaQorKwkgIDs7CisrCWVzYWMKKysJOzsKKyAgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorIAorIAorQEAgLTEyNzk2LDcgKzEzNTM1LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgKikKKyAgICAgICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorLSAgICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrICAgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCitAQCAtMTI4NjcsMTAgKzEzNjA2LDEwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICBpYTY0KikKKy0JICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworKwkgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgICAgKikKKy0JICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICBlc2FjCisgCSAgICAgIGZpCitAQCAtMTI5MTEsOSArMTM2NTAsOSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAgICAgICAgICAgKikKKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorLQkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkgICAgICBlbHNlCistCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAtbyAkbGliJworKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisgCSAgICAgIGZpCisgCSAgICBmaQorIAkgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCitAQCAtMTI5ODMsMjAgKzEzNzIyLDIwIEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgICBwcmVsaW5rX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CistCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCInCisrCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJworIAkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKy0JCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGB+CisrCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAJCSRSQU5MSUIgJG9sZGxpYicKKyAJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAJCXJtIC1yZiAkdHBsZGlyfgorIAkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CistCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisgCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgCSAgICAgIDs7CisgCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworIAkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKK0BAIC0xMzE5MSw3ICsxMzkzMCw3IEBAIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorIAkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICAgICopCistCSAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJCSAgOzsKKyAJICAgICAgZXNhYworIAorQEAgLTEzMjM3LDcgKzEzOTc2LDcgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCisgICAgICAgc29sYXJpcyopCisgICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgICAgICBDQyopCisrICAgICAgICAgIENDKiB8IHN1bkNDKikKKyAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisgCSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCitAQCAtMTMyNzgsOSArMTQwMTcsOSBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorIAkgICAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKKyAJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKy0JICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworIAkgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CistCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKysJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAKKyAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCitAQCAtMTM0MTUsNiArMTQxNTQsMTMgQEAgcHJpdmF0ZToKKyB9OworIF9MVF9FT0YKKyAKKysKKytfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCisrY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKytlc2FjCisrCisgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTM0MjgsNyArMTQxNzQsNyBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KKyAKKyAgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKy0gICAgY2FzZSAkcCBpbgorKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisgCisgICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KK0BAIC0xMzQzNywxMyArMTQxODMsMjIgQEAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisgCSBwcmV2PSRwCisgCSBjb250aW51ZQorLSAgICAgICBlbHNlCistCSBwcmV2PQorICAgICAgICBmaQorIAorKyAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgorKyAgICAgICBpZiB0ZXN0IC16ICIkcHJldiI7IHRoZW4KKysgICAgICAgICBjYXNlICRwIGluCisrICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtUiopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLVInICcnICIkcCI7IHByZXY9LVI7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgZXNhYworKyAgICAgICBmaQorKyAgICAgICBjYXNlICRwIGluCisrICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKy0JIGNhc2UgJHAgaW4KKy0JIC1MKiB8IC1SKikKKysJIGNhc2UgJHtwcmV2fSBpbgorKwkgLUwgfCAtUikKKyAJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisgCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KK0BAIC0xMzQ2Myw4ICsxNDIxOCwxMCBAQCBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCisgCSBmaQorICAgICAgICBmaQorKyAgICAgICBwcmV2PQorICAgICAgICA7OworIAorKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAgKi4kb2JqZXh0KQorICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKKyAgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCitAQCAtMTM1MDAsNiArMTQyNTcsNyBAQCBlbHNlCisgZmkKKyAKKyAkUk0gLWYgY29uZmVzdC4kb2JqZXh0CisrQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworIAorICMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCisgY2FzZSAkaG9zdF9vcyBpbgorQEAgLTEzNTM1LDcgKzE0MjkzLDcgQEAgbGludXgqKQorIAorIHNvbGFyaXMqKQorICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gIENDKikKKysgIENDKiB8IHN1bkNDKikKKyAgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCitAQCAtMTM2MDAsOCArMTQzNTgsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CisgCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CistJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAKKyAgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCitAQCAtMTM3MDYsNiArMTQ0NjIsMTEgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKyAJICA7OworIAllc2FjCisgCTs7CisrICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKysJIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKKysJOzsKKyAgICAgICBkZ3V4KikKKyAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAJICBlYysrKikKK0BAIC0xMzg1OCw3ICsxNDYxOSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCTs7CisgICAgICAgc29sYXJpcyopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCistCSAgQ0MqKQorKwkgIENDKiB8IHN1bkNDKikKKyAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisgCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworQEAgLTEzOTIzLDEwICsxNDY4NCwxNyBAQCBjYXNlICRob3N0X29zIGluCisgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorLSRhc19lY2hvICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KKy0KKyAKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CisrbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTEzOTg0LDYgKzE0NzUyLDggQEAgZmkKKyAKKyAKKyAKKysKKysKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC0xNDE2MSw2ICsxNDkzMSw3IEBAIGZpCisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgCisgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJworICAgY2FzZSAkaG9zdF9vcyBpbgorICAgYWl4WzQtOV0qKQorICAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KK0BAIC0xNDE3NSwxNSArMTQ5NDYsMjAgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWUKKyAgICAgOzsKKyAgIHB3MzIqKQorICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0iJGx0ZGxsX2NtZHMiCistICA7OworKyAgICA7OworICAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKy0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvOy9eLipbIF1fX25tX18vcy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgY2wqKSA7OworKyAgICAqKQorKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJworKyAgICAgIDs7CisrICAgIGVzYWMKKysgICAgOzsKKyAgICopCisgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCistICA7OworKyAgICA7OworICAgZXNhYworLSAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJworIAorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CisgJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KK0BAIC0xNDQ0Niw4ICsxNTIyMiw5IEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIG5lZWRfdmVyc2lvbj1ubworICAgbmVlZF9saWJfcHJlZml4PW5vCisgCistICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKy0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKiB8IHllcyxjZWdjYyopCisrICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisrICB5ZXMsKikKKysgICAgIyBnY2MKKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KK0BAIC0xNDQ3OSwxMyArMTUyNTYsNzEgQEAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgICA7OworICAgICBlc2FjCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisrICAgIDs7CisrCisrICAqLGNsKikKKysgICAgIyBOYXRpdmUgTVNWQworKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKysgICAgICA7OworKyAgICBjeWd3aW4qKQorKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKysgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKysgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgOzsKKysgICAgKikKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisrICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKysgICAgICBlbHNlCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisrICAgICAgZmkKKysgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKysgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisrICAgICAgOzsKKysgICAgZXNhYworKworKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisrICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKysgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKysgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorKyAgICAgICAkUk0gXCRkbHBhdGgnCisrICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgICA7OworIAorICAgKikKKysgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTE0NTc2LDcgKzE1NDExLDcgQEAgaGFpa3UqKQorICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3QvYmVvcy9zeXN0ZW0vbGliJworKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICA7OworIAorQEAgLTE1MDM1LDYgKzE1ODcwLDcgQEAgZmkKKyAgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorIAorICAgQ0M9JGx0X3NhdmVfQ0MKKysgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgIExEQ1hYPSRMRAorICAgTEQ9JGx0X3NhdmVfTEQKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKK0BAIC0xNzgwNywxMyArMTg2NDMsMjAgQEAgZXhlZXh0PSdgJEVDSE8gIiRleGVleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9OTDJTUD0nYCRFQ0hPICIkbHRfTkwyU1AiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHJlbG9hZF9mbGFnPSdgJEVDSE8gIiRyZWxvYWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBPQkpEVU1QPSdgJEVDSE8gIiRPQkpEVU1QIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbWFnaWNfY21kPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytETExUT09MPSdgJEVDSE8gIiRETExUT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0nYCRFQ0hPICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIEFSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKythcmNoaXZlcl9saXN0X3NwZWM9J2AkRUNITyAiJGFyY2hpdmVyX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJG9sZF9wb3N0aW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzgyOCwxNCArMTg2NzEsMTcgQEAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGUKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9zeXNyb290PSdgJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistbHRfcHJvZ19jb21waWxlcl93bD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrTUFOSUZFU1RfVE9PTD0nYCRFQ0hPICIkTUFOSUZFU1RfVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgTElQTz0nYCRFQ0hPICIkTElQTyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc4NjgsMTIgKzE4NzE0LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXI9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xCisgaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIiRoYXJkY29kZV9hdXRvbWF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGluaGVyaXRfcnBhdGg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiJGZpeF9zcmNmaWxlX3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGFsd2F5c19leHBvcnRfc3ltYm9scz0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleHBvcnRfc3ltYm9sc19jbWRzPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5jbHVkZV9leHBzeW1zPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHByZWxpbmtfY21kcz0nYCRFQ0hPICIkcHJlbGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSdgJEVDSE8gIiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTE3OTEyLDggKzE4NzU4LDggQEAgb2xkX2FyY2hpdmVfY21kc19DWFg9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGUKKyBjb21waWxlcl9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgR0NDX0NYWD0nYCRFQ0hPICIkR0NDX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTc5NDAsMTIgKzE4Nzg2LDEyIEBAIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWCIgfCAkU0VEICIkZGVsYXlfCisgaGFyZGNvZGVfYXV0b21hdGljX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYXV0b21hdGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsaW5rX2FsbF9kZXBsaWJzX0NYWD0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlic19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworLWZpeF9zcmNmaWxlX3BhdGhfQ1hYPSdgJEVDSE8gIiRmaXhfc3JjZmlsZV9wYXRoX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD0nYCRFQ0hPICIkYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBleGNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBwcmVsaW5rX2NtZHNfQ1hYPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytwb3N0bGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcG9zdGxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjX0NYWD0nYCRFQ0hPICIkZmlsZV9saXN0X3NwZWNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBoYXJkY29kZV9hY3Rpb25fQ1hYPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xNzk4Myw4ICsxODgyOSwxMyBAQCByZWxvYWRfZmxhZyBcCisgT0JKRFVNUCBcCisgZGVwbGlic19jaGVja19tZXRob2QgXAorIGZpbGVfbWFnaWNfY21kIFwKKytmaWxlX21hZ2ljX2dsb2IgXAorK3dhbnRfbm9jYXNlZ2xvYiBcCisrRExMVE9PTCBcCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorIEFSIFwKKyBBUl9GTEFHUyBcCisrYXJjaGl2ZXJfbGlzdF9zcGVjIFwKKyBTVFJJUCBcCisgUkFOTElCIFwKKyBDQyBcCitAQCAtMTc5OTQsMTIgKzE4ODQ1LDE0IEBAIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCisrbm1fZmlsZV9saXN0X3NwZWMgXAorIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsIFwKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYyBcCisrbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKKyBuZWVkX2xvY2tzIFwKKytNQU5JRkVTVF9UT09MIFwKKyBEU1lNVVRJTCBcCisgTk1FRElUIFwKKyBMSVBPIFwKK0BAIC0xODAxNSw3ICsxODg2OCw2IEBAIG5vX3VuZGVmaW5lZF9mbGFnIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKKyBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKKy1maXhfc3JjZmlsZV9wYXRoIFwKKyBleGNsdWRlX2V4cHN5bXMgXAorIGluY2x1ZGVfZXhwc3ltcyBcCisgZmlsZV9saXN0X3NwZWMgXAorQEAgLTE4MDM3LDggKzE4ODg5LDggQEAgTERfQ1hYIFwKKyByZWxvYWRfZmxhZ19DWFggXAorIGNvbXBpbGVyX0NYWCBcCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKKy1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCisgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKKytsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBcCisgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAorIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAorQEAgLTE4MDUwLDcgKzE4OTAyLDYgQEAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKKyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFggXAorIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKKy1maXhfc3JjZmlsZV9wYXRoX0NYWCBcCisgZXhjbHVkZV9leHBzeW1zX0NYWCBcCisgaW5jbHVkZV9leHBzeW1zX0NYWCBcCisgZmlsZV9saXN0X3NwZWNfQ1hYIFwKK0BAIC0xODA4NCw2ICsxODkzNSw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTgwOTgsNyArMTg5NTAsOCBAQCBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCisgbW9kdWxlX2NtZHNfQ1hYIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKKyBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCistcHJlbGlua19jbWRzX0NYWDsgZG8KKytwcmVsaW5rX2NtZHNfQ1hYIFwKKytwb3N0bGlua19jbWRzX0NYWDsgZG8KKyAgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKK0BAIC0xODg5MSw3ICsxOTc0NCw4IEBAICRhc19lY2hvIFgiJGZpbGUiIHwKKyAjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKyAjCisgIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKy0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyMgICAgICAgICAgICAgICAgIEluYy4KKyAjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorICMKKyAjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCitAQCAtMTg5OTQsMTkgKzE5ODQ4LDQyIEBAIFNQMk5MPSRsdF9sdF9TUDJOTAorICMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KKyBOTDJTUD0kbHRfbHRfTkwyU1AKKyAKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorKworKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCisrdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorKworICMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCisgT0JKRFVNUD0kbHRfT0JKRFVNUAorIAorICMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgCistIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KKysjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisgZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisgCisrIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKytmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorKworKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisrCisrIyBETEwgY3JlYXRpb24gcHJvZ3JhbS4KKytETExUT09MPSRsdF9ETExUT09MCisrCisrIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKworICMgVGhlIGFyY2hpdmVyLgorIEFSPSRsdF9BUgorKworKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCisgQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisgCisrIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCisrYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKysKKyAjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorIFNUUklQPSRsdF9TVFJJUAorIAorQEAgLTE5MDM2LDYgKzE5OTEzLDEyIEBAIGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisgIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KKyBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKyAKKysjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KKytubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKysKKysjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKysKKyAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KKyBvYmpkaXI9JG9iamRpcgorIAorQEAgLTE5MDQ1LDYgKzE5OTI4LDkgQEAgTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworIG5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKyAKKysjIE1hbmlmZXN0IHRvb2wuCisrTUFOSUZFU1RfVE9PTD0kbHRfTUFOSUZFU1RfVE9PTAorKworICMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KKyBEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKyAKK0BAIC0xOTE1OSwxMiArMjAwNDUsMTIgQEAgd2l0aF9nY2M9JEdDQworICMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KKyBub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCistCisgIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCisgcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisgCisrIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisgCitAQCAtMTkyNTEsOSArMjAxMzcsNiBAQCBpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisgIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCisgbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCistCisgIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKyAKK0BAIC0xOTI2OSw2ICsyMDE1Miw5IEBAIGluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworIAorKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KKytwb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCisrCisgIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCisgZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCisgCitAQCAtMTkzMTUsMjEwICsyMDIwMSwxNjkgQEAgbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisgICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKy0gIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCistICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCistCistICBjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkKiApKQorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorLX0KKy0KKy1fTFRfRU9GCistICAgIDs7CistICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKy0KKy0KKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CistCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bXj1dKlwpPS4qL1wxLztxJworLW15X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorLSAgZnVuY19vcHRfc3BsaXRfYXJnPWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKKy19CistCistIyBmdW5jX2xvMm8gb2JqZWN0CistZnVuY19sbzJvICgpCisteworLSAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAorLX0KKy0KKy0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorLWZ1bmNfeGZvcm0gKCkKKy17CistICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJEAiYAorLX0KKy0KKy0jIGZ1bmNfbGVuIHN0cmluZworLSMgU1RSSU5HIG1heSBub3Qgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKy1mdW5jX2xlbiAoKQorLXsKKy0gIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CistCistX0xUX0VPRgorLWVzYWMKKy0KKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDErPVwkMiIKKy19CistX0xUX0VPRgorLSAgICA7OworLSAgKikKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJDE9XCQkMVwkMiIKKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgZXNhYworLQorLQorLSAgc2VkIC1uICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlLywkcCcgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysKKysgIGlmIHRlc3QgeCIkeHNpX3NoZWxsIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCisrZnVuY19kaXJuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCisrZnVuY19iYXNlbmFtZSAoKVwKKyt7XAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIC9jXAorK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCisrXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCisrXCAgICBlc2FjXAorK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCisrZnVuY19zdHJpcG5hbWUgKClcCisre1wKKytcICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCisrXCAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuXAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorK2Z1bmNfc3BsaXRfbG9uZ19vcHQgKClcCisre1wKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKKytcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfbG9uZ19vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X3Nob3J0X29wdCAoKSQvLC9efSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IC9jXAorK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fVwKKytcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAorK2Z1bmNfbG8ybyAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7O1wKKytcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorK1wgICAgZXNhY1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sbzJvIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY194Zm9ybSAoKSQvLC9efSAjIGZ1bmNfeGZvcm0gL2NcCisrZnVuY194Zm9ybSAoKVwKKyt7XAorKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCisrZnVuY19hcml0aCAoKVwKKyt7XAorKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAorK2Z1bmNfbGVuICgpXAorK3tcCisrICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19sZW4gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKytmaQorKworK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKysgIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAorK2Z1bmNfYXBwZW5kICgpXAorK3tcCisrICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorK2Z1bmNfYXBwZW5kX3F1b3RlZCAoKVwKKyt7XAorK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCisrXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2ZpCisrCisraWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KKytmaQorKworKworKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgIGNobW9kICt4ICIkb2ZpbGUiCisgCitAQCAtMTk1NDYsMTIgKzIwMzkxLDEyIEBAIHdpdGhfZ2NjPSRHQ0NfQ1hYCisgIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorIG5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCisgCistIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgorLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKKyAKKysjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCisrd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisrCisgIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorIGxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAorIAorQEAgLTE5NjM4LDkgKzIwNDgzLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aF9DWFgKKyAjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KKyBsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAorIAorLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KKy1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoX0NYWAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWAorIAorQEAgLTE5NjU2LDYgKzIwNDk4LDkgQEAgaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfQ1hYCisgIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KKyBwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kc19DWFgKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kc19DWFgKKysKKyAjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KKyBmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWNfQ1hYCisgCitkaWZmIC0tZ2l0IGEvbGlidG9vbC5tNCBiL2xpYnRvb2wubTQKK2luZGV4IDc5NzQ2OGYuLjAyYjE1YjMgMTAwNjQ0CistLS0gYS9saWJ0b29sLm00CisrKysgYi9saWJ0b29sLm00CitAQCAtMSw3ICsxLDggQEAKKyAjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorICMKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKK0BAIC0xMCw3ICsxMSw4IEBACisgCisgbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyAjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorLSMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrIyAgICAgICAgICAgICAgICAgSW5jLgorICMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisgIworICMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KK0BAIC0zNyw3ICszOSw3IEBAIG00X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisgIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyBdKQorIAorLSMgc2VyaWFsIDU2IExUX0lOSVQKKysjIHNlcmlhbCA1NyBMVF9JTklUCisgCisgCisgIyBMVF9QUkVSRVEoVkVSU0lPTikKK0BAIC05Miw3ICs5NCw4IEBAIF9MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgQUNfU1VCU1QoTElCVE9PTClkbmwKKyAKKyBfTFRfU0VUVVAKK0BAIC0xNjYsMTAgKzE2OSwxMyBAQCBfTFRfREVDTChbXSwgW2V4ZWV4dF0sIFswXSwgW0V4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKV0pZG5sCisgZG5sCisgbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCisgbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorIG00X3JlcXVpcmUoW19MVF9DSEVDS19NQUdJQ19NRVRIT0RdKWRubAorK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKKyAKKyBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorQEAgLTE5OSw3ICsyMDUsNyBAQCBhaXgzKikKKyBlc2FjCisgCisgIyBHbG9iYWwgdmFyaWFibGVzOgorLW9maWxlPWxpYnRvb2wKKytvZmlsZT0ke2hvc3RfYWxpYXN9LWxpYnRvb2wKKyBjYW5fYnVpbGRfc2hhcmVkPXllcworIAorICMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorQEAgLTYzMiw3ICs2MzgsNyBAQCBtNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCisgbTRfaWZzZXQoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFsgQUNfUEFDS0FHRV9WRVJTSU9OXSkKKyBjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKyAKKy1Db3B5cmlnaHQgKEMpIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrQ29weXJpZ2h0IChDKSAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIFRoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorIAorQEAgLTc0NiwxNSArNzUyLDEyIEBAIF9MVF9FT0YKKyAgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworLSAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisgCistICBfTFRfUFJPR19YU0lfU0hFTExGTlMKKysgIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKyAKKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIF0sCitAQCAtOTgwLDYgKzk4Myw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgorIGludCBtYWluKCkgeyByZXR1cm4gMDt9CisgX0xUX0VPRgorQEAgLTEwNjksMzAgKzEwNzQsNDEgQEAgbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKKyAgIGZpCisgXSkKKyAKKy0jIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorICMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorICMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorICMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorICMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyAjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorKyMgU3RvcmUgdGhlIHJlc3VsdHMgZnJvbSB0aGUgZGlmZmVyZW50IGNvbXBpbGVycyBmb3IgZWFjaCBUQUdOQU1FLgorKyMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KKyBtNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorIFttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorLUFDX0xJTktfSUZFTFNFKEFDX0xBTkdfUFJPR1JBTSxbCistbHRfYWl4X2xpYnBhdGhfc2VkPScKKy0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworLQkvXjAvIHsKKy0JICAgIHMvXjAgICpcKC4qXCkkL1wxLworLQkgICAgcAorLQl9CistICAgIH0nCistYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKy0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLWZpXSxbXSkKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKytpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBBQ19DQUNIRV9WQUwoW19MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pXSwKKysgIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNXSxbCisrICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfV0nCisrICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKysgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaV0sW10pCisrICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisrICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPSIvdXNyL2xpYjovbGliIgorKyAgZmkKKysgIF0pCisrICBhaXhfbGlicGF0aD0kX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkKKytmaQorIF0pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorIAorIAorQEAgLTExMTcsNyArMTEzMyw3IEBAIEVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisgCisgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnQgc3RyaW5nc10pCisgIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCistaWYgdGVzdCAiWGBwcmludCAtciAtLSAtbiAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKytpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICAgRUNITz0ncHJpbnQgLXIgLS0nCisgZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KK0BAIC0xMTYxLDYgKzExNzcsMzkgQEAgX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorIF0pIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIAorIAorKyMgX0xUX1dJVEhfU1lTUk9PVAorKyMgLS0tLS0tLS0tLS0tLS0tLQorK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKKytbQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3lzcm9vdF0pCisrQUNfQVJHX1dJVEgoW2xpYnRvb2wtc3lzcm9vdF0sCisrWyAgLS13aXRoLWxpYnRvb2wtc3lzcm9vdFs9RElSXSBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorKyAgICAgICAgICAgICAgICAgICAgICAgIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290IGlmIG5vdCBzcGVjaWZpZWQpLl0sCisrW10sIFt3aXRoX2xpYnRvb2xfc3lzcm9vdD1ub10pCisrCisrZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorK2RubCBpbiBjYXNlIHRoZSB1c2VyIHBhc3NlZCBhIGRpcmVjdG9yeSBuYW1lLgorK2x0X3N5c3Jvb3Q9CisrY2FzZSAke3dpdGhfbGlidG9vbF9zeXNyb290fSBpbiAjKAorKyB5ZXMpCisrICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisrICAgZmkKKysgICA7OyAjKAorKyAvKikKKysgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKysgICA7OyAjKAorKyBub3wnJykKKysgICA7OyAjKAorKyAqKQorKyAgIEFDX01TR19SRVNVTFQoWyR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9XSkKKysgICBBQ19NU0dfRVJST1IoW1RoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC5dKQorKyAgIDs7CisrZXNhYworKworKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCisrX0xUX0RFQ0woW10sIFtsdF9zeXNyb290XSwgWzBdLCBbVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBdZG5sCisrW2RlcGVuZGVudCBsaWJyYXJpZXMsIGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuXSldKQorKworICMgX0xUX0VOQUJMRV9MT0NLCisgIyAtLS0tLS0tLS0tLS0tLS0KKyBtNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK0BAIC0xMzIwLDE0ICsxMzY5LDQ3IEBAIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorIF0pIyBfTFRfRU5BQkxFX0xPQ0sKKyAKKyAKKysjIF9MVF9QUk9HX0FSCisrIyAtLS0tLS0tLS0tLQorK200X2RlZnVuKFtfTFRfUFJPR19BUl0sCisrW0FDX0NIRUNLX1RPT0xTKEFSLCBbYXJdLCBmYWxzZSkKKys6ICR7QVI9YXJ9CisrOiAke0FSX0ZMQUdTPWNydX0KKytfTFRfREVDTChbXSwgW0FSXSwgWzFdLCBbVGhlIGFyY2hpdmVyXSkKKytfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdLCBbRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmVdKQorKworK0FDX0NBQ0hFX0NIRUNLKFtmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydF0sIFtsdF9jdl9hcl9hdF9maWxlXSwKKysgIFtsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCisrICAgICBbZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisrICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JkFTX01FU1NBR0VfTE9HX0ZEJworKyAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwlBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisrICAgICBdKQorKyAgXSkKKysKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKytfTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKKysgIFtIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXJdKQorK10pIyBfTFRfUFJPR19BUgorKworKworICMgX0xUX0NNRF9PTERfQVJDSElWRQorICMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIG00X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKKy1bQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGZhbHNlKQorLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKKy10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorLV9MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorLV9MVF9ERUNMKFtdLCBbQVJfRkxBR1NdLCBbMV0pCisrW19MVF9QUk9HX0FSCisgCisgQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCisgdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitAQCAtMTYyMyw3ICsxNzA1LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistWyNsaW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIgorK1sjbGluZSAkTElORU5PICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTE2NjcsMTAgKzE3NDksMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0yMjEwLDggKzIyOTIsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMjI0NCwxMyArMjMyNyw3MSBAQCBtNF9pZihbJDFdLCBbXSxbCisgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisrICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworKworKyAgICBjYXNlICRidWlsZF9vcyBpbgorKyAgICBtaW5ndyopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKysgICAgICBJRlM9JzsnCisrICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorKyAgICAgIGRvCisrICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisrICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisrICAgICAgZG9uZQorKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKysgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorKyAgICAgIDs7CisrICAgIGN5Z3dpbiopCisrICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKysgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgICA7OworICAgZXNhYworLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICAgc2hsaWJwYXRoX3Zhcj1QQVRICisgICA7OworQEAgLTIzNDIsNyArMjQ4Myw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0yOTUwLDYgKzMwOTEsMTEgQEAgY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyBlc2FjCisgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworIGNhc2UgJGhvc3Rfb3MgaW4KKysgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKysgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisrICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKysgICAgZmkKKysgICAgOzsKKyAgIGRhcndpbiopCisgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworQEAgLTMwMTYsNyArMzE2Miw4IEBAIG1pbmd3KiB8IHB3MzIqKQorICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgIGVsc2UKKy0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisrICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKysgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgICBmaQorICAgOzsKK0BAIC0zMTY3LDYgKzMzMTQsMjEgQEAgdHBmKikKKyAgIDs7CisgZXNhYworIF0pCisrCisrZmlsZV9tYWdpY19nbG9iPQorK3dhbnRfbm9jYXNlZ2xvYj1ubworK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisrICBjYXNlICRob3N0X29zIGluCisrICBtaW5ndyogfCBwdzMyKikKKysgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKysgICAgZWxzZQorKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1tcMV1dXC9bW1wxXV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtMzE3NCw3ICszMzM2LDExIEBAIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorIF9MVF9ERUNMKFtdLCBbZGVwbGlic19jaGVja19tZXRob2RdLCBbMV0sCisgICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCisgX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKy0gICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gImZpbGVfbWFnaWMiXSkKKysgICAgW0NvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19nbG9iXSwgWzFdLAorKyAgICBbSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyJdKQorK19MVF9ERUNMKFtdLCBbd2FudF9ub2Nhc2VnbG9iXSwgWzFdLAorKyAgICBbRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKKyBdKSMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIAorIAorQEAgLTMyNzcsNiArMzQ0Myw2NyBAQCBkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CisgZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCisgZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCisgCisrIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGhvdyB0byBkZXRlcm1pbmUgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5CisrIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisrIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0sCisrW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKKyttNF9yZXF1aXJlKFtfTFRfREVDTF9ETExUT09MXSkKKytBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCisrbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQsCisrW2x0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworK10pCisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworK19MVF9ERUNMKFtdLCBbc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWRdLCBbMV0sCisrICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKKytdKSMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKysKKysKKysjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorK200X2RlZnVuKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSwKKytbQUNfQ0hFQ0tfVE9PTChNQU5JRkVTVF9UT09MLCBtdCwgOikKKyt0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorK0FDX0NBQ0hFX0NIRUNLKFtpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2xdLCBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sXSwKKysgIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKysgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKysgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworKyAgZmkKKysgIHJtIC1mIGNvbmZ0ZXN0Kl0pCisraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKysgIE1BTklGRVNUX1RPT0w9OgorK2ZpCisrX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCisrXSkjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKysKKyAKKyAjIExUX0xJQl9NCisgIyAtLS0tLS0tLQorQEAgLTM0MDMsOCArMzYzMCw4IEBAIGVzYWMKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorIAorICMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCistbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChsaWJbW14gXV0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKytsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKyAKKyAjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KKyBvcHRfY3I9CitAQCAtMzQ0MCw2ICszNjY3LDcgQEAgZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworICAgZWxzZQorICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICAgZmkKKysgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKyAKKyAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICAgcGlwZV93b3Jrcz1ubworQEAgLTM0NzMsNiArMzcwMSwxOCBAQCBfTFRfRU9GCisgICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKyAJaWYgJEdSRVAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKysvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKysjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQorKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKysjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKKysjZW5kaWYKKysKKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC0zNDg0LDcgKzM3MjQsNyBAQCBfTFRfRU9GCisgCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgCisgLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworLWNvbnN0IHN0cnVjdCB7CisrTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtMzUxMCwxNSArMzc1MCwxNSBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIF9MVF9FT0YKKyAJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorLQkgIGx0X3NhdmVfTElCUz0iJExJQlMiCistCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKysJICBsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorIAkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisgCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorIAkgICAgcGlwZV93b3Jrcz15ZXMKKyAJICBmaQorLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCistCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisrCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKysJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKKyAJZWxzZQorIAkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAJZmkKK0BAIC0zNTUxLDYgKzM3OTEsMTMgQEAgZWxzZQorICAgQUNfTVNHX1JFU1VMVChvaykKKyBmaQorIAorKyMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgorK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisrICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKKytlbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbW0BdXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisgX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfcGlwZV0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwgWzFdLAorICAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCisgX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2xdLCBbMV0sCitAQCAtMzU2MSw2ICszODA4LDggQEAgX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgICBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sIFsxXSwKKyAgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKKytfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciAkTk1dKQorIF0pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIAorIAorQEAgLTM1NzIsNyArMzgyMSw2IEBAIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10pCisgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCitAQCAtMzY3OCw2ICszOTI2LDEyIEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgCSAgOzsKKyAJZXNhYworIAk7OworKyAgICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiogfCBjZWdjYyopCisrCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKysJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKysJbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorKwkgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorKwk7OworICAgICAgIGRndXgqKQorIAljYXNlICRjY19iYXNlbmFtZSBpbgorIAkgIGVjKysqKQorQEAgLTM4MzAsNyArNDA4NCw3IEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgCTs7CisgICAgICAgc29sYXJpcyopCisgCWNhc2UgJGNjX2Jhc2VuYW1lIGluCistCSAgQ0MqKQorKwkgIENDKiB8IHN1bkNDKikKKyAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworQEAgLTQwNTMsNiArNDMwNywxMiBAQCBtNF9pZihbJDFdLCBbQ1hYXSwgWworIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy0tc3RhdGljJworIAk7OworKyAgICAgIG5hZ2ZvciopCisrCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKysJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworKwk7OworICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCisgCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCitAQCAtNDExNSw3ICs0Mzc1LDcgQEAgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKy0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCisrICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQorIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJzs7CisgICAgICAgKikKKyAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKK0BAIC00MTcyLDkgKzQ0MzIsMTEgQEAgY2FzZSAkaG9zdF9vcyBpbgorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICAgOzsKKyBlc2FjCistQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCistX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCistCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAorKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKV0sCisrICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisgCisgIworICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KK0BAIC00MTkzLDYgKzQ0NTUsOCBAQCBmaQorIF9MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKyAJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisgCisrX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisrCVtIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyXSkKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorICMKK0BAIC00MjEzLDYgKzQ0NzcsNyBAQCBfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKyBtNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorIFtBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKKyBBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKKyttNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisgbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0BAIC00MjIxLDYgKzQ0ODYsNyBAQCBtNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKyBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisrICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGFpeFtbNC05XV0qKQorICAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KK0BAIC00MjM1LDE1ICs0NTAxLDIwIEBAIG00X2lmKFskMV0sIFtDWFhdLCBbCisgICAgIDs7CisgICBwdzMyKikKKyAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorLSAgOzsKKysgICAgOzsKKyAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCistICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKy0gIDs7CisrICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisrICAgIGNsKikgOzsKKysgICAgKikKKysgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKysgICAgICA7OworKyAgICBlc2FjCisrICAgIDs7CisgICAqKQorICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworLSAgOzsKKysgICAgOzsKKyAgIGVzYWMKKy0gIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorIF0sIFsKKyAgIHJ1bnBhdGhfdmFyPQorICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorQEAgLTQ0MTEsNyArNDY4Miw4IEBAIF9MVF9FT0YKKyAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCistICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorIAorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTQ0NTksNyArNDczMSw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTQ1MTAsMTIgKzQ3ODIsMTIgQEAgX0xUX0VPRgorIAkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKyAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nLXJwYXRoICRsaWJkaXInCistCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisgCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorIAkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtNDUyOSw4ICs0ODAxLDggQEAgX0xUX0VPRgorIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJworIAl3bGFyYz0KKyAgICAgICBlbHNlCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBmaQorICAgICAgIDs7CisgCitAQCAtNDU0OCw4ICs0ODIwLDggQEAgX0xUX0VPRgorIAorIF9MVF9FT0YKKyAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgIGZpCitAQCAtNDU5NSw4ICs0ODY3LDggQEAgX0xUX0VPRgorIAorICAgICAqKQorICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgIGZpCitAQCAtNDcyNiw3ICs0OTk4LDcgQEAgX0xUX0VPRgorIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKysgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgIGVsc2UKK0BAIC00NzM3LDcgKzUwMDksNyBAQCBfTFRfRU9GCisgCWVsc2UKKyAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKysJIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorIAkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KK0BAIC00NzgxLDIwICs1MDUzLDYzIEBAIF9MVF9FT0YKKyAgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworLSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCistICAgICAgbGliZXh0PWxpYgorLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKy0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKy0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorLSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKy0gICAgICBfTFRfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCistICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisrCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwlfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworKwlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKysJX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bW0FJVFddXVtbIF1dL3MvLipbWyBdXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJX0xUX1RBR1ZBUihvbGRfcG9zdGluc3RhbGxfY21kcywgJDEpPSdjaG1vZCA2NDQgJG9sZGxpYicKKysJX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorKwkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKysJICAgICouZXhlfCouRVhFKSA7OworKwkgICAgKikKKysJICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkgICAgICBsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorKwkgICAgICA7OworKwkgIGVzYWN+CisrCSAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKysJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKKysJICBmaScKKysJOzsKKysgICAgICAqKQorKwkjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKysJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisrCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorKwlsaWJleHQ9bGliCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwlzaHJleHRfY21kcz0iLmRsbCIKKysJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKysJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisrCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKwk7OworKyAgICAgIGVzYWMKKyAgICAgICA7OworIAorICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorQEAgLTQ4MjgsNyArNTE0Myw3IEBAIF9MVF9FT0YKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworQEAgLTQ4MzYsNyArNTE1MSw3IEBAIF9MVF9FT0YKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC00ODUyLDcgKzUxNjcsNyBAQCBfTFRfRU9GCisgCisgICAgIGhwdXgxMCopCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgICBmaQorQEAgLTQ4NzYsMTAgKzUxOTEsMTAgQEAgX0xUX0VPRgorIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCWlhNjQqKQorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAkqKQorLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC00OTI2LDE2ICs1MjQxLDMxIEBAIF9MVF9FT0YKKyAKKyAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKysJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgQUNfTElOS19JRkVMU0UoaW50IGZvbyh2b2lkKSB7fSwKKy0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKy0gICAgICAgICkKKy0gICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisrCUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sXSwKKysJICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2xdLAorKwkgIFtzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisrCSAgIEFDX0xJTktfSUZFTFNFKAorKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKysJICAgICAgICBbQUNfTEFOR19DQVNFKFtDXSwgW1tpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9XV0sCisrCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKysgICAgICBzdWJyb3V0aW5lIGZvbworKyAgICAgIGVuZF1dLAorKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKysgICAgICBzdWJyb3V0aW5lIGZvbworKyAgICAgIGVuZF1dKV0pXSwKKysJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisrCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ub10pCisrICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisrCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKysgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWZpCisgICAgICAgZWxzZQorIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworQEAgLTUwMjAsNyArNTM1MCw3IEBAIF9MVF9FT0YKKyAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgIGVsc2UKKyAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTUwMzksOSArNTM2OSw5IEBAIF9MVF9FT0YKKyAgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiBkZWZzJworICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgCXdsYXJjPScke3dsfScKKy0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisrCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKy0JICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgIGVsc2UKKyAJY2FzZSBgJENDIC1WIDI+JjFgIGluCisgCSoiQ29tcGlsZXJzIDUuMCIqKQorQEAgLTUzMTMsOCArNTY0Myw2IEBAIF9MVF9UQUdERUNMKFtdLCBbaW5oZXJpdF9ycGF0aF0sIFswXSwKKyAgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorIF9MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCistX0xUX1RBR0RFQ0woW10sIFtmaXhfc3JjZmlsZV9wYXRoXSwgWzFdLAorLSAgICBbRml4IHRoZSBzaGVsbCB2YXJpYWJsZSAkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyXSkKKyBfTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKKyAgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCisgX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorQEAgLTUzMjUsNiArNTY1Myw4IEBAIF9MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgICBbU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkXSkKKyBfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKKytfTFRfVEFHREVDTChbXSwgW3Bvc3RsaW5rX2NtZHNdLCBbMl0sCisrICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zXSkKKyBfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKKyBkbmwgRklYTUU6IE5vdCB5ZXQgaW1wbGVtZW50ZWQKK0BAIC01NDI2LDYgKzU3NTYsNyBAQCBDQz0iJGx0X3NhdmVfQ0MiCisgbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorIFttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyBtNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisrbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCisgaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKyAgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorQEAgLTU0ODcsNiArNTgxOCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCisgICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICAgbHRfc2F2ZV9DQz0kQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIGx0X3NhdmVfTEQ9JExECisgICBsdF9zYXZlX0dDQz0kR0NDCisgICBHQ0M9JEdYWAorQEAgLTU1MDQsNiArNTgzNiw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICBmaQorICAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKKyAgIENDPSR7Q1hYLSJjKysifQorKyAgQ0ZMQUdTPSRDWFhGTEFHUworICAgY29tcGlsZXI9JENDCisgICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitAQCAtNTUyNSw4ICs1ODU4LDggQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCistICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworIAorICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKK0BAIC01NjY3LDcgKzYwMDAsNyBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5CisgICAgICAgICAgICMgZXhlY3V0YWJsZS4KKy0gICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKysgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgCisgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTU2NzksNyArNjAxMiw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICAgICAgICAgIGVsc2UKKyAJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorIAkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLQkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKysJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisgCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCitAQCAtNTcyMSwyOSArNjA1NCw3NSBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgOzsKKyAKKyAgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCistICAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorLSAgICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCistICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworLSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCistICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCistICAgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKy0KKy0gICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKy0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworLSAgICAgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCistICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCistICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorLQkgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworLSAgICAgICAgICBlbHNlCistCSAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKy0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CistICAgICAgICAgIGZpfgorLSAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCistICAgICAgICBlbHNlCistICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKy0gICAgICAgIGZpCistICAgICAgICA7OworKwljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCisrCSxjbCogfCBubyxjbCopCisrCSAgIyBOYXRpdmUgTVNWQworKwkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKysJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisrCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCSAgbGliZXh0PWxpYgorKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorKwkgIHNocmV4dF9jbWRzPSIuZGxsIgorKwkgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgICAgJFNFRCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgICBlbHNlCisrCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworKwkgICAgZml+CisrCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgICBsaW5rbmFtZXM9JworKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKysJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKwkgICMgRG9uJ3QgdXNlIHJhbmxpYgorKwkgIF9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisrCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKysJICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisrCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAgICouZXhlfCouRVhFKSA7OworKwkgICAgICAqKQorKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorKwkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJCTs7CisrCSAgICBlc2FjfgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KKysJICAgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisrCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworKwkgICAgZmknCisrCSAgOzsKKysJKikKKysJICAjIGcrKworKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisrCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKysJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisrCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisrCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworKworKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKysJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKysJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKKysJICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisrCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworKwkgICAgZWxzZQorKwkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKysJICAgIGZpfgorKwkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworKwkgIGVsc2UKKysJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKysJICBmaQorKwkgIDs7CisrCWVzYWMKKysJOzsKKyAgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICAgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMoJDEpCisgCTs7CitAQCAtNTgxOCw3ICs2MTk3LDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICA7OworICAgICAgICAgICAqKQorICAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCistICAgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysgICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KK0BAIC01ODg5LDEwICs2MjY4LDEwIEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKyAJICAgICAgICAgICAgOzsKKyAJICAgICAgICAgIGlhNjQqKQorLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisrCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgICAgICAgICAgIDs7CisgCSAgICAgICAgICAqKQorLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKysJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworIAkgICAgICAgICAgICA7OworIAkgICAgICAgIGVzYWMKKyAJICAgICAgZmkKK0BAIC01OTMzLDkgKzYzMTIsOSBAQCBpZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgorICAgICAgICAgICAqKQorIAkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAJICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCSAgICAgIGVsc2UKKy0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCisrCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKK0BAIC02MDA1LDIwICs2Mzg0LDIwIEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKy0JCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgIicKKysJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisgCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorLQkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYH4KKysJCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorIAkJJFJBTkxJQiAkb2xkbGliJworIAkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorIAkJcm0gLXJmICR0cGxkaXJ+CisgCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKy0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisrCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgCQlybSAtcmYgJHRwbGRpcn4KKyAJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorLQkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAJICAgICAgOzsKKyAJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisgCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworQEAgLTYyMTMsNyArNjU5Miw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCQkgIDs7CisgCSAgICAgICAgKikKKy0JICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkJICA7OworIAkgICAgICBlc2FjCisgCitAQCAtNjI1OSw3ICs2NjM4LDcgQEAgaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAKKyAgICAgICBzb2xhcmlzKikKKyAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCistICAgICAgICAgIENDKikKKysgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorIAkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworIAkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworQEAgLTYzMDAsOSArNjY3OSw5IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisgCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCistCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKysJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKyAJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkJICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgCisgCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorQEAgLTY0MzEsNiArNjgxMCw3IEBAIGlmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKyAKKyAgIENDPSRsdF9zYXZlX0NDCisrICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgICBMRENYWD0kTEQKKyAgIExEPSRsdF9zYXZlX0xECisgICBHQ0M9JGx0X3NhdmVfR0NDCitAQCAtNjQ0NSw2ICs2ODI1LDI5IEBAIEFDX0xBTkdfUE9QCisgXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKKyAKKyAKKysjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKKysjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisrIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisrIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorKyMKKysjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKKysjIGV4Y2VwdCB0aGlzIG9uZSBjYW4gYmUgdXNlZCBieSBtNCBjb2RlIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIGJ5IGNvbmZpZ3VyZSwKKysjIHJhdGhlciB0aGFuIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyttNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAorK0FDX1JFUVVJUkUoW19MVF9ERUNMX1NFRF0pCisrQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKQorK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQorK3sKKysgIGNhc2UgJHsyfSBpbgorKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKysgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKysgIGVzYWMKKyt9ICMgZnVuY19zdHJpcG5hbWVfY25mCisrXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKysKKyAjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBGaWd1cmUgb3V0ICJoaWRkZW4iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGZyb20gdmVyYm9zZQorQEAgLTY0NTMsNiArNjg1Niw3IEBAIEFDX0xBTkdfUE9QCisgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisgbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorIFttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKytBQ19SRVFVSVJFKFtfTFRfRlVOQ19TVFJJUE5BTUVfQ05GXSlkbmwKKyAjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KKyBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorQEAgLTY1MDMsNiArNjkwNywxMyBAQCBwdWJsaWMgY2xhc3MgZm9vIHsKKyB9OworIF9MVF9FT0YKKyBdKQorKworK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKytjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisrKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisrKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworK2VzYWMKKysKKyBkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisgZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKyBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorQEAgLTY1MTQsNyArNjkyNSw3IEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisgCisgICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCistICAgIGNhc2UgJHAgaW4KKysgICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorIAorICAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCitAQCAtNjUyMywxMyArNjkzNCwyMiBAQCBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorIAkgcHJldj0kcAorIAkgY29udGludWUKKy0gICAgICAgZWxzZQorLQkgcHJldj0KKyAgICAgICAgZmkKKyAKKysgICAgICAgIyBFeHBhbmQgdGhlIHN5c3Jvb3QgdG8gZWFzZSBleHRyYWN0aW5nIHRoZSBkaXJlY3RvcmllcyBsYXRlci4KKysgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisrICAgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWVfY25mICctTCcgJycgIiRwIjsgcHJldj0tTDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisrICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKysgICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICAgIGVzYWMKKysgICAgICAgZmkKKysgICAgICAgY2FzZSAkcCBpbgorKyAgICAgICA9KikgZnVuY19zdHJpcG5hbWVfY25mICc9JyAnJyAiJHAiOyBwPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworKyAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCistCSBjYXNlICRwIGluCistCSAtTCogfCAtUiopCisrCSBjYXNlICR7cHJldn0gaW4KKysJIC1MIHwgLVIpCisgCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKyAJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCitAQCAtNjU0OSw4ICs2OTY5LDEwIEBAIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorIAkgZmkKKyAgICAgICAgZmkKKysgICAgICAgcHJldj0KKyAgICAgICAgOzsKKyAKKysgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgICouJG9iamV4dCkKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorQEAgLTY1ODYsNiArNzAwOCw3IEBAIGVsc2UKKyBmaQorIAorICRSTSAtZiBjb25mZXN0LiRvYmpleHQKKytDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisgCisgIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KKyBtNF9pZihbJDFdLCBbQ1hYXSwKK0BAIC02NjIyLDcgKzcwNDUsNyBAQCBsaW51eCopCisgCisgc29sYXJpcyopCisgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgQ0MqKQorKyAgQ0MqIHwgc3VuQ0MqKQorICAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKK0BAIC02NzM1LDcgKzcxNTgsOSBAQCBpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKyAgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgICBsdF9zYXZlX0NDPSIkQ0MiCisgICBsdF9zYXZlX0dDQz0kR0NDCisrICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgICBDQz0ke0Y3Ny0iZjc3In0KKysgIENGTEFHUz0kRkZMQUdTCisgICBjb21waWxlcj0kQ0MKKyAgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK0BAIC02Nzg5LDYgKzcyMTQsNyBAQCBpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KKyAKKyAgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgIENDPSIkbHRfc2F2ZV9DQyIKKysgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorIGZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisgCisgQUNfTEFOR19QT1AKK0BAIC02ODY1LDcgKzcyOTEsOSBAQCBpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KKyAgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgIGx0X3NhdmVfR0NDPSRHQ0MKKysgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgIENDPSR7RkMtImY5NSJ9CisrICBDRkxBR1M9JEZDRkxBR1MKKyAgIGNvbXBpbGVyPSRDQworICAgR0NDPSRhY19jdl9mY19jb21waWxlcl9nbnUKKyAKK0BAIC02OTIxLDcgKzczNDksOCBAQCBpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAgZmkgIyB0ZXN0IC1uICIkY29tcGlsZXIiCisgCisgICBHQ0M9JGx0X3NhdmVfR0NDCistICBDQz0iJGx0X3NhdmVfQ0MiCisrICBDQz0kbHRfc2F2ZV9DQworKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworIGZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKKyAKKyBBQ19MQU5HX1BPUAorQEAgLTY5NTgsMTAgKzczODcsMTIgQEAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIAorICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCistbHRfc2F2ZV9DQz0iJENDIgorK2x0X3NhdmVfQ0M9JENDCisrbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworIGx0X3NhdmVfR0NDPSRHQ0MKKyBHQ0M9eWVzCisgQ0M9JHtHQ0otImdjaiJ9CisrQ0ZMQUdTPSRHQ0pGTEFHUworIGNvbXBpbGVyPSRDQworIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK0BAIC02OTkyLDcgKzc0MjMsOCBAQCBmaQorIEFDX0xBTkdfUkVTVE9SRQorIAorIEdDQz0kbHRfc2F2ZV9HQ0MKKy1DQz0iJGx0X3NhdmVfQ0MiCisrQ0M9JGx0X3NhdmVfQ0MKKytDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCisgXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKyAKKyAKK0BAIC03MDI3LDkgKzc0NTksMTEgQEAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIAorICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgbHRfc2F2ZV9DQz0iJENDIgorK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyBsdF9zYXZlX0dDQz0kR0NDCisgR0NDPQorIENDPSR7UkMtIndpbmRyZXMifQorK0NGTEFHUz0KKyBjb21waWxlcj0kQ0MKKyBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorQEAgLTcwNDIsNyArNzQ3Niw4IEBAIGZpCisgCisgR0NDPSRsdF9zYXZlX0dDQworIEFDX0xBTkdfUkVTVE9SRQorLUNDPSIkbHRfc2F2ZV9DQyIKKytDQz0kbHRfc2F2ZV9DQworK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyBdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisgCisgCitAQCAtNzEwMSw2ICs3NTM2LDE1IEBAIF9MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW0FuIG9iamVjdCBzeW1ib2wgZHVtcGVyXSkKKyBBQ19TVUJTVChbT0JKRFVNUF0pCisgXSkKKyAKKysjIF9MVF9ERUNMX0RMTFRPT0wKKysjIC0tLS0tLS0tLS0tLS0tLS0KKysjIEVuc3VyZSBETExUT09MIHZhcmlhYmxlIGlzIHNldC4KKyttNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCisrW0FDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisrdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKKytBQ19TVUJTVChbRExMVE9PTF0pCisrXSkKKyAKKyAjIF9MVF9ERUNMX1NFRAorICMgLS0tLS0tLS0tLS0tCitAQCAtNzE5NCw4ICs3NjM4LDggQEAgbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCisgIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKKyB4c2lfc2hlbGw9bm8KKyAoIF9sdF9kdW1teT0iYS9iL2MiCistICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwiJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorLSAgICAgID0gYyxhL2IsLCBcCisrICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAorKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKKyAgICYmIHhzaV9zaGVsbD15ZXMKK0BAIC03MjM0LDIwNiArNzY3OCwxNjIgQEAgX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCisgXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUworIAorIAorLSMgX0xUX1BST0dfWFNJX1NIRUxMRk5TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEJvdXJuZSBhbmQgWFNJIGNvbXBhdGlibGUgdmFyaWFudHMgb2Ygc29tZSB1c2VmdWwgc2hlbGwgZnVuY3Rpb25zLgorLW00X2RlZnVuKFtfTFRfUFJPR19YU0lfU0hFTExGTlNdLAorLVtjYXNlICR4c2lfc2hlbGwgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKy0KKy0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKy0jIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCistIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCistZnVuY19kaXJuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX2Jhc2VuYW1lIGZpbGUKKy1mdW5jX2Jhc2VuYW1lICgpCisteworLSAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorLX0KKy0KKy0jIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorLSMgY2FsbDoKKy0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorLSMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorLSMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQorLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKy0jIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKy1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisteworLSAgY2FzZSAkezF9IGluCistICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CistICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKy0gIGVzYWMKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorLSAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorLX0KKy0KKy0jIGZ1bmNfb3B0X3NwbGl0CistZnVuY19vcHRfc3BsaXQgKCkKKy17CistICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz0kezEjKj19CistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworLSAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKy0gIGVzYWMKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworLX0KKy0KKy0jIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCistZnVuY19hcml0aCAoKQorLXsKKy0gIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpCistfQorLQorLSMgZnVuY19sZW4gc3RyaW5nCistIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorLWZ1bmNfbGVuICgpCisteworLSAgZnVuY19sZW5fcmVzdWx0PSR7IzF9CistfQorKyMgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRSAoRlVOQ05BTUUsIFJFUExBQ0VNRU5ULUJPRFkpCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEluIGAkY2ZnZmlsZScsIGxvb2sgZm9yIGZ1bmN0aW9uIEZVTkNOQU1FIGRlbGltaXRlZCBieSBgXkZVTkNOQU1FICgpJCcgYW5kCisrIyAnXn0gRlVOQ05BTUUgJywgYW5kIHJlcGxhY2UgaXRzIGJvZHkgd2l0aCBSRVBMQUNFTUVOVC1CT0RZLgorK200X2RlZnVuKFtfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFXSwKKytbZG5sIHsKKytzZWQgLWUgJy9eJDEgKCkkLywvXn0gIyAkMSAvY1wKKyskMSAoKVwKKyt7XAorK200X2JwYXRzdWJzdHMoWyQyXSwgWyRdLCBbXFxdLCBbXlwoWwkgXVwpXSwgW1xcXDFdKQorK30gIyBFeHRlbmRlZC1zaGVsbCAkMSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK10pCisgCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisgCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKysjIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIFJlcGxhY2UgZXhpc3RpbmcgcG9ydGFibGUgaW1wbGVtZW50YXRpb25zIG9mIHNldmVyYWwgc2hlbGwgZnVuY3Rpb25zIHdpdGgKKysjIGVxdWl2YWxlbnQgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb25zIHdoZXJlIHRob3NlIGZlYXR1cmVzIGFyZSBhdmFpbGFibGUuLgorK200X2RlZnVuKFtfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TXSwKKytbaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgorKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lXSwgW2RubAorKyAgICBjYXNlICR7MX0gaW4KKysgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKysgICAgZXNhY10pCisrCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Jhc2VuYW1lXSwgW2RubAorKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKysKKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWVdLCBbZG5sCisrICAgIGNhc2UgJHsxfSBpbgorKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisrICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworKyAgICBlc2FjCisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQorIAorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3RyaXBuYW1lXSwgW2RubAorKyAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlCisrICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKysgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KKysgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In0KKysgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1dKQorIAorLWRubCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lCistZG5sIEEgcG9ydGFibGUgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBnZW5lcmFsLm00c2gKKy1kbmwgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQgaGVyZS4KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfbG9uZ19vcHRdLCBbZG5sCisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfQorKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XSkKKyAKKy0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCistIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKy0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKy0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCistIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorLWZ1bmNfc3RyaXBuYW1lICgpCisteworLSAgY2FzZSAkezJ9IGluCistICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CistICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKy0gIGVzYWMKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X3Nob3J0X29wdF0sIFtkbmwKKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KKysgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifV0pCisgCistIyBzZWQgc2NyaXB0czoKKy1teV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bW149XV0qXCk9LiovXDEvO3EnCistbXlfc2VkX2xvbmdfYXJnPScxcy9eLVtbXj1dXSo9Ly8nCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xvMm9dLCBbZG5sCisrICAgIGNhc2UgJHsxfSBpbgorKyAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7CisrICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CisrICAgIGVzYWNdKQorIAorLSMgZnVuY19vcHRfc3BsaXQKKy1mdW5jX29wdF9zcGxpdCAoKQorLXsKKy0gIGZ1bmNfb3B0X3NwbGl0X29wdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCistICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorLX0KKysgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfeGZvcm1dLCBbICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9dKQorIAorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FyaXRoXSwgWyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKV0pCisgCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bW14uXV0qJC8ubG8vJ2AKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xlbl0sIFsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XSkKKytmaQorIAorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRbQF0iYAorLX0KKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF0sIFsgICAgZXZhbCAiJHsxfSs9XFwkezJ9Il0pCisgCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiRbMV0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKy19CisrICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF9xdW90ZWRdLCBbZG5sCisrICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCisrZG5sIG00IGV4cGFuc2lvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCB0aGVuIHRoZSBzaGVsbCBldmFsIHR1cm5zIHRoYXQgaW50byBcCisrICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXSkKKyAKKy1fTFRfRU9GCistZXNhYworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZWxzZQorKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKysgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKysgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKysgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrZmkKKyAKKy1jYXNlICRsdF9zaGVsbF9hcHBlbmQgaW4KKy0gIHllcykKKy0gICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKytpZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgorKyAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGVdKQorK2ZpCisrXSkKKyAKKy0jIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorLWZ1bmNfYXBwZW5kICgpCisteworLSAgZXZhbCAiJFsxXSs9XCRbMl0iCistfQorLV9MVF9FT0YKKysjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRGV0ZXJtaW5lIHdoaWNoIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQorKyMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAorKyMgZm9yIGNlcnRhaW4gY3Jvc3MtY29tcGlsZSBjb25maWd1cmF0aW9ucyBhbmQgbmF0aXZlIG1pbmd3LgorK200X2RlZnVuKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10sCisrW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorK0FDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSkKKytBQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKKytbY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisrICAgICAgICA7OworKyAgICBlc2FjCisgICAgIDs7CistICAqKQorLSAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorLQorLSMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCistIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCistZnVuY19hcHBlbmQgKCkKKy17CistICBldmFsICIkWzFdPVwkJFsxXVwkWzJdIgorLX0KKy0KKy1fTFRfRU9GCisrICAqLSotY3lnd2luKiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgICAqLSotY3lnd2luKiApCisrICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgICAgIDs7CisrICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisrICAgICAgICA7OworKyAgICBlc2FjCisgICAgIDs7CistICBlc2FjCisrICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorKyAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKysgICAgOzsKKytlc2FjCisrXSkKKyt0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisrQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWRdKQorK19MVF9ERUNMKFt0b19ob3N0X2ZpbGVfY21kXSwgW2x0X2N2X3RvX2hvc3RfZmlsZV9jbWRdLAorKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKKysKKytBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXRdKQorK0FDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAorK1sjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKyBdKQorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKytBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0pCisrX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCisrICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pZG5sCisrXSkjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA5NTAzZWM4Li43MGU4NTZlIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC0xLDEwICsxLDkgQEAKKy0jIEdlbmVyYXRlZCBmcm9tIGx0bWFpbi5tNHNoLgorIAorLSMgbGlidG9vbCAoR05VIGxpYnRvb2wgMS4zMTM0IDIwMDktMTEtMjkpIDIuMi43YQorKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNAorICMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyAKKyAjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKKy0jIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyAjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorIAorQEAgLTM4LDcgKzM3LDYgQEAKKyAjICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCisgIyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAjICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCistIyAgICAgICAtLW5vLWZpbmlzaCAgICAgICAgICBsZXQgaW5zdGFsbCBtb2RlIGF2b2lkIGZpbmlzaCBjb21tYW5kcworICMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworICMgICAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworICMgICAgICAgLS1uby1xdWlldCwgLS1uby1zaWxlbnQKK0BAIC03MSwxNyArNjksMTkgQEAKKyAjICAgICAgICAgY29tcGlsZXI6CQkkTFRDQworICMgICAgICAgICBjb21waWxlciBmbGFnczoJCSRMVENGTEFHUworICMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQorLSMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCAxLjMxMzQgMjAwOS0xMS0yOSkgMi4yLjdhCisrIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sKSAyLjQKKyAjICAgICAgICAgYXV0b21ha2U6CSRhdXRvbWFrZV92ZXJzaW9uCisgIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgorICMKKyAjIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KKysjIEdOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCisrIyBHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4KKyAKKyBQUk9HUkFNPWxpYnRvb2wKKyBQQUNLQUdFPWxpYnRvb2wKKy1WRVJTSU9OPTIuMi43YQorLVRJTUVTVEFNUD0iIDEuMzEzNCAyMDA5LTExLTI5IgorLXBhY2thZ2VfcmV2aXNpb249MS4zMTM0CisrVkVSU0lPTj0yLjQKKytUSU1FU1RBTVA9IiIKKytwYWNrYWdlX3JldmlzaW9uPTEuMzI5MworIAorICMgQmUgQm91cm5lIGNvbXBhdGlibGUKKyBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK0BAIC0xMDYsOSArMTA2LDYgQEAgX0xURUNIT19FT0YnCisgfQorIAorICMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCistIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KKy0jIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZAorLSMgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KKyBsdF91c2VyX2xvY2FsZT0KKyBsdF9zYWZlX2xvY2FsZT0KKyBmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK0BAIC0xMjEsMTUgKzExOCwxMyBAQCBkbworIAkgIGx0X3NhZmVfbG9jYWxlPVwiJGx0X3Zhcj1DOyBcJGx0X3NhZmVfbG9jYWxlXCIKKyAJZmkiCisgZG9uZQorK0xDX0FMTD1DCisrTEFOR1VBR0U9QworK2V4cG9ydCBMQU5HVUFHRSBMQ19BTEwKKyAKKyAkbHRfdW5zZXQgQ0RQQVRICisgCisgCistCistCistCistCistCisgIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisgIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyAjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorQEAgLTE0MCw3ICsxMzUsNyBAQCBwcm9ncGF0aD0iJDAiCisgCisgCisgOiAke0NQPSJjcCAtZiJ9CistOiAke0VDSE89JGFzX2VjaG99CisrdGVzdCAiJHtFQ0hPK3NldH0iID0gc2V0IHx8IEVDSE89JHthc19lY2hvLSdwcmludGYgJXNcbid9CisgOiAke0VHUkVQPSIvYmluL2dyZXAgLUUifQorIDogJHtGR1JFUD0iL2Jpbi9ncmVwIC1GIn0KKyA6ICR7R1JFUD0iL2Jpbi9ncmVwIn0KK0BAIC0xNDksNyArMTQ0LDcgQEAgcHJvZ3BhdGg9IiQwIgorIDogJHtNS0RJUj0ibWtkaXIifQorIDogJHtNVj0ibXYgLWYifQorIDogJHtSTT0icm0gLWYifQorLTogJHtTRUQ9Ii9tb3VudC9lbmRvci93aWxkZW5odS9sb2NhbC14ODZfNjQvYmluL3NlZCJ9CisrOiAke1NFRD0iL2Jpbi9zZWQifQorIDogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorIDogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorIAorQEAgLTE2OSw2ICsxNjQsMjcgQEAgSUZTPSIgCSRsdF9ubCIKKyBkaXJuYW1lPSJzLC9bXi9dKiQsLCIKKyBiYXNlbmFtZT0icyxeLiovLCwiCisgCisrIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisrIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorK2Z1bmNfZGlybmFtZSAoKQorK3sKKysgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAorKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorKyAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisrICAgIGVsc2UKKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisrICAgIGZpCisrfSAjIGZ1bmNfZGlybmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfYmFzZW5hbWUgZmlsZQorK2Z1bmNfYmFzZW5hbWUgKCkKKyt7CisrICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAorK30gIyBmdW5jX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyAjIHBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisgIyBjYWxsOgorQEAgLTE4MywxNyArMTk5LDMxIEBAIGJhc2VuYW1lPSJzLF4uKi8sLCIKKyAjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KKyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisgeworLSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKy0gIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKy0gIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCistICBlbHNlCistICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKy0gIGZpCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKKy19CisrICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisrICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKysgICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKysgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorKyAgICBlbHNlCisrICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorKyAgICBmaQorKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKKyt9ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisrIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKysjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKysjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisrIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorK2Z1bmNfc3RyaXBuYW1lICgpCisreworKyAgICBjYXNlICR7Mn0gaW4KKysgICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworKyAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKysgICAgZXNhYworK30gIyBmdW5jX3N0cmlwbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAKKy0jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS4KKyAKKyAjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCisgcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCitAQCAtMzc2LDYgKzQwNiwxNSBAQCBzZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJworICMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorIGRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKyAKKysjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVnZXggbWF0Y2hpbmcgZm9yIHRoZQorKyMgc3RyaW5nIGxpdGVyYWxseS4KKytzZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzLFtdLlteJFxcKlwvXSxcXCYsZycKKysKKysjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorKyMgd2hpY2ggY29udGFpbnMgZm9yd2FyZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCisrIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCisrbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworKworICMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisgIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJworICMgaW4gaW5wdXQgdG8gZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20gZXhwYW5zaW9uLgorQEAgLTQwNCw3ICs0NDMsNyBAQCBvcHRfd2FybmluZz06CisgIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCisgZnVuY19lY2hvICgpCisgeworLSAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAkKiIKKysgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0kKiIKKyB9CisgCisgIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCitAQCAtNDMwLDE0ICs0NjksMTQgQEAgZnVuY19lY2hvX2FsbCAoKQorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KKyBmdW5jX2Vycm9yICgpCisgeworLSAgICAkRUNITyAiJHByb2duYW1lJHttb2RlKzogfSRtb2RlOiAiJHsxKyIkQCJ9IDE+JjIKKysgICAgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH0iJHsxKyIkQCJ9IDE+JjIKKyB9CisgCisgIyBmdW5jX3dhcm5pbmcgYXJnLi4uCisgIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCisgZnVuY193YXJuaW5nICgpCisgeworLSAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogd2FybmluZzogIiR7MSsiJEAifSAxPiYyCisrICAgICRvcHRfd2FybmluZyAmJiAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfXdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorIAorICAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgICA6CitAQCAtNjU2LDE5ICs2OTUsMzUgQEAgZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCisgICAgIGZpCisgfQorIAorLQorLQorKyMgZnVuY190cl9zaAorKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisrIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCisrIyBub3QgaW4gdGhlIHNldCBhLXpBLVowLTlfIGFyZSByZXBsYWNlZCB3aXRoICdfJy4gRnVydGhlciwKKysjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorK2Z1bmNfdHJfc2ggKCkKKyt7CisrICBjYXNlICQxIGluCisrICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisrICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAncy9eXChbMC05XVwpL19cMS87IHMvW15hLXpBLVowLTlfXS9fL2cnYAorKyAgICA7OworKyAgKiApCisrICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCisrICAgIDs7CisrICBlc2FjCisrfQorIAorIAorICMgZnVuY192ZXJzaW9uCisgIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCisgZnVuY192ZXJzaW9uICgpCisgeworKyAgICAkb3B0X2RlYnVnCisrCisgICAgICRTRUQgLW4gJy8oQykvIWIgZ28KKyAJOm1vcmUKKyAJL1wuLyF7CisgCSAgTgorLQkgIHMvXG4jIC8vCisrCSAgcy9cbiMgLyAvCisgCSAgYiBtb3JlCisgCX0KKyAJOmdvCitAQCAtNjg1LDcgKzc0MCw5IEBAIGZ1bmNfdmVyc2lvbiAoKQorICMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorIGZ1bmNfdXNhZ2UgKCkKKyB7CistICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi1oLyB7CisrICAgICRvcHRfZGVidWcKKysKKysgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLiotLWhlbHAvIHsKKyAgICAgICAgIHMvXiMgLy8KKyAJcy9eIyAqJC8vCisgCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KK0BAIC03MDEsNyArNzU4LDEwIEBAIGZ1bmNfdXNhZ2UgKCkKKyAjIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCisgZnVuY19oZWxwICgpCisgeworKyAgICAkb3B0X2RlYnVnCisrCisgICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7CisrCTpwcmludAorICAgICAgICAgcy9eIyAvLworIAlzL14jICokLy8KKyAJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorQEAgLTcxNCw3ICs3NzQsMTEgQEAgZnVuY19oZWxwICgpCisgCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYChhdXRvbWFrZSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworIAlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoYXV0b2NvbmYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KKyAJcAorLSAgICAgfScgPCAiJHByb2dwYXRoIgorKwlkCisrICAgICB9CisrICAgICAvXiMgLiogaG9tZSBwYWdlOi9iIHByaW50CisrICAgICAvXiMgR2VuZXJhbCBoZWxwIHVzaW5nL2IgcHJpbnQKKysgICAgICcgPCAiJHByb2dwYXRoIgorICAgICByZXQ9JD8KKyAgICAgaWYgdGVzdCAteiAiJDEiOyB0aGVuCisgICAgICAgZXhpdCAkcmV0CitAQCAtNzI2LDEyICs3OTAsMzkgQEAgZnVuY19oZWxwICgpCisgIyBleGl0X2NtZC4KKyBmdW5jX21pc3NpbmdfYXJnICgpCisgeworLSAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMSIKKysgICAgJG9wdF9kZWJ1ZworKworKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCisgICAgIGV4aXRfY21kPWV4aXQKKyB9CisgCistZXhpdF9jbWQ9OgorIAorKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKKysjIFNldCBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcgc2hlbGwKKysjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0ZXIuCisrZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKKyt7CisrICAgIG15X3NlZF9zaG9ydF9vcHQ9JzFzL15cKC4uXCkuKiQvXDEvO3EnCisrICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworKworKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9vcHQiYAorKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAorK30gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbG9uZ29wdAorKyMgU2V0IGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9sb25nX29wdF9hcmcgc2hlbGwKKysjIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCisrZnVuY19zcGxpdF9sb25nX29wdCAoKQorK3sKKysgICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCisrICAgIG15X3NlZF9sb25nX2FyZz0nMXMvXi0tW149XSo9Ly8nCisrCisrICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAorKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorK30gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworK2V4aXRfY21kPToKKyAKKyAKKyAKK0BAIC03NDEsMjYgKzgzMiw2NCBAQCBtYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCisgbWFnaWNfZXhlPSIlJSVNQUdJQyBFWEUgdmFyaWFibGUlJSUiCisgCisgIyBHbG9iYWwgdmFyaWFibGVzLgorLSMgJG1vZGUgaXMgdW5zZXQKKyBub25vcHQ9CistZXhlY3V0ZV9kbGZpbGVzPQorIHByZXNlcnZlX2FyZ3M9CisgbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorIG8ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKKyBleHRyYWN0ZWRfYXJjaGl2ZXM9CisgZXh0cmFjdGVkX3NlcmlhbD0wCisgCistb3B0X2RyeV9ydW49ZmFsc2UKKy1vcHRfZmluaXNoPToKKy1vcHRfZHVwbGljYXRlX2RlcHM9ZmFsc2UKKy1vcHRfc2lsZW50PWZhbHNlCistb3B0X2RlYnVnPToKKy0KKyAjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyAjIHdpbGwgYmUgZXhlY2VkIGF0IHRoZSBlbmQuICBUaGlzIHByZXZlbnRzIGhlcmUtZG9jdW1lbnRzIGZyb20gYmVpbmcKKyAjIGxlZnQgb3ZlciBieSBzaGVsbHMuCisgZXhlY19jbWQ9CisgCisrIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKysjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKytmdW5jX2FwcGVuZCAoKQorK3sKKysgICAgZXZhbCAiJHsxfT1cJCR7MX1cJHsyfSIKKyt9ICMgZnVuY19hcHBlbmQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrIyBmdW5jX2FwcGVuZF9xdW90ZWQgdmFyIHZhbHVlCisrIyBRdW90ZSBWQUxVRSBhbmQgYXBwZW5kIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLCBzZXBhcmF0ZWQKKysjIGJ5IGEgc3BhY2UuCisrZnVuY19hcHBlbmRfcXVvdGVkICgpCisreworKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgorKyAgICBldmFsICIkezF9PVwkJHsxfVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrfSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCisrZnVuY19hcml0aCAoKQorK3sKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiR7QH0iYAorK30gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworKyMgZnVuY19sZW4gc3RyaW5nCisrIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorK2Z1bmNfbGVuICgpCisreworKyAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiR7MX0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKyt9ICMgZnVuY19sZW4gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisrCisrCisrIyBmdW5jX2xvMm8gb2JqZWN0CisrZnVuY19sbzJvICgpCisreworKyAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCisrfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKysKKysKKysjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorK2Z1bmNfeGZvcm0gKCkKKyt7CisrICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAorK30gIyBmdW5jX3hmb3JtIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorKworKworICMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyAjIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgorQEAgLTg1MCwxMzAgKzk3OSwyMDQgQEAgZnVuY19lbmFibGVfdGFnICgpCisgICBlc2FjCisgfQorIAorLSMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluCistIyB0aGUgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYGxpYnRvb2wgLS12ZXJzaW9uJyBoYXBwZW4gcXVpY2tseS4KKysjIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorKyMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKysjIHJlbGVhc2Ugb2YgbGlidG9vbC4KKytmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKKyB7CisrICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKysgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKysgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKysgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisrJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCisrX0xUX0VPRgorKyAgICAgIGVsc2UKKysgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCisrJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCisrJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorK19MVF9FT0YKKysgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyskcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCisrJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKytfTFRfRU9GCisrICAgIGZpCisgCistICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKy0gIGNhc2UgJDEgaW4KKy0gIGNsZWFufGNsZWF8Y2xlfGNsKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGV4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorLSAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKy0gICAgOzsKKy0gIGxpbmt8bGlufGxpfGwpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorLSAgICA7OworLSAgdW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCistICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CistICAgIDs7CistICBlc2FjCisrICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKysgIGZpCisrfQorKworKworKyMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorK2Nhc2UgJDEgaW4KKytjbGVhbnxjbGVhfGNsZXxjbCkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisrICA7OworK2ZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisraW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKysgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorKyAgOzsKKytsaW5rfGxpbnxsaXxsKQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisrICA7OworK3VuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorKyAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKysgIDs7CisrZXNhYworIAorLSAgIyBQYXJzZSBub24tbW9kZSBzcGVjaWZpYyBhcmd1bWVudHM6CistICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisrCisrCisrIyBPcHRpb24gZGVmYXVsdHM6Cisrb3B0X2RlYnVnPToKKytvcHRfZHJ5X3J1bj1mYWxzZQorK29wdF9jb25maWc9ZmFsc2UKKytvcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKKytvcHRfZmVhdHVyZXM9ZmFsc2UKKytvcHRfZmluaXNoPWZhbHNlCisrb3B0X2hlbHA9ZmFsc2UKKytvcHRfaGVscF9hbGw9ZmFsc2UKKytvcHRfc2lsZW50PToKKytvcHRfdmVyYm9zZT06Cisrb3B0X3NpbGVudD1mYWxzZQorK29wdF92ZXJib3NlPWZhbHNlCisrCisrCisrIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlCisrIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCisreworKyAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZworKyAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgb3B0PSIkMSIKKyAgICAgc2hpZnQKKy0KKyAgICAgY2FzZSAkb3B0IGluCistICAgICAgLS1jb25maWcpCQlmdW5jX2NvbmZpZwkJCQkJOzsKKy0KKy0gICAgICAtLWRlYnVnKQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKysgICAgICAtLWRlYnVnfC14KQlvcHRfZGVidWc9J3NldCAteCcKKyAJCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCistCQkJb3B0X2RlYnVnPSdzZXQgLXgnCisgCQkJJG9wdF9kZWJ1ZworIAkJCTs7CistCistICAgICAgLWRsb3BlbikJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworLQkJCWV4ZWN1dGVfZGxmaWxlcz0iJGV4ZWN1dGVfZGxmaWxlcyAkMSIKKy0JCQlzaGlmdAorKyAgICAgIC0tZHJ5LXJ1bnwtLWRyeXJ1bnwtbikKKysJCQlvcHRfZHJ5X3J1bj06CisgCQkJOzsKKy0KKy0gICAgICAtLWRyeS1ydW4gfCAtbikJb3B0X2RyeV9ydW49OgkJCQkJOzsKKy0gICAgICAtLWZlYXR1cmVzKSAgICAgICBmdW5jX2ZlYXR1cmVzCQkJCQk7OworLSAgICAgIC0tZmluaXNoKQkJbW9kZT0iZmluaXNoIgkJCQkJOzsKKy0gICAgICAtLW5vLWZpbmlzaCkJb3B0X2ZpbmlzaD1mYWxzZQkJCQk7OworLQorLSAgICAgIC0tbW9kZSkJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworLQkJCWNhc2UgJDEgaW4KKy0JCQkgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CistCQkJICBjbGVhbikJOzsKKy0JCQkgIGNvbXBpbGUpCTs7CistCQkJICBleGVjdXRlKQk7OworLQkJCSAgZmluaXNoKQk7OworLQkJCSAgaW5zdGFsbCkJOzsKKy0JCQkgIGxpbmspCQk7OworLQkJCSAgcmVsaW5rKQk7OworLQkJCSAgdW5pbnN0YWxsKQk7OworLQorLQkJCSAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCistCQkJICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgorLQkJCSAgICAgZXhpdF9jbWQ9ZXhpdAorLQkJCSAgICAgYnJlYWsKKy0JCQkgICAgIDs7CistCQkgICAgICAgIGVzYWMKKy0KKy0JCQltb2RlPSIkMSIKKysgICAgICAtLWNvbmZpZykKKysJCQlvcHRfY29uZmlnPToKKytmdW5jX2NvbmZpZworKwkJCTs7CisrICAgICAgLS1kbG9wZW58LWRsb3BlbikKKysJCQlvcHRhcmc9IiQxIgorKwkJCW9wdF9kbG9wZW49IiR7b3B0X2Rsb3Blbiskb3B0X2Rsb3BlbgorK30kb3B0YXJnIgorIAkJCXNoaWZ0CisgCQkJOzsKKy0KKyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorLQkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CistCistICAgICAgLS1xdWlldHwtLXNpbGVudCkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKy0JCQlvcHRfc2lsZW50PToKKy0JCQlvcHRfdmVyYm9zZT1mYWxzZQorKwkJCW9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06CisgCQkJOzsKKy0KKy0gICAgICAtLW5vLXF1aWV0fC0tbm8tc2lsZW50KQorLQkJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCistCQkJb3B0X3NpbGVudD1mYWxzZQorKyAgICAgIC0tZmVhdHVyZXMpCisrCQkJb3B0X2ZlYXR1cmVzPToKKytmdW5jX2ZlYXR1cmVzCisgCQkJOzsKKy0KKy0gICAgICAtLXZlcmJvc2V8IC12KQlwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkb3B0IgorKyAgICAgIC0tZmluaXNoKQorKwkJCW9wdF9maW5pc2g9OgorK3NldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKysJCQk7OworKyAgICAgIC0taGVscCkKKysJCQlvcHRfaGVscD06CisrCQkJOzsKKysgICAgICAtLWhlbHAtYWxsKQorKwkJCW9wdF9oZWxwX2FsbD06Cisrb3B0X2hlbHA9JzogaGVscC1hbGwnCisrCQkJOzsKKysgICAgICAtLW1vZGUpCisrCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCisrCQkJb3B0YXJnPSIkMSIKKysJCQlvcHRfbW9kZT0iJG9wdGFyZyIKKytjYXNlICRvcHRhcmcgaW4KKysgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisrICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworKworKyAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCisrICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgorKyAgICAgZXhpdF9jbWQ9ZXhpdAorKyAgICAgYnJlYWsKKysgICAgIDs7CisrZXNhYworKwkJCXNoaWZ0CisrCQkJOzsKKysgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorIAkJCW9wdF9zaWxlbnQ9ZmFsc2UKKy0JCQlvcHRfdmVyYm9zZT06CisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisgCQkJOzsKKy0KKy0gICAgICAtLW5vLXZlcmJvc2UpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisrICAgICAgLS1uby12ZXJib3NlKQorIAkJCW9wdF92ZXJib3NlPWZhbHNlCisrZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisgCQkJOzsKKy0KKy0gICAgICAtLXRhZykJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworLQkJCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQgJDEiCistCQkJZnVuY19lbmFibGVfdGFnICIkMSIJIyB0YWduYW1lIGlzIHNldCBoZXJlCisrICAgICAgLS1zaWxlbnR8LS1xdWlldCkKKysJCQlvcHRfc2lsZW50PToKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKysgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisrCQkJOzsKKysgICAgICAtLXZlcmJvc2V8LXYpCisrCQkJb3B0X3ZlcmJvc2U9OgorK2Z1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgorK29wdF9zaWxlbnQ9ZmFsc2UKKysJCQk7OworKyAgICAgIC0tdGFnKQorKwkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhaworKwkJCW9wdGFyZz0iJDEiCisrCQkJb3B0X3RhZz0iJG9wdGFyZyIKKytmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCAkb3B0YXJnIgorK2Z1bmNfZW5hYmxlX3RhZyAiJG9wdGFyZyIKKyAJCQlzaGlmdAorIAkJCTs7CisgCisrICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQk7OworKyAgICAgIC0taGVscCkJCWZ1bmNfaGVscAkJCQk7OworKyAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCTs7CisrCisgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9uczoKKy0gICAgICAtZGxvcGVuPSp8LS1tb2RlPSp8LS10YWc9KikKKy0JCQlmdW5jX29wdF9zcGxpdCAiJG9wdCIKKy0JCQlzZXQgZHVtbXkgIiRmdW5jX29wdF9zcGxpdF9vcHQiICIkZnVuY19vcHRfc3BsaXRfYXJnIiAkezErIiRAIn0KKysgICAgICAtLSo9KikKKysJCQlmdW5jX3NwbGl0X2xvbmdfb3B0ICIkb3B0IgorKwkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSIgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyIgJHsxKyIkQCJ9CisgCQkJc2hpZnQKKyAJCQk7OworIAorLSAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJCTs7CistICAgICAgLS1oZWxwKQkJb3B0X2hlbHA9OgkJCQkJOzsKKy0gICAgICAtLWhlbHAtYWxsKQlvcHRfaGVscD0nOiBoZWxwLWFsbCcJCQkJOzsKKy0gICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKy0KKy0gICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIgk7OworLQorLSAgICAgICopCQlub25vcHQ9IiRvcHQiCistCQkJYnJlYWsKKysgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorKyAgICAgIC1cPyp8LWgqfC1uKnwtdiopCisrCQkJZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRvcHQiCisrCQkJc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKysJCQlzaGlmdAorIAkJCTs7CisrCisrICAgICAgLS0pCQlicmVhawkJCQkJOzsKKysgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIiA7OworKyAgICAgICopCQlzZXQgZHVtbXkgIiRvcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgICBlc2FjCisgICBkb25lCisgCisrICAjIFZhbGlkYXRlIG9wdGlvbnM6CisrCisrICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAorKyAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisrICAgIG5vbm9wdD0iJG9wdCIKKysgICAgc2hpZnQKKysgIGZpCisrCisrICAjIHByZXNlcnZlIC0tZGVidWcKKysgIHRlc3QgIiRvcHRfZGVidWciID0gOiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKyAKKyAgIGNhc2UgJGhvc3QgaW4KKyAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKiB8ICpzb2xhcmlzMiogKQorQEAgLTk4MSw4MiArMTE4NCw0NCBAQCBmdW5jX2VuYWJsZV90YWcgKCkKKyAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgICA7OworICAgICAqKQorLSAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9kdXBsaWNhdGVfZGVwcworKyAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcworICAgICAgIDs7CisgICBlc2FjCisgCistICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKy0gICMgYW55dGhpbmcgd2FzIHdyb25nLgorLSAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKy19CisrICAkb3B0X2hlbHAgfHwgeworKyAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisrICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorIAorLSMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCistIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorLSMgcmVsZWFzZSBvZiBsaWJ0b29sLgorLWZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQorLXsKKy0gIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorLSAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorLSAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorLSAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKy0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCistJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCistJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorLSRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KKy1fTFRfRU9GCistICAgICAgZWxzZQorLSAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKy0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCistJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKy0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCistX0xUX0VPRgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBjYXQgPiYyIDw8X0xUX0VPRgorLSRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorLSRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKy0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCistJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorLV9MVF9FT0YKKysgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCisrICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorICAgICBmaQorIAorLSAgICBleGl0ICRFWElUX01JU01BVENICistICBmaQorLX0KKy0KKysgICAgIyBEYXJ3aW4gc3Vja3MKKysgICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKyAKKy0jIyAtLS0tLS0tLS0tLSAjIworLSMjICAgIE1haW4uICAgICMjCistIyMgLS0tLS0tLS0tLS0gIyMKKy0KKy0kb3B0X2hlbHAgfHwgeworLSAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgorLSAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCistCistICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KKy0gICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorLSAgZmkKKysgICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKysgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgIiRvcHRfbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorKyAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKysgICAgICAkRUNITyAiJGhlbHAiIDE+JjIKKysgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKysgICAgZmkKKyAKKy0gIHRlc3QgLXogIiRtb2RlIiAmJiBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogeW91IG11c3Qgc3BlY2lmeSBhIE1PREUuIgorKyAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisrICAgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisrICAgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorKyAgfQorIAorIAorLSAgIyBEYXJ3aW4gc3Vja3MKKy0gIGV2YWwgInN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIiIKKysgICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQKKysgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCisrfQorIAorIAorLSAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KKy0gIGlmIHRlc3QgLW4gIiRleGVjdXRlX2RsZmlsZXMiICYmIHRlc3QgIiRtb2RlIiAhPSBleGVjdXRlOyB0aGVuCistICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKy0gICAgJEVDSE8gIiRoZWxwIiAxPiYyCistICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorLSAgZmkKKyAKKy0gICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKy0gIGdlbmVyaWNfaGVscD0iJGhlbHAiCistICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorLX0KKyAKKysjIyAtLS0tLS0tLS0tLSAjIworKyMjICAgIE1haW4uICAgICMjCisrIyMgLS0tLS0tLS0tLS0gIyMKKyAKKyAjIGZ1bmNfbGFsaWJfcCBmaWxlCisgIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorQEAgLTExMjEsMTIgKzEyODYsOSBAQCBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKKyAjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKKyB7CistICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIiCistICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiOyB0aGVuCistCWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKy0JZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCWZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKKy0gICAgZmkKKysgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgorKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKysgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorIH0KKyAKKyAjIGZ1bmNfbHR3cmFwcGVyX3AgZmlsZQorQEAgLTExNDksNyArMTMxMSw3IEBAIGZ1bmNfZXhlY3V0ZV9jbWRzICgpCisgICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgICBJRlM9JHNhdmVfaWZzCistICAgICAgZXZhbCAiY21kPVwiJGNtZFwiIgorKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCisgICAgIGRvbmUKKyAgICAgSUZTPSRzYXZlX2lmcworQEAgLTExNzIsNiArMTMzNCwzNyBAQCBmdW5jX3NvdXJjZSAoKQorIH0KKyAKKyAKKysjIGZ1bmNfcmVzb2x2ZV9zeXNyb290IFBBVEgKKysjIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bworKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrZnVuY19yZXNvbHZlX3N5c3Jvb3QgKCkKKyt7CisrICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKysgIGNhc2UgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCBpbgorKyAgPSopCisrICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKysgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0PSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICA7OworKyAgZXNhYworK30KKysKKysjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKysjIElmIFBBVEggYmVnaW5zIHdpdGggdGhlIHN5c3Jvb3QsIHJlcGxhY2UgaXQgd2l0aCA9IGFuZAorKyMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KKytmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQorK3sKKysgIGNhc2UgIiRsdF9zeXNyb290OiQxIiBpbgorKyAgPyo6IiRsdF9zeXNyb290IiopCisrICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorKyAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Ij0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKyAgICA7OworKyAgKikKKysgICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KKysgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCisrICAgIDs7CisrICBlc2FjCisrfQorKworICMgZnVuY19pbmZlcl90YWcgYXJnCisgIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCisgIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KK0BAIC0xMTg0LDggKzEzNzcsNyBAQCBmdW5jX2luZmVyX3RhZyAoKQorICAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgIENDX3F1b3RlZD0KKyAgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKy0gICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCistCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCWZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgICAgICAgZG9uZQorICAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKyAgICAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKK0BAIC0xMjA0LDggKzEzOTYsNyBAQCBmdW5jX2luZmVyX3RhZyAoKQorIAkgICAgQ0NfcXVvdGVkPQorIAkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisgCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKy0JICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0JICAgICAgQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKKyAJICAgIGRvbmUKKyAJICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKyAJICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAorQEAgLTEyNzQsNiArMTQ2NSw0ODYgQEAgRU9GCisgICAgIH0KKyB9CisgCisrCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsCisrIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCisrIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorKyMgaW4gJGJ1aWxkJ3MgJFBBVEguCisrIworKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQsIGFuZCB3aWxsCisrIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCisrZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCisrICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisrICAgICMgY29tbWFuZCBpcyBub3QgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorKyAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgorKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKysgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXB9IjsgdGhlbgorKyAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8CisrICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisrICAgIGVsc2UKKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKysgICAgZmkKKysgIGZpCisrfQorKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKKysjICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYSBjb3JyZWN0bHkKKysjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKysjICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgorKyMKKysjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisrIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdC4KKysjIFVuY29udmVydGlibGUgZmlsZSAoZGlyZWN0b3J5KSBuYW1lcyBpbiBBUkcgYXJlIHNraXBwZWQ7IGlmIG5vIGRpcmVjdG9yeSBuYW1lcworKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorK2Z1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCisrICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIG9sZElGUz0kSUZTCisrICAgIElGUz06CisrICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisrICAgICAgSUZTPSRvbGRJRlMKKysgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIgorKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIgOyB0aGVuCisrICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCisrICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgICAgICBlbHNlCisrICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBkb25lCisrICAgIElGUz0kb2xkSUZTCisrICBmaQorK30KKysjIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMgorKworKworKyMgZnVuY19jeWdwYXRoIEFSR1MuLi4KKysjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKysjIHdoZW4gKDEpICRidWlsZCBpcyAqbml4IGFuZCBDeWd3aW4gaXMgaG9zdGVkIHZpYSBhIHdpbmUgZW52aXJvbm1lbnQ7IG9yICgyKQorKyMgJGJ1aWxkIGlzIE1TWVMgYW5kICRob3N0IGlzIEN5Z3dpbiwgb3IgKDMpICRidWlsZCBpcyBDeWd3aW4uIEluIGNhc2UgKDEpIG9yCisrIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorKyMgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbiB3MzIgZm9ybWF0LCBhcyBwcmV2aW91c2x5IGNvbnZlcnRlZAorKyMgZnJvbSAkYnVpbGQncyAqbml4IG9yIE1TWVMgZm9ybWF0KS4gSW4gY2FzZSAoMyksIHJldHVybnMgdGhlIHczMiBmaWxlIG5hbWUKKysjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorKyMgQ3lnd2luIGZvcm1hdCkuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yLgorKyMKKysjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKysjIGJlIGNvbnZlcnRlZC4KKysjCisrIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorKyMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCisrZnVuY19jeWdwYXRoICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAorKyAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KKysgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKysgICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorKyAgICBmaQorKyAgZWxzZQorKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorKyAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogXGAkTFRfQ1lHUEFUSCciCisrICBmaQorK30KKysjZW5kOiBmdW5jX2N5Z3BhdGgKKysKKysKKysjIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgb3IgcGF0aCBBUkcgZnJvbSBNU1lTIGZvcm1hdCB0byB3MzIgZm9ybWF0LiAgUmV0dXJuCisrIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgorK2Z1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisrICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQ9YCggY21kIC8vYyBlY2hvICIkMSIgKSAyPi9kZXYvbnVsbCB8CisrICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyt9CisrI2VuZDogZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX2NoZWNrIEFSRzEgQVJHMgorKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorKyMgZm9ybWF0IGluIEFSRzIuIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUgKHJlc2V0dGluZworKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIEFSRzEpLgorK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKysgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgorKyAgICBmdW5jX2Vycm9yICIgIFxgJDEnIgorKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKysgICAgIyBGYWxsYmFjazoKKysgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX2NoZWNrCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayBGUk9NX1BBVEhTRVAgVE9fUEFUSFNFUCBGUk9NX1BBVEggVE9fUEFUSAorKyMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorKyMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZworKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KKytmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKysgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCisrICAgIGZ1bmNfZXJyb3IgIiAgXGAkMyciCisrICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorKyAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKKysgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorKyAgICBpZiB0ZXN0ICJ4JDEiICE9ICJ4JDIiOyB0aGVuCisrICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCisrICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorKyAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCisrICAgIGVsc2UKKysgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzIgorKyAgICBmaQorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworKyMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKKysjIGFuZCBhcHBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgQkFDS1BBVC4KKytmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBjYXNlICQ0IGluCisrICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICA7OworKyAgZXNhYworKyAgY2FzZSAkNCBpbgorKyAgJDIgKSBmdW5jX2FwcGVuZCBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgIiQzIgorKyAgICA7OworKyAgZXNhYworK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKKysKKysKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIGludm9rZWQgdmlhIGAkdG9faG9zdF9maWxlX2NtZCBBUkcnCisrIworKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKysjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorKworKworKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisrIyBDb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisrIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY190b19ob3N0X2ZpbGUgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCisrfQorKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCisrCisrCisrIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorKyMgY29udmVydHMgdGhlIGZpbGUgbmFtZSBBUkcgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHRvb2xjaGFpbiBmb3JtYXQuIFJldHVybgorKyMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKKysjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorK2Z1bmNfdG9fdG9vbF9maWxlICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgY2FzZSAsJDIsIGluCisrICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQorKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kMQorKyAgICAgIDs7CisrICAgICopCisrICAgICAgJHRvX3Rvb2xfZmlsZV9jbWQgIiQxIgorKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdD0kZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0CisrICAgICAgOzsKKysgIGVzYWMKKyt9CisrIyBlbmQgZnVuY190b190b29sX2ZpbGUKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCisrIyBDb3B5IEFSRyB0byBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQorK3sKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisrIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKysjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKysjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KKytmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKysgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorKyAgICAjIGJlY2F1c2UgJGJ1aWxkIGlzIGN5Z3dpbiwgd2UgY2FsbCAidGhlIiBjeWdwYXRoIGluICRQQVRIOyBubyBuZWVkIHRvIHVzZQorKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9YGN5Z3BhdGggLW0gIiQxImAKKysgIGZpCisrICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisrIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisrIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKysgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorKyAgZmkKKysgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisrCisrCisrIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAorKyMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAorKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKysgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisrICBmaQorKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKworKworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X3BhdGhfY21kIEFSRycKKysjCisrIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgorKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorKyMKKysjIFBhdGggc2VwYXJhdG9ycyBhcmUgYWxzbyBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvICRob3N0IGZvcm1hdC4gIElmCisrIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKysjIGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpIG9uIG91dHB1dC4KKysjCisrIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorKyMgICBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbiAgICA6IGZ1bmNfY29udmVydF9maWxlX1hfdG9fWSAoKQorKyMgICBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb24gICAgICAgICA6IGZ1bmNfY29udmVydF9wYXRoX1hfdG9fWSAoKQorKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKysjIHNhbWUuICBJZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIG5ldyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zLAorKyMgdGhlIHR3byBuZXcgZnVuY3Rpb25zIG11c3QgZm9sbG93IHRoaXMgcGF0dGVybiwgb3IgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKKysjIHdpbGwgYnJlYWsuCisrCisrCisrIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorKyMgRW5zdXJlcyB0aGF0IGZ1bmN0aW9uICJwb2ludGVyIiB2YXJpYWJsZSAkdG9faG9zdF9wYXRoX2NtZCBpcyBzZXQgdG8gdGhlCisrIyBhcHByb3ByaWF0ZSB2YWx1ZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mICR0b19ob3N0X2ZpbGVfY21kLgorK3RvX2hvc3RfcGF0aF9jbWQ9CisrZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KKysgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorKyAgICB0b19ob3N0X3BhdGhfY21kPSJmdW5jX2NvbnZlcnRfcGF0aF8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0iCisrICBmaQorK30KKysKKysKKysjIGZ1bmNfdG9faG9zdF9wYXRoIEFSRworKyMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKysjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KKytmdW5jX3RvX2hvc3RfcGF0aCAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisrICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCisrfQorKyMgZW5kIGZ1bmNfdG9faG9zdF9wYXRoCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9ub29wIEFSRworKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX25vb3AgKCkKKyt7CisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKysjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbSBBUkcuICBNU1lTCisrICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CisrICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKysgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisrICBmaQorK30KKysjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKysjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisrIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisrICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKysgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKKysKKysKKysjIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAorKyMgYSB3b3JraW5nIHdpbmVwYXRoLiAgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorKyAgZmkKKyt9CisrIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMgorKworKworKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gQVJHCisrIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisrIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCisrZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luCisrCisrCisrIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luIEFSRworKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQgaW4gYQorKyMgYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdCBpbgorKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorK2Z1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisrICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorKyAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisrICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisrICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKysgICAgZnVuY19jeWdwYXRoIC11IC1wICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisrICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisrICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisrICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKysgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKysgIGZpCisrfQorKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4KKysKKysKKyAjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorIGZ1bmNfbW9kZV9jb21waWxlICgpCisgeworQEAgLTEzMTQsMTIgKzE5ODUsMTIgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAJICA7OworIAorIAktcGllIHwgLWZwaWUgfCAtZlBJRSkKKy0gICAgICAgICAgcGllX2ZsYWc9IiRwaWVfZmxhZyAkYXJnIgorKyAgICAgICAgICBmdW5jX2FwcGVuZCBwaWVfZmxhZyAiICRhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAorIAktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorLQkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAorQEAgLTEzNDAsMTUgKzIwMTEsMTQgQEAgZnVuY19tb2RlX2NvbXBpbGUgKCkKKyAJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKKyAJICBmb3IgYXJnIGluICRhcmdzOyBkbworIAkgICAgSUZTPSIkc2F2ZV9pZnMiCistCSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorLQkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgICAgZnVuY19hcHBlbmRfcXVvdGVkIGxhc3RhcmcgIiRhcmciCisgCSAgZG9uZQorIAkgIElGUz0iJHNhdmVfaWZzIgorIAkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisgCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCisgCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCistCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorKwkgIGZ1bmNfYXBwZW5kIGJhc2VfY29tcGlsZSAiICRsYXN0YXJnIgorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAKK0BAIC0xMzY0LDggKzIwMzQsNyBAQCBmdW5jX21vZGVfY29tcGlsZSAoKQorICAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKKyAKKyAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIHByZXZpb3VzIGFyZ3VtZW50LgorLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsYXN0YXJnIgorLSAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmRfcXVvdGVkIGJhc2VfY29tcGlsZSAiJGxhc3RhcmciCisgICAgIGRvbmUgIyBmb3IgYXJnCisgCisgICAgIGNhc2UgJGFyZ19tb2RlIGluCitAQCAtMTQ5NiwxNyArMjE2NSwxNiBAQCBjb21waWxlci4iCisgCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKyAJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICAgZmkKKy0gICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiIKKysgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJG91dHB1dF9vYmoiCisgICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCisgICAgIGZpCisgCisgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKy0gICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJGxvY2tmaWxlIgorKyAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgorICAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorIAorLSAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKy0gICAgICBldmFsICJzcmNmaWxlPVwiJGZpeF9zcmNmaWxlX3BhdGhcIiIKKy0gICAgZmkKKysgICAgZnVuY190b190b29sX2ZpbGUgIiRzcmNmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICBzcmNmaWxlPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKyAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCisgICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIAorQEAgLTE1MjYsNyArMjE5NCw3IEBAIGNvbXBpbGVyLiIKKyAKKyAgICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KKyAJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCistCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCisgICAgICAgZmkKKyAKKyAgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCitAQCAtMTU3MywxMSArMjI0MSwxMSBAQCBjb21waWxlci4iCisgCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgICBmaQorICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCistCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRvYmoiCisrCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgorICAgICAgIGZpCisgCisgICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCistICAgICAgY29tbWFuZD0iJGNvbW1hbmQkc3VwcHJlc3Nfb3V0cHV0IgorKyAgICAgIGZ1bmNfYXBwZW5kIGNvbW1hbmQgIiRzdXBwcmVzc19vdXRwdXQiCisgICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKyAKK0BAIC0xNjIyLDEzICsyMjkwLDEzIEBAIGNvbXBpbGVyLiIKKyB9CisgCisgJG9wdF9oZWxwIHx8IHsKKy0gIHRlc3QgIiRtb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9CisrICB0ZXN0ICIkb3B0X21vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KKyB9CisgCisgZnVuY19tb2RlX2hlbHAgKCkKKyB7CisgICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorLSAgICBjYXNlICRtb2RlIGluCisrICAgIGNhc2UgJG9wdF9tb2RlIGluCisgICAgICAgIiIpCisgICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgICMgYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZmlsZS4KK0BAIC0xNjU5LDggKzIzMjcsOCBAQCBUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKyAKKyAgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCistICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQorLSAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkaW5nIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisrICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQorKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgICAtV2MsRkxBRyAgICAgICAgICBwYXNzIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCitAQCAtMTgwNCw3ICsyNDcyLDcgQEAgT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICAgOzsKKyAKKyAgICAgICAqKQorLSAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAgICAgICAgIDs7CisgICAgIGVzYWMKKyAKK0BAIC0xODE5LDEzICsyNDg3LDEzIEBAIGlmICRvcHRfaGVscDsgdGhlbgorICAgZWxzZQorICAgICB7CisgICAgICAgZnVuY19oZWxwIG5vZXhpdAorLSAgICAgIGZvciBtb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKysgICAgICBmb3Igb3B0X21vZGUgaW4gY29tcGlsZSBsaW5rIGV4ZWN1dGUgaW5zdGFsbCBmaW5pc2ggdW5pbnN0YWxsIGNsZWFuOyBkbworIAlmdW5jX21vZGVfaGVscAorICAgICAgIGRvbmUKKyAgICAgfSB8IHNlZCAtbiAnMXA7IDIsJHMvXlVzYWdlOi8gIG9yOiAvcCcKKyAgICAgeworICAgICAgIGZ1bmNfaGVscCBub2V4aXQKKy0gICAgICBmb3IgbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisrICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKyAJZWNobworIAlmdW5jX21vZGVfaGVscAorICAgICAgIGRvbmUKK0BAIC0xODU0LDEzICsyNTIyLDE2IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKyAKKyAgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKy0gICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKysgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCisgICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKKyAJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorIAorICAgICAgIGRpcj0KKyAgICAgICBjYXNlICRmaWxlIGluCisgICAgICAgKi5sYSkKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKysKKyAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKyAJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKyAJICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorQEAgLTE4ODIsNyArMjU1Myw3IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgCisgCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgorLQkgIGRpcj0iJGRpci8kb2JqZGlyIgorKwkgIGZ1bmNfYXBwZW5kIGRpciAiLyRvYmpkaXIiCisgCWVsc2UKKyAJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciCitAQCAtMTkwNywxMCArMjU3OCwxMCBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorICAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKyAKKyAgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorLSAgICAgIGlmIGV2YWwgdGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIjsgdGhlbgorLQlldmFsICRzaGxpYnBhdGhfdmFyPVwkZGlyCisrICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKysJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgIGVsc2UKKy0JZXZhbCAkc2hsaWJwYXRoX3Zhcj1cJGRpcjpcJCRzaGxpYnBhdGhfdmFyCisrCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgIGZpCisgICAgIGRvbmUKKyAKK0BAIC0xOTM5LDggKzI2MTAsNyBAQCBmdW5jX21vZGVfZXhlY3V0ZSAoKQorIAk7OworICAgICAgIGVzYWMKKyAgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmaWxlIgorLSAgICAgIGFyZ3M9IiRhcmdzICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYXJncyAiJGZpbGUiCisgICAgIGRvbmUKKyAKKyAgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KK0BAIC0xOTcyLDIyICsyNjQyLDU5IEBAIGZ1bmNfbW9kZV9leGVjdXRlICgpCisgICAgIGZpCisgfQorIAorLXRlc3QgIiRtb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisrdGVzdCAiJG9wdF9tb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgorIGZ1bmNfbW9kZV9maW5pc2ggKCkKKyB7CisgICAgICRvcHRfZGVidWcKKy0gICAgbGliZGlycz0iJG5vbm9wdCIKKysgICAgbGlicz0KKysgICAgbGliZGlycz0KKyAgICAgYWRtaW5jbWRzPQorIAorLSAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorLSAgICAgIGZvciBkaXIKKy0gICAgICBkbworLQlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgorLSAgICAgIGRvbmUKKysgICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9CisrICAgIGRvCisrICAgICAgaWYgdGVzdCAtZCAiJG9wdCI7IHRoZW4KKysJZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCisgCisrICAgICAgZWxpZiB0ZXN0IC1mICIkb3B0IjsgdGhlbgorKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgorKwkgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkb3B0IgorKwllbHNlCisrCSAgZnVuY193YXJuaW5nICJcYCRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKysJZmkKKysKKysgICAgICBlbHNlCisrCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgXGAkb3B0JyIKKysgICAgICBmaQorKyAgICBkb25lCisrCisrICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgorKyAgICAgIGlmIHRlc3QgLW4gIiRsdF9zeXNyb290IjsgdGhlbgorKyAgICAgICAgc3lzcm9vdF9yZWdleD1gJEVDSE8gIiRsdF9zeXNyb290IiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKysgICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzcm9vdF9jbWQ9CisrICAgICAgZmkKKysKKysgICAgICAjIFJlbW92ZSBzeXNyb290IHJlZmVyZW5jZXMKKysgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKysgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisrICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kIFxgPScgcHJlZml4ZXMgZnJvbSAkbGliIgorKyAgICAgICAgZG9uZQorKyAgICAgIGVsc2UKKysgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisrICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbworKwkgIHNlZCAtZSAiJHtzeXNyb290X2NtZH0gcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKysJICAgID4gJHRtcGRpci90bXAtbGEKKysJICBtdiAtZiAkdG1wZGlyL3RtcC1sYSAkbGliCisrCWRvbmUKKysgICAgICAgICR7Uk19ciAiJHRtcGRpciIKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisgCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKyAJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgZmluaXNoIGNvbW1hbmRzLgorQEAgLTE5OTcsNyArMjcwNCw3IEBAIGZ1bmNfbW9kZV9maW5pc2ggKCkKKyAJaWYgdGVzdCAtbiAiJGZpbmlzaF9ldmFsIjsgdGhlbgorIAkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKyAJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorLQkgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kcyIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBmdW5jX2FwcGVuZCBhZG1pbmNtZHMgIgorICAgICAgICAkY21kcyIKKyAJZmkKKyAgICAgICBkb25lCitAQCAtMjAwNiw1MyArMjcxMyw1NSBAQCBmdW5jX21vZGVfZmluaXNoICgpCisgICAgICMgRXhpdCBoZXJlIGlmIHRoZXkgd2FudGVkIHNpbGVudCBtb2RlLgorICAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKyAKKy0gICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKy0gICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorLSAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworLSAgICAgICRFQ0hPICIgICAkbGliZGlyIgorLSAgICBkb25lCistICAgIGVjaG8KKy0gICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCistICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorLSAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlIFxgLUxMSUJESVInIgorLSAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCistICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorLSAgICAgIGVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCistICAgICAgZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorLSAgICBmaQorLSAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCistICAgICAgZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCistICAgICAgZWNobyAiICAgICBkdXJpbmcgbGlua2luZyIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCistICAgICAgbGliZGlyPUxJQkRJUgorLSAgICAgIGV2YWwgImZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisrICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisrCSRFQ0hPICIgICAkbGliZGlyIgorKyAgICAgIGRvbmUKKysgICAgICBlY2hvCisrICAgICAgZWNobyAiSWYgeW91IGV2ZXIgaGFwcGVuIHRvIHdhbnQgdG8gbGluayBhZ2FpbnN0IGluc3RhbGxlZCBsaWJyYXJpZXMiCisrICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisrICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKysgICAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisrICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisrCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisrCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKysJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisrCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisrICAgICAgZmkKKysgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJbGliZGlyPUxJQkRJUgorKwlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgCistICAgICAgJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKy0gICAgZmkKKy0gICAgaWYgdGVzdCAtbiAiJGFkbWluY21kcyI7IHRoZW4KKy0gICAgICAkRUNITyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgcnVuIHRoZXNlIGNvbW1hbmRzOiRhZG1pbmNtZHMiCistICAgIGZpCistICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCistICAgICAgZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCistICAgIGZpCistICAgIGVjaG8KKysJJEVDSE8gIiAgIC0gdXNlIHRoZSBcYCRmbGFnJyBsaW5rZXIgZmxhZyIKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisrCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKysgICAgICBmaQorKyAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisrCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorKyAgICAgIGZpCisrICAgICAgZWNobworIAorLSAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKy0gICAgY2FzZSAkaG9zdCBpbgorLSAgICAgIHNvbGFyaXMyLls2Nzg5XXxzb2xhcmlzMi4xWzAtOV0pCistICAgICAgICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorLQllY2hvICJwYWdlcy4iCistCTs7CistICAgICAgKikKKy0gICAgICAgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorLSAgICAgICAgOzsKKy0gICAgZXNhYworLSAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorKyAgICAgIGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorKyAgICAgIGNhc2UgJGhvc3QgaW4KKysJc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKysJICBlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSwgY3JsZSgxKSBhbmQgbGQuc28oOCkgbWFudWFsIgorKwkgIGVjaG8gInBhZ2VzLiIKKysJICA7OworKwkqKQorKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorKwkgIDs7CisrICAgICAgZXNhYworKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisrICAgIGZpCisgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworIH0KKyAKKy10ZXN0ICIkbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KKyt0ZXN0ICIkb3B0X21vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisgCisgCisgIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK0BAIC0yMDc3LDcgKzI3ODYsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0gICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgaW5zdGFsbF9zaGFyZWRfcHJvZz0kaW5zdGFsbF9wcm9nCisgICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICAqW1xcXCAvXWNwXCAqKSBpbnN0YWxsX2NwPTogOzsKK0BAIC0yMDk3LDcgKzI4MDYsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorICAgICBkbworICAgICAgIGFyZzI9CisgICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCistCWZpbGVzPSIkZmlsZXMgJGRlc3QiCisrCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCisgCWRlc3Q9JGFyZworIAljb250aW51ZQorICAgICAgIGZpCitAQCAtMjEzNSwxMSArMjg0NCwxMSBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAorICAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKy0gICAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2cgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKyAgICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KKyAJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZzIiCisgICAgICAgZmkKKy0gICAgICBpbnN0YWxsX3NoYXJlZF9wcm9nPSIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgZG9uZQorIAorICAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCitAQCAtMjE1MSw3ICsyODYwLDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgICBpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCisgCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiCistCWluc3RhbGxfc2hhcmVkX3Byb2c9IiRpbnN0YWxsX3NoYXJlZF9wcm9nIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiIC1tICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICBmaQorICAgICBmaQorIAorQEAgLTIyMDksMTAgKzI5MTgsMTMgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgICBjYXNlICRmaWxlIGluCisgICAgICAgKi4kbGliZXh0KQorIAkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorLQlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKKysJZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRmaWxlIgorIAk7OworIAorICAgICAgICoubGEpCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKysJZmlsZT0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisrCisgCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisgCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCisgCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCitAQCAtMjIyNiwyMyArMjkzOCwzMCBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorIAkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisrCSAgKikgZnVuY19hcHBlbmQgY3VycmVudF9saWJkaXJzICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWVsc2UKKyAJICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCisgCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZ1dHVyZV9saWJkaXJzPSIkZnV0dXJlX2xpYmRpcnMgJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlmaQorIAorIAlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKyAJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0JZGlyPSIkZGlyJG9iamRpciIKKysJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgorIAorIAlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisrICAgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkbGliZGlyIgorKyAgICAgIGRlc3RsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworKyAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGRlc3RkaXIiCisrICAgICAgc19kZXN0ZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKysKKyAJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorLQkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAorKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIlgkc19kZXN0ZGlyIiB8ICRYc2VkIC1lICJzJSRkZXN0bGliZGlyXCQlJSJgCisgCisgCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAorIAkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKK0BAIC0yMzE1LDcgKzMwMzQsNyBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworIAorIAkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCistCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisrCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorIAk7OworIAorICAgICAgICoubG8pCitAQCAtMjUwMyw3ICszMjIyLDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorIAorLSAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIiAmJiAkb3B0X2ZpbmlzaDsgdGhlbgorKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCisgICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKKyAgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCitAQCAtMjUxMiw3ICszMjMxLDcgQEAgZnVuY19tb2RlX2luc3RhbGwgKCkKKyAgICAgZmkKKyB9CisgCistdGVzdCAiJG1vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKyt0ZXN0ICIkb3B0X21vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKyAKKyAKKyAjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorQEAgLTI1NTksNiArMzI3OCwxOCBAQCBleHRlcm4gXCJDXCIgeworICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1Xc3RyaWN0LXByb3RvdHlwZXNcIgorICNlbmRpZgorIAorKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisrLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisrICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2VsaWYgZGVmaW5lZChfX29zZl9fKQorKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisrI2Vsc2UKKysjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorKyNlbmRpZgorKworIC8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisgIgorIAorQEAgLTI1NzAsMjEgKzMzMDEsMjIgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisgCSAgcHJvZ2ZpbGVzPWAkRUNITyAiJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorIAkgIGZvciBwcm9nZmlsZSBpbiAkcHJvZ2ZpbGVzOyBkbworLQkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRwcm9nZmlsZSciCistCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRwcm9nZmlsZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisrCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHByb2dmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgorKwkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKyAJICBkb25lCisgCisgCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCistCSAgICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKysJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisgCSAgICB9CisgCSAgZmkKKyAKKyAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgeworLQkgICAgICAkRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKy0JICAgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisrCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisgCSAgICB9CisgCSAgZmkKKyAKK0BAIC0yNTkzLDIzICszMzI1LDIzIEBAIGV4dGVybiBcIkNcIiB7CisgCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAJICAgICAgJFJNICRleHBvcnRfc3ltYm9scworLQkgICAgICAke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyA8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyIKKysJICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisgCSAgICAgIGNhc2UgJGhvc3QgaW4KKyAJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCistICAgICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCistICAgICAgICAgICAgICAgIGNhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgCSAgICAgICAgOzsKKyAJICAgICAgZXNhYworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgICRvcHRfZHJ5X3J1biB8fCB7CistCSAgICAgICR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKy0JICAgICAgJEdSRVAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVAorLQkgICAgICAkTVYgIiRubGlzdCJUICIkbmxpc3QiCisrCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworKwkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJworKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworIAkgICAgICBjYXNlICRob3N0IGluCisgCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCistCSAgICAgICAgICBlY2hvIEVYUE9SVFMgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIgorLQkgICAgICAgICAgY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiCisrCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworIAkgICAgICAgICAgOzsKKyAJICAgICAgZXNhYworIAkgICAgfQorQEAgLTI2MjAsMTAgKzMzNTIsNTIgQEAgZXh0ZXJuIFwiQ1wiIHsKKyAJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisgCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKyAJICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCSAgJG9wdF9kcnlfcnVuIHx8IHsKKy0JICAgICRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCIKKy0JICAgIGV2YWwgIiROTSAkZGxwcmVmaWxlIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKy0JICB9CisrICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKysJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorKwkgICAgICAjIGlmIGFuIGltcG9ydCBsaWJyYXJ5LCB3ZSBuZWVkIHRvIG9idGFpbiBkbG5hbWUKKysJICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCisrCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKKysJICAgICAgICBldmFsICJjdXJyX2xhZmlsZT1cJGxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0IgorKwkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIiCisrCSAgICAgICAgaWYgdGVzdCAtbiAiJGN1cnJfbGFmaWxlIiAmJiBmdW5jX2xhbGliX3AgIiRjdXJyX2xhZmlsZSI7IHRoZW4KKysJICAgICAgICAgICMgVXNlIHN1YnNoZWxsLCB0byBhdm9pZCBjbG9iYmVyaW5nIGN1cnJlbnQgdmFyaWFibGUgdmFsdWVzCisrCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCisrCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsbmFtZSIgOyB0aGVuCisrCSAgICAgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGVfZGxuYW1lIgorKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorKwkgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICAjIG5vIGxhZmlsZS4gdXNlciBleHBsaWNpdGx5IHJlcXVlc3RlZCAtZGxwcmVvcGVuIDxpbXBvcnQgbGlicmFyeT4uCisrCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKKysJICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9JHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0CisrCSAgICAgICAgICBmaQorKwkgICAgICAgIGZpCisrCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSIgOyB0aGVuCisrCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCisrCSAgICAgICAgICBlbHNlCisrCSAgICAgICAgICAgIGZ1bmNfd2FybmluZyAiQ291bGQgbm90IGNvbXB1dGUgRExMIG5hbWUgZnJvbSAkbmFtZSIKKysJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKysJICAgICAgICAgIGZpCisrCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAorKwkgICAgICAgICAgICAkU0VEIC1lICcvSSBfX2ltcC9kJyAtZSAncy9JIF9fbm1fL0QgLztzL19ubV9fLy8nID4+ICckbmxpc3QnIgorKwkgICAgICAgIH0KKysJICAgICAgZWxzZSAjIG5vdCBhbiBpbXBvcnQgbGliCisrCSAgICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKysJICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisrCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisrCSAgICAgICAgfQorKwkgICAgICBmaQorKwkgICAgOzsKKysJICAgICopCisrCSAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisrCSAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKysJICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysJICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorKwkgICAgICB9CisrCSAgICA7OworKyAgICAgICAgICBlc2FjCisgCWRvbmUKKyAKKyAJJG9wdF9kcnlfcnVuIHx8IHsKK0BAIC0yNjYxLDI2ICszNDM1LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgeworICAgY29uc3QgY2hhciAqbmFtZTsKKyAgIHZvaWQgKmFkZHJlc3M7CisgfSBsdF9kbHN5bWxpc3Q7CistIgorLQkgIGNhc2UgJGhvc3QgaW4KKy0JICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKy0JICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCistLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZQorLSAgIHJ1bnRpbWUgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uCistICAgb24gcHNldWRvLXJlbG9jcy4gICovIgorLQkgICAgbHRfZGxzeW1fY29uc3Q9IDs7CistCSAgKm9zZjUqKQorLQkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy0vKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhICovIgorLQkgICAgbHRfZGxzeW1fY29uc3Q9IDs7CistCSAgKikKKy0JICAgIGx0X2Rsc3ltX2NvbnN0PWNvbnN0IDs7CistCSAgZXNhYworLQorLQkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCistZXh0ZXJuICRsdF9kbHN5bV9jb25zdCBsdF9kbHN5bWxpc3QKKytleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CisgbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworLSRsdF9kbHN5bV9jb25zdCBsdF9kbHN5bWxpc3QKKytMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKKyBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQorIHtcCisgICB7IFwiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMCB9LCIKK0BAIC0yNzM2LDcgKzM0OTMsNyBAQCBzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworIAlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKyAJICBjYXNlICRhcmcgaW4KKyAJICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKKy0JICAqKSBzeW10YWJfY2ZsYWdzPSIkc3ltdGFiX2NmbGFncyAkYXJnIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OworIAkgIGVzYWMKKyAJZG9uZQorIAorQEAgLTI3OTYsOSArMzU1MywxMSBAQCBmdW5jX3dpbjMyX2xpYmlkICgpCisgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICAgOzsKKyAgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKy0gICAgaWYgJE9CSkRVTVAgLWYgIiQxIiB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorLSAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZS1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKy0gICAgICB3aW4zMl9ubXJlcz1gJE5NIC1mIHBvc2l4IC1BICIkMSIgfAorKyAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KKysgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgfAorIAkkU0VEIC1uIC1lICcKKyAJICAgIDEsMTAweworIAkJLyBJIC97CitAQCAtMjgyNyw2ICszNTg2LDEzMSBAQCBmdW5jX3dpbjMyX2xpYmlkICgpCisgICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCisgfQorIAorKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworKyMKKysjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisrIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKysjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKysjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCisrfQorKworKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgU0VDVElPTl9OQU1FIExJQk5BTUVzCisrIworKyMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQorKyMgcGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUKKysjIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeSBMSUJOQU1FLgorKyMKKysjIFNFQ1RJT05fTkFNRSBpcyBlaXRoZXIgLmlkYXRhJDYgb3IgLmlkYXRhJDcsIGRlcGVuZGluZworKyMgb24gdGhlIHBsYXRmb3JtIGFuZCBjb21waWxlciB0aGF0IGNyZWF0ZWQgdGhlIGltcGxpYi4KKysjCisrIyBFY2hvcyB0aGUgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUKKysjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KKytmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisrICAkT0JKRFVNUCAtcyAtLXNlY3Rpb24gIiQxIiAiJDIiIDI+L2Rldi9udWxsIHwKKysgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworKyAgICAgICMgUGxhY2UgbWFya2VyIGF0IGJlZ2lubmluZyBvZiBhcmNoaXZlIG1lbWJlciBkbGxuYW1lIHNlY3Rpb24KKysgICAgICBzLy4qLz09PT1NQVJLPT09PS8KKysgICAgICBwCisrICAgICAgZAorKyAgICB9CisrICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKysgICAgIyBhcmUgYWx3YXlzIHVuaW50ZXJlc3RpbmcKKysgICAgLzpbCSBdKmZpbGUgZm9ybWF0IHBlW2ldXHssMVx9LS9kCisrICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorKyAgICAjIEVuc3VyZSBtYXJrZXIgaXMgcHJpbnRlZAorKyAgICAvXj09PT1NQVJLPT09PS9wCisrICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisrICAgIC9eLlx7NDNcfS8hZAorKyAgICAjIEZyb20gcmVtYWluaW5nIGxpbmVzLCByZW1vdmUgZmlyc3QgNDMgY2hhcmFjdGVycworKyAgICBzL14uXHs0M1x9Ly8nIHwKKysgICAgJFNFRCAtbiAnCisrICAgICAgIyBKb2luIG1hcmtlciBhbmQgYWxsIGxpbmVzIHVudGlsIG5leHQgbWFya2VyIGludG8gYSBzaW5nbGUgbGluZQorKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKysgICAgICBICisrICAgICAgJCBiIHBhcmEKKysgICAgICBiCisrICAgICAgOnBhcmEKKysgICAgICB4CisrICAgICAgcy9cbi8vZworKyAgICAgICMgUmVtb3ZlIHRoZSBtYXJrZXIKKysgICAgICBzL149PT09TUFSSz09PT0vLworKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKysgICAgICBzL1tcLiBcdF0qJC8vCisrICAgICAgIyBQcmludAorKyAgICAgIC8uL3AnIHwKKysgICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCisrICAgICMgY29udGVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24gb2YgYWxsIG1lbWJlcnMgb2YgdGhlCisrICAgICMgYXJjaGl2ZSB3aGljaCBwb3NzZXNzIHRoYXQgc2VjdGlvbi4gSGV1cmlzdGljOiBlbGltaW5hdGUKKysgICAgIyBhbGwgdGhvc2Ugd2hpY2ggaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworKyAgICAjIGEgJy4nICh0aGF0IGlzLCBvYmpkdW1wJ3MgcmVwcmVzZW50YXRpb24gb2YgYW4gdW5wcmludGFibGUKKysgICAgIyBjaGFyYWN0ZXIuKSBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgYXJjaGl2ZXMgd2l0aCBsZXNzIHRoYW4KKysgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKKysgICAgIyBiZWdpbnMgd2l0aCBhIGxpdGVyYWwgJy4nIG9yIGEgc2luZ2xlIGNoYXJhY3RlciBmb2xsb3dlZCBieQorKyAgICAjIGEgJy4nLgorKyAgICAjCisrICAgICMgT2YgdGhvc2UgdGhhdCByZW1haW4sIHByaW50IHRoZSBmaXJzdCBvbmUuCisrICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCisrfQorKworKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKysjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKysjIEFSRyBpcyBhIEdOVS9iaW51dGlscy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KKytmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCisreworKyAgJG9wdF9kZWJ1ZworKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisrICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgorK30KKysKKysjIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKKysjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKysjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KKytmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKKyt7CisrICAkb3B0X2RlYnVnCisrICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisrICBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEdSRVAgJ19OVUxMX0lNUE9SVF9ERVNDUklQVE9SJ2AKKysgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKKyt9CisrCisrIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCisrIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisrIyBpbXBvcnQgbGlicmFyeSBBUkcuCisrIworKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKysjIGRvZXMgbm90IHN1cHBvcnQgdGhlIC0taWRlbnRpZnktc3RyaWN0IG9wdGlvbi4KKysjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiB0aGUgdmFyaWFibGUKKysjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQorK3sKKysgICRvcHRfZGVidWcKKysgIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIiA7IHRoZW4KKysgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAorKyAgZWxpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiA7IHRoZW4KKysgICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKKysgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKKysgIGVsc2UKKysgICAgIyB1bmtub3duCisrICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PSIiCisrICBmaQorK30KKyAKKyAKKyAjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK0BAIC0yOTE3LDcgKzM4MDEsNyBAQCBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKKyAJICAgIGRhcndpbl9maWxlPQorIAkgICAgZGFyd2luX2ZpbGVzPQorIAkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCistCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgJE5MMlNQYAorKwkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisgCSAgICAgICRMSVBPIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCisgCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorIAkgICAgJFJNIC1yZiB1bmZhdC0kJAorQEAgLTI5MzIsNyArMzgxNiw3IEBAIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQorICAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisgCTs7CisgICAgICAgZXNhYworLSAgICAgIG15X29sZG9ianM9IiRteV9vbGRvYmpzICJgZmluZCAkbXlfeGRpciAtbmFtZSBcKi4kb2JqZXh0IC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkTkwyU1BgCisrICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCisgICAgIGRvbmUKKyAKKyAgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCitAQCAtMzAxNCw3ICszODk4LDExMCBAQCBmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKKyBfTFRFQ0hPX0VPRicKKyB9CisgICAgIEVDSE89XCIkcUVDSE9cIgorLSAgZmlcCisrICBmaQorKworKyMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCisrIyB0aGUgbGlidG9vbCB3cmFwcGVyLCAoYikgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZSB3cmFwcGVyCisrIyAvc2NyaXB0LyBhbmQgdGhlIHdyYXBwZXIgL2V4ZWN1dGFibGUvIHdoaWNoIGlzIHVzZWQgb25seSBvbgorKyMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCisrIyAoYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIHVubGlrZWx5IHRvIGhhdmUgb3B0aW9ucyB3aGljaCBtYXRjaAorKyMgdGhpcyBwYXR0ZXJuKS4KKysjCisrIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCisrIyAtLWx0LWR1bXAtc2NyaXB0LiBUaGVyZSBpcywgZGVsaWJlcmF0ZWx5LCBubyAtLWx0LWhlbHAuCisrIworKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCisrIyBzY3JpcHQncyAkMCB2YWx1ZSwgZm9sbG93ZWQgYnkgIiRAIi4KKytsdF9vcHRpb25fZGVidWc9CisrZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCisreworKyAgbHRfc2NyaXB0X2FyZzA9XCQwCisrICBzaGlmdAorKyAgZm9yIGx0X29wdAorKyAgZG8KKysgICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KKysgICAgLS1sdC1kZWJ1ZykgbHRfb3B0aW9uX2RlYnVnPTEgOzsKKysgICAgLS1sdC1kdW1wLXNjcmlwdCkKKysgICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAorKyAgICAgICAgdGVzdCBcIlhcJGx0X2R1bXBfRFwiID0gXCJYXCRsdF9zY3JpcHRfYXJnMFwiICYmIGx0X2R1bXBfRD0uCisrICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKKysgICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKKysgICAgICAgIGV4aXQgMAorKyAgICAgIDs7CisrICAgIC0tbHQtKikKKysgICAgICAgIFwkRUNITyBcIlVucmVjb2duaXplZCAtLWx0LSBvcHRpb246ICdcJGx0X29wdCdcIiAxPiYyCisrICAgICAgICBleGl0IDEKKysgICAgICA7OworKyAgICBlc2FjCisrICBkb25lCisrCisrICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6CisrICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorKyAgICBlY2hvIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlwiIDE+JjIKKysgIGZpCisrfQorKworKyMgVXNlZCB3aGVuIC0tbHQtZGVidWcuIFByaW50cyBpdHMgYXJndW1lbnRzIHRvIHN0ZG91dAorKyMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQorK2Z1bmNfbHRfZHVtcF9hcmdzICgpCisreworKyAgbHRfZHVtcF9hcmdzX049MTsKKysgIGZvciBsdF9hcmcKKysgIGRvCisrICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKysgICAgbHRfZHVtcF9hcmdzX049XGBleHByIFwkbHRfZHVtcF9hcmdzX04gKyAxXGAKKysgIGRvbmUKKyt9CisrCisrIyBDb3JlIGZ1bmN0aW9uIGZvciBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorK2Z1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKKyt7CisrIgorKyAgY2FzZSAkaG9zdCBpbgorKyAgIyBCYWNrc2xhc2hlcyBzZXBhcmF0ZSBkaXJlY3RvcmllcyBvbiBwbGFpbiB3aW5kb3dzCisrICAqLSotbWluZ3cgfCAqLSotb3MyKiB8ICotY2VnY2MqKQorKyAgICAkRUNITyAiXAorKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisrICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgMT4mMgorKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisrICAgICAgZmkKKysgICAgICBleGVjIFwiXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKysiCisrICAgIDs7CisrCisrICAqKQorKyAgICAkRUNITyAiXAorKyAgICAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCisrICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisrICAgICAgZmkKKysgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKysiCisrICAgIDs7CisrICBlc2FjCisrICAkRUNITyAiXAorKyAgICAgIFwkRUNITyBcIlwkMDogY2Fubm90IGV4ZWMgXCRwcm9ncmFtIFwkKlwiIDE+JjIKKysgICAgICBleGl0IDEKKyt9CisrCisrIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisrIyBTdHJpcHMgb3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFjZSBmcm9tIFwkQCBhbmQKKysjIGxhdW5jaGVzIHRhcmdldCBhcHBsaWNhdGlvbiB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzLgorK2Z1bmNfZXhlY19wcm9ncmFtICgpCisreworKyAgZm9yIGx0X3dyX2FyZworKyAgZG8KKysgICAgY2FzZSBcJGx0X3dyX2FyZyBpbgorKyAgICAtLWx0LSopIDs7CisrICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7CisrICAgIGVzYWMKKysgICAgc2hpZnQKKysgIGRvbmUKKysgIGZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwkQFwifQorK30KKysKKysgICMgUGFyc2Ugb3B0aW9ucworKyAgZnVuY19wYXJzZV9sdF9vcHRpb25zIFwiXCQwXCIgXCR7MStcIlwkQFwifQorIAorICAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgIHRoaXNkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qJCUlJ1xgCitAQCAtMzA3OCw3ICs0MDY1LDcgQEAgX0xURUNIT19FT0YnCisgCisgICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgIGlmIHRlc3QgLW4gXCJcJHJlbGlua19jb21tYW5kXCI7IHRoZW4KKy0gICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwiXCRyZWxpbmtfY29tbWFuZFwiIDI+JjFcYDsgdGhlbiA6CisrICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICAgZWxzZQorIAkkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisgCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorQEAgLTMxMDIsNiArNDA4OSwxOCBAQCBfTFRFQ0hPX0VPRicKKyAKKyAgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisgCisrCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisrCSMKKysJIyBGaXggdGhlIERMTCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uICBEbyB0aGlzIGJlZm9yZSBwcmVwZW5kaW5nCisrCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCisrCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKysJaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisrCSAgJEVDSE8gIlwKKysgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKysgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKysiCisrCWZpCisrCisgCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorIAlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgCSAgJEVDSE8gIlwKK0BAIC0zMTE2LDM1ICs0MTE1LDEwIEBAIF9MVEVDSE9fRU9GJworICIKKyAJZmkKKyAKKy0JIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKy0JaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCistCSAgJEVDSE8gIlwKKy0gICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKy0gICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKy0iCistCWZpCistCisgCSRFQ0hPICJcCisgICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorLSIKKy0JY2FzZSAkaG9zdCBpbgorLQkjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKy0JKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKy0JICAkRUNITyAiXAorLSAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorLSIKKy0JICA7OworLQorLQkqKQorLQkgICRFQ0hPICJcCistICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CistIgorLQkgIDs7CistCWVzYWMKKy0JJEVDSE8gIlwKKy0gICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCistICAgICAgZXhpdCAxCisrICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQorICAgICBmaQorICAgZWxzZQorICAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCitAQCAtMzE1OCwxNjYgKzQxMzIsNiBAQCBmaVwKKyB9CisgCisgCistIyBmdW5jX3RvX2hvc3RfcGF0aCBhcmcKKy0jCistIyBDb252ZXJ0IHBhdGhzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorLSMgSW50ZW5kZWQgZm9yIHVzZSB3aXRoICJuYXRpdmUiIG1pbmd3ICh3aGVyZSBsaWJ0b29sIGl0c2VsZgorLSMgaXMgcnVubmluZyB1bmRlciB0aGUgbXN5cyBzaGVsbCksIG9yIGluIHRoZSBmb2xsb3dpbmcgY3Jvc3MtCistIyBidWlsZCBlbnZpcm9ubWVudHM6CistIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKy0jICAgIG1pbmd3IChtc3lzKSAgICBtaW5ndyAgW2UuZy4gbmF0aXZlXQorLSMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CistIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKy0jIHdoZXJlIHdpbmUgaXMgZXF1aXBwZWQgd2l0aCB0aGUgYHdpbmVwYXRoJyBleGVjdXRhYmxlLgorLSMgSW4gdGhlIG5hdGl2ZSBtaW5ndyBjYXNlLCB0aGUgKG1zeXMpIHNoZWxsIGF1dG9tYXRpY2FsbHkKKy0jIGNvbnZlcnRzIHBhdGhzIGZvciBhbnkgbm9uLW1zeXMgYXBwbGljYXRpb25zIGl0IGxhdW5jaGVzLAorLSMgYnV0IHRoYXQgZmFjaWxpdHkgaXNuJ3QgYXZhaWxhYmxlIGZyb20gaW5zaWRlIHRoZSBjd3JhcHBlci4KKy0jIFNpbWlsYXIgYWNjb21tb2RhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgJGhvc3QgbWluZ3cgYW5kCistIyAkYnVpbGQgY3lnd2luLiAgQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGRvZXMgbm8gaGFybSBmb3Igb3RoZXIKKy0jICRob3N0LyRidWlsZCBjb21iaW5hdGlvbnMgbm90IGxpc3RlZCBhYm92ZS4KKy0jCistIyBBUkcgaXMgdGhlIHBhdGggKG9uICRidWlsZCkgdGhhdCBzaG91bGQgYmUgY29udmVydGVkIHRvCistIyB0aGUgcHJvcGVyIHJlcHJlc2VudGF0aW9uIGZvciAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKy0jIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCistZnVuY190b19ob3N0X3BhdGggKCkKKy17CistICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCistICAgIGNhc2UgJGhvc3QgaW4KKy0gICAgICAqbWluZ3cqICkKKy0gICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKy0gICAgICAgIGNhc2UgJGJ1aWxkIGluCistICAgICAgICAgICptaW5ndyogKSAjIGFjdHVhbGx5LCBtc3lzCistICAgICAgICAgICAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorLSAgICAgICAgICAgICAgJFNFRCAtZSAncy9bIF0qJC8vJyAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIDs7CistICAgICAgICAgICpjeWd3aW4qICkKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLXcgIiQxIiB8CistCSAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqICkKKy0gICAgICAgICAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvCistICAgICAgICAgICAgIyBlcnJvciBjb2RlLCBzbyB3ZSBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZgorLSAgICAgICAgICAgICMgc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGNvbW1hbmQgaXMgbm90CistICAgICAgICAgICAgIyBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CistICAgICAgICAgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoCistICAgICAgICAgICAgIyBlcnJvciBjb2RlIG9mIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zCistICAgICAgICAgICAgIyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorLSAgICAgICAgICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIke2Z1bmNfdG9faG9zdF9wYXRoX3RtcDF9IjsgdGhlbgorLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWAkRUNITyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHwKKy0gICAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICMgQWxsb3cgd2FybmluZyBiZWxvdy4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0KKy0gICAgICAgICAgICBmaQorLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IiA7IHRoZW4KKy0gICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKy0gICAgICAgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKy0gICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCistICAgICAgICAgICMgRmFsbGJhY2s6CistICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCistICAgICAgICBmaQorLSAgICAgICAgOzsKKy0gICAgZXNhYworLSAgZmkKKy19CistIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRoCistCistIyBmdW5jX3RvX2hvc3RfcGF0aGxpc3QgYXJnCistIworLSMgQ29udmVydCBwYXRobGlzdHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCistIyBTZWUgZnVuY190b19ob3N0X3BhdGgoKSwgYWJvdmUuIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgdGhlCistIyBmb2xsb3dpbmcgJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9ucyAoYnV0IGRvZXMgbm8gaGFybSBmb3IKKy0jIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGhlcmUpOgorLSMgICAgJGJ1aWxkICAgICAgICAgICRob3N0CistIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKy0jICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworLSMgICAgKm5peCArIHdpbmUgICAgIG1pbmd3CistIworLSMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8KKy0jICRob3N0IGZvcm1hdC4gSWYgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvcgorLSMgY2hhcmFjdGVyLCBpdCBpcyBwcmVzZXJ2ZWQgKGJ1dCBjb252ZXJ0ZWQgdG8gJGhvc3QgZm9ybWF0KQorLSMgb24gb3V0cHV0LgorLSMKKy0jIEFSRyBpcyBhIHBhdGhsaXN0IChvbiAkYnVpbGQpIHRoYXQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0bworLSMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBvbiAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKy0jIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0LgorLWZ1bmNfdG9faG9zdF9wYXRobGlzdCAoKQorLXsKKy0gIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiQxIgorLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCistICAgIGNhc2UgJGhvc3QgaW4KKy0gICAgICAqbWluZ3cqICkKKy0gICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKy0gICAgICAgICMgUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMgZnJvbQorLSAgICAgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorLSAgICAgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKy0JZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKy0gICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKy0gICAgICAgIGNhc2UgJGJ1aWxkIGluCistICAgICAgICAgICptaW5ndyogKSAjIEFjdHVhbGx5LCBtc3lzLgorLSAgICAgICAgICAgICMgQXdrd2FyZDogY21kIGFwcGVuZHMgc3BhY2VzIHRvIHJlc3VsdC4KKy0gICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWAKKy0JICAgICAgKCBjbWQgLy9jIGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgKSAyPi9kZXYvbnVsbCB8CistCSAgICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAqY3lnd2luKiApCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD1gY3lncGF0aCAtdyAtcCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF90bXAxIiB8CistICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCistICAgICAgICAgICAgOzsKKy0gICAgICAgICAgKiApCistICAgICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aGxpc3RzCistICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iIgorLSAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlM9JElGUworLSAgICAgICAgICAgIElGUz06CistICAgICAgICAgICAgZm9yIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIGluICRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSA7IGRvCistICAgICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKy0gICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiIgOyB0aGVuCistICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZnVuY190b19ob3N0X3BhdGhsaXN0X2YiCistICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorLSAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IiA7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCistICAgICAgICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCAiOyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCistICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZG9uZQorLSAgICAgICAgICAgIElGUz0kZnVuY190b19ob3N0X3BhdGhsaXN0X29sZElGUworLSAgICAgICAgICAgIDs7CistICAgICAgICBlc2FjCistICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7IHRoZW4KKy0gICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoKHMpIGNvcnJlc3BvbmRpbmcgdG8iCistICAgICAgICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCistICAgICAgICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorLSAgICAgICAgICAjIEZhbGxiYWNrLiBUaGlzIG1heSBicmVhayBpZiAkMSBjb250YWlucyBET1Mtc3R5bGUgZHJpdmUKKy0gICAgICAgICAgIyBzcGVjaWZpY2F0aW9ucy4gVGhlIGZpeCBpcyBub3QgdG8gY29tcGxpY2F0ZSB0aGUgZXhwcmVzc2lvbgorLSAgICAgICAgICAjIGJlbG93LCBidXQgZm9yIHRoZSB1c2VyIHRvIHByb3ZpZGUgYSB3b3JraW5nIHdpbmUgaW5zdGFsbGF0aW9uCistICAgICAgICAgICMgd2l0aCB3aW5lcGF0aCBzbyB0aGF0IHBhdGggdHJhbnNsYXRpb24gaW4gdGhlIGNyb3NzLXRvLW1pbmd3CistICAgICAgICAgICMgY2FzZSB3b3JrcyBwcm9wZXJseS4KKy0gICAgICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3M9InN8Onw7fGciCistICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSIgfFwKKy0gICAgICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3MiYAorLSAgICAgICAgZmkKKy0gICAgICAgICMgTm93LCBhZGQgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9ycyBiYWNrCistICAgICAgICBjYXNlICIkMSIgaW4KKy0gICAgICAgICAgOiogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSI7JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIGNhc2UgIiQxIiBpbgorLSAgICAgICAgICAqOiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQgIjsiCistICAgICAgICAgICAgOzsKKy0gICAgICAgIGVzYWMKKy0gICAgICAgIDs7CistICAgIGVzYWMKKy0gIGZpCistfQorLSMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aGxpc3QKKy0KKyAjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyAjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyAjIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQorQEAgLTMzMzQsMTAgKzQxNDgsNiBAQCBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCisgCisgICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKy0KKy0gICBDdXJyZW50bHksIGl0IHNpbXBseSBleGVjcyB0aGUgd3JhcHBlciAqc2NyaXB0KiAiJFNIRUxMICRvdXRwdXQiLAorLSAgIGJ1dCBjb3VsZCBldmVudHVhbGx5IGFic29yYiBhbGwgb2YgdGhlIHNjcmlwdHMgZnVuY3Rpb25hbGl0eSBhbmQKKy0gICBleGVjICRvYmpkaXIvJG91dHB1dG5hbWUgZGlyZWN0bHkuCisgKi8KKyBFT0YKKyAJICAgIGNhdCA8PCJFT0YiCitAQCAtMzQ2MiwyMiArNDI3MiwxMyBAQCBpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyAgIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCisgfSB3aGlsZSAoMCkKKyAKKy0jdW5kZWYgTFRXUkFQUEVSX0RFQlVHUFJJTlRGCistI2lmIGRlZmluZWQgTFRfREVCVUdXUkFQUEVSCistIyBkZWZpbmUgTFRXUkFQUEVSX0RFQlVHUFJJTlRGKGFyZ3MpIGx0d3JhcHBlcl9kZWJ1Z3ByaW50ZiBhcmdzCistc3RhdGljIHZvaWQKKy1sdHdyYXBwZXJfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorLXsKKy0gICAgdmFfbGlzdCBhcmdzOworLSAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKy0gICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CistICAgIHZhX2VuZCAoYXJncyk7CistfQorKyNpZiBkZWZpbmVkKExUX0RFQlVHV1JBUFBFUikKKytzdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKKyAjZWxzZQorLSMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKQorK3N0YXRpYyBpbnQgbHRfZGVidWcgPSAwOworICNlbmRpZgorIAorLWNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9IE5VTEw7CisrY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gImxpYnRvb2wtd3JhcHBlciI7IC8qIGluIGNhc2UgeHN0cmR1cCBmYWlscyAqLworIAorIHZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworIGNoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7CitAQCAtMzQ4Nyw3ICs0Mjg4LDEwIEBAIGNoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CisgaW50IG1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCk7CisgaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworIGNoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOworLXZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Cisrdm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyt2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKTsKKytzdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7Cisrc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKKyB2b2lkIGx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOworIGNoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cisgdm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK0BAIC0zNDk3LDE0ICs0MzAxLDE0IEBAIHZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUgKmYpOworIEVPRgorIAorIAkgICAgY2F0IDw8RU9GCistY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKKyt2b2xhdGlsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworIGNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKKyBFT0YKKyAKKyAJICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKy0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJHRlbXBfcnBhdGgiCisrICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCisgCSAgICAgIGNhdCA8PEVPRgorLWNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IjsKKytjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKKyBFT0YKKyAJICAgIGVsc2UKKyAJICAgICAgY2F0IDw8IkVPRiIKK0BAIC0zNTEzLDEwICs0MzE3LDEwIEBAIEVPRgorIAkgICAgZmkKKyAKKyAJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0ICIkZGxsc2VhcmNocGF0aDoiCisrICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgorIAkgICAgICBjYXQgPDxFT0YKKyBjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKKy1jb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CisrY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CisgRU9GCisgCSAgICBlbHNlCisgCSAgICAgIGNhdCA8PCJFT0YiCitAQCAtMzUzOSwxMiArNDM0MywxMCBAQCBFT0YKKyAJICAgIGNhdCA8PCJFT0YiCisgCisgI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKy0jZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCAgNQorIAorLXN0YXRpYyBjb25zdCBzaXplX3Qgb3B0X3ByZWZpeF9sZW4gICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKKy0KKyBzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK0BAIC0zNTYxLDEwICs0MzYzLDEzIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICBpbnQgaTsKKyAKKyAgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIiwgYXJndlswXSkpOworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBwcm9ncmFtX25hbWUgOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKSk7CisrICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgCistICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdCAqLworKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKKysgICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAorKyAgICogYXJnelswXSwgd2hpY2ggaXMgaGFuZGxlZCBkaWZmZXJlbnRseQorKyAgICovCisrICBuZXdhcmdjPTA7CisgICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgICB7CisgICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCitAQCAtMzU4MSwyMSArNDM4Niw1NCBAQCBFT0YKKyAJICBsdF9kdW1wX3NjcmlwdCAoc3Rkb3V0KTsKKyAJICByZXR1cm4gMDsKKyAJfQorKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGRlYnVnX29wdCkgPT0gMCkKKysJeworKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisrICAgICAgICAgIGNvbnRpbnVlOworKwl9CisrICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisrICAgICAgICB7CisrICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKysgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorKyAgICAgICAgICAgICBoYXZlIGFscmVhZHkgZGVhbHQgd2l0aCwgYWJvdmUgKGlubHVkaW5nIGR1bXAtc2NyaXB0KSwgdGhlbgorKyAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCisrICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisrICAgICAgICAgICAgIG5hbWVzcGFjZS4gVGhlIGZpcnN0IHRpbWUgYW55IHVzZXIgY29tcGxhaW5zIGFib3V0IHRoaXMsIHdlJ2xsCisrICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgorKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKysgICAgICAgICAgICovCisrICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisrCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworKyAgICAgICAgfQorKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKysgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICAgfQorKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKysKKytFT0YKKysJICAgIGNhdCA8PEVPRgorKyAgLyogVGhlIEdOVSBiYW5uZXIgbXVzdCBiZSB0aGUgZmlyc3Qgbm9uLWVycm9yIGRlYnVnIG1lc3NhZ2UgKi8KKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKKytFT0YKKysJICAgIGNhdCA8PCJFT0YiCisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIGFyZ2MgKyAxKTsKKyAgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCistICAgIGx0X2ZhdGFsICgiQ291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorLQkJCSAgdG1wX3BhdGhzcGVjKSk7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJjb3VsZG4ndCBmaW5kICVzIiwgYXJndlswXSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorKwkJICB0bXBfcGF0aHNwZWMpOworIAorICAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorLQkJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisrICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKysJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgCistICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAoIGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKysgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworIAorICAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KK0BAIC0zNjEzLDggKzQ0NTEsOSBAQCBFT0YKKyAgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICAgdG1wX3BhdGhzcGVjID0gMDsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCistCQkJICB0YXJnZXRfbmFtZSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKysJCSAgdGFyZ2V0X25hbWUpOworIEVPRgorIAorIAkgICAgY2F0IDw8RU9GCitAQCAtMzY2NCwzNSArNDUwMywxOSBAQCBFT0YKKyAKKyAgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLworLSAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisrICAvKiBVcGRhdGUgdGhlIERMTCBzZWFyY2hwYXRoLiAgRVhFX1BBVEhfVkFMVUUgKCRkbGxzZWFyY2hwYXRoKSBtdXN0CisrICAgICBiZSBwcmVwZW5kZWQgYmVmb3JlICh0aGF0IGlzLCBhcHBlYXIgYWZ0ZXIpIExJQl9QQVRIX1ZBTFVFICgkdGVtcF9ycGF0aCkKKysgICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAorKyAgICAgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4gKi8KKyAgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisgCistICBuZXdhcmdjPTA7CistICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorLSAgICB7CistICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBvcHRfcHJlZml4X2xlbikgPT0gMCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAorLSAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCistICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCistICAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvci4gT3RoZXJ3aXNlLCB0YXJnZXRzIG1pZ2h0IGJlZ2luIHRvIGJlbGlldmUKKy0gICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKKy0gICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKy0gICAgICAgICAgICAgbmVlZCB0byBtYWtlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYIGEgY29uZmlndXJlLXRpbWUgb3B0aW9uCistICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgorLSAgICAgICAgICAgKi8KKy0gICAgICAgICAgbHRfZmF0YWwgKCJVbnJlY29nbml6ZWQgb3B0aW9uIGluICVzIG5hbWVzcGFjZTogJyVzJyIsCistICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CistICAgICAgICB9CistICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLworLSAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworLSAgICB9CistICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOworLQorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICAgICAoKCIobWFpbikgbHRfYXJndl96ZXJvIDogJXNcbiIsIChsdF9hcmd2X3plcm8gPyBsdF9hcmd2X3plcm8gOiAiPE5VTEw+IikpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKKysJCSAgbm9ubnVsbCAobHRfYXJndl96ZXJvKSk7CisgICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgICB7CistICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBuZXdhcmd6WyVkXSAgIDogJXNcbiIsIGksIChuZXdhcmd6W2ldID8gbmV3YXJneltpXSA6ICI8TlVMTD4iKSkpOworKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorKwkJICAgICAgaSwgbm9ubnVsbCAobmV3YXJneltpXSkpOworICAgICB9CisgCisgRU9GCitAQCAtMzcwNiw3ICs0NTI5LDkgQEAgRU9GCisgICBpZiAocnZhbCA9PSAtMSkKKyAgICAgeworICAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCistICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6IGVycm5vID0gJWRcbiIsIGx0X2FyZ3ZfemVybywgZXJybm8pKTsKKysgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAorKwkJICAgICAgbHRfYXJndl96ZXJvLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICAgICAgcmV0dXJuIDEyNzsKKyAgICAgfQorICAgcmV0dXJuIHJ2YWw7CitAQCAtMzcyOCw3ICs0NTUzLDcgQEAgeG1hbGxvYyAoc2l6ZV90IG51bSkKKyB7CisgICB2b2lkICpwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICAgaWYgKCFwKQorLSAgICBsdF9mYXRhbCAoIk1lbW9yeSBleGhhdXN0ZWQiKTsKKysgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgIm1lbW9yeSBleGhhdXN0ZWQiKTsKKyAKKyAgIHJldHVybiBwOworIH0KK0BAIC0zNzYyLDggKzQ1ODcsOCBAQCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQorIHsKKyAgIHN0cnVjdCBzdGF0IHN0OworIAorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihjaGVja19leGVjdXRhYmxlKSAgOiAlc1xuIiwKKy0JCQkgIHBhdGggPyAoKnBhdGggPyBwYXRoIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihjaGVja19leGVjdXRhYmxlKTogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgICByZXR1cm4gMDsKKyAKK0BAIC0zNzgwLDggKzQ2MDUsOCBAQCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCisgICBpbnQgcnZhbCA9IDA7CisgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobWFrZV9leGVjdXRhYmxlKSAgIDogJXNcbiIsCistCQkJICBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpKTsKKysgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFrZV9leGVjdXRhYmxlKTogJXNcbiIsCisrICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKKyAgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgICByZXR1cm4gMDsKKyAKK0BAIC0zODA3LDggKzQ2MzIsOCBAQCBmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCisgICBpbnQgdG1wX2xlbjsKKyAgIGNoYXIgKmNvbmNhdF9uYW1lOworIAorLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihmaW5kX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKy0JCQkgIHdyYXBwZXIgPyAoKndyYXBwZXIgPyB3cmFwcGVyIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikpOworIAorICAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKKyAgICAgcmV0dXJuIE5VTEw7CitAQCAtMzg2MSw3ICs0Njg2LDggQEAgZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQorIAkJeworIAkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworIAkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCistCQkgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisrCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgCQkgIGNvbmNhdF9uYW1lID0KKyAJCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKK0BAIC0zODg2LDcgKzQ3MTIsOCBAQCBmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpCisgICAgIH0KKyAgIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KKyAgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKy0gICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisrICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisrICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgICB0bXBfbGVuID0gc3RybGVuICh0bXApOworICAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CitAQCAtMzkxMiw4ICs0NzM5LDkgQEAgY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQorICAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgIHsKKy0gICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKy0JCQkgICAgICB0bXBfcGF0aHNwZWMpKTsKKysgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisrCQkgICAgICB0bXBfcGF0aHNwZWMpOworICAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKyAJeworIAkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCitAQCAtMzkzNSw4ICs0NzYzLDkgQEAgY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQorIAl9CisgICAgICAgZWxzZQorIAl7CistCSAgY2hhciAqZXJyc3RyID0gc3RyZXJyb3IgKGVycm5vKTsKKy0JICBsdF9mYXRhbCAoIkVycm9yIGFjY2Vzc2luZyBmaWxlICVzICglcykiLCB0bXBfcGF0aHNwZWMsIGVycnN0cik7CisrCSAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgICAiZXJyb3IgYWNjZXNzaW5nIGZpbGUgXCIlc1wiOiAlcyIsCisrCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgCX0KKyAgICAgfQorICAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CitAQCAtMzk0OSw3ICs0Nzc4LDggQEAgY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQorICAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQorICAgICB7CistICAgICAgbHRfZmF0YWwgKCJDb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKKysgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgICB9CisgICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKKyAjZW5kaWYKK0BAIC0zOTc1LDExICs0ODA1LDI1IEBAIHN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCisgICByZXR1cm4gc3RyOworIH0KKyAKKyt2b2lkCisrbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyt7CisrICB2YV9saXN0IGFyZ3M7CisrICBpZiAobHRfZGVidWcpCisrICAgIHsKKysgICAgICAodm9pZCkgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSk7CisrICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisrICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisrICAgICAgdmFfZW5kIChhcmdzKTsKKysgICAgfQorK30KKysKKyBzdGF0aWMgdm9pZAorLWx0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqbW9kZSwKKytsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKmZpbGUsCisrCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKKyAJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCisgeworLSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiAiLCBwcm9ncmFtX25hbWUsIG1vZGUpOworKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOworICAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7CisgCitAQCAtMzk4OCwyMCArNDgzMiwzMiBAQCBsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisgfQorIAorIHZvaWQKKy1sdF9mYXRhbCAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQorK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQorIHsKKyAgIHZhX2xpc3QgYXA7CisgICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworLSAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisrICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgIHZhX2VuZCAoYXApOworIH0KKyAKKytzdGF0aWMgY29uc3QgY2hhciAqCisrbm9ubnVsbCAoY29uc3QgY2hhciAqcykKKyt7CisrICByZXR1cm4gcyA/IHMgOiAiKG51bGwpIjsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKgorK25vbmVtcHR5IChjb25zdCBjaGFyICpzKQorK3sKKysgIHJldHVybiAocyAmJiAhKnMpID8gIihlbXB0eSkiIDogbm9ubnVsbCAocyk7CisrfQorKworIHZvaWQKKyBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisrICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7CisgICB7CisgI2lmZGVmIEhBVkVfU0VURU5WCisgICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCitAQCAtNDA0OSw5ICs0OTA1LDkgQEAgbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQorIHZvaWQKKyBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorIHsKKy0gIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCistICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKysJCSAgIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKysgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAKKyAgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICAgeworQEAgLTQwNzAsOSArNDkyNiw5IEBAIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisgdm9pZAorIGx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisgeworLSAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIChuYW1lID8gbmFtZSA6ICI8TlVMTD4iKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisrICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorKwkJICAiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworIAorICAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgICB7CitAQCAtNDIyMiw3ICs1MDc4LDcgQEAgRU9GCisgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKKyB7CisgICAgICRvcHRfZGVidWcKKy0gICAgY2FzZSBgZXZhbCAiJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwiIHwgJFNFRCAtZSAxMHFgIGluCisrICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAgKmltcG9ydCopIDogOzsKKyAgICAgKikgZmFsc2UgOzsKKyAgICAgZXNhYworQEAgLTQ0MDEsOSArNTI1Nyw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICA7OworIAkgICopCisgCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCistCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgorIAkgICAgZWxzZQorLQkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGFyZyIKKyAJICAgIGZpCisgCSAgICBwcmV2PQorIAkgICAgY29udGludWUKK0BAIC00NDI3LDcgKzUyODMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKi0qLWRhcndpbiopCisgCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKyAJCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OworLQkJKikgZGVwbGlicz0iJGRlcGxpYnMgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorKwkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKyAJCSAgIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKK0BAIC00NDQ2LDcgKzUzMDIsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgbW9yZWFyZ3M9CisgCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisgCSAgICBkbworLSMJICAgICAgbW9yZWFyZ3M9IiRtb3JlYXJncyAkZmlsIgorKyMJICAgICAgZnVuY19hcHBlbmQgbW9yZWFyZ3MgIiAkZmlsIgorIAkgICAgICBhcmc9JGZpbAorIAkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKyAKK0BAIC00NDc1LDcgKzUzMzEsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAorIAkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisgCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorLQkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisrCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisgCQkgICAgICBwcmV2PQorIAkJICAgICAgY29udGludWUKKyAJCSAgICBlbHNlCitAQCAtNDQ4Nyw3ICs1MzQzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKyAJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorIAkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKy0JCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKysJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisgCQkgICAgcHJldj0KKyAJCSAgZmkKKyAKK0BAIC00NTU3LDEyICs1NDEzLDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKyAJICAgIGNhc2UgIiRycGF0aCAiIGluCisgCSAgICAqIiAkYXJnICIqKSA7OworLQkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OworIAkgICAgZXNhYworIAkgIGVsc2UKKyAJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorIAkgICAgKiIgJGFyZyAiKikgOzsKKy0JICAgICopIHhycGF0aD0iJHhycGF0aCAkYXJnIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGFyZyIgOzsKKyAJICAgIGVzYWMKKyAJICBmaQorIAkgIHByZXY9CitAQCAtNDU3NCwyOCArNTQzMCwyOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGNvbnRpbnVlCisgCSAgOzsKKyAJd2VhaykKKy0JICB3ZWFrX2xpYnM9IiR3ZWFrX2xpYnMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCB3ZWFrX2xpYnMgIiAkYXJnIgorIAkgIHByZXY9CisgCSAgY29udGludWUKKyAJICA7OworIAl4Y2NsaW5rZXIpCistCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisrCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKKyAJICBwcmV2PQorIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorIAkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBjb250aW51ZQorIAkgIDs7CisgCXhjb21waWxlcikKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisgCSAgcHJldj0KKyAJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKyAJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisgCSAgY29udGludWUKKyAJICA7OworIAl4bGlua2VyKQorLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKy0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJHFhcmciCisgCSAgcHJldj0KKyAJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKyAJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCitAQCAtNDY4NiwxNSArNTU0MiwxNiBAQCBmdW5jX21vZGVfbGluayAoKQorIAk7OworIAorICAgICAgIC1MKikKKy0JZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGFyZyIKKy0JZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKy0JaWYgdGVzdCAteiAiJGRpciI7IHRoZW4KKysJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKKysJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKyAJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisgCSAgZWxzZQorIAkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisgCSAgZmkKKyAJZmkKKysJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCWRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisgCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAljYXNlICRkaXIgaW4KKyAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworQEAgLTQ3MDYsMTAgKzU1NjMsMTYgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICA7OworIAllc2FjCisgCWNhc2UgIiRkZXBsaWJzICIgaW4KKy0JKiIgLUwkZGlyICIqKSA7OworKwkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQorKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKysJICA7OworIAkqKQorLQkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKy0JICBsaWJfc2VhcmNoX3BhdGg9IiRsaWJfc2VhcmNoX3BhdGggJGRpciIKKysJICAjIFByZXNlcnZlIHN5c3Jvb3QsIGJ1dCBuZXZlciBpbmNsdWRlIHJlbGF0aXZlIGRpcmVjdG9yaWVzCisrCSAgY2FzZSAkZGlyIGluCisrCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLUwkZGlyIiA7OworKwkgIGVzYWMKKysJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgorIAkgIDs7CisgCWVzYWMKKyAJY2FzZSAkaG9zdCBpbgorQEAgLTQ3MTgsMTIgKzU1ODEsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKyAJICAqIjokZGlyOiIqKSA7OworIAkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRkaXIiOzsKKysJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGRpciI7OworIAkgIGVzYWMKKyAJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKyAJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CistCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKysJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTQ3NDcsNyArNTYxMCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICA7OworIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKyAJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCistCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisrCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorIAkgICAgY29udGludWUKKyAJICAgIDs7CisgCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorQEAgLTQ3NTgsOSArNTYyMSw2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisgCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKyAJICAgIDs7CistCSAgKi0qLWxpbnV4KikKKy0JICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorLQkgICAgOzsKKyAJICBlc2FjCisgCWVsaWYgdGVzdCAiWCRhcmciID0gIlgtbGNfciI7IHRoZW4KKyAJIGNhc2UgJGhvc3QgaW4KK0BAIC00NzcwLDcgKzU2MzAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICA7OworIAkgZXNhYworIAlmaQorLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKyAJY29udGludWUKKyAJOzsKKyAKK0BAIC00NzgyLDggKzU2NDIsOCBAQCBmdW5jX21vZGVfbGluayAoKQorICAgICAgICMgVHJ1NjQgVU5JWCB1c2VzIC1tb2RlbCBbYXJnXSB0byBkZXRlcm1pbmUgdGhlIGxheW91dCBvZiBDKysKKyAgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAgIyBEYXJ3aW4gdXNlcyB0aGUgLWFyY2ggZmxhZyB0byBkZXRlcm1pbmUgb3V0cHV0IGFyY2hpdGVjdHVyZS4KKy0gICAgICAtbW9kZWx8LWFyY2h8LWlzeXNyb290KQorLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisrICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCisrCWZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgCXByZXY9eGNvbXBpbGVyCitAQCAtNDc5MSwxMiArNTY1MSwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAk7OworIAorICAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCistCWNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKysJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorIAlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJICAgICoiICRhcmcgIiopIDs7CistCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkYXJnIiA7OworKwkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKKyAJZXNhYworIAljb250aW51ZQorIAk7OworQEAgLTQ4NjMsMTMgKzU3MjMsMTcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisgCWNhc2UgJGRpciBpbgorIAlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisrCT0qKQorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKKysJICBkaXI9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgOzsKKyAJKikKKyAJICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKKyAJICA7OworIAllc2FjCisgCWNhc2UgIiR4cnBhdGggIiBpbgorIAkqIiAkZGlyICIqKSA7OworLQkqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKysJKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKyAJZXNhYworIAljb250aW51ZQorIAk7OworQEAgLTQ5MjIsOCArNTc4Niw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZvciBmbGFnIGluICRhcmdzOyBkbworIAkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKy0JICBhcmc9IiRhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKysJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAJZG9uZQorIAlJRlM9IiRzYXZlX2lmcyIKKyAJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorQEAgLTQ5MzgsOSArNTgwMiw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZvciBmbGFnIGluICRhcmdzOyBkbworIAkgIElGUz0iJHNhdmVfaWZzIgorICAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKy0JICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAJZG9uZQorIAlJRlM9IiRzYXZlX2lmcyIKKyAJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorQEAgLTQ5NjgsMjQgKzU4MzIsMjcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgCTs7CisgCistICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKKy0gICAgICAjIC1yWzAtOV1bMC05XSogc3BlY2lmaWVzIHRoZSBwcm9jZXNzb3Igb24gdGhlIFNHSSBjb21waWxlcgorLSAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTdW4gY29tcGlsZXIKKy0gICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgorLSAgICAgICMgLXEqIHBhc3MgdGhyb3VnaCBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCistICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBwYXNzIHRocm91Z2ggYXJjaGl0ZWN0dXJlLXNwZWNpZmljCistICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKKy0gICAgICAjIC1GL3BhdGggZ2l2ZXMgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCistICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiBwYXNzIHRocm91Z2ggcHJvZmlsaW5nIGZsYWcgZm9yIEdDQworLSAgICAgICMgQGZpbGUgR0NDIHJlc3BvbnNlIGZpbGVzCistICAgICAgIyAtdHA9KiBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisrICAgICAgIyBGbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHdpdGggcmF0aW9uYWxlOgorKyAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCisrICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorKyAgICAgICMgLXhhcmNoPSosIC14dGFyZ2V0PSogZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU3VuIGNvbXBpbGVyCisrICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgorKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzIGZvciBHQ0MKKysgICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgorKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisrICAgICAgIyBAZmlsZSAgICAgICAgICAgICAgICBHQ0MgcmVzcG9uc2UgZmlsZXMKKysgICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KKysgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKKysgICAgICAjIC1PKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorLSAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KikKKysgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSp8LS1zeXNyb290PSp8IFwKKysgICAgICAtTyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW4pCisgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorIAlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKy0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKysgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICA7OworIAorQEAgLTQ5OTcsNyArNTg2NCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgICAgICAgKi4kb2JqZXh0KQorIAkjIEEgc3RhbmRhcmQgb2JqZWN0LgorLQlvYmpzPSIkb2JqcyAkYXJnIgorKwlmdW5jX2FwcGVuZCBvYmpzICIgJGFyZyIKKyAJOzsKKyAKKyAgICAgICAqLmxvKQorQEAgLTUwMjgsNyArNTg5NSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKy0JCWRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorKwkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkJcHJldj0KKyAJCWNvbnRpbnVlCisgCSAgICAgIGVsc2UKK0BAIC01MDQwLDcgKzU5MDcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKyAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKyAJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorLQkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKysJICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgorIAkgICAgICBwcmV2PQorIAkgICAgZmkKKyAKK0BAIC01MDg1LDI0ICs1OTUyLDI1IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgICAgICAgKi4kbGliZXh0KQorIAkjIEFuIGFyY2hpdmUuCistCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCistCW9sZF9kZXBsaWJzPSIkb2xkX2RlcGxpYnMgJGFyZyIKKysJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisrCWZ1bmNfYXBwZW5kIG9sZF9kZXBsaWJzICIgJGFyZyIKKyAJY29udGludWUKKyAJOzsKKyAKKyAgICAgICAqLmxhKQorIAkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCisgCisrCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgorIAlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisgCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCistCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKysJICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAJICBwcmV2PQorIAllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKyAJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorLQkgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRhcmciCisrCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgcHJldj0KKyAJZWxzZQorLQkgIGRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisrCSAgZnVuY19hcHBlbmQgZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCWZpCisgCWNvbnRpbnVlCisgCTs7CitAQCAtNTEyNyw3ICs1OTk1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisgCisgICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KKy0gICAgICBldmFsICJhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIiCisrICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKyAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICBmaQorQEAgLTUxNDQsMTEgKzYwMTIsMTMgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgZWxzZQorICAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgICBmaQorLSAgICBldmFsICJzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiIgorLSAgICBldmFsICJzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIiIKKysgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisrICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKKyAKKyAgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKKyAgICAgb3V0cHV0X29iamRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyIgorKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgorKyAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKKyAKK0BAIC01MTY5LDEyICs2MDM5LDEyIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcworICAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKKyAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKy0gICAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKyAgICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisgCWNhc2UgIiRsaWJzICIgaW4KKy0JKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworKwkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCWVzYWMKKyAgICAgICBmaQorLSAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisrICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCisgICAgIGRvbmUKKyAKKyAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorQEAgLTUxODcsOSArNjA1Nyw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KKyAJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisgCSAgY2FzZSAiJHByZV9wb3N0X2RlcHMgIiBpbgorLQkgICoiICRwcmVfcG9zdF9kZXAgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJHByZV9wb3N0X2RlcHMiIDs7CisrCSAgKiIgJHByZV9wb3N0X2RlcCAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkcHJlX3Bvc3RfZGVwcyIgOzsKKyAJICBlc2FjCistCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKysJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKKyAJZG9uZQorICAgICAgIGZpCisgICAgICAgcHJlX3Bvc3RfZGVwcz0KK0BAIC01MjU2LDggKzYxMjYsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworIAkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKyAJICBkZXBlbmRlbmN5X2xpYnM9CisrCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisgCSAgY2FzZSAkbGliIGluCistCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisrCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisgCSAgZXNhYworIAorIAkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorQEAgLTUyNjcsNyArNjEzOCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisgCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CistCSAgICAqKSBkZXBsaWJzPSIkZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICBlc2FjCisgCSAgZG9uZQorIAlkb25lCitAQCAtNTI4OCwxMSArNjE1OSwxMSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisgCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorIAkgIGVsc2UKKy0JICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGRlcGxpYiIKKyAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisgCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorIAkJICAgICoiICRkZXBsaWIgIiopIDs7CistCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKysJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworIAkJZXNhYworIAkgICAgZmkKKyAJICBmaQorQEAgLTUzNzcsNyArNjI0OCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorIAkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKyAJCSAgICAqIiAkZGVwbGliICIqKSA7OworLQkJICAgICogKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRkZXBsaWIiIDs7CisrCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKKyAJCWVzYWMKKyAJICAgIGZpCisgCSAgZmkKK0BAIC01MzkwLDcgKzYyNjEsOCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisgCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorLQkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgICA7OworIAkgIHByb2cpCisgCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCitAQCAtNTQwNCw3ICs2Mjc2LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKyAJICAgIGZpCisgCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorLQkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgICA7OworIAkgICopCisgCSAgICBmdW5jX3dhcm5pbmcgIlxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCitAQCAtNTQxNSwxNyArNjI4OCwyMSBAQCBmdW5jX21vZGVfbGluayAoKQorIAktUiopCisgCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorIAkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKy0JICAgIGRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKysJICAgIGRpcj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisgCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCisgCSAgICAqIiAkZGlyICIqKSA7OworLQkgICAgKikgeHJwYXRoPSIkeHJwYXRoICRkaXIiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworIAkgICAgZXNhYworIAkgIGZpCisgCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKyAJICBjb250aW51ZQorIAkgIDs7CistCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKysJKi5sYSkKKysJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKKysJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorKwkgIDs7CisgCSouJGxpYmV4dCkKKyAJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisgCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorQEAgLTU0ODgsMTEgKzYzNjUsMTEgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisgCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZyBzdGF0aWNhbGx5LAorIAkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KKy0JICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisgCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorIAkgICAgZWxzZQorLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGRlcGxpYiIKKyAJICAgIGZpCisgCSAgZmkKKyAJICBjb250aW51ZQorQEAgLTU1MzgsNyArNjQxNSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworIAkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisgCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworLQkgICAgICAqKSBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCWZpCitAQCAtNTU0Niw4ICs2NDIzLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKyAJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisgCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCistCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGRsb3BlbiIKKy0JICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZGxvcGVuIgorKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorIAlmaQorIAorIAlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCitAQCAtNTU1OCwyMCArNjQzNSwyMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKyAJICAgIGZpCisgCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCistCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKy0JICAgIG9sZF9jb252ZW5pZW5jZT0iJG9sZF9jb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisrCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKysJICAgIGZ1bmNfYXBwZW5kIG9sZF9jb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKyAJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgdGhlbgorIAkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgorIAkgIGZpCisgCSAgdG1wX2xpYnM9CisgCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKy0JICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisrCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorLQkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisrCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKy0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKysJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIKKyAJICBkb25lCisgCSAgY29udGludWUKKyAJZmkgIyAkcGFzcyA9IGNvbnYKK0BAIC01NTc5LDkgKzY0NTYsMTUgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorIAlsaW5rbGliPQorLQlmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCistCSAgbGlua2xpYj0iJGwiCistCWRvbmUKKysJaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJgorKwkgICB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0geWVzIHx8CisrCSAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCxubyI7IH07IHRoZW4KKysJICBsaW5rbGliPSRvbGRfbGlicmFyeQorKwllbHNlCisrCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworKwkgICAgbGlua2xpYj0iJGwiCisrCSAgZG9uZQorKwlmaQorIAlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KKyAJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKyAJZmkKK0BAIC01NTk4LDkgKzY0ODEsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKyAJICAgICMgZGVwZW5kZW50IGxpYnJhcmllcyBzbyBsaWJsdGRsJ3MgZGVwbGliIHByZWxvYWRlciBkb2Vzbid0CisgCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCistCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisrCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorIAkgIGVsc2UKKy0JICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisrCSAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIKKyAJICBmaQorIAkgIGNvbnRpbnVlCisgCWZpICMgJHBhc3MgPSBkbG9wZW4KK0BAIC01NjIyLDE0ICs2NTA1LDE0IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorIAlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCistCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorKwkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorIAkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIKKyAJICAgIGRpcj0iJGxhZGlyIgorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKy0JICAgIGRpcj0iJGxpYmRpciIKKy0JICAgIGFic2Rpcj0iJGxpYmRpciIKKysJICAgIGRpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorKwkgICAgYWJzZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisgCSAgZmkKKyAJICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcworIAllbHNlCitAQCAtNTYzNywxMiArNjUyMCwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgZGlyPSIkbGFkaXIiCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCistCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKysJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisgCSAgZWxzZQorIAkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKyAJICAgIGFic2Rpcj0iJGFic19sYWRpci8kb2JqZGlyIgorIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorLQkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisrCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorIAkgIGZpCisgCWZpICMgJGluc3RhbGxlZCA9IHllcworIAlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJGxhbmFtZSIKK0BAIC01NjUzLDIwICs2NTM2LDQ2IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgaWYgdGVzdCAteiAiJGxpYmRpciIgJiYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKyAJICBmaQorLQkgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworLQkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorLQkgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKy0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJG9sZF9saWJyYXJ5IgorLQkgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCistCSAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKy0JICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKy0JCWRscHJlY29udmVuaWVuY2VsaWJzPSIkZGxwcmVjb252ZW5pZW5jZWxpYnMgJGRpci8kb2xkX2xpYnJhcnkiCistCSAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKy0JICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCistCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCistCSAgZWxzZQorLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kbGlua2xpYiIKKy0JICBmaQorKwkgIGNhc2UgIiRob3N0IiBpbgorKwkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgorKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisrCSAgICAgICMgTGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcnkgaWYgYm90aAorKwkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAorKwkgICAgICAjIHN5bWJvbHMgZnJvbSB0aGUgaW1wb3J0IGxpYnJhcnkgaWYgYSBzaGFyZWQgbGlicmFyeSBpcyBwcmVzZW50CisrCSAgICAgICMgKG90aGVyd2lzZSwgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSB3aWxsIGJlIGluY29ycmVjdCkuICBXZSBkbworKwkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgorKwkgICAgICAjIFdlIHJlY292ZXIgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSBieSAnc2F2aW5nJyB0aGUgbGEgZmlsZQorKwkgICAgICAjIG5hbWUgaW4gYSBzcGVjaWFsIHB1cnBvc2UgdmFyaWFibGUsIGFuZCAobGF0ZXIpIGV4dHJhY3RpbmcgdGhlCisrCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCisrCSAgICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisrCSAgICAgICAgZnVuY190cl9zaCAiJGRpci8kbGlua2xpYiIKKysJICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKysJICAgICAgZWxzZQorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKysJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKysJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisrCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorKwkgICAgICBmaQorKwkgICAgOzsKKysJICAgICogKQorKwkgICAgICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKysJICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisrCSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisrCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisrCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisrCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKysJICAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKysJICAgICAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCisrCSAgICAgIGVsc2UKKysJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKysJICAgICAgZmkKKysJICAgIDs7CisrCSAgZXNhYworIAlmaSAjICRwYXNzID0gZGxwcmVvcGVuCisgCisgCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCitAQCAtNTY4NCw3ICs2NTkzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAKKyAKKyAJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKy0JICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxhZGlyIgorKwkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKKyAJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorIAorIAkgIGxpbmthbGxkZXBsaWJzPW5vCitAQCAtNTY5Nyw3ICs2NjA2LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgCSAgICBjYXNlICRkZXBsaWIgaW4KKyAJICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKy0JICAgICAgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCSAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkgICAgICAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorIAkJIDs7CisgCSAgICBlc2FjCisgCSAgICAjIE5lZWQgdG8gbGluayBhZ2FpbnN0IGFsbCBkZXBlbmRlbmN5X2xpYnM/CitAQCAtNTcwOCwxMiArNjYxOCwxMiBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworIAkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAJICAgIGZpCistCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKy0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCistCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCisgCSAgZG9uZSAjIGZvciBkZXBsaWIKKyAJICBjb250aW51ZQorIAlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KK0BAIC01NzI4LDcgKzY2MzgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisgCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKyAJICAgICAgKiIkYWJzZGlyOiIqKSA7OworLQkgICAgICAqKSB0ZW1wX3JwYXRoPSIkdGVtcF9ycGF0aCRhYnNkaXI6IiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX3JwYXRoICIkYWJzZGlyOiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAKK0BAIC01NzQwLDcgKzY2NTAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorIAkgICAgICAqIiAkYWJzZGlyICIqKSA7OworLQkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworIAkgICAgZXNhYworQEAgLTU3NDksNyArNjY1OSw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAqKQorIAkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICAgICAqIiAkbGliZGlyICIqKSA7OworLQkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworIAkgICAgZXNhYworQEAgLTU3NzQsMTIgKzY2ODQsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICBjYXNlICRob3N0IGluCisgCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKyAJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAorLQkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKyAJICAgICAgbmVlZF9yZWxpbms9bm8KKyAJICAgIDs7CisgCSAgKikKKyAJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKy0JICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisgCSAgICAgIG5lZWRfcmVsaW5rPXllcworIAkgICAgZmkKKyAJICAgIDs7CitAQCAtNTgxNCw3ICs2NzI0LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICopCisgCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGFic2RpciAiKikgOzsKKy0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKysJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01ODIzLDcgKzY3MzMsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgKikKKyAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKK0BAIC01ODM1LDcgKzY3NDUsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgc2hpZnQKKyAJICAgIHJlYWxuYW1lPSIkMSIKKyAJICAgIHNoaWZ0CistCSAgICBldmFsICJsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiIgorKwkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisgCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKyAJICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisgCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKK0BAIC01ODQ4LDcgKzY3NTgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJdmVyc3VmZml4PSItJG1ham9yIgorIAkJOzsKKyAJICAgICAgZXNhYworLQkgICAgICBldmFsICJzb25hbWU9XCIkc29uYW1lX3NwZWNcIiIKKysJICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorIAkgICAgZWxzZQorIAkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKyAJICAgIGZpCitAQCAtNTg3Nyw3ICs2Nzg3LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGxpbmtsaWI9JG5ld2xpYgorIAkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgorIAorLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKysJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorIAkgICAgYWRkX3NobGlicGF0aD0KKyAJICAgIGFkZF9kaXI9CisgCSAgICBhZGQ9CitAQCAtNTkzMyw3ICs2ODQzLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisgCQkgIGNhc2UgJGxpYmRpciBpbgorIAkJICAgIFtcXC9dKikKKy0JCSAgICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisrCQkgICAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKyAJCSAgICAgIDs7CisgCQkgIGVzYWMKKyAJCWZpCitAQCAtNTk1NSw3ICs2ODY1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorIAkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisgCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OworLQkgICAgICAqKSBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGFkZF9zaGxpYnBhdGg6IiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KK0BAIC01OTY5LDEzICs2ODc5LDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisgCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorIAkJKiI6JGxpYmRpcjoiKikgOzsKKy0JCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworKwkJKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKyAJICAgIGZpCisgCSAgZmkKKyAKKy0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisgCSAgICBhZGRfc2hsaWJwYXRoPQorIAkgICAgYWRkX2Rpcj0KKyAJICAgIGFkZD0KK0BAIC01OTg5LDcgKzY4OTksNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKyAJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKyAJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKKy0JICAgICAgKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgICAgYWRkPSItbCRuYW1lIgorIAkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorQEAgLTYwMDEsMTIgKzY5MTEsMTIgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJICAgICAgZmkKKyAJICAgIGVsc2UKKyAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KKy0JICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorKwkgICAgICBhZGRfZGlyPSItTCRsdF9zeXNyb290JGxpYmRpciIKKyAJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCisgCQkgIFtcXC9dKikKKy0JCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorKwkJICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCitAQCAtNjA4MywyNyArNjk5MywzMyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAJCSAgIGNhc2UgIiAkeHJwYXRoICIgaW4KKyAJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKy0JCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKysJCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OworIAkJICAgZXNhYzs7CistCSAgICAgICopIHRlbXBfZGVwbGlicz0iJHRlbXBfZGVwbGlicyAkbGliZGlyIjs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfZGVwbGlicyAiICRsaWJkaXIiOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorIAkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorIAkgIGZpCisgCistCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisrCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGFic2RpciIKKyAJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKyAJICB0ZXN0ICIkbGlua19zdGF0aWMiID0gbm8gJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKyAJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworIAkgIHRtcF9saWJzPQorIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKyAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorLQkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKysJICAgIGNhc2UgJGRlcGxpYiBpbgorKyAgICAgICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorKyAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OworKyAgICAgICAgICAgICAgKikgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiIDs7CisrICAgICAgICAgICAgZXNhYworKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKyAJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKy0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworKwkgICAgICAqIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0ICIqKQorKyAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCistCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisrCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisgCSAgZG9uZQorIAorIAkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorQEAgLTYxMTMsOCArNzAyOSwxMCBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBjYXNlICRkZXBsaWIgaW4KKyAJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworIAkgICAgICAqLmxhKQorKwkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgorKwkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CisgCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKy0JCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisrCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorIAkJY2FzZSAkZGlyIGluCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKK0BAIC02MTMwLDcgKzcwNDgsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJY2FzZSAkaG9zdCBpbgorIAkJKi0qLWRhcndpbiopCisgCQkgIGRlcGRlcGw9CistCQkgIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQkgIGV2YWwgZGVwbGlicmFyeV9uYW1lcz1gJHtTRUR9IC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKyAJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiIDsgdGhlbgorIAkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworIAkJICAgICAgZGVwZGVwbD0kdG1wCitAQCAtNjE0MSw4ICs3MDU5LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICAgZmkKKy0JCSAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKy0JCSAgICAgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisrCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR7d2x9LWR5bGliX2ZpbGUgJHt3bH0ke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisrCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisgCQkgICAgICBwYXRoPQorIAkJICAgIGZpCisgCQkgIGZpCitAQCAtNjE1Miw3ICs3MDcwLDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgOzsKKyAJCWVzYWMKKyAJCWVsc2UKKy0JCSAgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisrCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisgCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKyAJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKK0BAIC02MTkyLDcgKzcxMTAsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKyAJICAgIGNhc2UgIiRsaWJfc2VhcmNoX3BhdGggIiBpbgorIAkgICAgKiIgJGRpciAiKikgOzsKKy0JICAgICopIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCSAgbmV3bGliX3NlYXJjaF9wYXRoPQorQEAgLTYyMDUsNyArNzEyMyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCWZpCisgCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworIAkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKKy0JICBldmFsIHRtcF9saWJzPVwkJHZhcgorKwkgIGV2YWwgdG1wX2xpYnM9XCJcJCR2YXJcIgorIAkgIG5ld19saWJzPQorIAkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworIAkgICAgIyBGSVhNRTogUGVkYW50aWNhbGx5LCB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbywgc28KK0BAIC02MjUwLDEzICs3MTY4LDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAtTCopCisgCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorIAkgICAgICAqIiAkZGVwbGliICIqKSA7OworLQkgICAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKKyAJICAgICAgZXNhYworIAkgICAgICA7OworLQkgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworKwkgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworIAkgICAgZXNhYworIAkgIGRvbmUKKy0JICBldmFsICR2YXI9XCR0bXBfbGlicworKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisgCWRvbmUgIyBmb3IgdmFyCisgICAgICAgZmkKKyAgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworQEAgLTYyNjksNyArNzE4Nyw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgOzsKKyAJZXNhYworIAlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCistCSAgdG1wX2xpYnM9IiR0bXBfbGlicyAkaSIKKysJICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRpIgorIAlmaQorICAgICAgIGRvbmUKKyAgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCitAQCAtNjMxMCw3ICs3MjI4LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorLSAgICAgIG9ianM9IiRvYmpzJG9sZF9kZXBsaWJzIgorKyAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKKyAgICAgICA7OworIAorICAgICBsaWIpCitAQCAtNjMxOSw4ICs3MjM3LDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBsaWIqKQorIAlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisgCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorLQlldmFsICJzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIiCistCWV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisrCWV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorIAk7OworICAgICAgICopCisgCXRlc3QgIiRtb2R1bGUiID0gbm8gJiYgXAorQEAgLTYzMzAsOCArNzI0OCw4IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAorIAkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKyAJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKy0JICBldmFsICJzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIiCistCSAgZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKysJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorKwkgIGV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgorIAllbHNlCisgCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorIAkgIGxpYm5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorQEAgLTYzNDYsNyArNzI2NCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgZWNobworIAkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKyAJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKy0JICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKysJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCisgCWZpCisgICAgICAgZmkKKyAKK0BAIC02NTQ0LDcgKzc0NjIsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgIGRvbmUKKyAKKyAJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCistCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7Y3VycmVudH0uMCIKKysJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCisgCSAgOzsKKyAKKyAJcW54KQorQEAgLTY2MTIsMTAgKzc1MzAsMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBmaQorIAorICAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiAieWVzIgorLSAgICAgIGxpYm9ianM9IiRsaWJvYmpzICRzeW1maWxlb2JqIgorKyAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKKyAgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAorLSAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKysgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgorIAkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorIAkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKyAJcmVtb3ZlbGlzdD0KK0BAIC02NjMxLDcgKzc1NDksNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkJICAgY29udGludWUKKyAJCSBmaQorIAkgICAgICAgZmkKKy0JICAgICAgIHJlbW92ZWxpc3Q9IiRyZW1vdmVsaXN0ICRwIgorKwkgICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRwIgorIAkgICAgICAgOzsKKyAJICAgICopIDs7CisgCSAgZXNhYworQEAgLTY2NDIsNyArNzU2MCw3IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCisgICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCisgICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKy0Jb2xkbGlicz0iJG9sZGxpYnMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKysJZnVuY19hcHBlbmQgb2xkbGlicyAiICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisgCisgCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KKyAJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAkbG8ybyIgfCAkTkwyU1BgCitAQCAtNjY1OSwxMCArNzU3NywxMSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisgCXRlbXBfeHJwYXRoPQorIAlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCistCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisrCSAgZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisgCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKyAJICAqIiAkbGliZGlyICIqKSA7OworLQkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisgCSAgZXNhYworIAlkb25lCisgCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCitAQCAtNjY3Niw3ICs3NTk1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KKyAJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKyAJKiIgJGxpYiAiKikgOzsKKy0JKikgZGxmaWxlcz0iJGRsZmlsZXMgJGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgCitAQCAtNjY4Niw3ICs3NjA1LDcgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAgICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KKyAJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorIAkqIiAkbGliICIqKSA7OworLQkqKSBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKKyAJZXNhYworICAgICAgIGRvbmUKKyAKK0BAIC02Njk4LDcgKzc2MTcsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgOzsKKyAJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisgCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgU3lzdGVtLmx0ZnJhbWV3b3JrIgorKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKKyAJICAgIDs7CisgCSAgKi0qLW5ldGJzZCopCisgCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KK0BAIC02NzE1LDcgKzc2MzQsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICopCisgCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgorIAkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgorLQkgICAgICBkZXBsaWJzPSIkZGVwbGlicyAtbGMiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtbGMiCisgCSAgICBmaQorIAkgICAgOzsKKyAJICBlc2FjCitAQCAtNjc2NCwxOCArNzY4MywxOCBAQCBFT0YKKyAJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKyAJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisgCQkgICoiICRpICIqKQorLQkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCSAgICBpPSIiCisgCQkgICAgOzsKKyAJCSAgZXNhYworIAkJZmkKKyAJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKy0JCSAgZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKy0JCSAgZXZhbCAiZGVwbGliX21hdGNoZXM9XCIkbGlicmFyeV9uYW1lc19zcGVjXCIiCisrCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisgCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisgCQkgIGRlcGxpYl9tYXRjaD0kMQorIAkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCistCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorIAkJICBlbHNlCisgCQkgICAgZHJvcHBlZGRlcHM9eWVzCisgCQkgICAgZWNobworQEAgLTY3ODksNyArNzcwOCw3IEBAIEVPRgorIAkJZmkKKyAJCTs7CisgCSAgICAgICopCistCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGRvbmUKK0BAIC02ODA3LDE4ICs3NzI2LDE4IEBAIEVPRgorIAkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisgCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisgCQkgICAgKiIgJGkgIiopCistCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCSAgICAgIGk9IiIKKyAJCSAgICAgIDs7CisgCQkgICAgZXNhYworIAkJICBmaQorIAkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCistCQkgICAgZXZhbCAibGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIiIKKy0JCSAgICBldmFsICJkZXBsaWJfbWF0Y2hlcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiIKKysJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisgCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKyAJCSAgICBkZXBsaWJfbWF0Y2g9JDEKKyAJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCistCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKysJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKyAJCSAgICBlbHNlCisgCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKyAJCSAgICAgIGVjaG8KK0BAIC02ODQwLDcgKzc3NTksNyBAQCBFT0YKKyAJCWZpCisgCQk7OworIAkgICAgICAqKQorLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCitAQCAtNjg1NywxNSArNzc3NiwyNyBAQCBFT0YKKyAJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisgCQkqIiAkYV9kZXBsaWIgIiopCistCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCSAgYV9kZXBsaWI9IiIKKyAJCSAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKyAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKy0JCWV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKysJCWlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX2dsb2IiOyB0aGVuCisrCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCisrCQllbHNlCisrCQkgIGxpYm5hbWVnbG9iPSRsaWJuYW1lCisrCQlmaQorKwkJdGVzdCAiJHdhbnRfbm9jYXNlZ2xvYiIgPSB5ZXMgJiYgbm9jYXNlZ2xvYj1gc2hvcHQgLXAgbm9jYXNlZ2xvYmAKKyAJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworLQkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKysJCSAgaWYgdGVzdCAiJHdhbnRfbm9jYXNlZ2xvYiIgPSB5ZXM7IHRoZW4KKysJCSAgICBzaG9wdCAtcyBub2Nhc2VnbG9iCisrCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorKwkJICAgICRub2Nhc2VnbG9iCisrCQkgIGVsc2UKKysJCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCisrCQkgIGZpCisgCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKyAJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisgCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorQEAgLTY4ODUsMTAgKzc4MTYsMTAgQEAgRU9GCisgCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKyAJCQllc2FjCisgCQkgICAgICBkb25lCistCQkgICAgICBpZiBldmFsICIkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIiAyPi9kZXYvbnVsbCB8CisrCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorIAkJCSAkU0VEIC1lIDEwcSB8CisgCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCistCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisgCQkJYV9kZXBsaWI9IiIKKyAJCQlicmVhayAyCisgCQkgICAgICBmaQorQEAgLTY5MTMsNyArNzg0NCw3IEBAIEVPRgorIAkgICAgICA7OworIAkgICAgKikKKyAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKy0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorIAkgICAgICA7OworIAkgICAgZXNhYworIAkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCitAQCAtNjkyOSwyMCArNzg2MCwyMCBAQCBFT0YKKyAJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisgCQkqIiAkYV9kZXBsaWIgIiopCistCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCSAgYV9kZXBsaWI9IiIKKyAJCSAgOzsKKyAJCWVzYWMKKyAJICAgICAgZmkKKyAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKy0JCWV2YWwgImxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIiCisrCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKyAJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworIAkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKyAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworIAkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisgCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKKyAJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJCSAgICAgIGFfZGVwbGliPSIiCisgCQkgICAgICBicmVhayAyCisgCQkgICAgZmkKK0BAIC02OTY3LDcgKzc4OTgsNyBAQCBFT0YKKyAJICAgICAgOzsKKyAJICAgICopCisgCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCistCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKyAJICAgICAgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorQEAgLTcwNzEsNyArODAwMiw3IEBAIEVPRgorIAkqKQorIAkgIGNhc2UgIiAkZGVwbGlicyAiIGluCisgCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisrCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKyAJICBlc2FjCisgCSAgOzsKKyAJZXNhYworQEAgLTcwODEsMTAgKzgwMTIsMTAgQEAgRU9GCisgCS1MKikKKyAJICBjYXNlICIgJG5ld19saWJzICIgaW4KKyAJICAqIiAkZGVwbGliICIqKSA7OworLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCSAgZXNhYworIAkgIDs7CistCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKysJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworIAllc2FjCisgICAgICAgZG9uZQorICAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKK0BAIC03MTAxLDEwICs4MDMyLDEyIEBAIEVPRgorIAkgIGhhcmRjb2RlX2xpYmRpcnM9CisgCSAgZGVwX3JwYXRoPQorIAkgIHJwYXRoPSIkZmluYWxpemVfcnBhdGgiCistCSAgdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisrCSAgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisgCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCisrCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisgCQllbHNlCitAQCAtNzExMywxOCArODA0NiwxOCBAQCBFT0YKKyAJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorIAkJICAgIDs7CisgCQkgICopCistCQkgICAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisrCQkgICAgZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorIAkJICAgIDs7CisgCQkgIGVzYWMKKyAJCWZpCisgCSAgICAgIGVsc2UKKy0JCWV2YWwgImZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorLQkJZGVwX3JwYXRoPSIkZGVwX3JwYXRoICRmbGFnIgorKwkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKwkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisgCSAgICAgIGZpCisgCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorIAkgICAgICAqIiAkbGliZGlyICIqKSA7OworLQkgICAgICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgICAgICAqKSBmdW5jX2FwcGVkIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGRvbmUKK0BAIC03MTMzLDQwICs4MDY2LDM4IEBAIEVPRgorIAkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgorLQkgICAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiIgorKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXCIKKyAJICAgIGVsc2UKKy0JICAgICAgZXZhbCAiZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKysJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgCSAgICBmaQorIAkgIGZpCisgCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKyAJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisgCSAgICBycGF0aD0KKyAJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCistCSAgICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKysJICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorIAkgICAgZG9uZQorLQkgICAgZXZhbCAkcnVucGF0aF92YXI9XCRycGF0aFwkJHJ1bnBhdGhfdmFyCistCSAgICBleHBvcnQgJHJ1bnBhdGhfdmFyCisrCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKyAJICBmaQorIAkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisgCWZpCisgCisgCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKy0JdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCisrCXRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKyAJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KKy0JICBldmFsICRzaGxpYnBhdGhfdmFyPVwkc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhcgorLQkgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorKwkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAJZmkKKyAKKyAJIyBHZXQgdGhlIHJlYWwgYW5kIGxpbmsgbmFtZXMgb2YgdGhlIGxpYnJhcnkuCistCWV2YWwgInNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIiIKKy0JZXZhbCAibGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiIKKysJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKysJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisgCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworIAlzaGlmdAorIAlyZWFsbmFtZT0iJDEiCisgCXNoaWZ0CisgCisgCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKy0JICBldmFsICJzb25hbWU9XCIkc29uYW1lX3NwZWNcIiIKKysJICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisgCWVsc2UKKyAJICBzb25hbWU9IiRyZWFsbmFtZSIKKyAJZmkKK0BAIC03MTc4LDcgKzgxMDksNyBAQCBFT0YKKyAJbGlua25hbWVzPQorIAlmb3IgbGluaworIAlkbworLQkgIGxpbmtuYW1lcz0iJGxpbmtuYW1lcyAkbGluayIKKysJICBmdW5jX2FwcGVuZCBsaW5rbmFtZXMgIiAkbGluayIKKyAJZG9uZQorIAorIAkjIFVzZSBzdGFuZGFyZCBvYmplY3RzIGlmIHRoZXkgYXJlIHBpYworQEAgLTcxODksNyArODEyMCw3IEBAIEVPRgorIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgJG9wdF9kcnlfcnVuIHx8IGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorIAkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorLQkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzIgorKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgorIAlmaQorIAorIAlvcmlnX2V4cG9ydF9zeW1ib2xzPQorQEAgLTcyMjAsMTMgKzgxNTEsNDUgQEAgRU9GCisgCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworIAkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworIAkgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCistCSAgICBmb3IgY21kIGluICRjbWRzOyBkbworKwkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCisgCSAgICAgIElGUz0iJHNhdmVfaWZzIgorLQkgICAgICBldmFsICJjbWQ9XCIkY21kXCIiCistCSAgICAgIGZ1bmNfbGVuICIgJGNtZCIKKy0JICAgICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKy0JICAgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisrCSAgICAgICMgVGFrZSB0aGUgbm9ybWFsIGJyYW5jaCBpZiB0aGUgbm1fZmlsZV9saXN0X3NwZWMgYnJhbmNoCisrCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgorKwkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgorKwkJKn5mdW5jX2NvbnZlcnRfZmlsZV9ub29wIHwgKn5mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiB8IH4qKQorKwkJICB0cnlfbm9ybWFsX2JyYW5jaD15ZXMKKysJCSAgZXZhbCBjbWQ9XCIkY21kMVwiCisrCQkgIGZ1bmNfbGVuICIgJGNtZCIKKysJCSAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKysJCSAgOzsKKysJCSopCisrCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCisrCQkgIDs7CisrCSAgICAgIGVzYWMKKysJICAgICAgaWYgdGVzdCAiJHRyeV9ub3JtYWxfYnJhbmNoIiA9IHllcyBcCisrCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAorKwkJICAgICAgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IH0KKysJICAgICAgdGhlbgorKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKysJICAgICAgZWxpZiB0ZXN0IC1uICIkbm1fZmlsZV9saXN0X3NwZWMiOyB0aGVuCisrCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorKwkJb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorKwkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisrCQlzYXZlX291dHB1dD0kb3V0cHV0CisrCQlvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubm0KKysJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorKwkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisrCQlmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisrCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisrCQlmb3Igb2JqIGluICRzYXZlX2xpYm9ianM7IGRvCisrCQkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorKwkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKysJCWRvbmUgPiAiJG91dHB1dCIKKysJCWV2YWwgY21kPVwiJGNtZDFcIgorIAkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworKwkJb3V0cHV0PSRzYXZlX291dHB1dAorKwkJbGlib2Jqcz0kc2F2ZV9saWJvYmpzCisgCQlza2lwcGVkX2V4cG9ydD1mYWxzZQorIAkgICAgICBlbHNlCisgCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KK0BAIC03MjQ4LDcgKzgyMTEsNyBAQCBFT0YKKyAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorIAkgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorIAkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorLQkgICRvcHRfZHJ5X3J1biB8fCAkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisgCWZpCisgCisgCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCitAQCAtNzI2MCw3ICs4MjIzLDcgQEAgRU9GCisgCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKyAJICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorIAkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorLQkgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKysJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisgCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisgCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKyAJZmkKK0BAIC03MjcwLDcgKzgyMzMsNyBAQCBFT0YKKyAJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKyAJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisgCSAgKikKKy0JICAgIHRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorKwkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCisgCSAgICA7OworIAkgIGVzYWMKKyAJZG9uZQorQEAgLTcyODYsNDMgKzgyNDksNDMgQEAgRU9GCisgCSAgZmkKKyAJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisgCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKy0JICAgIGV2YWwgImxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIiCisrCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKyAJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCSAgZWxzZQorIAkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorLQkgICAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorIAkgIGZpCisgCWZpCisgCisgCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKy0JICBldmFsICJmbGFnPVwiJHRocmVhZF9zYWZlX2ZsYWdfc3BlY1wiIgorLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKysJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKKysJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZmxhZyIKKyAJZmkKKyAKKyAJIyBNYWtlIGEgYmFja3VwIG9mIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IHdoZW4gcmVsaW5raW5nCistCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorLQkgICRvcHRfZHJ5X3J1biB8fCAoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSkgfHwgZXhpdCAkPworKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPworIAlmaQorIAorIAkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisgCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorLQkgICAgZXZhbCAidGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKyAJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworIAkgIGVsc2UKKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiIgorKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorIAkgICAgY21kcz0kbW9kdWxlX2NtZHMKKyAJICBmaQorIAllbHNlCisgCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKy0JICAgIGV2YWwgInRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2V4cHN5bV9jbWRzXCIKKyAJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKyAJICBlbHNlCistCSAgICBldmFsICJ0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIiCisrCSAgICBldmFsIHRlc3RfY21kcz1cIiRhcmNoaXZlX2NtZHNcIgorIAkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisgCSAgZmkKKyAJZmkKK0BAIC03MzY2LDEwICs4MzI5LDEzIEBAIEVPRgorIAkgICAgZWNobyAnSU5QVVQgKCcgPiAkb3V0cHV0CisgCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKyAJICAgIGRvCistCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisrCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorIAkgICAgZG9uZQorIAkgICAgZWNobyAnKScgPj4gJG91dHB1dAorLQkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCSAgICBvdXRwdXQ9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorIAkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisgCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisgCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGxpbmtlciBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCitAQCAtNzM4MywxNSArODM0OSwxNyBAQCBFT0YKKyAJICAgIGZpCisgCSAgICBmb3Igb2JqCisgCSAgICBkbworLQkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKysJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKyAJICAgIGRvbmUKKy0JICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKy0JICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRvdXRwdXRcIgorKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIKKyAJICBlbHNlCisgCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorIAkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorIAkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKy0JICAgICAgZXZhbCAidGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIiCisrCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKyAJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorIAkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKyAJICAgICAgbGVuPSRsZW4wCitAQCAtNzQxMSwxMiArODM3OSwxMiBAQCBFT0YKKyAJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorIAkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCisgCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKKy0JCSAgICBldmFsICJjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiIgorKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorIAkJICBlbHNlCisgCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KKyAJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorIAkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorLQkJICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIiCisrCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisgCQkgIGZpCisgCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorIAkJICBmdW5jX2FyaXRoICRrICsgMQorQEAgLTc0MzMsMTEgKzg0MDEsMTEgQEAgRU9GCisgCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKyAJICAgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCistCSAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIiCisrCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorLQkgICAgICAgIGV2YWwgImNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiIgorKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKyAJICAgICAgZmkKKy0JICAgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisgCisgCSAgICBlbHNlCisgCSAgICAgIG91dHB1dD0KK0BAIC03NDUwLDkgKzg0MTgsOSBAQCBFT0YKKyAJICAgICAgbGlib2Jqcz0kb3V0cHV0CisgCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisgCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorLQkgICAgICBldmFsICJjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiIgorKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKyAJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKy0JCWV2YWwgImNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIiIKKysJCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisgCSAgICAgIGZpCisgCSAgICBmaQorIAorQEAgLTc0NzEsNyArODQzOSw3IEBAIEVPRgorIAkJbHRfZXhpdD0kPworIAorIAkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CistCQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKysJCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKyAJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKyAJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorIAkJICAgICRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCitAQCAtNzQ5Miw3ICs4NDYwLDcgQEAgRU9GCisgCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisgCSAgICAgIHRtcF9leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorIAkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKy0JICAgICAgJG9wdF9kcnlfcnVuIHx8ICRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyIKKysJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisgCSAgICBmaQorIAorIAkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCitAQCAtNzUwNCw3ICs4NDcyLDcgQEAgRU9GCisgCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisgCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisgCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorLQkgICAgICBkZWxmaWxlcz0iJGRlbGZpbGVzICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKyAJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisgCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCisgCSAgICBmaQorQEAgLTc1MTUsNyArODQ4Myw3IEBAIEVPRgorIAkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKyAKKyAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKy0JICAgIGV2YWwgImxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIiCisrCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKyAJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCSAgZmkKKyAJICAjIEV4cGFuZCB0aGUgbGlicmFyeSBsaW5raW5nIGNvbW1hbmRzIGFnYWluIHRvIHJlc2V0IHRoZQorQEAgLTc1MzksMjMgKzg1MDcsMjMgQEAgRU9GCisgCisgCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKyAJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorLQkgIGV2YWwgImNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIiIKKysJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorIAlmaQorIAorIAkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKyAJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCistCSAgbGlib2Jqcz0iJGxpYm9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAkgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisgCWZpCisgCisgCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworIAlmb3IgY21kIGluICRjbWRzOyBkbworIAkgIElGUz0iJHNhdmVfaWZzIgorLQkgIGV2YWwgImNtZD1cIiRjbWRcIiIKKysJICBldmFsIGNtZD1cIiRjbWRcIgorIAkgICRvcHRfc2lsZW50IHx8IHsKKyAJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKyAJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKK0BAIC03NTY0LDcgKzg1MzIsNyBAQCBFT0YKKyAJICAgIGx0X2V4aXQ9JD8KKyAKKyAJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorLQkgICAgaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisrCSAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisgCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisgCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKyAJCSRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCitAQCAtNzU3Niw4ICs4NTQ0LDggQEAgRU9GCisgCUlGUz0iJHNhdmVfaWZzIgorIAorIAkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKy0JaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCistCSAgJG9wdF9kcnlfcnVuIHx8IChjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKSB8fCBleGl0ICQ/CisrCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKysJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisgCisgCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorQEAgLTc2NTYsMTcgKzg2MjQsMjAgQEAgRU9GCisgCisgICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorIAlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCistCSAgZXZhbCAidG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIiIKKysJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKyAJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCisgCWVsc2UKKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCistCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKyAKKyAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKyAJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgCWZpCisgICAgICAgZmkKKyAKKysgICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcworKyAgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBsaWJvYmpzPSIkbm9uX3BpY19vYmplY3RzIgorKworICAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7IC9cLmxpYiQvZDsgJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorIAorQEAgLTc2OTAsNyArODY2MSw3IEBAIEVPRgorIAkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorIAkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorIAkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCistCSMgJG9wdF9kcnlfcnVuIHx8IGVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiB8fCBleGl0ICQ/CisrCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworIAlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgICBmaQorIAorQEAgLTc3NDAsOCArODcxMSw4IEBAIEVPRgorIAlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisgCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorIAkgICAgMTAuWzAxMjNdKQorLQkgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorLQkgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAke3dsfS1iaW5kX2F0X2xvYWQiCisrCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKysJICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKKyAJICAgIDs7CisgCSAgZXNhYworIAlmaQorQEAgLTc3NjEsNyArODczMiw3IEBAIEVPRgorIAkqKQorIAkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKyAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCistCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKysJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworIAkgIGVzYWMKKyAJICA7OworIAllc2FjCitAQCAtNzc3MSwxNyArODc0MiwxNyBAQCBFT0YKKyAJLUwqKQorIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgorIAkgICoiICRkZXBsaWIgIiopIDs7CistCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKyAJICBlc2FjCisgCSAgOzsKKy0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisgCWVzYWMKKyAgICAgICBkb25lCisgICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisgCisgCistICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCistICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGZpbmFsaXplX2RlcGxpYnMiCisrICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKKysgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisgCisgICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKyAJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorQEAgLTc3ODksNyArODc2MCw3IEBAIEVPRgorIAkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKyAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWRvbmUKKyAgICAgICBmaQorQEAgLTc4MDgsMTggKzg3NzksMTggQEAgRU9GCisgCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKKyAJCTs7CisgCSAgICAgICopCistCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKysJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKyAJCTs7CisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorLQkgICAgZXZhbCAiZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCistCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCisgCSAgKiIgJGxpYmRpciAiKikgOzsKKy0JICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworKwkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OworIAkgIGVzYWMKKyAJZmkKKyAJY2FzZSAkaG9zdCBpbgorQEAgLTc4MjgsMTIgKzg3OTksMTIgQEAgRU9GCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JGxpYmRpcjoiKikgOzsKKyAJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKy0JICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokbGliZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRsaWJkaXIiOzsKKyAJICBlc2FjCisgCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisgCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisgCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisrCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisgCSAgZXNhYworIAkgIDs7CisgCWVzYWMKK0BAIC03ODQyLDcgKzg4MTMsNyBAQCBFT0YKKyAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKyAJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorLQlldmFsICJycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICBmaQorICAgICAgIGNvbXBpbGVfcnBhdGg9IiRycGF0aCIKKyAKK0BAIC03ODU5LDE4ICs4ODMwLDE4IEBAIEVPRgorIAkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisgCQk7OworIAkgICAgICAqKQorLQkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisrCQlmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisgCQk7OworIAkgICAgICBlc2FjCisgCSAgICBmaQorIAkgIGVsc2UKKy0JICAgIGV2YWwgImZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKysJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIgJGZsYWciCisgCSAgZmkKKyAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisgCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorIAkgICoiICRsaWJkaXIgIiopIDs7CistCSAgKikgZmluYWxpemVfcGVybV9ycGF0aD0iJGZpbmFsaXplX3Blcm1fcnBhdGggJGxpYmRpciIgOzsKKysJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKyAJICBlc2FjCisgCWZpCisgICAgICAgZG9uZQorQEAgLTc4NzgsNyArODg0OSw3IEBAIEVPRgorICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorIAkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCistCWV2YWwgInJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisrCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorICAgICAgIGZpCisgICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKyAKK0BAIC03OTIxLDYgKzg4OTIsMTIgQEAgRU9GCisgCWV4aXRfc3RhdHVzPTAKKyAJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0X3N0YXR1cz0kPycKKyAKKysJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisrCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisrCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisrCWZpCisrCisgCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisgCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KKyAJICBmdW5jX3Nob3dfZXZhbCAnJFJNICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iJworQEAgLTc5NDMsNyArODkyMCw3IEBAIEVPRgorIAkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisgCSAgcnBhdGg9CisgCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKy0JICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKyAJICBkb25lCisgCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorIAlmaQorQEAgLTc5NTEsNyArODkyOCw3IEBAIEVPRgorIAkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisgCSAgcnBhdGg9CisgCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKy0JICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKysJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKyAJICBkb25lCisgCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKyAJZmkKK0BAIC03OTY2LDYgKzg5NDMsMTMgQEAgRU9GCisgCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAorIAkjIExpbmsgdGhlIGV4ZWN1dGFibGUgYW5kIGV4aXQKKyAJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworKworKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKysJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKysJICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisrCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKysJZmkKKysKKyAJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICAgZmkKKyAKK0BAIC03OTk5LDYgKzg5ODMsMTIgQEAgRU9GCisgCisgICAgICAgZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworIAorKyAgICAgIGlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorKwlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiCisrCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisrCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisrICAgICAgZmkKKysKKyAgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKyAKK0BAIC04MDk2LDcgKzkwODYsNyBAQCBFT0YKKyAJZWxzZQorIAkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorIAkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKy0JICAgIG9sZG9ianM9IiRvbGRvYmpzICRzeW1maWxlb2JqIgorKwkgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorIAkgIGZpCisgCWZpCisgCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCitAQCAtODEwNCwxMCArOTA5NCwxMCBAQCBFT0YKKyAKKyAgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KKyAJZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisrCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCisgCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCistCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorKwlmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisgICAgICAgZmkKKyAKKyAgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KK0BAIC04MTE4LDEwICs5MTA4LDEwIEBAIEVPRgorIAkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKyAJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisgCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKKy0JICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKysJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorIAorIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCistCSAgb2xkb2Jqcz0iJG9sZG9ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisrCSAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorIAlmaQorIAorIAkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKK0BAIC04MTM5LDcgKzkxMjksNyBAQCBFT0YKKyAJZWxzZQorIAkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKyAJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorLQkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisgCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgorIAkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworIAkgIG9sZG9ianM9CitAQCAtODE2MywxOCArOTE1MywyOCBAQCBFT0YKKyAJCWVzYWMKKyAJICAgICAgZG9uZQorIAkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCistCSAgICAgIG9sZG9ianM9IiRvbGRvYmpzICRnZW50b3AvJG5ld29iaiIKKysJICAgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRnZW50b3AvJG5ld29iaiIKKyAJICAgICAgOzsKKy0JICAgICopIG9sZG9ianM9IiRvbGRvYmpzICRvYmoiIDs7CisrCSAgICAqKSBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJG9iaiIgOzsKKyAJICAgIGVzYWMKKyAJICBkb25lCisgCWZpCistCWV2YWwgImNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiIgorKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisgCisgCWZ1bmNfbGVuICIgJGNtZHMiCisgCWxlbj0kZnVuY19sZW5fcmVzdWx0CisgCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorIAkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKysJZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgorKwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgY29tbWFuZCBmaWxlIGFyY2hpdmUgbGlua2luZy4uLiIKKysJICBmb3Igb2JqIGluICRvbGRvYmpzCisrCSAgZG8KKysJICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorKwkgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisrCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAorKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kbGlibmFtZS5saWJjbWQiCisrCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKyAJZWxzZQorIAkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisgCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorQEAgLTgxODksNyArOTE4OSw3IEBAIEVPRgorIAkgIGRvCisgCSAgICBsYXN0X29sZG9iaj0kb2JqCisgCSAgZG9uZQorLQkgIGV2YWwgInRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIiCisrCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisgCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorIAkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorIAkgIGxlbj0kbGVuMAorQEAgLTgyMDgsNyArOTIwOCw3IEBAIEVPRgorIAkJUkFOTElCPSRzYXZlX1JBTkxJQgorIAkgICAgICBmaQorIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKy0JICAgICAgZXZhbCAiY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiIgorKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgorIAkgICAgICBvYmpsaXN0PQorIAkgICAgICBsZW49JGxlbjAKKyAJICAgIGZpCitAQCAtODIxNiw5ICs5MjE2LDkgQEAgRU9GCisgCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorIAkgIG9sZG9ianM9JG9iamxpc3QKKyAJICBpZiB0ZXN0ICJYJG9sZG9ianMiID0gIlgiIDsgdGhlbgorLQkgICAgZXZhbCAiY21kcz1cIlwkY29uY2F0X2NtZHNcIiIKKysJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorIAkgIGVsc2UKKy0JICAgIGV2YWwgImNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiIgorKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgorIAkgIGZpCisgCWZpCisgICAgICAgZmkKK0BAIC04MjY4LDEyICs5MjY4LDIzIEBAIEVPRgorIAkgICAgICAqLmxhKQorIAkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKyAJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0JCWxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisrCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorIAkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorIAkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKy0JCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisrCQk7OworKwkgICAgICAtTCopCisrCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKKysJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLUwkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorIAkJOzsKKy0JICAgICAgKikgbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRkZXBsaWIiIDs7CisrCSAgICAgIC1SKikKKysJCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgorKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisrCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisrCQk7OworKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAkZGVwbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCisgCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCitAQCAtODI4NCwxMiArOTI5NSwxNCBAQCBFT0YKKyAJICAgICAgKi5sYSkKKyAJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgorIAkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLQkJbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisrCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKysJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCisrCisgCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisgCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYmRpci8kbmFtZSIKKysJCWZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKyAJCTs7CistCSAgICAgICopIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiIDs7CisrCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIiA7OworIAkgICAgICBlc2FjCisgCSAgICBkb25lCisgCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKK0BAIC04MzAzLDEwICs5MzE2LDExIEBAIEVPRgorIAkJIyB0aGUgbGlicmFyeToKKyAJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisgCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCistCQlsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKysJCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgorKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKyAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCistCQluZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkbGliZGlyLyRuYW1lIgorKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorIAkJOzsKKyAJICAgICAgZXNhYworIAkgICAgZG9uZQorQEAgLTgzMTgsNyArOTMzMiw3IEBAIEVPRgorIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisgCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisgCSAgICAgIGVzYWMKKy0JICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGFicyIKKysJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCisgCSAgICBkb25lCisgCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAJICAgIG5ld2RscHJlZmlsZXM9CitAQCAtODMyNyw3ICs5MzQxLDcgQEAgRU9GCisgCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKKyAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKyAJICAgICAgZXNhYworLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkYWJzIgorKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKKyAJICAgIGRvbmUKKyAJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorIAkgIGZpCitAQCAtODQxMiw3ICs5NDI2LDcgQEAgcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKyAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgfQorIAorLXsgdGVzdCAiJG1vZGUiID0gbGluayB8fCB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IH0gJiYKKyt7IHRlc3QgIiRvcHRfbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CisgCisgCitAQCAtODQzMiw5ICs5NDQ2LDkgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorICAgICBmb3IgYXJnCisgICAgIGRvCisgICAgICAgY2FzZSAkYXJnIGluCistICAgICAgLWYpIFJNPSIkUk0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7CistICAgICAgLSopIFJNPSIkUk0gJGFyZyIgOzsKKy0gICAgICAqKSBmaWxlcz0iJGZpbGVzICRhcmciIDs7CisrICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisrICAgICAgLSopIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyIgOzsKKysgICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CisgICAgICAgZXNhYworICAgICBkb25lCisgCitAQCAtODQ0MywyNCArOTQ1NywyMyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCisgICAgIHJtZGlycz0KKyAKKy0gICAgb3JpZ29iamRpcj0iJG9iamRpciIKKyAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworICAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KKy0Jb2JqZGlyPSIkb3JpZ29iamRpciIKKysJb2Rpcj0iJG9iamRpciIKKyAgICAgICBlbHNlCistCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKysJb2Rpcj0iJGRpci8kb2JqZGlyIgorICAgICAgIGZpCisgICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorLSAgICAgIHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCAmJiBvYmpkaXI9IiRkaXIiCisrICAgICAgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCAmJiBvZGlyPSIkZGlyIgorIAorLSAgICAgICMgUmVtZW1iZXIgb2JqZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKKy0gICAgICBpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgdGhlbgorKyAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisrICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB0aGVuCisgCWNhc2UgIiAkcm1kaXJzICIgaW4KKy0JICAqIiAkb2JqZGlyICIqKSA7OworLQkgICopIHJtZGlycz0iJHJtZGlycyAkb2JqZGlyIiA7OworKwkgICoiICRvZGlyICIqKSA7OworKwkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OworIAllc2FjCisgICAgICAgZmkKKyAKK0BAIC04NDg2LDE4ICs5NDk5LDE3IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAKKyAJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorIAkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbiIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbiIKKyAJICBkb25lCistCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRvbGRfbGlicmFyeSIKKysJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCisgCistCSAgY2FzZSAiJG1vZGUiIGluCisrCSAgY2FzZSAiJG9wdF9tb2RlIiBpbgorIAkgIGNsZWFuKQorLQkgICAgY2FzZSAiICAkbGlicmFyeV9uYW1lcyAiIGluCistCSAgICAjICIgICIgaW4gdGhlIGJlZ2lubmluZyBjYXRjaGVzIGVtcHR5ICRkbG5hbWUKKysJICAgIGNhc2UgIiAkbGlicmFyeV9uYW1lcyAiIGluCisgCSAgICAqIiAkZGxuYW1lICIqKSA7OworLQkgICAgKikgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kZGxuYW1lIiA7OworKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CisgCSAgICBlc2FjCistCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfWkiCisrCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCisgCSAgICA7OworIAkgIHVuaW5zdGFsbCkKKyAJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgorQEAgLTg1MjUsMTkgKzk1MzcsMTkgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorIAkgICMgQWRkIFBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgorIAkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJgorIAkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRwaWNfb2JqZWN0IgorKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJHBpY19vYmplY3QiCisgCSAgZmkKKyAKKyAJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisgCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgorIAkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kbm9uX3BpY19vYmplY3QiCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCisgCSAgZmkKKyAJZmkKKyAJOzsKKyAKKyAgICAgICAqKQorLQlpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbiA7IHRoZW4KKysJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuIDsgdGhlbgorIAkgIG5vZXhlbmFtZT0kbmFtZQorIAkgIGNhc2UgJGZpbGUgaW4KKyAJICAqLmV4ZSkKK0BAIC04NTQ3LDcgKzk1NTksNyBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAorIAkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCistCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKysJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZmlsZSIKKyAJICAgIDs7CisgCSAgZXNhYworIAkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorQEAgLTg1NTYsNyArOTU2OCw3IEBAIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKKyAJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisgCSAgICAgIHJlbGlua19jb21tYW5kPQorIAkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKy0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorIAkgICAgZWxzZQorIAkgICAgICByZWxpbmtfY29tbWFuZD0KKyAJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCitAQCAtODU2NCwxMiArOTU3NiwxMiBAQCBmdW5jX21vZGVfdW5pbnN0YWxsICgpCisgCisgCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQorIAkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKy0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG5hbWUgJG9iamRpci8ke25hbWV9Uy4ke29iamV4dH0iCisrCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJHtvYmpleHR9IgorIAkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSRuYW1lIgorKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5hbWUiCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiWCRub2V4ZW5hbWUiICE9ICJYJG5hbWUiIDsgdGhlbgorLQkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisgCSAgICBmaQorIAkgIGZpCisgCWZpCitAQCAtODU3Nyw3ICs5NTg5LDYgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorICAgICAgIGVzYWMKKyAgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICAgZG9uZQorLSAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgorIAorICAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKKyAgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworQEAgLTg1ODksMTYgKzk2MDAsMTYgQEAgZnVuY19tb2RlX3VuaW5zdGFsbCAoKQorICAgICBleGl0ICRleGl0X3N0YXR1cworIH0KKyAKKy17IHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgfSAmJgorK3sgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IH0gJiYKKyAgICAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KKyAKKy10ZXN0IC16ICIkbW9kZSIgJiYgeworK3Rlc3QgLXogIiRvcHRfbW9kZSIgJiYgeworICAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCisgfQorIAorIHRlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorLSAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIgorKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAKKyBpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKK2RpZmYgLS1naXQgYS9sdG9wdGlvbnMubTQgYi9sdG9wdGlvbnMubTQKK2luZGV4IDVlZjEyY2UuLjE3Y2ZkNTEgMTAwNjQ0CistLS0gYS9sdG9wdGlvbnMubTQKKysrKyBiL2x0b3B0aW9ucy5tNAorQEAgLTgsNyArOCw3IEBACisgIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgc2VyaWFsIDYgbHRvcHRpb25zLm00CisrIyBzZXJpYWwgNyBsdG9wdGlvbnMubTQKKyAKKyAjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorIEFDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKK2RpZmYgLS1naXQgYS9sdHZlcnNpb24ubTQgYi9sdHZlcnNpb24ubTQKK2luZGV4IGJmODdmNzcuLjljN2I1ZDQgMTAwNjQ0CistLS0gYS9sdHZlcnNpb24ubTQKKysrKyBiL2x0dmVyc2lvbi5tNAorQEAgLTcsMTcgKzcsMTcgQEAKKyAjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisgCistIyBHZW5lcmF0ZWQgZnJvbSBsdHZlcnNpb24uaW4uCisrIyBAY29uZmlndXJlX2lucHV0QAorIAorLSMgc2VyaWFsIDMxMzQgbHR2ZXJzaW9uLm00CisrIyBzZXJpYWwgMzI5MyBsdHZlcnNpb24ubTQKKyAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sCisgCistbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi4yLjdhXSkKKy1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMTM0XSkKKyttNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjRdKQorK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMyOTNdKQorIAorIEFDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCistW21hY3JvX3ZlcnNpb249JzIuMi43YScKKy1tYWNyb19yZXZpc2lvbj0nMS4zMTM0JworK1ttYWNyb192ZXJzaW9uPScyLjQnCisrbWFjcm9fcmV2aXNpb249JzEuMzI5MycKKyBfTFRfREVDTCgsIG1hY3JvX3ZlcnNpb24sIDAsIFtXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/XSkKKyBfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorIF0pCitkaWZmIC0tZ2l0IGEvbHR+b2Jzb2xldGUubTQgYi9sdH5vYnNvbGV0ZS5tNAoraW5kZXggYmY5MmI1ZS4uYzU3M2RhOSAxMDA2NDQKKy0tLSBhL2x0fm9ic29sZXRlLm00CisrKysgYi9sdH5vYnNvbGV0ZS5tNAorQEAgLTcsNyArNyw3IEBACisgIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyAjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIAorLSMgc2VyaWFsIDQgbHR+b2Jzb2xldGUubTQKKysjIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00CisgCisgIyBUaGVzZSBleGlzdCBlbnRpcmVseSB0byBmb29sIGFjbG9jYWwgd2hlbiBib290c3RyYXBwaW5nIGxpYnRvb2wuCisgIworZGlmZiAtLWdpdCBhL29wY29kZXMvY29uZmlndXJlIGIvb3Bjb2Rlcy9jb25maWd1cmUKK2luZGV4IGM5YzA0Y2UuLjMxMTQxZDkgMTAwNzU1CistLS0gYS9vcGNvZGVzL2NvbmZpZ3VyZQorKysrIGIvb3Bjb2Rlcy9jb25maWd1cmUKK0BAIC02NDgsNiArNjQ4LDkgQEAgT1RPT0wKKyBMSVBPCisgTk1FRElUCisgRFNZTVVUSUwKKytNQU5JRkVTVF9UT09MCisrYWNfY3RfQVIKKytETExUT09MCisgT0JKRFVNUAorIExOX1MKKyBOTQorQEAgLTc2MCw2ICs3NjMsNyBAQCBlbmFibGVfc3RhdGljCisgd2l0aF9waWMKKyBlbmFibGVfZmFzdF9pbnN0YWxsCisgd2l0aF9nbnVfbGQKKyt3aXRoX2xpYnRvb2xfc3lzcm9vdAorIGVuYWJsZV9saWJ0b29sX2xvY2sKKyBlbmFibGVfdGFyZ2V0cworIGVuYWJsZV93ZXJyb3IKK0BAIC0xNDIwLDYgKzE0MjQsOCBAQCBPcHRpb25hbCBQYWNrYWdlczoKKyAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KKysgIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisrICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCisgCisgU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKK0BAIC01MTEwLDggKzUxMTYsOCBAQCBlc2FjCisgCisgCisgCistbWFjcm9fdmVyc2lvbj0nMi4yLjdhJworLW1hY3JvX3JldmlzaW9uPScxLjMxMzQnCisrbWFjcm9fdmVyc2lvbj0nMi40JworK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCisgCisgCisgCitAQCAtNTE1MSw3ICs1MTU3LDcgQEAgRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludCBzdHJpbmdzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorICMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgorLWlmIHRlc3QgIlhgcHJpbnQgLXIgLS0gLW4gMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICAgdGVzdCAiWGBwcmludCAtciAtLSAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgIEVDSE89J3ByaW50IC1yIC0tJworIGVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCitAQCAtNTgzNyw4ICs1ODQzLDggQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsKKyAjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworIHhzaV9zaGVsbD1ubworICggX2x0X2R1bW15PSJhL2IvYyIKKy0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCistICAgICAgPSBjLGEvYiwsIFwKKysgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisrICAgICAgPSBjLGEvYixiL2MsIFwKKyAgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAgJiYgeHNpX3NoZWxsPXllcworQEAgLTU4ODcsNiArNTg5Myw4MCBAQCBlc2FjCisgCisgCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhc2UgJGhvc3QgaW4KKysgICotKi1taW5ndyogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKi0qLWN5Z3dpbiogKQorKyAgICBjYXNlICRidWlsZCBpbgorKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKysgICAgICAgIDs7CisrICAgICAgKi0qLWN5Z3dpbiogKQorKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgICAgICA7OworKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKysgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworKyAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKKysgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrICAgIDs7CisrZXNhYworKworK2ZpCisrCisrdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KKysKKysKKysKKysKKysKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisrY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KiApCisrICAgIGNhc2UgJGJ1aWxkIGluCisrICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorKyAgICAgICAgOzsKKysgICAgZXNhYworKyAgICA7OworK2VzYWMKKysKKytmaQorKworK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorKyRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9CisrCisrCisrCisrCisrCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbiA6CitAQCAtNTkwMyw2ICs1OTgzLDExIEBAIGNhc2UgJHJlbG9hZF9mbGFnIGluCisgZXNhYworIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyBjYXNlICRob3N0X29zIGluCisrICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisrICAgIGZpCisrICAgIDs7CisgICBkYXJ3aW4qKQorICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK0BAIC02MDcxLDcgKzYxNTYsOCBAQCBtaW5ndyogfCBwdzMyKikKKyAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICBlbHNlCistICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisrICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICAgZmkKKyAgIDs7CitAQCAtNjIyNSw2ICs2MzExLDIxIEBAIGVzYWMKKyBmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorICRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQorKworK2ZpbGVfbWFnaWNfZ2xvYj0KKyt3YW50X25vY2FzZWdsb2I9bm8KKytpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorKyAgY2FzZSAkaG9zdF9vcyBpbgorKyAgbWluZ3cqIHwgcHczMiopCisrICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKysgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisrICAgIGVsc2UKKysgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorKyAgICBmaQorKyAgICA7OworKyAgZXNhYworK2ZpCisrCisgZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCisgZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisgdGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCitAQCAtNjI0MCw5ICs2MzQxLDE2MiBAQCB0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAKKyAKKyAKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKyBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCisraWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X0RMTFRPT0w9JGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X0RMTFRPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9ETExUT09MIiA9IHg7IHRoZW4KKysgICAgRExMVE9PTD0iZmFsc2UiCisrICBlbHNlCisrICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KKyt5ZXM6KQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CisrYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisrZXNhYworKyAgICBETExUT09MPSRhY19jdF9ETExUT09MCisrICBmaQorK2Vsc2UKKysgIERMTFRPT0w9IiRhY19jdl9wcm9nX0RMTFRPT0wiCisrZmkKKysKKyt0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworKworK2Nhc2UgJGhvc3Rfb3MgaW4KKytjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisrICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisrICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisrICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKysgICotLWlkZW50aWZ5LXN0cmljdCopCisrICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorKyAgICA7OworKyAgKikKKysgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisrICAgIDs7CisrICBlc2FjCisrICA7OworKyopCisrICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKysgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKysgIDs7CisrZXNhYworKworK2ZpCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY2OyB9Cisrc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisrdGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworKworKworKworKworKworKworKworK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKysgIGZvciBhY19wcm9nIGluIGFyCisrICBkbworKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisgaWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuIDoKK0BAIC02MjU4LDcgKzY1MTIsNyBAQCBkbworICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCistICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisrICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02Mjc4LDExICs2NTMyLDE1IEBAICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKyAKKysgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworKyAgZG9uZQorIGZpCistaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICAgYWNfY3RfQVI9JEFSCistICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKy1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKKysgIGZvciBhY19wcm9nIGluIGFyCisrZG8KKysgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KKyBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorQEAgLTYyOTgsNyArNjU1Niw3IEBAIGRvCisgICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKy0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19wcm9nIgorICAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAgYnJlYWsgMgorICAgZmkKK0BAIC02MzE3LDYgKzY1NzUsMTAgQEAgZWxzZQorICRhc19lY2hvICJubyIgPiY2OyB9CisgZmkKKyAKKysKKysgIHRlc3QgLW4gIiRhY19jdF9BUiIgJiYgYnJlYWsKKytkb25lCisrCisgICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICAgQVI9ImZhbHNlIgorICAgZWxzZQorQEAgLTYzMjgsMTYgKzY1OTAsNzIgQEAgYWNfdG9vbF93YXJuZWQ9eWVzIDs7CisgZXNhYworICAgICBBUj0kYWNfY3RfQVIKKyAgIGZpCistZWxzZQorLSAgQVI9IiRhY19jdl9wcm9nX0FSIgorIGZpCisgCistdGVzdCAteiAiJEFSIiAmJiBBUj1hcgorLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisrOiAke0FSPWFyfQorKzogJHtBUl9GTEFHUz1jcnV9CisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyY2hpdmVyIEBGSUxFIHN1cHBvcnQuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2FyX2F0X2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBsdF9jdl9hcl9hdF9maWxlPW5vCisrICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysKKytpbnQKKyttYWluICgpCisreworIAorKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKysgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiY1JworKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisrICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisrCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisrCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorKwl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKysJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKysgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgCisrZmkKKytybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKytmaQorK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXJfYXRfZmlsZSIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKyAKKytpZiB0ZXN0ICJ4JGx0X2N2X2FyX2F0X2ZpbGUiID0geG5vOyB0aGVuCisrICBhcmNoaXZlcl9saXN0X3NwZWM9CisrZWxzZQorKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCisrZmkKKyAKKyAKKyAKK0BAIC02Njc5LDggKzY5OTcsOCBAQCBlc2FjCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAKKyAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKKy1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChsaWJbXiBdKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wibGliXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisrbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisgCisgIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCisgb3B0X2NyPQorQEAgLTY3MTYsNiArNzAzNCw3IEBAIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKyAgIGVsc2UKKyAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgIGZpCisrICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisgCisgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgIHBpcGVfd29ya3M9bm8KK0BAIC02NzU3LDYgKzcwNzYsMTggQEAgX0xUX0VPRgorICAgICAgIGlmICRHUkVQICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisgCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisrLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisrI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKysvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKysgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisrLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisrIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKysjZWxzZQorKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisrI2VuZGlmCisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CisgI2VuZGlmCitAQCAtNjc2OCw3ICs3MDk5LDcgQEAgX0xUX0VPRgorIAkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorIAorIC8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KKy1jb25zdCBzdHJ1Y3QgeworK0xUX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgICBjb25zdCBjaGFyICpuYW1lOworICAgdm9pZCAgICAgICAqYWRkcmVzczsKKyB9CitAQCAtNjc5NCw4ICs3MTI1LDggQEAgc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyBfTFRfRU9GCisgCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKyAJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKy0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorKwkgIGx0X2dsb2JzeW1fc2F2ZV9MSUJTPSRMSUJTCisrCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKyAJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisgCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CitAQCAtNjgwNSw4ICs3MTM2LDggQEAgX0xUX0VPRgorICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgCSAgICBwaXBlX3dvcmtzPXllcworIAkgIGZpCistCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKy0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKysJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworIAllbHNlCisgCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgCWZpCitAQCAtNjg0Myw2ICs3MTc0LDE2IEBAIGVsc2UKKyAkYXNfZWNobyAib2siID4mNjsgfQorIGZpCisgCisrIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCisraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKysgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworK2ZpCisrCisrCisrCisrCisgCisgCisgCitAQCAtNjg2NCw2ICs3MjA1LDQ1IEBAIGZpCisgCisgCisgCisrCisrCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3lzcm9vdCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KKysKKysjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnRvb2wtc3lzcm9vdCB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICB3aXRodmFsPSR3aXRoX2xpYnRvb2xfc3lzcm9vdDsKKytlbHNlCisrICB3aXRoX2xpYnRvb2xfc3lzcm9vdD1ubworK2ZpCisrCisrCisrbHRfc3lzcm9vdD0KKytjYXNlICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IGluICMoCisrIHllcykKKysgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKysgICBmaQorKyAgIDs7ICMoCisrIC8qKQorKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX2xpYnRvb2xfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorKyAgIDs7ICMoCisrIG5vfCcnKQorKyAgIDs7ICMoCisrICopCisrICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9saWJ0b29sX3N5c3Jvb3R9IiA+JjUKKyskYXNfZWNobyAiJHt3aXRoX2xpYnRvb2xfc3lzcm9vdH0iID4mNjsgfQorKyAgIGFzX2ZuX2Vycm9yICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQorKyAgIDs7CisrZXNhYworKworKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQorKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisrCisrCisrCisrCisrCisgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCisgaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK0BAIC03MDcwLDYgKzc0NTAsMTIzIEBAIGVzYWMKKyAKKyBuZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKyAKKytpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisrICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiRNQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJHthY190b29sX3ByZWZpeH1tdCIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKytmaQorK2ZpCisrTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCisraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BTklGRVNUX1RPT0wiID4mNQorKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrZmkKKytpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisrc2V0IGR1bW15IG10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgaWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisrICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKytlbHNlCisrYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorK2ZvciBhc19kaXIgaW4gJFBBVEgKKytkbworKyAgSUZTPSRhc19zYXZlX0lGUworKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKysgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisrICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisrICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisrICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorKyAgICBicmVhayAyCisrICBmaQorK2RvbmUKKysgIGRvbmUKKytJRlM9JGFzX3NhdmVfSUZTCisrCisrZmkKKytmaQorK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAorK2lmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorK2Vsc2UKKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisrJGFzX2VjaG8gIm5vIiA+JjY7IH0KKytmaQorKworKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKysgICAgTUFOSUZFU1RfVE9PTD0iOiIKKysgIGVsc2UKKysgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgorK3llczopCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KKythY190b29sX3dhcm5lZD15ZXMgOzsKKytlc2FjCisrICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKysgIGZpCisrZWxzZQorKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKKytmaQorKworK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10CisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiY1CisrICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgaWYgJEdSRVAgJ01hbmlmZXN0IFRvb2wnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisrICBmaQorKyAgcm0gLWYgY29uZnRlc3QqCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CisrJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQorK2lmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCisrICBNQU5JRkVTVF9UT09MPToKKytmaQorKworKworKworKworKworIAorICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICByaGFwc29keSogfCBkYXJ3aW4qKQorQEAgLTc2MzMsNiArODEzMCw4IEBAIF9MVF9FT0YKKyAgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mNQorKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisrICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKKyBpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorIF9MVF9FT0YKK0BAIC03Nzk4LDcgKzgyOTcsOCBAQCBmaQorIExJQlRPT0xfREVQUz0iJGx0bWFpbiIKKyAKKyAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKScKKytMSUJUT09MPSIkTElCVE9PTC8ke2hvc3RfYWxpYXN9LWxpYnRvb2wiCisgCisgCisgCitAQCAtNzg4Nyw3ICs4Mzg3LDcgQEAgYWl4MyopCisgZXNhYworIAorICMgR2xvYmFsIHZhcmlhYmxlczoKKy1vZmlsZT1saWJ0b29sCisrb2ZpbGU9JHtob3N0X2FsaWFzfS1saWJ0b29sCisgY2FuX2J1aWxkX3NoYXJlZD15ZXMKKyAKKyAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKK0BAIC04MTg1LDggKzg2ODUsNiBAQCBmaQorIGx0X3Byb2dfY29tcGlsZXJfcGljPQorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorIAorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgCisgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworQEAgLTgzNTIsNiArODg1MCwxMiBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQorIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisgCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctLXN0YXRpYycKKyAJOzsKKysgICAgICBuYWdmb3IqKQorKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisrCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKysJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisrCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKysJOzsKKyAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorQEAgLTg0MTQsNyArODkxOCw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9CisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKysgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgICopCisgCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKK0BAIC04NDcxLDEzICs4OTc1LDE3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICAgOzsKKyBlc2FjCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1CistJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CistCistCistCistCisgCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KKytsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKyAKKyAjCisgIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorQEAgLTg1MzgsNiArOTA0NiwxMSBAQCBmaQorIAorIAorIAorKworKworKworKworKworICMKKyAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisgIworQEAgLTg4ODgsNyArOTQwMSw4IEBAIF9MVF9FT0YKKyAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCistICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKysgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworQEAgLTg5MzYsNyArOTQ1MCw3IEBAIF9MVF9FT0YKKyAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCisgCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgICB0aGVuCistCXRtcF9hZGRmbGFnPQorKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKyAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisgCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgorICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorQEAgLTg5ODcsMTIgKzk1MDEsMTIgQEAgX0xUX0VPRgorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nLXJwYXRoICRsaWJkaXInCistCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisrCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworIAkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CistCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgCSAgZmkKKyAJICA7OworIAllc2FjCitAQCAtOTAwNiw4ICs5NTIwLDggQEAgX0xUX0VPRgorIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisgCXdsYXJjPQorICAgICAgIGVsc2UKKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKy0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgZmkKKyAgICAgICA7OworIAorQEAgLTkwMjUsOCArOTUzOSw4IEBAIF9MVF9FT0YKKyAKKyBfTFRfRU9GCisgICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCistCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgIGVsc2UKKyAJbGRfc2hsaWJzPW5vCisgICAgICAgZmkKK0BAIC05MDcyLDggKzk1ODYsOCBAQCBfTFRfRU9GCisgCisgICAgICopCisgICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisrCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgICBlbHNlCisgCWxkX3NobGlicz1ubworICAgICAgIGZpCitAQCAtOTIwMyw3ICs5NzE3LDEzIEBAIF9MVF9FT0YKKyAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKyAgICAgICAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IiA9IHNldDsgdGhlbgorKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCisrZWxzZQorKyAgaWYgdGVzdCAiJHtsdF9jdl9haXhfbGlicGF0aF8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworIAorIGludAorQEAgLTkyMTYsMjIgKzk3MzYsMjkgQEAgbWFpbiAoKQorIF9BQ0VPRgorIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAKKy1sdF9haXhfbGlicGF0aF9zZWQ9JworLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CistCS9eMC8geworLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCistCSAgICBwCistCX0KKy0gICAgfScKKy1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCistZmkKKysgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisrICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworKwkgIC9eMC8geworKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworKwkgICAgICBwCisrCSAgfQorKyAgICAgIH0nCisrICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisrICBmaQorIGZpCisgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CistaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisrICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorKyAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisrICBmaQorKworK2ZpCisrCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfCisrZmkKKyAKKyAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorQEAgLTkyNDMsNyArOTc3MCwxMyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAJZWxzZQorIAkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgCSAjIGVtcHR5IGV4ZWN1dGFibGUuCistCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisrCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisrICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKKytlbHNlCisrICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoXytzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgCisgaW50CitAQCAtOTI1NiwyMiArOTc4OSwyOSBAQCBtYWluICgpCisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorIAorLWx0X2FpeF9saWJwYXRoX3NlZD0nCistICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKy0JL14wLyB7CistCSAgICBzL14wICAqXCguKlwpJC9cMS8KKy0JICAgIHAKKy0JfQorLSAgICB9JworLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCistICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKy1maQorKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKysgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisrCSAgL14wLyB7CisrCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisrCSAgICAgIHAKKysJICB9CisrICAgICAgfScKKysgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKysgIGZpCisgZmkKKyBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKysgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisrICAgIGx0X2N2X2FpeF9saWJwYXRoXz0iL3Vzci9saWI6L2xpYiIKKysgIGZpCisrCisrZmkKKysKKysgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KKytmaQorIAorIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorQEAgLTkzMTYsMjAgKzk4NTYsNjMgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKy0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKy0gICAgICBsaWJleHQ9bGliCistICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCistICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCistICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCistICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKy0gICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSd0cnVlJworLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCistICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworLSAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisrICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKysgICAgICBjbCopCisrCSMgTmF0aXZlIE1TVkMKKysJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKysJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKysJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworKwlmaWxlX2xpc3Rfc3BlYz0nQCcKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKysJbGliZXh0PWxpYgorKwkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKysJc2hyZXh0X2NtZHM9Ii5kbGwiCisrCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKysJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKysJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKysJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisrCSAgZWxzZQorKwkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKysJICBmaX4KKysJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisrCSAgbGlua25hbWVzPScKKysJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworKwkjIERvbid0IHVzZSByYW5saWIKKysJb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisrCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKysJICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisrCSAgICAqLmV4ZXwqLkVYRSkgOzsKKysJICAgICopCisrCSAgICAgIGx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKysJICAgICAgOzsKKysJICBlc2FjfgorKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisrCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworKwkgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisrCSAgZmknCisrCTs7CisrICAgICAgKikKKysJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisrCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCisrCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisrCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisrCWxpYmV4dD1saWIKKysJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisrCXNocmV4dF9jbWRzPSIuZGxsIgorKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisrCWFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCisrCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisrCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisrCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisrCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKysJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKysJOzsKKysgICAgICBlc2FjCisgICAgICAgOzsKKyAKKyAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKK0BAIC05MzkwLDcgKzk5NzMsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCistICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKysgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KK0BAIC05Mzk4LDcgKzk5ODEsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDkqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKysJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICBlbHNlCisgCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgZmkKK0BAIC05NDE0LDcgKzk5OTcsNyBAQCBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKyAKKyAgICAgaHB1eDEwKikKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKy0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgIGZpCitAQCAtOTQzOCwxMCArMTAwMjEsMTAgQEAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisgCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJICA7OworIAlpYTY0KikKKy0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworIAkgIDs7CisgCSopCistCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgCSAgOzsKKyAJZXNhYworICAgICAgIGVsc2UKK0BAIC05NTIwLDIzICsxMDEwMywzNiBAQCBmaQorIAorICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisrCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworIAkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisgCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCistICAgICAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorLSAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorLSAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorKwkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgorKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KKytpZiB0ZXN0ICIke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sK3NldH0iID0gc2V0OyB0aGVuIDoKKysgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CisrZWxzZQorKyAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKysJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLWludCBmb28odm9pZCkge30KKytpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CisgX0FDRU9GCisgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorLSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworLQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCisrZWxzZQorKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm8KKyBmaQorIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLSAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKysgICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisrZmkKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyskYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KKysJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworKwlmaQorICAgICAgIGVsc2UKKyAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCitAQCAtOTYyMSw3ICsxMDIxNyw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorIAlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCistCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICBlbHNlCisgCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworQEAgLTk2NDAsOSArMTAyMzYsOSBAQCBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAJd2xhcmM9JyR7d2x9JworLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorLQkgICRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisrCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgZWxzZQorIAljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKyAJKiJDb21waWxlcnMgNS4wIiopCitAQCAtMTAyMTgsOCArMTA4MTQsOSBAQCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICBuZWVkX3ZlcnNpb249bm8KKyAgIG5lZWRfbGliX3ByZWZpeD1ubworIAorLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCistICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorKyAgeWVzLCopCisrICAgICMgZ2NjCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CitAQCAtMTAyNTIsMTMgKzEwODQ5LDcxIEBAIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICAgOzsKKyAgICAgZXNhYworKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworKyAgICA7OworKworKyAgKixjbCopCisrICAgICMgTmF0aXZlIE1TVkMKKysgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKysgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKysKKysgICAgY2FzZSAkYnVpbGRfb3MgaW4KKysgICAgbWluZ3cqKQorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKysgICAgICBsdF9zYXZlX2lmcz0kSUZTCisrICAgICAgSUZTPSc7JworKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKysgICAgICBkbworKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKysgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorKyAgICAgIGRvbmUKKysgICAgICBJRlM9JGx0X3NhdmVfaWZzCisrICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisrICAgICAgOzsKKysgICAgY3lnd2luKikKKysgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisrICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisrICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKysgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIDs7CisrICAgICopCisrICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KKysgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisrICAgICAgZWxzZQorKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorKyAgICAgIGZpCisrICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisrICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQorKyAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKysgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKysgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKysgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisrICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisrICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKysgICAgICAgJFJNIFwkZGxwYXRoJworKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisrICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICAgOzsKKyAKKyAgICopCisrICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKysgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICAgOzsKKyAgIGVzYWMKKy0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgIHNobGlicGF0aF92YXI9UEFUSAorICAgOzsKK0BAIC0xMDM1MCw3ICsxMTAwNSw3IEBAIGhhaWt1KikKKyAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L2Jlb3Mvc3lzdGVtL2xpYicKKysgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgOzsKKyAKK0BAIC0xMTE5MCwxMCArMTE4NDUsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMTI5NiwxMCArMTE5NTEsMTAgQEAgZWxzZQorIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisgI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCistdm9pZCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKytpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisgI2VuZGlmCisgCistdm9pZCBmbm9yZCAoKSB7IGludCBpPTQyOyB9CisraW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CisgaW50IG1haW4gKCkKKyB7CisgICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKK0BAIC0xMjQ1MCw3ICsxMzEwNSw3IEBAIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgIyBzaW5jZSBsaWJiZmQgbWF5IG5vdCBwdWxsIGluIHRoZSBlbnRpcmV0eSBvZiBsaWJpYmVydHkuCisgICB4PWBzZWQgLW4gLWUgJ3MvXlsgCV0qUElDRkxBR1sgCV0qPVsgCV0qLy9wJyA8IC4uL2xpYmliZXJ0eS9NYWtlZmlsZSB8IHNlZCAtbiAnJHAnYAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgICBjYXNlICIke2hvc3R9IiBpbgorQEAgLTEzNDIyLDEzICsxNDA3NywyMCBAQCBleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfdW5zZXQ9J2AkRUNITyAiJGx0X3Vuc2V0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9faG9zdF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyByZWxvYWRfY21kcz0nYCRFQ0hPICIkcmVsb2FkX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE9CSkRVTVA9J2AkRUNITyAiJE9CSkRVTVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytmaWxlX21hZ2ljX2dsb2I9J2AkRUNITyAiJGZpbGVfbWFnaWNfZ2xvYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisrd2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgQVI9J2AkRUNITyAiJEFSIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBTVFJJUD0nYCRFQ0hPICIkU1RSSVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIFJBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQEAgLTEzNDQzLDE0ICsxNDEwNSwxNyBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZQorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIG9iamRpcj0nYCRFQ0hPICIkb2JqZGlyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKy1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9waWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKytNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBEU1lNVVRJTD0nYCRFQ0hPICIkRFNZTVVUSUwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIE5NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0BAIC0xMzQ4MywxMiArMTQxNDgsMTIgQEAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3EKKyBoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgaW5oZXJpdF9ycGF0aD0nYCRFQ0hPICIkaW5oZXJpdF9ycGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICIkbGlua19hbGxfZGVwbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCistZml4X3NyY2ZpbGVfcGF0aD0nYCRFQ0hPICIkZml4X3NyY2ZpbGVfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiJGV4cG9ydF9zeW1ib2xzX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGV4Y2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICIkZXhjbHVkZV9leHBzeW1zIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgcHJlbGlua19jbWRzPSdgJEVDSE8gIiRwcmVsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworK3Bvc3RsaW5rX2NtZHM9J2AkRUNITyAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworIGZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9J2AkRUNITyAiJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKKyBuZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiJG5lZWRfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitAQCAtMTM1NDMsOCArMTQyMDgsMTMgQEAgcmVsb2FkX2ZsYWcgXAorIE9CSkRVTVAgXAorIGRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKKyBmaWxlX21hZ2ljX2NtZCBcCisrZmlsZV9tYWdpY19nbG9iIFwKKyt3YW50X25vY2FzZWdsb2IgXAorK0RMTFRPT0wgXAorK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIFwKKyBBUiBcCisgQVJfRkxBR1MgXAorK2FyY2hpdmVyX2xpc3Rfc3BlYyBcCisgU1RSSVAgXAorIFJBTkxJQiBcCisgQ0MgXAorQEAgLTEzNTU0LDEyICsxNDIyNCwxNCBAQCBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFwKKyBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXggXAorK25tX2ZpbGVfbGlzdF9zcGVjIFwKKyBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCistbHRfcHJvZ19jb21waWxlcl93bCBcCisgbHRfcHJvZ19jb21waWxlcl9waWMgXAorK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgbmVlZF9sb2NrcyBcCisrTUFOSUZFU1RfVE9PTCBcCisgRFNZTVVUSUwgXAorIE5NRURJVCBcCisgTElQTyBcCitAQCAtMTM1NzUsNyArMTQyNDcsNiBAQCBub191bmRlZmluZWRfZmxhZyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCistZml4X3NyY2ZpbGVfcGF0aCBcCisgZXhjbHVkZV9leHBzeW1zIFwKKyBpbmNsdWRlX2V4cHN5bXMgXAorIGZpbGVfbGlzdF9zcGVjIFwKK0BAIC0xMzYxMSw2ICsxNDI4Miw3IEBAIG1vZHVsZV9jbWRzIFwKKyBtb2R1bGVfZXhwc3ltX2NtZHMgXAorIGV4cG9ydF9zeW1ib2xzX2NtZHMgXAorIHByZWxpbmtfY21kcyBcCisrcG9zdGxpbmtfY21kcyBcCisgcG9zdGluc3RhbGxfY21kcyBcCisgcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyBmaW5pc2hfY21kcyBcCitAQCAtMTQzNjcsNyArMTUwMzksOCBAQCAkYXNfZWNobyBYIiRmaWxlIiB8CisgIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisgIworICMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCistIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysjICAgICAgICAgICAgICAgICBJbmMuCisgIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyAjCisgIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorQEAgLTE0NDcwLDE5ICsxNTE0Myw0MiBAQCBTUDJOTD0kbHRfbHRfU1AyTkwKKyAjIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCisgTkwyU1A9JGx0X2x0X05MMlNQCisgCisrIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgorK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKysKKysjIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgorK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKysKKyAjIEFuIG9iamVjdCBzeW1ib2wgZHVtcGVyLgorIE9CSkRVTVA9JGx0X09CSkRVTVAKKyAKKyAjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorIGRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorIAorLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyIuCisrIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorIGZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorIAorKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCisrZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKKysKKysjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KKyt3YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgorKworKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCisrRExMVE9PTD0kbHRfRExMVE9PTAorKworKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KKytzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKKysKKyAjIFRoZSBhcmNoaXZlci4KKyBBUj0kbHRfQVIKKysKKysjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorIEFSX0ZMQUdTPSRsdF9BUl9GTEFHUworIAorKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorK2FyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCisrCisgIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KKyBTVFJJUD0kbHRfU1RSSVAKKyAKK0BAIC0xNDUxMiw2ICsxNTIwOCwxMiBAQCBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCisgZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisgCisrIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCisrbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCisrCisrIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KKytsdF9zeXNyb290PSRsdF9zeXNyb290CisrCisgIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCisgb2JqZGlyPSRvYmpkaXIKKyAKK0BAIC0xNDUyMSw2ICsxNTIyMyw5IEBAIE1BR0lDX0NNRD0kTUFHSUNfQ01ECisgIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KKyBuZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisgCisrIyBNYW5pZmVzdCB0b29sLgorK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKysKKyAjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCisgRFNZTVVUSUw9JGx0X0RTWU1VVElMCisgCitAQCAtMTQ2MzUsMTIgKzE1MzQwLDEyIEBAIHdpdGhfZ2NjPSRHQ0MKKyAjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCisgbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworIAorLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKy13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorLQorICMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorIHBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworIAorKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KKyt3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorKworICMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KKyBsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworIAorQEAgLTE0NzI3LDkgKzE1NDMyLDYgQEAgaW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorICMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorIGxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKyAKKy0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCistZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAorLQorICMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorIGFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisgCitAQCAtMTQ3NDUsNiArMTU0NDcsOSBAQCBpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworICMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCisgcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKyAKKysjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCisrcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworKworICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorIGZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworIAorQEAgLTE0Nzc3LDIxMCArMTU0ODIsMTY5IEBAIGx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorICAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CistICBzZWQgJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorLQorLSAgY2FzZSAkeHNpX3NoZWxsIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistfQorLQorLSMgZnVuY19iYXNlbmFtZSBmaWxlCistZnVuY19iYXNlbmFtZSAoKQorLXsKKy0gIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKKy19CistCistIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKy0jIGNhbGw6CistIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKy0jICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKy0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKy0jICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKy0jICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKy0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKy0jIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCistIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCistZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsxfSBpbgorLSAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworLSAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CistICBlc2FjCistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCistfQorLQorLSMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCistIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKy0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKy0gICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKy0gIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CistICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorLSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In0KKy19CistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PSR7MSUlPSp9CistICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorLX0KKy0KKy0jIGZ1bmNfbG8ybyBvYmplY3QKKy1mdW5jX2xvMm8gKCkKKy17CistICBjYXNlICR7MX0gaW4KKy0gICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKy0gICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CistICBlc2FjCistfQorLQorLSMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCistZnVuY194Zm9ybSAoKQorLXsKKy0gIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KKy19CistCistIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorLWZ1bmNfYXJpdGggKCkKKy17CistICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKy19CistCistX0xUX0VPRgorLSAgICA7OworLSAgKikgIyBCb3VybmUgY29tcGF0aWJsZSBmdW5jdGlvbnMuCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CistIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorLWZ1bmNfZGlybmFtZSAoKQorLXsKKy0gICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCistICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCistICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorLSAgZWxzZQorLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCistICBmaQorLX0KKy0KKy0jIGZ1bmNfYmFzZW5hbWUgZmlsZQorLWZ1bmNfYmFzZW5hbWUgKCkKKy17CistICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKKy19CistCistCistIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKKy0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCistIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCistIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKKy1mdW5jX3N0cmlwbmFtZSAoKQorLXsKKy0gIGNhc2UgJHsyfSBpbgorLSAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OworLSAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CistICBlc2FjCistfQorLQorLSMgc2VkIHNjcmlwdHM6CistbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKKy1teV9zZWRfbG9uZ19hcmc9JzFzL14tW149XSo9Ly8nCistCistIyBmdW5jX29wdF9zcGxpdAorLWZ1bmNfb3B0X3NwbGl0ICgpCisteworLSAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKy0gIGZ1bmNfb3B0X3NwbGl0X2FyZz1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCistfQorLQorLSMgZnVuY19sbzJvIG9iamVjdAorLWZ1bmNfbG8ybyAoKQorLXsKKy0gIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKKy19CistCistIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKKy1mdW5jX3hmb3JtICgpCisteworLSAgZnVuY194Zm9ybV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgJ3MvXC5bXi5dKiQvLmxvLydgCistfQorLQorLSMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KKy1mdW5jX2FyaXRoICgpCisteworLSAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKy19CistCistIyBmdW5jX2xlbiBzdHJpbmcKKy0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCistZnVuY19sZW4gKCkKKy17CistICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCistfQorLQorLV9MVF9FT0YKKy1lc2FjCistCistY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCistICB5ZXMpCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxKz1cJDIiCistfQorLV9MVF9FT0YKKy0gICAgOzsKKy0gICopCistICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCistCistIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKy0jIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KKy1mdW5jX2FwcGVuZCAoKQorLXsKKy0gIGV2YWwgIiQxPVwkJDFcJDIiCistfQorLQorLV9MVF9FT0YKKy0gICAgOzsKKy0gIGVzYWMKKy0KKy0KKy0gIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKy0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKy0KKy0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKysgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKysgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisrCisrICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAorK2Z1bmNfZGlybmFtZSAoKVwKKyt7XAorK1wgICAgY2FzZSAkezF9IGluXAorK1wgICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7O1wKKytcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYmFzZW5hbWUgKCkkLywvXn0gIyBmdW5jX2Jhc2VuYW1lIC9jXAorK2Z1bmNfYmFzZW5hbWUgKClcCisre1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKKytmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAorK3tcCisrXCAgICBjYXNlICR7MX0gaW5cCisrXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAorK1wgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7XAorK1wgICAgZXNhY1wKKytcICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3N0cmlwbmFtZSAoKSQvLC9efSAjIGZ1bmNfc3RyaXBuYW1lIC9jXAorK2Z1bmNfc3RyaXBuYW1lICgpXAorK3tcCisrXCAgICAjIHBka3NoIDUuMi4xNCBkb2VzIG5vdCBkbyAke1glJFl9IGNvcnJlY3RseSBpZiBib3RoIFggYW5kIFkgYXJlXAorK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKKytcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAorK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0IyIkezF9In1cCisrXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisrICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKysKKysKKysgIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKKytmdW5jX3NwbGl0X2xvbmdfb3B0ICgpXAorK3tcCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCisrXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz0kezEjKj19XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKKytmdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKKyt7XAorK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCisrXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X3Nob3J0X29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfbG8ybyAoKSQvLC9efSAjIGZ1bmNfbG8ybyAvY1wKKytmdW5jX2xvMm8gKClcCisre1wKKytcICAgIGNhc2UgJHsxfSBpblwKKytcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCisrXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKKytcICAgIGVzYWNcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorK2Z1bmNfeGZvcm0gKClcCisre1wKKysgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKKyt9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAorK2Z1bmNfYXJpdGggKClcCisre1wKKysgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FyaXRoIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrCisrICBzZWQgLWUgJy9eZnVuY19sZW4gKCkkLywvXn0gIyBmdW5jX2xlbiAvY1wKKytmdW5jX2xlbiAoKVwKKyt7XAorKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1cCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKysgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisrCisrZmkKKysKKytpZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCisrICBzZWQgLWUgJy9eZnVuY19hcHBlbmQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZCAvY1wKKytmdW5jX2FwcGVuZCAoKVwKKyt7XAorKyAgICBldmFsICIkezF9Kz1cXCR7Mn0iXAorK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKKytmdW5jX2FwcGVuZF9xdW90ZWQgKClcCisre1wKKytcICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAorK1wgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCisrfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisrICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyt0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorKworKworKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisrICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisrICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorK2Vsc2UKKysgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisrICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKysgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKytmaQorKworK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQorKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CisrZmkKKysKKysKKysgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgICBjaG1vZCAreCAiJG9maWxlIgorIAorZGlmZiAtLWdpdCBhL29wY29kZXMvY29uZmlndXJlLmFjIGIvb3Bjb2Rlcy9jb25maWd1cmUuYWMKK2luZGV4IGI5M2U4NTUuLjQzYmE5NzYgMTAwNjQ0CistLS0gYS9vcGNvZGVzL2NvbmZpZ3VyZS5hYworKysrIGIvb3Bjb2Rlcy9jb25maWd1cmUuYWMKK0BAIC0xNjcsNyArMTY3LDcgQEAgY2hhbmdlcXVvdGUoLClkbmwKKyAgIHg9YHNlZCAtbiAtZSAncy9eWyAJXSpQSUNGTEFHWyAJXSo9WyAJXSovL3AnIDwgLi4vbGliaWJlcnR5L01ha2VmaWxlIHwgc2VkIC1uICckcCdgCisgY2hhbmdlcXVvdGUoWyxdKWRubAorICAgaWYgdGVzdCAtbiAiJHgiOyB0aGVuCistICAgIFNIQVJFRF9MSUJBREQ9Ii1MYHB3ZGAvLi4vbGliaWJlcnR5L3BpYyAtbGliZXJ0eSIKKysgICAgU0hBUkVEX0xJQkFERD0iYHB3ZGAvLi4vbGliaWJlcnR5L3BpYy9saWJpYmVydHkuYSIKKyAgIGZpCisgCisgICBjYXNlICIke2hvc3R9IiBpbgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwNy1BZGQtdGhlLWFybXY1ZS1hcmNoaXRlY3R1cmUtdG8tYmludXRpbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAzNzYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA3LUFkZC10aGUtYXJtdjVlLWFyY2hpdGVjdHVyZS10by1iaW51dGlscy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDc0M2Y0MmFhZWNiMWFiODllYmEwZWFmNWU4OGVkNjdiYmYzYmEzMDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM3OjEwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMTNdIEFkZCB0aGUgYXJtdjVlIGFyY2hpdGVjdHVyZSB0byBiaW51dGlscworCitCaW51dGlscyBoYXMgYSBjb21tZW50IHRoYXQgaW5kaWNhdGVzIGl0IGlzIHN1cHBvc2VkIHRvIG1hdGNoIGdjYyBmb3IKK2FsbCBvZiB0aGUgc3VwcG9ydCAiLW1hcmNoPSIgc2V0dGluZ3MsIGJ1dCBpdCB3YXMgbGFja2luZyB0aGUgYXJtdjVlIHNldHRpbmcuCitUaGlzIHdhcyBhIHNpbXBsZSB3YXkgdG8gYWRkIGl0LCBhcyB0aHVtYiBpbnN0cnVjdGlvbnMgc2hvdWxkbid0IGJlIGdlbmVyYXRlZAorYnkgdGhlIGNvbXBpbGVyIGFueXdheS4KKworVXBzdHJlYW0tU3RhdHVzOiBEZW5pZWQKK1Vwc3RyZWFtIG1haW50YWluZXIgaW5kaWNhdGVkIHRoYXQgd2Ugc2hvdWxkIG5vdCBiZSB1c2luZyBhcm12NWUsIGV2ZW4KK3Rob3VnaCBpdCBpcyBhIGxlZ2FsIGFyY2hpY3R1cmUgZGVmaW5lZCBieSBvdXIgZ2NjLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2FzL2NvbmZpZy90Yy1hcm0uYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZy90Yy1hcm0uYyBiL2dhcy9jb25maWcvdGMtYXJtLmMKK2luZGV4IDJkYjZjMmQuLmFiNDgxNjggMTAwNjQ0CistLS0gYS9nYXMvY29uZmlnL3RjLWFybS5jCisrKysgYi9nYXMvY29uZmlnL3RjLWFybS5jCitAQCAtMjQ0NjMsNiArMjQ0NjMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFybV9hcmNoX29wdGlvbl90YWJsZSBhcm1fYXJjaHNbXSA9CisgICBBUk1fQVJDSF9PUFQgKCJhcm12NHQiLAlBUk1fQVJDSF9WNFQsCSBGUFVfQVJDSF9GUEEpLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjR0eG0iLAlBUk1fQVJDSF9WNFR4TSwJIEZQVV9BUkNIX0ZQQSksCisgICBBUk1fQVJDSF9PUFQgKCJhcm12NSIsCUFSTV9BUkNIX1Y1LAkgRlBVX0FSQ0hfVkZQKSwKKysgIEFSTV9BUkNIX09QVCAoImFybXY1ZSIsCUFSTV9BUkNIX1Y1VEUsCSBGUFVfQVJDSF9WRlApLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjV0IiwJQVJNX0FSQ0hfVjVULAkgRlBVX0FSQ0hfVkZQKSwKKyAgIEFSTV9BUkNIX09QVCAoImFybXY1dHhtIiwJQVJNX0FSQ0hfVjVUeE0sCSBGUFVfQVJDSF9WRlApLAorICAgQVJNX0FSQ0hfT1BUICgiYXJtdjV0ZSIsCUFSTV9BUkNIX1Y1VEUsCSBGUFVfQVJDSF9WRlApLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOC1kb24tdC1sZXQtdGhlLWRpc3Ryby1jb21waWxlci1wb2ludC10by10aGUtd3JvbmctaW5zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWU2OGZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMDgtZG9uLXQtbGV0LXRoZS1kaXN0cm8tY29tcGlsZXItcG9pbnQtdG8tdGhlLXdyb25nLWlucy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDRkM2E5ZjZkYjYwNDA1NTM0ODMzMmI1Njg4OWQ0NjZjMDU4ZmE1ZjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjM5OjAxICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTNdIGRvbid0IGxldCB0aGUgZGlzdHJvIGNvbXBpbGVyIHBvaW50IHRvIHRoZSB3cm9uZworIGluc3RhbGxhdGlvbiBsb2NhdGlvbgorCitUaGFua3MgdG8gUlAgZm9yIGhlbHBpbmcgZmluZCB0aGUgc291cmNlIGNvZGUgY2F1c2luZyB0aGUgaXNzdWUuCisKKzIwMTAvMDgvMTMKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJpYmVydHkvTWFrZWZpbGUuaW4gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmliZXJ0eS9NYWtlZmlsZS5pbiBiL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgoraW5kZXggOWI4NzcyMC4uZmY0M2Y1MyAxMDA2NDQKKy0tLSBhL2xpYmliZXJ0eS9NYWtlZmlsZS5pbgorKysrIGIvbGliaWJlcnR5L01ha2VmaWxlLmluCitAQCAtMzYxLDcgKzM2MSw4IEBAIGluc3RhbGwtc3RyaXA6IGluc3RhbGwKKyAjIG11bHRpbGliLXNwZWNpZmljIGZsYWdzLCBpdCdzIG92ZXJyaWRkZW4gYnkgRkxBR1NfVE9fUEFTUyBmcm9tIHRoZQorICMgZGVmYXVsdCBtdWx0aWxpYiwgc28gd2UgaGF2ZSB0byB0YWtlIENGTEFHUyBpbnRvIGFjY291bnQgYXMgd2VsbCwKKyAjIHNpbmNlIGl0IHdpbGwgYmUgcGFzc2VkIHRoZSBtdWx0aWxpYiBmbGFncy4KKy1NVUxUSU9TRElSID0gYCQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorKyNNVUxUSU9TRElSID0gYCQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorK01VTFRJT1NESVIgPSAiIgorIGluc3RhbGxfdG9fbGliZGlyOiBhbGwKKyAJaWYgdGVzdCAtbiAiJHt0YXJnZXRfaGVhZGVyX2Rpcn0iOyB0aGVuIFwKKyAJCSR7bWtpbnN0YWxsZGlyc30gJChERVNURElSKSQobGliZGlyKS8kKE1VTFRJT1NESVIpOyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDA5LVVwc3RyZWFtLVN0YXR1cy1JbmFwcHJvcHJpYXRlLWRpc3RyaWJ1dGlvbi1jb2Rlc291cmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDA3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAwOS1VcHN0cmVhbS1TdGF0dXMtSW5hcHByb3ByaWF0ZS1kaXN0cmlidXRpb24tY29kZXNvdXJjLnBhdGNoCkBAIC0wLDAgKzEsMjc4IEBACitGcm9tIGUwMmUxMTliMjc4YzNmNDA0ZTk3NjY5ZTcxODBjYWM5NDQxMzRjOTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQxOjA0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMTNdIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOgorIGNvZGVzb3VyY2VyeV0KKworUGF0Y2ggb3JpZ2luYWxseSBjcmVhdGVkIGJ5IE1hcmsgSGF0bGUsIGZvcndhcmQtcG9ydGVkIHRvCitiaW51dGlscyAyLjIxIGJ5IFNjb3R0IEdhcm1hbi4KKworcHVycG9zZTogIHdhcm4gZm9yIHVzZXMgb2Ygc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZworCitDb2RlIE1lcmdlZCBmcm9tIFNvdXJjZXJ5IEcrKyBiaW51dGlscyAyLjE5IC0gNC40LTI3NworCisyMDA4LTA3LTAyICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworICAgIGxkLworICAgICogbGQuaCAoYXJnc190eXBlKTogQWRkIGVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZC50ZXhpbmZvICgtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBEb2N1bWVudC4KKyAgICAqIGxkZmlsZS5jIChsZGZpbGVfYWRkX2xpYnJhcnlfcGF0aCk6IENoZWNrCisgICAgY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZG1haW4uYyAobWFpbik6IEluaXRpYWxpemUKKyAgICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcy4KKyAgICAqIGxleHN1cC5jIChlbnVtIG9wdGlvbl92YWx1ZXMpOiBBZGQKKyAgICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUy4KKyAgICAobGRfb3B0aW9ucyk6IEFkZCAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMuCisgICAgKHBhcnNlX2FyZ3MpOiBIYW5kbGUgbmV3IG9wdGlvbi4KKworMjAwNy0wNi0xMyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKyAgICBsZC8KKyAgICAqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZS4KKyAgICAqIGxkLmggKGFyZ3NfdHlwZSk6IEFkZCBwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGQudGV4aW5mbyAoLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzKTogRG9jdW1lbnQuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBDaGVjaworICAgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLgorICAgICogbGRtYWluLmMgKG1haW4pOiBJbml0aWFsaXplCisgICAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMuCisgICAgKiBsZXhzdXAuYyAoZW51bSBvcHRpb25fdmFsdWVzKTogQWRkCisgICAgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMuCisgICAgKGxkX29wdGlvbnMpOiBBZGQgLS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLgorICAgIChwYXJzZV9hcmdzKTogSGFuZGxlIG5ldyBvcHRpb24uCisKKzIwMDctMDQtMjAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorCisgICAgTWVyZ2UgZnJvbSBTb3VyY2VyeSBHKysgYmludXRpbHMgMi4xNzoKKworICAgIDIwMDctMDMtMjAgIEpvc2VwaCBNeWVycyAgPGpvc2VwaEBjb2Rlc291cmNlcnkuY29tPgorICAgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4uCisgICAgbGQvCisgICAgKiBjb25maWd1cmUuaW4gKC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMpOiBOZXcgb3B0aW9uLgorICAgICogY29uZmlndXJlLCBjb25maWcuaW46IFJlZ2VuZXJhdGUuCisgICAgKiBsZGZpbGUuYyAobGRmaWxlX2FkZF9saWJyYXJ5X3BhdGgpOiBJZgorICAgIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIGRlZmluZWQsIHdhcm4gZm9yIHVzZSBvZiAvbGliLAorICAgIC91c3IvbGliLCAvdXNyL2xvY2FsL2xpYiBvciAvdXNyL1gxMVI2L2xpYi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGQvY29uZmlnLmluICAgIHwgIDMgKysrCisgbGQvY29uZmlndXJlICAgIHwgMTQgKysrKysrKysrKysrKysKKyBsZC9jb25maWd1cmUuYWMgfCAxMCArKysrKysrKysrCisgbGQvbGQuaCAgICAgICAgIHwgIDggKysrKysrKysKKyBsZC9sZC50ZXhpbmZvICAgfCAxMiArKysrKysrKysrKysKKyBsZC9sZGZpbGUuYyAgICAgfCAxNyArKysrKysrKysrKysrKysrKworIGxkL2xkbGV4LmggICAgICB8ICAyICsrCisgbGQvbGRtYWluLmMgICAgIHwgIDIgKysKKyBsZC9sZXhzdXAuYyAgICAgfCAxNiArKysrKysrKysrKysrKysrCisgOSBmaWxlcyBjaGFuZ2VkLCA4NCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9sZC9jb25maWcuaW4gYi9sZC9jb25maWcuaW4KK2luZGV4IDJhYjQ4NDQuLjc2NmQyM2MgMTAwNjQ0CistLS0gYS9sZC9jb25maWcuaW4KKysrKyBiL2xkL2NvbmZpZy5pbgorQEAgLTExLDYgKzExLDkgQEAKKyAgICBsYW5ndWFnZSBpcyByZXF1ZXN0ZWQuICovCisgI3VuZGVmIEVOQUJMRV9OTFMKKyAKKysvKiBEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gbGlicmFyeSBkaXJlY3RvcmllcyAqLworKyN1bmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKworIC8qIEFkZGl0aW9uYWwgZXh0ZW5zaW9uIGEgc2hhcmVkIG9iamVjdCBtaWdodCBoYXZlLiAqLworICN1bmRlZiBFWFRSQV9TSExJQl9FWFRFTlNJT04KKyAKK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUgYi9sZC9jb25maWd1cmUKK2luZGV4IDJmYmFlYmYuLjU3MjZhMDggMTAwNzU1CistLS0gYS9sZC9jb25maWd1cmUKKysrKyBiL2xkL2NvbmZpZ3VyZQorQEAgLTc4Nyw2ICs3ODcsNyBAQCB3aXRoX2xpYl9wYXRoCisgZW5hYmxlX3RhcmdldHMKKyBlbmFibGVfNjRfYml0X2JmZAorIHdpdGhfc3lzcm9vdAorK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX2dvbGQKKyBlbmFibGVfZ290CisgZW5hYmxlX3dlcnJvcgorQEAgLTE0NDMsNiArMTQ0NCw4IEBAIE9wdGlvbmFsIEZlYXR1cmVzOgorICAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcworICAgLS1lbmFibGUtdGFyZ2V0cyAgICAgICAgYWx0ZXJuYXRpdmUgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zCisgICAtLWVuYWJsZS02NC1iaXQtYmZkICAgICA2NC1iaXQgc3VwcG9ydCAob24gaG9zdHMgd2l0aCBuYXJyb3dlciB3b3JkIHNpemVzKQorKyAgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gbGlicmFyeSBkaXJlY3RvcmllcworICAgLS1lbmFibGUtZ29sZFs9QVJHXSAgICAgYnVpbGQgZ29sZCBbQVJHPXtkZWZhdWx0LHllcyxub31dCisgICAtLWVuYWJsZS1nb3Q9PHR5cGU+ICAgICBHT1QgaGFuZGxpbmcgc2NoZW1lICh0YXJnZXQsIHNpbmdsZSwgbmVnYXRpdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWdvdCkKK0BAIC0xNjMyMyw3ICsxNjMyNiwxOCBAQCBlbHNlCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisgCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ290IHdhcyBnaXZlbi4KKyBpZiB0ZXN0ICIke2VuYWJsZV9nb3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS5hYyBiL2xkL2NvbmZpZ3VyZS5hYworaW5kZXggMWJkZGZjOS4uZTllZGI3ZiAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZ3VyZS5hYworKysrIGIvbGQvY29uZmlndXJlLmFjCitAQCAtOTQsNiArOTQsMTYgQEAgQUNfU1VCU1QodXNlX3N5c3Jvb3QpCisgQUNfU1VCU1QoVEFSR0VUX1NZU1RFTV9ST09UKQorIEFDX1NVQlNUKFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUpCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdLAorKyAgICAgICAgICAgICAgICBbd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gbGlicmFyeSBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICBbZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXM9bm9dKQorK2lmIHRlc3QgIngke2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzfSIgPSAieHllcyI7IHRoZW4KKysgIEFDX0RFRklORShbRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVNdLAorKyAgICAgICBbMV0sCisrICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gbGlicmFyeSBkaXJlY3Rvcmllc10pCisrZmkKKysKKyBkbmwgVXNlIC0tZW5hYmxlLWdvbGQgdG8gZGVjaWRlIGlmIHRoaXMgbGlua2VyIHNob3VsZCBiZSB0aGUgZGVmYXVsdC4KKyBkbmwgImluc3RhbGxfYXNfZGVmYXVsdCIgaXMgc2V0IHRvIGZhbHNlIGlmIGdvbGQgaXMgdGhlIGRlZmF1bHQgbGlua2VyLgorIGRubCAiaW5zdGFsbGVkX2xpbmtlciIgaXMgdGhlIGluc3RhbGxlZCBCRkQgbGlua2VyIG5hbWUuCitkaWZmIC0tZ2l0IGEvbGQvbGQuaCBiL2xkL2xkLmgKK2luZGV4IGY3NzNjZTcuLmFkYmEwZjYgMTAwNjQ0CistLS0gYS9sZC9sZC5oCisrKysgYi9sZC9sZC5oCitAQCAtMTYxLDYgKzE2MSwxNCBAQCB0eXBlZGVmIHN0cnVjdCB7CisgICAvKiBJZiBUUlVFIHdlJ2xsIGp1c3QgcHJpbnQgdGhlIGRlZmF1bHQgb3V0cHV0IG9uIHN0ZG91dC4gICovCisgICBiZmRfYm9vbGVhbiBwcmludF9vdXRwdXRfZm9ybWF0OworIAorKyAgLyogSWYgVFJVRSAodGhlIGRlZmF1bHQpIHdhcm4gZm9yIHVzZXMgb2Ygc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4KKysgICAgIGNyb3NzIGxpbmtpbmcuICAqLworKyAgYmZkX2Jvb2xlYW4gcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKysKKysgIC8qIElmIFRSVUUgKGRlZmF1bHQgRkFMU0UpIGdpdmUgYW4gZXJyb3IgZm9yIHVzZXMgb2Ygc3lzdGVtCisrICAgICBkaXJlY3RvcmllcyB3aGVuIGNyb3NzIGxpbmtpbmcgaW5zdGVhZCBvZiBhIHdhcm5pbmcuICAqLworKyAgYmZkX2Jvb2xlYW4gZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKysKKyAgIC8qIEJpZyBvciBsaXR0bGUgZW5kaWFuIGFzIHNldCBvbiBjb21tYW5kIGxpbmUuICAqLworICAgZW51bSBlbmRpYW5fZW51bSBlbmRpYW47CisgCitkaWZmIC0tZ2l0IGEvbGQvbGQudGV4aW5mbyBiL2xkL2xkLnRleGluZm8KK2luZGV4IDUwMjU4MmMuLmRhZTE2OGEgMTAwNjQ0CistLS0gYS9sZC9sZC50ZXhpbmZvCisrKysgYi9sZC9sZC50ZXhpbmZvCitAQCAtMjIxMiw2ICsyMjEyLDE4IEBAIHN0cmluZyBpZGVudGlmeWluZyB0aGUgb3JpZ2luYWwgbGlua2VkIGZpbGUgZG9lcyBub3QgY2hhbmdlLgorIAorIFBhc3NpbmcgQGNvZGV7bm9uZX0gZm9yIEB2YXJ7c3R5bGV9IGRpc2FibGVzIHRoZSBzZXR0aW5nIGZyb20gYW55CisgQGNvZGV7LS1idWlsZC1pZH0gb3B0aW9ucyBlYXJsaWVyIG9uIHRoZSBjb21tYW5kIGxpbmUuCisrCisrQGtpbmRleCAtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAaXRlbSAtLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytEbyBub3Qgd2FybiBmb3IgQG9wdGlvbnstTH0gb3B0aW9ucyB1c2luZyBzeXN0ZW0gZGlyZWN0b3JpZXMgc3VjaCBhcworK0BmaWxley91c3IvbGlifSB3aGVuIGNyb3NzIGxpbmtpbmcuICBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlCisraW4gY2hyb290IGVudmlyb25tZW50cyB3aGVuIHN1Y2ggZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdAorK2xpYnJhcmllcyBmb3IgdGhlIHRhcmdldCBzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisrQGtpbmRleCAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytAaXRlbSAtLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytHaXZlIGFuIGVycm9yIGluc3RlYWQgb2YgYSB3YXJuaW5nIGZvciBAb3B0aW9uey1MfSBvcHRpb25zIHVzaW5nCisrc3lzdGVtIGRpcmVjdG9yaWVzIHdoZW4gY3Jvc3MgbGlua2luZy4KKyBAZW5kIHRhYmxlCisgCisgQGMgbWFuIGVuZAorZGlmZiAtLWdpdCBhL2xkL2xkZmlsZS5jIGIvbGQvbGRmaWxlLmMKK2luZGV4IDc4MmVkN2YuLjE5YTlhYjQgMTAwNjQ0CistLS0gYS9sZC9sZGZpbGUuYworKysrIGIvbGQvbGRmaWxlLmMKK0BAIC0xMTQsNiArMTE0LDIzIEBAIGxkZmlsZV9hZGRfbGlicmFyeV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBiZmRfYm9vbGVhbiBjbWRsaW5lKQorICAgICBuZXdfZGlycy0+bmFtZSA9IGNvbmNhdCAobGRfc3lzcm9vdCwgbmFtZSArIDEsIChjb25zdCBjaGFyICopIE5VTEwpOworICAgZWxzZQorICAgICBuZXdfZGlycy0+bmFtZSA9IHhzdHJkdXAgKG5hbWUpOworKworKyNpZmRlZiBFTkFCTEVfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUworKyAgaWYgKGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisrICAmJiAoKCFzdHJuY21wIChuYW1lLCAiL2xpYiIsIDQpKQorKyAgICAgIHx8ICghc3RybmNtcCAobmFtZSwgIi91c3IvbGliIiwgOCkpCisrICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9sb2NhbC9saWIiLCAxNCkpCisrICAgICAgfHwgKCFzdHJuY21wIChuYW1lLCAiL3Vzci9YMTFSNi9saWIiLCAxNCkpKSkKKysgICB7CisrICAgICBpZiAoY29tbWFuZF9saW5lLmVycm9yX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgICAgIGVpbmZvIChfKCIlWCVQOiBlcnJvcjogbGlicmFyeSBzZWFyY2ggcGF0aCBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uXG4iKSwgbmFtZSk7CisrICAgICBlbHNlCisrICAgICAgIGVpbmZvIChfKCIlUDogd2FybmluZzogbGlicmFyeSBzZWFyY2ggcGF0aCBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisrICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uXG4iKSwgbmFtZSk7CisrICAgfQorKyNlbmRpZgorKworIH0KKyAKKyAvKiBUcnkgdG8gb3BlbiBhIEJGRCBmb3IgYSBsYW5nX2lucHV0X3N0YXRlbWVudC4gICovCitkaWZmIC0tZ2l0IGEvbGQvbGRsZXguaCBiL2xkL2xkbGV4LmgKK2luZGV4IGUzZTliMjQuLjI5NDg3YTMgMTAwNjQ0CistLS0gYS9sZC9sZGxleC5oCisrKysgYi9sZC9sZGxleC5oCitAQCAtMTQwLDYgKzE0MCw4IEBAIGVudW0gb3B0aW9uX3ZhbHVlcworICAgT1BUSU9OX0lHTk9SRV9VTlJFU09MVkVEX1NZTUJPTCwKKyAgIE9QVElPTl9QVVNIX1NUQVRFLAorICAgT1BUSU9OX1BPUF9TVEFURSwKKysgIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTLAorKyAgT1BUSU9OX0VSUk9SX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMsCisgfTsKKyAKKyAvKiBUaGUgaW5pdGlhbCBwYXJzZXIgc3RhdGVzLiAgKi8KK2RpZmYgLS1naXQgYS9sZC9sZG1haW4uYyBiL2xkL2xkbWFpbi5jCitpbmRleCA4MThkMTA4Li41NGM0OWYyIDEwMDY0NAorLS0tIGEvbGQvbGRtYWluLmMKKysrKyBiL2xkL2xkbWFpbi5jCitAQCAtMjY2LDYgKzI2Niw4IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgIGNvbW1hbmRfbGluZS53YXJuX21pc21hdGNoID0gVFJVRTsKKyAgIGNvbW1hbmRfbGluZS53YXJuX3NlYXJjaF9taXNtYXRjaCA9IFRSVUU7CisgICBjb21tYW5kX2xpbmUuY2hlY2tfc2VjdGlvbl9hZGRyZXNzZXMgPSAtMTsKKysgIGNvbW1hbmRfbGluZS5wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gVFJVRTsKKysgIGNvbW1hbmRfbGluZS5lcnJvcl9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzID0gRkFMU0U7CisgCisgICAvKiBXZSBpbml0aWFsaXplIERFTUFOR0xJTkcgYmFzZWQgb24gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgICBDT0xMRUNUX05PX0RFTUFOR0xFLiAgVGhlIGdjYyBjb2xsZWN0MiBwcm9ncmFtIHdpbGwgZGVtYW5nbGUgdGhlCitkaWZmIC0tZ2l0IGEvbGQvbGV4c3VwLmMgYi9sZC9sZXhzdXAuYworaW5kZXggNDgxMmM5Ny4uMjFiNDlkZiAxMDA2NDQKKy0tLSBhL2xkL2xleHN1cC5jCisrKysgYi9sZC9sZXhzdXAuYworQEAgLTUxMyw2ICs1MTMsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBsZF9vcHRpb24gbGRfb3B0aW9uc1tdID0KKyAgIHsgeyJwb3Atc3RhdGUiLCBub19hcmd1bWVudCwgTlVMTCwgT1BUSU9OX1BPUF9TVEFURX0sCisgICAgICdcMCcsIE5VTEwsIE5fKCJQb3Agc3RhdGUgb2YgZmxhZ3MgZ292ZXJuaW5nIGlucHV0IGZpbGUgaGFuZGxpbmciKSwKKyAgICAgVFdPX0RBU0hFUyB9LAorKyAgeyB7Im5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLCBub19hcmd1bWVudCwgTlVMTCwKKysgICAgIE9QVElPTl9OT19QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTfSwKKysgICAgJ1wwJywgTlVMTCwgTl8oIkRvIG5vdCB3YXJuIGZvciAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyIpLAorKyAgICBUV09fREFTSEVTIH0sCisrICB7IHsiZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIsIG5vX2FyZ3VtZW50LCBOVUxMLAorKyAgICArICAgICBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFU30sCisrICAgICdcMCcsIE5VTEwsIE5fKCJHaXZlIGFuIGVycm9yIGZvciAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyIpLAorKyAgICBUV09fREFTSEVTIH0sCisgfTsKKyAKKyAjZGVmaW5lIE9QVElPTl9DT1VOVCBBUlJBWV9TSVpFIChsZF9vcHRpb25zKQorQEAgLTE0NzQsNiArMTQ4MiwxNCBAQCBwYXJzZV9hcmdzICh1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgICAgZnJlZSAob2xkcCk7CisgCSAgICB9CisgCSAgYnJlYWs7CisrCisrCWNhc2UgT1BUSU9OX05PX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVM6CisrCSAgY29tbWFuZF9saW5lLnBvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMgPSBGQUxTRTsKKysJICBicmVhazsKKysKKysJY2FzZSBPUFRJT05fRVJST1JfUE9JU09OX1NZU1RFTV9ESVJFQ1RPUklFUzoKKysJICBjb21tYW5kX2xpbmUuZXJyb3JfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcyA9IFRSVUU7CisrCSAgYnJlYWs7CisgCX0KKyAgICAgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEwLUZpeC1ycGF0aC1pbi1saWJ0b29sLXdoZW4tc3lzcm9vdC1pcy1lbmFibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTFlNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMC1GaXgtcnBhdGgtaW4tbGlidG9vbC13aGVuLXN5c3Jvb3QtaXMtZW5hYmxlZC5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGVkYmVlOWE2OGUxYzJlMTFjMDU5NjY4YWExZDEzMDAxZDlmM2RlMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAxOjQyOjM4ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTNdIEZpeCBycGF0aCBpbiBsaWJ0b29sIHdoZW4gc3lzcm9vdCBpcyBlbmFibGVkCisKK0VuYWJsaW5nIHN5c3Jvb3Qgc3VwcG9ydCBpbiBsaWJ0b29sIGV4cG9zZWQgYSBidWcgd2hlcmUgdGhlIGZpbmFsCitsaWJyYXJ5IGhhZCBhbiBSUEFUSCBlbmNvZGVkIGludG8gaXQgd2hpY2ggc3RpbGwgcG9pbnRlZCB0byB0aGUKK3N5c3Jvb3QuIFRoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZSB1bnRpbCBpdCBnZXRzIHNvcnRlZCBvdXQKK3Vwc3RyZWFtLgorCitGaXggc3VnZ2VzdGVkIGJ5IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsdG1haW4uc2ggfCAxMCArKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaAoraW5kZXggNzBlODU2ZS4uMTFlZTY4NCAxMDA2NDQKKy0tLSBhL2x0bWFpbi5zaAorKysrIGIvbHRtYWluLnNoCitAQCAtODAzNSw5ICs4MDM1LDExIEBAIEVPRgorIAkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKKyAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKyAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorKwkJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJCSAgbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKysJCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKy0JCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorLQkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKyAJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorIAkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorIAkJZWxzZQorQEAgLTg3NzAsNiArODc3MiwxMCBAQCBFT0YKKyAgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTEtQ2hhbmdlLWRlZmF1bHQtZW11bGF0aW9uLWZvci1taXBzNjQtbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkNTdlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDExLUNoYW5nZS1kZWZhdWx0LWVtdWxhdGlvbi1mb3ItbWlwczY0LWxpbnV4LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMmE1ZTg4MTNkM2M1ZGIzZTJiN2Q5ZGZhMmFiMjdjY2NkNTExMWU1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NDQ6MTQgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8xM10gQ2hhbmdlIGRlZmF1bHQgZW11bGF0aW9uIGZvciBtaXBzNjQqLSotbGludXgKKword2UgY2hhbmdlIHRoZSBkZWZhdWx0IGVtdWxhdGlvbnMgdG8gYmUgTjY0IGluc3RlYWQgb2YgTjMyCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIGNvbmZpZ3VyYXRpb24gU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBiZmQvY29uZmlnLmJmZCAgIHwgOCArKysrLS0tLQorIGxkL2NvbmZpZ3VyZS50Z3QgfCA4ICsrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iZmQvY29uZmlnLmJmZCBiL2JmZC9jb25maWcuYmZkCitpbmRleCA3YmNiOTJhLi4wM2QyYzZmIDEwMDY0NAorLS0tIGEvYmZkL2NvbmZpZy5iZmQKKysrKyBiL2JmZC9jb25maWcuYmZkCitAQCAtMTA2MiwxMiArMTA2MiwxMiBAQCBjYXNlICIke3Rhcmd9IiBpbgorICAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbGVfdmVjIG1pcHNfZWxmNjRfYmVfdmVjIG1pcHNfZWxmNjRfbGVfdmVjIG1pcHNfZWNvZmZfYmVfdmVjIG1pcHNfZWNvZmZfbGVfdmVjIgorICAgICA7OworICAgbWlwczY0KmVsLSotbGludXgqKQorLSAgICB0YXJnX2RlZnZlYz1taXBzX2VsZjMyX250cmFkX2xlX3ZlYworLSAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMiCisrICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmNjRfdHJhZF9sZV92ZWMKKysgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX250cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX250cmFkX2xlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2JlX3ZlYyIKKyAgICAgOzsKKyAgIG1pcHM2NCotKi1saW51eCopCistICAgIHRhcmdfZGVmdmVjPW1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjCistICAgIHRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl9udHJhZF9sZV92ZWMgbWlwc19lbGYzMl90cmFkX2JlX3ZlYyBtaXBzX2VsZjMyX3RyYWRfbGVfdmVjIG1pcHNfZWxmNjRfdHJhZF9iZV92ZWMgbWlwc19lbGY2NF90cmFkX2xlX3ZlYyIKKysgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGY2NF90cmFkX2JlX3ZlYworKyAgICB0YXJnX3NlbHZlY3M9Im1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfbnRyYWRfYmVfdmVjIG1pcHNfZWxmMzJfdHJhZF9iZV92ZWMgbWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfbGVfdmVjIgorICAgICA7OworICAgbWlwcyplbC0qLWxpbnV4KikKKyAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl90cmFkX2xlX3ZlYworZGlmZiAtLWdpdCBhL2xkL2NvbmZpZ3VyZS50Z3QgYi9sZC9jb25maWd1cmUudGd0CitpbmRleCAyNGUzNmQxLi43NDBiMmVhIDEwMDY0NAorLS0tIGEvbGQvY29uZmlndXJlLnRndAorKysrIGIvbGQvY29uZmlndXJlLnRndAorQEAgLTQ3NiwxMSArNDc2LDExIEBAIG1pcHMqZWwtKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWxtaXB2eHdvcmtzCisgbWlwcyotKi12eHdvcmtzKikJdGFyZ19lbXVsPWVsZjMyZWJtaXB2eHdvcmtzCisgCQkgICAgICAgIHRhcmdfZXh0cmFfZW11bHM9ImVsZjMyZWxtaXB2eHdvcmtzIiA7OworIG1pcHMqLSotd2luZGlzcykJdGFyZ19lbXVsPWVsZjMybWlwc3dpbmRpc3MgOzsKKy1taXBzNjQqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXBuMzIKKy0JCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcCBlbGYzMmJ0c21pcCBlbGY2NGx0c21pcCBlbGY2NGJ0c21pcCIKKyttaXBzNjQqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmNjRsdHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcG4zMiBlbGYzMmx0c21pcG4zMiBlbGYzMmx0c21pcCBlbGYzMmJ0c21pcCBlbGY2NGJ0c21pcCIKKyAJCQl0YXJnX2V4dHJhX2xpYnBhdGg9JHRhcmdfZXh0cmFfZW11bHMgOzsKKy1taXBzNjQqLSotbGludXgtKikJdGFyZ19lbXVsPWVsZjMyYnRzbWlwbjMyCistCQkJdGFyZ19leHRyYV9lbXVscz0iZWxmMzJsdHNtaXBuMzIgZWxmMzJidHNtaXAgZWxmMzJsdHNtaXAgZWxmNjRidHNtaXAgZWxmNjRsdHNtaXAiCisrbWlwczY0Ki0qLWxpbnV4LSopCXRhcmdfZW11bD1lbGY2NGJ0c21pcAorKwkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMyYnRzbWlwbjMyIGVsZjMybHRzbWlwbjMyIGVsZjMyYnRzbWlwIGVsZjMybHRzbWlwIGVsZjY0bHRzbWlwIgorIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OworIG1pcHMqZWwtKi1saW51eC0qKQl0YXJnX2VtdWw9ZWxmMzJsdHNtaXAKKyAJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmJ0c21pcCBlbGYzMmx0c21pcG4zMiBlbGY2NGx0c21pcCBlbGYzMmJ0c21pcG4zMiBlbGY2NGJ0c21pcCIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTItQWRkLVhMUC1pbnN0cnVjdGlvbnMtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU2ZmY5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEyLUFkZC1YTFAtaW5zdHJ1Y3Rpb25zLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0MjggQEAKK0Zyb20gNDQ4MzI5ZWEwOTc0NDdhZWU3M2QwNTAwNDUyOTVjNWEwYWU4NTE5ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDIgTWFyIDIwMTUgMDE6NTE6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8xM10gQWRkIFhMUCBpbnN0cnVjdGlvbnMgc3VwcG9ydAorCitGcm9tIDI2YWRiMDZjZTUxNWFhZGZlYzA4Y2UxMzEwOWI0Yjk4Mjg3ZjY3N2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOZWJ1IFBoaWxpcHMgPG5waGlsaXBzQG5ldGxvZ2ljbWljcm8uY29tPgorRGF0ZTogRnJpLCAzMCBKdWwgMjAxMCAxNToxMDowMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgTmV0bG9naWMgWExQCisKK1VzaW5nIHRoZSBtaXBzaXNhNjRyMm5sbSB0YXJnZXQsIGFkZCBzdXBwb3J0IGZvciBYTFAgZnJvbQorTmV0bG9naWMuIEFsc28sIHVwZGF0ZSB2ZW5kb3IgbmFtZSB0byBOTE0gd2hlcmV2ZXIgYXBwbGljYWJsZS4KKy0tLQorIGJmZC9hb3V0eC5oICAgICAgICAgICB8ICAgIDEgKworIGJmZC9hcmNodXJlcy5jICAgICAgICB8ICAgIDEgKworIGJmZC9iZmQtaW4yLmggICAgICAgICB8ICAgIDEgKworIGJmZC9jb25maWcuYmZkICAgICAgICB8ICAgIDUgKysrKysKKyBiZmQvY3B1LW1pcHMuYyAgICAgICAgfCAgICA2ICsrKystLQorIGJmZC9lbGZ4eC1taXBzLmMgICAgICB8ICAgIDggKysrKysrKysKKyBiaW51dGlscy9yZWFkZWxmLmMgICAgfCAgICAxICsKKyBnYXMvY29uZmlnL3RjLW1pcHMuYyAgfCAgICA0ICsrKy0KKyBnYXMvY29uZmlndXJlICAgICAgICAgfCAgICAzICsrKworIGdhcy9jb25maWd1cmUudGd0ICAgICB8ICAgIDIgKy0KKyBpbmNsdWRlL2VsZi9taXBzLmggICAgfCAgICAxICsKKyBpbmNsdWRlL29wY29kZS9taXBzLmggfCAgIDEwICsrKysrKysrLS0KKyBsZC9jb25maWd1cmUudGd0ICAgICAgfCAgICAyICsrCisgb3Bjb2Rlcy9taXBzLWRpcy5jICAgIHwgICAxMiArKysrKy0tLS0tLS0KKyBvcGNvZGVzL21pcHMtb3BjLmMgICAgfCAgIDMzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDE1IGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGJmZC9hb3V0eC5oICAgICAgICAgICB8ICAxICsKKyBiZmQvYXJjaHVyZXMuYyAgICAgICAgfCAgMSArCisgYmZkL2JmZC1pbjIuaCAgICAgICAgIHwgIDEgKworIGJmZC9jb25maWcuYmZkICAgICAgICB8ICA1ICsrKysrCisgYmZkL2NwdS1taXBzLmMgICAgICAgIHwgIDYgKysrKy0tCisgYmZkL2VsZnh4LW1pcHMuYyAgICAgIHwgIDggKysrKysrKysKKyBiaW51dGlscy9yZWFkZWxmLmMgICAgfCAgMSArCisgZ2FzL2NvbmZpZy90Yy1taXBzLmMgIHwgIDQgKysrLQorIGdhcy9jb25maWd1cmUgICAgICAgICB8ICAzICsrKworIGdhcy9jb25maWd1cmUudGd0ICAgICB8ICAyICstCisgaW5jbHVkZS9lbGYvbWlwcy5oICAgIHwgIDEgKworIGluY2x1ZGUvb3Bjb2RlL21pcHMuaCB8IDEwICsrKysrKysrLS0KKyBsZC9jb25maWd1cmUudGd0ICAgICAgfCAgMiArKworIG9wY29kZXMvbWlwcy1kaXMuYyAgICB8IDEyICsrKysrLS0tLS0tLQorIG9wY29kZXMvbWlwcy1vcGMuYyAgICB8IDMzICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDE1IGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYmZkL2FvdXR4LmggYi9iZmQvYW91dHguaAoraW5kZXggOTM4NWE5OC4uYTg4ZGY5OSAxMDA2NDQKKy0tLSBhL2JmZC9hb3V0eC5oCisrKysgYi9iZmQvYW91dHguaAorQEAgLTgwMiw2ICs4MDIsNyBAQCBOQU1FIChhb3V0LCBtYWNoaW5lX3R5cGUpIChlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYXJjaCwKKyAJY2FzZSBiZmRfbWFjaF9taXBzaXNhNjRyNjoKKyAJY2FzZSBiZmRfbWFjaF9taXBzX3NiMToKKyAJY2FzZSBiZmRfbWFjaF9taXBzX3hscjoKKysJY2FzZSBiZmRfbWFjaF9taXBzX3hscDoKKyAJICAvKiBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIE1JUFMzLCBNSVBTNCwgTUlQUzE2LCBNSVBTMzIsIGV0Yy4gICovCisgCSAgYXJjaF9mbGFncyA9IE1fTUlQUzI7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvYmZkL2FyY2h1cmVzLmMgYi9iZmQvYXJjaHVyZXMuYworaW5kZXggYzlmZDZjOC4uNTQ3YmQwOSAxMDA2NDQKKy0tLSBhL2JmZC9hcmNodXJlcy5jCisrKysgYi9iZmQvYXJjaHVyZXMuYworQEAgLTE4MCw2ICsxODAsNyBAQCBERVNDUklQVElPTgorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucAkJNjYwMQorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMgkJNjUwMgorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICB7KiBkZWNpbWFsICdYTFInICAqfQorKy4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICB7KiBkZWNpbWFsICdYTFAnICAqfQorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIyICAgICAgICAgICAzMworIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIzICAgICAgICAgICAzNAorZGlmZiAtLWdpdCBhL2JmZC9iZmQtaW4yLmggYi9iZmQvYmZkLWluMi5oCitpbmRleCBjN2EyYmI1Li40MTNiNzczIDEwMDY0NAorLS0tIGEvYmZkL2JmZC1pbjIuaAorKysrIGIvYmZkL2JmZC1pbjIuaAorQEAgLTE5NjcsNiArMTk2Nyw3IEBAIGVudW0gYmZkX2FyY2hpdGVjdHVyZQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb25wICAgICAgICAgIDY2MDEKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiAgICAgICAgICA2NTAyCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX3hsciAgICAgICAgICAgICAgODg3NjgyICAgLyogZGVjaW1hbCAnWExSJyAgKi8KKysjZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICAvKiBkZWNpbWFsICdYTFAnICAqLworICNkZWZpbmUgYmZkX21hY2hfbWlwc2lzYTMyICAgICAgICAgICAgIDMyCisgI2RlZmluZSBiZmRfbWFjaF9taXBzaXNhMzJyMiAgICAgICAgICAgMzMKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMnIzICAgICAgICAgICAzNAorZGlmZiAtLWdpdCBhL2JmZC9jb25maWcuYmZkIGIvYmZkL2NvbmZpZy5iZmQKK2luZGV4IDAzZDJjNmYuLjI3MDg2ZGIgMTAwNjQ0CistLS0gYS9iZmQvY29uZmlnLmJmZAorKysrIGIvYmZkL2NvbmZpZy5iZmQKK0BAIC0xMDQxLDYgKzEwNDEsMTEgQEAgY2FzZSAiJHt0YXJnfSIgaW4KKyAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9sZV92ZWMKKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2JlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyIKKyAgICAgOzsKKysgIG1pcHNpc2E2NCotKi1lbGYqKQorKwl0YXJnX2RlZnZlYz1taXBzX2VsZjMyX3RyYWRfYmVfdmVjCisrCXRhcmdfc2VsdmVjcz0ibWlwc19lbGYzMl90cmFkX2xlX3ZlYyBtaXBzX2VsZjY0X3RyYWRfYmVfdmVjIG1pcHNfZWxmNjRfdHJhZF9sZV92ZWMiCisrCXdhbnQ2ND10cnVlCisrCTs7CisgICBtaXBzKi0qLWVsZiogfCBtaXBzKi0qLXJ0ZW1zKiB8IG1pcHMqLSotdnh3b3JrcyB8IG1pcHMqLSotd2luZGlzcykKKyAgICAgdGFyZ19kZWZ2ZWM9bWlwc19lbGYzMl9iZV92ZWMKKyAgICAgdGFyZ19zZWx2ZWNzPSJtaXBzX2VsZjMyX2xlX3ZlYyBtaXBzX2VsZjY0X2JlX3ZlYyBtaXBzX2VsZjY0X2xlX3ZlYyIKK2RpZmYgLS1naXQgYS9iZmQvY3B1LW1pcHMuYyBiL2JmZC9jcHUtbWlwcy5jCitpbmRleCBiNjE3YWFhLi4xOWE5OWQxIDEwMDY0NAorLS0tIGEvYmZkL2NwdS1taXBzLmMKKysrKyBiL2JmZC9jcHUtbWlwcy5jCitAQCAtMTAzLDcgKzEwMyw4IEBAIGVudW0KKyAgIElfbWlwc29jdGVvbnAsCisgICBJX21pcHNvY3Rlb24yLAorICAgSV94bHIsCistICBJX21pY3JvbWlwcworKyAgSV9taWNyb21pcHMsCisrICBJX3hscAorIH07CisgCisgI2RlZmluZSBOTihpbmRleCkgKCZhcmNoX2luZm9fc3RydWN0WyhpbmRleCkgKyAxXSkKK0BAIC0xNTMsNyArMTU0LDggQEAgc3RhdGljIGNvbnN0IGJmZF9hcmNoX2luZm9fdHlwZSBhcmNoX2luZm9fc3RydWN0W10gPQorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbnAsIm1pcHM6b2N0ZW9uKyIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9ucCkpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX29jdGVvbjIsIm1pcHM6b2N0ZW9uMiIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uMikpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hsciwgIm1pcHM6eGxyIiwgICAgICAgRkFMU0UsIE5OKElfeGxyKSksCistICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfbWljcm9taXBzLCJtaXBzOm1pY3JvbWlwcyIsRkFMU0UsMCkKKysgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19taWNyb21pcHMsIm1pcHM6bWljcm9taXBzIixGQUxTRSxOTihJX21pY3JvbWlwcykpLAorKyAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hscCwgIm1pcHM6eGxwIiwgICAgICBGQUxTRSwgMCkKKyB9OworIAorIC8qIFRoZSBkZWZhdWx0IGFyY2hpdGVjdHVyZSBpcyBtaXBzOjMwMDAsIGJ1dCB3aXRoIGEgbWFjaGluZSBudW1iZXIgb2YKK2RpZmYgLS1naXQgYS9iZmQvZWxmeHgtbWlwcy5jIGIvYmZkL2VsZnh4LW1pcHMuYworaW5kZXggMGRmN2FiZi4uZDI2OGU4NiAxMDA2NDQKKy0tLSBhL2JmZC9lbGZ4eC1taXBzLmMKKysrKyBiL2JmZC9lbGZ4eC1taXBzLmMKK0BAIC02NjA4LDYgKzY2MDgsOSBAQCBfYmZkX2VsZl9taXBzX21hY2ggKGZsYWd3b3JkIGZsYWdzKQorICAgICBjYXNlIEVfTUlQU19NQUNIX1hMUjoKKyAgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc194bHI7CisgCisrCWNhc2UgRV9NSVBTX01BQ0hfWExQOgorKyAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX3hscDsKKysKKyAgICAgZGVmYXVsdDoKKyAgICAgICBzd2l0Y2ggKGZsYWdzICYgRUZfTUlQU19BUkNIKQorIAl7CitAQCAtMTE4NzgsNiArMTE4ODEsMTAgQEAgbWlwc19zZXRfaXNhX2ZsYWdzIChiZmQgKmFiZmQpCisgICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfNjRSMiB8IEVfTUlQU19NQUNIX09DVEVPTjI7CisgICAgICAgYnJlYWs7CisgCisrCWNhc2UgYmZkX21hY2hfbWlwc194bHA6CisrCSAgdmFsID0gRV9NSVBTX0FSQ0hfNjRSMiB8IEVfTUlQU19NQUNIX1hMUDsKKysJICBicmVhazsKKysKKyAgICAgY2FzZSBiZmRfbWFjaF9taXBzaXNhMzI6CisgICAgICAgdmFsID0gRV9NSVBTX0FSQ0hfMzI7CisgICAgICAgYnJlYWs7CitAQCAtMTQ3NjUsNiArMTQ3NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfbWFjaF9leHRlbnNpb24gbWlwc19tYWNoX2V4dGVuc2lvbnNbXSA9CisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9ucCwgYmZkX21hY2hfbWlwc19vY3Rlb24gfSwKKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb24sIGJmZF9tYWNoX21pcHNpc2E2NHIyIH0sCisgICB7IGJmZF9tYWNoX21pcHNfbG9vbmdzb25fM2EsIGJmZF9tYWNoX21pcHNpc2E2NHIyIH0sCisrICB7IGJmZF9tYWNoX21pcHNfeGxwLCBiZmRfbWFjaF9taXBzaXNhNjRyMiB9LAorIAorICAgLyogTUlQUzY0IGV4dGVuc2lvbnMuICAqLworICAgeyBiZmRfbWFjaF9taXBzaXNhNjRyMiwgYmZkX21hY2hfbWlwc2lzYTY0IH0sCitkaWZmIC0tZ2l0IGEvYmludXRpbHMvcmVhZGVsZi5jIGIvYmludXRpbHMvcmVhZGVsZi5jCitpbmRleCAwYzAwYjJmLi42ZTlkNWU0IDEwMDY0NAorLS0tIGEvYmludXRpbHMvcmVhZGVsZi5jCisrKysgYi9iaW51dGlscy9yZWFkZWxmLmMKK0BAIC0yODk4LDYgKzI4OTgsNyBAQCBnZXRfbWFjaGluZV9mbGFncyAodW5zaWduZWQgZV9mbGFncywgdW5zaWduZWQgZV9tYWNoaW5lKQorIAkgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04yOiBzdHJjYXQgKGJ1ZiwgIiwgb2N0ZW9uMiIpOyBicmVhazsKKyAJICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMzogc3RyY2F0IChidWYsICIsIG9jdGVvbjMiKTsgYnJlYWs7CisgCSAgICBjYXNlIEVfTUlQU19NQUNIX1hMUjogIHN0cmNhdCAoYnVmLCAiLCB4bHIiKTsgYnJlYWs7CisrCQljYXNlIEVfTUlQU19NQUNIX1hMUDogIHN0cmNhdCAoYnVmLCAiLCB4bHAiKTsgYnJlYWs7CisgCSAgICBjYXNlIDA6CisgCSAgICAvKiBXZSBzaW1wbHkgaWdub3JlIHRoZSBmaWVsZCBpbiB0aGlzIGNhc2UgdG8gYXZvaWQgY29uZnVzaW9uOgorIAkgICAgICAgTUlQUyBFTEYgZG9lcyBub3Qgc3BlY2lmeSBFRl9NSVBTX01BQ0gsIGl0IGlzIGEgR05VCitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZy90Yy1taXBzLmMgYi9nYXMvY29uZmlnL3RjLW1pcHMuYworaW5kZXggYzNlM2UyYS4uOGQ2NDM0NCAxMDA2NDQKKy0tLSBhL2dhcy9jb25maWcvdGMtbWlwcy5jCisrKysgYi9nYXMvY29uZmlnL3RjLW1pcHMuYworQEAgLTU1MSw2ICs1NTEsNyBAQCBzdGF0aWMgaW50IG1pcHNfMzJiaXRtb2RlID0gMDsKKyAgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfUk03MDAwICAgICAgICAgICAgICAgICAgICBcCisgICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1ZSNTUwMCAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5taWNyb21pcHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfWExQICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKQorIAorIC8qIFdoZXRoZXIgdGhlIHByb2Nlc3NvciB1c2VzIGhhcmR3YXJlIGludGVybG9ja3MgdG8gcHJvdGVjdCByZWFkcworQEAgLTU4MCw2ICs1ODEsNyBAQCBzdGF0aWMgaW50IG1pcHNfMzJiaXRtb2RlID0gMDsKKyAgICAgJiYgbWlwc19vcHRzLmlzYSAhPSBJU0FfTUlQUzMpICAgICAgICAgICAgICAgICAgICBcCisgICAgfHwgbWlwc19vcHRzLmFyY2ggPT0gQ1BVX1I0MzAwICAgICAgICAgICAgICAgICAgICAgXAorICAgIHx8IG1pcHNfb3B0cy5taWNyb21pcHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICB8fCBtaXBzX29wdHMuYXJjaCA9PSBDUFVfWExQICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKQorIAorIC8qIFdoZXRoZXIgdGhlIHByb2Nlc3NvciB1c2VzIGhhcmR3YXJlIGludGVybG9ja3MgdG8gcHJvdGVjdCByZWFkcworQEAgLTE4NjgyLDcgKzE4Njg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBzX2NwdV9pbmZvIG1pcHNfY3B1X2luZm9fdGFibGVbXSA9CisgICAvKiBCcm9hZGNvbSBYTFAuCisgICAgICBYTFAgaXMgbW9zdGx5IGxpa2UgWExSLCB3aXRoIHRoZSBwcm9taW5lbnQgZXhjZXB0aW9uIHRoYXQgaXQgaXMKKyAgICAgIE1JUFM2NFIyIHJhdGhlciB0aGFuIE1JUFM2NC4gICovCistICB7ICJ4bHAiLAkgICAgICAwLCAwLAkJCUlTQV9NSVBTNjRSMiwgQ1BVX1hMUiB9LAorKyAgeyAieGxwIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9YTFAgfSwKKyAKKyAgIC8qIEVuZCBtYXJrZXIgKi8KKyAgIHsgTlVMTCwgMCwgMCwgMCwgMCB9CitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZSBiL2dhcy9jb25maWd1cmUKK2luZGV4IDA3NDg4NmYuLjgwOTFmMmYgMTAwNzU1CistLS0gYS9nYXMvY29uZmlndXJlCisrKysgYi9nYXMvY29uZmlndXJlCitAQCAtMTI4MDgsNiArMTI4MDgsOSBAQCBfQUNFT0YKKyAJICBtaXBzaXNhNjRyNiB8IG1pcHNpc2E2NHI2ZWwpCisgCSAgICBtaXBzX2NwdT1taXBzNjRyNgorIAkgICAgOzsKKysJICBtaXBzaXNhNjRyMm5sbSB8IG1pcHNpc2E2NHIybmxtZWwpCisrCQltaXBzX2NwdT14bHAKKysJCTs7CisgCSAgbWlwc3R4MzkgfCBtaXBzdHgzOWVsKQorIAkgICAgbWlwc19jcHU9cjM5MDAKKyAJICAgIDs7CitkaWZmIC0tZ2l0IGEvZ2FzL2NvbmZpZ3VyZS50Z3QgYi9nYXMvY29uZmlndXJlLnRndAoraW5kZXggMWQ5MmY1NS4uMDZlOGI0ZiAxMDA2NDQKKy0tLSBhL2dhcy9jb25maWd1cmUudGd0CisrKysgYi9nYXMvY29uZmlndXJlLnRndAorQEAgLTMzMiw3ICszMzIsNyBAQCBjYXNlICR7Z2VuZXJpY190YXJnZXR9IGluCisgICBtaXBzLSotc3lzdjQqTVAqIHwgbWlwcy0qLWdudSopCWZtdD1lbGYgZW09dG1pcHMgOzsKKyAgIG1pcHMqLXNkZS1lbGYqIHwgbWlwcyotbXRpLWVsZiogfCBtaXBzKi1pbWctZWxmKikKKyAJCQkJCWZtdD1lbGYgZW09dG1pcHMgOzsKKy0gIG1pcHMtKi1lbGYqIHwgbWlwcy0qLXJ0ZW1zKikJCWZtdD1lbGYgOzsKKysgIG1pcHMtKi1lbGYqIHwgbWlwcy0qLXJ0ZW1zKikJCWZtdD1lbGYgZW09dG1pcHMgOzsKKyAgIG1pcHMtKi1uZXRic2QqKQkJCWZtdD1lbGYgZW09dG1pcHMgOzsKKyAgIG1pcHMtKi1vcGVuYnNkKikJCQlmbXQ9ZWxmIGVtPXRtaXBzIDs7CisgCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9lbGYvbWlwcy5oIGIvaW5jbHVkZS9lbGYvbWlwcy5oCitpbmRleCAyZWQ2YWNkLi5lNTQxZjUwIDEwMDY0NAorLS0tIGEvaW5jbHVkZS9lbGYvbWlwcy5oCisrKysgYi9pbmNsdWRlL2VsZi9taXBzLmgKK0BAIC0yODUsNiArMjg1LDcgQEAgRU5EX1JFTE9DX05VTUJFUlMgKFJfTUlQU19tYXhleHQpCisgI2RlZmluZSBFX01JUFNfTUFDSF9TQjEgICAgICAgICAweDAwOGEwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF9PQ1RFT04JMHgwMDhiMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfWExSICAgICAJMHgwMDhjMDAwMAorKyNkZWZpbmUgRV9NSVBTX01BQ0hfWExQICAgICAgICAgMHgwMDhmMDAwMAorICNkZWZpbmUgRV9NSVBTX01BQ0hfT0NURU9OMgkweDAwOGQwMDAwCisgI2RlZmluZSBFX01JUFNfTUFDSF9PQ1RFT04zCTB4MDA4ZTAwMDAKKyAjZGVmaW5lIEVfTUlQU19NQUNIXzU0MDAJMHgwMDkxMDAwMAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvb3Bjb2RlL21pcHMuaCBiL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAoraW5kZXggZWYyNjE2Ny4uZWY1M2VjNiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorKysrIGIvaW5jbHVkZS9vcGNvZGUvbWlwcy5oCitAQCAtMTIyNyw4ICsxMjI3LDEwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGVbXSA9IHsKKyAjZGVmaW5lIElOU05fTE9PTkdTT05fMkYgICAgICAgICAgMHg4MDAwMDAwMAorIC8qIExvb25nc29uIDNBLiAgKi8KKyAjZGVmaW5lIElOU05fTE9PTkdTT05fM0EgICAgICAgICAgMHgwMDAwMDQwMAorLS8qIFJNSSBYbHIgaW5zdHJ1Y3Rpb24gKi8KKy0jZGVmaW5lIElOU05fWExSICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisrLyogTmV0bG9naWMgWGxyIGluc3RydWN0aW9uICovCisrI2RlZmluZSBJTlNOX1hMUgkJMHgwMDAwMDAyMAorKy8qIE5ldGxvZ2ljIFhsUCBpbnN0cnVjdGlvbiAqLworKyNkZWZpbmUgSU5TTl9YTFAJCTB4MDAwMDAwNDAKKyAKKyAvKiBEU1AgQVNFICovCisgI2RlZmluZSBBU0VfRFNQCQkJMHgwMDAwMDAwMQorQEAgLTEzMjQsNiArMTMyNiw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWlwc19pc2FfdGFibGVbXSA9IHsKKyAjZGVmaW5lIENQVV9PQ1RFT05QCTY2MDEKKyAjZGVmaW5lIENQVV9PQ1RFT04yCTY1MDIKKyAjZGVmaW5lIENQVV9YTFIgICAgIAk4ODc2ODIgICAJLyogZGVjaW1hbCAnWExSJyAgICovCisrI2RlZmluZSBDUFVfWExQICAgICAgICAgODg3NjgwICAgICAgLyogZGVjaW1hbCAnWExQJyAgICovCisgCisgLyogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIENQVSBpcyBpbmNsdWRlZCBpbiBJTlNOXyogbWFzayBNQVNLLiAgKi8KKyAKK0BAIC0xMzk4LDYgKzE0MDEsOSBAQCBjcHVfaXNfbWVtYmVyIChpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbWFzaykKKyAgICAgICByZXR1cm4gKChtYXNrICYgSU5TTl9JU0FfTUFTSykgPT0gSU5TTl9JU0EzMlI2KQorIAkgICAgIHx8ICgobWFzayAmIElOU05fSVNBX01BU0spID09IElOU05fSVNBNjRSNik7CisgCisrICAgIGNhc2UgQ1BVX1hMUDoKKysgICAgICByZXR1cm4gKG1hc2sgJiBJTlNOX1hMUCkgIT0gMDsKKysKKyAgICAgZGVmYXVsdDoKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KK2RpZmYgLS1naXQgYS9sZC9jb25maWd1cmUudGd0IGIvbGQvY29uZmlndXJlLnRndAoraW5kZXggNzQwYjJlYS4uNGRmMTNhNyAxMDA2NDQKKy0tLSBhL2xkL2NvbmZpZ3VyZS50Z3QKKysrKyBiL2xkL2NvbmZpZ3VyZS50Z3QKK0BAIC00NjIsNiArNDYyLDggQEAgbWlwcyplbC1zZGUtZWxmKikJdGFyZ19lbXVsPWVsZjMybHRzbWlwCisgbWlwcyotc2RlLWVsZiogfCBtaXBzKi1tdGktZWxmKiB8IG1pcHMqLWltZy1lbGYqKQorIAkJCXRhcmdfZW11bD1lbGYzMmJ0c21pcAorIAkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHRzbWlwIGVsZjMyYnRzbWlwbjMyIGVsZjY0YnRzbWlwIGVsZjMybHRzbWlwbjMyIGVsZjY0bHRzbWlwIiA7OworK21pcHNpc2E2NCotKi1lbGYqKQl0YXJnX2VtdWw9ZWxmMzJidHNtaXAKKysJCQl0YXJnX2V4dHJhX2VtdWxzPSJlbGYzMmx0c21pcCBlbGY2NGJ0c21pcCBlbGY2NGx0c21pcCIgOzsKKyBtaXBzNjQqZWwtcHMyLWVsZiopCXRhcmdfZW11bD1lbGYzMmxyNTkwMG4zMgorIAkJCXRhcmdfZXh0cmFfZW11bHM9ImVsZjMybHI1OTAwIgorIAkJCXRhcmdfZXh0cmFfbGlicGF0aD0kdGFyZ19leHRyYV9lbXVscyA7OworZGlmZiAtLWdpdCBhL29wY29kZXMvbWlwcy1kaXMuYyBiL29wY29kZXMvbWlwcy1kaXMuYworaW5kZXggMWViMWQ0NS4uZDY4ODFhZiAxMDA2NDQKKy0tLSBhL29wY29kZXMvbWlwcy1kaXMuYworKysrIGIvb3Bjb2Rlcy9taXBzLWRpcy5jCitAQCAtNjU1LDEzICs2NTUsMTEgQEAgY29uc3Qgc3RydWN0IG1pcHNfYXJjaF9jaG9pY2UgbWlwc19hcmNoX2Nob2ljZXNbXSA9CisgICAgIG1pcHNfY3Awc2VsX25hbWVzX3hsciwgQVJSQVlfU0laRSAobWlwc19jcDBzZWxfbmFtZXNfeGxyKSwKKyAgICAgbWlwc19jcDFfbmFtZXNfbWlwczMyNjQsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKyAKKy0gIC8qIFhMUCBpcyBtb3N0bHkgbGlrZSBYTFIsIHdpdGggdGhlIHByb21pbmVudCBleGNlcHRpb24gaXQgaXMgYmVpbmcKKy0gICAgIE1JUFM2NFIyLiAgKi8KKy0gIHsgInhscCIsIDEsIGJmZF9tYWNoX21pcHNfeGxyLCBDUFVfWExSLAorLSAgICBJU0FfTUlQUzY0UjIgfCBJTlNOX1hMUiwgMCwKKy0gICAgbWlwc19jcDBfbmFtZXNfeGxyLAorLSAgICBtaXBzX2NwMHNlbF9uYW1lc194bHIsIEFSUkFZX1NJWkUgKG1pcHNfY3Awc2VsX25hbWVzX3hsciksCistICAgIG1pcHNfY3AxX25hbWVzX21pcHMzMjY0LCBtaXBzX2h3cl9uYW1lc19udW1lcmljIH0sCisrICB7ICJ4bHAiLCAxLCBiZmRfbWFjaF9taXBzX3hscCwgQ1BVX1hMUCwKKysgICAgSVNBX01JUFM2NFIyIHwgSU5TTl9YTFAsIDAsCisrICAgIG1pcHNfY3AwX25hbWVzX21pcHMzMjY0cjIsCisrICAgIG1pcHNfY3Awc2VsX25hbWVzX21pcHMzMjY0cjIsIEFSUkFZX1NJWkUgKG1pcHNfY3Awc2VsX25hbWVzX21pcHMzMjY0cjIpLAorKyAgICBtaXBzX2h3cl9uYW1lc19taXBzMzI2NHIyIH0sCisgCisgICAvKiBUaGlzIGVudHJ5LCBtaXBzMTYsIGlzIGhlcmUgb25seSBmb3IgSVNBL3Byb2Nlc3NvciBzZWxlY3Rpb247IGRvCisgICAgICBub3QgcHJpbnQgaXRzIG5hbWUuICAqLworZGlmZiAtLWdpdCBhL29wY29kZXMvbWlwcy1vcGMuYyBiL29wY29kZXMvbWlwcy1vcGMuYworaW5kZXggMmMzYmJhZC4uOTc4NWE3ZSAxMDA2NDQKKy0tLSBhL29wY29kZXMvbWlwcy1vcGMuYworKysrIGIvb3Bjb2Rlcy9taXBzLW9wYy5jCitAQCAtMzE5LDcgKzMxOSw4IEBAIGRlY29kZV9taXBzX29wZXJhbmQgKGNvbnN0IGNoYXIgKnApCisgI2RlZmluZSBJT0NUCShJTlNOX09DVEVPTiB8IElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMikKKyAjZGVmaW5lIElPQ1RQCShJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCisgI2RlZmluZSBJT0NUMglJTlNOX09DVEVPTjIKKy0jZGVmaW5lIFhMUiAgICAgSU5TTl9YTFIKKysjZGVmaW5lIFhMUglJTlNOX1hMUgorKyNkZWZpbmUgWExQCUlOU05fWExQCisgI2RlZmluZSBJVklSVAlBU0VfVklSVAorICNkZWZpbmUgSVZJUlQ2NAlBU0VfVklSVDY0CisgCitAQCAtOTU2LDYgKzk1Nyw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImNsbyIsCQkJIlUscyIsCQkweDcwMDAwMDIxLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTMyfE41NSwJMCwJSTM3IH0sCisgeyJjbHoiLAkJCSJkLHMiLAkJMHgwMDAwMDA1MCwgMHhmYzFmMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUkzNywJCTAsCTAgfSwKKyB7ImNseiIsCQkJIlUscyIsCQkweDcwMDAwMDIwLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTMyfE41NSwJMCwJSTM3IH0sCisreyJjcmMiLAkJCSJkLHMsdCIsCTB4NzAwMDAwMWMsIDB4ZmMwMDA3ZmYsCVdSXzF8UkRfMnxSRF8zLAkwLAkJWExQLCAJCTAsCTAgfSwKKyAvKiBjdGMwIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLiAgKi8KKyB7ImN0YzEiLAkJInQsRyIsCQkweDQ0YzAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0NDfENNLAkJMCwJCUkxLAkJMCwJMCB9LAorIHsiY3RjMSIsCQkidCxTIiwJCTB4NDRjMDAwMDAsIDB4ZmZlMDA3ZmYsCVJEXzF8V1JfQ0N8Q00sCQkwLAkJSTEsCQkwLAkwIH0sCitAQCAtOTg4LDEyICs5OTAsMTMgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsiZGFkZGl1IiwJCSJ0LHIsaiIsCTB4NjQwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfMiwJCTAsCQlJMywJCTAsCTAgfSwKKyB7ImRhZGR1IiwJCSJkLHYsdCIsCTB4MDAwMDAwMmQsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zLAkJMCwJCUkzLAkJMCwJMCB9LAorIHsiZGFkZHUiLAkJInQscixJIiwJMCwgICAgKGludCkgTV9EQUREVV9JLAlJTlNOX01BQ1JPLAkJMCwJCUkzLAkJMCwJMCB9LAorLXsiZGFkZHdjIiwJCSJkLHMsdCIsIAkweDcwMDAwMDM4LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfM3xXUl9DMHxSRF9DMCwgMCwJCVhMUiwJCTAsCTAgfSwKKyt7ImRhZGR3YyIsCQkiZCxzLHQiLCAJMHg3MDAwMDAzOCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yfFJEXzN8V1JfQzB8UkRfQzAsIDAsCQlYTFJ8WExQLAkwLAkwIH0sCisgeyJkYnJlYWsiLAkJIiIsCQkweDcwMDAwMDNmLCAweGZmZmZmZmZmLAkwLAkJCTAsCQlONSwJCTAsCTAgfSwKKyB7ImRjbG8iLAkJImQscyIsCQkweDAwMDAwMDUzLCAweGZjMWYwN2ZmLCBXUl8xfFJEXzIsCQkwLAkJSTY5LAkJMCwJMCB9LAorIHsiZGNsbyIsCQkiVSxzIiwJIAkweDcwMDAwMDI1LCAweGZjMDAwN2ZmLCBXUl8xfFJEXzIsIAkwLAkJSTY0fE41NSwJMCwJSTY5IH0sCisgeyJkY2x6IiwJCSJkLHMiLAkJMHgwMDAwMDA1MiwgMHhmYzFmMDdmZiwgV1JfMXxSRF8yLAkJMCwJCUk2OSwJCTAsCTAgfSwKKyB7ImRjbHoiLAkJIlUscyIsCSAJMHg3MDAwMDAyNCwgMHhmYzAwMDdmZiwgV1JfMXxSRF8yLCAJMCwJCUk2NHxONTUsCTAsCUk2OSB9LAorK3siZGNyYyIsCQkiZCxzLHQiLAkweDcwMDAwMDFkLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJMCwJCVhMUCwgCQkwLAkwIH0sCisgLyogZGN0ciBhbmQgZGN0dyBhcmUgdXNlZCBvbiB0aGUgcjUwMDAuICAqLworIHsiZGN0ciIsCQkibyhiKSIsCSAJMHhiYzA1MDAwMCwgMHhmYzFmMDAwMCwgUkRfMiwJCQkwLAkJSTMsCQkwLAkwIH0sCisgeyJkY3R3IiwJCSJvKGIpIiwJCTB4YmMwOTAwMDAsIDB4ZmMxZjAwMDAsIFJEXzIsCQkJMCwJCUkzLAkJMCwJMCB9LAorQEAgLTEwNjUsNiArMTA2OCw3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7ImRtZmMwIiwJCSJ0LEcsSCIsCTB4NDAyMDAwMDAsIDB4ZmZlMDA3ZjgsCVdSXzF8UkRfQzB8TEMsCQkwLAkJSTY0LAkJMCwJMCB9LAorIHsiZG1mZ2MwIiwJCSJ0LEciLAkJMHg0MDYwMDEwMCwgMHhmZmUwMDdmZiwgV1JfMXxSRF9DMHxMQywJCTAsCQkwLAkJSVZJUlQ2NCwgMCB9LAorIHsiZG1mZ2MwIiwJCSJ0LEcsSCIsCTB4NDA2MDAxMDAsIDB4ZmZlMDA3ZjgsIFdSXzF8UkRfQzB8TEMsCQkwLAkJMCwJCUlWSVJUNjQsIDAgfSwKKyt7ImRtZnVyIiwJCSJ0LGQiLAkJMHg3MDAwMDAxZSwgMHhmZmUwMDdmZiwgV1JfMSwJCQkwLAkJWExQLAkJMCwJMCB9LAorIHsiZG10IiwJCQkiIiwJCTB4NDE2MDBiYzEsIDB4ZmZmZmZmZmYsIFRSQVAsCQkJMCwJCTAsCQlNVDMyLAkwIH0sCisgeyJkbXQiLAkJCSJ0IiwJCTB4NDE2MDBiYzEsIDB4ZmZlMGZmZmYsIFdSXzF8VFJBUCwJCTAsCQkwLAkJTVQzMiwJMCB9LAorIHsiZG10YzAiLAkJInQsRyIsCQkweDQwYTAwMDAwLCAweGZmZTAwN2ZmLAlSRF8xfFdSX0MwfFdSX0NDfENNLAkwLAkJSTMsCQkwLAlFRSB9LAorQEAgLTEwODAsNiArMTA4NCw4IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyAvKiBkbWZjMyBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSB0YWJsZS4gICovCisgLyogZG10YzMgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuICAqLworIHsiZG11aCIsCQkiZCxzLHQiLAkweDAwMDAwMGRjLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJNjksCQkwLAkwIH0sCisreyJkbXR1ciIsCQkidCxkIiwJCTB4NzAwMDAwMWYsIDB4ZmZlMDA3ZmYsCVJEXzEsCQkJMCwJCVhMUCwJCTAsCTAgfSwKKyt7ImRtdWwiLAkJImQscyx0IiwJMHg3MDAwMDAwNiwgMHhmYzAwMDdmZiwJV1JfMXxSRF8yfFJEXzMsCQkwLAkJWExQLAkJMCwJMCB9LAorIHsiZG11bCIsCQkiZCxzLHQiLAkweDAwMDAwMDljLCAweGZjMDAwN2ZmLCBXUl8xfFJEXzJ8UkRfMywJCTAsCQlJNjksCQkwLAkwIH0sCisgeyJkbXVsIiwJCSJkLHYsdCIsCTB4NzAwMDAwMDMsIDB4ZmMwMDA3ZmYsIFdSXzF8UkRfMnxSRF8zfFdSX0hJTE8sCTAsCQlJT0NULAkJMCwJMCB9LAorIHsiZG11bCIsCQkiZCx2LHQiLAkwLCAgICAoaW50KSBNX0RNVUwsCUlOU05fTUFDUk8sCQkwLAkJSTMsCQkwLAlNMzJ8STY5IH0sCitAQCAtMTIyOSw5ICsxMjM1LDkgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsibGQiLAkJCSJzLC1iKCtSKSIsCTB4ZWMxODAwMDAsIDB4ZmMxYzAwMDAsIFdSXzEsCQkJUkRfcGMsCQlJNjksCQkwLAkwIH0sCisgeyJsZCIsCQkJInQsQShiKSIsCTAsICAgIChpbnQpIE1fTERfQUIsCUlOU05fTUFDUk8sCQkwLAkJSTEsCQkwLAkwIH0sCisgeyJsZCIsCQkJInQsbyhiKSIsCTB4ZGMwMDAwMDAsIDB4ZmMwMDAwMDAsIFdSXzF8UkRfM3xMTSwJCTAsCQlJMywJCTAsCTAgfSwKKy17ImxkYWRkdyIsCQkidCxiIiwJCTB4NzAwMDAwMTAsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJsZGFkZHd1IiwJCSJ0LGIiLAkJMHg3MDAwMDAxMSwgMHhmYzAwZmZmZiwJTU9EXzF8UkRfMnxMTXxTTSwJMCwJCVhMUiwJCTAsCTAgfSwKKy17ImxkYWRkZCIsCQkidCxiIiwJCTB4NzAwMDAwMTIsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisreyJsZGFkZHciLAkJInQsYiIsCQkweDcwMDAwMDEwLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7ImxkYWRkd3UiLAkJInQsYiIsCQkweDcwMDAwMDExLCAweGZjMDBmZmZmLAlNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7ImxkYWRkZCIsCQkidCxiIiwJCTB4NzAwMDAwMTIsIDB4ZmMwMGZmZmYsCU1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibGRjMSIsCQkiVCxvKGIpIiwJMHhkNDAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfENMRHxGUF9ELAkwLAkJSTIsCQkwLAlTRiB9LAorIHsibGRjMSIsCQkiRSxvKGIpIiwJMHhkNDAwMDAwMCwgMHhmYzAwMDAwMCwgV1JfMXxSRF8zfENMRHxGUF9ELAkwLAkJSTIsCQkwLAlTRiB9LAorIHsibGRjMSIsCQkiVCxBKGIpIiwJMCwgICAgKGludCkgTV9MREMxX0FCLAlJTlNOX01BQ1JPLAkJSU5TTjJfTV9GUF9ELAlJMiwJCTAsCVNGIH0sCitAQCAtMTM5Niw3ICsxNDAyLDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsibWZsbyIsCQkiZCw5IiwJCTB4MDAwMDAwMTIsIDB4ZmY5ZjA3ZmYsIFdSXzF8UkRfTE8sCQkwLAkJMCwJCUQzMiwJMCB9LAorIHsibWZsbzEiLAkJImQiLAkJMHg3MDAwMDAxMiwgMHhmZmZmMDdmZiwJV1JfMXxSRF9MTywJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im1mbGh4dSIsCQkiZCIsCQkweDAwMDAwMDUyLCAweGZmZmYwN2ZmLAlXUl8xfE1PRF9ISUxPLAkJMCwJCTAsCQlTTVQsCTAgfSwKKy17Im1mY3IiLAkJInQscyIsCQkweDcwMDAwMDE4LCAweGZjMDBmZmZmLCBXUl8xfFJEXzIsCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibWZjciIsCQkidCxzIiwJCTB4NzAwMDAwMTgsIDB4ZmMwMGZmZmYsIFdSXzEsCQkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7Im1mc2EiLAkJImQiLAkJMHgwMDAwMDAyOCwgMHhmZmZmMDdmZiwJV1JfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtaW4ub2IiLAkJIlgsWSxRIiwJMHg3ODAwMDAwNiwgMHhmYzIwMDAzZiwJV1JfMXxSRF8yfFJEXzN8RlBfRCwJMCwJCVNCMSwJCU1YLAkwIH0sCisgeyJtaW4ub2IiLAkJIkQsUyxRIiwJMHg0ODAwMDAwNiwgMHhmYzIwMDAzZiwJV1JfMXxSRF8yfFJEXzN8RlBfRCwJMCwJCU41NCwJCTAsCTAgfSwKK0BAIC0xNDQxLDEwICsxNDQ3LDEzIEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyAvKiBtb3ZlIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHRhYmxlLiAgKi8KKyB7Im1zZ24ucWgiLAkJIlgsWSxRIiwJMHg3ODIwMDAwMCwgMHhmYzIwMDAzZiwJV1JfMXxSRF8yfFJEXzN8RlBfRCwJMCwJCTAsCQlNWCwJMCB9LAorIHsibXNnc25kIiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHU05ELAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyt7Im1zZ3NuZHMiLAkJImQsdCIsCQkweDRhMDAwMDAxLCAweGZmZTAwN2ZmLAlXUl8xfFJEXzJ8UkRfQzB8V1JfQzAsCTAsCQlYTFAsCQkwLAkwIH0sCisgeyJtc2dsZCIsCQkiIiwgCQkwLCAgICAoaW50KSBNX01TR0xELAlJTlNOX01BQ1JPLAkJMCwJCVhMUiwJCTAsCTAgfSwKKyB7Im1zZ2xkIiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHTERfVCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisteyJtc2d3YWl0IiwJCSIiLCAJCTAsICAgIChpbnQpIE1fTVNHV0FJVCwJSU5TTl9NQUNSTywJCTAsCQlYTFIsCQkwLAkwIH0sCisteyJtc2d3YWl0IiwJCSJ0IiwJCTAsICAgIChpbnQpIE1fTVNHV0FJVF9ULElOU05fTUFDUk8sCQkwLAkJWExSLAkJMCwJMCB9LAorK3sibXNnbGRzIiwJCSJkLHQiLAkJMHg0YTAwMDAwMiwgMHhmZmUwMDdmZiwJV1JfMXxSRF8yfFJEX0MwfFdSX0MwLAkwLAkJWExQLAkJMCwJMCB9LAorK3sibXNnd2FpdCIsCQkiIiwJCTAsICAgIChpbnQpIE1fTVNHV0FJVCwgIElOU05fTUFDUk8sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sibXNnd2FpdCIsCQkidCIsCQkwLCAgICAoaW50KSBNX01TR1dBSVRfVCxJTlNOX01BQ1JPLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7Im1zZ3N5bmMiLAkJIiIsCQkweDRhMDAwMDA0LCAweGZmZmZmZmZmLDAsCQkJMCwJCVhMUCwJCTAsCTAgfSwKKyB7Im1zdWIuZCIsCQkiRCxSLFMsVCIsCTB4NGMwMDAwMjksIDB4ZmMwMDAwM2YsIFdSXzF8UkRfMnxSRF8zfFJEXzR8RlBfRCwgMCwJCUk0XzMzLAkJMCwJSTM3IH0sCisgeyJtc3ViLmQiLAkJIkQsUyxUIiwJMHg0NjIwMDAxOSwgMHhmZmUwMDAzZiwJV1JfMXxSRF8yfFJEXzN8RlBfRCwJMCwJCUlMMkUsCQkwLAkwIH0sCisgeyJtc3ViLmQiLAkJIkQsUyxUIiwJMHg3MjIwMDAxOSwgMHhmZmUwMDAzZiwJV1JfMXxSRF8yfFJEXzN8RlBfRCwJMCwJCUlMMkYsCQkwLAkwIH0sCitAQCAtMTQ5NCw3ICsxNTAzLDcgQEAgY29uc3Qgc3RydWN0IG1pcHNfb3Bjb2RlIG1pcHNfYnVpbHRpbl9vcGNvZGVzW10gPQorIHsibXRsbyIsCQkicyw3IiwJCTB4MDAwMDAwMTMsIDB4ZmMxZmU3ZmYsIFJEXzF8V1JfTE8sCQkwLAkJMCwJCUQzMiwJMCB9LAorIHsibXRsbzEiLAkJInMiLAkJMHg3MDAwMDAxMywgMHhmYzFmZmZmZiwJUkRfMXxXUl9MTywJCTAsCQlFRSwJCTAsCTAgfSwKKyB7Im10bGh4IiwJCSJzIiwJCTB4MDAwMDAwNTMsIDB4ZmMxZmZmZmYsCVJEXzF8TU9EX0hJTE8sCQkwLAkJMCwJCVNNVCwJMCB9LAorLXsibXRjciIsCQkidCxzIiwJCTB4NzAwMDAwMTksIDB4ZmMwMGZmZmYsIFJEXzF8UkRfMiwJCTAsCQlYTFIsCQkwLAkwIH0sCisreyJtdGNyIiwJCSJ0LHMiLAkJMHg3MDAwMDAxOSwgMHhmYzAwZmZmZiwgUkRfMSwJCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorIHsibXRtMCIsCQkicyIsCQkweDcwMDAwMDA4LCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorIHsibXRtMSIsCQkicyIsCQkweDcwMDAwMDBjLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorIHsibXRtMiIsCQkicyIsCQkweDcwMDAwMDBkLCAweGZjMWZmZmZmLCBSRF8xLAkJCTAsCQlJT0NULAkJMCwJMCB9LAorQEAgLTE5MjQsOSArMTkzMyw5IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3Bjb2Rlc1tdID0KKyB7InN1eGMxIiwJCSJTLHQoYikiLAkweDRjMDAwMDBkLCAweGZjMDAwN2ZmLCBSRF8xfFJEXzJ8UkRfM3xTTXxGUF9ELAkwLAkJSTVfMzN8TjU1LAkwLAlJMzd9LAorIHsic3ciLAkJCSJ0LG8oYikiLAkweGFjMDAwMDAwLCAweGZjMDAwMDAwLAlSRF8xfFJEXzN8U00sCQkwLAkJSTEsCQkwLAkwIH0sCisgeyJzdyIsCQkJInQsQShiKSIsCTAsICAgIChpbnQpIE1fU1dfQUIsCUlOU05fTUFDUk8sCQkwLAkJSTEsCQkwLAkwIH0sCisteyJzd2FwdyIsCQkidCxiIiwJCTB4NzAwMDAwMTQsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8TE18U00sCTAsCQlYTFIsCQkwLAkwIH0sCisteyJzd2Fwd3UiLAkJInQsYiIsCQkweDcwMDAwMDE1LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorLXsic3dhcGQiLAkJInQsYiIsCQkweDcwMDAwMDE2LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfExNfFNNLAkwLAkJWExSLAkJMCwJMCB9LAorK3sic3dhcHciLAkJInQsYiIsCQkweDcwMDAwMDE0LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyt7InN3YXB3dSIsCQkidCxiIiwJCTB4NzAwMDAwMTUsIDB4ZmMwMGZmZmYsIE1PRF8xfFJEXzJ8U00sCQkwLAkJWExSfFhMUCwJMCwJMCB9LAorK3sic3dhcGQiLAkJInQsYiIsCQkweDcwMDAwMDE2LCAweGZjMDBmZmZmLCBNT0RfMXxSRF8yfFNNLAkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7InN3YzAiLAkJIkUsbyhiKSIsCTB4ZTAwMDAwMDAsIDB4ZmMwMDAwMDAsCVJEXzN8UkRfQzB8U00sCQkwLAkJSTEsCQkwLAlJT0NUfElPQ1RQfElPQ1QyfEkzNyB9LAorIHsic3djMCIsCQkiRSxBKGIpIiwJMCwgICAgKGludCkgTV9TV0MwX0FCLAlJTlNOX01BQ1JPLAkJMCwJCUkxLAkJMCwJSU9DVHxJT0NUUHxJT0NUMnxJMzcgfSwKKyB7InN3YzEiLAkJIlQsbyhiKSIsCTB4ZTQwMDAwMDAsIDB4ZmMwMDAwMDAsCVJEXzF8UkRfM3xTTXxGUF9TLAkwLAkJSTEsCQkwLAkwIH0sCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDEzLUZpeC1hbi1pbnRlcm5hbC1lcnJvci1pbi1kb19wcmludF90b19tYXBmaWxlLXNlZW4td2kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTAxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxMy1GaXgtYW4taW50ZXJuYWwtZXJyb3ItaW4tZG9fcHJpbnRfdG9fbWFwZmlsZS1zZWVuLXdpLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gOGU4Zjc3ZWMyYjYyNjJlN2QxMGFmNTQ3MDBjMzQwMTczZDk1NzI2NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI3IEZlYiAyMDE1IDA5OjA1OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMTNdIEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiBkb19wcmludF90b19tYXBmaWxlIHNlZW4gd2l0aAorIGdvbGQgb24gYXJtCisKK1RoaXMgaXMgZHVlIHRvIG1pc3NpbmcgaW1wbGVtZW50YXRpb24gb2YgZG9fcHJpbnRfdG9fbWFwZmlsZSBmb3IKK2F0cnJpYnV0ZWEgc2VjdGlvbiAoQVJNLmF0dHJpYnV0ZXMpLCBpdCBzdGFydGVkIHRvIHNob3cgdXAgYWZ0ZXIgZml4Citmb3IgUFIgZ29sZC8xNjk4MCB3YXMgaW5zdGFsbGVkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCistLS0KKyBnb2xkL2F0dHJpYnV0ZXMuaCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dvbGQvYXR0cmlidXRlcy5oIGIvZ29sZC9hdHRyaWJ1dGVzLmgKK2luZGV4IDJhYTdhNzguLjNkMTI2ZTYgMTAwNjQ0CistLS0gYS9nb2xkL2F0dHJpYnV0ZXMuaAorKysrIGIvZ29sZC9hdHRyaWJ1dGVzLmgKK0BAIC0zODcsNiArMzg3LDEwIEBAIGNsYXNzIE91dHB1dF9hdHRyaWJ1dGVzX3NlY3Rpb25fZGF0YSA6IHB1YmxpYyBPdXRwdXRfc2VjdGlvbl9kYXRhCisgICB7IH0KKyAKKyAgcHJvdGVjdGVkOgorKyAgLy8gV3JpdGUgdG8gYSBtYXAgZmlsZS4KKysgIHZvaWQKKysgIGRvX3ByaW50X3RvX21hcGZpbGUoTWFwZmlsZSogbWFwZmlsZSkgY29uc3QKKysgIHsgbWFwZmlsZS0+cHJpbnRfb3V0cHV0X2RhdGEodGhpcywgXygiKiogYXR0cmlidXRlcyIpKTsgfQorICAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIG91dHB1dCBmaWxlLgorICAgdm9pZAorICAgZG9fd3JpdGUoT3V0cHV0X2ZpbGUqKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTQtZ29sZC1hcm0tU2tpcC1waWMtY2hlY2stZm9yLVJfQVJNX1JFTDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjQzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvMDAxNC1nb2xkLWFybS1Ta2lwLXBpYy1jaGVjay1mb3ItUl9BUk1fUkVMMzIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorRnJvbSBlYmUyNmQ4NTU0NTJkMDdlMDE1MmJkNzhkNDk2NjQ3NWQyZGUxZGU4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgNSBNYXIgMjAxNSAwNzozMDozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBnb2xkL2FybTogU2tpcCBwaWMgY2hlY2sgZm9yIFJfQVJNX1JFTDMyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBnb2xkL2FybS5jYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvZ29sZC9hcm0uY2MgYi9nb2xkL2FybS5jYworaW5kZXggNmM0NzJiYi4uZmI4MDQzNSAxMDA2NDQKKy0tLSBhL2dvbGQvYXJtLmNjCisrKysgYi9nb2xkL2FybS5jYworQEAgLTc4MjksNiArNzgyOSw3IEBAIFRhcmdldF9hcm08YmlnX2VuZGlhbj46OlNjYW46OmNoZWNrX25vbl9waWMoUmVsb2JqKiBvYmplY3QsCisgICAgIGNhc2UgZWxmY3BwOjpSX0FSTV9UTFNfRFRQTU9EMzI6CisgICAgIGNhc2UgZWxmY3BwOjpSX0FSTV9UTFNfRFRQT0ZGMzI6CisgICAgIGNhc2UgZWxmY3BwOjpSX0FSTV9UTFNfVFBPRkYzMjoKKysgICAgY2FzZSBlbGZjcHA6OlJfQVJNX1JFTDMyOgorICAgICAgIHJldHVybjsKKyAKKyAgICAgZGVmYXVsdDoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzLzAwMTUtRml4LWR5bmFtaWMtbGlzdC1zby10aGF0LXN5bWJvbHMtbm90LWluLXRoZS1saXN0LWFyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU0OWMzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy8wMDE1LUZpeC1keW5hbWljLWxpc3Qtc28tdGhhdC1zeW1ib2xzLW5vdC1pbi10aGUtbGlzdC1hcmUucGF0Y2gKQEAgLTAsMCArMSwxMzEgQEAKK0Zyb20gZTljMWJkYWQyNjljMGMzMzUyZWViY2M5NDgxZWQ2NTE0NDAwMWIwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcnkgQ291dGFudCA8Y2NvdXRhbnRAZ29vZ2xlLmNvbT4KK0RhdGU6IE1vbiwgMTYgRmViIDIwMTUgMjI6MTU6MTIgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IC0tZHluYW1pYy1saXN0IHNvIHRoYXQgc3ltYm9scyBub3QgaW4gdGhlIGxpc3QgYXJlIHN0aWxsCisgZXhwb3J0ZWQuCisKK0luIFBSIDEzNTc3LCB0aGUgY29tcGxhaW50IHdhcyB0aGF0IC1Cc3ltYm9saWMgd2FzIG92ZXJyaWRpbmcgdGhlIGJpbmRpbmcKK2JlaGF2aW9yIGZvciBzeW1ib2xzIGxpc3RlZCBpbiB0aGUgLS1keW5hbWljLWxpc3QgYnkgc2V0dGluZyB0aGUgRFRfU1lNQk9MSUMKK3RhZyBpbiB0aGUgZHluYW1pYyB0YWJsZS4gSW4gcmVhZGluZyB0aGUgR251IGxkIG1hbnVhbCwgSSBkZWNpZGVkIHRoYXQKKy0tZHluYW1pYy1saXN0IHNob3VsZCBiZSBtdXR1YWxseSBleGNsdXNpdmUgb2YgLUJzeW1ib2xpYywgYW5kIG1vZGlmaWVkCitnb2xkIHNvIHRoYXQgLS1keW5hbWljLWxpc3Qgd291bGQgdHJlYXQgc3ltYm9scyBsaXN0ZWQgYXMgcHJlZW1wdGlibGUsCithbmQgYWxsIG90aGVyIHN5bWJvbHMgYXMgaW50ZXJuYWxseSBib3VuZC4gSSB3YXMgd3JvbmcuCisKK1BSIDE2OTkyIHNob3dzIHRoYXQgd2l0aCAtLWR5bmFtaWMtbGlzdCAoYW5kIG5vdCAtQnN5bWJvbGljKSwgYSBzeW1ib2wKK25vdCBsaXN0ZWQgaW4gdGhlIGR5bmFtaWMgbGlzdCBpcyBiZWluZyBpbnRlcm5hbGx5IGJvdW5kIHdpdGhpbiB0aGUKK3NoYXJlZCBsaWJyYXJ5LCBidXQgYmVjYXVzZSBpdCdzIHN0aWxsIGluIHRoZSBkeW5hbWljIHN5bWJvbCB0YWJsZSwgd2UKK2V4cG9zZSBpdCB0byBhIENPUFkgcmVsb2NhdGlvbiwgYW5kIHRoaW5ncyBnbyByZWFsbHkgYmFkIGZyb20gdGhlcmUuCisKKyhJIGNhbiByZXByb2R1Y2UgdGhlIHNhbWUgZmFpbHVyZSwgc2ltcGx5IGJ5IHR1cm5pbmcgb24gLUJzeW1ib2xpYy1mdW5jdGlvbnMKK3dpdGggdGhlIEdudSBsaW5rZXIuIEV2ZW4gdGhvdWdoIHRoZSBzeW1ib2wgaXMgYm91bmQgaW50ZXJuYWxseSwgaXQncworc3RpbGwgZXhwb3J0ZWQgdG8gdGhlIGR5bmFtaWMgc3ltYm9sIHRhYmxlLCBhbmQgaXMgZXhwb3NlZCB0byBhIENPUFkKK3JlbG9jYXRpb24uKQorCitJJ3ZlIGJhY2tlZCBvdXQgcGFydCBvZiB0aGUgZml4IGZvciBQUiAxMzU3NywgYW5kIC1Cc3ltYm9saWMgKG9yCistQnN5bWJvbGljLWZ1bmN0aW9ucykgY2FuIG5vdyBiZSB1c2VkIHdpdGggLS1keW5hbWljLWxpc3QsIGJ1dCBpZiB0aGUKK3R3byBhcmUgdXNlZCB0b2dldGhlciwgd2UgZG8gbm90IHNldCBEVF9TWU1CT0xJQyBvciBERl9TWU1CT0xJQworKHRoaXMgbWF0Y2hlcyBHbnUgbGQgYmVoYXZpb3IpLiBXZSBub3cgdHJlYXQgc3ltYm9scyBsaXN0ZWQgaW4gdGhlCitkeW5hbWljIGxpc3QgYXMgcHJlbXB0aWJsZSwgYnV0IHdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IHRyZWF0IHN5bWJvbHMKK25vdCBsaXN0ZWQgdGhlcmUgYXMgbm9uLXByZW1wdGlibGUuCisKK2dvbGQvCisJUFIgZ29sZC8xMzU3NworCVBSIGdvbGQvMTY5OTIKKwkqIGxheW91dC5jYyAoTGF5b3V0OjpmaW5pc2hfZHluYW1pY19zZWN0aW9uKTogRG9uJ3Qgc2V0IERUX1NZTUJPTElDIG9yCisJREZfU1lNQk9MSUMgaWYgLS1keW5hbWljLWxpc3Qgb3B0aW9uIGlzIHVzZWQuCisJKiBvcHRpb25zLmNjIChHZW5lcmFsX29wdGlvbnM6OmZpbmFsaXplKTogLS1keW5hbWljLWxpc3QgaXMgbm90CisJbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggLUJzeW1ib2xpYy4KKwkqIHN5bXRhYi5oIChTeW1ib2w6OmlzX3ByZWVtcHRpYmxlKTogRG9uJ3QgZXhjbHVkZSBkeW5hbWljIHN5bWJvbHMgbm90CisJbGlzdGVkIGluIC0tZHluYW1pYy1saXN0LgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChkeW5hbWljX2xpc3RfbGliMi5zbyk6IEFkZAorCS1Cc3ltYm9saWMtZnVuY3Rpb25zLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBnb2xkL0NoYW5nZUxvZyAgICAgICAgICAgICB8IDE0ICsrKysrKysrKysrKysrCisgZ29sZC9sYXlvdXQuY2MgICAgICAgICAgICAgfCAgMyArKy0KKyBnb2xkL29wdGlvbnMuY2MgICAgICAgICAgICB8ICA3IC0tLS0tLS0KKyBnb2xkL3N5bXRhYi5oICAgICAgICAgICAgICB8ICA2ICsrLS0tLQorIGdvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtIHwgIDIgKy0KKyBnb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiB8ICAyICstCisgNiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dvbGQvbGF5b3V0LmNjIGIvZ29sZC9sYXlvdXQuY2MKK2luZGV4IGJjZGFhYzguLjc4MzY2NDAgMTAwNjQ0CistLS0gYS9nb2xkL2xheW91dC5jYworKysrIGIvZ29sZC9sYXlvdXQuY2MKK0BAIC00ODczLDcgKzQ4NzMsOCBAQCBMYXlvdXQ6OmZpbmlzaF9keW5hbWljX3NlY3Rpb24oY29uc3QgSW5wdXRfb2JqZWN0cyogaW5wdXRfb2JqZWN0cywKKyAgICAgZmxhZ3MgfD0gZWxmY3BwOjpERl9TVEFUSUNfVExTOworICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5vcmlnaW4oKSkKKyAgICAgZmxhZ3MgfD0gZWxmY3BwOjpERl9PUklHSU47CistICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLkJzeW1ib2xpYygpKQorKyAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5Cc3ltYm9saWMoKQorKyAgICAgICYmICFwYXJhbWV0ZXJzLT5vcHRpb25zKCkuaGF2ZV9keW5hbWljX2xpc3QoKSkKKyAgICAgeworICAgICAgIGZsYWdzIHw9IGVsZmNwcDo6REZfU1lNQk9MSUM7CisgICAgICAgLy8gQWRkIERUX1NZTUJPTElDIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbG9hZGVycy4KK2RpZmYgLS1naXQgYS9nb2xkL29wdGlvbnMuY2MgYi9nb2xkL29wdGlvbnMuY2MKK2luZGV4IDdlYjhmMjcuLjdmMWY2OWUgMTAwNjQ0CistLS0gYS9nb2xkL29wdGlvbnMuY2MKKysrKyBiL2dvbGQvb3B0aW9ucy5jYworQEAgLTEyMDAsMTMgKzEyMDAsNiBAQCBHZW5lcmFsX29wdGlvbnM6OmZpbmFsaXplKCkKKyAgIC8vIGluIHRoZSBwYXRoLCBhcyBhcHByb3ByaWF0ZS4KKyAgIHRoaXMtPmFkZF9zeXNyb290KCk7CisgCistICAvLyAtLWR5bmFtaWMtbGlzdCBvdmVycmlkZXMgLUJzeW1ib2xpYyBhbmQgLUJzeW1ib2xpYy1mdW5jdGlvbnMuCistICBpZiAodGhpcy0+aGF2ZV9keW5hbWljX2xpc3QoKSkKKy0gICAgeworLSAgICAgIHRoaXMtPnNldF9Cc3ltYm9saWMoZmFsc2UpOworLSAgICAgIHRoaXMtPnNldF9Cc3ltYm9saWNfZnVuY3Rpb25zKGZhbHNlKTsKKy0gICAgfQorLQorICAgLy8gTm93IHRoYXQgd2UndmUgbm9ybWFsaXplZCB0aGUgb3B0aW9ucywgY2hlY2sgZm9yIGNvbnRyYWRpY3Rvcnkgb25lcy4KKyAgIGlmICh0aGlzLT5zaGFyZWQoKSAmJiB0aGlzLT5pc19zdGF0aWMoKSkKKyAgICAgZ29sZF9mYXRhbChfKCItc2hhcmVkIGFuZCAtc3RhdGljIGFyZSBpbmNvbXBhdGlibGUiKSk7CitkaWZmIC0tZ2l0IGEvZ29sZC9zeW10YWIuaCBiL2dvbGQvc3ltdGFiLmgKK2luZGV4IGFhMGNiNjguLjk0MTMzNjAgMTAwNjQ0CistLS0gYS9nb2xkL3N5bXRhYi5oCisrKysgYi9nb2xkL3N5bXRhYi5oCitAQCAtNjA0LDEwICs2MDQsOCBAQCBjbGFzcyBTeW1ib2wKKyAgICAgaWYgKHBhcmFtZXRlcnMtPm9wdGlvbnMoKS5pbl9keW5hbWljX2xpc3QodGhpcy0+bmFtZSgpKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKy0gICAgLy8gSWYgdGhlIHVzZXIgdXNlZCAtQnN5bWJvbGljIG9yIHByb3ZpZGVkIGEgLS1keW5hbWljLWxpc3Qgc2NyaXB0LAorLSAgICAvLyB0aGVuIG5vdGhpbmcgKGVsc2UpIGlzIHByZWVtcHRpYmxlLgorLSAgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLkJzeW1ib2xpYygpCistICAgICAgICB8fCBwYXJhbWV0ZXJzLT5vcHRpb25zKCkuaGF2ZV9keW5hbWljX2xpc3QoKSkKKysgICAgLy8gSWYgdGhlIHVzZXIgdXNlZCAtQnN5bWJvbGljLCB0aGVuIG5vdGhpbmcgKGVsc2UpIGlzIHByZWVtcHRpYmxlLgorKyAgICBpZiAocGFyYW1ldGVycy0+b3B0aW9ucygpLkJzeW1ib2xpYygpKQorICAgICAgIHJldHVybiBmYWxzZTsKKyAKKyAgICAgLy8gSWYgdGhlIHVzZXIgdXNlZCAtQnN5bWJvbGljLWZ1bmN0aW9ucywgdGhlbiBmdW5jdGlvbnMgYXJlIG5vdAorZGlmZiAtLWdpdCBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmFtIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK2luZGV4IGY3NjdjMjEuLjdiNzNmOWQgMTAwNjQ0CistLS0gYS9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorKysrIGIvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK0BAIC0xNTE4LDcgKzE1MTgsNyBAQCBkeW5hbWljX2xpc3RfbGliMS5vOiBkeW5hbWljX2xpc3RfbGliMS5jYworIAkkKENYWENPTVBJTEUpIC1jIC1mcGljIC1vICRAICQ8CisgCisgZHluYW1pY19saXN0X2xpYjIuc286IGdjY3Rlc3RkaXIvbGQgZHluYW1pY19saXN0X2xpYjIubyAkKHNyY2RpcikvZHluYW1pY19saXN0XzIudAorLQkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCAtV2wsLS1keW5hbWljLWxpc3QsJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQgZHluYW1pY19saXN0X2xpYjIubworKwkkKENYWExJTkspIC1CZ2NjdGVzdGRpci8gLXNoYXJlZCAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKyBkeW5hbWljX2xpc3RfbGliMi5vOiBkeW5hbWljX2xpc3RfbGliMi5jYworIAkkKENYWENPTVBJTEUpIC1jIC1mcGljIC1vICRAICQ8CisgCitkaWZmIC0tZ2l0IGEvZ29sZC90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gYi9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgoraW5kZXggMjE3ZTQ3Mi4uYjRhZTNmZCAxMDA2NDQKKy0tLSBhL2dvbGQvdGVzdHN1aXRlL01ha2VmaWxlLmluCisrKysgYi9nb2xkL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorQEAgLTUzMTksNyArNTMxOSw3IEBAIHVuaW5zdGFsbC1hbToKKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorIEBHQ0NfVFJVRUBATkFUSVZFX0xJTktFUl9UUlVFQGR5bmFtaWNfbGlzdF9saWIyLnNvOiBnY2N0ZXN0ZGlyL2xkIGR5bmFtaWNfbGlzdF9saWIyLm8gJChzcmNkaXIpL2R5bmFtaWNfbGlzdF8yLnQKKy1AR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUAJJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC0tZHluYW1pYy1saXN0LCQoc3JjZGlyKS9keW5hbWljX2xpc3RfMi50IGR5bmFtaWNfbGlzdF9saWIyLm8KKytAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUAJJChDWFhMSU5LKSAtQmdjY3Rlc3RkaXIvIC1zaGFyZWQgLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zIC1XbCwtLWR5bmFtaWMtbGlzdCwkKHNyY2RpcikvZHluYW1pY19saXN0XzIudCBkeW5hbWljX2xpc3RfbGliMi5vCisgQEdDQ19UUlVFQEBOQVRJVkVfTElOS0VSX1RSVUVAZHluYW1pY19saXN0X2xpYjIubzogZHluYW1pY19saXN0X2xpYjIuY2MKKyBAR0NDX1RSVUVAQE5BVElWRV9MSU5LRVJfVFJVRUAJJChDWFhDT01QSUxFKSAtYyAtZnBpYyAtbyAkQCAkPAorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYWRkLXRodW5kZXJ4LXN1cHBvcnQtZm9yLWdhcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlscy9hZGQtdGh1bmRlcngtc3VwcG9ydC1mb3ItZ2FzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjg3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYWRkLXRodW5kZXJ4LXN1cHBvcnQtZm9yLWdhcy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgdGh1bmRlcnggc3VwcG9ydCB0byBnYXMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvYmludXRpbHMvMjAxNC0xMC9tc2cwMDE3MC5odG1sXQorCitTaWduZWQtb2ZmLWJ5OiBKYWdhZGVlc2ggS3Jpc2huYW5qYW5hcHBhIDxqa3Jpc2huYW5qYW5hcHBhQG12aXN0YS5jb20+CisKK0F1dGhvcjogQW5kcmV3IFBpbnNraSA8YXBpbnNraUBjYXZpdW0uY29tPgorRGF0ZTogTW9uLCAyMCBPY3QgMjAxNCAxMTo0Mjo1OCAtMDcwMAorCisgICAgVGhpcyBwYXRjaCBhZGRzIC1tY3B1PXRodW5kZXJ4IHN1cHBvcnQgdG8gZ2FzLgorCitkaWZmIC1OYXVycCBnaXRfb3JnL2dhcy9jb25maWcvdGMtYWFyY2g2NC5jIGdpdC9nYXMvY29uZmlnL3RjLWFhcmNoNjQuYworLS0tIGdpdF9vcmcvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMJMjAxNS0wOS0wNyAwMjoxMzo1MS45ODg5NzM1MjMgLTA3MDAKKysrKyBnaXQvZ2FzL2NvbmZpZy90Yy1hYXJjaDY0LmMJMjAxNS0wOS0wNyAwMjoxNToyMS43MDU5ODE1NDAgLTA3MDAKK0BAIC03MjA2LDYgKzcyMDYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFhcmNoNjRfY3B1X29wdGlvbl90CisgCQkJCSBBQVJDSDY0X0ZFQVRVUkVfQ1JDKSwgIkNvcnRleC1BNTcifSwKKyAgIHsiY29ydGV4LWE3MiIsIEFBUkNINjRfRkVBVFVSRSAoQUFSQ0g2NF9BUkNIX1Y4LAorIAkJCQkgIEFBUkNINjRfRkVBVFVSRV9DUkMpLCAiQ29ydGV4LUE3MiJ9LAorKyAgeyJ0aHVuZGVyeCIsCQlBQVJDSDY0X0FSQ0hfVjgsICJDYXZpdW0gVGh1bmRlclgifSwJCQkJICAKKyAgIHsiZXh5bm9zLW0xIiwgQUFSQ0g2NF9GRUFUVVJFIChBQVJDSDY0X0FSQ0hfVjgsCisgCQkJCSBBQVJDSDY0X0ZFQVRVUkVfQ1JDIHwgQUFSQ0g2NF9GRUFUVVJFX0NSWVBUTyksCisgCQkJCSAiU2Ftc3VuZyBFeHlub3MgTTEifSwKK2RpZmYgLU5hdXJwIGdpdF9vcmcvZ2FzL2RvYy9jLWFhcmNoNjQudGV4aSBnaXQvZ2FzL2RvYy9jLWFhcmNoNjQudGV4aQorLS0tIGdpdF9vcmcvZ2FzL2RvYy9jLWFhcmNoNjQudGV4aQkyMDE1LTA5LTA3IDAyOjEzOjUxLjk2OTk3MzUyMiAtMDcwMAorKysrIGdpdC9nYXMvZG9jL2MtYWFyY2g2NC50ZXhpCTIwMTUtMDktMDcgMDI6MTY6MDMuMzY0OTg1MjYyIC0wNzAwCitAQCAtNTgsNiArNTgsNyBAQCBvbiB0aGUgdGFyZ2V0IHByb2Nlc3Nvci4gIFRoZSBmb2xsb3dpbmcKKyBAY29kZXtjb3J0ZXgtYTUzfSwKKyBAY29kZXtjb3J0ZXgtYTU3fSwKKyBAY29kZXtjb3J0ZXgtYTcyfSwKKytAY29kZXt0aHVuZGVyeH0sCisgQGNvZGV7ZXh5bm9zLW0xfSwKKyBAY29kZXt4Z2VuZTF9LAorIGFuZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2JpbnV0aWxzLW9jdGVvbjMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHMvYmludXRpbHMtb2N0ZW9uMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA4YzBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2JpbnV0aWxzL2JpbnV0aWxzL2JpbnV0aWxzLW9jdGVvbjMucGF0Y2gKQEAgLTAsMCArMSwyNzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9naXQvZ2l0d2ViLmNnaT9wPWJpbnV0aWxzLWdkYi5naXQ7YT1jb21taXQ7aD0yYzYyOTg1NjU5ZGEyMWEzZmUxNjA2MmQyMTFhNzE1OGY3OWFkMmU5CisKK1NpZ25lZC1vZmYtQnk6IEFybWluIEt1c3RlciA8YWt1c3RlckBtdmlzdGEuY29tPgorCitJbmRleDogZ2l0L2JmZC9hcmNodXJlcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvYmZkL2FyY2h1cmVzLmMKKysrKyBnaXQvYmZkL2FyY2h1cmVzLmMKK0BAIC0xNzksNiArMTc5LDcgQEAgREVTQ1JJUFRJT04KKyAuI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbgkJNjUwMQorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9ucAkJNjYwMQorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMgkJNjUwMgorKy4jZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMwkJNjUwMworIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxyICAgICAgICAgICAgICA4ODc2ODIgICB7KiBkZWNpbWFsICdYTFInICAqfQorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNfeGxwICAgICAgICAgICAgICA4ODc2ODAgICB7KiBkZWNpbWFsICdYTFAnICAqfQorIC4jZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgorSW5kZXg6IGdpdC9iZmQvYmZkLWluMi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvYmZkL2JmZC1pbjIuaAorKysrIGdpdC9iZmQvYmZkLWluMi5oCitAQCAtMTk2OSw2ICsxOTY5LDcgQEAgZW51bSBiZmRfYXJjaGl0ZWN0dXJlCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbiAgICAgICAgICAgNjUwMQorICNkZWZpbmUgYmZkX21hY2hfbWlwc19vY3Rlb25wICAgICAgICAgIDY2MDEKKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiAgICAgICAgICA2NTAyCisrI2RlZmluZSBiZmRfbWFjaF9taXBzX29jdGVvbjMgICAgICAgICAgNjUwMworICNkZWZpbmUgYmZkX21hY2hfbWlwc194bHIgICAgICAgICAgICAgIDg4NzY4MiAgIC8qIGRlY2ltYWwgJ1hMUicgICovCisgI2RlZmluZSBiZmRfbWFjaF9taXBzX3hscCAgICAgICAgICAgICAgODg3NjgwICAgLyogZGVjaW1hbCAnWExQJyAgKi8KKyAjZGVmaW5lIGJmZF9tYWNoX21pcHNpc2EzMiAgICAgICAgICAgICAzMgorSW5kZXg6IGdpdC9iZmQvY3B1LW1pcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9jcHUtbWlwcy5jCisrKysgZ2l0L2JmZC9jcHUtbWlwcy5jCitAQCAtMTAyLDYgKzEwMiw3IEBAIGVudW0KKyAgIElfbWlwc29jdGVvbiwKKyAgIElfbWlwc29jdGVvbnAsCisgICBJX21pcHNvY3Rlb24yLAorKyAgSV9taXBzb2N0ZW9uMywKKyAgIElfeGxyLAorICAgSV9taWNyb21pcHMsCisgICBJX3hscAorQEAgLTE1Myw2ICsxNTQsNyBAQCBzdGF0aWMgY29uc3QgYmZkX2FyY2hfaW5mb190eXBlIGFyY2hfaW5mCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9uLCJtaXBzOm9jdGVvbiIsICBGQUxTRSwgTk4oSV9taXBzb2N0ZW9uKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9ucCwibWlwczpvY3Rlb24rIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb25wKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMiwibWlwczpvY3Rlb24yIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb24yKSksCisrICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfb2N0ZW9uMywibWlwczpvY3Rlb24zIiwgIEZBTFNFLCBOTihJX21pcHNvY3Rlb24zKSksCisgICBOICg2NCwgNjQsIGJmZF9tYWNoX21pcHNfeGxyLCAibWlwczp4bHIiLCAgICAgICBGQUxTRSwgTk4oSV94bHIpKSwKKyAgIE4gKDY0LCA2NCwgYmZkX21hY2hfbWlwc19taWNyb21pcHMsIm1pcHM6bWljcm9taXBzIixGQUxTRSxOTihJX21pY3JvbWlwcykpLAorICAgTiAoNjQsIDY0LCBiZmRfbWFjaF9taXBzX3hscCwgIm1pcHM6eGxwIiwgICAgICBGQUxTRSwgMCkKK0luZGV4OiBnaXQvYmZkL2VsZnh4LW1pcHMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2JmZC9lbGZ4eC1taXBzLmMKKysrKyBnaXQvYmZkL2VsZnh4LW1pcHMuYworQEAgLTY2MDQsNiArNjYwNCw5IEBAIF9iZmRfZWxmX21pcHNfbWFjaCAoZmxhZ3dvcmQgZmxhZ3MpCisgICAgIGNhc2UgRV9NSVBTX01BQ0hfTFMzQToKKyAgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc19sb29uZ3Nvbl8zYTsKKyAKKysgICAgY2FzZSBFX01JUFNfTUFDSF9PQ1RFT04zOgorKyAgICAgIHJldHVybiBiZmRfbWFjaF9taXBzX29jdGVvbjM7CisrCisgICAgIGNhc2UgRV9NSVBTX01BQ0hfT0NURU9OMjoKKyAgICAgICByZXR1cm4gYmZkX21hY2hfbWlwc19vY3Rlb24yOworIAorQEAgLTExODc4LDYgKzExODgxLDEwIEBAIG1pcHNfc2V0X2lzYV9mbGFncyAoYmZkICphYmZkKQorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT047CisgICAgICAgYnJlYWs7CisgCisrICAgIGNhc2UgYmZkX21hY2hfbWlwc19vY3Rlb24zOgorKyAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0UjIgfCBFX01JUFNfTUFDSF9PQ1RFT04zOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlIGJmZF9tYWNoX21pcHNfeGxyOgorICAgICAgIHZhbCA9IEVfTUlQU19BUkNIXzY0IHwgRV9NSVBTX01BQ0hfWExSOworICAgICAgIGJyZWFrOworQEAgLTE0NzczLDYgKzE0NzgwLDcgQEAgc3RydWN0IG1pcHNfbWFjaF9leHRlbnNpb24KKyBzdGF0aWMgY29uc3Qgc3RydWN0IG1pcHNfbWFjaF9leHRlbnNpb24gbWlwc19tYWNoX2V4dGVuc2lvbnNbXSA9CisgeworICAgLyogTUlQUzY0cjIgZXh0ZW5zaW9ucy4gICovCisrICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uMywgYmZkX21hY2hfbWlwc19vY3Rlb24yIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9uMiwgYmZkX21hY2hfbWlwc19vY3Rlb25wIH0sCisgICB7IGJmZF9tYWNoX21pcHNfb2N0ZW9ucCwgYmZkX21hY2hfbWlwc19vY3Rlb24gfSwKKyAgIHsgYmZkX21hY2hfbWlwc19vY3Rlb24sIGJmZF9tYWNoX21pcHNpc2E2NHIyIH0sCitJbmRleDogZ2l0L2dhcy9jb25maWcvdGMtbWlwcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZ2FzL2NvbmZpZy90Yy1taXBzLmMKKysrKyBnaXQvZ2FzL2NvbmZpZy90Yy1taXBzLmMKK0BAIC0zMDYsNyArMzA2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaWxlX2FzZV9leHBsaWNpdDsKKyB1bnNpZ25lZCBsb25nIG1pcHNfZ3BybWFzazsKKyB1bnNpZ25lZCBsb25nIG1pcHNfY3BybWFza1s0XTsKKyAKKy0vKiBUcnVlIGlmIGFueSBNSVBTMTYgY29kZSB3YXMgcHJvZHVjZWQuICAqLworKy8qIDJUcnVlIGlmIGFueSBNSVBTMTYgY29kZSB3YXMgcHJvZHVjZWQuICAqLworIHN0YXRpYyBpbnQgZmlsZV9hc2VfbWlwczE2OworIAorICNkZWZpbmUgSVNBX1NVUFBPUlRTX01JUFMxNkUgKG1pcHNfb3B0cy5pc2EgPT0gSVNBX01JUFMzMgkJXAorQEAgLTUxMCw3ICs1MTAsOCBAQCBzdGF0aWMgaW50IG1pcHNfMzJiaXRtb2RlID0gMDsKKyAjZGVmaW5lIENQVV9IQVNfUk9SKENQVSkJQ1BVX0hBU19EUk9SIChDUFUpCisgCisgLyogVHJ1ZSBpZiBDUFUgaXMgaW4gdGhlIE9jdGVvbiBmYW1pbHkgKi8KKy0jZGVmaW5lIENQVV9JU19PQ1RFT04oQ1BVKSAoKENQVSkgPT0gQ1BVX09DVEVPTiB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OUCB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OMikKKysjZGVmaW5lIENQVV9JU19PQ1RFT04oQ1BVKSAoKENQVSkgPT0gQ1BVX09DVEVPTiB8fCAoQ1BVKSA9PSBDUFVfT0NURU9OUCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKENQVSkgPT0gQ1BVX09DVEVPTjIgfHwgKENQVSkgPT0gQ1BVX09DVEVPTjMpCisgCisgLyogVHJ1ZSBpZiBDUFUgaGFzIHNlcS9zbmUgYW5kIHNlcWkvc25laSBpbnN0cnVjdGlvbnMuICAqLworICNkZWZpbmUgQ1BVX0hBU19TRVEoQ1BVKQkoQ1BVX0lTX09DVEVPTiAoQ1BVKSkKK0BAIC0xODY3Nyw2ICsxODY3OCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwc19jcHVfaW5mbyBtaXBzX2MKKyAgIHsgIm9jdGVvbiIsCSAgICAgIDAsIDAsCQkJSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OIH0sCisgICB7ICJvY3Rlb24rIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9PQ1RFT05QIH0sCisgICB7ICJvY3Rlb24yIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0UjIsIENQVV9PQ1RFT04yIH0sCisrICB7ICJvY3Rlb24zIiwgICAgICAgIDAsIEFTRV9WSVJUIHwgQVNFX1ZJUlQ2NCwgSVNBX01JUFM2NFIyLCBDUFVfT0NURU9OMyB9LAorIAorICAgLyogUk1JIFhsciAqLworICAgeyAieGxyIiwJICAgICAgMCwgMCwJCQlJU0FfTUlQUzY0LCAgIENQVV9YTFIgfSwKK0luZGV4OiBnaXQvZ2FzL2RvYy9jLW1pcHMudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2dhcy9kb2MvYy1taXBzLnRleGkKKysrKyBnaXQvZ2FzL2RvYy9jLW1pcHMudGV4aQorQEAgLTM4Miw2ICszODIsNyBAQCBsb29uZ3NvbjNhLAorIG9jdGVvbiwKKyBvY3Rlb24rLAorIG9jdGVvbjIsCisrb2N0ZW9uMywKKyB4bHIsCisgeGxwCisgQGVuZCBxdW90YXRpb24KK0luZGV4OiBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9taXBzLmV4cAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvbWlwcy5leHAKKysrKyBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9taXBzLmV4cAorQEAgLTExMDIsNiArMTEwMiw3IEBAIGlmIHsgW2lzdGFyZ2V0IG1pcHMqLSotdnh3b3JrcypdIH0geworICAgICBydW5fbGlzdF90ZXN0X2FyY2hlcyAib2N0ZW9uLWlsbCIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbl0KKyAgICAgcnVuX2R1bXBfdGVzdF9hcmNoZXMgIm9jdGVvbi1wcmVmIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgb2N0ZW9uXQorICAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAib2N0ZW9uMiIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG9jdGVvbjJdCisrICAgIHJ1bl9kdW1wX3Rlc3RfYXJjaGVzICJvY3Rlb24zIglbbWlwc19hcmNoX2xpc3RfbWF0Y2hpbmcgb2N0ZW9uM10KKyAKKyAgICAgcnVuX2R1bXBfdGVzdCAic21hcnRtaXBzIgorICAgICBydW5fZHVtcF90ZXN0X2FyY2hlcyAibWlwczMyLWRzcCIJW21pcHNfYXJjaF9saXN0X21hdGNoaW5nIG1pcHMzMnIyIFwKK0luZGV4OiBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9vY3Rlb24zLmQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBnaXQvZ2FzL3Rlc3RzdWl0ZS9nYXMvbWlwcy9vY3Rlb24zLmQKK0BAIC0wLDAgKzEsMjAgQEAKKysjb2JqZHVtcDogLWQgLXIgLS1zaG93LXJhdy1pbnNuCisrI25hbWU6IE1JUFMgb2N0ZW9uMyBpbnN0cnVjdGlvbnMKKysKKysuKjogK2ZpbGUgZm9ybWF0IC4qbWlwcy4qCisrCisrRGlzYXNzZW1ibHkgb2Ygc2VjdGlvbiAudGV4dDoKKysKKytbMC05YS1mXSsgPGZvbz46CisrLio6ICAgIDcxZWMwMDA4ICAgICAgICBtdG0wICAgIHQzLHQwCisrLio6ICAgIDcxYTQwMDA4ICAgICAgICBtdG0wICAgIHQxLGEwCisrLio6ICAgIDcwODMwMDBjICAgICAgICBtdG0xICAgIGEwLHYxCisrLio6ICAgIDcwZTEwMDBjICAgICAgICBtdG0xICAgIGEzLGF0CisrLio6ICAgIDcwMjIwMDBkICAgICAgICBtdG0yICAgIGF0LHYwCisrLio6ICAgIDcwODMwMDBjICAgICAgICBtdG0xICAgIGEwLHYxCisrLio6ICAgIDcwYTIwMDA5ICAgICAgICBtdHAwICAgIGExLHYwCisrLio6ICAgIDcwYzQwMDA5ICAgICAgICBtdHAwICAgIGEyLGEwCisrLio6ICAgIDcwODMwMDBhICAgICAgICBtdHAxICAgIGEwLHYxCisrLio6ICAgIDcwZTEwMDBhICAgICAgICBtdHAxICAgIGEzLGF0CisrLio6ICAgIDcwMjIwMDBiICAgICAgICBtdHAyICAgIGF0LHYwCisrLio6ICAgIDcwODMwMDBhICAgICAgICBtdHAxICAgIGEwLHYxCitJbmRleDogZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgZ2l0L2dhcy90ZXN0c3VpdGUvZ2FzL21pcHMvb2N0ZW9uMy5zCitAQCAtMCwwICsxLDIyIEBACisrKyAgICAgICAudGV4dAorKyAgICAgICAuc2V0IG5vcmVvcmRlcgorKyAgICAgICAuc2V0IG5vYXQKKysKKytmb286CisrICAgICAgICBtdG0wICQxNSwkMTIKKysgICAgICAgIG10bTAgJDEzLCQ0CisrCisrICAgICAgICBtdG0xICQ0LCQzCisrICAgICAgICBtdG0xICQ3LCQxCisrCisrICAgICAgICBtdG0yICQxLCQyCisrICAgICAgICBtdG0xICQ0LCQzCisrCisrICAgICAgICBtdHAwICQ1LCQyCisrICAgICAgICBtdHAwICQ2LCQ0CisrCisrICAgICAgICBtdHAxICQ0LCQzCisrICAgICAgICBtdHAxICQ3LCQxCisrCisrICAgICAgICBtdHAyICQxLCQyCisrICAgICAgICBtdHAxICQ0LCQzCitJbmRleDogZ2l0L2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2luY2x1ZGUvb3Bjb2RlL21pcHMuaAorKysrIGdpdC9pbmNsdWRlL29wY29kZS9taXBzLmgKK0BAIC0xMTk2LDYgKzExOTYsNyBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1pcHNfaXNhX3RhYmxlCisgI2RlZmluZSBJTlNOX09DVEVPTgkJICAweDAwMDAwODAwCisgI2RlZmluZSBJTlNOX09DVEVPTlAJCSAgMHgwMDAwMDIwMAorICNkZWZpbmUgSU5TTl9PQ1RFT04yCQkgIDB4MDAwMDAxMDAKKysjZGVmaW5lIElOU05fT0NURU9OMwkJICAweDAwMDAwMDQwCisgCisgLyogTUlQUyBSNTkwMCBpbnN0cnVjdGlvbiAqLworICNkZWZpbmUgSU5TTl81OTAwICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCitAQCAtMTMyNSw2ICsxMzI2LDcgQEAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtaXBzX2lzYV90YWJsZQorICNkZWZpbmUgQ1BVX09DVEVPTgk2NTAxCisgI2RlZmluZSBDUFVfT0NURU9OUAk2NjAxCisgI2RlZmluZSBDUFVfT0NURU9OMgk2NTAyCisrI2RlZmluZSBDUFVfT0NURU9OMwk2NTAzCisgI2RlZmluZSBDUFVfWExSICAgICAJODg3NjgyICAgCS8qIGRlY2ltYWwgJ1hMUicgICAqLworICNkZWZpbmUgQ1BVX1hMUCAgICAgICAgIDg4NzY4MCAgICAgIC8qIGRlY2ltYWwgJ1hMUCcgICAqLworIAorQEAgLTEzOTEsNiArMTM5Myw5IEBAIGNwdV9pc19tZW1iZXIgKGludCBjcHUsIHVuc2lnbmVkIGludCBtYXMKKyAgICAgY2FzZSBDUFVfT0NURU9OMjoKKyAgICAgICByZXR1cm4gKG1hc2sgJiBJTlNOX09DVEVPTjIpICE9IDA7CisgCisrICAgIGNhc2UgQ1BVX09DVEVPTjM6CisrICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9PQ1RFT04zKSAhPSAwOworKworICAgICBjYXNlIENQVV9YTFI6CisgICAgICAgcmV0dXJuIChtYXNrICYgSU5TTl9YTFIpICE9IDA7CisgCitJbmRleDogZ2l0L29wY29kZXMvbWlwcy1kaXMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL29wY29kZXMvbWlwcy1kaXMuYworKysrIGdpdC9vcGNvZGVzL21pcHMtZGlzLmMKK0BAIC02NDksNiArNjQ5LDExIEBAIGNvbnN0IHN0cnVjdCBtaXBzX2FyY2hfY2hvaWNlIG1pcHNfYXJjaF8KKyAgICAgSVNBX01JUFM2NFIyIHwgSU5TTl9PQ1RFT04yLCAwLCBtaXBzX2NwMF9uYW1lc19udW1lcmljLAorICAgICBOVUxMLCAwLCBtaXBzX2NwMV9uYW1lc19taXBzMzI2NCwgbWlwc19od3JfbmFtZXNfbnVtZXJpYyB9LAorIAorKyAgeyAib2N0ZW9uMyIsICAgMSwgYmZkX21hY2hfbWlwc19vY3Rlb24zLCBDUFVfT0NURU9OMywKKysgICAgSVNBX01JUFM2NFIyIHwgSU5TTl9PQ1RFT04zLCBBU0VfVklSVCB8IEFTRV9WSVJUNjQsCisrICAgIG1pcHNfY3AwX25hbWVzX251bWVyaWMsCisrICAgIE5VTEwsIDAsIG1pcHNfaHdyX25hbWVzX251bWVyaWMgfSwKKysKKyAgIHsgInhsciIsIDEsIGJmZF9tYWNoX21pcHNfeGxyLCBDUFVfWExSLAorICAgICBJU0FfTUlQUzY0IHwgSU5TTl9YTFIsIDAsCisgICAgIG1pcHNfY3AwX25hbWVzX3hsciwKK0luZGV4OiBnaXQvb3Bjb2Rlcy9taXBzLW9wYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvb3Bjb2Rlcy9taXBzLW9wYy5jCisrKysgZ2l0L29wY29kZXMvbWlwcy1vcGMuYworQEAgLTMxNiw5ICszMTYsMTAgQEAgZGVjb2RlX21pcHNfb3BlcmFuZCAoY29uc3QgY2hhciAqcCkKKyAjZGVmaW5lIE41CShJTlNOXzU0MDAgfCBJTlNOXzU1MDApCisgI2RlZmluZSBONTQJSU5TTl81NDAwCisgI2RlZmluZSBONTUJSU5TTl81NTAwCistI2RlZmluZSBJT0NUCShJTlNOX09DVEVPTiB8IElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMikKKy0jZGVmaW5lIElPQ1RQCShJTlNOX09DVEVPTlAgfCBJTlNOX09DVEVPTjIpCistI2RlZmluZSBJT0NUMglJTlNOX09DVEVPTjIKKysjZGVmaW5lIElPQ1QJKElOU05fT0NURU9OIHwgSU5TTl9PQ1RFT05QIHwgSU5TTl9PQ1RFT04yIHwgSU5TTl9PQ1RFT04zKQorKyNkZWZpbmUgSU9DVFAJKElOU05fT0NURU9OUCB8IElOU05fT0NURU9OMiB8IElOU05fT0NURU9OMykKKysjZGVmaW5lIElPQ1QyCShJTlNOX09DVEVPTjIgfCBJTlNOX09DVEVPTjMpCisrI2RlZmluZSBJT0NUMyAgSU5TTl9PQ1RFT04zCisgI2RlZmluZSBYTFIJSU5TTl9YTFIKKyAjZGVmaW5lIFhMUAlJTlNOX1hMUAorICNkZWZpbmUgSVZJUlQJQVNFX1ZJUlQKK0BAIC0xNTA1LDExICsxNTA2LDE3IEBAIGNvbnN0IHN0cnVjdCBtaXBzX29wY29kZSBtaXBzX2J1aWx0aW5fb3AKKyB7Im10bGh4IiwJCSJzIiwJCTB4MDAwMDAwNTMsIDB4ZmMxZmZmZmYsCVJEXzF8TU9EX0hJTE8sCQkwLAkJMCwJCVNNVCwJMCB9LAorIHsibXRjciIsCQkidCxzIiwJCTB4NzAwMDAwMTksIDB4ZmMwMGZmZmYsIFJEXzEsCQkJMCwJCVhMUnxYTFAsCTAsCTAgfSwKKyB7Im10bTAiLAkJInMiLAkJMHg3MDAwMDAwOCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyt7Im10bTAiLCAgICAgICAgICAgICAgICAicyx0IiwgICAgICAgICAgMHg3MDAwMDAwOCwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIElPQ1QzLCAgICAgICAgICAwLCAgICAgIDAgfSwKKyB7Im10bTEiLAkJInMiLAkJMHg3MDAwMDAwYywgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyt7Im10bTEiLCAgICAgICAgICAgICAgICAicyx0IiwgICAgICAgICAgMHg3MDAwMDAwYywgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIElPQ1QzLCAgICAgICAgICAwLCAgICAgIDAgfSwKKyB7Im10bTIiLAkJInMiLAkJMHg3MDAwMDAwZCwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyt7Im10bTIiLCAgICAgICAgICAgICAgICAicyx0IiwgICAgICAgICAgMHg3MDAwMDAwZCwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIElPQ1QzLCAgICAgICAgICAwLCAgICAgIDAgfSwKKyB7Im10cDAiLAkJInMiLAkJMHg3MDAwMDAwOSwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyt7Im10cDAiLCAgICAgICAgICAgICAgICAicyx0IiwgICAgICAgICAgMHg3MDAwMDAwOSwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIElPQ1QzLCAgICAgICAgICAwLCAgICAgIDAgfSwKKyB7Im10cDEiLAkJInMiLAkJMHg3MDAwMDAwYSwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyt7Im10cDEiLCAgICAgICAgICAgICAgICAicyx0IiwgICAgICAgICAgMHg3MDAwMDAwYSwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIElPQ1QzLCAgICAgICAgICAwLCAgICAgIDAgfSwKKyB7Im10cDIiLAkJInMiLAkJMHg3MDAwMDAwYiwgMHhmYzFmZmZmZiwgUkRfMSwJCQkwLAkJSU9DVCwJCTAsCTAgfSwKKyt7Im10cDIiLCAgICAgICAgICAgICAgICAicyx0IiwgICAgICAgICAgMHg3MDAwMDAwYiwgMHhmYzAwZmZmZiwgUkRfMXxSRF8yLCAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgIElPQ1QzLCAgICAgICAgICAwLCAgICAgIDAgfSwKKyB7Im10c2EiLAkJInMiLAkJMHgwMDAwMDAyOSwgMHhmYzFmZmZmZiwJUkRfMSwJCQkwLAkJRUUsCQkwLAkwIH0sCisgeyJtdHNhYiIsCQkicyxqIiwJCTB4MDQxODAwMDAsIDB4ZmMxZjAwMDAsCVJEXzEsCQkJMCwJCUVFLAkJMCwJMCB9LAorIHsibXRzYWgiLAkJInMsaiIsCQkweDA0MTkwMDAwLCAweGZjMWYwMDAwLAlSRF8xLAkJCTAsCQlFRSwJCTAsCTAgfSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaW51dGlscy9iaW51dGlsc18yLjI1LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNDI2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmludXRpbHMvYmludXRpbHNfMi4yNS4xLmJiCkBAIC0wLDAgKzEsMzkgQEAKK3JlcXVpcmUgYmludXRpbHMuaW5jCityZXF1aXJlIGJpbnV0aWxzLSR7UFZ9LmluYworCitERVBFTkRTICs9ICJmbGV4IGJpc29uIHpsaWIiCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXN5c3Jvb3Q9LyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC1saWJiZmQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliaWJlcnR5IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWVuYWJsZS10YXJnZXRzPWFsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLTY0LWJpdC1iZmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1pbnN0YWxsLWxpYmliZXJ0eSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZW5hYmxlLWluc3RhbGwtbGliYmZkIgorCitkb19pbnN0YWxsX2NsYXNzLW5hdGl2ZSAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgSW5zdGFsbCB0aGUgbGliaWJlcnR5IGhlYWRlcgorCWluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2luY2x1ZGUvYW5zaWRlY2wuaCAke0R9JHtpbmNsdWRlZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7U30vaW5jbHVkZS9saWJpYmVydHkuaCAke0R9JHtpbmNsdWRlZGlyfQorCisJIyBXZSBvbmx5IHdhbnQgbGliaWJlcnR5LCBsaWJiZmQgYW5kIGxpYm9wY29kZXMKKwlybSAtcmYgJHtEfSR7YmluZGlyfQorCXJtIC1yZiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30KKwlybSAtcmYgJHtEfSR7cHJlZml4fS9saWIvbGRzY3JpcHRzCisJcm0gLXJmICR7RH0ke3ByZWZpeH0vc2hhcmUvaW5mbworCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL2xvY2FsZQorCXJtIC1yZiAke0R9JHtwcmVmaXh9L3NoYXJlL21hbgorCXJtZGlyICR7RH0ke3ByZWZpeH0vc2hhcmUgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L2djYy1saWIgfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9NjQvZ2NjLWxpYiB8fCA6CisJcm1kaXIgJHtEfS8ke2xpYmRpcn0gfHwgOgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9NjQgfHwgOgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vMDAwMS1zcmMtbG9jYWwubWstZml4LXBhcmFsbGVsLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTQzYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDNhMTVmN2M5YWNlNmMwMjk0ZWRjMzEzYTE4NDhjYWZjYzMxYjJhOTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjQgQXByIDIwMTUgMDA6Mzg6MzIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL2xvY2FsLm1rOiBmaXggcGFyYWxsZWwgaXNzdWUKKworRml4ZWQ6CitybSAtZiBzcmMveWFjYyBzcmMveWFjYy50bXAKK2VjaG8gJyMhIC9iaW4vc2gnID5zcmMveWFjYy50bXAKKy9iaW4vYmFzaDogc3JjL3lhY2MudG1wOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitNYWtlZmlsZTo2NjcwOiByZWNpcGUgZm9yIHRhcmdldCAnc3JjL3lhY2MnIGZhaWxlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvbG9jYWwubWsgfCAgICAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9sb2NhbC5tayBiL3NyYy9sb2NhbC5taworaW5kZXggNTczYWQwMC4uMjhiZmFlNCAxMDA2NDQKKy0tLSBhL3NyYy9sb2NhbC5taworKysrIGIvc3JjL2xvY2FsLm1rCitAQCAtMTE5LDYgKzExOSw3IEBAIE1PU1RMWUNMRUFORklMRVMgKz0gc3JjL3lhY2MKKyAKKyBzcmMveWFjYzoKKyAJJChBTV9WX0dFTilybSAtZiAkQCAkQC50bXAKKysJJChBTV9WX2F0KSQoTUtESVJfUCkgc3JjCisgCSQoQU1fVl9hdCllY2hvICcjISAvYmluL3NoJyA+JEAudG1wCisgCSQoQU1fVl9hdCllY2hvICJleGVjICckKGJpbmRpcikvYmlzb24nIC15ICInIiQkQCInID4+JEAudG1wCisgCSQoQU1fVl9hdCljaG1vZCBhK3ggJEAudG1wCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2Jpc29uLTIuM19tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4Y2UxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9iaXNvbi0yLjNfbTQucGF0Y2gKQEAgLTAsMCArMSw1OTEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5tbi1sb2dpc3Rpay5kZS91bnN1cHBvcnRlZC9weGEyNTAvcGF0Y2hlcgorIworCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaW50dHlwZXMtcHJpLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBpbnR0eXBlcy1wcmkubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKysjIERlZmluZSBQUklfTUFDUk9TX0JST0tFTiBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHRoZSBQUkkqCisrIyBtYWNyb3MgdG8gbm9uLXN0cmluZyB2YWx1ZXMuICBUaGlzIGlzIHRoZSBjYXNlIG9uIEFJWCA0LjMuMy4KKysKKytBQ19ERUZVTihbZ3RfSU5UVFlQRVNfUFJJXSwKKytbCisrICBBQ19SRVFVSVJFKFtndF9IRUFERVJfSU5UVFlQRVNfSF0pCisrICBpZiB0ZXN0ICRndF9jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgaW50dHlwZXMuaCBQUkl4Tk4gbWFjcm9zIGFyZSBicm9rZW5dLAorKyAgICAgIGd0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4sCisrICAgICAgWworKyAgICAgICAgQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorKyNpZmRlZiBQUklkMzIKKytjaGFyICpwID0gUFJJZDMyOworKyNlbmRpZgorK10sIFtdLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPW5vLCBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcykKKysgICAgICBdKQorKyAgZmkKKysgIGlmIHRlc3QgIiRndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoUFJJX01BQ1JPU19CUk9LRU4sIDEsCisrICAgICAgW0RlZmluZSBpZiA8aW50dHlwZXMuaD4gZXhpc3RzIGFuZCBkZWZpbmVzIHVudXNhYmxlIFBSSSogbWFjcm9zLl0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvbGNtZXNzYWdlLm00CitAQCAtMCwwICsxLDMyIEBACisrIyBsY21lc3NhZ2UubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgKm5vdCogaW4gdGhlIHB1YmxpYyBkb21haW4uCisrCisrZG5sIEF1dGhvcnM6CisrZG5sICAgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAY3lnbnVzLmNvbT4sIDE5OTUuCisrCisrIyBDaGVjayB3aGV0aGVyIExDX01FU1NBR0VTIGlzIGF2YWlsYWJsZSBpbiA8bG9jYWxlLmg+LgorKworK0FDX0RFRlVOKFtBTV9MQ19NRVNTQUdFU10sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBMQ19NRVNTQUdFU10sIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUywKKysgICAgW0FDX1RSWV9MSU5LKFsjaW5jbHVkZSA8bG9jYWxlLmg+XSwgW3JldHVybiBMQ19NRVNTQUdFU10sCisrICAgICAgIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMsIGFtX2N2X3ZhbF9MQ19NRVNTQUdFUz1ubyldKQorKyAgaWYgdGVzdCAkYW1fY3ZfdmFsX0xDX01FU1NBR0VTID0geWVzOyB0aGVuCisrICAgIEFDX0RFRklORShIQVZFX0xDX01FU1NBR0VTLCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91ciA8bG9jYWxlLmg+IGZpbGUgZGVmaW5lcyBMQ19NRVNTQUdFUy5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L3VpbnRtYXhfdC5tNAorQEAgLTAsMCArMSwyOSBAQAorKyMgdWludG1heF90Lm00IHNlcmlhbCA2IChnZXR0ZXh0LTAuMTEpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrQUNfUFJFUkVRKDIuMTMpCisrCisrIyBEZWZpbmUgdWludG1heF90IHRvIGB1bnNpZ25lZCBsb25nJyBvciBgdW5zaWduZWQgbG9uZyBsb25nJworKyMgaWYgPGludHR5cGVzLmg+IGRvZXMgbm90IGV4aXN0LgorKworK0FDX0RFRlVOKFtqbV9BQ19UWVBFX1VJTlRNQVhfVF0sCisrWworKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX0lOVFRZUEVTX0hdKQorKyAgQUNfUkVRVUlSRShbam1fQUNfSEVBREVSX1NURElOVF9IXSkKKysgIGlmIHRlc3QgJGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0gbm8gJiYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddKQorKyAgICB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllcyBcCisrICAgICAgJiYgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJyBcCisrICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZycKKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKHVpbnRtYXhfdCwgJGFjX3R5cGUsCisrICBbRGVmaW5lIHRvIHVuc2lnbmVkIGxvbmcgb3IgdW5zaWduZWQgbG9uZyBsb25nCisrICAgaWYgPGludHR5cGVzLmg+IGFuZCA8c3RkaW50Lmg+IGRvbid0IGRlZmluZS5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2dsaWJjMjEubTQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGdsaWJjMjEubTQgc2VyaWFsIDIgKGZpbGV1dGlscy00LjEuMywgZ2V0dGV4dC0wLjEwLjQwKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGVzdCBmb3IgdGhlIEdOVSBDIExpYnJhcnksIHZlcnNpb24gMi4xIG9yIG5ld2VyLgorKyMgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2ptX0dMSUJDMjFdLAorKyAgWworKyAgICBBQ19DQUNIRV9DSEVDSyh3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSAyLjEgb3IgbmV3ZXIsCisrICAgICAgYWNfY3ZfZ251X2xpYnJhcnlfMl8xLAorKyAgICAgIFtBQ19FR1JFUF9DUFAoW0x1Y2t5IEdOVSB1c2VyXSwKKysJWworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX0dOVV9MSUJSQVJZX18KKysgI2lmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSkgfHwgKF9fR0xJQkNfXyA+IDIpCisrICBMdWNreSBHTlUgdXNlcgorKyAjZW5kaWYKKysjZW5kaWYKKysJXSwKKysJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPXllcywKKysJYWNfY3ZfZ251X2xpYnJhcnlfMl8xPW5vKQorKyAgICAgIF0KKysgICAgKQorKyAgICBBQ19TVUJTVChHTElCQzIxKQorKyAgICBHTElCQzIxPSIkYWNfY3ZfZ251X2xpYnJhcnlfMl8xIgorKyAgXQorKykKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9zdGRpbnRfaC5tNAorQEAgLTAsMCArMSwyOCBAQAorKyMgc3RkaW50X2gubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS40KQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIFBhdWwgRWdnZXJ0LgorKworKyMgRGVmaW5lIEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYIGlmIDxzdGRpbnQuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9TVERJTlRfSF0sCisrWworKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdGRpbnQuaF0sIGptX2FjX2N2X2hlYWRlcl9zdGRpbnRfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+XSwKKysgICAgW3VpbnRtYXhfdCBpID0gKHVpbnRtYXhfdCkgLTE7XSwKKysgICAgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oPXllcywKKysgICAgam1fYWNfY3ZfaGVhZGVyX3N0ZGludF9oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfU1RESU5UX0hfV0lUSF9VSU5UTUFYLCAxLAorK1tEZWZpbmUgaWYgPHN0ZGludC5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaW50dHlwZXNfaC5tNAorQEAgLTAsMCArMSwyOCBAQAorKyMgaW50dHlwZXNfaC5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCBpZiA8aW50dHlwZXMuaD4gZXhpc3RzLAorKyMgZG9lc24ndCBjbGFzaCB3aXRoIDxzeXMvdHlwZXMuaD4sIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuCisrCisrQUNfREVGVU4oW2ptX0FDX0hFQURFUl9JTlRUWVBFU19IXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIGludHR5cGVzLmhdLCBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCwKKysgIFtBQ19UUllfQ09NUElMRSgKKysgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysjaW5jbHVkZSA8aW50dHlwZXMuaD5dLAorKyAgICBbdWludG1heF90IGkgPSAodWludG1heF90KSAtMTtdLAorKyAgICBqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaD15ZXMsCisrICAgIGptX2FjX2N2X2hlYWRlcl9pbnR0eXBlc19oPW5vKV0pCisrICBpZiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9JTlRUWVBFU19IX1dJVEhfVUlOVE1BWCwgMSwKKytbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMsIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+LAorKyAgIGFuZCBkZWNsYXJlcyB1aW50bWF4X3QuIF0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvdWxvbmdsb25nLm00CitAQCAtMCwwICsxLDIzIEBACisrIyB1bG9uZ2xvbmcubTQgc2VyaWFsIDIgKGZpbGV1dGlscy00LjAuMzIsIGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdW5zaWduZWQgbG9uZyBsb25nXSwgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcsCisrICBbQUNfVFJZX0xJTksoW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGwgPSAxOyBpbnQgaSA9IDYzO10sCisrICAgIFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsbWF4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgLTE7CisrICAgICByZXR1cm4gdWxsIDw8IGkgfCB1bGwgPj4gaSB8IHVsbG1heCAvIHVsbCB8IHVsbG1heCAlIHVsbDtdLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz15ZXMsCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPW5vKV0pCisrICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9VTlNJR05FRF9MT05HX0xPTkcsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdW5zaWduZWQgbG9uZyBsb25nIHR5cGUuXSkKKysgIGZpCisrXSkKKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0xLjg3NS9tNC9jb2Rlc2V0Lm00CitAQCAtMCwwICsxLDIzIEBACisrIyBjb2Rlc2V0Lm00IHNlcmlhbCBBTTEgKGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW0FNX0xBTkdJTkZPX0NPREVTRVRdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVRdLCBhbV9jdl9sYW5naW5mb19jb2Rlc2V0LAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsYW5naW5mby5oPl0sCisrICAgICAgW2NoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7XSwKKysgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PXllcywKKysgICAgICBhbV9jdl9sYW5naW5mb19jb2Rlc2V0PW5vKQorKyAgICBdKQorKyAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9MQU5HSU5GT19DT0RFU0VULCAxLAorKyAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgPGxhbmdpbmZvLmg+IGFuZCBubF9sYW5naW5mbyhDT0RFU0VUKS5dKQorKyAgZmkKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludGRpdjAubTQKK0BAIC0wLDAgKzEsNzIgQEAKKysjIGludGRpdjAubTQgc2VyaWFsIDEgKGdldHRleHQtMC4xMS4zKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBCcnVubyBIYWlibGUuCisrCisrQUNfREVGVU4oW2d0X0lOVERJVjBdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorKyAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorKworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBTSUdGUEVdLAorKyAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSwKKysgICAgWworKyAgICAgIEFDX1RSWV9SVU4oWworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrCisrc3RhdGljIHZvaWQKKysjaWZkZWYgX19jcGx1c3BsdXMKKytzaWdmcGVfaGFuZGxlciAoaW50IHNpZykKKysjZWxzZQorK3NpZ2ZwZV9oYW5kbGVyIChzaWcpIGludCBzaWc7CisrI2VuZGlmCisreworKyAgLyogRXhpdCB3aXRoIGNvZGUgMCBpZiBTSUdGUEUsIHdpdGggY29kZSAxIGlmIGFueSBvdGhlciBzaWduYWwuICAqLworKyAgZXhpdCAoc2lnICE9IFNJR0ZQRSk7CisrfQorKworK2ludCB4ID0gMTsKKytpbnQgeSA9IDA7CisraW50IHo7CisraW50IG5hbjsKKysKKytpbnQgbWFpbiAoKQorK3sKKysgIHNpZ25hbCAoU0lHRlBFLCBzaWdmcGVfaGFuZGxlcik7CisrLyogSVJJWCBhbmQgQUlYICh3aGVuICJ4bGMgLXFjaGVjayIgaXMgdXNlZCkgeWllbGQgc2lnbmFsIFNJR1RSQVAuICAqLworKyNpZiAoZGVmaW5lZCAoX19zZ2kpIHx8IGRlZmluZWQgKF9BSVgpKSAmJiBkZWZpbmVkIChTSUdUUkFQKQorKyAgc2lnbmFsIChTSUdUUkFQLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrLyogTGludXgvU1BBUkMgeWllbGRzIHNpZ25hbCBTSUdJTEwuICAqLworKyNpZiBkZWZpbmVkIChfX3NwYXJjX18pICYmIGRlZmluZWQgKF9fbGludXhfXykKKysgIHNpZ25hbCAoU0lHSUxMLCBzaWdmcGVfaGFuZGxlcik7CisrI2VuZGlmCisrCisrICB6ID0geCAvIHk7CisrICBuYW4gPSB5IC8geTsKKysgIGV4aXQgKDEpOworK30KKytdLCBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT15ZXMsIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPW5vLAorKyAgICAgICAgWworKyAgICAgICAgICAjIEd1ZXNzIGJhc2VkIG9uIHRoZSBDUFUuCisrICAgICAgICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKysgICAgICAgICAgICBhbHBoYSogfCBpWzM0NTY3XTg2IHwgbTY4ayB8IHMzOTAqKQorKyAgICAgICAgICAgICAgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9Imd1ZXNzaW5nIHllcyI7OworKyAgICAgICAgICAgICopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3Npbmcgbm8iOzsKKysgICAgICAgICAgZXNhYworKyAgICAgICAgXSkKKysgICAgXSkKKysgIGNhc2UgIiRndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZSIgaW4KKysgICAgKnllcykgdmFsdWU9MTs7CisrICAgICopIHZhbHVlPTA7OworKyAgZXNhYworKyAgQUNfREVGSU5FX1VOUVVPVEVEKElOVERJVjBfUkFJU0VTX1NJR0ZQRSwgJHZhbHVlLAorKyAgICBbRGVmaW5lIGlmIGludGVnZXIgZGl2aXNpb24gYnkgemVybyByYWlzZXMgc2lnbmFsIFNJR0ZQRS5dKQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvZ2xpYi5tNAorQEAgLTAsMCArMSwxOTYgQEAKKysjIENvbmZpZ3VyZSBwYXRocyBmb3IgR0xJQgorKyMgT3dlbiBUYXlsb3IgICAgIDk3LTExLTMKKysKKytkbmwgQU1fUEFUSF9HTElCKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORCBbLCBNT0RVTEVTXV1dXSkKKytkbmwgVGVzdCBmb3IgR0xJQiwgYW5kIGRlZmluZSBHTElCX0NGTEFHUyBhbmQgR0xJQl9MSUJTLCBpZiAiZ21vZHVsZSIgb3IgCisrZG5sIGd0aHJlYWQgaXMgc3BlY2lmaWVkIGluIE1PRFVMRVMsIHBhc3MgdG8gZ2xpYi1jb25maWcKKytkbmwKKytBQ19ERUZVTihBTV9QQVRIX0dMSUIsCisrW2RubCAKKytkbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBnbGliLWNvbmZpZyBzY3JpcHQKKytkbmwKKytBQ19BUkdfV0lUSChnbGliLXByZWZpeCxbICAtLXdpdGgtZ2xpYi1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19wcmVmaXg9IiIpCisrQUNfQVJHX1dJVEgoZ2xpYi1leGVjLXByZWZpeCxbICAtLXdpdGgtZ2xpYi1leGVjLXByZWZpeD1QRlggRXhlYyBwcmVmaXggd2hlcmUgR0xJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisrICAgICAgICAgICAgZ2xpYl9jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfZXhlY19wcmVmaXg9IiIpCisrQUNfQVJHX0VOQUJMRShnbGlidGVzdCwgWyAgLS1kaXNhYmxlLWdsaWJ0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBHTElCIHByb2dyYW1dLAorKwkJICAgICwgZW5hYmxlX2dsaWJ0ZXN0PXllcykKKysKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCAhPSB4IDsgdGhlbgorKyAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgLS1leGVjLXByZWZpeD0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeC9iaW4vZ2xpYi1jb25maWcKKysgICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorKyAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGdsaWJfY29uZmlnX3ByZWZpeCIKKysgICAgIGlmIHRlc3QgeCR7R0xJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorKyAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX3ByZWZpeC9iaW4vZ2xpYi1jb25maWcKKysgICAgIGZpCisrICBmaQorKworKyAgZm9yIG1vZHVsZSBpbiAuICQ0CisrICBkbworKyAgICAgIGNhc2UgIiRtb2R1bGUiIGluCisrICAgICAgICAgZ21vZHVsZSkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGdtb2R1bGUiCisrICAgICAgICAgOzsKKysgICAgICAgICBndGhyZWFkKSAKKysgICAgICAgICAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgZ3RocmVhZCIKKysgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgIGRvbmUKKysKKysgIEFDX1BBVEhfUFJPRyhHTElCX0NPTkZJRywgZ2xpYi1jb25maWcsIG5vKQorKyAgbWluX2dsaWJfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuOTkuNywkMSkKKysgIEFDX01TR19DSEVDS0lORyhmb3IgR0xJQiAtIHZlcnNpb24gPj0gJG1pbl9nbGliX3ZlcnNpb24pCisrICBub19nbGliPSIiCisrICBpZiB0ZXN0ICIkR0xJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KKysgICAgbm9fZ2xpYj15ZXMKKysgIGVsc2UKKysgICAgR0xJQl9DRkxBR1M9YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLWNmbGFnc2AKKysgICAgR0xJQl9MSUJTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1saWJzYAorKyAgICBnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCisrICAgIGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDIvJ2AKKysgICAgZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAorKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9nbGlidGVzdCIgPSAieHllcyIgOyB0aGVuCisrICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICBDRkxBR1M9IiRDRkxBR1MgJEdMSUJfQ0ZMQUdTIgorKyAgICAgIExJQlM9IiRHTElCX0xJQlMgJExJQlMiCisrZG5sCisrZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIEdMSUIgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5CisrZG5sIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiBnbGliLWNvbmZpZyB0byBzb21lIGV4dGVudAorK2RubAorKyAgICAgIHJtIC1mIGNvbmYuZ2xpYnRlc3QKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKytpbnQgCisrbWFpbiAoKQorK3sKKysgIGludCBtYWpvciwgbWlub3IsIG1pY3JvOworKyAgY2hhciAqdG1wX3ZlcnNpb247CisrCisrICBzeXN0ZW0gKCJ0b3VjaCBjb25mLmdsaWJ0ZXN0Iik7CisrCisrICAvKiBIUC9VWCA5ICglQCMhKSB3cml0ZXMgdG8gc3NjYW5mIHN0cmluZ3MgKi8KKysgIHRtcF92ZXJzaW9uID0gZ19zdHJkdXAoIiRtaW5fZ2xpYl92ZXJzaW9uIik7CisrICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CisrICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgICAgZXhpdCgxKTsKKysgICB9CisrCisrICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAorKyAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb24pKQorKyAgICB7CisrICAgICAgcHJpbnRmKCJcbioqKiAnZ2xpYi1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IEdMSUIgKCVkLiVkLiVkKVxuIiwgCisrICAgICAgICAgICAgICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb24sCisrICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgIHByaW50ZiAoIioqKiB3YXMgZm91bmQhIElmIGdsaWItY29uZmlnIHdhcyBjb3JyZWN0LCB0aGVuIGl0IGlzIGJlc3RcbiIpOworKyAgICAgIHByaW50ZiAoIioqKiB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uIG9mIEdMSUIuIFlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGZpeCB0aGUgZXJyb3JcbiIpOworKyAgICAgIHByaW50ZigiKioqIGJ5IG1vZGlmeWluZyB5b3VyIExEX0xJQlJBUllfUEFUSCBlbnZpcm9tZW50IHZhcmlhYmxlLCBvciBieSBlZGl0aW5nXG4iKTsKKysgICAgICBwcmludGYoIioqKiAvZXRjL2xkLnNvLmNvbmYuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCBpc1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogcmVxdWlyZWQgb24geW91ciBzeXN0ZW0uXG4iKTsKKysgICAgICBwcmludGYoIioqKiBJZiBnbGliLWNvbmZpZyB3YXMgd3JvbmcsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgR0xJQl9DT05GSUdcbiIpOworKyAgICAgIHByaW50ZigiKioqIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGUgY29uZmlnLmNhY2hlXG4iKTsKKysgICAgICBwcmludGYoIioqKiBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOworKyAgICB9IAorKyAgZWxzZSBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiAhPSBHTElCX01BSk9SX1ZFUlNJT04pIHx8CisrCSAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gR0xJQl9NSU5PUl9WRVJTSU9OKSB8fAorKyAgICAgICAgICAgKGdsaWJfbWljcm9fdmVyc2lvbiAhPSBHTElCX01JQ1JPX1ZFUlNJT04pKQorKyAgICB7CisrICAgICAgcHJpbnRmKCIqKiogR0xJQiBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKKysJICAgICBHTElCX01BSk9SX1ZFUlNJT04sIEdMSUJfTUlOT1JfVkVSU0lPTiwgR0xJQl9NSUNST19WRVJTSU9OKTsKKysgICAgICBwcmludGYoIioqKiBsaWJyYXJ5ICh2ZXJzaW9uICVkLiVkLiVkKVxuIiwKKysJICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorKyAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmIChnbGliX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKKysgICAgICB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICAgfQorKyAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgR0xJQiAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCisrICAgICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgR0xJQiBuZXdlciB0aGFuICVkLiVkLiVkLiBUaGUgbGF0ZXN0IHZlcnNpb24gb2ZcbiIsCisrCSAgICAgICBtYWpvciwgbWlub3IsIG1pY3JvKTsKKysgICAgICAgIHByaW50ZigiKioqIEdMSUIgaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5ndGsub3JnLlxuIik7CisrICAgICAgICBwcmludGYoIioqKlxuIik7CisrICAgICAgICBwcmludGYoIioqKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBhIHN1ZmZpY2llbnRseSBuZXcgdmVyc2lvbiwgdGhpcyBlcnJvclxuIik7CisrICAgICAgICBwcmludGYoIioqKiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB3cm9uZyBjb3B5IG9mIHRoZSBnbGliLWNvbmZpZyBzaGVsbCBzY3JpcHQgaXNcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogYmVpbmcgZm91bmQuIFRoZSBlYXNpZXN0IHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIG9mIEdMSUIsIGJ1dCB5b3UgY2FuIGFsc28gc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB0byBwb2ludCB0byB0aGVcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLiAoSW4gdGhpcyBjYXNlLCB5b3Ugd2lsbCBoYXZlIHRvXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIG1vZGlmeSB5b3VyIExEX0xJQlJBUllfUEFUSCBlbnZpcm9tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZlxuIik7CisrICAgICAgICBwcmludGYoIioqKiBzbyB0aGF0IHRoZSBjb3JyZWN0IGxpYnJhcmllcyBhcmUgZm91bmQgYXQgcnVuLXRpbWUpKVxuIik7CisrICAgICAgfQorKyAgICB9CisrICByZXR1cm4gMTsKKyt9CisrXSwsIG5vX2dsaWI9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKysgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIngkbm9fZ2xpYiIgPSB4IDsgdGhlbgorKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCisrICBlbHNlCisrICAgICBBQ19NU0dfUkVTVUxUKG5vKQorKyAgICAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgICAgIGVjaG8gIioqKiBUaGUgZ2xpYi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBHTElCIGNvdWxkIG5vdCBiZSBmb3VuZCIKKysgICAgICAgZWNobyAiKioqIElmIEdMSUIgd2FzIGluc3RhbGxlZCBpbiBQUkVGSVgsIG1ha2Ugc3VyZSBQUkVGSVgvYmluIGlzIGluIgorKyAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKKysgICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBnbGliLWNvbmZpZy4iCisrICAgICBlbHNlCisrICAgICAgIGlmIHRlc3QgLWYgY29uZi5nbGlidGVzdCA7IHRoZW4KKysgICAgICAgIDoKKysgICAgICAgZWxzZQorKyAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBHTElCIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorKyAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJEdMSUJfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkTElCUyAkR0xJQl9MSUJTIgorKyAgICAgICAgICBBQ19UUllfTElOSyhbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKytdLCAgICAgIFsgcmV0dXJuICgoZ2xpYl9tYWpvcl92ZXJzaW9uKSB8fCAoZ2xpYl9taW5vcl92ZXJzaW9uKSB8fCAoZ2xpYl9taWNyb192ZXJzaW9uKSk7IF0sCisrICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKysgICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBHTElCIG9yIGZpbmRpbmcgdGhlIHdyb25nIgorKyAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBHTElCLiBJZiBpdCBpcyBub3QgZmluZGluZyBHTElCLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKysgICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCisrICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKysJICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKysgICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhIFJlZEhhdCA1LjAgc3lzdGVtLCB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUgR1RLIHBhY2thZ2UgdGhhdCIKKysgICAgICAgICAgZWNobyAiKioqIGNhbWUgd2l0aCB0aGUgc3lzdGVtIHdpdGggdGhlIGNvbW1hbmQiCisrICAgICAgICAgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqICAgIHJwbSAtLWVyYXNlIC0tbm9kZXBzIGd0ayBndGstZGV2ZWwiIF0sCisrICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCisrICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBHTElCIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCisrICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIEdMSUIgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCisrICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBnbGliLWNvbmZpZyBzY3JpcHQ6ICRHTElCX0NPTkZJRyIgXSkKKysgICAgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICAgICAgIGZpCisrICAgICBmaQorKyAgICAgR0xJQl9DRkxBR1M9IiIKKysgICAgIEdMSUJfTElCUz0iIgorKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKysgIGZpCisrICBBQ19TVUJTVChHTElCX0NGTEFHUykKKysgIEFDX1NVQlNUKEdMSUJfTElCUykKKysgIHJtIC1mIGNvbmYuZ2xpYnRlc3QKKytdKQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTEuODc1L200L2ludHR5cGVzLm00CitAQCAtMCwwICsxLDI3IEBACisrIyBpbnR0eXBlcy5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjQpCisrZG5sIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gUGF1bCBFZ2dlcnQuCisrCisrIyBEZWZpbmUgSEFWRV9JTlRUWVBFU19IIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRvZXNuJ3QgY2xhc2ggd2l0aAorKyMgPHN5cy90eXBlcy5oPi4KKysKKytBQ19ERUZVTihbZ3RfSEVBREVSX0lOVFRZUEVTX0hdLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgaW50dHlwZXMuaF0sIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oLAorKyAgWworKyAgICBBQ19UUllfQ09NUElMRSgKKysgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxpbnR0eXBlcy5oPl0sCisrICAgICAgW10sIGd0X2N2X2hlYWRlcl9pbnR0eXBlc19oPXllcywgZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2g9bm8pCisrICBdKQorKyAgaWYgdGVzdCAkZ3RfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfSU5UVFlQRVNfSCwgMSwKKysgICAgICBbRGVmaW5lIGlmIDxpbnR0eXBlcy5oPiBleGlzdHMgYW5kIGRvZXNuJ3QgY2xhc2ggd2l0aCA8c3lzL3R5cGVzLmg+Ll0pCisrICBmaQorK10pCistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMS44NzUvbTQvaXNjLXBvc2l4Lm00CitAQCAtMCwwICsxLDI2IEBACisrIyBpc2MtcG9zaXgubTQgc2VyaWFsIDIgKGdldHRleHQtMC4xMS4yKQorK2RubCBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworKyMgVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgd2l0aCBhdXRvY29uZi0yLjUzIGFuZCBuZXdlci4gIFJlbW92ZSBpdCBpbiAyMDA1LgorKworKyMgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvbmUgaW4gYXV0b2NvbmYuCisrIyBDdXJyZW50bHkgdGhpcyBtYWNybyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBhdXRvY29uZiBtYWNybworKyMgYmVjYXVzZSBnZXR0ZXh0J3MgZ2V0dGV4dC5tNCAoZGlzdHJpYnV0ZWQgaW4gdGhlIGF1dG9tYWtlIHBhY2thZ2UpCisrIyBzdGlsbCB1c2VzIGl0LiAgT3RoZXJ3aXNlLCB0aGUgdXNlIGluIGdldHRleHQubTQgbWFrZXMgYXV0b2hlYWRlcgorKyMgZ2l2ZSB0aGVzZSBkaWFnbm9zdGljczoKKysjICAgY29uZmlndXJlLmluOjU1NjogQUNfVFJZX0NPTVBJTEUgd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9SVU4gd2FzIGNhbGxlZCBiZWZvcmUgQUNfSVNDX1BPU0lYCisrCisrdW5kZWZpbmUoW0FDX0lTQ19QT1NJWF0pCisrCisrQUNfREVGVU4oW0FDX0lTQ19QT1NJWF0sCisrICBbCisrICAgIGRubCBUaGlzIHRlc3QgcmVwbGFjZXMgdGhlIG9ic29sZXNjZW50IEFDX0lTQ19QT1NJWCBrbHVkZ2UuCisrICAgIEFDX0NIRUNLX0xJQihjcG9zaXgsIHN0cmVycm9yLCBbTElCUz0iJExJQlMgLWxjcG9zaXgiXSkKKysgIF0KKyspCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE2YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gNGMwZDc3MzNmMzA5MDNmOGQ3YzdjZDc0MzNmNWM4YTc1MDVlMzVmNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDIxIEFwciAyMDE1IDAwOjQ4OjQ1IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvYy9sb2NhbC5tazogZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK1VwZGF0ZWQgZm9yIGJpc29uIDMuMC40CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jL2xvY2FsLm1rIHwgICAgOSArLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kb2MvbG9jYWwubWsgYi9kb2MvbG9jYWwubWsKK2luZGV4IGMzNDA0NTIuLjY0MmYzODUgMTAwNjQ0CistLS0gYS9kb2MvbG9jYWwubWsKKysrKyBiL2RvYy9sb2NhbC5taworQEAgLTk4LDEwICs5OCw3IEBAIGVuZGlmICEgQ1JPU1NfQ09NUElMSU5HCisgIyMgTWFuIFBhZ2VzLiAgIyMKKyAjIyAtLS0tLS0tLS0tLSAjIworIAorLWRpc3RfbWFuX01BTlMgPSAkKHRvcF9zcmNkaXIpL2RvYy9iaXNvbi4xCistCistRVhUUkFfRElTVCArPSAkKGRpc3RfbWFuX01BTlM6LjE9LngpCistTUFJTlRBSU5FUkNMRUFORklMRVMgKz0gJChkaXN0X21hbl9NQU5TKQorK0VYVFJBX0RJU1QgKz0gYmlzb24ueAorIAorICMgRGlmZmVyZW5jZXMgdG8gaWdub3JlIHdoZW4gY29tcGFyaW5nIHRoZSBtYW4gcGFnZSAodGhlIGRhdGUpLgorIHJlbW92ZV90aW1lX3N0YW1wID0gXAorQEAgLTEyNCwxMCArMTIxLDYgQEAgJCh0b3Bfc3JjZGlyKS9kb2MvYmlzb24uMTogJChNQU5fREVQUykKKyAJZmkKKyAJJChBTV9WX2F0KXJtIC1mICRAKi50CisgCistaWYgRU5BQkxFX1lBQ0MKKy1ub2Rpc3RfbWFuX01BTlMgPSBkb2MveWFjYy4xCistZW5kaWYKKy0KKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworICMjIEdyYXBodml6IGV4YW1wbGVzIGdlbmVyYXRpb24uICMjCisgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb24vbTQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzOWRhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbi9tNC5wYXRjaApAQCAtMCwwICsxLDQxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC9sY21lc3NhZ2UubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiaXNvbi0yLjQuMi9tNC9sY21lc3NhZ2UubTQKK0BAIC0wLDAgKzEsMzIgQEAKKysjIGxjbWVzc2FnZS5tNCBzZXJpYWwgMyAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrZG5sCisrZG5sIFRoaXMgZmlsZSBjYW4gY2FuIGJlIHVzZWQgaW4gcHJvamVjdHMgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUgdW5kZXIKKytkbmwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIG9yIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworK2RubCBMaWNlbnNlIGJ1dCB3aGljaCBzdGlsbCB3YW50IHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIEdOVSBnZXR0ZXh0CisrZG5sIGZ1bmN0aW9uYWxpdHkuCisrZG5sIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCBjb2RlIG9mIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGlzIGNvdmVyZWQKKytkbmwgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgR05VCisrZG5sIGdldHRleHQgcGFja2FnZSBwYWNrYWdlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorK2RubCBUaGV5IGFyZSAqbm90KiBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgICBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBjeWdudXMuY29tPiwgMTk5NS4KKysKKysjIENoZWNrIHdoZXRoZXIgTENfTUVTU0FHRVMgaXMgYXZhaWxhYmxlIGluIDxsb2NhbGUuaD4uCisrCisrQUNfREVGVU4oW0FNX0xDX01FU1NBR0VTXSwKKytbCisrICBBQ19DQUNIRV9DSEVDSyhbZm9yIExDX01FU1NBR0VTXSwgYW1fY3ZfdmFsX0xDX01FU1NBR0VTLAorKyAgICBbQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2NhbGUuaD5dLCBbcmV0dXJuIExDX01FU1NBR0VTXSwKKysgICAgICAgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPXllcywgYW1fY3ZfdmFsX0xDX01FU1NBR0VTPW5vKV0pCisrICBpZiB0ZXN0ICRhbV9jdl92YWxfTENfTUVTU0FHRVMgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfTENfTUVTU0FHRVMsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3VyIDxsb2NhbGUuaD4gZmlsZSBkZWZpbmVzIExDX01FU1NBR0VTLl0pCisrICBmaQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvdWludG1heF90Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvdWludG1heF90Lm00CitAQCAtMCwwICsxLDI5IEBACisrIyB1aW50bWF4X3QubTQgc2VyaWFsIDYgKGdldHRleHQtMC4xMSkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKytBQ19QUkVSRVEoMi4xMykKKysKKysjIERlZmluZSB1aW50bWF4X3QgdG8gYHVuc2lnbmVkIGxvbmcnIG9yIGB1bnNpZ25lZCBsb25nIGxvbmcnCisrIyBpZiA8aW50dHlwZXMuaD4gZG9lcyBub3QgZXhpc3QuCisrCisrQUNfREVGVU4oW2ptX0FDX1RZUEVfVUlOVE1BWF9UXSwKKytbCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfSU5UVFlQRVNfSF0pCisrICBBQ19SRVFVSVJFKFtqbV9BQ19IRUFERVJfU1RESU5UX0hdKQorKyAgaWYgdGVzdCAkam1fYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSBubyAmJiB0ZXN0ICRqbV9hY19jdl9oZWFkZXJfc3RkaW50X2ggPSBubzsgdGhlbgorKyAgICBBQ19SRVFVSVJFKFtqbV9BQ19UWVBFX1VOU0lHTkVEX0xPTkdfTE9OR10pCisrICAgIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nID0geWVzIFwKKysgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcnIFwKKysgICAgICB8fCBhY190eXBlPSd1bnNpZ25lZCBsb25nJworKyAgICBBQ19ERUZJTkVfVU5RVU9URUQodWludG1heF90LCAkYWNfdHlwZSwKKysgIFtEZWZpbmUgdG8gdW5zaWduZWQgbG9uZyBvciB1bnNpZ25lZCBsb25nIGxvbmcKKysgICBpZiA8aW50dHlwZXMuaD4gYW5kIDxzdGRpbnQuaD4gZG9uJ3QgZGVmaW5lLl0pCisrICBmaQorK10pCitJbmRleDogYmlzb24tMi40LjIvbTQvdWxvbmdsb25nLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvdWxvbmdsb25nLm00CitAQCAtMCwwICsxLDIzIEBACisrIyB1bG9uZ2xvbmcubTQgc2VyaWFsIDIgKGZpbGV1dGlscy00LjAuMzIsIGdldHRleHQtMC4xMC40MCkKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKysKKytBQ19ERUZVTihbam1fQUNfVFlQRV9VTlNJR05FRF9MT05HX0xPTkddLAorK1sKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdW5zaWduZWQgbG9uZyBsb25nXSwgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmcsCisrICBbQUNfVFJZX0xJTksoW3Vuc2lnbmVkIGxvbmcgbG9uZyB1bGwgPSAxOyBpbnQgaSA9IDYzO10sCisrICAgIFt1bnNpZ25lZCBsb25nIGxvbmcgdWxsbWF4ID0gKHVuc2lnbmVkIGxvbmcgbG9uZykgLTE7CisrICAgICByZXR1cm4gdWxsIDw8IGkgfCB1bGwgPj4gaSB8IHVsbG1heCAvIHVsbCB8IHVsbG1heCAlIHVsbDtdLAorKyAgICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZz15ZXMsCisrICAgIGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nPW5vKV0pCisrICBpZiB0ZXN0ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9VTlNJR05FRF9MT05HX0xPTkcsIDEsCisrICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdW5zaWduZWQgbG9uZyBsb25nIHR5cGUuXSkKKysgIGZpCisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC9pbnRkaXYwLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvaW50ZGl2MC5tNAorQEAgLTAsMCArMSw3MiBAQAorKyMgaW50ZGl2MC5tNCBzZXJpYWwgMSAoZ2V0dGV4dC0wLjExLjMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytBQ19ERUZVTihbZ3RfSU5URElWMF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisrICBBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrCisrICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBpbnRlZ2VyIGRpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIFNJR0ZQRV0sCisrICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlLAorKyAgICBbCisrICAgICAgQUNfVFJZX1JVTihbCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzaWduYWwuaD4KKysKKytzdGF0aWMgdm9pZAorKyNpZmRlZiBfX2NwbHVzcGx1cworK3NpZ2ZwZV9oYW5kbGVyIChpbnQgc2lnKQorKyNlbHNlCisrc2lnZnBlX2hhbmRsZXIgKHNpZykgaW50IHNpZzsKKysjZW5kaWYKKyt7CisrICAvKiBFeGl0IHdpdGggY29kZSAwIGlmIFNJR0ZQRSwgd2l0aCBjb2RlIDEgaWYgYW55IG90aGVyIHNpZ25hbC4gICovCisrICBleGl0IChzaWcgIT0gU0lHRlBFKTsKKyt9CisrCisraW50IHggPSAxOworK2ludCB5ID0gMDsKKytpbnQgejsKKytpbnQgbmFuOworKworK2ludCBtYWluICgpCisreworKyAgc2lnbmFsIChTSUdGUEUsIHNpZ2ZwZV9oYW5kbGVyKTsKKysvKiBJUklYIGFuZCBBSVggKHdoZW4gInhsYyAtcWNoZWNrIiBpcyB1c2VkKSB5aWVsZCBzaWduYWwgU0lHVFJBUC4gICovCisrI2lmIChkZWZpbmVkIChfX3NnaSkgfHwgZGVmaW5lZCAoX0FJWCkpICYmIGRlZmluZWQgKFNJR1RSQVApCisrICBzaWduYWwgKFNJR1RSQVAsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysvKiBMaW51eC9TUEFSQyB5aWVsZHMgc2lnbmFsIFNJR0lMTC4gICovCisrI2lmIGRlZmluZWQgKF9fc3BhcmNfXykgJiYgZGVmaW5lZCAoX19saW51eF9fKQorKyAgc2lnbmFsIChTSUdJTEwsIHNpZ2ZwZV9oYW5kbGVyKTsKKysjZW5kaWYKKysKKysgIHogPSB4IC8geTsKKysgIG5hbiA9IHkgLyB5OworKyAgZXhpdCAoMSk7CisrfQorK10sIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPXllcywgZ3RfY3ZfaW50X2RpdmJ5emVyb19zaWdmcGU9bm8sCisrICAgICAgICBbCisrICAgICAgICAgICMgR3Vlc3MgYmFzZWQgb24gdGhlIENQVS4KKysgICAgICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorKyAgICAgICAgICAgIGFscGhhKiB8IGlbMzQ1NjddODYgfCBtNjhrIHwgczM5MCopCisrICAgICAgICAgICAgICBndF9jdl9pbnRfZGl2Ynl6ZXJvX3NpZ2ZwZT0iZ3Vlc3NpbmcgeWVzIjs7CisrICAgICAgICAgICAgKikKKysgICAgICAgICAgICAgIGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlPSJndWVzc2luZyBubyI7OworKyAgICAgICAgICBlc2FjCisrICAgICAgICBdKQorKyAgICBdKQorKyAgY2FzZSAiJGd0X2N2X2ludF9kaXZieXplcm9fc2lnZnBlIiBpbgorKyAgICAqeWVzKSB2YWx1ZT0xOzsKKysgICAgKikgdmFsdWU9MDs7CisrICBlc2FjCisrICBBQ19ERUZJTkVfVU5RVU9URUQoSU5URElWMF9SQUlTRVNfU0lHRlBFLCAkdmFsdWUsCisrICAgIFtEZWZpbmUgaWYgaW50ZWdlciBkaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyBzaWduYWwgU0lHRlBFLl0pCisrXSkKK0luZGV4OiBiaXNvbi0yLjQuMi9tNC9nbGliLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYmlzb24tMi40LjIvbTQvZ2xpYi5tNAorQEAgLTAsMCArMSwxOTYgQEAKKysjIENvbmZpZ3VyZSBwYXRocyBmb3IgR0xJQgorKyMgT3dlbiBUYXlsb3IgICAgIDk3LTExLTMKKysKKytkbmwgQU1fUEFUSF9HTElCKFtNSU5JTVVNLVZFUlNJT04sIFtBQ1RJT04tSUYtRk9VTkQgWywgQUNUSU9OLUlGLU5PVC1GT1VORCBbLCBNT0RVTEVTXV1dXSkKKytkbmwgVGVzdCBmb3IgR0xJQiwgYW5kIGRlZmluZSBHTElCX0NGTEFHUyBhbmQgR0xJQl9MSUJTLCBpZiAiZ21vZHVsZSIgb3IgCisrZG5sIGd0aHJlYWQgaXMgc3BlY2lmaWVkIGluIE1PRFVMRVMsIHBhc3MgdG8gZ2xpYi1jb25maWcKKytkbmwKKytBQ19ERUZVTihBTV9QQVRIX0dMSUIsCisrW2RubCAKKytkbmwgR2V0IHRoZSBjZmxhZ3MgYW5kIGxpYnJhcmllcyBmcm9tIHRoZSBnbGliLWNvbmZpZyBzY3JpcHQKKytkbmwKKytBQ19BUkdfV0lUSChnbGliLXByZWZpeCxbICAtLXdpdGgtZ2xpYi1wcmVmaXg9UEZYICAgUHJlZml4IHdoZXJlIEdMSUIgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldLAorKyAgICAgICAgICAgIGdsaWJfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBnbGliX2NvbmZpZ19wcmVmaXg9IiIpCisrQUNfQVJHX1dJVEgoZ2xpYi1leGVjLXByZWZpeCxbICAtLXdpdGgtZ2xpYi1leGVjLXByZWZpeD1QRlggRXhlYyBwcmVmaXggd2hlcmUgR0xJQiBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCisrICAgICAgICAgICAgZ2xpYl9jb25maWdfZXhlY19wcmVmaXg9IiR3aXRodmFsIiwgZ2xpYl9jb25maWdfZXhlY19wcmVmaXg9IiIpCisrQUNfQVJHX0VOQUJMRShnbGlidGVzdCwgWyAgLS1kaXNhYmxlLWdsaWJ0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBHTElCIHByb2dyYW1dLAorKwkJICAgICwgZW5hYmxlX2dsaWJ0ZXN0PXllcykKKysKKysgIGlmIHRlc3QgeCRnbGliX2NvbmZpZ19leGVjX3ByZWZpeCAhPSB4IDsgdGhlbgorKyAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgLS1leGVjLXByZWZpeD0kZ2xpYl9jb25maWdfZXhlY19wcmVmaXgiCisrICAgICBpZiB0ZXN0IHgke0dMSUJfQ09ORklHK3NldH0gIT0geHNldCA7IHRoZW4KKysgICAgICAgIEdMSUJfQ09ORklHPSRnbGliX2NvbmZpZ19leGVjX3ByZWZpeC9iaW4vZ2xpYi1jb25maWcKKysgICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCB4JGdsaWJfY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorKyAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGdsaWJfY29uZmlnX3ByZWZpeCIKKysgICAgIGlmIHRlc3QgeCR7R0xJQl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorKyAgICAgICAgR0xJQl9DT05GSUc9JGdsaWJfY29uZmlnX3ByZWZpeC9iaW4vZ2xpYi1jb25maWcKKysgICAgIGZpCisrICBmaQorKworKyAgZm9yIG1vZHVsZSBpbiAuICQ0CisrICBkbworKyAgICAgIGNhc2UgIiRtb2R1bGUiIGluCisrICAgICAgICAgZ21vZHVsZSkgCisrICAgICAgICAgICAgIGdsaWJfY29uZmlnX2FyZ3M9IiRnbGliX2NvbmZpZ19hcmdzIGdtb2R1bGUiCisrICAgICAgICAgOzsKKysgICAgICAgICBndGhyZWFkKSAKKysgICAgICAgICAgICAgZ2xpYl9jb25maWdfYXJncz0iJGdsaWJfY29uZmlnX2FyZ3MgZ3RocmVhZCIKKysgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgIGRvbmUKKysKKysgIEFDX1BBVEhfUFJPRyhHTElCX0NPTkZJRywgZ2xpYi1jb25maWcsIG5vKQorKyAgbWluX2dsaWJfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuOTkuNywkMSkKKysgIEFDX01TR19DSEVDS0lORyhmb3IgR0xJQiAtIHZlcnNpb24gPj0gJG1pbl9nbGliX3ZlcnNpb24pCisrICBub19nbGliPSIiCisrICBpZiB0ZXN0ICIkR0xJQl9DT05GSUciID0gIm5vIiA7IHRoZW4KKysgICAgbm9fZ2xpYj15ZXMKKysgIGVsc2UKKysgICAgR0xJQl9DRkxBR1M9YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLWNmbGFnc2AKKysgICAgR0xJQl9MSUJTPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS1saWJzYAorKyAgICBnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uPWAkR0xJQl9DT05GSUcgJGdsaWJfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorKyAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wxLydgCisrICAgIGdsaWJfY29uZmlnX21pbm9yX3ZlcnNpb249YCRHTElCX0NPTkZJRyAkZ2xpYl9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCisrICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDIvJ2AKKysgICAgZ2xpYl9jb25maWdfbWljcm9fdmVyc2lvbj1gJEdMSUJfQ09ORklHICRnbGliX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKysgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAorKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9nbGlidGVzdCIgPSAieHllcyIgOyB0aGVuCisrICAgICAgYWNfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisrICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKysgICAgICBDRkxBR1M9IiRDRkxBR1MgJEdMSUJfQ0ZMQUdTIgorKyAgICAgIExJQlM9IiRHTElCX0xJQlMgJExJQlMiCisrZG5sCisrZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIEdMSUIgaXMgc3VmZmljaWVudGx5IG5ldy4gKEFsc28gc2FuaXR5CisrZG5sIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiBnbGliLWNvbmZpZyB0byBzb21lIGV4dGVudAorK2RubAorKyAgICAgIHJtIC1mIGNvbmYuZ2xpYnRlc3QKKysgICAgICBBQ19UUllfUlVOKFsKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysKKytpbnQgCisrbWFpbiAoKQorK3sKKysgIGludCBtYWpvciwgbWlub3IsIG1pY3JvOworKyAgY2hhciAqdG1wX3ZlcnNpb247CisrCisrICBzeXN0ZW0gKCJ0b3VjaCBjb25mLmdsaWJ0ZXN0Iik7CisrCisrICAvKiBIUC9VWCA5ICglQCMhKSB3cml0ZXMgdG8gc3NjYW5mIHN0cmluZ3MgKi8KKysgIHRtcF92ZXJzaW9uID0gZ19zdHJkdXAoIiRtaW5fZ2xpYl92ZXJzaW9uIik7CisrICBpZiAoc3NjYW5mKHRtcF92ZXJzaW9uLCAiJWQuJWQuJWQiLCAmbWFqb3IsICZtaW5vciwgJm1pY3JvKSAhPSAzKSB7CisrICAgICBwcmludGYoIiVzLCBiYWQgdmVyc2lvbiBzdHJpbmdcbiIsICIkbWluX2dsaWJfdmVyc2lvbiIpOworKyAgICAgZXhpdCgxKTsKKysgICB9CisrCisrICBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiAhPSAkZ2xpYl9jb25maWdfbWFqb3JfdmVyc2lvbikgfHwKKysgICAgICAoZ2xpYl9taW5vcl92ZXJzaW9uICE9ICRnbGliX2NvbmZpZ19taW5vcl92ZXJzaW9uKSB8fAorKyAgICAgIChnbGliX21pY3JvX3ZlcnNpb24gIT0gJGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb24pKQorKyAgICB7CisrICAgICAgcHJpbnRmKCJcbioqKiAnZ2xpYi1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IEdMSUIgKCVkLiVkLiVkKVxuIiwgCisrICAgICAgICAgICAgICRnbGliX2NvbmZpZ19tYWpvcl92ZXJzaW9uLCAkZ2xpYl9jb25maWdfbWlub3JfdmVyc2lvbiwgJGdsaWJfY29uZmlnX21pY3JvX3ZlcnNpb24sCisrICAgICAgICAgICAgIGdsaWJfbWFqb3JfdmVyc2lvbiwgZ2xpYl9taW5vcl92ZXJzaW9uLCBnbGliX21pY3JvX3ZlcnNpb24pOworKyAgICAgIHByaW50ZiAoIioqKiB3YXMgZm91bmQhIElmIGdsaWItY29uZmlnIHdhcyBjb3JyZWN0LCB0aGVuIGl0IGlzIGJlc3RcbiIpOworKyAgICAgIHByaW50ZiAoIioqKiB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uIG9mIEdMSUIuIFlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGZpeCB0aGUgZXJyb3JcbiIpOworKyAgICAgIHByaW50ZigiKioqIGJ5IG1vZGlmeWluZyB5b3VyIExEX0xJQlJBUllfUEFUSCBlbnZpcm9tZW50IHZhcmlhYmxlLCBvciBieSBlZGl0aW5nXG4iKTsKKysgICAgICBwcmludGYoIioqKiAvZXRjL2xkLnNvLmNvbmYuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCBpc1xuIik7CisrICAgICAgcHJpbnRmKCIqKiogcmVxdWlyZWQgb24geW91ciBzeXN0ZW0uXG4iKTsKKysgICAgICBwcmludGYoIioqKiBJZiBnbGliLWNvbmZpZyB3YXMgd3JvbmcsIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgR0xJQl9DT05GSUdcbiIpOworKyAgICAgIHByaW50ZigiKioqIHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGNvcHkgb2YgZ2xpYi1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGUgY29uZmlnLmNhY2hlXG4iKTsKKysgICAgICBwcmludGYoIioqKiBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOworKyAgICB9IAorKyAgZWxzZSBpZiAoKGdsaWJfbWFqb3JfdmVyc2lvbiAhPSBHTElCX01BSk9SX1ZFUlNJT04pIHx8CisrCSAgIChnbGliX21pbm9yX3ZlcnNpb24gIT0gR0xJQl9NSU5PUl9WRVJTSU9OKSB8fAorKyAgICAgICAgICAgKGdsaWJfbWljcm9fdmVyc2lvbiAhPSBHTElCX01JQ1JPX1ZFUlNJT04pKQorKyAgICB7CisrICAgICAgcHJpbnRmKCIqKiogR0xJQiBoZWFkZXIgZmlsZXMgKHZlcnNpb24gJWQuJWQuJWQpIGRvIG5vdCBtYXRjaFxuIiwKKysJICAgICBHTElCX01BSk9SX1ZFUlNJT04sIEdMSUJfTUlOT1JfVkVSU0lPTiwgR0xJQl9NSUNST19WRVJTSU9OKTsKKysgICAgICBwcmludGYoIioqKiBsaWJyYXJ5ICh2ZXJzaW9uICVkLiVkLiVkKVxuIiwKKysJICAgICBnbGliX21ham9yX3ZlcnNpb24sIGdsaWJfbWlub3JfdmVyc2lvbiwgZ2xpYl9taWNyb192ZXJzaW9uKTsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgaWYgKChnbGliX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKKysgICAgICAgICgoZ2xpYl9tYWpvcl92ZXJzaW9uID09IG1ham9yKSAmJiAoZ2xpYl9taW5vcl92ZXJzaW9uID4gbWlub3IpKSB8fAorKyAgICAgICAgKChnbGliX21ham9yX3ZlcnNpb24gPT0gbWFqb3IpICYmIChnbGliX21pbm9yX3ZlcnNpb24gPT0gbWlub3IpICYmIChnbGliX21pY3JvX3ZlcnNpb24gPj0gbWljcm8pKSkKKysgICAgICB7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgICAgfQorKyAgICAgZWxzZQorKyAgICAgIHsKKysgICAgICAgIHByaW50ZigiXG4qKiogQW4gb2xkIHZlcnNpb24gb2YgR0xJQiAoJWQuJWQuJWQpIHdhcyBmb3VuZC5cbiIsCisrICAgICAgICAgICAgICAgZ2xpYl9tYWpvcl92ZXJzaW9uLCBnbGliX21pbm9yX3ZlcnNpb24sIGdsaWJfbWljcm9fdmVyc2lvbik7CisrICAgICAgICBwcmludGYoIioqKiBZb3UgbmVlZCBhIHZlcnNpb24gb2YgR0xJQiBuZXdlciB0aGFuICVkLiVkLiVkLiBUaGUgbGF0ZXN0IHZlcnNpb24gb2ZcbiIsCisrCSAgICAgICBtYWpvciwgbWlub3IsIG1pY3JvKTsKKysgICAgICAgIHByaW50ZigiKioqIEdMSUIgaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5ndGsub3JnLlxuIik7CisrICAgICAgICBwcmludGYoIioqKlxuIik7CisrICAgICAgICBwcmludGYoIioqKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGluc3RhbGxlZCBhIHN1ZmZpY2llbnRseSBuZXcgdmVyc2lvbiwgdGhpcyBlcnJvclxuIik7CisrICAgICAgICBwcmludGYoIioqKiBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB3cm9uZyBjb3B5IG9mIHRoZSBnbGliLWNvbmZpZyBzaGVsbCBzY3JpcHQgaXNcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogYmVpbmcgZm91bmQuIFRoZSBlYXNpZXN0IHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIG9sZCB2ZXJzaW9uXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIG9mIEdMSUIsIGJ1dCB5b3UgY2FuIGFsc28gc2V0IHRoZSBHTElCX0NPTkZJRyBlbnZpcm9ubWVudCB0byBwb2ludCB0byB0aGVcbiIpOworKyAgICAgICAgcHJpbnRmKCIqKiogY29ycmVjdCBjb3B5IG9mIGdsaWItY29uZmlnLiAoSW4gdGhpcyBjYXNlLCB5b3Ugd2lsbCBoYXZlIHRvXG4iKTsKKysgICAgICAgIHByaW50ZigiKioqIG1vZGlmeSB5b3VyIExEX0xJQlJBUllfUEFUSCBlbnZpcm9tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZlxuIik7CisrICAgICAgICBwcmludGYoIioqKiBzbyB0aGF0IHRoZSBjb3JyZWN0IGxpYnJhcmllcyBhcmUgZm91bmQgYXQgcnVuLXRpbWUpKVxuIik7CisrICAgICAgfQorKyAgICB9CisrICByZXR1cm4gMTsKKyt9CisrXSwsIG5vX2dsaWI9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKysgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICAgICBmaQorKyAgZmkKKysgIGlmIHRlc3QgIngkbm9fZ2xpYiIgPSB4IDsgdGhlbgorKyAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKSAgICAgCisrICBlbHNlCisrICAgICBBQ19NU0dfUkVTVUxUKG5vKQorKyAgICAgaWYgdGVzdCAiJEdMSUJfQ09ORklHIiA9ICJubyIgOyB0aGVuCisrICAgICAgIGVjaG8gIioqKiBUaGUgZ2xpYi1jb25maWcgc2NyaXB0IGluc3RhbGxlZCBieSBHTElCIGNvdWxkIG5vdCBiZSBmb3VuZCIKKysgICAgICAgZWNobyAiKioqIElmIEdMSUIgd2FzIGluc3RhbGxlZCBpbiBQUkVGSVgsIG1ha2Ugc3VyZSBQUkVGSVgvYmluIGlzIGluIgorKyAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIEdMSUJfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoZSIKKysgICAgICAgZWNobyAiKioqIGZ1bGwgcGF0aCB0byBnbGliLWNvbmZpZy4iCisrICAgICBlbHNlCisrICAgICAgIGlmIHRlc3QgLWYgY29uZi5nbGlidGVzdCA7IHRoZW4KKysgICAgICAgIDoKKysgICAgICAgZWxzZQorKyAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBHTElCIHRlc3QgcHJvZ3JhbSwgY2hlY2tpbmcgd2h5Li4uIgorKyAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJEdMSUJfQ0ZMQUdTIgorKyAgICAgICAgICBMSUJTPSIkTElCUyAkR0xJQl9MSUJTIgorKyAgICAgICAgICBBQ19UUllfTElOSyhbCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKytdLCAgICAgIFsgcmV0dXJuICgoZ2xpYl9tYWpvcl92ZXJzaW9uKSB8fCAoZ2xpYl9taW5vcl92ZXJzaW9uKSB8fCAoZ2xpYl9taWNyb192ZXJzaW9uKSk7IF0sCisrICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGNvbXBpbGVkLCBidXQgZGlkIG5vdCBydW4uIFRoaXMgdXN1YWxseSBtZWFucyIKKysgICAgICAgICAgZWNobyAiKioqIHRoYXQgdGhlIHJ1bi10aW1lIGxpbmtlciBpcyBub3QgZmluZGluZyBHTElCIG9yIGZpbmRpbmcgdGhlIHdyb25nIgorKyAgICAgICAgICBlY2hvICIqKiogdmVyc2lvbiBvZiBHTElCLiBJZiBpdCBpcyBub3QgZmluZGluZyBHTElCLCB5b3UnbGwgbmVlZCB0byBzZXQgeW91ciIKKysgICAgICAgICAgZWNobyAiKioqIExEX0xJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgZWRpdCAvZXRjL2xkLnNvLmNvbmYgdG8gcG9pbnQiCisrICAgICAgICAgIGVjaG8gIioqKiB0byB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uICBBbHNvLCBtYWtlIHN1cmUgeW91IGhhdmUgcnVuIGxkY29uZmlnIGlmIHRoYXQiCisrICAgICAgICAgIGVjaG8gIioqKiBpcyByZXF1aXJlZCBvbiB5b3VyIHN5c3RlbSIKKysJICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhbiBvbGQgdmVyc2lvbiBpbnN0YWxsZWQsIGl0IGlzIGJlc3QgdG8gcmVtb3ZlIGl0LCBhbHRob3VnaCIKKysgICAgICAgICAgZWNobyAiKioqIHlvdSBtYXkgYWxzbyBiZSBhYmxlIHRvIGdldCB0aGluZ3MgdG8gd29yayBieSBtb2RpZnlpbmcgTERfTElCUkFSWV9QQVRIIgorKyAgICAgICAgICBlY2hvICIqKioiCisrICAgICAgICAgIGVjaG8gIioqKiBJZiB5b3UgaGF2ZSBhIFJlZEhhdCA1LjAgc3lzdGVtLCB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUgR1RLIHBhY2thZ2UgdGhhdCIKKysgICAgICAgICAgZWNobyAiKioqIGNhbWUgd2l0aCB0aGUgc3lzdGVtIHdpdGggdGhlIGNvbW1hbmQiCisrICAgICAgICAgIGVjaG8gIioqKiIKKysgICAgICAgICAgZWNobyAiKioqICAgIHJwbSAtLWVyYXNlIC0tbm9kZXBzIGd0ayBndGstZGV2ZWwiIF0sCisrICAgICAgICBbIGVjaG8gIioqKiBUaGUgdGVzdCBwcm9ncmFtIGZhaWxlZCB0byBjb21waWxlIG9yIGxpbmsuIFNlZSB0aGUgZmlsZSBjb25maWcubG9nIGZvciB0aGUiCisrICAgICAgICAgIGVjaG8gIioqKiBleGFjdCBlcnJvciB0aGF0IG9jY3VyZWQuIFRoaXMgdXN1YWxseSBtZWFucyBHTElCIHdhcyBpbmNvcnJlY3RseSBpbnN0YWxsZWQiCisrICAgICAgICAgIGVjaG8gIioqKiBvciB0aGF0IHlvdSBoYXZlIG1vdmVkIEdMSUIgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCisrICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBnbGliLWNvbmZpZyBzY3JpcHQ6ICRHTElCX0NPTkZJRyIgXSkKKysgICAgICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCisrICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICAgICAgIGZpCisrICAgICBmaQorKyAgICAgR0xJQl9DRkxBR1M9IiIKKysgICAgIEdMSUJfTElCUz0iIgorKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKysgIGZpCisrICBBQ19TVUJTVChHTElCX0NGTEFHUykKKysgIEFDX1NVQlNUKEdMSUJfTElCUykKKysgIHJtIC1mIGNvbmYuZ2xpYnRlc3QKKytdKQorSW5kZXg6IGJpc29uLTIuNC4yL200L2lzYy1wb3NpeC5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGJpc29uLTIuNC4yL200L2lzYy1wb3NpeC5tNAorQEAgLTAsMCArMSwyNiBAQAorKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzIuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZTg4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9iaXNvbi9iaXNvbl8yLjMuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJHTlUgUHJvamVjdCBwYXJzZXIgZ2VuZXJhdG9yICh5YWNjIHJlcGxhY2VtZW50KSIKK0RFU0NSSVBUSU9OID0gIkJpc29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnNlciBnZW5lcmF0b3IgdGhhdCBjb252ZXJ0cyBhbiBhbm5vdGF0ZWQgY29udGV4dC1mcmVlIGdyYW1tYXIgaW50byBcCithbiBMQUxSKDEpIG9yIEdMUiBwYXJzZXIgZm9yIHRoYXQgZ3JhbW1hci4gIEJpc29uIGlzIHVwd2FyZCBjb21wYXRpYmxlIHdpdGggWWFjYzogYWxsIHByb3Blcmx5LXdyaXR0ZW4gWWFjYyBcCitncmFtbWFycyBvdWdodCB0byB3b3JrIHdpdGggQmlzb24gd2l0aCBubyBjaGFuZ2UuIEFueW9uZSBmYW1pbGlhciB3aXRoIFlhY2Mgc2hvdWxkIGJlIGFibGUgdG8gdXNlIEJpc29uIHdpdGggXAorbGl0dGxlIHRyb3VibGUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lYjcyM2I2MTUzOWZlZWYwMTNkZTQ3NmU2OGI1YzUwYSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9iaXNvbi9iaXNvbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgZmlsZTovL2Jpc29uLTIuM19tNC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjIyMzI3ZWZkZDUwODBlMmIxYWNiNmU1NjBhMDRiNDNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyZjc4YWE0NzYxYTc0Y2ViN2ZkZjc3MGYzNTU0ZGQ4NDMwOGMzYjkzYzQyNTVlM2E1YzE3NTU4ZWNkYTI5M2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworYWNwYXRocyA9ICItSSAke1N9L200IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC8qZ2wubTQKKwljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dldHRleHQvcG8vTWFrZWZpbGUuaW4uaW4gJHtTfS9ydW50aW1lLXBvLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jpc29uL2Jpc29uXzMuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGU5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYmlzb24vYmlzb25fMy4wLjQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJHTlUgUHJvamVjdCBwYXJzZXIgZ2VuZXJhdG9yICh5YWNjIHJlcGxhY2VtZW50KSIKK0RFU0NSSVBUSU9OID0gIkJpc29uIGlzIGEgZ2VuZXJhbC1wdXJwb3NlIHBhcnNlciBnZW5lcmF0b3IgdGhhdCBjb252ZXJ0cyBhbiBhbm5vdGF0ZWQgY29udGV4dC1mcmVlIGdyYW1tYXIgaW50byBcCithbiBMQUxSKDEpIG9yIEdMUiBwYXJzZXIgZm9yIHRoYXQgZ3JhbW1hci4gIEJpc29uIGlzIHVwd2FyZCBjb21wYXRpYmxlIHdpdGggWWFjYzogYWxsIHByb3Blcmx5LXdyaXR0ZW4gWWFjYyBcCitncmFtbWFycyBvdWdodCB0byB3b3JrIHdpdGggQmlzb24gd2l0aCBubyBjaGFuZ2UuIEFueW9uZSBmYW1pbGlhciB3aXRoIFlhY2Mgc2hvdWxkIGJlIGFibGUgdG8gdXNlIEJpc29uIHdpdGggXAorbGl0dGxlIHRyb3VibGUuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jpc29uLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jpc29uL2Jpc29uLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtc3JjLWxvY2FsLm1rLWZpeC1wYXJhbGxlbC1pc3N1ZS5wYXRjaCBcCisiCisKKyMgTm8gcG9pbnQgaW4gaGFyZGNvZGluZyBwYXRoIHRvIG00LCBqdXN0IHVzZSBQQVRICitFWFRSQV9PRUNPTkYgKz0gIk00PW00IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzM0MjIwMWRlMTA0Y2M5Y2UwYTIxZTBhZDEwZDQwMjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTcyNDI4Yzc5MTdiZGY5ZmE5M2NiODE4MWM5NzFiNmUyMjgzNDEyNTg0OGNmMWQwM2NlMTBiMWJiMDcxNmZlMSIKKworTERGTEFHU19wcmVwZW5kX2xpYmMtdWNsaWJjID0gIiAtbHJ0ICIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdldHRleHQtbWluaW1hbC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworYWNwYXRocyA9ICItSSAke1N9L200IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJZm9yIGkgaW4gbWZjYWxjIGNhbGMrKyBycGNhbGM7IGRvIG1rZGlyIC1wICR7Qn0vZXhhbXBsZXMvJGk7IGRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2Jpc29uIFwKKwkJQklTT05fUEtHREFUQURJUj0ke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2Jpc29uCit9CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyL2Jvb3RjaGFydGRfc3RvcC5zaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ib290Y2hhcnQyL2Jvb3RjaGFydDIvYm9vdGNoYXJ0ZF9zdG9wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYTc4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyL2Jvb3RjaGFydGRfc3RvcC5zaApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGJvb3RjaGFydGRfc3RvcAorIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkYWxsCisjIFJlcXVpcmVkLVN0b3A6IAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBTdG9wIGJvb3RjaGFydGQgY29sbGVjdGlvbgorIyBEZXNjcmlwdGlvbjogICAgICAgVGhpcyBzY3JpcHQgYWNjb21wYW5pZXMgYm9vdGNoYXJ0ZCBmcm9tIGJvb3RjaGFydDIuIAorIyAgICAgICAgICAgICAgICAgICAgYm9vdGNoYXJ0ZCBzaG91bGQgc3RvcCBkZXRlY3QgdGhlIGVuZCBvZiB0aGUgYm9vdCBwcm9jZXNzCisjICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGlmIGEgd2luZG93IG1hbmFnZXIgaXMgbGF1bmNoZWQsIGJ1dCBmb3IKKyMgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtbGluZSBvbmx5IG9wZXJhdGluZyBzeXN0ZW1zLCB0aGlzIHNjcmlwdCBzaG91bGQgYmUKKyMgICAgICAgICAgICAgICAgICAgIHVzZWQgaW5zdGVhZC4KKyMjIyBFTkQgSU5JVCBJTkZPCisKKy9zYmluL2Jvb3RjaGFydGQgc3RvcAorCis6IGV4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYm9vdGNoYXJ0Mi9ib290Y2hhcnQyXzAuMTQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjBhOTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Jvb3RjaGFydDIvYm9vdGNoYXJ0Ml8wLjE0LjcuYmIKQEAgLTAsMCArMSwxNTQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDEzIExHIEVsZWN0cm9uaWNzLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorCisjIFRoaXMgcmVjaXBlIGNyZWF0ZXMgcGFja2FnZXMgZm9yIHRoZSBib290Y2hhcnQyIHN5c3RlbS13aWRlIHByb2ZpbGVyIGRhZW1vbiAKKyMgYW5kIHJlbGF0ZWQgdXRpbGl0aWVzLiBEZXBlbmRpbmcgb24gdGhlIGltYWdlcyB5b3UncmUgYnVpbGRpbmcsIGFkZGl0aW9uYWwKKyMgY29uZmlndXJhdGlvbiBtYXkgYmUgbmVlZGVkIGluIG9yZGVyIHRvIHVzZSBpdC4KKyMKKyMgUGFja2FnZXM6CisjICAgKiAgIGJvb3RjaGFydDIgLSBUaGUgZGFlbW9uIGl0c2VsZi4KKyMgICAqICAgcHlib290Y2hhcnRndWkgLSBQeXRob24gcHJvZ3JhbSB0byB2aXN1YWxpemUgYW5kIGRpc3BsYXkgdGhlIGRhdGEKKyMgICAgICAgY29sbGVjdGVkIGJ5IGJvb3RjaGFydDIgb3IgY29tcGF0aWJsZSBkYWVtb25zIHN1Y2ggYXMgdGhlIG9yaWdpbmFsIAorIyAgICAgICBib290Y2hhcnQuCisjICAgKiAgIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IC0gQSBTeXNWIGluaXQgc2NyaXB0IHRvIHN0b3AgZGF0YSBjb2xsZWN0aW9uCisjICAgICAgIHdoZW4gYm9vdGluZyBjb21wbGV0ZXMgKHNlZSBiZWxvdyBmb3IgZGV0YWlscy4pCisjCisjIFdoaWxlIGJvb3RjaGFydDIgaXMgZGVzaWduZWQgdG8gc3RvcCBjb2xsZWN0aW5nIGRhdGEgcm91Z2hseSB3aGVuIHRoZSBib290IAorIyBwcm9jZXNzIGNvbXBsZXRlcywgaXQgaXMgbm90IGV4YWN0bHkgYSBzdG9wd2F0Y2guIEl0IGhhcyBhIGxpc3Qgb2YgcHJvZ3JhbXMgCisjIHdoaWNoIGFyZSBzdXBwb3NlZCBzaWduaWZ5IHRoYXQgdGhlIGJvb3QgcHJvY2VzcyBoYXMgY29tcGxldGVkIChmb3IgZXhhbXBsZSwKKyMgb3BlbmJveCBvciBnbm9tZS1zaGVsbCwpIGJ1dCBpdCB3YWl0cyBhIGZ1bGwgMjAgc2Vjb25kcyBhZnRlciBzdWNoIGEgcHJvZ3JhbQorIyBpcyBsYXVuY2hlZCBiZWZvcmUgc3RvcHBpbmcgaXRzZWxmLCB0byBjb2xsZWN0IGFkZGl0aW9uYWwgZGF0YS4KKyMKKyMgSWYgeW91IGFyZSB1c2luZyBhIHdpbmRvdyBtYW5hZ2VyIG9yIEdVSSB3aGljaCBpc24ndCBpbmNsdWRlZCBpbiBib290Y2hhcnQyJ3MKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGUsIHlvdSBzaG91bGQgd3JpdGUgYmJhcHBlbmQgZmlsZSB0byBhbWVuZAorIyBib290Y2hhcnRkLmNvbmYgYW5kIGFkZCBpdCB0byBFWElUX1BST0MuIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBzaG93biBpbiB0aGlzCisjIHJlY2lwZSwgd2hlcmUgdGhlIE1hdGNoYm94IHdpbmRvdyBtYW5hZ2VyICh1c2VkIGJ5IFNhdG8pIGlzIGFkZGVkLgorIworIyBJZiB5b3Ugd2FudCBkYXRhIGNvbGxlY3Rpb24gdG8gZW5kIGF0IGEgY2VydGFpbiBwb2ludCBleGFjdGx5LCB5b3Ugc2hvdWxkCisjIGFycmFuZ2UgZm9yIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBiZSBydW46CisjICAgYm9vdGNoYXJ0ZCBzdG9wCisjIFlvdSBtaWdodCBzZXQgdGhpcyBjb21tYW5kIHRvIGJlIGxhdW5jaGVkIGJ5IHRoZSBkZXNrdG9wIGVudmlyb25tZW50IHNoaXBwZWQKKyMgb24gdGhlIGltYWdlIHlvdSdyZSBidWlsZGluZyBhZnRlciB0aGUgb3RoZXIgc3RhcnR1cCBwcm9ncmFtcyBhcmUgY29tcGxldGUuCisjIFRoaXMgd2lsbCBub3QgaW5jdXIgdGhlIDIwIHNlY29uZCB3YWl0IHBlcmlvZCBhbmQgd2lsbCBjYXVzZSBib290Y2hhcnQyIHRvCisjIGJlaGF2ZSBhIGJpdCBtb3JlIGxpa2UgYSBzdG9wd2F0Y2guIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBzaG93biBpbiB0aGlzIAorIyByZWNpcGUsIHNwZWNpZmljYWxseSB0aGUgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgcGFja2FnZSwgd2hpY2ggc3RvcHMgZGF0YQorIyBjb2xsZWN0aW9uIGFzIHRoZSBsYXN0IGFjdGlvbiB3aGVuIHN3aXRjaGluZyB0byBydW5sZXZlbHMgMiB0aHJvdWdoIDUuIFlvdSBjYW4KKyMgYWRkIGJvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0IHRvIElNQUdFX0lOU1RBTEwgaWYgeW91IG5lZWQgdG8gdXNlIGl0LgorIworIyBVbmxlc3MgeW91J3JlIGRvaW5nIHNvbWV0aGluZyBzcGVjaWFsLCBpZiB5b3VyIGltYWdlIGRvZXMgbm90IGxhdW5jaCBhbiBYIAorIyB3aW5kb3cgbWFuYWdlciwgeW91IHdpbGwgbmVlZCB0byBhZGQgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQgdG8geW91ciBpbWFnZS4KKyMKKyMgQm9vdGNoYXJ0MiBjYW4gYmUgc3RhcnRlZCBpbiB0d28gd2F5cy4gRGF0YSBjb2xsZWN0aW9uIGNhbiBiZSBpbml0aWF0ZWQgYnkKKyMgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisjICAgYm9vdGNoYXJ0ZCBzdGFydAorIyBIb3dldmVyLCBmb3IgdGhlIG1vc3QgY29tcGxldGUgZGF0YSwgdGhlIGJvb3RjaGFydDIgZGV2ZWxvcGVycyByZWNvbW1lbmQKKyMgcnVubmluZyBpdCBhcyBQSUQgMS4gVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUga2VybmVsIAorIyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyBpbiB0aGUgYm9vdGxvYWRlciBzZXR1cDoKKyMgICBpbml0PS9zYmluL2Jvb3RjaGFydGQKKyMgV2hlbiBpbnZva2VkIHRoaXMgd2F5LCBib290Y2hhcnQyIHdpbGwgc2V0IGl0c2VsZiB1cCBhbmQgdGhlbiBhdXRvbWF0aWNhbGx5IAorIyBydW4gL3NiaW4vaW5pdC4gRm9yIGV4YW1wbGUsIHdoZW4gYm9vdGluZyB0aGUgZGVmYXVsdCBxZW11eDg2IGltYWdlLCBvbmUgbWlnaHQKKyMgdXNlIGEgY29tbWFuZCBsaWtlIHRoaXM6CisjICAgcnVucWVtdSBxZW11eDg2IGJvb3RwYXJhbXM9ImluaXRjYWxsX2RlYnVnIHByaW50ay50aW1lPXkgcXVpZXQgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0PS9zYmluL2Jvb3RjaGFydGQiCisjCisjIE5laXRoZXIgbWV0aG9kIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGhlcmUsIGNob29zZSB3aGF0IHdvcmtzIGZvciB5b3UuCisjCisjIElmIHlvdSBhcmUgYnVpbGRpbmcgeW91ciBpbWFnZSB3aXRoIHN5c3RlbWQgaW5zdGVhZCBvZiBTeXNWIGluaXQsIGJvb3RjaGFydDIKKyMgaW5jbHVkZXMgc3lzdGVtZCBzZXJ2aWNlIGZpbGVzIHRvIGJlZ2luIGNvbGxlY3Rpb24gYXV0b21hdGljYWxseSBhdCBib290IGFuZCAKKyMgZW5kIGNvbGxlY3Rpb24gYXV0b21hdGljYWxseSAyMCBzZWNvbmRzIGFmdGVyIHRoZSBib290IHByb2Nlc3MgaGFzIGNvbXBsZXRlZC4KKyMgSG93ZXZlciwgYmUgYXdhcmUgdGhhdCBzeXN0ZW1kIHRlbmRzIHRvIHN0YXJ0IGJvb3RjaGFydDIgcmVsYXRpdmVseSBsYXRlIGludG8KKyMgdGhlIGJvb3QgcHJvY2Vzcywgc28gaXQncyBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlIGJvb3RjaGFydDIgYXMgUElEIDEuIElmIAorIyB5b3UncmUgdXNpbmcgc3lzdGVtZCBhbmQgeW91IHdpc2ggdG8gdXNlIGFub3RoZXIgbWV0aG9kIHRvIHN0b3AgZGF0YQorIyBjb2xsZWN0aW9uIGF0IGEgdGltZSBvZiB5b3VyIGNob29zaW5nLCB5b3UgbWF5IGRvIHNvIGFzIGxvbmcgYXMgeW91IGdldCB0byBpdAorIyBiZWZvcmUgdGhlIDIwIHNlY29uZCB0aW1lb3V0IG9mIHRoZSBzeXN0ZW1kIHNlcnZpY2UgZmlsZXMuIEFsc28sIHlvdSBtYXkgd3JpdGUKKyMgYSBiYmFwcGVuZCB0byBwYXRjaCBib290Y2hhcnQyLWRvbmUudGltZXIuaW4gdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlCisjIHRpbWVvdXQuIERlY3JlYXNpbmcgaXQgdG8gMCB3aWxsIG1ha2UgaXQgYmVoYXZlIGxpa2UKKyMgYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQuCisjCisjIEJ5IGRlZmF1bHQsIHdoZW4gZGF0YSBjb2xsZWN0aW9uIGlzIHN0b3BwZWQsIGEgZmlsZSBuYW1lZCBib290Y2hhcnQudGd6IHdpbGwKKyMgYmUgY3JlYXRlZCBpbiAvdmFyL2xvZy4gSWYgcHlib290Y2hhcnRndWkgaXMgaW5jbHVkZWQgaW4geW91ciBpbWFnZSwKKyMgYm9vdGNoYXJ0LnBuZyB3aWxsIGFsc28gYmUgY3JlYXRlZCBhdCB0aGUgc2FtZSB0aW1lLiBIb3dldmVyLCB0aGlzIHJlc3VsdHMgaW4KKyMgYSBub3RpY2VhYmxlIGhpdGNoIG9yIHBhdXNlIGF0IGJvb3QgdGltZSwgd2hpY2ggbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50IG9uIGFuCisjIGVtYmVkZGVkIGRldmljZS4gU28geW91IG1heSBwcmVmZXIgdG8gb21pdCBweWJvb3RjaGFydGd1aSBmcm9tIHlvdXIgaW1hZ2UuIEluCisjIHRoYXQgY2FzZSwgY29weSBib290Y2hhcnQudGd6IG92ZXIgdG8geW91ciBkZXZlbG9wbWVudCBzeXN0ZW0gYW5kIGdlbmVyYXRlCisjIGJvb3RjaGFydC5wbmcgdGhlcmUuIFRvIGdldCBweWJvb3RjaGFydGd1aSBvbiB5b3VyIGRldmVsb3BtZW50IHN5c3RlbSwgeW91IGNhbgorIyBlaXRoZXIgaW5zdGFsbCBpdCBkaXJlY3RseSBmcm9tIHNvbWUgb3RoZXIgc291cmNlLCBvciBidWlsZCBib290Y2hhcnQyLW5hdGl2ZQorIyBhbmQgZmluZCBweWJvb3RjaGFydGd1aSBpbiB0aGUgbmF0aXZlIHN5c3Jvb3Q6CisjICAgIGJpdGJha2UgYm9vdGNoYXJ0Mi1uYXRpdmUKKyMgICAuL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9weWJvb3RjaGFydGd1aSAvcGF0aC90by9ib290Y2hhcnQudGd6CisjIE5vdGUgdGhhdCwgd2hldGhlciBpbnN0YWxsZWQgb24geW91ciBidWlsZCBzeXN0ZW0gb3Igb24geW91ciBpbWFnZSwgdGhlIAorIyBweWJvb3RjaGFydGd1aSBwcm92aWRlZCBieSB0aGlzIHJlY2lwZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtaSBvcHRpb24uIFlvdSAKKyMgd2lsbCBuZWVkIHRvIGluc3RhbGwgcHlib290Y2hhcnRndWkgYnkgb3RoZXIgbWVhbnMgaW4gb3JkZXIgdG8gcnVuIGl0IGluCisjIGludGVyYWN0aXZlIG1vZGUuCisKK1NVTU1BUlkgPSAiQm9vdGluZyBzZXF1ZW5jZSBhbmQgQ1BVLEkvTyB1c2FnZSBtb25pdG9yIgorREVTQ1JJUFRJT04gPSAiTW9uaXRvcnMgd2hlcmUgdGhlIHN5c3RlbSBzcGVuZHMgaXRzIHRpbWUgYXQgc3RhcnQsIGNyZWF0aW5nIGEgZ3JhcGggb2YgYWxsIHByb2Nlc3NlcywgZGlzayB1dGlsaXphdGlvbiwgYW5kIHdhaXQgdGltZS4iCitBVVRIT1IgPSAiV29uaG9uZyBLd29uIDx3b25ob25nLmt3b25AbGdlLmNvbT4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vbW1lZWtzL2Jvb3RjaGFydCIKK0xJQ0VOU0UgPSAiR1BMLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQ0YWM0Njc4MzExMjU0ZGI2MmVkZjhmZDM5Y2I4MTI0IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vbW1lZWtzL2Jvb3RjaGFydC5naXQgXAorICAgICAgICAgICBmaWxlOi8vYm9vdGNoYXJ0ZF9zdG9wLnNoIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCitTUkNSRVYgPSAiNmYwNTBiNjVhZTlmMjY2NjQ1ZjA0ZjBhZWNhYjllZmI4ODM3NWYxYyIKKworaW5oZXJpdCBzeXN0ZW1kCitpbmhlcml0IHVwZGF0ZS1yYy5kCitpbmhlcml0IHB5dGhvbm5hdGl2ZQorCisjIFRoZSBvbmx5IHJlYXNvbiB0byBidWlsZCBib290Y2hhcnQyLW5hdGl2ZSBpcyBmb3IgYSBuYXRpdmUgcHlib290Y2hhcnRndWkuCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImJvb3RjaGFydDIuc2VydmljZSBib290Y2hhcnQyLWRvbmUuc2VydmljZSBib290Y2hhcnQyLWRvbmUudGltZXIiCisKK1VQREFURVJDUE4gPSAiYm9vdGNoYXJ0ZC1zdG9wLWluaXRzY3JpcHQiCitJTklUU0NSSVBUX05BTUUgPSAiYm9vdGNoYXJ0ZF9zdG9wLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTkgMiAzIDQgNSAuIgorCisjIFdlIHdhbnQgbmF0aXZlIHB5Ym9vdGNoYXJ0Z3VpIHRvIGV4ZWN1dGUgd2l0aCB0aGUgY29ycmVjdCBQeXRob24gaW50ZXJwZXRlci4KK2RvX2NvbXBpbGVfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgZWNobyAiIyEgJHtQWVRIT059IiB8IGNhdCAtICR7U30vcHlib290Y2hhcnRndWkucHkgPiAke1dPUktESVJ9L3RlbXBfcHlib290Y2hhcnRndWkKKyAgICBtdiAke1dPUktESVJ9L3RlbXBfcHlib290Y2hhcnRndWkgJHtTfS9weWJvb3RjaGFydGd1aS5weQorICAgIGNobW9kICt4ICR7U30vcHlib290Y2hhcnRndWkKK30KKworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKyAgICBleHBvcnQgUFlfTElCRElSPSIke2xpYmRpcn0vJHtQWVRIT05fRElSfSIKKyAgICBleHBvcnQgQklORElSPSIke2JpbmRpcn0iCisgICAgZXhwb3J0IExJQkRJUj0iJHtiYXNlX2xpYmRpcn0iCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0gIyBuZWVkZWQgZm9yIC1uYXRpdmUKKyAgICBleHBvcnQgUFlfTElCRElSPSIke2xpYmRpcn0vJHtQWVRIT05fRElSfSIKKyAgICBleHBvcnQgQklORElSPSIke2JpbmRpcn0iCisgICAgZXhwb3J0IERFU1RESVI9IiR7RH0iCisgICAgZXhwb3J0IExJQkRJUj0iJHtiYXNlX2xpYmRpcn0iCisKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Jvb3RjaGFydGRfc3RvcC5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKworICAgIGVjaG8gJ0VYSVRfUFJPQz0iJEVYSVRfUFJPQyBtYXRjaGJveC13aW5kb3ctbWFuYWdlciInID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2Jvb3RjaGFydGQuY29uZgorfQorCitQQUNLQUdFUyA9KyAicHlib290Y2hhcnRndWkiCitGSUxFU19weWJvb3RjaGFydGd1aSArPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9weWJvb3RjaGFydGd1aSAke2JpbmRpcn0vcHlib290Y2hhcnRndWkiCitSREVQRU5EU19weWJvb3RjaGFydGd1aSA9ICJweXRob24tcHljYWlybyBweXRob24tY29tcHJlc3Npb24gcHl0aG9uLWltYWdlIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLXNoZWxsIHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24tY29kZWNzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtdGFyZ2V0ICs9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3Zpbml0JywgJ3N5c3Zpbml0LXBpZG9mJywgJ3Byb2NwcycsIGQpfSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCArPSAibHNiIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBweXRob24tcHljYWlyby1uYXRpdmUiCisKK1BBQ0tBR0VTID0rICJib290Y2hhcnRkLXN0b3AtaW5pdHNjcmlwdCIKK0ZJTEVTX2Jvb3RjaGFydGQtc3RvcC1pbml0c2NyaXB0ICs9ICIke3N5c2NvbmZkaXJ9L2luaXQuZCAke3N5c2NvbmZkaXJ9L3JjKi5kIgorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vYm9vdGNoYXJ0L2Jvb3RjaGFydC1jb2xsZWN0b3IiCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vYm9vdGNoYXJ0L3RtcGZzIgorRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vYm9vdGNoYXJ0Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRvYyArPSAiJHtkYXRhZGlyfS9kb2NzIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImJvb3RjaGFydCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idHJmcy10b29scy9idHJmcy10b29scy9maXgtcGFyYWxsZWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYzUzYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHMvZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gMzczZWI1MTMyOGI1ZTEwNTI5NzYzY2FkNDQxMjEwZTZiMGVmYjI0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMSBGZWIgMjAxNSAyMjowODo0MSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK21rZnMuYzozMDA6NDY6IGVycm9yOiAnQlRSRlNfQlVJTERfVkVSU0lPTicgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCisgIGZwcmludGYoc3RkZXJyLCAibWtmcy5idHJmcywgcGFydCBvZiAlc1xuIiwgQlRSRlNfQlVJTERfVkVSU0lPTik7CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggODYwYTM5MC4uOGE2ZmJkNyAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTE0Miw3ICsxNDIsNyBAQCBlbHNlCisgCWNoZWNrX2VjaG8gPSB0cnVlCisgZW5kaWYKKyAKKy0lLm8uZDogJS5jCisrJS5vLmQ6ICUuYyB2ZXJzaW9uLmgKKyAJJChRKSQoQ0MpIC1NTSAtTUcgLU1GICRAIC1NVCAkKEA6Lm8uZD0ubykgLU1UICQoQDouby5kPS5zdGF0aWMubykgLU1UICRAICQoQ0ZMQUdTKSAkPAorIAorIC5jLm86CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J0cmZzLXRvb2xzL2J0cmZzLXRvb2xzXzQuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzYyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnRyZnMtdG9vbHMvYnRyZnMtdG9vbHNfNC4xLjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJDaGVja3N1bW1pbmcgQ29weSBvbiBXcml0ZSBGaWxlc3lzdGVtIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIkJ0cmZzIGlzIGEgbmV3IGNvcHkgb24gd3JpdGUgZmlsZXN5c3RlbSBmb3IgTGludXggYWltZWQgYXQgXAoraW1wbGVtZW50aW5nIGFkdmFuY2VkIGZlYXR1cmVzIHdoaWxlIGZvY3VzaW5nIG9uIGZhdWx0IHRvbGVyYW5jZSwgcmVwYWlyIGFuZCBcCitlYXN5IGFkbWluaXN0cmF0aW9uLiBcCitUaGlzIHBhY2thZ2UgY29udGFpbnMgdXRpbGl0aWVzIChta2ZzLCBmc2NrLCBidHJmc2N0bCkgdXNlZCB0byB3b3JrIHdpdGggXAorYnRyZnMgYW5kIGFuIHV0aWxpdHkgKGJ0cmZzLWNvbnZlcnQpIHRvIG1ha2UgYSBidHJmcyBmaWxlc3lzdGVtIGZyb20gYW4gZXh0My4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vYnRyZnMud2lraS5rZXJuZWwub3JnIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjciCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gInV0aWwtbGludXggYXR0ciBlMmZzcHJvZ3MgbHpvIGFjbCIKKworU1JDUkVWID0gIjdmMTMyOGNjYjVkMTU5ZWZlODUwZDRlYWVhOWI0OWJiZThjNDE4MWUiCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9rZGF2ZS9idHJmcy1wcm9ncy5naXQgXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLnBhdGNoIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1kb2N1bWVudGF0aW9uIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgIHNoIGF1dG9nZW4uc2gKK30KKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2J1aWxkLWNvbXBhcmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYzM3ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9idWlsZC1jb21wYXJlX2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkJ1aWxkIFJlc3VsdCBDb21wYXJlIFNjcmlwdCIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBjb250YWlucyBzY3JpcHRzIHRvIGZpbmQgb3V0IGlmIHRoZSBidWlsZCByZXN1bHRcCitkaWZmZXJzIHRvIGEgZm9ybWVyIGJ1aWxkLiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9idWlsZC1jb21wYXJlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vb3BlblNVU0UvYnVpbGQtY29tcGFyZS5naXQgXAorICAgICAgICAgICBmaWxlOi8vUmVuYW1lLXJwbS1jaGVjay5zaC10by1wa2ctZGlmZi5zaC5wYXRjaDtzdHJpcGxldmVsPTEgXAorICAgICAgICAgICBmaWxlOi8vSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoO3N0cmlwbGV2ZWw9MSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2ggXAorICAgICAgICAgICAiCitQQVRDSFRPT0wgPSAiZ2l0IgorCitTUkNSRVYgPSAiYzUzNTJjMDU0YzZlZjE1NzM1ZGEzMWI3NmQ2ZDg4NjIwZjRhZmYwYSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgZnVuY3Rpb25zLnNoICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSA3NTUgcGtnLWRpZmYuc2ggJHtEfS8ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDc1NSBzYW1lLWJ1aWxkLXJlc3VsdC5zaCAke0R9LyR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gNzU1IHNycG0tY2hlY2suc2ggJHtEfS8ke2JpbmRpcn0KK30KKworUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy8wMDAxLUFkZC1zdXBwb3J0LWZvci1kZWItYW5kLWlway1wYWNrYWdpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNTIxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzLzAwMDEtQWRkLXN1cHBvcnQtZm9yLWRlYi1hbmQtaXBrLXBhY2thZ2luZy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIDAyZGJjN2UzNDc4ZTQwOWQ2ZjVlM2UxYzUzZGFkZGY4ODM4YmU5OTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMSBTZXAgMjAxNSAxMjowNDozMyArMDEwMAorU3ViamVjdDogW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgZGViIGFuZCBpcGsgcGFja2FnaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGZ1bmN0aW9ucy5zaCB8IDE1ICsrKysrKysrKysrKysrKworIHBrZy1kaWZmLnNoICB8ICA2ICsrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZnVuY3Rpb25zLnNoIGIvZnVuY3Rpb25zLnNoCitpbmRleCAwNjA3OWRmLi44NWM5MDAzIDEwMDY0NAorLS0tIGEvZnVuY3Rpb25zLnNoCisrKysgYi9mdW5jdGlvbnMuc2gKK0BAIC04NSw2ICs4NSwxMyBAQCBmdW5jdGlvbiB1bnBhY2thZ2UoKQorICAgICAgICAgICAgIENQSU9fT1BUUz0iLS1leHRyYWN0IC0tdW5jb25kaXRpb25hbCAtLXByZXNlcnZlLW1vZGlmaWNhdGlvbi10aW1lIC0tbWFrZS1kaXJlY3RvcmllcyAtLXF1aWV0IgorICAgICAgICAgICAgIHJwbTJjcGlvICRmaWxlIHwgY3BpbyAke0NQSU9fT1BUU30KKyAgICAgICAgICAgICA7OworKyAgICAgICAgKi5pcGt8Ki5kZWIpCisrICAgICAgICAgICAgYXIgeCAkZmlsZQorKyAgICAgICAgICAgIHRhciB4ZiBjb250cm9sLnRhci5negorKyAgICAgICAgICAgIHJtIGNvbnRyb2wudGFyLmd6CisrICAgICAgICAgICAgdGFyIHhmIGRhdGEudGFyLmd6CisrICAgICAgICAgICAgcm0gZGF0YS50YXIuZ3oKKysgICAgICAgICAgICA7OworICAgICBlc2FjCisgICAgIHBvcGQgMT4vZGV2L251bGwKKyB9CitAQCAtMjU1LDQgKzI2MiwxMiBAQCBmdW5jdGlvbiBjbXBfc3BlYyAoKQorICAgICBybSAkZmlsZTEgJGZpbGUyCisgICAgIHJldHVybiAkUkVTCisgfQorKworK2Z1bmN0aW9uIGFkanVzdF9jb250cm9sZmlsZSAoKSB7CisrICAgIGNhdCAkMS9jb250cm9sIHwgc2VkICcvXlZlcnNpb246IC9kJyA+ICQxL2NvbnRyb2wuZml4ZWQKKysgICAgbXYgJDEvY29udHJvbC5maXhlZCAkMS9jb250cm9sCisrICAgIGNhdCAkMi9jb250cm9sIHwgc2VkICcvXlZlcnNpb246IC9kJyA+ICQyL2NvbnRyb2wuZml4ZWQKKysgICAgbXYgJDIvY29udHJvbC5maXhlZCAkMi9jb250cm9sCisrfQorKworICMgdmltOiB0dz02NjYgdHM9MiBldAorZGlmZiAtLWdpdCBhL3BrZy1kaWZmLnNoIGIvcGtnLWRpZmYuc2gKK2luZGV4IDBmMWZhNzYuLjNjZjEwYWEgMTAwNjQ0CistLS0gYS9wa2ctZGlmZi5zaAorKysrIGIvcGtnLWRpZmYuc2gKK0BAIC0xMzgsNiArMTM4LDEyIEBAIGVjaG8gIkV4dHJhY3RpbmcgcGFja2FnZXMiCisgdW5wYWNrYWdlICRvbGRwa2cgJGRpci9vbGQKKyB1bnBhY2thZ2UgJG5ld3BrZyAkZGlyL25ldworIAorK2Nhc2UgJG9sZHBrZyBpbgorKyAgKi5kZWJ8Ki5pcGspCisrICAgICBhZGp1c3RfY29udHJvbGZpbGUgJGRpci9vbGQgJGRpci9uZXcKKysgIDs7CisrZXNhYworKworICMgZmlsZXMgaXMgc2V0IGluIGNtcF9zcGVjIGZvciBycG1zLCBzbyBpZiBSRVMgaXMgZW1wdHkgd2Ugc2hvdWxkIGFzc3VtZQorICMgaXQgd2Fzbid0IGFuIHJwbSBhbmQgcGljayBhbGwgZmlsZXMgZm9yIGNvbXBhcmlzb24uCisgaWYgWyAteiAkUkVTIF07IHRoZW4KKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2J1aWxkLWNvbXBhcmUvZmlsZXMvSWdub3JlLURXQVJGLXNlY3Rpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZGExYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9JZ25vcmUtRFdBUkYtc2VjdGlvbnMucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSAwMTU3MTU2OTRlYWRkNzE0YjkwM2YzMGFkZTg3NmUwNzM4ZDQ0OTc0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IE1vbiwgNSBKYW4gMjAxNSAxNTowOToyMCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBJZ25vcmUgRFdBUkYgc2VjdGlvbnMuCisKK0Fzc3VtZSBmb3Igbm93IHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgRFdBUkYgc2VjdGlvbnMgZHVlIHRvIHBhdGgKK2RpZmZlcmVuY2VzLiBIb3dldmVyLCBpbiB0aGUgY2FzZSB0aGUgdG9vbCBpcyByYW4gb24gYSAiZGVidWciIHBhY2thZ2UKK2l0IHdpbGwgbW9zdCBsaWtlbHkgZmFsc2VseSBzYXkgdGhlIHBhY2thZ2VzIGhhdmUgbm8gZGlmZmVyZW5jZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCisKK1RoZSBwYWNrYWdlIGRpZmZlcmVuY2UgdG9vbCBpcyBjb3JyZWN0bHkgbGFiZWxsaW5nIHRoZSBwYWNrYWdlcyBhcyBkaWZmZXJlbnQKK3doZW4gdGhlIERXQVJGIHNlY3Rpb25zIGRvbid0IG1hdGNoIGR1ZSB0byBwYXRocy4gVGhlIHBhdGhzIGluIHRoZSBkZWJ1ZyBpbmZvCitzaG91bGQgYWN0dWFsbHkgYmUgbWFkZSB0byBiZSB0aGUgc2FtZSB1c2luZyBjb21waWxlIGZsYWdzIG9yIHNvbWUgb3RoZXIKK21lY2hhbmlzbS4KKworSG93ZXZlciwgdG8gbWFrZSB0aGUgdG9vbCBtb3JlIHVzZWZ1bCB0byBZb2N0byB1bnRpbCB0aGUgd29yayBjYW4gYmUgZG9uZQordG8gZW5zdXJlIGlkZW50aWNhbCBwYXRocyBpbiBkZWJ1ZyBzZWN0aW9ucywgdGhpcyBwYXRjaCBpcyBiZWluZyBhcHBsaWVkLgorCitTaWduZWQtb2ZmLWJ5OiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorLS0tCisgcGtnLWRpZmYuc2ggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9wa2ctZGlmZi5zaCBiL3BrZy1kaWZmLnNoCitpbmRleCA1NjAzNWMxLi4wZjFmYTc2IDEwMDc1NQorLS0tIGEvcGtnLWRpZmYuc2gKKysrKyBiL3BrZy1kaWZmLnNoCitAQCAtNjU4LDcgKzY1OCw3IEBAIGNoZWNrX3NpbmdsZV9maWxlKCkKKyAgICAgICAgZWNobyAiIiA+JGZpbGUxCisgICAgICAgIGVjaG8gIiIgPiRmaWxlMgorICAgICAgICAjIERvbid0IGNvbXBhcmUgLmJ1aWxkLWlkIGFuZCAuZ251X2RlYnVnbGluayBzZWN0aW9ucworLSAgICAgICBzZWN0aW9ucz0iJChvYmpkdW1wIC1zIG5ldy8kZmlsZSB8IGdyZXAgIkNvbnRlbnRzIG9mIHNlY3Rpb24gLio6IiB8IHNlZCAtciAicywuKiAoLiopOixcMSxnIiB8IGdyZXAgLXYgLWUgIlwuYnVpbGQtaWQiIC1lICJcLmdudV9kZWJ1Z2xpbmsiIHwgdHIgIlxuIiAiICIpIgorKyAgICAgICBzZWN0aW9ucz0iJChvYmpkdW1wIC1zIG5ldy8kZmlsZSB8IGdyZXAgIkNvbnRlbnRzIG9mIHNlY3Rpb24gLio6IiB8IHNlZCAtciAicywuKiAoLiopOixcMSxnIiB8IGdyZXAgLXYgLWUgIlwuYnVpbGQtaWQiIC1lICJcLmdudV9kZWJ1Z2xpbmsiIC1lICJcLmRlYnVnX2FiYnJldiIgLWUgIlwuZGVidWdfYXJhbmdlcyIgLWUgIlwuZGVidWdfZnJhbWUiIC1lICJcLmRlYnVnX2luZm8iIC1lICJcLmRlYnVnX2xpbmUiIC1lICJcLmRlYnVnX2xvYyIgLWUgIlwuZGVidWdfbWFjaW5mbyIgLWUgIlwuZGVidWdfcHVibmFtZXMiIC1lICJcLmRlYnVnX3B1YnR5cGVzIiAtZSAiXC5kZWJ1Z19yYW5nZXMiICAtZSAiXC5kZWJ1Z19zdHIiIHwgdHIgIlxuIiAiICIpIgorICAgICAgICBmb3Igc2VjdGlvbiBpbiAkc2VjdGlvbnM7IGRvCisgICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gb2xkLyRmaWxlIHwgc2VkICJzLF5vbGQvLCwiID4gJGZpbGUxCisgICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gbmV3LyRmaWxlIHwgc2VkICJzLF5uZXcvLCwiID4gJGZpbGUyCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9idWlsZC1jb21wYXJlL2ZpbGVzL1JlbmFtZS1ycG0tY2hlY2suc2gtdG8tcGtnLWRpZmYuc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjNhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvYnVpbGQtY29tcGFyZS9maWxlcy9SZW5hbWUtcnBtLWNoZWNrLnNoLXRvLXBrZy1kaWZmLnNoLnBhdGNoCkBAIC0wLDAgKzEsMTU5OSBAQAorRnJvbSA0ZGUzZGY1YTFiMzYxY2QwOWEwODFmMGUwYmRiOTRjYmY2ODRlZDQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDE5IEZlYiAyMDE1IDAwOjM0OjQ3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbmFtZSBycG0tY2hlY2suc2ggdG8gcGtnLWRpZmYuc2guCisKK1RoZSB0b29sIG5vdyBhY2NlcHRzIHBhY2thZ2UgaW5wdXQgb3RoZXIgdGhhbiBycG0sIHNvIGNoYW5nZSB0aGUgbmFtZQord2hpY2ggY291bGQgYmUgbWlzbGVhZGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vZ2l0aHViLmNvbS9vcGVuU1VTRS9idWlsZC1jb21wYXJlL3B1bGxzXQorCitTaWduZWQtb2ZmLWJ5OiBSYW5keSBXaXR0IDxyYW5keS5lLndpdHRAbGludXguaW50ZWwuY29tPgorCitVcGRhdGVkIGZvciBycG0tY2hlY2suc2guCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgYnVpbGQtY29tcGFyZS5zcGVjICAgfCAgICAyICstCisgcGtnLWRpZmYuc2ggICAgICAgICAgfCAgNzY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgcnBtLWNoZWNrLnNoICAgICAgICAgfCAgNzY0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzYW1lLWJ1aWxkLXJlc3VsdC5zaCB8ICAgIDQgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRpb25zKCspLCA3NjcgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHBrZy1kaWZmLnNoCisgZGVsZXRlIG1vZGUgMTAwNzU1IHJwbS1jaGVjay5zaAorCitkaWZmIC0tZ2l0IGEvYnVpbGQtY29tcGFyZS5zcGVjIGIvYnVpbGQtY29tcGFyZS5zcGVjCitpbmRleCAxNGE5N2U5Li41ZjQ3Y2ExIDEwMDY0NAorLS0tIGEvYnVpbGQtY29tcGFyZS5zcGVjCisrKysgYi9idWlsZC1jb21wYXJlLnNwZWMKK0BAIC0yNSw3ICsyNSw3IEBAIFZlcnNpb246ICAgICAgICAyMDE1LjAyLjEwCisgUmVsZWFzZTogICAgICAgIDAKKyBTb3VyY2UxOiAgICAgICAgQ09QWUlORworIFNvdXJjZTI6ICAgICAgICBzYW1lLWJ1aWxkLXJlc3VsdC5zaAorLVNvdXJjZTM6ICAgICAgICBycG0tY2hlY2suc2gKKytTb3VyY2UzOiAgICAgICAgcGtnLWRpZmYuc2gKKyBTb3VyY2U0OiAgICAgICAgZnVuY3Rpb25zLnNoCisgU291cmNlNTogICAgICAgIHNycG0tY2hlY2suc2gKKyBCdWlsZFJvb3Q6ICAgICAgJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LWJ1aWxkCitkaWZmIC0tZ2l0IGEvcGtnLWRpZmYuc2ggYi9wa2ctZGlmZi5zaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU2MDM1YzEKKy0tLSAvZGV2L251bGwKKysrKyBiL3BrZy1kaWZmLnNoCitAQCAtMCwwICsxLDc2NSBAQAorKyMhIC9iaW4vYmFzaAorKyMKKysjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBTVVNFIExpbnV4IFByb2R1Y3QgR21iSCwgR2VybWFueS4KKysjIExpY2Vuc2VkIHVuZGVyIEdQTCB2Miwgc2VlIENPUFlJTkcgZmlsZSBmb3IgZGV0YWlscy4KKysjCisrIyBXcml0dGVuIGJ5IE1pY2hhZWwgTWF0eiBhbmQgU3RlcGhhbiBDb29sbworKyMgRW5oYW5jZWQgYnkgQW5kcmVhcyBKYWVnZXIKKysKKytGVU5DVElPTlM9JHswJS8qfS9mdW5jdGlvbnMuc2gKKysKKytjaGVja19hbGw9CisrY2FzZSAkMSBpbgorKyAgLWEgfCAtLWNoZWNrLWFsbCkKKysgICAgY2hlY2tfYWxsPTEKKysgICAgc2hpZnQKKytlc2FjCisrCisraWYgdGVzdCAiJCMiICE9IDI7IHRoZW4KKysgICBlY2hvICJ1c2FnZTogJDAgWy1hfC0tY2hlY2stYWxsXSBvbGQucnBtIG5ldy5ycG0iCisrICAgZXhpdCAxCisrZmkKKysKKytzZWxmX3NjcmlwdD0kKGNkICQoZGlybmFtZSAkMCk7IGVjaG8gJChwd2QpLyQoYmFzZW5hbWUgJDApKQorKworK3NvdXJjZSAkRlVOQ1RJT05TCisrCisrb2xkcGtnPWByZWFkbGluayAtZiAkMWAKKytuZXdwa2c9YHJlYWRsaW5rIC1mICQyYAorK3JlbmFtZV9zY3JpcHQ9YG1rdGVtcGAKKysKKytpZiB0ZXN0ICEgLWYgIiRvbGRwa2ciOyB0aGVuCisrICAgIGVjaG8gImNhbid0IG9wZW4gJDEiCisrICAgIGV4aXQgMQorK2ZpCisrCisraWYgdGVzdCAhIC1mICIkbmV3cGtnIjsgdGhlbgorKyAgICBlY2hvICJjYW4ndCBvcGVuICQyIgorKyAgICBleGl0IDEKKytmaQorKworKyN1c2FnZSB1bmphciA8ZmlsZT4KKytmdW5jdGlvbiB1bmphcigpCisreworKyAgICBsb2NhbCBmaWxlCisrICAgIGZpbGU9JDEKKysKKysgICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCisrICAgICAgICBVTkpBUj1mYXN0amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWphcgorKyAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPXVuemlwCisrICAgIGVsc2UKKysgICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKysgICAgICAgIGV4aXQgMQorKyAgICBmaQorKworKyAgICBjYXNlICRVTkpBUiBpbgorKyAgICAgICAgamFyfGZhc3RqYXIpCisrICAgICAgICAjIGVjaG8gamFyIC14ZiAkZmlsZQorKyAgICAgICAgJHtVTkpBUn0gLXhmICRmaWxlCisrICAgICAgICA7OworKyAgICAgICAgdW56aXApCisrICAgICAgICB1bnppcCAtb3FxICRmaWxlCisrICAgICAgICA7OworKyAgICBlc2FjCisrfQorKworKyMgbGlzdCBmaWxlcyBpbiBkaXJlY3RvcnkKKysjdXNhZ2UgdW5qYXJfbCA8ZmlsZT4KKytmdW5jdGlvbiB1bmphcl9sKCkKKyt7CisrICAgIGxvY2FsIGZpbGUKKysgICAgZmlsZT0kMQorKworKyAgICBpZiBbWyAkKHR5cGUgLXAgZmFzdGphcikgXV07IHRoZW4KKysgICAgICAgIFVOSkFSPWZhc3RqYXIKKysgICAgZWxpZiBbWyAkKHR5cGUgLXAgamFyKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9amFyCisrICAgIGVsaWYgW1sgJCh0eXBlIC1wIHVuemlwKSBdXTsgdGhlbgorKyAgICAgICAgVU5KQVI9dW56aXAKKysgICAgZWxzZQorKyAgICAgICAgZWNobyAiRVJST1I6IGphciwgZmFzdGphciwgb3IgdW56aXAgaXMgbm90IGluc3RhbGxlZCAodHJ5aW5nIGZpbGUgJGZpbGUpIgorKyAgICAgICAgZXhpdCAxCisrICAgIGZpCisrCisrICAgIGNhc2UgJFVOSkFSIGluCisrICAgICAgICBqYXJ8ZmFzdGphcikKKysgICAgICAgICR7VU5KQVJ9IC10ZiAkZmlsZQorKyAgICAgICAgOzsKKysgICAgICAgIHVuemlwKQorKyAgICAgICAgdW56aXAgLWwgJGZpbGUKKysgICAgICAgIDs7CisrICAgIGVzYWMKKyt9CisrCisrZmlsdGVyX2Rpc2FzbSgpCisreworKyAgIHNlZCAtZSAncy9eICpbMC05YS1mXVwrOi8vJyAtZSAncy9cJDB4WzAtOWEtZl1cKy8kc29tZXRoaW5nLycgLWUgJ3MvY2FsbHEgKlswLTlhLWZdXCsvY2FsbHEgLycgLWUgJ3MvIyAqWzAtOWEtZl1cKy8jICAvJyAtZSAncy9cKDB4XClcP1swLTlhLWZdXCsoL29mZnNldCgvJyAtZSAncy9bMC05YS1mXVwrIDwvPC8nIC1lICdzL148XCguKlwpPjovXDE6LycgLWUgJ3MvPFwoLipcKSsweFswLTlhLWZdXCs+LzxcMSArIG9mcz4vJyAKKyt9CisrCisrZWNobyAiQ29tcGFyaW5nIGBiYXNlbmFtZSAkb2xkcGtnYCB0byBgYmFzZW5hbWUgJG5ld3BrZ2AiCisrCisrY2FzZSAkb2xkcGtnIGluCisrICAqLnJwbSkKKysgICAgIGNtcF9zcGVjICRyZW5hbWVfc2NyaXB0ICRvbGRwa2cgJG5ld3BrZworKyAgICAgUkVTPSQ/CisrICAgICBjYXNlICRSRVMgaW4KKysgICAgICAgMCkKKysgICAgICAgICAgZWNobyAiUlBNIG1ldGEgaW5mb3JtYXRpb24gaXMgaWRlbnRpY2FsIgorKyAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBleGl0IDAKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICAgMSkKKysgICAgICAgICAgZWNobyAiUlBNIG1ldGEgaW5mb3JtYXRpb24gaXMgZGlmZmVyZW50IgorKyAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBleGl0IDEKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICAgMikKKysgICAgICAgICAgZWNobyAiUlBNIGZpbGUgY2hlY2tzdW0gZGlmZmVycy4iCisrICAgICAgICAgIFJFUz0wCisrICAgICAgICAgIDs7CisrICAgICAgICopCisrICAgICAgICAgIGVjaG8gIldyb25nIGV4aXQgY29kZSEiCisrICAgICAgICAgIGV4aXQgMQorKyAgICAgICAgICA7OworKyAgICAgZXNhYworKyAgICAgOzsKKytlc2FjCisrCisrZmlsZTE9YG1rdGVtcGAKKytmaWxlMj1gbWt0ZW1wYAorKworK2Rpcj1gbWt0ZW1wIC1kYAorK2VjaG8gIkV4dHJhY3RpbmcgcGFja2FnZXMiCisrdW5wYWNrYWdlICRvbGRwa2cgJGRpci9vbGQKKyt1bnBhY2thZ2UgJG5ld3BrZyAkZGlyL25ldworKworKyMgZmlsZXMgaXMgc2V0IGluIGNtcF9zcGVjIGZvciBycG1zLCBzbyBpZiBSRVMgaXMgZW1wdHkgd2Ugc2hvdWxkIGFzc3VtZQorKyMgaXQgd2Fzbid0IGFuIHJwbSBhbmQgcGljayBhbGwgZmlsZXMgZm9yIGNvbXBhcmlzb24uCisraWYgWyAteiAkUkVTIF07IHRoZW4KKysgICAgb2xkZmlsZXM9YGNkICRkaXIvb2xkOyBmaW5kIC4gLXR5cGUgZmAKKysgICAgbmV3ZmlsZXM9YGNkICRkaXIvbmV3OyBmaW5kIC4gLXR5cGUgZmAKKysKKysgICAgZmlsZXM9YGVjaG8gLWUgIiRvbGRmaWxlc1xuJG5ld2ZpbGVzIiB8IHNvcnQgLXVgCisrZmkKKysKKytjZCAkZGlyCisrYmFzaCAkcmVuYW1lX3NjcmlwdAorKworK2RmaWxlPWBta3RlbXBgCisrCisrZGlmZl90d29fZmlsZXMoKQorK3sKKysgIGlmICEgY21wIC1zIG9sZC8kZmlsZSBuZXcvJGZpbGU7IHRoZW4KKysgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCisrICAgICBoZXhkdW1wIC1DIG9sZC8kZmlsZSA+ICRmaWxlMQorKyAgICAgaGV4ZHVtcCAtQyBuZXcvJGZpbGUgPiAkZmlsZTIKKysgICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAwCisrICAgICByZXR1cm4gMQorKyAgZmkKKysgIHJldHVybiAwCisrfQorKworK3RyaW1fbWFuX2ZpcnN0X2xpbmUoKQorK3sKKysgICAgIyBIYW5kbGVzIHRoZSBmaXJzdCBsaW5lIGlmIGl0IGlzIGxpa2U6CisrICAgICMuXCIgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgUG9kOjpNYW4gMi4yOCAoUG9kOjpTaW1wbGUgMy4yOCkKKysgICAgIy5cIiBETyBOT1QgTU9ESUZZIFRISVMgRklMRSEgIEl0IHdhcyBnZW5lcmF0ZWQgYnkgaGVscDJtYW4gMS40My4zLgorKyAgICBsb2NhbCBmPSQxCisrICAgIHNlZCAtaSAtZSAnMXsKKysgICAgc3xeXC5cXCJbWzpibGFuazpdXVwrQXV0b21hdGljYWxseVtbOmJsYW5rOl1dZ2VuZXJhdGVkW1s6Ymxhbms6XV1ieVtbOmJsYW5rOl1dUG9kOjpNYW5bWzpibGFuazpdXS4qfC5cXCIgT3Zlcmx5IHZlcmJvc2UgUG9kOjpNYW58CisrICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0RPW1s6Ymxhbms6XV1OT1RbWzpibGFuazpdXU1PRElGWVtbOmJsYW5rOl1dVEhJU1tbOmJsYW5rOl1dRklMRSFbWzpibGFuazpdXVwrSXRbWzpibGFuazpdXXdhc1tbOmJsYW5rOl1dZ2VuZXJhdGVkW1s6Ymxhbms6XV1ieVtbOmJsYW5rOl1daGVscDJtYW5bWzpibGFuazpdXS4qfC5cXCIgT3Zlcmx5IHZlcmJvc2UgaGVscDJtYW58CisrICAgIH0nICRmCisrfQorKworK3RyaW1fbWFuX1RIKCkKKyt7CisrICAgICMgSGFuZGxlcyBsaW5lcyBsaWtlOgorKyAgICAjIC5USCBkZWJoZWxwZXIgNyAiMjAxMC0wMi0yNyIgIjcuNC4xNSIgIkRlYmhlbHBlciIKKysgICAgIyAuVEggRElSTU5HUi1DTElFTlQgMSAyMDEwLTAyLTI3ICJEaXJtbmdyIDEuMC4zIiAiR05VIFByaXZhY3kgR3VhcmQiCisrICAgICMgLlRIIGNjbWFrZSAxICJNYXJjaCAwNiwgMjAxMCIgImNjbWFrZSAyLjguMS1yYzMiCisrICAgICMgLlRIIFFFTVUtSU1HIDEgIjIwMTAtMDMtMTQiICIgIiAiICIKKysgICAgIyAuVEgga2RlY21ha2UgMSAiTWF5IDA3LCAyMDEwIiAiY21ha2UgMi44LjEiCisrICAgICMgLlRIICJhcHBlbmRlci5oIiAzICIxMiBNYXkgMjAxMCIgIlZlcnNpb24gMS4yLjEiICJsb2c0YyIgXCIgLSotIG5yb2ZmIC0qLQorKyAgICAjIC5USOKAgiJhcHBlbmRlci5oIuKAgjPigIIiVHVl4oCCQXVn4oCCMzHigIIyMDEwIuKAgiJWZXJzaW9u4oCCMS4yLjEi4oCCImxvZzRjIuKAglwi4oCCLSot4oCCbnJvZmbigIItKi0KKysgICAgIyAuVEggIk9GRkxJTkVJTUFQIiAiMSIgIjExIE1heSAyMDEwIiAiSm9obiBHb2VyemVuIiAiT2ZmbGluZUlNQVAgTWFudWFsIgorKyAgICAjIC5USCBndiAzZ3VpbGUgIjEzIE1heSAyMDEwIgorKyAgICAjLlRIICJHSVRcLUFSQ0hJTVBPUlQiICIxIiAiMDkvMTMvMjAxMCIgIkdpdCAxXCYuN1wmLjEiICJHaXQgTWFudWFsIgorKyAgICAjIC5USCBMRElSRUNUT1JEIDggIjIwMTAtMTAtMjAiICJwZXJsIHY1LjEyLjIiICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIKKysgICAgIyAuVEggY2NtYWtlIDEgIkZlYnJ1YXJ5IDA1LCAyMDEyIiAiY2NtYWtlIDIuOC43IgorKyAgICAjIC5USOKAgiJhcHBlbmRlci5oIuKAgjPigIIiVHVl4oCCQXVn4oCCMzHigIIyMDEwIuKAgiJWZXJzaW9u4oCCMS4yLjEi4oCCImxvZzRjIuKAglwi4oCCLSot4oCCbnJvZmbigIItKi0KKysgICAgIyAuVEggQVJDSCAiMSIgIlNlcHRlbWJlciAyMDEwIiAiR05VIGNvcmV1dGlscyA4LjUiICJVc2VyIENvbW1hbmRzIgorKyAgICAjIC5USCAiR0NNLUNBTElCUkFURSIgIjEiICIwMyBGZWJydWFyeSAyMDEyIiAiIiAiIgorKyAgICAjLlRIIExvY2FsZTo6UG80YTo6WG1sLnBtIDNwbSAiMjAxNS0wMS0zMCIgIlBvNGEgVG9vbHMiICJQbzRhIFRvb2xzIgorKyAgICBsb2NhbCBmPSQxCisrICAgICMgKC5USCAgIHF1b3RlZCBzZWN0aW9uKSAocXVvdGVkX2RhdGUpKCopCisrICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJxcTIwMDAtMDEtMDEiXDN8JyAkZgorKyAgICAjICguVEggdW5xdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCtbXiJdW15bOmJsYW5rOl1dXCtbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKCJbXiJdXCsiXClcKFtbOmJsYW5rOl1dXCsuKlwpXD98XDEgInVxMjAwMC0wMi0wMiJcM3wnICRmCisrICAgICMgKC5USCAgIHF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKysgICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrIlteIl1cKyJbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKFteIl1bXls6Ymxhbms6XV1cK1wpXChbWzpibGFuazpdXVwrLipcKVw/fFwxIHF1MjAwMC0wMy0wM1wzfCcgJGYKKysgICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pICh1bnF1b3RlZF9kYXRlKSgqKQorKyAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCtbXiJdW15bOmJsYW5rOl1dXCtbWzpibGFuazpdXVwrW15bOmJsYW5rOl1dXCtcKVtbOmJsYW5rOl1dXCtcKFteIl1bXls6Ymxhbms6XV1cK1wpXChbWzpibGFuazpdXVwrLipcKVw/fFwxIHV1MjAwMC0wNC0wNFwzfCcgJGYKKyt9CisrCisrc3RyaXBfbnVtYmVyZWRfYW5jaG9ycygpCisreworKyAgIyBSZW1vdmUgbnVtYmVyZWQgYW5jaG9ycyBvbiBEb2Nib29rIC8gSFRNTCBmaWxlcy4KKysgICMgVGhpcyBzaG91bGQgYmUgc2F2ZSBzaW5jZSB3ZSByZW1vdmUgdGhlbSBmcm9tIG9sZCBhbmQgbmV3IGZpbGVzLgorKyAgIyBBIHRyYWlsaW5nIDwvYT4gb3IgPC9kaXY+IHRhZyB3aWxsIHN0YXkgYWxzbyBvbiBib3RoIGZpbGVzLgorKyAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgIHNlZCAtaSAtZSAncyU8WyBdKmFbIF1cK25hbWVbXjxdKlswLTldXCtbXjxdKiUlZycgXAorKyAgICAgLWUgJ3MlPFsgXSphWyBdXCtocmVmW148XSojW148XSpbMC05XVwrW148XSolJWcnIFwKKysgICAgIC1lICdzJTxbXjxdKmlkPSJmdG5cLltePF0qWzAtOV1cK1tePF0qJSVnJyAkZgorKyAgZG9uZQorK30KKysKKysKKytjaGVja19jb21wcmVzc2VkX2ZpbGUoKQorK3sKKysgIGxvY2FsIGZpbGU9JDEKKysgIGxvY2FsIGV4dD0kMgorKyAgbG9jYWwgdG1wZGlyPWBta3RlbXAgLWRgCisrICBsb2NhbCBmdHlwZQorKyAgbG9jYWwgcmV0PTAKKysgIGVjaG8gIiRleHQgZmlsZSB3aXRoIG9kZCBmaWxlbmFtZTogJGZpbGUiCisrICBpZiB0ZXN0IC1uICIkdG1wZGlyIjsgdGhlbgorKyAgICBta2RpciAkdG1wZGlyL3tvbGQsbmV3fQorKyAgICBjcCAtLXBhcmVudHMgLS1kZXJlZmVyZW5jZSBvbGQvJGZpbGUgJHRtcGRpci8KKysgICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2UgbmV3LyRmaWxlICR0bXBkaXIvCisrICAgIGlmIHB1c2hkICR0bXBkaXIgPiAvZGV2L251bGwgOyB0aGVuCisrICAgICAgY2FzZSAiJGV4dCIgaW4KKysgICAgICAgIGJ6MikKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywuYnoyfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5iejJ9CisrICAgICAgICAgIGJ6aXAyIC1kIG9sZC8kZmlsZS5iejIKKysgICAgICAgICAgYnppcDIgLWQgbmV3LyRmaWxlLmJ6MgorKyAgICAgICAgICA7OworKyAgICAgICAgZ3ppcCkKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywuZ3p9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmd6fQorKyAgICAgICAgICBnemlwIC1kIG9sZC8kZmlsZS5negorKyAgICAgICAgICBnemlwIC1kIG5ldy8kZmlsZS5negorKyAgICAgICAgICA7OworKyAgICAgICAgeHopCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLnh6fQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC54en0KKysgICAgICAgICAgeHogLWQgb2xkLyRmaWxlLnh6CisrICAgICAgICAgIHh6IC1kIG5ldy8kZmlsZS54egorKyAgICAgICAgICA7OworKyAgICAgIGVzYWMKKysgICAgICBmdHlwZT1gL3Vzci9iaW4vZmlsZSBvbGQvJGZpbGUgfCBzZWQgJ3NAXlteOl1cKzpbWzpibGFuazpdXSpAQCdgCisrICAgICAgY2FzZSAkZnR5cGUgaW4KKysgICAgICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCisrICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorKyAgICAgICAgICBtdiBvbGQvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLnRhcn0KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LnRhcjsgdGhlbgorKyAgICAgICAgICAgIHJldD0xCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgICBBU0NJSVwgY3Bpb1wgYXJjaGl2ZVwgKikKKysgICAgICAgICAgZWNobyAiJGV4dCBjb250ZW50IGlzOiAkZnR5cGUiCisrICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CisrICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCisrICAgICAgICAgICAgcmV0PTEKKysgICAgICAgICAgZmkKKysgICAgICAgICAgOzsKKysgICAgICAgICopCisrICAgICAgICAgIGVjaG8gInVuaGFuZGxlZCAkZXh0IGNvbnRlbnQ6ICRmdHlwZSIKKysgICAgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorKyAgICAgICAgICAgIHJldD0xCisrICAgICAgICAgIGZpCisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICAgIHBvcGQgPiAvZGV2L251bGwKKysgICAgZmkKKysgICAgcm0gLXJmICIkdG1wZGlyIgorKyAgZmkKKysgIHJldHVybiAkcmV0CisrfQorKworK2NoZWNrX3NpbmdsZV9maWxlKCkKKyt7CisrICBsb2NhbCBmaWxlPSIkMSIKKysgIGNhc2UgJGZpbGUgaW4KKysgICAgKi5zcGVjKQorKyAgICAgICBzZWQgLWkgLWUgInMsUmVsZWFzZTouKiRyZWxlYXNlMSxSZWxlYXNlOiBAUkVMRUFTRUAsIiBvbGQvJGZpbGUKKysgICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTIsUmVsZWFzZTogQFJFTEVBU0VALCIgbmV3LyRmaWxlCisrICAgICAgIDs7CisrICAgICouZXhlLm1kYnwqLmRsbC5tZGIpCisrICAgICAgICMgSnVzdCBkZWJ1ZyBpbmZvcm1hdGlvbiwgd2UgY2FuIHNraXAgdGhlbQorKyAgICAgICBlY2hvICIkZmlsZSBza2lwcGVkIGFzIGRlYnVnIGZpbGUuIgorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAqLmEpCisrICAgICAgIGZsaXN0PWBhciB0IG5ldy8kZmlsZWAKKysgICAgICAgcHdkPSRQV0QKKysgICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKysgICAgICAgY2Qgb2xkLyRmZGlyCisrICAgICAgIGFyIHggYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorKyAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZAorKyAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKysgICAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAqLmNwaW8pCisrICAgICAgIGZsaXN0PWBjcGlvIC0tcXVpZXQgLS1saXN0IC0tZm9yY2UtbG9jYWwgPCAibmV3LyRmaWxlImAKKysgICAgICAgcHdkPSRQV0QKKysgICAgICAgZmRpcj0kZmlsZS5leHRyYWN0LiRQUElELiQkCisrICAgICAgIG1rZGlyIG9sZC8kZmRpciBuZXcvJGZkaXIKKysgICAgICAgY2Qgb2xkLyRmZGlyCisrICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgY3BpbyAtLXF1aWV0IC0tZXh0cmFjdCAtLWZvcmNlLWxvY2FsIDwgIi4uLyR7ZmlsZSMjKi99IgorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGxvY2FsIHJldD0wCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgIGZpCisrICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICBybSAtcmYgb2xkLyRmZGlyIG5ldy8kZmRpcgorKyAgICAgICByZXR1cm4gJHJldAorKyAgICAgICA7OworKyAgICAqLnRhcnwqLnRhci5iejJ8Ki50YXIuZ3p8Ki50Z3p8Ki50YnoyKQorKyAgICAgICBmbGlzdD1gdGFyIHRmIG5ldy8kZmlsZWAKKysgICAgICAgcHdkPSRQV0QKKysgICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKysgICAgICAgY2Qgb2xkLyRmZGlyCisrICAgICAgIHRhciB4ZiBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCisrICAgICAgIHRhciB4ZiBgYmFzZW5hbWUgJGZpbGVgCisrICAgICAgIGNkICRwd2QKKysgICAgICAgbG9jYWwgcmV0PTAKKysgICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworKyAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJGZkaXIvJGY7IHRoZW4KKysgICAgICAgICAgIHJldD0xCisrICAgICAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorKyAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgZmkKKysgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIHJldHVybiAkcmV0CisrICAgICAgIDs7CisrICAgICouemlwfCouamFyfCoud2FyKQorKyAgICAgICBjZCBvbGQKKysgICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0ID4gZmxpc3QKKysgICAgICAgIyAgMTAtMDUtMjAxMCAxNDozOQorKyAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLCIgZmxpc3QKKysgICAgICAgIyAyMDEyLTAyLTAzIDA3OjU5CisrICAgICAgIHNlZCAtaSAtZSAicywgMjBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CisrICAgICAgIGNkIC4uL25ldworKyAgICAgICB1bmphcl9sIC4vJGZpbGUgfHNvcnQ+IGZsaXN0CisrICAgICAgIHNlZCAtaSAtZSAicywgWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldXCsgWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsOyAiIGZsaXN0CisrICAgICAgIHNlZCAtaSAtZSAicywgMjBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1bMC05XSBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CisrICAgICAgIGNkIC4uCisrICAgICAgIGlmICEgY21wIC1zIG9sZC9mbGlzdCBuZXcvZmxpc3Q7IHRoZW4KKysgICAgICAgICAgZWNobyAiJGZpbGUgaGFzIGRpZmZlcmVudCBmaWxlIGxpc3QiCisrICAgICAgICAgIGRpZmYgLXUgb2xkL2ZsaXN0IG5ldy9mbGlzdAorKyAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICBmbGlzdD1gZ3JlcCBkYXRlIG5ldy9mbGlzdCB8IHNlZCAtZSAncywuKiBkYXRlICwsJ2AKKysgICAgICAgcHdkPSRQV0QKKysgICAgICAgZmRpcj1gZGlybmFtZSAkZmlsZWAKKysgICAgICAgY2Qgb2xkLyRmZGlyCisrICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKysgICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKysgICAgICAgdW5qYXIgYGJhc2VuYW1lICRmaWxlYAorKyAgICAgICBjZCAkcHdkCisrICAgICAgIGxvY2FsIHJldD0wCisrICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKysgICAgICAgICBpZiB0ZXN0IC1mIG5ldy8kZmRpci8kZiAmJiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCisrICAgICAgICAgICByZXQ9MQorKyAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKysgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgIGZpCisrICAgICAgICAgZmkKKysgICAgICAgZG9uZQorKyAgICAgICByZXR1cm4gJHJldDs7CisrICAgICAqLnB5Y3wqLnB5bykKKysgICAgICAgIHBlcmwgLWUgIm9wZW4gZmgsICcrPCcsICdvbGQvJGZpbGUnOyBzZWVrIGZoLCA0LCBTRUVLX1NFVDsgcHJpbnQgZmggJzAwMDAnOyIKKysgICAgICAgIHBlcmwgLWUgIm9wZW4gZmgsICcrPCcsICduZXcvJGZpbGUnOyBzZWVrIGZoLCA0LCBTRUVLX1NFVDsgcHJpbnQgZmggJzAwMDAnOyIKKysgICAgICAgIDs7CisrICAgICAqLmJ6MikKKysgICAgICAgIGJ1bnppcDIgLWMgb2xkLyRmaWxlID4gb2xkLyR7ZmlsZS8uYnoyL30KKysgICAgICAgIGJ1bnppcDIgLWMgbmV3LyRmaWxlID4gbmV3LyR7ZmlsZS8uYnoyL30KKysgICAgICAgIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZS8uYnoyL30KKysgICAgICAgIHJldHVybiAkPworKyAgICAgICAgOzsKKysgICAgICouZ3opCisrICAgICAgICBndW56aXAgLWMgb2xkLyRmaWxlID4gb2xkLyR7ZmlsZS8uZ3ovfQorKyAgICAgICAgZ3VuemlwIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmd6L30KKysgICAgICAgIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZS8uZ3ovfQorKyAgICAgICAgcmV0dXJuICQ/CisrICAgICAgICA7OworKyAgICAgKi5ycG0pCisrCSRzZWxmX3NjcmlwdCAtYSBvbGQvJGZpbGUgbmV3LyRmaWxlCisrICAgICAgICByZXR1cm4gJD8KKysgICAgICAgIDs7CisrICAgICAqcG5nKQorKwkjIFRyeSB0byByZW1vdmUgdGltZXN0YW1wcywgb25seSBpZiBjb252ZXJ0IGZyb20gSW1hZ2VNYWdpY2sgaXMgaW5zdGFsbGVkCisrICAgICAgICBpZiBbWyAkKHR5cGUgLXAgY29udmVydCkgXV07IHRoZW4KKysJICBjb252ZXJ0IG9sZC8kZmlsZSArc2V0IGRhdGU6Y3JlYXRlICtzZXQgZGF0ZTptb2RpZnkgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30KKysJICBjb252ZXJ0IG9sZC8kZmlsZSArc2V0IGRhdGU6Y3JlYXRlICtzZXQgZGF0ZTptb2RpZnkgbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ30KKysJICBpZiAhIGNtcCAtcyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSBuZXcvJHtmaWxlLy5wbmcvX24ucG5nfTsgdGhlbgorKwkgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorKwkgICAgICBoZXhkdW1wIC1DIG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUxCisrCSAgICAgIGhleGR1bXAgLUMgbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ30gPiAkZmlsZTIKKysJICAgICAgZGlmZiAtdSAkZmlsZTEgJGZpbGUyIHwgaGVhZCAtbiAyMAorKwkgICAgICByZXR1cm4gMQorKwkgIGZpCisrCSAgcmV0dXJuIDAKKysJZmkKKysgICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2xvY2FsZS8qL0xDX01FU1NBR0VTLyoubW98L3Vzci9zaGFyZS9sb2NhbGUtYnVuZGxlLyovTENfTUVTU0FHRVMvKi5tbykKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgInMsUE9ULUNyZWF0aW9uLURhdGU6IC4uLi4tLi4tLi4gLi46Li4rLi4uLixQT1QtQ3JlYXRpb24tRGF0ZTogMTk3MC0wMS0wMSAwMDowMCswMDAwLCIgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9kb2MvcGFja2FnZXMvKi8qLmh0bWx8XAorKyAgICAgL3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qLyouaHRtbHwvdXNyL3NoYXJlL2RvYy8qL2h0bWwvKi5odG1sKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgICMgdGV4aTJodG1sIG91dHB1dCwgZS5nLiBpbiBrdm0sIGluZGVudCwgcWVtdQorKwkgc2VkIC1pIC1lICJzfF48IS0tIENyZWF0ZWQgb24gLiosIDIwLi4gYnkgdGV4aTJodG1sIC5cLi4ufDwhLS0gQ3JlYXRlZCBvbiBBdWd1c3QgNywgMjAwOSBieSB0ZXhpMmh0bWwgMS44MnwiICRmCisrCSBzZWQgLWkgLWUgJ3N8XiAqVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIGJ5IDxlbT5BdXRvYnVpbGQ8L2VtPiBvbiA8ZW0+LiosIDIwLi48L2VtPiB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyI+PGVtPnRleGkyaHRtbCAuXC4uLjwvZW0+PC9hPi4kfCAgVGhpcyBkb2N1bWVudCB3YXMgZ2VuZXJhdGVkIGJ5IDxlbT5BdXRvYnVpbGQ8L2VtPiBvbiA8ZW0+QXVndXN0IDcsIDIwMDk8L2VtPiB1c2luZyA8YSBocmVmPSJodHRwOi8vd3d3Lm5vbmdudS5vcmcvdGV4aTJodG1sLyI+PGVtPnRleGkyaHRtbCAxLjgyPC9lbT48L2E+LnwnICRmCisrCSAjIGRveHlnZW4gZG9jdSwgZS5nLiBpbiBsaWJzc2ggYW5kIGxvZzRjCisrCSBzZWQgLWkgLWUgJ3N8R2VuZXJhdGVkIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gMjBbMC05XVswLTldIGZvciB8R2VuZXJhdGVkIG9uIE1vbiBNYXkgMTAgMjA6NDU6MDAgMjAxMCBmb3IgfCcgJGYKKysJICMgR2VuZXJhdGVkIG9uIFNhdCBBdWcgMTQgMjAxMCAxNjo0OTo0OCBmb3IgbGlic3NoCisrCSBzZWQgLWkgLWUgJ3N8R2VuZXJhdGVkIG9uIC4uLiAuLi4gWzAtOV0qIDIwWzAtOV1bMC05XSBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIGZvciB8R2VuZXJhdGVkIG9uIE1vbiBNYXkgMTAgMjA6NDU6MDAgMjAxMCBmb3IgfCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi5odG1sIHxcCisrICAgICAvdXNyL3NoYXJlL2phdmFkb2MvKi8qLmh0bWx8L3Vzci9zaGFyZS9qYXZhZG9jLyovKi8qLmh0bWwpCisrICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKysgICAgICAgIyBUaGVyZSBhcmUgbW9yZSB0aW1lc3RhbXBzIGluIGh0bWwsIHNvIGZhciB3ZSBoYW5kbGUgb25seSBzb21lIHByaW1pdGl2ZSB2ZXJzaW9ucy4KKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAjIEphdmFkb2M6CisrICAgICAgICAgICMgPGhlYWQ+CisrICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyAodmVyc2lvbiAxLjcuMF83NSkgb24gVHVlIEZlYiAwMyAwMjoyMDoxMiBHTVQgMjAxNSAtLT4KKysgICAgICAgICAgIyA8IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFR1ZSBGZWIgMDMgMDA6MDI6NDggR01UIDIwMTUgLS0+CisrICAgICAgICAgICMgPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iMjAxNS0wMi0wMyI+CisrICAgICAgICAgICMgPC9oZWFkPgorKyAgICAgICAgICBzZWQgLWkgLWUgJworKyAgICAgICAgICAgIC9ePGhlYWQ+L3sKKysgICAgICAgICAgICAgIDogbmV4dAorKyAgICAgICAgICAgICAgbgorKyAgICAgICAgICAgICAgL148XC9oZWFkPi97CisrICAgICAgICAgICAgICAgIGIgZW5kX2hlYWQKKysgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgIHMvXlwoPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvY1wpIFwoKFwoYnVpbGRcfHZlcnNpb25cKSBbMC05Ll9dXCspIG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDUvCisrICAgICAgICAgICAgICB0IG5leHQKKysgICAgICAgICAgICAgIHMvXlwoPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvY1wpIFwob24gLi4uIC4uLiAuLiAuLjouLjouLiBcKEdNVFx8VVRDXCkgLi4uLlwpIFwoLS0+XCkvXDEgc29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSBcMy8KKysgICAgICAgICAgICAgIHQgbmV4dAorKyAgICAgICAgICAgICAgcy9ePG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0iWzAtOV1cezRcfS1bMC05XVx7Mlx9LVswLTldXHsyXH0iPi88bWV0YSBuYW1lPSJkYXRlIiBjb250ZW50PSJzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIj4vCisrICAgICAgICAgICAgICBiIG5leHQKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgOiBlbmRfaGVhZAorKyAgICAgICAgICAnICRmCisrICAgICAgICAgIyBHamRvYyBIdG1sRG9jbGV0OgorKwkgc2VkIC1pIC1lICdzJUdlbmVyYXRlZCBieSBHamRvYyBIdG1sRG9jbGV0IFswLTksLl0qLCBwYXJ0IG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jbGFzc3BhdGgvY3AtdG9vbHMvIiB0aXRsZT0iIiB0YXJnZXQ9Il90b3AiPkdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiAuKiwgMjAuLiBbMC05XSo6Li46Li4gXChhXHxwXClcLm1cLiBHTVQuJUdlbmVyYXRlZCBieSBHamRvYy4lJyAkZgorKwkgc2VkIC1pIC1lICdzJTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcKC4qXClHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gW0EtWl1bYS16XSogWzAtOV0qLCAyMD8/IFswLTldKjo/Pzo/PyBcKGF8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREIFhIVE1MIDEuMSBwbHVzIFRhcmdldCAxLjAvL0VOIlwxR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIEphbnVhcnkgMSwgMjAwOSAwOjAwOjAwIGEubS4gR01ULjwvcD4lJyAkZgorKwkgc2VkIC1pIC1lICdzJTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURFwoLipHTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPlwpLCBvbiBbYS16QS1aXSogWzAtOV1bMC05XSwgMjAuLiBbMC05XSo6Li46Li4gXChhXHxwXClcLm1cLiBHTVQuPC9wPiU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcMSxvbiBNYXkgMSwgMjAxMCAxOjExOjQyIHAubS4gR01ULjwvcD4lJyAkZgorKwkgIyBkZXByZWNhdGVkLWxpc3QgaXMgcmFuZG9tbHkgb3JkZXJlZCwgc29ydCBpdCBmb3IgY29tcGFyaXNvbgorKwkgY2FzZSAkZiBpbgorKwkgICAqL2RlcHJlY2F0ZWQtbGlzdC5odG1sKQorKwkgICAgIHNvcnQgLW8gJGYgJGYKKysJICAgICA7OworKwkgZXNhYworKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL2phdmFkb2MvZ2pkb2MucHJvcGVydGllcyB8XAorKyAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovZ2pkb2MucHJvcGVydGllcykKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysJIHNlZCAtaSAtZSAnc3xeI1tBLVpdW2Etel1cezJcfSBbQS1aXVthLXpdXHsyXH0gWzAtOV1cezJcfSAuLjouLjouLiBHTVQgMjAuLiR8I0ZyaSBKYW4gMDEgMTE6Mjc6MzYgR01UIDIwMDl8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAqL2ZvbnRzLnNjYWxlfCovZm9udHMuZGlyfCovZW5jb2RpbmdzLmRpcikKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICAjIHNvcnQgZmlsZXMgYmVmb3JlIGNvbXBhcmluZworKyAgICAgICAgIHNvcnQgLW8gJGYgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Zhci9hZG0vcGVybC1tb2R1bGVzLyopCisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgc2VkIC1pIC1lICdzfF49aGVhZDIgLi4uIC4uLiAuLiAuLjouLjouLiAuLi4uOiBDPE1vZHVsZT58PWhlYWQyIFdlZCBKdWwgIDEgMDA6MDA6MDAgMjAwOTogQzxNb2R1bGU+fCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9tYW4vbWFuMy8qM3BtKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKyAgICAgICAgIHNlZCAtaSAtZSAnc3wgMyAiMjAuLi0uLi0uLiIgInBlcmwgdjUuLi4uLiIgIlVzZXIgQ29udHJpYnV0ZWQgUGVybCBEb2N1bWVudGF0aW9uIiR8IDMgIjIwMDktMDEtMDEiICJwZXJsIHY1LjEwLjAiICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiJ8JyAkZgorKyAgICAgICAgIHRyaW1fbWFuX1RIICRmCisrICAgICAgICAgdHJpbV9tYW5fZmlyc3RfbGluZSAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdXNyL3NoYXJlL21hbi8qL21hbip8L3Vzci9zaGFyZS9tYW4vbWFuKnwvdXNyL2xpYi90ZXhtZi9kb2MvbWFuLyovKikKKysKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICB0cmltX21hbl9USCAkZgorKyAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKysgICAgICAgICAjIGdlbmVyYXRlZCBieSBkb2Nib29rIHhtbDoKKysgICAgICAgICAjLlwiICAgICAgRGF0ZTogMDkvMTMvMjAxMAorKyAgICAgICAgIHNlZCAtaSAtZSAnc3xEYXRlOiBbMC0xXVswLTldL1swLTldWzAtOV0vMjAxWzAtOV18RGF0ZTogMDkvMTMvMjAxMHwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgICouZWxjKQorKyAgICAgICAjIGVtYWNzIGxpc3AgZmlsZXMKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysgICAgICAgICBzZWQgLWkgLWUgJ3N8Q29tcGlsZWQgYnkgYWJ1aWxkQC4qIG9uIC4uLiAuLi4gLi4gLi46Li46Li4gMjAuLiR8Y29tcGlsZWQgYnkgYWJ1aWxkQGJ1aWxkaG9zdCBvbiBXZWQgSnVsIDAxIDAwOjAwOjAwIDIwMDl8JyAkZgorKyAgICAgICBkb25lCisrICAgICAgIDs7CisrICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy8qLypmbXQgfFwKKysgICAgIC92YXIvbGliL3RleG1mL3dlYjJjL21ldGFmb250LyouYmFzZXxcCisrICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhcG9zdC8qLm1lbSkKKysgICAgICAgIyBiaW5hcnkgZHVtcCBvZiBUZVggYW5kIE1ldGFmb250IGZvcm1hdHMsIHdlIGNhbiBpZ25vcmUgdGhlbSBmb3IgZ29vZAorKyAgICAgICBlY2hvICJkaWZmZXJlbmNlIGluICRmaWxlIGlnbm9yZWQuIgorKyAgICAgICByZXR1cm4gMAorKyAgICAgICA7OworKyAgICAgKi9saWJ0b29sKQorKyAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworKwkgIHNlZCAtaSAtZSAnc3xeIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgW0EtWmEtejAtOV0qOiR8IyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgeDQyOnwnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgIC9ldGMvbWFpbC8qY2Z8L2V0Yy9zZW5kbWFpbC5jZikKKysgICAgICAgIyBmcm9tIHNlbmRtYWlsIHBhY2thZ2UKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysJICAjIC0gIyMjIyMgYnVpbHQgYnkgYWJ1aWxkQGJ1aWxkMzMgb24gVGh1IE1heSA2IDExOjIxOjE3IFVUQyAyMDEwCisrCSAgc2VkIC1pIC1lICdzfGJ1aWx0IGJ5IGFidWlsZEBbYS16MC05XSogb24gLi4uIC4uLiBbMC05XSogWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSAuKiAyMFswLTldWzAtOV18YnVpbHQgYnkgYWJ1aWxkQGJ1aWxkNDIgb24gVGh1IE1heSA2IDExOjIxOjE3IFVUQyAyMDEwfCcgJGYKKysgICAgICAgZG9uZQorKyAgICAgICA7OworKyAgICAgL3Vzci9zaGFyZS9kb2Mva2RlL0hUTUwvKi8qL2luZGV4LmNhY2hlfC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qL2luZGV4LmNhY2hlfFwKKysgICAgIC91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sLyovKi5odG1sfC91c3Ivc2hhcmUvZ3RrLWRvYy9odG1sLyovKi5kZXZoZWxwMikKKysgICAgICAgIyB2YXJpb3VzIGtkZSBhbmQgZ3RrIHBhY2thZ2VzCisrICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKysgICAgICAgOzsKKysgICAgKi9jcmVhdGVkLnJpZCkKKysgICAgICAgIyBydWJ5IGRvY3VtZW50YXRpb24KKysgICAgICAgIyBmaWxlIGp1c3QgY29udGFpbnMgYSB0aW1lc3RhbXAgYW5kIG5vdGhpbmcgZWxzZSwgc28gaWdub3JlIGl0CisrICAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgKi9yZG9jL2ZpbGVzLyouaHRtbCkKKysgICAgICAgIyBydWJ5IGRvY3VtZW50YXRpb24KKysgICAgICAgIyA8dGQ+TW9u4oCCU2Vw4oCCMjDigIIxOTowMjo0M+KAgiswMDAw4oCCMjAxMDwvdGQ+CisrICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCisrICAgICAgICAgIHNlZCAtaSAtZSAncyU8dGQ+W0EtWl1bYS16XVthLXpdIFtBLVpdW2Etel1bYS16XSBbMC05XVwrIFswLTldXCs6WzAtOV1cKzpbMC05XVwrICswMDAwIDIwMVswLTldPC90ZD4lPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPiVnJyAkZgorKyAgICAgICBkb25lCisrICAgICAgIHN0cmlwX251bWJlcmVkX2FuY2hvcnMKKysgICAgICAgOzsKKysgICAgKi9MaW51eCpFbnYuU2V0LnNoKQorKyAgICAgICAjIExpYnJlT2ZmaWNlIGZpbGVzLCBjb250YWluczoKKysgICAgICAgIyBHZW5lcmF0ZWQgb246IE1vbiBBcHIgMTggMTM6MTk6MjIgVVRDIDIwMTEKKysgICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKysJIHNlZCAtaSAtZSAncyVeIyBHZW5lcmF0ZWQgb246LipVVEMgMjAxWzAtOV0gKiQlIyBHZW5lcmF0ZWQgb246IFNvbWV0aW1lJWcnICRmCisrICAgICAgIGRvbmUKKysgICAgICAgOzsKKysgICAgL3Vzci9saWIvbGlicmVvZmZpY2Uvc29sdmVyL2luYy8qL2RlbGl2ZXIubG9nKQorKyAgICAgICAjIExpYnJlT2ZmaWNlIGxvZyBmaWxlCisrICAgICAgZWNobyAiSWdub3JlICRmaWxlIgorKyAgICAgIHJldHVybiAwCisrICAgICAgOzsKKysgICAgL3Zhci9hZG0vdXBkYXRlLW1lc3NhZ2VzLyp8L3Zhci9hZG0vdXBkYXRlLXNjcmlwdHMvKikKKysgICAgICAjIGVuY29kZSB2ZXJzaW9uLXJlbGVhc2UgaW5zaWRlCisrICAgICAgb2xkZm49YGVjaG8gIiRmaWxlInxzZWQgLWUgcy8tJHJlbGVhc2UyLy0kcmVsZWFzZTEvO2AKKysKKysgICAgICAjIGZldGNobXN0dGZvbnRzIGVtYmVkcyB0aGUgcmVsZWFzZSBudW1iZXIgaW4gdGhlIHVwZGF0ZSBzaGVsbCBzY3JpcHQuCisrICAgICAgZWNobyBzZWQgLWkgLWUgInMvLSRyZWxlYXNlMS8tJHJlbGVhc2UyL2c7IiAib2xkLyRvbGRmbiIKKysgICAgICBzZWQgLWkgLWUgInMvLSRyZWxlYXNlMS8tJHJlbGVhc2UyL2c7IiAib2xkLyRvbGRmbiIKKysKKysgICAgICBpZiAhIGRpZmYgLXUgb2xkLyRvbGRmbiBuZXcvJGZpbGU7IHRoZW4KKysgICAgICAgICAgIGVjaG8gIiRvbGRmbiBpcyBub3Qgc2FtZSBhcyAkZmlsZSIKKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgZmkKKysgICAgICBlY2hvICIkZmlsZSBhbmQgJG9sZGZuIGFyZSBzYW1lIgorKyAgICAgIHJldHVybiAwCisrICAgICAgOzsKKysgICAgKi5wcykKKysgICAgICBmb3IgZiBpbiAib2xkLyRmaWxlIiAibmV3LyRmaWxlIjsgZG8KKysgICAgICAgIHNlZCAtaSAtZSAnCisrICAgICAgICAgIC9eJSVDcmVhdGlvbkRhdGU6W1s6Ymxhbms6XV0vZAorKyAgICAgICAgICAvXiUlQ3JlYXRvcjpbWzpibGFuazpdXWdyb2ZmW1s6Ymxhbms6XV12ZXJzaW9uW1s6Ymxhbms6XV0vZAorKyAgICAgICAgICAvXiVEVklQU1NvdXJjZTpbWzpibGFuazpdXS9kCisrICAgICAgICAnICIkZiIKKysgICAgICBkb25lCisrICAgIDs7CisrICAgICpwZGYpCisrICAgICAgIyBQREYgZmlsZXMgY29udGFpbiBhIHVuaXF1ZSBJRCwgcmVtb3ZlIGl0CisrICAgICAgIyBGb3JtYXQgb2YgdGhlIElEIGlzOgorKyAgICAgICMgL0lEIFs8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+IDw5QUNFMjQ3QTcwQ0Y5QkVBRkVFMTVFMTE2MjU5QkQ2RD5dCisrICAgICAgIyB3aXRoIG9wdGlvbmFsIHNwYWNlcy4gcGRmdGV4IGNyZWF0ZXMgYWxzbzoKKysgICAgICAjIC9DcmVhdGlvbkRhdGUgKEQ6MjAxMjAxMDMwODMyMDZaKQorKyAgICAgICMgL01vZERhdGUgKEQ6MjAxMjAxMDMwODMyMDZaKQorKyAgICAgICMgYW5kIHBvc3NpYmx5IFhNTCBtZXRhZGF0YSBhcyB3ZWxsCisrICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCisrICAgICAgICBzZWQgLWkgXAorKyAgICAgICAgICAgICcvb2JqLywvZW5kb2JqL3sKKysgICAgICAgICAgICAgICBzJS9JRCBcP1xbIFw/PFtePl1cKz4gXD88W14+XVwrPiBcP1xdJS9JRHJhbmRvbSVnOworKyAgICAgICAgICAgICAgIHMlL0NyZWF0aW9uRGF0ZSBcPyhEOlteKV0qKSUvQ3JlYXRpb25EYXRlIChEOiBYWFgpJWc7CisrICAgICAgICAgICAgICAgcyUvTW9kRGF0ZSBcPyhEOlteKV0qKSUvTW9kRGF0ZSAoRDogWFhYKSVnOworKyAgICAgICAgICAgICAgIHMlPHBkZjpDcmVhdGlvbkRhdGU+W148XSo8L3BkZjpDcmVhdGlvbkRhdGU+JTxwZGY6Q3JlYXRpb25EYXRlPlhYWDwvcGRmOkNyZWF0aW9uRGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTxwZGY6TW9kRGF0ZT5bXjxdKjwvcGRmOk1vZERhdGU+JTxwZGY6TW9kRGF0ZT5YWFg8L3BkZjpNb2REYXRlPiVnOworKyAgICAgICAgICAgICAgIHMlPHhhcDpDcmVhdGVEYXRlPltePF0qPC94YXA6Q3JlYXRlRGF0ZT4lPHhhcDpDcmVhdGVEYXRlPlhYWDwveGFwOkNyZWF0ZURhdGU+JWc7CisrICAgICAgICAgICAgICAgcyU8eGFwOk1vZGlmeURhdGU+W148XSo8L3hhcDpNb2RpZnlEYXRlPiU8eGFwOk1vZGlmeURhdGU+WFhYPC94YXA6TW9kaWZ5RGF0ZT4lZzsKKysgICAgICAgICAgICAgICBzJTx4YXA6TWV0YWRhdGFEYXRlPltePF0qPC94YXA6TWV0YWRhdGFEYXRlPiU8eGFwOk1ldGFkYXRhRGF0ZT5YWFg8L3hhcDpNZXRhZGF0YURhdGU+JWc7CisrICAgICAgICAgICAgfScgIiRmIgorKyAgICAgIGRvbmUKKysgICAgICA7OworKyAgZXNhYworKworKyAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorKyAgY2FzZSAkZnR5cGUgaW4KKysgICAgIFBFMzJcIGV4ZWN1dGFibGUqTW9ub1wvXC5OZXRcIGFzc2VtYmx5KikKKysgICAgICAgZWNobyAiUEUzMiBNb25vLy5OZXQgYXNzZW1ibHk6ICRmaWxlIgorKyAgICAgICBpZiBbIC14IC91c3IvYmluL21vbm9kaXMgXSA7IHRoZW4KKysgICAgICAgICBtb25vZGlzIG9sZC8kZmlsZSAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvR1VJRCA9IHsuKn0vR1VJRCA9IHsgNDIgfS87Jz4gJHtmaWxlMX0KKysgICAgICAgICBtb25vZGlzIG5ldy8kZmlsZSAyPi9kZXYvbnVsbHxzZWQgLWUgJ3MvR1VJRCA9IHsuKn0vR1VJRCA9IHsgNDIgfS87Jz4gJHtmaWxlMn0KKysgICAgICAgICBpZiAhIGNtcCAtcyAke2ZpbGUxfSAke2ZpbGUyfTsgdGhlbgorKyAgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysgICAgICAgICAgIGRpZmYgLXUgJHtmaWxlMX0gJHtmaWxlMn0KKysgICAgICAgICAgIHJldHVybiAxCisrICAgICAgICAgZmkKKysgICAgICAgZWxzZQorKyAgICAgICAgIGVjaG8gIkNhbm5vdCBjb21wYXJlLCBubyBtb25vZGlzIGluc3RhbGxlZCIKKysgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICBFTEYqZXhlY3V0YWJsZSp8RUxGKltMTV1TQlwgc2hhcmVkXCBvYmplY3QqKQorKyAgICAgICBvYmpkdW1wIC1kIC0tbm8tc2hvdy1yYXctaW5zbiBvbGQvJGZpbGUgfCBmaWx0ZXJfZGlzYXNtID4gJGZpbGUxCisrICAgICAgIGlmICEgdGVzdCAtcyAkZmlsZTE7IHRoZW4KKysgICAgICAgICAjIG9iamR1bXAgaGFzIG5vIGlkZWEgaG93IHRvIGhhbmRsZSBpdAorKyAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKysgICAgICAgICAgIHJldD0xCisrICAgICAgICAgICBicmVhaworKyAgICAgICAgIGZpCisrICAgICAgIGZpICAgICAgIAorKyAgICAgICBlbGZkaWZmPQorKyAgICAgICBzZWQgLWkgLWUgInMsb2xkLywsIiAkZmlsZTEKKysgICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gbmV3LyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMgorKyAgICAgICBzZWQgLWkgLWUgInMsbmV3LywsIiAkZmlsZTIKKysgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTIgPiAkZGZpbGU7IHRoZW4KKysgICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyBpbiBhc3NlbWJsZXIgb3V0cHV0IgorKyAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKysgICAgICAgICAgZWxmZGlmZj0iMSIKKysgICAgICAgZmkKKysgICAgICAgZWNobyAiIiA+JGZpbGUxCisrICAgICAgIGVjaG8gIiIgPiRmaWxlMgorKyAgICAgICAjIERvbid0IGNvbXBhcmUgLmJ1aWxkLWlkIGFuZCAuZ251X2RlYnVnbGluayBzZWN0aW9ucworKyAgICAgICBzZWN0aW9ucz0iJChvYmpkdW1wIC1zIG5ldy8kZmlsZSB8IGdyZXAgIkNvbnRlbnRzIG9mIHNlY3Rpb24gLio6IiB8IHNlZCAtciAicywuKiAoLiopOixcMSxnIiB8IGdyZXAgLXYgLWUgIlwuYnVpbGQtaWQiIC1lICJcLmdudV9kZWJ1Z2xpbmsiIHwgdHIgIlxuIiAiICIpIgorKyAgICAgICBmb3Igc2VjdGlvbiBpbiAkc2VjdGlvbnM7IGRvCisrICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gb2xkLyRmaWxlIHwgc2VkICJzLF5vbGQvLCwiID4gJGZpbGUxCisrICAgICAgICAgIG9iamR1bXAgLXMgLWogJHNlY3Rpb24gbmV3LyRmaWxlIHwgc2VkICJzLF5uZXcvLCwiID4gJGZpbGUyCisrICAgICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCisrICAgICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gRUxGIHNlY3Rpb24gJHNlY3Rpb24iCisrICAgICAgICAgICAgIGhlYWQgLW4gMjAwICRkZmlsZQorKyAgICAgICAgICAgICBlbGZkaWZmPSIxIgorKyAgICAgICAgICBmaQorKyAgICAgICBkb25lCisrICAgICAgIGlmIHRlc3QgLXogIiRlbGZkaWZmIjsgdGhlbgorKyAgICAgICAgICBlY2hvICIkZmlsZTogb25seSBkaWZmZXJlbmNlIHdhcyBpbiBidWlsZC1pZCBvciBnbnVfZGVidWdsaW5rLCBHT09ELiIKKysgICAgICAgICAgcmV0dXJuIDAKKysgICAgICAgZmkKKysgICAgICAgcmV0dXJuIDEKKysgICAgICAgOzsKKysgICAgICpBU0NJSSp8KnRleHQqKQorKyAgICAgICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCisrICAgICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKysgICAgICAgICBkaWZmIC11IG9sZC8kZmlsZSBuZXcvJGZpbGUgfCBoZWFkIC1uIDIwMAorKyAgICAgICAgIHJldHVybiAxCisrICAgICAgIGZpCisrICAgICAgIDs7CisrICAgICBkaXJlY3Rvcnl8c2V0dWlkLFwgZGlyZWN0b3J5fHN0aWNreSxcIGRpcmVjdG9yeSkKKysgICAgICAgIyB0YXIgbWlnaHQgcGFja2FnZSBkaXJlY3RvcmllcyAtIGlnbm9yZSB0aGVtIGhlcmUKKysgICAgICAgcmV0dXJuIDAKKysgICAgICAgOzsKKysgICAgIGJ6aXAyXCBjb21wcmVzc2VkXCBkYXRhKikKKysgICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiYnoyIjsgdGhlbgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIGd6aXBcIGNvbXByZXNzZWRcIGRhdGEqKQorKyAgICAgICBpZiAhIGNoZWNrX2NvbXByZXNzZWRfZmlsZSAiJGZpbGUiICJnemlwIjsgdGhlbgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgIFhaXCBjb21wcmVzc2VkXCBkYXRhKikKKysgICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAieHoiOyB0aGVuCisrICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgUE9TSVhcIHRhclwgYXJjaGl2ZSkKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorKyAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CisrICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKysgICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgY3Bpb1wgYXJjaGl2ZSkKKysgICAgICAgICAgbXYgb2xkLyRmaWxleywuY3Bpb30KKysgICAgICAgICAgbXYgbmV3LyRmaWxleywuY3Bpb30KKysgICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGV9LmNwaW87IHRoZW4KKysgICAgICAgICAgICByZXR1cm4gMQorKyAgICAgICAgICBmaQorKyAgICAgOzsKKysgICAgIHN5bWJvbGljXCBsaW5rXCB0b1wgKikKKysgICAgICAgcmVhZGxpbmsgIm9sZC8kZmlsZSIgPiAkZmlsZTEKKysgICAgICAgcmVhZGxpbmsgIm5ldy8kZmlsZSIgPiAkZmlsZTIKKysgICAgICAgaWYgISBkaWZmIC11ICRmaWxlMSAkZmlsZTI7IHRoZW4KKysgICAgICAgICBlY2hvICJzeW1saW5rIHRhcmdldCBmb3IgJGZpbGUgZGlmZmVycyIKKysgICAgICAgICByZXR1cm4gMQorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgICAgKikKKysgICAgICAgaWYgISBkaWZmX3R3b19maWxlczsgdGhlbgorKyAgICAgICAgICAgcmV0dXJuIDEKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgIGVzYWMKKysgIHJldHVybiAwCisrfQorKworKyMgV2UgbmVlZCAvcHJvYyBtb3VudGVkIGZvciBzb21lIHRlc3RzLCBzbyBjaGVjayB0aGF0IGl0J3MgbW91bnRlZCBhbmQKKysjIGNvbXBsYWluIGlmIG5vdC4KKytQUk9DX01PVU5URUQ9MAorK2lmIFsgISAtZCAvcHJvYy9zZWxmLyBdOyB0aGVuCisrICBlY2hvICIvcHJvYyBpcyBub3QgbW91bnRlZCIKKysgIG1vdW50IC1vcncgLW4gLXRwcm9jIG5vbmUgL3Byb2MKKysgIFBST0NfTU9VTlRFRD0xCisrZmkKKysKKysjIHByZXNlcnZlIGNtcF9zcGVjIHJlc3VsdCBmb3IgY2hlY2tfYWxsIHJ1bnMKKytyZXQ9JFJFUworK2ZvciBmaWxlIGluICRmaWxlczsgZG8KKysgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmaWxlOyB0aGVuCisrICAgICAgIHJldD0xCisrICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCisrICAgICAgICAgICBicmVhaworKyAgICAgICBmaQorKyAgIGZpCisrZG9uZQorKworK2lmIFsgIiRQUk9DX01PVU5URUQiIC1lcSAiMSIgXTsgdGhlbgorKyAgZWNobyAiVW5tb3VudGluZyBwcm9jIgorKyAgdW1vdW50IC9wcm9jCisrZmkKKysKKytybSAkZmlsZTEgJGZpbGUyICRkZmlsZSAkcmVuYW1lX3NjcmlwdAorK3JtIC1yZiAkZGlyCisraWYgdGVzdCAiJHJldCIgPSAwOyB0aGVuCisrICAgICBlY2hvICJQYWNrYWdlIGNvbnRlbnQgaXMgaWRlbnRpY2FsIgorK2ZpCisrZXhpdCAkcmV0CisrIyB2aW06IHR3PTY2NiB0cz0yIGV0CitkaWZmIC0tZ2l0IGEvcnBtLWNoZWNrLnNoIGIvcnBtLWNoZWNrLnNoCitkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IGRkNDc2NDIuLjAwMDAwMDAKKy0tLSBhL3JwbS1jaGVjay5zaAorKysrIC9kZXYvbnVsbAorQEAgLTEsNzY0ICswLDAgQEAKKy0jISAvYmluL2Jhc2gKKy0jCistIyBDb3B5cmlnaHQgKGMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgU1VTRSBMaW51eCBQcm9kdWN0IEdtYkgsIEdlcm1hbnkuCistIyBMaWNlbnNlZCB1bmRlciBHUEwgdjIsIHNlZSBDT1BZSU5HIGZpbGUgZm9yIGRldGFpbHMuCistIworLSMgV3JpdHRlbiBieSBNaWNoYWVsIE1hdHogYW5kIFN0ZXBoYW4gQ29vbG8KKy0jIEVuaGFuY2VkIGJ5IEFuZHJlYXMgSmFlZ2VyCistCistRlVOQ1RJT05TPSR7MCUvKn0vZnVuY3Rpb25zLnNoCistCistY2hlY2tfYWxsPQorLWNhc2UgJDEgaW4KKy0gIC1hIHwgLS1jaGVjay1hbGwpCistICAgIGNoZWNrX2FsbD0xCistICAgIHNoaWZ0CistZXNhYworLQorLWlmIHRlc3QgIiQjIiAhPSAyOyB0aGVuCistICAgZWNobyAidXNhZ2U6ICQwIFstYXwtLWNoZWNrLWFsbF0gb2xkLnJwbSBuZXcucnBtIgorLSAgIGV4aXQgMQorLWZpCistCistc2VsZl9zY3JpcHQ9JChjZCAkKGRpcm5hbWUgJDApOyBlY2hvICQocHdkKS8kKGJhc2VuYW1lICQwKSkKKy0KKy1zb3VyY2UgJEZVTkNUSU9OUworLQorLW9sZHBrZz1gcmVhZGxpbmsgLWYgJDFgCistbmV3cGtnPWByZWFkbGluayAtZiAkMmAKKy1yZW5hbWVfc2NyaXB0PWBta3RlbXBgCistCistaWYgdGVzdCAhIC1mICIkb2xkcGtnIjsgdGhlbgorLSAgICBlY2hvICJjYW4ndCBvcGVuICQxIgorLSAgICBleGl0IDEKKy1maQorLQorLWlmIHRlc3QgISAtZiAiJG5ld3BrZyI7IHRoZW4KKy0gICAgZWNobyAiY2FuJ3Qgb3BlbiAkMiIKKy0gICAgZXhpdCAxCistZmkKKy0KKy0jdXNhZ2UgdW5qYXIgPGZpbGU+CistZnVuY3Rpb24gdW5qYXIoKQorLXsKKy0gICAgbG9jYWwgZmlsZQorLSAgICBmaWxlPSQxCistCistICAgIGlmIFtbICQodHlwZSAtcCBmYXN0amFyKSBdXTsgdGhlbgorLSAgICAgICAgVU5KQVI9ZmFzdGphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCBqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1qYXIKKy0gICAgZWxpZiBbWyAkKHR5cGUgLXAgdW56aXApIF1dOyB0aGVuCistICAgICAgICBVTkpBUj11bnppcAorLSAgICBlbHNlCistICAgICAgICBlY2hvICJFUlJPUjogamFyLCBmYXN0amFyLCBvciB1bnppcCBpcyBub3QgaW5zdGFsbGVkICh0cnlpbmcgZmlsZSAkZmlsZSkiCistICAgICAgICBleGl0IDEKKy0gICAgZmkKKy0KKy0gICAgY2FzZSAkVU5KQVIgaW4KKy0gICAgICAgIGphcnxmYXN0amFyKQorLSAgICAgICAgIyBlY2hvIGphciAteGYgJGZpbGUKKy0gICAgICAgICR7VU5KQVJ9IC14ZiAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgICAgIHVuemlwKQorLSAgICAgICAgdW56aXAgLW9xcSAkZmlsZQorLSAgICAgICAgOzsKKy0gICAgZXNhYworLX0KKy0KKy0jIGxpc3QgZmlsZXMgaW4gZGlyZWN0b3J5CistI3VzYWdlIHVuamFyX2wgPGZpbGU+CistZnVuY3Rpb24gdW5qYXJfbCgpCisteworLSAgICBsb2NhbCBmaWxlCistICAgIGZpbGU9JDEKKy0KKy0gICAgaWYgW1sgJCh0eXBlIC1wIGZhc3RqYXIpIF1dOyB0aGVuCistICAgICAgICBVTkpBUj1mYXN0amFyCistICAgIGVsaWYgW1sgJCh0eXBlIC1wIGphcikgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPWphcgorLSAgICBlbGlmIFtbICQodHlwZSAtcCB1bnppcCkgXV07IHRoZW4KKy0gICAgICAgIFVOSkFSPXVuemlwCistICAgIGVsc2UKKy0gICAgICAgIGVjaG8gIkVSUk9SOiBqYXIsIGZhc3RqYXIsIG9yIHVuemlwIGlzIG5vdCBpbnN0YWxsZWQgKHRyeWluZyBmaWxlICRmaWxlKSIKKy0gICAgICAgIGV4aXQgMQorLSAgICBmaQorLQorLSAgICBjYXNlICRVTkpBUiBpbgorLSAgICAgICAgamFyfGZhc3RqYXIpCistICAgICAgICAke1VOSkFSfSAtdGYgJGZpbGUKKy0gICAgICAgIDs7CistICAgICAgICB1bnppcCkKKy0gICAgICAgIHVuemlwIC1sICRmaWxlCistICAgICAgICA7OworLSAgICBlc2FjCistfQorLQorLWZpbHRlcl9kaXNhc20oKQorLXsKKy0gICBzZWQgLWUgJ3MvXiAqWzAtOWEtZl1cKzovLycgLWUgJ3MvXCQweFswLTlhLWZdXCsvJHNvbWV0aGluZy8nIC1lICdzL2NhbGxxICpbMC05YS1mXVwrL2NhbGxxIC8nIC1lICdzLyMgKlswLTlhLWZdXCsvIyAgLycgLWUgJ3MvXCgweFwpXD9bMC05YS1mXVwrKC9vZmZzZXQoLycgLWUgJ3MvWzAtOWEtZl1cKyA8LzwvJyAtZSAncy9ePFwoLipcKT46L1wxOi8nIC1lICdzLzxcKC4qXCkrMHhbMC05YS1mXVwrPi88XDEgKyBvZnM+LycgCistfQorLQorLWVjaG8gIkNvbXBhcmluZyBgYmFzZW5hbWUgJG9sZHBrZ2AgdG8gYGJhc2VuYW1lICRuZXdwa2dgIgorLQorLWNhc2UgJG9sZHBrZyBpbgorLSAgKi5ycG0pCistICAgICBjbXBfc3BlYyAkcmVuYW1lX3NjcmlwdCAkb2xkcGtnICRuZXdwa2cKKy0gICAgIFJFUz0kPworLSAgICAgY2FzZSAkUkVTIGluCistICAgICAgIDApCistICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGlkZW50aWNhbCIKKy0gICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgZXhpdCAwCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgIDEpCistICAgICAgICAgIGVjaG8gIlJQTSBtZXRhIGluZm9ybWF0aW9uIGlzIGRpZmZlcmVudCIKKy0gICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgZXhpdCAxCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgIDIpCistICAgICAgICAgIGVjaG8gIlJQTSBmaWxlIGNoZWNrc3VtIGRpZmZlcnMuIgorLSAgICAgICAgICBSRVM9MAorLSAgICAgICAgICA7OworLSAgICAgICAqKQorLSAgICAgICAgICBlY2hvICJXcm9uZyBleGl0IGNvZGUhIgorLSAgICAgICAgICBleGl0IDEKKy0gICAgICAgICAgOzsKKy0gICAgIGVzYWMKKy0gICAgIDs7CistZXNhYworLQorLWZpbGUxPWBta3RlbXBgCistZmlsZTI9YG1rdGVtcGAKKy0KKy1kaXI9YG1rdGVtcCAtZGAKKy1lY2hvICJFeHRyYWN0aW5nIHBhY2thZ2VzIgorLXVucGFja2FnZSAkb2xkcGtnICRkaXIvb2xkCistdW5wYWNrYWdlICRuZXdwa2cgJGRpci9uZXcKKy0KKy0jIGZpbGVzIGlzIHNldCBpbiBjbXBfc3BlYyBmb3IgcnBtcywgc28gaWYgUkVTIGlzIGVtcHR5IHdlIHNob3VsZCBhc3N1bWUKKy0jIGl0IHdhc24ndCBhbiBycG0gYW5kIHBpY2sgYWxsIGZpbGVzIGZvciBjb21wYXJpc29uLgorLWlmIFsgLXogJFJFUyBdOyB0aGVuCistICAgIG9sZGZpbGVzPWBjZCAkZGlyL29sZDsgZmluZCAuIC10eXBlIGZgCistICAgIG5ld2ZpbGVzPWBjZCAkZGlyL25ldzsgZmluZCAuIC10eXBlIGZgCistCistICAgIGZpbGVzPWBlY2hvIC1lICIkb2xkZmlsZXNcbiRuZXdmaWxlcyIgfCBzb3J0IC11YAorLWZpCistCistY2QgJGRpcgorLWJhc2ggJHJlbmFtZV9zY3JpcHQKKy0KKy1kZmlsZT1gbWt0ZW1wYAorLQorLWRpZmZfdHdvX2ZpbGVzKCkKKy17CistICBpZiAhIGNtcCAtcyBvbGQvJGZpbGUgbmV3LyRmaWxlOyB0aGVuCistICAgICBlY2hvICIkZmlsZSBkaWZmZXJzICgkZnR5cGUpIgorLSAgICAgaGV4ZHVtcCAtQyBvbGQvJGZpbGUgPiAkZmlsZTEKKy0gICAgIGhleGR1bXAgLUMgbmV3LyRmaWxlID4gJGZpbGUyCistICAgICBkaWZmIC11ICRmaWxlMSAkZmlsZTIgfCBoZWFkIC1uIDIwMAorLSAgICAgcmV0dXJuIDEKKy0gIGZpCistICByZXR1cm4gMAorLX0KKy0KKy10cmltX21hbl9maXJzdF9saW5lKCkKKy17CistICAgICMgSGFuZGxlcyB0aGUgZmlyc3QgbGluZSBpZiBpdCBpcyBsaWtlOgorLSAgICAjLlwiIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFBvZDo6TWFuIDIuMjggKFBvZDo6U2ltcGxlIDMuMjgpCistICAgICMuXCIgRE8gTk9UIE1PRElGWSBUSElTIEZJTEUhICBJdCB3YXMgZ2VuZXJhdGVkIGJ5IGhlbHAybWFuIDEuNDMuMy4KKy0gICAgbG9jYWwgZj0kMQorLSAgICBzZWQgLWkgLWUgJzF7CistICAgIHN8XlwuXFwiW1s6Ymxhbms6XV1cK0F1dG9tYXRpY2FsbHlbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXVBvZDo6TWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIFBvZDo6TWFufAorLSAgICBzfF5cLlxcIltbOmJsYW5rOl1dXCtET1tbOmJsYW5rOl1dTk9UW1s6Ymxhbms6XV1NT0RJRllbWzpibGFuazpdXVRISVNbWzpibGFuazpdXUZJTEUhW1s6Ymxhbms6XV1cK0l0W1s6Ymxhbms6XV13YXNbWzpibGFuazpdXWdlbmVyYXRlZFtbOmJsYW5rOl1dYnlbWzpibGFuazpdXWhlbHAybWFuW1s6Ymxhbms6XV0uKnwuXFwiIE92ZXJseSB2ZXJib3NlIGhlbHAybWFufAorLSAgICB9JyAkZgorLX0KKy0KKy10cmltX21hbl9USCgpCisteworLSAgICAjIEhhbmRsZXMgbGluZXMgbGlrZToKKy0gICAgIyAuVEggZGViaGVscGVyIDcgIjIwMTAtMDItMjciICI3LjQuMTUiICJEZWJoZWxwZXIiCistICAgICMgLlRIIERJUk1OR1ItQ0xJRU5UIDEgMjAxMC0wMi0yNyAiRGlybW5nciAxLjAuMyIgIkdOVSBQcml2YWN5IEd1YXJkIgorLSAgICAjIC5USCBjY21ha2UgMSAiTWFyY2ggMDYsIDIwMTAiICJjY21ha2UgMi44LjEtcmMzIgorLSAgICAjIC5USCBRRU1VLUlNRyAxICIyMDEwLTAzLTE0IiAiICIgIiAiCistICAgICMgLlRIIGtkZWNtYWtlIDEgIk1heSAwNywgMjAxMCIgImNtYWtlIDIuOC4xIgorLSAgICAjIC5USCAiYXBwZW5kZXIuaCIgMyAiMTIgTWF5IDIwMTAiICJWZXJzaW9uIDEuMi4xIiAibG9nNGMiIFwiIC0qLSBucm9mZiAtKi0KKy0gICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCistICAgICMgLlRIICJPRkZMSU5FSU1BUCIgIjEiICIxMSBNYXkgMjAxMCIgIkpvaG4gR29lcnplbiIgIk9mZmxpbmVJTUFQIE1hbnVhbCIKKy0gICAgIyAuVEggZ3YgM2d1aWxlICIxMyBNYXkgMjAxMCIKKy0gICAgIy5USCAiR0lUXC1BUkNISU1QT1JUIiAiMSIgIjA5LzEzLzIwMTAiICJHaXQgMVwmLjdcJi4xIiAiR2l0IE1hbnVhbCIKKy0gICAgIyAuVEggTERJUkVDVE9SRCA4ICIyMDEwLTEwLTIwIiAicGVybCB2NS4xMi4yIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24iCistICAgICMgLlRIIGNjbWFrZSAxICJGZWJydWFyeSAwNSwgMjAxMiIgImNjbWFrZSAyLjguNyIKKy0gICAgIyAuVEjigIIiYXBwZW5kZXIuaCLigIIz4oCCIlR1ZeKAgkF1Z+KAgjMx4oCCMjAxMCLigIIiVmVyc2lvbuKAgjEuMi4xIuKAgiJsb2c0YyLigIJcIuKAgi0qLeKAgm5yb2Zm4oCCLSotCistICAgICMgLlRIIEFSQ0ggIjEiICJTZXB0ZW1iZXIgMjAxMCIgIkdOVSBjb3JldXRpbHMgOC41IiAiVXNlciBDb21tYW5kcyIKKy0gICAgIyAuVEggIkdDTS1DQUxJQlJBVEUiICIxIiAiMDMgRmVicnVhcnkgMjAxMiIgIiIgIiIKKy0gICAgIy5USCBMb2NhbGU6OlBvNGE6OlhtbC5wbSAzcG0gIjIwMTUtMDEtMzAiICJQbzRhIFRvb2xzIiAiUG80YSBUb29scyIKKy0gICAgbG9jYWwgZj0kMQorLSAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHF1b3RlZF9kYXRlKSgqKQorLSAgICBzZWQgLWkgLWUgJ3N8XlwoW1s6Ymxhbms6XV0qXC5USFtbOmJsYW5rOl1dXCsiW14iXVwrIltbOmJsYW5rOl1dXCtbXls6Ymxhbms6XV1cK1wpW1s6Ymxhbms6XV1cK1woIlteIl1cKyJcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSAicXEyMDAwLTAxLTAxIlwzfCcgJGYKKy0gICAgIyAoLlRIIHVucXVvdGVkIHNlY3Rpb24pIChxdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXCgiW14iXVwrIlwpXChbWzpibGFuazpdXVwrLipcKVw/fFwxICJ1cTIwMDAtMDItMDIiXDN8JyAkZgorLSAgICAjICguVEggICBxdW90ZWQgc2VjdGlvbikgKHVucXVvdGVkX2RhdGUpKCopCistICAgIHNlZCAtaSAtZSAnc3xeXChbWzpibGFuazpdXSpcLlRIW1s6Ymxhbms6XV1cKyJbXiJdXCsiW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSBxdTIwMDAtMDMtMDNcM3wnICRmCistICAgICMgKC5USCB1bnF1b3RlZCBzZWN0aW9uKSAodW5xdW90ZWRfZGF0ZSkoKikKKy0gICAgc2VkIC1pIC1lICdzfF5cKFtbOmJsYW5rOl1dKlwuVEhbWzpibGFuazpdXVwrW14iXVteWzpibGFuazpdXVwrW1s6Ymxhbms6XV1cK1teWzpibGFuazpdXVwrXClbWzpibGFuazpdXVwrXChbXiJdW15bOmJsYW5rOl1dXCtcKVwoW1s6Ymxhbms6XV1cKy4qXClcP3xcMSB1dTIwMDAtMDQtMDRcM3wnICRmCistfQorLQorLXN0cmlwX251bWJlcmVkX2FuY2hvcnMoKQorLXsKKy0gICMgUmVtb3ZlIG51bWJlcmVkIGFuY2hvcnMgb24gRG9jYm9vayAvIEhUTUwgZmlsZXMuCistICAjIFRoaXMgc2hvdWxkIGJlIHNhdmUgc2luY2Ugd2UgcmVtb3ZlIHRoZW0gZnJvbSBvbGQgYW5kIG5ldyBmaWxlcy4KKy0gICMgQSB0cmFpbGluZyA8L2E+IG9yIDwvZGl2PiB0YWcgd2lsbCBzdGF5IGFsc28gb24gYm90aCBmaWxlcy4KKy0gIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICBzZWQgLWkgLWUgJ3MlPFsgXSphWyBdXCtuYW1lW148XSpbMC05XVwrW148XSolJWcnIFwKKy0gICAgIC1lICdzJTxbIF0qYVsgXVwraHJlZltePF0qI1tePF0qWzAtOV1cK1tePF0qJSVnJyBcCistICAgICAtZSAncyU8W148XSppZD0iZnRuXC5bXjxdKlswLTldXCtbXjxdKiUlZycgJGYKKy0gIGRvbmUKKy19CistCistCistY2hlY2tfY29tcHJlc3NlZF9maWxlKCkKKy17CistICBsb2NhbCBmaWxlPSQxCistICBsb2NhbCBleHQ9JDIKKy0gIGxvY2FsIHRtcGRpcj1gbWt0ZW1wIC1kYAorLSAgbG9jYWwgZnR5cGUKKy0gIGxvY2FsIHJldD0wCistICBlY2hvICIkZXh0IGZpbGUgd2l0aCBvZGQgZmlsZW5hbWU6ICRmaWxlIgorLSAgaWYgdGVzdCAtbiAiJHRtcGRpciI7IHRoZW4KKy0gICAgbWtkaXIgJHRtcGRpci97b2xkLG5ld30KKy0gICAgY3AgLS1wYXJlbnRzIC0tZGVyZWZlcmVuY2Ugb2xkLyRmaWxlICR0bXBkaXIvCistICAgIGNwIC0tcGFyZW50cyAtLWRlcmVmZXJlbmNlIG5ldy8kZmlsZSAkdG1wZGlyLworLSAgICBpZiBwdXNoZCAkdG1wZGlyID4gL2Rldi9udWxsIDsgdGhlbgorLSAgICAgIGNhc2UgIiRleHQiIGluCistICAgICAgICBiejIpCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLmJ6Mn0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywuYnoyfQorLSAgICAgICAgICBiemlwMiAtZCBvbGQvJGZpbGUuYnoyCistICAgICAgICAgIGJ6aXAyIC1kIG5ldy8kZmlsZS5iejIKKy0gICAgICAgICAgOzsKKy0gICAgICAgIGd6aXApCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLmd6fQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5nen0KKy0gICAgICAgICAgZ3ppcCAtZCBvbGQvJGZpbGUuZ3oKKy0gICAgICAgICAgZ3ppcCAtZCBuZXcvJGZpbGUuZ3oKKy0gICAgICAgICAgOzsKKy0gICAgICAgIHh6KQorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC54en0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywueHp9CistICAgICAgICAgIHh6IC1kIG9sZC8kZmlsZS54egorLSAgICAgICAgICB4eiAtZCBuZXcvJGZpbGUueHoKKy0gICAgICAgICAgOzsKKy0gICAgICBlc2FjCistICAgICAgZnR5cGU9YC91c3IvYmluL2ZpbGUgb2xkLyRmaWxlIHwgc2VkICdzQF5bXjpdXCs6W1s6Ymxhbms6XV0qQEAnYAorLSAgICAgIGNhc2UgJGZ0eXBlIGluCistICAgICAgICBQT1NJWFwgdGFyXCBhcmNoaXZlKQorLSAgICAgICAgICBlY2hvICIkZXh0IGNvbnRlbnQgaXM6ICRmdHlwZSIKKy0gICAgICAgICAgbXYgb2xkLyRmaWxleywudGFyfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC50YXJ9CistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS50YXI7IHRoZW4KKy0gICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgICAgQVNDSUlcIGNwaW9cIGFyY2hpdmVcICopCistICAgICAgICAgIGVjaG8gIiRleHQgY29udGVudCBpczogJGZ0eXBlIgorLSAgICAgICAgICBtdiBvbGQvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBtdiBuZXcvJGZpbGV7LC5jcGlvfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0uY3BpbzsgdGhlbgorLSAgICAgICAgICAgIHJldD0xCistICAgICAgICAgIGZpCistICAgICAgICAgIDs7CistICAgICAgICAqKQorLSAgICAgICAgICBlY2hvICJ1bmhhbmRsZWQgJGV4dCBjb250ZW50OiAkZnR5cGUiCistICAgICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKy0gICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICBmaQorLSAgICAgICAgICA7OworLSAgICAgIGVzYWMKKy0gICAgICBwb3BkID4gL2Rldi9udWxsCistICAgIGZpCistICAgIHJtIC1yZiAiJHRtcGRpciIKKy0gIGZpCistICByZXR1cm4gJHJldAorLX0KKy0KKy1jaGVja19zaW5nbGVfZmlsZSgpCisteworLSAgbG9jYWwgZmlsZT0iJDEiCistICBjYXNlICRmaWxlIGluCistICAgICouc3BlYykKKy0gICAgICAgc2VkIC1pIC1lICJzLFJlbGVhc2U6LiokcmVsZWFzZTEsUmVsZWFzZTogQFJFTEVBU0VALCIgb2xkLyRmaWxlCistICAgICAgIHNlZCAtaSAtZSAicyxSZWxlYXNlOi4qJHJlbGVhc2UyLFJlbGVhc2U6IEBSRUxFQVNFQCwiIG5ldy8kZmlsZQorLSAgICAgICA7OworLSAgICAqLmV4ZS5tZGJ8Ki5kbGwubWRiKQorLSAgICAgICAjIEp1c3QgZGVidWcgaW5mb3JtYXRpb24sIHdlIGNhbiBza2lwIHRoZW0KKy0gICAgICAgZWNobyAiJGZpbGUgc2tpcHBlZCBhcyBkZWJ1ZyBmaWxlLiIKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgKi5hKQorLSAgICAgICBmbGlzdD1gYXIgdCBuZXcvJGZpbGVgCistICAgICAgIHB3ZD0kUFdECistICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCistICAgICAgIGNkIG9sZC8kZmRpcgorLSAgICAgICBhciB4IGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZC9uZXcvJGZkaXIKKy0gICAgICAgYXIgeCBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QKKy0gICAgICAgZm9yIGYgaW4gJGZsaXN0OyBkbworLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCistICAgICAgICAgICAgIHJldHVybiAxCistICAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgKi5jcGlvKQorLSAgICAgICBmbGlzdD1gY3BpbyAtLXF1aWV0IC0tbGlzdCAtLWZvcmNlLWxvY2FsIDwgIm5ldy8kZmlsZSJgCistICAgICAgIHB3ZD0kUFdECistICAgICAgIGZkaXI9JGZpbGUuZXh0cmFjdC4kUFBJRC4kJAorLSAgICAgICBta2RpciBvbGQvJGZkaXIgbmV3LyRmZGlyCistICAgICAgIGNkIG9sZC8kZmRpcgorLSAgICAgICBjcGlvIC0tcXVpZXQgLS1leHRyYWN0IC0tZm9yY2UtbG9jYWwgPCAiLi4vJHtmaWxlIyMqL30iCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIGNwaW8gLS1xdWlldCAtLWV4dHJhY3QgLS1mb3JjZS1sb2NhbCA8ICIuLi8ke2ZpbGUjIyovfSIKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBsb2NhbCByZXQ9MAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICBmaQorLSAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgcm0gLXJmIG9sZC8kZmRpciBuZXcvJGZkaXIKKy0gICAgICAgcmV0dXJuICRyZXQKKy0gICAgICAgOzsKKy0gICAgKi50YXJ8Ki50YXIuYnoyfCoudGFyLmd6fCoudGd6fCoudGJ6MikKKy0gICAgICAgZmxpc3Q9YHRhciB0ZiBuZXcvJGZpbGVgCistICAgICAgIHB3ZD0kUFdECistICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCistICAgICAgIGNkIG9sZC8kZmRpcgorLSAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkL25ldy8kZmRpcgorLSAgICAgICB0YXIgeGYgYGJhc2VuYW1lICRmaWxlYAorLSAgICAgICBjZCAkcHdkCistICAgICAgIGxvY2FsIHJldD0wCistICAgICAgIGZvciBmIGluICRmbGlzdDsgZG8KKy0gICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICRmZGlyLyRmOyB0aGVuCistICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICAgaWYgdGVzdCAteiAiJGNoZWNrX2FsbCI7IHRoZW4KKy0gICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgIGZpCistICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICByZXR1cm4gJHJldAorLSAgICAgICA7OworLSAgICAqLnppcHwqLmphcnwqLndhcikKKy0gICAgICAgY2Qgb2xkCistICAgICAgIHVuamFyX2wgLi8kZmlsZSB8c29ydCA+IGZsaXN0CistICAgICAgICMgIDEwLTA1LTIwMTAgMTQ6MzkKKy0gICAgICAgc2VkIC1pIC1lICJzLCBbMC05XVswLTldLVswLTldWzAtOV0tWzAtOV1cKyBbMC05XVswLTldOlswLTldWzAtOV0gLCBkYXRlICwiIGZsaXN0CistICAgICAgICMgMjAxMi0wMi0wMyAwNzo1OQorLSAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorLSAgICAgICBjZCAuLi9uZXcKKy0gICAgICAgdW5qYXJfbCAuLyRmaWxlIHxzb3J0PiBmbGlzdAorLSAgICAgICBzZWQgLWkgLWUgInMsIFswLTldWzAtOV0tWzAtOV1bMC05XS1bMC05XVwrIFswLTldWzAtOV06WzAtOV1bMC05XSAsIGRhdGUgLDsgIiBmbGlzdAorLSAgICAgICBzZWQgLWkgLWUgInMsIDIwWzAtOV1bMC05XS1bMC05XVswLTldLVswLTldWzAtOV0gWzAtOV1bMC05XTpbMC05XVswLTldICwgZGF0ZSAsIiBmbGlzdAorLSAgICAgICBjZCAuLgorLSAgICAgICBpZiAhIGNtcCAtcyBvbGQvZmxpc3QgbmV3L2ZsaXN0OyB0aGVuCistICAgICAgICAgIGVjaG8gIiRmaWxlIGhhcyBkaWZmZXJlbnQgZmlsZSBsaXN0IgorLSAgICAgICAgICBkaWZmIC11IG9sZC9mbGlzdCBuZXcvZmxpc3QKKy0gICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgZmxpc3Q9YGdyZXAgZGF0ZSBuZXcvZmxpc3QgfCBzZWQgLWUgJ3MsLiogZGF0ZSAsLCdgCistICAgICAgIHB3ZD0kUFdECistICAgICAgIGZkaXI9YGRpcm5hbWUgJGZpbGVgCistICAgICAgIGNkIG9sZC8kZmRpcgorLSAgICAgICB1bmphciBgYmFzZW5hbWUgJGZpbGVgCistICAgICAgIGNkICRwd2QvbmV3LyRmZGlyCistICAgICAgIHVuamFyIGBiYXNlbmFtZSAkZmlsZWAKKy0gICAgICAgY2QgJHB3ZAorLSAgICAgICBsb2NhbCByZXQ9MAorLSAgICAgICBmb3IgZiBpbiAkZmxpc3Q7IGRvCistICAgICAgICAgaWYgdGVzdCAtZiBuZXcvJGZkaXIvJGYgJiYgISBjaGVja19zaW5nbGVfZmlsZSAkZmRpci8kZjsgdGhlbgorLSAgICAgICAgICAgcmV0PTEKKy0gICAgICAgICAgIGlmIHRlc3QgLXogIiRjaGVja19hbGwiOyB0aGVuCistICAgICAgICAgICAgIGJyZWFrCistICAgICAgICAgICBmaQorLSAgICAgICAgIGZpCistICAgICAgIGRvbmUKKy0gICAgICAgcmV0dXJuICRyZXQ7OworLSAgICAgKi5weWN8Ki5weW8pCistICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnb2xkLyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCistICAgICAgICBwZXJsIC1lICJvcGVuIGZoLCAnKzwnLCAnbmV3LyRmaWxlJzsgc2VlayBmaCwgNCwgU0VFS19TRVQ7IHByaW50IGZoICcwMDAwJzsiCistICAgICAgICA7OworLSAgICAgKi5iejIpCistICAgICAgICBidW56aXAyIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmJ6Mi99CistICAgICAgICBidW56aXAyIC1jIG5ldy8kZmlsZSA+IG5ldy8ke2ZpbGUvLmJ6Mi99CistICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmJ6Mi99CistICAgICAgICByZXR1cm4gJD8KKy0gICAgICAgIDs7CistICAgICAqLmd6KQorLSAgICAgICAgZ3VuemlwIC1jIG9sZC8kZmlsZSA+IG9sZC8ke2ZpbGUvLmd6L30KKy0gICAgICAgIGd1bnppcCAtYyBuZXcvJGZpbGUgPiBuZXcvJHtmaWxlLy5nei99CistICAgICAgICBjaGVja19zaW5nbGVfZmlsZSAke2ZpbGUvLmd6L30KKy0gICAgICAgIHJldHVybiAkPworLSAgICAgICAgOzsKKy0gICAgICoucnBtKQorLQkkc2VsZl9zY3JpcHQgLWEgb2xkLyRmaWxlIG5ldy8kZmlsZQorLSAgICAgICAgcmV0dXJuICQ/CistICAgICAgICA7OworLSAgICAgKnBuZykKKy0JIyBUcnkgdG8gcmVtb3ZlIHRpbWVzdGFtcHMsIG9ubHkgaWYgY29udmVydCBmcm9tIEltYWdlTWFnaWNrIGlzIGluc3RhbGxlZAorLSAgICAgICAgaWYgW1sgJCh0eXBlIC1wIGNvbnZlcnQpIF1dOyB0aGVuCistCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG9sZC8ke2ZpbGUvLnBuZy9fbi5wbmd9CistCSAgY29udmVydCBvbGQvJGZpbGUgK3NldCBkYXRlOmNyZWF0ZSArc2V0IGRhdGU6bW9kaWZ5IG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9CistCSAgaWYgISBjbXAgLXMgb2xkLyR7ZmlsZS8ucG5nL19uLnBuZ30gbmV3LyR7ZmlsZS8ucG5nL19uLnBuZ307IHRoZW4KKy0JICAgICAgZWNobyAiJGZpbGUgZGlmZmVycyAoJGZ0eXBlKSIKKy0JICAgICAgaGV4ZHVtcCAtQyBvbGQvJHtmaWxlLy5wbmcvX24ucG5nfSA+ICRmaWxlMQorLQkgICAgICBoZXhkdW1wIC1DIG5ldy8ke2ZpbGUvLnBuZy9fbi5wbmd9ID4gJGZpbGUyCistCSAgICAgIGRpZmYgLXUgJGZpbGUxICRmaWxlMiB8IGhlYWQgLW4gMjAKKy0JICAgICAgcmV0dXJuIDEKKy0JICBmaQorLQkgIHJldHVybiAwCistCWZpCistICAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9sb2NhbGUvKi9MQ19NRVNTQUdFUy8qLm1vfC91c3Ivc2hhcmUvbG9jYWxlLWJ1bmRsZS8qL0xDX01FU1NBR0VTLyoubW8pCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICJzLFBPVC1DcmVhdGlvbi1EYXRlOiAuLi4uLS4uLS4uIC4uOi4uKy4uLi4sUE9ULUNyZWF0aW9uLURhdGU6IDE5NzAtMDEtMDEgMDA6MDArMDAwMCwiICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvZG9jL3BhY2thZ2VzLyovKi5odG1sfFwKKy0gICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi8qLmh0bWx8L3Vzci9zaGFyZS9kb2MvKi9odG1sLyouaHRtbCkKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICAjIHRleGkyaHRtbCBvdXRwdXQsIGUuZy4gaW4ga3ZtLCBpbmRlbnQsIHFlbXUKKy0JIHNlZCAtaSAtZSAic3xePCEtLSBDcmVhdGVkIG9uIC4qLCAyMC4uIGJ5IHRleGkyaHRtbCAuXC4uLnw8IS0tIENyZWF0ZWQgb24gQXVndXN0IDcsIDIwMDkgYnkgdGV4aTJodG1sIDEuODJ8IiAkZgorLQkgc2VkIC1pIC1lICdzfF4gKlRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPi4qLCAyMC4uPC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgLlwuLi48L2VtPjwvYT4uJHwgIFRoaXMgZG9jdW1lbnQgd2FzIGdlbmVyYXRlZCBieSA8ZW0+QXV0b2J1aWxkPC9lbT4gb24gPGVtPkF1Z3VzdCA3LCAyMDA5PC9lbT4gdXNpbmcgPGEgaHJlZj0iaHR0cDovL3d3dy5ub25nbnUub3JnL3RleGkyaHRtbC8iPjxlbT50ZXhpMmh0bWwgMS44MjwvZW0+PC9hPi58JyAkZgorLQkgIyBkb3h5Z2VuIGRvY3UsIGUuZy4gaW4gbGlic3NoIGFuZCBsb2c0YworLQkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiBbMC05XSo6WzAtOV1bMC05XTpbMC05XVswLTldIDIwWzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCistCSAjIEdlbmVyYXRlZCBvbiBTYXQgQXVnIDE0IDIwMTAgMTY6NDk6NDggZm9yIGxpYnNzaAorLQkgc2VkIC1pIC1lICdzfEdlbmVyYXRlZCBvbiAuLi4gLi4uIFswLTldKiAyMFswLTldWzAtOV0gWzAtOV0qOlswLTldWzAtOV06WzAtOV1bMC05XSBmb3IgfEdlbmVyYXRlZCBvbiBNb24gTWF5IDEwIDIwOjQ1OjAwIDIwMTAgZm9yIHwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgc3RyaXBfbnVtYmVyZWRfYW5jaG9ycworLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyouaHRtbCB8XAorLSAgICAgL3Vzci9zaGFyZS9qYXZhZG9jLyovKi5odG1sfC91c3Ivc2hhcmUvamF2YWRvYy8qLyovKi5odG1sKQorLSAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCistICAgICAgICMgVGhlcmUgYXJlIG1vcmUgdGltZXN0YW1wcyBpbiBodG1sLCBzbyBmYXIgd2UgaGFuZGxlIG9ubHkgc29tZSBwcmltaXRpdmUgdmVyc2lvbnMuCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIyBKYXZhZG9jOgorLSAgICAgICAgICAjIDxoZWFkPgorLSAgICAgICAgICAjIDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2MgKHZlcnNpb24gMS43LjBfNzUpIG9uIFR1ZSBGZWIgMDMgMDI6MjA6MTIgR01UIDIwMTUgLS0+CistICAgICAgICAgICMgPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUdWUgRmViIDAzIDAwOjAyOjQ4IEdNVCAyMDE1IC0tPgorLSAgICAgICAgICAjIDxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IjIwMTUtMDItMDMiPgorLSAgICAgICAgICAjIDwvaGVhZD4KKy0gICAgICAgICAgc2VkIC1pIC1lICcKKy0gICAgICAgICAgICAvXjxoZWFkPi97CistICAgICAgICAgICAgICA6IG5leHQKKy0gICAgICAgICAgICAgIG4KKy0gICAgICAgICAgICAgIC9ePFwvaGVhZD4veworLSAgICAgICAgICAgICAgICBiIGVuZF9oZWFkCistICAgICAgICAgICAgICB9CistICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKChcKGJ1aWxkXHx2ZXJzaW9uXCkgWzAtOS5fXVwrKSBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIFwoR01UXHxVVENcKSAuLi4uXCkgXCgtLT5cKS9cMSBzb21lLWRhdGUtcmVtb3ZlZC1ieS1idWlsZC1jb21wYXJlIFw1LworLSAgICAgICAgICAgICAgdCBuZXh0CistICAgICAgICAgICAgICBzL15cKDwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2NcKSBcKG9uIC4uLiAuLi4gLi4gLi46Li46Li4gXChHTVRcfFVUQ1wpIC4uLi5cKSBcKC0tPlwpL1wxIHNvbWUtZGF0ZS1yZW1vdmVkLWJ5LWJ1aWxkLWNvbXBhcmUgXDMvCistICAgICAgICAgICAgICB0IG5leHQKKy0gICAgICAgICAgICAgIHMvXjxtZXRhIG5hbWU9ImRhdGUiIGNvbnRlbnQ9IlswLTldXHs0XH0tWzAtOV1cezJcfS1bMC05XVx7Mlx9Ij4vPG1ldGEgbmFtZT0iZGF0ZSIgY29udGVudD0ic29tZS1kYXRlLXJlbW92ZWQtYnktYnVpbGQtY29tcGFyZSI+LworLSAgICAgICAgICAgICAgYiBuZXh0CistICAgICAgICAgICAgfQorLSAgICAgICAgICAgIDogZW5kX2hlYWQKKy0gICAgICAgICAgJyAkZgorLSAgICAgICAgICMgR2pkb2MgSHRtbERvY2xldDoKKy0JIHNlZCAtaSAtZSAncyVHZW5lcmF0ZWQgYnkgR2pkb2MgSHRtbERvY2xldCBbMC05LC5dKiwgcGFydCBvZiA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY2xhc3NwYXRoL2NwLXRvb2xzLyIgdGl0bGU9IiIgdGFyZ2V0PSJfdG9wIj5HTlUgQ2xhc3NwYXRoIFRvb2xzPC9hPiwgb24gLiosIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULiVHZW5lcmF0ZWQgYnkgR2pkb2MuJScgJGYKKy0JIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVEQgWEhUTUwgMS4xIHBsdXMgVGFyZ2V0IDEuMC8vRU4iXCguKlwpR05VIENsYXNzcGF0aCBUb29sczwvYT4sIG9uIFtBLVpdW2Etel0qIFswLTldKiwgMjA/PyBbMC05XSo6Pz86Pz8gXChhfHBcKVwubVwuIEdNVC48L3A+JTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vZ251Lm9yZy8vL0RURCBYSFRNTCAxLjEgcGx1cyBUYXJnZXQgMS4wLy9FTiJcMUdOVSBDbGFzc3BhdGggVG9vbHM8L2E+LCBvbiBKYW51YXJ5IDEsIDIwMDkgMDowMDowMCBhLm0uIEdNVC48L3A+JScgJGYKKy0JIHNlZCAtaSAtZSAncyU8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL2dudS5vcmcvLy9EVERcKC4qR05VIENsYXNzcGF0aCBUb29sczwvYT5cKSwgb24gW2EtekEtWl0qIFswLTldWzAtOV0sIDIwLi4gWzAtOV0qOi4uOi4uIFwoYVx8cFwpXC5tXC4gR01ULjwvcD4lPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9nbnUub3JnLy8vRFREXDEsb24gTWF5IDEsIDIwMTAgMToxMTo0MiBwLm0uIEdNVC48L3A+JScgJGYKKy0JICMgZGVwcmVjYXRlZC1saXN0IGlzIHJhbmRvbWx5IG9yZGVyZWQsIHNvcnQgaXQgZm9yIGNvbXBhcmlzb24KKy0JIGNhc2UgJGYgaW4KKy0JICAgKi9kZXByZWNhdGVkLWxpc3QuaHRtbCkKKy0JICAgICBzb3J0IC1vICRmICRmCistCSAgICAgOzsKKy0JIGVzYWMKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9qYXZhZG9jL2dqZG9jLnByb3BlcnRpZXMgfFwKKy0gICAgIC91c3Ivc2hhcmUvamF2YWRvYy8qL2dqZG9jLnByb3BlcnRpZXMpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistCSBzZWQgLWkgLWUgJ3N8XiNbQS1aXVthLXpdXHsyXH0gW0EtWl1bYS16XVx7Mlx9IFswLTldXHsyXH0gLi46Li46Li4gR01UIDIwLi4kfCNGcmkgSmFuIDAxIDExOjI3OjM2IEdNVCAyMDA5fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgKi9mb250cy5zY2FsZXwqL2ZvbnRzLmRpcnwqL2VuY29kaW5ncy5kaXIpCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgIyBzb3J0IGZpbGVzIGJlZm9yZSBjb21wYXJpbmcKKy0gICAgICAgICBzb3J0IC1vICRmICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC92YXIvYWRtL3BlcmwtbW9kdWxlcy8qKQorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgIHNlZCAtaSAtZSAnc3xePWhlYWQyIC4uLiAuLi4gLi4gLi46Li46Li4gLi4uLjogQzxNb2R1bGU+fD1oZWFkMiBXZWQgSnVsICAxIDAwOjAwOjAwIDIwMDk6IEM8TW9kdWxlPnwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvbWFuL21hbjMvKjNwbSkKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8IDMgIjIwLi4tLi4tLi4iICJwZXJsIHY1Li4uLi4iICJVc2VyIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIkfCAzICIyMDA5LTAxLTAxIiAicGVybCB2NS4xMC4wIiAiVXNlciBDb250cmlidXRlZCBQZXJsIERvY3VtZW50YXRpb24ifCcgJGYKKy0gICAgICAgICB0cmltX21hbl9USCAkZgorLSAgICAgICAgIHRyaW1fbWFuX2ZpcnN0X2xpbmUgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Vzci9zaGFyZS9tYW4vKi9tYW4qfC91c3Ivc2hhcmUvbWFuL21hbip8L3Vzci9saWIvdGV4bWYvZG9jL21hbi8qLyopCistCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgdHJpbV9tYW5fVEggJGYKKy0gICAgICAgICB0cmltX21hbl9maXJzdF9saW5lICRmCistICAgICAgICAgIyBnZW5lcmF0ZWQgYnkgZG9jYm9vayB4bWw6CistICAgICAgICAgIy5cIiAgICAgIERhdGU6IDA5LzEzLzIwMTAKKy0gICAgICAgICBzZWQgLWkgLWUgJ3N8RGF0ZTogWzAtMV1bMC05XS9bMC05XVswLTldLzIwMVswLTldfERhdGU6IDA5LzEzLzIwMTB8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAqLmVsYykKKy0gICAgICAgIyBlbWFjcyBsaXNwIGZpbGVzCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistICAgICAgICAgc2VkIC1pIC1lICdzfENvbXBpbGVkIGJ5IGFidWlsZEAuKiBvbiAuLi4gLi4uIC4uIC4uOi4uOi4uIDIwLi4kfGNvbXBpbGVkIGJ5IGFidWlsZEBidWlsZGhvc3Qgb24gV2VkIEp1bCAwMSAwMDowMDowMCAyMDA5fCcgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICA7OworLSAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvKi8qZm10IHxcCistICAgICAvdmFyL2xpYi90ZXhtZi93ZWIyYy9tZXRhZm9udC8qLmJhc2V8XAorLSAgICAgL3Zhci9saWIvdGV4bWYvd2ViMmMvbWV0YXBvc3QvKi5tZW0pCistICAgICAgICMgYmluYXJ5IGR1bXAgb2YgVGVYIGFuZCBNZXRhZm9udCBmb3JtYXRzLCB3ZSBjYW4gaWdub3JlIHRoZW0gZm9yIGdvb2QKKy0gICAgICAgZWNobyAiZGlmZmVyZW5jZSBpbiAkZmlsZSBpZ25vcmVkLiIKKy0gICAgICAgcmV0dXJuIDAKKy0gICAgICAgOzsKKy0gICAgICovbGlidG9vbCkKKy0gICAgICAgZm9yIGYgaW4gb2xkLyRmaWxlIG5ldy8kZmlsZTsgZG8KKy0JICBzZWQgLWkgLWUgJ3N8XiMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IFtBLVphLXowLTldKjokfCMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IHg0Mjp8JyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgICAvZXRjL21haWwvKmNmfC9ldGMvc2VuZG1haWwuY2YpCistICAgICAgICMgZnJvbSBzZW5kbWFpbCBwYWNrYWdlCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistCSAgIyAtICMjIyMjIGJ1aWx0IGJ5IGFidWlsZEBidWlsZDMzIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMAorLQkgIHNlZCAtaSAtZSAnc3xidWlsdCBieSBhYnVpbGRAW2EtejAtOV0qIG9uIC4uLiAuLi4gWzAtOV0qIFswLTldKjpbMC05XVswLTldOlswLTldWzAtOV0gLiogMjBbMC05XVswLTldfGJ1aWx0IGJ5IGFidWlsZEBidWlsZDQyIG9uIFRodSBNYXkgNiAxMToyMToxNyBVVEMgMjAxMHwnICRmCistICAgICAgIGRvbmUKKy0gICAgICAgOzsKKy0gICAgIC91c3Ivc2hhcmUvZG9jL2tkZS9IVE1MLyovKi9pbmRleC5jYWNoZXwvdXNyL3NoYXJlL2RvYy9rZGUvSFRNTC8qLyovKi9pbmRleC5jYWNoZXxcCistICAgICAvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouaHRtbHwvdXNyL3NoYXJlL2d0ay1kb2MvaHRtbC8qLyouZGV2aGVscDIpCistICAgICAgICMgdmFyaW91cyBrZGUgYW5kIGd0ayBwYWNrYWdlcworLSAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCistICAgICAgIDs7CistICAgICovY3JlYXRlZC5yaWQpCistICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCistICAgICAgICMgZmlsZSBqdXN0IGNvbnRhaW5zIGEgdGltZXN0YW1wIGFuZCBub3RoaW5nIGVsc2UsIHNvIGlnbm9yZSBpdAorLSAgICAgICBlY2hvICJJZ25vcmUgJGZpbGUiCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICovcmRvYy9maWxlcy8qLmh0bWwpCistICAgICAgICMgcnVieSBkb2N1bWVudGF0aW9uCistICAgICAgICMgPHRkPk1vbuKAglNlcOKAgjIw4oCCMTk6MDI6NDPigIIrMDAwMOKAgjIwMTA8L3RkPgorLSAgICAgICBmb3IgZiBpbiBvbGQvJGZpbGUgbmV3LyRmaWxlOyBkbworLSAgICAgICAgICBzZWQgLWkgLWUgJ3MlPHRkPltBLVpdW2Etel1bYS16XSBbQS1aXVthLXpdW2Etel0gWzAtOV1cKyBbMC05XVwrOlswLTldXCs6WzAtOV1cKyArMDAwMCAyMDFbMC05XTwvdGQ+JTx0ZD5Nb27igIJTZXDigIIyMOKAgjE5OjAyOjQz4oCCKzAwMDDigIIyMDEwPC90ZD4lZycgJGYKKy0gICAgICAgZG9uZQorLSAgICAgICBzdHJpcF9udW1iZXJlZF9hbmNob3JzCistICAgICAgIDs7CistICAgICovTGludXgqRW52LlNldC5zaCkKKy0gICAgICAgIyBMaWJyZU9mZmljZSBmaWxlcywgY29udGFpbnM6CistICAgICAgICMgR2VuZXJhdGVkIG9uOiBNb24gQXByIDE4IDEzOjE5OjIyIFVUQyAyMDExCistICAgICAgIGZvciBmIGluIG9sZC8kZmlsZSBuZXcvJGZpbGU7IGRvCistCSBzZWQgLWkgLWUgJ3MlXiMgR2VuZXJhdGVkIG9uOi4qVVRDIDIwMVswLTldICokJSMgR2VuZXJhdGVkIG9uOiBTb21ldGltZSVnJyAkZgorLSAgICAgICBkb25lCistICAgICAgIDs7CistICAgIC91c3IvbGliL2xpYnJlb2ZmaWNlL3NvbHZlci9pbmMvKi9kZWxpdmVyLmxvZykKKy0gICAgICAgIyBMaWJyZU9mZmljZSBsb2cgZmlsZQorLSAgICAgIGVjaG8gIklnbm9yZSAkZmlsZSIKKy0gICAgICByZXR1cm4gMAorLSAgICAgIDs7CistICAgIC92YXIvYWRtL3VwZGF0ZS1tZXNzYWdlcy8qfC92YXIvYWRtL3VwZGF0ZS1zY3JpcHRzLyopCistICAgICAgIyBlbmNvZGUgdmVyc2lvbi1yZWxlYXNlIGluc2lkZQorLSAgICAgIG9sZGZuPWBlY2hvICIkZmlsZSJ8c2VkIC1lIHMvLSRyZWxlYXNlMi8tJHJlbGVhc2UxLztgCistCistICAgICAgIyBmZXRjaG1zdHRmb250cyBlbWJlZHMgdGhlIHJlbGVhc2UgbnVtYmVyIGluIHRoZSB1cGRhdGUgc2hlbGwgc2NyaXB0LgorLSAgICAgIGVjaG8gc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCistICAgICAgc2VkIC1pIC1lICJzLy0kcmVsZWFzZTEvLSRyZWxlYXNlMi9nOyIgIm9sZC8kb2xkZm4iCistCistICAgICAgaWYgISBkaWZmIC11IG9sZC8kb2xkZm4gbmV3LyRmaWxlOyB0aGVuCistICAgICAgICAgICBlY2hvICIkb2xkZm4gaXMgbm90IHNhbWUgYXMgJGZpbGUiCistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgIGZpCistICAgICAgZWNobyAiJGZpbGUgYW5kICRvbGRmbiBhcmUgc2FtZSIKKy0gICAgICByZXR1cm4gMAorLSAgICAgIDs7CistICAgICoucHMpCistICAgICAgZm9yIGYgaW4gIm9sZC8kZmlsZSIgIm5ldy8kZmlsZSI7IGRvCistICAgICAgICBzZWQgLWkgLWUgJworLQkvXiUlQ3JlYXRpb25EYXRlOltbOmJsYW5rOl1dL2QKKy0JL14lJUNyZWF0b3I6W1s6Ymxhbms6XV1ncm9mZltbOmJsYW5rOl1ddmVyc2lvbltbOmJsYW5rOl1dL2QKKy0JJyAiJGYiCistICAgICAgZG9uZQorLSAgICA7OworLSAgICAqcGRmKQorLSAgICAgICMgUERGIGZpbGVzIGNvbnRhaW4gYSB1bmlxdWUgSUQsIHJlbW92ZSBpdAorLSAgICAgICMgRm9ybWF0IG9mIHRoZSBJRCBpczoKKy0gICAgICAjIC9JRCBbPDlBQ0UyNDdBNzBDRjlCRUFGRUUxNUUxMTYyNTlCRDZEPiA8OUFDRTI0N0E3MENGOUJFQUZFRTE1RTExNjI1OUJENkQ+XQorLSAgICAgICMgd2l0aCBvcHRpb25hbCBzcGFjZXMuIHBkZnRleCBjcmVhdGVzIGFsc286CistICAgICAgIyAvQ3JlYXRpb25EYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKy0gICAgICAjIC9Nb2REYXRlIChEOjIwMTIwMTAzMDgzMjA2WikKKy0gICAgICAjIGFuZCBwb3NzaWJseSBYTUwgbWV0YWRhdGEgYXMgd2VsbAorLSAgICAgIGZvciBmIGluICJvbGQvJGZpbGUiICJuZXcvJGZpbGUiOyBkbworLSAgICAgICAgc2VkIC1pIFwKKy0gICAgICAgICAgICAnL29iai8sL2VuZG9iai97CistICAgICAgICAgICAgICAgcyUvSUQgXD9cWyBcPzxbXj5dXCs+IFw/PFtePl1cKz4gXD9cXSUvSURyYW5kb20lZzsKKy0gICAgICAgICAgICAgICBzJS9DcmVhdGlvbkRhdGUgXD8oRDpbXildKiklL0NyZWF0aW9uRGF0ZSAoRDogWFhYKSVnOworLSAgICAgICAgICAgICAgIHMlL01vZERhdGUgXD8oRDpbXildKiklL01vZERhdGUgKEQ6IFhYWCklZzsKKy0gICAgICAgICAgICAgICBzJTxwZGY6Q3JlYXRpb25EYXRlPltePF0qPC9wZGY6Q3JlYXRpb25EYXRlPiU8cGRmOkNyZWF0aW9uRGF0ZT5YWFg8L3BkZjpDcmVhdGlvbkRhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8cGRmOk1vZERhdGU+W148XSo8L3BkZjpNb2REYXRlPiU8cGRmOk1vZERhdGU+WFhYPC9wZGY6TW9kRGF0ZT4lZzsKKy0gICAgICAgICAgICAgICBzJTx4YXA6Q3JlYXRlRGF0ZT5bXjxdKjwveGFwOkNyZWF0ZURhdGU+JTx4YXA6Q3JlYXRlRGF0ZT5YWFg8L3hhcDpDcmVhdGVEYXRlPiVnOworLSAgICAgICAgICAgICAgIHMlPHhhcDpNb2RpZnlEYXRlPltePF0qPC94YXA6TW9kaWZ5RGF0ZT4lPHhhcDpNb2RpZnlEYXRlPlhYWDwveGFwOk1vZGlmeURhdGU+JWc7CistICAgICAgICAgICAgICAgcyU8eGFwOk1ldGFkYXRhRGF0ZT5bXjxdKjwveGFwOk1ldGFkYXRhRGF0ZT4lPHhhcDpNZXRhZGF0YURhdGU+WFhYPC94YXA6TWV0YWRhdGFEYXRlPiVnOworLSAgICAgICAgICAgIH0nICIkZiIKKy0gICAgICBkb25lCistICAgICAgOzsKKy0gIGVzYWMKKy0KKy0gIGZ0eXBlPWAvdXNyL2Jpbi9maWxlIG9sZC8kZmlsZSB8IHNlZCAnc0BeW146XVwrOltbOmJsYW5rOl1dKkBAJ2AKKy0gIGNhc2UgJGZ0eXBlIGluCistICAgICBQRTMyXCBleGVjdXRhYmxlKk1vbm9cL1wuTmV0XCBhc3NlbWJseSopCistICAgICAgIGVjaG8gIlBFMzIgTW9uby8uTmV0IGFzc2VtYmx5OiAkZmlsZSIKKy0gICAgICAgaWYgWyAteCAvdXNyL2Jpbi9tb25vZGlzIF0gOyB0aGVuCistICAgICAgICAgbW9ub2RpcyBvbGQvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTF9CistICAgICAgICAgbW9ub2RpcyBuZXcvJGZpbGUgMj4vZGV2L251bGx8c2VkIC1lICdzL0dVSUQgPSB7Lip9L0dVSUQgPSB7IDQyIH0vOyc+ICR7ZmlsZTJ9CistICAgICAgICAgaWYgISBjbXAgLXMgJHtmaWxlMX0gJHtmaWxlMn07IHRoZW4KKy0gICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistICAgICAgICAgICBkaWZmIC11ICR7ZmlsZTF9ICR7ZmlsZTJ9CistICAgICAgICAgICByZXR1cm4gMQorLSAgICAgICAgIGZpCistICAgICAgIGVsc2UKKy0gICAgICAgICBlY2hvICJDYW5ub3QgY29tcGFyZSwgbm8gbW9ub2RpcyBpbnN0YWxsZWQiCistICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgRUxGKmV4ZWN1dGFibGUqfEVMRipbTE1dU0JcIHNoYXJlZFwgb2JqZWN0KikKKy0gICAgICAgb2JqZHVtcCAtZCAtLW5vLXNob3ctcmF3LWluc24gb2xkLyRmaWxlIHwgZmlsdGVyX2Rpc2FzbSA+ICRmaWxlMQorLSAgICAgICBpZiAhIHRlc3QgLXMgJGZpbGUxOyB0aGVuCistICAgICAgICAgIyBvYmpkdW1wIGhhcyBubyBpZGVhIGhvdyB0byBoYW5kbGUgaXQKKy0gICAgICAgICBpZiAhIGRpZmZfdHdvX2ZpbGVzOyB0aGVuCistICAgICAgICAgICByZXQ9MQorLSAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICBmaQorLSAgICAgICBmaSAgICAgICAKKy0gICAgICAgZWxmZGlmZj0KKy0gICAgICAgc2VkIC1pIC1lICJzLG9sZC8sLCIgJGZpbGUxCistICAgICAgIG9iamR1bXAgLWQgLS1uby1zaG93LXJhdy1pbnNuIG5ldy8kZmlsZSB8IGZpbHRlcl9kaXNhc20gPiAkZmlsZTIKKy0gICAgICAgc2VkIC1pIC1lICJzLG5ldy8sLCIgJGZpbGUyCistICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyID4gJGRmaWxlOyB0aGVuCistICAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgaW4gYXNzZW1ibGVyIG91dHB1dCIKKy0gICAgICAgICAgaGVhZCAtbiAyMDAgJGRmaWxlCistICAgICAgICAgIGVsZmRpZmY9IjEiCistICAgICAgIGZpCistICAgICAgIGVjaG8gIiIgPiRmaWxlMQorLSAgICAgICBlY2hvICIiID4kZmlsZTIKKy0gICAgICAgIyBEb24ndCBjb21wYXJlIC5idWlsZC1pZCBhbmQgLmdudV9kZWJ1Z2xpbmsgc2VjdGlvbnMKKy0gICAgICAgc2VjdGlvbnM9IiQob2JqZHVtcCAtcyBuZXcvJGZpbGUgfCBncmVwICJDb250ZW50cyBvZiBzZWN0aW9uIC4qOiIgfCBzZWQgLXIgInMsLiogKC4qKTosXDEsZyIgfCBncmVwIC12IC1lICJcLmJ1aWxkLWlkIiAtZSAiXC5nbnVfZGVidWdsaW5rIiB8IHRyICJcbiIgIiAiKSIKKy0gICAgICAgZm9yIHNlY3Rpb24gaW4gJHNlY3Rpb25zOyBkbworLSAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG9sZC8kZmlsZSB8IHNlZCAicyxeb2xkLywsIiA+ICRmaWxlMQorLSAgICAgICAgICBvYmpkdW1wIC1zIC1qICRzZWN0aW9uIG5ldy8kZmlsZSB8IHNlZCAicyxebmV3LywsIiA+ICRmaWxlMgorLSAgICAgICAgICBpZiAhIGRpZmYgLXUgJGZpbGUxICRmaWxlMiA+ICRkZmlsZTsgdGhlbgorLSAgICAgICAgICAgICBlY2hvICIkZmlsZSBkaWZmZXJzIGluIEVMRiBzZWN0aW9uICRzZWN0aW9uIgorLSAgICAgICAgICAgICBoZWFkIC1uIDIwMCAkZGZpbGUKKy0gICAgICAgICAgICAgZWxmZGlmZj0iMSIKKy0gICAgICAgICAgZmkKKy0gICAgICAgZG9uZQorLSAgICAgICBpZiB0ZXN0IC16ICIkZWxmZGlmZiI7IHRoZW4KKy0gICAgICAgICAgZWNobyAiJGZpbGU6IG9ubHkgZGlmZmVyZW5jZSB3YXMgaW4gYnVpbGQtaWQgb3IgZ251X2RlYnVnbGluaywgR09PRC4iCistICAgICAgICAgIHJldHVybiAwCistICAgICAgIGZpCistICAgICAgIHJldHVybiAxCistICAgICAgIDs7CistICAgICAqQVNDSUkqfCp0ZXh0KikKKy0gICAgICAgaWYgISBjbXAgLXMgb2xkLyRmaWxlIG5ldy8kZmlsZTsgdGhlbgorLSAgICAgICAgIGVjaG8gIiRmaWxlIGRpZmZlcnMgKCRmdHlwZSkiCistICAgICAgICAgZGlmZiAtdSBvbGQvJGZpbGUgbmV3LyRmaWxlIHwgaGVhZCAtbiAyMDAKKy0gICAgICAgICByZXR1cm4gMQorLSAgICAgICBmaQorLSAgICAgICA7OworLSAgICAgZGlyZWN0b3J5fHNldHVpZCxcIGRpcmVjdG9yeXxzdGlja3ksXCBkaXJlY3RvcnkpCistICAgICAgICMgdGFyIG1pZ2h0IHBhY2thZ2UgZGlyZWN0b3JpZXMgLSBpZ25vcmUgdGhlbSBoZXJlCistICAgICAgIHJldHVybiAwCistICAgICAgIDs7CistICAgICBiemlwMlwgY29tcHJlc3NlZFwgZGF0YSopCistICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgImJ6MiI7IHRoZW4KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBnemlwXCBjb21wcmVzc2VkXCBkYXRhKikKKy0gICAgICAgaWYgISBjaGVja19jb21wcmVzc2VkX2ZpbGUgIiRmaWxlIiAiZ3ppcCI7IHRoZW4KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICAgICBYWlwgY29tcHJlc3NlZFwgZGF0YSopCistICAgICAgIGlmICEgY2hlY2tfY29tcHJlc3NlZF9maWxlICIkZmlsZSIgInh6IjsgdGhlbgorLSAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIFBPU0lYXCB0YXJcIGFyY2hpdmUpCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLnRhcn0KKy0gICAgICAgICAgbXYgbmV3LyRmaWxleywudGFyfQorLSAgICAgICAgICBpZiAhIGNoZWNrX3NpbmdsZV9maWxlICR7ZmlsZX0udGFyOyB0aGVuCistICAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgIGNwaW9cIGFyY2hpdmUpCistICAgICAgICAgIG12IG9sZC8kZmlsZXssLmNwaW99CistICAgICAgICAgIG12IG5ldy8kZmlsZXssLmNwaW99CistICAgICAgICAgIGlmICEgY2hlY2tfc2luZ2xlX2ZpbGUgJHtmaWxlfS5jcGlvOyB0aGVuCistICAgICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgICAgZmkKKy0gICAgIDs7CistICAgICBzeW1ib2xpY1wgbGlua1wgdG9cICopCistICAgICAgIHJlYWRsaW5rICJvbGQvJGZpbGUiID4gJGZpbGUxCistICAgICAgIHJlYWRsaW5rICJuZXcvJGZpbGUiID4gJGZpbGUyCistICAgICAgIGlmICEgZGlmZiAtdSAkZmlsZTEgJGZpbGUyOyB0aGVuCistICAgICAgICAgZWNobyAic3ltbGluayB0YXJnZXQgZm9yICRmaWxlIGRpZmZlcnMiCistICAgICAgICAgcmV0dXJuIDEKKy0gICAgICAgZmkKKy0gICAgICAgOzsKKy0gICAgICopCistICAgICAgIGlmICEgZGlmZl90d29fZmlsZXM7IHRoZW4KKy0gICAgICAgICAgIHJldHVybiAxCistICAgICAgIGZpCistICAgICAgIDs7CistICBlc2FjCistICByZXR1cm4gMAorLX0KKy0KKy0jIFdlIG5lZWQgL3Byb2MgbW91bnRlZCBmb3Igc29tZSB0ZXN0cywgc28gY2hlY2sgdGhhdCBpdCdzIG1vdW50ZWQgYW5kCistIyBjb21wbGFpbiBpZiBub3QuCistUFJPQ19NT1VOVEVEPTAKKy1pZiBbICEgLWQgL3Byb2Mvc2VsZi8gXTsgdGhlbgorLSAgZWNobyAiL3Byb2MgaXMgbm90IG1vdW50ZWQiCistICBtb3VudCAtb3J3IC1uIC10cHJvYyBub25lIC9wcm9jCistICBQUk9DX01PVU5URUQ9MQorLWZpCistCistIyBwcmVzZXJ2ZSBjbXBfc3BlYyByZXN1bHQgZm9yIGNoZWNrX2FsbCBydW5zCistcmV0PSRSRVMKKy1mb3IgZmlsZSBpbiAkZmlsZXM7IGRvCistICAgaWYgISBjaGVja19zaW5nbGVfZmlsZSAkZmlsZTsgdGhlbgorLSAgICAgICByZXQ9MQorLSAgICAgICBpZiB0ZXN0IC16ICIkY2hlY2tfYWxsIjsgdGhlbgorLSAgICAgICAgICAgYnJlYWsKKy0gICAgICAgZmkKKy0gICBmaQorLWRvbmUKKy0KKy1pZiBbICIkUFJPQ19NT1VOVEVEIiAtZXEgIjEiIF07IHRoZW4KKy0gIGVjaG8gIlVubW91bnRpbmcgcHJvYyIKKy0gIHVtb3VudCAvcHJvYworLWZpCistCistcm0gJGZpbGUxICRmaWxlMiAkZGZpbGUgJHJlbmFtZV9zY3JpcHQKKy1ybSAtcmYgJGRpcgorLWlmIHRlc3QgIiRyZXQiID0gMDsgdGhlbgorLSAgICAgZWNobyAiUGFja2FnZSBjb250ZW50IGlzIGlkZW50aWNhbCIKKy1maQorLWV4aXQgJHJldAorLSMgdmltOiB0dz02NjYgdHM9MiBldAorZGlmZiAtLWdpdCBhL3NhbWUtYnVpbGQtcmVzdWx0LnNoIGIvc2FtZS1idWlsZC1yZXN1bHQuc2gKK2luZGV4IGM4OTA3ZTIuLjdlOWJkNGYgMTAwNjQ0CistLS0gYS9zYW1lLWJ1aWxkLXJlc3VsdC5zaAorKysrIGIvc2FtZS1idWlsZC1yZXN1bHQuc2gKK0BAIC03LDExICs3LDExIEBACisgIyBFbmhhbmNlZCBieSBBbmRyZWFzIEphZWdlciA8YWpAc3VzZS5kZT4KKyAjCisgIyBUaGUgc2NyaXB0IGRlY2lkZXMgaWYgdGhlIG5ldyBidWlsZCBkaWZmZXJlcyBmcm9tIHRoZSBmb3JtZXIgb25lLAorLSMgdXNpbmcgcnBtLWNoZWNrLnNoLgorKyMgdXNpbmcgcGtnLWRpZmYuc2guCisgIyBUaGUgc2NyaXB0IGlzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBidWlsZCBwcm9jZXNzIGFzOgorICMgL3Vzci9saWIvYnVpbGQvc2FtZS1idWlsZC1yZXN1bHQuc2ggLy5idWlsZC5vbGRwYWNrYWdlcyAvdXNyL3NyYy9wYWNrYWdlcy9SUE1TIC91c3Ivc3JjL3BhY2thZ2VzL1NSUE1TCisgCistQ01QU0NSSVBUPSR7MCUvKn0vcnBtLWNoZWNrLnNoCisrQ01QU0NSSVBUPSR7MCUvKn0vcGtnLWRpZmYuc2gKKyBTQ01QU0NSSVBUPSR7MCUvKn0vc3JwbS1jaGVjay5zaAorIAorIGNoZWNrX2FsbD0xCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWE2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2NhY2hlL2NjYWNoZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJhIGZhc3QgQy9DKysgY29tcGlsZXIgY2FjaGUiCitERVNDUklQVElPTiA9ICJjY2FjaGUgaXMgYSBjb21waWxlciBjYWNoZS4gSXQgc3BlZWRzIHVwIHJlY29tcGlsYXRpb24gXAorYnkgY2FjaGluZyB0aGUgcmVzdWx0IG9mIHByZXZpb3VzIGNvbXBpbGF0aW9ucyBhbmQgZGV0ZWN0aW5nIHdoZW4gdGhlIFwKK3NhbWUgY29tcGlsYXRpb24gaXMgYmVpbmcgZG9uZSBhZ2Fpbi4gU3VwcG9ydGVkIGxhbmd1YWdlcyBhcmUgQywgQ1wrXCssIFwKK09iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9jY2FjaGUuc2FtYmEub3JnIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMrIgorCitERVBFTkRTID0gInpsaWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnNhbWJhLm9yZy9jY2FjaGUuZ2l0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9jY2FjaGVfMy4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU3ZGY3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvY2NhY2hlXzMuMi4zLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBjY2FjaGUuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PWIzYzMzN2U3NjY0NTU5YTc4OWQ5ZjdhOTNlNTI4M2MxIgorCitTUkNSRVYgPSAiNGNhZDQ2ZThlZTAwNTMxNDRiYjAwOTE5ZjBkYWRkMjBjMWY4NzAxMyIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtRml4LXJlZ3Jlc3Npb24taW4tcmVjZW50LWNoYW5nZS1yZWxhdGVkLXRvLXpsaWItaW4tbi5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvZmlsZXMvMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NjYWNoZS9maWxlcy8wMDAxLUZpeC1yZWdyZXNzaW9uLWluLXJlY2VudC1jaGFuZ2UtcmVsYXRlZC10by16bGliLWluLW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjViZDlhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jY2FjaGUvZmlsZXMvMDAwMS1GaXgtcmVncmVzc2lvbi1pbi1yZWNlbnQtY2hhbmdlLXJlbGF0ZWQtdG8temxpYi1pbi1uLnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK0Zyb20gZjc0Yzc2MTA3OTMzMDQ2MzA5ODYxNjgwYjc0MWFkYzY3YWMyYTM0ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvZWwgUm9zZGFobCA8am9lbEByb3NkYWhsLm5ldD4KK0RhdGU6IE1vbiwgMTcgQXVnIDIwMTUgMTk6MDU6MTQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHJlZ3Jlc3Npb24gaW4gcmVjZW50IGNoYW5nZSByZWxhdGVkIHRvIHpsaWIgaW4KKyBub25zdGFuZGFyZCBsb2NhdGlvbgorCitUbyBhbGxvdyBmb3Igc3BlY2lmeWluZyBhIC1MIGZsYWcgaW4gTERGTEFHUyBhbmQgaGF2ZSBpdCB0YWtlIGVmZmVjdCBmb3IKKy1seiwgMDIyMGRlOWM4ZWJmYjE4Y2FhZTJhYzFhYTE2M2QwNjBlOThjZWFkZSBwdXQgLWx6IGluIGV4dHJhX2xpYnMKK2luc3RlYWQgb2YgZXh0cmFfbGRmbGFncy4gSG93ZXZlciwgZXh0cmFfbGlicyBpcyBzdXBwb3NlZCB0byBjb250YWluCitwYXRocyB0byBsaWJyYXJpZXMgd2hpY2ggYXJlIHByZXJlcXVpc2l0ZXMgb2YgdGhlIGNjYWNoZSBsaW5rIHJ1bGUsIGFuZAorc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBtYWtlIGdvdCBjb25mdXNlZCBieSBzZWVpbmcgLWx6IGFzIGEKK3ByZXJlcXVpc2l0ZS4KKworVGhpcyBmaXggaXMgdG8gcmV2ZXJ0IDAyMjBkZTljOGViZmIxOGNhYWUyYWMxYWExNjNkMDYwZTk4Y2VhZGUgYW5kCitpbnN0ZWFkIG1ha2Ugc3VyZSB0aGF0IExERkxBR1MgY29tZXMgYmVmb3JlIGV4dHJhX2xkZmxhZ3MuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIE1ha2VmaWxlLmluICB8ICAyICstCisgTkVXUy50eHQgICAgIHwgMTAgKysrKysrKysrKworIGNvbmZpZ3VyZS5hYyB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZTc1MTViMS4uZDM2MjFjZCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTIwLDcgKzIwLDcgQEAgUkFOTElCID0gQFJBTkxJQkAKKyAKKyBhbGxfY2ZsYWdzID0gJChDRkxBR1MpCisgYWxsX2NwcGZsYWdzID0gQERFRlNAIEBleHRyYV9jcHBmbGFnc0AgLURTWVNDT05GRElSPSQoc3lzY29uZmRpcikgLUkuIC1JJChzcmNkaXIpICQoQ1BQRkxBR1MpCistYWxsX2xkZmxhZ3MgPSBAZXh0cmFfbGRmbGFnc0AgJChMREZMQUdTKQorK2FsbF9sZGZsYWdzID0gJChMREZMQUdTKSBAZXh0cmFfbGRmbGFnc0AKKyBleHRyYV9saWJzID0gQGV4dHJhX2xpYnNACisgCisgYmFzZV9zb3VyY2VzID0gXAorZGlmZiAtLWdpdCBhL05FV1MudHh0IGIvTkVXUy50eHQKK2luZGV4IGYxM2ZlZWIuLmVhZWFkZjYgMTAwNjQ0CistLS0gYS9ORVdTLnR4dAorKysrIGIvTkVXUy50eHQKK0BAIC0yLDYgKzIsMTYgQEAgY2NhY2hlIG5ld3MKKyA9PT09PT09PT09PQorIAorIAorK1VucmVsZWFzZWQgMy4yLjQKKystLS0tLS0tLS0tLS0tLS0tCisrCisrQnVnIGZpeGVzCisrfn5+fn5+fn5+CisrCisrLSBGaXhlZCBidWlsZCBlcnJvciByZWxhdGVkIHRvIHpsaWIgb24gc3lzdGVtcyB3aXRoIG9sZGVyIG1ha2UgdmVyc2lvbnMKKysgIChyZWdyZXNzaW9uIGluIGNjYWNoZSAzLjIuMykuCisrCisrCisgY2NhY2hlIDMuMi4zCisgLS0tLS0tLS0tLS0tCisgUmVsZWFzZSBkYXRlOiAyMDE1LTA4LTE2CitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA4ZDhjZTkyLi45ZTY1NTg4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMjAsNyArMTIwLDcgQEAgaWYgdGVzdCB4JHt1c2VfYnVuZGxlZF96bGlifSA9IHh5ZXM7IHRoZW4KKyAgICAgZXh0cmFfbGlicz0iemxpYi9saWJ6LmEiCisgICAgIG1rZGlyIC1wIHpsaWIKKyBlbHNlCistICAgIGV4dHJhX2xpYnM9Ii1seiIKKysgICAgZXh0cmFfbGRmbGFncz0iLWx6IgorIGZpCisgCisgZG5sIExpbmtpbmcgb24gV2luZG93cyBuZWVkcyB3czJfMzIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NkcnRvb2xzL2NkcnRvb2xzLW5hdGl2ZV8zLjAxYTMxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZjM2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2RydG9vbHMvY2RydG9vbHMtbmF0aXZlXzMuMDFhMzEuYmIKQEAgLTAsMCArMSwyMSBAQAorIyBjZHJ0b29scy1uYXRpdmUgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBwYWNrYWdlcy9DT1BZSU5HKQorU1VNTUFSWSA9ICJBIHNldCBvZiB0b29scyBmb3IgQ0QgcmVjb3JkaW5nLCBpbmNsdWRpbmcgY2RyZWNvcmQiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NkcnRvb2xzLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBDRERMLTEuMCAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTMyZjY4MTcwYmU0MjRjMmNkNjQ4MDQzMzc3MjZiMzEyIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2NkcnRvb2xzL2FscGhhL2NkcnRvb2xzLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ODE3MjU1Nzg5NGY0NjliNDU4NGQwMDhlOTNlYzQ2OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxODNiNWMxMjc3Nzc3OWU3OGQ4YjY5NDYxYWFlNTI0MDFmODYzNzY4ZTdlNzM5MWQ2MDczMDAwNmY4Y2FkYzVhIgorCitTID0gIiR7V09SS0RJUn0vY2RydG9vbHMtMy4wMSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCgpIHsKKwltYWtlIGluc3RhbGwgR01BS0VfTk9XQVJOPXRydWUgSU5TX0JBU0U9JHtwcmVmaXh9IERFU1RESVI9JHtEfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NocnBhdGgvY2hycGF0aC9zdGFuZGFyZGRvYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2ZjEwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGgvc3RhbmRhcmRkb2MucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9jb25mL2F1dG9tYWtlIHNldCBkb2NkaXIgYXV0b21hdGljYWxseSwgdXNlIHRoZWlyIHZhbHVlIGVuc3VyaW5nIAorZG9jIGZpbGVzIGFyZSBwbGFjZWQgaW50byAkZGF0YWRpci9kb2MsIG5vdCAkcHJlZml4L2RvYy4KKworUlAgNS83LzIwMTEKKworSW5kZXg6IGNocnBhdGgtMC4xMy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNocnBhdGgtMC4xMy5vcmlnL01ha2VmaWxlLmFtCTIwMTEtMDctMDUgMjM6NDA6MTQuNzY5OTIwMjU0ICswMTAwCisrKysgY2hycGF0aC0wLjEzL01ha2VmaWxlLmFtCTIwMTEtMDctMDUgMjM6NDA6MTkuODE5OTIwNjM1ICswMTAwCitAQCAtMSw3ICsxLDUgQEAKKyBTVUJESVJTID0gdGVzdHN1aXRlIGRlYgorIAorLWRvY2RpciA9ICQocHJlZml4KS9kb2MvJChQQUNLQUdFKS0kKFZFUlNJT04pCistCisgZG9jX0RBVEEgPSBBVVRIT1JTIENPUFlJTkcgQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUKKyAKKyBiaW5fUFJPR1JBTVMgPSBjaHJwYXRoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY2hycGF0aC9jaHJwYXRoXzAuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzYjA2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jaHJwYXRoL2NocnBhdGhfMC4xNi5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlRvb2wgdG8gZWRpdCBycGF0aCBpbiBFTEYgYmluYXJpZXMiCitERVNDUklQVElPTiA9ICJjaHJwYXRoIGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBycGF0aCAod2hlcmUgdGhlIFwKK2FwcGxpY2F0aW9uIGxvb2tzIGZvciBsaWJyYXJpZXMpIGluIGFuIGFwcGxpY2F0aW9uLiBJdCBkb2VzIG5vdCBcCisoeWV0KSBhbGxvdyB5b3UgdG8gYWRkIGFuIHJwYXRoIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9wcm9qZWN0cy9jaHJwYXRoLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2F0aWQ9NDEyODA3Jmdyb3VwX2lkPTMxMDUyIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitTUkNfVVJJID0gImh0dHA6Ly9hbGlvdGguZGViaWFuLm9yZy9mcnMvZG93bmxvYWQucGhwL2ZpbGUvMzk3OS9jaHJwYXRoLTAuMTYudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3N0YW5kYXJkZG9jLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmJmOGQxZDFlZTM0NWZjOGE3OTE1NTc2ZjU2NDk5ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmIwZDRjNTRiYWMyOTkwZTFiZGY4MTMyZjJjOTQ3N2FlNzUyODU5ZDUyM2UxNDFlNzJiM2IxMWExMmMyNmU3YiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBXZSBkb24ndCBoYXZlIGEgc3RhZ2VkIGNocnBhdGgtbmF0aXZlIGZvciBlbnN1cmluZyBvdXIgYmluYXJ5IGlzCisjIHJlbG9jYXRhYmxlLCBzbyB1c2UgdGhlIG9uZSB3ZSd2ZSBqdXN0IGJ1aWx0CitDSFJQQVRIX0JJTl9jbGFzcy1uYXRpdmUgPSAiJHtCfS9jaHJwYXRoIgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBjaHJwYXRoLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLW5hdGl2ZV8zLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0ZTc0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS1uYXRpdmVfMy4zLjEuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSBjbWFrZS5pbmMKK2luaGVyaXQgbmF0aXZlCisKKyMgVXNpbmcgY21ha2UncyBpbnRlcm5hbCBsaWJhcmNoaXZlLCBzbyBzb21lIGRlcGVuZGVuY2llcyBhcmUgbmVlZGVkCitERVBFTkRTICs9ICJiemlwMi1uYXRpdmUgemxpYi1uYXRpdmUiCisKK1NSQ19VUkkgKz0gIlwKKyAgICBmaWxlOi8vY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoIFwKKyIKKworIyBEaXNhYmxlIGNjbWFrZSBzaW5jZSB3ZSBkb24ndCBkZXBlbmQgb24gbmN1cnNlcworQ01BS0VfRVhUUkFDT05GID0gIlwKKyAgICAtREJVSUxEX0N1cnNlc0RpYWxvZz0wIFwKKyAgICAtREVOQUJMRV9BQ0w9MCAtREhBVkVfQUNMX0xJQkFDTF9IPTAgXAorICAgIC1ESEFWRV9TWVNfQUNMX0g9MCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2U5M2FjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlLmluYwpAQCAtMCwwICsxLDUyIEBACisjIENvcHlyaWdodCAoQykgMjAwNSwgS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOVi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworU1VNTUFSWSA9ICJDcm9zcy1wbGF0Zm9ybSwgb3Blbi1zb3VyY2UgbWFrZSBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNtYWtlLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9wdWJsaWMua2l0d2FyZS5jb20vQnVnL215X3ZpZXdfcGFnZS5waHAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NvcHlyaWdodC50eHQ7bWQ1PTNiYTVhNmMzNDQ4MTY1MmNlNTczZTVjNGUxZDcwN2U0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1NvdXJjZS9jbWFrZS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTA7bWQ1PTM0MTczNmRhZTgzYzllMzQ0YjUzZWViMWJjN2Q3YmMyIgorCitDTUFLRV9NQUpPUl9WRVJTSU9OID0gIiR7QCcuJy5qb2luKGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswOjJdKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jbWFrZS5vcmcvZmlsZXMvdiR7Q01BS0VfTUFKT1JfVkVSU0lPTn0vY21ha2UtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUyNjM4NTc2ZjRlMWU2MjFmZWQ2YzM0MTBkM2ExYjEyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNkNjUwMjJjNmEwNzA3ZjFjNzExMmY5OWU5Yzk4MTY3N2ZkZDU1MThmN2RkZmEwZjc3OGQ0Y2VlNzExM2UzZDYiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgVWdseSBoYWNrIHRvIHdvcmsgYXJvdW5kIHVuZGVmaW5lZCBPRV9RTUFLRV9QQVRIX0VYVEVSTkFMX0hPU1RfQklOUyB2YXJpYWJsZQorIyBhbmQgcG9zc2libHkgbWlzc2luZyBxbWFrZSBiaW5hcnkgKHF0YmFzZS1uYXRpdmUgY2FuIGJlIHJlbW92ZWQgZnJvbSBzeXNyb290CisjIGUuZy4gaW4gb3JkZXIgdG8gdXBncmFkZSBpdCwgZXZlbiB3aGVuIHRoZXJlIGlzIHRhcmdldCBxdGJhc2UpCisKKyMgRml4ZXMgZXJyb3JzIGxpa2UgdGhpcyBpbiBjbWFrZSgtbmF0aXZlKS5kb19jb25maWd1cmU6CisjfCAtLSBQZXJmb3JtaW5nIFRlc3QgcnVuX3BpY190ZXN0IC0gU3VjY2VzcworI3wgQ01ha2UgRXJyb3IgYXQgdG1wLWVnbGliYy9zeXNyb290cy9xZW11YXJtL3Vzci9saWIvY21ha2UvUXQ1Q29yZS9RdDVDb3JlQ29uZmlnLmNtYWtlOjI3IChtZXNzYWdlKToKKyN8ICAgVGhlIGltcG9ydGVkIHRhcmdldCAiUXQ1OjpDb3JlIiByZWZlcmVuY2VzIHRoZSBmaWxlCisjfAorI3wgICAgICAiL3FtYWtlIgorI3wKKyN8ICAgYnV0IHRoaXMgZmlsZSBkb2VzIG5vdCBleGlzdC4gIFBvc3NpYmxlIHJlYXNvbnMgaW5jbHVkZToKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1pICdzL15maW5kX3BhY2thZ2UoUXQ1Q29yZSBRVUlFVCkkLyNmaW5kX3BhY2thZ2UoUXQ1Q29yZSBRVUlFVCkvZycgJHtTfS9UZXN0cy9SdW5DTWFrZS9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXQ0QW5kNUF1dG9tb2MvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQgTk9fTU9EVUxFKS8jICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBRVUlFVCBOT19NT0RVTEUpL2cnICR7U30vVGVzdHMvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXmZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFFVSUVUKS8jZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUVVJRVQpL2cnICR7U30vU291cmNlL1F0RGlhbG9nL0NNYWtlTGlzdHMudHh0CisJc2VkIC1pICdzL14gIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS8jICBmaW5kX3BhY2thZ2UoUXQ1V2lkZ2V0cyBSRVFVSVJFRCkvZycgJHtTfS9UZXN0cy9RdEF1dG9VaWNJbnRlcmZhY2UvQ01ha2VMaXN0cy50eHQKKwlzZWQgLWkgJ3MvXiAgZmluZF9wYWNrYWdlKFF0NVdpZGdldHMgUkVRVUlSRUQpLyMgIGZpbmRfcGFja2FnZShRdDVXaWRnZXRzIFJFUVVJUkVEKS9nJyAke1N9L1Rlc3RzL1F0QXV0b2dlbi9DTWFrZUxpc3RzLnR4dAorCXNlZCAtaSAncy9eICBmaW5kX3BhY2thZ2UoUXQ1Q29yZSBSRVFVSVJFRCkvIyAgZmluZF9wYWNrYWdlKFF0NUNvcmUgUkVRVUlSRUQpL2cnICR7U30vVGVzdHMvUXRBdXRvZ2VuL2F1dG9yY2NfZGVwZW5kcy9DTWFrZUxpc3RzLnR4dAorfQorCisjIEV4dHJhIGZsYWdzIHRvIHBhc3MgdG8gY21ha2UgaW52b2tlZCBieSBib290c3RyYXAKK0NNQUtFX0VYVFJBQ09ORiA9ICIiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJJHtTfS9jb25maWd1cmUgLS1wcmVmaXg9JHtwcmVmaXh9IC0tICR7Q01BS0VfRVhUUkFDT05GfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDE0YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvT0VUb29sY2hhaW5Db25maWcuY21ha2UKQEAgLTAsMCArMSwxOCBAQAorc2V0KCBDTUFLRV9TWVNURU1fTkFNRSBMaW51eCApCitzZXQoIENNQUtFX0NfRkxBR1MgJEVOVntDRkxBR1N9IENBQ0hFIFNUUklORyAiIiBGT1JDRSApCitzZXQoIENNQUtFX0NYWF9GTEFHUyAkRU5We0NYWEZMQUdTfSAgQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKK3NldCggQ01BS0UgQVNNX0ZMQUdTICR7Q01BS0VfQ19GTEFHU30gQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKK3NldCggQ01BS0VfTERGTEFHU19GTEFHUyAke0NNQUtFX0NYWF9GTEFHU30gQ0FDSEUgU1RSSU5HICIiIEZPUkNFICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEggJEVOVntPRUNPUkVfVEFSR0VUX1NZU1JPT1R9ICRFTlZ7T0VDT1JFX05BVElWRV9TWVNST09UfSApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBORVZFUiApCitzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBPTkxZICkKK3NldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkgKQorCitzdHJpbmcoUkVHRVggTUFUQ0ggInN5c3Jvb3RzLyhbYS16QS1aMC05XSspIiBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICRFTlZ7U0RLVEFSR0VUU1lTUk9PVH0pCitzdHJpbmcoUkVHRVggUkVQTEFDRSAic3lzcm9vdHMvIiAiIiBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0pCisKKyMgSW5jbHVkZSB0aGUgdG9vbGNoYWluIGNvbmZpZ3VyYXRpb24gc3Vic2NyaXB0cworZmlsZSggR0xPQiB0b29sY2hhaW5fY29uZmlnX2ZpbGVzICIke0NNQUtFX1RPT0xDSEFJTl9GSUxFfS5kLyouY21ha2UiICkKK2ZvcmVhY2goY29uZmlnICR7dG9vbGNoYWluX2NvbmZpZ19maWxlc30pCisgICAgaW5jbHVkZSgke2NvbmZpZ30pCitlbmRmb3JlYWNoKCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9jbWxpYmFyY2hpdmUtZGlzYWJsZS1leHQyZnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvY21saWJhcmNoaXZlLWRpc2FibGUtZXh0MmZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzY3MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2NtbGliYXJjaGl2ZS1kaXNhYmxlLWV4dDJmcy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitEaXNhYmxlIHVzZSBvZiBleHQyZnMvZXh0Ml9mcy5oIGJ5IGNtYWtlJ3MgaW50ZXJuYWwgbGliYXJjaGl2ZSBjb3B5CisKK1dlIGRvbid0IHdhbnQgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBlMmZzcHJvZ3MtbmF0aXZlIGZvciBjbWFrZS1uYXRpdmUsCithbmQgd2UgZG9uJ3QgdXNlIENQYWNrIHNvIGp1c3QgZGlzYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlnXQorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworLS0tIGEvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAorKysrIGIvVXRpbGl0aWVzL2NtbGliYXJjaGl2ZS9DTWFrZUxpc3RzLnR4dAorQEAgLTIzNywxMiArMjM3LDggQEAgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJjb3B5ZmlsZS5oIiBIQVZFX0NPUFlGSUxFX0gpCisgTEFfQ0hFQ0tfSU5DTFVERV9GSUxFKCJkaXJlY3QuaCIgSEFWRV9ESVJFQ1RfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImRsZmNuLmgiIEhBVkVfRExGQ05fSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImVycm5vLmgiIEhBVkVfRVJSTk9fSCkKKy1MQV9DSEVDS19JTkNMVURFX0ZJTEUoImV4dDJmcy9leHQyX2ZzLmgiIEhBVkVfRVhUMkZTX0VYVDJfRlNfSCkKKy0KKy1DSEVDS19DX1NPVVJDRV9DT01QSUxFUygiI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorLSNpbmNsdWRlIDxleHQyZnMvZXh0Ml9mcy5oPgorLWludCBtYWluKHZvaWQpIHsgcmV0dXJuIEVYVDJfSU9DX0dFVEZMQUdTOyB9IiBIQVZFX1dPUktJTkdfRVhUMl9JT0NfR0VURkxBR1MpCistCisrU0VUKEhBVkVfRVhUMkZTX0VYVDJfRlNfSCAwKQorK1NFVChIQVZFX1dPUktJTkdfRVhUMl9JT0NfR0VURkxBR1MgMCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImZjbnRsLmgiIEhBVkVfRkNOVExfSCkKKyBMQV9DSEVDS19JTkNMVURFX0ZJTEUoImdycC5oIiBIQVZFX0dSUF9IKQorIExBX0NIRUNLX0lOQ0xVREVfRklMRSgiaW50dHlwZXMuaCIgSEFWRV9JTlRUWVBFU19IKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2RvbnQtcnVuLWNyb3NzLWJpbmFyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvY21ha2UvY21ha2UvZG9udC1ydW4tY3Jvc3MtYmluYXJpZXMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorY21ha2U6IGRvbid0IHJ1biBjcm9zcy1iaW5hcmllcyBvbiBob3N0IG1hY2hpbmUKKworV2hlbiBkb2luZyB0aGUgY3Jvc3MgYnVpbGQgd2Ugb2J2aW91c2x5IGNhbm5vdCBydW4gdGhvc2UgYmluYXJpZXMgb24KK2hvc3Qgc2luY2UgdGhleSBjYW4gYmUgYmluYXJ5IGluY29tcGF0aWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworSW5kZXg6IGNtYWtlLTIuOC4xMC4xL0NNYWtlTGlzdHMudHh0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY21ha2UtMi44LjEwLjEub3JpZy9DTWFrZUxpc3RzLnR4dAorKysrIGNtYWtlLTIuOC4xMC4xL0NNYWtlTGlzdHMudHh0CitAQCAtNTg4LDcgKzU4OCw4IEBAIG1hcmtfYXNfYWR2YW5jZWQoQ01BS0VfU1RSSUNUKQorIAorICMgYnVpbGQgdGhlIHJlbWFpbmluZyBzdWJkaXJlY3RvcmllcworIGFkZF9zdWJkaXJlY3RvcnkoU291cmNlKQorLWFkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzKQorKyMgQ29tZSBvbiEgUnVubmluZyB0aGUgY3Jvc3MtYmluYXJpZXMgb24gaG9zdCBpcyBub3QgYSBnb29kIGlkZWEuCisrI2FkZF9zdWJkaXJlY3RvcnkoVXRpbGl0aWVzKQorIGFkZF9zdWJkaXJlY3RvcnkoVGVzdHMpCisgCisgaWYoQlVJTERfVEVTVElORykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL2Vudmlyb25tZW50LmQtY21ha2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGViNTZiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9lbnZpcm9ubWVudC5kLWNtYWtlLnNoCkBAIC0wLDAgKzEgQEAKK2FsaWFzIGNtYWtlPSJjbWFrZSAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPSRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvdXNyL3NoYXJlL2NtYWtlL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3F0NC1mYWlsLXNpbGVudC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmYzI3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9xdDQtZmFpbC1zaWxlbnQucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorRmFpbCBzaWxlbnRseSBpZiBzeXN0ZW0gUXQgaW5zdGFsbGF0aW9uIGlzIGJyb2tlbgorCitGaXhlcyBhIHJlZ3Jlc3Npb24gaW4gYmVoYXZpb3VyIGZyb20gMi44LjEwIHRvIDIuOC4xMSByZXN1bHRpbmcgaW4gdGhlCitmb2xsb3dpbmcgZXJyb3IgaWYgdGhlIHN5c3RlbSBRdCBpbnN0YWxsYXRpb24gaXMgYnJva2VuOgorCitDTWFrZSBFcnJvciBhdCBNb2R1bGVzL0ZpbmRRdDQuY21ha2U6MTAyOCAoc2V0X3Byb3BlcnR5KToKKyAgc2V0X3Byb3BlcnR5IGNvdWxkIG5vdCBmaW5kIFRBUkdFVCBRdDQ6OlF0Q29yZS4gIFBlcmhhcHMgaXQgaGFzIG5vdCB5ZXQKKyAgYmVlbiBjcmVhdGVkLgorQ2FsbCBTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CisgIFRlc3RzL1J1bkNNYWtlL0NNYWtlTGlzdHMudHh0Ojc5IChmaW5kX3BhY2thZ2UpCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVGhlIHBhdGNoIHdhcyBzbGlnaHRseSBhZGFwdGVkIGluIG9yZGVyIHRvIG1hdGNoIGNtYWtlIDMuMi4yOgorQW5vdGhlciBzZXRfcHJvcGVydHkgd2FzIGludHJvZHVjZWQgd2hpY2ggaGFkIHRvIGJlIGluY2x1ZGVkCit3aXRoaW4gdGhlIGlmKFFUX1FUQ09SRV9GT1VORCkgc3RhdGVtZW50LgorCitTaWduZWQtb2ZmLWJ5OiBNb3JpdHogQmx1bWUgPG1vcml0ei5ibHVtZUBibXctY2FyaXQuZGU+CistLS0KKyBNb2R1bGVzL0ZpbmRRdDQuY21ha2UgfCAzOSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UgYi9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKK2luZGV4IDY3MDQ3NjkuLjkwNDhlMzUgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL0ZpbmRRdDQuY21ha2UKKysrKyBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQorQEAgLTEwMDAsMjUgKzEwMDAsMjYgQEAgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECisgICAgIGVuZGlmKCkKKyAgIGVuZG1hY3JvKCkKKyAKKy0KKy0gICMgU2V0IFFUX3h5el9MSUJSQVJZIHZhcmlhYmxlIGFuZCBhZGQKKy0gICMgbGlicmFyeSBpbmNsdWRlIHBhdGggdG8gUVRfSU5DTFVERVMKKy0gIF9RVDRfQURKVVNUX0xJQl9WQVJTKFF0Q29yZSkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTCistICAgICAgIiR7UVRfTUtTUEVDU19ESVJ9L2RlZmF1bHQiCistICAgICAgJHtRVF9JTkNMVURFX0RJUn0KKy0gICkKKy0gIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgQVBQRU5EIFBST1BFUlRZCistICAgIElOVEVSRkFDRV9DT01QSUxFX0RFRklOSVRJT05TCistICAgICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OlFUX05PX0RFQlVHPgorLSAgKQorLSAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBQUk9QRVJUWQorLSAgICBJTlRFUkZBQ0VfUVRfTUFKT1JfVkVSU0lPTiA0CistICApCistICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorLSAgICBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgUVRfTUFKT1JfVkVSU0lPTgorLSAgKQorKyAgaWYoUVRfUVRDT1JFX0ZPVU5EKQorKyAgICAjIFNldCBRVF94eXpfTElCUkFSWSB2YXJpYWJsZSBhbmQgYWRkCisrICAgICMgbGlicmFyeSBpbmNsdWRlIHBhdGggdG8gUVRfSU5DTFVERVMKKysgICAgX1FUNF9BREpVU1RfTElCX1ZBUlMoUXRDb3JlKQorKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFF0NDo6UXRDb3JlIEFQUEVORCBQUk9QRVJUWQorKyAgICAgIElOVEVSRkFDRV9JTkNMVURFX0RJUkVDVE9SSUVTCisrICAgICAgICAiJHtRVF9NS1NQRUNTX0RJUn0vZGVmYXVsdCIKKysgICAgICAgICR7UVRfSU5DTFVERV9ESVJ9CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfQ09NUElMRV9ERUZJTklUSU9OUworKyAgICAgICAgJDwkPE5PVDokPENPTkZJRzpEZWJ1Zz4+OlFUX05PX0RFQlVHPgorKyAgICApCisrICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgUXQ0OjpRdENvcmUgUFJPUEVSVFkKKysgICAgICBJTlRFUkZBQ0VfUVRfTUFKT1JfVkVSU0lPTiA0CisrICAgICkKKysgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCBRdDQ6OlF0Q29yZSBBUFBFTkQgUFJPUEVSVFkKKysgICAgICBDT01QQVRJQkxFX0lOVEVSRkFDRV9TVFJJTkcgUVRfTUFKT1JfVkVSU0lPTgorKyAgICApCisrICBlbmRpZigpCisgCisgICBmb3JlYWNoKFFUX01PRFVMRSAke1FUX01PRFVMRVN9KQorICAgICBfUVQ0X0FESlVTVF9MSUJfVkFSUygke1FUX01PRFVMRX0pCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZS9zdXBwb3J0LW9lLXF0NC10b29scy1uYW1lcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWNiY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlL3N1cHBvcnQtb2UtcXQ0LXRvb2xzLW5hbWVzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2NtYWtlOiBzdXBwb3J0IE9wZW5FbWJlZGRlZCBRdDQgdG9vbCBiaW5hcnkgbmFtZXMKKworVGhlIEZpbmRRdDQgbW9kdWxlIGxvb2tzIGZvciBRdDQgYmluYXJpZXMgdG8gYmUgYWJsZSB0byBnYXRoZXIgdGhlCitwYXRocyB1c2VkIGZvciBjb21waWxhdGlvbiBhbmQgYWxzbyB0byBiZSB1c2luZyBkdXJpbmcgb3RoZXIgcHJvY2Vzc2VzCisodHJhbnNsYXRpb24gdXBkYXRlLCB0cmFuc2xhdGlvbiBiaW5hcnkgZ2VuZXJhdGluZyBhbmQgbGlrZSkgaG93ZXZlcgorT3BlbkVtYmVkZGVkIGhhcyByZW5hbWVkIHRob3NlIHRvIGFsbG93IG9sZCBRTWFrZSB0byBiZSB1c2VkIGluCitwYXJhbGxlbCB3aXRoIHRoZSBjdXJyZW50IG9uZS4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZQorT3BlbkVtYmVkZGVkIHNwZWNpZmljIGJpbmFyeSBuYW1lcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworVGhlIHBhdGNoIHdhcyBzbGlnaHRseSBhZGFwdGVkIGluIG9yZGVyIHRvIG1hdGNoIGNtYWtlIDMuMi4yOgorSW5zdGVhZCBvZiBmaW5kX3Byb2dyYW0sIF9maW5kX3F0NF9wcm9ncmFtIGlzIG5vdyB1c2VkLgorCitTaWduZWQtb2ZmLWJ5OiBNb3JpdHogQmx1bWUgPG1vcml0ei5ibHVtZUBibXctY2FyaXQuZGU+CistLS0KKyBNb2R1bGVzL0ZpbmRRdDQuY21ha2UgfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01vZHVsZXMvRmluZFF0NC5jbWFrZSBiL01vZHVsZXMvRmluZFF0NC5jbWFrZQoraW5kZXggMTEwOTFiNS4uNjcwNDc2OSAxMDA2NDQKKy0tLSBhL01vZHVsZXMvRmluZFF0NC5jbWFrZQorKysrIGIvTW9kdWxlcy9GaW5kUXQ0LmNtYWtlCitAQCAtNTIyLDcgKzUyMiw3IEBAIGVuZGZ1bmN0aW9uKCkKKyAKKyBzZXQoUVQ0X0lOU1RBTExFRF9WRVJTSU9OX1RPT19PTEQgRkFMU0UpCisgCistc2V0KF9RVDRfUU1BS0VfTkFNRVMgcW1ha2UgcW1ha2U0IHFtYWtlLXF0NCBxbWFrZS1tYWMpCisrc2V0KF9RVDRfUU1BS0VfTkFNRVMgcW1ha2UgcW1ha2UyIHFtYWtlNCBxbWFrZS1xdDQgcW1ha2UtbWFjKQorIF9xdDRfZmluZF9xbWFrZSgiJHtfUVQ0X1FNQUtFX05BTUVTfSIgUVRfUU1BS0VfRVhFQ1VUQUJMRSBRVFZFUlNJT04pCisgCisgaWYgKFFUX1FNQUtFX0VYRUNVVEFCTEUgQU5ECitAQCAtMTE0OCwxMiArMTE0OCwxMiBAQCBpZiAoUVRfUU1BS0VfRVhFQ1VUQUJMRSBBTkQKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX01PQ19FWEVDVVRBQkxFIFF0NDo6bW9jIG1vYy1xdDQgbW9jNCBtb2MpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9VSUNfRVhFQ1VUQUJMRSBRdDQ6OnVpYyB1aWMtcXQ0IHVpYzQgdWljKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfVUlDM19FWEVDVVRBQkxFIFF0NDo6dWljMyB1aWMzKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfUkNDX0VYRUNVVEFCTEUgUXQ0OjpyY2MgcmNjKQorLSAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU0NQUDJYTUxfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzY3BwMnhtbCBxZGJ1c2NwcDJ4bWwpCistICBfZmluZF9xdDRfcHJvZ3JhbShRVF9EQlVTWE1MMkNQUF9FWEVDVVRBQkxFIFF0NDo6cWRidXN4bWwyY3BwIHFkYnVzeG1sMmNwcCkKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX1JDQ19FWEVDVVRBQkxFIFF0NDo6cmNjIHJjYzQgcmNjKQorKyAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfREJVU0NQUDJYTUxfRVhFQ1VUQUJMRSBRdDQ6OnFkYnVzY3BwMnhtbCBxZGJ1c2NwcDJ4bWw0IHFkYnVzY3BwMnhtbCkKKysgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RCVVNYTUwyQ1BQX0VYRUNVVEFCTEUgUXQ0OjpxZGJ1c3htbDJjcHAgcWRidXN4bWwyY3BwNCBxZGJ1c3htbDJjcHApCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MVVBEQVRFX0VYRUNVVEFCTEUgUXQ0OjpsdXBkYXRlIGx1cGRhdGUtcXQ0IGx1cGRhdGU0IGx1cGRhdGUpCisgICBfZmluZF9xdDRfcHJvZ3JhbShRVF9MUkVMRUFTRV9FWEVDVVRBQkxFIFF0NDo6bHJlbGVhc2UgbHJlbGVhc2UtcXQ0IGxyZWxlYXNlNCBscmVsZWFzZSkKKy0gIF9maW5kX3F0NF9wcm9ncmFtKFFUX1FDT0xMRUNUSU9OR0VORVJBVE9SX0VYRUNVVEFCTEUgUXQ0OjpxY29sbGVjdGlvbmdlbmVyYXRvciBxY29sbGVjdGlvbmdlbmVyYXRvci1xdDQgcWNvbGxlY3Rpb25nZW5lcmF0b3IpCisrICBfZmluZF9xdDRfcHJvZ3JhbShRVF9RQ09MTEVDVElPTkdFTkVSQVRPUl9FWEVDVVRBQkxFIFF0NDo6cWNvbGxlY3Rpb25nZW5lcmF0b3IgcWNvbGxlY3Rpb25nZW5lcmF0b3ItcXQ0IHFjb2xsZWN0aW9uZ2VuZXJhdG9yIHFjb2xsZWN0aW9uZ2VuZXJhdG9yNCkKKyAgIF9maW5kX3F0NF9wcm9ncmFtKFFUX0RFU0lHTkVSX0VYRUNVVEFCTEUgUXQ0OjpkZXNpZ25lciBkZXNpZ25lci1xdDQgZGVzaWduZXI0IGRlc2lnbmVyKQorICAgX2ZpbmRfcXQ0X3Byb2dyYW0oUVRfTElOR1VJU1RfRVhFQ1VUQUJMRSBRdDQ6Omxpbmd1aXN0IGxpbmd1aXN0LXF0NCBsaW5ndWlzdDQgbGluZ3Vpc3QpCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9jbWFrZS9jbWFrZV8zLjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjE4OGYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2NtYWtlL2NtYWtlXzMuMy4xLmJiCkBAIC0wLDAgKzEsNTMgQEAKK3JlcXVpcmUgY21ha2UuaW5jCisKK2luaGVyaXQgY21ha2UKKworREVQRU5EUyArPSAiY3VybCBleHBhdCB6bGliIGxpYmFyY2hpdmUgeHogbmN1cnNlcyBiemlwMiIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgZmlsZTovL09FVG9vbGNoYWluQ29uZmlnLmNtYWtlIFwKKyAgICBmaWxlOi8vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCIKKworIyBTdHJpcCAke3ByZWZpeH0gZnJvbSAke2RvY2Rpcn0sIHNldCByZXN1bHQgaW50byBkb2NkaXJfc3RyaXBwZWQKK3B5dGhvbiAoKSB7CisgICAgcHJlZml4PWQuZ2V0VmFyKCJwcmVmaXgiLCBUcnVlKQorICAgIGRvY2Rpcj1kLmdldFZhcigiZG9jZGlyIiwgVHJ1ZSkKKworICAgIGlmIG5vdCBkb2NkaXIuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICByYWlzZSBiYi5idWlsZC5GdW5jRmFpbGVkKCdkb2NkaXIgbXVzdCBjb250YWluIHByZWZpeCBhcyBpdHMgcHJlZml4JykKKworICAgIGRvY2Rpcl9zdHJpcHBlZCA9IGRvY2RpcltsZW4ocHJlZml4KTpdCisgICAgaWYgbGVuKGRvY2Rpcl9zdHJpcHBlZCkgPiAwIGFuZCBkb2NkaXJfc3RyaXBwZWRbMF0gPT0gJy8nOgorICAgICAgICBkb2NkaXJfc3RyaXBwZWQgPSBkb2NkaXJfc3RyaXBwZWRbMTpdCisKKyAgICBkLnNldFZhcigiZG9jZGlyX3N0cmlwcGVkIiwgZG9jZGlyX3N0cmlwcGVkKQorfQorCitFWFRSQV9PRUNNQUtFPSIgXAorICAgIC1EQ01BS0VfRE9DX0RJUj0ke2RvY2Rpcl9zdHJpcHBlZH0vY21ha2UtJHtDTUFLRV9NQUpPUl9WRVJTSU9OfSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQlpJUDI9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfQ1VSTD0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9FWFBBVD0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9GT1JNPTEgXAorICAgIC1EQ01BS0VfVVNFX1NZU1RFTV9MSUJSQVJZX0xJQkFSQ0hJVkU9MSBcCisgICAgLURDTUFLRV9VU0VfU1lTVEVNX0xJQlJBUllfTElCTFpNQT0xIFwKKyAgICAtRENNQUtFX1VTRV9TWVNURU1fTElCUkFSWV9aTElCPTEgXAorICAgIC1ES1dTWVNfQ0hBUl9JU19TSUdORUQ9MSBcCisgICAgLURCVUlMRF9DdXJzZXNEaWFsb2c9MCBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnLURLV1NZU19MRlNfV09SS1M9MScsICctREtXU1lTX0xGU19ESVNBQkxFPTEnLCBkKX0gXAorIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vY21ha2UKKyAgICBpbnN0YWxsIC1tIDY0NCAke1dPUktESVJ9L09FVG9vbGNoYWluQ29uZmlnLmNtYWtlICR7RH0ke2RhdGFkaXJ9L2NtYWtlLworCisgICAgbWtkaXIgLXAgJHtEfSR7U0RLUEFUSE5BVElWRX0vZW52aXJvbm1lbnQtc2V0dXAuZAorICAgIGluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vZW52aXJvbm1lbnQuZC1jbWFrZS5zaCAke0R9JHtTREtQQVRITkFUSVZFfS9lbnZpcm9ubWVudC1zZXR1cC5kL2NtYWtlLnNoCit9CisKK0ZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7U0RLUEFUSE5BVElWRX0iCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2NtYWtlLSR7Q01BS0VfTUFKT1JfVkVSU0lPTn0iCitGSUxFU18ke1BOfS1kb2MgKz0gIiR7ZG9jZGlyfS9jbWFrZS0ke0NNQUtFX01BSk9SX1ZFUlNJT059IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rlc2t0b3AtZmlsZS11dGlscy9kZXNrdG9wLWZpbGUtdXRpbHMtbmF0aXZlXzAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3MzU2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXNrdG9wLWZpbGUtdXRpbHMvZGVza3RvcC1maWxlLXV0aWxzLW5hdGl2ZV8wLjIyLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoICouZGVza3RvcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvZGVza3RvcC1maWxlLXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCitERVBFTkRTID0gImdsaWItMi4wLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2Rlc2t0b3AtZmlsZS11dGlscy9yZWxlYXNlcy9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzZiOWY5YWFjMWVhMTQzMDkxMTc4YzIzNDM3ZTZjZDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODQzNTMyNjcyNjkyZjk4ZTliMmQ2YWU2Y2M4NjU4ZGE1NjJkZmRlMTYwNmM3ZjMzZDlkMjI3YTM0NGRlNTZjNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS9kZXNrdG9wLWZpbGUtdXRpbHMtJHtQVn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I3ODMwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlNldHMgdXAgZGlzdGNjIGZvciBjb21waWxhdGlvbiBvbiB0aGUgdGFyZ2V0IGRldmljZSIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vZGlzdGNjLnNoIgorCitTID0gIiR7V09SS0RJUn0iCisKKyMgRGVmYXVsdCB0byB0aGUgaG9zdCBtYWNoaW5lIGZvciBhIHJ1bm5pbmcgcWVtdSBzZXNzaW9uCitESVNUQ0NfSE9TVFMgPz0gIjE5Mi4xNjguNy4xIgorCitkb19jb25maWd1cmUoKSB7CisJc2VkIC1pICJzJUBESVNUQ0NfSE9TVFNAJSR7RElTVENDX0hPU1RTfSUiIGRpc3RjYy5zaAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kCisJaW5zdGFsbCAtbSAwNzU1IGRpc3RjYy5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCit9CisKK1JERVBFTkRTXyR7UE59ID0gImRpc3RjYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvZGlzdGNjLWNvbmZpZy9kaXN0Y2Muc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MjA1OTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL2Rpc3RjYy1jb25maWcvZGlzdGNjLnNoCkBAIC0wLDAgKzEsNCBAQAorRElTVENDX0hPU1RTPSJARElTVENDX0hPU1RTQCIKKyNESVNUQ0NfVkVSQk9TRT0iMSIKKworZXhwb3J0IERJU1RDQ19IT1NUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGV2ZWwtY29uZmlnL25mcy1leHBvcnQtcm9vdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjlkMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJDb25maWd1cmF0aW9uIHNjcmlwdCB0byBleHBvcnQgdGFyZ2V0IHJvb3RmcyBmaWxlc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiRW5hYmxlcyBORlMgYWNjZXNzIGZyb20gYW55IGhvc3QgdG8gdGhlIGVudGlyZSBmaWxlc3lzdGVtIChmb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMpLiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZpbGU6Ly9leHBvcnRzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCBleHBvcnRzICR7RH0ke3N5c2NvbmZkaXJ9LworfQorCitSREVQRU5EU18ke1BOfSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1uZnMtc2VydmVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RldmVsLWNvbmZpZy9uZnMtZXhwb3J0LXJvb3QvZXhwb3J0cyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1M2M1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kZXZlbC1jb25maWcvbmZzLWV4cG9ydC1yb290L2V4cG9ydHMKQEAgLTAsMCArMSBAQAorLyAqKHJ3LG5vX3Jvb3Rfc3F1YXNoLGFzeW5jLG5vX3N1YnRyZWVfY2hlY2spCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlmZnN0YXQvZGlmZnN0YXQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM2YjNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCisuL3Rlc3RpbmcvcnVuX3Rlc3Quc2ggLi90ZXN0aW5nL2Nhc2UqLnBhdCB8c2VkIFwKKyAgLWUgJ3N8Kiogb2t8UEFTU3wnIFwKKyAgLWUgJ3N8Pz8gZmFpbHxGQUlMfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RpZmZzdGF0L2RpZmZzdGF0XzEuNjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViYTRkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaWZmc3RhdC9kaWZmc3RhdF8xLjYwLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiVG9vbCB0byBwcm9kdWNlIGEgc3RhdGlzdGljcyBiYXNlZCBvbiBhIGRpZmYiCitERVNDUklQVElPTiA9ICJkaWZmc3RhdCByZWFkcyB0aGUgb3V0cHV0IG9mIGRpZmYgYW5kIGRpc3BsYXlzIGEgaGlzdG9ncmFtIG9mIFwKK3RoZSBpbnNlcnRpb25zLCBkZWxldGlvbnMsIGFuZCBtb2RpZmljYXRpb25zIHBlci1maWxlLiBJdCBpcyB1c2VmdWwgZm9yIFwKK3Jldmlld2luZyBsYXJnZSwgY29tcGxleCBwYXRjaCBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vaW52aXNpYmxlLWlzbGFuZC5uZXQvZGlmZnN0YXQvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vaW5zdGFsbC1zaDtlbmRsaW5lPTQyO21kNT1iMzU0OTcyNmMxMDIyYmVlMDljMTc0YzcyYTBjYTRhNSIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9kaWZmc3RhdC9kaWZmc3RhdC0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImJhODg5ZGE0YzA2YjU0N2FhMmQ3OGZhOTY4MDBhZTZmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjIwMzJlNDE4YjQzYmFlNzBkNTQ4ZTMyZGE5MDFlYmM0YWMxMjk3MjM4MWRlMTMxNGJlYmRlMGIxMjZmYjAxMjMiCisKK1MgPSAiJHtXT1JLRElSfS9kaWZmc3RhdC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwdGVzdAorCitMREZMQUdTICs9ICIke1RPT0xDSEFJTl9PUFRJT05TfSIKKworZG9fY29uZmlndXJlICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQltdiAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorCWF1dG90b29sc19kb19jb25maWd1cmUKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtciAke1N9L3Rlc3RpbmcgJHtEfSR7UFRFU1RfUEFUSH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZGlzdGNjXzMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODg3OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9kaXN0Y2NfMy4xLmJiCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiQSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJkaXN0Y2MgaXMgYSBwYXJhbGxlbCBidWlsZCBzeXN0ZW0gdGhhdCBkaXN0cmlidXRlcyBcCitjb21waWxhdGlvbiBvZiBDL0MrKy9PYmpDIGNvZGUgYWNyb3NzIG1hY2hpbmVzIG9uIGEgbmV0d29yay4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitERVBFTkRTID0gImF2YWhpIgorCitHVEtDT05GSUcgPSAiZ3RrIgorR1RLQ09ORklHX2xpYmMtdWNsaWJjID0gIiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJyR7R1RLQ09ORklHfScsICcnLCBkKX0gcG9wdCIKK1BBQ0tBR0VDT05GSUdbZ3RrXSA9ICItLXdpdGgtZ3RrLC0td2l0aG91dC1ndGsgLS13aXRob3V0LWdub21lLGd0aysiCisjIHVzZSBzeXN0ZW0gcG9wdCBieSBkZWZhdWx0CitQQUNLQUdFQ09ORklHW3BvcHRdID0gIi0td2l0aG91dC1pbmNsdWRlZC1wb3B0LC0td2l0aC1pbmNsdWRlZC1wb3B0LHBvcHQiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImF2YWhpLWRhZW1vbiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2Rpc3RjYy9kaXN0Y2MuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL3NlcGFyYXRlYnVpbGRkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGVmYXVsdCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXN0Y2MgXAorICAgICAgICAgICBmaWxlOi8vZGlzdGNjLnNlcnZpY2UiCitTUkNSRVYgPSAiOWExNzJkM2QyMDA0Mjc1NGEzMGMwY2Q5YTVkNjNmZDFhODEyMGMzMSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtV2Vycm9yIFBZVEhPTj0vZGV2L251bGwiCisKK1VTRVJBRERfUEFDS0FHRVMgPSAiJHtQTn0iCitVU0VSQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ob21lIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAtLWdpZCBub2dyb3VwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGlzdGNjIgorCitJTklUU0NSSVBUX05BTUUgPSAiZGlzdGNjIgorCitTWVNURU1EX1BBQ0tBR0VTID0gIiR7UE59IgorU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImRpc3RjYy5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQKKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9kaXN0Y2MgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2RlZmF1bHQgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC9kaXN0Y2MKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworICAgIGluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rpc3RjYy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisgICAgc2VkIC1pIC1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9kaXN0Y2Muc2VydmljZQorICAgICR7REVTS1RPUElOU1RBTEx9Cit9CitERVNLVE9QSU5TVEFMTCA9ICIiCitERVNLVE9QSU5TVEFMTF9saWJjLWdsaWJjICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2Rpc3RjYy8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9kaXN0Y2Ntb24tZ25vbWUuZGVza3RvcCAke0R9JHtkYXRhZGlyfS9kaXN0Y2MvCit9CitQQUNLQUdFUyArPSAiZGlzdGNjLWRpc3Rtb24tZ25vbWUiCisKK0ZJTEVTXyR7UE59ID0gIiAke3N5c2NvbmZkaXJ9IFwKKwkJJHtiaW5kaXJ9L2Rpc3RjYyBcCisgICAgJHtiaW5kaXJ9L2xzZGlzdGNjIFwKKwkJJHtiaW5kaXJ9L2Rpc3RjY2QgXAorCQkke2JpbmRpcn0vZGlzdGNjbW9uLXRleHQgXAorCQkke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2Rpc3RjYy5zZXJ2aWNlIgorRklMRVNfZGlzdGNjLWRpc3Rtb24tZ25vbWUgPSAiICAke2JpbmRpcn0vZGlzdGNjbW9uLWdub21lIFwKKwkJCQkke2RhdGFkaXJ9L2Rpc3RjYyIKKworcGtnX3Bvc3RybV8ke1BOfSAoKSB7CisJZGVsdXNlciBkaXN0Y2MgfHwgdHJ1ZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy8wMDAxLXplcm9jb25mLUluY2x1ZGUtZmNudGwuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3ZWM5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvMDAwMS16ZXJvY29uZi1JbmNsdWRlLWZjbnRsLmgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA4MzMxZmM0NzU5ZDgwOTUxMmY0MDRlN2EyN2Y4MTdhZDZkNjE2NDUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTg6MDA6MzMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gemVyb2NvbmY6IEluY2x1ZGUgZmNudGwuaAorCitXZSBuZWVkIGl0IGZvciBnZXR0aW5nIGRlaW5pdGlvbnMgZm9yIE9fKiBlLmcuIE9fQ1JFQVQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvemVyb2NvbmYuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL3plcm9jb25mLmMgYi9zcmMvemVyb2NvbmYuYworaW5kZXggNDE0ZGRjNC4uMzFiZDMzZiAxMDA2NDQKKy0tLSBhL3NyYy96ZXJvY29uZi5jCisrKysgYi9zcmMvemVyb2NvbmYuYworQEAgLTMzLDYgKzMzLDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAKKyAjaW5jbHVkZSA8YXZhaGktY29tbW9uL2RvbWFpbi5oPgorICNpbmNsdWRlIDxhdmFoaS1jb21tb24vZXJyb3IuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYzQxNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2RlZmF1bHQKQEAgLTAsMCArMSwyNCBAQAorIyBEZWZhdWx0cyBmb3IgZGlzdGNjIGluaXRzY3JpcHQKKyMgc291cmNlZCBieSAvZXRjL2luaXQuZC9kaXN0Y2MKKworIworIyBzaG91bGQgZGlzdGNjIGJlIHN0YXJ0ZWQgb24gYm9vdD8KKyMKKyMgU1RBUlRESVNUQ0M9InRydWUiCisKK1NUQVJURElTVENDPSJ0cnVlIgorCisjCisjIFdoaWNoIG5ldHdvcmtzL2hvc3RzIHNob3VsZCBiZSBhbGxvd2VkIHRvIGNvbm5lY3QgdG8gdGhlIGRhZW1vbj8KKyMgWW91IGNhbiBsaXN0IG11bHRpcGxlIGhvc3RzL25ldHdvcmtzIHNlcGFyYXRlZCBieSBzcGFjZXMuCisjIE5ldHdvcmtzIGhhdmUgdG8gYmUgaW4gQ0lEUiBub3RhdGlvbiwgZi5lLiAxOTIuMTY4LjEuMC8yNAorIyBIb3N0cyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgSVAgQWRyZXNzCisjCisjIEFMTE9XRURORVRTPSIxMjcuMC4wLjEiCisKK0FMTE9XRURORVRTPSIxOTIuMTY4LjcuMC8yNCIKKworIworIyBPUFRJT05TIGlzIHVzZWQgZm9yIHRoZSBzeXN0ZW1kIHNlcnZpY2UgZmlsZQorIworT1BUSU9OUz0iLS1hbGxvdyAxOTIuMTY4LjcuMC8yNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM2ZjBmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIGRpc3RjYworIyBSZXF1aXJlZC1TdGFydDogICAgJHJlbW90ZV9mcyAkc3lzbG9nCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkcmVtb3RlX2ZzICRzeXNsb2cKKyMgRGVmYXVsdC1TdGFydDogICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDEKKyMgU2hvcnQtRGVzY3JpcHRpb246IHNpbXBsZSBkaXN0cmlidXRlZCBjb21waWxlciBjbGllbnQgYW5kIHNlcnZlcgorIyMjIEVORCBJTklUIElORk8KKyMKKyMgZGlzdGNjZCBEZWJpYW4gaW5pdC5kIHNjcmlwdCBjb250cmlidXRlZCBieSBKYXNvbiBUaG9tYXMuICAoRGViaWFuICMxNjExMzYpCisjCisjIHNrZWxldG9uCWV4YW1wbGUgZmlsZSB0byBidWlsZCAvZXRjL2luaXQuZC8gc2NyaXB0cy4KKyMJCVRoaXMgZmlsZSBzaG91bGQgYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2NyaXB0cyBmb3IgL2V0Yy9pbml0LmQuCisjCisjCQlXcml0dGVuIGJ5IE1pcXVlbCB2YW4gU21vb3JlbmJ1cmcgPG1pcXVlbHNAY2lzdHJvbi5ubD4uCisjCQlNb2RpZmllZCBmb3IgRGViaWFuIEdOVS9MaW51eAorIwkJYnkgSWFuIE11cmRvY2sgPGltdXJkb2NrQGdudS5haS5taXQuZWR1Pi4KKyMKKyMgVmVyc2lvbjoJQCgjKXNrZWxldG9uICAxLjkuMSAgMDgtQXByLTIwMDIgIG1pcXVlbHNAY2lzdHJvbi5ubAorIworCitQQVRIPS91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2Jpbjovc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3IvYmluL2Rpc3RjY2QKK05BTUU9ZGlzdGNjCitERVNDPSJEaXN0cmlidXRlZCBDb21waWxlciBEYWVtb24iCitEQUVNT05fQVJHUz0iLS1waWQtZmlsZT0vdmFyL3J1bi8kTkFNRS5waWQgLS1kYWVtb24iCisjIHBsZWFzZSBjaGFuZ2UgdGhvc2UgdmFyaWFibGVzIGJ5IG92ZXJyaWRpbmcgdGhlbSBpbiAvZXRjL2RlZmF1bHRzL2Rpc3RjYworQUxMT1dFRE5FVFM9IjEyNy4wLjAuMSIKKworIyBSZWFkcyBjb25maWcgZmlsZSAod2lsbCBvdmVycmlkZSBkZWZhdWx0cyBhYm92ZSkKK1sgLXIgL2V0Yy9kZWZhdWx0L2Rpc3RjYyBdICYmIC4gL2V0Yy9kZWZhdWx0L2Rpc3RjYworCit0ZXN0IC14ICREQUVNT04gfHwgZXhpdCAwCisKK3NldCAtZQorCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworIyBjb25zdHJ1Y3QgYWNjZXNzIGxpc3QKK0FMTE9XPSIiCitmb3IgbmV0IGluICRBTExPV0VETkVUUworZG8KKwlBTExPVz0iJEFMTE9XIC0tYWxsb3cgJG5ldCIKK2RvbmUKKworc2hvdWxkX3N0YXJ0KCkgeworCWlmIFsgIiRTVEFSVERJU1RDQyIgIT0gInRydWUiIF0gJiYgWyAiJFNUQVJURElTVENDIiAhPSAiWUVTIiBdOyB0aGVuCisJCWVjaG8gIlNUQVJURElTVENDIGlzIHNldCB0byBmYWxzZSBpbiAvZXRjL2RlZmF1bHQvZGlzdGNjIgorCQllY2hvICIkREFFTU9OIG5vdCBzdGFydGluZyIKKwkJZXhpdCAwCisJZmkKKwkjIHdlIG5lZWQgcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgcGlkIGZpbGUKKwl0b3VjaCAvdmFyL3J1bi8kTkFNRS5waWQKKwljaG93biBkaXN0Y2MgL3Zhci9ydW4vJE5BTUUucGlkCit9CisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKwlzaG91bGRfc3RhcnQKKwllY2hvIC1uICJTdGFydGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8kTkFNRS5waWQgXAorCS0tZXhlYyAkREFFTU9OIC0tICREQUVNT05fQVJHUyAkQUxMT1cgfHwKKwl7CisJICAgIGNvZGU9JD8KKwkgICAgZWNobyAiJDA6IHN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCWVjaG8gIi4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OIHx8CisJeworCSAgICBjb2RlPSQ/CisJICAgIGVjaG8gIiQwOiBzdG9wIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCXJtIC1mIC92YXIvcnVuLyROQU1FLnBpZCA+L2Rldi9udWxsIDI+JjEKKwllY2hvICIuIgorCTs7CisgIHJlc3RhcnR8Zm9yY2UtcmVsb2FkKQorCSMKKwkjCUlmIHRoZSAicmVsb2FkIiBvcHRpb24gaXMgaW1wbGVtZW50ZWQsIG1vdmUgdGhlICJmb3JjZS1yZWxvYWQiCisJIwlvcHRpb24gdG8gdGhlICJyZWxvYWQiIGVudHJ5IGFib3ZlLiBJZiBub3QsICJmb3JjZS1yZWxvYWQiIGlzCisJIwlqdXN0IHRoZSBzYW1lIGFzICJyZXN0YXJ0Ii4KKwkjCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogJE5BTUUiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyROQU1FLnBpZCBcCisJCS0tZXhlYyAkREFFTU9OCisJc2xlZXAgMQorCXNob3VsZF9zdGFydAorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vJE5BTUUucGlkIFwKKwkJLS1leGVjICREQUVNT04gLS0gJERBRU1PTl9BUkdTICRBTExPVyB8fAorCXsKKwkgICAgY29kZT0kPworCSAgICBybSAtZiAvdmFyL3J1bi8kTkFNRS5waWQgPi9kZXYvbnVsbCAyPiYxCisJICAgIGVjaG8gIiQwOiByZXN0YXJ0IGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJGNvZGUiID4mMgorCSAgICBleGl0ICRjb2RlCisJfQorCWVjaG8gIi4iCisJOzsKKworICAgc3RhdHVzKQorCXN0YXR1cyAkREFFTU9OCisJZXhpdCAkPworCTs7CisgICopCisJTj0vZXRjL2luaXQuZC8kTkFNRQorCWVjaG8gIlVzYWdlOiAkTiB7c3RhcnR8c3RvcHxyZXN0YXJ0fGZvcmNlLXJlbG9hZHxzdGF0dXN9IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjYy5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjUzZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9kaXN0Y2Muc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPURpc3RjY2QgQSBEaXN0cmlidXRlZCBDb21waWxhdGlvbiBTZXJ2ZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVXNlcj1kaXN0Y2MKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9kZWZhdWx0L2Rpc3RjYworRXhlY1N0YXJ0PUBCSU5ESVJAL2Rpc3RjY2QgLS12ZXJib3NlIC0tbm8tZGV0YWNoIC0tZGFlbW9uICRPUFRJT05TCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvZGlzdGNjbW9uLWdub21lLmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNWQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZGlzdGNjL2ZpbGVzL2Rpc3RjY21vbi1nbm9tZS5kZXNrdG9wCkBAIC0wLDAgKzEsMTIgQEAKK1tEZXNrdG9wIEVudHJ5XQorVmVyc2lvbj0wLjkuNAorRXhlYz1kaXN0Y2Ntb24tZ25vbWUKK05hbWU9ZGlzdGNjIG1vbml0b3IKK0dlbmVyaWNOYW1lPURpc3RyaWJ1dGVkIENvbXBpbGUgTW9uaXRvcgorQ29tbWVudD1HcmFwaGljYWwgdmlldyBvZiBkaXN0cmlidXRlZCBjb21waWxlIHRhc2tzCitJY29uPWRpc3RjY21vbi1nbm9tZS1pY29uCitUcnlFeGVjPWRpc3RjY21vbi1nbm9tZQorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R05PTUU7RGV2ZWxvcG1lbnQ7CitTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kaXN0Y2MvZmlsZXMvc2VwYXJhdGVidWlsZGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWUzZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rpc3RjYy9maWxlcy9zZXBhcmF0ZWJ1aWxkZGlyLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1doZW4gYnVpbGRpbmcgd2l0aCBhIHNlcGFyYXRlIGJ1aWxkIGRpcmVjdG9yeSwgbWFrZSBpbnN0YWxsIGZhaWxzLAordW5hYmxlIHRvIGZpbmQgdGhlIGdub21lX2RhdGEgZmlsZXMuIFRoaXMgcGF0Y2ggY29ycmVjdHMgdGhlCitwYXRjaCBhbmQgZW5zdXJlcyB0aGUgYnVpbGQgd29ya3MgaW4gdGhpcyBjYXNlLgorCitSUCAyMDEzLzMvOAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGRpc3RjYy0zLjEvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBkaXN0Y2MtMy4xLm9yaWcvTWFrZWZpbGUuaW4JMjAwOC0xMi0wMiAyMTo1MDozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBkaXN0Y2MtMy4xL01ha2VmaWxlLmluCTIwMTMtMDMtMDggMTA6NDk6MjQuMjI0NDAwOTM3ICswMDAwCitAQCAtMTA4OCw3ICsxMDg4LDcgQEAKKyBpbnN0YWxsLWdub21lLWRhdGE6ICQoZ25vbWVfZGF0YSkKKyAJJChta2luc3RhbGxkaXJzKSAiJChERVNURElSKSQocGtnZGF0YWRpcikiCisgCWZvciBwIGluICQoZ25vbWVfZGF0YSk7IGRvCQkJCVwKKy0JJChJTlNUQUxMX0RBVEEpICIkJHAiICIkKERFU1RESVIpJChwa2dkYXRhZGlyKSIgfHwgZXhpdCAxOyBcCisrCSQoSU5TVEFMTF9EQVRBKSAiJChzcmNkaXIpLyQkcCIgIiQoREVTVERJUikkKHBrZ2RhdGFkaXIpIiB8fCBleGl0IDE7IFwKKyAJZG9uZQorIAorIGluc3RhbGwtY29uZjogJChjb25mX2ZpbGVzKSAkKGRlZmF1bHRfZmlsZXMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG1pZGVjb2RlL2RtaWRlY29kZV8yLjEyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE2NTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RtaWRlY29kZS9kbWlkZWNvZGVfMi4xMi5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkRNSSAoRGVza3RvcCBNYW5hZ2VtZW50IEludGVyZmFjZSkgdGFibGUgcmVsYXRlZCB1dGlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5vbmdudS5vcmcvZG1pZGVjb2RlLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9L2RtaWRlY29kZS8ke0JQfS50YXIuYnoyIgorCitDT01QQVRJQkxFX0hPU1QgPSAiKGkuODZ8eDg2XzY0fGFhcmNoNjR8YXJtfHBvd2VycGN8cG93ZXJwYzY0KS4qLWxpbnV4IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAorfQorCitkb191bnBhY2tfZXh0cmEoKSB7CisJc2VkIC1pIC1lICcvXnByZWZpeC9zOi91c3IvbG9jYWw6JHtleGVjX3ByZWZpeH06JyAke1N9L01ha2VmaWxlCit9CithZGR0YXNrIHVucGFja19leHRyYSBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNDA2ZjNjYmIyNzczNjQ5MTY5ODY5N2JlZWRkYjc4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MTNmZjMwNTVkNTYzYTYyYTQyMDc4OWI4ZWUzM2IwMzhkZTlhZmExOGVhNjEyNTQ3NjBkZGY4YWI4N2E1MDg4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMvZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmVfMS43OS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxYjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLWRzc3NsLXN0eWxlc2hlZXRzL2RvY2Jvb2stZHNzc2wtc3R5bGVzaGVldHMtbmF0aXZlXzEuNzkuYmIKQEAgLTAsMCArMSw2OCBAQAorU1VNTUFSWSA9ICJEU1NTTCBzdHlsZXNoZWV0cyB1c2VkIHRvIHRyYW5zZm9ybSBTR01MIGFuZCBYTUwgRG9jQm9vayBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldCIKKyMgU2ltcGxlIHBlcnNtaXNzaXZlCitMSUNFTlNFID0gIkRTU1NMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT00MTtlbmRsaW5lPTc0O21kNT04NzUzODUxNTliMmVlNzZlY2Y1NjEzNmFlN2Y1NDJkNiIKKworREVQRU5EUyA9ICJzZ21sLWNvbW1vbi1uYXRpdmUiCisKK1BSID0gInI0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2Nib29rL2RvY2Jvb2stZHNzc2wtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImJjMTkyZDIzMjY2YjlhNjY0Y2EwYWJhNGE3Nzk0YzdjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmMzI5ZTEyMGJlZTllZjQyZmJkZDc0ZGRkNjBlMDVlNDk3ODZjNWE3OTUzYTBmZjRjNjgwYWU2YmRmMGUyYmMiCisKK1MgPSAiJHtXT1JLRElSfS9kb2Nib29rLWRzc3NsLSR7UFZ9IgorCitpbmhlcml0IG5hdGl2ZQorCitTU1RBVEVQT1NUSU5TVEZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZG9jYm9va19kc3NzbF9zeXNyb290X3ByZXByb2Nlc3MiCitDTEVBTkZVTkNTICs9ICJkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9jbGVhbiIKKworCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay1kc3NzbC5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgYmluL2NvbGxhdGVpbmRleC5wbCAke0R9JHtiaW5kaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWluc3RhbGwgLW0gMDY0NCBjYXRhbG9nICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9kc3NzbC1zdHlsZXNoZWV0cy0ke1BWfQorCWNwIC12IC1SICogJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9CisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwKKwllY2hvICJDQVRBTE9HICR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL2Rzc3NsLXN0eWxlc2hlZXRzLSR7UFZ9L2NhdGFsb2ciID4gXAorCQkgJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svZHNzc2wtc3R5bGVzaGVldHMtJHtQVn0vY29tbW9uL2NhdGFsb2ciID4+IFwKKwkJJHtEfSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorfQorCitkb2Nib29rX2Rzc3NsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorCXRoZW4KKwkJIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKwkJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCQkke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdAorCWZpCit9CisKK2RvY2Jvb2tfZHNzc2xfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKyAgICBpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisgICAgaW5zdGFsbCAtbSA3NTUgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L2luc3RhbGwtY2F0YWxvZyAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L2luc3RhbGwtY2F0YWxvZy1kb2Nib29rLWRzc3NsCit9CisKK2RvY2Jvb2tfZHNzc2xfc3R5bGVzaGVldHNfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9kc3NzbC1kb2Nib29rLXN0eWxlc2hlZXRzLmNhdC9kJyAkZgorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtMy4xLW5hdGl2ZV8zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGY0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTMuMS1uYXRpdmVfMy4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiMy4xIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworIyBOb3RlOiB0aGUgdXBzdHJlYW0gc291cmNlcyBhcmUgbm90IGRpc3RyaWJ1dGVkIHdpdGggYSBsaWNlbnNlIGZpbGUuCisjIExJQ0VOU0UtT0FTSVMgaXMgaW5jbHVkZWQgYXMgYSAicGF0Y2giIHRvIHdvcmthcm91bmQgdGhpcy4gV2hlbgorIyB1cGdyYWRpbmcgdGhpcyByZWNpcGUsIHBsZWFzZSB2ZXJpZnkgd2hldGhlciB0aGlzIGlzIHN0aWxsIG5lZWRlZC4KK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5kb2Nib29rLm9yZy9zZ21sLzMuMS9kb2NiazMxLnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDMyNzQ5YzBjODA2ZGJhZTgxYzhiY2I3MGRhM2I1ZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAyNjFkMjc3MWI5YTA1MmFiZmEzZDhmYWIxYWE2MmJlMDU3OTFhMDEwMjgxYzU2NmY5MDczYmYwZTY0NDUzOCIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQtMy5odG1sCisJIyBmb3IgZGV0YWlscy4KKwlzZWQgLWkgLWUgJy9JU08gODg3OS9kJyAtZSAnc3xEVERERUNMICItLy9PQVNJUy8vRFREIERvY0Jvb2sgVjMuMS8vRU4ifFNHTUxERUNMfGcnIGRvY2Jvb2suY2F0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay1zZ21sLWR0ZC9kb2Nib29rLXNnbWwtZHRkLTQuMS1uYXRpdmVfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM5Mzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjEtbmF0aXZlXzQuMS5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIGRvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYworCitMSUNFTlNFID0gIk9BU0lTIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKK0RURF9WRVJTSU9OID0gIjQuMSIKKworUFIgPSAiJHtJTkNfUFJ9LjAiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gImh0dHA6Ly9kb2Nib29rLm9yZy9zZ21sLzQuMS9kb2NiazQxLnppcCBcCisgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLU9BU0lTIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg5ZjZmZjJhMjE3M2ViMWUxNDIxNmMxMDUzM2VkZTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGVhYWZjZjBhMzY3NzY5MmU3YWQ0NDEyYzBlNDFjMWRiM2U5ZGE2Y2RjZGIzZGQzMmIyY2MxZjljOTdkNjMxMSIKKworZG9fY29tcGlsZSgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3Qvc2dtbC1kdGQuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJc2VkIC1pIC1lICcvSVNPIDg4NzkvZCcgLWUgJy9nbWwvZCcgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtNC41LW5hdGl2ZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTcyM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC00LjUtbmF0aXZlLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCisKK0xJQ0VOU0UgPSAiT0FTSVMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLU9BU0lTO21kNT1jNjA4OTg1ZGQ1ZjdmMjE1ZTY2OWU3NjM5YTBiMWQyZSIKKworRFREX1ZFUlNJT04gPSAiNC41IgorCitQUiA9ICIke0lOQ19QUn0uMCIKK1BWID0gIjQuNSIKKworU1JDX1VSSVttZDVzdW1dID0gIjA3YzU4MWY0YmJjYmE2ZDNhYWM4NTM2MGExOWY5NWY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgwNDNlNTE0ZTgwYzZjMTljYjE0NmI1ZDM3OTM3ZDEzMDViZjNhYmY5YjAwOTdjMzZkZjdmNzBmNjExY2RmNDMiCisKK2RvX2NvbXBpbGUoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCXNlZCAtaSAtZSAnL0lTTyA4ODc5L2QnIC1lJy9nbWwvZCcgZG9jYm9vay5jYXQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2RvY2Jvb2stc2dtbC1kdGQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjUwOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZG9jYm9vay1zZ21sLWR0ZC1uYXRpdmUuaW5jCkBAIC0wLDAgKzEsNzAgQEAKKyMgVGhlIERURHMgb2YgdGhlIHZhcmlvdXMgdmVyc2lvbnMgaGF2ZSB0byBiZSBpbnN0YWxsZWQgaW4gcGFyYWxsZWwgYW5kCisjIHNob3VsZCBub3QgcmVwbGFjZSBlYWNoIG90aGVyLiBUaGUgaW5zdGFsbGF0aW9uIHN0ZXAgaXMgY29tbW9uIGZvcgorIyBhbGwgdmVyc2lvbnMgYW5kIGp1c3QgZGlmZmVycyBpbiAke0RURF9WRVJTSU9OfSB3aGljaCBpcyBzZXQgaW4gZWFjaAorIyB2ZXJzaW9uIHJlY2lwZS4KKyMKKyMgVGhlIERURHMgZG8gaGF2ZSBzb21lIHF1aXJrcyAoc2VlIExGUyBkb2N1bWVudGF0aW9uKS4KK1NVTU1BUlkgPSAiRG9jdW1lbnQgdHlwZSBkZWZpbml0aW9ucyBmb3IgdmVyaWZpY2F0aW9uIG9mIFNHTUwgZGF0YSBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBTR01MIGRhdGEgXAorZmlsZXMgYWdhaW5zdCB0aGUgRG9jQm9vayBydWxlIHNldCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcvc2dtbC8iCisKK0RFUEVORFMgPSAic2dtbC1jb21tb24tbmF0aXZlIgorCisjIE5vdGU6IHRoZSB1cHN0cmVhbSBzb3VyY2VzIGFyZSBub3QgZGlzdHJpYnV0ZWQgd2l0aCBhIGxpY2Vuc2UgZmlsZS4KKyMgTElDRU5TRS1PQVNJUyBpcyBpbmNsdWRlZCBhcyBhICJwYXRjaCIgdG8gd29ya2Fyb3VuZCB0aGlzLiBXaGVuCisjIHVwZ3JhZGluZyB0aGlzIHJlY2lwZSwgcGxlYXNlIHZlcmlmeSB3aGV0aGVyIHRoaXMgaXMgc3RpbGwgbmVlZGVkLgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRvY2Jvb2sub3JnL3NnbWwvJHtEVERfVkVSU0lPTn0vZG9jYm9vay0ke0RURF9WRVJTSU9OfS56aXAgXAorICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1PQVNJUyIKKworIyBUaGUgLnppcCBmaWxlIGV4dHJhY3RzIHRvIHRoZSBjdXJyZW50IGRpcgorUyA9ICIke1dPUktESVJ9IgorCitJTkNfUFIgPSAicjMiCisKK1NTVEFURVBPU1RJTlNURlVOQ1MgKz0gImRvY2Jvb2tfc2dtbF9kdGRfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L3NnbWwtZHRkLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3NnbWwvZG9jYm9vay9zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorCWluc3RhbGwgZG9jYm9vay5jYXQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3NnbWwtZHRkLSR7RFREX1ZFUlNJT059L2NhdGFsb2cKKwljcCAtUHBSciAqLmR0ZCAqLm1vZCAqLmRjbCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc2dtbAorCWVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svc2dtbC1kdGQtJHtEVERfVkVSU0lPTn0vY2F0YWxvZyIgPiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKK30KKworZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfcG9zdGluc3QgKCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmJhayBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfSBcCisJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBcCisJCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLWR0ZC0ke0RURF9WRVJTSU9OfS5jYXQKKwlmaQorfQorCitkb2Nib29rX3NnbWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctZG9jYm9vay1zZ21sLWR0ZC0ke0RURF9WRVJTSU9OfQorfQorCitDTEVBTkZVTkNTICs9ICJkb2Nib29rX3NnbWxfZHRkX3NzdGF0ZV9jbGVhbiIKKworZG9jYm9va19zZ21sX2R0ZF9zc3RhdGVfY2xlYW4gKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGNhdGFsb2cgZmlsZSBzZ21sLWRvY2Jvb2suY2F0IGlzIHByb3Blcmx5CisJIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgcmVtb3ZlZCBmcm9tIHNzdGF0ZSBjYWNoZS4KKwlmaWxlcz0iJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5iYWsgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQiCisJZm9yIGYgaW4gJGZpbGVzOyBkbworCQlbICEgLWYgJGYgXSB8fCBzZWQgLWkgJy9cL3NnbWxcL3NnbWwtZG9jYm9vay1kdGQtJHtEVERfVkVSU0lPTn0uY2F0L2QnICRmCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stc2dtbC1kdGQvZmlsZXMvTElDRU5TRS1PQVNJUyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRhN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXNnbWwtZHRkL2ZpbGVzL0xJQ0VOU0UtT0FTSVMKQEAgLTAsMCArMSwxNiBAQAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jQm9vayBYTUwgRFRECithbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKK2lzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKK2hvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKK2FueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCit3YXJyYW50eS4KKworSWYgeW91IG1vZGlmeSB0aGUgRG9jQm9vayBEVEQgaW4gYW55IHdheSwgZXhjZXB0IGZvciBkZWNsYXJpbmcgYW5kCityZWZlcmVuY2luZyBhZGRpdGlvbmFsIHNldHMgb2YgZ2VuZXJhbCBlbnRpdGllcyBhbmQgZGVjbGFyaW5nCithZGRpdGlvbmFsIG5vdGF0aW9ucywgbGFiZWwgeW91ciBEVEQgYXMgYSB2YXJpYW50IG9mIERvY0Jvb2suICBTZWUKK3RoZSBtYWludGVuYW5jZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitQbGVhc2UgZGlyZWN0IGFsbCBxdWVzdGlvbnMsIGJ1ZyByZXBvcnRzLCBvciBzdWdnZXN0aW9ucyBmb3IgCitjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKK2luZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy0wLjYuMTQvcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNzlkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtMC42LjE0L3JlLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggcnVudGltZSBlcnJvciBvY2N1cnJlZCBlLmcuIHdpdGggZG9jYm9vay10by1tYW4gY2FsbHM6CisKKyAgZ3JlcDogY2hhcmFjdGVyIGNsYXNzIHN5bnRheCBpcyBbWzpzcGFjZTpdXSwgbm90IFs6c3BhY2U6XQorICBncmVwOiBjaGFyYWN0ZXIgY2xhc3Mgc3ludGF4IGlzIFtbOnNwYWNlOl1dLCBub3QgWzpzcGFjZTpdCisgIGp3OiBUaGVyZSBpcyBubyBmcm9udGVuZCBjYWxsZWQgIi9kb2Nib29rL3V0aWxzLTAuNi4xNC9mcm9udGVuZHMvZG9jYm9vayIuCisKK1NlZSBhbHNvOgorCisgICA8aHR0cHM6Ly9xYS5tYW5kcml2YS5jb20vc2hvd19idWcuY2dpP2lkPTYxMTI3PgorCitTaWduZWQtb2ZmLWJ5OiBTdGVmZmVuIFNsZWR6IDxzbGVkekBkcmVzZWFyY2gtZmUuZGU+CisKK2RpZmYgLU51cmQgZG9jYm9vay11dGlscy0wLjYuMTQtb3JpZy9iaW4vancuaW4gZG9jYm9vay11dGlscy0wLjYuMTQvYmluL2p3LmluCistLS0gZG9jYm9vay11dGlscy0wLjYuMTQtb3JpZy9iaW4vancuaW4JMjAxMi0wMy0yOSAwNzo1MDowMC43ODk1NjQ4MjYgKzAyMDAKKysrKyBkb2Nib29rLXV0aWxzLTAuNi4xNC9iaW4vancuaW4JMjAxMi0wMy0yOSAwNzo1MjoxMC4zNzEzMDI5NjcgKzAyMDAKK0BAIC04MCw5ICs4MCw5IEBACisgU0dNTF9DQVRBTE9HU19ESVI9Ii9ldGMvc2dtbCIKKyBpZiBbIC1mICIkU0dNTF9DT05GIiBdCisgdGhlbgorLSAgUkU9J15bOnNwYWNlOl0qU0dNTF9CQVNFX0RJUls6c3BhY2U6XSo9WzpzcGFjZTpdKicKKysgIFJFPSdeW1s6c3BhY2U6XV0qU0dNTF9CQVNFX0RJUltbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSonCisgICBTR01MX0JBU0VfRElSPWBncmVwICRSRSAkU0dNTF9DT05GIHwgc2VkICJzLyRSRS8vImAKKy0gIFJFPSdeWzpzcGFjZTpdKlNHTUxfQ0FUQUxPR1NfRElSWzpzcGFjZTpdKj1bOnNwYWNlOl0qJworKyAgUkU9J15bWzpzcGFjZTpdXSpTR01MX0NBVEFMT0dTX0RJUltbOnNwYWNlOl1dKj1bWzpzcGFjZTpdXSonCisgICBTR01MX0NBVEFMT0dTX0RJUj1gZ3JlcCAkUkUgJFNHTUxfQ09ORiB8IHNlZCAicy8kUkUvLyJgCisgZmkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXV0aWxzL2RvY2Jvb2stdXRpbHMtbmF0aXZlXzAuNi4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2E1ZjNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2stdXRpbHMvZG9jYm9vay11dGlscy1uYXRpdmVfMC42LjE0LmJiCkBAIC0wLDAgKzEsNjMgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBmb3JtYXR0aW5nIGFuZCBtYW5pcHVsYXRpbmcgRG9jQm9vayBkb2N1bWVudHMiCitERVNDUklQVElPTiA9ICJBIGNvbGxlY3Rpb24gb2YgYWxsIHRoZSBmcmVlIHNvZnR3YXJlIHRvb2xzIHlvdSBuZWVkIHRvIFwKK3dvcmsgb24gYW5kIGZvcm1hdCBEb2NCb29rIGRvY3VtZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2RvY2Jvb2stdG9vbHMvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorREVQRU5EUyA9ICJvcGVuamFkZS1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgZG9jYm9vay1kc3NzbC1zdHlsZXNoZWV0cy1uYXRpdmUgZG9jYm9vay1zZ21sLWR0ZC0zLjEtbmF0aXZlIgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJcCisJZnRwOi8vc291cmNlcy5yZWRoYXQuY29tL3B1Yi9kb2Nib29rLXRvb2xzL25ldy10cmlhbHMvU09VUkNFUy9kb2Nib29rLXV0aWxzLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL3JlLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiNDFiMThjMzY1YzAxZjIyNWJjNDE3Y2Y2MzJkODFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4ZmFhYjhlZThhNzYwNWM5MzQyZmI3YjkwNmUwODE1ZTNjZWU4NGE0ODkxODJhZjM4ZThmN2MwZGYyZTkyZTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIEZpeCBoYXJkLWNvZGVkIHJlZmVyZW5jZXMgdG8gL2V0Yy9zZ21sCisJaWYgWyAhIC1lICR7U30vLnNlZF9kb25lIF07IHRoZW4KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9iaW4vancuaW4KKwkJc2VkIC1pIC1lICJzfC9ldGMvc2dtbHwke3N5c2NvbmZkaXJ9L3NnbWx8ZyIgJHtTfS9kb2MvbWFuL01ha2VmaWxlLmFtCisJCXNlZCAtaSAtZSAic3wvZXRjL3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U30vZG9jL0hUTUwvTWFrZWZpbGUuYW0KKworCQkjIFBvaW50IGp3IHRvIHRoZSBuYXRpdmUgc3lzcm9vdCBjYXRhbG9nCisJCXNlZCAtaSAtZSAnc3xeU0dNTF9FWFRSQV9DQVRBTE9HUz0iInxTR01MX0VYVFJBX0NBVEFMT0dTPSI6JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cifGcnICR7U30vYmluL2p3LmluCisJCXRvdWNoICR7U30vLnNlZF9kb25lCisJZmkKK30KK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIke1N9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCSMgSW5zdGFsbCB0aGUgYmluYXJpZXMgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgY29tbW9ubHkgdXNlZCBuYW1lcyBmb3IgdGhlbS4KKwlmb3IgZG9jdHlwZSBpbiBodG1sIHBzIGR2aSBtYW4gcGRmIHJ0ZiB0ZXggdGV4aSB0eHQKKwlkbworCQlpbnN0YWxsIC1tIDA3NTUgJHtTfS9iaW4vZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9LworCQlsbiAtc2YgZG9jYm9vazJ4LSRkb2N0eXBlICR7RH0ke2JpbmRpcn0vZGIyJGRvY3R5cGUKKwkJbG4gLXNmIGRvY2Jvb2syJGRvY3R5cGUgJHtEfSR7YmluZGlyfS9kYjIkZG9jdHlwZQorCQlsbiAtc2YgZG9jYm9vazIkZG9jdHlwZSAke0R9JHtiaW5kaXJ9L2RvY2Jvb2stdG8tJGRvY3R5cGUKKwlkb25lCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9iaW4vancgJHtEfSR7YmluZGlyfS8KKwlmb3IgaSBpbiBiYWNrZW5kcy9kdmkgYmFja2VuZHMvaHRtbCBcCisJCWJhY2tlbmRzL3BkZiBiYWNrZW5kcy9wcyBiYWNrZW5kcy9ydGYgYmFja2VuZHMvdGV4IFwKKwkJYmFja2VuZHMvdHh0IFwKKwkJaGVscGVycy9kb2Nib29rMm1hbi1zcGVjLnBsIGhlbHBlcnMvZG9jYm9vazJ0ZXhpLXNwZWMucGwgXAorCQlkb2Nib29rLXV0aWxzLmRzbAorCWRvCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9L2BkaXJuYW1lICRpYAorCQlpbnN0YWxsICR7U30vJGkgJHtEfSR7ZGF0YWRpcn0vc2dtbC9kb2Nib29rL3V0aWxzLSR7UFZ9LyRpCisJZG9uZQorCWZvciBpIGluIGJhY2tlbmRzL21hbiBiYWNrZW5kcy90ZXhpIGZyb250ZW5kcy9kb2Nib29rCisJZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vYGRpcm5hbWUgJGlgCisJCWluc3RhbGwgJHtCfS8kaSAke0R9JHtkYXRhZGlyfS9zZ21sL2RvY2Jvb2svdXRpbHMtJHtQVn0vJGkKKwlkb25lCisKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L0xJQ0VOU0UtT0FTSVMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYTdmNWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9MSUNFTlNFLU9BU0lTCkBAIC0wLDAgKzEsMTYgQEAKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY0Jvb2sgWE1MIERURAorYW5kIGl0cyBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlCitpcyBoZXJlYnkgZ3JhbnRlZCBpbiBwZXJwZXR1aXR5LCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXBwZWFyIGluIGFsbCBjb3BpZXMuICBUaGUgY29weXJpZ2h0Citob2xkZXJzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBEVEQgZm9yCithbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZAord2FycmFudHkuCisKK0lmIHlvdSBtb2RpZnkgdGhlIERvY0Jvb2sgRFREIGluIGFueSB3YXksIGV4Y2VwdCBmb3IgZGVjbGFyaW5nIGFuZAorcmVmZXJlbmNpbmcgYWRkaXRpb25hbCBzZXRzIG9mIGdlbmVyYWwgZW50aXRpZXMgYW5kIGRlY2xhcmluZworYWRkaXRpb25hbCBub3RhdGlvbnMsIGxhYmVsIHlvdXIgRFREIGFzIGEgdmFyaWFudCBvZiBEb2NCb29rLiAgU2VlCit0aGUgbWFpbnRlbmFuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yIAorY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC11cGRhdGUtY2F0YWxvZy54bWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLXVwZGF0ZS1jYXRhbG9nLnhtbC5wYXRjaApAQCAtMCwwICsxLDUxNSBAQAorZG9jYm9vay14bWw6IHVwZGF0ZSBjYXRhbG9nLnhtbAorCitSZWZlciBVYnVudHUgMTMuMDQgdG8gdXBkYXRlIGNhdGFsb2cueG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZG9jYm9vay00LjAvY2F0YWxvZy54bWwgICB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbCB8IDY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBkb2Nib29rLTQuMi9jYXRhbG9nLnhtbCAgIHwgNjkgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjMvY2F0YWxvZy54bWwgICB8IDcyICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjQvY2F0YWxvZy54bWwgICB8IDYzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZG9jYm9vay00LjUvY2F0YWxvZy54bWwgICB8IDYzICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgMjQwIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Nib29rLTQuMC9jYXRhbG9nLnhtbAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sCisKK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMC9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4wL2NhdGFsb2cueG1sCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvZG9jYm9vay00LjAvY2F0YWxvZy54bWwKK0BAIC0wLDAgKzEsNzIgQEAKKys8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iIAorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisrPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIFhNTCBDYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRmlsZSBjYXRhbG9nLnhtbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8IS0tIFBsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgorKyAgICAgY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCisrICAgICBpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvLgorKyAgLS0+CisrCisrPCEtLSBUaGlzIGlzIHRoZSBjYXRhbG9nIGRhdGEgZmlsZSBmb3IgRG9jQm9vayBWNC4wLiBJdCBpcyBwcm92aWRlZCBhcworKyAgICAgYSBjb252ZW5pZW5jZSBpbiBidWlsZGluZyB5b3VyIG93biBjYXRhbG9nIGZpbGVzLiBZb3UgbmVlZCBub3QgdXNlCisrICAgICB0aGUgZmlsZW5hbWVzIGxpc3RlZCBoZXJlLCBhbmQgbmVlZCBub3QgdXNlIHRoZSBmaWxlbmFtZSBtZXRob2Qgb2YKKysgICAgIGlkZW50aWZ5aW5nIHN0b3JhZ2Ugb2JqZWN0cyBhdCBhbGwuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEb2NCb29rIERURC4KKysgICAgIFNlZSBYTUwgQ2F0YWxvZ3MgYXQgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS8gZm9yCisrICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBzdXBwbHlpbmcgYW5kIHVzaW5nIGNhdGFsb2cgZGF0YS4KKysgIC0tPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIERvY0Jvb2sgZHJpdmVyIGZpbGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIE90aGVyIHdheXMgdG8gcmVmZXIgdG8gRG9jQm9vayBYTUwgdjQuMC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4wL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKzwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJub3RueC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIENoYXJhY3RlciBFbnRpdGllcyBWNC4wLy9FTiIKKysgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9Ob3JtYW4gV2Fsc2gvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRicG9vbHgubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiaGllcngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCb29rIFhNTCBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMC8vRU4iCisrICAgICAgICB1cmk9ImRiZ2VuZW50Lm1vZCIvPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbiBXYWxzaC8vRFREIENBTFMgVGFibGUgTW9kZWwgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKysKKys8IS0tIFVOT0ZGSUNJQUwgY29udmVyc2lvbiBvZiB0aGUgZXhjaGFuZ2UgdGFibGUgbW9kZWwgdG8gWE1MLCBiYXNlZCBvbiB0aGUgT0FTSVMgRXhjaGFuZ2UgLS0+CisrPCEtLSAgICBUYWJsZSBNb2RlbCBQVUJMSUMgIi0vL1NHTUwgT3Blbi8vRFREIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTYwNDMwLy9FTiIgICAgICAgICAgIC0tPgorKzxwdWJsaWMgcHVibGljSWQ9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAgWE1MIFY0LjAvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4KKysKKys8IS0tIHRoZSBmb2xsb3dpbmcgRlBJIGlzIGRlY2xhcmVkIGZvciB0aGUgRFREIGluc2lkZSB0aGUgRFRELCBidXQgd2UnbGwgLS0+CisrPCEtLSB1c2UgdGhlIHZlcnNpb24gZnJvbSB0aGUgbGF0ZXN0IERvY0Jvb2sKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iCisrICAgICAgICB1cmk9InNvZXh0Ymx4LmR0ZCIvPiAtLT4KKysKKys8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwvY2F0YWxvZz4KK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMS4yL2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjEuMi9jYXRhbG9nLnhtbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvY2Jvb2stNC4xLjIvY2F0YWxvZy54bWwKK0BAIC0wLDAgKzEsNjYgQEAKKys8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iIAorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisrPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorKworKzwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKys8IS0tIFhNTCBDYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjEuMi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBGaWxlIGNhdGFsb2cueG1sIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwhLS0gUGxlYXNlIGRpcmVjdCBhbGwgcXVlc3Rpb25zLCBidWcgcmVwb3J0cywgb3Igc3VnZ2VzdGlvbnMgZm9yCisrICAgICBjaGFuZ2VzIHRvIHRoZSBkb2Nib29rQGxpc3RzLm9hc2lzLW9wZW4ub3JnIG1haWxpbmcgbGlzdC4gRm9yIG1vcmUKKysgICAgIGluZm9ybWF0aW9uLCBzZWUgaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy8uCisrICAtLT4KKysKKys8IS0tIFRoaXMgaXMgdGhlIGNhdGFsb2cgZGF0YSBmaWxlIGZvciBEb2NCb29rIFY0LjEuMi4gSXQgaXMgcHJvdmlkZWQgYXMKKysgICAgIGEgY29udmVuaWVuY2UgaW4gYnVpbGRpbmcgeW91ciBvd24gY2F0YWxvZyBmaWxlcy4gWW91IG5lZWQgbm90IHVzZQorKyAgICAgdGhlIGZpbGVuYW1lcyBsaXN0ZWQgaGVyZSwgYW5kIG5lZWQgbm90IHVzZSB0aGUgZmlsZW5hbWUgbWV0aG9kIG9mCisrICAgICBpZGVudGlmeWluZyBzdG9yYWdlIG9iamVjdHMgYXQgYWxsLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRG9jQm9vayBEVEQuCisrICAgICBTZWUgWE1MIENhdGFsb2dzIGF0IGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvIGZvcgorKyAgICAgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gc3VwcGx5aW5nIGFuZCB1c2luZyBjYXRhbG9nIGRhdGEuCisrICAtLT4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIGRyaXZlciBmaWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xLjIvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKys8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImNhbHN0Ymx4LmR0ZCIvPgorKworKyAgPCEtLSBhbHJlYWR5IGluY2x1ZGVkIGluIGRvY2Jvb2sgNC4yCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUvL0VOIgorKyAgICAgICAgdXJpPSJzb2V4dGJseC5kdGQiLz4gLS0+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJwb29seC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJoaWVyeC5tb2QiLz4KKysKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBBZGRpdGlvbmFsIEdlbmVyYWwgRW50aXRpZXMgVjQuMS4yLy9FTiIKKysgICAgICAgIHVyaT0iZGJnZW5lbnQubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRibm90bngubW9kIi8+CisrCisrPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iCisrICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisrCisrCisrPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC4xLjIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisrPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorKworKzwvY2F0YWxvZz4KK2RpZmYgLS1naXQgYS9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbCBiL2RvY2Jvb2stNC4yL2NhdGFsb2cueG1sCistLS0gYS9kb2Nib29rLTQuMi9jYXRhbG9nLnhtbAorKysrIGIvZG9jYm9vay00LjIvY2F0YWxvZy54bWwKK0BAIC0xLDQgKzEsNyBAQAorIDw/eG1sIHZlcnNpb249JzEuMCc/PgorKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKKysgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorKworIDxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtMjUsNiArMjgsMTIgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIgorICAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKyAKKys8c3lzdGVtIHN5c3RlbUlkPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMi9kb2Nib29reC5kdGQiCisrICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorKworKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gRG9jQm9vayBtb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKK0BAIC00OSw2NiArNTgsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWRpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbnVtLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFB1Ymxpc2hpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXRlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1sYXQxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEJpbmFyeSBPcGVyYXRvcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc24uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYm94LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIFJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuMiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjMvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuMy9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjMvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC4zL2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgCisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorQEAgLTI1LDEyICsyOCwyMSBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImRvY2Jvb2t4LmR0ZCIvPgorIAorKzxzeXN0ZW0gc3lzdGVtSWQ9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4zL2RvY2Jvb2t4LmR0ZCIKKysgICAgICAgIHVyaT0iZG9jYm9va3guZHRkIi8+CisrCisrPHN5c3RlbSBzeXN0ZW1JZD0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjMvZG9jYm9va3guZHRkIgorKyAgICAgICAgdXJpPSJkb2Nib29reC5kdGQiLz4KKysKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSBEb2NCb29rIG1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjMvL0VOIgorICAgICAgICAgdXJpPSJjYWxzdGJseC5kdGQiLz4KKyAKKys8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuMy8vRU4iCisrICAgICAgICB1cmk9Imh0bWx0Ymx4Lm1vZCIvPgorKworIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIKKyAgICAgICAgIHVyaT0ic29leHRibHguZHRkIi8+CisgCitAQCAtNDksNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMy8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1kaWEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTnVtZXJpYyBhbmQgU3BlY2lhbCBHcmFwaGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLW51bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLXB1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby10ZWNoLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWxhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncmsxLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE1vbm90b25pa28gR3JlZWsvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWdyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1ncms0LmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQXJyb3cgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWFtc2MuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzby1hbXNyLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWJveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvLWN5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc28tY3lyMi5lbnQiLz4KKy0KKyA8IS0tIEVuZCBvZiBjYXRhbG9nIGRhdGEgZm9yIERvY0Jvb2sgWE1MIFY0LjMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIAorZGlmZiAtLWdpdCBhL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sIGIvZG9jYm9vay00LjQvY2F0YWxvZy54bWwKKy0tLSBhL2RvY2Jvb2stNC40L2NhdGFsb2cueG1sCisrKysgYi9kb2Nib29rLTQuNC9jYXRhbG9nLnhtbAorQEAgLTEsNCArMSw3IEBACisgPD94bWwgdmVyc2lvbj0nMS4wJz8+CisrPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorKyAgICAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+CisrCisgPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciIHByZWZlcj0icHVibGljIj4KKyAKKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CitAQCAtNTgsNjYgKzYxLDYgQEAKKyA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNC8vRU4iCisgICAgICAgICB1cmk9ImRiY2VudHgubW9kIi8+CisgCistPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLTwhLS0gSVNPIGVudGl0eSBzZXRzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBEaWFjcml0aWNhbCBNYXJrcy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2RpYS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29udW0uZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3B1Yi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHZW5lcmFsIFRlY2huaWNhbC8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb3RlY2guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMS8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTGF0aW4gMi8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2xhdDIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgTGV0dGVycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazIuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazMuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWx0ZXJuYXRpdmUgR3JlZWsgU3ltYm9scy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2dyazQuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogQmluYXJ5IE9wZXJhdG9ycy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBEZWxpbWl0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE5lZ2F0ZWQgUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zbi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IE9yZGluYXJ5Ly9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zby5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc3IuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQm94IGFuZCBMaW5lIERyYXdpbmcvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29ib3guZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjEuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29jeXIyLmVudCIvPgorLQorIDwhLS0gRW5kIG9mIGNhdGFsb2cgZGF0YSBmb3IgRG9jQm9vayBYTUwgVjQuNCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyA8IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CisgCitkaWZmIC0tZ2l0IGEvZG9jYm9vay00LjUvY2F0YWxvZy54bWwgYi9kb2Nib29rLTQuNS9jYXRhbG9nLnhtbAorLS0tIGEvZG9jYm9vay00LjUvY2F0YWxvZy54bWwKKysrKyBiL2RvY2Jvb2stNC41L2NhdGFsb2cueG1sCitAQCAtMSw0ICsxLDcgQEAKKyA8P3htbCB2ZXJzaW9uPScxLjAnPz4KKys8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCisrICAgICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKysKKyA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIgcHJlZmVyPSJwdWJsaWMiPgorIAorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KK0BAIC01OCw2NiArNjEsNiBAQAorIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC41Ly9FTiIKKyAgICAgICAgIHVyaT0iZGJjZW50eC5tb2QiLz4KKyAKKy08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+CistPCEtLSBJU08gZW50aXR5IHNldHMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZGlhLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIE51bWVyaWMgYW5kIFNwZWNpYWwgR3JhcGhpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb251bS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBQdWJsaXNoaW5nLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvcHViLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvdGVjaC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAxLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0MS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBMYXRpbiAyLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvbGF0Mi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBMZXR0ZXJzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBNb25vdG9uaWtvIEdyZWVrLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrMy5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvZ3JrNC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IEFycm93IFJlbGF0aW9ucy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2Ftc2EuZW50Ii8+CistCistPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zYi5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBZGRlZCBNYXRoIFN5bWJvbHM6IERlbGltaXRlcnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNjLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogTmVnYXRlZCBSZWxhdGlvbnMvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNuLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogT3JkaW5hcnkvL0VOLy9YTUwiCistICAgICAgICB1cmk9ImVudC9pc29hbXNvLmVudCIvPgorLQorLTxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogUmVsYXRpb25zLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvYW1zci5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBCb3ggYW5kIExpbmUgRHJhd2luZy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2JveC5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTi8vWE1MIgorLSAgICAgICAgdXJpPSJlbnQvaXNvY3lyMS5lbnQiLz4KKy0KKy08cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOb24tUnVzc2lhbiBDeXJpbGxpYy8vRU4vL1hNTCIKKy0gICAgICAgIHVyaT0iZW50L2lzb2N5cjIuZW50Ii8+CistCisgPCEtLSBFbmQgb2YgY2F0YWxvZyBkYXRhIGZvciBEb2NCb29rIFhNTCBWNC41IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPgorIDwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KKyAKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNC9kb2Nib29rLXhtbC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxZjU1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0L2RvY2Jvb2steG1sLnhtbApAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgTm90YXRpb25zIFY0LjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEhUTUwgVGFibGVzIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBJbmZvcm1hdGlvbiBQb29sIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBIVE1MIFRhYmxlcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIE5vdGF0aW9ucyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIEluZm9ybWF0aW9uIFBvb2wgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBDQUxTIFRhYmxlIE1vZGVsIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbiBXYWxzaC8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCb29rIFhNTCBEb2N1bWVudCBIaWVyYXJjaHkgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4xLjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMy8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAgWE1MIFY0LjAvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjQvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNC9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjEvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCayBYTUwgVjQuMC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4wL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMy9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4zL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuNS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0RURCBEb2NCb29rIFhNTCBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSFRNTCBUYWJsZXMgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC40L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVN5c3RlbSBzeXN0ZW1JZFN0YXJ0U3RyaW5nPSJodHRwOi8vZG9jYm9vay5vcmcveG1sLzQuNS9kb2Nib29reC5kdGQiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBOb3RhdGlvbnMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgRG9jdW1lbnQgSGllcmFyY2h5IFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC41Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBEb2N1bWVudCBIaWVyYXJjaHkgVjQuNS8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC41L2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9Ob3JtYW4gV2Fsc2gvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4wLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMi8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvNC4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgQ0FMUyBUYWJsZSBNb2RlbCBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4wL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjAvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvNC4yL2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC4zLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjMvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgWE1MIEV4Y2hhbmdlIFRhYmxlIE1vZGVsIDE5OTkwMzE1Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjUvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIENoYXJhY3RlciBFbnRpdGllcyBWNC40Ly9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC40L2RvY2Jvb2t4LmR0ZCIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjMvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2sub3JnL3htbC80LjMvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMy9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgSW5mb3JtYXRpb24gUG9vbCBWNC4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjIvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBDQUxTIFRhYmxlIE1vZGVsIFY0LjUvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuNS9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTC8vRU4iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3NjaGVtYS9kdGQvY2F0YWxvZy54bWwiLz4KKyAgPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIERvY3VtZW50IEhpZXJhcmNoeSBWNC4xLjIvL0VOIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLzQuMS4yL2NhdGFsb2cueG1sIi8+CisgIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBDaGFyYWN0ZXIgRW50aXRpZXMgVjQuMS4yLy9FTiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2svc2NoZW1hL2R0ZC80LjEuMi9jYXRhbG9nLnhtbCIvPgorICA8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEvZG9jYm9va3guZHRkIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS94bWwvZG9jYm9vay9zY2hlbWEvZHRkL2NhdGFsb2cueG1sIi8+Cis8L2NhdGFsb2c+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14bWwtZHRkNF80LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxYmMzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhtbC1kdGQ0XzQuNS5iYgpAQCAtMCwwICsxLDY0IEBACitTVU1NQVJZID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBYTUwgZGF0YSBmaWxlcyIKK0RFU0NSSVBUSU9OID0gIkRvY3VtZW50IHR5cGUgZGVmaW5pdGlvbnMgZm9yIHZlcmlmaWNhdGlvbiBvZiBYTUwgZGF0YSBcCitmaWxlcyBhZ2FpbnN0IHRoZSBEb2NCb29rIHJ1bGUgc2V0LCBpdCBzaGlwcyB3aXRoIHRoZSBsYXRlc3QgRG9jQm9vayA0LjUgXAorWE1MIERURCwgYXMgd2VsbCBhcyBhIHNlbGVjdGVkIHNldCBvZiBsZWdhY3kgRFREcyBmb3IgdXNlIHdpdGggb2xkZXIgXAorZG9jdW1lbnRzLCBpbmNsdWRpbmcgNC4wLCA0LjEuMiwgNC4yLCA0LjMgYW5kIDQuNCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZG9jYm9vay5vcmcveG1sLyIKKworTElDRU5TRSA9ICJPQVNJUyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vTElDRU5TRS1PQVNJUzttZDU9YzYwODk4NWRkNWY3ZjIxNWU2NjllNzYzOWEwYjFkMmUiCisKKyMgTm90ZTogdGhlIHVwc3RyZWFtIHNvdXJjZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGEgbGljZW5zZSBmaWxlLgorIyBMSUNFTlNFLU9BU0lTIGlzIGluY2x1ZGVkIGFzIGEgInBhdGNoIiB0byB3b3JrYXJvdW5kIHRoaXMuIFdoZW4KKyMgdXBncmFkaW5nIHRoaXMgcmVjaXBlLCBwbGVhc2UgdmVyaWZ5IHdoZXRoZXIgdGhpcyBpcyBzdGlsbCBuZWVkZWQuCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2RvY2Jvb2steG1sL2RvY2Jvb2steG1sXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UtT0FTSVMgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14bWwtdXBkYXRlLWNhdGFsb2cueG1sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steG1sLnhtbCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODdiNGQ0NGUxNWNmZmIxZjQwNDhhZjIzZjk4MjA4ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMGY4ZWRjZjY5N2Y1MzE4ZTYzZGQ5OGM5YTkzMWYzZmVlMTY3YWYwODA1YmE0NDFkYjM3MmUwZjE3YjJhNDRmIgorCitTPSIke1dPUktESVJ9L2RvY2Jvb2steG1sLTQuNS5jMzE0MjQiCisKK2luaGVyaXQgYWxsYXJjaAorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NTVEFURVBPU1RJTlNURlVOQ1NfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZG9jYm9va194bWxfZHRkX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3htbF9kdGRfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19jb25maWdyZSAoKXsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisgICAgOgorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAjIFJlZmVyIGRlYmlhbiBodHRwczovL3BhY2thZ2VzLmRlYmlhbi5vcmcvc2lkL2FsbC9kb2Nib29rLXhtbC9maWxlbGlzdAorICAgIGZvciBEVERWRVJTSU9OIGluIDQuMCA0LjEuMiA0LjIgNC4zIDQuNCA0LjU7IGRvCisgICAgICAgIGluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke2RhdGFkaXJ9L3htbC9kb2Nib29rL3NjaGVtYS9kdGQvJHtEVERWRVJTSU9OfQorICAgICAgICBjcCAtdiAtUiBkb2Nib29rLSR7RFREVkVSU0lPTn0vKiAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay9zY2hlbWEvZHRkLyR7RFREVkVSU0lPTn0KKyAgICBkb25lCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKyAgICBpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhtbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbAorfQorCitkb2Nib29rX3htbF9kdGRfc3N0YXRlX3Bvc3RpbnN0ICgpIHsKKyAgICBpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisgICAgdGhlbgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorICAgICAgICAjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisgICAgICAgIHNlZCAtaSAtZSAic3xmaWxlOi8vLiovdXNyL3NoYXJlL3htbHxmaWxlOi8vJHtkYXRhZGlyfS94bWx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS94bWwvZG9jYm9vay14bWwueG1sCisgICAgZmkKK30KKworZG9jYm9va194bWxfZHRkX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKKyAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhtbC54bWwKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steG1sLnhtbCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2RvY2Jvb2steG1sL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1OWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uby1iYXNoaXNtLWluLWRvY2Jvb2steHNsLXVwLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzOiBubyBiYXNoaXNtIGluIGRvY2Jvb2steHNsLXVwZGF0ZQorCitUaGUgY2hlY2tiYXNoaXNtcyBzaG93cyB0aGVyZSBpcyBubyBiYXNoaXNtLCBzbyB1c2UgL2Jpbi9zaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2Jpbi9kb2Nib29rLXhzbC11cGRhdGUgYi90b29scy9iaW4vZG9jYm9vay14c2wtdXBkYXRlCitpbmRleCBhYmEwMDE2Li5jYzczYWEyIDEwMDc1NQorLS0tIGEvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQorKysrIGIvdG9vbHMvYmluL2RvY2Jvb2steHNsLXVwZGF0ZQorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAjIHZpbTogbnVtYmVyCisgCisgIyBkb2Nib29rLXhzbC11cGRhdGUgLSBVcGRhdGUgZW52aXJvbm1lbnQgdG8gbGF0ZXN0IGRvY2Jvb2steHNsIHNuYXBzaG90CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0cy9kb2Nib29rLXhzbC54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTU3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHMvZG9jYm9vay14c2wueG1sCkBAIC0wLDAgKzEsNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KKzxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KKzxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUveG1sL2RvY2Jvb2sveHNsLXN0eWxlc2hlZXRzLTEuNzguMS9jYXRhbG9nLnhtbCIvPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3htbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cy0xLjc4LjEvY2F0YWxvZy54bWwiLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb2Nib29rLXhtbC9kb2Nib29rLXhzbC1zdHlsZXNoZWV0c18xLjc4LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMWJkYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9jYm9vay14bWwvZG9jYm9vay14c2wtc3R5bGVzaGVldHNfMS43OC4xLmJiCkBAIC0wLDAgKzEsNjkgQEAKK1NVTU1BUlkgPSAiWFNMIHN0eWxlc2hlZXRzIGZvciBwcm9jZXNzaW5nIERvY0Jvb2sgWE1MIHRvIHZhcmlvdXMgb3V0cHV0IGZvcm1hdHMiCitIT01FUEFHRSA9ICJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQiCitMSUNFTlNFID0gIlhTTCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2ZWVlZWQ0M2Q0OThjMjJhODM1MzgyNTMzMzU2NDYyIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9kb2Nib29rL2RvY2Jvb2steHNsLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZG9jYm9vay14c2wueG1sIFwKKyAgICAgICAgICAgZmlsZTovL2RvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5vLWJhc2hpc20taW4tZG9jYm9vay14c2wtdXAucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmRkMGY4OTEzMWNjMzViZjRmMmVkMTA1YTFjMTc3NzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk4ZjcyOTZhYjVjOGNjZDJlMGJjMDc2MzQ5NzZhMzdmNTA4NDdkZjJkOGE1OWJkYjFlMTU3NjY0NzAwYjQ2NyIKKworUyA9ICIke1dPUktESVJ9L2RvY2Jvb2steHNsLSR7UFZ9IgorCitpbmhlcml0IGFsbGFyY2gKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTU1RBVEVQT1NUSU5TVEZVTkNTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGRvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCIKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBkb2Nib29rX3hzbF9zdHlsZXNoZWV0c19zeXNyb290X3ByZXByb2Nlc3MiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKwk6Cit9CisKK2RvX2NvbXBpbGUgKCl7CisJOgorfQorCitkb19pbnN0YWxsICgpIHsKKwkjIFJlZmVyIHRvIGh0dHA6Ly93d3cubGludXhmcm9tc2NyYXRjaC5vcmcvYmxmcy92aWV3L3N0YWJsZS9wc3QvZG9jYm9vay14c2wuaHRtbAorCSMgZm9yIGRldGFpbHMuCisJaW5zdGFsbCAtdiAtbTc1NSAtZCAke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCisKKwljcCAtdiAtUiBWRVJTSU9OIGNvbW1vbiBlY2xpcHNlIGVwdWIgZXh0ZW5zaW9ucyBmbyBoaWdobGlnaHRpbmcgaHRtbCBcCisJCWh0bWxoZWxwIGltYWdlcyBqYXZhaGVscCBsaWIgbWFucGFnZXMgcGFyYW1zIHByb2ZpbGluZyBcCisJCXJvdW5kdHJpcCBzbGlkZXMgdGVtcGxhdGUgdGVzdHMgdG9vbHMgd2ViaGVscCB3ZWJzaXRlIFwKKwkJeGh0bWwgeGh0bWwtMV8xIGNhdGFsb2cueG1sIFwKKwkke0R9JHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xCisKKwlsbiAtcyBWRVJTSU9OICR7RH0vJHtkYXRhZGlyfS94bWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMtMS43OC4xL1ZFUlNJT04ueHNsCisKKwlpbnN0YWxsIC12IC1tNjQ0IC1EIFJFQURNRSBcCisJCSR7RH0ke2RhdGFkaXJ9L2RvYy9kb2Nib29rLXhzbC0xLjc4LjEvUkVBRE1FLnR4dAorCWluc3RhbGwgLXYgLW02NDQgICAgUkVMRUFTRS1OT1RFUyogTkVXUyogXAorCQkke0R9JHtkYXRhZGlyfS9kb2MvZG9jYm9vay14c2wtMS43OC4xCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3htbC8KKwlpbnN0YWxsIC1tIDc1NSAgJHtXT1JLRElSfS9kb2Nib29rLXhzbC54bWwgJHtEfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorCit9CisKK2RvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3NzdGF0ZV9wb3N0aW5zdCAoKSB7CisgICAgaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3QiIC1vICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIgXQorICAgIHRoZW4KKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2F0YWxvZyBmaWxlIHNnbWwtZG9jYm9vay5jYXQgaXMgcHJvcGVybHkKKyAgICAgICAgIyB1cGRhdGVkIHdoZW4gdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGZyb20gc3N0YXRlIGNhY2hlLgorICAgICAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy4qL3Vzci9zaGFyZS94bWx8ZmlsZTovLyR7ZGF0YWRpcn0veG1sfGciICR7U1lTUk9PVF9ERVNURElSfSR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbAorICAgIGZpCit9CisKK2RvY2Jvb2tfeHNsX3N0eWxlc2hlZXRzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgIyBVcGRhdGUgdGhlIGhhcmRjb2RlIGRpciBpbiBkb2Nib29rLXhtbC54bWwKKyAgICBzZWQgLWkgLWUgInN8ZmlsZTovLy91c3Ivc2hhcmUveG1sfGZpbGU6Ly8ke2RhdGFkaXJ9L3htbHxnIiAke1NZU1JPT1RfREVTVERJUn0ke3N5c2NvbmZkaXJ9L3htbC9kb2Nib29rLXhzbC54bWwKK30KKworUkRFUEVORFNfJHtQTn0gKz0gInBlcmwiCitGSUxFU18ke1BOfSA9ICIke2RhdGFkaXJ9L3htbC8qICR7c3lzY29uZmRpcn0veG1sL2RvY2Jvb2steHNsLnhtbCIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2RhdGFkaXJ9L2RvYy8qIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmNWI3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtZm9yLWdldHRpbmctbG9mZl90LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSBiN2M0MmM2YTk4MjliZWE5MTFiMjIyMDFlZGQ3ZGYyYTliZWMxYTE0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6NTI6MzQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSBmY250bC5oIGZvciBnZXR0aW5nIGxvZmZfdCBkZWZpbml0aW9uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZG9zZnNjay9kb3Nmc2NrLmggfCAyICsrCisgZG9zZnNjay9sZm4uYyAgICAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZG9zZnNjay9kb3Nmc2NrLmggYi9kb3Nmc2NrL2Rvc2ZzY2suaAoraW5kZXggZDkzMTRiMS4uMjA3NmQ1ZiAxMDA2NDQKKy0tLSBhL2Rvc2ZzY2svZG9zZnNjay5oCisrKysgYi9kb3Nmc2NrL2Rvc2ZzY2suaAorQEAgLTUwLDYgKzUwLDggQEAKKyAjZGVmaW5lIENUX0xFX0wodikgKHYpCisgI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLworIAorKyNpbmNsdWRlIDxmY250bC5oPgorKworICNkZWZpbmUgVkZBVF9MTl9BVFRSIChBVFRSX1JPIHwgQVRUUl9ISURERU4gfCBBVFRSX1NZUyB8IEFUVFJfVk9MVU1FKQorIAorIC8qICsrcm9tYW46IFVzZSBvd24gZGVmaW5pdGlvbiBvZiBib290IHNlY3RvciBzdHJ1Y3R1cmUgLS0gdGhlIGtlcm5lbCBoZWFkZXJzJworZGlmZiAtLWdpdCBhL2Rvc2ZzY2svbGZuLmMgYi9kb3Nmc2NrL2xmbi5jCitpbmRleCA5YjJjZmMzLi5iYjA0ZmRhIDEwMDY0NAorLS0tIGEvZG9zZnNjay9sZm4uYworKysrIGIvZG9zZnNjay9sZm4uYworQEAgLTcsNiArNyw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKKyAjaW5jbHVkZSAiaW8uaCIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9hbGlnbm1lbnRfaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvYWxpZ25tZW50X2hhY2sucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVGhlIHByb2JsZW0gaXMgdGhhdCB1bnNpZ25lZCBjaGFyWzJdIGlzCitndXJhbnRlZWQgdG8gYmUgOEJpdCBhbGlnbmVkIG9uIGFybQorYnV0IHVuc2lnbmVkIHNob3J0IGlzL25lZWRzIHRvIGJlIDE2Yml0IGFsaWduZWQKK3RoZSB1bmlvbiB7IHVuc2lnbmVkIHNob3J0OyB1bnNpZ25lZCBjaGFyWzJdIH0gdHJpY2sgCitkaWRuJ3Qgd29yayBzbyBubyB3ZSB1c2UgdGhlIGFscGhhIGhhY2suCisKK21lbWNweSBpbnRvIGFuIDE2Yml0IGFsaWduZWQKKworICAgIC16ZWNrZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy9kb3Nmc2NrL2Jvb3QuYy5vcmlnCTIwMDMtMDUtMTUgMTk6MzI6MjMuMDAwMDAwMDAwICswMjAwCisrKysgZG9zZnN0b29scy9kb3Nmc2NrL2Jvb3QuYwkyMDAzLTA2LTEzIDE3OjQ0OjI1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM2LDE3ICszNiwxNSBAQAorICAgICB7IDB4ZmYsICI1LjI1XCIgMzIwayBmbG9wcHkgMnMvNDB0ci84c2VjIiB9LAorIH07CisgCistI2lmIGRlZmluZWQgX19hbHBoYSB8fCBkZWZpbmVkIF9faWE2NF9fIHx8IGRlZmluZWQgX19zMzkweF9fIHx8IGRlZmluZWQgX194ODZfNjRfXyB8fCBkZWZpbmVkIF9fcHBjNjRfXworKworIC8qIFVuYWxpZ25lZCBmaWVsZHMgbXVzdCBmaXJzdCBiZSBjb3BpZWQgYnl0ZS13aXNlICovCisgI2RlZmluZSBHRVRfVU5BTElHTkVEX1coZikJCQlcCisgICAgICh7CQkJCQkJXAorIAl1bnNpZ25lZCBzaG9ydCBfX3Y7CQkJXAorIAltZW1jcHkoICZfX3YsICZmLCBzaXplb2YoX192KSApOwlcCistCUNGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmZiApOwlcCisrCUNGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmX192ICk7CVwKKyAgICAgfSkKKy0jZWxzZQorLSNkZWZpbmUgR0VUX1VOQUxJR05FRF9XKGYpIENGX0xFX1coICoodW5zaWduZWQgc2hvcnQgKikmZiApCistI2VuZGlmCisrCisgCisgCisgc3RhdGljIGNoYXIgKmdldF9tZWRpYV9kZXNjciggdW5zaWduZWQgY2hhciBtZWRpYSApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMtbXNkb3NfZnMtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhYmQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy1tc2Rvc19mcy10eXBlcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitFbnN1cmUgdGhlIF9fczggdHlwZSBpcyBwcm9wZXJseSBkZWZpbmVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZG9zZnNjay5oLm9yZwkyMDA2LTAyLTIxIDA4OjM2OjE0LjAwMDAwMDAwMCAtMDcwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Rvc2ZzY2suaAkyMDA2LTAyLTIxIDA4OjQwOjEyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTIyLDYgKzIyLDE0IEBACisgICAgICAgICN1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX3M4CisrI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKyNlbmRpZgorKworKyNpZm5kZWYgX19BU01fU1RVQl9CWVRFT1JERVJfSF9fCisrI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKysjZW5kaWYKKysKKyAjaW5jbHVkZSA8bGludXgvbXNkb3NfZnMuaD4KKyAKKyAvKiAyLjEga2VybmVscyB1c2UgbGUxNl90b19jcHUoKSB0eXBlIGZ1bmN0aW9ucyBmb3IgQ0ZfTEVfVyAmIENvLiwgYnV0IGRvbid0CistLS0gZG9zZnN0b29scy0yLjEwL2Rvc2ZzY2svZmlsZS5jLm9yZwkyMDA2LTAyLTIxIDA4OjM3OjM2LjAwMDAwMDAwMCAtMDcwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2ZpbGUuYwkyMDA2LTAyLTIxIDA4OjM3OjQ3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTIzLDYgKzIzLDEwIEBACisgICAgICAgICN1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCisrI2lmbmRlZiBfX3M4CisrI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorIAorICNpbmNsdWRlICJjb21tb24uaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvZml4X3BvcHVsYXRlZF9kb3Nmc19jcmVhdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdmNzMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9maXhfcG9wdWxhdGVkX2Rvc2ZzX2NyZWF0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDg5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworVGhpcyBwYXRjaCBmaXhlcyBwb3B1bGF0ZWQgZG9zZnMgaW1hZ2UgY3JlYXRpb24gd2l0aCBkaXJlY3RvcnkgCitzdHJ1Y3R1cmVzLiBFYXJsaWVyIGl0IHdhcyBjYXVzaW5nIHNlZ2ZhdWx0OyBhbmQgb25seSBpbWFnZSAKK3BvcHVsYXRpb24gd2l0aCBubyBzdWJkaXJlY3RvcmllcyB3YXMgd29ya2luZy4KKworSXNzdWVzIGZpeGVkOgorMS4gKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSBjaGVjayB3YXMgb25seSBuZWVkZWQgZm9yIHJvb3QgCisgICBkaXJlY3RvcnkgZW50cmllcy4gQW5kIHRoaXMgY2hlY2sgaXMgd3JvbmcgZm9yIG5vbi1yb290IAorICAgZGlyZWN0b3JpZXMuCisyLiBGb3IgZWFjaCBkaXIgZW50cnkgMiBkaXItPnRhYmxlIGVudHJpZXMgd2VyZSBuZWVkZWQsIG9uZSBmb3IgCisgICB0aGUgZmlsZS9kaXIgYW5kIDJuZCBmb3IgbG9uZyBmaWxlIG5hbWUgc3VwcG9ydC4gRWFybGllciBsb25nCisgICBuYW1lIHN1cHBvcnQgd2FzIGFkZGVkIGZvciBmaWxlbmFtZXMgYnV0IHRoZSAybmQgZW50cnkgCisgICBhbGxvY2F0aW9uLCBpbml0aWFsaXphdGlvbiAmIGNvdW50aW5nIHdhcyBtaXNzZWQuCiszLiBUaGUgbWVtb3J5IGNsZWFyaW5nIHdhcyBtaXNzZWQgYXQgdGhlIGNvZGUgcGF0aCBhZnRlciBkaXItPnRhYmxlIAorICAgbWVtcm95IGFsbG9jYXRpb24uCis0LiBBZGQgZW50cmllcyBmb3IgLiAmIC4uIGRpcmVjdG9yaWVzIGluIGFsbCBub24tcm9vdCBkaXJlY3Rvcmllcy4KKzUuIFRoZSAuIGRpcmVjdG9yeSBwb2ludHMgdG8gdGhlIGNvcnJlY3QgZW50cnkgaW4gZmF0IG5vdy4KKzYuIEFsbCBkaXJlY3Rvcml5IGVudHJpZXMnIHNpemUgd2FzIG5vdCB6ZXJvIGFzIHJlcXVpcmVkIGZvciBkb3Nmc2NrLAorICAgTm93IGFsbCBkaXJlY3RvcnkgZW50cmllcycgc2l6ZSBpcyB6ZXJvLgorCitFbmhhbmNlbWVudHM6CisxLiBBZGRlZCBzdXBwb3J0IGZvciBsb25nIG5hbWVzIGZvciBkaXJlY3RvcnkgbmFtZXMuIFRoaXMgaXMgc2FtZQorICAgYXMgdGhlIGV4aXN0aW5nIGxvbmcgbmFtZSBzdXBwb3J0IGZvciBmaWxlbmFtZXMuCisyLiBBZGRlZCBlcnJvciBtZXNzYWdlcyBmb3IgcHJldmlvdXNseSBzaWxlbnQgbWVtb3J5IGFsbG9jYXRpb24gYW5kIAorICAgb3RoZXIgZXJyb3JzLgorMy4gLWQgb3B0aW9ucyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSB3aXRoIGZhdDMyLCBzbyBub3cgdGhyb3dpbmcgCisgICBhbiBlcnJvciBmb3IgdGhhdC4KKzQuIFVzZSBwcmVkZWZpbmVkIHN0cnVjdHVyZXMgZnJvbSBrZXJuZWwncyBtc2Rvc19mcy5oIGZpbGUsIHJhdGhlciAKKyAgIHRoYW4gZGVmaW5pbmcgYWdhaW4gaGVyZS4gQW5kIGFjY29yZGluZ2x5IGNoYW5nZSB0aGUgbmFtZXMgJiB1c2UKKyAgIG9mIHN0cnVjdHVyZSB2YXJpYWJsZXMuCisKK091dHN0YW5kaW5nIElzc3VlczoKKzEuIFRoZSAuLiBkaXJlY3RvcnkgZW50cnkgZG8gbm90IHBvaW50IHRvIHRoZSBwYXJlbnQgb2YgY3VycmVudAorICAgZGlyZWN0b3J5LiBUaGlzIGlzc3VlIGNhbiBiZSBmaXhlZCBieSBydW5uaW5nIGRvc2ZzY2sgLWEgYWZ0ZXIKKyAgIGltYWdlIGNyZWF0aW9uLgorMi4gRm9yIGZpbGVzIHRoZSBmaWxlc2l6ZSBpcyBjb3JyZWN0LCBidXQgdGhlIGNsdXN0ZXJzIHNpemUgaXMgbW9yZSAKKyAgIHRoYW4gaXQgbmVlZHMgdG8gYmUsIHRoaXMgYWxzbyBjYW4gYmUgZml4ZWQgYnkgcnVubmluZyBkb3Nmc2NrIC1hCisgICBhZnRlciBpbWFnZSBjcmVhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gCisyMDExLzEyLzEzCisKKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCitAQCAtMjEsNyArMjEsMTcgQEAKKyAgICBKdW5lIDIwMDQgLSBKb3JkYW4gQ3JvdXNlIChpbmZvLmxpbnV4QGFtZC5jb20pCisgICAgQWRkZWQgLWQgPGRpcmVjdG9yeT4gc3VwcG9ydCB0byBwb3B1bGF0ZSB0aGUgaW1hZ2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy0gICAKKysKKysgICAyMDExLTEyLTEzOiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorKyAgIEVuaGFuY2VkIHRoZSAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IGZvciBwb3B1bGF0aW9uIG9mIGltYWdlIHdoaWxlCisrICAgY3JlYXRpb24uIEVhcmxpZXIgc3ViZGlyZWN0b3JlcyBzdXBwb3J0IHdhcyBicm9rZW4sIG9ubHkgZmlsZXMgaW4KKysgICB0aGUgcm9vdGRpciB3ZXJlIHN1cHBvcnRlZC4gTm93IGRpcmVjdG9yeSBoaXJhcmNoeSBpcyBzdXBwb3J0ZWQuCisrICAgQWxzbyBhZGRlZCBsb25nIGZpbGVuYW1lIHN1cHBvcnQgdG8gZGlyZWN0b3J5IG5hbWVzLgorKyAgICAgVGhlIC1kIDxkaXJlY3Rvcnk+IG9wdGlvbiAoaW1hZ2UgcG9wdWxhdGlvbiB3aGlsZSBjcmVhdGlvbikKKysgICBpcyBicm9rZW4gd2l0aCBmYXQzMi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uLCBBbGwgUmlnaHRzIFJlc2VydmVkCisrCisrCisgICAgRml4ZXMvYWRkaXRpb25zIE1heSAxOTk4IGJ5IFJvbWFuIEhvZGVrCisgICAgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPjoKKyAgICAtIEF0YXJpIGZvcm1hdCBzdXBwb3J0CitAQCAtODYsMjMgKzk2LDIzIEBACisgIyB1bmRlZiBfX0tFUk5FTF9fCisgI2VuZGlmCisgCistI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKy0KKysjaWZuZGVmIF9fQVNNX1NUVUJfQllURU9SREVSX0hfXworICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CistI2lmZGVmIF9fbGUxNl90b19jcHUKKy0vKiArK3JvbWFuOiAyLjEga2VybmVsIGhlYWRlcnMgZGVmaW5lIHRoZXNlIGZ1bmN0aW9uLCB0aGV5J3JlIHByb2JhYmx5IG1vcmUKKy0gKiBlZmZpY2llbnQgdGhlbiBjb2RpbmcgdGhlIHN3YXBzIG1hY2hpbmUtaW5kZXBlbmRlbnRseS4gKi8KKy0jZGVmaW5lIENGX0xFX1cJX19sZTE2X3RvX2NwdQorLSNkZWZpbmUgQ0ZfTEVfTAlfX2xlMzJfdG9fY3B1CistI2RlZmluZSBDVF9MRV9XCV9fY3B1X3RvX2xlMTYKKy0jZGVmaW5lIENUX0xFX0wJX19jcHVfdG9fbGUzMgorLSNlbHNlCistI2RlZmluZSBDRl9MRV9XKHYpICgoKCh2KSAmIDB4ZmYpIDw8IDgpIHwgKCgodikgPj4gOCkgJiAweGZmKSkKKy0jZGVmaW5lIENGX0xFX0wodikgKCgodW5zaWduZWQpKHYpPj4yNCkgfCAoKCh1bnNpZ25lZCkodik+PjgpJjB4ZmYwMCkgfCBcCistICAgICAgICAgICAgICAgKCgodW5zaWduZWQpKHYpPDw4KSYweGZmMDAwMCkgfCAoKHVuc2lnbmVkKSh2KTw8MjQpKQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaW51eC9tc2Rvc19mcy5oPgorKworKyN1bmRlZiBDRl9MRV9XCisrI3VuZGVmIENGX0xFX0wKKysjdW5kZWYgQ1RfTEVfVworKyN1bmRlZiBDVF9MRV9MCisrCisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjZGVmaW5lIENGX0xFX1codikgYnN3YXBfMTYodikKKysjZGVmaW5lIENGX0xFX0wodikgYnN3YXBfMzIodikKKyAjZGVmaW5lIENUX0xFX1codikgQ0ZfTEVfVyh2KQorICNkZWZpbmUgQ1RfTEVfTCh2KSBDRl9MRV9MKHYpCistI2VuZGlmIC8qIGRlZmluZWQoX19sZTE2X3RvX2NwdSkgKi8KKyAgICAgCisgI2Vsc2UKKyAKK0BAIC0yNTMsMzMgKzI2Myw2IEBAIHN0cnVjdCBmYXQzMl9mc2luZm8geworICAgX191MzIJCXJlc2VydmVkMls0XTsKKyB9OworIAorLS8qIFRoaXMgc3RvcmVzIHVwIHRvIDEzIGNoYXJzIG9mIHRoZSBuYW1lICovCistCistc3RydWN0IG1zZG9zX2Rpcl9zbG90IHsKKy0gICAgICAgIF9fdTggICAgaWQ7ICAgICAgICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciBmb3Igc2xvdCAqLworLSAgICAgICAgX191OCAgICBuYW1lMF80WzEwXTsgICAgLyogZmlyc3QgNSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKy0gICAgICAgIF9fdTggICAgYXR0cjsgICAgICAgICAgIC8qIGF0dHJpYnV0ZSBieXRlICovCistICAgICAgICBfX3U4ICAgIHJlc2VydmVkOyAgICAgICAvKiBhbHdheXMgMCAqLworLSAgICAgICAgX191OCAgICBhbGlhc19jaGVja3N1bTsgLyogY2hlY2tzdW0gZm9yIDguMyBhbGlhcyAqLworLSAgICAgICAgX191OCAgICBuYW1lNV8xMFsxMl07ICAgLyogNiBtb3JlIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLSAgICAgICAgX191MTYgICBzdGFydDsgICAgICAgICAgLyogc3RhcnRpbmcgY2x1c3RlciBudW1iZXIsIDAgaW4gbG9uZyBzbG90cyAqLworLSAgICAgICAgX191OCAgICBuYW1lMTFfMTJbNF07ICAgLyogbGFzdCAyIGNoYXJhY3RlcnMgaW4gbmFtZSAqLworLX07CistCistc3RydWN0IG1zZG9zX2Rpcl9lbnRyeQorLSAgeworLSAgICBjaGFyCW5hbWVbOF0sIGV4dFszXTsJLyogbmFtZSBhbmQgZXh0ZW5zaW9uICovCistICAgIF9fdTggICAgICAgIGF0dHI7CQkJLyogYXR0cmlidXRlIGJpdHMgKi8KKy0gICAgX191OAlsY2FzZTsJCQkvKiBDYXNlIGZvciBiYXNlIGFuZCBleHRlbnNpb24gKi8KKy0gICAgX191OAljdGltZV9tczsJCS8qIENyZWF0aW9uIHRpbWUsIG1pbGxpc2Vjb25kcyAqLworLSAgICBfX3UxNgljdGltZTsJCQkvKiBDcmVhdGlvbiB0aW1lICovCistICAgIF9fdTE2CWNkYXRlOwkJCS8qIENyZWF0aW9uIGRhdGUgKi8KKy0gICAgX191MTYJYWRhdGU7CQkJLyogTGFzdCBhY2Nlc3MgZGF0ZSAqLworLSAgICBfX3UxNglzdGFydGhpOwkJLyogaGlnaCAxNiBiaXRzIG9mIGZpcnN0IGNsLiAoRkFUMzIpICovCistICAgIF9fdTE2CXRpbWUsIGRhdGUsIHN0YXJ0OwkvKiB0aW1lLCBkYXRlIGFuZCBmaXJzdCBjbHVzdGVyICovCistICAgIF9fdTMyCXNpemU7CQkJLyogZmlsZSBzaXplIChpbiBieXRlcykgKi8KKy0gIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLQorIC8qIFRoZSAiYm9vdCBjb2RlIiB3ZSBwdXQgaW50byB0aGUgZmlsZXN5c3RlbS4uLiBpdCB3cml0ZXMgYSBtZXNzYWdlIGFuZAorICAgIHRlbGxzIHRoZSB1c2VyIHRvIHRyeSBhZ2FpbiAqLworIAorQEAgLTM1Niw3ICszMzksNiBAQCBzdGF0aWMgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqcm9vdF9kaXI7Cisgc3RhdGljIGludCBzaXplX3Jvb3RfZGlyOwkvKiBTaXplIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbiBieXRlcyAqLworIHN0YXRpYyBpbnQgc2VjdG9yc19wZXJfY2x1c3RlciA9IDA7CS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIGNsdXN0ZXIgKi8KKyBzdGF0aWMgaW50IHJvb3RfZGlyX2VudHJpZXMgPSAwOwkvKiBOdW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworLXN0YXRpYyBpbnQgcm9vdF9kaXJfbnVtX2VudHJpZXMgPSAwOworIHN0YXRpYyBpbnQgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAwOworIAorIHN0YXRpYyBjaGFyICpibGFua19zZWN0b3I7CQkvKiBCbGFuayBzZWN0b3IgLSBhbGwgemVyb3MgKi8KK0BAIC0xMzE1LDcgKzEyOTcsNyBAQCBzZXR1cF90YWJsZXMgKHZvaWQpCisgICAgICAgZGUtPmRhdGUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoY3RpbWUtPnRtX21kYXkgKworIAkJCQkJICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkJICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworLSAgICAgIGRlLT5jdGltZV9tcyA9IDA7CisrICAgICAgZGUtPmN0aW1lX2NzID0gMDsKKyAgICAgICBkZS0+Y3RpbWUgPSBkZS0+dGltZTsKKyAgICAgICBkZS0+Y2RhdGUgPSBkZS0+ZGF0ZTsKKyAgICAgICBkZS0+YWRhdGUgPSBkZS0+ZGF0ZTsKK0BAIC0xNDUxLDE2ICsxNDMzLDIzIEBAIHdyaXRlX3RhYmxlcyAodm9pZCkKKyAKKyAvKiBBZGQgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgYWxzbyB3cml0ZSBpdCBpbnRvIHRoZSBpbWFnZSAqLworIAorLXN0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJhc2UsIGNoYXIgKmV4dCkgeworK3N0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmRvc19uYW1lKSB7CisgICAKKyAgIGNoYXIgKmNoID0gZmlsZW5hbWU7CisgICBpbnQgaSwgbGVuOworIAorLSAgbWVtc2V0KGJhc2UsIDB4MjAsIDgpOworLSAgbWVtc2V0KGV4dCwgMHgyMCwgMyk7CisrICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi4iKSkgeworKyAgICBzdHJuY3B5KGRvc19uYW1lLCBNU0RPU19ET1QsIE1TRE9TX05BTUUpOworKyAgICByZXR1cm47CisrICB9CisrICBpZiAoIXN0cmNtcChmaWxlbmFtZSwgIi4uIikpIHsKKysgICAgc3RybmNweShkb3NfbmFtZSwgTVNET1NfRE9URE9ULCBNU0RPU19OQU1FKTsKKysgICAgcmV0dXJuOworKyAgfQorKyAgbWVtc2V0KGRvc19uYW1lLCAweDIwLCBNU0RPU19OQU1FKTsKKyAgIAorICAgZm9yKGxlbiA9IDAgOyAqY2ggJiYgKmNoICE9ICcuJzsgY2grKykgeworLSAgICBiYXNlW2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgZG9zX25hbWVbbGVuKytdID0gdG91cHBlcigqY2gpOworICAgICBpZiAobGVuID09IDgpIGJyZWFrOworICAgfQorICAgCitAQCAtMTQ2OCw3ICsxNDU3LDcgQEAgc3RhdGljIHZvaWQgY29weV9maWxlbmFtZShjaGFyICpmaWxlbmFtZQorICAgaWYgKCpjaCkgY2grKzsKKyAgIAorICAgZm9yKGxlbiA9IDAgOyAqY2g7IGNoKyspIHsKKy0gICAgZXh0W2xlbisrXSA9IHRvdXBwZXIoKmNoKTsKKysgICAgZG9zX25hbWVbOCArIGxlbisrXSA9IHRvdXBwZXIoKmNoKTsKKyAgICAgaWYgKGxlbiA9PSAzKSBicmVhazsKKyAgIH0KKyB9CitAQCAtMTU1MSw3ICsxNTQwLDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgaW50IHN0YXJ0OworICAgaW50IHVzZWRzZWMsIHRvdGFsc2VjOworIAorLSAgY2hhciBuYW1lODNbOF0sIGV4dDgzWzNdOworKyAgY2hhciBkb3NfbmFtZVtNU0RPU19OQU1FKzFdOworIAorICAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworICAgaW50IGk7CitAQCAtMTU2MiwyMyArMTU1MSwyMiBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICBpZiAoZGlyLT5yb290KSB7CisgICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworICAgICAgIHByaW50ZigiRXJyb3IgLSB0b28gbWFueSBkaXJlY3RvcnkgZW50cmllc1xuIik7CisrICAgICAgcmV0dXJuOworICAgICB9CisgICB9CisgICBlbHNlIHsKKy0gICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CistICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKy0JZGlyLT50YWJsZSA9IAorLQkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIGVsc2UgeworLQlkaXItPnRhYmxlID0gCistCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKy0JCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0KKy0JbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CistICAgICAgfQorLQorLSAgICAgIGRpci0+ZW50cmllcysrOworLSAgICB9CisrICAgIC8qIDIgZW50cmllcywgb25lIGV4dHJhIGZvciBsb25nIGZpbGVuYW1lICovCisrICAgIGlmICghZGlyLT50YWJsZSkKKysgICAgICBkaXItPnRhYmxlID0KKysgICAgICAgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYygyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZWxzZQorKyAgICAgIGRpci0+dGFibGUgPQorKyAgICAgICAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAyICogKGRpci0+ZW50cmllcyArIDEpICoKKysgICAgICAJCQkJICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgcHJpbnRmKCJFcnJvciAtIHJlYWxsb2MgZmFpbGVkXG4iKTsKKysgICAgbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBkaXItPmVudHJpZXMgKz0gMjsKKyAgIH0KKyAKKyAgIGluZmlsZSA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKTsKK0BAIC0xNjExLDEzICsxNTk5LDEzIEBAIHN0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnUKKyAgICAgcmV0dXJuIC0xOworICAgfQorIAorLSAgcHJpbnRmKCJBREQgJXNcbiIsIGZpbGVuYW1lKTsKKysgIHByaW50ZigiQUREIEZJTEUgJXNcbiIsIGZpbGVuYW1lKTsKKyAKKyAgIC8qIEdyYWIgdGhlIGJhc2VuYW1lIG9mIHRoZSBmaWxlICovCisgICBiYXNlID0gYmFzZW5hbWUoZmlsZW5hbWUpOworICAgCistICAvKiBFeHRyYWN0IG91dCB0aGUgOC4zIG5hbWUgKi8KKy0gIGNvcHlfZmlsZW5hbWUoYmFzZSwgbmFtZTgzLCBleHQ4Myk7CisrICAvKiBjb252ZXJ0IGZvciBkb3MgZmF0IHN0cnVjdHVyZSAgKi8KKysgIGNvcHlfZmlsZW5hbWUoYmFzZSwgZG9zX25hbWUpOworIAorICAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKyAKK0BAIC0xNjI5LDEyICsxNjE3LDkgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorICAgCisgICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisgICAKKy0gIGZvcihpID0gMDsgaSA8IDg7IGkrKykgCistICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIG5hbWU4M1tpXTsKKysgIGZvcihpID0gMDsgaSA8IE1TRE9TX05BTUU7IGkrKykKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgZG9zX25hbWVbaV07CisgICAKKy0gIGZvcihpID0gMDsgaSA8IDM7IGkrKykgCistICAgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gKCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMSk8PDcpfCgoc2xvdC0+YWxpYXNfY2hlY2tzdW0mMHhmZSk+PjEpKSArIGV4dDgzW2ldOworLQorICAgcCA9IGJhc2U7CisgCisgICBjb3B5X25hbWUoc2xvdC0+bmFtZTBfNCwgMTAsICZwKTsKK0BAIC0xNjQ1LDggKzE2MzAsNyBAQCBzdGF0aWMgaW50IGFkZF9maWxlKGNoYXIgKmZpbGVuYW1lLCBzdHJ1CisgICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisgICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisgCistICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBuYW1lODMsIDgpOworLSAgc3RybmNweShlbnRyeS0+ZXh0LCBleHQ4MywgMyk7CisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBkb3NfbmFtZSwgTVNET1NfTkFNRSk7CisgCisgCisgICAvKiBJZiB0aGUgdXNlciBoYXMgaXQgcmVhZCBvbmx5LCB0aGVuIGFkZCByZWFkIG9ubHkgdG8gdGhlIGluY29taW5nCitAQCAtMTY2NSw3ICsxNjQ5LDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorIAkJCQkgICAgICAoKGN0aW1lLT50bV9tb24rMSkgPDwgNSkgKworIAkJCQkgICAgICAoKGN0aW1lLT50bV95ZWFyLTgwKSA8PCA5KSkpOworIAorLSAgZW50cnktPmN0aW1lX21zID0gMDsKKysgIGVudHJ5LT5jdGltZV9jcyA9IDA7CisgICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKyAgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworICAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CitAQCAtMTcxMSw2ICsxNjk1LDcgQEAgc3RhdGljIGludCBhZGRfZmlsZShjaGFyICpmaWxlbmFtZSwgc3RydQorIAorICBleGl0X2FkZDoKKyAgIGlmIChpbmZpbGUpIGNsb3NlKGluZmlsZSk7CisrICByZXR1cm4gMDsKKyB9CisgCisgLyogQWRkIGEgbmV3IGRpcmVjdG9yeSB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBlbnRyeSwgYW5kIGluIHR1cm4gcG9wdWxhdGUgCitAQCAtMTcyNywxMCArMTcxMiwxOCBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICBzdHJ1Y3QgZGlyZW50ICpkZW50cnkgPSAwOworICAgaW50IHJlbWFpbjsKKyAgIGNoYXIgKmRhdGE7CisrICBjaGFyICpiYXNlOworKyAgY2hhciBkb3NfbmFtZVtNU0RPU19OQU1FKzFdOworKyAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworKyAgaW50IGk7CisrICBjaGFyICpwOworIAorICAgLyogSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCistICBpZiAoIXJkZGlyKSByZXR1cm47CistICAKKysgIGlmICghcmRkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGRpciBkb2VzIG5vdCBleGlzdDogJXNcbiIsIGZpbGVuYW1lKTsKKysgICAgcmV0dXJuOworKyAgfQorKworICAgaWYgKGRpci0+cm9vdCkgeworICAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKyAgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworQEAgLTE3MzgsMjggKzE3MzEsNTggQEAgc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZQorICAgICB9CisgICB9CisgICBlbHNlIHsKKy0gICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CistICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKy0JZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIGVsc2UgeworLQlkaXItPnRhYmxlID0gKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKy0JCQkJCQkJc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKy0KKy0JLyogWmVybyBpdCBvdXQgdG8gYXZvaWQgaXNzdWVzICovCistCW1lbXNldCgmZGlyLT50YWJsZVtkaXItPmVudHJpZXNdLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworLSAgICAgIH0KKy0JZGlyLT5lbnRyaWVzKys7CisrICAgIC8qIDIgZW50cmllcywgb25lIGV4dHJhIGZvciBsb25nIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSAqLworKyAgICBpZiAoIWRpci0+dGFibGUpCisrICAgICAgZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYygyICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgZWxzZQorKyAgICAgIGRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSByZWFsbG9jKGRpci0+dGFibGUsIDIgKiAoZGlyLT5lbnRyaWVzICsgMSkgKgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBpZiAoIWRpci0+dGFibGUpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKysgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKyAgICAgfQorKyAgICAvKiBaZXJvIGl0IG91dCB0byBhdm9pZCBpc3N1ZXMgKi8KKysgICAgbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIDIgKiBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICBkaXItPmVudHJpZXMgKz0gMjsKKyAgIH0KKyAKKysgIHByaW50ZigiQUREIERJUiAlc1xuIiwgZmlsZW5hbWUpOworICAgLyogTm93LCBjcmVhdGUgYSBuZXcgZGlyZWN0b3J5IGVudHJ5IGZvciB0aGUgbmV3IGRpcmVjdG9yeSAqLworICAgbmV3ZGlyID0gKHN0cnVjdCBkaXJfZW50cnkgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CistICBpZiAoIW5ld2RpcikgZ290byBleGl0X2FkZF9kaXI7CisrICBpZiAoIW5ld2RpcikgeworKyAgICBwcmludGYoIkVycm9yIC0gY2FsbG9jIGZhaWxlZFxuIik7CisrICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgfQorKworKyAgLyogR3JhYiB0aGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgKi8KKysgIGJhc2UgPSBiYXNlbmFtZShmaWxlbmFtZSk7CisrCisrICAvKiBjb252ZXJ0IGZvciBkb3Mgc3RydWN0dXJlICAqLworKyAgY29weV9maWxlbmFtZShiYXNlLCBkb3NfbmFtZSk7CisrCisrICAvKiBNYWtlIGFuIGV4dGVuZGVkIG5hbWUgc2xvdCAqLworKyAgc2xvdCA9IChzdHJ1Y3QgbXNkb3NfZGlyX3Nsb3QgKikgJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysgIHNsb3QtPmlkID0gJ0EnOworKyAgc2xvdC0+YXR0ciA9IDB4MEY7CisrICBzbG90LT5yZXNlcnZlZCA9IDA7CisrICBzbG90LT5zdGFydCA9IDA7CisrCisrICBzbG90LT5hbGlhc19jaGVja3N1bSA9IDA7CisgCisrICBmb3IgKGkgPSAwOyBpIDwgTVNET1NfTkFNRTsgaSsrKQorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBkb3NfbmFtZVtpXTsKKysKKysgIHAgPSBiYXNlOworKworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTVfMTAsIDEyLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTExXzEyLCA0LCAmcCk7CisrCisrICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisgICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisgCistICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBiYXNlbmFtZShmaWxlbmFtZSksIHNpemVvZihlbnRyeS0+bmFtZSkpOworLSAgCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBkb3NfbmFtZSwgTVNET1NfTkFNRSk7CisrCisgICBlbnRyeS0+YXR0ciA9IEFUVFJfRElSOworICAgY3RpbWUgPSBsb2NhbHRpbWUoJmNyZWF0ZV90aW1lKTsKKyAKK0BAIC0xNzcwLDI1ICsxNzkzLDMyIEBAIHN0YXRpYyB2b2lkIGFkZF9kaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUKKyAJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKyAJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKyAKKy0gIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWVfY3MgPSAwOworICAgZW50cnktPmN0aW1lID0gZW50cnktPnRpbWU7CisgICBlbnRyeS0+Y2RhdGUgPSBlbnRyeS0+ZGF0ZTsKKyAgIGVudHJ5LT5hZGF0ZSA9IGVudHJ5LT5kYXRlOworIAorICAgLyogTm93LCByZWFkIHRoZSBkaXJlY3RvcnkgKi8KKyAKKy0gIHdoaWxlKChkZW50cnkgPSByZWFkZGlyKHJkZGlyKSkpIHsKKysKKysgIHdoaWxlKChiYXNlWzBdICE9ICcuJykgJiYgKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworICAgICBzdHJ1Y3Qgc3RhdCBzdDsKKyAgICAgY2hhciAqYnVmZmVyOworLSAgICAKKy0gICAgaWYgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpCistICAgICAgY29udGludWU7CisgCistICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKy0gICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrICAgIGlmIChkZW50cnktPmRfbmFtZVswXSA9PSAnLicpIHsKKysgICAgICAgIC8qIGRvcyBhbHNvIGhhcyAuICYgLi4gZGlyZWN0b3J5IGVudHJpZXMgKi8KKysgICAgICBpZiAoISAoKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikpIHx8ICghc3RyY21wKGRlbnRyeS0+ZF9uYW1lLCAiLi4iKSkpKSB7CisrICAgICAgICAvKiBpZ25vcmUgb3RoZXIgLiogZmlsZXMgKi8KKysgICAgICAgIHByaW50ZigiRXJyb3IgLSBGaWxlL0RpciBuYW1lIGlzIG5vdCBkb3MgY29tcGF0aWJsZSwgaWdub3JlZDogJXNcbiIsIGRlbnRyeS0+ZF9uYW1lKTsKKysgICAgICAgIGNvbnRpbnVlOworKyAgICAgIH0KKysgICAgfQorIAorICAgICBidWZmZXIgPSBtYWxsb2Moc3RybGVuKGZpbGVuYW1lKSArIHN0cmxlbihkZW50cnktPmRfbmFtZSkgKyAzKTsKKy0gICAgaWYgKCFidWZmZXIpIGNvbnRpbnVlOworKyAgICBpZiAoIWJ1ZmZlcikgeworKyAgICAgICAgcHJpbnRmKCJFcnJvciAtIG1hbGxvYyBmYWlsZWRcbiIpOworKyAgICAgICAgZ290byBleGl0X2FkZF9kaXI7CisrICAgIH0KKyAgICAgCisgICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBmaWxlbmFtZSwgZGVudHJ5LT5kX25hbWUpOworICAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CitAQCAtMTgwNiwxMSArMTgzNiwyMyBAQCBzdGF0aWMgdm9pZCBhZGRfZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lCisgICAvKiBOb3cgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeSBoYXMgYmVlbiB3cml0dGVuLCBnbyBhaGVhZCBhbmQgd3JpdGUgdGhlIGRpcmVjdG9yeQorICAgICAgZW50cnkgYXMgd2VsbCAqLworIAorKyAgZW50cnktPnNpemUgPSAwOyAvKiBhIGRpcmVjdG9yeSBoYXMgemVybyBzaXplICovCisrCisrICBpZiAoYmFzZVswXSA9PSAnLicpICB7IC8qIC4gJiAuLiBwb2ludCB0byBwYXJlbnQncyBjbHVzdGVyICovCisrICAgIGdvdG8gZXhpdF9hZGRfZGlyOworKyAgfQorKworICAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhsYXN0X2NsdXN0ZXJfd3JpdHRlbik7CisgICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKGxhc3RfY2x1c3Rlcl93cml0dGVuICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAKKy0gIGVudHJ5LT5zaXplID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKysKKysvKiAuIGRpciBzdGFydCBwb2ludHMgdG8gcGFyZW50ICovCisrICBuZXdkaXItPnRhYmxlWzFdLnN0YXJ0ID0gZW50cnktPnN0YXJ0OworKy8qIC4uIGRpciBwb2ludHMgdG8gcGFyZW50IG9mIHBhcmVudCovCisrLyogLi4gZGlyIHN0YXJ0IGlzIG5vdCBzZXQgeWV0LCB3b3VsZCBuZWVkIG1vcmUgY2hhbmdlcyB0byB0aGUgY29kZSwKKysgKiBidXQgZG9zZnNjayBjYW4gZml4IHRoZXNlIC4uIGVudHJ5IHN0YXJ0IHBvaW50ZXJzIGNvcnJlY3RseSAqLworKworKyAgcmVtYWluID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKyAgIAorLSAgcmVtYWluID0gZW50cnktPnNpemU7CisgICBkYXRhID0gKGNoYXIgKikgbmV3ZGlyLT50YWJsZTsKKyAKKyAgIHdoaWxlKHJlbWFpbikgeworQEAgLTE4NTgsNiArMTkwMCw3IEBAIHN0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXIKKyAKKyAgIGlmICghbmV3ZGlyKSB7CisgICAgIGNsb3NlZGlyKGRpcik7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYWxsb2MgZmFpbGVkIVxuIik7CisgICAgIHJldHVybjsKKyAgIH0KKyAKK0BAIC0xODc3LDcgKzE5MjAsMTAgQEAgc3RhdGljIHZvaWQgYWRkX3Jvb3RfZGlyZWN0b3J5KGNoYXIgKmRpcgorICAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworICAKKyAgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihlbnRyeS0+ZF9uYW1lKSArIDMpOworLSAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIGlmICghYnVmZmVyKSB7CisrICAgICAgICBwcmludGYoIkVycm9yIC0gbWFsbG9jIGZhaWxlZCFcbiIpOworKyAgICAgICAgY29udGludWU7CisrICAgIH0KKyAKKyAgICAgc3ByaW50ZihidWZmZXIsICIlcy8lcyIsIGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworICAgICBpZiAoIXN0YXQoYnVmZmVyLCAmc3QpKSB7CitAQCAtMjI0NSw2ICsyMjkxLDkgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgaWYgKGNoZWNrICYmIGxpc3RmaWxlKQkvKiBBdXRvIGFuZCBzcGVjaWZpZWQgYmFkIGJsb2NrIGhhbmRsaW5nIGFyZSBtdXR1YWxseSAqLworICAgICBkaWUgKCItYyBhbmQgLWwgYXJlIGluY29tcGF0aWJsZSIpOwkJLyogZXhjbHVzaXZlIG9mIGVhY2ggb3RoZXIhICovCisgCisrICBpZiAoZGlybmFtZSAmJiAoc2l6ZV9mYXQgPT0gMzIpKQorKyAgICBkaWUgKCItZCBpcyBpbmNvbXBhdGlibGUgd2l0aCBGQVQzMiIpOworKworICAgaWYgKCFjcmVhdGUpIHsKKyAgICAgY2hlY2tfbW91bnQgKGRldmljZV9uYW1lKTsJLyogSXMgdGhlIGRldmljZSBhbHJlYWR5IG1vdW50ZWQ/ICovCisgICAgIGRldiA9IG9wZW4gKGRldmljZV9uYW1lLCBPX1JEV1IpOwkvKiBJcyBpdCBhIHN1aXRhYmxlIGRldmljZSB0byBidWlsZCB0aGUgRlMgb24/ICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI1YzhjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvaW5jbHVkZS1saW51eC10eXBlcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitta2Rzb2ZzIGlzIHVzaW5nIHR5cGVzIG9mIHRoZSBzdHlsZSBfX3U4LCB3aGljaCBpdCBnZXRzIHdpdGggc29tZQordmVyc2lvbnMgb2YgbGliYyBoZWFkZXJzIHZpYSBsaW51eC9oZHJlZy5oIGluY2x1ZGluZyBhc20vdHlwZXMuaC4KK05ld2VyIHZlcnNpb24gb2YgZmVkb3JhIChhdCBsZWFzdCkgaGF2ZSBhIGhkcmVnLmggd2hpY2hkb2VzIG5vdAoraW5jbHVkZSBhc20vdHlwZXMuaC4gVG8gd29yayBhcm91bmQgdGhpcyBwYXRjaCBta2Rvc2ZzLmMgdG8gZXhwbGljaXR5CitpbmNsdWRlIGxpbnV4L3R5cGVzLmggd2hpY2ggd2lsbCBpbiB0dXJuIHB1bGwgaW4gYXNtL3R5cGVzLmggd2hpY2gKK2RlZmluZXMgdGhlc2UgdmFyaWFibGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KK1dlJ3JlIHRyYWNraW5nIGFuIG9sZCByZWxlYXNlIG9mIGRvc2ZzdG9vbHMgZHVlIHRvIGxpY2Vuc2luZyBpc3N1ZXMuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gZG9zZnN0b29scy0yLjEwL21rZG9zZnMvbWtkb3Nmcy5jfgkyMDA2LTA3LTEyIDE4OjQ2OjIxLjAwMDAwMDAwMCArMTAwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9ta2Rvc2ZzL21rZG9zZnMuYwkyMDA2LTA3LTEyIDE4OjQ2OjIxLjAwMDAwMDAwMCArMTAwMAorQEAgLTYwLDYgKzYwLDcgQEAKKyAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorIAorICNpbmNsdWRlIDxmY250bC5oPgorKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorICNpbmNsdWRlIDxsaW51eC9mcy5oPgorICNpbmNsdWRlIDxsaW51eC9mZC5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMjFiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL21rZG9zZnMtYm9vdGNvZGUucGF0Y2gKQEAgLTAsMCArMSwyNDEgQEAKK0FkZCBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvQ2hhbmdlTG9nCTE5OTctMDYtMTggMTA6MDk6MzguMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvQ2hhbmdlTG9nCTIwMTEtMTItMDYgMTI6MTQ6MjMuNjM0MDExNTU4ICswMDAwCitAQCAtMSwzICsxLDE0IEBACisrMTl0aCBKdW5lIDIwMDMJCQlTYW0gQmluZ25lciAoc2FtQGJpbmduZXIuY29tKQorKworKwlBZGRlZCBvcHRpb24gdG8gcmVhZCBpbiBib290Y29kZSBmcm9tIGEgZmlsZSBzbyB0aGF0IGlmIHlvdSBoYXZlCisrCWZvciBleGFtcGxlIFdpbmRvd3MgMjAwMCBib290IGNvZGUsIHlvdSBjYW4gaGF2ZSBpdCB3cml0ZSB0aGF0CisrCWFzIHRoZSBib290Y29kZS4gIFRoaXMgaXMgYSBkdW1wIG9mIHRoZSBiZWhpbm5pbmcgb2YgYSBwYXJ0aXRpb24KKysJZ2VuZXJhbGx5IDUxMiBieXRlcywgYnV0IGNhbiBiZSB1cCB0byByZXNlcnZlZCBzZWN0b3JzKjUxMiBieXRlcy4KKysgICAgICAgIEFsc28gd3JpdGVzIDB4ODAgYXMgdGhlCUJJT1MgZHJpdmUgbnVtYmVyIGlmIHdlIGFyZSBmb3JtYXR0aW5nIGEKKysJaGFyZCBkcml2ZSwgYW5kIHNldHMgdGhlIG51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyB0byBiZSB0aGUKKysJbnVtYmVyIG9mIHNlY3RvcnMgaW4gb25lIHRyYWNrLiBUaGVzZSB3ZXJlIHJlcXVpcmVkIHNvIHRoYXQgRE9TCisrCWNvdWxkIGJvb3QgdXNpbmcgdGhlIGJvb3Rjb2RlLgorKworIDI4dGggSmFudWFyeSAxOTk1CQlILiBQZXRlciBBbnZpbiAoaHBhQHlnZ2RyYXNpbC5jb20pCisgCisgCUJldHRlciBhbGdvcml0aG0gdG8gc2VsZWN0IGNsdXN0ZXIgc2l6ZXMgb24gbGFyZ2UgZmlsZXN5c3RlbXMuCitJbmRleDogZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy44Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZG9zZnN0b29scy0yLjExLm9yaWcvbWtkb3Nmcy9ta2Rvc2ZzLjgJMjAwNC0wMi0yNSAxOTozNjowNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBkb3Nmc3Rvb2xzLTIuMTEvbWtkb3Nmcy9ta2Rvc2ZzLjgJMjAxMS0xMi0wNiAxMjoxOTo1NC43Nzc4ODg0MzQgKzAwMDAKK0BAIC00NCw2ICs0NCwxMCBAQAorIC5JIG1lc3NhZ2UtZmlsZQorIF0KKyBbCisrLkIgXC1CCisrLkkgYm9vdGNvZGUtZmlsZQorK10KKytbCisgLkIgXC1uCisgLkkgdm9sdW1lLW5hbWUKKyBdCitAQCAtMTY1LDYgKzE2OSwxOCBAQAorIGNhcnJpYWdlIHJldHVybi1saW5lIGZlZWQgY29tYmluYXRpb25zLCBhbmQgdGFicyBoYXZlIGJlZW4gZXhwYW5kZWQuCisgSWYgdGhlIGZpbGVuYW1lIGlzIGEgaHlwaGVuICgtKSwgdGhlIHRleHQgaXMgdGFrZW4gZnJvbSBzdGFuZGFyZCBpbnB1dC4gCisgLlRQCisrLkJJIFwtQiAiIGJvb3Rjb2RlLWZpbGUiCisrVXNlcyBib290IG1hY2hpbmUgY29kZSBmcm9tIGZpbGUgImZpbGUiLiAgT24gYW55IHRoaW5nIG90aGVyIHRoYW4gRkFUMzIsCisrdGhpcyBvbmx5IHdyaXRlcyB0aGUgZmlyc3QgMyBieXRlcywgYW5kIDQ4MCBieXRlcyBmcm9tIG9mZnNldCAzRWguICBPbgorK0ZBVDMyLCB0aGlzIHdyaXRlcyB0aGUgZmlyc3QgMyBieXRlcywgNDIwIGJ5dGVzIGZyb20gb2Zmc2V0IDVBaCB0byBib3RoCisrcHJpbWFyeSBhbmQgYmFja3VwIGJvb3Qgc2VjdG9ycy4gIEFsc28gd3JpdGVzIGFsbCBvdGhlciByZXNlcnZlZCBzZWN0b3JzCisrZXhjbHVkaW5nIHRoZSBzZWN0b3JzIGZvbGxvd2luZyBib290IHNlY3RvcnMgKHVzdWFsbHkgc2VjdG9yIDIgYW5kIDcpLgorK0RvZXMgbm90IHJlcXVpcmUgdGhhdCB0aGUgaW5wdXQgZmlsZSBiZSBhcyBsYXJnZSBhcyByZXNlcnZlZF9zZWN0b3JzKjUxMi4KKytUbyBtYWtlIGEgRkFUMzIgcGFydGl0aW9uIGJvb3RhYmxlLCB5b3Ugd2lsbCBuZWVkIGF0IGxlYXN0IHRoZSBmaXJzdAorKzEzIHNlY3RvcnMgKDY2NTYgYnl0ZXMpLiAgWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBwYXJ0aXRpb24gYXMgdGhlIGFyZ3VtZW50CisrdG8gY2xvbmUgdGhlIGJvb3QgY29kZSBmcm9tIHRoYXQgcGFydGl0aW9uLgorK2kuZSBta2Rvc2ZzIC1CIC9kZXYvc2RhMSAvZGV2L3NkYTEKKysuVFAKKyAuQkkgXC1uICIgdm9sdW1lLW5hbWUiCisgU2V0cyB0aGUgdm9sdW1lIG5hbWUgKGxhYmVsKSBvZiB0aGUgZmlsZXN5c3RlbS4gIFRoZSB2b2x1bWUgbmFtZSBjYW4KKyBiZSB1cCB0byAxMSBjaGFyYWN0ZXJzIGxvbmcuICBUaGUgZGVmYXVsdCBpcyBubyBsYWJlbC4KK0BAIC0xOTgsOCArMjE0LDkgQEAKKyBzaW1wbHkgd2lsbCBub3Qgc3VwcG9ydCBpdCA7KQorIC5TSCBBVVRIT1IKKyBEYXZlIEh1ZHNvbiAtIDxkYXZlQGh1bWJ1Zy5kZW1vbi5jby51az47IG1vZGlmaWVkIGJ5IFBldGVyIEFudmluCistPGhwYUB5Z2dkcmFzaWwuY29tPi4gRml4ZXMgYW5kIGFkZGl0aW9ucyBieSBSb21hbiBIb2RlaworLTxyb21hbkBob2Rlay5uZXQ+IGZvciBEZWJpYW4vR05VIExpbnV4LgorKzxocGFAeWdnZHJhc2lsLmNvbT4gYW5kIFNhbSBCaW5nbmVyIDxzYW1AYmluZ25lci5jb20+LiBGaXhlcyBhbmQKKythZGRpdGlvbnMgYnkgUm9tYW4gSG9kZWsgPFJvbWFuLkhvZGVrQGluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorK2ZvciBEZWJpYW4vR05VIExpbnV4LgorIC5TSCBBQ0tOT1dMRURHRU1FTlRTCisgLkIgbWtkb3NmcworIGlzIGJhc2VkIG9uIGNvZGUgZnJvbQorSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMDUtMDMtMTIgMTY6MTI6MTYuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mjc6NTUuMTIxODg2MDc2ICswMDAwCitAQCAtMjQsNiArMjQsMTIgQEAKKyAgICAtIE5ldyBvcHRpb25zIC1BLCAtUywgLUMKKyAgICAtIFN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zID4gMkdCCisgICAgLSBGQVQzMiBzdXBwb3J0CisrCisrICAgRml4ZXMvYWRkaXRpb25zIEp1bmUgMjAwMyBieSBTYW0gQmluZ25lcgorKyAgIDxzYW1AYmluZ25lci5jb20+OgorKyAgIC0gQWRkIC1CIG9wdGlvbiB0byByZWFkIGluIGJvb3Rjb2RlIGZyb20gYSBmaWxlCisrICAgLSBXcml0ZSBCSU9TIGRyaXZlIG51bWJlciBzbyB0aGF0IEZTIGNhbiBwcm9wZXJseSBib290CisrICAgLSBTZXQgbnVtYmVyIG9mIGhpZGRlbiBzZWN0b3JzIGJlZm9yZSBib290IGNvZGUgdG8gYmUgb25lIHRyYWNrCisgICAgCisgICAgQ29weWluZzogICAgIENvcHlyaWdodCAxOTkzLCAxOTk0IERhdmlkIEh1ZHNvbiAoZGF2ZUBodW1idWcuZGVtb24uY28udWspCisgCitAQCAtMTUzLDYgKzE1OSw4IEBACisgI2RlZmluZSBGQVRfQkFEICAgICAgMHgwZmZmZmZmNworIAorICNkZWZpbmUgTVNET1NfRVhUX1NJR04gMHgyOQkvKiBleHRlbmRlZCBib290IHNlY3RvciBzaWduYXR1cmUgKi8KKysjZGVmaW5lIEhEX0RSSVZFX05VTUJFUiAweDgwCS8qIEJvb3Qgb2ZmIGZpcnN0IGhhcmQgZHJpdmUgKi8KKysjZGVmaW5lIEZEX0RSSVZFX05VTUJFUiAweDAwCS8qIEJvb3Qgb2ZmIGZpcnN0IGZsb3BweSBkcml2ZSAqLworICNkZWZpbmUgTVNET1NfRkFUMTJfU0lHTiAiRkFUMTIgICAiCS8qIEZBVDEyIGZpbGVzeXN0ZW0gc2lnbmF0dXJlICovCisgI2RlZmluZSBNU0RPU19GQVQxNl9TSUdOICJGQVQxNiAgICIJLyogRkFUMTYgZmlsZXN5c3RlbSBzaWduYXR1cmUgKi8KKyAjZGVmaW5lIE1TRE9TX0ZBVDMyX1NJR04gIkZBVDMyICAgIgkvKiBGQVQzMiBmaWxlc3lzdGVtIHNpZ25hdHVyZSAqLworQEAgLTE3NSw2ICsxODMsOCBAQAorICNkZWZpbmUgQk9PVENPREVfU0laRQkJNDQ4CisgI2RlZmluZSBCT09UQ09ERV9GQVQzMl9TSVpFCTQyMAorIAorKyNkZWZpbmUgTUFYX1JFU0VSVkVECQkweEZGRkYKKysKKyAvKiBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaXMgdXNlZCBvbiBhbGwgc3RydWN0dXJlcyB0byBtYWtlIGdjYyBpZ25vcmUgYW55CisgICogYWxpZ25tZW50cyAqLworIAorQEAgLTIwMiw3ICsyMTIsNyBAQAorICAgX191MTYgICAgICAgICBmYXRfbGVuZ3RoOwkvKiBzZWN0b3JzL0ZBVCAqLworICAgX191MTYgICAgICAgICBzZWNzX3RyYWNrOwkvKiBzZWN0b3JzIHBlciB0cmFjayAqLworICAgX191MTYgICAgICAgICBoZWFkczsJCS8qIG51bWJlciBvZiBoZWFkcyAqLworLSAgX191MzIgICAgICAgICBoaWRkZW47CQkvKiBoaWRkZW4gc2VjdG9ycyAodW51c2VkKSAqLworKyAgX191MzIgICAgICAgICBoaWRkZW47CQkvKiBoaWRkZW4gc2VjdG9ycyAob25lIHRyYWNrKSAqLworICAgX191MzIgICAgICAgICB0b3RhbF9zZWN0OwkvKiBudW1iZXIgb2Ygc2VjdG9ycyAoaWYgc2VjdG9ycyA9PSAwKSAqLworICAgdW5pb24geworICAgICBzdHJ1Y3QgeworQEAgLTI4NSw2ICsyOTUsOCBAQAorIAorIC8qIEdsb2JhbCB2YXJpYWJsZXMgLSB0aGUgcm9vdCBvZiBhbGwgZXZpbCA6LSkgLSBzZWUgdGhlc2UgYW5kIHdlZXAhICovCisgCisrc3RhdGljIGNoYXIgKnRlbXBsYXRlX2Jvb3RfY29kZTsJLyogVmFyaWFibGUgdG8gc3RvcmUgYSBmdWxsIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluICovCisrc3RhdGljIGludCB1c2VfdGVtcGxhdGUgPSAwOworIHN0YXRpYyBjaGFyICpwcm9ncmFtX25hbWUgPSAibWtkb3NmcyI7CS8qIE5hbWUgb2YgdGhlIHByb2dyYW0gKi8KKyBzdGF0aWMgY2hhciAqZGV2aWNlX25hbWUgPSBOVUxMOwkvKiBOYW1lIG9mIHRoZSBkZXZpY2Ugb24gd2hpY2ggdG8gY3JlYXRlIHRoZSBmaWxlc3lzdGVtICovCisgc3RhdGljIGludCBhdGFyaV9mb3JtYXQgPSAwOwkvKiBVc2UgQXRhcmkgdmFyaWF0aW9uIG9mIE1TLURPUyBGUyBmb3JtYXQgKi8KK0BAIC04MzcsNiArODQ5LDEyIEBACisgICAgIHZpLT52b2x1bWVfaWRbMl0gPSAodW5zaWduZWQgY2hhcikgKCh2b2x1bWVfaWQgJiAweDAwZmYwMDAwKSA+PiAxNik7CisgICAgIHZpLT52b2x1bWVfaWRbM10gPSAodW5zaWduZWQgY2hhcikgKHZvbHVtZV9pZCA+PiAyNCk7CisgICB9CisrICBpZiAoYnMubWVkaWEgPT0gMHhmOCkgeworKyAgICAgIHZpLT5kcml2ZV9udW1iZXIgPSBIRF9EUklWRV9OVU1CRVI7ICAvKiBTZXQgYmlvcyBkcml2ZSBudW1iZXIgdG8gODBoICovCisrICB9CisrICBlbHNlIHsKKysgICAgICB2aS0+ZHJpdmVfbnVtYmVyID0gRkRfRFJJVkVfTlVNQkVSOyAgLyogU2V0IGJpb3MgZHJpdmUgbnVtYmVyIHRvIDAwaCAqLworKyAgfQorIAorICAgaWYgKCFhdGFyaV9mb3JtYXQpIHsKKyAgICAgbWVtY3B5KHZpLT52b2x1bWVfbGFiZWwsIHZvbHVtZV9uYW1lLCAxMSk7CitAQCAtMTM2Miw2ICsxMzgwLDMyIEBACisgICAgKiBkaXIgYXJlYSBvbiBGQVQxMi8xNiwgYW5kIHRoZSBmaXJzdCBjbHVzdGVyIG9uIEZBVDMyLiAqLworICAgd3JpdGVidWYoIChjaGFyICopIHJvb3RfZGlyLCBzaXplX3Jvb3RfZGlyLCAicm9vdCBkaXJlY3RvcnkiICk7CisgCisrICBpZiAodXNlX3RlbXBsYXRlID09IDEpIHsKKysgICAgLyogZHVwZSB0ZW1wbGF0ZSBpbnRvIHJlc2VydmVkIHNlY3RvcnMgKi8KKysgICAgc2Vla3RvKCAwLCAiU3RhcnQgb2YgcGFydGl0aW9uIiApOworKyAgICBpZiAoc2l6ZV9mYXQgPT0gMzIpIHsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiYmFja3VwIGptcEJvb3QiICk7CisrICAgICAgc2Vla3RvKCAweDVhLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrMHg1YSwgNDIwLCAic2VjdG9yIDEgYm9vdCBhcmVhIiApOworKyAgICAgIHNlZWt0byggNTEyKjIsICJ0aGlyZCBzZWN0b3IiICk7CisrICAgICAgaWYgKGJhY2t1cF9ib290ICE9IDApIHsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrNTEyKjIsIGJhY2t1cF9ib290KnNlY3Rvcl9zaXplIC0gNTEyKjIsICJkYXRhIHRvIGJhY2t1cCBib290IiApOworKyAgICAgICAgc2Vla3RvKCBiYWNrdXBfYm9vdCpzZWN0b3Jfc2l6ZSwgImJhY2t1cCBib290IHNlY3RvciIgKTsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUsIDMsICJiYWNrdXAgam1wQm9vdCIgKTsKKysgICAgICAgIHNlZWt0byggYmFja3VwX2Jvb3Qqc2VjdG9yX3NpemUrMHg1YSwgImJhY2t1cCBib290IHNlY3RvciBib290IGFyZWEiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKzB4NWEsIDQyMCwgImJhY2t1cCBib290IHNlY3RvciBib290IGFyZWEiICk7CisrICAgICAgICBzZWVrdG8oIChiYWNrdXBfYm9vdCsyKSpzZWN0b3Jfc2l6ZSwgInNlY3RvciBmb2xsb3dpbmcgYmFja3VwIGNvZGUiICk7CisrICAgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlKyhiYWNrdXBfYm9vdCsyKSpzZWN0b3Jfc2l6ZSwgKHJlc2VydmVkX3NlY3RvcnMtYmFja3VwX2Jvb3QtMikqNTEyLCAicmVtYWluaW5nIGRhdGEiICk7CisrICAgICAgfSBlbHNlIHsKKysgICAgICAgIHdyaXRlYnVmKCB0ZW1wbGF0ZV9ib290X2NvZGUrNTEyKjIsIChyZXNlcnZlZF9zZWN0b3JzLTIpKjUxMiwgInJlbWFpbmluZyBkYXRhIiApOworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICB3cml0ZWJ1ZiggdGVtcGxhdGVfYm9vdF9jb2RlLCAzLCAiam1wQm9vdCIgKTsKKysgICAgICBzZWVrdG8oIDB4M2UsICJzZWN0b3IgMSBib290IGFyZWEiICk7CisrICAgICAgd3JpdGVidWYoIHRlbXBsYXRlX2Jvb3RfY29kZSsweDNlLCA0NDgsICJib290IGNvZGUiICk7CisrICAgIH0KKysgIH0KKysKKyAgIGlmIChibGFua19zZWN0b3IpIGZyZWUoIGJsYW5rX3NlY3RvciApOworICAgaWYgKGluZm9fc2VjdG9yKSBmcmVlKCBpbmZvX3NlY3RvciApOworICAgZnJlZSAocm9vdF9kaXIpOyAgIC8qIEZyZWUgdXAgdGhlIHJvb3QgZGlyZWN0b3J5IHNwYWNlIGZyb20gc2V0dXBfdGFibGVzICovCitAQCAtMTM3Niw3ICsxNDIwLDcgQEAKKyB7CisgICBmYXRhbF9lcnJvcigiXAorIFVzYWdlOiBta2Rvc2ZzIFstQV0gWy1jXSBbLUNdIFstdl0gWy1JXSBbLWwgYmFkLWJsb2NrLWZpbGVdIFstYiBiYWNrdXAtYm9vdC1zZWN0b3JdXG5cCistICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdXG5cCisrICAgICAgIFstbSBib290LW1zZy1maWxlXSBbLW4gdm9sdW1lLW5hbWVdIFstaSB2b2x1bWUtaWRdIFstQiBib290Y29kZV1cblwKKyAgICAgICAgWy1zIHNlY3RvcnMtcGVyLWNsdXN0ZXJdIFstUyBsb2dpY2FsLXNlY3Rvci1zaXplXSBbLWYgbnVtYmVyLW9mLUZBVHNdXG5cCisgICAgICAgIFstaCBoaWRkZW4tc2VjdG9yc10gWy1GIGZhdC1zaXplXSBbLXIgcm9vdC1kaXItZW50cmllc10gWy1SIHJlc2VydmVkLXNlY3RvcnNdXG5cCisgICAgICAgIC9kZXYvbmFtZSBbYmxvY2tzXVxuIik7CitAQCAtMTQzOSw3ICsxNDgzLDcgQEAKKyAgIHByaW50ZiAoIiVzICIgVkVSU0lPTiAiICgiIFZFUlNJT05fREFURSAiKVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6UzpoOnYiKSkgIT0gRU9GKQorKyAgd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiQWJjQ2Y6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorICAgICAvKiBTY2FuIHRoZSBjb21tYW5kIGxpbmUgZm9yIG9wdGlvbnMgKi8KKyAgICAgc3dpdGNoIChjKQorICAgICAgIHsKK0BAIC0xNTA5LDYgKzE1NTMsNTEgQEAKKyAJbGlzdGZpbGUgPSBvcHRhcmc7CisgCWJyZWFrOworIAorKyAgICAgIGNhc2UgJ0InOiAgICAgICAgIC8qIEIgOiByZWFkIGluIGJvb3Rjb2RlICovCisrICAgICAgICBpZiAoIHN0cmNtcChvcHRhcmcsICItIikgKQorKwkgIHsKKysJICAgIG1zZ2ZpbGUgPSBmb3BlbihvcHRhcmcsICJyIik7CisrCSAgICBpZiAoICFtc2dmaWxlICkKKysJICAgICAgcGVycm9yKG9wdGFyZyk7CisrCSAgfQorKwllbHNlCisrCSAgbXNnZmlsZSA9IHN0ZGluOworKworKwlpZiAoIG1zZ2ZpbGUgKQorKwkgIHsKKysgICAgICAgICAgICBpZiAoISh0ZW1wbGF0ZV9ib290X2NvZGUgPSBtYWxsb2MoIE1BWF9SRVNFUlZFRCApKSkKKysgICAgICAgICAgICAgICAgZGllKCAiT3V0IG9mIG1lbW9yeSIgKTsKKysJICAgIC8qIFRoZSB0ZW1wbGF0ZSBib290IHNlY3RvciBpbmNsdWRpbmcgcmVzZXJ2ZWQgbXVzdCBub3QgYmUgPiA2NTUzNSAqLworKyAgICAgICAgICAgIHVzZV90ZW1wbGF0ZSA9IDE7CisrCSAgICBpID0gMDsKKysJICAgIGRvCisrCSAgICAgIHsKKysJCWNoID0gZ2V0Yyhtc2dmaWxlKTsKKysJCXN3aXRjaCAoY2gpCisrCQkgIHsKKysJCSAgY2FzZSBFT0Y6CisrCQkgICAgYnJlYWs7CisrCisrCQkgIGRlZmF1bHQ6CisrCQkgICAgdGVtcGxhdGVfYm9vdF9jb2RlW2krK10gPSBjaDsgLyogU3RvcmUgY2hhcmFjdGVyICovCisrCQkgICAgYnJlYWs7CisrCQkgIH0KKysJICAgICAgfQorKwkgICAgd2hpbGUgKCBjaCAhPSBFT0YgJiYgaSA8IE1BWF9SRVNFUlZFRCApOworKwkgICAgY2ggPSBnZXRjKG1zZ2ZpbGUpOyAvKiBmaW5kIG91dCBpZiB3ZSdyZSBhdCBFT0YgKi8KKysKKysJICAgIC8qIEZpbGwgdXAgd2l0aCB6ZXJvcyAqLworKwkgICAgd2hpbGUoIGkgPCBNQVhfUkVTRVJWRUQgKQorKwkJdGVtcGxhdGVfYm9vdF9jb2RlW2krK10gPSAnXDAnOworKwkgICAgCisrCSAgICBpZiAoIGNoICE9IEVPRiApCisrCSAgICAgIHByaW50ZiAoIldhcm5pbmc6IHRlbXBsYXRlIHRvbyBsb25nOyB0cnVuY2F0ZWQgYWZ0ZXIgJWQgYnl0ZXNcbiIsIGkpOworKwkgICAgCisrCSAgICBpZiAoIG1zZ2ZpbGUgIT0gc3RkaW4gKQorKwkgICAgICBmY2xvc2UobXNnZmlsZSk7CisrCSAgfQorKwlicmVhazsKKysKKyAgICAgICBjYXNlICdtJzoJCS8qIG0gOiBTZXQgYm9vdCBtZXNzYWdlICovCisgCWlmICggc3RyY21wKG9wdGFyZywgIi0iKSApCisgCSAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ta2Rvc2ZzLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNDcxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbWtkb3Nmcy1kaXIucGF0Y2gKQEAgLTAsMCArMSw2MzkgQEAKK0FkZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCitXZSdyZSB0cmFja2luZyBhbiBvbGQgcmVsZWFzZSBvZiBkb3Nmc3Rvb2xzIGR1ZSB0byBsaWNlbnNpbmcgaXNzdWVzLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mjc6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMDYgMTI6Mzc6MTMuNDQ1OTUwNzAzICswMDAwCitAQCAtMTgsNiArMTgsMTAgQEAKKyAgICBhcyBhIHJ1bGUpLCBhbmQgbm90IHRoZSBibG9jay4gIEZvciBleGFtcGxlIHRoZSBib290IGJsb2NrIGRvZXMgbm90CisgICAgb2NjdXB5IGEgZnVsbCBjbHVzdGVyLgorIAorKyAgIEp1bmUgMjAwNCAtIEpvcmRhbiBDcm91c2UgKGluZm8ubGludXhAYW1kLmNvbSkKKysgICBBZGRlZCAtZCA8ZGlyZWN0b3J5PiBzdXBwb3J0IHRvIHBvcHVsYXRlIHRoZSBpbWFnZQorKyAgIENvcHlyaWdodCAoQykgMjAwNCwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgQWxsIFJpZ2h0cyBSZXNlcnZlZAorKyAgIAorICAgIEZpeGVzL2FkZGl0aW9ucyBNYXkgMTk5OCBieSBSb21hbiBIb2RlaworICAgIDxSb21hbi5Ib2Rla0BpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT46CisgICAgLSBBdGFyaSBmb3JtYXQgc3VwcG9ydAorQEAgLTcxLDYgKzc1LDggQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKysjaW5jbHVkZSA8bGliZ2VuLmg+CisrI2luY2x1ZGUgPGRpcmVudC5oPgorIAorICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisgI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAwKQorQEAgLTExMCw2ICsxMTYsOCBAQAorICAqIHN1ZmZpY2llbnQgKG9yIGV2ZW4gYmV0dGVyIDopIGZvciA2NCBiaXQgb2Zmc2V0cyBpbiB0aGUgbWVhbnRpbWUgKi8KKyAjZGVmaW5lIGxsc2VlayBsc2VlaworIAorKyNkZWZpbmUgUk9VTkRfVVAodmFsdWUsIGRpdmlzb3IpICh2YWx1ZSArIChkaXZpc29yIC0gKHZhbHVlICUgZGl2aXNvcikpKSAvIGRpdmlzb3IKKysKKyAvKiBDb25zdGFudCBkZWZpbml0aW9ucyAqLworIAorICNkZWZpbmUgVFJVRSAxCQkJLyogQm9vbGVhbiBjb25zdGFudHMgKi8KK0BAIC0xNDksNyArMTU3LDYgQEAKKyAjZGVmaW5lIEFUVFJfVk9MVU1FICA4CQkvKiB2b2x1bWUgbGFiZWwgKi8KKyAjZGVmaW5lIEFUVFJfRElSICAgICAxNgkJLyogZGlyZWN0b3J5ICovCisgI2RlZmluZSBBVFRSX0FSQ0ggICAgMzIJCS8qIGFyY2hpdmVkICovCistCisgI2RlZmluZSBBVFRSX05PTkUgICAgMAkJLyogbm8gYXR0cmlidXRlIGJpdHMgKi8KKyAjZGVmaW5lIEFUVFJfVU5VU0VEICAoQVRUUl9WT0xVTUUgfCBBVFRSX0FSQ0ggfCBBVFRSX1NZUyB8IEFUVFJfSElEREVOKQorIAkvKiBhdHRyaWJ1dGUgYml0cyB0aGF0IGFyZSBjb3BpZWQgImFzIGlzIiAqLworQEAgLTI0NSw2ICsyNTIsMTkgQEAKKyAgIF9fdTMyCQlyZXNlcnZlZDJbNF07CisgfTsKKyAKKysvKiBUaGlzIHN0b3JlcyB1cCB0byAxMyBjaGFycyBvZiB0aGUgbmFtZSAqLworKworK3N0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CisrICAgICAgICBfX3U4ICAgIGlkOyAgICAgICAgICAgICAvKiBzZXF1ZW5jZSBudW1iZXIgZm9yIHNsb3QgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTBfNFsxMF07ICAgIC8qIGZpcnN0IDUgY2hhcmFjdGVycyBpbiBuYW1lICovCisrICAgICAgICBfX3U4ICAgIGF0dHI7ICAgICAgICAgICAvKiBhdHRyaWJ1dGUgYnl0ZSAqLworKyAgICAgICAgX191OCAgICByZXNlcnZlZDsgICAgICAgLyogYWx3YXlzIDAgKi8KKysgICAgICAgIF9fdTggICAgYWxpYXNfY2hlY2tzdW07IC8qIGNoZWNrc3VtIGZvciA4LjMgYWxpYXMgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTVfMTBbMTJdOyAgIC8qIDYgbW9yZSBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKysgICAgICAgIF9fdTE2ICAgc3RhcnQ7ICAgICAgICAgIC8qIHN0YXJ0aW5nIGNsdXN0ZXIgbnVtYmVyLCAwIGluIGxvbmcgc2xvdHMgKi8KKysgICAgICAgIF9fdTggICAgbmFtZTExXzEyWzRdOyAgIC8qIGxhc3QgMiBjaGFyYWN0ZXJzIGluIG5hbWUgKi8KKyt9OworKworIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkKKyAgIHsKKyAgICAgY2hhcgluYW1lWzhdLCBleHRbM107CS8qIG5hbWUgYW5kIGV4dGVuc2lvbiAqLworQEAgLTI5Myw2ICszMTMsMTUgQEAKKyAKKyAjZGVmaW5lIE1FU1NBR0VfT0ZGU0VUIDI5CS8qIE9mZnNldCBvZiBtZXNzYWdlIGluIGFib3ZlIGNvZGUgKi8KKyAKKysvKiBTcGVjaWFsIHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIGRpcmVjdG9yaWVzIGFzIHdlIGFkZCB0aGVtIGZvciB0aGUgLWQgb3B0aW9uICovCisrCisrc3RydWN0IGRpcl9lbnRyeSB7CisrICBpbnQgcm9vdDsgICAgICAgICAgICAgICAgICAgICAgIC8qIFNwZWNpZmllcyBpZiB0aGlzIGlzIHRoZSByb290IGRpciBvciBub3QgKi8KKysgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0YWJsZSAqLworKyAgaW50IGVudHJpZXM7ICAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUgKi8KKysgIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKnRhYmxlOyAgLyogUG9pbnRlciB0byB0aGUgZW50cnkgdGFibGUgKi8KKyt9OworKworIC8qIEdsb2JhbCB2YXJpYWJsZXMgLSB0aGUgcm9vdCBvZiBhbGwgZXZpbCA6LSkgLSBzZWUgdGhlc2UgYW5kIHdlZXAhICovCisgCisgc3RhdGljIGNoYXIgKnRlbXBsYXRlX2Jvb3RfY29kZTsJLyogVmFyaWFibGUgdG8gc3RvcmUgYSBmdWxsIHRlbXBsYXRlIGJvb3Qgc2VjdG9yIGluICovCitAQCAtMzI2LDYgKzM1NSw5IEBACisgc3RhdGljIGludCBzaXplX3Jvb3RfZGlyOwkvKiBTaXplIG9mIHRoZSByb290IGRpcmVjdG9yeSBpbiBieXRlcyAqLworIHN0YXRpYyBpbnQgc2VjdG9yc19wZXJfY2x1c3RlciA9IDA7CS8qIE51bWJlciBvZiBzZWN0b3JzIHBlciBkaXNrIGNsdXN0ZXIgKi8KKyBzdGF0aWMgaW50IHJvb3RfZGlyX2VudHJpZXMgPSAwOwkvKiBOdW1iZXIgb2Ygcm9vdCBkaXJlY3RvcnkgZW50cmllcyAqLworK3N0YXRpYyBpbnQgcm9vdF9kaXJfbnVtX2VudHJpZXMgPSAwOworK3N0YXRpYyBpbnQgbGFzdF9jbHVzdGVyX3dyaXR0ZW4gPSAwOworKworIHN0YXRpYyBjaGFyICpibGFua19zZWN0b3I7CQkvKiBCbGFuayBzZWN0b3IgLSBhbGwgemVyb3MgKi8KKyBzdGF0aWMgaW50IGhpZGRlbl9zZWN0b3JzID0gMDsJCS8qIE51bWJlciBvZiBoaWRkZW4gc2VjdG9ycyAqLworIAorQEAgLTM5OSw3ICs0MzEsNiBAQAorICAgfQorIH0KKyAKKy0KKyAvKiBNYXJrIGEgc3BlY2lmaWVkIHNlY3RvciBhcyBoYXZpbmcgYSBwYXJ0aWN1bGFyIHZhbHVlIGluIGl0J3MgRkFUIGVudHJ5ICovCisgCisgc3RhdGljIHZvaWQKK0BAIC0xMjY2LDYgKzEyOTcsOSBAQAorICAgICAgIGRpZSAoInVuYWJsZSB0byBhbGxvY2F0ZSBzcGFjZSBmb3Igcm9vdCBkaXJlY3RvcnkgaW4gbWVtb3J5Iik7CisgICAgIH0KKyAKKysKKysgIGxhc3RfY2x1c3Rlcl93cml0dGVuID0gMjsKKysgIAorICAgbWVtc2V0KHJvb3RfZGlyLCAwLCBzaXplX3Jvb3RfZGlyKTsKKyAgIGlmICggbWVtY21wKHZvbHVtZV9uYW1lLCAiICAgICAgICAgICAiLCAxMSkgKQorICAgICB7CitAQCAtMTMxNCwxMSArMTM0OCwxMSBAQAorICAgfQorICAgCisgICBpZiAoIShibGFua19zZWN0b3IgPSBtYWxsb2MoIHNlY3Rvcl9zaXplICkpKQorLSAgICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrICAgIGRpZSggIk91dCBvZiBtZW1vcnkiICk7CisrICAKKyAgIG1lbXNldChibGFua19zZWN0b3IsIDAsIHNlY3Rvcl9zaXplKTsKKyB9CistCistCisrICAKKyAvKiBXcml0ZSB0aGUgbmV3IGZpbGVzeXN0ZW0ncyBkYXRhIHRhYmxlcyB0byB3aGVyZXZlciB0aGV5J3JlIGdvaW5nIHRvIGVuZCB1cCEgKi8KKyAKKyAjZGVmaW5lIGVycm9yKHN0cikJCQkJXAorQEAgLTEzNDAsNyArMTM3NCw3IEBACisgICBkbyB7CQkJCQkJCVwKKyAgICAgaW50IF9fc2l6ZSA9IChzaXplKTsJCQkJXAorICAgICBpZiAod3JpdGUgKGRldiwgYnVmLCBfX3NpemUpICE9IF9fc2l6ZSkJCVwKKy0JZXJyb3IgKCJmYWlsZWQgd2hpbHN0IHdyaXRpbmcgIiBlcnJzdHIpOwlcCisrICAgICAgIGVycm9yICgiZmFpbGVkIHdoaWxzdCB3cml0aW5nICIgZXJyc3RyKTsJXAorICAgfSB3aGlsZSgwKQorIAorIAorQEAgLTE0MTIsNiArMTQ0Niw0NTIgQEAKKyAgIGZyZWUgKGZhdCk7ICAvKiBGcmVlIHVwIHRoZSBmYXQgdGFibGUgc3BhY2UgcmVzZXJ2ZWQgZHVyaW5nIHNldHVwX3RhYmxlcyAqLworIH0KKyAKKysvKiBBZGQgYSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgYWxzbyB3cml0ZSBpdCBpbnRvIHRoZSBpbWFnZSAqLworKworK3N0YXRpYyB2b2lkIGNvcHlfZmlsZW5hbWUoY2hhciAqZmlsZW5hbWUsIGNoYXIgKmJhc2UsIGNoYXIgKmV4dCkgeworKyAgCisrICBjaGFyICpjaCA9IGZpbGVuYW1lOworKyAgaW50IGksIGxlbjsKKysKKysgIG1lbXNldChiYXNlLCAweDIwLCA4KTsKKysgIG1lbXNldChleHQsIDB4MjAsIDMpOworKyAgCisrICBmb3IobGVuID0gMCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKSB7CisrICAgIGJhc2VbbGVuKytdID0gdG91cHBlcigqY2gpOworKyAgICBpZiAobGVuID09IDgpIGJyZWFrOworKyAgfQorKyAgCisrICBmb3IgKCA7ICpjaCAmJiAqY2ggIT0gJy4nOyBjaCsrKTsKKysgIGlmICgqY2gpIGNoKys7CisrICAKKysgIGZvcihsZW4gPSAwIDsgKmNoOyBjaCsrKSB7CisrICAgIGV4dFtsZW4rK10gPSB0b3VwcGVyKCpjaCk7CisrICAgIGlmIChsZW4gPT0gMykgYnJlYWs7CisrICB9CisrfQorKworKy8qIENoZWNrIGZvciBhbiAuYXR0cmliLjxmaWxlbmFtZT4gZmlsZSwgYW5kIHJlYWQgdGhlIGF0dHJpYnV0ZXMgdGhlcmVpbiAqLworKworKy8qIFdlIGFyZSBnb2luZyB0byBiZSBwcmV0dHkgcGVkYW50aWMgYWJvdXQgdGhpcy4gIFRoZSBmaWxlIG5lZWRzIDMKKysgICBieXRlcyBhdCB0aGUgYmVnaW5uaW5nLCB0aGUgYXR0cmlidXRlcyBhcmUgbGlzdGVkIGluIHRoaXMgb3JkZXI6CisrICAgCisrICAgKEgpaWRkZW58KFMpeXN0ZW18KEEpcmNoaXZlZAorKyAgIAorKyAgIEEgY2FwaXRhbCBIU0EgbWVhbnMgdG8gZW5hYmxlIGl0LCBhbnl0aGluZyBlbHNlIHdpbGwgZGlzYWJsZSBpdAorKyAgIChJIHJlY29tbWVuZCBhICctJykgVGhlIHVuaXggdXNlciBhdHRyaWJ1dGVzIHdpbGwgc3RpbGwgYmUgdXNlZCAKKysgICBmb3Igd3JpdGUgYWNjZXNzLgorKworKyAgIEZvciBleGFtcGxlLCB0byBlbmFibGUgc3lzdGVtIGZpbGUgYWNjZXNzIGZvciBsZGxpbnV4LnN5cywgd3JpdGUgCisrICAgdGhlIGZvbGxvd2luZyB0byAuYXR0cmliLmxkbGludXguc3lzOiAtUy0KKysqLworKworK3Vuc2lnbmVkIGNoYXIgY2hlY2tfYXR0cmliX2ZpbGUoY2hhciAqZGlyLCBjaGFyICpmaWxlbmFtZSkgeworKworKyAgY2hhciBhdHRyaWJbNF0gPSB7ICctJywgJy0nLCAnLScgfTsKKysgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IDA7CisrICBpbnQgcmV0ID0gQVRUUl9OT05FOworKyAgaW50IGZkID0gLTE7CisrCisrICBidWZmZXIgPSAoY2hhciAqKSBjYWxsb2MoMSwgc3RybGVuKGRpcikgKyBzdHJsZW4oZmlsZW5hbWUpICsgMTApOworKyAgaWYgKCFidWZmZXIpIHJldHVybiBBVFRSX05PTkU7CisrCisrICBzcHJpbnRmKGJ1ZmZlciwgIiVzLy5hdHRyaWIuJXMiLCBkaXIsIGZpbGVuYW1lKTsKKysKKysgIGlmIChhY2Nlc3MoYnVmZmVyLCBSX09LKSkgCisrICAgIGdvdG8gZXhpdF9hdHRyaWI7CisrCisrICBpZiAoKGZkID0gb3BlbihidWZmZXIsIE9fUkRPTkxZLCAwKSkgPCAwKQorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKworKyAgaWYgKHJlYWQoZmQsIGF0dHJpYiwgMykgPCAwKQorKyAgICBnb3RvIGV4aXRfYXR0cmliOworKyAgCisrICBpZiAoYXR0cmliWzBdID09ICdIJykgcmV0IHw9IEFUVFJfSElEREVOOworKyAgaWYgKGF0dHJpYlsxXSA9PSAnUycpIHJldCB8PSBBVFRSX1NZUzsKKysgIGlmIChhdHRyaWJbMl0gPT0gJ0EnKSByZXQgfD0gQVRUUl9BUkNIOworKworKyAgcHJpbnRmKCIlczogU2V0dGluZyBhdHJyaWJ1dGUgJXhcbiIsIGZpbGVuYW1lLCByZXQpOworKworKyBleGl0X2F0dHJpYjoKKysgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisrICBpZiAoYnVmZmVyKSBmcmVlKGJ1ZmZlcik7CisrCisrICByZXR1cm4gcmV0OworK30KKysKKytzdGF0aWMgdm9pZCBjb3B5X25hbWUoY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSwgY2hhciAqKnBvaW50ZXIpIHsKKysgIGludCBpOworKworKyAgZm9yKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAyKSB7CisrICAgIGlmICgqcG9pbnRlcikgeworKyAgICAgIGJ1ZmZlcltpXSA9ICoqcG9pbnRlcjsKKysgICAgICBidWZmZXJbaSArIDFdID0gMHgwMDsKKysgICAgICAqcG9pbnRlciA9ICoqcG9pbnRlciA/ICpwb2ludGVyICsgMSA6IDA7CisrICAgIH0KKysgICAgZWxzZSB7CisrICAgICAgYnVmZmVyW2ldID0gMHhGRjsKKysgICAgICBidWZmZXJbaSArIDFdID0gMHhGRjsKKysgICAgfQorKyAgfSAgCisrfQorKworK3N0YXRpYyBpbnQgYWRkX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBkaXJfZW50cnkgKmRpciwgdW5zaWduZWQgY2hhciBhdHRyKSAKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdGF0OworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZW50cnk7CisrICBpbnQgaW5maWxlID0gMDsKKysgIGludCBzZWN0b3JzLCBjbHVzdGVyczsKKysgIHN0cnVjdCB0bSAqY3RpbWU7CisrICBpbnQgYywgczsKKysgIGludCBwdHI7CisrICBjaGFyICpidWZmZXIsICpiYXNlOworKyAgaW50IHN0YXJ0OworKyAgaW50IHVzZWRzZWMsIHRvdGFsc2VjOworKworKyAgY2hhciBuYW1lODNbOF0sIGV4dDgzWzNdOworKworKyAgc3RydWN0IG1zZG9zX2Rpcl9zbG90ICpzbG90OworKyAgaW50IGk7CisrICBjaGFyICpwOworKworKyAgLyogVGhlIHJvb3QgZGlyZWN0b3J5IGlzIHN0YXRpYywgZXZlcnl0aGluZyBlbHNlIGdyb3dzIGFzIG5lZWRlZCAqLworKworKyAgaWYgKGRpci0+cm9vdCkgeworKyAgICBpZiAoZGlyLT5jb3VudCA9PSBkaXItPmVudHJpZXMpIHsKKysgICAgICBwcmludGYoIkVycm9yIC0gdG9vIG1hbnkgZGlyZWN0b3J5IGVudHJpZXNcbiIpOworKyAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgaWYgKCFkaXItPnRhYmxlKSAKKysJZGlyLT50YWJsZSA9IAorKwkgIChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpOworKyAgICAgIGVsc2UgeworKwlkaXItPnRhYmxlID0gCisrCSAgKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKikgcmVhbGxvYyhkaXItPnRhYmxlLCAoZGlyLT5lbnRyaWVzICsgMSkgKiAKKysJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysKKysJbWVtc2V0KCZkaXItPnRhYmxlW2Rpci0+ZW50cmllc10sIDAsIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrICAgICAgfQorKworKyAgICAgIGRpci0+ZW50cmllcysrOworKyAgICB9CisrICB9CisrCisrICBpbmZpbGUgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSwgMCk7CisrICBpZiAoIWluZmlsZSkgcmV0dXJuOworKyAgCisrICBpZiAoZnN0YXQoaW5maWxlLCAmc3RhdCkpCisrICAgIGdvdG8gZXhpdF9hZGQ7CisrIAorKyAgaWYgKFNfSVNDSFIoc3RhdC5zdF9tb2RlKSB8fFNfSVNCTEsoc3RhdC5zdF9tb2RlKSB8fAorKyAgICAgIFNfSVNGSUZPKHN0YXQuc3RfbW9kZSkgfHwgU19JU0xOSyhzdGF0LnN0X21vZGUpKSB7CisrICAgIHByaW50ZigiRXJyb3IgLSBjYW5ub3QgY3JlYXRlIGEgc3BlY2lhbCBmaWxlIGluIGEgRkFURlNcbiIpOworKyAgICBnb3RvIGV4aXRfYWRkOworKyAgfQorKworKyAgLyogRklYTUU6IFRoaXMgaXNuJ3QgdmVyeSBwcmV0dHkgKi8KKysKKysgIHVzZWRzZWMgPSBzdGFydF9kYXRhX3NlY3RvciArIChzaXplX3Jvb3RfZGlyIC8gc2VjdG9yX3NpemUpICsKKysgICAgKGxhc3RfY2x1c3Rlcl93cml0dGVuICogYnMuY2x1c3Rlcl9zaXplKTsKKysKKysgIHRvdGFsc2VjID0gYmxvY2tzICogQkxPQ0tfU0laRSAvIHNlY3Rvcl9zaXplOworKyAgCisrICAvKiBGaWd1cmUgb3V0IGhvdyBtYW55IHNlY3RvcnMgLyBjbHVzdG9ycyB0aGUgZmlsZSByZXF1aXJlcyAqLworKworKyAgc2VjdG9ycyA9IFJPVU5EX1VQKHN0YXQuc3Rfc2l6ZSwgc2VjdG9yX3NpemUpOworKyAgY2x1c3RlcnMgPSBST1VORF9VUChzZWN0b3JzLCAoaW50KSBicy5jbHVzdGVyX3NpemUpOworKworKyAgaWYgKHVzZWRzZWMgKyBzZWN0b3JzID4gdG90YWxzZWMpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtICVzIGlzIHRvbyBiaWcgKCVkIHZzICVkKVxuIiwgZmlsZW5hbWUsIHNlY3RvcnMsIHRvdGFsc2VjIC0gdXNlZHNlYyk7CisrICAgIGNsb3NlKGluZmlsZSk7CisrICAgIHJldHVybiAtMTsKKysgIH0KKysKKysgIHByaW50ZigiQUREICVzXG4iLCBmaWxlbmFtZSk7CisrCisrICAvKiBHcmFiIHRoZSBiYXNlbmFtZSBvZiB0aGUgZmlsZSAqLworKyAgYmFzZSA9IGJhc2VuYW1lKGZpbGVuYW1lKTsKKysgIAorKyAgLyogRXh0cmFjdCBvdXQgdGhlIDguMyBuYW1lICovCisrICBjb3B5X2ZpbGVuYW1lKGJhc2UsIG5hbWU4MywgZXh0ODMpOworKworKyAgLyogTWFrZSBhbiBleHRlbmRlZCBuYW1lIHNsb3QgKi8KKysKKysgIHNsb3QgPSAoc3RydWN0IG1zZG9zX2Rpcl9zbG90ICopICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrICBzbG90LT5pZCA9ICdBJzsgIAorKyAgc2xvdC0+YXR0ciA9IDB4MEY7CisrICBzbG90LT5yZXNlcnZlZCA9IDA7CisrICBzbG90LT5zdGFydCA9IDA7CisrICAKKysgIHNsb3QtPmFsaWFzX2NoZWNrc3VtID0gMDsKKysgIAorKyAgZm9yKGkgPSAwOyBpIDwgODsgaSsrKSAKKysgICAgc2xvdC0+YWxpYXNfY2hlY2tzdW0gPSAoKChzbG90LT5hbGlhc19jaGVja3N1bSYxKTw8Nyl8KChzbG90LT5hbGlhc19jaGVja3N1bSYweGZlKT4+MSkpICsgbmFtZTgzW2ldOworKyAgCisrICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspIAorKyAgICBzbG90LT5hbGlhc19jaGVja3N1bSA9ICgoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjEpPDw3KXwoKHNsb3QtPmFsaWFzX2NoZWNrc3VtJjB4ZmUpPj4xKSkgKyBleHQ4M1tpXTsKKysKKysgIHAgPSBiYXNlOworKworKyAgY29weV9uYW1lKHNsb3QtPm5hbWUwXzQsIDEwLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTVfMTAsIDEyLCAmcCk7CisrICBjb3B5X25hbWUoc2xvdC0+bmFtZTExXzEyLCA0LCAmcCk7CisrCisrCisrICAvKiBHZXQgdGhlIGVudHJ5IGZyb20gdGhlIHJvb3QgZmlsZXN5dGVtICovCisrICBlbnRyeSA9ICZkaXItPnRhYmxlW2Rpci0+Y291bnQrK107CisrCisrICBzdHJuY3B5KGVudHJ5LT5uYW1lLCBuYW1lODMsIDgpOworKyAgc3RybmNweShlbnRyeS0+ZXh0LCBleHQ4MywgMyk7CisrCisrCisrICAvKiBJZiB0aGUgdXNlciBoYXMgaXQgcmVhZCBvbmx5LCB0aGVuIGFkZCByZWFkIG9ubHkgdG8gdGhlIGluY29taW5nCisrICAgICBhdHRyaWJ1dGUgc2V0dGluZ3MgKi8KKysKKysgIGlmICghKHN0YXQuc3RfbW9kZSAmIFNfSVdVU1IpKSBhdHRyIHw9IEFUVFJfUk87CisrICBlbnRyeS0+YXR0ciA9IGF0dHI7CisrCisrICAvKiBTZXQgdGhlIGFjY2VzcyB0aW1lIG9uIHRoZSBmaWxlICovCisrICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworKworKyAgZW50cnktPnRpbWUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoKGN0aW1lLT50bV9zZWMgPj4gMSkgKworKwkJCQkJICAoY3RpbWUtPnRtX21pbiA8PCA1KSArIChjdGltZS0+dG1faG91ciA8PCAxMSkpKTsKKysKKysgIGVudHJ5LT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKysJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKysJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKysKKysgIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKysgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisrICBlbnRyeS0+c2l6ZSA9IHN0YXQuc3Rfc2l6ZTsKKysKKysgIHN0YXJ0ID0gbGFzdF9jbHVzdGVyX3dyaXR0ZW47CisrCisrICBlbnRyeS0+c3RhcnQgPSBDVF9MRV9XKHN0YXJ0KTsgIC8qIHN0YXJ0IHNlY3RvciAqLworKyAgZW50cnktPnN0YXJ0aGkgPSBDVF9MRV9XKChzdGFydCAmIDB4RkZGRjAwMDApID4+IDE2KTsgLyogSGlnaCBzdGFydCBzZWN0b3IgKGZvciBGQVQzMikgKi8KKysKKysgIC8qIFdlIG1hcmsgYWxsIG9mIHRoZSBjbHVzdGVycyB3ZSB1c2UgaW4gdGhlIEZBVCAqLworKyAgCisrICBmb3IoYyA9IDA7IGMgPCBjbHVzdGVyczsgYysrICkgeworKyAgICBpbnQgZnJlZTsKKysgICAgaW50IG5leHQgPSBjID09IChjbHVzdGVycyAtIDEpID8gRkFUX0VPRiA6IHN0YXJ0ICsgYyArIDE7CisrICAgIG1hcmtfRkFUX2NsdXN0ZXIoc3RhcnQgKyBjLCBuZXh0KTsgIAorKyAgICBsYXN0X2NsdXN0ZXJfd3JpdHRlbisrOworKyAgfQorKyAgCisrICAvKiBUaGlzIGNvbmZ1c2VkIG1lIHRvbyAtIGNsdXN0ZXIgMiBzdGFydHMgYWZ0ZXIgdGhlCisrICAgICByb290IGRpcmVjdG9yeSBkYXRhIC0gc2VhcmNoIG1lIGFzIHRvIHdoeSAqLworKworKyAgcHRyID0gKHN0YXJ0X2RhdGFfc2VjdG9yICogc2VjdG9yX3NpemUpICsgc2l6ZV9yb290X2RpcjsKKysgIHB0ciArPSAoc3RhcnQgLSAyKSAqIGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplOworKyAgICAKKysgIGJ1ZmZlciA9IChjaGFyICopIG1hbGxvYyhzZWN0b3Jfc2l6ZSk7CisrCisrICBpZiAoIWJ1ZmZlcikgeworKyAgICBwcmludGYoIkVycm9yIC0gY291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKysgICAgZ290byBleGl0X2FkZDsKKysgIH0KKysKKysgIC8qIFdyaXRlIHRoZSBmaWxlIGludG8gdGhlIGZpbGUgYmxvY2sgKi8KKysKKysgIHNlZWt0byhwdHIsICJkYXRhZmlsZSIpOworKworKyAgd2hpbGUoMSkgeworKyAgICBpbnQgc2l6ZSA9IHJlYWQoaW5maWxlLCBidWZmZXIsIHNlY3Rvcl9zaXplKTsgICAgCisrICAgIGlmIChzaXplIDw9IDApIGJyZWFrOworKyAgICAKKysgICAgd3JpdGVidWYoYnVmZmVyLCBzaXplLCAiZGF0YSIpOyAgICAKKysgIH0KKysKKysgZXhpdF9hZGQ6CisrICBpZiAoaW5maWxlKSBjbG9zZShpbmZpbGUpOworK30KKysKKysvKiBBZGQgYSBuZXcgZGlyZWN0b3J5IHRvIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGVudHJ5LCBhbmQgaW4gdHVybiBwb3B1bGF0ZSAKKysgICBpdCB3aXRoIGl0cyBvd24gZmlsZXMgKi8KKysKKysvKiBGSVhNRTogIFRoaXMgc2hvdWxkIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc2l6ZSB0byBhZGQgaXRzZWxmICovCisrCisrc3RhdGljIHZvaWQgYWRkX2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZSwgc3RydWN0IGRpcl9lbnRyeSAqZGlyKSB7CisrCisrICBzdHJ1Y3QgZGlyX2VudHJ5ICpuZXdkaXIgPSAwOworKyAgc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqZW50cnk7CisrICBzdHJ1Y3QgdG0gKmN0aW1lOworKyAgRElSICpyZGRpciA9IG9wZW5kaXIoZmlsZW5hbWUpOworKyAgc3RydWN0IGRpcmVudCAqZGVudHJ5ID0gMDsKKysgIGludCByZW1haW47CisrICBjaGFyICpkYXRhOworKworKyAgLyogSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0ICovCisrICBpZiAoIXJkZGlyKSByZXR1cm47CisrICAKKysgIGlmIChkaXItPnJvb3QpIHsKKysgICAgaWYgKGRpci0+Y291bnQgPT0gZGlyLT5lbnRyaWVzKSB7CisrICAgICAgcHJpbnRmKCJFcnJvciAtIHRvbyBtYW55IGRpcmVjdG9yeSBlbnRyaWVzXG4iKTsKKysgICAgICBnb3RvIGV4aXRfYWRkX2RpcjsKKysgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChkaXItPmNvdW50ID09IGRpci0+ZW50cmllcykgeworKyAgICAgIGlmICghZGlyLT50YWJsZSkgCisrCWRpci0+dGFibGUgPSAoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICBlbHNlIHsKKysJZGlyLT50YWJsZSA9IChzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5ICopIHJlYWxsb2MoZGlyLT50YWJsZSwgKGRpci0+ZW50cmllcyArIDEpICogCisrCQkJCQkJCXNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSk7CisrCisrCS8qIFplcm8gaXQgb3V0IHRvIGF2b2lkIGlzc3VlcyAqLworKwltZW1zZXQoJmRpci0+dGFibGVbZGlyLT5lbnRyaWVzXSwgMCwgc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpKTsKKysgICAgICB9CisrCWRpci0+ZW50cmllcysrOworKyAgICB9CisrICB9CisrCisrICAvKiBOb3csIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgZW50cnkgZm9yIHRoZSBuZXcgZGlyZWN0b3J5ICovCisrICBuZXdkaXIgPSAoc3RydWN0IGRpcl9lbnRyeSAqKSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpKTsKKysgIGlmICghbmV3ZGlyKSBnb3RvIGV4aXRfYWRkX2RpcjsKKysKKysgIGVudHJ5ID0gJmRpci0+dGFibGVbZGlyLT5jb3VudCsrXTsKKysKKysgIHN0cm5jcHkoZW50cnktPm5hbWUsIGJhc2VuYW1lKGZpbGVuYW1lKSwgc2l6ZW9mKGVudHJ5LT5uYW1lKSk7CisrICAKKysgIGVudHJ5LT5hdHRyID0gQVRUUl9ESVI7CisrICBjdGltZSA9IGxvY2FsdGltZSgmY3JlYXRlX3RpbWUpOworKworKyAgZW50cnktPnRpbWUgPSBDVF9MRV9XKCh1bnNpZ25lZCBzaG9ydCkoKGN0aW1lLT50bV9zZWMgPj4gMSkgKworKwkJCQkJICAoY3RpbWUtPnRtX21pbiA8PCA1KSArIChjdGltZS0+dG1faG91ciA8PCAxMSkpKTsKKysKKysgIGVudHJ5LT5kYXRlID0gQ1RfTEVfVygodW5zaWduZWQgc2hvcnQpKGN0aW1lLT50bV9tZGF5ICsKKysJCQkJICAgICAgKChjdGltZS0+dG1fbW9uKzEpIDw8IDUpICsKKysJCQkJICAgICAgKChjdGltZS0+dG1feWVhci04MCkgPDwgOSkpKTsKKysKKysgIGVudHJ5LT5jdGltZV9tcyA9IDA7CisrICBlbnRyeS0+Y3RpbWUgPSBlbnRyeS0+dGltZTsKKysgIGVudHJ5LT5jZGF0ZSA9IGVudHJ5LT5kYXRlOworKyAgZW50cnktPmFkYXRlID0gZW50cnktPmRhdGU7CisrCisrICAvKiBOb3csIHJlYWQgdGhlIGRpcmVjdG9yeSAqLworKworKyAgd2hpbGUoKGRlbnRyeSA9IHJlYWRkaXIocmRkaXIpKSkgeworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciAqYnVmZmVyOworKyAgICAKKysgICAgaWYgKCFzdHJjbXAoZGVudHJ5LT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZW50cnktPmRfbmFtZSwgIi4uIikpCisrICAgICAgY29udGludWU7CisrCisrICAgIC8qIERPUyB3b3VsZG4ndCBsaWtlIGEgdHlwaWNhbCB1bml4IC4gKGRvdCkgZmlsZSwgc28gd2Ugc2tpcCB0aG9zZSB0b28gKi8KKysgICAgaWYgKGRlbnRyeS0+ZF9uYW1lWzBdID09ICcuJykgY29udGludWU7CisrCisrICAgIGJ1ZmZlciA9IG1hbGxvYyhzdHJsZW4oZmlsZW5hbWUpICsgc3RybGVuKGRlbnRyeS0+ZF9uYW1lKSArIDMpOworKyAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrICAgIAorKyAgICBzcHJpbnRmKGJ1ZmZlciwgIiVzLyVzIiwgZmlsZW5hbWUsIGRlbnRyeS0+ZF9uYW1lKTsKKysgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworKyAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSAKKysJYWRkX2RpcmVjdG9yeShidWZmZXIsIG5ld2Rpcik7CisrICAgICAgZWxzZSBpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworKwl1bnNpZ25lZCBjaGFyIGF0dHJpYiA9IGNoZWNrX2F0dHJpYl9maWxlKGZpbGVuYW1lLCBkZW50cnktPmRfbmFtZSk7CisrCWFkZF9maWxlKGJ1ZmZlciwgbmV3ZGlyLCBhdHRyaWIpOworKyAgICAgIH0KKysgICAgfQorKyAKKysgICAgZnJlZShidWZmZXIpOworKyAgfQorKyAgCisrICAvKiBOb3cgdGhhdCB0aGUgZW50aXJlIGRpcmVjdG9yeSBoYXMgYmVlbiB3cml0dGVuLCBnbyBhaGVhZCBhbmQgd3JpdGUgdGhlIGRpcmVjdG9yeQorKyAgICAgZW50cnkgYXMgd2VsbCAqLworKworKyAgZW50cnktPnN0YXJ0ID0gQ1RfTEVfVyhsYXN0X2NsdXN0ZXJfd3JpdHRlbik7CisrICBlbnRyeS0+c3RhcnRoaSA9IENUX0xFX1coKGxhc3RfY2x1c3Rlcl93cml0dGVuICYgMHhGRkZGMDAwMCkgPj4gMTYpOyAKKysgIGVudHJ5LT5zaXplID0gbmV3ZGlyLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KTsKKysgIAorKyAgcmVtYWluID0gZW50cnktPnNpemU7CisrICBkYXRhID0gKGNoYXIgKikgbmV3ZGlyLT50YWJsZTsKKysKKysgIHdoaWxlKHJlbWFpbikgeworKyAgICBpbnQgc2l6ZSA9IAorKyAgICAgIHJlbWFpbiA+IGJzLmNsdXN0ZXJfc2l6ZSAqIHNlY3Rvcl9zaXplID8gYnMuY2x1c3Rlcl9zaXplICogc2VjdG9yX3NpemUgOiByZW1haW47CisrCisrICAgIGludCBwb3MgPSAoc3RhcnRfZGF0YV9zZWN0b3IgKiBzZWN0b3Jfc2l6ZSkgKyBzaXplX3Jvb3RfZGlyOworKyAgICBwb3MgKz0gKGxhc3RfY2x1c3Rlcl93cml0dGVuIC0gMikgKiBicy5jbHVzdGVyX3NpemUgKiBzZWN0b3Jfc2l6ZTsKKysgICAgCisrICAgIHNlZWt0byhwb3MsICJhZGRfZGlyIik7CisrICAgIHdyaXRlYnVmKGRhdGEsIHNpemUsICJhZGRfZGlyIik7CisrICAgIAorKyAgICByZW1haW4gLT0gc2l6ZTsKKysgICAgZGF0YSArPSBzaXplOworKworKyAgICBtYXJrX0ZBVF9jbHVzdGVyKGxhc3RfY2x1c3Rlcl93cml0dGVuLCByZW1haW4gPyBsYXN0X2NsdXN0ZXJfd3JpdHRlbiArIDEgOiBGQVRfRU9GKTsgICAgICAKKysgICAgbGFzdF9jbHVzdGVyX3dyaXR0ZW4rKzsKKysgIH0KKysgIAorKyBleGl0X2FkZF9kaXI6CisrICBpZiAocmRkaXIpIGNsb3NlZGlyKHJkZGlyKTsKKysgIGlmIChuZXdkaXItPnRhYmxlKSBmcmVlKG5ld2Rpci0+dGFibGUpOworKyAgaWYgKG5ld2RpcikgZnJlZShuZXdkaXIpOworK30gIAorKyAgCisrLyogR2l2ZW4gYSBkaXJlY3RvcnksIGFkZCBhbGwgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCisrICAgaW1hZ2UuICAKKysqLworKworK3N0YXRpYyB2b2lkIGFkZF9yb290X2RpcmVjdG9yeShjaGFyICpkaXJuYW1lKSAKKyt7CisrICBESVIgKmRpciA9IG9wZW5kaXIoZGlybmFtZSk7CisrICBzdHJ1Y3QgZGlyZW50ICplbnRyeSA9IDA7CisrICBzdHJ1Y3QgZGlyX2VudHJ5ICpuZXdkaXIgPSAwOworKworKyAgaWYgKCFkaXIpIHsKKysgICAgcHJpbnRmKCJFcnJvciAtIGRpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdFxuIiwgZGlybmFtZSk7CisrICAgIHJldHVybjsKKysgIH0KKysgCisrICAvKiBDcmVhdGUgdGhlIHJvb3QgZGlyZWN0b3J5IHN0cnVjdHVyZSAtIHRoaXMgaXMgYSBiaXQgZGlmZmVyZW50IHRoZW4KKysgICAgIGFib3ZlLCBiZWNhdXNlIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgd2UganVzdCByZWZlciB0byBpdC4gKi8KKysKKysgIG5ld2RpciA9IChzdHJ1Y3QgZGlyX2VudHJ5ICopIGNhbGxvYygxLHNpemVvZihzdHJ1Y3QgZGlyX2VudHJ5KSk7CisrCisrICBpZiAoIW5ld2RpcikgeworKyAgICBjbG9zZWRpcihkaXIpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBuZXdkaXItPmVudHJpZXMgPSByb290X2Rpcl9lbnRyaWVzOworKyAgbmV3ZGlyLT5yb290ID0gMTsKKysgIG5ld2Rpci0+Y291bnQgPSAwOworKyAgbmV3ZGlyLT50YWJsZSA9IHJvb3RfZGlyOworKworKyAgd2hpbGUoKGVudHJ5ID0gcmVhZGRpcihkaXIpKSkgeworKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKysgICAgY2hhciAqYnVmZmVyOworKyAgICAKKysgICAgaWYgKCFzdHJjbXAoZW50cnktPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGVudHJ5LT5kX25hbWUsICIuLiIpKQorKyAgICAgIGNvbnRpbnVlOworKyAgICAKKysgICAgLyogRE9TIHdvdWxkbid0IGxpa2UgYSB0eXBpY2FsIHVuaXggLiAoZG90KSBmaWxlLCBzbyB3ZSBza2lwIHRob3NlIHRvbyAqLworKyAgICBpZiAoZW50cnktPmRfbmFtZVswXSA9PSAnLicpIGNvbnRpbnVlOworKyAKKysgICAgYnVmZmVyID0gbWFsbG9jKHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihlbnRyeS0+ZF9uYW1lKSArIDMpOworKyAgICBpZiAoIWJ1ZmZlcikgY29udGludWU7CisrCisrICAgIHNwcmludGYoYnVmZmVyLCAiJXMvJXMiLCBkaXJuYW1lLCBlbnRyeS0+ZF9uYW1lKTsKKysgICAgaWYgKCFzdGF0KGJ1ZmZlciwgJnN0KSkgeworKyAgICAgIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSAKKysJYWRkX2RpcmVjdG9yeShidWZmZXIsIG5ld2Rpcik7CisrICAgICAgZWxzZSBpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkgeworKwl1bnNpZ25lZCBjaGFyIGF0dHJpYiA9IGNoZWNrX2F0dHJpYl9maWxlKGRpcm5hbWUsIGVudHJ5LT5kX25hbWUpOworKwlhZGRfZmlsZShidWZmZXIsIG5ld2RpciwgYXR0cmliKTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgZnJlZShidWZmZXIpOworKyAgfQorKworKyAgY2xvc2VkaXIoZGlyKTsKKysgIGlmIChuZXdkaXIpIGZyZWUobmV3ZGlyKTsKKyt9CisgCisgLyogUmVwb3J0IHRoZSBjb21tYW5kIHVzYWdlIGFuZCByZXR1cm4gYSBmYWlsdXJlIGVycm9yIGNvZGUgKi8KKyAKK0BAIC0xNDIzLDcgKzE5MDMsNyBAQAorICAgICAgICBbLW0gYm9vdC1tc2ctZmlsZV0gWy1uIHZvbHVtZS1uYW1lXSBbLWkgdm9sdW1lLWlkXSBbLUIgYm9vdGNvZGVdXG5cCisgICAgICAgIFstcyBzZWN0b3JzLXBlci1jbHVzdGVyXSBbLVMgbG9naWNhbC1zZWN0b3Itc2l6ZV0gWy1mIG51bWJlci1vZi1GQVRzXVxuXAorICAgICAgICBbLWggaGlkZGVuLXNlY3RvcnNdIFstRiBmYXQtc2l6ZV0gWy1yIHJvb3QtZGlyLWVudHJpZXNdIFstUiByZXNlcnZlZC1zZWN0b3JzXVxuXAorLSAgICAgICAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworKyAgICAgICBbLWQgZGlyZWN0b3J5XSAvZGV2L25hbWUgW2Jsb2Nrc11cbiIpOworIH0KKyAKKyAvKgorQEAgLTE0NjMsNiArMTk0Myw4IEBACisgICBpbnQgYzsKKyAgIGNoYXIgKnRtcDsKKyAgIGNoYXIgKmxpc3RmaWxlID0gTlVMTDsKKysgIGNoYXIgKmRpcm5hbWUgPSBOVUxMOworKworICAgRklMRSAqbXNnZmlsZTsKKyAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgICBpbnQgaSA9IDAsIHBvcywgY2g7CitAQCAtMTQ4Myw3ICsxOTY1LDcgQEAKKyAgIHByaW50ZiAoIiVzICIgVkVSU0lPTiAiICgiIFZFUlNJT05fREFURSAiKVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAKKy0gIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NmOkY6SWk6bDptOm46cjpSOnM6Uzp2OkI6IikpICE9IEVPRikKKysgIHdoaWxlICgoYyA9IGdldG9wdCAoYXJnYywgYXJndiwgIkFiY0NkOmY6RjpJaTpsOm06bjpyOlI6czpTOnY6QjoiKSkgIT0gRU9GKQorICAgICAvKiBTY2FuIHRoZSBjb21tYW5kIGxpbmUgZm9yIG9wdGlvbnMgKi8KKyAgICAgc3dpdGNoIChjKQorICAgICAgIHsKK0BAIC0xNTA4LDYgKzE5OTAsMTAgQEAKKyAJY3JlYXRlID0gVFJVRTsKKyAJYnJlYWs7CisgCisrICBjYXNlICdkJzoKKysJZGlybmFtZSA9IG9wdGFyZzsKKysJYnJlYWs7CisrCisgICAgICAgY2FzZSAnZic6CQkvKiBmIDogQ2hvb3NlIG51bWJlciBvZiBGQVRzICovCisgCW5yX2ZhdHMgPSAoaW50KSBzdHJ0b2wgKG9wdGFyZywgJnRtcCwgMCk7CisgCWlmICgqdG1wIHx8IG5yX2ZhdHMgPCAxIHx8IG5yX2ZhdHMgPiA0KQorQEAgLTE4MTEsOCArMjI5NywxMCBAQAorICAgZWxzZSBpZiAobGlzdGZpbGUpCisgICAgIGdldF9saXN0X2Jsb2NrcyAobGlzdGZpbGUpOworIAorLSAgd3JpdGVfdGFibGVzICgpOwkJLyogV3JpdGUgdGhlIGZpbGUgc3lzdGVtIHRhYmxlcyBhd2F5ISAqLworIAorKyAgaWYgKGRpcm5hbWUpIGFkZF9yb290X2RpcmVjdG9yeShkaXJuYW1lKTsKKysKKysgIHdyaXRlX3RhYmxlcyAoKTsJCS8qIFdyaXRlIHRoZSBmaWxlIHN5c3RlbSB0YWJsZXMgYXdheSEgKi8gIAorICAgZXhpdCAoMCk7CQkJLyogVGVybWluYXRlIHdpdGggbm8gZXJyb3JzISAqLworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9tc2Rvc19mYXQxMl91bmRlZmluZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlOGE3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMvbXNkb3NfZmF0MTJfdW5kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0ZpeCBhIGNvbXBpbGF0aW9uIGVycm9yIGR1ZSB0byB1bmRlZmluZWQgTVNET1NfRkFUMTIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorV2UncmUgdHJhY2tpbmcgYW4gb2xkIHJlbGVhc2Ugb2YgZG9zZnN0b29scyBkdWUgdG8gbGljZW5zaW5nIGlzc3Vlcy4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBkb3Nmc3Rvb2xzLTIuMTAvZG9zZnNjay9ib290LmMub3JpZwkyMDA0LTEwLTE1IDA4OjUxOjQyLjM5NDcyNTE3NiAtMDYwMAorKysrIGRvc2ZzdG9vbHMtMi4xMC9kb3Nmc2NrL2Jvb3QuYwkyMDA0LTEwLTE1IDA4OjQ5OjE2Ljc3Njg2MjQ1NiAtMDYwMAorQEAgLTE0LDYgKzE0LDkgQEAKKyAjaW5jbHVkZSAiaW8uaCIKKyAjaW5jbHVkZSAiYm9vdC5oIgorIAorKyNpZm5kZWYgTVNET1NfRkFUMTIKKysjZGVmaW5lIE1TRE9TX0ZBVDEyIDQwODQKKysjZW5kaWYKKyAKKyAjZGVmaW5lIFJPVU5EX1RPX01VTFRJUExFKG4sbSkgKChuKSAmJiAobSkgPyAobikrKG0pLTEtKChuKS0xKSUobSkgOiAwKQorICAgICAvKiBkb24ndCBkaXZpZGUgYnkgemVybyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzL25vZmF0MzJfYXV0b3NlbGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDhhNzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29scy9ub2ZhdDMyX2F1dG9zZWxlY3QucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorRkFUMzIgYXBwZWFycyB0byBiZSBicm9rZW4gd2hlbiB1c2VkIHdpdGggdGhlIC1kIG9wdGlvbiB0byBwb3B1bGF0ZSB0aGUgbXNkb3MKK2ltYWdlLiBUaGlzIGRpc2FibGVzIHRoZSBGQVQzMiBhdXRvc2VsZWN0aW9uIGNvZGUgd2hpY2ggbWVhbnMgd2UgZG9uJ3QgZ2V0Citicm9rZW4gaW1hZ2VzIHdpdGggdGhlIC1kIG9wdGlvbi4gSXQgY2FuIHN0aWxsIGJlIGVuYWJsZWQgb24gdGhlIGNvbW1hbmRsaW5lCithdCB0aGUgdXNlcnMgb3duIHJpc2suIFRoaXMgY2hhbmdlcyB1cyBiYWNrIHRvIHRoZSAyLjEwIHZlcnNpb24ncyBiZWhhdmlvdXIKK3doaWNoIHdhcyBrbm93biB0byB3b3JrIHdlbGwgZXZlbiB3aXRoIGxhcmdlIGltYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZXBlbmRzIG9uIG90aGVyIHBhdGNoZXMgd2UgYXBwbHldCisKK1JQIDIwMTEvMTIvMTMKKworSW5kZXg6IGRvc2ZzdG9vbHMtMi4xMS9ta2Rvc2ZzL21rZG9zZnMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGRvc2ZzdG9vbHMtMi4xMS5vcmlnL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMTMgMTM6NTQ6MzcuNTM4NTA5MzkxICswMDAwCisrKysgZG9zZnN0b29scy0yLjExL21rZG9zZnMvbWtkb3Nmcy5jCTIwMTEtMTItMTMgMTM6NTU6MTAuMjU4NTA4NjMxICswMDAwCitAQCAtODA4LDEwICs4MDgsMTIgQEAKKyAgICAgICBicy5tZWRpYSA9IChjaGFyKSAweGY4OyAvKiBTZXQgdXAgdGhlIG1lZGlhIGRlc2NyaXB0b3IgZm9yIGEgaGFyZCBkcml2ZSAqLworICAgICAgIGJzLmRpcl9lbnRyaWVzWzBdID0gKGNoYXIpIDA7CS8qIERlZmF1bHQgdG8gNTEyIGVudHJpZXMgKi8KKyAgICAgICBicy5kaXJfZW50cmllc1sxXSA9IChjaGFyKSAyOworKy8qCisgICAgICAgaWYgKCFzaXplX2ZhdCAmJiBibG9ja3MqU0VDVE9SU19QRVJfQkxPQ0sgPiAxMDY0OTYwKSB7CisgCSAgaWYgKHZlcmJvc2UpIHByaW50ZigiQXV0by1zZWxlY3RpbmcgRkFUMzIgZm9yIGxhcmdlIGZpbGVzeXN0ZW1cbiIpOworIAkgIHNpemVfZmF0ID0gMzI7CisgICAgICAgfQorKyovCisgICAgICAgaWYgKHNpemVfZmF0ID09IDMyKSB7CisgCSAgLyogRm9yIEZBVDMyLCB0cnkgdG8gZG8gdGhlIHNhbWUgYXMgTSQncyBmb3JtYXQgY29tbWFuZDoKKyAJICAgKiBmcyBzaXplIDwgMjU2TTogMC41ayBjbHVzdGVycwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rvc2ZzdG9vbHMvZG9zZnN0b29sc18yLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZWM0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzIuMTEuYmIKQEAgLTAsMCArMSwzOCBAQAorIyBkb3Nmc3Rvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9kYW5pZWwtYmF1bWFubi5jaC9zb2Z0d2FyZS9kb3Nmc3Rvb2xzLyIKKworU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21rZG9zZnMvQ09QWUlORzttZDU9Y2JlNjdmMDhkNjg4M2JmZjU4N2Y2MTVmMGNjODFhYTgiCitQUiA9ICJyNSIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtncy5mZWRvcmFwcm9qZWN0Lm9yZy9yZXBvL3BrZ3MvJHtCUE59LyR7QlB9LnNyYy50YXIuZ3ovNDA3ZDQwNWFkZTQxMGY3NTk3ZDM2NGFiNWRjOGM5ZjYvJHtCUH0uc3JjLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rvc2ZzLWJvb3Rjb2RlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21rZG9zZnMtZGlyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsaWdubWVudF9oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21zZG9zX2ZhdDEyX3VuZGVmaW5lZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kb3Nmc3Rvb2xzLW1zZG9zX2ZzLXR5cGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luY2x1ZGUtbGludXgtdHlwZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbm9mYXQzMl9hdXRvc2VsZWN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeF9wb3B1bGF0ZWRfZG9zZnNfY3JlYXRpb24ucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtZmNudGwuaC1mb3ItZ2V0dGluZy1sb2ZmX3QtZGVmaW5pdGlvbi5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDA3ZDQwNWFkZTQxMGY3NTk3ZDM2NGFiNWRjOGM5ZjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGVhYzZkMTIzODhiM2Q5ZWQ3ODY4NDUyOWMxYjBkOTM0NmZhMmFiYmU0MDZjNGQ0YTNlYjVhMDIzYzk4YTQ4NCIKKworIyBNYWtlZmlsZSBzZXRzIHRoaXMsIGJ1dCB3ZSBjbG9iYmVyIGl0cyBDRkxBR1MsIHNvCisjIGFkZCB0aGlzIGluIGhlcmUgdG8gZm9yIHN1cmUgYWxsb3cgZm9yIGJpZyBmaWxlcy4KKyMKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCitDRkxBR1NfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLURfR05VX1NPVVJDRSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAiUFJFRklYPSR7RH0iICJTQklORElSPSR7RH0ke2Jhc2Vfc2JpbmRpcn0iIFwKKwkJICAgIk1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjgiIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHNfMy4wLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZG9zZnN0b29scy9kb3Nmc3Rvb2xzXzMuMC4yOC5iYgpAQCAtMCwwICsxLDI0IEBACisjIGRvc2ZzdG9vbHMgT0UgYnVpbGQgZmlsZQorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiwgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIyBDb3B5cmlnaHQgKEMpIDIwMTUsIFPDg8K2cmVuIEJyaW5rbWFubiA8c29lcmVuLmJyaW5rbWFubkBnbWFpbD4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKK1NVTU1BUlkgPSAiRE9TIEZBVCBGaWxlc3lzdGVtIFV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kb3Nmc3Rvb2xzL2Rvc2ZzdG9vbHMiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20vZG9zZnN0b29scy9kb3Nmc3Rvb2xzL3JlbGVhc2VzL2Rvd25sb2FkL3YzLjAuMjgvZG9zZnN0b29scy0zLjAuMjgudGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjZhMDQ3YTZjNjUxODZiOWViYjE4NTM3MDlhZGIzNmRiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVlOTU5MTMwNDRlY2YyNzE5YjYzZWExMTIxMjkxNzY0OTcwOWE2ZTUzMjA5YTcyZDYyMjEzNWFhYTg1MTdlZTIiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmFzZV9zYmluZGlyfSIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0gJHtkb2NkaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJQUkVGSVg9JHtEfSR7cHJlZml4fSIgIlNCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfSIgXAorCQkgICAiTUFORElSPSR7RH0ke21hbmRpcn0iICJET0NESVI9JHtEfSR7ZG9jZGlyfSIgaW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlYzJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cuaW5jCkBAIC0wLDAgKzEsNzkgQEAKK1NVTU1BUlkgPSAiUGFja2FnZSBtYWludGVuYW5jZSBzeXN0ZW0gZnJvbSBEZWJpYW4iCitMSUNFTlNFID0gIkdQTHYyLjArIgorU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9kL2Rwa2cvZHBrZ18ke1BWfS50YXIueHoiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaCIKKworREVQRU5EUyA9ICJ6bGliIGJ6aXAyIHBlcmwgbmN1cnNlcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSB2aXJ0dWFsL3VwZGF0ZS1hbHRlcm5hdGl2ZXMtbmF0aXZlIGdldHRleHQtbmF0aXZlIHBlcmwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiJHtWSVJUVUFMLVJVTlRJTUVfdXBkYXRlLWFsdGVybmF0aXZlc30geHogcnVuLXBvc3RpbnN0cyBwZXJsIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gInh6LW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwZXJsbmF0aXZlIHBrZ2NvbmZpZyBzeXN0ZW1kCisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgZC5zZXRWYXIoJ1NZU1RFTURfU0VSVklDRV8lcycgJSAocG4pLCAnZHBrZy1jb25maWd1cmUuc2VydmljZScpCit9CisKK2V4cG9ydCBQRVJMID0gIiR7YmluZGlyfS9wZXJsIgorUEVSTF9jbGFzcy1uYXRpdmUgPSAiJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwiCisKK2V4cG9ydCBQRVJMX0xJQkRJUiA9ICIke2xpYmRpcn0vcGVybCIKK1BFUkxfTElCRElSX2NsYXNzLW5hdGl2ZSA9ICIke2xpYmRpcn0vcGVybC1uYXRpdmUvcGVybCIKKworRVhUUkFfT0VDT05GID0gIlwKKwkJLS1kaXNhYmxlLWRzZWxlY3QgXAorCQktLWVuYWJsZS1zdGFydC1zdG9wLWRhZW1vbiBcCisJCS0td2l0aC16bGliIFwKKwkJLS13aXRoLWJ6MiBcCisJCS0td2l0aG91dC1saWJsem1hIFwKKwkJLS13aXRob3V0LXNlbGludXggXAorCQkiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBUQVI9dGFyIgorCitkb19jb25maWd1cmUgKCkgeworICAgIGVjaG8gPj4gJHtTfS9tNC9jb21waWxlci5tNAorICAgIHNlZCAtaSAtZSAncyNQRVJMX0xJQkRJUj0uKiQjUEVSTF9MSUJESVI9IiR7bGliZGlyfS9wZXJsIiMnICR7U30vY29uZmlndXJlCisgICAgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtQTn0iID0gImRwa2ctbmF0aXZlIiBdOyB0aGVuCisJCSMgdXBkYXRlLWFsdGVybmF0aXZlcyBkb2Vzbid0IGhhdmUgYW4gb2ZmbGluZSBtb2RlCisJCXJtICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCQlzZWQgLWkgLWUgJ3N8XiMhLioke2JpbmRpcn0vcGVybC1uYXRpdmUuKi9wZXJsfCMhL3Vzci9iaW4vZW52IG5hdGl2ZXBlcmx8JyAke0R9JHtiaW5kaXJ9L2Rwa2ctKgorCWVsc2UKKwkJc2VkIC1pIC1lICdzfF4jIS4qJHtiaW5kaXJ9L3BlcmwtbmF0aXZlLiovcGVybHwjIS91c3IvYmluL2VudiBwZXJsfCcgJHtEfSR7YmluZGlyfS9kcGtnLSoKKwlmaQorCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07dGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJCXNlZCAtaSAtZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJCS1lICdzLEBCSU5ESVJALCR7YmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTVEVNRF9VTklURElSQCwke3N5c3RlbWRfdW5pdGRpcn0sZycgXAorCQkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vZHBrZy1jb25maWd1cmUuc2VydmljZQorCWZpCit9CisKK1BST1YgPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorUFJPVl9jbGFzcy1uYXRpdmUgPSAiIgorCitQUk9WSURFUyArPSAiJHtQUk9WfSIKKworUEFDS0FHRVMgPSsgInVwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyIKK0ZJTEVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtZHBrZyA9ICIke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9kcGtnL2FsdGVybmF0aXZlcyAke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyIKK1JQUk9WSURFU191cGRhdGUtYWx0ZXJuYXRpdmVzLWRwa2cgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1wZXJsIgorRklMRVNfJHtQTn0tcGVybCA9ICIke2xpYmRpcn0vcGVybCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDEtV2hlbi1ydW5uaW5nLWRvX3BhY2thZ2Vfd3JpdGVfZGViLXdlLWhhdmUtdHJlZXMtb2YtaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY3ZWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAxLVdoZW4tcnVubmluZy1kb19wYWNrYWdlX3dyaXRlX2RlYi13ZS1oYXZlLXRyZWVzLW9mLWgucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSBkMTRmZmQ3ODY5OTNkYTYwY2E4NGM0ODEyZGE4YTY1OTRhOGM3NjRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE1OjQ4OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS81XSBXaGVuIHJ1bm5pbmcgZG9fcGFja2FnZV93cml0ZV9kZWIsIHdlIGhhdmUgdHJlZXMgb2YKKyBoYXJkbGlua2VkIGZpbGVzIHN1Y2ggYXMgdGhlIGRiZyBzb3VyY2UgZmlsZXMgaW4gJHtQTn0tZGJnLiBJZiBzb21ldGhpbmcKKyBtYWtlcyBhbm90aGVyIGNvcHkgb2Ygb25lIG9mIHRob3NlIGZpbGVzIChvciBkZWxldGVzIG9uZSksIHRoZSBudW1iZXIgb2YKKyBsaW5rcyBhIGZpbGUgaGFzIGNoYW5nZXMgYW5kIHRhciBjYW4gbm90aWNlIHRoaXMsIGUuZy46CisKK3wgREVCVUc6IEV4ZWN1dGluZyBweXRob24gZnVuY3Rpb24gZG9fcGFja2FnZV9kZWIKK3wgZHBrZy1kZWI6IGJ1aWxkaW5nIHBhY2thZ2UgYHNlZC1wdGVzdCcgaW4gYC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvc2VkLzQuMi4yLXIwL2RlcGxveS1kZWJzL2k1ODYvc2VkLXB0ZXN0XzQuMi4yLXIwLjNfaTM4Ni5kZWInLgorfCB0YXI6IC4vdXNyL2xpYi9zZWQvcHRlc3QvdGVzdHN1aXRlL3RzdC1yZWdleDI6IGZpbGUgY2hhbmdlZCBhcyB3ZSByZWFkIGl0Cit8IGRwa2ctZGViOiBlcnJvcjogc3VicHJvY2VzcyB0YXIgLWNmIHJldHVybmVkIGVycm9yIGV4aXQgc3RhdHVzIDEKKworVGFyIHJldHVybnMgYW4gZXJyb3Igb2YgMSB3aGVuIGZpbGVzICdjaGFuZ2UnIGFuZCBvdGhlciBlcnJvcnMgY29kZXMKK2luIG90aGVyIGVycm9yIGNhc2VzLiBXZSB0d2VhayBkcGtnLWRlYiBoZXJlIHNvIHRoYXQgaXQgaWdub3JlcyBhbiBleGl0Citjb2RlIG9mIDEgZnJvbSB0YXIuIFRoZSBmaWxlcyBkb24ndCByZWFsbHkgY2hhbmdlIChhbmQgd2UgaGF2ZSBsb2NraW5nIGluCitwbGFjZSB0byBhdm9pZCB0aGF0IGtpbmQgb2YgaXNzdWUpLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvMy8yNworLS0tCisgZHBrZy1kZWIvYnVpbGQuYyB8IDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rwa2ctZGViL2J1aWxkLmMgYi9kcGtnLWRlYi9idWlsZC5jCitpbmRleCBlYTNkODYxLi4xNTg5OTI3IDEwMDY0NAorLS0tIGEvZHBrZy1kZWIvYnVpbGQuYworKysrIGIvZHBrZy1kZWIvYnVpbGQuYworQEAgLTQ1OCw3ICs0NTgsNyBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIGNoYXIgKmRlYmFyOworICAgY2hhciAqdGZidWY7CisgICBpbnQgYXJmZDsKKy0gIGludCBwMVsyXSwgcDJbMl0sIGd6ZmQ7CisrICBpbnQgcDFbMl0sIHAyWzJdLCBnemZkLCByYzsKKyAgIHBpZF90IGMxLCBjMjsKKyAKKyAgIC8qIERlY29kZSBvdXIgYXJndW1lbnRzLiAqLworQEAgLTUzOCw3ICs1MzgsOSBAQCBkb19idWlsZChjb25zdCBjaGFyICpjb25zdCAqYXJndikKKyAgIH0KKyAgIGNsb3NlKHAxWzBdKTsKKyAgIHN1YnByb2NfcmVhcChjMiwgXygiPGNvbXByZXNzPiBmcm9tIHRhciAtY2YiKSwgMCk7CistICBzdWJwcm9jX3JlYXAoYzEsICJ0YXIgLWNmIiwgMCk7CisrICByYyA9IHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCBTVUJQUk9DX1JFVEVSUk9SKTsKKysgIGlmIChyYyAmJiByYyAhPSAxKQorKyAgICBvaHNoaXRlKF8oInN1YnByb2Nlc3MgJXMgcmV0dXJuZWQgZXJyb3IgZXhpdCBzdGF0dXMgJWQiKSwgInRhciAtY2YiLCByYyk7CisgCisgICBpZiAobHNlZWsoZ3pmZCwgMCwgU0VFS19TRVQpKQorICAgICBvaHNoaXRlKF8oImZhaWxlZCB0byByZXdpbmQgdGVtcG9yYXJ5IGZpbGUgKCVzKSIpLCBfKCJjb250cm9sIG1lbWJlciIpKTsKK0BAIC02MjYsNyArNjI4LDEwIEBAIGRvX2J1aWxkKGNvbnN0IGNoYXIgKmNvbnN0ICphcmd2KQorICAgLyogQWxsIGRvbmUsIGNsZWFuIHVwIHdhaXQgZm9yIHRhciBhbmQgPGNvbXByZXNzPiB0byBmaW5pc2ggdGhlaXIgam9iLiAqLworICAgY2xvc2UocDFbMV0pOworICAgc3VicHJvY19yZWFwKGMyLCBfKCI8Y29tcHJlc3M+IGZyb20gdGFyIC1jZiIpLCAwKTsKKy0gIHN1YnByb2NfcmVhcChjMSwgInRhciAtY2YiLCAwKTsKKysgIHJjID0gc3VicHJvY19yZWFwKGMxLCAidGFyIC1jZiIsIFNVQlBST0NfUkVURVJST1IpOworKyAgaWYgKHJjICYmIHJjICE9IDEpCisrICAgIG9oc2hpdGUoXygic3VicHJvY2VzcyAlcyByZXR1cm5lZCBlcnJvciBleGl0IHN0YXR1cyAlZCIpLCAidGFyIC1jZiIsIHJjKTsKKysKKyAgIC8qIE9rYXksIHdlIGhhdmUgZGF0YS50YXIgYXMgd2VsbCBub3csIGFkZCBpdCB0byB0aGUgYXIgd3JhcHBlci4gKi8KKyAgIGlmIChkZWJfZm9ybWF0Lm1ham9yID09IDIpIHsKKyAgICAgY2hhciBkYXRhbWVtYmVyWzE2ICsgMV07CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDAyLUFkYXB0LXRvLWxpbnV4LXdycy1rZXJuZWwtdmVyc2lvbi13aGljaC1oYXMtY2hhcmFjdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxYTZhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gYjRlYTU0MTU4YzM5OTg3NGUxMjM5NGViYzkxYWZlOTg5NTQ2OTVlMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNiBBdWcgMjAxNSAxNjoxNjoxNiArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNV0gQWRhcHQgdG8gbGludXgtd3JzIGtlcm5lbCB2ZXJzaW9uLCB3aGljaCBoYXMgY2hhcmFjdGVyCisgJ18nIGluc2lkZS4gUmVtb3ZlIHRoZSBmaXJzdC1jaGFyLWRpZ2l0LWNoZWNrIChhcyB0aGUgMS4xNS44LjUgdmVyc2lvbiBkb2VzKS4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYi9kcGtnL3BhcnNlaGVscC5jIHwgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2Rwa2cvcGFyc2VoZWxwLmMgYi9saWIvZHBrZy9wYXJzZWhlbHAuYworaW5kZXggNzliMjkwOC4uNzc1OGFhNSAxMDA2NDQKKy0tLSBhL2xpYi9kcGtnL3BhcnNlaGVscC5jCisrKysgYi9saWIvZHBrZy9wYXJzZWhlbHAuYworQEAgLTIzNSwxNCArMjM1LDEyIEBAIHBhcnNldmVyc2lvbihzdHJ1Y3QgZHBrZ192ZXJzaW9uICpydmVyc2lvbiwgY29uc3QgY2hhciAqc3RyaW5nLAorIAorICAgLyogWFhYOiBXb3VsZCBiZSBmYXN0ZXIgdG8gdXNlIHNvbWV0aGluZyBsaWtlIGNpc3ZlcnNpb24gYW5kIGNpc3JldmlzaW9uLiAqLworICAgcHRyID0gcnZlcnNpb24tPnZlcnNpb247CistICBpZiAoKnB0ciAmJiAhY19pc2RpZ2l0KCpwdHIrKykpCistICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygidmVyc2lvbiBudW1iZXIgZG9lcyBub3Qgc3RhcnQgd2l0aCBkaWdpdCIpKTsKKyAgIGZvciAoOyAqcHRyOyBwdHIrKykgeworLSAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfjoiLCAqcHRyKSA9PSBOVUxMKQorKyAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfjpfIiwgKnB0cikgPT0gTlVMTCkKKyAgICAgICByZXR1cm4gZHBrZ19wdXRfd2FybihlcnIsIF8oImludmFsaWQgY2hhcmFjdGVyIGluIHZlcnNpb24gbnVtYmVyIikpOworICAgfQorICAgZm9yIChwdHIgPSBydmVyc2lvbi0+cmV2aXNpb247ICpwdHI7IHB0cisrKSB7CistICAgIGlmICghY19pc2RpZ2l0KCpwdHIpICYmICFjX2lzYWxwaGEoKnB0cikgJiYgc3RyY2hyKCIuK34iLCAqcHRyKSA9PSBOVUxMKQorKyAgICBpZiAoIWNfaXNkaWdpdCgqcHRyKSAmJiAhY19pc2FscGhhKCpwdHIpICYmIHN0cmNocigiLi0rfl8iLCAqcHRyKSA9PSBOVUxMKQorICAgICAgIHJldHVybiBkcGtnX3B1dF93YXJuKGVyciwgXygiaW52YWxpZCBjaGFyYWN0ZXIgaW4gcmV2aXNpb24gbnVtYmVyIikpOworICAgfQorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwMy1PdXItcHJlLXBvc3RpbnN0cy1leHBlY3QtRC10by1iZS1zZXQtd2hlbi1ydW5uaW5nLWluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaApAQCAtMCwwICsxLDYwIEBACitGcm9tIDI0MjI5OTcxNDkyNTE1YjY0YzgxZThjNjM5MmU1ZGZiZGMyMmI0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6MjU6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzVdIE91ciBwcmUvcG9zdGluc3RzIGV4cGVjdCAkRCB0byBiZSBzZXQgd2hlbiBydW5uaW5nIGluIGEKKyBzeXNyb290IGFuZCBkb24ndCBleHBlY3QgYSBjaHJvb3QuIFRoaXMgbWF0Y2hlcyB1cCBvdXIgc3lzdGVtIGV4cGVjdGF0aW9ucworIHdpdGggd2hhdCBkcGtnIGRvZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgU3BlY2lmaWNdCisKK1JQIDIwMTEvMTIvMDcKKy0tLQorIHNyYy9zY3JpcHQuYyB8IDMxICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zY3JpcHQuYyBiL3NyYy9zY3JpcHQuYworaW5kZXggYTk1ODE0NS4uMjRjNDlmOSAxMDA2NDQKKy0tLSBhL3NyYy9zY3JpcHQuYworKysrIGIvc3JjL3NjcmlwdC5jCitAQCAtMTAwLDM2ICsxMDAsOSBAQCBtYWludHNjcmlwdF9wcmVfZXhlYyhzdHJ1Y3QgY29tbWFuZCAqY21kKQorIAlzaXplX3QgaW5zdGRpcmwgPSBzdHJsZW4oaW5zdGRpcik7CisgCisgCWlmICgqaW5zdGRpcikgeworLQkJaWYgKHN0cm5jbXAoYWRtaW5kaXIsIGluc3RkaXIsIGluc3RkaXJsKSAhPSAwKQorLQkJCW9oc2hpdChfKCJhZG1pbmRpciBtdXN0IGJlIGluc2lkZSBpbnN0ZGlyIGZvciBkcGtnIHRvIHdvcmsgcHJvcGVybHkiKSk7CistCQlpZiAoc2V0ZW52KCJEUEtHX0FETUlORElSIiwgYWRtaW5kaXIgKyBpbnN0ZGlybCwgMSkgPCAwKQorLQkJCW9oc2hpdGUoXygidW5hYmxlIHRvIHNldGVudiBmb3Igc3VicHJvY2Vzc2VzIikpOworLQorLQkJaWYgKGNocm9vdChpbnN0ZGlyKSkKKy0JCQlvaHNoaXRlKF8oImZhaWxlZCB0byBjaHJvb3QgdG8gJyUuMjUwcyciKSwgaW5zdGRpcik7CistCX0KKy0JLyogU3dpdGNoIHRvIGEga25vd24gZ29vZCBkaXJlY3RvcnkgdG8gZ2l2ZSB0aGUgbWFpbnRhaW5lciBzY3JpcHQKKy0JICogYSBzYW5lciBlbnZpcm9ubWVudCwgYWxzbyBuZWVkZWQgYWZ0ZXIgdGhlIGNocm9vdCgpLiAqLworLQlpZiAoY2hkaXIoIi8iKSkKKy0JCW9oc2hpdGUoXygiZmFpbGVkIHRvIGNoZGlyIHRvICclLjI1NXMnIiksICIvIik7CistCWlmIChkZWJ1Z19oYXNfZmxhZyhkYmdfc2NyaXB0cykpIHsKKy0JCXN0cnVjdCB2YXJidWYgYXJncyA9IFZBUkJVRl9JTklUOworLQkJY29uc3QgY2hhciAqKmFyZ3YgPSBjbWQtPmFyZ3Y7CistCistCQl3aGlsZSAoKisrYXJndikgeworLQkJCXZhcmJ1Zl9hZGRfY2hhcigmYXJncywgJyAnKTsKKy0JCQl2YXJidWZfYWRkX3N0cigmYXJncywgKmFyZ3YpOworLQkJfQorLQkJdmFyYnVmX2VuZF9zdHIoJmFyZ3MpOworLQkJZGVidWcoZGJnX3NjcmlwdHMsICJmb3JrL2V4ZWMgJXMgKCVzICkiLCBjbWQtPmZpbGVuYW1lLAorLQkJICAgICAgYXJncy5idWYpOworLQkJdmFyYnVmX2Rlc3Ryb3koJmFyZ3MpOworKwkJc2V0ZW52KCJEIiwgaW5zdGRpciwgMSk7CisgCX0KKy0JaWYgKCFpbnN0ZGlybCkKKy0JCXJldHVybiBjbWQtPmZpbGVuYW1lOworLQorLQlhc3NlcnQoc3RybGVuKGNtZC0+ZmlsZW5hbWUpID49IGluc3RkaXJsKTsKKy0JcmV0dXJuIGNtZC0+ZmlsZW5hbWUgKyBpbnN0ZGlybDsKKysJcmV0dXJuIGNtZC0+ZmlsZW5hbWU7CisgfQorIAorIC8qKgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvMDAwNC1UaGUtbHV0aW1lcy1mdW5jdGlvbi1kb2Vzbi10LXdvcmstcHJvcGVybHktZm9yLWFsbC1zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Yzg1YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDQtVGhlLWx1dGltZXMtZnVuY3Rpb24tZG9lc24tdC13b3JrLXByb3Blcmx5LWZvci1hbGwtcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIGFkYjZiZmQwZmVlY2VhZjAzMGRmMGRlYmUzMzQzZDdmNzNlNzA4YTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgQXVnIDIwMTUgMTY6Mjc6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCA0LzVdIFRoZSBsdXRpbWVzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3IgYWxsCisgc3lzdGVtcy4KKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgc3JjL2FyY2hpdmVzLmMgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9hcmNoaXZlcy5jIGIvc3JjL2FyY2hpdmVzLmMKK2luZGV4IGJmZjVmMTQuLmI3MTEwMTMgMTAwNjQ0CistLS0gYS9zcmMvYXJjaGl2ZXMuYworKysrIGIvc3JjL2FyY2hpdmVzLmMKK0BAIC00NDksOCArNDQ5LDkgQEAgdGFyb2JqZWN0X3NldF9tdGltZShzdHJ1Y3QgdGFyX2VudHJ5ICp0ZSwgY29uc3QgY2hhciAqcGF0aCkKKyAKKyAgIGlmICh0ZS0+dHlwZSA9PSBUQVJfRklMRVRZUEVfU1lNTElOSykgeworICNpZmRlZiBIQVZFX0xVVElNRVMKKy0gICAgaWYgKGx1dGltZXMocGF0aCwgdHYpICYmIGVycm5vICE9IEVOT1NZUykKKysvKiAgICBpZiAobHV0aW1lcyhwYXRoLCB0dikgJiYgZXJybm8gIT0gRU5PU1lTKQorICAgICAgIG9oc2hpdGUoXygiZXJyb3Igc2V0dGluZyB0aW1lc3RhbXBzIG9mICclLjI1NXMnIiksIHBhdGgpOworKyovCisgI2VuZGlmCisgICB9IGVsc2UgeworICAgICBpZiAodXRpbWVzKHBhdGgsIHR2KSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnLzAwMDUtZHBrZy1jb21waWxlci5tNC1yZW1vdmUtV3ZsYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmU5NmYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy8wMDA1LWRwa2ctY29tcGlsZXIubTQtcmVtb3ZlLVd2bGEucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorRnJvbSAwYWQ3YmJhODBkNWI5MDM1MDg5ZmYyYjJmNzdhNzc0YjViMjAxOTE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI2IEF1ZyAyMDE1IDE2OjI4OjU5ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggNS81XSBkcGtnLWNvbXBpbGVyLm00OiByZW1vdmUgLVd2bGEKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworUmVtb3ZlIHRoZSAtV3ZsYSBmbGFnIGZyb20gdGhlIHNldCBvZiBjb21waWxlciB3YXJuaW5nIGZsYWdzLCBzaW5jZSBnY2MKK29uIG9sZCBob3N0IHN5c3RlbXMgc3VjaCBhcyBDZW50T1MgNS44IGRvZXNuJ3Qgc3VwcG9ydCBpdCwgYW5kIGl0CitjYXVzZXMgYSBidWlsZCBlcnJvciBmb3IgZHBrZy1uYXRpdmUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEb25uIFNlZWxleSA8ZG9ubi5zZWVsZXlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtNC9kcGtnLWNvbXBpbGVyLm00IHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL200L2Rwa2ctY29tcGlsZXIubTQgYi9tNC9kcGtnLWNvbXBpbGVyLm00CitpbmRleCA2ODI4NTdjLi4yM2VkN2QwIDEwMDY0NAorLS0tIGEvbTQvZHBrZy1jb21waWxlci5tNAorKysrIGIvbTQvZHBrZy1jb21waWxlci5tNAorQEAgLTUyLDcgKzUyLDYgQEAgQUNfREVGVU4oW0RQS0dfQ0hFQ0tfQ09NUElMRVJfV0FSTklOR1NdLCBbCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XbG9naWNhbC1vcF0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XbG9naWNhbC1ub3QtcGFyZW50aGVzZXNdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV3N3aXRjaC1ib29sXSkKKy0gIERQS0dfQ0hFQ0tfQ09NUElMRVJfRkxBRyhbLVd2bGFdKQorICAgRFBLR19DSEVDS19DT01QSUxFUl9GTEFHKFstV2luaXQtc2VsZl0pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1Xd3JpdGUtc3RyaW5nc10pCisgICBEUEtHX0NIRUNLX0NPTVBJTEVSX0ZMQUcoWy1XY2FzdC1hbGlnbl0pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMjc1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2FkZF9hcm1lYl90cmlwbGV0X2VudHJ5LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0F1dGhvcjogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorRGF0ZTogICBXZWQgQXByIDggMTg6MDg6MTQgMjAxNSArMDUzMAorCitbUEFUQ0hdIGFkZCBhcm1lYiB0cmlwbGV0IGVudHJ5IGludG8gdHJpcGxldHRhYmxlLgorCitDcm9zcy1jb21wbGluZyBkcGtnIGFwcGxpY2F0aW9uIGZvciBhcm1lYiBmYWlscyB3aXRoIGJlbG93IGVycm9yCitkdXJpbmcgY29uZmlndXJlIHRhc2ssCisKKyhzbmlwKQorIGNvbmZpZ3VyZToyMzE0MTogY2hlY2tpbmcgZHBrZyBjcHUgdHlwZQorIGNvbmZpZ3VyZToyMzE0ODogcmVzdWx0OiBhcm1lYgorIGNvbmZpZ3VyZToyMzE1MDogV0FSTklORzogYXJtZWIgbm90IGZvdW5kIGluIGNwdXRhYmxlCisgY29uZmlndXJlOjIzMTYyOiBjaGVja2luZyBkcGtnIG9wZXJhdGluZyBzeXN0ZW0gdHlwZQorIGNvbmZpZ3VyZToyMzE2OTogcmVzdWx0OiBsaW51eC1nbnVlYWJpCisgY29uZmlndXJlOjIzMTcxOiBXQVJOSU5HOiBsaW51eC1nbnVlYWJpIG5vdCBmb3VuZCBpbiBvc3RhYmxlCisgY29uZmlndXJlOjIzMTgzOiBjaGVja2luZyBkcGtnIGFyY2hpdGVjdHVyZSBuYW1lCisgY29uZmlndXJlOjIzMTg5OiBlcnJvcjogY2Fubm90IGRldGVybWluZSBob3N0IGRwa2cgYXJjaGl0ZWN0dXJlCistLSBDVVQgLS0KKwordGhlIHJlcXVpcmVkIGNvbWJpbmF0aW9uIG9mICJnbnVlYWJpLWxpbnV4LWFybWViIiB3YXMgbm90IGZvdW5kIGluCit0aGUgdHJpcGxldHRhYmxlIGZpbGUgdGhlcmVieSByZXR1cm5pbmcgZHBrZ19hcmNoIGFzCitlbXB0eSBpbiBjb25maWd1cmUgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorCitkaWZmIC1OYXVycCBkcGtnLTEuMTcuMjFfb3JnL3RyaXBsZXR0YWJsZSBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCistLS0gZHBrZy0xLjE3LjIxX29yZy90cmlwbGV0dGFibGUJMjAxNS0wNC0wOCAxNzowODo1Mi4zNzA3NTkxNzEgKzA1MzAKKysrKyBkcGtnLTEuMTcuMjEvdHJpcGxldHRhYmxlCTIwMTUtMDQtMDggMTc6MDk6MTIuNDA2NzUyMDgxICswNTMwCitAQCAtOSw2ICs5LDcgQEAgbXVzbGVhYmloZi1saW51eC1hcm0JbXVzbC1saW51eC1hcm1oZgorIG11c2wtbGludXgtPGNwdT4JbXVzbC1saW51eC08Y3B1PgorIGdudWVhYmloZi1saW51eC1hcm0JYXJtaGYKKyBnbnVlYWJpLWxpbnV4LWFybQlhcm1lbAorK2dudWVhYmktbGludXgtYXJtZWIJYXJtZWIKKyBnbnVhYmluMzItbGludXgtbWlwczY0ZWwJbWlwc24zMmVsCisgZ251YWJpbjMyLWxpbnV4LW1pcHM2NAltaXBzbjMyCisgZ251YWJpNjQtbGludXgtbWlwczY0ZWwJbWlwczY0ZWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvYXJjaF9wbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWQ0YzBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9hcmNoX3BtLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2NvbmZpZ3VyZSBjYW5ub3QgZGV0ZXJtaW5lIHRoZSBwcm9wZXIgY3B1LCBvcywgb3IKK2FyY2hpdGVjdHVyZSBmb3IgbWlwczY0LCBhbmQgcG9zc2libHkgb3RoZXIgYXJjaCdzCitiZWNhdXNlIG9mIGZhdWx0eSBjb2RlIGFkZGVkIHRvIEFyY2gucG0gaW4gdGhlIGxhdGVzdAorcmVsZWFzZSBmcm9tIHVwc3RyZWFtLiAgV2UgcmVtb3ZlIHRoYXQgY29kZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEpvZSBTbGF0ZXIgPGpzbGF0ZXJAd2luZHJpdmVyLmNvbT4KKworCistLS0gYS9zY3JpcHRzL0Rwa2cvQXJjaC5wbQorKysrIGIvc2NyaXB0cy9EcGtnL0FyY2gucG0KK0BAIC0yMzMsOSArMjMzLDYgQEAgc3ViIHJlYWRfdHJpcGxldHRhYmxlKCkKKyAJCSAgICAobXkgJGR0ID0gJGRlYnRyaXBsZXQpID1+IHMvPGNwdT4vJF9jcHUvOworIAkJICAgIChteSAkZGEgPSAkZGViYXJjaCkgPX4gcy88Y3B1Pi8kX2NwdS87CisgCistCQkgICAgbmV4dCBpZiBleGlzdHMgJGRlYmFyY2hfdG9fZGVidHJpcGxldHskZGF9CistCQkgICAgICAgICBvciBleGlzdHMgJGRlYnRyaXBsZXRfdG9fZGViYXJjaHskZHR9OworLQorIAkJICAgICRkZWJhcmNoX3RvX2RlYnRyaXBsZXR7JGRhfSA9ICRkdDsKKyAJCSAgICAkZGVidHJpcGxldF90b19kZWJhcmNoeyRkdH0gPSAkZGE7CisgCQl9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiMDc4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZHBrZy1jb25maWd1cmUuc2VydmljZQpAQCAtMCwwICsxLDE3IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPWRwa2cgZmlyc3QgYm9vdCBjb25maWd1cmUKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9wb3N0aW5zdAorRXhlY1N0YXJ0PS1AQkFTRV9CSU5ESVJAL3NoIC1jICIgaWYgWyAkUE9TVElOU1RfTE9HR0lORyA9ICcxJyBdOyB0aGVuIEBCSU5ESVJAL2Rwa2cgLS1jb25maWd1cmUgLWEgPiAkTE9HRklMRSAyPiYxOyBlbHNlIEBCSU5ESVJAL2Rwa2cgLS1jb25maWd1cmUgLWE7IGZpIgorRXhlY1N0YXJ0UG9zdD1AQkFTRV9CSU5ESVJAL3N5c3RlbWN0bCBkaXNhYmxlIGRwa2ctY29uZmlndXJlLnNlcnZpY2UKK1N0YW5kYXJkT3V0cHV0PXN5c2xvZworUmVtYWluQWZ0ZXJFeGl0PU5vCisKK1tJbnN0YWxsXQorV2FudGVkQnk9YmFzaWMudGFyZ2V0CitXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9maXgtYWJzLXJlZGVmaW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MzMxMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Rwa2cgZGVmaW5lczoKKyNkZWZpbmUgRFBLR19CRUdJTl9ERUNMUwlleHRlcm4gIkMiIHsKKworVGhhdCBtYWtlcyBoZWFkZXIgY3N0ZGxpYiBpbmNsdWRlZCBpbiBhIGV4dGVybiAiQyIgYmxvY2sgd2hpY2ggaXMgbm90IHN1cHBvcnRlZAorYnkgZ2NjIDQuOC4gSXQgZmFpbHMgb24gRmVkb3JhIDE5OgorCisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6IEluIGZ1bmN0aW9uIOKAmGxvbmcgbG9uZyBpbnQgc3RkOjphYnMobG9uZyBsb25nIGludCnigJk6CisvdXNyL2luY2x1ZGUvYysrLzQuOC4xL2NzdGRsaWI6MTc0OjIwOiBlcnJvcjogZGVjbGFyYXRpb24gb2YgQyBmdW5jdGlvbiDigJhsb25nIGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgbG9uZyBpbnQp4oCZIGNvbmZsaWN0cyB3aXRoCisgICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX19idWlsdGluX2xsYWJzIChfX3gpOyB9CisgICAgICAgICAgICAgICAgICAgIF4KKy91c3IvaW5jbHVkZS9jKysvNC44LjEvY3N0ZGxpYjoxNjY6MzogZXJyb3I6IHByZXZpb3VzIGRlY2xhcmF0aW9uIOKAmGxvbmcgaW50IHN0ZDo6YWJzKGxvbmcgaW50KeKAmSBoZXJlCisgICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIF9fYnVpbHRpbl9sYWJzKF9faSk7IH0KKyAgIF4KKworTW92ZSBpbmNsdWRlIGdldHRleHQuaCBvdXQgb2YgdGhlIGV4dGVybiAiQyIgYmxvY2sgdG8gZml4IHRoaXMgaXNzdWUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gZHBrZy0xLjE3LjEvbGliL2Rwa2cvaTE4bi5oLm9yaWcJMjAxMy0wOC0xMyAxNzozMToyOC44NzA5MzU1NzMgKzA4MDAKKysrKyBkcGtnLTEuMTcuMS9saWIvZHBrZy9pMThuLmgJMjAxMy0wOC0xMyAxNzozMTozNy44OTMwNjUyNDkgKzA4MDAKK0BAIC0yMyw4ICsyMyw2IEBACisgCisgI2luY2x1ZGUgPGRwa2cvbWFjcm9zLmg+CisgCistRFBLR19CRUdJTl9ERUNMUworLQorIC8qKgorICAqIEBkZWZncm91cCBpMThuIEludGVybmF0aW9uYWxpemF0aW9uIHN1cHBvcnQKKyAgKiBAaW5ncm91cCBkcGtnLWludGVybmFsCitAQCAtMzMsNiArMzEsOCBAQAorIAorICNpbmNsdWRlIDxnZXR0ZXh0Lmg+CisgCisrRFBLR19CRUdJTl9ERUNMUworKworIC8qIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGlzIGJlY2F1c2UgcGdldHRleHQoKSB1c2VzIExDX01FU1NBR0VTLCBidXQgbGliaW50bC5oCisgICogd2hpY2ggZ2V0cyBwdWxsZWQgYnkgZ2V0dGV4dC5oIG9ubHkgaW5jbHVkZXMgaXQgaWYgYnVpbGRpbmcgb3B0aW1pemVkLiAqLworICNpbmNsdWRlIDxsb2NhbGUuaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9nbGliYzIuNS1zeW5jX2ZpbGVfcmFuZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2YjhhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvZ2xpYmMyLjUtc3luY19maWxlX3JhbmdlLnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK0NlbnRPUyA1Ljgga2VybmVscyBhbmQgaGVhZGVycyBzdXBwb3J0IHRoZSBzeW5jX2ZpbGVfcmFuZ2UoKSBzeXN0ZW0gY2FsbCwKK2J1dCBnbGliYyAyLjUgZG9lc24ndCBwcm92aWRlIHRoZSBzeXNjYWxsIHN0dWIuICBJdCBhcHBlYXJzIHRoYXQgdGhpcworcHJvYmxlbSBpcyBrbm93biBidXQgd2lsbCBuZXZlciBiZSBmaXhlZDoKKworICBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTUxODU4MQorCisgIEJ1ZyA1MTg1ODEgLSBbUkhFTDVdIGdsaWJjIG1pc3NlcyBzeW5jX2ZpbGVfcmFuZ2Ugc3lzY2FsbCBpbnRlcmZhY2UgCisKKyAgU3RhdHVzOiAgICAgICBDTE9TRUQgQ0FOVEZJWCAKKyAgTGFzdCBDbG9zZWQ6ICAyMDA5LTExLTIyIDIyOjE5OjU1CisKKyAgS2lyYnkgWmhvdSAyMDA5LTA4LTIwIDIzOjM3OjU1IEVEVAorCisgIERlc2NyaXB0aW9uIG9mIHByb2JsZW06CisKKyAgZ2xpYmMgbWlzc2VzIHN5bmNfZmlsZV9yYW5nZSBzeXNjYWxsIGludGVyZmFjZS4gIFRoZSBoZWFkZXIgZmlsZSBhbmQKKyAgbWFuIHBhZ2UgYm90aCBzYXkgJ3N5bmNfZmlsZV9yYW5nZScgc2hvdWxkIGV4aXN0LiAgRnJvbSBtYW4gcGFnZSwKKyAgc3luY19maWxlX3JhbmdlIHNob3VsZCBleGlzdCBzaW5jIGtlcm5lbC0yLjYuMTcKKworICBBbmRyZWFzIFNjaHdhYiAyMDA5LTA4LTIxIDAzOjI0OjI0IEVEVAorCisgIEl0IGhhcyBvbmx5IGJlZW4gYWRkZWQgdG8gZ2xpYmMgMi42LCBhbmQgY2Fubm90IGJlIGJhY2twb3J0ZWQgZHVlIHRvCisgIEFCSSBicmVha2FnZS4gIFlvdSBjYW4gYWx3YXlzIGZhbGwgYmFjayB0byBzeXNjYWxsKDMpLgorCisgIFVscmljaCBEcmVwcGVyIDIwMDktMTEtMjIgMjI6MTk6NTUgRVNUCisKKyAgQXMgY29tbWVudCAjMSBzYXlzLCBubyBjaGFuY2UgdG8gYmFja3BvcnQgdGhpcy4KKworICBTZWUgdGhlIHN5c2NhbGwgbWFuIHBhZ2UgZm9yIGluc3RydWN0aW9ucy4KKworICBKb24gRSAyMDEwLTAzLTE5IDEwOjMyOjM3IEVEVAorCisgIHRoZW4gd2h5IGRvY3VtZW50IGl0IGlmIGl0J3MgYnJva2VuIGFuZCB5b3UncmUgbm90IGdvaW5nIHRvIGZpeCBpdD8KKyAgLi4gbWlnaHQgd2FudCB0byBGVEZNIG92ZXIgYXQgc3luY19maWxlX3JhbmdlKDIpIC0gaW4gdGhlIG1lYW50aW1lIC0KKyAgYm9ycm93aW5nIGZyb20gZ2xpYmMgMi42IC4uIGFueSB0aG91Z2h0cyBvbiB0aGlzIGltcGxlbWVudGF0aW9uIGZvciBhCisgIGhhY2t5IHdvcmthcm91bmQgZm9yIHRob3NlIHN0aWxsIG9uIHlvdXIgImFuY2llbnQgcmVsZWFzZXMiIC4uIChlZzoKKyAgUkhFTDUuMyk/OgorCisgICNpZmRlZiBVTElfV09OVF9GSVhfVEhJU19JTl9HTElCQzIuNQorICAjZGVmaW5lIE5SX3N5bmNfZmlsZV9yYW5nZSAyNzcKKyAgaW50IHN5bmNfZmlsZV9yYW5nZSAoaW50IGZkLCBfX29mZjY0X3QgZnJvbSwgX19vZmY2NF90IHRvLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisgIHsKKyAgICByZXR1cm4gc3lzY2FsbCAoTlJfc3luY19maWxlX3JhbmdlLCBmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAoZnJvbSA+PiAzMiksIChsb25nKSBmcm9tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTE9OR19MT05HX1BBSVIgKChsb25nKSAodG8gPj4gMzIpLCAobG9uZykgdG8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOworICB9CisgICNlbmRpZgorCisgIGFzc3VtaW5nIG9mIGNvdXJzZSB0aGF0IHlvdSdyZSBvbiBhbiB4ODZfNjQgYW5kIGluY2x1ZGUvYXNtLQorICB4ODZfNjQvdW5pc3RkLmggaGFzIHRoZSBjb3JyZWN0IGVudHJ5CisKKyAgKGZ3aXcgLSBmaW8gaXMgc3RhcnRpbmcgdG8gdXNlIHRoaXMgbm93KQorCitSYXRoZXIgdGhhbiBhdHRlbXB0aW5nIHRvIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdXNpbmcgc3lzY2FsbCgpLAord2UgdGFrZSB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgcm91dGUgYW5kIGlnbm9yZSBoZWFkZXIgc3VwcG9ydCBmb3IKK3N5bmNfZmlsZV9yYW5nZSgpIGZsYWdzIHdoZW4gdGhlIGdsaWJjIHZlcnNpb24gaXMgPD0gMi41LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2V2ZXJ5b25lIGVsc2UgYnVpbGRzIG9uIG5ld2VyIGhvc3RzIDotKV0KKworU2lnbmVkLW9mZi1ieTogRG9ubiBTZWVsZXkgPGRvbm4uc2VlbGV5QHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBMZWkgTGl1IDxsZWkubGl1MkB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2FyY2hpdmVzLmMgfCAgICA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9zcmMvYXJjaGl2ZXMuYworKysrIGIvc3JjL2FyY2hpdmVzLmMKK0BAIC03NSw3ICs3NSw3IEBACisgICAvKiBJZ25vcmUgdGhlIHJldHVybiBjb2RlIGFzIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQgdG8gYW4KKyAgICAqIGFzeW5jaHJvbm91cyBoaW50IGZvciB0aGUga2VybmVsLCB3ZSBhcmUgZG9pbmcgYW4gZnN5bmMoKSBsYXRlciBvbgorICAgICogYW55d2F5LiAqLworLSNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XUklURSkKKysjaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV1JJVEUpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDYpCisgICBzeW5jX2ZpbGVfcmFuZ2UoZmQsIDAsIDAsIFNZTkNfRklMRV9SQU5HRV9XUklURSk7CisgI2VsaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpCisgICBwb3NpeF9mYWR2aXNlKGZkLCAwLCAwLCBQT1NJWF9GQURWX0RPTlRORUVEKTsKK0BAIC0xMTc5LDcgKzExNzksNyBAQAorICAgcmV0dXJuIDA7CisgfQorIAorLSNpZiBkZWZpbmVkKFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSkKKysjaWYgZGVmaW5lZChTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUpICYmIF9fR0xJQkNfUFJFUkVRKDIsIDYpCisgc3RhdGljIHZvaWQKKyB0YXJfd3JpdGViYWNrX2JhcnJpZXIoc3RydWN0IGZpbGVpbmxpc3QgKmZpbGVzLCBzdHJ1Y3QgcGtnaW5mbyAqcGtnKQorIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvbm9tYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMGMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnL25vbWFuLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitkaWZmIC1ydU4gZHBrZy0xLjE1LjguNS1vcmlnL01ha2VmaWxlLmFtIGRwa2ctMS4xNS44LjUvTWFrZWZpbGUuYW0KKy0tLSBkcGtnLTEuMTUuOC41LW9yaWcvTWFrZWZpbGUuYW0JMjAxMC0xMC0wOCAxMjoyNzoxNS4wNDIwODM3MDMgKzA4MDAKKysrKyBkcGtnLTEuMTUuOC41L01ha2VmaWxlLmFtCTIwMTAtMTAtMDggMTI6Mjc6MjcuNzU1MTQ4MjI4ICswODAwCitAQCAtMTIsOCArMTIsNyBAQAorIAl1dGlscyBcCisgCSQoTUFZQkVfRFNFTEVDVCkgXAorIAlzY3JpcHRzIFwKKy0JcG8gXAorLQltYW4KKysJcG8KKyAKKyBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZy9yZW1vdmUtdGFyLW5vLXRpbWVzdGFtcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0MDhmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9kcGtnL2Rwa2cvcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorYnVzeWJveC0xLjE5LjQgdGFyIHV0aWxpdHkgZG9lc24ndCBzdXBwb3J0IC0td2FybmluZz1uby10aW1lc3RhbXAKKworU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCitJbmRleDogZHBrZy0xLjE3LjEvZHBrZy1kZWIvZXh0cmFjdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZHBrZy0xLjE3LjEub3JpZy9kcGtnLWRlYi9leHRyYWN0LmMKKysrKyBkcGtnLTEuMTcuMS9kcGtnLWRlYi9leHRyYWN0LmMKK0BAIC0zMTgsNyArMzE4LDYgQEAgZXh0cmFjdGhhbGYoY29uc3QgY2hhciAqZGViYXIsIGNvbnN0IGNoYQorIAorICAgICAgIGNvbW1hbmRfYWRkX2FyZygmY21kLCAiLWYiKTsKKyAgICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi0iKTsKKy0gICAgICBjb21tYW5kX2FkZF9hcmcoJmNtZCwgIi0td2FybmluZz1uby10aW1lc3RhbXAiKTsKKyAKKyAgICAgICBtX2R1cDIocDJbMF0sMCk7CisgICAgICAgY2xvc2UocDJbMF0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZHBrZy9kcGtnXzEuMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzNmYTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2Rwa2cvZHBrZ18xLjE4LjIuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBkcGtnLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub21hbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXRhci1uby10aW1lc3RhbXAucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1hYnMtcmVkZWZpbmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FyY2hfcG0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rwa2ctY29uZmlndXJlLnNlcnZpY2UgXAorICAgICAgICAgICAgZmlsZTovL2dsaWJjMi41LXN5bmNfZmlsZV9yYW5nZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkX2FybWViX3RyaXBsZXRfZW50cnkucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwMi1BZGFwdC10by1saW51eC13cnMta2VybmVsLXZlcnNpb24td2hpY2gtaGFzLWNoYXJhY3RlLnBhdGNoIFwKKwkgICAgZmlsZTovLzAwMDMtT3VyLXByZS1wb3N0aW5zdHMtZXhwZWN0LUQtdG8tYmUtc2V0LXdoZW4tcnVubmluZy1pbi5wYXRjaCBcCisJICAgIGZpbGU6Ly8wMDA0LVRoZS1sdXRpbWVzLWZ1bmN0aW9uLWRvZXNuLXQtd29yay1wcm9wZXJseS1mb3ItYWxsLXMucGF0Y2ggXAorCSAgICBmaWxlOi8vMDAwNS1kcGtnLWNvbXBpbGVyLm00LXJlbW92ZS1XdmxhLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjNiOWQ4NjkwODFlYzQ5YWRlZWY2YzVmZjYyZDY1NzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTE0ODRmMmE3M2QwMjdkNjk2ZTcyMGE2MDM4MGRiNzE5NzhiYjVjMDZjZDg4ZmUzMGMyOTFlMDY5YWM0NTdhNCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDliYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy5pbmMKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJFeHQyIEZpbGVzeXN0ZW0gVXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEV4dDIgRmlsZXN5c3RlbSBVdGlsaXRpZXMgKGUyZnNwcm9ncykgY29udGFpbiBhbGwgb2YgdGhlIHN0YW5kYXJkIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcsIFwKK2ZpeGluZywgY29uZmlndXJpbmcgLCBhbmQgZGVidWdnaW5nIGV4dDIgZmlsZXN5c3RlbXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2UyZnNwcm9ncy5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyICYgQlNEICYgTUlUIgorTElDRU5TRV9lMmZzcHJvZ3MtZTJmc2NrID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtbWtlMmZzID0gIkdQTHYyIgorTElDRU5TRV9lMmZzcHJvZ3MtZnNjayA9ICJHUEx2MiIKK0xJQ0VOU0VfZTJmc3Byb2dzLXR1bmUyZnMgPSAiR1BMdjIiCitMSUNFTlNFX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iNDhmMjFkNzY1Yjg3NWJkMTA0MDA5NzVkMTJjMWNhMiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9leHQyZnMvZXh0MmZzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT05O21kNT01OTZhOGRlZGNiNGU3MzFjNmIyMWM3YTQ2ZmJhNmJlZiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9lMnAvZTJwLmg7YmVnaW5saW5lPTE7ZW5kbGluZT03O21kNT04YTc0YWRlOGY5ZDY1MDk1ZDcwZWYyZDRiZjQ4ZTM2YSBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL3V1aWQuaC5pbjtiZWdpbmxpbmU9MTtlbmRsaW5lPTMyO21kNT1kYmI4MDc5ZTExNGE1Zjg0MTkzNGI5OWU1OWM4ODIwYSBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dWlkL0NPUFlJTkc7bWQ1PTU4ZGNkODQ1MjY1MWZjOGIwN2QxZjY1Y2UwN2NhOGFmIFwKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2V0L2V0X25hbWUuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1lYWQyMzY0NDdkYWM3Yjk4MGRiYzViNDgwNGQ4YzgzNiBcCisgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9zcy9zcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjA7bWQ1PTZlODlhZDQ3ZGE2ZTc1ZmVjZDJiNWUwZTgxZTFkNGE2IgorU0VDVElPTiA9ICJiYXNlIgorREVQRU5EUyA9ICJ1dGlsLWxpbnV4IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9lMmZzcHJvZ3MvZTJmc3Byb2dzLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ta2Rpci5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHBrZ2NvbmZpZyBtdWx0aWxpYl9oZWFkZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMwNDNiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtZTJmc3Byb2dzLWZpeC1jcm9zcy1jb21waWxhdGlvbi1wcm9ibGVtLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTdWJqZWN0OiBlMmZzcHJvZ3M6IGZpeCBjcm9zcyBjb21waWxhdGlvbiBwcm9ibGVtCisKK1RoZSBjaGVja2luZyBvZiB0eXBlcyBpbiBwYXJzZS10eXBlcy5zaCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSBpbiBhCitjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIGJpbmFyeSBpcyBleGVjdXRlZAorb24gYnVpbGQgbWFjaGluZS4KKworU28gZXZlbiBpZiBhc21fdHlwZXMuaCBoYXMgZ290IGNvcnJlY3Qgc3RhdGVtZW50cyBmb3IgdHlwZXMsIGl0J3MgcG9zc2libGUKK3RoYXQgdGhlIGdlbmVyYXRlZCBiaW5hcnkgd2lsbCByZXBvcnQgYW4gZXJyb3IuIEJlY2F1c2UgdGhlc2UgdHlwZXMgYXJlIGZvcgordGhlIHRhcmdldCBtYWNoaW5lLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcvcGFyc2UtdHlwZXMuc2ggfCAgICA2ICsrKystLQorIGNvbmZpZ3VyZS5pbiAgICAgICAgICB8ICAgIDYgKysrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcvcGFyc2UtdHlwZXMuc2ggYi9jb25maWcvcGFyc2UtdHlwZXMuc2gKK2luZGV4IDUwNzZmNmMuLjI0ZDJhOTkgMTAwNzU1CistLS0gYS9jb25maWcvcGFyc2UtdHlwZXMuc2gKKysrKyBiL2NvbmZpZy9wYXJzZS10eXBlcy5zaAorQEAgLTExOCw4ICsxMTgsMTAgQEAgaWYgLi9hc21fdHlwZXMKKyB0aGVuCisgICAgIHRydWUKKyBlbHNlCistICAgIGVjaG8gIlByb2JsZW0gZGV0ZWN0ZWQgd2l0aCBhc21fdHlwZXMuaCIKKy0gICAgZWNobyAiIiA+IGFzbV90eXBlcy5oCisrICAgIGlmIFsgIiR7Q1JPU1NfQ09NUElMRX0iICE9ICIxIiBdOyB0aGVuCisrCWVjaG8gIlByb2JsZW0gZGV0ZWN0ZWQgd2l0aCBhc21fdHlwZXMuaCIKKysJZWNobyAiIiA+IGFzbV90eXBlcy5oCisrICAgIGZpCisgZmkKKyBybSBhc21fdHlwZXMuYyBhc21fdHlwZXMKKyAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDY4YWRmMGQuLmVkMTY5N2IgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTk1Myw3ICs5NTMsMTEgQEAgQUNfU1VCU1QoU0laRU9GX0xPTkcpCisgQUNfU1VCU1QoU0laRU9GX0xPTkdfTE9ORykKKyBBQ19TVUJTVChTSVpFT0ZfT0ZGX1QpCisgQUNfQ19CSUdFTkRJQU4KKy1CVUlMRF9DQz0iJEJVSUxEX0NDIiBDUFA9IiRDUFAiIC9iaW4vc2ggJGFjX2F1eF9kaXIvcGFyc2UtdHlwZXMuc2gKKytpZiB0ZXN0ICRjcm9zc19jb21waWxpbmcgPSBubzsgdGhlbgorKyAgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisrZWxzZQorKyAgQ1JPU1NfQ09NUElMRT0iMSIgQlVJTERfQ0M9IiRCVUlMRF9DQyIgQ1BQPSIkQ1BQIiAvYmluL3NoICRhY19hdXhfZGlyL3BhcnNlLXR5cGVzLnNoCisrZmkKKyBBU01fVFlQRVNfSEVBREVSPS4vYXNtX3R5cGVzLmgKKyBBQ19TVUJTVF9GSUxFKEFTTV9UWVBFU19IRUFERVIpCisgZG5sCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmNzdjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDEtbGliZXh0MmZzLWZpeC1wb3RlbnRpYWwtYnVmZmVyLW92ZXJmbG93LWluLWNsb3NlZnMucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorRnJvbSA0OWQwZmUyYTE0ZjJhMjNkYTJmZTI5OTY0MzM3OWI4YzFkMzdkZjczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK0RhdGU6IEZyaSwgNiBGZWIgMjAxNSAxMjo0NjozOSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBsaWJleHQyZnM6IGZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIGNsb3NlZnMoKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoZSBidWcgZml4IGluIGY2NmU2Y2U0NDQ2OiAibGliZXh0MmZzOiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgaWYKK3NfZmlyc3RfbWV0YV9iZyBpcyB0b28gYmlnIiBoYWQgYSB0eXBvIGluIHRoZSBmaXggZm9yCitleHQyZnNfY2xvc2VmcygpLiAgSW4gcHJhY3RpY2UgbW9zdCBvZiB0aGUgc2VjdXJpdHkgZXhwb3N1cmUgd2FzIGZyb20KK3RoZSBvcGVuZnMgcGF0aCwgc2luY2UgdGhpcyBtZWFudCBpZiB0aGVyZSB3YXMgYSBjYXJlZnVsbHkgY3JhZnRlZAorZmlsZSBzeXN0ZW0sIGJ1ZmZlciBvdmVycnVuIHdvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSB3YXMKK29wZW5lZC4KKworSG93ZXZlciwgaWYgY29ycnVwdGVkIGZpbGUgc3lzdGVtIGRpZG4ndCB0cmlwIG92ZXIgc29tZSBjb3JydXB0aW9uCitjaGVjaywgYW5kIHRoZW4gdGhlIGZpbGUgc3lzdGVtIHdhcyBtb2RpZmllZCB2aWEgdHVuZTJmcyBvciBkZWJ1Z2ZzLAorc3VjaCB0aGF0IHRoZSBzdXBlcmJsb2NrIHdhcyBtYXJrZWQgZGlydHkgYW5kIHRoZW4gd3JpdHRlbiBvdXQgdmlhIHRoZQorY2xvc2VmcygpIHBhdGgsIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgYnVmZmVyIG92ZXJydW4gY291bGQgYmUKK3RyaWdnZXJlZCB3aGVuIHRoZSBmaWxlIHN5c3RlbSBpcyBjbG9zZWQuCisKK0Fsc28gY2xlYXIgdXAgYSBzaWduZWQgdnMgdW5zaWduZWQgd2FybmluZyB3aGlsZSB3ZSdyZSBhdCBpdC4KKworVGhhbmtzIHRvIE5pY2sgS3JhbGV2aWNoIDxubmtAZ29vZ2xlLmNvbT4gZm9yIGFza2luZyBtZSB0byBsb29rIGF0Citjb21waWxlciB3YXJuaW5nIGluIHRoZSBjb2RlIGluIHF1ZXN0aW9uLCB3aGljaCBsZWQgbWUgdG8gbm90aWNlIHRoZQorYnVnIGluIGY2NmU2Y2U0NDQ2LgorCitBZGRyZXNzZXM6IENWRS0yMDE1LTE1NzIKKworU2lnbmVkLW9mZi1ieTogVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KKy0tLQorIGxpYi9leHQyZnMvY2xvc2Vmcy5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK2luZGV4IDFmOTkxMTMuLmFiNWIyZmIgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL2Nsb3NlZnMuYworKysrIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK0BAIC0yODcsNyArMjg3LDcgQEAgZXJyY29kZV90IGV4dDJmc19mbHVzaDIoZXh0Ml9maWxzeXMgZnMsIGludCBmbGFncykKKyAJZGdycF90CQlqOworICNlbmRpZgorIAljaGFyCSpncm91cF9wdHI7CistCWludAlvbGRfZGVzY19ibG9ja3M7CisrCWJsazY0X3QJb2xkX2Rlc2NfYmxvY2tzOworIAlzdHJ1Y3QgZXh0MmZzX251bWVyaWNfcHJvZ3Jlc3Nfc3RydWN0IHByb2dyZXNzOworIAorIAlFWFQyX0NIRUNLX01BR0lDKGZzLCBFWFQyX0VUX01BR0lDX0VYVDJGU19GSUxTWVMpOworQEAgLTM0Niw3ICszNDYsNyBAQCBlcnJjb2RlX3QgZXh0MmZzX2ZsdXNoMihleHQyX2ZpbHN5cyBmcywgaW50IGZsYWdzKQorIAlncm91cF9wdHIgPSAoY2hhciAqKSBncm91cF9zaGFkb3c7CisgCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZykKKysJCWlmIChvbGRfZGVzY19ibG9ja3MgPiBmcy0+ZGVzY19ibG9ja3MpCisgCQkJb2xkX2Rlc2NfYmxvY2tzID0gZnMtPmRlc2NfYmxvY2tzOworIAl9IGVsc2UKKyAJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMS1ta2UyZnMtYWRkLXRoZS1hYmlsaXR5LXRvLWNvcHktZmlsZXMtZnJvbS1hLWdpdmVuLWRpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYTQxM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRnJvbSBjOThmZWMwMDRmMDc3ZTU2NmI5ZGZhMjBiMjVlM2I4NmNiNDYyYTJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDAxOjQxOjA4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDEvMTFdIG1rZTJmczogYWRkIHRoZSBhYmlsaXR5IHRvIGNvcHkgZmlsZXMgZnJvbSBhIGdpdmVuCisgZGlyZWN0b3J5CisKK1dlIHdpbGwgYWRkIGEgLWQgb3B0aW9uIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgYWRkaW5nIHRoZSBmaWxlcyBmcm9tIGEKK2dpdmVuIGRpcmVjdG9yeSB0byB0aGUgZmlsZXN5c3RlbSwgaXQgaXMgc2ltaWxpYXIgdG8gZ2VuZXh0MmZzLCBidXQKK2dlbmV4dDJmcyBkb2Vzbid0IGZ1bGx5IHN1cHBvcnQgZXh0NC4KKworKiBXZSBhbHJlYWR5IGhhdmUgdGhlIGJhc2ljIG9wZXJhdGlvbnMgaW4gZGVidWdmczoKKyAgLSBDb3B5IHJlZ3VsYXIgZmlsZQorICAtIENyZWF0ZSBkaXJlY3RvcnkKKyAgLSBDcmVhdGUgc3ltbGluaworICAtIENyZWF0ZSBzcGVjaWFsIGZpbGUKKworICBXZSB3aWxsIG1vdmUgdGhlc2Ugb3BlcmF0aW9ucyBpbnRvIGNyZWF0ZV9pbm9kZS5oIGFuZCBjcmVhdGVfaW5vZGUuYywKKyAgdGhlbiBsZXQgYm90aCBta2UyZnMgYW5kIGRlYnVnZnMgdXNlIHRoZW0uCisKKyogV2hhdCB3ZSBuZWVkIHRvIGRvIGFyZToKKyAgLSBDb3B5IHRoZSBnaXZlbiBkaXJlY3RvcnkgcmVjdXJzaXZlbHksIHRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZQorICAgIHBvcHVsYXRlX2ZzKCkKKyAgLSBTZXQgdGhlIG93bmVyLCBtb2RlIGFuZCBvdGhlciBpbmZvcm1hdGlvbnMKKyAgLSBIYW5kbGUgdGhlIGhhcmQgbGlua3MKKworVE9ETzoKKyAgLSBUaGUgbGliZXh0MmZzIGNhbid0IGNyZWF0ZSB0aGUgc29ja2V0IGZpbGUgKFNfSUZTT0NLKSwgZG8gd2UgaGF2ZSBhCisgICAgcGxhbiB0byBzdXBwb3J0IGl0ID8KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKysrKysrCisgbWlzYy9jcmVhdGVfaW5vZGUuaCB8ICAgMTcgKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbWlzYy9jcmVhdGVfaW5vZGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBtaXNjL2NyZWF0ZV9pbm9kZS5oCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ2YWFhNjAKKy0tLSAvZGV2L251bGwKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0wLDAgKzEsMjYgQEAKKysjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisrCisrLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisrZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworK30KKysKKysvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworK2VycmNvZGVfdCBkb19zeW1saW5rX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0YXJnZXQpCisreworK30KKysKKysvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworK2VycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorK3sKKyt9CisrCisrLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisrZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisreworK30KKysKKysvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworK2VycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisreworK30KK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5oIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlmYzk3ZmEKKy0tLSAvZGV2L251bGwKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmgKK0BAIC0wLDAgKzEsMTcgQEAKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKysjaW5jbHVkZSAiZTJwL2UycC5oIgorKyNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisrI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKysKKytleHQyX2ZpbHN5cyAgICBjdXJyZW50X2ZzOworK2V4dDJfaW5vX3QgICAgIHJvb3Q7CisrCisrLyogRm9yIHBvcHVsYXRpbmcgdGhlIGZpbGVzeXN0ZW0gKi8KKytleHRlcm4gZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2Rpcik7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCk7CisrZXh0ZXJuIGVycmNvZGVfdCBkb19ta2Rpcl9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KTsKKytleHRlcm4gZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZmY2NDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAyLW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1maWxlcy1yZWN1cnNpdmVseS5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSAwOGRmYmFmNGUzZjcwNDIzMmZmNDZkNzhjMDc1OGE2Y2ZlMzk2MWM4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAyOjU5OjEwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDIvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNvcHkgZmlsZXMgcmVjdXJzaXZlbHkKKworVXNlIG9wZW5kaXIoKSBhbmQgcmVhZGRpcigpIHRvIHJlYWQgdGhlIG5hdGl2ZSBkaXJlY3RvcnksIHRoZW4gdXNlCitsc3RhdCgpIHRvIGlkZW50aWZ5IHRoZSBmaWxlIHR5cGUgYW5kIGNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gdG8KK2FkZCB0aGUgZmlsZSB0byB0aGUgZmlsZXN5c3RlbSwgY2FsbCB0aGUgcG9wdWxhdGVfZnMoKSByZWN1cnNpdmVseSBpZiBpdAoraXMgYSBkaXJlY3RvcnkuCisKK05PVEU6IHRoZSBsaWJleHQyZnMgY2FuJ3QgY3JlYXRlIHRoZSBzb2NrZXQgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9taXNjL2NyZWF0ZV9pbm9kZS5jIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworaW5kZXggNDZhYWE2MC4uYjY4YjkxMCAxMDA2NDQKKy0tLSBhL21pc2MvY3JlYXRlX2lub2RlLmMKKysrKyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK0BAIC0xLDUgKzEsMTMgQEAKKyAjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisgCisrI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDFMCisrIyBpZiBfX0dOVUNfXyA+PSAyCisrIyAgZGVmaW5lIF9fZnVuY19fIF9fRlVOQ1RJT05fXworKyMgZWxzZQorKyMgIGRlZmluZSBfX2Z1bmNfXyAiPHVua25vd24+IgorKyMgZW5kaWYKKysjZW5kaWYKKysKKyAvKiBNYWtlIGEgc3BlY2lhbCBmaWxlIHdoaWNoIGlzIGJsb2NrLCBjaGFyYWN0ZXIgYW5kIGZpZm8gKi8KKyBlcnJjb2RlX3QgZG9fbWtub2RfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMjMsNCArMzEsOTMgQEAgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgLyogQ29weSBmaWxlcyBmcm9tIHNvdXJjZV9kaXIgdG8gZnMgKi8KKyBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKQorIHsKKysJY29uc3QgY2hhcgkqbmFtZTsKKysJRElSCQkqZGg7CisrCXN0cnVjdCBkaXJlbnQJKmRlbnQ7CisrCXN0cnVjdCBzdGF0CXN0OworKwljaGFyCQlsbl90YXJnZXRbUEFUSF9NQVhdOworKwlleHQyX2lub190CWlubzsKKysJZXJyY29kZV90CXJldHZhbDsKKysJaW50CQlyZWFkX2NudDsKKysKKysJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisrCisrCWlmIChjaGRpcihzb3VyY2VfZGlyKSA8IDApIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCV8oIndoaWxlIGNoYW5naW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvIFwiJXNcIiIpLCBzb3VyY2VfZGlyKTsKKysJCXJldHVybiBlcnJubzsKKysJfQorKworKwlpZiAoIShkaCA9IG9wZW5kaXIoIi4iKSkpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIGVycm5vLAorKwkJCV8oIndoaWxlIG9wZW5uaW5nIGRpcmVjdG9yeSBcIiVzXCIiKSwgc291cmNlX2Rpcik7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysKKysJd2hpbGUoKGRlbnQgPSByZWFkZGlyKGRoKSkpIHsKKysJCWlmKCghc3RyY21wKGRlbnQtPmRfbmFtZSwgIi4iKSkgfHwgKCFzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSkpCisrCQkJY29udGludWU7CisrCQlsc3RhdChkZW50LT5kX25hbWUsICZzdCk7CisrCQluYW1lID0gZGVudC0+ZF9uYW1lOworKworKwkJc3dpdGNoKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKKysJCQljYXNlIFNfSUZDSFI6CisrCQkJY2FzZSBTX0lGQkxLOgorKwkJCWNhc2UgU19JRklGTzoKKysJCQkJaWYgKChyZXR2YWwgPSBkb19ta25vZF9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCAmc3QpKSkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLAorKwkJCQkJCV8oIndoaWxlIGNyZWF0aW5nIHNwZWNpYWwgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRlNPQ0s6CisrCQkJCS8qIEZJWE1FOiB0aGVyZSBpcyBubyBtYWtlIHNvY2tldCBmdW5jdGlvbiBhdG0uICovCisrCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisrCQkJCQlfKCJpZ25vcmluZyBzb2NrZXQgZmlsZSBcIiVzXCIiKSwgbmFtZSk7CisrCQkJCWNvbnRpbnVlOworKwkJCWNhc2UgU19JRkxOSzoKKysJCQkJaWYoKHJlYWRfY250ID0gcmVhZGxpbmsobmFtZSwgbG5fdGFyZ2V0LCBzaXplb2YobG5fdGFyZ2V0KSkpID09IC0xKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCBlcnJubywKKysJCQkJCQlfKCJ3aGlsZSB0cnlpbmcgdG8gcmVhZGxpbmsgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIGVycm5vOworKwkJCQl9CisrCQkJCWxuX3RhcmdldFtyZWFkX2NudF0gPSAnXDAnOworKwkJCQlpZiAoKHJldHZhbCA9IGRvX3N5bWxpbmtfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgbG5fdGFyZ2V0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSB3cml0aW5nIHN5bWxpbmtcIiVzXCIiKSwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWJyZWFrOworKwkJCWNhc2UgU19JRlJFRzoKKysJCQkJaWYgKChyZXR2YWwgPSBkb193cml0ZV9pbnRlcm5hbChwYXJlbnRfaW5vLCBuYW1lLCBuYW1lKSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSB3cml0aW5nIGZpbGUgXCIlc1wiIiksIG5hbWUpOworKwkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQlicmVhazsKKysJCQljYXNlIFNfSUZESVI6CisrCQkJCWlmICgocmV0dmFsID0gZG9fbWtkaXJfaW50ZXJuYWwocGFyZW50X2lubywgbmFtZSwgJnN0KSkpIHsKKysJCQkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJCQlfKCJ3aGlsZSBtYWtpbmcgZGlyIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJaWYgKChyZXR2YWwgPSBleHQyZnNfbmFtZWkoY3VycmVudF9mcywgcm9vdCwgcGFyZW50X2lubywgbmFtZSwgJmlubykpKSB7CisrCQkJCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQkJCQkJcmV0dXJuIHJldHZhbDsKKysJCQkJfQorKwkJCQkvKiBQb3B1bGF0ZSB0aGUgZGlyIHJlY3Vyc2l2ZWx5Ki8KKysJCQkJcmV0dmFsID0gcG9wdWxhdGVfZnMoaW5vLCBuYW1lKTsKKysJCQkJaWYgKHJldHZhbCkgeworKwkJCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCBfKCJ3aGlsZSBhZGRpbmcgZGlyIFwiJXNcIiIpLCBuYW1lKTsKKysJCQkJCXJldHVybiByZXR2YWw7CisrCQkJCX0KKysJCQkJY2hkaXIoIi4uIik7CisrCQkJCWJyZWFrOworKwkJCWRlZmF1bHQ6CisrCQkJCWNvbV9lcnIoX19mdW5jX18sIDAsCisrCQkJCQlfKCJpZ25vcmluZyBlbnRyeSBcIiVzXCIiKSwgbmFtZSk7CisrCQl9CisrCX0KKysJY2xvc2VkaXIoZGgpOworKwlyZXR1cm4gcmV0dmFsOworIH0KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODQ3YjZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwMy1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zcGVjaWFsLWZpbGUucGF0Y2gKQEAgLTAsMCArMSwxMDMgQEAKK0Zyb20gYWU3ZDMzODIzYmZjMzMwZTA4YjI1YzVmZTRkMjU4MzhlZjdjNzdjZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzoxMzoyOCAtMDUwMAorU3ViamVjdDogW1BBVENIIDAzLzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBjcmVhdGUgc3BlY2lhbCBmaWxlCisKK1RoZSBkb19ta25vZF9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNyZWF0aW5nIHNwZWNpYWwgZmlsZSB3aGljaCBpcworYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbywgbW9zdCBvZiB0aGUgY29kZSBhcmUgZnJvbSBkZWJ1Z2ZzL2RlYnVnZnMuYywKK3RoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgNzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBiNjhiOTEwLi40ZGE4YWZmIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTExLDYgKzExLDc4IEBACisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworKwlleHQyX2lub190CQlpbm87CisrCWVycmNvZGVfdCAJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCXVuc2lnbmVkIGxvbmcJCW1ham9yLCBtaW5vciwgbW9kZTsKKysJaW50CQkJZmlsZXR5cGU7CisrCisrCXN3aXRjaChzdC0+c3RfbW9kZSAmIFNfSUZNVCkgeworKwkJY2FzZSBTX0lGQ0hSOgorKwkJCW1vZGUgPSBMSU5VWF9TX0lGQ0hSOworKwkJCWZpbGV0eXBlID0gRVhUMl9GVF9DSFJERVY7CisrCQkJYnJlYWs7CisrCQljYXNlIFNfSUZCTEs6CisrCQkJbW9kZSA9IExJTlVYX1NfSUZCTEs7CisrCQkJZmlsZXR5cGUgPSAgRVhUMl9GVF9CTEtERVY7CisrCQkJYnJlYWs7CisrCQljYXNlIFNfSUZJRk86CisrCQkJbW9kZSA9IExJTlVYX1NfSUZJRk87CisrCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisrCQkJYnJlYWs7CisrCX0KKysKKysJaWYgKCEoY3VycmVudF9mcy0+ZmxhZ3MgJiBFWFQyX0ZMQUdfUlcpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiRmlsZXN5c3RlbSBvcGVuZWQgcmVhZC9vbmx5Iik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysJcmV0dmFsID0gZXh0MmZzX25ld19pbm9kZShjdXJyZW50X2ZzLCBjd2QsIDAxMDc1NSwgMCwgJmlubyk7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrI2lmZGVmIERFQlVHRlMKKysJcHJpbnRmKCJBbGxvY2F0ZWQgaW5vZGU6ICV1XG4iLCBpbm8pOworKyNlbmRpZgorKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIG5hbWUsIGlubywgZmlsZXR5cGUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgY3dkLCBuYW1lLCBpbm8sIGZpbGV0eXBlKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKG5hbWUsIHJldHZhbCwgMCk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgaW5vKSkKKysJCWNvbV9lcnIoX19mdW5jX18sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworKwlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIGlubywgKzEsIDApOworKwltZW1zZXQoJmlub2RlLCAwLCBzaXplb2YoaW5vZGUpKTsKKysJaW5vZGUuaV9tb2RlID0gbW9kZTsKKysJaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysJCWN1cnJlbnRfZnMtPm5vdyA/IGN1cnJlbnRfZnMtPm5vdyA6IHRpbWUoMCk7CisrCisrCW1ham9yID0gbWFqb3Ioc3QtPnN0X3JkZXYpOworKwltaW5vciA9IG1pbm9yKHN0LT5zdF9yZGV2KTsKKysKKysJaWYgKChtYWpvciA8IDI1NikgJiYgKG1pbm9yIDwgMjU2KSkgeworKwkJaW5vZGUuaV9ibG9ja1swXSA9IG1ham9yICogMjU2ICsgbWlub3I7CisrCQlpbm9kZS5pX2Jsb2NrWzFdID0gMDsKKysJfSBlbHNlIHsKKysJCWlub2RlLmlfYmxvY2tbMF0gPSAwOworKwkJaW5vZGUuaV9ibG9ja1sxXSA9IChtaW5vciAmIDB4ZmYpIHwgKG1ham9yIDw8IDgpIHwgKChtaW5vciAmIH4weGZmKSA8PCAxMik7CisrCX0KKysJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrCisrCXJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKQorKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgY3JlYXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKworKwlyZXR1cm4gcmV0dmFsOworIH0KKyAKKyAvKiBNYWtlIGEgc3ltbGluayBuYW1lIC0+IHRhcmdldCAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA0LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXN5bWxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkMTk4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDQtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtc3ltbGluay5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIDA5ZDMwNDk3NzY4ODIxNjdmNzI0OWVlMjYyNjViNDE2M2Q3MjIyYzEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MTk6NTUgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNC8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIHN5bWxpbmsKKworVGhlIGRvX3N5bWxpbmtfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBjcmVhdGluZyBzeW1saW5rcywgbW9zdCBvZiB0aGUKK2NvZGUgYXJlIGZyb20gZGVidWdmcy9kZWJ1Z2ZzLmMsIHRoZSBkZWJ1Z2ZzL2RlYnVnZnMuYyB3aWxsIGJlIG1vZGlmaWVkCit0byB1c2UgdGhpcyBmdW5jdGlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA0ZGE4YWZmLi5mODQ1MTAzIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTg4LDYgKzg4LDM4IEBAIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIC8qIE1ha2UgYSBzeW1saW5rIG5hbWUgLT4gdGFyZ2V0ICovCisgZXJyY29kZV90IGRvX3N5bWxpbmtfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnRhcmdldCkKKyB7CisrCWNoYXIJCQkqY3A7CisrCWV4dDJfaW5vX3QJCXBhcmVudF9pbm87CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysJc3RydWN0IHN0YXQJCXN0OworKworKwljcCA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKysJaWYgKGNwKSB7CisrCQkqY3AgPSAwOworKwkJaWYgKChyZXR2YWwgPSAgZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgbmFtZSwgJnBhcmVudF9pbm8pKSl7CisrCQkJY29tX2VycihuYW1lLCByZXR2YWwsIDApOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQluYW1lID0gY3ArMTsKKysJfSBlbHNlCisrCQlwYXJlbnRfaW5vID0gY3dkOworKworK3RyeV9hZ2FpbjoKKysJcmV0dmFsID0gZXh0MmZzX3N5bWxpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgMCwgbmFtZSwgdGFyZ2V0KTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycigiZG9fc3ltbGlua19pbnRlcm5hbCIsIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJZ290byB0cnlfYWdhaW47CisrCX0KKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycigiZXh0MmZzX3N5bWxpbmsiLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworIH0KKyAKKyAvKiBNYWtlIGEgZGlyZWN0b3J5IGluIHRoZSBmcyAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzNWNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDUtbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LXJlZ3VsYXItZmlsZS5wYXRjaApAQCAtMCwwICsxLDIyNCBAQAorRnJvbSAyOTczYzc0YWZhYTUzMmYzZjcyNjM5YjQ2MzMyMmIyNTIzNTE5YzIwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDAzOjI4OjEyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDUvMTFdIG1pc2MvY3JlYXRlX2lub2RlLmM6IGNvcHkgcmVndWxhciBmaWxlCisKK1RoZSBkb193cml0ZV9pbnRlcm5hbCgpIGlzIHVzZWQgZm9yIGNvcHlpbmcgZmlsZSBmcm9tIG5hdGl2ZSBmcyB0bwordGFyZ2V0LCBtb3N0IG9mIHRoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUKK2RlYnVnZnMvZGVidWdmcy5jIHdpbGwgYmUgbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgIDE4MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBmODQ1MTAzLi45OGY0YTkzIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTgsNiArOCwxNiBAQAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKysvKiA2NEtpQiBpcyB0aGUgbWluaW1pdW0gYmxrc2l6ZSB0byBiZXN0IG1pbmltaXplIHN5c3RlbSBjYWxsIG92ZXJoZWFkLiAqLworKyNpZm5kZWYgSU9fQlVGU0laRQorKyNkZWZpbmUgSU9fQlVGU0laRSA2NCoxMDI0CisrI2VuZGlmCisrCisrLyogQmxvY2sgc2l6ZSBmb3IgYHN0X2Jsb2NrcycgKi8KKysjaWZuZGVmIFNfQkxLU0laRQorKyNkZWZpbmUgU19CTEtTSVpFIDUxMgorKyNlbmRpZgorKworIC8qIE1ha2UgYSBzcGVjaWFsIGZpbGUgd2hpY2ggaXMgYmxvY2ssIGNoYXJhY3RlciBhbmQgZmlmbyAqLworIGVycmNvZGVfdCBkb19ta25vZF9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0KQorIHsKK0BAIC0xMjcsOSArMTM3LDE4MiBAQCBlcnJjb2RlX3QgZG9fbWtkaXJfaW50ZXJuYWwoZXh0Ml9pbm9fdCBjd2QsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CisgfQorIAorK3N0YXRpYyBlcnJjb2RlX3QgY29weV9maWxlKGludCBmZCwgZXh0Ml9pbm9fdCBuZXdmaWxlLCBpbnQgYnVmc2l6ZSwgaW50IG1ha2VfaG9sZXMpCisreworKwlleHQyX2ZpbGVfdAllMl9maWxlOworKwllcnJjb2RlX3QJcmV0dmFsOworKwlpbnQJCWdvdDsKKysJdW5zaWduZWQgaW50CXdyaXR0ZW47CisrCWNoYXIJCSpidWY7CisrCWNoYXIJCSpwdHI7CisrCWNoYXIJCSp6ZXJvX2J1ZjsKKysJaW50CQljbXA7CisrCisrCXJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oY3VycmVudF9mcywgbmV3ZmlsZSwKKysJCQkJICBFWFQyX0ZJTEVfV1JJVEUsICZlMl9maWxlKTsKKysJaWYgKHJldHZhbCkKKysJCXJldHVybiByZXR2YWw7CisrCisrCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtKGJ1ZnNpemUsICZidWYpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwkvKiBUaGlzIGlzIHVzZWQgZm9yIGNoZWNraW5nIHdoZXRoZXIgdGhlIHdob2xlIGJsb2NrIGlzIHplcm8gKi8KKysJcmV0dmFsID0gZXh0MmZzX2dldF9tZW16ZXJvKGJ1ZnNpemUsICZ6ZXJvX2J1Zik7CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoImNvcHlfZmlsZSIsIHJldHZhbCwgImNhbid0IGFsbG9jYXRlIGJ1ZmZlclxuIik7CisrCQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXdoaWxlICgxKSB7CisrCQlnb3QgPSByZWFkKGZkLCBidWYsIGJ1ZnNpemUpOworKwkJaWYgKGdvdCA9PSAwKQorKwkJCWJyZWFrOworKwkJaWYgKGdvdCA8IDApIHsKKysJCQlyZXR2YWwgPSBlcnJubzsKKysJCQlnb3RvIGZhaWw7CisrCQl9CisrCQlwdHIgPSBidWY7CisrCisrCQkvKiBTcGFyc2UgY29weSAqLworKwkJaWYgKG1ha2VfaG9sZXMpIHsKKysJCQkvKiBDaGVjayB3aGV0aGVyIGFsbCBpcyB6ZXJvICovCisrCQkJY21wID0gbWVtY21wKHB0ciwgemVyb19idWYsIGdvdCk7CisrCQkJaWYgKGNtcCA9PSAwKSB7CisrCQkJCSAvKiBUaGUgd2hvbGUgYmxvY2sgaXMgemVybywgbWFrZSBhIGhvbGUgKi8KKysJCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgZ290LCBFWFQyX1NFRUtfQ1VSLCBOVUxMKTsKKysJCQkJaWYgKHJldHZhbCkKKysJCQkJCWdvdG8gZmFpbDsKKysJCQkJZ290ID0gMDsKKysJCQl9CisrCQl9CisrCisrCQkvKiBOb3JtYWwgY29weSAqLworKwkJd2hpbGUgKGdvdCA+IDApIHsKKysJCQlyZXR2YWwgPSBleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBwdHIsCisrCQkJCQkJICAgZ290LCAmd3JpdHRlbik7CisrCQkJaWYgKHJldHZhbCkKKysJCQkJZ290byBmYWlsOworKworKwkJCWdvdCAtPSB3cml0dGVuOworKwkJCXB0ciArPSB3cml0dGVuOworKwkJfQorKwl9CisrCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisrCXJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKwlyZXR1cm4gcmV0dmFsOworKworK2ZhaWw6CisrCWV4dDJmc19mcmVlX21lbSgmYnVmKTsKKysJZXh0MmZzX2ZyZWVfbWVtKCZ6ZXJvX2J1Zik7CisrCSh2b2lkKSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKysJcmV0dXJuIHJldHZhbDsKKyt9CisrCisgLyogQ29weSB0aGUgbmF0aXZlIGZpbGUgdG8gdGhlIGZzICovCisgZXJyY29kZV90IGRvX3dyaXRlX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRlc3QpCisgeworKwlpbnQJCWZkOworKwlzdHJ1Y3Qgc3RhdAlzdGF0YnVmOworKwlleHQyX2lub190CW5ld2ZpbGU7CisrCWVycmNvZGVfdAlyZXR2YWw7CisrCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworKwlpbnQJCWJ1ZnNpemUgPSBJT19CVUZTSVpFOworKwlpbnQJCW1ha2VfaG9sZXMgPSAwOworKworKwlmZCA9IG9wZW4oc3JjLCBPX1JET05MWSk7CisrCWlmIChmZCA8IDApIHsKKysJCWNvbV9lcnIoc3JjLCBlcnJubywgMCk7CisrCQlyZXR1cm4gZXJybm87CisrCX0KKysJaWYgKGZzdGF0KGZkLCAmc3RhdGJ1ZikgPCAwKSB7CisrCQljb21fZXJyKHNyYywgZXJybm8sIDApOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIGVycm5vOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIGRlc3QsICZuZXdmaWxlKTsKKysJaWYgKHJldHZhbCA9PSAwKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiVGhlIGZpbGUgJyVzJyBhbHJlYWR5IGV4aXN0c1xuIiwgZGVzdCk7CisrCQljbG9zZShmZCk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKysJaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysjaWZkZWYgREVCVUdGUworKwlwcmludGYoIkFsbG9jYXRlZCBpbm9kZTogJXVcbiIsIG5ld2ZpbGUpOworKyNlbmRpZgorKwlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGRlc3QsIG5ld2ZpbGUsCisrCQkJCUVYVDJfRlRfUkVHX0ZJTEUpOworKwlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CisrCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQljbG9zZShmZCk7CisrCQkJcmV0dXJuIHJldHZhbDsKKysJCX0KKysJCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgZGVzdCwgbmV3ZmlsZSwKKysJCQkJCUVYVDJfRlRfUkVHX0ZJTEUpOworKwl9CisrCWlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoZGVzdCwgcmV0dmFsLCAwKTsKKysJCWNsb3NlKGZkKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKysgICAgICAgIGlmIChleHQyZnNfdGVzdF9pbm9kZV9iaXRtYXAyKGN1cnJlbnRfZnMtPmlub2RlX21hcCwgbmV3ZmlsZSkpCisrCQljb21fZXJyKF9fZnVuY19fLCAwLCAiV2FybmluZzogaW5vZGUgYWxyZWFkeSBzZXQiKTsKKysJZXh0MmZzX2lub2RlX2FsbG9jX3N0YXRzMihjdXJyZW50X2ZzLCBuZXdmaWxlLCArMSwgMCk7CisrCW1lbXNldCgmaW5vZGUsIDAsIHNpemVvZihpbm9kZSkpOworKwlpbm9kZS5pX21vZGUgPSAoc3RhdGJ1Zi5zdF9tb2RlICYgfkxJTlVYX1NfSUZNVCkgfCBMSU5VWF9TX0lGUkVHOworKwlpbm9kZS5pX2F0aW1lID0gaW5vZGUuaV9jdGltZSA9IGlub2RlLmlfbXRpbWUgPQorKwkJY3VycmVudF9mcy0+bm93ID8gY3VycmVudF9mcy0+bm93IDogdGltZSgwKTsKKysJaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrCWlub2RlLmlfc2l6ZSA9IHN0YXRidWYuc3Rfc2l6ZTsKKysJaWYgKGN1cnJlbnRfZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgorKwkgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKysJCWludCBpOworKwkJc3RydWN0IGV4dDNfZXh0ZW50X2hlYWRlciAqZWg7CisrCisrCQllaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworKwkJZWgtPmVoX2RlcHRoID0gMDsKKysJCWVoLT5laF9lbnRyaWVzID0gMDsKKysJCWVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisrCQlpID0gKHNpemVvZihpbm9kZS5pX2Jsb2NrKSAtIHNpemVvZigqZWgpKSAvCisrCQkJc2l6ZW9mKHN0cnVjdCBleHQzX2V4dGVudCk7CisrCQllaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworKwkJaW5vZGUuaV9mbGFncyB8PSBFWFQ0X0VYVEVOVFNfRkw7CisrCX0KKysKKysJaWYgKChyZXR2YWwgPSBleHQyZnNfd3JpdGVfbmV3X2lub2RlKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICZpbm9kZSkpKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBjcmVhdGluZyBpbm9kZSAldSIsIG5ld2ZpbGUpOworKwkJY2xvc2UoZmQpOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKwlpZiAoTElOVVhfU19JU1JFRyhpbm9kZS5pX21vZGUpKSB7CisrCQlpZiAoc3RhdGJ1Zi5zdF9ibG9ja3MgPCBzdGF0YnVmLnN0X3NpemUgLyBTX0JMS1NJWkUpIHsKKysJCQltYWtlX2hvbGVzID0gMTsKKysJCQkvKgorKwkJCSAqIFVzZSBJL08gYmxvY2tzaXplIGFzIGJ1ZmZlciBzaXplIHdoZW4KKysJCQkgKiBjb3B5aW5nIHNwYXJzZSBmaWxlcy4KKysJCQkgKi8KKysJCQlidWZzaXplID0gc3RhdGJ1Zi5zdF9ibGtzaXplOworKwkJfQorKwkJcmV0dmFsID0gY29weV9maWxlKGZkLCBuZXdmaWxlLCBidWZzaXplLCBtYWtlX2hvbGVzKTsKKysJCWlmIChyZXR2YWwpCisrCQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAwKTsKKysJfQorKwljbG9zZShmZCk7CisrCisrCXJldHVybiAwOworIH0KKyAKKyAvKiBDb3B5IGZpbGVzIGZyb20gc291cmNlX2RpciB0byBmcyAqLworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjN2NhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA2LW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLWRpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGM4ZDFjNDNiZTI0NDg5MDM2MTM3ZjhmZGViY2ZjY2MyMDhmN2NjOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6MzQ6MTQgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogY3JlYXRlIGRpcmVjdG9yeQorCitUaGUgZG9fbWtkaXJfaW50ZXJuYWwoKSBpcyB1c2VkIGZvciBtYWtpbmcgZGlyIG9uIHRoZSB0YXJnZXQgZnMsIG1vc3Qgb2YKK3RoZSBjb2RlIGFyZSBmcm9tIGRlYnVnZnMvZGVidWdmcy5jLCB0aGUgZGVidWdmcy9kZWJ1Z2ZzLmMgd2lsbCBiZQorbW9kaWZpZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitSZXZpZXdlZC1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CistLS0KKyBtaXNjL2NyZWF0ZV9pbm9kZS5jIHwgICAzMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA5OGY0YTkzLi42YThjOTJhIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTEzNSw2ICsxMzUsMzcgQEAgdHJ5X2FnYWluOgorIC8qIE1ha2UgYSBkaXJlY3RvcnkgaW4gdGhlIGZzICovCisgZXJyY29kZV90IGRvX21rZGlyX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworKwljaGFyCQkJKmNwOworKwlleHQyX2lub190CQlwYXJlbnRfaW5vLCBpbm87CisrCWVycmNvZGVfdAkJcmV0dmFsOworKwlzdHJ1Y3QgZXh0Ml9pbm9kZQlpbm9kZTsKKysKKysKKysJY3AgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisrCWlmIChjcCkgeworKwkJKmNwID0gMDsKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBjd2QsIG5hbWUsICZwYXJlbnRfaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJbmFtZSA9IGNwKzE7CisrCX0gZWxzZQorKwkJcGFyZW50X2lubyA9IGN3ZDsKKysKKyt0cnlfYWdhaW46CisrCXJldHZhbCA9IGV4dDJmc19ta2RpcihjdXJyZW50X2ZzLCBwYXJlbnRfaW5vLCAwLCBuYW1lKTsKKysJaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworKwkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50X2lubyk7CisrCQlpZiAocmV0dmFsKSB7CisrCQkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCQlnb3RvIHRyeV9hZ2FpbjsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKCJleHQyZnNfbWtkaXIiLCByZXR2YWwsIDApOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorIH0KKyAKKyBzdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5NjM5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDctbWlzYy1jcmVhdGVfaW5vZGUuYy1zZXQtb3duZXItbW9kZS10aW1lLWZvci10aGUtaW5vZC5wYXRjaApAQCAtMCwwICsxLDgxIEBACitGcm9tIDJiMWY2ZTZiMzg2NzAzYTVkN2U2MGI3ZDhiNzI3NDZmM2QzMWE4YmMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjMgRGVjIDIwMTMgMDM6Mzk6NTYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8xMV0gbWlzYy9jcmVhdGVfaW5vZGUuYzogc2V0IG93bmVyL21vZGUvdGltZSBmb3IgdGhlIGlub2RlCisKK1NldCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIGlub2RlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyB8ICAgNDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCA2YThjOTJhLi5hYWQ3MzU0IDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTE4LDYgKzE4LDQwIEBACisgI2RlZmluZSBTX0JMS1NJWkUgNTEyCisgI2VuZGlmCisgCisrLyogRmlsbCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworK3N0YXRpYyB2b2lkIGZpbGxfaW5vZGUoc3RydWN0IGV4dDJfaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworKwlpZiAoc3QgIT0gTlVMTCkgeworKwkJaW5vZGUtPmlfdWlkID0gc3QtPnN0X3VpZDsKKysJCWlub2RlLT5pX2dpZCA9IHN0LT5zdF9naWQ7CisrCQlpbm9kZS0+aV9tb2RlIHw9IHN0LT5zdF9tb2RlOworKwkJaW5vZGUtPmlfYXRpbWUgPSBzdC0+c3RfYXRpbWU7CisrCQlpbm9kZS0+aV9tdGltZSA9IHN0LT5zdF9tdGltZTsKKysJCWlub2RlLT5pX2N0aW1lID0gc3QtPnN0X2N0aW1lOworKwl9CisrfQorKworKy8qIFNldCB0aGUgdWlkLCBnaWQsIG1vZGUgYW5kIHRpbWUgZm9yIHRoZSBpbm9kZSAqLworK2VycmNvZGVfdCBzZXRfaW5vZGVfZXh0cmEoZXh0Ml9pbm9fdCBjd2QsIGV4dDJfaW5vX3QgaW5vLCBzdHJ1Y3Qgc3RhdCAqc3QpCisreworKwllcnJjb2RlX3QJCXJldHZhbDsKKysJc3RydWN0IGV4dDJfaW5vZGUJaW5vZGU7CisrCisrCXJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHJlYWRpbmcgaW5vZGUgJXUiLCBpbm8pOworKwkJcmV0dXJuIHJldHZhbDsKKysJfQorKworKwlmaWxsX2lub2RlKCZpbm9kZSwgc3QpOworKworKwlyZXR2YWwgPSBleHQyZnNfd3JpdGVfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSB3cml0aW5nIGlub2RlICV1IiwgaW5vKTsKKysJCXJldHVybiByZXR2YWw7CisrCX0KKyt9CisrCisgLyogTWFrZSBhIHNwZWNpYWwgZmlsZSB3aGljaCBpcyBibG9jaywgY2hhcmFjdGVyIGFuZCBmaWZvICovCisgZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpCisgeworQEAgLTQzNSw2ICs0NjksMTcgQEAgZXJyY29kZV90IHBvcHVsYXRlX2ZzKGV4dDJfaW5vX3QgcGFyZW50X2lubywgY29uc3QgY2hhciAqc291cmNlX2RpcikKKyAJCQkJY29tX2VycihfX2Z1bmNfXywgMCwKKyAJCQkJCV8oImlnbm9yaW5nIGVudHJ5IFwiJXNcIiIpLCBuYW1lKTsKKyAJCX0KKysKKysJCWlmICgocmV0dmFsID0gIGV4dDJmc19uYW1laShjdXJyZW50X2ZzLCByb290LCBwYXJlbnRfaW5vLCBuYW1lLCAmaW5vKSkpeworKwkJCWNvbV9lcnIobmFtZSwgcmV0dmFsLCAwKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKworKwkJaWYgKChyZXR2YWwgPSBzZXRfaW5vZGVfZXh0cmEocGFyZW50X2lubywgaW5vLCAmc3QpKSkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwKKysJCQkJXygid2hpbGUgc2V0dGluZyBpbm9kZSBmb3IgXCIlc1wiIiksIG5hbWUpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGgpOworIAlyZXR1cm4gcmV0dmFsOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTg2NzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA4LW1rZTJmcy5jLWFkZC1hbi1vcHRpb24tZC1yb290LWRpcmVjdG9yeS5wYXRjaApAQCAtMCwwICsxLDE2OCBAQAorRnJvbSBkZjg1NjkyOWU0MmJkNGYzYmRjOGQ0ZjU5ZWU4MmFlOGIyODUzMmU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDI0IERlYyAyMDEzIDAxOjUwOjQ1IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMTFdIG1rZTJmcy5jOiBhZGQgYW4gb3B0aW9uOiAtZCByb290LWRpcmVjdG9yeQorCitUaGlzIG9wdGlvbiBpcyB1c2VkIGZvciBhZGRpbmcgdGhlIGZpbGVzIGZyb20gYSBnaXZlbiBkaXJlY3RvcnkgKHRoZQorcm9vdC1kaXJlY3RvcnkpIHRvIHRoZSBmaWxlc3lzdGVtLCBpdCBpcyBzaW1pbGlhciB0byBnZW5leHQyZnMsIGJ1dAorZ2VuZXh0MmZzIGRvZXNuJ3QgZnVsbHkgc3VwcG9ydCBleHQ0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9NYWtlZmlsZS5pbiB8ICAgMTQgKysrKysrKysrKy0tLS0KKyBtaXNjL21rZTJmcy5jICAgIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9taXNjL01ha2VmaWxlLmluIGIvbWlzYy9NYWtlZmlsZS5pbgoraW5kZXggNTUzYzM2MS4uODI1MzcyMyAxMDA2NDQKKy0tLSBhL21pc2MvTWFrZWZpbGUuaW4KKysrKyBiL21pc2MvTWFrZWZpbGUuaW4KK0BAIC00Miw3ICs0Miw4IEBAIExQUk9HUz0JCUBFMklOSVRSRF9QUk9HQAorIAorIFRVTkUyRlNfT0JKUz0JdHVuZTJmcy5vIHV0aWwubworIE1LTFBGX09CSlM9CW1rbG9zdCtmb3VuZC5vCistTUtFMkZTX09CSlM9CW1rZTJmcy5vIHV0aWwubyBwcm9maWxlLm8gcHJvZl9lcnIubyBkZWZhdWx0X3Byb2ZpbGUubworK01LRTJGU19PQkpTPQlta2UyZnMubyB1dGlsLm8gcHJvZmlsZS5vIHByb2ZfZXJyLm8gZGVmYXVsdF9wcm9maWxlLm8gXAorKwkJCWNyZWF0ZV9pbm9kZS5vCisgQ0hBVFRSX09CSlM9CWNoYXR0ci5vCisgTFNBVFRSX09CSlM9CWxzYXR0ci5vCisgVVVJREdFTl9PQkpTPQl1dWlkZ2VuLm8KK0BAIC02MCw3ICs2MSw4IEBAIEUyRlJFRUZSQUdfT0JKUz0gZTJmcmVlZnJhZy5vCisgUFJPRklMRURfVFVORTJGU19PQkpTPQlwcm9maWxlZC90dW5lMmZzLm8gcHJvZmlsZWQvdXRpbC5vCisgUFJPRklMRURfTUtMUEZfT0JKUz0JcHJvZmlsZWQvbWtsb3N0K2ZvdW5kLm8KKyBQUk9GSUxFRF9NS0UyRlNfT0JKUz0JcHJvZmlsZWQvbWtlMmZzLm8gcHJvZmlsZWQvdXRpbC5vIHByb2ZpbGVkL3Byb2ZpbGUubyBcCistCQkJcHJvZmlsZWQvcHJvZl9lcnIubyBwcm9maWxlZC9kZWZhdWx0X3Byb2ZpbGUubworKwkJCXByb2ZpbGVkL3Byb2ZfZXJyLm8gcHJvZmlsZWQvZGVmYXVsdF9wcm9maWxlLm8gXAorKwkJCXByb2ZpbGVkL2NyZWF0ZV9pbm9kZS5vCisgUFJPRklMRURfQ0hBVFRSX09CSlM9CXByb2ZpbGVkL2NoYXR0ci5vCisgUFJPRklMRURfTFNBVFRSX09CSlM9CXByb2ZpbGVkL2xzYXR0ci5vCisgUFJPRklMRURfVVVJREdFTl9PQkpTPQlwcm9maWxlZC91dWlkZ2VuLm8KK0BAIC04Miw3ICs4NCw3IEBAIFNSQ1M9CSQoc3JjZGlyKS90dW5lMmZzLmMgJChzcmNkaXIpL21rbG9zdCtmb3VuZC5jICQoc3JjZGlyKS9ta2UyZnMuYyBcCisgCQkkKHNyY2RpcikvdXVpZGdlbi5jICQoc3JjZGlyKS9ibGtpZC5jICQoc3JjZGlyKS9sb2dzYXZlLmMgXAorIAkJJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2Jhc2VfZGV2aWNlLmMgXAorIAkJJChzcmNkaXIpL2lzbW91bnRlZC5jICQoc3JjZGlyKS8uLi9lMmZzY2svcHJvZmlsZS5jIFwKKy0JCSQoc3JjZGlyKS9lMnVuZG8uYyAkKHNyY2RpcikvZTJmcmVlZnJhZy5jCisrCQkkKHNyY2RpcikvZTJ1bmRvLmMgJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmMKKyAKKyBMSUJTPSAkKExJQkVYVDJGUykgJChMSUJDT01fRVJSKSAKKyBERVBMSUJTPSAkKExJQkVYVDJGUykgJChERVBMSUJDT01fRVJSKQorQEAgLTYzMCw3ICs2MzIsNyBAQCBta2UyZnMubzogJChzcmNkaXIpL21rZTJmcy5jICQodG9wX2J1aWxkZGlyKS9saWIvY29uZmlnLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0MmZzLmggXAorICAkKHNyY2RpcikvdXRpbC5oIHByb2ZpbGUuaCBwcm9mX2Vyci5oICQodG9wX3NyY2RpcikvdmVyc2lvbi5oIFwKKy0gJChzcmNkaXIpL25scy1lbmFibGUuaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9ta3F1b3RhLmggXAorKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oICQodG9wX3NyY2RpcikvbGliL3F1b3RhL21rcXVvdGEuaCAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmhcCisgICQodG9wX3NyY2RpcikvbGliL3F1b3RhL3F1b3RhaW8uaCAkKHRvcF9zcmNkaXIpL2xpYi9xdW90YS9kcWJsa192Mi5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvcXVvdGEvcXVvdGFpb190cmVlLmggJCh0b3Bfc3JjZGlyKS9saWIvLi4vZTJmc2NrL2RpY3QuaAorIGNoYXR0ci5vOiAkKHNyY2RpcikvY2hhdHRyLmMgJCh0b3BfYnVpbGRkaXIpL2xpYi9jb25maWcuaCBcCitAQCAtNzEwLDMgKzcxMiw3IEBAIGUyZnJlZWZyYWcubzogJChzcmNkaXIpL2UyZnJlZWZyYWcuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfaW8uaCAkKHRvcF9idWlsZGRpcikvbGliL2V4dDJmcy9leHQyX2Vyci5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJfZXh0X2F0dHIuaCAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvYml0b3BzLmggXAorICAkKHNyY2RpcikvZTJmcmVlZnJhZy5oCisrY3JlYXRlX2lub2RlLm86ICQoc3JjZGlyKS9jcmVhdGVfaW5vZGUuaCAkKHNyY2RpcikvY3JlYXRlX2lub2RlLmMgXAorKyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyZnMuaCBcCisrICQodG9wX3NyY2RpcikvbGliL2V0L2NvbV9lcnIuaCAkKHRvcF9zcmNkaXIpL2xpYi9lMnAvZTJwLmggXAorKyAkKHNyY2RpcikvbmxzLWVuYWJsZS5oCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IDJlOGJhNjAuLjU3OGI2MmQgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjIsNyArMjIsNiBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RyaW5ncy5oPgorLSNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDx0aW1lLmg+CisgI2lmZGVmIF9fbGludXhfXworQEAgLTQ0LDI0ICs0MywxOSBAQCBleHRlcm4gaW50IG9wdGluZDsKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxsaWJnZW4uaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPGJsa2lkL2Jsa2lkLmg+CisgCisgI2luY2x1ZGUgImV4dDJmcy9leHQyX2ZzLmgiCisgI2luY2x1ZGUgImV4dDJmcy9leHQyZnNQLmgiCistI2luY2x1ZGUgImV0L2NvbV9lcnIuaCIKKyAjaW5jbHVkZSAidXVpZC91dWlkLmgiCistI2luY2x1ZGUgImUycC9lMnAuaCIKKy0jaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorICNpbmNsdWRlICJ1dGlsLmgiCisgI2luY2x1ZGUgInByb2ZpbGUuaCIKKyAjaW5jbHVkZSAicHJvZl9lcnIuaCIKKyAjaW5jbHVkZSAiLi4vdmVyc2lvbi5oIgorLSNpbmNsdWRlICJubHMtZW5hYmxlLmgiCisgI2luY2x1ZGUgInF1b3RhL21rcXVvdGEuaCIKKysjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisgCisgI2RlZmluZSBTVFJJREVfTEVOR1RIIDgKKyAKK0BAIC0xMDUsNiArOTksNyBAQCBzdGF0aWMgY2hhciAqbW91bnRfZGlyOworIGNoYXIgKmpvdXJuYWxfZGV2aWNlOworIHN0YXRpYyBpbnQgc3luY19rbHVkZ2U7CS8qIFNldCB1c2luZyB0aGUgTUtFMkZTX1NZTkMgZW52LiBvcHRpb24gKi8KKyBzdGF0aWMgY2hhciAqKmZzX3R5cGVzOworK2NvbnN0IGNoYXIgKnJvb3RfZGlyOyAgLyogQ29weSBmaWxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5ICovCisgCisgc3RhdGljIHByb2ZpbGVfdAlwcm9maWxlOworIAorQEAgLTExNiw3ICsxMTEsOCBAQCBzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQorIAlmcHJpbnRmKHN0ZGVyciwgXygiVXNhZ2U6ICVzIFstY3wtbCBmaWxlbmFtZV0gWy1iIGJsb2NrLXNpemVdICIKKyAJIlstQyBjbHVzdGVyLXNpemVdXG5cdFstaSBieXRlcy1wZXItaW5vZGVdIFstSSBpbm9kZS1zaXplXSAiCisgCSJbLUogam91cm5hbC1vcHRpb25zXVxuIgorLQkiXHRbLUcgZmxleC1ncm91cC1zaXplXSBbLU4gbnVtYmVyLW9mLWlub2Rlc11cbiIKKysJIlx0Wy1HIGZsZXgtZ3JvdXAtc2l6ZV0gWy1OIG51bWJlci1vZi1pbm9kZXNdICIKKysJIlstZCByb290LWRpcmVjdG9yeV1cbiIKKyAJIlx0Wy1tIHJlc2VydmVkLWJsb2Nrcy1wZXJjZW50YWdlXSBbLW8gY3JlYXRvci1vc11cbiIKKyAJIlx0Wy1nIGJsb2Nrcy1wZXItZ3JvdXBdIFstTCB2b2x1bWUtbGFiZWxdICIKKyAJIlstTSBsYXN0LW1vdW50ZWQtZGlyZWN0b3J5XVxuXHRbLU8gZmVhdHVyZVssLi4uXV0gIgorQEAgLTEzOTQsNyArMTM5MCw3IEBAIHByb2ZpbGVfZXJyb3I6CisgCX0KKyAKKyAJd2hpbGUgKChjID0gZ2V0b3B0IChhcmdjLCBhcmd2LAorLQkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6dkM6REU6Rkc6STpKOktMOk06TjpPOlI6U1Q6VTpWIikpICE9IEVPRikgeworKwkJICAgICJiOmNnOmk6amw6bTpubzpxcjpzOnQ6ZDp2QzpERTpGRzpJOko6S0w6TTpOOk86UjpTVDpVOlYiKSkgIT0gRU9GKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2InOgorIAkJCWJsb2Nrc2l6ZSA9IHBhcnNlX251bV9ibG9ja3MyKG9wdGFyZywgLTEpOworQEAgLTE1ODIsNiArMTU3OCw5IEBAIHByb2ZpbGVfZXJyb3I6CisgCQljYXNlICdVJzoKKyAJCQlmc191dWlkID0gb3B0YXJnOworIAkJCWJyZWFrOworKwkJY2FzZSAnZCc6CisrCQkJcm9vdF9kaXIgPSBvcHRhcmc7CisrCQkJYnJlYWs7CisgCQljYXNlICd2JzoKKyAJCQl2ZXJib3NlID0gMTsKKyAJCQlicmVhazsKK0BAIC0yNzI2LDYgKzI3MjUsMjEgQEAgbm9fam91cm5hbDoKKyAJCQkJICAgICAgIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfUVVPVEEpKQorIAkJY3JlYXRlX3F1b3RhX2lub2Rlcyhmcyk7CisgCisrCS8qIENvcHkgZmlsZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAqLworKwlpZiAocm9vdF9kaXIpIHsKKysJCWlmICghcXVpZXQpCisrCQkJcHJpbnRmKCIlcyIsIF8oIkNvcHlpbmcgZmlsZXMgaW50byB0aGUgZGV2aWNlOiAiKSk7CisrCisrCQljdXJyZW50X2ZzID0gZnM7CisrCQlyb290ID0gRVhUMl9ST09UX0lOTzsKKysJCXJldHZhbCA9IHBvcHVsYXRlX2ZzKHJvb3QsIHJvb3RfZGlyKTsKKysJCWlmIChyZXR2YWwpCisrCQkJZnByaW50ZihzdGRlcnIsICIlcyIsCisrCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbSIpKTsKKysJCWVsc2UgaWYgKCFxdWlldCkKKysJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworKwl9CisrCisgCWlmICghcXVpZXQpCisgCQlwcmludGYoIiVzIiwgXygiV3JpdGluZyBzdXBlcmJsb2NrcyBhbmQgIgorIAkJICAgICAgICJmaWxlc3lzdGVtIGFjY291bnRpbmcgaW5mb3JtYXRpb246ICIpKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzMwZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAwOS1taXNjLWNyZWF0ZV9pbm9kZS5jLWhhbmRsZS1oYXJkbGlua3MucGF0Y2gKQEAgLTAsMCArMSwyMTAgQEAKK0Zyb20gZDgzZGM5NTBiM2VjMWZiZGUzM2IyM2Q0MmM1MTU0MDkxYTc0ZjRkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAyMyBEZWMgMjAxMyAwMzo0NDowMyAtMDUwMAorU3ViamVjdDogW1BBVENIIDA5LzExXSBtaXNjL2NyZWF0ZV9pbm9kZS5jOiBoYW5kbGUgaGFyZGxpbmtzCisKK0NyZWF0ZSB0aGUgaW5vZGUgYW5kIHNhdmUgdGhlIG5hdGl2ZSBpbm9kZSBudW1iZXIgd2hlbiB3ZSBtZWV0IHRoZSBoYXJkCitsaW5rIChzdF9ubGluayA+IDEpIGF0IHRoZSBmaXJzdCB0aW1lLCB1c2UgZXh0MmZzX2xpbmsoKSB0byBsaW5rIHRoZQorbmFtZSB0byB0aGUgdGFyZ2V0IGlub2RlIG51bWJlciB3aGVuIHdlIG1lZXQgdGhlIHNhbWUgbmF0aXZlIGlub2RlCitudW1iZXIgYWdhaW4uCisKK1RoaXMgYWxnb3JpdGhtIGlzIHJlZmVycmVkIGZyb20gdGhlIGdlbmV4dDJmcy4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Jldmlld2VkLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1pc2MvY3JlYXRlX2lub2RlLmMgfCAgIDg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIG1pc2MvY3JlYXRlX2lub2RlLmggfCAgIDE4ICsrKysrKysrKysrCisgbWlzYy9ta2UyZnMuYyAgICAgICB8ICAgMTIgKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTE4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmMgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitpbmRleCBhYWQ3MzU0Li43NjM1MDRkIDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuYworKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuYworQEAgLTE4LDYgKzE4LDQ0IEBACisgI2RlZmluZSBTX0JMS1NJWkUgNTEyCisgI2VuZGlmCisgCisrLyogRm9yIHNhdmluZyB0aGUgaGFyZCBsaW5rcyAqLworK2ludCBoZGxpbmtfY250ID0gSERMSU5LX0NOVDsKKysKKysvKiBMaW5rIGFuIGlub2RlIG51bWJlciB0byBhIGRpcmVjdG9yeSAqLworK3N0YXRpYyBlcnJjb2RlX3QgYWRkX2xpbmsoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBleHQyX2lub190IGlubywgY29uc3QgY2hhciAqbmFtZSkKKyt7CisrCXN0cnVjdCBleHQyX2lub2RlCWlub2RlOworKwllcnJjb2RlX3QJCXJldHZhbDsKKysKKysJcmV0dmFsID0gZXh0MmZzX3JlYWRfaW5vZGUoY3VycmVudF9mcywgaW5vLCAmaW5vZGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKwkJY29tX2VycihfX2Z1bmNfXywgcmV0dmFsLCAid2hpbGUgcmVhZGluZyBpbm9kZSAldSIsIGlubyk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8sIG5hbWUsIGlubywgaW5vZGUuaV9mbGFncyk7CisrCWlmIChyZXR2YWwgPT0gRVhUMl9FVF9ESVJfTk9fU1BBQ0UpIHsKKysJCXJldHZhbCA9IGV4dDJmc19leHBhbmRfZGlyKGN1cnJlbnRfZnMsIHBhcmVudF9pbm8pOworKwkJaWYgKHJldHZhbCkgeworKwkJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKysJCQlyZXR1cm4gcmV0dmFsOworKwkJfQorKwkJcmV0dmFsID0gZXh0MmZzX2xpbmsoY3VycmVudF9mcywgcGFyZW50X2lubywgbmFtZSwgaW5vLCBpbm9kZS5pX2ZsYWdzKTsKKysJfQorKwlpZiAocmV0dmFsKSB7CisrCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBsaW5raW5nICVzIiwgbmFtZSk7CisrCQlyZXR1cm4gcmV0dmFsOworKwl9CisrCisrCWlub2RlLmlfbGlua3NfY291bnQrKzsKKysKKysJcmV0dmFsID0gZXh0MmZzX3dyaXRlX2lub2RlKGN1cnJlbnRfZnMsIGlubywgJmlub2RlKTsKKysJaWYgKHJldHZhbCkKKysJCWNvbV9lcnIoX19mdW5jX18sIHJldHZhbCwgIndoaWxlIHdyaXRpbmcgaW5vZGUgJXUiLCBpbm8pOworKworKwlyZXR1cm4gcmV0dmFsOworK30KKysKKyAvKiBGaWxsIHRoZSB1aWQsIGdpZCwgbW9kZSBhbmQgdGltZSBmb3IgdGhlIGlub2RlICovCisgc3RhdGljIHZvaWQgZmlsbF9pbm9kZShzdHJ1Y3QgZXh0Ml9pbm9kZSAqaW5vZGUsIHN0cnVjdCBzdGF0ICpzdCkKKyB7CitAQCAtMjc4LDYgKzMxNiwxNyBAQCBmYWlsOgorIAlyZXR1cm4gcmV0dmFsOworIH0KKyAKKytpbnQgaXNfaGFyZGxpbmsoZXh0Ml9pbm9fdCBpbm8pCisreworKwlpbnQgaTsKKysKKysJZm9yKGkgPSAwOyBpIDwgaGRsaW5rcy5jb3VudDsgaSsrKSB7CisrCQlpZihoZGxpbmtzLmhkbFtpXS5zcmNfaW5vID09IGlubykKKysJCQlyZXR1cm4gaTsKKysJfQorKwlyZXR1cm4gLTE7CisrfQorKworIC8qIENvcHkgdGhlIG5hdGl2ZSBmaWxlIHRvIHRoZSBmcyAqLworIGVycmNvZGVfdCBkb193cml0ZV9pbnRlcm5hbChleHQyX2lub190IGN3ZCwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkZXN0KQorIHsKK0BAIC0zODgsOSArNDM3LDExIEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCXN0cnVjdCBkaXJlbnQJKmRlbnQ7CisgCXN0cnVjdCBzdGF0CXN0OworIAljaGFyCQlsbl90YXJnZXRbUEFUSF9NQVhdOworKwl1bnNpZ25lZCBpbnQJc2F2ZV9pbm9kZTsKKyAJZXh0Ml9pbm9fdAlpbm87CisgCWVycmNvZGVfdAlyZXR2YWw7CisgCWludAkJcmVhZF9jbnQ7CisrCWludAkJaGRsaW5rOworIAorIAlyb290ID0gRVhUMl9ST09UX0lOTzsKKyAKK0BAIC00MTIsNiArNDYzLDIyIEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQlsc3RhdChkZW50LT5kX25hbWUsICZzdCk7CisgCQluYW1lID0gZGVudC0+ZF9uYW1lOworIAorKwkJLyogQ2hlY2sgZm9yIGhhcmRsaW5rcyAqLworKwkJc2F2ZV9pbm9kZSA9IDA7CisrCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkgJiYgIVNfSVNMTksoc3Quc3RfbW9kZSkgJiYgc3Quc3RfbmxpbmsgPiAxKSB7CisrCQkJaGRsaW5rID0gaXNfaGFyZGxpbmsoc3Quc3RfaW5vKTsKKysJCQlpZiAoaGRsaW5rID49IDApIHsKKysJCQkJcmV0dmFsID0gYWRkX2xpbmsocGFyZW50X2lubywKKysJCQkJCQloZGxpbmtzLmhkbFtoZGxpbmtdLmRzdF9pbm8sIG5hbWUpOworKwkJCQlpZiAocmV0dmFsKSB7CisrCQkJCQljb21fZXJyKF9fZnVuY19fLCByZXR2YWwsICJ3aGlsZSBsaW5raW5nICVzIiwgbmFtZSk7CisrCQkJCQlyZXR1cm4gcmV0dmFsOworKwkJCQl9CisrCQkJCWNvbnRpbnVlOworKwkJCX0gZWxzZQorKwkJCQlzYXZlX2lub2RlID0gMTsKKysJCX0KKysKKyAJCXN3aXRjaChzdC5zdF9tb2RlICYgU19JRk1UKSB7CisgCQkJY2FzZSBTX0lGQ0hSOgorIAkJCWNhc2UgU19JRkJMSzoKK0BAIC00ODAsNiArNTQ3LDI3IEBAIGVycmNvZGVfdCBwb3B1bGF0ZV9mcyhleHQyX2lub190IHBhcmVudF9pbm8sIGNvbnN0IGNoYXIgKnNvdXJjZV9kaXIpCisgCQkJCV8oIndoaWxlIHNldHRpbmcgaW5vZGUgZm9yIFwiJXNcIiIpLCBuYW1lKTsKKyAJCQlyZXR1cm4gcmV0dmFsOworIAkJfQorKworKwkJLyogU2F2ZSB0aGUgaGFyZGxpbmsgaW5vICovCisrCQlpZiAoc2F2ZV9pbm9kZSkgeworKwkJCS8qCisrCQkJICogQ2hlY2sgd2hldGhlciBuZWVkIG1vcmUgbWVtb3J5LCBhbmQgd2UgZG9uJ3QgbmVlZAorKwkJCSAqIGZyZWUoKSBzaW5jZSB0aGUgbGlmZXNwYW4gd2lsbCBiZSBvdmVyIGFmdGVyIHRoZSBmcworKwkJCSAqIHBvcHVsYXRlZC4KKysJCQkgKi8KKysJCQlpZiAoaGRsaW5rcy5jb3VudCA9PSBoZGxpbmtfY250KSB7CisrCQkJCWlmICgoaGRsaW5rcy5oZGwgPSByZWFsbG9jIChoZGxpbmtzLmhkbCwKKysJCQkJCQkoaGRsaW5rX2NudCArIEhETElOS19DTlQpICoKKysJCQkJCQlzaXplb2YgKHN0cnVjdCBoZGxpbmtfcykpKSA9PSBOVUxMKSB7CisrCQkJCQljb21fZXJyKG5hbWUsIGVycm5vLCAiTm90IGVub3VnaCBtZW1vcnkiKTsKKysJCQkJCXJldHVybiBlcnJubzsKKysJCQkJfQorKwkJCQloZGxpbmtfY250ICs9IEhETElOS19DTlQ7CisrCQkJfQorKwkJCWhkbGlua3MuaGRsW2hkbGlua3MuY291bnRdLnNyY19pbm8gPSBzdC5zdF9pbm87CisrCQkJaGRsaW5rcy5oZGxbaGRsaW5rcy5jb3VudF0uZHN0X2lubyA9IGlubzsKKysJCQloZGxpbmtzLmNvdW50Kys7CisrCQl9CisgCX0KKyAJY2xvc2VkaXIoZGgpOworIAlyZXR1cm4gcmV0dmFsOworZGlmZiAtLWdpdCBhL21pc2MvY3JlYXRlX2lub2RlLmggYi9taXNjL2NyZWF0ZV9pbm9kZS5oCitpbmRleCA5ZmM5N2ZhLi4yYjZkNDI5IDEwMDY0NAorLS0tIGEvbWlzYy9jcmVhdGVfaW5vZGUuaAorKysrIGIvbWlzYy9jcmVhdGVfaW5vZGUuaAorQEAgLTYsOSArNiwyNyBAQAorICNpbmNsdWRlICJleHQyZnMvZXh0MmZzLmgiCisgI2luY2x1ZGUgIm5scy1lbmFibGUuaCIKKyAKKytzdHJ1Y3QgaGRsaW5rX3MKKyt7CisrCWV4dDJfaW5vX3Qgc3JjX2lubzsKKysJZXh0Ml9pbm9fdCBkc3RfaW5vOworK307CisrCisrc3RydWN0IGhkbGlua3NfcworK3sKKysJaW50IGNvdW50OworKwlzdHJ1Y3QgaGRsaW5rX3MgKmhkbDsKKyt9OworKworK3N0cnVjdCBoZGxpbmtzX3MgaGRsaW5rczsKKysKKyBleHQyX2ZpbHN5cyAgICBjdXJyZW50X2ZzOworIGV4dDJfaW5vX3QgICAgIHJvb3Q7CisgCisrLyogRm9yIHNhdmluZyB0aGUgaGFyZCBsaW5rcyAqLworKyNkZWZpbmUgSERMSU5LX0NOVCAgICAgNAorK2V4dGVybiBpbnQgaGRsaW5rX2NudDsKKysKKyAvKiBGb3IgcG9wdWxhdGluZyB0aGUgZmlsZXN5c3RlbSAqLworIGV4dGVybiBlcnJjb2RlX3QgcG9wdWxhdGVfZnMoZXh0Ml9pbm9fdCBwYXJlbnRfaW5vLCBjb25zdCBjaGFyICpzb3VyY2VfZGlyKTsKKyBleHRlcm4gZXJyY29kZV90IGRvX21rbm9kX2ludGVybmFsKGV4dDJfaW5vX3QgY3dkLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RhdCAqc3QpOworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLmMgYi9taXNjL21rZTJmcy5jCitpbmRleCA1NzhiNjJkLi5hNjNmMGI3IDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuYworKysrIGIvbWlzYy9ta2UyZnMuYworQEAgLTI3MzAsNiArMjczMCwxOCBAQCBub19qb3VybmFsOgorIAkJaWYgKCFxdWlldCkKKyAJCQlwcmludGYoIiVzIiwgXygiQ29weWluZyBmaWxlcyBpbnRvIHRoZSBkZXZpY2U6ICIpKTsKKyAKKysJCS8qCisrCQkgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBoYXJkbGlua3MsIHdlIGRvbid0IG5lZWQgZnJlZSgpCisrCQkgKiBzaW5jZSB0aGUgbGlmZXNwYW4gd2lsbCBiZSBvdmVyIGFmdGVyIHRoZSBmcyBwb3B1bGF0ZWQuCisrCQkgKi8KKysJCWlmICgoaGRsaW5rcy5oZGwgPSAoc3RydWN0IGhkbGlua19zICopCisrCQkJCW1hbGxvYyhoZGxpbmtfY250ICogc2l6ZW9mKHN0cnVjdCBoZGxpbmtfcykpKSA9PSBOVUxMKSB7CisrCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIF8oIlxuTm90IGVub3VnaCBtZW1vcnlcbiIpKTsKKysJCQlyZXR2YWwgPSBleHQyZnNfY2xvc2UoZnMpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9CisrCisrCQloZGxpbmtzLmNvdW50ID0gMDsKKyAJCWN1cnJlbnRfZnMgPSBmczsKKyAJCXJvb3QgPSBFWFQyX1JPT1RfSU5POworIAkJcmV0dmFsID0gcG9wdWxhdGVfZnMocm9vdCwgcm9vdF9kaXIpOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTAtZGVidWdmcy11c2UtdGhlLWZ1bmN0aW9ucy1pbi1taXNjLWNyZWF0ZV9pbm9kZS5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNmNhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEwLWRlYnVnZnMtdXNlLXRoZS1mdW5jdGlvbnMtaW4tbWlzYy1jcmVhdGVfaW5vZGUuYy5wYXRjaApAQCAtMCwwICsxLDQ5NiBAQAorRnJvbSBkYjg5OTkyZmFiMjIxNWY1MmRjZTRjNTk1YTM5MjcxYjRmZjMwMDBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDA0OjIyOjIyIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMTFdIGRlYnVnZnM6IHVzZSB0aGUgZnVuY3Rpb25zIGluIG1pc2MvY3JlYXRlX2lub2RlLmMKKworKiBVc2UgdGhlIGZ1bmN0aW9ucyBpbiBtaXNjL2NyZWF0ZV9pbm9kZS5jLCBhbmQgcmVtb3ZlIHRoZSBkdXBsaWNhdGVkCisgIGNvZGUuCisKKyogVGhlIENSRUFURV9JTk9ERV9ERVBTIGluIHRoZSBkZWJ1Z2ZzL01ha2VmaWxlLmluIGlzIHVzZWQgZm9yIHJlY29yZGluZworICBjcmVhdGVfaW5vZGUubydzIGRlcGVuZHMgd2hpY2ggaXMgZnJvbSBtaXNjL01ha2VmaWxlLmluLCB3ZSBoYXZlIHRvCisgIHJlY29tcGlsZSBjcmVhdGVfaW5vZGUubyBiZWNhdXNlIHdlIG5lZWQgaXQgdG8gcHJpbnQgbW9yZSBtZXNzYWdlcyB3aGVuCisgIGl0IGlzIHVzZWQgYnkgZGVidWdmcywganVzdCBsaWtlIHdlIHJlY29tcGlsZSBlMmZyZWVmcmFnLm8sIGJ1dCBpdCBzZWVtcworICB0aGF0IHRoZSBlMmZyZWVmcmFnLm8ncyBkZXBlbmRzIGluIGRlYnVnZnMvTWFrZWZpbGUuaW4gaXMgaW5jb3JyZWN0LCBpdAorICB3b3VsZCBub3QgcmVidWlsZCB3aGVuIGl0cyBkZXBlbmRzIChlLmcuOiBsaWIvY29uZmlnLmgpIGlzIGNoYW5nZWQsCisgIHdoaWNoIHdvdWxkIGNhdXNlIHVuZXhwZWN0ZWQgZXJyb3JzLiBNYWtlIGR1cGxpY2F0ZWQgY29kZSBpbgorICBkZWJ1Z2ZzL01ha2VmaWxlLmluIGFuZCBtaXNjL01ha2VmaWxlLmluIGlzIG5vdCBhIGdvb2QgaWRlYSwgbWF5YmUgd2UnZAorICBiZXR0ZXIgZGVmaW5lIENSRUFURV9JTk9ERV9ERVBTIGluIHRoZSB0b3AgTWFrZWZpbGUsIEknZCBsaWtlIHRvIHNlbmQKKyAgYW5vdGhlciBwYXRjaCBhbmQgZml4IHRoZSBlMmZyZWVmcmFnIGlmIHlvdSBhcmUgZmluZSB3aXRoIGl0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgZGVidWdmcy9NYWtlZmlsZS5pbiB8ICAgMTcgKystCisgZGVidWdmcy9kZWJ1Z2ZzLmMgICB8ICAzMDUgKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZGVidWdmcy9kZWJ1Z2ZzLmggICB8ICAgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgMjkyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9NYWtlZmlsZS5pbiBiL2RlYnVnZnMvTWFrZWZpbGUuaW4KK2luZGV4IGJmMDM3ZTAuLmY1MWI3OGUgMTAwNjQ0CistLS0gYS9kZWJ1Z2ZzL01ha2VmaWxlLmluCisrKysgYi9kZWJ1Z2ZzL01ha2VmaWxlLmluCitAQCAtMTgsNyArMTgsNyBAQCBNS19DTURTPQlfU1NfRElSX09WRVJSSURFPS4uL2xpYi9zcyAuLi9saWIvc3MvbWtfY21kcworIAorIERFQlVHX09CSlM9IGRlYnVnX2NtZHMubyBkZWJ1Z2ZzLm8gdXRpbC5vIG5jaGVjay5vIGljaGVjay5vIGxzLm8gXAorIAlsc2RlbC5vIGR1bXAubyBzZXRfZmllbGRzLm8gbG9nZHVtcC5vIGh0cmVlLm8gdW51c2VkLm8gZTJmcmVlZnJhZy5vIFwKKy0JZmlsZWZyYWcubyBleHRlbnRfY21kcy5vIGV4dGVudF9pbm9kZS5vIHphcC5vCisrCWZpbGVmcmFnLm8gZXh0ZW50X2NtZHMubyBleHRlbnRfaW5vZGUubyB6YXAubyBjcmVhdGVfaW5vZGUubworIAorIFJPX0RFQlVHX09CSlM9IHJvX2RlYnVnX2NtZHMubyByb19kZWJ1Z2ZzLm8gdXRpbC5vIG5jaGVjay5vIGljaGVjay5vIGxzLm8gXAorIAlsc2RlbC5vIGxvZ2R1bXAubyBodHJlZS5vIGUyZnJlZWZyYWcubyBmaWxlZnJhZy5vIGV4dGVudF9jbWRzLm8gXAorQEAgLTI4LDcgKzI4LDEzIEBAIFNSQ1M9IGRlYnVnX2NtZHMuYyAkKHNyY2RpcikvZGVidWdmcy5jICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2xzLmMgXAorIAkkKHNyY2RpcikvbmNoZWNrLmMgJChzcmNkaXIpL2ljaGVjay5jICQoc3JjZGlyKS9sc2RlbC5jIFwKKyAJJChzcmNkaXIpL2R1bXAuYyAkKHNyY2Rpcikvc2V0X2ZpZWxkcy5jICR7c3JjZGlyfS9sb2dkdW1wLmMgXAorIAkkKHNyY2RpcikvaHRyZWUuYyAkKHNyY2RpcikvdW51c2VkLmMgJHtzcmNkaXJ9Ly4uL21pc2MvZTJmcmVlZnJhZy5jIFwKKy0JJChzcmNkaXIpL2ZpbGVmcmFnLmMgJChzcmNkaXIpL2V4dGVudF9pbm9kZS5jICQoc3JjZGlyKS96YXAuYworKwkkKHNyY2RpcikvZmlsZWZyYWcuYyAkKHNyY2RpcikvZXh0ZW50X2lub2RlLmMgJChzcmNkaXIpL3phcC5jIFwKKysJJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmMKKysKKytDUkVBVEVfSU5PREVfREVQUz0gJChzcmNkaXIpLy4uL21pc2MvY3JlYXRlX2lub2RlLmggXAorKwkkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYyAkKHRvcF9idWlsZGRpcikvbGliL2NvbmZpZy5oIFwKKysJJChzcmNkaXIpLy4uL2xpYi9leHQyZnMvZXh0MmZzLmggJChzcmNkaXIpLy4uL2xpYi9ldC9jb21fZXJyLmggXAorKwkkKHNyY2RpcikvLi4vbGliL2UycC9lMnAuaCAkKHNyY2RpcikvLi4vbWlzYy9ubHMtZW5hYmxlLmgKKyAKKyBMSUJTPSAkKExJQkVYVDJGUykgJChMSUJFMlApICQoTElCU1MpICQoTElCQ09NX0VSUikgJChMSUJCTEtJRCkgXAorIAkkKExJQlVVSUQpCitAQCAtODEsNiArODcsMTEgQEAgZTJmcmVlZnJhZy5vOiAkKHNyY2RpcikvLi4vbWlzYy9lMmZyZWVmcmFnLmMKKyAJJChFKSAiCUNDICRAIgorIAkkKFEpICQoQ0MpIC1jICQoQUxMX0NGTEFHUykgLUkkKHNyY2RpcikgJDwgLURERUJVR0ZTIC1vICRACisgCisrY3JlYXRlX2lub2RlLm86ICQoQ1JFQVRFX0lOT0RFX0RFUFMpCisrCSQoRSkgIglDQyAkQCIKKysJJChRKSAkKENDKSAtYyAkKEFMTF9DRkxBR1MpIC1JJChzcmNkaXIpIFwKKysJCSAkKHNyY2RpcikvLi4vbWlzYy9jcmVhdGVfaW5vZGUuYyAtRERFQlVHRlMgLW8gJEAKKysKKyBkZWJ1Z2ZzLjg6ICQoREVQX1NVQlNUSVRVVEUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4KKyAJJChFKSAiCVNVQlNUICRAIgorIAkkKFEpICQoU1VCU1RJVFVURV9VUFRJTUUpICQoc3JjZGlyKS9kZWJ1Z2ZzLjguaW4gZGVidWdmcy44CitAQCAtMTQyLDcgKzE1Myw3IEBAIGRlYnVnZnMubzogJChzcmNkaXIpL2RlYnVnZnMuYyAkKHRvcF9zcmNkaXIpL2xpYi9ldC9jb21fZXJyLmggXAorICAkKHRvcF9zcmNkaXIpL2xpYi9leHQyZnMvZXh0Ml9leHRfYXR0ci5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9iaXRvcHMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2UycC9lMnAuaCAkKHRvcF9zcmNkaXIpL3ZlcnNpb24uaCAkKHNyY2RpcikvamZzX3VzZXIuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtamJkLmggJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2pmc19jb21wYXQuaCBcCistICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oCisrICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9rZXJuZWwtbGlzdC5oICQodG9wX3NyY2RpcikvbWlzYy91dGlsLmgKKyB1dGlsLm86ICQoc3JjZGlyKS91dGlsLmMgJChzcmNkaXIpL2RlYnVnZnMuaCBcCisgICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQyX2ZzLmggJCh0b3BfYnVpbGRkaXIpL2xpYi9leHQyZnMvZXh0Ml90eXBlcy5oIFwKKyAgJCh0b3Bfc3JjZGlyKS9saWIvZXh0MmZzL2V4dDJmcy5oICQodG9wX3NyY2RpcikvbGliL2V4dDJmcy9leHQzX2V4dGVudHMuaCBcCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworaW5kZXggOWMyMTVmNy4uNjJlOWY0NCAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5jCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworQEAgLTI1LDggKzI1LDYgQEAgZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjZW5kaWYKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2luY2x1ZGUgImRlYnVnZnMuaCIKKyAjaW5jbHVkZSAidXVpZC91dWlkLmgiCitAQCAtNDEsMjIgKzM5LDExIEBAIGV4dGVybiBjaGFyICpvcHRhcmc7CisgI2RlZmluZSBCVUZTSVogODE5MgorICNlbmRpZgorIAorLS8qIDY0S2lCIGlzIHRoZSBtaW5pbWl1bSBibGtzaXplIHRvIGJlc3QgbWluaW1pemUgc3lzdGVtIGNhbGwgb3ZlcmhlYWQuICovCistI2lmbmRlZiBJT19CVUZTSVpFCistI2RlZmluZSBJT19CVUZTSVpFIDY0KjEwMjQKKy0jZW5kaWYKKy0KKy0vKiBCbG9jayBzaXplIGZvciBgc3RfYmxvY2tzJyAqLworLSNpZm5kZWYgU19CTEtTSVpFCistI2RlZmluZSBTX0JMS1NJWkUgNTEyCistI2VuZGlmCistCisgc3NfcmVxdWVzdF90YWJsZSAqZXh0cmFfY21kczsKKyBjb25zdCBjaGFyICpkZWJ1Z19wcm9nX25hbWU7CisgaW50IHNjaV9pZHg7CisgCistZXh0Ml9maWxzeXMJY3VycmVudF9mcyA9IE5VTEw7CistZXh0Ml9pbm9fdAlyb290LCBjd2Q7CisrZXh0Ml9pbm9fdAljd2Q7CisgCisgc3RhdGljIHZvaWQgb3Blbl9maWxlc3lzdGVtKGNoYXIgKmRldmljZSwgaW50IG9wZW5fZmxhZ3MsIGJsazY0X3Qgc3VwZXJibG9jaywKKyAJCQkgICAgYmxrNjRfdCBibG9ja3NpemUsIGludCBjYXRhc3Ryb3BoaWMsCitAQCAtMTU3NiwxODkgKzE1NjMsMjQgQEAgdm9pZCBkb19maW5kX2ZyZWVfaW5vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB9CisgCisgI2lmbmRlZiBSRUFEX09OTFkKKy1zdGF0aWMgZXJyY29kZV90IGNvcHlfZmlsZShpbnQgZmQsIGV4dDJfaW5vX3QgbmV3ZmlsZSwgaW50IGJ1ZnNpemUsIGludCBtYWtlX2hvbGVzKQorLXsKKy0JZXh0Ml9maWxlX3QJZTJfZmlsZTsKKy0JZXJyY29kZV90CXJldHZhbDsKKy0JaW50CQlnb3Q7CistCXVuc2lnbmVkIGludAl3cml0dGVuOworLQljaGFyCQkqYnVmOworLQljaGFyCQkqcHRyOworLQljaGFyCQkqemVyb19idWY7CistCWludAkJY21wOworLQorLQlyZXR2YWwgPSBleHQyZnNfZmlsZV9vcGVuKGN1cnJlbnRfZnMsIG5ld2ZpbGUsCistCQkJCSAgRVhUMl9GSUxFX1dSSVRFLCAmZTJfZmlsZSk7CistCWlmIChyZXR2YWwpCistCQlyZXR1cm4gcmV0dmFsOworLQorLQlyZXR2YWwgPSBleHQyZnNfZ2V0X21lbShidWZzaXplLCAmYnVmKTsKKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2VycigiY29weV9maWxlIiwgcmV0dmFsLCAiY2FuJ3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsKKy0JCXJldHVybiByZXR2YWw7CistCX0KKy0KKy0JLyogVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyB3aGV0aGVyIHRoZSB3aG9sZSBibG9jayBpcyB6ZXJvICovCistCXJldHZhbCA9IGV4dDJmc19nZXRfbWVtemVybyhidWZzaXplLCAmemVyb19idWYpOworLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsICJjYW4ndCBhbGxvY2F0ZSBidWZmZXJcbiIpOworLQkJZXh0MmZzX2ZyZWVfbWVtKCZidWYpOworLQkJcmV0dXJuIHJldHZhbDsKKy0JfQorLQorLQl3aGlsZSAoMSkgeworLQkJZ290ID0gcmVhZChmZCwgYnVmLCBidWZzaXplKTsKKy0JCWlmIChnb3QgPT0gMCkKKy0JCQlicmVhazsKKy0JCWlmIChnb3QgPCAwKSB7CistCQkJcmV0dmFsID0gZXJybm87CistCQkJZ290byBmYWlsOworLQkJfQorLQkJcHRyID0gYnVmOworLQorLQkJLyogU3BhcnNlIGNvcHkgKi8KKy0JCWlmIChtYWtlX2hvbGVzKSB7CistCQkJLyogQ2hlY2sgd2hldGhlciBhbGwgaXMgemVybyAqLworLQkJCWNtcCA9IG1lbWNtcChwdHIsIHplcm9fYnVmLCBnb3QpOworLQkJCWlmIChjbXAgPT0gMCkgeworLQkJCQkgLyogVGhlIHdob2xlIGJsb2NrIGlzIHplcm8sIG1ha2UgYSBob2xlICovCistCQkJCXJldHZhbCA9IGV4dDJmc19maWxlX2xzZWVrKGUyX2ZpbGUsIGdvdCwgRVhUMl9TRUVLX0NVUiwgTlVMTCk7CistCQkJCWlmIChyZXR2YWwpCistCQkJCQlnb3RvIGZhaWw7CistCQkJCWdvdCA9IDA7CistCQkJfQorLQkJfQorLQorLQkJLyogTm9ybWFsIGNvcHkgKi8KKy0JCXdoaWxlIChnb3QgPiAwKSB7CistCQkJcmV0dmFsID0gZXh0MmZzX2ZpbGVfd3JpdGUoZTJfZmlsZSwgcHRyLAorLQkJCQkJCSAgIGdvdCwgJndyaXR0ZW4pOworLQkJCWlmIChyZXR2YWwpCistCQkJCWdvdG8gZmFpbDsKKy0KKy0JCQlnb3QgLT0gd3JpdHRlbjsKKy0JCQlwdHIgKz0gd3JpdHRlbjsKKy0JCX0KKy0JfQorLQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworLQlyZXR2YWwgPSBleHQyZnNfZmlsZV9jbG9zZShlMl9maWxlKTsKKy0JcmV0dXJuIHJldHZhbDsKKy0KKy1mYWlsOgorLQlleHQyZnNfZnJlZV9tZW0oJmJ1Zik7CistCWV4dDJmc19mcmVlX21lbSgmemVyb19idWYpOworLQkodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CistCXJldHVybiByZXR2YWw7CistfQorLQorLQorIHZvaWQgZG9fd3JpdGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CistCWludAkJZmQ7CistCXN0cnVjdCBzdGF0CXN0YXRidWY7CistCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKyAJZXJyY29kZV90CXJldHZhbDsKKy0Jc3RydWN0IGV4dDJfaW5vZGUgaW5vZGU7CistCWludAkJYnVmc2l6ZSA9IElPX0JVRlNJWkU7CistCWludAkJbWFrZV9ob2xlcyA9IDA7CisgCisgCWlmIChjb21tb25fYXJnc19wcm9jZXNzKGFyZ2MsIGFyZ3YsIDMsIDMsICJ3cml0ZSIsCisgCQkJCSI8bmF0aXZlIGZpbGU+IDxuZXcgZmlsZT4iLCBDSEVDS19GU19SVykpCisgCQlyZXR1cm47CisgCistCWZkID0gb3Blbihhcmd2WzFdLCBPX1JET05MWSk7CistCWlmIChmZCA8IDApIHsKKy0JCWNvbV9lcnIoYXJndlsxXSwgZXJybm8sIDApOworLQkJcmV0dXJuOworLQl9CistCWlmIChmc3RhdChmZCwgJnN0YXRidWYpIDwgMCkgeworLQkJY29tX2Vycihhcmd2WzFdLCBlcnJubywgMCk7CistCQljbG9zZShmZCk7CistCQlyZXR1cm47CistCX0KKy0KKy0JcmV0dmFsID0gZXh0MmZzX25hbWVpKGN1cnJlbnRfZnMsIHJvb3QsIGN3ZCwgYXJndlsyXSwgJm5ld2ZpbGUpOworLQlpZiAocmV0dmFsID09IDApIHsKKy0JCWNvbV9lcnIoYXJndlswXSwgMCwgIlRoZSBmaWxlICclcycgYWxyZWFkeSBleGlzdHNcbiIsIGFyZ3ZbMl0pOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCistCXJldHZhbCA9IGV4dDJmc19uZXdfaW5vZGUoY3VycmVudF9mcywgY3dkLCAwMTA3NTUsIDAsICZuZXdmaWxlKTsKKy0JaWYgKHJldHZhbCkgeworKwlpZiAoKHJldHZhbCA9IGRvX3dyaXRlX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgYXJndlsyXSkpKQorIAkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CistCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsyXSwgbmV3ZmlsZSwKKy0JCQkgICAgIEVYVDJfRlRfUkVHX0ZJTEUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCWNsb3NlKGZkKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlyZXR2YWwgPSBleHQyZnNfbGluayhjdXJyZW50X2ZzLCBjd2QsIGFyZ3ZbMl0sIG5ld2ZpbGUsCistCQkJCSAgICAgRVhUMl9GVF9SRUdfRklMRSk7CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2Vycihhcmd2WzJdLCByZXR2YWwsIDApOworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworLQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKy0JbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CistCWlub2RlLmlfbW9kZSA9IChzdGF0YnVmLnN0X21vZGUgJiB+TElOVVhfU19JRk1UKSB8IExJTlVYX1NfSUZSRUc7CistCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CistCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworLQlpbm9kZS5pX2xpbmtzX2NvdW50ID0gMTsKKy0JaW5vZGUuaV9zaXplID0gc3RhdGJ1Zi5zdF9zaXplOworLQlpZiAoY3VycmVudF9mcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCistCSAgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUykgeworLQkJaW50IGk7CistCQlzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKy0KKy0JCWVoID0gKHN0cnVjdCBleHQzX2V4dGVudF9oZWFkZXIgKikgJmlub2RlLmlfYmxvY2tbMF07CistCQllaC0+ZWhfZGVwdGggPSAwOworLQkJZWgtPmVoX2VudHJpZXMgPSAwOworLQkJZWgtPmVoX21hZ2ljID0gZXh0MmZzX2NwdV90b19sZTE2KEVYVDNfRVhUX01BR0lDKTsKKy0JCWkgPSAoc2l6ZW9mKGlub2RlLmlfYmxvY2spIC0gc2l6ZW9mKCplaCkpIC8KKy0JCQlzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKy0JCWVoLT5laF9tYXggPSBleHQyZnNfY3B1X3RvX2xlMTYoaSk7CistCQlpbm9kZS5pX2ZsYWdzIHw9IEVYVDRfRVhURU5UU19GTDsKKy0JfQorLQlpZiAoZGVidWdmc193cml0ZV9uZXdfaW5vZGUobmV3ZmlsZSwgJmlub2RlLCBhcmd2WzBdKSkgeworLQkJY2xvc2UoZmQpOworLQkJcmV0dXJuOworLQl9CistCWlmIChMSU5VWF9TX0lTUkVHKGlub2RlLmlfbW9kZSkpIHsKKy0JCWlmIChzdGF0YnVmLnN0X2Jsb2NrcyA8IHN0YXRidWYuc3Rfc2l6ZSAvIFNfQkxLU0laRSkgeworLQkJCW1ha2VfaG9sZXMgPSAxOworLQkJCS8qCistCQkJICogVXNlIEkvTyBibG9ja3NpemUgYXMgYnVmZmVyIHNpemUgd2hlbgorLQkJCSAqIGNvcHlpbmcgc3BhcnNlIGZpbGVzLgorLQkJCSAqLworLQkJCWJ1ZnNpemUgPSBzdGF0YnVmLnN0X2Jsa3NpemU7CistCQl9CistCQlyZXR2YWwgPSBjb3B5X2ZpbGUoZmQsIG5ld2ZpbGUsIGJ1ZnNpemUsIG1ha2VfaG9sZXMpOworLQkJaWYgKHJldHZhbCkKKy0JCQljb21fZXJyKCJjb3B5X2ZpbGUiLCByZXR2YWwsIDApOworLQl9CistCWNsb3NlKGZkKTsKKyB9CisgCisgdm9pZCBkb19ta25vZChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAJdW5zaWduZWQgbG9uZwltb2RlLCBtYWpvciwgbWlub3I7CistCWV4dDJfaW5vX3QJbmV3ZmlsZTsKKyAJZXJyY29kZV90IAlyZXR2YWw7CistCXN0cnVjdCBleHQyX2lub2RlIGlub2RlOworIAlpbnQJCWZpbGV0eXBlLCBucjsKKysJc3RydWN0IHN0YXQJc3Q7CisgCisgCWlmIChjaGVja19mc19vcGVuKGFyZ3ZbMF0pKQorIAkJcmV0dXJuOworQEAgLTE3NjcsMTE1ICsxNTg5LDUwIEBAIHZvaWQgZG9fbWtub2QoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCWNvbV9lcnIoYXJndlswXSwgMCwgIlVzYWdlOiBta25vZCA8bmFtZT4gW3B8IFtjfGJdIDxtYWpvcj4gPG1pbm9yPl0iKTsKKyAJCXJldHVybjsKKyAJfQorKworIAltb2RlID0gbWlub3IgPSBtYWpvciA9IDA7CisgCXN3aXRjaCAoYXJndlsyXVswXSkgeworIAkJY2FzZSAncCc6CistCQkJbW9kZSA9IExJTlVYX1NfSUZJRk87CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0ZJRk87CisrCQkJc3Quc3RfbW9kZSA9IFNfSUZJRk87CisgCQkJbnIgPSAzOworIAkJCWJyZWFrOworIAkJY2FzZSAnYyc6CistCQkJbW9kZSA9IExJTlVYX1NfSUZDSFI7CistCQkJZmlsZXR5cGUgPSBFWFQyX0ZUX0NIUkRFVjsKKysJCQlzdC5zdF9tb2RlID0gU19JRkNIUjsKKyAJCQluciA9IDU7CisgCQkJYnJlYWs7CisgCQljYXNlICdiJzoKKy0JCQltb2RlID0gTElOVVhfU19JRkJMSzsKKy0JCQlmaWxldHlwZSA9IEVYVDJfRlRfQkxLREVWOworKwkJCXN0LnN0X21vZGUgPSBTX0lGQkxLOworIAkJCW5yID0gNTsKKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CistCQkJZmlsZXR5cGUgPSAwOworIAkJCW5yID0gMDsKKyAJfQorKworIAlpZiAobnIgPT0gNSkgeworIAkJbWFqb3IgPSBzdHJ0b3VsKGFyZ3ZbM10sIGFyZ3YrMywgMCk7CisgCQltaW5vciA9IHN0cnRvdWwoYXJndls0XSwgYXJndis0LCAwKTsKKyAJCWlmIChtYWpvciA+IDY1NTM1IHx8IG1pbm9yID4gNjU1MzUgfHwgYXJndlszXVswXSB8fCBhcmd2WzRdWzBdKQorIAkJCW5yID0gMDsKKyAJfQorKworIAlpZiAoYXJnYyAhPSBucikKKyAJCWdvdG8gdXNhZ2U7CistCWlmIChjaGVja19mc19yZWFkX3dyaXRlKGFyZ3ZbMF0pKQorLQkJcmV0dXJuOworLQlyZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGN1cnJlbnRfZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3ZmlsZSk7CistCWlmIChyZXR2YWwpIHsKKysKKysJc3Quc3RfcmRldiA9IG1ha2VkZXYobWFqb3IsIG1pbm9yKTsKKysJaWYgKChyZXR2YWwgPSBkb19ta25vZF9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sICZzdCkpKQorIAkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CistCXByaW50ZigiQWxsb2NhdGVkIGlub2RlOiAldVxuIiwgbmV3ZmlsZSk7CistCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwgZmlsZXR5cGUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBjd2QpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCXJldHZhbCA9IGV4dDJmc19saW5rKGN1cnJlbnRfZnMsIGN3ZCwgYXJndlsxXSwgbmV3ZmlsZSwKKy0JCQkJICAgICBmaWxldHlwZSk7CistCX0KKy0JaWYgKHJldHZhbCkgeworLQkJY29tX2Vycihhcmd2WzFdLCByZXR2YWwsIDApOworLQkJcmV0dXJuOworLQl9CistICAgICAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihjdXJyZW50X2ZzLT5pbm9kZV9tYXAsbmV3ZmlsZSkpCistCQljb21fZXJyKGFyZ3ZbMF0sIDAsICJXYXJuaW5nOiBpbm9kZSBhbHJlYWR5IHNldCIpOworLQlleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGN1cnJlbnRfZnMsIG5ld2ZpbGUsICsxLCAwKTsKKy0JbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CistCWlub2RlLmlfbW9kZSA9IG1vZGU7CistCWlub2RlLmlfYXRpbWUgPSBpbm9kZS5pX2N0aW1lID0gaW5vZGUuaV9tdGltZSA9CistCQljdXJyZW50X2ZzLT5ub3cgPyBjdXJyZW50X2ZzLT5ub3cgOiB0aW1lKDApOworLQlpZiAoKG1ham9yIDwgMjU2KSAmJiAobWlub3IgPCAyNTYpKSB7CistCQlpbm9kZS5pX2Jsb2NrWzBdID0gbWFqb3IqMjU2K21pbm9yOworLQkJaW5vZGUuaV9ibG9ja1sxXSA9IDA7CistCX0gZWxzZSB7CistCQlpbm9kZS5pX2Jsb2NrWzBdID0gMDsKKy0JCWlub2RlLmlfYmxvY2tbMV0gPSAobWlub3IgJiAweGZmKSB8IChtYWpvciA8PCA4KSB8ICgobWlub3IgJiB+MHhmZikgPDwgMTIpOworLQl9CistCWlub2RlLmlfbGlua3NfY291bnQgPSAxOworLQlpZiAoZGVidWdmc193cml0ZV9uZXdfaW5vZGUobmV3ZmlsZSwgJmlub2RlLCBhcmd2WzBdKSkKKy0JCXJldHVybjsKKyB9CisgCisgdm9pZCBkb19ta2RpcihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKy0JY2hhcgkqY3A7CistCWV4dDJfaW5vX3QJcGFyZW50OworLQljaGFyCSpuYW1lOworIAllcnJjb2RlX3QgcmV0dmFsOworIAorIAlpZiAoY29tbW9uX2FyZ3NfcHJvY2VzcyhhcmdjLCBhcmd2LCAyLCAyLCAibWtkaXIiLAorIAkJCQkiPGZpbGVuYW1lPiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JY3AgPSBzdHJyY2hyKGFyZ3ZbMV0sICcvJyk7CistCWlmIChjcCkgeworLQkJKmNwID0gMDsKKy0JCXBhcmVudCA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKy0JCWlmICghcGFyZW50KSB7CistCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworLQkJCXJldHVybjsKKy0JCX0KKy0JCW5hbWUgPSBjcCsxOworLQl9IGVsc2UgeworLQkJcGFyZW50ID0gY3dkOworLQkJbmFtZSA9IGFyZ3ZbMV07CistCX0KKy0KKy10cnlfYWdhaW46CistCXJldHZhbCA9IGV4dDJmc19ta2RpcihjdXJyZW50X2ZzLCBwYXJlbnQsIDAsIG5hbWUpOworLQlpZiAocmV0dmFsID09IEVYVDJfRVRfRElSX05PX1NQQUNFKSB7CistCQlyZXR2YWwgPSBleHQyZnNfZXhwYW5kX2RpcihjdXJyZW50X2ZzLCBwYXJlbnQpOworLQkJaWYgKHJldHZhbCkgeworLQkJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAid2hpbGUgZXhwYW5kaW5nIGRpcmVjdG9yeSIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCWdvdG8gdHJ5X2FnYWluOworLQl9CistCWlmIChyZXR2YWwpIHsKKy0JCWNvbV9lcnIoImV4dDJmc19ta2RpciIsIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKysJaWYgKChyZXR2YWwgPSBkb19ta2Rpcl9pbnRlcm5hbChjd2QsIGFyZ3ZbMV0sIE5VTEwpKSkKKysJCWNvbV9lcnIoYXJndlswXSwgcmV0dmFsLCAwKTsKKyAKKyB9CisgCitAQCAtMjI3MCw0NCArMjAyNywxNCBAQCB2b2lkIGRvX3B1bmNoKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgdm9pZCBkb19zeW1saW5rKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworLQljaGFyCQkqY3A7CistCWV4dDJfaW5vX3QJcGFyZW50OworLQljaGFyCQkqbmFtZSwgKnRhcmdldDsKKyAJZXJyY29kZV90CXJldHZhbDsKKyAKKyAJaWYgKGNvbW1vbl9hcmdzX3Byb2Nlc3MoYXJnYywgYXJndiwgMywgMywgInN5bWxpbmsiLAorIAkJCQkiPGZpbGVuYW1lPiA8dGFyZ2V0PiIsIENIRUNLX0ZTX1JXKSkKKyAJCXJldHVybjsKKyAKKy0JY3AgPSBzdHJyY2hyKGFyZ3ZbMV0sICcvJyk7CistCWlmIChjcCkgeworLQkJKmNwID0gMDsKKy0JCXBhcmVudCA9IHN0cmluZ190b19pbm9kZShhcmd2WzFdKTsKKy0JCWlmICghcGFyZW50KSB7CistCQkJY29tX2Vycihhcmd2WzFdLCBFTk9FTlQsIDApOworLQkJCXJldHVybjsKKy0JCX0KKy0JCW5hbWUgPSBjcCsxOworLQl9IGVsc2UgeworLQkJcGFyZW50ID0gY3dkOworLQkJbmFtZSA9IGFyZ3ZbMV07CistCX0KKy0JdGFyZ2V0ID0gYXJndlsyXTsKKy0KKy10cnlfYWdhaW46CistCXJldHZhbCA9IGV4dDJmc19zeW1saW5rKGN1cnJlbnRfZnMsIHBhcmVudCwgMCwgbmFtZSwgdGFyZ2V0KTsKKy0JaWYgKHJldHZhbCA9PSBFWFQyX0VUX0RJUl9OT19TUEFDRSkgeworLQkJcmV0dmFsID0gZXh0MmZzX2V4cGFuZF9kaXIoY3VycmVudF9mcywgcGFyZW50KTsKKy0JCWlmIChyZXR2YWwpIHsKKy0JCQljb21fZXJyKGFyZ3ZbMF0sIHJldHZhbCwgIndoaWxlIGV4cGFuZGluZyBkaXJlY3RvcnkiKTsKKy0JCQlyZXR1cm47CistCQl9CistCQlnb3RvIHRyeV9hZ2FpbjsKKy0JfQorLQlpZiAocmV0dmFsKSB7CistCQljb21fZXJyKCJleHQyZnNfc3ltbGluayIsIHJldHZhbCwgMCk7CistCQlyZXR1cm47CistCX0KKysJaWYgKChyZXR2YWwgPSBkb19zeW1saW5rX2ludGVybmFsKGN3ZCwgYXJndlsxXSwgYXJndlsyXSkpKQorKwkJY29tX2Vycihhcmd2WzBdLCByZXR2YWwsIDApOworIAorIH0KKyAKK2RpZmYgLS1naXQgYS9kZWJ1Z2ZzL2RlYnVnZnMuaCBiL2RlYnVnZnMvZGVidWdmcy5oCitpbmRleCA2YjRmNmVmLi4yZDQ2NGMxIDEwMDY0NAorLS0tIGEvZGVidWdmcy9kZWJ1Z2ZzLmgKKysrKyBiL2RlYnVnZnMvZGVidWdmcy5oCitAQCAtNSw2ICs1LDcgQEAKKyAjaW5jbHVkZSAic3Mvc3MuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJfZnMuaCIKKyAjaW5jbHVkZSAiZXh0MmZzL2V4dDJmcy5oIgorKyNpbmNsdWRlICIuLi9taXNjL2NyZWF0ZV9pbm9kZS5oIgorIAorICNpZmRlZiBfX1NURENfXworICNkZWZpbmUgTk9BUkdTIHZvaWQKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvMDAxMS1ta2UyZnMuOC5pbi11cGRhdGUtdGhlLW1hbnVhbC1mb3ItdGhlLWQtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDJjYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDExLW1rZTJmcy44LmluLXVwZGF0ZS10aGUtbWFudWFsLWZvci10aGUtZC1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA4OWZjYTQzOWYxYjU4NTk1ZjJmNDI0NTk4YTI3ODY5ZjhjN2JkODE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIzIERlYyAyMDEzIDA0OjQzOjE4IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMTFdIG1rZTJmcy44LmluOiB1cGRhdGUgdGhlIG1hbnVhbCBmb3IgdGhlIC1kIG9wdGlvbgorCitVcGRhdGUgdGhlIG1hbnVhbCBmb3IgdGhlIC1kIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorUmV2aWV3ZWQtYnk6IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorLS0tCisgbWlzYy9ta2UyZnMuOC5pbiB8ICAgIDcgKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL21pc2MvbWtlMmZzLjguaW4gYi9taXNjL21rZTJmcy44LmluCitpbmRleCBmZWE1MGRhLi5iMWNhNDg2IDEwMDY0NAorLS0tIGEvbWlzYy9ta2UyZnMuOC5pbgorKysrIGIvbWlzYy9ta2UyZnMuOC5pbgorQEAgLTUyLDYgKzUyLDEwIEBAIG1rZTJmcyBcLSBjcmVhdGUgYW4gZXh0Mi9leHQzL2V4dDQgZmlsZXN5c3RlbQorIC5JIG51bWJlci1vZi1pbm9kZXMKKyBdCisgWworKy5CIFwtZAorKy5JIHJvb3QtZGlyZWN0b3J5CisrXQorK1sKKyAuQiBcLW4KKyBdCisgWworQEAgLTUwMiw2ICs1MDYsOSBAQCB0aGUKKyByYXRpbykuICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IHRoZSBudW1iZXIKKyBvZiBkZXNpcmVkIGlub2RlcyBkaXJlY3RseS4KKyAuVFAKKysuQkkgXC1kICIgcm9vdC1kaXJlY3RvcnkiCisrQWRkIHRoZSBmaWxlcyBmcm9tIHRoZSByb290LWRpcmVjdG9yeSB0byB0aGUgZmlsZXN5c3RlbS4KKysuVFAKKyAuQkkgXC1vICIgY3JlYXRvci1vcyIKKyBPdmVycmlkZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlICJjcmVhdG9yIG9wZXJhdGluZyBzeXN0ZW0iIGZpZWxkIG9mIHRoZQorIGZpbGVzeXN0ZW0uICBUaGUgY3JlYXRvciBmaWVsZCBpcyBzZXQgYnkgZGVmYXVsdCB0byB0aGUgbmFtZSBvZiB0aGUgT1MgdGhlCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzLzAwMTItRml4LW11c2wtYnVpbGQtZmFpbHVyZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiODAwOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy8wMDEyLUZpeC1tdXNsLWJ1aWxkLWZhaWx1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzZmZjdmZWI5MDM4ZDZlOGFhZmZlMmU2OWIyMDVhZDVmYTMzZGYyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CitEYXRlOiBNb24sIDE4IEF1ZyAyMDE0IDIxOjAyOjU2ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBtdXNsIGJ1aWxkIGZhaWx1cmVzCisKK0luIGxpYi9leHQyZnMvdW5peF9pby5jLCBfX3U2NCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIF9fdWludDY0X3QuIFRoaXMgdHlwZQoraXMgZ3VhcmFudGVlZCBieSB0aGUgZTJmc3Byb2dzIGJ1aWxkIHN5c3RlbS4KKyg3OTVjMDJkZWYzNjgxYTk5Y2M3OTJhNWViYzE2MmQwNmY4YTFlZWI3KQorCitJbiBtaXNjL2NyZWF0ZV9pbm9kZS5jLCA8bGltaXRzLmg+IGlzIG5lZWRlZCBmb3IgdGhlIGRlZmluaXRpb24gb2YgUEFUSF9NQVguCisoYmJjY2M2ZjNjNmExMDY3MjFmYjZmMWVmNGRmNmJjMzJjNzk4NjIzNSkKKworQm90aCBvZiB0aGVzZSBmaXhlcyBoYXZlIGJlZW4gbWFkZSB1cHN0cmVhbSB3aXRoIHRoZSBnaXQgY29tbWl0IElEcyBnaXZlbiBidXQKK3Rob3NlIGFyZSBsYXJnZXIgY29tbWl0cyBjb250YWluaW5nIG90aGVyIGNoYW5nZXMgbm90IG5lZWRlZCBoZXJlLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBsaWIvZXh0MmZzL3VuaXhfaW8uYyB8IDYgKysrLS0tCisgbWlzYy9jcmVhdGVfaW5vZGUuYyAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvdW5peF9pby5jIGIvbGliL2V4dDJmcy91bml4X2lvLmMKK2luZGV4IDE5YmU2MzAuLjBjYzBmNTIgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL3VuaXhfaW8uYworKysrIGIvbGliL2V4dDJmcy91bml4X2lvLmMKK0BAIC05MzEsMTAgKzkzMSwxMCBAQCBzdGF0aWMgZXJyY29kZV90IHVuaXhfZGlzY2FyZChpb19jaGFubmVsIGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywKKyAKKyAJaWYgKGNoYW5uZWwtPmZsYWdzICYgQ0hBTk5FTF9GTEFHU19CTE9DS19ERVZJQ0UpIHsKKyAjaWZkZWYgQkxLRElTQ0FSRAorLQkJX191aW50NjRfdCByYW5nZVsyXTsKKysJCV9fdTY0IHJhbmdlWzJdOworIAorLQkJcmFuZ2VbMF0gPSAoX191aW50NjRfdCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKy0JCXJhbmdlWzFdID0gKF9fdWludDY0X3QpKGNvdW50KSAqIGNoYW5uZWwtPmJsb2NrX3NpemU7CisrCQlyYW5nZVswXSA9IChfX3U2NCkoYmxvY2spICogY2hhbm5lbC0+YmxvY2tfc2l6ZTsKKysJCXJhbmdlWzFdID0gKF9fdTY0KShjb3VudCkgKiBjaGFubmVsLT5ibG9ja19zaXplOworIAorIAkJcmV0ID0gaW9jdGwoZGF0YS0+ZGV2LCBCTEtESVNDQVJELCAmcmFuZ2UpOworICNlbHNlCitkaWZmIC0tZ2l0IGEvbWlzYy9jcmVhdGVfaW5vZGUuYyBiL21pc2MvY3JlYXRlX2lub2RlLmMKK2luZGV4IDZkOGRlMDQuLmZjZWM1YWEgMTAwNjQ0CistLS0gYS9taXNjL2NyZWF0ZV9pbm9kZS5jCisrKysgYi9taXNjL2NyZWF0ZV9pbm9kZS5jCitAQCAtMSw0ICsxLDUgQEAKKyAjaW5jbHVkZSAiY3JlYXRlX2lub2RlLmgiCisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxTAorICMgaWYgX19HTlVDX18gPj0gMgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9DVkUtMjAxNS0wMjQ3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU2N2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvQ1ZFLTIwMTUtMDI0Ny5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIGY2NmU2Y2U0NDQ2NzM4YzJjN2Y0M2Q0MTk4OGEzZWI3MzM0N2UyZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PgorRGF0ZTogU2F0LCA5IEF1ZyAyMDE0IDEyOjI0OjU0IC0wNDAwCitTdWJqZWN0OiBsaWJleHQyZnM6IGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyBpZiBzX2ZpcnN0X21ldGFfYmcgaXMgdG9vIGJpZworCitJZiBzX2ZpcnN0X21ldGFfYmcgaXMgZ3JlYXRlciB0aGFuIHRoZSBvZiBudW1iZXIgYmxvY2sgZ3JvdXAKK2Rlc2NyaXB0b3IgYmxvY2tzLCB0aGVuIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgYmxvY2sgZ3JvdXAgZGVzY3JpcHRvcnMKK3dpbGwgZW5kIHVwIG92ZXJydW5pbmcgdGhlIG1lbW9yeSBidWZmZXIgYWxsb2NhdGVkIGZvciB0aGUKK2Rlc2NyaXB0b3JzLiAgRml4IHRoaXMgYnkgbGltaXRpbmcgZmlyc3RfbWV0YV9iZyB0byBubyBtb3JlIHRoYW4KK2ZzLT5kZXNjX2Jsb2Nrcy4gIFRoaXMgZG9lc24ndCBjb3JyZWN0IHRoZSBiYWQgc19maXJzdF9tZXRhX2JnIHZhbHVlLAorYnV0IGl0IGF2b2lkcyBjYXVzaW5nIHRoZSBlMmZzcHJvZ3MgdXNlcnNwYWNlIHByb2dyYW1zIGZyb20KK3BvdGVudGlhbGx5IGNyYXNoaW5nLgorCitGaXhlcyBDVkUtMjAxNS0wMjQ3CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFRoZW9kb3JlIFRzJ28gPHR5dHNvQG1pdC5lZHU+CitTaWduZWQtb2ZmLWJ5OiBTb25hIFNhcm1hZGkgPHNvbmEuc2FybWFkaUBlbmVhLmNvbT4KKworZGlmZiAtLWdpdCBhL2xpYi9leHQyZnMvY2xvc2Vmcy5jIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK2luZGV4IDQ1OTllZWYuLjFmOTkxMTMgMTAwNjQ0CistLS0gYS9saWIvZXh0MmZzL2Nsb3NlZnMuYworKysrIGIvbGliL2V4dDJmcy9jbG9zZWZzLmMKK0BAIC0zNDQsOSArMzQ0LDExIEBAIGVycmNvZGVfdCBleHQyZnNfZmx1c2gyKGV4dDJfZmlsc3lzIGZzLCBpbnQgZmxhZ3MpCisgCSAqIHN1cGVyYmxvY2tzIGFuZCBncm91cCBkZXNjcmlwdG9ycy4KKyAJICovCisgCWdyb3VwX3B0ciA9IChjaGFyICopIGdyb3VwX3NoYWRvdzsKKy0JaWYgKGZzLT5zdXBlci0+c19mZWF0dXJlX2luY29tcGF0ICYgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisrCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKSB7CisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+c3VwZXItPnNfZmlyc3RfbWV0YV9iZzsKKy0JZWxzZQorKwkJaWYgKG9sZF9kZXNjX2Jsb2NrcyA+IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnKQorKwkJCW9sZF9kZXNjX2Jsb2NrcyA9IGZzLT5kZXNjX2Jsb2NrczsKKysJfSBlbHNlCisgCQlvbGRfZGVzY19ibG9ja3MgPSBmcy0+ZGVzY19ibG9ja3M7CisgCisgCWV4dDJmc19udW1lcmljX3Byb2dyZXNzX2luaXQoZnMsICZwcm9ncmVzcywgTlVMTCwKK2RpZmYgLS1naXQgYS9saWIvZXh0MmZzL29wZW5mcy5jIGIvbGliL2V4dDJmcy9vcGVuZnMuYworaW5kZXggYTFhMzUxNy4uYmE1MDFlNiAxMDA2NDQKKy0tLSBhL2xpYi9leHQyZnMvb3BlbmZzLmMKKysrKyBiL2xpYi9leHQyZnMvb3BlbmZzLmMKK0BAIC0zNzgsOSArMzc4LDExIEBAIGVycmNvZGVfdCBleHQyZnNfb3BlbjIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqaW9fb3B0aW9ucywKKyAjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgCWdyb3Vwc19wZXJfYmxvY2sgPSBFWFQyX0RFU0NfUEVSX0JMT0NLKGZzLT5zdXBlcik7CisgI2VuZGlmCistCWlmIChmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHKQorKwlpZiAoZnMtPnN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykgeworIAkJZmlyc3RfbWV0YV9iZyA9IGZzLT5zdXBlci0+c19maXJzdF9tZXRhX2JnOworLQllbHNlCisrCQlpZiAoZmlyc3RfbWV0YV9iZyA+IGZzLT5kZXNjX2Jsb2NrcykKKysJCQlmaXJzdF9tZXRhX2JnID0gZnMtPmRlc2NfYmxvY2tzOworKwl9IGVsc2UKKyAJCWZpcnN0X21ldGFfYmcgPSBmcy0+ZGVzY19ibG9ja3M7CisgCWlmIChmaXJzdF9tZXRhX2JnKSB7CisgCQlyZXR2YWwgPSBpb19jaGFubmVsX3JlYWRfYmxrKGZzLT5pbywgZ3JvdXBfYmxvY2sgKworLS0gCitjZ2l0IHYwLjEwLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYmQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwxMzUgQEAKKyMgRXh0cmFjdGVkIGZyb20gdGhlIHBhY2thZ2UncyBzaGlwcGVkIGFjbG9jYWwubTQuIEN1c3RvbSBtYWNyb3Mgc2hvdWxkIGJlIGluCisjIGFjaW5jbHVkZS5tNCBzbyBydW5uaW5nIGFjbG9jYWwgZG9lc24ndCBibG93IHRoZW0gYXdheS4KKyMKKyMgU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworIyBmcm9tIGh0dHA6Ly9hdXRvY29uZi1hcmNoaXZlLmNyeXAudG8vYXhfdGxzLmh0bWwKKyMKKyMgVGhpcyB3YXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB3aXRoIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgcmVzcGVjdGl2ZSBBdXRvY29uZiBNYWNybydzIGNvcHlyaWdodAorIyBvd25lciBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhlCisjIGNvbmZpZ3VyZSBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nCisjIHRoZSBNYWNyby4gWW91IG5lZWQgbm90IGZvbGxvdyB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlIHdoZW4gdXNpbmcgb3IgZGlzdHJpYnV0aW5nIHN1Y2ggc2NyaXB0cywgZXZlbiB0aG91Z2gKKyMgcG9ydGlvbnMgb2YgdGhlIHRleHQgb2YgdGhlIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwKKyMgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4gYWxsIG90aGVyIHVzZSBvZiB0aGUgbWF0ZXJpYWwgdGhhdAorIyBjb25zdGl0dXRlcyB0aGUgQXV0b2NvbmYgTWFjcm8uCisjCisjIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCBhcHBsaWVzIHRvIHZlcnNpb25zIG9mIHRoZQorIyBBdXRvY29uZiBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgTWFjcm8gQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZQorIyBhbmQgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEF1dG9jb25mIE1hY3JvLCB5b3UgbWF5CisjIGV4dGVuZCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgdG8gYXBwbHkgdG8geW91ciBtb2RpZmllZAorIyB2ZXJzaW9uIGFzIHdlbGwuCisjCitBQ19ERUZVTihbQVhfVExTXSwgWworICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIGNsYXNzKQorICBBQ19DQUNIRV9WQUwoYWNfY3ZfdGxzLCBbCisgICAgYXhfdGxzX2tleXdvcmRzPSJfX3RocmVhZCBfX2RlY2xzcGVjKHRocmVhZCkgbm9uZSIKKyAgICBmb3IgYXhfdGxzX2tleXdvcmQgaW4gJGF4X3Rsc19rZXl3b3JkczsgZG8KKyAgICAgICBjYXNlICRheF90bHNfa2V5d29yZCBpbgorICAgICAgICAgIG5vbmUpIGFjX2N2X3Rscz1ub25lIDsgYnJlYWsgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgIEFDX1RSWV9DT01QSUxFKAorICAgICAgICAgICAgICAgIFsjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkCisgICAgICAgICAgICAgICAgIGZvbyh2b2lkKSB7CisgICAgICAgICAgICAgICAgIHN0YXRpYyBdICRheF90bHNfa2V5d29yZCBbIGludCBiYXI7CisgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICBbXSwKKyAgICAgICAgICAgICAgICAgW2FjX2N2X3Rscz0kYXhfdGxzX2tleXdvcmQgOyBicmVha10sCisgICAgICAgICAgICAgICAgIGFjX2N2X3Rscz1ub25lCisgICAgICAgICAgICAgKQorICAgICAgICAgIGVzYWMKKyAgICBkb25lCitdKQorCisgIGlmIHRlc3QgIiRhY19jdl90bHMiICE9ICJub25lIjsgdGhlbgorICAgIGRubCBBQ19ERUZJTkUoW1RMU10sIFtdLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtUTFNdLCAkYWNfY3ZfdGxzLCBbSWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGEgVExTIHN0b3JhZ2UgY2xhc3MgZGVmaW5lIGl0IHRvIHRoYXQgaGVyZV0pCisgIGZpCisgIEFDX01TR19SRVNVTFQoJGFjX2N2X3RscykKK10pCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjICAgICAgICAgaHR0cDovL3d3dy5ub25nbnUub3JnL2F1dG9jb25mLWFyY2hpdmUvY2hlY2tfZ251X21ha2UuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBDSEVDS19HTlVfTUFLRSgpCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBzZWFyY2hlcyBmb3IgYSBHTlUgdmVyc2lvbiBvZiBtYWtlLiBJZiBhIG1hdGNoIGlzIGZvdW5kLCB0aGUKKyMgICBtYWtlZmlsZSB2YXJpYWJsZSBgaWZHTlVtYWtlJyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgb3RoZXJ3aXNlIGl0CisjICAgaXMgc2V0IHRvICIjIi4gVGhpcyBpcyB1c2VmdWwgZm9yIGluY2x1ZGluZyBhIHNwZWNpYWwgZmVhdHVyZXMgaW4gYQorIyAgIE1ha2VmaWxlLCB3aGljaCBjYW5ub3QgYmUgaGFuZGxlZCBieSBvdGhlciB2ZXJzaW9ucyBvZiBtYWtlLiBUaGUKKyMgICB2YXJpYWJsZSBfY3ZfZ251X21ha2VfY29tbWFuZCBpcyBzZXQgdG8gdGhlIGNvbW1hbmQgdG8gaW52b2tlIEdOVSBtYWtlCisjICAgaWYgaXQgZXhpc3RzLCB0aGUgZW1wdHkgc3RyaW5nIG90aGVyd2lzZS4KKyMKKyMgICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgaXRzIHVzZToKKyMKKyMgICBNYWtlZmlsZS5pbiBtaWdodCBjb250YWluOgorIworIyAgICAgICAjIEEgZmFpbHNhZmUgd2F5IG9mIHB1dHRpbmcgYSBkZXBlbmRlbmN5IHJ1bGUgaW50byBhIG1ha2VmaWxlCisjICAgICAgICQoREVQRU5EKToKKyMgICAgICAgICAgICAgICAkKENDKSAtTU0gJChzcmNkaXIpLyouYyA+ICQoREVQRU5EKQorIworIyAgICAgICBAaWZHTlVtYWtlQCBpZmVxICgkKERFUEVORCksJCh3aWxkY2FyZCAkKERFUEVORCkpKQorIyAgICAgICBAaWZHTlVtYWtlQCBpbmNsdWRlICQoREVQRU5EKQorIyAgICAgICBAaWZHTlVtYWtlQCBlbmRpZgorIworIyAgIFRoZW4gY29uZmlndXJlLmluIHdvdWxkIG5vcm1hbGx5IGNvbnRhaW46CisjCisjICAgICAgIENIRUNLX0dOVV9NQUtFKCkKKyMgICAgICAgQUNfT1VUUFVUKE1ha2VmaWxlKQorIworIyAgIFRoZW4gcGVyaGFwcyB0byBjYXVzZSBnbnUgbWFrZSB0byBvdmVycmlkZSBhbnkgb3RoZXIgbWFrZSwgd2UgY291bGQgZG8KKyMgICBzb21ldGhpbmcgbGlrZSB0aGlzIChub3RlIHRoYXQgR05VIG1ha2UgYWx3YXlzIGxvb2tzIGZvciBHTlVtYWtlZmlsZQorIyAgIGZpcnN0KToKKyMKKyMgICAgICAgaWYgICEgdGVzdCB4JF9jdl9nbnVfbWFrZV9jb21tYW5kID0geCA7IHRoZW4KKyMgICAgICAgICAgICAgICBtdiBNYWtlZmlsZSBHTlVtYWtlZmlsZQorIyAgICAgICAgICAgICAgIGVjaG8gLkRFRkFVTFQ6ID4gTWFrZWZpbGUgOworIyAgICAgICAgICAgICAgIGVjaG8gXCAgJF9jdl9nbnVfbWFrZV9jb21tYW5kIFwkQCA+PiBNYWtlZmlsZTsKKyMgICAgICAgZmkKKyMKKyMgICBUaGVuLCBpZiBhbnkgKHdlbGwgYWxtb3N0IGFueSkgb3RoZXIgbWFrZSBpcyBjYWxsZWQsIGFuZCBHTlUgbWFrZSBhbHNvCisjICAgZXhpc3RzLCB0aGVuIHRoZSBvdGhlciBtYWtlIHdyYXBzIHRoZSBHTlUgbWFrZS4KKyMKKyMgTElDRU5TRQorIworIyAgIENvcHlyaWdodCAoYykgMjAwOCBKb2huIERhcnJpbmd0b24gPGouZGFycmluZ3RvbkBlbHZpcy5tdXJkb2NoLmVkdS5hdT4KKyMKKyMgICBDb3B5aW5nIGFuZCBkaXN0cmlidXRpb24gb2YgdGhpcyBmaWxlLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyMgICBwZXJtaXR0ZWQgaW4gYW55IG1lZGl1bSB3aXRob3V0IHJveWFsdHkgcHJvdmlkZWQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyMgICBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4KKyMKKyMgTm90ZTogTW9kaWZpZWQgYnkgVGVkIFRzJ28gdG8gYWRkIEBpZk5vdEdOVU1ha2VACisKK0FDX0RFRlVOKAorICAgICAgICBbQ0hFQ0tfR05VX01BS0VdLCBbIEFDX0NBQ0hFX0NIRUNLKCBmb3IgR05VIG1ha2UsX2N2X2dudV9tYWtlX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgX2N2X2dudV9tYWtlX2NvbW1hbmQ9JycgOworZG5sIFNlYXJjaCBhbGwgdGhlIGNvbW1vbiBuYW1lcyBmb3IgR05VIG1ha2UKKyAgICAgICAgICAgICAgICBmb3IgYSBpbiAiJE1BS0UiIG1ha2UgZ21ha2UgZ251bWFrZSA7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkYSIgOyB0aGVuIGNvbnRpbnVlIDsgZmkgOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgICggc2ggLWMgIiRhIC0tdmVyc2lvbiIgMj4gL2Rldi9udWxsIHwgZ3JlcCBHTlUgIDI+JjEgPiAvZGV2L251bGwgKSA7ICB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdl9nbnVfbWFrZV9jb21tYW5kPSRhIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUgOworICAgICAgICApIDsKK2RubCBJZiB0aGVyZSB3YXMgYSBHTlUgdmVyc2lvbiwgdGhlbiBzZXQgQGlmR05VbWFrZUAgdG8gdGhlIGVtcHR5IHN0cmluZywgJyMnIG90aGVyd2lzZQorICAgICAgICBpZiB0ZXN0ICAieCRfY3ZfZ251X21ha2VfY29tbWFuZCIgIT0gIngiICA7IHRoZW4KKyAgICAgICAgICAgICAgICBpZkdOVW1ha2U9JycgOworICAgICAgICAgICAgICAgIGlmTm90R05VbWFrZT0nIycgOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWZHTlVtYWtlPScjJyA7CisgICAgICAgICAgICAgICAgaWZOb3RHTlVtYWtlPScnIDsKKyAgICAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCJOb3QgZm91bmQiKTsKKyAgICAgICAgZmkKKyAgICAgICAgQUNfU1VCU1QoaWZHTlVtYWtlKQorICAgICAgICBBQ19TVUJTVChpZk5vdEdOVW1ha2UpCitdICkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvY2FjaGVfaW5vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZjhlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2NhY2hlX2lub2RlLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1RoZSBjb21tZW50IHRvIHRoaXMgZnVuY3Rpb24gc2F5czoKKworIiIiCisgICogU3R1cGlkIGFsZ29yaXRobSAtLS0gd2Ugbm93IGp1c3Qgc2VhcmNoIGZvcndhcmQgc3RhcnRpbmcgZnJvbSB0aGUKKyAgKiBnb2FsLiAgU2hvdWxkIHB1dCBpbiBhIHNtYXJ0ZXIgb25lIHNvbWVkYXkuLi4uCisiIiIKKworVGhpcyBhZGRzIGluIGEgcmF0aGVyIGhhY2t5IGFsZ29ydGhpbSB3aGljaCBzdGFydHMgd2hlcmUgd2UgZmluaXNoZWQKK3NlYXJjaGluZyBwcmV2aW91c2x5IHVzaW5nIGEgc3RhdGljIHZhcmlhYmxlIHJhdGhlciB0aGFuIHN0YXJ0aW5nIAorZnJvbSBzY3JhdGNoIGlmIGEgaGludCBpc24ndCBwcm92aWRlZC4KKworVGhpcyB3YXMgYWZ0ZXIgbm90aWNpbmcgdGhhdCBta2ZzLmV4dDQgLUYgWCAtZCBZIHdhcyBzcGVuZGluZyAqbG90cyoKK29mIHRpbWUgaW4gZXh0MmZzX25ld19ibG9jazIgY2FsbGVkIGZyb20gZXh0MmZzX2JtYXAgZnJvbSBleHQyZnNfZmlsZV93cml0ZSgpLgorCitOdW1iZXJzIHdpc2UsIHRoaXMgdG9vayBhIGNvcmUtaW1hZ2Utc2F0by1zZGsgbWtmcyB0aW1lIGZyb20gb3ZlciAKKzggbWludXRlcyB0byBhcm91bmQgMzUgc2Vjb25kcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTUvMDIvMjAKKworSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvbGliL2V4dDJmcy9hbGxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZTJmc3Byb2dzLTEuNDIuOS5vcmlnL2xpYi9leHQyZnMvYWxsb2MuYworKysrIGUyZnNwcm9ncy0xLjQyLjkvbGliL2V4dDJmcy9hbGxvYy5jCitAQCAtMTYwLDYgKzE2MCw4IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2lub2RlKGV4dDJfZmlsc3lzIGYKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBibGs2NF90IGxhc3RfZ29hbCA9IDA7CisrCisgLyoKKyAgKiBTdHVwaWQgYWxnb3JpdGhtIC0tLSB3ZSBub3cganVzdCBzZWFyY2ggZm9yd2FyZCBzdGFydGluZyBmcm9tIHRoZQorICAqIGdvYWwuICBTaG91bGQgcHV0IGluIGEgc21hcnRlciBvbmUgc29tZWRheS4uLi4KK0BAIC0xNzAsNiArMTcyLDkgQEAgZXJyY29kZV90IGV4dDJmc19uZXdfYmxvY2syKGV4dDJfZmlsc3lzCisgCWJsazY0X3QJaTsKKyAJaW50CWNfcmF0aW87CisgCisrICAgICAgICBpZiAoIWdvYWwpCisrICAgICAgICAgICAgZ29hbCA9IGxhc3RfZ29hbDsKKysKKyAJRVhUMl9DSEVDS19NQUdJQyhmcywgRVhUMl9FVF9NQUdJQ19FWFQyRlNfRklMU1lTKTsKKyAKKyAJaWYgKCFtYXApCitAQCAtMTk0LDYgKzE5OSw3IEBAIGVycmNvZGVfdCBleHQyZnNfbmV3X2Jsb2NrMihleHQyX2ZpbHN5cworIAorIAkJaWYgKCFleHQyZnNfZmFzdF90ZXN0X2Jsb2NrX2JpdG1hcDIobWFwLCBpKSkgeworIAkJCSpyZXQgPSBpOworKwkJCWxhc3RfZ29hbCA9IGk7CisgCQkJcmV0dXJuIDA7CisgCQl9CisgCQlpID0gKGkgKyBjX3JhdGlvKSAmIH4oY19yYXRpbyAtIDEpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvZml4LWljYWNoZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM4Y2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL2ZpeC1pY2FjaGUucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAoraW5vZGUuYzogb25seSB1cGRhdGUgdGhlIGljYWNoZSBmb3IgZXh0Ml9pbm9kZQorCitXZSBvbmx5IHJlYWQgdGhlIGNhY2hlIHdoZW46CisKK2J1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKQorCit0aGVuIHdlIHNob3VsZCBvbmx5IHVwZGF0ZSB0aGUgY2FjaGUgaW4gdGhlIHNhbWUgY29uZGl0aW9uLCBvdGhlcndpc2UKK3RoZXJlIHdvdWxkIGJlIGVycm9ycywgZm9yIGV4YW1wbGU6CisKK2NhY2hlWzBdOiBjYWNoZWQgaW5vIDE0IHdoZW4gYnVmc2l6ZSA9IDEyOCBieSBleHQyZnNfd3JpdGVfaW5vZGVfZnVsbCgpCitjYWNoZVsxXTogY2FjaGVkIGlubyAxNCB3aGVuIGJ1ZnNpemUgPSAxNTYgYnkgZXh0MmZzX3JlYWRfaW5vZGVfZnVsbCgpCisKK1RoZW4gdXBkYXRlIHRoZSBjYWNoZToKK2NhY2hlWzBdOiBjYWNoZWQgaW5vIDE1IHdoZW4gYnVmc2l6ZSA9IDE1NiBieSBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKCkKKworVGhlbiB0aGUgaW5vIDE0IHdvdWxkIGhpdCB0aGUgY2FjaGVbMV0gd2hlbiBidWZzaXplID0gMTI4IChidXQgaXQgd2FzCitjYWNoZWQgYnkgYnVmc2l6ZSA9IDE1NiksIHNvIHRoZXJlIHdvdWxkIGJlIGVycm9ycy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvZXh0MmZzL2lub2RlLmMgfCAyMCArKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2V4dDJmcy9pbm9kZS5jIGIvbGliL2V4dDJmcy9pbm9kZS5jCistLS0gYS9saWIvZXh0MmZzL2lub2RlLmMKKysrKyBiL2xpYi9leHQyZnMvaW5vZGUuYworQEAgLTYxMiwxMCArNjEyLDEyIEBAIGVycmNvZGVfdCBleHQyZnNfcmVhZF9pbm9kZV9mdWxsKGV4dDJfZmlsc3lzIGZzLCBleHQyX2lub190IGlubywKKyAjZW5kaWYKKyAKKyAJLyogVXBkYXRlIHRoZSBpbm9kZSBjYWNoZSAqLworLQlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCistCQlmcy0+aWNhY2hlLT5jYWNoZV9zaXplOworLQlmcy0+aWNhY2hlLT5jYWNoZVtmcy0+aWNhY2hlLT5jYWNoZV9sYXN0XS5pbm8gPSBpbm87CistCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworKwlpZiAoYnVmc2l6ZSA9PSBzaXplb2Yoc3RydWN0IGV4dDJfaW5vZGUpKSB7CisrCQlmcy0+aWNhY2hlLT5jYWNoZV9sYXN0ID0gKGZzLT5pY2FjaGUtPmNhY2hlX2xhc3QgKyAxKSAlCisrCQkJZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsKKysJCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlubyA9IGlubzsKKysJCWZzLT5pY2FjaGUtPmNhY2hlW2ZzLT5pY2FjaGUtPmNhY2hlX2xhc3RdLmlub2RlID0gKmlub2RlOworKwl9CisgCisgCXJldHVybiAwOworIH0KK0BAIC02NDgsMTAgKzY1MCwxMiBAQCBlcnJjb2RlX3QgZXh0MmZzX3dyaXRlX2lub2RlX2Z1bGwoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgaW5vLAorIAorIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIGlub2RlIGNhY2hlIG5lZWRzIHRvIGJlIHVwZGF0ZWQgKi8KKyAJaWYgKGZzLT5pY2FjaGUpIHsKKy0JCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CistCQkJaWYgKGZzLT5pY2FjaGUtPmNhY2hlW2ldLmlubyA9PSBpbm8pIHsKKy0JCQkJZnMtPmljYWNoZS0+Y2FjaGVbaV0uaW5vZGUgPSAqaW5vZGU7CistCQkJCWJyZWFrOworKwkJaWYgKGJ1ZnNpemUgPT0gc2l6ZW9mKHN0cnVjdCBleHQyX2lub2RlKSkgeworKwkJCWZvciAoaT0wOyBpIDwgZnMtPmljYWNoZS0+Y2FjaGVfc2l6ZTsgaSsrKSB7CisrCQkJCWlmIChmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm8gPT0gaW5vKSB7CisrCQkJCQlmcy0+aWNhY2hlLT5jYWNoZVtpXS5pbm9kZSA9ICppbm9kZTsKKysJCQkJCWJyZWFrOworKwkJCQl9CisgCQkJfQorIAkJfQorIAl9IGVsc2UgeworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWlzYy1ta2UyZnMuYy1yZXR1cm4tZXJyb3Itd2hlbi1mYWlsZWQtdG8tcG9wdWxhdGUtZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMGNlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gZTRmZmQ2ZmU5NzU4ODhkMzA2YjVmNzAwYmE1NGFmMThiNTlmNjc1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyMCBNYXIgMjAxNCAxMToxMDoyMSArMDgwMAorU3ViamVjdDogW1BBVENIXSBtaXNjL21rZTJmcy5jOiByZXR1cm4gZXJyb3Igd2hlbiBmYWlsZWQgdG8gcG9wdWxhdGUgZmlsZXN5c3RlbQorCitXZSBuZWVkIHJldHVybiByZXR2YWwgd2hlbiAibWtlMmZzIC1kIiBmYWlsZWQsIG90aGVyd2lzZSB0aGUgIiQ/IiB3b3VsZAorYmUgMCB3aGljaCBpcyBtaXNsZWFkaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIG1pc2MvbWtlMmZzLmMgfCA3ICsrKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbWlzYy9ta2UyZnMuYyBiL21pc2MvbWtlMmZzLmMKK2luZGV4IGE2M2YwYjcuLjg0NjE5MGUgMTAwNjQ0CistLS0gYS9taXNjL21rZTJmcy5jCisrKysgYi9taXNjL21rZTJmcy5jCitAQCAtMjc0NSwxMCArMjc0NSwxMSBAQCBub19qb3VybmFsOgorIAkJY3VycmVudF9mcyA9IGZzOworIAkJcm9vdCA9IEVYVDJfUk9PVF9JTk87CisgCQlyZXR2YWwgPSBwb3B1bGF0ZV9mcyhyb290LCByb290X2Rpcik7CistCQlpZiAocmV0dmFsKQorKwkJaWYgKHJldHZhbCkgeworIAkJCWZwcmludGYoc3RkZXJyLCAiJXMiLAorLQkJCQlfKCJcbkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZmlsZSBzeXN0ZW0iKSk7CistCQllbHNlIGlmICghcXVpZXQpCisrCQkJCV8oIlxuRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmaWxlIHN5c3RlbVxuIikpOworKwkJCXJldHVybiByZXR2YWw7CisrCQl9IGVsc2UgaWYgKCFxdWlldCkKKyAJCQlwcmludGYoIiVzIiwgXygiZG9uZVxuIikpOworIAl9CisgCistLSAKKzEuOC4zLjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdhMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvbWtkaXIucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNZWkgTGVpIDxsZWkubWVpQGludGVsLmNvbT4KKworSW5kZXg6IGUyZnNwcm9ncy0xLjQxLjUvcG8vTWFrZWZpbGUuaW4uaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40MS41Lm9yaWcvcG8vTWFrZWZpbGUuaW4uaW4JMjAwOS0wMi0xNCAxMzo0OTowOC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlMmZzcHJvZ3MtMS40MS41L3BvL01ha2VmaWxlLmluLmluCTIwMDktMDgtMTkgMTc6NTI6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtMzAsNyArMzAsNyBAQAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIE1LSU5TVEFMTERJUlMgPSBATUtJTlNUQUxMRElSU0AKKy1ta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJChNS0lOU1RBTExESVJTKQorK21raW5zdGFsbGRpcnMgPSAkKE1LSU5TVEFMTERJUlMpCisgCisgR01TR0ZNVCA9IEBHTVNHRk1UQAorIE1TR0ZNVCA9IEBNU0dGTVRACitJbmRleDogZTJmc3Byb2dzLTEuNDEuNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40MS41Lm9yaWcvY29uZmlndXJlLmluCTIwMDktMDgtMTkgMTc6NTM6NTAuMDAwMDAwMDAwICswMTAwCisrKysgZTJmc3Byb2dzLTEuNDEuNS9jb25maWd1cmUuaW4JMjAwOS0wOC0xOSAxNzo0ODozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC05NzAsNiArOTcwLDggQEAKKyBmaQorIEFDX1NVQlNUKEJVSUxEX0NGTEFHUykKKyBBQ19TVUJTVChCVUlMRF9MREZMQUdTKQorK01LSU5TVEFMTERJUlM9Im1rZGlyIC1wIgorK0FDX1NVQlNUKE1LSU5TVEFMTERJUlMpCisgZG5sCisgZG5sIE1ha2Ugb3VyIG91dHB1dCBmaWxlcywgYmVpbmcgc3VyZSB0aGF0IHdlIGNyZWF0ZSB0aGUgc29tZSBtaXNjZWxsYW5lb3VzIAorIGRubCBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE1M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcHRlc3QucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorSW5kZXg6IGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlMmZzcHJvZ3MtMS40Mi45Lm9yaWcvdGVzdHMvTWFrZWZpbGUuaW4KKysrKyBlMmZzcHJvZ3MtMS40Mi45L3Rlc3RzL01ha2VmaWxlLmluCitAQCAtMTgsNyArMTgsNyBAQCB0ZXN0X29uZTogJChzcmNkaXIpL3Rlc3Rfb25lLmluIE1ha2VmaWxlCisgCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9vbmUKKyBASFRSRUVfQ01UQAlAZWNobyAiSFRSRUU9eSIgPj4gdGVzdF9vbmUKKyBAUVVPVEFfQ01UQAlAZWNobyAiUVVPVEE9eSIgPj4gdGVzdF9vbmUKKy0JQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9vbmUKKysJQGVjaG8gIlNSQ0RJUj0vdXNyL2xpYi9lMmZzcHJvZ3MvcHRlc3QvdGVzdCIgPj4gdGVzdF9vbmUKKyAJQGVjaG8gIkRJRkZfT1BUUz1AVU5JX0RJRkZfT1BUU0AiID4+IHRlc3Rfb25lCisgCUBjYXQgJChzcmNkaXIpL3Rlc3Rfb25lLmluID4+IHRlc3Rfb25lCisgCUBjaG1vZCAreCB0ZXN0X29uZQorQEAgLTI2LDcgKzI2LDcgQEAgdGVzdF9vbmU6ICQoc3JjZGlyKS90ZXN0X29uZS5pbiBNYWtlZmlsZQorIHRlc3Rfc2NyaXB0OiB0ZXN0X29uZSB0ZXN0X3NjcmlwdC5pbiBNYWtlZmlsZSBta2UyZnMuY29uZgorIAlAZWNobyAiQ3JlYXRpbmcgdGVzdF9zY3JpcHQuLi4iCisgCUBlY2hvICIjIS9iaW4vc2giID4gdGVzdF9zY3JpcHQKKy0JQGVjaG8gIlNSQ0RJUj1Ac3JjZGlyQCIgPj4gdGVzdF9zY3JpcHQKKysJQGVjaG8gIlNSQ0RJUj0vdXNyL2xpYi9lMmZzcHJvZ3MvcHRlc3QvdGVzdCIgPj4gdGVzdF9zY3JpcHQKKyAJQGNhdCAkKHNyY2RpcikvdGVzdF9zY3JpcHQuaW4gPj4gdGVzdF9zY3JpcHQKKyAJQGNobW9kICt4IHRlc3Rfc2NyaXB0CisgCitJbmRleDogZTJmc3Byb2dzLTEuNDIuOS90ZXN0cy90ZXN0X2NvbmZpZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGUyZnNwcm9ncy0xLjQyLjkub3JpZy90ZXN0cy90ZXN0X2NvbmZpZworKysrIGUyZnNwcm9ncy0xLjQyLjkvdGVzdHMvdGVzdF9jb25maWcKK0BAIC0zLDIzICszLDIzIEBACisgIworIAorIHVuc2V0IExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgTENfVEVMRVBIT05FIExDX1RJTUUgUEFHRVIKKy1GU0NLPSIkVVNFX1ZBTEdSSU5EIC4uL2UyZnNjay9lMmZzY2siCistTUtFMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvbWtlMmZzIgorLURVTVBFMkZTPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvZHVtcGUyZnMiCistVFVORTJGUz0iJFVTRV9WQUxHUklORCAuLi9taXNjL3R1bmUyZnMiCistQ0hBVFRSPSIkVVNFX1ZBTEdSSU5ELi4vbWlzYy9jaGF0dHIiCistTFNBVFRSPSIkVVNFX1ZBTEdSSU5EIC4uL21pc2MvbHNhdHRyIgorLUUySU1BR0U9IiRVU0VfVkFMR1JJTkQgLi4vbWlzYy9lMmltYWdlIgorLUUySU1BR0VfRVhFPSIuLi9taXNjL2UyaW1hZ2UiCistREVCVUdGUz0iJFVTRV9WQUxHUklORCAuLi9kZWJ1Z2ZzL2RlYnVnZnMiCistREVCVUdGU19FWEU9Ii4uL2RlYnVnZnMvZGVidWdmcyIKKy1URVNUX0JJVFM9Ii4uL2RlYnVnZnMvZGVidWdmcyIKKy1SRVNJWkUyRlNfRVhFPSIuLi9yZXNpemUvcmVzaXplMmZzIgorK0ZTQ0s9IiRVU0VfVkFMR1JJTkQgZTJmc2NrIgorK01LRTJGUz0iJFVTRV9WQUxHUklORCBta2UyZnMiCisrRFVNUEUyRlM9IiRVU0VfVkFMR1JJTkQgZHVtcGUyZnMiCisrVFVORTJGUz0iJFVTRV9WQUxHUklORCB0dW5lMmZzIgorK0NIQVRUUj0iJFVTRV9WQUxHUklORCBjaGF0dHIiCisrTFNBVFRSPSIkVVNFX1ZBTEdSSU5EIGxzYXR0ciIKKytFMklNQUdFPSIkVVNFX1ZBTEdSSU5EIGUyaW1hZ2UiCisrRTJJTUFHRV9FWEU9Ii9zYmluL2UyaW1hZ2UiCisrREVCVUdGUz0iJFVTRV9WQUxHUklORCBkZWJ1Z2ZzIgorK0RFQlVHRlNfRVhFPSIvc2Jpbi9kZWJ1Z2ZzIgorK1RFU1RfQklUUz0iL3NiaW4vZGVidWdmcyIKKytSRVNJWkUyRlNfRVhFPSIvc2Jpbi9yZXNpemUyZnMiCisgUkVTSVpFMkZTPSIkVVNFX1ZBTEdSSU5EICRSRVNJWkUyRlNfRVhFIgorLUUyVU5ET19FWEU9Ii4uL21pc2MvZTJ1bmRvIgorLVRFU1RfUkVMPS4uL3Rlc3RzL3Byb2dzL3Rlc3RfcmVsCistVEVTVF9JQ09VTlQ9Li4vdGVzdHMvcHJvZ3MvdGVzdF9pY291bnQKKy1DUkNTVU09Li4vdGVzdHMvcHJvZ3MvY3Jjc3VtCisrRTJVTkRPX0VYRT0iL3NiaW4vZTJ1bmRvIgorK1RFU1RfUkVMPS4vcHJvZ3MvdGVzdF9yZWwKKytURVNUX0lDT1VOVD0uL3Byb2dzL3Rlc3RfaWNvdW50CisrQ1JDU1VNPS4vcHJvZ3MvY3Jjc3VtCisgTERfTElCUkFSWV9QQVRIPS4uL2xpYjouLi9saWIvZXh0MmZzOi4uL2xpYi9lMnA6Li4vbGliL2V0Oi4uL2xpYi9zcworIERZTERfTElCUkFSWV9QQVRIPS4uL2xpYjouLi9saWIvZXh0MmZzOi4uL2xpYi9lMnA6Li4vbGliL2V0Oi4uL2xpYi9zcworIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3F1aWV0LWRlYnVnZnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMGU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9xdWlldC1kZWJ1Z2ZzLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1doZW4gZXhlY3V0aW5nIGEgc2NyaXB0IGRvbid0IGVjaG8gZXZlcnkgY29tbWFuZCwgYXMgd2UgZG8gdGhpcyBmb3IgZW50aXJlCitmaWxlc3lzdGVtcyBhdCByb290ZnMgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZGVidWdmcy9kZWJ1Z2ZzLmMgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworaW5kZXggNTU5MDI5NS4uYWM1NzI5MiAxMDA2NDQKKy0tLSBhL2RlYnVnZnMvZGVidWdmcy5jCisrKysgYi9kZWJ1Z2ZzL2RlYnVnZnMuYworQEAgLTIzNzgsNyArMjM3OCw3IEBAIHN0YXRpYyBpbnQgc291cmNlX2ZpbGUoY29uc3QgY2hhciAqY21kX2ZpbGUsIGludCBzc19pZHgpCisgCQljcCA9IHN0cmNocihidWYsICdccicpOworIAkJaWYgKGNwKQorIAkJCSpjcCA9IDA7CistCQlwcmludGYoImRlYnVnZnM6ICVzXG4iLCBidWYpOworKwkJLypwcmludGYoImRlYnVnZnM6ICVzXG4iLCBidWYpOyovCisgCQlyZXR2YWwgPSBzc19leGVjdXRlX2xpbmUoc3NfaWR4LCBidWYpOworIAkJaWYgKHJldHZhbCkgeworIAkJCXNzX3BlcnJvcihzc19pZHgsIHJldHZhbCwgYnVmKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2UyZnNwcm9ncy9lMmZzcHJvZ3MvcmVtb3ZlLmxkY29uZmlnLmNhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNlNmViNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjEzOWUwM2FjMmY3MmU2NDRlNTQ3YzdlZTliMTUxNDM4M2FmNGQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMzAgSmFuIDIwMTMgMTU6MjI6MDQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gV2hlbiAvZXRjL2xkLnNvLmNhY2hlIGlzIHdyaXRlYWJsZSBieSB1c2VyIHJ1bm5pbmcgYml0YmFrZQorIHRoZW4gaXQgY3JlYXRlcyBpbnZhbGlkIGNhY2hlIChpbiBteSBjYXNlIGxpYnN0ZGMrKy5zbworIGNhbm5vdCBiZSBmb3VuZCBhZnRlciBidWlsZGluZyB6bGliKC1uYXRpdmUpIGFuZCBJIGhhdmUgdG8KKyBjYWxsIHRvdWNoICovbGlic3RkYysrLnNvICYmIC9zYmluL2xkY29uZmlnIHRvIGZpeCBpdC4KKworU28gcmVtb3ZlIGxkY29uZmlnIGNhbGwgZnJvbSBtYWtlIGluc3RhbGwtbGlicworCitQYXRjaCBhdXRob3JlZCBieSBNYXJ0aW4gSmFuc2EuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBEaW51IDxhbmRyZWkuYWRyaWFueC5kaW51QGludGVsLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZS5lbGYtbGliIHwgICAgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS5lbGYtbGliIGIvbGliL01ha2VmaWxlLmVsZi1saWIKK2luZGV4IDc4NDc5ZDMuLjRhNGE1YWMgMTAwNjQ0CistLS0gYS9saWIvTWFrZWZpbGUuZWxmLWxpYgorKysrIGIvbGliL01ha2VmaWxlLmVsZi1saWIKK0BAIC01MCw4ICs1MCw2IEBAIGluc3RhbGwtc2hsaWJzIGluc3RhbGw6OiAkKEVMRl9MSUIpIGluc3RhbGxkaXJzLWVsZi1saWIgJChERVBfSU5TVEFMTF9TWU1MSU5LKQorIAkkKEUpICIJU1lNTElOSyAkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvIgorIAkkKFEpICQoSU5TVEFMTF9TWU1MSU5LKSAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisgCQkkKGxpYmRpcikvJChFTEZfSU1BR0UpLnNvICQoREVTVERJUikKKy0JJChFKSAiCUxEQ09ORklHIgorLQkkKFEpIC0kKExEQ09ORklHKQorIAorIGluc3RhbGwtc3RyaXA6IGluc3RhbGwKKyAJJChFKSAiCVNUUklQLUxJQiAkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfTElCKSIKK0BAIC02Nyw3ICs2NSw2IEBAIHVuaW5zdGFsbC1zaGxpYnMgdW5pbnN0YWxsOjoKKyAJJChSTSkgLWYgJChERVNURElSKSQoRUxGX0lOU1RBTExfRElSKS8kKEVMRl9MSUIpIFwKKyAJCSQoREVTVERJUikkKEVMRl9JTlNUQUxMX0RJUikvJChFTEZfU09OQU1FKSBcCisgCQkkKERFU1RESVIpJChsaWJkaXIpLyQoRUxGX0lNQUdFKS5zbworLQktJChMRENPTkZJRykKKyAKKyBjbGVhbjo6CisgCSQoUk0pIC1yZiBlbGZzaGFyZWQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9ncy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMjUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzL3J1bi1wdGVzdApAQCAtMCwwICsxLDExIEBACisjIS9iaW4vc2gKKworY2QgLi90ZXN0CisuL3Rlc3Rfc2NyaXB0ICY+Li4vdGVzdC5sb2cKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IGUyZnNwcm9ncyIKKwlybSB0ZXN0LmxvZworZWxzZQorCWVjaG8gIkZBSUw6IGUyZnNwcm9ncyIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZTJmc3Byb2dzL2UyZnNwcm9nc18xLjQyLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdlMjljOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lMmZzcHJvZ3MvZTJmc3Byb2dzXzEuNDIuOS5iYgpAQCAtMCwwICsxLDExNiBAQAorcmVxdWlyZSBlMmZzcHJvZ3MuaW5jCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlVwZGF0aW5nIGJhY2twb3J0ZWQgcGF0Y2hlcyB0byAxLjQyLjEzIGlzIHRvbyBtdWNoIHBhaW4uIExldCdzIHdhaXQgdW50aWwgMS40MyBpcyByZWxlYXNlZC4iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hY2luY2x1ZGUubTQgXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS5sZGNvbmZpZy5jYWxsLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtaWNhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9xdWlldC1kZWJ1Z2ZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1rZTJmcy1hZGQtdGhlLWFiaWxpdHktdG8tY29weS1maWxlcy1mcm9tLWEtZ2l2ZW4tZGkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItbWlzYy1jcmVhdGVfaW5vZGUuYy1jb3B5LWZpbGVzLXJlY3Vyc2l2ZWx5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLW1pc2MtY3JlYXRlX2lub2RlLmMtY3JlYXRlLXNwZWNpYWwtZmlsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwNC1taXNjLWNyZWF0ZV9pbm9kZS5jLWNyZWF0ZS1zeW1saW5rLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA1LW1pc2MtY3JlYXRlX2lub2RlLmMtY29weS1yZWd1bGFyLWZpbGUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDYtbWlzYy1jcmVhdGVfaW5vZGUuYy1jcmVhdGUtZGlyZWN0b3J5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA3LW1pc2MtY3JlYXRlX2lub2RlLmMtc2V0LW93bmVyLW1vZGUtdGltZS1mb3ItdGhlLWlub2QucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDgtbWtlMmZzLmMtYWRkLWFuLW9wdGlvbi1kLXJvb3QtZGlyZWN0b3J5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA5LW1pc2MtY3JlYXRlX2lub2RlLmMtaGFuZGxlLWhhcmRsaW5rcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMC1kZWJ1Z2ZzLXVzZS10aGUtZnVuY3Rpb25zLWluLW1pc2MtY3JlYXRlX2lub2RlLmMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMTEtbWtlMmZzLjguaW4tdXBkYXRlLXRoZS1tYW51YWwtZm9yLXRoZS1kLW9wdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAxMi1GaXgtbXVzbC1idWlsZC1mYWlsdXJlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1lMmZzcHJvZ3MtZml4LWNyb3NzLWNvbXBpbGF0aW9uLXByb2JsZW0ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL21pc2MtbWtlMmZzLmMtcmV0dXJuLWVycm9yLXdoZW4tZmFpbGVkLXRvLXBvcHVsYXRlLWZzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jYWNoZV9pbm9kZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTUtMDI0Ny5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1saWJleHQyZnMtZml4LXBvdGVudGlhbC1idWZmZXItb3ZlcmZsb3ctaW4tY2xvc2Vmcy5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZjhlNDFlNjNiNDMyYmExMTRiMzNmNTg2NzQ1NjNmNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyZjkyYWMwNmU5MmZhMDBmMmFkYTNlZTY3ZGFkMDEyZDc0ZDY4NTUzNzUyN2FkMTI0MWQ4MmYyZDA0MWYyODAyIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0gLS1lbmFibGUtZWxmLXNobGlicyAtLWRpc2FibGUtbGlidXVpZCAtLWRpc2FibGUtdXVpZGQgLS1lbmFibGUtdmVyYm9zZS1tYWtlY21kcyIKK0VYVFJBX09FQ09ORl9kYXJ3aW4gPSAiLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gLS1zYmluZGlyPSR7YmFzZV9zYmluZGlyfSAtLWVuYWJsZS1ic2Qtc2hsaWJzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY3AgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLWxpYnMKKwkjIFdlIHVzZSBibGtpZCBmcm9tIHV0aWwtbGludXggbm93IHNvIHJlbW92ZSBmcm9tIGhlcmUKKwlybSAtZiAke0R9JHtiYXNlX2xpYmRpcn0vbGliYmxraWQqCisJcm0gLXJmICR7RH0ke2luY2x1ZGVkaXJ9L2Jsa2lkCisJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZy9ibGtpZC5wYworCXJtIC1mICR7RH0ke2Jhc2Vfc2JpbmRpcn0vYmxraWQKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZzY2sKKwlybSAtZiAke0R9JHtiYXNlX3NiaW5kaXJ9L2ZpbmRmcworCisJIyBlMmluaXRyZF9oZWxwZXIgYW5kIHRoZSBwa2djb25maWcgZmlsZXMgYmVsb25nIGluIGxpYmRpcgorCWlmIFsgISAke0R9JHtsaWJkaXJ9IC1lZiAke0R9JHtiYXNlX2xpYmRpcn0gXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L2UyaW5pdHJkX2hlbHBlciAke0R9JHtsaWJkaXJ9CisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCisKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZXh0MmZzL2V4dDJfdHlwZXMuaAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9jaGF0dHIgJHtEfSR7YmFzZV9iaW5kaXJ9L2NoYXR0ci5lMmZzcHJvZ3MKKworCWluc3RhbGwgLXYgLW0gNzU1ICR7U30vY29udHJpYi9wb3B1bGF0ZS1leHRmcy5zaCAke0R9JHtiYXNlX3NiaW5kaXJ9LworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJIyBDbGVhbiBob3N0IHBhdGggaW4gY29tcGlsZV9ldCwgbWtfY21kcworCXNlZCAtaSAtZSAicyxFVF9ESVI9XCIke1N9L2xpYi9ldFwiLEVUX0RJUj1cIiR7ZGF0YWRpcn0vZXRcIixnIiAke0R9JHtiaW5kaXJ9L2NvbXBpbGVfZXQKKwlzZWQgLWkgLWUgInMsU1NfRElSPVwiJHtTfS9saWIvc3NcIixTU19ESVI9XCIke2RhdGFkaXJ9L3NzXCIsZyIgJHtEfSR7YmluZGlyfS9ta19jbWRzCit9CisKK1JERVBFTkRTX2UyZnNwcm9ncyA9ICJlMmZzcHJvZ3MtYmFkYmxvY2tzIgorUlJFQ09NTUVORFNfZTJmc3Byb2dzID0gImUyZnNwcm9ncy1ta2UyZnMgZTJmc3Byb2dzLWUyZnNjayIKKworUEFDS0FHRVMgPSsgImUyZnNwcm9ncy1lMmZzY2sgZTJmc3Byb2dzLW1rZTJmcyBlMmZzcHJvZ3MtdHVuZTJmcyBlMmZzcHJvZ3MtYmFkYmxvY2tzIGUyZnNwcm9ncy1yZXNpemUyZnMiCitQQUNLQUdFUyA9KyAibGliY29tZXJyIGxpYnNzIGxpYmUycCBsaWJleHQyZnMiCisKK0ZJTEVTX2UyZnNwcm9ncy1yZXNpemUyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L3Jlc2l6ZTJmcyoiCitGSUxFU19lMmZzcHJvZ3MtZTJmc2NrID0gIiR7YmFzZV9zYmluZGlyfS9lMmZzY2sgJHtiYXNlX3NiaW5kaXJ9L2ZzY2suZXh0KiIKK0ZJTEVTX2UyZnNwcm9ncy1ta2UyZnMgPSAiJHtiYXNlX3NiaW5kaXJ9L21rZTJmcyAke2Jhc2Vfc2JpbmRpcn0vbWtmcy5leHQqICR7c3lzY29uZmRpcn0vbWtlMmZzLmNvbmYiCitGSUxFU19lMmZzcHJvZ3MtdHVuZTJmcyA9ICIke2Jhc2Vfc2JpbmRpcn0vdHVuZTJmcyAke2Jhc2Vfc2JpbmRpcn0vZTJsYWJlbCIKK0ZJTEVTX2UyZnNwcm9ncy1iYWRibG9ja3MgPSAiJHtiYXNlX3NiaW5kaXJ9L2JhZGJsb2NrcyIKK0ZJTEVTX2xpYmNvbWVyciA9ICIke2Jhc2VfbGliZGlyfS9saWJjb21fZXJyLnNvLioiCitGSUxFU19saWJzcyA9ICIke2Jhc2VfbGliZGlyfS9saWJzcy5zby4qIgorRklMRVNfbGliZTJwID0gIiR7YmFzZV9saWJkaXJ9L2xpYmUycC5zby4qIgorRklMRVNfbGliZXh0MmZzID0gIiR7bGliZGlyfS9lMmluaXRyZF9oZWxwZXIgJHtiYXNlX2xpYmRpcn0vbGliZXh0MmZzLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vKi8qLmF3ayAke2RhdGFkaXJ9LyovKi5zZWQgJHtiYXNlX2xpYmRpcn0vKi5zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiY2hhdHRyIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyIgorQUxURVJOQVRJVkVfVEFSR0VUW2NoYXR0cl0gPSAiJHtiYXNlX2JpbmRpcn0vY2hhdHRyLmUyZnNwcm9ncyIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gImxpYmJsa2lkLjMgYmxraWQuOCBmaW5kZnMuOCBmc2NrLjgiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbGliYmxraWQuM10gPSAiJHttYW5kaXJ9L21hbjMvbGliYmxraWQuMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtibGtpZC44XSA9ICIke21hbmRpcn0vbWFuOC9ibGtpZC44IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZpbmRmcy44XSA9ICIke21hbmRpcn0vbWFuOC9maW5kZnMuOCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtmc2NrLjhdID0gIiR7bWFuZGlyfS9tYW44L2ZzY2suOCIKKworaW5oZXJpdCBwdGVzdAorU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9wdGVzdC5wYXRjaCIKKworUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gIiR7UE59ICR7UE59LXR1bmUyZnMgY29yZXV0aWxzIHByb2NwcyIKKyNSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiZXhwZWN0IgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtCfS90ZXN0cworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1hICR7Qn0vdGVzdHMgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdAorCWNwIC1hICR7U30vdGVzdHMvKiAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJc2VkIC1lICdzIS4uL2UyZnNjay9lMmZzY2shZTJmc2NrIWcnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvKi9leHBlY3QqCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9hcm1fYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQ2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvYXJtX2JhY2tlbmQuZGlmZgpAQCAtMCwwICsxLDQ0OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvYXJtX2luaXQuYwkyMDA5LTA0LTIxIDE0OjUwOjAxLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2FybV9pbml0LmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMiwyMSArMzIsMzIgQEAKKyAjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX0FSTV8KKyAjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorIAorKyNpbmNsdWRlICJsaWJlYmxfYXJtLmgiCisrCisgLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gYXJtX3JlbG9jLmRlZi4gICovCisgI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorIAorIAorIGNvbnN0IGNoYXIgKgorIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKy0gICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVsZiAqZWxmOworICAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgICAgRWJsICplaDsKKyAgICAgIHNpemVfdCBlaGxlbjsKKyB7CisrICBpbnQgc29mdF9mbG9hdCA9IDA7CisrCisgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKyAgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKQorKyAgICAgIHNvZnRfZmxvYXQgPSAxOworKyAgfQorKworICAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKyAgIGVoLT5uYW1lID0gIkFSTSI7CisgICBhcm1faW5pdF9yZWxvYyAoZWgpOworQEAgLTU4LDcgKzY5LDEwIEBACisgICBIT09LIChlaCwgY29yZV9ub3RlKTsKKyAgIEhPT0sgKGVoLCBhdXh2X2luZm8pOworICAgSE9PSyAoZWgsIGNoZWNrX29iamVjdF9hdHRyaWJ1dGUpOworLSAgSE9PSyAoZWgsIHJldHVybl92YWx1ZV9sb2NhdGlvbik7CisrICBpZiAoc29mdF9mbG9hdCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdDsKKysgIGVsc2UKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAKKyAgIHJldHVybiBNT0RWRVJTSU9OOworIH0KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1fcmVncy5jCTIwMDktMDQtMjEgMTQ6NTA6MDEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTI4LDYgKzI4LDcgQEAKKyAjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPGR3YXJmLmg+CisgCisgI2RlZmluZSBCQUNLRU5EIGFybV8KK0BAIC01OCw3ICs1OSwxNSBAQAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorLSAgICBjYXNlIDEwIC4uLiAxMjoKKysgICAgY2FzZSAxMCAuLi4gMTE6CisrICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICBuYW1lWzFdID0gJzEnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAlIDEwICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDEyOgorKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworICAgICAgIG5hbWVbMF0gPSAncic7CisgICAgICAgbmFtZVsxXSA9ICcxJzsKKyAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKK0BAIC03Myw2ICs4Miw5IEBACisgICAgICAgYnJlYWs7CisgCisgICAgIGNhc2UgMTYgKyAwIC4uLiAxNiArIDc6CisrICAgICAgLyogQUFEV0FSRiBzYXlzIHRoYXQgdGhlcmUgYXJlIG5vIHJlZ2lzdGVycyBpbiB0aGF0IHJhbmdlLAorKyAgICAgICAqIGJ1dCBnY2MgbWFwcyBGUEEgcmVnaXN0ZXJzIGhlcmUKKysgICAgICAgKi8KKyAgICAgICByZWdubyArPSA5NiAtIDE2OworICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgIGNhc2UgOTYgKyAwIC4uLiA5NiArIDc6CitAQCAtODQsMTEgKzk2LDEzOSBAQAorICAgICAgIG5hbWVsZW4gPSAyOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIDY0ICsgMCAuLi4gNjQgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSByZWdubyAtIDY0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDY0ICsgMTAgLi4uIDY0ICsgMzE6CisrICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgIG5hbWVbMF0gPSAncyc7CisrICAgICAgbmFtZVsxXSA9IChyZWdubyAtIDY0KSAvIDEwICsgJzAnOworKyAgICAgIG5hbWVbMl0gPSAocmVnbm8gLSA2NCkgJSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMDQgKyAwIC4uLiAxMDQgKyA3OgorKyAgICAgIC8qIFhYWCBUT0RPOgorKyAgICAgICAqIFRoaXMgY2FuIGJlIGVpdGhlciBpbnRlbCB3aXJlbGVzcyBNTVggZ2VuZXJhbCBwdXJwb3NlL2NvbnRyb2wKKysgICAgICAgKiByZWdpc3RlcnMgb3IgeHNjYWxlIGFjY3VtdWxhdG9yLCB3aGljaCBoYXZlIGRpZmZlcmVudCB1c2FnZS4KKysgICAgICAgKiBXZSBvbmx5IGhhdmUgdGhlIGludGVsIHdpcmVsZXNzIE1NWCBoZXJlIG5vdy4KKysgICAgICAgKiBUaGUgbmFtZSBuZWVkcyB0byBiZSBjaGFuZ2VkIGZvciB0aGUgeHNjYWxlIGFjY3VtdWxhdG9yIHRvby4gKi8KKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbWVtY3B5KG5hbWUsICJ3Y2dyIiwgNCk7CisrICAgICAgbmFtZVs0XSA9IHJlZ25vIC0gMTA0ICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSA1OworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDAgLi4uIDExMiArIDk6CisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDY0OworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdyJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxMTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTEyICsgMTAgLi4uIDExMiArIDE1OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9ICcxJzsKKysgICAgICBuYW1lWzNdID0gcmVnbm8gLSAxMTIgLSAxMCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNDsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAxMjg6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisgICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisgICAgICAgcmV0dXJuIHN0cGNweSAobmFtZSwgInNwc3IiKSArIDEgLSBuYW1lOworIAorKyAgICBjYXNlIDEyOToKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2ZpcSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMwOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3JfaXJxIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxMzE6CisrICAgICAgKnNldG5hbWUgPSAic3BlY2lhbCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgcmV0dXJuIHN0cGNweShuYW1lLCAic3Bzcl9hYnQiKSArIDEgLSBuYW1lOworKworKyAgICBjYXNlIDEzMjoKKysgICAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3VuZCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMzOgorKyAgICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIHJldHVybiBzdHBjcHkobmFtZSwgInNwc3Jfc3ZjIikgKyAxIC0gbmFtZTsKKysKKysgICAgY2FzZSAxNDQgLi4uIDE1MDoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX3VzciIsIHJlZ25vIC0gMTQ0ICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1MSAuLi4gMTU3OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfZmlxIiwgcmVnbm8gLSAxNTEgKyA4KSArIDE7CisrCisrICAgIGNhc2UgMTU4IC4uLiAxNTk6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9pcnEiLCByZWdubyAtIDE1OCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYwIC4uLiAxNjE6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9hYnQiLCByZWdubyAtIDE2MCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTYyIC4uLiAxNjM6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91bmQiLCByZWdubyAtIDE2MiArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTY0IC4uLiAxNjU6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF9zdmMiLCByZWdubyAtIDE2NCArIDEzKSArIDE7CisrCisrICAgIGNhc2UgMTkyIC4uLiAxOTk6CisrICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ2MnOworKyAgICAgIG5hbWVbMl0gPSByZWdubyAtIDE5MiArICcwJzsKKysgICAgICBuYW1lbGVuID0gMzsKKysgICAgICBicmVhazsKKysKKyAgICAgY2FzZSAyNTYgKyAwIC4uLiAyNTYgKyA5OgorKyAgICAgIC8qIFhYWCBUT0RPOiBOZW9uIGFsc28gdXNlcyB0aG9zZSByZWdpc3RlcnMgYW5kIGNhbiBjb250YWluCisrICAgICAgICogYm90aCBmbG9hdCBhbmQgaW50ZWdlcnMgKi8KKyAgICAgICAqc2V0bmFtZSA9ICJWRlAiOworICAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworICAgICAgICpiaXRzID0gNjQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvYXJtX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDYub3JpZy9iYWNrZW5kcy9hcm1fcmV0dmFsLmMJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9hcm1fcmV0dmFsLmMJMjAxMC0wNC0yNCAxMDoxMToxMy4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NSw2ICs0NSwxMyBAQAorICNkZWZpbmUgbmxvY19pbnRyZWcJMQorICNkZWZpbmUgbmxvY19pbnRyZWdzKG4pCSgyICogKG4pKQorIAorKy8qIGYxICAqLyAvKiBYWFggVE9ETzogZjAgY2FuIGFsc28gaGF2ZSBudW1iZXIgOTYgaWYgcHJvZ3JhbSB3YXMgY29tcGlsZWQgd2l0aCAtbWFiaT1hYXBjcyAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcxNiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKyAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0dXJlIGFuZCBpcyBhY3R1YWxseSBzdG9yZWQgaW4gc3RhY2sgc3BhY2UKKyAgICBwYXNzZWQgaW4gYSBoaWRkZW4gYXJndW1lbnQgYnkgdGhlIGNhbGxlci4gIEJ1dCwgdGhlIGNvbXBpbGVyCisgICAgaGVscGZ1bGx5IHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhhdCBzcGFjZSBpbiByMC4gICovCitAQCAtNTUsOCArNjIsOSBAQAorICNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorIAorIAorLWludAorLWFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKytzdGF0aWMgaW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwKKysJCSAgICAgICAgICAgIGludCBzb2Z0X2Zsb2F0KQorIHsKKyAgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisgICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KK0BAIC0xMDksMTQgKzExNywzMSBAQAorIAkgIGVsc2UKKyAJICAgIHJldHVybiAtMTsKKyAJfQorKyAgICAgIGlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJeworKwkgIER3YXJmX1dvcmQgZW5jb2Rpbmc7CisrCSAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkgICAgICAgICAgICAgICAgICAgICAgICZhdHRyX21lbSksICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysKKysJICBpZiAoKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkgJiYgIXNvZnRfZmxvYXQpCisrCSAgICB7CisrCSAgICAgICpsb2NwID0gbG9jX2ZwcmVnOworKwkgICAgICBpZiAoc2l6ZSA8PSA4KQorKwkJcmV0dXJuIG5sb2NfZnByZWc7CisrCSAgICAgIGdvdG8gYWdncmVnYXRlOworKwkgICAgfQorKwl9CisgICAgICAgaWYgKHNpemUgPD0gMTYpCisgCXsKKyAJaW50cmVnOgorIAkgICpsb2NwID0gbG9jX2ludHJlZzsKKyAJICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3MgKChzaXplICsgMykgLyA0KTsKKyAJfQorKyAgICAgIC8qIGZhbGwgdGhyb3VnaC4gKi8KKyAKKyAgICAgYWdncmVnYXRlOgorKyAgICAgIC8qIFhYWCBUT0RPIHNvbWV0aW1lcyBhZ2dyZWdhdGVzIGFyZSByZXR1cm5lZCBpbiByMCAoLW1hYmk9YWFwY3MpICovCisgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKyAKK0BAIC0xMzUsMyArMTYwLDE4IEBACisgICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworICAgcmV0dXJuIC0yOworIH0KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1tc29mdC1mbG9hdCAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbWhhcmQtZmxvYXQgKGN1cnJlbnQgZGVmYXVsdCkgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCitAQCAtMjI5MCw2ICsyMjkwLDkgQEAKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNQkweDA1MDAwMDAwCisgCisrLyogRUlfT1NBQkkgdmFsdWVzICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkgICAgNjQgICAgICAvKiBDb250YWlucyBzeW1ib2wgdmVyc2lvbmluZy4gKi8KKysKKyAvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworICNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCitAQCAtMjMwNywxMiArMjMxMCwxOSBAQAorIAorIC8qIFByb2Nlc3NvciBzcGVjaWZpYyB2YWx1ZXMgZm9yIHRoZSBQaGRyIHBfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBQVF9BUk1fRVhJRFgJCShQVF9MT1BST0MgKyAxKQkvKiBBUk0gdW53aW5kIHNlZ21lbnQuICAqLworKyNkZWZpbmUgUFRfQVJNX1VOV0lORAkJUFRfQVJNX0VYSURYCisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFNoZHIgc2hfdHlwZSBmaWVsZC4gICovCisgI2RlZmluZSBTSFRfQVJNX0VYSURYCQkoU0hUX0xPUFJPQyArIDEpIC8qIEFSTSB1bndpbmQgc2VjdGlvbi4gICovCisgI2RlZmluZSBTSFRfQVJNX1BSRUVNUFRNQVAJKFNIVF9MT1BST0MgKyAyKSAvKiBQcmVlbXB0aW9uIGRldGFpbHMuICAqLworICNkZWZpbmUgU0hUX0FSTV9BVFRSSUJVVEVTCShTSFRfTE9QUk9DICsgMykgLyogQVJNIGF0dHJpYnV0ZXMgc2VjdGlvbi4gICovCisgCisrLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIER5biBkX3RhZyBmaWVsZC4gICovCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQxCShEVF9MT1BST0MgKyAwKQorKyNkZWZpbmUgRFRfQVJNX1NZTVRBQlNaCQkoRFRfTE9QUk9DICsgMSkKKysjZGVmaW5lIERUX0FSTV9QUkVFTVRNQUIJKERUX0xPUFJPQyArIDIpCisrI2RlZmluZSBEVF9BUk1fUkVTRVJWRUQyCShEVF9MT1BST0MgKyAzKQorKyNkZWZpbmUgRFRfQVJNX05VTQkJNAorIAorIC8qIEFSTSByZWxvY3MuICAqLworIAorQEAgLTIzNDQsMTIgKzIzNTQsNzUgQEAKKyAjZGVmaW5lIFJfQVJNX0dPVFBDCQkyNQkvKiAzMiBiaXQgUEMgcmVsYXRpdmUgb2Zmc2V0IHRvIEdPVCAqLworICNkZWZpbmUgUl9BUk1fR09UMzIJCTI2CS8qIDMyIGJpdCBHT1QgZW50cnkgKi8KKyAjZGVmaW5lIFJfQVJNX1BMVDMyCQkyNwkvKiAzMiBiaXQgUExUIGFkZHJlc3MgKi8KKysjZGVmaW5lIFJfQVJNX0NBTEwJCTI4CisrI2RlZmluZSBSX0FSTV9KVU1QMjQJCTI5CisrI2RlZmluZSBSX0FSTV9USE1fSlVNUDI0CTMwCisrI2RlZmluZSBSX0FSTV9CQVNFX0FCUwkJMzEKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF83XzAJMzIKKyAjZGVmaW5lIFJfQVJNX0FMVV9QQ1JFTF8xNV84CTMzCisgI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMjNfMTUJMzQKKyAjZGVmaW5lIFJfQVJNX0xEUl9TQlJFTF8xMV8wCTM1CisgI2RlZmluZSBSX0FSTV9BTFVfU0JSRUxfMTlfMTIJMzYKKyAjZGVmaW5lIFJfQVJNX0FMVV9TQlJFTF8yN18yMAkzNworKyNkZWZpbmUgUl9BUk1fVEFSR0VUMQkJMzgKKysjZGVmaW5lIFJfQVJNX1NCUkVMMzEJCTM5CisrI2RlZmluZSBSX0FSTV9WNEJYCQk0MAorKyNkZWZpbmUgUl9BUk1fVEFSR0VUMgkJNDEKKysjZGVmaW5lIFJfQVJNX1BSRUwzMQkJNDIKKysjZGVmaW5lIFJfQVJNX01PVldfQUJTX05DCTQzCisrI2RlZmluZSBSX0FSTV9NT1ZUX0FCUwkJNDQKKysjZGVmaW5lIFJfQVJNX01PVldfUFJFTF9OQwk0NQorKyNkZWZpbmUgUl9BUk1fTU9WVF9QUkVMCQk0NgorKyNkZWZpbmUgUl9BUk1fVEhNX01PVldfQUJTX05DCTQ3CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9BQlMJNDgKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZXX1BSRUxfTkMJNDkKKysjZGVmaW5lIFJfQVJNX1RITV9NT1ZUX1BSRUwJNTAKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QMTkJNTEKKysjZGVmaW5lIFJfQVJNX1RITV9KVU1QNgkJNTIKKysjZGVmaW5lIFJfQVJNX1RITV9BTFVfUFJFTF8xMV8wCTUzCisrI2RlZmluZSBSX0FSTV9USE1fUEMxMgkJNTQKKysjZGVmaW5lIFJfQVJNX0FCUzMyX05PSQkJNTUKKysjZGVmaW5lIFJfQVJNX1JFTDMyX05PSQkJNTYKKysjZGVmaW5lIFJfQVJNX0FMVV9QQ19HMF9OQwk1NworKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cwCQk1OAorKyNkZWZpbmUgUl9BUk1fQUxVX1BDX0cxX05DCTU5CisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzEJCTYwCisrI2RlZmluZSBSX0FSTV9BTFVfUENfRzIJCTYxCisrI2RlZmluZSBSX0FSTV9MRFJfUENfRzEJCTYyCisrI2RlZmluZSBSX0FSTV9MRFJfUENfRzIJCTYzCisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cwCTY0CisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cxCTY1CisrI2RlZmluZSBSX0FSTV9MRFJTX1BDX0cyCTY2CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzAJCTY3CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzEJCTY4CisrI2RlZmluZSBSX0FSTV9MRENfUENfRzIJCTY5CisrI2RlZmluZSBSX0FSTV9BTFVfU0JfRzBfTkMJNzAKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMAkJNzEKKysjZGVmaW5lIFJfQVJNX0FMVV9TQl9HMV9OQwk3MgorKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cxCQk3MworKyNkZWZpbmUgUl9BUk1fQUxVX1NCX0cyCQk3NAorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cwCQk3NQorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cxCQk3NgorKyNkZWZpbmUgUl9BUk1fTERSX1NCX0cyCQk3NworKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMAk3OAorKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMQk3OQorKyNkZWZpbmUgUl9BUk1fTERSU19TQl9HMgk4MAorKyNkZWZpbmUgUl9BUk1fTERDX0cwCQk4MQorKyNkZWZpbmUgUl9BUk1fTERDX0cxCQk4MgorKyNkZWZpbmUgUl9BUk1fTERDX0cyCQk4MworKyNkZWZpbmUgUl9BUk1fTU9WV19CUkVMX05DCTg0CisrI2RlZmluZSBSX0FSTV9NT1ZUX0JSRUwJCTg1CisrI2RlZmluZSBSX0FSTV9NT1ZXX0JSRUwJCTg2CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19CUkVMX05DCTg3CisrI2RlZmluZSBSX0FSTV9USE1fTU9WVF9CUkVMCTg4CisrI2RlZmluZSBSX0FSTV9USE1fTU9WV19CUkVMCTg5CisrLyogOTAtOTMgdW5hbGxvY2F0ZWQgKi8KKysjZGVmaW5lIFJfQVJNX1BMVDMyX0FCUwkJOTQKKysjZGVmaW5lIFJfQVJNX0dPVF9BQlMJCTk1CisrI2RlZmluZSBSX0FSTV9HT1RfUFJFTAkJOTYKKysjZGVmaW5lIFJfQVJNX0dPVF9CUkVMMTIJOTcKKysjZGVmaW5lIFJfQVJNX0dPVE9GRjEyCQk5OAorKyNkZWZpbmUgUl9BUk1fR09UUkVMQVgJCTk5CisgI2RlZmluZSBSX0FSTV9HTlVfVlRFTlRSWQkxMDAKKyAjZGVmaW5lIFJfQVJNX0dOVV9WVElOSEVSSVQJMTAxCisgI2RlZmluZSBSX0FSTV9USE1fUEMxMQkJMTAyCS8qIHRodW1iIHVuY29uZGl0aW9uYWwgYnJhbmNoICovCitAQCAtMjM2NCw2ICsyNDM3LDEyIEBACisgCQkJCQkgICBzdGF0aWMgVExTIGJsb2NrIG9mZnNldCAqLworICNkZWZpbmUgUl9BUk1fVExTX0xFMzIJCTEwOAkvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIHN0YXRpYworIAkJCQkJICAgVExTIGJsb2NrICovCisrI2RlZmluZSBSX0FSTV9UTFNfTERPMTIJCTEwOQorKyNkZWZpbmUgUl9BUk1fVExTX0xFMTIJCTExMAorKyNkZWZpbmUgUl9BUk1fVExTX0lFMTJHUAkxMTEKKysvKiAxMTIgLSAxMjcgcHJpdmF0ZSByYW5nZSAqLworKyNkZWZpbmUgUl9BUk1fTUVfVE9PCQkxMjgJLyogb2Jzb2xldGUgKi8KKysKKyAjZGVmaW5lIFJfQVJNX1JYUEMyNQkJMjQ5CisgI2RlZmluZSBSX0FSTV9SU0JSRUwzMgkJMjUwCisgI2RlZmluZSBSX0FSTV9USE1fUlBDMjIJCTI1MQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9hcm0uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL2xpYmVibF9hcm0uaAkyMDEwLTA0LTI0IDEwOjExOjEzLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0FSTV9ICisrI2RlZmluZSBfTElCRUJMX0FSTV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYWRkaXRpb25zLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYWE3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2FkZGl0aW9ucy5kaWZmCkBAIC0wLDAgKzEsNzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTM6NTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MjI6NDMuMDAwMDAwMDAwICswMDAwCitAQCAtMTQzLDYgKzE0Myw3IEBACisgI2RlZmluZSBFTEZPU0FCSV9IUFVYCQkxCS8qIEhQLVVYICovCisgI2RlZmluZSBFTEZPU0FCSV9ORVRCU0QJCTIJLyogTmV0QlNELiAgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX0xJTlVYCQkzCS8qIExpbnV4LiAgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0hVUkQJCTQJLyogR05VL0h1cmQgKi8KKyAjZGVmaW5lIEVMRk9TQUJJX1NPTEFSSVMJNgkvKiBTdW4gU29sYXJpcy4gICovCisgI2RlZmluZSBFTEZPU0FCSV9BSVgJCTcJLyogSUJNIEFJWC4gICovCisgI2RlZmluZSBFTEZPU0FCSV9JUklYCQk4CS8qIFNHSSBJcml4LiAgKi8KK0BAIC0xNTAsOCArMTUxLDEzIEBACisgI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogQ29tcGFxIFRSVTY0IFVOSVguICAqLworICNkZWZpbmUgRUxGT1NBQklfTU9ERVNUTwkxMQkvKiBOb3ZlbGwgTW9kZXN0by4gICovCisgI2RlZmluZSBFTEZPU0FCSV9PUEVOQlNECTEyCS8qIE9wZW5CU0QuICAqLworKyNkZWZpbmUgRUxGT1NBQklfT1BFTlZNUwkxMwkvKiBPcGVuVk1TICovCisrI2RlZmluZSBFTEZPU0FCSV9OU0sJCTE0CS8qIEhld2xldHQtUGFja2FyZCBOb24tU3RvcCBLZXJuZWwgKi8KKysjZGVmaW5lIEVMRk9TQUJJX0FST1MJCTE1CS8qIEFtaWdhIFJlc2VhcmNoIE9TICovCisrLyogNjQtMjU1IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2YWx1ZSByYW5nZSAqLworICNkZWZpbmUgRUxGT1NBQklfQVJNX0FFQUJJCTY0CS8qIEFSTSBFQUJJICovCisgI2RlZmluZSBFTEZPU0FCSV9BUk0JCTk3CS8qIEFSTSAqLworKy8qIFRoaXMgaXMgZGVwcmVjYXRlZD8gSXQncyBub3QgaW4gdGhlIGxhdGVzdCB2ZXJzaW9uIGFueW1vcmUuICovCisgI2RlZmluZSBFTEZPU0FCSV9TVEFOREFMT05FCTI1NQkvKiBTdGFuZGFsb25lIChlbWJlZGRlZCkgYXBwbGljYXRpb24gKi8KKyAKKyAjZGVmaW5lIEVJX0FCSVZFUlNJT04JOAkJLyogQUJJIHZlcnNpb24gKi8KK0BAIC0yMDYsNyArMjEyLDcgQEAKKyAjZGVmaW5lIEVNX0g4XzMwMEgJNDcJCS8qIEhpdGFjaGkgSDgvMzAwSCAqLworICNkZWZpbmUgRU1fSDhTCQk0OAkJLyogSGl0YWNoaSBIOFMgKi8KKyAjZGVmaW5lIEVNX0g4XzUwMAk0OQkJLyogSGl0YWNoaSBIOC81MDAgKi8KKy0jZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBNZXJjZWQgKi8KKysjZGVmaW5lIEVNX0lBXzY0CTUwCQkvKiBJbnRlbCBJQTY0ICovCisgI2RlZmluZSBFTV9NSVBTX1gJNTEJCS8qIFN0YW5mb3JkIE1JUFMtWCAqLworICNkZWZpbmUgRU1fQ09MREZJUkUJNTIJCS8qIE1vdG9yb2xhIENvbGRmaXJlICovCisgI2RlZmluZSBFTV82OEhDMTIJNTMJCS8qIE1vdG9yb2xhIE02OEhDMTIgKi8KK0BAIC0yMjAsNyArMjI2LDggQEAKKyAjZGVmaW5lIEVNX1RJTllKCTYxCQkvKiBBZHZhbmNlZCBMb2dpYyBDb3JwLiBUaW55aiBlbWIuZmFtKi8KKyAjZGVmaW5lIEVNX1g4Nl82NAk2MgkJLyogQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUgKi8KKyAjZGVmaW5lIEVNX1BEU1AJCTYzCQkvKiBTb255IERTUCBQcm9jZXNzb3IgKi8KKy0KKysjZGVmaW5lCUVNX1BEUDEwCTY0CQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTAgKi8KKysjZGVmaW5lIEVNX1BEUDExCTY1CQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTEgKi8KKyAjZGVmaW5lIEVNX0ZYNjYJCTY2CQkvKiBTaWVtZW5zIEZYNjYgbWljcm9jb250cm9sbGVyICovCisgI2RlZmluZSBFTV9TVDlQTFVTCTY3CQkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1Q5KyA4LzE2IG1jICovCisgI2RlZmluZSBFTV9TVDcJCTY4CQkvKiBTVG1pY3JvZWxlY3Ryb25pY3MgU1Q3IDggYml0IG1jICovCitAQCAtMjUwLDcgKzI1NywyMiBAQAorICNkZWZpbmUgRU1fT1BFTlJJU0MJOTIJCS8qIE9wZW5SSVNDIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyAjZGVmaW5lIEVNX0FSQ19BNQk5MwkJLyogQVJDIENvcmVzIFRhbmdlbnQtQTUgKi8KKyAjZGVmaW5lIEVNX1hURU5TQQk5NAkJLyogVGVuc2lsaWNhIFh0ZW5zYSBBcmNoaXRlY3R1cmUgKi8KKy0jZGVmaW5lIEVNX05VTQkJOTUKKysjZGVmaW5lCUVNX1ZJREVPQ09SRQk5NQkJLyogQWxwaGFtb3NhaWMgVmlkZW9Db3JlIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fVE1NX0dQUAk5NgkJLyogVGhvbXBzb24gTXVsdGltZWRpYSBHZW5lcmFsIFB1cnBvc2UgUHJvY2Vzc29yICovCisrI2RlZmluZQlFTV9OUzMySwk5NwkJLyogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciAzMjAwMCBzZXJpZXMgKi8KKysjZGVmaW5lCUVNX1RQQwkJOTgJCS8qIFRlbm9yIE5ldHdvcmsgVFBDIHByb2Nlc3NvciAqLworKyNkZWZpbmUJRU1fU05QMUsJOTkJCS8qIFRyZWJpYSBTTlAgMTAwMCBwcm9jZXNzb3IgKi8KKysjZGVmaW5lCUVNX1NUMjAwCTEwMAkJLyogU1RNaWNyb2VsZWN0cm9uaWNzICh3d3cuc3QuY29tKSBTVDIwMCBtaWNyb2NvbnRyb2xsZXIgKi8KKysjZGVmaW5lIEVNX0lQMksgICAgICAgICAxMDEJCS8qIFViaWNvbSBJUDJYWFggbWljcm9jb250cm9sbGVyIGZhbWlseSAqLworKyNkZWZpbmUJRU1fTUFYCQkxMDIJCS8qIE1BWCBQcm9jZXNzb3IgKi8KKysjZGVmaW5lIEVNX0NSICAgICAgICAgICAxMDMJCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29tcGFjdFJJU0MgKi8KKysjZGVmaW5lCUVNX0YyTUMxNgkxMDQJCS8qIEZ1aml0c3UgRjJNQzE2ICovCisrI2RlZmluZSBFTV9NU1A0MzAgICAgICAgMTA1CQkvKiBUSSBtc3A0MzAgbWljcm8gY29udHJvbGxlciAqLworKyNkZWZpbmUgRU1fQkxBQ0tGSU4gICAgIDEwNgkJLyogQW5hbG9nIERldmljZXMgQmxhY2tmaW4gKERTUCkgcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9TRV9DMzMJMTA3CQkvKiBTMUMzMyBGYW1pbHkgb2YgU2Vpa28gRXBzb24gcHJvY2Vzc29ycyAqLworKyNkZWZpbmUJRU1fU0VQCQkxMDgJCS8qIFNoYXJwIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yICovCisrI2RlZmluZSBFTV9BUkNBCQkxMDkJCS8qIEFyY2EgUklTQyBNaWNyb3Byb2Nlc3NvciAqLworKyNkZWZpbmUgRU1fTlVNCQkxMTAKKyAKKyAvKiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gYXNzaWduIG5ldyB1bm9mZmljaWFsIEVNXyogdmFsdWVzLCBwbGVhc2UKKyAgICBwaWNrIGxhcmdlIHJhbmRvbSBudW1iZXJzICgweDg1MjMsIDB4YTdmMiwgZXRjLikgdG8gbWluaW1pemUgdGhlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmX2JlZ2luLmMtQ1ZFLTIwMTQtOTQ0Ny1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlOGRkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZfYmVnaW4uYy1DVkUtMjAxNC05NDQ3LWZpeC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitGcm9tIDMyM2NhMDRhMGM5MTg5NTQ0MDc1YzE5YjQ5ZGE2N2Y2NDQzYTg5NTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBXZWQsIDIxIEphbiAyMDE1IDA5OjMzOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGVsZl9iZWdpbi5jOiBDVkUtMjAxNC05NDQ3IGZpeAorCit0aGlzIHBhdGNoIGlzIGZyb206CisgaHR0cHM6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9jZ2l0L2VsZnV0aWxzLmdpdC9jb21taXQvP2lkPTE0NzAxOGU3MjllN2MyMmVlYWJmMTViODJkMjZlNGJmNjhhMGQxOGUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBsaWJlbGYvZWxmX2JlZ2luLmMgfCA3ICsrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZl9iZWdpbi5jIGIvbGliZWxmL2VsZl9iZWdpbi5jCitpbmRleCBlNDZhZGQzLi5lODNiYTM1IDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZl9iZWdpbi5jCisrKysgYi9saWJlbGYvZWxmX2JlZ2luLmMKK0BAIC03MzYsMTEgKzczNiw4IEBAIHJlYWRfbG9uZ19uYW1lcyAoRWxmICplbGYpCisgCSAgICBicmVhazsKKyAKKyAJICAvKiBOVUwtdGVybWluYXRlIHRoZSBzdHJpbmcuICAqLworLQkgICpydW5wID0gJ1wwJzsKKy0KKy0JICAvKiBTa2lwIHRoZSBOVUwgYnl0ZSBhbmQgdGhlIFwwMTIuICAqLworLQkgIHJ1bnAgKz0gMjsKKy0KKysJICAqcnVucCsrID0gJ1wwJzsKKysgCisgCSAgLyogQSBzYW5pdHkgY2hlY2suICBTb21lYm9keSBtaWdodCBoYXZlIGdlbmVyYXRlZCBpbnZhbGlkCisgCSAgICAgYXJjaGl2ZS4gICovCisgCSAgaWYgKHJ1bnAgPj0gbmV3cCArIGxlbikKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtYXItYy1maXgtbnVtLXBhc3NlZC10by1tZW1zZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxOTYxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2FyLmMgKGRvX29wZXJfZGVsZXRlKTogRml4IG51bSBwYXNzZWQgdG8gbWVtc2V0CituYXRpdmUgYnVpbGQgZmFpbGVkIGFzIGZvbGxvd2luZyBvbiBGZWRvcmExOCs6IAorYXIuYzogSW4gZnVuY3Rpb24gJ2RvX29wZXJfZGVsZXRlJzoKK2FyLmM6OTE4OjMxOiBlcnJvcjogYXJndW1lbnQgdG8gJ3NpemVvZicgaW4gJ21lbXNldCcgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbjsgZGlkIHlvdSBtZWFuIHRvIGRlcmVmZXJlbmNlIGl0PyBbLVdlcnJvcj1zaXplb2YtcG9pbnRlci1tZW1hY2Nlc3NdCisgICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGZvdW5kKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK1RoZSBvcmlnaW5hbCBjb21taXQgaXMgaHR0cDovL2dpdC5mZWRvcmFob3N0ZWQub3JnL2NnaXQvZWxmdXRpbHMuZ2l0L2NvbW1pdC9zcmMvYXIuYz9pZD0xYTRkMDY2OGQxOGJmMTA5MGM1YzA4Y2RiNWNiM2JhMmI4ZWI1NDEwCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5odWEgTHVvIDx6aGVuaHVhLmx1b0BmcmVlc2NhbGUuY29tPgorCistLS0gZWxmdXRpbHMtMC4xNDgvc3JjL2FyLmMub3JnCTIwMTMtMDMtMTIgMjE6MTI6MTcuOTI4MjgxMzc1IC0wNTAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FyLmMJMjAxMy0wMy0xMiAyMToxNTozMC4wNTMyODUyNzEgLTA1MDAKK0BAIC05MTUsNyArOTE1LDcgQEAKKyAJCWxvbmcgaW50IGluc3RhbmNlKQorIHsKKyAgIGJvb2wgKmZvdW5kID0gYWxsb2NhIChzaXplb2YgKGJvb2wpICogYXJnYyk7CistICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGZvdW5kKSk7CisrICBtZW1zZXQgKGZvdW5kLCAnXDAnLCBzaXplb2YgKGJvb2wpICogYXJnYyk7CisgCisgICAvKiBMaXN0IG9mIHRoZSBmaWxlcyB3ZSBrZWVwLiAgKi8KKyAgIHN0cnVjdCBhcm1lbSAqdG9fY29weSA9IE5VTEw7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZWxmdXRpbHMtZnNpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmMzUzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9lbGZ1dGlscy1mc2l6ZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1RoZSBFTEZfVF9MSUIgYW5kIEVMRl9UX0dOVUhBU0ggc2l6ZXMgd2VyZSBtaXNzaW5nIGZyb20gZnNpemUgdGFibGUuCisKK1RoaXMgY291bGQgY2F1c2UgYSBmYWlsdXJlIGluIHRoZSBlbGYqX3hsYXRldG9mIGZ1bmN0aW9uLgorCitkaWZmIC11ciBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9leHR0eXBlcy5oIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9leHR0eXBlcy5oCistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZXh0dHlwZXMuaAkyMDA5LTAxLTA4IDEyOjU2OjM3LjAwMDAwMDAwMCAtMDgwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9leHR0eXBlcy5oCTIwMTAtMDgtMTggMTQ6MDA6MzMuMDAwMDAwMDAwIC0wNzAwCitAQCAtOTQsNiArOTQsNyBAQAorIFZlcm5hdXgzMiAoRXh0Xyk7CisgU3ltaW5mbzMyIChFeHRfKTsKKyBNb3ZlMzIgKEV4dF8pOworK0xpYjMyIChFeHRfKTsKKyBhdXh2X3QzMiAoRXh0Xyk7CisgCisgRWhkcjY0IChFeHRfKTsKK0BAIC0xMTAsNiArMTExLDcgQEAKKyBWZXJuYXV4NjQgKEV4dF8pOworIFN5bWluZm82NCAoRXh0Xyk7CisgTW92ZTY0IChFeHRfKTsKKytMaWI2NCAoRXh0Xyk7CisgYXV4dl90NjQgKEV4dF8pOworIAorICN1bmRlZiBTVEFSVAorZGlmZiAtdXIgZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9mc2l6ZS5jIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2ZzaXplLmMKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2ZzaXplLmMJMjAwOS0wMS0wOCAxMjo1NjozNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9mc2l6ZS5jCTIwMTAtMDgtMTggMTQ6MTE6NTcuMDAwMDAwMDAwIC0wNzAwCitAQCAtODcsNyArODcsOSBAQAorICAgICAgIFtFTEZfVF9OSERSXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X05oZHIpKSwJCSAgICAgIFwKKyAgICAgICBbRUxGX1RfU1lNSU5GT10JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9TeW1pbmZvKSksCSAgICAgIFwKKyAgICAgICBbRUxGX1RfTU9WRV0JPSBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsIEV4dF9Nb3ZlKSksCQkgICAgICBcCistICAgICAgW0VMRl9UX0FVWFZdCT0gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLCBFeHRfYXV4dl90KSkKKysgICAgICBbRUxGX1RfTElCXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X0xpYikpLAkJICAgICAgXAorKyAgICAgIFtFTEZfVF9BVVhWXQk9IHNpemVvZiAoRWxmVzIoTElCRUxGQklUUywgRXh0X2F1eHZfdCkpLAkgICAgICBcCisrICAgICAgW0VMRl9UX0dOVUhBU0hdCT0gRUxGVzIoTElCRUxGQklUUywgRlNaX1dPUkQpCisgICAgICAgVFlQRV9TSVpFUyAoMzIpCisgICAgIH0sCisgICAgIFtFTEZDTEFTUzY0IC0gMV0gPSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4LWJ1aWxkLWdjYy00LjgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyODY5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9maXgtYnVpbGQtZ2NjLTQuOC5wYXRjaApAQCAtMCwwICsxLDU3IEBACitUaGlzIHBhdGNoIGZpeGVzIGEgd2FybmluZyBzZWVuIHdpdGggZ2NjIDQuOCAoZXNwZWNpYWxseSBvbiB1YnVudHUgMTMuMTApCisKK3wgYWRkcjJsaW5lLmM6IEluIGZ1bmN0aW9uICdoYW5kbGVfYWRkcmVzcyc6Cit8IGFkZHIybGluZS5jOjQ1MDo3OiBlcnJvcjogZm9ybWF0ICclYScgZXhwZWN0cyBhcmd1bWVudCBvZiB0eXBlICdmbG9hdCAqJywgYnV0IGFyZ3VtZW50IDMgaGFzIHR5cGUgJ2NoYXIgKionIFstV2Vycm9yPWZvcm1hdD1dCit8ICAgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJWFbXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorfCAgICAgICAgXgorfCBhZGRyMmxpbmUuYzo0NTM6NzogZXJyb3I6IGZvcm1hdCAnJWEnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnZmxvYXQgKicsIGJ1dCBhcmd1bWVudCAzIGhhcyB0eXBlICdjaGFyICoqJyBbLVdlcnJvcj1mb3JtYXQ9XQorfCAgICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorfCAgICAgICAgXgorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworCisKKyVhIGlzIG9sZCBHTlUgc3R5bGUgYW5kIHNob3VsZCBiZSBhYmFuZG9uZWQgaW4gZmF2b3Igb2YgJW0KKworQWxzbyBzZWUKKworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NDM2MQorCit0byBzdXBwb3J0IHRoaXMgYXNzZXJ0aW9uCisKK1RoaXMgcGF0Y2ggaXMgYWRkZWQgdmlhIHJlZGhhdC1jb21wYXRpYmlsaXR5IHBhdGNoIHNvIGxldHMgcmV2ZXJ0IHRoaXMgcGFydAoraGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDYXVzZWQgYnkgYW4gZWFybGllciBwYXRjaF0KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2FkZHIybGluZS5jCTIwMTMtMDktMjMgMTc6NDY6NDUuNTEzNTg2NTM4IC0wNzAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2FkZHIybGluZS5jCTIwMTMtMDktMjMgMTc6NDY6NDYuMzI5NTg2NTU4IC0wNzAwCitAQCAtNDQ3LDEwICs0NDcsMTAgQEAKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVtW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJWFbXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL2xpbmUyYWRkci5jCTIwMTMtMDktMjMgMTc6NDY6NDUuNTIxNTg2NTM4IC0wNzAwCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvbGluZTJhZGRyLmMJMjAxMy0wOS0yMyAxNzo0Njo0Ni4zMjk1ODY1NTggLTA3MDAKK0BAIC0xMzIsNyArMTMyLDcgQEAKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvZml4X2Zvcl9nY2MtNC43LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDYzNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaApAQCAtMCwwICsxLDczIEBACitVcHN0cmVhbS1TdGF0dXM6IHBlbmRpbmcKK2djYyA0LjcgZG9lcyBub3QgbGlrZSBwb2ludGVyIGNvbnZlcnNpb24sIHNvIGhhdmUgYSB2b2lkICogdG1wIHZhciB0byB3b3JrIAorYXJvdW5kIGZvbGxvd2luZyBjb21waWxhdGlvbiBpc3N1ZS4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDcvMDcKKworfCBtZDUuYzogSW4gZnVuY3Rpb24gJ21kNV9maW5pc2hfY3R4JzoKK3wgbWQ1LmM6MTA4OjM6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHR5cGUtcHVubmVkIHBvaW50ZXIgd2lsbCBicmVhayBzdHJpY3QtYWxpYXNpbmcgcnVsZXMgWy1XZXJyb3I9c3RyaWN0LWFsaWFzaW5nXQorfCBtZDUuYzoxMDk6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW21kNS5vXSBFcnJvciAxCit8IG1ha2VbMl06ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCit8IHNoYTEuYzogSW4gZnVuY3Rpb24gJ3NoYTFfZmluaXNoX2N0eCc6Cit8IHNoYTEuYzoxMDk6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IHNoYTEuYzoxMTE6MzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgdHlwZS1wdW5uZWQgcG9pbnRlciB3aWxsIGJyZWFrIHN0cmljdC1hbGlhc2luZyBydWxlcyBbLVdlcnJvcj1zdHJpY3QtYWxpYXNpbmddCit8IGNjMTogYWxsIHdhcm5pbmdzIGJlaW5nIHRyZWF0ZWQgYXMgZXJyb3JzCit8IAorfCBtYWtlWzJdOiAqKiogW3NoYTEub10gRXJyb3IgMQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL21kNS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWIvbWQ1LmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvbWQ1LmMKK0BAIC05NSw2ICs5NSw3IEBAIG1kNV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIC8qIFRha2UgeWV0IHVucHJvY2Vzc2VkIGJ5dGVzIGludG8gYWNjb3VudC4gICovCisgICBtZDVfdWludDMyIGJ5dGVzID0gY3R4LT5idWZsZW47CisgICBzaXplX3QgcGFkOworKyAgdm9pZCAqIHRtcDsKKyAKKyAgIC8qIE5vdyBjb3VudCByZW1haW5pbmcgYnl0ZXMuICAqLworICAgY3R4LT50b3RhbFswXSArPSBieXRlczsKK0BAIC0xMDUsOSArMTA2LDEwIEBAIG1kNV9maW5pc2hfY3R4IChjdHgsIHJlc2J1ZikKKyAgIG1lbWNweSAoJmN0eC0+YnVmZmVyW2J5dGVzXSwgZmlsbGJ1ZiwgcGFkKTsKKyAKKyAgIC8qIFB1dCB0aGUgNjQtYml0IGZpbGUgbGVuZ3RoIGluICpiaXRzKiBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICAqLworLSAgKihtZDVfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF0gPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworLSAgKihtZDVfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfAorLQkJCQkJCQkoY3R4LT50b3RhbFswXSA+PiAyOSkpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXTsKKysgICoobWQ1X3VpbnQzMiAqKSB0bXAgPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworKyAgdG1wID0gJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkICsgNF07CisrICAqKG1kNV91aW50MzIgKikgdG1wID0gU1dBUCAoKGN0eC0+dG90YWxbMV0gPDwgMykgfCAoY3R4LT50b3RhbFswXSA+PiAyOSkpOworIAorICAgLyogUHJvY2VzcyBsYXN0IGJ5dGVzLiAgKi8KKyAgIG1kNV9wcm9jZXNzX2Jsb2NrIChjdHgtPmJ1ZmZlciwgYnl0ZXMgKyBwYWQgKyA4LCBjdHgpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYi9zaGExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9zaGExLmMKKysrKyBlbGZ1dGlscy0wLjE0OC9saWIvc2hhMS5jCitAQCAtOTYsNiArOTYsNyBAQCBzaGExX2ZpbmlzaF9jdHggKGN0eCwgcmVzYnVmKQorICAgLyogVGFrZSB5ZXQgdW5wcm9jZXNzZWQgYnl0ZXMgaW50byBhY2NvdW50LiAgKi8KKyAgIHNoYTFfdWludDMyIGJ5dGVzID0gY3R4LT5idWZsZW47CisgICBzaXplX3QgcGFkOworKyAgdm9pZCAqIHRtcDsKKyAKKyAgIC8qIE5vdyBjb3VudCByZW1haW5pbmcgYnl0ZXMuICAqLworICAgY3R4LT50b3RhbFswXSArPSBieXRlczsKK0BAIC0xMDYsOSArMTA3LDEwIEBAIHNoYTFfZmluaXNoX2N0eCAoY3R4LCByZXNidWYpCisgICBtZW1jcHkgKCZjdHgtPmJ1ZmZlcltieXRlc10sIGZpbGxidWYsIHBhZCk7CisgCisgICAvKiBQdXQgdGhlIDY0LWJpdCBmaWxlIGxlbmd0aCBpbiAqYml0cyogYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAgKi8KKy0gICooc2hhMV91aW50MzIgKikgJmN0eC0+YnVmZmVyW2J5dGVzICsgcGFkXSA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwKKy0JCQkJCQkgICAgIChjdHgtPnRvdGFsWzBdID4+IDI5KSk7CistICAqKHNoYTFfdWludDMyICopICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdID0gU1dBUCAoY3R4LT50b3RhbFswXSA8PCAzKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZF07CisrICAqKHNoYTFfdWludDMyICopIHRtcCA9IFNXQVAgKChjdHgtPnRvdGFsWzFdIDw8IDMpIHwgKGN0eC0+dG90YWxbMF0gPj4gMjkpKTsKKysgIHRtcCA9ICZjdHgtPmJ1ZmZlcltieXRlcyArIHBhZCArIDRdOworKyAgKihzaGExX3VpbnQzMiAqKSB0bXAgPSBTV0FQIChjdHgtPnRvdGFsWzBdIDw8IDMpOworIAorICAgLyogUHJvY2VzcyBsYXN0IGJ5dGVzLiAgKi8KKyAgIHNoYTFfcHJvY2Vzc19ibG9jayAoY3R4LT5idWZmZXIsIGJ5dGVzICsgcGFkICsgOCwgY3R4KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZiOTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2hwcGFfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsODAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX2luaXQuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw3NCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIFBBLVJJU0Mgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAyLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9QQVJJU0NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysjaW5jbHVkZSAibGliZWJsX3BhcmlzYy5oIgorKworKy8qIFRoaXMgZGVmaW5lcyB0aGUgY29tbW9uIHJlbG9jIGhvb2tzIGJhc2VkIG9uIHBhcmlzY19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2NfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGlmIChlbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysgICAgaWYgKGVoZHIgJiYgKGVoZHItPmVfZmxhZ3MgJiBFRl9QQVJJU0NfV0lERSkpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAiUEEtUklTQyI7CisrICBwYXJpc2NfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCBtYWNoaW5lX2ZsYWdfY2hlY2spOworKyAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHNlZ21lbnRfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWN0aW9uX3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrICBpZiAocGE2NCkKKysgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQ7CisrICBlbHNlCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDE1OSBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBQQS1SSVNDIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK3BhcmlzY19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCwgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysgIGludCBwYTY0ID0gMDsKKysKKysgIGlmIChlYmwtPmVsZikgeworKyAgICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICAgIEdFbGZfRWhkciAqZWhkciA9IGdlbGZfZ2V0ZWhkciAoZWJsLT5lbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpCisrICAgICAgcGE2NCA9IDE7CisrICB9CisrCisrICBpbnQgbnJlZ3MgPSBwYTY0ID8gMTI3IDogMTI4OworKworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIG5yZWdzOworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+PSBucmVncyB8fCBuYW1lbGVuIDwgNikKKysgICAgcmV0dXJuIC0xOworKworKyAgKnByZWZpeCA9ICIlIjsKKysKKysgIGlmIChyZWdubyA8IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gMzIpCisrICB7CisrICAgICpzZXRuYW1lID0gInNwZWNpYWwiOworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY7CisrICAgIH0KKysgICAgZWxzZQorKyAgICB7CisrICAgIAkqYml0cyA9IDU7CisrICAgIH0KKysgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICB9CisrICBlbHNlCisrICB7CisrICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICBpZiAocGE2NCkKKysgICAgeworKwkqYml0cyA9IDY0OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSAzMjsKKysgICAgfQorKyAgfQorKworKyAgaWYgKHJlZ25vIDwgMzMpIHsKKysgICAgc3dpdGNoIChyZWdubykKKysgICAgICB7CisrICAgICAgY2FzZSAwIC4uLiA5OgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAyOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAxMCAuLi4gMzE6CisrICAgICAgICBuYW1lWzBdID0gJ3InOworKyAgICAgICAgbmFtZVsxXSA9IHJlZ25vIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzJdID0gcmVnbm8gJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSAzMjoKKysJKnByZWZpeCA9IE5VTEw7CisrCW5hbWVbMF0gPSAnUyc7CisrCW5hbWVbMV0gPSAnQSc7CisrCW5hbWVbMl0gPSAnUic7CisrCW5hbWVsZW4gPSAzOworKwlicmVhazsKKysgICAgICB9CisrICB9CisrICBlbHNlIHsKKysgICAgaWYgKHBhNjQgJiYgKChyZWdubyAtIDcyKSAlIDIpKSB7CisrICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgNzIgKyAwIC4uLiA3MiArIDExOgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVszXSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBjYXNlIDcyICsgMTIgLi4uIDcyICsgNTU6CisrICAgICAgICBuYW1lWzBdID0gJ2YnOworKwluYW1lWzFdID0gJ3InOworKyAgICAgICAgbmFtZVsyXSA9IChyZWdubyArIDggLSA3MikgLyAyIC8gMTAgKyAnMCc7CisrICAgICAgICBuYW1lWzNdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgJSAxMCArICcwJzsKKysgICAgICAgIG5hbWVsZW4gPSA0OworKyAgICAgICAgaWYgKChyZWdubyArIDggLSA3MikgJSAyKSB7CisrCSAgbmFtZVs0XSA9ICdSJzsKKysJICBuYW1lbGVuKys7CisrICAgICAgICB9CisrICAgICAgICBicmVhazsKKysgICAgICBkZWZhdWx0OgorKyAgICAgICAgKnNldG5hbWUgPSBOVUxMOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgICAgfQorKyAgfQorKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9wYXJpc2NfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMjggQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBQQS1SSVNDLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKgkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChESVIyMUwsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE3RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNFIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoUENSRUwxNFIsCQlSRUx8RVhFQykKKytSRUxPQ19UWVBFIChEUFJFTDIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChEUFJFTDE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNERSLCAgICAgICAgICBSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjIxTCwJCVJFTCkKKytSRUxPQ19UWVBFIChMVE9GRjE0UiwJCVJFTCkKKytSRUxPQ19UWVBFIChETFRJTkQxNEYsCQkwKQorK1JFTE9DX1RZUEUgKFNFVEJBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwyMUwsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxN1IsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKFNFR0JBU0UsCQkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVE9GRjIxTCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNEYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIzMiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNFIsCTApCisrUkVMT0NfVFlQRSAoRlBUUjY0LAkJMCkKKytSRUxPQ19UWVBFIChQTEFCRUwzMiwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoUENSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwyMkMsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0V1IsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZXRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChESVI2NCwJCVJFTHxEWU4pCisrUkVMT0NfVFlQRSAoRElSMTRXUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNERSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2RiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNldGLAkJUkVMKQorK1JFTE9DX1RZUEUgKERJUjE2REYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR1BSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkY2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTZERiwJCTApCisrUkVMT0NfVFlQRSAoU0VDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNFdSLAkwKQorK1JFTE9DX1RZUEUgKEJBU0VSRUwxNERSLAkwKQorK1JFTE9DX1RZUEUgKFNFR1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkYsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFI2NCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX0ZQVFIxNkRGLAkwKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKElQTFQsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChFUExULAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDMyLAkJRFlOKQorK1JFTE9DX1RZUEUgKFRQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAyMUwsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNEYsCTApCisrUkVMT0NfVFlQRSAoVFBSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFA2NCwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNFdSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTREUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE2V0YsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkRGLAkwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwJRFlOKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwJRFlOKQorKworKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgICAgICAgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL3BhcmlzY19yZXR2YWwuYwkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwyMTMgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L1BBLVJJU0MgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiAlcjI4LCBvciBwYWlyICVyMjgsICVyMjkuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyOSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrCisrLyogJWZyNEwsIG9yIHBhaXIgJWZyNEwsICVmcjRSIG9uIHBhLTMyICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZzMyIDIKKysjZGVmaW5lIG5sb2NfZnByZWdwYWlyMzIgNAorKworKy8qICRmcjQgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDcyIH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworKyNpZiAwCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuIEFkZHJlc3Mgb2YgdGhlIGxvY2F0aW9uIGlzIHN0b3JlZAorKyAgIGluICVyMjggYmVmb3JlIGZ1bmN0aW9uIGNhbGwsIGJ1dCBpdCBtYXkgYmUgY2hhbmdlZCBieSBmdW5jdGlvbi4gKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysjZW5kaWYKKysKKytzdGF0aWMgaW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwgaW50IHBhNjQpCisreworKyAgRHdhcmZfV29yZCByZWdzaXplID0gcGE2NCA/IDggOiA0OworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUgfHwgdGFnID09IERXX1RBR19tdXRhYmxlX3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IDQ7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysJICAgIGlmIChlbmNvZGluZyA9PSBEV19BVEVfZmxvYXQpCisrCSAgICAgIHsKKysJCWlmIChwYTY0KSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnOworKwkJICBpZiAoc2l6ZSA8PSA4KQorKwkJICAgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCQl9CisrCQllbHNlIHsKKysJCSAgKmxvY3AgPSBsb2NfZnByZWczMjsKKysJCSAgaWYgKHNpemUgPD0gNCkKKysJCSAgICByZXR1cm4gbmxvY19mcHJlZzMyOworKwkJICBlbHNlIGlmIChzaXplIDw9IDgpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyMzI7CisrCQl9CisrCQlnb3RvIGFnZ3JlZ2F0ZTsKKysJICAgICAgfQorKwkgIH0KKysJaWYgKHBhNjQpCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gICovCisrICAgICAgfQorKworKyAgICBjYXNlIERXX1RBR19zdHJ1Y3R1cmVfdHlwZToKKysgICAgY2FzZSBEV19UQUdfY2xhc3NfdHlwZToKKysgICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZToKKysgICAgYWdncmVnYXRlOiB7CisrICAgICAgICBEd2FyZl9Xb3JkIHNpemU7CisrCWlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpICE9IDApCisrCSAgcmV0dXJuIC0xOworKwlpZiAocGE2NCkKKysgICAgICAgICAgKmxvY3AgPSBsb2NfaW50cmVnOworKwllbHNlCisrCSAgKmxvY3AgPSBsb2NfaW50cmVnMzI7CisrICAgICAgICBpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysgICAgICAgIGlmIChzaXplIDw9IDIgKiByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZ3BhaXI7CisrI2lmIDAKKysJLyogdGhlcmUgc2hvdWxkIGJlIHNvbWUgd2F5IHRvIGtub3cgdGhpcyBsb2NhdGlvbi4uLiBCdXQgSSBkbyBub3Qgc2VlIGl0LiAqLworKyAgICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgICAgcmV0dXJuIG5sb2NfYWdncmVnYXRlOworKyNlbmRpZgorKwkvKiBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworK2ludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICByZXR1cm4gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvcGFyaXNjX3N5bWJvbC5jCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDExMiBAQAorKy8qIFBBLVJJU0Mgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQlwYXJpc2NfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VnbWVudF90eXBlX25hbWUgKGludCBzZWdtZW50LCBjaGFyICpidWYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorKwkJCXNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIHN3aXRjaCAoc2VnbWVudCkKKysgICAgeworKyAgICBjYXNlIFBUX1BBUklTQ19BUkNIRVhUOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0FSQ0hFWFQiOworKyAgICBjYXNlIFBUX1BBUklTQ19VTldJTkQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfVU5XSU5EIjsKKysgICAgZGVmYXVsdDoKKysgICAgICBicmVhazsKKysgICAgfQorKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzeW1ib2wgdHlwZS4gICovCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3N5bWJvbF90eXBlX25hbWUoaW50IHN5bWJvbCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysgICAgc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKwlpZiAoc3ltYm9sID09IFNUVF9QQVJJU0NfTUlMTElDT0RFKQorKwkgIHJldHVybiAiUEFSSVNDX01JTExJIjsKKysJcmV0dXJuIE5VTEw7CisrfQorKworKy8qIFJldHVybiBzeW1ib2xpYyByZXByZXNlbnRhdGlvbiBvZiBzZWN0aW9uIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zZWN0aW9uX3R5cGVfbmFtZSAoaW50IHR5cGUsCisrCQkJY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBTSFRfUEFSSVNDX0VYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19FWFQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGNhc2UgU0hUX1BBUklTQ19ET0M6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRE9DIjsKKysgICAgfQorKworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIENoZWNrIHdoZXRoZXIgbWFjaGluZSBmbGFncyBhcmUgdmFsaWQuICAqLworK2Jvb2wKKytwYXJpc2NfbWFjaGluZV9mbGFnX2NoZWNrIChHRWxmX1dvcmQgZmxhZ3MpCisreworKyAgaWYgKGZsYWdzICZ+IChFRl9QQVJJU0NfVFJBUE5JTCB8IEVGX1BBUklTQ19FWFQgfCBFRl9QQVJJU0NfTFNCIHwKKysJRUZfUEFSSVNDX1dJREUgfCBFRl9QQVJJU0NfTk9fS0FCUCB8CisrCUVGX1BBUklTQ19MQVpZU1dBUCB8IEVGX1BBUklTQ19BUkNIKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBHRWxmX1dvcmQgYXJjaCA9IGZsYWdzICYgRUZfUEFSSVNDX0FSQ0g7CisrCisrICByZXR1cm4gKChhcmNoID09IEVGQV9QQVJJU0NfMV8wKSB8fCAoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMSkgfHwKKysgICAgICAoYXJjaCA9PSBFRkFfUEFSSVNDXzJfMCkpOworK30KKysKKysvKiBDaGVjayBmb3IgdGhlIHNpbXBsZSByZWxvYyB0eXBlcy4gICovCisrRWxmX1R5cGUKKytwYXJpc2NfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9QQVJJU0NfRElSNjQ6CisrICAgIGNhc2UgUl9QQVJJU0NfU0VDUkVMNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjMyOgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbGliZWJsX3BhcmlzYy5oCTIwMTAtMDQtMjQgMTA6MTA6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDkgQEAKKysjaWZuZGVmIF9MSUJFQkxfSFBQQV9ICisrI2RlZmluZSBfTElCRUJMX0hQUEFfSCAxCisrCisrI2luY2x1ZGUgPGxpYmR3Lmg+CisrCisrZXh0ZXJuIGludCBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzMyKER3YXJmX0RpZSAqLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApOworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl82NChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMDo0MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTI5LDExICsyOSwxMSBAQAorIAkgICAtSSQodG9wX3NyY2RpcikvbGliZWxmIC1JJCh0b3Bfc3JjZGlyKS9saWJkdworIAorIAorLW1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MAorK21vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBzcGFyYyBwcGMgcHBjNjQgczM5MCBwYXJpc2MKKyBsaWJlYmxfcGljID0gbGliZWJsX2kzODZfcGljLmEgbGliZWJsX3NoX3BpYy5hIGxpYmVibF94ODZfNjRfcGljLmEgXAorIAkgICAgIGxpYmVibF9pYTY0X3BpYy5hIGxpYmVibF9hbHBoYV9waWMuYSBsaWJlYmxfYXJtX3BpYy5hIFwKKyAJICAgICBsaWJlYmxfc3BhcmNfcGljLmEgbGliZWJsX3BwY19waWMuYSBsaWJlYmxfcHBjNjRfcGljLmEgXAorLQkgICAgIGxpYmVibF9zMzkwX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC05NSw2ICs5NSw5IEBACisgbGliZWJsX3MzOTBfcGljX2FfU09VUkNFUyA9ICQoczM5MF9TUkNTKQorIGFtX2xpYmVibF9zMzkwX3BpY19hX09CSkVDVFMgPSAkKHMzOTBfU1JDUzouYz0ub3MpCisgCisrcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworK2xpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisrYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2xpYmVsZi9lbGYuaAkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAkyMDEwLTA0LTI0IDEwOjEwOjUwLjAwMDAwMDAwMCArMDAwMAorQEAgLTE3ODksMTYgKzE3ODksMjQgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFdSCTE5CisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0RFIJMjAKKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMjFMCTI2CS8qIEdQLXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0UgkzOAkvKiBMVC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ETFRJTkQxNEYJMzkKKysjZGVmaW5lIFJfUEFSSVNDX1NFVEJBU0UJNDAKKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDIxTAk0MgorKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE3Ugk0MworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0Ugk0NgorICNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNEYJNTUKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRSCTYyCS8qIExULXJlbC4gZmN0IHB0ciwgcmlnaHQgMTQgYml0cy4gKi8KK0BAIC0xODA3LDYgKzE4MTUsNyBAQAorICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyQwk3MworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0RFIJNzYJLyogUEMgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KK0BAIC0xODMyLDYgKzE4NDEsOCBAQAorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2REYJMTAzCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFdSCTEwNworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0RFIJMTA4CisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUw2NAkxMTIJLyogNjQgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvaTM4Nl9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWNjMDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L2kzODZfZGlzLmgKQEAgLTAsMCArMSwxNjU3IEBACisjZGVmaW5lIE1ORU1PTklDX0JJVFMgMTAKKyNkZWZpbmUgU1VGRklYX0JJVFMgMworI2RlZmluZSBGQ1QxX0JJVFMgNworI2RlZmluZSBTVFIxX0JJVFMgNAorI2RlZmluZSBPRkYxXzFfQklUUyA3CisjZGVmaW5lIE9GRjFfMV9CSUFTIDMKKyNkZWZpbmUgT0ZGMV8yX0JJVFMgNworI2RlZmluZSBPRkYxXzJfQklBUyA0CisjZGVmaW5lIE9GRjFfM19CSVRTIDEKKyNkZWZpbmUgT0ZGMV8zX0JJQVMgNworI2RlZmluZSBGQ1QyX0JJVFMgNgorI2RlZmluZSBTVFIyX0JJVFMgMgorI2RlZmluZSBPRkYyXzFfQklUUyA3CisjZGVmaW5lIE9GRjJfMV9CSUFTIDUKKyNkZWZpbmUgT0ZGMl8yX0JJVFMgNworI2RlZmluZSBPRkYyXzJfQklBUyA0CisjZGVmaW5lIE9GRjJfM19CSVRTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJQVMgNworI2RlZmluZSBGQ1QzX0JJVFMgNAorI2RlZmluZSBTVFIzX0JJVFMgMQorI2RlZmluZSBPRkYzXzFfQklUUyA2CisjZGVmaW5lIE9GRjNfMV9CSUFTIDEwCisjZGVmaW5lIE9GRjNfMl9CSVRTIDEKKyNkZWZpbmUgT0ZGM18yX0JJQVMgMjEKKworI2luY2x1ZGUgPGkzODZfZGF0YS5oPgorCisjZGVmaW5lIHN1ZmZpeF9ub25lIDAKKyNkZWZpbmUgc3VmZml4X3cgMQorI2RlZmluZSBzdWZmaXhfdzAgMgorI2RlZmluZSBzdWZmaXhfVyAzCisjZGVmaW5lIHN1ZmZpeF90dHRuIDQKKyNkZWZpbmUgc3VmZml4X0QgNworI2RlZmluZSBzdWZmaXhfdzEgNQorI2RlZmluZSBzdWZmaXhfVzEgNgorCitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDFfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfTU9EJFJfTSwKKyAgRkNUX01vZCRSX20sCisgIEZDVF9hYnMsCisgIEZDVF9heCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kaXNwOCwKKyAgRkNUX2RzX2J4LAorICBGQ1RfZHNfc2ksCisgIEZDVF9keCwKKyAgRkNUX2VzX2RpLAorICBGQ1RfZnJlZywKKyAgRkNUX2ltbSRzLAorICBGQ1RfaW1tJHcsCisgIEZDVF9pbW0xNiwKKyAgRkNUX2ltbTgsCisgIEZDVF9pbW1zOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQxNnJfbSwKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCQ4cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnMTYsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3JlbCwKKyAgRkNUX3NlbCwKKyAgRkNUX3NyZWcyLAorICBGQ1Rfc3JlZzMsCisgIEZDVF9zdHJpbmcsCisgIEZDVF94bW1yZWcsCit9Oworc3RhdGljIGNvbnN0IGNoYXIgb3AxX3N0cltdID0KKyAgIiVheFwwIgorICAiJWNsXDAiCisgICIlZWF4XDAiCisgICIlc3RcMCIKKyAgIiV4bW0wXDAiCisgICIqIjsKK3N0YXRpYyBjb25zdCB1aW50OF90IG9wMV9zdHJfaWR4W10gPSB7CisgIDAsCisgIDQsCisgIDgsCisgIDEzLAorICAxNywKKyAgMjMsCit9Oworc3RhdGljIGNvbnN0IG9wZmN0X3Qgb3AyX2ZjdFtdID0KK3sKKyAgTlVMTCwKKyAgRkNUX01PRCRSX00sCisgIEZDVF9Nb2QkUl9tLAorICBGQ1RfYWJzLAorICBGQ1RfYWJzdmFsLAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2RzX3NpLAorICBGQ1RfZHgsCisgIEZDVF9lc19kaSwKKyAgRkNUX2ZyZWcsCisgIEZDVF9pbW04LAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJDY0cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX21vZGEkcl9tLAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMl9zdHJbXSA9CisgICIlZWN4XDAiCisgICIlc3QiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AyX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNSwKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDNfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDNfc3RyW10gPQorICAiJWVkeCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDNfc3RyX2lkeFtdID0geworICAwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zdHJfZW5jIGluc3RydGFiW10gPQoreworICB7IC5tbmVtb25pYyA9IE1ORV9hYWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWFtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hYXMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzdWJwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYXJwbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ib3VuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic2YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Jzd2FwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbHRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNleGl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Ntb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZzhiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jcHVpZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0ZHEycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwZDJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RhYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGFzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFicywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnRzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsZzIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxuMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkeiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZjJ4bTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnBhdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHRyYWN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeHAxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3FydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJuZGludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNjYWxlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkY3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0ZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVscCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZibGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zic3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9md2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5jbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZudSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMiwgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjIsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZybCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZnJlZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuaW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHB0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9obHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lucywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnRvLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zd2FwZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmxwZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaXJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDYsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGVhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZnMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGdzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xnZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAyLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xpZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAyLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xsZHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xtc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvY2ssIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvZHMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb29wZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcG5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sc2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2x0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDcsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzYmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3dsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnpibCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6d2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbmVnLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF1c2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wY250LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX291dCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0cywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2hmLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZG1zciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmRwbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkdHNjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9sLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc20sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zY2FzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NocmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMiwgLnN0cjMgPSAwLCAub2ZmM18xID0gNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2FsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1sYXVuY2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVzdW1lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXhvZmYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtcmVhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXdyaXRlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NnZHRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb25pdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNCwgLnN0cjMgPSAxLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX213YWl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSAzLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDEsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NpZHRsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG9zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VkMmEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3diaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2hudGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd3Jtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hsYXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkbXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0bXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNsZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzaGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2dldHNlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tscWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxMnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE4LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2xlYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9uLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZmx1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnNlcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3VzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR2YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhtaW5wb3N1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKK307CitzdGF0aWMgY29uc3QgdWludDhfdCBtYXRjaF9kYXRhW10gPQoreworICAweDExLCAweDM3LAorICAweDIyLCAweGQ1LCAweGEsCisgIDB4MjIsIDB4ZDQsIDB4YSwKKyAgMHgxMSwgMHgzZiwKKyAgMHgxLCAweGZlLCAweDE0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDEwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MTIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHg0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDAsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MjQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4MjAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU1LCAwLCAwLAorICAweDEyLCAweDYzLCAwLCAwLAorICAweDEyLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiZCwgMCwgMCwKKyAgMHgxMiwgMHhmLCAweGY4LCAweGM4LAorICAweDIzLCAweGYsIDB4YTMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAweGJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhiMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHhlOCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxMCwKKyAgMHgxMSwgMHg5YSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgxOCwKKyAgMHgxMSwgMHg5OCwKKyAgMHgxMSwgMHg5OSwKKyAgMHgxMSwgMHhmOCwKKyAgMHgxMSwgMHhmYywKKyAgMHgxMSwgMHhmYSwKKyAgMHgyMiwgMHhmLCAweDUsCisgIDB4MjIsIDB4ZiwgMHg2LAorICAweDIyLCAweGYsIDB4NywKKyAgMHgyMiwgMHhmLCAweDM0LAorICAweDIyLCAweGYsIDB4MzUsCisgIDB4MTEsIDB4ZjUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg0MCwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDNjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ODMsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgzOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDNhLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGMyLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNiwKKyAgMHgxMywgMHhmLCAweGZlLCAweGIwLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGEyLAorICAweDM0LCAweGYzLCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU2LCAwLCAwLAorICAweDExLCAweDI3LAorICAweDExLCAweDJmLAorICAweDIsIDB4ZmUsIDB4ZmUsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGY4LCAweDQ4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgxMSwgMHhjOCwKKyAgMHgyMiwgMHhkOSwgMHhkMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgyMiwgMHhkOSwgMHhlMSwKKyAgMHgyMiwgMHhkOSwgMHhlNCwKKyAgMHgyMiwgMHhkOSwgMHhlNSwKKyAgMHgyMiwgMHhkOSwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhlOSwKKyAgMHgyMiwgMHhkOSwgMHhlYSwKKyAgMHgyMiwgMHhkOSwgMHhlYiwKKyAgMHgyMiwgMHhkOSwgMHhlYywKKyAgMHgyMiwgMHhkOSwgMHhlZCwKKyAgMHgyMiwgMHhkOSwgMHhlZSwKKyAgMHgyMiwgMHhkOSwgMHhmMCwKKyAgMHgyMiwgMHhkOSwgMHhmMSwKKyAgMHgyMiwgMHhkOSwgMHhmMiwKKyAgMHgyMiwgMHhkOSwgMHhmMywKKyAgMHgyMiwgMHhkOSwgMHhmNCwKKyAgMHgyMiwgMHhkOSwgMHhmNSwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkOSwgMHhmOCwKKyAgMHgyMiwgMHhkOSwgMHhmOSwKKyAgMHgyMiwgMHhkOSwgMHhmYSwKKyAgMHgyMiwgMHhkOSwgMHhmYiwKKyAgMHgyMiwgMHhkOSwgMHhmYywKKyAgMHgyMiwgMHhkOSwgMHhmZCwKKyAgMHgyMiwgMHhkOSwgMHhmZSwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGM4LAorICAweDEyLCAweGRjLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGU4LAorICAweDEyLCAweGRjLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDE4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDI4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDMwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHg4LAorICAweDEyLCAweGRlLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkZiwgMHhlMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMiwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMywKKyAgMHgxMSwgMHg5YiwKKyAgMHgyMiwgMHhkYiwgMHhlMiwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDEwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZGUsIDB4ZDksCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDM4LAorICAweDEyLCAweGRhLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRkLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkYiwgMHhlMywKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHg4LAorICAweDEyLCAweGRkLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhmNCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhZiwgMCwgMCwKKyAgMHgyLCAweGZkLCAweDY5LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4ZTQsCisgIDB4MSwgMHhmZSwgMHhlYywKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAwLAorICAweDEsIDB4ZjgsIDB4NDAsCisgIDB4MSwgMHhmZSwgMHg2YywKKyAgMHgxMSwgMHhjZCwKKyAgMHgxMSwgMHhjYywKKyAgMHgxMSwgMHhjZSwKKyAgMHgyMiwgMHhmLCAweDgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGY4LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhjZiwKKyAgMHgxLCAweGYwLCAweDcwLAorICAweDEyLCAweGYsIDB4ZjAsIDB4ODAsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgxMSwgMHhlMywKKyAgMHgxMSwgMHhlYiwKKyAgMHgxMSwgMHhlOSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyMCwKKyAgMHgxMSwgMHhlYSwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgyOCwKKyAgMHgxMSwgMHg5ZiwKKyAgMHgyMywgMHhmLCAweDIsIDAsIDAsCisgIDB4MTIsIDB4YzUsIDAsIDAsCisgIDB4MTIsIDB4OGQsIDAsIDAsCisgIDB4MTEsIDB4YzksCisgIDB4MTIsIDB4YzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzAsCisgIDB4MTEsIDB4ZjAsCisgIDB4MSwgMHhmZSwgMHhhYywKKyAgMHgxMSwgMHhlMiwKKyAgMHgxMSwgMHhlMSwKKyAgMHgxMSwgMHhlMCwKKyAgMHgyMywgMHhmLCAweDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ODgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGM2LCAweDM4LCAwLAorICAweDEsIDB4ZjAsIDB4YjAsCisgIDB4MSwgMHhmZSwgMHhhMCwKKyAgMHgxLCAweGZlLCAweGEyLAorICAweDIzLCAweGYsIDB4MjAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIxLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjMsIDB4YzAsIDB4YzAsCisgIDB4MTIsIDB4OGMsIDAsIDAsCisgIDB4MTIsIDB4OGUsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhNCwKKyAgMHgyMywgMHhmLCAweGJlLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGI3LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmMywgMHg5MCwKKyAgMHgxMSwgMHg5MCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGI4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4YSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHg4LAorICAweDEsIDB4ZmUsIDB4YywKKyAgMHgxLCAweGZlLCAweGU2LAorICAweDEsIDB4ZmUsIDB4ZWUsCisgIDB4MSwgMHhmZSwgMHg2ZSwKKyAgMHgxMiwgMHg4ZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgxLAorICAweDExLCAweDlkLAorICAweDEyLCAweGZmLCAweDM4LCAweDMwLAorICAweDEsIDB4ZjgsIDB4NTAsCisgIDB4MSwgMHhmOCwgMHg1OCwKKyAgMHgxLCAweGZkLCAweDY4LAorICAweDEsIDB4ZTcsIDB4NiwKKyAgMHgxMiwgMHhmLCAweGM3LCAweDgwLAorICAweDExLCAweDYwLAorICAweDExLCAweDYxLAorICAweDExLCAweDljLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDE4LAorICAweDIyLCAweGYsIDB4MzIsCisgIDB4MjIsIDB4ZiwgMHgzMywKKyAgMHgyMiwgMHhmLCAweDMxLAorICAweDExLCAweGMzLAorICAweDExLCAweGMyLAorICAweDExLCAweGNiLAorICAweDExLCAweGNhLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4OCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YWEsCisgIDB4MTEsIDB4OWUsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHgxOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDFhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MWMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDE4LAorICAweDEsIDB4ZmUsIDB4YWUsCisgIDB4MTMsIDB4ZiwgMHhmMCwgMHg5MCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhNSwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGFkLCAwLCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjMSwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzIsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMzLAorICAweDMzLCAweGYsIDB4MSwgMHhjNCwKKyAgMHgyMywgMHhmLCAweDc4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAwLAorICAweDMzLCAweGYsIDB4MSwgMHhjOCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzksCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZjksCisgIDB4MTEsIDB4ZmQsCisgIDB4MTEsIDB4ZmIsCisgIDB4MSwgMHhmZSwgMHhhYSwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHgyOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDJhLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4MmMsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDI4LAorICAweDIsIDB4ZmUsIDB4ODQsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHhhOCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAwLAorICAweDIyLCAweGYsIDB4YiwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MjgsCisgIDB4MjIsIDB4ZiwgMHg5LAorICAweDIzLCAweGYsIDB4ZCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4MTgsIDB4MzgsIDB4MTgsCisgIDB4MjMsIDB4ZiwgMHgxZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDMwLAorICAweDEzLCAweGYsIDB4ZmUsIDB4YzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4NiwgMCwgMCwKKyAgMHgxLCAweGY4LCAweDkwLAorICAweDExLCAweGQ3LAorICAweDIsIDB4ZmUsIDB4MzAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgzMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDM0LAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MzAsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhmLCAweDc3LAorICAweDM0LCAweDY2LCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDAsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgxLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MiwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDMsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg0LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDYsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg3LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4OCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgxOCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDExLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDEyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDE2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDI4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJkLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZiwgMCwgMCwKKyAgMHgyMiwgMHhmLCAweDM3LAorICAweDM0LCAweDY2LCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHg1MCwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU2LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU3LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDU5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVjLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg3YywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2QsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdlLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweGM1LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDYsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGQ2LCAweGMwLCAweGMwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhkNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRjLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUwLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU3LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWUsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhmMCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhmNywgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY4LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY5LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg1LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg4LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDksIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHhiLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGYsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDIzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhlMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZjAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGQwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDgsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDczLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhlOCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGYwLAorICAweDMzLCAweGYsIDB4YWUsIDB4ZjgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGYsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4ZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDQyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyOSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzcsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4MjIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNkLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2YsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg0MCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4OCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YiwgMCwgMCwKKyAgMHgxLCAweGU3LCAweDcsCit9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjIxZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbTY4a19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSwzMDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19pbml0LmMJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDkgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtNjhrIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdGFyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfNjhLXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbTY4a19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKysKKytjb25zdCBjaGFyICoKKyttNjhrX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgZWgtPm5hbWUgPSAibTY4ayI7CisrICBtNjhrX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmVnaXN0ZXJfaW5mbyk7CisrCisrICByZXR1cm4gTU9EVkVSU0lPTjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWdzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3JlZ3MuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwxMDYgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgbTY4ayBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbTY4a18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttNjhrX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCSAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgIGludCAqYml0cywgaW50ICp0eXBlKQorK3sKKysJaWYgKG5hbWUgPT0gTlVMTCkKKysJCXJldHVybiAyNTsKKysKKysJaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDI0IHx8IG5hbWVsZW4gPCA1KQorKwkJcmV0dXJuIC0xOworKworKwkqcHJlZml4ID0gIiUiOworKwkqYml0cyA9IDMyOworKwkqdHlwZSA9IChyZWdubyA8IDggPyBEV19BVEVfc2lnbmVkCisrCQk6IHJlZ25vIDwgMTYgPyBEV19BVEVfYWRkcmVzcyA6IERXX0FURV9mbG9hdCk7CisrCisrCWlmIChyZWdubyA8IDgpCisrCXsKKysJCSpzZXRuYW1lID0gImludGVnZXIiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMTYpCisrCXsKKysJCSpzZXRuYW1lID0gImFkZHJlc3MiOworKwl9CisrCWVsc2UgaWYgKHJlZ25vIDwgMjQpCisrCXsKKysJCSpzZXRuYW1lID0gIkZQVSI7CisrCX0KKysJZWxzZQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJCSp0eXBlID0gRFdfQVRFX2FkZHJlc3M7CisrCX0KKysKKysJc3dpdGNoIChyZWdubykKKysJeworKwljYXNlIDAgLi4uIDc6CisrCQluYW1lWzBdID0gJ2QnOworKwkJbmFtZVsxXSA9IHJlZ25vICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSA4IC4uLiAxMzoKKysJCW5hbWVbMF0gPSAnYSc7CisrCQluYW1lWzFdID0gcmVnbm8gLSA4ICsgJzAnOworKwkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNDoKKysJCW5hbWVbMF0gPSAnZic7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNToKKysJCW5hbWVbMF0gPSAncyc7CisrCQluYW1lWzFdID0gJ3AnOworKyAgIAkJbmFtZWxlbiA9IDI7CisrCQlicmVhazsKKysKKysJY2FzZSAxNiAuLi4gMjM6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysJCW5hbWVbMl0gPSByZWdubyAtIDE2ICsgJzAnOworKyAgIAkJbmFtZWxlbiA9IDM7CisrCQlicmVhazsKKysKKysJY2FzZSAyNDoKKysJCW5hbWVbMF0gPSAncCc7CisrCQluYW1lWzFdID0gJ2MnOworKwkJbmFtZWxlbiA9IDI7CisrCX0KKysKKysJbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysJcmV0dXJuIG5hbWVsZW47CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19yZWxvYy5kZWYJMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNDUgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtNjhrLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysqLworKworKy8qIAkgICAgTkFNRSwJCVJFTHxFWEVDfERZTgkqLworKworK1JFTE9DX1RZUEUgKE5PTkUsCQkwKQorK1JFTE9DX1RZUEUgKDMyLAkJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFICgxNiwJCQlSRUwpCisrUkVMT0NfVFlQRSAoOCwJCQlSRUwpCisrUkVMT0NfVFlQRSAoUEMzMiwJCVJFTHxFWEVDfERZTikKKytSRUxPQ19UWVBFIChQQzE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1Q4LAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDMyTywJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QxNk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOE8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUOCwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKENPUFksCQlFWEVDKQorK1JFTE9DX1RZUEUgKEdMT0JfREFULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoSk1QX1NMT1QsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChSRUxBVElWRSwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEdOVV9WVElOSEVSSVQsCVJFTCkKKytSRUxPQ19UWVBFIChHTlVfVlRFTlRSWSwJUkVMKQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ2L2xpYmVsZi9lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ2Lm9yaWcvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTE6MTMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvbGliZWxmL2VsZi5oCTIwMTAtMDQtMjQgMTA6MTM6NTAuMDAwMDAwMDAwICswMDAwCitAQCAtMTEyNSw2ICsxMTI1LDkgQEAKKyAjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCQkvKiBDcmVhdGUgR09UIGVudHJ5ICovCisgI2RlZmluZSBSXzY4S19KTVBfU0xPVAkyMQkJLyogQ3JlYXRlIFBMVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfUkVMQVRJVkUJMjIJCS8qIEFkanVzdCBieSBwcm9ncmFtIGJhc2UgKi8KKysvKiBUaGUgbmV4dCAyIGFyZSBHTlUgZXh0ZW5zaW9ucyB0byBlbmFibGUgQysrIHZ0YWJsZSBnYXJiYWdlIGNvbGxlY3Rpb24uICAqLworKyNkZWZpbmUgUl82OEtfR05VX1ZUSU5IRVJJVCAyMworKyNkZWZpbmUgUl82OEtfR05VX1ZURU5UUlkgICAyNAorICNkZWZpbmUgUl82OEtfVExTX0dEMzIgICAgICAyNSAgICAgICAgICAvKiAzMiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyAjZGVmaW5lIFJfNjhLX1RMU19HRDE2ICAgICAgMjYgICAgICAgICAgLyogMTYgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0Q4ICAgICAgIDI3ICAgICAgICAgIC8qIDggYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCitJbmRleDogZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0Ni5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMjQgMTA6MTE6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNC0yNCAxMDoxMTozOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTIgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMKKyttb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjIG1pcHMgbTY4aworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgXAorIAkgICAgIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIGxpYmVibF9wcGM2NF9waWMuYSBcCistCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorKwkgICAgIGxpYmVibF9zMzkwX3BpYy5hIGxpYmVibF9wYXJpc2NfcGljLmEgbGliZWJsX21pcHNfcGljLmEgXAorKwkgICAgIGxpYmVibF9tNjhrX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTEwMyw2ICsxMDQsMTAgQEAKKyBsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisgYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKyAKKyttNjhrX1NSQ1MgPSBtNjhrX2luaXQuYyBtNjhrX3N5bWJvbC5jIG02OGtfcmVncy5jCisrbGliZWJsX202OGtfcGljX2FfU09VUkNFUyA9ICQobTY4a19TUkNTKQorK2FtX2xpYmVibF9tNjhrX3BpY19hX09CSkVDVFMgPSAkKG02OGtfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE0Ni9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDYvYmFja2VuZHMvbTY4a19zeW1ib2wuYwkyMDEwLTA0LTI0IDEwOjExOjM4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSw0MyBAQAorKy8qIG02OGsgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbTY4a19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSXzY4S18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfU1dPUkQ7CisrICAgIGNhc2UgUl82OEtfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl82OEtfODoKKysgICAgICByZXR1cm4gRUxGX1RfQllURTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L21pcHNfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmODFhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvbWlwc19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw3MTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfaW5pdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19pbml0LmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNjAgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBtaXBzIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW1pcHNfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl9NSVBTXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gbWlwc19yZWxvYy5kZWYuICAqLworKyNpbmNsdWRlICJjb21tb24tcmVsb2MuYyIKKysKKytjb25zdCBjaGFyICoKKyttaXBzX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICAvKiBXZSBoYW5kbGUgaXQuICAqLworKyAgaWYgKG1hY2hpbmUgPT0gRU1fTUlQUykKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBiaWctZW5kaWFuIjsKKysgIGVsc2UgaWYgKG1hY2hpbmUgPT0gRU1fTUlQU19SUzNfTEUpCisrICAgIGVoLT5uYW1lID0gIk1JUFMgUjMwMDAgbGl0dGxlLWVuZGlhbiI7CisrCisrICBtaXBzX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIEhPT0sgKGVoLCByZWdpc3Rlcl9pbmZvKTsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVncy5jCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDEwNCBAQAorKy8qIFJlZ2lzdGVyIG5hbWVzIGFuZCBudW1iZXJzIGZvciBNSVBTIERXQVJGLgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKyttaXBzX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAorKwkJICAgIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICAgaW50ICpiaXRzLCBpbnQgKnR5cGUpCisreworKyAgaWYgKG5hbWUgPT0gTlVMTCkKKysgICAgcmV0dXJuIDY2OworKworKyAgaWYgKHJlZ25vIDwgMCB8fCByZWdubyA+IDY1IHx8IG5hbWVsZW4gPCA0KQorKyAgICByZXR1cm4gLTE7CisrCisrICAqcHJlZml4ID0gIiQiOworKworKyAgaWYgKHJlZ25vIDwgMzIpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICAgIG5hbWVsZW4gPSAxOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIHsKKysgICAgICAgICAgbmFtZVswXSA9IChyZWdubyAvIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZVsxXSA9IChyZWdubyAlIDEwKSArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDI7CisrICAgICAgICB9CisrICAgIH0KKysgIGVsc2UgaWYgKHJlZ25vIDwgNjQpCisrICAgIHsKKysgICAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAgICp0eXBlID0gRFdfQVRFX2Zsb2F0OworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdmJzsKKysgICAgICBpZiAocmVnbm8gPCAzMiArIDEwKQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSArICcwJzsKKysJICBuYW1lbGVuID0gMjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIG5hbWVbMV0gPSAocmVnbm8gLSAzMikgLyAxMCArICcwJzsKKysJICBuYW1lWzJdID0gKHJlZ25vIC0gMzIpICUgMTAgKyAnMCc7CisrCSAgbmFtZWxlbiA9IDM7CisrCX0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPT0gNjQpCisrICAgIHsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2gnOworKyAgICAgIG5hbWVbMV0gPSAnaSc7CisrICAgICAgbmFtZWxlbiA9IDI7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnbCc7CisrICAgICAgbmFtZVsxXSA9ICdvJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKworKyAgbmFtZVtuYW1lbGVuKytdID0gJ1wwJzsKKysgIHJldHVybiBuYW1lbGVuOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCTIwMTAtMDItMjQgMTg6NTc6MzUuMDAwMDAwMDAwICswMDAwCitAQCAtMCwwICsxLDc5IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbWlwcy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyogCSAgICBOQU1FLAkJUkVMfEVYRUN8RFlOCSovCisrCisrUkVMT0NfVFlQRSAoTk9ORSwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDE2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICgzMiwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMzIsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDI2LCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISTE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoTE8xNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTYsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMSVRFUkFMLCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFBDMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMMTYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwzMiwgICAgICAgICAgICAwKQorKworK1JFTE9DX1RZUEUgKFNISUZUNSwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTSElGVDYsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoNjQsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfUEFHRSwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX09GU1QsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9ISTE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfTE8xNiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoU1VCLCAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9BLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChJTlNFUlRfQiwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoREVMRVRFLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFUiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChISUdIRVNULCAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9ISTE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTExfTE8xNiwgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTQ05fRElTUCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMMTYsICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEFERF9JTU1FRElBVEUsICAgICAgMCkKKytSRUxPQ19UWVBFIChQSlVNUCwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUkVMR09ULCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEpBTFIsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTDMyLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0Q2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMNjQsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dELCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19MRE0sICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0hJMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUFJFTF9MTzE2LCAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19HT1RUUFJFTCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUwzMiwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMNjQsICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9ISTE2LCAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUxfTE8xNiwgICAgIDApCisrCisrI2RlZmluZSBOT19DT1BZX1JFTE9DIDEKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9taXBzX3JldHZhbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19yZXR2YWwuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwzMjEgQEAKKysvKiBGdW5jdGlvbiByZXR1cm4gdmFsdWUgbG9jYXRpb24gZm9yIExpbnV4L21pcHMgQUJJLgorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrI2luY2x1ZGUgPGVsZi5oPgorKworKyNpbmNsdWRlICIuLi9saWJlYmwvbGliZWJsUC5oIgorKyNpbmNsdWRlICIuLi9saWJkdy9saWJkd1AuaCIKKysKKysjZGVmaW5lIEJBQ0tFTkQgbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIFRoZSBBQkkgb2YgdGhlIGZpbGUuICBBbHNvIHNlZSBFRl9NSVBTX0FCSTIgYWJvdmUuICovCisrI2RlZmluZSBFRl9NSVBTX0FCSQkJMHgwMDAwRjAwMAorKworKy8qIFRoZSBvcmlnaW5hbCBvMzIgYWJpLiAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9PMzIgICAgICAgICAgMHgwMDAwMTAwMAorKworKy8qIE8zMiBleHRlbmRlZCB0byB3b3JrIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzICovCisrI2RlZmluZSBFX01JUFNfQUJJX082NCAgICAgICAgICAweDAwMDAyMDAwCisrCisrLyogRUFCSSBpbiAzMiBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJMzIgICAgICAgMHgwMDAwMzAwMAorKworKy8qIEVBQkkgaW4gNjQgYml0IG1vZGUgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfRUFCSTY0ICAgICAgIDB4MDAwMDQwMDAKKysKKysvKiBBbGwgdGhlIHBvc3NpYmxlIE1JUFMgQUJJcy4gKi8KKytlbnVtIG1pcHNfYWJpCisrICB7CisrICAgIE1JUFNfQUJJX1VOS05PV04gPSAwLAorKyAgICBNSVBTX0FCSV9OMzIsCisrICAgIE1JUFNfQUJJX08zMiwKKysgICAgTUlQU19BQklfTjY0LAorKyAgICBNSVBTX0FCSV9PNjQsCisrICAgIE1JUFNfQUJJX0VBQkkzMiwKKysgICAgTUlQU19BQklfRUFCSTY0LAorKyAgICBNSVBTX0FCSV9MQVNUCisrICB9OworKworKy8qIEZpbmQgdGhlIG1pcHMgQUJJIG9mIHRoZSBjdXJyZW50IGZpbGUgKi8KKytlbnVtIG1pcHNfYWJpIGZpbmRfbWlwc19hYmkoRWxmICplbGYpCisreworKyAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrCisrICBpZiAoZWhkciA9PSBOVUxMKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIEdFbGZfV29yZCBlbGZfZmxhZ3MgPSBlaGRyLT5lX2ZsYWdzOworKworKyAgLyogQ2hlY2sgZWxmX2ZsYWdzIHRvIHNlZSBpZiBpdCBzcGVjaWZpZXMgdGhlIEFCSSBiZWluZyB1c2VkLiAgKi8KKysgIHN3aXRjaCAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJKSkKKysgICAgeworKyAgICBjYXNlIEVfTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgY2FzZSBFX01JUFNfQUJJX0VBQkkzMjoKKysgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgaWYgKChlbGZfZmxhZ3MgJiBFRl9NSVBTX0FCSTIpKQorKwlyZXR1cm4gTUlQU19BQklfTjMyOworKyAgICB9CisrCisrICAvKiBHQ0MgY3JlYXRlcyBhIHBzZXVkby1zZWN0aW9uIHdob3NlIG5hbWUgZGVzY3JpYmVzIHRoZSBBQkkuICAqLworKyAgc2l6ZV90IHNoc3RybmR4OworKyAgaWYgKGVsZl9nZXRzaGRyc3RybmR4IChlbGYsICZzaHN0cm5keCkgPCAwKQorKyAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgIGNvbnN0IGNoYXIgKm5hbWU7CisrICBFbGZfU2NuICpzY24gPSBOVUxMOworKyAgd2hpbGUgKChzY24gPSBlbGZfbmV4dHNjbiAoZWxmLCBzY24pKSAhPSBOVUxMKQorKyAgICB7CisrICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworKyAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworKyAgICAgIGlmIChzaGRyID09IE5VTEwpCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTEFTVDsKKysKKysgICAgICBuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSkgPzogIiI7CisrICAgICAgaWYgKHN0cm5jbXAgKG5hbWUsICIubWRlYnVnLiIsIDgpICE9IDApCisrICAgICAgICBjb250aW51ZTsKKysKKysgICAgICBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTzMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTjMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfTjY0OworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuYWJpTzY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PNjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5lYWJpMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkkzMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmk2NCIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTY0OworKyAgICAgIGVsc2UKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworKyAgICB9CisrCisrICByZXR1cm4gTUlQU19BQklfVU5LTk9XTjsKKyt9CisrCisrdW5zaWduZWQgaW50CisrbWlwc19hYmlfcmVnc2l6ZSAoZW51bSBtaXBzX2FiaSBhYmkpCisreworKyAgc3dpdGNoIChhYmkpCisrICAgIHsKKysgICAgY2FzZSBNSVBTX0FCSV9FQUJJMzI6CisrICAgIGNhc2UgTUlQU19BQklfTzMyOgorKyAgICAgIHJldHVybiA0OworKyAgICBjYXNlIE1JUFNfQUJJX04zMjoKKysgICAgY2FzZSBNSVBTX0FCSV9ONjQ6CisrICAgIGNhc2UgTUlQU19BQklfTzY0OgorKyAgICBjYXNlIE1JUFNfQUJJX0VBQkk2NDoKKysgICAgICByZXR1cm4gODsKKysgICAgY2FzZSBNSVBTX0FCSV9VTktOT1dOOgorKyAgICBjYXNlIE1JUFNfQUJJX0xBU1Q6CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisrLyogJHYwIG9yIHBhaXIgJHYwLCAkdjEgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWcyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19pbnRyZWcJMQorKyNkZWZpbmUgbmxvY19pbnRyZWdwYWlyCTQKKysKKysvKiAkZjAgKGZsb2F0KSwgb3IgcGFpciAkZjAsICRmMSAoZG91YmxlKS4KKysgKiBmMi9mMyBhcmUgdXNlZCBmb3IgQ09NUExFWCAoPSAyIGRvdWJsZXMpIHJldHVybnMgaW4gRm9ydHJhbiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdfbzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzQgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM1IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgIH07CisrCisrLyogJGYwLCBvciBwYWlyICRmMCwgJGYyLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ZwcmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMyIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKyNkZWZpbmUgbmxvY19mcHJlZ3BhaXIgNAorKyNkZWZpbmUgbmxvY19mcHJlZ3F1YWQgOAorKworKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKysgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluICR2MC4gICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMiwgLm51bWJlciA9IDAgfQorKyAgfTsKKysjZGVmaW5lIG5sb2NfYWdncmVnYXRlIDEKKysKKytpbnQKKyttaXBzX3JldHVybl92YWx1ZV9sb2NhdGlvbiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIC8qIEZpcnN0IGZpbmQgdGhlIEFCSSB1c2VkIGJ5IHRoZSBlbGYgb2JqZWN0ICovCisrICBlbnVtIG1pcHNfYWJpIGFiaSA9IGZpbmRfbWlwc19hYmkoZnVuY3R5cGVkaWUtPmN1LT5kYmctPmVsZik7CisrCisrICAvKiBTb21ldGhpbmcgd2VudCBzZXJpb3VzbHkgd3Jvbmcgd2hpbGUgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIEFCSSAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9MQVNUKQorKyAgICByZXR1cm4gLTE7CisrCisrICAvKiBXZSBjb3VsZG4ndCBpZGVudGlmeSB0aGUgQUJJLCBidXQgdGhlIGZpbGUgc2VlbXMgdmFsaWQgKi8KKysgIGlmIChhYmkgPT0gTUlQU19BQklfVU5LTk9XTikKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogQ2FuJ3QgaGFuZGxlIEVBQkkgdmFyaWFudHMgKi8KKysgIGlmICgoYWJpID09IE1JUFNfQUJJX0VBQkkzMikgfHwgKGFiaSA9PSBNSVBTX0FCSV9FQUJJNjQpKQorKyAgICByZXR1cm4gLTI7CisrCisrICB1bnNpZ25lZCBpbnQgcmVnc2l6ZSA9IG1pcHNfYWJpX3JlZ3NpemUgKGFiaSk7CisrICBpZiAoIXJlZ3NpemUpCisrICAgIHJldHVybiAtMjsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfbXV0YWJsZV90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSByZWdzaXplOworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrI2RlZmluZSBBQklfTE9DKGxvYywgcmVnc2l6ZSkgKChyZWdzaXplKSA9PSA0ID8gKGxvYyAjIyBfbzMyKSA6IChsb2MpKQorKworKwkgICAgaWYgKGVuY29kaW5nID09IERXX0FURV9mbG9hdCkKKysJICAgICAgeworKwkJKmxvY3AgPSBBQklfTE9DKGxvY19mcHJlZywgcmVnc2l6ZSk7CisrCQlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVnOworKworKwkJaWYgKHNpemUgPD0gMipyZWdzaXplKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjsKKysKKysJCWlmIChzaXplIDw9IDQqcmVnc2l6ZSAmJiBhYmkgPT0gTUlQU19BQklfTzMyKQorKyAgICAgICAgICAgICAgICAgIHJldHVybiBubG9jX2ZwcmVncXVhZDsKKysKKysJCWdvdG8gYWdncmVnYXRlOworKwkgICAgICB9CisrCSAgfQorKwkqbG9jcCA9IEFCSV9MT0MobG9jX2ludHJlZywgcmVnc2l6ZSk7CisrCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVnOworKwlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guIFNob3VsZG4ndCBoYXBwZW4gdGhvdWdoIChhdCBsZWFzdCB3aXRoIGdjYykgKi8KKysgICAgICB9CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICBhZ2dyZWdhdGU6CisrICAgICAgLyogWFhYIFRPRE86IENhbid0IGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJuIHdpdGggb3RoZXIgQUJJJ3MgeWV0IDotLyAqLworKyAgICAgIGlmICgoYWJpICE9IE1JUFNfQUJJX08zMikgJiYgKGFiaSAhPSBNSVBTX0FCSV9PNjQpKQorKyAgICAgICAgcmV0dXJuIC0yOworKworKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvbWlwc19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ1L2JhY2tlbmRzL21pcHNfc3ltYm9sLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBNSVBTIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworKy8qIENoZWNrIGZvciB0aGUgc2ltcGxlIHJlbG9jIHR5cGVzLiAgKi8KKytFbGZfVHlwZQorK21pcHNfcmVsb2Nfc2ltcGxlX3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IHR5cGUpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgUl9NSVBTXzE2OgorKyAgICAgIHJldHVybiBFTEZfVF9IQUxGOworKyAgICBjYXNlIFJfTUlQU18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgY2FzZSBSX01JUFNfNjQ6CisrICAgICAgcmV0dXJuIEVMRl9UX1hXT1JEOworKyAgICBkZWZhdWx0OgorKyAgICAgIHJldHVybiBFTEZfVF9OVU07CisrICAgIH0KKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNDUvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2xpYmVibC9lYmxvcGVuYmFja2VuZC5jCTIwMTAtMDItMjQgMTg6NTU6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxMC0wMi0yNCAxODo1NzozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC05MSw2ICs5MSw4IEBACisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQywgMCwgMCB9LAorICAgeyAic3BhcmMiLCAiZWxmX3NwYXJjdjhwbHVzIiwgInNwYXJjIiwgNSwgRU1fU1BBUkMzMlBMVVMsIDAsIDAgfSwKKyAgIHsgInMzOTAiLCAiZWJsX3MzOTAiLCAiczM5MCIsIDQsIEVNX1MzOTAsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHMiLCAibWlwcyIsIDQsIEVNX01JUFMsIDAsIDAgfSwKKysgIHsgIm1pcHMiLCAiZWxmX21pcHNlbCIsICJtaXBzZWwiLCA0LCBFTV9NSVBTX1JTM19MRSwgMCwgMCB9LAorIAorICAgeyAibTMyIiwgImVsZl9tMzIiLCAibTMyIiwgMywgRU1fTTMyLCAwLCAwIH0sCisgICB7ICJtNjhrIiwgImVsZl9tNjhrIiwgIm02OGsiLCA0LCBFTV82OEssIDAsIDAgfSwKK0luZGV4OiBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9jb21tb24tcmVsb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ1Lm9yaWcvYmFja2VuZHMvY29tbW9uLXJlbG9jLmMJMjAxMC0wMi0yNCAxODo1NTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0NS9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDEwLTAyLTI0IDE4OjU3OjM1LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwOSwxMSArMTA5LDEzIEBACisgfQorIAorIAorKyNpZm5kZWYgTk9fQ09QWV9SRUxPQworIGJvb2wKKyBFQkxIT09LKGNvcHlfcmVsb2NfcCkgKGludCByZWxvYykKKyB7CisgICByZXR1cm4gcmVsb2MgPT0gUl9UWVBFIChDT1BZKTsKKyB9CisrI2VuZGlmCisgCisgYm9vbAorIEVCTEhPT0sobm9uZV9yZWxvY19wKSAoaW50IHJlbG9jKQorQEAgLTEzNSw3ICsxMzcsOSBAQAorICAgZWJsLT5yZWxvY190eXBlX25hbWUgPSBFQkxIT09LKHJlbG9jX3R5cGVfbmFtZSk7CisgICBlYmwtPnJlbG9jX3R5cGVfY2hlY2sgPSBFQkxIT09LKHJlbG9jX3R5cGVfY2hlY2spOworICAgZWJsLT5yZWxvY192YWxpZF91c2UgPSBFQkxIT09LKHJlbG9jX3ZhbGlkX3VzZSk7CisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgICBlYmwtPmNvcHlfcmVsb2NfcCA9IEVCTEhPT0soY29weV9yZWxvY19wKTsKKysjZW5kaWYKKyAgIGVibC0+bm9uZV9yZWxvY19wID0gRUJMSE9PSyhub25lX3JlbG9jX3ApOworICNpZm5kZWYgTk9fUkVMQVRJVkVfUkVMT0MKKyAgIGVibC0+cmVsYXRpdmVfcmVsb2NfcCA9IEVCTEhPT0socmVsYXRpdmVfcmVsb2NfcCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0NS5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDItMjQgMTg6NTc6MjYuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDUvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0yNCAxODo1Nzo1Ny4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yOSwxMSArMjksMTEgQEAKKyAJICAgLUkkKHRvcF9zcmNkaXIpL2xpYmVsZiAtSSQodG9wX3NyY2RpcikvbGliZHcKKyAKKyAKKy1tb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gc3BhcmMgcHBjIHBwYzY0IHMzOTAgcGFyaXNjCisrbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIHNwYXJjIHBwYyBwcGM2NCBzMzkwIHBhcmlzYyBtaXBzCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSBcCisgCSAgICAgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgbGliZWJsX3BwYzY0X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC05OSw2ICs5OSwxMCBAQAorIGxpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisgYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisrbWlwc19TUkNTID0gbWlwc19pbml0LmMgbWlwc19zeW1ib2wuYyBtaXBzX3JlZ3MuYyBtaXBzX3JldHZhbC5jCisrbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorK2FtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L25tLUZpeC1zaXplLXBhc3NlZC10by1zbnByaW50Zi1mb3ItaW52YWxpZC1zaF9uYW1lLWNhc2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI1ZGFkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9ubS1GaXgtc2l6ZS1wYXNzZWQtdG8tc25wcmludGYtZm9yLWludmFsaWQtc2hfbmFtZS1jYXNlLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworbm06IEZpeCBzaXplIHBhc3NlZCB0byBzbnByaW50ZiBmb3IgaW52YWxpZCBzaF9uYW1lIGNhc2UuCituYXRpdmUgYnVpbGQgZmFpbGVkIGFzIGZvbGxvd2luZyBvbiBGZWRvcmExODoKK25tLmM6IEluIGZ1bmN0aW9uICdzaG93X3N5bWJvbHNfc3lzdic6CitubS5jOjc1NjoyNzogZXJyb3I6IGFyZ3VtZW50IHRvICdzaXplb2YnIGluICdzbnByaW50ZicgY2FsbCBpcyB0aGUgc2FtZSBleHByZXNzaW9uIGFzIHRoZSBkZXN0aW5hdGlvbjsgZGlkIHlvdSBtZWFuIHRvIHByb3ZpZGUgYW4gZXhwbGljaXQgbGVuZ3RoPyBbLVdlcnJvcj1zaXplb2YtcG9pbnRlci1tZW1hY2Nlc3NdCisgICAgc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKworVGhlIG9yaWdpbmFsIGNvbW1pdCBpcyBodHRwOi8vZ2l0LmZlZG9yYWhvc3RlZC5vcmcvY2dpdC9lbGZ1dGlscy5naXQvY29tbWl0L3NyYy9ubS5jP2lkPTU3YmQ2NmNhYmY2ZTZiOWVjZjYyMmNkYmYzNTA4MDQ4OTdhOGRmNTgKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CisKKy0tLSBlbGZ1dGlscy0wLjE0OC9zcmMvbm0uYy5vcmcJMjAxMy0wMy0xMSAyMjozNjoxMS4wMDAwMDAwMDAgLTA1MDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvbm0uYwkyMDEzLTAzLTExIDIyOjQ2OjA5LjAwMDAwMDAwMCAtMDUwMAorQEAgLTc1Miw4ICs3NTIsOSBAQAorIAkJCSAgICAgICBnZWxmX2dldHNoZHIgKHNjbiwgJnNoZHJfbWVtKS0+c2hfbmFtZSk7CisgICAgICAgaWYgKHVubGlrZWx5IChuYW1lID09IE5VTEwpKQorIAl7CistCSAgbmFtZSA9IGFsbG9jYSAoc2l6ZW9mICJbaW52YWxpZCBzaF9uYW1lIDB4MTIzNDU2NzhdIik7CistCSAgc25wcmludGYgKG5hbWUsIHNpemVvZiBuYW1lLCAiW2ludmFsaWQgc2hfbmFtZSAlIyIgUFJJeDMyICJdIiwKKysJICBjb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YgIltpbnZhbGlkIHNoX25hbWUgMHgxMjM0NTY3OF0iOworKwkgIG5hbWUgPSBhbGxvY2EgKGJ1ZnN6KTsKKysJICBzbnByaW50ZiAobmFtZSwgYnVmc3osICJbaW52YWxpZCBzaF9uYW1lICUjIiBQUkl4MzIgIl0iLAorIAkJICAgIGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pLT5zaF9uYW1lKTsKKyAJfQorICAgICAgIHNjbm5hbWVzW2VsZl9uZHhzY24gKHNjbildID0gbmFtZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE5MTJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCkBAIC0wLDAgKzEsNzU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9iYWNrZW5kcy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2JhY2tlbmRzL0NoYW5nZUxvZwkyMDEwLTA0LTEzIDIwOjA4OjAyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2JhY2tlbmRzL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAJKiBwcGNfYXR0cnMuYyAocHBjX2NoZWNrX29iamVjdF9hdHRyaWJ1dGUpOiBIYW5kbGUgdGFnCisgCUdOVV9Qb3dlcl9BQklfU3RydWN0X1JldHVybi4KKyAKKysyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChsaWJlYmxfJS5zbyk6IFVzZSAkKExEX0FTX05FRURFRCkuCisrCisgMjAwOC0xMC0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogaTM4Nl9yZWxvYy5kZWY6IEZpeCBlbnRyaWVzIGZvciBUTFNfR09UREVTQywgVExTX0RFU0NfQ0FMTCwgYW5kCitAQCAtNDMzLDYgKzQzNywxMSBAQAorIAkqIHNwYXJjX2luaXQuYzogTGlrZXdpc2UuCisgCSogeDg2XzY0X2luaXQuYzogTGlrZXdpc2UuCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoTERfQVNfTkVFREVEKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShsaWJlYmxfJS5zbyBydWxlKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XbCwtLWFzLW5lZWRlZC4KKysKKyAyMDA1LTExLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHBwYzY0X3JlbG9jLmRlZjogUkVMMzAgLT4gQUREUjMwLgorQEAgLTQ1NSw2ICs0NjQsOSBAQAorIAkqIE1ha2VmaWxlLmFtICh1bmluc3RhbGwpOiBEb24ndCB0cnkgdG8gcmVtb3ZlICQocGtnaW5jbHVkZWRpcikuCisgCShDTEVBTkZJTEVTKTogQWRkIGxpYmVibF8kKG0pLnNvLgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIAkqIHBwY19yZWxvYy5kZWY6IFVwZGF0ZSBiaXRzIHBlciBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+LgorIAkqIHBwYzY0X3JlbG9jLmRlZjogTGlrZXdpc2UuCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDMsNyArMTAzLDcgQEAKKyAJJChMSU5LKSAtc2hhcmVkIC1vICQoQDoubWFwPS5zbykgXAorIAkJLVdsLC0td2hvbGUtYXJjaGl2ZSAkPCAkKGNwdV8kKikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkKEA6LnNvPS5tYXApIFwKKy0JCS1XbCwteixkZWZzIC1XbCwtLWFzLW5lZWRlZCAkKGxpYmVsZikgJChsaWJkdykgJChsaWJtdWRmbGFwKQorKwkJLVdsLC16LGRlZnMgJChMRF9BU19ORUVERUQpICQobGliZWxmKSAkKGxpYmR3KSAkKGxpYm11ZGZsYXApCisgCSQodGV4dHJlbF9jaGVjaykKKyAKKyBsaWJlYmxfaTM4Ni5zbzogJChjcHVfaTM4NikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL0NoYW5nZUxvZwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTIsNiArMiwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoTE9DQUxFRElSLCBEQVRBRElSTkFNRSk6IFJlbW92ZWQuCisgCisrMjAwOS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IFVzZSBzZWQgYW5kIGV4cHIgaW5zdGVhZCBvZiBtb2Rlcm4gYmFzaCBleHRlbnNpb25zLgorKworIDIwMDktMDktMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGZvciBtb3JlIG1vZGVybiBhdXRvY29uZi4KK0BAIC0xMCw2ICsxNCwxMCBAQAorIAorIAkqIGNvbmZpZ3VyZS5hYyAoemlwX0xJQlMpOiBDaGVjayBmb3IgbGlibHptYSB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWM6IENoZWNrIGZvciAtZmdudTg5LWlubGluZTsgYWRkIGl0IHRvIFdFWFRSQSBpZiBpdCB3b3Jrcy4KKysKKyAyMDA5LTA0LTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIGNvbmZpZ3VyZS5hYyAoZXVfdmVyc2lvbik6IFJvdW5kIGRvd24gaGVyZSwgbm90IGluIHZlcnNpb24uaCBtYWNyb3MuCitAQCAtMjEsNiArMjksOCBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgX19idWlsdGluX3BvcGNvdW50LgorKworIAkqIGNvbmZpZ3VyZS5hYyAoemxpYiBjaGVjayk6IENoZWNrIGZvciBnemRpcmVjdCwgbmVlZCB6bGliID49IDEuMi4yLjMuCisgCisgCSogY29uZmlndXJlLmFjIChfX3RocmVhZCBjaGVjayk6IFVzZSBBQ19MSU5LX0lGRUxTRSwgaW4gY2FzZSBvZgorQEAgLTEwMSw2ICsxMTEsMTAgQEAKKyAJKiBjb25maWd1cmUuYWM6IEFkZCBkdW1teSBhdXRvbWFrZSBjb25kaXRpb25hbCB0byBnZXQgZGVwZW5kZW5jaWVzCisgCWZvciBub24tZ2VuZXJpYyBsaW5rZXIgcmlnaHQuICBTZWUgc3JjL01ha2VmaWxlLmFtLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbi4KKysKKyAyMDA1LTExLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKTogTmV3IHZhcmlhYmxlLgorQEAgLTE0OCw2ICsxNjIsMTcgQEAKKyAJKiBNYWtlZmlsZS5hbSAoYWxsX1NVQkRJUlMpOiBBZGQgbGliZHdmbC4KKyAJKiBjb25maWd1cmUuYWM6IFdyaXRlIGxpYmR3ZmwvTWFrZWZpbGUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWMgKFdFWFRSQSk6IENoZWNrIGZvciAtV2V4dHJhIGFuZCBzZXQgdGhpcyBzdWJzdGl0dXRpb24uCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RydWN0IHN0YXQgc3RfP3RpbSBtZW1iZXJzLgorKwkqIHNyYy9zdHJpcC5jIChwcm9jZXNzX2ZpbGUpOiBVc2Ugc3RfP3RpbWUgaWYgc3RfP3RpbSBhcmUgbm90IHRoZXJlLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGZ1dGltZXMgZnVuY3Rpb24uCisrCSogc3JjL3N0cmlwLmMgKGhhbmRsZV9lbGYpIFshIEhBVkVfRlVUSU1FU106IFVzZSB1dGltZXMgaW5zdGVhZC4KKysJKGhhbmRsZV9hcikgWyEgSEFWRV9GVVRJTUVTXTogTGlrZXdpc2UuCisrCisgMjAwNS0wNS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgW0FIX0JPVFRPTV0gKElOVERFQ0wsIF9JTlRERUNMKTogTmV3IG1hY3Jvcy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWcvZXUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZy9ldS5hbQkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZy9ldS5hbQkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI1LDExICsyNSwxNCBAQAorICMjIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uCisgIyMKKyAKKytXRVhUUkEgPSBAV0VYVFJBQAorK0xEX0FTX05FRURFRCA9IEBMRF9BU19ORUVERURACisrCisgREVGUyA9IC1EX0dOVV9TT1VSQ0UgLURIQVZFX0NPTkZJR19IIC1ETE9DQUxFRElSPSciJHtsb2NhbGVkaXJ9IicKKyBJTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX3NyY2RpcikvbGliIC1JLi4KKyBBTV9DRkxBR1MgPSAtc3RkPWdudTk5IC1XYWxsIC1Xc2hhZG93IFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19XZXJyb3IpLCwtV2Vycm9yKSBcCistCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkIC1XZXh0cmEpIFwKKysJICAgICQoaWYgJCgkKCpGKV9ub19XdW51c2VkKSwsLVd1bnVzZWQgJChXRVhUUkEpKSBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Zvcm1hdCksLVduby1mb3JtYXQsLVdmb3JtYXQ9MikgXAorIAkgICAgJCgkKCpGKV9DRkxBR1MpCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvY29uZmlnLmguaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZy5oLmluCTIwMTAtMDYtMjggMTk6MDc6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlnLmguaW4JMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsOCBAQAorIC8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworIAorKy8qIEhhdmUgX19idWlsdGluX3BvcGNvdW50LiAqLworKyN1bmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysKKyAvKiAkbGliZGlyIHN1YmRpcmVjdG9yeSBjb250YWluaW5nIGxpYmVibCBtb2R1bGVzLiAqLworICN1bmRlZiBMSUJFQkxfU1VCRElSCisgCitAQCAtNTUsNCArNTgsNyBAQAorIC8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyAjdW5kZWYgX0xBUkdFX0ZJTEVTCisgCisrLyogU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0LiAqLworKyN1bmRlZiBfX3RocmVhZAorKworICNpbmNsdWRlIDxldS1jb25maWcuaD4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTA2LTI4IDE5OjA3OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTczLDYgKzczLDU0IEBACisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfYzk5IiAhPSB4eWVzXSwKKyAgICAgICBBQ19NU0dfRVJST1IoW2djYyB3aXRoIEM5OSBzdXBwb3J0IHJlcXVpcmVkXSkpCisgCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtV2V4dHJhIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY193ZXh0cmEsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtV2V4dHJhIgorK0FDX0NPTVBJTEVfSUZFTFNFKFt2b2lkIGZvbyAodm9pZCkgeyB9XSwKKysJCSAgYWNfY3ZfY2Nfd2V4dHJhPXllcywgYWNfY3ZfY2Nfd2V4dHJhPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBQ19TVUJTVChXRVhUUkEpCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2Nfd2V4dHJhIiA9IHh5ZXNdLCBbV0VYVFJBPS1XZXh0cmFdLCBbV0VYVFJBPS1XXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1mZ251ODktaW5saW5lIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY19nbnU4OV9pbmxpbmUsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtZmdudTg5LWlubGluZSAtV2Vycm9yIgorK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyt2b2lkIGZvbyAodm9pZCkKKyt7CisrICBpbmxpbmUgdm9pZCBiYXIgKHZvaWQpIHt9CisrICBiYXIgKCk7CisrfQorK2V4dGVybiBpbmxpbmUgdm9pZCBiYXogKHZvaWQpIHt9CisrXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lPXllcywgYWNfY3ZfY2NfZ251ODlfaW5saW5lPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY19nbnU4OV9pbmxpbmUiID0geHllc10sCisrICAgICAgW1dFWFRSQT0iJHtXRVhUUkE6KyRXRVhUUkEgfS1mZ251ODktaW5saW5lIl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uXSwKKysJICAgICAgIGFjX2N2X2FzX25lZWRlZCwgW2RubAorK2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKytpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorK0VPRgorK2lmIEFDX1RSWV9DT01NQU5EKFske0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUworKwkJCSAgICAtZlBJQyAtc2hhcmVkIC1vIGNvbmZ0ZXN0LnNvIGNvbmZ0ZXN0LmMKKysJCQkgICAgLVdsLC0tYXMtbmVlZGVkIDE+JkFTX01FU1NBR0VfTE9HX0ZEXSkKKyt0aGVuCisrICBhY19jdl9hc19uZWVkZWQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfYXNfbmVlZGVkPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCpdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2FzX25lZWRlZCIgPSB4eWVzXSwKKysgICAgICBbTERfQVNfTkVFREVEPS1XbCwtLWFzLW5lZWRlZF0sIFtMRF9BU19ORUVERUQ9XSkKKytBQ19TVUJTVChMRF9BU19ORUVERUQpCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fcG9wY291bnRdLCBhY19jdl9wb3Bjb3VudCwgW2RubAorK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbZXhpdCAoX19idWlsdGluX3BvcGNvdW50ICgxMjcpKTtdXSldLAorKwkgICAgICAgYWNfY3ZfcG9wY291bnQ9eWVzLCBhY19jdl9wb3Bjb3VudD1ubyldKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3BvcGNvdW50IiA9IHh5ZXNdLAorKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9QT1BDT1VOVF0sIFsxXSwgW0hhdmUgX19idWlsdGluX3BvcGNvdW50Ll0pXSkKKysKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fdGhyZWFkIHN1cHBvcnRdLCBhY19jdl90bHMsIFtkbmwKKyAjIFVzZSB0aGUgc2FtZSBmbGFncyB0aGF0IHdlIHVzZSBmb3Igb3VyIERTT3MsIHNvIHRoZSB0ZXN0IGlzIHJlcHJlc2VudGF0aXZlLgorICMgU29tZSBvbGQgY29tcGlsZXIvbGlua2VyL2xpYmMgY29tYmluYXRpb25zIGZhaWwgc29tZSB3YXlzIGFuZCBub3Qgb3RoZXJzLgorQEAgLTg4LDcgKzEzNiwxMCBAQAorIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKKyBBU19JRihbdGVzdCAieCRhY19jdl90bHMiICE9IHh5ZXNdLAorLSAgICAgIEFDX01TR19FUlJPUihbX190aHJlYWQgc3VwcG9ydCByZXF1aXJlZF0pKQorKyAgICAgIFtBU19JRihbdGVzdCAiJHVzZV9sb2NrcyIgPSB5ZXNdLAorKwkgICAgIFtBQ19NU0dfRVJST1IoWy0tZW5hYmxlLXRocmVhZC1zYWZldHkgcmVxdWlyZXMgX190aHJlYWQgc3VwcG9ydF0pXSwKKysJICAgICBbQUNfREVGSU5FKFtfX3RocmVhZF0sIFsvKiBlbXB0eTogbm8gbXVsdGktdGhyZWFkIHN1cHBvcnQgKi9dLAorKwkJCVtTdHViYmVkIG91dCBpZiBtaXNzaW5nIGNvbXBpbGVyIHN1cHBvcnQuXSldKV0pCisgCisgZG5sIFRoaXMgdGVzdCBtdXN0IGNvbWUgYXMgZWFybHkgYXMgcG9zc2libGUgYWZ0ZXIgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24KKyBkbmwgdGVzdHMsIGJlY2F1c2UgdGhlIGNob2ljZSBvZiB0aGUgZmlsZSBtb2RlbCBjYW4gKGluIHByaW5jaXBsZSkgYWZmZWN0CitAQCAtMjUxLDcgKzMwMiw3IEBACisgCisgIyAxLjIzNDx3aGF0ZXZlcj4gLT4gMTIzNDx3aGF0ZXZlcj4KKyBjYXNlICIkUEFDS0FHRV9WRVJTSU9OIiBpbgorLVtbMC05XV0uKikgZXVfdmVyc2lvbj0iJHtQQUNLQUdFX1ZFUlNJT04vLi99IiA7OworK1tbMC05XV0uKikgZXVfdmVyc2lvbj1gZWNobyAiJFBBQ0tBR0VfVkVSU0lPTiIgfCBzZWQgJ3NAXC5AQCdgIDs7CisgKikgICAgIAkgICBBQ19NU0dfRVJST1IoW2NvbmZ1c2VkIGJ5IHZlcnNpb24gbnVtYmVyICckUEFDS0FHRV9WRVJTSU9OJ10pIDs7CisgZXNhYworIGNhc2UgIiRldV92ZXJzaW9uIiBpbgorQEAgLTI4MCw2ICszMzEsNiBAQAorIGVzYWMKKyAKKyAjIFJvdW5kIHVwIHRvIHRoZSBuZXh0IHJlbGVhc2UgQVBJICh4LnkpIHZlcnNpb24uCistW2V1X3ZlcnNpb249JFsoJGV1X3ZlcnNpb24gKyA5OTkpIC8gMTAwMF1dCisrZXVfdmVyc2lvbj1gZXhwciBcKCAkZXVfdmVyc2lvbiArIDk5OSBcKSAvIDEwMDBgCisgCisgQUNfT1VUUFVUCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliL0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNCw2ICsxNCw5IEBACisgCisgMjAwOS0wMS0yMyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBldS1jb25maWcuaCBbISBIQVZFX0JVSUxUSU5fUE9QQ09VTlRdCisrCShfX2J1aWx0aW5fcG9wY291bnQpOiBOZXcgaW5saW5lIGZ1bmN0aW9uLgorKworIAkqIGV1LWNvbmZpZy5oOiBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24uCisgCisgMjAwOS0wMS0xNyAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtNzAsNiArNzMsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZXVfYV9TT1VSQ0VTKTogQWRkIGl0LgorIAkqIHN5c3RlbS5oOiBEZWNsYXJlIGNyYzMyX2ZpbGUuCisgCisrMjAwNS0wMi0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA0LTMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbTogVXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMgZm9yIHhtYWxsb2MuYy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWIvZXUtY29uZmlnLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYi9ldS1jb25maWcuaAkyMDA5LTA4LTEyIDE0OjIzOjIyLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYi9ldS1jb25maWcuaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE4Miw2ICsxODIsMTcgQEAKKyAvKiBUaGlzIG1hY3JvIGlzIHVzZWQgYnkgdGhlIHRlc3RzIGNvbmRpdGlvbmFsaXplIGZvciBzdGFuZGFsb25lIGJ1aWxkaW5nLiAgKi8KKyAjZGVmaW5lIEVMRlVUSUxTX0hFQURFUihuYW1lKSA8bGliIyNuYW1lLmg+CisgCisrI2lmbmRlZiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQKKysjIGRlZmluZSBfX2J1aWx0aW5fcG9wY291bnQgaGFrbWVtX3BvcGNvdW50Cisrc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCisraGFrbWVtX3BvcGNvdW50ICh1bnNpZ25lZCBpbnQgeCkKKyt7CisrICAvKiBIQUtNRU0gMTY5ICovCisrICB1bnNpZ25lZCBpbnQgbiA9IHggLSAoKHggPj4gMSkgJiAwMzMzMzMzMzMzMzMpIC0gKCh4ID4+IDIpICYgMDExMTExMTExMTExKTsKKysgIHJldHVybiAoKG4gKyAobiA+PiAzKSkgJiAwMzA3MDcwNzA3MDcpICUgNjM7CisrfQorKyNlbmRpZgkvKiBIQVZFX0JVSUxUSU5fUE9QQ09VTlQgKi8KKysKKyAKKyAjaWZkZWYgU0hBUkVECisgIyBkZWZpbmUgT0xEX1ZFUlNJT04obmFtZSwgdmVyc2lvbikgXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmFzbS9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJhc20vQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjcsNiArNjcsMTEgQEAKKyAJKiBhc21fZXJyb3IuYzogQWRkIG5ldyBlcnJvciBBU01fRV9JT0VSUk9SLgorIAkqIGxpYmFzbVAuaDogQWRkIEFTTV9FX0lPRVJST1IgZGVmaW5pdGlvbi4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtOSw2ICs5LDkgQEAKKyAKKyAyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGkzODZfZGlzYXNtLmMgKGkzODZfZGlzYXNtKTogQWRkIGFib3J0IGFmdGVyIGFzc2VydC1jb25zdGFudCBmb3Igb2xkCisrCWNvbXBpbGVycyB0aGF0IGRvbid0IHJlYWxpemUgaXQncyBub3JldHVybi4KKysKKyAJKiBNYWtlZmlsZS5hbSAoaTM4Nl9wYXJzZV9DRkxBR1MpOiBVc2UgcXVvdGVzIGFyb3VuZCBjb21tYW5kCisgCXN1YnN0aXR1dGlvbiB0aGF0IGNhbiBwcm9kdWNlIGxlYWRpbmcgd2hpdGVzcGFjZS4KKyAKK0BAIC0zMzgsNiArMzQxLDExIEBACisgCSogZGVmcy9pMzg2LmRvYzogTmV3IGZpbGUuCisgCSogZGVmcy94ODZfNjQ6IE5ldyBmaWxlLgorIAorKzIwMDUtMDQtMDQgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluc3RlYWQgb2YgLVdleHRyYS4KKysKKyAyMDA1LTAyLTE1ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZSAoQU1fQ0ZMQUdTKTogQWRkIC1XdW51c2VkIC1XZXh0cmEgLVdmb3JtYXQ9Mi4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvaTM4Nl9kaXNhc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliY3B1L2kzODZfZGlzYXNtLmMJMjAwOS0wMS0wOCAyMDo1NjozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJjcHUvaTM4Nl9kaXNhc20uYwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTc5MSw2ICs3OTEsNyBAQAorIAorIAkJCWRlZmF1bHQ6CisgCQkJICBhc3NlcnQgKCEgIklOVkFMSUQgbm90IGhhbmRsZWQiKTsKKysJCQkgIGFib3J0ICgpOworIAkJCX0KKyAJCSAgICB9CisgCQkgIGVsc2UKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkdy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L0NoYW5nZUxvZwkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTI3Niw2ICsyNzYsMTAgQEAKKyAKKyAJKiBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZS5jOiBJbnRlZ3JhdGUgRFdfQVRfc3BlY2lmaWNhdGlvbiB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJkdy5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZHdhcmZfZ2V0c2NvcGV2YXIuYzogVXNlIGR3YXJmX2RpZW5hbWUuCitAQCAtMTA0NCw2ICsxMDQ4LDExIEBACisgCisgMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIGR3YXJmX2Zvcm1yZWZfZGllLmMgKGR3YXJmX2Zvcm1yZWZfZGllKTogQWRkIENVIGhlYWRlciBvZmZzZXQgdG8KKyAJZm9ybXJlZiBvZmZzZXQuCisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvbGliZHcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHcvbGliZHcuaAkyMDEwLTA2LTI4IDE5OjA1OjU2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmR3L2xpYmR3LmgJMjAxMC0wNy0wMyAxMzowNDowNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC04NDIsNyArODQyLDcgQEAKKyAKKyAKKyAvKiBJbmxpbmUgb3B0aW1pemF0aW9ucy4gICovCistI2lmZGVmIF9fT1BUSU1JWkVfXworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAvKiBSZXR1cm4gYXR0cmlidXRlIGNvZGUgb2YgZ2l2ZW4gYXR0cmlidXRlLiAgKi8KKyBfX2xpYmR3X2V4dGVybl9pbmxpbmUgdW5zaWduZWQgaW50CisgZHdhcmZfd2hhdGF0dHIgKER3YXJmX0F0dHJpYnV0ZSAqYXR0cikKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJkd2ZsL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZHdmbC9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJkd2ZsL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTEyNjUsNiArMTI2NSwxMSBAQAorIAorIDIwMDUtMDctMjEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisrMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKyAJKiBNYWtlZmlsZS5hbSAobm9pbnN0X0hFQURFUlMpOiBBZGQgbG9jMmMuYy4KKyAKKyAJKiB0ZXN0Mi5jIChtYWluKTogQ2hlY2sgc3NjYW5mIHJlc3VsdCB0byBxdWlldCB3YXJuaW5nLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVibC9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVibC9DaGFuZ2VMb2cJMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlYmwvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjI0LDYgKzYyNCwxMSBAQAorIAkqIE1ha2VmaWxlLmFtIChsaWJlYmxfKl9zb19TT1VSQ0VTKTogU2V0IHRvICQoKl9TUkNTKSBzbyBkZXBlbmRlbmN5CisgCXRyYWNraW5nIHdvcmtzIHJpZ2h0LgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGliZWJsX3g4Nl82NC5tYXA6IEFkZCB4ODZfNjRfY29yZV9ub3RlLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9DaGFuZ2VMb2cJMjAxMC0wNi0xNCAyMToxNzoyMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDcuMDAwMDAwMDAwICswMDAwCitAQCAtNjU3LDYgKzY1NywxMSBAQAorIAorIAkqIGVsZi5oOiBVcGRhdGUgZnJvbSBnbGliYy4KKyAKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIDIwMDUtMDUtMDggIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZWxmX2JlZ2luLmMgKHJlYWRfZmlsZSkgW19NVURGTEFQXTogRG9uJ3QgdXNlIG1tYXAgZm9yIG5vdy4KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvY29tbW9uLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9jb21tb24uaAkyMDA5LTAxLTA4IDIwOjU2OjM2LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9jb21tb24uaAkyMDEwLTA3LTAzIDEzOjA0OjA3LjAwMDAwMDAwMCArMDAwMAorQEAgLTE2MCw3ICsxNjAsNyBAQAorICAgKFZhcikgPSAoc2l6ZW9mIChWYXIpID09IDEJCQkJCQkgICAgICBcCisgCSAgID8gKHVuc2lnbmVkIGNoYXIpIChWYXIpCQkJCQkgICAgICBcCisgCSAgIDogKHNpemVvZiAoVmFyKSA9PSAyCQkJCQkJICAgICAgXAorLQkgICAgICA/IGJzd2FwXzE2IChWYXIpCQkJCQkJICAgICAgXAorKwkgICAgICA/ICh1bnNpZ25lZCBzaG9ydCBpbnQpIGJzd2FwXzE2IChWYXIpCQkJICAgICAgXAorIAkgICAgICA6IChzaXplb2YgKFZhcikgPT0gNAkJCQkJICAgICAgXAorIAkJID8gYnN3YXBfMzIgKFZhcikJCQkJCSAgICAgIFwKKyAJCSA6IGJzd2FwXzY0IChWYXIpKSkpCitAQCAtMTY5LDcgKzE2OSw3IEBACisgICAoRHN0KSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvYWRkcjJsaW5lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9hZGRyMmxpbmUuYwkyMDEwLTA1LTI4IDE0OjM4OjMwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9hZGRyMmxpbmUuYwkyMDEwLTA3LTAzIDEzOjA1OjQwLjAwMDAwMDAwMCArMDAwMAorQEAgLTQ0NywxMCArNDQ3LDEwIEBACisgICAgICAgYm9vbCBwYXJzZWQgPSBmYWxzZTsKKyAgICAgICBpbnQgaSwgajsKKyAgICAgICBjaGFyICpuYW1lID0gTlVMTDsKKy0gICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorKyAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglYVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisgCSAgJiYgc3RyaW5nW2ldID09ICdcMCcpCisgCXBhcnNlZCA9IGFkanVzdF90b19zZWN0aW9uIChuYW1lLCAmYWRkciwgZHdmbCk7CistICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVtW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKyAJeworIAlkZWZhdWx0OgorIAkgIGJyZWFrOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTY1LDggKzE2NSwxNiBAQAorIAkqIHJlYWRlbGYuYyAoYXR0cl9jYWxsYmFjayk6IFVzZSBwcmludF9ibG9jayBvbmx5IHdoZW4gd2UgZG9uJ3QgdXNlCisgCXByaW50X29wcy4KKyAKKysyMDA5LTA4LTE3ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGxkLmg6IERpc2FibGUgZXh0ZXJuIGlubGluZXMgZm9yIEdDQyA0LjIuCisrCisgMjAwOS0wOC0xNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBzdHJpbmdzLmMgKHJlYWRfYmxvY2spOiBDb25kaXRpb25hbGl6ZSBwb3NpeF9mYWR2aXNlIHVzZQorKwlvbiBbUE9TSVhfRkFEVl9TRVFVRU5USUFMXS4KKysJRnJvbSBQZXRyIFNhbGluZ2VyIDxQZXRyLlNhbGluZ2VyQHNlem5hbS5jej4uCisrCisgCSogYXIuYyAoZG9fb3Blcl9leHRyYWN0KTogVXNlIHBhdGhjb25mIGluc3RlYWQgb2Ygc3RhdGZzLgorIAorIDIwMDktMDgtMDEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTMzMCw2ICszMzgsOCBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfZnJhbWVfc2VjdGlvbik6IFVzZSB0IGluc3RlYWQgb2YgaiBmb3JtYXRzCisgCWZvciBwdHJkaWZmX3QgT0ZGU0VULgorIAorKwkqIGFkZHIybGluZS5jIChoYW5kbGVfYWRkcmVzcyk6IFVzZSAlYSBpbnN0ZWFkIG9mICVtIGZvciBjb21wYXRpYmlsaXR5LgorKworIDIwMDktMDEtMjEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfcHJvZ3JhbV9oZWFkZXIpOiBGaXggdHlwbyBpbiAuZWhfZnJhbWVfaGRyIHNlY3Rpb24KK0BAIC01MTMsNiArNTIzLDExIEBACisgCXRoYXQgbWF0Y2hlcyBpdHMgUFRfTE9BRCdzIHBfZmxhZ3MgJn4gUEZfVy4gIE9uIHNwYXJjLCBQRl9YIHJlYWxseQorIAlpcyB2YWxpZCBpbiBSRUxSTy4KKyAKKysyMDA4LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoZHVtcF9hcmNoaXZlX2luZGV4KTogVHdlYWsgcG9ydGFiaWxpdHkgaGFjaworKwl0byBtYXRjaCBbX19HTlVDX18gPCA0XSB0b28uCisrCisgMjAwOC0wMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2F0dHJpYnV0ZXMpOiBBZGQgYSBjYXN0LgorQEAgLTc2NCw2ICs3NzksOCBAQAorIAorIAkqIHJlYWRlbGYuYyAoaGV4X2R1bXApOiBGaXggcm91bmRpbmcgZXJyb3IgaW4gd2hpdGVzcGFjZSBjYWxjdWxhdGlvbi4KKyAKKysJKiBNYWtlZmlsZS5hbSAocmVhZGVsZl9ub19XZXJyb3IpOiBOZXcgdmFyaWFibGUuCisrCisgMjAwNy0xMC0xNSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBtYWtlLWRlYnVnLWFyY2hpdmUuaW46IE5ldyBmaWxlLgorQEAgLTEyMDMsNiArMTIyMCwxMCBAQAorIAkqIGVsZmxpbnQuYyAodmFsaWRfZV9tYWNoaW5lKTogQWRkIEVNX0FMUEhBLgorIAlSZXBvcnRlZCBieSBDaHJpc3RpYW4gQWljaGluZ2VyIDxHcmVlazBAZ214Lm5ldD4uCisgCisrCSogc3RyaW5ncy5jIChtYXBfZmlsZSk6IERlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgdG8KKysJTUFEVl9TRVFVRU5USUFMIGlmIHVuZGVmaW5lZC4gIAlEb24ndCBjYWxsIHBvc2l4X21hZHZpc2UKKysJaWYgbmVpdGhlciBpcyBkZWZpbmVkLgorKworIDIwMDYtMDgtMDggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGVsZmxpbnQuYyAoY2hlY2tfZHluYW1pYyk6IERvbid0IHJlcXVpcmUgRFRfSEFTSCBmb3IgRFRfU1lNVEFCLgorQEAgLTEyNzksNiArMTMwMCwxMCBAQAorIAkqIE1ha2VmaWxlLmFtOiBBZGQgaGFja3MgdG8gY3JlYXRlIGRlcGVuZGVuY3kgZmlsZXMgZm9yIG5vbi1nZW5lcmljCisgCWxpbmtlci4KKyAKKysyMDA2LTA0LTA1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHN0cmluZ3MuYyAoTUFQX1BPUFVMQVRFKTogRGVmaW5lIHRvIDAgaWYgdW5kZWZpbmVkLgorKworIDIwMDYtMDYtMTIgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIGxkZ2VuZXJpYy5jIChsZF9nZW5lcmljX2dlbmVyYXRlX3NlY3Rpb25zKTogRG9uJ3QgY3JlYXRlIC5pbnRlcnAKK0BAIC0xNjI3LDYgKzE2NTIsMTEgQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xvY19zZWN0aW9uKTogRml4IGluZGVudGF0aW9uIGZvciBsYXJnZXIKKyAJYWRkcmVzcyBzaXplLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0zMCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2xpbmVfc2VjdGlvbik6IFByaW50IHNlY3Rpb24gb2Zmc2V0IG9mIGVhY2gKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZmluZHRleHRyZWwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2ZpbmR0ZXh0cmVsLmMJMjAwOS0wMi0xMSAwMToxMjo1OS4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvZmluZHRleHRyZWwuYwkyMDEwLTA3LTAzIDEzOjA0OjA4LjAwMDAwMDAwMCArMDAwMAorQEAgLTQ5MCw3ICs0OTAsMTEgQEAKKyAKKyAKKyBzdGF0aWMgdm9pZAorLWNoZWNrX3JlbCAoc2l6ZV90IG5zZWdtZW50cywgc3RydWN0IHNlZ21lbnRzIHNlZ21lbnRzW25zZWdtZW50c10sCisrY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbCisrI2lmIF9fR05VQ19fID49IDQKKysJCQkJCQkgICAgICBuc2VnbWVudHMKKysjZW5kaWYKKysJICAgXSwKKyAJICAgR0VsZl9BZGRyIGFkZHIsIEVsZiAqZWxmLCBFbGZfU2NuICpzeW1zY24sIER3YXJmICpkdywKKyAJICAgY29uc3QgY2hhciAqZm5hbWUsIGJvb2wgbW9yZV90aGFuX29uZSwgdm9pZCAqKmtub3duc3JjcykKKyB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZC5oCTIwMDktMDYtMTMgMjI6Mzk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkLmgJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTIyLDYgKzExMjIsNyBAQAorIAorIC8qIENoZWNrZWQgd2hldGhlciB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBmcm9tIGEgRFNPLiAgKi8KKyBleHRlcm4gYm9vbCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpOworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorICNlbmRpZgorQEAgLTExMzksNSArMTE0MCw2IEBACisgCisgICByZXR1cm4gc3ltLT5kZWZpbmVkICYmIHN5bS0+aW5fZHNvOworIH0KKysjZW5kaWYJLyogT3B0aW1pemluZyBhbmQgbm90IEdDQyA0LjIuICAqLworIAorICNlbmRpZgkvKiBsZC5oICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wMy0wNSAwNTo0ODoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvTWFrZWZpbGUuYW0JMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC05OSw2ICs5OSw5IEBACisgIyBYWFggV2hpbGUgdGhlIGZpbGUgaXMgbm90IGZpbmlzaGVkLCBkb24ndCB3YXJuIGFib3V0IHRoaXMKKyBsZGdlbmVyaWNfbm9fV3VudXNlZCA9IHllcworIAorKyMgQnVnZ3kgb2xkIGNvbXBpbGVycy4KKytyZWFkZWxmX25vX1dlcnJvciA9IHllcworKworIHJlYWRlbGZfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVibCkgJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkgLWxkbAorIG5tX0xEQUREID0gJChsaWJkdykgJChsaWJlYmwpICQobGliZWxmKSAkKGxpYmV1KSAkKGxpYm11ZGZsYXApIC1sZGwKKyBzaXplX0xEQUREID0gJChsaWJlbGYpICQobGliZXUpICQobGlibXVkZmxhcCkKKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9yZWFkZWxmLmMJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9zcmMvcmVhZGVsZi5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtNzg0NSw3ICs3ODQ1LDcgQEAKKyAJICBpZiAodW5saWtlbHkgKGVsZl9yYW5kIChlbGYsIGFzX29mZikgPT0gMCkKKyAJICAgICAgfHwgdW5saWtlbHkgKChzdWJlbGYgPSBlbGZfYmVnaW4gKC0xLCBFTEZfQ19SRUFEX01NQVAsIGVsZikpCisgCQkJICAgPT0gTlVMTCkpCistI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpCisrI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpIHx8IF9fR05VQ19fIDwgNAorIAkgICAgd2hpbGUgKDEpCisgI2VuZGlmCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmluZ3MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3N0cmluZ3MuYwkyMDA5LTAyLTExIDAxOjEyOjU5LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpbmdzLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC01MSw2ICs1MSwxMCBAQAorIAorICNpbmNsdWRlIDxzeXN0ZW0uaD4KKyAKKysjaWZuZGVmIE1BUF9QT1BVTEFURQorKyMgZGVmaW5lIE1BUF9QT1BVTEFURSAwCisrI2VuZGlmCisrCisgCisgLyogUHJvdG90eXBlcyBvZiBsb2NhbCBmdW5jdGlvbnMuICAqLworIHN0YXRpYyBpbnQgcmVhZF9mZCAoaW50IGZkLCBjb25zdCBjaGFyICpmbmFtZSwgb2ZmNjRfdCBmZGxlbik7CitAQCAtNDkxLDggKzQ5NSwxMyBAQAorIAkJICAgIGZkLCBzdGFydF9vZmYpOworICAgICAgIGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkKKyAJeworKyNpZiAhZGVmaW5lZCBQT1NJWF9NQURWX1NFUVVFTlRJQUwgJiYgZGVmaW5lZCBNQURWX1NFUVVFTlRJQUwKKysjIGRlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgTUFEVl9TRVFVRU5USUFMCisrI2VuZGlmCisrI2lmZGVmIFBPU0lYX01BRFZfU0VRVUVOVElBTAorIAkgIC8qIFdlIHdpbGwgZ28gdGhyb3VnaCB0aGUgbWFwcGluZyBzZXF1ZW50aWFsbHkuICAqLworIAkgICh2b2lkKSBwb3NpeF9tYWR2aXNlIChtZW0sIG1hcF9zaXplLCBQT1NJWF9NQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorIAkgIGJyZWFrOworIAl9CisgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9NRU0pCitAQCAtNTg2LDkgKzU5NSwxMSBAQAorICAgICAgIGVsZm1hcF9vZmYgPSBmcm9tICYgfihwcyAtIDEpOworICAgICAgIGVsZm1hcF9iYXNlID0gZWxmbWFwID0gbWFwX2ZpbGUgKGZkLCBlbGZtYXBfb2ZmLCBmZGxlbiwgJmVsZm1hcF9zaXplKTsKKyAKKysjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCisgICAgICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCisgCS8qIExldCB0aGUga2VybmVsIGtub3cgd2UgYXJlIGdvaW5nIHRvIHJlYWQgZXZlcnl0aGluZyBpbiBzZXF1ZW5jZS4gICovCisgCSh2b2lkKSBwb3NpeF9mYWR2aXNlIChmZCwgMCwgMCwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgaWYgKHVubGlrZWx5IChlbGZtYXAgPT0gTUFQX0ZBSUxFRCkpCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9zdHJpcC5jCTIwMTAtMDEtMTUgMDk6MDU6NTUuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL3N0cmlwLmMJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC01Myw2ICs1MywxMiBAQAorICNpbmNsdWRlIDxsaWJlYmwuaD4KKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmZGVmIEhBVkVfRlVUSU1FUworKyMgZGVmaW5lIEZVVElNRVMoZmQsIGZuYW1lLCB0dnApIGZ1dGltZXMgKGZkLCB0dnApCisrI2Vsc2UKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSB1dGltZXMgKGZuYW1lLCB0dnApCisrI2VuZGlmCisrCisgCisgLyogTmFtZSBhbmQgdmVyc2lvbiBvZiBwcm9ncmFtLiAgKi8KKyBzdGF0aWMgdm9pZCBwcmludF92ZXJzaW9uIChGSUxFICpzdHJlYW0sIHN0cnVjdCBhcmdwX3N0YXRlICpzdGF0ZSk7CitAQCAtMzAxLDggKzMwNywxOCBAQAorIAorICAgICAgIC8qIElmIHdlIGhhdmUgdG8gcHJlc2VydmUgdGhlIHRpbWVzdGFtcCwgd2UgbmVlZCBpdCBpbiB0aGUKKyAJIGZvcm1hdCB1dGltZXMoKSB1bmRlcnN0YW5kcy4gICovCisrI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQVRJTQorICAgICAgIFRJTUVTUEVDX1RPX1RJTUVWQUwgKCZ0dlswXSwgJnByZV9zdC5zdF9hdGltKTsKKysjZWxzZQorKyAgICAgIHR2WzBdLnR2X3NlYyA9IHByZV9zdC5zdF9hdGltZTsKKysgICAgICB0dlswXS50dl91c2VjID0gMDsKKysjZW5kaWYKKysjaWZkZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9NVElNCisgICAgICAgVElNRVNQRUNfVE9fVElNRVZBTCAoJnR2WzFdLCAmcHJlX3N0LnN0X210aW0pOworKyNlbHNlCisrICAgICAgdHZbMV0udHZfc2VjID0gcHJlX3N0LnN0X2F0aW1lOworKyAgICAgIHR2WzFdLnR2X3VzZWMgPSAwOworKyNlbmRpZgorICAgICB9CisgCisgICAvKiBPcGVuIHRoZSBmaWxlLiAgKi8KK0BAIC0xNzQ3LDcgKzE3NjMsNyBAQAorICAgLyogSWYgcmVxdWVzdGVkLCBwcmVzZXJ2ZSB0aGUgdGltZXN0YW1wLiAgKi8KKyAgIGlmICh0dnAgIT0gTlVMTCkKKyAgICAgeworLSAgICAgIGlmIChmdXRpbWVzIChmZCwgdHZwKSAhPSAwKQorKyAgICAgIGlmIChGVVRJTUVTIChmZCwgb3V0cHV0X2ZuYW1lLCB0dnApICE9IDApCisgCXsKKyAJICBlcnJvciAoMCwgZXJybm8sIGdldHRleHQgKCJcCisgY2Fubm90IHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBkYXRlIG9mICclcyciKSwKK0BAIC0xODA0LDcgKzE4MjAsNyBAQAorIAorICAgaWYgKHR2cCAhPSBOVUxMKQorICAgICB7CistICAgICAgaWYgKHVubGlrZWx5IChmdXRpbWVzIChmZCwgdHZwKSAhPSAwKSkKKysgICAgICBpZiAodW5saWtlbHkgKEZVVElNRVMgKGZkLCBmbmFtZSwgdHZwKSAhPSAwKSkKKyAJeworIAkgIGVycm9yICgwLCBlcnJubywgZ2V0dGV4dCAoIlwKKyBjYW5ub3Qgc2V0IGFjY2VzcyBhbmQgbW9kaWZpY2F0aW9uIGRhdGUgb2YgJyVzJyIpLCBmbmFtZSk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvdGVzdHMvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9DaGFuZ2VMb2cJMjAxMC0wNi0yOCAxOTowNTo1Ni4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC90ZXN0cy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNDowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTQsNiArMTU0LDggQEAKKyAKKyAyMDA4LTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGxpbmUyYWRkci5jIChtYWluKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorKworIAkqIHRlc3RmaWxlNDUuUy5iejI6IEFkZCB0ZXN0cyBmb3IgY2x0cSwgY3F0by4KKyAJKiB0ZXN0ZmlsZTQ1LmV4cGVjdC5iejI6IEFkanVzdC4KKyAKK0BAIC04NjIsNiArODY0LDExIEBACisgCSogTWFrZWZpbGUuYW0gKFRFU1RTKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2guCisgCShFWFRSQV9ESVNUKTogQWRkIHJ1bi1lbGZsaW50LXRlc3Quc2ggYW5kIHRlc3RmaWxlMTguYnoyLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0yNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZ2V0LWZpbGVzLmMgKG1haW4pOiBVc2UgY29ycmVjdCBmb3JtYXQgc3BlY2lmaWVyLgorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy90ZXN0cy9saW5lMmFkZHIuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3Rlc3RzL2xpbmUyYWRkci5jCTIwMTAtMDctMDMgMTM6MDQ6MDguMDAwMDAwMDAwICswMDAwCitAQCAtMTMyLDcgKzEzMiw3IEBACisgICAgIHsKKyAgICAgICBzdHJ1Y3QgYXJncyBhID0geyAuYXJnID0gYXJndltjbnRdIH07CisgCistICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJW1bXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKGEuYXJnLCAiJWFbXjpdOiVkIiwgJmEuZmlsZSwgJmEubGluZSkpCisgCXsKKyAJZGVmYXVsdDoKKyAJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3JlZGhhdC1yb2J1c3RpZnkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzOTg1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZWRoYXQtcm9idXN0aWZ5LmRpZmYKQEAgLTAsMCArMSwxNzA5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvQ2hhbmdlTG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvQ2hhbmdlTG9nCTIwMTAtMDctMDMgMTM6MDc6MTAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTY0OSwxMCArNjQ5LDUzIEBACisgCUlmIHNlY3Rpb24gY29udGVudCBoYXNuJ3QgYmVlbiByZWFkIHlldCwgZG8gaXQgYmVmb3JlIGxvb2tpbmcgZm9yIHRoZQorIAlibG9jayBzaXplLiAgSWYgbm8gc2VjdGlvbiBkYXRhIHByZXNlbnQsIGluZmVyIHNpemUgb2Ygc2VjdGlvbiBoZWFkZXIuCisgCisrMjAwNS0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogbGliZWxmUC5oIChJTlZBTElEX05EWCk6IERlZmluZS4KKysJKiBnZWxmX2dldGR5bi5jIChnZWxmX2dldGR5bik6IFVzZSBpdC4gIFJlbW92ZSBuZHggPCAwIHRlc3QgaWYgYW55LgorKwkqIGdlbGZfZ2V0bGliLmMgKGdlbGZfZ2V0bGliKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRtb3ZlLmMgKGdlbGZfZ2V0bW92ZSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0cmVsLmMgKGdlbGZfZ2V0cmVsKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRyZWxhLmMgKGdlbGZfZ2V0cmVsYSk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltLmMgKGdlbGZfZ2V0c3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl9nZXRzeW1pbmZvLmMgKGdlbGZfZ2V0c3ltaW5mbyk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0c3ltc2huZHguYyAoZ2VsZl9nZXRzeW1zaG5keCk6IExpa2V3aXNlLgorKwkqIGdlbGZfZ2V0dmVyc3ltLmMgKGdlbGZfZ2V0dmVyc3ltKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfZHluLmMgKGdlbGZfdXBkYXRlX2R5bik6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX2xpYi5jIChnZWxmX3VwZGF0ZV9saWIpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9tb3ZlLmMgKGdlbGZfdXBkYXRlX21vdmUpOiBMaWtld2lzZS4KKysJKiBnZWxmX3VwZGF0ZV9yZWwuYyAoZ2VsZl91cGRhdGVfcmVsKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfcmVsYS5jIChnZWxmX3VwZGF0ZV9yZWxhKTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfc3ltLmMgKGdlbGZfdXBkYXRlX3N5bSk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bWluZm8uYyAoZ2VsZl91cGRhdGVfc3ltaW5mbyk6IExpa2V3aXNlLgorKwkqIGdlbGZfdXBkYXRlX3N5bXNobmR4LmMgKGdlbGZfdXBkYXRlX3N5bXNobmR4KTogTGlrZXdpc2UuCisrCSogZ2VsZl91cGRhdGVfdmVyc3ltLmMgKGdlbGZfdXBkYXRlX3ZlcnN5bSk6IExpa2V3aXNlLgorKwkqIGVsZl9uZXdzY24uYyAoZWxmX25ld3Njbik6IENoZWNrIGZvciBvdmVyZmxvdy4KKysJKiBlbGYzMl91cGRhdGVmaWxlLmMgKF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVtbWFwKSk6IExpa2V3aXNlLgorKwkoX19lbGZ3MihMSUJFTEZCSVRTLHVwZGF0ZWZpbGUpKTogTGlrZXdpc2UuCisrCSogZWxmX2JlZ2luLmMgKGZpbGVfcmVhZF9lbGYpOiBMaWtld2lzZS4KKysJKiBlbGYzMl9uZXdwaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsbmV3cGhkcikpOiBMaWtld2lzZS4KKysJKiBlbGZfZ2V0YXJzeW0uYyAoZWxmX2dldGFyc3ltKTogTGlrZXdpc2UuCisrCSogZWxmMzJfZ2V0c2hkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHNoZHIpKTogTGlrZXdpc2UuCisgMjAwNS0wNS0xMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmLmg6IFVwZGF0ZSBhZ2Fpbi4KKyAKKysyMDA1LTA1LTE3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysJKiBlbGYzMl9nZXRwaGRyLmMgKGVsZncyKExJQkVMRkJJVFMsZ2V0cGhkcikpOiBDaGVjayBpZiBwcm9ncmFtIGhlYWRlcgorKwl0YWJsZSBmaXRzIGludG8gb2JqZWN0J3MgYm91bmRzLgorKwkqIGVsZl9nZXRzaHN0cm5keC5jIChlbGZfZ2V0c2hzdHJuZHgpOiBBZGQgZWxmLT5zdGFydF9vZmZzZXQgdG8KKysJZWxmLT5tYXBfYWRkcmVzcy4gIENoZWNrIGlmIGZpcnN0IHNlY3Rpb24gaGVhZGVyIGZpdHMgaW50byBvYmplY3QncworKwlib3VuZHMuCisrCSogZWxmMzJfZ2V0c2hkci5jIChlbGZ3MihMSUJFTEZCSVRTLGdldHNoZHIpKToKKysJQ2hlY2sgaWYgc2VjdGlvbiBoZWFkZXIgdGFibGUgZml0cyBpbnRvIG9iamVjdCdzIGJvdW5kcy4KKysJKiBlbGZfYmVnaW4uYyAoZ2V0X3NobnVtKTogRW5zdXJlIHNlY3Rpb24gaGVhZGVycyBmaXRzIGludG8KKysJb2JqZWN0J3MgYm91bmRzLgorKwkoZmlsZV9yZWFkX2VsZik6IE1ha2Ugc3VyZSBzY25jbnQgaXMgc21hbGwgZW5vdWdoIHRvIGFsbG9jYXRlIGJvdGgKKysJRWxmWFhfU2hkciBhbmQgRWxmX1NjbiBhcnJheS4gIE1ha2Ugc3VyZSBzZWN0aW9uIGFuZCBwcm9ncmFtIGhlYWRlcgorKwl0YWJsZXMgZml0IGludG8gb2JqZWN0J3MgYm91bmRzLiAgQXZvaWQgbWVtb3J5IGxlYWsgb24gZmFpbHVyZS4KKysKKyAyMDA1LTA1LTA5ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGYuaDogVXBkYXRlIGZyb20gZ2xpYmMuCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHBoZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX2dldHBoZHIuYwkyMDEwLTA0LTIxIDE0OjI2OjQwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl9nZXRwaGRyLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTQsNiArMTE0LDE2IEBACisgCisgICAgICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTCkKKyAJeworKwkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkgICAgIHZhbGlkIGFuZCBpdCBkb2VzIG5vdCBhc2sgZm9yIHRvbyBtdWNoLiAgKi8KKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfcGhvZmYgPj0gZWxmLT5tYXhpbXVtX3NpemUpCisrCSAgICAgIHx8IHVubGlrZWx5IChlbGYtPm1heGltdW1fc2l6ZSAtIGVoZHItPmVfcGhvZmYgPCBzaXplKSkKKysJICAgIHsKKysJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfUEhEUik7CisrCSAgICAgIGdvdG8gb3V0OworKwkgICAgfQorKworIAkgIC8qIEFsbCB0aGUgZGF0YSBpcyBhbHJlYWR5IG1hcHBlZC4gIFVzZSBpdC4gICovCisgCSAgdm9pZCAqZmlsZV9waGRyID0gKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MKKyAJCQkgICAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBlaGRyLT5lX3Bob2ZmKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfZ2V0c2hkci5jCTIwMDktMDYtMTMgMjI6NDE6NDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX2dldHNoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogUmV0dXJuIHNlY3Rpb24gaGVhZGVyLgorLSAgIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwNSwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OC4KKyAKK0BAIC04MSw3ICs4MSw4IEBACisgICAgIGdvdG8gb3V0OworIAorICAgc2l6ZV90IHNobnVtOworLSAgaWYgKF9fZWxmX2dldHNoZHJudW1fcmRsb2NrIChlbGYsICZzaG51bSkgIT0gMCkKKysgIGlmIChfX2VsZl9nZXRzaGRybnVtX3JkbG9jayAoZWxmLCAmc2hudW0pICE9IDAKKysgICAgICB8fCBzaG51bSA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKSkKKyAgICAgZ290byBvdXQ7CisgICBzaXplX3Qgc2l6ZSA9IHNobnVtICogc2l6ZW9mIChFbGZXMihMSUJFTEZCSVRTLFNoZHIpKTsKKyAKK0BAIC05OCw2ICs5OSwxNiBAQAorIAorICAgaWYgKGVsZi0+bWFwX2FkZHJlc3MgIT0gTlVMTCkKKyAgICAgeworKyAgICAgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKyAgICAgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBlbGYtPm1heGltdW1fc2l6ZSkKKysJICB8fCB1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBlaGRyLT5lX3Nob2ZmIDwgc2l6ZSkpCisrCXsKKysJICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJICBnb3RvIGZyZWVfYW5kX291dDsKKysJfQorKworICAgICAgIEVsZlcyKExJQkVMRkJJVFMsU2hkcikgKm5vdGN2dDsKKyAKKyAgICAgICAvKiBBbGwgdGhlIGRhdGEgaXMgYWxyZWFkeSBtYXBwZWQuICBJZiB3ZSBjb3VsZCB1c2UgaXQKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmMzJfbmV3cGhkci5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmMzJfbmV3cGhkci5jCTIwMTAtMDEtMTIgMTY6NTc6NTQuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX25ld3BoZHIuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzNSw2ICsxMzUsMTIgQEAKKyAJICAgfHwgY291bnQgPT0gUE5fWE5VTQorIAkgICB8fCBlbGYtPnN0YXRlLkVMRlcoZWxmLExJQkVMRkJJVFMpLnBoZHIgPT0gTlVMTCkKKyAgICAgeworKyAgICAgIGlmICh1bmxpa2VseSAoY291bnQgPiBTSVpFX01BWCAvIHNpemVvZiAoRWxmVzIoTElCRUxGQklUUyxQaGRyKSkpKQorKwl7CisrCSAgcmVzdWx0ID0gTlVMTDsKKysJICBnb3RvIG91dDsKKysJfQorKworICAgICAgIC8qIEFsbG9jYXRlIGEgbmV3IHByb2dyYW0gaGVhZGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZgorIAkgZWxlbWVudHMuICAqLworICAgICAgIHJlc3VsdCA9IChFbGZXMihMSUJFTEZCSVRTLFBoZHIpICopCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZjMyX3VwZGF0ZWZpbGUuYwkyMDEwLTAxLTEyIDE2OjU3OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGYzMl91cGRhdGVmaWxlLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMjMsNiArMjIzLDkgQEAKKyAgIC8qIFdyaXRlIGFsbCB0aGUgc2VjdGlvbnMuICBXZWxsLCBvbmx5IHRob3NlIHdoaWNoIGFyZSBtb2RpZmllZC4gICovCisgICBpZiAoc2hudW0gPiAwKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChzaG51bSA+IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZfU2NuICopKSkKKysgCXJldHVybiAxOworKworICAgICAgIEVsZl9TY25MaXN0ICpsaXN0ID0gJmVsZi0+c3RhdGUuRUxGVyhlbGYsTElCRUxGQklUUykuc2NuczsKKyAgICAgICBFbGZfU2NuICoqc2NucyA9IChFbGZfU2NuICoqKSBhbGxvY2EgKHNobnVtICogc2l6ZW9mIChFbGZfU2NuICopKTsKKyAgICAgICBjaGFyICpjb25zdCBzaGRyX3N0YXJ0ID0gKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorQEAgLTY0NSw2ICs2NDgsMTAgQEAKKyAgIC8qIFdyaXRlIGFsbCB0aGUgc2VjdGlvbnMuICBXZWxsLCBvbmx5IHRob3NlIHdoaWNoIGFyZSBtb2RpZmllZC4gICovCisgICBpZiAoc2hudW0gPiAwKQorICAgICB7CisrICAgICAgaWYgKHVubGlrZWx5IChzaG51bSA+IFNJWkVfTUFYIC8gKHNpemVvZiAoRWxmX1NjbiAqKQorKwkJCQkJKyBzaXplb2YgKEVsZlcyKExJQkVMRkJJVFMsU2hkcikpKSkpCisrCXJldHVybiAxOworKworICAgICAgIG9mZl90IHNoZHJfb2Zmc2V0ID0gZWxmLT5zdGFydF9vZmZzZXQgKyBlaGRyLT5lX3Nob2ZmOworICNpZiBFVl9OVU0gIT0gMgorICAgICAgIHhmY3RfdCBzaGRyX2ZjdHAgPSBfX2VsZl94ZmN0c3RvbVtfX2xpYmVsZl92ZXJzaW9uIC0gMV1bRVZfQ1VSUkVOVCAtIDFdW0VMRlcoRUxGQ0xBU1MsIExJQkVMRkJJVFMpIC0gMV1bRUxGX1RfU0hEUl07CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9iZWdpbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2JlZ2luLmMJMjAxMC0wNC0yMSAxNDoyNjo0MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjUsNyArMTY1LDggQEAKKyAKKyAgICAgICBpZiAodW5saWtlbHkgKHJlc3VsdCA9PSAwKSAmJiBlaGRyLmUzMi0+ZV9zaG9mZiAhPSAwKQorIAl7CistCSAgaWYgKGVoZHIuZTMyLT5lX3Nob2ZmICsgc2l6ZW9mIChFbGYzMl9TaGRyKSA+IG1heHNpemUpCisrCSAgaWYgKHVubGlrZWx5IChlaGRyLmUzMi0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAobWF4c2l6ZSAtIGVoZHIuZTMyLT5lX3Nob2ZmIDwgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisgCSAgICAvKiBDYW5ub3QgcmVhZCB0aGUgZmlyc3Qgc2VjdGlvbiBoZWFkZXIuICAqLworIAkgICAgcmV0dXJuIDA7CisgCitAQCAtMjEzLDcgKzIxNCw4IEBACisgCisgICAgICAgaWYgKHVubGlrZWx5IChyZXN1bHQgPT0gMCkgJiYgZWhkci5lNjQtPmVfc2hvZmYgIT0gMCkKKyAJeworLQkgIGlmIChlaGRyLmU2NC0+ZV9zaG9mZiArIHNpemVvZiAoRWxmNjRfU2hkcikgPiBtYXhzaXplKQorKwkgIGlmICh1bmxpa2VseSAoZWhkci5lNjQtPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKGVoZHIuZTY0LT5lX3Nob2ZmICsgc2l6ZW9mIChFbGY2NF9TaGRyKSA+IG1heHNpemUpKQorIAkgICAgLyogQ2Fubm90IHJlYWQgdGhlIGZpcnN0IHNlY3Rpb24gaGVhZGVyLiAgKi8KKyAJICAgIHJldHVybiAwOworIAorQEAgLTI4NSw2ICsyODcsMTUgQEAKKyAgICAgLyogQ291bGQgbm90IGRldGVybWluZSB0aGUgbnVtYmVyIG9mIHNlY3Rpb25zLiAgKi8KKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICAvKiBDaGVjayBmb3IgdG9vIG1hbnkgc2VjdGlvbnMuICAqLworKyAgaWYgKGVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTMzIpCisrICAgIHsKKysgICAgICBpZiAoc2NuY250ID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuKSArIHNpemVvZiAoRWxmMzJfU2hkcikpKQorKwlyZXR1cm4gTlVMTDsKKysgICAgfQorKyAgZWxzZSBpZiAoc2NuY250ID4gU0laRV9NQVggLyAoc2l6ZW9mIChFbGZfU2NuKSArIHNpemVvZiAoRWxmNjRfU2hkcikpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKyAgIC8qIFdlIGNhbiBub3cgYWxsb2NhdGUgdGhlIG1lbW9yeS4gIEV2ZW4gaWYgdGhlcmUgYXJlIG5vIHNlY3Rpb24gaGVhZGVycywKKyAgICAgIHdlIGFsbG9jYXRlIHNwYWNlIGZvciBhIHplcm90aCBzZWN0aW9uIGluIGNhc2Ugd2UgbmVlZCBpdCBsYXRlci4gICovCisgICBjb25zdCBzaXplX3Qgc2NubWF4ID0gKHNjbmNudCA/OiAoY21kID09IEVMRl9DX1JEV1IgfHwgY21kID09IEVMRl9DX1JEV1JfTU1BUCkKK0BAIC0zMjQsNiArMzM1LDE2IEBACisgCXsKKyAJICAvKiBXZSBjYW4gdXNlIHRoZSBtbWFwcGVkIG1lbW9yeS4gICovCisgCSAgZWxmLT5zdGF0ZS5lbGYzMi5laGRyID0gZWhkcjsKKysKKysJICBpZiAodW5saWtlbHkgKGVoZHItPmVfc2hvZmYgPj0gbWF4c2l6ZSkKKysJICAgICAgfHwgdW5saWtlbHkgKG1heHNpemUgLSBlaGRyLT5lX3Nob2ZmCisrCQkJICAgPCBzY25jbnQgKiBzaXplb2YgKEVsZjMyX1NoZHIpKSkKKysJICAgIHsKKysJICAgIGZyZWVfYW5kX291dDoKKysJICAgICAgZnJlZSAoZWxmKTsKKysJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfRklMRSk7CisrCSAgICAgIHJldHVybiBOVUxMOworKwkgICAgfQorIAkgIGVsZi0+c3RhdGUuZWxmMzIuc2hkcgorIAkgICAgPSAoRWxmMzJfU2hkciAqKSAoKGNoYXIgKikgZWhkciArIGVoZHItPmVfc2hvZmYpOworIAorQEAgLTQxMCw2ICs0MzEsMTEgQEAKKyAJeworIAkgIC8qIFdlIGNhbiB1c2UgdGhlIG1tYXBwZWQgbWVtb3J5LiAgKi8KKyAJICBlbGYtPnN0YXRlLmVsZjY0LmVoZHIgPSBlaGRyOworKworKwkgIGlmICh1bmxpa2VseSAoZWhkci0+ZV9zaG9mZiA+PSBtYXhzaXplKQorKwkgICAgICB8fCB1bmxpa2VseSAoZWhkci0+ZV9zaG9mZgorKwkJCSAgICsgc2NuY250ICogc2l6ZW9mIChFbGYzMl9TaGRyKSA+IG1heHNpemUpKQorKwkgICAgZ290byBmcmVlX2FuZF9vdXQ7CisgCSAgZWxmLT5zdGF0ZS5lbGY2NC5zaGRyCisgCSAgICA9IChFbGY2NF9TaGRyICopICgoY2hhciAqKSBlaGRyICsgZWhkci0+ZV9zaG9mZik7CisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRhcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZWxmX2dldGFyc3ltLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2dldGFyc3ltLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNzksNiArMTc5LDkgQEAKKyAgICAgICBzaXplX3QgaW5kZXhfc2l6ZSA9IGF0b2wgKHRtcGJ1Zik7CisgCisgICAgICAgaWYgKFNBUk1BRyArIHNpemVvZiAoc3RydWN0IGFyX2hkcikgKyBpbmRleF9zaXplID4gZWxmLT5tYXhpbXVtX3NpemUKKysjaWYgU0laRV9NQVggPD0gNDI5NDk2NzI5NVUKKysJICB8fCBuID49IFNJWkVfTUFYIC8gc2l6ZW9mIChFbGZfQXJzeW0pCisrI2VuZGlmCisgCSAgfHwgbiAqIHNpemVvZiAodWludDMyX3QpID4gaW5kZXhfc2l6ZSkKKyAJeworIAkgIC8qIFRoaXMgaW5kZXggdGFibGUgY2Fubm90IGJlIHJpZ2h0IHNpbmNlIGl0IGRvZXMgbm90IGZpdCBpbnRvCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfZ2V0c2hkcnN0cm5keC5jCTIwMDktMDYtMTMgMjI6MzE6MzUuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9nZXRzaGRyc3RybmR4LmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMjUsMTAgKzEyNSwyNSBAQAorIAkgICAgICBpZiAoZWxmLT5tYXBfYWRkcmVzcyAhPSBOVUxMCisgCQkgICYmIGVsZi0+c3RhdGUuZWxmMzIuZWhkci0+ZV9pZGVudFtFSV9EQVRBXSA9PSBNWV9FTEZEQVRBCisgCQkgICYmIChBTExPV19VTkFMSUdORUQKKy0JCSAgICAgIHx8ICgoKHNpemVfdCkgKChjaGFyICopIGVsZi0+bWFwX2FkZHJlc3MgKyBvZmZzZXQpKQorKwkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcworKwkJCSAgICsgZWxmLT5zdGFydF9vZmZzZXQgKyBvZmZzZXQpKQorIAkJCSAgJiAoX19hbGlnbm9mX18gKEVsZjMyX1NoZHIpIC0gMSkpID09IDApKQorLQkJLyogV2UgY2FuIGRpcmVjdGx5IGFjY2VzcyB0aGUgbWVtb3J5LiAgKi8KKy0JCW51bSA9ICgoRWxmMzJfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpLT5zaF9saW5rOworKwkJeworKwkJICAvKiBGaXJzdCBzZWUgd2hldGhlciB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEVMRiBoZWFkZXIgaXMKKysJCSAgICAgdmFsaWQgYW5kIGl0IGRvZXMgbm90IGFzayBmb3IgdG9vIG11Y2guICAqLworKwkJICBpZiAodW5saWtlbHkgKGVsZi0+bWF4aW11bV9zaXplIC0gb2Zmc2V0CisrCQkJCTwgc2l6ZW9mIChFbGYzMl9TaGRyKSkpCisrCQkgICAgeworKwkJICAgICAgLyogU29tZXRoaW5nIGlzIHdyb25nLiAgKi8KKysJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX1NFQ1RJT05fSEVBREVSKTsKKysJCSAgICAgIHJlc3VsdCA9IC0xOworKwkJICAgICAgZ290byBvdXQ7CisrCQkgICAgfQorKworKwkJICAvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworKwkJICBudW0gPSAoKEVsZjMyX1NoZHIgKikgKGVsZi0+bWFwX2FkZHJlc3MgKyBlbGYtPnN0YXJ0X29mZnNldAorKwkJCQkJICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl9CisgCSAgICAgIGVsc2UKKyAJCXsKKyAJCSAgLyogV2UgYXZvaWQgcmVhZGluZyBpbiBhbGwgdGhlIHNlY3Rpb24gaGVhZGVycy4gIEp1c3QgcmVhZAorQEAgLTE2MywxMCArMTc4LDI1IEBACisgCSAgICAgIGlmIChlbGYtPm1hcF9hZGRyZXNzICE9IE5VTEwKKyAJCSAgJiYgZWxmLT5zdGF0ZS5lbGY2NC5laGRyLT5lX2lkZW50W0VJX0RBVEFdID09IE1ZX0VMRkRBVEEKKyAJCSAgJiYgKEFMTE9XX1VOQUxJR05FRAorLQkJICAgICAgfHwgKCgoc2l6ZV90KSAoKGNoYXIgKikgZWxmLT5tYXBfYWRkcmVzcyArIG9mZnNldCkpCisrCQkgICAgICB8fCAoKChzaXplX3QpICgoY2hhciAqKSBlbGYtPm1hcF9hZGRyZXNzCisrCQkJICAgKyBlbGYtPnN0YXJ0X29mZnNldCArIG9mZnNldCkpCisgCQkJICAmIChfX2FsaWdub2ZfXyAoRWxmNjRfU2hkcikgLSAxKSkgPT0gMCkpCistCQkvKiBXZSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBtZW1vcnkuICAqLworLQkJbnVtID0gKChFbGY2NF9TaGRyICopIChlbGYtPm1hcF9hZGRyZXNzICsgb2Zmc2V0KSktPnNoX2xpbms7CisrCQl7CisrCQkgIC8qIEZpcnN0IHNlZSB3aGV0aGVyIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgRUxGIGhlYWRlciBpcworKwkJICAgICB2YWxpZCBhbmQgaXQgZG9lcyBub3QgYXNrIGZvciB0b28gbXVjaC4gICovCisrCQkgIGlmICh1bmxpa2VseSAoZWxmLT5tYXhpbXVtX3NpemUgLSBvZmZzZXQKKysJCQkJPCBzaXplb2YgKEVsZjY0X1NoZHIpKSkKKysJCSAgICB7CisrCQkgICAgICAvKiBTb21ldGhpbmcgaXMgd3JvbmcuICAqLworKwkJICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfU0VDVElPTl9IRUFERVIpOworKwkJICAgICAgcmVzdWx0ID0gLTE7CisrCQkgICAgICBnb3RvIG91dDsKKysJCSAgICB9CisrCisrCQkgIC8qIFdlIGNhbiBkaXJlY3RseSBhY2Nlc3MgdGhlIG1lbW9yeS4gICovCisrCQkgIG51bSA9ICgoRWxmNjRfU2hkciAqKSAoZWxmLT5tYXBfYWRkcmVzcyArIGVsZi0+c3RhcnRfb2Zmc2V0CisrCQkJCQkgKyBvZmZzZXQpKS0+c2hfbGluazsKKysJCX0KKyAJICAgICAgZWxzZQorIAkJeworIAkJICAvKiBXZSBhdm9pZCByZWFkaW5nIGluIGFsbCB0aGUgc2VjdGlvbiBoZWFkZXJzLiAgSnVzdCByZWFkCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2VsZl9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2VsZl9uZXdzY24uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfbmV3c2NuLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMDQsMTAgKzEwNCwxOCBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogV2UgbXVzdCBhbGxvY2F0ZSBhIG5ldyBlbGVtZW50LiAgKi8KKy0gICAgICBFbGZfU2NuTGlzdCAqbmV3cDsKKysgICAgICBFbGZfU2NuTGlzdCAqbmV3cCA9IE5VTEw7CisgCisgICAgICAgYXNzZXJ0IChlbGYtPnN0YXRlLmVsZi5zY25pbmNyID4gMCk7CisgCisrICAgICAgaWYgKAorKyNpZiBTSVpFX01BWCA8PSA0Mjk0OTY3Mjk1VQorKwkgIGxpa2VseSAoZWxmLT5zdGF0ZS5lbGYuc2NuaW5jcgorKwkJICA8IFNJWkVfTUFYIC8gMiAvIHNpemVvZiAoRWxmX1NjbikgLSBzaXplb2YgKEVsZl9TY25MaXN0KSkKKysjZWxzZQorKwkgIDEKKysjZW5kaWYKKysJICApCisgICAgICAgbmV3cCA9IChFbGZfU2NuTGlzdCAqKSBjYWxsb2MgKHNpemVvZiAoRWxmX1Njbkxpc3QpCisgCQkJCSAgICAgKyAoKGVsZi0+c3RhdGUuZWxmLnNjbmluY3IgKj0gMikKKyAJCQkJCSogc2l6ZW9mIChFbGZfU2NuKSksIDEpOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGR5bi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRkeW4uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldGR5bi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgaW5mb3JtYXRpb24gZnJvbSBkeW5hbWljIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtOTMsNyArOTMsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfRHluKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX0R5biwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMTQsNyArMTE0LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9EeW4sICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bGliLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldGxpYi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0bGliLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBsaWJyYXJ5IGZyb20gdGFibGUgYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNC4KKyAKK0BAIC04Niw3ICs4Niw3IEBACisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKyAgIEdFbGZfTGliICpyZXN1bHQgPSBOVUxMOworLSAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfTGliKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9MaWIsIGRhdGEpKQorICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICBlbHNlCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRtb3ZlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldG1vdmUuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldG1vdmUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IG1vdmUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtODMsNyArODMsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9Nb3ZlKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9Nb3ZlLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRyZWxhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHJlbGEuYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHJlbGEuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IFJFTEEgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhX3NjbiA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTEEpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSEFORExFKTsKK0BAIC05Myw3ICs4Nyw3IEBACisgICBpZiAoc2NuLT5lbGYtPmNsYXNzID09IEVMRkNMQVNTMzIpCisgICAgIHsKKyAgICAgICAvKiBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIGRhdGEuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0BAIC0xMTQsNyArMTA4LDcgQEAKKyAgICAgeworICAgICAgIC8qIFNpbXBseSBjb3B5IHRoZSBkYXRhIGFmdGVyIHdlIG1hZGUgc3VyZSB3ZSBhcmUgYWN0dWFsbHkgZ2V0dGluZworIAkgY29ycmVjdCBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGY2NF9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIHJlc3VsdCA9IE5VTEw7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHJlbC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0cmVsLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIEdldCBSRUwgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzEsMTIgKzcxLDYgQEAKKyAgIGlmIChkYXRhX3NjbiA9PSBOVUxMKQorICAgICByZXR1cm4gTlVMTDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIE5VTEw7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTCkpCisgICAgIHsKKyAgICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9IQU5ETEUpOworQEAgLTkzLDcgKzg3LDcgQEAKKyAgIGlmIChzY24tPmVsZi0+Y2xhc3MgPT0gRUxGQ0xBU1MzMikKKyAgICAgeworICAgICAgIC8qIFdlIGhhdmUgdG8gY29udmVydCB0aGUgZGF0YS4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1JlbCkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWwsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgcmVzdWx0ID0gTlVMTDsKK0BAIC0xMTMsNyArMTA3LDcgQEAKKyAgICAgeworICAgICAgIC8qIFNpbXBseSBjb3B5IHRoZSBkYXRhIGFmdGVyIHdlIG1hZGUgc3VyZSB3ZSBhcmUgYWN0dWFsbHkgZ2V0dGluZworIAkgY29ycmVjdCBkYXRhLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfUmVsKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbCwgJmRhdGFfc2NuLT5kKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDE5OTkuCisgCitAQCAtOTAsNyArOTAsNyBAQAorIAkgdGFibGUgZW50cmllcyBoYXMgdG8gYmUgYWRvcHRlZC4gIFRoZSB1c2VyIGJldHRlciBoYXMgcHJvdmlkZWQKKyAJIGEgYnVmZmVyIHdoZXJlIHdlIGNhbiBzdG9yZSB0aGUgaW5mb3JtYXRpb24uICBXaGlsZSBjb3B5aW5nIHRoZQorIAkgZGF0YSB3ZSBhcmUgY29udmVydGluZyB0aGUgZm9ybWF0LiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfU3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjMyX1N5bSwgZGF0YSkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTE5LDcgKzExOSw3IEBACisgCisgICAgICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgCSBpbmRleCBpcyBPSy4gICovCistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEdFbGZfU3ltKSA+IGRhdGEtPmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfU3ltLCBkYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1pbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHN5bWluZm8uYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogR2V0IGFkZGl0aW9uYWwgc3ltYm9sIGluZm9ybWF0aW9uIGZyb20gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtODQsNyArODQsNyBAQAorIAorICAgLyogVGhlIGRhdGEgaXMgYWxyZWFkeSBpbiB0aGUgY29ycmVjdCBmb3JtLiAgSnVzdCBtYWtlIHN1cmUgdGhlCisgICAgICBpbmRleCBpcyBPSy4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW1pbmZvKSA+IGRhdGEtPmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW1pbmZvLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICBnb3RvIG91dDsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXRzeW1zaG5keC5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfZ2V0c3ltc2huZHguYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNiArMSw2IEBACisgLyogR2V0IHN5bWJvbCBpbmZvcm1hdGlvbiBhbmQgc2VwYXJhdGUgc2VjdGlvbiBpbmRleCBmcm9tIHN5bWJvbCB0YWJsZQorICAgIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtOTAsNyArOTAsNyBAQAorICAgICAgc2VjdGlvbiBpbmRleCB0YWJsZS4gICovCisgICBpZiAobGlrZWx5IChzaG5keGRhdGFfc2NuICE9IE5VTEwpKQorICAgICB7CistICAgICAgaWYgKHVubGlrZWx5ICgobmR4ICsgMSkgKiBzaXplb2YgKEVsZjMyX1dvcmQpID4gc2huZHhkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9Xb3JkLCAmc2huZHhkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitAQCAtMTEwLDcgKzExMCw3IEBACisgCSB0YWJsZSBlbnRyaWVzIGhhcyB0byBiZSBhZG9wdGVkLiAgVGhlIHVzZXIgYmV0dGVyIGhhcyBwcm92aWRlZAorIAkgYSBidWZmZXIgd2hlcmUgd2UgY2FuIHN0b3JlIHRoZSBpbmZvcm1hdGlvbi4gIFdoaWxlIGNvcHlpbmcgdGhlCisgCSBkYXRhIHdlIGFyZSBjb252ZXJ0aW5nIHRoZSBmb3JtYXQuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gc3ltZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCBzeW1kYXRhKSkKKyAJeworIAkgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAJICBnb3RvIG91dDsKK0BAIC0xMzksNyArMTM5LDcgQEAKKyAKKyAgICAgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAJIGluZGV4IGlzIE9LLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW0pID4gc3ltZGF0YS0+ZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW0sIHN5bWRhdGEpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl9nZXR2ZXJzeW0uYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX2dldHZlcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBHZXQgc3ltYm9sIHZlcnNpb24gaW5mb3JtYXRpb24gYXQgdGhlIGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMTk5OS4KKyAKK0BAIC05Miw3ICs5Miw3IEBACisgCisgICAvKiBUaGUgZGF0YSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm0uICBKdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgIGluZGV4IGlzIE9LLiAgKi8KKy0gIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPiBkYXRhLT5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfVmVyc3ltLCBkYXRhKSkKKyAgICAgeworICAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKyAgICAgICByZXN1bHQgPSBOVUxMOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9keW4uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2R5bi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgaW5mb3JtYXRpb24gaW4gZHluYW1pYyB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcxLDEyICs3MSw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX0RZTikpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDIsNyArOTYsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNiw3ICsxMTAsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9EeW4pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfRHluLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9saWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX2xpYi5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgbGlicmFyeSBpbiB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDA0IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDA0LgorIAorQEAgLTY4LDEyICs2OCw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIEVsZl9EYXRhX1NjbiAqZGF0YV9zY24gPSAoRWxmX0RhdGFfU2NuICopIGRhdGE7CisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9MSUIpKQorICAgICB7CitAQCAtODcsNyArODEsNyBAQAorIAorICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworICAgaW50IHJlc3VsdCA9IDA7CistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmNjRfTGliKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfTGliLCAmZGF0YV9zY24tPmQpKQorICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgICBlbHNlCisgICAgIHsKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfbW92ZS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX21vdmUuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsNSArMSw1IEBACisgLyogVXBkYXRlIG1vdmUgc3RydWN0dXJlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzUsOCArNzUsNyBAQAorICAgYXNzZXJ0IChzaXplb2YgKEdFbGZfTW92ZSkgPT0gc2l6ZW9mIChFbGY2NF9Nb3ZlKSk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKG5keCA8IDApCistICAgICAgfHwgdW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9Nb3ZlKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9Nb3ZlLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJldHVybiAwOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9yZWxhLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsYS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgUkVMQSByZWxvY2F0aW9uIGluZm9ybWF0aW9uIGF0IGdpdmVuIGluZGV4LgorLSAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBSZWQgSGF0LCBJbmMuCisrICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDkgUmVkIEhhdCwgSW5jLgorICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMC4KKyAKK0BAIC02OCwxMiArNjgsNiBAQAorICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1JFTEEpKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtMTAxLDcgKzk1LDcgQEAKKyAJfQorIAorICAgICAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gICAgICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoRWxmMzJfUmVsYSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgICAgIGlmIChJTlZBTElEX05EWCAobmR4LCBFbGYzMl9SZWxhLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNyw3ICsxMTEsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWxhKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICAgICAgaWYgKElOVkFMSURfTkRYIChuZHgsIEVsZjY0X1JlbGEsICZkYXRhX3Njbi0+ZCkpCisgCXsKKyAJICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CisgCSAgZ290byBvdXQ7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3JlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfcmVsLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDUgKzEsNSBAQAorIC8qIFVwZGF0ZSBSRUwgcmVsb2NhdGlvbiBpbmZvcm1hdGlvbiBhdCBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNjgsMTIgKzY4LDYgQEAKKyAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgcmV0dXJuIDA7CisgCistICBpZiAodW5saWtlbHkgKG5keCA8IDApKQorLSAgICB7CistICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworLSAgICAgIHJldHVybiAwOworLSAgICB9CistCisgICBpZiAodW5saWtlbHkgKGRhdGFfc2NuLT5kLmRfdHlwZSAhPSBFTEZfVF9SRUwpKQorICAgICB7CisgICAgICAgLyogVGhlIHR5cGUgb2YgdGhlIGRhdGEgYmV0dGVyIHNob3VsZCBtYXRjaC4gICovCitAQCAtOTksNyArOTMsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTExNCw3ICsxMDgsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9SZWwpID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfUmVsLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3N5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIGluZm9ybWF0aW9uIGluIHN5bWJvbCB0YWJsZSBhdCB0aGUgZ2l2ZW4gaW5kZXguCistICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAwLgorIAorQEAgLTcyLDEyICs3Miw2IEBACisgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkpCistICAgIHsKKy0gICAgICBfX2xpYmVsZl9zZXRlcnJubyAoRUxGX0VfSU5WQUxJRF9JTkRFWCk7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0KKyAgIGlmICh1bmxpa2VseSAoZGF0YV9zY24tPmQuZF90eXBlICE9IEVMRl9UX1NZTSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC0xMDIsNyArOTYsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTEyNSw3ICsxMTksNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9TeW0pID4gZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfU3ltLCAmZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1pbmZvLmMJMjAwOS0wMS0wOCAyMDo1NjozNy4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZ2VsZl91cGRhdGVfc3ltaW5mby5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgYWRkaXRpb25hbCBzeW1ib2wgaW5mb3JtYXRpb24gaW4gc3ltYm9sIHRhYmxlIGF0IHRoZSBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzIsMTIgKzcyLDYgQEAKKyAgIGlmIChkYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChkYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNSU5GTykpCisgICAgIHsKKyAgICAgICAvKiBUaGUgdHlwZSBvZiB0aGUgZGF0YSBiZXR0ZXIgc2hvdWxkIG1hdGNoLiAgKi8KK0BAIC05Myw3ICs4Nyw3IEBACisgICByd2xvY2tfd3Jsb2NrIChzY24tPmVsZi0+bG9jayk7CisgCisgICAvKiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdG8gcmVzaXplIHRoZSBkYXRhIGJ1ZmZlci4gICovCistICBpZiAodW5saWtlbHkgKChuZHggKyAxKSAqIHNpemVvZiAoR0VsZl9TeW1pbmZvKSA+IGRhdGFfc2NuLT5kLmRfc2l6ZSkpCisrICBpZiAoSU5WQUxJRF9ORFggKG5keCwgR0VsZl9TeW1pbmZvLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9saWJlbGYvZ2VsZl91cGRhdGVfc3ltc2huZHguYwkyMDA5LTAxLTA4IDIwOjU2OjM3LjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV9zeW1zaG5keC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw2ICsxLDYgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIGluZm9ybWF0aW9uIGFuZCBzZWN0aW9uIGluZGV4IGluIHN5bWJvbCB0YWJsZSBhdCB0aGUKKyAgICBnaXZlbiBpbmRleC4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDEsIDIwMDIgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoQykgMjAwMC0yMDA5IFJlZCBIYXQsIEluYy4KKyAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorICAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDAuCisgCitAQCAtNzcsMTIgKzc3LDYgQEAKKyAgIGlmIChzeW1kYXRhID09IE5VTEwpCisgICAgIHJldHVybiAwOworIAorLSAgaWYgKHVubGlrZWx5IChuZHggPCAwKSkKKy0gICAgeworLSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0lOREVYKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLQorICAgaWYgKHVubGlrZWx5IChzeW1kYXRhX3Njbi0+ZC5kX3R5cGUgIT0gRUxGX1RfU1lNKSkKKyAgICAgeworICAgICAgIC8qIFRoZSB0eXBlIG9mIHRoZSBkYXRhIGJldHRlciBzaG91bGQgbWF0Y2guICAqLworQEAgLTEyOCw3ICsxMjIsNyBAQAorIAl9CisgCisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGYzMl9TeW0pID4gc3ltZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmMzJfU3ltLCAmc3ltZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworQEAgLTE1MSw3ICsxNDUsNyBAQAorICAgZWxzZQorICAgICB7CisgICAgICAgLyogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIHRvIHJlc2l6ZSB0aGUgZGF0YSBidWZmZXIuICAqLworLSAgICAgIGlmICh1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChFbGY2NF9TeW0pID4gc3ltZGF0YV9zY24tPmQuZF9zaXplKSkKKysgICAgICBpZiAoSU5WQUxJRF9ORFggKG5keCwgRWxmNjRfU3ltLCAmc3ltZGF0YV9zY24tPmQpKQorIAl7CisgCSAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworIAkgIGdvdG8gb3V0OworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9nZWxmX3VwZGF0ZV92ZXJzeW0uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCTIwMDktMDEtMDggMjA6NTY6MzcuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL2dlbGZfdXBkYXRlX3ZlcnN5bS5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtMSw1ICsxLDUgQEAKKyAvKiBVcGRhdGUgc3ltYm9sIHZlcnNpb24gaW5mb3JtYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKyAgICBXcml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQHJlZGhhdC5jb20+LCAyMDAxLgorIAorQEAgLTc1LDggKzc1LDcgQEAKKyAgIGFzc2VydCAoc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPT0gc2l6ZW9mIChFbGY2NF9WZXJzeW0pKTsKKyAKKyAgIC8qIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSB0byByZXNpemUgdGhlIGRhdGEgYnVmZmVyLiAgKi8KKy0gIGlmICh1bmxpa2VseSAobmR4IDwgMCkKKy0gICAgICB8fCB1bmxpa2VseSAoKG5keCArIDEpICogc2l6ZW9mIChHRWxmX1ZlcnN5bSkgPiBkYXRhX3Njbi0+ZC5kX3NpemUpKQorKyAgaWYgKElOVkFMSURfTkRYIChuZHgsIEdFbGZfVmVyc3ltLCAmZGF0YV9zY24tPmQpKQorICAgICB7CisgICAgICAgX19saWJlbGZfc2V0ZXJybm8gKEVMRl9FX0lOVkFMSURfSU5ERVgpOworICAgICAgIHJldHVybiAwOworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9saWJlbGZQLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9saWJlbGZQLmgJMjAxMC0wMS0xMiAxNjo1Nzo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE0OC9saWJlbGYvbGliZWxmUC5oCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNjA4LDQgKzYwOCw4IEBACisgLyogQWxpZ24gb2Zmc2V0IHRvIDQgYnl0ZXMgYXMgbmVlZGVkIGZvciBub3RlIG5hbWUgYW5kIGRlc2NyaXB0b3IgZGF0YS4gICovCisgI2RlZmluZSBOT1RFX0FMSUdOKG4pCSgoKG4pICsgMykgJiAtNFUpCisgCisrLyogQ29udmVuaWVuY2UgbWFjcm8uICAqLworKyNkZWZpbmUgSU5WQUxJRF9ORFgobmR4LCB0eXBlLCBkYXRhKSBcCisrICB1bmxpa2VseSAoKGRhdGEpLT5kX3NpemUgLyBzaXplb2YgKHR5cGUpIDw9ICh1bnNpZ25lZCBpbnQpIChuZHgpKQorKworICNlbmRpZiAgLyogbGliZWxmUC5oICovCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL0NoYW5nZUxvZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL0NoYW5nZUxvZwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9DaGFuZ2VMb2cJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNjQwLDYgKzE2NDAsMTYgQEAKKyAJb2JqZWN0IHN5bWJvbHMgb3Igc3ltYm9scyB3aXRoIHVua25vd24gdHlwZS4KKyAJKGNoZWNrX3JlbCk6IExpa2V3aXNlLgorIAorKzIwMDUtMDYtMDkgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogcmVhZGVsZi5jIChoYW5kbGVfZHluYW1pYywgaGFuZGxlX3N5bXRhYik6IENoZWNrIGZvciBib2d1cyBzaF9saW5rLgorKwkoaGFuZGxlX3Zlcm5lZWQsIGhhbmRsZV92ZXJkZWYsIGhhbmRsZV92ZXJzeW0sIGhhbmRsZV9oYXNoKTogTGlrZXdpc2UuCisrCShoYW5kbGVfc2NuZ3JwKTogQ2hlY2sgZm9yIGJvZ3VzIHNoX2luZm8uCisrCisrCSogc3RyaXAuYyAoaGFuZGxlX2VsZik6IENoZWNrIGZvciBib2d1cyB2YWx1ZXMgaW4gc2hfbGluaywgc2hfaW5mbywKKysJc3Rfc2huZHgsIGVfc2hzdHJuZHgsIGFuZCBTSFRfR1JPVVAgb3IgU0hUX1NZTVRBQl9TSE5EWCBkYXRhLgorKwlEb24ndCB1c2UgYXNzZXJ0IG9uIGlucHV0IHZhbHVlcywgaW5zdGVhZCBiYWlsIHdpdGggImlsbGZvcm1lZCIgZXJyb3IuCisrCisgMjAwNS0wNi0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X29wcyk6IEFkZCBjb25zdHMuCitAQCAtMTY5MCw2ICsxNzAwLDE5IEBACisgCisgCSogcmVhZGVsZi5jIChkd2FyZl90YWdfc3RyaW5nKTogQWRkIG5ldyB0YWdzLgorIAorKzIwMDUtMDUtMTcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorKworKwkqIGVsZmxpbnQuYyAoY2hlY2tfaGFzaCk6IERvbid0IGNoZWNrIGVudHJpZXMgYmV5b25kIGVuZCBvZiBzZWN0aW9uLgorKwkoY2hlY2tfbm90ZSk6IERvbid0IGNyYXNoIGlmIGdlbGZfcmF3Y2h1bmsgZmFpbHMuCisrCShzZWN0aW9uX25hbWUpOiBSZXR1cm4gPGludmFsaWQ+IGlmIGdlbGZfZ2V0c2hkciByZXR1cm5zIE5VTEwuCisrCisrMjAwNS0wNS0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisrCisrCSogZWxmbGludC5jIChzZWN0aW9uX25hbWUpOiBSZXR1cm4gIjxpbnZhbGlkPiIgaW5zdGVhZCBvZgorKwljcmFzaGluZyBvbiBpbnZhbGlkIHNlY3Rpb24gbmFtZS4KKysJKGNoZWNrX3N5bXRhYiwgaXNfcmVsX2R5biwgY2hlY2tfcmVsYSwgY2hlY2tfcmVsLCBjaGVja19keW5hbWljLAorKwljaGVja19zeW10YWJfc2huZHgsIGNoZWNrX2hhc2gsIGNoZWNrX3ZlcnN5bSk6IFJvYnVzdGlmeS4KKysKKyAyMDA1LTA1LTA4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHN0cmlwLmMgKGhhbmRsZV9lbGYpOiBEb24ndCB0cmFuc2xhdGUgaGFzaCBhbmQgdmVyc3ltIGRhdGEgZm9ybWF0cywKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZWxmbGludC5jCTIwMTAtMDQtMTMgMjA6MDg6MDIuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYwkyMDEwLTA3LTAzIDEzOjA3OjExLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw2ICsxMzEsMTAgQEAKKyAvKiBBcnJheSB0byBjb3VudCByZWZlcmVuY2VzIGluIHNlY3Rpb24gZ3JvdXBzLiAgKi8KKyBzdGF0aWMgaW50ICpzY25yZWY7CisgCisrLyogTnVtYmVycyBvZiBzZWN0aW9ucyBhbmQgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KKytzdGF0aWMgdW5zaWduZWQgaW50IHNobnVtOworK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGhudW07CisrCisgCisgaW50CisgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK0BAIC0zMTksMTAgKzMyMywxOSBAQAorIHsKKyAgIEdFbGZfU2hkciBzaGRyX21lbTsKKyAgIEdFbGZfU2hkciAqc2hkcjsKKysgIGNvbnN0IGNoYXIgKnJldDsKKysKKysgIGlmICgodW5zaWduZWQgaW50KSBpZHggPiBzaG51bSkKKysgICAgcmV0dXJuICI8aW52YWxpZD4iOworIAorICAgc2hkciA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIGlkeCksICZzaGRyX21lbSk7CisrICBpZiAoc2hkciA9PSBOVUxMKQorKyAgICByZXR1cm4gIjxpbnZhbGlkPiI7CisgCistICByZXR1cm4gZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKTsKKysgIHJldCA9IGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSk7CisrICBpZiAocmV0ID09IE5VTEwpCisrICAgIHJldHVybiAiPGludmFsaWQ+IjsKKysgIHJldHVybiByZXQ7CisgfQorIAorIAorQEAgLTM0NCwxMSArMzU3LDYgQEAKKyAgIChzaXplb2YgKHZhbGlkX2VfbWFjaGluZSkgLyBzaXplb2YgKHZhbGlkX2VfbWFjaGluZVswXSkpCisgCisgCistLyogTnVtYmVycyBvZiBzZWN0aW9ucyBhbmQgcHJvZ3JhbSBoZWFkZXJzLiAgKi8KKy1zdGF0aWMgdW5zaWduZWQgaW50IHNobnVtOworLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGhudW07CistCistCisgc3RhdGljIHZvaWQKKyBjaGVja19lbGZfaGVhZGVyIChFYmwgKmVibCwgR0VsZl9FaGRyICplaGRyLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtNjMyLDcgKzY0MCw4IEBACisgCSAgfQorICAgICAgIH0KKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9TWU0sIDEsIEVWX0NVUlJFTlQpKQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfU1lNLCAxLCBFVl9DVVJSRU5UKTsKKysgIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IHNoX2VudHNpemUpCisgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorIHNlY3Rpb24gWyUydV0gJyVzJzogZW50cnkgc2l6ZSBpcyBkb2VzIG5vdCBtYXRjaCBFbGZYWF9TeW1cbiIpLAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKK0BAIC02NzAsNyArNjc5LDcgQEAKKyAJICAgICAgIHhuZHhzY25pZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCB4bmR4c2NuaWR4KSk7CisgICAgIH0KKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDE7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIGZvciAoc2l6ZV90IGNudCA9IDE7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIHN5bSA9IGdlbGZfZ2V0c3ltc2huZHggKGRhdGEsIHhuZHhkYXRhLCBjbnQsICZzeW1fbWVtLCAmeG5keCk7CisgICAgICAgaWYgKHN5bSA9PSBOVUxMKQorQEAgLTY5MCw3ICs2OTksOCBAQAorICAgICAgIGVsc2UKKyAJeworIAkgIG5hbWUgPSBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hkci0+c2hfbGluaywgc3ltLT5zdF9uYW1lKTsKKy0JICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCSAgYXNzZXJ0IChuYW1lICE9IE5VTEwKKysJCSAgfHwgc3Ryc2hkci0+c2hfdHlwZSAhPSBTSFRfU1RSVEFCKTsKKyAJfQorIAorICAgICAgIGlmIChzeW0tPnN0X3NobmR4ID09IFNITl9YSU5ERVgpCitAQCAtMTAzOCw5ICsxMDQ4LDExIEBACisgICAgIHsKKyAgICAgICBHRWxmX1NoZHIgcmNzaGRyX21lbTsKKyAgICAgICBjb25zdCBHRWxmX1NoZHIgKnJjc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmcmNzaGRyX21lbSk7CistICAgICAgYXNzZXJ0IChyY3NoZHIgIT0gTlVMTCk7CisgCistICAgICAgaWYgKHJjc2hkci0+c2hfdHlwZSA9PSBTSFRfRFlOQU1JQykKKysgICAgICBpZiAocmNzaGRyID09IE5VTEwpCisrCWJyZWFrOworKworKyAgICAgIGlmIChyY3NoZHItPnNoX3R5cGUgPT0gU0hUX0RZTkFNSUMgJiYgcmNzaGRyLT5zaF9lbnRzaXplKQorIAl7CisgCSAgLyogRm91bmQgdGhlIGR5bmFtaWMgc2VjdGlvbi4gIExvb2sgdGhyb3VnaCBpdC4gICovCisgCSAgRWxmX0RhdGEgKmQgPSBlbGZfZ2V0ZGF0YSAoc2NuLCBOVUxMKTsKK0BAIC0xMDUwLDcgKzEwNjIsOSBAQAorIAkgICAgeworIAkgICAgICBHRWxmX0R5biBkeW5fbWVtOworIAkgICAgICBHRWxmX0R5biAqZHluID0gZ2VsZl9nZXRkeW4gKGQsIGNudCwgJmR5bl9tZW0pOworLQkgICAgICBhc3NlcnQgKGR5biAhPSBOVUxMKTsKKysKKysJICAgICAgaWYgKGR5biA9PSBOVUxMKQorKwkJYnJlYWs7CisgCisgCSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTENPVU5UKQorIAkJeworQEAgLTEwNjQsNyArMTA3OCw5IEBACisgCQkgICAgICAvKiBEb2VzIHRoZSBudW1iZXIgc3BlY2lmaWVkIG51bWJlciBvZiByZWxhdGl2ZQorIAkJCSByZWxvY2F0aW9ucyBleGNlZWQgdGhlIHRvdGFsIG51bWJlciBvZgorIAkJCSByZWxvY2F0aW9ucz8gICovCistCQkgICAgICBpZiAoZHluLT5kX3VuLmRfdmFsID4gc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemUpCisrCQkgICAgICBpZiAoc2hkci0+c2hfZW50c2l6ZSAhPSAwCisrCQkJICAmJiBkeW4tPmRfdW4uZF92YWwgPiAoc2hkci0+c2hfc2l6ZQorKwkJCQkJCS8gc2hkci0+c2hfZW50c2l6ZSkpCisgCQkJRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBEVF9SRUxDT1VOVCB2YWx1ZSAlZCB0b28gaGlnaCBmb3IgdGhpcyBzZWN0aW9uXG4iKSwKKyAJCQkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwKK0BAIC0xMjI0LDcgKzEyNDAsOCBAQAorIAl9CisgICAgIH0KKyAKKy0gIGlmIChzaGRyLT5zaF9lbnRzaXplICE9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCByZWx0eXBlLCAxLCBFVl9DVVJSRU5UKSkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIHJlbHR5cGUsIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKHJlbHR5cGUgPT0gRUxGX1RfUkVMQSA/ICJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfUmVsYVxuIiA6ICJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfUmVsXG4iKSwKK0BAIC0xNDQ3LDcgKzE0NjQsOCBAQAorICAgRWxmX0RhdGEgKnN5bWRhdGEgPSBlbGZfZ2V0ZGF0YSAoc3ltc2NuLCBOVUxMKTsKKyAgIGVudW0gbG9hZF9zdGF0ZSBzdGF0ZSA9IHN0YXRlX3VuZGVjaWRlZDsKKyAKKy0gIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaGRyLT5zaF9lbnRzaXplOyArK2NudCkKKysgIHNpemVfdCBzaF9lbnRzaXplID0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX1JFTEEsIDEsIEVWX0NVUlJFTlQpOworKyAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoX2VudHNpemU7ICsrY250KQorICAgICB7CisgICAgICAgR0VsZl9SZWxhIHJlbGFfbWVtOworICAgICAgIEdFbGZfUmVsYSAqcmVsYSA9IGdlbGZfZ2V0cmVsYSAoZGF0YSwgY250LCAmcmVsYV9tZW0pOworQEAgLTE0OTcsNyArMTUxNSw4IEBACisgICBFbGZfRGF0YSAqc3ltZGF0YSA9IGVsZl9nZXRkYXRhIChzeW1zY24sIE5VTEwpOworICAgZW51bSBsb2FkX3N0YXRlIHN0YXRlID0gc3RhdGVfdW5kZWNpZGVkOworIAorLSAgZm9yIChzaXplX3QgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorKyAgc2l6ZV90IHNoX2VudHNpemUgPSBnZWxmX2ZzaXplIChlYmwtPmVsZiwgRUxGX1RfUkVMLCAxLCBFVl9DVVJSRU5UKTsKKysgIGZvciAoc2l6ZV90IGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfUmVsIHJlbF9tZW07CisgICAgICAgR0VsZl9SZWwgKnJlbCA9IGdlbGZfZ2V0cmVsIChkYXRhLCBjbnQsICZyZWxfbWVtKTsKK0BAIC0xNjAwLDcgKzE2MTksOCBAQAorIAkgICBzaGRyLT5zaF9saW5rLCBzZWN0aW9uX25hbWUgKGVibCwgc2hkci0+c2hfbGluayksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworIAorLSAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gZ2VsZl9mc2l6ZSAoZWJsLT5lbGYsIEVMRl9UX0RZTiwgMSwgRVZfQ1VSUkVOVCkpCisrICBzaXplX3Qgc2hfZW50c2l6ZSA9IGdlbGZfZnNpemUgKGVibC0+ZWxmLCBFTEZfVF9EWU4sIDEsIEVWX0NVUlJFTlQpOworKyAgaWYgKHNoZHItPnNoX2VudHNpemUgIT0gc2hfZW50c2l6ZSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzZWN0aW9uIGVudHJ5IHNpemUgZG9lcyBub3QgbWF0Y2ggRWxmWFhfRHluXG4iKSwKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CitAQCAtMTYxMCw3ICsxNjMwLDcgQEAKKyAJICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSk7CisgCisgICBib29sIG5vbl9udWxsX3dhcm5lZCA9IGZhbHNlOworLSAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCisrICBmb3IgKGNudCA9IDA7IGNudCA8IHNoZHItPnNoX3NpemUgLyBzaF9lbnRzaXplOyArK2NudCkKKyAgICAgeworICAgICAgIEdFbGZfRHluIGR5bl9tZW07CisgICAgICAgR0VsZl9EeW4gKmR5biA9IGdlbGZfZ2V0ZHluIChkYXRhLCBjbnQsICZkeW5fbWVtKTsKK0BAIC0xODkxLDYgKzE5MTEsOCBAQAorIAkgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpKTsKKyAKKyAgIGlmIChzeW1zaGRyICE9IE5VTEwKKysgICAgICAmJiBzaGRyLT5zaF9lbnRzaXplCisrICAgICAgJiYgc3ltc2hkci0+c2hfZW50c2l6ZQorICAgICAgICYmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorIAkgIDwgc3ltc2hkci0+c2hfc2l6ZSAvIHN5bXNoZHItPnNoX2VudHNpemUpKQorICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKK0BAIC0xOTE3LDYgKzE5MzksMTIgQEAKKyAgICAgfQorIAorICAgRWxmX0RhdGEgKmRhdGEgPSBlbGZfZ2V0ZGF0YSAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIGlkeCksIE5VTEwpOworKyAgaWYgKGRhdGEgPT0gTlVMTCkKKysgICAgeworKyAgICAgIEVSUk9SIChnZXR0ZXh0ICgic2VjdGlvbiBbJTJkXSAnJXMnOiBjYW5ub3QgZ2V0IHNlY3Rpb24gZGF0YVxuIiksCisrIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCkpOworKyAgICAgIHJldHVybjsKKysgICAgfQorIAorICAgaWYgKCooKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWYpICE9IDApCisgICAgIEVSUk9SIChnZXR0ZXh0ICgic3ltYm9sIDAgc2hvdWxkIGhhdmUgemVybyBleHRlbmRlZCBzZWN0aW9uIGluZGV4XG4iKSk7CitAQCAtMTk1OSw3ICsxOTg3LDcgQEAKKyAKKyAgIHNpemVfdCBtYXhpZHggPSBuY2hhaW47CisgCistICBpZiAoc3ltc2hkciAhPSBOVUxMKQorKyAgaWYgKHN5bXNoZHIgIT0gTlVMTCAmJiBzeW1zaGRyLT5zaF9lbnRzaXplICE9IDApCisgICAgIHsKKyAgICAgICBzaXplX3Qgc3ltc2l6ZSA9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplOworIAorQEAgLTE5NzAsMTggKzE5OTgsMjggQEAKKyAgICAgICBtYXhpZHggPSBzeW1zaXplOworICAgICB9CisgCisrICBFbGYzMl9Xb3JkICpidWYgPSAoRWxmMzJfV29yZCAqKSBkYXRhLT5kX2J1ZjsKKysgIEVsZjMyX1dvcmQgKmVuZCA9IChFbGYzMl9Xb3JkICopICgoY2hhciAqKSBkYXRhLT5kX2J1ZiArIHNoZHItPnNoX3NpemUpOworICAgc2l6ZV90IGNudDsKKyAgIGZvciAoY250ID0gMjsgY250IDwgMiArIG5idWNrZXQ7ICsrY250KQorLSAgICBpZiAoKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGJ1Y2tldCByZWZlcmVuY2UgJXp1IG91dCBvZiBib3VuZHNcbiIpLAorIAkgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCAtIDIpOworKyAgICB9CisgCisgICBmb3IgKDsgY250IDwgMiArIG5idWNrZXQgKyBuY2hhaW47ICsrY250KQorLSAgICBpZiAoKChFbGYzMl9Xb3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGNoYWluIHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMiAtIG5idWNrZXQpOworKyAgICB9CisgfQorIAorIAorQEAgLTIwMTEsMTggKzIwNDksMjggQEAKKyAgICAgICBtYXhpZHggPSBzeW1zaXplOworICAgICB9CisgCisrICBFbGY2NF9Yd29yZCAqYnVmID0gKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmOworKyAgRWxmNjRfWHdvcmQgKmVuZCA9IChFbGY2NF9Yd29yZCAqKSAoKGNoYXIgKikgZGF0YS0+ZF9idWYgKyBzaGRyLT5zaF9zaXplKTsKKyAgIHNpemVfdCBjbnQ7CisgICBmb3IgKGNudCA9IDI7IGNudCA8IDIgKyBuYnVja2V0OyArK2NudCkKKy0gICAgaWYgKCgoRWxmNjRfWHdvcmQgKikgZGF0YS0+ZF9idWYpW2NudF0gPj0gbWF4aWR4KQorKyAgICB7CisrICAgICAgaWYgKGJ1ZiArIGNudCA+PSBlbmQpCisrCWJyZWFrOworKyAgICAgIGVsc2UgaWYgKGJ1ZltjbnRdID49IG1heGlkeCkKKyAgICAgICBFUlJPUiAoZ2V0dGV4dCAoIlwKKyBzZWN0aW9uIFslMmRdICclcyc6IGhhc2ggYnVja2V0IHJlZmVyZW5jZSAlenUgb3V0IG9mIGJvdW5kc1xuIiksCisgCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250IC0gMik7CisrICAgIH0KKyAKKyAgIGZvciAoOyBjbnQgPCAyICsgbmJ1Y2tldCArIG5jaGFpbjsgKytjbnQpCistICAgIGlmICgoKEVsZjY0X1h3b3JkICopIGRhdGEtPmRfYnVmKVtjbnRdID49IG1heGlkeCkKKysgICAgeworKyAgICAgIGlmIChidWYgKyBjbnQgPj0gZW5kKQorKwlicmVhazsKKysgICAgICBlbHNlIGlmIChidWZbY250XSA+PSBtYXhpZHgpCisgICAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBoYXNoIGNoYWluIHJlZmVyZW5jZSAlIiBQUkl1NjQgIiBvdXQgb2YgYm91bmRzXG4iKSwKKy0JICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAodWludDY0X3QpIChjbnQgLSAyIC0gbmJ1Y2tldCkpOworKwkgICAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgKHVpbnQ2NF90KSBjbnQgLSAyIC0gbmJ1Y2tldCk7CisrICAgIH0KKyB9CisgCisgCitAQCAtMjA0Nyw3ICsyMDk1LDcgQEAKKyAgIGlmIChzaGRyLT5zaF9zaXplIDwgKDQgKyBiaXRtYXNrX3dvcmRzICsgbmJ1Y2tldHMpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkKKyAgICAgeworICAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorLXNlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCB0YWJsZSBzZWN0aW9uIGlzIHRvbyBzbWFsbCAoaXMgJWxkLCBleHBlY3RlZCBhdCBsZWFzdCVsZClcbiIpLAorK3NlY3Rpb24gWyUyZF0gJyVzJzogaGFzaCB0YWJsZSBzZWN0aW9uIGlzIHRvbyBzbWFsbCAoaXMgJWxkLCBleHBlY3RlZCBhdCBsZWFzdCAlbGQpXG4iKSwKKyAJICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCAobG9uZyBpbnQpIHNoZHItPnNoX3NpemUsCisgCSAgICAgKGxvbmcgaW50KSAoKDQgKyBiaXRtYXNrX3dvcmRzICsgbmJ1Y2tldHMpICogc2l6ZW9mIChFbGYzMl9Xb3JkKSkpOworICAgICAgIHJldHVybjsKK0BAIC0yNzE5LDggKzI3NjcsOSBAQAorIAorICAgLyogVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdmVyc2lvbiBzeW1ib2wgdGFibGUgbXVzdCBiZSB0aGUKKyAgICAgIHNhbWUgYXMgdGhlIG51bWJlciBvZiBzeW1ib2xzLiAgKi8KKy0gIGlmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorLSAgICAgICE9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKQorKyAgaWYgKHNoZHItPnNoX2VudHNpemUgJiYgc3ltc2hkci0+c2hfZW50c2l6ZQorKyAgICAgICYmIChzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZQorKwkgICE9IHN5bXNoZHItPnNoX3NpemUgLyBzeW1zaGRyLT5zaF9lbnRzaXplKSkKKyAgICAgRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnIGhhcyBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgdGhhbiBzeW1ib2wgdGFibGUgWyUyZF0gJyVzJ1xuIiksCisgCSAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3JlYWRlbGYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3JlYWRlbGYuYwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9yZWFkZWxmLmMJMjAxMC0wNy0wMyAxMzowNzoxMS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMTcyLDYgKzExNzIsOCBAQAorICAgRWxmMzJfV29yZCAqZ3JwcmVmID0gKEVsZjMyX1dvcmQgKikgZGF0YS0+ZF9idWY7CisgCisgICBHRWxmX1N5bSBzeW1fbWVtOworKyAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kYXRhLCBzaGRyLT5zaF9pbmZvLCAmc3ltX21lbSk7CisrCisgICBwcmludGYgKChncnByZWZbMF0gJiBHUlBfQ09NREFUKQorIAkgID8gbmdldHRleHQgKCJcCisgXG5DT01EQVQgc2VjdGlvbiBncm91cCBbJTJ6dV0gJyVzJyB3aXRoIHNpZ25hdHVyZSAnJXMnIGNvbnRhaW5zICV6dSBlbnRyeTpcbiIsCitAQCAtMTE4NCw4ICsxMTg2LDggQEAKKyAJCSAgICAgIGRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKSwKKyAJICBlbGZfbmR4c2NuIChzY24pLAorIAkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSksCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHN5bXNoZHItPnNoX2xpbmssCistCQkgICAgICBnZWxmX2dldHN5bSAoc3ltZGF0YSwgc2hkci0+c2hfaW5mbywgJnN5bV9tZW0pLT5zdF9uYW1lKQorKwkgIChzeW0gPT0gTlVMTCA/IE5VTEwKKysJICAgOiBlbGZfc3RycHRyIChlYmwtPmVsZiwgc3ltc2hkci0+c2hfbGluaywgc3ltLT5zdF9uYW1lKSkKKyAJICA/OiBnZXR0ZXh0ICgiPElOVkFMSUQgU1lNQk9MPiIpLAorIAkgIGRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkgLSAxKTsKKyAKK0BAIC0xMzM2LDcgKzEzMzgsOCBAQAorIGhhbmRsZV9keW5hbWljIChFYmwgKmVibCwgRWxmX1NjbiAqc2NuLCBHRWxmX1NoZHIgKnNoZHIpCisgeworICAgaW50IGNsYXNzID0gZ2VsZl9nZXRjbGFzcyAoZWJsLT5lbGYpOworLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbms7CisgICBFbGZfRGF0YSAqZGF0YTsKKyAgIHNpemVfdCBjbnQ7CisgICBzaXplX3Qgc2hzdHJuZHg7CitAQCAtMTM1MSw2ICsxMzU0LDExIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIGdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuRHluYW1pYyBzZWdtZW50IGNvbnRhaW5zICVsdSBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnXG4iLAorIAkJICAgICJcCitAQCAtMTM2MCw5ICsxMzY4LDcgQEAKKyAJICBjbGFzcyA9PSBFTEZDTEFTUzMyID8gMTAgOiAxOCwgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgICBmcHV0c191bmxvY2tlZCAoZ2V0dGV4dCAoIiAgVHlwZSAgICAgICAgICAgICAgVmFsdWVcbiIpLCBzdGRvdXQpOworIAorICAgZm9yIChjbnQgPSAwOyBjbnQgPCBzaGRyLT5zaF9zaXplIC8gc2hkci0+c2hfZW50c2l6ZTsgKytjbnQpCitAQCAtMTk0NSw2ICsxOTUxLDEzIEBACisgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCisgCSAgIGdldHRleHQgKCJjYW5ub3QgZ2V0IHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleCIpKTsKKyAKKysgIEdFbGZfU2hkciBnbGlua19tZW07CisrICBHRWxmX1NoZHIgKmdsaW5rID0gZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCisrCQkJCSAgICZnbGlua19tZW0pOworKyAgaWYgKGdsaW5rID09IE5VTEwpCisrICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgZWxmX25keHNjbiAoc2NuKSk7CisrCisgICAvKiBOb3cgd2UgY2FuIGNvbXB1dGUgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZWN0aW9uLiAgKi8KKyAgIHVuc2lnbmVkIGludCBuc3ltcyA9IGRhdGEtPmRfc2l6ZSAvIChjbGFzcyA9PSBFTEZDTEFTUzMyCisgCQkJCSAgICAgICA/IHNpemVvZiAoRWxmMzJfU3ltKQorQEAgLTE5NTUsMTUgKzE5NjgsMTIgQEAKKyAJCSAgICBuc3ltcyksCisgCSAgKHVuc2lnbmVkIGludCkgZWxmX25keHNjbiAoc2NuKSwKKyAJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIHNoZHItPnNoX25hbWUpLCBuc3ltcyk7CistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiICVsdSBsb2NhbCBzeW1ib2wgIFN0cmluZyB0YWJsZTogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiICVsdSBsb2NhbCBzeW1ib2xzICBTdHJpbmcgdGFibGU6IFslMnVdICclcydcbiIsCisgCQkgICAgc2hkci0+c2hfaW5mbyksCisgCSAgKHVuc2lnbmVkIGxvbmcgaW50KSBzaGRyLT5zaF9pbmZvLAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgZnB1dHNfdW5sb2NrZWQgKGNsYXNzID09IEVMRkNMQVNTMzIKKyAJCSAgPyBnZXR0ZXh0ICgiXAorQEAgLTIxOTksNyArMjIwOSwxMyBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCistICBHRWxmX1NoZHIgZ2xpbms7CisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gbmVlZHMgc2VjdGlvbiBbJTJ1XSAnJXMnIGNvbnRhaW5zICVkIGVudHJ5OlxuIEFkZHI6ICUjMCoiIFBSSXg2NCAiICBPZmZzZXQ6ICUjMDgiIFBSSXg2NCAiICBMaW5rIHRvIHNlY3Rpb246IFslMnVdICclcydcbiIsCisgCQkgICAgIlwKK0BAIC0yMjEwLDkgKzIyMjYsNyBAQAorIAkgIGNsYXNzID09IEVMRkNMQVNTMzIgPyAxMCA6IDE4LCBzaGRyLT5zaF9hZGRyLAorIAkgIHNoZHItPnNoX29mZnNldCwKKyAJICAodW5zaWduZWQgaW50KSBzaGRyLT5zaF9saW5rLAorLQkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwKKy0JCSAgICAgIGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorLQkJCQkgICAgJmdsaW5rKS0+c2hfbmFtZSkpOworKwkgIGVsZl9zdHJwdHIgKGVibC0+ZWxmLCBzaHN0cm5keCwgZ2xpbmstPnNoX25hbWUpKTsKKyAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSAwOworICAgZm9yIChpbnQgY250ID0gc2hkci0+c2hfaW5mbzsgLS1jbnQgPj0gMDsgKQorQEAgLTIyNjUsOCArMjI3OSwxNCBAQAorICAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICBnZXR0ZXh0ICgiY2Fubm90IGdldCBzZWN0aW9uIGhlYWRlciBzdHJpbmcgdGFibGUgaW5kZXgiKSk7CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgaW50IGNsYXNzID0gZ2VsZl9nZXRjbGFzcyAoZWJsLT5lbGYpOworLSAgR0VsZl9TaGRyIGdsaW5rOworICAgcHJpbnRmIChuZ2V0dGV4dCAoIlwKKyBcblZlcnNpb24gZGVmaW5pdGlvbiBzZWN0aW9uIFslMnVdICclcycgY29udGFpbnMgJWQgZW50cnk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTIyNzgsOSArMjI5OCw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisgICBmb3IgKGludCBjbnQgPSBzaGRyLT5zaF9pbmZvOyAtLWNudCA+PSAwOyApCitAQCAtMjU0Miw4ICsyNTYwLDE0IEBACisgICAgICAgZmlsZW5hbWUgPSBOVUxMOworICAgICB9CisgCisrICBHRWxmX1NoZHIgZ2xpbmtfbWVtOworKyAgR0VsZl9TaGRyICpnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICBlcnJvciAoRVhJVF9GQUlMVVJFLCAwLCBnZXR0ZXh0ICgiaW52YWxpZCBzaF9saW5rIHZhbHVlIGluIHNlY3Rpb24gJVp1IiksCisrCSAgIGVsZl9uZHhzY24gKHNjbikpOworKworICAgLyogUHJpbnQgdGhlIGhlYWRlci4gICovCistICBHRWxmX1NoZHIgZ2xpbms7CisgICBwcmludGYgKG5nZXR0ZXh0ICgiXAorIFxuVmVyc2lvbiBzeW1ib2xzIHNlY3Rpb24gWyUydV0gJyVzJyBjb250YWlucyAlZCBlbnRyeTpcbiBBZGRyOiAlIzAqIiBQUkl4NjQgIiAgT2Zmc2V0OiAlIzA4IiBQUkl4NjQgIiAgTGluayB0byBzZWN0aW9uOiBbJTJ1XSAnJXMnIiwKKyAJCSAgICAiXAorQEAgLTI1NTUsOSArMjU3OSw3IEBACisgCSAgY2xhc3MgPT0gRUxGQ0xBU1MzMiA/IDEwIDogMTgsIHNoZHItPnNoX2FkZHIsCisgCSAgc2hkci0+c2hfb2Zmc2V0LAorIAkgICh1bnNpZ25lZCBpbnQpIHNoZHItPnNoX2xpbmssCistCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LAorLQkJICAgICAgZ2VsZl9nZXRzaGRyIChlbGZfZ2V0c2NuIChlYmwtPmVsZiwgc2hkci0+c2hfbGluayksCistCQkJCSAgICAmZ2xpbmspLT5zaF9uYW1lKSk7CisrCSAgZWxmX3N0cnB0ciAoZWJsLT5lbGYsIHNoc3RybmR4LCBnbGluay0+c2hfbmFtZSkpOworIAorICAgLyogTm93IHdlIGNhbiBmaW5hbGx5IGxvb2sgYXQgdGhlIGFjdHVhbCBjb250ZW50cyBvZiB0aGlzIHNlY3Rpb24uICAqLworICAgZm9yICh1bnNpZ25lZCBpbnQgY250ID0gMDsgY250IDwgc2hkci0+c2hfc2l6ZSAvIHNoZHItPnNoX2VudHNpemU7ICsrY250KQorQEAgLTI2MDksNyArMjYzMSwxNyBAQAorICAgZm9yIChFbGYzMl9Xb3JkIGNudCA9IDA7IGNudCA8IG5idWNrZXQ7ICsrY250KQorICAgICArK2NvdW50c1tsZW5ndGhzW2NudF1dOworIAorLSAgR0VsZl9TaGRyIGdsaW5rOworKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbmsgPSBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLAorKwkJCQkJICAgICAgIHNoZHItPnNoX2xpbmspLAorKwkJCQkgICAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgICBlbGZfbmR4c2NuIChzY24pKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5IaXN0b2dyYW0gZm9yIGJ1Y2tldCBsaXN0IGxlbmd0aCBpbiBzZWN0aW9uIFslMnVdICclcycgKHRvdGFsIG9mICVkIGJ1Y2tldCk6XG4gQWRkcjogJSMwKiIgUFJJeDY0ICIgIE9mZnNldDogJSMwOCIgUFJJeDY0ICIgIExpbmsgdG8gc2VjdGlvbjogWyUydV0gJyVzJ1xuIiwKKyAJCSAgICAiXAorQEAgLTI2MjIsOSArMjY1NCw3IEBACisgCSAgc2hkci0+c2hfYWRkciwKKyAJICBzaGRyLT5zaF9vZmZzZXQsCisgCSAgKHVuc2lnbmVkIGludCkgc2hkci0+c2hfbGluaywKKy0JICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsCistCQkgICAgICBnZWxmX2dldHNoZHIgKGVsZl9nZXRzY24gKGVibC0+ZWxmLCBzaGRyLT5zaF9saW5rKSwKKy0JCQkJICAgICZnbGluayktPnNoX25hbWUpKTsKKysJICBlbGZfc3RycHRyIChlYmwtPmVsZiwgc2hzdHJuZHgsIGdsaW5rLT5zaF9uYW1lKSk7CisgCisgICBpZiAoZXh0cmFzdHIgIT0gTlVMTCkKKyAgICAgZnB1dHMgKGV4dHJhc3RyLCBzdGRvdXQpOworQEAgLTQzMTIsNiArNDM0MiwxNiBAQAorICAgICAgIHJldHVybjsKKyAgICAgfQorIAorKyAgR0VsZl9TaGRyIGdsaW5rX21lbTsKKysgIEdFbGZfU2hkciAqZ2xpbms7CisrICBnbGluayA9IGdlbGZfZ2V0c2hkciAoZWxmX2dldHNjbiAoZWJsLT5lbGYsIHNoZHItPnNoX2xpbmspLCAmZ2xpbmtfbWVtKTsKKysgIGlmIChnbGluayA9PSBOVUxMKQorKyAgICB7CisrICAgICAgZXJyb3IgKDAsIDAsIGdldHRleHQgKCJpbnZhbGlkIHNoX2xpbmsgdmFsdWUgaW4gc2VjdGlvbiAlWnUiKSwKKysJICAgICBlbGZfbmR4c2NuIChzY24pKTsKKysgICAgICByZXR1cm47CisrICAgIH0KKysKKyAgIHByaW50ZiAobmdldHRleHQgKCJcCisgXG5EV0FSRiBzZWN0aW9uIFslMnp1XSAnJXMnIGF0IG9mZnNldCAlIyIgUFJJeDY0ICIgY29udGFpbnMgJXp1IGVudHJ5OlxuIiwKKyAJCSAgICAiXAorSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvc3RyaXAuYwkyMDEwLTA3LTAzIDEzOjA3OjEwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy9zdHJpcC5jCTIwMTAtMDctMDMgMTM6MDc6MTEuMDAwMDAwMDAwICswMDAwCitAQCAtNTYxLDYgKzU2MSwxMSBAQAorICAgICAgIGdvdG8gZmFpbF9jbG9zZTsKKyAgICAgfQorIAorKyAgaWYgKHNoc3RybmR4ID49IHNobnVtKQorKyAgICBnb3RvIGlsbGZvcm1lZDsKKysKKysjZGVmaW5lIGVsZl9hc3NlcnQodGVzdCkgZG8geyBpZiAoISh0ZXN0KSkgZ290byBpbGxmb3JtZWQ7IH0gd2hpbGUgKDApCisrCisgICAvKiBTdG9yYWdlIGZvciBzZWN0aW9uIGluZm9ybWF0aW9uLiAgV2UgbGVhdmUgcm9vbSBmb3IgdHdvIG1vcmUKKyAgICAgIGVudHJpZXMgc2luY2Ugd2UgdW5jb25kaXRpb25hbGx5IGNyZWF0ZSBhIHNlY3Rpb24gaGVhZGVyIHN0cmluZworICAgICAgdGFibGUuICBNYXliZSBzb21lIHdlaXJkIHRvb2wgY3JlYXRlZCBhbiBFTEYgZmlsZSB3aXRob3V0IG9uZS4KK0BAIC01ODIsNyArNTg3LDcgQEAKKyAgICAgeworICAgICAgIC8qIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlIChpLmUuLCB0aGVyZSBzaG91bGQgbm90IGJlIGFueQorIAkgaG9sZXMgaW4gdGhlIG51bWJlcmluZykuICAqLworLSAgICAgIGFzc2VydCAoZWxmX25keHNjbiAoc2NuKSA9PSBjbnQpOworKyAgICAgIGVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNjbikgPT0gY250KTsKKyAKKyAgICAgICBzaGRyX2luZm9bY250XS5zY24gPSBzY247CisgCitAQCAtNTk1LDYgKzYwMCw3IEBACisgCQkJCQlzaGRyX2luZm9bY250XS5zaGRyLnNoX25hbWUpOworICAgICAgIGlmIChzaGRyX2luZm9bY250XS5uYW1lID09IE5VTEwpCisgCXsKKysJaWxsZm9ybWVkOgorIAkgIGVycm9yICgwLCAwLCBnZXR0ZXh0ICgiaWxsZm9ybWVkIGZpbGUgJyVzJyIpLCBmbmFtZSk7CisgCSAgZ290byBmYWlsX2Nsb3NlOworIAl9CitAQCAtNjA0LDYgKzYxMCw4IEBACisgCisgICAgICAgLyogUmVtZW1iZXIgdGhlIHNoZHIuc2hfbGluayB2YWx1ZS4gICovCisgICAgICAgc2hkcl9pbmZvW2NudF0ub2xkX3NoX2xpbmsgPSBzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbms7CisrICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLm9sZF9zaF9saW5rID49IHNobnVtKQorKwlnb3RvIGlsbGZvcm1lZDsKKyAKKyAgICAgICAvKiBTZWN0aW9ucyBpbiBmaWxlcyBvdGhlciB0aGFuIHJlbG9jYXRhYmxlIG9iamVjdCBmaWxlcyB3aGljaAorIAkgYXJlIG5vdCBsb2FkZWQgY2FuIGJlIGZyZWVseSBtb3ZlZCBieSB1cy4gIEluIHJlbG9jYXRhYmxlCitAQCAtNjE2LDcgKzYyNCw3IEBACisgCSBhcHByb3ByaWF0ZSByZWZlcmVuY2UuICAqLworICAgICAgIGlmICh1bmxpa2VseSAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUJfU0hORFgpKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9saW5rXS5zeW10YWJfaWR4ID09IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnN5bXRhYl9pZHggPT0gMCk7CisgCSAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfbGlua10uc3ltdGFiX2lkeCA9IGNudDsKKyAJfQorICAgICAgIGVsc2UgaWYgKHVubGlrZWx5IChzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX0dST1VQKSkKK0BAIC02MzMsNyArNjQxLDEyIEBACisgCSAgZm9yIChpbm5lciA9IDE7CisgCSAgICAgICBpbm5lciA8IHNoZHJfaW5mb1tjbnRdLmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCk7CisgCSAgICAgICArK2lubmVyKQorKwkgICAgeworKwkgICAgICBpZiAoZ3JwcmVmW2lubmVyXSA8IHNobnVtKQorIAkgICAgc2hkcl9pbmZvW2dycHJlZltpbm5lcl1dLmdyb3VwX2lkeCA9IGNudDsKKysJICAgICAgZWxzZQorKwkJZ290byBpbGxmb3JtZWQ7CisrCSAgICB9CisgCisgCSAgaWYgKGlubmVyID09IDEgfHwgKGlubmVyID09IDIgJiYgKGdycHJlZlswXSAmIEdSUF9DT01EQVQpID09IDApKQorIAkgICAgLyogSWYgdGhlIHNlY3Rpb24gZ3JvdXAgY29udGFpbnMgb25seSBvbmUgZWxlbWVudCBhbmQgdGhpcworQEAgLTY0NCw3ICs2NTcsNyBAQAorIAl9CisgICAgICAgZWxzZSBpZiAodW5saWtlbHkgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfR05VX3ZlcnN5bSkpCisgCXsKKy0JICBhc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID09IDApOworKwkgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID09IDApOworIAkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2xpbmtdLnZlcnNpb25faWR4ID0gY250OworIAl9CisgCitAQCAtNjUyLDcgKzY2NSw3IEBACisgCSBkaXNjYXJkZWQgcmlnaHQgYXdheS4gICovCisgICAgICAgaWYgKChzaGRyX2luZm9bY250XS5zaGRyLnNoX2ZsYWdzICYgU0hGX0dST1VQKSAhPSAwKQorIAl7CistCSAgYXNzZXJ0IChzaGRyX2luZm9bY250XS5ncm91cF9pZHggIT0gMCk7CisrCSAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4ICE9IDApOworIAorIAkgIGlmIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uZ3JvdXBfaWR4XS5pZHggPT0gMCkKKyAJICAgIHsKK0BAIC03MjcsMTEgKzc0MCwxNSBAQAorIAkgICAgeworIAkgICAgICAvKiBJZiBhIHJlbG9jYXRpb24gc2VjdGlvbiBpcyBtYXJrZWQgYXMgYmVpbmcgcmVtb3ZlZCBtYWtlCisgCQkgc3VyZSB0aGUgc2VjdGlvbiBpdCBpcyByZWxvY2F0aW5nIGlzIHJlbW92ZWQsIHRvby4gICovCistCSAgICAgIGlmICgoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9SRUwKKysJICAgICAgaWYgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfUkVMCisgCQkgICB8fCBzaGRyX2luZm9bY250XS5zaGRyLnNoX3R5cGUgPT0gU0hUX1JFTEEpCistCQkgICYmIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCAhPSAwKQorKwkJeworKwkJICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvID49IHNobnVtKQorKwkJICAgIGdvdG8gaWxsZm9ybWVkOworKwkJICBlbHNlIGlmIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvXS5pZHggIT0gMCkKKyAJCXNoZHJfaW5mb1tjbnRdLmlkeCA9IDE7CisgCSAgICB9CisrCSAgICB9CisgCisgCSAgaWYgKHNoZHJfaW5mb1tjbnRdLmlkeCA9PSAxKQorIAkgICAgeworQEAgLTc1OCw3ICs3NzUsNyBAQAorIAkJICBpZiAoc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeCAhPSAwCisgCQkgICAgICAmJiBzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uZGF0YSA9PSBOVUxMKQorIAkJICAgIHsKKy0JCSAgICAgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUIpOworKwkJICAgICAgZWxmX2Fzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9TWU1UQUIpOworIAorIAkJICAgICAgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLmRhdGEKKyAJCQk9IGVsZl9nZXRkYXRhIChzaGRyX2luZm9bc2hkcl9pbmZvW2NudF0uc3ltdGFiX2lkeF0uc2NuLAorQEAgLTc5OCw2ICs4MTUsOSBAQAorIAkJICAgICAgZWxzZSBpZiAoc2NuaWR4ID09IFNITl9YSU5ERVgpCisgCQkJc2NuaWR4ID0geG5keDsKKyAKKysJCSAgICAgIGlmIChzY25pZHggPj0gc2hudW0pCisrCQkJZ290byBpbGxmb3JtZWQ7CisrCisgCQkgICAgICBpZiAoc2hkcl9pbmZvW3NjbmlkeF0uaWR4ID09IDApCisgCQkJLyogVGhpcyBzeW1ib2wgdGFibGUgaGFzIGEgcmVhbCBzeW1ib2wgaW4KKyAJCQkgICBhIGRpc2NhcmRlZCBzZWN0aW9uLiAgU28gcHJlc2VydmUgdGhlCitAQCAtODI4LDEyICs4NDgsMTYgQEAKKyAJCX0KKyAKKyAJICAgICAgLyogSGFuZGxlIHJlZmVyZW5jZXMgdGhyb3VnaCBzaF9pbmZvLiAgKi8KKy0JICAgICAgaWYgKFNIX0lORk9fTElOS19QICgmc2hkcl9pbmZvW2NudF0uc2hkcikKKy0JCSAgJiYgc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID09IDApCisrCSAgICAgIGlmIChTSF9JTkZPX0xJTktfUCAoJnNoZHJfaW5mb1tjbnRdLnNoZHIpKQorKwkJeworKwkJICBpZiAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvID49IHNobnVtKQorKwkJICAgIGdvdG8gaWxsZm9ybWVkOworKwkJICBlbHNlIGlmICggc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnNoZHIuc2hfaW5mb10uaWR4ID09IDApCisgCQl7CisgCQkgIHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS5zaGRyLnNoX2luZm9dLmlkeCA9IDE7CisgCQkgIGNoYW5nZXMgfD0gc2hkcl9pbmZvW2NudF0uc2hkci5zaF9pbmZvIDwgY250OworIAkJfQorKwkJfQorIAorIAkgICAgICAvKiBNYXJrIHRoZSBzZWN0aW9uIGFzIGludmVzdGlnYXRlZC4gICovCisgCSAgICAgIHNoZHJfaW5mb1tjbnRdLmlkeCA9IDI7CitAQCAtOTcyLDcgKzk5Niw3IEBACisgCSAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwgZ2V0dGV4dCAoIndoaWxlIGdlbmVyYXRpbmcgb3V0cHV0IGZpbGU6ICVzIiksCisgCQkgZWxmX2Vycm1zZyAoLTEpKTsKKyAKKy0JYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisrCWVsZl9hc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKyAKKyAJLyogQWRkIHRoaXMgbmFtZSB0byB0aGUgc2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlLiAgKi8KKyAJc2hkcl9pbmZvW2NudF0uc2UgPSBlYmxfc3RydGFiYWRkIChzaHN0LCBzaGRyX2luZm9bY250XS5uYW1lLCAwKTsKK0BAIC0xMDA5LDcgKzEwMzMsNyBAQAorIAllcnJvciAoRVhJVF9GQUlMVVJFLCAwLAorIAkgICAgICAgZ2V0dGV4dCAoIndoaWxlIGNyZWF0ZSBzZWN0aW9uIGhlYWRlciBzZWN0aW9uOiAlcyIpLAorIAkgICAgICAgZWxmX2Vycm1zZyAoLTEpKTsKKy0gICAgICBhc3NlcnQgKGVsZl9uZHhzY24gKHNoZHJfaW5mb1tjbnRdLm5ld3NjbikgPT0gc2hkcl9pbmZvW2NudF0uaWR4KTsKKysgICAgICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IHNoZHJfaW5mb1tjbnRdLmlkeCk7CisgCisgICAgICAgc2hkcl9pbmZvW2NudF0uZGF0YSA9IGVsZl9uZXdkYXRhIChzaGRyX2luZm9bY250XS5uZXdzY24pOworICAgICAgIGlmIChzaGRyX2luZm9bY250XS5kYXRhID09IE5VTEwpCitAQCAtMTA2NSw3ICsxMDg5LDcgQEAKKyAgICAgZXJyb3IgKEVYSVRfRkFJTFVSRSwgMCwKKyAJICAgZ2V0dGV4dCAoIndoaWxlIGNyZWF0ZSBzZWN0aW9uIGhlYWRlciBzZWN0aW9uOiAlcyIpLAorIAkgICBlbGZfZXJybXNnICgtMSkpOworLSAgYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IGlkeCk7CisrICBlbGZfYXNzZXJ0IChlbGZfbmR4c2NuIChzaGRyX2luZm9bY250XS5uZXdzY24pID09IGlkeCk7CisgCisgICAvKiBGaW5hbGl6ZSB0aGUgc3RyaW5nIHRhYmxlIGFuZCBmaWxsIGluIHRoZSBjb3JyZWN0IGluZGljZXMgaW4gdGhlCisgICAgICBzZWN0aW9uIGhlYWRlcnMuICAqLworQEAgLTExNTUsMjAgKzExNzksMjAgQEAKKyAJCSAgICBzaG5keGRhdGEgPSBlbGZfZ2V0ZGF0YSAoc2hkcl9pbmZvW3NoZHJfaW5mb1tjbnRdLnN5bXRhYl9pZHhdLnNjbiwKKyAJCQkJCSAgICAgTlVMTCk7CisgCistCQkgICAgYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoRWxmMzJfV29yZCkpCisrCQkgICAgZWxmX2Fzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEVsZjMyX1dvcmQpKQorIAkJCSAgICA+PSBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBlbHNpemUpOworIAkJICB9CisgCisgCQlpZiAoc2hkcl9pbmZvW2NudF0udmVyc2lvbl9pZHggIT0gMCkKKyAJCSAgeworLQkJICAgIGFzc2VydCAoc2hkcl9pbmZvW2NudF0uc2hkci5zaF90eXBlID09IFNIVF9EWU5TWU0pOworKwkJICAgIGVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfdHlwZSA9PSBTSFRfRFlOU1lNKTsKKyAJCSAgICAvKiBUaGlzIHNlY3Rpb24gaGFzIGFzc29jaWF0ZWQgdmVyc2lvbgorIAkJICAgICAgIGluZm9ybWF0aW9uLiAgV2UgaGF2ZSB0byBtb2RpZnkgdGhhdAorIAkJICAgICAgIGluZm9ybWF0aW9uLCB0b28uICAqLworIAkJICAgIHZlcnNpb25kYXRhID0gZWxmX2dldGRhdGEgKHNoZHJfaW5mb1tzaGRyX2luZm9bY250XS52ZXJzaW9uX2lkeF0uc2NuLAorIAkJCQkJICAgICAgIE5VTEwpOworIAorLQkJICAgIGFzc2VydCAoKHZlcnNpb25kYXRhLT5kX3NpemUgLyBzaXplb2YgKEdFbGZfVmVyc3ltKSkKKysJCSAgICBlbGZfYXNzZXJ0ICgodmVyc2lvbmRhdGEtPmRfc2l6ZSAvIHNpemVvZiAoR0VsZl9WZXJzeW0pKQorIAkJCSAgICA+PSBzaGRyX2luZm9bY250XS5kYXRhLT5kX3NpemUgLyBlbHNpemUpOworIAkJICB9CisgCitAQCAtMTIyMyw3ICsxMjQ3LDcgQEAKKyAJCSAgICAgIHNlYyA9IHNoZHJfaW5mb1tzeW0tPnN0X3NobmR4XS5pZHg7CisgCQkgICAgZWxzZQorIAkJICAgICAgeworLQkJCWFzc2VydCAoc2huZHhkYXRhICE9IE5VTEwpOworKwkJCWVsZl9hc3NlcnQgKHNobmR4ZGF0YSAhPSBOVUxMKTsKKyAKKyAJCQlzZWMgPSBzaGRyX2luZm9beHNobmR4XS5pZHg7CisgCQkgICAgICB9CitAQCAtMTI0NCw3ICsxMjY4LDcgQEAKKyAJCQkgICAgbnhzaG5keCA9IHNlYzsKKyAJCQkgIH0KKyAKKy0JCQlhc3NlcnQgKHNlYyA8IFNITl9MT1JFU0VSVkUgfHwgc2huZHhkYXRhICE9IE5VTEwpOworKwkJCWVsZl9hc3NlcnQgKHNlYyA8IFNITl9MT1JFU0VSVkUgfHwgc2huZHhkYXRhICE9IE5VTEwpOworIAorIAkJCWlmICgoaW5uZXIgIT0gZGVzdGlkeCB8fCBuc2huZHggIT0gc3ltLT5zdF9zaG5keAorIAkJCSAgICAgfHwgKHNobmR4ZGF0YSAhPSBOVUxMICYmIG54c2huZHggIT0geHNobmR4KSkKK0BAIC0xMjY4LDcgKzEyOTIsNyBAQAorIAkJCSAgICAgfHwgc2hkcl9pbmZvW2NudF0uZGVidWdfZGF0YSA9PSBOVUxMKQorIAkJICAgICAgLyogVGhpcyBpcyBhIHNlY3Rpb24gc3ltYm9sIGZvciBhIHNlY3Rpb24gd2hpY2ggaGFzCisgCQkJIGJlZW4gcmVtb3ZlZC4gICovCistCQkgICAgICBhc3NlcnQgKEdFTEZfU1RfVFlQRSAoc3ltLT5zdF9pbmZvKSA9PSBTVFRfU0VDVElPTik7CisrCQkgICAgICBlbGZfYXNzZXJ0IChHRUxGX1NUX1RZUEUgKHN5bS0+c3RfaW5mbykgPT0gU1RUX1NFQ1RJT04pOworIAkJICB9CisgCisgCQlpZiAoZGVzdGlkeCAhPSBpbm5lcikKK0BAIC0xNDU1LDExICsxNDc5LDExIEBACisgCQkgIHsKKyAJCSAgICBHRWxmX1N5bSBzeW1fbWVtOworIAkJICAgIEdFbGZfU3ltICpzeW0gPSBnZWxmX2dldHN5bSAoc3ltZCwgaW5uZXIsICZzeW1fbWVtKTsKKy0JCSAgICBhc3NlcnQgKHN5bSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChzeW0gIT0gTlVMTCk7CisgCisgCQkgICAgY29uc3QgY2hhciAqbmFtZSA9IGVsZl9zdHJwdHIgKGVsZiwgc3Ryc2huZHgsCisgCQkJCQkJICAgc3ltLT5zdF9uYW1lKTsKKy0JCSAgICBhc3NlcnQgKG5hbWUgIT0gTlVMTCk7CisrCQkgICAgZWxmX2Fzc2VydCAobmFtZSAhPSBOVUxMKTsKKyAJCSAgICBzaXplX3QgaGlkeCA9IGVsZl9oYXNoIChuYW1lKSAlIG5idWNrZXQ7CisgCisgCQkgICAgaWYgKGJ1Y2tldFtoaWR4XSA9PSAwKQorQEAgLTE0NzgsNyArMTUwMiw3IEBACisgCSAgICBlbHNlCisgCSAgICAgIHsKKyAJCS8qIEFscGhhIGFuZCBTMzkwIDY0LWJpdCB1c2UgNjQtYml0IFNIVF9IQVNIIGVudHJpZXMuICAqLworLQkJYXNzZXJ0IChzaGRyX2luZm9bY250XS5zaGRyLnNoX2VudHNpemUKKysJCWVsZl9hc3NlcnQgKHNoZHJfaW5mb1tjbnRdLnNoZHIuc2hfZW50c2l6ZQorIAkJCT09IHNpemVvZiAoRWxmNjRfWHdvcmQpKTsKKyAKKyAJCUVsZjY0X1h3b3JkICpidWNrZXQgPSAoRWxmNjRfWHdvcmQgKikgaGFzaGQtPmRfYnVmOworQEAgLTE1MDksMTEgKzE1MzMsMTEgQEAKKyAJCSAgeworIAkJICAgIEdFbGZfU3ltIHN5bV9tZW07CisgCQkgICAgR0VsZl9TeW0gKnN5bSA9IGdlbGZfZ2V0c3ltIChzeW1kLCBpbm5lciwgJnN5bV9tZW0pOworLQkJICAgIGFzc2VydCAoc3ltICE9IE5VTEwpOworKwkJICAgIGVsZl9hc3NlcnQgKHN5bSAhPSBOVUxMKTsKKyAKKyAJCSAgICBjb25zdCBjaGFyICpuYW1lID0gZWxmX3N0cnB0ciAoZWxmLCBzdHJzaG5keCwKKyAJCQkJCQkgICBzeW0tPnN0X25hbWUpOworLQkJICAgIGFzc2VydCAobmFtZSAhPSBOVUxMKTsKKysJCSAgICBlbGZfYXNzZXJ0IChuYW1lICE9IE5VTEwpOworIAkJICAgIHNpemVfdCBoaWR4ID0gZWxmX2hhc2ggKG5hbWUpICUgbmJ1Y2tldDsKKyAKKyAJCSAgICBpZiAoYnVja2V0W2hpZHhdID09IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC9yZW1vdmUtdW51c2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTk3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgvcmVtb3ZlLXVudXNlZC5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBmcm9tIHRoZSBjb2RlIHRvIHByZXZlbnQgLVdlcnJvciBjYXVzaW5nIGEgYnVpbGQKK2ZhaWx1cmUgb24gaG9zdHMgd2l0aCBHQ0MgNC42LgorCitUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgdXBzdHJlYW0gc28gc2hvdWxkIG5vdCBiZSByZXF1aXJlZCBvbmNlIHdlJ3ZlIHVwZGF0ZWQKK3RvIGVsZnV0aWxzIDAuMTUyIG9yIGxhdGVyLiBUaGVyZWZvcmUgdGhpcyBwYXRjaCBjb25zb2xpZGF0ZXMgc2V2ZXJhbAorY2hhbmdlcyBmcm9tIGVsZnV0aWxzIHVwc3RyZWFtIGJ5IFJvbGFuZCBNY0dyYXRoIGludG8gYSBzaW5nbGUgZmlsZSBzbyB0aGF0CitpdCdzIGVhc2llciB0byByZW1vdmUgbGF0ZXIgb25jZSB3ZSB1cGdyYWRlLgorTGlua3MgdG8gdXBzdHJlYW0gZ2l0d2ViIG9mIHRoZSBjb25zb2xpZGF0ZWQgY29tbWl0cyBmb2xsb3c6CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD03MDk0ZDAwYTE2OWFmYjI3ZTAzMjNmODU4MGU4MTc3OThhZTdjMjQwCistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD1mZDk5MjU0MzE4NTEyNmViMDI4MGMxZWUwODgzZTA3MzAyMDQ5OWI0CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD00ZGI4OWYwNGJiNTkzMjdhYmQ3YTNiNjBlODhmMmU3ZTczYzY1Yzc5CistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD04ZjZjMTc5NWFiOWQ0MWYwMzgwNWVlYmQ1NTc2NzA3MGFkZTU1YWFjCistIGh0dHA6Ly9naXQuZmVkb3JhaG9zdGVkLm9yZy9naXQ/cD1lbGZ1dGlscy5naXQ7YT1jb21taXQ7aD0yNDA3ODRiNDhhYTI3NjgyMmM1YTYxYzlhZDZhNDM1NTA1MWNlMjU5CisKK0pvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4gLSAwNi8wNC8xMQorCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliYXNtL2FzbV9uZXdzY24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliYXNtL2FzbV9uZXdzY24uYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmFzbS9hc21fbmV3c2NuLmMKK0BAIC0xNjIsNyArMTYyLDYgQEAgYXNtX25ld3NjbiAoY3R4LCBzY25uYW1lLCB0eXBlLCBmbGFncykKKyAgICAgIEdFbGZfWHdvcmQgZmxhZ3M7CisgeworICAgc2l6ZV90IHNjbm5hbWVfbGVuID0gc3RybGVuIChzY25uYW1lKSArIDE7CistICB1bnNpZ25lZCBsb25nIGludCBodmFsOworICAgQXNtU2NuX3QgKnJlc3VsdDsKKyAKKyAgIC8qIElmIG5vIGNvbnRleHQgaXMgZ2l2ZW4gdGhlcmUgbWlnaHQgYmUgYW4gZWFybGllciBlcnJvci4gICovCitAQCAtMTgwLDggKzE3OSw2IEBAIGFzbV9uZXdzY24gKGN0eCwgc2NubmFtZSwgdHlwZSwgZmxhZ3MpCisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgIH0KKyAKKy0gIGh2YWwgPSBlbGZfaGFzaCAoc2NubmFtZSk7CistCisgICByd2xvY2tfd3Jsb2NrIChjdHgtPmxvY2spOworIAorICAgLyogVGhpcyBpcyBhIG5ldyBzZWN0aW9uLiAgKi8KK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9zcmMvZWxmbGludC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNDgub3JpZy9zcmMvZWxmbGludC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2VsZmxpbnQuYworQEAgLTcwNyw5ICs3MDcsMTAgQEAgc2VjdGlvbiBbJTJkXSAnJXMnOiBzeW1ib2wgJXp1OiBpbnZhbGlkIAorIAl7CisgCSAgaWYgKHhuZHhkYXRhID09IE5VTEwpCisgCSAgICB7CistCSAgICAgIEVSUk9SIChnZXR0ZXh0ICgiXAorKwkgICAgICBpZiAoIW5vX3huZHhfd2FybmVkKQorKwkJRVJST1IgKGdldHRleHQgKCJcCisgc2VjdGlvbiBbJTJkXSAnJXMnOiBzeW1ib2wgJXp1OiB0b28gbGFyZ2Ugc2VjdGlvbiBpbmRleCBidXQgbm8gZXh0ZW5kZWQgc2VjdGlvbiBpbmRleCBzZWN0aW9uXG4iKSwKKy0JCSAgICAgaWR4LCBzZWN0aW9uX25hbWUgKGVibCwgaWR4KSwgY250KTsKKysJCSAgICAgICBpZHgsIHNlY3Rpb25fbmFtZSAoZWJsLCBpZHgpLCBjbnQpOworIAkgICAgICBub194bmR4X3dhcm5lZCA9IHRydWU7CisgCSAgICB9CisgCSAgZWxzZSBpZiAoeG5keCA8IFNITl9MT1JFU0VSVkUpCitAQCAtMTU5MiwxMCArMTU5Myw2IEBAIGNoZWNrX2R5bmFtaWMgKEVibCAqZWJsLCBHRWxmX0VoZHIgKmVoZHIKKyAgICAgICBbRFRfU1RSU1pdID0gdHJ1ZSwKKyAgICAgICBbRFRfU1lNRU5UXSA9IHRydWUKKyAgICAgfTsKKy0gIEdFbGZfQWRkciByZWxhZGRyID0gMDsKKy0gIEdFbGZfV29yZCByZWxzeiA9IDA7CistICBHRWxmX0FkZHIgcGx0cmVsYWRkciA9IDA7CistICBHRWxmX1dvcmQgcGx0cmVsc3ogPSAwOworIAorICAgbWVtc2V0IChoYXNfZHQsICdcMCcsIHNpemVvZiAoaGFzX2R0KSk7CisgICBtZW1zZXQgKGhhc192YWxfZHQsICdcMCcsIHNpemVvZiAoaGFzX3ZhbF9kdCkpOworQEAgLTE2OTQsMTUgKzE2OTEsNiBAQCBzZWN0aW9uIFslMmRdICclcyc6IGVudHJ5ICV6dTogbGV2ZWwgMiB0Cisgc2VjdGlvbiBbJTJkXSAnJXMnOiBlbnRyeSAlenU6IERUX1BMVFJFTCB2YWx1ZSBtdXN0IGJlIERUX1JFTCBvciBEVF9SRUxBXG4iKSwKKyAJICAgICAgIGlkeCwgc2VjdGlvbl9uYW1lIChlYmwsIGlkeCksIGNudCk7CisgCistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUkVMKQorLQlyZWxhZGRyID0gZHluLT5kX3VuLmRfcHRyOworLSAgICAgIGlmIChkeW4tPmRfdGFnID09IERUX1JFTFNaKQorLQlyZWxzeiA9IGR5bi0+ZF91bi5kX3ZhbDsKKy0gICAgICBpZiAoZHluLT5kX3RhZyA9PSBEVF9KTVBSRUwpCistCXBsdHJlbGFkZHIgPSBkeW4tPmRfdW4uZF9wdHI7CistICAgICAgaWYgKGR5bi0+ZF90YWcgPT0gRFRfUExUUkVMU1opCistCXBsdHJlbHN6ID0gZHluLT5kX3VuLmRfdmFsOworLQorICAgICAgIC8qIENoZWNrIHRoYXQgYWRkcmVzc2VzIGZvciBlbnRyaWVzIGFyZSBpbiBsb2FkZWQgc2VnbWVudHMuICAqLworICAgICAgIHN3aXRjaCAoZHluLT5kX3RhZykKKyAJeworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L3NyYy9sZGdlbmVyaWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL2xkZ2VuZXJpYy5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkZ2VuZXJpYy5jCitAQCAtMjg1LDEyICsyODUsMTAgQEAgc3RhdGljIGludAorIGNoZWNrX2Zvcl9kdXBsaWNhdGUyIChzdHJ1Y3QgdXNlZGZpbGVzICpuZXdwLCBzdHJ1Y3QgdXNlZGZpbGVzICpsaXN0KQorIHsKKyAgIHN0cnVjdCB1c2VkZmlsZXMgKmZpcnN0OworLSAgc3RydWN0IHVzZWRmaWxlcyAqcHJldnA7CisgCisgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICByZXR1cm4gMDsKKyAKKy0gIHByZXZwID0gbGlzdDsKKyAgIGxpc3QgPSBmaXJzdCA9IGxpc3QtPm5leHQ7CisgICBkbworICAgICB7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZHNjcmlwdC55CisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LnkKK0BAIC04MDIsMTIgKzgwMiw5IEBAIGFkZF92ZXJzaW9ucyAoc3RydWN0IHZlcnNpb24gKnZlcnNpb25zKQorIAorICAgZG8KKyAgICAgeworLSAgICAgIHN0cnVjdCB2ZXJzaW9uICpvbGRwOworLQorICAgICAgIGFkZF9pZF9saXN0ICh2ZXJzaW9ucy0+dmVyc2lvbm5hbWUsIHZlcnNpb25zLT5sb2NhbF9uYW1lcywgdHJ1ZSk7CisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmdsb2JhbF9uYW1lcywgZmFsc2UpOworIAorLSAgICAgIG9sZHAgPSB2ZXJzaW9uczsKKyAgICAgICB2ZXJzaW9ucyA9IHZlcnNpb25zLT5uZXh0OworICAgICB9CisgICB3aGlsZSAodmVyc2lvbnMgIT0gTlVMTCk7CitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL3Vuc3RyaXAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL3Vuc3RyaXAuYworKysrIGVsZnV0aWxzLTAuMTQ4L3NyYy91bnN0cmlwLmMKK0BAIC0xMzAxLDcgKzEzMDEsNiBAQCBtb3JlIHNlY3Rpb25zIGluIHN0cmlwcGVkIGZpbGUgdGhhbiBkZWJ1CisgICAvKiBNYXRjaCBlYWNoIGRlYnVnaW5mbyBzZWN0aW9uIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgc3RyaXBwZWQgc2VjdGlvbi4gICovCisgICBib29sIGNoZWNrX3ByZWxpbmsgPSBmYWxzZTsKKyAgIEVsZl9TY24gKnVuc3RyaXBwZWRfc3ltdGFiID0gTlVMTDsKKy0gIHNpemVfdCB1bnN0cmlwcGVkX3N0cnRhYl9uZHggPSBTSE5fVU5ERUY7CisgICBzaXplX3QgYWxsb2NfYXZhaWwgPSAwOworICAgc2NuID0gTlVMTDsKKyAgIHdoaWxlICgoc2NuID0gZWxmX25leHRzY24gKHVuc3RyaXBwZWQsIHNjbikpICE9IE5VTEwpCitAQCAtMTMxMyw3ICsxMzEyLDYgQEAgbW9yZSBzZWN0aW9ucyBpbiBzdHJpcHBlZCBmaWxlIHRoYW4gZGVidQorICAgICAgIGlmIChzaGRyLT5zaF90eXBlID09IFNIVF9TWU1UQUIpCisgCXsKKyAJICB1bnN0cmlwcGVkX3N5bXRhYiA9IHNjbjsKKy0JICB1bnN0cmlwcGVkX3N0cnRhYl9uZHggPSBzaGRyLT5zaF9saW5rOworIAkgIGNvbnRpbnVlOworIAl9CisgCitJbmRleDogZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3NyYy9sZHNjcmlwdC5jCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL2xkc2NyaXB0LmMKK0BAIC0yNzI4LDEyICsyNzI4LDkgQEAgYWRkX3ZlcnNpb25zIChzdHJ1Y3QgdmVyc2lvbiAqdmVyc2lvbnMpCisgCisgICBkbworICAgICB7CistICAgICAgc3RydWN0IHZlcnNpb24gKm9sZHA7CistCisgICAgICAgYWRkX2lkX2xpc3QgKHZlcnNpb25zLT52ZXJzaW9ubmFtZSwgdmVyc2lvbnMtPmxvY2FsX25hbWVzLCB0cnVlKTsKKyAgICAgICBhZGRfaWRfbGlzdCAodmVyc2lvbnMtPnZlcnNpb25uYW1lLCB2ZXJzaW9ucy0+Z2xvYmFsX25hbWVzLCBmYWxzZSk7CisgCistICAgICAgb2xkcCA9IHZlcnNpb25zOworICAgICAgIHZlcnNpb25zID0gdmVyc2lvbnMtPm5leHQ7CisgICAgIH0KKyAgIHdoaWxlICh2ZXJzaW9ucyAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkyZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworT24gbWFueSBhcmNoaXRlY3R1cmVzIHRoaXMgdGVzdCBmYWlscyBiZWNhdXNlIGJpbmFyaWVzL2xpYnMgcHJvZHVjZWQgYnkKK2JpbnV0aWxzIGRvbid0IHBhc3MgZWxmbGludC4gSG93ZXZlciBlbGZ1dGlscyBzaG91bGRuJ3QgRlRCRlMgYmVjYXVzZSBvZiB0aGlzLgorCitTbyB3ZSBydW4gdGhlIHRlc3RzIG9uIGFsbCBhcmNocyB0byBzZWUgd2hhdCBicmVha3MsIGJ1dCBpZiBpdCBicmVha3Mgd2UgaWdub3JlCit0aGUgcmVzdWx0IChleGl0Y29kZSA3NyBtZWFuczogdGhpcyB0ZXN0IHdhcyBza2lwcGVkKS4KKworSW5kZXg6IGVsZnV0aWxzLTAuMTI4L3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjEyOC5vcmlnL3Rlc3RzL3J1bi1lbGZsaW50LXNlbGYuc2gJMjAwNy0wNy0wOCAyMTo0NjoxNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjEyOC90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMDctMDctMDggMjE6NDY6NDkuMDAwMDAwMDAwICswMDAwCitAQCAtMzIsNyArMzIsNyBAQAorICMgIGVjaG8gJDEKKyAgIGlmIFsgLWYgJDEgXTsgdGhlbgorICAgICB0ZXN0cnVuIC4uL3NyYy9lbGZsaW50IC0tcXVpZXQgLS1nbnUtbGQgJDEgfHwKKy0gICAgeyBlY2hvICIqKiogZmFpbHVyZSBpbiAkMSI7IHN0YXR1cz0xOyB9CisrICAgIHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJDEiOyBzdGF0dXM9Nzc7IH0KKyAgIGZpCisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmMTZhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE0OC91Y2xpYmMtc3VwcG9ydC1mb3ItZWxmdXRpbHMtMC4xNDgucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorb24gdWNsaWJjIHN5c3RlbXMgbGliaW50bCBhbmQgbGlidWFyZ3AgYXJlIHNlcGFyYXRlIGZyb20gbGliYy4KK3NvIHRoZXkgbmVlZCB0byBiZSBzcGVjaWZpZWQgb24gY29tbWFuZGxpbmUgd2hlbiB3ZSB1c2UgcHJveHktbGliaW50bAordGhlbiBsaWJpbnRsIGlzIGEgc3RhdGljIGFyY2hpdmUgc28gaXQgc2hvdWxkIGJlIGxpc3RlZCBsYXN0IHNpbmNlCitlbGZ1dGlscyBkb2VzIG5vdCByZXNwZWN0IGRpc2FibGUtbmxzIHdlIG5lZWQgdG8gbGluayBpbiBsaWJpbnRsCisKK1dlIGFkZCBhIG5ldyBvcHRpb24gLS1lbmFibGUtdWNsaWJjIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjb250cm9sCit0aGUgdWNsaWJjIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGR1cmluZyBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3VjbGliYyBzcGVjaWZpY10KKworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZWxmdXRpbHMtMC4xNDgvY29uZmlndXJlLmFjCitAQCAtNTUsOSArNTUsMTYgQEAgQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwgW0FDX0RFRgorIAorIEFIX1RFTVBMQVRFKFtVU0VfTE9DS1NdLCBbRGVmaW5lZCBpZiBsaWJyYXJpZXMgc2hvdWxkIGJlIHRocmVhZC1zYWZlLl0pCisgCisrQUNfQVJHX0VOQUJMRShbdWNsaWJjXSwKKytBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdWNsaWJjXSwgW1VzZSB1Y2xpYmMgZm9yIHN5c3RlbSBsaWJyYXJpZXNdKSwKKyt1c2VfdWNsaWJjPXllcywgdXNlX3VjbGliYz1ubykKKytBTV9DT05ESVRJT05BTChVU0VfVUNMSUJDLCB0ZXN0ICIkdXNlX3VjbGliYyIgPSB5ZXMpCisrQVNfSUYoW3Rlc3QgIiR1c2VfdWNsaWJjIiA9IHllc10sIFtBQ19ERUZJTkUoVVNFX1VDTElCQyldKQorKworK0FIX1RFTVBMQVRFKFtVU0VfVUNMSUJDXSwgW0RlZmluZWQgaWYgdWNsaWJjIGxpYnJhcmllcyBhcmUgdXNlZC5dKQorKworIGRubCBBZGQgYWxsIHRoZSBsYW5ndWFnZXMgZm9yIHdoaWNoIHRyYW5zbGF0aW9ucyBhcmUgYXZhaWxhYmxlLgorIEFMTF9MSU5HVUFTPQorLQorIEFDX1BST0dfQ0MKKyBBQ19QUk9HX1JBTkxJQgorIEFDX1BST0dfWUFDQworSW5kZXg6IGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvbGliZWxmL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZWxmL01ha2VmaWxlLmFtCitAQCAtOTMsNyArOTMsMTIgQEAgaWYgIU1VREZMQVAKKyBsaWJlbGZfcGljX2FfU09VUkNFUyA9CisgYW1fbGliZWxmX3BpY19hX09CSkVDVFMgPSAkKGxpYmVsZl9hX1NPVVJDRVM6LmM9Lm9zKQorIAorKworIGxpYmVsZl9zb19MRExJQlMgPQorK2lmIFVTRV9VQ0xJQkMKKytsaWJlbGZfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBpZiBVU0VfTE9DS1MKKyBsaWJlbGZfc29fTERMSUJTICs9IC1scHRocmVhZAorIGVuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNDgvbGliZHcvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmR3L01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvbGliZHcvTWFrZWZpbGUuYW0KK0BAIC05OCw2ICs5OCwxMSBAQCBpZiAhTVVERkxBUAorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBsaWJkd19zb19TT1VSQ0VTID0KKyBsaWJkdy5zbzogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSBcCisgCSAgLi4vbGliZHdmbC9saWJkd2ZsX3BpYy5hIC4uL2xpYmVibC9saWJlYmwuYSBcCitAQCAtMTA4LDcgKzExMyw3IEBAIGxpYmR3LnNvOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy4KKyAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKKy0JCS1sZGwgJCh6aXBfTElCUykKKysJCS1sZGwgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCisgCWlmIHJlYWRlbGYgLWQgJEAgfCBmZ3JlcCAtcSBURVhUUkVMOyB0aGVuIGV4aXQgMTsgZmkKKyAJbG4gLWZzICRAICRALiQoVkVSU0lPTikKKyAKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJjcHUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmNwdS9NYWtlZmlsZS5hbQorKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmNwdS9NYWtlZmlsZS5hbQorQEAgLTYzLDYgKzYzLDEwIEBAIGkzODZfcGFyc2VfQ0ZMQUdTID0gLUROTU5FUz0iYHdjIC1sIDwgaTMKKyBpMzg2X2xleC5vOiBpMzg2X3BhcnNlLmgKKyBpMzg2X2dlbmRpc19MREFERCA9ICQobGliZXUpIC1sbSAkKGxpYm11ZGZsYXApCisgCisraWYgVVNFX1VDTElCQworK2kzODZfZ2VuZGlzX0xEQUREICs9IC1sdWFyZ3AgLWxpbnRsCisrZW5kaWYKKysKKyBpMzg2X3BhcnNlLmg6IGkzODZfcGFyc2UuYyA7CisgCisgbm9pbnN0X0hFQURFUlMgPSBtZW1vcnktYWNjZXNzLmggaTM4Nl9wYXJzZS5oIGkzODZfZGF0YS5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNDgveDg2XzY0X2Rpcy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDE5OGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTQ4L3g4Nl82NF9kaXMuaApAQCAtMCwwICsxLDE2MzIgQEAKKyNkZWZpbmUgTU5FTU9OSUNfQklUUyAxMAorI2RlZmluZSBTVUZGSVhfQklUUyAzCisjZGVmaW5lIEZDVDFfQklUUyA3CisjZGVmaW5lIFNUUjFfQklUUyA0CisjZGVmaW5lIE9GRjFfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMV8xX0JJQVMgMworI2RlZmluZSBPRkYxXzJfQklUUyA3CisjZGVmaW5lIE9GRjFfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMV8zX0JJVFMgMQorI2RlZmluZSBPRkYxXzNfQklBUyA3CisjZGVmaW5lIEZDVDJfQklUUyA2CisjZGVmaW5lIFNUUjJfQklUUyAyCisjZGVmaW5lIE9GRjJfMV9CSVRTIDcKKyNkZWZpbmUgT0ZGMl8xX0JJQVMgNQorI2RlZmluZSBPRkYyXzJfQklUUyA3CisjZGVmaW5lIE9GRjJfMl9CSUFTIDQKKyNkZWZpbmUgT0ZGMl8zX0JJVFMgNAorI2RlZmluZSBPRkYyXzNfQklBUyA3CisjZGVmaW5lIEZDVDNfQklUUyA0CisjZGVmaW5lIFNUUjNfQklUUyAxCisjZGVmaW5lIE9GRjNfMV9CSVRTIDYKKyNkZWZpbmUgT0ZGM18xX0JJQVMgMTAKKyNkZWZpbmUgT0ZGM18yX0JJVFMgMQorI2RlZmluZSBPRkYzXzJfQklBUyAyMQorCisjaW5jbHVkZSA8aTM4Nl9kYXRhLmg+CisKKyNkZWZpbmUgc3VmZml4X25vbmUgMAorI2RlZmluZSBzdWZmaXhfdyAxCisjZGVmaW5lIHN1ZmZpeF93MCAyCisjZGVmaW5lIHN1ZmZpeF9XIDMKKyNkZWZpbmUgc3VmZml4X3R0dG4gNAorI2RlZmluZSBzdWZmaXhfRCA3CisjZGVmaW5lIHN1ZmZpeF93MSA1CisjZGVmaW5lIHN1ZmZpeF9XMSA2CisKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMV9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2F4LAorICBGQ1RfYXgkdywKKyAgRkNUX2NjYywKKyAgRkNUX2RkZCwKKyAgRkNUX2Rpc3A4LAorICBGQ1RfZHNfYngsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tJHMsCisgIEZDVF9pbW0kdywKKyAgRkNUX2ltbTE2LAorICBGQ1RfaW1tNjQkdywKKyAgRkNUX2ltbTgsCisgIEZDVF9pbW1zOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQxNnJfbSwKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCQ4cl9tLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX21vZCRyX20kdywKKyAgRkNUX3JlZywKKyAgRkNUX3JlZyR3LAorICBGQ1RfcmVnNjQsCisgIEZDVF9yZWwsCisgIEZDVF9zZWwsCisgIEZDVF9zcmVnMiwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMV9zdHJbXSA9CisgICIlYXhcMCIKKyAgIiVjbFwwIgorICAiJXJheFwwIgorICAiJXN0XDAiCisgICIleG1tMFwwIgorICAiKiI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDFfc3RyX2lkeFtdID0geworICAwLAorICA0LAorICA4LAorICAxMywKKyAgMTcsCisgIDIzLAorfTsKK3N0YXRpYyBjb25zdCBvcGZjdF90IG9wMl9mY3RbXSA9Cit7CisgIE5VTEwsCisgIEZDVF9NT0QkUl9NLAorICBGQ1RfTW9kJFJfbSwKKyAgRkNUX2FicywKKyAgRkNUX2Fic3ZhbCwKKyAgRkNUX2F4JHcsCisgIEZDVF9jY2MsCisgIEZDVF9kZGQsCisgIEZDVF9kc19zaSwKKyAgRkNUX2R4LAorICBGQ1RfZXNfZGksCisgIEZDVF9mcmVnLAorICBGQ1RfaW1tOCwKKyAgRkNUX21teHJlZywKKyAgRkNUX21vZCQ2NHJfbSwKKyAgRkNUX21vZCRyX20sCisgIEZDVF9tb2Qkcl9tJHcsCisgIEZDVF9vcmVnLAorICBGQ1Rfb3JlZyR3LAorICBGQ1RfcmVnLAorICBGQ1RfcmVnJHcsCisgIEZDVF9yZWc2NCwKKyAgRkNUX3NyZWczLAorICBGQ1Rfc3RyaW5nLAorICBGQ1RfeG1tcmVnLAorfTsKK3N0YXRpYyBjb25zdCBjaGFyIG9wMl9zdHJbXSA9CisgICIlcmN4XDAiCisgICIlc3QiOworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3AyX3N0cl9pZHhbXSA9IHsKKyAgMCwKKyAgNSwKK307CitzdGF0aWMgY29uc3Qgb3BmY3RfdCBvcDNfZmN0W10gPQoreworICBOVUxMLAorICBGQ1RfbW14cmVnLAorICBGQ1RfbW9kJHJfbSwKKyAgRkNUX3JlZywKKyAgRkNUX3N0cmluZywKKyAgRkNUX3htbXJlZywKK307CitzdGF0aWMgY29uc3QgY2hhciBvcDNfc3RyW10gPQorICAiJXJkeCI7CitzdGF0aWMgY29uc3QgdWludDhfdCBvcDNfc3RyX2lkeFtdID0geworICAwLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5zdHJfZW5jIGluc3RydGFiW10gPQoreworICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRjLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHN1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZG5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ic2YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Jzd2FwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0YywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2J0ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9idHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYnRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGNhbGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDYsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY2xpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNjYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbHRzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNyZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N5c2VudGVyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zeXNleGl0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Ntb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBzLCAucmVwID0gMCwgLnJlcGUgPSAxLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21weGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMTEsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gOCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfSU5WQUxJRCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3B1aWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnR0cGQyZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kZWMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbnRlciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmFicywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnRzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhhbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkMSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkbDJ0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsMmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZHBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbGRsZzIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZGxuMiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkeiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZjJ4bTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z5bDJ4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHRhbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnBhdGFuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHRyYWN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mcHJlbTEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkZWNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZwcmVtLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meWwyeHAxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3FydCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNpbmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnJuZGludCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnNjYWxlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc2luLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZtdWwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkY3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0ZW52LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5zdGN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnhjaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mYWRkcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpYWRkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbXVscCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdWJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnN1YnJwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3ViciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zuc3RzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZibGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zic3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNocywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNsZXgsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpbml0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9md2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZm5jbGV4LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZjbW92ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZiZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5lLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdm5iZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3ZudSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvbXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA3LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29tcHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zjb21pLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAyLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY29taXAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29taSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZnVjb21pcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNvcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRlY3N0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjMsIC5zdHIyID0gMiwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZGl2cnAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDQsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDgsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmRpdnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIzLCAuc3RyMiA9IDIsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMywgLnN0cjEgPSA0LCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDExLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA4LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNywgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlkaXZybCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpZGl2ciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZkaXZycCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gNCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gOCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mZnJlZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mY21vdmJlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmNtb3Z1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpY29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9maWxkbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbGRsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZpbmNzdHAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZuaW5pdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3RwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gNSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmlzdHBsbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDUsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zpc3R0cGxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZzdHB0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ZsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDcsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Zyc3RvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2Z1Y29tcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9mbnN0c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9obHQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lkaXYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaW11bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbXVsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDMsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2luYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2lucywgLnJlcCA9IDEsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDAsIC5mY3QxID0gMTEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnQzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zd2FwZ3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ludmxwZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaXJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDYsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfaiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDQsIC5tb2RybSA9IDAsIC5mY3QxID0gMjksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2ptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAyOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGptcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sam1wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMSwgLmZjdDEgPSAyMiwgLnN0cjEgPSA2LCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGFyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xlYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZWF2ZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbGZzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xncywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sZ2R0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9saWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2NrLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sb2RzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbG9vcGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xvb3BuZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHNsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9sdHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTgsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMzUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3YsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnMsIC5yZXAgPSAxLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c2JsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMywgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnN3bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z6YmwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92endsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25lZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhdXNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9JTlZBTElELCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wb3BjbnQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbm90LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX29yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3V0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vdXRzLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMCwgLmZjdDEgPSAxMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMzIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvcGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDI4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMTQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAyLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDMxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdXNoLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAzMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVzaGYsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAzLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JjciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JkbXNyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yZHBtYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmR0c2MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDMsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmV0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMywgLm1vZHJtID0gMCwgLmZjdDEgPSAxNiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbHJldCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTYsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvbCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb2wsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzbSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FoZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2FyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NhciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNywgLnN0cjEgPSAwLCAub2ZmMV8xID0gNywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NiYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gNSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2JiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zYmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE5LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NjYXMsIC5yZXAgPSAwLCAucmVwZSA9IDEsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDEyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSA0LCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGwsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NociwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSA5LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NobGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzMywgLnN0cjEgPSAyLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDIsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDIsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2hyZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gMiwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAyLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1jYWxsLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bWxhdW5jaCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZXN1bWUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9mZiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdm1yZWFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Ztd3JpdGUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc2dkdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW9uaXRvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDQsIC5zdHIzID0gMSwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9td2FpdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzMsIC5zdHIxID0gMywgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyMywgLnN0cjIgPSAxLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaWR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbGR0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zbXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdGMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdG9zLCAucmVwID0gMSwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSA1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3RyLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3ViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDksIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSA1LCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSA1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV90ZXN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Rlc3QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAxLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE2LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAzLCAub2ZmMl8yID0gOSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VkMmEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcnIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZlcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3diaW52ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIzLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjMsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHJlZmV0Y2hudGEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDAsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ByZWZldGNodDIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX25vcCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfd3Jtc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hhZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDExLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDgsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hjaGcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI3LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA3LCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeGNoZywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE3LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hsYXQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDksIC5zdHIxID0gMCwgLm9mZjFfMSA9IDUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjcsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDcsIC5vZmYxXzIgPSAzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV94b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI1LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSA1LCAub2ZmMV8yID0gOSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDUsIC5vZmYyXzIgPSAzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxNSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gNSwgLm9mZjFfMiA9IDMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDEsIC5tb2RybSA9IDEsIC5mY3QxID0gMTUsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTYsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDMsIC5vZmYyXzIgPSA5LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMSwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMywgLm9mZjJfMiA9IDksIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9lbW1zLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYW5kLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhbmRuLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFuZG4sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWFkZHdkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BvciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B4b3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9weG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kbnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3JkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBlcXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcGxlc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXB1bm9yZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wbmVxc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jbXBubHRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NtcG5sZXNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY21wb3Jkc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHJzdG9yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9meHNhdmUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkbXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N0bXhjc3IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Z1cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92dXBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnNsZHVwLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92aGxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZobHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tscGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91bnBja2xwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3VucGNraHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdW5wY2tocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZzaGR1cCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmxocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxOCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZocHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZsaHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bGhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmhwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmFwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNpMnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBpMnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGkycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNkMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBkMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0dHBzMnBpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cGQycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzZDJzaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHNzMnNpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxOSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV91Y29taXNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfdWNvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NvbWlzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2dldHNlYywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bXNrcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3Ztc2twcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NxcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JzcXJ0c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yc3FydHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcmNwc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yY3BwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FuZHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hbmRucHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9vcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfb3JwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3hvcnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfeG9ycHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2FkZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9hZGRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbXVsc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tdWxwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX211bHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0c2Qyc3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRzczJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHBkMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfY3Z0cHMycGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9jdnRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dHRwczJkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2N2dGRxMnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3Vic2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zdWJzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3N1YnBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5zZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21pbnNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWlucGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9taW5wcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZGl2c3MsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9kaXZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RpdnBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tYXhzcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21heHBkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWF4cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsd2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrc3N3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc3diLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGd0dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBndGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3Vzd2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWNrdXN3YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3B1bnBja2hkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhY2tzc2R3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3NzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdW5wY2tscWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHVucGNraHFkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcWEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkcXUsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE5LCAub2ZmMl8yID0gMjUsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDE2LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNodWZodywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2h1ZncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDEsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXFiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlcWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oYWRkcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9oc3VicHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAzNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjMsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTUsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGksIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI2LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxNSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3J3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waW5zcncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE1LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMSwgLm9mZjJfMiA9IDE3LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSA4LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGV4dHJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAzLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BleHRydywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMywgLnN0cjMgPSAwLCAub2ZmM18xID0gOCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3NodWZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMTYsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zaHVmcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDExLCAub2ZmMl8yID0gMTcsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDgsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdmRxMnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZxMmRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjYsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdm1za2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDM0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyNiwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDE5LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92bXNrYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE4LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTksIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VidXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnVzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXNiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZHVzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR1c3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdXN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1heHViLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZnYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmF3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmFkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGF2Z3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYXZndywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxodXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHV3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG11bGh3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbW92bnRkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIzLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTksIC5vZmYyXzIgPSAyNSwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21vdm50cSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMjAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDE1LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTEsIC5vZmYyXzIgPSAxNywgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtaW5zdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtYXhzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xkZHF1LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWx1ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsdWRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNhZGJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWFza21vdmRxdSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMzQsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI2LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21hc2ttb3ZxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAyMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTgsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3ViZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHN1YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3VicSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGRiLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhZGR3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTMsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFkZGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDEzLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzaHVmYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BoYWRkc3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9waGFkZHN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1hZGR1YnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJ3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhzdWJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Boc3Vic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2lnbmQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsaHJzdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BtdWxocnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDIxLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnN3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFic3csIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMjUsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyMSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWJzZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BhYnNkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjEsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFsaWduciwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYWxpZ25yLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxOSwgLm9mZjJfMiA9IDI1LCAub2ZmMl8zID0gMCwgLmZjdDMgPSAxLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAxNiwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZtY2xlYXIsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDI1LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3ZteG9uLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAyNSwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV92bXB0cnN0LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyNCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMTMsIC5vZmYxXzIgPSAxNywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Bzcmx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhdywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGx3LCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JsZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNyYWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JhZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyMSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxNiwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc3JscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzcmxxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjEsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxMywgLnN0cjIgPSAwLCAub2ZmMl8xID0gMTYsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNybGRxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjQsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcHNsbHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wc2xscSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDIxLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTMsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDE2LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BzbGxkcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI0LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2xmZW5jZSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDAsIC5mY3QxID0gMCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfbWZlbmNlLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAwLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMCwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9zZmVuY2UsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAwLCAuZmN0MSA9IDAsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2NsZmx1c2gsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDI0LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAxMywgLm9mZjFfMiA9IDE3LCAub2ZmMV8zID0gMCwgLmZjdDIgPSAwLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAwLCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX0lOVkFMSUQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDEsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDEzLCAub2ZmMV8yID0gMTcsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDEzLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAxMywgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHBzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2JsZW5kcGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfYmxlbmR2cHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDMzLCAuc3RyMSA9IDUsIC5vZmYxXzEgPSAwLCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9ibGVuZHZwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX2RwcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfZHBwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9pbnNlcnRwcywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9tb3ZudGRxYSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX21wc2FkYncsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGFja3VzZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wYmxlbmR2YiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMzMsIC5zdHIxID0gNSwgLm9mZjFfMSA9IDAsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BibGVuZHcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGVxcSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBlc3RyaSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZXN0cm0sIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGNtcGlzdHJpLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BjbXBpc3RybSwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wY21wZ3RxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGhtaW5wb3N1dywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3BpbnNyYiwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMTUsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcGluc3JkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAxNSwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4c2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWF4dXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2IsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWluc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludWQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbWludXcsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3hidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92c3h3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3ZzeHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnN4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enhidywgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eGJkLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4YnEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbW92enh3ZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3Btb3Z6eHdxLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAyLCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAyOSwgLm9mZjFfMiA9IDMzLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyNCwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjksIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG1vdnp4ZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsZHEsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wbXVsbGQsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDIsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDI5LCAub2ZmMV8yID0gMzMsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDI0LCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyOSwgLm9mZjJfMiA9IDAsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDAsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDAsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9wdGVzdCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMiwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMjksIC5vZmYxXzIgPSAzMywgLm9mZjFfMyA9IDAsIC5mY3QyID0gMjQsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI5LCAub2ZmMl8yID0gMCwgLm9mZjJfMyA9IDAsIC5mY3QzID0gMCwgLnN0cjMgPSAwLCAub2ZmM18xID0gMCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kcHMsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcm91bmRwZCwgLnJlcCA9IDAsIC5yZXBlID0gMCwgLnN1ZmZpeCA9IDAsIC5tb2RybSA9IDEsIC5mY3QxID0gMTgsIC5zdHIxID0gMCwgLm9mZjFfMSA9IDM3LCAub2ZmMV8yID0gMCwgLm9mZjFfMyA9IDAsIC5mY3QyID0gMiwgLnN0cjIgPSAwLCAub2ZmMl8xID0gMjcsIC5vZmYyXzIgPSAzMywgLm9mZjJfMyA9IDAsIC5mY3QzID0gNSwgLnN0cjMgPSAwLCAub2ZmM18xID0gMjQsIC5vZmYzXzIgPSAwLCB9LAorICB7IC5tbmVtb25pYyA9IE1ORV9yb3VuZHNzLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMSwgLmZjdDEgPSAxOCwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMzcsIC5vZmYxXzIgPSAwLCAub2ZmMV8zID0gMCwgLmZjdDIgPSAyLCAuc3RyMiA9IDAsIC5vZmYyXzEgPSAyNywgLm9mZjJfMiA9IDMzLCAub2ZmMl8zID0gMCwgLmZjdDMgPSA1LCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAyNCwgLm9mZjNfMiA9IDAsIH0sCisgIHsgLm1uZW1vbmljID0gTU5FX3JvdW5kc2QsIC5yZXAgPSAwLCAucmVwZSA9IDAsIC5zdWZmaXggPSAwLCAubW9kcm0gPSAxLCAuZmN0MSA9IDE4LCAuc3RyMSA9IDAsIC5vZmYxXzEgPSAzNywgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDIsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDI3LCAub2ZmMl8yID0gMzMsIC5vZmYyXzMgPSAwLCAuZmN0MyA9IDUsIC5zdHIzID0gMCwgLm9mZjNfMSA9IDI0LCAub2ZmM18yID0gMCwgfSwKKyAgeyAubW5lbW9uaWMgPSBNTkVfcG9wLCAucmVwID0gMCwgLnJlcGUgPSAwLCAuc3VmZml4ID0gMCwgLm1vZHJtID0gMCwgLmZjdDEgPSAzMSwgLnN0cjEgPSAwLCAub2ZmMV8xID0gMCwgLm9mZjFfMiA9IDAsIC5vZmYxXzMgPSAwLCAuZmN0MiA9IDAsIC5zdHIyID0gMCwgLm9mZjJfMSA9IDAsIC5vZmYyXzIgPSAwLCAub2ZmMl8zID0gMCwgLmZjdDMgPSAwLCAuc3RyMyA9IDAsIC5vZmYzXzEgPSAwLCAub2ZmM18yID0gMCwgfSwKK307CitzdGF0aWMgY29uc3QgdWludDhfdCBtYXRjaF9kYXRhW10gPQoreworICAweDEsIDB4ZmUsIDB4MTQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweDgyLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4MTAsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDQsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQwLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDAsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgyNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHgyMCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweDIyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MTIsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJkLCAwLCAwLAorICAweDEyLCAweGYsIDB4ZjgsIDB4YzgsCisgIDB4MjMsIDB4ZiwgMHhhMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDIwLAorICAweDIzLCAweGYsIDB4YmIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiYSwgMHgzOCwgMHgzOCwKKyAgMHgyMywgMHhmLCAweGIzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YmEsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhhYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJhLCAweDM4LCAweDI4LAorICAweDExLCAweGU4LAorICAweDEyLCAweGZmLCAweDM4LCAweDEwLAorICAweDEyLCAweGZmLCAweDM4LCAweDE4LAorICAweDExLCAweDk4LAorICAweDExLCAweDk5LAorICAweDExLCAweGY4LAorICAweDExLCAweGZjLAorICAweDExLCAweGZhLAorICAweDIyLCAweGYsIDB4NSwKKyAgMHgyMiwgMHhmLCAweDYsCisgIDB4MjIsIDB4ZiwgMHg3LAorICAweDIyLCAweGYsIDB4MzQsCisgIDB4MjIsIDB4ZiwgMHgzNSwKKyAgMHgxMSwgMHhmNSwKKyAgMHgxMywgMHhmLCAweGYwLCAweDQwLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4M2MsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHgzOCwKKyAgMHgxMiwgMHg4MywgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweDM4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4M2EsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweGMyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjMiwgMCwgMCwKKyAgMHgxLCAweGZlLCAweGE2LAorICAweDEzLCAweGYsIDB4ZmUsIDB4YjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHg4LAorICAweDIyLCAweGYsIDB4YTIsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhlNiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweGU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTYsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhmZSwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgxMSwgMHhjOCwKKyAgMHgyMiwgMHhkOSwgMHhkMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgyMiwgMHhkOSwgMHhlMSwKKyAgMHgyMiwgMHhkOSwgMHhlNCwKKyAgMHgyMiwgMHhkOSwgMHhlNSwKKyAgMHgyMiwgMHhkOSwgMHhlOCwKKyAgMHgyMiwgMHhkOSwgMHhlOSwKKyAgMHgyMiwgMHhkOSwgMHhlYSwKKyAgMHgyMiwgMHhkOSwgMHhlYiwKKyAgMHgyMiwgMHhkOSwgMHhlYywKKyAgMHgyMiwgMHhkOSwgMHhlZCwKKyAgMHgyMiwgMHhkOSwgMHhlZSwKKyAgMHgyMiwgMHhkOSwgMHhmMCwKKyAgMHgyMiwgMHhkOSwgMHhmMSwKKyAgMHgyMiwgMHhkOSwgMHhmMiwKKyAgMHgyMiwgMHhkOSwgMHhmMywKKyAgMHgyMiwgMHhkOSwgMHhmNCwKKyAgMHgyMiwgMHhkOSwgMHhmNSwKKyAgMHgyMiwgMHhkOSwgMHhmNiwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkOSwgMHhmOCwKKyAgMHgyMiwgMHhkOSwgMHhmOSwKKyAgMHgyMiwgMHhkOSwgMHhmYSwKKyAgMHgyMiwgMHhkOSwgMHhmYiwKKyAgMHgyMiwgMHhkOSwgMHhmYywKKyAgMHgyMiwgMHhkOSwgMHhmZCwKKyAgMHgyMiwgMHhkOSwgMHhmZSwKKyAgMHgyMiwgMHhkOSwgMHhmZiwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhjMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGM4LAorICAweDEyLCAweGRjLCAweGY4LCAweGM4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4OCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhlMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGU4LAorICAweDEyLCAweGRjLCAweGY4LCAweGU4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGQsIDB4ZjgsIDB4ZDAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMHgxMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhkOCwKKyAgMHgyLCAweGZiLCAweGQ5LCAweDM4LCAweDE4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDIwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDI4LAorICAweDEyLCAweGQ5LCAweDM4LCAweDMwLAorICAweDEyLCAweGQ5LCAweDM4LCAweDM4LAorICAweDEyLCAweGQ5LCAweGY4LCAweGM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGMwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4YzgsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4YzgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHg4LAorICAweDEyLCAweGRlLCAweGY4LCAweGUwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MjAsCisgIDB4MTIsIDB4ZGUsIDB4ZjgsIDB4ZTgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkZiwgMHhlMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgzMCwKKyAgMHgyMiwgMHhkOSwgMHhlMCwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMiwKKyAgMHgzMywgMHg5YiwgMHhkYiwgMHhlMywKKyAgMHgxMSwgMHg5YiwKKyAgMHgyMiwgMHhkYiwgMHhlMiwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYSwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhjOCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkMCwKKyAgMHgxMiwgMHhkYiwgMHhmOCwgMHhkOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhkMCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDEwLAorICAweDEyLCAweGQ4LCAweGY4LCAweGQ4LAorICAweDIsIDB4ZmIsIDB4ZDgsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZGUsIDB4ZDksCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGIsIDB4ZjgsIDB4ZTgsCisgIDB4MTIsIDB4ZGYsIDB4ZjgsIDB4ZTgsCisgIDB4MjIsIDB4ZDksIDB4ZmYsCisgIDB4MjIsIDB4ZDksIDB4ZjYsCisgIDB4MTIsIDB4ZDgsIDB4ZjgsIDB4ZjAsCisgIDB4MTIsIDB4ZGMsIDB4ZjgsIDB4ZjAsCisgIDB4MiwgMHhmYiwgMHhkOCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkYSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhkZSwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZSwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkOCwgMHhmOCwgMHhmOCwKKyAgMHgxMiwgMHhkYywgMHhmOCwgMHhmOCwKKyAgMHgyLCAweGZiLCAweGQ4LCAweDM4LCAweDM4LAorICAweDEyLCAweGRhLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweDM4LCAweDM4LAorICAweDEyLCAweGRlLCAweGY4LCAweGYwLAorICAweDEyLCAweGRkLCAweGY4LCAweGMwLAorICAweDEyLCAweGRhLCAweGY4LCAweGQwLAorICAweDIsIDB4ZmIsIDB4ZGEsIDB4MzgsIDB4MTAsCisgIDB4MTIsIDB4ZGEsIDB4ZjgsIDB4ZDgsCisgIDB4MiwgMHhmYiwgMHhkYSwgMHgzOCwgMHgxOCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkYiwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZiwgMHgzOCwgMHgyOCwKKyAgMHgyMiwgMHhkOSwgMHhmNywKKyAgMHgyMiwgMHhkYiwgMHhlMywKKyAgMHgyLCAweGZiLCAweGRiLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmIsIDB4ZGIsIDB4MzgsIDB4MTgsCisgIDB4MTIsIDB4ZGYsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmYiwgMHhkYiwgMHgzOCwgMHg4LAorICAweDEyLCAweGRkLCAweDM4LCAweDgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MjgsCisgIDB4MTIsIDB4ZGIsIDB4MzgsIDB4MzgsCisgIDB4MTIsIDB4ZDksIDB4ZjgsIDB4YzAsCisgIDB4MiwgMHhmYiwgMHhkOSwgMHgzOCwgMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgyMCwKKyAgMHgxMiwgMHhkZCwgMHhmOCwgMHhlOCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzMCwKKyAgMHgxMiwgMHhkZCwgMHgzOCwgMHgzOCwKKyAgMHgxMSwgMHhmNCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MjgsCisgIDB4MjMsIDB4ZiwgMHhhZiwgMCwgMCwKKyAgMHgyLCAweGZkLCAweDY5LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4ZTQsCisgIDB4MSwgMHhmZSwgMHhlYywKKyAgMHgyLCAweGZlLCAweGZlLCAweDM4LCAwLAorICAweDEsIDB4ZmUsIDB4NmMsCisgIDB4MTEsIDB4Y2QsCisgIDB4MTEsIDB4Y2MsCisgIDB4MjIsIDB4ZiwgMHg4LAorICAweDMzLCAweGYsIDB4MSwgMHhmOCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MzgsCisgIDB4MTEsIDB4Y2YsCisgIDB4MSwgMHhmMCwgMHg3MCwKKyAgMHgxMiwgMHhmLCAweGYwLCAweDgwLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MTEsIDB4ZTMsCisgIDB4MTEsIDB4ZWIsCisgIDB4MTEsIDB4ZTksCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjAsCisgIDB4MTEsIDB4ZWEsCisgIDB4MTIsIDB4ZmYsIDB4MzgsIDB4MjgsCisgIDB4MTEsIDB4OWYsCisgIDB4MjMsIDB4ZiwgMHgyLCAwLCAwLAorICAweDEyLCAweDhkLCAwLCAwLAorICAweDExLCAweGM5LAorICAweDIzLCAweGYsIDB4YjQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDB4MTAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDMwLAorICAweDExLCAweGYwLAorICAweDEsIDB4ZmUsIDB4YWMsCisgIDB4MTEsIDB4ZTIsCisgIDB4MTEsIDB4ZTEsCisgIDB4MTEsIDB4ZTAsCisgIDB4MjMsIDB4ZiwgMHgzLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgxOCwKKyAgMHgyLCAweGZlLCAweDg4LCAwLCAwLAorICAweDIsIDB4ZmUsIDB4OGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhjNiwgMHgzOCwgMCwKKyAgMHgxLCAweGYwLCAweGIwLAorICAweDEsIDB4ZmUsIDB4YTAsCisgIDB4MSwgMHhmZSwgMHhhMiwKKyAgMHgyMywgMHhmLCAweDIwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MjIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgyMSwgMHhjMCwgMHhjMCwKKyAgMHgyMywgMHhmLCAweDIzLCAweGMwLCAweGMwLAorICAweDEyLCAweDhjLCAwLCAwLAorICAweDEyLCAweDhlLCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTQsCisgIDB4MjMsIDB4ZiwgMHhiZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhiNywgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4ZjYsIDB4MzgsIDB4MTgsCisgIDB4MjIsIDB4ZjMsIDB4OTAsCisgIDB4MTEsIDB4OTAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhiOCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGY2LCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4OCwgMCwgMCwKKyAgMHgyLCAweGZlLCAweGEsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHg4MCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4OCwKKyAgMHgxLCAweGZlLCAweGMsCisgIDB4MSwgMHhmZSwgMHhlNiwKKyAgMHgxLCAweGZlLCAweGVlLAorICAweDEsIDB4ZmUsIDB4NmUsCisgIDB4MTIsIDB4OGYsIDB4ZjgsIDB4YzAsCisgIDB4MTIsIDB4OGYsIDB4MzgsIDAsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MSwKKyAgMHgxMSwgMHg5ZCwKKyAgMHgxMiwgMHhmZiwgMHhmOCwgMHhmMCwKKyAgMHgxMiwgMHhmZiwgMHgzOCwgMHgzMCwKKyAgMHgxLCAweGY4LCAweDUwLAorICAweDEsIDB4ZjgsIDB4NTgsCisgIDB4MSwgMHhmZCwgMHg2OCwKKyAgMHgxLCAweGU3LCAweDYsCisgIDB4MTIsIDB4ZiwgMHhjNywgMHg4MCwKKyAgMHgxMSwgMHg5YywKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDEwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDE4LAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMHgxOCwKKyAgMHgyMiwgMHhmLCAweDMyLAorICAweDIyLCAweGYsIDB4MzMsCisgIDB4MjIsIDB4ZiwgMHgzMSwKKyAgMHgxMSwgMHhjMywKKyAgMHgxMSwgMHhjMiwKKyAgMHgxMSwgMHhjYiwKKyAgMHgxMSwgMHhjYSwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAwLAorICAweDIsIDB4ZmUsIDB4ZDIsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhjMCwgMHgzOCwgMCwKKyAgMHgyLCAweGZlLCAweGQwLCAweDM4LCAweDgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4OCwKKyAgMHgyMiwgMHhmLCAweGFhLAorICAweDExLCAweDllLAorICAweDIsIDB4ZmUsIDB4ZDAsIDB4MzgsIDB4MzgsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgzOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDM4LAorICAweDIsIDB4ZmUsIDB4MTgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgxYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDFjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MTgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgxOCwKKyAgMHgxLCAweGZlLCAweGFlLAorICAweDEzLCAweGYsIDB4ZjAsIDB4OTAsIDB4MzgsIDAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyMCwKKyAgMHgyLCAweGZlLCAweGQyLCAweDM4LCAweDIwLAorICAweDIsIDB4ZmUsIDB4YzAsIDB4MzgsIDB4MjAsCisgIDB4MiwgMHhmZSwgMHhkMCwgMHgzOCwgMHgyOCwKKyAgMHgyMywgMHhmLCAweGE0LCAwLCAwLAorICAweDIzLCAweGYsIDB4YTUsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHhkMiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweGMwLCAweDM4LCAweDI4LAorICAweDIzLCAweGYsIDB4YWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhhZCwgMCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzEsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGMyLAorICAweDMzLCAweGYsIDB4MSwgMHhjMywKKyAgMHgzMywgMHhmLCAweDEsIDB4YzQsCisgIDB4MjMsIDB4ZiwgMHg3OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMCwKKyAgMHgzMywgMHhmLCAweDEsIDB4YzgsCisgIDB4MzMsIDB4ZiwgMHgxLCAweGM5LAorICAweDIzLCAweGYsIDB4MSwgMHgzOCwgMHg4LAorICAweDIzLCAweGYsIDAsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHgxLCAweDM4LCAweDIwLAorICAweDExLCAweGY5LAorICAweDExLCAweGZkLAorICAweDExLCAweGZiLAorICAweDEsIDB4ZmUsIDB4YWEsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHg4LAorICAweDIsIDB4ZmUsIDB4MjgsIDAsIDAsCisgIDB4MiwgMHhmZSwgMHgyYSwgMCwgMCwKKyAgMHgxLCAweGZlLCAweDJjLAorICAweDIsIDB4ZmUsIDB4ODAsIDB4MzgsIDB4MjgsCisgIDB4MiwgMHhmZSwgMHg4MiwgMHgzOCwgMHgyOCwKKyAgMHgyLCAweGZlLCAweDg0LCAwLCAwLAorICAweDEsIDB4ZmUsIDB4YTgsCisgIDB4MiwgMHhmZSwgMHhmNiwgMHgzOCwgMCwKKyAgMHgyMiwgMHhmLCAweGIsCisgIDB4MjMsIDB4ZiwgMCwgMHgzOCwgMHgyMCwKKyAgMHgyMywgMHhmLCAwLCAweDM4LCAweDI4LAorICAweDIyLCAweGYsIDB4OSwKKyAgMHgyMywgMHhmLCAweGQsIDB4MzgsIDAsCisgIDB4MjMsIDB4ZiwgMHhkLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHgxOCwgMHgzOCwgMHgxMCwKKyAgMHgyMywgMHhmLCAweDE4LCAweDM4LCAweDE4LAorICAweDIzLCAweGYsIDB4MWYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzMCwKKyAgMHgxMywgMHhmLCAweGZlLCAweGMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4ODYsIDAsIDAsCisgIDB4MSwgMHhmOCwgMHg5MCwKKyAgMHgxMSwgMHhkNywKKyAgMHgyLCAweGZlLCAweDMwLCAwLCAwLAorICAweDIsIDB4ZmUsIDB4MzIsIDAsIDAsCisgIDB4MSwgMHhmZSwgMHgzNCwKKyAgMHgyLCAweGZlLCAweDgwLCAweDM4LCAweDMwLAorICAweDIsIDB4ZmUsIDB4ODIsIDB4MzgsIDB4MzAsCisgIDB4MjIsIDB4ZiwgMHg3NywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRiLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGViLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgyNCwgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MjQsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDI0LCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAwLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4MSwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDIsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHgzLAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NCwKKyAgMHgzNSwgMHhmMywgMHhmLCAweGMyLCAwLCAwLCAweGZmLCAweDUsCisgIDB4MzUsIDB4ZjMsIDB4ZiwgMHhjMiwgMCwgMCwgMHhmZiwgMHg2LAorICAweDM1LCAweGYzLCAweGYsIDB4YzIsIDAsIDAsIDB4ZmYsIDB4NywKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDgsCisgIDB4MjMsIDB4ZiwgMHhhZSwgMHgzOCwgMCwKKyAgMHgyMywgMHhmLCAweGFlLCAweDM4LCAweDEwLAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MTgsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDEwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxMCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4MTEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDExLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEyLCAwLCAwLAorICAweDIzLCAweGYsIDB4MTIsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDEzLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTMsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDEzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgxNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE1LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTUsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE2LCAwLCAwLAorICAweDIzLCAweGYsIDB4MTYsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHgxNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDE3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4MTcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHgxNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDE3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MjgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDI5LCAwLCAwLAorICAweDIzLCAweGYsIDB4MjksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJiLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmIsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDJjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4MmQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHgyZCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDJkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4MmUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHgyZSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDJmLCAwLCAwLAorICAweDIzLCAweGYsIDB4MmYsIDAsIDAsCisgIDB4MjIsIDB4ZiwgMHgzNywKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDUwLCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4NTAsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDUxLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1MSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4NTIsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1MywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1NiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU2LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NTcsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1NywgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NTgsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDU4LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4NTksIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDViLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1YiwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1YywgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg1ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4NWQsIDAsIDAsCisgIDB4MzQsIDB4ZjIsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDVlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NWUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg1ZSwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NWYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg1ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDVmLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDYxLCAwLCAwLAorICAweDIzLCAweGYsIDB4NjEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2MiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDYyLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2MywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDY3LCAwLCAwLAorICAweDIzLCAweGYsIDB4NjcsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2OCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg2OSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2YiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NmMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDZlLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg2ZiwgMCwgMCwKKyAgMHgzNCwgMHhmMywgMHhmLCAweDZmLCAwLCAwLAorICAweDIzLCAweGYsIDB4NmYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDcwLCAwLCAwLAorICAweDM0LCAweGYzLCAweGYsIDB4NzAsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3MCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDc0LCAwLCAwLAorICAweDIzLCAweGYsIDB4NzQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3NSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDc1LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHg3NiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDdjLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4N2MsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3ZCwgMCwgMCwKKyAgMHgzNCwgMHhmMiwgMHhmLCAweDdkLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2UsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdlLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4N2YsIDAsIDAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHg3ZiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweDdmLCAwLCAwLAorICAweDIzLCAweGYsIDB4YzMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhjNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGM0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4YzUsIDB4YzAsIDB4YzAsCisgIDB4MjMsIDB4ZiwgMHhjNSwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM2LCAwLCAwLAorICAweDIzLCAweGYsIDB4YzYsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZDMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDUsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkNSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ2LCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZDYsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4ZjMsIDB4ZiwgMHhkNiwgMHhjMCwgMHhjMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGQ3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZDcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGQ4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZDksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhkYywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGRjLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZGQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhkZCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGRlLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZGUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUwLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTEsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlMSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGUyLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTIsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlMywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGUzLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTQsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlNCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU1LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTUsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlNywgMCwgMCwKKyAgMHgyMywgMHhmLCAweGU3LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZTgsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlOCwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGU5LCAwLCAwLAorICAweDIzLCAweGYsIDB4ZTksIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlYSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVhLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZWMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhlYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGVkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZWQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhlZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGVlLCAwLCAwLAorICAweDM0LCAweGYyLCAweGYsIDB4ZjAsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmMSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGYxLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjIsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmMiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGYzLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZjMsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmNCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY0LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjYsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmNiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGY3LCAweGMwLCAweGMwLAorICAweDIzLCAweGYsIDB4ZjcsIDB4YzAsIDB4YzAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmOCwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGY4LCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZjksIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmOSwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZhLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmEsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmYiwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZiLCAwLCAwLAorICAweDM0LCAweDY2LCAweGYsIDB4ZmMsIDAsIDAsCisgIDB4MjMsIDB4ZiwgMHhmYywgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGZkLCAwLCAwLAorICAweDIzLCAweGYsIDB4ZmQsIDAsIDAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHhmZSwgMCwgMCwKKyAgMHgyMywgMHhmLCAweGZlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDAsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg0LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NSwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg2LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4NiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDcsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHg3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4OCwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHg5LCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4OSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweGEsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHhhLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4YiwgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweGIsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxYywgMCwgMCwKKyAgMHgzNCwgMHhmLCAweDM4LCAweDFjLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MWQsIDAsIDAsCisgIDB4MzQsIDB4ZiwgMHgzOCwgMHgxZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDFlLCAwLCAwLAorICAweDM0LCAweGYsIDB4MzgsIDB4MWUsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhmLCAwLCAwLAorICAweDM0LCAweGYsIDB4M2EsIDB4ZiwgMCwgMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweGM3LCAweDM4LCAweDMwLAorICAweDM0LCAweGYzLCAweGYsIDB4YzcsIDB4MzgsIDB4MzAsCisgIDB4MjMsIDB4ZiwgMHhjNywgMHgzOCwgMHgzMCwKKyAgMHgyMywgMHhmLCAweGM3LCAweDM4LCAweDM4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzEsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MSwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcxLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzEsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MSwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcxLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzIsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MiwgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDcyLCAweGY4LCAweGUwLAorICAweDIzLCAweGYsIDB4NzIsIDB4ZjgsIDB4ZTAsCisgIDB4MzQsIDB4NjYsIDB4ZiwgMHg3MiwgMHhmOCwgMHhmMCwKKyAgMHgyMywgMHhmLCAweDcyLCAweGY4LCAweGYwLAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZDAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhkMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGQ4LAorICAweDM0LCAweDY2LCAweGYsIDB4NzMsIDB4ZjgsIDB4ZjAsCisgIDB4MjMsIDB4ZiwgMHg3MywgMHhmOCwgMHhmMCwKKyAgMHgzNCwgMHg2NiwgMHhmLCAweDczLCAweGY4LCAweGY4LAorICAweDMzLCAweGYsIDB4YWUsIDB4ZTgsCisgIDB4MzMsIDB4ZiwgMHhhZSwgMHhmMCwKKyAgMHgzMywgMHhmLCAweGFlLCAweGY4LAorICAweDIzLCAweGYsIDB4YWUsIDB4MzgsIDB4MzgsCisgIDB4MjMsIDB4ZiwgMHhmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDE1LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIxLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MmEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg0MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDJiLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MTAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHhlLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjksIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDYwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4NjMsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg2MiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM3LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHgyMCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDIyLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2MsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzZCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDNmLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2UsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzOCwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDM5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4M2IsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzYSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDIzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MjQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgyNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMwLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzEsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzMiwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDMzLCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4MzQsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgzNSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDM4LCAweDI4LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4MzgsIDB4NDAsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzOCwgMHgxNywgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweDgsIDAsIDAsCisgIDB4NDUsIDB4NjYsIDB4ZiwgMHgzYSwgMHg5LCAwLCAwLAorICAweDQ1LCAweDY2LCAweGYsIDB4M2EsIDB4YSwgMCwgMCwKKyAgMHg0NSwgMHg2NiwgMHhmLCAweDNhLCAweGIsIDAsIDAsCisgIDB4MSwgMHhlNywgMHg3LAorfTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLWVsZl9nZXRhcnN5bS1TaWxlbmNlLVdlcnJvci1tYXliZS11bmluaXRpYWxpemVkLWZhbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NTRjMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1lbGZfZ2V0YXJzeW0tU2lsZW5jZS1XZXJyb3ItbWF5YmUtdW5pbml0aWFsaXplZC1mYWxzLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNjY4YWNjZjMyMmZkNzE4NWUyNzNiZmQ1MGI4NDMyMGU3MWQ5ZGU1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTAgQXByIDIwMTUgMDA6Mjk6MTggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZWxmX2dldGFyc3ltOiBTaWxlbmNlIC1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZCBmYWxzZQorIHBvc2l0aXZlCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgbGliZWxmL2VsZl9nZXRhcnN5bS5jIHwgOSArKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZWxmL2VsZl9nZXRhcnN5bS5jIGIvbGliZWxmL2VsZl9nZXRhcnN5bS5jCitpbmRleCBkMGJiMjhhLi4wODk1NGQyIDEwMDY0NAorLS0tIGEvbGliZWxmL2VsZl9nZXRhcnN5bS5jCisrKysgYi9saWJlbGYvZWxmX2dldGFyc3ltLmMKK0BAIC0xNjUsOCArMTY1LDEzIEBAIGVsZl9nZXRhcnN5bSAoZWxmLCBwdHIpCisgICAgICAgaW50IHcgPSBpbmRleDY0X3AgPyA4IDogNDsKKyAKKyAgICAgICAvKiBXZSBoYXZlIGFuIGFyY2hpdmUuICBUaGUgZmlyc3Qgd29yZCBpbiB0aGVyZSBpcyB0aGUgbnVtYmVyIG9mCistCSBlbnRyaWVzIGluIHRoZSB0YWJsZS4gICovCistICAgICAgdWludDY0X3QgbjsKKysJIGVudHJpZXMgaW4gdGhlIHRhYmxlLgorKwkgU2V0IHRvIFNJWkVfTUFYIGp1c3QgdG8gc2lsZW5jZSAtV2Vycm9yPW1heWJlLXVuaW5pdGlhbGl6ZWQKKysJIGVsZl9nZXRhcnN5bS5jOjI5MDo5OiBlcnJvcjogJ24nIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbgorKwkgVGhlIHJlYWRfbnVtYmVyX2VudHJpZXMgZnVuY3Rpb24gZG9lc24ndCBpbml0aWFsaXplIG4gb25seSB3aGVuIHJldHVybmluZworKwkgLTEgd2hpY2ggaW4gdHVybiBlbnN1cmVzIHRvIGp1bXAgb3ZlciB1c2FnZSBvZiB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCisrCSAqLworKyAgICAgIHVpbnQ2NF90IG4gPSBTSVpFX01BWDsKKyAgICAgICBzaXplX3Qgb2ZmID0gZWxmLT5zdGFydF9vZmZzZXQgKyBTQVJNQUcgKyBzaXplb2YgKHN0cnVjdCBhcl9oZHIpOworICAgICAgIGlmIChyZWFkX251bWJlcl9lbnRyaWVzICgmbiwgZWxmLCAmb2ZmLCBpbmRleDY0X3ApIDwgMCkKKyAJeworLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvMDAwMS1maXgtYS1zdGFjay11c2FnZS13YXJuaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIzYmY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitbUEFUQ0hdIGZpeCBhIHN0YWNrLXVzYWdlIHdhcm5pbmcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK25vdCB1c2UgYSB2YXJpYWJsZSB0byBhcyBhIGFycmF5IHNpemUsIG90aGVyd2lzZSB0aGUgd2FybmluZyB0byBlcnJvciB0aGF0CitzdGFjayB1c2FnZSBtaWdodCBiZSB1bmJvdW5kZWQgWy1XZXJyb3I9c3RhY2stdXNhZ2U9XSB3aWxsIGhhcHBlbgorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBiYWNrZW5kcy9wcGNfaW5pdHJlZy5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvcHBjX2luaXRyZWcuYyBiL2JhY2tlbmRzL3BwY19pbml0cmVnLmMKK2luZGV4IDY0ZjUzNzkuLjUyZGRlM2UgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCisrKysgYi9iYWNrZW5kcy9wcGNfaW5pdHJlZy5jCitAQCAtOTMsNyArOTMsNyBAQCBwcGNfc2V0X2luaXRpYWxfcmVnaXN0ZXJzX3RpZCAocGlkX3QgdGlkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAJcmV0dXJuIGZhbHNlOworICAgICB9CisgICBjb25zdCBzaXplX3QgZ3BycyA9IHNpemVvZiAodXNlcl9yZWdzLnIuZ3ByKSAvIHNpemVvZiAoKnVzZXJfcmVncy5yLmdwcik7CistICBEd2FyZl9Xb3JkIGR3YXJmX3JlZ3NbZ3Byc107CisrICBEd2FyZl9Xb3JkIGR3YXJmX3JlZ3Nbc2l6ZW9mICh1c2VyX3JlZ3Muci5ncHIpIC8gc2l6ZW9mICgqdXNlcl9yZWdzLnIuZ3ByKV07CisgICBmb3IgKHVuc2lnbmVkIGdwciA9IDA7IGdwciA8IGdwcnM7IGdwcisrKQorICAgICBkd2FyZl9yZWdzW2dwcl0gPSB1c2VyX3JlZ3Muci5ncHJbZ3ByXTsKKyAgIGlmICghIHNldGZ1bmMgKDAsIGdwcnMsIGR3YXJmX3JlZ3MsIGFyZykpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzLzAwMDEtcmVtb3ZlLXRoZS11bm5lZWQtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlOTJkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Rpc2FibGUgdGhlIHRlc3QgdG8gY29udmVydCBldWMtanAKKworUmVtb3ZlIHRoZSB0ZXN0ICJUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOgorTm8gY29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzIHByb3ZpZGVkIgorc2luY2Ugd2UgZG9uJ3Qgc3VwcG9ydCBIUC1VWCBhbmQgaWYgdGhlIGV1Yy1qcCBpcyBub3QKK2luc3RhbGxlZCBvbiB0aGUgaG9zdCwgdGhlIGRlcGVuZGVuY2Ugd2lsbCBiZSBidWlsdCB3aXRob3V0CitpY29udiBzdXBwb3J0IGFuZCB3aWxsIGNhdXNlIGd1aWxkLW5hdGl2ZSBidWlsZGluZyBmYWlsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBtNC9pY29udi5tNCB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9tNC9pY29udi5tNCBiL200L2ljb252Lm00CitpbmRleCBhNTAzNjQ2Li4yOTlmMWViIDEwMDY0NAorLS0tIGEvbTQvaWNvbnYubTQKKysrKyBiL200L2ljb252Lm00CitAQCAtMTU5LDYgKzE1OSw3IEBAIGludCBtYWluICgpCisgICAgICAgfQorICAgfQorICNlbmRpZgorKyNpZiAwCisgICAvKiBUZXN0IGFnYWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTggaXMKKyAgICAgIHByb3ZpZGVkLiAgKi8KKyAgIGlmICgvKiBUcnkgc3RhbmRhcmRpemVkIG5hbWVzLiAgKi8KK0BAIC0xNzAsNiArMTcxLDcgQEAgaW50IG1haW4gKCkKKyAgICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworICAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKyAgICAgcmVzdWx0IHw9IDE2OworKyNlbmRpZgorICAgcmV0dXJuIHJlc3VsdDsKKyB9XV0pXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9iYWNrZW5kLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3YzRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9hcm1fYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNjI1IEBACitGcm9tIDBkYjE2ODdlZWUwYjRkMTZjY2JjNDBkYjVhMDZiNTc0ZmNhNjYxNGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDE0IE5vdiAyMDE0IDE1OjI1OjQyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlYmFzZSBhcm1fYmFja2VuZC5kaWZmIGZyb20gMC4xNTkgdG8gMC4xNjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyAgICAgICAgICAgICAgICAgfCAgMTggKysrKy0KKyBiYWNrZW5kcy9hcm1fcmVncy5jICAgICAgICAgICAgICAgICB8IDEzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBiYWNrZW5kcy9hcm1fcmV0dmFsLmMgICAgICAgICAgICAgICB8ICA0NCArKysrKysrKysrKy0KKyBiYWNrZW5kcy9saWJlYmxfYXJtLmggICAgICAgICAgICAgICB8ICAgOSArKysKKyBsaWJlbGYvZWxmLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAxMSArKysKKyB0ZXN0cy9ydW4tYWRkcmNmaS5zaCAgICAgICAgICAgICAgICB8ICA5MyArKysrKysrKysrKysrKysrKysrKysrKystCisgdGVzdHMvcnVuLWFsbHJlZ3Muc2ggICAgICAgICAgICAgICAgfCAgOTUgKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyB0ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaCB8ICAxMSArKy0KKyA4IGZpbGVzIGNoYW5nZWQsIDQwMSBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYmFja2VuZHMvbGliZWJsX2FybS5oCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggMzI4M2M5Ny4uOGI1N2QzZiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC0zNSwyMSArMzUsMzIgQEAKKyAjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX0FSTV8KKyAjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorIAorKyNpbmNsdWRlICJsaWJlYmxfYXJtLmgiCisrCisgLyogVGhpcyBkZWZpbmVzIHRoZSBjb21tb24gcmVsb2MgaG9va3MgYmFzZWQgb24gYXJtX3JlbG9jLmRlZi4gICovCisgI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorIAorIAorIGNvbnN0IGNoYXIgKgorIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKy0gICAgIEVsZiAqZWxmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKTsKKysgICAgIEVsZiAqZWxmOworICAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworICAgICAgRWJsICplaDsKKyAgICAgIHNpemVfdCBlaGxlbjsKKyB7CisrICBpbnQgc29mdF9mbG9hdCA9IDA7CisrCisgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKyAgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKyAgICAgcmV0dXJuIE5VTEw7CisgCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfQVJNX1NPRlRfRkxPQVQpKQorKyAgICAgIHNvZnRfZmxvYXQgPSAxOworKyAgfQorKworICAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKyAgIGVoLT5uYW1lID0gIkFSTSI7CisgICBhcm1faW5pdF9yZWxvYyAoZWgpOworQEAgLTYxLDcgKzcyLDEwIEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgIEhPT0sgKGVoLCBjb3JlX25vdGUpOworICAgSE9PSyAoZWgsIGF1eHZfaW5mbyk7CisgICBIT09LIChlaCwgY2hlY2tfb2JqZWN0X2F0dHJpYnV0ZSk7CistICBIT09LIChlaCwgcmV0dXJuX3ZhbHVlX2xvY2F0aW9uKTsKKysgIGlmIChzb2Z0X2Zsb2F0KQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9zb2Z0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl9oYXJkOworICAgSE9PSyAoZWgsIGFiaV9jZmkpOworICAgSE9PSyAoZWgsIGNoZWNrX3JlbG9jX3RhcmdldF90eXBlKTsKKyAKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1fcmVncy5jIGIvYmFja2VuZHMvYXJtX3JlZ3MuYworaW5kZXggMjFjNWFkMy4uNGVlMTAzOSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9yZWdzLmMKKysrKyBiL2JhY2tlbmRzL2FybV9yZWdzLmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxkd2FyZi5oPgorIAorICNkZWZpbmUgQkFDS0VORCBhcm1fCitAQCAtNzYsNiArNzcsOSBAQCBhcm1fcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorICAgICAgIGJyZWFrOworIAorICAgICBjYXNlIDE2ICsgMCAuLi4gMTYgKyA3OgorKyAgICAgIC8qIEFBRFdBUkYgc2F5cyB0aGF0IHRoZXJlIGFyZSBubyByZWdpc3RlcnMgaW4gdGhhdCByYW5nZSwKKysgICAgICAgKiBidXQgZ2NjIG1hcHMgRlBBIHJlZ2lzdGVycyBoZXJlCisrICAgICAgICovCisgICAgICAgcmVnbm8gKz0gOTYgLSAxNjsKKyAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICBjYXNlIDk2ICsgMCAuLi4gOTYgKyA3OgorQEAgLTg3LDExICs5MSwxMzkgQEAgYXJtX3JlZ2lzdGVyX2luZm8gKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgICBuYW1lbGVuID0gMjsKKyAgICAgICBicmVhazsKKyAKKysgICAgY2FzZSA2NCArIDAgLi4uIDY0ICsgOToKKysgICAgICAqc2V0bmFtZSA9ICJWRlAiOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgbmFtZVswXSA9ICdzJzsKKysgICAgICBuYW1lWzFdID0gcmVnbm8gLSA2NCArICcwJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSA2NCArIDEwIC4uLiA2NCArIDMxOgorKyAgICAgICpzZXRuYW1lID0gIlZGUCI7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgICBuYW1lWzBdID0gJ3MnOworKyAgICAgIG5hbWVbMV0gPSAocmVnbm8gLSA2NCkgLyAxMCArICcwJzsKKysgICAgICBuYW1lWzJdID0gKHJlZ25vIC0gNjQpICUgMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgMTA0ICsgMCAuLi4gMTA0ICsgNzoKKysgICAgICAvKiBYWFggVE9ETzoKKysgICAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgaW50ZWwgd2lyZWxlc3MgTU1YIGdlbmVyYWwgcHVycG9zZS9jb250cm9sCisrICAgICAgICogcmVnaXN0ZXJzIG9yIHhzY2FsZSBhY2N1bXVsYXRvciwgd2hpY2ggaGF2ZSBkaWZmZXJlbnQgdXNhZ2UuCisrICAgICAgICogV2Ugb25seSBoYXZlIHRoZSBpbnRlbCB3aXJlbGVzcyBNTVggaGVyZSBub3cuCisrICAgICAgICogVGhlIG5hbWUgbmVlZHMgdG8gYmUgY2hhbmdlZCBmb3IgdGhlIHhzY2FsZSBhY2N1bXVsYXRvciB0b28uICovCisrICAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG1lbWNweShuYW1lLCAid2NnciIsIDQpOworKyAgICAgIG5hbWVbNF0gPSByZWdubyAtIDEwNCArICcwJzsKKysgICAgICBuYW1lbGVuID0gNTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSAxMTIgKyAwIC4uLiAxMTIgKyA5OgorKyAgICAgICpzZXRuYW1lID0gIk1NWCI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfdW5zaWduZWQ7CisrICAgICAgKmJpdHMgPSA2NDsKKysgICAgICBuYW1lWzBdID0gJ3cnOworKyAgICAgIG5hbWVbMV0gPSAncic7CisrICAgICAgbmFtZVsyXSA9IHJlZ25vIC0gMTEyICsgJzAnOworKyAgICAgIG5hbWVsZW4gPSAzOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIDExMiArIDEwIC4uLiAxMTIgKyAxNToKKysgICAgICAqc2V0bmFtZSA9ICJNTVgiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgICpiaXRzID0gNjQ7CisrICAgICAgbmFtZVswXSA9ICd3JzsKKysgICAgICBuYW1lWzFdID0gJ3InOworKyAgICAgIG5hbWVbMl0gPSAnMSc7CisrICAgICAgbmFtZVszXSA9IHJlZ25vIC0gMTEyIC0gMTAgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDQ7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMTI4OgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKyAgICAgICByZXR1cm4gc3RwY3B5IChuYW1lLCAic3BzciIpICsgMSAtIG5hbWU7CisgCisrICAgIGNhc2UgMTI5OgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2ZpcSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMwOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2lycSIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMxOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX2FidCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMyOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3VuZCIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTMzOgorKyAgICAgICpzZXRuYW1lID0gInN0YXRlIjsKKysgICAgICAqdHlwZSA9IERXX0FURV91bnNpZ25lZDsKKysgICAgICByZXR1cm4gc3RwY3B5KG5hbWUsICJzcHNyX3N2YyIpICsgMSAtIG5hbWU7CisrCisrICAgIGNhc2UgMTQ0IC4uLiAxNTA6CisrICAgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgcmV0dXJuIHNwcmludGYobmFtZSwgInIlZF91c3IiLCByZWdubyAtIDE0NCArIDgpICsgMTsKKysKKysgICAgY2FzZSAxNTEgLi4uIDE1NzoKKysgICAgICAqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysgICAgICAqdHlwZSA9IERXX0FURV9zaWduZWQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICByZXR1cm4gc3ByaW50ZihuYW1lLCAiciVkX2ZpcSIsIHJlZ25vIC0gMTUxICsgOCkgKyAxOworKworKyAgICBjYXNlIDE1OCAuLi4gMTU5OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfaXJxIiwgcmVnbm8gLSAxNTggKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MCAuLi4gMTYxOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfYWJ0IiwgcmVnbm8gLSAxNjAgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2MiAuLi4gMTYzOgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfdW5kIiwgcmVnbm8gLSAxNjIgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE2NCAuLi4gMTY1OgorKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIHJldHVybiBzcHJpbnRmKG5hbWUsICJyJWRfc3ZjIiwgcmVnbm8gLSAxNjQgKyAxMykgKyAxOworKworKyAgICBjYXNlIDE5MiAuLi4gMTk5OgorKyAgICAgKnNldG5hbWUgPSAiTU1YIjsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgICAgIG5hbWVbMF0gPSAndyc7CisrICAgICAgbmFtZVsxXSA9ICdjJzsKKysgICAgICBuYW1lWzJdID0gcmVnbm8gLSAxOTIgKyAnMCc7CisrICAgICAgbmFtZWxlbiA9IDM7CisrICAgICAgYnJlYWs7CisrCisgICAgIGNhc2UgMjU2ICsgMCAuLi4gMjU2ICsgOToKKysgICAgICAvKiBYWFggVE9ETzogTmVvbiBhbHNvIHVzZXMgdGhvc2UgcmVnaXN0ZXJzIGFuZCBjYW4gY29udGFpbgorKyAgICAgICAqIGJvdGggZmxvYXQgYW5kIGludGVnZXJzICovCisgICAgICAgKnNldG5hbWUgPSAiVkZQIjsKKyAgICAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKyAgICAgICAqYml0cyA9IDY0OworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9yZXR2YWwuYyBiL2JhY2tlbmRzL2FybV9yZXR2YWwuYworaW5kZXggN2FjZWQ3NC4uMDUyMTMyZSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9yZXR2YWwuYworKysrIGIvYmFja2VuZHMvYXJtX3JldHZhbC5jCitAQCAtNDgsNiArNDgsMTMgQEAgc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19pbnRyZWdbXSA9CisgI2RlZmluZSBubG9jX2ludHJlZwkxCisgI2RlZmluZSBubG9jX2ludHJlZ3MobikJKDIgKiAobikpCisgCisrLyogZjEgICovIC8qIFhYWCBUT0RPOiBmMCBjYW4gYWxzbyBoYXZlIG51bWJlciA5NiBpZiBwcm9ncmFtIHdhcyBjb21waWxlZCB3aXRoIC1tYWJpPWFhcGNzICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0sCisrICB9OworKyNkZWZpbmUgbmxvY19mcHJlZyAgMQorKworIC8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorICAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiAgQnV0LCB0aGUgY29tcGlsZXIKKyAgICBoZWxwZnVsbHkgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGF0IHNwYWNlIGluIHIwLiAgKi8KK0BAIC01OCw4ICs2NSw5IEBAIHN0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorICNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorIAorIAorLWludAorLWFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKytzdGF0aWMgaW50CisrYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCwKKysJCSAgICAgICAgICAgIGludCBzb2Z0X2Zsb2F0KQorIHsKKyAgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisgICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KK0BAIC05OCwxNCArMTA2LDMxIEBAIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyAJICAgIGVsc2UKKyAJICAgICAgcmV0dXJuIC0xOworIAkgIH0KKysJaWYgKHRhZyA9PSBEV19UQUdfYmFzZV90eXBlKQorKwl7CisrCSAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICBpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfZW5jb2RpbmcsCisrCSAgICAgICAgICAgICAgICAgICAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgcmV0dXJuIC0xOworKworKwkgIGlmICgoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KSAmJiAhc29mdF9mbG9hdCkKKysJICAgIHsKKysJICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrCSAgICAgIGlmIChzaXplIDw9IDgpCisrCQlyZXR1cm4gbmxvY19mcHJlZzsKKysJICAgICAgZ290byBhZ2dyZWdhdGU7CisrCSAgICB9CisrCX0KKyAJaWYgKHNpemUgPD0gMTYpCisgCSAgeworIAkgIGludHJlZzoKKyAJICAgICpsb2NwID0gbG9jX2ludHJlZzsKKyAJICAgIHJldHVybiBzaXplIDw9IDQgPyBubG9jX2ludHJlZyA6IG5sb2NfaW50cmVncyAoKHNpemUgKyAzKSAvIDQpOworIAkgIH0KKysJICAvKiBmYWxsIHRocm91Z2guICovCisgCisgICAgICAgYWdncmVnYXRlOgorKwkvKiBYWFggVE9ETyBzb21ldGltZXMgYWdncmVnYXRlcyBhcmUgcmV0dXJuZWQgaW4gcjAgKC1tYWJpPWFhcGNzKSAqLworIAkqbG9jcCA9IGxvY19hZ2dyZWdhdGU7CisgCXJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKyAgICAgICB9CitAQCAtMTI1LDMgKzE1MCwxOCBAQCBhcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisgICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworICAgcmV0dXJuIC0yOworIH0KKysKKysvKiByZXR1cm4gbG9jYXRpb24gZm9yIC1tYWJpPWFwY3MtZ251IC1tc29mdC1mbG9hdCAqLworK2ludAorK2FybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdCAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgICByZXR1cm4gYXJtX3JldHVybl92YWx1ZV9sb2NhdGlvbl8gKGZ1bmN0eXBlZGllLCBsb2NwLCAxKTsKKyt9CisrCisrLyogcmV0dXJuIGxvY2F0aW9uIGZvciAtbWFiaT1hcGNzLWdudSAtbWhhcmQtZmxvYXQgKGN1cnJlbnQgZGVmYXVsdCkgKi8KKytpbnQKKythcm1fcmV0dXJuX3ZhbHVlX2xvY2F0aW9uX2hhcmQgKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICAgcmV0dXJuIGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMCk7CisrfQorKworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2xpYmVibF9hcm0uaCBiL2JhY2tlbmRzL2xpYmVibF9hcm0uaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMwMDc3MGMKKy0tLSAvZGV2L251bGwKKysrKyBiL2JhY2tlbmRzL2xpYmVibF9hcm0uaAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0FSTV9ICisrI2RlZmluZSBfTElCRUJMX0FSTV9IIDEKKysKKysjaW5jbHVkZSA8bGliZHcuaD4KKysKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25fc29mdChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZChEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9saWJlbGYvZWxmLmggYi9saWJlbGYvZWxmLmgKK2luZGV4IGEzY2NlM2UuLjA4OTE2NzQgMTAwNjQ0CistLS0gYS9saWJlbGYvZWxmLmgKKysrKyBiL2xpYmVsZi9lbGYuaAorQEAgLTIzNDYsNiArMjM0Niw5IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAjZGVmaW5lIEVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorICNkZWZpbmUgRUZfQVJNX0VBQklfVkVSNQkweDA1MDAwMDAwCisgCisrLyogRUlfT1NBQkkgdmFsdWVzICovCisrI2RlZmluZSBFTEZPU0FCSV9BUk1fQUVBQkkgICAgNjQgICAgICAvKiBDb250YWlucyBzeW1ib2wgdmVyc2lvbmluZy4gKi8KKysKKyAvKiBBZGRpdGlvbmFsIHN5bWJvbCB0eXBlcyBmb3IgVGh1bWIuICAqLworICNkZWZpbmUgU1RUX0FSTV9URlVOQwkJU1RUX0xPUFJPQyAvKiBBIFRodW1iIGZ1bmN0aW9uLiAgKi8KKyAjZGVmaW5lIFNUVF9BUk1fMTZCSVQJCVNUVF9ISVBST0MgLyogQSBUaHVtYiBsYWJlbC4gICovCitAQCAtMjM2MywxMiArMjM2NiwxOSBAQCB0eXBlZGVmIEVsZjMyX0FkZHIgRWxmMzJfQ29uZmxpY3Q7CisgCisgLyogUHJvY2Vzc29yIHNwZWNpZmljIHZhbHVlcyBmb3IgdGhlIFBoZHIgcF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFBUX0FSTV9FWElEWAkJKFBUX0xPUFJPQyArIDEpCS8qIEFSTSB1bndpbmQgc2VnbWVudC4gICovCisrI2RlZmluZSBQVF9BUk1fVU5XSU5ECQlQVF9BUk1fRVhJRFgKKyAKKyAvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgU2hkciBzaF90eXBlIGZpZWxkLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fRVhJRFgJCShTSFRfTE9QUk9DICsgMSkgLyogQVJNIHVud2luZCBzZWN0aW9uLiAgKi8KKyAjZGVmaW5lIFNIVF9BUk1fUFJFRU1QVE1BUAkoU0hUX0xPUFJPQyArIDIpIC8qIFByZWVtcHRpb24gZGV0YWlscy4gICovCisgI2RlZmluZSBTSFRfQVJNX0FUVFJJQlVURVMJKFNIVF9MT1BST0MgKyAzKSAvKiBBUk0gYXR0cmlidXRlcyBzZWN0aW9uLiAgKi8KKyAKKysvKiBQcm9jZXNzb3Igc3BlY2lmaWMgdmFsdWVzIGZvciB0aGUgRHluIGRfdGFnIGZpZWxkLiAgKi8KKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDEJKERUX0xPUFJPQyArIDApCisrI2RlZmluZSBEVF9BUk1fU1lNVEFCU1oJCShEVF9MT1BST0MgKyAxKQorKyNkZWZpbmUgRFRfQVJNX1BSRUVNVE1BQgkoRFRfTE9QUk9DICsgMikKKysjZGVmaW5lIERUX0FSTV9SRVNFUlZFRDIJKERUX0xPUFJPQyArIDMpCisrI2RlZmluZSBEVF9BUk1fTlVNCQk0CisgCisgLyogQUFyY2g2NCByZWxvY3MuICAqLworIAorQEAgLTI2NDcsNiArMjY1Nyw3IEBAIHR5cGVkZWYgRWxmMzJfQWRkciBFbGYzMl9Db25mbGljdDsKKyAJCQkJCSAgIFRMUyBibG9jayAoTERSLCBTVFIpLiAgKi8KKyAjZGVmaW5lIFJfQVJNX1RMU19JRTEyR1AJMTExCS8qIDEyIGJpdCBHT1QgZW50cnkgcmVsYXRpdmUKKyAJCQkJCSAgIHRvIEdPVCBvcmlnaW4gKExEUikuICAqLworKy8qIDExMiAtIDEyNyBwcml2YXRlIHJhbmdlICovCisgI2RlZmluZSBSX0FSTV9NRV9UT08JCTEyOAkvKiBPYnNvbGV0ZS4gICovCisgI2RlZmluZSBSX0FSTV9USE1fVExTX0RFU0NTRVEJMTI5CisgI2RlZmluZSBSX0FSTV9USE1fVExTX0RFU0NTRVExNgkxMjkKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4tYWRkcmNmaS5zaCBiL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCitpbmRleCA1ZDMzMjQ2Li43ODQ2NGE4IDEwMDc1NQorLS0tIGEvdGVzdHMvcnVuLWFkZHJjZmkuc2gKKysrKyBiL3Rlc3RzL3J1bi1hZGRyY2ZpLnNoCitAQCAtMjUzMCw2ICsyNTMwLDM4IEBAIGR3YXJmX2NmaV9hZGRyZnJhbWUgKC5laF9mcmFtZSk6IG5vIG1hdGNoaW5nIGFkZHJlc3MgcmFuZ2UKKyAJRlBBIHJlZzIxIChmNSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnMjIgKGY2KTogdW5kZWZpbmVkCisgCUZQQSByZWcyMyAoZjcpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY0IChzMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjUgKHMxKTogdW5kZWZpbmVkCisrCVZGUCByZWc2NiAoczIpOiB1bmRlZmluZWQKKysJVkZQIHJlZzY3IChzMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNjggKHM0KTogdW5kZWZpbmVkCisrCVZGUCByZWc2OSAoczUpOiB1bmRlZmluZWQKKysJVkZQIHJlZzcwIChzNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzEgKHM3KTogdW5kZWZpbmVkCisrCVZGUCByZWc3MiAoczgpOiB1bmRlZmluZWQKKysJVkZQIHJlZzczIChzOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzQgKHMxMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzUgKHMxMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzYgKHMxMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzcgKHMxMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzggKHMxNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnNzkgKHMxNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODAgKHMxNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnODEgKHMxNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODIgKHMxOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODMgKHMxOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODQgKHMyMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODUgKHMyMSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODYgKHMyMik6IHVuZGVmaW5lZAorKwlWRlAgcmVnODcgKHMyMyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODggKHMyNCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnODkgKHMyNSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTAgKHMyNik6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTEgKHMyNyk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTIgKHMyOCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTMgKHMyOSk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTQgKHMzMCk6IHVuZGVmaW5lZAorKwlWRlAgcmVnOTUgKHMzMSk6IHVuZGVmaW5lZAorIAlGUEEgcmVnOTYgKGYwKTogdW5kZWZpbmVkCisgCUZQQSByZWc5NyAoZjEpOiB1bmRlZmluZWQKKyAJRlBBIHJlZzk4IChmMik6IHVuZGVmaW5lZAorQEAgLTI1MzgsNyArMjU3MCw2NiBAQCBkd2FyZl9jZmlfYWRkcmZyYW1lICguZWhfZnJhbWUpOiBubyBtYXRjaGluZyBhZGRyZXNzIHJhbmdlCisgCUZQQSByZWcxMDEgKGY1KTogdW5kZWZpbmVkCisgCUZQQSByZWcxMDIgKGY2KTogdW5kZWZpbmVkCisgCUZQQSByZWcxMDMgKGY3KTogdW5kZWZpbmVkCistCWludGVnZXIgcmVnMTI4IChzcHNyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDQgKHdjZ3IwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDUgKHdjZ3IxKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDYgKHdjZ3IyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDcgKHdjZ3IzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDggKHdjZ3I0KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMDkgKHdjZ3I1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTAgKHdjZ3I2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTEgKHdjZ3I3KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTIgKHdyMCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTEzICh3cjEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNCAod3IyKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTUgKHdyMyk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE2ICh3cjQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzExNyAod3I1KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMTggKHdyNik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTE5ICh3cjcpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyMCAod3I4KTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjEgKHdyOSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTIyICh3cjEwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjMgKHdyMTEpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNCAod3IxMik6IHVuZGVmaW5lZAorKwlNTVggcmVnMTI1ICh3cjEzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxMjYgKHdyMTQpOiB1bmRlZmluZWQKKysJTU1YIHJlZzEyNyAod3IxNSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMjggKHNwc3IpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTI5IChzcHNyX2ZpcSk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzAgKHNwc3JfaXJxKTogdW5kZWZpbmVkCisrCXN0YXRlIHJlZzEzMSAoc3Bzcl9hYnQpOiB1bmRlZmluZWQKKysJc3RhdGUgcmVnMTMyIChzcHNyX3VuZCk6IHVuZGVmaW5lZAorKwlzdGF0ZSByZWcxMzMgKHNwc3Jfc3ZjKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTQ0IChyOF91c3IpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNDUgKHI5X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NiAocjEwX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0NyAocjExX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0OCAocjEyX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE0OSAocjEzX3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MCAocjE0X3Vzcik6IHVuZGVmaW5lZAorKwlpbnRlZ2VyIHJlZzE1MSAocjhfZmlxKTogdW5kZWZpbmVkCisrCWludGVnZXIgcmVnMTUyIChyOV9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTMgKHIxMF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTQgKHIxMV9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTUgKHIxMl9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTYgKHIxM19maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTcgKHIxNF9maXEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTggKHIxM19pcnEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNTkgKHIxNF9pcnEpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjAgKHIxM19hYnQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjEgKHIxNF9hYnQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjIgKHIxM191bmQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjMgKHIxNF91bmQpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjQgKHIxM19zdmMpOiB1bmRlZmluZWQKKysJaW50ZWdlciByZWcxNjUgKHIxNF9zdmMpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5MiAod2MwKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTMgKHdjMSk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk0ICh3YzIpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5NSAod2MzKTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTYgKHdjNCk6IHVuZGVmaW5lZAorKwlNTVggcmVnMTk3ICh3YzUpOiB1bmRlZmluZWQKKysJTU1YIHJlZzE5OCAod2M2KTogdW5kZWZpbmVkCisrCU1NWCByZWcxOTkgKHdjNyk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU2IChkMCk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU3IChkMSk6IHVuZGVmaW5lZAorIAlWRlAgcmVnMjU4IChkMik6IHVuZGVmaW5lZAorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1hbGxyZWdzLnNoIGIvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKK2luZGV4IDZmMzg2MmUuLjEzNTU3ZDUgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tYWxscmVncy5zaAorKysrIGIvdGVzdHMvcnVuLWFsbHJlZ3Muc2gKK0BAIC0yNjcxLDcgKzI2NzEsMjggQEAgaW50ZWdlciByZWdpc3RlcnM6CisgCSAxMzogc3AgKHNwKSwgYWRkcmVzcyAzMiBiaXRzCisgCSAxNDogbHIgKGxyKSwgYWRkcmVzcyAzMiBiaXRzCisgCSAxNTogcGMgKHBjKSwgYWRkcmVzcyAzMiBiaXRzCistCTEyODogc3BzciAoc3BzciksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTQ0OiByOF91c3IgKHI4X3VzciksIHNpZ25lZCAzMiBiaXRzCisrCTE0NTogcjlfdXNyIChyOV91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDY6IHIxMF91c3IgKHIxMF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDc6IHIxMV91c3IgKHIxMV91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDg6IHIxMl91c3IgKHIxMl91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNDk6IHIxM191c3IgKHIxM191c3IpLCBzaWduZWQgMzIgYml0cworKwkxNTA6IHIxNF91c3IgKHIxNF91c3IpLCBzaWduZWQgMzIgYml0cworKwkxNTE6IHI4X2ZpcSAocjhfZmlxKSwgc2lnbmVkIDMyIGJpdHMKKysJMTUyOiByOV9maXEgKHI5X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1MzogcjEwX2ZpcSAocjEwX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NDogcjExX2ZpcSAocjExX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NTogcjEyX2ZpcSAocjEyX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NjogcjEzX2ZpcSAocjEzX2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1NzogcjE0X2ZpcSAocjE0X2ZpcSksIHNpZ25lZCAzMiBiaXRzCisrCTE1ODogcjEzX2lycSAocjEzX2lycSksIHNpZ25lZCAzMiBiaXRzCisrCTE1OTogcjE0X2lycSAocjE0X2lycSksIHNpZ25lZCAzMiBiaXRzCisrCTE2MDogcjEzX2FidCAocjEzX2FidCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MTogcjE0X2FidCAocjE0X2FidCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MjogcjEzX3VuZCAocjEzX3VuZCksIHNpZ25lZCAzMiBiaXRzCisrCTE2MzogcjE0X3VuZCAocjE0X3VuZCksIHNpZ25lZCAzMiBiaXRzCisrCTE2NDogcjEzX3N2YyAocjEzX3N2YyksIHNpZ25lZCAzMiBiaXRzCisrCTE2NTogcjE0X3N2YyAocjE0X3N2YyksIHNpZ25lZCAzMiBiaXRzCisgRlBBIHJlZ2lzdGVyczoKKyAJIDE2OiBmMCAoZjApLCBmbG9hdCA5NiBiaXRzCisgCSAxNzogZjEgKGYxKSwgZmxvYXQgOTYgYml0cworQEAgLTI2ODksNyArMjcxMCw3MiBAQCBGUEEgcmVnaXN0ZXJzOgorIAkxMDE6IGY1IChmNSksIGZsb2F0IDk2IGJpdHMKKyAJMTAyOiBmNiAoZjYpLCBmbG9hdCA5NiBiaXRzCisgCTEwMzogZjcgKGY3KSwgZmxvYXQgOTYgYml0cworK01NWCByZWdpc3RlcnM6CisrCTEwNDogd2NncjAgKHdjZ3IwKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDU6IHdjZ3IxICh3Y2dyMSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA2OiB3Y2dyMiAod2NncjIpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEwNzogd2NncjMgKHdjZ3IzKSwgdW5zaWduZWQgMzIgYml0cworKwkxMDg6IHdjZ3I0ICh3Y2dyNCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTA5OiB3Y2dyNSAod2NncjUpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTExMDogd2NncjYgKHdjZ3I2KSwgdW5zaWduZWQgMzIgYml0cworKwkxMTE6IHdjZ3I3ICh3Y2dyNyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTEyOiB3cjAgKHdyMCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTEzOiB3cjEgKHdyMSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE0OiB3cjIgKHdyMiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE1OiB3cjMgKHdyMyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE2OiB3cjQgKHdyNCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE3OiB3cjUgKHdyNSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE4OiB3cjYgKHdyNiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTE5OiB3cjcgKHdyNyksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIwOiB3cjggKHdyOCksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIxOiB3cjkgKHdyOSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTIyOiB3cjEwICh3cjEwKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjM6IHdyMTEgKHdyMTEpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNDogd3IxMiAod3IxMiksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTI1OiB3cjEzICh3cjEzKSwgdW5zaWduZWQgNjQgYml0cworKwkxMjY6IHdyMTQgKHdyMTQpLCB1bnNpZ25lZCA2NCBiaXRzCisrCTEyNzogd3IxNSAod3IxNSksIHVuc2lnbmVkIDY0IGJpdHMKKysJMTkyOiB3YzAgKHdjMCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTkzOiB3YzEgKHdjMSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk0OiB3YzIgKHdjMiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk1OiB3YzMgKHdjMyksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk2OiB3YzQgKHdjNCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk3OiB3YzUgKHdjNSksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk4OiB3YzYgKHdjNiksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTk5OiB3YzcgKHdjNyksIHVuc2lnbmVkIDMyIGJpdHMKKyBWRlAgcmVnaXN0ZXJzOgorKwkgNjQ6IHMwIChzMCksIGZsb2F0IDMyIGJpdHMKKysJIDY1OiBzMSAoczEpLCBmbG9hdCAzMiBiaXRzCisrCSA2NjogczIgKHMyKSwgZmxvYXQgMzIgYml0cworKwkgNjc6IHMzIChzMyksIGZsb2F0IDMyIGJpdHMKKysJIDY4OiBzNCAoczQpLCBmbG9hdCAzMiBiaXRzCisrCSA2OTogczUgKHM1KSwgZmxvYXQgMzIgYml0cworKwkgNzA6IHM2IChzNiksIGZsb2F0IDMyIGJpdHMKKysJIDcxOiBzNyAoczcpLCBmbG9hdCAzMiBiaXRzCisrCSA3MjogczggKHM4KSwgZmxvYXQgMzIgYml0cworKwkgNzM6IHM5IChzOSksIGZsb2F0IDMyIGJpdHMKKysJIDc0OiBzMTAgKHMxMCksIGZsb2F0IDMyIGJpdHMKKysJIDc1OiBzMTEgKHMxMSksIGZsb2F0IDMyIGJpdHMKKysJIDc2OiBzMTIgKHMxMiksIGZsb2F0IDMyIGJpdHMKKysJIDc3OiBzMTMgKHMxMyksIGZsb2F0IDMyIGJpdHMKKysJIDc4OiBzMTQgKHMxNCksIGZsb2F0IDMyIGJpdHMKKysJIDc5OiBzMTUgKHMxNSksIGZsb2F0IDMyIGJpdHMKKysJIDgwOiBzMTYgKHMxNiksIGZsb2F0IDMyIGJpdHMKKysJIDgxOiBzMTcgKHMxNyksIGZsb2F0IDMyIGJpdHMKKysJIDgyOiBzMTggKHMxOCksIGZsb2F0IDMyIGJpdHMKKysJIDgzOiBzMTkgKHMxOSksIGZsb2F0IDMyIGJpdHMKKysJIDg0OiBzMjAgKHMyMCksIGZsb2F0IDMyIGJpdHMKKysJIDg1OiBzMjEgKHMyMSksIGZsb2F0IDMyIGJpdHMKKysJIDg2OiBzMjIgKHMyMiksIGZsb2F0IDMyIGJpdHMKKysJIDg3OiBzMjMgKHMyMyksIGZsb2F0IDMyIGJpdHMKKysJIDg4OiBzMjQgKHMyNCksIGZsb2F0IDMyIGJpdHMKKysJIDg5OiBzMjUgKHMyNSksIGZsb2F0IDMyIGJpdHMKKysJIDkwOiBzMjYgKHMyNiksIGZsb2F0IDMyIGJpdHMKKysJIDkxOiBzMjcgKHMyNyksIGZsb2F0IDMyIGJpdHMKKysJIDkyOiBzMjggKHMyOCksIGZsb2F0IDMyIGJpdHMKKysJIDkzOiBzMjkgKHMyOSksIGZsb2F0IDMyIGJpdHMKKysJIDk0OiBzMzAgKHMzMCksIGZsb2F0IDMyIGJpdHMKKysJIDk1OiBzMzEgKHMzMSksIGZsb2F0IDMyIGJpdHMKKyAJMjU2OiBkMCAoZDApLCBmbG9hdCA2NCBiaXRzCisgCTI1NzogZDEgKGQxKSwgZmxvYXQgNjQgYml0cworIAkyNTg6IGQyIChkMiksIGZsb2F0IDY0IGJpdHMKK0BAIC0yNzIyLDYgKzI4MDgsMTMgQEAgVkZQIHJlZ2lzdGVyczoKKyAJMjg1OiBkMjkgKGQyOSksIGZsb2F0IDY0IGJpdHMKKyAJMjg2OiBkMzAgKGQzMCksIGZsb2F0IDY0IGJpdHMKKyAJMjg3OiBkMzEgKGQzMSksIGZsb2F0IDY0IGJpdHMKKytzdGF0ZSByZWdpc3RlcnM6CisrCTEyODogc3BzciAoc3BzciksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTI5OiBzcHNyX2ZpcSAoc3Bzcl9maXEpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMDogc3Bzcl9pcnEgKHNwc3JfaXJxKSwgdW5zaWduZWQgMzIgYml0cworKwkxMzE6IHNwc3JfYWJ0IChzcHNyX2FidCksIHVuc2lnbmVkIDMyIGJpdHMKKysJMTMyOiBzcHNyX3VuZCAoc3Bzcl91bmQpLCB1bnNpZ25lZCAzMiBiaXRzCisrCTEzMzogc3Bzcl9zdmMgKHNwc3Jfc3ZjKSwgdW5zaWduZWQgMzIgYml0cworIEVPRgorIAorICMgU2VlIHJ1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIGZvciBpbnN0cnVjdGlvbnMgdG8gcmVnZW5lcmF0ZQorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi1yZWFkZWxmLW1peGVkLWNvcmVub3RlLnNoIGIvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKK2luZGV4IDAxZTQ1OTQuLjlhOGEzODAgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4tcmVhZGVsZi1taXhlZC1jb3Jlbm90ZS5zaAorKysrIGIvdGVzdHMvcnVuLXJlYWRlbGYtbWl4ZWQtY29yZW5vdGUuc2gKK0BAIC0zMCwxMiArMzAsMTEgQEAgTm90ZSBzZWdtZW50IG9mIDg5MiBieXRlcyBhdCBvZmZzZXQgMHgyNzQ6CisgICAgIHBpZDogMTEwODcsIHBwaWQ6IDExMDYzLCBwZ3JwOiAxMTA4Nywgc2lkOiAxMTA2MworICAgICB1dGltZTogMC4wMDAwMDAsIHN0aW1lOiAwLjAxMDAwMCwgY3V0aW1lOiAwLjAwMDAwMCwgY3N0aW1lOiAwLjAwMDAwMAorICAgICBvcmlnX3IwOiAtMSwgZnB2YWxpZDogMQorLSAgICByMDogICAgICAgICAgICAgMSAgcjE6ICAgLTEwOTE2NzI1MDggIHIyOiAgIC0xMDkxNjcyNTAwCistICAgIHIzOiAgICAgICAgICAgICAwICByNDogICAgICAgICAgICAgMCAgcjU6ICAgICAgICAgICAgIDAKKy0gICAgcjY6ICAgICAgICAgMzM3MjggIHI3OiAgICAgICAgICAgICAwICByODogICAgICAgICAgICAgMAorLSAgICByOTogICAgICAgICAgICAgMCAgcjEwOiAgLTEyMjU3MDM0OTYgIHIxMTogIC0xMDkxNjcyODQ0CistICAgIHIxMjogICAgICAgICAgICAwICBzcDogICAgMHhiZWVlNjRmNCAgbHI6ICAgIDB4YjZkYzNmNDgKKy0gICAgcGM6ICAgIDB4MDAwMDg1MDAgIHNwc3I6ICAweDYwMDAwMDEwCisrICAgIHIwOiAgICAgICAgICAgIDEgIHIxOiAgLTEwOTE2NzI1MDggIHIyOiAgLTEwOTE2NzI1MDAgIHIzOiAgICAgICAgICAgIDAKKysgICAgcjQ6ICAgICAgICAgICAgMCAgcjU6ICAgICAgICAgICAgMCAgcjY6ICAgICAgICAzMzcyOCAgcjc6ICAgICAgICAgICAgMAorKyAgICByODogICAgICAgICAgICAwICByOTogICAgICAgICAgICAwICByMTA6IC0xMjI1NzAzNDk2ICByMTE6IC0xMDkxNjcyODQ0CisrICAgIHIxMjogICAgICAgICAgIDAgIHNwOiAgIDB4YmVlZTY0ZjQgIGxyOiAgIDB4YjZkYzNmNDggIHBjOiAgIDB4MDAwMDg1MDAKKysgICAgc3BzcjogIDB4NjAwMDAwMTAKKyAgIENPUkUgICAgICAgICAgICAgICAgIDEyNCAgUFJQU0lORk8KKyAgICAgc3RhdGU6IDAsIHNuYW1lOiBSLCB6b21iOiAwLCBuaWNlOiAwLCBmbGFnOiAweDAwNDAwNTAwCisgICAgIHVpZDogMCwgZ2lkOiAwLCBwaWQ6IDExMDg3LCBwcGlkOiAxMTA2MywgcGdycDogMTEwODcsIHNpZDogMTEwNjMKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV9mdW5jX3ZhbHVlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTRkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX2Z1bmNfdmFsdWUucGF0Y2gKQEAgLTAsMCArMSwxNjUgQEAKK0Zyb206IE1hcmsgV2llbGFhcmQgPG1qd0ByZWRoYXQuY29tPgorRGF0ZTogU3VuLCAxNSBKdW4gMjAxNCAxMTozMDozNSArMDIwMAorU3ViamVjdDogbGliZWJsOiBBZGQgc3ltX2Z1bmNfdmFsdWUgaG9vay4KKworVGhlIEFSTSBFQUJJIHNheXMgdGhhdCB0aGUgemVybyBiaXQgb2YgZnVuY3Rpb24gc3ltYm9sIHN0X3ZhbHVlIGluZGljYXRlcword2hldGhlciB0aGUgc3ltYm9sIHBvaW50cyB0byBhIFRIVU1CIG9yIEFSTSBmdW5jdGlvbi4gQWRkIGEgbmV3IGVibCBob29rCit0byBhZGp1c3QgdGhlIHN0X3ZhbHVlIGluIHN1Y2ggYSBjYXNlIHNvIHRoYXQgd2UgZ2V0IHRoZSBhY3R1YWwgdmFsdWUgdGhhdAordGhlIHN5bWJvbCBwb2ludHMgdG8uIEl0IGlzbid0IGVhc2lseSBwb3NzaWJsZSB0byByZXVzZSB0aGUgZXhpc3RpbmcKK3Jlc29sdmVfc3ltX3ZhbHVlIGZvciB0aGlzIHB1cnBvc2UsIHNvIHdlIGVuZCB1cCB3aXRoIGFub3RoZXIgaG9vayB0aGF0CitjYW4gYmUgdXNlZCBmcm9tIGR3ZmxfbW9kdWxlX2dldHN5bSBhbmQgZWxmbGludC4KKworUmViYXNlIGFybV9mdW5jX3ZhbHVlLnBhdGNoIGZyb20gMC4xNTkgdG8gMC4xNjAKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGJhY2tlbmRzL2FybV9pbml0LmMgICAgICAgICAgfCAgICAxICsKKyBiYWNrZW5kcy9hcm1fc3ltYm9sLmMgICAgICAgIHwgICAgOCArKysrKysrKworIGxpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMgfCAgICAyICstCisgbGliZWJsL01ha2VmaWxlLmFtICAgICAgICAgICB8ICAgIDMgKystCisgbGliZWJsL2VibC1ob29rcy5oICAgICAgICAgICB8ICAgIDMgKysrCisgbGliZWJsL2VibHN5bWZ1bmN2YWwuYyAgICAgICB8ICAgNDMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgbGliZWJsL2xpYmVibC5oICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKKyA3IGZpbGVzIGNoYW5nZWQsIDY5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggNzE3MTE4Ni4uOWYwMzYzMCAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC03OCw2ICs3OCw3IEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgICAgZWgtPnJldHVybl92YWx1ZV9sb2NhdGlvbiA9IGFybV9yZXR1cm5fdmFsdWVfbG9jYXRpb25faGFyZDsKKyAgIEhPT0sgKGVoLCBhYmlfY2ZpKTsKKyAgIEhPT0sgKGVoLCBjaGVja19yZWxvY190YXJnZXRfdHlwZSk7CisrICBIT09LIChlaCwgc3ltX2Z1bmNfdmFsdWUpOworICAgSE9PSyAoZWgsIHN5bWJvbF90eXBlX25hbWUpOworIAorICAgLyogV2Ugb25seSB1bndpbmQgdGhlIGNvcmUgaW50ZWdlciByZWdpc3RlcnMuICAqLworZGlmZiAtLWdpdCBhL2JhY2tlbmRzL2FybV9zeW1ib2wuYyBiL2JhY2tlbmRzL2FybV9zeW1ib2wuYworaW5kZXggZGE0YTUwYS4uY2NlYTAzYiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9zeW1ib2wuYworKysrIGIvYmFja2VuZHMvYXJtX3N5bWJvbC5jCitAQCAtMTMwLDYgKzEzMCwxNCBAQCBhcm1fY2hlY2tfcmVsb2NfdGFyZ2V0X3R5cGUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgRWxmNjRfV29yZCBzaF90eQorICAgcmV0dXJuIHNoX3R5cGUgPT0gU0hUX0FSTV9FWElEWDsKKyB9CisgCisrLyogQVJNIEVBQkkgc2F5cyB0aGF0IHRoZSBsb3cgYml0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbgorKyAgIHN5bWJvbCB2YWx1ZSBpcyBhIFRIVU1CIGZ1bmN0aW9uIG9yIG5vdC4gIE1hc2sgaXQgb2ZmLiAgKi8KKytHRWxmX0FkZHIKKythcm1fc3ltX2Z1bmNfdmFsdWUgKEVibCAqZWJsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgR0VsZl9BZGRyIHZhbCkKKyt7CisrICByZXR1cm4gdmFsICYgfihHRWxmX0FkZHIpMTsKKyt9CisrCisgY29uc3QgY2hhciAqCisgYXJtX3N5bWJvbF90eXBlX25hbWUgKGludCB0eXBlLAorIAkJICAgICAgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKK2RpZmYgLS1naXQgYS9saWJkd2ZsL2R3ZmxfbW9kdWxlX2dldHN5bS5jIGIvbGliZHdmbC9kd2ZsX21vZHVsZV9nZXRzeW0uYworaW5kZXggNDJkMmI2Ny4uZmIxOTJkNyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKKysrKyBiL2xpYmR3ZmwvZHdmbF9tb2R1bGVfZ2V0c3ltLmMKK0BAIC0xMTksNyArMTE5LDcgQEAgX19saWJkd2ZsX2dldHN5bSAoRHdmbF9Nb2R1bGUgKm1vZCwgaW50IG5keCwgR0VsZl9TeW0gKnN5bSwgR0VsZl9BZGRyICphZGRyLAorICAgICAgZGVzY3JpcHRvcnMpLiAgKi8KKyAKKyAgIGNoYXIgKmlkZW50OworLSAgR0VsZl9BZGRyIHN0X3ZhbHVlID0gc3ltLT5zdF92YWx1ZSAmIGVibF9mdW5jX2FkZHJfbWFzayAobW9kLT5lYmwpOworKyAgR0VsZl9BZGRyIHN0X3ZhbHVlID0gZWJsX3N5bV9mdW5jX3ZhbHVlIChtb2QtPmVibCwgc3ltLT5zdF92YWx1ZSk7CisgICAqcmVzb2x2ZWQgPSBmYWxzZTsKKyAgIGlmICghIGFkanVzdF9zdF92YWx1ZSAmJiBtb2QtPmVfdHlwZSAhPSBFVF9SRUwgJiYgYWxsb2MKKyAgICAgICAmJiAoR0VMRl9TVF9UWVBFIChzeW0tPnN0X2luZm8pID09IFNUVF9GVU5DCitkaWZmIC0tZ2l0IGEvbGliZWJsL01ha2VmaWxlLmFtIGIvbGliZWJsL01ha2VmaWxlLmFtCitpbmRleCBlYzQ0NzdiLi44ODljMjFiIDEwMDY0NAorLS0tIGEvbGliZWJsL01ha2VmaWxlLmFtCisrKysgYi9saWJlYmwvTWFrZWZpbGUuYW0KK0BAIC01NSw3ICs1NSw4IEBAIGdlbl9TT1VSQ0VTID0gZWJsb3BlbmJhY2tlbmQuYyBlYmxjbG9zZWJhY2tlbmQuYyBlYmxzdHJ0YWIuYyBcCisgCSAgICAgIGVibHN5c3ZoYXNoZW50cnlzaXplLmMgZWJsYXV4dmluZm8uYyBlYmxjaGVja29iamF0dHIuYyBcCisgCSAgICAgIGVibF9jaGVja19zcGVjaWFsX3NlY3Rpb24uYyBlYmxfc3lzY2FsbF9hYmkuYyBlYmxhYmljZmkuYyBcCisgCSAgICAgIGVibHN0b3RoZXIuYyBlYmxpbml0cmVnLmMgZWJsZHdhcmZ0b3JlZ25vLmMgZWJsbm9ybWFsaXplcGMuYyBcCistCSAgICAgIGVibHVud2luZC5jIGVibHJlc29sdmVzeW0uYyBlYmxjaGVja3JlbG9jdGFyZ2V0dHlwZS5jCisrCSAgICAgIGVibHVud2luZC5jIGVibHJlc29sdmVzeW0uYyBlYmxjaGVja3JlbG9jdGFyZ2V0dHlwZS5jIFwKKysJICAgICAgZWJsc3ltZnVuY3ZhbC5jCisgCisgbGliZWJsX2FfU09VUkNFUyA9ICQoZ2VuX1NPVVJDRVMpCisgCitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibC1ob29rcy5oIGIvbGliZWJsL2VibC1ob29rcy5oCitpbmRleCAyZTMxNDQ2Li45ZGY5NDVkIDEwMDY0NAorLS0tIGEvbGliZWJsL2VibC1ob29rcy5oCisrKysgYi9saWJlYmwvZWJsLWhvb2tzLmgKK0BAIC0xOTEsNSArMTkxLDggQEAgYm9vbCBFQkxIT09LKHVud2luZCkgKEVibCAqZWJsLCBEd2FyZl9BZGRyIHBjLCBlYmxfdGlkX3JlZ2lzdGVyc190ICpzZXRmdW5jLAorICAgIChlLmcuIGZ1bmN0aW9uIGRlc2NyaXB0b3IgcmVzb2x2aW5nKSAgKi8KKyBib29sIEVCTEhPT0socmVzb2x2ZV9zeW1fdmFsdWUpIChFYmwgKmVibCwgR0VsZl9BZGRyICphZGRyKTsKKyAKKysvKiBSZXR1cm5zIHRoZSByZWFsIHZhbHVlIG9mIGEgc3ltYm9sIGZ1bmN0aW9uIGFkZHJlc3Mgb3Igb2Zmc2V0LiAgKi8KKytHRWxmX0FkZHIgRUJMSE9PSyhzeW1fZnVuY192YWx1ZSkgKEVibCAqZWJsLCBHRWxmX0FkZHIgdmFsKTsKKysKKyAvKiBEZXN0cnVjdG9yIGZvciBFTEYgYmFja2VuZCBoYW5kbGUuICAqLworIHZvaWQgRUJMSE9PSyhkZXN0cikgKHN0cnVjdCBlYmwgKik7CitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibHN5bWZ1bmN2YWwuYyBiL2xpYmVibC9lYmxzeW1mdW5jdmFsLmMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMGIzMjJmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJlYmwvZWJsc3ltZnVuY3ZhbC5jCitAQCAtMCwwICsxLDQzIEBACisrLyogVHVybiBhIHN5bWJvbCBmdW5jdGlvbiB2YWx1ZSBpbnRvIGEgcmVhbCBmdW5jdGlvbiBhZGRyZXNzIG9yIG9mZnNldC4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGVsZnV0aWxzLgorKworKyAgIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlcgorKworKyAgICAgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKyAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKysgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisrCisrICAgb3IKKysKKysgICAgICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorKyAgICAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKysgICAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uCisrCisrICAgb3IgYm90aCBpbiBwYXJhbGxlbCwgYXMgaGVyZS4KKysKKysgICBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGNvcGllcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisrICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmCisrICAgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGxpYmVibFAuaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrCisrR0VsZl9BZGRyCisrZWJsX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCkKKyt7CisrICBpZiAoZWJsID09IE5VTEwgfHwgZWJsLT5zeW1fZnVuY192YWx1ZSA9PSBOVUxMKQorKyAgICByZXR1cm4gdmFsOworKworKyAgcmV0dXJuIGVibC0+c3ltX2Z1bmNfdmFsdWUgKGVibCwgdmFsKTsKKyt9CitkaWZmIC0tZ2l0IGEvbGliZWJsL2xpYmVibC5oIGIvbGliZWJsL2xpYmVibC5oCitpbmRleCA3ZGJmNDYwLi45NmMwNzZiIDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibC5oCisrKysgYi9saWJlYmwvbGliZWJsLmgKK0BAIC00NzIsNiArNDcyLDE3IEBAIGV4dGVybiBib29sIGVibF91bndpbmQgKEVibCAqZWJsLCBEd2FyZl9BZGRyIHBjLCBlYmxfdGlkX3JlZ2lzdGVyc190ICpzZXRmdW5jLAorIGV4dGVybiBib29sIGVibF9yZXNvbHZlX3N5bV92YWx1ZSAoRWJsICplYmwsIEdFbGZfQWRkciAqYWRkcikKKyAgICBfX25vbm51bGxfYXR0cmlidXRlX18gKDIpOworIAorKy8qIFJldHVybnMgdGhlIHJlYWwgdmFsdWUgb2YgYSBzeW1ib2wgZnVuY3Rpb24gYWRkcmVzcyBvciBvZmZzZXQKKysgICAoZS5nLiB3aGVuIHRoZSBzdF92YWx1ZSBjb250YWlucyBzb21lIGZsYWcgYml0cyB0aGF0IG5lZWQgdG8gYmUKKysgICBtYXNrZWQgb2ZmKS4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gZWJsX3Jlc29sdmVfc3ltX3ZhbHVlIHdoaWNoCisrICAgb25seSB3b3JrcyBmb3IgYWN0dWFsIHN5bWJvbCBhZGRyZXNzZXMgKGluIG5vbi1FVF9SRUwgZmlsZXMpIHRoYXQKKysgICBtaWdodCByZXNvbHZlIHRvIGFuIGFkZHJlc3MgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi4KKysgICBlYmxfc3ltX2Z1bmNfdmFsdWUgaXMgY2FsbGVkIHRvIHR1cm4gdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGEKKysgICByZWFsIGFkZHJlc3Mgb3Igb2Zmc2V0ICh0aGUgb3JpZ2luYWwgdmFsdWUgbWlnaHQgbm90IGJlIGEgcmVhbAorKyAgIGFkZHJlc3MpLiAgVGhpcyB3b3JrcyBmb3IgYm90aCBFVF9SRUwgd2hlbiB0aGUgdmFsdWUgaXMgYSBzZWN0aW9uCisrICAgb2Zmc2V0IG9yIEVUX0VYRUMgb3IgRVRfRFlOIHN5bWJvbCB2YWx1ZXMsIHdoaWNoIGFyZSBhZGRyZXNzZXMuICAqLworK2V4dGVybiBHRWxmX0FkZHIgZWJsX3N5bV9mdW5jX3ZhbHVlIChFYmwgKmVibCwgR0VsZl9BZGRyIHZhbCk7CisrCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgfQorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvYXJtX3Vud2luZF9yZXRfbWFzay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWJiMzZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorRnJvbTogTWFyayBXaWVsYWFyZCA8bWp3QHJlZGhhdC5jb20+CitEYXRlOiBTdW4sIDE1IEp1biAyMDE0IDEyOjMwOjAyICswMjAwCitTdWJqZWN0OiBsaWJlYmw6IEFkZCBlYmxfdW53aW5kX3JldF9tYXNrLgorCitBbm90aGVyIEFSTSBvZGRpdHkuIEEgcmV0dXJuIHZhbHVlIGFkZHJlc3MgaW4gYW4gdW53aW5kIHdpbGwgY29udGFpbiBhbgorZXh0cmEgYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdG8gcmV0dXJuIHRvIGEgcmVndWxhciBBUk0gb3IgVEhVTUIgZnVuY3Rpb24uCitBZGQgYSBuZXcgZWJsIGZ1bmN0aW9uIHRvIHJldHVybiBhIG1hc2sgdG8gdXNlIHRvIGdldCB0aGUgYWN0dWFsIHJldHVybgorYWRkcmVzcyBkdXJpbmcgYW4gdW53aW5kIGVibF91bndpbmRfcmV0X21hc2suCisKK1JlYmFzZSBhcm1fdW53aW5kX3JldF9tYXNrLnBhdGNoIGZyb20gMC4xNTkgdG8gMC4xNjAKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFja2VuZHMvYXJtX2luaXQuYyB8IDMgKysrCisgbGliZWJsL2VibGluaXRyZWcuYyB8IDggKysrKysrKysKKyBsaWJlYmwvbGliZWJsLmggICAgIHwgNCArKysrCisgbGliZWJsL2xpYmVibFAuaCAgICB8IDYgKysrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9hcm1faW5pdC5jIGIvYmFja2VuZHMvYXJtX2luaXQuYworaW5kZXggMjI2NjgyOS4uZjhkZjA0MiAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL2FybV9pbml0LmMKKysrKyBiL2JhY2tlbmRzL2FybV9pbml0LmMKK0BAIC04Nyw1ICs4Nyw4IEBAIGFybV9pbml0IChlbGYsIG1hY2hpbmUsIGVoLCBlaGxlbikKKyAgIC8qIEJpdCB6ZXJvIGVuY29kZXMgd2hldGhlciBhbiBmdW5jdGlvbiBhZGRyZXNzIGlzIFRIVU1CIG9yIEFSTS4gKi8KKyAgIGVoLT5mdW5jX2FkZHJfbWFzayA9IH4oR0VsZl9BZGRyKTE7CisgCisrICAvKiBCaXQgemVybyBlbmNvZGVzIHdoZXRoZXIgdG8gcmV0dXJuIHRvIGEgVEhVTUIgb3IgQVJNIGZ1bmN0aW9uLiAqLworKyAgZWgtPnVud2luZF9yZXRfbWFzayA9IH4oR0VsZl9BZGRyKTE7CisrCisgICByZXR1cm4gTU9EVkVSU0lPTjsKKyB9CitkaWZmIC0tZ2l0IGEvbGliZWJsL2VibGluaXRyZWcuYyBiL2xpYmVibC9lYmxpbml0cmVnLmMKK2luZGV4IDU3MjliM2MuLmNhNjgxYzAgMTAwNjQ0CistLS0gYS9saWJlYmwvZWJsaW5pdHJlZy5jCisrKysgYi9saWJlYmwvZWJsaW5pdHJlZy5jCitAQCAtNTYsMyArNTYsMTEgQEAgZWJsX2Z1bmNfYWRkcl9tYXNrIChFYmwgKmVibCkKKyAgIHJldHVybiAoKGVibCA9PSBOVUxMIHx8IGVibC0+ZnVuY19hZGRyX21hc2sgPT0gMCkKKyAJICA/IH4oR0VsZl9BZGRyKTAgOiBlYmwtPmZ1bmNfYWRkcl9tYXNrKTsKKyB9CisrCisrR0VsZl9BZGRyCisrZWJsX3Vud2luZF9yZXRfbWFzayAoRWJsICplYmwpCisreworKyAgcmV0dXJuICgoZWJsID09IE5VTEwgfHwgZWJsLT51bndpbmRfcmV0X21hc2sgPT0gMCkKKysJICA/IH4oR0VsZl9BZGRyKTAgOiBlYmwtPnVud2luZF9yZXRfbWFzayk7CisrfQorKworZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmwuaCBiL2xpYmVibC9saWJlYmwuaAoraW5kZXggNDBjZjYzNS4uYmU3MDAyNyAxMDA2NDQKKy0tLSBhL2xpYmVibC9saWJlYmwuaAorKysrIGIvbGliZWJsL2xpYmVibC5oCitAQCAtNDIwLDYgKzQyMCwxMCBAQCBleHRlcm4gc2l6ZV90IGVibF9mcmFtZV9ucmVncyAoRWJsICplYmwpCisgICAgdGFibGVzKSBpcyBuZWVkZWQuICAqLworIGV4dGVybiBHRWxmX0FkZHIgZWJsX2Z1bmNfYWRkcl9tYXNrIChFYmwgKmVibCk7CisgCisrLyogTWFzayB0byB1c2UgZm9yIHVud2luZCByZXR1cm4gYWRkcmVzcyBpbiBjYXNlIHRoZSBhcmNoaXRlY3R1cmUgYWRkcworKyAgIHNvbWUgZXh0cmEgbm9uLWFkZHJlc3MgYml0cyB0byBpdC4gICovCisrZXh0ZXJuIEdFbGZfQWRkciBlYmxfdW53aW5kX3JldF9tYXNrIChFYmwgKmVibCk7CisrCisgLyogQ29udmVydCAqUkVHTk8gYXMgaXMgaW4gRFdBUkYgdG8gYSBsb3dlciByYW5nZSBzdWl0YWJsZSBmb3IKKyAgICBEd2FyZl9GcmFtZS0+UkVHUyBpbmRleGluZy4gICovCisgZXh0ZXJuIGJvb2wgZWJsX2R3YXJmX3RvX3JlZ25vIChFYmwgKmVibCwgdW5zaWduZWQgKnJlZ25vKQorZGlmZiAtLWdpdCBhL2xpYmVibC9saWJlYmxQLmggYi9saWJlYmwvbGliZWJsUC5oCitpbmRleCBkYmQ2N2YzLi5lMThhY2U2IDEwMDY0NAorLS0tIGEvbGliZWJsL2xpYmVibFAuaAorKysrIGIvbGliZWJsL2xpYmVibFAuaAorQEAgLTcwLDYgKzcwLDEyIEBAIHN0cnVjdCBlYmwKKyAgICAgIG90aGVyd2lzZSBpdCBzaG91bGQgYmUgdGhlIGFjdHVhbCBtYXNrIHRvIHVzZS4gICovCisgICBHRWxmX0FkZHIgZnVuY19hZGRyX21hc2s7CisgCisrICAvKiBNYXNrIHRvIHVzZSB0byBnZXQgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gYW4gdW53aW5kIGluIGNhc2UgdGhlCisrICAgICBhcmNoaXRlY3R1cmUgYWRkcyBzb21lIGV4dHJhIG5vbi1hZGRyZXNzIGJpdHMgdG8gaXQuICBXaGVuIG5vdAorKyAgICAgaW5pdGlhbGl6ZWQgKDApIHRoZW4gZWJsX3Vud2luZF9yZXRfbWFzayB3aWxsIHJldHVybiB+MCwgb3RoZXJ3aXNlCisrICAgICBpdCBzaG91bGQgYmUgdGhlIGFjdHVhbCBtYXNrIHRvIHVzZS4gICovCisrICBHRWxmX0FkZHIgdW53aW5kX3JldF9tYXNrOworKworICAgLyogRnVuY3Rpb24gZGVzY3JpcHRvciBsb2FkIGFkZHJlc3MgYW5kIHRhYmxlIGFzIHVzZWQgYnkKKyAgICAgIGVibF9yZXNvbHZlX3N5bV92YWx1ZSBpZiBhdmFpbGFibGUgZm9yIHRoaXMgYXJjaC4gICovCisgICBHRWxmX0FkZHIgZmRfYWRkcjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2ZpeGhlYWRlcmNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTNiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvZml4aGVhZGVyY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRm9yIHNvbWUgYmluYXJpZXMgd2UgY2FuIGdldCBhIGludmFsaWQgc2VjdGlvbiBhbGlnbm1lbnQsIGZvciBleGFtcGxlIGlmIAorc2hfYWxpZ24gPSAxIGFuZCBzaF9hZGRyYWxpZ24gaXMgMC4gSW4gdGhlIGNhc2Ugb2YgYSB6ZXJvIHNpemUgc2VjdGlvbiBsaWtlIAorIi5ub3RlLkdOVS1zdGFjayIsIHRoaXMgaXMgaXJyZWxhdmVudCBhcyBmYXIgYXMgSSBjYW4gdGVsbCBhbmQgd2Ugc2hvdWxkbid0CitlcnJvciBpbiB0aGlzIGNhc2UuCisKK1JQIDIwMTQvNi8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGYzMl91cGRhdGVudWxsLmMgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCistLS0gYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCisrKysgYi9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCitAQCAtMzM5LDggKzMzOSw4IEBAIF9fZWxmdzIoTElCRUxGQklUUyx1cGRhdGVudWxsX3dybG9jaykgKEVsZiAqZWxmLCBpbnQgKmNoYW5nZV9ib3AsIHNpemVfdCBzaG51bSkKKyAJCSAgICAgd2UgdGVzdCBmb3IgdGhlIGFsaWdubWVudCBvZiB0aGUgc2VjdGlvbiBiZWluZyBsYXJnZQorIAkJICAgICBlbm91Z2ggZm9yIHRoZSBsYXJnZXN0IGFsaWdubWVudCByZXF1aXJlZCBieSBhIGRhdGEKKyAJCSAgICAgYmxvY2suICAqLworLQkJICBpZiAodW5saWtlbHkgKCEgcG93ZXJvZjIgKHNoZHItPnNoX2FkZHJhbGlnbikpCistCQkgICAgICB8fCB1bmxpa2VseSAoKHNoZHItPnNoX2FkZHJhbGlnbiA/OiAxKSA8IHNoX2FsaWduKSkKKysJCSAgaWYgKHNoZHItPnNoX3NpemUgJiYgKHVubGlrZWx5ICghIHBvd2Vyb2YyIChzaGRyLT5zaF9hZGRyYWxpZ24pKQorKwkJICAgICAgfHwgdW5saWtlbHkgKChzaGRyLT5zaF9hZGRyYWxpZ24gPzogMSkgPCBzaF9hbGlnbikpKQorIAkJICAgIHsKKyAJCSAgICAgIF9fbGliZWxmX3NldGVycm5vIChFTEZfRV9JTlZBTElEX0FMSUdOKTsKKyAJCSAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ocHBhX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTFhNzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL2hwcGFfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsODAwIEBACitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX2luaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19pbml0LmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsNzQgQEAKKysvKiBJbml0aWFsaXphdGlvbiBvZiBQQS1SSVNDIHNwZWNpZmljIGJhY2tlbmQgbGlicmFyeS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNkZWZpbmUgUkVMT0NfUFJFRklYCVJfUEFSSVNDXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrI2luY2x1ZGUgImxpYmVibF9wYXJpc2MuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBwYXJpc2NfcmVsb2MuZGVmLiAgKi8KKysjaW5jbHVkZSAiY29tbW9uLXJlbG9jLmMiCisrCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX2luaXQgKGVsZiwgbWFjaGluZSwgZWgsIGVobGVuKQorKyAgICAgRWxmICplbGYgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgR0VsZl9IYWxmIG1hY2hpbmUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworKyAgICAgRWJsICplaDsKKysgICAgIHNpemVfdCBlaGxlbjsKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICAvKiBDaGVjayB3aGV0aGVyIHRoZSBFbGZfQkggb2JqZWN0IGhhcyBhIHN1ZmZpY2VudCBzaXplLiAgKi8KKysgIGlmIChlaGxlbiA8IHNpemVvZiAoRWJsKSkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoZWxmKSB7CisrICAgIEdFbGZfRWhkciBlaGRyX21lbTsKKysgICAgR0VsZl9FaGRyICplaGRyID0gZ2VsZl9nZXRlaGRyIChlbGYsICZlaGRyX21lbSk7CisrICAgIGlmIChlaGRyICYmIChlaGRyLT5lX2ZsYWdzICYgRUZfUEFSSVNDX1dJREUpKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKyAgLyogV2UgaGFuZGxlIGl0LiAgKi8KKysgIGVoLT5uYW1lID0gIlBBLVJJU0MiOworKyAgcGFyaXNjX2luaXRfcmVsb2MgKGVoKTsKKysgIEhPT0sgKGVoLCByZWxvY19zaW1wbGVfdHlwZSk7CisrICBIT09LIChlaCwgbWFjaGluZV9mbGFnX2NoZWNrKTsKKysgIEhPT0sgKGVoLCBzeW1ib2xfdHlwZV9uYW1lKTsKKysgIEhPT0sgKGVoLCBzZWdtZW50X3R5cGVfbmFtZSk7CisrICBIT09LIChlaCwgc2VjdGlvbl90eXBlX25hbWUpOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKyAgaWYgKHBhNjQpCisrICAgIGVoLT5yZXR1cm5fdmFsdWVfbG9jYXRpb24gPSBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0OworKyAgZWxzZQorKyAgICBlaC0+cmV0dXJuX3ZhbHVlX2xvY2F0aW9uID0gcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMjsKKysKKysgIHJldHVybiBNT0RWRVJTSU9OOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlZ3MuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxNTkgQEAKKysvKiBSZWdpc3RlciBuYW1lcyBhbmQgbnVtYmVycyBmb3IgUEEtUklTQyBEV0FSRi4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKworK3NzaXplX3QKKytwYXJpc2NfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwsIGludCByZWdubywgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sCisrCQkgICAgIGNvbnN0IGNoYXIgKipwcmVmaXgsIGNvbnN0IGNoYXIgKipzZXRuYW1lLAorKwkJICAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpbnQgcGE2NCA9IDA7CisrCisrICBpZiAoZWJsLT5lbGYpIHsKKysgICAgR0VsZl9FaGRyIGVoZHJfbWVtOworKyAgICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVibC0+ZWxmLCAmZWhkcl9tZW0pOworKyAgICBpZiAoZWhkci0+ZV9mbGFncyAmIEVGX1BBUklTQ19XSURFKQorKyAgICAgIHBhNjQgPSAxOworKyAgfQorKworKyAgaW50IG5yZWdzID0gcGE2NCA/IDEyNyA6IDEyODsKKysKKysgIGlmIChuYW1lID09IE5VTEwpCisrICAgIHJldHVybiBucmVnczsKKysKKysgIGlmIChyZWdubyA8IDAgfHwgcmVnbm8gPj0gbnJlZ3MgfHwgbmFtZWxlbiA8IDYpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJSI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgIHsKKysgICAgKnNldG5hbWUgPSAiaW50ZWdlciI7CisrICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysgIGVsc2UgaWYgKHJlZ25vID09IDMyKQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJzcGVjaWFsIjsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2OworKyAgICB9CisrICAgIGVsc2UKKysgICAgeworKyAgICAJKmJpdHMgPSA1OworKyAgICB9CisrICAgICp0eXBlID0gRFdfQVRFX3Vuc2lnbmVkOworKyAgfQorKyAgZWxzZQorKyAgeworKyAgICAqc2V0bmFtZSA9ICJGUFUiOworKyAgICAqdHlwZSA9IERXX0FURV9mbG9hdDsKKysgICAgaWYgKHBhNjQpCisrICAgIHsKKysJKmJpdHMgPSA2NDsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgCSpiaXRzID0gMzI7CisrICAgIH0KKysgIH0KKysKKysgIGlmIChyZWdubyA8IDMzKSB7CisrICAgIHN3aXRjaCAocmVnbm8pCisrICAgICAgeworKyAgICAgIGNhc2UgMCAuLi4gOToKKysgICAgICAgIG5hbWVbMF0gPSAncic7CisrICAgICAgICBuYW1lWzFdID0gcmVnbm8gKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMTAgLi4uIDMxOgorKyAgICAgICAgbmFtZVswXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMV0gPSByZWdubyAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVsyXSA9IHJlZ25vICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGJyZWFrOworKyAgICAgIGNhc2UgMzI6CisrCSpwcmVmaXggPSBOVUxMOworKwluYW1lWzBdID0gJ1MnOworKwluYW1lWzFdID0gJ0EnOworKwluYW1lWzJdID0gJ1InOworKwluYW1lbGVuID0gMzsKKysJYnJlYWs7CisrICAgICAgfQorKyAgfQorKyAgZWxzZSB7CisrICAgIGlmIChwYTY0ICYmICgocmVnbm8gLSA3MikgJSAyKSkgeworKyAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBzd2l0Y2ggKHJlZ25vKQorKyAgICAgIHsKKysgICAgICBjYXNlIDcyICsgMCAuLi4gNzIgKyAxMToKKysgICAgICAgIG5hbWVbMF0gPSAnZic7CisrCW5hbWVbMV0gPSAncic7CisrICAgICAgICBuYW1lWzJdID0gKHJlZ25vICsgOCAtIDcyKSAvIDIgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gMzsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbM10gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgY2FzZSA3MiArIDEyIC4uLiA3MiArIDU1OgorKyAgICAgICAgbmFtZVswXSA9ICdmJzsKKysJbmFtZVsxXSA9ICdyJzsKKysgICAgICAgIG5hbWVbMl0gPSAocmVnbm8gKyA4IC0gNzIpIC8gMiAvIDEwICsgJzAnOworKyAgICAgICAgbmFtZVszXSA9IChyZWdubyArIDggLSA3MikgLyAyICUgMTAgKyAnMCc7CisrICAgICAgICBuYW1lbGVuID0gNDsKKysgICAgICAgIGlmICgocmVnbm8gKyA4IC0gNzIpICUgMikgeworKwkgIG5hbWVbNF0gPSAnUic7CisrCSAgbmFtZWxlbisrOworKyAgICAgICAgfQorKyAgICAgICAgYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysgICAgICAgICpzZXRuYW1lID0gTlVMTDsKKysgICAgICAgIHJldHVybiAwOworKyAgICAgIH0KKysgIH0KKysgIG5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrICByZXR1cm4gbmFtZWxlbjsKKyt9CitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvcGFyaXNjX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMTI4IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgUEEtUklTQy4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNSBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrLyoJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRElSMjFMLAkJUkVMfEVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE3UiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxN0YsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTRSLAkJUkVMfERZTikKKytSRUxPQ19UWVBFIChQQ1JFTDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMjFMLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTdGLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBDUkVMMTRSLAkJUkVMfEVYRUMpCisrUkVMT0NfVFlQRSAoRFBSRUwyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoRFBSRUwxNFdSLAkJUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTREUiwgICAgICAgICAgUkVMKQorK1JFTE9DX1RZUEUgKERQUkVMMTRSLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE0UiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYyMUwsCQlSRUwpCisrUkVMT0NfVFlQRSAoTFRPRkYxNFIsCQlSRUwpCisrUkVMT0NfVFlQRSAoRExUSU5EMTRGLAkJMCkKKytSRUxPQ19UWVBFIChTRVRCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUNSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMjFMLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTdSLAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRSLAkJMCkKKytSRUxPQ19UWVBFIChTRUdCQVNFLAkJMCkKKytSRUxPQ19UWVBFIChTRUdSRUwzMiwJCVJFTCkKKytSRUxPQ19UWVBFIChQTFRPRkYyMUwsCQkwKQorK1JFTE9DX1RZUEUgKFBMVE9GRjE0UiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMzIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjIxTCwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTRSLAkwKQorK1JFTE9DX1RZUEUgKEZQVFI2NCwJCTApCisrUkVMT0NfVFlQRSAoUExBQkVMMzIsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKFBDUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMjJDLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDIyRiwJCTApCisrUkVMT0NfVFlQRSAoUENSRUwxNFdSLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE0RFIsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQQ1JFTDE2V0YsCQkwKQorK1JFTE9DX1RZUEUgKFBDUkVMMTZERiwJCTApCisrUkVMT0NfVFlQRSAoRElSNjQsCQlSRUx8RFlOKQorK1JFTE9DX1RZUEUgKERJUjE0V1IsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTREUiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkYsCQlSRUwpCisrUkVMT0NfVFlQRSAoRElSMTZXRiwJCVJFTCkKKytSRUxPQ19UWVBFIChESVIxNkRGLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKEdQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoR1BSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChHUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNERSLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2RiwJCTApCisrUkVMT0NfVFlQRSAoTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRjE2REYsCQkwKQorK1JFTE9DX1RZUEUgKFNFQ1JFTDY0LAkJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTRXUiwJMCkKKytSRUxPQ19UWVBFIChCQVNFUkVMMTREUiwJMCkKKytSRUxPQ19UWVBFIChTRUdSRUw2NCwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTREUiwJCTApCisrUkVMT0NfVFlQRSAoUExUT0ZGMTZGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNldGLAkJMCkKKytSRUxPQ19UWVBFIChQTFRPRkYxNkRGLAkJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSNjQsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0V1IsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfRlBUUjE2RiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZXRiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9GUFRSMTZERiwJMCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChJUExULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoRVBMVCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwzMiwJCURZTikKKytSRUxPQ19UWVBFIChUUFJFTDIxTCwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNFIsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMjFMLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRSLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRGLAkwKQorK1JFTE9DX1RZUEUgKFRQUkVMNjQsCQkwKQorK1JFTE9DX1RZUEUgKFRQUkVMMTRXUiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNERSLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2RiwJCTApCisrUkVMT0NfVFlQRSAoVFBSRUwxNldGLAkJMCkKKytSRUxPQ19UWVBFIChUUFJFTDE2REYsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQNjQsCQkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTRXUiwJMCkKKytSRUxPQ19UWVBFIChMVE9GRl9UUDE0RFIsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNkYsCTApCisrUkVMT0NfVFlQRSAoTFRPRkZfVFAxNldGLAkwKQorK1JFTE9DX1RZUEUgKExUT0ZGX1RQMTZERiwJMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9EMzIsCURZTikKKytSRUxPQ19UWVBFIChUTFNfRFRQTU9ENjQsCURZTikKKysKKysjZGVmaW5lIE5PX1JFTEFUSVZFX1JFTE9DICAgICAgIDEKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9wYXJpc2NfcmV0dmFsLmMJMjAxNC0wNC0yMSAxMToxMjoxMi4yMjgxNTAyODAgKzAwMDAKK0BAIC0wLDAgKzEsMjEzIEBACisrLyogRnVuY3Rpb24gcmV0dXJuIHZhbHVlIGxvY2F0aW9uIGZvciBMaW51eC9QQS1SSVNDIEFCSS4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIHBhcmlzY18KKysjaW5jbHVkZSAibGliZWJsX0NQVS5oIgorKyNpbmNsdWRlICJsaWJlYmxfcGFyaXNjLmgiCisrCisrLyogJXIyOCwgb3IgcGFpciAlcjI4LCAlcjI5LiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZzMyW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjggfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMjkgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI4IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzI5IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICVmcjRMLCBvciBwYWlyICVmcjRMLCAlZnI0UiBvbiBwYS0zMiAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWczMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gNzMgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWczMiAyCisrI2RlZmluZSBubG9jX2ZwcmVncGFpcjMyIDQKKysKKysvKiAkZnI0ICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSA3MiB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfZnByZWcgIDEKKysKKysjaWYgMAorKy8qIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3R1cmUgYW5kIGlzIGFjdHVhbGx5IHN0b3JlZCBpbiBzdGFjayBzcGFjZQorKyAgIHBhc3NlZCBpbiBhIGhpZGRlbiBhcmd1bWVudCBieSB0aGUgY2FsbGVyLiBBZGRyZXNzIG9mIHRoZSBsb2NhdGlvbiBpcyBzdG9yZWQKKysgICBpbiAlcjI4IGJlZm9yZSBmdW5jdGlvbiBjYWxsLCBidXQgaXQgbWF5IGJlIGNoYW5nZWQgYnkgZnVuY3Rpb24uICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19hZ2dyZWdhdGVbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9icmVnMjggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrI2VuZGlmCisrCisrc3RhdGljIGludAorK3BhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3AsIGludCBwYTY0KQorK3sKKysgIER3YXJmX1dvcmQgcmVnc2l6ZSA9IHBhNjQgPyA4IDogNDsKKysKKysgIC8qIFN0YXJ0IHdpdGggdGhlIGZ1bmN0aW9uJ3MgdHlwZSwgYW5kIGdldCB0aGUgRFdfQVRfdHlwZSBhdHRyaWJ1dGUsCisrICAgICB3aGljaCBpcyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKysKKysgIER3YXJmX0F0dHJpYnV0ZSBhdHRyX21lbTsKKysgIER3YXJmX0F0dHJpYnV0ZSAqYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlIChmdW5jdHlwZWRpZSwgRFdfQVRfdHlwZSwgJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIHsKKysgICAgICAgIER3YXJmX1dvcmQgc2l6ZTsKKysJaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSwKKysJCQkJCSAmYXR0cl9tZW0pLCAmc2l6ZSkgIT0gMCkKKysJICB7CisrCSAgICBpZiAodGFnID09IERXX1RBR19wb2ludGVyX3R5cGUgfHwgdGFnID09IERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGUpCisrCSAgICAgIHNpemUgPSA0OworKwkgICAgZWxzZQorKwkgICAgICByZXR1cm4gLTE7CisrCSAgfQorKwlpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCSAgeworKwkgICAgRHdhcmZfV29yZCBlbmNvZGluZzsKKysJICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCSAgICAgJmF0dHJfbWVtKSwgJmVuY29kaW5nKSAhPSAwKQorKwkgICAgICByZXR1cm4gLTE7CisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQlpZiAocGE2NCkgeworKwkJICAqbG9jcCA9IGxvY19mcHJlZzsKKysJCSAgaWYgKHNpemUgPD0gOCkKKysJCSAgICAgIHJldHVybiBubG9jX2ZwcmVnOworKwkJfQorKwkJZWxzZSB7CisrCQkgICpsb2NwID0gbG9jX2ZwcmVnMzI7CisrCQkgIGlmIChzaXplIDw9IDQpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWczMjsKKysJCSAgZWxzZSBpZiAoc2l6ZSA8PSA4KQorKwkJICAgIHJldHVybiBubG9jX2ZwcmVncGFpcjMyOworKwkJfQorKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCWlmIChwYTY0KQorKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKwlpZiAoc2l6ZSA8PSByZWdzaXplKQorKwkgIHJldHVybiBubG9jX2ludHJlZzsKKysJaWYgKHNpemUgPD0gMiAqIHJlZ3NpemUpCisrCSAgcmV0dXJuIG5sb2NfaW50cmVncGFpcjsKKysKKysJLyogRWxzZSBmYWxsIHRocm91Z2guICAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZTogeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfYWdncmVnYXRlX3NpemUgKHR5cGVkaWUsICZzaXplKSAhPSAwKQorKwkgIHJldHVybiAtMTsKKysJaWYgKHBhNjQpCisrICAgICAgICAgICpsb2NwID0gbG9jX2ludHJlZzsKKysJZWxzZQorKwkgICpsb2NwID0gbG9jX2ludHJlZzMyOworKyAgICAgICAgaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrICAgICAgICBpZiAoc2l6ZSA8PSAyICogcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKyNpZiAwCisrCS8qIHRoZXJlIHNob3VsZCBiZSBzb21lIHdheSB0byBrbm93IHRoaXMgbG9jYXRpb24uLi4gQnV0IEkgZG8gbm90IHNlZSBpdC4gKi8KKysgICAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysjZW5kaWYKKysJLyogZmFsbCB0aHJvdWdoLiAgKi8KKysgICAgICB9CisrICAgIH0KKysKKysgIC8qIFhYWCBXZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8gcmV0dXJuIHNwZWNpZmljIGVycm9ycyBmcm9tIGVibCBjYWxscy4KKysgICAgIFRoaXMgdmFsdWUgbWVhbnMgd2UgZG8gbm90IHVuZGVyc3RhbmQgdGhlIHR5cGUsIGJ1dCBpdCBpcyB3ZWxsLWZvcm1lZAorKyAgICAgRFdBUkYgYW5kIG1pZ2h0IGJlIHZhbGlkLiAgKi8KKysgIHJldHVybiAtMjsKKyt9CisrCisraW50CisrcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMiAoRHdhcmZfRGllICpmdW5jdHlwZWRpZSwgY29uc3QgRHdhcmZfT3AgKipsb2NwKQorK3sKKysgIHJldHVybiBwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXyAoZnVuY3R5cGVkaWUsIGxvY3AsIDApOworK30KKysKKytpbnQKKytwYXJpc2NfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uXzY0IChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgcmV0dXJuIHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fIChmdW5jdHlwZWRpZSwgbG9jcCwgMSk7CisrfQorKworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL3BhcmlzY19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSwxMTIgQEAKKysvKiBQQS1SSVNDIHNwZWNpZmljIHN5bWJvbGljIG5hbWUgaGFuZGxpbmcuCisrICAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKyAgIFdyaXR0ZW4gYnkgVWxyaWNoIERyZXBwZXIgPGRyZXBwZXJAcmVkaGF0LmNvbT4sIDIwMDIuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIFJlZCBIYXQgZWxmdXRpbHM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrICAgUmVkIEhhdCBlbGZ1dGlscyBpcyBhbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrLgorKyAgIEFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgaXMgYSBwYWNrYWdlIGZvciB3aGljaAorKyAgIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsgbGljZW5zZWVzIGNyb3NzLWxpY2Vuc2UgdGhlaXIgcGF0ZW50cy4gIE5vIHBhdGVudAorKyAgIGxpY2Vuc2UgaXMgZ3JhbnRlZCwgZWl0aGVyIGV4cHJlc3NseSBvciBpbXBsaWVkbHksIGJ5IGRlc2lnbmF0aW9uIGFzIGFuCisrICAgaW5jbHVkZWQgcGFja2FnZS4gIFNob3VsZCB5b3Ugd2lzaCB0byBwYXJ0aWNpcGF0ZSBpbiB0aGUgT3BlbiBJbnZlbnRpb24KKysgICBOZXR3b3JrIGxpY2Vuc2luZyBwcm9ncmFtLCBwbGVhc2UgdmlzaXQgd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbQorKyAgIDxodHRwOi8vd3d3Lm9wZW5pbnZlbnRpb25uZXR3b3JrLmNvbT4uICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKyNkZWZpbmUgQkFDS0VORAkJcGFyaXNjXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrY29uc3QgY2hhciAqCisrcGFyaXNjX3NlZ21lbnRfdHlwZV9uYW1lIChpbnQgc2VnbWVudCwgY2hhciAqYnVmIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKysJCQlzaXplX3QgbGVuIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrICBzd2l0Y2ggKHNlZ21lbnQpCisrICAgIHsKKysgICAgY2FzZSBQVF9QQVJJU0NfQVJDSEVYVDoKKysgICAgICByZXR1cm4gIlBBUklTQ19BUkNIRVhUIjsKKysgICAgY2FzZSBQVF9QQVJJU0NfVU5XSU5EOgorKyAgICAgIHJldHVybiAiUEFSSVNDX1VOV0lORCI7CisrICAgIGRlZmF1bHQ6CisrICAgICAgYnJlYWs7CisrICAgIH0KKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc3ltYm9sIHR5cGUuICAqLworK2NvbnN0IGNoYXIgKgorK3BhcmlzY19zeW1ib2xfdHlwZV9uYW1lKGludCBzeW1ib2wsIGNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrICAgIHNpemVfdCBsZW4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysJaWYgKHN5bWJvbCA9PSBTVFRfUEFSSVNDX01JTExJQ09ERSkKKysJICByZXR1cm4gIlBBUklTQ19NSUxMSSI7CisrCXJldHVybiBOVUxMOworK30KKysKKysvKiBSZXR1cm4gc3ltYm9saWMgcmVwcmVzZW50YXRpb24gb2Ygc2VjdGlvbiB0eXBlLiAgKi8KKytjb25zdCBjaGFyICoKKytwYXJpc2Nfc2VjdGlvbl90eXBlX25hbWUgKGludCB0eXBlLAorKwkJCWNoYXIgKmJ1ZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJc2l6ZV90IGxlbiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCisreworKyAgc3dpdGNoICh0eXBlKQorKyAgICB7CisrICAgIGNhc2UgU0hUX1BBUklTQ19FWFQ6CisrICAgICAgcmV0dXJuICJQQVJJU0NfRVhUIjsKKysgICAgY2FzZSBTSFRfUEFSSVNDX1VOV0lORDoKKysgICAgICByZXR1cm4gIlBBUklTQ19VTldJTkQiOworKyAgICBjYXNlIFNIVF9QQVJJU0NfRE9DOgorKyAgICAgIHJldHVybiAiUEFSSVNDX0RPQyI7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBDaGVjayB3aGV0aGVyIG1hY2hpbmUgZmxhZ3MgYXJlIHZhbGlkLiAgKi8KKytib29sCisrcGFyaXNjX21hY2hpbmVfZmxhZ19jaGVjayAoR0VsZl9Xb3JkIGZsYWdzKQorK3sKKysgIGlmIChmbGFncyAmfiAoRUZfUEFSSVNDX1RSQVBOSUwgfCBFRl9QQVJJU0NfRVhUIHwgRUZfUEFSSVNDX0xTQiB8CisrCUVGX1BBUklTQ19XSURFIHwgRUZfUEFSSVNDX05PX0tBQlAgfAorKwlFRl9QQVJJU0NfTEFaWVNXQVAgfCBFRl9QQVJJU0NfQVJDSCkpCisrICAgIHJldHVybiAwOworKworKyAgR0VsZl9Xb3JkIGFyY2ggPSBmbGFncyAmIEVGX1BBUklTQ19BUkNIOworKworKyAgcmV0dXJuICgoYXJjaCA9PSBFRkFfUEFSSVNDXzFfMCkgfHwgKGFyY2ggPT0gRUZBX1BBUklTQ18xXzEpIHx8CisrICAgICAgKGFyY2ggPT0gRUZBX1BBUklTQ18yXzApKTsKKyt9CisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrcGFyaXNjX3JlbG9jX3NpbXBsZV90eXBlIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCB0eXBlKQorK3sKKysgIHN3aXRjaCAodHlwZSkKKysgICAgeworKyAgICBjYXNlIFJfUEFSSVNDX0RJUjY0OgorKyAgICBjYXNlIFJfUEFSSVNDX1NFQ1JFTDY0OgorKyAgICAgIHJldHVybiBFTEZfVF9YV09SRDsKKysgICAgY2FzZSBSX1BBUklTQ19ESVIzMjoKKysgICAgY2FzZSBSX1BBUklTQ19TRUNSRUwzMjoKKysgICAgICByZXR1cm4gRUxGX1RfV09SRDsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2xpYmVibF9wYXJpc2MuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTAsMCArMSw5IEBACisrI2lmbmRlZiBfTElCRUJMX0hQUEFfSAorKyNkZWZpbmUgX0xJQkVCTF9IUFBBX0ggMQorKworKyNpbmNsdWRlIDxsaWJkdy5oPgorKworK2V4dGVybiBpbnQgcGFyaXNjX3JldHVybl92YWx1ZV9sb2NhdGlvbl8zMihEd2FyZl9EaWUgKiwgY29uc3QgRHdhcmZfT3AgKipsb2NwKTsKKytleHRlcm4gaW50IHBhcmlzY19yZXR1cm5fdmFsdWVfbG9jYXRpb25fNjQoRHdhcmZfRGllICosIGNvbnN0IER3YXJmX09wICoqbG9jcCk7CisrCisrI2VuZGlmCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTI6MTIuMjUyMTQ5NzM3ICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMzoxMS45MTA4MDExMDUgKzAwMDAKK0BAIC0zMywxMSArMzMsMTIgQEAKKyAKKyAKKyBtb2R1bGVzID0gaTM4NiBzaCB4ODZfNjQgaWE2NCBhbHBoYSBhcm0gYWFyY2g2NCBzcGFyYyBwcGMgcHBjNjQgczM5MCBcCistCSAgdGlsZWd4CisrCSAgdGlsZWd4IHBhcmlzYworIGxpYmVibF9waWMgPSBsaWJlYmxfaTM4Nl9waWMuYSBsaWJlYmxfc2hfcGljLmEgbGliZWJsX3g4Nl82NF9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2lhNjRfcGljLmEgbGliZWJsX2FscGhhX3BpYy5hIGxpYmVibF9hcm1fcGljLmEgICAgXAorIAkgICAgIGxpYmVibF9hYXJjaDY0X3BpYy5hIGxpYmVibF9zcGFyY19waWMuYSBsaWJlYmxfcHBjX3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcHBjNjRfcGljLmEgbGliZWJsX3MzOTBfcGljLmEgbGliZWJsX3RpbGVneF9waWMuYQorKwkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKysJICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hCisgbm9pbnN0X0xJQlJBUklFUyA9ICQobGliZWJsX3BpYykKKyBub2luc3RfREFUQSA9ICQobGliZWJsX3BpYzpfcGljLmE9LnNvKQorIAorQEAgLTExNiw2ICsxMTcsOSBAQAorIGxpYmVibF90aWxlZ3hfcGljX2FfU09VUkNFUyA9ICQodGlsZWd4X1NSQ1MpCisgYW1fbGliZWJsX3RpbGVneF9waWNfYV9PQkpFQ1RTID0gJCh0aWxlZ3hfU1JDUzouYz0ub3MpCisgCisrcGFyaXNjX1NSQ1MgPSBwYXJpc2NfaW5pdC5jIHBhcmlzY19zeW1ib2wuYyBwYXJpc2NfcmVncy5jIHBhcmlzY19yZXR2YWwuYworK2xpYmVibF9wYXJpc2NfcGljX2FfU09VUkNFUyA9ICQocGFyaXNjX1NSQ1MpCisrYW1fbGliZWJsX3BhcmlzY19waWNfYV9PQkpFQ1RTID0gJChwYXJpc2NfU1JDUzouYz0ub3MpCisgCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjI1MjE0OTczNyArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjEyOjEyLjIyODE1MDI4MCArMDAwMAorQEAgLTE4MTQsMTYgKzE4MTQsMjQgQEAKKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTdGCTEyCS8qIDE3IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BDUkVMMTRSCTE0CS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMjFMCTE4CS8qIExlZnQgMjEgYml0cyBvZiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfRFBSRUwxNFdSCTE5CisrI2RlZmluZSBSX1BBUklTQ19EUFJFTDE0RFIJMjAKKyAjZGVmaW5lIFJfUEFSSVNDX0RQUkVMMTRSCTIyCS8qIFJpZ2h0IDE0IGJpdHMgb2YgcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0dQUkVMMjFMCTI2CS8qIEdQLXJlbGF0aXZlLCBsZWZ0IDIxIGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfR1BSRUwxNFIJMzAJLyogR1AtcmVsYXRpdmUsIHJpZ2h0IDE0IGJpdHMuICAqLworICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYyMUwJMzQJLyogTFQtcmVsYXRpdmUsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE0UgkzOAkvKiBMVC1yZWxhdGl2ZSwgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19ETFRJTkQxNEYJMzkKKysjZGVmaW5lIFJfUEFSSVNDX1NFVEJBU0UJNDAKKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDMyCTQxCS8qIDMyIGJpdHMgc2VjdGlvbiByZWwuIGFkZHJlc3MuICAqLworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDIxTAk0MgorKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE3Ugk0MworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0Ugk0NgorICNkZWZpbmUgUl9QQVJJU0NfU0VHQkFTRQk0OAkvKiBObyByZWxvY2F0aW9uLCBzZXQgc2VnbWVudCBiYXNlLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFR1JFTDMyCTQ5CS8qIDMyIGJpdHMgc2VnbWVudCByZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUExUT0ZGMjFMCTUwCS8qIFBMVCByZWwuIGFkZHJlc3MsIGxlZnQgMjEgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFIJNTQJLyogUExUIHJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNEYJNTUKKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIzMgk1NwkvKiAzMiBiaXRzIExULXJlbC4gZnVuY3Rpb24gcG9pbnRlci4gKi8KKyAjZGVmaW5lIFJfUEFSSVNDX0xUT0ZGX0ZQVFIyMUwJNTgJLyogTFQtcmVsLiBmY3QgcHRyLCBsZWZ0IDIxIGJpdHMuICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRl9GUFRSMTRSCTYyCS8qIExULXJlbC4gZmN0IHB0ciwgcmlnaHQgMTQgYml0cy4gKi8KK0BAIC0xODMyLDYgKzE4NDAsNyBAQAorICNkZWZpbmUgUl9QQVJJU0NfUExBQkVMMjFMCTY2CS8qIExlZnQgMjEgYml0cyBvZiBmZGVzYyBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMQUJFTDE0Ugk3MAkvKiBSaWdodCAxNCBiaXRzIG9mIGZkZXNjIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUw2NAk3MgkvKiA2NCBiaXRzIFBDLXJlbC4gYWRkcmVzcy4gICovCisrI2RlZmluZSBSX1BBUklTQ19QQ1JFTDIyQwk3MworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwyMkYJNzQJLyogMjIgYml0cyBQQy1yZWwuIGFkZHJlc3MuICAqLworICNkZWZpbmUgUl9QQVJJU0NfUENSRUwxNFdSCTc1CS8qIFBDLXJlbC4gYWRkcmVzcywgcmlnaHQgMTQgYml0cy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QQ1JFTDE0RFIJNzYJLyogUEMgcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KK0BAIC0xODU3LDYgKzE4NjYsOCBAQAorICNkZWZpbmUgUl9QQVJJU0NfTFRPRkYxNldGCTEwMgkvKiAxNiBiaXRzIExULXJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19MVE9GRjE2REYJMTAzCS8qIDE2IGJpdHMgTFQtcmVsLiBhZGRyZXNzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1NFQ1JFTDY0CTEwNAkvKiA2NCBiaXRzIHNlY3Rpb24gcmVsLiBhZGRyZXNzLiAgKi8KKysjZGVmaW5lIFJfUEFSSVNDX0JBU0VSRUwxNFdSCTEwNworKyNkZWZpbmUgUl9QQVJJU0NfQkFTRVJFTDE0RFIJMTA4CisgI2RlZmluZSBSX1BBUklTQ19TRUdSRUw2NAkxMTIJLyogNjQgYml0cyBzZWdtZW50IHJlbC4gYWRkcmVzcy4gICovCisgI2RlZmluZSBSX1BBUklTQ19QTFRPRkYxNFdSCTExNQkvKiBQTFQtcmVsLiBhZGRyZXNzLCByaWdodCAxNCBiaXRzLiAgKi8KKyAjZGVmaW5lIFJfUEFSSVNDX1BMVE9GRjE0RFIJMTE2CS8qIFBMVC1yZWwuIGFkZHJlc3MsIHJpZ2h0IDE0IGJpdHMuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL202OGtfYmFja2VuZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjU2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbTY4a19iYWNrZW5kLmRpZmYKQEAgLTAsMCArMSw0OTMgQEAKK0Zyb206IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KK0Zyb206IFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLmRlPgorU3ViamVjdDogbTY4ayBzdXBwb3J0CisKK1dyaXR0ZW4gYnkgS3VydCBSb2Vja3gsIGV4Y2VwdCBmb3IgdGhlIHJldHZhbCBzdXBwb3J0IHdoaWNoIHdhcyB3cml0dGVuCitieSBUaG9yc3RlbiBHbGFzZXIKKworCitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX2luaXQuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw1MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG02OGsgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjZGVmaW5lIEJBQ0tFTkQJCW02OGtfCisrI2RlZmluZSBSRUxPQ19QUkVGSVgJUl82OEtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtNjhrX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworKworK2NvbnN0IGNoYXIgKgorK202OGtfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBlaC0+bmFtZSA9ICJtNjhrIjsKKysgIG02OGtfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19yZWdzLmMJMjAxNC0wNC0yMSAxMToxNDoyMy44MTMxNzU3MDQgKzAwMDAKK0BAIC0wLDAgKzEsMTA2IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIG02OGsgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA3IEt1cnQgUm9lY2t4IDxrdXJ0QHJvZWNreC5iZT4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggdGhpcyBzb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICAqLworKworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrIyBpbmNsdWRlIDxjb25maWcuaD4KKysjZW5kaWYKKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPGR3YXJmLmg+CisrCisrI2RlZmluZSBCQUNLRU5EIG02OGtfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKytzc2l6ZV90CisrbTY4a19yZWdpc3Rlcl9pbmZvIChFYmwgKmVibCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkgICBpbnQgcmVnbm8sIGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuLAorKwkJICAgY29uc3QgY2hhciAqKnByZWZpeCwgY29uc3QgY2hhciAqKnNldG5hbWUsCisrCQkgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrCWlmIChuYW1lID09IE5VTEwpCisrCQlyZXR1cm4gMjU7CisrCisrCWlmIChyZWdubyA8IDAgfHwgcmVnbm8gPiAyNCB8fCBuYW1lbGVuIDwgNSkKKysJCXJldHVybiAtMTsKKysKKysJKnByZWZpeCA9ICIlIjsKKysJKmJpdHMgPSAzMjsKKysJKnR5cGUgPSAocmVnbm8gPCA4ID8gRFdfQVRFX3NpZ25lZAorKwkJOiByZWdubyA8IDE2ID8gRFdfQVRFX2FkZHJlc3MgOiBEV19BVEVfZmxvYXQpOworKworKwlpZiAocmVnbm8gPCA4KQorKwl7CisrCQkqc2V0bmFtZSA9ICJpbnRlZ2VyIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDE2KQorKwl7CisrCQkqc2V0bmFtZSA9ICJhZGRyZXNzIjsKKysJfQorKwllbHNlIGlmIChyZWdubyA8IDI0KQorKwl7CisrCQkqc2V0bmFtZSA9ICJGUFUiOworKwl9CisrCWVsc2UKKysJeworKwkJKnNldG5hbWUgPSAiYWRkcmVzcyI7CisrCQkqdHlwZSA9IERXX0FURV9hZGRyZXNzOworKwl9CisrCisrCXN3aXRjaCAocmVnbm8pCisrCXsKKysJY2FzZSAwIC4uLiA3OgorKwkJbmFtZVswXSA9ICdkJzsKKysJCW5hbWVbMV0gPSByZWdubyArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgOCAuLi4gMTM6CisrCQluYW1lWzBdID0gJ2EnOworKwkJbmFtZVsxXSA9IHJlZ25vIC0gOCArICcwJzsKKysJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTQ6CisrCQluYW1lWzBdID0gJ2YnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTU6CisrCQluYW1lWzBdID0gJ3MnOworKwkJbmFtZVsxXSA9ICdwJzsKKysgICAJCW5hbWVsZW4gPSAyOworKwkJYnJlYWs7CisrCisrCWNhc2UgMTYgLi4uIDIzOgorKwkJbmFtZVswXSA9ICdmJzsKKysJCW5hbWVbMV0gPSAncCc7CisrCQluYW1lWzJdID0gcmVnbm8gLSAxNiArICcwJzsKKysgICAJCW5hbWVsZW4gPSAzOworKwkJYnJlYWs7CisrCisrCWNhc2UgMjQ6CisrCQluYW1lWzBdID0gJ3AnOworKwkJbmFtZVsxXSA9ICdjJzsKKysJCW5hbWVsZW4gPSAyOworKwl9CisrCisrCW5hbWVbbmFtZWxlbisrXSA9ICdcMCc7CisrCXJldHVybiBuYW1lbGVuOworK30KKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JlbG9jLmRlZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmVsb2MuZGVmCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogTGlzdCB0aGUgcmVsb2NhdGlvbiB0eXBlcyBmb3IgbTY4ay4gIC0qLSBDIC0qLQorKyAgIENvcHlyaWdodCAoQykgMjAwNyBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisrCisrICAgVGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysgICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKysgICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICB3aXRoIHRoaXMgc29mdHdhcmU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24gTUEgMDIxMTAtMTMwMSBVU0EuCisrKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLAkJMCkKKytSRUxPQ19UWVBFICgzMiwJCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoMTYsCQkJUkVMKQorK1JFTE9DX1RZUEUgKDgsCQkJUkVMKQorK1JFTE9DX1RZUEUgKFBDMzIsCQlSRUx8RVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUEMxNiwJCVJFTCkKKytSRUxPQ19UWVBFIChQQzgsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMzIsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTYsCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UOCwJCVJFTCkKKytSRUxPQ19UWVBFIChHT1QzMk8sCQlSRUwpCisrUkVMT0NfVFlQRSAoR09UMTZPLAkJUkVMKQorK1JFTE9DX1RZUEUgKEdPVDhPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDMyLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2LAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDgsCQlSRUwpCisrUkVMT0NfVFlQRSAoUExUMzJPLAkJUkVMKQorK1JFTE9DX1RZUEUgKFBMVDE2TywJCVJFTCkKKytSRUxPQ19UWVBFIChQTFQ4TywJCVJFTCkKKytSRUxPQ19UWVBFIChDT1BZLAkJRVhFQykKKytSRUxPQ19UWVBFIChHTE9CX0RBVCwJCUVYRUN8RFlOKQorK1JFTE9DX1RZUEUgKEpNUF9TTE9ULAkJRVhFQ3xEWU4pCisrUkVMT0NfVFlQRSAoUkVMQVRJVkUsCQlFWEVDfERZTikKKytSRUxPQ19UWVBFIChHTlVfVlRJTkhFUklULAlSRUwpCisrUkVMT0NfVFlQRSAoR05VX1ZURU5UUlksCVJFTCkKKysKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlbGYvZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE1OC5vcmlnL2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2xpYmVsZi9lbGYuaAkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTExNTcsNiArMTE1Nyw5IEBACisgI2RlZmluZSBSXzY4S19HTE9CX0RBVAkyMAkJLyogQ3JlYXRlIEdPVCBlbnRyeSAqLworICNkZWZpbmUgUl82OEtfSk1QX1NMT1QJMjEJCS8qIENyZWF0ZSBQTFQgZW50cnkgKi8KKyAjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCQkvKiBBZGp1c3QgYnkgcHJvZ3JhbSBiYXNlICovCisrLyogVGhlIG5leHQgMiBhcmUgR05VIGV4dGVuc2lvbnMgdG8gZW5hYmxlIEMrKyB2dGFibGUgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgKi8KKysjZGVmaW5lIFJfNjhLX0dOVV9WVElOSEVSSVQgMjMKKysjZGVmaW5lIFJfNjhLX0dOVV9WVEVOVFJZICAgMjQKKyAjZGVmaW5lIFJfNjhLX1RMU19HRDMyICAgICAgMjUgICAgICAgICAgLyogMzIgYml0IEdPVCBvZmZzZXQgZm9yIEdEICovCisgI2RlZmluZSBSXzY4S19UTFNfR0QxNiAgICAgIDI2ICAgICAgICAgIC8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworICNkZWZpbmUgUl82OEtfVExTX0dEOCAgICAgICAyNyAgICAgICAgICAvKiA4IGJpdCBHT1Qgb2Zmc2V0IGZvciBHRCAqLworSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL01ha2VmaWxlLmFtCTIwMTQtMDQtMjEgMTE6MTQ6NDguMzQ0NjIxMTY3ICswMDAwCitAQCAtMzMsMTIgKzMzLDEyIEBACisgCisgCisgbW9kdWxlcyA9IGkzODYgc2ggeDg2XzY0IGlhNjQgYWxwaGEgYXJtIGFhcmNoNjQgc3BhcmMgcHBjIHBwYzY0IHMzOTAgXAorLQkgIHRpbGVneCBwYXJpc2MgbWlwcworKwkgIHRpbGVneCBwYXJpc2MgbWlwcyBtNjhrCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorIAkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hIGxpYmVibF9taXBzX3BpYy5hCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYSBsaWJlYmxfbTY4a19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMjUsNiArMTI1LDEwIEBACisgbGliZWJsX21pcHNfcGljX2FfU09VUkNFUyA9ICQobWlwc19TUkNTKQorIGFtX2xpYmVibF9taXBzX3BpY19hX09CSkVDVFMgPSAkKG1pcHNfU1JDUzouYz0ub3MpCisgCisrbTY4a19TUkNTID0gbTY4a19pbml0LmMgbTY4a19zeW1ib2wuYyBtNjhrX3JlZ3MuYyBtNjhrX3JldHZhbC5jCisrbGliZWJsX202OGtfcGljX2FfU09VUkNFUyA9ICQobTY4a19TUkNTKQorK2FtX2xpYmVibF9tNjhrX3BpY19hX09CSkVDVFMgPSAkKG02OGtfU1JDUzouYz0ub3MpCisrCisgbGliZWJsXyUuc28gbGliZWJsXyUubWFwOiBsaWJlYmxfJV9waWMuYSAkKGxpYmVsZikgJChsaWJkdykKKyAJQHJtIC1mICQoQDouc289Lm1hcCkKKyAJZWNobyAnRUxGVVRJTFNfJChQQUNLQUdFX1ZFUlNJT04pIHsgZ2xvYmFsOiAkKl9pbml0OyBsb2NhbDogKjsgfTsnIFwKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbTY4a19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjE0OjIzLjgxMzE3NTcwNCArMDAwMAorQEAgLTAsMCArMSw0MyBAQAorKy8qIG02OGsgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDcgS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorKworKyAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFRoaXMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCB0aGlzIHNvZnR3YXJlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKyovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbTY4a19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSXzY4S18zMjoKKysgICAgICByZXR1cm4gRUxGX1RfU1dPUkQ7CisrICAgIGNhc2UgUl82OEtfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl82OEtfODoKKysgICAgICByZXR1cm4gRUxGX1RfQllURTsKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gRUxGX1RfTlVNOworKyAgICB9CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL202OGtfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9tNjhrX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTQ6MjMuODEzMTc1NzA0ICswMDAwCitAQCAtMCwwICsxLDE3MiBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbTY4ayBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgUmVkIEhhdCwgSW5jLgorKyAgIENvcHlyaWdodCAoYykgMjAxMSBUaG9yc3RlbiBHbGFzZXIsIERlYmlhbi4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtNjhrXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrCisrLyogJWQwLCBvciBwYWlyICVkMCwgJWQxLCBvciAlYTAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2ludHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzAgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMSB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfcHRycmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnOCB9LAorKyAgfTsKKysjZGVmaW5lIG5sb2NfaW50cmVnCTEKKysjZGVmaW5lIG5sb2NfaW50cmVncGFpcgk0CisrI2RlZmluZSBubG9jX3B0cnJlZwkxCisrCisrLyogJWYwICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ1tdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzE2IH0KKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnCTEKKysKKysvKiBTdHJ1Y3R1cmVzIGFyZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIC0gc21hbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQKKysgICBpbiAlZDAgLyAlZDEgKC1mcmVnLXN0cnVjdC1yZXR1cm4gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZhdWx0KSwgbGFyZ2UKKysgICBzdHJ1Y3R1cmVzIHVzZSAlYTEgKGluIGNvbnN0cmFzdCB0byB0aGUgU1lTViBwc0FCSSB3aGljaCBzYXlzICVhMCkgYXMKKysgICByZWVudHJhbnQgc3RvcmFnZSBzcGFjZSBpbmRpY2F0b3IuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfYWdncmVnYXRlW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfYnJlZzksIC5udW1iZXIgPSAwIH0KKysgIH07CisrI2RlZmluZSBubG9jX2FnZ3JlZ2F0ZSAxCisrCisraW50CisrbTY4a19yZXR1cm5fdmFsdWVfbG9jYXRpb24gKER3YXJmX0RpZSAqZnVuY3R5cGVkaWUsIGNvbnN0IER3YXJmX09wICoqbG9jcCkKKyt7CisrICBEd2FyZl9Xb3JkIHNpemU7CisrCisrICAvKiBTdGFydCB3aXRoIHRoZSBmdW5jdGlvbidzIHR5cGUsIGFuZCBnZXQgdGhlIERXX0FUX3R5cGUgYXR0cmlidXRlLAorKyAgICAgd2hpY2ggaXMgdGhlIHR5cGUgb2YgdGhlIHJldHVybiB2YWx1ZS4gICovCisrCisrICBEd2FyZl9BdHRyaWJ1dGUgYXR0cl9tZW07CisrICBEd2FyZl9BdHRyaWJ1dGUgKmF0dHIgPSBkd2FyZl9hdHRyX2ludGVncmF0ZSAoZnVuY3R5cGVkaWUsIERXX0FUX3R5cGUsCisrCQkJCQkJJmF0dHJfbWVtKTsKKysgIGlmIChhdHRyID09IE5VTEwpCisrICAgIC8qIFRoZSBmdW5jdGlvbiBoYXMgbm8gcmV0dXJuIHZhbHVlLCBsaWtlIGEgYHZvaWQnIGZ1bmN0aW9uIGluIEMuICAqLworKyAgICByZXR1cm4gMDsKKysKKysgIER3YXJmX0RpZSBkaWVfbWVtOworKyAgRHdhcmZfRGllICp0eXBlZGllID0gZHdhcmZfZm9ybXJlZl9kaWUgKGF0dHIsICZkaWVfbWVtKTsKKysgIGludCB0YWcgPSBkd2FyZl90YWcgKHR5cGVkaWUpOworKworKyAgLyogRm9sbG93IHR5cGVkZWZzIGFuZCBxdWFsaWZpZXJzIHRvIGdldCB0byB0aGUgYWN0dWFsIHR5cGUuICAqLworKyAgd2hpbGUgKHRhZyA9PSBEV19UQUdfdHlwZWRlZgorKwkgfHwgdGFnID09IERXX1RBR19jb25zdF90eXBlIHx8IHRhZyA9PSBEV19UQUdfdm9sYXRpbGVfdHlwZQorKwkgfHwgdGFnID09IERXX1RBR19yZXN0cmljdF90eXBlKQorKyAgICB7CisrICAgICAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgICAgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgICAgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrICAgIH0KKysKKysgIHN3aXRjaCAodGFnKQorKyAgICB7CisrICAgIGNhc2UgLTE6CisrICAgICAgcmV0dXJuIC0xOworKworKyAgICBjYXNlIERXX1RBR19zdWJyYW5nZV90eXBlOgorKyAgICAgIGlmICghIGR3YXJmX2hhc2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUpKQorKwl7CisrCSAgYXR0ciA9IGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKwkgIHR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKwkgIHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCX0KKysgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworKworKyAgICBjYXNlIERXX1RBR19iYXNlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0aW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3BvaW50ZXJfdHlwZToKKysgICAgY2FzZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOgorKyAgICAgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9ieXRlX3NpemUsCisrCQkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwl7CisrCSAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwkgICAgc2l6ZSA9IDQ7CisrCSAgZWxzZQorKwkgICAgcmV0dXJuIC0xOworKwl9CisrICAgICAgaWYgKHRhZyA9PSBEV19UQUdfcG9pbnRlcl90eXBlIHx8IHRhZyA9PSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlKQorKwl7CisrCSAgKmxvY3AgPSBsb2NfcHRycmVnOworKyAgICAgICAgICByZXR1cm4gbmxvY19wdHJyZWc7CisrCX0KKysgICAgICBpZiAodGFnID09IERXX1RBR19iYXNlX3R5cGUpCisrCXsKKysJICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgIGlmIChkd2FyZl9mb3JtdWRhdGEgKGR3YXJmX2F0dHJfaW50ZWdyYXRlICh0eXBlZGllLCBEV19BVF9lbmNvZGluZywKKysJCQkJCQkgICAgICZhdHRyX21lbSksCisrCQkJICAgICAgICZlbmNvZGluZykgIT0gMCkKKysJICAgIHJldHVybiAtMTsKKysJICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgeworKwkgICAgICAvKiBYWFggcmVhbGx5IDEwPyAqLworKyAgICAgICAgICAgICAgaWYgKHNpemUgPiAxMCkKKysgICAgICAgICAgICAgICAgcmV0dXJuIC0yOworKyAgICAgICAgICAgICAgKmxvY3AgPSBsb2NfZnByZWc7CisrICAgICAgICAgICAgICByZXR1cm4gbmxvY19mcHJlZzsKKysJICAgIH0KKysJfQorKyAgICAgIGlmIChzaXplIDw9IDgpCisrCXsKKysJaW50cmVnOgorKwkgIC8qIFhYWCBjaGVjayBlbmRpYW5uZXNzIG9mIGR3b3JkIHBhaXIsIGludDY0IHZzIGFnZ3JlZ2F0ZSAqLworKwkgICpsb2NwID0gbG9jX2ludHJlZzsKKysJICByZXR1cm4gc2l6ZSA8PSA0ID8gbmxvY19pbnRyZWcgOiBubG9jX2ludHJlZ3BhaXI7CisrCX0KKysKKysgICAgYWdncmVnYXRlOgorKyAgICAgICpsb2NwID0gbG9jX2FnZ3JlZ2F0ZTsKKysgICAgICByZXR1cm4gbmxvY19hZ2dyZWdhdGU7CisrCisrICAgIGNhc2UgRFdfVEFHX3N0cnVjdHVyZV90eXBlOgorKyAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOgorKyAgICBjYXNlIERXX1RBR191bmlvbl90eXBlOgorKyAgICBjYXNlIERXX1RBR19hcnJheV90eXBlOgorKyAgICAgIGlmIChkd2FyZl9hZ2dyZWdhdGVfc2l6ZSAodHlwZWRpZSwgJnNpemUpID09IDAKKysJICAmJiBzaXplID4gMCAmJiBzaXplIDw9IDgpCisrCS8qIG5vdCBhY2N1cmF0ZSBmb3IgYSBzdHJ1Y3Qgd2hvc2Ugb25seSBtZW1iZXIgaXMgYSBmbG9hdCAqLworKwlnb3RvIGludHJlZzsKKysgICAgICBnb3RvIGFnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9taXBzX2JhY2tlbmQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzNhM2YyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfYmFja2VuZC5kaWZmCkBAIC0wLDAgKzEsNzEyIEBACitJbmRleDogZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19pbml0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX2luaXQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw2MCBAQAorKy8qIEluaXRpYWxpemF0aW9uIG9mIG1pcHMgc3BlY2lmaWMgYmFja2VuZCBsaWJyYXJ5LgorKyAgIENvcHlyaWdodCAoQykgMjAwNiBSZWQgSGF0LCBJbmMuCisrICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgUmVkIEhhdCBlbGZ1dGlscy4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNkZWZpbmUgQkFDS0VORAkJbWlwc18KKysjZGVmaW5lIFJFTE9DX1BSRUZJWAlSX01JUFNfCisrI2luY2x1ZGUgImxpYmVibF9DUFUuaCIKKysKKysvKiBUaGlzIGRlZmluZXMgdGhlIGNvbW1vbiByZWxvYyBob29rcyBiYXNlZCBvbiBtaXBzX3JlbG9jLmRlZi4gICovCisrI2luY2x1ZGUgImNvbW1vbi1yZWxvYy5jIgorKworK2NvbnN0IGNoYXIgKgorK21pcHNfaW5pdCAoZWxmLCBtYWNoaW5lLCBlaCwgZWhsZW4pCisrICAgICBFbGYgKmVsZiBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBHRWxmX0hhbGYgbWFjaGluZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSk7CisrICAgICBFYmwgKmVoOworKyAgICAgc2l6ZV90IGVobGVuOworK3sKKysgIC8qIENoZWNrIHdoZXRoZXIgdGhlIEVsZl9CSCBvYmplY3QgaGFzIGEgc3VmZmljZW50IHNpemUuICAqLworKyAgaWYgKGVobGVuIDwgc2l6ZW9mIChFYmwpKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFdlIGhhbmRsZSBpdC4gICovCisrICBpZiAobWFjaGluZSA9PSBFTV9NSVBTKQorKyAgICBlaC0+bmFtZSA9ICJNSVBTIFIzMDAwIGJpZy1lbmRpYW4iOworKyAgZWxzZSBpZiAobWFjaGluZSA9PSBFTV9NSVBTX1JTM19MRSkKKysgICAgZWgtPm5hbWUgPSAiTUlQUyBSMzAwMCBsaXR0bGUtZW5kaWFuIjsKKysKKysgIG1pcHNfaW5pdF9yZWxvYyAoZWgpOworKyAgSE9PSyAoZWgsIHJlbG9jX3NpbXBsZV90eXBlKTsKKysgIEhPT0sgKGVoLCByZXR1cm5fdmFsdWVfbG9jYXRpb24pOworKyAgSE9PSyAoZWgsIHJlZ2lzdGVyX2luZm8pOworKworKyAgcmV0dXJuIE1PRFZFUlNJT047CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVncy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWdzLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsMTA0IEBACisrLyogUmVnaXN0ZXIgbmFtZXMgYW5kIG51bWJlcnMgZm9yIE1JUFMgRFdBUkYuCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxkd2FyZi5oPgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrc3NpemVfdAorK21pcHNfcmVnaXN0ZXJfaW5mbyAoRWJsICplYmwgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCisrCQkgICAgaW50IHJlZ25vLCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwKKysJCSAgICBjb25zdCBjaGFyICoqcHJlZml4LCBjb25zdCBjaGFyICoqc2V0bmFtZSwKKysJCSAgICBpbnQgKmJpdHMsIGludCAqdHlwZSkKKyt7CisrICBpZiAobmFtZSA9PSBOVUxMKQorKyAgICByZXR1cm4gNjY7CisrCisrICBpZiAocmVnbm8gPCAwIHx8IHJlZ25vID4gNjUgfHwgbmFtZWxlbiA8IDQpCisrICAgIHJldHVybiAtMTsKKysKKysgICpwcmVmaXggPSAiJCI7CisrCisrICBpZiAocmVnbm8gPCAzMikKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gImludGVnZXIiOworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrICAgICAgICB7CisrICAgICAgICAgIG5hbWVbMF0gPSByZWdubyArICcwJzsKKysgICAgICAgICAgbmFtZWxlbiA9IDE7CisrICAgICAgICB9CisrICAgICAgZWxzZQorKyAgICAgICAgeworKyAgICAgICAgICBuYW1lWzBdID0gKHJlZ25vIC8gMTApICsgJzAnOworKyAgICAgICAgICBuYW1lWzFdID0gKHJlZ25vICUgMTApICsgJzAnOworKyAgICAgICAgICBuYW1lbGVuID0gMjsKKysgICAgICAgIH0KKysgICAgfQorKyAgZWxzZSBpZiAocmVnbm8gPCA2NCkKKysgICAgeworKyAgICAgICpzZXRuYW1lID0gIkZQVSI7CisrICAgICAgKnR5cGUgPSBEV19BVEVfZmxvYXQ7CisrICAgICAgKmJpdHMgPSAzMjsKKysgICAgICBuYW1lWzBdID0gJ2YnOworKyAgICAgIGlmIChyZWdubyA8IDMyICsgMTApCisrCXsKKysJICBuYW1lWzFdID0gKHJlZ25vIC0gMzIpICsgJzAnOworKwkgIG5hbWVsZW4gPSAyOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgbmFtZVsxXSA9IChyZWdubyAtIDMyKSAvIDEwICsgJzAnOworKwkgIG5hbWVbMl0gPSAocmVnbm8gLSAzMikgJSAxMCArICcwJzsKKysJICBuYW1lbGVuID0gMzsKKysJfQorKyAgICB9CisrICBlbHNlIGlmIChyZWdubyA9PSA2NCkKKysgICAgeworKyAgICAgICp0eXBlID0gRFdfQVRFX3NpZ25lZDsKKysgICAgICAqYml0cyA9IDMyOworKyAgICAgIG5hbWVbMF0gPSAnaCc7CisrICAgICAgbmFtZVsxXSA9ICdpJzsKKysgICAgICBuYW1lbGVuID0gMjsKKysgICAgfQorKyAgZWxzZQorKyAgICB7CisrICAgICAgKnR5cGUgPSBEV19BVEVfc2lnbmVkOworKyAgICAgICpiaXRzID0gMzI7CisrICAgICAgbmFtZVswXSA9ICdsJzsKKysgICAgICBuYW1lWzFdID0gJ28nOworKyAgICAgIG5hbWVsZW4gPSAyOworKyAgICB9CisrCisrICBuYW1lW25hbWVsZW4rK10gPSAnXDAnOworKyAgcmV0dXJuIG5hbWVsZW47CisrfQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmVsb2MuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19yZWxvYy5kZWYJMjAxNC0wNC0yMSAxMToxMzozNi45MTAyMzU5NjUgKzAwMDAKK0BAIC0wLDAgKzEsNzkgQEAKKysvKiBMaXN0IHRoZSByZWxvY2F0aW9uIHR5cGVzIGZvciBtaXBzLiAgLSotIEMgLSotCisrICAgQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysvKiAJICAgIE5BTUUsCQlSRUx8RVhFQ3xEWU4JKi8KKysKKytSRUxPQ19UWVBFIChOT05FLCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMTYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKDMyLCAgICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwzMiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoMjYsICAgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJMTYsICAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChMTzE2LCAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR1BSRUwxNiwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKExJVEVSQUwsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1QxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoUEMxNiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKENBTEwxNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHUFJFTDMyLCAgICAgICAgICAgIDApCisrCisrUkVMT0NfVFlQRSAoU0hJRlQ1LCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNISUZUNiwgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFICg2NCwgICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0RJU1AsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9QQUdFLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChHT1RfT0ZTVCwgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoR09UX0hJMTYsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEdPVF9MTzE2LCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChTVUIsICAgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSU5TRVJUX0EsICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKElOU0VSVF9CLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChERUxFVEUsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSElHSEVSLCAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKEhJR0hFU1QsICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChDQUxMX0hJMTYsICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQ0FMTF9MTzE2LCAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFNDTl9ESVNQLCAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUwxNiwgICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoQUREX0lNTUVESUFURSwgICAgICAwKQorK1JFTE9DX1RZUEUgKFBKVU1QLCAgICAgICAgICAgICAgMCkKKytSRUxPQ19UWVBFIChSRUxHT1QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoSkFMUiwgICAgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBNT0QzMiwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMMzIsICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0RUUE1PRDY0LCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUw2NCwgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfR0QsICAgICAgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0xETSwgICAgICAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19EVFBSRUxfSEkxNiwgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfRFRQUkVMX0xPMTYsICAgIDApCisrUkVMT0NfVFlQRSAoVExTX0dPVFRQUkVMLCAgICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTDMyLCAgICAgICAgMCkKKytSRUxPQ19UWVBFIChUTFNfVFBSRUw2NCwgICAgICAgIDApCisrUkVMT0NfVFlQRSAoVExTX1RQUkVMX0hJMTYsICAgICAwKQorK1JFTE9DX1RZUEUgKFRMU19UUFJFTF9MTzE2LCAgICAgMCkKKysKKysjZGVmaW5lIE5PX0NPUFlfUkVMT0MgMQorKyNkZWZpbmUgTk9fUkVMQVRJVkVfUkVMT0MgMQorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL21pcHNfcmV0dmFsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3JldHZhbC5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMCwwICsxLDMyMSBAQAorKy8qIEZ1bmN0aW9uIHJldHVybiB2YWx1ZSBsb2NhdGlvbiBmb3IgTGludXgvbWlwcyBBQkkuCisrICAgQ29weXJpZ2h0IChDKSAyMDA1IFJlZCBIYXQsIEluYy4KKysgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBSZWQgSGF0IGVsZnV0aWxzLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisrICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgd2l0aCBSZWQgSGF0IGVsZnV0aWxzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uIE1BIDAyMTEwLTEzMDEgVVNBLgorKworKyAgIFJlZCBIYXQgZWxmdXRpbHMgaXMgYW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yay4KKysgICBBbiBpbmNsdWRlZCBwYWNrYWdlIG9mIHRoZSBPcGVuIEludmVudGlvbiBOZXR3b3JrIGlzIGEgcGFja2FnZSBmb3Igd2hpY2gKKysgICBPcGVuIEludmVudGlvbiBOZXR3b3JrIGxpY2Vuc2VlcyBjcm9zcy1saWNlbnNlIHRoZWlyIHBhdGVudHMuICBObyBwYXRlbnQKKysgICBsaWNlbnNlIGlzIGdyYW50ZWQsIGVpdGhlciBleHByZXNzbHkgb3IgaW1wbGllZGx5LCBieSBkZXNpZ25hdGlvbiBhcyBhbgorKyAgIGluY2x1ZGVkIHBhY2thZ2UuICBTaG91bGQgeW91IHdpc2ggdG8gcGFydGljaXBhdGUgaW4gdGhlIE9wZW4gSW52ZW50aW9uCisrICAgTmV0d29yayBsaWNlbnNpbmcgcHJvZ3JhbSwgcGxlYXNlIHZpc2l0IHd3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20KKysgICA8aHR0cDovL3d3dy5vcGVuaW52ZW50aW9ubmV0d29yay5jb20+LiAgKi8KKysKKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8ZHdhcmYuaD4KKysjaW5jbHVkZSA8ZWxmLmg+CisrCisrI2luY2x1ZGUgIi4uL2xpYmVibC9saWJlYmxQLmgiCisrI2luY2x1ZGUgIi4uL2xpYmR3L2xpYmR3UC5oIgorKworKyNkZWZpbmUgQkFDS0VORCBtaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogVGhlIEFCSSBvZiB0aGUgZmlsZS4gIEFsc28gc2VlIEVGX01JUFNfQUJJMiBhYm92ZS4gKi8KKysjZGVmaW5lIEVGX01JUFNfQUJJCQkweDAwMDBGMDAwCisrCisrLyogVGhlIG9yaWdpbmFsIG8zMiBhYmkuICovCisrI2RlZmluZSBFX01JUFNfQUJJX08zMiAgICAgICAgICAweDAwMDAxMDAwCisrCisrLyogTzMyIGV4dGVuZGVkIHRvIHdvcmsgb24gNjQgYml0IGFyY2hpdGVjdHVyZXMgKi8KKysjZGVmaW5lIEVfTUlQU19BQklfTzY0ICAgICAgICAgIDB4MDAwMDIwMDAKKysKKysvKiBFQUJJIGluIDMyIGJpdCBtb2RlICovCisrI2RlZmluZSBFX01JUFNfQUJJX0VBQkkzMiAgICAgICAweDAwMDAzMDAwCisrCisrLyogRUFCSSBpbiA2NCBiaXQgbW9kZSAqLworKyNkZWZpbmUgRV9NSVBTX0FCSV9FQUJJNjQgICAgICAgMHgwMDAwNDAwMAorKworKy8qIEFsbCB0aGUgcG9zc2libGUgTUlQUyBBQklzLiAqLworK2VudW0gbWlwc19hYmkKKysgIHsKKysgICAgTUlQU19BQklfVU5LTk9XTiA9IDAsCisrICAgIE1JUFNfQUJJX04zMiwKKysgICAgTUlQU19BQklfTzMyLAorKyAgICBNSVBTX0FCSV9ONjQsCisrICAgIE1JUFNfQUJJX082NCwKKysgICAgTUlQU19BQklfRUFCSTMyLAorKyAgICBNSVBTX0FCSV9FQUJJNjQsCisrICAgIE1JUFNfQUJJX0xBU1QKKysgIH07CisrCisrLyogRmluZCB0aGUgbWlwcyBBQkkgb2YgdGhlIGN1cnJlbnQgZmlsZSAqLworK2VudW0gbWlwc19hYmkgZmluZF9taXBzX2FiaShFbGYgKmVsZikKKyt7CisrICBHRWxmX0VoZHIgZWhkcl9tZW07CisrICBHRWxmX0VoZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKysKKysgIGlmIChlaGRyID09IE5VTEwpCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgR0VsZl9Xb3JkIGVsZl9mbGFncyA9IGVoZHItPmVfZmxhZ3M7CisrCisrICAvKiBDaGVjayBlbGZfZmxhZ3MgdG8gc2VlIGlmIGl0IHNwZWNpZmllcyB0aGUgQUJJIGJlaW5nIHVzZWQuICAqLworKyAgc3dpdGNoICgoZWxmX2ZsYWdzICYgRUZfTUlQU19BQkkpKQorKyAgICB7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX08zMjsKKysgICAgY2FzZSBFX01JUFNfQUJJX082NDoKKysgICAgICByZXR1cm4gTUlQU19BQklfTzY0OworKyAgICBjYXNlIEVfTUlQU19BQklfRUFCSTMyOgorKyAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJMzI7CisrICAgIGNhc2UgRV9NSVBTX0FCSV9FQUJJNjQ6CisrICAgICAgcmV0dXJuIE1JUFNfQUJJX0VBQkk2NDsKKysgICAgZGVmYXVsdDoKKysgICAgICBpZiAoKGVsZl9mbGFncyAmIEVGX01JUFNfQUJJMikpCisrCXJldHVybiBNSVBTX0FCSV9OMzI7CisrICAgIH0KKysKKysgIC8qIEdDQyBjcmVhdGVzIGEgcHNldWRvLXNlY3Rpb24gd2hvc2UgbmFtZSBkZXNjcmliZXMgdGhlIEFCSS4gICovCisrICBzaXplX3Qgc2hzdHJuZHg7CisrICBpZiAoZWxmX2dldHNoZHJzdHJuZHggKGVsZiwgJnNoc3RybmR4KSA8IDApCisrICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgY29uc3QgY2hhciAqbmFtZTsKKysgIEVsZl9TY24gKnNjbiA9IE5VTEw7CisrICB3aGlsZSAoKHNjbiA9IGVsZl9uZXh0c2NuIChlbGYsIHNjbikpICE9IE5VTEwpCisrICAgIHsKKysgICAgICBHRWxmX1NoZHIgc2hkcl9tZW07CisrICAgICAgR0VsZl9TaGRyICpzaGRyID0gZ2VsZl9nZXRzaGRyIChzY24sICZzaGRyX21lbSk7CisrICAgICAgaWYgKHNoZHIgPT0gTlVMTCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9MQVNUOworKworKyAgICAgIG5hbWUgPSBlbGZfc3RycHRyIChlbGYsIHNoc3RybmR4LCBzaGRyLT5zaF9uYW1lKSA/OiAiIjsKKysgICAgICBpZiAoc3RybmNtcCAobmFtZSwgIi5tZGVidWcuIiwgOCkgIT0gMCkKKysgICAgICAgIGNvbnRpbnVlOworKworKyAgICAgIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTMyIikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9PMzI7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlOMzIiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX04zMjsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9ONjQ7CisrICAgICAgZWxzZSBpZiAoc3RyY21wIChuYW1lLCAiLm1kZWJ1Zy5hYmlPNjQiKSA9PSAwKQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX082NDsKKysgICAgICBlbHNlIGlmIChzdHJjbXAgKG5hbWUsICIubWRlYnVnLmVhYmkzMiIpID09IDApCisrICAgICAgICByZXR1cm4gTUlQU19BQklfRUFCSTMyOworKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAobmFtZSwgIi5tZGVidWcuZWFiaTY0IikgPT0gMCkKKysgICAgICAgIHJldHVybiBNSVBTX0FCSV9FQUJJNjQ7CisrICAgICAgZWxzZQorKyAgICAgICAgcmV0dXJuIE1JUFNfQUJJX1VOS05PV047CisrICAgIH0KKysKKysgIHJldHVybiBNSVBTX0FCSV9VTktOT1dOOworK30KKysKKyt1bnNpZ25lZCBpbnQKKyttaXBzX2FiaV9yZWdzaXplIChlbnVtIG1pcHNfYWJpIGFiaSkKKyt7CisrICBzd2l0Y2ggKGFiaSkKKysgICAgeworKyAgICBjYXNlIE1JUFNfQUJJX0VBQkkzMjoKKysgICAgY2FzZSBNSVBTX0FCSV9PMzI6CisrICAgICAgcmV0dXJuIDQ7CisrICAgIGNhc2UgTUlQU19BQklfTjMyOgorKyAgICBjYXNlIE1JUFNfQUJJX042NDoKKysgICAgY2FzZSBNSVBTX0FCSV9PNjQ6CisrICAgIGNhc2UgTUlQU19BQklfRUFCSTY0OgorKyAgICAgIHJldHVybiA4OworKyAgICBjYXNlIE1JUFNfQUJJX1VOS05PV046CisrICAgIGNhc2UgTUlQU19BQklfTEFTVDoKKysgICAgZGVmYXVsdDoKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorK30KKysKKysKKysvKiAkdjAgb3IgcGFpciAkdjAsICR2MSAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnX28zMltdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMyB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICB9OworKworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfaW50cmVnW10gPQorKyAgeworKyAgICB7IC5hdG9tID0gRFdfT1BfcmVnMiB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA4IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWczIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ludHJlZwkxCisrI2RlZmluZSBubG9jX2ludHJlZ3BhaXIJNAorKworKy8qICRmMCAoZmxvYXQpLCBvciBwYWlyICRmMCwgJGYxIChkb3VibGUpLgorKyAqIGYyL2YzIGFyZSB1c2VkIGZvciBDT01QTEVYICg9IDIgZG91YmxlcykgcmV0dXJucyBpbiBGb3J0cmFuICovCisrc3RhdGljIGNvbnN0IER3YXJmX09wIGxvY19mcHJlZ19vMzJbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDMzIH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDQgfSwKKysgICAgeyAuYXRvbSA9IERXX09QX3JlZ3gsIC5udW1iZXIgPSAzNCB9LCB7IC5hdG9tID0gRFdfT1BfcGllY2UsIC5udW1iZXIgPSA0IH0sCisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzUgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gNCB9LAorKyAgfTsKKysKKysvKiAkZjAsIG9yIHBhaXIgJGYwLCAkZjIuICAqLworK3N0YXRpYyBjb25zdCBEd2FyZl9PcCBsb2NfZnByZWdbXSA9CisrICB7CisrICAgIHsgLmF0b20gPSBEV19PUF9yZWd4LCAubnVtYmVyID0gMzIgfSwgeyAuYXRvbSA9IERXX09QX3BpZWNlLCAubnVtYmVyID0gOCB9LAorKyAgICB7IC5hdG9tID0gRFdfT1BfcmVneCwgLm51bWJlciA9IDM0IH0sIHsgLmF0b20gPSBEV19PUF9waWVjZSwgLm51bWJlciA9IDggfSwKKysgIH07CisrI2RlZmluZSBubG9jX2ZwcmVnICAxCisrI2RlZmluZSBubG9jX2ZwcmVncGFpciA0CisrI2RlZmluZSBubG9jX2ZwcmVncXVhZCA4CisrCisrLyogVGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdHVyZSBhbmQgaXMgYWN0dWFsbHkgc3RvcmVkIGluIHN0YWNrIHNwYWNlCisrICAgcGFzc2VkIGluIGEgaGlkZGVuIGFyZ3VtZW50IGJ5IHRoZSBjYWxsZXIuICBCdXQsIHRoZSBjb21waWxlcgorKyAgIGhlbHBmdWxseSByZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoYXQgc3BhY2UgaW4gJHYwLiAgKi8KKytzdGF0aWMgY29uc3QgRHdhcmZfT3AgbG9jX2FnZ3JlZ2F0ZVtdID0KKysgIHsKKysgICAgeyAuYXRvbSA9IERXX09QX2JyZWcyLCAubnVtYmVyID0gMCB9CisrICB9OworKyNkZWZpbmUgbmxvY19hZ2dyZWdhdGUgMQorKworK2ludAorK21pcHNfcmV0dXJuX3ZhbHVlX2xvY2F0aW9uIChEd2FyZl9EaWUgKmZ1bmN0eXBlZGllLCBjb25zdCBEd2FyZl9PcCAqKmxvY3ApCisreworKyAgLyogRmlyc3QgZmluZCB0aGUgQUJJIHVzZWQgYnkgdGhlIGVsZiBvYmplY3QgKi8KKysgIGVudW0gbWlwc19hYmkgYWJpID0gZmluZF9taXBzX2FiaShmdW5jdHlwZWRpZS0+Y3UtPmRiZy0+ZWxmKTsKKysKKysgIC8qIFNvbWV0aGluZyB3ZW50IHNlcmlvdXNseSB3cm9uZyB3aGlsZSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgQUJJICovCisrICBpZiAoYWJpID09IE1JUFNfQUJJX0xBU1QpCisrICAgIHJldHVybiAtMTsKKysKKysgIC8qIFdlIGNvdWxkbid0IGlkZW50aWZ5IHRoZSBBQkksIGJ1dCB0aGUgZmlsZSBzZWVtcyB2YWxpZCAqLworKyAgaWYgKGFiaSA9PSBNSVBTX0FCSV9VTktOT1dOKQorKyAgICByZXR1cm4gLTI7CisrCisrICAvKiBDYW4ndCBoYW5kbGUgRUFCSSB2YXJpYW50cyAqLworKyAgaWYgKChhYmkgPT0gTUlQU19BQklfRUFCSTMyKSB8fCAoYWJpID09IE1JUFNfQUJJX0VBQkk2NCkpCisrICAgIHJldHVybiAtMjsKKysKKysgIHVuc2lnbmVkIGludCByZWdzaXplID0gbWlwc19hYmlfcmVnc2l6ZSAoYWJpKTsKKysgIGlmICghcmVnc2l6ZSkKKysgICAgcmV0dXJuIC0yOworKworKyAgLyogU3RhcnQgd2l0aCB0aGUgZnVuY3Rpb24ncyB0eXBlLCBhbmQgZ2V0IHRoZSBEV19BVF90eXBlIGF0dHJpYnV0ZSwKKysgICAgIHdoaWNoIGlzIHRoZSB0eXBlIG9mIHRoZSByZXR1cm4gdmFsdWUuICAqLworKworKyAgRHdhcmZfQXR0cmlidXRlIGF0dHJfbWVtOworKyAgRHdhcmZfQXR0cmlidXRlICphdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKGZ1bmN0eXBlZGllLCBEV19BVF90eXBlLCAmYXR0cl9tZW0pOworKyAgaWYgKGF0dHIgPT0gTlVMTCkKKysgICAgLyogVGhlIGZ1bmN0aW9uIGhhcyBubyByZXR1cm4gdmFsdWUsIGxpa2UgYSBgdm9pZCcgZnVuY3Rpb24gaW4gQy4gICovCisrICAgIHJldHVybiAwOworKworKyAgRHdhcmZfRGllIGRpZV9tZW07CisrICBEd2FyZl9EaWUgKnR5cGVkaWUgPSBkd2FyZl9mb3JtcmVmX2RpZSAoYXR0ciwgJmRpZV9tZW0pOworKyAgaW50IHRhZyA9IGR3YXJmX3RhZyAodHlwZWRpZSk7CisrCisrICAvKiBGb2xsb3cgdHlwZWRlZnMgYW5kIHF1YWxpZmllcnMgdG8gZ2V0IHRvIHRoZSBhY3R1YWwgdHlwZS4gICovCisrICB3aGlsZSAodGFnID09IERXX1RBR190eXBlZGVmCisrCSB8fCB0YWcgPT0gRFdfVEFHX2NvbnN0X3R5cGUgfHwgdGFnID09IERXX1RBR192b2xhdGlsZV90eXBlCisrCSB8fCB0YWcgPT0gRFdfVEFHX3Jlc3RyaWN0X3R5cGUpCisrICAgIHsKKysgICAgICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrICAgICAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrICAgICAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysgICAgfQorKworKyAgc3dpdGNoICh0YWcpCisrICAgIHsKKysgICAgY2FzZSAtMToKKysgICAgICByZXR1cm4gLTE7CisrCisrICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6CisrICAgICAgaWYgKCEgZHdhcmZfaGFzYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2J5dGVfc2l6ZSkpCisrCXsKKysJICBhdHRyID0gZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX3R5cGUsICZhdHRyX21lbSk7CisrCSAgdHlwZWRpZSA9IGR3YXJmX2Zvcm1yZWZfZGllIChhdHRyLCAmZGllX21lbSk7CisrCSAgdGFnID0gZHdhcmZfdGFnICh0eXBlZGllKTsKKysJfQorKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisrCisrICAgIGNhc2UgRFdfVEFHX2Jhc2VfdHlwZToKKysgICAgY2FzZSBEV19UQUdfZW51bWVyYXRpb25fdHlwZToKKysgICAgY2FzZSBEV19UQUdfcG9pbnRlcl90eXBlOgorKyAgICBjYXNlIERXX1RBR19wdHJfdG9fbWVtYmVyX3R5cGU6CisrICAgICAgeworKyAgICAgICAgRHdhcmZfV29yZCBzaXplOworKwlpZiAoZHdhcmZfZm9ybXVkYXRhIChkd2FyZl9hdHRyX2ludGVncmF0ZSAodHlwZWRpZSwgRFdfQVRfYnl0ZV9zaXplLAorKwkJCQkJICZhdHRyX21lbSksICZzaXplKSAhPSAwKQorKwkgIHsKKysJICAgIGlmICh0YWcgPT0gRFdfVEFHX3BvaW50ZXJfdHlwZSB8fCB0YWcgPT0gRFdfVEFHX3B0cl90b19tZW1iZXJfdHlwZSkKKysJICAgICAgc2l6ZSA9IHJlZ3NpemU7CisrCSAgICBlbHNlCisrCSAgICAgIHJldHVybiAtMTsKKysJICB9CisrCWlmICh0YWcgPT0gRFdfVEFHX2Jhc2VfdHlwZSkKKysJICB7CisrCSAgICBEd2FyZl9Xb3JkIGVuY29kaW5nOworKwkgICAgaWYgKGR3YXJmX2Zvcm11ZGF0YSAoZHdhcmZfYXR0cl9pbnRlZ3JhdGUgKHR5cGVkaWUsIERXX0FUX2VuY29kaW5nLAorKwkJCQkJICAgICAmYXR0cl9tZW0pLCAmZW5jb2RpbmcpICE9IDApCisrCSAgICAgIHJldHVybiAtMTsKKysKKysjZGVmaW5lIEFCSV9MT0MobG9jLCByZWdzaXplKSAoKHJlZ3NpemUpID09IDQgPyAobG9jICMjIF9vMzIpIDogKGxvYykpCisrCisrCSAgICBpZiAoZW5jb2RpbmcgPT0gRFdfQVRFX2Zsb2F0KQorKwkgICAgICB7CisrCQkqbG9jcCA9IEFCSV9MT0MobG9jX2ZwcmVnLCByZWdzaXplKTsKKysJCWlmIChzaXplIDw9IHJlZ3NpemUpCisrCQkgICAgcmV0dXJuIG5sb2NfZnByZWc7CisrCisrCQlpZiAoc2l6ZSA8PSAyKnJlZ3NpemUpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdwYWlyOworKworKwkJaWYgKHNpemUgPD0gNCpyZWdzaXplICYmIGFiaSA9PSBNSVBTX0FCSV9PMzIpCisrICAgICAgICAgICAgICAgICAgcmV0dXJuIG5sb2NfZnByZWdxdWFkOworKworKwkJZ290byBhZ2dyZWdhdGU7CisrCSAgICAgIH0KKysJICB9CisrCSpsb2NwID0gQUJJX0xPQyhsb2NfaW50cmVnLCByZWdzaXplKTsKKysJaWYgKHNpemUgPD0gcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWc7CisrCWlmIChzaXplIDw9IDIqcmVnc2l6ZSkKKysJICByZXR1cm4gbmxvY19pbnRyZWdwYWlyOworKworKwkvKiBFbHNlIGZhbGwgdGhyb3VnaC4gU2hvdWxkbid0IGhhcHBlbiB0aG91Z2ggKGF0IGxlYXN0IHdpdGggZ2NjKSAqLworKyAgICAgIH0KKysKKysgICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2NsYXNzX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX3VuaW9uX3R5cGU6CisrICAgIGNhc2UgRFdfVEFHX2FycmF5X3R5cGU6CisrICAgIGFnZ3JlZ2F0ZToKKysgICAgICAvKiBYWFggVE9ETzogQ2FuJ3QgaGFuZGxlIHN0cnVjdHVyZSByZXR1cm4gd2l0aCBvdGhlciBBQkkncyB5ZXQgOi0vICovCisrICAgICAgaWYgKChhYmkgIT0gTUlQU19BQklfTzMyKSAmJiAoYWJpICE9IE1JUFNfQUJJX082NCkpCisrICAgICAgICByZXR1cm4gLTI7CisrCisrICAgICAgKmxvY3AgPSBsb2NfYWdncmVnYXRlOworKyAgICAgIHJldHVybiBubG9jX2FnZ3JlZ2F0ZTsKKysgICAgfQorKworKyAgLyogWFhYIFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byByZXR1cm4gc3BlY2lmaWMgZXJyb3JzIGZyb20gZWJsIGNhbGxzLgorKyAgICAgVGhpcyB2YWx1ZSBtZWFucyB3ZSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgdHlwZSwgYnV0IGl0IGlzIHdlbGwtZm9ybWVkCisrICAgICBEV0FSRiBhbmQgbWlnaHQgYmUgdmFsaWQuICAqLworKyAgcmV0dXJuIC0yOworK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9taXBzX3N5bWJvbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZWxmdXRpbHMtMC4xNTgvYmFja2VuZHMvbWlwc19zeW1ib2wuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTAsMCArMSw1MiBAQAorKy8qIE1JUFMgc3BlY2lmaWMgc3ltYm9saWMgbmFtZSBoYW5kbGluZy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgUmVkIEhhdCwgSW5jLgorKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFJlZCBIYXQgZWxmdXRpbHMuCisrICAgV3JpdHRlbiBieSBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPiwgMjAwMi4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorKyAgIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKyAgIHdpdGggUmVkIEhhdCBlbGZ1dGlsczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiBNQSAwMjExMC0xMzAxIFVTQS4KKysKKysgICBSZWQgSGF0IGVsZnV0aWxzIGlzIGFuIGluY2x1ZGVkIHBhY2thZ2Ugb2YgdGhlIE9wZW4gSW52ZW50aW9uIE5ldHdvcmsuCisrICAgQW4gaW5jbHVkZWQgcGFja2FnZSBvZiB0aGUgT3BlbiBJbnZlbnRpb24gTmV0d29yayBpcyBhIHBhY2thZ2UgZm9yIHdoaWNoCisrICAgT3BlbiBJbnZlbnRpb24gTmV0d29yayBsaWNlbnNlZXMgY3Jvc3MtbGljZW5zZSB0aGVpciBwYXRlbnRzLiAgTm8gcGF0ZW50CisrICAgbGljZW5zZSBpcyBncmFudGVkLCBlaXRoZXIgZXhwcmVzc2x5IG9yIGltcGxpZWRseSwgYnkgZGVzaWduYXRpb24gYXMgYW4KKysgICBpbmNsdWRlZCBwYWNrYWdlLiAgU2hvdWxkIHlvdSB3aXNoIHRvIHBhcnRpY2lwYXRlIGluIHRoZSBPcGVuIEludmVudGlvbgorKyAgIE5ldHdvcmsgbGljZW5zaW5nIHByb2dyYW0sIHBsZWFzZSB2aXNpdCB3d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tCisrICAgPGh0dHA6Ly93d3cub3BlbmludmVudGlvbm5ldHdvcmsuY29tPi4gICovCisrCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjIGluY2x1ZGUgPGNvbmZpZy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxlbGYuaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrCisrI2RlZmluZSBCQUNLRU5ECQltaXBzXworKyNpbmNsdWRlICJsaWJlYmxfQ1BVLmgiCisrCisrLyogQ2hlY2sgZm9yIHRoZSBzaW1wbGUgcmVsb2MgdHlwZXMuICAqLworK0VsZl9UeXBlCisrbWlwc19yZWxvY19zaW1wbGVfdHlwZSAoRWJsICplYmwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgdHlwZSkKKyt7CisrICBzd2l0Y2ggKHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBSX01JUFNfMTY6CisrICAgICAgcmV0dXJuIEVMRl9UX0hBTEY7CisrICAgIGNhc2UgUl9NSVBTXzMyOgorKyAgICAgIHJldHVybiBFTEZfVF9XT1JEOworKyAgICBjYXNlIFJfTUlQU182NDoKKysgICAgICByZXR1cm4gRUxGX1RfWFdPUkQ7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIEVMRl9UX05VTTsKKysgICAgfQorK30KK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvbGliZWJsL2VibG9wZW5iYWNrZW5kLmMJMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9saWJlYmwvZWJsb3BlbmJhY2tlbmQuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxMDIzNTk2NSArMDAwMAorQEAgLTcxLDYgKzcxLDggQEAKKyAgIHsgInNwYXJjIiwgImVsZl9zcGFyYyIsICJzcGFyYyIsIDUsIEVNX1NQQVJDLCAwLCAwIH0sCisgICB7ICJzcGFyYyIsICJlbGZfc3BhcmN2OHBsdXMiLCAic3BhcmMiLCA1LCBFTV9TUEFSQzMyUExVUywgMCwgMCB9LAorICAgeyAiczM5MCIsICJlYmxfczM5MCIsICJzMzkwIiwgNCwgRU1fUzM5MCwgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwcyIsICJtaXBzIiwgNCwgRU1fTUlQUywgMCwgMCB9LAorKyAgeyAibWlwcyIsICJlbGZfbWlwc2VsIiwgIm1pcHNlbCIsIDQsIEVNX01JUFNfUlMzX0xFLCAwLCAwIH0sCisgCisgICB7ICJtMzIiLCAiZWxmX20zMiIsICJtMzIiLCAzLCBFTV9NMzIsIDAsIDAgfSwKKyAgIHsgIm02OGsiLCAiZWxmX202OGsiLCAibTY4ayIsIDQsIEVNXzY4SywgMCwgMCB9LAorSW5kZXg6IGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTgub3JpZy9iYWNrZW5kcy9jb21tb24tcmVsb2MuYwkyMDE0LTA0LTIxIDExOjEzOjM2LjkxNDIzNTg3NSArMDAwMAorKysrIGVsZnV0aWxzLTAuMTU4L2JhY2tlbmRzL2NvbW1vbi1yZWxvYy5jCTIwMTQtMDQtMjEgMTE6MTM6MzYuOTEwMjM1OTY1ICswMDAwCitAQCAtMTEyLDExICsxMTIsMTMgQEAKKyB9CisgCisgCisrI2lmbmRlZiBOT19DT1BZX1JFTE9DCisgYm9vbAorIEVCTEhPT0soY29weV9yZWxvY19wKSAoaW50IHJlbG9jKQorIHsKKyAgIHJldHVybiByZWxvYyA9PSBSX1RZUEUgKENPUFkpOworIH0KKysjZW5kaWYKKyAKKyBib29sCisgRUJMSE9PSyhub25lX3JlbG9jX3ApIChpbnQgcmVsb2MpCitAQCAtMTM4LDcgKzE0MCw5IEBACisgICBlYmwtPnJlbG9jX3R5cGVfbmFtZSA9IEVCTEhPT0socmVsb2NfdHlwZV9uYW1lKTsKKyAgIGVibC0+cmVsb2NfdHlwZV9jaGVjayA9IEVCTEhPT0socmVsb2NfdHlwZV9jaGVjayk7CisgICBlYmwtPnJlbG9jX3ZhbGlkX3VzZSA9IEVCTEhPT0socmVsb2NfdmFsaWRfdXNlKTsKKysjaWZuZGVmIE5PX0NPUFlfUkVMT0MKKyAgIGVibC0+Y29weV9yZWxvY19wID0gRUJMSE9PSyhjb3B5X3JlbG9jX3ApOworKyNlbmRpZgorICAgZWJsLT5ub25lX3JlbG9jX3AgPSBFQkxIT09LKG5vbmVfcmVsb2NfcCk7CisgI2lmbmRlZiBOT19SRUxBVElWRV9SRUxPQworICAgZWJsLT5yZWxhdGl2ZV9yZWxvY19wID0gRUJMSE9PSyhyZWxhdGl2ZV9yZWxvY19wKTsKK0luZGV4OiBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU4Lm9yaWcvYmFja2VuZHMvTWFrZWZpbGUuYW0JMjAxNC0wNC0yMSAxMToxMzozNi45MTQyMzU4NzUgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1OC9iYWNrZW5kcy9NYWtlZmlsZS5hbQkyMDE0LTA0LTIxIDExOjE0OjEwLjg0MTQ2ODkzNCArMDAwMAorQEAgLTMzLDEyICszMywxMiBAQAorIAorIAorIG1vZHVsZXMgPSBpMzg2IHNoIHg4Nl82NCBpYTY0IGFscGhhIGFybSBhYXJjaDY0IHNwYXJjIHBwYyBwcGM2NCBzMzkwIFwKKy0JICB0aWxlZ3ggcGFyaXNjCisrCSAgdGlsZWd4IHBhcmlzYyBtaXBzCisgbGliZWJsX3BpYyA9IGxpYmVibF9pMzg2X3BpYy5hIGxpYmVibF9zaF9waWMuYSBsaWJlYmxfeDg2XzY0X3BpYy5hICAgIFwKKyAJICAgICBsaWJlYmxfaWE2NF9waWMuYSBsaWJlYmxfYWxwaGFfcGljLmEgbGliZWJsX2FybV9waWMuYSAgICBcCisgCSAgICAgbGliZWJsX2FhcmNoNjRfcGljLmEgbGliZWJsX3NwYXJjX3BpYy5hIGxpYmVibF9wcGNfcGljLmEgXAorIAkgICAgIGxpYmVibF9wcGM2NF9waWMuYSBsaWJlYmxfczM5MF9waWMuYSBsaWJlYmxfdGlsZWd4X3BpYy5hIFwKKy0JICAgICBsaWJlYmxfcGFyaXNjX3BpYy5hCisrCSAgICAgbGliZWJsX3BhcmlzY19waWMuYSBsaWJlYmxfbWlwc19waWMuYQorIG5vaW5zdF9MSUJSQVJJRVMgPSAkKGxpYmVibF9waWMpCisgbm9pbnN0X0RBVEEgPSAkKGxpYmVibF9waWM6X3BpYy5hPS5zbykKKyAKK0BAIC0xMjEsNiArMTIxLDEwIEBACisgbGliZWJsX3BhcmlzY19waWNfYV9TT1VSQ0VTID0gJChwYXJpc2NfU1JDUykKKyBhbV9saWJlYmxfcGFyaXNjX3BpY19hX09CSkVDVFMgPSAkKHBhcmlzY19TUkNTOi5jPS5vcykKKyAKKyttaXBzX1NSQ1MgPSBtaXBzX2luaXQuYyBtaXBzX3N5bWJvbC5jIG1pcHNfcmVncy5jIG1pcHNfcmV0dmFsLmMKKytsaWJlYmxfbWlwc19waWNfYV9TT1VSQ0VTID0gJChtaXBzX1NSQ1MpCisrYW1fbGliZWJsX21pcHNfcGljX2FfT0JKRUNUUyA9ICQobWlwc19TUkNTOi5jPS5vcykKKysKKyBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAlAcm0gLWYgJChAOi5zbz0ubWFwKQorIAllY2hvICdFTEZVVElMU18kKFBBQ0tBR0VfVkVSU0lPTikgeyBnbG9iYWw6ICQqX2luaXQ7IGxvY2FsOiAqOyB9OycgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL21pcHNfcmVhZGVsZl93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNjY5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvbWlwc19yZWFkZWxmX3cucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogS3VydCBSb2Vja3ggPGt1cnRAcm9lY2t4LmJlPgorU3ViamVjdDogTWFrZSByZWFkZWxmIC13IG91dHB1dCBkZWJ1ZyBpbmZvcm1hdGlvbiBvbiBtaXBzCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY2MjA0MQorRm9yd2FyZGVkOiBub3QtbmVlZGVkCisKK1Vwc3RyZWFtcyB3YW50cyBhIGNoYW5nZSB3aGVyZSB0aGlzIGlzIGhhbmRsZWQgYnkgYSBob29rIHRoYXQgbmVlZHMKK3RvIGJlIGZpbGxlZCBpbiBieSB0aGUgYmFja2VuZCBmb3IgdGhlIGFyY2guCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1My9zcmMvcmVhZGVsZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy9zcmMvcmVhZGVsZi5jCTIwMTItMDgtMTAgMjI6MDE6NTUuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTMvc3JjL3JlYWRlbGYuYwkyMDEyLTA5LTE4IDIxOjQ2OjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTczNjQsNyArNzM2NCw4IEBACisgICAgICAgR0VsZl9TaGRyIHNoZHJfbWVtOworICAgICAgIEdFbGZfU2hkciAqc2hkciA9IGdlbGZfZ2V0c2hkciAoc2NuLCAmc2hkcl9tZW0pOworIAorLSAgICAgIGlmIChzaGRyICE9IE5VTEwgJiYgc2hkci0+c2hfdHlwZSA9PSBTSFRfUFJPR0JJVFMpCisrICAgICAgaWYgKHNoZHIgIT0gTlVMTCAmJiAoCisrCSAoc2hkci0+c2hfdHlwZSA9PSBTSFRfUFJPR0JJVFMpIHx8IChzaGRyLT5zaF90eXBlID09IFNIVF9NSVBTX0RXQVJGKSkpCisgCXsKKyAJICBzdGF0aWMgY29uc3Qgc3RydWN0CisgCSAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL25vbl9saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViMWIzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9ub25fbGludXgucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorSW5kZXg6IGVsZnV0aWxzLTAuMTU5L2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTkub3JpZy9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworKysrIGVsZnV0aWxzLTAuMTU5L2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jCitAQCAtMzkzLDYgKzM5MywxNiBAQCBwaWRfZ2V0dGhyZWFkIChEd2ZsICpkd2ZsIF9fYXR0cmlidXRlX18KKyAgIHJldHVybiBmYWxzZTsKKyB9CisgCisrYm9vbAorK2ludGVybmFsX2Z1bmN0aW9uCisrX19saWJkd2ZsX3B0cmFjZV9hdHRhY2ggKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJIGJvb2wgKnRpZF93YXNfc3RvcHBlZHAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQorK3sKKysgIGVycm5vID0gRU5PU1lTOworKyAgX19saWJkd2ZsX3NldGVycm5vIChEV0ZMX0VfRVJSTk8pOworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgYm9vbAorIHBpZF9tZW1vcnlfcmVhZCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgICAgICAgICAgICBEd2FyZl9BZGRyIGFkZHIgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorQEAgLTQxOSw2ICs0MjksMTMgQEAgcGlkX2RldGFjaCAoRHdmbCAqZHdmbCBfX2F0dHJpYnV0ZV9fICgodQorIHsKKyB9CisgCisrdm9pZAorK2ludGVybmFsX2Z1bmN0aW9uCisrX19saWJkd2ZsX3B0cmFjZV9kZXRhY2ggKHBpZF90IHRpZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksCisrCQkJIGJvb2wgdGlkX3dhc19zdG9wcGVkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKKyt7CisrfQorKworIHN0YXRpYyB2b2lkCisgcGlkX3RocmVhZF9kZXRhY2ggKER3ZmxfVGhyZWFkICp0aHJlYWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAorIAkJICB2b2lkICp0aHJlYWRfYXJnIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGZmMDdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmCkBAIC0wLDAgKzEsMTAyMSBAQAorUmViYXNlIHRvIDEuMTYyCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysrKysrCisgYmFja2VuZHMvQ2hhbmdlTG9nICAgICAgICAgIHwgICAxMiArKysrKysrKysKKyBiYWNrZW5kcy9NYWtlZmlsZS5hbSAgICAgICAgfCAgICAyICstCisgY29uZmlnL0NoYW5nZUxvZyAgICAgICAgICAgIHwgICAgNCArKysKKyBjb25maWcvZXUuYW0gICAgICAgICAgICAgICAgfCAgIDE0ICsrKysrKystLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgfCAgIDYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KKyBsaWIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgfCAgICA4ICsrKysrKworIGxpYi9ldS1jb25maWcuaCAgICAgICAgICAgICB8ICAgMTAgKysrKysrKworIGxpYmFzbS9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDUgKysrKworIGxpYmNwdS9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDggKysrKysrCisgbGliY3B1L2kzODZfZGlzYXNtLmMgICAgICAgIHwgICAgMSArCisgbGliZHcvQ2hhbmdlTG9nICAgICAgICAgICAgIHwgICAxMyArKysrKysrKysKKyBsaWJkdy9kd2FyZl9iZWdpbl9lbGYuYyAgICAgfCAgICA4ICsrKysrKworIGxpYmR3L2xpYmR3LmggICAgICAgICAgICAgICB8ICAgIDIgKy0KKyBsaWJkd2ZsL0NoYW5nZUxvZyAgICAgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrCisgbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jIHwgICAyOSArKysrKysrKysrKysrKysrKysrKworIGxpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jICB8ICAgMTQgKysrKysrKysrKworIGxpYmVibC9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgIDUgKysrKworIGxpYmVsZi9DaGFuZ2VMb2cgICAgICAgICAgICB8ICAgMTAgKysrKysrKworIGxpYmVsZi9jb21tb24uaCAgICAgICAgICAgICB8ICAgIDQgKy0tCisgbGliZWxmL2dudWhhc2hfeGxhdGUuaCAgICAgIHwgICAgNiArKystLQorIHNyYy9DaGFuZ2VMb2cgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysrKysrKysrKysrCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgIHwgICAgNSArKysrCisgc3JjL2FkZHIybGluZS5jICAgICAgICAgICAgIHwgICAgNCArLS0KKyBzcmMvZmluZHRleHRyZWwuYyAgICAgICAgICAgfCAgICA2ICsrKystCisgc3JjL2xkLmggICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIHNyYy9yZWFkZWxmLmMgICAgICAgICAgICAgICB8ICAgMTUgKysrKysrKy0tLS0KKyBzcmMvc3RyaW5ncy5jICAgICAgICAgICAgICAgfCAgIDExICsrKysrKysrCisgc3JjL3N0cmlwLmMgICAgICAgICAgICAgICAgIHwgICAgNiArKysrKworIHRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMTQgKysrKysrKysrKworIHRlc3RzL01ha2VmaWxlLmFtICAgICAgICAgICB8ICAgIDEgKworIHRlc3RzL2JhY2t0cmFjZS5jICAgICAgICAgICB8ICAgIDEgKworIHRlc3RzL2xpbmUyYWRkci5jICAgICAgICAgICB8ICAgIDIgKy0KKyAzMyBmaWxlcyBjaGFuZ2VkLCAzNDMgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKK2luZGV4IGQ4Mjk3ODMuLjg5YmZkMjQgMTAwNjQ0CistLS0gYS9DaGFuZ2VMb2cKKysrKyBiL0NoYW5nZUxvZworQEAgLTI1Myw2ICsyNTMsOCBAQAorIAorIDIwMTItMDEtMjQgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAKKysJKiBjb25maWd1cmUuYWM6IFdyYXAgQUNfQ09NUElMRV9JRkVMU0Ugc291cmNlcyBpbiBBQ19MQU5HX1NPVVJDRS4KKysKKyAJKiBDT1BZSU5HOiBGaXggYWRkcmVzcy4gVXBkYXRlZCB2ZXJzaW9uIGZyb20gZ251bGliLgorIAorIDIwMTItMDEtMjMgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KK0BAIC0yNzEsNiArMjczLDkgQEAKKyAKKyAyMDExLTEwLTA4ICBNaWtlIEZyeXNpbmdlciAgPHZhcGllckBnZW50b28ub3JnPgorIAorKwkqIGNvbmZpZ3VyZS5hYyAoLS1kaXNhYmxlLXdlcnJvcik6IEhhbmRsZSBpdCwgY29udHJvbGxpbmcgQlVJTERfV0VSUk9SCisrCWF1dG9tYWtlIG9wdGlvbi4KKysKKyAJKiBjb25maWd1cmUuYWM6IEZpeCB1c2Ugb2YgQUNfQVJHX0VOQUJMRSB0byBoYW5kbGUgJGVuYWJsZXZhbCBjb3JyZWN0bHkuCisgCisgMjAxMS0xMC0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGdtYWlsLmNvbT4KK0BAIC0yOTIsNiArMjk3LDEwIEBACisgCisgCSogY29uZmlndXJlLmFjIChMT0NBTEVESVIsIERBVEFESVJOQU1FKTogUmVtb3ZlZC4KKyAKKysyMDA5LTExLTIyICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGNvbmZpZ3VyZS5hYzogVXNlIHNlZCBhbmQgZXhwciBpbnN0ZWFkIG9mIG1vZGVybiBiYXNoIGV4dGVuc2lvbnMuCisrCisgMjAwOS0wOS0yMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogY29uZmlndXJlLmFjOiBVcGRhdGUgZm9yIG1vcmUgbW9kZXJuIGF1dG9jb25mLgorQEAgLTMwMCw2ICszMDksMTAgQEAKKyAKKyAJKiBjb25maWd1cmUuYWMgKHppcF9MSUJTKTogQ2hlY2sgZm9yIGxpYmx6bWEgdG9vLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLWZnbnU4OS1pbmxpbmU7IGFkZCBpdCB0byBXRVhUUkEgaWYgaXQgd29ya3MuCisrCisgMjAwOS0wNC0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgKGV1X3ZlcnNpb24pOiBSb3VuZCBkb3duIGhlcmUsIG5vdCBpbiB2ZXJzaW9uLmggbWFjcm9zLgorQEAgLTMxMSw2ICszMjQsOCBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgX19idWlsdGluX3BvcGNvdW50LgorKworIAkqIGNvbmZpZ3VyZS5hYyAoemxpYiBjaGVjayk6IENoZWNrIGZvciBnemRpcmVjdCwgbmVlZCB6bGliID49IDEuMi4yLjMuCisgCisgCSogY29uZmlndXJlLmFjIChfX3RocmVhZCBjaGVjayk6IFVzZSBBQ19MSU5LX0lGRUxTRSwgaW4gY2FzZSBvZgorQEAgLTM5MSw2ICs0MDYsMTAgQEAKKyAJKiBjb25maWd1cmUuYWM6IEFkZCBkdW1teSBhdXRvbWFrZSBjb25kaXRpb25hbCB0byBnZXQgZGVwZW5kZW5jaWVzCisgCWZvciBub24tZ2VuZXJpYyBsaW5rZXIgcmlnaHQuICBTZWUgc3JjL01ha2VmaWxlLmFtLgorIAorKzIwMDUtMTEtMjIgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3IgLS1hcy1uZWVkZWQgbGlua2VyIG9wdGlvbi4KKysKKyAyMDA1LTExLTE4ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlLmFtIChESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTKTogTmV3IHZhcmlhYmxlLgorQEAgLTQzOCw2ICs0NTcsMTcgQEAKKyAJKiBNYWtlZmlsZS5hbSAoYWxsX1NVQkRJUlMpOiBBZGQgbGliZHdmbC4KKyAJKiBjb25maWd1cmUuYWM6IFdyaXRlIGxpYmR3ZmwvTWFrZWZpbGUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBjb25maWd1cmUuYWMgKFdFWFRSQSk6IENoZWNrIGZvciAtV2V4dHJhIGFuZCBzZXQgdGhpcyBzdWJzdGl0dXRpb24uCisrCisrCSogY29uZmlndXJlLmFjOiBDaGVjayBmb3Igc3RydWN0IHN0YXQgc3RfP3RpbSBtZW1iZXJzLgorKwkqIHNyYy9zdHJpcC5jIChwcm9jZXNzX2ZpbGUpOiBVc2Ugc3RfP3RpbWUgaWYgc3RfP3RpbSBhcmUgbm90IHRoZXJlLgorKworKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIGZ1dGltZXMgZnVuY3Rpb24uCisrCSogc3JjL3N0cmlwLmMgKGhhbmRsZV9lbGYpIFshIEhBVkVfRlVUSU1FU106IFVzZSB1dGltZXMgaW5zdGVhZC4KKysJKGhhbmRsZV9hcikgWyEgSEFWRV9GVVRJTUVTXTogTGlrZXdpc2UuCisrCisgMjAwNS0wNS0xOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBjb25maWd1cmUuYWMgW0FIX0JPVFRPTV0gKElOVERFQ0wsIF9JTlRERUNMKTogTmV3IG1hY3Jvcy4KK2RpZmYgLS1naXQgYS9iYWNrZW5kcy9DaGFuZ2VMb2cgYi9iYWNrZW5kcy9DaGFuZ2VMb2cKK2luZGV4IGZlNjFkOWMuLjk1OTk2MjMgMTAwNjQ0CistLS0gYS9iYWNrZW5kcy9DaGFuZ2VMb2cKKysrKyBiL2JhY2tlbmRzL0NoYW5nZUxvZworQEAgLTQ5OCw2ICs0OTgsMTAgQEAKKyAJKiBwcGNfYXR0cnMuYyAocHBjX2NoZWNrX29iamVjdF9hdHRyaWJ1dGUpOiBIYW5kbGUgdGFnCisgCUdOVV9Qb3dlcl9BQklfU3RydWN0X1JldHVybi4KKyAKKysyMDA5LTAxLTIzICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIE1ha2VmaWxlLmFtIChsaWJlYmxfJS5zbyk6IFVzZSAkKExEX0FTX05FRURFRCkuCisrCisgMjAwOC0xMC0wNCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogaTM4Nl9yZWxvYy5kZWY6IEZpeCBlbnRyaWVzIGZvciBUTFNfR09UREVTQywgVExTX0RFU0NfQ0FMTCwgYW5kCitAQCAtODI1LDYgKzgyOSwxMSBAQAorIAkqIHNwYXJjX2luaXQuYzogTGlrZXdpc2UuCisgCSogeDg2XzY0X2luaXQuYzogTGlrZXdpc2UuCisgCisrMjAwNS0xMS0yMiAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoTERfQVNfTkVFREVEKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShsaWJlYmxfJS5zbyBydWxlKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XbCwtLWFzLW5lZWRlZC4KKysKKyAyMDA1LTExLTE5ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHBwYzY0X3JlbG9jLmRlZjogUkVMMzAgLT4gQUREUjMwLgorQEAgLTg0Nyw2ICs4NTYsOSBAQAorIAkqIE1ha2VmaWxlLmFtICh1bmluc3RhbGwpOiBEb24ndCB0cnkgdG8gcmVtb3ZlICQocGtnaW5jbHVkZWRpcikuCisgCShDTEVBTkZJTEVTKTogQWRkIGxpYmVibF8kKG0pLnNvLgorIAorKwkqIE1ha2VmaWxlLmFtIChXRVhUUkEpOiBOZXcgdmFyaWFibGUsIHN1YnN0aXR1dGVkIGJ5IGNvbmZpZ3VyZS4KKysJKEFNX0NGTEFHUyk6IFVzZSBpdCBpbiBwbGFjZSBvZiAtV2V4dHJhLgorKworIAkqIHBwY19yZWxvYy5kZWY6IFVwZGF0ZSBiaXRzIHBlciBBbGFuIE1vZHJhIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+LgorIAkqIHBwYzY0X3JlbG9jLmRlZjogTGlrZXdpc2UuCisgCitkaWZmIC0tZ2l0IGEvYmFja2VuZHMvTWFrZWZpbGUuYW0gYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQoraW5kZXggMjFkN2JkMi4uZmU5MjBjOSAxMDA2NDQKKy0tLSBhL2JhY2tlbmRzL01ha2VmaWxlLmFtCisrKysgYi9iYWNrZW5kcy9NYWtlZmlsZS5hbQorQEAgLTExOSw3ICsxMTksNyBAQCBsaWJlYmxfJS5zbyBsaWJlYmxfJS5tYXA6IGxpYmVibF8lX3BpYy5hICQobGliZWxmKSAkKGxpYmR3KQorIAkkKExJTkspIC1zaGFyZWQgLW8gJChAOi5tYXA9LnNvKSBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQ8ICQoY3B1XyQqKSAtV2wsLS1uby13aG9sZS1hcmNoaXZlIFwKKyAJCS1XbCwtLXZlcnNpb24tc2NyaXB0LCQoQDouc289Lm1hcCkgXAorLQkJLVdsLC16LGRlZnMgLVdsLC0tYXMtbmVlZGVkICQobGliZWxmKSAkKGxpYmR3KQorKwkJLVdsLC16LGRlZnMgJChMRF9BU19ORUVERUQpICQobGliZWxmKSAkKGxpYmR3KQorIAlAJCh0ZXh0cmVsX2NoZWNrKQorIAorIGxpYmVibF9pMzg2LnNvOiAkKGNwdV9pMzg2KQorZGlmZiAtLWdpdCBhL2NvbmZpZy9DaGFuZ2VMb2cgYi9jb25maWcvQ2hhbmdlTG9nCitpbmRleCA2NGI1OGUxLi42M2IzZTkwIDEwMDY0NAorLS0tIGEvY29uZmlnL0NoYW5nZUxvZworKysrIGIvY29uZmlnL0NoYW5nZUxvZworQEAgLTEwNiw2ICsxMDYsMTAgQEAKKyAKKyAJKiBrbm93bi1kd2FyZi5hd2s6IFVzZSBnYXdrLgorIAorKzIwMTEtMTAtMDggIE1pa2UgRnJ5c2luZ2VyICA8dmFwaWVyQGdlbnRvby5vcmc+CisrCisrCSogZXUuYW0gW0JVSUxEX1dFUlJPUl06IENvbmRpdGlvbmFsaXplIC1XZXJyb3IgdXNlIG9uIHRoaXMuCisrCisgMjAxMC0wNy0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmdXRpbHMuc3BlYy5pbjogQWRkIG1vcmUgQnVpbGRSZXF1aXJlcy4KK2RpZmYgLS1naXQgYS9jb25maWcvZXUuYW0gYi9jb25maWcvZXUuYW0KK2luZGV4IDcwZDMyZGUuLjY1YWYwODUgMTAwNjQ0CistLS0gYS9jb25maWcvZXUuYW0KKysrKyBiL2NvbmZpZy9ldS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgQ29tbW9uIGF1dG9tYWtlIGZyYWdtZW50cyBmb3IgZWxmdXRpbHMgc3ViZGlyZWN0b3J5IG1ha2VmaWxlcy4KKyAjIworLSMjIENvcHlyaWdodCAoQykgMjAxMCwgMjAxNCBSZWQgSGF0LCBJbmMuCisrIyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEsIDIwMTQgUmVkIEhhdCwgSW5jLgorICMjCisgIyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisgIyMKK0BAIC0yOSw2ICsyOSw5IEBACisgIyMgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICMjCisgCisrV0VYVFJBID0gQFdFWFRSQUAKKytMRF9BU19ORUVERUQgPSBATERfQVNfTkVFREVEQAorKworIERFRlMgPSAtRF9HTlVfU09VUkNFIC1ESEFWRV9DT05GSUdfSCAtRExPQ0FMRURJUj0nIiR7bG9jYWxlZGlyfSInCisgQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9zcmNkaXIpL2xpYiAtSS4uCisgCitAQCAtMzgsMTIgKzQxLDE3IEBAIFNUQUNLX1VTQUdFX1dBUk5JTkc9LVdzdGFjay11c2FnZT0yNjIxNDQKKyBlbHNlCisgU1RBQ0tfVVNBR0VfV0FSTklORz0KKyBlbmRpZgorLUFNX0NGTEFHUyA9IC1zdGQ9Z251OTkgLVdhbGwgLVdzaGFkb3cgLVdmb3JtYXQ9MiBcCisrQU1fQ0ZMQUdTID0gLXN0ZD1nbnU5OSAtV2FsbCAtV3NoYWRvdyBcCisgCSAgICAkKGlmICQoJCgqRilfbm9fV2Vycm9yKSwsLVdlcnJvcikgXAorLQkgICAgJChpZiAkKCQoKkYpX25vX1d1bnVzZWQpLCwtV3VudXNlZCAtV2V4dHJhKSBcCisrCSAgICAkKGlmICQoJCgqRilfbm9fV3VudXNlZCksLC1XdW51c2VkICQoV0VYVFJBKSkgXAorKwkgICAgJChpZiAkKCQoKkYpX25vX1dmb3JtYXQpLC1Xbm8tZm9ybWF0LC1XZm9ybWF0PTIpIFwKKyAJICAgICQoaWYgJCgkKCpGKV9ub19Xc3RhY2tfdXNhZ2UpLCwkKFNUQUNLX1VTQUdFX1dBUk5JTkcpKSBcCisgCSAgICAkKCQoKkYpX0NGTEFHUykKKyAKKytpZiBCVUlMRF9XRVJST1IKKytBTV9DRkxBR1MgKz0gJChpZiAkKCQoKkYpX25vX1dlcnJvciksLC1XZXJyb3IpCisrZW5kaWYKKysKKyBDT01QSUxFLm9zID0gJChmaWx0ZXItb3V0IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSwgJChDT01QSUxFKSkKKyAKKyBERUZTLm9zID0gLURQSUMgLURTSEFSRUQKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJjOWZmNTYuLjI3YTFlZjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNiw2ICsxMDYsNTUgQEAgQ0ZMQUdTPSIkb2xkX0NGTEFHUyJdKQorIEFTX0lGKFt0ZXN0ICJ4JGFjX2N2X2M5OSIgIT0geHllc10sCisgICAgICAgQUNfTVNHX0VSUk9SKFtnY2Mgd2l0aCBHTlU5OSBzdXBwb3J0IHJlcXVpcmVkXSkpCisgCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtV2V4dHJhIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY193ZXh0cmEsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtV2V4dHJhIgorK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbdm9pZCBmb28gKHZvaWQpIHsgfV0pXSwKKysJCSAgYWNfY3ZfY2Nfd2V4dHJhPXllcywgYWNfY3ZfY2Nfd2V4dHJhPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBQ19TVUJTVChXRVhUUkEpCisrQVNfSUYoW3Rlc3QgIngkYWNfY3ZfY2Nfd2V4dHJhIiA9IHh5ZXNdLCBbV0VYVFJBPS1XZXh0cmFdLCBbV0VYVFJBPS1XXSkKKysKKytBQ19DQUNIRV9DSEVDSyhbZm9yIC1mZ251ODktaW5saW5lIG9wdGlvbiB0byAkQ0NdLCBhY19jdl9jY19nbnU4OV9pbmxpbmUsIFtkbmwKKytvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorK0NGTEFHUz0iJENGTEFHUyAtZmdudTg5LWlubGluZSAtV2Vycm9yIgorK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCisrdm9pZCBmb28gKHZvaWQpCisreworKyAgaW5saW5lIHZvaWQgYmFyICh2b2lkKSB7fQorKyAgYmFyICgpOworK30KKytleHRlcm4gaW5saW5lIHZvaWQgYmF6ICh2b2lkKSB7fQorK10pXSwgYWNfY3ZfY2NfZ251ODlfaW5saW5lPXllcywgYWNfY3ZfY2NfZ251ODlfaW5saW5lPW5vKQorK0NGTEFHUz0iJG9sZF9DRkxBR1MiXSkKKytBU19JRihbdGVzdCAieCRhY19jdl9jY19nbnU4OV9pbmxpbmUiID0geHllc10sCisrICAgICAgW1dFWFRSQT0iJHtXRVhUUkE6KyRXRVhUUkEgfS1mZ251ODktaW5saW5lIl0pCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtLWFzLW5lZWRlZCBsaW5rZXIgb3B0aW9uXSwKKysJICAgICAgIGFjX2N2X2FzX25lZWRlZCwgW2RubAorK2NhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKytpbnQgbWFpbiAodm9pZCkgeyByZXR1cm4gMDsgfQorK0VPRgorK2lmIEFDX1RSWV9DT01NQU5EKFske0NDLWNjfSAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUworKwkJCSAgICAtZlBJQyAtc2hhcmVkIC1vIGNvbmZ0ZXN0LnNvIGNvbmZ0ZXN0LmMKKysJCQkgICAgLVdsLC0tYXMtbmVlZGVkIDE+JkFTX01FU1NBR0VfTE9HX0ZEXSkKKyt0aGVuCisrICBhY19jdl9hc19uZWVkZWQ9eWVzCisrZWxzZQorKyAgYWNfY3ZfYXNfbmVlZGVkPW5vCisrZmkKKytybSAtZiBjb25mdGVzdCpdKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X2FzX25lZWRlZCIgPSB4eWVzXSwKKysgICAgICBbTERfQVNfTkVFREVEPS1XbCwtLWFzLW5lZWRlZF0sIFtMRF9BU19ORUVERUQ9XSkKKytBQ19TVUJTVChMRF9BU19ORUVERUQpCisrCisrQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2J1aWx0aW5fcG9wY291bnRdLCBhY19jdl9wb3Bjb3VudCwgW2RubAorK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtbZXhpdCAoX19idWlsdGluX3BvcGNvdW50ICgxMjcpKTtdXSldLAorKwkgICAgICAgYWNfY3ZfcG9wY291bnQ9eWVzLCBhY19jdl9wb3Bjb3VudD1ubyldKQorK0FTX0lGKFt0ZXN0ICJ4JGFjX2N2X3BvcGNvdW50IiA9IHh5ZXNdLAorKyAgICAgIFtBQ19ERUZJTkUoW0hBVkVfQlVJTFRJTl9QT1BDT1VOVF0sIFsxXSwgW0hhdmUgX19idWlsdGluX3BvcGNvdW50Ll0pXSkKKysKKysKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIF9fdGhyZWFkIHN1cHBvcnRdLCBhY19jdl90bHMsIFtkbmwKKyAjIFVzZSB0aGUgc2FtZSBmbGFncyB0aGF0IHdlIHVzZSBmb3Igb3VyIERTT3MsIHNvIHRoZSB0ZXN0IGlzIHJlcHJlc2VudGF0aXZlLgorICMgU29tZSBvbGQgY29tcGlsZXIvbGlua2VyL2xpYmMgY29tYmluYXRpb25zIGZhaWwgc29tZSB3YXlzIGFuZCBub3Qgb3RoZXJzLgorQEAgLTEyMiw3ICsxNzEsMTAgQEAgc3RhdGljIF9fdGhyZWFkIGludCBhOyBpbnQgZm9vIChpbnQgYikgeyByZXR1cm4gYSArIGI7IH1dXSwKKyBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfdGxzIiAhPSB4eWVzXSwKKy0gICAgICBBQ19NU0dfRVJST1IoW19fdGhyZWFkIHN1cHBvcnQgcmVxdWlyZWRdKSkKKysgICAgICBbQVNfSUYoW3Rlc3QgIiR1c2VfbG9ja3MiID0geWVzXSwKKysJICAgICBbQUNfTVNHX0VSUk9SKFstLWVuYWJsZS10aHJlYWQtc2FmZXR5IHJlcXVpcmVzIF9fdGhyZWFkIHN1cHBvcnRdKV0sCisrCSAgICAgW0FDX0RFRklORShbX190aHJlYWRdLCBbLyogZW1wdHk6IG5vIG11bHRpLXRocmVhZCBzdXBwb3J0ICovXSwKKysJCQlbU3R1YmJlZCBvdXQgaWYgbWlzc2luZyBjb21waWxlciBzdXBwb3J0Ll0pXSldKQorIAorIGRubCBUaGlzIHRlc3QgbXVzdCBjb21lIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVyIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uCisgZG5sIHRlc3RzLCBiZWNhdXNlIHRoZSBjaG9pY2Ugb2YgdGhlIGZpbGUgbW9kZWwgY2FuIChpbiBwcmluY2lwbGUpIGFmZmVjdAorQEAgLTIyNCw2ICsyNzYsMTEgQEAgQU1fQ09ORElUSU9OQUwoVVNFX1ZBTEdSSU5ELCB0ZXN0ICIkdXNlX3ZhbGdyaW5kIiA9IHllcykKKyBBTV9DT05ESVRJT05BTChCVUlMRF9TVEFUSUMsIFtkbmwKKyB0ZXN0ICIkdXNlX2dwcm9mIiA9IHllcyAtbyAiJHVzZV9nY292IiA9IHllc10pCisgCisrQUNfQVJHX0VOQUJMRShbd2Vycm9yXSwKKytBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXdlcnJvcl0sW2RvIG5vdCBidWlsZCB3aXRoIC1XZXJyb3JdKSwKKysJICAgICAgIFtlbmFibGVfd2Vycm9yPSRlbmFibGV2YWxdLCBbZW5hYmxlX3dlcnJvcj15ZXNdKQorK0FNX0NPTkRJVElPTkFMKEJVSUxEX1dFUlJPUiwgdGVzdCAiJGVuYWJsZV93ZXJyb3IiID0geWVzKQorKworIEFDX0FSR19FTkFCTEUoW3Rlc3RzLXJwYXRoXSwKKyBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtdGVzdHMtcnBhdGhdLFtidWlsZCAkT1JJR0lOLXVzaW5nIHJwYXRoIGludG8gdGVzdHNdKSwKKyAJICAgICAgIFt0ZXN0c191c2VfcnBhdGg9JGVuYWJsZXZhbF0sIFt0ZXN0c191c2VfcnBhdGg9bm9dKQorQEAgLTM4OCw3ICs0NDUsNyBAQCBjYXNlICIkZXVfdmVyc2lvbiIgaW4KKyBlc2FjCisgCisgIyBSb3VuZCB1cCB0byB0aGUgbmV4dCByZWxlYXNlIEFQSSAoeC55KSB2ZXJzaW9uLgorLWV1X3ZlcnNpb249JCgoIChldV92ZXJzaW9uICsgOTk5KSAvIDEwMDAgKSkKKytldV92ZXJzaW9uPWBleHByIFwoICRldV92ZXJzaW9uICsgOTk5IFwpIC8gMTAwMGAKKyAKKyBkbmwgVW5pcXVlIElEIGZvciB0aGlzIGJ1aWxkLgorIE1PRFZFUlNJT049IkJ1aWxkIGZvciAke0xJQkVCTF9TVUJESVJ9ICR7ZXVfdmVyc2lvbn0gJHthY19jdl9idWlsZH0iCitkaWZmIC0tZ2l0IGEvbGliL0NoYW5nZUxvZyBiL2xpYi9DaGFuZ2VMb2cKK2luZGV4IGQwNGJmMTcuLjcyMGM5OGQgMTAwNjQ0CistLS0gYS9saWIvQ2hhbmdlTG9nCisrKysgYi9saWIvQ2hhbmdlTG9nCitAQCAtNzMsNiArNzMsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogZXUtY29uZmlnLmggWyEgSEFWRV9CVUlMVElOX1BPUENPVU5UXQorKwkoX19idWlsdGluX3BvcGNvdW50KTogTmV3IGlubGluZSBmdW5jdGlvbi4KKysKKyAJKiBldS1jb25maWcuaDogQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uLgorIAorIDIwMDktMDEtMTcgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorQEAgLTEyOSw2ICsxMzIsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAobGliZXVfYV9TT1VSQ0VTKTogQWRkIGl0LgorIAkqIHN5c3RlbS5oOiBEZWNsYXJlIGNyYzMyX2ZpbGUuCisgCisrMjAwNS0wMi0wNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA0LTMwICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBNYWtlZmlsZS5hbTogVXNlIC1mZnVuY3Rpb24tc2VjdGlvbnMgZm9yIHhtYWxsb2MuYy4KK2RpZmYgLS1naXQgYS9saWIvZXUtY29uZmlnLmggYi9saWIvZXUtY29uZmlnLmgKK2luZGV4IDQwMGNkYzYuLjg3MmY2YmMgMTAwNjQ0CistLS0gYS9saWIvZXUtY29uZmlnLmgKKysrKyBiL2xpYi9ldS1jb25maWcuaAorQEAgLTE2Myw2ICsxNjMsMTYgQEAgYXNtICgiLnNlY3Rpb24gcHJlZGljdF9kYXRhLCBcImF3XCI7IC5wcmV2aW91c1xuIgorIC8qIFRoaXMgbWFjcm8gaXMgdXNlZCBieSB0aGUgdGVzdHMgY29uZGl0aW9uYWxpemUgZm9yIHN0YW5kYWxvbmUgYnVpbGRpbmcuICAqLworICNkZWZpbmUgRUxGVVRJTFNfSEVBREVSKG5hbWUpIDxsaWIjI25hbWUuaD4KKyAKKysjaWZuZGVmIEhBVkVfQlVJTFRJTl9QT1BDT1VOVAorKyMgZGVmaW5lIF9fYnVpbHRpbl9wb3Bjb3VudCBoYWttZW1fcG9wY291bnQKKytzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkKKytoYWttZW1fcG9wY291bnQgKHVuc2lnbmVkIGludCB4KQorK3sKKysgIC8qIEhBS01FTSAxNjkgKi8KKysgIHVuc2lnbmVkIGludCBuID0geCAtICgoeCA+PiAxKSAmIDAzMzMzMzMzMzMzMykgLSAoKHggPj4gMikgJiAwMTExMTExMTExMTEpOworKyAgcmV0dXJuICgobiArIChuID4+IDMpKSAmIDAzMDcwNzA3MDcwNykgJSA2MzsKKyt9CisrI2VuZGlmCS8qIEhBVkVfQlVJTFRJTl9QT1BDT1VOVCAqLworIAorICNpZmRlZiBTWU1CT0xfVkVSU0lPTklORworICMgZGVmaW5lIE9MRF9WRVJTSU9OKG5hbWUsIHZlcnNpb24pIFwKK2RpZmYgLS1naXQgYS9saWJhc20vQ2hhbmdlTG9nIGIvbGliYXNtL0NoYW5nZUxvZworaW5kZXggOWIyNWFmOS4uMzJiOWZkMCAxMDA2NDQKKy0tLSBhL2xpYmFzbS9DaGFuZ2VMb2cKKysrKyBiL2xpYmFzbS9DaGFuZ2VMb2cKK0BAIC04Nyw2ICs4NywxMSBAQAorIAkqIGFzbV9lcnJvci5jOiBBZGQgbmV3IGVycm9yIEFTTV9FX0lPRVJST1IuCisgCSogbGliYXNtUC5oOiBBZGQgQVNNX0VfSU9FUlJPUiBkZWZpbml0aW9uLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wMi0xNSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IEFkZCAtV3VudXNlZCAtV2V4dHJhIC1XZm9ybWF0PTIuCitkaWZmIC0tZ2l0IGEvbGliY3B1L0NoYW5nZUxvZyBiL2xpYmNwdS9DaGFuZ2VMb2cKK2luZGV4IGEyMGY0NDAuLjVlYTIzYjcgMTAwNjQ0CistLS0gYS9saWJjcHUvQ2hhbmdlTG9nCisrKysgYi9saWJjcHUvQ2hhbmdlTG9nCitAQCAtNTEsNiArNTEsOSBAQAorIAorIDIwMDktMDEtMjMgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisrCSogaTM4Nl9kaXNhc20uYyAoaTM4Nl9kaXNhc20pOiBBZGQgYWJvcnQgYWZ0ZXIgYXNzZXJ0LWNvbnN0YW50IGZvciBvbGQKKysJY29tcGlsZXJzIHRoYXQgZG9uJ3QgcmVhbGl6ZSBpdCdzIG5vcmV0dXJuLgorKworIAkqIE1ha2VmaWxlLmFtIChpMzg2X3BhcnNlX0NGTEFHUyk6IFVzZSBxdW90ZXMgYXJvdW5kIGNvbW1hbmQKKyAJc3Vic3RpdHV0aW9uIHRoYXQgY2FuIHByb2R1Y2UgbGVhZGluZyB3aGl0ZXNwYWNlLgorIAorQEAgLTM4MCw2ICszODMsMTEgQEAKKyAJKiBkZWZzL2kzODYuZG9jOiBOZXcgZmlsZS4KKyAJKiBkZWZzL3g4Nl82NDogTmV3IGZpbGUuCisgCisrMjAwNS0wNC0wNCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW5zdGVhZCBvZiAtV2V4dHJhLgorKworIDIwMDUtMDItMTUgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckByZWRoYXQuY29tPgorIAorIAkqIE1ha2VmaWxlIChBTV9DRkxBR1MpOiBBZGQgLVd1bnVzZWQgLVdleHRyYSAtV2Zvcm1hdD0yLgorZGlmZiAtLWdpdCBhL2xpYmNwdS9pMzg2X2Rpc2FzbS5jIGIvbGliY3B1L2kzODZfZGlzYXNtLmMKK2luZGV4IDgzMjI0MWYuLmM3YTBkZjAgMTAwNjQ0CistLS0gYS9saWJjcHUvaTM4Nl9kaXNhc20uYworKysrIGIvbGliY3B1L2kzODZfZGlzYXNtLmMKK0BAIC04MjIsNiArODIyLDcgQEAgaTM4Nl9kaXNhc20gKGNvbnN0IHVpbnQ4X3QgKipzdGFydHAsIGNvbnN0IHVpbnQ4X3QgKmVuZCwgR0VsZl9BZGRyIGFkZHIsCisgCisgCQkJZGVmYXVsdDoKKyAJCQkgIGFzc2VydCAoISAiSU5WQUxJRCBub3QgaGFuZGxlZCIpOworKwkJCSAgYWJvcnQgKCk7CisgCQkJfQorIAkJICAgIH0KKyAJCSAgZWxzZQorZGlmZiAtLWdpdCBhL2xpYmR3L0NoYW5nZUxvZyBiL2xpYmR3L0NoYW5nZUxvZworaW5kZXggNDg3ZTM0YS4uMDZjNzM3YiAxMDA2NDQKKy0tLSBhL2xpYmR3L0NoYW5nZUxvZworKysrIGIvbGliZHcvQ2hhbmdlTG9nCitAQCAtODg5LDYgKzg4OSwxMCBAQAorIAorIAkqIE1ha2VmaWxlLmFtIChrbm93bi1kd2FyZi5oKTogUnVuIGdhd2sgb24gY29uZmlnL2tub3duLWR3YXJmLmF3ay4KKyAKKysyMDExLTA3LTIwICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisrCisrCSogZHdhcmZfYmVnaW5fZWxmLmM6IEFkZCBmYWxsYmFjayBmb3IgYmU2NHRvaCBpZiBub3QgZGVmaW5lZC4KKysKKyAyMDExLTA3LTE0ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCisgCSogbGliZHcuaCAoZHdhcmZfb2ZmZGllKTogRml4IGRvY3VtZW50YXRpb24gdG8gbWVudGlvbiAuZGVidWdfaW5mby4KK0BAIC0xMjQ4LDYgKzEyNTIsMTAgQEAKKyAKKyAJKiBkd2FyZl9oYXNhdHRyX2ludGVncmF0ZS5jOiBJbnRlZ3JhdGUgRFdfQVRfc3BlY2lmaWNhdGlvbiB0b28uCisgCisrMjAwOS0wOC0xNyAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBsaWJkdy5oOiBEaXNhYmxlIGV4dGVybiBpbmxpbmVzIGZvciBHQ0MgNC4yLgorKworIDIwMDktMDgtMTAgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisgCisgCSogZHdhcmZfZ2V0c2NvcGV2YXIuYzogVXNlIGR3YXJmX2RpZW5hbWUuCitAQCAtMjAxNiw2ICsyMDI0LDExIEBACisgCisgMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA1LTMxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIGR3YXJmX2Zvcm1yZWZfZGllLmMgKGR3YXJmX2Zvcm1yZWZfZGllKTogQWRkIENVIGhlYWRlciBvZmZzZXQgdG8KKyAJZm9ybXJlZiBvZmZzZXQuCisgCitkaWZmIC0tZ2l0IGEvbGliZHcvZHdhcmZfYmVnaW5fZWxmLmMgYi9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworaW5kZXggNGUwZDU5MC4uYTY2MTZhMSAxMDA2NDQKKy0tLSBhL2xpYmR3L2R3YXJmX2JlZ2luX2VsZi5jCisrKysgYi9saWJkdy9kd2FyZl9iZWdpbl9lbGYuYworQEAgLTQ3LDYgKzQ3LDE0IEBACisgI2lmIFVTRV9aTElCCisgIyBpbmNsdWRlIDxlbmRpYW4uaD4KKyAjIGRlZmluZSBjcmMzMgkJbG9zZXJfY3JjMzIKKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKysjICBpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisrIyAgIGRlZmluZSBiZTY0dG9oKHgpIGJzd2FwXzY0ICh4KQorKyMgIGVsc2UKKysjICAgZGVmaW5lIGJlNjR0b2goeCkgKHgpCisrIyAgZW5kaWYKKysjIGVuZGlmCisgIyBpbmNsdWRlIDx6bGliLmg+CisgIyB1bmRlZiBjcmMzMgorICNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYmR3L2xpYmR3LmggYi9saWJkdy9saWJkdy5oCitpbmRleCA0NzNlMWEyLi41YTUxMWNkIDEwMDY0NAorLS0tIGEvbGliZHcvbGliZHcuaAorKysrIGIvbGliZHcvbGliZHcuaAorQEAgLTEwMDQsNyArMTAwNCw3IEBAIGV4dGVybiBEd2FyZl9PT00gZHdhcmZfbmV3X29vbV9oYW5kbGVyIChEd2FyZiAqZGJnLCBEd2FyZl9PT00gaGFuZGxlcik7CisgCisgCisgLyogSW5saW5lIG9wdGltaXphdGlvbnMuICAqLworLSNpZmRlZiBfX09QVElNSVpFX18KKysjaWYgZGVmaW5lZCBfX09QVElNSVpFX18gJiYgIShfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fID09IDIpCisgLyogUmV0dXJuIGF0dHJpYnV0ZSBjb2RlIG9mIGdpdmVuIGF0dHJpYnV0ZS4gICovCisgX19saWJkd19leHRlcm5faW5saW5lIHVuc2lnbmVkIGludAorIGR3YXJmX3doYXRhdHRyIChEd2FyZl9BdHRyaWJ1dGUgKmF0dHIpCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9DaGFuZ2VMb2cgYi9saWJkd2ZsL0NoYW5nZUxvZworaW5kZXggYTUyNTNlMi4uNTlhYmZhYyAxMDA2NDQKKy0tLSBhL2xpYmR3ZmwvQ2hhbmdlTG9nCisrKysgYi9saWJkd2ZsL0NoYW5nZUxvZworQEAgLTcwNCw2ICs3MDQsMjEgQEAKKyAJKGR3ZmxfbW9kdWxlX2FkZHJzeW0pIChpX3RvX3N5bWZpbGUpOiBOZXcgZnVuY3Rpb24uCisgCShkd2ZsX21vZHVsZV9hZGRyc3ltKSAoc2VhcmNoX3RhYmxlKTogVXNlIGl0LgorIAorKzIwMTMtMTEtMDkgIEphbiBLcmF0b2NodmlsICA8amFuLmtyYXRvY2h2aWxAcmVkaGF0LmNvbT4KKysKKysJT2xkZXIgT1MgY29tcGF0aWJpbGl0eSBiaXRzLgorKwkqIGxpbnV4LWNvcmUtYXR0YWNoLmMgKGJlNjR0b2gsIGxlNjR0b2gsIGJlMzJ0b2gsIGxlMzJ0b2gpOiBQcm92aWRlCisrCWZhbGxiYWNrcyBpZiBub3QgZGVmaW5lZCBieSBzeXN0ZW0uCisrCisrMjAxMy0xMS0wOSAgSmFuIEtyYXRvY2h2aWwgIDxqYW4ua3JhdG9jaHZpbEByZWRoYXQuY29tPgorKworKwlIYW5kbGUgVC1zdG9wcGVkIGRldGFjaCBmb3Igb2xkIGtlcm5lbHMuCisrCSogbGludXgtcGlkLWF0dGFjaC5jIChzdHJ1Y3QgcGlkX2FyZyk6IE5ldyBmaWVsZCBzdG9wcGVkLgorKwkocHRyYWNlX2F0dGFjaCk6IE5ldyBwYXJhbWV0ZXIgc3RvcHBlZHAuICBTZXQgaXQgYXBwcm9wcmlhdGVseS4KKysJKHBpZF9zZXRfaW5pdGlhbF9yZWdpc3RlcnMpOiBQYXNzIHRoZSBuZXcgZmllbGQuCisrCShwaWRfdGhyZWFkX2RldGFjaCk6IEhhbmRsZSB0aGUgY2FzZSBvZiBTVE9QUEVEIGZvciBvbGQga2VybmVscy4KKysJKF9fbGliZHdmbF9hdHRhY2hfc3RhdGVfZm9yX3BpZCk6IEluaXRpYWxpemUgU1RPUFBFRC4KKysKKyAyMDEzLTExLTA3ICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisgCSAgICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhhdC5jb20+CisgCitAQCAtMjQ2OSw2ICsyNDg0LDExIEBACisgCisgMjAwNS0wNy0yMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKysyMDA1LTA3LTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworIAkqIE1ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6IEFkZCBsb2MyYy5jLgorIAorIAkqIHRlc3QyLmMgKG1haW4pOiBDaGVjayBzc2NhbmYgcmVzdWx0IHRvIHF1aWV0IHdhcm5pbmcuCitkaWZmIC0tZ2l0IGEvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jIGIvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCitpbmRleCA1YTdiM2IzLi5kMDVhYzdlIDEwMDY0NAorLS0tIGEvbGliZHdmbC9saW51eC1jb3JlLWF0dGFjaC5jCisrKysgYi9saWJkd2ZsL2xpbnV4LWNvcmUtYXR0YWNoLmMKK0BAIC0yOSw2ICsyOSwzNSBAQAorICNpbmNsdWRlICJsaWJkd2ZsUC5oIgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlICJzeXN0ZW0uaCIKKysjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjIGlmbmRlZiBiZTY0dG9oCisrIyAgZGVmaW5lIGJlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGxlNjR0b2gKKysjICBkZWZpbmUgbGU2NHRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgYmUzMnRvaAorKyMgIGRlZmluZSBiZTMydG9oKHgpIGJzd2FwXzMyICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTMydG9oCisrIyAgZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrIyBlbmRpZgorKyNlbHNlCisrIyBpZm5kZWYgYmU2NHRvaAorKyMgIGRlZmluZSBiZTY0dG9oKHgpICh4KQorKyMgZW5kaWYKKysjIGlmbmRlZiBsZTY0dG9oCisrIyAgZGVmaW5lIGxlNjR0b2goeCkgYnN3YXBfNjQgKHgpCisrIyBlbmRpZgorKyMgaWZuZGVmIGJlMzJ0b2gKKysjICBkZWZpbmUgYmUzMnRvaCh4KSAoeCkKKysjIGVuZGlmCisrIyBpZm5kZWYgbGUzMnRvaAorKyMgIGRlZmluZSBsZTMydG9oKHgpIGJzd2FwXzMyICh4KQorKyMgZW5kaWYKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiLi4vbGliZHcvbWVtb3J5LWFjY2Vzcy5oIgorIAorZGlmZiAtLWdpdCBhL2xpYmR3ZmwvbGludXgtcGlkLWF0dGFjaC5jIGIvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK2luZGV4IGFlNzE3MDIuLjA3NmIyYzMgMTAwNjQ0CistLS0gYS9saWJkd2ZsL2xpbnV4LXBpZC1hdHRhY2guYworKysrIGIvbGliZHdmbC9saW51eC1waWQtYXR0YWNoLmMKK0BAIC0yNTUsNiArMjU1LDExIEBAIHZvaWQKKyBpbnRlcm5hbF9mdW5jdGlvbgorIF9fbGliZHdmbF9wdHJhY2VfZGV0YWNoIChwaWRfdCB0aWQsIGJvb2wgdGlkX3dhc19zdG9wcGVkKQorIHsKKysgIC8vIE9sZGVyIGtlcm5lbHMgKHRlc3RlZCBrZXJuZWwtMi42LjE4LTM0OC4xMi4xLmVsNS54ODZfNjQpIG5lZWQgc3BlY2lhbAorKyAgLy8gaGFuZGxpbmcgb2YgdGhlIGRldGFjaG1lbnQgdG8ga2VlcCB0aGUgcHJvY2VzcyBTdGF0ZTogVCAoc3RvcHBlZCkuCisrICBpZiAodGlkX3dhc19zdG9wcGVkKQorKyAgICBzeXNjYWxsIChfX05SX3RraWxsLCB0aWQsIFNJR1NUT1ApOworKworICAgLyogVGhpcyBoYW5kbGluZyBpcyBuZWVkZWQgb25seSBvbiBvbGRlciBMaW51eCBrZXJuZWxzIHN1Y2ggYXMKKyAgICAgIDIuNi4zMi0zNTguMjMuMi5lbDYucHBjNjQuICBMYXRlciBrZXJuZWxzIHN1Y2ggYXMKKyAgICAgIDMuMTEuNy0yMDAuZmMxOS54ODZfNjQgcmVtZW1iZXIgdGhlIFQgKHN0b3BwZWQpIHN0YXRlCitAQCAtMjYyLDYgKzI2NywxNSBAQCBfX2xpYmR3ZmxfcHRyYWNlX2RldGFjaCAocGlkX3QgdGlkLCBib29sIHRpZF93YXNfc3RvcHBlZCkKKyAgICAgIFBUUkFDRV9ERVRBQ0guICAqLworICAgcHRyYWNlIChQVFJBQ0VfREVUQUNILCB0aWQsIE5VTEwsCisgCSAgKHZvaWQgKikgKGludHB0cl90KSAodGlkX3dhc19zdG9wcGVkID8gU0lHU1RPUCA6IDApKTsKKysKKysgIGlmICh0aWRfd2FzX3N0b3BwZWQpCisrICAgIHsKKysgICAgICAvLyBXYWl0IHRpbGwgdGhlIFNJR1NUT1Agc2V0dGxlcyBkb3duLgorKyAgICAgIGludCBpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykKKysJaWYgKGxpbnV4X3Byb2NfcGlkX2lzX3N0b3BwZWQgKHRpZCkpCisrCSAgYnJlYWs7CisrICAgIH0KKyB9CisgCisgc3RhdGljIHZvaWQKK2RpZmYgLS1naXQgYS9saWJlYmwvQ2hhbmdlTG9nIGIvbGliZWJsL0NoYW5nZUxvZworaW5kZXggNTFhZTYwZi4uYWVlMDIxNyAxMDA2NDQKKy0tLSBhL2xpYmVibC9DaGFuZ2VMb2cKKysrKyBiL2xpYmVibC9DaGFuZ2VMb2cKK0BAIC03ODAsNiArNzgwLDExIEBACisgCSogTWFrZWZpbGUuYW0gKGxpYmVibF8qX3NvX1NPVVJDRVMpOiBTZXQgdG8gJCgqX1NSQ1MpIHNvIGRlcGVuZGVuY3kKKyAJdHJhY2tpbmcgd29ya3MgcmlnaHQuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBsaWJlYmxfeDg2XzY0Lm1hcDogQWRkIHg4Nl82NF9jb3JlX25vdGUuCitkaWZmIC0tZ2l0IGEvbGliZWxmL0NoYW5nZUxvZyBiL2xpYmVsZi9DaGFuZ2VMb2cKK2luZGV4IDMwMDE3Y2QuLjljYTljNzMgMTAwNjQ0CistLS0gYS9saWJlbGYvQ2hhbmdlTG9nCisrKysgYi9saWJlbGYvQ2hhbmdlTG9nCitAQCAtMzk4LDYgKzM5OCwxMSBAQAorIAorIAkqIGVsZi1rbm93bGVkZ2UuaCAoU0VDVElPTl9TVFJJUF9QKTogUmVtb3ZlIDwgU0hUX05VTSBjaGVjay4KKyAKKysyMDExLTAzLTEwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIGdudWhhc2hfeGxhdGUuaCAoZWxmX2N2dF9nbnVoYXNoKTogQXZvaWQgcG9zdC1pbmNyZW1lbnQgaW4gYnN3YXBfMzIKKysJYXJndW1lbnQsIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb25zIGFyZSBidWdneSBtYWNyb3MuCisrCisgMjAxMS0wMi0yNiAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorIAorIAkqIGVsZl9lbmQuYyAoZWxmX2VuZCk6IENhbGwgcndsb2NrX3VubG9jayBiZWZvcmUgcndsb2NrX2ZpbmkuCitAQCAtMTA3NSw2ICsxMDgwLDExIEBACisgCisgCSogZWxmLmg6IFVwZGF0ZSBmcm9tIGdsaWJjLgorIAorKzIwMDUtMDUtMzEgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogTWFrZWZpbGUuYW0gKFdFWFRSQSk6IE5ldyB2YXJpYWJsZSwgc3Vic3RpdHV0ZWQgYnkgY29uZmlndXJlLgorKwkoQU1fQ0ZMQUdTKTogVXNlIGl0IGluIHBsYWNlIG9mIC1XZXh0cmEuCisrCisgMjAwNS0wNS0wOCAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZfYmVnaW4uYyAocmVhZF9maWxlKSBbX01VREZMQVBdOiBEb24ndCB1c2UgbW1hcCBmb3Igbm93LgorZGlmZiAtLWdpdCBhL2xpYmVsZi9jb21tb24uaCBiL2xpYmVsZi9jb21tb24uaAoraW5kZXggNzQ0ZjFiYi4uMTg1ZWE1OSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9jb21tb24uaAorKysrIGIvbGliZWxmL2NvbW1vbi5oCitAQCAtMTM5LDcgKzEzOSw3IEBAIGxpYmVsZl9yZWxlYXNlX2FsbCAoRWxmICplbGYpCisgICAoVmFyKSA9IChzaXplb2YgKFZhcikgPT0gMQkJCQkJCSAgICAgIFwKKyAJICAgPyAodW5zaWduZWQgY2hhcikgKFZhcikJCQkJCSAgICAgIFwKKyAJICAgOiAoc2l6ZW9mIChWYXIpID09IDIJCQkJCQkgICAgICBcCistCSAgICAgID8gYnN3YXBfMTYgKFZhcikJCQkJCQkgICAgICBcCisrCSAgICAgID8gKHVuc2lnbmVkIHNob3J0IGludCkgYnN3YXBfMTYgKFZhcikJCQkgICAgICBcCisgCSAgICAgIDogKHNpemVvZiAoVmFyKSA9PSA0CQkJCQkgICAgICBcCisgCQkgPyBic3dhcF8zMiAoVmFyKQkJCQkJICAgICAgXAorIAkJIDogYnN3YXBfNjQgKFZhcikpKSkKK0BAIC0xNDgsNyArMTQ4LDcgQEAgbGliZWxmX3JlbGVhc2VfYWxsIChFbGYgKmVsZikKKyAgIChEc3QpID0gKHNpemVvZiAoVmFyKSA9PSAxCQkJCQkJICAgICAgXAorIAkgICA/ICh1bnNpZ25lZCBjaGFyKSAoVmFyKQkJCQkJICAgICAgXAorIAkgICA6IChzaXplb2YgKFZhcikgPT0gMgkJCQkJCSAgICAgIFwKKy0JICAgICAgPyBic3dhcF8xNiAoVmFyKQkJCQkJCSAgICAgIFwKKysJICAgICAgPyAodW5zaWduZWQgc2hvcnQgaW50KSBic3dhcF8xNiAoVmFyKQkJCSAgICAgIFwKKyAJICAgICAgOiAoc2l6ZW9mIChWYXIpID09IDQJCQkJCSAgICAgIFwKKyAJCSA/IGJzd2FwXzMyIChWYXIpCQkJCQkgICAgICBcCisgCQkgOiBic3dhcF82NCAoVmFyKSkpKQorZGlmZiAtLWdpdCBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmggYi9saWJlbGYvZ251aGFzaF94bGF0ZS5oCitpbmRleCAwNGQ5Y2ExLi4zZTI1OTM2IDEwMDY0NAorLS0tIGEvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorKysrIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAorQEAgLTEsNSArMSw1IEBACisgLyogQ29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIHZlcnNpb25pbmcgaW5mb3JtYXRpb24uCistICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFJlZCBIYXQsIEluYy4KKysgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBSZWQgSGF0LCBJbmMuCisgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisgICAgV3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckByZWRoYXQuY29tPiwgMjAwNi4KKyAKK0BAIC02OSw3ICs2OSw5IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgZGVzdDMyID0gKEVsZjMyX1dvcmQgKikgJmRlc3Q2NFtiaXRtYXNrX3dvcmRzXTsKKyAgIHdoaWxlIChsZW4gPj0gNCkKKyAgICAgeworLSAgICAgICpkZXN0MzIrKyA9IGJzd2FwXzMyICgqc3JjMzIrKyk7CisrICAgICAgKmRlc3QzMiA9IGJzd2FwXzMyICgqc3JjMzIpOworKyAgICAgICsrZGVzdDMyOworKyAgICAgICsrc3JjMzI7CisgICAgICAgbGVuIC09IDQ7CisgICAgIH0KKyB9CitkaWZmIC0tZ2l0IGEvc3JjL0NoYW5nZUxvZyBiL3NyYy9DaGFuZ2VMb2cKK2luZGV4IDE1ZTZmYWUuLjc4NTM1YzggMTAwNjQ0CistLS0gYS9zcmMvQ2hhbmdlTG9nCisrKysgYi9zcmMvQ2hhbmdlTG9nCitAQCAtMTU5OCw4ICsxNTk4LDE2IEBACisgCSogcmVhZGVsZi5jIChhdHRyX2NhbGxiYWNrKTogVXNlIHByaW50X2Jsb2NrIG9ubHkgd2hlbiB3ZSBkb24ndCB1c2UKKyAJcHJpbnRfb3BzLgorIAorKzIwMDktMDgtMTcgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogbGQuaDogRGlzYWJsZSBleHRlcm4gaW5saW5lcyBmb3IgR0NDIDQuMi4KKysKKyAyMDA5LTA4LTE0ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIHN0cmluZ3MuYyAocmVhZF9ibG9jayk6IENvbmRpdGlvbmFsaXplIHBvc2l4X2ZhZHZpc2UgdXNlCisrCW9uIFtQT1NJWF9GQURWX1NFUVVFTlRJQUxdLgorKwlGcm9tIFBldHIgU2FsaW5nZXIgPFBldHIuU2FsaW5nZXJAc2V6bmFtLmN6Pi4KKysKKyAJKiBhci5jIChkb19vcGVyX2V4dHJhY3QpOiBVc2UgcGF0aGNvbmYgaW5zdGVhZCBvZiBzdGF0ZnMuCisgCisgMjAwOS0wOC0wMSAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CitAQCAtMTc2Myw2ICsxNzcxLDggQEAKKyAJKiByZWFkZWxmLmMgKHByaW50X2RlYnVnX2ZyYW1lX3NlY3Rpb24pOiBVc2UgdCBpbnN0ZWFkIG9mIGogZm9ybWF0cworIAlmb3IgcHRyZGlmZl90IE9GRlNFVC4KKyAKKysJKiBhZGRyMmxpbmUuYyAoaGFuZGxlX2FkZHJlc3MpOiBVc2UgJWEgaW5zdGVhZCBvZiAlbSBmb3IgY29tcGF0aWJpbGl0eS4KKysKKyAyMDA5LTAxLTIxICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBlbGZsaW50LmMgKGNoZWNrX3Byb2dyYW1faGVhZGVyKTogRml4IHR5cG8gaW4gLmVoX2ZyYW1lX2hkciBzZWN0aW9uCitAQCAtMTk0Niw2ICsxOTU2LDExIEBACisgCXRoYXQgbWF0Y2hlcyBpdHMgUFRfTE9BRCdzIHBfZmxhZ3MgJn4gUEZfVy4gIE9uIHNwYXJjLCBQRl9YIHJlYWxseQorIAlpcyB2YWxpZCBpbiBSRUxSTy4KKyAKKysyMDA4LTAzLTAxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorKworKwkqIHJlYWRlbGYuYyAoZHVtcF9hcmNoaXZlX2luZGV4KTogVHdlYWsgcG9ydGFiaWxpdHkgaGFjaworKwl0byBtYXRjaCBbX19HTlVDX18gPCA0XSB0b28uCisrCisgMjAwOC0wMi0yOSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKyAKKyAJKiByZWFkZWxmLmMgKHByaW50X2F0dHJpYnV0ZXMpOiBBZGQgYSBjYXN0LgorQEAgLTIxOTcsNiArMjIxMiw4IEBACisgCisgCSogcmVhZGVsZi5jIChoZXhfZHVtcCk6IEZpeCByb3VuZGluZyBlcnJvciBpbiB3aGl0ZXNwYWNlIGNhbGN1bGF0aW9uLgorIAorKwkqIE1ha2VmaWxlLmFtIChyZWFkZWxmX25vX1dlcnJvcik6IE5ldyB2YXJpYWJsZS4KKysKKyAyMDA3LTEwLTE1ICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIG1ha2UtZGVidWctYXJjaGl2ZS5pbjogTmV3IGZpbGUuCitAQCAtMjYzNiw2ICsyNjUzLDEwIEBACisgCSogZWxmbGludC5jICh2YWxpZF9lX21hY2hpbmUpOiBBZGQgRU1fQUxQSEEuCisgCVJlcG9ydGVkIGJ5IENocmlzdGlhbiBBaWNoaW5nZXIgPEdyZWVrMEBnbXgubmV0Pi4KKyAKKysJKiBzdHJpbmdzLmMgKG1hcF9maWxlKTogRGVmaW5lIFBPU0lYX01BRFZfU0VRVUVOVElBTCB0bworKwlNQURWX1NFUVVFTlRJQUwgaWYgdW5kZWZpbmVkLiAgCURvbid0IGNhbGwgcG9zaXhfbWFkdmlzZQorKwlpZiBuZWl0aGVyIGlzIGRlZmluZWQuCisrCisgMjAwNi0wOC0wOCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogZWxmbGludC5jIChjaGVja19keW5hbWljKTogRG9uJ3QgcmVxdWlyZSBEVF9IQVNIIGZvciBEVF9TWU1UQUIuCitAQCAtMjcxMiw2ICsyNzMzLDEwIEBACisgCSogTWFrZWZpbGUuYW06IEFkZCBoYWNrcyB0byBjcmVhdGUgZGVwZW5kZW5jeSBmaWxlcyBmb3Igbm9uLWdlbmVyaWMKKyAJbGlua2VyLgorIAorKzIwMDYtMDQtMDUgIFJvbGFuZCBNY0dyYXRoICA8cm9sYW5kQHJlZGhhdC5jb20+CisrCisrCSogc3RyaW5ncy5jIChNQVBfUE9QVUxBVEUpOiBEZWZpbmUgdG8gMCBpZiB1bmRlZmluZWQuCisrCisgMjAwNi0wNi0xMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQHJlZGhhdC5jb20+CisgCisgCSogbGRnZW5lcmljLmMgKGxkX2dlbmVyaWNfZ2VuZXJhdGVfc2VjdGlvbnMpOiBEb24ndCBjcmVhdGUgLmludGVycAorQEAgLTMwNjAsNiArMzA4NSwxMSBAQAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbG9jX3NlY3Rpb24pOiBGaXggaW5kZW50YXRpb24gZm9yIGxhcmdlcgorIAlhZGRyZXNzIHNpemUuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTMwICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorIAkqIHJlYWRlbGYuYyAocHJpbnRfZGVidWdfbGluZV9zZWN0aW9uKTogUHJpbnQgc2VjdGlvbiBvZmZzZXQgb2YgZWFjaAorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggZGJhYzNlYi4uOTAyOGFhMSAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtOTAsNiArOTAsMTEgQEAgZW5kaWYKKyBsZGdlbmVyaWNfbm9fV3VudXNlZCA9IHllcworIGxkZ2VuZXJpY19ub19Xc3RhY2tfdXNhZ2UgPSB5ZXMKKyAKKysjIEJ1Z2d5IG9sZCBjb21waWxlcnMgb3IgbGliYyBoZWFkZXJzLgorK3JlYWRlbGZfbm9fV2Vycm9yID0geWVzCisrc3RyaW5nc19ub19XZXJyb3IgPSB5ZXMKKythZGRyMmxpbmVfbm9fV2Zvcm1hdCA9IHllcworKworICMgQmFkLCBiYWQgc3RhY2sgdXNhZ2UuLi4KKyByZWFkZWxmX25vX1dzdGFja191c2FnZSA9IHllcworIG5tX25vX1dzdGFja191c2FnZSA9IHllcworZGlmZiAtLWdpdCBhL3NyYy9hZGRyMmxpbmUuYyBiL3NyYy9hZGRyMmxpbmUuYworaW5kZXggMGNlODU0Zi4uZDJkMGM4YyAxMDA2NDQKKy0tLSBhL3NyYy9hZGRyMmxpbmUuYworKysrIGIvc3JjL2FkZHIybGluZS5jCitAQCAtNjIyLDEwICs2MjIsMTAgQEAgaGFuZGxlX2FkZHJlc3MgKGNvbnN0IGNoYXIgKnN0cmluZywgRHdmbCAqZHdmbCkKKyAgICAgICBib29sIHBhcnNlZCA9IGZhbHNlOworICAgICAgIGludCBpLCBqOworICAgICAgIGNoYXIgKm5hbWUgPSBOVUxMOworLSAgICAgIGlmIChzc2NhbmYgKHN0cmluZywgIiglbVteKV0pJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmFkZHIsICZpKSA9PSAyCisrICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKyAJICAmJiBzdHJpbmdbaV0gPT0gJ1wwJykKKyAJcGFyc2VkID0gYWRqdXN0X3RvX3NlY3Rpb24gKG5hbWUsICZhZGRyLCBkd2ZsKTsKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisrICAgICAgc3dpdGNoIChzc2NhbmYgKHN0cmluZywgIiVhW14tK10lbiUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZpLCAmYWRkciwgJmopKQorIAl7CisgCWRlZmF1bHQ6CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL2ZpbmR0ZXh0cmVsLmMgYi9zcmMvZmluZHRleHRyZWwuYworaW5kZXggMjY0YTA2Yi4uZDdkZTIwMiAxMDA2NDQKKy0tLSBhL3NyYy9maW5kdGV4dHJlbC5jCisrKysgYi9zcmMvZmluZHRleHRyZWwuYworQEAgLTUwMiw3ICs1MDIsMTEgQEAgcHRyY29tcGFyZSAoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQorIAorIAorIHN0YXRpYyB2b2lkCistY2hlY2tfcmVsIChzaXplX3QgbnNlZ21lbnRzLCBzdHJ1Y3Qgc2VnbWVudHMgc2VnbWVudHNbbnNlZ21lbnRzXSwKKytjaGVja19yZWwgKHNpemVfdCBuc2VnbWVudHMsIHN0cnVjdCBzZWdtZW50cyBzZWdtZW50c1sKKysjaWYgX19HTlVDX18gPj0gNAorKwkJCQkJCSAgICAgIG5zZWdtZW50cworKyNlbmRpZgorKwkgICBdLAorIAkgICBHRWxmX0FkZHIgYWRkciwgRWxmICplbGYsIEVsZl9TY24gKnN5bXNjbiwgRHdhcmYgKmR3LAorIAkgICBjb25zdCBjaGFyICpmbmFtZSwgYm9vbCBtb3JlX3RoYW5fb25lLCB2b2lkICoqa25vd25zcmNzKQorIHsKK2RpZmYgLS1naXQgYS9zcmMvbGQuaCBiL3NyYy9sZC5oCitpbmRleCAyOWY0MDMxLi44Njk1YzMxIDEwMDY0NAorLS0tIGEvc3JjL2xkLmgKKysrKyBiL3NyYy9sZC5oCitAQCAtMTExNCw2ICsxMTE0LDcgQEAgZXh0ZXJuIGJvb2wgZHluYW1pY2FsbHlfbGlua2VkX3AgKHZvaWQpOworIAorIC8qIENoZWNrZWQgd2hldGhlciB0aGUgc3ltYm9sIGlzIHVuZGVmaW5lZCBhbmQgcmVmZXJlbmNlZCBmcm9tIGEgRFNPLiAgKi8KKyBleHRlcm4gYm9vbCBsaW5rZWRfZnJvbV9kc29fcCAoc3RydWN0IHNjbmluZm8gKnNjbmluZm8sIHNpemVfdCBzeW1pZHgpOworKyNpZiBkZWZpbmVkIF9fT1BUSU1JWkVfXyAmJiAhKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMikKKyAjaWZkZWYgX19HTlVDX1NURENfSU5MSU5FX18KKyBfX2F0dHJpYnV0ZV9fICgoX19nbnVfaW5saW5lX18pKQorICNlbmRpZgorQEAgLTExMzEsNSArMTEzMiw2IEBAIGxpbmtlZF9mcm9tX2Rzb19wIChzdHJ1Y3Qgc2NuaW5mbyAqc2NuaW5mbywgc2l6ZV90IHN5bWlkeCkKKyAKKyAgIHJldHVybiBzeW0tPmRlZmluZWQgJiYgc3ltLT5pbl9kc287CisgfQorKyNlbmRpZgkvKiBPcHRpbWl6aW5nIGFuZCBub3QgR0NDIDQuMi4gICovCisgCisgI2VuZGlmCS8qIGxkLmggKi8KK2RpZmYgLS1naXQgYS9zcmMvcmVhZGVsZi5jIGIvc3JjL3JlYWRlbGYuYworaW5kZXggYjRjYjNhOC4uNjA2ZDIyMCAxMDA2NDQKKy0tLSBhL3NyYy9yZWFkZWxmLmMKKysrKyBiL3NyYy9yZWFkZWxmLmMKK0BAIC00MzY0LDEwICs0MzY0LDEyIEBAIGxpc3RwdHJfYmFzZSAoc3RydWN0IGxpc3RwdHIgKnApCisgICByZXR1cm4gYmFzZTsKKyB9CisgCisrc3RhdGljIGNvbnN0IGNoYXIgKmxpc3RwdHJfbmFtZTsKKysKKyBzdGF0aWMgaW50CistY29tcGFyZV9saXN0cHRyIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiLCB2b2lkICphcmcpCisrY29tcGFyZV9saXN0cHRyIChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQorIHsKKy0gIGNvbnN0IGNoYXIgKm5hbWUgPSBhcmc7CisrICBjb25zdCBjaGFyICpjb25zdCBuYW1lID0gbGlzdHB0cl9uYW1lOworICAgc3RydWN0IGxpc3RwdHIgKnAxID0gKHZvaWQgKikgYTsKKyAgIHN0cnVjdCBsaXN0cHRyICpwMiA9ICh2b2lkICopIGI7CisgCitAQCAtNDQ2Myw4ICs0NDY1LDExIEBAIHN0YXRpYyB2b2lkCisgc29ydF9saXN0cHRyIChzdHJ1Y3QgbGlzdHB0cl90YWJsZSAqdGFibGUsIGNvbnN0IGNoYXIgKm5hbWUpCisgeworICAgaWYgKHRhYmxlLT5uID4gMCkKKy0gICAgcXNvcnRfciAodGFibGUtPnRhYmxlLCB0YWJsZS0+biwgc2l6ZW9mIHRhYmxlLT50YWJsZVswXSwKKy0JICAgICAmY29tcGFyZV9saXN0cHRyLCAodm9pZCAqKSBuYW1lKTsKKysgICAgeworKyAgICAgIGxpc3RwdHJfbmFtZSA9IG5hbWU7CisrICAgICAgcXNvcnQgKHRhYmxlLT50YWJsZSwgdGFibGUtPm4sIHNpemVvZiB0YWJsZS0+dGFibGVbMF0sCisrCSAgICAgJmNvbXBhcmVfbGlzdHB0cik7CisrICAgIH0KKyB9CisgCisgc3RhdGljIGJvb2wKK0BAIC05NTYxLDcgKzk1NjYsNyBAQCBkdW1wX2FyY2hpdmVfaW5kZXggKEVsZiAqZWxmLCBjb25zdCBjaGFyICpmbmFtZSkKKyAJICBpZiAodW5saWtlbHkgKGVsZl9yYW5kIChlbGYsIGFzX29mZikgPT0gMCkKKyAJICAgICAgfHwgdW5saWtlbHkgKChzdWJlbGYgPSBlbGZfYmVnaW4gKC0xLCBFTEZfQ19SRUFEX01NQVAsIGVsZikpCisgCQkJICAgPT0gTlVMTCkpCistI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpCisrI2lmIF9fR0xJQkNfXyA8IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA8IDcpIHx8IF9fR05VQ19fIDwgNAorIAkgICAgd2hpbGUgKDEpCisgI2VuZGlmCisgCSAgICAgIGVycm9yIChFWElUX0ZBSUxVUkUsIDAsCitkaWZmIC0tZ2l0IGEvc3JjL3N0cmluZ3MuYyBiL3NyYy9zdHJpbmdzLmMKK2luZGV4IGIyYmNlN2IuLmZlMGFiNmMgMTAwNjQ0CistLS0gYS9zcmMvc3RyaW5ncy5jCisrKysgYi9zcmMvc3RyaW5ncy5jCitAQCAtNDMsNiArNDMsMTAgQEAKKyAKKyAjaW5jbHVkZSA8c3lzdGVtLmg+CisgCisrI2lmbmRlZiBNQVBfUE9QVUxBVEUKKysjIGRlZmluZSBNQVBfUE9QVUxBVEUgMAorKyNlbmRpZgorKworIAorIC8qIFByb3RvdHlwZXMgb2YgbG9jYWwgZnVuY3Rpb25zLiAgKi8KKyBzdGF0aWMgaW50IHJlYWRfZmQgKGludCBmZCwgY29uc3QgY2hhciAqZm5hbWUsIG9mZjY0X3QgZmRsZW4pOworQEAgLTQ4OSw4ICs0OTMsMTMgQEAgbWFwX2ZpbGUgKGludCBmZCwgb2ZmNjRfdCBzdGFydF9vZmYsIG9mZjY0X3QgZmRsZW4sIHNpemVfdCAqbWFwX3NpemVwKQorIAkJICAgIGZkLCBzdGFydF9vZmYpOworICAgICAgIGlmIChtZW0gIT0gTUFQX0ZBSUxFRCkKKyAJeworKyNpZiAhZGVmaW5lZCBQT1NJWF9NQURWX1NFUVVFTlRJQUwgJiYgZGVmaW5lZCBNQURWX1NFUVVFTlRJQUwKKysjIGRlZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgTUFEVl9TRVFVRU5USUFMCisrI2VuZGlmCisrI2lmZGVmIFBPU0lYX01BRFZfU0VRVUVOVElBTAorIAkgIC8qIFdlIHdpbGwgZ28gdGhyb3VnaCB0aGUgbWFwcGluZyBzZXF1ZW50aWFsbHkuICAqLworIAkgICh2b2lkKSBwb3NpeF9tYWR2aXNlIChtZW0sIG1hcF9zaXplLCBQT1NJWF9NQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorIAkgIGJyZWFrOworIAl9CisgICAgICAgaWYgKGVycm5vICE9IEVJTlZBTCAmJiBlcnJubyAhPSBFTk9NRU0pCitAQCAtNTgxLDkgKzU5MCwxMSBAQCByZWFkX2Jsb2NrIChpbnQgZmQsIGNvbnN0IGNoYXIgKmZuYW1lLCBvZmY2NF90IGZkbGVuLCBvZmY2NF90IGZyb20sIG9mZjY0X3QgdG8pCisgICAgICAgZWxmbWFwX29mZiA9IGZyb20gJiB+KHBzIC0gMSk7CisgICAgICAgZWxmbWFwX2Jhc2UgPSBlbGZtYXAgPSBtYXBfZmlsZSAoZmQsIGVsZm1hcF9vZmYsIGZkbGVuLCAmZWxmbWFwX3NpemUpOworIAorKyNpZmRlZiBQT1NJWF9GQURWX1NFUVVFTlRJQUwKKyAgICAgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKKyAJLyogTGV0IHRoZSBrZXJuZWwga25vdyB3ZSBhcmUgZ29pbmcgdG8gcmVhZCBldmVyeXRoaW5nIGluIHNlcXVlbmNlLiAgKi8KKyAJKHZvaWQpIHBvc2l4X2ZhZHZpc2UgKGZkLCAwLCAwLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpOworKyNlbmRpZgorICAgICB9CisgCisgICBpZiAodW5saWtlbHkgKGVsZm1hcCA9PSBNQVBfRkFJTEVEKSkKK2RpZmYgLS1naXQgYS9zcmMvc3RyaXAuYyBiL3NyYy9zdHJpcC5jCitpbmRleCA1ZTY5MzM0Li44YmQxNzkwIDEwMDY0NAorLS0tIGEvc3JjL3N0cmlwLmMKKysrKyBiL3NyYy9zdHJpcC5jCitAQCAtNDQsNiArNDQsMTIgQEAKKyAjaW5jbHVkZSA8bGliZWJsLmg+CisgI2luY2x1ZGUgPHN5c3RlbS5oPgorIAorKyNpZmRlZiBIQVZFX0ZVVElNRVMKKysjIGRlZmluZSBGVVRJTUVTKGZkLCBmbmFtZSwgdHZwKSBmdXRpbWVzIChmZCwgdHZwKQorKyNlbHNlCisrIyBkZWZpbmUgRlVUSU1FUyhmZCwgZm5hbWUsIHR2cCkgdXRpbWVzIChmbmFtZSwgdHZwKQorKyNlbmRpZgorKworIHR5cGVkZWYgdWludDhfdCBHRWxmX0J5dGU7CisgCisgLyogTmFtZSBhbmQgdmVyc2lvbiBvZiBwcm9ncmFtLiAgKi8KK2RpZmYgLS1naXQgYS90ZXN0cy9DaGFuZ2VMb2cgYi90ZXN0cy9DaGFuZ2VMb2cKK2luZGV4IDE5ODc4YWMuLjY4MTUwMjggMTAwNjQ0CistLS0gYS90ZXN0cy9DaGFuZ2VMb2cKKysrKyBiL3Rlc3RzL0NoYW5nZUxvZworQEAgLTYwOSw2ICs2MDksMTMgQEAKKyAKKyAyMDEzLTEyLTAyICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisgCisrCUhhbmRsZSBULXN0b3BwZWQgZGV0YWNoIGZvciBvbGQga2VybmVscy4KKysJKiBiYWNrdHJhY2UuYzogSW5jbHVkZSBzeXMvc3lzY2FsbC5oLgorKwkobGludXhfcHJvY19waWRfaXNfc3RvcHBlZCk6IE5ldyBmdW5jdGlvbi4KKysJKHB0cmFjZV9kZXRhY2hfc3RvcHBlZCk6IEhhbmRsZSBvbGQga2VybmVscy4KKysKKysyMDEzLTEyLTAyICBKYW4gS3JhdG9jaHZpbCAgPGphbi5rcmF0b2NodmlsQHJlZGhhdC5jb20+CisrCisgCSogTWFrZWZpbGUuYW0gKGNoZWNrX1BST0dSQU1TKTogQWRkIGJhY2t0cmFjZSwgYmFja3RyYWNlLWNoaWxkLAorIAliYWNrdHJhY2UtZGF0YSBhbmQgYmFja3RyYWNlLWR3YXJmLgorIAkoQlVJTFRfU09VUkNFUywgY2xlYW4tbG9jYWwsIGJhY2t0cmFjZS1jaGlsZC1iaWFyY2gpOiBOZXcuCitAQCAtMTQ3Myw2ICsxNDgwLDggQEAKKyAKKyAyMDA4LTAxLTIxICBSb2xhbmQgTWNHcmF0aCAgPHJvbGFuZEByZWRoYXQuY29tPgorIAorKwkqIGxpbmUyYWRkci5jIChtYWluKTogUmV2ZXJ0IGxhc3QgY2hhbmdlLgorKworIAkqIHRlc3RmaWxlNDUuUy5iejI6IEFkZCB0ZXN0cyBmb3IgY2x0cSwgY3F0by4KKyAJKiB0ZXN0ZmlsZTQ1LmV4cGVjdC5iejI6IEFkanVzdC4KKyAKK0BAIC0yMTgxLDYgKzIxOTAsMTEgQEAKKyAJKiBNYWtlZmlsZS5hbSAoVEVTVFMpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaC4KKyAJKEVYVFJBX0RJU1QpOiBBZGQgcnVuLWVsZmxpbnQtdGVzdC5zaCBhbmQgdGVzdGZpbGUxOC5iejIuCisgCisrMjAwNS0wNS0zMSAgUm9sYW5kIE1jR3JhdGggIDxyb2xhbmRAcmVkaGF0LmNvbT4KKysKKysJKiBNYWtlZmlsZS5hbSAoV0VYVFJBKTogTmV3IHZhcmlhYmxlLCBzdWJzdGl0dXRlZCBieSBjb25maWd1cmUuCisrCShBTV9DRkxBR1MpOiBVc2UgaXQgaW4gcGxhY2Ugb2YgLVdleHRyYS4KKysKKyAyMDA1LTA1LTI0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAcmVkaGF0LmNvbT4KKyAKKyAJKiBnZXQtZmlsZXMuYyAobWFpbik6IFVzZSBjb3JyZWN0IGZvcm1hdCBzcGVjaWZpZXIuCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNDI1ZjhjZC4uNjk3NjBhNCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTM4Miw2ICszODIsNyBAQCBnZXRfbGluZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBnZXRfZmlsZXNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKyBnZXRfYXJhbmdlc19MREFERCA9ICQobGliZHcpICQobGliZWxmKQorIGFsbGZjdHNfTERBREQgPSAkKGxpYmR3KSAkKGxpYmVsZikKKytsaW5lMmFkZHJfbm9fV2Zvcm1hdCA9IHllcworIGxpbmUyYWRkcl9MREFERCA9ICQobGliZHcpICQoYXJncF9MREFERCkKKyBhZGRyc2NvcGVzX0xEQUREID0gJChsaWJkdykgJChhcmdwX0xEQUREKQorIGZ1bmNzY29wZXNfTERBREQgPSAkKGxpYmR3KSAkKGFyZ3BfTERBREQpCitkaWZmIC0tZ2l0IGEvdGVzdHMvYmFja3RyYWNlLmMgYi90ZXN0cy9iYWNrdHJhY2UuYworaW5kZXggYWJkNTZhYi4uNmE3YzY2MSAxMDA2NDQKKy0tLSBhL3Rlc3RzL2JhY2t0cmFjZS5jCisrKysgYi90ZXN0cy9iYWNrdHJhY2UuYworQEAgLTM2LDYgKzM2LDcgQEAKKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGFyZ3AuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKyAjaW5jbHVkZSBFTEZVVElMU19IRUFERVIoZHdmbCkKKyAKKyAjaWZuZGVmIF9fbGludXhfXworZGlmZiAtLWdpdCBhL3Rlc3RzL2xpbmUyYWRkci5jIGIvdGVzdHMvbGluZTJhZGRyLmMKK2luZGV4IGUwZDY1ZDMuLjdjMTcxYjkgMTAwNjQ0CistLS0gYS90ZXN0cy9saW5lMmFkZHIuYworKysrIGIvdGVzdHMvbGluZTJhZGRyLmMKK0BAIC0xMjQsNyArMTI0LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgeworICAgICAgIHN0cnVjdCBhcmdzIGEgPSB7IC5hcmcgPSBhcmd2W2NudF0gfTsKKyAKKy0gICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlbVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoYS5hcmcsICIlYVteOl06JWQiLCAmYS5maWxlLCAmYS5saW5lKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIDA6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvc2NhbmYtZm9ybWF0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg1MTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3NjYW5mLWZvcm1hdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tOiBLdXJ0IFJvZWNreCA8a3VydEByb2Vja3guYmU+CitTdWJqZWN0OiBVc2UgJW1bIGluc3RlYWQgb2YgJWFbIGluIHNjYW5mKCkKKworJWEgd2FzIGEgZ251IGV4dGVudGlvbiwgYnV0IEM5OSBtYWRlIHRoaXMgYSBmbG9hdC4gIFNvIGl0IGdvdAorY2hhbmdlZCB0byAlbSAoc3VwcG9ydGVkIGJ5IGdsaWJjIDIuNyksIGJ1dCAlYVsgYW5kICVhcyBhcmUKK3N0aWxsIHN1cHBvcnRlZCBieSBnbGliYy4gIFRoZSBwb3J0YWJpbGl0eSBicmFuY2ggY2hhbmdlZCB0aGlzCitmcm9tICVtIHRvICVhIGFnYWluIHNpbmNlIHRoYXQncyBzdXBwb3J0ZWQgYnkgbW9yZSB2ZXJzaW9ucyBvZgorZ2xpYmMuICBIb3dldmVyIGdjYyBnaXZlcyBhIHdhcm5pbmcgYWJvdXQgdGhpcyB1c2luZyAtV2Zvcm1hdAorYW5kIHdlIGhhdmUgYSBuZXcgZW5vdWdoIGxpYmMgdG8gdXNlICVtLgorCitJbmRleDogZWxmdXRpbHMtMC4xNTMvc3JjL2FkZHIybGluZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTMub3JpZy9zcmMvYWRkcjJsaW5lLmMJMjAxMi0wMi0yNCAyMjoyOTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1My9zcmMvYWRkcjJsaW5lLmMJMjAxMi0wMi0yNCAyMjoyOTo1Mi4wMDAwMDAwMDAgKzAwMDAKK0BAIC00NTUsMTAgKzQ1NSwxMCBAQAorICAgICAgIGJvb2wgcGFyc2VkID0gZmFsc2U7CisgICAgICAgaW50IGksIGo7CisgICAgICAgY2hhciAqbmFtZSA9IE5VTEw7CistICAgICAgaWYgKHNzY2FuZiAoc3RyaW5nLCAiKCVhW14pXSklIiBQUklpTUFYICIlbiIsICZuYW1lLCAmYWRkciwgJmkpID09IDIKKysgICAgICBpZiAoc3NjYW5mIChzdHJpbmcsICIoJW1bXildKSUiIFBSSWlNQVggIiVuIiwgJm5hbWUsICZhZGRyLCAmaSkgPT0gMgorIAkgICYmIHN0cmluZ1tpXSA9PSAnXDAnKQorIAlwYXJzZWQgPSBhZGp1c3RfdG9fc2VjdGlvbiAobmFtZSwgJmFkZHIsIGR3ZmwpOworLSAgICAgIHN3aXRjaCAoc3NjYW5mIChzdHJpbmcsICIlYVteLStdJW4lIiBQUklpTUFYICIlbiIsICZuYW1lLCAmaSwgJmFkZHIsICZqKSkKKysgICAgICBzd2l0Y2ggKHNzY2FuZiAoc3RyaW5nLCAiJW1bXi0rXSVuJSIgUFJJaU1BWCAiJW4iLCAmbmFtZSwgJmksICZhZGRyLCAmaikpCisgCXsKKyAJZGVmYXVsdDoKKyAJICBicmVhazsKK0luZGV4OiBlbGZ1dGlscy0wLjE1My90ZXN0cy9saW5lMmFkZHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTUzLm9yaWcvdGVzdHMvbGluZTJhZGRyLmMJMjAxMi0wMi0yNCAyMjoyOTo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBlbGZ1dGlscy0wLjE1My90ZXN0cy9saW5lMmFkZHIuYwkyMDEyLTAyLTI0IDIyOjI5OjUyLjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMiw3ICsxMzIsNyBAQAorICAgICB7CisgICAgICAgc3RydWN0IGFyZ3MgYSA9IHsgLmFyZyA9IGFyZ3ZbY250XSB9OworIAorLSAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVhW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorKyAgICAgIHN3aXRjaCAoc3NjYW5mIChhLmFyZywgIiVtW146XTolZCIsICZhLmZpbGUsICZhLmxpbmUpKQorIAl7CisgCWRlZmF1bHQ6CisgCWNhc2UgMDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy0wLjE2My90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3Rlc3RzdWl0ZS1pZ25vcmUtZWxmbGludC5kaWZmCkBAIC0wLDAgKzEsMzkgQEAKK09uIG1hbnkgYXJjaGl0ZWN0dXJlcyB0aGlzIHRlc3QgZmFpbHMgYmVjYXVzZSBiaW5hcmllcy9saWJzIHByb2R1Y2VkIGJ5CitiaW51dGlscyBkb24ndCBwYXNzIGVsZmxpbnQuIEhvd2V2ZXIgZWxmdXRpbHMgc2hvdWxkbid0IEZUQkZTIGJlY2F1c2Ugb2YgdGhpcy4KKworU28gd2UgcnVuIHRoZSB0ZXN0cyBvbiBhbGwgYXJjaHMgdG8gc2VlIHdoYXQgYnJlYWtzLCBidXQgaWYgaXQgYnJlYWtzIHdlIGlnbm9yZQordGhlIHJlc3VsdCAoZXhpdGNvZGUgNzcgbWVhbnM6IHRoaXMgdGVzdCB3YXMgc2tpcHBlZCkuCisKK0luZGV4OiBlbGZ1dGlscy0wLjE1Ni90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZWxmdXRpbHMtMC4xNTYub3JpZy90ZXN0cy9ydW4tZWxmbGludC1zZWxmLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTYvdGVzdHMvcnVuLWVsZmxpbnQtc2VsZi5zaAkyMDEzLTA3LTI4IDE0OjM2OjEwLjAwMDAwMDAwMCArMDIwMAorQEAgLTE4LDQgKzE4LDQgQEAKKyAKKyAuICRzcmNkaXIvdGVzdC1zdWJyLnNoCisgCistdGVzdHJ1bl9vbl9zZWxmICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZAorK3Rlc3RydW5fb25fc2VsZl9za2lwICR7YWJzX3RvcF9idWlsZGRpcn0vc3JjL2VsZmxpbnQgLS1xdWlldCAtLWdudS1sZAorSW5kZXg6IGVsZnV0aWxzLTAuMTU2L3Rlc3RzL3Rlc3Qtc3Vici5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGVsZnV0aWxzLTAuMTU2Lm9yaWcvdGVzdHMvdGVzdC1zdWJyLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgZWxmdXRpbHMtMC4xNTYvdGVzdHMvdGVzdC1zdWJyLnNoCTIwMTMtMDctMjggMTQ6MzU6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTQ5LDMgKzE0OSwxOCBAQAorICAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAorICAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKKyB9CisrCisrIyBTYW1lIGFzIHRlc3RydW5fb25fc2VsZigpLCBidXQgc2tpcCBvbiBmYWlsdXJlLgorK3Rlc3RydW5fb25fc2VsZl9za2lwKCkKKyt7CisrICBleGl0X3N0YXR1cz0wCisrCisrICBmb3IgZmlsZSBpbiAkc2VsZl90ZXN0X2ZpbGVzOyBkbworKyAgICAgIHRlc3RydW4gJCogJGZpbGUgXAorKwkgIHx8IHsgZWNobyAiKioqIGZhaWx1cmUgaW4gJCogJGZpbGUiOyBleGl0X3N0YXR1cz03NzsgfQorKyAgZG9uZQorKworKyAgIyBPbmx5IGV4aXQgaWYgc29tZXRoaW5nIGZhaWxlZAorKyAgaWYgdGVzdCAkZXhpdF9zdGF0dXMgIT0gMDsgdGhlbiBleGl0ICRleGl0X3N0YXR1czsgZmkKKyt9CisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMtMC4xNjMvdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTUzM2JmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzLTAuMTYzL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE2MS5wYXRjaApAQCAtMCwwICsxLDEwNiBAQAorRnJvbSAzZGFlYzJkZDExYTA0OTU1Zjk1ZThmNjVhNDg4MjAxMDNkODRkYmVjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBUaHUsIDkgQXByIDIwMTUgMTI6MTI6NDkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gdWNsaWJjIHN1cHBvcnQgZm9yIGVsZnV0aWxzIDAuMTYxCisKK29uIHVjbGliYyBzeXN0ZW1zIGxpYmludGwgYW5kIGxpYnVhcmdwIGFyZSBzZXBhcmF0ZSBmcm9tIGxpYmMuCitzbyB0aGV5IG5lZWQgdG8gYmUgc3BlY2lmaWVkIG9uIGNvbW1hbmRsaW5lIHdoZW4gd2UgdXNlIHByb3h5LWxpYmludGwKK3RoZW4gbGliaW50bCBpcyBhIHN0YXRpYyBhcmNoaXZlIHNvIGl0IHNob3VsZCBiZSBsaXN0ZWQgbGFzdCBzaW5jZQorZWxmdXRpbHMgZG9lcyBub3QgcmVzcGVjdCBkaXNhYmxlLW5scyB3ZSBuZWVkIHRvIGxpbmsgaW4gbGliaW50bAorCitXZSBhZGQgYSBuZXcgb3B0aW9uIC0tZW5hYmxlLXVjbGliYyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udHJvbAordGhlIHVjbGliYyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBkdXJpbmcgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdWNsaWJjIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW0+CitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KK1tKdW5saW5nIFpoZW5nOgorIC0gYWRqdXN0IGNvbnRleHQKK10KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICB8IDggKysrKysrKysKKyBsaWJjcHUvTWFrZWZpbGUuYW0gfCA0ICsrKysKKyBsaWJkdy9NYWtlZmlsZS5hbSAgfCA3ICsrKysrKy0KKyBsaWJlbGYvTWFrZWZpbGUuYW0gfCA1ICsrKysrCisgNCBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGExYWQ2ZGIuLjgxZmMzM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTcwLDYgKzcwLDE0IEBAIEFTX0lGKFt0ZXN0ICIkdXNlX2xvY2tzIiA9IHllc10sCisgCisgQUhfVEVNUExBVEUoW1VTRV9MT0NLU10sIFtEZWZpbmVkIGlmIGxpYnJhcmllcyBzaG91bGQgYmUgdGhyZWFkLXNhZmUuXSkKKyAKKytBQ19BUkdfRU5BQkxFKFt1Y2xpYmNdLAorK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS11Y2xpYmNdLCBbVXNlIHVjbGliYyBmb3Igc3lzdGVtIGxpYnJhcmllc10pLAorK3VzZV91Y2xpYmM9eWVzLCB1c2VfdWNsaWJjPW5vKQorK0FNX0NPTkRJVElPTkFMKFVTRV9VQ0xJQkMsIHRlc3QgIiR1c2VfdWNsaWJjIiA9IHllcykKKytBU19JRihbdGVzdCAiJHVzZV91Y2xpYmMiID0geWVzXSwgW0FDX0RFRklORShVU0VfVUNMSUJDKV0pCisrCisrQUhfVEVNUExBVEUoW1VTRV9VQ0xJQkNdLCBbRGVmaW5lZCBpZiB1Y2xpYmMgbGlicmFyaWVzIGFyZSB1c2VkLl0pCisrCisgQUNfUFJPR19DQworIEFDX1BST0dfUkFOTElCCisgQUNfUFJPR19ZQUNDCitkaWZmIC0tZ2l0IGEvbGliY3B1L01ha2VmaWxlLmFtIGIvbGliY3B1L01ha2VmaWxlLmFtCitpbmRleCAzYmVjY2YzLi45YmE2YzA0IDEwMDY0NAorLS0tIGEvbGliY3B1L01ha2VmaWxlLmFtCisrKysgYi9saWJjcHUvTWFrZWZpbGUuYW0KK0BAIC04MCw2ICs4MCwxMCBAQCBpMzg2X3BhcnNlX0NGTEFHUyA9IC1ETk1ORVM9ImB3YyAtbCA8IGkzODYubW5lbW9uaWNzYCIKKyBpMzg2X2xleC5vOiBpMzg2X3BhcnNlLmgKKyBpMzg2X2dlbmRpc19MREFERCA9ICQobGliZXUpIC1sbQorIAorK2lmIFVTRV9VQ0xJQkMKKytpMzg2X2dlbmRpc19MREFERCArPSAtbHVhcmdwIC1saW50bAorK2VuZGlmCisrCisgaTM4Nl9wYXJzZS5oOiBpMzg2X3BhcnNlLmMgOworIAorIEVYVFJBX0RJU1QgPSBkZWZzL2kzODYKK2RpZmYgLS1naXQgYS9saWJkdy9NYWtlZmlsZS5hbSBiL2xpYmR3L01ha2VmaWxlLmFtCitpbmRleCA4ODdkYTZiLi5kMzFiNDI4IDEwMDY0NAorLS0tIGEvbGliZHcvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmR3L01ha2VmaWxlLmFtCitAQCAtMTAyLDYgKzEwMiwxMSBAQCBlbmRpZgorIGxpYmR3X3BpY19hX1NPVVJDRVMgPQorIGFtX2xpYmR3X3BpY19hX09CSkVDVFMgPSAkKGxpYmR3X2FfU09VUkNFUzouYz0ub3MpCisgCisrbGliZHdfc29fTERMSUJTID0KKytpZiBVU0VfVUNMSUJDCisrbGliZHdfc29fTERMSUJTICs9IC1saW50bCAtbHVhcmdwCisrZW5kaWYKKysKKyBsaWJkd19zb19TT1VSQ0VTID0KKyBsaWJkdy5zbyQoRVhFRVhUKTogJChzcmNkaXIpL2xpYmR3Lm1hcCBsaWJkd19waWMuYSAuLi9saWJkd2VsZi9saWJkd2VsZl9waWMuYSBcCisgCSAgLi4vbGliZHdmbC9saWJkd2ZsX3BpYy5hIC4uL2xpYmVibC9saWJlYmwuYSBcCitAQCAtMTEyLDcgKzExNyw3IEBAIGxpYmR3LnNvJChFWEVFWFQpOiAkKHNyY2RpcikvbGliZHcubWFwIGxpYmR3X3BpYy5hIC4uL2xpYmR3ZWxmL2xpYmR3ZWxmX3BpYy5hIFwKKyAJCS1XbCwtLWVuYWJsZS1uZXctZHRhZ3MsLXJwYXRoLCQocGtnbGliZGlyKSBcCisgCQktV2wsLS12ZXJzaW9uLXNjcmlwdCwkPCwtLW5vLXVuZGVmaW5lZCBcCisgCQktV2wsLS13aG9sZS1hcmNoaXZlICQoZmlsdGVyLW91dCAkPCwkXikgLVdsLC0tbm8td2hvbGUtYXJjaGl2ZVwKKy0JCS1sZGwgJCh6aXBfTElCUykKKysJCS1sZGwgJCh6aXBfTElCUykgJChsaWJkd19zb19MRExJQlMpCisgCUAkKHRleHRyZWxfY2hlY2spCisgCWxuIC1mcyAkQCAkQC4kKFZFUlNJT04pCisgCitkaWZmIC0tZ2l0IGEvbGliZWxmL01ha2VmaWxlLmFtIGIvbGliZWxmL01ha2VmaWxlLmFtCitpbmRleCBhZmNiMmFhLi4wMjgzNmExIDEwMDY0NAorLS0tIGEvbGliZWxmL01ha2VmaWxlLmFtCisrKysgYi9saWJlbGYvTWFrZWZpbGUuYW0KK0BAIC05Myw3ICs5MywxMiBAQCBsaWJlbGZfYV9TT1VSQ0VTID0gZWxmX3ZlcnNpb24uYyBlbGZfaGFzaC5jIGVsZl9lcnJvci5jIGVsZl9maWxsLmMgXAorIGxpYmVsZl9waWNfYV9TT1VSQ0VTID0KKyBhbV9saWJlbGZfcGljX2FfT0JKRUNUUyA9ICQobGliZWxmX2FfU09VUkNFUzouYz0ub3MpCisgCisrCisgbGliZWxmX3NvX0xETElCUyA9CisraWYgVVNFX1VDTElCQworK2xpYmVsZl9zb19MRExJQlMgKz0gLWxpbnRsIC1sdWFyZ3AKKytlbmRpZgorKworIGlmIFVTRV9MT0NLUworIGxpYmVsZl9zb19MRExJQlMgKz0gLWxwdGhyZWFkCisgZW5kaWYKKy0tIAorMS44LjMuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjFlODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvRml4X2VsZl9jdnRfZ3VuaGFzaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGaXggZWxmX2N2dF9ndW5oYXNoIGlmIGRlc3QgYW5kIHNyYyBhcmUgc2FtZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSAnZGVzdCcgYW5kICdzcmMnIGNhbiBiZSBzYW1lLCB3ZSBuZWVkIHRvIHNhdmUgdGhlIHZhbHVlIG9mIHNyYzMyWzJdCitiZWZvcmUgc3dhcGluZyBpdC4KKworU2lnbmVkLW9mZi1ieTogQmFvc2hhbiBQYW5nIDxCYW9TaGFuLlBhbmdAd2luZHJpdmVyLmNvbT4KK2RpZmYgLS1naXQgYS9saWJlbGYvZ251aGFzaF94bGF0ZS5oIGIvbGliZWxmL2dudWhhc2hfeGxhdGUuaAoraW5kZXggNmZhZjExMy4uMDRkOWNhMSAxMDA2NDQKKy0tLSBhL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKKysrKyBiL2xpYmVsZi9nbnVoYXNoX3hsYXRlLmgKK0BAIC00MCw2ICs0MCw3IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgICAgd29yZHMuICBXZSBtdXN0IGRldGFuZ2xlIHRoZW0gaGVyZS4gICAqLworICAgRWxmMzJfV29yZCAqZGVzdDMyID0gZGVzdDsKKyAgIGNvbnN0IEVsZjMyX1dvcmQgKnNyYzMyID0gc3JjOworKyAgRWxmMzJfV29yZCBzYXZlX3NyYzMyXzIgPSBzcmMzMlsyXTsgLy8gZGVzdCBjb3VsZCBiZSBlcXVhbCB0byBzcmMKKyAKKyAgIC8qIEZpcnN0IGZvdXIgY29udHJvbCB3b3JkcywgMzIgYml0cy4gICovCisgICBmb3IgKHVuc2lnbmVkIGludCBjbnQgPSAwOyBjbnQgPCA0OyArK2NudCkKK0BAIC01MCw3ICs1MSw3IEBAIGVsZl9jdnRfZ251aGFzaCAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZW5jb2RlKQorICAgICAgIGxlbiAtPSA0OworICAgICB9CisgCistICBFbGYzMl9Xb3JkIGJpdG1hc2tfd29yZHMgPSBlbmNvZGUgPyBzcmMzMlsyXSA6IGRlc3QzMlsyXTsKKysgIEVsZjMyX1dvcmQgYml0bWFza193b3JkcyA9IGVuY29kZSA/IHNhdmVfc3JjMzJfMiA6IGRlc3QzMlsyXTsKKyAKKyAgIC8qIE5vdyB0aGUgNjQgYml0IHdvcmRzLiAgKi8KKyAgIEVsZjY0X1h3b3JkICpkZXN0NjQgPSAoRWxmNjRfWHdvcmQgKikgJmRlc3QzMls0XTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9kc28tbGluay1jaGFuZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwY2QzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvZHNvLWxpbmstY2hhbmdlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisjIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGxpbmsgdG8gdGhlIGRlcGVuZGVuY2llcyBvZiBsaWJkdyBleHBsaWNpdCwgYXMgcmVjZW50CisjIGxkIG5vIGxvbmdlciBpbXBsaWNpdGx5IGxpbmtzIHRoZW0uIFNlZQorIyBodHRwOi8vbGlzdHMuZmVkb3JhcHJvamVjdC5vcmcvcGlwZXJtYWlsL2RldmVsLzIwMTAtTWFyY2gvMTMzNjAxLmh0bWwgYXMKKyMgYSBzaW1pbGFyIGV4YW1wbGUgb2YgdGhlIGVycm9yIG1lc3NhZ2UgeW91IGNhbiBlbmNvdW50ZXIgd2l0aG91dCB0aGlzIHBhdGNoLAorIyBhbmQgaHR0cHM6Ly9mZWRvcmFwcm9qZWN0Lm9yZy93aWtpL1VuZGVyc3RhbmRpbmdEU09MaW5rQ2hhbmdlIGFuZAorIyBodHRwczovL2ZlZG9yYXByb2plY3Qub3JnL3dpa2kvRmVhdHVyZXMvQ2hhbmdlSW5JbXBsaWNpdERTT0xpbmtpbmcgZm9yIG1vcmUKKyMgZGV0YWlscy4KKworLS0tIGVsZnV0aWxzLTAuMTQ4Lm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvc3JjL01ha2VmaWxlLmFtCitAQCAtODYsNyArODYsNyBAQCBsaWJkdyA9IC4uL2xpYmR3L2xpYmR3LmEgJCh6aXBfTElCUykgJChsCisgbGliZWxmID0gLi4vbGliZWxmL2xpYmVsZi5hCisgZWxzZQorIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uc28KKy1saWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvCisrbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbyAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgZW5kaWYKKyBsaWJlYmwgPSAuLi9saWJlYmwvbGliZWJsLmEKKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgZWxmdXRpbHMtMC4xNDgvdGVzdHMvTWFrZWZpbGUuYW0KK0BAIC0xNzIsNyArMTcyLDcgQEAgbGliZHcgPSAuLi9saWJkdy9saWJkdy5hICQoemlwX0xJQlMpICQobAorIGxpYmVsZiA9IC4uL2xpYmVsZi9saWJlbGYuYQorIGxpYmFzbSA9IC4uL2xpYmFzbS9saWJhc20uYQorIGVsc2UKKy1saWJkdyA9IC4uL2xpYmR3L2xpYmR3LnNvCisrbGliZHcgPSAuLi9saWJkdy9saWJkdy5zbyAkKHppcF9MSUJTKSAkKGxpYmVsZikgJChsaWJlYmwpIC1sZGwKKyBsaWJlbGYgPSAuLi9saWJlbGYvbGliZWxmLnNvCisgbGliYXNtID0gLi4vbGliYXNtL2xpYmFzbS5zbworIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlscy9tZW1wY3B5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTMxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHMvbWVtcGNweS5wYXRjaApAQCAtMCwwICsxLDI0IEBACisKK3VjbGliYyBkb2VzIG5vdCBleHBvcnQgX19tZW1wY3B5IGxpa2UgZ2xpYmMgc28gd2UgYWxpYXMgaXQgaGVyZS4KK1RoaXMgcGF0Y2ggbWF5IG1ha2Ugc2Vuc2UgZm9yIHVwc3RyZWFtIGJ1dCBlbGZ1dGlscyB1c2VzIG1vcmUKK2dsaWJjIHNwZWNpZmljIGZlYXR1cmVzIGxpa2Ugb2JzdGFja19wcmludGYgd2hpY2ggYXJlIG1pc3NpbmcgaW4KK3VjbGliYyB0aGV5IG5lZWQgdG8gYmUgZml4ZWQgYWxvbmcgdG8gbWFrZSBpdCB3b3JrIGFsbCB0aGUgd2F5CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZVtFbGZ1dGlscyB1c2VzIG1vcmUgZ2xpYmMgc3BlY2lmaWMgZmVhdHVyZXNdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBlbGZ1dGlscy0wLjE0OC9saWJlbGYvZWxmX2JlZ2luLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbGZ1dGlscy0wLjE0OC5vcmlnL2xpYmVsZi9lbGZfYmVnaW4uYworKysrIGVsZnV0aWxzLTAuMTQ4L2xpYmVsZi9lbGZfYmVnaW4uYworQEAgLTY4LDYgKzY4LDkgQEAKKyAjaW5jbHVkZSAibGliZWxmUC5oIgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNkZWZpbmUgX19tZW1wY3B5IG1lbXBjcHkKKysjZW5kaWYKKyAKKyAvKiBDcmVhdGUgZGVzY3JpcHRvciBmb3IgYXJjaGl2ZSBpbiBtZW1vcnkuICAqLworIHN0YXRpYyBpbmxpbmUgRWxmICoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE0OC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg0OTBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LmJiCkBAIC0wLDAgKzEsOTEgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGFuZCBsaWJyYXJpZXMgZm9yIGhhbmRsaW5nIGNvbXBpbGVkIG9iamVjdCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9lbGZ1dGlscyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiKEdQTC0yKyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiM1wKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0VYQ0VQVElPTjttZDU9NTcwYWRjYjBjMTIxOGFiNTdmMjI0OWM2N2QwY2U0MTciCitERVBFTkRTID0gImxpYnRvb2wgYnppcDIgemxpYiB2aXJ0dWFsL2xpYmludGwiCisKK1BSID0gInIxMSIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sLyR7QlBOfS8ke0JQfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTBiZWQxMTMwMTM1ZjE3YWQyNzUzM2IwMDM0ZGJhOGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGFlYmZhNGE3NDVkYjIxY2Y1NDI5Yzk1NDFmZTQ4MjcyOWI2MmVmYzdlNTNlOTExMDE1MWI0MTY5ZmU4ODdkYSIKKworIyBwaWNrIHRoZSBwYXRjaCBmcm9tIGRlYmlhbgorIyBodHRwOi8vZnRwLmRlLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9lL2VsZnV0aWxzL2VsZnV0aWxzXzAuMTQ4LTEuZGViaWFuLnRhci5negorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcG9ydGFiaWxpdHkuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9yZWRoYXQtcm9idXN0aWZ5LmRpZmYgXAorICAgICAgICBmaWxlOi8vaHBwYV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vYXJtX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9taXBzX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9tNjhrX2JhY2tlbmQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly90ZXN0c3VpdGUtaWdub3JlLWVsZmxpbnQuZGlmZiBcCisgICAgICAgIGZpbGU6Ly9lbGZfYWRkaXRpb25zLmRpZmYgXAorICAgICAgICBmaWxlOi8vZWxmdXRpbHMtZnNpemUucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcmVtb3ZlLXVudXNlZC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9tZW1wY3B5LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeF9mb3JfZ2NjLTQuNy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9kc28tbGluay1jaGFuZ2UucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm0tRml4LXNpemUtcGFzc2VkLXRvLXNucHJpbnRmLWZvci1pbnZhbGlkLXNoX25hbWUtY2FzZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9lbGZ1dGlscy1hci1jLWZpeC1udW0tcGFzc2VkLXRvLW1lbXNldC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2VsZl9iZWdpbi5jLUNWRS0yMDE0LTk0NDctZml4LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1nY2MtNC44LnBhdGNoIFwKKyIKKyMgT25seSBhcHBseSB3aGVuIGJ1aWxkaW5nIHVjbGliYyBiYXNlZCB0YXJnZXQgcmVjaXBlCitTUkNfVVJJX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgZmlsZTovL3VjbGliYy1zdXBwb3J0LWZvci1lbGZ1dGlscy0wLjE0OC5wYXRjaCIKKworIyBUaGUgYnVpbGRzeXN0ZW0gd2FudHMgdG8gZ2VuZXJhdGUgMiAuaCBmaWxlcyBmcm9tIHNvdXJjZSB1c2luZyBhIGJpbmFyeSBpdCBqdXN0IGJ1aWx0LAorIyB3aGljaCBjYW4gbm90IHBhc3MgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gbGV0J3Mgd29yayBhcm91bmQgaXQgYnkgYWRkaW5nIDIgLmggZmlsZXMKKyMgYWxvbmcgd2l0aCB0aGUgZG9fY29uZmlndXJlX3ByZXBlbmQoKQorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9pMzg2X2Rpcy5oIFwKKyAgICAgICAgZmlsZTovL3g4Nl82NF9kaXMuaCBcCisiCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLXByb2dyYW0tcHJlZml4PWV1LSAtLXdpdGhvdXQtbHptYSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLXdpdGhvdXQtYnpsaWIiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS11Y2xpYmMiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAnL15pMzg2X2Rpcy5oOi8sKzQgey8uKi9kfScgJHtTfS9saWJjcHUvTWFrZWZpbGUuYW0KKworICAgIGNwICR7V09SS0RJUn0vKmRpcy5oICR7U30vbGliY3B1Cit9CisKKyMgd2UgY2FuIG5vdCBidWlsZCBjb21wbGV0ZSBlbGZ1dGlscyB3aGVuIHVzaW5nIHVjbGliYworIyBidXQgc29tZSByZWNpcGVzIGUuZy4gZ2NjIDQuNSBkZXBlbmRzIG9uIGxpYmVsZiBzbyB3ZQorIyBidWlsZCBvbmx5IGxpYmVsZiBmb3IgdWNsaWJjIGNhc2UKKworRVhUUkFfT0VNQUtFX2xpYmMtdWNsaWJjID0gIi1DIGxpYmVsZiIKK0VYVFJBX09FTUFLRV9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBQYWNrYWdlIHV0aWxpdGllcyBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAiJHtQTn0tYmludXRpbHMgbGliZWxmIGxpYmFzbSBsaWJkdyIKK0ZJTEVTXyR7UE59LWJpbnV0aWxzID0gIlwKKyAgICAke2JpbmRpcn0vZXUtYWRkcjJsaW5lIFwKKyAgICAke2JpbmRpcn0vZXUtbGQgXAorICAgICR7YmluZGlyfS9ldS1ubSBcCisgICAgJHtiaW5kaXJ9L2V1LXJlYWRlbGYgXAorICAgICR7YmluZGlyfS9ldS1zaXplIFwKKyAgICAke2JpbmRpcn0vZXUtc3RyaXAiCisKK0ZJTEVTX2xpYmVsZiA9ICIke2xpYmRpcn0vbGliZWxmLSR7UFZ9LnNvICR7bGliZGlyfS9saWJlbGYuc28uKiIKK0ZJTEVTX2xpYmFzbSA9ICIke2xpYmRpcn0vbGliYXNtLSR7UFZ9LnNvICR7bGliZGlyfS9saWJhc20uc28uKiIKK0ZJTEVTX2xpYmR3ICA9ICIke2xpYmRpcn0vbGliZHctJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmR3LnNvLiogJHtsaWJkaXJ9L2VsZnV0aWxzL2xpYioiCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCisjRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8qLSR7UFZ9LnNvICR7YmFzZV9saWJkaXJ9LyotJHtQVn0uc28iCisjRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJhc20uc28gJHtsaWJkaXJ9L2xpYmR3LnNvICR7bGliZGlyfS9saWJlbGYuc28iCisKKyMgVGhlIHBhY2thZ2UgY29udGFpbnMgc3ltbGlua3MgdGhhdCB0cmlwIHVwIGluc2FuZQorSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJkdyA9ICJkZXYtc28iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZWxmdXRpbHMvZWxmdXRpbHNfMC4xNjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5MTgxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9lbGZ1dGlscy9lbGZ1dGlsc18wLjE2My5iYgpAQCAtMCwwICsxLDg3IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBhbmQgbGlicmFyaWVzIGZvciBoYW5kbGluZyBjb21waWxlZCBvYmplY3QgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvZWxmdXRpbHMiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIihHUEx2MyAmIEVsZnV0aWxzLUV4Y2VwdGlvbikiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKK0RFUEVORFMgPSAibGlidG9vbCBiemlwMiB6bGliIHZpcnR1YWwvbGliaW50bCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvZS9sL2VsZnV0aWxzLyR7UFZ9LyR7QlB9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3N2NlODdmMjU5OTg3ZDJlNTRlNGQ4N2I4NmNiZWU0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Yzc3NGYxZWVmMzI5MzA5ZjNiMDVlNzMwYmRhYzUwMDEzMTU1ZDQzNzUxOGEyZWMwZTI0ODcxZDMxMmYyZTIzIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgIGZpbGU6Ly9tZW1wY3B5LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2Rzby1saW5rLWNoYW5nZS5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9GaXhfZWxmX2N2dF9ndW5oYXNoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2ZpeGhlYWRlcmNoZWNrLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZWxmX2dldGFyc3ltLVNpbGVuY2UtV2Vycm9yLW1heWJlLXVuaW5pdGlhbGl6ZWQtZmFscy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS10aGUtdW5uZWVkLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtZml4LWEtc3RhY2stdXNhZ2Utd2FybmluZy5wYXRjaCBcCisiCisKKyMgcGljayB0aGUgcGF0Y2ggZnJvbSBkZWJpYW4KKyMgaHR0cDovL2Z0cC5kZS5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vZS9lbGZ1dGlscy9lbGZ1dGlsc18wLjE1OS00LmRlYmlhbi50YXIueHoKK1NSQ19VUkkgKz0gIlwKKyAgICAgICAgZmlsZTovL3JlZGhhdC1wb3J0YWJpbGl0eS5kaWZmIFwKKyAgICAgICAgZmlsZTovL2hwcGFfYmFja2VuZC5kaWZmIFwKKyAgICAgICAgZmlsZTovL2FybV9iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbWlwc19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vbTY4a19iYWNrZW5kLmRpZmYgXAorICAgICAgICBmaWxlOi8vdGVzdHN1aXRlLWlnbm9yZS1lbGZsaW50LmRpZmYgXAorICAgICAgICBmaWxlOi8vc2NhbmYtZm9ybWF0LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL21pcHNfcmVhZGVsZl93LnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2FybV9mdW5jX3ZhbHVlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2FybV91bndpbmRfcmV0X21hc2sucGF0Y2ggXAorICAgICAgICBmaWxlOi8vbm9uX2xpbnV4LnBhdGNoIFwKKyIKKworIyBPbmx5IGFwcGx5IHdoZW4gYnVpbGRpbmcgdWNsaWJjIGJhc2VkIHRhcmdldCByZWNpcGUKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vdWNsaWJjLXN1cHBvcnQtZm9yLWVsZnV0aWxzLTAuMTYxLnBhdGNoIgorCisjIFRoZSBidWlsZHN5c3RlbSB3YW50cyB0byBnZW5lcmF0ZSAyIC5oIGZpbGVzIGZyb20gc291cmNlIHVzaW5nIGEgYmluYXJ5IGl0IGp1c3QgYnVpbHQsCisjIHdoaWNoIGNhbiBub3QgcGFzcyB0aGUgY3Jvc3MgY29tcGlsaW5nLCBzbyBsZXQncyB3b3JrIGFyb3VuZCBpdCBieSBhZGRpbmcgMiAuaCBmaWxlcworIyBhbG9uZyB3aXRoIHRoZSBkb19jb25maWd1cmVfcHJlcGVuZCgpCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GID0gIi0tcHJvZ3JhbS1wcmVmaXg9ZXUtIC0td2l0aG91dC1sem1hIgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0td2l0aG91dC1iemxpYiIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZW5hYmxlLXVjbGliYyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iICE9ICJ4ODZfNjQiIF0gJiYgWyAteiBgZWNobyAiJHtUQVJHRVRfQVJDSH0ifGdyZXAgJ2kuODYnYCBdO3RoZW4KKwkJcm0gJHtEfSR7YmluZGlyfS9ldS1vYmpkdW1wCisJZmkKK30KKworIyB3ZSBjYW4gbm90IGJ1aWxkIGNvbXBsZXRlIGVsZnV0aWxzIHdoZW4gdXNpbmcgdWNsaWJjCisjIGJ1dCBzb21lIHJlY2lwZXMgZS5nLiBnY2MgNC41IGRlcGVuZHMgb24gbGliZWxmIHNvIHdlCisjIGJ1aWxkIG9ubHkgbGliZWxmIGZvciB1Y2xpYmMgY2FzZQorCitFWFRSQV9PRU1BS0VfbGliYy11Y2xpYmMgPSAiLUMgbGliZWxmIgorRVhUUkFfT0VNQUtFX2NsYXNzLW5hdGl2ZSA9ICIiCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIFBhY2thZ2UgdXRpbGl0aWVzIHNlcGFyYXRlbHkKK1BBQ0tBR0VTID0rICIke1BOfS1iaW51dGlscyBsaWJlbGYgbGliYXNtIGxpYmR3IgorRklMRVNfJHtQTn0tYmludXRpbHMgPSAiXAorICAgICR7YmluZGlyfS9ldS1hZGRyMmxpbmUgXAorICAgICR7YmluZGlyfS9ldS1sZCBcCisgICAgJHtiaW5kaXJ9L2V1LW5tIFwKKyAgICAke2JpbmRpcn0vZXUtcmVhZGVsZiBcCisgICAgJHtiaW5kaXJ9L2V1LXNpemUgXAorICAgICR7YmluZGlyfS9ldS1zdHJpcCIKKworRklMRVNfbGliZWxmID0gIiR7bGliZGlyfS9saWJlbGYtJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmVsZi5zby4qIgorRklMRVNfbGliYXNtID0gIiR7bGliZGlyfS9saWJhc20tJHtQVn0uc28gJHtsaWJkaXJ9L2xpYmFzbS5zby4qIgorRklMRVNfbGliZHcgID0gIiR7bGliZGlyfS9saWJkdy0ke1BWfS5zbyAke2xpYmRpcn0vbGliZHcuc28uKiAke2xpYmRpcn0vZWxmdXRpbHMvbGliKiIKKyMgU29tZSBwYWNrYWdlcyBoYXZlIHRoZSB2ZXJzaW9uIHByZWNlZWRpbmcgdGhlIC5zbyBpbnN0ZWFkIHByb3Blcmx5CisjIHZlcnNpb25lZCAuc28uPHZlcnNpb24+LCBzbyB3ZSBuZWVkIHRvIHJlb3JkZXIgYW5kIHJlcGFja2FnZS4KKyNGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyotJHtQVn0uc28gJHtiYXNlX2xpYmRpcn0vKi0ke1BWfS5zbyIKKyNGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmFzbS5zbyAke2xpYmRpcn0vbGliZHcuc28gJHtsaWJkaXJ9L2xpYmVsZi5zbyIKKworIyBUaGUgcGFja2FnZSBjb250YWlucyBzeW1saW5rcyB0aGF0IHRyaXAgdXAgaW5zYW5lCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmR3ID0gImRldi1zbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1jb25maWd1cmUuaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5NWEyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDEtY29uZmlndXJlLmluLnBhdGNoCkBAIC0wLDAgKzEsMTA4IEBACitBbGxvdyBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCistLS0gYS9jb25maWd1cmUuaW4JMjAxMi0xMi0xNCAxNTozMTozMi42MjMxODA0NTAgKzAxMDAKKysrKyBiL2NvbmZpZ3VyZS5pbgkyMDEyLTEyLTE0IDE1OjUzOjM0LjUxODIzMzUxOSArMDEwMAorQEAgLTQ4MSw3ICs0ODEsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBhbnkgdmFsdWUgZXhpc3RzIGZvciBXTk9IQU5HXSkKK0BAIC01MDYsNyArNTA2LDkgQEAKKyAJQUNfTVNHX1JFU1VMVChubykKKyAJQUNfREVGSU5FKFdOT0hBTkdfQkFDS1VQX1ZBTFVFLCAxKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKHllcykKKysJQUNfREVGSU5FX1VOUVVPVEVEKFdOT0hBTkdfQkFDS1VQX1ZBTFVFLCBgY2F0IHdub2hhbmdgKQorKwlybSAtZiB3bm9oYW5nCisgKQorIAorICMKK0BAIC01NzQsNyArNTc2LDggQEAKKyAJQUNfREVGSU5FKFJFQVJNX1NJRykKKyAsCisgCUFDX01TR19SRVNVTFQobm8pCistLCBBQ19NU0dfV0FSTihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKyssCisrCUFDX01TR19SRVNVTFQobm8pCisgKQorIAorICMgSFBVWDcgaGFzIHRyb3VibGUgd2l0aCB0aGUgYmlnIGNhdCBzbyBzcGxpdCBpdAorQEAgLTcyNSw3ICs3MjgsOSBAQAorICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKysgICAgICAgIEFDX0RFRklORShIQVZFX1NHVFRZQikKKysgICAgICAgIFBUWV9UWVBFPXNndHR5YgorICkKKyAKKyAjIG1hY2ggc3lzdGVtcyBoYXZlIGluY2x1ZGUgZmlsZXMgZm9yIHVuaW1wbGVtZW50ZWQgZmVhdHVyZXMKK0BAIC03NDksNyArNzU0LDkgQEAKKyAsCisgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfVEVSTUlPKQorKyAgICAgICAgUFRZX1RZUEU9dGVybWlvcworKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgKQorIAorICAgIyBub3cgY2hlY2sgZm9yIHRoZSBuZXcgc3R5bGUgdHR5cyAobm90IHlldCBwb3NpeCkKK0BAIC03NzEsNyArNzc4LDkgQEAKKyAgICwKKyAgICAgICAgIEFDX01TR19SRVNVTFQobm8pCisgICAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysgICAgICAgIEFDX0RFRklORShIQVZFX1RFUk1JT1MpCisrICAgICAgICBQVFlfVFlQRT10ZXJtaW9zCisrICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICkKKyBmaQorIAorQEAgLTc5NCw3ICs4MDMsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgQUNfTVNHX0NIRUNLSU5HKFtpZiBUSU9DR1dJTlNaIGluIHRlcm1pb3MuaF0pCitAQCAtODE2LDcgKzgyNSw3IEBACisgLAorIAlBQ19NU0dfUkVTVUxUKG5vKQorICwKKy0JQUNfTVNHX0VSUk9SKFtFeHBlY3QgY2FuJ3QgYmUgY3Jvc3MgY29tcGlsZWRdKQorKwlBQ19NU0dfUkVTVUxUKG5vKQorICkKKyAKKyAjIGZpbmFsbHkgY2hlY2sgZm9yIENyYXkgc3R5bGUgdHR5cworQEAgLTgzNyw3ICs4NDYsNyBAQAorICwKKyAJQUNfTVNHX1JFU1VMVChubykKKyAsCistCUFDX01TR19FUlJPUihbRXhwZWN0IGNhbid0IGJlIGNyb3NzIGNvbXBpbGVkXSkKKysJQUNfTVNHX1JFU1VMVChubykKKyApCisgCisgIworQEAgLTg4OSw3ICs4OTgsOCBAQAorIAlBQ19NU0dfUkVTVUxUKHllcyksCisgCUFDX01TR19SRVNVTFQobm8pCisgLAorLQlBQ19NU0dfRVJST1IoW0V4cGVjdCBjYW4ndCBiZSBjcm9zcyBjb21waWxlZF0pCisrCUFDX0RFRklORShIQVZFX1NWX1RJTUVaT05FKQorKwlBQ19NU0dfUkVTVUxUKHllcyksCisgKQorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NGFkODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAxLWV4cGVjdC1pbnN0YWxsLXNjcmlwdHMtd2l0aG91dC11c2luZy10aGUtZml4bGluZTEtdGMucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt3cmxpbnV4IHNwZWNpZmljXQorCitTdWJqZWN0OiBleHBlY3Q6IGluc3RhbGwgc2NyaXB0cyB3aXRob3V0IHVzaW5nIHRoZSBmaXhsaW5lMSB0Y2wgc2NyaXB0CisKK09uIG9sZGVyIG1hY2hpbmVzIGxpa2UgU0xFRDExLjIsIHdlIGFyZSBlbmNvdW50ZXJpbmcgZG9faW5zdGFsbCBmYWlsdXJlcworY29tcGxhaW5pbmcgdGhhdCAnR0xJQkNfMi4xNCcgaXMgbm90IGZvdW5kIGluIC9saWI2NC9saWJjLnNvLjYgYnV0IGlzIHJlcXVpcmVkCitieSBsaWJ0Y2w4LjYuc28uMC4KKworVGhpcyBpcyBiZWNhdXNlIHRoYXQgd2UncmUgZXhlY3V0aW5nIHRoZSBmaXhsaW5lMSB0Y2wgc2NyaXB0IHdoaWNoIHJlcXVpcmVzCitsaWJ0Y2w4LjYuc28uMCBpbiBzeXNyb290LiBIb3dldmVyLCBhbGwgY29tbWFuZHMgaW4gU0NSSVBUUyBhbHJlYWR5IGhhdmUgZ290Cit0aGUgY29ycmVjdCBmaXJzdCBsaW5lLCB0aGF0IGlzICcjIS9iaW4vc2gnLiBXZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBhbnl0aGluZy4KK1RoYXQncyB3aHkgd2UgY291bGQganVzdCBjb3B5IHRoZW0uCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYzA1Yzg4MC4uZjEzOTRmZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTM4MCw3ICszODAsNyBAQCBkaXN0OiBkaXN0LWNsZWFuIGRvYworIAljcCAkKERJU1RfUk9PVCkvJChQS0dfRElSKS50YXIuZ3ogJCh0b3BfYnVpbGRkaXIpCisgCisgJChTQ1JJUFRTKToKKy0JJChUQ0xTSCkgJChzcmNkaXIpL2ZpeGxpbmUxICQoU0hPUlRfQklORElSKSA8ICQoc3JjZGlyKS9leGFtcGxlLyRAID4gJEAKKysJY3AgJChzcmNkaXIpL2V4YW1wbGUvJEAgJEAKKyAKKyAjIyBXZSBjYW5ub3QgdXNlIFRDTF9MSUJTIGJlbG93IChhZnRlciBUQ0xfTElCX1NQRUMpIGJlY2F1c2UgaXRzCisgIyMgZXhwYW5zaW9uIHJlZmVyZW5jZXMgdGhlIGNvbnRlbnRzIG9mIExJQlMsIHdoaWNoIGNvbnRhaW5zIGxpbmtlcgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAwMDItdGNsLm00LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGM2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZXhwZWN0L2V4cGVjdC8wMDAyLXRjbC5tNC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVc2UgcHJvcGVyIC1MIHBhdGggd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtdU5yIGEvdGNsY29uZmlnL3RjbC5tNCBiL3RjbGNvbmZpZy90Y2wubTQKKy0tLSBhL3RjbGNvbmZpZy90Y2wubTQJMjAxMi0xMi0xNCAwOToxNjo1OC43ODk4NjEyODEgKzAxMDAKKysrKyBiL3RjbGNvbmZpZy90Y2wubTQJMjAxMi0xMi0xNCAxMDo1NTo0My41NDIyOTcwMTAgKzAxMDAKK0BAIC0zNzEsNyArMzcxLDcgQEAKKyAgICAgIyBvZiBUQ0xfQlVJTERfTElCX1NQRUMuIEFuIGV4dGVuc2lvbiBzaG91bGQgbWFrZSB1c2Ugb2YgVENMX0xJQl9TUEVDCisgICAgICMgaW5zdGVhZCBvZiBUQ0xfQlVJTERfTElCX1NQRUMgc2luY2UgaXQgd2lsbCB3b3JrIHdpdGggYm90aCBhbgorICAgICAjIGluc3RhbGxlZCBhbmQgdW5pbnN0YWxsZWQgdmVyc2lvbiBvZiBUY2wuCistICAgIGlmIHRlc3QgLWYgIiR7VENMX0JJTl9ESVJ9L01ha2VmaWxlIiA7IHRoZW4KKysgICAgaWYgdGVzdCAtZiAiJHtUQ0xfQklOX0RJUn0vTWFrZWZpbGUiIHx8IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgICAgICBUQ0xfTElCX1NQRUM9IiR7VENMX0JVSUxEX0xJQl9TUEVDfSIKKyAgICAgICAgIFRDTF9TVFVCX0xJQl9TUEVDPSIke1RDTF9CVUlMRF9TVFVCX0xJQl9TUEVDfSIKKyAgICAgICAgIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9CVUlMRF9TVFVCX0xJQl9QQVRIfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0LzAxLWV4YW1wbGUtc2hlYmFuZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk3ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3QvMDEtZXhhbXBsZS1zaGViYW5nLnBhdGNoCkBAIC0wLDAgKzEsMTQ0IEBACitBdXRob3I6IE1pa2UgTWFya2xleSA8bWlrZUBtYXJrbGV5Lm9yZz4KK0F1dGhvcjogU2VyZ2VpIEdvbG92YW4gPHNnb2xvdmFuQGRlYmlhbi5vcmc+CitEZXNjcmlwdGlvbjogRml4ZXMgc2hlYmFuZ3MgaW4gZXhhbXBsZXMgKENsb3NlczogIzE1MjM2NykuCisKK0JhY2twb3J0ZWQgZnJvbSBEZWJpYW4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2JlZXIuZXhwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvYmVlci5leHAJMjAwNi0wMS0yNSAxMzo1MTozOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvYmVlci5leHAJMjAxMy0xMS0wMSAxNzozNToxOS44MTczMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC1mCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIDk5IGJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbCwgRXhwZWN0LXN0eWxlCisgIyBBdXRob3I6IERvbiBMaWJlcyA8bGliZXNAbmlzdC5nb3Y+CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL2V4cGVjdGQucHJvdG8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9leHBlY3RkLnByb3RvCTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL2V4cGVjdGQucHJvdG8JMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsMTAgQEAKKy0jIS9kZXBvdC90Y2wvc3JjL2V4cGVjdC9lIC0tCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKysKKyAjIERlc2NyaXB0aW9uOiBTaW1wbGUgZnJhZ21lbnQgdG8gYmVnaW4gYSB0ZWxuZXQgZGFlbW9uCisgIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIENoYXB0ZXIgMTcgb2YgIkV4cGxvcmluZyBFeHBlY3QiCisgIyBBdXRob3I6IERvbiBMaWJlcywgTklTVAorSW5kZXg6IGV4cGVjdDUuNDUvZXhhbXBsZS9pcnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZXhwZWN0NS40NS5vcmlnL2V4YW1wbGUvaXJzaAkyMDEwLTA3LTAyIDA5OjAzOjMxLjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9pcnNoCTIwMTMtMTEtMDEgMTc6MzU6MTkuODIxMzE4MzQxIC0wNzAwCitAQCAtMSw0ICsxLDkgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisgCisgIyBEbyByc2ggaW50ZXJhY3RpdmVseS4gIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisgIyAgICByc2ggPHJlbW90ZT4gbHMgLWwgInwiIG1vcmUKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkLmNnaQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Bhc3N3ZC5jZ2kJMjAwMC0wMS0wNiAxNToyMjowNy4wMDAwMDAwMDAgLTA4MDAKKysrKyBleHBlY3Q1LjQ1L2V4YW1wbGUvcGFzc3dkLmNnaQkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgVGhpcyBpcyBhIENHSSBzY3JpcHQgdG8gcHJvY2VzcyByZXF1ZXN0cyBjcmVhdGVkIGJ5IHRoZSBhY2NvbXBhbnlpbmcKKyAjIHBhc3N3ZC5odG1sIGZvcm0uICBUaGlzIHNjcmlwdCBpcyBwcmV0dHkgYmFzaWMsIGFsdGhvdWdoIGl0IGlzCitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3Bhc3N3ZHByb21wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGV4cGVjdDUuNDUub3JpZy9leGFtcGxlL3Bhc3N3ZHByb21wdAkyMDAzLTA5LTA1IDEyOjAxOjU5LjAwMDAwMDAwMCAtMDcwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9wYXNzd2Rwcm9tcHQJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0CisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAjIFRoaXMgc2NyaXB0IHByb21wdHMgZm9yIGEgcGFzc3dkIGZyb20gc3RkaW4gd2hpbGUgZWNob2luZyAqJ3MKKyAKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvcmVwcm9tcHQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS9yZXByb21wdAkyMDAwLTAxLTA2IDE1OjIyOjA3LjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS9yZXByb21wdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3QgLS0KKysjIS9iaW4vc2gKKysjIC0qLSB0Y2wgLSotCisrIyBUaGUgbmV4dCBsaW5lIGlzIGV4ZWN1dGVkIGJ5IC9iaW4vc2gsIGJ1dCBub3QgdGNsIFwKKytleGVjIHRjbHNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgTmFtZTogcmVwcm9tcHQKKyAjIERlc2NyaXB0aW9uOiByZXByb21wdCBldmVyeSBzbyBvZnRlbiB1bnRpbCB1c2VyIGVudGVycyBzb21ldGhpbmcKK0luZGV4OiBleHBlY3Q1LjQ1L2V4YW1wbGUvdGVybV9leHBlY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS90ZXJtX2V4cGVjdAkyMDA1LTAyLTE1IDEwOjExOjMxLjAwMDAwMDAwMCAtMDgwMAorKysrIGV4cGVjdDUuNDUvZXhhbXBsZS90ZXJtX2V4cGVjdAkyMDEzLTExLTAxIDE3OjM1OjE5LjgyMTMxODM0MSAtMDcwMAorQEAgLTEsNCArMSw5IEBACistIyEvZGVwb3QvcGF0aC9leHBlY3RrCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB3aXNoICIkMCIgJHsxKyIkQCJ9CisrCisrcGFja2FnZSByZXF1aXJlIEV4cGVjdAorIAorICMgTmFtZTogdGt0ZXJtIC0gdGVybWluYWwgZW11bGF0b3IgdXNpbmcgRXhwZWN0IGFuZCBUayB0ZXh0IHdpZGdldCwgdjMuMAorICMgQXV0aG9yOiBEb24gTGliZXMsIEp1bHkgJzk0CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3ZyZnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS92cmZ5CTIwMTAtMDctMDIgMDk6MDM6MzEuMDAwMDAwMDAwIC0wNzAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3ZyZnkJMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsOSBAQAorLSMhL2RlcG90L3BhdGgvZXhwZWN0IC1mCisrIyEvYmluL3NoCisrIyAtKi0gdGNsIC0qLQorKyMgVGhlIG5leHQgbGluZSBpcyBleGVjdXRlZCBieSAvYmluL3NoLCBidXQgbm90IHRjbCBcCisrZXhlYyB0Y2xzaCAiJDAiICR7MSsiJEAifQorKworK3BhY2thZ2UgcmVxdWlyZSBFeHBlY3QKKyAKKyAKKyAjIHNlcGFyYXRlIGFkZHJlc3MgaW50byB1c2VyIGFuZCBob3N0CitJbmRleDogZXhwZWN0NS40NS9leGFtcGxlL3hybG9naW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBleHBlY3Q1LjQ1Lm9yaWcvZXhhbXBsZS94cmxvZ2luCTIwMDAtMDEtMDYgMTU6MjI6MDguMDAwMDAwMDAwIC0wODAwCisrKysgZXhwZWN0NS40NS9leGFtcGxlL3hybG9naW4JMjAxMy0xMS0wMSAxNzozNToxOS44MjEzMTgzNDEgLTA3MDAKK0BAIC0xLDQgKzEsMTAgQEAKKy0jIS9kZXBvdC9wYXRoL2V4cGVjdCAtLQorKyMhL2Jpbi9zaAorKyMgLSotIHRjbCAtKi0KKysjIFRoZSBuZXh0IGxpbmUgaXMgZXhlY3V0ZWQgYnkgL2Jpbi9zaCwgYnV0IG5vdCB0Y2wgXAorK2V4ZWMgdGNsc2ggIiQwIiAkezErIiRAIn0KKysKKytwYWNrYWdlIHJlcXVpcmUgRXhwZWN0CisrCisgIyB4cmxvZ2luIC0gcmxvZ2luIGJ1dCB3aXRoIGN1cnJlbnQgRElTUExBWQorICMKKyAjIFlvdSBjYW4gZXh0ZW5kIHRoaXMgaWRlYSB0byBzYXZlIGFueSBhcmJpdHJhcnkgaW5mb3JtYXRpb24gYWNyb3NzIHJsb2dpbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2V4cGVjdC9leHBlY3RfNS40NS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MyYWFiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9leHBlY3QvZXhwZWN0XzUuNDUuYmIKQEAgLTAsMCArMSw2NCBAQAorU1VNTUFSWSA9ICJ0b29sIGZvciBhdXRvbWF0aW5nIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmcgdG8gYSBzY3JpcHQiCitERVNDUklQVElPTiA9ICJFeHBlY3QgaXMgYSB0b29sIGZvciBhdXRvbWF0aW5nIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBhY2NvcmRpbmcgdG8gYSBzY3JpcHQuIFwKK0ZvbGxvd2luZyB0aGUgc2NyaXB0LCBFeHBlY3Qga25vd3Mgd2hhdCBjYW4gYmUgZXhwZWN0ZWQgZnJvbSBhIHByb2dyYW0gYW5kIHdoYXQgXAordGhlIGNvcnJlY3QgcmVzcG9uc2Ugc2hvdWxkIGJlLiBFeHBlY3QgaXMgYWxzbyB1c2VmdWwgZm9yIHRlc3RpbmcgdGhlc2Ugc2FtZSBcCithcHBsaWNhdGlvbnMuIEFuZCBieSBhZGRpbmcgVGssIHlvdSBjYW4gYWxzbyB3cmFwIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucyBpbiBcCitYMTEgR1VJcy4gQW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgcHJvdmlkZXMgYnJhbmNoaW5nIGFuZCBoaWdoLWxldmVsIGNvbnRyb2wgXAorc3RydWN0dXJlcyB0byBkaXJlY3QgdGhlIGRpYWxvZ3VlLiBJbiBhZGRpdGlvbiwgdGhlIHVzZXIgY2FuIHRha2UgY29udHJvbCBhbmQgXAoraW50ZXJhY3QgZGlyZWN0bHkgd2hlbiBkZXNpcmVkLCBhZnRlcndhcmQgcmV0dXJuaW5nIGNvbnRyb2wgdG8gdGhlIHNjcmlwdC4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBlY3QvIgorTElDRU5TRSA9ICJQRCIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xpY2Vuc2UudGVybXM7bWQ1PWZiZjJkZTdlOTEwMjUwNWIxNDM5ZGIwNmZjMzZjZTVjIgorCitERVBFTkRTICs9ICJ0Y2wiCitSREVQRU5EU18ke1BOfSA9ICJ0Y2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9leHBlY3QvRXhwZWN0LyR7UFZ9LyR7QlBOfSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS5pbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXRjbC5tNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMS1leGFtcGxlLXNoZWJhbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1leHBlY3QtaW5zdGFsbC1zY3JpcHRzLXdpdGhvdXQtdXNpbmctdGhlLWZpeGxpbmUxLXRjLnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDRlMWE0ZjRjODc3ZTlkZGM1YTU0MmRmYTdlY2M5MmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjI4ZGNhOTA0MjhhM2IzMGU2NTA1MjVjZGMxNjI1NWQ3NmJiNmNjZDY1ZDQ0OGJlNTNlNjIwZDk1ZDVjYzA0MCIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbyAgICR7RH0ke2xpYmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSAke1N9L2ZpeGxpbmUxICAgICAgICAgICAke0R9JHtsaWJkaXJ9L2V4cGVjdCR7UFZ9LworICAgICAgICBpbnN0YWxsIC1tIDA3NTUgJHtTfS9leGFtcGxlLyogICAgICAgICAgJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS8KKyAgICAgICAgcm0gJHtEfSR7bGliZGlyfS9leHBlY3Qke1BWfS9saWJleHBlY3QqLnNvCisgICAgICAgIHNlZCAtZSAnc3wkZGlyfCR7bGliZGlyfXwnIC1pICR7RH0ke2xpYmRpcn0vZXhwZWN0JHtQVn0vcGtnSW5kZXgudGNsCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXRjbD0ke1NUQUdJTkdfTElCRElSfSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC10Y2xpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9L3RjbDguNiBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRocmVhZHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgICIKK0VYVFJBX09FTUFLRV9pbnN0YWxsID0gIiAnU0NSSVBUUz0nICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vJHtCUE59JHtQVn0vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyX25hdGl2ZX0vZXhwZWN0JHtQVn0vbGliZXhwZWN0Ki5zbyBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3QuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS9leHBlY3RfdGNsLmggXAorICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vZXhwZWN0X2NvbW0uaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS90Y2xkYmcuaCBcCisgICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8qLmggXAorICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2xpYmV4cGVjdCR7UFZ9LnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vZXhwZWN0JHtQVn0vKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmRpc2svZ3B0ZmRpc2tfMS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiMGUzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mZGlzay9ncHRmZGlza18xLjAuMC5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJHUFQgZmRpc2sgaXMgYSBkaXNrIHBhcnRpdGlvbmluZyB0b29sIGxvb3NlbHkgbW9kZWxlZCBvbiBMaW51eCBmZGlzaywgYnV0IHVzZWQgZm9yIG1vZGlmeWluZyBHVUlEIFBhcnRpdGlvbiBUYWJsZSAoR1BUKSBkaXNrcy4gVGhlIHJlbGF0ZWQgRml4UGFydHMgdXRpbGl0eSBmaXhlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBvbiBNYXN0ZXIgQm9vdCBSZWNvcmQgKE1CUikgZGlza3MuIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK0RFUEVORFMgPSAidXRpbC1saW51eCBwb3B0IG5jdXJzZXMiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke1BWfS8ke0JQfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMjA2MWY5MTdhZjA4NDIxNTg5OGQ0ZmVhMDRkODM4OGYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI2Njk1Njc0M2E3OTlmYzA0NzFjZGIwMzI2NjVjMTM5MWU4MmY5YzViM2YxZDdkNzI2ZDI5ZmUyYmEwMWQ2YyIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke3NiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IGNnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBnZGlzayAke0R9JHtzYmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBzZ2Rpc2sgJHtEfSR7c2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgZml4cGFydHMgJHtEfSR7c2JpbmRpcn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlLzAwMDEtQWRkLVAtcHJvbXB0LWludG8tVXNhZ2UtaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE2YjJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS8wMDAxLUFkZC1QLXByb21wdC1pbnRvLVVzYWdlLWluZm8ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSAwOGFiZjk0NGIyYmZmMjdiNmRkMzI1ZGQxNWI0ODYxY2ViZWYxMTNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVubGluZyBaaGVuZyA8emhlbmdqdW5saW5nQGh1YXdlaS5jb20+CitEYXRlOiBXZWQsIDggQXByIDIwMTUgMDM6MjY6NTcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIC1QIHByb21wdCBpbnRvIFVzYWdlIGluZm8KKworQ3VycmVudGx5LCBVc2FnZSBpbmZvIGRvZXNuJ3QgaW5jbHVkZSAtUCBwcm9tcHQsIGFkZCBpdDoKKworcm9vdEBhcm1hOWVsOn4jIGZpbGUKK1VzYWdlOiBmaWxlIFstYmNFaGlrTGxObnByc3Z6MF0gWy0tYXBwbGVdIFstLW1pbWUtZW5jb2RpbmddIFstLW1pbWUtdHlwZV0KKyAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc10KKyAgICAgICAgICAgIFstUCBwYXJhbWV0ZXI9bGltaXRzXSBmaWxlIC4uLgorICAgICAgIGZpbGUgLUMgWy1tIG1hZ2ljZmlsZXNdCisgICAgICAgZmlsZSBbLS1oZWxwXQorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBKdW5saW5nIFpoZW5nIDx6aGVuZ2p1bmxpbmdAaHVhd2VpLmNvbT4KKy0tLQorIHNyYy9maWxlLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZpbGUuYyBiL3NyYy9maWxlLmMKK2luZGV4IDJiMTVlMjEuLmU1YTk1N2IgMTAwNjQ0CistLS0gYS9zcmMvZmlsZS5jCisrKysgYi9zcmMvZmlsZS5jCitAQCAtNzYsOCArNzYsOCBAQCBpbnQgZ2V0b3B0X2xvbmcoaW50IGFyZ2MsIGNoYXIgKiBjb25zdCAqYXJndiwgY29uc3QgY2hhciAqb3B0c3RyaW5nLCBjb25zdCBzdHJ1YworICMgZGVmaW5lIFVTQUdFICBcCisgICAgICJVc2FnZTogJXMgWyIgRklMRV9GTEFHUyBcCisgCSJdIFstLWFwcGxlXSBbLS1leHRlbnNpb25dIFstLW1pbWUtZW5jb2RpbmddIFstLW1pbWUtdHlwZV1cbiIgXAorLSAgICAiICAgICAgICAgICAgWy1lIHRlc3RuYW1lXSBbLUYgc2VwYXJhdG9yXSBbLWYgbmFtZWZpbGVdIFstbSBtYWdpY2ZpbGVzXSAiIFwKKy0gICAgImZpbGUgLi4uXG4iIFwKKysgICAgIiAgICAgICAgICAgIFstZSB0ZXN0bmFtZV0gWy1GIHNlcGFyYXRvcl0gWy1mIG5hbWVmaWxlXSBbLW0gbWFnaWNmaWxlc11cbiAiIFwKKysgICAgIiAgICAgICAgICAgIFstUCBwYXJhbWV0ZXI9bGltaXRzXSBmaWxlIC4uLlxuIiBcCisgICAgICIgICAgICAgJXMgLUMgWy1tIG1hZ2ljZmlsZXNdXG4iIFwKKyAgICAgIiAgICAgICAlcyBbLS1oZWxwXVxuIgorIAorLS0gCisxLjguMy40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGUvZGViaWFuLTc0MjI2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY0ODVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZpbGUvZmlsZS9kZWJpYW4tNzQyMjYyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1RoZSBhd2sgcGF0dGVybiB3YXMgY2hlY2tlZCAqYmVmb3JlKiB0aGUgUGVybCBwYXR0ZXJuLCBzbyB0aGUgcGVybAorc2NyaXB0IHdpdGggQkVHSU57Li4ufSB3b3VsZCBiZSByZXBvcnRlZCBhcyBhd2ssIHRoaXMgcGF0Y2ggZml4ZXMgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2RlYmlhbl0KKworU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3BoIEJpZWRsIDxkZWJpYW4uYXhobkBtYW5jaG1hbC5pbi11bG0uZGU+CitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL21hZ2ljL01hZ2Rpci9jb21tYW5kcyBiL21hZ2ljL01hZ2Rpci9jb21tYW5kcworLS0tIGEvbWFnaWMvTWFnZGlyL2NvbW1hbmRzCisrKysgYi9tYWdpYy9NYWdkaXIvY29tbWFuZHMKK0BAIC01Nyw2ICs1Nyw3IEBACisgMAlzdHJpbmcvd3QJIyFcIC91c3IvYmluL2F3awlhd2sgc2NyaXB0IHRleHQgZXhlY3V0YWJsZQorICE6bWltZQl0ZXh0L3gtYXdrCisgMAlyZWdleC80MDk2CT1eXFxzezAsMTAwfUJFR0lOXFxzezAsMTAwfVt7XQlhd2sgb3IgcGVybCBzY3JpcHQgdGV4dAorKyE6c3RyZW5ndGggLSAxMgorIAorICMgQVQmVCBCZWxsIExhYnMnIFBsYW4gOSBzaGVsbAorIDAJc3RyaW5nL3d0CSMhXCAvYmluL3JjCVBsYW4gOSByYyBzaGVsbCBzY3JpcHQgdGV4dCBleGVjdXRhYmxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmlsZS9maWxlXzUuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiOTVkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9maWxlL2ZpbGVfNS4yNC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIkZpbGUgY2xhc3NpZmljYXRpb24gdG9vbCIKK0RFU0NSSVBUSU9OID0gIkZpbGUgYXR0ZW1wdHMgdG8gY2xhc3NpZnkgZmlsZXMgZGVwZW5kaW5nIFwKK29uIHRoZWlyIGNvbnRlbnRzIGFuZCBwcmludHMgYSBkZXNjcmlwdGlvbiBpZiBhIG1hdGNoIGlzIGZvdW5kLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZGFyd2luc3lzLmNvbS9maWxlLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyB0d28gY2xhdXNlIEJTRAorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0yO21kNT02YTczODI4NzJlZGI2OGQzM2UxYTkzOThiNmUwMzE4OCIKKworREVQRU5EUyA9ICJ6bGliIGZpbGUtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiemxpYi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9maWxlL2ZpbGUuZ2l0IFwKKyAgICAgICAgZmlsZTovL2RlYmlhbi03NDIyNjIucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1BZGQtUC1wcm9tcHQtaW50by1Vc2FnZS1pbmZvLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNSRVYgPSAiM2MwODc0YmU0ZDMyMzJkNjcyYjIwZjUxMzQ1MWEzOWNmZDdjNTg1YSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L21pc2MvKi5tZ2MiCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfY21kbGluZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2ZpbGUgXAorCQktLW1hZ2ljLWZpbGUgJHtkYXRhZGlyfS9taXNjL21hZ2ljLm1nYworfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX2NtZGxpbmVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9maWxlIFwKKwkJLS1tYWdpYy1maWxlICR7ZGF0YWRpcn0vbWlzYy9tYWdpYy5tZ2MKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvZG9fbm90X2NyZWF0ZV9wZGZfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMjgzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9maWxlcy9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIChlbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitJbmRleDogZmxleC0yLjUuMzcvZG9jL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZmxleC0yLjUuMzcub3JpZy9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wNy0yMSAwNDoxODoyNy4wMDAwMDAwMDAgKzAzMDAKKysrKyBmbGV4LTIuNS4zNy9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wNy0zMCAxNzo1NzowOS44MzQ4MzQ1MzEgKzAzMDAKK0BAIC0yLDcgKzIsNyBAQAorIAorIGluZm9fVEVYSU5GT1MgPQlmbGV4LnRleGkKKyBkaXN0X21hbl9NQU5TID0gZmxleC4xCistZGlzdF9kb2NfREFUQT0gZmxleC5wZGYKKytFWFRSQV9ESVNUPSBmbGV4LnBkZgorIAorIENMRUFORklMRVMgPSBcCisgCWZsZXguaGtzIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmZiYTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0MT0idGVzdC1hbGxvYy1leHRyYSB0ZXN0LWFycmF5LW5yIHRlc3QtYXJyYXktciB0ZXN0LWJhc2ljLW5yIHRlc3QtYmFzaWMtciB0ZXN0LWV4dGVuZGVkIHRlc3QtcXVvdGVzIFwKK3Rlc3QtYmlzb24tbnIgdGVzdC1iaXNvbi15eWxsb2MgdGVzdC1iaXNvbi15eWx2YWwgdGVzdC1jKystYmFzaWMgdGVzdC1jLWNwcC1uciB0ZXN0LXByZWZpeC1uciB0ZXN0LWNjbCBcCit0ZXN0LWMtY3BwLXIgdGVzdC1jKystbXVsdGlwbGUtc2Nhbm5lcnMgdGVzdC1tZW0tciB0ZXN0LW1lbS1uciB0ZXN0LWRlYnVnLW5yIHRlc3QtbGluZWRpci1yIHRlc3Qtbm9hbnNpLXIgXAordGVzdC15eWV4dHJhIHRlc3QtaGVhZGVyLXIgdGVzdC1ub2Fuc2ktbnIgdGVzdC1kZWJ1Zy1yIFRFTVBMQVRFIHRlc3QtdG9wIHRlc3QtaGVhZGVyLW5yIHRlc3QtcHJlZml4LXIiCit0ZXN0Mj0idGVzdC1tdWx0aXBsZS1zY2FubmVycy1uciB0ZXN0LXBvc2l4bHktY29ycmVjdCB0ZXN0LXBvc2l4IHRlc3Qtc3RyaW5nLXIgdGVzdC1zdHJpbmctbnIiCit0ZXN0Mz0idGVzdC1wdGhyZWFkIHRlc3QtaW5jbHVkZS1ieS1wdXNoIHRlc3QtaW5jbHVkZS1ieS1idWZmZXIgdGVzdC1pbmNsdWRlLWJ5LXJlZW50cmFudCIKK3Rlc3Q0PSJ0ZXN0LWxpbmVuby1uciB0ZXN0LWxpbmVuby1yIHRlc3QtbGluZW5vLXRyYWlsaW5nIgordGVzdDU9InRlc3QtYysrLXl5d3JhcCB0ZXN0LXJlc2Nhbi1yIHRlc3QtcmVzY2FuLW5yIgordGVzdDY9InRlc3QtcmVqZWN0LW5yIHRlc3QtcmVqZWN0LXIiCit0ZXN0Nz0idGVzdC1yZWplY3Qtc2VyIHRlc3QtcmVqZWN0LXZlciIKK3Rlc3Q4PSJ0ZXN0LW11bHRpcGxlLXNjYW5uZXJzLXIiCisKK291dHB1dCgpIHsKKyAgaWYgWyAkPyAtZXEgMCBdOyBcCisgICAgdGhlbiBlY2hvICJQQVNTOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIkZBSUw6ICRpIjsgXAorICBmaTsKK30KKworZm9yIGkgaW4gJHRlc3QxOyBkbyAkaS8kaSA8ICRpL3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDI7IGRvICRpLyRpID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3QzOyBkbyBjZCAkaTsgLi8kaSB0ZXN0LTEuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBjZCAuLjsgZG9uZQorZm9yIGkgaW4gJHRlc3Q0OyBkbyB0ZXN0IGAkaS8kaSA8ICRpL3Rlc3QuaW5wdXRgIC1lcSBgJGkvJGkgMSA8ICRpL3Rlc3QuaW5wdXRgID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q1OyBkbyAkaS8kaSAkaS90ZXN0LmlucHV0ID4vZGV2L251bGw7IG91dHB1dDsgZG9uZQorZm9yIGkgaW4gJHRlc3Q2OyBkbyB0ZXN0LXJlamVjdC8kaSA8IHRlc3QtcmVqZWN0L3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitmb3IgaSBpbiAkdGVzdDc7IGRvIHRlc3QtcmVqZWN0LyRpIHRlc3QtcmVqZWN0LyRpLnRhYmxlcyA8IHRlc3QtcmVqZWN0L3Rlc3QuaW5wdXQgPi9kZXYvbnVsbDsgb3V0cHV0OyBkb25lCitjZCAkdGVzdDg7IC4vJHRlc3Q4ID4vZGV2L251bGw7IGk9JHRlc3Q4IG91dHB1dApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGEyNmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ZsZXgvZmxleC5pbmMKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJGbGV4IChUaGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyKSIKK0RFU0NSSVBUSU9OID0gIkZsZXggaXMgYSBmYXN0IGxleGljYWwgYW5hbHlzZXIgZ2VuZXJhdG9yLiAgRmxleCBpcyBhIHRvb2wgZm9yIGdlbmVyYXRpbmcgcHJvZ3JhbXMgdGhhdCByZWNvZ25pemUgXAorbGV4aWNhbCBwYXR0ZXJucyBpbiB0ZXh0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZmxleC8iCisKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRCIKK0RFUEVORFMgKz0gIiR7QCdiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUnIGlmICcke1BURVNUX0VOQUJMRUR9JyA9PSAnMScgZWxzZSAnJ30iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2ZsZXgvZmxleC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyBwdGVzdAorCisKK000ID0gIiR7YmluZGlyfS9tNCIKK000X2NsYXNzLW5hdGl2ZSA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vbTQiCisKK0VYVFJBX09FQ09ORiArPSAiYWNfY3ZfcGF0aF9NND0ke000fSIKK0VYVFJBX09FTUFLRSArPSAibTQ9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L200IgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmxleCBNND0ke000fQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZmxleCBNND0ke000fQorfQorCitSREVQRU5EU18ke1BOfSArPSAibTQiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJZm9yIGkgaW4gYGZpbmQgJHtTfS90ZXN0cy8gLXR5cGUgZCB8Z3JlcCAtRXYgImNvbmNhdGVuYXRlZC1vcHRpb25zfHJlamVjdHx0YWJsZS1vcHRzIiB8IGF3ayAtRi8gJ3twcmludCAkTkZ9J2A7IFwKKwkgIGRvIG9lX3J1bm1ha2UgLUMgJHtTfS90ZXN0cy8kaSAtZiAke0J9L3Rlc3RzLyRpL01ha2VmaWxlIHRvcF9idWlsZGRpcj0ke0J9IEZMRVg9ZmxleCAkaTsgXAorCWRvbmUKKwlvZV9ydW5tYWtlIC1DICR7U30vdGVzdHMvdGVzdC1yZWplY3QgLWYgJHtCfS90ZXN0cy90ZXN0LXJlamVjdC9NYWtlZmlsZSB0b3BfYnVpbGRkaXI9JHtCfSBGTEVYPWZsZXggdGVzdC1yZWplY3QtbnIgdGVzdC1yZWplY3QtciB0ZXN0LXJlamVjdC1zZXIgdGVzdC1yZWplY3QtdmVyCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJZm9yIGkgaW4gYGZpbmQgJHtTfS90ZXN0cy8gLXR5cGUgZCB8IGF3ayAtRi8gJ3twcmludCAkTkZ9J2A7IFwKKwkgIGRvIGNwIC1yICR7U30vdGVzdHMvJGkgJHtEfSR7UFRFU1RfUEFUSH07IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9mbGV4L2ZsZXhfMi41LjM5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODU3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZmxleC9mbGV4XzIuNS4zOS5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgZmxleC5pbmMKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQ3NDJjZjkyZTg5MDQwYjM5NDg2YTYyMTliNjgwNjciCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kb19ub3RfY3JlYXRlX3BkZl9kb2MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3N2Q0NGM2YmI4YzA3MDVlMDAxN2FiOWE4NGExNTAyYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhZGQyYjU1ZjNiYzM4Y2I1MTJiNDhmYWQ3ZDcyZjQzYjExZWYyNDQ0ODdmZjI1ZmMwMGFhYmVjMWUzMmI2MTdmIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEyNDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC5pbmMKQEAgLTAsMCArMSwxMTggQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjQuOC40IgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjQuOC40IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC44OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCisgICAgZmlsZTovLzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNC1zaC1wcjI0ODM2LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMTctZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIwLW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMjktRGVmaW5lLUdMSUJDX0RZTkFNSUNfTElOS0VSLWFuZC1VQ0xJQkNfRFlOQU1JQ19MSU5LRS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzAtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXNkdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzItbGlidG9vbC5wYXRjaCBcCisgICAgZmlsZTovLzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgZmlsZTovLzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBcCisgICAgZmlsZTovLzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Mi1wcjU3NzQ4LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0My1jcHAucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1YTg0YTMwODM5YjJhY2EyMmEyZDcyM2RlMmE2MjZlYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YTgwYWEyMzc5OGI4ZTliNTc5MzQ5NGI4Yzk3NmIzOWI4ZDlhYTJlNTNjZDVlZDU1MzRhZmY2NjJhN2Y4Njk1IgorCitTID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0vZ2NjLSR7UFZ9IgorQiA9ICIke1dPUktESVJ9L2djYy0ke1BWfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCisjIExhbmd1YWdlIE92ZXJyaWRlcworRk9SVFJBTiA9ICIiCitKQVZBID0gIiIKKworTFRPID0gIi0tZW5hYmxlLWx0byIKKworRVhUUkFfT0VDT05GX0JBU0UgPSAiXAorICAgICR7TFRPfSBcCisgICAgLS1lbmFibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtYm9vdHN0cmFwIFwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLXdpdGgtbGlua2VyLWhhc2gtc3R5bGU9JHtMSU5LRVJfSEFTSF9TVFlMRX0gXAorICAgIC0tZW5hYmxlLWxpbmtlci1idWlsZC1pZCBcCisgICAgLS13aXRoLXBwbD1ubyBcCisgICAgLS13aXRoLWNsb29nPW5vIFwKKyAgICAtLWVuYWJsZS1jaGVja2luZz1yZWxlYXNlIFwKKyAgICAtLWVuYWJsZS1jaGVhZGVycz1jX2dsb2JhbCBcCisiCisKK0VYVFJBX09FQ09ORl9JTklUSUFMID0gIlwKKyAgICAtLWRpc2FibGUtbGlibXVkZmxhcCBcCisgICAgLS1kaXNhYmxlLWxpYmdvbXAgXAorICAgIC0tZGlzYWJsZS1saWJzc3AgXAorICAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aCBcCisgICAgLS13aXRoLXN5c3RlbS16bGliIFwKKyAgICAtLWRpc2FibGUtbHRvIFwKKyAgICAtLWRpc2FibGUtcGx1Z2luIFwKKyAgICAtLWVuYWJsZS1kZWNpbWFsLWZsb2F0PW5vIFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLS1kaXNhYmxlLWRlY2ltYWwtZmxvYXQgIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXCAKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwgCisgICAgLS13aXRoLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwgCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMS1nY2MtNC4zLjEtQVJDSF9GTEFHU19GT1JfVEFSR0VULnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg4MDExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIGJmM2Q5NmFlNThmYTE4MGI4YjQ2OGQyNWRjMmUwMjA5ZGFjYTI3NTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozNzoxMSArMDQwMAorU3ViamVjdDogW1BBVENIIDAxLzM1XSBnY2MtNC4zLjE6IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgY29uZmlndXJlICAgIHwgICAgMiArLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggZDgwOTUzNS4uMWI3NmM5MCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzQzOSw3ICs3NDM5LDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDhlYzFhYS4uODlkMWQzZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjg3Myw3ICsyODczLDcgQEAgZmkKKyAjIGZvciB0YXJnZXRfYWxpYXMgYW5kIGdjYyBkb2Vzbid0IG1hbmFnZSBpdCBjb25zaXN0ZW50bHkuCisgdGFyZ2V0X2NvbmZpZ2FyZ3M9Ii0tY2FjaGUtZmlsZT0uL2NvbmZpZy5jYWNoZSAke3RhcmdldF9jb25maWdhcmdzfSIKKyAKKy1GTEFHU19GT1JfVEFSR0VUPQorK0ZMQUdTX0ZPUl9UQVJHRVQ9IiRBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQiCisgY2FzZSAiICR0YXJnZXRfY29uZmlnZGlycyAiIGluCisgICoiIG5ld2xpYiAiKikKKyAgIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2FyZ3MgIiBpbgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAyLXVjbGliYy1jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTNiMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGQwMzA5NzNjODcyYzAwZDkxNjkyMWQ4NGRlZWUwYWYyYzBkMzgwODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODozODoyNSArMDQwMAorU3ViamVjdDogW1BBVENIIDAyLzM1XSB1Y2xpYmMtY29uZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCB8ICAgIDQgKysrKworIGxpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnICAgICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitpbmRleCA2MGIwNDk3Li42ZGM3ZWFkIDEwMDc1NQorLS0tIGEvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCisrKysgYi9jb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2gKK0BAIC0xMDYsNiArMTA2LDEwIEBAIGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LWdudSBdCisgIHRoZW4KKyAgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorK2VsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCAtYSAkSF9SRUFMX1RBUkdFVCA9IGk2ODYtcGMtbGludXgtdWNsaWJjIF0KKysgdGhlbgorKyAgbWFrZSBhbGwtZ2RiIGFsbC1kZWphZ251IGFsbC1sZCB8fCBleGl0IDEKKysgIG1ha2UgaW5zdGFsbC1nZGIgaW5zdGFsbC1kZWphZ251IGluc3RhbGwtbGQgfHwgZXhpdCAxCisgZWxpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIF0gOyB0aGVuCisgICBtYWtlIGJvb3RzdHJhcCB8fCBleGl0IDEKKyAgIG1ha2UgaW5zdGFsbCB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitpbmRleCA3NDNkOTUxLi5hZTRlYTYwIDEwMDc1NQorLS0tIGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcKKysrKyBiL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCitAQCAtNjAzLDcgKzYwMyw3IEBAIGhvc3Rfb3M9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorIAorICMgVHJhbnNmb3JtIGxpbnV4KiB0byAqLSotbGludXgtZ251KiwgdG8gc3VwcG9ydCBvbGQgY29uZmlndXJlIHNjcmlwdHMuCisgY2FzZSAkaG9zdF9vcyBpbgorLWxpbnV4LWdudSopIDs7CisrbGludXgtZ251KnxsaW51eC11Y2xpYmMqKSA7OworIGxpbnV4KikgaG9zdD1gZWNobyAkaG9zdCB8IHNlZCAncy9eXCguKi0uKi1saW51eFwpXCguKlwpJC9cMS1nbnVcMi8nYAorIGVzYWMKKyAKK0BAIC0xMjQ3LDcgKzEyNDcsNyBAQCBsaW51eC1nbnVvbGRsZCogfCBsaW51eC1nbnVhb3V0KiB8IGxpbnV4LWdudWNvZmYqKQorICAgOzsKKyAKKyAjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCistbGludXgtZ251KikKKytsaW51eCopCisgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgbmVlZF92ZXJzaW9uPW5vCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4ZTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoCkBAIC0wLDAgKzEsODcgQEAKK0Zyb20gZDJkOWRkNzU2YzQzNTZkMTRkZDdhZTAwMzg1NjM0NGNiNGYzNzk4NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQwOjEyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDMvMzVdIGdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MgfCAgICA1ICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oICB8ICAgIDkgKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oICB8ICAgIDkgKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYworaW5kZXggMGQzMDlhNS4uZjJmMWUxZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK0BAIC0yNjMsNSArMjYzLDEwIEBAIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorICNpZmRlZiBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKKyAjZGVmaW5lIF9HTElCQ1hYX0xEQkxfQ09NUEFUKGRibCwgbGRibCkgXAorICAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlhcyAoI2RibCkpKQorKyNpZmRlZiBfX1VDTElCQ19fCisrLy8gVGhpcyBpcyBiZWNhdXNlIF9fY19sb2NhbGUgaXMgb2YgdHlwZSBfX2N0eXBlX3RvdXBsb3dfdCogd2hpY2ggaXMgc2hvcnQgb24gdWNsaWJjLiBmb3IgZ2xpYmMgaXRzIGludCoKKytfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMsIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQcyk7CisrI2Vsc2UKKyBfR0xJQkNYWF9MREJMX0NPTVBBVChfWlN0MTRfX2NvbnZlcnRfdG9fdklkRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGksIF9aU3QxNF9fY29udmVydF90b192SWVFdlBLY1JUX1JTdDEyX0lvc19Jb3N0YXRlUktQaSk7CisrI2VuZGlmCisgI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxFX0NPTVBBVAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAoraW5kZXggYjVmZDk4OS4uM2RhOWE1ZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCitAQCAtNDAsMTMgKzQwLDIyIEBACisgCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjZW5kaWYKKysKKyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKyAKKyBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyAgdHlwZWRlZiBfX2N0eXBlX3RvdXBsb3dfdCoJX19jX2xvY2FsZTsKKysjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKyAKKyAgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAgLy8gcmV0dXJuIGxlbmd0aCBvZiBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitpbmRleCAyZDhlOTc4Li4xNGViMDhmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL29zL2dudS1saW51eC9jdHlwZV9iYXNlLmgKK0BAIC0zMyw2ICszMywxMSBAQAorIAorIC8vIEluZm9ybWF0aW9uIGFzIGdsZWFuZWQgZnJvbSAvdXNyL2luY2x1ZGUvY3R5cGUuaAorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCitAQCAtNDEsNyArNDYsMTEgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHN0cnVjdCBjdHlwZV9iYXNlCisgICB7CisgICAgIC8vIE5vbi1zdGFuZGFyZCB0eXBlZGVmcy4KKysjaWZkZWYgX19VQ0xJQkNfXworKyAgICB0eXBlZGVmIGNvbnN0IF9fY3R5cGVfdG91cGxvd190KglfX3RvX3R5cGU7CisrI2Vsc2UKKyAgICAgdHlwZWRlZiBjb25zdCBpbnQqIAkJX190b190eXBlOworKyNlbmRpZgorIAorICAgICAvLyBOQjogT2Zmc2V0cyBpbnRvIGN0eXBlPGNoYXI+OjpfTV90YWJsZSBmb3JjZSBhIHBhcnRpY3VsYXIgc2l6ZQorICAgICAvLyBvbiB0aGUgbWFzayB0eXBlLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGRvbid0IHVzZSBhbiBlbnVtLgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNC11Y2xpYmMtbG9jYWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY1ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaApAQCAtMCwwICsxLDI4NjIgQEAKK0Zyb20gYTU1Yzc1MWE0NDljMmNiZjBiM2ZjYzA3YWFiMWI4NmJmOTY2MTUxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQxOjM5ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMzVdIHVjbGliYy1sb2NhbGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAgNjMgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgIDMwOCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjICAgICAgICB8ICAgODAgKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDEwMCArKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAxMTggKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgIDY5MiArKysrKysrKysrKysrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgIDQwNiArKysrKysrKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgNjggKysKKyBsaWJzdGRjKystdjMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgICAyICsKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIgICAgICAgICAgICAgICAgICB8ICAgIDIgKworIDE2IGZpbGVzIGNoYW5nZWQsIDI2ODggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CitpbmRleCAwODcxYTZhLi4zMjZkN2VmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAorQEAgLTE5MDUsNiArMTkwNSw5IEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMjA2OSw2ICsyMDcyLDQwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9DQUxFXSwgWworICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIEFDX01TR19SRVNVTFQodWNsaWJjKQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgIEFDX0NIRUNLX1BST0coY2hlY2tfbXNnZm10LCBtc2dmbXQsIHllcywgbm8pCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrICAgICAgQUNfU1VCU1QoZ2xpYmN4eF9NT0ZJTEVTKQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfUE9GSUxFUykKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhZTNlNGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTAsMCArMSw2MyBAQAorKy8vIFByb3RvdHlwZXMgZm9yIEdMSUJDIHRocmVhZCBsb2NhbGUgX18tcHJlZml4ZWQgZnVuY3Rpb25zIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5layA8amFrdWJAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBjbGVhbiB0aGlzIHVwCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysKKytleHRlcm4gIkMiIF9fdHlwZW9mKG5sX2xhbmdpbmZvX2wpIF9fbmxfbGFuZ2luZm9fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cmNvbGxfbCkgX19zdHJjb2xsX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJmdGltZV9sKSBfX3N0cmZ0aW1lX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2RfbCkgX19zdHJ0b2RfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvZl9sKSBfX3N0cnRvZl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9sZF9sKSBfX3N0cnRvbGRfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnhmcm1fbCkgX19zdHJ4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihuZXdsb2NhbGUpIF9fbmV3bG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZnJlZWxvY2FsZSkgX19mcmVlbG9jYWxlOworK2V4dGVybiAiQyIgX190eXBlb2YoZHVwbG9jYWxlKSBfX2R1cGxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrZXh0ZXJuICJDIiBfX3R5cGVvZihpc3djdHlwZV9sKSBfX2lzd2N0eXBlX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3dsb3dlcl9sKSBfX3Rvd2xvd2VyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih0b3d1cHBlcl9sKSBfX3Rvd3VwcGVyX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3Njb2xsX2wpIF9fd2NzY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzZnRpbWVfbCkgX193Y3NmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworKyNlbmRpZgorKworKyNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNTA4MWRjMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIFdyYXBwZXIgZm9yIHVuZGVybHlpbmcgQy1sYW5ndWFnZSBsb2NhbGl6YXRpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi44ICBTdGFuZGFyZCBsb2NhbGUgY2F0ZWdvcmllcy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGNlcnJubz4gIC8vIEZvciBlcnJubworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fc3RydG9sX2woUywgRSwgQiwgTCkgICAgICBzdHJ0b2woKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b3VsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvbGxfbChTLCBFLCBCLCBMKSAgICAgc3RydG9sbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b3VsbF9sKFMsIEUsIEIsIEwpICAgIHN0cnRvdWxsKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyNkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyN3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrI2RlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyNkZWZpbmUgX19mcmVlbG9jYWxlKGEpICAgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZjsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19kOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2xkOworKwkgIGVsc2UKKysJICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworKwl9CisrICAgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgIF9fY19sb2NhbGUgX19vbGQpCisrICB7CisrICAgIF9fY2xvYyA9IF9fbmV3bG9jYWxlKDEgPDwgTENfQUxMLCBfX3MsIF9fb2xkKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBpZiAoIV9fY2xvYykKKysgICAgICB7CisrCS8vIFRoaXMgbmFtZWQgbG9jYWxlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgT1MuCisrCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisrCQkJICAgICAgIm5hbWUgbm90IHZhbGlkIikpOworKyAgICAgIH0KKysjZW5kaWYKKysgIH0KKysKKysgIHZvaWQKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeworKyAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworKyAgfQorKworKyAgX19jX2xvY2FsZQorKyAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorKyAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorK30gLy8gbmFtZXNwYWNlIHN0ZAorKworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKysgICAgeworKyAgICAgICJMQ19DVFlQRSIsCisrICAgICAgIkxDX05VTUVSSUMiLAorKyAgICAgICJMQ19USU1FIiwKKysgICAgICAiTENfQ09MTEFURSIsCisrICAgICAgIkxDX01PTkVUQVJZIiwKKysgICAgICAiTENfTUVTU0FHRVMiLAorKyNpZiBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAhPSAwCisrICAgICAgIkxDX1BBUEVSIiwKKysgICAgICAiTENfTkFNRSIsCisrICAgICAgIkxDX0FERFJFU1MiLAorKyAgICAgICJMQ19URUxFUEhPTkUiLAorKyAgICAgICJMQ19NRUFTVVJFTUVOVCIsCisrICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorKyNlbmRpZgorKyAgICB9OworK30KKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisrfSAgLy8gbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kYTA3YzFmCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTAsMCArMSwxMTcgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZm5kZWYgX0NfTE9DQUxFX0gKKysjZGVmaW5lIF9DX0xPQ0FMRV9IIDEKKysKKysjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisrCisrI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjZW5kaWYKKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysjZW5kaWYKKysjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGNhdGVnb3JpZXMKKysjZW5kaWYKKysvLyAjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDYKKysjZGVmaW5lIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTIDAKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworK25hbWVzcGFjZSBfX2dudV9jeHgKKyt7CisrICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisrfQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgIHR5cGVkZWYgX19sb2NhbGVfdAkJX19jX2xvY2FsZTsKKysjZWxzZQorKyAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKysjZW5kaWYKKysKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBiZSBhdm9pZGVkLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorKyAgICBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICB7CisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX19zYXYsIF9fb2xkKTsKKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsICJDIik7CisrIyBlbmRpZgorKyNlbmRpZgorKworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKysjZW5kaWYKKysgICAgICByZXR1cm4gX19yZXQ7CisrICAgIH0KKyt9CisrCisrI2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi42NGFhOTYyCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwOCBAQAorKy8vIHN0ZDo6Y29kZWN2dCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPiAgLy8gRm9yIE1CX0NVUl9NQVgKKysjaW5jbHVkZSA8Y2xpbWl0cz4gIC8vIEZvciBNQl9MRU5fTUFYCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFNwZWNpYWxpemF0aW9ucy4KKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisrCSBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKysJIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCisrCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyB3Y3NucnRvbWJzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwgYmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiB3Y3NucnRvbWJzIGlzIGEgR05VIGV4dGVuc2lvbgorKyAgICBmb3IgKF9fZnJvbV9uZXh0ID0gX19mcm9tLCBfX3RvX25leHQgPSBfX3RvOworKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fdG9fbmV4dCA8IF9fdG9fZW5kCisrCSAmJiBfX3JldCA9PSBvazspCisrICAgICAgeworKwljb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAnLAorKwkJCQkJCSAgICAgIF9fZnJvbV9lbmQgLSBfX2Zyb21fbmV4dCk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkJIF9fZnJvbV9jaHVua19lbmQgLSBfX2Zyb21fbmV4dCwKKysJCQkJCSBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyB3Y3J0b21iLgorKwkgICAgZm9yICg7IF9fZnJvbSA8IF9fZnJvbV9uZXh0OyArK19fZnJvbSkKKysJICAgICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUpOworKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgPSBlcnJvcjsKKysJICB9CisrCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJvbV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKysJICB7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fZnJvbV9uZXh0ID0gX19mcm9tX2NodW5rX2VuZDsKKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgfQorKworKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorKwkgIHsKKysJICAgIGV4dGVybl90eXBlIF9fYnVmW01CX0xFTl9NQVhdOworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgY29uc3Qgc2l6ZV90IF9fY29udiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsKKysJICAgIGlmIChfX2NvbnYgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19uZXh0KSkKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgICAgZWxzZQorKwkgICAgICB7CisrCQltZW1jcHkoX190b19uZXh0LCBfX2J1ZiwgX19jb252KTsKKysJCV9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJCV9fdG9fbmV4dCArPSBfX2NvbnY7CisrCQkrK19fZnJvbV9uZXh0OworKwkgICAgICB9CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCWludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCisrCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorKyAgeworKyAgICByZXN1bHQgX19yZXQgPSBvazsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb21fbmV4dCwgJ1wwJywKKysJCQkJCQkJCSAgX19mcm9tX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbV9uZXh0KSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKysKKysJX19mcm9tID0gX19mcm9tX25leHQ7CisrCXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG9fbmV4dCwgJl9fZnJvbV9uZXh0LAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCSAgIF9fdG9fZW5kIC0gX190b19uZXh0LCAmX19zdGF0ZSk7CisrCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisrCSAgeworKwkgICAgLy8gSW4gY2FzZSBvZiBlcnJvciwgaW4gb3JkZXIgdG8gc3RvcCBhdCB0aGUgZXhhY3QgcGxhY2Ugd2UKKysJICAgIC8vIGhhdmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKysJICAgIC8vIG1icnRvd2MuCisrCSAgICBmb3IgKDs7ICsrX190b19uZXh0LCBfX2Zyb20gKz0gX19jb252KQorKwkgICAgICB7CisrCQlfX2NvbnYgPSBtYnJ0b3djKF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisrCSAgICAgIHsKKysJCS8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzCisrCQlfX3RtcF9zdGF0ZSA9IF9fc3RhdGU7CisrCQkrK19fZnJvbV9uZXh0OworKwkJKl9fdG9fbmV4dCsrID0gTCdcMCc7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgX19yZXQgPSBwYXJ0aWFsOworKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBpbnQKKysgIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pjo6CisrICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkKKysgIHsKKysgICAgLy8gWFhYIFRoaXMgaW1wbGVtZW50YXRpb24gYXNzdW1lcyB0aGF0IHRoZSBlbmNvZGluZyBpcworKyAgICAvLyBzdGF0ZWxlc3MgYW5kIGlzIGVpdGhlciBzaW5nbGUtYnl0ZSBvciB2YXJpYWJsZS13aWR0aC4KKysgICAgaW50IF9fcmV0ID0gMDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIGlmIChNQl9DVVJfTUFYID09IDEpCisrICAgICAgX19yZXQgPSAxOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrICAgIC8vIFhYWCBQcm9iYWJseSB3cm9uZyBmb3Igc3RhdGVmdWwgZW5jb2RpbmdzLgorKyAgICBpbnQgX19yZXQgPSBNQl9DVVJfTUFYOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fbGVuZ3RoKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCSAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKKysgIHsKKysgICAgaW50IF9fcmV0ID0gMDsKKysgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisrI2VuZGlmCisrCisrICAgIC8vIG1ic25ydG93Y3MgaXMgKnZlcnkqIGZhc3QgYnV0IHN0b3BzIGlmIGVuY291bnRlcnMgTlVMIGNoYXJhY3RlcnM6CisrICAgIC8vIGluIGNhc2Ugd2UgYWR2YW5jZSBwYXN0IGl0IGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisrICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4dGVuc2lvbgorKworKyAgICAvLyBBIGR1bW15IGludGVybmFsIGJ1ZmZlciBpcyBuZWVkZWQgaW4gb3JkZXIgZm9yIG1ic25ydG9jd3MgdG8gY29uc2lkZXIKKysgICAgLy8gaXRzIGZvdXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgorKyAgICB3Y2hhcl90KiBfX3RvID0gc3RhdGljX2Nhc3Q8d2NoYXJfdCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKHdjaGFyX3QpCisrCQkJCQkJCSAgICogX19tYXgpKTsKKysgICAgd2hpbGUgKF9fZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorKyAgICAgIHsKKysJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQ7CisrCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisrCQkJCQkJCQkgIF9fZW5kCisrCQkJCQkJCQkgIC0gX19mcm9tKSk7CisrCWlmICghX19mcm9tX2NodW5rX2VuZCkKKysJICBfX2Zyb21fY2h1bmtfZW5kID0gX19lbmQ7CisrCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvLCAmX19mcm9tLAorKwkJCQkgICBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tLAorKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhOVUxMLCBfX2Zyb20sIF9fZW5kIC0gX19mcm9tLAorKwkJCQkgJl9fdG1wX3N0YXRlKTsKKysJCWlmIChfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkKKysJCSAgICB8fCBfX2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisrCQkgIGJyZWFrOworKwkgICAgICB9CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwkgICAgYnJlYWs7CisrCSAgfQorKwlpZiAoIV9fZnJvbSkKKysJICBfX2Zyb20gPSBfX2Zyb21fY2h1bmtfZW5kOworKworKwlfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworKwlfX21heCAtPSBfX2NvbnY7CisrCisrCWlmIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysJICB7CisrCSAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkgICAgKytfX2Zyb207CisrCSAgICArK19fcmV0OworKwkgICAgLS1fX21heDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmMyNjY0YTcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsODAgQEAKKysvLyBzdGQ6OmNvbGxhdGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjQuMS4yICBjb2xsYXRlIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKKysgIC8vIGJlIHB1dCB0aGVyZSBpbnN0ZWFkIG9mIGhlcmUuCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlKGNvbnN0IGNoYXIqIF9fb25lLCBjb25zdCBjaGFyKiBfX3R3bykgY29uc3QKKysgICAgeworKyAgICAgIGludCBfX2NtcCA9IF9fc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisrICAgICAgcmV0dXJuIChfX2NtcCA+PiAoOCAqIHNpemVvZiAoaW50KSAtIDIpKSB8IChfX2NtcCAhPSAwKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBzaXplX3QKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKysJCQkJc2l6ZV90IF9fbikgY29uc3QKKysgICAgeyByZXR1cm4gX19zdHJ4ZnJtX2woX190bywgX19mcm9tLCBfX24sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIGludAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9jb21wYXJlKGNvbnN0IHdjaGFyX3QqIF9fb25lLAorKwkJCQkgY29uc3Qgd2NoYXJfdCogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3djc2NvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX3RyYW5zZm9ybSh3Y2hhcl90KiBfX3RvLCBjb25zdCB3Y2hhcl90KiBfX2Zyb20sCisrCQkJCSAgIHNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI5NGUzYQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMzAwIEBACisrLy8gc3RkOjpjdHlwZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMS4xLjIgIGN0eXBlIHZpcnR1YWwgZnVuY3Rpb25zLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCisrI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCisrI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCisrI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisrICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKysgIHRlbXBsYXRlPD4KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisrICAgIHsKKysgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwl7CisrCSAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSk7CisrCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLCBfX3MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgdGhpcy0+X01fdG91cHBlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvdXBwZXI7CisrCSAgdGhpcy0+X01fdG9sb3dlciA9IHRoaXMtPl9NX2NfbG9jYWxlX2N0eXBlLT5fX2N0eXBlX3RvbG93ZXI7CisrCSAgdGhpcy0+X01fdGFibGUgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV9iOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKKysgIGN0eXBlPHdjaGFyX3Q+OjpfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdAorKyAgeworKyAgICBfX3dtYXNrX3R5cGUgX19yZXQ7CisrICAgIHN3aXRjaCAoX19tKQorKyAgICAgIHsKKysgICAgICBjYXNlIHNwYWNlOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHByaW50OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGNudHJsOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImNudHJsIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHVwcGVyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woInVwcGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGxvd2VyOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImxvd2VyIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFscGhhOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFscGhhIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGRpZ2l0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHB1bmN0OgorKwlfX3JldCA9IF9fd2N0eXBlX2woInB1bmN0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIHhkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgYWxudW06CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiYWxudW0iLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGNhc2UgZ3JhcGg6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgiZ3JhcGgiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrCWJyZWFrOworKyAgICAgIGRlZmF1bHQ6CisrCV9fcmV0ID0gX193bWFza190eXBlKCk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93dXBwZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b3VwcGVyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93dXBwZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9fdG93bG93ZXJfbChfX2MsIF9NX2NfbG9jYWxlX2N0eXBlKTsgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+Ojpkb190b2xvd2VyKHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrICAgICAgICAqX19sbyA9IF9fdG93bG93ZXJfbCgqX19sbywgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICAgICAgKytfX2xvOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBib29sCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisrICB7CisrICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICBib29sIF9fcmV0ID0gZmFsc2U7CisrICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorKwkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwl7CisrCSAgX19yZXQgPSB0cnVlOworKwkgIGJyZWFrOworKwl9CisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19pcyhjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKKysgIHsKKysgICAgZm9yICg7IF9fbG8gPCBfX2hpOyArK19fdmVjLCArK19fbG8pCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJbWFzayBfX20gPSAwOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9faXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCSAgICBfX20gfD0gX01fYml0W19fYml0Y3VyXTsKKysJKl9fdmVjID0gX19tOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmICF0aGlzLT5kb19pcyhfX20sICpfX2xvKSkKKysgICAgICArK19fbG87CisrICAgIHJldHVybiBfX2xvOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKKysgIHsKKysgICAgd2hpbGUgKF9fbG8gPCBfX2hpICYmIHRoaXMtPmRvX2lzKF9fbSwgKl9fbG8pICE9IDApCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIHdjaGFyX3QKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAorKyAgeyByZXR1cm4gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKV07IH0KKysKKysgIGNvbnN0IGNoYXIqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCB3Y2hhcl90KiBfX2Rlc3QpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysgICAgICB7CisrCSpfX2Rlc3QgPSBfTV93aWRlbltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sbyldOworKwkrK19fbG87CisrCSsrX19kZXN0OworKyAgICAgIH0KKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICBjaGFyCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3cod2NoYXJfdCBfX3djLCBjaGFyIF9fZGZhdWx0KSBjb25zdAorKyAgeworKyAgICBpZiAoX193YyA+PSAwICYmIF9fd2MgPCAxMjggJiYgX01fbmFycm93X29rKQorKyAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKF9fd2MpOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19uYXJyb3coY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgY2hhciBfX2RmYXVsdCwKKysJICAgIGNoYXIqIF9fZGVzdCkgY29uc3QKKysgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOworKyNlbmRpZgorKyAgICBpZiAoX01fbmFycm93X29rKQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGlmICgqX19sbyA+PSAwICYmICpfX2xvIDwgMTI4KQorKwkgICAgKl9fZGVzdCA9IF9NX25hcnJvd1sqX19sb107CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBjb25zdCBpbnQgX19jID0gd2N0b2IoKl9fbG8pOworKwkgICAgICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICAgfQorKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyAgICBlbHNlCisrICAgICAgd2hpbGUgKF9fbG8gPCBfX2hpKQorKwl7CisrCSAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAqX19kZXN0ID0gKF9fYyA9PSBFT0YgPyBfX2RmYXVsdCA6IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOworKwkgICsrX19sbzsKKysJICArK19fZGVzdDsKKysJfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIF9faGk7CisrICB9CisrCisrICB2b2lkCisrICBjdHlwZTx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgd2ludF90IF9faTsKKysgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQorKyAgICAgIHsKKysJY29uc3QgaW50IF9fYyA9IHdjdG9iKF9faSk7CisrCWlmIChfX2MgPT0gRU9GKQorKwkgIGJyZWFrOworKwllbHNlCisrCSAgX01fbmFycm93W19faV0gPSBzdGF0aWNfY2FzdDxjaGFyPihfX2MpOworKyAgICAgIH0KKysgICAgaWYgKF9faSA9PSAxMjgpCisrICAgICAgX01fbmFycm93X29rID0gdHJ1ZTsKKysgICAgZWxzZQorKyAgICAgIF9NX25hcnJvd19vayA9IGZhbHNlOworKyAgICBmb3IgKHNpemVfdCBfX2ogPSAwOworKwkgX19qIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVvZih3aW50X3QpOyArK19faikKKysgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKKysKKysgICAgZm9yIChzaXplX3QgX19rID0gMDsgX19rIDw9IDExOyArK19faykKKysgICAgICB7CisrCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oX0lTYml0KF9faykpOworKwlfTV93bWFza1tfX2tdID0gX01fY29udmVydF90b193bWFzayhfTV9iaXRbX19rXSk7CisrICAgICAgfQorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysgIH0KKysjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMzU5NGQ5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTAsMCArMSwxMDAgQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggZ2V0dGV4dCBzdHVmZgorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX19kY2dldHRleHQoY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkgICAgIGNvbnN0IGNoYXIgKm1zZ2lkLCBpbnQgY2F0ZWdvcnkpOworKyN1bmRlZiBnZXR0ZXh0CisrI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSBfX2RjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisrI2Vsc2UKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrICB0ZW1wbGF0ZTw+CisrICAgIHN0cmluZworKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKSk7CisrICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfbWVzc2FnZXMpOworKyAgICAgIGNvbnN0IGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfX2RmYXVsdC5jX3N0cigpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2Vsc2UKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIHN0cmluZyhfX21zZyk7CisrI2VuZGlmCisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgd3N0cmluZworKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjaGFyKiBfX21zZyA9IGdldHRleHQoX01fY29udmVydF90b19jaGFyKF9fZGZhdWx0KSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbHNlCisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihfX21zZyk7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlmCisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTQyNDA3OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTAsMCArMSwxMTggQEAKKysvLyBzdGQ6Om1lc3NhZ2VzIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi43LjEuMiAgbWVzc2FnZXMgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworK2V4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworK2V4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorKwkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworKyNlbHNlCisrI3VuZGVmIF9fdGV4dGRvbWFpbgorKyN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCisrI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjZW5kaWYKKysKKysgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhzaXplX3QgX19yZWZzKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKysgICAgIHsgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIHsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrICAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKysJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKysgICAgeworKyAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKysgICAgfQorKworKyAgLy8gVmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojp+bWVzc2FnZXMoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV9tZXNzYWdlczsKKysgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCisrCQkJICAgICAgY29uc3QgbG9jYWxlJikgY29uc3QKKysgICAgeworKyAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorKyAgICAgIC8vIGJlIHVzZWQuCisrICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB2b2lkCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0CisrICAgIHsgfQorKworKyAgIC8vIG1lc3NhZ2VzX2J5bmFtZQorKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzX2J5bmFtZTxfQ2hhclQ+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorKyAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKKysgICAgIHsKKysgICAgICAgaWYgKHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgIT0gbG9jYWxlOjpmYWNldDo6X1NfZ2V0X2NfbmFtZSgpKQorKwkgZGVsZXRlIFtdIHRoaXMtPl9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICBpZiAoc3RkOjpzdHJjbXAoX19zLCAiQyIpICE9IDAgJiYgc3RkOjpzdHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorKwkgeworKwkgICB0aGlzLT5fU19kZXN0cm95X2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysJICAgdGhpcy0+X1NfY3JlYXRlX2NfbG9jYWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworKwkgfQorKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5hYTUyNzMxCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTAsMCArMSw2OTIgQEAKKysvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjYuMy4yICBtb25leXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIG9wdGltaXplIHRoaXMgZm9yIHVjbGliYworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKKysgIC8vIHNwYWNlIG5vbmUgc3ltYm9sIHNpZ24gdmFsdWUKKysgIG1vbmV5X2Jhc2U6OnBhdHRlcm4KKysgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbikKKysgIHsKKysgICAgcGF0dGVybiBfX3JldDsKKysKKysgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGljYXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisrICAgIC8vIHBhdHRlcm4gZm9yIHVzZSB3aXRoIG1vbnllcHVuY3QuIEEgY291cGxlIG9mIGludmFyaWFudHM6CisrCisrICAgIC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKysgICAgLy8gZWxzZSB2YWx1ZSAtPiBzeW1ib2wKKysKKysgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisrICAgIC8vIGVsc2Ugbm9uZQorKworKyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisrICAgIC8vIHNwYWNlIG5ldmVyIGZpcnN0IG9yIGxhc3QKKysKKysgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdlbGNvbWUuCisrICAgIHN3aXRjaCAoX19wb3NuKQorKyAgICAgIHsKKysgICAgICBjYXNlIDA6CisrICAgICAgY2FzZSAxOgorKwkvLyAxIFRoZSBzaWduIHByZWNlZGVzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlfX3JldC5maWVsZFswXSA9IHNpZ247CisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGggc2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAyOgorKwkvLyAyIFRoZSBzaWduIGZvbGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisrCWlmIChfX3NwYWNlKQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgLy8gUGF0dGVybiBlbmRzIHdpdGggc2lnbiB0aGVuIG5vbmUuCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkgICAgX19yZXQuZmllbGRbM10gPSBub25lOworKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSAzOgorKwkvLyAzIFRoZSBzaWduIGltbWVkaWF0ZWx5IHByZWNlZGVzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgY2FzZSA0OgorKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIHN5bWJvbC4KKysJaWYgKF9fcHJlY2VkZXMpCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSBzeW1ib2w7CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNpZ247CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisrCSAgICBpZiAoX19zcGFjZSkKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwk7CisrICAgICAgfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIiOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1vbmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX0RFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9USE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSB0cnVlCisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCk7CisrCSAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9GUkFDX0RJR0lUUywKKysJCQkJCQkgICAgICBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fcHByZWNlZGVzLCBfX3BzcGFjZSwKKysJCQkJCQkJX19wcG9zbik7CisrCSAgY2hhciBfX25wcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrCQkJCQkJICAgICAgY29uc3QgY2hhciopCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPGNoYXIsIGZhbHNlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIGlmICghX19ucG9zbikKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLAorKwkJCQkJCQlfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAvLyBfSW50bCA9PSBmYWxzZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fQ1VSUkVOQ1lfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJCWNvbnN0IGNoYXIqKQorKyNlbHNlCisrCQkJCQkJCWNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgICAgeworKyAgICAgIGlmICghX01fZGF0YSkKKysJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKysKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX1NJR05fUE9TTiwgX19jbG9jKSk7CisrCSAgdHJ5CisrCSAgICB7CisrCSAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKwkgICAgICBzaXplX3QgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jbmVnc2lnbik7CisrCSAgICAgIGlmICghX19ucG9zbikKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIigpIjsKKysJICAgICAgZWxzZSBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19ucyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX25zLCAmX19jbmVnc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IF9fd2NzX25zOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKwkgIGNhdGNoICguLi4pCisrCSAgICB7CisrCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworKwkgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgIHZvaWQKKysgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJCQkJCQkgICAgICAgY29uc3QgY2hhciopCisrI2Vsc2UKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19uYW1lKQorKyNlbmRpZgorKyAgeworKyAgICBpZiAoIV9NX2RhdGEpCisrICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFsc2U+OworKworKyAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKyAgICAgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgLy8gVXNlIGN0eXBlOjp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworKyNlbHNlCisrCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCisrCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG1vbmV0YXJ5CisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbHNlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorKyAgICAgICAgICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCisrCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgY29uc3QgY2hhciogX19jY3VyciA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysKKysJICB3Y2hhcl90KiBfX3djc19wcyA9IDA7CisrCSAgd2NoYXJfdCogX193Y3NfbnMgPSAwOworKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgIG1ic3RhdGVfdCBfX3N0YXRlOworKyAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuOworKyAgICAgICAgICAgICAgX19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisrICAgICAgICAgICAgICBpZiAoX19sZW4pCisrICAgICAgICAgICAgICAgIHsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX3BzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfcHMsICZfX2Nwb3NzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX193Y3NfcHM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IHdjc2xlbihfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduKTsKKysKKysJICAgICAgLy8gX0ludGwgPT0gdHJ1ZS4KKysJICAgICAgX19sZW4gPSBzdHJsZW4oX19jY3Vycik7CisrCSAgICAgIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKysgICAgICAgICAgICAgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgICAgfQorKyAgICAgICAgICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgICAgICAgICAgIF9NX2RhdGEgPSAwOworKwkgICAgICBkZWxldGUgX193Y3NfcHM7CisrCSAgICAgIGRlbGV0ZSBfX3djc19uczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKwkgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwkgICAgfQorKworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19GUkFDX0RJR0lUUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX3BzcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19uc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCkKKysgICAgeworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUKKysgICAgICAgICAgJiYgd2NzY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sIEwiKCkiKSAhPSAwKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sOworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjg4M2VjMWEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTYwIEBACisrLy8gc3RkOjpudW1wdW5jdCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuMy4xLjIgIG51bXB1bmN0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNkZWZpbmUgX0xJQkMKKysjaW5jbHVkZSA8bG9jYWxlPgorKyN1bmRlZiBfTElCQworKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorKyNlbmRpZgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyNlbmRpZgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTxjaGFyPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKysKKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKFRIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKworKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3VwaW5nLgorKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIGVsc2UKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKEdST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwl9CisrCisrICAgICAgLy8gTkI6IFRoZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKysgICAgICAvLyBfTV90cnVlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWUgPSAidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9ICJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworKworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fbnVtX2Jhc2U6Ol9TX29lbmQ7ICsrX19pKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfb3V0W19faV0gPQorKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19pXSk7CisrCisrCSAgZm9yIChzaXplX3QgX19qID0gMDsgX19qIDwgX19udW1fYmFzZTo6X1NfaWVuZDsgKytfX2opCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfaW5bX19qXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKworKwkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gTCJ0cnVlIjsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZV9zaXplID0gNDsKKysgICAgICAvLyBfTV9mYWxzZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woTk9TVFIsIF9fY2xvYyk7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lID0gTCJmYWxzZSI7CisrICAgICAgX01fZGF0YS0+X01fZmFsc2VuYW1lX3NpemUgPSA1OworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorKyAgICB7IGRlbGV0ZSBfTV9kYXRhOyB9CisrICNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmUwNzA3ZDcKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNDA2IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVhbCBmdW5jdGlvbnMKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKysgICAgX01fcHV0KGNoYXIqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25zdCBjaGFyKiBfX2Zvcm1hdCwKKysJICAgY29uc3QgdG0qIF9fdG0pIGNvbnN0CisrICAgIHsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9ICdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9ICIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9ICIlSDolTTolUyI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSAiQU0iOworKwkgIF9NX2RhdGEtPl9NX3BtID0gIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSAiU3VuZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gIldlZG5lc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9ICJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9ICJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSAiU2F0dXJkYXkiOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSAiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9ICJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSAiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9ICJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gIkZyaSI7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSAiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSAiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9ICJGZWJydWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9ICJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9ICJNYXkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSAiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9ICJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gIkF1Z3VzdCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9ICJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSAiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9ICJOb3ZlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9ICJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSAiRmViIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9ICJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9ICJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSAiQXVnIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9ICJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSAiTm92IjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9ICJEZWMiOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKysKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX1RfRk1ULAorKwkJCQkJCQkgICAgIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW0gPSBfX25sX2xhbmdpbmZvX2woQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX19ubF9sYW5naW5mb19sKFBNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woVF9GTVRfQU1QTSwgX19jbG9jKTsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX25sX2xhbmdpbmZvX2woREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gX19ubF9sYW5naW5mb19sKERBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX25sX2xhbmdpbmZvX2woREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gX19ubF9sYW5naW5mb19sKERBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX25sX2xhbmdpbmZvX2woREFZXzcsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX19ubF9sYW5naW5mb19sKEFCREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX19ubF9sYW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX19ubF9sYW5naW5mb19sKE1PTl81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX19ubF9sYW5naW5mb19sKE1PTl84LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMTIsIF9fY2xvYyk7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzEyLCBfX2Nsb2MpOworKwl9CisrICAgIH0KKysKKysjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisrICAgIF9NX3B1dCh3Y2hhcl90KiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3Qgd2NoYXJfdCogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorKwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysjZWxzZQorKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKysgICAgICBpZiAoX19sZW4gPT0gMCkKKysJX19zWzBdID0gTCdcMCc7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrI3dhcm5pbmcgd2lkZSB0aW1lIHN0dWZmCisrLy8gICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0gX1NfZ2V0X2NfbG9jYWxlKCk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IEwiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2VyYV9mb3JtYXQgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fYW0gPSBMIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOworKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IEwiIjsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBMIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXkzID0gTCJUdWVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gTCJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk2ID0gTCJGcmlkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBMIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gTCJTdW4iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJNb24iOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gTCJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gTCJXZWQiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gTCJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gTCJTYXQiOworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX01fZGF0YS0+X01fbW9udGgwMSA9IEwiSmFudWFyeSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBMIk1hcmNoIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gTCJBcHJpbCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gTCJKdW5lIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gTCJKdWx5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBMIlNlcHRlbWJlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IEwiT2N0b2JlciI7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBMIkRlY2VtYmVyIjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBtb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDEgPSBMIkphbiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBMIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBMIkFwciI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBMIkp1biI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBMIkp1bCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBMIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBMIlNlcCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBMIk9jdCI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTEgPSBMIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7CisrCX0KKysjaWYgMAorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9fdzsgfSBfX3U7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX0RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RfVF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQU1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XUE1fU1RSLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3BtID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XVF9GTVRfQU1QTSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193OworKworKwkgIC8vIERheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX3UuX193OworKworKwkgIC8vIE1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAyID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA1ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMiA9IF9fdS5fX3c7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzksIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworKwl9CisrI2VuZGlmIC8vIDAKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iYThlODU4CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0wLDAgKzEsNjggQEAKKysvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNS4xLjIgLSB0aW1lX2dldCBmdW5jdGlvbnMKKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jYWNoZV90eXBlKiBfX2NhY2hlLCBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoX19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX1NfZ2V0X2NfbmFtZSgpKQorKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKysJCQkJICAgICBzaXplX3QgX19yZWZzKQorKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKysgICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICB7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CisrICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKysgICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorKwlkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGY0MGRkY2YuLmM1N2E3NTEgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTU4MjIsNiArMTU4MjIsOSBAQCBmaQorICAgIyBEZWZhdWx0IHRvICJnZW5lcmljIi4KKyAgIGlmIHRlc3QgJGVuYWJsZV9jbG9jYWxlX2ZsYWcgPSBhdXRvOyB0aGVuCisgICAgIGNhc2UgJHt0YXJnZXRfb3N9IGluCisrICAgICAgKi11Y2xpYmMqKQorKyAgICAgICAgZW5hYmxlX2Nsb2NhbGVfZmxhZz11Y2xpYmMKKysgICAgICAgIDs7CisgICAgICAgbGludXgqIHwgZ251KiB8IGtmcmVlYnNkKi1nbnUgfCBrbmV0YnNkKi1nbnUpCisgCWVuYWJsZV9jbG9jYWxlX2ZsYWc9Z251CisgCTs7CitAQCAtMTYwNzksNiArMTYwODIsNzggQEAgJGFzX2VjaG8gIm5ld2xpYiIgPiY2OyB9CisgICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5jYworICAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvYysrbG9jYWxlX2ludGVybmFsLmgKKyAgICAgICA7OworKyAgICB1Y2xpYmMpCisrICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVjbGliYyIgPiY1CisrJGFzX2VjaG8gInVjbGliYyIgPiY2OyB9CisrCisrICAgICAgIyBEZWNsYXJlIGludGVudGlvbiB0byB1c2UgZ2V0dGV4dCwgYW5kIGFkZCBzdXBwb3J0IGZvciBzcGVjaWZpYworKyAgICAgICMgbGFuZ3VhZ2VzLgorKyAgICAgICMgRm9yIHNvbWUgcmVhc29uLCBBTExfTElOR1VBUyBoYXMgdG8gYmUgYmVmb3JlIEFNLUdOVS1HRVRURVhUCisrICAgICAgQUxMX0xJTkdVQVM9ImRlIGZyIgorKworKyAgICAgICMgRG9uJ3QgY2FsbCBBTS1HTlUtR0VUVEVYVCBoZXJlLiBJbnN0ZWFkLCBhc3N1bWUgZ2xpYmMuCisrICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtc2dmbXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorK3NldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDIKKyt7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CisrJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CisraWYgdGVzdCAiJHthY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCtzZXR9IiA9IHNldDsgdGhlbiA6CisrICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorK2Vsc2UKKysgIGlmIHRlc3QgLW4gIiRjaGVja19tc2dmbXQiOyB0aGVuCisrICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0iJGNoZWNrX21zZ2ZtdCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisrZWxzZQorK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKytmb3IgYXNfZGlyIGluICRQQVRICisrZG8KKysgIElGUz0kYXNfc2F2ZV9JRlMKKysgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisrICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorKyAgICBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ieWVzIgorKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKysgICAgYnJlYWsgMgorKyAgZmkKKytkb25lCisrICBkb25lCisrSUZTPSRhc19zYXZlX0lGUworKworKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10IiAmJiBhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdD0ibm8iCisrZmkKKytmaQorK2NoZWNrX21zZ2ZtdD0kYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQKKytpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjaGVja19tc2dmbXQiID4mNQorKyRhc19lY2hvICIkY2hlY2tfbXNnZm10IiA+JjY7IH0KKytlbHNlCisrICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorKyRhc19lY2hvICJubyIgPiY2OyB9CisrZmkKKysKKysKKysgICAgICBpZiB0ZXN0IHgiJGNoZWNrX21zZ2ZtdCIgPSB4InllcyIgJiYgdGVzdCB4IiRlbmFibGVfbmxzIiA9IHgieWVzIjsgdGhlbgorKyAgICAgICAgVVNFX05MUz15ZXMKKysgICAgICBmaQorKyAgICAgICMgRXhwb3J0IHRoZSBidWlsZCBvYmplY3RzLgorKyAgICAgIGZvciBsaW5nIGluICRBTExfTElOR1VBUzsgZG8gXAorKyAgICAgICAgZ2xpYmN4eF9NT0ZJTEVTPSIkZ2xpYmN4eF9NT0ZJTEVTICRsaW5nLm1vIjsgXAorKyAgICAgICAgZ2xpYmN4eF9QT0ZJTEVTPSIkZ2xpYmN4eF9QT0ZJTEVTICRsaW5nLnBvIjsgXAorKyAgICAgIGRvbmUKKysKKysKKysKKysgICAgICBDTE9DQUxFX0g9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysgICAgICBDQ09ERUNWVF9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MKKysgICAgICBDQ09MTEFURV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKyAgICAgIENNRVNTQUdFU19IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKyAgICAgIENNRVNTQUdFU19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysgICAgICBDTlVNRVJJQ19DQz1jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysgICAgICBDVElNRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrICAgICAgQ1RJTUVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrICAgICAgOzsKKyAgIGVzYWMKKyAKKyAgICMgVGhpcyBpcyB3aGVyZSB0aGUgdGVzdHN1aXRlIGxvb2tzIGZvciBsb2NhbGUgY2F0YWxvZ3MsIHVzaW5nIHRoZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK2luZGV4IDU4MGQ3MjUuLjNmZTYxYjggMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaAorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKK0BAIC0xMDEsNyArMTAxLDkgQEAgdXNpbmcgc3RkOjp3bWVtY21wOworIHVzaW5nIHN0ZDo6d21lbWNweTsKKyB1c2luZyBzdGQ6OndtZW1tb3ZlOworIHVzaW5nIHN0ZDo6d21lbXNldDsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorIHVzaW5nIHN0ZDo6d2NzZnRpbWU7CisrI2VuZGlmCisgCisgI2lmIF9HTElCQ1hYX1VTRV9DOTkKKyB1c2luZyBzdGQ6Ondjc3RvbGQ7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitpbmRleCAwZTZiMWZjLi40MDVhZWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jd2NoYXIKK0BAIC0xNzUsNyArMTc1LDkgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKyAgIHVzaW5nIDo6d2NzY29sbDsKKyAgIHVzaW5nIDo6d2NzY3B5OworICAgdXNpbmcgOjp3Y3Njc3BuOworKyNpZiBfR0xJQkNYWF9IQVZFX1dDU0ZUSU1FCisgICB1c2luZyA6Ondjc2Z0aW1lOworKyNlbmRpZgorICAgdXNpbmcgOjp3Y3NsZW47CisgICB1c2luZyA6Ondjc25jYXQ7CisgICB1c2luZyA6Ondjc25jbXA7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoCkBAIC0wLDAgKzEsMjU3IEBACitGcm9tIDZhM2U4NTA2YTEyYzEyNzI4ZDhiMjk5MDFkZWZkNzM4YmU0Mzc1N2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MjozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDA1LzM1XSB1Y2xpYmMtbG9jYWxlLW5vX194CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDQ1ICsrKysrKysrKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDE0IC0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgICAgMSArCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgICA3IC0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgICAgNyAtLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAgIDcgKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDE4ICsrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgICA0IC0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICAzIC0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDA2ODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSAyMjU1MTFhM2FlYjE5M2E5MTZiMzk5OWYwYjY0MGEzOTJjYWE2N2NkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICAgIDQgKystLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgIHwgICAxMyArKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMmU2ZjgwYS4uMzFlYmI5ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTQwMSw3ICs0MDEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitAQCAtNTU2LDcgKzU1Niw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggMmM3MDY0Mi4uZDVjODk2MSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0xMjcsMTIgKzEyNywyNSBAQCBuYW1lc3BhY2Ugc3RkCisgCXsKKyAJICAvLyBOYW1lZCBsb2NhbGUuCisgCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwgd2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMuLi4gc2hvdWxkIGJlIG51bWVyaWMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfXworKyMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbmRpZgorKyNlbHNlCisgCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisgCisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX3UuX193OworKyNlbmRpZgorIAorIAkgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09IEwnXDAnKQorIAkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODUxMTIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKQEAgLTAsMCArMSw1NDIgQEAKK0Zyb20gNmZmZTdjNDZmNTJkMjc4NjRjM2RmMzY2M2UxNmVjOWRkZWU3MWU4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ2OjU4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDcvMzVdIHVjbGliYy1sb2NhbGUtdXBkYXRlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8ICAgNzQgKysrKysrKysrLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgNDIgKysrKysrLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgNTEgKysrKysrKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oICAgICAgICB8ICAgMTIgKystLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAzNCArKysrKy0tLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAgIDUgKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAgMTggKysrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICB8ICAgMTcgKysrLS0KKyA5IGZpbGVzIGNoYW5nZWQsIDE1OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAoraW5kZXggZTc0ZmRkZi4uOTcxYTZiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitAQCAtMzEsNiArMzEsOSBAQAorIAorICNpbmNsdWRlIDxiaXRzL2MrK2NvbmZpZy5oPgorICNpbmNsdWRlIDxjbG9jYWxlPgorKyNpbmNsdWRlIDxjc3RkbGliPgorKyNpbmNsdWRlIDxjc3RyaW5nPgorKyNpbmNsdWRlIDxjc3RkZGVmPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGNsZWFuIHRoaXMgdXAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDIxNDMwZDAuLjFiOWQ4ZTEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIzICszOSwyMCBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIHRlbXBsYXRlPD4KKyAgICAgdm9pZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGZsb2F0JiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19mOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGZsb2F0IF9fZiA9IF9fc3RydG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZjsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtNjMsMTYgKzYwLDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19kOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Q7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTgwLDE2ICs3NCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgbG9uZyBkb3VibGUmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fbGQ7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgbG9uZyBkb3VibGUgX19sZCA9IF9fc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2xkOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHZvaWQKK0BAIC0xMTAsMTcgKzEwMSwxOCBAQCBuYW1lc3BhY2Ugc3RkCisgICB2b2lkCisgICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsKKy0gICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICAgX19mcmVlbG9jYWxlKF9fY2xvYyk7CisgICB9CisgCisgICBfX2NfbG9jYWxlCisgICBsb2NhbGU6OmZhY2V0OjpfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7IHJldHVybiBfX2R1cGxvY2FsZShfX2Nsb2MpOyB9CistfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistbmFtZXNwYWNlIF9fZ251X2N4eAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKF9fZ251X2N4eCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzWzYgKyBfR0xJQkNYWF9OVU1fQ0FURUdPUklFU10gPQorICAgICB7CisgICAgICAgIkxDX0NUWVBFIiwKK0BAIC0xMzgsOSArMTMwLDExIEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyAgICAgICAiTENfSURFTlRJRklDQVRJT04iCisgI2VuZGlmCisgICAgIH07CistfQorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4OjpjYXRlZ29yeV9uYW1lczsKKy19ICAvLyBuYW1lc3BhY2Ugc3RkCisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IDRiY2E1ZjEuLjY0YTZkNDYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0zOSwyMSArMzksMjMgQEAKKyAjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisgCisgI2luY2x1ZGUgPGNzdHJpbmc+ICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzdHJsZW4KKy0jaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnNucHJpbnRmIG9yIHN0ZDo6c3ByaW50ZgorKyNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6dnNucHJpbnRmIG9yIHN0ZDo6dnNwcmludGYKKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHRoaXMKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9JQ09OVgorICNpbmNsdWRlIDxpY29udi5oPgkJLy8gRm9yIGNvZGVjdnQgdXNpbmcgaWNvbnYsIGljb252X3QKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy0jaW5jbHVkZSA8bGliaW50bC5oPiAJCS8vIEZvciBtZXNzYWdlcworKyNpZmRlZiBIQVZFX0xJQklOVExfSAorKyNpbmNsdWRlIDxsaWJpbnRsLmg+CQkvLyBGb3IgbWVzc2FnZXMKKyAjZW5kaWYKKysjaW5jbHVkZSA8Y3N0ZGFyZz4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyB3aGF0IGlzIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSBmb3IKKysvLyBwc206IHVzZWQgaW4gb3MvZ251LWxpbnV4L2N0eXBlX25vbmlubGluZS5oCisgI2VuZGlmCisgI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorIAorQEAgLTc4LDIzICs4MCwyNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisgI2VuZGlmCistCistICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCistICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCistICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgZG91YmxlIHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorKyAgLy8gc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKysgIC8vIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorICAgLy8gYmUgYXZvaWRlZC4KKy0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKy0gICAgaW50CistICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCistCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKy0JCSAgICAgY29uc3QgY2hhciogX19mbXQsCistI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgaW5saW5lIGludAorKyAgICBfX2NvbnZlcnRfZnJvbV92KGNvbnN0IF9fY19sb2NhbGUmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKwlfX2Nsb2MgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQorKyNlbmRpZgorKwkJICAgICAsCisrCQkgICAgIGNoYXIqIF9fb3V0LAorKwkJICAgICBjb25zdCBpbnQgX19zaXplLAorKwkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwgLi4uKQorICAgICB7CisrICAgICAgdmFfbGlzdCBfX2FyZ3M7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCisgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYykKKy0gICAgeworICMgaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgICAgICAgY2hhciogX19vbGQgPSBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19vbGQpICsgMV07CitAQCAtMTAzLDcgKzEwNyw5IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGVuZGlmCisgI2VuZGlmCisgCistICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjpzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19wcmVjLCBfX3YpOworKyAgICAgIHZhX3N0YXJ0KF9fYXJncywgX19mbXQpOworKyAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6dnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX2FyZ3MpOworKyAgICAgIHZhX2VuZChfX2FyZ3MpOworIAorICNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworICAgICAgIF9fZ251X2N4eDo6X191c2Vsb2NhbGUoX19vbGQpOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDdiMTI4NjEuLjEzZTAxMWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zMywxNiArMzMsMjAgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCisgICAvLyB2YXJpb3VzIC9jb25maWcvb3MvKiBmaWxlcy4KKy0gIHRlbXBsYXRlPD4KKyAgICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQorICAgICA6IGN0eXBlPGNoYXI+KDAsIGZhbHNlLCBfX3JlZnMpCisgICAgIHsKK0BAIC01Nyw2ICs2MSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAJfQorICAgICB9CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6fmN0eXBlX2J5bmFtZSgpCisrICAgIHsgfQorIAorICNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICAgY3R5cGU8d2NoYXJfdD46Ol9fd21hc2tfdHlwZQorQEAgLTEzOCwxNyArMTQ0LDMzIEBAIG5hbWVzcGFjZSBzdGQKKyAgIGN0eXBlPHdjaGFyX3Q+OjoKKyAgIGRvX2lzKG1hc2sgX19tLCB3Y2hhcl90IF9fYykgY29uc3QKKyAgIHsKKy0gICAgLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKy0gICAgLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrICAgIC8vIFRoZSBjYXNlIG9mIF9fbSA9PSBjdHlwZV9iYXNlOjpzcGFjZSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LAorKyAgICAvLyBkdWUgdG8gaXRzIHVzZSBpbiBtYW55IGlzdHJlYW0gZnVuY3Rpb25zLiAgVGhlcmVmb3JlIHdlIGRlYWwgd2l0aAorKyAgICAvLyBpdCBmaXJzdCwgZXhwbG9pdGluZyB0aGUga25vd2xlZGdlIHRoYXQgb24gR05VIHN5c3RlbXMgX01fYml0WzVdCisrICAgIC8vIGlzIHRoZSBtYXNrIGNvcnJlc3BvbmRpbmcgdG8gY3R5cGVfYmFzZTo6c3BhY2UuICBOQjogYW4gZW5jb2RpbmcKKysgICAgLy8gY2hhbmdlIHdvdWxkIG5vdCBhZmZlY3QgY29ycmVjdG5lc3MhCisrCisgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKKy0gICAgY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKy0gICAgZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorLSAgICAgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdCistCSAgJiYgX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCistCXsKKy0JICBfX3JldCA9IHRydWU7CistCSAgYnJlYWs7CistCX0KKysgICAgaWYgKF9fbSA9PSBfTV9iaXRbNV0pCisrICAgICAgX19yZXQgPSBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1s1XSwgX01fY19sb2NhbGVfY3R5cGUpOworKyAgICBlbHNlCisrICAgICAgeworKwkvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKwkvLyBsaWJyYXJ5IGZvciBibGFuay4KKysJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSAxMTsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX20gJiBfTV9iaXRbX19iaXRjdXJdKQorKwkgICAgeworKwkgICAgICBpZiAoX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2FsZV9jdHlwZSkpCisrCQl7CisrCQkgIF9fcmV0ID0gdHJ1ZTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICAgIGVsc2UgaWYgKF9fbSA9PSBfTV9iaXRbX19iaXRjdXJdKQorKwkJYnJlYWs7CisrCSAgICB9CisrICAgICAgfQorKworICAgICByZXR1cm4gX19yZXQ7CisgICB9CisgCitAQCAtMjkwLDQgKzMxMiw1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZW5kaWYKKyAgIH0KKyAjZW5kaWYgLy8gIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCistfQorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggZDg5ZGEzMy4uMDY3NjU3YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC01MywxMiArNTMsMTYgQEAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCXNpemVfdCBfX3JlZnMpCistICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorLSAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKE5VTEwpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhOVUxMKQorICAgICAgeworLSAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gX190bXA7CisrCisrICAgICAgIC8vIExhc3QgdG8gYXZvaWQgbGVha2luZyBtZW1vcnkgaWYgbmV3IHRocm93cy4KKysgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworICAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDMxZWJiOWYuLjc2NzliOWMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC0yMDYsNyArMjExLDcgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIH0KKyAJYnJlYWs7CisgICAgICAgZGVmYXVsdDoKKy0JOworKwlfX3JldCA9IHBhdHRlcm4oKTsKKyAgICAgICB9CisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KK0BAIC0zOTAsNyArMzk1LDkgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgCSAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisgCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKK0BAIC00NzcsOCArNDg0LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNDk4LDggKzUwNSw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK0BAIC01NDUsOCArNTUyLDExIEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyAgICAgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKysgICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKyAjZW5kaWYKKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK0BAIC02MzMsOCArNjQzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgICAgIGZyZWUoX19vbGQpOworKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAgICAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTY1Myw4ICs2NjMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IGQ1Yzg5NjEuLjhhZTg5NjkgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGQ4NDhlZDUuLmYyNGQ1M2UgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNTMsMTEgKzUzLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitAQCAtMjA3LDExICsyMTAsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK2luZGV4IGJhOGU4NTguLjE2NjVkZGUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorQEAgLTUwLDEyICs1MCwyMSBAQAorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQkgICAgIHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorLSAgICBfTV9uYW1lX3RpbWVwdW5jdChfX3MpCisrICAgIF9NX25hbWVfdGltZXB1bmN0KE5VTEwpCisgICAgIHsKKy0gICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKy0gICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKysgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKy0gICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOworKworKyAgICAgIHRyeQorKwl7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KKysgICAgICBjYXRjaCguLi4pCisrCXsKKysJICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisrCSAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisrCX0KKysKKyAgICAgfQorIAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyMzgwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDlmMjE1ODQ1MTk4MWNmMGE4MGNmYWJkYzc5YWUzMWJiNjk3NmE4MDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0ODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDA4LzM1XSBtaXNzaW5nLWV4ZWNpbmZvX2gKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBib2VobS1nYy9pbmNsdWRlL2djLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib2VobS1nYy9pbmNsdWRlL2djLmggYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK2luZGV4IGM1MWUwMTcuLmE3YmE4ZGMgMTAwNjQ0CistLS0gYS9ib2VobS1nYy9pbmNsdWRlL2djLmgKKysrKyBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorQEAgLTUwMyw3ICs1MDMsNyBAQCBHQ19BUEkgR0NfUFRSIEdDX21hbGxvY19hdG9taWNfaWdub3JlX29mZl9wYWdlIEdDX1BST1RPKChzaXplX3QgbGIpKTsKKyAjaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19HTElCQ19fKQorICMgaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKyAjIGlmIChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gMSB8fCBfX0dMSUJDX18gPiAyKSBcCistICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykKKysgICAgICYmICFkZWZpbmVkKF9faWE2NF9fKSAmJiAhZGVmaW5lZChfX1VDTElCQ19fKQorICMgICBpZm5kZWYgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICAgIGRlZmluZSBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgIGVuZGlmCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTY4Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gZTM5M2UwNzZmMWFiODJkMjVlMWFhMDRkNmVkZWEyN2I0MWQzZWIwNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjAzICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDkvMzVdIGM5OS1zbnByaW50ZgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworaW5kZXggZTg1YmQ4My4uNmFmODM5YSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitAQCAtMTM5LDcgKzEzOSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHVzaW5nIDo6dnNwcmludGY7CisgfSAvLyBuYW1lc3BhY2Ugc3RkCisgCistI2lmIF9HTElCQ1hYX1VTRV9DOTkKKysjaWYgX0dMSUJDWFhfVVNFX0M5OSB8fCBkZWZpbmVkKF9fVUNMSUJDX18pCisgCisgI3VuZGVmIHNucHJpbnRmCisgI3VuZGVmIHZmc2NhbmYKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMC1jOTktY29tcGxleC11Z2x5LWhhY2sucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSA3M2Y2OWQ4MDZlMmM5NTYxYTU0OTk1MjIzNDMxYTEwNzZjZmQ2MTY0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8zNV0gYzk5LWNvbXBsZXgtdWdseS1oYWNrCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlIHwgICAgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggYzU3YTc1MS4uYTEzMzNlMiAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0xODczNCw2ICsxODczNCw5IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciBJU08gQzk5IHN1cHBvcnQgdG8gVFIxIGluIDxjb21wbGV4Lmg+Li4uICIgPiY2OyB9CisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisgI2luY2x1ZGUgPGNvbXBsZXguaD4KKysjaWZkZWYgX19VQ0xJQkNfXworKyNlcnJvciB1Z2x5IGhhY2sgdG8gbWFrZSBzdXJlIGNvbmZpZ3VyZSB0ZXN0IGZhaWxzIGhlcmUgZm9yIGNyb3NzIHVudGlsIHVDbGliYyBzdXBwb3J0cyB0aGUgY29tcGxleCBmdW5jcworKyNlbmRpZgorIGludAorIG1haW4gKCkKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTEtaW5kZXhfbWFjcm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNzliMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDExLWluZGV4X21hY3JvLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYjAzNzk1M2U0MDMxMmI0NWFiODRlZDBhM2FkODgyYmI1ZTQxMzEwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjUxOjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMzVdIGluZGV4X21hY3JvCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgICAgICAgfCAgICAzICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQoraW5kZXggMzhlYjFlOC4uMTU4ZDIxYSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorQEAgLTU1LDYgKzU1LDkgQEAKKyAjaW5jbHVkZSA8Yml0cy9ndGhyLmg+CisgI2luY2x1ZGUgPHRyMS9mdW5jdGlvbmFsPgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyAjIGlmZGVmIF9fR0MKKyAjICAgZGVmaW5lIF9fR0NfQ09OU1QgY29uc3QKKyAjIGVsc2UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitpbmRleCBkN2I1Y2JkLi5iOWIzYWNiIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCitAQCAtNDgsNiArNDgsOSBAQAorICNpbmNsdWRlIDxleHQvbWVtb3J5PiAvLyBGb3IgdW5pbml0aWFsaXplZF9jb3B5X24KKyAjaW5jbHVkZSA8ZXh0L251bWVyaWM+IC8vIEZvciBwb3dlcgorIAorKy8qIGNvcGUgdy8gaW5kZXggZGVmaW5lZCBhcyBtYWNybywgU3VTdjMgcHJvcG9zYWwgKi8KKysjdW5kZWYgaW5kZXgKKysKKyBuYW1lc3BhY2UgX19nbnVfY3h4IF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKKyB7CisgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMi1saWJtdWRmbGFwLXN1c3YzLWxlZ2FjeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjhkNDVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTItbGlibXVkZmxhcC1zdXN2My1sZWdhY3kucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBhMGNiMTNiZGQ5OGE5NDFiODFmZGFmZTRjZDk2ZTRjNTY5ZmViNjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMi8zNV0gbGlibXVkZmxhcC1zdXN2My1sZWdhY3kKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGxpYm11ZGZsYXAvbWYtaG9va3MyLmMgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlibXVkZmxhcC9tZi1ob29rczIuYyBiL2xpYm11ZGZsYXAvbWYtaG9va3MyLmMKK2luZGV4IDRhZjE3ZGYuLmEzYzZiMmYgMTAwNjQ0CistLS0gYS9saWJtdWRmbGFwL21mLWhvb2tzMi5jCisrKysgYi9saWJtdWRmbGFwL21mLWhvb2tzMi5jCitAQCAtNDI0LDcgKzQyNCw3IEBAIFdSQVBQRVIyKHZvaWQsIGJ6ZXJvLCB2b2lkICpzLCBzaXplX3QgbikKKyB7CisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzLCBuLCBfX01GX0NIRUNLX1dSSVRFLCAiYnplcm8gcmVnaW9uIik7CistICBiemVybyAocywgbik7CisrICBtZW1zZXQgKHMsIDAsIG4pOworIH0KKyAKKyAKK0BAIC00MzQsNyArNDM0LDcgQEAgV1JBUFBFUjIodm9pZCwgYmNvcHksIGNvbnN0IHZvaWQgKnNyYywgdm9pZCAqZGVzdCwgc2l6ZV90IG4pCisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzcmMsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjb3B5IHNyYyIpOworICAgTUZfVkFMSURBVEVfRVhURU5UKGRlc3QsIG4sIF9fTUZfQ0hFQ0tfV1JJVEUsICJiY29weSBkZXN0Iik7CistICBiY29weSAoc3JjLCBkZXN0LCBuKTsKKysgIG1lbW1vdmUgKGRlc3QsIHNyYywgbik7CisgfQorIAorIAorQEAgLTQ0NCw3ICs0NDQsNyBAQCBXUkFQUEVSMihpbnQsIGJjbXAsIGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pCisgICBUUkFDRSAoIiVzXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgIE1GX1ZBTElEQVRFX0VYVEVOVChzMSwgbiwgX19NRl9DSEVDS19SRUFELCAiYmNtcCAxc3QgYXJnIik7CisgICBNRl9WQUxJREFURV9FWFRFTlQoczIsIG4sIF9fTUZfQ0hFQ0tfUkVBRCwgImJjbXAgMm5kIGFyZyIpOworLSAgcmV0dXJuIGJjbXAgKHMxLCBzMiwgbik7CisrICByZXR1cm4gbiA9PSAwID8gMCA6IG1lbWNtcCAoczEsIHMyLCBuKTsKKyB9CisgCisgCitAQCAtNDUzLDcgKzQ1Myw3IEBAIFdSQVBQRVIyKGNoYXIgKiwgaW5kZXgsIGNvbnN0IGNoYXIgKnMsIGludCBjKQorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgImluZGV4IHJlZ2lvbiIpOworLSAgcmV0dXJuIGluZGV4IChzLCBjKTsKKysgIHJldHVybiBzdHJjaHIgKHMsIGMpOworIH0KKyAKKyAKK0BAIC00NjIsNyArNDYyLDcgQEAgV1JBUFBFUjIoY2hhciAqLCByaW5kZXgsIGNvbnN0IGNoYXIgKnMsIGludCBjKQorICAgc2l6ZV90IG4gPSBzdHJsZW4gKHMpOworICAgVFJBQ0UgKCIlc1xuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CisgICBNRl9WQUxJREFURV9FWFRFTlQocywgQ0xBTVBBREQobiwgMSksIF9fTUZfQ0hFQ0tfUkVBRCwgInJpbmRleCByZWdpb24iKTsKKy0gIHJldHVybiByaW5kZXggKHMsIGMpOworKyAgcmV0dXJuIHN0cnJjaHIgKHMsIGMpOworIH0KKyAKKyAvKiBYWFg6ICBzdHBjcHksIG1lbWNjcHkgKi8KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxMy1saWJzdGRjLW5hbWVzcGFjZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlZmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSAxMDRlNGQ2NjIwOGYyNzI2YjE0ZDJmNWVlYmNlOTA3MDBjYmM4M2M4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTQ6MDIgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8zNV0gbGlic3RkYysrLW5hbWVzcGFjZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggfCAgICA0ICsrKy0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmggICAgIHwgICAgNCArKystCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAoraW5kZXggMDY3NjU3YS4uZGQ3NmE2YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0zMiw3ICszMiw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCitAQCAtMTE2LDMgKzExNyw0IEBACisgCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKyAJIH0KKyAgICAgIH0KKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCAxNjY1ZGRlLi45MDVjNDMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC0zMyw3ICszMyw4IEBACisgLy8KKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLQorK25hbWVzcGFjZSBzdGQKKyt7CisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMpCisgICAgIDogZmFjZXQoX19yZWZzKSwgX01fZGF0YShOVUxMKSwgX01fY19sb2NhbGVfdGltZXB1bmN0KE5VTEwpLAorQEAgLTc1LDMgKzc2LDQgQEAKKyAgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgICAgIH0KKyt9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiOGZkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNC1zaC1wcjI0ODM2LnBhdGNoCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gZWRjOWFjYjE4MTgxMGYyMzRiNmI5ZjdkMjgyMGIwZTRmNmExZWVhZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjQ4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIHNoLXByMjQ4MzYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9pZD04OTU5MzA0JmZvcnVtX2lkPTUzNDgKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MjQ4MzYKKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCBlMTJhMTgwLi4xMzViYmY1IDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTIzMzc4LDcgKzIzMzc4LDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IGViYTM1NzcuLjYzNjNhMjEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtMzE0MSw3ICszMTQxLDcgQEAgZm9vOgkubG9uZwkyNQorIAl0bHNfZmlyc3RfbWlub3I9MTQKKyAJdGxzX2FzX29wdD0iLW02NCAtQWVzYW1lIC0tZmF0YWwtd2FybmluZ3MiCisgCTs7CistICBzaC0qLSogfCBzaFszNF0tKi0qKQorKyAgc2gtKi0qIHwgc2hbMzRdKi0qLSopCisgICAgIGNvbmZ0ZXN0X3M9JworIAkuc2VjdGlvbiAiLnRkYXRhIiwiYXdUIixAcHJvZ2JpdHMKKyBmb286CS5sb25nCTI1CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODEyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNTBlNTM2NjAwNWIwZjZhZjI3Mzc4ZTJhNWMzY2I5Zjk5MzZhN2U2MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU4OjM2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMzVdIGFybTogVXNlIFRBUkdFVF9FTkRJQU5fT1BUSU9OIGZvciBkZXRlcm1pbmluZworIE1VTFRJTElCX0RFRkFVTFRTCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitpbmRleCA0ODhlZmE0Li43NTNkYzNhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNDYsNyArNDYsNyBAQAorIAorICN1bmRlZiAgTVVMVElMSUJfREVGQVVMVFMKKyAjZGVmaW5lIE1VTFRJTElCX0RFRkFVTFRTIFwKKy0JeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPWhhcmQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKwl7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPWhhcmQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorIAorIC8qIE5vdyB3ZSBkZWZpbmUgdGhlIHN0cmluZ3MgdXNlZCB0byBidWlsZCB0aGUgc3BlYyBmaWxlLiAgKi8KKyAjdW5kZWYgIExJQl9TUEVDCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1NWU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMjIxIEBACitGcm9tIDE2MDM5N2VmM2MzMzMxMDk5YWYwMjhmMWI4ZDNlMDg1YjA3ZDg4YWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1OTowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBnY2M6IHBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb246IGNvZGVzb3VyY2VyeV0KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgICAgfCAgICAyICstCisgZ2NjL2NvbW1vbi5vcHQgICAgICB8ICAgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgICA2ICsrKysrKworIGdjYy9jb25maWd1cmUgICAgICAgfCAgIDIwICsrKysrKysrKysrKysrKysrKy0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICB8ICAgMTAgKysrKysrKysrKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAyICsrCisgZ2NjL2luY3BhdGguYyAgICAgICB8ICAgMTkgKysrKysrKysrKysrKysrKysrKworIDggZmlsZXMgY2hhbmdlZCwgNjkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvTWFrZWZpbGUuaW4KKysrKyBnY2MtNC44LjQvZ2NjL01ha2VmaWxlLmluCitAQCAtMjAxOSw3ICsyMDE5LDcgQEAgYXR0cmlicy5vIDogYXR0cmlicy5jICQoQ09ORklHX0gpICQoU1lTVAorIAorIGluY3BhdGgubzogaW5jcGF0aC5jIGluY3BhdGguaCAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSAkKENQUExJQl9IKSBcCisgCQlpbnRsLmggcHJlZml4LmggY29yZXR5cGVzLmggJChUTV9IKSBjcHBkZWZhdWx0LmggJChUQVJHRVRfSCkgXAorLQkJJChNQUNITU9ERV9IKQorKwkJJChNQUNITU9ERV9IKSAkKEZMQUdTX0gpIHRvcGxldi5oCisgCisgQ0ZMQUdTLXByZWZpeC5vICs9IC1EUFJFRklYPVwiJChwcmVmaXgpXCIgLURCQVNFVkVSPSQoQkFTRVZFUl9zKQorIHByZWZpeC5vOiBwcmVmaXguYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCBwcmVmaXguaCBcCitJbmRleDogZ2NjLTQuOC40L2djYy9jb21tb24ub3B0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbW1vbi5vcHQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbW1vbi5vcHQKK0BAIC01OTUsNiArNTk1LDEwIEBAIFdwZWRhbnRpYworIENvbW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcKKyBJc3N1ZSB3YXJuaW5ncyBuZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZAorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnLmluCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcuaW4KK0BAIC0xMzgsNiArMTM4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZQorQEAgLTkxOCw2ICs5MTgsNyBAQCB3aXRoX2djCisgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMKKytlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcworIGVuYWJsZV9wbHVnaW4KKyBlbmFibGVfbGlicXVhZG1hdGhfc3VwcG9ydAorIHdpdGhfbGlua2VyX2hhc2hfc3R5bGUKK0BAIC0xNjM5LDYgKzE2NDAsOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWRpc2FibGUtbGlicXVhZG1hdGgtc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSBsaWJxdWFkbWF0aCBzdXBwb3J0IGZvciBGb3J0cmFuCitAQCAtMTc4NDcsNyArMTc4NTAsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzg1MCAiY29uZmlndXJlIgorKyNsaW5lIDE3ODUzICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTE3OTUzLDcgKzE3OTU2LDcgQEAgZWxzZQorICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCistI2xpbmUgMTc5NTYgImNvbmZpZ3VyZSIKKysjbGluZSAxNzk1OSAiY29uZmlndXJlIgorICNpbmNsdWRlICJjb25mZGVmcy5oIgorIAorICNpZiBIQVZFX0RMRkNOX0gKK0BAIC0yNzIxOSw2ICsyNzIyMiwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWd1cmUuYWMKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUxMjAsNiArNTEyMCwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1sCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorSW5kZXg6IGdjYy00LjguNC9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGdjYy00LjguNC9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjU4LDYgKzI1OCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgQGdvbAorIC1Xc2lnbi1jb21wYXJlICAtV3NpZ24tY29udmVyc2lvbiAgLVdzaXplb2YtcG9pbnRlci1tZW1hY2Nlc3MgQGdvbAorQEAgLTQwMjIsNiArNDAyMywxNCBAQCBoZWFkZXJzLS0tZm9yIHRoYXQsIEBvcHRpb257LVd1bmtub3duLXByCisgIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKKyAgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorSW5kZXg6IGdjYy00LjguNC9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC44LjQvZ2NjL2djYy5jCitAQCAtNzQxLDYgKzc0MSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9XAorICAgICAlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fVwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorICAgICAle2ZnbnUtdG06JTppbmNsdWRlKGxpYml0bS5zcGVjKSUobGlua19pdG0pfVwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2luY3BhdGguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9pbmNwYXRoLmMKKysrKyBnY2MtNC44LjQvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Miw2ICszODMsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3JvbworIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3NWNmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0Zyb20gMThmZGU1NzQwYjA5MzI0ZGZiOWNmNDFlOTg0OTY3MjU3M2ZmNWZhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8ICAgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICAgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDcgKzI2LDYgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmYwMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSAzMDdjOGZmM2VmNjY2YjdiZDVhYzczMzg2M2YyZmJiMjdhOWQ1MjFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTI6NTYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMC8zNV0gb3B0aW9uYWwgbGlic3RkYworCitnY2MtcnVudGltZSBidWlsZHMgbGlic3RkYysrIHNlcGFyYXRlbHkgZnJvbSBnY2MtY3Jvc3MtKi4gSXRzIGNvbmZpZ3VyZSB0ZXN0cyB1c2luZyBnKysKK3dpbGwgbm90IHJ1biBjb3JyZWN0bHkgc2luY2UgYnkgZGVmYXVsdCB0aGUgbGlua2VyIHdpbGwgdHJ5IHRvIGxpbmsgYWdhaW5zdCBsaWJzdGRjKysKK3doaWNoIHNob3VsZG4ndCBleGlzdCB5ZXQuIFdlIG5lZWQgYW4gb3B0aW9uIHRvIGRpc2FibGUgLWxzdGRjKysKK29wdGlvbiB3aGlsc3QgbGVhdmluZyAtbGMsIC1sZ2NjIGFuZCBvdGhlciBhdXRvbWF0aWMgbGlicmFyeSBkZXBlbmRlbmNpZXMgYWRkZWQgYnkgZ2NjCitkcml2ZXIuIFRoaXMgcGF0Y2ggYWRkcyBzdWNoIGFuIG9wdGlvbiB3aGljaCBvbmx5IGRpc2FibGVzIHRoZSAtbHN0ZGMrKy4KKworQSAic3RhbmRhcmQiIGdjYyBidWlsZCB1c2VzIHhnY2MgYW5kIGhlbmNlIGF2b2lkcyB0aGlzLiBXZSBzaG91bGQgYXNrIHVwc3RyZWFtIGhvdyB0bworZG8gdGhpcyBvZmZpY2lhbGx5LCB0aGUgbGlrZWx5IGFuc3dlciBpcyBkb24ndCBidWlsZCBsaWJzdGRjKysgc2VwYXJhdGVseS4KKworUlAgMjkvNi8xMAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgZ2NjL2MtZmFtaWx5L2Mub3B0ICB8ICAgIDQgKysrKworIGdjYy9jcC9nKytzcGVjLmMgICAgfCAgICAxICsKKyBnY2MvZG9jL2ludm9rZS50ZXhpIHwgICAgOSArKysrKysrLS0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MtZmFtaWx5L2Mub3B0IGIvZ2NjL2MtZmFtaWx5L2Mub3B0CitpbmRleCAxMGFlODRkLi5kYzNmZmRmIDEwMDY0NAorLS0tIGEvZ2NjL2MtZmFtaWx5L2Mub3B0CisrKysgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK0BAIC0xMjk5LDYgKzEyOTksMTAgQEAgbm9zdGRpbmMrKworIEMrKyBPYmpDKysKKyBEbyBub3Qgc2VhcmNoIHN0YW5kYXJkIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yaWVzIGZvciBDKysKKyAKKytub3N0ZGxpYisrCisrRHJpdmVyCisrRG8gbm90IGxpbmsgc3RhbmRhcmQgQysrIHJ1bnRpbWUgbGlicmFyeQorKworIG8KKyBDIE9iakMgQysrIE9iakMrKyBKb2luZWQgU2VwYXJhdGUKKyA7IERvY3VtZW50ZWQgaW4gY29tbW9uLm9wdAorZGlmZiAtLWdpdCBhL2djYy9jcC9nKytzcGVjLmMgYi9nY2MvY3AvZysrc3BlYy5jCitpbmRleCBiODk2ZWVhLi5mNTUyMTZiIDEwMDY0NAorLS0tIGEvZ2NjL2NwL2crK3NwZWMuYworKysrIGIvZ2NjL2NwL2crK3NwZWMuYworQEAgLTEyNiw2ICsxMjYsNyBAQCBsYW5nX3NwZWNpZmljX2RyaXZlciAoc3RydWN0IGNsX2RlY29kZWRfb3B0aW9uICoqaW5fZGVjb2RlZF9vcHRpb25zLAorICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9pbnZva2UudGV4aSBiL2djYy9kb2MvaW52b2tlLnRleGkKK2luZGV4IGEwMjI2MjIuLmYxNWM5OTEgMTAwNjQ0CistLS0gYS9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMTkwLDcgKzE5MCw3IEBAIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisgLWZyZXBvICAtZm5vLXJ0dGkgIC1mc3RhdHMgIC1mdGVtcGxhdGUtYmFja3RyYWNlLWxpbWl0PUB2YXJ7bn0gQGdvbAorIC1mdGVtcGxhdGUtZGVwdGg9QHZhcntufSBAZ29sCisgLWZuby10aHJlYWRzYWZlLXN0YXRpY3MgLWZ1c2UtY3hhLWF0ZXhpdCAgLWZuby13ZWFrICAtbm9zdGRpbmMrKyBAZ29sCistLWZuby1kZWZhdWx0LWlubGluZSAgLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIEBnb2wKKystbm9zdGRsaWIrKyAtZm5vLWRlZmF1bHQtaW5saW5lICAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdmlzaWJpbGl0eS1tcy1jb21wYXQgQGdvbAorIC1mZXh0LW51bWVyaWMtbGl0ZXJhbHMgQGdvbAorIC1XYWJpICAtV2NvbnZlcnNpb24tbnVsbCAgLVdjdG9yLWR0b3ItcHJpdmFjeSBAZ29sCitAQCAtNDUzLDcgKzQ1Myw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtbm9zdGFydGZpbGVzICAtbm9kZWZhdWx0bGlicyAgLW5vc3RkbGliIC1waWUgLXJkeW5hbWljIEBnb2wKKyAtcyAgLXN0YXRpYyAtc3RhdGljLWxpYmdjYyAtc3RhdGljLWxpYnN0ZGMrKyBAZ29sCisgLXN0YXRpYy1saWJhc2FuIC1zdGF0aWMtbGlidHNhbiBAZ29sCistLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIEBnb2wKKystc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgLW5vc3RkbGliKysgQGdvbAorIC1UIEB2YXJ7c2NyaXB0fSAgLVdsLEB2YXJ7b3B0aW9ufSAgLVhsaW5rZXIgQHZhcntvcHRpb259IEBnb2wKKyAtdSBAdmFye3N5bWJvbH19CisgCitAQCAtOTg4Niw2ICs5ODg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW50cmllcyBpbgorIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKyBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKyBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisgQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZWZkYjYyNS4uNDc3NzUyZiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNzQ4LDYgKzc0OCw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCisgICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAorICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKKysgICAgJXshbm9zdGRsaWIrKzp9XAorICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIxLWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNjNjFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gMDA0Njk2ZTA1NGFlOWRjNzFkNTEyY2M3NTVjY2M0MDc0ZmM2MmIyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGI2NWQyMWQuLmJkYWI0NWEgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjU4MjksMTMgKzI1ODI5LDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggZTIyNmI4NS4uNWY1YzkwOSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MDk5LDEzICs0MDk5LDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM4YWJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjItQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDdmNWM5ZGNjNzFjOGI4M2EwYjU1OTYyNjZjYzRiZGYwOTM2ZThlMDAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCAgICA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNDc3NzUyZi4uNTEwNjJhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDA5OCw2ICs0MDk4LDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NDM1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDIzLVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsODggQEAKK0Zyb20gNDZkNTI0MzkwNTJmMDg3NmE5MmRjZjhhMGFiOWM2MGQ3NWM4MDMwYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UKKyBpbiAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDkwYTJiYmEuLjIzMjA0OTcgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ2OSw3ICs0NjksNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IGJkYWI0NWEuLmQ1ODc5OTMgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE1MzksOCArMTE1MzksOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZjVjOTA5Li41ZTVlODRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MjAsOCArMTcyMCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCAyOWZkZmM3Li5lMDQ4ZGNlIDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIjsgdGhlbgorIAkJcG9zdHBvbmVfZGVmYXVsdHNfaD0ieWVzIgorIAkgICAgZWxzZQorIAkJZWNobyAiIyBpbmNsdWRlIFwiJGZpbGVcIiIgPj4gJHtvdXRwdXR9VAorQEAgLTEwMyw3ICsxMDMsNyBAQCBlc2FjCisgCisgIyBJZiB3ZSBwb3N0cG9uZWQgaW5jbHVkaW5nIGRlZmF1bHRzLmgsIGFkZCB0aGUgI2luY2x1ZGUgbm93LgorIGlmIHRlc3QgeCIkcG9zdHBvbmVfZGVmYXVsdHNfaCIgPSB4InllcyI7IHRoZW4KKy0gICAgZWNobyAiIyBpbmNsdWRlIFwiZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisrICAgIGVjaG8gIiMgaW5jbHVkZSBcIi4vZGVmYXVsdHMuaFwiIiA+PiAke291dHB1dH1UCisgZmkKKyAKKyAjIEFkZCBtdWx0aXBsZSBpbmNsdXNpb24gcHJvdGVjdGlvbiBndWFyZCwgcGFydCB0d28uCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDdkODQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK0Zyb20gZTBkMTVmNGY4YmYyOGMzNTFiOTIxNWNhMzdmMWNhYTI0ZGYwZTFmZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE4OjU0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMzVdIFBSIHRhcmdldC8zMjIxOQorCisqIHZhcmFzbS5jIChkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSk6IFdlYWsgZGF0YSBpcyBub3QgbG9jYWwuCisKK1NpZ25lZC1vZmYtYnk6IEJlcm5oYXJkIFJldXRuZXItRmlzY2hlciA8cmVwLmRvdC5ub3BAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jIHwgICAxNCArKysrKysrKysrKysrKworIGdjYy92YXJhc20uYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKysrKy0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy92aXNpYmlsaXR5LTIxLmMKKworZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJlN2RlZGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYworQEAgLTAsMCArMSwxNCBAQAorKy8qIFBSIHRhcmdldC8zMjIxOSAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLXJlcXVpcmUtdmlzaWJpbGl0eSAiIiB9ICovCisrLyogeyBkZy1vcHRpb25zICItZlBJQyIgeyB0YXJnZXQgZnBpYyB9IH0gKi8KKysKKytleHRlcm4gdm9pZCBmKCkgX19hdHRyaWJ1dGVfXygod2Vhayx2aXNpYmlsaXR5KCJoaWRkZW4iKSkpOworK2V4dGVybiBpbnQgcHV0cyggY2hhciBjb25zdCogKTsKKytpbnQgbWFpbigpCisreworKwlpZiAoZikKKysJCWYoKTsKKysJcmV0dXJuIDA7CisrfQorKworZGlmZiAtLWdpdCBhL2djYy92YXJhc20uYyBiL2djYy92YXJhc20uYworaW5kZXggNjY0ODEwMy4uZmFkYmE3OCAxMDA2NDQKKy0tLSBhL2djYy92YXJhc20uYworKysrIGIvZ2NjL3ZhcmFzbS5jCitAQCAtNjY3NSw2ICs2Njc1LDEwIEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwgaW50IHNobGliKQorICAgLyogU3RhdGljIHZhcmlhYmxlcyBhcmUgYWx3YXlzIGxvY2FsLiAgKi8KKyAgIGVsc2UgaWYgKCEgVFJFRV9QVUJMSUMgKGV4cCkpCisgICAgIGxvY2FsX3AgPSB0cnVlOworKyAgLyogaGlkZGVuIHdlYWsgY2FuJ3QgYmUgb3ZlcnJpZGRlbiBieSBzb21ldGhpbmcgbm9uLWxvY2FsLCBhbGwKKysgICAgIHRoYXQgaXMgcG9zc2libGUgaXMgdGhhdCBpdCBpcyBub3QgZGVmaW5lZCBhdCBhbGwuICovCisrICBlbHNlIGlmIChERUNMX1dFQUsgKGV4cCkpCisrICAgIGxvY2FsX3AgPSBmYWxzZTsKKyAgIC8qIEEgdmFyaWFibGUgaXMgbG9jYWwgaWYgdGhlIHVzZXIgaGFzIHNhaWQgZXhwbGljaXRseSB0aGF0IGl0IHdpbGwKKyAgICAgIGJlLiAgKi8KKyAgIGVsc2UgaWYgKChERUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChleHApCitAQCAtNjY4OCwxMSArNjY5Miw2IEBAIGRlZmF1bHRfYmluZHNfbG9jYWxfcF8xIChjb25zdF90cmVlIGV4cCwgaW50IHNobGliKQorICAgICAgbG9jYWwuICAqLworICAgZWxzZSBpZiAoREVDTF9WSVNJQklMSVRZIChleHApICE9IFZJU0lCSUxJVFlfREVGQVVMVCkKKyAgICAgbG9jYWxfcCA9IHRydWU7CistICAvKiBEZWZhdWx0IHZpc2liaWxpdHkgd2VhayBkYXRhIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Ryb25nIHN5bWJvbAorLSAgICAgaW4gYW5vdGhlciBtb2R1bGUgYW5kIHNvIGFyZSBub3QgbG9jYWwuICAqLworLSAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApCistCSAgICYmICFyZXNvbHZlZF9sb2NhbGx5KQorLSAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBJZiBQSUMsIHRoZW4gYXNzdW1lIHRoYXQgYW55IGdsb2JhbCBuYW1lIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgICAgICBzeW1ib2xzIHJlc29sdmVkIGZyb20gb3RoZXIgbW9kdWxlcy4gICovCisgICBlbHNlIGlmIChzaGxpYikKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGEwZjliZDA5YzgxNmFkMjllY2Y3YzI5ZDZjMjdmN2RmOTc3MTAzNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8ICAgIDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGEwMDFjM2UuLjFhYWUxZTQgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1MTA2MmFhLi5jZjZiOTllIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKKyBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKKy0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCisrCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYTZkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjA5IEBACitGcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitAQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCitAQCAtNTcsNyArNTcsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXguaAorQEAgLTIwLDQgKzIwLDQgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCitAQCAtMjcsNiArMjcsNiBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGZfeDg2XzY0IgorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT05YMzIgImVsZjMyX3g4Nl82NCIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC14ODYtNjQuc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyICIvbGlieDMyL2xkLWxpbnV4LXgzMi5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXg4Ni02NC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LXgzMi5zby4yIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbWlwcy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvbWlwcy9saW51eC5oCitAQCAtMTcsNCArMTcsNCBAQCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHCisgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCitAQCAtMjIsMTAgKzIyLDEwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTjY0ICJlbGY2NCV7RUI6Yn0le0VMOmx9dHNtaXAiCisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYjY0L2xkLnNvLjEiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiAiL2xpYjMyL2xkLnNvLjEiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgIi9saWIzMi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKKyAgIENIT09TRV9EWU5BTUlDX0xJTktFUiAoR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIsIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiwgXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKysrKyBnY2MtNC44LjQvZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oCitAQCAtMzY2LDE0ICszNjYsMTQgQEAgZXh0ZXJuIGludCBkb3Rfc3ltYm9sczsKKyAjdW5kZWYJTElOS19PU19ERUZBVUxUX1NQRUMKKyAjZGVmaW5lIExJTktfT1NfREVGQVVMVF9TUEVDICIlKGxpbmtfb3NfbGludXgpIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQuc28uMSIKKyAjaWZkZWYgTElOVVg2NF9ERUZBVUxUX0FCSV9FTEZ2MgorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiJXttYWJpPWVsZnYxOi9saWI2NC9sZDY0LnNvLjE7Oi9saWI2NC9sZDY0LnNvLjJ9IgorICNlbHNlCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisgI2VuZGlmCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zaC9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zaC9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc2gvbGludXguaAorQEAgLTQzLDcgKzQzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4KKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKK0luZGV4OiBnY2MtNC44LjQvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC40Lm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdQorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI3VuZGVmICBMSU5LX1NQRUMKKyAjZGVmaW5lIExJTktfU1BFQyAiLW0gZWxmMzJfc3BhcmMgJXtzaGFyZWQ6LXNoYXJlZH0gXAorSW5kZXg6IGdjYy00LjguNC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCisrKysgZ2NjLTQuOC40L2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtOTIsOCArOTIsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLgorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWcvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguNC5vcmlnL2djYy9jb25maWcvbGludXguaAorKysrIGdjYy00LjguNC9nY2MvY29uZmlnL2xpbnV4LmgKK0BAIC03MywxMCArNzMsMTAgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USQorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGMxODE2YzE2MDE1NmY5OWMzNGU2YTBhMDMxMWJiMDIxOTMyNjgwNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggMjMyMDQ5Ny4uODU2MmE2MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDYyNyw3ICs0NjI3LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMxLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMyLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMi1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTk4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gOTdlNDU5MWMyMDMxMDQyNWU3YWNhMGU2NzEyYThkOTQ4MGU3NzQ0YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzMvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgICAgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IDgwZjQ1NGQuLjRkYjNlYjkgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgQkU4X0xJTktfU1BFQwkJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBCRThfTElOS19TUEVDIFRBUkdFVF9GSVhfVjRCWF9TUEVDCQkJXAorICAgTElOVVhfT1JfQU5EUk9JRF9MRCAoTElOVVhfVEFSR0VUX0xJTktfU1BFQywJCQkJXAorIAkJICAgICAgIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgIiAiIEFORFJPSURfTElOS19TUEVDKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmYzVlNGJlYWVhODU2YTJiNDg2Yzc3MGFkM2FkZGMwZjViYjMxMDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOGJjMGM5OC4uM2NkMDgxNyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTUxOSwxMCArMTE1MTksMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTUzMyw2ICsxMTU0MywxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZTVlODRmLi40MTVhNmRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MDAsMTAgKzE3MDAsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xNzE0LDYgKzE3MjQsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzUtd2Nhc3QtcXVhbC1QUi01NTM4My5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0Y2Y0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM1LXdjYXN0LXF1YWwtUFItNTUzODMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSBkZWZmZGIwYjI0OTdhMTA2MDYxZDNlYTJjNmEzZmVmNGZiYTM0NDVlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6Mzk6NTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNS8zNV0gd2Nhc3QtcXVhbCBQUi81NTM4MworCitUaGlzIGlzIGEgYmFja3BvcnQgZnJvbSBnY2MgYnVnemlsbGEKKworaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTM4MworCitUaGlzIGNvbW1pdCBmaXhlcyBhIHdyb25nIHdhcm5pbmcgYmVoYXZpb3IuIFRoaXMgYnVnIHdoaWNoIGhhcyBubword29ya2Fyb3VuZCBvdGhlciB0aGFuIGRpc2FibGluZyB0aGUgd2FybmluZy4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorLS0tCisgZ2NjL2MvYy10eXBlY2suYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCisgZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMgfCAgICA2ICsrKy0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suYyBiL2djYy9jL2MtdHlwZWNrLmMKK2luZGV4IGRkYjZkMzkuLmM2MjQxMjAgMTAwNjQ0CistLS0gYS9nY2MvYy9jLXR5cGVjay5jCisrKysgYi9nY2MvYy9jLXR5cGVjay5jCitAQCAtNDQ2NCw3ICs0NDY0LDcgQEAgaGFuZGxlX3dhcm5fY2FzdF9xdWFsIChsb2NhdGlvbl90IGxvYywgdHJlZSB0eXBlLCB0cmVlIG90eXBlKQorICAgICAvKiBUaGVyZSBhcmUgcXVhbGlmaWVycyBwcmVzZW50IGluIElOX09UWVBFIHRoYXQgYXJlIG5vdCBwcmVzZW50CisgICAgICAgIGluIElOX1RZUEUuICAqLworICAgICB3YXJuaW5nX2F0IChsb2MsIE9QVF9XY2FzdF9xdWFsLAorLQkJImNhc3QgZGlzY2FyZHMgJXEjdiBxdWFsaWZpZXIgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIiwKKysJCSJjYXN0IGRpc2NhcmRzICVxdiBxdWFsaWZpZXIgZnJvbSBwb2ludGVyIHRhcmdldCB0eXBlIiwKKyAJCWRpc2NhcmRlZCk7CisgCisgICBpZiAoYWRkZWQgfHwgZGlzY2FyZGVkKQorZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL1djYXN0LXF1YWwtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKK2luZGV4IDY0MGU0ZjAuLjU2MzgyYzcgMTAwNjQ0CistLS0gYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9XY2FzdC1xdWFsLTEuYworKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vV2Nhc3QtcXVhbC0xLmMKK0BAIC04NSwxMSArODUsMTEgQEAgZjMgKHZvaWQgKioqYmFyKQorIHZvaWQKKyBmNCAodm9pZCAqIGNvbnN0ICoqYmFyKQorIHsKKy0gIGNvbnN0IHZvaWQgKioqcDkgPSAoY29uc3Qgdm9pZCAqKiopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IiB9ICovCisrICBjb25zdCB2b2lkICoqKnA5ID0gKGNvbnN0IHZvaWQgKioqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCBkaXNjYXJkcyAuY29uc3QuIHF1YWxpZmllciIgfSAqLworICAgdm9pZCAqIGNvbnN0ICoqcDExID0gKHZvaWQgKiBjb25zdCAqKikgYmFyOworLSAgdm9pZCAqKiBjb25zdCAqcDEzID0gKHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIHZvaWQgKiogY29uc3QgKnAxMyA9ICh2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICBjb25zdCB2b2lkICogY29uc3QgKipwMTUgPSAoY29uc3Qgdm9pZCAqIGNvbnN0ICoqKSBiYXI7IC8qIHsgZGctd2FybmluZyAiY2FzdCIgfSAqLworLSAgY29uc3Qgdm9pZCAqKiBjb25zdCAqcDE3ID0gKGNvbnN0IHZvaWQgKiogY29uc3QgKikgYmFyOyAvKiB7IGRnLXdhcm5pbmcgImNhc3QiIH0gKi8KKysgIGNvbnN0IHZvaWQgKiogY29uc3QgKnAxNyA9IChjb25zdCB2b2lkICoqIGNvbnN0ICopIGJhcjsgLyogeyBkZy13YXJuaW5nICJjYXN0IGRpc2NhcmRzIC5jb25zdC4gcXVhbGlmaWVyIiB9ICovCisgICB2b2lkICogY29uc3QgKiBjb25zdCAqIHAxOSA9ICh2b2lkICogY29uc3QgKiBjb25zdCAqKSBiYXI7CisgICBjb25zdCB2b2lkICogY29uc3QgKiBjb25zdCAqcDIxID0gKGNvbnN0IHZvaWQgKiBjb25zdCAqIGNvbnN0ICopIGJhcjsKKyB9CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDM4LWdjYy00LjgtYnVpbGQtYXJncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzgyOTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwMzgtZ2NjLTQuOC1idWlsZC1hcmdzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK1doZW4gY3Jvc3MgY29tcGlsaW5nIGEgdGFyZ2V0IGdjYywgdGFyZ2V0IGZsYWdzIG1heSBiZSB1c2VkIG9uIHRoZSBob3N0CisKK0NvbmZpZ3VyZSBpZGVudGlmaWVzIGEgbnVtYmVyIG9mIHdhcm5pbmcgZmxhZ3MgKFdBUk5fQ0ZMQUdTIGFuZAorV0FSTl9DWFhGTEFHUykgZnJvbSB0aGUgJENDIHZhbHVlLiAgVGhlIGNyb3NzIGNvbXBpbGVyIG1heSBiZSBkaWZmZXJlbnQKK2Zyb20gdGhlIGhvc3QgY29tcGlsZXIgYW5kIG1heSBub3Qgc3VwcG9ydCB0aGUgc2FtZSBzZXQgb2YgZmxhZ3MuICBUaGlzCitsZWFkcyB0byBwcm9ibGVtcyBzdWNoIGFzOgorCitjYzFwbHVzOiBlcnJvcjogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gIi1Xbm8tbmFycm93aW5nIgorY2MxcGx1czogZXJyb3I6IHVucmVjb2duaXplZCBjb21tYW5kIGxpbmUgb3B0aW9uICItV25vLW92ZXJsZW5ndGgtc3RyaW5ncyIKKworV29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IHJlbW92aW5nIHRoZSB3YXJuaW5nIGZsYWdzIGZyb20gdGhlCitCVUlMRF9DWFhGTEFHUyB2YWx1ZSwgaW4gYSB3YXkgc2ltaWxhciB0byB0aGUgQlVJTERfQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ2NjLTQuOC40L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjQub3JpZy9nY2MvY29uZmlndXJlCisrKysgZ2NjLTQuOC40L2djYy9jb25maWd1cmUKK0BAIC0xNzg2NCw3ICsxNzg2NCw3IEBAIGVsc2UKKyAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorLSNsaW5lIDE3ODUzICJjb25maWd1cmUiCisrI2xpbmUgMTc4NjcgImNvbmZpZ3VyZSIKKyAjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyAKKyAjaWYgSEFWRV9ETEZDTl9ICitAQCAtMTc5NzAsNyArMTc5NzAsNyBAQCBlbHNlCisgICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKy0jbGluZSAxNzk1OSAiY29uZmlndXJlIgorKyNsaW5lIDE3OTczICJjb25maWd1cmUiCisgI2luY2x1ZGUgImNvbmZkZWZzLmgiCisgCisgI2lmIEhBVkVfRExGQ05fSAorQEAgLTI2OTE4LDE4ICsyNjkxOCwxNSBAQCAkYXNfZWNobyAiI2RlZmluZSBUQVJHRVRfTElCQ19QUk9WSURFU19TCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistCisteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorLSRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorLWhhdmVfc3lzX3NkdF9oPW5vCisrI0dDQ19UQVJHRVRfVEVNUExBVEUoW0hBVkVfU1lTX1NEVF9IXSkKKysjQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKysjaGF2ZV9zeXNfc2R0X2g9bm8KKyAjaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCisgIyAgaGF2ZV9zeXNfc2R0X2g9eWVzCistIworLSMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0jCisrIyAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorKyMgICAgICAgICAgICBbRGVmaW5lIGlmIHlvdXIgdGFyZ2V0IEMgbGlicmFyeSBwcm92aWRlcyBzeXMvc2R0LmhdKQorICNmaQorLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorLSRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorKyNBQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKyAKKyAjIENoZWNrIGlmIFRGbW9kZSBsb25nIGRvdWJsZSBzaG91bGQgYmUgdXNlZCBieSBkZWZhdWx0IG9yIG5vdC4KKyAjIFNvbWUgZ2xpYmMgdGFyZ2V0cyB1c2VkIERGbW9kZSBsb25nIGRvdWJsZSwgYnV0IHdpdGggZ2xpYmMgMi40CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwYWE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQwLWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0MS1saWJ0b29sLWF2b2lkLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ5NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEgaG9zdCBwYXRoCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9sdG1haW4uc2ggYi9sdG1haW4uc2gKK2luZGV4IGEwMzQzM2YuLjE5MDJhOTAgMTAwNjQ0CistLS0gYS9sdG1haW4uc2gKKysrKyBiL2x0bWFpbi5zaAorQEAgLTU2MjgsNiArNTYyOCw5IEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisgCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisgCSAgZWxzZQorKwkgICAgIyBJbnN0ZWFkIG9mIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aCwKKysJICAgICMgdXNlIHRoZSBwYXRoIHRoZSAubGEgaXMgY29udGFpbmVkIGluLgorKwkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgZGlyPSIkbGliZGlyIgorIAkgICAgYWJzZGlyPSIkbGliZGlyIgorIAkgIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Mi1wcjU3NzQ4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzU2ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDItcHI1Nzc0OC5wYXRjaApAQCAtMCwwICsxLDc4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhagorCisyMDEzLTA4LTAxICBNYXJ0aW4gSmFtYm9yICA8bWphbWJvckBzdXNlLmN6PgorCisJUFIgbWlkZGxlLWVuZC81Nzc0OAorCSogc3Rvci1sYXlvdXQuYyAoY29tcHV0ZV9yZWNvcmRfbW9kZSk6IFRyZWF0IHplcm8tc2l6ZWQgYXJyYXkgZmllbGRzCisJbGlrZSBpbmNvbXBsZXRlIHR5cGVzLgorCit0ZXN0c3VpdGUvCisJKiBnY2MuZGcvdG9ydHVyZS9wcjU3NzQ4LmM6IE5ldyB0ZXN0LgorCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3N0b3ItbGF5b3V0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2Mvc3Rvci1sYXlvdXQuYwkyMDEzLTA0LTI4IDEwOjI5OjE4LjAwMDAwMDAwMCAtMDcwMAorKysrIGdjYy00LjguMS9nY2Mvc3Rvci1sYXlvdXQuYwkyMDEzLTA4LTAxIDE1OjAyOjA4LjAxODAwNjEyNSAtMDcwMAorQEAgLTE2MTgsNyArMTYxOCw5IEBACisgCQkgICAmJiBpbnRlZ2VyX3plcm9wIChUWVBFX1NJWkUgKFRSRUVfVFlQRSAoZmllbGQpKSkpKQorIAkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoYml0X3Bvc2l0aW9uIChmaWVsZCksIDEpCisgCSAgfHwgREVDTF9TSVpFIChmaWVsZCkgPT0gMAorLQkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoREVDTF9TSVpFIChmaWVsZCksIDEpKQorKwkgIHx8ICEgaG9zdF9pbnRlZ2VycCAoREVDTF9TSVpFIChmaWVsZCksIDEpCisrCSAgfHwgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChmaWVsZCkpID09IEFSUkFZX1RZUEUKKysJICAgICAgJiYgdHJlZV9sb3dfY3N0IChERUNMX1NJWkUgKGZpZWxkKSwgMSkgPT0gMCkpCisgCXJldHVybjsKKyAKKyAgICAgICAvKiBJZiB0aGlzIGZpZWxkIGlzIHRoZSB3aG9sZSBzdHJ1Y3QsIHJlbWVtYmVyIGl0cyBtb2RlIHNvCitJbmRleDogZ2NjLTQuOC4xL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RvcnR1cmUvcHI1Nzc0OC5jCTIwMTMtMDgtMDEgMTU6MDI6MDguMDYyMDA2MTI2IC0wNzAwCitAQCAtMCwwICsxLDQ1IEBACisrLyogUFIgbWlkZGxlLWVuZC81Nzc0OCAqLworKy8qIHsgZGctZG8gcnVuIH0gKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrCisrZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOworKworK3R5cGVkZWYgbG9uZyBsb25nIFYKKysgIF9fYXR0cmlidXRlX18gKCh2ZWN0b3Jfc2l6ZSAoMiAqIHNpemVvZiAobG9uZyBsb25nKSksIG1heV9hbGlhcykpOworKworK3R5cGVkZWYgc3RydWN0IFMgeyBWIGE7IFYgYlswXTsgfSBQIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDEpKSk7CisrCisrc3RydWN0IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFQgeyBjaGFyIGM7IFAgczsgfTsKKysKKyt2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytjaGVjayAoc3RydWN0IFQgKnQpCisreworKyAgaWYgKHQtPnMuYlswXVswXSAhPSAzIHx8IHQtPnMuYlswXVsxXSAhPSA0KQorKyAgICBhYm9ydCAoKTsKKyt9CisrCisraW50IF9fYXR0cmlidXRlX18oKG5vaW5saW5lLCBub2Nsb25lKSkKKytnZXRfaSAodm9pZCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCBfX2F0dHJpYnV0ZV9fKChub2lubGluZSwgbm9jbG9uZSkpCisrZm9vIChQICpwKQorK3sKKysgIFYgYSA9IHsgMywgNCB9OworKyAgaW50IGkgPSBnZXRfaSgpOworKyAgcC0+YltpXSA9IGE7CisrfQorKworK2ludAorK21haW4gKCkKKyt7CisrICBzdHJ1Y3QgVCAqdCA9IChzdHJ1Y3QgVCAqKSBtYWxsb2MgKDEyOCk7CisrCisrICBmb28gKCZ0LT5zKTsKKysgIGNoZWNrICh0KTsKKysKKysgIHJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQzLWNwcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWY4NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDMtY3BwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbiBidWlsZGluZyAKK2djYy1jcm9zcy1jYW5hZGlhbiBmb3IgYSBtaW5ndyB0YXJnZXR0ZWQgc2RrLCB0aGUgZm9sbG93aW5nIGNhbiBiZSBmb3VuZCBpbgorYnVpbGQueDg2XzY0LXBva3lzZGstbWluZ3czMi5pNTg2LXBva3ktbGludXgvYnVpbGQteDg2XzY0LWxpbnV4L2xpYmliZXJ0eS9jb25maWcubG9nOgorCitjb25maWd1cmU6MzY0MTogY2hlY2tpbmcgZm9yIF9GSUxFX09GRlNFVF9CSVRTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMKK2NvbmZpZ3VyZTozNjY2OiBnY2MgIC1jIC1pc3lzdGVtL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLU8yIC1waXBlICBjb25mdGVzdC5jID4mNQorY29uZmlndXJlOjM2NjY6ICQ/ID0gMAorY29uZmlndXJlOjM2OTg6IHJlc3VsdDogbm8KK2NvbmZpZ3VyZTozNzg2OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvcgorY29uZmlndXJlOjM4NTY6IHJlc3VsdDogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMgorY29uZmlndXJlOjM4NzY6IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjIC1FIC0tc3lzcm9vdD0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1uYXRpdmVzZGstbWluZ3czMi1wb2t5c2RrLW1pbmd3MzIgIGNvbmZ0ZXN0LmMKK2NvbmZpZ3VyZTozODc2OiAkPyA9IDAKKworTm90ZSB0aGlzIGlzIGEgKmJ1aWxkKiB0YXJnZXQgKGluIGJ1aWxkLXg4Nl82NC1saW51eCkgc28gaXQgc2hvdWxkIGJlIHVzaW5nIAordGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIgaGVhZGVycyBhcmUgCit2ZXJ5IGRpZmZlcmVudCwgdXNpbmcgdGhlIHdyb25nIGNwcCBpcyBhIHJlYWwgcHJvYmxlbS4gSXQgaXMgbGVha2luZyBpbnRvIAorY29uZmlndXJlIHRocm91Z2ggdGhlIENQUCB2YXJpYWJsZS4gVWx0aW1hdGVseSB0aGlzIGxlYWRzIHRvIGJ1aWxkIGZhaWx1cmVzIAorcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkIGVudmlyb25tZW50IHdoZW4KK3VzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlIHRoZSB2ZXJzaW9uCit3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0byBhdm9pZCB0aGUgCitwcm9ibGVtLgorCitSUCAyMi8wOC8yMDEzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2NjLTQuOC4xL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wMy0zMCAxMToyNTowMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvTWFrZWZpbGUuaW4JMjAxMy0wOC0xMyAxMjowMzoxNy4xNTE5ODg4ODIgKzAwMDAKK0BAIC0xNDksNiArMTQ5LDcgQEAKKyAJQVI9IiQoQVJfRk9SX0JVSUxEKSI7IGV4cG9ydCBBUjsgXAorIAlBUz0iJChBU19GT1JfQlVJTEQpIjsgZXhwb3J0IEFTOyBcCisgCUNDPSIkKENDX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ0M7IFwKKysJQ1BQPSIkKENDX0ZPUl9CVUlMRCkgLUUiOyBleHBvcnQgQ1BQOyBcCisgCUNGTEFHUz0iJChDRkxBR1NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDRkxBR1M7IFwKKyAJQ09ORklHX1NIRUxMPSIkKFNIRUxMKSI7IGV4cG9ydCBDT05GSUdfU0hFTEw7IFwKKyAJQ1hYPSIkKENYWF9GT1JfQlVJTEQpIjsgZXhwb3J0IENYWDsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDQtZ2VuZ3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzODc2MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0NC1nZW5ndHlwZXMucGF0Y2gKQEAgLTAsMCArMSw5NyBAQAorZ2VuZ3R5cGUgaXMgZ2VuZXJhdGVkIGZvciBib3RoIHRoZSBidWlsZCBzeXN0ZW0gYW5kIHRoZSB0YXJnZXQuIC1ER0VORVJBVE9SX0ZJTEUKK3dhcyBhZGRlZCBpbiB0aGUgcGF0Y2ggaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTItMDcvbXNnMDAyNzMuaHRtbAorYW5kIHdhcyBhcHBsaWVkIHRvIGJvdGggdmVyc2lvbnMgb2YgZ2VuZ3R5cGUuCisKK1VuZm9ydHVuYXRlbHkgdGhlIHByZXNlbmNlIG9mIHRoaXMgZmxhZyB0cmlnZ2VycyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiAoYmNvbmZpZy5oKSAKK3RvIGJlIGluY2x1ZGVkIGZvciB0aGUgdGFyZ2V0IGJ1aWxkIG9mIGdlbmd0eXBlLiBDb21waWxpbmcgZ2VuZ3R5cGUgd2l0aCB0aGUgdGFyZ2V0IAorY29tcGlsZXIgYW5kIGJjb25maWcuaCBjYW4gcmVzdWx0IGluIGVycm9ycyBpZiB0aGUgYnVpbGQgYW5kIHRhcmdldCBzeXN0ZW1zIGFyZSAKK2Rpc3NpbWlsYXIuIEFuIGV4YW1wbGUgY2FzZSB0aGlzIGZhaWxzIGlzIGNyb3NzIGNvbXBpbGluZyBnY2Mgb24gbGludXggZm9yIGEgZGFyd2luIAordGFyZ2V0IHN5c3RlbToKKworSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzoyNTowOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2dlbmd0eXBlLXBhcnNlLmM6IEluIGZ1bmN0aW9uICd2b2lkIHBhcnNlX2Vycm9yKGNvbnN0IGNoYXIqLCAuLi4pJzoKK3wgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9zeXN0ZW0uaDo5Mzo1MzogZXJyb3I6ICdmcHV0Y191bmxvY2tlZCcgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlCit8ICAjICBkZWZpbmUgZnB1dGMoQywgU3RyZWFtKSBmcHV0Y191bmxvY2tlZCAoQywgU3RyZWFtKQorCit3aGljaCBvY2N1cnMgc2luY2UgYXV0by1idWlsZC5oIGFuZCBhdXRvLWhvc3QuaCBoYXZlIGRpZmZlcm5ldCB2YWx1ZXMgb2YKK0hBVkVfRlBVVENfVU5MT0NLRUQ6CisKKyNkZWZpbmUgSEFWRV9GUFVUQ19VTkxPQ0tFRCAxCisvKiAjdW5kZWYgSEFWRV9GUFVUU19VTkxPQ0tFRCAqLworCitUaGUgb2J2aW91cyBmaXggaXMgdG8gb25seSBpbmNsdWRlIHRoZSBmbGFnIG9uIGJ1aWxkLyB0YXJnZXRzIHdoaWNoIHRoaXMgcGF0Y2ggZG9lcywgaG93ZXZlciAKK3RoaXMgYWxzbyBsZWFkcyB0byBjb21waWxlIGVycm9ycyBkdWUgdG8gY29uc3RfdHJlZSBiZWluZyB1bmRlZmluZWQgYnV0IHVzZWQgaW4gZG91YmxlX2ludC5oCisKK0kgYWRkZWQgYSBHRU5FUkFUT1JfRklMRTIgZmxhZyB0byB3b3JrYXJvdW5kIHRob3NlIGluIHRoZSAKK3RhcmdldCBjYXNlIGFuZCBhbGxvdyB0aGUgYnVpbGQgdG8gc3VjY2VlZC4KKworT25seSB0aGUgYnVpbGQvZ2VuZ3R5cGVzIHNob3VsZCBoYXZlIHRoZSAtREdFTkVSQVRPUl9GSUxFIAorCitSUCAyMi84LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzYuODQ0MDE0NDI0ICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy9NYWtlZmlsZS5pbgkyMDEzLTA4LTE5IDExOjQwOjM3Ljc4NDAxNDQwMiArMDAwMAorQEAgLTM5MDMsMjcgKzM5MDMsMjkgQEAKKyAKKyBnZW5ndHlwZS1sZXgubyBidWlsZC9nZW5ndHlwZS1sZXgubyA6IGdlbmd0eXBlLWxleC5jIGdlbmd0eXBlLmggJChTWVNURU1fSCkKKyBnZW5ndHlwZS1sZXgubzogJChDT05GSUdfSCkgJChCQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLWxleC5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLWxleC5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1wYXJzZS5vIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gOiBnZW5ndHlwZS1wYXJzZS5jIGdlbmd0eXBlLmggXAorICAgJChTWVNURU1fSCkKKyBnZW5ndHlwZS1wYXJzZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUtc3RhdGUubyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiBnZW5ndHlwZS1zdGF0ZS5jICQoU1lTVEVNX0gpIFwKKyAgIGdlbmd0eXBlLmggZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgJChPQlNUQUNLX0gpIFwKKyAgICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUtc3RhdGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLXN0YXRlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtc3RhdGUubzogJChCQ09ORklHX0gpCisgCisgZ2VuZ3R5cGUubyBidWlsZC9nZW5ndHlwZS5vIDogZ2VuZ3R5cGUuYyAkKFNZU1RFTV9IKSBnZW5ndHlwZS5oIAlcCisgICBydGwuZGVmIGluc24tbm90ZXMuZGVmIGVycm9ycy5oIGRvdWJsZS1pbnQuaCB2ZXJzaW9uLmggJChIQVNIVEFCX0gpIFwKKyAgICQoT0JTVEFDS19IKSAkKFhSRUdFWF9IKQorIGdlbmd0eXBlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1nZW5ndHlwZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUyCisrQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLm86ICQoQkNPTkZJR19IKQorIAorIGJ1aWxkL2dlbm1kZGVwcy5vOiBnZW5tZGRlcHMuYyAkKEJDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVzLmgJXAorQEAgLTM5ODgsNyArMzk5MCw3IEBACisgIyBhbnkgc3lzdGVtIGhlYWRlciBpcyBpbmNsdWRlZC4KKyBnZW5ndHlwZS1sZXguYyA6IGdlbmd0eXBlLWxleC5sCisgCS0kKEZMRVgpICQoRkxFWEZMQUdTKSAtbyRAICQ8ICYmIHsgXAorLQkgIGVjaG8gJyNpbmNsdWRlICJiY29uZmlnLmgiJyA+ICRALnRtcDsgXAorKwkgIGVjaG8gJycgPiAkQC50bXA7IFwKKyAJICBjYXQgJEAgPj4gJEAudG1wOyBcCisgCSAgbXYgJEAudG1wICRAOyBcCisgCX0KK0luZGV4OiBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9kb3VibGUtaW50LmgJMjAxMy0wMS0zMCAxMTowNDozMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTA4LTE5IDExOjQxOjUxLjU2NDAxMjcxOSArMDAwMAorQEAgLTQ0OCwxMCArNDQ4LDEyIEBACisgCisgCisgI2lmbmRlZiBHRU5FUkFUT1JfRklMRQorKyNpZm5kZWYgR0VORVJBVE9SX0ZJTEUyCisgLyogQ29udmVyc2lvbiB0byBhbmQgZnJvbSBHTVAgaW50ZWdlciByZXByZXNlbnRhdGlvbnMuICAqLworIAorIHZvaWQgbXB6X3NldF9kb3VibGVfaW50IChtcHpfdCwgZG91YmxlX2ludCwgYm9vbCk7CisgZG91YmxlX2ludCBtcHpfZ2V0X2RvdWJsZV9pbnQgKGNvbnN0X3RyZWUsIG1wel90LCBib29sKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAjZW5kaWYgLyogRE9VQkxFX0lOVF9IICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ni1saWJhdG9taWMtZGVwdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNGY0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApAQCAtMCwwICsxLDQxIEBACitnY2MgNC44IHdvbid0IGJ1aWxkIHdpdGggLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgc2luY2UgdGhlICouUHBvIGZpbGVzCitkb24ndCBnZXQgY3JlYXRlZCB1bmxlc3MgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyBpcyB0cnVlLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgd2Ugb25seSB1c2UgdGhvc2UgY29tcGlsZXIgb3B0aW9ucyB3aGVuIGl0cyBlbmFibGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisoUHJvYmxlbSB3YXMgYWxyZWFkeSByZXBvcnRlZCB1cHN0cmVhbSwgYXR0YWNoZWQgdGhpcyBwYXRjaCB0aGVyZQoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD01NTkzMCkKKworUlAgCisyMDEyLzA5LzIyCisKK0luZGV4OiBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDEtMTQgMTg6MTY6MjMuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5hbQkyMDEzLTA5LTIyIDEwOjM4OjE4LjkwNDA2NDc1MCArMDAwMAorQEAgLTEwMCw3ICsxMDAsOCBAQAorIElGVU5DX0RFRgk9IC1ESUZVTkNfQUxUPSQoUEFUX1MpCisgSUZVTkNfT1BUCT0gJCh3b3JkICQoUEFUX1MpLCQoSUZVTkNfT1BUSU9OUykpCisgCistTV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTCQk9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUwkJPSAKKyBNX1NJWkUJCT0gLUROPSQoUEFUX04pCisgTV9JRlVOQwkJPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFCQk9ICQoUEFUX0JBU0UpX24uYworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wNS0zMSAwOTowOToyNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmluCTIwMTMtMDktMjIgMTA6NDA6NDIuNTIwMDU5OTE3ICswMDAwCitAQCAtMjk4LDcgKzI5OCw4IEBACisgUEFUX1MgPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGID0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQgPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKy1NX0RFUFMgPSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQoQEYpLlBwbworK0BBTURFUF9UUlVFQE1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX0ZBTFNFQE1fREVQUyA9IAorIE1fU0laRSA9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMgPSAkKGlmICQoUEFUX1MpLCQoSUZVTkNfREVGKSAkKElGVU5DX09QVCkpCisgTV9GSUxFID0gJChQQVRfQkFTRSlfbi5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWZkNTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44LzAwNDctcmVwb21lbWJ1Zy5wYXRjaApAQCAtMCwwICsxLDUzIEBACitXaGVuIGNvbXBpbGluZyBhIHByb2plY3QgdXNpbmcgLWZyZXBvLCAucnBvIGZpbGVzIGFyZSB3cml0dGVuIGFsb25nc2lkZQordGhlIC5vIGZpbGUsIHRoZSBzeW1ib2xzIGVpdGhlciBoYXZlIE8gb3IgQyBhZ2FpbnN0IHRoZW0uIER1cmluZyBmaW5hbCBsaW5raW5nLAordGhlIG9iamVjdHMgY2FuIGJlIHJlY29tcGlsZWQgd2l0aCBzb21lIG9mIHRoZSBlbnRyaWVzIHR3ZWFrZWQvY2hvc2VuIGJ5IHRoZSAKK3RsaW5rLmMgY29kZSAodmlzaWJsZSB3aXRoIFRMSU5LX1ZFUkJPU0U9MyksIGl0IGRvZXMgdGhpcyBieSBjaGFuZ2luZyBPIC0+IEMKK2luIHRoZSAucnBvIGZpbGVzLgorCitNeSB0ZXN0cyBzaG93ZWQgdGhhdCBpbml0X3JlcG8gKGNwL3JlcG8uYykgd2FzIGNvcnJlY3RseSBjYWxsaW5nIAorSURFTlRJRklFUl9SRVBPX0NIT1NFTiBhZ2FpbnN0IHRoZSByaWdodCBpZGVudGlmZXJzIGFuZCBzZXR0aW5nIHRoZQorY2hvc2VuIGJpdC4KKworQnkgdGhlIHRpbWUgZmluaXNoX3JlcG8oKSBvciBlbWl0X3JlcG9fcCgpIHdlcmUgY2FsbGVkLCB0aGUgcG9pbnRlciByZXR1cm5lZAorYnkgZ2V0X2lkZW50aWZpZXIoKSBmb3IgdGhlIHN5bWJvbCBtYXJrZWQgZHVyaW5nIGluaXRfcmVwbyBoYWQgY2hhbmdlZCBhbmQKK3RoZSBjaG9zZW4gYml0IHdhcyBubyBsb25nZXIgc2V0LiBUaGlzIGxlYWQgdG8gbGlua2luZyBidWdzIGxpa2U6CisKK2NvbGxlY3Q6IHJlbGlua2luZworY29sbGVjdDI6IGVycm9yOiAnX1pOSzZzdWRva3U1Q2xlYXJJTlNfOFNlcXVlbmNlRUVjbEVSUzFfJyB3YXMgYXNzaWduZWQgdG8gJ2JvYXJkLnJwbycsIGJ1dCB3YXMgbm90IGRlZmluZWQgZHVyaW5nIHJlY29tcGlsYXRpb24sIG9yIHZpY2UgdmVyc2EKKworVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzIGdldHRpbmcgY2FsbGVkIGJlZm9yZQorZmluaXNoX3JlcG8oKSBpcyBjYWxsZWQgYW5kIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzIGlzIHNldCB0byBmYWxzZSAKK3NvIHRoZSBpZGVudGlmaWVycyBhcmUgbm90IHByZXNlcnZlZC4gVGhleSBhcmUgcmVjcmVhdGVkIGJ1dCB0aGUgCitjaG9zZW4gYml0cyBnZXQgd2lwZWQgb3V0IHdoaWNoIGlzIHdoeSB0aGUgcG9pbnRlciBjaGFuZ2VzIGFuZCB0aGUgCitjaG9zZW4gYml0IGlzIG5vdCBzZXQuCisKK1RoZSBmaXggaXMgdG8gY2hhbmdlIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzICphZnRlciogdGhlIGZpbmlzaF9yZXBvIAorY2FsbHMgYXJlIG1hZGUuCisKK1JlcHJvZHVjdGlvbiBpcyB0cmlja3kgc2luY2UgeW91IG5lZWQgdG8gdHJpZ2dlciB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgYXQKK2p1c3QgdGhlIHJpZ2h0IG1vbWVudC4KKworUlAgMjAxMy8xMC85CisKK1tZT0NUTyAjNTEzM10KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL3RvcGxldi5jCTIwMTMtMDMtMjggMDg6Mjk6NTEuMDAwMDAwMDAwICswMDAwCisrKysgZ2NjLTQuOC4xL2djYy90b3BsZXYuYwkyMDEzLTEwLTA5IDIwOjI3OjE3LjA4OTIyODAyMyArMDAwMAorQEAgLTU1MSwxMSArNTUxLDExIEBACisgICBpZiAoZmxhZ19zeW50YXhfb25seSB8fCBmbGFnX3dwYSkKKyAgICAgcmV0dXJuOworIAorLSAgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgPSBmYWxzZTsKKy0KKyAgIC8qIFRoaXMgbXVzdCBhbHNvIGNhbGwgZmluYWxpemVfY29tcGlsYXRpb25fdW5pdC4gICovCisgICBsYW5nX2hvb2tzLmRlY2xzLmZpbmFsX3dyaXRlX2dsb2JhbHMgKCk7CisgCisrICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworKworICAgaWYgKHNlZW5fZXJyb3IgKCkpCisgICAgIHJldHVybjsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOC8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OGY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gOWUwZTE5ZWFjMjU2MmY3Mzg1ODYwMmZlMjZlMjA0NGViOGIyMGM0NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbCAKK25vdCBiZSBhYmxlIHRvIGdlbmVyYXRlIGNvZGUgZm9yIFNQRSB0YXJnZXRzIChlNTAwdjEvdjIpLgorR0NDIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4c3BlIHdpbGwgbm90IGJlIGFibGUgdG8KK2dlbmVyYXRlIEFsdGlWZWMgaW5zdHJ1Y3Rpb25zIChmb3IgZTY1MDApLgorVGhpcyBwYXRjaCBtb2RpZmllcyB0aGUgY29uZmlndXJlZCBmaWxlIHN1Y2ggdGhhdCBTUEUgb3IgQWx0aVZlYyBjb2RlCitjYW4gYmUgZ2VuZXJhdGVkIHdoZW4gZ2NjIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LgorVGhlIEFCSSBhbmQgc3BlY2lmZmljIGluc3RydWN0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKyItbWFiaT1zcGUgb3IgLW1hYmk9YWx0aXZlYyIgYW5kIHRoZSAiLW1zcGUgb3IgLW1hbHRpdmVjIiBwYXJhbWV0ZXJzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdjYy9jb25maWcuZ2NjIHwgICAgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggY2I3YTk0ZS4uZDM5MmMyYiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwNjgsNyArMjA2OCwxMiBAQCBwb3dlcnBjLSotcnRlbXMqKQorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHQtcnRlbXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJOzsKKyBwb3dlcnBjKi0qLWxpbnV4KikKKy0JdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCIgOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmggcnM2MDAwL2xpbnV4YWx0aXZlYy5oIHJzNjAwMC9saW51eHNwZS5oIHJzNjAwMC9lNTAwLmgiIDs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSJyczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXBwY29zICR7dG1ha2VfZmlsZX0gcnM2MDAwL3QtcHBjY29tbSIKKyAJY2FzZSAke3RhcmdldH0gaW4KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjgvdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhjNjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC44L3RhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDgxIEBACitFbnN1cmUgdGFyZ2V0IGdjYyBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZAorCitUaGVyZSBhcmUgYSBmZXcgaGVhZGVycyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkCitnY2MtcnVudGltZSB0YXJnZXQgKG9tcC5oLCBzc3AvKi5oKS4gQmVpbmcgaW5zdGFsbGVkIGZyb20gYSByZWNpcGUKK2J1aWx0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlIHdpdGhpbiB0aGUgdGFyZ2V0CitzeXNyb290IGFuZCBub3QgY3Jvc3MvbmF0aXZlc2RrOyB0aHVzIHRoZXkgd2VyZW4ndCBhYmxlIHRvIGJlCitmb3VuZCBieSBnY2Mgd2l0aCB0aGUgZXhpc3Rpbmcgc2VhcmNoIHBhdGhzLiBBZGQgc3VwcG9ydCBmb3IKK3BpY2tpbmcgdXAgdGhlc2UgaGVhZGVycyB1bmRlciB0aGUgc3lzcm9vdCBzdXBwbGllZCBvbiB0aGUgZ2NjCitjb21tYW5kIGxpbmUgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgkyMDE0LTEyLTIzIDExOjU3OjMzLjMyNzg3MzMzMSArMDAwMAorKysrIGIvZ2NjL01ha2VmaWxlLmluCTIwMTUtMDEtMjEgMTE6MzI6MzUuNDQ3MzA1Mzk0ICswMDAwCitAQCAtNTg3LDYgKzU4Nyw3IEBACisgCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGxpYnJhcmllcyBldGMuCisgbGlic3ViZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKytsaWJzdWJkaXJfdGFyZ2V0ID0gZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIHRoZSBjb21waWxlciBmaW5kcyBleGVjdXRhYmxlcworIGxpYmV4ZWNzdWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQodmVyc2lvbikKKyAjIERpcmVjdG9yeSBpbiB3aGljaCBhbGwgcGx1Z2luIHJlc291cmNlcyBhcmUgaW5zdGFsbGVkCitAQCAtMjUzNCw2ICsyNTM1LDcgQEAKKyAKKyBQUkVQUk9DRVNTT1JfREVGSU5FUyA9IFwKKyAgIC1ER0NDX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGVcIiBcCisrICAtREdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ9XCIkKGxpYnN1YmRpcl90YXJnZXQpL2luY2x1ZGVcIiBcCisgICAtREZJWEVEX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGUtZml4ZWRcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUj1cIiQoZ2NjX2d4eF9pbmNsdWRlX2RpcilcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVD0kKGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3QpIFwKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0xMyAxNzo0MDoyNi4xMzEwMTI3MjUgKzAwMDAKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMJMjAxNS0wMS0yMSAxMTozMDowOC45Mjg0MjY0OTIgKzAwMDAKK0BAIC01OSw2ICs1OSwxMCBAQAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCisgICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorKyNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisrICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrI2VuZGlmCisgI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisgICAgIC8qIC91c3IvbG9jYWwvaW5jbHVkZSBjb21lcyBiZWZvcmUgdGhlIGZpeGluY2x1ZGVkIGhlYWRlciBmaWxlcy4gICovCisgICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDIgfSwKK2RpZmYgLS1naXQgYS9nY2MvZGVmYXVsdHMuaCBiL2djYy9kZWZhdWx0cy5oCitpbmRleCBmOTRhZTE3Li5kOThiNDBiIDEwMDY0NAorLS0tIGEvZ2NjL2RlZmF1bHRzLmgKKysrKyBiL2djYy9kZWZhdWx0cy5oCitAQCAtMTM5MCw0ICsxMzkwLDEzIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorIAorICNlbmRpZiAvKiBHQ0NfSU5TTl9GTEFHU19IICAqLworIAorKy8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworKworKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorKyNlbmRpZgorKyNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCisrI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKysjZW5kaWYKKysKKyAjZW5kaWYgIC8qICEgR0NDX0RFRkFVTFRTX0ggKi8KK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDlmMGI3ODEuLjE3NGZjYTggMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTExODksMTMgKzExODksNiBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworIAorIC8qIERlZmF1bHQgcHJlZml4ZXMgdG8gYXR0YWNoIHRvIGNvbW1hbmQgbmFtZXMuICAqLworIAorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEgIi9saWIvIgorLSNlbmRpZgorLSNpZm5kZWYgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yCistI2RlZmluZSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgIi91c3IvbGliLyIKKy0jZW5kaWYKKy0KKyAjaWZkZWYgQ1JPU1NfRElSRUNUT1JZX1NUUlVDVFVSRSAgLyogRG9uJ3QgdXNlIHRoZXNlIHByZWZpeGVzIGZvciBhIGNyb3NzIGNvbXBpbGVyLiAgKi8KKyAjdW5kZWYgTURfRVhFQ19QUkVGSVgKKyAjdW5kZWYgTURfU1RBUlRGSUxFX1BSRUZJWApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxYmE1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS5pbmMKQEAgLTAsMCArMSwxMjcgQEAKK3JlcXVpcmUgZ2NjLWNvbW1vbi5pbmMKKworIyBUaGlyZCBkaWdpdCBpbiBQViBzaG91bGQgYmUgaW5jcmVtZW50ZWQgYWZ0ZXIgYSBtaW5vciByZWxlYXNlCisKK1BWID0gIjQuOS4zIgorCisjIEJJTlYgc2hvdWxkIGJlIGluY3JlbWVudGVkIHRvIGEgcmV2aXNpb24gYWZ0ZXIgYSBtaW5vciBnY2MgcmVsZWFzZQorCitCSU5WID0gIjQuOS4zIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9nY2MtNC45OiIKKworREVQRU5EUyA9KyAibXBmciBnbXAgbGlibXBjIHpsaWIiCitOQVRJVkVERVBTID0gIm1wZnItbmF0aXZlIGdtcC1uYXRpdmUgbGlibXBjLW5hdGl2ZSB6bGliLW5hdGl2ZSIKKworTElDRU5TRSA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgIGZpbGU6Ly9DT1BZSU5HMzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICBmaWxlOi8vQ09QWUlORy5SVU5USU1FO21kNT1mZTYwZDg3MDQ4NTY3ZDRmZThjOGEwZWQyNDQ4YmNjOCBcCisiCisKK1NSQ19VUkkgPSAiXAorICAgICR7R05VX01JUlJPUn0vZ2NjL2djYy0ke1BWfS9nY2MtJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaCBcCisgICAgZmlsZTovLzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxMS1pbmRleF9tYWNyby5wYXRjaCBcCisgICAgZmlsZTovLzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE0LXNoLXByMjQ4MzYucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE1LWFybS1Vc2UtVEFSR0VUX0VORElBTl9PUFRJT04tZm9yLWRldGVybWluaW5nLU1VTFRJTEkucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE2LWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDE4LWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoIFwKKyAgICBmaWxlOi8vMDAxOS02NC1iaXQtbXVsdGlsaWItaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgZmlsZTovLzAwMjQtUFItdGFyZ2V0LTMyMjE5LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaCBcCisgICAgZmlsZTovLzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDMxLURpc2FibGUtc2R0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMi1saWJ0b29sLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0My1jcHAucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDQ0LWdlbmd0eXBlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0Ny1yZXBvbWVtYnVnLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA0OS1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1MC1SZXZlcnQtVXNlLWRieF9yZWdfbnVtYmVyLWZvci1zcGFubmluZy1yZWdpc3RlcnMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUxLWVhYmlzcGUucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUyLUFkZC10YXJnZXQtaG9vay10by1vdmVycmlkZS1EV0FSRjItZnJhbWUtcmVnaXN0ZXItc2kucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU0LWdjYy1NYWtlZmlsZS5pbi1maXgtcGFyYWxsZWwtYnVpbGRpbmctZmFpbHVyZS5wYXRjaCBcCisgICAgZmlsZTovLzAwNTUtZHdhcmYtcmVnLXByb2Nlc3NpbmctaGVscGVyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1Ni1kZWZpbmUtZGVmYXVsdC1jZmEtcmVnaXN0ZXItbWFwcGluZy5wYXRjaCBcCisgICAgZmlsZTovLzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA1OS1nY2MtUFItcnRsLW9wdGltaXphdGlvbi02MzM0OC5wYXRjaCBcCisgICAgZmlsZTovLzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaCBcCisgICAgZmlsZTovLzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNmY4MzFiNGQyNTE4NzI3MzZlOGU5Y2MwOTc0NmYzMjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjMzMmIyYTVhMzIxYjU3NTA4YjkwMzEzNTRhODUwM2FmNmZkZmI4NjhiOGMxNzQ4ZDMzMDI4ZDEwMGE4YjY3ZSIKKworUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4ODAxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBiZjNkOTZhZTU4ZmExODBiOGI0NjhkMjVkYzJlMDIwOWRhY2EyNzUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8ICAgIDIgKy0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQ4MDk1MzUuLjFiNzZjOTAgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0MzksNyArNzQzOSw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDQ4ZWMxYWEuLjg5ZDFkM2YgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NzMsNyArMjg3Myw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEzYjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSBkMDMwOTczYzg3MmMwMGQ5MTY5MjFkODRkZWVlMGFmMmMwZDM4MDgxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCAgICA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5OGU5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIGQyZDlkZDc1NmM0MzU2ZDE0ZGQ3YWUwMDM4NTYzNDRjYjRmMzc5ODUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgICAgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCAgICA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCAgICA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDBkMzA5YTUuLmYyZjFlMWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGI1ZmQ5ODkuLjNkYTlhNWQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggMmQ4ZTk3OC4uMTRlYjA4ZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmNWYzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIGE1NWM3NTFhNDQ5YzJjYmYwYjNmY2MwN2FhYjFiODZiZjk2NjE1MTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM3ICsrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oICAgICAgfCAgIDYzICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgMTE3ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjICAgICAgICB8ICAzMDggKysrKysrKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyAgICAgICAgfCAgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDMwMCArKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyAgICAgICB8ICAxMDAgKysrCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICA2OTIgKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8ICAxNjAgKysrKysKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICA0MDYgKysrKysrKysrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc1ICsrKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oICAgICAgIHwgICAgMiArCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyICAgICAgICAgICAgICAgICAgfCAgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggMDg3MWE2YS4uMzI2ZDdlZiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTA1LDYgKzE5MDUsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIwNjksNiArMjA3Miw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNDBkZGNmLi5jNTdhNzUxIDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1ODIyLDYgKzE1ODIyLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MDc5LDYgKzE2MDgyLDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCA1ODBkNzI1Li4zZmU2MWI4IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggMGU2YjFmYy4uNDA1YWVlMiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2JiZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSA2YTNlODUwNmExMmMxMjcyOGQ4YjI5OTAxZGVmZDczOGJlNDM3NTdmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICA0NSArKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgICAxNCAtLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8ICAgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgICAgNyAtLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyB8ICAgIDcgLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgICAgICAgfCAgICA3ICstLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgICAxOCArKystLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjICAgICAgIHwgICAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgICAgMyAtLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgICAgMyAtLQorIDEwIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDU0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCAyYWUzZTRhLi5lNzRmZGRmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC02MCw0ICs2MCw0OSBAQCBleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisgZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKyAjZW5kaWYKKyAKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2wgbmxfbGFuZ2luZm9fbAorKyMgZGVmaW5lIF9fc3RyY29sbF9sIHN0cmNvbGxfbAorKyMgZGVmaW5lIF9fc3RyZnRpbWVfbCBzdHJmdGltZV9sCisrIyBkZWZpbmUgX19zdHJ0b2RfbCBzdHJ0b2RfbAorKyMgZGVmaW5lIF9fc3RydG9mX2wgc3RydG9mX2wKKysjIGRlZmluZSBfX3N0cnRvbGRfbCBzdHJ0b2xkX2wKKysjIGRlZmluZSBfX3N0cnhmcm1fbCBzdHJ4ZnJtX2wKKysjIGRlZmluZSBfX25ld2xvY2FsZSBuZXdsb2NhbGUKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUgZnJlZWxvY2FsZQorKyMgZGVmaW5lIF9fZHVwbG9jYWxlIGR1cGxvY2FsZQorKyMgZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorKworKyMgaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKysjICBkZWZpbmUgX19pc3djdHlwZV9sIGlzd2N0eXBlX2wKKysjICBkZWZpbmUgX190b3dsb3dlcl9sIHRvd2xvd2VyX2wKKysjICBkZWZpbmUgX190b3d1cHBlcl9sIHRvd3VwcGVyX2wKKysjICBkZWZpbmUgX193Y3Njb2xsX2wgd2NzY29sbF9sCisrIyAgZGVmaW5lIF9fd2NzZnRpbWVfbCB3Y3NmdGltZV9sCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sIHdjc3hmcm1fbAorKyMgIGRlZmluZSBfX3djdHlwZV9sIHdjdHlwZV9sCisrIyBlbmRpZgorKworKyNlbHNlCisrIyBkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjIGRlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorKyMgZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrIyBkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCisrIyB3YXJuaW5nIHNob3VsZCBkdW1teSBfX25ld2xvY2FsZSBjaGVjayBmb3IgQ3xQT1NJWCA/CisrIyBkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjIGRlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCisrIyBkZWZpbmUgX19kdXBsb2NhbGUoYSkgICAgICAgICAgICAgIF9fY19sb2NhbGUoKQorKy8vIyBkZWZpbmUgX191c2Vsb2NhbGUgPworKy8vCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrIyAgZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgICB0b3dsb3dlcigoQykpCisrIyAgZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgICB0b3d1cHBlcigoQykpCisrIyAgZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrLy8jICBkZWZpbmUgX193Y3NmdGltZV9sKFMsIE0sIEYsIFQsIEwpICB3Y3NmdGltZSgoUyksIChNKSwgKEYpLCAoVCkpCisrIyAgZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKysjICBkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgIHdjdHlwZSgoUykpCisrIyBlbmRpZgorKworICNlbmRpZiAvLyBHTElCQyAyLjMgYW5kIGxhdGVyCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCA1MDgxZGMxLi4yMTQzMGQwIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMCArMzksNiBAQAorICNpbmNsdWRlIDxsYW5naW5mby5oPgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19zdHJ0b2xfbChTLCBFLCBCLCBMKSAgICAgIHN0cnRvbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b3VsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvdWwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9sbF9sKFMsIEUsIEIsIEwpICAgICBzdHJ0b2xsKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxsX2woUywgRSwgQiwgTCkgICAgc3RydG91bGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG9mX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2YoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvZF9sKFMsIEUsIEwpICAgICAgICAgc3RydG9kKChTKSwgKEUpKQorLSNkZWZpbmUgX19zdHJ0b2xkX2woUywgRSwgTCkgICAgICAgIHN0cnRvbGQoKFMpLCAoRSkpCistI3dhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKy0jZGVmaW5lIF9fbmV3bG9jYWxlKGEsIGIsIGMpICAgICAgICBOVUxMCistI2RlZmluZSBfX2ZyZWVsb2NhbGUoYSkgICAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCistI2VuZGlmCistCisgbmFtZXNwYWNlIHN0ZAorIHsKKyAgIHRlbXBsYXRlPD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCBkYTA3YzFmLi40YmNhNWYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgeworICAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworIH0KKysjZGVmaW5lIF9fdXNlbG9jYWxlIHVzZWxvY2FsZQorICNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworaW5kZXggYzI2NjRhNy4uZWM1YzMyOSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK0BAIC0zNiwxMyArMzYsNiBAQAorICNpbmNsdWRlIDxsb2NhbGU+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cmNvbGxfbChTMSwgUzIsIEwpICAgICAgc3RyY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX19zdHJ4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHN0cnhmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKy0jZGVmaW5lIF9fd2NzeGZybV9sKFMxLCBTMiwgTiwgTCkgICB3Y3N4ZnJtKChTMSksIChTMiksIChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gVGhlc2UgYXJlIGJhc2ljYWxseSBleHRlbnNpb25zIHRvIGNoYXJfdHJhaXRzLCBhbmQgcGVyaGFwcyBzaG91bGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3Mjk0ZTNhLi43YjEyODYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzgsMTMgKzM4LDYgQEAKKyAjdW5kZWYgX0xJQkMKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fd2N0eXBlX2woUywgTCkgICAgICAgICAgIHdjdHlwZSgoUykpCistI2RlZmluZSBfX3Rvd3VwcGVyX2woQywgTCkgICAgICAgICB0b3d1cHBlcigoQykpCistI2RlZmluZSBfX3Rvd2xvd2VyX2woQywgTCkgICAgICAgICB0b3dsb3dlcigoQykpCistI2RlZmluZSBfX2lzd2N0eXBlX2woQywgTSwgTCkgICAgICBpc3djdHlwZSgoQyksIChNKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gTkI6IFRoZSBvdGhlciBjdHlwZTxjaGFyPiBzcGVjaWFsaXphdGlvbnMgYXJlIGluIHNyYy9sb2NhbGUuY2MgYW5kCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworaW5kZXggMTM1OTRkOS4uZDc2OTNiNCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworQEAgLTM5LDEzICszOSwxMCBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBnZXR0ZXh0IHN0dWZmCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX2RjZ2V0dGV4dChjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCSAgICAgY29uc3QgY2hhciAqbXNnaWQsIGludCBjYXRlZ29yeSk7CisgI3VuZGVmIGdldHRleHQKKy0jZGVmaW5lIGdldHRleHQobXNnaWQpIF9fZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjZGVmaW5lIGdldHRleHQobXNnaWQpIGRjZ2V0dGV4dChOVUxMLCBtc2dpZCwgTENfTUVTU0FHRVMpCisgI2Vsc2UKKy0jdW5kZWYgZ2V0dGV4dAorICNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgKG1zZ2lkKQorICNlbmRpZgorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCAxNDI0MDc4Li5kODlkYTMzIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTM2LDE1ICszNiwxMSBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLWV4dGVybiAiQyIgY2hhciAqX190ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLWV4dGVybiAiQyIgY2hhciAqX19iaW5kdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lLAorLQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUpOworLSNlbHNlCistI3VuZGVmIF9fdGV4dGRvbWFpbgorLSN1bmRlZiBfX2JpbmR0ZXh0ZG9tYWluCistI2RlZmluZSBfX3RleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorLSNkZWZpbmUgX19iaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCisrI3VuZGVmIHRleHRkb21haW4KKysjdW5kZWYgYmluZHRleHRkb21haW4KKysjZGVmaW5lIHRleHRkb21haW4oRCkgICAgICAgICAgICgodm9pZCkwKQorKyNkZWZpbmUgYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisgI2VuZGlmCisgCisgICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorQEAgLTcwLDcgKzY2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisgCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisgICAgIHsKKy0gICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKyAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKKyAgICAgfQorIAorQEAgLTkwLDcgKzg2LDcgQEAgZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisgICAgIHsKKyAgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKyAgICAgICAvLyBiZSB1c2VkLgorLSAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCBhYTUyNzMxLi4yZTZmODBhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDMsMTAgKzQzLDYgQEAKKyAjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDg4M2VjMWEuLjJjNzA2NDIgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtNDEsOSArNDEsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK2luZGV4IGUwNzA3ZDcuLmQ4NDhlZDUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtNDAsOSArNDAsNiBAQAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorIAorIG5hbWVzcGFjZSBzdGQKKyB7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQwNjg1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA2LXVjbGliYy1sb2NhbGUtd2NoYXJfZml4LnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK0Zyb20gMjI1NTExYTNhZWIxOTNhOTE2YjM5OTlmMGI2NDBhMzkyY2FhNjdjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ1OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDYvMzVdIHVjbGliYy1sb2NhbGUtd2NoYXJfZml4CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgfCAgICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8ICAgMTMgKysrKysrKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IDJlNmY4MGEuLjMxZWJiOWYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MDEsNyArNDAxLDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorQEAgLTU1Niw3ICs1NTYsNyBAQCBuYW1lc3BhY2Ugc3RkCisgIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworLSMgZWxzZQorKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKyAjIGVuZGlmCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK2luZGV4IDJjNzA2NDIuLmQ1Yzg5NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMTI3LDEyICsxMjcsMjUgQEAgbmFtZXNwYWNlIHN0ZAorIAl7CisgCSAgLy8gTmFtZWQgbG9jYWxlLgorIAkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBudW1lcmljCisrI2VuZGlmCisrI2lmZGVmIF9fVUNMSUJDX18KKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworKyMgZW5kaWYKKysjZWxzZQorIAkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisgCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworIAorIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKyAKKyAJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKyAJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDctdWNsaWJjLWxvY2FsZS11cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1MTEyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTQyIEBACitGcm9tIDZmZmU3YzQ2ZjUyZDI3ODY0YzNkZjM2NjNlMTZlYzlkZGVlNzFlOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0Njo1OCArMDQwMAorU3ViamVjdDogW1BBVENIIDA3LzM1XSB1Y2xpYmMtbG9jYWxlLXVwZGF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgICAgMyArCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjICAgICAgfCAgIDc0ICsrKysrKysrKy0tLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAgIDQyICsrKysrKy0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgfCAgIDUxICsrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAgIDEyICsrLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8ICAgMzQgKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgICA1ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyAgfCAgIDE4ICsrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAgIDE3ICsrKy0tCisgOSBmaWxlcyBjaGFuZ2VkLCAxNTggaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IGU3NGZkZGYuLjk3MWE2YjQgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTMxLDYgKzMxLDkgQEAKKyAKKyAjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyAjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4KKysjaW5jbHVkZSA8Y3N0cmluZz4KKysjaW5jbHVkZSA8Y3N0ZGRlZj4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBjbGVhbiB0aGlzIHVwCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitpbmRleCAyMTQzMGQwLi4xYjlkOGUxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK0BAIC0zOSwyMyArMzksMjAgQEAKKyAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICB0ZW1wbGF0ZTw+CisgICAgIHZvaWQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZjsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBmbG9hdCBfX2YgPSBfX3N0cnRvZl9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwlfX3YgPSBfX2Y7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdGVtcGxhdGU8PgorQEAgLTYzLDE2ICs2MCwxMyBAQCBuYW1lc3BhY2Ugc3RkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworLSAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKy0JICAgIF9fdiA9IF9fZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19kOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC04MCwxNiArNzQsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGxvbmcgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKyAJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKyAgICAgeworLSAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorLQl7CistCSAgY2hhciogX19zYW5pdHk7CistCSAgZXJybm8gPSAwOworLQkgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2xkOworLQkgIGVsc2UKKy0JICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworLQl9CisrICAgICAgY2hhciogX19zYW5pdHk7CisrICAgICAgZXJybm8gPSAwOworKyAgICAgIGxvbmcgZG91YmxlIF9fbGQgPSBfX3N0cnRvbGRfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19sZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB2b2lkCitAQCAtMTEwLDE3ICsxMDEsMTggQEAgbmFtZXNwYWNlIHN0ZAorICAgdm9pZAorICAgbG9jYWxlOjpmYWNldDo6X1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICB7CistICAgIGlmIChfU19nZXRfY19sb2NhbGUoKSAhPSBfX2Nsb2MpCisrICAgIGlmIChfX2Nsb2MgJiYgX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorICAgICAgIF9fZnJlZWxvY2FsZShfX2Nsb2MpOworICAgfQorIAorICAgX19jX2xvY2FsZQorICAgbG9jYWxlOjpmYWNldDo6X1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeyByZXR1cm4gX19kdXBsb2NhbGUoX19jbG9jKTsgfQorLX0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLW5hbWVzcGFjZSBfX2dudV9jeHgKKy17CisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorKworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShfX2dudV9jeHgpCisrCisgICBjb25zdCBjaGFyKiBjb25zdCBjYXRlZ29yeV9uYW1lc1s2ICsgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVNdID0KKyAgICAgeworICAgICAgICJMQ19DVFlQRSIsCitAQCAtMTM4LDkgKzEzMCwxMSBAQCBuYW1lc3BhY2UgX19nbnVfY3h4CisgICAgICAgIkxDX0lERU5USUZJQ0FUSU9OIgorICNlbmRpZgorICAgICB9OworLX0KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CistfSAgLy8gbmFtZXNwYWNlIHN0ZAorKworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitpbmRleCA0YmNhNWYxLi42NGE2ZDQ2IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCitAQCAtMzksMjEgKzM5LDIzIEBACisgI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorIAorICNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCistI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y3N0ZGlvPiAgICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnZzbnByaW50ZiBvciBzdGQ6OnZzcHJpbnRmCisgI2luY2x1ZGUgPGNsb2NhbGU+CisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CQkvLyBGb3IgY29kZWN2dAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCB0aGlzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyNpZmRlZiBfR0xJQkNYWF9VU0VfSUNPTlYKKyAjaW5jbHVkZSA8aWNvbnYuaD4JCS8vIEZvciBjb2RlY3Z0IHVzaW5nIGljb252LCBpY29udl90CisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistI2luY2x1ZGUgPGxpYmludGwuaD4gCQkvLyBGb3IgbWVzc2FnZXMKKysjaWZkZWYgSEFWRV9MSUJJTlRMX0gKKysjaW5jbHVkZSA8bGliaW50bC5oPgkJLy8gRm9yIG1lc3NhZ2VzCisgI2VuZGlmCisrI2luY2x1ZGUgPGNzdGRhcmc+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrLy8gcHNtOiB1c2VkIGluIG9zL2dudS1saW51eC9jdHlwZV9ub25pbmxpbmUuaAorICNlbmRpZgorICNkZWZpbmUgX0dMSUJDWFhfQ19MT0NBTEVfR05VIDEKKyAKK0BAIC03OCwyMyArODAsMjUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbHNlCisgICB0eXBlZGVmIGludCoJCQlfX2NfbG9jYWxlOworICNlbmRpZgorLQorLSAgLy8gQ29udmVydCBudW1lcmljIHZhbHVlIG9mIHR5cGUgX1R2IHRvIHN0cmluZyBhbmQgcmV0dXJuIGxlbmd0aCBvZgorLSAgLy8gc3RyaW5nLiAgSWYgc25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworLSAgLy8gdGhlIHVuc2FmZSBzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKysgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIGRvdWJsZSB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKysgIC8vIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHZzcHJpbnRmIHdoaWNoLCBpbiBnZW5lcmFsLCBjYW4gYmUgZGFuZ2Vyb3VzIGFuZCBzaG91bGQKKyAgIC8vIGJlIGF2b2lkZWQuCistICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CistICAgIGludAorLSAgICBfX2NvbnZlcnRfZnJvbV92KGNoYXIqIF9fb3V0LAorLQkJICAgICBjb25zdCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCistCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LAorLSNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworLQkJICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX3ByZWMpCisrICAgIGlubGluZSBpbnQKKysgICAgX19jb252ZXJ0X2Zyb21fdihjb25zdCBfX2NfbG9jYWxlJgorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysJX19jbG9jIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKKysjZW5kaWYKKysJCSAgICAgLAorKwkJICAgICBjaGFyKiBfX291dCwKKysJCSAgICAgY29uc3QgaW50IF9fc2l6ZSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsIC4uLikKKyAgICAgeworKyAgICAgIHZhX2xpc3QgX19hcmdzOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWENMT0NBTEVfXworKworICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCistICAgIHsKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKyAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworQEAgLTEwMyw3ICsxMDcsOSBAQCBuYW1lc3BhY2Ugc3RkCisgIyBlbmRpZgorICNlbmRpZgorIAorLSAgICAgIGNvbnN0IGludCBfX3JldCA9IHN0ZDo6c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fcHJlYywgX192KTsKKysgICAgICB2YV9zdGFydChfX2FyZ3MsIF9fZm10KTsKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnZzbnByaW50ZihfX291dCwgX19zaXplLCBfX2ZtdCwgX19hcmdzKTsKKysgICAgICB2YV9lbmQoX19hcmdzKTsKKyAKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKyAgICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xkKTsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitpbmRleCA3YjEyODYxLi4xM2UwMTFkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMzMsMTYgKzMzLDIwIEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLW5hbWVzcGFjZSBzdGQKKy17CisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorICAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCistICB0ZW1wbGF0ZTw+CisgICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorICAgICB7CitAQCAtNTcsNiArNjEsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgCX0KKyAgICAgfQorKyAgICBjdHlwZV9ieW5hbWU8Y2hhcj46On5jdHlwZV9ieW5hbWUoKQorKyAgICB7IH0KKyAKKyAjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgIGN0eXBlPHdjaGFyX3Q+OjpfX3dtYXNrX3R5cGUKK0BAIC0xMzgsMTcgKzE0NCwzMyBAQCBuYW1lc3BhY2Ugc3RkCisgICBjdHlwZTx3Y2hhcl90Pjo6CisgICBkb19pcyhtYXNrIF9fbSwgd2NoYXJfdCBfX2MpIGNvbnN0CisgICB7CistICAgIC8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCistICAgIC8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKyAgICAvLyBUaGUgY2FzZSBvZiBfX20gPT0gY3R5cGVfYmFzZTo6c3BhY2UgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCwKKysgICAgLy8gZHVlIHRvIGl0cyB1c2UgaW4gbWFueSBpc3RyZWFtIGZ1bmN0aW9ucy4gIFRoZXJlZm9yZSB3ZSBkZWFsIHdpdGgKKysgICAgLy8gaXQgZmlyc3QsIGV4cGxvaXRpbmcgdGhlIGtub3dsZWRnZSB0aGF0IG9uIEdOVSBzeXN0ZW1zIF9NX2JpdFs1XQorKyAgICAvLyBpcyB0aGUgbWFzayBjb3JyZXNwb25kaW5nIHRvIGN0eXBlX2Jhc2U6OnNwYWNlLiAgTkI6IGFuIGVuY29kaW5nCisrICAgIC8vIGNoYW5nZSB3b3VsZCBub3QgYWZmZWN0IGNvcnJlY3RuZXNzIQorKworICAgICBib29sIF9fcmV0ID0gZmFsc2U7CistICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CistICAgIGZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKy0gICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQorLQkgICYmIF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorLQl7CistCSAgX19yZXQgPSB0cnVlOworLQkgIGJyZWFrOworLQl9CisrICAgIGlmIChfX20gPT0gX01fYml0WzVdKQorKyAgICAgIF9fcmV0ID0gX19pc3djdHlwZV9sKF9fYywgX01fd21hc2tbNV0sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCWZvciAoc2l6ZV90IF9fYml0Y3VyID0gMDsgX19iaXRjdXIgPD0gX19iaXRtYXNrc2l6ZTsgKytfX2JpdGN1cikKKysJICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXSkKKysJICAgIHsKKysJICAgICAgaWYgKF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkJeworKwkJICBfX3JldCA9IHRydWU7CisrCQkgIGJyZWFrOworKwkJfQorKwkgICAgICBlbHNlIGlmIChfX20gPT0gX01fYml0W19fYml0Y3VyXSkKKysJCWJyZWFrOworKwkgICAgfQorKyAgICAgIH0KKysKKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorIAorQEAgLTI5MCw0ICszMTIsNSBAQCBuYW1lc3BhY2Ugc3RkCisgI2VuZGlmCisgICB9CisgI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorLX0KKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IGQ4OWRhMzMuLjA2NzY1N2EgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtNTMsMTIgKzUzLDE2IEBACisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19zLAorIAkJCQlzaXplX3QgX19yZWZzKQorLSAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpKSwKKy0gICAgIF9NX25hbWVfbWVzc2FnZXMoX19zKQorKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhOVUxMKSwKKysgICAgIF9NX25hbWVfbWVzc2FnZXMoTlVMTCkKKyAgICAgIHsKKy0gICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdGQ6OnN0cmxlbihfX3MpICsgMTsKKysgICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKworKyAgICAgICAvLyBMYXN0IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5IGlmIG5ldyB0aHJvd3MuCisrICAgICAgIF9NX2NfbG9jYWxlX21lc3NhZ2VzID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKyAgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAzMWViYjlmLi43Njc5YjljIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtMzMsOSArMzMsMTQgQEAKKyAKKyAvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorIAorKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAjZGVmaW5lIF9MSUJDCisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjdW5kZWYgX0xJQkMKKysjZWxzZQorKyNpbmNsdWRlIDxsb2NhbGU+CisrI2VuZGlmCisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtMjA2LDcgKzIxMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAJICB9CisgCWJyZWFrOworICAgICAgIGRlZmF1bHQ6CistCTsKKysJX19yZXQgPSBwYXR0ZXJuKCk7CisgICAgICAgfQorICAgICByZXR1cm4gX19yZXQ7CisgICB9CitAQCAtMzkwLDcgKzM5NSw5IEBAIG5hbWVzcGFjZSBzdGQKKyAJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKyAjZWxzZQorIAkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorLQkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgIAkgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworIAkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCitAQCAtNDc3LDggKzQ4NCw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworIAkgICAgfQorQEAgLTQ5OCw4ICs1MDUsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistCSAgZnJlZShfX29sZCk7CisrCSAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAJfQorICAgICB9CitAQCAtNTQ1LDggKzU1MiwxMSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lKTsKKysgICAgICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisrICAgICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisgI2VuZGlmCisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCitAQCAtNjMzLDggKzY0Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisgI2Vsc2UKKy0JICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgICAgICBmcmVlKF9fb2xkKTsKKysJICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKwkgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC02NTMsOCArNjYzLDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCBkNWM4OTYxLi44YWU4OTY5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitpbmRleCBkODQ4ZWQ1Li5mMjRkNTNlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworQEAgLTUzLDExICs1MywxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX19zdHJmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RyZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorQEAgLTIwNywxMSArMjEwLDE0IEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3djc2Z0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisgCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICNlbHNlCistICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGxlbiA9IHN0cmxlbihfX29sZCkgKyAxOworKyAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKysgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworICAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKyAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSB3Y3NmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CistICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLSAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisgICAgICAgaWYgKF9fbGVuID09IDApCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitpbmRleCBiYThlODU4Li4xNjY1ZGRlIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmgKK0BAIC01MCwxMiArNTAsMjEgQEAKKyAgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJICAgICBzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKKy0gICAgX01fbmFtZV90aW1lcHVuY3QoX19zKQorKyAgICBfTV9uYW1lX3RpbWVwdW5jdChOVUxMKQorICAgICB7CistICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX3MpICsgMV07CistICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisrICAgICAgc3RkOjptZW1jcHkoX190bXAsIF9fcywgX19sZW4pOworICAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CistICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysKKysgICAgICB0cnkKKysJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisrICAgICAgY2F0Y2goLi4uKQorKwl7CisrCSAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKwkgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworKwl9CisrCisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjM4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOC1taXNzaW5nLWV4ZWNpbmZvX2gucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA5ZjIxNTg0NTE5ODFjZjBhODBjZmFiZGM3OWFlMzFiYjY5NzZhODAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDg6MTAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOC8zNV0gbWlzc2luZy1leGVjaW5mb19oCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgYm9laG0tZ2MvaW5jbHVkZS9nYy5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitpbmRleCBjNTFlMDE3Li5hN2JhOGRjIDEwMDY0NAorLS0tIGEvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCisrKysgYi9ib2VobS1nYy9pbmNsdWRlL2djLmgKK0BAIC01MDMsNyArNTAzLDcgQEAgR0NfQVBJIEdDX1BUUiBHQ19tYWxsb2NfYXRvbWljX2lnbm9yZV9vZmZfcGFnZSBHQ19QUk9UTygoc2l6ZV90IGxiKSk7CisgI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fR0xJQkNfXykKKyAjIGluY2x1ZGUgPGZlYXR1cmVzLmg+CisgIyBpZiAoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEgfHwgX19HTElCQ19fID4gMikgXAorLSAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pCisrICAgICAmJiAhZGVmaW5lZChfX2lhNjRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykKKyAjICAgaWZuZGVmIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgICBkZWZpbmUgR0NfSEFWRV9CVUlMVElOX0JBQ0tUUkFDRQorICMgICBlbmRpZgorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAwOS1jOTktc25wcmludGYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE2ODc3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDA5LWM5OS1zbnByaW50Zi5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIGUzOTNlMDc2ZjFhYjgyZDI1ZTFhYTA0ZDZlZGVhMjdiNDFkM2ViMDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0OTowMyArMDQwMAorU3ViamVjdDogW1BBVENIIDA5LzM1XSBjOTktc25wcmludGYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8gYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK2luZGV4IGU4NWJkODMuLjZhZjgzOWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2NzdGRpbworQEAgLTEzOSw3ICsxMzksNyBAQCBuYW1lc3BhY2Ugc3RkCisgICB1c2luZyA6OnZzcHJpbnRmOworIH0gLy8gbmFtZXNwYWNlIHN0ZAorIAorLSNpZiBfR0xJQkNYWF9VU0VfQzk5CisrI2lmIF9HTElCQ1hYX1VTRV9DOTkgfHwgZGVmaW5lZChfX1VDTElCQ19fKQorIAorICN1bmRlZiBzbnByaW50ZgorICN1bmRlZiB2ZnNjYW5mCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEwLWM5OS1jb21wbGV4LXVnbHktaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI4NTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTAtYzk5LWNvbXBsZXgtdWdseS1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNzNmNjlkODA2ZTJjOTU2MWE1NDk5NTIyMzQzMWExMDc2Y2ZkNjE2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ5OjU3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMzVdIGM5OS1jb21wbGV4LXVnbHktaGFjaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSB8ICAgIDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZSBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK2luZGV4IGM1N2E3NTEuLmExMzMzZTIgMTAwNzU1CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitAQCAtMTg3MzQsNiArMTg3MzQsOSBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgSVNPIEM5OSBzdXBwb3J0IHRvIFRSMSBpbiA8Y29tcGxleC5oPi4uLiAiID4mNjsgfQorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisgLyogZW5kIGNvbmZkZWZzLmguICAqLworICNpbmNsdWRlIDxjb21wbGV4Lmg+CisrI2lmZGVmIF9fVUNMSUJDX18KKysjZXJyb3IgdWdseSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgdGVzdCBmYWlscyBoZXJlIGZvciBjcm9zcyB1bnRpbCB1Q2xpYmMgc3VwcG9ydHMgdGhlIGNvbXBsZXggZnVuY3MKKysjZW5kaWYKKyBpbnQKKyBtYWluICgpCisgeworLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDExLWluZGV4X21hY3JvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTc5YjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxMS1pbmRleF9tYWNyby5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitGcm9tIGIwMzc5NTNlNDAzMTJiNDVhYjg0ZWQwYTNhZDg4MmJiNWU0MTMxMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1MTowMiArMDQwMAorU3ViamVjdDogW1BBVENIIDExLzM1XSBpbmRleF9tYWNybworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlICAgICAgIHwgICAgMyArKysKKyBsaWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaCB8ICAgIDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK2luZGV4IDM4ZWIxZTguLjE1OGQyMWEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZQorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGUKK0BAIC01NSw2ICs1NSw5IEBACisgI2luY2x1ZGUgPGJpdHMvZ3Roci5oPgorICNpbmNsdWRlIDx0cjEvZnVuY3Rpb25hbD4KKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgIyBpZmRlZiBfX0dDCisgIyAgIGRlZmluZSBfX0dDX0NPTlNUIGNvbnN0CisgIyBlbHNlCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvZXh0L3JvcGVpbXBsLmggYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAoraW5kZXggZDdiNWNiZC4uYjliM2FjYiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2V4dC9yb3BlaW1wbC5oCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9leHQvcm9wZWltcGwuaAorQEAgLTQ4LDYgKzQ4LDkgQEAKKyAjaW5jbHVkZSA8ZXh0L21lbW9yeT4gLy8gRm9yIHVuaW5pdGlhbGl6ZWRfY29weV9uCisgI2luY2x1ZGUgPGV4dC9udW1lcmljPiAvLyBGb3IgcG93ZXIKKyAKKysvKiBjb3BlIHcvIGluZGV4IGRlZmluZWQgYXMgbWFjcm8sIFN1U3YzIHByb3Bvc2FsICovCisrI3VuZGVmIGluZGV4CisrCisgbmFtZXNwYWNlIF9fZ251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTMtbGlic3RkYy1uYW1lc3BhY2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzZWZkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDEzLWxpYnN0ZGMtbmFtZXNwYWNlLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gMTA0ZTRkNjYyMDhmMjcyNmIxNGQyZjVlZWJjZTkwNzAwY2JjODNjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU0OjAyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIGxpYnN0ZGMrKy1uYW1lc3BhY2UKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIHwgICAgNCArKystCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgICB8ICAgIDQgKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDA2NzY1N2EuLmRkNzZhNmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzIsNyArMzIsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIGZpeCBwcm90b3R5cGVzIGZvciAqdGV4dGRvbWFpbiBmdW5jcworICNlbmRpZgorQEAgLTExNiwzICsxMTcsNCBAQAorIAkgICB0aGlzLT5fU19jcmVhdGVfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMsIF9fcyk7CisgCSB9CisgICAgICB9CisrfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggMTY2NWRkZS4uOTA1YzQzMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMzMsNyArMzMsOCBAQAorIC8vCisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy0KKytuYW1lc3BhY2Ugc3RkCisreworICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfX3RpbWVwdW5jdChzaXplX3QgX19yZWZzKQorICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEoTlVMTCksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdChOVUxMKSwKK0BAIC03NSwzICs3Niw0IEBACisgICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworICAgICB9CisrfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNC1zaC1wcjI0ODM2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhmZDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTQtc2gtcHIyNDgzNi5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIGVkYzlhY2IxODE4MTBmMjM0YjZiOWY3ZDI4MjBiMGU0ZjZhMWVlYWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1NDo0OCArMDQwMAorU3ViamVjdDogW1BBVENIIDE0LzM1XSBzaC1wcjI0ODM2CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitodHRwOi8vc291cmNlZm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD90aHJlYWRfaWQ9ODk1OTMwNCZmb3J1bV9pZD01MzQ4CitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTI0ODM2CistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgMiArLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZTEyYTE4MC4uMTM1YmJmNSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yMzM3OCw3ICsyMzM3OCw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlYmEzNTc3Li42MzYzYTIxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTMxNDEsNyArMzE0MSw3IEBAIGZvbzoJLmxvbmcJMjUKKyAJdGxzX2ZpcnN0X21pbm9yPTE0CisgCXRsc19hc19vcHQ9Ii1tNjQgLUFlc2FtZSAtLWZhdGFsLXdhcm5pbmdzIgorIAk7OworLSAgc2gtKi0qIHwgc2hbMzRdLSotKikKKysgIHNoLSotKiB8IHNoWzM0XSotKi0qKQorICAgICBjb25mdGVzdF9zPScKKyAJLnNlY3Rpb24gIi50ZGF0YSIsImF3VCIsQHByb2diaXRzCisgZm9vOgkubG9uZwkyNQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNS1hcm0tVXNlLVRBUkdFVF9FTkRJQU5fT1BUSU9OLWZvci1kZXRlcm1pbmluZy1NVUxUSUxJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M0NmZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTUtYXJtLVVzZS1UQVJHRVRfRU5ESUFOX09QVElPTi1mb3ItZGV0ZXJtaW5pbmctTVVMVElMSS5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDUwZTUzNjYwMDViMGY2YWYyNzM3OGUyYTVjM2NiOWY5OTM2YTdlNjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo1ODozNiArMDQwMAorU3ViamVjdDogW1BBVENIIDE1LzM1XSBhcm06IFVzZSBUQVJHRVRfRU5ESUFOX09QVElPTiBmb3IgZGV0ZXJtaW5pbmcKKyBNVUxUSUxJQl9ERUZBVUxUUworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9jb25maWcvYXJtL2NvZmYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYXJtL2NvZmYuaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9jb2ZmLmgKK0BAIC0zMiw4ICszMiwxMSBAQAorICNkZWZpbmUgVEFSR0VUX0RFRkFVTFQgKE1BU0tfQVBDU19GUkFNRSkKKyAKKyAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCisrI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNlbmRpZgorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIgfQorKyAgeyAibWFybSIsIFRBUkdFVF9FTkRJQU5fT1BUSU9OLCAibWZsb2F0LWFiaT1zb2Z0IiwgIm1uby10aHVtYi1pbnRlcndvcmsiIH0KKyAjZW5kaWYKKyAMCisgLyogVGhpcyBpcyBDT0ZGLCBidXQgcHJlZmVyIHN0YWJzLiAgKi8KK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hcm0vZWxmLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9nY2MvY29uZmlnL2FybS9lbGYuaAorKysrIGdjYy00LjkuMi9nY2MvY29uZmlnL2FybS9lbGYuaAorQEAgLTExNiw4ICsxMTYsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIE1VTFRJTElCX0RFRkFVTFRTCisrI2lmbmRlZiBUQVJHRVRfRU5ESUFOX09QVElPTgorKyNkZWZpbmUgVEFSR0VUX0VORElBTl9PUFRJT04gIm1saXR0bGUtZW5kaWFuIgorKyNlbmRpZgorICNkZWZpbmUgTVVMVElMSUJfREVGQVVMVFMgXAorLSAgeyAibWFybSIsICJtbGl0dGxlLWVuZGlhbiIsICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisrICB7ICJtYXJtIiwgVEFSR0VUX0VORElBTl9PUFRJT04sICJtZmxvYXQtYWJpPXNvZnQiLCAibW5vLXRodW1iLWludGVyd29yayIsICJmbm8tbGVhZGluZy11bmRlcnNjb3JlIiB9CisgI2VuZGlmCisgDAorICNkZWZpbmUgVEFSR0VUX0FTTV9GSUxFX1NUQVJUX0FQUF9PRkYgdHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNi1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzVlZjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTYtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2gKQEAgLTAsMCArMSwxOTAgQEAKK0Zyb20gMTYwMzk3ZWYzYzMzMzEwOTlhZjAyOGYxYjhkM2UwODViMDdkODhhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjU5OjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTYvMzVdIGdjYzogcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbjogY29kZXNvdXJjZXJ5XQorLS0tCisgZ2NjL01ha2VmaWxlLmluICAgICB8ICAgIDIgKy0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgICAgNCArKysrCisgZ2NjL2NvbmZpZy5pbiAgICAgICB8ICAgIDYgKysrKysrCisgZ2NjL2NvbmZpZ3VyZSAgICAgICB8ICAgMjAgKysrKysrKysrKysrKysrKysrLS0KKyBnY2MvY29uZmlndXJlLmFjICAgIHwgICAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICAgIDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICAgICB8ICAgIDIgKysKKyBnY2MvaW5jcGF0aC5jICAgICAgIHwgICAxOSArKysrKysrKysrKysrKysrKysrCisgOCBmaWxlcyBjaGFuZ2VkLCA2OSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29tbW9uLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29tbW9uLm9wdAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbW1vbi5vcHQKK0BAIC02MDMsNiArNjAzLDEwIEBAIFdwZWRhbnRpYworIENvbW1vbiBWYXIocGVkYW50aWMpIFdhcm5pbmcKKyBJc3N1ZSB3YXJuaW5ncyBuZWVkZWQgZm9yIHN0cmljdCBjb21wbGlhbmNlIHRvIHRoZSBzdGFuZGFyZAorIAorK1dwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrQ29tbW9uIFZhcihmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpIEluaXQoMSkgV2FybmluZworK1dhcm4gZm9yIC1JIGFuZCAtTCBvcHRpb25zIHVzaW5nIHN5c3RlbSBkaXJlY3RvcmllcyBpZiBjcm9zcyBjb21waWxpbmcKKysKKyBXc2hhZG93CisgQ29tbW9uIFZhcih3YXJuX3NoYWRvdykgV2FybmluZworIFdhcm4gd2hlbiBvbmUgbG9jYWwgdmFyaWFibGUgc2hhZG93cyBhbm90aGVyCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jb25maWcuaW4KKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcuaW4KK0BAIC0xMzgsNiArMTM4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZ3VyZQorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZQorQEAgLTkyOCw2ICs5MjgsNyBAQCB3aXRoX3N5c3RlbV96bGliCisgZW5hYmxlX21haW50YWluZXJfbW9kZQorIGVuYWJsZV9saW5rX211dGV4CisgZW5hYmxlX3ZlcnNpb25fc3BlY2lmaWNfcnVudGltZV9saWJzCisrZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMKKyBlbmFibGVfcGx1Z2luCisgZW5hYmxlX2hvc3Rfc2hhcmVkCisgZW5hYmxlX2xpYnF1YWRtYXRoX3N1cHBvcnQKK0BAIC0xNjQ4LDYgKzE2NDksOCBAQCBPcHRpb25hbCBGZWF0dXJlczoKKyAgIC0tZW5hYmxlLXZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1saWJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnkKKysgIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcworICAgLS1lbmFibGUtcGx1Z2luICAgICAgICAgZW5hYmxlIHBsdWdpbiBzdXBwb3J0CisgICAtLWVuYWJsZS1ob3N0LXNoYXJlZCAgICBidWlsZCBob3N0IGNvZGUgYXMgc2hhcmVkIGxpYnJhcmllcworICAgLS1kaXNhYmxlLWxpYnF1YWRtYXRoLXN1cHBvcnQKK0BAIC0yNzcwMiw2ICsyNzcwNSwxOSBAQCBpZiB0ZXN0ICIke2VuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpCisgZmkKKyAKKyAKKysjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyB3YXMgZ2l2ZW4uCisraWYgdGVzdCAiJHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcytzZXR9IiA9IHNldDsgdGhlbiA6CisrICBlbmFibGV2YWw9JGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzOworK2Vsc2UKKysgIGVuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vCisrZmkKKysKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrCisrJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMgMSIgPj5jb25mZGVmcy5oCisrCisrZmkKKysKKyAjIFN1YnN0aXR1dGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAKKyAKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUzNjYsNiArNTM2NiwxNiBAQCBBQ19BUkdfRU5BQkxFKHZlcnNpb24tc3BlY2lmaWMtcnVudGltZS1sCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2RvYy9pbnZva2UudGV4aQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZG9jL2ludm9rZS50ZXhpCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCitAQCAtMjYwLDYgKzI2MCw3IEBAIE9iamVjdGl2ZS1DIGFuZCBPYmplY3RpdmUtQysrIERpYWxlY3RzfS4KKyAtV292ZXJsZW5ndGgtc3RyaW5ncyAgLVdwYWNrZWQgIC1XcGFja2VkLWJpdGZpZWxkLWNvbXBhdCAgLVdwYWRkZWQgQGdvbAorIC1XcGFyZW50aGVzZXMgIC1XcGVkYW50aWMtbXMtZm9ybWF0IC1Xbm8tcGVkYW50aWMtbXMtZm9ybWF0IEBnb2wKKyAtV3BvaW50ZXItYXJpdGggIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCBAZ29sCisrLVduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIEBnb2wKKyAtV3JlZHVuZGFudC1kZWNscyAgLVduby1yZXR1cm4tbG9jYWwtYWRkciBAZ29sCisgLVdyZXR1cm4tdHlwZSAgLVdzZXF1ZW5jZS1wb2ludCAgLVdzaGFkb3cgQGdvbAorIC1Xc2lnbi1jb21wYXJlICAtV3NpZ24tY29udmVyc2lvbiAtV2Zsb2F0LWNvbnZlcnNpb24gQGdvbAorQEAgLTQyMzAsNiArNDIzMSwxNCBAQCBoZWFkZXJzLS0tZm9yIHRoYXQsIEBvcHRpb257LVd1bmtub3duLXByCisgIGZvciBtb3N0IHRhcmdldHMsIGl0IGlzIG1hZGUgdXAgb2YgY29kZSBhbmQgdGh1cyByZXF1aXJlcyB0aGUgc3RhY2sKKyAgdG8gYmUgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorSW5kZXg6IGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9nY2MuYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2djYy5jCitAQCAtNzY0LDYgKzc2NCw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGYKKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9XAorICAgICAlWCAle28qfSAle2UqfSAle059ICV7bn0gJXtyfVwKKyAgICAgJXtzfSAle3R9ICV7dSp9ICV7en0gJXtafSAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JVN9fSAiIFZUQUJMRV9WRVJJRklDQVRJT05fU1BFQyAiIFwKKysgICAgJXtXbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLW5vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorKyAgICAle1dlcnJvcj1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzOi0tZXJyb3ItcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc31cCisgICAgICV7c3RhdGljOn0gJXtMKn0gJShtZndyYXApICUobGlua19saWJnY2MpICIgU0FOSVRJWkVSX0VBUkxZX1NQRUMgIiAlb1wKKyAgICAgJXtmb3Blbm1wfGZ0cmVlLXBhcmFsbGVsaXplLWxvb3BzPSo6JTppbmNsdWRlKGxpYmdvbXAuc3BlYyklKGxpbmtfZ29tcCl9XAorICAgICAle2ZnbnUtdG06JTppbmNsdWRlKGxpYml0bS5zcGVjKSUobGlua19pdG0pfVwKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9pbmNwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2luY3BhdGguYworKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2luY3BhdGguYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjaW5jbHVkZSAiaW50bC5oIgorICNpbmNsdWRlICJpbmNwYXRoLmgiCisgI2luY2x1ZGUgImNwcGRlZmF1bHQuaCIKKysjaW5jbHVkZSAiZGlhZ25vc3RpYy1jb3JlLmgiCisgCisgLyogTWljcm9zb2Z0IFdpbmRvd3MgZG9lcyBub3QgbmF0aXZlbHkgc3VwcG9ydCBpbm9kZXMuCisgICAgVk1TIGhhcyBub24tbnVtZXJpYyBpbm9kZXMuICAqLworQEAgLTM4Miw2ICszODMsMjQgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3JvbworIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxNy1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU4MWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE3LWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIGU5OWM5Yzk3MjY2ZDZkM2U4Y2FjNzk4YWE5MTQwODI1MGM0ZDYwY2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowMDozNCArMDQwMAorU3ViamVjdDogW1BBVENIIDE3LzM1XSBnY2MtcG9pc29uLWRpci1leHRlbmQKKworQWRkIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYmFzZWQgb24gdGhlIG9yaWdpbmFsCit6ZWNrZS1uby1ob3N0LWluY2x1ZGVzLnBhdGNoIHBhdGNoLiAgVGhlIG9yaWdpbmFsIHBhdGNoIGNoZWNrZWQgZm9yCisvdXNyL2luY2x1ZGUsIC9zdy9pbmNsdWRlIGFuZCAvb3B0L2luY2x1ZGUgYW5kIHRoZW4gdHJpZ2dlcmVkIGEgZmFpbHVyZSBhbmQKK2Fib3J0ZWQuCisKK0luc3RlYWQsIHdlIGFkZCB0aGUgdHdvIG1pc3NpbmcgaXRlbXMgdG8gdGhlIGN1cnJlbnQgc2Nhbi4gIElmIHRoZSB1c2VyCit3YW50cyB0aGlzIHRvIGJlIGEgZmFpbHVyZSwgdGhleSBjYW4gYWRkICItV2Vycm9yPXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMiLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9pbmNwYXRoLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvaW5jcGF0aC5jIGIvZ2NjL2luY3BhdGguYworaW5kZXggY2Q0MWM3OC4uZWFjNGE5MiAxMDA2NDQKKy0tLSBhL2djYy9pbmNwYXRoLmMKKysrKyBiL2djYy9pbmNwYXRoLmMKK0BAIC0zOTMsNyArMzkzLDkgQEAgbWVyZ2VfaW5jbHVkZV9jaGFpbnMgKGNvbnN0IGNoYXIgKnN5c3Jvb3QsIGNwcF9yZWFkZXIgKnBmaWxlLCBpbnQgdmVyYm9zZSkKKyAgICAgICAgICB7CisgICAgICAgICAgIGlmICgoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2luY2x1ZGUiLCAxMikpCisgICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL2xvY2FsL2luY2x1ZGUiLCAxOCkpCistICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3N3L2luY2x1ZGUiLCAxMSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvb3B0L2luY2x1ZGUiLCAxMikpKQorICAgICAgICAgICAgIHdhcm5pbmcgKE9QVF9XcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZSBsb2NhdGlvbiBcIiVzXCIgaXMgdW5zYWZlIGZvciAiCisgICAgICAgICAgICAgICAgICAgICAgImNyb3NzLWNvbXBpbGF0aW9uIiwKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAxOC1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjhjYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTgtZ2NjLTQuMy4zLVNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSA1NjIwN2ZhMjkyM2U4ZWRmNzc0ZTk4ZmZhYzgyNjY2MDkxMDc2YmUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MDg6MzEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZ2NjLTQuMy4zOiBTWVNST09UX0NGTEFHU19GT1JfVEFSR0VUCisKK0JlZm9yZSBjb21taXR0aW5nLCBJIG5vdGljZWQgdGhhdCBQUi8zMjE2MSB3YXMgbWFya2VkIGFzIGEgZHVwIG9mIFBSLzMyMDA5LCBidXQgbXkgcHJldmlvdXMgcGF0Y2ggZGlkIG5vdCBmaXggaXQuCisKK1RoaXMgYWx0ZXJuYXRpdmUgcGF0Y2ggaXMgYmV0dGVyIGJlY2F1c2UgaXQgbGV0cyB5b3UganVzdCB1c2UgQ0ZMQUdTX0ZPUl9UQVJHRVQgdG8gc2V0IHRoZSBjb21waWxhdGlvbiBmbGFncyBmb3IgbGliZ2NjLiBTaW5jZSBib290c3RyYXBwZWQgdGFyZ2V0IGxpYnJhcmllcyBhcmUgbmV2ZXIgY29tcGlsZWQgd2l0aCB0aGUgbmF0aXZlIGNvbXBpbGVyLCBpdCBtYWtlcyBsaXR0bGUgc2Vuc2UgdG8gdXNlIGRpZmZlcmVudCBmbGFncyBmb3Igc3RhZ2UxIGFuZCBsYXRlciBzdGFnZXMuIEFuZCBpdCBhbHNvIG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgYSBkaWZmZXJlbnQgdmFyaWFibGUgdGhhbiBDRkxBR1NfRk9SX1RBUkdFVC4KKworT3RoZXIgY2hhbmdlcyBJIGhhZCB0byBkbyBpbmNsdWRlOgorCistIG1vdmluZyB0aGUgY3JlYXRpb24gb2YgZGVmYXVsdCBDRkxBR1NfRk9SX1RBUkdFVCBmcm9tIE1ha2VmaWxlLmFtIHRvIGNvbmZpZ3VyZS5hYywgYmVjYXVzZSBvdGhlcndpc2UgdGhlIEJPT1RfQ0ZMQUdTIGFyZSBzdWJzdGl0dXRlZCBpbnRvIENGTEFHU19GT1JfVEFSR0VUICh3aGljaCBpcyAiLU8yIC1nICQoQ0ZMQUdTKSIpIHZpYSAkKENGTEFHUykuIEl0IGlzIGFsc28gY2xlYW5lciB0aGlzIHdheSB0aG91Z2guCisKKy0gcGFzc2luZyB0aGUgcmlnaHQgQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIGFzIGV4cG9ydGVkIGVudmlyb25tZW50IHZhcmlhYmxlcworCitJIGFsc28gc3RvcHBlZCBwYXNzaW5nIExJQkNGTEFHUyB0byBjb25maWd1cmUgc2NyaXB0cyBzaW5jZSB0aGV5IGFyZSB1bnVzZWQgaW4gdGhlIHdob2xlIHNyYyB0cmVlLiBBbmQgSSB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGFzIEgtUCByZW1pbmRlZCBtZSB0byBkby4KKworQm9vdHN0cmFwcGVkL3JlZ3Rlc3RlZCBpNjg2LXBjLWxpbnV4LWdudSwgd2lsbCBjb21taXQgdG8gNC40IHNob3J0bHkuIE9rIGZvciA0LjM/CisKK1NpZ25lZC1vZmYtYnk6IFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZSB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAxYjc2YzkwLi5lNGRjZTdjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzcyLDYgKzY3NzIsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMTktNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU4YmUwYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDE5LTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsODIgQEAKK0Zyb20gMThmZGU1NzQwYjA5MzI0ZGZiOWNmNDFlOTg0OTY3MjU3M2ZmNWZhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgICA2ICsrLS0tLQorIGdjYy9jb25maWcvbWlwcy90LWxpbnV4NjQgICB8ICAgMTAgKysrLS0tLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCB8ICAgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAorQEAgLTMyLDcgKzMyLDUgQEAKKyAjCisgY29tbWE9LAorIE1VTFRJTElCX09QVElPTlMgICAgPSAkKHN1YnN0ICQoY29tbWEpLC8sJChUTV9NVUxUSUxJQl9DT05GSUcpKQorLU1VTFRJTElCX0RJUk5BTUVTICAgPSAkKHBhdHN1YnN0IG0lLCAlLCAkKHN1YnN0IC8sICwkKE1VTFRJTElCX09QVElPTlMpKSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6eDg2XzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbTMyPSQoaWYgJCh3aWxkY2FyZCAkKHNoZWxsIGVjaG8gJChTWVNURU1fSEVBREVSX0RJUikpLy4uLy4uL3Vzci9saWIzMiksLi4vbGliMzIsLi4vbGliKSQoY2FsbCBpZl9tdWx0aWFyY2gsOmkzODYtbGludXgtZ251KQorLU1VTFRJTElCX09TRElSTkFNRVMrPSBteDMyPS4uL2xpYngzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnV4MzIpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorQEAgLTE3LDEwICsxNyw2IEBACisgIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgCisgTVVMVElMSUJfT1BUSU9OUyA9IG1hYmk9bjMyL21hYmk9MzIvbWFiaT02NAorLU1VTFRJTElCX0RJUk5BTUVTID0gbjMyIDMyIDY0CistTUlQU19FTCA9ICQoaWYgJChmaWx0ZXIgJWVsLCAkKGZpcnN0d29yZCAkKHN1YnN0IC0sICwkKHRhcmdldCkpKSksZWwpCistTUlQU19TT0ZUID0gJChpZiAkKHN0cmlwICQoZmlsdGVyIE1BU0tfU09GVF9GTE9BVF9BQkksICQodGFyZ2V0X2NwdV9kZWZhdWx0KSkgJChmaWx0ZXIgc29mdCwgJCh3aXRoX2Zsb2F0KSkpLHNvZnQpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IFwKKy0JLi4vbGliMzIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaW4zMiQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWIkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzJChNSVBTX0VMKS1saW51eC1nbnUkKE1JUFNfU09GVCkpIFwKKy0JLi4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDptaXBzNjQkKE1JUFNfRUwpLWxpbnV4LWdudWFiaTY0JChNSVBTX1NPRlQpKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuIC4KKytNVUxUSUxJQl9PU0RJUk5BTUVTID0gLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkgLi4vJChzaGVsbCBiYXNlbmFtZSAkKGJhc2VfbGliZGlyKSkKKysKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorQEAgLTI2LDEwICsyNiw5IEBACisgIyBNVUxUSUxJQl9PU0RJUk5BTUVTIGFjY29yZGluZyB0byB3aGF0IGlzIGZvdW5kIG9uIHRoZSB0YXJnZXQuCisgCisgTVVMVElMSUJfT1BUSU9OUyAgICA6PSBtNjQvbTMyCistTVVMVElMSUJfRElSTkFNRVMgICA6PSA2NCAzMgorK01VTFRJTElCX0RJUk5BTUVTICAgOj0gLiAuCisgTVVMVElMSUJfRVhUUkFfT1BUUyA6PSAKKy1NVUxUSUxJQl9PU0RJUk5BTUVTIDo9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOnBvd2VycGM2NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtMzI9JChpZiAkKHdpbGRjYXJkICQoc2hlbGwgZWNobyAkKFNZU1RFTV9IRUFERVJfRElSKSkvLi4vLi4vdXNyL2xpYjMyKSwuLi9saWIzMiwuLi9saWIpJChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYy1saW51eC1nbnUpCisrTVVMVElMSUJfT1NESVJOQU1FUyA6PSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorIAorIHJzNjAwMC1saW51eC5vOiAkKHNyY2RpcikvY29uZmlnL3JzNjAwMC9yczYwMDAtbGludXguYworIAkkKENPTVBJTEUpICQ8CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMC1vcHRpb25hbC1saWJzdGRjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjQ2NjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjAtb3B0aW9uYWwtbGlic3RkYy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIDMwN2M4ZmYzZWY2NjZiN2JkNWFjNzMzODYzZjJmYmIyN2E5ZDUyMWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxMjo1NiArMDQwMAorU3ViamVjdDogW1BBVENIIDIwLzM1XSBvcHRpb25hbCBsaWJzdGRjCisKK2djYy1ydW50aW1lIGJ1aWxkcyBsaWJzdGRjKysgc2VwYXJhdGVseSBmcm9tIGdjYy1jcm9zcy0qLiBJdHMgY29uZmlndXJlIHRlc3RzIHVzaW5nIGcrKword2lsbCBub3QgcnVuIGNvcnJlY3RseSBzaW5jZSBieSBkZWZhdWx0IHRoZSBsaW5rZXIgd2lsbCB0cnkgdG8gbGluayBhZ2FpbnN0IGxpYnN0ZGMrKword2hpY2ggc2hvdWxkbid0IGV4aXN0IHlldC4gV2UgbmVlZCBhbiBvcHRpb24gdG8gZGlzYWJsZSAtbHN0ZGMrKworb3B0aW9uIHdoaWxzdCBsZWF2aW5nIC1sYywgLWxnY2MgYW5kIG90aGVyIGF1dG9tYXRpYyBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhZGRlZCBieSBnY2MKK2RyaXZlci4gVGhpcyBwYXRjaCBhZGRzIHN1Y2ggYW4gb3B0aW9uIHdoaWNoIG9ubHkgZGlzYWJsZXMgdGhlIC1sc3RkYysrLgorCitBICJzdGFuZGFyZCIgZ2NjIGJ1aWxkIHVzZXMgeGdjYyBhbmQgaGVuY2UgYXZvaWRzIHRoaXMuIFdlIHNob3VsZCBhc2sgdXBzdHJlYW0gaG93IHRvCitkbyB0aGlzIG9mZmljaWFsbHksIHRoZSBsaWtlbHkgYW5zd2VyIGlzIGRvbid0IGJ1aWxkIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5LgorCitSUCAyOS82LzEwCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBnY2MvYy1mYW1pbHkvYy5vcHQgIHwgICAgNCArKysrCisgZ2NjL2NwL2crK3NwZWMuYyAgICB8ICAgIDEgKworIGdjYy9kb2MvaW52b2tlLnRleGkgfCAgICA5ICsrKysrKystLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAgICAxICsKKyA0IGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTEzMjMsNiArMTMyMywxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKworIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY3AvZysrc3BlYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9jcC9nKytzcGVjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9jcC9nKytzcGVjLmMKK0BAIC0xMzgsNiArMTM4LDcgQEAgbGFuZ19zcGVjaWZpY19kcml2ZXIgKHN0cnVjdCBjbF9kZWNvZGVkXworICAgICAgIHN3aXRjaCAoZGVjb2RlZF9vcHRpb25zW2ldLm9wdF9pbmRleCkKKyAJeworIAljYXNlIE9QVF9ub3N0ZGxpYjoKKysJY2FzZSBPUFRfbm9zdGRsaWJfXzoKKyAJY2FzZSBPUFRfbm9kZWZhdWx0bGliczoKKyAJICBsaWJyYXJ5ID0gLTE7CisgCSAgYnJlYWs7CitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvZG9jL2ludm9rZS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS0yMDE0MDMxNi5vcmlnL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0xOTMsNiArMTkzLDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdnRhYmxlLXZlcmlmeT1AdmFye3N0ZHxwcmVpbml0fG5vbmV9IEBnb2wKKyAtZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaSAgLVdjb252ZXJzaW9uLW51bGwgIC1XY3Rvci1kdG9yLXByaXZhY3kgQGdvbAorQEAgLTQ1Nyw3ICs0NTgsNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLW5vc3RhcnRmaWxlcyAgLW5vZGVmYXVsdGxpYnMgIC1ub3N0ZGxpYiAtcGllIC1yZHluYW1pYyBAZ29sCisgLXMgIC1zdGF0aWMgLXN0YXRpYy1saWJnY2MgLXN0YXRpYy1saWJzdGRjKysgQGdvbAorIC1zdGF0aWMtbGliYXNhbiAtc3RhdGljLWxpYnRzYW4gLXN0YXRpYy1saWJsc2FuIC1zdGF0aWMtbGlidWJzYW4gQGdvbAorLS1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyBAZ29sCisrLXNoYXJlZCAtc2hhcmVkLWxpYmdjYyAgLXN5bWJvbGljIC1ub3N0ZGxpYisrIEBnb2wKKyAtVCBAdmFye3NjcmlwdH0gIC1XbCxAdmFye29wdGlvbn0gIC1YbGlua2VyIEB2YXJ7b3B0aW9ufSBAZ29sCisgLXUgQHZhcntzeW1ib2x9fQorIAorQEAgLTEwMjg1LDYgKzEwMjg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW4KKyBsaWJjLiAgVGhlc2UgZW50cnkgcG9pbnRzIHNob3VsZCBiZSBzdXBwbGllZCB0aHJvdWdoIHNvbWUgb3RoZXIKKyBtZWNoYW5pc20gd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisgCisrQGl0ZW0gLW5vc3RkbGliKysKKytAb3BpbmRleCBub3N0ZGxpYisrCisrRG8gbm90IHVzZSB0aGUgc3RhbmRhcmQgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcmllcyB3aGVuIGxpbmtpbmcuCisrT25seSB0aGUgbGlicmFyaWVzIHlvdSBzcGVjaWZ5IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZXIuCisrCisgQGNpbmRleCBAb3B0aW9uey1sZ2NjfSwgdXNlIHdpdGggQG9wdGlvbnstbm9zdGRsaWJ9CisgQGNpbmRleCBAb3B0aW9uey1ub3N0ZGxpYn0gYW5kIHVucmVzb2x2ZWQgcmVmZXJlbmNlcworIEBjaW5kZXggdW5yZXNvbHZlZCByZWZlcmVuY2VzIGFuZCBAb3B0aW9uey1ub3N0ZGxpYn0KK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy9nY2MuYworQEAgLTc3Miw2ICs3NzIsNyBAQCBwcm9wZXIgcG9zaXRpb24gYW1vbmcgdGhlIG90aGVyIG91dHB1dCBmCisgICAgICUobWZsaWIpICIgU1RBQ0tfU1BMSVRfU1BFQyAiXAorICAgICAle2Zwcm9maWxlLWFyY3N8ZnByb2ZpbGUtZ2VuZXJhdGUqfGNvdmVyYWdlOi1sZ2Nvdn0gIiBTQU5JVElaRVJfU1BFQyAiIFwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9kZWZhdWx0bGliczolKGxpbmtfc3NwKSAlKGxpbmtfZ2NjX2Nfc2VxdWVuY2UpfX1cCisrICAgICV7IW5vc3RkbGliKys6fVwKKyAgICAgJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVFfX0gJXtUKn0gfX19fX19IgorICNlbmRpZgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjEtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2M2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMS1nY2MtZGlzYWJsZS1NQVNLX1JFTEFYX1BJQ19DQUxMUy1iaXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorRnJvbSAwMDQ2OTZlMDU0YWU5ZGM3MWQ1MTJjYzc1NWNjYzQwNzRmYzYyYjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTQ6MjAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMS8zNV0gZ2NjOiBkaXNhYmxlIE1BU0tfUkVMQVhfUElDX0NBTExTIGJpdAorCitUaGUgbmV3IGZlYXR1cmUgYWRkZWQgYWZ0ZXIgNC4zLjMKKyJodHRwOi8vd3d3LnB1YmJzLm5ldC8yMDA5MDkvZ2NjLzk0MDQ4LXBhdGNoLWFkZC1zdXBwb3J0LWZvci1ybWlwc2phbHIuaHRtbCIKK3dpbGwgY2F1c2UgY2MxcGx1cyBlYXQgdXAgYWxsIHRoZSBzeXN0ZW0gbWVtb3J5IHdoZW4gYnVpbGQgd2Via2l0LWd0ay4KK1RoZSBmdW5jdGlvbiBtaXBzX2dldF9waWNfY2FsbF9zeW1ib2wga2VlcHMgb24gcmVjdXJzaXZlbHkgY2FsbGluZyBpdHNlbGYuCitEaXNhYmxlIHRoaXMgZmVhdHVyZSB0byB3YWxrIGFzaWRlIHRoZSBidWcuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCistLS0KKyBnY2MvY29uZmlndXJlICAgIHwgICAgNyAtLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8ICAgIDcgLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggYjY1ZDIxZC4uYmRhYjQ1YSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNTgyOSwxMyArMjU4MjksNiBAQCAkYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgYW5kIGxpbmtlciBmb3IgZXhwbGljaXQgSkFMUiByZWxvY2F0aW9uLi4uICIgPiY2OworICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNQorICRhc19lY2hvICIkZ2NjX2N2X2FzX2xkX2phbHJfcmVsb2MiID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBlMjI2Yjg1Li41ZjVjOTA5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTQwOTksMTMgKzQwOTksNiBAQCB4OgorICAgICAgICAgcm0gLWYgY29uZnRlc3QuKgorICAgICAgIGZpCisgICAgIGZpCistICAgIGlmIHRlc3QgJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jID0geWVzOyB0aGVuCistICAgICAgaWYgdGVzdCB4JHRhcmdldF9jcHVfZGVmYXVsdCA9IHg7IHRoZW4KKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD1NQVNLX1JFTEFYX1BJQ19DQUxMUworLSAgICAgIGVsc2UKKy0gICAgICAgIHRhcmdldF9jcHVfZGVmYXVsdD0iKCR0YXJnZXRfY3B1X2RlZmF1bHQpfE1BU0tfUkVMQVhfUElDX0NBTExTIgorLSAgICAgIGZpCistICAgIGZpCisgICAgIEFDX01TR19SRVNVTFQoJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jKQorIAorICAgICBBQ19DQUNIRV9DSEVDSyhbbGlua2VyIGZvciAuZWhfZnJhbWUgcGVyc29uYWxpdHkgcmVsYXhhdGlvbl0sCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDIyLUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYzhhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gN2Y1YzlkY2M3MWM4YjgzYTBiNTU5NjI2NmNjNGJkZjA5MzZlOGUwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE2OjI4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjIvMzVdIENPTExFQ1RfR0NDX09QVElPTlMKKworVGhpcyBwYXRjaCBhZGRzIC0tc3lzcm9vdCBpbnRvIENPTExFQ1RfR0NDX09QVElPTlMgd2hpY2ggaXMgdXNlZCB0bworaW52b2tlIGNvbGxlY3QyLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9nY2MuYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA0Nzc3NTJmLi41MTA2MmFhIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC00MDk4LDYgKzQwOTgsMTUgQEAgc2V0X2NvbGxlY3RfZ2NjX29wdGlvbnMgKHZvaWQpCisgCQlzaXplb2YgKCJDT0xMRUNUX0dDQ19PUFRJT05TPSIpIC0gMSk7CisgCisgICBmaXJzdF90aW1lID0gVFJVRTsKKysjaWZkZWYgSEFWRV9MRF9TWVNST09UCisrICBpZiAodGFyZ2V0X3N5c3RlbV9yb290X2NoYW5nZWQgJiYgdGFyZ2V0X3N5c3RlbV9yb290KQorKyAgICB7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCAiJy0tc3lzcm9vdD0iLCBzaXplb2YoIictLXN5c3Jvb3Q9IiktMSk7CisrICAgICAgb2JzdGFja19ncm93ICgmY29sbGVjdF9vYnN0YWNrLCB0YXJnZXRfc3lzdGVtX3Jvb3Qsc3RybGVuKHRhcmdldF9zeXN0ZW1fcm9vdCkpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIiciLCAxKTsKKysgICAgICBmaXJzdF90aW1lID0gRkFMU0U7CisrICAgIH0KKysjZW5kaWYKKyAgIGZvciAoaSA9IDA7IChpbnQpIGkgPCBuX3N3aXRjaGVzOyBpKyspCisgICAgIHsKKyAgICAgICBjb25zdCBjaGFyICpjb25zdCAqYXJnczsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyMy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGRmZTllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjMtVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKQEAgLTAsMCArMSw5NiBAQAorRnJvbSBmN2Q0OWNhNDQ1ZTYwZmFhMWI1MjU2YzZiNGY5NmMxZWU1YzBlMzUzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MTc6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyMy8zNV0gVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZQorIGluICR7Qn0KKworVXNlIHRoZSBkZWZhdWx0cy5oIGluICR7Qn0gaW5zdGVhZCBvZiAke1N9LCBhbmQgdC1vZSBpbiAke0J9LCBzbyB0aGF0Cit0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGlsZSBjb21waWxpbmcgZ2NjLWNyb3Nzc2RrLWluaXRpYWwteDg2XzY0IG9uIHNvbWUgaG9zdCwgdGhlcmUgaXMKK29jY2FzaW9uYWxseSBmYWlsdXJlIHRoYXQgdGVzdCB0aGUgZXhpc3RhbmNlIG9mIGRlZmF1bHQuaCBkb2Vzbid0Cit3b3JrLCB0aGUgcmVhc29uIGlzIHRtX2luY2x1ZGVfbGlzdD0nKiogZGVmYXVsdHMuaCcgcmF0aGVyIHRoYW4KK3RtX2luY2x1ZGVfbGlzdD0nKiogLi9kZWZhdWx0cy5oJworCitTbyB3ZSBhZGQgdGhlIHRlc3QgY29uZGl0aW9uIGZvciB0aGlzIHNpdHVhdGlvbi4KK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdjYy9NYWtlZmlsZS5pbiAgfCAgICAyICstCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGdjYy9jb25maWd1cmUuYWMgfCAgICA0ICsrLS0KKyBnY2MvbWtjb25maWcuc2ggIHwgICAgNCArKy0tCisgNCBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IGQxYWIyMmYuLjE1ZmU0YjYgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTQ4Myw3ICs0ODMsNyBAQCBUQVJHRVRfU1lTVEVNX1JPT1QgPSBAVEFSR0VUX1NZU1RFTV9ST09UQAorIFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkUgPSBAVEFSR0VUX1NZU1RFTV9ST09UX0RFRklORUAKKyAKKyB4bWFrZV9maWxlPUB4bWFrZV9maWxlQAorLXRtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVACisrdG1ha2VfZmlsZT1AdG1ha2VfZmlsZUAgLi90LW9lCisgVE1fRU5ESUFOX0NPTkZJRz1AVE1fRU5ESUFOX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9DT05GSUc9QFRNX01VTFRJTElCX0NPTkZJR0AKKyBUTV9NVUxUSUxJQl9FWENFUFRJT05TX0NPTkZJRz1AVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUdACitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDUzOTliMmIuLjYwYTA0YmQgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMTE2MzEsOCArMTE2MzEsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCBmODdjM2I2Li40NjBlMGQ5IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3NDAsOCArMTc0MCw4IEBAIGZvciBmIGluICR0bV9maWxlOyBkbworICAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKyAgICAgICAgOzsKKyAgICAgZGVmYXVsdHMuaCApCistICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvJGYiCistICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuLyRmIgorICAgICAgICA7OworICAgICAqICkKKyAgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS9jb25maWcvJGYiCitkaWZmIC0tZ2l0IGEvZ2NjL21rY29uZmlnLnNoIGIvZ2NjL21rY29uZmlnLnNoCitpbmRleCBjNzE0NmVkLi5iMTUzZjQ1IDEwMDY0NAorLS0tIGEvZ2NjL21rY29uZmlnLnNoCisrKysgYi9nY2MvbWtjb25maWcuc2gKK0BAIC03Nyw3ICs3Nyw3IEBAIGlmIFsgLW4gIiRIRUFERVJTIiBdOyB0aGVuCisgICAgIGlmIFsgJCMgLWdlIDEgXTsgdGhlbgorIAllY2hvICcjaWZkZWYgSU5fR0NDJyA+PiAke291dHB1dH1UCisgCWZvciBmaWxlIGluICIkQCI7IGRvCistCSAgICBpZiB0ZXN0IHgiJGZpbGUiID0geCJkZWZhdWx0cy5oIjsgdGhlbgorKwkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiLi9kZWZhdWx0cy5oIiAtbyB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKyAJCXBvc3Rwb25lX2RlZmF1bHRzX2g9InllcyIKKyAJICAgIGVsc2UKKyAJCWVjaG8gIiMgaW5jbHVkZSBcIiRmaWxlXCIiID4+ICR7b3V0cHV0fVQKK0BAIC0xMDYsNyArMTA2LDcgQEAgZXNhYworIAorICMgSWYgd2UgcG9zdHBvbmVkIGluY2x1ZGluZyBkZWZhdWx0cy5oLCBhZGQgdGhlICNpbmNsdWRlIG5vdy4KKyBpZiB0ZXN0IHgiJHBvc3Rwb25lX2RlZmF1bHRzX2giID0geCJ5ZXMiOyB0aGVuCistICAgIGVjaG8gIiMgaW5jbHVkZSBcImRlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorKyAgICBlY2hvICIjIGluY2x1ZGUgXCIuL2RlZmF1bHRzLmhcIiIgPj4gJHtvdXRwdXR9VAorIGZpCisgCisgIyBBZGQgbXVsdGlwbGUgaW5jbHVzaW9uIHByb3RlY3Rpb24gZ3VhcmQsIHBhcnQgdHdvLgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNC1QUi10YXJnZXQtMzIyMTkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVhY2Y3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI0LVBSLXRhcmdldC0zMjIxOS5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGUwZDE1ZjRmOGJmMjhjMzUxYjkyMTVjYTM3ZjFjYWEyNGRmMGUxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxODo1NCArMDQwMAorU3ViamVjdDogW1BBVENIIDI0LzM1XSBQUiB0YXJnZXQvMzIyMTkKKworKiB2YXJhc20uYyAoZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEpOiBXZWFrIGRhdGEgaXMgbm90IGxvY2FsLgorCitTaWduZWQtb2ZmLWJ5OiBCZXJuaGFyZCBSZXV0bmVyLUZpc2NoZXIgPHJlcC5kb3Qubm9wQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGdjYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjEuYyB8ICAgMTQgKysrKysrKysrKysrKysKKyBnY2MvdmFyYXNtLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsrKystLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMS5jCisKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy92YXJhc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjktMjAxNDAzMTYub3JpZy9nY2MvdmFyYXNtLmMKKysrKyBnY2MtNC45LTIwMTQwMzE2L2djYy92YXJhc20uYworQEAgLTY3NzEsNiArNjc3MSwxMCBAQCBkZWZhdWx0X2JpbmRzX2xvY2FsX3BfMSAoY29uc3RfdHJlZSBleHAsCisgICAvKiBTdGF0aWMgdmFyaWFibGVzIGFyZSBhbHdheXMgbG9jYWwuICAqLworICAgZWxzZSBpZiAoISBUUkVFX1BVQkxJQyAoZXhwKSkKKyAgICAgbG9jYWxfcCA9IHRydWU7CisrICAvKiBoaWRkZW4gd2VhayBjYW4ndCBiZSBvdmVycmlkZGVuIGJ5IHNvbWV0aGluZyBub24tbG9jYWwsIGFsbAorKyAgICAgdGhhdCBpcyBwb3NzaWJsZSBpcyB0aGF0IGl0IGlzIG5vdCBkZWZpbmVkIGF0IGFsbC4gKi8KKysgIGVsc2UgaWYgKERFQ0xfV0VBSyAoZXhwKSkKKysgICAgbG9jYWxfcCA9IGZhbHNlOworICAgLyogQSB2YXJpYWJsZSBpcyBsb2NhbCBpZiB0aGUgdXNlciBoYXMgc2FpZCBleHBsaWNpdGx5IHRoYXQgaXQgd2lsbAorICAgICAgYmUuICAqLworICAgZWxzZSBpZiAoKERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQgKGV4cCkKK0BAIC02Nzg0LDExICs2Nzg4LDYgQEAgZGVmYXVsdF9iaW5kc19sb2NhbF9wXzEgKGNvbnN0X3RyZWUgZXhwLAorICAgICAgbG9jYWwuICAqLworICAgZWxzZSBpZiAoREVDTF9WSVNJQklMSVRZIChleHApICE9IFZJU0lCSUxJVFlfREVGQVVMVCkKKyAgICAgbG9jYWxfcCA9IHRydWU7CistICAvKiBEZWZhdWx0IHZpc2liaWxpdHkgd2VhayBkYXRhIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgc3Ryb25nIHN5bWJvbAorLSAgICAgaW4gYW5vdGhlciBtb2R1bGUgYW5kIHNvIGFyZSBub3QgbG9jYWwuICAqLworLSAgZWxzZSBpZiAoREVDTF9XRUFLIChleHApCistCSAgICYmICFyZXNvbHZlZF9sb2NhbGx5KQorLSAgICBsb2NhbF9wID0gZmFsc2U7CisgICAvKiBJZiBQSUMsIHRoZW4gYXNzdW1lIHRoYXQgYW55IGdsb2JhbCBuYW1lIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisgICAgICBzeW1ib2xzIHJlc29sdmVkIGZyb20gb3RoZXIgbW9kdWxlcy4gICovCisgICBlbHNlIGlmIChzaGxpYikKK0luZGV4OiBnY2MtNC45LTIwMTQwMzE2L2djYy90ZXN0c3VpdGUvZ2NjLmRnL3Zpc2liaWxpdHktMjIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGdjYy00LjktMjAxNDAzMTYvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdmlzaWJpbGl0eS0yMi5jCitAQCAtMCwwICsxLDEzIEBACisrLyogUFIgdGFyZ2V0LzMyMjE5ICovCisrLyogeyBkZy1kbyBydW4gfSAqLworKy8qIHsgZGctcmVxdWlyZS12aXNpYmlsaXR5ICIiIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1mUElDIiB7IHRhcmdldCBmcGljIH0gfSAqLworKworK2V4dGVybiB2b2lkIGYoKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrLHZpc2liaWxpdHkoImhpZGRlbiIpKSk7CisrZXh0ZXJuIGludCBwdXRzKCBjaGFyIGNvbnN0KiApOworK2ludCBtYWluKCkKKyt7CisrICBpZiAoZikKKysgICAgZigpOworKyAgcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNS1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTc5MTRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjUtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSBhZjhhNTZlYTRlMTdiMjkwOWVmZjJjNTc3MDRhYjQzZWYyNGYyOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAyNS8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAgICAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCA4Mzg1ZTk2Li5iOGY3YTkyIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjcwNCw3ICsxMjcwNCw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDdkOTdmZWQuLjNmOWY0ODQgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTIyNyw3ICsyMjcsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjYtbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlZmFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI2LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gMDhjMjM5ODQ0NWU2Y2FjMjgyNDg4ZjY0YWU2YmYyOWNiY2Q4ZGIyMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMTAgKysrKysrLS0tLQorIGxpYmdjYy9jb25maWd1cmUuYWMgfCAgIDEwICsrKystLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2NjL2NvbmZpZ3VyZSBiL2xpYmdjYy9jb25maWd1cmUKK2luZGV4IDE0MjVkZjYuLmQxOGUzY2IgMTAwNjQ0CistLS0gYS9saWJnY2MvY29uZmlndXJlCisrKysgYi9saWJnY2MvY29uZmlndXJlCitAQCAtNDIwOCwxNyArNDIwOCwxOSBAQCB2b2lkIGZvbyAoKQorIH0KKyAKKyBfQUNFT0YKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1pZiBhY19mbl9jX3RyeV9jb21waWxlOyB0aGVuIDoKKytpZiB7IGFjX3RyeT0nJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiY1JworKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICBpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9eWVzCisgICBlbGlmIGdyZXAgX1Vud2luZF9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9bm8KKyAgIGZpCisgZmkKKy1DRkxBR1M9JENGTEFHU19ob2xkCisgcm0gLWYgY29uZnRlc3QqCisgCisgZmkKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlLmFjIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGI3YWJhNS4uYzdjOTY0NCAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdjYy9jb25maWd1cmUuYWMKK0BAIC0yMTYsMTYgKzIxNiwxNCBAQCB2b2lkIGZvbyAoKQorICAgYmFyKCk7CisgfQorIF0pXSkKKy1DRkxBR1NfaG9sZD0kQ0ZMQUdTCistQ0ZMQUdTPSItLXNhdmUtdGVtcHMgLWZleGNlcHRpb25zIgorIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXVua25vd24KKy1BU19JRihbYWNfZm5fY190cnlfY29tcGlsZV0sCistICBbaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisraWYgQUNfVFJZX0NPTU1BTkQoJHtDQy1jY30gLWZleGNlcHRpb25zIC1TIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QucyAxPiZBU19NRVNTQUdFX0xPR19GRCk7IHRoZW4KKysgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworLSAgZmldKQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKysgIGZpCisrZmkKKyBybSAtZiBjb25mdGVzdCoKKyBdKQorIAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI3LWNwcC1ob25vci1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZTk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyNy1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGEwZjliZDA5YzgxNmFkMjllY2Y3YzI5ZDZjMjdmN2RmOTc3MTAzNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMjowMCArMDQwMAorU3ViamVjdDogW1BBVENIIDI3LzM1XSBjcHA6IGhvbm9yIHN5c3Jvb3QuCisKK0N1cnJlbnRseSwgaWYgdGhlIGdjYyB0b29sY2hhaW4gaXMgcmVsb2NhdGVkIGFuZCBpbnN0YWxsZWQgZnJvbSBzc3RhdGUsIHRoZW4geW91IHRyeSBhbmQgY29tcGlsZQorcHJlcHJvY2Vzc2VkIHNvdXJjZSAoLmkgb3IgLmlpIGZpbGVzKSwgdGhlIGNvbXBpbGVyIHdpbGwgdHJ5IGFuZCBhY2Nlc3MgdGhlIGJ1aWx0aW4gc3lzcm9vdCBsb2NhdGlvbgorcmF0aGVyIHRoYW4gdGhlIC0tc3lzcm9vdCBvcHRpb24gc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZS4gSWYgYWNjZXNzIHRvIHRoYXQgZGlyZWN0b3J5IGlzCitwZXJtaXNzaW9uIGRlbmllZCAodW5yZWFkYWJsZSksIGdjYyB3aWxsIGVycm9yLgorCitUaGlzIGhhcHBlbnMgd2hlbiBjY2FjaGUgaXMgaW4gdXNlIGR1ZSB0byB0aGUgZmFjdCBpdCB1c2VzIHByZXByb2Nlc3NlZCBzb3VyY2UgZmlsZXMuCisKK1RoZSBmaXggYmVsb3cgYWRkcyAlSSB0byB0aGUgY3BwLW91dHB1dCBzcGVjIG1hY3JvIHNvIHRoZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMgZm9yIC1pcHJlZml4LAorLWlzeXN0ZW0sIC1pc3lzcm9vdCBoYXBwZW4gYW5kIHRoZSBjb3JyZWN0IHN5c3Jvb3QgaXMgdXNlZC4KKworW1lPQ1RPICMyMDc0XQorCitSUCAyMDEyLzA0LzEzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NwL2xhbmctc3BlY3MuaCB8ICAgIDIgKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgICAgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2xhbmctc3BlY3MuaCBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK2luZGV4IGEwMDFjM2UuLjFhYWUxZTQgMTAwNjQ0CistLS0gYS9nY2MvY3AvbGFuZy1zcGVjcy5oCisrKysgYi9nY2MvY3AvbGFuZy1zcGVjcy5oCitAQCAtNjMsNSArNjMsNSBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgeyIuaWkiLCAiQGMrKy1jcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjKystY3BwLW91dHB1dCIsCisgICAgIiV7IU06JXshTU06JXshRTpcCistICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJTJcCisrICAgIGNjMXBsdXMgLWZwcmVwcm9jZXNzZWQgJWkgJUkgJShjYzFfb3B0aW9ucykgJTJcCisgICAgICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA1MTA2MmFhLi5jZjZiOTllIDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMDQyLDcgKzEwNDIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBpbGVyIGRlZmF1bHRfY29tcGlsZXJzW10gPQorICAgICAgICAgICAgICAgICAgICAgJVd7byo6LS1vdXRwdXQtcGNoPSUqfX0lVn19fX19fSIsIDAsIDAsIDB9LAorICAgeyIuaSIsICJAY3BwLW91dHB1dCIsIDAsIDAsIDB9LAorICAgeyJAY3BwLW91dHB1dCIsCistICAgIiV7IU06JXshTU06JXshRTpjYzEgLWZwcmVwcm9jZXNzZWQgJWkgJShjYzFfb3B0aW9ucykgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKKysgICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorICAgeyIucyIsICJAYXNzZW1ibGVyIiwgMCwgMCwgMH0sCisgICB7IkBhc3NlbWJsZXIiLAorICAgICIleyFNOiV7IU1NOiV7IUU6JXshUzphcyAlKGFzbV9kZWJ1ZykgJShhc21fb3B0aW9ucykgJWkgJUEgfX19fSIsIDAsIDAsIDB9LAorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOC1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjM4NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMjgtTUlQUzY0LURlZmF1bHQtdG8tTjY0LUFCSS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDMwMWUxOGQ0NzExZGI1OTI1ZTc2N2ZhZDA4ZGZmYTljZmUwYTJmMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyMzowOCArMDQwMAorU3ViamVjdDogW1BBVENIIDI4LzM1XSBNSVBTNjQ6IERlZmF1bHQgdG8gTjY0IEFCSQorCitNSVBTNjQgZGVmYXVsdHMgdG8gbjMyIEFCSSwgdGhpcyBwYXRjaCBtYWtlcyBpdAorc28gdGhhdCBpdCBkZWZhdWx0cyB0byBONjQgQUJJCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCAxYTBiZTUwLi45ODljMmZiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMTc5Nyw3ICsxNzk3LDcgQEAgbWlwcyotbXRpLWxpbnV4KikKKyBtaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKyAJdG1fZmlsZT0iZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGxpbnV4LmggZ2xpYmMtc3RkaW50LmggJHt0bV9maWxlfSBtaXBzL2dudS11c2VyLmggbWlwcy9nbnUtdXNlcjY0LmggbWlwcy9saW51eDY0LmggbWlwcy9saW51eC1jb21tb24uaCIKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSBtaXBzL3QtbGludXg2NCIKKy0JdG1fZGVmaW5lcz0iJHt0bV9kZWZpbmVzfSBNSVBTX0FCSV9ERUZBVUxUPUFCSV9OMzIiCisrCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19BQklfREVGQVVMVD1BQklfNjQiCisgCWNhc2UgJHt0YXJnZXR9IGluCisgCQltaXBzNjRlbC1zdC1saW51eC1nbnUpCisgCQkJdG1fZmlsZT0iJHt0bV9maWxlfSBtaXBzL3N0LmgiCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDI5LURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2OWQyOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAyOS1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjI4IEBACitGcm9tIDI5ZDEyMzQ0ZmI2ODJhMDUzZGU1M2ViMDhiOTU3MDRjZjNiNjdhZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICAgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCAgfCAgICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lbGYuaCAgIHwgICAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgICAyICstCisgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaCAgICB8ICAgIDYgKysrLS0tCisgZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmggICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oICAgIHwgICAgOCArKysrLS0tLQorIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCAgfCAgICA4ICsrKystLS0tCisgZ2NjL2NvbmZpZy9zaC9saW51eC5oICAgICAgICB8ICAgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgICAgMiArLQorIGdjYy9jb25maWcvc3BhcmMvbGludXg2NC5oICAgfCAgICA0ICsrLS0KKyAxMSBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjMsOCArMjMsOCBAQAorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtNTcsNyArNTcsNyBAQAorIAorICNkZWZpbmUgTElCR0NDX1NQRUMgIiV7bWZsb2F0LWFiaT1zb2Z0KjotbGZsb2F0fSAtbGdjYyIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjZGVmaW5lIExJTlVYX1RBUkdFVF9MSU5LX1NQRUMgICIle2gqfSBcCisgICAgJXtzdGF0aWM6LUJzdGF0aWN9IFwKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTIwLDQgKzIwLDQgQEAKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT04gImVsZl9pMzg2IgorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjcsNiArMjcsNiBAQAorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjAub3JpZy9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTE4LDggKzE4LDggQEAKKyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorSW5kZXg6IGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9taXBzL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL21pcHMvbGludXg2NC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA1MTA2NTM1ICswMDAwCitAQCAtMjMsMjAgKzIzLDIwIEBACisgI2RlZmluZSBHTlVfVVNFUl9MSU5LX0VNVUxBVElPTk4zMiAiZWxmMzIle0VCOmJ9JXtFTDpsfXRzbWlwbjMyIgorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliNjQvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWI2NC9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliMzIvbGQuc28uMX0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtbWlwc244LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkLnNvLjF9IgorIAorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAjdW5kZWYgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0IFwKKy0gICIle21uYW49MjAwODovbGliL2xkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliL2xkNjQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLW1pcHNuOC5zby4wOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LXVDbGliYy5zby4wfSIKKyAjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUk4zMiBcCistICAiJXttbmFuPTIwMDg6L2xpYjMyL2xkLXVDbGliYy1taXBzbjguc28uMDs6L2xpYjMyL2xkLXVDbGliYy5zby4wfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wfSIKKyAKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUk4zMiAiL3N5c3RlbS9iaW4vbGlua2VyMzIiCisgI2RlZmluZSBHTlVfVVNFUl9EWU5BTUlDX0xJTktFUk4zMiBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC0zNjcsMTQgKzM2NywxNCBAQAorICN1bmRlZglMSU5LX09TX0RFRkFVTFRfU1BFQworICNkZWZpbmUgTElOS19PU19ERUZBVUxUX1NQRUMgIiUobGlua19vc19saW51eCkiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLnNvLjEiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFNZU1RFTUxJQlNfRElSICJsZC5zby4xIgorICNpZmRlZiBMSU5VWDY0X0RFRkFVTFRfQUJJX0VMRnYyCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6L2xpYjY0L2xkNjQuc28uMTs6L2xpYjY0L2xkNjQuc28uMn0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjE6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjJ9IgorICNlbHNlCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6L2xpYjY0L2xkNjQuc28uMjs6L2xpYjY0L2xkNjQuc28uMX0iCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIle21hYmk9ZWxmdjI6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC5zby4yOzoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjF9IgorICNlbmRpZgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCAiL2xpYi9sZDY0LXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc2gvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc2gvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NoL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC00Myw3ICs0Myw3IEBACisgCisgI2RlZmluZSBUQVJHRVRfQVNNX0ZJTEVfRU5EIGZpbGVfZW5kX2luZGljYXRlX2V4ZWNfc3RhY2sKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVgKKyAjZGVmaW5lIFNVQlRBUkdFVF9MSU5LX0VNVUxfU1VGRklYICJfbGludXgiCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMC5vcmlnL2djYy9jb25maWcvc3BhcmMvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwOTEwNjUzNSArMDAwMAorKysrIGdjYy00LjkuMC9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC04Myw3ICs4Myw3IEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKyAKKyAjdW5kZWYgIExJTktfU1BFQworICNkZWZpbmUgTElOS19TUEVDICItbSBlbGYzMl9zcGFyYyAle3NoYXJlZDotc2hhcmVkfSBcCitJbmRleDogZ2NjLTQuOS4wL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDkxMDY1MzUgKzAwMDAKKysrKyBnY2MtNC45LjAvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgJMjAxNC0wNS0wNyAxNjo0Mzo1MC42MDUxMDY1MzUgKzAwMDAKK0BAIC05Miw4ICs5Miw4IEBACisgICAgV2hlbiB0aGUgLXNoYXJlZCBsaW5rIG9wdGlvbiBpcyB1c2VkIGEgZmluYWwgbGluayBpcyBub3QgYmVpbmcKKyAgICBkb25lLiAgKi8KKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWI2NC9sZC1saW51eC5zby4yIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgCisgI2lmZGVmIFNQQVJDX0JJX0FSQ0gKKyAKK0luZGV4OiBnY2MtNC45LjAvZ2NjL2NvbmZpZy9saW51eC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4wLm9yaWcvZ2NjL2NvbmZpZy9saW51eC5oCTIwMTQtMDUtMDcgMTY6NDM6NTAuNjA5MTA2NTM1ICswMDAwCisrKysgZ2NjLTQuOS4wL2djYy9jb25maWcvbGludXguaAkyMDE0LTA1LTA3IDE2OjQzOjUwLjYwNTEwNjUzNSArMDAwMAorQEAgLTczLDEwICs3MywxMCBAQAorICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSIG11c3QgYmUgZGVmaW5lZCBmb3IgZWFjaCB0YXJnZXQgdXNpbmcgdGhlbSwgb3IKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyIGFuZCBHTElCQ19EWU5BTUlDX0xJTktFUjY0IGZvciB0YXJnZXRzCisgICAgc3VwcG9ydGluZyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IGNvbXBpbGF0aW9uLiAgKi8KKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLXVDbGliYy5zby4wIgorLSNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgIi9saWIvbGQ2NC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYi9sZHgzMi11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUlgzMiBTWVNURU1MSUJTX0RJUiAibGR4MzItdUNsaWJjLnNvLjAiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIgIi9zeXN0ZW0vYmluL2xpbmtlciIKKyAjZGVmaW5lIEJJT05JQ19EWU5BTUlDX0xJTktFUjMyICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVI2NCAiL3N5c3RlbS9iaW4vbGlua2VyNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMC1nY2MtRml4LWFyZ3VtZW50LWxpc3QtdG9vLWxvbmctZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMwLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIGMxODE2YzE2MDE1NmY5OWMzNGU2YTBhMDMxMWJiMDIxOTMyNjgwNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNjozNyArMDQwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBnY2M6IEZpeCBhcmd1bWVudCBsaXN0IHRvbyBsb25nIGVycm9yLgorCitUaGVyZSB3b3VsZCBiZSBhbiAiQXJndW1lbnQgbGlzdCB0b28gbG9uZyIgZXJyb3Igd2hlbiB0aGUKK2J1aWxkIGRpcmVjdG9yeSBpcyBsb25nZXIgdGhhbiAyMDAsIHRoaXMgaXMgY2F1c2VkIGJ5OgorCitoZWFkZXJzPWBlY2hvICQoUExVR0lOX0hFQURFUlMpIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgLXVgCisKK1RoZSBQTFVHSU5fSEVBREVSUyBpcyB0b28gbG9uZyBiZWZvcmUgc29ydCwgc28gdGhlICJlY2hvIiBjYW4ndCBoYW5kbGUKK2l0LCB1c2UgdGhlICQoc29ydCBsaXN0KSBvZiBHTlUgbWFrZSB3aGljaCBjYW4gaGFuZGxlIHRoZSB0b28gbG9uZyBsaXN0Cit3b3VsZCBmaXggdGhlIHByb2JsZW0sIHRoZSBoZWFkZXIgd291bGQgYmUgc2hvcnQgZW5vdWdoIGFmdGVyIHNvcnRlZC4KK1RoZSAidHIgJyAnICdcMDEyJyIgd2FzIHVzZWQgZm9yIHRyYW5zbGF0aW5nIHRoZSBzcGFjZSB0byAiXG4iLCB0aGUKKyQoc29ydCBsaXN0KSBkb2Vzbid0IG5lZWQgdGhpcy4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9NYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggMjMyMDQ5Ny4uODU2MmE2MiAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNDYyNyw3ICs0NjI3LDcgQEAgaW5zdGFsbC1wbHVnaW46IGluc3RhbGxkaXJzIGxhbmcuaW5zdGFsbC1wbHVnaW4gcy1oZWFkZXItdmFycyBpbnN0YWxsLWdlbmd0eXBlCisgIyBXZSBrZWVwIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBmaWxlcyBpbiBjb25maWcgb3IgYy1mYW1pbHkgYW5kIC5kZWYKKyAjIGZpbGVzLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGZsYXR0ZW5lZCB0byBhIHNpbmdsZSBkaXJlY3RvcnkuCisgCSQobWtpbnN0YWxsZGlycykgJChERVNURElSKSQocGx1Z2luX2luY2x1ZGVkaXIpCistCWhlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWA7IFwKKysJaGVhZGVycz0iJChzb3J0ICQoUExVR0lOX0hFQURFUlMpKSI7IFwKKyAJc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYDsgXAorIAlmb3IgZmlsZSBpbiAkJGhlYWRlcnM7IGRvIFwKKyAJICBpZiBbIC1mICQkZmlsZSBdIDsgdGhlbiBcCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzEtRGlzYWJsZS1zZHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMxLURpc2FibGUtc2R0LnBhdGNoCkBAIC0wLDAgKzEsMTEzIEBACitGcm9tIGI4NTI2NWJjOTRlYzFiZWFmMWQzYjY5N2MwM2RiNjI5OTE1NTM0NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyODoxMCArMDQwMAorU3ViamVjdDogW1BBVENIIDMxLzM1XSBEaXNhYmxlIHNkdC4KKworV2UgZG9uJ3QgbGlzdCBkdHJhY2UgaW4gREVQRU5EUyBzbyB3ZSBzaG91bGRuJ3QgYmUgZGVwZW5kaW5nIG9uIHRoaXMgaGVhZGVyLgorSXQgbWF5IG9yIG1heSBub3QgZXhpc3QgZnJvbSBwcmVpdm91cyBidWlsZHMgdGhvdWdoLiBUbyBiZSBkZXRlcm1pbnN0aWMsIGRpc2FibGUKK3NkdC5oIHVzYWdlIGFsd2F5cy4gVGhpcyBhdm9pZHMgYnVpbGQgZmFpbHVyZXMgaWYgdGhlIGhlYWRlciBpcyByZW1vdmVkIGFmdGVyIGNvbmZpZ3VyZQorYnV0IGJlZm9yZSBsaWJnY2MgaXMgY29tcGlsZWQgZm9yIGV4YW1wbGUuCisKK1JQIDIwMTIvOC83CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Rpc2FibGUgc2R0IGZvciBsaWJzdGRjKystdjMuCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2hhY2tdCistLS0KKyBnY2MvY29uZmlndXJlICAgICAgICAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyAgICAgICAgICB8IDE4ICsrKysrKysrKy0tLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUgICAgfCAgNiArKystLS0KKyBsaWJzdGRjKystdjMvY29uZmlndXJlLmFjIHwgIDIgKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDNjNTUwYTYuLjAxYzc2MjYgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY4MTIsMTIgKzI2ODEyLDEyIEBAIGZpCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkiID4mNQorICRhc19lY2hvX24gImNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeS4uLiAiID4mNjsgfQorIGhhdmVfc3lzX3NkdF9oPW5vCistaWYgdGVzdCAtZiAkdGFyZ2V0X2hlYWRlcl9kaXIvc3lzL3NkdC5oOyB0aGVuCistICBoYXZlX3N5c19zZHRfaD15ZXMKKy0KKy0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKy0KKy1maQorKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMKKysjZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfc3lzX3NkdF9oIiA+JjUKKyAkYXNfZWNobyAiJGhhdmVfc3lzX3NkdF9oIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggMzYwMWFiNi4uMDZlNTAxZiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00Nzc5LDE1ICs0Nzc5LDE1IEBAIGlmIHRlc3QgeCRnY2NfY3ZfbGliY19wcm92aWRlc19zc3AgPSB4eWVzOyB0aGVuCisgZmkKKyAKKyAjIFRlc3QgZm9yIDxzeXMvc2R0Lmg+IG9uIHRoZSB0YXJnZXQuCistR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorLUFDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCistaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLSAgQUNfREVGSU5FKEhBVkVfU1lTX1NEVF9ILCAxLAorLSAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCistZmkKKy1BQ19NU0dfUkVTVUxUKCRoYXZlX3N5c19zZHRfaCkKKysjR0NDX1RBUkdFVF9URU1QTEFURShbSEFWRV9TWVNfU0RUX0hdKQorKyNBQ19NU0dfQ0hFQ0tJTkcoc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5KQorKyNoYXZlX3N5c19zZHRfaD1ubworKyNpZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKysjICBoYXZlX3N5c19zZHRfaD15ZXMKKysjICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCisrIyAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91ciB0YXJnZXQgQyBsaWJyYXJ5IHByb3ZpZGVzIHN5cy9zZHQuaF0pCisrI2ZpCisrI0FDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorIAorICMgQ2hlY2sgaWYgVEZtb2RlIGxvbmcgZG91YmxlIHNob3VsZCBiZSB1c2VkIGJ5IGRlZmF1bHQgb3Igbm90LgorICMgU29tZSBnbGliYyB0YXJnZXRzIHVzZWQgREZtb2RlIGxvbmcgZG91YmxlLCBidXQgd2l0aCBnbGliYyAyLjQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQoraW5kZXggNDk1M2M5Zi4uNTNhMTE0NSAxMDA3NTUKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUKK0BAIC0yMDU3OCwxMSArMjA1NzgsMTEgQEAgYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCisgYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorIAorLSAgaWYgdGVzdCAkZ2xpYmN4eF9jdl9zeXNfc2R0X2ggPSB5ZXM7IHRoZW4KKysjICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorIAorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorKyMkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NZU19TRFRfSCAxIiA+PmNvbmZkZWZzLmgKKyAKKy0gIGZpCisrIyAgZmkKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkZ2xpYmN4eF9jdl9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitpbmRleCA3M2Q0MzBhLi5mMjEzNWUyIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYworQEAgLTIxMSw3ICsyMTEsNyBAQCBHTElCQ1hYX0NIRUNLX1NDX05QUk9DRVNTT1JTX09OTE4KKyBHTElCQ1hYX0NIRUNLX1NDX05QUk9DX09OTE4KKyBHTElCQ1hYX0NIRUNLX1BUSFJFQURTX05VTV9QUk9DRVNTT1JTX05QCisgR0xJQkNYWF9DSEVDS19TWVNDVExfSFdfTkNQVQorLUdMSUJDWFhfQ0hFQ0tfU0RUX0gKKysjR0xJQkNYWF9DSEVDS19TRFRfSAorIAorICMgQ2hlY2sgZm9yIGF2YWlsYWJsZSBoZWFkZXJzLgorIEFDX0NIRUNLX0hFQURFUlMoW2VuZGlhbi5oIGV4ZWNpbmZvLmggZmxvYXQuaCBmcC5oIGllZWVmcC5oIGludHR5cGVzLmggXAorLS0gCisxLjguMy4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMyLWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiM2QxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMi1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gNmM3MTVmY2ZhMjYyYWRhZGNhODFjNjhhMWYzZjY5YWEzMTg3YTUwMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMzIvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgICAgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi40NmY0N2MyIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDMzLWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzMy1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzZjMzdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzMtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaApAQCAtMCwwICsxLDQwIEBACitGcm9tIDk3ZTQ1OTFjMjAzMTA0MjVlN2FjYTBlNjcxMmE4ZDk0ODBlNzc0NGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTozMDozMiArMDQwMAorU3ViamVjdDogW1BBVENIIDMzLzM1XSBnY2M6IGFybXY0OiBwYXNzIGZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkuCisKK1RoZSBMSU5LX1NQRUMgZm9yIGxpbnV4IGdldHMgb3ZlcndyaXR0ZW4gYnkgbGludXgtZWFiaS5oIHdoaWNoCittZWFucyB0aGUgdmFsdWUgb2YgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgZ2V0cyBsb3N0IGFuZCBhcyBhIHJlc3VsdAordGhlIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRvIGxpbmtlciB3aGVuIGNob3NpbmcgbWFyY2g9YXJtdjQKK1RoaXMgcGF0Y2ggcmVkZWZpbmVzIHRoaXMgaW4gbGludXgtZWFiaS5oIGFuZCByZWluc2VydHMgaXQKK2ZvciBlYWJpIGRlZmF1bHRpbmcgdG9vbGNoYWlucy4KKworV2UgbWlnaHQgd2FudCB0byBzZW5kIGl0IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaCB8ICAgIDYgKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LTIwMTQwMzE2Lm9yaWcvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgZ2NjLTQuOS0yMDE0MDMxNi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC03NywxMCArNzcsMTQgQEAKKyAgICAgJXttZmxvYXQtYWJpPXNvZnQqOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVCAifSBcCisgICAgICV7IW1mbG9hdC1hYmk9KjoiIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgIn0iCisgCisrLyogRm9yIGFybXY0IHdlIHBhc3MgLS1maXgtdjRieCB0byBsaW5rZXIgdG8gc3VwcG9ydCBFQUJJICovCisrI3VuZGVmIFRBUkdFVF9GSVhfVjRCWF9TUEVDCisrI2RlZmluZSBUQVJHRVRfRklYX1Y0QlhfU1BFQyAiJXttY3B1PWFybTh8bWNwdT1hcm04MTB8bWNwdT1zdHJvbmdhcm0qfG1hcmNoPWFybXY0OiAtLWZpeC12NGJ4fSIKKysKKyAvKiBBdCB0aGlzIHBvaW50LCBicGFiaS5oIHdpbGwgaGF2ZSBjbG9iYmVyZWQgTElOS19TUEVDLiAgV2Ugd2FudCB0bworICAgIHVzZSB0aGUgR05VL0xpbnV4IHZlcnNpb24sIG5vdCB0aGUgZ2VuZXJpYyBCUEFCSSB2ZXJzaW9uLiAgKi8KKyAjdW5kZWYgIExJTktfU1BFQworLSNkZWZpbmUgTElOS19TUEVDIEVBQklfTElOS19TUEVDCQkJCQlcCisrI2RlZmluZSBMSU5LX1NQRUMgVEFSR0VUX0ZJWF9WNEJYX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQlcCisgICBMSU5VWF9PUl9BTkRST0lEX0xEIChMSU5VWF9UQVJHRVRfTElOS19TUEVDLAkJCQlcCisgCQkgICAgICAgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAiICIgQU5EUk9JRF9MSU5LX1NQRUMpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDAzNC1Vc2UtdGhlLW11bHRpbGliLWNvbmZpZy1maWxlcy1mcm9tLUItaW5zdGVhZC1vZi11c2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwMzQtVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorRnJvbSBmYzVlNGJlYWVhODU2YTJiNDg2Yzc3MGFkM2FkZGMwZjViYjMxMDBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MzM6MDQgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAzNC8zNV0gVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YKKyB1c2luZyB0aGUgb25lcyBmcm9tICR7U30KKworVXNlIHRoZSBtdWx0aWxpYiBjb25maWcgZmlsZXMgZnJvbSAke0J9IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CitzbyB0aGF0IHRoZSBzb3VyY2UgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGdjYy1jcm9zcy1pbml0aWFsLAorZ2NjLWNyb3NzLWludGVybWVkaWF0ZSwgZ2NjLWNyb3NzLCBnY2MtcnVudGltZSwgYW5kIGFsc28gdGhlIHNkayBidWlsZC4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCAgIDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOGJjMGM5OC4uM2NkMDgxNyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTUxOSwxMCArMTE1MTksMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTUzMyw2ICsxMTU0MywxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1ZTVlODRmLi40MTVhNmRmIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE3MDAsMTAgKzE3MDAsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xNzE0LDYgKzE3MjQsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDAtZml4LWcrKy1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MGFhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0MC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorUG9ydGlvbnMgb2YKKworaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2djYy1wYXRjaGVzQGdjYy5nbnUub3JnL21zZzI2MDEzLmh0bWwKKworYXJlIG5vdCB1cHN0cmVhbWVkIHlldC4gU28gbGV0cyBrZWVwIG1pc3NpbmcgcGllY2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZS5hYwkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ4ODM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTY6MDI6MzEuNzcyNDA2Njc5IC0wNzAwCitAQCAtMTQ4LDcgKzE0OCw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKK0luZGV4OiBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2djYy9jb25maWd1cmUJMjAxMy0wNy0xNSAxNTo1NTo0OS40NzIzOTkxMzIgLTA3MDAKKysrKyBnY2MtNC44LjEvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE2OjAyOjMxLjc4MDQwNjY4MCAtMDcwMAorQEAgLTMzMjUsNyArMzMyNSw5IEBACisgaWYgdGVzdCAiJHt3aXRoX3N5c3Jvb3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGdjY19neHhfd2l0aG91dF9zeXNyb290PWBleHByICIke2djY19neHhfaW5jbHVkZV9kaXJ9IiA6ICIke3dpdGhfc3lzcm9vdH0iJ1woLipcKSdgCisgICBpZiB0ZXN0ICIke2djY19neHhfd2l0aG91dF9zeXNyb290fSI7IHRoZW4KKy0gICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGlmIHRlc3QgeCR7d2l0aF9zeXNyb290fSAhPSB4LzsgdGhlbgorKyAgICAgIGdjY19neHhfaW5jbHVkZV9kaXI9IiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IgorKyAgICBmaQorICAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyX2FkZF9zeXNyb290PTEKKyAgIGZpCisgZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDEtbGlidG9vbC1hdm9pZC1saWJkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkOTYxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQxLWxpYnRvb2wtYXZvaWQtbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK0F2b2lkIHVzaW5nIGxpYmRpciBmcm9tIC5sYSB3aGljaCB1c3VhbGx5IHBvaW50cyB0byBhIGhvc3QgcGF0aAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCBhMDM0MzNmLi4xOTAyYTkwIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKysJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCisrCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KKysJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICAgIGRpcj0iJGxpYmRpciIKKyAJICAgIGFic2Rpcj0iJGxpYmRpciIKKyAJICBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDMtY3BwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDMtY3BwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjg2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0My1jcHAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorVGhlIE9FIGVudmlyb25tZW50IHNldHMgYW5kIGV4cG9ydHMgQ1BQIGFzIGJlaW5nIHRoZSB0YXJnZXQgZ2NjLiBXaGVuIGJ1aWxkaW5nIAorZ2NjLWNyb3NzLWNhbmFkaWFuIGZvciBhIG1pbmd3IHRhcmdldHRlZCBzZGssIHRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kIGluCitidWlsZC54ODZfNjQtcG9reXNkay1taW5ndzMyLmk1ODYtcG9reS1saW51eC9idWlsZC14ODZfNjQtbGludXgvbGliaWJlcnR5L2NvbmZpZy5sb2c6CisKK2NvbmZpZ3VyZTozNjQxOiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcworY29uZmlndXJlOjM2NjY6IGdjYyAgLWMgLWlzeXN0ZW0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgIGNvbmZ0ZXN0LmMgPiY1Citjb25maWd1cmU6MzY2NjogJD8gPSAwCitjb25maWd1cmU6MzY5ODogcmVzdWx0OiBubworY29uZmlndXJlOjM3ODY6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCitjb25maWd1cmU6Mzg1NjogcmVzdWx0OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyCitjb25maWd1cmU6Mzg3NjogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMiAgY29uZnRlc3QuYworY29uZmlndXJlOjM4NzY6ICQ/ID0gMAorCitOb3RlIHRoaXMgaXMgYSAqYnVpbGQqIHRhcmdldCAoaW4gYnVpbGQteDg2XzY0LWxpbnV4KSBzbyBpdCBzaG91bGQgYmUgdXNpbmcgCit0aGUgaG9zdCAiZ2NjIiwgbm90IHg4Nl82NC1wb2t5c2RrLW1pbmd3MzItZ2NjLiBTaW5jZSB0aGUgbWluZ3czMiBoZWFkZXJzIGFyZSAKK3ZlcnkgZGlmZmVyZW50LCB1c2luZyB0aGUgd3JvbmcgY3BwIGlzIGEgcmVhbCBwcm9ibGVtLiBJdCBpcyBsZWFraW5nIGludG8gCitjb25maWd1cmUgdGhyb3VnaCB0aGUgQ1BQIHZhcmlhYmxlLiBVbHRpbWF0ZWx5IHRoaXMgbGVhZHMgdG8gYnVpbGQgZmFpbHVyZXMgCityZWxhdGVkIHRvIG5vdCBiZWluZyBhYmxlIHRvIGluY2x1ZGUgYSBwcm9jZXNzLmggZmlsZSBmb3IgcGVtLXVuaXguYy4KKworVGhlIGZpeCBpcyB0byBlbnN1cmUgd2UgZXhwb3J0IGEgc2FuZSBDUFAgdmFsdWUgaW50byB0aGUgYnVpbGQgZW52aXJvbm1lbnQgd2hlbgordXNpbmcgYnVpbGQgdGFyZ2V0cy4gV2UgY291bGQgZGVmaW5lIGEgQ1BQX0ZPUl9CVUlMRCB2YWx1ZSB3aGljaCBtYXkgYmUgdGhlIHZlcnNpb24KK3doaWNoIG5lZWRzIHRvIGJlIHVwc3RyZWFtZWQgYnV0IGZvciBub3csIHRoaXMgZml4IGlzIGdvb2QgZW5vdWdoIHRvIGF2b2lkIHRoZSAKK3Byb2JsZW0uCisKK1JQIDIyLzA4LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnY2MtNC44LjEvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9NYWtlZmlsZS5pbgkyMDEzLTAzLTMwIDExOjI1OjAzLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9NYWtlZmlsZS5pbgkyMDEzLTA4LTEzIDEyOjAzOjE3LjE1MTk4ODg4MiArMDAwMAorQEAgLTE0OSw2ICsxNDksNyBAQAorIAlBUj0iJChBUl9GT1JfQlVJTEQpIjsgZXhwb3J0IEFSOyBcCisgCUFTPSIkKEFTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVM7IFwKKyAJQ0M9IiQoQ0NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0NC1nZW5ndHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4NzYxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ0LWdlbmd0eXBlcy5wYXRjaApAQCAtMCwwICsxLDk3IEBACitnZW5ndHlwZSBpcyBnZW5lcmF0ZWQgZm9yIGJvdGggdGhlIGJ1aWxkIHN5c3RlbSBhbmQgdGhlIHRhcmdldC4gLURHRU5FUkFUT1JfRklMRQord2FzIGFkZGVkIGluIHRoZSBwYXRjaCBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxMi0wNy9tc2cwMDI3My5odG1sCithbmQgd2FzIGFwcGxpZWQgdG8gYm90aCB2ZXJzaW9ucyBvZiBnZW5ndHlwZS4KKworVW5mb3J0dW5hdGVseSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBmbGFnIHRyaWdnZXJzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIChiY29uZmlnLmgpIAordG8gYmUgaW5jbHVkZWQgZm9yIHRoZSB0YXJnZXQgYnVpbGQgb2YgZ2VuZ3R5cGUuIENvbXBpbGluZyBnZW5ndHlwZSB3aXRoIHRoZSB0YXJnZXQgCitjb21waWxlciBhbmQgYmNvbmZpZy5oIGNhbiByZXN1bHQgaW4gZXJyb3JzIGlmIHRoZSBidWlsZCBhbmQgdGFyZ2V0IHN5c3RlbXMgYXJlIAorZGlzc2ltaWxhci4gQW4gZXhhbXBsZSBjYXNlIHRoaXMgZmFpbHMgaXMgY3Jvc3MgY29tcGlsaW5nIGdjYyBvbiBsaW51eCBmb3IgYSBkYXJ3aW4gCit0YXJnZXQgc3lzdGVtOgorCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrLXNoYXJlZC9nY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9nZW5ndHlwZS1wYXJzZS5jOjI1OjA6Cit8IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay1zaGFyZWQvZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvZ2VuZ3R5cGUtcGFyc2UuYzogSW4gZnVuY3Rpb24gJ3ZvaWQgcGFyc2VfZXJyb3IoY29uc3QgY2hhciosIC4uLiknOgorfCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmstc2hhcmVkL2djYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL3N5c3RlbS5oOjkzOjUzOiBlcnJvcjogJ2ZwdXRjX3VubG9ja2VkJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUKK3wgICMgIGRlZmluZSBmcHV0YyhDLCBTdHJlYW0pIGZwdXRjX3VubG9ja2VkIChDLCBTdHJlYW0pCisKK3doaWNoIG9jY3VycyBzaW5jZSBhdXRvLWJ1aWxkLmggYW5kIGF1dG8taG9zdC5oIGhhdmUgZGlmZmVybmV0IHZhbHVlcyBvZgorSEFWRV9GUFVUQ19VTkxPQ0tFRDoKKworI2RlZmluZSBIQVZFX0ZQVVRDX1VOTE9DS0VEIDEKKy8qICN1bmRlZiBIQVZFX0ZQVVRTX1VOTE9DS0VEICovCisKK1RoZSBvYnZpb3VzIGZpeCBpcyB0byBvbmx5IGluY2x1ZGUgdGhlIGZsYWcgb24gYnVpbGQvIHRhcmdldHMgd2hpY2ggdGhpcyBwYXRjaCBkb2VzLCBob3dldmVyIAordGhpcyBhbHNvIGxlYWRzIHRvIGNvbXBpbGUgZXJyb3JzIGR1ZSB0byBjb25zdF90cmVlIGJlaW5nIHVuZGVmaW5lZCBidXQgdXNlZCBpbiBkb3VibGVfaW50LmgKKworSSBhZGRlZCBhIEdFTkVSQVRPUl9GSUxFMiBmbGFnIHRvIHdvcmthcm91bmQgdGhvc2UgaW4gdGhlIAordGFyZ2V0IGNhc2UgYW5kIGFsbG93IHRoZSBidWlsZCB0byBzdWNjZWVkLgorCitPbmx5IHRoZSBidWlsZC9nZW5ndHlwZXMgc2hvdWxkIGhhdmUgdGhlIC1ER0VORVJBVE9SX0ZJTEUgCisKK1JQIDIyLzgvMjAxMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9nY2MvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvTWFrZWZpbGUuaW4JMjAxMy0wOC0xOSAxMTo0MDozNi44NDQwMTQ0MjQgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL01ha2VmaWxlLmluCTIwMTMtMDgtMTkgMTE6NDA6MzcuNzg0MDE0NDAyICswMDAwCitAQCAtMzkwMywyNyArMzkwMywyOSBAQAorIAorIGdlbmd0eXBlLWxleC5vIGJ1aWxkL2dlbmd0eXBlLWxleC5vIDogZ2VuZ3R5cGUtbGV4LmMgZ2VuZ3R5cGUuaCAkKFNZU1RFTV9IKQorIGdlbmd0eXBlLWxleC5vOiAkKENPTkZJR19IKSAkKEJDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUtbGV4Lm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1sZXgubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUtbGV4Lm86ICQoQkNPTkZJR19IKQorIAorIGdlbmd0eXBlLXBhcnNlLm8gYnVpbGQvZ2VuZ3R5cGUtcGFyc2UubyA6IGdlbmd0eXBlLXBhcnNlLmMgZ2VuZ3R5cGUuaCBcCisgICAkKFNZU1RFTV9IKQorIGdlbmd0eXBlLXBhcnNlLm86ICQoQ09ORklHX0gpCistQ0ZMQUdTLWdlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1wYXJzZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1wYXJzZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS1zdGF0ZS5vIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86IGdlbmd0eXBlLXN0YXRlLmMgJChTWVNURU1fSCkgXAorICAgZ2VuZ3R5cGUuaCBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSAkKE9CU1RBQ0tfSCkgXAorICAgJChYUkVHRVhfSCkKKyBnZW5ndHlwZS1zdGF0ZS5vOiAkKENPTkZJR19IKQorLUNGTEFHUy1nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKytDRkxBR1MtZ2VuZ3R5cGUtc3RhdGUubyArPSAtREdFTkVSQVRPUl9GSUxFMgorK0NGTEFHUy1idWlsZC9nZW5ndHlwZS1zdGF0ZS5vICs9IC1ER0VORVJBVE9SX0ZJTEUKKyBidWlsZC9nZW5ndHlwZS1zdGF0ZS5vOiAkKEJDT05GSUdfSCkKKyAKKyBnZW5ndHlwZS5vIGJ1aWxkL2dlbmd0eXBlLm8gOiBnZW5ndHlwZS5jICQoU1lTVEVNX0gpIGdlbmd0eXBlLmggCVwKKyAgIHJ0bC5kZWYgaW5zbi1ub3Rlcy5kZWYgZXJyb3JzLmggZG91YmxlLWludC5oIHZlcnNpb24uaCAkKEhBU0hUQUJfSCkgXAorICAgJChPQlNUQUNLX0gpICQoWFJFR0VYX0gpCisgZ2VuZ3R5cGUubzogJChDT05GSUdfSCkKKy1DRkxBR1MtZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisrQ0ZMQUdTLWdlbmd0eXBlLm8gKz0gLURHRU5FUkFUT1JfRklMRTIKKytDRkxBR1MtYnVpbGQvZ2VuZ3R5cGUubyArPSAtREdFTkVSQVRPUl9GSUxFCisgYnVpbGQvZ2VuZ3R5cGUubzogJChCQ09ORklHX0gpCisgCisgYnVpbGQvZ2VubWRkZXBzLm86IGdlbm1kZGVwcy5jICQoQkNPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaAlcCitAQCAtMzk4OCw3ICszOTkwLDcgQEAKKyAjIGFueSBzeXN0ZW0gaGVhZGVyIGlzIGluY2x1ZGVkLgorIGdlbmd0eXBlLWxleC5jIDogZ2VuZ3R5cGUtbGV4LmwKKyAJLSQoRkxFWCkgJChGTEVYRkxBR1MpIC1vJEAgJDwgJiYgeyBcCistCSAgZWNobyAnI2luY2x1ZGUgImJjb25maWcuaCInID4gJEAudG1wOyBcCisrCSAgZWNobyAnJyA+ICRALnRtcDsgXAorIAkgIGNhdCAkQCA+PiAkQC50bXA7IFwKKyAJICBtdiAkQC50bXAgJEA7IFwKKyAJfQorSW5kZXg6IGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2RvdWJsZS1pbnQuaAkyMDEzLTAxLTMwIDExOjA0OjMwLjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9nY2MvZG91YmxlLWludC5oCTIwMTMtMDgtMTkgMTE6NDE6NTEuNTY0MDEyNzE5ICswMDAwCitAQCAtNDQ4LDEwICs0NDgsMTIgQEAKKyAKKyAKKyAjaWZuZGVmIEdFTkVSQVRPUl9GSUxFCisrI2lmbmRlZiBHRU5FUkFUT1JfRklMRTIKKyAvKiBDb252ZXJzaW9uIHRvIGFuZCBmcm9tIEdNUCBpbnRlZ2VyIHJlcHJlc2VudGF0aW9ucy4gICovCisgCisgdm9pZCBtcHpfc2V0X2RvdWJsZV9pbnQgKG1wel90LCBkb3VibGVfaW50LCBib29sKTsKKyBkb3VibGVfaW50IG1wel9nZXRfZG91YmxlX2ludCAoY29uc3RfdHJlZSwgbXB6X3QsIGJvb2wpOworICNlbmRpZgorKyNlbmRpZgorIAorICNlbmRpZiAvKiBET1VCTEVfSU5UX0ggKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ2LWxpYmF0b21pYy1kZXB0cmFja2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE0ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDYtbGliYXRvbWljLWRlcHRyYWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK2djYyA0Ljggd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBzaW5jZSB0aGUgKi5QcG8gZmlsZXMKK2Rvbid0IGdldCBjcmVhdGVkIHVubGVzcyAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIGlzIHRydWUuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB3ZSBvbmx5IHVzZSB0aG9zZSBjb21waWxlciBvcHRpb25zIHdoZW4gaXRzIGVuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyhQcm9ibGVtIHdhcyBhbHJlYWR5IHJlcG9ydGVkIHVwc3RyZWFtLCBhdHRhY2hlZCB0aGlzIHBhdGNoIHRoZXJlCitodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU1OTMwKQorCitSUCAKKzIwMTIvMDkvMjIKKworSW5kZXg6IGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9saWJhdG9taWMvTWFrZWZpbGUuYW0JMjAxMy0wMS0xNCAxODoxNjoyMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvbGliYXRvbWljL01ha2VmaWxlLmFtCTIwMTMtMDktMjIgMTA6Mzg6MTguOTA0MDY0NzUwICswMDAwCitAQCAtMTAwLDcgKzEwMCw4IEBACisgSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKyAKKy1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTCQk9IAorIE1fU0laRQkJPSAtRE49JChQQVRfTikKKyBNX0lGVU5DCQk9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUJCT0gJChQQVRfQkFTRSlfbi5jCitJbmRleDogZ2NjLTQuOC4xL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjguMS5vcmlnL2xpYmF0b21pYy9NYWtlZmlsZS5pbgkyMDEzLTA1LTMxIDA5OjA5OjI2LjAwMDAwMDAwMCArMDAwMAorKysrIGdjYy00LjguMS9saWJhdG9taWMvTWFrZWZpbGUuaW4JMjAxMy0wOS0yMiAxMDo0MDo0Mi41MjAwNTk5MTcgKzAwMDAKK0BAIC0yOTgsNyArMjk4LDggQEAKKyBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTID0gCisgTV9TSVpFID0gLUROPSQoUEFUX04pCisgTV9JRlVOQyA9ICQoaWYgJChQQVRfUyksJChJRlVOQ19ERUYpICQoSUZVTkNfT1BUKSkKKyBNX0ZJTEUgPSAkKFBBVF9CQVNFKV9uLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ3LXJlcG9tZW1idWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZmQ1NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA0Ny1yZXBvbWVtYnVnLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK1doZW4gY29tcGlsaW5nIGEgcHJvamVjdCB1c2luZyAtZnJlcG8sIC5ycG8gZmlsZXMgYXJlIHdyaXR0ZW4gYWxvbmdzaWRlCit0aGUgLm8gZmlsZSwgdGhlIHN5bWJvbHMgZWl0aGVyIGhhdmUgTyBvciBDIGFnYWluc3QgdGhlbS4gRHVyaW5nIGZpbmFsIGxpbmtpbmcsCit0aGUgb2JqZWN0cyBjYW4gYmUgcmVjb21waWxlZCB3aXRoIHNvbWUgb2YgdGhlIGVudHJpZXMgdHdlYWtlZC9jaG9zZW4gYnkgdGhlIAordGxpbmsuYyBjb2RlICh2aXNpYmxlIHdpdGggVExJTktfVkVSQk9TRT0zKSwgaXQgZG9lcyB0aGlzIGJ5IGNoYW5naW5nIE8gLT4gQworaW4gdGhlIC5ycG8gZmlsZXMuCisKK015IHRlc3RzIHNob3dlZCB0aGF0IGluaXRfcmVwbyAoY3AvcmVwby5jKSB3YXMgY29ycmVjdGx5IGNhbGxpbmcgCitJREVOVElGSUVSX1JFUE9fQ0hPU0VOIGFnYWluc3QgdGhlIHJpZ2h0IGlkZW50aWZlcnMgYW5kIHNldHRpbmcgdGhlCitjaG9zZW4gYml0LgorCitCeSB0aGUgdGltZSBmaW5pc2hfcmVwbygpIG9yIGVtaXRfcmVwb19wKCkgd2VyZSBjYWxsZWQsIHRoZSBwb2ludGVyIHJldHVybmVkCitieSBnZXRfaWRlbnRpZmllcigpIGZvciB0aGUgc3ltYm9sIG1hcmtlZCBkdXJpbmcgaW5pdF9yZXBvIGhhZCBjaGFuZ2VkIGFuZAordGhlIGNob3NlbiBiaXQgd2FzIG5vIGxvbmdlciBzZXQuIFRoaXMgbGVhZCB0byBsaW5raW5nIGJ1Z3MgbGlrZToKKworY29sbGVjdDogcmVsaW5raW5nCitjb2xsZWN0MjogZXJyb3I6ICdfWk5LNnN1ZG9rdTVDbGVhcklOU184U2VxdWVuY2VFRWNsRVJTMV8nIHdhcyBhc3NpZ25lZCB0byAnYm9hcmQucnBvJywgYnV0IHdhcyBub3QgZGVmaW5lZCBkdXJpbmcgcmVjb21waWxhdGlvbiwgb3IgdmljZSB2ZXJzYQorCitUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXMgZ2V0dGluZyBjYWxsZWQgYmVmb3JlCitmaW5pc2hfcmVwbygpIGlzIGNhbGxlZCBhbmQgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgaXMgc2V0IHRvIGZhbHNlIAorc28gdGhlIGlkZW50aWZpZXJzIGFyZSBub3QgcHJlc2VydmVkLiBUaGV5IGFyZSByZWNyZWF0ZWQgYnV0IHRoZSAKK2Nob3NlbiBiaXRzIGdldCB3aXBlZCBvdXQgd2hpY2ggaXMgd2h5IHRoZSBwb2ludGVyIGNoYW5nZXMgYW5kIHRoZSAKK2Nob3NlbiBiaXQgaXMgbm90IHNldC4KKworVGhlIGZpeCBpcyB0byBjaGFuZ2UgZ2djX3Byb3RlY3RfaWRlbnRpZmllcnMgKmFmdGVyKiB0aGUgZmluaXNoX3JlcG8gCitjYWxscyBhcmUgbWFkZS4KKworUmVwcm9kdWN0aW9uIGlzIHRyaWNreSBzaW5jZSB5b3UgbmVlZCB0byB0cmlnZ2VyIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBhdAoranVzdCB0aGUgcmlnaHQgbW9tZW50LgorCitSUCAyMDEzLzEwLzkKKworW1lPQ1RPICM1MTMzXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdjYy00LjguMS9nY2MvdG9wbGV2LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvdG9wbGV2LmMJMjAxMy0wMy0yOCAwODoyOTo1MS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnY2MtNC44LjEvZ2NjL3RvcGxldi5jCTIwMTMtMTAtMDkgMjA6Mjc6MTcuMDg5MjI4MDIzICswMDAwCitAQCAtNTUxLDExICs1NTEsMTEgQEAKKyAgIGlmIChmbGFnX3N5bnRheF9vbmx5IHx8IGZsYWdfd3BhKQorICAgICByZXR1cm47CisgCistICBnZ2NfcHJvdGVjdF9pZGVudGlmaWVycyA9IGZhbHNlOworLQorICAgLyogVGhpcyBtdXN0IGFsc28gY2FsbCBmaW5hbGl6ZV9jb21waWxhdGlvbl91bml0LiAgKi8KKyAgIGxhbmdfaG9va3MuZGVjbHMuZmluYWxfd3JpdGVfZ2xvYmFscyAoKTsKKyAKKysgIGdnY19wcm90ZWN0X2lkZW50aWZpZXJzID0gZmFsc2U7CisrCisgICBpZiAoc2Vlbl9lcnJvciAoKSkKKyAgICAgcmV0dXJuOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNDktRW5hYmxlLVNQRS1BbHRpVmVjLWdlbmVyYXRpb24tb24tcG93ZXBjLWxpbnV4LXRhcmdldC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4ZjhmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDQ5LUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA5ZTBlMTllYWMyNTYyZjczODU4NjAyZmUyNmUyMDQ0ZWI4YjIwYzQ3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCA1IEZlYiAyMDE0IDE2OjUyOjMxICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIEVuYWJsZSBTUEUgJiBBbHRpVmVjIGdlbmVyYXRpb24gb24gcG93ZXBjKmxpbnV4IHRhcmdldAorCitXaGVuIGlzIGNvbmZpZ3VyZWQgd2l0aCAtLXRhcmdldD1wb3dlcnBjLWxpbnV4LCB0aGUgcmVzdWx0aW5nIEdDQyB3aWxsIAorbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCitHQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bworZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCitUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKK2NhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCitUaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQorIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCAgICA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9jb25maWcuZ2NjCitpbmRleCBjYjdhOTRlLi5kMzkyYzJiIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy5nY2MKKysrKyBiL2djYy9jb25maWcuZ2NjCitAQCAtMjA2OCw3ICsyMDY4LDEyIEBAIHBvd2VycGMtKi1ydGVtcyopCisgCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcnRlbXMgdC1ydGVtcyByczYwMDAvdC1wcGNjb21tIgorIAk7OworIHBvd2VycGMqLSotbGludXgqKQorLQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZnJlZWJzZC1zcGVjLmggcnM2MDAwL3N5c3Y0LmgiCisrCWNhc2UgJHt0YXJnZXR9IGluCisrCSAgICBwb3dlcnBjKi0qLWxpbnV4KnNwZSogfCBwb3dlcnBjKi0qLWxpbnV4KmFsdGl2ZWMqKQorKwkJdG1fZmlsZT0iJHt0bV9maWxlfSBkYnhlbGYuaCBlbGZvcy5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIiA7OworKwkgICAgKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIgOzsKKysJZXNhYworIAlleHRyYV9vcHRpb25zPSIke2V4dHJhX29wdGlvbnN9IHJzNjAwMC9zeXN2NC5vcHQiCisgCXRtYWtlX2ZpbGU9InJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjb3MgJHt0bWFrZV9maWxlfSByczYwMDAvdC1wcGNjb21tIgorIAljYXNlICR7dGFyZ2V0fSBpbgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUwLVJldmVydC1Vc2UtZGJ4X3JlZ19udW1iZXItZm9yLXNwYW5uaW5nLXJlZ2lzdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWFkNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTAtUmV2ZXJ0LVVzZS1kYnhfcmVnX251bWJlci1mb3Itc3Bhbm5pbmctcmVnaXN0ZXJzLnBhdGNoCkBAIC0wLDAgKzEsODAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIGNiOWIxYzA0MWI2MzRhNGMxMjg4OTZlM2QzZWVkNDA4MjYwOGM3OTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAzIE1heSAyMDE0IDE5OjI1OjE3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJldmVydCAiMjAxMy0wNS0yMSAgQ2hyaXN0aWFuIEJydWVsIAorIDxjaHJpc3RpYW4uYnJ1ZWxAc3QuY29tPiIKKworVGhpcyByZXZlcnRzIGNvbW1pdCAzOTgzMDM2YThiNmIyNzEwYzU3Nzc3MTk0ZjIxNTA3ODE5YTczNTUzLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitDb25mbGljdHM6CisJZ2NjL0NoYW5nZUxvZworLS0tCisgZ2NjL0NoYW5nZUxvZyAgIHwgMjE5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgZ2NjL2R3YXJmMm91dC5jIHwgIDMzICsrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjM0IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMm91dC5jIGIvZ2NjL2R3YXJmMm91dC5jCitpbmRleCAxMjcyMzI2Li42YWMyYjI4IDEwMDY0NAorLS0tIGEvZ2NjL2R3YXJmMm91dC5jCisrKysgYi9nY2MvZHdhcmYyb3V0LmMKK0BAIC0xMDg3MCwyNyArMTA4NzAsMjUgQEAgc3RhdGljIGR3X2xvY19kZXNjcl9yZWYKKyBtdWx0aXBsZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKHJ0eCBydGwsIHJ0eCByZWdzLAorIAkJCSAgICAgZW51bSB2YXJfaW5pdF9zdGF0dXMgaW5pdGlhbGl6ZWQpCisgeworLSAgaW50IHNpemUsIGk7CisrICBpbnQgbnJlZ3MsIHNpemUsIGk7CisrICB1bnNpZ25lZCByZWc7CisgICBkd19sb2NfZGVzY3JfcmVmIGxvY19yZXN1bHQgPSBOVUxMOworIAorLSAgLyogU2ltcGxlLCBjb250aWd1b3VzIHJlZ2lzdGVycy4gICovCistICBpZiAocmVncyA9PSBOVUxMX1JUWCkKKy0gICAgeworLSAgICAgIHVuc2lnbmVkIHJlZyA9IFJFR05PIChydGwpOworLSAgICAgIGludCBucmVnczsKKy0KKysgIHJlZyA9IFJFR05PIChydGwpOworICNpZmRlZiBMRUFGX1JFR19SRU1BUAorLSAgICAgIGlmIChjcnRsLT51c2VzX29ubHlfbGVhZl9yZWdzKQorLQl7CistCSAgaW50IGxlYWZfcmVnID0gTEVBRl9SRUdfUkVNQVAgKHJlZyk7CistCSAgaWYgKGxlYWZfcmVnICE9IC0xKQorLQkgICAgcmVnID0gKHVuc2lnbmVkKSBsZWFmX3JlZzsKKy0JfQorKyAgaWYgKGNydGwtPnVzZXNfb25seV9sZWFmX3JlZ3MpCisrICAgIHsKKysgICAgICBpbnQgbGVhZl9yZWcgPSBMRUFGX1JFR19SRU1BUCAocmVnKTsKKysgICAgICBpZiAobGVhZl9yZWcgIT0gLTEpCisrCXJlZyA9ICh1bnNpZ25lZCkgbGVhZl9yZWc7CisrICAgIH0KKyAjZW5kaWYKKysgIGdjY19hc3NlcnQgKCh1bnNpZ25lZCkgREJYX1JFR0lTVEVSX05VTUJFUiAocmVnKSA9PSBkYnhfcmVnX251bWJlciAocnRsKSk7CisrICBucmVncyA9IGhhcmRfcmVnbm9fbnJlZ3NbUkVHTk8gKHJ0bCldW0dFVF9NT0RFIChydGwpXTsKKyAKKy0gICAgICBnY2NfYXNzZXJ0ICgodW5zaWduZWQpIERCWF9SRUdJU1RFUl9OVU1CRVIgKHJlZykgPT0gZGJ4X3JlZ19udW1iZXIgKHJ0bCkpOworLSAgICAgIG5yZWdzID0gaGFyZF9yZWdub19ucmVnc1tSRUdOTyAocnRsKV1bR0VUX01PREUgKHJ0bCldOworLQorKyAgLyogU2ltcGxlLCBjb250aWd1b3VzIHJlZ2lzdGVycy4gICovCisrICBpZiAocmVncyA9PSBOVUxMX1JUWCkKKysgICAgeworICAgICAgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAocnRsKSkgLyBucmVnczsKKyAKKyAgICAgICBsb2NfcmVzdWx0ID0gTlVMTDsKK0BAIC0xMDkxOCw5ICsxMDkxNiwxMCBAQCBtdWx0aXBsZV9yZWdfbG9jX2Rlc2NyaXB0b3IgKHJ0eCBydGwsIHJ0eCByZWdzLAorICAgICB7CisgICAgICAgZHdfbG9jX2Rlc2NyX3JlZiB0OworIAorLSAgICAgIHQgPSBvbmVfcmVnX2xvY19kZXNjcmlwdG9yIChkYnhfcmVnX251bWJlciAoWFZFQ0VYUCAocmVncywgMCwgaSkpLAorKyAgICAgIHQgPSBvbmVfcmVnX2xvY19kZXNjcmlwdG9yIChSRUdOTyAoWFZFQ0VYUCAocmVncywgMCwgaSkpLAorIAkJCQkgIFZBUl9JTklUX1NUQVRVU19JTklUSUFMSVpFRCk7CisgICAgICAgYWRkX2xvY19kZXNjciAoJmxvY19yZXN1bHQsIHQpOworKyAgICAgIHNpemUgPSBHRVRfTU9ERV9TSVpFIChHRVRfTU9ERSAoWFZFQ0VYUCAocmVncywgMCwgMCkpKTsKKyAgICAgICBhZGRfbG9jX2Rlc2NyX29wX3BpZWNlICgmbG9jX3Jlc3VsdCwgc2l6ZSk7CisgICAgIH0KKyAKKy0tIAorMS45LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTEtZWFiaXNwZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlMzg5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUxLWVhYmlzcGUucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Rha2VuIGZyb20gaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMTQtMDQvbXNnMDIwNjQuaHRtbAorCisyMDE0LTA0LTMwICBDZXNhciBQaGlsaXBwaWRpcyAgPGNlc2FyQGNvZGVzb3VyY2VyeS5jb20+CisKKwlnY2MvCisJKiBkd2FyZjJjZmkuYyAoZHdmX3JlZ25vKTogRG9uJ3QgYXNzZXJ0IHJlZyBpcyBhIHBzZXVkbworCXJlZ2lzdGVyLgorCQorCitkaWZmIC0tZ2l0IGEvZ2NjL2R3YXJmMmNmaS5jIGIvZ2NjL2R3YXJmMmNmaS5jCitpbmRleCA0MTgwODkwLi40MGVmMGUyIDEwMDY0NAorLS0tIGEvZ2NjL2R3YXJmMmNmaS5jCisrKysgYi9nY2MvZHdhcmYyY2ZpLmMKK0BAIC05MDYsNyArOTA2LDYgQEAgbm90aWNlX2VoX3Rocm93IChydHggaW5zbikKKyBzdGF0aWMgaW5saW5lIHVuc2lnbmVkCisgZHdmX3JlZ25vIChjb25zdF9ydHggcmVnKQorIHsKKy0gIGdjY19hc3NlcnQgKFJFR05PIChyZWcpIDwgRklSU1RfUFNFVURPX1JFR0lTVEVSKTsKKyAgIHJldHVybiBEV0FSRl9GUkFNRV9SRUdOVU0gKFJFR05PIChyZWcpKTsKKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Mi1BZGQtdGFyZ2V0LWhvb2stdG8tb3ZlcnJpZGUtRFdBUkYyLWZyYW1lLXJlZ2lzdGVyLXNpLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjk1OGIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTItQWRkLXRhcmdldC1ob29rLXRvLW92ZXJyaWRlLURXQVJGMi1mcmFtZS1yZWdpc3Rlci1zaS5wYXRjaApAQCAtMCwwICsxLDEzOCBAQAorRnJvbSBkNjI2Mjk3ZTg3ZTE5MjUxYTI4NGVhMWU5MzYwZTgzMWI0ODk5OWNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogbXBmIDxtcGZAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogVGh1LCA0IFNlcCAyMDE0IDA4OjMyOjA1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEFkZCB0YXJnZXQgaG9vayB0byBvdmVycmlkZSBEV0FSRjIgZnJhbWUgcmVnaXN0ZXIgc2l6ZQorCitnY2MvCisKKwkqIHRhcmdldC5kZWYgKFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSk6IE5ldyB0YXJnZXQgaG9vay4KKwkqIHRhcmdob29rcy5jIChkZWZhdWx0X2R3YXJmX2ZyYW1lX3JlZ19tb2RlKTogTmV3IGZ1bmN0aW9uLgorCSogdGFyZ2hvb2tzLmggKGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpOiBOZXcgcHJvdG90eXBlLgorCSogZG9jL3RtLnRleGkuaW4gKFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERSk6IERvY3VtZW50LgorCSogZG9jL3RtLnRleGk6IFJlZ2VuZXJhdGUuCisJKiBkd2FyZjJjZmkuYyAoZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMpOiBBYnN0cmFjdCBtb2RlCisJc2VsZWN0aW9uIGxvZ2ljIHRvIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUuCisKKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTQ4OTggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgICAgfCAxMCArKysrKysrKysrCisgZ2NjL2RvYy90bS50ZXhpICAgIHwgIDcgKysrKysrKworIGdjYy9kb2MvdG0udGV4aS5pbiB8ICAyICsrCisgZ2NjL2R3YXJmMmNmaS5jICAgIHwgIDQgKy0tLQorIGdjYy90YXJnZXQuZGVmICAgICB8IDExICsrKysrKysrKysrCisgZ2NjL3Rhcmdob29rcy5jICAgIHwgMTMgKysrKysrKysrKysrKworIGdjYy90YXJnaG9va3MuaCAgICB8ICAxICsKKyA3IGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RvYy90bS50ZXhpCisrKysgZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aQorQEAgLTkwMTcsNiArOTAxNywxMyBAQCByZWdpc3RlciBpbiBEd2FyZi4gIE90aGVyd2lzZSwgdGhpcyBob29rCisgSWYgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybiBAY29kZXtOVUxMX1JUWH0uCisgQGVuZCBkZWZ0eXBlZm4KKyAKKytAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30ge2VudW0gbWFjaGluZV9tb2RlfSBUQVJHRVRfRFdBUkZfRlJBTUVfUkVHX01PREUgKGludCBAdmFye3JlZ25vfSkKKytHaXZlbiBhIHJlZ2lzdGVyLCB0aGlzIGhvb2sgc2hvdWxkIHJldHVybiB0aGUgbW9kZSB3aGljaCB0aGUKKytjb3JyZXNwb25kaW5nIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHNob3VsZCBoYXZlLiAgVGhpcyBpcyBub3JtYWxseQorK3VzZWQgdG8gcmV0dXJuIGEgc21hbGxlciBtb2RlIHRoYW4gdGhlIHJhdyBtb2RlIHRvIHByZXZlbnQgY2FsbAorK2Nsb2JiZXJlZCBwYXJ0cyBvZiBhIHJlZ2lzdGVyIGFsdGVyaW5nIHRoZSBmcmFtZSByZWdpc3RlciBzaXplCisrQGVuZCBkZWZ0eXBlZm4KKysKKyBAZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gdm9pZCBUQVJHRVRfSU5JVF9EV0FSRl9SRUdfU0laRVNfRVhUUkEgKHRyZWUgQHZhcnthZGRyZXNzfSkKKyBJZiBzb21lIHJlZ2lzdGVycyBhcmUgcmVwcmVzZW50ZWQgaW4gRHdhcmYtMiB1bndpbmQgaW5mb3JtYXRpb24gaW4KKyBtdWx0aXBsZSBwaWVjZXMsIGRlZmluZSB0aGlzIGhvb2sgdG8gZmlsbCBpbiBpbmZvcm1hdGlvbiBhYm91dCB0aGUKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2RvYy90bS50ZXhpLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RvYy90bS50ZXhpLmluCisrKysgZ2NjLTQuOS4yL2djYy9kb2MvdG0udGV4aS5pbgorQEAgLTY3NDUsNiArNjc0NSw4IEBAIHRoZSB0YXJnZXQgc3VwcG9ydHMgRFdBUkYgMiBmcmFtZSB1bndpbmQKKyAKKyBAaG9vayBUQVJHRVRfRFdBUkZfUkVHSVNURVJfU1BBTgorIAorK0Bob29rIFRBUkdFVF9EV0FSRl9GUkFNRV9SRUdfTU9ERQorKworIEBob29rIFRBUkdFVF9JTklUX0RXQVJGX1JFR19TSVpFU19FWFRSQQorIAorIEBob29rIFRBUkdFVF9BU01fVFRZUEUKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI3MSwxMSArMjcxLDkgQEAgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZQorICAgICAgIGlmIChybnVtIDwgRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorIAl7CisgCSAgSE9TVF9XSURFX0lOVCBvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAobW9kZSk7CistCSAgZW51bSBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlID0gcmVnX3Jhd19tb2RlW2ldOworIAkgIEhPU1RfV0lERV9JTlQgc2l6ZTsKKysJICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKKyAKKy0JICBpZiAoSEFSRF9SRUdOT19DQUxMX1BBUlRfQ0xPQkJFUkVEIChpLCBzYXZlX21vZGUpKQorLQkgICAgc2F2ZV9tb2RlID0gY2hvb3NlX2hhcmRfcmVnX21vZGUgKGksIDEsIHRydWUpOworIAkgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisgCSAgICB7CisgCSAgICAgIGlmIChzYXZlX21vZGUgPT0gVk9JRG1vZGUpCitJbmRleDogZ2NjLTQuOS4yL2djYy90YXJnZXQuZGVmCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3RhcmdldC5kZWYKKysrKyBnY2MtNC45LjIvZ2NjL3RhcmdldC5kZWYKK0BAIC0zMjE4LDYgKzMyMTgsMTcgQEAgSWYgbm90IGRlZmluZWQsIHRoZSBkZWZhdWx0IGlzIHRvIHJldHVybgorICBydHgsIChydHggcmVnKSwKKyAgaG9va19ydHhfcnR4X251bGwpCisgCisrLyogR2l2ZW4gYSByZWdpc3RlciByZXR1cm4gdGhlIG1vZGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgRFdBUkYgZnJhbWUKKysgICByZWdpc3Rlci4gICovCisrREVGSE9PSworKyhkd2FyZl9mcmFtZV9yZWdfbW9kZSwKKysgIkdpdmVuIGEgcmVnaXN0ZXIsIHRoaXMgaG9vayBzaG91bGQgcmV0dXJuIHRoZSBtb2RlIHdoaWNoIHRoZVxuXAorK2NvcnJlc3BvbmRpbmcgRHdhcmYgZnJhbWUgcmVnaXN0ZXIgc2hvdWxkIGhhdmUuICBUaGlzIGlzIG5vcm1hbGx5XG5cCisrdXNlZCB0byByZXR1cm4gYSBzbWFsbGVyIG1vZGUgdGhhbiB0aGUgcmF3IG1vZGUgdG8gcHJldmVudCBjYWxsXG5cCisrY2xvYmJlcmVkIHBhcnRzIG9mIGEgcmVnaXN0ZXIgYWx0ZXJpbmcgdGhlIGZyYW1lIHJlZ2lzdGVyIHNpemUiLAorKyBlbnVtIG1hY2hpbmVfbW9kZSwgKGludCByZWdubyksCisrIGRlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUpCisrCisgLyogSWYgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgbmVlZHMgdG8gZmlsbCBpbiB0YWJsZQorICAgIGVudHJpZXMgbm90IGNvcnJlc3BvbmRpbmcgZGlyZWN0bHkgdG8gcmVnaXN0ZXJzIGJlbG93CisgICAgRklSU1RfUFNFVURPX1JFR0lTVEVSLCB0aGlzIGhvb2sgc2hvdWxkIGdlbmVyYXRlIHRoZSBuZWNlc3NhcnkKK0luZGV4OiBnY2MtNC45LjIvZ2NjL3Rhcmdob29rcy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL3Rhcmdob29rcy5jCisrKysgZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuYworQEAgLTE0MzgsNiArMTQzOCwxOSBAQCBkZWZhdWx0X2RlYnVnX3Vud2luZF9pbmZvICh2b2lkKQorICAgcmV0dXJuIFVJX05PTkU7CisgfQorIAorKy8qIERldGVybWluZSB0aGUgY29ycmVjdCBtb2RlIGZvciBhIER3YXJmIGZyYW1lIHJlZ2lzdGVyIHRoYXQgcmVwcmVzZW50cworKyAgIHJlZ2lzdGVyIFJFR05PLiAgKi8KKysKKytlbnVtIG1hY2hpbmVfbW9kZQorK2RlZmF1bHRfZHdhcmZfZnJhbWVfcmVnX21vZGUgKGludCByZWdubykKKyt7CisrICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSByZWdfcmF3X21vZGVbcmVnbm9dOworKworKyAgaWYgKEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRCAocmVnbm8sIHNhdmVfbW9kZSkpCisrICAgIHNhdmVfbW9kZSA9IGNob29zZV9oYXJkX3JlZ19tb2RlIChyZWdubywgMSwgdHJ1ZSk7CisrICByZXR1cm4gc2F2ZV9tb2RlOworK30KKysKKyAvKiBUbyBiZSB1c2VkIGJ5IHRhcmdldHMgd2hlcmUgcmVnX3Jhd19tb2RlIGRvZXNuJ3QgcmV0dXJuIHRoZSByaWdodAorICAgIG1vZGUgZm9yIHJlZ2lzdGVycyB1c2VkIGluIGFwcGx5X2J1aWx0aW5fcmV0dXJuIGFuZCBhcHBseV9idWlsdGluX2FyZy4gICovCisgCitJbmRleDogZ2NjLTQuOS4yL2djYy90YXJnaG9va3MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy90YXJnaG9va3MuaAorKysrIGdjYy00LjkuMi9nY2MvdGFyZ2hvb2tzLmgKK0BAIC0xOTQsNiArMTk0LDcgQEAgZXh0ZXJuIGludCBkZWZhdWx0X2xhYmVsX2FsaWduX21heF9za2lwCisgZXh0ZXJuIGludCBkZWZhdWx0X2p1bXBfYWxpZ25fbWF4X3NraXAgKHJ0eCk7CisgZXh0ZXJuIHNlY3Rpb24gKiBkZWZhdWx0X2Z1bmN0aW9uX3NlY3Rpb24odHJlZSBkZWNsLCBlbnVtIG5vZGVfZnJlcXVlbmN5IGZyZXEsCisgCQkJCQkgIGJvb2wgc3RhcnR1cCwgYm9vbCBleGl0KTsKKytleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZGVmYXVsdF9kd2FyZl9mcmFtZV9yZWdfbW9kZSAoaW50KTsKKyBleHRlcm4gZW51bSBtYWNoaW5lX21vZGUgZGVmYXVsdF9nZXRfcmVnX3Jhd19tb2RlIChpbnQpOworIAorIGV4dGVybiB2b2lkICpkZWZhdWx0X2dldF9wY2hfdmFsaWRpdHkgKHNpemVfdCAqKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDUzLWdjYy1maXgtc2VnZmF1bHQtZnJvbS1jYWxsaW5nLWZyZWUtb24tbm9uLW1hbGxvYy1kLWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1My1nY2MtZml4LXNlZ2ZhdWx0LWZyb20tY2FsbGluZy1mcmVlLW9uLW5vbi1tYWxsb2MtZC1hLnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gYTIyYTIyMmM4ZjkyOTlmNmMwN2EwMjc0Mzg4YWRlN2Q0YWI4YzI4ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyMCBKdW4gMjAxNCAxNjo0MTowOCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBnY2M6IGZpeCBzZWdmYXVsdCBmcm9tIGNhbGxpbmcgZnJlZSBvbiBub24tbWFsbG9jJ2QgYXJlYQorCitXZSBzZWUgdGhlIGZvbGxvd2luZyBvbiBhIDMyYml0IGdjYyBpbnN0YWxsZWQgb24gNjQgYml0IGhvc3Q6CisKKyAgUmVhZGluZyBzeW1ib2xzIGZyb20gLi9pNTg2LXBva3ltbGxpYjMyLWxpbnV4LWdjYy4uLmRvbmUuCisgIChnZGIpIHJ1bgorICBTdGFydGluZyBwcm9ncmFtOiB4ODYtcG9reW1sbGliMzItbGludXgvbGliMzItZ2NjLzQuOS4wLXIwL2ltYWdlL3Vzci9iaW4vaTU4Ni1wb2t5bWxsaWIzMi1saW51eC1nY2MKKworICBQcm9ncmFtIHJlY2VpdmVkIHNpZ25hbCBTSUdTRUdWLCBTZWdtZW50YXRpb24gZmF1bHQuCisgIDB4ZjdlOTU3ZTAgaW4gZnJlZSAoKSBmcm9tIC9saWIvaTM4Ni1saW51eC1nbnUvbGliYy5zby42CisgIChnZGIpIGJ0CisgICMwICAweGY3ZTk1N2UwIGluIGZyZWUgKCkgZnJvbSAvbGliL2kzODYtbGludXgtZ251L2xpYmMuc28uNgorICAjMSAgMHgwODA0YjczYyBpbiBzZXRfbXVsdGlsaWJfZGlyICgpIGF0IGdjYy00LjkuMC9nY2MvZ2NjLmM6NzgyNworICAjMiAgbWFpbiAoYXJnYz0xLCBhcmd2PTB4ZmZmZmQ1MDQpIGF0IGdjYy00LjkuMC9nY2MvZ2NjLmM6NjY4OAorICAoZ2RiKQorCitUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSB3ZSBjb25kaXRpb25hbGx5IGFzc2lnbiB0aGUgcG9pbnRlciB3ZQorZXZlbnR1YWxseSBmcmVlLCBhbmQgdGhlIGNvbmRpdGlvbmFsIG1heSBhc3NpZ24gdGhlIHBvaW50ZXIgdG8gdGhlCitub24tbWFsbG9jJ2QgaW50ZXJuYWwgc3RyaW5nICIuIiB3aGljaCBmYWlscyB3aGVuIHdlIGZyZWUgaXQgaGVyZToKKworICAgaWYgKG11bHRpbGliX2RpciA9PSBOVUxMICYmIG11bHRpbGliX29zX2RpciAhPSBOVUxMCisgICAgICAgJiYgc3RyY21wIChtdWx0aWxpYl9vc19kaXIsICIuIikgPT0gMCkKKyAgICAgeworICAgICAgIGZyZWUgKENPTlNUX0NBU1QgKGNoYXIgKiwgbXVsdGlsaWJfb3NfZGlyKSk7CisgICAgICAgLi4uCisKK0FzIHN1Z2dlc3RlZCBieSBKYWt1YiwgZW5zdXJlIHRoZSAiLiIgY2FzZSBpcyBhbHNvIG1hbGxvYydkIHZpYQoreHN0cmR1cCgpIGFuZCBoZW5jZSB0aGUgcG9pbnRlciBmb3IgdGhlICIuIiBjYXNlIGNhbiBiZSBmcmVlZC4KKworQ2M6IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CitDYzogSmVmZiBMYXcgPGxhd0ByZWRoYXQuY29tPgorQ2M6IE1hdHRoaWFzIEtsb3NlIDxkb2tvQHVidW50dS5jb20+CitDQzogVG9iaWFzIEJ1cm51cyA8YnVybnVzQG5ldC1iLmRlPgorVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCBbIGh0dHBzOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAxNC0wNi9tc2cwMjA2OS5odG1sIF0KK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCA5YWMxOGU2MGQ4MDEuLjE2OGFjZjdlYjBjOSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNzc5MCwxMCArNzc5MCwxNSBAQCBzZXRfbXVsdGlsaWJfZGlyICh2b2lkKQorIAkJcTIrKzsKKyAJICAgICAgaWYgKCpxMiA9PSAnOicpCisgCQltbF9lbmQgPSBxMjsKKy0JICAgICAgbmV3X211bHRpbGliX29zX2RpciA9IFhORVdWRUMgKGNoYXIsIG1sX2VuZCAtIHEpOworLQkgICAgICBtZW1jcHkgKG5ld19tdWx0aWxpYl9vc19kaXIsIHEgKyAxLCBtbF9lbmQgLSBxIC0gMSk7CistCSAgICAgIG5ld19tdWx0aWxpYl9vc19kaXJbbWxfZW5kIC0gcSAtIDFdID0gJ1wwJzsKKy0JICAgICAgbXVsdGlsaWJfb3NfZGlyID0gKm5ld19tdWx0aWxpYl9vc19kaXIgPyBuZXdfbXVsdGlsaWJfb3NfZGlyIDogIi4iOworKwkgICAgICBpZiAobWxfZW5kIC0gcSA9PSAxKQorKwkJbXVsdGlsaWJfb3NfZGlyID0geHN0cmR1cCAoIi4iKTsKKysJICAgICAgZWxzZQorKwkJeworKwkJICBuZXdfbXVsdGlsaWJfb3NfZGlyID0gWE5FV1ZFQyAoY2hhciwgbWxfZW5kIC0gcSk7CisrCQkgIG1lbWNweSAobmV3X211bHRpbGliX29zX2RpciwgcSArIDEsIG1sX2VuZCAtIHEgLSAxKTsKKysJCSAgbmV3X211bHRpbGliX29zX2RpclttbF9lbmQgLSBxIC0gMV0gPSAnXDAnOworKwkJICBtdWx0aWxpYl9vc19kaXIgPSBuZXdfbXVsdGlsaWJfb3NfZGlyOworKwkJfQorIAorIAkgICAgICBpZiAocTIgPCBlbmQgJiYgKnEyID09ICc6JykKKyAJCXsKKy0tIAorMS45LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTQtZ2NjLU1ha2VmaWxlLmluLWZpeC1wYXJhbGxlbC1idWlsZGluZy1mYWlsdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGVmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NC1nY2MtTWFrZWZpbGUuaW4tZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWZhaWx1cmUucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorZ2NjL01ha2VmaWxlLmluOiBmaXggcGFyYWxsZWwgYnVpbGRpbmcgZmFpbHVyZQorCitUaGUgZ2NjLWFyLm8sIGdjYy1ubS5vLCBnY2MtcmFubGliLm8gYW5kIGVycm9ycy5vIGluY2x1ZGVkCitjb25maWcuaCB3aGljaCB3YXMgYSBnZW5lcmF0ZWQgZmlsZS4gQnV0IG5vIGV4cGxpY2l0eSBydWxlCit0byBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5LiBUaGVyZSB3YXMgcG90ZW50aWFsIGJ1aWxkaW5nCitmYWlsdXJlIHdoaWxlIHBhcmFsbGVsIG1ha2UuCisKK0ZvciBnY2MtYXIubywgZ2NjLW5tLm8gYW5kIGdjYy1yYW5saWIubywgdGhleSB3ZXJlIGNvbXBpbGVkIGZyb20gb25lIEMKK3NvdXJjZSBmaWxlIGdjYy1hci5jLCB3ZSBhZGQgdGhlbSB0byBBTExfSE9TVF9CQUNLRU5EX09CSlMsIHNvIHRoZQorJyQoQUxMX0hPU1RfT0JKUykgOiB8ICQoZ2VuZXJhdGVkX2ZpbGVzKScgcnVsZSBjb3VsZCB3b3JrIGZvciB0aGVzZQorb2JqZWN0cy4KKworRm9yIGVycm9ycy5vLCBpdCBpcyBwYXJ0IG9mIGdlbmd0eXBlLCBhbmQgdGhlIGdlbmd0eXBlIGdlbmVyYXRvciBwcm9ncmFtCitpcyBzcGVjaWFsOiBUd28gdmVyc2lvbnMgYXJlIGJ1aWx0LiBPbmUgaXMgZm9yIHRoZSBidWlsZCBtYWNoaW5lLCBhbmQgb25lCitpcyBmb3IgdGhlIGhvc3QuIFdlIHJlZmVyZWQgd2hhdCBnZW5ndHlwZS1wYXJzZS5vIGRpZCAod2hpY2ggYWxzbyBpcyBwYXJ0CitvZiBnZW5ndHlwZSkuCisKK1tHQ0MgIzYxODk5XQoraHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjE4OTkKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2djYy1wYXRjaGVzQGdjYy5nbnUub3JnXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gfCA3ICsrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvTWFrZWZpbGUuaW4gYi9nY2MvTWFrZWZpbGUuaW4KK2luZGV4IDY0NzVjYmEuLjU2ZTUwYmIgMTAwNjQ0CistLS0gYS9nY2MvTWFrZWZpbGUuaW4KKysrKyBiL2djYy9NYWtlZmlsZS5pbgorQEAgLTE0ODEsMTMgKzE0ODEsMTYgQEAgT0JKUy1saWJjb21tb24tdGFyZ2V0ID0gJChjb21tb25fb3V0X29iamVjdF9maWxlKSBwcmVmaXgubyBwYXJhbXMubyBcCisgCW9wdHMubyBvcHRzLWNvbW1vbi5vIG9wdGlvbnMubyB2ZWMubyBob29rcy5vIGNvbW1vbi9jb21tb24tdGFyZ2hvb2tzLm8gXAorIAloYXNoLXRhYmxlLm8gZmlsZS1maW5kLm8KKyAKKysjIE9iamVjdHMgY29tcGlsZWQgZnJvbSBvbmUgQyBzb3VyY2UgZmlsZSBnY2MtYXIuYworK09CSlMtZ2NjLWFyID0gZ2NjLWFyLm8gZ2NjLW5tLm8gZ2NjLXJhbmxpYi5vCisrCisgIyBUaGlzIGxpc3RzIGFsbCBob3N0IG9iamVjdHMgZm9yIHRoZSBmcm9udCBlbmRzLgorIEFMTF9IT1NUX0ZST05URU5EX09CSlMgPSAkKGZvcmVhY2ggdiwkKENPTkZJR19MQU5HVUFHRVMpLCQoJCh2KV9PQkpTKSkKKyAKKyBBTExfSE9TVF9CQUNLRU5EX09CSlMgPSAkKEdDQ19PQkpTKSAkKE9CSlMpICQoT0JKUy1saWJjb21tb24pIFwKKyAgICQoT0JKUy1saWJjb21tb24tdGFyZ2V0KSBAVFJFRUJST1dTRVJAIG1haW4ubyBjLWZhbWlseS9jcHBzcGVjLm8gXAorICAgJChDT0xMRUNUMl9PQkpTKSAkKEVYVFJBX0dDQ19PQkpTKSAkKEdDT1ZfT0JKUykgJChHQ09WX0RVTVBfT0JKUykgXAorLSAgbHRvLXdyYXBwZXIubworKyAgbHRvLXdyYXBwZXIubyAkKE9CSlMtZ2NjLWFyKQorIAorICMgVGhpcyBsaXN0cyBhbGwgaG9zdCBvYmplY3QgZmlsZXMsIHdoZXRoZXIgdGhleSBhcmUgaW5jbHVkZWQgaW4gdGhpcworICMgY29tcGlsYXRpb24gb3Igbm90LgorQEAgLTI0MzcsNiArMjQ0MCw4IEBAIGdlbmd0eXBlLXBhcnNlLm86ICQoQ09ORklHX0gpCisgQ0ZMQUdTLWJ1aWxkL2dlbmd0eXBlLXBhcnNlLm8gKz0gLURHRU5FUkFUT1JfRklMRQorIGJ1aWxkL2dlbmd0eXBlLXBhcnNlLm86ICQoQkNPTkZJR19IKQorIAorK2Vycm9ycy5vIDogJChDT05GSUdfSCkKKysKKyBnZW5ndHlwZS1zdGF0ZS5vIGJ1aWxkL2dlbmd0eXBlLXN0YXRlLm86IGdlbmd0eXBlLXN0YXRlLmMgJChTWVNURU1fSCkgXAorICAgZ2VuZ3R5cGUuaCBlcnJvcnMuaCBkb3VibGUtaW50LmggdmVyc2lvbi5oICQoSEFTSFRBQl9IKSAkKE9CU1RBQ0tfSCkgXAorICAgJChYUkVHRVhfSCkKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1NS1kd2FyZi1yZWctcHJvY2Vzc2luZy1oZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3ZGFiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU1LWR3YXJmLXJlZy1wcm9jZXNzaW5nLWhlbHBlci5wYXRjaApAQCAtMCwwICsxLDE0OCBAQAorRnJvbSA0ZmQzOWYxMzI5Mzc5ZTAwZjk1ODM5NGFkZGU2YmU5NmYwY2FmMjFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogaGFpbnF1ZSA8aGFpbnF1ZUAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBGcmksIDUgRGVjIDIwMTQgMTY6NTM6MjIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gMjAxNC0xMi0wNSAgT2xpdmllciBIYWlucXVlICA8aGFpbnF1ZUBhZGFjb3JlLmNvbT4KKworICAgICAgICAqIGR3YXJmMmNmaS5jIChpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSk6IE5ldyBoZWxwZXIsIHByb2Nlc3NpbmcKKyAgICAgICAgb25lIHBhcnRpY3VsYXIgcmVnIGZvciBleHBhbmRfYnVpbHRpbl9pbml0X2R3YXJmX3JlZ19zaXplcy4KKyAgICAgICAgKGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzKTogUmV3b3JrIHRvIHVzZSBoZWxwZXIgYW5kCisgICAgICAgIGFjY291bnQgZm9yIGR3YXJmIHJlZ2lzdGVyIHNwYW5zLgorCisKKworZ2l0LXN2bi1pZDogc3ZuK3NzaDovL2djYy5nbnUub3JnL3N2bi9nY2MvdHJ1bmtAMjE4NDI4IDEzOGJjNzVkLTBkMDQtMDQxMC05NjFmLTgyZWU3MmIwNTRhNAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbZ2NjIDUuMF0KKworLS0tCisgZ2NjL0NoYW5nZUxvZyAgIHwgIDcgKysrKysKKyBnY2MvZHdhcmYyY2ZpLmMgfCA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDg1IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9kd2FyZjJjZmkuYworKysrIGdjYy00LjkuMi9nY2MvZHdhcmYyY2ZpLmMKK0BAIC0yNTIsNyArMjUyLDU5IEBAIGluaXRfcmV0dXJuX2NvbHVtbl9zaXplIChlbnVtIG1hY2hpbmVfbW8KKyAJCSAgZ2VuX2ludF9tb2RlIChzaXplLCBtb2RlKSk7CisgfQorIAorLS8qIEdlbmVyYXRlIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgcmVnaXN0ZXIgc2l6ZSB0YWJsZS4gICovCisrLyogRGF0YXN0cnVjdHVyZSB1c2VkIGJ5IGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzIGFuZAorKyAgIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIHRvIGNvbW11bmljYXRlIG9uIHdoYXQgaGFzIGJlZW4gZG9uZSBieSB0aGUKKysgICBsYXR0ZXIuICAqLworKworK3R5cGVkZWYgc3RydWN0CisreworKyAgLyogV2hldGhlciB0aGUgZHdhcmYgcmV0dXJuIGNvbHVtbiB3YXMgaW5pdGlhbGl6ZWQuICAqLworKyAgYm9vbCB3cm90ZV9yZXR1cm5fY29sdW1uOworKworKyAgLyogRm9yIGVhY2ggaGFyZCByZWdpc3RlciBSRUdOTywgd2hldGhlciBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZQorKyAgICAgd2FzIGdpdmVuIFJFR05PIHRvIHByb2Nlc3MgYWxyZWFkeS4gICovCisrICBib29sIHByb2Nlc3NlZF9yZWdubyBbRklSU1RfUFNFVURPX1JFR0lTVEVSXTsKKysKKyt9IGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZTsKKysKKysvKiBIZWxwZXIgZm9yIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzLiAgR2VuZXJhdGUgY29kZSB0bworKyAgIGluaXRpYWxpemUgdGhlIGR3YXJmIHJlZ2lzdGVyIHNpemUgdGFibGUgZW50cnkgY29ycmVzcG9uZGluZyB0byByZWdpc3RlcgorKyAgIFJFR05PIGluIFJFR01PREUuICBUQUJMRSBpcyB0aGUgdGFibGUgYmFzZSBhZGRyZXNzLCBTTE9UTU9ERSBpcyB0aGUgbW9kZSB0bworKyAgIHVzZSBmb3IgdGhlIHNpemUgZW50cnkgdG8gaW5pdGlhbGl6ZSwgYW5kIElOSVRfU1RBVEUgaXMgdGhlIGNvbW11bmljYXRpb24KKysgICBkYXRhc3RydWN0dXJlIGNvbnZleWluZyB3aGF0IHdlJ3JlIGRvaW5nIHRvIG91ciBjYWxsZXIuICAqLworKworK3N0YXRpYworK3ZvaWQgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUgKGludCByZWdubywgbWFjaGluZV9tb2RlIHJlZ21vZGUsCisrCQkJICAgICAgcnR4IHRhYmxlLCBtYWNoaW5lX21vZGUgc2xvdG1vZGUsCisrCQkJICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3N0YXRlICppbml0X3N0YXRlKQorK3sKKysgIGNvbnN0IHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChyZWdubyk7CisrICBjb25zdCB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKKysKKysgIGNvbnN0IEhPU1RfV0lERV9JTlQgc2xvdG9mZnNldCA9IHJudW0gKiBHRVRfTU9ERV9TSVpFIChzbG90bW9kZSk7CisrICBjb25zdCBIT1NUX1dJREVfSU5UIHJlZ3NpemUgPSBHRVRfTU9ERV9TSVpFIChyZWdtb2RlKTsKKysKKysgIGluaXRfc3RhdGUtPnByb2Nlc3NlZF9yZWdub1tyZWdub10gPSB0cnVlOworKworKyAgaWYgKHJudW0gPj0gRFdBUkZfRlJBTUVfUkVHSVNURVJTKQorKyAgICByZXR1cm47CisrCisrICBpZiAoZG51bSA9PSBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKQorKyAgICB7CisrICAgICAgaWYgKHJlZ21vZGUgPT0gVk9JRG1vZGUpCisrCXJldHVybjsKKysgICAgICBpbml0X3N0YXRlLT53cm90ZV9yZXR1cm5fY29sdW1uID0gdHJ1ZTsKKysgICAgfQorKworKyAgaWYgKHNsb3RvZmZzZXQgPCAwKQorKyAgICByZXR1cm47CisrCisrICBlbWl0X21vdmVfaW5zbiAoYWRqdXN0X2FkZHJlc3MgKHRhYmxlLCBzbG90bW9kZSwgc2xvdG9mZnNldCksCisrCQkgIGdlbl9pbnRfbW9kZSAocmVnc2l6ZSwgc2xvdG1vZGUpKTsKKyt9CisrCisrLyogR2VuZXJhdGUgY29kZSB0byBpbml0aWFsaXplIHRoZSBkd2FyZiByZWdpc3RlciBzaXplIHRhYmxlIGxvY2F0ZWQKKysgICBhdCB0aGUgcHJvdmlkZWQgQUREUkVTUy4gICovCisgCisgdm9pZAorIGV4cGFuZF9idWlsdGluX2luaXRfZHdhcmZfcmVnX3NpemVzICh0cmVlIGFkZHJlc3MpCitAQCAtMjYxLDM1ICszMTMsNDAgQEAgZXhwYW5kX2J1aWx0aW5faW5pdF9kd2FyZl9yZWdfc2l6ZXMgKHRyZQorICAgZW51bSBtYWNoaW5lX21vZGUgbW9kZSA9IFRZUEVfTU9ERSAoY2hhcl90eXBlX25vZGUpOworICAgcnR4IGFkZHIgPSBleHBhbmRfbm9ybWFsIChhZGRyZXNzKTsKKyAgIHJ0eCBtZW0gPSBnZW5fcnR4X01FTSAoQkxLbW9kZSwgYWRkcik7CistICBib29sIHdyb3RlX3JldHVybl9jb2x1bW4gPSBmYWxzZTsKKysKKysgIGluaXRfb25lX2R3YXJmX3JlZ19zdGF0ZSBpbml0X3N0YXRlOworKworKyAgbWVtc2V0ICgoY2hhciAqKSZpbml0X3N0YXRlLCAwLCBzaXplb2YgKGluaXRfc3RhdGUpKTsKKyAKKyAgIGZvciAoaSA9IDA7IGkgPCBGSVJTVF9QU0VVRE9fUkVHSVNURVI7IGkrKykKKyAgICAgeworLSAgICAgIHVuc2lnbmVkIGludCBkbnVtID0gRFdBUkZfRlJBTUVfUkVHTlVNIChpKTsKKy0gICAgICB1bnNpZ25lZCBpbnQgcm51bSA9IERXQVJGMl9GUkFNRV9SRUdfT1VUIChkbnVtLCAxKTsKKy0KKy0gICAgICBpZiAocm51bSA8IERXQVJGX0ZSQU1FX1JFR0lTVEVSUykKKy0JeworLQkgIEhPU1RfV0lERV9JTlQgb2Zmc2V0ID0gcm51bSAqIEdFVF9NT0RFX1NJWkUgKG1vZGUpOworLQkgIEhPU1RfV0lERV9JTlQgc2l6ZTsKKy0JICBlbnVtIG1hY2hpbmVfbW9kZSBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKKysgICAgICBtYWNoaW5lX21vZGUgc2F2ZV9tb2RlOworKyAgICAgIHJ0eCBzcGFuOworIAorLQkgIGlmIChkbnVtID09IERXQVJGX0ZSQU1FX1JFVFVSTl9DT0xVTU4pCisrICAgICAgLyogTm8gcG9pbnQgaW4gcHJvY2Vzc2luZyBhIHJlZ2lzdGVyIG11bHRpcGxlIHRpbWVzLiAgVGhpcyBjb3VsZCBoYXBwZW4KKysgICAgICAgIHdpdGggcmVnaXN0ZXIgc3BhbnMsIGUuZy4gd2hlbiBhIHJlZyBpcyBmaXJzdCBwcm9jZXNzZWQgYXMgYSBwaWVjZSBvZgorKyAgICAgICAgYSBzcGFuLCB0aGVuIGFzIGEgcmVnaXN0ZXIgb24gaXRzIG93biBsYXRlciBvbi4gICovCisrCisrICAgICAgaWYgKGluaXRfc3RhdGUucHJvY2Vzc2VkX3JlZ25vW2ldKQorKyAgICAgICBjb250aW51ZTsKKysKKysgICAgICBzYXZlX21vZGUgPSB0YXJnZXRtLmR3YXJmX2ZyYW1lX3JlZ19tb2RlIChpKTsKKysgICAgICBzcGFuID0gdGFyZ2V0bS5kd2FyZl9yZWdpc3Rlcl9zcGFuIChnZW5fcnR4X1JFRyAoc2F2ZV9tb2RlLCBpKSk7CisrICAgICAgaWYgKCFzcGFuKQorKyAgICAgICBpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSAoaSwgc2F2ZV9tb2RlLCBtZW0sIG1vZGUsICZpbml0X3N0YXRlKTsKKysgICAgICBlbHNlCisrICAgICAgIHsKKysgICAgICAgICBmb3IgKGludCBzaSA9IDA7IHNpIDwgWFZFQ0xFTiAoc3BhbiwgMCk7IHNpKyspCisgCSAgICB7CistCSAgICAgIGlmIChzYXZlX21vZGUgPT0gVk9JRG1vZGUpCistCQljb250aW51ZTsKKy0JICAgICAgd3JvdGVfcmV0dXJuX2NvbHVtbiA9IHRydWU7CistCSAgICB9CistCSAgc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHNhdmVfbW9kZSk7CistCSAgaWYgKG9mZnNldCA8IDApCistCSAgICBjb250aW51ZTsKKysgICAgICAgICAgICAgcnR4IHJlZyA9IFhWRUNFWFAgKHNwYW4sIDAsIHNpKTsKKysgICAgICAgICAgICAgaW5pdF9vbmVfZHdhcmZfcmVnX3NpemUKKysgICAgICAgICAgICAgICAoUkVHTk8gKHJlZyksIEdFVF9NT0RFIChyZWcpLCBtZW0sIG1vZGUsICZpbml0X3N0YXRlKTsKKysgICAgICAgICAgIH0KKyAKKy0JICBlbWl0X21vdmVfaW5zbiAoYWRqdXN0X2FkZHJlc3MgKG1lbSwgbW9kZSwgb2Zmc2V0KSwKKy0JCQkgIGdlbl9pbnRfbW9kZSAoc2l6ZSwgbW9kZSkpOworIAl9CisgICAgIH0KKyAKKy0gIGlmICghd3JvdGVfcmV0dXJuX2NvbHVtbikKKysgIGlmICghaW5pdF9zdGF0ZS53cm90ZV9yZXR1cm5fY29sdW1uKQorICAgICBpbml0X3JldHVybl9jb2x1bW5fc2l6ZSAobW9kZSwgbWVtLCBEV0FSRl9GUkFNRV9SRVRVUk5fQ09MVU1OKTsKKyAKKyAjaWZkZWYgRFdBUkZfQUxUX0ZSQU1FX1JFVFVSTl9DT0xVTU4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTYtZGVmaW5lLWRlZmF1bHQtY2ZhLXJlZ2lzdGVyLW1hcHBpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2Yzk0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU2LWRlZmluZS1kZWZhdWx0LWNmYS1yZWdpc3Rlci1tYXBwaW5nLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK0Zyb20gYzAyMzVhMzNkZThjNGY3OGNjZTM1YjJhOGMyMDM1YzgzZmUxYmQxNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGhhaW5xdWUgPGhhaW5xdWVAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogRnJpLCA1IERlYyAyMDE0IDE3OjAxOjQyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIDIwMTQtMTItMDUgIE9saXZpZXIgSGFpbnF1ZSAgPGhhaW5xdWVAYWRhY29yZS5jb20+CisKKyAgICAgICAgZ2NjLworICAgICAgICAqIGRlZmF1bHRzLmg6IChEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTik6IERlZmluZSBkZWZhdWx0LgorICAgICAgICAqIGR3YXJmMmNmaS5jIChpbml0X29uZV9kd2FyZl9yZWdfc2l6ZSk6IEhvbm9yCisgICAgICAgIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OLgorCisgICAgICAgIGxpYmdjYy8KKyAgICAgICAgKiB1bndpbmQtZHcyLmMgKERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKTogUmVtb3ZlIGRlZmF1bHQgZGVmLAorICAgICAgICBub3cgcHJvdmlkZWQgYnkgZGVmYXVsdHMuaC4KKworCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxODQyOSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2djYyA1LjBdCisKKy0tLQorIGdjYy9DaGFuZ2VMb2cgICAgICAgfCA2ICsrKysrKworIGdjYy9kZWZhdWx0cy5oICAgICAgfCA1ICsrKysrCisgZ2NjL2R3YXJmMmNmaS5jICAgICB8IDMgKystCisgbGliZ2NjL0NoYW5nZUxvZyAgICB8IDUgKysrKysKKyBsaWJnY2MvdW53aW5kLWR3Mi5jIHwgNCAtLS0tCisgNSBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitJbmRleDogZ2NjLTQuOS4yL2djYy9kZWZhdWx0cy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2RlZmF1bHRzLmgKKysrKyBnY2MtNC45LjIvZ2NjL2RlZmF1bHRzLmgKK0BAIC00MzgsNiArNDM4LDExIEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVEkKKyAjZGVmaW5lIERXQVJGX0ZSQU1FX1JFR05VTShSRUcpIERCWF9SRUdJU1RFUl9OVU1CRVIgKFJFRykKKyAjZW5kaWYKKyAKKysvKiBUaGUgbWFwcGluZyBmcm9tIGR3YXJmIENGQSByZWcgbnVtYmVyIHRvIGludGVybmFsIGR3YXJmIHJlZyBudW1iZXJzLiAgKi8KKysjaWZuZGVmIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OCisrI2RlZmluZSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTihSRUdOTykgKFJFR05PKQorKyNlbmRpZgorKworIC8qIE1hcCByZWdpc3RlciBudW1iZXJzIGhlbGQgaW4gdGhlIGNhbGwgZnJhbWUgaW5mbyB0aGF0IGdjYyBoYXMKKyAgICBjb2xsZWN0ZWQgdXNpbmcgRFdBUkZfRlJBTUVfUkVHTlVNIHRvIHRob3NlIHRoYXQgc2hvdWxkIGJlIG91dHB1dCBpbgorICAgIC5kZWJ1Z19mcmFtZSBhbmQgLmVoX2ZyYW1lLiAgKi8KK0luZGV4OiBnY2MtNC45LjIvZ2NjL2R3YXJmMmNmaS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOS4yLm9yaWcvZ2NjL2R3YXJmMmNmaS5jCisrKysgZ2NjLTQuOS4yL2djYy9kd2FyZjJjZmkuYworQEAgLTI4MCw4ICsyODAsOSBAQCB2b2lkIGluaXRfb25lX2R3YXJmX3JlZ19zaXplIChpbnQgcmVnbm8sCisgeworICAgY29uc3QgdW5zaWduZWQgaW50IGRudW0gPSBEV0FSRl9GUkFNRV9SRUdOVU0gKHJlZ25vKTsKKyAgIGNvbnN0IHVuc2lnbmVkIGludCBybnVtID0gRFdBUkYyX0ZSQU1FX1JFR19PVVQgKGRudW0sIDEpOworKyAgY29uc3QgdW5zaWduZWQgaW50IGRjb2wgPSBEV0FSRl9SRUdfVE9fVU5XSU5EX0NPTFVNTiAocm51bSk7CisgCistICBjb25zdCBIT1NUX1dJREVfSU5UIHNsb3RvZmZzZXQgPSBybnVtICogR0VUX01PREVfU0laRSAoc2xvdG1vZGUpOworKyAgY29uc3QgSE9TVF9XSURFX0lOVCBzbG90b2Zmc2V0ID0gZGNvbCAqIEdFVF9NT0RFX1NJWkUgKHNsb3Rtb2RlKTsKKyAgIGNvbnN0IEhPU1RfV0lERV9JTlQgcmVnc2l6ZSA9IEdFVF9NT0RFX1NJWkUgKHJlZ21vZGUpOworIAorICAgaW5pdF9zdGF0ZS0+cHJvY2Vzc2VkX3JlZ25vW3JlZ25vXSA9IHRydWU7CitJbmRleDogZ2NjLTQuOS4yL2xpYmdjYy91bndpbmQtZHcyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjIub3JpZy9saWJnY2MvdW53aW5kLWR3Mi5jCisrKysgZ2NjLTQuOS4yL2xpYmdjYy91bndpbmQtZHcyLmMKK0BAIC01NSwxMCArNTUsNiBAQAorICNkZWZpbmUgUFJFX0dDQzNfRFdBUkZfRlJBTUVfUkVHSVNURVJTIERXQVJGX0ZSQU1FX1JFR0lTVEVSUworICNlbmRpZgorIAorLSNpZm5kZWYgRFdBUkZfUkVHX1RPX1VOV0lORF9DT0xVTU4KKy0jZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSAoUkVHTk8pCistI2VuZGlmCistCisgLyogPz8/IEZvciB0aGUgcHVibGljIGZ1bmN0aW9uIGludGVyZmFjZXMsIHdlIHRlbmQgdG8gZ2NjX2Fzc2VydCB0aGF0IHRoZQorICAgIGNvbHVtbiBudW1iZXJzIGFyZSBpbiByYW5nZS4gIEZvciB0aGUgZHdhcmYyIHVud2luZCBpbmZvIHRoaXMgZG9lcyBoYXBwZW4sCisgICAgYWx0aG91Z2ggc28gZmFyIGluIGEgY2FzZSB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgbWF0dGVyLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1Ny1hYXJjaDY0LWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjk1NTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTctYWFyY2g2NC1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRGlzYWJsZSB0aGUgTVVMVElMSUJfT1NESVJOQU1FUyBhbmQgb3RoZXIgbXVsdGlsaWIgb3B0aW9ucy4KKworSGFyZCBjb2RpbmcgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgd2l0aCAuLi9saWI2NCBpcyBjYXVzaW5nIHByb2JsZW1zIG9uCitzeXN0ZW1zIHdoZXJlIHRoZSBsaWJkaXIgaXMgTk9UIHNldCB0byAvbGliNjQuICBUaGlzIGlzIGFsbG93ZWQgYnkgdGhlIEFCSSwgYXMKK2xvbmcgYXMgdGhlIGR5bmFtaWMgbG9hZGVyIGlzIHByZXNlbnQgaW4gL2xpYi4KKworV2Ugc2ltcGx5IHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IHJ1bGVzIGluIGdjYyB0byBmaW5kIGFuZCBjb25maWd1cmUgdGhlIAorbm9ybWFsIGxpYmRpci4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogZ2NjLTQuOS4xL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC45LjEub3JpZy9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CisrKysgZ2NjLTQuOS4xL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK0BAIC0yMSwxMSArMjEsMTEgQEAKKyBMSUIxQVNNU1JDICAgPSBhYXJjaDY0L2xpYjFmdW5jcy5hc20KKyBMSUIxQVNNRlVOQ1MgPSBfYWFyY2g2NF9zeW5jX2NhY2hlX3JhbmdlCisgCistQUFSQ0hfQkUgPSAkKGlmICQoZmluZHN0cmluZyBUQVJHRVRfQklHX0VORElBTl9ERUZBVUxUPTEsICQodG1fZGVmaW5lcykpLF9iZSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gLj0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOmFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCistTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisrI0FBUkNIX0JFID0gJChpZiAkKGZpbmRzdHJpbmcgVEFSR0VUX0JJR19FTkRJQU5fREVGQVVMVD0xLCAkKHRtX2RlZmluZXMpKSxfYmUpCisrI01VTFRJTElCX09TRElSTkFNRVMgPSAuPS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisgCisgIyBEaXNhYmxlIHRoZSBtdWx0aWxpYiBmb3IgbGludXgtZ251IHRhcmdldHMgZm9yIHRoZSB0aW1lIGJlaW5nOyBmb2N1cworICMgb24gdGhlIGJhcmVtZXRhbCB0YXJnZXRzLgorLU1VTFRJTElCX09QVElPTlMgICAgPQorLU1VTFRJTElCX0RJUk5BTUVTICAgPQorKyNNVUxUSUxJQl9PUFRJT05TICAgID0KKysjTVVMVElMSUJfRElSTkFNRVMgICA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU4LWdjYy1yMjEyMTcxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDJiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA1OC1nY2MtcjIxMjE3MS5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSBjYTAzY2YxYjEzM2Q2NmViOTc4YzY4ZjZkYmMzNDVlOWFhYmNiYTg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogdXJvcyA8dXJvc0AxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQ+CitEYXRlOiBNb24sIDMwIEp1biAyMDE0IDE5OjMwOjUyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHIyMTIxNzEKKworKiBleGNlcHQuYyAoZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQpOiBOZXcgaGVscGVyCisgZnVuY3Rpb24uIAkoY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzKTogVXNlCisgZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgdG8gCWVtaXQgRUhfUkVHSU9OX0VORCBub3RlLiAKKyAqIGp1bXAuYyAoY2xlYW51cF9iYXJyaWVycyk6IERvIG5vdCBzcGxpdCBhIGNhbGwgYW5kIGl0cyAKKyBjb3JyZXNwb25kaW5nIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuCisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxMjE3MSAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9nY2MuZ251Lm9yZy92aWV3Y3ZzL2djYz92aWV3PXJldmlzaW9uJnJldmlzaW9uPTIxMjE3MV0KK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8YmFvc2hhbi5wYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvZXhjZXB0LmMgfCAgIDIzICsrKysrKysrKysrKysrKysrKy0tLS0tCisgZ2NjL2p1bXAuYyAgIHwgICAxOSArKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2V4Y2VwdC5jIGIvZ2NjL2V4Y2VwdC5jCitpbmRleCBkYzVjMWQyLi43YWMxMTRmIDEwMDY0NAorLS0tIGEvZ2NjL2V4Y2VwdC5jCisrKysgYi9nY2MvZXhjZXB0LmMKK0BAIC0yNDY2LDYgKzI0NjYsMjAgQEAgYWRkX2NhbGxfc2l0ZSAocnR4IGxhbmRpbmdfcGFkLCBpbnQgYWN0aW9uLCBpbnQgc2VjdGlvbikKKyAgIHJldHVybiBjYWxsX3NpdGVfYmFzZSArIGNydGwtPmVoLmNhbGxfc2l0ZV9yZWNvcmRfdltzZWN0aW9uXS0+bGVuZ3RoICgpIC0gMTsKKyB9CisgCisrc3RhdGljIHJ0eAorK2VtaXRfbm90ZV9laF9yZWdpb25fZW5kIChydHggaW5zbikKKyt7CisrICBydHggbmV4dCA9IE5FWFRfSU5TTiAoaW5zbik7CisrCisrICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IHNwbGl0IGEgY2FsbCBhbmQgaXRzIGNvcnJlc3BvbmRpbmcKKysgICAgIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuICAqLworKyAgaWYgKG5leHQgJiYgTk9URV9QIChuZXh0KQorKyAgICAgICYmIE5PVEVfS0lORCAobmV4dCkgPT0gTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OKQorKyAgICBpbnNuID0gbmV4dDsKKysKKysgIHJldHVybiBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELCBpbnNuKTsKKyt9CisrCisgLyogVHVybiBSRUdfRUhfUkVHSU9OIG5vdGVzIGJhY2sgaW50byBOT1RFX0lOU05fRUhfUkVHSU9OIG5vdGVzLgorICAgIFRoZSBuZXcgbm90ZSBudW1iZXJzIHdpbGwgbm90IHJlZmVyIHRvIHJlZ2lvbiBudW1iZXJzLCBidXQKKyAgICBpbnN0ZWFkIHRvIGNhbGwgc2l0ZSBlbnRyaWVzLiAgKi8KK0BAIC0yNTQ0LDggKzI1NTgsOCBAQCBjb252ZXJ0X3RvX2VoX3JlZ2lvbl9yYW5nZXMgKHZvaWQpCisgCQlub3RlID0gZW1pdF9ub3RlX2JlZm9yZSAoTk9URV9JTlNOX0VIX1JFR0lPTl9CRUcsCisgCQkJCQkgZmlyc3Rfbm9fYWN0aW9uX2luc25fYmVmb3JlX3N3aXRjaCk7CisgCQlOT1RFX0VIX0hBTkRMRVIgKG5vdGUpID0gY2FsbF9zaXRlOworLQkJbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsCistCQkJCQlsYXN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOworKwkJbm90ZQorKwkJICA9IGVtaXRfbm90ZV9laF9yZWdpb25fZW5kIChsYXN0X25vX2FjdGlvbl9pbnNuX2JlZm9yZV9zd2l0Y2gpOworIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKyAJCWdjY19hc3NlcnQgKGxhc3RfYWN0aW9uICE9IC0zCisgCQkJICAgIHx8IChsYXN0X2FjdGlvbl9pbnNuCitAQCAtMjU2OSw4ICsyNTgzLDcgQEAgY29udmVydF90b19laF9yZWdpb25fcmFuZ2VzICh2b2lkKQorIAkJICAgIGZpcnN0X25vX2FjdGlvbl9pbnNuID0gTlVMTF9SVFg7CisgCQkgIH0KKyAKKy0JCW5vdGUgPSBlbWl0X25vdGVfYWZ0ZXIgKE5PVEVfSU5TTl9FSF9SRUdJT05fRU5ELAorLQkJCQkJbGFzdF9hY3Rpb25faW5zbik7CisrCQlub3RlID0gZW1pdF9ub3RlX2VoX3JlZ2lvbl9lbmQgKGxhc3RfYWN0aW9uX2luc24pOworIAkJTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKyAJICAgICAgfQorIAorQEAgLTI2MTcsNyArMjYzMCw3IEBAIGNvbnZlcnRfdG9fZWhfcmVnaW9uX3JhbmdlcyAodm9pZCkKKyAKKyAgIGlmIChsYXN0X2FjdGlvbiA+PSAtMSAmJiAhIGZpcnN0X25vX2FjdGlvbl9pbnNuKQorICAgICB7CistICAgICAgbm90ZSA9IGVtaXRfbm90ZV9hZnRlciAoTk9URV9JTlNOX0VIX1JFR0lPTl9FTkQsIGxhc3RfYWN0aW9uX2luc24pOworKyAgICAgIG5vdGUgPSBlbWl0X25vdGVfZWhfcmVnaW9uX2VuZCAobGFzdF9hY3Rpb25faW5zbik7CisgICAgICAgTk9URV9FSF9IQU5ETEVSIChub3RlKSA9IGNhbGxfc2l0ZTsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2djYy9qdW1wLmMgYi9nY2MvanVtcC5jCitpbmRleCA5NDE4ZjY1Li5hNWU1ZjUyIDEwMDY0NAorLS0tIGEvZ2NjL2p1bXAuYworKysrIGIvZ2NjL2p1bXAuYworQEAgLTEyMSwxNSArMTIxLDI2IEBAIHJlYnVpbGRfanVtcF9sYWJlbHNfY2hhaW4gKHJ0eCBjaGFpbikKKyBzdGF0aWMgdW5zaWduZWQgaW50CisgY2xlYW51cF9iYXJyaWVycyAodm9pZCkKKyB7CistICBydHggaW5zbiwgbmV4dCwgcHJldjsKKy0gIGZvciAoaW5zbiA9IGdldF9pbnNucyAoKTsgaW5zbjsgaW5zbiA9IG5leHQpCisrICBydHggaW5zbjsKKysgIGZvciAoaW5zbiA9IGdldF9pbnNucyAoKTsgaW5zbjsgaW5zbiA9IE5FWFRfSU5TTiAoaW5zbikpCisgICAgIHsKKy0gICAgICBuZXh0ID0gTkVYVF9JTlNOIChpbnNuKTsKKyAgICAgICBpZiAoQkFSUklFUl9QIChpbnNuKSkKKyAJeworLQkgIHByZXYgPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7CisrCSAgcnR4IHByZXYgPSBwcmV2X25vbm5vdGVfaW5zbiAoaW5zbik7CisgCSAgaWYgKCFwcmV2KQorIAkgICAgY29udGludWU7CisrCisrCSAgaWYgKENBTExfUCAocHJldikpCisrCSAgICB7CisrCSAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3Qgc3BsaXQgYSBjYWxsIGFuZCBpdHMgY29ycmVzcG9uZGluZworKwkJIENBTExfQVJHX0xPQ0FUSU9OIG5vdGUuICAqLworKwkgICAgICBydHggbmV4dCA9IE5FWFRfSU5TTiAocHJldik7CisrCisrCSAgICAgIGlmIChOT1RFX1AgKG5leHQpCisrCQkgICYmIE5PVEVfS0lORCAobmV4dCkgPT0gTk9URV9JTlNOX0NBTExfQVJHX0xPQ0FUSU9OKQorKwkJcHJldiA9IG5leHQ7CisrCSAgICB9CisrCisgCSAgaWYgKEJBUlJJRVJfUCAocHJldikpCisgCSAgICBkZWxldGVfaW5zbiAoaW5zbik7CisgCSAgZWxzZSBpZiAocHJldiAhPSBQUkVWX0lOU04gKGluc24pKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNTktZ2NjLVBSLXJ0bC1vcHRpbWl6YXRpb24tNjMzNDgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4MjdjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDU5LWdjYy1QUi1ydGwtb3B0aW1pemF0aW9uLTYzMzQ4LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gNmVhZTNlNjM3ZmNjMjJkMjFiNTFkNDRkNjFlM2E5Y2I0ODI1ZTc3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDMwIE9jdCAyMDE0IDIwOjM3OjE0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdUFIgcnRsLW9wdGltaXphdGlvbi82MzM0OAorIAorUFIgcnRsLW9wdGltaXphdGlvbi82MzM0OAorKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBEbyBub3QgZW1pdCBleHRyYSBiYXJyaWVyLgorCitOb3RlOiB0aGlzIHBhdGNoIGlzIHRvIGZpeCB0aGUgc2lkZSBlZmZlY3QgaW50cm9kdWNlZCBieSByMjEyMTcxIHdoaWNoIHdhcyByZXBvcnRlZCBhdDoKK2h0dHBzOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTYzMzQ4CisKK2dpdC1zdm4taWQ6IHN2bitzc2g6Ly9nY2MuZ251Lm9yZy9zdm4vZ2NjL3RydW5rQDIxNTYxMyAxMzhiYzc1ZC0wZDA0LTA0MTAtOTYxZi04MmVlNzJiMDU0YTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbaHR0cHM6Ly9nY2MuZ251Lm9yZy92aWV3Y3ZzL2djYz92aWV3PXJldmlzaW9uJnJldmlzaW9uPTIxNTYxM10KK1NpZ25lZC1vZmYtYnk6IEJhb3NoYW4gUGFuZyA8YmFvc2hhbi5wYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ2NjL2VtaXQtcnRsLmMgfCAgIDExIC0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2VtaXQtcnRsLmMgYi9nY2MvZW1pdC1ydGwuYworaW5kZXggNDczNmY4ZC4uYWU2OWRiZCAxMDA2NDQKKy0tLSBhL2djYy9lbWl0LXJ0bC5jCisrKysgYi9nY2MvZW1pdC1ydGwuYworQEAgLTM0MjIsNyArMzQyMiw2IEBAIHRyeV9zcGxpdCAocnR4IHBhdCwgcnR4IHRyaWFsLCBpbnQgbGFzdCkKKyB7CisgICBydHggYmVmb3JlID0gUFJFVl9JTlNOICh0cmlhbCk7CisgICBydHggYWZ0ZXIgPSBORVhUX0lOU04gKHRyaWFsKTsKKy0gIGludCBoYXNfYmFycmllciA9IDA7CisgICBydHggbm90ZSwgc2VxLCB0ZW07CisgICBpbnQgcHJvYmFiaWxpdHk7CisgICBydHggaW5zbl9sYXN0LCBpbnNuOworQEAgLTM0NDEsMTQgKzM0NDAsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCisgCisgICBzcGxpdF9icmFuY2hfcHJvYmFiaWxpdHkgPSAtMTsKKyAKKy0gIC8qIElmIHdlIGFyZSBzcGxpdHRpbmcgYSBKVU1QX0lOU04sIGl0IG1pZ2h0IGJlIGZvbGxvd2VkIGJ5IGEgQkFSUklFUi4KKy0gICAgIFdlIG1heSBuZWVkIHRvIGhhbmRsZSB0aGlzIHNwZWNpYWxseS4gICovCistICBpZiAoYWZ0ZXIgJiYgQkFSUklFUl9QIChhZnRlcikpCistICAgIHsKKy0gICAgICBoYXNfYmFycmllciA9IDE7CistICAgICAgYWZ0ZXIgPSBORVhUX0lOU04gKGFmdGVyKTsKKy0gICAgfQorLQorICAgaWYgKCFzZXEpCisgICAgIHJldHVybiB0cmlhbDsKKyAKK0BAIC0zNTk0LDggKzM1ODUsNiBAQCB0cnlfc3BsaXQgKHJ0eCBwYXQsIHJ0eCB0cmlhbCwgaW50IGxhc3QpCisgICB0ZW0gPSBlbWl0X2luc25fYWZ0ZXJfc2V0bG9jIChzZXEsIHRyaWFsLCBJTlNOX0xPQ0FUSU9OICh0cmlhbCkpOworIAorICAgZGVsZXRlX2luc24gKHRyaWFsKTsKKy0gIGlmIChoYXNfYmFycmllcikKKy0gICAgZW1pdF9iYXJyaWVyX2FmdGVyICh0ZW0pOworIAorICAgLyogUmVjdXJzaXZlbHkgY2FsbCB0cnlfc3BsaXQgZm9yIGVhY2ggbmV3IGluc24gY3JlYXRlZDsgYnkgdGhlCisgICAgICB0aW1lIGNvbnRyb2wgcmV0dXJucyBoZXJlIHRoYXQgaW5zbiB3aWxsIGJlIGZ1bGx5IHNwbGl0LCBzbworLS0gCisxLjcuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2MC1Pbmx5LWFsbG93LWU1MDAtZG91YmxlLWluLVNQRV9TSU1EX1JFR05PX1AtcmVnaXN0ZXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWE5ZmRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjAtT25seS1hbGxvdy1lNTAwLWRvdWJsZS1pbi1TUEVfU0lNRF9SRUdOT19QLXJlZ2lzdGVycy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDVjMDA5MjA3MDI1MzExM2NmMGQ5YzQ1ZWFjYzg4NGIzZWNjMzRkODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBqc20yOCA8anNtMjhAMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0PgorRGF0ZTogU2F0LCAyNSBPY3QgMjAxNCAwMDoyMzoxNyArMDAwMAorU3ViamVjdDogW1BBVENIXSBPbmx5IGFsbG93IGU1MDAgZG91YmxlIGluIFNQRV9TSU1EX1JFR05PX1AgcmVnaXN0ZXJzLgorCityczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbCBhbGxvd3MgU1BFIHZlY3RvcnMgaW4gc2luZ2xlCityZWdpc3RlcnMgc2F0aXNmeWluZyBTUEVfU0lNRF9SRUdOT19QIChpLmUuIHJlZ2lzdGVyIG51bWJlcnMgMCB0bworMzEpLiAgSG93ZXZlciwgdGhlIGNvcnJlc3BvbmRpbmcgdGVzdCBmb3IgZTUwMCBkb3VibGUgdHJlYXRzIGFsbAorcmVnaXN0ZXJzIGFzIGJlaW5nIGFibGUgdG8gc3RvcmUgYSA2NC1iaXQgdmFsdWUsIHJhdGhlciB0aGFuIGp1c3QKK3Rob3NlIEdQUnMuCisKK0xvZ2ljYWxseSB0aGlzIGluY29uc2lzdGVuY3kgaXMgd3Jvbmc7IGluIGFkZGl0aW9uLCBpdCBjYXVzZXMgcHJvYmxlbXMKK3Vud2luZGluZyBmcm9tIHNpZ25hbCBoYW5kbGVycy4gIGxpbnV4LXVud2luZC5oIHVzZXMKK0FSR19QT0lOVEVSX1JFR05VTSBhcyBhIHBsYWNlIHRvIHN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyBmcm9tIGEKK3NpZ25hbCBoYW5kbGVyLCBidXQgdGhpcyBsb2dpYyBpbiByczYwMDBfaGFyZF9yZWdub19ucmVnc19pbnRlcm5hbAorcmVzdWx0cyBpbiB0aGF0IGJlaW5nIGNvbnNpZGVyZWQgYW4gOC1ieXRlIHJlZ2lzdGVyLCByZXN1bHRpbmcgaW4KK2Fzc2VydGlvbiBmYWlsdXJlcy4KKyg8aHR0cHM6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE0LTA5L21zZzAyNjI1Lmh0bWw+IGZpcnN0CituZWVkcyB0byBiZSBhcHBsaWVkIGZvciB1bndpbmRpbmcgdG8gd29yayBpbiBnZW5lcmFsIG9uIGU1MDAuKSAgVGhpcworcGF0Y2ggbWFrZXMgcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwgaGFuZGxlIHRoZSBlNTAwIGRvdWJsZQorY2FzZSBjb25zaXN0ZW50bHkgd2l0aCBTUEUgdmVjdG9ycy4KKworVGVzdGVkIHdpdGggbm8gcmVncmVzc2lvbnMgd2l0aCBjcm9zcyB0byBwb3dlcnBjLWxpbnV4LWdudXNwZSAoZ2l2ZW4KK3RoZSBhZm9yZW1lbnRpb25lZCBwYXRjaCBhcHBsaWVkKS4gIEZhaWx1cmVzIG9mIHNpZ25hbCBoYW5kbGluZwordW53aW5kaW5nIHRlc3RzIHN1Y2ggYXMgZ2NjLmRnL2NsZWFudXAtezgsOSwxMCwxMX0uYyBhcmUgZml4ZWQgYnkgdGhpcworcGF0Y2guCisKKwkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKHJzNjAwMF9oYXJkX3JlZ25vX25yZWdzX2ludGVybmFsKTogRG8KKwlub3QgYWxsb3cgZTUwMCBkb3VibGUgaW4gcmVnaXN0ZXJzIG5vdCBzYXRpc3lmaW5nCisJU1BFX1NJTURfUkVHTk9fUC4KKworCitnaXQtc3ZuLWlkOiBzdm4rc3NoOi8vZ2NjLmdudS5vcmcvc3ZuL2djYy90cnVua0AyMTY2ODggMTM4YmM3NWQtMGQwNC0wNDEwLTk2MWYtODJlZTcyYjA1NGE0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtnY2MgNS4wXQorCistLS0KKyBnY2MvQ2hhbmdlTG9nICAgICAgICAgICAgICB8IDYgKysrKysrCisgZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGdjYy00LjkuMi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCisrKysgZ2NjLTQuOS4yL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCitAQCAtMTcwMyw3ICsxNzAzLDcgQEAgcnM2MDAwX2hhcmRfcmVnbm9fbnJlZ3NfaW50ZXJuYWwgKGludCByZQorICAgICAgU0Ntb2RlIHNvIGFzIHRvIHBhc3MgdGhlIHZhbHVlIGNvcnJlY3RseSBpbiBhIHBhaXIgb2YKKyAgICAgIHJlZ2lzdGVycy4gICovCisgICBlbHNlIGlmIChUQVJHRVRfRTUwMF9ET1VCTEUgJiYgRkxPQVRfTU9ERV9QIChtb2RlKSAmJiBtb2RlICE9IFNDbW9kZQorLQkgICAmJiAhREVDSU1BTF9GTE9BVF9NT0RFX1AgKG1vZGUpKQorKwkgICAmJiAhREVDSU1BTF9GTE9BVF9NT0RFX1AgKG1vZGUpICYmIFNQRV9TSU1EX1JFR05PX1AgKHJlZ25vKSkKKyAgICAgcmVnX3NpemUgPSBVTklUU19QRVJfRlBfV09SRDsKKyAKKyAgIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYxLXRhcmdldC1nY2MtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDhjNjZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjEtdGFyZ2V0LWdjYy1pbmNsdWRlZGlyLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK0Vuc3VyZSB0YXJnZXQgZ2NjIGhlYWRlcnMgY2FuIGJlIGluY2x1ZGVkCisKK1RoZXJlIGFyZSBhIGZldyBoZWFkZXJzIGluc3RhbGxlZCBhcyBwYXJ0IG9mIHRoZSBPcGVuRW1iZWRkZWQKK2djYy1ydW50aW1lIHRhcmdldCAob21wLmgsIHNzcC8qLmgpLiBCZWluZyBpbnN0YWxsZWQgZnJvbSBhIHJlY2lwZQorYnVpbHQgZm9yIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLCB0aGVzZSBhcmUgd2l0aGluIHRoZSB0YXJnZXQKK3N5c3Jvb3QgYW5kIG5vdCBjcm9zcy9uYXRpdmVzZGs7IHRodXMgdGhleSB3ZXJlbid0IGFibGUgdG8gYmUKK2ZvdW5kIGJ5IGdjYyB3aXRoIHRoZSBleGlzdGluZyBzZWFyY2ggcGF0aHMuIEFkZCBzdXBwb3J0IGZvcgorcGlja2luZyB1cCB0aGVzZSBoZWFkZXJzIHVuZGVyIHRoZSBzeXNyb290IHN1cHBsaWVkIG9uIHRoZSBnY2MKK2NvbW1hbmQgbGluZSBpbiBvcmRlciB0byByZXNvbHZlIHRoaXMuCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvZ2NjL01ha2VmaWxlLmluCTIwMTQtMTItMjMgMTE6NTc6MzMuMzI3ODczMzMxICswMDAwCisrKysgYi9nY2MvTWFrZWZpbGUuaW4JMjAxNS0wMS0yMSAxMTozMjozNS40NDczMDUzOTQgKzAwMDAKK0BAIC01ODcsNiArNTg3LDcgQEAKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzIGV0Yy4KKyBsaWJzdWJkaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorK2xpYnN1YmRpcl90YXJnZXQgPSBnY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGV4ZWN1dGFibGVzCisgbGliZXhlY3N1YmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJCh2ZXJzaW9uKQorICMgRGlyZWN0b3J5IGluIHdoaWNoIGFsbCBwbHVnaW4gcmVzb3VyY2VzIGFyZSBpbnN0YWxsZWQKK0BAIC0yNTM0LDYgKzI1MzUsNyBAQAorIAorIFBSRVBST0NFU1NPUl9ERUZJTkVTID0gXAorICAgLURHQ0NfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZVwiIFwKKysgIC1ER0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVD1cIiQobGlic3ViZGlyX3RhcmdldCkvaW5jbHVkZVwiIFwKKyAgIC1ERklYRURfSU5DTFVERV9ESVI9XCIkKGxpYnN1YmRpcikvaW5jbHVkZS1maXhlZFwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSPVwiJChnY2NfZ3h4X2luY2x1ZGVfZGlyKVwiIFwKKyAgIC1ER1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09UPSQoZ2NjX2d4eF9pbmNsdWRlX2Rpcl9hZGRfc3lzcm9vdCkgXAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTEzIDE3OjQwOjI2LjEzMTAxMjcyNSArMDAwMAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuYwkyMDE1LTAxLTIxIDExOjMwOjA4LjkyODQyNjQ5MiArMDAwMAorQEAgLTU5LDYgKzU5LDEwIEBACisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKyAgICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisrI2lmZGVmIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQKKysgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMgdW5kZXIgdGhlIHNwZWNpZmllZCBzeXNyb290LiAgKi8KKysgICAgeyBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVCwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKysjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKyAgICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorZGlmZiAtLWdpdCBhL2djYy9kZWZhdWx0cy5oIGIvZ2NjL2RlZmF1bHRzLmgKK2luZGV4IGY5NGFlMTcuLmQ5OGI0MGIgMTAwNjQ0CistLS0gYS9nY2MvZGVmYXVsdHMuaAorKysrIGIvZ2NjL2RlZmF1bHRzLmgKK0BAIC0xMzkwLDQgKzEzOTAsMTMgQEAgc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisgCisgI2VuZGlmIC8qIEdDQ19JTlNOX0ZMQUdTX0ggICovCisgCisrLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisrCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCisrI2VuZGlmCisrI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKysjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorKyNlbmRpZgorKworICNlbmRpZiAgLyogISBHQ0NfREVGQVVMVFNfSCAqLworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggOWYwYjc4MS4uMTc0ZmNhOCAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTE4OSwxMyArMTE4OSw2IEBAIHN0YXRpYyBjb25zdCBjaGFyICpnY2NfbGliZXhlY19wcmVmaXg7CisgCisgLyogRGVmYXVsdCBwcmVmaXhlcyB0byBhdHRhY2ggdG8gY29tbWFuZCBuYW1lcy4gICovCisgCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzEKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiL2xpYi8iCistI2VuZGlmCistI2lmbmRlZiBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzIKKy0jZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiAiL3Vzci9saWIvIgorLSNlbmRpZgorLQorICNpZmRlZiBDUk9TU19ESVJFQ1RPUllfU1RSVUNUVVJFICAvKiBEb24ndCB1c2UgdGhlc2UgcHJlZml4ZXMgZm9yIGEgY3Jvc3MgY29tcGlsZXIuICAqLworICN1bmRlZiBNRF9FWEVDX1BSRUZJWAorICN1bmRlZiBNRF9TVEFSVEZJTEVfUFJFRklYCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2Mi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDhiZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNC45LzAwNjItVXNlLVNZU1RFTUxJQlNfRElSLXJlcGxhY2VtZW50LWluc3RlYWQtb2YtaGFyZGNvZGluZy5wYXRjaApAQCAtMCwwICsxLDI0IEBACitGcm9tIDg2MWJjZmQ0YWU4MTRmMzUxZTBjNjY4ZWUyNmQwMWQxMzMxZTA0MjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAyOCBBcHIgMjAxNSAyMzoxNToyNyAtMDcwMAorU3ViamVjdDogW1BBVENIIDM2LzM3XSBVc2UgU1lTVEVNTElCU19ESVIgcmVwbGFjZW1lbnQgaW5zdGVhZCBvZiBoYXJkY29kaW5nCisgYmFzZV9saWJkaXIKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGdjYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy00LjkuMi5vcmlnL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmgKKysrKyBnY2MtNC45LjIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaWZuZGVmIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAjZGVmaW5lIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0uc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9LnNvLjEiCisgCisgI2RlZmluZSBDUFBfU1BFQyAiJXtwdGhyZWFkOi1EX1JFRU5UUkFOVH0iCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2My1uYXRpdmVzZGstZ2NjLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllZmE0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDYzLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE5OCBAQAorQmVpbmcgYWJsZSB0byBidWlsZCBhIG5hdGl2ZXNkayBnY2MgaXMgdXNlZnVsLCBwYXJ0aWN1bGFybHkgaW4gY2FzZXMKK3doZXJlIHRoZSBob3N0IGNvbXBpbGVyIG1heSBiZSBvZiBhbiBpbmNvbXBhdGlibGUgdmVyc2lvbiAob3IgYSAzMgorYml0IGNvbXBpbGVyIGlzIG5lZWRlZCkuCisKK1NhZGx5LCBidWlsZGluZyBuYXRpdmVzZGstZ2NjIGlzIG5vdCBzdHJhaWdodCBmb3J3YXJkLiBXZSBpbnN0YWxsCituYXRpdmVzZGstZ2NjIGludG8gYSByZWxvY2F0YWJsZSBsb2NhdGlvbiBhbmQgdGhpcyBtZWFucyB0aGF0IGl0cworbGlicmFyeSBsb2NhdGlvbnMgY2FuIGNoYW5nZS4gIk5vcm1hbCIgc3lzcm9vdCBzdXBwb3J0IGRvZXNuJ3QgaGVscAoraW4gdGhpcyBjYXNlIHNpbmNlIHRoZSB2YWx1ZXMgb2YgcGF0aHMgbGlrZSAibGliZGlyIiBjaGFuZ2UsIG5vdCBqdXN0CitiYXNlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzeXN0ZW0uCisKK0luIG9yZGVyIHRvIGhhbmRsZSB0aGlzIHdlIGRvIHR3byB0aGluZ3M6CisKK2EpIEFkZCAlciBpbnRvIHNwZWMgZmlsZSBtYXJrdXAgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGluamVjdGVkIHBhdGhzCisgICBzdWNoIGFzIFNZU1RFTUxJQlNfRElSIChzZWUgZ2NjX211bHRpbGliX3NldHVwKCkpLgorYikgQWRkIG90aGVyIHBhdGhzIHdoaWNoIG5lZWQgcmVsb2NhdGlvbiBpbnRvIGEgLmdjY3JlbG9jcHJlZml4IHNlY3Rpb24KKyAgIHdoaWNoIHRoZSByZWxvY2F0aW9uIGNvZGUgd2lsbCBub3RpY2UgYW5kIGFkanVzdCBhdXRvbWF0aWNhbGx5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1JQIDIwMTUvNy8yOAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNWZkM2QwYS4uMmRlMjlhYSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtMTIwLDYgKzEyMCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyICp0YXJnZXRfc3lzdGVtX3Jvb3QgPSBUQVJHRVRfU1lTVEVNX1JPT1Q7CisgI2Vsc2UKKyBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gMDsKKyAjZW5kaWYKKysgCisrc3RhdGljIGNoYXIgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTWVNURU1MSUJTX0RJUjsKKyAKKyAvKiBOb256ZXJvIG1lYW5zIHBhc3MgdGhlIHVwZGF0ZWQgdGFyZ2V0X3N5c3RlbV9yb290IHRvIHRoZSBjb21waWxlci4gICovCisgCitAQCAtMzg0LDYgKzM4Niw3IEBAIG9yIHdpdGggY29uc3RhbnQgdGV4dCBpbiBhIHNpbmdsZSBhcmd1bWVudC4KKyAgJUcgICAgIHByb2Nlc3MgTElCR0NDX1NQRUMgYXMgYSBzcGVjLgorICAlUiAgICAgT3V0cHV0IHRoZSBjb25jYXRlbmF0aW9uIG9mIHRhcmdldF9zeXN0ZW1fcm9vdCBhbmQKKyAgICAgICAgIHRhcmdldF9zeXNyb290X3N1ZmZpeC4KKysgJXIgICAgIE91dHB1dCB0aGUgYmFzZSBwYXRoIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXgKKyAgJVMgICAgIHByb2Nlc3MgU1RBUlRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIFMgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlRSAgICAgcHJvY2VzcyBFTkRGSUxFX1NQRUMgYXMgYSBzcGVjLiAgQSBjYXBpdGFsIEUgaXMgYWN0dWFsbHkgdXNlZCBoZXJlLgorICAlQyAgICAgcHJvY2VzcyBDUFBfU1BFQyBhcyBhIHNwZWMuCitAQCAtMTIxOCwxMCArMTIyMSwxMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqZ2NjX2xpYmV4ZWNfcHJlZml4OworICAgIGdjY19leGVjX3ByZWZpeCBpcyBzZXQgYmVjYXVzZSwgaW4gdGhhdCBjYXNlLCB3ZSBrbm93IHdoZXJlIHRoZQorICAgIGNvbXBpbGVyIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHVzZSBwYXRocyByZWxhdGl2ZSB0byB0aGF0CisgICAgbG9jYXRpb24gaW5zdGVhZC4gICovCistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2V4ZWNfcHJlZml4ID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2xpYmV4ZWNfcHJlZml4ID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX2JpbmRpcl9wcmVmaXggPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9leGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9FWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9saWJleGVjX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9MSUJFWEVDX1BSRUZJWDsKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9iaW5kaXJfcHJlZml4WzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX0JJTkRJUl9QUkVGSVg7Cisrc3RhdGljIGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIAorIC8qIEZvciBuYXRpdmUgY29tcGlsZXJzLCB0aGVzZSBhcmUgd2VsbC1rbm93biBwYXRocyBjb250YWluaW5nCisgICAgY29tcG9uZW50cyB0aGF0IG1heSBiZSBwcm92aWRlZCBieSB0aGUgc3lzdGVtLiAgRm9yIGNyb3NzCitAQCAtMTIyOSw5ICsxMjMyLDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXggPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9leGVjX3ByZWZpeCA9IE1EX0VYRUNfUFJFRklYOworIHN0YXRpYyBjb25zdCBjaGFyICptZF9zdGFydGZpbGVfcHJlZml4ID0gTURfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeF8xID0gTURfU1RBUlRGSUxFX1BSRUZJWF8xOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEKKytzdGF0aWMgY2hhciBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzFbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpCisgICA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8yWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzI7CisgCisgLyogQSByZWxhdGl2ZSBwYXRoIHRvIGJlIHVzZWQgaW4gZmluZGluZyB0aGUgbG9jYXRpb24gb2YgdG9vbHMKK0BAIC01MzA1LDYgKzUzMDgsMTEgQEAgZG9fc3BlY18xIChjb25zdCBjaGFyICpzcGVjLCBpbnQgaW5zd2l0Y2gsIGNvbnN0IGNoYXIgKnNvZnRfbWF0Y2hlZF9wYXJ0KQorIAkgICAgICB9CisgCSAgICBicmVhazsKKyAKKysgICAgICAgICAgY2FzZSAncic6CisrICAgICAgICAgICAgICBvYnN0YWNrX2dyb3cgKCZvYnN0YWNrLCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4LAorKwkJICAgICAgc3RybGVuICh0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4KSk7CisrICAgICAgICAgICAgYnJlYWs7CisrCisgCSAgY2FzZSAnUyc6CisgCSAgICB2YWx1ZSA9IGRvX3NwZWNfMSAoc3RhcnRmaWxlX3NwZWMsIDAsIE5VTEwpOworIAkgICAgaWYgKHZhbHVlICE9IDApCisKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworaW5kZXggZGFkNjllNi4uY2Y0M2YyOCAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC0zNSw2ICszNSwzMCBAQAorICMgdW5kZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAjZW5kaWYKKyAKKytzdGF0aWMgY2hhciBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdDQ19JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHQ0NfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ7CisrI2lmZGVmIExPQ0FMX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgTE9DQUxfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTE9DQUxfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIFBSRUZJWF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBQUkVGSVhfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIEZJWEVEX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgRklYRURfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gRklYRURfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIENST1NTX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgQ1JPU1NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gQ1JPU1NfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBUT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFRPT0xfSU5DTFVERV9ESVI7CisrI2VuZGlmCisrI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorK3N0YXRpYyBjaGFyIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVI7CisrI2VuZGlmCisrCisgY29uc3Qgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSBjcHBfaW5jbHVkZV9kZWZhdWx0c1tdCisgI2lmZGVmIElOQ0xVREVfREVGQVVMVFMKKyA9IElOQ0xVREVfREVGQVVMVFM7CitAQCAtNDIsMzggKzY2LDM4IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorID0geworICNpZmRlZiBHUExVU1BMVVNfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGdlbmVyaWMgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSLCAiRysrIiwgMSwgMSwKKysgICAgeyBHUExVU1BMVVNfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBQaWNrIHVwIEdOVSBDKysgdGFyZ2V0LWRlcGVuZGVudCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfVE9PTF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVJWQVIsICJHKysiLCAxLCAxLAorICAgICAgIEdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVCwgMSB9LAorICNlbmRpZgorICNpZmRlZiBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIGJhY2t3YXJkIGFuZCBkZXByZWNhdGVkIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfRElSCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzLiAgKi8KKy0gICAgeyBHQ0NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgR0NDX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUCisgICAgIC8qIFRoaXMgaXMgdGhlIGRpciBmb3IgZ2NjJ3MgcHJpdmF0ZSBoZWFkZXJzIHVuZGVyIHRoZSBzcGVjaWZpZWQgc3lzcm9vdC4gICovCistICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yIEdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQsICJHQ0MiLCAwLCAwLCAxLCAwIH0sCisrICAgIHsgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSLCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCistICAgIHsgTE9DQUxfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDEsIDAgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMiB9LAorKyAgICB7IExPQ0FMX0lOQ0xVREVfRElSVkFSLCAwLCAwLCAxLCAxLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFBSRUZJWF9JTkNMVURFX0RJUgorLSAgICB7IFBSRUZJWF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFBSRUZJWF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMCwgMCB9LAorICNlbmRpZgorICNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGZpeGluY2x1ZGVzLiAgKi8KKy0gICAgeyBGSVhFRF9JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsCisrICAgIHsgRklYRURfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLAorICAgICAgIC8qIEEgbXVsdGlsaWIgc3VmZml4IG5lZWRzIGFkZGluZyBpZiBkaWZmZXJlbnQgbXVsdGlsaWJzIHVzZQorIAkgZGlmZmVyZW50IGhlYWRlcnMuICAqLworICNpZmRlZiBTWVNST09UX0hFQURFUlNfU1VGRklYX1NQRUMKK0BAIC04NSwxNiArMTA5LDE2IEBAIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNlbmRpZgorICNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorICAgICAvKiBPbmUgcGxhY2UgdGhlIHRhcmdldCBzeXN0ZW0ncyBoZWFkZXJzIG1pZ2h0IGJlLiAgKi8KKy0gICAgeyBDUk9TU19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKysgICAgeyBDUk9TU19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgVE9PTF9JTkNMVURFX0RJUgorICAgICAvKiBBbm90aGVyIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgVE9PTF9JTkNMVURFX0RJUiwgIkJJTlVUSUxTIiwgMCwgMSwgMCwgMCB9LAorKyAgICB7IFRPT0xfSU5DTFVERV9ESVJWQVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSCisgICAgIC8qIC91c3IvaW5jbHVkZSBjb21lcyBkZWFkIGxhc3QuICAqLworLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAyIH0sCistICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDAgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorKyAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUlZBUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisgI2VuZGlmCisgICAgIHsgMCwgMCwgMCwgMCwgMCwgMCB9CisgICB9OworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmggYi9nY2MvY3BwZGVmYXVsdC5oCitpbmRleCAzMGI2ZmVkLi4yZWY5NmI3IDEwMDY0NAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuaAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAKKyBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCisgeworLSAgY29uc3QgY2hhciAqY29uc3QgZm5hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKyAgY29uc3QgY2hhciAqZm5hbWU7ICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysKKyAgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyAJCQkJICAgKHNlZSB1cGRhdGVfcGF0aCBpbiBwcmVmaXguYykgKi8KKyAgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy00LjkvMDA2NC1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1Njk4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTQuOS8wMDY0LWhhbmRsZS10YXJnZXQtc3lzcm9vdC1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDg4IEBACitTZWFyY2ggdGFyZ2V0IHN5c3Jvb3QgZ2NjIHZlcnNpb24gc3BlY2lmaWMgZGlycyB3aXRoIG11bHRpbGliLgorCitXZSBpbnN0YWxsIHRoZSBnY2MgbGlicmFyaWVzIChzdWNoIGFzIGNydGJlZ2luLnApIGludG8KKzxzeXNyb290PjxsaWJkaXI+Lzx0YXJnZXQtc3lzPi81LjIuMC8KK3doaWNoIGlzIGEgZGVmYXVsdCBzZWFyY2ggcGF0aCBmb3IgR0NDIChha2EgbXVsdGlfc3VmZml4IGluIHRoZSAKK2NvZGUgYmVsb3cpLiA8dGFyZ2V0LXN5cz4gaXMgJ21hY2hpbmUnIGluIGdjYydzIHRlcm1pbm9sb2d5LiBXZSB1c2UKK3RoZXNlIGRpcmVjdG9yaWVzIHNvIHRoYXQgbXVsdGlwbGUgZ2NjIHZlcnNpb25zIGNvdWxkIGluIHRoZW9yeSAKK2NvLWV4aXN0IG9uIHRhcmdldC4KKworV2Ugb25seSB3YW50IHRvIGJ1aWxkIG9uZSBnY2MtY3Jvc3MtY2FuYWRpYW4gcGVyIGFyY2ggYW5kIGhhdmUgdGhpcyB3b3JrIAorZm9yIGFsbCBtdWx0aWxpYnMuIDx0YXJnZXQtc3lzPiBjYW4gYmUgaGFuZGxlZCBieSBtYXBwaW5nIHRoZSBtdWx0aWxpYgorPHRhcmdldC1zeXM+IHRvIHRoZSBvbmUgdXNlZCBieSBnY2MtY3Jvc3MtY2FuYWRpYW4sIGUuZy4gbWlwczY0LXBvbGttbGxpYjMyLWxpbnV4IAoraXMgc3ltbGlua2VkIHRvIGJ5IG1pcHM2NC1wb2t5LWxpbnV4LgorCitUaGUgZGVmYXVsdCBnY2Mgc2VhcmNoIHBhdGggaW4gdGhlIHRhcmdldCBzeXNyb290IGZvciBhICJsaWI2NCIgbXV0bGlsaWIgaXM6CisKKzxzeXNyb290Pi9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKword2hpY2ggbWVhbnMgdGhhdCB0aGUgbGliMzIgY3J0YmVnaW4ubyB3aWxsIGJlIGZvdW5kIGFuZCB0aGUgbGliNjQgb25lcword2lsbCBub3Qgd2hpY2ggbGVhZHMgdG8gY29tcGlsZXIgZmFpbHVyZXMuCisKK1RoaXMgcGF0Y2ggaW5qZWN0cyBhIG11bHRpbGliIHZlcnNpb24gb2YgdGhhdCBwYXRoIGZpcnN0IHNvIHRoZSBsaWI2NAorYmluYXJpZXMgY2FuIGJlIGZvdW5kIGZpcnN0LiBXaXRoIHRoaXMgY2hhbmdlIHRoZSBzZWFyY2ggcGF0aCBiZWNvbWVzOgorCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vbGliMzIvCis8c3lzcm9vdD4vdXNyL2xpYjMyLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1JQIDIwMTUvNy8zMQorCitJbmRleDogZ2NjLTUuMi4wL2djYy9nY2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdjYy01LjIuMC5vcmlnL2djYy9nY2MuYworKysrIGdjYy01LjIuMC9nY2MvZ2NjLmMKK0BAIC0yMzA1LDcgKzIzMDUsNyBAQCBmb3JfZWFjaF9wYXRoIChjb25zdCBzdHJ1Y3QgcGF0aF9wcmVmaXgKKyAgICAgICBpZiAocGF0aCA9PSBOVUxMKQorIAl7CisgCSAgbGVuID0gcGF0aHMtPm1heF9sZW4gKyBleHRyYV9zcGFjZSArIDE7CistCSAgbGVuICs9IE1BWCAoTUFYIChzdWZmaXhfbGVuLCBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisrCSAgbGVuICs9IE1BWCAoKHN1ZmZpeF9sZW4gKyBtdWx0aV9vc19kaXJfbGVuKSwgbXVsdGlhcmNoX2xlbik7CisgCSAgcGF0aCA9IFhORVdWRUMgKGNoYXIsIGxlbik7CisgCX0KKyAKK0BAIC0yMzE3LDYgKzIzMTcsMzMgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgCSAgLyogTG9vayBmaXJzdCBpbiBNQUNISU5FL1ZFUlNJT04gc3ViZGlyZWN0b3J5LiAgKi8KKyAJICBpZiAoIXNraXBfbXVsdGlfZGlyKQorIAkgICAgeworKwkgICAgICBpZiAoIShwbC0+b3NfbXVsdGlsaWIgPyBza2lwX211bHRpX29zX2RpciA6IHNraXBfbXVsdGlfZGlyKSkKKysJICAgICAgICB7CisrCSAgICAgICAgICBjb25zdCBjaGFyICp0aGlzX211bHRpOworKwkgICAgICAgICAgc2l6ZV90IHRoaXNfbXVsdGlfbGVuOworKworKwkgICAgICAgICAgaWYgKHBsLT5vc19tdWx0aWxpYikKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfb3NfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9vc19kaXJfbGVuOworKwkJICAgIH0KKysJICAgICAgICAgIGVsc2UKKysJCSAgICB7CisrCQkgICAgICB0aGlzX211bHRpID0gbXVsdGlfZGlyOworKwkJICAgICAgdGhpc19tdWx0aV9sZW4gPSBtdWx0aV9kaXJfbGVuOworKwkJICAgIH0KKysKKysJICAgICAgICAgIC8qIExvb2sgaW4gbXVsdGlsaWIgTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeSBmaXJzdCAqLworKwkgICAgICAgICAgaWYgKHRoaXNfbXVsdGlfbGVuKQorKwkgICAgICAgICAgICB7CisrCQkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIHRoaXNfbXVsdGksIHRoaXNfbXVsdGlfbGVuICsgMSk7CisrCSAgICAgICAgICAgICAgbWVtY3B5IChwYXRoICsgbGVuICsgdGhpc19tdWx0aV9sZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworKwkgICAgICAgICAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKysJICAgICAgICAgICAgICAgIGlmIChyZXQpCisrCQkgICAgICAgICAgYnJlYWs7CisrCSAgICAgICAgICAgIH0KKysJICAgICAgICB9CisrCisgCSAgICAgIG1lbWNweSAocGF0aCArIGxlbiwgbXVsdGlfc3VmZml4LCBzdWZmaXhfbGVuICsgMSk7CisgCSAgICAgIHJldCA9IGNhbGxiYWNrIChwYXRoLCBjYWxsYmFja19pbmZvKTsKKyAJICAgICAgaWYgKHJldCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTFmNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIuaW5jCkBAIC0wLDAgKzEsMTIwIEBACityZXF1aXJlIGdjYy1jb21tb24uaW5jCisKKyMgVGhpcmQgZGlnaXQgaW4gUFYgc2hvdWxkIGJlIGluY3JlbWVudGVkIGFmdGVyIGEgbWlub3IgcmVsZWFzZQorCitQViA9ICI1LjIuMCIKKworI1NOQVAgPSAiNS0yMDE1MDQwNSIKKworIyBCSU5WIHNob3VsZCBiZSBpbmNyZW1lbnRlZCB0byBhIHJldmlzaW9uIGFmdGVyIGEgbWlub3IgZ2NjIHJlbGVhc2UKKworQklOViA9ICI1LjIuMCIKKworRklMRVNFWFRSQVBBVEhTID0uICIke0ZJTEVfRElSTkFNRX0vZ2NjLTUuMjoke0ZJTEVfRElSTkFNRX0vZ2NjLTUuMi9iYWNrcG9ydDoiCisKK0RFUEVORFMgPSsgIm1wZnIgZ21wIGxpYm1wYyB6bGliIgorTkFUSVZFREVQUyA9ICJtcGZyLW5hdGl2ZSBnbXAtbmF0aXZlIGxpYm1wYy1uYXRpdmUgemxpYi1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24gJiBHUEx2MyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICBmaWxlOi8vQ09QWUlORzMuTElCO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiBcCisgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgZmlsZTovL0NPUFlJTkcuUlVOVElNRTttZDU9ZmU2MGQ4NzA0ODU2N2Q0ZmU4YzhhMGVkMjQ0OGJjYzggXAorIgorI0JBU0VVUkkgPSAiaHR0cDovL3d3dy5uZXRndWxsLmNvbS9nY2Mvc25hcHNob3RzLyR7U05BUH0vZ2NjLSR7U05BUH0udGFyLmJ6MiIKK0JBU0VVUkkgPSAiJHtHTlVfTUlSUk9SfS9nY2MvZ2NjLSR7UFZ9L2djYy0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gImE1MWJjZmViM2RhN2RkNGM2MjNlMjcyMDdlZDQzNDY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVmODM1YjA0YjVmN2RkNGY0ZDJkYzk2MTkwZWMxNjIxYjhkODlmMmRjNmY2MzhmOWY4YmMxYjEwMTRiYThjYWQiCisKK1NSQ19VUkkgPSAiXAorICAgICAgICAgICAke0JBU0VVUkl9IFwKKyAgICAgICAgICAgJHtCQUNLUE9SVFN9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVjbGliYy1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtZ2NjLXVjbGliYy1sb2NhbGUtY3R5cGVfdG91cGxvd190LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA1LXVjbGliYy1sb2NhbGUtbm9fX3gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTAtZ2NjLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1nY2MtcG9pc29uLWRpci1leHRlbmQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE2LUNPTExFQ1RfR0NDX09QVElPTlMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNy1Vc2UtdGhlLWRlZmF1bHRzLmgtaW4tQi1pbnN0ZWFkLW9mLVMtYW5kLXQtb2UtaW4tQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWZvcnRyYW4tY3Jvc3MtY29tcGlsZS1oYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMC1jcHAtaG9ub3Itc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyNS1saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjYtZ2NjLWFybXY0LXBhc3MtZml4LXY0YngtdG8tbGlua2VyLXRvLXN1cHBvcnQtRUFCSS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAyOC1Bdm9pZC11c2luZy1saWJkaXItZnJvbS0ubGEtd2hpY2gtdXN1YWxseS1wb2ludHMtdG8tLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjktZXhwb3J0LUNQUC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzItRW5zdXJlLXRhcmdldC1nY2MtaGVhZGVycy1jYW4tYmUtaW5jbHVkZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMy1nY2MtNC44LXdvbi10LWJ1aWxkLXdpdGgtZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzNy1wcjY1Nzc5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzgtZml4LWcrKy1zeXNyb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0JBQ0tQT1JUUyA9ICIiCisjUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1NOQVB9IgorUyA9ICIke1RNUERJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9L2djYy0ke1BWfSIKK0IgPSAiJHtXT1JLRElSfS9nY2MtJHtQVn0vYnVpbGQuJHtIT1NUX1NZU30uJHtUQVJHRVRfU1lTfSIKKworIyBMYW5ndWFnZSBPdmVycmlkZXMKK0ZPUlRSQU4gPSAiIgorSkFWQSA9ICIiCisKK0xUTyA9ICItLWVuYWJsZS1sdG8iCisKK0VYVFJBX09FQ09ORl9CQVNFID0gIlwKKyAgICAke0xUT30gXAorICAgIC0tZW5hYmxlLWxpYnNzcCBcCisgICAgLS1kaXNhYmxlLWJvb3RzdHJhcCBcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS13aXRoLWxpbmtlci1oYXNoLXN0eWxlPSR7TElOS0VSX0hBU0hfU1RZTEV9IFwKKyAgICAtLWVuYWJsZS1saW5rZXItYnVpbGQtaWQgXAorICAgIC0td2l0aC1wcGw9bm8gXAorICAgIC0td2l0aC1jbG9vZz1ubyBcCisgICAgLS1lbmFibGUtY2hlY2tpbmc9cmVsZWFzZSBcCisgICAgLS1lbmFibGUtY2hlYWRlcnM9Y19nbG9iYWwgXAorIgorCitFWFRSQV9PRUNPTkZfSU5JVElBTCA9ICJcCisgICAgLS1kaXNhYmxlLWxpYm11ZGZsYXAgXAorICAgIC0tZGlzYWJsZS1saWJnb21wIFwKKyAgICAtLWRpc2FibGUtbGlic3NwIFwKKyAgICAtLWRpc2FibGUtbGlicXVhZG1hdGggXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisgICAgLS1kaXNhYmxlLWx0byBcCisgICAgLS1kaXNhYmxlLXBsdWdpbiBcCisgICAgLS1lbmFibGUtZGVjaW1hbC1mbG9hdD1ubyBcCisiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC0tZGlzYWJsZS1kZWNpbWFsLWZsb2F0ICIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3R7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDEtZ2NjLTQuMy4xLUFSQ0hfRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3NjZmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAxLWdjYy00LjMuMS1BUkNIX0ZMQUdTX0ZPUl9UQVJHRVQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSBhMGZlZTBjZWUzZDRiZDRhYWIxZTNhOGUwNDQ0NmY5OWQ5MThjNGZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzc6MTEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMS8zNV0gZ2NjLTQuMy4xOiBBUkNIX0ZMQUdTX0ZPUl9UQVJHRVQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGNvbmZpZ3VyZSAgICB8IDIgKy0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDc2MTZmODguLjUwZTdjYmMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc0NjQsNyArNzQ2NCw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDhjODVhMDguLmYzNGFmN2UgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTMxMDQsNyArMzEwNCw3IEBAIGZpCisgIyBmb3IgdGFyZ2V0X2FsaWFzIGFuZCBnY2MgZG9lc24ndCBtYW5hZ2UgaXQgY29uc2lzdGVudGx5LgorIHRhcmdldF9jb25maWdhcmdzPSItLWNhY2hlLWZpbGU9Li9jb25maWcuY2FjaGUgJHt0YXJnZXRfY29uZmlnYXJnc30iCisgCistRkxBR1NfRk9SX1RBUkdFVD0KKytGTEFHU19GT1JfVEFSR0VUPSIkQVJDSF9GTEFHU19GT1JfVEFSR0VUIgorIGNhc2UgIiAkdGFyZ2V0X2NvbmZpZ2RpcnMgIiBpbgorICAqIiBuZXdsaWIgIiopCisgICBjYXNlICIgJHRhcmdldF9jb25maWdhcmdzICIgaW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMi11Y2xpYmMtY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQzM2EwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDItdWNsaWJjLWNvbmYucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSA3NjM1MjQ4YTRjOWI1MWQ3MjNkNzIxYWNhZWViNWYyZjExOTU3OTg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6Mzg6MjUgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8zNV0gdWNsaWJjLWNvbmYKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb250cmliL3JlZ3Jlc3Npb24vb2Jqcy1nY2Muc2ggfCA0ICsrKysKKyBsaWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZyAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaCBiL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAoraW5kZXggNjBiMDQ5Ny4uNmRjN2VhZCAxMDA3NTUKKy0tLSBhL2NvbnRyaWIvcmVncmVzc2lvbi9vYmpzLWdjYy5zaAorKysrIGIvY29udHJpYi9yZWdyZXNzaW9uL29ianMtZ2NjLnNoCitAQCAtMTA2LDYgKzEwNiwxMCBAQCBpZiBbICRIX1JFQUxfVEFSR0VUID0gJEhfUkVBTF9IT1NUIC1hICRIX1JFQUxfVEFSR0VUID0gaTY4Ni1wYy1saW51eC1nbnUgXQorICB0aGVuCisgICBtYWtlIGFsbC1nZGIgYWxsLWRlamFnbnUgYWxsLWxkIHx8IGV4aXQgMQorICAgbWFrZSBpbnN0YWxsLWdkYiBpbnN0YWxsLWRlamFnbnUgaW5zdGFsbC1sZCB8fCBleGl0IDEKKytlbGlmIFsgJEhfUkVBTF9UQVJHRVQgPSAkSF9SRUFMX0hPU1QgLWEgJEhfUkVBTF9UQVJHRVQgPSBpNjg2LXBjLWxpbnV4LXVjbGliYyBdCisrIHRoZW4KKysgIG1ha2UgYWxsLWdkYiBhbGwtZGVqYWdudSBhbGwtbGQgfHwgZXhpdCAxCisrICBtYWtlIGluc3RhbGwtZ2RiIGluc3RhbGwtZGVqYWdudSBpbnN0YWxsLWxkIHx8IGV4aXQgMQorIGVsaWYgWyAkSF9SRUFMX1RBUkdFVCA9ICRIX1JFQUxfSE9TVCBdIDsgdGhlbgorICAgbWFrZSBib290c3RyYXAgfHwgZXhpdCAxCisgICBtYWtlIGluc3RhbGwgfHwgZXhpdCAxCitkaWZmIC0tZ2l0IGEvbGliamF2YS9jbGFzc3BhdGgvbHRjb25maWcgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworaW5kZXggNzQzZDk1MS4uYWU0ZWE2MCAxMDA3NTUKKy0tLSBhL2xpYmphdmEvY2xhc3NwYXRoL2x0Y29uZmlnCisrKysgYi9saWJqYXZhL2NsYXNzcGF0aC9sdGNvbmZpZworQEAgLTYwMyw3ICs2MDMsNyBAQCBob3N0X29zPWBlY2hvICRob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyAKKyAjIFRyYW5zZm9ybSBsaW51eCogdG8gKi0qLWxpbnV4LWdudSosIHRvIHN1cHBvcnQgb2xkIGNvbmZpZ3VyZSBzY3JpcHRzLgorIGNhc2UgJGhvc3Rfb3MgaW4KKy1saW51eC1nbnUqKSA7OworK2xpbnV4LWdudSp8bGludXgtdWNsaWJjKikgOzsKKyBsaW51eCopIGhvc3Q9YGVjaG8gJGhvc3QgfCBzZWQgJ3MvXlwoLiotLiotbGludXhcKVwoLipcKSQvXDEtZ251XDIvJ2AKKyBlc2FjCisgCitAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAgbGludXgtZ251b2xkbGQqIHwgbGludXgtZ251YW91dCogfCBsaW51eC1nbnVjb2ZmKikKKyAgIDs7CisgCisgIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorLWxpbnV4LWdudSopCisrbGludXgqKQorICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIG5lZWRfdmVyc2lvbj1ubworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwMy1nY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhMjU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDAzLWdjYy11Y2xpYmMtbG9jYWxlLWN0eXBlX3RvdXBsb3dfdC5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIDNhZWU1OGFkMDQzYWYzM2FiMDBjOWNkN2JjODhmMGNhZGU4M2YyMzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MDoxMiArMDQwMAorU3ViamVjdDogW1BBVENIIDAzLzM1XSBnY2MtdWNsaWJjLWxvY2FsZS1jdHlwZV90b3VwbG93X3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIHwgNSArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaCAgfCA5ICsrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCAgfCA5ICsrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuY2MKK2luZGV4IDZkYTVmMjIuLjJmODVjMmYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjCitAQCAtMjYzLDUgKzI2MywxMCBAQCBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KKyAjaWZkZWYgX0dMSUJDWFhfTE9OR19ET1VCTEVfQ09NUEFUCisgI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxkYmwpIFwKKyAgIGV4dGVybiAiQyIgdm9pZCBsZGJsICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoYWxpYXMgKCNkYmwpKSkKKysjaWZkZWYgX19VQ0xJQkNfXworKy8vIFRoaXMgaXMgYmVjYXVzZSBfX2NfbG9jYWxlIGlzIG9mIHR5cGUgX19jdHlwZV90b3VwbG93X3QqIHdoaWNoIGlzIHNob3J0IG9uIHVjbGliYy4gZm9yIGdsaWJjIGl0cyBpbnQqCisrX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BzLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUHMpOworKyNlbHNlCisgX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NSVF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworKyNlbmRpZgorICNlbmRpZiAvLyBfR0xJQkNYWF9MT05HX0RPVUJMRV9DT01QQVQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKK2luZGV4IGVlM2VmODYuLjdmZDU0ODUgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVyaWMvY19sb2NhbGUuaAorQEAgLTQwLDEzICs0MCwyMiBAQAorIAorICNpbmNsdWRlIDxjbG9jYWxlPgorIAorKyNpZmRlZiBfX1VDTElCQ19fCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2VuZGlmCisrCisgI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisgCisgbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCisgeworIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgCisrI2lmZGVmIF9fVUNMSUJDX18KKysgIHR5cGVkZWYgX19jdHlwZV90b3VwbG93X3QqCV9fY19sb2NhbGU7CisrI2Vsc2UKKyAgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisgCisgICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgYW5kIGxvbmcgZG91YmxlIHRvIHN0cmluZyBhbmQKKyAgIC8vIHJldHVybiBsZW5ndGggb2Ygc3RyaW5nLiAgSWYgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAoraW5kZXggZmQ1MmI3My4uMjYyN2NmMyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvb3MvZ251LWxpbnV4L2N0eXBlX2Jhc2UuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9nbnUtbGludXgvY3R5cGVfYmFzZS5oCitAQCAtMzMsNiArMzMsMTEgQEAKKyAKKyAvLyBJbmZvcm1hdGlvbiBhcyBnbGVhbmVkIGZyb20gL3Vzci9pbmNsdWRlL2N0eXBlLmgKKyAKKysjaWZkZWYgX19VQ0xJQkNfXworKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNlbmRpZgorKworIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorIHsKKyBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorQEAgLTQxLDcgKzQ2LDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICBzdHJ1Y3QgY3R5cGVfYmFzZQorICAgeworICAgICAvLyBOb24tc3RhbmRhcmQgdHlwZWRlZnMuCisrI2lmZGVmIF9fVUNMSUJDX18KKysgICAgdHlwZWRlZiBjb25zdCBfX2N0eXBlX3RvdXBsb3dfdCoJX190b190eXBlOworKyNlbHNlCisgICAgIHR5cGVkZWYgY29uc3QgaW50KiAJCV9fdG9fdHlwZTsKKysjZW5kaWYKKyAKKyAgICAgLy8gTkI6IE9mZnNldHMgaW50byBjdHlwZTxjaGFyPjo6X01fdGFibGUgZm9yY2UgYSBwYXJ0aWN1bGFyIHNpemUKKyAgICAgLy8gb24gdGhlIG1hc2sgdHlwZS4gQmVjYXVzZSBvZiB0aGlzLCB3ZSBkb24ndCB1c2UgYW4gZW51bS4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDQtdWNsaWJjLWxvY2FsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM5NDdhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA0LXVjbGliYy1sb2NhbGUucGF0Y2gKQEAgLTAsMCArMSwyODYyIEBACitGcm9tIDlmNzNlMDYzMTVjOTQ2MjlmYjkwMmJkOTQyMTk2NjdjZjgzMDdiOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwODo0MTozOSArMDQwMAorU3ViamVjdDogW1BBVENIIDA0LzM1XSB1Y2xpYmMtbG9jYWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzcgKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICA2MyArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTYwICsrKysrCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggICAgICAgfCAxMTcgKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgICAgICAgIHwgMzA4ICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDgwICsrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgMzAwICsrKysrKysrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgMTAwICsrKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTE4ICsrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyAgICAgICB8IDY5MiArKysrKysrKysrKysrKysrKysrKysKKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICAgICAgICB8IDE2MCArKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgNDA2ICsrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCAgIHwgIDY4ICsrCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzUgKysrCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmggICAgICAgfCAgIDIgKworIGxpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciAgICAgICAgICAgICAgICAgIHwgICAyICsKKyAxNiBmaWxlcyBjaGFuZ2VkLCAyNjg4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAoraW5kZXggYTFlMzAxZi4uMGZlOTMyNiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKKysrKyBiL2xpYnN0ZGMrKy12My9hY2luY2x1ZGUubTQKK0BAIC0xOTgzLDYgKzE5ODMsOSBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTIxNjcsNiArMjE3MCw0MCBAQCBBQ19ERUZVTihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKKyAgICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCisgICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorICAgICAgIDs7CisrICAgIHVjbGliYykKKysgICAgICBBQ19NU0dfUkVTVUxUKHVjbGliYykKKysKKysgICAgICAjIERlY2xhcmUgaW50ZW50aW9uIHRvIHVzZSBnZXR0ZXh0LCBhbmQgYWRkIHN1cHBvcnQgZm9yIHNwZWNpZmljCisrICAgICAgIyBsYW5ndWFnZXMuCisrICAgICAgIyBGb3Igc29tZSByZWFzb24sIEFMTF9MSU5HVUFTIGhhcyB0byBiZSBiZWZvcmUgQU0tR05VLUdFVFRFWFQKKysgICAgICBBTExfTElOR1VBUz0iZGUgZnIiCisrCisrICAgICAgIyBEb24ndCBjYWxsIEFNLUdOVS1HRVRURVhUIGhlcmUuIEluc3RlYWQsIGFzc3VtZSBnbGliYy4KKysgICAgICBBQ19DSEVDS19QUk9HKGNoZWNrX21zZ2ZtdCwgbXNnZm10LCB5ZXMsIG5vKQorKyAgICAgIGlmIHRlc3QgeCIkY2hlY2tfbXNnZm10IiA9IHgieWVzIiAmJiB0ZXN0IHgiJGVuYWJsZV9ubHMiID0geCJ5ZXMiOyB0aGVuCisrICAgICAgICBVU0VfTkxTPXllcworKyAgICAgIGZpCisrICAgICAgIyBFeHBvcnQgdGhlIGJ1aWxkIG9iamVjdHMuCisrICAgICAgZm9yIGxpbmcgaW4gJEFMTF9MSU5HVUFTOyBkbyBcCisrICAgICAgICBnbGliY3h4X01PRklMRVM9IiRnbGliY3h4X01PRklMRVMgJGxpbmcubW8iOyBcCisrICAgICAgICBnbGliY3h4X1BPRklMRVM9IiRnbGliY3h4X1BPRklMRVMgJGxpbmcucG8iOyBcCisrICAgICAgZG9uZQorKyAgICAgIEFDX1NVQlNUKGdsaWJjeHhfTU9GSUxFUykKKysgICAgICBBQ19TVUJTVChnbGliY3h4X1BPRklMRVMpCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYWUzZTRhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0wLDAgKzEsNjMgQEAKKysvLyBQcm90b3R5cGVzIGZvciBHTElCQyB0aHJlYWQgbG9jYWxlIF9fLXByZWZpeGVkIGZ1bmN0aW9ucyAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLyBXcml0dGVuIGJ5IEpha3ViIEplbGluZWsgPGpha3ViQHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisrI2luY2x1ZGUgPGNsb2NhbGU+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCisrZXh0ZXJuICJDIiBfX3R5cGVvZihubF9sYW5naW5mb19sKSBfX25sX2xhbmdpbmZvX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJjb2xsX2wpIF9fc3RyY29sbF9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RyZnRpbWVfbCkgX19zdHJmdGltZV9sOworK2V4dGVybiAiQyIgX190eXBlb2Yoc3RydG9kX2wpIF9fc3RydG9kX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ0b2ZfbCkgX19zdHJ0b2ZfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHN0cnRvbGRfbCkgX19zdHJ0b2xkX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZihzdHJ4ZnJtX2wpIF9fc3RyeGZybV9sOworK2V4dGVybiAiQyIgX190eXBlb2YobmV3bG9jYWxlKSBfX25ld2xvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGZyZWVsb2NhbGUpIF9fZnJlZWxvY2FsZTsKKytleHRlcm4gIkMiIF9fdHlwZW9mKGR1cGxvY2FsZSkgX19kdXBsb2NhbGU7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK2V4dGVybiAiQyIgX190eXBlb2YoaXN3Y3R5cGVfbCkgX19pc3djdHlwZV9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93bG93ZXJfbCkgX190b3dsb3dlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2YodG93dXBwZXJfbCkgX190b3d1cHBlcl9sOworK2V4dGVybiAiQyIgX190eXBlb2Yod2NzY29sbF9sKSBfX3djc2NvbGxfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc2Z0aW1lX2wpIF9fd2NzZnRpbWVfbDsKKytleHRlcm4gIkMiIF9fdHlwZW9mKHdjc3hmcm1fbCkgX193Y3N4ZnJtX2w7CisrZXh0ZXJuICJDIiBfX3R5cGVvZih3Y3R5cGVfbCkgX193Y3R5cGVfbDsKKysjZW5kaWYKKysKKysjZW5kaWYgLy8gR0xJQkMgMi4zIGFuZCBsYXRlcgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjUwODFkYzEKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTAsMCArMSwxNjAgQEAKKysvLyBXcmFwcGVyIGZvciB1bmRlcmx5aW5nIEMtbGFuZ3VhZ2UgbG9jYWxpemF0aW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxjZXJybm8+ICAvLyBGb3IgZXJybm8KKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisrI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCisrI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKysjZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorKyNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKysjZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCisrI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKysjd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworKyNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKysjZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCisrCXsKKysJICBjaGFyKiBfX3Nhbml0eTsKKysJICBlcnJubyA9IDA7CisrCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCSAgICBfX3YgPSBfX2Y7CisrCSAgZWxzZQorKwkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBfX3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKysJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYykKKysgICAgeworKyAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQorKwl7CisrCSAgY2hhciogX19zYW5pdHk7CisrCSAgZXJybm8gPSAwOworKwkgIGRvdWJsZSBfX2QgPSBfX3N0cnRvZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworKyAgICAgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJICAgIF9fdiA9IF9fZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisrCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisrICAgIHsKKysgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKysJeworKwkgIGNoYXIqIF9fc2FuaXR5OworKwkgIGVycm5vID0gMDsKKysJICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorKwkgICAgX192ID0gX19sZDsKKysJICBlbHNlCisrCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKysJfQorKyAgICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICBfX2NfbG9jYWxlIF9fb2xkKQorKyAgeworKyAgICBfX2Nsb2MgPSBfX25ld2xvY2FsZSgxIDw8IExDX0FMTCwgX19zLCBfX29sZCk7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgaWYgKCFfX2Nsb2MpCisrICAgICAgeworKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB1bmRlcmx5aW5nIE9TLgorKwlfX3Rocm93X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19jcmVhdGVfY19sb2NhbGUgIgorKwkJCSAgICAgICJuYW1lIG5vdCB2YWxpZCIpKTsKKysgICAgICB9CisrI2VuZGlmCisrICB9CisrCisrICB2b2lkCisrICBsb2NhbGU6OmZhY2V0OjpfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsKKysgICAgaWYgKF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKysgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKysgIH0KKysKKysgIF9fY19sb2NhbGUKKysgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKysgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKyt9IC8vIG5hbWVzcGFjZSBzdGQKKysKKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisrICAgIHsKKysgICAgICAiTENfQ1RZUEUiLAorKyAgICAgICJMQ19OVU1FUklDIiwKKysgICAgICAiTENfVElNRSIsCisrICAgICAgIkxDX0NPTExBVEUiLAorKyAgICAgICJMQ19NT05FVEFSWSIsCisrICAgICAgIkxDX01FU1NBR0VTIiwKKysjaWYgX0dMSUJDWFhfTlVNX0NBVEVHT1JJRVMgIT0gMAorKyAgICAgICJMQ19QQVBFUiIsCisrICAgICAgIkxDX05BTUUiLAorKyAgICAgICJMQ19BRERSRVNTIiwKKysgICAgICAiTENfVEVMRVBIT05FIiwKKysgICAgICAiTENfTUVBU1VSRU1FTlQiLAorKyAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKysjZW5kaWYKKysgICAgfTsKKyt9CisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworK30gIC8vIG5hbWVzcGFjZSBzdGQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZGEwN2MxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC0wLDAgKzEsMTE3IEBACisrLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjggIFN0YW5kYXJkIGxvY2FsZSBjYXRlZ29yaWVzLgorKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZuZGVmIF9DX0xPQ0FMRV9ICisrI2RlZmluZSBfQ19MT0NBTEVfSCAxCisrCisrI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorKworKyNpbmNsdWRlIDxjc3RyaW5nPiAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c3RybGVuCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjpzbnByaW50ZiBvciBzdGQ6OnNwcmludGYKKysjaW5jbHVkZSA8Y2xvY2FsZT4KKysjaW5jbHVkZSA8bGFuZ2luZm8uaD4JCS8vIEZvciBjb2RlY3Z0CisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IHRoaXMKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisrI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2VuZGlmCisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgd2hhdCBpcyBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgZm9yCisrI2VuZGlmCisrI2RlZmluZSBfR0xJQkNYWF9DX0xPQ0FMRV9HTlUgMQorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCBjYXRlZ29yaWVzCisrI2VuZGlmCisrLy8gI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyA2CisrI2RlZmluZSBfR0xJQkNYWF9OVU1fQ0FURUdPUklFUyAwCisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKytuYW1lc3BhY2UgX19nbnVfY3h4CisreworKyAgZXh0ZXJuICJDIiBfX3R5cGVvZih1c2Vsb2NhbGUpIF9fdXNlbG9jYWxlOworK30KKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICB0eXBlZGVmIF9fbG9jYWxlX3QJCV9fY19sb2NhbGU7CisrI2Vsc2UKKysgIHR5cGVkZWYgaW50KgkJCV9fY19sb2NhbGU7CisrI2VuZGlmCisrCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBfVHYgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiBzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCisrICAvLyB0aGUgdW5zYWZlIHNwcmludGYgd2hpY2gsIGluIGdlbmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMgYW5kIHNob3VsZAorKyAgLy8gYmUgYXZvaWRlZC4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KKysgICAgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUgX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKSwKKysJCSAgICAgY29uc3QgY2hhciogX19mbXQsCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9fcHJlYykKKysgICAgeworKyAgICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fY2xvYyk7CisrI2Vsc2UKKysJCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYsIGludCBfX3ByZWMpCisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RkOjpzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fb2xkKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fc2F2LCBfX29sZCk7CisrICAgICAgc3RkOjpzZXRsb2NhbGUoTENfQUxMLCAiQyIpOworKyMgZW5kaWYKKysjZW5kaWYKKysKKysgICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CisrI2VsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBzdGQ6OnNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysgICAgICBkZWxldGUgW10gX19zYXY7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIF9fcmV0OworKyAgICB9CisrfQorKworKyNlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2RlY3Z0X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNjRhYTk2MgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvZGVjdnRfbWVtYmVycy5jYworQEAgLTAsMCArMSwzMDggQEAKKysvLyBzdGQ6OmNvZGVjdnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuNSAtIFRlbXBsYXRlIGNsYXNzIGNvZGVjdnQKKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjaW5jbHVkZSA8Y3N0ZGxpYj4gIC8vIEZvciBNQl9DVVJfTUFYCisrI2luY2x1ZGUgPGNsaW1pdHM+ICAvLyBGb3IgTUJfTEVOX01BWAorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworK25hbWVzcGFjZSBzdGQKKyt7CisrICAvLyBTcGVjaWFsaXphdGlvbnMuCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAorKwkgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCisrCSBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwkgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CisrICB7CisrICAgIHJlc3VsdCBfX3JldCA9IG9rOworKyAgICBzdGF0ZV90eXBlIF9fdG1wX3N0YXRlKF9fc3RhdGUpOworKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKKysjZW5kaWYKKysKKysgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKysgICAgLy8gaW4gY2FzZSB3ZSBmYWxsIGJhY2sgdG8gd2NydG9tYiBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogd2NzbnJ0b21icyBpcyBhIEdOVSBleHRlbnNpb24KKysgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9fZnJvbSwgX190b19uZXh0ID0gX190bzsKKysJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorKwkgJiYgX19yZXQgPT0gb2s7KQorKyAgICAgIHsKKysJY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9jaHVua19lbmQgPSB3bWVtY2hyKF9fZnJvbV9uZXh0LCBMJ1wwJywKKysJCQkJCQkgICAgICBfX2Zyb21fZW5kIC0gX19mcm9tX25leHQpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwljb25zdCBzaXplX3QgX19jb252ID0gd2NzbnJ0b21icyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJCSBfX2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisrCQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gd2NydG9tYi4KKysJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisrCSAgICAgIF9fdG9fbmV4dCArPSB3Y3J0b21iKF9fdG9fbmV4dCwgKl9fZnJvbSwgJl9fdG1wX3N0YXRlKTsKKysJICAgIF9fc3RhdGUgPSBfX3RtcF9zdGF0ZTsKKysJICAgIF9fcmV0ID0gZXJyb3I7CisrCSAgfQorKwllbHNlIGlmIChfX2Zyb21fbmV4dCAmJiBfX2Zyb21fbmV4dCA8IF9fZnJvbV9jaHVua19lbmQpCisrCSAgeworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisrCSAgICBfX3RvX25leHQgKz0gX19jb252OworKwkgIH0KKysKKysJaWYgKF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3JldCA9PSBvaykKKysJICB7CisrCSAgICBleHRlcm5fdHlwZSBfX2J1ZltNQl9MRU5fTUFYXTsKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgIGNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3J0b21iKF9fYnVmLCAqX19mcm9tX25leHQsICZfX3RtcF9zdGF0ZSk7CisrCSAgICBpZiAoX19jb252ID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX3RvX2VuZCAtIF9fdG9fbmV4dCkpCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICAgIGVsc2UKKysJICAgICAgeworKwkJbWVtY3B5KF9fdG9fbmV4dCwgX19idWYsIF9fY29udik7CisrCQlfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCQlfX3RvX25leHQgKz0gX19jb252OworKwkJKytfX2Zyb21fbmV4dDsKKysJICAgICAgfQorKwkgIH0KKysgICAgICB9CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbmRpZgorKworKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAorKwlpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKKysgIHsKKysgICAgcmVzdWx0IF9fcmV0ID0gb2s7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIHN0b3JlIGEgTCdcMCcgYW5kIHRoZW4gY29udGludWUsIGluIGEgbG9vcC4KKysgICAgLy8gTkI6IG1ic25ydG93Y3MgaXMgYSBHTlUgZXh0ZW5zaW9uCisrICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87CisrCSBfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX190b19uZXh0IDwgX190b19lbmQKKysJICYmIF9fcmV0ID09IG9rOykKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tX25leHQsICdcMCcsCisrCQkJCQkJCQkgIF9fZnJvbV9lbmQKKysJCQkJCQkJCSAgLSBfX2Zyb21fbmV4dCkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisrCisrCV9fZnJvbSA9IF9fZnJvbV9uZXh0OworKwlzaXplX3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAorKwkJCQkgICBfX3RvX2VuZCAtIF9fdG9fbmV4dCwgJl9fc3RhdGUpOworKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQorKwkgIHsKKysJICAgIC8vIEluIGNhc2Ugb2YgZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisrCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisrCSAgICAvLyBtYnJ0b3djLgorKwkgICAgZm9yICg7OyArK19fdG9fbmV4dCwgX19mcm9tICs9IF9fY29udikKKysJICAgICAgeworKwkJX19jb252ID0gbWJydG93YyhfX3RvX25leHQsIF9fZnJvbSwgX19mcm9tX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb207CisrCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisrCSAgICBfX3JldCA9IGVycm9yOworKwkgIH0KKysJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5kKQorKwkgIHsKKysJICAgIC8vIEl0IGlzIHVuY2xlYXIgd2hhdCB0byByZXR1cm4gaW4gdGhpcyBjYXNlIChzZWUgRFIgMzgyKS4KKysJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisrCSAgICBfX3JldCA9IHBhcnRpYWw7CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19mcm9tX25leHQgPSBfX2Zyb21fY2h1bmtfZW5kOworKwkgICAgX190b19uZXh0ICs9IF9fY29udjsKKysJICB9CisrCisrCWlmIChfX2Zyb21fbmV4dCA8IF9fZnJvbV9lbmQgJiYgX19yZXQgPT0gb2spCisrCSAgeworKwkgICAgaWYgKF9fdG9fbmV4dCA8IF9fdG9fZW5kKQorKwkgICAgICB7CisrCQkvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworKwkJX190bXBfc3RhdGUgPSBfX3N0YXRlOworKwkJKytfX2Zyb21fbmV4dDsKKysJCSpfX3RvX25leHQrKyA9IEwnXDAnOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKysJICB9CisrICAgICAgfQorKworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZW5kaWYKKysKKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgaW50CisrICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46OgorKyAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCisrICB7CisrICAgIC8vIFhYWCBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMKKysgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIgc2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisrICAgIGludCBfX3JldCA9IDA7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICBpZiAoTUJfQ1VSX01BWCA9PSAxKQorKyAgICAgIF9fcmV0ID0gMTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKyAgICAvLyBYWFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncy4KKysgICAgaW50IF9fcmV0ID0gTUJfQ1VSX01BWDsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysKKysgIGludAorKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKysgIGRvX2xlbmd0aChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAorKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CisrICB7CisrICAgIGludCBfX3JldCA9IDA7CisrICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19zdGF0ZSk7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworKyNlbmRpZgorKworKyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJzIE5VTCBjaGFyYWN0ZXJzOgorKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFzdCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorKyAgICAvLyBOQjogbWJzbnJ0b3djcyBpcyBhIEdOVSBleHRlbnNpb24KKysKKysgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisrICAgIC8vIGl0cyBmb3VydGggcGFyYW1ldGVyIChpdCB3b3VsZG4ndCB3aXRoIE5VTEwgYXMgZmlyc3QgcGFyYW1ldGVyKS4KKysgICAgd2NoYXJfdCogX190byA9IHN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3Y2hhcl90KQorKwkJCQkJCQkgICAqIF9fbWF4KSk7CisrICAgIHdoaWxlIChfX2Zyb20gPCBfX2VuZCAmJiBfX21heCkKKysgICAgICB7CisrCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fY2h1bmtfZW5kOworKwlfX2Zyb21fY2h1bmtfZW5kID0gc3RhdGljX2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihtZW1jaHIoX19mcm9tLCAnXDAnLAorKwkJCQkJCQkJICBfX2VuZAorKwkJCQkJCQkJICAtIF9fZnJvbSkpOworKwlpZiAoIV9fZnJvbV9jaHVua19lbmQpCisrCSAgX19mcm9tX2NodW5rX2VuZCA9IF9fZW5kOworKworKwljb25zdCBleHRlcm5fdHlwZSogX190bXBfZnJvbSA9IF9fZnJvbTsKKysJc2l6ZV90IF9fY29udiA9IG1ic25ydG93Y3MoX190bywgJl9fZnJvbSwKKysJCQkJICAgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbSwKKysJCQkJICAgX19tYXgsICZfX3N0YXRlKTsKKysJaWYgKF9fY29udiA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKKysJICB7CisrCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorKwkgICAgLy8gaGF2ZSB0byBzdGFydCBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcgd2l0aCBhIHNlcmllcyBvZgorKwkgICAgLy8gbWJydG93Yy4KKysJICAgIGZvciAoX19mcm9tID0gX190bXBfZnJvbTs7IF9fZnJvbSArPSBfX2NvbnYpCisrCSAgICAgIHsKKysJCV9fY29udiA9IG1icnRvd2MoTlVMTCwgX19mcm9tLCBfX2VuZCAtIF9fZnJvbSwKKysJCQkJICZfX3RtcF9zdGF0ZSk7CisrCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisrCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIpKQorKwkJICBicmVhazsKKysJICAgICAgfQorKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworKwkgICAgX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJICAgIGJyZWFrOworKwkgIH0KKysJaWYgKCFfX2Zyb20pCisrCSAgX19mcm9tID0gX19mcm9tX2NodW5rX2VuZDsKKysKKysJX19yZXQgKz0gX19mcm9tIC0gX190bXBfZnJvbTsKKysJX19tYXggLT0gX19jb252OworKworKwlpZiAoX19mcm9tIDwgX19lbmQgJiYgX19tYXgpCisrCSAgeworKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MKKysJICAgIF9fdG1wX3N0YXRlID0gX19zdGF0ZTsKKysJICAgICsrX19mcm9tOworKwkgICAgKytfX3JldDsKKysJICAgIC0tX19tYXg7CisrCSAgfQorKyAgICAgIH0KKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrCisrICAgIHJldHVybiBfX3JldDsKKysgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5jMjY2NGE3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDgwIEBACisrLy8gc3RkOjpjb2xsYXRlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorKworKyNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyNkZWZpbmUgX19zdHJjb2xsX2woUzEsIFMyLCBMKSAgICAgIHN0cmNvbGwoKFMxKSwgKFMyKSkKKysjZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjZGVmaW5lIF9fd2NzY29sbF9sKFMxLCBTMiwgTCkgICAgICB3Y3Njb2xsKChTMSksIChTMikpCisrI2RlZmluZSBfX3djc3hmcm1fbChTMSwgUzIsIE4sIEwpICAgd2NzeGZybSgoUzEpLCAoUzIpLCAoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIFRoZXNlIGFyZSBiYXNpY2FsbHkgZXh0ZW5zaW9ucyB0byBjaGFyX3RyYWl0cywgYW5kIHBlcmhhcHMgc2hvdWxkCisrICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwgY29uc3QgY2hhciogX190d28pIGNvbnN0CisrICAgIHsKKysgICAgICBpbnQgX19jbXAgPSBfX3N0cmNvbGxfbChfX29uZSwgX190d28sIF9NX2NfbG9jYWxlX2NvbGxhdGUpOworKyAgICAgIHJldHVybiAoX19jbXAgPj4gKDggKiBzaXplb2YgKGludCkgLSAyKSkgfCAoX19jbXAgIT0gMCk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgc2l6ZV90CisrICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiBfX3RvLCBjb25zdCBjaGFyKiBfX2Zyb20sCisrCQkJCXNpemVfdCBfX24pIGNvbnN0CisrICAgIHsgcmV0dXJuIF9fc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICBpbnQKKysgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fY29tcGFyZShjb25zdCB3Y2hhcl90KiBfX29uZSwKKysJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25zdAorKyAgICB7CisrICAgICAgaW50IF9fY21wID0gX193Y3Njb2xsX2woX19vbmUsIF9fdHdvLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsKKysgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHNpemVfdAorKyAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCogX190bywgY29uc3Qgd2NoYXJfdCogX19mcm9tLAorKwkJCQkgICBzaXplX3QgX19uKSBjb25zdAorKyAgICB7IHJldHVybiBfX3djc3hmcm1fbChfX3RvLCBfX2Zyb20sIF9fbiwgX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyOTRlM2EKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDMwMCBAQAorKy8vIHN0ZDo6Y3R5cGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjEuMS4yICBjdHlwZSB2aXJ0dWFsIGZ1bmN0aW9ucy4KKysvLworKworKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisrCisrI2RlZmluZSBfTElCQworKyNpbmNsdWRlIDxsb2NhbGU+CisrI3VuZGVmIF9MSUJDCisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICB3Y3R5cGUoKFMpKQorKyNkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgdG93dXBwZXIoKEMpKQorKyNkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgdG93bG93ZXIoKEMpKQorKyNkZWZpbmUgX19pc3djdHlwZV9sKEMsIE0sIEwpICAgICAgaXN3Y3R5cGUoKEMpLCAoTSkpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIC8vIE5COiBUaGUgb3RoZXIgY3R5cGU8Y2hhcj4gc3BlY2lhbGl6YXRpb25zIGFyZSBpbiBzcmMvbG9jYWxlLmNjIGFuZAorKyAgLy8gdmFyaW91cyAvY29uZmlnL29zLyogZmlsZXMuCisrICB0ZW1wbGF0ZTw+CisrICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgOiBjdHlwZTxjaGFyPigwLCBmYWxzZSwgX19yZWZzKQorKyAgICB7CisrICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJeworKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2NhbGUodGhpcy0+X01fY19sb2NhbGVfY3R5cGUpOworKwkgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZSwgX19zKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIHRoaXMtPl9NX3RvdXBwZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b3VwcGVyOworKwkgIHRoaXMtPl9NX3RvbG93ZXIgPSB0aGlzLT5fTV9jX2xvY2FsZV9jdHlwZS0+X19jdHlwZV90b2xvd2VyOworKwkgIHRoaXMtPl9NX3RhYmxlID0gdGhpcy0+X01fY19sb2NhbGVfY3R5cGUtPl9fY3R5cGVfYjsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCisrICBjdHlwZTx3Y2hhcl90Pjo6X01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3QKKysgIHsKKysgICAgX193bWFza190eXBlIF9fcmV0OworKyAgICBzd2l0Y2ggKF9fbSkKKysgICAgICB7CisrICAgICAgY2FzZSBzcGFjZToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJzcGFjZSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwcmludDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBjbnRybDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJjbnRybCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB1cHBlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJ1cHBlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBsb3dlcjoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJsb3dlciIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBhbHBoYToKKysJX19yZXQgPSBfX3djdHlwZV9sKCJhbHBoYSIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBkaWdpdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJkaWdpdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSBwdW5jdDoKKysJX19yZXQgPSBfX3djdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysJYnJlYWs7CisrICAgICAgY2FzZSB4ZGlnaXQ6CisrCV9fcmV0ID0gX193Y3R5cGVfbCgieGRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGFsbnVtOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImFsbnVtIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBjYXNlIGdyYXBoOgorKwlfX3JldCA9IF9fd2N0eXBlX2woImdyYXBoIiwgX01fY19sb2NhbGVfY3R5cGUpOworKwlicmVhazsKKysgICAgICBkZWZhdWx0OgorKwlfX3JldCA9IF9fd21hc2tfdHlwZSgpOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvdXBwZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd3VwcGVyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd3VwcGVyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgd2NoYXJfdAorKyAgY3R5cGU8d2NoYXJfdD46OmRvX3RvbG93ZXIod2NoYXJfdCBfX2MpIGNvbnN0CisrICB7IHJldHVybiBfX3Rvd2xvd2VyX2woX19jLCBfTV9jX2xvY2FsZV9jdHlwZSk7IH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90KiBfX2xvLCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKyAgICAgICAgKl9fbG8gPSBfX3Rvd2xvd2VyX2woKl9fbG8sIF9NX2NfbG9jYWxlX2N0eXBlKTsKKysgICAgICAgICsrX19sbzsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgYm9vbAorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorKyAgeworKyAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorKyAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgYm9vbCBfX3JldCA9IGZhbHNlOworKyAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKyAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKysJICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJeworKwkgIF9fcmV0ID0gdHJ1ZTsKKysJICBicmVhazsKKysJfQorKyAgICByZXR1cm4gX19yZXQ7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9faXMoY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CisrICB7CisrICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQorKyAgICAgIHsKKysJLy8gSGlnaGVzdCBiaXRtYXNrIGluIGN0eXBlX2Jhc2UgPT0gMTAsIGJ1dCBleHRyYSBpbiAiQyIKKysJLy8gbGlicmFyeSBmb3IgYmxhbmsuCisrCWNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gMTE7CisrCW1hc2sgX19tID0gMDsKKysJZm9yIChzaXplX3QgX19iaXRjdXIgPSAwOyBfX2JpdGN1ciA8PSBfX2JpdG1hc2tzaXplOyArK19fYml0Y3VyKQorKwkgIGlmIChfX2lzd2N0eXBlX2woKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQorKwkgICAgX19tIHw9IF9NX2JpdFtfX2JpdGN1cl07CisrCSpfX3ZlYyA9IF9fbTsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY29uc3Qgd2NoYXJfdCoKKysgIGN0eXBlPHdjaGFyX3Q+OjoKKysgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiAhdGhpcy0+ZG9faXMoX19tLCAqX19sbykpCisrICAgICAgKytfX2xvOworKyAgICByZXR1cm4gX19sbzsKKysgIH0KKysKKysgIGNvbnN0IHdjaGFyX3QqCisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CisrICB7CisrICAgIHdoaWxlIChfX2xvIDwgX19oaSAmJiB0aGlzLT5kb19pcyhfX20sICpfX2xvKSAhPSAwKQorKyAgICAgICsrX19sbzsKKysgICAgcmV0dXJuIF9fbG87CisrICB9CisrCisrICB3Y2hhcl90CisrICBjdHlwZTx3Y2hhcl90Pjo6CisrICBkb193aWRlbihjaGFyIF9fYykgY29uc3QKKysgIHsgcmV0dXJuIF9NX3dpZGVuW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldOyB9CisrCisrICBjb25zdCBjaGFyKgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgd2NoYXJfdCogX19kZXN0KSBjb25zdAorKyAgeworKyAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrICAgICAgeworKwkqX19kZXN0ID0gX01fd2lkZW5bc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG8pXTsKKysJKytfX2xvOworKwkrK19fZGVzdDsKKysgICAgICB9CisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgY2hhcgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KHdjaGFyX3QgX193YywgY2hhciBfX2RmYXVsdCkgY29uc3QKKysgIHsKKysgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19vaykKKysgICAgICByZXR1cm4gX01fbmFycm93W19fd2NdOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIGNvbnN0IGludCBfX2MgPSB3Y3RvYihfX3djKTsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiAoX19jID09IEVPRiA/IF9fZGZhdWx0IDogc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7CisrICB9CisrCisrICBjb25zdCB3Y2hhcl90KgorKyAgY3R5cGU8d2NoYXJfdD46OgorKyAgZG9fbmFycm93KGNvbnN0IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCisrCSAgICBjaGFyKiBfX2Rlc3QpIGNvbnN0CisrICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2N0eXBlKTsKKysjZW5kaWYKKysgICAgaWYgKF9NX25hcnJvd19vaykKKysgICAgICB3aGlsZSAoX19sbyA8IF9faGkpCisrCXsKKysJICBpZiAoKl9fbG8gPj0gMCAmJiAqX19sbyA8IDEyOCkKKysJICAgICpfX2Rlc3QgPSBfTV9uYXJyb3dbKl9fbG9dOworKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9iKCpfX2xvKTsKKysJICAgICAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICAgIH0KKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysgICAgZWxzZQorKyAgICAgIHdoaWxlIChfX2xvIDwgX19oaSkKKysJeworKwkgIGNvbnN0IGludCBfX2MgPSB3Y3RvYigqX19sbyk7CisrCSAgKl9fZGVzdCA9IChfX2MgPT0gRU9GID8gX19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKKysJICArK19fbG87CisrCSAgKytfX2Rlc3Q7CisrCX0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICAgIHJldHVybiBfX2hpOworKyAgfQorKworKyAgdm9pZAorKyAgY3R5cGU8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfY3R5cGUoKQorKyAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CisrI2VuZGlmCisrICAgIHdpbnRfdCBfX2k7CisrICAgIGZvciAoX19pID0gMDsgX19pIDwgMTI4OyArK19faSkKKysgICAgICB7CisrCWNvbnN0IGludCBfX2MgPSB3Y3RvYihfX2kpOworKwlpZiAoX19jID09IEVPRikKKysJICBicmVhazsKKysJZWxzZQorKwkgIF9NX25hcnJvd1tfX2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKTsKKysgICAgICB9CisrICAgIGlmIChfX2kgPT0gMTI4KQorKyAgICAgIF9NX25hcnJvd19vayA9IHRydWU7CisrICAgIGVsc2UKKysgICAgICBfTV9uYXJyb3dfb2sgPSBmYWxzZTsKKysgICAgZm9yIChzaXplX3QgX19qID0gMDsKKysJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yod2ludF90KTsgKytfX2opCisrICAgICAgX01fd2lkZW5bX19qXSA9IGJ0b3djKF9faik7CisrCisrICAgIGZvciAoc2l6ZV90IF9fayA9IDA7IF9fayA8PSAxMTsgKytfX2spCisrICAgICAgeworKwlfTV9iaXRbX19rXSA9IHN0YXRpY19jYXN0PG1hc2s+KF9JU2JpdChfX2spKTsKKysJX01fd21hc2tbX19rXSA9IF9NX2NvbnZlcnRfdG9fd21hc2soX01fYml0W19fa10pOworKyAgICAgIH0KKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKyAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2VuZGlmCisrICB9CisrI2VuZGlmIC8vICBfR0xJQkNYWF9VU0VfV0NIQVJfVAorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTM1OTRkOQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsMTAwIEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisrCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKysjdW5kZWYgZ2V0dGV4dAorKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNlbHNlCisrI3VuZGVmIGdldHRleHQKKysjZGVmaW5lIGdldHRleHQobXNnaWQpIChtc2dpZCkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gU3BlY2lhbGl6YXRpb25zLgorKyAgdGVtcGxhdGU8PgorKyAgICBzdHJpbmcKKysgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJiBfX2RmYXVsdCkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KGdldHRleHQoX19kZmF1bHQuY19zdHIoKSkpOworKyAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysgICAgICByZXR1cm4gc3RyaW5nKF9fbXNnKTsKKysjZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKyAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKKysgICAgICBjb25zdCBjaGFyKiBfX21zZyA9IGdldHRleHQoX19kZmF1bHQuY19zdHIoKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbHNlCisrICAgICAgY29uc3QgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9fZGZhdWx0LmNfc3RyKCkpOworKyAgICAgIHJldHVybiBzdHJpbmcoX19tc2cpOworKyNlbmRpZgorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHdzdHJpbmcKKysgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgd3N0cmluZyYgX19kZmF1bHQpIGNvbnN0CisrICAgIHsKKysjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOworKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICBfX3VzZWxvY2FsZShfX29sZCk7CisrICAgICAgcmV0dXJuIF9NX2NvbnZlcnRfZnJvbV9jaGFyKF9fbXNnKTsKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV9tZXNzYWdlcyk7CisrICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2NvbnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysgICAgICBmcmVlKF9fb2xkKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZWxzZQorKyAgICAgIGNoYXIqIF9fbXNnID0gZ2V0dGV4dChfTV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpKTsKKysgICAgICByZXR1cm4gX01fY29udmVydF9mcm9tX2NoYXIoX19tc2cpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorK30KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjE0MjQwNzgKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK0BAIC0wLDAgKzEsMTE4IEBACisrLy8gc3RkOjptZXNzYWdlcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBHTlUgdmVyc2lvbiAtKi0gQysrIC0qLQorKworKy8vIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysvLworKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKysvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKysvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorKworKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisrLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsCisrLy8gVVNBLgorKworKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgdXNlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgZnJlZSBzb2Z0d2FyZQorKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKysvLyB0ZW1wbGF0ZXMgb3IgdXNlIG1hY3JvcyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZQorKy8vIHRoaXMgZmlsZSBhbmQgbGluayBpdCB3aXRoIG90aGVyIGZpbGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgdGhpcworKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlcgorKy8vIGludmFsaWRhdGUgYW55IG90aGVyIHJlYXNvbnMgd2h5IHRoZSBleGVjdXRhYmxlIGZpbGUgbWlnaHQgYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKysKKysvLworKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggcHJvdG90eXBlcyBmb3IgKnRleHRkb21haW4gZnVuY3MKKysjZW5kaWYKKysjaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKytleHRlcm4gIkMiIGNoYXIgKl9fdGV4dGRvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKTsKKytleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKysJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lKTsKKysjZWxzZQorKyN1bmRlZiBfX3RleHRkb21haW4KKysjdW5kZWYgX19iaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgX190ZXh0ZG9tYWluKEQpICAgICAgICAgICAoKHZvaWQpMCkKKysjZGVmaW5lIF9fYmluZHRleHRkb21haW4oRCxQKSAgICAgKCh2b2lkKTApCisrI2VuZGlmCisrCisrICAvLyBOb24tdmlydHVhbCBtZW1iZXIgZnVuY3Rpb25zLgorKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoc2l6ZV90IF9fcmVmcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfZ2V0X2NfbG9jYWxlKCkpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfU19nZXRfY19uYW1lKCkpCisrICAgICB7IH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgIG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCXNpemVfdCBfX3JlZnMpCisrICAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2NfbG9jYWxlX21lc3NhZ2VzKF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYykpLAorKyAgICAgX01fbmFtZV9tZXNzYWdlcyhfX3MpCisrICAgICB7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworKyAgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisrICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisrCQkJICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CisrICAgIHsKKysgICAgICBfX2JpbmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CisrICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisrICAgIH0KKysKKysgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgbWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKKysgICAgeworKyAgICAgIGlmIChfTV9uYW1lX21lc3NhZ2VzICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfbWVzc2FnZXM7CisrICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZworKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CisrICAgIHsKKysgICAgICAvLyBObyBlcnJvciBjaGVja2luZyBpcyBkb25lLCBhc3N1bWUgdGhlIGNhdGFsb2cgZXhpc3RzIGFuZCBjYW4KKysgICAgICAvLyBiZSB1c2VkLgorKyAgICAgIF9fdGV4dGRvbWFpbihfX3MuY19zdHIoKSk7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgdm9pZAorKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAorKyAgICB7IH0KKysKKysgICAvLyBtZXNzYWdlc19ieW5hbWUKKysgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcykKKysgICAgIDogbWVzc2FnZXM8X0NoYXJUPihfX3JlZnMpCisrICAgICB7CisrICAgICAgIGlmICh0aGlzLT5fTV9uYW1lX21lc3NhZ2VzICE9IGxvY2FsZTo6ZmFjZXQ6Ol9TX2dldF9jX25hbWUoKSkKKysJIGRlbGV0ZSBbXSB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzOworKyAgICAgICBjaGFyKiBfX3RtcCA9IG5ldyBjaGFyW3N0ZDo6c3RybGVuKF9fcykgKyAxXTsKKysgICAgICAgc3RkOjpzdHJjcHkoX190bXAsIF9fcyk7CisrICAgICAgIHRoaXMtPl9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgaWYgKHN0ZDo6c3RyY21wKF9fcywgIkMiKSAhPSAwICYmIHN0ZDo6c3RyY21wKF9fcywgIlBPU0lYIikgIT0gMCkKKysJIHsKKysJICAgdGhpcy0+X1NfZGVzdHJveV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcyk7CisrCSAgIHRoaXMtPl9TX2NyZWF0ZV9jX2xvY2FsZSh0aGlzLT5fTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKKysJIH0KKysgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYWE1MjczMQorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC0wLDAgKzEsNjkyIEBACisrLy8gc3RkOjptb25leXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi42LjMuMiAgbW9uZXlwdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBvcHRpbWl6ZSB0aGlzIGZvciB1Y2xpYmMKKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgLy8gQ29uc3RydWN0IGFuZCByZXR1cm4gdmFsaWQgcGF0dGVybiBjb25zaXN0aW5nIG9mIHNvbWUgY29tYmluYXRpb24gb2Y6CisrICAvLyBzcGFjZSBub25lIHN5bWJvbCBzaWduIHZhbHVlCisrICBtb25leV9iYXNlOjpwYXR0ZXJuCisrICBtb25leV9iYXNlOjpfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pCisrICB7CisrICAgIHBhdHRlcm4gX19yZXQ7CisrCisrICAgIC8vIFRoaXMgaW5zYW5lbHkgY29tcGxpY2F0ZWQgcm91dGluZSBhdHRlbXB0cyB0byBjb25zdHJ1Y3QgYSB2YWxpZAorKyAgICAvLyBwYXR0ZXJuIGZvciB1c2Ugd2l0aCBtb255ZXB1bmN0LiBBIGNvdXBsZSBvZiBpbnZhcmlhbnRzOgorKworKyAgICAvLyBpZiAoX19wcmVjZWRlcykgc3ltYm9sIC0+IHZhbHVlCisrICAgIC8vIGVsc2UgdmFsdWUgLT4gc3ltYm9sCisrCisrICAgIC8vIGlmIChfX3NwYWNlKSBzcGFjZQorKyAgICAvLyBlbHNlIG5vbmUKKysKKysgICAgLy8gbm9uZSA9PSBuZXZlciBmaXJzdAorKyAgICAvLyBzcGFjZSBuZXZlciBmaXJzdCBvciBsYXN0CisrCisrICAgIC8vIEFueSBlbGVnYW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIGFyZSB3ZWxjb21lLgorKyAgICBzd2l0Y2ggKF9fcG9zbikKKysgICAgICB7CisrICAgICAgY2FzZSAwOgorKyAgICAgIGNhc2UgMToKKysJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4KKysJX19yZXQuZmllbGRbMF0gPSBzaWduOworKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24uCisrCSAgICBpZiAoX19wcmVjZWRlcykKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IHN5bWJvbDsKKysJICAgICAgfQorKwkgICAgX19yZXQuZmllbGRbMl0gPSBzcGFjZTsKKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIHNpZ24gYW5kIGVuZHMgd2l0aCBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMl0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMjoKKysJLy8gMiBUaGUgc2lnbiBmb2xsb3dzIHRoZSB2YWx1ZSBhbmQgc3ltYm9sLgorKwlpZiAoX19zcGFjZSkKKysJICB7CisrCSAgICAvLyBQYXR0ZXJuIGVpdGhlciBlbmRzIHdpdGggc2lnbi4KKysJICAgIGlmIChfX3ByZWNlZGVzKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3ltYm9sOworKwkgICAgICB9CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkgICAgX19yZXQuZmllbGRbM10gPSBzaWduOworKwkgIH0KKysJZWxzZQorKwkgIHsKKysJICAgIC8vIFBhdHRlcm4gZW5kcyB3aXRoIHNpZ24gdGhlbiBub25lLgorKwkgICAgaWYgKF9fcHJlY2VkZXMpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkJX19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIF9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJICAgIF9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgMzoKKysJLy8gMyBUaGUgc2lnbiBpbW1lZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorKwlpZiAoX19wcmVjZWRlcykKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHNpZ247CisrCSAgICBfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworKwkJX19yZXQuZmllbGRbM10gPSBub25lOworKwkgICAgICB9CisrCSAgfQorKwllbHNlCisrCSAgeworKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKysJICAgIGlmIChfX3NwYWNlKQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworKwkJX19yZXQuZmllbGRbMl0gPSBzaWduOworKwkJX19yZXQuZmllbGRbM10gPSBzeW1ib2w7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgeworKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWJyZWFrOworKyAgICAgIGNhc2UgNDoKKysJLy8gNCBUaGUgc2lnbiBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBzeW1ib2wuCisrCWlmIChfX3ByZWNlZGVzKQorKwkgIHsKKysJICAgIF9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworKwkgICAgX19yZXQuZmllbGRbMV0gPSBzaWduOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFszXSA9IHZhbHVlOworKwkgICAgICB9CisrCSAgICBlbHNlCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisrCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisrCSAgICAgIH0KKysJICB9CisrCWVsc2UKKysJICB7CisrCSAgICBfX3JldC5maWVsZFswXSA9IHZhbHVlOworKwkgICAgaWYgKF9fc3BhY2UpCisrCSAgICAgIHsKKysJCV9fcmV0LmZpZWxkWzFdID0gc3BhY2U7CisrCQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKysJICAgICAgfQorKwkgICAgZWxzZQorKwkgICAgICB7CisrCQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKysJCV9fcmV0LmZpZWxkWzJdID0gc2lnbjsKKysJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKysJICAgICAgfQorKwkgIH0KKysJYnJlYWs7CisrICAgICAgZGVmYXVsdDoKKysJOworKyAgICAgIH0KKysgICAgcmV0dXJuIF9fcmV0OworKyAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysJCQkJCQkgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCB0cnVlPjsKKysKKysgICAgICBpZiAoIV9fY2xvYykKKysJeworKwkgIC8vICJDIiBsb2NhbGUKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zW19faV0gPSBtb25leV9iYXNlOjpfU19hdG9tc1tfX2ldOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAqKF9fbmxfbGFuZ2luZm9fbChfX01PTl9ERUNJTUFMX1BPSU5ULAorKwkJCQkJCQlfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fVEhPVVNBTkRTX1NFUCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fbmxfbGFuZ2luZm9fbChfX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgIGNoYXIgX19ucG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gdHJ1ZQorKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fY3Vycl9zeW1ib2wpOworKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfRlJBQ19ESUdJVFMsCisrCQkJCQkJICAgICAgX19jbG9jKSk7CisrCSAgY2hhciBfX3BwcmVjZWRlcyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgY2hhciBfX3Bwb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisrCQkJCQkJCV9fcHBvc24pOworKwkgIGNoYXIgX19ucHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisrCQkJCQkJCV9fbnBvc24pOworKwl9CisrICAgIH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKwkJCQkJCSAgICAgIGNvbnN0IGNoYXIqKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbW9uZXlwdW5jdF9jYWNoZTxjaGFyLCBmYWxzZT47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIC8vIE5hbWVkIGxvY2FsZS4KKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gKihfX25sX2xhbmdpbmZvX2woX19NT05fREVDSU1BTF9QT0lOVCwKKysJCQkJCQkJX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICooX19ubF9sYW5naW5mb19sKF9fTU9OX1RIT1VTQU5EU19TRVAsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ubF9sYW5naW5mb19sKF9fTU9OX0dST1VQSU5HLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKysKKysJICBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBpZiAoIV9fbnBvc24pCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIigpIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwKKysJCQkJCQkJX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgLy8gX0ludGwgPT0gZmFsc2UKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fbmxfbGFuZ2luZm9fbChfX0NVUlJFTkNZX1NZTUJPTCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJCQkJCQkJX19ucG9zbik7CisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsgZGVsZXRlIF9NX2RhdGE7IH0KKysKKysgIHRlbXBsYXRlPD4KKysgICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkJCQkJCQljb25zdCBjaGFyKikKKysjZWxzZQorKwkJCQkJCQljb25zdCBjaGFyKiBfX25hbWUpCisrI2VuZGlmCisrICAgIHsKKysgICAgICBpZiAoIV9NX2RhdGEpCisrCV9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIHRydWU+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fdS5fX3c7CisrCisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysjZW5kaWYKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChfX01PTl9HUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysKKysJICBjb25zdCBjaGFyKiBfX2Nwb3NzaWduID0gX19ubF9sYW5naW5mb19sKF9fUE9TSVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NuZWdzaWduID0gX19ubF9sYW5naW5mb19sKF9fTkVHQVRJVkVfU0lHTiwgX19jbG9jKTsKKysJICBjb25zdCBjaGFyKiBfX2NjdXJyID0gX19ubF9sYW5naW5mb19sKF9fSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2MpOworKworKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKysJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisrCSAgY29uc3QgY2hhciBfX25wb3NuID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9TSUdOX1BPU04sIF9fY2xvYykpOworKwkgIHRyeQorKwkgICAgeworKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysJICAgICAgc2l6ZV90IF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbik7CisrCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3NpZ24pOworKwkgICAgICBpZiAoIV9fbnBvc24pCisrCQlfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gTCIoKSI7CisrCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKysJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24pOworKworKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKysJICAgICAgaWYgKF9fbGVuKQorKwkJeworKwkJICArK19fbGVuOworKwkJICBtZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKysJCSAgd2NoYXJfdCogX193Y3MgPSBuZXcgd2NoYXJfdFtfX2xlbl07CisrCQkgIG1ic3J0b3djcyhfX3djcywgJl9fY2N1cnIsIF9fbGVuLCAmX19zdGF0ZSk7CisrCQkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gX193Y3M7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sID0gTCIiOworKwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysJICBjYXRjaCAoLi4uKQorKwkgICAgeworKwkgICAgICBkZWxldGUgX01fZGF0YTsKKysJICAgICAgX01fZGF0YSA9IDA7CisrCSAgICAgIGRlbGV0ZSBfX3djc19wczsKKysJICAgICAgZGVsZXRlIF9fd2NzX25zOworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgICAgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKwkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX0ZSQUNfRElHSVRTLAorKwkJCQkJCSAgICAgIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfUF9TRVBfQllfU1BBQ0UsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcG9zbiA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkJCQkJCQlfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisrCSAgY2hhciBfX25zcGFjZSA9ICooX19ubF9sYW5naW5mb19sKF9fSU5UX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19ucHJlY2VkZXMsIF9fbnNwYWNlLAorKwkJCQkJCQlfX25wb3NuKTsKKysKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworKwkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKysjZWxzZQorKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICBmcmVlKF9fb2xkKTsKKysjZW5kaWYKKysJfQorKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICB2b2lkCisrICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorKyNlbHNlCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSkKKysjZW5kaWYKKysgIHsKKysgICAgaWYgKCFfTV9kYXRhKQorKyAgICAgIF9NX2RhdGEgPSBuZXcgX19tb25leXB1bmN0X2NhY2hlPHdjaGFyX3QsIGZhbHNlPjsKKysKKysgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysgICAgICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IEwiIjsKKysJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisrCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKysJICBfTV9kYXRhLT5fTV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworKworKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3aXRob3V0IHRoZSBmYWNldC4uLgorKwkgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IG1vbmV5X2Jhc2U6Ol9TX2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc1tfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX2NfbG9jYWxlIF9fb2xkID0gX191c2Vsb2NhbGUoX19jbG9jKTsKKysjZWxzZQorKwkgIC8vIFN3aXRjaCB0byBuYW1lZCBsb2NhbGUgc28gdGhhdCBtYnNydG93Y3Mgd2lsbCB3b3JrLgorKwkgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworKyNlbmRpZgorKworKyNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworKyN3YXJuaW5nIGZpeCB0aGlzLi4uIHNob3VsZCBiZSBtb25ldGFyeQorKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxzZQorKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKysgICAgICAgICAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgX193OyB9IF9fdTsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woX19NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisrICAgICAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBzdHJsZW4oX01fZGF0YS0+X01fZ3JvdXBpbmcpOworKworKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19QT1NJVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPSBfX25sX2xhbmdpbmZvX2woX19ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPSBfX25sX2xhbmdpbmZvX2woX19DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisrCisrCSAgd2NoYXJfdCogX193Y3NfcHMgPSAwOworKwkgIHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKysJICBjb25zdCBjaGFyIF9fbnBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICB0cnkKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKysgICAgICAgICAgICAgIHNpemVfdCBfX2xlbjsKKysgICAgICAgICAgICAgIF9fbGVuID0gc3RybGVuKF9fY3Bvc3NpZ24pOworKyAgICAgICAgICAgICAgaWYgKF9fbGVuKQorKyAgICAgICAgICAgICAgICB7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICBfX3djc19wcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2NzX3BzOworKwkJfQorKwkgICAgICBlbHNlCisrCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworKyAgICAgICAgICAgICAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24pOworKworKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKysJICAgICAgaWYgKCFfX25wb3NuKQorKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiKCkiOworKwkgICAgICBlbHNlIGlmIChfX2xlbikKKysJCXsKKysJCSAgKytfX2xlbjsKKysJCSAgbWVtc2V0KCZfX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisrCQkgIF9fd2NzX25zID0gbmV3IHdjaGFyX3RbX19sZW5dOworKwkJICBtYnNydG93Y3MoX193Y3NfbnMsICZfX2NuZWdzaWduLCBfX2xlbiwgJl9fc3RhdGUpOworKwkJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX193Y3NfbnM7CisrCQl9CisrCSAgICAgIGVsc2UKKysJCV9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSB3Y3NsZW4oX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbik7CisrCisrCSAgICAgIC8vIF9JbnRsID09IHRydWUuCisrCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworKwkgICAgICBpZiAoX19sZW4pCisrCQl7CisrCQkgICsrX19sZW47CisrCQkgIG1lbXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKwkJICB3Y2hhcl90KiBfX3djcyA9IG5ldyB3Y2hhcl90W19fbGVuXTsKKysJCSAgbWJzcnRvd2NzKF9fd2NzLCAmX19jY3VyciwgX19sZW4sICZfX3N0YXRlKTsKKysJCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBfX3djczsKKysJCX0KKysJICAgICAgZWxzZQorKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisrICAgICAgICAgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sKTsKKysJICAgIH0KKysgICAgICAgICAgY2F0Y2ggKC4uLikKKysJICAgIHsKKysJICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgICAgICAgICAgICBfTV9kYXRhID0gMDsKKysJICAgICAgZGVsZXRlIF9fd2NzX3BzOworKwkgICAgICBkZWxldGUgX193Y3NfbnM7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworKyNlbHNlCisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKysJICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgICAgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJICAgIH0KKysKKysJICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9ICooX19ubF9sYW5naW5mb19sKF9fRlJBQ19ESUdJVFMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wcHJlY2VkZXMgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworKwkgIGNoYXIgX19wc3BhY2UgPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fcHBvc24gPSAqKF9fbmxfbGFuZ2luZm9fbChfX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKysJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9fcHNwYWNlLAorKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bwb3NuKTsKKysJICBjaGFyIF9fbnByZWNlZGVzID0gKihfX25sX2xhbmdpbmZvX2woX19OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKysJICBjaGFyIF9fbnNwYWNlID0gKihfX25sX2xhbmdpbmZvX2woX19OX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisrCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9wYXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKysJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucG9zbik7CisrCisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysJICBfX3VzZWxvY2FsZShfX29sZCk7CisrI2Vsc2UKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrCSAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrCX0KKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5jdCgpCisrICAgIHsKKysgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbjsKKysgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisrICAgICAgICAgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUpCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbDsKKysgICAgICBkZWxldGUgX01fZGF0YTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5cHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKysJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ247CisrICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZQorKyAgICAgICAgICAmJiB3Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisrCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduOworKyAgICAgIGlmIChfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisrICAgICAgZGVsZXRlIF9NX2RhdGE7CisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44ODNlYzFhCistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitAQCAtMCwwICsxLDE2MCBAQAorKy8vIHN0ZDo6bnVtcHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFsIGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysjZGVmaW5lIF9MSUJDCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjdW5kZWYgX0xJQkMKKysjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKysKKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyB0YWlsb3IgZm9yIHN0dWIgbG9jYWxlIHN1cHBvcnQKKysjZW5kaWYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysjZGVmaW5lIF9fbmxfbGFuZ2luZm9fbChOLCBMKSAgICAgICAgIG5sX2xhbmdpbmZvKChOKSkKKysjZW5kaWYKKysKKytuYW1lc3BhY2Ugc3RkCisreworKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAnLCc7CisrCisrCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisrCSAgICBfTV9kYXRhLT5fTV9hdG9tc19vdXRbX19pXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX291dFtfX2ldOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9IF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal07CisrCX0KKysgICAgICBlbHNlCisrCXsKKysJICAvLyBOYW1lZCBsb2NhbGUuCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICooX19ubF9sYW5naW5mb19sKERFQ0lNQUxfUE9JTlQsCisrCQkJCQkJCV9fY2xvYykpOworKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqKF9fbmxfbGFuZ2luZm9fbChUSE9VU0FORFNfU0VQLAorKwkJCQkJCQlfX2Nsb2MpKTsKKysKKysJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSAnXDAnKQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBlbHNlCisrCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fbmxfbGFuZ2luZm9fbChHUk9VUElORywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gc3RybGVuKF9NX2RhdGEtPl9NX2dyb3VwaW5nKTsKKysJfQorKworKyAgICAgIC8vIE5COiBUaGVyZSBpcyBubyB3YXkgdG8gZXh0YWN0IHRoaXMgaW5mbyBmcm9tIHBvc2l4IGxvY2FsZXMuCisrICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBfX25sX2xhbmdpbmZvX2woWUVTU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lID0gInRydWUiOworKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1lX3NpemUgPSA0OworKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IF9fbmxfbGFuZ2luZm9fbChOT1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSAiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKworKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyAgdGVtcGxhdGU8PgorKyAgICB2b2lkCisrICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8d2NoYXJfdD47CisrCisrICAgICAgaWYgKCFfX2Nsb2MpCisrCXsKKysJICAvLyAiQyIgbG9jYWxlCisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKysJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKysKKysJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcuJzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gTCcsJzsKKysKKysJICAvLyBVc2UgY3R5cGU6OndpZGVuIGNvZGUgd2l0aG91dCB0aGUgZmFjZXQuLi4KKysJICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX251bV9iYXNlOjpfU19vZW5kOyArK19faSkKKysJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0KKysJICAgICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4oX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV0pOworKworKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQorKwkgICAgX01fZGF0YS0+X01fYXRvbXNfaW5bX19qXSA9CisrCSAgICAgIHN0YXRpY19jYXN0PHdjaGFyX3Q+KF9fbnVtX2Jhc2U6Ol9TX2F0b21zX2luW19fal0pOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgLy8gTmFtZWQgbG9jYWxlLgorKwkgIC8vIE5COiBJbiB0aGUgR05VIG1vZGVsIHdjaGFyX3QgaXMgYWx3YXlzIDMyIGJpdCB3aWRlLgorKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90IF9fdzsgfSBfX3U7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX3UuX193OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX191Ll9fdzsKKysKKysJICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKysJICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisrCSAgZWxzZQorKwkgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX25sX2xhbmdpbmZvX2woR1JPVVBJTkcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IHN0cmxlbihfTV9kYXRhLT5fTV9ncm91cGluZyk7CisrCX0KKysKKysgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFjdCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorKyAgICAgIC8vIF9NX3RydWVuYW1lID0gX19ubF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKysgICAgICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisrICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisrICAgICAgLy8gX01fZmFsc2VuYW1lID0gX19ubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZSA9IEwiZmFsc2UiOworKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8PgorKyAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCkKKysgICAgeyBkZWxldGUgX01fZGF0YTsgfQorKyAjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lMDcwN2Q3CistLS0gL2Rldi9udWxsCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjCitAQCAtMCwwICsxLDQwNiBAQAorKy8vIHN0ZDo6dGltZV9nZXQsIHN0ZDo6dGltZV9wdXQgaW1wbGVtZW50YXRpb24sIEdOVSB2ZXJzaW9uIC0qLSBDKysgLSotCisrCisrLy8gQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8vCisrLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQorKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisrLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrLy8gYW55IGxhdGVyIHZlcnNpb24uCisrCisrLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKysvLyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKysvLyBVU0EuCisrCisrLy8gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSB1c2UgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBmcmVlIHNvZnR3YXJlCisrLy8gbGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLiAgU3BlY2lmaWNhbGx5LCBpZiBvdGhlciBmaWxlcyBpbnN0YW50aWF0ZQorKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisrLy8gdGhpcyBmaWxlIGFuZCBsaW5rIGl0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLCB0aGlzCisrLy8gZmlsZSBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisrLy8gaW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5CisrLy8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorKworKy8vCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IHZpcnR1YWwgZnVuY3Rpb25zCisrLy8KKysKKysvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorKworKyNpbmNsdWRlIDxsb2NhbGU+CisrI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisrCisrI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisrI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisrI2VuZGlmCisrI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCisrI2VuZGlmCisrCisrbmFtZXNwYWNlIHN0ZAorK3sKKysgIHRlbXBsYXRlPD4KKysgICAgdm9pZAorKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6CisrICAgIF9NX3B1dChjaGFyKiBfX3MsIHNpemVfdCBfX21heGxlbiwgY29uc3QgY2hhciogX19mb3JtYXQsCisrCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdAorKyAgICB7CisrI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfX3N0cmZ0aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisrCQkJCQlfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyNlbHNlCisrICAgICAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworKyAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9NX25hbWVfdGltZXB1bmN0KTsKKysgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBzdHJmdGltZShfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworKyAgICAgIGZyZWUoX19vbGQpOworKyNlbmRpZgorKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorKyAgICAgIGlmIChfX2xlbiA9PSAwKQorKwlfX3NbMF0gPSAnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPGNoYXI+OworKworKyAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gIiVtLyVkLyV5IjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0vJWQvJXkiOworKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSAiJUg6JU06JVMiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSAiIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9ICIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gIkFNIjsKKysJICBfTV9kYXRhLT5fTV9wbSA9ICJQTSI7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gIlN1bmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSAiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9ICJXZWRuZXNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSAiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gIlNhdHVyZGF5IjsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gIlN1biI7CisrCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9ICJUdWUiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gIldlZCI7CisrCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9ICJGcmkiOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gIlNhdCI7CisrCisrCSAgLy8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSAiTWFyY2giOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSAiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gIkp1bmUiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSAiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSAiU2VwdGVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEwID0gIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSAiRGVjZW1iZXIiOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9ICJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gIkZlYiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFyIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9ICJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gIk1heSI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9ICJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gIkF1ZyI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9ICJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gIk5vdiI7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisrCisrCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9GTVQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKEVSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRVJBX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX25sX2xhbmdpbmZvX2woRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fbmxfbGFuZ2luZm9fbChFUkFfRF9UX0ZNVCwKKysJCQkJCQkJICAgICBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FtID0gX19ubF9sYW5naW5mb19sKEFNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fbmxfbGFuZ2luZm9fbChQTV9TVFIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX19ubF9sYW5naW5mb19sKFRfRk1UX0FNUE0sIF9fY2xvYyk7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX19ubF9sYW5naW5mb19sKERBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX25sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IF9fbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX19ubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX25sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IF9fbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX19ubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisrCSAgX01fZGF0YS0+X01fYWRheTEgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV8yLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gX19ubF9sYW5naW5mb19sKEFCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTQgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fbmxfbGFuZ2luZm9fbChBQkRBWV81LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk2ID0gX19ubF9sYW5naW5mb19sKEFCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTcgPSBfX25sX2xhbmdpbmZvX2woQUJEQVlfNywgX19jbG9jKTsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fbmxfbGFuZ2luZm9fbChNT05fMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gX19ubF9sYW5naW5mb19sKE1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDQgPSBfX25sX2xhbmdpbmZvX2woTU9OXzQsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fbmxfbGFuZ2luZm9fbChNT05fNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA2ID0gX19ubF9sYW5naW5mb19sKE1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDcgPSBfX25sX2xhbmdpbmZvX2woTU9OXzcsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fbmxfbGFuZ2luZm9fbChNT05fOCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX19ubF9sYW5naW5mb19sKE1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEwLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBfX25sX2xhbmdpbmZvX2woTU9OXzExLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX25sX2xhbmdpbmZvX2woTU9OXzEyLCBfX2Nsb2MpOworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gX19ubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX25sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMiA9IF9fbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKysJfQorKyAgICB9CisrCisrI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46OgorKyAgICBfTV9wdXQod2NoYXJfdCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IHdjaGFyX3QqIF9fZm9ybWF0LAorKwkgICBjb25zdCB0bSogX190bSkgY29uc3QKKysgICAgeworKyNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrICAgICAgX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fd2NzZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKysJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisrI2Vsc2UKKysgICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CisrICAgICAgZnJlZShfX29sZCk7CisrI2VuZGlmCisrICAgICAgLy8gTWFrZSBzdXJlIF9fcyBpcyBudWxsIHRlcm1pbmF0ZWQuCisrICAgICAgaWYgKF9fbGVuID09IDApCisrCV9fc1swXSA9IEwnXDAnOworKyAgICB9CisrCisrICB0ZW1wbGF0ZTw+CisrICAgIHZvaWQKKysgICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorKyAgICB7CisrICAgICAgaWYgKCFfTV9kYXRhKQorKwlfTV9kYXRhID0gbmV3IF9fdGltZXB1bmN0X2NhY2hlPHdjaGFyX3Q+OworKworKyN3YXJuaW5nIHdpZGUgdGltZSBzdHVmZgorKy8vICAgICAgIGlmICghX19jbG9jKQorKwl7CisrCSAgLy8gIkMiIGxvY2FsZQorKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworKworKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0ID0gTCIlbS8lZC8leSI7CisrCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0ID0gTCIiOworKwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisrCSAgX01fZGF0YS0+X01fcG0gPSBMIlBNIjsKKysJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBMIiI7CisrCisrCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bmRheS4KKysJICBfTV9kYXRhLT5fTV9kYXkxID0gTCJTdW5kYXkiOworKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBMIk1vbmRheSI7CisrCSAgX01fZGF0YS0+X01fZGF5MyA9IEwiVHVlc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVzZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk1ID0gTCJUaHVyc2RheSI7CisrCSAgX01fZGF0YS0+X01fZGF5NiA9IEwiRnJpZGF5IjsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgZGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIFN1bi4KKysJICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IEwiTW9uIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5MyA9IEwiVHVlIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NCA9IEwiV2VkIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IEwiVGh1IjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NiA9IEwiRnJpIjsKKysJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9NX2RhdGEtPl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBMIkZlYnJ1YXJ5IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDAzID0gTCJNYXJjaCI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IEwiQXByaWwiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBMIk1heSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IEwiSnVuZSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IEwiSnVseSI7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IEwiQXVndXN0IjsKKysJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gTCJTZXB0ZW1iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAgPSBMIk9jdG9iZXIiOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTEgPSBMIk5vdmVtYmVyIjsKKysJICBfTV9kYXRhLT5fTV9tb250aDEyID0gTCJEZWNlbWJlciI7CisrCisrCSAgLy8gQWJicmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gTCJKYW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gTCJNYXIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gTCJBcHIiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gTCJKdW4iOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3ID0gTCJKdWwiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gTCJTZXAiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gTCJPY3QiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDExID0gTCJOb3YiOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gTCJEZWMiOworKwl9CisrI2lmIDAKKysgICAgICBlbHNlCisrCXsKKysJICBfTV9jX2xvY2FsZV90aW1lcHVuY3QgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOworKworKwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworKworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9EX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dUX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0VSQV9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEX1RfRk1ULCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1BNX1NUUiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9wbSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV1RfRk1UX0FNUE0sIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gX191Ll9fdzsKKysKKysJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XREFZXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0RBWV82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2RheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dEQVlfNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9kYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV8xLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfMiwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzMsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV80LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJEQVlfNSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCREFZXzYsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYWRheTYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQkRBWV83LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKysKKysJICAvLyBNb250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDAxID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDMgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgwOCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMDkgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fbW9udGgxMCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV01PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9tb250aDExID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX21vbnRoMTIgPSBfX3UuX193OworKworKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3aXRoICJDIidzIEphbi4KKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzIsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8zLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAzID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNCwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzUsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl82LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA2ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fNywgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzgsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl85LCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA5ID0gX191Ll9fdzsKKysJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9XQUJNT05fMTAsIF9fY2xvYyk7CisrCSAgX01fZGF0YS0+X01fYW1vbnRoMTAgPSBfX3UuX193OworKwkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX1dBQk1PTl8xMSwgX19jbG9jKTsKKysJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9IF9fdS5fX3c7CisrCSAgX191Ll9fcyA9IF9fbmxfbGFuZ2luZm9fbChfTkxfV0FCTU9OXzEyLCBfX2Nsb2MpOworKwkgIF9NX2RhdGEtPl9NX2Ftb250aDEyID0gX191Ll9fdzsKKysJfQorKyNlbmRpZiAvLyAwCisrICAgIH0KKysjZW5kaWYKKyt9CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmE4ZTg1OAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtMCwwICsxLDY4IEBACisrLy8gc3RkOjp0aW1lX2dldCwgc3RkOjp0aW1lX3B1dCBpbXBsZW1lbnRhdGlvbiwgR05VIHZlcnNpb24gLSotIEMrKyAtKi0KKysKKysvLyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrLy8KKysvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisrLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisrLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKysvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorKy8vIFNvZnR3YXJlIEZvdW5kYXRpb24sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LAorKy8vIFVTQS4KKysKKysvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKysvLyBsaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24uICBTcGVjaWZpY2FsbHksIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlCisrLy8gdGVtcGxhdGVzIG9yIHVzZSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyBmcm9tIHRoaXMgZmlsZSwgb3IgeW91IGNvbXBpbGUKKysvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKysvLyBmaWxlIGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdG8gYmUgY292ZXJlZCBieQorKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIKKysvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKysvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrCisrLy8KKysvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMS4yIC0gdGltZV9nZXQgZnVuY3Rpb25zCisrLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRpbWVfcHV0IGZ1bmN0aW9ucworKy8vCisrCisrLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKysKKysgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKysgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlwZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKF9fY2FjaGUpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9TX2dldF9jX25hbWUoKSkKKysgICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisrCisrICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisrICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisrCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKysgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCisrICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgeworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworKyAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIF9NX25hbWVfdGltZXB1bmN0ID0gX190bXA7CisrICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsKKysgICAgfQorKworKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorKyAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorKyAgICB7CisrICAgICAgaWYgKF9NX25hbWVfdGltZXB1bmN0ICE9IF9TX2dldF9jX25hbWUoKSkKKysJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0OworKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworKyAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKysgICAgfQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmNWIyOGY0Li5mYmFkNjY3IDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTE1OTEzLDYgKzE1OTEzLDkgQEAgZmkKKyAgICMgRGVmYXVsdCB0byAiZ2VuZXJpYyIuCisgICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gYXV0bzsgdGhlbgorICAgICBjYXNlICR7dGFyZ2V0X29zfSBpbgorKyAgICAgICotdWNsaWJjKikKKysgICAgICAgIGVuYWJsZV9jbG9jYWxlX2ZsYWc9dWNsaWJjCisrICAgICAgICA7OworICAgICAgIGxpbnV4KiB8IGdudSogfCBrZnJlZWJzZCotZ251IHwga25ldGJzZCotZ251KQorIAllbmFibGVfY2xvY2FsZV9mbGFnPWdudQorIAk7OworQEAgLTE2MTkxLDYgKzE2MTk0LDc4IEBAICRhc19lY2hvICJuZXdsaWIiID4mNjsgfQorICAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy90aW1lX21lbWJlcnMuY2MKKyAgICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICAgOzsKKysgICAgdWNsaWJjKQorKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1Y2xpYmMiID4mNQorKyRhc19lY2hvICJ1Y2xpYmMiID4mNjsgfQorKworKyAgICAgICMgRGVjbGFyZSBpbnRlbnRpb24gdG8gdXNlIGdldHRleHQsIGFuZCBhZGQgc3VwcG9ydCBmb3Igc3BlY2lmaWMKKysgICAgICAjIGxhbmd1YWdlcy4KKysgICAgICAjIEZvciBzb21lIHJlYXNvbiwgQUxMX0xJTkdVQVMgaGFzIHRvIGJlIGJlZm9yZSBBTS1HTlUtR0VUVEVYVAorKyAgICAgIEFMTF9MSU5HVUFTPSJkZSBmciIKKysKKysgICAgICAjIERvbid0IGNhbGwgQU0tR05VLUdFVFRFWFQgaGVyZS4gSW5zdGVhZCwgYXNzdW1lIGdsaWJjLgorKyAgICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KKytzZXQgZHVtbXkgbXNnZm10OyBhY193b3JkPSQyCisreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQorK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jaGVja19tc2dmbXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKKytlbHNlCisrICBpZiB0ZXN0IC1uICIkY2hlY2tfbXNnZm10IjsgdGhlbgorKyAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9IiRjaGVja19tc2dmbXQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorK2Vsc2UKKythc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrZm9yIGFzX2RpciBpbiAkUEFUSAorK2RvCisrICBJRlM9JGFzX3NhdmVfSUZTCisrICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKysgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKysgICAgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9InllcyIKKysgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisrICAgIGJyZWFrIDIKKysgIGZpCisrZG9uZQorKyAgZG9uZQorK0lGUz0kYXNfc2F2ZV9JRlMKKysKKysgIHRlc3QgLXogIiRhY19jdl9wcm9nX2NoZWNrX21zZ2ZtdCIgJiYgYWNfY3ZfcHJvZ19jaGVja19tc2dmbXQ9Im5vIgorK2ZpCisrZmkKKytjaGVja19tc2dmbXQ9JGFjX2N2X3Byb2dfY2hlY2tfbXNnZm10CisraWYgdGVzdCAtbiAiJGNoZWNrX21zZ2ZtdCI7IHRoZW4KKysgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2hlY2tfbXNnZm10IiA+JjUKKyskYXNfZWNobyAiJGNoZWNrX21zZ2ZtdCIgPiY2OyB9CisrZWxzZQorKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyskYXNfZWNobyAibm8iID4mNjsgfQorK2ZpCisrCisrCisrICAgICAgaWYgdGVzdCB4IiRjaGVja19tc2dmbXQiID0geCJ5ZXMiICYmIHRlc3QgeCIkZW5hYmxlX25scyIgPSB4InllcyI7IHRoZW4KKysgICAgICAgIFVTRV9OTFM9eWVzCisrICAgICAgZmkKKysgICAgICAjIEV4cG9ydCB0aGUgYnVpbGQgb2JqZWN0cy4KKysgICAgICBmb3IgbGluZyBpbiAkQUxMX0xJTkdVQVM7IGRvIFwKKysgICAgICAgIGdsaWJjeHhfTU9GSUxFUz0iJGdsaWJjeHhfTU9GSUxFUyAkbGluZy5tbyI7IFwKKysgICAgICAgIGdsaWJjeHhfUE9GSUxFUz0iJGdsaWJjeHhfUE9GSUxFUyAkbGluZy5wbyI7IFwKKysgICAgICBkb25lCisrCisrCisrCisrICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKKysgICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCisrICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29kZWN2dF9tZW1iZXJzLmNjCisrICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCisrICAgICAgQ0NUWVBFX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKKysgICAgICBDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKKysgICAgICBDTUVTU0FHRVNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYworKyAgICAgIENNT05FWV9DQz1jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrICAgICAgQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCisrICAgICAgQ1RJTUVfSD1jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworKyAgICAgIENMT0NBTEVfSU5URVJOQUxfSD1jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorKyAgICAgIDs7CisgICBlc2FjCisgCisgICAjIFRoaXMgaXMgd2hlcmUgdGhlIHRlc3RzdWl0ZSBsb29rcyBmb3IgbG9jYWxlIGNhdGFsb2dzLCB1c2luZyB0aGUKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVkZS9jX2NvbXBhdGliaWxpdHkvd2NoYXIuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitpbmRleCAwNmI1ZDQ3Li43ZDNmODM1IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19jb21wYXRpYmlsaXR5L3djaGFyLmgKKysrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2NfY29tcGF0aWJpbGl0eS93Y2hhci5oCitAQCAtMTAxLDcgKzEwMSw5IEBAIHVzaW5nIHN0ZDo6d21lbWNtcDsKKyB1c2luZyBzdGQ6OndtZW1jcHk7CisgdXNpbmcgc3RkOjp3bWVtbW92ZTsKKyB1c2luZyBzdGQ6OndtZW1zZXQ7CisrI2lmIF9HTElCQ1hYX0hBVkVfV0NTRlRJTUUKKyB1c2luZyBzdGQ6Ondjc2Z0aW1lOworKyNlbmRpZgorIAorICNpZiBfR0xJQkNYWF9VU0VfQzk5CisgdXNpbmcgc3RkOjp3Y3N0b2xkOworZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhciBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgoraW5kZXggYWExYjJmYS4uNDVjNDYxNyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Nfc3RkL2N3Y2hhcgorKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3djaGFyCitAQCAtMTc1LDcgKzE3NSw5IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisgICB1c2luZyA6Ondjc2NvbGw7CisgICB1c2luZyA6Ondjc2NweTsKKyAgIHVzaW5nIDo6d2NzY3NwbjsKKysjaWYgX0dMSUJDWFhfSEFWRV9XQ1NGVElNRQorICAgdXNpbmcgOjp3Y3NmdGltZTsKKysjZW5kaWYKKyAgIHVzaW5nIDo6d2NzbGVuOworICAgdXNpbmcgOjp3Y3NuY2F0OworICAgdXNpbmcgOjp3Y3NuY21wOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNS11Y2xpYmMtbG9jYWxlLW5vX194LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzA1M2VhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDUtdWNsaWJjLWxvY2FsZS1ub19feC5wYXRjaApAQCAtMCwwICsxLDI1NyBAQAorRnJvbSBhOGU2ODM5MTdhM2U4YTY2NDI2MzllNjVjMDZkNGQ0ZmM0NmNjOGFiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDI6MzYgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNS8zNV0gdWNsaWJjLWxvY2FsZS1ub19feAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaCAgICAgIHwgNDUgKysrKysrKysrKysrKysrKysrKysrKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyAgICAgIHwgMTQgLS0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oICAgICAgIHwgIDEgKworIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgICAgICAgIHwgIDcgLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgIDcgLS0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjICAgICAgIHwgIDcgKy0tLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggICAgICAgIHwgMTggKysrKy0tLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAgNCAtLQorIC4uLi9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgICAgICAgIHwgIDMgLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjICB8ICAzIC0tCisgMTAgZmlsZXMgY2hhbmdlZCwgNTUgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK2luZGV4IDJhZTNlNGEuLmU3NGZkZGYgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jKytsb2NhbGVfaW50ZXJuYWwuaAorQEAgLTYwLDQgKzYwLDQ5IEBAIGV4dGVybiAiQyIgX190eXBlb2Yod2NzeGZybV9sKSBfX3djc3hmcm1fbDsKKyBleHRlcm4gIkMiIF9fdHlwZW9mKHdjdHlwZV9sKSBfX3djdHlwZV9sOworICNlbmRpZgorIAorKyMgZGVmaW5lIF9fbmxfbGFuZ2luZm9fbCBubF9sYW5naW5mb19sCisrIyBkZWZpbmUgX19zdHJjb2xsX2wgc3RyY29sbF9sCisrIyBkZWZpbmUgX19zdHJmdGltZV9sIHN0cmZ0aW1lX2wKKysjIGRlZmluZSBfX3N0cnRvZF9sIHN0cnRvZF9sCisrIyBkZWZpbmUgX19zdHJ0b2ZfbCBzdHJ0b2ZfbAorKyMgZGVmaW5lIF9fc3RydG9sZF9sIHN0cnRvbGRfbAorKyMgZGVmaW5lIF9fc3RyeGZybV9sIHN0cnhmcm1fbAorKyMgZGVmaW5lIF9fbmV3bG9jYWxlIG5ld2xvY2FsZQorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZSBmcmVlbG9jYWxlCisrIyBkZWZpbmUgX19kdXBsb2NhbGUgZHVwbG9jYWxlCisrIyBkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisrCisrIyBpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorKyMgIGRlZmluZSBfX2lzd2N0eXBlX2wgaXN3Y3R5cGVfbAorKyMgIGRlZmluZSBfX3Rvd2xvd2VyX2wgdG93bG93ZXJfbAorKyMgIGRlZmluZSBfX3Rvd3VwcGVyX2wgdG93dXBwZXJfbAorKyMgIGRlZmluZSBfX3djc2NvbGxfbCB3Y3Njb2xsX2wKKysjICBkZWZpbmUgX193Y3NmdGltZV9sIHdjc2Z0aW1lX2wKKysjICBkZWZpbmUgX193Y3N4ZnJtX2wgd2NzeGZybV9sCisrIyAgZGVmaW5lIF9fd2N0eXBlX2wgd2N0eXBlX2wKKysjIGVuZGlmCisrCisrI2Vsc2UKKysjIGRlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorKyMgZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCisrIyBkZWZpbmUgX19zdHJ0b2RfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZCgoUyksIChFKSkKKysjIGRlZmluZSBfX3N0cnRvZl9sKFMsIEUsIEwpICAgICAgICAgc3RydG9mKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RydG9sZF9sKFMsIEUsIEwpICAgICAgICBzdHJ0b2xkKChTKSwgKEUpKQorKyMgZGVmaW5lIF9fc3RyeGZybV9sKFMxLCBTMiwgTiwgTCkgICBzdHJ4ZnJtKChTMSksIChTMiksIChOKSkKKysjIHdhcm5pbmcgc2hvdWxkIGR1bW15IF9fbmV3bG9jYWxlIGNoZWNrIGZvciBDfFBPU0lYID8KKysjIGRlZmluZSBfX25ld2xvY2FsZShhLCBiLCBjKSAgICAgICAgTlVMTAorKyMgZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKysjIGRlZmluZSBfX2R1cGxvY2FsZShhKSAgICAgICAgICAgICAgX19jX2xvY2FsZSgpCisrLy8jIGRlZmluZSBfX3VzZWxvY2FsZSA/CisrLy8KKysjIGlmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisrIyAgZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgICBpc3djdHlwZSgoQyksIChNKSkKKysjICBkZWZpbmUgX190b3dsb3dlcl9sKEMsIEwpICAgICAgICAgIHRvd2xvd2VyKChDKSkKKysjICBkZWZpbmUgX190b3d1cHBlcl9sKEMsIEwpICAgICAgICAgIHRvd3VwcGVyKChDKSkKKysjICBkZWZpbmUgX193Y3Njb2xsX2woUzEsIFMyLCBMKSAgICAgIHdjc2NvbGwoKFMxKSwgKFMyKSkKKysvLyMgIGRlZmluZSBfX3djc2Z0aW1lX2woUywgTSwgRiwgVCwgTCkgIHdjc2Z0aW1lKChTKSwgKE0pLCAoRiksIChUKSkKKysjICBkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorKyMgIGRlZmluZSBfX3djdHlwZV9sKFMsIEwpICAgICAgICAgICAgd2N0eXBlKChTKSkKKysjIGVuZGlmCisrCisgI2VuZGlmIC8vIEdMSUJDIDIuMyBhbmQgbGF0ZXIKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKK2luZGV4IDUwODFkYzEuLjIxNDMwZDAgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworQEAgLTM5LDIwICszOSw2IEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX3N0cnRvbF9sKFMsIEUsIEIsIEwpICAgICAgc3RydG9sKChTKSwgKEUpLCAoQikpCistI2RlZmluZSBfX3N0cnRvdWxfbChTLCBFLCBCLCBMKSAgICAgc3RydG91bCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2xsX2woUywgRSwgQiwgTCkgICAgIHN0cnRvbGwoKFMpLCAoRSksIChCKSkKKy0jZGVmaW5lIF9fc3RydG91bGxfbChTLCBFLCBCLCBMKSAgICBzdHJ0b3VsbCgoUyksIChFKSwgKEIpKQorLSNkZWZpbmUgX19zdHJ0b2ZfbChTLCBFLCBMKSAgICAgICAgIHN0cnRvZigoUyksIChFKSkKKy0jZGVmaW5lIF9fc3RydG9kX2woUywgRSwgTCkgICAgICAgICBzdHJ0b2QoKFMpLCAoRSkpCistI2RlZmluZSBfX3N0cnRvbGRfbChTLCBFLCBMKSAgICAgICAgc3RydG9sZCgoUyksIChFKSkKKy0jd2FybmluZyBzaG91bGQgZHVtbXkgX19uZXdsb2NhbGUgY2hlY2sgZm9yIEN8UE9TSVggPworLSNkZWZpbmUgX19uZXdsb2NhbGUoYSwgYiwgYykgICAgICAgIE5VTEwKKy0jZGVmaW5lIF9fZnJlZWxvY2FsZShhKSAgICAgICAgICAgICAoKHZvaWQpMCkKKy0jZGVmaW5lIF9fZHVwbG9jYWxlKGEpICAgICAgICAgICAgICBfX2NfbG9jYWxlKCkKKy0jZW5kaWYKKy0KKyBuYW1lc3BhY2Ugc3RkCisgeworICAgdGVtcGxhdGU8PgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK2luZGV4IGRhMDdjMWYuLjRiY2E1ZjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmgKK0BAIC02OCw2ICs2OCw3IEBAIG5hbWVzcGFjZSBfX2dudV9jeHgKKyB7CisgICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2FsZSkgX191c2Vsb2NhbGU7CisgfQorKyNkZWZpbmUgX191c2Vsb2NhbGUgdXNlbG9jYWxlCisgI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jb2xsYXRlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY29sbGF0ZV9tZW1iZXJzLmNjCitpbmRleCBjMjY2NGE3Li5lYzVjMzI5IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NvbGxhdGVfbWVtYmVycy5jYworQEAgLTM2LDEzICszNiw2IEBACisgI2luY2x1ZGUgPGxvY2FsZT4KKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy0jaWZuZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKy0jZGVmaW5lIF9fc3RyY29sbF9sKFMxLCBTMiwgTCkgICAgICBzdHJjb2xsKChTMSksIChTMikpCistI2RlZmluZSBfX3N0cnhmcm1fbChTMSwgUzIsIE4sIEwpICAgc3RyeGZybSgoUzEpLCAoUzIpLCAoTikpCistI2RlZmluZSBfX3djc2NvbGxfbChTMSwgUzIsIEwpICAgICAgd2NzY29sbCgoUzEpLCAoUzIpKQorLSNkZWZpbmUgX193Y3N4ZnJtX2woUzEsIFMyLCBOLCBMKSAgIHdjc3hmcm0oKFMxKSwgKFMyKSwgKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBUaGVzZSBhcmUgYmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK2luZGV4IDcyOTRlM2EuLjdiMTI4NjEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MKK0BAIC0zOCwxMyArMzgsNiBAQAorICN1bmRlZiBfTElCQworICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX193Y3R5cGVfbChTLCBMKSAgICAgICAgICAgd2N0eXBlKChTKSkKKy0jZGVmaW5lIF9fdG93dXBwZXJfbChDLCBMKSAgICAgICAgIHRvd3VwcGVyKChDKSkKKy0jZGVmaW5lIF9fdG93bG93ZXJfbChDLCBMKSAgICAgICAgIHRvd2xvd2VyKChDKSkKKy0jZGVmaW5lIF9faXN3Y3R5cGVfbChDLCBNLCBMKSAgICAgIGlzd2N0eXBlKChDKSwgKE0pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitpbmRleCAxMzU5NGQ5Li5kNzY5M2I0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmNjCitAQCAtMzksMTMgKzM5LDEwIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IGdldHRleHQgc3R1ZmYKKyAjZW5kaWYKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKy1leHRlcm4gIkMiIGNoYXIgKl9fZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJICAgICBjb25zdCBjaGFyICptc2dpZCwgaW50IGNhdGVnb3J5KTsKKyAjdW5kZWYgZ2V0dGV4dAorLSNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgX19kY2dldHRleHQoTlVMTCwgbXNnaWQsIExDX01FU1NBR0VTKQorKyNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworKyNkZWZpbmUgZ2V0dGV4dChtc2dpZCkgZGNnZXR0ZXh0KE5VTEwsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyAjZWxzZQorLSN1bmRlZiBnZXR0ZXh0CisgI2RlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisgI2VuZGlmCisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmgKK2luZGV4IDE0MjQwNzguLmQ4OWRhMzMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitAQCAtMzYsMTUgKzM2LDExIEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgZml4IHByb3RvdHlwZXMgZm9yICp0ZXh0ZG9tYWluIGZ1bmNzCisgI2VuZGlmCistI2lmZGVmIF9fVUNMSUJDX0hBU19HRVRURVhUX0FXQVJFTkVTU19fCistZXh0ZXJuICJDIiBjaGFyICpfX3RleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CistZXh0ZXJuICJDIiBjaGFyICpfX2JpbmR0ZXh0ZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCistCQkJCSAgY29uc3QgY2hhciAqZGlybmFtZSk7CistI2Vsc2UKKy0jdW5kZWYgX190ZXh0ZG9tYWluCistI3VuZGVmIF9fYmluZHRleHRkb21haW4KKy0jZGVmaW5lIF9fdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCistI2RlZmluZSBfX2JpbmR0ZXh0ZG9tYWluKEQsUCkgICAgICgodm9pZCkwKQorKyNpZm5kZWYgX19VQ0xJQkNfSEFTX0dFVFRFWFRfQVdBUkVORVNTX18KKysjdW5kZWYgdGV4dGRvbWFpbgorKyN1bmRlZiBiaW5kdGV4dGRvbWFpbgorKyNkZWZpbmUgdGV4dGRvbWFpbihEKSAgICAgICAgICAgKCh2b2lkKTApCisrI2RlZmluZSBiaW5kdGV4dGRvbWFpbihELFApICAgICAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKyAgIC8vIE5vbi12aXJ0dWFsIG1lbWJlciBmdW5jdGlvbnMuCitAQCAtNzAsNyArNjYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKKyAJCQkgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKKyAgICAgeworLSAgICAgIF9fYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKKysgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIoKSwgX19kaXIpOworICAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOworICAgICB9CisgCitAQCAtOTAsNyArODYsNyBAQCBleHRlcm4gIkMiIGNoYXIgKl9fYmluZHRleHRkb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSwKKyAgICAgeworICAgICAgIC8vIE5vIGVycm9yIGNoZWNraW5nIGlzIGRvbmUsIGFzc3VtZSB0aGUgY2F0YWxvZyBleGlzdHMgYW5kIGNhbgorICAgICAgIC8vIGJlIHVzZWQuCistICAgICAgX190ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKysgICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICAgfQorIAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK2luZGV4IGFhNTI3MzEuLjJlNmY4MGEgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKK0BAIC00MywxMCArNDMsNiBAQAorICN3YXJuaW5nIHRhaWxvciBmb3Igc3R1YiBsb2NhbGUgc3VwcG9ydAorICNlbmRpZgorIAorLSNpZm5kZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworLSNkZWZpbmUgX19ubF9sYW5naW5mb19sKE4sIEwpICAgICAgICAgbmxfbGFuZ2luZm8oKE4pKQorLSNlbmRpZgorLQorIG5hbWVzcGFjZSBzdGQKKyB7CisgICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29tZSBjb21iaW5hdGlvbiBvZjoKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggODgzZWMxYS4uMmM3MDY0MiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC00MSw5ICs0MSw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZTA3MDdkNy4uZDg0OGVkNSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC00MCw5ICs0MCw2IEBACisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgdGFpbG9yIGZvciBzdHViIGxvY2FsZSBzdXBwb3J0CisgI2VuZGlmCistI2lmbmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCistI2RlZmluZSBfX25sX2xhbmdpbmZvX2woTiwgTCkgICAgICAgICBubF9sYW5naW5mbygoTikpCistI2VuZGlmCisgCisgbmFtZXNwYWNlIHN0ZAorIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNi11Y2xpYmMtbG9jYWxlLXdjaGFyX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTEyYTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDYtdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSBjZGI5ZTljOTQ0MGJlYjU5YmMyMDQ3NmVlYTVhOWNmMjUzOGNkMTk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDU6NTcgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNi8zNV0gdWNsaWJjLWxvY2FsZS13Y2hhcl9maXgKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyB8ICA0ICsrLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjICB8IDEzICsrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitpbmRleCAyZTZmODBhLi4zMWViYjlmIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCitAQCAtNDAxLDcgKzQwMSw3IEBAIG5hbWVzcGFjZSBzdGQKKyAjIGlmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19jbG9jLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2Nsb2MtPnRob3VzYW5kc19zZXBfd2M7CistIyBlbHNlCisrIyBlbGlmIGRlZmluZWQgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fZ2xvYmFsX2xvY2FsZS0+ZGVjaW1hbF9wb2ludF93YzsKKyAJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19nbG9iYWxfbG9jYWxlLT50aG91c2FuZHNfc2VwX3djOworICMgZW5kaWYKK0BAIC01NTYsNyArNTU2LDcgQEAgbmFtZXNwYWNlIHN0ZAorICMgaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2Nsb2MtPmRlY2ltYWxfcG9pbnRfd2M7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fY2xvYy0+dGhvdXNhbmRzX3NlcF93YzsKKy0jIGVsc2UKKysjIGVsaWYgZGVmaW5lZCBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX19nbG9iYWxfbG9jYWxlLT5kZWNpbWFsX3BvaW50X3djOworIAkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX2dsb2JhbF9sb2NhbGUtPnRob3VzYW5kc19zZXBfd2M7CisgIyBlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjCitpbmRleCAyYzcwNjQyLi5kNWM4OTYxIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworQEAgLTEyNywxMiArMTI3LDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAJeworIAkgIC8vIE5hbWVkIGxvY2FsZS4KKyAJICAvLyBOQjogSW4gdGhlIEdOVSBtb2RlbCB3Y2hhcl90IGlzIGFsd2F5cyAzMiBiaXQgd2lkZS4KKysjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKysjd2FybmluZyBmaXggdGhpcy4uLiBzaG91bGQgYmUgbnVtZXJpYworKyNlbmRpZgorKyNpZmRlZiBfX1VDTElCQ19fCisrIyBpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisrCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9IF9fY2xvYy0+ZGVjaW1hbF9wb2ludF93YzsKKysJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gX19jbG9jLT50aG91c2FuZHNfc2VwX3djOworKyMgZWxpZiBkZWZpbmVkIF9fVUNMSUJDX0hBU19MT0NBTEVfXworKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBfX2dsb2JhbF9sb2NhbGUtPmRlY2ltYWxfcG9pbnRfd2M7CisrCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fZ2xvYmFsX2xvY2FsZS0+dGhvdXNhbmRzX3NlcF93YzsKKysjIGVuZGlmCisrI2Vsc2UKKyAJICB1bmlvbiB7IGNoYXIgKl9fczsgd2NoYXJfdCBfX3c7IH0gX191OworIAkgIF9fdS5fX3MgPSBfX25sX2xhbmdpbmZvX2woX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywgX19jbG9jKTsKKyAJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gX191Ll9fdzsKKyAKKyAJICBfX3UuX19zID0gX19ubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisgCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IF9fdS5fX3c7CisrI2VuZGlmCisgCisgCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisgCSAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA3LXVjbGliYy1sb2NhbGUtdXBkYXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOGI3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwNy11Y2xpYmMtbG9jYWxlLXVwZGF0ZS5wYXRjaApAQCAtMCwwICsxLDU0MiBAQAorRnJvbSAyNDRiOWQxYjVjYzZkNTM4MjkzNTE5Mjk5ODUzMWVlNzBhZmIyNjJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDY6NTggKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8zNV0gdWNsaWJjLWxvY2FsZS11cGRhdGUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyAuLi4vY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmggICAgICB8ICAzICsKKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuY2MgICAgICB8IDc0ICsrKysrKysrKystLS0tLS0tLS0tLS0KKyBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaCAgICAgICB8IDQyICsrKysrKy0tLS0tLQorIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjIHwgNTEgKysrKysrKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaCAgICAgICAgfCAxMiArKy0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgICAgICAgfCAzNCArKysrKystLS0tCisgLi4uL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYyAgICAgICAgfCAgNSArKworIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MgIHwgMTggKysrKy0tCisgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oICAgfCAxNyArKystLQorIDkgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyksIDk4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCitpbmRleCBlNzRmZGRmLi45NzFhNmI0IDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvYysrbG9jYWxlX2ludGVybmFsLmgKK0BAIC0zMSw2ICszMSw5IEBACisgCisgI2luY2x1ZGUgPGJpdHMvYysrY29uZmlnLmg+CisgI2luY2x1ZGUgPGNsb2NhbGU+CisrI2luY2x1ZGUgPGNzdGRsaWI+CisrI2luY2x1ZGUgPGNzdHJpbmc+CisrI2luY2x1ZGUgPGNzdGRkZWY+CisgCisgI2lmZGVmIF9fVUNMSUJDX01KTjNfT05MWV9fCisgI3dhcm5pbmcgY2xlYW4gdGhpcyB1cAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworaW5kZXggMjE0MzBkMC4uMWI5ZDhlMSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5jYworKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmNjCitAQCAtMzksMjMgKzM5LDIwIEBACisgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisgI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0Uoc3RkKQorKworICAgdGVtcGxhdGU8PgorICAgICB2b2lkCisgICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZmxvYXQmIF9fdiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAorIAkJICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jKQorICAgICB7CistICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCistCXsKKy0JICBjaGFyKiBfX3Nhbml0eTsKKy0JICBlcnJubyA9IDA7CistCSAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Y7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZmxvYXQgX19mID0gX19zdHJ0b2ZfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKysgICAgICBpZiAoX19zYW5pdHkgIT0gX19zICYmIGVycm5vICE9IEVSQU5HRSkKKysJX192ID0gX19mOworKyAgICAgIGVsc2UKKysJX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisgICAgIH0KKyAKKyAgIHRlbXBsYXRlPD4KK0BAIC02MywxNiArNjAsMTMgQEAgbmFtZXNwYWNlIHN0ZAorICAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX3MsIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBkb3VibGUgX19kID0gX19zdHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKy0gICAgICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCistCSAgICBfX3YgPSBfX2Q7CistCSAgZWxzZQorLQkgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CistCX0KKysgICAgICBjaGFyKiBfX3Nhbml0eTsKKysgICAgICBlcnJubyA9IDA7CisrICAgICAgZG91YmxlIF9fZCA9IF9fc3RydG9kX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fZDsKKysgICAgICBlbHNlCisrCV9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OworICAgICB9CisgCisgICB0ZW1wbGF0ZTw+CitAQCAtODAsMTYgKzc0LDEzIEBAIG5hbWVzcGFjZSBzdGQKKyAgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25nIGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisgCQkgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MpCisgICAgIHsKKy0gICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSkKKy0JeworLQkgIGNoYXIqIF9fc2FuaXR5OworLQkgIGVycm5vID0gMDsKKy0JICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CistICAgICAgICAgIGlmIChfX3Nhbml0eSAhPSBfX3MgJiYgZXJybm8gIT0gRVJBTkdFKQorLQkgICAgX192ID0gX19sZDsKKy0JICBlbHNlCistCSAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKy0JfQorKyAgICAgIGNoYXIqIF9fc2FuaXR5OworKyAgICAgIGVycm5vID0gMDsKKysgICAgICBsb25nIGRvdWJsZSBfX2xkID0gX19zdHJ0b2xkX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisrICAgICAgaWYgKF9fc2FuaXR5ICE9IF9fcyAmJiBlcnJubyAhPSBFUkFOR0UpCisrCV9fdiA9IF9fbGQ7CisrICAgICAgZWxzZQorKwlfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKKyAgICAgfQorIAorICAgdm9pZAorQEAgLTExMCwxNyArMTAxLDE4IEBAIG5hbWVzcGFjZSBzdGQKKyAgIHZvaWQKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKQorICAgeworLSAgICBpZiAoX1NfZ2V0X2NfbG9jYWxlKCkgIT0gX19jbG9jKQorKyAgICBpZiAoX19jbG9jICYmIF9TX2dldF9jX2xvY2FsZSgpICE9IF9fY2xvYykKKyAgICAgICBfX2ZyZWVsb2NhbGUoX19jbG9jKTsKKyAgIH0KKyAKKyAgIF9fY19sb2NhbGUKKyAgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYykKKyAgIHsgcmV0dXJuIF9fZHVwbG9jYWxlKF9fY2xvYyk7IH0KKy19IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy1uYW1lc3BhY2UgX19nbnVfY3h4CisteworK19HTElCQ1hYX0VORF9OQU1FU1BBQ0UKKysKKytfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0UoX19nbnVfY3h4KQorKworICAgY29uc3QgY2hhciogY29uc3QgY2F0ZWdvcnlfbmFtZXNbNiArIF9HTElCQ1hYX05VTV9DQVRFR09SSUVTXSA9CisgICAgIHsKKyAgICAgICAiTENfQ1RZUEUiLAorQEAgLTEzOCw5ICsxMzAsMTEgQEAgbmFtZXNwYWNlIF9fZ251X2N4eAorICAgICAgICJMQ19JREVOVElGSUNBVElPTiIKKyAjZW5kaWYKKyAgICAgfTsKKy19CisgCistbmFtZXNwYWNlIHN0ZAorLXsKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCisrCisrX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFKHN0ZCkKKysKKyAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjb25zdCBsb2NhbGU6Ol9TX2NhdGVnb3JpZXMgPSBfX2dudV9jeHg6OmNhdGVnb3J5X25hbWVzOworLX0gIC8vIG5hbWVzcGFjZSBzdGQKKysKKytfR0xJQkNYWF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2NfbG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAoraW5kZXggNGJjYTVmMS4uNjRhNmQ0NiAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jX2xvY2FsZS5oCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY19sb2NhbGUuaAorQEAgLTM5LDIxICszOSwyMyBAQAorICNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKyAKKyAjaW5jbHVkZSA8Y3N0cmluZz4gICAgICAgICAgICAgIC8vIGdldCBzdGQ6OnN0cmxlbgorLSNpbmNsdWRlIDxjc3RkaW8+ICAgICAgICAgICAgICAgLy8gZ2V0IHN0ZDo6c25wcmludGYgb3Igc3RkOjpzcHJpbnRmCisrI2luY2x1ZGUgPGNzdGRpbz4gICAgICAgICAgICAgICAvLyBnZXQgc3RkOjp2c25wcmludGYgb3Igc3RkOjp2c3ByaW50ZgorICNpbmNsdWRlIDxjbG9jYWxlPgorICNpbmNsdWRlIDxsYW5naW5mby5oPgkJLy8gRm9yIGNvZGVjdnQKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KKyAjd2FybmluZyBmaXggdGhpcworICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKysjaWZkZWYgX0dMSUJDWFhfVVNFX0lDT05WCisgI2luY2x1ZGUgPGljb252Lmg+CQkvLyBGb3IgY29kZWN2dCB1c2luZyBpY29udiwgaWNvbnZfdAorICNlbmRpZgorLSNpZmRlZiBfX1VDTElCQ19IQVNfR0VUVEVYVF9BV0FSRU5FU1NfXworLSNpbmNsdWRlIDxsaWJpbnRsLmg+IAkJLy8gRm9yIG1lc3NhZ2VzCisrI2lmZGVmIEhBVkVfTElCSU5UTF9ICisrI2luY2x1ZGUgPGxpYmludGwuaD4JCS8vIEZvciBtZXNzYWdlcworICNlbmRpZgorKyNpbmNsdWRlIDxjc3RkYXJnPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworICN3YXJuaW5nIHdoYXQgaXMgX0dMSUJDWFhfQ19MT0NBTEVfR05VIGZvcgorKy8vIHBzbTogdXNlZCBpbiBvcy9nbnUtbGludXgvY3R5cGVfbm9uaW5saW5lLmgKKyAjZW5kaWYKKyAjZGVmaW5lIF9HTElCQ1hYX0NfTE9DQUxFX0dOVSAxCisgCitAQCAtNzgsMjMgKzgwLDI1IEBAIG5hbWVzcGFjZSBzdGQKKyAjZWxzZQorICAgdHlwZWRlZiBpbnQqCQkJX19jX2xvY2FsZTsKKyAjZW5kaWYKKy0KKy0gIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBvZiB0eXBlIF9UdiB0byBzdHJpbmcgYW5kIHJldHVybiBsZW5ndGggb2YKKy0gIC8vIHN0cmluZy4gIElmIHNucHJpbnRmIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KKy0gIC8vIHRoZSB1bnNhZmUgc3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisrICAvLyBDb252ZXJ0IG51bWVyaWMgdmFsdWUgb2YgdHlwZSBkb3VibGUgdG8gc3RyaW5nIGFuZCByZXR1cm4gbGVuZ3RoIG9mCisrICAvLyBzdHJpbmcuICBJZiB2c25wcmludGYgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0bworKyAgLy8gdGhlIHVuc2FmZSB2c3ByaW50ZiB3aGljaCwgaW4gZ2VuZXJhbCwgY2FuIGJlIGRhbmdlcm91cyBhbmQgc2hvdWxkCisgICAvLyBiZSBhdm9pZGVkLgorLSAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgorLSAgICBpbnQKKy0gICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwKKy0JCSAgICAgY29uc3QgaW50IF9fc2l6ZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAorLQkJICAgICBjb25zdCBjaGFyKiBfX2ZtdCwKKy0jaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKy0JCSAgICAgX1R2IF9fdiwgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19wcmVjKQorKyAgICBpbmxpbmUgaW50CisrICAgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYKKysjaWZuZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisrCV9fY2xvYyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCisrI2VuZGlmCisrCQkgICAgICwKKysJCSAgICAgY2hhciogX19vdXQsCisrCQkgICAgIGNvbnN0IGludCBfX3NpemUsCisrCQkgICAgIGNvbnN0IGNoYXIqIF9fZm10LCAuLi4pCisgICAgIHsKKysgICAgICB2YV9saXN0IF9fYXJnczsKKysjaWZkZWYgX19VQ0xJQkNfSEFTX1hDTE9DQUxFX18KKysKKyAgICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCistCQkgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjKQorLSAgICB7CisgIyBpZmRlZiBfX1VDTElCQ19IQVNfTE9DQUxFX18KKyAgICAgICBjaGFyKiBfX29sZCA9IHN0ZDo6c2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltzdGQ6OnN0cmxlbihfX29sZCkgKyAxXTsKK0BAIC0xMDMsNyArMTA3LDkgQEAgbmFtZXNwYWNlIHN0ZAorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy0gICAgICBjb25zdCBpbnQgX19yZXQgPSBzdGQ6OnNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9fdik7CisrICAgICAgdmFfc3RhcnQoX19hcmdzLCBfX2ZtdCk7CisrICAgICAgY29uc3QgaW50IF9fcmV0ID0gc3RkOjp2c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQsIF9fYXJncyk7CisrICAgICAgdmFfZW5kKF9fYXJncyk7CisgCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YQ0xPQ0FMRV9fCisgICAgICAgX19nbnVfY3h4OjpfX3VzZWxvY2FsZShfX29sZCk7CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL2N0eXBlX21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworaW5kZXggN2IxMjg2MS4uMTNlMDExZCAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9jdHlwZV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvY3R5cGVfbWVtYmVycy5jYworQEAgLTMzLDE2ICszMywyMCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKy1uYW1lc3BhY2Ugc3RkCisteworK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRShzdGQpCisrCisgICAvLyBOQjogVGhlIG90aGVyIGN0eXBlPGNoYXI+IHNwZWNpYWxpemF0aW9ucyBhcmUgaW4gc3JjL2xvY2FsZS5jYyBhbmQKKyAgIC8vIHZhcmlvdXMgL2NvbmZpZy9vcy8qIGZpbGVzLgorLSAgdGVtcGxhdGU8PgorICAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgIDogY3R5cGU8Y2hhcj4oMCwgZmFsc2UsIF9fcmVmcykKKyAgICAgeworQEAgLTU3LDYgKzYxLDggQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorIAl9CisgICAgIH0KKysgICAgY3R5cGVfYnluYW1lPGNoYXI+Ojp+Y3R5cGVfYnluYW1lKCkKKysgICAgeyB9CisgCisgI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgICBjdHlwZTx3Y2hhcl90Pjo6X193bWFza190eXBlCitAQCAtMTM4LDE3ICsxNDQsMzMgQEAgbmFtZXNwYWNlIHN0ZAorICAgY3R5cGU8d2NoYXJfdD46OgorICAgZG9faXMobWFzayBfX20sIHdjaGFyX3QgX19jKSBjb25zdAorICAgeworLSAgICAvLyBIaWdoZXN0IGJpdG1hc2sgaW4gY3R5cGVfYmFzZSA9PSAxMCwgYnV0IGV4dHJhIGluICJDIgorLSAgICAvLyBsaWJyYXJ5IGZvciBibGFuay4KKysgICAgLy8gVGhlIGNhc2Ugb2YgX19tID09IGN0eXBlX2Jhc2U6OnNwYWNlIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQsCisrICAgIC8vIGR1ZSB0byBpdHMgdXNlIGluIG1hbnkgaXN0cmVhbSBmdW5jdGlvbnMuICBUaGVyZWZvcmUgd2UgZGVhbCB3aXRoCisrICAgIC8vIGl0IGZpcnN0LCBleHBsb2l0aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBvbiBHTlUgc3lzdGVtcyBfTV9iaXRbNV0KKysgICAgLy8gaXMgdGhlIG1hc2sgY29ycmVzcG9uZGluZyB0byBjdHlwZV9iYXNlOjpzcGFjZS4gIE5COiBhbiBlbmNvZGluZworKyAgICAvLyBjaGFuZ2Ugd291bGQgbm90IGFmZmVjdCBjb3JyZWN0bmVzcyEKKysKKyAgICAgYm9vbCBfX3JldCA9IGZhbHNlOworLSAgICBjb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworLSAgICBmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCistICAgICAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0KKy0JICAmJiBfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKy0JeworLQkgIF9fcmV0ID0gdHJ1ZTsKKy0JICBicmVhazsKKy0JfQorKyAgICBpZiAoX19tID09IF9NX2JpdFs1XSkKKysgICAgICBfX3JldCA9IF9faXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrWzVdLCBfTV9jX2xvY2FsZV9jdHlwZSk7CisrICAgIGVsc2UKKysgICAgICB7CisrCS8vIEhpZ2hlc3QgYml0bWFzayBpbiBjdHlwZV9iYXNlID09IDEwLCBidXQgZXh0cmEgaW4gIkMiCisrCS8vIGxpYnJhcnkgZm9yIGJsYW5rLgorKwljb25zdCBzaXplX3QgX19iaXRtYXNrc2l6ZSA9IDExOworKwlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIpCisrCSAgaWYgKF9fbSAmIF9NX2JpdFtfX2JpdGN1cl0pCisrCSAgICB7CisrCSAgICAgIGlmIChfX2lzd2N0eXBlX2woX19jLCBfTV93bWFza1tfX2JpdGN1cl0sIF9NX2NfbG9jYWxlX2N0eXBlKSkKKysJCXsKKysJCSAgX19yZXQgPSB0cnVlOworKwkJICBicmVhazsKKysJCX0KKysJICAgICAgZWxzZSBpZiAoX19tID09IF9NX2JpdFtfX2JpdGN1cl0pCisrCQlicmVhazsKKysJICAgIH0KKysgICAgICB9CisrCisgICAgIHJldHVybiBfX3JldDsKKyAgIH0KKyAKK0BAIC0yOTAsNCArMzEyLDUgQEAgbmFtZXNwYWNlIHN0ZAorICNlbmRpZgorICAgfQorICNlbmRpZiAvLyAgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKy19CisrCisrX0dMSUJDWFhfRU5EX05BTUVTUEFDRQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tZXNzYWdlc19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbWVzc2FnZXNfbWVtYmVycy5oCitpbmRleCBkODlkYTMzLi4wNjc2NTdhIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21lc3NhZ2VzX21lbWJlcnMuaAorQEAgLTUzLDEyICs1MywxNiBAQAorICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKyAJCQkJc2l6ZV90IF9fcmVmcykKKy0gICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKSksCistICAgICBfTV9uYW1lX21lc3NhZ2VzKF9fcykKKysgICAgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoTlVMTCksCisrICAgICBfTV9uYW1lX21lc3NhZ2VzKE5VTEwpCisgICAgICB7CistICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgICBzdGQ6OnN0cmNweShfX3RtcCwgX19zKTsKKysgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gc3RkOjpzdHJsZW4oX19zKSArIDE7CisrICAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgICBzdGQ6Om1lbWNweShfX3RtcCwgX19zLCBfX2xlbik7CisgICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3RtcDsKKysKKysgICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgorKyAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9fY2xvYyk7CisgICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL21vbmV0YXJ5X21lbWJlcnMuY2MgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworaW5kZXggMzFlYmI5Zi4uNzY3OWI5YyAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9tb25ldGFyeV9tZW1iZXJzLmNjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbW9uZXRhcnlfbWVtYmVycy5jYworQEAgLTMzLDkgKzMzLDE0IEBACisgCisgLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKyAKKysjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKysjaWZkZWYgX19VQ0xJQkNfSEFTX0xPQ0FMRV9fCisgI2RlZmluZSBfTElCQworICNpbmNsdWRlIDxsb2NhbGU+CisgI3VuZGVmIF9MSUJDCisrI2Vsc2UKKysjaW5jbHVkZSA8bG9jYWxlPgorKyNlbmRpZgorICNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5hbC5oPgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTIwNiw3ICsyMTEsNyBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgfQorIAlicmVhazsKKyAgICAgICBkZWZhdWx0OgorLQk7CisrCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgIH0KKyAgICAgcmV0dXJuIF9fcmV0OworICAgfQorQEAgLTM5MCw3ICszOTUsOSBAQCBuYW1lc3BhY2Ugc3RkCisgCSAgX19jX2xvY2FsZSBfX29sZCA9IF9fdXNlbG9jYWxlKF9fY2xvYyk7CisgI2Vsc2UKKyAJICAvLyBTd2l0Y2ggdG8gbmFtZWQgbG9jYWxlIHNvIHRoYXQgbWJzcnRvd2NzIHdpbGwgd29yay4KKy0JICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAJICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgICAgIGNoYXIqIF9fc2F2ID0gbmV3IGNoYXJbX19sbGVuXTsKKyAJICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorQEAgLTQ3Nyw4ICs0ODQsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAkgICAgICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKyAJICAgIH0KK0BAIC00OTgsOCArNTA1LDggQEAgbmFtZXNwYWNlIHN0ZAorICNpZmRlZiBfX1VDTElCQ19IQVNfWExPQ0FMRV9fCisgCSAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgc2V0bG9jYWxlKExDX0FMTCwgX19vbGQpOworLQkgIGZyZWUoX19vbGQpOworKwkgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICBkZWxldGUgW10gX19zYXY7CisgI2VuZGlmCisgCX0KKyAgICAgfQorQEAgLTU0NSw4ICs1NTIsMTEgQEAgbmFtZXNwYWNlIHN0ZAorIAkgIF9fY19sb2NhbGUgX19vbGQgPSBfX3VzZWxvY2FsZShfX2Nsb2MpOworICNlbHNlCisgCSAgLy8gU3dpdGNoIHRvIG5hbWVkIGxvY2FsZSBzbyB0aGF0IG1ic3J0b3djcyB3aWxsIHdvcmsuCistCSAgY2hhciogX19vbGQgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fbmFtZSk7CisrICAgICAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisrICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgICAgICBtZW1jcHkoX19zYXYsIF9fb2xkLCBfX2xsZW4pOworKyAgICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX25hbWUpOworICNlbmRpZgorIAorICNpZmRlZiBfX1VDTElCQ19NSk4zX09OTFlfXworQEAgLTYzMyw4ICs2NDMsOCBAQCBuYW1lc3BhY2Ugc3RkCisgI2lmZGVmIF9fVUNMSUJDX0hBU19YTE9DQUxFX18KKyAJICAgICAgX191c2Vsb2NhbGUoX19vbGQpOworICNlbHNlCistCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICAgICAgZnJlZShfX29sZCk7CisrCSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKysJICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgICAgICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisgCSAgICB9CitAQCAtNjUzLDggKzY2Myw4IEBAIG5hbWVzcGFjZSBzdGQKKyAjaWZkZWYgX19VQ0xJQkNfSEFTX1hMT0NBTEVfXworIAkgIF9fdXNlbG9jYWxlKF9fb2xkKTsKKyAjZWxzZQorLQkgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0JICBmcmVlKF9fb2xkKTsKKysJICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrCSAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorIAl9CisgICAgIH0KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL251bWVyaWNfbWVtYmVycy5jYworaW5kZXggZDVjODk2MS4uOGFlODk2OSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy9udW1lcmljX21lbWJlcnMuY2MKK0BAIC0zMyw5ICszMywxNCBAQAorIAorIC8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisgCisrI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisrI2lmZGVmIF9fVUNMSUJDX0hBU19MT0NBTEVfXworICNkZWZpbmUgX0xJQkMKKyAjaW5jbHVkZSA8bG9jYWxlPgorICN1bmRlZiBfTElCQworKyNlbHNlCisrI2luY2x1ZGUgPGxvY2FsZT4KKysjZW5kaWYKKyAjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKyAKKyAjaWZkZWYgX19VQ0xJQkNfTUpOM19PTkxZX18KK2RpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS91Y2xpYmMvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5jYworaW5kZXggZDg0OGVkNS4uZjI0ZDUzZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKKysrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuY2MKK0BAIC01MywxMSArNTMsMTQgQEAgbmFtZXNwYWNlIHN0ZAorICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwKKyAJCQkJCV9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CisgI2Vsc2UKKy0gICAgICBjaGFyKiBfX29sZCA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisrICAgICAgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoTENfQUxMLCBOVUxMKTsKKysgICAgICBjb25zdCBzaXplX3QgX19sbGVuID0gc3RybGVuKF9fb2xkKSArIDE7CisrICAgICAgY2hhciogX19zYXYgPSBuZXcgY2hhcltfX2xsZW5dOworKyAgICAgIG1lbWNweShfX3NhdiwgX19vbGQsIF9fbGxlbik7CisgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX01fbmFtZV90aW1lcHVuY3QpOworICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmZ0aW1lKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtKTsKKy0gICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX29sZCk7CistICAgICAgZnJlZShfX29sZCk7CisrICAgICAgc2V0bG9jYWxlKExDX0FMTCwgX19zYXYpOworKyAgICAgIGRlbGV0ZSBbXSBfX3NhdjsKKyAjZW5kaWYKKyAgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAgICAgICBpZiAoX19sZW4gPT0gMCkKK0BAIC0yMDcsMTEgKzIxMCwxNCBAQCBuYW1lc3BhY2Ugc3RkCisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX193Y3NmdGltZV9sKF9fcywgX19tYXhsZW4sIF9fZm9ybWF0LCBfX3RtLAorIAkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAjZWxzZQorLSAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKysgICAgICBjaGFyKiBfX29sZCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xsZW4gPSBzdHJsZW4oX19vbGQpICsgMTsKKysgICAgICBjaGFyKiBfX3NhdiA9IG5ldyBjaGFyW19fbGxlbl07CisrICAgICAgbWVtY3B5KF9fc2F2LCBfX29sZCwgX19sbGVuKTsKKyAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfTV9uYW1lX3RpbWVwdW5jdCk7CisgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gd2NzZnRpbWUoX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0pOworLSAgICAgIHNldGxvY2FsZShMQ19BTEwsIF9fb2xkKTsKKy0gICAgICBmcmVlKF9fb2xkKTsKKysgICAgICBzZXRsb2NhbGUoTENfQUxMLCBfX3Nhdik7CisrICAgICAgZGVsZXRlIFtdIF9fc2F2OworICNlbmRpZgorICAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMgbnVsbCB0ZXJtaW5hdGVkLgorICAgICAgIGlmIChfX2xlbiA9PSAwKQorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaCBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAoraW5kZXggYmE4ZTg1OC4uMTY2NWRkZSAxMDA2NDQKKy0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL3VjbGliYy90aW1lX21lbWJlcnMuaAorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvdWNsaWJjL3RpbWVfbWVtYmVycy5oCitAQCAtNTAsMTIgKzUwLDIxIEBACisgICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisgCQkJCSAgICAgc2l6ZV90IF9fcmVmcykKKyAgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKE5VTEwpLCBfTV9jX2xvY2FsZV90aW1lcHVuY3QoTlVMTCksCistICAgIF9NX25hbWVfdGltZXB1bmN0KF9fcykKKysgICAgX01fbmFtZV90aW1lcHVuY3QoTlVMTCkKKyAgICAgeworLSAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbc3RkOjpzdHJsZW4oX19zKSArIDFdOworLSAgICAgIHN0ZDo6c3RyY3B5KF9fdG1wLCBfX3MpOworKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0ZDo6c3RybGVuKF9fcykgKyAxOworKyAgICAgIGNoYXIqIF9fdG1wID0gbmV3IGNoYXJbX19sZW5dOworKyAgICAgIHN0ZDo6bWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKyAgICAgICBfTV9uYW1lX3RpbWVwdW5jdCA9IF9fdG1wOworLSAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CisrCisrICAgICAgdHJ5CisrCXsgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jbG9jKTsgfQorKyAgICAgIGNhdGNoKC4uLikKKysJeworKwkgIGRlbGV0ZSBbXSBfTV9uYW1lX3RpbWVwdW5jdDsKKysJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2FpbjsKKysJfQorKworICAgICB9CisgCisgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDA4LW1pc3NpbmctZXhlY2luZm9faC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmY2YjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDgtbWlzc2luZy1leGVjaW5mb19oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gMGE4MGY2MGRlMDhiZDU4MjljYTFiMzc1OGY3MGE5MmI2MWRkYTE0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA4OjQ4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMDgvMzVdIG1pc3NpbmctZXhlY2luZm9faAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGJvZWhtLWdjL2luY2x1ZGUvZ2MuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaCBiL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAoraW5kZXggNmIzOGYyZC4uZmNhOThmZiAxMDA2NDQKKy0tLSBhL2JvZWhtLWdjL2luY2x1ZGUvZ2MuaAorKysrIGIvYm9laG0tZ2MvaW5jbHVkZS9nYy5oCitAQCAtNTAzLDcgKzUwMyw3IEBAIEdDX0FQSSBHQ19QVFIgR0NfbWFsbG9jX2F0b21pY19pZ25vcmVfb2ZmX3BhZ2UgR0NfUFJPVE8oKHNpemVfdCBsYikpOworICNpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0dMSUJDX18pCisgIyBpbmNsdWRlIDxmZWF0dXJlcy5oPgorICMgaWYgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxIHx8IF9fR0xJQkNfXyA+IDIpIFwKKy0gICAgICYmICFkZWZpbmVkKF9faWE2NF9fKQorKyAgICAgJiYgIWRlZmluZWQoX19pYTY0X18pICYmICFkZWZpbmVkKF9fVUNMSUJDX18pCisgIyAgIGlmbmRlZiBHQ19IQVZFX0JVSUxUSU5fQkFDS1RSQUNFCisgIyAgICAgZGVmaW5lIEdDX0hBVkVfQlVJTFRJTl9CQUNLVFJBQ0UKKyAjICAgZW5kaWYKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMDktYzk5LXNucHJpbnRmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWIyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAwOS1jOTktc25wcmludGYucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA3YjdjYWY0MzA1YTU0ZmE0ZGZkZDBlZmQ1YmQ0MWNiOTRjYmNmNDNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NDk6MDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8zNV0gYzk5LXNucHJpbnRmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCitpbmRleCAzN2YwMWNhLi5mMDBjMDZkIDEwMDY0NAorLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvY19zdGQvY3N0ZGlvCisrKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9jX3N0ZC9jc3RkaW8KK0BAIC0xNDQsNyArMTQ0LDcgQEAgbmFtZXNwYWNlIHN0ZAorICAgdXNpbmcgOjp2c3ByaW50ZjsKKyB9IC8vIG5hbWVzcGFjZSBzdGQKKyAKKy0jaWYgX0dMSUJDWFhfVVNFX0M5OQorKyNpZiBfR0xJQkNYWF9VU0VfQzk5IHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAKKyAjdW5kZWYgc25wcmludGYKKyAjdW5kZWYgdmZzY2FuZgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEwLWdjYy1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMDJlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMC1nY2MtcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllcy5wYXRjaApAQCAtMCwwICsxLDE5MiBAQAorRnJvbSBkMWU4NWEzNjNmZmNkMjU5ZTliMDg0MWI4NWNhMTBhZjJmMzFiZDcyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDg6NTk6MDAgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8zNV0gZ2NjOiBwb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uOiBjb2Rlc291cmNlcnldCistLS0KKyBnY2MvY29tbW9uLm9wdCAgICAgIHwgIDQgKysrKworIGdjYy9jb25maWcuaW4gICAgICAgfCAgNiArKysrKysKKyBnY2MvY29uZmlndXJlICAgICAgIHwgMTYgKysrKysrKysrKysrKysrKworIGdjYy9jb25maWd1cmUuYWMgICAgfCAxMCArKysrKysrKysrCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8ICA5ICsrKysrKysrKworIGdjYy9nY2MuYyAgICAgICAgICAgfCAgMiArKworIGdjYy9pbmNwYXRoLmMgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCisgNyBmaWxlcyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9nY2MvY29tbW9uLm9wdCBiL2djYy9jb21tb24ub3B0CitpbmRleCBiNDlhYzQ2Li43ODNkMjMxIDEwMDY0NAorLS0tIGEvZ2NjL2NvbW1vbi5vcHQKKysrKyBiL2djYy9jb21tb24ub3B0CitAQCAtNjIzLDYgKzYyMywxMCBAQCBXcmV0dXJuLWxvY2FsLWFkZHIKKyBDb21tb24gVmFyKHdhcm5fcmV0dXJuX2xvY2FsX2FkZHIpIEluaXQoMSkgV2FybmluZworIFdhcm4gYWJvdXQgcmV0dXJuaW5nIGEgcG9pbnRlci9yZWZlcmVuY2UgdG8gYSBsb2NhbCBvciB0ZW1wb3JhcnkgdmFyaWFibGUuCisgCisrV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMKKytDb21tb24gVmFyKGZsYWdfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllcykgSW5pdCgxKSBXYXJuaW5nCisrV2FybiBmb3IgLUkgYW5kIC1MIG9wdGlvbnMgdXNpbmcgc3lzdGVtIGRpcmVjdG9yaWVzIGlmIGNyb3NzIGNvbXBpbGluZworKworIFdzaGFkb3cKKyBDb21tb24gVmFyKHdhcm5fc2hhZG93KSBXYXJuaW5nCisgV2FybiB3aGVuIG9uZSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIGFub3RoZXIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnLmluIGIvZ2NjL2NvbmZpZy5pbgoraW5kZXggZjJlZDMwMS4uZjI5MGM2YiAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuaW4KKysrKyBiL2djYy9jb25maWcuaW4KK0BAIC0xNjgsNiArMTY4LDEyIEBACisgI2VuZGlmCisgCisgCisrLyogRGVmaW5lIHRvIHdhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3RvcmllcyAqLworKyNpZm5kZWYgVVNFRF9GT1JfVEFSR0VUCisrI3VuZGVmIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTCisrI2VuZGlmCisrCisrCisgLyogRGVmaW5lIGlmIHlvdSB3YW50IGFsbCBvcGVyYXRpb25zIG9uIFJUTCAodGhlIGJhc2ljIGRhdGEgc3RydWN0dXJlIG9mIHRoZQorICAgIG9wdGltaXplciBhbmQgYmFjayBlbmQpIHRvIGJlIGNoZWNrZWQgZm9yIGR5bmFtaWMgdHlwZSBzYWZldHkgYXQgcnVudGltZS4KKyAgICBUaGlzIGlzIHF1aXRlIGV4cGVuc2l2ZS4gKi8KK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOTUyMzc3My4uMTgxNzQ4ZSAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC05MzIsNiArOTMyLDcgQEAgd2l0aF9zeXN0ZW1femxpYgorIGVuYWJsZV9tYWludGFpbmVyX21vZGUKKyBlbmFibGVfbGlua19tdXRleAorIGVuYWJsZV92ZXJzaW9uX3NwZWNpZmljX3J1bnRpbWVfbGlicworK2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzCisgZW5hYmxlX3BsdWdpbgorIGVuYWJsZV9ob3N0X3NoYXJlZAorIGVuYWJsZV9saWJxdWFkbWF0aF9zdXBwb3J0CitAQCAtMTY2MSw2ICsxNjYyLDggQEAgT3B0aW9uYWwgRmVhdHVyZXM6CisgICAtLWVuYWJsZS12ZXJzaW9uLXNwZWNpZmljLXJ1bnRpbWUtbGlicworICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSB0aGF0IHJ1bnRpbWUgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGEgY29tcGlsZXItc3BlY2lmaWMgZGlyZWN0b3J5CisrICAtLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuIGZvciB1c2Ugb2YgbmF0aXZlIHN5c3RlbSBoZWFkZXIgZGlyZWN0b3JpZXMKKyAgIC0tZW5hYmxlLXBsdWdpbiAgICAgICAgIGVuYWJsZSBwbHVnaW4gc3VwcG9ydAorICAgLS1lbmFibGUtaG9zdC1zaGFyZWQgICAgYnVpbGQgaG9zdCBjb2RlIGFzIHNoYXJlZCBsaWJyYXJpZXMKKyAgIC0tZGlzYWJsZS1saWJxdWFkbWF0aC1zdXBwb3J0CitAQCAtMjgwODcsNiArMjgwOTAsMTkgQEAgaWYgdGVzdCAiJHtlbmFibGVfdmVyc2lvbl9zcGVjaWZpY19ydW50aW1lX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorIGZpCisgCisgCisrIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXMgd2FzIGdpdmVuLgorK2lmIHRlc3QgIiR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorKyAgZW5hYmxldmFsPSRlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3RvcmllczsKKytlbHNlCisrICBlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllcz1ubworK2ZpCisrCisraWYgdGVzdCAieCR7ZW5hYmxlX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXN9IiA9ICJ4eWVzIjsgdGhlbgorKworKyRhc19lY2hvICIjZGVmaW5lIEVOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTIDEiID4+Y29uZmRlZnMuaAorKworK2ZpCisrCisgIyBTdWJzdGl0dXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgCisgCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZS5hYyBiL2djYy9jb25maWd1cmUuYWMKK2luZGV4IDY4YjBlZTguLjhiMDcwNzggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlndXJlLmFjCisrKysgYi9nY2MvY29uZmlndXJlLmFjCitAQCAtNTU3MSw2ICs1NTcxLDE2IEBAIEFDX0FSR19FTkFCTEUodmVyc2lvbi1zcGVjaWZpYy1ydW50aW1lLWxpYnMsCisgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IHRoYXQgcnVudGltZSBsaWJyYXJpZXMgc2hvdWxkIGJlCisgICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgaW4gYSBjb21waWxlci1zcGVjaWZpYyBkaXJlY3RvcnldKV0pCisgCisrQUNfQVJHX0VOQUJMRShbcG9pc29uLXN5c3RlbS1kaXJlY3Rvcmllc10sCisrICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dhcm4gZm9yIHVzZSBvZiBuYXRpdmUgc3lzdGVtIGhlYWRlciBkaXJlY3Rvcmllc10pLCwKKysgICAgICAgICAgICAgW2VuYWJsZV9wb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzPW5vXSkKKytpZiB0ZXN0ICJ4JHtlbmFibGVfcG9pc29uX3N5c3RlbV9kaXJlY3Rvcmllc30iID0gInh5ZXMiOyB0aGVuCisrICBBQ19ERUZJTkUoW0VOQUJMRV9QT0lTT05fU1lTVEVNX0RJUkVDVE9SSUVTXSwKKysgICAgICAgICAgIFsxXSwKKysgICAgICAgICAgIFtEZWZpbmUgdG8gd2FybiBmb3IgdXNlIG9mIG5hdGl2ZSBzeXN0ZW0gaGVhZGVyIGRpcmVjdG9yaWVzXSkKKytmaQorKworICMgU3Vic3RpdHV0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIEFDX1NVQlNUKHN1YmRpcnMpCisgQUNfU1VCU1Qoc3JjZGlyKQorZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCitpbmRleCA1MjBjMmM1Li4wZGY4YTQ3IDEwMDY0NAorLS0tIGEvZ2NjL2RvYy9pbnZva2UudGV4aQorKysrIGIvZ2NjL2RvYy9pbnZva2UudGV4aQorQEAgLTI2OSw2ICsyNjksNyBAQCBPYmplY3RpdmUtQyBhbmQgT2JqZWN0aXZlLUMrKyBEaWFsZWN0c30uCisgLVdvdmVybGVuZ3RoLXN0cmluZ3MgIC1XcGFja2VkICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgIC1XcGFkZGVkIEBnb2wKKyAtV3BhcmVudGhlc2VzICAtV3BlZGFudGljLW1zLWZvcm1hdCAtV25vLXBlZGFudGljLW1zLWZvcm1hdCBAZ29sCisgLVdwb2ludGVyLWFyaXRoICAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgQGdvbAorKy1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyBAZ29sCisgLVdyZWR1bmRhbnQtZGVjbHMgIC1Xbm8tcmV0dXJuLWxvY2FsLWFkZHIgQGdvbAorIC1XcmV0dXJuLXR5cGUgIC1Xc2VxdWVuY2UtcG9pbnQgIC1Xc2hhZG93ICAtV25vLXNoYWRvdy1pdmFyIEBnb2wKKyAtV3NoaWZ0LWNvdW50LW5lZ2F0aXZlIC1Xc2hpZnQtY291bnQtb3ZlcmZsb3cgQGdvbAorQEAgLTQ0MzIsNiArNDQzMywxNCBAQCBtYWRlIHVwIG9mIGRhdGEgb25seSBhbmQgdGh1cyByZXF1aXJlcyBubyBzcGVjaWFsIHRyZWF0bWVudC4gIEJ1dCwgZm9yCisgbW9zdCB0YXJnZXRzLCBpdCBpcyBtYWRlIHVwIG9mIGNvZGUgYW5kIHRodXMgcmVxdWlyZXMgdGhlIHN0YWNrIHRvIGJlCisgbWFkZSBleGVjdXRhYmxlIGluIG9yZGVyIGZvciB0aGUgcHJvZ3JhbSB0byB3b3JrIHByb3Blcmx5LgorIAorK0BpdGVtIC1Xbm8tcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcworK0BvcGluZGV4IFduby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzCisrRG8gbm90IHdhcm4gZm9yIEBvcHRpb257LUl9IG9yIEBvcHRpb257LUx9IG9wdGlvbnMgdXNpbmcgc3lzdGVtCisrZGlyZWN0b3JpZXMgc3VjaCBhcyBAZmlsZXsvdXNyL2luY2x1ZGV9IHdoZW4gY3Jvc3MgY29tcGlsaW5nLiAgVGhpcworK29wdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNocm9vdCBlbnZpcm9ubWVudHMgd2hlbiBzdWNoCisrZGlyZWN0b3JpZXMgY29udGFpbiB0aGUgY29ycmVjdCBoZWFkZXJzIGFuZCBsaWJyYXJpZXMgZm9yIHRoZSB0YXJnZXQKKytzeXN0ZW0gcmF0aGVyIHRoYW4gdGhlIGhvc3QuCisrCisgQGl0ZW0gLVdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFdmbG9hdC1lcXVhbAorIEBvcGluZGV4IFduby1mbG9hdC1lcXVhbAorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggZDk1NmMzNi4uNjc1YmNjMSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtODM1LDYgKzgzNSw4IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAiJXtmdXNlLWxkPSo6LWZ1c2UtbGQ9JSp9ICIgTElOS19DT01QUkVTU19ERUJVR19TUEVDIFwKKyAgICAiJVggJXtvKn0gJXtlKn0gJXtOfSAle259ICV7cn1cCisgICAgICV7c30gJXt0fSAle3UqfSAle3p9ICV7Wn0gJXshbm9zdGRsaWI6JXshbm9zdGFydGZpbGVzOiVTfX0gIiBWVEFCTEVfVkVSSUZJQ0FUSU9OX1NQRUMgIiBcCisrICAgICV7V25vLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXM6LS1uby1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzfVwKKysgICAgJXtXZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllczotLWVycm9yLXBvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXN9XAorICAgICAle3N0YXRpYzp9ICV7TCp9ICUobWZ3cmFwKSAlKGxpbmtfbGliZ2NjKSAiIFNBTklUSVpFUl9FQVJMWV9TUEVDICIgJW9cCisgICAgICIgQ0hLUF9TUEVDICIgXAorICAgICAle2ZvcGVuYWNjfGZvcGVubXB8ZnRyZWUtcGFyYWxsZWxpemUtbG9vcHM9KjolOmluY2x1ZGUobGliZ29tcC5zcGVjKSUobGlua19nb21wKX1cCitkaWZmIC0tZ2l0IGEvZ2NjL2luY3BhdGguYyBiL2djYy9pbmNwYXRoLmMKK2luZGV4IDZjNTRjYTYuLmNjMGM5MjEgMTAwNjQ0CistLS0gYS9nY2MvaW5jcGF0aC5jCisrKysgYi9nY2MvaW5jcGF0aC5jCitAQCAtMjgsNiArMjgsNyBAQAorICNpbmNsdWRlICJpbnRsLmgiCisgI2luY2x1ZGUgImluY3BhdGguaCIKKyAjaW5jbHVkZSAiY3BwZGVmYXVsdC5oIgorKyNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKKyAKKyAvKiBNaWNyb3NvZnQgV2luZG93cyBkb2VzIG5vdCBuYXRpdmVseSBzdXBwb3J0IGlub2Rlcy4KKyAgICBWTVMgaGFzIG5vbi1udW1lcmljIGlub2Rlcy4gICovCitAQCAtMzgzLDYgKzM4NCwyNCBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQorIAl9CisgICAgICAgZnByaW50ZiAoc3RkZXJyLCBfKCJFbmQgb2Ygc2VhcmNoIGxpc3QuXG4iKSk7CisgICAgIH0KKysKKysjaWZkZWYgRU5BQkxFX1BPSVNPTl9TWVNURU1fRElSRUNUT1JJRVMKKysgIGlmIChmbGFnX3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMpCisrICAgIHsKKysgICAgICAgc3RydWN0IGNwcF9kaXIgKnA7CisrCisrICAgICAgIGZvciAocCA9IGhlYWRzW1FVT1RFXTsgcDsgcCA9IHAtPm5leHQpCisrICAgICAgICAgeworKyAgICAgICAgICBpZiAoKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9pbmNsdWRlIiwgMTIpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9sb2NhbC9pbmNsdWRlIiwgMTgpKQorKyAgICAgICAgICAgICAgfHwgKCFzdHJuY21wIChwLT5uYW1lLCAiL3Vzci9YMTFSNi9pbmNsdWRlIiwgMTgpKSkKKysgICAgICAgICAgICB3YXJuaW5nIChPUFRfV3BvaXNvbl9zeXN0ZW1fZGlyZWN0b3JpZXMsCisrICAgICAgICAgICAgICAgICAgICAgImluY2x1ZGUgbG9jYXRpb24gXCIlc1wiIGlzIHVuc2FmZSBmb3IgIgorKyAgICAgICAgICAgICAgICAgICAgICJjcm9zcy1jb21waWxhdGlvbiIsCisrICAgICAgICAgICAgICAgICAgICAgcC0+bmFtZSk7CisrICAgICAgICAgfQorKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qIFVzZSBnaXZlbiAtSSBwYXRocyBmb3IgI2luY2x1ZGUgIi4uLiIgYnV0IG5vdCAjaW5jbHVkZSA8Li4uPiwgYW5kCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDExLWdjYy1wb2lzb24tZGlyLWV4dGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjdkOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTEtZ2NjLXBvaXNvbi1kaXItZXh0ZW5kLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZjE1OGZjYzA4NGU4OGIxZDhkMWVjZjViMDA1ZDM3Nzc2NWFlZjE2ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjAwOjM0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTEvMzVdIGdjYy1wb2lzb24tZGlyLWV4dGVuZAorCitBZGQgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBiYXNlZCBvbiB0aGUgb3JpZ2luYWwKK3plY2tlLW5vLWhvc3QtaW5jbHVkZXMucGF0Y2ggcGF0Y2guICBUaGUgb3JpZ2luYWwgcGF0Y2ggY2hlY2tlZCBmb3IKKy91c3IvaW5jbHVkZSwgL3N3L2luY2x1ZGUgYW5kIC9vcHQvaW5jbHVkZSBhbmQgdGhlbiB0cmlnZ2VyZWQgYSBmYWlsdXJlIGFuZAorYWJvcnRlZC4KKworSW5zdGVhZCwgd2UgYWRkIHRoZSB0d28gbWlzc2luZyBpdGVtcyB0byB0aGUgY3VycmVudCBzY2FuLiAgSWYgdGhlIHVzZXIKK3dhbnRzIHRoaXMgdG8gYmUgYSBmYWlsdXJlLCB0aGV5IGNhbiBhZGQgIi1XZXJyb3I9cG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2luY3BhdGguYyB8IDQgKysrLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9pbmNwYXRoLmMgYi9nY2MvaW5jcGF0aC5jCitpbmRleCBjYzBjOTIxLi4wYmMxZjY3IDEwMDY0NAorLS0tIGEvZ2NjL2luY3BhdGguYworKysrIGIvZ2NjL2luY3BhdGguYworQEAgLTM5NCw3ICszOTQsOSBAQCBtZXJnZV9pbmNsdWRlX2NoYWlucyAoY29uc3QgY2hhciAqc3lzcm9vdCwgY3BwX3JlYWRlciAqcGZpbGUsIGludCB2ZXJib3NlKQorICAgICAgICAgIHsKKyAgICAgICAgICAgaWYgKCghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvaW5jbHVkZSIsIDEyKSkKKyAgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvbG9jYWwvaW5jbHVkZSIsIDE4KSkKKy0gICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi91c3IvWDExUjYvaW5jbHVkZSIsIDE4KSkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvdXNyL1gxMVI2L2luY2x1ZGUiLCAxOCkpCisrICAgICAgICAgICAgICB8fCAoIXN0cm5jbXAgKHAtPm5hbWUsICIvc3cvaW5jbHVkZSIsIDExKSkKKysgICAgICAgICAgICAgIHx8ICghc3RybmNtcCAocC0+bmFtZSwgIi9vcHQvaW5jbHVkZSIsIDEyKSkpCisgICAgICAgICAgICAgd2FybmluZyAoT1BUX1dwb2lzb25fc3lzdGVtX2RpcmVjdG9yaWVzLAorICAgICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIGxvY2F0aW9uIFwiJXNcIiBpcyB1bnNhZmUgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAiY3Jvc3MtY29tcGlsYXRpb24iLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEyLWdjYy00LjMuMy1TWVNST09UX0NGTEFHU19GT1JfVEFSR0VULnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmNhNzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxMi1nY2MtNC4zLjMtU1lTUk9PVF9DRkxBR1NfRk9SX1RBUkdFVC5wYXRjaApAQCAtMCwwICsxLDczIEBACitGcm9tIGE1NDIzOWNiZGM2ZjkzYzZkNzRlYTZiMDc4ZjE0NzA3NzBjNGY1YWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOTowODozMSArMDQwMAorU3ViamVjdDogW1BBVENIIDEyLzM1XSBnY2MtNC4zLjM6IFNZU1JPT1RfQ0ZMQUdTX0ZPUl9UQVJHRVQKKworQmVmb3JlIGNvbW1pdHRpbmcsIEkgbm90aWNlZCB0aGF0IFBSLzMyMTYxIHdhcyBtYXJrZWQgYXMgYSBkdXAgb2YgUFIvMzIwMDksIGJ1dCBteSBwcmV2aW91cyBwYXRjaCBkaWQgbm90IGZpeCBpdC4KKworVGhpcyBhbHRlcm5hdGl2ZSBwYXRjaCBpcyBiZXR0ZXIgYmVjYXVzZSBpdCBsZXRzIHlvdSBqdXN0IHVzZSBDRkxBR1NfRk9SX1RBUkdFVCB0byBzZXQgdGhlIGNvbXBpbGF0aW9uIGZsYWdzIGZvciBsaWJnY2MuIFNpbmNlIGJvb3RzdHJhcHBlZCB0YXJnZXQgbGlicmFyaWVzIGFyZSBuZXZlciBjb21waWxlZCB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIsIGl0IG1ha2VzIGxpdHRsZSBzZW5zZSB0byB1c2UgZGlmZmVyZW50IGZsYWdzIGZvciBzdGFnZTEgYW5kIGxhdGVyIHN0YWdlcy4gQW5kIGl0IGFsc28gbWFrZXMgbGl0dGxlIHNlbnNlIHRvIHVzZSBhIGRpZmZlcmVudCB2YXJpYWJsZSB0aGFuIENGTEFHU19GT1JfVEFSR0VULgorCitPdGhlciBjaGFuZ2VzIEkgaGFkIHRvIGRvIGluY2x1ZGU6CisKKy0gbW92aW5nIHRoZSBjcmVhdGlvbiBvZiBkZWZhdWx0IENGTEFHU19GT1JfVEFSR0VUIGZyb20gTWFrZWZpbGUuYW0gdG8gY29uZmlndXJlLmFjLCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgQk9PVF9DRkxBR1MgYXJlIHN1YnN0aXR1dGVkIGludG8gQ0ZMQUdTX0ZPUl9UQVJHRVQgKHdoaWNoIGlzICItTzIgLWcgJChDRkxBR1MpIikgdmlhICQoQ0ZMQUdTKS4gSXQgaXMgYWxzbyBjbGVhbmVyIHRoaXMgd2F5IHRob3VnaC4KKworLSBwYXNzaW5nIHRoZSByaWdodCBDRkxBR1MgdG8gY29uZmlndXJlIHNjcmlwdHMgYXMgZXhwb3J0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisKK0kgYWxzbyBzdG9wcGVkIHBhc3NpbmcgTElCQ0ZMQUdTIHRvIGNvbmZpZ3VyZSBzY3JpcHRzIHNpbmNlIHRoZXkgYXJlIHVudXNlZCBpbiB0aGUgd2hvbGUgc3JjIHRyZWUuIEFuZCBJIHVwZGF0ZWQgdGhlIGRvY3VtZW50YXRpb24gYXMgSC1QIHJlbWluZGVkIG1lIHRvIGRvLgorCitCb290c3RyYXBwZWQvcmVndGVzdGVkIGk2ODYtcGMtbGludXgtZ251LCB3aWxsIGNvbW1pdCB0byA0LjQgc2hvcnRseS4gT2sgZm9yIDQuMz8KKworU2lnbmVkLW9mZi1ieTogUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgY29uZmlndXJlIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA1MGU3Y2JjLi42Yjk3NjkzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02NzMzLDYgKzY3MzMsMzggQEAgZmkKKyAKKyAKKyAKKysjIER1cmluZyBnY2MgYm9vdHN0cmFwLCBpZiB3ZSB1c2Ugc29tZSByYW5kb20gY2MgZm9yIHN0YWdlMSB0aGVuIENGTEFHUworKyMgbWlnaHQgYmUgZW1wdHkgb3IgIi1nIi4gIFdlIGRvbid0IHJlcXVpcmUgYSBDKysgY29tcGlsZXIsIHNvIENYWEZMQUdTCisrIyBtaWdodCBhbHNvIGJlIGVtcHR5IChvciAiLWciLCBpZiBhIG5vbi1HQ0MgQysrIGNvbXBpbGVyIGlzIGluIHRoZSBwYXRoKS4KKysjIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgVEFSR0VUIGxpYnJhcmllcyAod2hpY2ggd2Uga25vdyBhcmUgYnVpbHQgd2l0aAorKyMgZ2NjKSBhcmUgYnVpbHQgd2l0aCAiLU8yIC1nIiwgc28gaW5jbHVkZSB0aG9zZSBvcHRpb25zIHdoZW4gc2V0dGluZworKyMgQ0ZMQUdTX0ZPUl9UQVJHRVQgYW5kIENYWEZMQUdTX0ZPUl9UQVJHRVQuCisraWYgdGVzdCAieCRDRkxBR1NfRk9SX1RBUkdFVCIgPSB4OyB0aGVuCisrICBDRkxBR1NfRk9SX1RBUkdFVD0kQ0ZMQUdTCisrICBjYXNlICIgJENGTEFHUyAiIGluCisrICAgICoiIC1PMiAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ0ZMQUdTIiA7OworKyAgZXNhYworKyAgY2FzZSAiICRDRkxBR1MgIiBpbgorKyAgICAqIiAtZyAiKiB8ICoiIC1nMyAiKikgOzsKKysgICAgKikgQ0ZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDRkxBR1MiIDs7CisrICBlc2FjCisrZmkKKysKKysKKytpZiB0ZXN0ICJ4JENYWEZMQUdTX0ZPUl9UQVJHRVQiID0geDsgdGhlbgorKyAgQ1hYRkxBR1NfRk9SX1RBUkdFVD0kQ1hYRkxBR1MKKysgIGNhc2UgIiAkQ1hYRkxBR1MgIiBpbgorKyAgICAqIiAtTzIgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1PMiAkQ1hYRkxBR1MiIDs7CisrICBlc2FjCisrICBjYXNlICIgJENYWEZMQUdTICIgaW4KKysgICAgKiIgLWcgIiogfCAqIiAtZzMgIiopIDs7CisrICAgICopIENYWEZMQUdTX0ZPUl9UQVJHRVQ9Ii1nICRDWFhGTEFHUyIgOzsKKysgIGVzYWMKKytmaQorKworKworICMgSGFuZGxlIC0td2l0aC1oZWFkZXJzPVhYWC4gIElmIHRoZSB2YWx1ZSBpcyBub3QgInllcyIsIHRoZSBjb250ZW50cyBvZgorICMgdGhlIG5hbWVkIGRpcmVjdG9yeSBhcmUgY29waWVkIHRvICQodG9vbGRpcikvc3lzLWluY2x1ZGUuCisgaWYgdGVzdCB4IiR7d2l0aF9oZWFkZXJzfSIgIT0geCAmJiB0ZXN0IHgiJHt3aXRoX2hlYWRlcnN9IiAhPSB4bm8gOyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTMtNjQtYml0LW11bHRpbGliLWhhY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdjMDY2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDEzLTY0LWJpdC1tdWx0aWxpYi1oYWNrLnBhdGNoCkBAIC0wLDAgKzEsODUgQEAKK0Zyb20gZDUxNTFiZWJkMDc5ZTk4MWRjNzEwZjJhMDMxODMwZDg5Y2IxZTcyZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEwOjA2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTMvMzVdIDY0LWJpdCBtdWx0aWxpYiBoYWNrLgorCitHQ0MgaGFzIGludGVybmFsIG11bHRpbGliIGhhbmRsaW5nIGNvZGUgYnV0IGl0IGFzc3VtZXMgYSB2ZXJ5IHNwZWNpZmljIHJpZ2lkIGRpcmVjdG9yeQorbGF5b3V0LiBUaGUgYnVpbGQgc3lzdGVtIGltcGxlbWVudGF0aW9uIG9mIG11bHRpbGliIGxheW91dCBpcyB2ZXJ5IGdlbmVyaWMgYW5kIGFsbG93cworY29tcGxldGUgY3VzdG9taXNhdGlvbiBvZiB0aGUgbGlicmFyeSBkaXJlY3Rvcmllcy4KKworVGhpcyBwYXRjaCBpcyBhIHBhcnRpYWwgc29sdXRpb24gdG8gYWxsb3cgYW55IGN1c3RvbSBkaXJlY3RvcmllcyB0byBiZSBwYXNzZWQgaW50byBnY2MKK2FuZCBoYW5kbGVkIGNvcnJlY3RseS4gSXQgZm9yY2VzIGdjYyB0byB1c2UgdGhlIGJhc2VfbGliZGlyICh3aGljaCBpcyB0aGUgY3VycmVudAorZGlyZWN0b3J5LCAiLiIpLiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIGVhY2ggbXVsdGlsaWIgdGhhdCBpcyBjb25maWd1cmVkIGFzIHdlIGRvbid0Citrbm93IHdoaWNoIGNvbXBpbGVyIG9wdGlvbnMgbWF5IGJlIGJlaW5nIHBhc3NlZCBpbnRvIHRoZSBjb21waWxlci4gU2luY2Ugd2UgaGF2ZSBhIGNvbXBpbGVyCitwZXIgbXVsaXRsaWIgYXQgdGhpcyBwb2ludCB0aGF0IGlzbid0IGFuIGlzc3VlLgorCitUaGUgb25lIHByb2JsZW0gaXMgdGhlIHRhcmdldCBjb21waWxlciBpcyBvbmx5IGdvaW5nIHRvIHdvcmsgZm9yIHRoZSBkZWZhdWx0IG11bHRsaWxpYiBhdAordGhpcyBwb2ludC4gSWRlYWxseSB3ZSdkIGZpZ3VyZSBvdXQgd2hpY2ggbXVsdGlsaWJzIHdlcmUgYmVpbmcgZW5hYmxlZCB3aXRoIHdoaWNoIHBhdGhzCithbmQgYmUgYWJsZSB0byBwYXRjaCB0aGVzZSBlbnRyaWVzIHdpdGggYSBjb21wbGV0ZSBzZXQgb2YgY29ycmVjdCBwYXRocyBidXQgdGhpcyB3ZQorZG9uJ3QgaGF2ZSBzdWNoIGNvZGUgYXQgdGhpcyBwb2ludC4gVGhpcyBpcyBzb21ldGhpbmcgdGhlIHRhcmdldCBnY2MgcmVjaXBlIHNob3VsZCBkbworYW5kIG92ZXJyaWRlIHRoZXNlIHBsYXRmb3JtIGRlZmF1bHRzIGluIGl0cyBidWlsZCBjb25maWcuCisKK1JQIDE1LzgvMTEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVsdmlzIERvd3NvbiA8ZWx2aXMuZG93c29uQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY29uZmlnL2kzODYvdC1saW51eDY0ICAgfCAgNiArKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvdC1saW51eDY0ICAgfCAxMCArKystLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0IHwgIDUgKystLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvdC1saW51eDY0IGIvZ2NjL2NvbmZpZy9pMzg2L3QtbGludXg2NAoraW5kZXggZjZkYmI3OC4uZDc3MGRhNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKysrKyBiL2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKK0BAIC0zMiw3ICszMiw1IEBACisgIworIGNvbW1hPSwKKyBNVUxUSUxJQl9PUFRJT05TICAgID0gJChzdWJzdCAkKGNvbW1hKSwvLCQoVE1fTVVMVElMSUJfQ09ORklHKSkKKy1NVUxUSUxJQl9ESVJOQU1FUyAgID0gJChwYXRzdWJzdCBtJSwgJSwgJChzdWJzdCAvLCAsJChNVUxUSUxJQl9PUFRJT05TKSkpCistTVVMVElMSUJfT1NESVJOQU1FUyA9IG02ND0uLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOng4Nl82NC1saW51eC1nbnUpCistTVVMVElMSUJfT1NESVJOQU1FUys9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDppMzg2LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTKz0gbXgzMj0uLi9saWJ4MzIkKGNhbGwgaWZfbXVsdGlhcmNoLDp4ODZfNjQtbGludXgtZ251eDMyKQorK01VTFRJTElCX0RJUk5BTUVTID0gLiAuCisrTVVMVElMSUJfT1NESVJOQU1FUyA9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NCBiL2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQKK2luZGV4IDdlOTY0MDYuLmI3MmRjYjAgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CisrKysgYi9nY2MvY29uZmlnL21pcHMvdC1saW51eDY0CitAQCAtMTcsMTAgKzE3LDYgQEAKKyAjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAKKyBNVUxUSUxJQl9PUFRJT05TID0gbWFiaT1uMzIvbWFiaT0zMi9tYWJpPTY0CistTVVMVElMSUJfRElSTkFNRVMgPSBuMzIgMzIgNjQKKy1NSVBTX0VMID0gJChpZiAkKGZpbHRlciAlZWwsICQoZmlyc3R3b3JkICQoc3Vic3QgLSwgLCQodGFyZ2V0KSkpKSxlbCkKKy1NSVBTX1NPRlQgPSAkKGlmICQoc3RyaXAgJChmaWx0ZXIgTUFTS19TT0ZUX0ZMT0FUX0FCSSwgJCh0YXJnZXRfY3B1X2RlZmF1bHQpKSAkKGZpbHRlciBzb2Z0LCAkKHdpdGhfZmxvYXQpKSksc29mdCkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTID0gXAorLQkuLi9saWIzMiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpbjMyJChNSVBTX1NPRlQpKSBcCistCS4uL2xpYiQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHMkKE1JUFNfRUwpLWxpbnV4LWdudSQoTUlQU19TT0ZUKSkgXAorLQkuLi9saWI2NCQoY2FsbCBpZl9tdWx0aWFyY2gsOm1pcHM2NCQoTUlQU19FTCktbGludXgtZ251YWJpNjQkKE1JUFNfU09GVCkpCisrTVVMVElMSUJfRElSTkFNRVMgPSAuIC4gLgorK01VTFRJTElCX09TRElSTkFNRVMgPSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKSAuLi8kKHNoZWxsIGJhc2VuYW1lICQoYmFzZV9saWJkaXIpKQorKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCBiL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAoraW5kZXggYjZiMzUxZC4uMWQ1YjM3YSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NAorKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0CitAQCAtMjYsMTAgKzI2LDkgQEAKKyAjIE1VTFRJTElCX09TRElSTkFNRVMgYWNjb3JkaW5nIHRvIHdoYXQgaXMgZm91bmQgb24gdGhlIHRhcmdldC4KKyAKKyBNVUxUSUxJQl9PUFRJT05TICAgIDo9IG02NC9tMzIKKy1NVUxUSUxJQl9ESVJOQU1FUyAgIDo9IDY0IDMyCisrTVVMVElMSUJfRElSTkFNRVMgICA6PSAuIC4KKyBNVUxUSUxJQl9FWFRSQV9PUFRTIDo9IAorLU1VTFRJTElCX09TRElSTkFNRVMgOj0gbTY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6cG93ZXJwYzY0LWxpbnV4LWdudSkKKy1NVUxUSUxJQl9PU0RJUk5BTUVTICs9IG0zMj0kKGlmICQod2lsZGNhcmQgJChzaGVsbCBlY2hvICQoU1lTVEVNX0hFQURFUl9ESVIpKS8uLi8uLi91c3IvbGliMzIpLC4uL2xpYjMyLC4uL2xpYikkKGNhbGwgaWZfbXVsdGlhcmNoLDpwb3dlcnBjLWxpbnV4LWdudSkKKytNVUxUSUxJQl9PU0RJUk5BTUVTIDo9IC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpIC4uLyQoc2hlbGwgYmFzZW5hbWUgJChiYXNlX2xpYmRpcikpCisgCisgcnM2MDAwLWxpbnV4Lm86ICQoc3JjZGlyKS9jb25maWcvcnM2MDAwL3JzNjAwMC1saW51eC5jCisgCSQoQ09NUElMRSkgJDwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTQtb3B0aW9uYWwtbGlic3RkYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc0ZmU0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE0LW9wdGlvbmFsLWxpYnN0ZGMucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK0Zyb20gZDdiNDJkOTNkMDc3YjI1MjNjMjZmMGRmZjBiNmM0NGZkZmZmOWQzYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjEyOjU2ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTQvMzVdIG9wdGlvbmFsIGxpYnN0ZGMKKworZ2NjLXJ1bnRpbWUgYnVpbGRzIGxpYnN0ZGMrKyBzZXBhcmF0ZWx5IGZyb20gZ2NjLWNyb3NzLSouIEl0cyBjb25maWd1cmUgdGVzdHMgdXNpbmcgZysrCit3aWxsIG5vdCBydW4gY29ycmVjdGx5IHNpbmNlIGJ5IGRlZmF1bHQgdGhlIGxpbmtlciB3aWxsIHRyeSB0byBsaW5rIGFnYWluc3QgbGlic3RkYysrCit3aGljaCBzaG91bGRuJ3QgZXhpc3QgeWV0LiBXZSBuZWVkIGFuIG9wdGlvbiB0byBkaXNhYmxlIC1sc3RkYysrCitvcHRpb24gd2hpbHN0IGxlYXZpbmcgLWxjLCAtbGdjYyBhbmQgb3RoZXIgYXV0b21hdGljIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGFkZGVkIGJ5IGdjYworZHJpdmVyLiBUaGlzIHBhdGNoIGFkZHMgc3VjaCBhbiBvcHRpb24gd2hpY2ggb25seSBkaXNhYmxlcyB0aGUgLWxzdGRjKysuCisKK0EgInN0YW5kYXJkIiBnY2MgYnVpbGQgdXNlcyB4Z2NjIGFuZCBoZW5jZSBhdm9pZHMgdGhpcy4gV2Ugc2hvdWxkIGFzayB1cHN0cmVhbSBob3cgdG8KK2RvIHRoaXMgb2ZmaWNpYWxseSwgdGhlIGxpa2VseSBhbnN3ZXIgaXMgZG9uJ3QgYnVpbGQgbGlic3RkYysrIHNlcGFyYXRlbHkuCisKK1JQIDI5LzYvMTAKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKy0tLQorIGdjYy9jLWZhbWlseS9jLm9wdCAgfCA0ICsrKysKKyBnY2MvY3AvZysrc3BlYy5jICAgIHwgMSArCisgZ2NjL2RvYy9pbnZva2UudGV4aSB8IDggKysrKysrKy0KKyBnY2MvZ2NjLmMgICAgICAgICAgIHwgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy5vcHQgYi9nY2MvYy1mYW1pbHkvYy5vcHQKK2luZGV4IDk4M2Y0YTguLjk2OTI0ZjYgMTAwNjQ0CistLS0gYS9nY2MvYy1mYW1pbHkvYy5vcHQKKysrKyBiL2djYy9jLWZhbWlseS9jLm9wdAorQEAgLTE1NDMsNiArMTU0MywxMCBAQCBub3N0ZGluYysrCisgQysrIE9iakMrKworIERvIG5vdCBzZWFyY2ggc3RhbmRhcmQgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIEMrKworIAorK25vc3RkbGliKysKKytEcml2ZXIKKytEbyBub3QgbGluayBzdGFuZGFyZCBDKysgcnVudGltZSBsaWJyYXJ5CisrCisgbworIEMgT2JqQyBDKysgT2JqQysrIEpvaW5lZCBTZXBhcmF0ZQorIDsgRG9jdW1lbnRlZCBpbiBjb21tb24ub3B0CitkaWZmIC0tZ2l0IGEvZ2NjL2NwL2crK3NwZWMuYyBiL2djYy9jcC9nKytzcGVjLmMKK2luZGV4IDY1MzZkN2UuLmY1N2E1ZDQgMTAwNjQ0CistLS0gYS9nY2MvY3AvZysrc3BlYy5jCisrKysgYi9nY2MvY3AvZysrc3BlYy5jCitAQCAtMTM4LDYgKzEzOCw3IEBAIGxhbmdfc3BlY2lmaWNfZHJpdmVyIChzdHJ1Y3QgY2xfZGVjb2RlZF9vcHRpb24gKippbl9kZWNvZGVkX29wdGlvbnMsCisgICAgICAgc3dpdGNoIChkZWNvZGVkX29wdGlvbnNbaV0ub3B0X2luZGV4KQorIAl7CisgCWNhc2UgT1BUX25vc3RkbGliOgorKwljYXNlIE9QVF9ub3N0ZGxpYl9fOgorIAljYXNlIE9QVF9ub2RlZmF1bHRsaWJzOgorIAkgIGxpYnJhcnkgPSAtMTsKKyAJICBicmVhazsKK2RpZmYgLS1naXQgYS9nY2MvZG9jL2ludm9rZS50ZXhpIGIvZ2NjL2RvYy9pbnZva2UudGV4aQoraW5kZXggMGRmOGE0Ny4uNzM4NTZkMCAxMDA2NDQKKy0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrKyBiL2djYy9kb2MvaW52b2tlLnRleGkKK0BAIC0xOTUsNiArMTk1LDcgQEAgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKyAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4gQGdvbAorIC1mdnRhYmxlLXZlcmlmeT1AcntbfXN0ZEBye3x9cHJlaW5pdEBye3x9bm9uZUBye119IEBnb2wKKyAtZnZ0di1jb3VudHMgLWZ2dHYtZGVidWcgQGdvbAorKy1ub3N0ZGxpYisrIEBnb2wKKyAtZnZpc2liaWxpdHktbXMtY29tcGF0IEBnb2wKKyAtZmV4dC1udW1lcmljLWxpdGVyYWxzIEBnb2wKKyAtV2FiaT1AdmFye259ICAtV2FiaS10YWcgIC1XY29udmVyc2lvbi1udWxsICAtV2N0b3ItZHRvci1wcml2YWN5IEBnb2wKK0BAIC00ODgsNyArNDg5LDcgQEAgT2JqZWN0aXZlLUMgYW5kIE9iamVjdGl2ZS1DKysgRGlhbGVjdHN9LgorIC1zICAtc3RhdGljIC1zdGF0aWMtbGliZ2NjIC1zdGF0aWMtbGlic3RkYysrIEBnb2wKKyAtc3RhdGljLWxpYmFzYW4gLXN0YXRpYy1saWJ0c2FuIC1zdGF0aWMtbGlibHNhbiAtc3RhdGljLWxpYnVic2FuIEBnb2wKKyAtc3RhdGljLWxpYm1weCAtc3RhdGljLWxpYm1weHdyYXBwZXJzIEBnb2wKKy0tc2hhcmVkIC1zaGFyZWQtbGliZ2NjICAtc3ltYm9saWMgQGdvbAorKy1zaGFyZWQgLXNoYXJlZC1saWJnY2MgIC1zeW1ib2xpYyAtbm9zdGRsaWIrKyBAZ29sCisgLVQgQHZhcntzY3JpcHR9ICAtV2wsQHZhcntvcHRpb259ICAtWGxpbmtlciBAdmFye29wdGlvbn0gQGdvbAorIC11IEB2YXJ7c3ltYm9sfSAteiBAdmFye2tleXdvcmR9fQorIAorQEAgLTExMTg1LDYgKzExMTg2LDExIEBAIFRoZXNlIGVudHJpZXMgYXJlIHVzdWFsbHkgcmVzb2x2ZWQgYnkgZW50cmllcyBpbgorIGxpYmMuICBUaGVzZSBlbnRyeSBwb2ludHMgc2hvdWxkIGJlIHN1cHBsaWVkIHRocm91Z2ggc29tZSBvdGhlcgorIG1lY2hhbmlzbSB3aGVuIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZC4KKyAKKytAaXRlbSAtbm9zdGRsaWIrKworK0BvcGluZGV4IG5vc3RkbGliKysKKytEbyBub3QgdXNlIHRoZSBzdGFuZGFyZCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyaWVzIHdoZW4gbGlua2luZy4KKytPbmx5IHRoZSBsaWJyYXJpZXMgeW91IHNwZWNpZnkgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGxpbmtlci4KKysKKyBAY2luZGV4IEBvcHRpb257LWxnY2N9LCB1c2Ugd2l0aCBAb3B0aW9uey1ub3N0ZGxpYn0KKyBAY2luZGV4IEBvcHRpb257LW5vc3RkbGlifSBhbmQgdW5yZXNvbHZlZCByZWZlcmVuY2VzCisgQGNpbmRleCB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYW5kIEBvcHRpb257LW5vc3RkbGlifQorZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggNjc1YmNjMS4uYTM3ZWM4YiAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtODQ1LDYgKzg0NSw3IEBAIHByb3BlciBwb3NpdGlvbiBhbW9uZyB0aGUgb3RoZXIgb3V0cHV0IGZpbGVzLiAgKi8KKyAgICAgJShtZmxpYikgIiBTVEFDS19TUExJVF9TUEVDICJcCisgICAgICV7ZnByb2ZpbGUtYXJjc3xmcHJvZmlsZS1nZW5lcmF0ZSp8Y292ZXJhZ2U6LWxnY292fSAiIFNBTklUSVpFUl9TUEVDICIgXAorICAgICAleyFub3N0ZGxpYjoleyFub2RlZmF1bHRsaWJzOiUobGlua19zc3ApICUobGlua19nY2NfY19zZXF1ZW5jZSl9fVwKKysgICAgJXshbm9zdGRsaWIrKzp9XAorICAgICAleyFub3N0ZGxpYjoleyFub3N0YXJ0ZmlsZXM6JUV9fSAle1QqfSB9fX19fX0iCisgI2VuZGlmCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE1LWdjYy1kaXNhYmxlLU1BU0tfUkVMQVhfUElDX0NBTExTLWJpdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2YxZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTUtZ2NjLWRpc2FibGUtTUFTS19SRUxBWF9QSUNfQ0FMTFMtYml0LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb20gYWQxNTkyNzkxNjk4Mjg2YjgwNjI2ZGRkNTY3OWZmMmVmNDU3YWI3NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE0OjIwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMzVdIGdjYzogZGlzYWJsZSBNQVNLX1JFTEFYX1BJQ19DQUxMUyBiaXQKKworVGhlIG5ldyBmZWF0dXJlIGFkZGVkIGFmdGVyIDQuMy4zCisiaHR0cDovL3d3dy5wdWJicy5uZXQvMjAwOTA5L2djYy85NDA0OC1wYXRjaC1hZGQtc3VwcG9ydC1mb3Itcm1pcHNqYWxyLmh0bWwiCit3aWxsIGNhdXNlIGNjMXBsdXMgZWF0IHVwIGFsbCB0aGUgc3lzdGVtIG1lbW9yeSB3aGVuIGJ1aWxkIHdlYmtpdC1ndGsuCitUaGUgZnVuY3Rpb24gbWlwc19nZXRfcGljX2NhbGxfc3ltYm9sIGtlZXBzIG9uIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgaXRzZWxmLgorRGlzYWJsZSB0aGlzIGZlYXR1cmUgdG8gd2FsayBhc2lkZSB0aGUgYnVnLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZ3VyZSAgICB8IDcgLS0tLS0tLQorIGdjYy9jb25maWd1cmUuYWMgfCA3IC0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZ3VyZSBiL2djYy9jb25maWd1cmUKK2luZGV4IDE4MTc0OGUuLjkwMDkwNjQgMTAwNzU1CistLS0gYS9nY2MvY29uZmlndXJlCisrKysgYi9nY2MvY29uZmlndXJlCitAQCAtMjY0NTEsMTMgKzI2NDUxLDYgQEAgJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgZm9yIGV4cGxpY2l0IEpBTFIgcmVsb2NhdGlvbi4uLiAiID4mNjsKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjUKKyAkYXNfZWNobyAiJGdjY19jdl9hc19sZF9qYWxyX3JlbG9jIiA+JjY7IH0KKyAKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggOGIwNzA3OC4uYzdhMjhiNCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC00MzYxLDEzICs0MzYxLDYgQEAgeDoKKyAgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgICBmaQorICAgICBmaQorLSAgICBpZiB0ZXN0ICRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYyA9IHllczsgdGhlbgorLSAgICAgIGlmIHRlc3QgeCR0YXJnZXRfY3B1X2RlZmF1bHQgPSB4OyB0aGVuCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9TUFTS19SRUxBWF9QSUNfQ0FMTFMKKy0gICAgICBlbHNlCistICAgICAgICB0YXJnZXRfY3B1X2RlZmF1bHQ9IigkdGFyZ2V0X2NwdV9kZWZhdWx0KXxNQVNLX1JFTEFYX1BJQ19DQUxMUyIKKy0gICAgICBmaQorLSAgICBmaQorICAgICBBQ19NU0dfUkVTVUxUKCRnY2NfY3ZfYXNfbGRfamFscl9yZWxvYykKKyAKKyAgICAgQUNfQ0FDSEVfQ0hFQ0soW2xpbmtlciBmb3IgLmVoX2ZyYW1lIHBlcnNvbmFsaXR5IHJlbGF4YXRpb25dLAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxNi1DT0xMRUNUX0dDQ19PUFRJT05TLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTlkZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTYtQ09MTEVDVF9HQ0NfT1BUSU9OUy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDJiMjJlZTJlNDQ2ODhmOGE3MmI5YWY3NmEwNDMxZDg2YmFjMDBkNDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToxNjoyOCArMDQwMAorU3ViamVjdDogW1BBVENIIDE2LzM1XSBDT0xMRUNUX0dDQ19PUFRJT05TCisKK1RoaXMgcGF0Y2ggYWRkcyAtLXN5c3Jvb3QgaW50byBDT0xMRUNUX0dDQ19PUFRJT05TIHdoaWNoIGlzIHVzZWQgdG8KK2ludm9rZSBjb2xsZWN0Mi4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvZ2NjLmMgfCA5ICsrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2djYy9nY2MuYyBiL2djYy9nY2MuYworaW5kZXggYTM3ZWM4Yi4uODdiNDdjNSAxMDA2NDQKKy0tLSBhL2djYy9nY2MuYworKysrIGIvZ2NjL2djYy5jCitAQCAtNDM1Miw2ICs0MzUyLDE1IEBAIHNldF9jb2xsZWN0X2djY19vcHRpb25zICh2b2lkKQorIAkJc2l6ZW9mICgiQ09MTEVDVF9HQ0NfT1BUSU9OUz0iKSAtIDEpOworIAorICAgZmlyc3RfdGltZSA9IFRSVUU7CisrI2lmZGVmIEhBVkVfTERfU1lTUk9PVAorKyAgaWYgKHRhcmdldF9zeXN0ZW1fcm9vdF9jaGFuZ2VkICYmIHRhcmdldF9zeXN0ZW1fcm9vdCkKKysgICAgeworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgIictLXN5c3Jvb3Q9Iiwgc2l6ZW9mKCInLS1zeXNyb290PSIpLTEpOworKyAgICAgIG9ic3RhY2tfZ3JvdyAoJmNvbGxlY3Rfb2JzdGFjaywgdGFyZ2V0X3N5c3RlbV9yb290LHN0cmxlbih0YXJnZXRfc3lzdGVtX3Jvb3QpKTsKKysgICAgICBvYnN0YWNrX2dyb3cgKCZjb2xsZWN0X29ic3RhY2ssICInIiwgMSk7CisrICAgICAgZmlyc3RfdGltZSA9IEZBTFNFOworKyAgICB9CisrI2VuZGlmCisgICBmb3IgKGkgPSAwOyAoaW50KSBpIDwgbl9zd2l0Y2hlczsgaSsrKQorICAgICB7CisgICAgICAgY29uc3QgY2hhciAqY29uc3QgKmFyZ3M7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTctVXNlLXRoZS1kZWZhdWx0cy5oLWluLUItaW5zdGVhZC1vZi1TLWFuZC10LW9lLWluLUIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUwNjEzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE3LVVzZS10aGUtZGVmYXVsdHMuaC1pbi1CLWluc3RlYWQtb2YtUy1hbmQtdC1vZS1pbi1CLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMTJmNDY3YmM2ZDg5NTNiYTM0MmZlNTE2NmI5YTJmMzk3YjMzNDc5NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjE3OjI1ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTcvMzVdIFVzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4KKyAke0J9CisKK1VzZSB0aGUgZGVmYXVsdHMuaCBpbiAke0J9IGluc3RlYWQgb2YgJHtTfSwgYW5kIHQtb2UgaW4gJHtCfSwgc28gdGhhdAordGhlIHNvdXJjZSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZ2NjLWNyb3NzLWluaXRpYWwsCitnY2MtY3Jvc3MtaW50ZXJtZWRpYXRlLCBnY2MtY3Jvc3MsIGdjYy1ydW50aW1lLCBhbmQgYWxzbyB0aGUgc2RrIGJ1aWxkLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworV2hpbGUgY29tcGlsaW5nIGdjYy1jcm9zc3Nkay1pbml0aWFsLXg4Nl82NCBvbiBzb21lIGhvc3QsIHRoZXJlIGlzCitvY2Nhc2lvbmFsbHkgZmFpbHVyZSB0aGF0IHRlc3QgdGhlIGV4aXN0YW5jZSBvZiBkZWZhdWx0LmggZG9lc24ndAord29yaywgdGhlIHJlYXNvbiBpcyB0bV9pbmNsdWRlX2xpc3Q9JyoqIGRlZmF1bHRzLmgnIHJhdGhlciB0aGFuCit0bV9pbmNsdWRlX2xpc3Q9JyoqIC4vZGVmYXVsdHMuaCcKKworU28gd2UgYWRkIHRoZSB0ZXN0IGNvbmRpdGlvbiBmb3IgdGhpcyBzaXR1YXRpb24uCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBnY2MvTWFrZWZpbGUuaW4gIHwgMiArLQorIGdjYy9jb25maWd1cmUgICAgfCA0ICsrLS0KKyBnY2MvY29uZmlndXJlLmFjIHwgNCArKy0tCisgZ2NjL21rY29uZmlnLnNoICB8IDQgKystLQorIDQgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA0YWI3NDA1Li42NjFhZTE3IDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC01MDIsNyArNTAyLDcgQEAgVEFSR0VUX1NZU1RFTV9ST09UID0gQFRBUkdFVF9TWVNURU1fUk9PVEAKKyBUQVJHRVRfU1lTVEVNX1JPT1RfREVGSU5FID0gQFRBUkdFVF9TWVNURU1fUk9PVF9ERUZJTkVACisgCisgeG1ha2VfZmlsZT1AeG1ha2VfZmlsZUAKKy10bWFrZV9maWxlPUB0bWFrZV9maWxlQAorK3RtYWtlX2ZpbGU9QHRtYWtlX2ZpbGVAIC4vdC1vZQorIFRNX0VORElBTl9DT05GSUc9QFRNX0VORElBTl9DT05GSUdACisgVE1fTVVMVElMSUJfQ09ORklHPUBUTV9NVUxUSUxJQl9DT05GSUdACisgVE1fTVVMVElMSUJfRVhDRVBUSU9OU19DT05GSUc9QFRNX01VTFRJTElCX0VYQ0VQVElPTlNfQ09ORklHQAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUgYi9nY2MvY29uZmlndXJlCitpbmRleCA5MDA5MDY0Li5mMDU5YzJmIDEwMDc1NQorLS0tIGEvZ2NjL2NvbmZpZ3VyZQorKysrIGIvZ2NjL2NvbmZpZ3VyZQorQEAgLTExODQxLDggKzExODQxLDggQEAgZm9yIGYgaW4gJHRtX2ZpbGU7IGRvCisgICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9ICRmIgorICAgICAgICA7OworICAgICBkZWZhdWx0cy5oICkKKy0gICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gXCQoc3JjZGlyKS8kZiIKKy0gICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vJGYiCisrICAgICAgIHRtX2luY2x1ZGVfbGlzdD0iJHt0bV9pbmNsdWRlX2xpc3R9IC4vJGYiCisgICAgICAgIDs7CisgICAgICogKQorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpL2NvbmZpZy8kZiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlLmFjIGIvZ2NjL2NvbmZpZ3VyZS5hYworaW5kZXggYzdhMjhiNC4uMmU2NjhhNSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWd1cmUuYWMKKysrKyBiL2djYy9jb25maWd1cmUuYWMKK0BAIC0xODMyLDggKzE4MzIsOCBAQCBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gJGYiCisgICAgICAgIDs7CisgICAgIGRlZmF1bHRzLmggKQorLSAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSBcJChzcmNkaXIpLyRmIgorLSAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAkZiIKKysgICAgICAgdG1fZmlsZV9saXN0PSIke3RtX2ZpbGVfbGlzdH0gLi8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi8kZiIKKyAgICAgICAgOzsKKyAgICAgKiApCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IFwkKHNyY2RpcikvY29uZmlnLyRmIgorZGlmZiAtLWdpdCBhL2djYy9ta2NvbmZpZy5zaCBiL2djYy9ta2NvbmZpZy5zaAoraW5kZXggYzMyZjA4Ny4uNjgwM2FiOSAxMDA2NDQKKy0tLSBhL2djYy9ta2NvbmZpZy5zaAorKysrIGIvZ2NjL21rY29uZmlnLnNoCitAQCAtNzcsNyArNzcsNyBAQCBpZiBbIC1uICIkSEVBREVSUyIgXTsgdGhlbgorICAgICBpZiBbICQjIC1nZSAxIF07IHRoZW4KKyAJZWNobyAnI2lmZGVmIElOX0dDQycgPj4gJHtvdXRwdXR9VAorIAlmb3IgZmlsZSBpbiAiJEAiOyBkbworLQkgICAgaWYgdGVzdCB4IiRmaWxlIiA9IHgiZGVmYXVsdHMuaCI7IHRoZW4KKysJICAgIGlmIHRlc3QgeCIkZmlsZSIgPSB4Ii4vZGVmYXVsdHMuaCIgLW8geCIkZmlsZSIgPSB4ImRlZmF1bHRzLmgiOyB0aGVuCisgCQlwb3N0cG9uZV9kZWZhdWx0c19oPSJ5ZXMiCisgCSAgICBlbHNlCisgCQllY2hvICIjIGluY2x1ZGUgXCIkZmlsZVwiIiA+PiAke291dHB1dH1UCitAQCAtMTA5LDcgKzEwOSw3IEBAIGVzYWMKKyAKKyAjIElmIHdlIHBvc3Rwb25lZCBpbmNsdWRpbmcgZGVmYXVsdHMuaCwgYWRkIHRoZSAjaW5jbHVkZSBub3cuCisgaWYgdGVzdCB4IiRwb3N0cG9uZV9kZWZhdWx0c19oIiA9IHgieWVzIjsgdGhlbgorLSAgICBlY2hvICIjIGluY2x1ZGUgXCJkZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKysgICAgZWNobyAiIyBpbmNsdWRlIFwiLi9kZWZhdWx0cy5oXCIiID4+ICR7b3V0cHV0fVQKKyBmaQorIAorICMgQWRkIG11bHRpcGxlIGluY2x1c2lvbiBwcm90ZWN0aW9uIGd1YXJkLCBwYXJ0IHR3by4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAxOC1mb3J0cmFuLWNyb3NzLWNvbXBpbGUtaGFjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTczMzkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTgtZm9ydHJhbi1jcm9zcy1jb21waWxlLWhhY2sucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA5NTUwNmI0NGM5ZWY0NzI1ZmVmNTJmYTg2NGQzZDNmY2Y5MzFlNDQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWFyIDIwMTMgMDk6MjA6MDEgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSCAxOC8zNV0gZm9ydHJhbiBjcm9zcy1jb21waWxlIGhhY2suCisKKyogRm9ydHJhbiB3b3VsZCBoYXZlIHNlYXJjaGVkIGZvciBhcm0tYW5nc3Ryb20tZ251ZWFiaS1nZm9ydHJhbiBidXQgd291bGQgaGF2ZSB1c2VkCit1c2VkIGdmb3J0YW4uIEZvciBnY2NfNC4yLjIuYmIgd2Ugd2FudCB0byB1c2UgdGhlIGdmb3J0cmFuIGNvbXBpbGVyIGZyb20gb3VyIGNyb3NzCitkaXJlY3RvcnkuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCistLS0KKyBsaWJnZm9ydHJhbi9jb25maWd1cmUgICAgfCAyICstCisgbGliZ2ZvcnRyYW4vY29uZmlndXJlLmFjIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlIGIvbGliZ2ZvcnRyYW4vY29uZmlndXJlCitpbmRleCBlMTU5MmY3Li43NmQxOWIzIDEwMDc1NQorLS0tIGEvbGliZ2ZvcnRyYW4vY29uZmlndXJlCisrKysgYi9saWJnZm9ydHJhbi9jb25maWd1cmUKK0BAIC0xMjc0Nyw3ICsxMjc0Nyw3IEBAIGVzYWMKKyAKKyAjIFdlIG5lZWQgZ2ZvcnRyYW4gdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgbGlicmFyeQorICNBQ19QUk9HX0ZDKGdmb3J0cmFuKQorLUZDPSIkR0ZPUlRSQU4iCisrI0ZDPSIkR0ZPUlRSQU4iCisgYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisgYWNfY29tcGlsZT0nJEZDIC1jICRGQ0ZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ID4mNScKKyBhY19saW5rPSckRkMgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGQ0ZMQUdTICRMREZMQUdTICRhY19mY2ZsYWdzX3NyY2V4dCBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2RpZmYgLS1naXQgYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMgYi9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKK2luZGV4IDM1YThiMzkuLjZhMGQ4YTkgMTAwNjQ0CistLS0gYS9saWJnZm9ydHJhbi9jb25maWd1cmUuYWMKKysrKyBiL2xpYmdmb3J0cmFuL2NvbmZpZ3VyZS5hYworQEAgLTI0MCw3ICsyNDAsNyBAQCBBQ19TVUJTVChlbmFibGVfc3RhdGljKQorIAorICMgV2UgbmVlZCBnZm9ydHJhbiB0byBjb21waWxlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5CisgI0FDX1BST0dfRkMoZ2ZvcnRyYW4pCistRkM9IiRHRk9SVFJBTiIKKysjRkM9IiRHRk9SVFJBTiIKKyBBQ19QUk9HX0ZDKGdmb3J0cmFuKQorIAorICMgZXh0cmEgTEQgRmxhZ3Mgd2hpY2ggYXJlIHJlcXVpcmVkIGZvciB0YXJnZXRzCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMTktbGliZ2NjLXNqbGotY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1Mzk0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDE5LWxpYmdjYy1zamxqLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK0Zyb20gOTRmNjE5Y2QzMjU3ZTM1ZTIwYTg3NzY0MGQwY2I5MGMyYjNlZmMxNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIwOjUwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMzVdIGxpYmdjYy1zamxqLWNoZWNrCisKK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgZG9lc250IHNlZW0gdG8ga2VlcCB0aGUgaW50ZXJtZWRpYXRlIGZpbGVzCit3aGljaCBhcmUgbmVlZGVkIGZvciBzamxqIHRlc3QgdG8gcGFzcyBzaW5jZSBpdCBncmVwcyBpbnRvIHRoZQorZ2VuZXJhdGVkIGZpbGUuIFNvIHdlIHJ1biB0aGUgY29tcGlsZXIgY29tbWFuZCB1c2luZyBBQ19UUllfQ09NTUFORAord2hpY2ggdGhlbiBnZW5lcmF0ZXMgdGhlIG5lZWRlZCAucyBmaWxlCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbGliZ2NjL2NvbmZpZ3VyZSAgICB8IDEwICsrKysrKy0tLS0KKyBsaWJnY2MvY29uZmlndXJlLmFjIHwgMTAgKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnY2MvY29uZmlndXJlIGIvbGliZ2NjL2NvbmZpZ3VyZQoraW5kZXggMDhjOTMxOS4uNWZmYWViMyAxMDA2NDQKKy0tLSBhL2xpYmdjYy9jb25maWd1cmUKKysrKyBiL2xpYmdjYy9jb25maWd1cmUKK0BAIC00NTcwLDE3ICs0NTcwLDE5IEBAIHZvaWQgZm9vICgpCisgfQorIAorIF9BQ0VPRgorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGU7IHRoZW4gOgorK2lmIHsgYWNfdHJ5PScke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JjUnCisrICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfdHJ5XCIiOyB9ID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4KKyAgIGlmIGdyZXAgX1Vud2luZF9TakxqX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz15ZXMKKyAgIGVsaWYgZ3JlcCBfVW53aW5kX1Jlc3VtZSBjb25mdGVzdC5zID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICBsaWJnY2NfY3ZfbGliX3NqbGpfZXhjZXB0aW9ucz1ubworICAgZmkKKyBmaQorLUNGTEFHUz0kQ0ZMQUdTX2hvbGQKKyBybSAtZiBjb25mdGVzdCoKKyAKKyBmaQorZGlmZiAtLWdpdCBhL2xpYmdjYy9jb25maWd1cmUuYWMgYi9saWJnY2MvY29uZmlndXJlLmFjCitpbmRleCAxYzQwNWU4Li5mNTI5NzVkIDEwMDY0NAorLS0tIGEvbGliZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvbGliZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTI1NSwxNiArMjU1LDE0IEBAIHZvaWQgZm9vICgpCisgICBiYXIoKTsKKyB9CisgXSldKQorLUNGTEFHU19ob2xkPSRDRkxBR1MKKy1DRkxBR1M9Ii0tc2F2ZS10ZW1wcyAtZmV4Y2VwdGlvbnMiCisgbGliZ2NjX2N2X2xpYl9zamxqX2V4Y2VwdGlvbnM9dW5rbm93bgorLUFTX0lGKFthY19mbl9jX3RyeV9jb21waWxlXSwKKy0gIFtpZiBncmVwIF9VbndpbmRfU2pMal9SZXN1bWUgY29uZnRlc3QucyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiBBQ19UUllfQ09NTUFORCgke0NDLWNjfSAtZmV4Y2VwdGlvbnMgLVMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5zIDE+JkFTX01FU1NBR0VfTE9HX0ZEKTsgdGhlbgorKyAgaWYgZ3JlcCBfVW53aW5kX1NqTGpfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPXllcworICAgZWxpZiBncmVwIF9VbndpbmRfUmVzdW1lIGNvbmZ0ZXN0LnMgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIGxpYmdjY19jdl9saWJfc2psal9leGNlcHRpb25zPW5vCistICBmaV0pCistQ0ZMQUdTPSRDRkxBR1NfaG9sZAorKyAgZmkKKytmaQorIHJtIC1mIGNvbmZ0ZXN0KgorIF0pCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjAtY3BwLWhvbm9yLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiYzY4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIwLWNwcC1ob25vci1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gNmU2MjgzZDY0NWM4M2NhNTM0MjE5YTAyYWU4ODJhM2Q3YmU5NWZmMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIyOjAwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjAvMzVdIGNwcDogaG9ub3Igc3lzcm9vdC4KKworQ3VycmVudGx5LCBpZiB0aGUgZ2NjIHRvb2xjaGFpbiBpcyByZWxvY2F0ZWQgYW5kIGluc3RhbGxlZCBmcm9tIHNzdGF0ZSwgdGhlbiB5b3UgdHJ5IGFuZCBjb21waWxlCitwcmVwcm9jZXNzZWQgc291cmNlICguaSBvciAuaWkgZmlsZXMpLCB0aGUgY29tcGlsZXIgd2lsbCB0cnkgYW5kIGFjY2VzcyB0aGUgYnVpbHRpbiBzeXNyb290IGxvY2F0aW9uCityYXRoZXIgdGhhbiB0aGUgLS1zeXNyb290IG9wdGlvbiBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmRsaW5lLiBJZiBhY2Nlc3MgdG8gdGhhdCBkaXJlY3RvcnkgaXMKK3Blcm1pc3Npb24gZGVuaWVkICh1bnJlYWRhYmxlKSwgZ2NjIHdpbGwgZXJyb3IuCisKK1RoaXMgaGFwcGVucyB3aGVuIGNjYWNoZSBpcyBpbiB1c2UgZHVlIHRvIHRoZSBmYWN0IGl0IHVzZXMgcHJlcHJvY2Vzc2VkIHNvdXJjZSBmaWxlcy4KKworVGhlIGZpeCBiZWxvdyBhZGRzICVJIHRvIHRoZSBjcHAtb3V0cHV0IHNwZWMgbWFjcm8gc28gdGhlIGRlZmF1bHQgc3Vic3RpdHV0aW9ucyBmb3IgLWlwcmVmaXgsCistaXN5c3RlbSwgLWlzeXNyb290IGhhcHBlbiBhbmQgdGhlIGNvcnJlY3Qgc3lzcm9vdCBpcyB1c2VkLgorCitbWU9DVE8gIzIwNzRdCisKK1JQIDIwMTIvMDQvMTMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBnY2MvY3AvbGFuZy1zcGVjcy5oIHwgMiArLQorIGdjYy9nY2MuYyAgICAgICAgICAgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY3AvbGFuZy1zcGVjcy5oIGIvZ2NjL2NwL2xhbmctc3BlY3MuaAoraW5kZXggYjA3MjhmMC4uZTY5ZWU3ZCAxMDA2NDQKKy0tLSBhL2djYy9jcC9sYW5nLXNwZWNzLmgKKysrKyBiL2djYy9jcC9sYW5nLXNwZWNzLmgKK0BAIC02Myw1ICs2Myw1IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgICB7Ii5paSIsICJAYysrLWNwcC1vdXRwdXQiLCAwLCAwLCAwfSwKKyAgIHsiQGMrKy1jcHAtb3V0cHV0IiwKKyAgICAiJXshTToleyFNTToleyFFOlwKKy0gICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAlMlwKKysgICAgY2MxcGx1cyAtZnByZXByb2Nlc3NlZCAlaSAlSSAlKGNjMV9vcHRpb25zKSAlMlwKKyAgICAgJXshZnN5bnRheC1vbmx5OiUoaW52b2tlX2FzKX19fX0iLCAwLCAwLCAwfSwKK2RpZmYgLS1naXQgYS9nY2MvZ2NjLmMgYi9nY2MvZ2NjLmMKK2luZGV4IDg3YjQ3YzUuLmU2ZWZhZTcgMTAwNjQ0CistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTExNDIsNyArMTE0Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcGlsZXIgZGVmYXVsdF9jb21waWxlcnNbXSA9CisgICAgICAgICAgICAgICAgICAgICAlV3tvKjotLW91dHB1dC1wY2g9JSp9fSVWfX19fX19IiwgMCwgMCwgMH0sCisgICB7Ii5pIiwgIkBjcHAtb3V0cHV0IiwgMCwgMCwgMH0sCisgICB7IkBjcHAtb3V0cHV0IiwKKy0gICAiJXshTToleyFNTToleyFFOmNjMSAtZnByZXByb2Nlc3NlZCAlaSAlKGNjMV9vcHRpb25zKSAleyFmc3ludGF4LW9ubHk6JShpbnZva2VfYXMpfX19fSIsIDAsIDAsIDB9LAorKyAgICIleyFNOiV7IU1NOiV7IUU6Y2MxIC1mcHJlcHJvY2Vzc2VkICVpICVJICUoY2MxX29wdGlvbnMpICV7IWZzeW50YXgtb25seTolKGludm9rZV9hcyl9fX19IiwgMCwgMCwgMH0sCisgICB7Ii5zIiwgIkBhc3NlbWJsZXIiLCAwLCAwLCAwfSwKKyAgIHsiQGFzc2VtYmxlciIsCisgICAgIiV7IU06JXshTU06JXshRToleyFTOmFzICUoYXNtX2RlYnVnKSAlKGFzbV9vcHRpb25zKSAlaSAlQSB9fX19IiwgMCwgMCwgMH0sCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIxLU1JUFM2NC1EZWZhdWx0LXRvLU42NC1BQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYWQ0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMS1NSVBTNjQtRGVmYXVsdC10by1ONjQtQUJJLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0Zyb20gN2Y3NjZmYzQ3ZjkzODhkZDAwOTQ4NTJhNDNmMWFmMjU2OGI0YjliMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjIzOjA4ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjEvMzVdIE1JUFM2NDogRGVmYXVsdCB0byBONjQgQUJJCisKK01JUFM2NCBkZWZhdWx0cyB0byBuMzIgQUJJLCB0aGlzIHBhdGNoIG1ha2VzIGl0CitzbyB0aGF0IGl0IGRlZmF1bHRzIHRvIE42NCBBQkkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWcgc3BlY2lmaWNdCistLS0KKyBnY2MvY29uZmlnLmdjYyB8IDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy5nY2MgYi9nY2MvY29uZmlnLmdjYworaW5kZXggY2IwOGE1Yy4uYjE1NTc0NCAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcuZ2NjCisrKysgYi9nY2MvY29uZmlnLmdjYworQEAgLTIwMTEsMjkgKzIwMTEsMjkgQEAgbWlwcyotKi1saW51eCopCQkJCSMgTGludXggTUlQUywgZWl0aGVyIGVuZGlhbi4KKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzMzIKKyAJCQk7OworIAkJbWlwczY0ZWwtc3QtbGludXgtZ251KQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gbWlwcy9zdC5oIgorIAkJCXRtYWtlX2ZpbGU9IiR7dG1ha2VfZmlsZX0gbWlwcy90LXN0IgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzNjRvY3Rlb24qLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCXRtX2RlZmluZXM9IiR7dG1fZGVmaW5lc30gTUlQU19DUFVfU1RSSU5HX0RFRkFVTFQ9XFxcIm9jdGVvblxcXCIiCisgCQkJdGFyZ2V0X2NwdV9kZWZhdWx0PU1BU0tfU09GVF9GTE9BVF9BQkkKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAkJbWlwc2lzYTY0cjYqLSotbGludXgqKQorLQkJCWRlZmF1bHRfbWlwc19hYmk9bjMyCisrCQkJZGVmYXVsdF9taXBzX2FiaT02NAorIAkJCWRlZmF1bHRfbWlwc19hcmNoPW1pcHM2NHI2CisgCQkJZW5hYmxlX21pcHNfbXVsdGlsaWJzPSJ5ZXMiCisgCQkJOzsKKyAJCW1pcHNpc2E2NHIyKi0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQlkZWZhdWx0X21pcHNfYXJjaD1taXBzNjRyMgorIAkJCWVuYWJsZV9taXBzX211bHRpbGlicz0ieWVzIgorIAkJCTs7CisgCQltaXBzNjQqLSotbGludXgqIHwgbWlwc2lzYTY0Ki0qLWxpbnV4KikKKy0JCQlkZWZhdWx0X21pcHNfYWJpPW4zMgorKwkJCWRlZmF1bHRfbWlwc19hYmk9NjQKKyAJCQllbmFibGVfbWlwc19tdWx0aWxpYnM9InllcyIKKyAJCQk7OworIAllc2FjCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIyLURlZmluZS1HTElCQ19EWU5BTUlDX0xJTktFUi1hbmQtVUNMSUJDX0RZTkFNSUNfTElOS0UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTIwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyMi1EZWZpbmUtR0xJQkNfRFlOQU1JQ19MSU5LRVItYW5kLVVDTElCQ19EWU5BTUlDX0xJTktFLnBhdGNoCkBAIC0wLDAgKzEsMjE2IEBACitGcm9tIDRmOTRhZGRlZDhiNzA0MzY0MjM4NmIzMWVkNGMzYTFiZDAxNmYzMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyOSBNYXIgMjAxMyAwOToyNDo1MCArMDQwMAorU3ViamVjdDogW1BBVENIIDIyLzM1XSBEZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgYW5kIFVDTElCQ19EWU5BTUlDX0xJTktFUgorIHJlbGF0aXZlIHRvIFNZU1RFTUxJQlNfRElSCisKK1RoaXMgcGF0Y2ggZGVmaW5lcyBHTElCQ19EWU5BTUlDX0xJTktFUiBhbmQgVUNMSUJDX0RZTkFNSUNfTElOS0VSCityZWxhdGl2ZSB0byBTWVNURU1MSUJTX0RJUiB3aGljaCBjYW4gYmUgc2V0IGluIGdlbmVyYXRlZCBoZWFkZXJzCitUaGlzIGJyZWFrcyB0aGUgYXNzdW1wdGlvbiBvZiBoYXJkY29kZWQgbXVsdGlsaWIgaW4gZ2NjCitDaGFuZ2UgaXMgb25seSBmb3IgdGhlIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzIGluIE9FIGluY2x1ZGluZworU0gsIHNwYXJjLCBhbHBoYSBmb3IgcG9zc2libGUgZnV0dXJlIHN1cHBvcnQgKGlmIGFueSkKKworUmVtb3ZlcyB0aGUgZG9faGVhZGVyZml4IHRhc2sgaW4gbWV0YWRhdGEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBjb25maWd1cmF0aW9uXQorLS0tCisgZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCB8ICA0ICsrLS0KKyBnY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggIHwgIDQgKystLQorIGdjYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oICAgfCAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eC5oICAgICAgfCAgMiArLQorIGdjYy9jb25maWcvaTM4Ni9saW51eDY0LmggICAgfCAgNiArKystLS0KKyBnY2MvY29uZmlnL2xpbnV4LmggICAgICAgICAgIHwgIDggKysrKy0tLS0KKyBnY2MvY29uZmlnL21pcHMvbGludXguaCAgICAgIHwgMTIgKysrKysrLS0tLS0tCisgZ2NjL2NvbmZpZy9yczYwMDAvbGludXg2NC5oICB8IDEwICsrKysrLS0tLS0KKyBnY2MvY29uZmlnL3NoL2xpbnV4LmggICAgICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggICAgIHwgIDIgKy0KKyBnY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCAgIHwgIDQgKystLQorIDExIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hbHBoYS9saW51eC1lbGYuaCBiL2djYy9jb25maWcvYWxwaGEvbGludXgtZWxmLmgKK2luZGV4IDJjNzBhMmYuLmRkMDQ4ZGIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCisrKysgYi9nY2MvY29uZmlnL2FscGhhL2xpbnV4LWVsZi5oCitAQCAtMjMsOCArMjMsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICNkZWZpbmUgRVhUUkFfU1BFQ1MgXAorIHsgImVsZl9keW5hbWljX2xpbmtlciIsIEVMRl9EWU5BTUlDX0xJTktFUiB9LAorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIJIi9saWIvbGQtbGludXguc28uMiIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSCVNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSICBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisgI2lmIERFRkFVTFRfTElCQyA9PSBMSUJDX1VDTElCQworICNkZWZpbmUgQ0hPT1NFX0RZTkFNSUNfTElOS0VSKEcsIFUpICIle21nbGliYzoiIEcgIjs6IiBVICJ9IgorICNlbGlmIERFRkFVTFRfTElCQyA9PSBMSUJDX0dMSUJDCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCitpbmRleCBlOWQ2NWRjLi5jZmRmM2YwIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oCisrKysgYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK0BAIC02OCw4ICs2OCw4IEBACisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCBhbmQgVEFSR0VUX0RFRkFVTFRfRkxPQVRfQUJJLiAgKi8KKyAKKyAjdW5kZWYgIEdMSUJDX0RZTkFNSUNfTElOS0VSCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICIvbGliL2xkLWxpbnV4LnNvLjMiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9IQVJEX0ZMT0FUICIvbGliL2xkLWxpbnV4LWFybWhmLnNvLjMiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4zIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVJfSEFSRF9GTE9BVCBTWVNURU1MSUJTX0RJUiAibGQtbGludXgtYXJtaGYuc28uMyIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSX0RFRkFVTFQgR0xJQkNfRFlOQU1JQ19MSU5LRVJfU09GVF9GTE9BVAorIAorICNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2xpbnV4LWVsZi5oIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK2luZGV4IDEyNzljYmEuLjFkZGU3NDcgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lbGYuaAorKysrIGIvZ2NjL2NvbmZpZy9hcm0vbGludXgtZWxmLmgKK0BAIC02Miw3ICs2Miw3IEBACisgCisgI2RlZmluZSBMSUJHQ0NfU1BFQyAiJXttZmxvYXQtYWJpPXNvZnQqOi1sZmxvYXR9IC1sZ2NjIgorIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNkZWZpbmUgTElOVVhfVEFSR0VUX0xJTktfU1BFQyAgIiV7aCp9IFwKKyAgICAle3N0YXRpYzotQnN0YXRpY30gXAorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9saW51eC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK2luZGV4IGExMDA5NjMuLjIxYmEyYjIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2kzODYvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4LmgKK0BAIC0yMCw0ICsyMCw0IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKyAKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OICJlbGZfaTM4NiIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUiBTWVNURU1MSUJTX0RJUiAibGQtbGludXguc28uMiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbGludXg2NC5oIGIvZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAoraW5kZXggYTI3ZDNiZS4uNjE4NWNjZSAxMDA2NDQKKy0tLSBhL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvaTM4Ni9saW51eDY0LmgKK0BAIC0yNyw2ICsyNyw2IEBAIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorICNkZWZpbmUgR05VX1VTRVJfTElOS19FTVVMQVRJT042NCAiZWxmX3g4Nl82NCIKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OWDMyICJlbGYzMl94ODZfNjQiCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXgteDg2LTY0LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUlgzMiAiL2xpYngzMi9sZC1saW51eC14MzIuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14ODYtNjQuc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSWDMyIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC14MzIuc28uMiIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2xpbnV4LmggYi9nY2MvY29uZmlnL2xpbnV4LmgKK2luZGV4IDg1NzM4OWEuLjIyYjliZTUgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvbGludXguaAorQEAgLTczLDEwICs3MywxMCBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgICBHTElCQ19EWU5BTUlDX0xJTktFUiBtdXN0IGJlIGRlZmluZWQgZm9yIGVhY2ggdGFyZ2V0IHVzaW5nIHRoZW0sIG9yCisgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBhbmQgR0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBmb3IgdGFyZ2V0cworICAgIHN1cHBvcnRpbmcgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBjb21waWxhdGlvbi4gICovCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgIi9saWIvbGR4MzItdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy5zby4wIgorKyNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIgU1lTVEVNTElCU19ESVIgImxkeDMyLXVDbGliYy5zby4wIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSICIvc3lzdGVtL2Jpbi9saW5rZXIiCisgI2RlZmluZSBCSU9OSUNfRFlOQU1JQ19MSU5LRVIzMiAiL3N5c3RlbS9iaW4vbGlua2VyIgorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSNjQgIi9zeXN0ZW0vYmluL2xpbmtlcjY0IgorZGlmZiAtLWdpdCBhL2djYy9jb25maWcvbWlwcy9saW51eC5oIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK2luZGV4IDkxZGYyNjEuLmMzMDZhZmIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL21pcHMvbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9taXBzL2xpbnV4LmgKK0BAIC0yMiwyMCArMjIsMjAgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAjZGVmaW5lIEdOVV9VU0VSX0xJTktfRU1VTEFUSU9OTjMyICJlbGYzMiV7RUI6Yn0le0VMOmx9dHNtaXBuMzIiCisgCisgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyIFwKKy0gICIle21uYW49MjAwODovbGliL2xkLWxpbnV4LW1pcHNuOC5zby4xOzovbGliL2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWI2NC9sZC1saW51eC1taXBzbjguc28uMTs6L2xpYjY0L2xkLnNvLjF9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LW1pcHNuOC5zby4xOzoiIFNZU1RFTUxJQlNfRElSICJsZC5zby4xfSIKKyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKKy0gICIle21uYW49MjAwODovbGliMzIvbGQtbGludXgtbWlwc244LnNvLjE7Oi9saWIzMi9sZC5zby4xfSIKKysgICIle21uYW49MjAwODoiIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1taXBzbjguc28uMTs6IiBTWVNURU1MSUJTX0RJUiAibGQuc28uMX0iCisgCisgI3VuZGVmIFVDTElCQ19EWU5BTUlDX0xJTktFUjMyCisgI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBcCistICAiJXttbmFuPTIwMDg6L2xpYi9sZC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorICN1bmRlZiBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NAorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSNjQgXAorLSAgIiV7bW5hbj0yMDA4Oi9saWIvbGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7Oi9saWIvbGQ2NC11Q2xpYmMuc28uMH0iCisrICAiJXttbmFuPTIwMDg6IiBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMtbWlwc244LnNvLjA7OiIgU1lTVEVNTElCU19ESVIgImxkNjQtdUNsaWJjLnNvLjB9IgorICNkZWZpbmUgVUNMSUJDX0RZTkFNSUNfTElOS0VSTjMyIFwKKy0gICIle21uYW49MjAwODovbGliMzIvbGQtdUNsaWJjLW1pcHNuOC5zby4wOzovbGliMzIvbGQtdUNsaWJjLnNvLjB9IgorKyAgIiV7bW5hbj0yMDA4OiIgU1lTVEVNTElCU19ESVIgImxkLXVDbGliYy1taXBzbjguc28uMDs6IiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjB9IgorIAorICNkZWZpbmUgQklPTklDX0RZTkFNSUNfTElOS0VSTjMyICIvc3lzdGVtL2Jpbi9saW5rZXIzMiIKKyAjZGVmaW5lIEdOVV9VU0VSX0RZTkFNSUNfTElOS0VSTjMyIFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmggYi9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKK2luZGV4IDA4NzllN2UuLjMxYzQzMzggMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorQEAgLTM1NywxNCArMzU3LDE0IEBAIGV4dGVybiBpbnQgZG90X3N5bWJvbHM7CisgI3VuZGVmCUxJTktfT1NfREVGQVVMVF9TUEVDCisgI2RlZmluZSBMSU5LX09TX0RFRkFVTFRfU1BFQyAiJShsaW5rX29zX2xpbnV4KSIKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgIi9saWIvbGQuc28uMSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLnNvLjEiCisgI2lmZGVmIExJTlVYNjRfREVGQVVMVF9BQklfRUxGdjIKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MTovbGliNjQvbGQ2NC5zby4xOzovbGliNjQvbGQ2NC5zby4yfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MToiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjE7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMn0iCisgI2Vsc2UKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjovbGliNjQvbGQ2NC5zby4yOzovbGliNjQvbGQ2NC5zby4xfSIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQgIiV7bWFiaT1lbGZ2MjoiIFNZU1RFTUxJQlNfRElSICJsZDY0LnNvLjI7OiIgU1lTVEVNTElCU19ESVIgImxkNjQuc28uMX0iCisgI2VuZGlmCistI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiAiL2xpYi9sZC11Q2xpYmMuc28uMCIKKy0jZGVmaW5lIFVDTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliL2xkNjQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVIzMiBTWVNURU1MSUJTX0RJUiAibGQtdUNsaWJjLnNvLjAiCisrI2RlZmluZSBVQ0xJQkNfRFlOQU1JQ19MSU5LRVI2NCBTWVNURU1MSUJTX0RJUiAibGQ2NC11Q2xpYmMuc28uMCIKKyAjaWYgREVGQVVMVF9MSUJDID09IExJQkNfVUNMSUJDCisgI2RlZmluZSBDSE9PU0VfRFlOQU1JQ19MSU5LRVIoRywgVSkgIiV7bWdsaWJjOiIgRyAiOzoiIFUgIn0iCisgI2VsaWYgREVGQVVMVF9MSUJDID09IExJQkNfR0xJQkMKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NoL2xpbnV4LmggYi9nY2MvY29uZmlnL3NoL2xpbnV4LmgKK2luZGV4IDBmNWQ2MTQuLjE2ODQxNmMgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NoL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvc2gvbGludXguaAorQEAgLTQzLDcgKzQzLDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyAKKyAjZGVmaW5lIFRBUkdFVF9BU01fRklMRV9FTkQgZmlsZV9lbmRfaW5kaWNhdGVfZXhlY19zdGFjaworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiBTVUJUQVJHRVRfTElOS19FTVVMX1NVRkZJWAorICNkZWZpbmUgU1VCVEFSR0VUX0xJTktfRU1VTF9TVUZGSVggIl9saW51eCIKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmggYi9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKK2luZGV4IDU2ZGVmNGIuLjAwYjU2NGMgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXguaAorQEAgLTgzLDcgKzgzLDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKmhvc3RfZGV0ZWN0X2xvY2FsX2NwdSAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKKyAgICBXaGVuIHRoZSAtc2hhcmVkIGxpbmsgb3B0aW9uIGlzIHVzZWQgYSBmaW5hbCBsaW5rIGlzIG5vdCBiZWluZworICAgIGRvbmUuICAqLworIAorLSNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIi9saWIvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICN1bmRlZiAgTElOS19TUEVDCisgI2RlZmluZSBMSU5LX1NQRUMgIi1tIGVsZjMyX3NwYXJjICV7c2hhcmVkOi1zaGFyZWR9IFwKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL3NwYXJjL2xpbnV4NjQuaCBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitpbmRleCBmYTgwNWZkLi4wZWI0YWNkIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9zcGFyYy9saW51eDY0LmgKKysrKyBiL2djYy9jb25maWcvc3BhcmMvbGludXg2NC5oCitAQCAtODQsOCArODQsOCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorICAgIFdoZW4gdGhlIC1zaGFyZWQgbGluayBvcHRpb24gaXMgdXNlZCBhIGZpbmFsIGxpbmsgaXMgbm90IGJlaW5nCisgICAgZG9uZS4gICovCisgCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliL2xkLWxpbnV4LnNvLjIiCistI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0ICIvbGliNjQvbGQtbGludXguc28uMiIKKysjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisrI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjY0IFNZU1RFTUxJQlNfRElSICJsZC1saW51eC5zby4yIgorIAorICNpZmRlZiBTUEFSQ19CSV9BUkNICisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDIzLWdjYy1GaXgtYXJndW1lbnQtbGlzdC10b28tbG9uZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM3ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjMtZ2NjLUZpeC1hcmd1bWVudC1saXN0LXRvby1sb25nLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOGRiNjA2MjA1NDg3ZWJiMDNlYWU3ODg4MjZmYWY2NGJkNjkxODQ1MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI2OjM3ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjMvMzVdIGdjYzogRml4IGFyZ3VtZW50IGxpc3QgdG9vIGxvbmcgZXJyb3IuCisKK1RoZXJlIHdvdWxkIGJlIGFuICJBcmd1bWVudCBsaXN0IHRvbyBsb25nIiBlcnJvciB3aGVuIHRoZQorYnVpbGQgZGlyZWN0b3J5IGlzIGxvbmdlciB0aGFuIDIwMCwgdGhpcyBpcyBjYXVzZWQgYnk6CisKK2hlYWRlcnM9YGVjaG8gJChQTFVHSU5fSEVBREVSUykgfCB0ciAnICcgJ1wwMTInIHwgc29ydCAtdWAKKworVGhlIFBMVUdJTl9IRUFERVJTIGlzIHRvbyBsb25nIGJlZm9yZSBzb3J0LCBzbyB0aGUgImVjaG8iIGNhbid0IGhhbmRsZQoraXQsIHVzZSB0aGUgJChzb3J0IGxpc3QpIG9mIEdOVSBtYWtlIHdoaWNoIGNhbiBoYW5kbGUgdGhlIHRvbyBsb25nIGxpc3QKK3dvdWxkIGZpeCB0aGUgcHJvYmxlbSwgdGhlIGhlYWRlciB3b3VsZCBiZSBzaG9ydCBlbm91Z2ggYWZ0ZXIgc29ydGVkLgorVGhlICJ0ciAnICcgJ1wwMTInIiB3YXMgdXNlZCBmb3IgdHJhbnNsYXRpbmcgdGhlIHNwYWNlIHRvICJcbiIsIHRoZQorJChzb3J0IGxpc3QpIGRvZXNuJ3QgbmVlZCB0aGlzLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL01ha2VmaWxlLmluIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL01ha2VmaWxlLmluIGIvZ2NjL01ha2VmaWxlLmluCitpbmRleCA2NjFhZTE3Li45NDcwYTkyIDEwMDY0NAorLS0tIGEvZ2NjL01ha2VmaWxlLmluCisrKysgYi9nY2MvTWFrZWZpbGUuaW4KK0BAIC0zMjU1LDcgKzMyNTUsNyBAQCBpbnN0YWxsLXBsdWdpbjogaW5zdGFsbGRpcnMgbGFuZy5pbnN0YWxsLXBsdWdpbiBzLWhlYWRlci12YXJzIGluc3RhbGwtZ2VuZ3R5cGUKKyAjIFdlIGtlZXAgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIGZpbGVzIGluIGNvbmZpZyBvciBjLWZhbWlseSBhbmQgLmRlZgorICMgZmlsZXMuIEFsbCBvdGhlciBmaWxlcyBhcmUgZmxhdHRlbmVkIHRvIGEgc2luZ2xlIGRpcmVjdG9yeS4KKyAJJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChwbHVnaW5faW5jbHVkZWRpcikKKy0JaGVhZGVycz1gZWNobyAkKFBMVUdJTl9IRUFERVJTKSAkJChjZCAkKHNyY2Rpcik7IGVjaG8gKi5oICouZGVmKSB8IHRyICcgJyAnXDAxMicgfCBzb3J0IC11YDsgXAorKwloZWFkZXJzPSIkKHNvcnQgJChQTFVHSU5fSEVBREVSUykgJCQoY2QgJChzcmNkaXIpOyBlY2hvICouaCAqLmRlZikpIjsgXAorIAlzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgOyBcCisgCWZvciBmaWxlIGluICQkaGVhZGVyczsgZG8gXAorIAkgIGlmIFsgLWYgJCRmaWxlIF0gOyB0aGVuIFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNC1EaXNhYmxlLXNkdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjIxOWNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjQtRGlzYWJsZS1zZHQucGF0Y2gKQEAgLTAsMCArMSwxMTMgQEAKK0Zyb20gZTEzNjM0MmQyZjdjMGJkYjFjZjRiNTdhZDM0NDBkM2M5ZTcxMDMyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI4OjEwICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjQvMzVdIERpc2FibGUgc2R0LgorCitXZSBkb24ndCBsaXN0IGR0cmFjZSBpbiBERVBFTkRTIHNvIHdlIHNob3VsZG4ndCBiZSBkZXBlbmRpbmcgb24gdGhpcyBoZWFkZXIuCitJdCBtYXkgb3IgbWF5IG5vdCBleGlzdCBmcm9tIHByZWl2b3VzIGJ1aWxkcyB0aG91Z2guIFRvIGJlIGRldGVybWluc3RpYywgZGlzYWJsZQorc2R0LmggdXNhZ2UgYWx3YXlzLiBUaGlzIGF2b2lkcyBidWlsZCBmYWlsdXJlcyBpZiB0aGUgaGVhZGVyIGlzIHJlbW92ZWQgYWZ0ZXIgY29uZmlndXJlCitidXQgYmVmb3JlIGxpYmdjYyBpcyBjb21waWxlZCBmb3IgZXhhbXBsZS4KKworUlAgMjAxMi84LzcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworRGlzYWJsZSBzZHQgZm9yIGxpYnN0ZGMrKy12My4KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbaGFja10KKy0tLQorIGdjYy9jb25maWd1cmUgICAgICAgICAgICAgfCAxMiArKysrKystLS0tLS0KKyBnY2MvY29uZmlndXJlLmFjICAgICAgICAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgbGlic3RkYysrLXYzL2NvbmZpZ3VyZSAgICB8ICA2ICsrKy0tLQorIGxpYnN0ZGMrKy12My9jb25maWd1cmUuYWMgfCAgMiArLQorIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggZjA1OWMyZi4uOTg4NTNiMyAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0yNzczMywxMiArMjc3MzMsMTIgQEAgZmkKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSIgPiY1CisgJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3lzL3NkdC5oIGluIHRoZSB0YXJnZXQgQyBsaWJyYXJ5Li4uICIgPiY2OyB9CisgaGF2ZV9zeXNfc2R0X2g9bm8KKy1pZiB0ZXN0IC1mICR0YXJnZXRfaGVhZGVyX2Rpci9zeXMvc2R0Lmg7IHRoZW4KKy0gIGhhdmVfc3lzX3NkdF9oPXllcworLQorLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorLQorLWZpCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMKKysjJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIworKyNmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9zeXNfc2R0X2giID4mNQorICRhc19lY2hvICIkaGF2ZV9zeXNfc2R0X2giID4mNjsgfQorIAorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCAyZTY2OGE1Li41MmNkY2I4IDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTUyMzIsMTUgKzUyMzIsMTUgQEAgaWYgdGVzdCB4JGdjY19jdl9saWJjX3Byb3ZpZGVzX3NzcCA9IHh5ZXM7IHRoZW4KKyBmaQorIAorICMgVGVzdCBmb3IgPHN5cy9zZHQuaD4gb24gdGhlIHRhcmdldC4KKy1HQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCistQUNfTVNHX0NIRUNLSU5HKHN5cy9zZHQuaCBpbiB0aGUgdGFyZ2V0IEMgbGlicmFyeSkKKy1oYXZlX3N5c19zZHRfaD1ubworLWlmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorLSAgaGF2ZV9zeXNfc2R0X2g9eWVzCistICBBQ19ERUZJTkUoSEFWRV9TWVNfU0RUX0gsIDEsCistICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKy1maQorLUFDX01TR19SRVNVTFQoJGhhdmVfc3lzX3NkdF9oKQorKyNHQ0NfVEFSR0VUX1RFTVBMQVRFKFtIQVZFX1NZU19TRFRfSF0pCisrI0FDX01TR19DSEVDS0lORyhzeXMvc2R0LmggaW4gdGhlIHRhcmdldCBDIGxpYnJhcnkpCisrI2hhdmVfc3lzX3NkdF9oPW5vCisrI2lmIHRlc3QgLWYgJHRhcmdldF9oZWFkZXJfZGlyL3N5cy9zZHQuaDsgdGhlbgorKyMgIGhhdmVfc3lzX3NkdF9oPXllcworKyMgIEFDX0RFRklORShIQVZFX1NZU19TRFRfSCwgMSwKKysjICAgICAgICAgICAgW0RlZmluZSBpZiB5b3VyIHRhcmdldCBDIGxpYnJhcnkgcHJvdmlkZXMgc3lzL3NkdC5oXSkKKysjZmkKKysjQUNfTVNHX1JFU1VMVCgkaGF2ZV9zeXNfc2R0X2gpCisgCisgIyBDaGVjayBpZiBURm1vZGUgbG9uZyBkb3VibGUgc2hvdWxkIGJlIHVzZWQgYnkgZGVmYXVsdCBvciBub3QuCisgIyBTb21lIGdsaWJjIHRhcmdldHMgdXNlZCBERm1vZGUgbG9uZyBkb3VibGUsIGJ1dCB3aXRoIGdsaWJjIDIuNAorZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWd1cmUgYi9saWJzdGRjKystdjMvY29uZmlndXJlCitpbmRleCBmYmFkNjY3Li43ZDVhNmM2IDEwMDc1NQorLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQorQEAgLTIwODk3LDExICsyMDg5NywxMSBAQCBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCisgYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKKyBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgCistICBpZiB0ZXN0ICRnbGliY3h4X2N2X3N5c19zZHRfaCA9IHllczsgdGhlbgorKyMgIGlmIHRlc3QgJGdsaWJjeHhfY3Zfc3lzX3NkdF9oID0geWVzOyB0aGVuCisgCistJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWVNfU0RUX0ggMSIgPj5jb25mZGVmcy5oCisrIyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1NEVF9IIDEiID4+Y29uZmRlZnMuaAorIAorLSAgZmkKKysjICBmaQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY1CisgJGFzX2VjaG8gIiRnbGliY3h4X2N2X3N5c19zZHRfaCIgPiY2OyB9CisgCitkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZ3VyZS5hYyBiL2xpYnN0ZGMrKy12My9jb25maWd1cmUuYWMKK2luZGV4IDdhN2MxZDguLmIxM2VhYmMgMTAwNjQ0CistLS0gYS9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCisrKysgYi9saWJzdGRjKystdjMvY29uZmlndXJlLmFjCitAQCAtMjI5LDcgKzIyOSw3IEBAIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NFU1NPUlNfT05MTgorIEdMSUJDWFhfQ0hFQ0tfU0NfTlBST0NfT05MTgorIEdMSUJDWFhfQ0hFQ0tfUFRIUkVBRFNfTlVNX1BST0NFU1NPUlNfTlAKKyBHTElCQ1hYX0NIRUNLX1NZU0NUTF9IV19OQ1BVCistR0xJQkNYWF9DSEVDS19TRFRfSAorKyNHTElCQ1hYX0NIRUNLX1NEVF9ICisgCisgIyBDaGVjayBmb3IgYXZhaWxhYmxlIGhlYWRlcnMuCisgQUNfQ0hFQ0tfSEVBREVSUyhbZW5kaWFuLmggZXhlY2luZm8uaCBmbG9hdC5oIGZwLmggaWVlZWZwLmggaW50dHlwZXMuaCBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI1LWxpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNS1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTc3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNS1saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gMWNhNTQ5NjdkOGY2N2FiMGVjYTc3MjMzNGU1YzkyNWE1ZThjODBjYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjI5OjExICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjUvMzVdIGxpYnRvb2wKKworbGlic3RkYysrIGZyb20gZ2NjLXJ1bnRpbWUgZ2V0cyBjcmVhdGVkIHdpdGggLXJwYXRoPS91c3IvbGliLy4uL2xpYiBmb3IgcWVtdXg4Ni02NAord2hlbiBydW5uaW5nIG9uIGFtIHg4Nl82NCBidWlsZCBob3N0LgorCitUaGlzIHBhdGNoIHN0b3BzIHRoaXMgc3BlYWRpbmcgdG8gbGliZGlyIGluIHRoZSBsaWJzdGRjKysubGEgZmlsZSB3aXRoaW4gbGlidG9vbC4KK0FyZ3VhYmx5LCBpdCBzaG91bGRuJ3QgYmUgcGFzc2luZyB0aGlzIGludG8gbGlidG9vbCBpbiB0aGUgZmlyc3QgcGxhY2UgYnV0Citmb3Igbm93IHRoaXMgcmVzb2x2ZXMgdGhlIG5hc3RpZXN0IHByb2JsZW1zIHRoaXMgY2F1c2VzLgorCitmdW5jX25vcm1hbF9hYnNwYXRoIHdvdWxkIHJlc29sdmUgYW4gZW1wdHkgcGF0aCB0byBgcHdkYCBzbyB3ZSBuZWVkCit0byBmaWx0ZXIgdGhlIHplcm8gY2FzZS4KKworUlAgMjAxMi84LzI0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbHRtYWluLnNoIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA5NTAzZWM4Li4wMTIxZmJhIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MzU5LDYgKzYzNTksMTAgQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJZnVuY193YXJuaW5nICJpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIKKyAKKyAgICAgICBpbnN0YWxsX2xpYmRpcj0iJDEiCisrICAgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgorKwlmdW5jX25vcm1hbF9hYnNwYXRoICIkaW5zdGFsbF9saWJkaXIiCisrCWluc3RhbGxfbGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorKyAgICAgIGZpCisgCisgICAgICAgb2xkbGlicz0KKyAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI2LWdjYy1hcm12NC1wYXNzLWZpeC12NGJ4LXRvLWxpbmtlci10by1zdXBwb3J0LUVBQkkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTY1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyNi1nY2MtYXJtdjQtcGFzcy1maXgtdjRieC10by1saW5rZXItdG8tc3VwcG9ydC1FQUJJLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gNWY1Y2E1N2ZjZWM0YmFmZTM3ODAzNzFkMTM0MmFjZDQwYzYwODY5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMwOjMyICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjYvMzVdIGdjYzogYXJtdjQ6IHBhc3MgZml4LXY0YnggdG8gbGlua2VyIHRvIHN1cHBvcnQgRUFCSS4KKworVGhlIExJTktfU1BFQyBmb3IgbGludXggZ2V0cyBvdmVyd3JpdHRlbiBieSBsaW51eC1lYWJpLmggd2hpY2gKK21lYW5zIHRoZSB2YWx1ZSBvZiBUQVJHRVRfRklYX1Y0QlhfU1BFQyBnZXRzIGxvc3QgYW5kIGFzIGEgcmVzdWx0Cit0aGUgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdG8gbGlua2VyIHdoZW4gY2hvc2luZyBtYXJjaD1hcm12NAorVGhpcyBwYXRjaCByZWRlZmluZXMgdGhpcyBpbiBsaW51eC1lYWJpLmggYW5kIHJlaW5zZXJ0cyBpdAorZm9yIGVhYmkgZGVmYXVsdGluZyB0b29sY2hhaW5zLgorCitXZSBtaWdodCB3YW50IHRvIHNlbmQgaXQgdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2NjL2NvbmZpZy9hcm0vbGludXgtZWFiaS5oIHwgNiArKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmggYi9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKK2luZGV4IGNmZGYzZjAuLjA0OGEwNjIgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FybS9saW51eC1lYWJpLmgKKysrKyBiL2djYy9jb25maWcvYXJtL2xpbnV4LWVhYmkuaAorQEAgLTc3LDEwICs3NywxNCBAQAorICAgICAle21mbG9hdC1hYmk9c29mdCo6IiBHTElCQ19EWU5BTUlDX0xJTktFUl9TT0ZUX0ZMT0FUICJ9IFwKKyAgICAgJXshbWZsb2F0LWFiaT0qOiIgR0xJQkNfRFlOQU1JQ19MSU5LRVJfREVGQVVMVCAifSIKKyAKKysvKiBGb3IgYXJtdjQgd2UgcGFzcyAtLWZpeC12NGJ4IHRvIGxpbmtlciB0byBzdXBwb3J0IEVBQkkgKi8KKysjdW5kZWYgVEFSR0VUX0ZJWF9WNEJYX1NQRUMKKysjZGVmaW5lIFRBUkdFVF9GSVhfVjRCWF9TUEVDICIle21jcHU9YXJtOHxtY3B1PWFybTgxMHxtY3B1PXN0cm9uZ2FybSp8bWFyY2g9YXJtdjQ6IC0tZml4LXY0Ynh9IgorKworIC8qIEF0IHRoaXMgcG9pbnQsIGJwYWJpLmggd2lsbCBoYXZlIGNsb2JiZXJlZCBMSU5LX1NQRUMuICBXZSB3YW50IHRvCisgICAgdXNlIHRoZSBHTlUvTGludXggdmVyc2lvbiwgbm90IHRoZSBnZW5lcmljIEJQQUJJIHZlcnNpb24uICAqLworICN1bmRlZiAgTElOS19TUEVDCistI2RlZmluZSBMSU5LX1NQRUMgRUFCSV9MSU5LX1NQRUMJCQkJCVwKKysjZGVmaW5lIExJTktfU1BFQyBUQVJHRVRfRklYX1Y0QlhfU1BFQyBFQUJJX0xJTktfU1BFQwkJCVwKKyAgIExJTlVYX09SX0FORFJPSURfTEQgKExJTlVYX1RBUkdFVF9MSU5LX1NQRUMsCQkJCVwKKyAJCSAgICAgICBMSU5VWF9UQVJHRVRfTElOS19TUEVDICIgIiBBTkRST0lEX0xJTktfU1BFQykKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjctVXNlLXRoZS1tdWx0aWxpYi1jb25maWctZmlsZXMtZnJvbS1CLWluc3RlYWQtb2YtdXNpbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1ZGEzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI3LVVzZS10aGUtbXVsdGlsaWItY29uZmlnLWZpbGVzLWZyb20tQi1pbnN0ZWFkLW9mLXVzaW4ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gNDg0ZThjMWU4ZDQzZTYyNmVlMmRkYmRlOWViOGUwYWY3YTE3NmFlZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDI5IE1hciAyMDEzIDA5OjMzOjA0ICswNDAwCitTdWJqZWN0OiBbUEFUQ0ggMjcvMzVdIFVzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mCisgdXNpbmcgdGhlIG9uZXMgZnJvbSAke1N9CisKK1VzZSB0aGUgbXVsdGlsaWIgY29uZmlnIGZpbGVzIGZyb20gJHtCfSBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmVzIGZyb20gJHtTfQorc28gdGhhdCB0aGUgc291cmNlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBnY2MtY3Jvc3MtaW5pdGlhbCwKK2djYy1jcm9zcy1pbnRlcm1lZGlhdGUsIGdjYy1jcm9zcywgZ2NjLXJ1bnRpbWUsIGFuZCBhbHNvIHRoZSBzZGsgYnVpbGQuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIGdjYy9jb25maWd1cmUgICAgfCAyMiArKysrKysrKysrKysrKysrKystLS0tCisgZ2NjL2NvbmZpZ3VyZS5hYyB8IDIyICsrKysrKysrKysrKysrKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY2MvY29uZmlndXJlIGIvZ2NjL2NvbmZpZ3VyZQoraW5kZXggOTg4NTNiMy4uZDBlYzUwZiAxMDA3NTUKKy0tLSBhL2djYy9jb25maWd1cmUKKysrKyBiL2djYy9jb25maWd1cmUKK0BAIC0xMTgyMSwxMCArMTE4MjEsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xMTgzNSw2ICsxMTg0NSwxMCBAQCB0bV9maWxlX2xpc3Q9Im9wdGlvbnMuaCIKKyB0bV9pbmNsdWRlX2xpc3Q9Im9wdGlvbnMuaCBpbnNuLWNvbnN0YW50cy5oIgorIGZvciBmIGluICR0bV9maWxlOyBkbworICAgY2FzZSAkZiBpbgorKyAgICAqL2xpbnV4NjQuaCApCisrICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9IC4vY29uZmlnLyRmIgorKyAgICAgICB0bV9pbmNsdWRlX2xpc3Q9IiR7dG1faW5jbHVkZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgOzsKKyAgICAgLi8qICkKKyAgICAgICAgZj1gZWNobyAkZiB8IHNlZCAncy9eLi4vLydgCisgICAgICAgIHRtX2ZpbGVfbGlzdD0iJHt0bV9maWxlX2xpc3R9ICRmIgorZGlmZiAtLWdpdCBhL2djYy9jb25maWd1cmUuYWMgYi9nY2MvY29uZmlndXJlLmFjCitpbmRleCA1MmNkY2I4Li4zY2Y2MDZhIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZ3VyZS5hYworKysrIGIvZ2NjL2NvbmZpZ3VyZS5hYworQEAgLTE4MTIsMTAgKzE4MTIsMjAgQEAgZG9uZQorIHRtYWtlX2ZpbGVfPQorIGZvciBmIGluICR7dG1ha2VfZmlsZX0KKyBkbworLQlpZiB0ZXN0IC1mICR7c3JjZGlyfS9jb25maWcvJGYKKy0JdGhlbgorLQkJdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorLQlmaQorKyAgY2FzZSAkZiBpbgorKyAgICAqL3QtbGludXg2NCApCisrICAgICAgIGlmIHRlc3QgLWYgLi9jb25maWcvJGYKKysgICAgICAgdGhlbgorKyAgICAgICAgIHRtYWtlX2ZpbGVfPSIke3RtYWtlX2ZpbGVffSAuL2NvbmZpZy8kZiIKKysgICAgICAgZmkKKysgICAgICAgOzsKKysgICAgKiApCisrICAgICAgIGlmIHRlc3QgLWYgJHtzcmNkaXJ9L2NvbmZpZy8kZgorKyAgICAgICB0aGVuCisrICAgICAgICAgdG1ha2VfZmlsZV89IiR7dG1ha2VfZmlsZV99IFwkKHNyY2RpcikvY29uZmlnLyRmIgorKyAgICAgICBmaQorKyAgICAgICA7OworKyAgZXNhYworIGRvbmUKKyB0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGVffSIKKyAKK0BAIC0xODI2LDYgKzE4MzYsMTAgQEAgdG1fZmlsZV9saXN0PSJvcHRpb25zLmgiCisgdG1faW5jbHVkZV9saXN0PSJvcHRpb25zLmggaW5zbi1jb25zdGFudHMuaCIKKyBmb3IgZiBpbiAkdG1fZmlsZTsgZG8KKyAgIGNhc2UgJGYgaW4KKysgICAgKi9saW51eDY0LmggKQorKyAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAuL2NvbmZpZy8kZiIKKysgICAgICAgdG1faW5jbHVkZV9saXN0PSIke3RtX2luY2x1ZGVfbGlzdH0gLi9jb25maWcvJGYiCisrICAgICAgIDs7CisgICAgIC4vKiApCisgICAgICAgIGY9YGVjaG8gJGYgfCBzZWQgJ3MvXi4uLy8nYAorICAgICAgICB0bV9maWxlX2xpc3Q9IiR7dG1fZmlsZV9saXN0fSAkZiIKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjgtQXZvaWQtdXNpbmctbGliZGlyLWZyb20tLmxhLXdoaWNoLXVzdWFsbHktcG9pbnRzLXRvLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkwMmU5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDI4LUF2b2lkLXVzaW5nLWxpYmRpci1mcm9tLS5sYS13aGljaC11c3VhbGx5LXBvaW50cy10by0ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAxMTJjYTlmODYwMTE0YmM3OTI3M2E3OWVkNDI3MjJmZGM5ZGVkNmVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMDk6Mzk6MzggKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyOC8zNV0gQXZvaWQgdXNpbmcgbGliZGlyIGZyb20gLmxhIHdoaWNoIHVzdWFsbHkgcG9pbnRzIHRvIGEKKyBob3N0IHBhdGgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCAwMTIxZmJhLi41MmJkYmRiIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC01NjI4LDYgKzU2MjgsOSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorIAkgIGVsc2UKKysJICAgICMgSW5zdGVhZCBvZiB1c2luZyBsaWJkaXIgZnJvbSAubGEgd2hpY2ggdXN1YWxseSBwb2ludHMgdG8gYSBob3N0IHBhdGgsCisrCSAgICAjIHVzZSB0aGUgcGF0aCB0aGUgLmxhIGlzIGNvbnRhaW5lZCBpbi4KKysJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKyAJICAgIGRpcj0iJGxpYmRpciIKKyAJICAgIGFic2Rpcj0iJGxpYmRpciIKKyAJICBmaQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAyOS1leHBvcnQtQ1BQLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjktZXhwb3J0LUNQUC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTA1YWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMjktZXhwb3J0LUNQUC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIGE5ODMwMzNmMTMyN2E2OTJhZjU1YmU4ZDFhYTYxYWVkZTE4YzRhZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAwOTo0MDo1OSArMDAwMAorU3ViamVjdDogW1BBVENIIDI5LzM1XSBleHBvcnQgQ1BQCisKK1RoZSBPRSBlbnZpcm9ubWVudCBzZXRzIGFuZCBleHBvcnRzIENQUCBhcyBiZWluZyB0aGUgdGFyZ2V0IGdjYy4gV2hlbgorYnVpbGRpbmcgZ2NjLWNyb3NzLWNhbmFkaWFuIGZvciBhIG1pbmd3IHRhcmdldHRlZCBzZGssIHRoZSBmb2xsb3dpbmcgY2FuIGJlIGZvdW5kCitpbiBidWlsZC54ODZfNjQtcG9reXNkay1taW5ndzMyLmk1ODYtcG9reS1saW51eC9idWlsZC14ODZfNjQtbGludXgvbGliaWJlcnR5L2NvbmZpZy5sb2c6CisKK2NvbmZpZ3VyZTozNjQxOiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcworY29uZmlndXJlOjM2NjY6IGdjYyAgLWMgLWlzeXN0ZW0vbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgIGNvbmZ0ZXN0LmMgPiY1Citjb25maWd1cmU6MzY2NjogJD8gPSAwCitjb25maWd1cmU6MzY5ODogcmVzdWx0OiBubworY29uZmlndXJlOjM3ODY6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCitjb25maWd1cmU6Mzg1NjogcmVzdWx0OiB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYyAtRSAtLXN5c3Jvb3Q9L21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbmF0aXZlc2RrLW1pbmd3MzItcG9reXNkay1taW5ndzMyCitjb25maWd1cmU6Mzg3NjogeDg2XzY0LXBva3lzZGstbWluZ3czMi1nY2MgLUUgLS1zeXNyb290PS9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LW5hdGl2ZXNkay1taW5ndzMyLXBva3lzZGstbWluZ3czMiBjb25mdGVzdC5jCitjb25maWd1cmU6Mzg3NjogJD8gPSAwCisKK05vdGUgdGhpcyBpcyBhICpidWlsZCogdGFyZ2V0IChpbiBidWlsZC14ODZfNjQtbGludXgpIHNvIGl0IHNob3VsZCBiZQordXNpbmcgdGhlIGhvc3QgImdjYyIsIG5vdCB4ODZfNjQtcG9reXNkay1taW5ndzMyLWdjYy4gU2luY2UgdGhlIG1pbmd3MzIKK2hlYWRlcnMgYXJlIHZlcnkgZGlmZmVyZW50LCB1c2luZyB0aGUgd3JvbmcgY3BwIGlzIGEgcmVhbCBwcm9ibGVtLiBJdCBpcyBsZWFraW5nCitpbnRvIGNvbmZpZ3VyZSB0aHJvdWdoIHRoZSBDUFAgdmFyaWFibGUuIFVsdGltYXRlbHkgdGhpcyBsZWFkcyB0byBidWlsZAorZmFpbHVyZXMgcmVsYXRlZCB0byBub3QgYmVpbmcgYWJsZSB0byBpbmNsdWRlIGEgcHJvY2Vzcy5oIGZpbGUgZm9yIHBlbS11bml4LmMuCisKK1RoZSBmaXggaXMgdG8gZW5zdXJlIHdlIGV4cG9ydCBhIHNhbmUgQ1BQIHZhbHVlIGludG8gdGhlIGJ1aWxkCitlbnZpcm9ubWVudCB3aGVuIHVzaW5nIGJ1aWxkIHRhcmdldHMuIFdlIGNvdWxkIGRlZmluZSBhIENQUF9GT1JfQlVJTEQgdmFsdWUgd2hpY2ggbWF5IGJlCit0aGUgdmVyc2lvbiB3aGljaCBuZWVkcyB0byBiZSB1cHN0cmVhbWVkIGJ1dCBmb3Igbm93LCB0aGlzIGZpeCBpcyBnb29kIGVub3VnaCB0bworYXZvaWQgdGhlIHByb2JsZW0uCisKK1JQIDIyLzA4LzIwMTMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggMzZiNDAwOC4uYTc4M2UxZSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTE0OSw2ICsxNDksNyBAQCBCVUlMRF9FWFBPUlRTID0gXAorIAlBUj0iJChBUl9GT1JfQlVJTEQpIjsgZXhwb3J0IEFSOyBcCisgCUFTPSIkKEFTX0ZPUl9CVUlMRCkiOyBleHBvcnQgQVM7IFwKKyAJQ0M9IiQoQ0NfRk9SX0JVSUxEKSI7IGV4cG9ydCBDQzsgXAorKwlDUFA9IiQoQ0NfRk9SX0JVSUxEKSAtRSI7IGV4cG9ydCBDUFA7IFwKKyAJQ0ZMQUdTPSIkKENGTEFHU19GT1JfQlVJTEQpIjsgZXhwb3J0IENGTEFHUzsgXAorIAlDT05GSUdfU0hFTEw9IiQoU0hFTEwpIjsgZXhwb3J0IENPTkZJR19TSEVMTDsgXAorIAlDWFg9IiQoQ1hYX0ZPUl9CVUlMRCkiOyBleHBvcnQgQ1hYOyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMwLUVuYWJsZS1TUEUtQWx0aVZlYy1nZW5lcmF0aW9uLW9uLXBvd2VwYy1saW51eC10YXJnZXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3M2RjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMC1FbmFibGUtU1BFLUFsdGlWZWMtZ2VuZXJhdGlvbi1vbi1wb3dlcGMtbGludXgtdGFyZ2V0LnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gM2Q4NzBhMTg0YzA1ZGYxMzM4ZGIxODcwMzAxYzQxNDRiYTk5ZmMzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFsZXhhbmRydS1DZXphciBTYXJkYW4gPGFsZXhhbmRydS5zYXJkYW5AZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgNSBGZWIgMjAxNCAxNjo1MjozMSArMDIwMAorU3ViamVjdDogW1BBVENIIDMwLzM1XSBFbmFibGUgU1BFICYgQWx0aVZlYyBnZW5lcmF0aW9uIG9uIHBvd2VwYypsaW51eCB0YXJnZXQKKworV2hlbiBpcyBjb25maWd1cmVkIHdpdGggLS10YXJnZXQ9cG93ZXJwYy1saW51eCwgdGhlIHJlc3VsdGluZyBHQ0Mgd2lsbAorbm90IGJlIGFibGUgdG8gZ2VuZXJhdGUgY29kZSBmb3IgU1BFIHRhcmdldHMgKGU1MDB2MS92MikuCitHQ0MgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXhzcGUgd2lsbCBub3QgYmUgYWJsZSB0bworZ2VuZXJhdGUgQWx0aVZlYyBpbnN0cnVjdGlvbnMgKGZvciBlNjUwMCkuCitUaGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25maWd1cmVkIGZpbGUgc3VjaCB0aGF0IFNQRSBvciBBbHRpVmVjIGNvZGUKK2NhbiBiZSBnZW5lcmF0ZWQgd2hlbiBnY2MgaXMgY29uZmlndXJlZCB3aXRoIC0tdGFyZ2V0PXBvd2VycGMtbGludXguCitUaGUgQUJJIGFuZCBzcGVjaWZmaWMgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBzZWxlY3RlZCB0aHJvdWdoIHRoZQorIi1tYWJpPXNwZSBvciAtbWFiaT1hbHRpdmVjIiBhbmQgdGhlICItbXNwZSBvciAtbWFsdGl2ZWMiIHBhcmFtZXRlcnMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogQWxleGFuZHJ1LUNlemFyIFNhcmRhbiA8YWxleGFuZHJ1LnNhcmRhbkBmcmVlc2NhbGUuY29tPgorLS0tCisgZ2NjL2NvbmZpZy5nY2MgfCA5ICsrKysrKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcuZ2NjIGIvZ2NjL2NvbmZpZy5nY2MKK2luZGV4IGIxNTU3NDQuLjA1NDFiOGEgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnLmdjYworKysrIGIvZ2NjL2NvbmZpZy5nY2MKK0BAIC0yMzM3LDcgKzIzMzcsMTQgQEAgcG93ZXJwYy0qLXJ0ZW1zKikKKyAJdG1ha2VfZmlsZT0iJHt0bWFrZV9maWxlfSByczYwMDAvdC1mcHJ1bGVzIHJzNjAwMC90LXJ0ZW1zIHJzNjAwMC90LXBwY2NvbW0iCisgCTs7CisgcG93ZXJwYyotKi1saW51eCopCistCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwljYXNlICR7dGFyZ2V0fSBpbgorKwkgICAgcG93ZXJwYyotKi1saW51eCpzcGUqIHwgcG93ZXJwYyotKi1saW51eCphbHRpdmVjKikKKysJCXRtX2ZpbGU9IiR7dG1fZmlsZX0gZGJ4ZWxmLmggZWxmb3MuaCBnbnUtdXNlci5oIGZyZWVic2Qtc3BlYy5oIHJzNjAwMC9zeXN2NC5oIgorKwkJOzsKKysJICAgICopCisrCQl0bV9maWxlPSIke3RtX2ZpbGV9IGRieGVsZi5oIGVsZm9zLmggZ251LXVzZXIuaCBmcmVlYnNkLXNwZWMuaCByczYwMDAvc3lzdjQuaCByczYwMDAvbGludXhhbHRpdmVjLmggcnM2MDAwL2xpbnV4c3BlLmggcnM2MDAwL2U1MDAuaCIKKysJCTs7CisrCWVzYWMKKyAJZXh0cmFfb3B0aW9ucz0iJHtleHRyYV9vcHRpb25zfSByczYwMDAvc3lzdjQub3B0IgorIAl0bWFrZV9maWxlPSIke3RtYWtlX2ZpbGV9IHJzNjAwMC90LWZwcnVsZXMgcnM2MDAwL3QtcHBjY29tbSIKKyAJZXh0cmFfb2Jqcz0iJGV4dHJhX29ianMgcnM2MDAwLWxpbnV4Lm8iCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMxLURpc2FibGUtdGhlLU1VTFRJTElCX09TRElSTkFNRVMtYW5kLW90aGVyLW11bHRpbGliLW8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNmNiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMS1EaXNhYmxlLXRoZS1NVUxUSUxJQl9PU0RJUk5BTUVTLWFuZC1vdGhlci1tdWx0aWxpYi1vLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK0Zyb20gYTgyNGNkM2Y0NTg3NWY2YzFjNDdjY2RiZjMzNTM0OTQ3YmQyYjU4NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBGcmksIDIwIEZlYiAyMDE1IDEwOjIxOjU1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzEvMzVdIERpc2FibGUgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgYW5kIG90aGVyIG11bHRpbGliCisgb3B0aW9ucy4KKworSGFyZCBjb2RpbmcgdGhlIE1VTFRJTElCX09TRElSTkFNRVMgd2l0aCAuLi9saWI2NCBpcyBjYXVzaW5nIHByb2JsZW1zIG9uCitzeXN0ZW1zIHdoZXJlIHRoZSBsaWJkaXIgaXMgTk9UIHNldCB0byAvbGliNjQuICBUaGlzIGlzIGFsbG93ZWQgYnkgdGhlCitBQkksIGFzCitsb25nIGFzIHRoZSBkeW5hbWljIGxvYWRlciBpcyBwcmVzZW50IGluIC9saWIuCisKK1dlIHNpbXBseSB3YW50IHRvIHVzZSB0aGUgZGVmYXVsdCBydWxlcyBpbiBnY2MgdG8gZmluZCBhbmQgY29uZmlndXJlIHRoZQorbm9ybWFsIGxpYmRpci4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW09FLVNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eCB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L3QtYWFyY2g2NC1saW51eCBiL2djYy9jb25maWcvYWFyY2g2NC90LWFhcmNoNjQtbGludXgKK2luZGV4IGMyOTYzNzYuLjNiYjU5YmYgMTAwNjQ0CistLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CisrKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvdC1hYXJjaDY0LWxpbnV4CitAQCAtMjEsOCArMjEsOCBAQAorIExJQjFBU01TUkMgICA9IGFhcmNoNjQvbGliMWZ1bmNzLmFzbQorIExJQjFBU01GVU5DUyA9IF9hYXJjaDY0X3N5bmNfY2FjaGVfcmFuZ2UKKyAKKy1BQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorLU1VTFRJTElCX09TRElSTkFNRVMgPSBtYWJpLmxwNjQ9Li4vbGliNjQkKGNhbGwgaWZfbXVsdGlhcmNoLDphYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorLU1VTFRJQVJDSF9ESVJOQU1FID0gJChjYWxsIGlmX211bHRpYXJjaCxhYXJjaDY0JChBQVJDSF9CRSktbGludXgtZ251KQorKyNBQVJDSF9CRSA9ICQoaWYgJChmaW5kc3RyaW5nIFRBUkdFVF9CSUdfRU5ESUFOX0RFRkFVTFQ9MSwgJCh0bV9kZWZpbmVzKSksX2JlKQorKyNNVUxUSUxJQl9PU0RJUk5BTUVTID0gbWFiaS5scDY0PS4uL2xpYjY0JChjYWxsIGlmX211bHRpYXJjaCw6YWFyY2g2NCQoQUFSQ0hfQkUpLWxpbnV4LWdudSkKKysjTVVMVElBUkNIX0RJUk5BTUUgPSAkKGNhbGwgaWZfbXVsdGlhcmNoLGFhcmNoNjQkKEFBUkNIX0JFKS1saW51eC1nbnUpCisgCistTVVMVElMSUJfT1NESVJOQU1FUyArPSBtYWJpLmlscDMyPS4uL2xpYmlscDMyCisrI01VTFRJTElCX09TRElSTkFNRVMgKz0gbWFiaS5pbHAzMj0uLi9saWJpbHAzMgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMyLUVuc3VyZS10YXJnZXQtZ2NjLWhlYWRlcnMtY2FuLWJlLWluY2x1ZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzMi1FbnN1cmUtdGFyZ2V0LWdjYy1oZWFkZXJzLWNhbi1iZS1pbmNsdWRlZC5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIGU2MDA5MGY3YzUzN2M4NGZkMWIyMjMwN2VkZDlmMzg2MjI4YzczMzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMCBGZWIgMjAxNSAxMDoyNToxMSArMDAwMAorU3ViamVjdDogW1BBVENIIDMyLzM1XSBFbnN1cmUgdGFyZ2V0IGdjYyBoZWFkZXJzIGNhbiBiZSBpbmNsdWRlZAorCitUaGVyZSBhcmUgYSBmZXcgaGVhZGVycyBpbnN0YWxsZWQgYXMgcGFydCBvZiB0aGUgT3BlbkVtYmVkZGVkCitnY2MtcnVudGltZSB0YXJnZXQgKG9tcC5oLCBzc3AvKi5oKS4gQmVpbmcgaW5zdGFsbGVkIGZyb20gYSByZWNpcGUKK2J1aWx0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgdGhlc2UgYXJlIHdpdGhpbiB0aGUgdGFyZ2V0CitzeXNyb290IGFuZCBub3QgY3Jvc3MvbmF0aXZlc2RrOyB0aHVzIHRoZXkgd2VyZW4ndCBhYmxlIHRvIGJlCitmb3VuZCBieSBnY2Mgd2l0aCB0aGUgZXhpc3Rpbmcgc2VhcmNoIHBhdGhzLiBBZGQgc3VwcG9ydCBmb3IKK3BpY2tpbmcgdXAgdGhlc2UgaGVhZGVycyB1bmRlciB0aGUgc3lzcm9vdCBzdXBwbGllZCBvbiB0aGUgZ2NjCitjb21tYW5kIGxpbmUgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL01ha2VmaWxlLmluICB8IDIgKysKKyBnY2MvY3BwZGVmYXVsdC5jIHwgNCArKysrCisgZ2NjL2RlZmF1bHRzLmggICB8IDkgKysrKysrKysrCisgZ2NjL2djYy5jICAgICAgICB8IDcgLS0tLS0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2djYy9NYWtlZmlsZS5pbiBiL2djYy9NYWtlZmlsZS5pbgoraW5kZXggOTQ3MGE5Mi4uMTQ5N2VkZSAxMDA2NDQKKy0tLSBhL2djYy9NYWtlZmlsZS5pbgorKysrIGIvZ2NjL01ha2VmaWxlLmluCitAQCAtNTgyLDYgKzU4Miw3IEBAIGxpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tcGlsZXIgZmluZHMgbGlicmFyaWVzIGV0Yy4KKyBsaWJzdWJkaXIgPSAkKGxpYmRpcikvZ2NjLyQocmVhbF90YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pJChhY2NlbF9kaXJfc3VmZml4KQorK2xpYnN1YmRpcl90YXJnZXQgPSBnY2MvJCh0YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pCisgIyBEaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbXBpbGVyIGZpbmRzIGV4ZWN1dGFibGVzCisgbGliZXhlY3N1YmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQocmVhbF90YXJnZXRfbm9uY2Fub25pY2FsKS8kKHZlcnNpb24pJChhY2NlbF9kaXJfc3VmZml4KQorICMgRGlyZWN0b3J5IGluIHdoaWNoIGFsbCBwbHVnaW4gcmVzb3VyY2VzIGFyZSBpbnN0YWxsZWQKK0BAIC0yNjAzLDYgKzI2MDQsNyBAQCBDRkxBR1MtaW50bC5vICs9IC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIKKyAKKyBQUkVQUk9DRVNTT1JfREVGSU5FUyA9IFwKKyAgIC1ER0NDX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGVcIiBcCisrICAtREdDQ19JTkNMVURFX1NVQkRJUl9UQVJHRVQ9XCIkKGxpYnN1YmRpcl90YXJnZXQpL2luY2x1ZGVcIiBcCisgICAtREZJWEVEX0lOQ0xVREVfRElSPVwiJChsaWJzdWJkaXIpL2luY2x1ZGUtZml4ZWRcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUj1cIiQoZ2NjX2d4eF9pbmNsdWRlX2RpcilcIiBcCisgICAtREdQTFVTUExVU19JTkNMVURFX0RJUl9BRERfU1lTUk9PVD0kKGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3QpIFwKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5jIGIvZ2NjL2NwcGRlZmF1bHQuYworaW5kZXggNTgwYzFiYS4uMDNhMDI4NyAxMDA2NDQKKy0tLSBhL2djYy9jcHBkZWZhdWx0LmMKKysrKyBiL2djYy9jcHBkZWZhdWx0LmMKK0BAIC01OSw2ICs1OSwxMCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBnY2MncyBwcml2YXRlIGhlYWRlcnMuICAqLworICAgICB7IEdDQ19JTkNMVURFX0RJUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKysjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorKyAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyNlbmRpZgorICNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorICAgICAvKiAvdXNyL2xvY2FsL2luY2x1ZGUgY29tZXMgYmVmb3JlIHRoZSBmaXhpbmNsdWRlZCBoZWFkZXIgZmlsZXMuICAqLworICAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAyIH0sCitkaWZmIC0tZ2l0IGEvZ2NjL2RlZmF1bHRzLmggYi9nY2MvZGVmYXVsdHMuaAoraW5kZXggMWQ1NDc5OC4uOTgzZDQ1ZSAxMDA2NDQKKy0tLSBhL2djYy9kZWZhdWx0cy5oCisrKysgYi9nY2MvZGVmYXVsdHMuaAorQEAgLTEzNjEsNCArMTM2MSwxMyBAQCBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAKKyAjZW5kaWYgLyogR0NDX0lOU05fRkxBR1NfSCAgKi8KKyAKKysvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKysKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKysjZW5kaWYKKysjaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCisrI2VuZGlmCisrCisgI2VuZGlmICAvKiAhIEdDQ19ERUZBVUxUU19IICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCitpbmRleCBlNmVmYWU3Li4zY2EyN2I5IDEwMDY0NAorLS0tIGEvZ2NjL2djYy5jCisrKysgYi9nY2MvZ2NjLmMKK0BAIC0xMjYzLDEzICsxMjYzLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAKKyAvKiBEZWZhdWx0IHByZWZpeGVzIHRvIGF0dGFjaCB0byBjb21tYW5kIG5hbWVzLiAgKi8KKyAKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMQorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8xICIvbGliLyIKKy0jZW5kaWYKKy0jaWZuZGVmIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMgorLSNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIvdXNyL2xpYi8iCistI2VuZGlmCistCisgI2lmZGVmIENST1NTX0RJUkVDVE9SWV9TVFJVQ1RVUkUgIC8qIERvbid0IHVzZSB0aGVzZSBwcmVmaXhlcyBmb3IgYSBjcm9zcyBjb21waWxlci4gICovCisgI3VuZGVmIE1EX0VYRUNfUFJFRklYCisgI3VuZGVmIE1EX1NUQVJURklMRV9QUkVGSVgKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzMtZ2NjLTQuOC13b24tdC1idWlsZC13aXRoLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5ZTQxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDMzLWdjYy00Ljgtd29uLXQtYnVpbGQtd2l0aC1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSA5OTdmOWU5MzlmODVmNjUxYjIyYTQ4MjUxY2ZiMTQ0NDgzMWQ1NGNhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjAgRmViIDIwMTUgMTE6MTc6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzMy8zNV0gZ2NjIDQuOCsgd29uJ3QgYnVpbGQgd2l0aCAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZworCitzaW5jZSB0aGUgKi5QcG8gZmlsZXMgZG9uJ3QgZ2V0IGNyZWF0ZWQgdW5sZXNzIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgaXMgdHJ1ZS4KKworVGhpcyBwYXRjaCBlbnN1cmVzIHdlIG9ubHkgdXNlIHRob3NlIGNvbXBpbGVyIG9wdGlvbnMgd2hlbiBpdHMgZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworKFByb2JsZW0gd2FzIGFscmVhZHkgcmVwb3J0ZWQgdXBzdHJlYW0sIGF0dGFjaGVkIHRoaXMgcGF0Y2ggdGhlcmUKK2h0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTU5MzApCisKK1JQCisyMDEyLzA5LzIyCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJhdG9taWMvTWFrZWZpbGUuYW0gfCAzICsrLQorIGxpYmF0b21pYy9NYWtlZmlsZS5pbiB8IDMgKystCisgMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuYW0gYi9saWJhdG9taWMvTWFrZWZpbGUuYW0KK2luZGV4IDNkOGFiNjIuLjIzZGZmN2UgMTAwNjQ0CistLS0gYS9saWJhdG9taWMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYmF0b21pYy9NYWtlZmlsZS5hbQorQEAgLTEwMSw3ICsxMDEsOCBAQCBQQVRfUwkJPSAkKHdvcmQgMywkKFBBVF9TUExJVCkpCisgSUZVTkNfREVGCT0gLURJRlVOQ19BTFQ9JChQQVRfUykKKyBJRlVOQ19PUFQJPSAkKHdvcmQgJChQQVRfUyksJChJRlVOQ19PUFRJT05TKSkKKyAKKy1NX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfVFJVRUBNX0RFUFMJCT0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTCQk9CisgTV9TSVpFCQk9IC1ETj0kKFBBVF9OKQorIE1fSUZVTkMJCT0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRQkJPSAkKFBBVF9CQVNFKV9uLmMKK2RpZmYgLS1naXQgYS9saWJhdG9taWMvTWFrZWZpbGUuaW4gYi9saWJhdG9taWMvTWFrZWZpbGUuaW4KK2luZGV4IDkyODg2NTIuLjM3MjAyNTYgMTAwNjQ0CistLS0gYS9saWJhdG9taWMvTWFrZWZpbGUuaW4KKysrKyBiL2xpYmF0b21pYy9NYWtlZmlsZS5pbgorQEAgLTMzMCw3ICszMzAsOCBAQCBQQVRfTiA9ICQod29yZCAyLCQoUEFUX1NQTElUKSkKKyBQQVRfUyA9ICQod29yZCAzLCQoUEFUX1NQTElUKSkKKyBJRlVOQ19ERUYgPSAtRElGVU5DX0FMVD0kKFBBVF9TKQorIElGVU5DX09QVCA9ICQod29yZCAkKFBBVF9TKSwkKElGVU5DX09QVElPTlMpKQorLU1fREVQUyA9IC1NVCAkQCAtTUQgLU1QIC1NRiAkKERFUERJUikvJChARikuUHBvCisrQEFNREVQX1RSVUVATV9ERVBTID0gLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKEBGKS5QcG8KKytAQU1ERVBfRkFMU0VATV9ERVBTID0KKyBNX1NJWkUgPSAtRE49JChQQVRfTikKKyBNX0lGVU5DID0gJChpZiAkKFBBVF9TKSwkKElGVU5DX0RFRikgJChJRlVOQ19PUFQpKQorIE1fRklMRSA9ICQoUEFUX0JBU0UpX24uYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNC1Eb24tdC1zZWFyY2gtaG9zdC1kaXJlY3RvcnktZHVyaW5nLXJlbGluay1pZi1pbnN0X3ByLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDdjZDdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzQtRG9uLXQtc2VhcmNoLWhvc3QtZGlyZWN0b3J5LWR1cmluZy1yZWxpbmstaWYtaW5zdF9wci5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGM5NGRhMjU3YTIxOTg3M2I5NDZlMDgzMDYxNDFhZjc3NDk2NzlmNjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVHVlLCAzIE1hciAyMDE1IDA4OjIxOjE5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMzQvMzVdIERvbid0IHNlYXJjaCBob3N0IGRpcmVjdG9yeSBkdXJpbmcgInJlbGluayIgaWYKKyAkaW5zdF9wcmVmaXggaXMgcHJvdmlkZWQKKworaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2xpYnRvb2wtcGF0Y2hlcy8yMDExLTAxL21zZzAwMDI2Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGx0bWFpbi5zaCB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCitpbmRleCA1MmJkYmRiLi44MmJjZWMzIDEwMDY0NAorLS0tIGEvbHRtYWluLnNoCisrKysgYi9sdG1haW4uc2gKK0BAIC02MDA0LDEyICs2MDA0LDEzIEBAIGZ1bmNfbW9kZV9saW5rICgpCisgCSAgICAgIGZpCisgCSAgICBlbHNlCisgCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisrCSAgICAgICMgRGVmYXVsdCBpZiAkbGliZGlyIGlzIG5vdCByZWxhdGl2ZSB0byB0aGUgcHJlZml4OgorIAkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCistCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKysKKyAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKyAJCWNhc2UgJGxpYmRpciBpbgorIAkJICBbXFwvXSopCistCQkgICAgYWRkX2Rpcj0iJGFkZF9kaXIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKysJCSAgICBhZGRfZGlyPSItTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorIAkJICAgIDs7CisgCQllc2FjCisgCSAgICAgIGZpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM1LURvbnQtbGluay10aGUtcGx1Z2lucy13aXRoLWxpYmdvbXAtZXhwbGljaXRseS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzVmMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzUtRG9udC1saW5rLXRoZS1wbHVnaW5zLXdpdGgtbGliZ29tcC1leHBsaWNpdGx5LnBhdGNoCkBAIC0wLDAgKzEsODMgQEAKK0Zyb20gM2EwOTU0NWYzZDE4Y2U0OTJlZjU1NjM5MjE1YTA3MjI4MmRlMDNkMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDggTWFyIDIwMTUgMDM6NDE6MzkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzNS8zNV0gRG9udCBsaW5rIHRoZSBwbHVnaW5zIHdpdGggbGliZ29tcCBleHBsaWNpdGx5CisKK1RoZXkgYXJlIGRsb3BlbmVkIGJ5IGxpYmdvbXAgYW55d2F5LiBUaGlzIGZpeGVzCit0aGUgbGlidG9vbCByZWxpbmsgaXNzdWUgd2hpY2ggY2F1c2VzIGlzc3VlcyBkdXJpbmcKK2Nyb3NzIGNvbXBpbGF0aW9uCisKK2xpYnRvb2w6IGluc3RhbGw6IC91c3IvYmluL2luc3RhbGwgLWMgLmxpYnMvbGliZ29tcC5sYWkKKy9ob21lL3VidW50dS93b3JrL2JsZWVkaW5nL2J1aWxkLXFlbXV4ODYtNjRtYy90bXAvd29yay9jb3JlMi02NC1yZGstbGludXgvZ2NjLXJ1bnRpbWUvNS4wLXIwL2ltYWdlL3Vzci9saWIvLi4vbGliL2xpYmdvbXAubGEKK2xpYnRvb2w6IGluc3RhbGw6IGVycm9yOiBjYW5ub3QgaW5zdGFsbCBgbGliZ29tcC1wbHVnaW4taG9zdF9ub25zaG0ubGEnCit0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluIC91c3IvbGliCitNYWtlZmlsZTo1MTc6IHJlY2lwZSBmb3IgdGFyZ2V0ICdpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMnIGZhaWxlZAorbWFrZVsyXTogKioqIFtpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVNdIEVycm9yIDEKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYmdvbXAvTWFrZWZpbGUuaW4gICAgICAgIHwgNyArKystLS0tCisgbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0gfCAzICstLQorIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ29tcC9NYWtlZmlsZS5pbiBiL2xpYmdvbXAvTWFrZWZpbGUuaW4KK2luZGV4IGI2MWIxMDguLjcxYjI2MjcgMTAwNjQ0CistLS0gYS9saWJnb21wL01ha2VmaWxlLmluCisrKysgYi9saWJnb21wL01ha2VmaWxlLmluCitAQCAtMTIzLDcgKzEyMyw3IEBAIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJCh0b29sZXhlY2xpYmRpcikiICIkKERFU1RESVIpJChpbmZvZGlyKSIgXAorIAkiJChERVNURElSKSQoZmluY2x1ZGVkaXIpIiAiJChERVNURElSKSQobGlic3ViaW5jbHVkZWRpcikiIFwKKyAJIiQoREVTVERJUikkKHRvb2xleGVjbGliZGlyKSIKKyBMVExJQlJBUklFUyA9ICQodG9vbGV4ZWNsaWJfTFRMSUJSQVJJRVMpCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfREVQRU5ERU5DSUVTID0gbGliZ29tcC5sYQorK2xpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQkFERCA9CisgYW1fbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfT0JKRUNUUyA9ICBcCisgCWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhLXBsdWdpbi1ob3N0LmxvCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfT0JKRUNUUyA9ICBcCitAQCAtMTMzLDcgKzEzMyw3IEBAIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDIFwKKyAJLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKyAJJChsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACisgYW1fX0RFUEVOREVOQ0lFU18xID0KKy1AUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfREVQRU5ERU5DSUVTID0gbGliZ29tcC5sYSBcCisrQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0RFUEVOREVOQ0lFUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkKKyBAUExVR0lOX05WUFRYX1RSVUVAYW1fbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfT0JKRUNUUyA9ICBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQAlsaWJnb21wX3BsdWdpbl9udnB0eF9sYS1wbHVnaW4tbnZwdHgubG8KK0BAIC00MDcsNyArNDA3LDcgQEAgbGliZ29tcF9sYV9TT1VSQ0VTID0gYWxsb2MuYyBiYXJyaWVyLmMgY3JpdGljYWwuYyBlbnYuYyBlcnJvci5jIGl0ZXIuYyBcCisgQFBMVUdJTl9OVlBUWF9UUlVFQGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xERkxBR1MgPSAgXAorIEBQTFVHSU5fTlZQVFhfVFJVRUAJJChsaWJnb21wX3BsdWdpbl9udnB0eF92ZXJzaW9uX2luZm8pIFwKKyBAUExVR0lOX05WUFRYX1RSVUVACSQobHRfaG9zdF9mbGFncykgJChQTFVHSU5fTlZQVFhfTERGTEFHUykKKy1AUExVR0lOX05WUFRYX1RSVUVAbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gbGliZ29tcC5sYSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorK0BQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJBREQgPSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorIEBQTFVHSU5fTlZQVFhfVFJVRUBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX3ZlcnNpb25faW5mbyA9IC12ZXJzaW9uLWluZm8gJChsaWJ0b29sX1ZFUlNJT04pCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfU09VUkNFUyA9IHBsdWdpbi9wbHVnaW4taG9zdC5jCitAQCAtNDE1LDcgKzQxNSw2IEBAIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgLURIT1NUX05PTlNITV9QTFVHSU4KKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MREZMQUdTID0gXAorIAkkKGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX3ZlcnNpb25faW5mbykgJChsdF9ob3N0X2ZsYWdzKQorIAorLWxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQkFERCA9IGxpYmdvbXAubGEKKyBsaWJnb21wX3BsdWdpbl9ob3N0X25vbnNobV9sYV9MSUJUT09MRkxBR1MgPSAtLXRhZz1kaXNhYmxlLXN0YXRpYworIG5vZGlzdF9ub2luc3RfSEVBREVSUyA9IGxpYmdvbXBfZi5oCisgbm9kaXN0X2xpYnN1YmluY2x1ZGVfSEVBREVSUyA9IG9tcC5oIG9wZW5hY2MuaAorZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL01ha2VmcmFnLmFtIGIvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0KK2luZGV4IDE2NzQ4NWYuLmQyYzU0MjggMTAwNjQ0CistLS0gYS9saWJnb21wL3BsdWdpbi9NYWtlZnJhZy5hbQorKysrIGIvbGliZ29tcC9wbHVnaW4vTWFrZWZyYWcuYW0KK0BAIC0zNSw3ICszNSw3IEBAIGxpYmdvbXBfcGx1Z2luX252cHR4X2xhX0NQUEZMQUdTID0gJChBTV9DUFBGTEFHUykgJChQTFVHSU5fTlZQVFhfQ1BQRkxBR1MpCisgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTERGTEFHUyA9ICQobGliZ29tcF9wbHVnaW5fbnZwdHhfdmVyc2lvbl9pbmZvKSBcCisgCSQobHRfaG9zdF9mbGFncykKKyBsaWJnb21wX3BsdWdpbl9udnB0eF9sYV9MREZMQUdTICs9ICQoUExVR0lOX05WUFRYX0xERkxBR1MpCistbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCQUREID0gbGliZ29tcC5sYSAkKFBMVUdJTl9OVlBUWF9MSUJTKQorK2xpYmdvbXBfcGx1Z2luX252cHR4X2xhX0xJQkFERCA9ICQoUExVR0lOX05WUFRYX0xJQlMpCisgbGliZ29tcF9wbHVnaW5fbnZwdHhfbGFfTElCVE9PTEZMQUdTID0gLS10YWc9ZGlzYWJsZS1zdGF0aWMKKyBlbmRpZgorIAorQEAgLTQ1LDUgKzQ1LDQgQEAgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfU09VUkNFUyA9IHBsdWdpbi9wbHVnaW4taG9zdC5jCisgbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKSAtREhPU1RfTk9OU0hNX1BMVUdJTgorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xERkxBR1MgPSBcCisgCSQobGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fdmVyc2lvbl9pbmZvKSAkKGx0X2hvc3RfZmxhZ3MpCistbGliZ29tcF9wbHVnaW5faG9zdF9ub25zaG1fbGFfTElCQUREID0gbGliZ29tcC5sYQorIGxpYmdvbXBfcGx1Z2luX2hvc3Rfbm9uc2htX2xhX0xJQlRPT0xGTEFHUyA9IC0tdGFnPWRpc2FibGUtc3RhdGljCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM2LVVzZS1TWVNURU1MSUJTX0RJUi1yZXBsYWNlbWVudC1pbnN0ZWFkLW9mLWhhcmRjb2RpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTE5NDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNi1Vc2UtU1lTVEVNTElCU19ESVItcmVwbGFjZW1lbnQtaW5zdGVhZC1vZi1oYXJkY29kaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gODYxYmNmZDRhZTgxNGYzNTFlMGM2NjhlZTI2ZDAxZDEzMzFlMDQyMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDI4IEFwciAyMDE1IDIzOjE1OjI3IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMzYvMzddIFVzZSBTWVNURU1MSUJTX0RJUiByZXBsYWNlbWVudCBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcKKyBiYXNlX2xpYmRpcgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWxpbnV4LmggYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1saW51eC5oCitpbmRleCA5YWJiMjUyLi43OTUyNWVlIDEwMDY0NAorLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtbGludXguaAorQEAgLTIxLDcgKzIxLDcgQEAKKyAjaWZuZGVmIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAjZGVmaW5lIEdDQ19BQVJDSDY0X0xJTlVYX0gKKyAKKy0jZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSICIvbGliL2xkLWxpbnV4LWFhcmNoNjQle21iaWctZW5kaWFuOl9iZX0le21hYmk9aWxwMzI6X2lscDMyfS5zby4xIgorKyNkZWZpbmUgR0xJQkNfRFlOQU1JQ19MSU5LRVIgIFNZU1RFTUxJQlNfRElSICJsZC1saW51eC1hYXJjaDY0JXttYmlnLWVuZGlhbjpfYmV9JXttYWJpPWlscDMyOl9pbHAzMn0uc28uMSIKKyAKKyAjdW5kZWYgIEFTQU5fQ0MxX1NQRUMKKyAjZGVmaW5lIEFTQU5fQ0MxX1NQRUMgIiV7JTpzYW5pdGl6ZShhZGRyZXNzKTotZnVud2luZC10YWJsZXN9IgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzNy1wcjY1Nzc5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzctcHI2NTc3OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDI0NjczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzctcHI2NTc3OS5wYXRjaApAQCAtMCwwICsxLDE3MyBAQAorTGlzdC1JZDogPGdjYy1wYXRjaGVzLmdjYy5nbnUub3JnPgorTGlzdC1BcmNoaXZlOiA8aHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLz4KK0xpc3QtUG9zdDogPG1haWx0bzpnY2MtcGF0Y2hlcyBhdCBnY2MgZG90IGdudSBkb3Qgb3JnPgorTGlzdC1IZWxwOiA8bWFpbHRvOmdjYy1wYXRjaGVzLWhlbHAgYXQgZ2NjIGRvdCBnbnUgZG90IG9yZz4KK0RhdGU6IE1vbiwgMjAgQXByIDIwMTUgMTI6NDA6NDkgKzA5MzAKK0Zyb206IEFsYW4gTW9kcmEgPGFtb2RyYSBhdCBnbWFpbCBkb3QgY29tPgorVG86IGdjYy1wYXRjaGVzIGF0IGdjYyBkb3QgZ251IGRvdCBvcmcKK1N1YmplY3Q6IFtQYXRjaF0gcHI2NTc3OSAtIFs1LzYgUmVncmVzc2lvbl0gdW5kZWZpbmVkIGxvY2FsIHN5bWJvbCBvbiBwb3dlcnBjCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyBib2d1cyBkZWJ1ZyBpbmZvIGxlZnQgYXJvdW5kIGJ5IHNocmluay13cmFwcGluZywKK3doaWNoIG9uIHNvbWUgcG93ZXJwYyB0YXJnZXRzIHdpdGgganVzdCB0aGUgcmlnaHQgcmVnaXN0ZXIgYWxsb2NhdGlvbgorbGVkIHRvIGFzc2VtYmx5IGVycm9ycy4KKworQm9vdHN0cmFwcGVkIGFuZCByZWdyZXNzaW9uIHRlc3RlZCBwb3dlcnBjNjQtbGludXggYW5kIHg4Nl82NC1saW51eC4KKworaHR0cHM6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NjU3NzkKKworZ2NjLworCVBSIGRlYnVnLzY1Nzc5CisJKiBzaHJpbmstd3JhcC5jIChpbnNuX3VzZXNfcmVnKTogTmV3IGZ1bmN0aW9uLgorCShtb3ZlX2luc25fZm9yX3Nocmlua193cmFwKTogUmVtb3ZlIGRlYnVnIGluc25zIHVzaW5nIHJlZ3Mgc2V0CisJYnkgdGhlIG1vdmVkIGluc24uCitnY2MvdGVzdHN1aXRlLworCSogZ2NjLmRnL3ByNjU3NzkuYzogTmV3LgorCQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIChmcm9tIG1haWxpbmcgbGlzdCwgbm90IG1lcmdlZCB5ZXQpCisKK0luZGV4OiBhL2djYy9zaHJpbmstd3JhcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9nY2Mvc2hyaW5rLXdyYXAuYy5vcmlnCisrKysgYi9nY2Mvc2hyaW5rLXdyYXAuYworQEAgLTE4Miw2ICsxODIsMjEgQEAgbGl2ZV9lZGdlX2Zvcl9yZWcgKGJhc2ljX2Jsb2NrIGJiLCBpbnQgcgorICAgcmV0dXJuIGxpdmVfZWRnZTsKKyB9CisgCisrc3RhdGljIGJvb2wKKytpbnNuX3VzZXNfcmVnIChydHhfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgZW5kX3JlZ25vKQorK3sKKysgIGRmX3JlZiB1c2U7CisrCisrICBGT1JfRUFDSF9JTlNOX1VTRSAodXNlLCBpbnNuKQorKyAgICB7CisrICAgICAgcnR4IHJlZyA9IERGX1JFRl9SRUcgKHVzZSk7CisrCisrICAgICAgaWYgKFJFR19QIChyZWcpICYmIFJFR05PIChyZWcpID49IHJlZ25vICYmIFJFR05PIChyZWcpIDwgZW5kX3JlZ25vKQorKwlyZXR1cm4gdHJ1ZTsKKysgICAgfQorKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyAvKiBUcnkgdG8gbW92ZSBJTlNOIGZyb20gQkIgdG8gYSBzdWNjZXNzb3IuICBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLgorICAgIFVTRVMgYW5kIERFRlMgYXJlIHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHRoYXQgYXJlIHVzZWQgYW5kIGRlZmluZWQKKyAgICBhZnRlciBJTlNOIGluIEJCLiAgU1BMSVRfUCBpbmRpY2F0ZXMgd2hldGhlciBhIGxpdmUgZWRnZSBmcm9tIEJCCitAQCAtMzQwLDEwICszNTUsMTUgQEAgbW92ZV9pbnNuX2Zvcl9zaHJpbmtfd3JhcCAoYmFzaWNfYmxvY2sgYgorICAgICAgICpzcGxpdF9wID0gdHJ1ZTsKKyAgICAgfQorIAorKyAgdmVjPGJhc2ljX2Jsb2NrPiBsaXZlX2JiczsKKysgIGlmIChNQVlfSEFWRV9ERUJVR19JTlNOUykKKysgICAgbGl2ZV9iYnMuY3JlYXRlICg1KTsKKyAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgYXJlIGNvbW1pdHRlZCB0byBtb3ZpbmcgSU5TTiwgYnV0IGxldCdzIHRyeSB0bworICAgICAgbW92ZSBpdCBhcyBmYXIgYXMgd2UgY2FuLiAgKi8KKyAgIGRvCisgICAgIHsKKysgICAgICBpZiAoTUFZX0hBVkVfREVCVUdfSU5TTlMpCisrCWxpdmVfYmJzLnNhZmVfcHVzaCAoYmIpOworICAgICAgIGxpdmVfb3V0ID0gZGZfZ2V0X2xpdmVfb3V0IChiYik7CisgICAgICAgbGl2ZV9pbiA9IGRmX2dldF9saXZlX2luIChuZXh0X2Jsb2NrKTsKKyAgICAgICBiYiA9IG5leHRfYmxvY2s7CitAQCAtNDI2LDYgKzQ0NiwzNCBAQCBtb3ZlX2luc25fZm9yX3Nocmlua193cmFwIChiYXNpY19ibG9jayBiCisgCVNFVF9SRUdOT19SRUdfU0VUIChiYl91c2VzLCBpKTsKKyAgICAgfQorIAorKyAgLyogUmVtb3ZlIGRlYnVnIGluc25zIHVzaW5nIHJlZ3Mgc2V0IGJ5IHRoZSBpbnNuIHdlIGFyZSBtb3ZpbmcuICAqLworKyAgaWYgKE1BWV9IQVZFX0RFQlVHX0lOU05TKQorKyAgICB7CisrICAgICAgd2hpbGUgKCFsaXZlX2Jicy5pc19lbXB0eSAoKSkKKysJeworKwkgIHJ0eF9pbnNuICpkaW5zbjsKKysJICBiYXNpY19ibG9jayB0bXBfYmIgPSBsaXZlX2Jicy5wb3AgKCk7CisrCisrCSAgRk9SX0JCX0lOU05TX1JFVkVSU0UgKHRtcF9iYiwgZGluc24pCisrCSAgICB7CisrCSAgICAgIGlmIChkaW5zbiA9PSBpbnNuKQorKwkJYnJlYWs7CisrCSAgICAgIGlmIChERUJVR19JTlNOX1AgKGRpbnNuKQorKwkJICAmJiBpbnNuX3VzZXNfcmVnIChkaW5zbiwgZHJlZ25vLCBlbmRfZHJlZ25vKSkKKysJCXsKKysJCSAgaWYgKCpzcGxpdF9wKQorKwkJICAgIC8qIElmIHNwbGl0LCB0aGVuIHdlIHdpbGwgYmUgbW92aW5nIGluc24gaW50byBhCisrCQkgICAgICAgbmV3bHkgY3JlYXRlZCBibG9jayBpbW1lZGlhdGVseSBhZnRlciB0aGUgZW50cnkKKysJCSAgICAgICBibG9jay4gIE1vdmUgdGhlIGRlYnVnIGluZm8gdGhlcmUgdG9vLiAgKi8KKysJCSAgICBlbWl0X2RlYnVnX2luc25fYWZ0ZXIgKFBBVFRFUk4gKGRpbnNuKSwgYmJfbm90ZSAoYmIpKTsKKysJCSAgZGVsZXRlX2luc24gKGRpbnNuKTsKKysJCSAgYnJlYWs7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgICBsaXZlX2Jicy5yZWxlYXNlICgpOworKyAgICB9CisrCisgICBlbWl0X2luc25fYWZ0ZXIgKFBBVFRFUk4gKGluc24pLCBiYl9ub3RlIChiYikpOworICAgZGVsZXRlX2luc24gKGluc24pOworICAgcmV0dXJuIHRydWU7CitJbmRleDogYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9wcjY1Nzc5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3ByNjU3NzkuYworQEAgLTAsMCArMSw2NCBAQAorKy8qIHsgZGctZG8gcnVuIH0gKi8KKysvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZyIgfSAqLworKy8qIHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItbXJlbG9jYXRhYmxlIiB7IHRhcmdldCBwb3dlcnBjLSotcnRlbXMqIH0gfSAqLworKworK3Vuc2lnbmVkIGxvbmcgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKythZGxlcjMyICh1bnNpZ25lZCBsb25nIGFkbGVyLCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pCisreworKyAgdW5zaWduZWQgbG9uZyBzMSA9IGFkbGVyICYgMHhmZmZmOworKyAgdW5zaWduZWQgbG9uZyBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7CisrICBpbnQgazsKKysKKysgIGlmIChidWYgPT0gMCkKKysgICAgcmV0dXJuIDFMOworKworKyAgd2hpbGUgKGxlbiA+IDApCisrICAgIHsKKysgICAgICBrID0gbGVuIDwgNTU1MiA/IGxlbiA6IDU1NTI7CisrICAgICAgbGVuIC09IGs7CisrICAgICAgd2hpbGUgKGsgPj0gMTYpCisrCXsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgczEgKz0gKmJ1ZisrOyBzMiArPSBzMTsKKysJICBzMSArPSAqYnVmKys7IHMyICs9IHMxOworKwkgIGsgLT0gMTY7CisrCX0KKysgICAgICBpZiAoayAhPSAwKQorKwlkbworKwkgIHsKKysJICAgIHMxICs9ICpidWYrKzsgczIgKz0gczE7CisrCSAgfSB3aGlsZSAoLS1rKTsKKysgICAgICBzMSAmPSAweGZmZmZmZmZmVUw7CisrICAgICAgczIgJj0gMHhmZmZmZmZmZlVMOworKyAgICAgIHMxICU9IDY1NTIxTDsKKysgICAgICBzMiAlPSA2NTUyMUw7CisrICAgIH0KKysgIHJldHVybiAoczIgPDwgMTYpIHwgczE7CisrfQorKworK3Vuc2lnbmVkIGNoYXIgYnVmW10gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsCisrCQkJOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKysJCQkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorKwkJCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisrCQkJMHg1NSwgMHhhYSB9OworK2ludAorK21haW4gKCkKKyt7CisrICB1bnNpZ25lZCBsb25nIHggPSBhZGxlcjMyICgwLCBidWYsIHNpemVvZiBidWYpOworKyAgaWYgKHggIT0gMHg2NDA0MDllZlVMKQorKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisrICByZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOC1maXgtZysrLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyNGRkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDM4LWZpeC1nKystc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDQ0IEBACitQb3J0aW9ucyBvZgorCitodHRwOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNAZ2NjLmdudS5vcmcvbXNnMjYwMTMuaHRtbAorCithcmUgbm90IHVwc3RyZWFtZWQgeWV0LiBTbyBsZXRzIGtlZXAgbWlzc2luZyBwaWVjZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaXRob3V0IHRoaXMsIGNvbXBpbGluZyBzb21ldGhpbmcgc2ltcGxlIGxpa2UgI2luY2x1ZGUgPGxpbWl0cz4gb24gdGFyZ2V0Cit3aXRoIGMrKyB0ZXN0LmNwcCBmYWlscyB1bmFibGUgdG8gZmluZCB0aGUgaGVhZGVyLiBzdHJhY2Ugc2hvd3MgaXQgbG9va2luZyBpbgordXNyL2luY2x1ZGUveHh4eCByYXRoZXIgdGhhbiAvdXNyL2luY2x1ZGUveHh4eAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNC44LjEub3JpZy9nY2MvY29uZmlndXJlLmFjCTIwMTMtMDctMTUgMTU6NTU6NDkuNDg4Mzk5MTMyIC0wNzAwCisrKysgZ2NjLTQuOC4xL2djYy9jb25maWd1cmUuYWMJMjAxMy0wNy0xNSAxNjowMjozMS43NzI0MDY2NzkgLTA3MDAKK0BAIC0xNDgsNyArMTQ4LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQorSW5kZXg6IGdjYy00LjguMS9nY2MvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2NjLTQuOC4xLm9yaWcvZ2NjL2NvbmZpZ3VyZQkyMDEzLTA3LTE1IDE1OjU1OjQ5LjQ3MjM5OTEzMiAtMDcwMAorKysrIGdjYy00LjguMS9nY2MvY29uZmlndXJlCTIwMTMtMDctMTUgMTY6MDI6MzEuNzgwNDA2NjgwIC0wNzAwCitAQCAtMzMyNSw3ICszMzI1LDkgQEAKKyBpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbgorICAgZ2NjX2d4eF93aXRob3V0X3N5c3Jvb3Q9YGV4cHIgIiR7Z2NjX2d4eF9pbmNsdWRlX2Rpcn0iIDogIiR7d2l0aF9zeXNyb290fSInXCguKlwpJ2AKKyAgIGlmIHRlc3QgIiR7Z2NjX2d4eF93aXRob3V0X3N5c3Jvb3R9IjsgdGhlbgorLSAgICBnY2NfZ3h4X2luY2x1ZGVfZGlyPSIke2djY19neHhfd2l0aG91dF9zeXNyb290fSIKKysgICAgaWYgdGVzdCB4JHt3aXRoX3N5c3Jvb3R9ICE9IHgvOyB0aGVuCisrICAgICAgZ2NjX2d4eF9pbmNsdWRlX2Rpcj0iJHtnY2NfZ3h4X3dpdGhvdXRfc3lzcm9vdH0iCisrICAgIGZpCisgICAgIGdjY19neHhfaW5jbHVkZV9kaXJfYWRkX3N5c3Jvb3Q9MQorICAgZmkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwMzktbGliY2MxLWZpeC1saWJjYzEtcy1pbnN0YWxsLXBhdGgtYW5kLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMDI1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDAzOS1saWJjYzEtZml4LWxpYmNjMS1zLWluc3RhbGwtcGF0aC1hbmQtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorRnJvbSBhY2VhMGRmOTk5N2E0N2Y4YjgyMjRiNmNhMTYxOGM4YzlkZmJlNmQ1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDUgSnVsIDIwMTUgMjA6MjU6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbGliY2MxOiBmaXggbGliY2MxJ3MgaW5zdGFsbCBwYXRoIGFuZCBycGF0aAorCisqIEluc3RhbGwgbGliY2MxLnNvIGFuZCBsaWJjYzFwbHVnaW4uc28gaW50bworICAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pLCBhcyB3aGF0IHdlCisgIGhhZCBkb25lIHRvIGx0by1wbHVnaW4uCisqIEZpeCBiYWQgUlBBVEggaXVzc3VlOgorICBnY2MtNS4yLjA6IHBhY2thZ2UgZ2NjLXBsdWdpbnMgY29udGFpbnMgYmFkIFJQQVRIIC9wYXRodC90by90bXAvc3lzcm9vdHMvcWVtdXg4Ni02NC91c3IvbGliNjQvLi4vbGliNjQgaW4gZmlsZQorIC9wYXRoL3RvL2djYy81LjIuMC1yMC9wYWNrYWdlcy1zcGxpdC9nY2MtcGx1Z2lucy91c3IvbGliNjQvZ2NjL3g4Nl82NC1wb2t5LWxpbnV4LzUuMi4wL3BsdWdpbi9saWJjYzFwbHVnaW4uc28uMC4wLjAKKyBbcnBhdGhzXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliY2MxL01ha2VmaWxlLmFtICB8ICAgIDQgKystLQorIGxpYmNjMS9NYWtlZmlsZS5pbiAgfCAgICA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYmNjMS9NYWtlZmlsZS5hbSBiL2xpYmNjMS9NYWtlZmlsZS5hbQoraW5kZXggN2EyNzRiMy4uZGI2OWJlYSAxMDA2NDQKKy0tLSBhL2xpYmNjMS9NYWtlZmlsZS5hbQorKysrIGIvbGliY2MxL01ha2VmaWxlLmFtCitAQCAtMzUsOCArMzUsOCBAQCBsaWJpYmVydHkgPSAkKGlmICQod2lsZGNhcmQgJChsaWJpYmVydHlfbm9hc2FuKSksJChXYykkKGxpYmliZXJ0eV9ub2FzYW4pLCBcCisgCSAgICAkKFdjKSQobGliaWJlcnR5X25vcm1hbCkpKQorIGxpYmliZXJ0eV9kZXAgPSAkKHBhdHN1YnN0ICQoV2MpJSwlLCQobGliaWJlcnR5KSkKKyAKKy1wbHVnaW5kaXIgPSAkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikvcGx1Z2luCistY2MxbGliZGlyID0gJChsaWJkaXIpLyQobGlic3VmZml4KQorK2NjMWxpYmRpciA9ICQobGliZXhlY2RpcikvZ2NjLyQodGFyZ2V0X25vbmNhbm9uaWNhbCkvJChnY2NfdmVyc2lvbikKKytwbHVnaW5kaXIgPSAkKGNjMWxpYmRpcikKKyAKKyBpZiBFTkFCTEVfUExVR0lOCisgcGx1Z2luX0xUTElCUkFSSUVTID0gbGliY2MxcGx1Z2luLmxhCitkaWZmIC0tZ2l0IGEvbGliY2MxL01ha2VmaWxlLmluIGIvbGliY2MxL01ha2VmaWxlLmluCitpbmRleCAxOTE2MTM0Li5jODk5NWQyIDEwMDY0NAorLS0tIGEvbGliY2MxL01ha2VmaWxlLmluCisrKysgYi9saWJjYzEvTWFrZWZpbGUuaW4KK0BAIC0yNjIsOCArMjYyLDggQEAgbGliaWJlcnR5ID0gJChpZiAkKHdpbGRjYXJkICQobGliaWJlcnR5X25vYXNhbikpLCQoV2MpJChsaWJpYmVydHlfbm9hc2FuKSwgXAorIAkgICAgJChXYykkKGxpYmliZXJ0eV9ub3JtYWwpKSkKKyAKKyBsaWJpYmVydHlfZGVwID0gJChwYXRzdWJzdCAkKFdjKSUsJSwkKGxpYmliZXJ0eSkpCistcGx1Z2luZGlyID0gJChsaWJkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pL3BsdWdpbgorLWNjMWxpYmRpciA9ICQobGliZGlyKS8kKGxpYnN1ZmZpeCkKKytjYzFsaWJkaXIgPSAkKGxpYmV4ZWNkaXIpL2djYy8kKHRhcmdldF9ub25jYW5vbmljYWwpLyQoZ2NjX3ZlcnNpb24pCisrcGx1Z2luZGlyID0gJChjYzFsaWJkaXIpCisgQEVOQUJMRV9QTFVHSU5fVFJVRUBwbHVnaW5fTFRMSUJSQVJJRVMgPSBsaWJjYzFwbHVnaW4ubGEKKyBARU5BQkxFX1BMVUdJTl9UUlVFQGNjMWxpYl9MVExJQlJBUklFUyA9IGxpYmNjMS5sYQorIEJVSUxUX1NPVVJDRVMgPSBjb21waWxlci1uYW1lLmgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQwLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLTUuMi8wMDQwLW5hdGl2ZXNkay1nY2Mtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDgxYWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDAtbmF0aXZlc2RrLWdjYy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTk2IEBACitCZWluZyBhYmxlIHRvIGJ1aWxkIGEgbmF0aXZlc2RrIGdjYyBpcyB1c2VmdWwsIHBhcnRpY3VsYXJseSBpbiBjYXNlcword2hlcmUgdGhlIGhvc3QgY29tcGlsZXIgbWF5IGJlIG9mIGFuIGluY29tcGF0aWJsZSB2ZXJzaW9uIChvciBhIDMyCitiaXQgY29tcGlsZXIgaXMgbmVlZGVkKS4KKworU2FkbHksIGJ1aWxkaW5nIG5hdGl2ZXNkay1nY2MgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQuIFdlIGluc3RhbGwKK25hdGl2ZXNkay1nY2MgaW50byBhIHJlbG9jYXRhYmxlIGxvY2F0aW9uIGFuZCB0aGlzIG1lYW5zIHRoYXQgaXRzCitsaWJyYXJ5IGxvY2F0aW9ucyBjYW4gY2hhbmdlLiAiTm9ybWFsIiBzeXNyb290IHN1cHBvcnQgZG9lc24ndCBoZWxwCitpbiB0aGlzIGNhc2Ugc2luY2UgdGhlIHZhbHVlcyBvZiBwYXRocyBsaWtlICJsaWJkaXIiIGNoYW5nZSwgbm90IGp1c3QKK2Jhc2Ugcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHN5c3RlbS4KKworSW4gb3JkZXIgdG8gaGFuZGxlIHRoaXMgd2UgZG8gdHdvIHRoaW5nczoKKworYSkgQWRkICVyIGludG8gc3BlYyBmaWxlIG1hcmt1cCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgaW5qZWN0ZWQgcGF0aHMKKyAgIHN1Y2ggYXMgU1lTVEVNTElCU19ESVIgKHNlZSBnY2NfbXVsdGlsaWJfc2V0dXAoKSkuCitiKSBBZGQgb3RoZXIgcGF0aHMgd2hpY2ggbmVlZCByZWxvY2F0aW9uIGludG8gYSAuZ2NjcmVsb2NwcmVmaXggc2VjdGlvbgorICAgd2hpY2ggdGhlIHJlbG9jYXRpb24gY29kZSB3aWxsIG5vdGljZSBhbmQgYWRqdXN0IGF1dG9tYXRpY2FsbHkuCisKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDE1LzcvMjgKKworZGlmZiAtLWdpdCBhL2djYy9jcHBkZWZhdWx0LmMgYi9nY2MvY3BwZGVmYXVsdC5jCistLS0gYS9nY2MvY3BwZGVmYXVsdC5jCisrKysgYi9nY2MvY3BwZGVmYXVsdC5jCitAQCAtMzUsNiArMzUsMzAgQEAKKyAjIHVuZGVmIENST1NTX0lOQ0xVREVfRElSCisgI2VuZGlmCisgCisrc3RhdGljIGNoYXIgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19JTkNMVURFX0RJUjsKKytzdGF0aWMgY2hhciBHQ0NfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gR0NDX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSOworK3N0YXRpYyBjaGFyIEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVI7Cisrc3RhdGljIGNoYXIgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VUOworKyNpZmRlZiBMT0NBTF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIExPQ0FMX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IExPQ0FMX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKytzdGF0aWMgY2hhciBQUkVGSVhfSU5DTFVERV9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gUFJFRklYX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBGSVhFRF9JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIEZJWEVEX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IEZJWEVEX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBDUk9TU19JTkNMVURFX0RJUgorK3N0YXRpYyBjaGFyIENST1NTX0lOQ0xVREVfRElSVkFSWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKSA9IENST1NTX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBUT09MX0lOQ0xVREVfRElSCisrc3RhdGljIGNoYXIgVE9PTF9JTkNMVURFX0RJUlZBUls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBUT09MX0lOQ0xVREVfRElSOworKyNlbmRpZgorKyNpZmRlZiBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIKKytzdGF0aWMgY2hhciBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVJbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSOworKyNlbmRpZgorKworIGNvbnN0IHN0cnVjdCBkZWZhdWx0X2luY2x1ZGUgY3BwX2luY2x1ZGVfZGVmYXVsdHNbXQorICNpZmRlZiBJTkNMVURFX0RFRkFVTFRTCisgPSBJTkNMVURFX0RFRkFVTFRTOworQEAgLTQyLDM4ICs2NiwzOCBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyA9IHsKKyAjaWZkZWYgR1BMVVNQTFVTX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBnZW5lcmljIGluY2x1ZGUgZmlsZXMuICAqLworLSAgICB7IEdQTFVTUExVU19JTkNMVURFX0RJUiwgIkcrKyIsIDEsIDEsCisrICAgIHsgR1BMVVNQTFVTX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogUGljayB1cCBHTlUgQysrIHRhcmdldC1kZXBlbmRlbnQgaW5jbHVkZSBmaWxlcy4gICovCistICAgIHsgR1BMVVNQTFVTX1RPT0xfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19UT09MX0lOQ0xVREVfRElSVkFSLCAiRysrIiwgMSwgMSwKKyAgICAgICBHUExVU1BMVVNfSU5DTFVERV9ESVJfQUREX1NZU1JPT1QsIDEgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR1BMVVNQTFVTX0JBQ0tXQVJEX0lOQ0xVREVfRElSCisgICAgIC8qIFBpY2sgdXAgR05VIEMrKyBiYWNrd2FyZCBhbmQgZGVwcmVjYXRlZCBpbmNsdWRlIGZpbGVzLiAgKi8KKy0gICAgeyBHUExVU1BMVVNfQkFDS1dBUkRfSU5DTFVERV9ESVIsICJHKysiLCAxLCAxLAorKyAgICB7IEdQTFVTUExVU19CQUNLV0FSRF9JTkNMVURFX0RJUlZBUiwgIkcrKyIsIDEsIDEsCisgICAgICAgR1BMVVNQTFVTX0lOQ0xVREVfRElSX0FERF9TWVNST09ULCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIEdDQ19JTkNMVURFX0RJUgorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycy4gICovCistICAgIHsgR0NDX0lOQ0xVREVfRElSLCAiR0NDIiwgMCwgMCwgMCwgMCB9LAorKyAgICB7IEdDQ19JTkNMVURFX0RJUlZBUiwgIkdDQyIsIDAsIDAsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgR0NDX0lOQ0xVREVfU1VCRElSX1RBUkdFVAorICAgICAvKiBUaGlzIGlzIHRoZSBkaXIgZm9yIGdjYydzIHByaXZhdGUgaGVhZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkIHN5c3Jvb3QuICAqLworLSAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMiBHQ0NfSU5DTFVERV9TVUJESVJfVEFSR0VULCAiR0NDIiwgMCwgMCwgMSwgMCB9LAorKyAgICB7IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMlZBUiwgIkdDQyIsIDAsIDAsIDEsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgTE9DQUxfSU5DTFVERV9ESVIKKyAgICAgLyogL3Vzci9sb2NhbC9pbmNsdWRlIGNvbWVzIGJlZm9yZSB0aGUgZml4aW5jbHVkZWQgaGVhZGVyIGZpbGVzLiAgKi8KKy0gICAgeyBMT0NBTF9JTkNMVURFX0RJUiwgMCwgMCwgMSwgMSwgMiB9LAorLSAgICB7IExPQ0FMX0lOQ0xVREVfRElSLCAwLCAwLCAxLCAxLCAwIH0sCisrICAgIHsgTE9DQUxfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDEsIDIgfSwKKysgICAgeyBMT0NBTF9JTkNMVURFX0RJUlZBUiwgMCwgMCwgMSwgMSwgMCB9LAorICNlbmRpZgorICNpZmRlZiBQUkVGSVhfSU5DTFVERV9ESVIKKy0gICAgeyBQUkVGSVhfSU5DTFVERV9ESVIsIDAsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBQUkVGSVhfSU5DTFVERV9ESVJWQVIsIDAsIDAsIDEsIDAsIDAgfSwKKyAjZW5kaWYKKyAjaWZkZWYgRklYRURfSU5DTFVERV9ESVIKKyAgICAgLyogVGhpcyBpcyB0aGUgZGlyIGZvciBmaXhpbmNsdWRlcy4gICovCistICAgIHsgRklYRURfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLAorKyAgICB7IEZJWEVEX0lOQ0xVREVfRElSVkFSLCAiR0NDIiwgMCwgMCwgMCwKKyAgICAgICAvKiBBIG11bHRpbGliIHN1ZmZpeCBuZWVkcyBhZGRpbmcgaWYgZGlmZmVyZW50IG11bHRpbGlicyB1c2UKKyAJIGRpZmZlcmVudCBoZWFkZXJzLiAgKi8KKyAjaWZkZWYgU1lTUk9PVF9IRUFERVJTX1NVRkZJWF9TUEVDCitAQCAtODUsMTYgKzEwOSwxNiBAQCBjb25zdCBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlIGNwcF9pbmNsdWRlX2RlZmF1bHRzW10KKyAjZW5kaWYKKyAjaWZkZWYgQ1JPU1NfSU5DTFVERV9ESVIKKyAgICAgLyogT25lIHBsYWNlIHRoZSB0YXJnZXQgc3lzdGVtJ3MgaGVhZGVycyBtaWdodCBiZS4gICovCistICAgIHsgQ1JPU1NfSU5DTFVERV9ESVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisrICAgIHsgQ1JPU1NfSU5DTFVERV9ESVJWQVIsICJHQ0MiLCAwLCAwLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIFRPT0xfSU5DTFVERV9ESVIKKyAgICAgLyogQW5vdGhlciBwbGFjZSB0aGUgdGFyZ2V0IHN5c3RlbSdzIGhlYWRlcnMgbWlnaHQgYmUuICAqLworLSAgICB7IFRPT0xfSU5DTFVERV9ESVIsICJCSU5VVElMUyIsIDAsIDEsIDAsIDAgfSwKKysgICAgeyBUT09MX0lOQ0xVREVfRElSVkFSLCAiQklOVVRJTFMiLCAwLCAxLCAwLCAwIH0sCisgI2VuZGlmCisgI2lmZGVmIE5BVElWRV9TWVNURU1fSEVBREVSX0RJUgorICAgICAvKiAvdXNyL2luY2x1ZGUgY29tZXMgZGVhZCBsYXN0LiAgKi8KKy0gICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMiB9LAorLSAgICB7IE5BVElWRV9TWVNURU1fSEVBREVSX0RJUiwgTkFUSVZFX1NZU1RFTV9IRUFERVJfQ09NUE9ORU5ULCAwLCAwLCAxLCAwIH0sCisrICAgIHsgTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSVkFSLCBOQVRJVkVfU1lTVEVNX0hFQURFUl9DT01QT05FTlQsIDAsIDAsIDEsIDIgfSwKKysgICAgeyBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVJWQVIsIE5BVElWRV9TWVNURU1fSEVBREVSX0NPTVBPTkVOVCwgMCwgMCwgMSwgMCB9LAorICNlbmRpZgorICAgICB7IDAsIDAsIDAsIDAsIDAsIDAgfQorICAgfTsKK2RpZmYgLS1naXQgYS9nY2MvY3BwZGVmYXVsdC5oIGIvZ2NjL2NwcGRlZmF1bHQuaAorLS0tIGEvZ2NjL2NwcGRlZmF1bHQuaAorKysrIGIvZ2NjL2NwcGRlZmF1bHQuaAorQEAgLTMzLDcgKzMzLDggQEAKKyAKKyBzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlCisgeworLSAgY29uc3QgY2hhciAqY29uc3QgZm5hbWU7CS8qIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkuICAqLworKyAgY29uc3QgY2hhciAqZm5hbWU7ICAgICAvKiBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5LiAgKi8KKysKKyAgIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBvbmVudDsJLyogVGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyAJCQkJICAgKHNlZSB1cGRhdGVfcGF0aCBpbiBwcmVmaXguYykgKi8KKyAgIGNvbnN0IGNoYXIgY3BsdXNwbHVzOwkJLyogT25seSBsb29rIGhlcmUgaWYgd2UncmUgY29tcGlsaW5nIEMrKy4gICovCitkaWZmIC0tZ2l0IGEvZ2NjL2djYy5jIGIvZ2NjL2djYy5jCistLS0gYS9nY2MvZ2NjLmMKKysrKyBiL2djYy9nY2MuYworQEAgLTEyMCw2ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqdGFyZ2V0X3N5c3RlbV9yb290ID0gVEFSR0VUX1NZU1RFTV9ST09UOworICNlbHNlCisgc3RhdGljIGNvbnN0IGNoYXIgKnRhcmdldF9zeXN0ZW1fcm9vdCA9IDA7CisgI2VuZGlmCisrIAorK3N0YXRpYyBjaGFyIHRhcmdldF9yZWxvY2F0YWJsZV9wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1lTVEVNTElCU19ESVI7CisgCisgLyogTm9uemVybyBtZWFucyBwYXNzIHRoZSB1cGRhdGVkIHRhcmdldF9zeXN0ZW1fcm9vdCB0byB0aGUgY29tcGlsZXIuICAqLworIAorQEAgLTM5MCw2ICszOTIsNyBAQCBvciB3aXRoIGNvbnN0YW50IHRleHQgaW4gYSBzaW5nbGUgYXJndW1lbnQuCisgICVHICAgICBwcm9jZXNzIExJQkdDQ19TUEVDIGFzIGEgc3BlYy4KKyAgJVIgICAgIE91dHB1dCB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXRfc3lzdGVtX3Jvb3QgYW5kCisgICAgICAgICB0YXJnZXRfc3lzcm9vdF9zdWZmaXguCisrICVyICAgICBPdXRwdXQgdGhlIGJhc2UgcGF0aCB0YXJnZXRfcmVsb2NhdGFibGVfcHJlZml4CisgICVTICAgICBwcm9jZXNzIFNUQVJURklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBTIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUUgICAgIHByb2Nlc3MgRU5ERklMRV9TUEVDIGFzIGEgc3BlYy4gIEEgY2FwaXRhbCBFIGlzIGFjdHVhbGx5IHVzZWQgaGVyZS4KKyAgJUMgICAgIHByb2Nlc3MgQ1BQX1NQRUMgYXMgYSBzcGVjLgorQEAgLTEyODYsMTAgKzEyODksMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmdjY19saWJleGVjX3ByZWZpeDsKKyAgICBnY2NfZXhlY19wcmVmaXggaXMgc2V0IGJlY2F1c2UsIGluIHRoYXQgY2FzZSwgd2Uga25vdyB3aGVyZSB0aGUKKyAgICBjb21waWxlciBoYXMgYmVlbiBpbnN0YWxsZWQsIGFuZCB1c2UgcGF0aHMgcmVsYXRpdmUgdG8gdGhhdAorICAgIGxvY2F0aW9uIGluc3RlYWQuICAqLworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9leGVjX3ByZWZpeCA9IFNUQU5EQVJEX0VYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9saWJleGVjX3ByZWZpeCA9IFNUQU5EQVJEX0xJQkVYRUNfUFJFRklYOworLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9iaW5kaXJfcHJlZml4ID0gU1RBTkRBUkRfQklORElSX1BSRUZJWDsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeCA9IFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfbGliZXhlY19wcmVmaXhbNDA5Nl0gX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuZ2NjcmVsb2NwcmVmaXgiKSkpID0gU1RBTkRBUkRfTElCRVhFQ19QUkVGSVg7Cisrc3RhdGljIGNoYXIgc3RhbmRhcmRfYmluZGlyX3ByZWZpeFs0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkgPSBTVEFOREFSRF9CSU5ESVJfUFJFRklYOworK3N0YXRpYyBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyAKKyAvKiBGb3IgbmF0aXZlIGNvbXBpbGVycywgdGhlc2UgYXJlIHdlbGwta25vd24gcGF0aHMgY29udGFpbmluZworICAgIGNvbXBvbmVudHMgdGhhdCBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlIHN5c3RlbS4gIEZvciBjcm9zcworQEAgLTEyOTcsOSArMTMwMCw5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4ID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfZXhlY19wcmVmaXggPSBNRF9FWEVDX1BSRUZJWDsKKyBzdGF0aWMgY29uc3QgY2hhciAqbWRfc3RhcnRmaWxlX3ByZWZpeCA9IE1EX1NUQVJURklMRV9QUkVGSVg7Cisgc3RhdGljIGNvbnN0IGNoYXIgKm1kX3N0YXJ0ZmlsZV9wcmVmaXhfMSA9IE1EX1NUQVJURklMRV9QUkVGSVhfMTsKKy1zdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xCisrc3RhdGljIGNoYXIgc3RhbmRhcmRfc3RhcnRmaWxlX3ByZWZpeF8xWzQwOTZdIF9fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmdjY3JlbG9jcHJlZml4IikpKQorICAgPSBTVEFOREFSRF9TVEFSVEZJTEVfUFJFRklYXzE7Cistc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMgorK3N0YXRpYyBjaGFyIHN0YW5kYXJkX3N0YXJ0ZmlsZV9wcmVmaXhfMls0MDk2XSBfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5nY2NyZWxvY3ByZWZpeCIpKSkKKyAgID0gU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yOworIAorIC8qIEEgcmVsYXRpdmUgcGF0aCB0byBiZSB1c2VkIGluIGZpbmRpbmcgdGhlIGxvY2F0aW9uIG9mIHRvb2xzCitAQCAtNTU1MCw2ICs1NTUzLDExIEBAIGRvX3NwZWNfMSAoY29uc3QgY2hhciAqc3BlYywgaW50IGluc3dpdGNoLCBjb25zdCBjaGFyICpzb2Z0X21hdGNoZWRfcGFydCkKKyAJICAgICAgfQorIAkgICAgYnJlYWs7CisgCisrICAgICAgICAgIGNhc2UgJ3InOgorKyAgICAgICAgICAgICAgb2JzdGFja19ncm93ICgmb2JzdGFjaywgdGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCwKKysJCSAgICAgIHN0cmxlbiAodGFyZ2V0X3JlbG9jYXRhYmxlX3ByZWZpeCkpOworKyAgICAgICAgICAgIGJyZWFrOworKworIAkgIGNhc2UgJ1MnOgorIAkgICAgdmFsdWUgPSBkb19zcGVjXzEgKHN0YXJ0ZmlsZV9zcGVjLCAwLCBOVUxMKTsKKyAJICAgIGlmICh2YWx1ZSAhPSAwKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtNS4yLzAwNDEtaGFuZGxlLXRhcmdldC1zeXNyb290LW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTY5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy01LjIvMDA0MS1oYW5kbGUtdGFyZ2V0LXN5c3Jvb3QtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSw4OCBAQAorU2VhcmNoIHRhcmdldCBzeXNyb290IGdjYyB2ZXJzaW9uIHNwZWNpZmljIGRpcnMgd2l0aCBtdWx0aWxpYi4KKworV2UgaW5zdGFsbCB0aGUgZ2NjIGxpYnJhcmllcyAoc3VjaCBhcyBjcnRiZWdpbi5wKSBpbnRvCis8c3lzcm9vdD48bGliZGlyPi88dGFyZ2V0LXN5cz4vNS4yLjAvCit3aGljaCBpcyBhIGRlZmF1bHQgc2VhcmNoIHBhdGggZm9yIEdDQyAoYWthIG11bHRpX3N1ZmZpeCBpbiB0aGUgCitjb2RlIGJlbG93KS4gPHRhcmdldC1zeXM+IGlzICdtYWNoaW5lJyBpbiBnY2MncyB0ZXJtaW5vbG9neS4gV2UgdXNlCit0aGVzZSBkaXJlY3RvcmllcyBzbyB0aGF0IG11bHRpcGxlIGdjYyB2ZXJzaW9ucyBjb3VsZCBpbiB0aGVvcnkgCitjby1leGlzdCBvbiB0YXJnZXQuCisKK1dlIG9ubHkgd2FudCB0byBidWlsZCBvbmUgZ2NjLWNyb3NzLWNhbmFkaWFuIHBlciBhcmNoIGFuZCBoYXZlIHRoaXMgd29yayAKK2ZvciBhbGwgbXVsdGlsaWJzLiA8dGFyZ2V0LXN5cz4gY2FuIGJlIGhhbmRsZWQgYnkgbWFwcGluZyB0aGUgbXVsdGlsaWIKKzx0YXJnZXQtc3lzPiB0byB0aGUgb25lIHVzZWQgYnkgZ2NjLWNyb3NzLWNhbmFkaWFuLCBlLmcuIG1pcHM2NC1wb2xrbWxsaWIzMi1saW51eCAKK2lzIHN5bWxpbmtlZCB0byBieSBtaXBzNjQtcG9reS1saW51eC4KKworVGhlIGRlZmF1bHQgZ2NjIHNlYXJjaCBwYXRoIGluIHRoZSB0YXJnZXQgc3lzcm9vdCBmb3IgYSAibGliNjQiIG11dGxpbGliIGlzOgorCis8c3lzcm9vdD4vbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vbGliMzIvLi4vbGliNjQvCis8c3lzcm9vdD4vdXNyL2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC8KKzxzeXNyb290Pi9saWIzMi8KKzxzeXNyb290Pi91c3IvbGliMzIvCisKK3doaWNoIG1lYW5zIHRoYXQgdGhlIGxpYjMyIGNydGJlZ2luLm8gd2lsbCBiZSBmb3VuZCBhbmQgdGhlIGxpYjY0IG9uZXMKK3dpbGwgbm90IHdoaWNoIGxlYWRzIHRvIGNvbXBpbGVyIGZhaWx1cmVzLgorCitUaGlzIHBhdGNoIGluamVjdHMgYSBtdWx0aWxpYiB2ZXJzaW9uIG9mIHRoYXQgcGF0aCBmaXJzdCBzbyB0aGUgbGliNjQKK2JpbmFyaWVzIGNhbiBiZSBmb3VuZCBmaXJzdC4gV2l0aCB0aGlzIGNoYW5nZSB0aGUgc2VhcmNoIHBhdGggYmVjb21lczoKKworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0L21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyL21pcHM2NC1wb2t5LWxpbnV4LzUuMi4wLworPHN5c3Jvb3Q+L2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L3Vzci9saWIzMi8uLi9saWI2NC9taXBzNjQtcG9reS1saW51eC81LjIuMC8KKzxzeXNyb290Pi91c3IvbGliMzIvbWlwczY0LXBva3ktbGludXgvNS4yLjAvCis8c3lzcm9vdD4vdXNyL2xpYjMyLy4uL2xpYjY0LworPHN5c3Jvb3Q+L2xpYjMyLworPHN5c3Jvb3Q+L3Vzci9saWIzMi8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUCAyMDE1LzcvMzEKKworSW5kZXg6IGdjYy01LjIuMC9nY2MvZ2NjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnY2MtNS4yLjAub3JpZy9nY2MvZ2NjLmMKKysrKyBnY2MtNS4yLjAvZ2NjL2djYy5jCitAQCAtMjMwNSw3ICsyMzA1LDcgQEAgZm9yX2VhY2hfcGF0aCAoY29uc3Qgc3RydWN0IHBhdGhfcHJlZml4CisgICAgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAJeworIAkgIGxlbiA9IHBhdGhzLT5tYXhfbGVuICsgZXh0cmFfc3BhY2UgKyAxOworLQkgIGxlbiArPSBNQVggKE1BWCAoc3VmZml4X2xlbiwgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOworKwkgIGxlbiArPSBNQVggKChzdWZmaXhfbGVuICsgbXVsdGlfb3NfZGlyX2xlbiksIG11bHRpYXJjaF9sZW4pOworIAkgIHBhdGggPSBYTkVXVkVDIChjaGFyLCBsZW4pOworIAl9CisgCitAQCAtMjMxNyw2ICsyMzE3LDMzIEBAIGZvcl9lYWNoX3BhdGggKGNvbnN0IHN0cnVjdCBwYXRoX3ByZWZpeAorIAkgIC8qIExvb2sgZmlyc3QgaW4gTUFDSElORS9WRVJTSU9OIHN1YmRpcmVjdG9yeS4gICovCisgCSAgaWYgKCFza2lwX211bHRpX2RpcikKKyAJICAgIHsKKysJICAgICAgaWYgKCEocGwtPm9zX211bHRpbGliID8gc2tpcF9tdWx0aV9vc19kaXIgOiBza2lwX211bHRpX2RpcikpCisrCSAgICAgICAgeworKwkgICAgICAgICAgY29uc3QgY2hhciAqdGhpc19tdWx0aTsKKysJICAgICAgICAgIHNpemVfdCB0aGlzX211bHRpX2xlbjsKKysKKysJICAgICAgICAgIGlmIChwbC0+b3NfbXVsdGlsaWIpCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX29zX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfb3NfZGlyX2xlbjsKKysJCSAgICB9CisrCSAgICAgICAgICBlbHNlCisrCQkgICAgeworKwkJICAgICAgdGhpc19tdWx0aSA9IG11bHRpX2RpcjsKKysJCSAgICAgIHRoaXNfbXVsdGlfbGVuID0gbXVsdGlfZGlyX2xlbjsKKysJCSAgICB9CisrCisrCSAgICAgICAgICAvKiBMb29rIGluIG11bHRpbGliIE1BQ0hJTkUvVkVSU0lPTiBzdWJkaXJlY3RvcnkgZmlyc3QgKi8KKysJICAgICAgICAgIGlmICh0aGlzX211bHRpX2xlbikKKysJICAgICAgICAgICAgeworKwkJICAgICAgbWVtY3B5IChwYXRoICsgbGVuLCB0aGlzX211bHRpLCB0aGlzX211bHRpX2xlbiArIDEpOworKwkgICAgICAgICAgICAgIG1lbWNweSAocGF0aCArIGxlbiArIHRoaXNfbXVsdGlfbGVuLCBtdWx0aV9zdWZmaXgsIHN1ZmZpeF9sZW4gKyAxKTsKKysJICAgICAgICAgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisrCSAgICAgICAgICAgICAgICBpZiAocmV0KQorKwkJICAgICAgICAgIGJyZWFrOworKwkgICAgICAgICAgICB9CisrCSAgICAgICAgfQorKworIAkgICAgICBtZW1jcHkgKHBhdGggKyBsZW4sIG11bHRpX3N1ZmZpeCwgc3VmZml4X2xlbiArIDEpOworIAkgICAgICByZXQgPSBjYWxsYmFjayAocGF0aCwgY2FsbGJhY2tfaW5mbyk7CisgCSAgICAgIGlmIChyZXQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNjMDdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29tbW9uLmluYwpAQCAtMCwwICsxLDEwMCBAQAorU1VNTUFSWSA9ICJHTlUgY2MgYW5kIGdjYyBDIGNvbXBpbGVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nY2MvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMIgorCitOQVRJVkVERVBTID0gIiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0JQTiA9ICJnY2MiCisKK2RlZiBnZXRfZ2NjX2Zsb2F0X3NldHRpbmcoYmIsIGQpOgorICAgIGlmIGQuZ2V0VmFyKCdBUk1QS0dTRlhfRUFCSScsIFRydWUpID09ICJoZiIgYW5kIGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkgPT0gImFybSI6CisgICAgICAgIHJldHVybiAiLS13aXRoLWZsb2F0PWhhcmQiCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9GUFUnLCBUcnVlKSBpbiBbICdzb2Z0JyBdOgorICAgICAgICByZXR1cm4gIi0td2l0aC1mbG9hdD1zb2Z0IgorICAgIGlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAncHBjLWVmZCcgXToKKyAgICAgICAgcmV0dXJuICItLWVuYWJsZS1lNTAwX2RvdWJsZSIKKyAgICByZXR1cm4gIiIKKworZ2V0X2djY19mbG9hdF9zZXR0aW5nW3ZhcmRlcHZhbHVlXSA9ICIke0BnZXRfZ2NjX2Zsb2F0X3NldHRpbmcoYmIsIGQpfSIKKworZGVmIGdldF9nY2NfbWlwc19wbHRfc2V0dGluZyhiYiwgZCk6CisgICAgaWYgZC5nZXRWYXIoJ1RSQU5TTEFURURfVEFSR0VUX0FSQ0gnLCBUcnVlKSBpbiBbICdtaXBzJywgJ21pcHNlbCcgXSBhbmQgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtcGx0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICByZXR1cm4gIi0td2l0aC1taXBzLXBsdCIKKyAgICByZXR1cm4gIiIKKworZGVmIGdldF9sb25nX2RvdWJsZV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVFJBTlNMQVRFRF9UQVJHRVRfQVJDSCcsIFRydWUpIGluIFsgJ3Bvd2VycGMnLCAncG93ZXJwYzY0JyBdIGFuZCBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkgaW4gWyAndWNsaWJjJywgJ2dsaWJjJyBdOgorICAgICAgICByZXR1cm4gIi0td2l0aC1sb25nLWRvdWJsZS0xMjgiCisgICAgcmV0dXJuICIiCisKK2RlZiBnZXRfZ2NjX211bHRpYXJjaF9zZXR0aW5nKGJiLCBkKToKKyAgICB0YXJnZXRfYXJjaCA9IGQuZ2V0VmFyKCdUUkFOU0xBVEVEX1RBUkdFVF9BUkNIJywgVHJ1ZSkKKyAgICBtdWx0aWFyY2hfb3B0aW9ucyA9IHsKKyAgICAgICAgImk1ODYiOiAgICAiLS1lbmFibGUtdGFyZ2V0cz1hbGwiLAorICAgICAgICAiaTY4NiI6ICAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgICAgICJwb3dlcnBjIjogIi0tZW5hYmxlLXRhcmdldHM9cG93ZXJwYzY0IiwKKyAgICAgICAgIm1pcHMiOiAgICAiLS1lbmFibGUtdGFyZ2V0cz1hbGwiLAorICAgICAgICAic3BhcmMiOiAgICItLWVuYWJsZS10YXJnZXRzPWFsbCIsCisgICAgfQorCisgICAgaWYgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCBUcnVlLCBGYWxzZSwgZCk6CisgICAgICAgIGlmIHRhcmdldF9hcmNoIGluIG11bHRpYXJjaF9vcHRpb25zIDoKKyAgICAgICAgICAgIHJldHVybiBtdWx0aWFyY2hfb3B0aW9uc1t0YXJnZXRfYXJjaF0KKyAgICByZXR1cm4gIiIKKworIyB0aGlzIGlzIHVzZWQgYnkgdGhlIG11bHRpbGliIHNldHVwIG9mIGdjYworZGVmIGdldF90dW5lX3BhcmFtZXRlcnModHVuZSwgZCk6CisgICAgYXZhaWx0dW5lcyA9IGQuZ2V0VmFyKCdBVkFJTFRVTkVTJywgVHJ1ZSkKKyAgICBpZiB0dW5lIG5vdCBpbiBhdmFpbHR1bmVzLnNwbGl0KCk6CisgICAgICAgIGJiLmVycm9yKCdUaGUgdHVuZTogJXMgaXMgbm90IG9uZSBvZiB0aGUgYXZhaWxhYmxlIHR1bmVzOiAlcycsIHR1bmUgb3IgTm9uZSwgYXZhaWx0dW5lcykKKworICAgIGxvY2FsZGF0YSA9IGJiLmRhdGEuY3JlYXRlQ29weShkKQorICAgIG92ZXJyaWRlID0gJzp0dW5lLScgKyB0dW5lCisgICAgbG9jYWxkYXRhLnNldFZhcignT1ZFUlJJREVTJywgbG9jYWxkYXRhLmdldFZhcignT1ZFUlJJREVTJywgRmFsc2UpICsgb3ZlcnJpZGUpCisgICAgYmIuZGF0YS51cGRhdGVfZGF0YShsb2NhbGRhdGEpCisKKyAgICByZXRkaWN0ID0ge30KKyAgICByZXRkaWN0Wyd0dW5lJ10gPSB0dW5lCisgICAgcmV0ZGljdFsnY2NhcmdzJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX0NDQVJHUycsIFRydWUpCisgICAgcmV0ZGljdFsnZmVhdHVyZXMnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1RVTkVfRkVBVFVSRVMnLCBUcnVlKQorICAgICMgQkFTRUxJQiBpcyB1c2VkIGJ5IHRoZSBtdWx0aWxpYiBjb2RlIHRvIGNoYW5nZSBsaWJyYXJ5IHBhdGhzCisgICAgcmV0ZGljdFsnYmFzZWxpYiddID0gbG9jYWxkYXRhLmdldFZhcignQkFTRV9MSUInLCBUcnVlKSBvciBsb2NhbGRhdGEuZ2V0VmFyKCdCQVNFTElCJywgVHJ1ZSkKKyAgICByZXRkaWN0WydhcmNoJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX0FSQ0gnLCBUcnVlKQorICAgIHJldGRpY3RbJ2FiaWV4dGVuc2lvbiddID0gbG9jYWxkYXRhLmdldFZhcignQUJJRVhURU5TSU9OJywgVHJ1ZSkKKyAgICByZXRkaWN0Wyd0YXJnZXRfZnB1J10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkKKyAgICByZXRkaWN0Wydwa2dhcmNoJ10gPSBsb2NhbGRhdGEuZ2V0VmFyKCdUVU5FX1BLR0FSQ0gnLCBUcnVlKQorICAgIHJldGRpY3RbJ3BhY2thZ2VfZXh0cmFfYXJjaHMnXSA9IGxvY2FsZGF0YS5nZXRWYXIoJ1BBQ0tBR0VfRVhUUkFfQVJDSFMnLCBUcnVlKQorICAgIHJldHVybiByZXRkaWN0CisKK2dldF90dW5lX3BhcmFtZXRlcnNbdmFyZGVwc2V4Y2x1ZGVdID0gIkFWQUlMVFVORVMgVFVORV9DQ0FSR1MgT1ZFUlJJREVTIFRVTkVfRkVBVFVSRVMgQkFTRV9MSUIgQkFTRUxJQiBUVU5FX0FSQ0ggQUJJRVhURU5TSU9OIFRBUkdFVF9GUFUgVFVORV9QS0dBUkNIIFBBQ0tBR0VfRVhUUkFfQVJDSFMiCisKK0RFQklBTk5BTUVfJHtNTFBSRUZJWH1saWJnY2MgPSAibGliZ2NjMSIKKworTUlSUk9SUyA9KyAiXAorJHtHTlVfTUlSUk9SfS9nY2MgICAgZnRwOi8vZ2NjLmdudS5vcmcvcHViL2djYy9yZWxlYXNlcy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJZnRwOi8vZ2QudHV3aWVuLmFjLmF0L2dudS9nY2MvIFxuIFwKKyR7R05VX01JUlJPUn0vZ2NjCWh0dHA6Ly9taXJyb3JzLnJjbi5uZXQvcHViL3NvdXJjZXdhcmUvZ2NjL3JlbGVhc2VzLyBcbiBcCiske0dOVV9NSVJST1J9L2djYyAgIGh0dHA6Ly9nY2MuZ2V0LXNvZnR3YXJlLmNvbS9yZWxlYXNlcy8gXG4gXAorJHtHTlVfTUlSUk9SfS9nY2MJaHR0cDovL2djYy5nZXQtc29mdHdhcmUuY29tL3JlbGVhc2VzLyBcbiBcCisiCisjCisjIFNldCBzb21lIGRlZmF1bHQgdmFsdWVzCisjCitnY2NsaWJkaXIgPSAiJHtsaWJkaXJ9L2djYyIKK0JJTlYgPSAiJHtQVn0iCisjUyA9ICIke1dPUktESVJ9L2djYy0ke1BWfSIKK1MgPSAiJHtUTVBESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0ke1BSfS9nY2MtJHtQVn0iCitCID0gIiR7V09SS0RJUn0vZ2NjLSR7UFZ9L2J1aWxkLiR7SE9TVF9TWVN9LiR7VEFSR0VUX1NZU30iCisKK3RhcmdldF9pbmNsdWRlZGlyID89ICIke2luY2x1ZGVkaXJ9IgordGFyZ2V0X2xpYmRpciA/PSAiJHtsaWJkaXJ9IgordGFyZ2V0X2Jhc2VfbGliZGlyID89ICIke2Jhc2VfbGliZGlyfSIKK3RhcmdldF9wcmVmaXggPz0gIiR7cHJlZml4fSIKKworIyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGZvciB0aGUgc2hhcmVkIHdvcmsgZGlyZWN0b3J5LCB0aGUgZG9fcGF0Y2ggc2lnbmF0dXJlcyBtYXRjaAorIyBUaGUgcmVhbCBXT1JLRElSIGxvY2F0aW9uIGlzbid0IGEgZGVwZW5kZW5jeSBmb3IgdGhlIHNoYXJlZCB3b3JrZGlyLgorc3JjX3BhdGNoZXNbdmFyZGVwc2V4Y2x1ZGVdID0gIldPUktESVIiCitzaG91bGRfYXBwbHlbdmFyZGVwc2V4Y2x1ZGVdICs9ICJQTiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0YmU3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCkBAIC0wLDAgKzEsMTI4IEBACityZXF1aXJlIGdjYy1tdWx0aWxpYi1jb25maWcuaW5jCityZXF1aXJlIGdjYy1zaGFyZWQtc291cmNlLmluYworIworIyBCdWlsZCB0aGUgbGlzdCBvZiBsYW5hZ3VhZ2VzIHRvIGJ1aWxkLgorIworIyBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdmVyc2lvbiBzcGVjaWZpYyAuaW5jIGZpbGUuCisKKyMgSmF2YSAoZ2NqIGRvZXNuJ3Qgd29yayBvbiBhbGwgYXJjaGl0ZWN0dXJlcykKK0pBVkEgPz0gIixqYXZhIgorSkFWQV9hcm0gPz0gIiIKK0pBVkFfYXJtZWIgPz0gIiIKK0pBVkFfbWlwc2VsID89ICIiCitKQVZBX3NoMyA/PSAiIgorIyBnY2MgMy54IGV4cGVjdHMgJ2Y3NycsIDQuMCBleHBlY3RzICdmOTUnLCA0LjEgYW5kIDQuMiBleHBlY3QgJ2ZvcnRyYW4nCitGT1JUUkFOID89ICIsZjc3IgorTEFOR1VBR0VTID89ICJjLGMrKyR7Rk9SVFJBTn0ke0pBVkF9IgorIyBkaXNhYmxlIC0tZW5hYmxlLXRhcmdldC1vcHRzcGFjZSBmb3IgcG93ZXJwYyBTUEUKKyMgYXQgLU9zIGxpYmdjYy5zby4xIGNyZWF0ZXMgcmVmZXJlbmNlcyBpbnRvCisjIGhpZGRlbiBzeW1ib2xzIGluIGxpYmdjYy5hIHdoaWNoIGxpbmtlciBjb21wbGFpbnMKKyMgd2hlbiBsaW5raW5nIHNoYXJlZCBsaWJyYXJpZXMgZnVydGhlciBpbiB0aGUgYnVpbGQgbGlrZSAoZ251dGxzKQorCitTUEVDSUFMX0FSQ0hfTElTVCA9ICJwb3dlcnBjIgorT1BUU1BBQ0UgPSAnJHtAYmIudXRpbHMuY29udGFpbnMoIlNQRUNJQUxfQVJDSF9MSVNUIiwgIiR7VEFSR0VUX0FSQ0h9IiwgIiIsICItLWVuYWJsZS10YXJnZXQtb3B0c3BhY2UiLGQpfScKKworRVhUUkFfT0VDT05GX0JBU0UgPz0gIiIKK0VYVFJBX09FQ09ORl9QQVRIUyA/PSAiIgorRVhUUkFfT0VDT05GX0lOSVRJQUwgPz0gIiIKKworR0NDTVVMVElMSUIgPz0gIi0tZGlzYWJsZS1tdWx0aWxpYiIKK0dDQ1RIUkVBRFMgPz0gInBvc2l4IgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAgICR7QFsnLS1lbmFibGUtY2xvY2FsZT1nZW5lcmljJywgJyddW2QuZ2V0VmFyKCdVU0VfTkxTJywgVHJ1ZSkgIT0gJ25vJ119IFwKKyAgICAtLXdpdGgtZ251LWxkIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLWxhbmd1YWdlcz0ke0xBTkdVQUdFU30gXAorICAgIC0tZW5hYmxlLXRocmVhZHM9JHtHQ0NUSFJFQURTfSBcCisgICAgJHtHQ0NNVUxUSUxJQn0gXAorICAgIC0tZW5hYmxlLWM5OSBcCisgICAgLS1lbmFibGUtbG9uZy1sb25nIFwKKyAgICAtLWVuYWJsZS1zeW12ZXJzPWdudSBcCisgICAgLS1lbmFibGUtbGlic3RkY3h4LXBjaCBcCisgICAgLS1wcm9ncmFtLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXdpdGhvdXQtbG9jYWwtcHJlZml4IFwKKyAgICAke09QVFNQQUNFfSBcCisgICAgJHtFWFRSQV9PRUNPTkZfQkFTRX0gXAorICAgICR7RVhUUkFfT0VDT05GX0dDQ19GTE9BVH0gXAorICAgICR7RVhUUkFfT0VDT05GX1BBVEhTfSBcCisgICAgJHtAZ2V0X2djY19taXBzX3BsdF9zZXR0aW5nKGJiLCBkKX0gXAorICAgICR7QGdldF9sb25nX2RvdWJsZV9zZXR0aW5nKGJiLCBkKX0gXAorICAgICR7QGdldF9nY2NfbXVsdGlhcmNoX3NldHRpbmcoYmIsIGQpfSBcCisiCisKK2V4cG9ydCBnY2NfY3ZfY29sbGVjdDJfbGlicyA9ICdub25lIHJlcXVpcmVkJworIyBXZSBuZWVkIHRvIHNldCBnY2NfY3ZfY29sbGVjdDJfbGlicyBlbHNlIHRoZXJlIGlzIGNyb3NzLWNvbXBpbGF0aW9uIGJhZG5lc3MKKyMgaW4gdGhlIGNvbmZpZy5sb2cgZmlsZXMgKHdoaWNoIG1pZ2h0IG5vdCBnZXQgZ2VuZXJhdGVkIHVudGlsIGRvX2NvbXBpbGUKKyMgaGVuY2UgYmVpbmcgbWlzc2VkIGJ5IHRoZSBpbnNhbmUgZG9fY29uZmlndXJlIGNoZWNrKS4KKworIyBCdWlsZCB1Y2xpYmMgY29tcGlsZXJzIHdpdGhvdXQgY3hhX2F0ZXhpdCBzdXBwb3J0CitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4ID0gIiAtLWVuYWJsZS1fX2N4YV9hdGV4aXQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWVuYWJsZS1fX2N4YV9hdGV4aXQiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwczY0ID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NGVsID0gIiAtLXdpdGgtYWJpPTY0IC0td2l0aC1hcmNoLTY0PW1pcHM2NCAtLXdpdGgtdHVuZS02ND1taXBzNjQiCitFWFRSQV9PRUNPTkZfYXBwZW5kX21pcHM2NG4zMiA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgorRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzNjRlbG4zMiA9ICIgLS13aXRoLWFiaT02NCAtLXdpdGgtYXJjaC02ND1taXBzNjQgLS13aXRoLXR1bmUtNjQ9bWlwczY0IgorCisjIEFSTXY2KyBhZGRzIGF0b21pYyBpbnN0cnVjdGlvbnMgdGhhdCBhZmZlY3QgdGhlIEFCSSBpbiBsaWJyYXJpZXMgYnVpbHQKKyMgd2l0aCBUVU5FX0NDQVJHUyBpbiBnY2MtcnVudGltZS4gIE1ha2UgdGhlIGNvbXBpbGVyIGRlZmF1bHQgdG8gYQorIyBjb21wYXRpYmxlIGFyY2hpdGVjdHVyZS4gIGFybXY2IGFuZCBhcm12N2EgY292ZXIgdGhlIG1pbmltdW0gdHVuZQorIyBmZWF0dXJlcyB1c2VkIGluIE9FLgorRVhUUkFfT0VDT05GX2FwcGVuZF9hcm12NiA9ICIgLS13aXRoLWFyY2g9YXJtdjYiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2FybXY3YSA9ICIgLS13aXRoLWFyY2g9YXJtdjctYSIKKworRVhUUkFfT0VDT05GX0dDQ19GTE9BVCA/Pz0gIiIKK0NQUEZMQUdTID0gIiIKKworU1lTVEVNSEVBREVSUyA9ICIke3RhcmdldF9pbmNsdWRlZGlyfSIKK1NZU1RFTUxJQlMgPSAiJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKK1NZU1RFTUxJQlMxID0gIiR7dGFyZ2V0X2xpYmRpcn0vIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyB0ZWFjaCBnY2MgdG8gZmluZCBjb3JyZWN0IHRhcmdldCBpbmNsdWRlZGlyIHdoZW4gY2hlY2tpbmcgbGliYyBzc3Agc3VwcG9ydAorCW1rZGlyIC1wICR7Qn0vZ2NjCisJZWNobyAiTkFUSVZFX1NZU1RFTV9IRUFERVJfRElSID0gJHtTWVNURU1IRUFERVJTfSIgPiAke0J9L2djYy90LW9lCisJY2F0ICR7U30vZ2NjL2RlZmF1bHRzLmggfCBncmVwIC12ICJcI2VuZGlmLipHQ0NfREVGQVVMVFNfSCIgPiAke0J9L2djYy9kZWZhdWx0cy5oLm5ldworCWNhdCA+PiR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3IDw8X0VPRgorI2RlZmluZSBOQVRJVkVfU1lTVEVNX0hFQURFUl9ESVIgIiR7U1lTVEVNSEVBREVSU30iCisjZGVmaW5lIFNUQU5EQVJEX1NUQVJURklMRV9QUkVGSVhfMSAiJHtTWVNURU1MSUJTfSIKKyNkZWZpbmUgU1RBTkRBUkRfU1RBUlRGSUxFX1BSRUZJWF8yICIke1NZU1RFTUxJQlMxfSIKKyNkZWZpbmUgU1lTVEVNTElCU19ESVIgIiR7U1lTVEVNTElCU30iCisjZW5kaWYgLyogISBHQ0NfREVGQVVMVFNfSCAqLworX0VPRgorCW12ICR7Qn0vZ2NjL2RlZmF1bHRzLmgubmV3ICR7Qn0vZ2NjL2RlZmF1bHRzLmgKK30KKworZG9fY29uZmlndXJlICgpIHsKKwkjIFNldHVwIHRoZXNlIHZhcnMgZm9yIGNyb3NzIGJ1aWxkaW5nIG9ubHkKKwkjIC4uLiBiZWNhdXNlIGZvb19GT1JfVEFSR0VUIGFwcGFyZW50bHkgZ2V0cyBtaXNpbnRlcnByZXRlZCBpbnNpZGUgdGhlCisJIyBnY2MgYnVpbGQgc3R1ZmYgd2hlbiB0aGUgYnVpbGQgaXMgcHJvZHVjaW5nIGEgY3Jvc3MgY29tcGlsZXIgLSBpLmUuCisJIyB3aGVuIHRoZSAnY3VycmVudCcgdGFyZ2V0IGlzIHRoZSAnaG9zdCcgc3lzdGVtLCBhbmQgdGhlIGhvc3QgaXMgbm90CisJIyB0aGUgdGFyZ2V0IChiZWNhdXNlIHRoZSBidWlsZCBpcyBhY3R1YWxseSBtYWtpbmcgYSBjcm9zcyBjb21waWxlciEpCisJaWYgWyAiJHtCVUlMRF9TWVN9IiAhPSAiJHtIT1NUX1NZU30iIF07IHRoZW4KKwkJZXhwb3J0IENDX0ZPUl9UQVJHRVQ9IiR7Q0N9IgorCQlleHBvcnQgR0NDX0ZPUl9UQVJHRVQ9IiR7Q0N9IgorCQlleHBvcnQgQ1hYX0ZPUl9UQVJHRVQ9IiR7Q1hYfSIKKwkJZXhwb3J0IEFTX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9YXMiCisJCWV4cG9ydCBMRF9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfWxkIgorCQlleHBvcnQgTk1fRk9SX1RBUkdFVD0iJHtIT1NUX1BSRUZJWH1ubSIKKwkJZXhwb3J0IEFSX0ZPUl9UQVJHRVQ9IiR7SE9TVF9QUkVGSVh9YXIiCisJCWV4cG9ydCBHRk9SVFJBTl9GT1JfVEFSR0VUPSJnZm9ydHJhbiIKKwkJZXhwb3J0IFJBTkxJQl9GT1JfVEFSR0VUPSIke0hPU1RfUFJFRklYfXJhbmxpYiIKKwlmaQorCWV4cG9ydCBDQ19GT1JfQlVJTEQ9IiR7QlVJTERfQ0N9IgorCWV4cG9ydCBDWFhfRk9SX0JVSUxEPSIke0JVSUxEX0NYWH0iCisJZXhwb3J0IENGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfTERGTEFHU30iCisJZXhwb3J0IENGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9MREZMQUdTfSIKKworCisJb2VfcnVuY29uZgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRlNDg4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuLmluYwpAQCAtMCwwICsxLDE3NyBAQAoraW5oZXJpdCBjcm9zcy1jYW5hZGlhbgorCitTVU1NQVJZID0gIkdOVSBjYyBhbmQgZ2NjIEMgY29tcGlsZXJzIChjcm9zcy1jYW5hZGlhbiBmb3IgJHtUQVJHRVRfQVJDSH0gdGFyZ2V0KSIKK1BOID0gImdjYy1jcm9zcy1jYW5hZGlhbi0ke1RSQU5TTEFURURfVEFSR0VUX0FSQ0h9IgorCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7SE9TVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstJHtIT1NUX1BSRUZJWH1saWJjLWZvci1nY2MgbmF0aXZlc2RrLWdldHRleHQiCisKK0dDQ01VTFRJTElCID0gIi0tZW5hYmxlLW11bHRpbGliIgorCityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9L25vdC9leGlzdCR7dGFyZ2V0X2luY2x1ZGVkaXJ9L2MrKy8ke0JJTlZ9IFwKKyAgICAtLXdpdGgtYnVpbGQtdGltZS10b29scz0ke1NUQUdJTkdfRElSX05BVElWRX0ke3ByZWZpeF9uYXRpdmV9LyR7VEFSR0VUX1NZU30vYmluIFwKKyAgICAtLXdpdGgtc3lzcm9vdD0vbm90L2V4aXN0IFwKKyAgICAtLXdpdGgtYnVpbGQtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gXAorIgorIyBXZSBoYXZlIHRvIHBvaW50IGdjYyBhdCBhIHN5c3Jvb3QgYnV0IHdlIGRvbid0IG5lZWQgdG8gcmVidWlsZCBpZiB0aGlzIGNoYW5nZXMKKyMgZS5nLiB3ZSBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgbWFjaGluZXMgd2l0aCBkaWZmZXJlbnQgdHVuZXMuCitFWFRSQV9PRUNPTkZfUEFUSFNbdmFyZGVwc2V4Y2x1ZGVdID0gIlRVTkVfUEtHQVJDSCIKK1RBUkdFVF9BUkNIW3ZhcmRlcHNleGNsdWRlXSA9ICJUVU5FX0FSQ0giCitnZXRfZ2NjX2Zsb2F0X3NldHRpbmdbdmFyZGVwdmFsdWVdID0gIiIKKworIworIyBnY2MtY3Jvc3MgbG9va3MgYW5kIGZpbmRzIHRoZXNlIGluICR7ZXhlY19wcmVmaXh9IGJ1dCB3ZSdyZSBub3Qgc28gbHVja3kKKyMgZm9yIHRoZSBzZGsuIEhhcmRjb2RpbmcgdGhlIHBhdGhzIGVuc3VyZXMgdGhlIGJ1aWxkIGRvZXNuJ3QgZ28gY2FuYWRpYW4gb3Igd29yc2UuCisjCitleHBvcnQgQVJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXIiCitleHBvcnQgQVNfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9YXMiCitleHBvcnQgRExMVE9PTF9GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1kbGx0b29sIgorZXhwb3J0IENDX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfWdjYyIKK2V4cG9ydCBDWFhfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9ZysrIgorZXhwb3J0IEdDQ19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1nY2MiCitleHBvcnQgTERfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9bGQiCitleHBvcnQgTElQT19GT1JfVEFSR0VUID0gIiR7VEFSR0VUX1BSRUZJWH1saXBvIgorZXhwb3J0IE5NX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfW5tIgorZXhwb3J0IE9CSkRVTVBfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9b2JqZHVtcCIKK2V4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9cmFubGliIgorZXhwb3J0IFNUUklQX0ZPUl9UQVJHRVQgPSAiJHtUQVJHRVRfUFJFRklYfXN0cmlwIgorZXhwb3J0IFdJTkRSRVNfRk9SX1RBUkdFVCA9ICIke1RBUkdFVF9QUkVGSVh9d2luZHJlcyIKKworIworIyBXZSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgYW5kIG1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgY2FuIGZpbmQgc3RhZ2luZworIworZXhwb3J0IEFSQ0hfRkxBR1NfRk9SX1RBUkdFVCA9ICItLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IgorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBDQ19GT1JfQlVJTEQ9IiR7QlVJTERfQ0N9IgorCWV4cG9ydCBDWFhfRk9SX0JVSUxEPSIke0JVSUxEX0NYWH0iCisJZXhwb3J0IENGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfQ0ZMQUdTfSIKKwlleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX0JVSUxEPSIke0JVSUxEX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfQlVJTEQ9IiR7QlVJTERfTERGTEFHU30iCisJZXhwb3J0IENGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DRkxBR1N9IgorCWV4cG9ydCBDUFBGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9DUFBGTEFHU30iCisJZXhwb3J0IENYWEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NYWEZMQUdTfSIKKwlleHBvcnQgTERGTEFHU19GT1JfVEFSR0VUPSIke1RBUkdFVF9MREZMQUdTfSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgYWxsLWhvc3QgY29uZmlndXJlLXRhcmdldC1saWJnY2MKK30KKworIyBIYXZpbmcgYW55dGhpbmcgYXV0byBkZXBlbmRpbmcgb24gZ2NjLWNyb3NzLXNkayBpcyBhIHJlYWxseSBiYWQgaWRlYS4uLgorRVhDTFVERV9GUk9NX1NITElCUyA9ICIxIgorCitQQUNLQUdFUyA9ICIke1BOfS1kYmcgJHtQTn0gJHtQTn0tZG9jIgorCitGSUxFU18ke1BOfSA9ICJcCisgICAgJHtleGVjX3ByZWZpeH0vYmluLyogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LyoubyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS1maXhlZCBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vaW5jbHVkZS8gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2d0eXBlLiogXAorICAgICR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorICAgICR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2Jpbi8qIFwKKyAgICAke3ByZWZpeH0vJHtUQVJHRVRfU1lTfS9saWIvKiBcCisgICAgJHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vdXNyL2luY2x1ZGUvKiBcCisiCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9Ly5kZWJ1ZyBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi8uZGVidWcgXAorIgorCitGSUxFU18ke1BOfS1kb2MgPSAiXAorICAgICR7aW5mb2Rpcn0gXAorICAgICR7bWFuZGlyfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlL1JFQURNRSBcCisiCisKK0VYRUVYVCA9ICIiCisKKyMgQ29tcHV0ZSBob3cgdG8gZ2V0IGZyb20gbGliZXhlY2RpciB0byBiaW5kaXIgaW4gcHl0aG9uIChlYXNpZXIgdGhhbiBzaGVsbCkKK0JJTlJFTFBBVEggPSAiJHtAb3MucGF0aC5yZWxwYXRoKGQuZXhwYW5kKCIke2JpbmRpcn0iKSwgZC5leHBhbmQoIiR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfSIpKX0iCisKK2RvX2luc3RhbGwgKCkgeworCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oICkKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtaG9zdAorCisJIyBDbGVhbnVwIHNvbWUgb2YgdGhlICR7bGliZGlyfXssZXhlY30vZ2NjIHN0dWZmIC4uLgorCXJtIC1yICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbnN0YWxsLXRvb2xzCisJcm0gLXIgJHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbnN0YWxsLXRvb2xzCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9maW5jbHVkZQorCisJIyBXZSBjYXJlIGFib3V0IGcrKyBub3QgYysrCisJcm0gLWYgJHtEfSR7YmluZGlyfS8qYysrCisKKwkjIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGdjYy08dmVyc2lvbj4gY29waWVzCisJcm0gLWYgJHtEfSR7YmluZGlyfS8qZ2NjLT8uPyoKKworCSMgV2UgdXNlIGxpYmliZXJ0eSBmcm9tIGJpbnV0aWxzCisJcm0gLWYgJHtEfSR7cHJlZml4fS8ke1RBUkdFVF9TWVN9L2xpYi9saWJpYmVydHkuYQorCSMgTm90IHN1cmUgd2hlcmUgdGhlIHN0cmFuZ2UgcGF0aHMgY29tZSBmcm9tCisJcm0gLWYgJHtEfSR7bGliZGlyfS8uLi9saWIvbGliaWJlcnR5LmEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmliZXJ0eS5hCisKKwkjIENsZWFudXAgZW1wdHkgZGlyZWN0b3JpZXMgd2hpY2ggYXJlIG5vdCBzaGlwcGVkCisJIyB3ZSB1c2Ugcm1kaXIgaW5zdGVhZCBvZiAncm0gLWYnIHRvIGVuc3VyZSB0aGUgbm9uIGVtcHR5IGRpcmVjdG9yaWVzIGFyZSBub3QgZGVsZXRlZAorCSMgJHtEfSR7bGliZGlyfS8uLi9saWIgb25seSBzZWVtcyB0byBhcHBlYXIgd2l0aCBTREtNQUNISU5FPWk2ODYKKwlsb2NhbCBlbXB0eV9kaXJzPSIke0R9JHtsaWJkaXJ9Ly4uL2xpYiAke0R9JHtwcmVmaXh9LyR7VEFSR0VUX1NZU30vbGliICR7RH0ke3ByZWZpeH0vJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfSIKKwlmb3IgaSBpbiAkZW1wdHlfZGlyczsgZG8KKwkJWyAtZCAkaSBdICYmIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICRpCisJZG9uZQorCisJIyBJbnNlcnQgc3ltbGlua3MgaW50byBsaWJleGVjIHNvIHdoZW4gdG9vbHMgd2l0aG91dCBhIHByZWZpeCBhcmUgc2VhcmNoZWQgZm9yLCB0aGUgY29ycmVjdCBvbmVzIGFyZQorCSMgZm91bmQuCisJZGVzdD0ke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LworCWluc3RhbGwgLWQgJGRlc3QKKwlzdWZmaXg9JHtFWEVFWFR9CisJZm9yIHQgaW4gYXIgYXMgbGQgbm0gb2JqY29weSBvYmpkdW1wIHJhbmxpYiBzdHJpcCBnNzcgZ2NjIGNwcCBnZm9ydHJhbjsgZG8KKwkJaWYgWyAiJHQiID0gImc3NyIgLW8gIiR0IiA9ICJnZm9ydHJhbiIgXSAmJiBbICEgLWUgJHtEfSR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9JHQkc3VmZml4IF07IHRoZW4KKwkJCWNvbnRpbnVlCisJCWZpCisKKwkJbG4gLXNmICR7QklOUkVMUEFUSH0vJHtUQVJHRVRfUFJFRklYfSR0JHN1ZmZpeCAkZGVzdCR0JHN1ZmZpeAorCWRvbmUKKwl0PXJlYWwtbGQKKwlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9bGQkc3VmZml4ICRkZXN0JHQkc3VmZml4CisKKwkjIGxpYnF1YWRtYXRoIGhlYWRlcnMgbmVlZCB0byAgYmUgYXZhaWxhYmxlIGluIHRoZSBnY2MgbGliZXhlYyBkaXIKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGguaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKwljcCAke1N9L2xpYnF1YWRtYXRoL3F1YWRtYXRoX3dlYWsuaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9CisJCisJY3Jvc3NfY2FuYWRpYW5fYmluZGlybGlua3MKK30KKworRUxGVVRJTFMgPSAibmF0aXZlc2RrLWVsZnV0aWxzIgorREVQRU5EUyArPSAibmF0aXZlc2RrLWdtcCBuYXRpdmVzZGstbXBmciBuYXRpdmVzZGstbGlibXBjICR7RUxGVVRJTFN9IG5hdGl2ZXNkay16bGliIgorUkRFUEVORFNfJHtQTn0gKz0gIm5hdGl2ZXNkay1tcGZyIG5hdGl2ZXNkay1saWJtcGMgJHtFTEZVVElMU30iCisKK1NZU1RFTUhFQURFUlMgPSAiL3Vzci9pbmNsdWRlIgorU1lTVEVNTElCUyA9ICIke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorU1lTVEVNTElCUzEgPSAiJHt0YXJnZXRfbGliZGlyfS8iCisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtcG9pc29uLXN5c3RlbS1kaXJlY3RvcmllcyIKKworRVhUUkFfT0VDT05GICs9ICJcCisgICAgLS13aXRoLW1wZnI9JHtTVEFHSU5HX0RJUl9IT1NUfSR7bGF5b3V0X2V4ZWNfcHJlZml4fSBcCisgICAgLS13aXRoLW1wYz0ke1NUQUdJTkdfRElSX0hPU1R9JHtsYXlvdXRfZXhlY19wcmVmaXh9IFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saWJjLWJhcmVtZXRhbCA9ICIgLS13aXRob3V0LWhlYWRlcnMiCitFWFRSQV9PRUNPTkZfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsID0gIi0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QiCitFWFRSQV9PRUNPTkZfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsID0gIi0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSIKKworIyBnY2MgNC43IG5lZWRzIC1pc3lzdGVtCitleHBvcnQgQVJDSF9GTEFHU19GT1JfVEFSR0VUID0gIi0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0gLWlzeXN0ZW09JHt0YXJnZXRfaW5jbHVkZWRpcn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1M2M1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOC5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1M2M1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzQuOS5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1jYW5hZGlhbl81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1M2M1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWNhbmFkaWFuXzUuMi5iYgpAQCAtMCwwICsxLDUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MtY2FuYWRpYW4uaW5jCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTc0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsLmluYwpAQCAtMCwwICsxLDk2IEBACitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbCIKK1BBQ0tBR0VTID0gIiIKKworSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUE4gPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCisKK0NST1NTX1RBUkdFVF9TWVNfRElSX2FwcGVuZCA9ICIuJHtQTn0iCisKKyMgVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBhIC12ZXJ5LSBiYXNpYyBjb25maWcKKyMgc3lzcm9vdCBpcyBuZWVkZWQgaW4gY2FzZSB3ZSB1c2UgbGliYy1pbml0aWFsCitFWFRSQV9PRUNPTkYgPSAiXAorICAgIC0td2l0aC1uZXdsaWIgXAorICAgIC0td2l0aG91dC1oZWFkZXJzIFwKKyAgICAtLWRpc2FibGUtc2hhcmVkIFwKKyAgICAtLWRpc2FibGUtdGhyZWFkcyBcCisgICAgLS1kaXNhYmxlLW11bHRpbGliIFwKKyAgICAtLWRpc2FibGUtX19jeGFfYXRleGl0IFwKKyAgICAtLWVuYWJsZS1sYW5ndWFnZXM9YyBcCisgICAgJHtPUFRTUEFDRX0gXAorICAgIC0tcHJvZ3JhbS1wcmVmaXg9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtHQ0NDUk9TU19CVUlMRFNZU1JPT1R9IFwKKyAgICAke0VYVFJBX09FQ09ORl9JTklUSUFMfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsZC1pcy1nb2xkJywgJy0td2l0aC1sZD0ke1NUQUdJTkdfQklORElSX1RPT0xDSEFJTn0vJHtUQVJHRVRfUFJFRklYfWxkLmJmZCcsICcnLCBkKX0gXAorICAgICR7RVhUUkFfT0VDT05GX0dDQ19GTE9BVH0gXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1uYXRpdmUtc3lzdGVtLWhlYWRlci1kaXI9JHtTWVNURU1IRUFERVJTfSIKKworR0NDQ1JPU1NfQlVJTERTWVNST09UID0gIiR7Qn0vdG1wc3lzcm9vdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXN5c3I9JHtHQ0NDUk9TU19CVUlMRFNZU1JPT1R9JHt0YXJnZXRfaW5jbHVkZWRpcn0KKwlta2RpciAtcCAkc3lzcgorCWZvciB0IGluIGxpbnV4IGFzbSBhc20tZ2VuZXJpYzsgZG8KKwkJcm0gLWYgJHN5c3IvJHQKKwkJbG4gLXMgJHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfaW5jbHVkZWRpcn0vJHQgJHN5c3IvCisJZG9uZQorfQorCitkb19jb21waWxlICgpIHsKKyAgICBvZV9ydW5tYWtlIGFsbC1nY2MgY29uZmlndXJlLXRhcmdldC1saWJnY2MKK30KK2RvX2luc3RhbGwgKCkgeworCSggY2QgJHtCfS8ke1RBUkdFVF9TWVN9L2xpYmdjYzsgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsLXVud2luZF9oICkKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtZ2NjCisKKwkjIFdlIGRvbid0IHJlYWxseSBuZWVkIHRoaXMgKGhlcmUgc2hhcmVzLyBjb250YWlucyBtYW4vLCBpbmZvLywgbG9jYWxlLykuCisJcm0gLXJmICR7RH0ke2RhdGFkaXJ9LworCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYiAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIEluc2VydCBzeW1saW5rcyBpbnRvIGxpYmV4ZWMgc28gd2hlbiB0b29scyB3aXRob3V0IGEgcHJlZml4IGFyZSBzZWFyY2hlZCBmb3IsIHRoZSBjb3JyZWN0IG9uZXMgYXJlCisJIyBmb3VuZC4gVGhlc2UgbmVlZCB0byBiZSByZWxhdGl2ZSBwYXRocyBzbyB0aGV5IHdvcmsgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4KKwlkZXN0PSR7RH0ke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vCisJaW5zdGFsbCAtZCAkZGVzdAorCXVzZWxkPSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGQtaXMtZ29sZCcsICcuYmZkJywgJycsIGQpfQorCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH1sZCR7dXNlbGR9ICR7ZGVzdH1sZAorCWZvciB0IGluIGFyIGFzIG5tIG9iamNvcHkgb2JqZHVtcCByYW5saWIgc3RyaXAgZzc3IGdjYyBjcHAgZ2ZvcnRyYW47IGRvCisJCWxuIC1zZiAke0JJTlJFTFBBVEh9LyR7VEFSR0VUX1BSRUZJWH0kdCAkZGVzdCR0CisJZG9uZQorCSMgZml4ZWQgbGltaXRzLmggaW5mYWN0IGluY2x1ZGVzIHRoZSBzbyBjYWxsZWQgcmVhbCBsaW1pdHMuaAorCSMgd2hpY2ggc2hvdWxkIGNvbWUgZnJvbSBsaWJjIGJ1dCB3aGVuIHdlIGJ1aWxkIGxpYmMtaW5pdGlhbAorCSMgdGhlbiBidW5jaCBvZiBjb25maWd1cmUgdGVzdHMgaW5jbHVkZSBmaXhlZCBsaW1pdHMuaCB3aGljaCBpbiB0dXJuCisJIyBpbmNsdWRlcyByZWFsIGxpbWl0cy5oIGJ1dCB0aGlzIHJlYWwgbGltaXRzLmggaXMgbm90IHN0YWdlZCB5ZXQKKwkjIHNvIHdlIG92ZXJ3aXJ0ZSB0aGUgZ2VuZXJhdGVkIGluY2x1ZGUtZml4ZWQvbGltaXRzLmggZm9yIGdjYy1jcm9zcy1pbml0aWFsCisJIyB0byBnZXQgcmlkIHJlZmVyZW5jZXMgdG8gcmVhbCBsaW1pdHMuaAorCWNwIGdjYy9pbmNsdWRlLWZpeGVkL2xpbWl0cy5oICR7RH0ke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvbGltaXRzLmgKKworCSMgZ2NjLXJ1bnRpbWUgaW5zdGFsbHMgbGliZ2NjIGludG8gYSBzcGVjaWFsIGxvY2F0aW9uIGluIHN0YWdpbmcgc2luY2UgaXQgYnJlYWtzIGRvaW5nIGEgc3RhbmRhbG9uZSBidWlsZAorCWNhc2UgJHtQTn0gaW4KKwkJKmdjYy1jcm9zcy1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstaW5pdGlhbC0ke1RBUkdFVF9BUkNIfSkKKwkJCWRlc3Q9JHtEfS8ke2luY2x1ZGVkaXJ9L2djYy1idWlsZC1pbnRlcm5hbC1pbml0aWFsLSR7VEFSR0VUX1NZU30KKwkJCWhhcmRsaW5rZGlyIC4gJGRlc3QKKwkJOzsKKwllc2FjCit9CisjCisjIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHN5c3Jvb3Qgc3RhZ2luZyBjb3B5IHNpbmNlIHRoaXMgd29uJ3QgbG9vayBsaWtlIGEgdGFyZ2V0IHN5c3RlbQorIworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KKwlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2Jhc2VfbGliZGlyfS8KKwlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2xpYmRpcn0vCisJbXYgJHtTWVNST09UX0RFU1RESVJ9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LyogJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHt0YXJnZXRfYmFzZV9saWJkaXJ9LyB8fCB0cnVlCisJbXYgJHtTWVNST09UX0RFU1RESVJ9JHt0YXJnZXRfbGliZGlyfS8qICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2xpYmRpcn0vIHx8IHRydWUKK30KKworZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtaW5wdXRkaXJzXSA9ICIke1NZU1JPT1RfREVTVERJUn0vJHtTVEFHSU5HX0RJUl9IT1NUfS8gJHtTWVNST09UX0RFU1RESVJ9LyR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke3RhcmdldF9iYXNlX2xpYmRpcn0vIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtzc3RhdGUtb3V0cHV0ZGlyc10gPSAiJHtTVEFHSU5HX0RJUl9IT1NUfS8gJHtTVEFHSU5HX0RJUl9UQ0JPT1RTVFJBUH0vJHt0YXJnZXRfYmFzZV9saWJkaXJ9LyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzczZTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM3M2U1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNC45LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3NzLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNzNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zcy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTA2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy5pbmMKQEAgLTAsMCArMSwxOTggQEAKK2luaGVyaXQgY3Jvc3MKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKK0VYVFJBREVQRU5EUyA9ICIiCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyAke0VYVFJBREVQRU5EU30gJHtOQVRJVkVERVBTfSIKK1BST1ZJREVTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiCitweXRob24gKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQVJHRVRfT1MiLCBUcnVlKS5zdGFydHN3aXRoKCJsaW51eCIpOgorICAgICAgICBkLnNldFZhcigiRVhUUkFERVBFTkRTIiwgImxpbnV4LWxpYmMtaGVhZGVycyIpCit9CisKK1BOID0gImdjYy1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKKworcmVxdWlyZSBnY2MtY29uZmlndXJlLWNvbW1vbi5pbmMKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1wb2lzb24tc3lzdGVtLWRpcmVjdG9yaWVzIgorRVhUUkFfT0VDT05GX2FwcGVuZF9zaDQgPSAiIFwKKyAgICAtLXdpdGgtbXVsdGlsaWItbGlzdD0gXAorICAgIC0tZW5hYmxlLWluY29tcGxldGUtdGFyZ2V0cyBcCisiCisKK0VYVFJBX09FQ09ORiArPSAiXAorICAgIC0td2l0aC1tcGZyPSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0gXAorICAgIC0td2l0aC1zeXN0ZW0temxpYiBcCisiCisKK0RFUEVORFNfcmVtb3ZlX2xpYmMtYmFyZW1ldGFsIDo9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1saWJjLWZvci1nY2MiCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtYmFyZW1ldGFsID0gIiAtLXdpdGhvdXQtaGVhZGVycyIKK0VYVFJBX09FQ09ORl9yZW1vdmVfbGliYy1iYXJlbWV0YWwgPSAiLS1lbmFibGUtdGhyZWFkcz1wb3NpeCIKKworRVhUUkFfT0VDT05GX1BBVEhTID0gIlwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPS9ub3QvZXhpc3Qke3RhcmdldF9pbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworQVJDSF9GTEFHU19GT1JfVEFSR0VUICs9ICItaXN5c3RlbSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9IgorCitkb19jb21waWxlICgpIHsKKwlleHBvcnQgQ0M9IiR7QlVJTERfQ0N9IgorCWV4cG9ydCBBUl9GT1JfVEFSR0VUPSIke1RBUkdFVF9TWVN9LWFyIgorCWV4cG9ydCBSQU5MSUJfRk9SX1RBUkdFVD0iJHtUQVJHRVRfU1lTfS1yYW5saWIiCisJZXhwb3J0IExEX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tbGQiCisJZXhwb3J0IE5NX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX1NZU30tbm0iCisJZXhwb3J0IENDX0ZPUl9UQVJHRVQ9IiR7Q0NBQ0hFfSAke1RBUkdFVF9TWVN9LWdjYyIKKwlleHBvcnQgQ0ZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NGTEFHU30iCisJZXhwb3J0IENQUEZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0NQUEZMQUdTfSIKKwlleHBvcnQgQ1hYRkxBR1NfRk9SX1RBUkdFVD0iJHtUQVJHRVRfQ1hYRkxBR1N9IgorCWV4cG9ydCBMREZMQUdTX0ZPUl9UQVJHRVQ9IiR7VEFSR0VUX0xERkxBR1N9IgorCisJb2VfcnVubWFrZSBhbGwtaG9zdCBjb25maWd1cmUtdGFyZ2V0LWxpYmdjYworCSMgbm93IGdlbmVyYXRlIHNjcmlwdCB0byBkcml2ZSB0ZXN0aW5nCisJZWNobyAiIyEvdXNyL2Jpbi9lbnYgc2giID4ke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2V0ID4+ICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwkjIHBydW5lIG91dCB0aGUgdW5uZWVkZWQgdmFycworCXNlZCAtaSAtZSAiL15CQVNIL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eVVNFUi9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXk9QVC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkRJUlNUQUNLL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eRVVJRC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkZVTkNOQU1FL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eR1JPVVBTL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eSE9TVC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXkhPTUUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15JRlMvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MQ19BTEwvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15MT0dOQU1FL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eTUFDSFRZUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15PU1RZUEUvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QSVBFL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eU0hFTEwvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL14nL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eVUlEL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eVEVSTS9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBBVENIX0dFVC9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBLR18vZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QT1NJWExZXy9kIiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjCisJc2VkIC1pIC1lICIvXlBQSUQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15QUzQvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15RL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eU0hMVkwvZCIgJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCXNlZCAtaSAtZSAiL15TVEFHSU5HL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eTERfTElCUkFSWV9QQVRIL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKwlzZWQgLWkgLWUgIi9eUFNFVURPL2QiICR7Qn0vJHtUQVJHRVRfUFJFRklYfXRlc3RnY2MKKworCSMgYXBwZW5kIGV4ZWN1dGlvbiBwYXJ0IG9mIHRoZSBzY3JpcHQKK2NhdCA+PiAke0J9LyR7VEFSR0VUX1BSRUZJWH10ZXN0Z2NjIDw8IFNUT1AKK3RhcmdldD0iXCQxIgordXNhZ2UgKCkgeworCWVjaG8gIlVzYWdlOiIKKwllY2hvICJcJDAgdXNlckB0YXJnZXQgJ2V4dHJhIG9wdGlvbnMgdG8gZGVqYWdudSciCisJZWNobyAiXCQwIHRhcmdldCAnZXh0cmEgb3B0aW9ucyB0byBkZWphZ251JyIKKwllY2hvICJcJDAgdGFyZ2V0IgorCWVjaG8gImUuZy4gXCQwIDE5Mi4xNjguNy4yICcgZGcuZXhwPXZpc2liaWxpdHktZC5jJyIKKwllY2hvICJ3aWxsIG9ubHkgcnVuIHZpc2liaWxpdHktZC5jIHRlc3QgY2FzZSIKKwllY2hvICJlLmcuIFwkMCAxOTIuMTY4LjcuMiAnLy1tdGh1bWIgZGcuZXhwPXZpc2liaWxpdHktZC5jJyIKKwllY2hvICJ3aWxsIG9ubHkgcnVuIHZpc2liaWxpdHktZC5jIHRlc3QgY2FzZSBpbiB0aHVtYiBtb2RlIgorCWVjaG8gIllvdSBuZWVkIHRvIGhhdmUgZGVqYWdudSBhdXRvZ2VuIGV4cGVjdCBpbnN0YWxsZWQiCisJZWNobyAib24gdGhlIGJ1aWxkIGhvc3QiCisgICAgfQoraWYgWyAieFwkdGFyZ2V0IiA9ICJ4IiBdCit0aGVuCisJZWNobyAiUGxlYXNlIHNwZWNpZnkgdGhlIHRhcmdldCBtYWNoaW5lIGFuZCByZW1vdGUgdXNlciBpbiBmb3JtIG9mIHVzZXJAdGFyZ2V0XG4iCisJdXNhZ2UKKwlleGl0IDE7CitmaQorCitzaGlmdAorCitlY2hvICJcJHRhcmdldCIgfCBncmVwICJAIiAyPiYxID4gL2Rldi9udWxsCitpZiBbICJ4XCQ/IiA9ICJ4MCIgXQordGhlbgorICAgdXNlcj1cJChlY2hvIFwkdGFyZ2V0IHwgY3V0IC1kICdAJyAtZiAxKQorICAgdGFyZ2V0PVwkKGVjaG8gXCR0YXJnZXQgfCBjdXQgLWQgJ0AnIC1mIDIpCitlbHNlCisgICB1c2VyPVwkVVNFUgorZmkKK3NzaCBcJHVzZXJAXCR0YXJnZXQgZGF0ZSAyPiYxID4gL2Rldi9udWxsCitpZiBbICJ4XCQ/IiAhPSAieDAiIF0KK3RoZW4KKwllY2hvICJGYWlsZWQgY29ubmVjdGluZyB0byBcJHVzZXJAXCR0YXJnZXQgaXQgY291bGQgYmUgYmVjYXVzZSIKKwllY2hvICJ5b3UgZG9uJ3QgaGF2ZSBwYXNzd29yZGxlc3Mgc3NoIHNldHVwIHRvIGFjY2VzcyBcJHRhcmdldCIKKwllY2hvICJvciBzb21ldGltZXMgaG9zdCBrZXkgaGFzIGJlZW4gY2hhbmdlZCIKKwllY2hvICJpbiBzdWNoIGNhc2UgZG8gc29tZXRoaW5nIGxpa2UgYmVsb3cgb24gYnVpbGQgaG9zdCIKKwllY2hvICJzc2gta2V5Z2VuIC1mICJ+Ly5zc2gva25vd25faG9zdHMiIC1SIFwkdGFyZ2V0IgorCWVjaG8gImFuZCB0aGVuIHRyeSBzc2ggXCR1c2VyQFwkdGFyZ2V0IgorCisJdXNhZ2UKKwlleGl0IDEKK2ZpCisJZWNobyAibGFwcGVuZCBib2FyZHNfZGlyIFtwd2RdLy4uLy4uLy4uIiA+ICR7Qn0vc2l0ZS5leHAKKwllY2hvICJsb2FkX2dlbmVyaWNfY29uZmlnIFwidW5peFwiIiA+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIHVzZXJuYW1lIFwkdXNlciIgPj4gJHtCfS8ke1BBQ0tBR0VfQVJDSH0uZXhwCisJZWNobyAic2V0X2JvYXJkX2luZm8gcnNoX3Byb2cgc3NoIiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwllY2hvICJzZXRfYm9hcmRfaW5mbyByY3BfcHJvZyBzY3AiID4+ICR7Qn0vJHtQQUNLQUdFX0FSQ0h9LmV4cAorCWVjaG8gInNldF9ib2FyZF9pbmZvIGhvc3RuYW1lIFwkdGFyZ2V0IiA+PiAke0J9LyR7UEFDS0FHRV9BUkNIfS5leHAKKwlERUpBR05VPSR7Qn0vc2l0ZS5leHAgbWFrZSAtayBjaGVjayBSVU5URVNURkxBR1M9Ii0tdGFyZ2V0X2JvYXJkPSR7UEFDS0FHRV9BUkNIfVwkQCIKKworU1RPUAorCisJY2htb2QgK3ggJHtCfS8ke1RBUkdFVF9QUkVGSVh9dGVzdGdjYworCit9CisKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorCisjIENvbXB1dGUgaG93IHRvIGdldCBmcm9tIGxpYmV4ZWNkaXIgdG8gYmluZGlyIGluIHB5dGhvbiAoZWFzaWVyIHRoYW4gc2hlbGwpCitCSU5SRUxQQVRIID0gIiR7QG9zLnBhdGgucmVscGF0aChkLmV4cGFuZCgiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfU1lTfSIpLCBkLmV4cGFuZCgiJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9IikpfSIKKworZG9faW5zdGFsbCAoKSB7CisJKCBjZCAke0J9LyR7VEFSR0VUX1NZU30vbGliZ2NjOyBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtdW53aW5kX2ggKQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbC1ob3N0CisKKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9iYXNlX2xpYmRpcn0KKwlpbnN0YWxsIC1kICR7RH0ke3RhcmdldF9saWJkaXJ9CisgICAgCisJIyBMaW5rIGdmb3J0cmFuIHRvIGc3NyB0byBzYXRpc2Z5IG5vdC1zby1zbWFydCBjb25maWd1cmUgb3IgaGFyZCBjb2RlZCBnNzcKKwkjIGdmb3J0cmFuIGlzIGZ1bGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlLiBUaGlzIGlzIGEgc2FmZSBhbmQgcHJhY3RpY2FsIHNvbHV0aW9uLiAKKwlsbiAtc2YgJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtwcmVmaXhfbmF0aXZlfS9iaW4vJHtUQVJHRVRfUFJFRklYfWdmb3J0cmFuICR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vYmluLyR7VEFSR0VUX1BSRUZJWH1nNzcgfHwgdHJ1ZQorCisJCisJIyBJbnNlcnQgc3ltbGlua3MgaW50byBsaWJleGVjIHNvIHdoZW4gdG9vbHMgd2l0aG91dCBhIHByZWZpeCBhcmUgc2VhcmNoZWQgZm9yLCB0aGUgY29ycmVjdCBvbmVzIGFyZQorCSMgZm91bmQuIFRoZXNlIG5lZWQgdG8gYmUgcmVsYXRpdmUgcGF0aHMgc28gdGhleSB3b3JrIGluIGRpZmZlcmVudCBsb2NhdGlvbnMuCisJZGVzdD0ke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9LworCWluc3RhbGwgLWQgJGRlc3QKKwlmb3IgdCBpbiBhciBhcyBsZCBubSBvYmpjb3B5IG9iamR1bXAgcmFubGliIHN0cmlwIGc3NyBnY2MgY3BwIGdmb3J0cmFuOyBkbworCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJGRlc3QkdAorCQlsbiAtc2YgJHtCSU5SRUxQQVRIfS8ke1RBUkdFVF9QUkVGSVh9JHQgJHtkZXN0fSR7VEFSR0VUX1BSRUZJWH0kdAorCWRvbmUKKworCSMgUmVtb3ZlIHRoaW5ncyB3ZSBkb24ndCBuZWVkIGJ1dCBrZWVwIHNoYXJlL2phdmEKKwlmb3IgZCBpbiBpbmZvIG1hbiBzaGFyZS9kb2Mgc2hhcmUvbG9jYWxlIHNoYXJlL21hbiBzaGFyZS9pbmZvOyBkbworCQlybSAtcmYgJHtEfSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7cHJlZml4X25hdGl2ZX0vJGQKKwlkb25lCisKKwkjIGxpYnF1YWRtYXRoIGhlYWRlcnMgbmVlZCB0byAgYmUgYXZhaWxhYmxlIGluIHRoZSBnY2MgbGliZXhlYyBkaXIKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLworCWNwICR7U30vbGlicXVhZG1hdGgvcXVhZG1hdGguaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKwljcCAke1N9L2xpYnF1YWRtYXRoL3F1YWRtYXRoX3dlYWsuaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKworCSMgV2UgdXNlIGxpYmliZXJ0eSBmcm9tIGJpbnV0aWxzCisJZmluZCAke0R9JHtleGVjX3ByZWZpeH0vbGliIC1uYW1lIGxpYmliZXJ0eS5hIHwgeGFyZ3Mgcm0gLWYKKwlmaW5kICR7RH0ke2V4ZWNfcHJlZml4fS9saWIgLW5hbWUgbGliaWJlcnR5LmggfCB4YXJncyBybSAtZgorCisJIyBnY2MtcnVudGltZSBpbnN0YWxscyBsaWJnY2MgaW50byBhIHNwZWNpYWwgbG9jYXRpb24gaW4gc3RhZ2luZyBzaW5jZSBpdCBicmVha3MgZG9pbmcgYSBzdGFuZGFsb25lIGJ1aWxkCisJY2FzZSAke1BOfSBpbgorCQkqZ2NjLWNyb3NzLSR7VEFSR0VUX0FSQ0h9fCpnY2MtY3Jvc3NzZGstJHtUQVJHRVRfQVJDSH0pCisJCQlkZXN0PSR7RH0vJHtpbmNsdWRlZGlyfS9nY2MtYnVpbGQtaW50ZXJuYWwtJHtUQVJHRVRfU1lTfQorCQkJaGFyZGxpbmtkaXIgLiAkZGVzdAorCQk7OworCWVzYWMKK30KKworZG9fcGFja2FnZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlZGF0YVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2lwa1tub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltub2V4ZWNdID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzY2NhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtY3Jvc3MuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNjY2EwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1jcm9zcy5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0M2NjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc181LjIuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLWNyb3NzLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjU5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsLmluYwpAQCAtMCwwICsxLDEwIEBACitpbmhlcml0IGNyb3Nzc2RrCisKK1BOID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorCitTWVNURU1IRUFERVJTID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30vIgorU1lTVEVNTElCUzEgPSAiJHtTREtQQVRITkFUSVZFfSR7bGliZGlyX25hdGl2ZXNka30vIgorCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWJpbnV0aWxzLWNyb3Nzc2RrIGdldHRleHQtbmF0aXZlICR7TkFUSVZFREVQU30iCitQUk9WSURFUyA9ICJ2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nY2MtaW5pdGlhbC1jcm9zc3NkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5MGUxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNC44LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3MtaW5pdGlhbF8ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGstaW5pdGlhbC5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkwZTExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGstaW5pdGlhbF80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zcy1pbml0aWFsXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay1pbml0aWFsLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLWluaXRpYWxfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTBlMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nkay1pbml0aWFsXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzLWluaXRpYWxfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLWluaXRpYWwuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Y4ODBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGsuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK2luaGVyaXQgY3Jvc3NzZGsKKworUE4gPSAiZ2NjLWNyb3Nzc2RrLSR7VEFSR0VUX0FSQ0h9IgorCitTWVNURU1IRUFERVJTID0gIiR7U0RLUEFUSE5BVElWRX0ke3ByZWZpeF9uYXRpdmVzZGt9L2luY2x1ZGUiCitTWVNURU1MSUJTID0gIiR7U0RLUEFUSE5BVElWRX0ke2Jhc2VfbGliZGlyX25hdGl2ZXNka30vIgorU1lTVEVNTElCUzEgPSAiJHtTREtQQVRITkFUSVZFfSR7bGliZGlyX25hdGl2ZXNka30vIgorCitHQ0NNVUxUSUxJQiA9ICItLWRpc2FibGUtbXVsdGlsaWIiCisKK0RFUEVORFMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9YmludXRpbHMtY3Jvc3NzZGsgdmlydHVhbC9uYXRpdmVzZGstJHtUQVJHRVRfUFJFRklYfWxpYmMtZm9yLWdjYyBnZXR0ZXh0LW5hdGl2ZSAke05BVElWRURFUFN9IgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Z2NjLWNyb3Nzc2RrIHZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWcrKy1jcm9zc3NkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE2YzRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NfJHtQVn0uYmIKK3JlcXVpcmUgZ2NjLWNyb3Nzc2RrLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtY3Jvc3NzZGtfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTZjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka180LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc18ke1BWfS5iYgorcmVxdWlyZSBnY2MtY3Jvc3NzZGsuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1jcm9zc3Nka181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3Nzc2RrXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLWNyb3NzXyR7UFZ9LmJiCityZXF1aXJlIGdjYy1jcm9zc3Nkay5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLW11bHRpbGliLWNvbmZpZy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1tdWx0aWxpYi1jb25maWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjlmNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1tdWx0aWxpYi1jb25maWcuaW5jCkBAIC0wLDAgKzEsMjI3IEBACisjIGZvbGxvd2luZyBjb2RlIG1vZGlmaWVzIHRoZXNlIGRlZmluaXRpb25zIGluIHRoZSBnY2MgY29uZmlnCisjICAgIE1VTFRJTElCX09QVElPTlMKKyMgICAgTVVMVElMSUJfRElSTkFNRVMKKyMgICAgTVVMVElMSUJfT1NESVJOQU1FUworIyAgICBHTElCQ19EWU5BTUlDX0xJTktFUjMyCisjICAgIEdMSUJDX0RZTkFNSUNfTElOS0VSNjQKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJYMzIKKyMgICAgR0xJQkNfRFlOQU1JQ19MSU5LRVJOMzIKKyMgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzZSBvZiB0aGVzZSB2YXJpYWJsZXMgbG9vayBhdCB0aGVzZSBmaWxlcyBpbiB0aGUgZ2NjIHNvdXJjZSBjb2RlCisjICAgIGdjYy9jb25maWcvaTM4Ni90LWxpbnV4NjQKKyMgICAgZ2NjL2NvbmZpZy9taXBzL3QtbGludXg2NAorIyAgICBnY2MvY29uZmlnL3JzNjAwMC90LWxpbnV4NjQKKyMgICAgZ2NjL2NvbmZpZy9pMzg2L2xpbnV4NjQuaAorIyAgICBnY2MvY29uZmlnL21pcHMvbGludXg2NC5oCisjICAgIGdjYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaAorCitNVUxUSUxJQl9PUFRJT05fV0hJVEVMSVNUID8/PSAiLW0zMiAtbTY0IC1teDMyIC1tYWJpPW4zMiAtbWFiaT0zMiAtbWFiaT02NCIgCisKK3B5dGhvbiBnY2NfbXVsdGlsaWJfc2V0dXAoKSB7CisgICAgaW1wb3J0IHJlCisgICAgaW1wb3J0IHNodXRpbAorICAgIGltcG9ydCBnbG9iCisKKyAgICBzcmNkaXIgPSBkLmdldFZhcignUycsIFRydWUpCisgICAgYnVpbGRkaXIgPSBkLmdldFZhcignQicsIFRydWUpCisgICAgc3JjX2NvbmZfZGlyID0gJyVzL2djYy9jb25maWcnICUgc3JjZGlyCisgICAgYnVpbGRfY29uZl9kaXIgPSAnJXMvZ2NjL2NvbmZpZycgJSBidWlsZGRpcgorCisgICAgYmIudXRpbHMucmVtb3ZlKGJ1aWxkX2NvbmZfZGlyLCBUcnVlKQorICAgIG1sX2dsb2JzID0gKCclcy8qL3QtbGludXg2NCcgJSBzcmNfY29uZl9kaXIsCisgICAgICAgICAgICAgICAgJyVzLyovbGludXg2NC5oJyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvKi9saW51eC5oJyAlIHNyY19jb25mX2RpciwKKyAgICAgICAgICAgICAgICAnJXMvbGludXguaCcgJSBzcmNfY29uZl9kaXIpCisKKyAgICAjIGNvcHkgdGhlIHRhcmdldCBtdWx0aWxpYiBjb25maWcgZmlsZXMgdG8gJHtCfQorICAgIGZvciBtbF9nbG9iIGluIG1sX2dsb2JzOgorICAgICAgICBmb3IgZm4gaW4gZ2xvYi5nbG9iKG1sX2dsb2IpOgorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgoZm4sIHNyY19jb25mX2RpcikKKyAgICAgICAgICAgIHBhcmVudF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUocmVsX3BhdGgpCisgICAgICAgICAgICBiYi51dGlscy5ta2RpcmhpZXIoJyVzLyVzJyAlIChidWlsZF9jb25mX2RpciwgcGFyZW50X2RpcikpCisgICAgICAgICAgICBiYi51dGlscy5jb3B5ZmlsZShmbiwgJyVzLyVzJyAlIChidWlsZF9jb25mX2RpciwgcmVsX3BhdGgpKQorCisgICAgcG4gPSBkLmdldFZhcignUE4nLCBUcnVlKQorICAgIG11bHRpbGlicyA9IChkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKSBvciAnJykuc3BsaXQoKQorICAgIGlmIG5vdCBtdWx0aWxpYnMgYW5kIHBuICE9ICJuYXRpdmVzZGstZ2NjIjoKKyAgICAgICAgcmV0dXJuCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpCisKKyAgICBpZiAoJyVzZ2NjJyAlIG1scHJlZml4KSAhPSBwbiBhbmQgKG5vdCBwbi5zdGFydHN3aXRoKCdnY2MtY3Jvc3MtY2FuYWRpYW4nKSkgYW5kIHBuICE9ICJuYXRpdmVzZGstZ2NjIjoKKyAgICAgICAgcmV0dXJuCisKKworICAgIGRlZiB3cml0ZV9jb25maWcocm9vdCwgZmlsZXMsIG9wdGlvbnMsIGRpcm5hbWVzLCBvc2Rpcm5hbWVzKToKKyAgICAgICAgZm9yIG1sX2NvbmZfZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZWxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgICMgcmVjcmVhdGUgbXVsdGlsaWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKKyAgICAgICAgICAgICAgICBzdWJzdHMgPSBbCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqKE1VTFRJTElCX09QVElPTlNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcvJy5qb2luKG9wdGlvbnMpKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccypNVUxUSUxJQl9PUFRJT05TXHMqXCs9LiopJCcsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXihccyooTVVMVElMSUJfRElSTkFNRVNccyo9KS4qKSQnLCByJ1wyICVzJyAlICcgJy5qb2luKGRpcm5hbWVzKSksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqTVVMVElMSUJfRElSTkFNRVNccypcKz0uKikkJywgJycpLAorICAgICAgICAgICAgICAgICAgICAocideKFxzKihNVUxUSUxJQl9PU0RJUk5BTUVTXHMqPSkuKikkJywgcidcMiAlcycgJSAnICcuam9pbihvc2Rpcm5hbWVzKSksCisgICAgICAgICAgICAgICAgICAgIChyJ14oXHMqTVVMVElMSUJfT1NESVJOQU1FU1xzKlwrPS4qKSQnLCAnJyksCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICAgICAgZm9yIChpLCBsaW5lKSBpbiBlbnVtZXJhdGUoZmlsZWxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHN1YnN0IGluIHN1YnN0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSByZS5zdWIoc3Vic3RbMF0sIHN1YnN0WzFdLCBsaW5lKQorICAgICAgICAgICAgICAgICAgICBmaWxlbGluZXNbaV0gPSBsaW5lCisKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ocm9vdCArICcvJyArIG1sX2NvbmZfZmlsZSwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCcnLmpvaW4oZmlsZWxpbmVzKSkKKworICAgIGRlZiB3cml0ZV9oZWFkZXJzKHJvb3QsIGZpbGVzLCBsaWJkaXIzMiwgbGliZGlyNjQsIGxpYmRpcngzMiwgbGliZGlybjMyKToKKyAgICAgICAgZGVmIHdyYXBfbGliZGlyKGxpYmRpcik6CisgICAgICAgICAgICBpZiBsaWJkaXIuZmluZCgnU1lTVEVNTElCU19ESVInKSAhPSAtMToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyIlciInCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnIi8lcy8iJyAlIGxpYmRpcgorCisgICAgICAgIGZvciBtbF9jb25mX2ZpbGUgaW4gZmlsZXM6CisgICAgICAgICAgICBmbiA9IHJvb3QgKyAnLycgKyBtbF9jb25mX2ZpbGUKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVsaW5lcyA9IGYucmVhZGxpbmVzKCkKKworICAgICAgICAgICAgICAgICMgcmVwbGFjZSBsaW5lcyBsaWtlCisgICAgICAgICAgICAgICAgIyAjZGVmaW5lIEdMSUJDX0RZTkFNSUNfTElOS0VSMzIgU1lTVEVNTElCU19ESVIgImxkLWxpbnV4LnNvLjIiCisgICAgICAgICAgICAgICAgIyBieQorICAgICAgICAgICAgICAgICMgI2RlZmluZSBHTElCQ19EWU5BTUlDX0xJTktFUjMyICIvbGliLyIgImxkLWxpbnV4LnNvLjIiCisgICAgICAgICAgICAgICAgIyB0aGlzIGlzIG5lZWRlZCB0byBwdXQgdGhlIGNvcnJlY3QgZHluYW1pYyBsb2FkZXIgcGF0aCBpbiB0aGUgZ2VuZXJhdGVkIGJpbmFyaWVzCisgICAgICAgICAgICAgICAgc3Vic3RzID0gWworICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqKShcUyspKFxzKlwiXFMrXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjY0KSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqR0xJQkNfRFlOQU1JQ19MSU5LRVI2NFxzKlwiXFMrXCJccyopKFxTKykoXHMqXCJcUytcIlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjY0KSArIHInXDMnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcNScpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypHTElCQ19EWU5BTUlDX0xJTktFUlgzMlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcngzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKkdMSUJDX0RZTkFNSUNfTElOS0VSTjMyXHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlybjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICAgICAgKHInXigjZGVmaW5lXHMqVUNMSUJDX0RZTkFNSUNfTElOS0VSMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXIzMikgKyByJ1wzJyksCisgICAgICAgICAgICAgICAgICAgIChyJ14oI2RlZmluZVxzKlVDTElCQ19EWU5BTUlDX0xJTktFUjY0XHMqKShcUyspKFxzKlwiLipcIikkJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHInXDEnICsgd3JhcF9saWJkaXIobGliZGlyNjQpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVJOMzJccyopKFxTKykoXHMqXCIuKlwiKSQnLAorICAgICAgICAgICAgICAgICAgICAgICAgcidcMScgKyB3cmFwX2xpYmRpcihsaWJkaXJuMzIpICsgcidcMycpLAorICAgICAgICAgICAgICAgICAgICAocideKCNkZWZpbmVccypVQ0xJQkNfRFlOQU1JQ19MSU5LRVJcYlxzKikoXFMrKShccypcIi4qXCIpJCcsCisgICAgICAgICAgICAgICAgICAgICAgICByJ1wxJyArIHdyYXBfbGliZGlyKGxpYmRpcjMyKSArIHInXDMnKSwKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgICAgICBmb3IgKGksIGxpbmUpIGluIGVudW1lcmF0ZShmaWxlbGluZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3Igc3Vic3QgaW4gc3Vic3RzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHJlLnN1YihzdWJzdFswXSwgc3Vic3RbMV0sIGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGZpbGVsaW5lc1tpXSA9IGxpbmUKKworICAgICAgICAgICAgICAgIHdpdGggb3Blbihyb290ICsgJy8nICsgbWxfY29uZl9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoJycuam9pbihmaWxlbGluZXMpKQorCisKKyAgICBnY2NfdGFyZ2V0X2NvbmZpZ19maWxlcyA9IHsKKyAgICAgICAgJ3g4Nl82NCcgICAgOiBbJ2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQnXSwKKyAgICAgICAgJ2k1ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQnXSwKKyAgICAgICAgJ2k2ODYnICAgICAgOiBbJ2djYy9jb25maWcvaTM4Ni90LWxpbnV4NjQnXSwKKyAgICAgICAgJ21pcHMnICAgICAgOiBbJ2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQnXSwKKyAgICAgICAgJ21pcHM2NCcgICAgOiBbJ2djYy9jb25maWcvbWlwcy90LWxpbnV4NjQnXSwKKyAgICAgICAgJ3Bvd2VycGMnICAgOiBbJ2djYy9jb25maWcvcnM2MDAwL3QtbGludXg2NCddLAorICAgICAgICAncG93ZXJwYzY0JyA6IFsnZ2NjL2NvbmZpZy9yczYwMDAvdC1saW51eDY0J10sCisgICAgfQorCisgICAgZ2NjX2hlYWRlcl9jb25maWdfZmlsZXMgPSB7CisgICAgICAgICd4ODZfNjQnICAgIDogWydnY2MvY29uZmlnL2kzODYvbGludXg2NC5oJ10sCisgICAgICAgICdpNTg2JyAgICAgIDogWydnY2MvY29uZmlnL2kzODYvbGludXg2NC5oJ10sCisgICAgICAgICdpNjg2JyAgICAgIDogWydnY2MvY29uZmlnL2kzODYvbGludXg2NC5oJ10sCisgICAgICAgICdtaXBzJyAgICAgIDogWydnY2MvY29uZmlnL21pcHMvbGludXguaCcsICdnY2MvY29uZmlnL21pcHMvbGludXg2NC5oJ10sCisgICAgICAgICdtaXBzNjQnICAgIDogWydnY2MvY29uZmlnL21pcHMvbGludXguaCcsICdnY2MvY29uZmlnL21pcHMvbGludXg2NC5oJ10sCisgICAgICAgICdwb3dlcnBjJyAgIDogWydnY2MvY29uZmlnL3JzNjAwMC9saW51eDY0LmgnXSwKKyAgICAgICAgJ3Bvd2VycGM2NCcgOiBbJ2djYy9jb25maWcvcnM2MDAwL2xpbnV4NjQuaCddLAorICAgIH0KKworICAgIGxpYmRpcjMyID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcjY0ID0gJ1NZU1RFTUxJQlNfRElSJworICAgIGxpYmRpcngzMiA9ICdTWVNURU1MSUJTX0RJUicKKyAgICBsaWJkaXJuMzIgPSAnU1lTVEVNTElCU19ESVInCisKKworICAgIHRhcmdldF9hcmNoID0gKGQuZ2V0VmFyKCdUQVJHRVRfQVJDSF9NVUxUSUxJQl9PUklHSU5BTCcsIFRydWUpIGlmIG1scHJlZml4CisgICAgICAgICAgICAgICAgICAgIGVsc2UgZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkpCisgICAgaWYgcG4gPT0gIm5hdGl2ZXNkay1nY2MiOgorICAgICAgICBoZWFkZXJfY29uZmlnX2ZpbGVzID0gZ2NjX2hlYWRlcl9jb25maWdfZmlsZXNbZC5nZXRWYXIoIlNES19BUkNIIiwgVHJ1ZSldCisgICAgICAgIHdyaXRlX2hlYWRlcnMoYnVpbGRkaXIsIGhlYWRlcl9jb25maWdfZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpCisgICAgICAgIHJldHVybgorCisgICAgaWYgdGFyZ2V0X2FyY2ggbm90IGluIGdjY190YXJnZXRfY29uZmlnX2ZpbGVzOgorICAgICAgICBiYi53YXJuKCdnY2MgbXVsdGlsaWIgc2V0dXAgaXMgbm90IHN1cHBvcnRlZCBmb3IgVEFSR0VUX0FSQ0g9JyArIHRhcmdldF9hcmNoKQorICAgICAgICByZXR1cm4KKworICAgIHRhcmdldF9jb25maWdfZmlsZXMgPSBnY2NfdGFyZ2V0X2NvbmZpZ19maWxlc1t0YXJnZXRfYXJjaF0KKyAgICBoZWFkZXJfY29uZmlnX2ZpbGVzID0gZ2NjX2hlYWRlcl9jb25maWdfZmlsZXNbdGFyZ2V0X2FyY2hdCisKKyAgICBtbF9saXN0ID0gWydERUZBVUxUVFVORV9NVUxUSUxJQl9PUklHSU5BTCcgaWYgbWxwcmVmaXggZWxzZSAnREVGQVVMVFRVTkUnXQorICAgIG1sdHVuZXMgPSBbKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMnICUgbWwpIGZvciBtbCBpbiBtdWx0aWxpYnNdCisgICAgaWYgbWxwcmVmaXg6CisgICAgICAgIG1saW5kZXggPSAwCisgICAgICAgIGZvciBtbCBpbiBtdWx0aWxpYnM6CisgICAgICAgICAgICBpZiBtbHByZWZpeCA9PSBtbCArICctJzoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbWxpbmRleCArPSAxCisKKyAgICAgICAgbWxfbGlzdC5leHRlbmQobWx0dW5lc1s6bWxpbmRleF0gKyBbJ0RFRkFVTFRUVU5FJ10gKyBtbHR1bmVzWyhtbGluZGV4ICsgMSk6XSkKKyAgICBlbHNlOgorICAgICAgICBtbF9saXN0LmV4dGVuZChtbHR1bmVzKQorCisgICAgb3B0aW9ucyA9IFtdCisgICAgZGlybmFtZXMgPSBbXQorICAgIG9zZGlybmFtZXMgPSBbXQorICAgIG9wdHNldHMgPSBbXQorCisgICAgZm9yIG1sIGluIG1sX2xpc3Q6CisgICAgICAgIHR1bmUgPSBkLmdldFZhcihtbCwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHR1bmU6CisgICAgICAgICAgICBiYi53YXJuKCIlcyBkb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHR1bmUuIFNraXBwaW5nLi4uIiAlIG1sKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHVuZV9wYXJhbWV0ZXJzID0gZ2V0X3R1bmVfcGFyYW1ldGVycyh0dW5lLCBkKQorCisgICAgICAgIHR1bmVfYmFzZWxpYiA9IHR1bmVfcGFyYW1ldGVyc1snYmFzZWxpYiddCisgICAgICAgIGlmIG5vdCB0dW5lX2Jhc2VsaWI6CisgICAgICAgICAgICBiYi53YXJuKCJUdW5lICVzIGRvZXNuJ3QgaGF2ZSBhIGJhc2VsaWIgc2V0LiBTa2lwcGluZy4uLiIgJSB0dW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYjY0JzoKKyAgICAgICAgICAgIGxpYmRpcjY0ID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsaWYgdHVuZV9iYXNlbGliID09ICdsaWJ4MzInOgorICAgICAgICAgICAgbGliZGlyeDMyID0gdHVuZV9iYXNlbGliCisgICAgICAgIGVsaWYgdHVuZV9iYXNlbGliID09ICdsaWIzMic6CisgICAgICAgICAgICBsaWJkaXJuMzIgPSB0dW5lX2Jhc2VsaWIKKyAgICAgICAgZWxpZiB0dW5lX2Jhc2VsaWIgPT0gJ2xpYic6CisgICAgICAgICAgICBsaWJkaXIzMiA9IHR1bmVfYmFzZWxpYgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmIuZXJyb3IoJ1Vua25vd24gbGliZGlyICglcykgb2YgdGhlIHR1bmUgOiAlcycgJSAodHVuZV9iYXNlbGliLCB0dW5lKSkKKworICAgICAgICAjIHRha2Ugb3V0ICctJyBtY3B1PSdzIGFuZCBtYXJjaD0ncyBmcm9tIHBhcmFtZXRlcnMKKyAgICAgICAgb3B0cyA9IFtdCisgICAgICAgIHdoaXRlbGlzdCA9IChkLmdldFZhcigiTVVMVElMSUJfT1BUSU9OX1dISVRFTElTVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpCisgICAgICAgIGZvciBpIGluIHR1bmVfcGFyYW1ldGVyc1snY2NhcmdzJ10uc3BsaXQoKToKKyAgICAgICAgICAgIGlmIGkgaW4gd2hpdGVsaXN0OgorICAgICAgICAgICAgICAgICMgTmVlZCB0byBzdHJpcCAnLScgZnJvbSBvcHRpb24KKyAgICAgICAgICAgICAgICBvcHRzLmFwcGVuZChpWzE6XSkKKyAgICAgICAgb3B0aW9ucy5hcHBlbmQoIiAiLmpvaW4ob3B0cykpCisKKyAgICAgICAgaWYgdHVuZV9iYXNlbGliID09ICdsaWInOgorICAgICAgICAgICAgZGlybmFtZXMuYXBwZW5kKCczMicpICAjIC9saWIgPT4gMzJiaXQgbGliCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXJuYW1lcy5hcHBlbmQodHVuZV9iYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKSkKKyAgICAgICAgb3NkaXJuYW1lcy5hcHBlbmQoJy4uLycgKyB0dW5lX2Jhc2VsaWIpCisKKyAgICB3cml0ZV9jb25maWcoYnVpbGRkaXIsIHRhcmdldF9jb25maWdfZmlsZXMsIG9wdGlvbnMsIGRpcm5hbWVzLCBvc2Rpcm5hbWVzKQorICAgIHdyaXRlX2hlYWRlcnMoYnVpbGRkaXIsIGhlYWRlcl9jb25maWdfZmlsZXMsIGxpYmRpcjMyLCBsaWJkaXI2NCwgbGliZGlyeDMyLCBsaWJkaXJuMzIpCit9CisKK2djY19tdWx0aWxpYl9zZXR1cFtjbGVhbmRpcnNdID0gIiR7Qn0vZ2NjL2NvbmZpZyIKKworRVhUUkFDT05GRlVOQ1MgKz0gImdjY19tdWx0aWxpYl9zZXR1cCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3NTdlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWUuaW5jCkBAIC0wLDAgKzEsMTk1IEBACityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitDWFhGTEFHUyA6PSAiJHtAb2VfZmlsdGVyX291dCgnLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuJywgJyR7Q1hYRkxBR1N9JywgZCl9IgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1neHgtaW5jbHVkZS1kaXI9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfSBcCisgICAgLS13aXRoLXN5c3Jvb3Q9L25vdC9leGlzdCBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9saW51eHN0ZGJhc2UgPSAiIC0tZW5hYmxlLWNsb2NhbGU9Z251IgorCitSVU5USU1FVEFSR0VUID0gImxpYnNzcCBsaWJzdGRjKystdjMgbGliZ29tcCBsaWJhdG9taWMiCisjICA/CisjIGxpYmliZXJ0eQorIyBsaWJtdWRmbGFwCisjIGxpYmdmb3J0cmFuIG5lZWRzIHNlcGFyYXRlIHJlY2lwZSBkdWUgdG8gbGlicXVhZG1hdGggZGVwZW5kZW5jeQorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBDWFg9IiR7Q1hYfSAtbm9zdGRpbmMrKyAtbm9zdGRsaWIrKyIKKwltdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCAke0J9CisJZm9yIGQgaW4gbGliZ2NjICR7UlVOVElNRVRBUkdFVH07IGRvCisJCWVjaG8gIkNvbmZpZ3VyaW5nICRkIgorCQlybSAtcmYgJHtCfS8kdGFyZ2V0LyRkLworCQlta2RpciAtcCAke0J9LyR0YXJnZXQvJGQvCisJCWNkICR7Qn0vJHRhcmdldC8kZC8KKwkJY2htb2QgYSt4ICR7U30vJGQvY29uZmlndXJlCisJCSR7U30vJGQvY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisJZG9uZQorfQorCitkb19jb21waWxlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlmb3IgZCBpbiBsaWJnY2MgJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQlvZV9ydW5tYWtlIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0LyRkLworCWRvbmUKK30KKworZG9faW5zdGFsbCAoKSB7CisJdGFyZ2V0PWBlY2hvICR7VEFSR0VUX1NZU30gfCBzZWQgLWUgcyMtJHtTREtQS0dTVUZGSVh9IyNgCisJZm9yIGQgaW4gJHtSVU5USU1FVEFSR0VUfTsgZG8KKwkJY2QgJHtCfS8kdGFyZ2V0LyRkLworCQlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0LyRkLyBpbnN0YWxsCisJZG9uZQorCXJtIC1yZiAke0R9JHtpbmZvZGlyfS9saWJnb21wLmluZm8gJHtEfSR7aW5mb2Rpcn0vZGlyCisJcm0gLXJmICR7RH0ke2luZm9kaXJ9L2xpYnF1YWRtYXRoLmluZm8gJHtEfSR7aW5mb2Rpcn0vZGlyCisJaWYgWyAtZCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUgXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZmluY2x1ZGUKKwlmaQorCWlmIFsgLWQgJHtEfSR7aW5mb2Rpcn0gXTsgdGhlbgorCQlybWRpciAtLWlnbm9yZS1mYWlsLW9uLW5vbi1lbXB0eSAtcCAke0R9JHtpbmZvZGlyfQorCWZpCisJaWYgWyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC1nbnVzcGUiIF07IHRoZW4KKwkJbG4gLXMgJHtUQVJHRVRfU1lTfSAke0R9JHtpbmNsdWRlZGlyfS9jKysvJHtCSU5WfS8ke1RBUkdFVF9BUkNIfSR7VEFSR0VUX1ZFTkRPUn0tbGludXgKKwlmaQorCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysgbGliZ2NjIgorUFJPVklERVMgPSAidmlydHVhbC8ke1RBUkdFVF9QUkVGSVh9Y29tcGlsZXJsaWJzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWRiZyBcCisgICAgbGlic3RkYysrIFwKKyAgICBsaWJzdGRjKystcHJlY29tcGlsZS1kZXYgXAorICAgIGxpYnN0ZGMrKy1kZXYgXAorICAgIGxpYnN0ZGMrKy1zdGF0aWNkZXYgXAorICAgIGxpYmcyYyBcCisgICAgbGliZzJjLWRldiBcCisgICAgbGlic3NwIFwKKyAgICBsaWJzc3AtZGV2IFwKKyAgICBsaWJzc3Atc3RhdGljZGV2IFwKKyAgICBsaWJtdWRmbGFwIFwKKyAgICBsaWJtdWRmbGFwLWRldiBcCisgICAgbGlibXVkZmxhcC1zdGF0aWNkZXYgXAorICAgIGxpYnF1YWRtYXRoIFwKKyAgICBsaWJxdWFkbWF0aC1kZXYgXAorICAgIGxpYnF1YWRtYXRoLXN0YXRpY2RldiBcCisgICAgbGliZ29tcCBcCisgICAgbGliZ29tcC1kZXYgXAorICAgIGxpYmdvbXAtc3RhdGljZGV2IFwKKyAgICBsaWJhdG9taWMgXAorICAgIGxpYmF0b21pYy1kZXYgXAorICAgIGxpYmF0b21pYy1zdGF0aWNkZXYgXAorIgorCisjIE1vc3QgbGlicmFyaWVzIGFyZSBsaWNlbnNlZCB3aXRoIHRoZSBleGNlcHRpb24sIGJ1dAorIyBvbmUgbGlicmFyeSBpcyByZWFsbHkgR1BMdjMuCisjCitMSUNFTlNFXyR7UE59LWRiZyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiAmIEdQTHYzIgorTElDRU5TRV9saWJzdGRjKysgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnN0ZGMrKy1wcmVjb21waWxlLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlic3RkYysrLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliZzJjID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnMmMtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJzc3AgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYnNzcC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJnZm9ydHJhbi1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmdmb3J0cmFuLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlibXVkZmxhcC1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYm11ZGZsYXAtc3RhdGljZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aCA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGlicXVhZG1hdGgtZGV2ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV9saWJxdWFkbWF0aC1zdGF0aWNkZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFX2xpYmF0b21pYyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljLWRldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKK0xJQ0VOU0VfbGliYXRvbWljLXN0YXRpY2RldiA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKKworTElDRU5TRV9saWJnb21wID0gIkdQTHYzIgorTElDRU5TRV9saWJnb21wLWRldiA9ICJHUEx2MyIKK0xJQ0VOU0VfbGliZ29tcC1zdGF0aWNkZXYgPSAiR1BMdjMiCisKKyMgVGhlIGJhc2UgcGFja2FnZSBkb2Vzbid0IGV4aXN0LCBzbyB3ZSBjbGVhciB0aGUgcmVjb21tZW5kcy4KK1JSRUNPTU1FTkRTXyR7UE59LWRiZyA9ICIiCisKKyMgaW5jbHVkZSBweXRob24gZGVidWdnaW5nIHNjcmlwdHMKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgICR7bGliZGlyfS9saWJzdGRjKysuc28uKi1nZGIucHkgXAorICAgICR7ZGF0YWRpcn0vZ2NjLSR7QklOVn0vcHl0aG9uL2xpYnN0ZGN4eCBcCisiCisKK0ZJTEVTX2xpYmcyYyA9ICIke3RhcmdldF9saWJkaXJ9L2xpYmcyYy5zby4qIgorRklMRVNfbGliZzJjLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmcyYy5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYmcyYy5hIFwKKyAgICAke2xpYmRpcn0vbGliZnJ0YmVnaW4uYSBcCisiCisKK0ZJTEVTX2xpYnN0ZGMrKyA9ICIke2xpYmRpcn0vbGlic3RkYysrLnNvLioiCitGSUxFU19saWJzdGRjKystZGV2ID0gIlwKKyAgICAke2luY2x1ZGVkaXJ9L2MrKy8gXAorICAgICR7bGliZGlyfS9saWJzdGRjKysuc28gXAorICAgICR7bGliZGlyfS9saWJzdGRjKysubGEgXAorICAgICR7bGliZGlyfS9saWJzdXBjKysubGEgXAorIgorRklMRVNfbGlic3RkYysrLXN0YXRpY2RldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnN0ZGMrKy5hIFwKKyAgICAke2xpYmRpcn0vbGlic3VwYysrLmEgXAorIgorCitGSUxFU19saWJzdGRjKystcHJlY29tcGlsZS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9jKysvJHtUQVJHRVRfU1lTfS9iaXRzLyouZ2NoIgorCitGSUxFU19saWJzc3AgPSAiJHtsaWJkaXJ9L2xpYnNzcC5zby4qIgorRklMRVNfbGlic3NwLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnNzcCouc28gXAorICAgICR7bGliZGlyfS9saWJzc3AqX25vbnNoYXJlZC5hIFwKKyAgICAke2xpYmRpcn0vbGlic3NwKi5sYSBcCisgICAgJHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS9zc3AgXAorIgorRklMRVNfbGlic3NwLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlic3NwKi5hIgorCitGSUxFU19saWJxdWFkbWF0aCA9ICIke2xpYmRpcn0vbGlicXVhZG1hdGgqLnNvLioiCitGSUxFU19saWJxdWFkbWF0aC1kZXYgPSAiXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvcXVhZG1hdGgqIFwKKyAgICAke2xpYmRpcn0vbGlicXVhZG1hdGgqLnNvIFwKKyAgICAke2xpYmRpcn0vbGlicXVhZG1hdGgubGEgXAorIgorRklMRVNfbGlicXVhZG1hdGgtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJxdWFkbWF0aC5hIgorCitGSUxFU19saWJtdWRmbGFwID0gIiR7bGliZGlyfS9saWJtdWRmbGFwKi5zby4qIgorRklMRVNfbGlibXVkZmxhcC1kZXYgPSAiXAorICAgICR7bGliZGlyfS9saWJtdWRmbGFwKi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYm11ZGZsYXAubGEgXAorIgorRklMRVNfbGlibXVkZmxhcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYm11ZGZsYXAuYSIKKworRklMRVNfbGliZ29tcCA9ICIke2xpYmRpcn0vbGliZ29tcCoke1NPTElCU30iCitGSUxFU19saWJnb21wLWRldiA9ICJcCisgICAgJHtsaWJkaXJ9L2xpYmdvbXAqJHtTT0xJQlNERVZ9IFwKKyAgICAke2xpYmRpcn0vbGliZ29tcCoubGEgXAorICAgICR7bGliZGlyfS9saWJnb21wLnNwZWMgXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvb21wLmggXAorIgorRklMRVNfbGliZ29tcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmdvbXAqLmEiCisKK0ZJTEVTX2xpYmF0b21pYyA9ICIke2xpYmRpcn0vbGliYXRvbWljLnNvLioiCitGSUxFU19saWJhdG9taWMtZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliYXRvbWljLnNvIFwKKyAgICAke2xpYmRpcn0vbGliYXRvbWljLmxhIFwKKyIKK0ZJTEVTX2xpYmF0b21pYy1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYmF0b21pYy5hIgorCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2Q2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOC5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtcnVudGltZS5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1ydW50aW1lXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdkNjkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV80LjkuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXJ1bnRpbWUuaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtcnVudGltZV81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzMWU3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXJ1bnRpbWVfNS4yLmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1ydW50aW1lLmluYworCitGSUxFU19saWJnb21wLWRldiArPSAiXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvb3BlbmFjYy5oIFwKKyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTg3Y2NiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVycy5pbmMKQEAgLTAsMCArMSwxMTkgQEAKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTkNTQSB8IE1JVCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgZmlsZTovL2xpYnNhbml0aXplci9MSUNFTlNFLlRYVDttZDU9MDI0OWMzNzc0ODkzNmZhZjViMWVmZDU3ODk1ODc5MDkgXAorIgorCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisgICAgbXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIHRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorICAgIGlmIFsgLWQgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9L2djYy1idWlsZC1pbnRlcm5hbC0kbXRhcmdldCBdOyB0aGVuCisgICAgICAgIGhhcmRsaW5rZGlyICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9nY2MtYnVpbGQtaW50ZXJuYWwtJG10YXJnZXQgJHtCfQorICAgIGZpCisKKyAgICBlY2hvICJDb25maWd1cmluZyBsaWJzYW5pdGl6ZXIiCisgICAgcm0gLXJmICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvCisgICAgbWtkaXIgLXAgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICAjIFRoaXMgaXMga2luZCBvZiBncm9zcywgYnV0IGl0J3MgYW4gZWFzeSB3YXkgdG8gbWFrZSBjb25maWd1cmUgaGFwcHkKKyAgICAjIHdpdGhvdXQgaGFja2luZyBpdCB1cCB0byB1c2UgdGhlIHN5c3RlbSBzdGRjKysgaW5zdGVhZCBvZiB0aGUgb25lIGl0CisgICAgIyBleHBlY3RzIHRvIGJlIG5ld2x5IGJ1aWx0LgorICAgIHJtIC1yZiAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzLworICAgIG1rZGlyIC1wICR7Qn0vJHRhcmdldC9saWJzdGRjKystdjMvc3JjLworICAgIGxuIC1zICR7U1RBR0lOR19MSUJESVJ9L2xpYnN0ZGMrKy5sYSAke0J9LyR0YXJnZXQvbGlic3RkYysrLXYzL3NyYy8KKyAgICBsbiAtcyAke1NUQUdJTkdfTElCRElSfS9saWJzdGRjKysuc28gJHtCfS8kdGFyZ2V0L2xpYnN0ZGMrKy12My9zcmMvCisgICAgY2QgJHtCfS8kdGFyZ2V0L2xpYnNhbml0aXplci8KKyAgICBjaG1vZCBhK3ggJHtTfS9saWJzYW5pdGl6ZXIvY29uZmlndXJlCisgICAgJHtTfS9saWJzYW5pdGl6ZXIvY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisgICAgIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorICAgICMgYnJva2VuIGxpYnRvb2wgaGVyZQorICAgIHNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7Qn0vJHRhcmdldC9saWJzYW5pdGl6ZXIvbGlidG9vbAorfQorCitkb19jb21waWxlICgpIHsKKyAgICB0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIG9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworfQorCitkb19pbnN0YWxsICgpIHsKKyAgICB0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKyAgICBjZCAke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLworICAgIG9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvbGlic2FuaXRpemVyLyBpbnN0YWxsCisgICAgaWYgWyAtZCAke0R9JHtpbmZvZGlyfSBdOyB0aGVuCisgICAgICAgIHJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5IC1wICR7RH0ke2luZm9kaXJ9CisgICAgZmkKKyAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0RFUEVORFMgPSAiZ2NjLXJ1bnRpbWUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitQQUNLQUdFUyA9ICIke1BOfSIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuIGxpYnVic2FuIGxpYmxzYW4gbGlidHNhbiIKK1BBQ0tBR0VTICs9ICJsaWJhc2FuLWRldiBsaWJ1YnNhbi1kZXYgbGlibHNhbi1kZXYgbGlidHNhbi1kZXYiCitQQUNLQUdFUyArPSAibGliYXNhbi1kYmcgbGlidWJzYW4tZGJnIGxpYmxzYW4tZGJnIGxpYnRzYW4tZGJnIgorUEFDS0FHRVMgKz0gImxpYmFzYW4tc3RhdGljZGV2IGxpYnVic2FuLXN0YXRpY2RldiBsaWJsc2FuLXN0YXRpY2RldiBsaWJ0c2FuLXN0YXRpY2RldiIKKworUkRFUEVORFNfbGliYXNhbiArPSAibGlic3RkYysrIgorUkRFUEVORFNfbGlidWJzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYmxzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYnRzYW4gKz0gImxpYnN0ZGMrKyIKK1JERVBFTkRTX2xpYmFzYW4tZGV2ICs9ICIke1BOfSIKK1JERVBFTkRTX2xpYnVic2FuLWRldiArPSAiJHtQTn0iCitSREVQRU5EU19saWJsc2FuLWRldiArPSAiJHtQTn0iCitSREVQRU5EU19saWJ0c2FuLWRldiArPSAiJHtQTn0iCitSUkVDT01NRU5EU18ke1BOfSArPSAibGliYXNhbiBsaWJ1YnNhbiIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94ODYtNjQgPSAiIGxpYmxzYW4gbGlidHNhbiIKK1JSRUNPTU1FTkRTXyR7UE59X2FwcGVuZF94ODYgPSAiIGxpYmxzYW4iCisKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGliczpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGliczpkb19wYWNrYWdlZGF0YSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW2RlcGVuZHNdICs9ICJ2aXJ0dWFsLyR7TUxQUkVGSVh9JHtUQVJHRVRfUFJFRklYfWNvbXBpbGVybGliczpkb19wYWNrYWdlZGF0YSIKKworIyBNSVBTLCBhYXJjaDY0LCBhbmQgU1BBUkMgYXJlIGJyb2tlbi4KK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhcm0pLiotbGludXgnCisKK0ZJTEVTX2xpYmFzYW4gKz0gIiR7bGliZGlyfS9saWJhc2FuLnNvLioiCitGSUxFU19saWJhc2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJhc2FuLnNvLioiCitGSUxFU19saWJhc2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJhc2FuX3ByZWluaXQubyBcCisgICAgJHtsaWJkaXJ9L2xpYmFzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJhc2FuLmxhIFwKKyIKK0ZJTEVTX2xpYmFzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGliYXNhbi5hIgorCitGSUxFU19saWJ1YnNhbiArPSAiJHtsaWJkaXJ9L2xpYnVic2FuLnNvLioiCitGSUxFU19saWJ1YnNhbi1kYmcgKz0gIiR7bGliZGlyfS8uZGVidWcvbGlidWJzYW4uc28uKiIKK0ZJTEVTX2xpYnVic2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJ1YnNhbi5zbyBcCisgICAgJHtsaWJkaXJ9L2xpYnVic2FuLmxhIFwKKyIKK0ZJTEVTX2xpYnVic2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYnVic2FuLmEiCisKK0ZJTEVTX2xpYmxzYW4gKz0gIiR7bGliZGlyfS9saWJsc2FuLnNvLioiCitGSUxFU19saWJsc2FuLWRiZyArPSAiJHtsaWJkaXJ9Ly5kZWJ1Zy9saWJsc2FuLnNvLioiCitGSUxFU19saWJsc2FuLWRldiArPSAiXAorICAgICR7bGliZGlyfS9saWJsc2FuLnNvIFwKKyAgICAke2xpYmRpcn0vbGlibHNhbi5sYSBcCisiCitGSUxFU19saWJsc2FuLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2xpYmxzYW4uYSIKKworRklMRVNfbGlidHNhbiArPSAiJHtsaWJkaXJ9L2xpYnRzYW4uc28uKiIKK0ZJTEVTX2xpYnRzYW4tZGJnICs9ICIke2xpYmRpcn0vLmRlYnVnL2xpYnRzYW4uc28uKiIKK0ZJTEVTX2xpYnRzYW4tZGV2ICs9ICJcCisgICAgJHtsaWJkaXJ9L2xpYnRzYW4uc28gXAorICAgICR7bGliZGlyfS9saWJ0c2FuLmxhIFwKKyIKK0ZJTEVTX2xpYnRzYW4tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vbGlidHNhbi5hIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vKi5zcGVjICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvc2FuaXRpemVyLyouaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxZjY2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNC44LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGdjYy1zYW5pdGl6ZXJzLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFmNjY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2FuaXRpemVyc180LjkuYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXNhbml0aXplcnMuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNhbml0aXplcnNfNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWY2NjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zYW5pdGl6ZXJzXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2Mtc2FuaXRpemVycy5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNoYXJlZC1zb3VyY2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc2hhcmVkLXNvdXJjZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFjZmZiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNoYXJlZC1zb3VyY2UuaW5jCkBAIC0wLDAgKzEsOSBAQAorZG9fZmV0Y2goKSB7CisJOgorfQorZG9fZmV0Y2hbbm9leGVjXSA9ICIxIgorZGVsdGFzayBkb191bnBhY2sKK2RlbHRhc2sgZG9fcGF0Y2gKKworZG9fY29uZmlndXJlW2RlcGVuZHNdICs9ICJnY2Mtc291cmNlLSR7UFZ9OmRvX3ByZWNvbmZpZ3VyZSIKK2RvX3BvcHVsYXRlX2xpY1tkZXBlbmRzXSArPSAiZ2NjLXNvdXJjZS0ke1BWfTpkb191bnBhY2siCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTRmZDRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYwpAQCAtMCwwICsxLDM2IEBACitkZWx0YXNrIGRvX2NvbmZpZ3VyZSAKK2RlbHRhc2sgZG9fY29tcGlsZSAKK2RlbHRhc2sgZG9fcGFja2FnZSAKK2RlbHRhc2sgZG9fcGFja2FnZV93cml0ZV9ycG0gCitkZWx0YXNrIGRvX3BhY2thZ2Vfd3JpdGVfaXBrIAorZGVsdGFzayBkb19wYWNrYWdlX3dyaXRlX2RlYgorZGVsdGFzayBkb19pbnN0YWxsIAorZGVsdGFzayBkb19wb3B1bGF0ZV9zeXNyb290CitkZWx0YXNrIGRvX3BvcHVsYXRlX2xpYyAKK2RlbHRhc2sgZG9fcGFja2FnZV9xYQorZGVsdGFzayBkb19wYWNrYWdlZGF0YQorZGVsdGFzayBkb19ybV93b3JrCisKK1BOID0gImdjYy1zb3VyY2UtJHtQVn0iCitXT1JLRElSID0gIiR7VE1QRElSfS93b3JrLXNoYXJlZC9nY2MtJHtQVn0tJHtQUn0iCitTU1RBVEVfU1dTUEVDID0gInNzdGF0ZTpnY2M6OiR7UFZ9OiR7UFJ9Ojoke1NTVEFURV9WRVJTSU9OfToiCisKK1NUQU1QID0gIiR7U1RBTVBTX0RJUn0vd29yay1zaGFyZWQvZ2NjLSR7UFZ9LSR7UFJ9IgorU1RBTVBDTEVBTiA9ICIke1NUQU1QU19ESVJ9L3dvcmstc2hhcmVkL2djYy0ke1BWfS0qIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyA9ICIiCitQQUNLQUdFUyA9ICIiCisKK3B5dGhvbiBkb19wcmVjb25maWd1cmUgKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgY21kID0gZC5leHBhbmQoJ2NkICR7U30gJiYgUEFUSD0ke1BBVEh9IGdudS1jb25maWdpemUnKQorICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULCBzaGVsbD1UcnVlKQorICAgICMgU2VlIDAwNDQtZ2VuZ3R5cGVzLnBhdGNoLCB3ZSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhpcyBmaWxlCisgICAgYmIudXRpbHMucmVtb3ZlKGQuZXhwYW5kKCIke1N9L2djYy9nZW5ndHlwZS1sZXguYyIpKQorICAgIGNtZCA9IGQuZXhwYW5kKCJzZWQgLWkgJ3MvQlVJTERfSU5GTz1pbmZvL0JVSUxEX0lORk89LycgJHtTfS9nY2MvY29uZmlndXJlIikKKyAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwgc2hlbGw9VHJ1ZSkKK30KK2FkZHRhc2sgZG9fcHJlY29uZmlndXJlIGFmdGVyIGRvX3BhdGNoCitkb19wcmVjb25maWd1cmVbZGVwZW5kc10gKz0gImdudS1jb25maWctbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QgYXV0b2NvbmYtbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3QiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OTBmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNC44LmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2UuaW5jCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5MGZhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZV80LjkuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXNvdXJjZS5pbmMKKworRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy1zb3VyY2VfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODkwZmEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlXzUuMi5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2Mtc291cmNlLmluYworCitFWENMVURFX0ZST01fV09STEQgPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLXRhcmdldC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMTYwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy10YXJnZXQuaW5jCkBAIC0wLDAgKzEsMjE0IEBACitHQ0NNVUxUSUxJQiA9ICItLWVuYWJsZS1tdWx0aWxpYiIKK3JlcXVpcmUgZ2NjLWNvbmZpZ3VyZS1jb21tb24uaW5jCisKK0VYVFJBX09FQ09ORl9QQVRIUyA9ICJcCisgICAgLS13aXRoLXN5c3Jvb3Q9LyBcCisgICAgLS13aXRoLWJ1aWxkLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyAgICAtLXdpdGgtbmF0aXZlLXN5c3RlbS1oZWFkZXItZGlyPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2luY2x1ZGVkaXJ9IFwKKyAgICAtLXdpdGgtZ3h4LWluY2x1ZGUtZGlyPSR7aW5jbHVkZWRpcn0vYysrLyR7QklOVn0gXAorIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpbnV4c3RkYmFzZSA9ICIgLS1lbmFibGUtY2xvY2FsZT1nbnUiCisKKyMgbGliY2MxIHJlcXVyZXMgZ2NjX2N2X29iamR1bXAgd2hlbiBjcm9zcyBidWlsZCwgYnV0IGdjY19jdl9vYmpkdW1wIGlzCisjIHNldCBpbiBzdWJkaXIgZ2NjLCBzbyBzdWJkaXIgbGliY2MxIGNhbid0IHVzZSBpdCwgZXhwb3J0IGl0IGhlcmUgdG8KKyMgZml4IHRoZSBwcm9ibGVtLgorZXhwb3J0IGdjY19jdl9vYmpkdW1wID0gIiR7VEFSR0VUX1BSRUZJWH1vYmpkdW1wIgorCitFWFRSQV9PRUNPTkZfR0NDX0ZMT0FUID0gIiR7QGdldF9nY2NfZmxvYXRfc2V0dGluZyhiYiwgZCl9IgorCitQQUNLQUdFUyA9ICJcCisgICAgJHtQTn0gJHtQTn0tcGx1Z2lucyAke1BOfS1zeW1saW5rcyBcCisgICAgZysrIGcrKy1zeW1saW5rcyBcCisgICAgY3BwIGNwcC1zeW1saW5rcyBcCisgICAgZzc3IGc3Ny1zeW1saW5rcyBcCisgICAgZ2ZvcnRyYW4gZ2ZvcnRyYW4tc3ltbGlua3MgXAorICAgIGdjb3YgZ2Nvdi1zeW1saW5rcyBcCisgICAgJHtQTn0tZG9jIFwKKyAgICAke1BOfS1kZXYgXAorICAgICR7UE59LWRiZyBcCisiCisKK0ZJTEVTXyR7UE59ID0gIlwKKyAgICAke2JpbmRpcn0vJHtUQVJHRVRfUFJFRklYfWdjYyogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9jb2xsZWN0MiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjKiBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2x0byogXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWIqJHtTT0xJQlN9IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGlibHRvKiR7U09MSUJTREVWfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qLm8gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vc3BlY3MgXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTfSBcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUtZml4ZWQgXAorIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1zbyIKKworRklMRVNfJHtQTn0tZGJnICs9ICJcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9Ly5kZWJ1Zy8gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4vLmRlYnVnLyBcCisiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliKiR7U09MSUJTREVWfSBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYioke1NPTElCU0RFVn0gXAorICAgICR7Z2NjbGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2luY2x1ZGUvIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vcGx1Z2luL2dlbmd0eXBlIFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L3BsdWdpbi9ndHlwZS5zdGF0ZSBcCisiCitGSUxFU18ke1BOfS1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2NjIFwKKyAgICAke2JpbmRpcn0vZ2NjIFwKKyAgICAke2JpbmRpcn0vZ2NjYnVnIFwKKyIKKworRklMRVNfJHtQTn0tcGx1Z2lucyA9ICJcCisgICAgJHtnY2NsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9wbHVnaW4gXAorIgorQUxMT1dfRU1QVFlfJHtQTn0tcGx1Z2lucyA9ICIxIgorCitGSUxFU19nNzcgPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Zzc3IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vZjc3MSBcCisiCitGSUxFU19nNzctc3ltbGlua3MgPSAiXAorICAgICR7YmluZGlyfS9nNzcgXAorICAgICR7YmluZGlyfS9mNzcgXAorIgorRklMRVNfZ2ZvcnRyYW4gPSAiXAorICAgICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9mOTUxIFwKKyIKK0ZJTEVTX2dmb3J0cmFuLXN5bWxpbmtzID0gIlwKKyAgICAke2JpbmRpcn0vZ2ZvcnRyYW4gXAorICAgICR7YmluZGlyfS9mOTUiCisKK0ZJTEVTX2NwcCA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1jcHAgXAorICAgICR7YmFzZV9saWJkaXJ9L2NwcCBcCisgICAgJHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2NjMSIKK0ZJTEVTX2NwcC1zeW1saW5rcyA9ICIke2JpbmRpcn0vY3BwIgorCitGSUxFU19nY292ID0gIiR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Z2NvdiBcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nY292LXRvb2wgXAorIgorRklMRVNfZ2Nvdi1zeW1saW5rcyA9ICIke2JpbmRpcn0vZ2NvdiBcCisgICAgJHtiaW5kaXJ9L2djb3YtdG9vbCBcCisiCisKK0ZJTEVTX2crKyA9ICJcCisgICAgJHtiaW5kaXJ9LyR7VEFSR0VUX1BSRUZJWH1nKysgXAorICAgICR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9jYzFwbHVzIFwKKyIKK0ZJTEVTX2crKy1zeW1saW5rcyA9ICJcCisgICAgJHtiaW5kaXJ9L2MrKyBcCisgICAgJHtiaW5kaXJ9L2crKyBcCisiCisKK0ZJTEVTXyR7UE59LWRvYyA9ICJcCisgICAgJHtpbmZvZGlyfSBcCisgICAgJHttYW5kaXJ9IFwKKyAgICAke2djY2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUvUkVBRE1FIFwKKyIKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSBhbGwtaG9zdAorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwtaG9zdAorCisJIyBBZGQgdW53aW5kLmgsIGl0IGNvbWVzIGZyb20gbGliZ2NjIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gYnVpbGQgYWdhaW4KKwlpbnN0YWxsICR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS8ke1RBUkdFVF9TWVN9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS91bndpbmQuaCAke0R9JHtsaWJkaXJ9L2djYy8ke1RBUkdFVF9TWVN9LyR7QklOVn0vaW5jbHVkZS8KKworCSMgSW5mbyBkaXIgbGlzdGluZyBpc24ndCBpbnRlcmVzdGluZyBhdCB0aGlzIHBvaW50IHNvIHJlbW92ZSBpdCBpZiBpdCBleGlzdHMuCisJaWYgWyAtZSAiJHtEfSR7aW5mb2Rpcn0vZGlyIiBdOyB0aGVuCisJCXJtIC1mICR7RH0ke2luZm9kaXJ9L2RpcgorCWZpCisKKwkjIENsZWFudXAgc29tZSBvZiB0aGUgJHtsaWJkaXJ9eyxleGVjfS9nY2Mgc3R1ZmYgLi4uCisJcm0gLXIgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtciAke0R9JHtsaWJleGVjZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luc3RhbGwtdG9vbHMKKwlybSAtcmYgJHtEfSR7bGliZXhlY2Rpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS8qLmxhCisJcm1kaXIgJHtEfSR7aW5jbHVkZWRpcn0KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisKKwkjIEhhY2sgYXJvdW5kIHNwZWNzIGZpbGUgYXNzdW1wdGlvbnMKKwl0ZXN0IC1mICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcyAmJiBzZWQgLWkgLWUgJy9eKmNyb3NzX2NvbXBpbGU6JC8geyBuOyBzLzEvMC87IH0nICR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9zcGVjcworCisJIyBDbGVhbnVwIG1hbnBhZ2VzLi4KKwlybSAtcmYgJHtEfSR7bWFuZGlyfS9tYW43CisKKwljZCAke0R9JHtiaW5kaXJ9CisKKwkjIFdlIGNhcmUgYWJvdXQgZysrIG5vdCBjKysKKwlybSAtZiAqYysrCisKKwkjIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGdjYy08dmVyc2lvbj4gb25lcyBmb3IgdGhpcworCXJtIC1mICpnY2MtPy4/KgorCisJIyBXZSB1c2UgbGliaWJlcnR5IGZyb20gYmludXRpbHMKKwlmaW5kICR7RH0ke2xpYmRpcn0gLW5hbWUgbGliaWJlcnR5LmEgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7bGliZGlyfSAtbmFtZSBsaWJpYmVydHkuaCB8IHhhcmdzIHJtIC1mCisKKwkjIE5vdCBzdXJlIHdoeSB3ZSBlbmQgdXAgd2l0aCB0aGVzZSBidXQgd2UgZG9uJ3Qgd2FudCB0aGVtLi4uCisJcm0gLWYgJHtUQVJHRVRfUFJFRklYfSR7VEFSR0VUX1BSRUZJWH0qCisKKwkjIFN5bWxpbmtzIHNvIHdlIGNhbiB1c2UgdGhlc2UgdHJpdmlhbGx5IG9uIHRoZSB0YXJnZXQKKwlpZiBbIC1lICR7VEFSR0VUX1BSRUZJWH1nNzcgXTsgdGhlbgorCQlsbiAtc2YgJHtUQVJHRVRfUFJFRklYfWc3NyBnNzcgfHwgdHJ1ZQorCQlsbiAtc2YgZzc3IGY3NyB8fCB0cnVlCisJZmkKKwlpZiBbIC1lICR7VEFSR0VUX1BSRUZJWH1nZm9ydHJhbiBdOyB0aGVuCisJCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Z2ZvcnRyYW4gZ2ZvcnRyYW4gfHwgdHJ1ZQorCQlsbiAtc2YgZ2ZvcnRyYW4gZjk1IHx8IHRydWUKKwlmaQorCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9ZysrIGcrKworCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Z2NjIGdjYworCWxuIC1zZiAke1RBUkdFVF9QUkVGSVh9Y3BwIGNwcAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9saWJkaXJ9CisJbG4gLXNmICR7YmluZGlyfS8ke1RBUkdFVF9QUkVGSVh9Y3BwICR7RH0ke2Jhc2VfbGliZGlyfS9jcHAKKwlsbiAtc2YgZysrIGMrKworCWxuIC1zZiBnY2MgY2MKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgIworICAgICAgICAjIFRoZWZpeGluYy5zaCBzY3JpcHQsIHJ1biBvbiB0aGUgZ2NjJ3MgY29tcGlsZSBwaGFzZSwgbG9va3MgaW50byBzeXNyb290IGhlYWRlcgorICAgICAgICAjIGZpbGVzIGFuZCBwbGFjZXMgdGhlIG1vZGlmaWVkIGZpbGVzIGludG8KKyAgICAgICAgIyB7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIGZvbGRlci4gVGhpcyBtYWtlcyB0aGUKKyAgICAgICAgIyBidWlsZCBub3QgZGV0ZXJtaW5pc3RpYy4gVGhlIGZvbGxvd2luZyBjb2RlIHBydW5lcyBhbGwgdGhvc2UgaGVhZGVycworICAgICAgICAjIGV4Y2VwdCB0aG9zZSB1bmRlciBpbmNsdWRlLWZpeGVkL2xpbnV4LCAqbGltaXRzLmggYW5kIFJFQURNRSwgeWllbGRpbmcKKyAgICAgICAgIyB0aGUgc2FtZSBpbmNsdWRlLWZpeGVkIGZvbGRlcnMgbm8gbWF0dGVyIHdoYXQgc3lzcm9vdAorCisgICAgICAgIGluY2x1ZGVfZml4ZWQ9IiR7RH0ke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9pbmNsdWRlLWZpeGVkIgorICAgICAgICBmb3IgZiBpbiAkKGZpbmQgJHtpbmNsdWRlX2ZpeGVkfSAtdHlwZSBmKTsgZG8KKyAgICAgICAgICAgICAgICBjYXNlICRmIGluCisgICAgICAgICAgICAgICAgKi9pbmNsdWRlLWZpeGVkL2xpbnV4LyopCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKi9pbmNsdWRlLWZpeGVkLypsaW1pdHMuaCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAqL2luY2x1ZGUtZml4ZWQvUkVBRE1FKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGZpbGUgYW5kIGRpcmVjdG9yeSBpZiBlbXB0eQorICAgICAgICAgICAgICAgICAgICBiYmRlYnVnIDIgIlBydW5pbmcgJGYiCisgICAgICAgICAgICAgICAgICAgIHJtICRmCisgICAgICAgICAgICAgICAgICAgIGZpbmQgJChkaXJuYW1lICRmKSAtbWF4ZGVwdGggMCAtZW1wdHkgLWV4ZWMgcm1kaXIge30gXDsKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgIGRvbmUKK30KKworIyBJbnN0YWxsaW5nIC91c3IvbGliL2djYy8qIG1lYW5zIHdlJ2QgaGF2ZSB0d28gY29waWVzLCBvbmUgZnJvbSBnY2MtY3Jvc3MKKyMgYW5kIG9uZSBmcm9tIGhlcmUuIFRoZXNlIGNhbiBjb25mdXNlIGdjYyBjcm9zcyB3aGVyZSBpbmNsdWRlcyB1c2UgI2luY2x1ZGVfbmV4dAorIyBhbmQgYnVpbGRzIHRyYWNrIGZpbGUgZGVwZW5kZW5jaWVzIChlLmcuIHBlcmwgYW5kIGl0cyBtYWtlZGVwZW5kcyBjb2RlKS4KKyMgRm9yIGRldGVybWluaXNtIHdlIGRvbid0IGluc3RhbGwgdGhpcyBldmVyIGFuZCByZWx5IG9uIHRoZSBjb3B5IGZyb20gZ2NjLWNyb3NzLgorIyBbWU9DVE8gIzcyODddCitzeXNyb290X3N0YWdlX2RpcnNfYXBwZW5kICgpIHsKKwlybSAtcmYgJHRvJHtsaWJkaXJ9L2djYworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjE4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2djY180LjguYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgZ2NjLXRhcmdldC5pbmMKKworIyBCdWlsZGluZyB3aXRoIHRodW1iIGVuYWJsZWQgb24gYXJtdjR0IGZhaWxzIHdpdGgKKyMgfCBnY2MtNC44LjEtcjAvZ2NjLTQuOC4xL2djYy9jcC9kZWNsLmM6NzQzODooLnRleHQudW5saWtlbHkrMHgyZmEpOiByZWxvY2F0aW9uIHRydW5jYXRlZCB0byBmaXQ6IFJfQVJNX1RITV9DQUxMIGFnYWluc3Qgc3ltYm9sIGBmYW5jeV9hYm9ydChjaGFyIGNvbnN0KiwgaW50LCBjaGFyIGNvbnN0KiknIGRlZmluZWQgaW4gLmdsdWVfNyBzZWN0aW9uIGluIGxpbmtlciBzdHVicworIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDQyOigudGV4dC51bmxpa2VseSsweDMxOCk6IGFkZGl0aW9uYWwgcmVsb2NhdGlvbiBvdmVyZmxvd3Mgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQKK0FSTV9JTlNUUlVDVElPTl9TRVRfYXJtdjQgPSAiYXJtIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODRiYWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNC45LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCisjU1lTVEVNSEVBREVSU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAJyR7dGFyZ2V0X2luY2x1ZGVkaXJ9Jy5yZXBsYWNlKGQuZ2V0VmFyKCdTREtQQVRIJywgVHJ1ZSksJyVyJyl9IgorI1NZU1RFTUxJQlNfY2xhc3MtbmF0aXZlc2RrID0gIiR7QCcke3RhcmdldF9iYXNlX2xpYmRpcn0nLnJlcGxhY2UoZC5nZXRWYXIoJ1NES1BBVEgnLCBUcnVlKSwnJXInKX0vIgorI1NZU1RFTUxJQlMxX2NsYXNzLW5hdGl2ZXNkayA9ICIke0AnJHt0YXJnZXRfbGliZGlyfScucmVwbGFjZShkLmdldFZhcignU0RLUEFUSCcsIFRydWUpLCclcicpfS8iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjXzUuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGE1MjNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9nY2NfNS4yLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBnY2MtdGFyZ2V0LmluYworCisjIEJ1aWxkaW5nIHdpdGggdGh1bWIgZW5hYmxlZCBvbiBhcm12NHQgZmFpbHMgd2l0aAorIyB8IGdjYy00LjguMS1yMC9nY2MtNC44LjEvZ2NjL2NwL2RlY2wuYzo3NDM4OigudGV4dC51bmxpa2VseSsweDJmYSk6IHJlbG9jYXRpb24gdHJ1bmNhdGVkIHRvIGZpdDogUl9BUk1fVEhNX0NBTEwgYWdhaW5zdCBzeW1ib2wgYGZhbmN5X2Fib3J0KGNoYXIgY29uc3QqLCBpbnQsIGNoYXIgY29uc3QqKScgZGVmaW5lZCBpbiAuZ2x1ZV83IHNlY3Rpb24gaW4gbGlua2VyIHN0dWJzCisjIHwgZ2NjLTQuOC4xLXIwL2djYy00LjguMS9nY2MvY3AvZGVjbC5jOjc0NDI6KC50ZXh0LnVubGlrZWx5KzB4MzE4KTogYWRkaXRpb25hbCByZWxvY2F0aW9uIG92ZXJmbG93cyBvbWl0dGVkIGZyb20gdGhlIG91dHB1dAorQVJNX0lOU1RSVUNUSU9OX1NFVF9hcm12NCA9ICJhcm0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgRWFzaWVzdCB3YXkgdG8gc3RvcCBiYWQgUlBBVEhzIGdldHRpbmcgaW50byB0aGUgbGlicmFyeSBzaW5jZSB3ZSBoYXZlIGEKKwkjIGJyb2tlbiBsaWJ0b29sIGhlcmUKKwlzZWQgLWkgLWUgJ3MvaGFyZGNvZGVfaW50b19saWJzPXllcy9oYXJkY29kZV9pbnRvX2xpYnM9bm8vJyAke1N9L2xpYmNjMS9jb25maWd1cmUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDllYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtY29tbW9uLmluYwpAQCAtMCwwICsxLDE0NCBAQAorQlBOID0gImxpYmdjYyIKKworcmVxdWlyZSBnY2Mtc2hhcmVkLXNvdXJjZS5pbmMKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworZG9fY29uZmlndXJlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfbGliZGlyfSAke0R9JHtsaWJkaXJ9CisJaGFyZGxpbmtkaXIgJHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9LyR7TElCR0NDQlVJTERUUkVFTkFNRX0kdGFyZ2V0LyAke0J9CisJbWtkaXIgLXAgJHtCfS8ke0JQTn0KKwlta2RpciAtcCAke0J9LyR0YXJnZXQvJHtCUE59LworCWNkICR7Qn0vJHtCUE59CisJY2htb2QgYSt4ICR7U30vJHtCUE59L2NvbmZpZ3VyZQorCSR7U30vJHtCUE59L2NvbmZpZ3VyZSAke0NPTkZJR1VSRU9QVFN9ICR7RVhUUkFfT0VDT05GfQorfQorCitkb19jb21waWxlICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR7QlBOfQorCW9lX3J1bm1ha2UgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJHtCUE59LworfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR7QlBOfQorCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgTVVMVElCVUlMRFRPUD0ke0J9LyR0YXJnZXQvJHtCUE59LyBpbnN0YWxsCisKKwkjIE1vdmUgbGliZ2NjX3MgaW50byAvbGliCisJbWtkaXIgLXAgJHtEfSR7YmFzZV9saWJkaXJ9CisJaWYgWyAtZiAke0R9JHtsaWJkaXJ9L25vZi9saWJnY2Nfcy5zbyBdOyB0aGVuCisJCW12ICR7RH0ke2xpYmRpcn0vbm9mL2xpYmdjYyogJHtEfSR7YmFzZV9saWJkaXJ9CisJZWxzZQorCQltdiAke0R9JHtsaWJkaXJ9L2xpYmdjYyogJHtEfSR7YmFzZV9saWJkaXJ9IHx8IHRydWUKKwlmaQorCisJIyBpbnN0YWxsIHRoZSBydW50aW1lIGluIC91c3IvbGliLyBub3QgaW4gL3Vzci9saWIvZ2NjIG9uIHRhcmdldAorCSMgc28gdGhhdCBjcm9zcy1nY2MgY2FuIGZpbmQgaXQgaW4gdGhlIHN5c3Jvb3QKKworCW12ICR7RH0ke2xpYmRpcn0vZ2NjLyogJHtEfSR7bGliZGlyfQorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2djYy8KKwkjIHVud2luZC5oIGlzIGluc3RhbGxlZCBoZXJlIHdoaWNoIGlzIHNoaXBwZWQgaW4gZ2NjLWNyb3NzCisJIyBhcyB3ZWxsIGFzIHRhcmdldCBnY2MgYW5kIHRoZXkgYXJlIGlkZW50aWNhbCBzbyB3ZSBkb250CisJIyBzaGlwIG9uZSB3aXRoIGxpYmdjYyBoZXJlCisJcm0gLXJmICR7RH0ke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2luY2x1ZGUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGliYy1iYXJlbWV0YWwgKCkgeworCXJtZGlyICR7RH0ke2Jhc2VfbGliZGlyfQorfQorCitSREVQRU5EU18ke1BOfS1kZXZfbGliYy1iYXJlbWV0YWwgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworYWRkdGFzayBtdWx0aWxpYl9pbnN0YWxsIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX3BhY2thZ2UgZG9fcG9wdWxhdGVfc3lzcm9vdAorIyB0aGlzIG1ha2VzIG11bHRpbGliIGdjYyBmaWxlcyBmaW5kYWJsZSBmb3IgdGFyZ2V0IGdjYworIyBlLmcuCisjICAgIC91c3IvbGliL2k1ODYtcG9reW1sbGliMzItbGludXgvNC43LworIyBieSBjcmVhdGluZyB0aGlzIHN5bWxpbmsgdG8gaXQKKyMgICAgL3Vzci9saWI2NC94ODZfNjQtcG9reS1saW51eC80LjcvMzIKKworZmFrZXJvb3QgcHl0aG9uIGRvX211bHRpbGliX2luc3RhbGwoKSB7CisgICAgaW1wb3J0IHJlCisKKyAgICBtdWx0aWxpYnMgPSBkLmdldFZhcignTVVMVElMSUJfVkFSSUFOVFMnLCBUcnVlKQorICAgIGlmIG5vdCBtdWx0aWxpYnMgb3IgYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlc2RrJywgZCk6CisgICAgICAgIHJldHVybgorCisgICAgYmludiA9IGQuZ2V0VmFyKCdCSU5WJywgVHJ1ZSkKKworICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkKKyAgICBpZiAoJyVzbGliZ2NjJyAlIG1scHJlZml4KSAhPSBkLmdldFZhcignUE4nLCBUcnVlKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBtbHByZWZpeDoKKyAgICAgICAgb3JpZ190dW5lID0gZC5nZXRWYXIoJ0RFRkFVTFRUVU5FX01VTFRJTElCX09SSUdJTkFMJywgVHJ1ZSkKKyAgICAgICAgb3JpZ190dW5lX3BhcmFtcyA9IGdldF90dW5lX3BhcmFtZXRlcnMob3JpZ190dW5lLCBkKQorICAgICAgICBvcmlnX3R1bmVfYmFzZWxpYiA9IG9yaWdfdHVuZV9wYXJhbXNbJ2Jhc2VsaWInXQorICAgICAgICBvcmlnX3R1bmVfYml0bmVzcyA9IG9yaWdfdHVuZV9iYXNlbGliLnJlcGxhY2UoJ2xpYicsICcnKQorICAgICAgICBpZiBub3Qgb3JpZ190dW5lX2JpdG5lc3M6CisgICAgICAgICAgICBvcmlnX3R1bmVfYml0bmVzcyA9ICczMicKKworICAgICAgICBzcmMgPSAnLi4vLi4vLi4vJyArIG9yaWdfdHVuZV9iYXNlbGliICsgJy8nICsgXAorICAgICAgICAgICAgZC5nZXRWYXIoJ1RBUkdFVF9TWVNfTVVMVElMSUJfT1JJR0lOQUwnLCBUcnVlKSArICcvJyArIGJpbnYgKyAnLycKKworICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIFwKKyAgICAgICAgICAgIGQuZ2V0VmFyKCdUQVJHRVRfU1lTJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nICsgb3JpZ190dW5lX2JpdG5lc3MKKworICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoZGVzdCk6CisgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgb3Muc3ltbGluayhzcmMsIGRlc3QpCisgICAgICAgIHJldHVybgorCisKKyAgICBmb3IgbWwgaW4gbXVsdGlsaWJzLnNwbGl0KCk6CisgICAgICAgIHR1bmUgPSBkLmdldFZhcignREVGQVVMVFRVTkVfdmlydGNsYXNzLW11bHRpbGliLScgKyBtbCwgVHJ1ZSkKKyAgICAgICAgaWYgbm90IHR1bmU6CisgICAgICAgICAgICBiYi53YXJuKCdERUZBVUxUVFVORV92aXJ0Y2xhc3MtbXVsdGlsaWItJXMgaXMgbm90IGRlZmluZWQuIFNraXBwaW5nLi4uJyAlIG1sKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0dW5lX3BhcmFtZXRlcnMgPSBnZXRfdHVuZV9wYXJhbWV0ZXJzKHR1bmUsIGQpCisgICAgICAgIHR1bmVfYmFzZWxpYiA9IHR1bmVfcGFyYW1ldGVyc1snYmFzZWxpYiddCisgICAgICAgIGlmIG5vdCB0dW5lX2Jhc2VsaWI6CisgICAgICAgICAgICBiYi53YXJuKCJUdW5lICVzIGRvZXNuJ3QgaGF2ZSBhIGJhc2VsaWIgc2V0LiBTa2lwcGluZy4uLiIgJSB0dW5lKQorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICB0dW5lX2FyY2ggPSB0dW5lX3BhcmFtZXRlcnNbJ2FyY2gnXQorICAgICAgICB0dW5lX2JpdG5lc3MgPSB0dW5lX2Jhc2VsaWIucmVwbGFjZSgnbGliJywgJycpCisgICAgICAgIGlmIG5vdCB0dW5lX2JpdG5lc3M6CisgICAgICAgICAgICB0dW5lX2JpdG5lc3MgPSAnMzInICMgL2xpYiA9PiAzMmJpdCBsaWIKKworICAgICAgICBzcmMgPSAnLi4vLi4vLi4vJyArIHR1bmVfYmFzZWxpYiArICcvJyArIFwKKyAgICAgICAgICAgIHR1bmVfYXJjaCArIGQuZ2V0VmFyKCdUQVJHRVRfVkVORE9SJywgVHJ1ZSkgKyAnbWwnICsgbWwgKyBcCisgICAgICAgICAgICAnLScgKyBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkgKyAnLycgKyBiaW52ICsgJy8nCisKKyAgICAgICAgZGVzdCA9IGQuZ2V0VmFyKCdEJywgVHJ1ZSkgKyBkLmdldFZhcignbGliZGlyJywgVHJ1ZSkgKyAnLycgKyBcCisgICAgICAgICAgICBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpICsgJy8nICsgYmludiArICcvJyArIHR1bmVfYml0bmVzcworCisgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhkZXN0KToKKyAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKK30KKworZGVmIGdldF9vcmlnaW5hbF92ZW5kb3JvcyhkKToKKyAgICB2ZW5kb3JvcyA9IGQuZXhwYW5kKCcke1RBUkdFVF9WRU5ET1J9LSR7VEFSR0VUX09TfScpCisgICAgZm9yIHN1ZmZpeCBpbiBbZC5nZXRWYXIoJ0FCSUVYVEVOU0lPTicsIFRydWUpLCBkLmdldFZhcignTElCQ0VYVEVOU0lPTicsIFRydWUpXToKKyAgICAgICAgaWYgc3VmZml4IGFuZCB2ZW5kb3Jvcy5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgdmVuZG9yb3MgPSB2ZW5kb3Jvc1s6LWxlbihzdWZmaXgpXQorICAgIHJldHVybiB2ZW5kb3JvcworCitPUklHX1RBUkdFVF9WRU5ET1JPUyA6PSAiJHtAZ2V0X29yaWdpbmFsX3ZlbmRvcm9zKGQpfSIKK0JBU0VUQVJHRVRfU1lTID0gIiR7VEFSR0VUX0FSQ0h9JHtPUklHX1RBUkdFVF9WRU5ET1JPU30iCisKK2FkZHRhc2sgZXh0cmFfc3ltbGlua3MgYWZ0ZXIgZG9fbXVsdGlsaWJfaW5zdGFsbCBiZWZvcmUgZG9fcGFja2FnZSBkb19wb3B1bGF0ZV9zeXNyb290CitmYWtlcm9vdCBweXRob24gZG9fZXh0cmFfc3ltbGlua3MoKSB7CisgICAgdGFyZ2V0c3lzID0gZC5nZXRWYXIoJ0JBU0VUQVJHRVRfU1lTJywgVHJ1ZSkKKworICAgIGlmIHRhcmdldHN5cyAhPSBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpOgorICAgICAgICBkZXN0ID0gZC5nZXRWYXIoJ0QnLCBUcnVlKSArIGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSArICcvJyArIHRhcmdldHN5cworICAgICAgICBzcmMgPSBkLmdldFZhcignVEFSR0VUX1NZUycsIFRydWUpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmxleGlzdHMoZGVzdCkgYW5kIG9zLnBhdGgubGV4aXN0cyhkLmdldFZhcignRCcsIFRydWUpICsgZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpKToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkZXN0KQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTkyZjAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbC5pbmMKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBsaWJnY2MtY29tbW9uLmluYworCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYy1pbml0aWFsIgorCitMSUNFTlNFID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorCitTVEFHSU5HQ0MgPSAiZ2NjLWNyb3NzLWluaXRpYWwtJHtUQVJHRVRfQVJDSH0iCitTVEFHSU5HQ0NfY2xhc3MtbmF0aXZlc2RrID0gImdjYy1jcm9zc3Nkay1pbml0aWFsLSR7VEFSR0VUX0FSQ0h9IgorUEFUSF9wcmVwZW5kID0gIiR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS4ke1NUQUdJTkdDQ306IgorCitQQUNLQUdFUyA9ICIiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNoYXJlZCIKKworTElCR0NDQlVJTERUUkVFTkFNRSA9ICJnY2MtYnVpbGQtaW50ZXJuYWwtaW5pdGlhbC0iCisKK2RvX3BvcHVsYXRlX3N5c3Jvb3Rbc3N0YXRlLW91dHB1dGRpcnNdID0gIiR7U1RBR0lOR19ESVJfVENCT09UU1RSQVB9LyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWYyNTNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF80LjguYmIKQEAgLTAsMCArMSwyIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2NjLWluaXRpYWwuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNC45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjI1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy1pbml0aWFsXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MtaW5pdGlhbC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MtaW5pdGlhbF81LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmMjUzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjLWluaXRpYWxfNS4yLmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdjYy1pbml0aWFsLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnY2MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWFkYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjYy5pbmMKQEAgLTAsMCArMSw0MSBAQAorcmVxdWlyZSBsaWJnY2MtY29tbW9uLmluYworCitERVBFTkRTID0gInZpcnR1YWwvJHtUQVJHRVRfUFJFRklYfWdjYyB2aXJ0dWFsLyR7VEFSR0VUX1BSRUZJWH1nKysiCisKK1BBQ0tBR0VTID0gIlwKKyAgICAke1BOfSBcCisgICAgJHtQTn0tZGV2IFwKKyAgICAke1BOfS1kYmcgXAorIgorCisjIEFsbCBsaWJnY2Mgc291cmNlIGlzIG1hcmtlZCB3aXRoIHRoZSBleGNlcHRpb24uCisjCitMSUNFTlNFXyR7UE59ID0gIkdQTC0zLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIgorTElDRU5TRV8ke1BOfS1kZXYgPSAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iCitMSUNFTlNFXyR7UE59LWRiZyA9ICJHUEwtMy4wLXdpdGgtR0NDLWV4Y2VwdGlvbiIKKworCitGSUxFU18ke1BOfSA9ICIke2Jhc2VfbGliZGlyfS9saWJnY2MqLnNvLioiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7YmFzZV9saWJkaXJ9L2xpYmdjYyouc28gXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vKmNydCogXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vNjQgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vMzIgXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0veDMyIFwKKyAgICAke2xpYmRpcn0vJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L24zMiBcCisgICAgJHtsaWJkaXJ9LyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnY2MqIFwKKyAgICAke0BiYXNlX2NvbmRpdGlvbmFsKCdCQVNFVEFSR0VUX1NZUycsICcke1RBUkdFVF9TWVN9JywgJycsICcke2xpYmRpcn0vJHtCQVNFVEFSR0VUX1NZU30nLCBkKX0gXAorICAgICR7bGliZGlyfS8ke1RBUkdFVF9TWVN9LyR7QklOVn0vbGliZ2Nvdi5hIFwKKyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS8uZGVidWcvIgorCitMSUJHQ0NCVUlMRFRSRUVOQU1FID0gImdjYy1idWlsZC1pbnRlcm5hbC0iCisKK2RvX3BhY2thZ2VbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9pcGtbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9kZWJbZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorZG9fcGFja2FnZV93cml0ZV9ycG1bZGVwZW5kc10gKz0gInZpcnR1YWwvJHtNTFBSRUZJWH1saWJjOmRvX3BhY2thZ2VkYXRhIgorCitJTlNBTkVfU0tJUF8ke1BOfS1kZXYgPSAic3RhdGljZGV2IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOC5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY180LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzQuOS5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdjY181LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxNTJmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2NjXzUuMi5iYgpAQCAtMCwwICsxLDIgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnY2MuaW5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW4uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0Mjg0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuLmluYwpAQCAtMCwwICsxLDc0IEBACityZXF1aXJlIGdjYy1jb25maWd1cmUtY29tbW9uLmluYworCitFWFRSQV9PRUNPTkZfUEFUSFMgPSAiXAorICAgIC0td2l0aC1zeXNyb290PS9ub3QvZXhpc3QgXAorICAgIC0td2l0aC1idWlsZC1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSBcCisiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJbXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWhhcmRsaW5rZGlyICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9nY2MtYnVpbGQtaW50ZXJuYWwtJG10YXJnZXQgJHtCfQorCisJZWNobyAiQ29uZmlndXJpbmcgbGliZ2ZvcnRyYW4iCisJcm0gLXJmICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlta2RpciAtcCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJY2QgJHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworCWNobW9kIGEreCAke1N9L2xpYmdmb3J0cmFuL2NvbmZpZ3VyZQorCSR7U30vbGliZ2ZvcnRyYW4vY29uZmlndXJlICR7Q09ORklHVVJFT1BUU30gJHtFWFRSQV9PRUNPTkZ9CisJIyBFYXNpZXN0IHdheSB0byBzdG9wIGJhZCBSUEFUSHMgZ2V0dGluZyBpbnRvIHRoZSBsaWJyYXJ5IHNpbmNlIHdlIGhhdmUgYQorCSMgYnJva2VuIGxpYnRvb2wgaGVyZQorCXNlZCAtaSAtZSAncy9oYXJkY29kZV9pbnRvX2xpYnM9eWVzL2hhcmRjb2RlX2ludG9fbGlicz1uby8nICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi9saWJ0b29sCit9CisKK2RvX2NvbXBpbGUgKCkgeworCXRhcmdldD1gZWNobyAke1RBUkdFVF9TWVN9IHwgc2VkIC1lIHMjLSR7U0RLUEtHU1VGRklYfSMjYAorCWNkICR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8KKwlvZV9ydW5tYWtlIE1VTFRJQlVJTERUT1A9JHtCfS8kdGFyZ2V0L2xpYmdmb3J0cmFuLworfQorCitkb19pbnN0YWxsICgpIHsKKwl0YXJnZXQ9YGVjaG8gJHtUQVJHRVRfU1lTfSB8IHNlZCAtZSBzIy0ke1NES1BLR1NVRkZJWH0jI2AKKwljZCAke0J9LyR0YXJnZXQvbGliZ2ZvcnRyYW4vCisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBNVUxUSUJVSUxEVE9QPSR7Qn0vJHRhcmdldC9saWJnZm9ydHJhbi8gaW5zdGFsbAorCWlmIFsgLWQgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlIF07IHRoZW4KKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2ZpbmNsdWRlCisJZmkKKwlpZiBbIC1kICR7RH0ke2luZm9kaXJ9IF07IHRoZW4KKwkJcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgLXAgJHtEfSR7aW5mb2Rpcn0KKwlmaQorCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCitERVBFTkRTID0gImdjYy1ydW50aW1lIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWRiZyBcCisgICAgbGliZ2ZvcnRyYW4gXAorICAgIGxpYmdmb3J0cmFuLWRldiBcCisgICAgbGliZ2ZvcnRyYW4tc3RhdGljZGV2IFwKKyIKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJnZm9ydHJhbi5zby4qIgorRklMRVNfJHtQTn0tZGV2ID0gIlwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4qLnNvIFwKKyAgICAke2xpYmRpcn0vbGliZ2ZvcnRyYW4uc3BlYyBcCisgICAgJHtsaWJkaXJ9L2xpYmdmb3J0cmFuLmxhIFwKKyAgICAke2xpYmRpcn0vZ2NjLyR7VEFSR0VUX1NZU30vJHtCSU5WfS9saWJnZm9ydHJhbmJlZ2luLiogXAorICAgICR7bGliZGlyfS9nY2MvJHtUQVJHRVRfU1lTfS8ke0JJTlZ9L2xpYmNhZl9zaW5nbGUqIFwKKyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliZ2ZvcnRyYW4uYSIKKworSU5TQU5FX1NLSVBfJHtNTFBSRUZJWH1saWJnZm9ydHJhbi1kZXYgPSAic3RhdGljZGV2IgorCitkb19wYWNrYWdlX3dyaXRlX2lwa1tkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX2RlYltkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCitkb19wYWNrYWdlX3dyaXRlX3JwbVtkZXBlbmRzXSArPSAidmlydHVhbC8ke01MUFJFRklYfWxpYmM6ZG9fcGFja2FnZWRhdGEiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZiA9IGQuZ2V0VmFyKCJGT1JUUkFOIiwgVHJ1ZSkKKyAgICBpZiAiZm9ydHJhbiIgbm90IGluIGY6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJsaWJnZm9ydHJhbiBuZWVkcyBmb3J0cmFuIHN1cHBvcnQgdG8gYmUgZW5hYmxlZCBpbiB0aGUgY29tcGlsZXIiKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzQuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWRkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjguYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIHJlY2lwZXMtZGV2dG9vbHMvZ2NjL2djYy0ke1BWfS5pbmMKK3JlcXVpcmUgbGliZ2ZvcnRyYW4uaW5jCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2djYy9saWJnZm9ydHJhbl80LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZDhiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL2djYy9nY2MtJHtQVn0uaW5jCityZXF1aXJlIGxpYmdmb3J0cmFuLmluYworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nY2MvbGliZ2ZvcnRyYW5fNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZGQ4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2NjL2xpYmdmb3J0cmFuXzUuMi5iYgpAQCAtMCwwICsxLDMgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9nY2MvZ2NjLSR7UFZ9LmluYworcmVxdWlyZSBsaWJnZm9ydHJhbi5pbmMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy45LjEuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItNy45LjEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTk1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi03LjkuMS5pbmMKQEAgLTAsMCArMSw5IEBACitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjMgJiBMR1BMdjIgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisJCSAgICBmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HMy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmM2I5N2RlOTE5YTlkYmE4NDQ5MGIyZTA3NmVjNGNiMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0OTk0YWQ5ODY3MjZhYzQxMjhhNmYxYmQ4MDIwY2Q2NzJlOWE5MmFhNzZiODA3MzY1NjNlZjk5Mjk5Mjc2NGVmIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjZiYThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY29tbW9uLmluYwpAQCAtMCwwICsxLDcxIEBACitTVU1NQVJZID0gIkdOVSBkZWJ1Z2dlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nZGIvIgorTElDRU5TRSA9ICJHUEx2MysiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyA9ICJleHBhdCB6bGliIG5jdXJzZXMgcmVhZGxpbmUgJHtMVFROR1VTVH0iCisKK0xUVE5HVVNUID0gImx0dG5nLXVzdCIKK0xUVE5HVVNUX2FhcmNoNjQgPSAiIgorTFRUTkdVU1RfbGliYy11Y2xpYmMgPSAiIgorTFRUTkdVU1RfbWlwcyA9ICIiCitMVFROR1VTVF9taXBzZWwgPSAiIgorTFRUTkdVU1RfbWlwczY0ID0gIiIKK0xUVE5HVVNUX21pcHM2NGVsID0gIiIKK0xUVE5HVVNUX21pcHM2NG4zMiA9ICIiCitMVFROR1VTVF9taXBzNjRlbG4zMiA9ICIiCitMVFROR1VTVF9zaDQgPSAiIgorTFRUTkdVU1RfbGliYy1tdXNsID0gIiIKKworSU5DX1BSID0gInIwIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisJCWZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9OWY2MDRkOGE0ZjhlNzRmNGY1MTQwODQ1YTIxYjY2NzQgXAorCQlmaWxlOi8vQ09QWUlORzM7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKwkJZmlsZTovL0NPUFlJTkczLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGIvZ2RiLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIgorZXhwb3J0IENDX0ZPUl9CVUlMRCA9ICIke0JVSUxEX0NDfSIKK2V4cG9ydCBDWFhfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1hYfSIKK2V4cG9ydCBDUFBfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQfSIKK2V4cG9ydCBDRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ0ZMQUdTfSIKK2V4cG9ydCBDWFhGTEFHU19GT1JfQlVJTEQgPSAiJHtCVUlMRF9DWFhGTEFHU30iCitleHBvcnQgQ1BQRkxBR1NfRk9SX0JVSUxEID0gIiR7QlVJTERfQ1BQRkxBR1N9IgorCitCID0gIiR7V09SS0RJUn0vYnVpbGQtJHtUQVJHRVRfU1lTfSIKKworRVhUUkFfT0VNQUtFID0gIidTVUJESVJTPWludGwgbW1hbGxvYyBsaWJpYmVydHkgb3Bjb2RlcyBiZmQgc2ltIGdkYiBldGMgdXRpbHMnIgorCitFWFBBVCA9ICItLXdpdGgtZXhwYXQgLS13aXRoLWxpYmV4cGF0LXByZWZpeD0ke1NUQUdJTkdfRElSX0hPU1R9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdkYnRrIC0tZGlzYWJsZS10dWkgLS1kaXNhYmxlLXggLS1kaXNhYmxlLXdlcnJvciBcCisgICAgICAgICAgICAgICAgLS13aXRoLWN1cnNlcyAtLWRpc2FibGUtbXVsdGlsaWIgLS13aXRoLXN5c3RlbS1yZWFkbGluZSAtLWRpc2FibGUtc2ltIFwKKyAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbHptYSAtLXdpdGhvdXQtZ3VpbGUgXAorICAgICAgICAgICAgICAgICR7R0RCUFJPUFJFRklYfSAke0VYUEFUfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdtdWx0aWFyY2gnLCAnLS1lbmFibGUtNjQtYml0LWJmZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCBcCisgICAgICAgICAgICAgICAiCisKK0dEQlBST1BSRUZJWCA9ICItLXByb2dyYW0tcHJlZml4PScnIgorCitkb19jb25maWd1cmUgKCkgeworCSMgb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCB0aGUgYXV0b2NvbmYvYXV0b21ha2UvYWNsb2NhbC9hdXRvaGVhZGVyCisJIyBjYWxscyBmb3Igbm93CisJKGNkICR7U30gJiYgZ251LWNvbmZpZ2l6ZSkgfHwgZGllICJmYWlsdXJlIGluIHJ1bm5pbmcgZ251LWNvbmZpZ2l6ZSIKKwlvZV9ydW5jb25mCit9CisKKyMgd2UgZG9uJ3Qgd2FudCBnZGIgdG8gcHJvdmlkZSBiZmQvaWJlcnR5L29wY29kZXMsIHdoaWNoIGluc3RlYWQgd2lsbCBvdmVycmlkZSB0aGUKKyMgcmlnaHQgYml0cyBpbnN0YWxsZWQgYnkgYmludXRpbHMuCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7bGliZGlyfQorCXJtIC1yZiAke0R9JHtpbmNsdWRlZGlyfQorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9sb2NhbGUKK30KKworUlJFQ09NTUVORFNfZ2RiX2FwcGVuZF9saW51eCA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYl9hcHBlbmRfbGludXgtZ251ZWFiaSA9ICIgZ2xpYmMtdGhyZWFkLWRiICIKK1JSRUNPTU1FTkRTX2dkYnNlcnZlcl9hcHBlbmRfbGludXggPSAiIGdsaWJjLXRocmVhZC1kYiAiCitSUkVDT01NRU5EU19nZGJzZXJ2ZXJfYXBwZW5kX2xpbnV4LWdudWVhYmkgPSAiIGdsaWJjLXRocmVhZC1kYiAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmQ2MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW4uaW5jCkBAIC0wLDAgKzEsMzggQEAKK2luaGVyaXQgY3Jvc3MtY2FuYWRpYW4KK2luaGVyaXQgcHl0aG9uLWRpcgorCitTVU1NQVJZID0gIkdOVSBkZWJ1Z2dlciAoY3Jvc3MtY2FuYWRpYW4gZ2RiIGZvciAke1RBUkdFVF9BUkNIfSB0YXJnZXQpIgorUE4gPSAiZ2RiLWNyb3NzLWNhbmFkaWFuLSR7VFJBTlNMQVRFRF9UQVJHRVRfQVJDSH0iCitCUE4gPSAiZ2RiIgorCitERVBFTkRTID0gIm5hdGl2ZXNkay1uY3Vyc2VzIG5hdGl2ZXNkay1leHBhdCBuYXRpdmVzZGstZ2V0dGV4dCBuYXRpdmVzZGstcmVhZGxpbmUgbmF0aXZlc2RrLXB5dGhvbiIKK1JERVBFTkRTXyR7UE59ICs9ICJuYXRpdmVzZGstcHl0aG9uLWNvcmUgbmF0aXZlc2RrLXB5dGhvbi1sYW5nIG5hdGl2ZXNkay1weXRob24tcmUgXAorICAgICAgICAgICAgICAgICAgIG5hdGl2ZXNkay1weXRob24tY29kZWNzIG5hdGl2ZXNkay1weXRob24tbmV0Y2xpZW50IgorCitHREJQUk9QUkVGSVggPSAiLS1wcm9ncmFtLXByZWZpeD0nJHtUQVJHRVRfUFJFRklYfSciCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0td2l0aC1weXRob249JHtXT1JLRElSfS9weXRob24iCisKK1NTVEFURV9EVVBXSElURUxJU1QgKz0gIiR7U1RBR0lOR19EQVRBRElSfS9nZGIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworY2F0ID4gJHtXT1JLRElSfS9weXRob24gPDwgRU9GCisjISAvYmluL3NoCitjYXNlICJcJDIiIGluCisgICAgICAgIC0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfS8iIDs7CisgICAgICAgIC0tbGRmbGFncykgZWNobyAiLVdsLC1ycGF0aC1saW5rLCR7U1RBR0lOR19MSUJESVJ9Ly4uIC1XbCwtcnBhdGgsJHtsaWJkaXJ9Ly4uIC1scHRocmVhZCAtbGRsIC1sdXRpbCAtbG0gLWxweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0iIDs7CisgICAgICAgIC0tZXhlYy1wcmVmaXgpIGVjaG8gIiR7ZXhlY19wcmVmaXh9IiA7OworICAgICAgICAqKSBleGl0IDEgOzsKK2VzYWMKK2V4aXQgMAorRU9GCisgICAgICAgIGNobW9kICt4ICR7V09SS0RJUn0vcHl0aG9uCit9CisKKyMgd2UgZG9uJ3Qgd2FudCBnZGIgdG8gcHJvdmlkZSBiZmQvaWJlcnR5L29wY29kZXMsIHdoaWNoIGluc3RlYWQgd2lsbCBvdmVycmlkZSB0aGUKKyMgcmlnaHQgYml0cyBpbnN0YWxsZWQgYnkgYmludXRpbHMuCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYgorCWNyb3NzX2NhbmFkaWFuX2JpbmRpcmxpbmtzCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MtY2FuYWRpYW5fNy45LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxMDM1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLWNhbmFkaWFuXzcuOS4xLmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBnZGItY29tbW9uLmluYworcmVxdWlyZSBnZGItY3Jvc3MtY2FuYWRpYW4uaW5jCityZXF1aXJlIGdkYi0ke1BWfS5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLWNyb3NzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQ0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3MuaW5jCkBAIC0wLDAgKzEsMjYgQEAKK3JlcXVpcmUgZ2RiLWNvbW1vbi5pbmMKKworREVQRU5EUyA9ICJleHBhdC1uYXRpdmUgbmN1cnNlcy1uYXRpdmUgcmVhZGxpbmUtbmF0aXZlIHB5dGhvbi1uYXRpdmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLXB5dGhvbj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24iCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgQlVJTERfU1lTPSIke0JVSUxEX1NZU30iCisgICAgZXhwb3J0IEhPU1RfU1lTPSIke0hPU1RfU1lTfSIKKyAgICBleHBvcnQgU1RBR0lOR19MSUJESVI9IiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfSIKKyAgICBleHBvcnQgU1RBR0lOR19JTkNESVI9IiR7U1RBR0lOR19JTkNESVJfTkFUSVZFfSIKK30KKworI0VYVFJBX09FTUFLRSArPSAiTERGTEFHUz0nJHtCVUlMRF9MREZMQUdTfSciCisKK0dEQlBST1BSRUZJWCA9ICIiCisKK1BOID0gImdkYi1jcm9zcy0ke1RBUkdFVF9BUkNIfSIKK0JQTiA9ICJnZGIiCisKK2luaGVyaXQgY3Jvc3MKK2luaGVyaXQgZ2V0dGV4dAorCitkYXRhZGlyIC49ICIvZ2RiLSR7VFVORV9QS0dBUkNIfSR7VEFSR0VUX1ZFTkRPUn0tJHtUQVJHRVRfT1N9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy45LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi1jcm9zc183LjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTk1Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGItY3Jvc3NfNy45LjEuYmIKQEAgLTAsMCArMSw0IEBACityZXF1aXJlIGdkYi1jcm9zcy5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhjMDIxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLmluYwpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIGdkYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLUFkZC1zdXBwb3J0LWZvci1SZW5lc2FzLVNILXNoNC1hcmNoaXRlY3R1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeC1kZXRlY3Rpb24tb2YtNjQtYml0LVBQQy1pbmZlcmlvci1pbi1nZGJzZXJ2ZXIucGF0Y2ggXAorICAgICAgICAgICAiCisjTERGTEFHU19hcHBlbmQgPSAiIC1zIgorI2V4cG9ydCBDRkxBR1NfYXBwZW5kPSIgLUwke1NUQUdJTkdfTElCRElSfSIKKworIyBjcm9zcy1jYW5hZGlhbiBtdXN0IG5vdCBzZWUgdGhpcworUEFDS0FHRVMgPSsgImdkYnNlcnZlciIKK0ZJTEVTX2dkYnNlcnZlciA9ICIke2JpbmRpcn0vZ2Ric2VydmVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAxLW1ha2UtbWFuLWluc3RhbGwtcmVsYXRpdmUtdG8tREVTVERJUi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTk2YzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMS1tYWtlLW1hbi1pbnN0YWxsLXJlbGF0aXZlLXRvLURFU1RESVIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAxMmIwNTA2OTUxNDYwYzNjYzM3ZDc3NTQ3OGQwMjRkYjNmOTVlOWQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyNzo1NSArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gbWFrZSBtYW4gaW5zdGFsbCByZWxhdGl2ZSB0byBERVNURElSCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc2ltL2NvbW1vbi9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NpbS9jb21tb24vTWFrZWZpbGUuaW4gYi9zaW0vY29tbW9uL01ha2VmaWxlLmluCitpbmRleCBkNDlhOTNiLi4yMTIxYzQ2IDEwMDY0NAorLS0tIGEvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgorKysrIGIvc2ltL2NvbW1vbi9NYWtlZmlsZS5pbgorQEAgLTM1LDcgKzM1LDcgQEAgdG9vbGRpciA9ICQobGliZGlyKS8kKHRhcmdldF9hbGlhcykKKyBkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKKyBkYXRhZGlyID0gQGRhdGFkaXJACisgbWFuZGlyID0gQG1hbmRpckAKKy1tYW4xZGlyID0gJChtYW5kaXIpL21hbjEKKyttYW4xZGlyID0gJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgaW5mb2RpciA9IEBpbmZvZGlyQAorIGluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKKyAKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMi1DaGFuZ2Utb3JkZXItb2YtQ0ZMQUdTLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjY2I0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi8wMDAyLUNoYW5nZS1vcmRlci1vZi1DRkxBR1MucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAyNjJjY2M0ZmRiMmEzZGYwZjE2YzYxYTgwNzA0Njk2NGFlNzcyOWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMiBNYXIgMjAxNSAwMjoyOToyMyArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gQ2hhbmdlIG9yZGVyIG9mIENGTEFHUworCitMZXRzIHVzIG92ZXJyaWRlIFdlcnJvciBpZiBuZWVkIGJlCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nZGIvZ2Ric2VydmVyL01ha2VmaWxlLmluIGIvZ2RiL2dkYnNlcnZlci9NYWtlZmlsZS5pbgoraW5kZXggMWVkMmVjOC4uMGNlZjk1YiAxMDA2NDQKKy0tLSBhL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KKysrKyBiL2dkYi9nZGJzZXJ2ZXIvTWFrZWZpbGUuaW4KK0BAIC0xMzEsMTAgKzEzMSwxMCBAQCBDRkxBR1MgPSBAQ0ZMQUdTQAorIENQUEZMQUdTID0gQENQUEZMQUdTQAorIAorICMgSU5URVJOQUxfQ0ZMQUdTIGlzIHRoZSBhZ2dyZWdhdGUgb2YgYWxsIG90aGVyICpDRkxBR1MgbWFjcm9zLgorLUlOVEVSTkFMX0NGTEFHU19CQVNFID0gICR7Q0ZMQUdTfSAke0dMT0JBTF9DRkxBR1N9IFwKKytJTlRFUk5BTF9DRkxBR1NfQkFTRSA9ICR7R0xPQkFMX0NGTEFHU30gXAorIAkke1BST0ZJTEVfQ0ZMQUdTfSAke0lOQ0xVREVfQ0ZMQUdTfSAke0NQUEZMQUdTfQorIElOVEVSTkFMX1dBUk5fQ0ZMQUdTID0gICR7SU5URVJOQUxfQ0ZMQUdTX0JBU0V9ICQoV0FSTl9DRkxBR1MpCistSU5URVJOQUxfQ0ZMQUdTID0gICR7SU5URVJOQUxfV0FSTl9DRkxBR1N9ICQoV0VSUk9SX0NGTEFHUykgLURHREJTRVJWRVIKKytJTlRFUk5BTF9DRkxBR1MgPSAgJHtJTlRFUk5BTF9XQVJOX0NGTEFHU30gJChXRVJST1JfQ0ZMQUdTKSAke0NGTEFHU30gLURHREJTRVJWRVIKKyAKKyAjIExERkxBR1MgaXMgc3BlY2lmaWNhbGx5IHJlc2VydmVkIGZvciBzZXR0aW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZQorICMgd2hlbiBydW5uaW5nIG1ha2UuCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiLzAwMDMtQWRkLXN1cHBvcnQtZm9yLVJlbmVzYXMtU0gtc2g0LWFyY2hpdGVjdHVyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTNlMjJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvMDAwMy1BZGQtc3VwcG9ydC1mb3ItUmVuZXNhcy1TSC1zaDQtYXJjaGl0ZWN0dXJlLnBhdGNoCkBAIC0wLDAgKzEsOTIxIEBACitGcm9tIDQwN2NiMTNjZmI3MDY5N2Y0NWRmYjc2MTMwNGUwMDVlMWVjYmQwZTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAyIE1hciAyMDE1IDAyOjMxOjEyICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBBZGQgc3VwcG9ydCBmb3IgUmVuZXNhcyBTSCAoc2g0KSBhcmNoaXRlY3R1cmUuCisKK2dkYiAoNy40LTF+Y3ZzMjAxMTExMTcuMikgZXhwZXJpbWVudGFsOyB1cmdlbmN5PWxvdworIC4KKyAgICogQWRkIFJlbmVzYXMgU0ggKHNoNCkgc3VwcG9ydCAoQ2xvc2VzOiAjNTc2MjQyKQorICAgICAtIFRoYW5rcyBOb2J1aGlybyBJd2FtYXRzdSwgVGFrYXNoaSBZb3NoaWkuCitBdXRob3I6IEhlY3RvciBPcm9uIDx6dW1iaUBkZWJpYW4ub3JnPgorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy81NzYyNDIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZ2RiL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKKyBnZGIvY29uZmlndXJlLmhvc3QgICAgICAgICAgICAgICAgICAgfCAgIDEgKworIGdkYi9zaC1saW51eC10ZGVwLmMgICAgICAgICAgICAgICAgICB8IDUxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdkYi9zaC10ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NCArKy0tCisgZ2RiL3NoLXRkZXAuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ5ICsrKysKKyBnZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAgfCAgIDUgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMgICAgICAgICB8ICAgMyArLQorIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jICAgICB8ICAgMyArCisgZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMgICAgIHwgICA0ICsKKyBnZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jICAgICAgfCAgIDMgKworIGdkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jICAgICB8ICAgNCArCisgMTEgZmlsZXMgY2hhbmdlZCwgNjE3IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2RiL01ha2VmaWxlLmluIGIvZ2RiL01ha2VmaWxlLmluCitpbmRleCA3OTM3ODAxLi42M2JhZjgxIDEwMDY0NAorLS0tIGEvZ2RiL01ha2VmaWxlLmluCisrKysgYi9nZGIvTWFrZWZpbGUuaW4KK0BAIC0xNzA3LDYgKzE3MDcsNyBAQCBBTExERVBGSUxFUyA9IFwKKyAJc2NvcmUtdGRlcC5jIFwKKyAJc2VyLWdvMzIuYyBzZXItcGlwZS5jIHNlci10Y3AuYyBzZXItbWluZ3cuYyBcCisgCXNoLXRkZXAuYyBzaDY0LXRkZXAuYyBzaG5ic2QtdGRlcC5jIHNobmJzZC1uYXQuYyBcCisrCXNoLWxpbnV4LXRkZXAuYyBzaC1saW51eC1uYXQuYyBcCisgCXNvbDItdGRlcC5jIFwKKyAJc29saWItc3ZyNC5jIFwKKyAJc3BhcmMtbGludXgtbmF0LmMgc3BhcmMtbGludXgtdGRlcC5jIFwKK2RpZmYgLS1naXQgYS9nZGIvY29uZmlndXJlLmhvc3QgYi9nZGIvY29uZmlndXJlLmhvc3QKK2luZGV4IGQwN2JlNGIuLmI2MzkxYzUgMTAwNjQ0CistLS0gYS9nZGIvY29uZmlndXJlLmhvc3QKKysrKyBiL2dkYi9jb25maWd1cmUuaG9zdAorQEAgLTE1MCw2ICsxNTAsNyBAQCBwb3dlcnBjKi0qLWxpbnV4KikJZ2RiX2hvc3Q9bGludXggOzsKKyAKKyBzMzkwKi0qLWxpbnV4KikJCWdkYl9ob3N0PWxpbnV4IDs7CisgCisrc2gqLSotbGludXgqKQkJZ2RiX2hvc3Q9bGludXggOzsKKyBzaCotKi1uZXRic2RlbGYqIHwgc2gqLSota25ldGJzZCotZ251KQorIAkJCWdkYl9ob3N0PW5ic2QgOzsKKyBzaCotKi1vcGVuYnNkKikJCWdkYl9ob3N0PW5ic2QgOzsKK2RpZmYgLS1naXQgYS9nZGIvc2gtbGludXgtdGRlcC5jIGIvZ2RiL3NoLWxpbnV4LXRkZXAuYworaW5kZXggMmZmMmVlOC4uMWExMTI2MiAxMDA2NDQKKy0tLSBhL2dkYi9zaC1saW51eC10ZGVwLmMKKysrKyBiL2dkYi9zaC1saW51eC10ZGVwLmMKK0BAIC0xOCwxNCArMTgsMzcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKysjaW5jbHVkZSAiZ2RiY29yZS5oIgorKyNpbmNsdWRlICJmcmFtZS5oIgorKyNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisrI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorKyNpbmNsdWRlICJkd2FyZjItZnJhbWUuaCIKKysjaW5jbHVkZSAidmFsdWUuaCIKKysjaW5jbHVkZSAicmVnY2FjaGUuaCIKKysjaW5jbHVkZSAiaW5mZXJpb3IuaCIKKyAjaW5jbHVkZSAib3NhYmkuaCIKKyAKKysjaW5jbHVkZSAicmVnZ3JvdXBzLmgiCisrI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKysjaW5jbHVkZSAiZmxvYXRmb3JtYXQuaCIKKyAjaW5jbHVkZSAic29saWItc3ZyNC5oIgorICNpbmNsdWRlICJzeW10YWIuaCIKKysjaW5jbHVkZSAiZ2RiX3N0cmluZy5oIgorKyNpbmNsdWRlICJjb21tYW5kLmgiCisrI2luY2x1ZGUgImdkYl9hc3NlcnQuaCIKKyAKKyAjaW5jbHVkZSAidHJhZC1mcmFtZS5oIgorICNpbmNsdWRlICJ0cmFtcC1mcmFtZS5oIgorIAorKyNpbmNsdWRlIDxzeXMvcHRyYWNlLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaW5jbHVkZSA8c3lzL3VzZXIuaD4KKysjaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KKysKKysjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorKworKyNpbmNsdWRlICJyZWdzZXQuaCIKKyAjaW5jbHVkZSAiZ2xpYmMtdGRlcC5oIgorICNpbmNsdWRlICJzaC10ZGVwLmgiCisgI2luY2x1ZGUgImxpbnV4LXRkZXAuaCIKK0BAIC0xODAsOSArMjAzLDUwNSBAQCBzdGF0aWMgc3RydWN0IHRyYW1wX2ZyYW1lIHNoX2xpbnV4X3J0X3NpZ3JldHVybl90cmFtcF9mcmFtZSA9IHsKKyAgIHNoX2xpbnV4X3J0X3NpZ3JldHVybl9pbml0CisgfTsKKyAKKysvKiBSZWNvZ25pemluZyBzaWduYWwgaGFuZGxlciBmcmFtZXMuICAqLworKworKy8qIEdOVS9MaW51eCBoYXMgdHdvIGZsYXZvcnMgb2Ygc2lnbmFscy4gIE5vcm1hbCBzaWduYWwgaGFuZGxlcnMsIGFuZAorKyAgICJyZWFsdGltZSIgKFJUKSBzaWduYWxzLiAgVGhlIFJUIHNpZ25hbHMgY2FuIHByb3ZpZGUgYWRkaXRpb25hbAorKyAgIGluZm9ybWF0aW9uIHRvIHRoZSBzaWduYWwgaGFuZGxlciBpZiB0aGUgU0FfU0lHSU5GTyBmbGFnIGlzIHNldAorKyAgIHdoZW4gZXN0YWJsaXNoaW5nIGEgc2lnbmFsIGhhbmRsZXIgdXNpbmcgYHNpZ2FjdGlvbicuICBJdCBpcyBub3QKKysgICB1bmxpa2VseSB0aGF0IGZ1dHVyZSB2ZXJzaW9ucyBvZiBHTlUvTGludXggd2lsbCBzdXBwb3J0IFNBX1NJR0lORk8KKysgICBmb3Igbm9ybWFsIHNpZ25hbHMgdG9vLiAgKi8KKysKKysvKiBXaGVuIHRoZSBTSCBMaW51eCBrZXJuZWwgY2FsbHMgYSBzaWduYWwgaGFuZGxlciBhbmQgdGhlCisrICAgU0FfUkVTVE9SRVIgZmxhZyBpc24ndCBzZXQsIHRoZSByZXR1cm4gYWRkcmVzcyBwb2ludHMgdG8gYSBiaXQgb2YKKysgICBjb2RlIG9uIHRoZSBzdGFjay4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aGV0aGVyIHRoZSBQQyBhcHBlYXJzIHRvCisrICAgYmUgd2l0aGluIHRoaXMgYml0IG9mIGNvZGUuCisrCisrICAgVGhlIGluc3RydWN0aW9uIHNlcXVlbmNlIGZvciBub3JtYWwgc2lnbmFscyBpcworKyAgICAgICBtb3YudyAgMWYscjMKKysgICAgICAgdHJhcGEgICMxNgorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgMTogLndvcmQgIF9fTlJfc2lncmV0dXJuCisrICAgb3IgMHg5MzA1IDB4YzMxMCAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MDA3Ny4KKysKKysgICBDaGVja2luZyBmb3IgdGhlIGNvZGUgc2VxdWVuY2Ugc2hvdWxkIGJlIHNvbWV3aGF0IHJlbGlhYmxlLCBiZWNhdXNlCisrICAgdGhlIGVmZmVjdCBpcyB0byBjYWxsIHRoZSBzeXN0ZW0gY2FsbCBzaWdyZXR1cm4uICBUaGlzIGlzIHVubGlrZWx5CisrICAgdG8gb2NjdXIgYW55d2hlcmUgb3RoZXIgdGhhbiBhIHNpZ25hbCB0cmFtcG9saW5lLgorKworKyAgIEl0IGtpbmQgb2Ygc3Vja3MgdGhhdCB3ZSBoYXZlIHRvIHJlYWQgbWVtb3J5IGZyb20gdGhlIHByb2Nlc3MgaW4KKysgICBvcmRlciB0byBpZGVudGlmeSBhIHNpZ25hbCB0cmFtcG9saW5lLCBidXQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlCisrICAgYW55IG90aGVyIHdheS4gIFRoZSBQQ19JTl9TSUdUUkFNUCBtYWNybyBpbiB0bS1saW51eC5oIGFycmFuZ2VzIHRvCisrICAgb25seSBjYWxsIHVzIGlmIG5vIGZ1bmN0aW9uIG5hbWUgY291bGQgYmUgaWRlbnRpZmllZCwgd2hpY2ggc2hvdWxkCisrICAgYmUgdGhlIGNhc2Ugc2luY2UgdGhlIGNvZGUgaXMgb24gdGhlIHN0YWNrLgorKworKyAgIERldGVjdGlvbiBvZiBzaWduYWwgdHJhbXBvbGluZXMgZm9yIGhhbmRsZXJzIHRoYXQgc2V0IHRoZQorKyAgIFNBX1JFU1RPUkVSIGZsYWcgaXMgaW4gZ2VuZXJhbCBub3QgcG9zc2libGUuICBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMKKysgICB3aGF0IHRoZSBHTlUgQyBMaWJyYXJ5IGhhcyBiZWVuIGRvaW5nIGZvciBxdWl0ZSBzb21lIHRpbWUgbm93LgorKyAgIEhvd2V2ZXIsIGFzIG9mIHZlcnNpb24gMi4xLjIsIHRoZSBHTlUgQyBMaWJyYXJ5IHVzZXMgc2lnbmFsCisrICAgdHJhbXBvbGluZXMgKG5hbWVkIF9fcmVzdG9yZSBhbmQgX19yZXN0b3JlX3J0KSB0aGF0IGFyZSBpZGVudGljYWwKKysgICB0byB0aGUgb25lcyB1c2VkIGJ5IHRoZSBrZXJuZWwuICBUaGVyZWZvcmUsIHRoZXNlIHRyYW1wb2xpbmVzIGFyZQorKyAgIHN1cHBvcnRlZCB0b28uICAqLworKworKyNkZWZpbmUgTU9WVyhuKQkgKDB4OTMwMHwoKG4pLTIpKQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDK24gdG8gUjMgKi8KKysjZGVmaW5lIFRSQVAxNgkgMHhjMzEwCQkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgT1JfUjBfUjAgMHgyMDBiCQkJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9JTlNOMAlNT1ZXKDcpCQkvKiBNb3ZlIG1lbSB3b3JkIGF0IFBDKzcgdG8gUjMgKi8KKysjZGVmaW5lIExJTlVYX1NJR1RSQU1QX0lOU04xCVRSQVAxNgkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgTElOVVhfU0lHVFJBTVBfSU5TTjIJT1JfUjBfUjAJLyogb3IgcjAscjAgKGluc2VydCB0byBhdm9pZCBoYXJkd2FyZSBidWcpICovCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxpbnV4X3NpZ3RyYW1wX2NvZGVbXSA9CisreworKyAgTElOVVhfU0lHVFJBTVBfSU5TTjAsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMSwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfU0lHVFJBTVBfSU5TTjIsCisrICBfX05SX3NpZ3JldHVybgorK307CisrCisrI2RlZmluZSBMSU5VWF9TSUdUUkFNUF9MRU4gKHNpemVvZiBsaW51eF9zaWd0cmFtcF9jb2RlKQorKworKy8qIElmIFBDIGlzIGluIGEgc2lndHJhbXAgcm91dGluZSwgcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBzdGFydCBvZgorKyAgIHRoZSByb3V0aW5lLiAgT3RoZXJ3aXNlLCByZXR1cm4gMC4gICovCisrCisrc3RhdGljIENPUkVfQUREUgorK3NoX2xpbnV4X3NpZ3RyYW1wX3N0YXJ0IChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKG5leHRfZnJhbWUpOworKyAgZ2RiX2J5dGUgYnVmW0xJTlVYX1NJR1RSQU1QX0xFTl07CisrCisrICAvKiBXZSBvbmx5IHJlY29nbml6ZSBhIHNpZ25hbCB0cmFtcG9saW5lIGlmIFBDIGlzIGF0IHRoZSBzdGFydCBvZgorKyAgICAgb25lIG9mIHRoZSB0aHJlZSBpbnN0cnVjdGlvbnMuICBXZSBvcHRpbWl6ZSBmb3IgZmluZGluZyB0aGUgUEMgYXQKKysgICAgIHRoZSBzdGFydCwgYXMgd2lsbCBiZSB0aGUgY2FzZSB3aGVuIHRoZSB0cmFtcG9saW5lIGlzIG5vdCB0aGUKKysgICAgIGZpcnN0IGZyYW1lIG9uIHRoZSBzdGFjay4gIFdlIGFzc3VtZSB0aGF0IGluIHRoZSBjYXNlIHdoZXJlIHRoZQorKyAgICAgUEMgaXMgbm90IGF0IHRoZSBzdGFydCBvZiB0aGUgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHRoZXJlIHdpbGwgYmUKKysgICAgIGEgZmV3IHRyYWlsaW5nIHJlYWRhYmxlIGJ5dGVzIG9uIHRoZSBzdGFjay4gICovCisrCisrICBpZiAoIXNhZmVfZnJhbWVfdW53aW5kX21lbW9yeSAobmV4dF9mcmFtZSwgcGMsIGJ1ZiwgTElOVVhfU0lHVFJBTVBfTEVOKSkKKysgICAgcmV0dXJuIDA7CisrCisrICBpZiAoYnVmWzBdICE9IExJTlVYX1NJR1RSQU1QX0lOU04wKQorKyAgICB7CisrICAgICAgaWYgKGJ1ZlswXSAhPSBMSU5VWF9TSUdUUkFNUF9JTlNOMSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICAgIHBjIC09IDI7CisrCisrICAgICAgaWYgKCFzYWZlX2ZyYW1lX3Vud2luZF9tZW1vcnkgKG5leHRfZnJhbWUsIHBjLCBidWYsIExJTlVYX1NJR1RSQU1QX0xFTikpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICBpZiAobWVtY21wIChidWYsIGxpbnV4X3NpZ3RyYW1wX2NvZGUsIExJTlVYX1NJR1RSQU1QX0xFTikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gcGM7CisrfQorKworKy8qIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgc2FtZSBmb3IgUlQgc2lnbmFscy4gIEhlcmUgdGhlIGluc3RydWN0aW9uCisrICAgc2VxdWVuY2UgaXMKKysgICAgICAgbW92LncgIDFmLHIzCisrICAgICAgIHRyYXBhICAjMTYKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgICAgIG9yICAgICByMCwgcjAKKysgICAgICAgb3IgICAgIHIwLCByMAorKyAgICAgICBvciAgICAgcjAsIHIwCisrICAgIDE6IC53b3JkICBfX05SX3J0X3NpZ3JldHVybgorKyAgIG9yIDB4OTMwNSAweGMzMTAgMHgyMDBiIDB4MjAwYiAweDIwMGIgMHgyMDBiIDB4MjAwYiAweDAwYWQuCisrCisrICAgVGhlIGVmZmVjdCBpcyB0byBjYWxsIHRoZSBzeXN0ZW0gY2FsbCBydF9zaWdyZXR1cm4uICAqLworKworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjAJCU1PVlcoNykJCS8qIE1vdmUgbWVtIHdvcmQgYXQgUEMrNyB0byBSMyAqLworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEJCVRSQVAxNgkJLyogU3lzY2FsbCB3L25vIGFyZ3MgKE5SIGluIFIzKSAqLworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIJCU9SX1IwX1IwCS8qIG9yIHIwLHIwIChpbnNlcnQgdG8gYXZvaWQgaGFyZHdhcmUgYnVnKSAqLworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsaW51eF9ydF9zaWd0cmFtcF9jb2RlW10gPQorK3sKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04wLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjEsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgTElOVVhfUlRfU0lHVFJBTVBfSU5TTjIsCisrICBMSU5VWF9SVF9TSUdUUkFNUF9JTlNOMiwKKysgIExJTlVYX1JUX1NJR1RSQU1QX0lOU04yLAorKyAgX19OUl9ydF9zaWdyZXR1cm4KKyt9OworKworKyNkZWZpbmUgTElOVVhfUlRfU0lHVFJBTVBfTEVOIChzaXplb2YgbGludXhfcnRfc2lndHJhbXBfY29kZSkKKysKKysvKiBJZiBQQyBpcyBpbiBhIFJUIHNpZ3RyYW1wIHJvdXRpbmUsIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgc3RhcnQKKysgICBvZiB0aGUgcm91dGluZS4gIE90aGVyd2lzZSwgcmV0dXJuIDAuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9ydF9zaWd0cmFtcF9zdGFydCAoc3RydWN0IGZyYW1lX2luZm8gKm5leHRfZnJhbWUpCisreworKyAgQ09SRV9BRERSIHBjID0gZ2V0X2ZyYW1lX3BjIChuZXh0X2ZyYW1lKTsKKysgIGdkYl9ieXRlIGJ1ZltMSU5VWF9SVF9TSUdUUkFNUF9MRU5dOworKworKyAgLyogV2Ugb25seSByZWNvZ25pemUgYSBzaWduYWwgdHJhbXBvbGluZSBpZiBQQyBpcyBhdCB0aGUgc3RhcnQgb2YKKysgICAgIG9uZSBvZiB0aGUgdHdvIGluc3RydWN0aW9ucy4gIFdlIG9wdGltaXplIGZvciBmaW5kaW5nIHRoZSBQQyBhdAorKyAgICAgdGhlIHN0YXJ0LCBhcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gdGhlIHRyYW1wb2xpbmUgaXMgbm90IHRoZQorKyAgICAgZmlyc3QgZnJhbWUgb24gdGhlIHN0YWNrLiAgV2UgYXNzdW1lIHRoYXQgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlCisrICAgICBQQyBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgdGhlcmUgd2lsbCBiZQorKyAgICAgYSBmZXcgdHJhaWxpbmcgcmVhZGFibGUgYnl0ZXMgb24gdGhlIHN0YWNrLiAgKi8KKysKKysgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLCBMSU5VWF9SVF9TSUdUUkFNUF9MRU4pKQorKyAgICByZXR1cm4gMDsKKysKKysgIGlmIChidWZbMF0gIT0gTElOVVhfUlRfU0lHVFJBTVBfSU5TTjApCisrICAgIHsKKysgICAgICBpZiAoYnVmWzBdICE9IExJTlVYX1JUX1NJR1RSQU1QX0lOU04xKQorKwlyZXR1cm4gMDsKKysKKysgICAgICBwYyAtPSAyOworKworKyAgICAgIGlmICghc2FmZV9mcmFtZV91bndpbmRfbWVtb3J5IChuZXh0X2ZyYW1lLCBwYywgYnVmLAorKwkJCQkgICAgIExJTlVYX1JUX1NJR1RSQU1QX0xFTikpCisrCXJldHVybiAwOworKyAgICB9CisrCisrICBpZiAobWVtY21wIChidWYsIGxpbnV4X3J0X3NpZ3RyYW1wX2NvZGUsIExJTlVYX1JUX1NJR1RSQU1QX0xFTikgIT0gMCkKKysgICAgcmV0dXJuIDA7CisrCisrICByZXR1cm4gcGM7CisrfQorKworKy8qIFJldHVybiB3aGV0aGVyIFBDIGlzIGluIGEgR05VL0xpbnV4IHNpZ3RyYW1wIHJvdXRpbmUuICAqLworKworK3N0YXRpYyBpbnQKKytzaF9saW51eF9zaWd0cmFtcF9wIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSkKKyt7CisrICBDT1JFX0FERFIgcGMgPSBnZXRfZnJhbWVfcGMgKHRoaXNfZnJhbWUpOworKyAgY2hhciAqbmFtZTsKKysKKysgIGZpbmRfcGNfcGFydGlhbF9mdW5jdGlvbiAocGMsICZuYW1lLCBOVUxMLCBOVUxMKTsKKysKKysgIC8qIElmIHdlIGhhdmUgTkFNRSwgd2UgY2FuIG9wdGltaXplIHRoZSBzZWFyY2guICBUaGUgdHJhbXBvbGluZXMgYXJlCisrICAgICBuYW1lZCBfX3Jlc3RvcmUgYW5kIF9fcmVzdG9yZV9ydC4gIEhvd2V2ZXIsIHRoZXkgYXJlbid0IGR5bmFtaWNhbGx5CisrICAgICBleHBvcnRlZCBmcm9tIHRoZSBzaGFyZWQgQyBsaWJyYXJ5LCBzbyB0aGUgdHJhbXBvbGluZSBtYXkgYXBwZWFyIHRvCisrICAgICBiZSBwYXJ0IG9mIHRoZSBwcmVjZWRpbmcgZnVuY3Rpb24uICBUaGlzIHNob3VsZCBhbHdheXMgYmUgc2lnYWN0aW9uLAorKyAgICAgX19zaWdhY3Rpb24sIG9yIF9fbGliY19zaWdhY3Rpb24gKGFsbCBhbGlhc2VzIHRvIHRoZSBzYW1lIGZ1bmN0aW9uKS4gICovCisrICBpZiAobmFtZSA9PSBOVUxMIHx8IHN0cnN0ciAobmFtZSwgInNpZ2FjdGlvbiIpICE9IE5VTEwpCisrICAgIHJldHVybiAoc2hfbGludXhfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpICE9IDAKKysJICAgIHx8IHNoX2xpbnV4X3J0X3NpZ3RyYW1wX3N0YXJ0ICh0aGlzX2ZyYW1lKSAhPSAwKTsKKysKKysgIHJldHVybiAoc3RyY21wICgiX19yZXN0b3JlIiwgbmFtZSkgPT0gMAorKwkgIHx8IHN0cmNtcCAoIl9fcmVzdG9yZV9ydCIsIG5hbWUpID09IDApOworK30KKysKKysvKiBPZmZzZXQgdG8gc3RydWN0IHNpZ2NvbnRleHQgaW4gdWNvbnRleHQsIGZyb20gPGFzbS91Y29udGV4dC5oPi4gICovCisrI2RlZmluZSBTSF9MSU5VWF9VQ09OVEVYVF9TSUdDT05URVhUX09GRlNFVCAxMgorKworKworKy8qIEFzc3VtaW5nIE5FWFRfRlJBTUUgaXMgYSBmcmFtZSBmb2xsb3dpbmcgYSBHTlUvTGludXggc2lndHJhbXAKKysgICByb3V0aW5lLCByZXR1cm4gdGhlIGFkZHJlc3Mgb2YgdGhlIGFzc29jaWF0ZWQgc2lnY29udGV4dCBzdHJ1Y3R1cmUuICAqLworKworK3N0YXRpYyBDT1JFX0FERFIKKytzaF9saW51eF9zaWdjb250ZXh0X2FkZHIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lKQorK3sKKysgIENPUkVfQUREUiBwYzsKKysgIENPUkVfQUREUiBzcDsKKysKKysgIHNwID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBTUF9SRUdOVU0pOworKworKyAgcGMgPSBzaF9saW51eF9zaWd0cmFtcF9zdGFydCAodGhpc19mcmFtZSk7CisrICBpZiAocGMpCisrICAgIHsKKysgICAgICByZXR1cm4gc3A7CisrICAgIH0KKysKKysgIHBjID0gc2hfbGludXhfcnRfc2lndHJhbXBfc3RhcnQgKHRoaXNfZnJhbWUpOworKyAgaWYgKHBjKQorKyAgICB7CisrICAgICAgQ09SRV9BRERSIHVjb250ZXh0X2FkZHI7CisrCisrICAgICAgLyogVGhlIHNpZ2NvbnRleHQgc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIHVzZXIgY29udGV4dC4gIEEKKysJIHBvaW50ZXIgdG8gdGhlIHVzZXIgY29udGV4dCBpcyBwYXNzZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50CisrCSB0byB0aGUgc2lnbmFsIGhhbmRsZXIuICAqLworKyAgICAgIHVjb250ZXh0X2FkZHIgPSBnZXRfZnJhbWVfcmVnaXN0ZXJfdW5zaWduZWQgKHRoaXNfZnJhbWUsIEFSRzBfUkVHTlVNKzIpOworKyAgICAgIHJldHVybiB1Y29udGV4dF9hZGRyICsgU0hfTElOVVhfVUNPTlRFWFRfU0lHQ09OVEVYVF9PRkZTRVQ7CisrICAgIH0KKysKKysgIGVycm9yICgiQ291bGRuJ3QgcmVjb2duaXplIHNpZ25hbCB0cmFtcG9saW5lLiIpOworKyAgcmV0dXJuIDA7CisrfQorKworKy8qIFNpZ25hbCB0cmFtcG9saW5lcy4gICovCisrZXh0ZXJuIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqc2hfYWxsb2NfZnJhbWVfY2FjaGUgKHZvaWQpOworKworK3N0YXRpYyBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisreworKyAgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICpjYWNoZTsKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdldF9jdXJyZW50X2FyY2ggKCkpOworKyAgQ09SRV9BRERSIHNpZ2NvbnRleHRfYWRkcjsKKysKKysgIGlmICgqdGhpc19jYWNoZSkKKysgICAgcmV0dXJuICp0aGlzX2NhY2hlOworKworKyAgY2FjaGUgPSBzaF9hbGxvY19mcmFtZV9jYWNoZSAoKTsKKysKKysgIGNhY2hlLT5iYXNlID0gZ2V0X2ZyYW1lX3JlZ2lzdGVyX3Vuc2lnbmVkICh0aGlzX2ZyYW1lLCBTUF9SRUdOVU0pOworKyAgc2lnY29udGV4dF9hZGRyID0gdGRlcC0+c2lnY29udGV4dF9hZGRyICh0aGlzX2ZyYW1lKTsKKysgIGlmICh0ZGVwLT5zY19yZWdfb2Zmc2V0KQorKyAgICB7CisrICAgICAgaW50IGk7CisrCisrICAgICAgZ2RiX2Fzc2VydCAodGRlcC0+c2NfbnVtX3JlZ3MgPD0gU0hfTlVNX1JFR1MpOworKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5zY19udW1fcmVnczsgaSsrKQorKwlpZiAodGRlcC0+c2NfcmVnX29mZnNldFtpXSAhPSAtMSkKKysJICBjYWNoZS0+c2F2ZWRfcmVnc1tpXSA9IHNpZ2NvbnRleHRfYWRkciArIHRkZXAtPnNjX3JlZ19vZmZzZXRbaV07CisrICAgIH0KKysKKysgICp0aGlzX2NhY2hlID0gY2FjaGU7CisrICByZXR1cm4gY2FjaGU7CisrfQorKworK3N0YXRpYyB2b2lkCisrc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdGhpc19pZCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsIHZvaWQgKip0aGlzX2NhY2hlLAorKwkJCSAgICAgc3RydWN0IGZyYW1lX2lkICp0aGlzX2lkKQorK3sKKysgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGUgPQorKyAgICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisrCisrICAoKnRoaXNfaWQpID0gZnJhbWVfaWRfYnVpbGQgKGNhY2hlLT5iYXNlICsgNjQsIGNhY2hlLT5wYyk7CisrfQorKworK2V4dGVybiBzdHJ1Y3QgdmFsdWUgKiBzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyICgpOworK3N0YXRpYyBzdHJ1Y3QgdmFsdWUgKgorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3ByZXZfcmVnaXN0ZXIgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLAorKyAgICAgICAgICAgICAgICAgICB2b2lkICoqdGhpc19jYWNoZSwgaW50IHJlZ251bSkKKyt7CisrICBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CisrCisrICByZXR1cm4gc2hfZnJhbWVfcHJldl9yZWdpc3RlciAodGhpc19mcmFtZSwgdGhpc19jYWNoZSwgcmVnbnVtKTsKKyt9CisrCisrc3RhdGljIGludAorK3NoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3NuaWZmZXIgKGNvbnN0IHN0cnVjdCBmcmFtZV91bndpbmQgKnNlbGYsCisrICAgICAgICAgICAgICAgICBzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwKKysgICAgICAgICAgICAgICAgIHZvaWQgKip0aGlzX3Byb2xvZ3VlX2NhY2hlKQorK3sKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKSk7CisrCisrICAvKiBXZSBzaG91bGRuJ3QgZXZlbiBib3RoZXIgaWYgd2UgZG9uJ3QgaGF2ZSBhIHNpZ2NvbnRleHRfYWRkcgorKyAgICAgaGFuZGxlci4gICovCisrICBpZiAodGRlcC0+c2lnY29udGV4dF9hZGRyID09IE5VTEwpCisrICAgIHJldHVybiAwOworKworKyAgaWYgKHRkZXAtPnNpZ3RyYW1wX3AgIT0gTlVMTCkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5zaWd0cmFtcF9wICh0aGlzX2ZyYW1lKSkKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3Qgc3RydWN0IGZyYW1lX3Vud2luZCBzaF9saW51eF9zaWd0cmFtcF9mcmFtZV91bndpbmQgPQorK3sKKysgIFNJR1RSQU1QX0ZSQU1FLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfdGhpc19pZCwKKysgIHNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3ByZXZfcmVnaXN0ZXIsCisrICBOVUxMLAorKyAgc2hfbGludXhfc2lndHJhbXBfZnJhbWVfc25pZmZlcgorK307CisrCisrLyogU3VwcGx5IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEdSRUdTIGFuZCBMRU4KKysgICBpbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIHNldCBSRUdTRVQgdG8gcmVnaXN0ZXIgY2FjaGUKKysgICBSRUdDQUNIRS4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3ZvaWQKKytzaF9zdXBwbHlfZ3JlZ3NldCAoY29uc3Qgc3RydWN0IHJlZ3NldCAqcmVnc2V0LCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICpncmVncywgc2l6ZV90IGxlbikKKyt7CisrICBjb25zdCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChyZWdzZXQtPmFyY2gpOworKyAgY29uc3QgY2hhciAqcmVncyA9IGdyZWdzOworKyAgaW50IGk7CisrCisrICBnZGJfYXNzZXJ0IChsZW4gPT0gdGRlcC0+c2l6ZW9mX2dyZWdzZXQpOworKworKyAgZm9yIChpID0gMDsgaSA8IHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3M7IGkrKykKKysgICAgeworKyAgICAgIGlmICgocmVnbnVtID09IGkgfHwgcmVnbnVtID09IC0xKQorKyAgICAgICYmIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSAhPSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIGksIHJlZ3MgKyB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0pOworKyAgICB9CisrfQorKworKy8qIENvbGxlY3QgcmVnaXN0ZXIgUkVHTlVNIGZyb20gdGhlIHJlZ2lzdGVyIGNhY2hlIFJFR0NBQ0hFIGFuZCBzdG9yZQorKyAgIGl0IGluIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEdSRUdTIGFuZCBMRU4gYXMgZGVzY3JpYmVkIGJ5IHRoZQorKyAgIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBzZXQgUkVHU0VULiAgSWYgUkVHTlVNIGlzIC0xLCBkbyB0aGlzIGZvcgorKyAgIGFsbCByZWdpc3RlcnMgaW4gUkVHU0VULiAgKi8KKysKKyt2b2lkCisrc2hfY29sbGVjdF9ncmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsCisrICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlLAorKyAgICAgICAgICAgICAgaW50IHJlZ251bSwgdm9pZCAqZ3JlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNoYXIgKnJlZ3MgPSBncmVnczsKKysgIGludCBpOworKworKyAgZ2RiX2Fzc2VydCAobGVuID09IHRkZXAtPnNpemVvZl9ncmVnc2V0KTsKKysKKysgIGZvciAoaSA9IDA7IGkgPCB0ZGVwLT5ncmVnc2V0X251bV9yZWdzOyBpKyspCisrICAgIHsKKysgICAgICBpZiAoKHJlZ251bSA9PSBpIHx8IHJlZ251bSA9PSAtMSkKKysgICAgICAmJiB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXRbaV0gIT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgaSwgcmVncyArIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNldFtpXSk7CisrICAgIH0KKyt9CisrCisrLyogU3VwcGx5IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSBidWZmZXIgc3BlY2lmaWVkIGJ5IEZQUkVHUyBhbmQgTEVOCisrICAgaW4gdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIHNldCBSRUdTRVQgdG8gcmVnaXN0ZXIgY2FjaGUKKysgICBSRUdDQUNIRS4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IgYWxsIHJlZ2lzdGVycyBpbiBSRUdTRVQuICAqLworKworK3N0YXRpYyB2b2lkCisrc2hfc3VwcGx5X2ZwcmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUsCisrICAgICAgICAgICAgICBpbnQgcmVnbnVtLCBjb25zdCB2b2lkICpmcHJlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNvbnN0IGNoYXIgKnJlZ3MgPSBmcHJlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpOworKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgIHsKKysgICAgICBpZiAocmVnbnVtID09IGkrMjUgfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfc3VwcGx5IChyZWdjYWNoZSwgaSsyNSwgcmVncyArIGkqNCk7CisrICAgIH0KKysgIGlmIChyZWdudW0gPT0gRlBTQ1JfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X3N1cHBseSAocmVnY2FjaGUsIEZQU0NSX1JFR05VTSwgcmVncyArIDMyKjQpOworKyAgaWYgKHJlZ251bSA9PSBGUFVMX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19zdXBwbHkgKHJlZ2NhY2hlLCBGUFVMX1JFR05VTSwgcmVncyArIDMzKjQpOworK30KKysKKysvKiBDb2xsZWN0IHJlZ2lzdGVyIFJFR05VTSBmcm9tIHRoZSByZWdpc3RlciBjYWNoZSBSRUdDQUNIRSBhbmQgc3RvcmUKKysgICBpdCBpbiB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBGUFJFR1MgYW5kIExFTiBhcyBkZXNjcmliZWQgYnkgdGhlCisrICAgZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXIgc2V0IFJFR1NFVC4gIElmIFJFR05VTSBpcyAtMSwgZG8gdGhpcyBmb3IKKysgICBhbGwgcmVnaXN0ZXJzIGluIFJFR1NFVC4gICovCisrCisrc3RhdGljIHZvaWQKKytzaF9jb2xsZWN0X2ZwcmVnc2V0IChjb25zdCBzdHJ1Y3QgcmVnc2V0ICpyZWdzZXQsCisrICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKKysgICAgICAgICAgICAgICBpbnQgcmVnbnVtLCB2b2lkICpmcHJlZ3MsIHNpemVfdCBsZW4pCisreworKyAgY29uc3Qgc3RydWN0IGdkYmFyY2hfdGRlcCAqdGRlcCA9IGdkYmFyY2hfdGRlcCAocmVnc2V0LT5hcmNoKTsKKysgIGNoYXIgKnJlZ3MgPSBmcHJlZ3M7CisrICBpbnQgaTsKKysKKysgIGdkYl9hc3NlcnQgKGxlbiA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpOworKyAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgIHsKKysgICAgICBpZiAocmVnbnVtID09IGkrMjUgfHwgcmVnbnVtID09IC0xKQorKyAgICByZWdjYWNoZV9yYXdfY29sbGVjdCAocmVnY2FjaGUsIGkrMjUsIHJlZ3MgKyBpKjQpOworKyAgICB9CisrICBpZiAocmVnbnVtID09IEZQU0NSX1JFR05VTSB8fCByZWdudW0gPT0gLTEpCisrICAgIHJlZ2NhY2hlX3Jhd19jb2xsZWN0IChyZWdjYWNoZSwgRlBTQ1JfUkVHTlVNLCByZWdzICsgMzIqNCk7CisrICBpZiAocmVnbnVtID09IEZQVUxfUkVHTlVNIHx8IHJlZ251bSA9PSAtMSkKKysgICAgcmVnY2FjaGVfcmF3X2NvbGxlY3QgKHJlZ2NhY2hlLCBGUFVMX1JFR05VTSwgcmVncyArIDMzKjQpOworK30KKysKKysvKiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGNvcmUgc2VjdGlvbiBpZGVudGlmaWVkCisrICAgYnkgU0VDVF9OQU1FIGFuZCBTRUNUX1NJWkUuICAqLworKworK2NvbnN0IHN0cnVjdCByZWdzZXQgKgorK3NoX2xpbnV4X3JlZ3NldF9mcm9tX2NvcmVfc2VjdGlvbiAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNlY3RfbmFtZSwgc2l6ZV90IHNlY3Rfc2l6ZSkKKyt7CisrICBzdHJ1Y3QgZ2RiYXJjaF90ZGVwICp0ZGVwID0gZ2RiYXJjaF90ZGVwIChnZGJhcmNoKTsKKysKKysgIGlmIChzdHJjbXAgKHNlY3RfbmFtZSwgIi5yZWciKSA9PSAwICYmIHNlY3Rfc2l6ZSA9PSB0ZGVwLT5zaXplb2ZfZ3JlZ3NldCkKKysgICAgeworKyAgICAgIGlmICh0ZGVwLT5ncmVnc2V0ID09IE5VTEwpCisrICAgIHRkZXAtPmdyZWdzZXQgPSByZWdzZXRfYWxsb2MgKGdkYmFyY2gsIHNoX3N1cHBseV9ncmVnc2V0LAorKyAgICAgICAgICAgICAgICAgICAgICBzaF9jb2xsZWN0X2dyZWdzZXQpOworKyAgICAgIHJldHVybiB0ZGVwLT5ncmVnc2V0OworKyAgICB9CisrCisrICBpZiAoKHN0cmNtcCAoc2VjdF9uYW1lLCAiLnJlZzIiKSA9PSAwICYmIHNlY3Rfc2l6ZSA9PSB0ZGVwLT5zaXplb2ZfZnByZWdzZXQpKQorKyAgICB7CisrICAgICAgaWYgKHRkZXAtPmZwcmVnc2V0ID09IE5VTEwpCisrICAgIHRkZXAtPmZwcmVnc2V0ID0gcmVnc2V0X2FsbG9jIChnZGJhcmNoLCBzaF9zdXBwbHlfZnByZWdzZXQsCisrICAgICAgICAgICAgICAgICAgICAgICBzaF9jb2xsZWN0X2ZwcmVnc2V0KTsKKysgICAgICByZXR1cm4gdGRlcC0+ZnByZWdzZXQ7CisrICAgIH0KKysKKysgIHJldHVybiBOVUxMOworK30KKysKKysvKiBUaGUgcmVnaXN0ZXIgc2V0cyB1c2VkIGluIEdOVS9MaW51eCBFTEYgY29yZS1kdW1wcyBhcmUgaWRlbnRpY2FsIHRvCisrICAgdGhlIHJlZ2lzdGVyIHNldHMgaW4gYHN0cnVjdCB1c2VyJyB0aGF0IGFyZSB1c2VkIGZvciBhLm91dAorKyAgIGNvcmUtZHVtcHMuICBUaGVzZSBhcmUgYWxzbyB1c2VkIGJ5IHB0cmFjZSgyKS4gIFRoZSBjb3JyZXNwb25kaW5nCisrICAgdHlwZXMgYXJlIGBlbGZfZ3JlZ3NldF90JyBmb3IgdGhlIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMgKHdpdGgKKysgICBgZWxmX2dyZWdfdCcgdGhlIHR5cGUgb2YgYSBzaW5nbGUgR1AgcmVnaXN0ZXIpIGFuZCBgZWxmX2ZwcmVnc2V0X3QnCisrICAgZm9yIHRoZSBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMuCisrCisrICAgVGhvc2UgdHlwZXMgdXNlZCB0byBiZSBhdmFpbGFibGUgdW5kZXIgdGhlIG5hbWVzIGBncmVnc2V0X3QnIGFuZAorKyAgIGBmcHJlZ3NldF90JyB0b28sIGFuZCBHREIgdXNlZCB0aG9zZSBuYW1lcyBpbiB0aGUgcGFzdC4gIEJ1dCB0aG9zZQorKyAgIG5hbWVzIGFyZSBub3cgdXNlZCBmb3IgdGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiB0aGUgYG1jb250ZXh0X3QnCisrICAgdHlwZSwgd2hpY2ggaGF2ZSBhIGRpZmZlcmVudCBzaXplIGFuZCBsYXlvdXQuICAqLworKworKy8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0IHVzZXInCisrICAgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworKworKy8qIEZyb20gPHN5cy9yZWcuaD4uICAqLworK3N0YXRpYyBpbnQgc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0W10gPQorK3sKKysgMCwJNCwJOCwJMTIsCTE2LAkyMCwJMjQsCTI4LAorKyAzMiwJMzYsCTQwLAk0NCwJNDgsCTUyLAk1NiwJNjAsCisrCisrIFJFR19QQyo0LCAgIFJFR19QUio0LCAgIFJFR19HQlIqNCwgIC0xLAorKyBSRUdfTUFDSCo0LCBSRUdfTUFDTCo0LCBSRUdfU1IqNCwKKyt9OworKworKy8qIE1hcHBpbmcgYmV0d2VlbiB0aGUgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVycyBpbiBgc3RydWN0CisrICAgc2lnY29udGV4dCcgZm9ybWF0IGFuZCBHREIncyByZWdpc3RlciBjYWNoZSBsYXlvdXQuICAqLworKworKy8qIEZyb20gPGFzbS9zaWdjb250ZXh0Lmg+LiAgKi8KKytzdGF0aWMgaW50IHNoX2xpbnV4X3NjX3JlZ19vZmZzZXRbXSA9CisreworKyA0LAk4LAkxMiwJMTYsCTIwLAkyNCwJMjgsCTMyLAorKyAzNiwJNDAsCTQ0LAk0OCwJNTIsCTU2LAk2MCwJNjQsCisrIDY4LAk3MiwJODAsCS0xLAorKyA4NCwJODgsCTc2CisrfTsKKysKKyBzdGF0aWMgdm9pZAorIHNoX2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQorIHsKKysgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXAgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpOworKyAgYmZkIGFiZmQ7CisrCisrICB0ZGVwLT5ncmVnc2V0X3JlZ19vZmZzZXQgPSBzaF9saW51eF9ncmVnc2V0X3JlZ19vZmZzZXQ7CisrICB0ZGVwLT5ncmVnc2V0X251bV9yZWdzID0gQVJSQVlfU0laRSAoc2hfbGludXhfZ3JlZ3NldF9yZWdfb2Zmc2V0KTsKKysgIHRkZXAtPnNpemVvZl9ncmVnc2V0ID0gMjMgKiA0OworKworKyAgdGRlcC0+amJfcGNfb2Zmc2V0ID0gMzI7ICAgICAvKiBGcm9tIDxiaXRzL3NldGptcC5oPi4gICovCisrCisrICB0ZGVwLT5zaWd0cmFtcF9wID0gc2hfbGludXhfc2lndHJhbXBfcDsKKysgIHRkZXAtPnNpZ2NvbnRleHRfYWRkciA9IHNoX2xpbnV4X3NpZ2NvbnRleHRfYWRkcjsKKysgIHRkZXAtPnNjX3JlZ19vZmZzZXQgPSBzaF9saW51eF9zY19yZWdfb2Zmc2V0OworKyAgdGRlcC0+c2NfbnVtX3JlZ3MgPSBBUlJBWV9TSVpFIChzaF9saW51eF9zY19yZWdfb2Zmc2V0KTsKKysKKysgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIoZ2RiYXJjaCwgJnNoX2xpbnV4X3NpZ3RyYW1wX2ZyYW1lX3Vud2luZCk7CisrCisrICAvKiBJZiB3ZSBoYXZlIGEgcmVnaXN0ZXIgbWFwcGluZywgZW5hYmxlIHRoZSBnZW5lcmljIGNvcmUgZmlsZQorKyAgICAgc3VwcG9ydCwgdW5sZXNzIGl0IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4gICovCisrICBpZiAodGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0CisrICAgICAgJiYgIWdkYmFyY2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uX3AgKGdkYmFyY2gpKQorKyAgICBzZXRfZ2RiYXJjaF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24gKGdkYmFyY2gsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaF9saW51eF9yZWdzZXRfZnJvbV9jb3JlX3NlY3Rpb24pOworKworICAgbGludXhfaW5pdF9hYmkgKGluZm8sIGdkYmFyY2gpOworIAorICAgLyogR05VL0xpbnV4IHVzZXMgU1ZSNC1zdHlsZSBzaGFyZWQgbGlicmFyaWVzLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvc2gtdGRlcC5jIGIvZ2RiL3NoLXRkZXAuYworaW5kZXggODJjZjJmNC4uYjQ0M2U0NiAxMDA2NDQKKy0tLSBhL2dkYi9zaC10ZGVwLmMKKysrKyBiL2dkYi9zaC10ZGVwLmMKK0BAIC0yMSw2ICsyMSw5IEBACisgICAgc2FjQGN5Z251cy5jb20uICAqLworIAorICNpbmNsdWRlICJkZWZzLmgiCisrI2luY2x1ZGUgImFyY2gtdXRpbHMuaCIKKysjaW5jbHVkZSAiY29tbWFuZC5oIgorKyNpbmNsdWRlICJkdW1teS1mcmFtZS5oIgorICNpbmNsdWRlICJmcmFtZS5oIgorICNpbmNsdWRlICJmcmFtZS1iYXNlLmgiCisgI2luY2x1ZGUgImZyYW1lLXVud2luZC5oIgorQEAgLTM1LDYgKzM4LDcgQEAKKyAjaW5jbHVkZSAiYXJjaC11dGlscy5oIgorICNpbmNsdWRlICJmbG9hdGZvcm1hdC5oIgorICNpbmNsdWRlICJyZWdjYWNoZS5oIgorKyNpbmNsdWRlICJyZWdzZXQuaCIKKyAjaW5jbHVkZSAiZG91Ymxlc3QuaCIKKyAjaW5jbHVkZSAib3NhYmkuaCIKKyAjaW5jbHVkZSAicmVnZ3JvdXBzLmgiCitAQCAtNjcsMjMgKzcxLDYgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHNoX2NjX2VudW1bXSA9IHsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqc2hfYWN0aXZlX2NhbGxpbmdfY29udmVudGlvbiA9IHNoX2NjX2djYzsKKyAKKy0jZGVmaW5lIFNIX05VTV9SRUdTIDY3CistCistc3RydWN0IHNoX2ZyYW1lX2NhY2hlCisteworLSAgLyogQmFzZSBhZGRyZXNzLiAgKi8KKy0gIENPUkVfQUREUiBiYXNlOworLSAgTE9OR0VTVCBzcF9vZmZzZXQ7CistICBDT1JFX0FERFIgcGM7CistCistICAvKiBGbGFnIHNob3dpbmcgdGhhdCBhIGZyYW1lIGhhcyBiZWVuIGNyZWF0ZWQgaW4gdGhlIHByb2xvZ3VlIGNvZGUuICAqLworLSAgaW50IHVzZXNfZnA7CistCistICAvKiBTYXZlZCByZWdpc3RlcnMuICAqLworLSAgQ09SRV9BRERSIHNhdmVkX3JlZ3NbU0hfTlVNX1JFR1NdOworLSAgQ09SRV9BRERSIHNhdmVkX3NwOworLX07CistCisgc3RhdGljIGludAorIHNoX2lzX3JlbmVzYXNfY2FsbGluZ19jb252ZW50aW9uIChzdHJ1Y3QgdHlwZSAqZnVuY190eXBlKQorIHsKK0BAIC0xMDQzLDcgKzEwMzAsNyBAQCBzaF90cmVhdF9hc19mbHRfcCAoc3RydWN0IHR5cGUgKnR5cGUpCisgICAgIHJldHVybiAwOworICAgLyogT3RoZXJ3aXNlIGlmIHRoZSB0eXBlIG9mIHRoYXQgbWVtYmVyIGlzIGZsb2F0LCB0aGUgd2hvbGUgdHlwZSBpcworICAgICAgdHJlYXRlZCBhcyBmbG9hdC4gICovCistICBpZiAoVFlQRV9DT0RFIChUWVBFX0ZJRUxEX1RZUEUgKHR5cGUsIDApKSA9PSBUWVBFX0NPREVfRkxUKQorKyAgaWYgKFRZUEVfQ09ERSAoY2hlY2tfdHlwZWRlZiAoVFlQRV9GSUVMRF9UWVBFICh0eXBlLCAwKSkpID09IFRZUEVfQ09ERV9GTFQpCisgICAgIHJldHVybiAxOworICAgLyogT3RoZXJ3aXNlIGl0J3Mgbm90IHRyZWF0ZWQgYXMgZmxvYXQuICAqLworICAgcmV0dXJuIDA7CitAQCAtMTA5Myw3ICsxMDgwLDcgQEAgc2hfcHVzaF9kdW1teV9jYWxsX2ZwdSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsCisgICAgICBpbiBmb3VyIHJlZ2lzdGVycyBhdmFpbGFibGUuICBMb29wIHRocnUgYXJncyBmcm9tIGZpcnN0IHRvIGxhc3QuICAqLworICAgZm9yIChhcmdudW0gPSAwOyBhcmdudW0gPCBuYXJnczsgYXJnbnVtKyspCisgICAgIHsKKy0gICAgICB0eXBlID0gdmFsdWVfdHlwZSAoYXJnc1thcmdudW1dKTsKKysgICAgICB0eXBlID0gY2hlY2tfdHlwZWRlZiAodmFsdWVfdHlwZSAoYXJnc1thcmdudW1dKSk7CisgICAgICAgbGVuID0gVFlQRV9MRU5HVEggKHR5cGUpOworICAgICAgIHZhbCA9IHNoX2p1c3RpZnlfdmFsdWVfaW5fcmVnIChnZGJhcmNoLCBhcmdzW2FyZ251bV0sIGxlbik7CisgCitAQCAtMTgyMSw3ICsxODA4LDcgQEAgc2hfZHdhcmYyX2ZyYW1lX2luaXRfcmVnIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSwKKyAgICAgcmVnLT5ob3cgPSBEV0FSRjJfRlJBTUVfUkVHX1VOREVGSU5FRDsKKyB9CisgCistc3RhdGljIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqCisrc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKyBzaF9hbGxvY19mcmFtZV9jYWNoZSAodm9pZCkKKyB7CisgICBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKmNhY2hlOworQEAgLTE4NDgsNyArMTgzNSw3IEBAIHNoX2FsbG9jX2ZyYW1lX2NhY2hlICh2b2lkKQorICAgcmV0dXJuIGNhY2hlOworIH0KKyAKKy1zdGF0aWMgc3RydWN0IHNoX2ZyYW1lX2NhY2hlICoKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKgorIHNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpCisgeworICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2ggPSBnZXRfZnJhbWVfYXJjaCAodGhpc19mcmFtZSk7CitAQCAtMTkxNSw5ICsxOTAyLDkgQEAgc2hfZnJhbWVfY2FjaGUgKHN0cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lLCB2b2lkICoqdGhpc19jYWNoZSkKKyAgIHJldHVybiBjYWNoZTsKKyB9CisgCistc3RhdGljIHN0cnVjdCB2YWx1ZSAqCistc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCistCQkJdm9pZCAqKnRoaXNfY2FjaGUsIGludCByZWdudW0pCisrc3RydWN0IHZhbHVlICoKKytzaF9mcmFtZV9wcmV2X3JlZ2lzdGVyIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUsCisrCQkJaW50IHJlZ251bSkKKyB7CisgICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoICh0aGlzX2ZyYW1lKTsKKyAgIHN0cnVjdCBzaF9mcmFtZV9jYWNoZSAqY2FjaGUgPSBzaF9mcmFtZV9jYWNoZSAodGhpc19mcmFtZSwgdGhpc19jYWNoZSk7CitAQCAtMTkzMSw3ICsxOTE4LDcgQEAgc2hfZnJhbWVfcHJldl9yZWdpc3RlciAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUsCisgICAgICB0aGUgY3VycmVudCBmcmFtZS4gIEZyb2IgcmVnbnVtIHNvIHRoYXQgd2UgcHVsbCB0aGUgdmFsdWUgZnJvbQorICAgICAgdGhlIGNvcnJlY3QgcGxhY2UuICAqLworICAgaWYgKHJlZ251bSA9PSBnZGJhcmNoX3BjX3JlZ251bSAoZ2RiYXJjaCkpCistICAgIHJlZ251bSA9IFBSX1JFR05VTTsKKysgICAgcmVnbnVtID0gUFJfUkVHTlVNOyAvKiBYWFg6IHJlYWxseT8gKi8KKyAKKyAgIGlmIChyZWdudW0gPCBTSF9OVU1fUkVHUyAmJiBjYWNoZS0+c2F2ZWRfcmVnc1tyZWdudW1dICE9IC0xKQorICAgICByZXR1cm4gZnJhbWVfdW53aW5kX2dvdF9tZW1vcnkgKHRoaXNfZnJhbWUsIHJlZ251bSwKK0BAIC0yMjM3LDggKzIyMjQsOCBAQCBzaF9yZXR1cm5faW5fZmlyc3RfaGlkZGVuX3BhcmFtX3AgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorIHN0YXRpYyBzdHJ1Y3QgZ2RiYXJjaCAqCisgc2hfZ2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVjdCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKKyB7CistICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisrICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaDsKKyAKKyAgIC8qIFNINSBpcyBoYW5kbGVkIGVudGlyZWx5IGluIHNoNjQtdGRlcC5jLiAgKi8KKyAgIGlmIChpbmZvLmJmZF9hcmNoX2luZm8tPm1hY2ggPT0gYmZkX21hY2hfc2g1KQorQEAgLTIyNTQsNiArMjI0MSwxOCBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorICAgdGRlcCA9IFhDTkVXIChzdHJ1Y3QgZ2RiYXJjaF90ZGVwKTsKKyAgIGdkYmFyY2ggPSBnZGJhcmNoX2FsbG9jICgmaW5mbywgdGRlcCk7CisgCisrICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKysgIHRkZXAtPmdyZWdzZXQgPSBOVUxMOworKyAgdGRlcC0+Z3JlZ3NldF9yZWdfb2Zmc2V0ID0gTlVMTDsKKysgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSAyMzsKKysgIHRkZXAtPnNpemVvZl9ncmVnc2V0ID0gMDsKKysKKysgIC8qIEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCisrICB0ZGVwLT5mcHJlZ3NldCA9IE5VTEw7CisrICB0ZGVwLT5zaXplb2ZfZnByZWdzZXQgPSAzNCo0OworKworKyAgdGRlcC0+amJfcGNfb2Zmc2V0ID0gLTE7CisrCisgICBzZXRfZ2RiYXJjaF9zaG9ydF9iaXQgKGdkYmFyY2gsIDIgKiBUQVJHRVRfQ0hBUl9CSVQpOworICAgc2V0X2dkYmFyY2hfaW50X2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJVCk7CisgICBzZXRfZ2RiYXJjaF9sb25nX2JpdCAoZ2RiYXJjaCwgNCAqIFRBUkdFVF9DSEFSX0JJVCk7CitAQCAtMjQwNCwxMCArMjQwMywxMSBAQCBzaF9nZGJhcmNoX2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAqYXJjaGVzKQorICAgICAgIGJyZWFrOworICAgICB9CisgCisrICBkd2FyZjJfYXBwZW5kX3Vud2luZGVycyAoZ2RiYXJjaCk7CisrCisgICAvKiBIb29rIGluIEFCSS1zcGVjaWZpYyBvdmVycmlkZXMsIGlmIHRoZXkgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQuICAqLworICAgZ2RiYXJjaF9pbml0X29zYWJpIChpbmZvLCBnZGJhcmNoKTsKKyAKKy0gIGR3YXJmMl9hcHBlbmRfdW53aW5kZXJzIChnZGJhcmNoKTsKKyAgIGZyYW1lX3Vud2luZF9hcHBlbmRfdW53aW5kZXIgKGdkYmFyY2gsICZzaF9zdHViX3Vud2luZCk7CisgICBmcmFtZV91bndpbmRfYXBwZW5kX3Vud2luZGVyIChnZGJhcmNoLCAmc2hfZnJhbWVfdW53aW5kKTsKKyAKK2RpZmYgLS1naXQgYS9nZGIvc2gtdGRlcC5oIGIvZ2RiL3NoLXRkZXAuaAoraW5kZXggZmM2NzFhNS4uNjk5ZjU5ZiAxMDA2NDQKKy0tLSBhL2dkYi9zaC10ZGVwLmgKKysrKyBiL2dkYi9zaC10ZGVwLmgKK0BAIC0yMSw2ICsyMSwxMiBAQAorIAorIC8qIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIENoYW1iZXJsYWluIHNhY0BjeWdudXMuY29tLiAgKi8KKyAKKytzdHJ1Y3QgZnJhbWVfaW5mbzsKKytzdHJ1Y3QgZ2RiYXJjaDsKKytzdHJ1Y3QgcmVnZ3JvdXA7Cisrc3RydWN0IHJlZ3NldDsKKytzdHJ1Y3QgcmVnY2FjaGU7CisrCisgLyogUmVnaXN0ZXJzIGZvciBhbGwgU0ggdmFyaWFudHMuICBVc2VkIGFsc28gYnkgc2gzLXJvbS5jLiAgKi8KKyBlbnVtCisgICB7CitAQCAtMjksNiArMzUsNyBAQCBlbnVtCisgICAgIEFSRzBfUkVHTlVNID0gNCwKKyAgICAgQVJHTEFTVF9SRUdOVU0gPSA3LAorICAgICBGUF9SRUdOVU0gPSAxNCwKKysgICAgU1BfUkVHTlVNID0gMTUsCisgICAgIFBDX1JFR05VTSA9IDE2LAorICAgICBQUl9SRUdOVU0gPSAxNywKKyAgICAgR0JSX1JFR05VTSA9IDE4LAorQEAgLTgxLDYgKzg4LDI0IEBAIGVudW0KKyAgICAgRlYwX1JFR05VTSA9IDc2LAorICAgICBGVl9MQVNUX1JFR05VTSA9IDc5CisgICB9OworKyNkZWZpbmUgU0hfTlVNX1JFR1MgNjcKKysKKytzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUKKyt7CisrICAvKiBCYXNlIGFkZHJlc3MuICAqLworKyAgQ09SRV9BRERSIGJhc2U7CisrICBMT05HRVNUIHNwX29mZnNldDsKKysgIENPUkVfQUREUiBwYzsKKysKKysgIC8qIEZsYWcgc2hvd2luZyB0aGF0IGEgZnJhbWUgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgcHJvbG9ndWUgY29kZS4gKi8KKysgIGludCB1c2VzX2ZwOworKworKyAgLyogU2F2ZWQgcmVnaXN0ZXJzLiAgKi8KKysgIENPUkVfQUREUiBzYXZlZF9yZWdzW1NIX05VTV9SRUdTXTsKKysgIENPUkVfQUREUiBzYXZlZF9zcDsKKyt9OworKworK2V4dGVybiBzdHJ1Y3Qgc2hfZnJhbWVfY2FjaGUgKnNoX2ZyYW1lX2NhY2hlIChzdHJ1Y3QgZnJhbWVfaW5mbyAqbmV4dF9mcmFtZSwgdm9pZCAqKnRoaXNfY2FjaGUpOworIAorIC8qIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHJlZ2lzdGVyIGluIGEgY29yZS1maWxlLiAgKi8KKyBzdHJ1Y3Qgc2hfY29yZWZpbGVfcmVnbWFwCitAQCAtODksOCArMTE0LDMyIEBAIHN0cnVjdCBzaF9jb3JlZmlsZV9yZWdtYXAKKyAgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgfTsKKyAKKysvKiBzaCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW5mb3JtYXRpb24uICAqLworIHN0cnVjdCBnZGJhcmNoX3RkZXAKKyB7CisrICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKysgIHN0cnVjdCByZWdzZXQgKmdyZWdzZXQ7CisrICBpbnQgKmdyZWdzZXRfcmVnX29mZnNldDsKKysgIGludCBncmVnc2V0X251bV9yZWdzOworKyAgc2l6ZV90IHNpemVvZl9ncmVnc2V0OworKworKyAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KKysgIHN0cnVjdCByZWdzZXQgKmZwcmVnc2V0OworKyAgc2l6ZV90IHNpemVvZl9mcHJlZ3NldDsKKysKKysgIC8qIE9mZnNldCBvZiBzYXZlZCBQQyBpbiBqbXBfYnVmLiAgKi8KKysgIGludCBqYl9wY19vZmZzZXQ7CisrCisrICAvKiBEZXRlY3Qgc2lndHJhbXAuICAqLworKyAgaW50ICgqc2lndHJhbXBfcCkgKHN0cnVjdCBmcmFtZV9pbmZvICopOworKworKyAgLyogR2V0IGFkZHJlc3Mgb2Ygc2lnY29udGV4dCBmb3Igc2lndHJhbXAuICAqLworKyAgQ09SRV9BRERSICgqc2lnY29udGV4dF9hZGRyKSAoc3RydWN0IGZyYW1lX2luZm8gKik7CisrCisrICAvKiBPZmZzZXQgb2YgcmVnaXN0ZXJzIGluIGBzdHJ1Y3Qgc2lnY29udGV4dCcuICAqLworKyAgaW50ICpzY19yZWdfb2Zmc2V0OworKyAgaW50IHNjX251bV9yZWdzOworKworICAgLyogTm9uLU5VTEwgd2hlbiBkZWJ1Z2dpbmcgZnJvbSBhIGNvcmUgZmlsZS4gIFByb3ZpZGVzIHRoZSBvZmZzZXQKKyAgICAgIHdoZXJlIGVhY2ggZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIGlzIHN0b3JlZCBpbnNpZGUgdGhlIGFzc29jaWF0ZWQKKyAgICAgIGNvcmUgZmlsZSBzZWN0aW9uLiAgKi8KK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAgYi9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKK2luZGV4IDg4NTRhZjAuLmVmNDQ2ODIgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vYXNtLXNvdXJjZS5leHAKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9hc20tc291cmNlLmV4cAorQEAgLTExMyw2ICsxMTMsMTEgQEAgc3dpdGNoIC1nbG9iIC0tIFtpc3RhcmdldF0geworICAgICAgICAgICAgIGFwcGVuZCBsaW5rLWZsYWdzICIgLW0gZWxmMzJwcGMiCisgICAgICAgICB9CisgICAgIH0KKysgICAgInNoKi1saW51eCoiIHsKKysgICAgICAgIHNldCBhc20tYXJjaCBzaC1saW51eAorKyAgICAgICAgc2V0IGFzbS1mbGFncyAiLUkke3NyY2Rpcn0vJHtzdWJkaXJ9IC1JJHtvYmpkaXJ9LyR7c3ViZGlyfSIKKysJc2V0IGRlYnVnLWZsYWdzICItZ2R3YXJmLTIiCisrICAgIH0KKyAgICAgInNoKi0qLSoiIHsKKyAgICAgICAgIHNldCBhc20tYXJjaCBzaAorIAlzZXQgZGVidWctZmxhZ3MgIi1nZHdhcmYtMiIKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5hc20vc2guaW5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYXNtL3NoLmluYworaW5kZXggYTRhNWZjNS4uODllZmVkNyAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmFzbS9zaC5pbmMKK0BAIC00MCw5ICs0MCw4IEBACisgCW1vdi5sICAgLkxjb25zdFxALHIxCisgCWJyYQkuTGFmdGVyY29uc3RcQAorIAlub3AKKy0Jbm9wCistLkxjb25zdFxAOgorIAkuYWxpZ24JMgorKy5MY29uc3RcQDoKKyAJLmxvbmcJXHN1YnIKKyAJLmFsaWduCTEKKyAuTGFmdGVyY29uc3RcQDoKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTEuYyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCitpbmRleCA0MjRlMWI4Li4wZGUyZTdiIDEwMDY0NAorLS0tIGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGExLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMS5jCitAQCAtMSw2ICsxLDkgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKyAKKyB2b2lkCisgaGFuZGxlX1VTUjEgKGludCBzaWcpCitkaWZmIC0tZ2l0IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9hbm5vdGEzLmMgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworaW5kZXggNDI0ZTFiOC4uOTUyYWFmMiAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2UvYW5ub3RhMy5jCisrKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL2Fubm90YTMuYworQEAgLTEsNiArMSwxMCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAKKysjaWZkZWYgX19zaF9fCisrI2RlZmluZSBzaWduYWwoYSxiKSAgICAvKiBTaWduYWxzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyB0YXJnZXQgLSBtYWtlIHRoZW0gZ28gYXdheSAqLworKyNlbmRpZgorKworIAorIHZvaWQKKyBoYW5kbGVfVVNSMSAoaW50IHNpZykKK2RpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ2FsbC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWdhbGwuYworaW5kZXggODFmM2IwOC4uMTU3NGIyZCAxMDA2NDQKKy0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKKysrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnYWxsLmMKK0BAIC0xLDYgKzEsOSBAQAorICNpbmNsdWRlIDxzaWduYWwuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgCisrI2lmZGVmIF9fc2hfXworKyNkZWZpbmUgc2lnbmFsKGEsYikgICAgLyogU2lnbmFscyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgdGFyZ2V0IC0gbWFrZSB0aGVtIGdvIGF3YXkgKi8KKysjZW5kaWYKKyAKKyAvKiBTaWduYWwgaGFuZGxlcnMsIHdlIHNldCBicmVha3BvaW50cyBpbiB0aGVtIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZQorICAgIHNpZ25hbHMgcmVhbGx5IGdldCBkZWxpdmVyZWQuICAqLworZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2lnbmFscy5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKK2luZGV4IDc1NjYwNjguLjEyMDVhOWIgMTAwNjQ0CistLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NpZ25hbHMuYworKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9zaWduYWxzLmMKK0BAIC0zLDYgKzMsMTAgQEAKKyAjaW5jbHVkZSA8c2lnbmFsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorKyNpZmRlZiBfX3NoX18KKysjZGVmaW5lIHNpZ25hbChhLGIpICAgIC8qIFNpZ25hbHMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHRhcmdldCAtIG1ha2UgdGhlbSBnbyBhd2F5ICovCisrI2RlZmluZSBhbGFybShhKSAgICAgICAvKiBEaXR0byBmb3IgYWxhcm0oKSAqLworKyNlbmRpZgorIAorIHN0YXRpYyBpbnQgY291bnQgPSAwOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYi9maXgtZGV0ZWN0aW9uLW9mLTY0LWJpdC1QUEMtaW5mZXJpb3ItaW4tZ2Ric2VydmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODU0MzUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dkYi9nZGIvZml4LWRldGVjdGlvbi1vZi02NC1iaXQtUFBDLWluZmVyaW9yLWluLWdkYnNlcnZlci5wYXRjaApAQCAtMCwwICsxLDU2IEBACitGcm9tIDRmZTY3ZGJhZmExYmVlNjc5ZGFlY2MxMmVkMzA2MjFkNWMyNjA1ZGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZYW8gUWkgPHlhb0Bjb2Rlc291cmNlcnkuY29tPgorRGF0ZTogTW9uLCAxMSBNYXkgMjAxNSAxMDo1NzozMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBGaXggZGV0ZWN0aW9uIG9mIDY0LWJpdCBQUEMgaW5mZXJpb3IgaW4gZ2Ric2VydmVyCisKK0lzc3VlICMxNjc3NQorCisqIGdkYnNlcnZlci9saW51eC1wcGMtbG93LmMgKHBwY19hcmNoX3NldHVwKTogQ2hhbmdlIHZhcmlhYmxlIG1zciB0byB0eXBlCisndW5zaWduZWQgbG9uZycuICBDaGVjayBiaXQgNjMgb3IgYml0IDMxIGlzIG9uZS4KKworaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9tbC9nZGItcGF0Y2hlcy8yMDE0LTEyL21zZzAwMjM5Lmh0bWwKK1dyaXR0ZW4gYnk6IFlhbyBRaSA8eWFvQGNvZGVzb3VyY2VyeS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDx5dWFuamllLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBnZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYyB8IDExICsrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkYi9nZGJzZXJ2ZXIvbGludXgtcHBjLWxvdy5jIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKK2luZGV4IDYzZDQyMTguLmE2MmNmMjIgMTAwNjQ0CistLS0gYS9nZGIvZ2Ric2VydmVyL2xpbnV4LXBwYy1sb3cuYworKysrIGIvZ2RiL2dkYnNlcnZlci9saW51eC1wcGMtbG93LmMKK0BAIC0zNzQsNyArMzc0LDcgQEAgcHBjX2FyY2hfc2V0dXAgKHZvaWQpCisgeworICAgY29uc3Qgc3RydWN0IHRhcmdldF9kZXNjICp0ZGVzYzsKKyAjaWZkZWYgX19wb3dlcnBjNjRfXworLSAgbG9uZyBtc3I7CisrICB1bnNpZ25lZCBsb25nIG1zcjsKKyAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGU7CisgCisgICAvKiBPbiBhIDY0LWJpdCBob3N0LCBhc3N1bWUgNjQtYml0IGluZmVyaW9yIHByb2Nlc3Mgd2l0aCBubworQEAgLTM4NCwxMyArMzg0LDE2IEBAIHBwY19hcmNoX3NldHVwICh2b2lkKQorICAgY3VycmVudF9wcm9jZXNzICgpLT50ZGVzYyA9IHRkZXNjOworICAgcHBjX2h3Y2FwID0gMDsKKyAKKy0gIC8qIE9ubHkgaWYgdGhlIGhpZ2ggYml0IG9mIHRoZSBNU1IgaXMgc2V0LCB3ZSBhY3R1YWxseSBoYXZlCistICAgICBhIDY0LWJpdCBpbmZlcmlvci4gICovCisrICAvKiBXZSBhY3R1YWxseSBoYXZlIGEgNjQtYml0IGluZmVyaW9yIG9ubHkgaWYgdGhlIGNlcnRhaW4gYml0IG9mIHRoZQorKyAgICAgTVNSIGlzIHNldC4gIFRoZSBQb3dlcklTQSBCb29rIElJSS1TIE1TUiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKKysgICAgIFBvd2VySVNBIEJvb2sgSUlJLUUgTVNSLiAgVGhlIEJvb2sgSUlJLVMgTVNSIGlzIDY0IGJpdHMgd2lkZSwgYW5kCisrICAgICBpdHMgTVNSW1NGXSBpcyB0aGUgYml0IDAgb2YgYSA2NC1iaXQgdmFsdWUuICBCb29rIElJSS1FIE1TUiBpcyAzMgorKyAgICAgYml0cyB3aWRlLCBhbmQgaXRzIE1TUltDTV0gaXMgdGhlIGJpdCAwIG9mIGEgMzItYml0IHZhbHVlLiAgKi8KKyAgIHJlZ2NhY2hlID0gbmV3X3JlZ2lzdGVyX2NhY2hlICh0ZGVzYyk7CisgICBmZXRjaF9pbmZlcmlvcl9yZWdpc3RlcnMgKHJlZ2NhY2hlLCBmaW5kX3JlZ25vICh0ZGVzYywgIm1zciIpKTsKKyAgIGNvbGxlY3RfcmVnaXN0ZXJfYnlfbmFtZSAocmVnY2FjaGUsICJtc3IiLCAmbXNyKTsKKyAgIGZyZWVfcmVnaXN0ZXJfY2FjaGUgKHJlZ2NhY2hlKTsKKy0gIGlmIChtc3IgPCAwKQorKyAgaWYgKG1zciAmIDB4ODAwMDAwMDA4MDAwMDAwMCkKKyAgICAgeworICAgICAgIHBwY19nZXRfaHdjYXAgKCZwcGNfaHdjYXApOworICAgICAgIGlmIChwcGNfaHdjYXAgJiBQUENfRkVBVFVSRV9DRUxMKQorLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjkuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nZGIvZ2RiXzcuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTJlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2RiL2dkYl83LjkuMS5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIGdkYi5pbmMKK3JlcXVpcmUgZ2RiLSR7UFZ9LmluYworCitpbmhlcml0IHB5dGhvbi1kaXIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICItLXdpdGgtcHl0aG9uPSR7V09SS0RJUn0vcHl0aG9uLC0td2l0aG91dC1weXRob24scHl0aG9uLHB5dGhvbiBweXRob24tY29kZWNzIgorUEFDS0FHRUNPTkZJR1tiYWJlbHRyYWNlXSA9ICItLXdpdGgtYmFiZWx0cmFjZSwtLXdpdGhvdXQtYmFiZWx0cmFjZSxiYWJlbHRyYWNlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlpZiBbIC1uICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdweXRob24nLCAncHl0aG9uJywgJycsIGQpfSIgXTsgdGhlbgorCQljYXQgPiAke1dPUktESVJ9L3B5dGhvbiA8PCBFT0YKKyMhL2Jpbi9zaAorY2FzZSAiXCQyIiBpbgorCS0taW5jbHVkZXMpIGVjaG8gIi1JJHtTVEFHSU5HX0lOQ0RJUn0vJHtQWVRIT05fRElSfS8iIDs7CisJLS1sZGZsYWdzKSBlY2hvICItV2wsLXJwYXRoLWxpbmssJHtTVEFHSU5HX0xJQkRJUn0vLi4gLVdsLC1ycGF0aCwke2xpYmRpcn0vLi4gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSIgOzsKKwktLWV4ZWMtcHJlZml4KSBlY2hvICIke2V4ZWNfcHJlZml4fSIgOzsKKwkqKSBleGl0IDEgOzsKK2VzYWMKK2V4aXQgMAorRU9GCisJCWNobW9kICt4ICR7V09SS0RJUn0vcHl0aG9uCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGE0YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dpdC9naXQuaW5jCkBAIC0wLDAgKzEsMTMwIEBACitTVU1NQVJZID0gIkRpc3RyaWJ1dGVkIHZlcnNpb24gY29udHJvbCBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LXNjbS5jb20iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorREVQRU5EUyA9ICJvcGVuc3NsIGN1cmwgemxpYiBleHBhdCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZ2l0LXJlcGxhY2VtZW50LW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL3NjbS9naXQvZ2l0LSR7UFZ9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0tFUk5FTE9SR19NSVJST1J9L3NvZnR3YXJlL3NjbS9naXQvZ2l0LW1hbnBhZ2VzLSR7UFZ9LnRhci5nejtuYW1lPW1hbnBhZ2VzIgorCitTID0gIiR7V09SS0RJUn0vZ2l0LSR7UFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03YzBkN2VmMDNhN2ViMDRjZTc5NWIwZjYwZTY4ZTdlMSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1wZXJsPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsIFwKKwkJLS13aXRob3V0LXRjbHRrIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIHBlcmxuYXRpdmUKKworRVhUUkFfT0VNQUtFID0gIk5PX1BZVEhPTj0xIENGTEFHUz0nJHtDRkxBR1N9JyBMREZMQUdTPScke0xERkxBR1N9JyIKK0VYVFJBX09FTUFLRSArPSAiJ1BFUkxfUEFUSD0vdXNyL2Jpbi9lbnYgcGVybCciCitFWFRSQV9PRU1BS0VfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUz0xIgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSMgUmVtb3ZlIHBlcmwvcGVybC5tYWsgdG8gZml4IHRoZSBvdXQtb2YtZGF0ZSBwZXJsLm1hayBlcnJvcgorCSMgZHVyaW5nIHJlYnVpbGQKKwlybSAtZiBwZXJsL3BlcmwubWFrCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSIke0R9IiBiaW5kaXI9JHtiaW5kaXJ9IFwKKwkJdGVtcGxhdGVfZGlyPSR7ZGF0YWRpcn0vZ2l0LWNvcmUvdGVtcGxhdGVzIFwKKwkJR0lUX1BZVEhPTl9ESVI9JHtEfSR7ZGF0YWRpcn0vZ2l0LWNvcmUvcHl0aG9uCisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW4xCisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW41CisJaW5zdGFsbCAtZCAke0R9LyR7bWFuZGlyfS9tYW43CisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW4xICR7V09SS0RJUn0vbWFuMS8qCisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW41ICR7V09SS0RJUn0vbWFuNS8qCisJaW5zdGFsbCAtdCAke0R9LyR7bWFuZGlyfS9tYW43ICR7V09SS0RJUn0vbWFuNy8qCisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0vYmFzaC1jb21wbGV0aW9uL2NvbXBsZXRpb25zLworCWluc3RhbGwgLW0gNjQ0ICR7U30vY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggJHtEfS8ke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy9naXQKK30KKworcGVybF9uYXRpdmVfZml4dXAgKCkgeworCXNlZCAtaSAtZSAncyMke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvIyR7YmluZGlyfS8jJyBcCisJICAgICAgIC1lICdzIyR7bGliZGlyfS9wZXJsLW5hdGl2ZS8jJHtsaWJkaXJ9LyMnIFwKKwkgICAgJHtAZC5nZXRWYXIoIlBFUkxUT09MUyIsIFRydWUpLnJlcGxhY2UoJyAvJyxkLmdldFZhcignRCcsIFRydWUpICsgJy8nKX0KKworCSMgJHtsaWJkaXJ9IGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUsIHBlcmwtbmF0aXZlIGZpbGVzIGFyZSBhbHdheXMKKwkjIGluc3RhbGxlZCB0byAvdXNyL2xpYiBvbiBib3RoIDMyLzY0IGJpdHMgdGFyZ2V0cy4KKwltdiAke0R9JHtleGVjX3ByZWZpeH0vbGliL3BlcmwtbmF0aXZlL3BlcmwgJHtEfSR7bGliZGlyfQorCXJtZGlyIC1wICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvcGVybC1uYXRpdmUgfHwgdHJ1ZQorfQorCitSRUxfR0lUX0VYRUNfUEFUSCA9ICIke0Bvcy5wYXRoLnJlbHBhdGgobGliZXhlY2RpciwgYmluZGlyKX0vZ2l0LWNvcmUiCitSRUxfR0lUX1RFTVBMQVRFX0RJUiA9ICIke0Bvcy5wYXRoLnJlbHBhdGgoZGF0YWRpciwgYmluZGlyKX0vZ2l0LWNvcmUvdGVtcGxhdGVzIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCXBlcmxfbmF0aXZlX2ZpeHVwCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L2dpdCBcCisJCUdJVF9FWEVDX1BBVEg9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX0VYRUNfUEFUSH0gXAorCQlHSVRfVEVNUExBVEVfRElSPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7UkVMX0dJVF9URU1QTEFURV9ESVJ9Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L2dpdCBcCisJCUdJVF9FWEVDX1BBVEg9J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtSRUxfR0lUX0VYRUNfUEFUSH0gXAorCQlHSVRfVEVNUExBVEVfRElSPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7UkVMX0dJVF9URU1QTEFURV9ESVJ9CisJcGVybF9uYXRpdmVfZml4dXAKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vZ2l0LWNvcmUgJHtsaWJleGVjZGlyfS9naXQtY29yZS8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvLmRlYnVnIgorCitQRVJMVE9PTFMgPSAiIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hZGQtLWludGVyYWN0aXZlIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hcmNoaW1wb3J0IFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jdnNleHBvcnRjb21taXQgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LWN2c2ltcG9ydCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtY3Zzc2VydmVyIFwKKyAgICAke2JpbmRpcn0vZ2l0LWN2c3NlcnZlciBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtZGlmZnRvb2wgXAorICAgICR7bGliZXhlY2Rpcn0vZ2l0LWNvcmUvZ2l0LXJlbGluayBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtc2VuZC1lbWFpbCBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtc3ZuIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1pbnN0YXdlYiBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtc3VibW9kdWxlIFwKKyAgICAke2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hbSBcCisgICAgJHtsaWJleGVjZGlyfS9naXQtY29yZS9naXQtcmVxdWVzdC1wdWxsIFwKKyAgICAke2RhdGFkaXJ9L2dpdHdlYi9naXR3ZWIuY2dpIFwKKyAgICAke2RhdGFkaXJ9L2dpdC1jb3JlL3RlbXBsYXRlcy9ob29rcy9wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlIFwKKyAgICAke2RhdGFkaXJ9L2dpdC1jb3JlL3RlbXBsYXRlcy9ob29rcy9wcmUtcmViYXNlLnNhbXBsZSBcCisiCisKKyMgQmFzaWMgdGFiIGNvbXBsZXRpb24gc3VwcG9ydAorUEFDS0FHRVMgPSsgIiR7UE59LWJhc2gtY29tcGxldGlvbiIKK0ZJTEVTXyR7UE59LWJhc2gtY29tcGxldGlvbiA9ICIke2RhdGFkaXJ9L2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy8qIgorCisjIEdpdCB0b29scyByZXF1aXJpbmcgcGVybAorUEFDS0FHRVMgPSsgIiR7UE59LXBlcmx0b29scyIKK0ZJTEVTXyR7UE59LXBlcmx0b29scyArPSAiIFwKKyAgICAke1BFUkxUT09MU30gXAorICAgICR7bGliZGlyfS9wZXJsIFwKKyAgICAke2RhdGFkaXJ9L3BlcmwgXAorIgorUkRFUEVORFNfJHtQTn0tcGVybHRvb2xzID0gIiR7UE59IHBlcmwgcGVybC1tb2R1bGUtZmlsZS1wYXRoIGZpbmR1dGlscyIKKworUEFDS0FHRVMgPSsgIiR7UE59LXB5dGhvbiIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uKiIKKworCisjIGdpdC10ayBwYWNrYWdlIHdpdGggZ2l0ayBhbmQgZ2l0LWd1aQorUEFDS0FHRVMgPSsgIiR7UE59LXRrIgorI1JERVBFTkRTXyR7UE59LXRrID0gIiR7UE59IHRrIHRjbCIKKyNFWFRSQV9PRU1BS0UgPSAiVENMX1BBVEg9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30vdGNsc2giCitGSUxFU18ke1BOfS10ayA9ICIgXAorICAgICR7YmluZGlyfS9naXRrIFwKKyAgICAke2RhdGFkaXJ9L2dpdGsgXAorIgorCitQQUNLQUdFUyA9KyAiZ2l0d2ViIgorRklMRVNfZ2l0d2ViID0gIiR7ZGF0YWRpcn0vZ2l0d2ViLyIKKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjUuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9naXQvZ2l0XzIuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjg2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ2l0L2dpdF8yLjUuMC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGdpdC5pbmMKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzPW5vIFwKKyAgICAgICAgICAgICAgICAgYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9JHthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXN9IFwKKyAgICAgICAgICAgICAgICAgIgorRVhUUkFfT0VNQUtFICs9ICJOT19HRVRURVhUPTEiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjNiYzliMGE4MDNhZThlYzZjNTMxNmNjNjRmMGI3Zjc4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiOGZhMTNiYTg0MzRmZjgzZDI0ZjU3ZjgzMWQ1NWRiYjkwNDY0MzRjMjY2NjQxMTgwYTM3NzQ0ZmFjZmNlNzJhYyIKK1NSQ19VUklbbWFucGFnZXMubWQ1c3VtXSA9ICIxMzRiMDQ5ZTUxNDIwYTMzNjA0OWFhYzIxYzg4YTc1YSIKK1NSQ19VUklbbWFucGFnZXMuc2hhMjU2c3VtXSA9ICI3NDVlNGU3OTdmZTUwNjFlNzgxYzg4MGQzNzBiMWJlYjQ4MDE5OTEyN2RhNWFjYWY0ZTM3NmUwYjA5ZDRkNjg1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9jb25maWctZ3Vlc3MtdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTQxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2NvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwxNzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitQYXRjaCBjb3VydGVzeSBnZW50b28tcG9ydGFnZS9zeXMtZGV2ZWwvZ251Y29uZmlnL2ZpbGVzL2F1dG9tYWtlLTEuOC41LWNvbmZpZy1ndWVzcy11Y2xpYmMucGF0Y2guCisKK3VwZGF0ZWQgdG8gMjAwNTA1MTYgYnkgTWFyY2luICdIcncnIEp1c3praWV3aWN6IChieSBoYW5kKQordXBkYXRlZCB0byAyMDA4MDEyMyBieSBOaXRpbiBBIEthbWJsZSAoYnkgaGFuZCkKK3VwZGF0ZWQgdG8gMjAxMTEwMDEgYnkgU2F1bCBXb2xkIChieSBoYW5kKQordXBkYXRlZCB0byAyMDEyMDgxOCBieSBNYXJjaW4gJ0hydycgSnVzemtpZXdpY3ogKGJ5IGhhbmQpCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luLmp1c3praWV3aWN6QGxpbmFyby5vcmc+CisKKy0tLQorIGNvbmZpZy5ndWVzcyB8ICAgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCisKKy0tLSBnaXQub3JpZy9jb25maWcuZ3Vlc3MKKysrKyBnaXQvY29uZmlnLmd1ZXNzCitAQCAtMTM4LDYgKzEzOCwxOSBAQCBVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8CisgVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KKyBVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKyAKKysjIERldGVjdCB1Y2xpYmMgc3lzdGVtcy4KKysKKytMSUJDPSJnbnUiCisraWYgWyAtZiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmggXQorK3RoZW4KKysJTElCQz11Y2xpYmMKKysJaWYgWyAtbiBgZ3JlcCAiI2RlZmluZSBfX1VDTElCQ19DT05GSUdfVkVSU0lPTl9fIiAvdXNyL2luY2x1ZGUvYml0cy91Q2xpYmNfY29uZmlnLmhgIF0KKysJdGhlbgorKwkJVUNMSUJDX1NVQlZFUj1gc2VkIC1uICIvI2RlZmluZSBfX1VDTElCQ19DT05GSUdfVkVSU0lPTl9fIC9zLy8vcCIgL3Vzci9pbmNsdWRlL2JpdHMvdUNsaWJjX2NvbmZpZy5oYAorKwkJTElCQz0kTElCQyRVQ0xJQkNfU1VCVkVSCisrCWZpCisrZmkKKysKKyAjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisgCisgY2FzZSAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiBpbgorQEAgLTg4NiwxNSArODk5LDE1IEBAIEVPRgorIAkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworIAllc2FjCisgCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisrCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImdudWxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBhcm0qOkxpbnV4Oio6KikKKyAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorIAlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisgCSAgICB8IGdyZXAgLXEgX19BUk1fRUFCSV9fCisgCXRoZW4KKy0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAllbHNlCisgCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorIAkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKK0BAIC05MDYsMTkgKzkxOSwxOSBAQCBFT0YKKyAJZmkKKyAJZXhpdCA7OworICAgICBhdnIzMio6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGNyaXM6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGNyaXN2MzI6TGludXg6KjoqKQorLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIGZydjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaGV4YWdvbjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgaSo4NjpMaW51eDoqOiopCisgCUxJQkM9Z251CitAQCAtOTMyLDEzICs5NDUsMTMgQEAgRU9GCisgCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKyAJZXhpdCA7OworICAgICBpYTY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBtMzJyKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgbTY4KjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQorIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCitAQCAtOTU3LDU0ICs5NzAsNTQgQEAgRU9GCisgCSNlbmRpZgorIEVPRgorIAlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCistCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisrCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQorIAk7OworICAgICBvcjMyOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYWRyZTpMaW51eDoqOiopCistCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKysJZWNobyBzcGFyYy11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorLQllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisgCSMgTG9vayBmb3IgQ1BVIGxldmVsCisgCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCistCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CistCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CistCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisrCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtJHtMSUJDfSA7OworKwkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LSR7TElCQ30gOzsKKysJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisgCWVzYWMKKyAJZXhpdCA7OworICAgICBwcGM2NDpMaW51eDoqOiopCistCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisrCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtJHtMSUJDfQorIAlleGl0IDs7CisgICAgIHBwYzpMaW51eDoqOiopCistCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKKyAJZXhpdCA7OworICAgICBzaDY0KjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgc2gqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB0aWxlKjpMaW51eDoqOiopCistCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgdmF4OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC1nbnUKKysJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC0ke0xJQkN9CisgCWV4aXQgOzsKKyAgICAgeDg2XzY0OkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICB4dGVuc2EqOkxpbnV4Oio6KikKKy0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisrCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAJZXhpdCA7OworICAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorIAkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9nbnUtY29uZmlnaXplLmluIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9nbnUtY29uZmlnaXplLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0OTA4ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL2dudS1jb25maWdpemUuaW4KQEAgLTAsMCArMSwyNjcgQEAKKyMhIC91c3IvYmluL2VudiBwZXJsCisjIC0qLSBwZXJsIC0qLQorCitldmFsICdjYXNlICQjIGluIDApIGV4ZWMgL3Vzci9iaW4vcGVybCAtUyAiJDAiOzsgKikgZXhlYyAvdXNyL2Jpbi9wZXJsIC1TICIkMCIgIiRAIjs7IGVzYWMnCisgICAgaWYgMDsKKworIyBnbnUtY29uZmlnaXplIC0gaW5zdGFsbCB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW4gYSBkaXJlY3RvcnkgdHJlZQorIyBCYXNlZCBvbiBhdXRvcmVjb25mOgorIyAgIENvcHlyaWdodCAoQykgMTk5NCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMworIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKKyMgMDIxMTEtMTMwNywgVVNBLgorCitCRUdJTgoreworICBteSAkZGF0YWRpciA9ICRFTlZ7J2F1dG9tNHRlX3BlcmxsaWJkaXInfSB8fCAnQGF1dG9tNHRlX3BlcmxsaWJkaXJAJzsKKyMgICcvaG9tZS9rZXJnb3RoL2NvZGUvYnVpbGQtYXJtL3RtcC9zdGFnaW5nL3NoYXJlL2F1dG9jb25mJzsKKyAgdW5zaGlmdCBASU5DLCAkZGF0YWRpcjsKKworICAjIE92ZXJyaWRlIFNIRUxMLiAgT24gREpHUFAgU0hFTEwgbWF5IG5vdCBiZSBzZXQgdG8gYSBzaGVsbAorICAjIHRoYXQgY2FuIGhhbmRsZSByZWRpcmVjdGlvbiBhbmQgcXVvdGUgYXJndW1lbnRzIGNvcnJlY3RseSwKKyAgIyBlLmcuOiBDT01NQU5ELkNPTS4gIEZvciBESkdQUCBhbHdheXMgdXNlIHRoZSBzaGVsbCB0aGF0IGNvbmZpZ3VyZQorICAjIGhhcyBkZXRlY3RlZC4KKyAgJEVOVnsnU0hFTEwnfSA9ICcvYmluL3NoJyBpZiAoJF5PIGVxICdkb3MnKTsKK30KKwordXNlIEF1dG9tNHRlOjpDaGFubmVsRGVmczsKK3VzZSBBdXRvbTR0ZTo6Q2hhbm5lbHM7Cit1c2UgQXV0b200dGU6OkNvbmZpZ3VyZV9hYzsKK3VzZSBBdXRvbTR0ZTo6RmlsZVV0aWxzOwordXNlIEF1dG9tNHRlOjpHZW5lcmFsOwordXNlIEF1dG9tNHRlOjpYRmlsZTsKKyMgRG8gbm90IHVzZSBDd2Q6OmNoZGlyLCBzaW5jZSBpdCBtaWdodCBoYW5nLgordXNlIEN3ZCAnY3dkJzsKK3VzZSBzdHJpY3Q7CisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyBWYXJpYWJsZXMuICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworIyAkSEVMUAorIyAtLS0tLQorJGhlbHAgPSAiVXNhZ2U6ICQwIFtPUFRJT05dIC4uLiBbQ09ORklHVVJFLUFDIG9yIERJUkVDVE9SWV0gLi4uCisKK0luc3RhbGwgdGhlIEdOVSBjb25maWcuc3ViIGFuZCBjb25maWcuZ3Vlc3Mgc2NyaXB0cyBpbiB0aGUKK0RJUkVDVE9SSUVTIG9yIHRoZSBkaXJlY3RvcnkgdHJlZXMgZHJpdmVuIGJ5IENPTkZJR1VSRS1BQworKGRlZmF1bHRpbmcgdG8gYC4nKS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAtZiwgLS1mb3JjZSAgICAgICAgICAgICAgY29uc2lkZXIgYWxsIGZpbGVzIG9ic29sZXRlCisgIC1zLCAtLXN5bWxpbmsgICAgICAgICAgICBpbnN0YWxsIHN5bWJvbGljIGxpbmtzIGluc3RlYWQgb2YgY29waWVzCisgIC1XLCAtLXdhcm5pbmdzPUNBVEVHT1JZICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW3N5bnRheF0KKworIiAuIEF1dG9tNHRlOjpDaGFubmVsRGVmczo6dXNhZ2UgLiAiCisKK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBcYFdBUk5JTkdTXCcgaXMgaG9ub3JlZC4gIFNvbWUgc3VidG9vbHMgbWlnaHQKK3N1cHBvcnQgb3RoZXIgd2FybmluZyB0eXBlcywgdXNpbmcgXGBhbGwnIGlzIGVuY291cmFnZWQuCisiOworCisjICRWRVJTSU9OCisjIC0tLS0tLS0tCiskdmVyc2lvbiA9ICJnbnUtY29uZmlnaXplIDEuMAorCitDb3B5cmlnaHQgKEMpIDIwMDQgQ2hyaXMgTGFyc29uCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisiOworCitteSAkY29uZmlnZGlyICA9ICdAZ251LWNvbmZpZ2RpckAnOworIycvaG9tZS9rZXJnb3RoL2NvZGUvYnVpbGQtYXJtL3RtcC9zdGFnaW5nL2k2ODYtbGludXgvc2hhcmUvZ251LWNvbmZpZyc7CitteSAkYXV0b2NvbmYgICA9ICRFTlZ7J0FVVE9DT05GJ30gICAgIHx8ICdhdXRvY29uZic7CisKKyMgdXNlIHN5bWxpbmtzIGluc3RlYWQuCitteSAkc3ltbGluayA9IDA7CisKK215ICRjb25maWd1cmVfYWM7CisKK215ICRybSA9ICJybSAtZiI7CitteSAkbG5fcyA9ICJsbiAtc2YiOworbXkgJGNwID0gImNwIC1mIjsKK215ICRta2RpciA9ICJta2RpciI7CitteSAkY2htb2QgPSAiY2htb2QiOworCisjIyAtLS0tLS0tLS0tICMjCisjIyBSb3V0aW5lcy4gICMjCisjIyAtLS0tLS0tLS0tICMjCisKKworIyBwYXJzZV9hcmdzICgpCisjIC0tLS0tLS0tLS0tLS0KKyMgUHJvY2VzcyBhbnkgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KK3N1YiBwYXJzZV9hcmdzICgpCit7CisgIG15ICRzcmNkaXI7CisKKyAgZ2V0b3B0ICgnc3xzeW1saW5rJyAgICAgICAgICAgID0+IFwkc3ltbGluayk7CisKKyAgIyBFdmVuIGlmIHRoZSB1c2VyIHNwZWNpZmllZCBhIGNvbmZpZ3VyZS5hYywgdHJpbSB0byBnZXQgdGhlCisgICMgZGlyZWN0b3J5LCBhbmQgbG9vayBmb3IgY29uZmlndXJlLmFjIGFnYWluLiAgQmVjYXVzZSAoaSkgdGhlIGNvZGUKKyAgIyBpcyBzaW1wbGVyLCBhbmQgKGlpKSB3ZSBhcmUgc3RpbGwgYWJsZSB0byBkaWFnbm9zZSBzaW11bHRhbmVvdXMKKyAgIyBwcmVzZW5jZSBvZiBjb25maWd1cmUuYWMgYW5kIGNvbmZpZ3VyZS5pbi4KKyAgQEFSR1YgPSBtYXAgeyAvY29uZmlndXJlXC4oYWN8aW4pJC8gPyBkaXJuYW1lICgkXykgOiAkXyB9IEBBUkdWOworICBwdXNoIEBBUkdWLCAnLicgdW5sZXNzIEBBUkdWOworfQorCisKKyMgJmdudV9jb25maWdpemVfY3VycmVudF9kaXJlY3RvcnkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiBnbnVfY29uZmlnaXplX2N1cnJlbnRfZGlyZWN0b3J5ICgpCit7CisgIG15ICRjb25maWd1cmVfYWMgPSByZXF1aXJlX2NvbmZpZ3VyZV9hYzsKKworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworICAjIElzIGl0IHVzaW5nIEF1dG9jb25mPyAgIworICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIworCisgIG15ICR1c2VzX2F1dG9jb25mOworICBteSAkdXNlc19nZXR0ZXh0OworICBteSAkY29uZmlndXJlX2FjX2ZpbGUgPSBuZXcgQXV0b200dGU6OlhGaWxlICRjb25maWd1cmVfYWM7CisgIHdoaWxlICgkXyA9ICRjb25maWd1cmVfYWNfZmlsZS0+Z2V0bGluZSkKKyAgICAgeworICAgICAgIHMvIy4qLy87CisgICAgICAgcy9kbmwuKi8vOworICAgICAgICR1c2VzX2F1dG9jb25mID0gMSBpZiAvQUNfSU5JVC87CisgICAgIH0KKworICBpZiAoISR1c2VzX2F1dG9jb25mKQorICAgIHsKKyAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IG5vdCB1c2luZyBBdXRvY29uZiI7CisgICAgICByZXR1cm47CisgICAgfQorCisgIG15ICRhdXhfZGlyOworICBteSBAc3ViZGlyOworICBteSAkY21kOworICBteSAkZGVzdDsKKworICB2ZXJiICIkY29uZmlndXJlX2FjOiB0cmFjaW5nIjsKKyAgbXkgJHRyYWNlcyA9IG5ldyBBdXRvbTR0ZTo6WEZpbGUKKyAgICAoIiRhdXRvY29uZiIKKyAgICAgLiBqb2luICgnIC0tdHJhY2U9JywgJycsCisJICAgICAjIElmIHlvdSBjaGFuZ2UgdGhpcyBsaXN0LCB1cGRhdGUgdGhlCisJICAgICAjIGBBdXRvcmVjb25mLXByZXNlbGVjdGlvbnMnIHNlY3Rpb24gb2YgYXV0b200dGUuaW4uCisJICAgICAnQUNfQ09ORklHX0FVWF9ESVI6QUNfQ09ORklHX0FVWF9ESVI6XCQxJywKKwkgICAgICdBQ19DT05GSUdfU1VCRElSUzpBQ19DT05GSUdfU1VCRElSUzpcJDEnLAorCSAgICAgJ0FDX0lOSVQnLAorCSAgICApCisgICAgIC4gJyB8Jyk7CisgIHdoaWxlICgkXyA9ICR0cmFjZXMtPmdldGxpbmUpCisgICAgeworICAgICAgJGF1eF9kaXIgPSAkMSAgICAgICAgICAgICAgICAgaWYgL0FDX0NPTkZJR19BVVhfRElSOiguKikvOworICAgICAgJHVzZXNfYXV0b2NvbmYgPSAxICAgICAgICAgICAgaWYgL0FDX0lOSVQvOworICAgICAgcHVzaCBAc3ViZGlyLCBzcGxpdCAoJyAnLCAkMSkgaWYgL0FDX0NPTkZJR19TVUJESVJTOiguKikvOworICAgIH0KKworICAjIFRoZSBzdWJkaXJzIGFyZSAqb3B0aW9uYWwqLCB0aGV5IG1heSBub3QgZXhpc3QuCisgIGZvcmVhY2ggKEBzdWJkaXIpCisgICAgeworICAgICAgaWYgKC1kKQorCXsKKwkgIHZlcmIgIiRjb25maWd1cmVfYWM6IHN1YmRpcmVjdG9yeSAkXyB0byBnbnUtY29uZmlnaXplIjsKKwkgIGdudV9jb25maWdpemUgKCRfKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgdmVyYiAiJGNvbmZpZ3VyZV9hYzogc3ViZGlyZWN0b3J5ICRfIG5vdCBwcmVzZW50IjsKKwl9CisgICAgfQorCisgICRkZXN0ID0gIi4iOworCisgIGlmIChkZWZpbmVkICRhdXhfZGlyKQorICAgIHsKKyAgICAgICRkZXN0ID0gJGF1eF9kaXI7CisgICAgICBpZiAoISAtZCAkYXV4X2RpcikKKyAgICAgICAgeworICAgICAgICAgIHZlcmIgIiRjb25maWd1cmVfYWM6IGNyZWF0aW5nIGRpcmVjdG9yeSAkYXV4X2RpciI7CisgICAgICAgICAgbWtkaXIgJGF1eF9kaXIKKyAgICAgICAgICAgIG9yIGVycm9yICJjYW5ub3QgY3JlYXRlICRhdXhfZGlyOiAkISI7CisgICAgICAgIH0KKyAgICB9CisKKyAgaWYgKCEkc3ltbGluaykKKyAgICB7CisgICAgICAkY21kID0gJGNwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgICRjbWQgPSAkbG5fczsKKyAgICB9CisKKyAgeHN5c3RlbSAoIiRjbWQgJGNvbmZpZ2Rpci9jb25maWcuZ3Vlc3MgJGRlc3QvIik7CisgIHhzeXN0ZW0gKCIkY2htb2QgdSt4ICRkZXN0L2NvbmZpZy5ndWVzcyIpOworICB4c3lzdGVtICgiJGNtZCAkY29uZmlnZGlyL2NvbmZpZy5zdWIgJGRlc3QvIik7CisgIHhzeXN0ZW0gKCIkY2htb2QgdSt4ICRkZXN0L2NvbmZpZy5zdWIiKTsKK30KKworCisjICZnbnVfY29uZmlnaXplICgkRElSRUNUT1JZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVjb25mIHRoZSAkRElSRUNUT1JZLgorc3ViIGdudV9jb25maWdpemUgKCQpCit7CisgIG15ICgkZGlyZWN0b3J5KSA9IEBfOworICBteSAkY3dkID0gY3dkOworCisgICMgVGhlIGZvcm1hdCBmb3IgdGhpcyBtZXNzYWdlIGlzIG5vdCBmcmVlOiB0YWtlbiBmcm9tIEVtYWNzLCBpdHNlbGYKKyAgIyB1c2luZyBHTlUgTWFrZSdzIGZvcm1hdC4KKyAgdmVyYiAiRW50ZXJpbmcgZGlyZWN0b3J5IGAkZGlyZWN0b3J5JyI7CisgIGNoZGlyICRkaXJlY3RvcnkKKyAgICBvciBlcnJvciAiY2Fubm90IGNoZGlyIHRvICRkaXJlY3Rvcnk6ICQhIjsKKworICBnbnVfY29uZmlnaXplX2N1cnJlbnRfZGlyZWN0b3J5OworCisgICMgVGhlIGZvcm1hdCBpcyBub3QgZnJlZTogdGFrZW4gZnJvbSBFbWFjcywgaXRzZWxmIHVzaW5nIEdOVSBNYWtlJ3MKKyAgIyBmb3JtYXQuCisgIHZlcmIgIkxlYXZpbmcgZGlyZWN0b3J5IGAkZGlyZWN0b3J5JyI7CisgIGNoZGlyICRjd2QKKyAgICBvciBlcnJvciAiY2Fubm90IGNoZGlyIHRvICRjd2Q6ICQhIjsKK30KKworCisjIyAtLS0tLS0gIyMKKyMjIE1haW4uICAjIworIyMgLS0tLS0tICMjCisKK3BhcnNlX2FyZ3M7CisKKyMgQXV0b3JlY29uZiBhbGwgdGhlIGdpdmVuIGNvbmZpZ3VyZS5hYy4gIEEgd2hpbGUgbG9vcCwgbm90IGEgZm9yLAorIyBzaW5jZSB0aGUgbGlzdCBjYW4gY2hhbmdlIGF0IHJ1bnRpbWUgYmVjYXVzZSBvZiBBQ19DT05GSUdfU1VCRElSUy4KK2ZvciBteSAkZGlyZWN0b3J5IChAQVJHVikKKyAgeworICAgIGdudV9jb25maWdpemUgKCRkaXJlY3RvcnkpOworICB9CisKKyMjIyBTZXR1cCAiR05VIiBzdHlsZSBmb3IgcGVybC1tb2RlIGFuZCBjcGVybC1tb2RlLgorIyMgTG9jYWwgVmFyaWFibGVzOgorIyMgcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIHBlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIHBlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgcGVybC1icmFjZS1vZmZzZXQ6IDAKKyMjIHBlcmwtYnJhY2UtaW1hZ2luYXJ5LW9mZnNldDogMAorIyMgcGVybC1sYWJlbC1vZmZzZXQ6IC0yCisjIyBjcGVybC1pbmRlbnQtbGV2ZWw6IDIKKyMjIGNwZXJsLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtY29udGludWVkLWJyYWNlLW9mZnNldDogMAorIyMgY3BlcmwtbGFiZWwtb2Zmc2V0OiAtMgorIyMgY3BlcmwtZXh0cmEtbmV3bGluZS1iZWZvcmUtYnJhY2U6IHQKKyMjIGNwZXJsLW1lcmdlLXRyYWlsaW5nLWVsc2U6IG5pbAorIyMgY3BlcmwtY29udGludWVkLXN0YXRlbWVudC1vZmZzZXQ6IDIKKyMjIEVuZDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvbXVzbC1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZy9tdXNsLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0NzQzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvbXVzbC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK3N1cHBvcnQgbXVzbAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnbnUtY29uZmlnLTIwMTIwODE0L2NvbmZpZy5zdWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnUtY29uZmlnLTIwMTIwODE0Lm9yaWcvY29uZmlnLnN1YgkyMDEyLTA5LTE4IDAyOjI3OjQ1LjAwMDAwMDAwMCAtMDcwMAorKysrIGdudS1jb25maWctMjAxMjA4MTQvY29uZmlnLnN1YgkyMDE0LTAzLTI2IDAwOjM0OjE5Ljk1NTk5NjcwOSAtMDcwMAorQEAgLTEyMyw2ICsxMjMsNyBAQAorIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorIGNhc2UgJG1heWJlX29zIGluCisgICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1hbmRyb2lkKiB8IGxpbnV4LWRpZXRsaWJjIHwgbGludXgtbmV3bGliKiB8IFwKKysgIGxpbnV4LW11c2wqIHwgXAorICAgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICAga25ldGJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IFwKKyAgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKK0BAIC0xMzY1LDYgKzEzNjYsNyBAQAorIAkgICAgICB8IC1jeWd3aW4qIHwgLW1zeXMqIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisgCSAgICAgIHwgLW1pbmd3MzIqIHwgLW1pbmd3NjQqIHwgLWxpbnV4LWdudSogfCAtbGludXgtYW5kcm9pZCogXAorIAkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorKwkgICAgICB8IC1saW51eC1tdXNsKiBcCisgCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKyAJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKyAJICAgICAgfCAtb3BlbnN0ZXAqIHwgLW9za2l0KiB8IC1jb25peCogfCAtcHczMiogfCAtbm9uc3RvcHV4KiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL3VjbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWcvdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZmUxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnL3VjbGliYy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGNvbmZpZy5zdWIub3JpZwkyMDA0LTA1LTE0IDE5OjM4OjM2LjAwMDAwMDAwMCAtMDUwMAorKysrIGNvbmZpZy5zdWIJMjAwNC0wNS0xNCAxOTozOToxNy4wMDAwMDAwMDAgLTA1MDAKK0BAIC0xMTgsNyArMTE4LDcgQEAKKyAjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorIG1heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorIGNhc2UgJG1heWJlX29zIGluCistICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IG5ldGJzZCotZ251KiB8IHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKysgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LXVjbGliYyogfCBmcmVlYnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQorICAgICBvcz0tJG1heWJlX29zCisgICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgIDs7CitAQCAtMTEzNSw3ICsxMTM1LDggQEAKKyAJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCisgCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKKyAJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorLQkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKysJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC11Y2xpYmMqIFwKKysJICAgICAgfCAtdXhwdiogfCAtYmVvcyogfCAtbXBlaXgqIHwgLXVkayogXAorIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorIAkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKyAJICAgICAgfCAtc3Rvcm0tY2hhb3MqIHwgLXRvcHMxMCogfCAtdGVuZXgqIHwgLXRvcHMyMCogfCAtaXRzKiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ251LWNvbmZpZy9nbnUtY29uZmlnXzIwMTIwODE0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjdlNDIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ18yMDEyMDgxNC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gImdudS1jb25maWdpemUiCitERVNDUklQVElPTiA9ICJUb29sIHRoYXQgaW5zdGFsbHMgdGhlIEdOVSBjb25maWcuZ3Vlc3MgLyBjb25maWcuc3ViIGludG8gYSBkaXJlY3RvcnkgdHJlZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vY29uZmlnLmd1ZXNzO2VuZGxpbmU9Mzk7bWQ1PWI3OWE0NjYzNDc1ZjRkNzI0ODQ2NDYzMjc3ODE3ZTBkIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL2dudS1jb25maWcvZ251LWNvbmZpZy0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8vY29uZmlnLWd1ZXNzLXVjbGliYy5wYXRjaCBcCisJICAgZmlsZTovL211c2wtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nbnUtY29uZmlnaXplLmluIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmNmY2E1YTJiYjM5ZWRhZDRhYWU1YTY1ZWZjODQwOTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDRmOTlhOGU3NmYzZThlNGZlYzBiYjVhZDQ3NjJmOGU0NDM2NjE2ODU1NGNlNjZjYjg1YWZiZTJlZDNlZmQ4YiIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZyBcCisJCSAgICR7RH0ke2JpbmRpcn0KKwljYXQgJHtXT1JLRElSfS9nbnUtY29uZmlnaXplLmluIHwgXAorCQlzZWQgLWUgJ3MsQGdudS1jb25maWdkaXJALCR7ZGF0YWRpcn0vZ251LWNvbmZpZyxnJyBcCisJCSAgICAtZSAncyxAYXV0b200dGVfcGVybGxpYmRpckAsJHtkYXRhZGlyfS9hdXRvY29uZixnJyA+ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCSMgSW4gdGhlIG5hdGl2ZSBjYXNlIHdlIHdhbnQgdGhlIHN5c3RlbSBwZXJsIGFzIHBlcmwtbmF0aXZlIGNhbid0IGhhdmUgYnVpbHQgeWV0CisJaWYgWyAiJHtQTn0iICE9ICJnbnUtY29uZmlnLW5hdGl2ZSIgLWEgIiR7UE59IiAhPSAibmF0aXZlc2RrLWdudS1jb25maWciIF07IHRoZW4KKwkJc2VkIC1pIC1lICdzLC91c3IvYmluL2Vudiwke2JpbmRpcn0vZW52LGcnICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWZpCisJY2htb2QgNzU1ICR7RH0ke2JpbmRpcn0vZ251LWNvbmZpZ2l6ZQorCWluc3RhbGwgLW0gMDY0NCBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiAke0R9JHtkYXRhZGlyfS9nbnUtY29uZmlnLworfQorCitQQUNLQUdFUyA9ICIke1BOfSIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSAke2RhdGFkaXJ9L2dudS1jb25maWciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2dudS1jb25maWcvZ251LWNvbmZpZ19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q1ZjJiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9nbnUtY29uZmlnL2dudS1jb25maWdfZ2l0LmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiZ251LWNvbmZpZ2l6ZSIKK0RFU0NSSVBUSU9OID0gIlRvb2wgdGhhdCBpbnN0YWxscyB0aGUgR05VIGNvbmZpZy5ndWVzcyAvIGNvbmZpZy5zdWIgaW50byBhIGRpcmVjdG9yeSB0cmVlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMLTMuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NvbmZpZy5ndWVzcztiZWdpbmxpbmU9NztlbmRsaW5lPTI3O21kNT05YmFjOGIxNzQzYzIyNDBhZTA3Y2NlNmU1NDZhYzJmMiIKKworREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicGVybC1uYXRpdmUtcnVudGltZSIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworU1JDUkVWID0gImI1NzZmYTg3YzE0MGI4MjQ0NjZlZjE2MzhlOTQ1ZTg3ZGM1YzAzNDMiCitQViA9ICIyMDE1MDcyOCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuc3YuZ251Lm9yZy9jb25maWcuZ2l0IFwKKyAgICAgICAgICAgZmlsZTovL2dudS1jb25maWdpemUuaW4iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2dudS1jb25maWcgXAorCQkgICAke0R9JHtiaW5kaXJ9CisJY2F0ICR7V09SS0RJUn0vZ251LWNvbmZpZ2l6ZS5pbiB8IFwKKwkJc2VkIC1lICdzLEBnbnUtY29uZmlnZGlyQCwke2RhdGFkaXJ9L2dudS1jb25maWcsZycgXAorCQkgICAgLWUgJ3MsQGF1dG9tNHRlX3BlcmxsaWJkaXJALCR7ZGF0YWRpcn0vYXV0b2NvbmYsZycgPiAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwkjIEluIHRoZSBuYXRpdmUgY2FzZSB3ZSB3YW50IHRoZSBzeXN0ZW0gcGVybCBhcyBwZXJsLW5hdGl2ZSBjYW4ndCBoYXZlIGJ1aWx0IHlldAorCWlmIFsgIiR7UE59IiAhPSAiZ251LWNvbmZpZy1uYXRpdmUiIC1hICIke1BOfSIgIT0gIm5hdGl2ZXNkay1nbnUtY29uZmlnIiBdOyB0aGVuCisJCXNlZCAtaSAtZSAncywvdXNyL2Jpbi9lbnYsJHtiaW5kaXJ9L2VudixnJyAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwlmaQorCWNobW9kIDc1NSAke0R9JHtiaW5kaXJ9L2dudS1jb25maWdpemUKKwlpbnN0YWxsIC1tIDA2NDQgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgJHtEfSR7ZGF0YWRpcn0vZ251LWNvbmZpZy8KK30KKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtkYXRhZGlyfS9nbnUtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2FhcmNoNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3ODhiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9hcm1fYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitndWlsZTogYWRkIGFhcmNoNjQgcmVjb2duaXRpb24KKworQXNzdW1lIGxpdHRsZS1lbmRpYW4uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBqb2Uuc2xhdGVyQHdpbmRyaXZlci5jb20KKworLS0tIGEvbW9kdWxlL3N5c3RlbS9iYXNlL3RhcmdldC5zY20KKysrKyBiL21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCitAQCAtNzAsNiArNzAsOCBAQAorICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInNwYXJjNjQiICJwb3dlcnBjIiAicG93ZXJwYzY0IiAic3B1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IikpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCisrICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hYXJjaDY0IiBjcHUpCisrICAgICAgICAgICAgIChlbmRpYW5uZXNzIGxpdHRsZSkpCisgICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmViIiBjcHUpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCisgICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKiIgY3B1KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9lbmRpYW5uZXNzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2FybV9lbmRpYW5uZXNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDMyOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvYXJtX2VuZGlhbm5lc3MucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorU3VwcG9ydCBmb3JtIEFSTSBlbmRpYW5uZXNzCisKK0ZpeGVzIFlvY3RvIGJ1ZyMgMjcyOQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd1aWxlLTIuMC41L21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjUub3JpZy9tb2R1bGUvc3lzdGVtL2Jhc2UvdGFyZ2V0LnNjbQkyMDEyLTAxLTI0IDAzOjA2OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGd1aWxlLTIuMC41L21vZHVsZS9zeXN0ZW0vYmFzZS90YXJnZXQuc2NtCTIwMTItMDctMTIgMTM6MDU6NDQuMzcyMzY0MTAzIC0wNzAwCitAQCAtNzAsNyArNzAsOSBAQAorICAgICAgICAgICAgICgobWVtYmVyIGNwdSAnKCJzcGFyYyIgInNwYXJjNjQiICJwb3dlcnBjIiAicG93ZXJwYzY0IiAic3B1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaXBzIiAibWlwczY0IikpCisgICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCistICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmVsIiBjcHUpCisrICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKmViIiBjcHUpCisrICAgICAgICAgICAgIChlbmRpYW5uZXNzIGJpZykpCisrICAgICAgICAgICAgKChzdHJpbmctbWF0Y2ggIl5hcm0uKiIgY3B1KQorICAgICAgICAgICAgICAoZW5kaWFubmVzcyBsaXR0bGUpKQorICAgICAgICAgICAgIChlbHNlCisgICAgICAgICAgICAgIChlcnJvciAidW5rbm93biBDUFUgZW5kaWFubmVzcyIgY3B1KSkpKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2RlYmlhbi8wMDAyLU1hcmstVW51c2VkLW1vZHVsZXMtYXJlLXJlbW92ZWQtZ2MtdGVzdC1hcy11bnJlc29sdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyMzhhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitTaWduZWQtT2ZmLWJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitGcm9tIGU1MmJmY2RiYWNhNWRjZTQ5ODY3OGQ4ZjUxMjM4MWUzZTM5YTQwNjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2IgQnJvd25pbmcgPHJsYkBkZWZhdWx0dmFsdWUub3JnPgorRGF0ZTogU3VuLCAxOCBNYXIgMjAxMiAxMTo0MDo1NSAtMDUwMAorU3ViamVjdDogTWFyayAiVW51c2VkIG1vZHVsZXMgYXJlIHJlbW92ZWQiIGdjIHRlc3QgYXMgdW5yZXNvbHZlZC4KKworQXMgcGVyIGRpc2N1c3Npb24gd2l0aCB1cHN0cmVhbSwgbWFyayB0aGlzIHRlc3QgYXMgdW5yZXNvbHZlZCBzaW5jZSBpdAorbWF5IHByb2R1Y2UgZmFsc2UgbmVnYXRpdmVzLCBkZXBlbmRpbmcgb24gdGhlIGJlaGF2aW9yL3RpbWluZyBvZiB0aGUKK2dhcmJhZ2UgY29sbGVjdG9yLgorLS0tCisgdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0IHwgICAxMSArKysrKystLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0IGIvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CitpbmRleCBhOTY5NzUyLi44YzhlMTNlIDEwMDY0NAorLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CisrKysgYi90ZXN0LXN1aXRlL3Rlc3RzL2djLnRlc3QKK0BAIC04NCwxMSArODQsMTMgQEAKKyAgICAgICA7OyBvbmUgZ2Mgcm91bmQuIG5vdCBzdXJlIHdoeS4KKyAKKyAgICAgICAobWF5YmUtZ2MtZmxha2luZXNzCistICAgICAgICg9IChsZXQgbHAgKChpIDApKQorLSAgICAgICAgICAgIChpZiAoZ3VhcmQpCistICAgICAgICAgICAgICAgIChscCAoMSsgaSkpCistICAgICAgICAgICAgICAgIGkpKQorLSAgICAgICAgICB0b3RhbCkpKSkKKysgICAgICAgKG9yICg9IChsZXQgbHAgKChpIDApKQorKyAgICAgICAgICAgICAgICAoaWYgKGd1YXJkKQorKyAgICAgICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKysgICAgICAgICAgICAgICAgICAgIGkpKQorKyAgICAgICAgICAgICAgdG90YWwpCisrICAgICAgICAgICAodGhyb3cgJ3VucmVzb2x2ZWQpKSkpKQorKworIAorICAgKHBhc3MtaWYgIkxleGljYWwgdmFycyBhcmUgY29sbGVjdGFibGUiCisgICAgIChsZXQgKChsIChjb21waWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9kZWJpYW4vMDAwMy1NYXJrLW11dGV4LXdpdGgtb3duZXItbm90LXJldGFpbmVkLXRocmVhZHMtdGVzdC1hcy11LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YmUzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZGViaWFuLzAwMDMtTWFyay1tdXRleC13aXRoLW93bmVyLW5vdC1yZXRhaW5lZC10aHJlYWRzLXRlc3QtYXMtdS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2RlYmlhbiBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworRnJvbSA4NDg1NDMwOTFkNTVkZGRiNTRhODU2MTIxNTU5NjQ1MDZkNzEyODUyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4KK0RhdGU6IFN1biwgMTggTWFyIDIwMTIgMTM6Mjg6MjQgLTA1MDAKK1N1YmplY3Q6IE1hcmsgIm11dGV4IHdpdGggb3duZXIgbm90IHJldGFpbmVkIiB0aHJlYWRzIHRlc3QgYXMgdW5yZXNvbHZlZC4KKworQXMgcGVyIGRpc2N1c3Npb24gd2l0aCB1cHN0cmVhbSwgbWFyayB0aGlzIHRlc3QgYXMgdW5yZXNvbHZlZCBzaW5jZSBpdAorbWF5IHByb2R1Y2UgZmFsc2UgbmVnYXRpdmVzLCBkZXBlbmRpbmcgb24gdGhlIGJlaGF2aW9yL3RpbWluZyBvZiB0aGUKK2dhcmJhZ2UgY29sbGVjdG9yLgorLS0tCisgdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QgfCAgICA2ICsrKystLQorIDEgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdGVzdC1zdWl0ZS90ZXN0cy90aHJlYWRzLnRlc3QgYi90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAoraW5kZXggODVhN2MzOC4uNTA4OTljYiAxMDA2NDQKKy0tLSBhL3Rlc3Qtc3VpdGUvdGVzdHMvdGhyZWFkcy50ZXN0CisrKysgYi90ZXN0LXN1aXRlL3Rlc3RzL3RocmVhZHMudGVzdAorQEAgLTQxNCw4ICs0MTQsMTAgQEAKKyAKKyAgICAgICAgICAgICAoZ2MpIChnYykKKyAgICAgICAgICAgICAobGV0ICgobSAoZykpKQorLSAgICAgICAgICAgICAgKGFuZCAobXV0ZXg/IG0pCistICAgICAgICAgICAgICAgICAgIChlcT8gKG11dGV4LW93bmVyIG0pIChjdXJyZW50LXRocmVhZCkpKSkpKSkKKysgICAgICAgICAgICAgIChvcgorKyAgICAgICAgICAgICAgIChhbmQgKG11dGV4PyBtKQorKyAgICAgICAgICAgICAgICAgICAgKGVxPyAobXV0ZXgtb3duZXIgbSkgKGN1cnJlbnQtdGhyZWFkKSkpCisrICAgICAgICAgICAgICAgKHRocm93ICd1bnJlc29sdmVkKSkpKSkpCisgCisgICAgICAgOzsKKyAgICAgICA7OyBtdXRleCBsb2NrIGxldmVscwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWRjMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2d1aWxlXzIuMC42X2ZpeF9zZWRfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZml4ZXMgc2VkIGlzc3VlIHdoZW4gcHJlZml4IGhhcyAvIGluIGl0LCBsaWtlIC91c3IvbG9jYWwKKworYXV0b3JlY29uZiBlcnJvciBhdm9pZGVkOgorfCBzZWQ6IC1lIGV4cHJlc3Npb24gIzEsIGNoYXIgOTogdW5rbm93biBvcHRpb24gdG8gYHMnCit8IGNvbmZpZ3VyZS5hYzozOTogZXJyb3I6IEFDX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHBhY2thZ2UgYW5kIHZlcnNpb24gYXJndW1lbnRzCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzAxCisKK0luZGV4OiBndWlsZS0yLjAuNS9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3VpbGUtMi4wLjUub3JpZy9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCisrKysgZ3VpbGUtMi4wLjUvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorQEAgLTE4Nyw3ICsxODcsNyBAQCBlbHNlCisgICAgIHY9VU5LTk9XTgorIGZpCisgCistdj1gZWNobyAiJHYiIHxzZWQgInMvXiRwcmVmaXgvLyJgCisrdj1gZWNobyAiJHYiIHxzZWQgInMjXiRwcmVmaXgjIyJgCisgCisgIyBUZXN0IHdoZXRoZXIgdG8gYXBwZW5kIHRoZSAiLWRpcnR5IiBzdWZmaXggb25seSBpZiB0aGUgdmVyc2lvbgorICMgc3RyaW5nIHdlJ3JlIHVzaW5nIGNhbWUgZnJvbSBnaXQuICBJLmUuLCBza2lwIHRoZSB0ZXN0IGlmIGl0J3MgIlVOS05PV04iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGI5ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvbGliZ3VpbGUtTWFrZWZpbGUuYW0taG9vay5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDljNGUxMjBhN2E4N2RiMzRkMjJhNTA4ODNhNWE1MjUxNzBiNDgwZDcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgNiBKYW4gMjAxNSAyMzoxMDo1MSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBsaWJndWlsZS9NYWtlZmlsZS5hbTogaW5zdGFsbC1kYXRhLWhvb2sgLT4gaW5zdGFsbC1leGVjLWhvb2sKKworSXQgbWF5IGluc3RhbGwgc3VjaCBhIGZpbGU6CisvdXNyL2xpYjY0L2xpYmd1aWxlLTIuMCotZ2RiLnNjbQorCitUaGlzIGlzIGJlY2F1c2Ugd2hlbiB0aGVyZSBpcyBubyBmaWxlIGluIHRoZSBkaXJlY3Rvcnk6Citmb3IgZiBpbiBsaWJndWlsZS0yLjAqOyBkbworICAgIFtzbmlwXQorZG9uZQorCitUaGUgZiB3b3VsZCBiZSBsaWJndWlsZS0yLjAqIGl0c2VsZiwgdXNlIGluc3RhbGwtZXhlYy1ob29rIHdpbGwgZml4IHRoZQorcHJvYmxlbSBzaW5jZSBpdCBkZXBlbmRzIG9uIGluc3RhbGwtbGliTFRMSUJSQVJJRVMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmd1aWxlL01ha2VmaWxlLmFtIHwgICAgNCArLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ3VpbGUvTWFrZWZpbGUuYW0gYi9saWJndWlsZS9NYWtlZmlsZS5hbQoraW5kZXggNWRlY2Q5OS4uNTI2NDViNyAxMDA2NDQKKy0tLSBhL2xpYmd1aWxlL01ha2VmaWxlLmFtCisrKysgYi9saWJndWlsZS9NYWtlZmlsZS5hbQorQEAgLTQ0NiwxMCArNDQ2LDggQEAgRVhUUkFfbGliZ3VpbGVfQEdVSUxFX0VGRkVDVElWRV9WRVJTSU9OQF9sYV9TT1VSQ0VTID0gX3NjbS5oCQlcCisgIyMgZGVsZXRlIGd1aWxlLXNuYXJmLmF3ayBmcm9tIHRoZSBpbnN0YWxsYXRpb24gYmluZGlyLCBpbiBjYXNlIGl0J3MKKyAjIyBsaW5nZXJpbmcgdGhlcmUgZHVlIHRvIGFuIGVhcmxpZXIgZ3VpbGUgdmVyc2lvbiBub3QgaGF2aW5nIGJlZW4KKyAjIyB3aXBlZCBvdXQuCistaW5zdGFsbC1leGVjLWhvb2s6CisraW5zdGFsbC1leGVjLWhvb2s6IGxpYmd1aWxlLTIuMC1nZGIuc2NtCisgCXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvZ3VpbGUtc25hcmYuYXdrCistCistaW5zdGFsbC1kYXRhLWhvb2s6IGxpYmd1aWxlLTIuMC1nZGIuc2NtCisgCUAkKE1LRElSX1ApICQoREVTVERJUikkKGxpYmRpcikKKyAjIyBXZSB3YW50IHRvIGluc3RhbGwgbGliZ3VpbGUtMi4wLWdkYi5zY20gYXMgU09NRVRISU5HLWdkYi5zY20uCisgIyMgU09NRVRISU5HIGlzIHRoZSBmdWxsIG5hbWUgb2YgdGhlIGZpbmFsIGxpYnJhcnkuICBXZSB3YW50IHRvIGlnbm9yZQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9saWJndWlsZS1WTS1BU01fTVVMLWZvci1BUk0tQWRkLWVhcmx5Y2xvYmJlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTAwNTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0Zyb20gYTg1Yzc4ZWExMzkzOTg1ZmRiNmU2Njc4ZGVhMTkxMzVjNTUzZDM0MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmsgSCBXZWF2ZXIgPG1od0BuZXRyaXMub3JnPgorRGF0ZTogRnJpLCAxOSBTZXAgMjAxNCAyMToxODowOSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBWTTogQVNNX01VTCBmb3IgQVJNOiBBZGQgZWFybHljbG9iYmVyIGNvbnN0cmFpbnQgdG8gdGhlIFNNVUxMCisgb3V0cHV0cy4KKworUmVwb3J0ZWQgYnkgUm9iIEJyb3duaW5nIDxybGJAZGVmYXVsdHZhbHVlLm9yZz4uCisKKyogbGliZ3VpbGUvdm0taS1zY2hlbWUuYyAoQVNNX01VTClbQVJNXTogQWRkIGVhcmx5Y2xvYmJlciAoJikgY29uc3RyYWludAorICB0byB0aGUgU01VTEwgb3V0cHV0IHJlZ2lzdGVycy4KKworQXV0aG9yOiBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGliZ3VpbGUvdm0taS1zY2hlbWUuYyB8IDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ3VpbGUvdm0taS1zY2hlbWUuYyBiL2xpYmd1aWxlL3ZtLWktc2NoZW1lLmMKK2luZGV4IDU4N2FhOTUuLjE2MmVmYWIgMTAwNjQ0CistLS0gYS9saWJndWlsZS92bS1pLXNjaGVtZS5jCisrKysgYi9saWJndWlsZS92bS1pLXNjaGVtZS5jCitAQCAtMSw1ICsxLDQgQEAKKy0vKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsCistICogICAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKy8qIENvcHlyaWdodCAoQykgMjAwMSwgMjAwOS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAqIAorICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK0BAIC0zNjMsNyArMzYyLDcgQEAgVk1fREVGSU5FX0ZVTkNUSU9OICgxNDksIGdlLCAiZ2U/IiwgMikKKyAgICAgICB7CQkJCQkJCQkJXAorIAlzY21fdF9zaWduZWRfYml0cyBybG8sIHJoaTsJCQkJCVwKKyAJYXNtICgic211bGwgJTAsICUxLCAlMiwgJTNcbiIJCQkJCVwKKy0JICAgICA6ICI9ciIgKHJsbyksICI9ciIgKHJoaSkJCQkJCVwKKysJICAgICA6ICI9JnIiIChybG8pLCAiPSZyIiAocmhpKQkJCQkJXAorIAkgICAgIDogInIiIChTQ01fVU5QQUNLICh4KSAtIHNjbV90YzJfaW50KSwJCQlcCisgCSAgICAgICAiciIgKFNDTV9JX0lOVU0gKHkpKSk7CQkJCQlcCisgCWlmIChTQ01fTElLRUxZIChTQ01fU1JTIChybG8sIDMxKSA9PSByaGkpKQkJCVwKKy0tIAorMi4zLjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLTY0Yml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTMxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvcGVuc3VzZSBwYXRjaF0KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworSW5kZXg6IGd1aWxlLTIuMC4zL2xpYmd1aWxlL2hhc2guYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvbGliZ3VpbGUvaGFzaC5jCTIwMTEtMDctMDYgMTU6NDk6NTkuMDAwMDAwMDAwIC0wNzAwCisrKysgZ3VpbGUtMi4wLjMvbGliZ3VpbGUvaGFzaC5jCTIwMTItMDEtMTMgMjE6NDk6NDMuMzMyODQ0ODg0IC0wODAwCitAQCAtMjcwLDcgKzI3MCw3IEBAIHNjbV9oYXNoZXIoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuLCBzaXoKKyB1bnNpZ25lZCBsb25nCisgc2NtX2loYXNocSAoU0NNIG9iaiwgdW5zaWduZWQgbG9uZyBuKQorIHsKKy0gIHJldHVybiAoU0NNX1VOUEFDSyAob2JqKSA+PiAxKSAlIG47CisrICByZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopID4+IDEpICUgbjsKKyB9CisgCisgCitAQCAtMzA2LDcgKzMwNiw3IEBAIHNjbV9paGFzaHYgKFNDTSBvYmosIHVuc2lnbmVkIGxvbmcgbikKKyAgIGlmIChTQ01fTlVNUChvYmopKQorICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHNjbV9oYXNoZXIob2JqLCBuLCAxMCk7CisgICBlbHNlCistICAgIHJldHVybiBTQ01fVU5QQUNLIChvYmopICUgbjsKKysgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSBTQ01fVU5QQUNLIChvYmopICUgbjsKKyB9CisgCisgCitJbmRleDogZ3VpbGUtMi4wLjMvbGliZ3VpbGUvc3RydWN0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndWlsZS0yLjAuMy5vcmlnL2xpYmd1aWxlL3N0cnVjdC5jCTIwMTEtMDctMDYgMTU6NTA6MDAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ3VpbGUtMi4wLjMvbGliZ3VpbGUvc3RydWN0LmMJMjAxMi0wMS0xMyAyMTo0OTo0My4zMzI4NDQ4ODQgLTA4MDAKK0BAIC05NDIsNyArOTQyLDcgQEAgc2NtX3N0cnVjdF9paGFzaHEgKFNDTSBvYmosIHVuc2lnbmVkIGxvbgorIHsKKyAgIC8qIFRoZSBsZW5ndGggb2YgdGhlIGhhc2ggdGFibGUgc2hvdWxkIGJlIGEgcmVsYXRpdmUgcHJpbWUgaXQncyBub3QKKyAgICAgIG5lY2Vzc2FyeSB0byBzaGlmdCBkb3duIHRoZSBhZGRyZXNzLiAgKi8KKy0gIHJldHVybiBTQ01fVU5QQUNLIChvYmopICUgbjsKKysgIHJldHVybiAodW5zaWduZWQgbG9uZykgU0NNX1VOUEFDSyAob2JqKSAlIG47CisgfQorIAorIFNDTV9ERUZJTkUgKHNjbV9zdHJ1Y3RfdnRhYmxlX25hbWUsICJzdHJ1Y3QtdnRhYmxlLW5hbWUiLCAxLCAwLCAwLCAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2ZpbGVzL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwMTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy9vcGVuc3VzZS9ndWlsZS10dXJuLW9mZi1nYy10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbnN1c2UgcGF0Y2hdCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK1NlZSBodHRwOi8vZGViYnVncy5nbnUub3JnL2NnaS9idWdyZXBvcnQuY2dpP2J1Zz0xMDA5Ngord2h5IHRoaXMgdGVzdCBpcyB0dXJuZWQgb2ZmLgorSW5kZXg6IGd1aWxlLTIuMC4zL3Rlc3Qtc3VpdGUvdGVzdHMvZ2MudGVzdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd1aWxlLTIuMC4zLm9yaWcvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CTIwMTEtMTAtMTUgMDk6MzQ6NDAuMDAwMDAwMDAwIC0wNzAwCisrKysgZ3VpbGUtMi4wLjMvdGVzdC1zdWl0ZS90ZXN0cy9nYy50ZXN0CTIwMTItMDEtMTMgMjE6NTI6MTAuMjgyNTQwMzU1IC0wODAwCitAQCAtNjUsMjMgKzY1LDIzIEBACisgICAgICAgZm9vKSkpCisgCisgCistKHdpdGgtdGVzdC1wcmVmaXggImdjIgorLSAgKHBhc3MtaWYgIlVudXNlZCBtb2R1bGVzIGFyZSByZW1vdmVkIgorLSAgICAobGV0KiAoKGd1YXJkIChtYWtlLWd1YXJkaWFuKSkKKy0gICAgICAgICAgICh0b3RhbCAxMDAwKSkKKy0KKy0gICAgICAoZm9yLWVhY2ggKGxhbWJkYSAoeCkgKGd1YXJkIChtYWtlLW1vZHVsZSkpKSAoaW90YSB0b3RhbCkpCisrOzsod2l0aC10ZXN0LXByZWZpeCAiZ2MiCisrOzsgIChwYXNzLWlmICJVbnVzZWQgbW9kdWxlcyBhcmUgcmVtb3ZlZCIKKys7OyAgICAobGV0KiAoKGd1YXJkIChtYWtlLWd1YXJkaWFuKSkKKys7OyAgICAgICAgICAgKHRvdGFsIDEwMDApKQorKzs7CisrOzsgICAgICAoZm9yLWVhY2ggKGxhbWJkYSAoeCkgKGd1YXJkIChtYWtlLW1vZHVsZSkpKSAoaW90YSB0b3RhbCkpCisgCisgICAgICAgOzsgQXZvaWQgZmFsc2UgcmVmZXJlbmNlcyB0byB0aGUgbW9kdWxlcyBvbiB0aGUgc3RhY2suCistICAgICAgKHN0YWNrLWNsZWFudXAgMjApCisrOzsgICAgICAoc3RhY2stY2xlYW51cCAyMCkKKyAKKy0gICAgICAoZ2MpCistICAgICAgKGdjKSA7OyB0d2ljZTogaGF2ZSB0byBraWxsIHRoZSB3ZWFrIHZlY3RvcnMuCistICAgICAgKGdjKSA7OyB0aHJpY2U6IGJlY2F1c2UgdGhlIHRlc3QgZG9lc24ndCBzdWNjZWVkIHdpdGggb25seQorKzs7ICAgICAgKGdjKQorKzs7ICAgICAgKGdjKSA7OyB0d2ljZTogaGF2ZSB0byBraWxsIHRoZSB3ZWFrIHZlY3RvcnMuCisrOzsgICAgICAoZ2MpIDs7IHRocmljZTogYmVjYXVzZSB0aGUgdGVzdCBkb2Vzbid0IHN1Y2NlZWQgd2l0aCBvbmx5CisgICAgICAgICAgICA7OyBvbmUgZ2Mgcm91bmQuIG5vdCBzdXJlIHdoeS4KKyAKKy0gICAgICAoPSAobGV0IGxwICgoaSAwKSkKKy0gICAgICAgICAgIChpZiAoZ3VhcmQpCistICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKy0gICAgICAgICAgICAgICBpKSkKKy0gICAgICAgICB0b3RhbCkpKSkKKys7OyAgICAgICg9IChsZXQgbHAgKChpIDApKQorKzs7ICAgICAgICAgICAoaWYgKGd1YXJkKQorKzs7ICAgICAgICAgICAgICAgKGxwICgxKyBpKSkKKys7OyAgICAgICAgICAgICAgIGkpKQorKzs7ICAgICAgICAgdG90YWwpKSkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZmlsZXMvd29ya2Fyb3VuZC1pY2Utc3NhLWNvcnJ1cHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNDgzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsZS9maWxlcy93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaApAQCAtMCwwICsxLDYwIEBACitsaWJndWlsZS92bS1pLXN5c3RlbS5jOiB3b3JrYXJvdW5kIGljZSBzc2EgY29ycnVwdGlvbiB3aGlsZSBjb21waWxpbmcgd2l0aCBvcHRpb24gLWcgLU8KKworV2hpbGUgY29tcGlsaW5nIHdpdGggb3B0aW9uIC1nIC1PLCB0aGVyZSB3YXMgYSBzc2EgY29ycnVwdGlvbjoKKy4uCitVbmFibGUgdG8gY29hbGVzY2Ugc3NhX25hbWVzIDQ4IGFuZCAzNDc2IHdoaWNoIGFyZSBtYXJrZWQgYXMgTVVTVCBDT0FMRVNDRS4KK3NwXzQ4KGFiKSBhbmQgIHNwXzM0NzYoYWIpCitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0tZW5naW5lLmM6IEluIGZ1bmN0aW9uICd2bV9kZWJ1Z19lbmdpbmUnOgorZ3VpbGUtMi4wLjExL2xpYmd1aWxlL3ZtLmM6NjczOjE5OiBpbnRlcm5hbCBjb21waWxlciBlcnJvcjogU1NBIGNvcnJ1cHRpb24KKyAjZGVmaW5lIFZNX05BTUUgICB2bV9kZWJ1Z19lbmdpbmUKKyAgICAgICAgICAgICAgICAgICBeCitndWlsZS0yLjAuMTEvbGliZ3VpbGUvdm0tZW5naW5lLmM6Mzk6MTogbm90ZTogaW4gZXhwYW5zaW9uIG9mIG1hY3JvICdWTV9OQU1FJworIFZNX05BTUUgKFNDTSB2bSwgU0NNIHByb2dyYW0sIFNDTSAqYXJndiwgaW50IG5hcmdzKQorIF4KK1BsZWFzZSBzdWJtaXQgYSBmdWxsIGJ1ZyByZXBvcnQsCit3aXRoIHByZXByb2Nlc3NlZCBzb3VyY2UgaWYgYXBwcm9wcmlhdGUuCitTZWUgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+IGZvciBpbnN0cnVjdGlvbnMuCisuLi4KKworVHdlYWsgbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyB0byBhZGQgYm91bmRhcnkgdmFsdWUgY2hlY2sgdG8gd29ya2Fyb3VuZCBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYmd1aWxlL3ZtLWktc3lzdGVtLmMgfCAyMCArKysrKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ3VpbGUvdm0taS1zeXN0ZW0uYyBiL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMKKy0tLSBhL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMKKysrKyBiL2xpYmd1aWxlL3ZtLWktc3lzdGVtLmMKK0BAIC02MjUsMTAgKzYyNSwyMiBAQCBWTV9ERUZJTkVfSU5TVFJVQ1RJT04gKDQ3LCBiaW5kX29wdGlvbmFsc19zaHVmZmxlLCAiYmluZC1vcHRpb25hbHMvc2h1ZmZsZSIsIDYsCisgICAvKiBub3cgc2h1ZmZsZSB1cCwgZnJvbSB3YWxrIHRvIG50b3RhbCAqLworICAgeworICAgICBzY21fdF9wdHJkaWZmIG5zaHVmID0gc3AgLSB3YWxrICsgMSwgaTsKKy0gICAgc3AgPSAoZnAgLSAxKSArIG50b3RhbCArIG5zaHVmOworLSAgICBDSEVDS19PVkVSRkxPVyAoKTsKKy0gICAgZm9yIChpID0gMDsgaSA8IG5zaHVmOyBpKyspCistICAgICAgc3BbLWldID0gd2Fsa1tuc2h1Zi1pLTFdOworKyAgICAvKiBjaGVjayB0aGUgdmFsdWUgb2YgbnNodWYgdG8gd29ya2Fyb3VuZCBpY2Ugc3NhIGNvcnJ1cHRpb24gKi8KKysgICAgLyogd2hpbGUgY29tcGlsaW5nIHdpdGggLU8gLWcgKi8KKysgICAgaWYgKG5zaHVmID4gMCkKKysgICAgeworKyAgICAgIHNwID0gKGZwIC0gMSkgKyBudG90YWwgKyBuc2h1ZjsKKysgICAgICBDSEVDS19PVkVSRkxPVyAoKTsKKysgICAgICBmb3IgKGkgPSAwOyBpIDwgbnNodWY7IGkrKykKKysgICAgICAgIHNwWy1pXSA9IHdhbGtbbnNodWYtaS0xXTsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICBzcCA9IChmcCAtIDEpICsgbnRvdGFsICsgbnNodWY7CisrICAgICAgQ0hFQ0tfT1ZFUkZMT1cgKCk7CisrICAgICAgZm9yIChpID0gMDsgaSA8IG5zaHVmOyBpKyspCisrICAgICAgICBzcFstaV0gPSB3YWxrW25zaHVmLWktMV07CisrICAgIH0KKyAgIH0KKyAgIC8qIGFuZCBmaWxsIG9wdGlvbmFscyAmIGtleXdvcmQgYXJncyB3aXRoIFNDTV9VTkRFRklORUQgKi8KKyAgIHdoaWxlICh3YWxrIDw9IChmcCAtIDEpICsgbnRvdGFsKQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbGUvZ3VpbGVfMi4wLjExLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODY5Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWxlL2d1aWxlXzIuMC4xMS5iYgpAQCAtMCwwICsxLDExMSBAQAorU1VNTUFSWSA9ICJHdWlsZSBpcyB0aGUgR05VIFViaXF1aXRvdXMgSW50ZWxsaWdlbnQgTGFuZ3VhZ2UgZm9yIEV4dGVuc2lvbnMiCitERVNDUklQVElPTiA9ICJHdWlsZSBpcyB0aGUgR05VIFViaXF1aXRvdXMgSW50ZWxsaWdlbnQgTGFuZ3VhZ2UgZm9yIEV4dGVuc2lvbnMsXAorIHRoZSBvZmZpY2lhbCBleHRlbnNpb24gbGFuZ3VhZ2UgZm9yIHRoZSBHTlUgb3BlcmF0aW5nIHN5c3RlbS5cCisgR3VpbGUgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIGhlbHAgcHJvZ3JhbW1lcnMgY3JlYXRlIGZsZXhpYmxlIGFwcGxpY2F0aW9ucy5cCisgVXNpbmcgR3VpbGUgaW4gYW4gYXBwbGljYXRpb24gYWxsb3dzIHRoZSBhcHBsaWNhdGlvbidzIGZ1bmN0aW9uYWxpdHkgdG8gYmVcCisgZXh0ZW5kZWQgYnkgdXNlcnMgb3Igb3RoZXIgcHJvZ3JhbW1lcnMgd2l0aCBwbHVnLWlucywgbW9kdWxlcywgb3Igc2NyaXB0cy5cCisgR3VpbGUgcHJvdmlkZXMgd2hhdCBtaWdodCBiZSBkZXNjcmliZWQgYXMgJ3ByYWN0aWNhbCBzb2Z0d2FyZSBmcmVlZG9tLCdcCisgbWFraW5nIGl0IHBvc3NpYmxlIGZvciB1c2VycyB0byBjdXN0b21pemUgYW4gYXBwbGljYXRpb24gdG8gbWVldCB0aGVpclwKKyBuZWVkcyB3aXRob3V0IGRpZ2dpbmcgaW50byB0aGUgYXBwbGljYXRpb24ncyBpbnRlcm5hbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ3VpbGUvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2d1aWxlL2d1aWxlLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWJpYW4vMDAwMi1NYXJrLVVudXNlZC1tb2R1bGVzLWFyZS1yZW1vdmVkLWdjLXRlc3QtYXMtdW5yZXNvbHZlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi8wMDAzLU1hcmstbXV0ZXgtd2l0aC1vd25lci1ub3QtcmV0YWluZWQtdGhyZWFkcy10ZXN0LWFzLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb3BlbnN1c2UvZ3VpbGUtNjRiaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3VpbGVfMi4wLjZfZml4X3NlZF9lcnJvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hcm1fZW5kaWFubmVzcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hcm1fYWFyY2g2NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly93b3JrYXJvdW5kLWljZS1zc2EtY29ycnVwdGlvbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9saWJndWlsZS1NYWtlZmlsZS5hbS1ob29rLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmd1aWxlLVZNLUFTTV9NVUwtZm9yLUFSTS1BZGQtZWFybHljbG9iYmVyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCisjICAgICAgICAgICBmaWxlOi8vZGViaWFuLzAwMDEtQ2hhbmdlLWd1aWxlLXRvLWd1aWxlLVguWS1mb3ItaW5mby1wYWdlcy5wYXRjaAorIyAgICAgICAgICAgZmlsZTovL29wZW5zdXNlL2d1aWxlLXR1cm4tb2ZmLWdjLXRlc3QucGF0Y2gKKworU1JDX1VSSVttZDVzdW1dID0gIjAzZjFiY2UxYTQ5ODMwNzZkOTU1MDAzNDcyMzA2YTEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlZDBhNGE2ZGI0ZTMxMGNiZGZlYjM2MTNmYTZmODZmZGRjOTFlZjYyNGMxZTNmODkzN2E2MzA0YzY5MTAzZTIiCisKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdGV4aW5mbworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0RFUEVORFMgPSAibGlidW5pc3RyaW5nIGJkd2djIGdtcCBsaWJ0b29sIGxpYmZmaSBuY3Vyc2VzIHJlYWRsaW5lIgorIyBhZGQgZ3VpbGUtbmF0aXZlIG9ubHkgdG8gdGhlIHRhcmdldCByZWNpcGUncyBERVBFTkRTCitERVBFTkRTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGd1aWxlLW5hdGl2ZSBsaWJhdG9taWMtb3BzIgorCitSREVQRU5EU18ke1BOfV9hcHBlbmRfbGliYy1nbGliY19jbGFzcy10YXJnZXQgPSAiZ2xpYmMtZ2NvbnYtaXNvODg1OS0xIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QFsnLS13aXRob3V0LWxpYmx0ZGwtcHJlZml4IC0td2l0aG91dC1saWJnbXAtcHJlZml4IC0td2l0aG91dC1saWJyZWFkbGluZS1wcmVmaXgnLCAnJ11bYmIuZGF0YS5pbmhlcml0c19jbGFzcygnbmF0aXZlJyxkKV19IgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgLS13aXRoLWxpYnVuaXN0cmluZy1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1saWJnbXAtcHJlZml4PSR7U1RBR0lOR19MSUJESVJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbGlibHRkbC1wcmVmaXg9JHtTVEFHSU5HX0xJQkRJUn0iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCW1rZGlyIC1wIHBvCit9CisKK2V4cG9ydCBHVUlMRV9GT1JfQlVJTEQ9IiR7QlVJTERfU1lTfS1ndWlsZSIKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJIyBqdXN0IGZvciB0YXJnZXQgcmVjaXBlCisJaWYgWyAiJHtQTn0iID0gImd1aWxlIiBdCisJdGhlbgorCQlzZWQgLWkgLWUgczoke1NUQUdJTkdfRElSX1RBUkdFVH06OmcgXAorCSAgICAgICAgICAgICAgIC1lIHM6LyR7VEFSR0VUX1NZU306OmcgXAorCSAgICAgICAgICAgICAgIC1lIHM6LUwvdXNyL2xpYjo6ZyBcCisgICAgICAgIAkgICAgICAgLWUgczotaXN5c3RlbS91c3IvaW5jbHVkZTo6ZyBcCisJICAgICAgICAgICAgICAgLWUgczosL3Vzci9saWI6LFwkXHtsaWJkaXJcfTpnIFwKKwkgICAgICAgICAgICAgICAgICBtZXRhL2d1aWxlLTIuMC5wYworCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlpbnN0YWxsIC1tIDA3NTUgICR7RH0ke2JpbmRpcn0vZ3VpbGUgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1ndWlsZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3VpbGUgXAorCQlHVUlMRV9MT0FEX1BBVEg9JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9ndWlsZS8yLjAgXAorCQlHVUlMRV9MT0FEX0NPTVBJTEVEX1BBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2d1aWxlLzIuMC9jY2FjaGUKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWd1aWxlIFwKKwkJR1VJTEVfTE9BRF9QQVRIPSR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ3VpbGUvMi4wIFwKKwkJR1VJTEVfTE9BRF9DT01QSUxFRF9QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ndWlsZS8yLjAvY2NhY2hlCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyA9ICJndWlsZV9jcm9zc19jb25maWciCisKK2d1aWxlX2Nyb3NzX2NvbmZpZygpIHsKKwkjIHRoaXMgaXMgb25seSBmb3IgdGFyZ2V0IHJlY2lwZQorCWlmIFsgIiR7UE59IiA9ICJndWlsZSIgXQorCXRoZW4KKwkgICAgICAgICMgQ3JlYXRlIGd1aWxlLWNvbmZpZyByZXR1cm5pbmcgdGFyZ2V0IHZhbHVlcyBpbnN0ZWFkIG9mIG5hdGl2ZSB2YWx1ZXMKKwkgICAgICAgIGluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtTVEFHSU5HX0JJTkRJUl9DUk9TU30KKyAgICAgICAgCWVjaG8gJyMhJ2B3aGljaCAke0JVSUxEX1NZU30tZ3VpbGVgJCcgXFxcbi0tbm8tYXV0by1jb21waWxlIC1lIG1haW4gLXNcbiEjXG4oZGVmaW5lICVndWlsZS1idWlsZC1pbmZvICdcJ1woIFwKKwkJCT4gJHtCfS9ndWlsZS1jb25maWcuY3Jvc3MKKwkgICAgICAgIHNlZCAtbiAtZSAnczpeWyBcdF0qe1sgXHRdKiI6ICAoOicgXAorCQkJLWUgJ3M6IixbIFx0XSoiOiAuICI6JyBcCisJCQktZSAnczoiICp9LCAqXFw6Iik6JyBcCisJCQktZSAnczpeLipjYWNoZWRpci4qJDo6JyBcCisJCQktZSAnL14gICgvcCcgXAorCQkJPCAke0J9L2xpYmd1aWxlL2xpYnBhdGguaCA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgZWNobyAnKSknID4+ICR7Qn0vZ3VpbGUtY29uZmlnLmNyb3NzCisJICAgICAgICBjYXQgJHtCfS9tZXRhL2d1aWxlLWNvbmZpZyA+PiAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcworCSAgICAgICAgaW5zdGFsbCAke0J9L2d1aWxlLWNvbmZpZy5jcm9zcyAke1NUQUdJTkdfQklORElSX0NST1NTfS9ndWlsZS1jb25maWcKKwlmaQorfQorCisjIEd1aWxlIG5lZWRzIHRoZSBjb21waWxlZCBmaWxlcyB0byBiZSBuZXdlciB0aGFuIHRoZSBzb3VyY2UsIGFuZCBpdCB3b24ndAorIyBhdXRvLWNvbXBpbGUgaW50byB0aGUgcHJlZml4IGV2ZW4gaWYgaXQgY2FuIHdyaXRlIHRoZXJlLCBzbyB0b3VjaCB0aGVtIGhlcmUgYXMKKyMgc3lzcm9vdCBpcyBtYW5hZ2VkLgorU1NUQVRFUE9TVElOU1RGVU5DUyArPSAiZ3VpbGVfc3N0YXRlX3Bvc3RpbnN0IgorZ3VpbGVfc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisgICAgICAgICAgICAgICAgZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtsaWJkaXJ9L2d1aWxlLzIuMC9jY2FjaGUgLXR5cGUgZiB8IHhhcmdzIHRvdWNoCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9maWxlcy9ndWlsdC1iYXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2d1aWx0L2ZpbGVzL2d1aWx0LWJhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBhNDM5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9maWxlcy9ndWlsdC1iYXNoLnBhdGNoCkBAIC0wLDAgKzEsMjg4IEBACitndWlsdDogZXhwbGljaXRseSBjYWxsIGZvciBiYXNoCisKK1J1bm5pbmcgY29tcGxleCBndWlsdCBzdGFja3Mgb2YgcGF0Y2hlcy9jb21taXRzIGNhbiBjYXVzZSBpbnRlcmVzdGluZworZmFpbHVyZXMgYWZ0ZXIgfjIwbSBvZiBwcm9jZXNzaW5nLCB3aXRoIGVycm9ycyBsaWtlICJCYWQgc3Vic3RpdHV0aW9uIi4KKworVGhlc2UgaGF2ZSBiZWVuIHRyYWNlZCBiYWNrIHRvIGhhdmluZyAvYmluL3NoIC0tPiAgL2Jpbi9kYXNoIG9uIFVidW50dQorc3lzdGVtcy4gIFB1dHRpbmcgYSBzaGVsbCB0aGF0IGFjdHVhbGx5ICp3b3JrcyogKHN1Y2ggYXMgL2Jpbi9iYXNoKQoraW4gYXMgL2Jpbi9zaCBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5LiAgU28gaGVyZSB3ZSBjaGFuZ2UgdGhlIGd1aWx0CitzY3JpcHRzIHRvIGV4cGxpY2l0bHkgY2FsbCBmb3IgYmFzaCB0byBlbnN1cmUgd2UgZG9uJ3QgaGF2ZSBhIHNpbWlsYXIKK2lzc3VlIGFmdGVyIGRlcGxveW1lbnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Utc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCistLS0KKyBndWlsdCAgICAgICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWFkZCAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtYXBwbGllZCAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1icmFuY2ggICAgICAgIHwgICAgMiArLQorIGd1aWx0LWRlbGV0ZSAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZGlmZiAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1leHBvcnQgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWZpbGVzICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtZm9sZCAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1mb3JrICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWdyYXBoICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaGVhZGVyICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1oZWxwICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LWltcG9ydCAgICAgICAgfCAgICAyICstCisgZ3VpbHQtaW1wb3J0LWNvbW1pdCB8ICAgIDIgKy0KKyBndWlsdC1pbml0ICAgICAgICAgIHwgICAgNCArKy0tCisgZ3VpbHQtbmV3ICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1uZXh0ICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXBhdGNoYm9tYiAgICAgfCAgICAyICstCisgZ3VpbHQtcG9wICAgICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1wcmV2ICAgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXB1c2ggICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtcmViYXNlICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1yZWZyZXNoICAgICAgIHwgICAgMiArLQorIGd1aWx0LXJtICAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtc2VyaWVzICAgICAgICB8ICAgIDIgKy0KKyBndWlsdC1zdGF0dXMgICAgICAgIHwgICAgMiArLQorIGd1aWx0LXRvcCAgICAgICAgICAgfCAgICAyICstCisgZ3VpbHQtdW5hcHBsaWVkICAgICB8ICAgIDIgKy0KKyAyOSBmaWxlcyBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKKworLS0tIGEvZ3VpbHQKKysrKyBiL2d1aWx0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LTIwMTAKKyAjCistLS0gYS9ndWlsdC1hZGQKKysrKyBiL2d1aWx0LWFkZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWFwcGxpZWQKKysrKyBiL2d1aWx0LWFwcGxpZWQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1icmFuY2gKKysrKyBiL2d1aWx0LWJyYW5jaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNy0yMDA4CisgIworLS0tIGEvZ3VpbHQtZGVsZXRlCisrKysgYi9ndWlsdC1kZWxldGUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1kaWZmCisrKysgYi9ndWlsdC1kaWZmCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoQykgMjAwNyBKb3NlZiAnSmVmZicgU2lwZWsgPGplZmZwY0Bqb3NlZnNpcGVrLm5ldD4KKyAjCistLS0gYS9ndWlsdC1leHBvcnQKKysrKyBiL2d1aWx0LWV4cG9ydAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIFBpZXJyZSBIYWJvdXppdCwgMjAwNworICMKKy0tLSBhL2d1aWx0LWZpbGVzCisrKysgYi9ndWlsdC1maWxlcworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKEMpIDIwMDcgWWFzdXNoaSBTSE9KSSA8eWFzaGlAYXRtYXJrLXRlY2huby5jb20+CisgIworLS0tIGEvZ3VpbHQtZm9sZAorKysrIGIvZ3VpbHQtZm9sZAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LWZvcmsKKysrKyBiL2d1aWx0LWZvcmsKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1ncmFwaAorKysrIGIvZ3VpbHQtZ3JhcGgKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1oZWFkZXIKKysrKyBiL2d1aWx0LWhlYWRlcgorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNi0yMDEwCisgIworLS0tIGEvZ3VpbHQtaGVscAorKysrIGIvZ3VpbHQtaGVscAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWltcG9ydAorKysrIGIvZ3VpbHQtaW1wb3J0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA3CisgIworLS0tIGEvZ3VpbHQtaW1wb3J0LWNvbW1pdAorKysrIGIvZ3VpbHQtaW1wb3J0LWNvbW1pdAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNworICMKKy0tLSBhL2d1aWx0LWluaXQKKysrKyBiL2d1aWx0LWluaXQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCitAQCAtMzEsNyArMzEsNyBAQCB0b3VjaCAiJEdVSUxUX0RJUi8kYnJhbmNoL3N0YXR1cyIKKyAKKyBta2RpciAtcCAiJEdJVF9ESVIvaG9va3MvZ3VpbHQiCisgY2F0ID4gIiRHSVRfRElSL2hvb2tzL2d1aWx0L2RlbGV0ZSIgPDxFT0YKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMgVXNhZ2U6IDxzY3JpcHQ+IDxwYXRjaCBiZWluZyByZW1vdmVkPgorIAorIGVjaG8gIlJlbW92aW5nIHBhdGNoICdcJDEnLi4uIgorLS0tIGEvZ3VpbHQtbmV3CisrKysgYi9ndWlsdC1uZXcKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1uZXh0CisrKysgYi9ndWlsdC1uZXh0CitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcGF0Y2hib21iCisrKysgYi9ndWlsdC1wYXRjaGJvbWIKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wb3AKKysrKyBiL2d1aWx0LXBvcAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXByZXYKKysrKyBiL2d1aWx0LXByZXYKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1wdXNoCisrKysgYi9ndWlsdC1wdXNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcmViYXNlCisrKysgYi9ndWlsdC1yZWJhc2UKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDcKKyAjCistLS0gYS9ndWlsdC1yZWZyZXNoCisrKysgYi9ndWlsdC1yZWZyZXNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtcm0KKysrKyBiL2d1aWx0LXJtCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtc2VyaWVzCisrKysgYi9ndWlsdC1zZXJpZXMKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCistLS0gYS9ndWlsdC1zdGF0dXMKKysrKyBiL2d1aWx0LXN0YXR1cworQEAgLTEsNCArMSw0IEBACistIyEvYmluL3NoCisrIyEvYmluL2Jhc2gKKyAjCisgIyBDb3B5cmlnaHQgKGMpIEpvc2VmICJKZWZmIiBTaXBlaywgMjAwNiwgMjAwNworICMKKy0tLSBhL2d1aWx0LXRvcAorKysrIGIvZ3VpbHQtdG9wCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vc2gKKysjIS9iaW4vYmFzaAorICMKKyAjIENvcHlyaWdodCAoYykgSm9zZWYgIkplZmYiIFNpcGVrLCAyMDA2LCAyMDA3CisgIworLS0tIGEvZ3VpbHQtdW5hcHBsaWVkCisrKysgYi9ndWlsdC11bmFwcGxpZWQKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9zaAorKyMhL2Jpbi9iYXNoCisgIworICMgQ29weXJpZ2h0IChjKSBKb3NlZiAiSmVmZiIgU2lwZWssIDIwMDYsIDIwMDcKKyAjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZ3VpbHQtbmF0aXZlX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ndWlsdC9ndWlsdC1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2M2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvZ3VpbHQvZ3VpbHQtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gInF1aWx0LWxpa2UgdG9vbCBmb3IgR2l0IgorTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjZmMzQwMGRjMWEwMWNlYmFmZThhNTJiM2YzNDQxMzUiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiZ2l0Oi8vcmVwby5vci5jei9ndWlsdC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZ3VpbHQtYmFzaC5wYXRjaCBcCisgICAgICAgICAgICIKK1BWID0gIjAuMzUrZ2l0JHtTUkNQVn0iCitTUkNSRVYgPSAiYzJhNWJhZTUxMWM2ZDUzNTRhYTRlMWNiNTkwNjljMzFkZjJiOGVlYiIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyB3ZSBkb24ndCBjb21waWxlLCB3ZSBqdXN0IGluc3RhbGwKK2RvX2NvbXBpbGUoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7RH0vJHtwcmVmaXh9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2hlbHAybWFuL2hlbHAybWFuLW5hdGl2ZV8xLjQ3LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2ZDUwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9oZWxwMm1hbi9oZWxwMm1hbi1uYXRpdmVfMS40Ny4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiUHJvZ3JhbSBmb3IgY3JlYXRpbmcgc2ltcGxlIG1hbiBwYWdlcyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImF1dG9jb25mLW5hdGl2ZSBhdXRvbWFrZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImNmN2FhYWVlYTQwYmZmMTE3NmRmODI1NDMwNjk0MTczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1OWIyNmY2MGNiMDZlNDViMDBlNzI5ZGVhNzIxZTdhMTcyMjBlMmMxN2Q4MDBlYjQyODI3MWE3NTAzODJiMDYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIG5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLW5scyIKKworIyBXZSBkb24ndCB3YW50IHRvIHJlY29uZmlndXJlIHRoaW5ncyBhcyBpdCB3b3VsZCByZXF1aXJlICdwZXJsbmF0aXZlJyB0byBiZQorIyB1c2VkLgorZG9fY29uZmlndXJlKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcGVybAorCXNlZCAtaSAtZSAiMXM6IyEuKjojISAvdXNyL2Jpbi9lbnYgcGVybDoiICR7RH0ke2JpbmRpcn0vaGVscDJtYW4KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvZmlsZXMvTW9kdWxlLm1rIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2kyYy10b29scy9maWxlcy9Nb2R1bGUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhZjcyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvZmlsZXMvTW9kdWxlLm1rCkBAIC0wLDAgKzEsNzIgQEAKKyMgRUVQUk9NRVIKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCitFRVBST01FUl9ESVIJOj0gZWVwcm9tZXIKKworRUVQUk9NRVJfQ0ZMQUdTCTo9IC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdzaGFkb3cgLVdwb2ludGVyLWFyaXRoIC1XY2FzdC1xdWFsIFwKKwkJICAgLVdjYXN0LWFsaWduIC1Xd3JpdGUtc3RyaW5ncyAtV25lc3RlZC1leHRlcm5zIC1XaW5saW5lIFwKKwkJICAgLVcgLVd1bmRlZiAtV21pc3NpbmctcHJvdG90eXBlcyAtSWluY2x1ZGUKKworRUVQUk9NRVJfVEFSR0VUUwk6PSBlZXByb21lciBlZXByb20gZWVwcm9nCisKKyMKKyMgUHJvZ3JhbXMKKyMKKworJChFRVBST01FUl9ESVIpL2VlcHJvbWVyOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9tZXIubworCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4KKworJChFRVBST01FUl9ESVIpL2VlcHJvbTogJChFRVBST01FUl9ESVIpL2VlcHJvbS5vCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9nOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9nLm8gJChFRVBST01FUl9ESVIpLzI0Y1hYLm8gCisJJChDQykgJChMREZMQUdTKSAtbyAkQCAkXgorCisjCisjIE9iamVjdHMKKyMKKworJChFRVBST01FUl9ESVIpL2VlcHJvbWVyLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb21lci5jCisJJChDQykgJChDRkxBR1MpICQoRUVQUk9NRVJfQ0ZMQUdTKSAtYyAkPCAtbyAkQAorCiskKEVFUFJPTUVSX0RJUikvZWVwcm9tLm86ICQoRUVQUk9NRVJfRElSKS9lZXByb20uYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworJChFRVBST01FUl9ESVIpL2VlcHJvZy5vOiAkKEVFUFJPTUVSX0RJUikvZWVwcm9nLmMKKwkkKENDKSAkKENGTEFHUykgJChFRVBST01FUl9DRkxBR1MpIC1jICQ8IC1vICRACisKKyQoRUVQUk9NRVJfRElSKS8yNGNYWC5vOiAkKEVFUFJPTUVSX0RJUikvMjRjWFguYworCSQoQ0MpICQoQ0ZMQUdTKSAkKEVFUFJPTUVSX0NGTEFHUykgLWMgJDwgLW8gJEAKKworIworIyBDb21tYW5kcworIworCithbGwtZWVwcm9tZXI6ICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKworc3RyaXAtZWVwcm9tZXI6ICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKwlzdHJpcCAkKGFkZHByZWZpeCAkKEVFUFJPTUVSX0RJUikvLCQoRUVQUk9NRVJfVEFSR0VUUykpCisKK2NsZWFuLWVlcHJvbWVyOgorCSQoUk0pICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sKi5vICQoRUVQUk9NRVJfVEFSR0VUUykpCisKK2luc3RhbGwtZWVwcm9tZXI6ICQoYWRkcHJlZml4ICQoRUVQUk9NRVJfRElSKS8sJChFRVBST01FUl9UQVJHRVRTKSkKKwkkKElOU1RBTExfRElSKSAkKERFU1RESVIpJChzYmluZGlyKSAkKERFU1RESVIpJChtYW44ZGlyKQorCWZvciBwcm9ncmFtIGluICQoRUVQUk9NRVJfVEFSR0VUUykgOyBkbyBcCisJJChJTlNUQUxMX1BST0dSQU0pICQoRUVQUk9NRVJfRElSKS8kJHByb2dyYW0gJChERVNURElSKSQoc2JpbmRpcikgOyBkb25lCisKK3VuaW5zdGFsbC1lZXByb21lcjoKKwlmb3IgcHJvZ3JhbSBpbiAkKEVFUFJPTUVSX1RBUkdFVFMpIDsgZG8gXAorCSQoUk0pICQoREVTVERJUikkKHNiaW5kaXIpLyQkcHJvZ3JhbSA7IFwKKwkkKFJNKSAkKERFU1RESVIpJChtYW44ZGlyKS8kJHByb2dyYW0uOCA7IGRvbmUKKworYWxsOiBhbGwtZWVwcm9tZXIKKworc3RyaXA6IHN0cmlwLWVlcHJvbWVyCisKK2NsZWFuOiBjbGVhbi1lZXByb21lcgorCitpbnN0YWxsOiBpbnN0YWxsLWVlcHJvbWVyCisKK3VuaW5zdGFsbDogdW5pbnN0YWxsLWVlcHJvbWVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2kyYy10b29sc18zLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pMmMtdG9vbHMvaTJjLXRvb2xzXzMuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjRkNjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaTJjLXRvb2xzL2kyYy10b29sc18zLjEuMi5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlNldCBvZiBpMmMgdG9vbHMgZm9yIGxpbnV4IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZGwubG0tc2Vuc29ycy5vcmcvaTJjLXRvb2xzL3JlbGVhc2VzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vTW9kdWxlLm1rIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MTA0YTEwNDNkMTFhNWUyYzdiMTMxNjE0ZWIxYjk2MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjVlNjlmMmUyYTZlM2FhMmVjZGZlNmE1ZjQ5MGIxNDljNTA0NDY4NzcwZjU4OTIxYzhjNWI4YTc4NjBhNDQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgIGNwICR7V09SS0RJUn0vTW9kdWxlLm1rICR7U30vZWVwcm9tZXIvCisgICAgc2VkIC1pICdzIy91c3IvbG9jYWwjL3VzciMnICR7U30vTWFrZWZpbGUKKyAgICBlY2hvICJpbmNsdWRlIGVlcHJvbWVyL01vZHVsZS5tayIgPj4gJHtTfS9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2xpbnV4CisgICAgaW5zdGFsbCAtbSAwNjQ0IGluY2x1ZGUvbGludXgvaTJjLWRldi5oICR7RH0ke2luY2x1ZGVkaXJ9L2xpbnV4L2kyYy1kZXYtdXNlci5oCisgICAgcm0gLWYgJHtEfSR7aW5jbHVkZWRpcn0vbGludXgvaTJjLWRldi5oCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1taXNjIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke3NiaW5kaXJ9L2kyYy1zdHViLWZyb20tZHVtcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZGRjbW9uIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtZWRpZCBcCisgICAgICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZGVjb2RlLWRpbW1zIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9kZWNvZGUtdmFpbyBcCisgICAgICAgICAgICAgICAgICAgICAgICIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAicGVybCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY0YWVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiCkBAIC0wLDAgKzEsMzYgQEAKK1NVTU1BUlkgPSAiaWNlY2MgZW52aXJvbm1lbnQgc2V0dXAgc2NyaXB0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBhIHZlcnNpb24gb2YgdGhlIGljZWNjLWNyZWF0ZS1lbnYgc2NyaXB0IHRoYXQgaGFzIFwKK2JlZW4gbW9kaWZpZWQgaW4gb3JkZXIgdG8gbWFrZSBpdCB3b3JrIHdpdGggT0UuIgorU0VDVElPTiA9ICJiYXNlIgorIyBzb3VyY2UgZmlsZSBoYXMganVzdCBhICJHUEwiIHdvcmQsIGJ1dCB1cHN0cmVhbSBpcyBHUEx2MisuCisjIG1vc3QgcHJvYmFibHkganVzdCBHUEwgd291bGQgYmUgYSBtaXN0YWtlCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2ljZWNjLWNyZWF0ZS1lbnY7YmVnaW5saW5lPTI7ZW5kbGluZT01O21kNT1hZTFkZjNkNmEwNThiZmRhNDBiNjYwOTRjNWY2MDY1ZiIKKworUFIgPSAicjIiCisKK0RFUEVORFMgPSAiIgorSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworaW5oZXJpdCBuYXRpdmUKKworIyBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSBvdGhlcndpc2UgdGhlcmUgaXMgZGVwZW5kZW5jeSBsb29wIGZyb20gcXVpbHQtbmF0aXZlCisjIERlcGVuZGVuY3kgbG9vcCAjMSBmb3VuZDoKKyMgIFRhc2sgMTA5MDcgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42MC5iYiwgZG9faW5zdGFsbCkgKGRlcGVuZGVudCBUYXNrcyBbJ3F1aWx0LW5hdGl2ZSwgZG9fY29tcGlsZSddKQorIyAgVGFzayAxMDkwOCAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19wb3B1bGF0ZV9zeXNyb290KSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19pbnN0YWxsJ10pCisjICBUYXNrIDEwOTk3IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX3BhdGNoKSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX3VucGFjaycsICdxdWlsdC1uYXRpdmUsIGRvX3BvcHVsYXRlX3N5c3Jvb3QnXSkKKyMgIFRhc2sgMTEwMDEgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYtbmF0aXZlXzAuMS5iYiwgZG9fY29uZmlndXJlKSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX3BhdGNoJ10pCisjICBUYXNrIDExMDAyIChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX2NvbXBpbGUpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fY29uZmlndXJlJ10pCisjICBUYXNrIDEwOTk4IChtZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52LW5hdGl2ZV8wLjEuYmIsIGRvX2luc3RhbGwpIChkZXBlbmRlbnQgVGFza3MgWydpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fY29tcGlsZSddKQorIyAgVGFzayAxMDk5OSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi1uYXRpdmVfMC4xLmJiLCBkb19wb3B1bGF0ZV9zeXNyb290KSAoZGVwZW5kZW50IFRhc2tzIFsnaWNlY2MtY3JlYXRlLWVudi1uYXRpdmUsIGRvX2luc3RhbGwnXSkKKyMgIFRhc2sgMTA5MTAgKG1ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42MC5iYiwgZG9fY29uZmlndXJlKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19wYXRjaCcsICdpY2VjYy1jcmVhdGUtZW52LW5hdGl2ZSwgZG9fcG9wdWxhdGVfc3lzcm9vdCddKQorIyAgVGFzayAxMDkxMSAobWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjYwLmJiLCBkb19jb21waWxlKSAoZGVwZW5kZW50IFRhc2tzIFsncXVpbHQtbmF0aXZlLCBkb19jb25maWd1cmUnXSkKK1BBVENIVE9PTCA9ICJwYXRjaCIKK1NSQ19VUkkgPSAiZmlsZTovL2ljZWNjLWNyZWF0ZS1lbnYiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaWNlY2MtY3JlYXRlLWVudiAke0R9LyR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljZWNjLWNyZWF0ZS1lbnYvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlNGRiYzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaWNlY2MtY3JlYXRlLWVudi9pY2VjYy1jcmVhdGUtZW52L2ljZWNjLWNyZWF0ZS1lbnYKQEAgLTAsMCArMSwxOTIgQEAKKyMhIC91c3IvYmluL2VudiBiYXNoCisjIGljZWNjIC0tIEEgc2ltcGxlIGRpc3RyaWJ1dGVkIGNvbXBpbGVyIHN5c3RlbQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgdGhlIEljZWNyZWFtIEF1dGhvcnMKKyMgR1BMCisKK3RhcmdldF9maWxlcz0KKworaXNfY29udGFpbmVkICgpCit7CisgIGNhc2UgIiAkdGFyZ2V0X2ZpbGVzICIgaW4KKyAgICAqIiAkMSAiKiApIHJldHVybiAwIDs7CisgICAgKiI9JDEgIiogKSByZXR1cm4gMDs7CisgICAgKiApIHJldHVybiAxIDs7CisgIGVzYWMKK30KKworYWRkX2ZpbGUgKCkKK3sKKyAgbG9jYWwgbmFtZT0iJDEiCisgIGxvY2FsIHBhdGg9IiQxIjsKKyAgaWYgdGVzdCAtbiAiJDIiOyB0aGVuCisgICAgbmFtZT0iJDIiCisgIGZpCisgIHRlc3QgLXogIiRuYW1lIiAmJiByZXR1cm4KKyAgIyBscyAtSCBpc24ndCByZWFsbHkgdGhlIHNhbWUgYXMgcmVhZGxpbmssIGJ1dAorICAjIHJlYWRsaW5rIGlzIG5vdCBwb3J0YWJsZSBlbm91Z2guCisgIHBhdGg9YGxzIC1IICRwYXRoYAorICB0b2FkZD0iJG5hbWU9JHBhdGgiCisgIGlzX2NvbnRhaW5lZCAiJHRvYWRkIiAmJiByZXR1cm4KKyAgaWYgdGVzdCAteiAiJHNpbGVudCI7IHRoZW4KKyAgZWNobyAiYWRkaW5nIGZpbGUgJHRvYWRkIgorICBmaQorICB0YXJnZXRfZmlsZXM9IiR0YXJnZXRfZmlsZXMgJHRvYWRkIgorICBpZiB0ZXN0IC14ICIkcGF0aCI7IHRoZW4KKyAgICAjIE9ubHkgY2FsbCBsZGQgd2hlbiBpdCBtYWtlcyBzZW5zZQorICAgIGlmIGZpbGUgLUwgIiRwYXRoIiB8IGdyZXAgJ0VMRicgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCWlmICEgZmlsZSAtTCAiJHBhdGgiIHwgZ3JlcCAnc3RhdGljJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgIyBsZGQgbm93IG91dHB1dHMgbGQgYXMgL2xpYi9sZC1saW51eC5zby54eCBvbiBjdXJyZW50IG5wdGwgYmFzZWQgZ2xpYmMKKwkJIyB0aGlzIHJlZ2V4cCBwYXJzZSB0aGUgb3V0cHV0cyBsaWtlOgorCQkjIGxkZCAvdXNyL2Jpbi9nY2MKKwkJIyAgICAgICAgIGxpbnV4LWdhdGUuc28uMSA9PiAgKDB4ZmZmZmUwMDApCisJCSMgICAgICAgICBsaWJjLnNvLjYgPT4gL2xpYi90bHMvbGliYy5zby42ICgweGI3ZTgxMDAwKQorCQkjICAgICAgICAgL2xpYi9sZC1saW51eC5zby4yICgweGI3ZmU4MDAwKQorCQkjIGNvdmVyaW5nIGJvdGggc2l0dWF0aW9ucyAoIHdpdGggPT4gYW5kIHdpdGhvdXQgKQorICAgICAgICAgIGZvciBsaWIgaW4gYGxkZCAiJHBhdGgiIHwgc2VkIC1uICdzLF5bXi9dKlwoL1teIF0qXCkuKixcMSxwJ2A7IGRvCisJICAgIHRlc3QgLWYgIiRsaWIiIHx8IGNvbnRpbnVlCisJICAgICMgQ2hlY2sgd2V0aGVyIHRoZSBzYW1lIGxpYnJhcnkgYWxzbyBleGlzdHMgaW4gdGhlIHBhcmVudCBkaXJlY3RvcnksCisJICAgICMgYW5kIHByZWZlciB0aGF0IG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXQgaXMgYSBtb3JlIGdlbmVyaWMgb25lLgorCSAgICBsb2NhbCBiYXNlbGliPWBlY2hvICIkbGliIiB8IHNlZCAncyxcKC9bXi9dKlwpLy4qXCgvW14vXSpcKSQsXDFcMiwnYAorCSAgICB0ZXN0IC1mICIkYmFzZWxpYiIgJiYgbGliPSRiYXNlbGliCisJICBhZGRfZmlsZSAiJGxpYiIKKyAgICAgICAgZG9uZQorICAgICAgZmkKKyAgICBmaQorICBmaQorfQorCisjIGJhY2t3YXJkIGNvbXBhdAoraWYgdGVzdCAiJDEiID0gIi0tcmVzcGVjdC1wYXRoIjsgdGhlbgorICBzaGlmdAorZmkKKworI2FkZCBhIC0tc2lsZW50IHN3aXRjaCB0byBhdm9pZCAiYnJva2VuIHBpcGUiIGVycm9ycyB3aGVuIGNhbGxpbmcgdGhpcyBzY2lwdCBmcm9tIHdpdGhpbiBPRQoraWYgdGVzdCAiJDEiID0gIi0tc2lsZW50IjsgdGhlbgorIHNpbGVudD0xCisgc2hpZnQKK2ZpCisKKworYWRkZWRfZ2NjPSQxCitzaGlmdAorYWRkZWRfZ3h4PSQxCitzaGlmdAorYWRkZWRfYXM9JDEKK3NoaWZ0CithcmNoaXZlX25hbWU9JDEKKworaWYgdGVzdCAteiAiJGFkZGVkX2djYyIgfHwgdGVzdCAteiAiJGFkZGVkX2d4eCIgOyB0aGVuCisJZWNobyAidXNhZ2U6ICQwIDxnY2NfcGF0aD4gPGcrK19wYXRoPiIKKwlleGl0IDEKK2ZpCisKK2lmICEgdGVzdCAteCAiJGFkZGVkX2djYyIgOyB0aGVuCisgIGVjaG8gIickYWRkZWRfZ2NjJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCitmaQorCitpZiAhIHRlc3QgLXggIiRhZGRlZF9neHgiIDsgdGhlbgorICBlY2hvICInJGFkZGVkX2djYycgaXMgbm8gZXhlY3V0YWJsZS4iCisgIGV4aXQgMQorZmkKKworCisKK2FkZF9maWxlICRhZGRlZF9nY2MgL3Vzci9iaW4vZ2NjCithZGRfZmlsZSAkYWRkZWRfZ3h4IC91c3IvYmluL2crKworCitpZiB0ZXN0IC16ICIkYWRkZWRfYXMiIDsgdGhlbgorIGFkZF9maWxlIC91c3IvYmluL2FzIC91c3IvYmluL2FzCitlbHNlCisgaWYgISB0ZXN0IC14ICIkYWRkZWRfYXMiIDsgdGhlbgorICBlY2hvICInJGFkZGVkX2FzJyBpcyBubyBleGVjdXRhYmxlLiIKKyAgZXhpdCAxCisgZmkKKworIGFkZF9maWxlICRhZGRlZF9hcyAgL3Vzci9iaW4vYXMKK2ZpCisKK2FkZF9maWxlIGAkYWRkZWRfZ2NjIC1wcmludC1wcm9nLW5hbWU9Y2MxYCAvdXNyL2Jpbi9jYzEKK2FkZF9maWxlIGAkYWRkZWRfZ3h4IC1wcmludC1wcm9nLW5hbWU9Y2MxcGx1c2AgL3Vzci9iaW4vY2MxcGx1cworc3BlY2ZpbGU9YCRhZGRlZF9nY2MgLXByaW50LWZpbGUtbmFtZT1zcGVjc2AKK2lmIHRlc3QgLW4gIiRzcGVjZmlsZSIgJiYgdGVzdCAtZSAiJHNwZWNmaWxlIjsgdGhlbgorICBhZGRfZmlsZSAiJHNwZWNmaWxlIgorZmkKKworbHRvZmlsZT1gJGFkZGVkX2djYyAtcHJpbnQtcHJvZy1uYW1lPWx0bzFgCitwbHVnaW5maWxlPSIke2x0b2ZpbGUlbHRvMX1saWJsdG9fcGx1Z2luLnNvIgoraWYgdGVzdCAtciAiJHBsdWdpbmZpbGUiCit0aGVuCisgIGFkZF9maWxlICRwbHVnaW5maWxlICAke3BsdWdpbmZpbGUjKnVzcn0KKyAgYWRkX2ZpbGUgJHBsdWdpbmZpbGUgIC91c3Ike3BsdWdpbmZpbGUjKnVzcn0KK2ZpCisKK3RlbXBkaXI9YG1rdGVtcCAtZCAvdG1wL2ljZWNjZW52WFhYWFhYYAorbmV3X3RhcmdldF9maWxlcz0KK2ZvciBpIGluICR0YXJnZXRfZmlsZXM7IGRvCisgY2FzZSAkaSBpbgorICAgKj0vKikKKyAgICB0YXJnZXQ9YGVjaG8gJGkgfCBjdXQgLWQ9IC1mMWAKKyAgICBwYXRoPWBlY2hvICRpIHwgY3V0IC1kPSAtZjJgCisgICAgOzsKKyAgICopCisgICAgcGF0aD0kaQorICAgIHRhcmdldD0kaQorICAgIDs7CisgIGVzYWMKKyAgbWtkaXIgLXAgJHRlbXBkaXIvYGRpcm5hbWUgJHRhcmdldGAKKyAgY3AgLXAgJHBhdGggJHRlbXBkaXIvJHRhcmdldAorICBpZiB0ZXN0IC1mICR0ZW1wZGlyLyR0YXJnZXQgLWEgLXggJHRlbXBkaXIvJHRhcmdldDsgdGhlbgorICAgIHN0cmlwIC1zICR0ZW1wZGlyLyR0YXJnZXQgMj4vZGV2L251bGwKKyAgZmkKKyAgdGFyZ2V0PWBlY2hvICR0YXJnZXQgfCBjdXQgLWIyLWAKKyAgbmV3X3RhcmdldF9maWxlcz0iJG5ld190YXJnZXRfZmlsZXMgJHRhcmdldCIKK2RvbmUKKworI3NvcnQgdGhlIGZpbGVzCit0YXJnZXRfZmlsZXM9YGZvciBpIGluICRuZXdfdGFyZ2V0X2ZpbGVzOyBkbyBlY2hvICRpOyBkb25lIHwgc29ydGAKKworI3Rlc3QgaWYgYW4gYXJjaGl2ZSBuYW1lIHdhcyBzdXBwbGllZAorI2lmIG5vdCB1c2UgdGhlIG1kNSBvZiBhbGwgZmlsZXMgYXMgdGhlIGFyY2hpdmUgbmFtZQoraWYgdGVzdCAteiAiJGFyY2hpdmVfbmFtZSI7IHRoZW4KKyAgbWQ1c3VtPU5PTkUKKyAgZm9yIGZpbGUgaW4gL3Vzci9iaW4vbWQ1c3VtIC9iaW4vbWQ1IC91c3IvYmluL21kNTsgZG8KKyAgICBpZiB0ZXN0IC14ICRmaWxlOyB0aGVuCisgICAgICBtZDVzdW09JGZpbGUKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorCisgICNjYWxjdWxhdGUgbWQ1IGFuZCB1c2UgaXQgYXMgdGhlIGFyY2hpdmUgbmFtZQorICBhcmNoaXZlX25hbWU9YGZvciBpIGluICR0YXJnZXRfZmlsZXM7IGRvIHRlc3QgLWYgJHRlbXBkaXIvJGkgJiYgJG1kNXN1bSAkdGVtcGRpci8kaTsgZG9uZSB8IHNlZCAtZSAncy8gLiokLy8nIHwgJG1kNXN1bSB8IHNlZCAtZSAncy8gLiokLy8nYC50YXIuZ3ogfHwgeworICAgIGlmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCisgICAgIGVjaG8gIkNvdWxkbid0IGNvbXB1dGUgTUQ1IHN1bS4iCisgICAgZmkKKyAgICBleGl0IDIKKyAgfQorICBteWRpcj1gcHdkYAorZWxzZQorICBteWRpcj0iYGRpcm5hbWUgIiRhcmNoaXZlX25hbWUiYCIKKworICAjY2hlY2sgaWYgd2UgaGF2ZSBhIGZ1bGwgcGF0aCBvciBvbmx5IGEgZmlsZW5hbWUKKyAgaWYgdGVzdCAiJG15ZGlyIiA9ICIuIiA7IHRoZW4KKyAgICBteWRpcj1gcHdkYAorICBlbHNlCisgICAgbXlkaXI9IiIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCitlY2hvICJjcmVhdGluZyAkYXJjaGl2ZV9uYW1lIgorZmkKKworY2QgJHRlbXBkaXIKK3RhciAtY3poZiAiJG15ZGlyLyRhcmNoaXZlX25hbWUiICR0YXJnZXRfZmlsZXMgfHwgeworIGlmIHRlc3QgLXogIiRzaWxlbnQiOyB0aGVuCisgIGVjaG8gIkNvdWxkbid0IGNyZWF0ZSBhcmNoaXZlIgorIGZpCisgIGV4aXQgMworfQorY2QgLi4KK3JtIC1yZiAkdGVtcGRpcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ljb24tbmFtaW5nLXV0aWxzL2ljb24tbmFtaW5nLXV0aWxzXzAuOC45MC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY29uLW5hbWluZy11dGlscy9pY29uLW5hbWluZy11dGlsc18wLjguOTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzNTZiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pY29uLW5hbWluZy11dGlscy9pY29uLW5hbWluZy11dGlsc18wLjguOTAuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggY3VycmVudCBkZXNrdG9wIGljb24gdGhlbWVzIgorREVTQ1JJUFRJT04gPSAiQSBQZXJsIHNjcmlwdCB1c2VkIGZvciBtYWludGFpbmluZyBiYWNrd2FyZHMgXAorY29tcGF0aWJpbGl0eSB3aXRoIGN1cnJlbnQgZGVza3RvcCBpY29uIHRoZW1lcywgd2hpbGUgbWlncmF0aW5nIHRvIHRoZSBcCituYW1lcyBzcGVjaWZpZWQgaW4gdGhlIEljb24gTmFtaW5nIFNwZWNpZmljYXRpb24uIFRoZSBJY29uIE5hbWluZyBcCitVdGlsaXRpZXMgbWFwIHRoZSBpY29uIG5hbWVzIHVzZWQgYnkgdGhlIEdOT01FIGFuZCBLREUgZGVza3RvcHMgdG8gdGhlIFwKK2ljb24gbmFtZXMgcHJvcG9zZWQgaW4gdGhlIEljb24gTmFtaW5nIFNwZWNpZmljYXRpb24sIGFuZCBnZW5lcmF0ZSB0aGUgXAoraWNvbiBmaWxlcyBhcHByb3ByaWF0ZSB0byB0aGUgZGVza3RvcCBlbnZpcm9ubWVudCB5b3UgdXNlLiBUaGUgSWNvbiBcCitOYW1pbmcgU3BlY2lmaWNhdGlvbiBwcm92aWRlcyBhIHN0YW5kYXJkIGxpc3Qgb2YgY29tbW9uIGljb24gY29udGV4dHMgXAorYW5kIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBpY29uIHRoZW1lcyB3b3JrIGluIGEgZGVza3RvcCBcCitlbnZpcm9ubWVudCBvciBhcHBsaWNhdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIG5hbWluZyBzcGVjaWZpY2F0aW9uLiAiCitMSUNFTlNFID0gIkdQTHYyIgorREVQRU5EUyA9ICJsaWJ4bWwtc2ltcGxlLXBlcmwtbmF0aXZlIgorUFIgPSAicjUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gImh0dHA6Ly90YW5nby5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvaWNvbi1uYW1pbmctdXRpbHMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjJjNWM3YTQxOGU1ZWIzMjY4ZjY1ZTIxOTkzMjc3ZmJhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0NGFiMjE5OWVkOGM2YTU1Y2UzNmZkNGZjZDhiODAyMWE1ZTIxZjViYWIwMjhjMGE3Y2RjZjUyYTU5MDJlMWMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGFsbGFyY2ggcGVybG5hdGl2ZQorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCSMgTWFrZSBzdXJlIHdlIHVzZSBvdXIgbmF0aXZlcGVybCB3cmFwcGVyLgorCXNlZCAtaSAtZSAiMXM6IyEuKjojIS91c3IvYmluL2VudiBuYXRpdmVwZXJsOiIgJHtTfS9pY29uLW5hbWUtbWFwcGluZy5wbC5pbgorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kdGRzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjhjZmIyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9hZHRfaW5zdGFsbGVyCkBAIC0wLDAgKzEsNDIwIEBACisjIS9iaW4vYmFzaAorIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKK3VzYWdlICgpCit7CisKKyAgSU5TVF9BUkNIPWB1bmFtZSAtbWAKKyAgSU5TVF9PUz1gdW5hbWUgLW98IHRyICdbQS1aXScgJ1thLXpdJ2AKKyAgSU5TVF9LUj1gdW5hbWUgLXJ8IHRyICdbQS1aXScgJ1thLXpdJ2AKKworICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBXZWxjb21lIHRvIFlvY3RvIEFwcGxpY2F0aW9uIERldmVsb3BlbWVudCBUb29scyAoQURUKSBJbnN0YWxsZXIiCisgIGVjaG9faW5mbyAiIyAiCisgIGVjaG9faW5mbyAiIyBIb3N0IE1hY2hpbmU6XHRcdFx0XHQiJElOU1RfQVJDSAorICBlY2hvX2luZm8gIiMgT1MgaW5mbzpcdFx0XHRcdCRJTlNUX0tSIiAgCisgIGVjaG9faW5mbyAiIyBZb2N0byBBRFQgdmVyc2lvbiB0byBiZSBpbnN0YWxsZWQ6XHQkWU9DVE9BRFRfVkVSU0lPTiIKKyAgZWNob19pbmZvICIjIHN1cHBvcnRlZCB0YXJnZXQgYXJjaGl0ZWN0dXJlczpcdCRZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUyIKKyAgZWNob19pbmZvICIjIHN1cHBvcnRlZCB0YXJnZXQgcm9vdF9mcyBpbWFnZXM6XHQkWU9DVE9BRFRfU1VQUE9SVEVEX1JPT1RGUyIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisKKyAgZWNob19pbmZvICJTeXN0ZW13aWRlIGluc3RhbGxhdGlvbi4gSW5zdGFsbGF0aW9uIHdpbGwgb2NjdXIgdW5kZXIgJElOU1RBTExfRk9MREVSXG4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICIjIFlvdXIgc3lzdGVtIGluc3RhbGxhdGlvbiBjb25maWd1cmF0aW9ucyBmcm9tIGFkdF9pbnN0YWxsZXIuY29uZiIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorCisgIGVjaG9faW5mbyAiIyBDcm9zcyB0b29sY2hhaW5zOlx0XHQkWU9DVE9BRFRfVEFSR0VUUyIKKyAgZWNob19pbmZvICIjIEluc3RhbGwgUWVtdTpcdFx0XHQkWU9DVE9BRFRfUUVNVSIKKyAgZWNob19pbmZvICIjIEluc3RhbGwgTkZTIHV0aWxpdGllczpcdCRZT0NUT0FEVF9ORlNfVVRJTCIKKyAgI2VjaG9faW5mbyAiIyBJbnN0YWxsIGJpdGJha2UgKyBVSTpcdFx0JFlPQ1RPQURUX0JJVEJBS0UiCisgICNlY2hvX2luZm8gIiMgSW5zdGFsbCBtZXRhZGF0YTpcdCRZT0NUT0FEVF9NRVRBREFUQSIKKyAgI2VjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgWW91ciByb290ZnMgaW1hZ2UocykgYW5kIHRhcmdldCBzeXNyb290IHNlbGVjdGlvbnMgZnJvbSBhZHRfaW5zdGFsbGVyLmNvbmYiCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitwcm9tcHQ9MQorZm9yIGFyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgZG93bmxvYWRfaW1hZ2VzICRhcmNoX3R5cGUgJHByb21wdAorZG9uZQorICAgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICBzZWxlY3RfaW5zdGFsbF90eXBlCit9CisKK3ZhbGlkYXRlX2NvbmZpZygpCit7CisKKyAgZm9yIHNlbGVjdGVkX2FyY2hfdHlwZSBpbiAkWU9DVE9BRFRfVEFSR0VUUzsgZG8KKyAgICBmb3VuZD0wCisgICAgc2VsZWN0X21hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyRzZWxlY3RlZF9hcmNoX3R5cGUiCisgICAgc2VsZWN0X21hY2hpbmU9YGV2YWwgZWNobyAkc2VsZWN0X21hY2hpbmVfdmFyYAorICAgIHNob3dfZXJyb3JfYmFubmVyPTAKKworICAgIGZvciBzdXBwb3J0ZWRfYXJjaF90eXBlIGluICRZT0NUT0FEVF9TVVBQT1JURURfVEFSR0VUUzsgZG8KKyAgICAgIGlmIFsgIiRzZWxlY3RlZF9hcmNoX3R5cGUiID09ICIkc3VwcG9ydGVkX2FyY2hfdHlwZSIgXTsgdGhlbgorICAgICAgICBmb3VuZD0xCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyAgICAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IFlPQ1RBRFRfVEFSR0VUUyBpbiBhZHRfaW5zdGFsbGVyLmNvbmYgY29udGFpbnMgaW52YWxpZCBlbnRyaWVzOiAkWU9DVE9BRFRfVEFSR0VUUy4gVmFsaWQgdmFsdWVzIGFyZTogJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTIgorICAgICAgIHNob3dfZXJyb3JfYmFubmVyPTEKKyAgICBlbGlmIFsgLXogIiRzZWxlY3RfbWFjaGluZSIgXTsgdGhlbgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogTm8gTUFDSElORSB3YXMgZGVmaW5lZCBmb3IgJHNlbGVjdGVkX2FyY2hfdHlwZSBhcmNoaXRlY3R1cmUhIFRoaXMgaXMgbmVlZGVkIHRvIGluc3RhbGwgdGhlIHRvb2xjaGFpbiBhbmQgdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgc2V0dGluZ3MuIgorICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBUbyBkbyB0aGF0LCBpbiBhZHQtaW5zdGFsbGVyLmNvbmYsIHNldCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOiBZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kc2VsZWN0ZWRfYXJjaF90eXBlIgorICAgICAgIHNob3dfZXJyb3JfYmFubmVyPTEKKyAgICBmaQorCisgICAgaWYgWyAkc2hvd19lcnJvcl9iYW5uZXIgPT0gMSBdOyB0aGVuCisgICAgICAgZWNobyAtZSAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAgICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgICAgICAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgICBleGl0IC0xCisgICAgZmkKKyAgZG9uZQorCisgIGZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9UQVJHRVRTOyBkbworICAgICNzZWxlY3RfdGFyZ2V0X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfJGFyY2hfdHlwZSIKKyAgICAjc2VsZWN0X3RhcmdldD1gZXZhbCBlY2hvICRzZWxlY3RfdGFyZ2V0X3ZhcmAKKworICAgICNpZiBbICIkc2VsZWN0X3RhcmdldCIgIT0gIlkiIF0gfHwgWyAiJHNlbGVjdGVkX3RhcmdldCIgIT0gInkiIF07IHRoZW4KKyAgICAjICBjb250aW51ZTsKKyAgICAjZmkKKworICAgIHRhcmdldF9zeXNyb290X2ltYWdlX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV8kYXJjaF90eXBlIgorICAgIHRhcmdldF9zeXNyb290X2ltYWdlPWBldmFsIGVjaG8gJHRhcmdldF9zeXNyb290X2ltYWdlX3ZhcmAKKworCisgICAgc2VsZWN0X3Jvb3Rmc192YXI9IlwkWU9DVE9BRFRfUk9PVEZTXyRhcmNoX3R5cGUiCisgICAgc2VsZWN0X3Jvb3Rmcz1gZXZhbCBlY2hvICRzZWxlY3Rfcm9vdGZzX3ZhcmAKKworICAgIGlmIFsgIiRzZWxlY3Rfcm9vdGZzIiA9PSAiIiBdICYmIFsgIiR0YXJnZXRfc3lzcm9vdF9pbWFnZSIgPT0gIiIgXTsgdGhlbgorICAgICAgIGNvbnRpbnVlOworICAgIGZpCisKKyAgICBmb3IgaW1hZ2VfdHlwZSBpbiAkc2VsZWN0X3Jvb3RmczsgZG8KKyN2YWxpZGF0ZSByb290ZnMgdHlwZSBkZWZpbmVkIGluIFlPQ1RPQURUX1JPT1RGU197QVJDSH0gaXMgdmFsaWQgYW5kIGluIFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlMKKyAgICAgIGZvdW5kPTAKKyAgICAgIGZvciBzdXBwb3J0ZWRfcm9vdGZzX3R5cGUgaW4gJFlPQ1RPQURUX1NVUFBPUlRFRF9ST09URlM7IGRvCisgICAgICAgIGlmIFsgIiRpbWFnZV90eXBlIiA9PSAiJHN1cHBvcnRlZF9yb290ZnNfdHlwZSIgXTsgdGhlbgorICAgICAgICAgIGZvdW5kPTEKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZG9uZQorICAgICAgaWYgWyAkZm91bmQgPT0gMCBdOyB0aGVuCisjdGhlIHJvb3RmcyB0eXBlIGxpc3RlZCBmb3IgZG93bmxvYWRpbmcgaXMgbm90IHZhbGlkCisgICAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogU2VsZWN0ZWQgWU9DVE9BRFRfUk9PVEZTXyRhcmNoX3R5cGUgdmFsdWU6ICRpbWFnZV90eXBlLCBpcyBub3QgdmFsaWQhIFZhbGlkIHZhbHVlcyBhcmU6ICRZT0NUT0FEVF9TVVBQT1JURURfUk9PVEZTICIKKyAgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgICAgICBleGl0IC0xCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGZvdW5kPTAKKyAgICBmb3IgaW1hZ2VfdHlwZSBpbiAkc2VsZWN0X3Jvb3RmczsgZG8KKyN2YWxpZGF0ZSB0aGF0IHJvb3RmcyB0byBiZSBleHRyYWN0ZWQgbXVzdCBiZSBpbiB0aGUgaXRlbTogWU9DVE9BRFRfUk9PVEZTXyR7QVJDSH0KKyAgICAgIGlmIFsgIiR0YXJnZXRfc3lzcm9vdF9pbWFnZSIgPT0gIiRpbWFnZV90eXBlIiBdOyB0aGVuCisgICAgICAgIGZvdW5kPTEKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorIyB0aGUgcm9vdGZzIGltYWdlIHRvIGJlIGV4dHJhY3RlZCBpcyBub3Qgc2VsZWN0ZWQKKyAgICBpZiBbICRmb3VuZCA9PSAwIF07IHRoZW4KKyAgICAgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJGFyY2hfdHlwZSBzZWxlY3Rpb246ICR0YXJnZXRfc3lzcm9vdF9pbWFnZSBpcyBub3QgaW5jbHVkZWQgaW4gWU9DVE9BRFRfUk9PVEZTXyRhcmNoX3R5cGUgc2VsZWN0aW9uczogJHNlbGVjdF9yb290ZnMiCisgICAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgICAgZWNobyAtZSAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICAgIGV4aXQgLTEKKyAgICBmaQorICBkb25lCit9CisKKworI2RldGVjdCBvcGtnIGluc3RhbGxlZCBvciBub3QsIGZvciBpbnN0YWxsaW5nIHNkaywgd2Ugd2lsbCB1c2UKKyN0aGlzIGluc3RhbGxlZCBsb2NhbCBvcGtnCitpbnN0YWxsX29wa2coKQoreworaWYgWyAhIC14ICIkTE9DQUxfT1BLR19MT0MvYmluL29wa2ciIF07IHRoZW4KKyAgZWNob19pbmZvICJPUEtHIGlzIG5vdCBzZXR1cCwgc2V0dGluZyB1cCBvcGtnIGluIGxvY2FsLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgaW5zdGFsbGluZyB5b2N0byBBRFQuLi5cbiIKKworICBpZiBbIC1kICRMT0NBTF9PUEtHX0xPQyBdOyB0aGVuCisgICAgZWNob19pbmZvICJEZWxldGluZyBvbGQgT1BLRyBmb2xkZXIsIHdoaWNoIGRvZXNuJ3QgY29udGFpbiBleGVjdXRhYmxlcy4uLiAiCisgICAgcm0gLXJmICRMT0NBTF9PUEtHX0xPQworICBmaQorCisgIHBhcmVudF9mb2xkZXI9YHB3ZGAKKyAgY2QgJExPQ0FMX09QS0dfRk9MREVSCisgIGNoZWNrX3Jlc3VsdAorCisgIG9wa2dfc291cmNlX2Rpcj1gbHMgLWQgb3BrZy0qYAorCisgIGlmIFsgJG9wa2dfc291cmNlX2RpciA9PSAiIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJbQURUX0lOU1RdIEVycm9yOiBPUEtHIHNvdXJjZSBkaXJlY3RvcnkgaXMgbm90IGZvdW5kISIKKyAgICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICAgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgICBlY2hvIC1lICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgLTEKKyAgZmkKKworICBjZCAkb3BrZ19zb3VyY2VfZGlyCisgIGNoZWNrX3Jlc3VsdAorCisgIGVjaG9faW5mbyAiQ29uZmlndXJlIG9wa2cgLi4uXG4iCisgIGF1dG9yZWNvbmYgLWkKKyAgLi9jb25maWd1cmUgLS1wcmVmaXg9JHBhcmVudF9mb2xkZXIvJExPQ0FMX09QS0dfTE9DIC0tZW5hYmxlLXNoYXJlZD1ubyAtLWRpc2FibGUtY3VybCAtLWRpc2FibGUtc3NsLWN1cmwgLS1kaXNhYmxlLWdwZyA+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKKworICBlY2hvX2luZm8gIk1ha2Ugb3BrZyAuLi5cbiIKKyAgbWFrZSAmPj4gJHBhcmVudF9mb2xkZXIvJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CisKKyAgZWNob19pbmZvICJNYWtlIEluc3RhbGwgb3BrZyAuLi5cbiIKKyAgbWFrZSBpbnN0YWxsICY+PiAkcGFyZW50X2ZvbGRlci8kWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICAjaWYgbWVldCBlcnJvciB3aGVuIGluc3RhbGxpbmcgb3BrZywgY2FuY2VsIHRoZSBpbnN0YWxsYXRpb24KKyAgY2hlY2tfcmVzdWx0CisKKyAgY2QgJHBhcmVudF9mb2xkZXIKKyAgZWNob19pbmZvICJTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIE9QS0cuXG4iCitmaQorfQorCitjb25maXJtX2Rvd25sb2FkKCkKK3sKKyNhdm9pZCByZXBlYXRlZCByZW1pbmRpbmcKK2lmIFsgIiRvdmVycmlkZV9vbGRmaWxlIiA9PSAxIF07IHRoZW4KKyAgcmV0dXJuICRwcmVfcmVzdWx0CitlbHNlCisgIG92ZXJyaWRlX29sZGZpbGU9MQorZmkKKword2hpbGUgdHJ1ZTsgZG8KKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBGaWxlcyBbJDFdIGFscmVhZHkgZXhpc3RzLiBJZiB5b3UgY29udGludWUgZG93bmxvYWRpbmcsIG9sZCBmaWxlcyB3aWxsIGJlIG92ZXJyaWRlZC4iCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRnVydGhlciBwcm9tcHRzIHdpbGwgbm90IGJlIGdpdmVuIGlmIHRoZXJlJ3JlIG1vcmUgZXhpc3RpbmcgZmlsZXMgdG8gYmUgZG93bmxvYWRlZC4iCisgICNlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgZG93bmxvYWRpbmc/IFBsZWFzZSBlbnRlciBZL046IgorICBlY2hvX2luZm8gIlxuRmlsZSBbJDFdIGFscmVhZHkgZXhpc3RzLCB3aGljaCBtZWFucyB5b3UndmUgZG93bmxvYWRlZCB0aGUgcWVtdSBrZXJuZWwgYW5kIHJvb3RmcyBmaWxlKHMpIGJlZm9yZS4gIElmIHlvdSBjaG9vc2UgY29udGludWUgZG93bmxvYWRpbmcsIG9sZCBmaWxlcyB3aWxsIGJlIG92ZXJyaWRkZW4uIgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRG8geW91IHdhbnQgdG8gY29udGludWUgZG93bmxvYWRpbmc/IFBsZWFzZSBlbnRlciBZL046IgorICByZWFkIFlPQ1RPQURUX0lOU1RBTEwKKyAgWU9DVE9BRFRfSU5TVEFMTD1gdHIgJ1thLXpdJyAnW0EtWl0nPDw8IiRZT0NUT0FEVF9JTlNUQUxMImAKKyAgaWYgWyAiJFlPQ1RPQURUX0lOU1RBTEwiID09ICJZIiBdOyB0aGVuCisgICAgcHJlX3Jlc3VsdD0wCisgICAgcmV0dXJuIDAKKyAgZWxpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIk4iIF07IHRoZW4KKyAgICBwcmVfcmVzdWx0PTEKKyAgICByZXR1cm4gMQorICBmaQorZG9uZQorfQorCitkb3dubG9hZF9maWxlKCkKK3sKK2xvY2FsIGZpbGVuYW1lPWBlY2hvICR7MSMjKi99YAoraWYgWyAtZiAiJExPQ0FMX0RPV05MT0FELyRmaWxlbmFtZSIgXTsgdGhlbgorICBjb25maXJtX2Rvd25sb2FkICRmaWxlbmFtZQorICByZXN1bHQ9IiQ/IgorICBpZiBbICEgIiRyZXN1bHQiID09ICIwIiBdOyB0aGVuCisgICAgcmV0dXJuCisgIGVsc2UKKyAgICBlY2hvICJSZW1vdmluZyBvbGQgZmlsZSBbJDFdIgorICAgIHJtIC1yZiAiJExPQ0FMX0RPV05MT0FELyRmaWxlbmFtZSIgCisgIGZpCitmaQorZWNob19pbmZvICJEb3dubG9hZGluZyBmaWxlOiAkZmlsZW5hbWUuLi4iCit3Z2V0ICIkWU9DVE9BRFRfUkVQTy9yb290ZnMvJDEiIC1QICRMT0NBTF9ET1dOTE9BRCAtLXByb2dyZXNzPWJhcjpmb3JjZSAyPiYxIHwgdGVlIC1hICIkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRSIgCit9CisKKworCisjTmVlZCB0aHJlZSBpbnB1dCBwYXJhbXM6CisjICQxIGFyY2hfdHlwZShhcm0gcG93ZXJwYyB4ODYgbWlwcykKKyMgJDIgbWFjaGluZShxZW11YXJtIGJlYWdsZWJvYXJkKQorIyAkMyByb290ZnNfaW1hZ2VfdHlwZSAoYSBsaXN0IG9mIHNkayBzYXRvIG1pbmltYWwgbHNiKQorZ2V0X2ltYWdlKCkKK3sKKyAgbG9jYWwgbWFjaGluZT0kMgorIAorICBpZiBbICIkMSIgPT0gIng4NiIgXSB8fCBbICIkMSIgPT0gIng4Nl82NCIgXTsgdGhlbgorICAgIGtlcm5lbD0iYnpJbWFnZS0kbWFjaGluZS5iaW4iCisgIGVsaWYgWyAiJDEiID09ICJwcGMiIF0gfHwgWyAiJDEiID09ICJtaXBzIiBdOyB0aGVuCisgICAga2VybmVsPSJ2bWxpbnV4LSRtYWNoaW5lLmJpbiIKKyAgZWxzZQorICAgIGtlcm5lbD0iekltYWdlLSRtYWNoaW5lLmJpbiIKKyAgZmkKKworICAjZWNob19pbmZvICJbQURUX0lOU1RdIERvd25sb2FkaW5nIHFlbXUga2VybmVsIGJpbmFyeTogJHFlbXVfa2VybmVsIgorICBkb3dubG9hZF9maWxlICRtYWNoaW5lLyRrZXJuZWwKKyAgY2hlY2tfcmVzdWx0CisgIAorICBmb3IgaW1hZ2VfdHlwZSBpbiAkc2VsZWN0X3Jvb3RmczsgZG8KKyAgICAjZWNob19pbmZvICJbQURUX0lOU1RdIERvd25sb2FkaW5nIHJvb3RmcyBmaWxlOiBjb3JlLWltYWdlLSRpbWFnZV90eXBlLSRtYWNoaW5lLnRhci5iejIiCisgICAgZmlsZW5hbWU9ImNvcmUtaW1hZ2UtJGltYWdlX3R5cGUtJG1hY2hpbmUudGFyLmJ6MiIKKyAgICBkb3dubG9hZF9maWxlICRtYWNoaW5lLyRmaWxlbmFtZQorICAgIGNoZWNrX3Jlc3VsdAorICBkb25lCit9CisKK2Rvd25sb2FkX2ltYWdlcygpCit7CisgIHNlbGVjdF9yb290ZnNfdmFyPSJcJFlPQ1RPQURUX1JPT1RGU18kMSIKKyAgc2VsZWN0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyQxIgorICBzZWxlY3Rfc3lzcm9vdF92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DXyQxIgorICBzZWxlY3RfbWFjaGluZV92YXI9IlwkWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfJDEiCisgIHNlbGVjdF9yb290ZnM9YGV2YWwgZWNobyAkc2VsZWN0X3Jvb3Rmc192YXJgCisgIHNlbGVjdF9zeXNyb290X2ltYWdlPWBldmFsIGVjaG8gJHNlbGVjdF9zeXNyb290X2ltYWdlX3ZhcmAKKyAgc2VsZWN0X3N5c3Jvb3Q9YGV2YWwgZWNobyAkc2VsZWN0X3N5c3Jvb3RfdmFyYAorICBzZWxlY3RfbWFjaGluZT1gZXZhbCBlY2hvICRzZWxlY3RfbWFjaGluZV92YXJgCisKKyAgaWYgWyAtbiAiJHNlbGVjdF9zeXNyb290IiBdOyB0aGVuCisgICAgc2VsZWN0X3N5c3Jvb3Q9YHJlYWRsaW5rIC1tICRzZWxlY3Rfc3lzcm9vdGAKKyAgZmkKKworICBpZiBbICIkc2VsZWN0X3Jvb3RmcyIgIT0gIiIgXTsgdGhlbgorICAgIGlmIFsgJDIgXTsgdGhlbgorICAgICNlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICAjZWNob19pbmZvICIjIFRvIGJlIGRvd25sb2FkZWQgcm9vdGZzIGltYWdlIGRldGFpbHMgZGVmaW5lZCBpbiBhZHRfaW5zdGFsbGVyLmNvbmYiCisgICAgI2VjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IGFyY2hpdGVjdHVyZTpcdFx0JDEiCisgICAgZWNob19pbmZvICIjIFRhcmdldCBtYWNoaW5lOlx0XHQkc2VsZWN0X21hY2hpbmUiCisgICAgZWNob19pbmZvICIjIFJvb3RfZnMgaW1hZ2VzOlx0XHQkc2VsZWN0X3Jvb3RmcyIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IHN5c3Jvb3QgaW1hZ2U6XHRcdCRzZWxlY3Rfc3lzcm9vdF9pbWFnZSIKKyAgICBlY2hvX2luZm8gIiMgVGFyZ2V0IHN5c3Jvb3QgbG9jOlx0XHQkc2VsZWN0X3N5c3Jvb3QiCisgICAgZWNob19pbmZvICJcbiIKKyAgICAjZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZWxzZQorICAgIGdldF9pbWFnZSAkMSAkc2VsZWN0X21hY2hpbmUgJHNlbGVjdF9yb290ZnMKKyAgICBmaQorICBmaQorfQorCisKKworCisjTWFpbiBib2R5IG9mIGluc3RhbGxlcgorCitjbGVhcgorCitydW5fcGF0aD1gZGlybmFtZSAkMGAKK2NkICRydW5fcGF0aAorCitpZiBbICEgLWYgInNjcmlwdHMvdXRpbCIgXTsgdGhlbgorICBlY2hvIC1lICJbQURUX0lOU1RdIEVycm9yOiBTY3JpcHQgZmlsZTogdXRpbCwgY2FuJ3QgYmUgZm91bmQgdW5kZXI6ICRydW5fcGF0aCEiCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworaWYgWyAhIC1mICJzY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwiIF07IHRoZW4KKyAgZWNobyAtZSAiW0FEVF9JTlNUXSBFcnJvcjogU2NyaXB0IGZpbGU6IGFkdF9pbnN0YWxsZXJfaW50ZXJuYWwsIGNhbid0IGJlIGZvdW5kIHVuZGVyOiAkcnVuX3BhdGghIgorICBlY2hvIC1lICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvIC1lICIjIE1lZXQgZXJyb3Iocykgd2hlbiBpbnN0YWxsaW5nIFlvY3RvIEFEVCEgUGxlYXNlIGNoZWNrIGxvZyBmaWxlIGZvciBkZXRhaWxzLiAiCisgIGVjaG8gLWUgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIGV4aXQgLTEKK2ZpCisKK2NvbmZpZ19maWxlPSJhZHRfaW5zdGFsbGVyLmNvbmYiCitpZiBbICEgLWYgIiRjb25maWdfZmlsZSIgXTsgdGhlbgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IEluc3RhbGxhdGlvbiBjb25maWd1cmF0aW9uIGZpbGU6IGFkdF9pbnN0YWxsZXIuY29uZiBpcyBub3QgZm91bmQhXG4iCisgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorICBlY2hvX2luZm8gIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURULiBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgIGV4aXQgLTEKK2ZpCisKKy4gc2NyaXB0cy9kYXRhX2RlZmluZQorLiBzY3JpcHRzL3V0aWwKKworCitpZiBbIC1mICIkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRSIgXTsgdGhlbgorICBybSAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorZmkKKworZWNobyAtbiAiUGxlYXNlIGVudGVyIHRoZSBpbnN0YWxsIGxvY2F0aW9uIChkZWZhdWx0OiAkREVGQVVMVF9JTlNUQUxMX0ZPTERFUik6ICIKK3JlYWQgSU5TVEFMTF9GT0xERVIKKworaWYgWyAiJElOU1RBTExfRk9MREVSIiA9ICIiIF07IHRoZW4KKyAgICBJTlNUQUxMX0ZPTERFUj0kREVGQVVMVF9JTlNUQUxMX0ZPTERFUgorZmkKKworZXZhbCBJTlNUQUxMX0ZPTERFUj0kKHByaW50ZiAiJXEiICIkSU5TVEFMTF9GT0xERVIiKQoraWYgWyAtZCAiJElOU1RBTExfRk9MREVSIiBdOyB0aGVuCisJZXhwb3J0IElOU1RBTExfRk9MREVSPSQoY2QgIiRJTlNUQUxMX0ZPTERFUiI7IHB3ZCkKK2Vsc2UKKwlleHBvcnQgSU5TVEFMTF9GT0xERVI9JChyZWFkbGluayAtbSAiJElOU1RBTExfRk9MREVSIikKK2ZpCisKK2lmIFsgLW4gIiQoZWNobyAkSU5TVEFMTF9GT0xERVJ8Z3JlcCAnICcpIiBdOyB0aGVuCisgICAgICAgZWNobyAiVGhlIHRhcmdldCBkaXJlY3RvcnkgcGF0aCAoJElOU1RBTExfRk9MREVSKSBjb250YWlucyBzcGFjZXMuIEFib3J0ISIKKyAgICAgICBleGl0IDEKK2ZpCisKK2NsZWFyCisKK3VzYWdlCisKK3VzZXJfaW5zdF90eXBlPSIkPyIKKwordmFsaWRhdGVfY29uZmlnCitjaGVja19yZXN1bHQKKworI2NoZWNrIGFkdF9yZXBvIGV4aXN0Cit3Z2V0IC0tc3BpZGVyICRZT0NUT0FEVF9SRVBPIDI+JjEgfCB0ZWUgLWEgIiRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFIgoraWYgZ3JlcCAtcSAiNDA0IE5vdCBGb3VuZCIgJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEU7IHRoZW4KKyAgZWNobyAtZSAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVE9BRFRfUkVQTyBkb2VzIG5vdCBleGlzdDogJFlPQ1RPQURUX1JFUE8iCisgIGVjaG8gLWUgIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG8gLWUgIiMgTWVldCBlcnJvcihzKSB3aGVuIGluc3RhbGxpbmcgWW9jdG8gQURUISBQbGVhc2UgY2hlY2sgbG9nIGZpbGUgZm9yIGRldGFpbHMuICIKKyAgZWNobyAtZSAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgZXhpdCAtMQorZmkKKworI2ZpcnN0bHkgd2UgbmVlZCB0byBpbnN0YWxsIG9wa2cgaG9zdAoraW5zdGFsbF9vcGtnCisKKyNDcmVhdGUgZm9sZGVycyBmb3IgaG9sZGluZyByb290ZnMvcWVtdSBpbWFnZXMKK2lmIFsgISAtZCAiJExPQ0FMX0RPV05MT0FEIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiQ3JlYXRpbmcgbmV3IGltYWdlcyBkb3dubG9hZGluZyBmb2xkZXI6ICRMT0NBTF9ET1dOTE9BRCAuLi4iCisgIG1rZGlyIC1wICRMT0NBTF9ET1dOTE9BRAorZmkKKworI2Rvd25sb2FkaW5nIHJlcXVpcmVkIHFlbXUgaW1hZ2VzL3Jvb3RmcworaWYgWyAiJHVzZXJfaW5zdF90eXBlIiA9PSAiMCIgXTsgdGhlbgorICBvdmVycmlkZV9vbGRmaWxlPTEKK2Vsc2UKKyAgb3ZlcnJpZGVfb2xkZmlsZT0wCitmaQorCitmb3IgYXJjaF90eXBlIGluICRZT0NUT0FEVF9UQVJHRVRTOyBkbworICBkb3dubG9hZF9pbWFnZXMgJGFyY2hfdHlwZQorZG9uZQorCitzY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwgJHVzZXJfaW5zdF90eXBlCisKK3Jlc3VsdD0iJD8iCisjZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKK2lmIFsgIiRyZXN1bHQiID09ICIwIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgIGVjaG9faW5mbyAiIyBZb2N0byBBRFQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4iCisgIGVjaG9faW5mbyAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCitmaQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvYWR0X2luc3RhbGxlci5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjdmYmQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL2FkdF9pbnN0YWxsZXIuY29uZgpAQCAtMCwwICsxLDc1IEBACisjIFlvY3RvIEFEVCBJbnN0YWxsZXIgQ29uZmlndXJhdGlvbiBGaWxlCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCisKKyMgWW91ciB5b2N0byBkaXN0cm8gcmVwb3NpdG9yeSwgdGhpcyBzaG91bGQgaW5jbHVkZSBJUEtHIGJhc2VkIHBhY2thZ2VzIGFuZCByb290IGZpbGVzeXN0ZW0gZmlsZXMgd2hlcmUgdGhlIGluc3RhbGxhdGlvbiBpcyBiYXNlZCBvbgorCitZT0NUT0FEVF9SRVBPPSJBRFRSRVBPIgorCisjIFRoZSBmb2xsb3dpbmcgYXJlIGZvciBzeXN0ZW0gd2lkZSBzZXR1cAorIyBUYXJnZXQgYXJjaGl0ZWN0dXJlcyB0aGF0IHlvdSB3YW50IHRvIHNldHVwIGhvc3QgY3Jvc3MgZGV2IGVudmlyb25tZW50IGZvcgorIyB2YWxpZCB2YWx1ZXMgYXJlOiBhcm0sIHg4NiwgeDg2XzY0LCBwcGMsIG1pcHMgd2l0aCBzcGFjZSBzZXBhcmF0aW9uIGJldHdlZW4gZW50cmllcworWU9DVE9BRFRfVEFSR0VUUz0iYXJtIHg4NiIKKyMgV2hldGhlciBpbnN0YWxsIHFlbXUgb3Igbm90LCB2YWxpZCBlbnRyaWVzIGFyZTogWS9OCitZT0NUT0FEVF9RRU1VPSJZIgorIyBXaGV0aGVyIGluc3RhbGwgdXNlci1tb2RlIG5mcyBvciBub3QsIHZhbGlkIGVudHJpZXMgYXJlOiBZL04uICBJZiB5b3Ugd2FudCB0byB1c2UgWW9jdG8gRWNsaXBzZSBwbHVnLWluIGFzIHlvdXIgZGV2IElERSwgeW91IG5lZWQgdG8gc2VsZWN0IGJvdGggcWVtdSBhbmQgTkZTCitZT0NUT0FEVF9ORlNfVVRJTD0iWSIKKworIyBUaGVzZSAyIHZhbHVlcyB3aWxsIGJlIHN1cHBvcnRlZCBpbiB0aGUgZnVydHVyZSBpbnN0YWxsZXIKKyNZT0NUT0FEVF9CSVRCQUtFPSJZIgorI1lPQ1RPQURUX01FVEFEQVRBPSJZIgorCisjVGhlIGZvbGxvd2luZ3MgYXJlIGZvciBzZXR0aW5nIHVwIHNwZWNpZmljIHRhcmdldCBhcmNoaXRlY3R1cmUKKyNZT0NUT0FEVF9ST09URlNfJGFyY2ggaXMgZm9yIHNwZWNpZnlpbmcgd2hhdCByb290IGZpbGVzeXN0ZW0gaW1hZ2UgZmlsZXMgeW91IHdhbnQgdG8gZG93bmxvYWQgZnJvbSB0aGUgcmVwb3NpdG9yeS4gVGhlIHZhbGlkIHZhbHVlcyB0byByZXBsYWNlICRhcmNoIGFyZTogYXJtLCB4ODYsIHg4Nl82NCwgcG93ZXJwYywgbWlwcy4gIFRoZSB2YWxpZCBpbWFnZSBmaWxlcyBhcmU6IG1pbmltYWwsIG1pbmltYWwtZGV2LCBzYXRvLCBzYXRvLWRldiwgc2F0by1zZGssbHNiLCBsc2ItZGV2LCBsc2Itc2RrLiAgSWYgeW91IHdhbnQgdG8gZG93bmxvYWQgbXVsdGlwbGUgaW1hZ2VzLCB0aGUgZW50cmllcyBhcmUgc3BhY2Ugc2VwYXJhdGVkCitZT0NUT0FEVF9ST09URlNfYXJtPSJtaW5pbWFsIHNhdG8tc2RrIgorI1NwZWNpZnkgd2hpY2ggcm9vdCBmaWxlc3lzdGVtIGZpbGUgdG8gdXNlIHRvIGV4dHJhY3QgYXMgdGFyZ2V0IHN5c3Jvb3QuICBQbGVhc2UgZW5zdXJlIHRoZSBlbnRyeSBpcyBpbiB0aGUgbGlzdCBvZiBkb3dubG9hZGVkIHJvb3QgZmlsZXN5c3RlbSBmaWxlcyB0aGF0IHNwZWNpZmllZCBhYm92ZSBpbiBZT0NUT0FEVF9ST09URlNfJGFyY2gKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX2FybT0ic2F0by1zZGsiCisjVGhlIG1hY2hpbmUgZm9yIHdoaWNoIHlvdSB3YW50IHRvIGRvd25sb2FkIHRoZSBpbWFnZS4gRWFjaCBtYWNoaW5lIG1pZ2h0IGhhdmUKKyNkaWZmZXJlbnQgY29tcGlsYXRpb24gb3B0aW9ucyBpbiBvcmRlciB0byBzZWxlY3QgY2VydGFpbiBoYXJkd2FyZSBtb2RlbHMgb3IKKyNjb25maWd1cmF0aW9ucworWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfYXJtPSJxZW11YXJtIgorI1RoZSBsb2NhdGlvbiB3aGVyZSB0aGUgdGFyZ2V0IHN5c3Jvb3Qgd2lsbCBiZSBzZXR1cAorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX2FybT0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfYXJtIgorCisKKyNIZXJlJ3MgYSB0ZW1wbGF0ZSBmb3Igc2V0dGluZyB1cCB0YXJnZXQgYXJjaCBvZiB4ODYgCitZT0NUT0FEVF9ST09URlNfeDg2PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFX3g4Nj0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfTUFDSElORV94ODY9InFlbXV4ODYiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfeDg2PSIkSE9NRS90ZXN0LXlvY3RvLyRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV94ODYiCisKKyNIZXJlJ3Mgc29tZSB0ZW1wbGF0ZSBvZiBvdGhlciBhcmNoZXMsIHdoaWNoIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgaW4gIiIKK1lPQ1RPQURUX1JPT1RGU194ODZfNjQ9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfeDg2XzY0PSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nl82ND0icWVtdXg4Ni02NCIKK1lPQ1RPQURUX1RBUkdFVF9TWVNST09UX0xPQ194ODZfNjQ9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX3g4Nl82NCIKKworWU9DVE9BRFRfUk9PVEZTX3BwYz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV9wcGM9InNhdG8tc2RrIgorWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfcHBjPSJxZW11cHBjIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX3BwYz0iJEhPTUUvdGVzdC15b2N0by8kWU9DVE9BRFRfVEFSR0VUX01BQ0hJTkVfcHBjIgorCitZT0NUT0FEVF9ST09URlNfbWlwcz0ic2F0by1zZGsiCitZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9JTUFHRV9taXBzPSJzYXRvLXNkayIKK1lPQ1RPQURUX1RBUkdFVF9NQUNISU5FX21pcHM9InFlbXVtaXBzIgorWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfTE9DX21pcHM9IiRIT01FL3Rlc3QteW9jdG8vJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FX21pcHMiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE2MjdiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGstaTY4Ni5jb25mCkBAIC0wLDAgKzEsNiBAQAorYXJjaCBhbGwgMQorYXJjaCBhbnkgNgorYXJjaCBub2FyY2ggMTEKK2FyY2ggaTY4Ni1uYXRpdmVzZGsgMTYKK3NyYyB5cC1pNjg2LW5hdGl2ZXNkayBBRFRSRVBPX1VSTC9hZHQtaXBrL2k2ODYtbmF0aXZlc2RrCitzcmMgeXAtaTY4Ni1hbGwgQURUUkVQT19VUkwvYWR0LWlway9hbGwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTA0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mCkBAIC0wLDAgKzEsNiBAQAorYXJjaCBhbGwgMQorYXJjaCBhbnkgNgorYXJjaCBub2FyY2ggMTEKK2FyY2ggeDg2XzY0LW5hdGl2ZXNkayAxNgorc3JjIHlwLXg4Nl82NC1uYXRpdmVzZGsgQURUUkVQT19VUkwvYWR0LWlway94ODZfNjQtbmF0aXZlc2RrCitzcmMgeXAteDg2XzY0LWFsbCBBRFRSRVBPX1VSTC9hZHQtaXBrL2FsbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvYWR0X2luc3RhbGxlcl9pbnRlcm5hbCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmY1ZmI0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwKQEAgLTAsMCArMSwzMTIgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworcGFyc2VfY29uZmlnKCkKK3sKKyAgSU5TVF9BUkNIPWB1bmFtZSAtbWAKKworICBjYXNlICRJTlNUX0FSQ0ggaW4gCisgIGlbMy02XTg2KQorICAgIE9QS0dfQ09ORklHX0ZJTEU9JFlPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzMyCisgICAgT0VDT1JFX05BVElWRV9TWVNST09UPSIkSU5TVEFMTF9GT0xERVIvc3lzcm9vdHMvJElOU1RfQVJDSCRTREtfVkVORE9SLWxpbnV4LyIKKyAgICA7OworICB4ODZfNjQpCisgICAgT1BLR19DT05GSUdfRklMRT0kWU9DVE9BRFRfT1BLR19DT05GX0ZJTEVfNjQKKyAgICBPRUNPUkVfTkFUSVZFX1NZU1JPT1Q9IiRJTlNUQUxMX0ZPTERFUi9zeXNyb290cy94ODZfNjQkU0RLX1ZFTkRPUi1saW51eC8iCisgICAgOzsKKyAgKikKKyAgICBlY2hvX2luZm8gIltBRFRfSU5TVF0gRXJyb3I6IEluc3RhbGxhdGlvbiBNYWNoaW5lIGlzIG5vdCBzdXBwb3J0ZWQhIgorICAgIGV4aXQgLTEKKyAgICA7OworICBlc2FjCit9CisKK2dldF9zdWRvX2FwcCgpCit7CisgIHVzZXJuYW1lPSQoaWQgLW51KQorCisgICMgZmluZCB0aGUgb3duZXIgb2YgdGhlIHBhcmVudAorICBkaXI9JDEKKyAgd2hpbGUgWyAxIF07IGRvCisgICAgICBpZiBbIC1kICRkaXIgXTsgdGhlbgorICAgICAgICAgIG93bmVyPSQoc3RhdCAtYyAlVSAkZGlyKQorICAgICAgICAgIGJyZWFrCisgICAgIGVsc2UKKyAgICAgICAgICBkaXI9JChkaXJuYW1lICRkaXIpCisgICAgIGZpCisgIGRvbmUKKworICBpZiBbICIkb3duZXIiID0gIiR1c2VybmFtZSIgXTsgdGhlbgorICAgICAgdHJ1ZQorICBlbHNlCisgICAgICBlY2hvIHN1ZG8KKyAgZmkKK30KKworIyB0aGlzIGZ1bmN0aW9uIGFjY2VwdHMgYXJjaF90eXBlICh4ODYsIHg4Nl82NCwgYXJtLCBwcGMsIG1pcHMpIGFzIHRoZSBmaXJzdAorIyBhcmd1bWVudCwgcmV0dXJuaW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyZ2V0IHJvb3RmcworZ2V0X3RhcmdldF9yb290ZnNfbG9jYXRpb24oKSB7CisJWyAteiAiJDEiIF0gJiYgcmV0dXJuCisKKwlhcmNoX3R5cGU9JDEKKwkjIHJvb3RmcyBleHRyYWN0aW9uIGRpcmVjdG9yeQorCXRhcmdldF9zeXNyb290X3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfU1lTUk9PVF9MT0NfJGFyY2hfdHlwZSIKKwl0YXJnZXRfc3lzcm9vdD1gZXZhbCBlY2hvICR0YXJnZXRfc3lzcm9vdF92YXJgCisKKwlpZiBbICIkdGFyZ2V0X3N5c3Jvb3QiID09ICIiIF07IHRoZW4KKwkJcmV0dXJuCisJZWxzZQorCQllY2hvICJgcmVhZGxpbmsgLW0gJHRhcmdldF9zeXNyb290YCIKKwlmaQorfQorCisKKyNsZXQgdXMgaW5zdGFsbCBhIHFlbXUtbmF0aXZlIGZpcnN0bHkKKyNpbnN0YWxsYXRpb24gc3RlcCAyCitpbnN0YWxsX25hdGl2ZV9zZGsoKQoreworCitlY2hvX2luZm8gIlxuU3RhcnQgaW5zdGFsbGluZyBzZWxlY3RlZCBuYXRpdmUgQURUIGZvciBhcmNoczogJFlPQ1RPQURUX1RBUkdFVFMuLi4iCisKKyMgd2hlcmUgdGhlIHBhY2thZ2VzIGFyZSBpbnN0YWxsZWQuCitOQVRJVkVfSU5TVEFMTF9ESVI9JElOU1RBTExfRk9MREVSCisKK2lmIFsgLWQgIiRJTlNUQUxMX0ZPTERFUiIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuTmF0aXZlIEFEVCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IFwiJElOU1RBTExfRk9MREVSXCIgYWxyZWFkeSBleGlzdHMhIENvbnRpbnVlIGluc3RhbGxhdGlvbiB3aWxsIG92ZXJyaWRlIGl0cyBjb250ZW50cyEiCisgIGNvbmZpcm1faW5zdGFsbCAkMQorZmkKKworI05vdyBiZWdpbiB0byBpbnN0YWxsIG5hdGl2ZSBzZGsgYW5kIGV4dHJhY3QgcWVtdSByb290ZnMgd2hpY2ggbmVlZHMgcHJpdmlsZWdlIHJpZ2h0cworI2RlcGVuZGluZyBvbiB0aGUgaW5zdGFsbCBsb2NhdGlvbgorU1VETz0kKGdldF9zdWRvX2FwcCAkTkFUSVZFX0lOU1RBTExfRElSKQoraWYgWyAtbiAiJFNVRE8iIF07IHRoZW4KKyAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgZWNob19pbmZvICJQbGVhc2Ugbm90ZSBmcm9tIHRoaXMgcG9pbnQgb24gaW5zdGFsbGF0aW9uIHJlcXVpcmVzIHN1ZG8gcGFzc3dvcmQgLi4uIgorICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorZmkKKworI3dlIG5lZWQgdG8gbWFrZSB0aGlzIGRpcmVjdG9yeSBmaXJzdGx5IHNpbmNlIG9wa2cgbmVlZCB0byB1c2UgaXQuCitPUEtHX0xPQ0tfRElSPSIkTkFUSVZFX0lOU1RBTExfRElSLyRPUEtHX0xJQkRJUi9vcGtnIgoraWYgWyAhIC1kICIkT1BLR19MT0NLX0RJUiIgXTsgdGhlbgorICAkU1VETyBta2RpciAtcCAkT1BLR19MT0NLX0RJUgorICBlY2hvX2luZm8gIlN1Y2Nlc3NmdWxseSBjcmVhdGUgZGlyZWN0b3J5ICRPUEtHX0xPQ0tfRElSLiAiCisjaWYgdXNlciBkZWxldGUgL29wdC94eHgsIHdoaWxlIGRhbmdsaW5nIGZvbGRlcnMgdGhlcmUsIHJlcG9ydCBlcnJvcgorZWxpZiBbICEgLWQgIiRJTlNUQUxMX0ZPTERFUiIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuRGFuZ2xpbmcgb3BrZyBjYWNoZSBmb2xkZXIgJE9QS0dfTE9DS19ESVIgZGV0ZWN0ZWQuIENvbnRpbnVlIGluc3RhbGxhdGlvbiB3aWxsIHJlbW92ZSB0aGUgZm9sZGVyISIKKyAgY29uZmlybV9pbnN0YWxsICQxCisgICRTVURPIHJtIC1yZiAkT1BLR19MT0NLX0RJUgorICAkU1VETyBta2RpciAtcCAkT1BLR19MT0NLX0RJUgorI2lmIHVzZXIgYXJlIHVwZGF0aW5nIGluc3RhbGxpbmcsIGp1c3QgbGV0IGhpbS9oZXIgZ28sIGdpdmUgaGVyL2hpbSBwcm9tcHQKK2Vsc2UKKyAgZWNob19pbmZvICJBRFQgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuIFdpbGwgdXBkYXRlIGl0cyBjb250ZW50cy4uLiIKK2ZpCisKKyNmaXJzdCB1cGRhdGUgcmVwb3NpdG9yeQoraWYgWyAieCRTVURPIiA9ICJ4IiBdOyB0aGVuCisgICAgT1BLR19DTUQ9IiRMT0NBTF9PUEtHX0xPQy9iaW4vb3BrZyIKK2Vsc2UKKyAgICBPUEtHX0NNRD0ic3VkbyAtRSAkTE9DQUxfT1BLR19MT0MvYmluL29wa2ciCitmaQorCitlY2hvX2luZm8gIlVwZGF0aW5nIG9wa2cuLi4iCiskT1BLR19DTUQgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiB1cGRhdGUgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCitjaGVja19yZXN1bHQKK2VjaG9faW5mbyAib3BrZyB1cGRhdGUgcHJvY2VzcyBlbmRlZC4uLiIKKworI2luc3RhbGwgYmVsb3cgbXVzdCBzZGstaG9zdCBwYWNrYWdlcworT1BLR19JTlNUQUxMX0NNRD0iJE9QS0dfQ01EICIKK09QS0dfSU5TVEFMTF9OQVRJVkVfQ01EPSIkT1BLR19JTlNUQUxMX0NNRCAgLS1mb3JjZS1vdmVyd3JpdGUgLWYgJE9QS0dfQ09ORklHX0ZJTEUgLW8gJE5BVElWRV9JTlNUQUxMX0RJUiBpbnN0YWxsIgorCitCQVNFX0hPU1RTREtfUEtHTkFNRVM9InBzZXVkbyBvcGtnIHBrZ2NvbmZpZyBsaWJ0b29sIGF1dG9jb25mIGF1dG9tYWtlIgorZm9yIHBrZyBpbiAkQkFTRV9IT1NUU0RLX1BLR05BTUVTOyBkbworICBlY2hvX2luZm8gIkluc3RhbGxpbmcgJHtwa2d9IG5hdGl2ZXNkayAuLi5cbiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIG5hdGl2ZXNkay0ke3BrZ30gJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorZG9uZQorCitmb3IgdGFyZ2V0X3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIG1hY2hpbmVfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9NQUNISU5FXyR0YXJnZXRfdHlwZSIKKyAgbWFjaGluZT1gZXZhbCBlY2hvICRtYWNoaW5lX3ZhcmAKKyAgZWNob19pbmZvICJJbnN0YWxsaW5nIGNyb3NzIGNhbmFkaWFuIHBhY2thZ2VzIGZvciAkbWFjaGluZSAuLi4iCisgICRPUEtHX0lOU1RBTExfTkFUSVZFX0NNRCBwYWNrYWdlZ3JvdXAtY3Jvc3MtY2FuYWRpYW4tJG1hY2hpbmUgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorCisgIHRhcmdldF9zeXNyb290PWBnZXRfdGFyZ2V0X3Jvb3Rmc19sb2NhdGlvbiAkdGFyZ2V0X3R5cGVgCisgIFsgLXogIiR0YXJnZXRfc3lzcm9vdCIgXSAmJiBjb250aW51ZQorCisgICMgZ2V0IHRoZSBlbnZpcm9ubWVudCBzZXR1cCBzY3JpcHQgcGF0aHM6IG9yaWdpbmFsICh0aGUgb25lIGJlZm9yZSByZWxvY2F0aW9uKQorICAjIGFuZCByZWxvY2F0ZWQKKyAgZW52X3NjcmlwdF9vcmlnaW5hbD1gJE9QS0dfQ01EIC1mICRPUEtHX0NPTkZJR19GSUxFIC1vICROQVRJVkVfSU5TVEFMTF9ESVIgZmlsZXMgbWV0YS1lbnZpcm9ubWVudC0kbWFjaGluZXxcCisJCQkJCQkJZ3JlcCBlbnZpcm9ubWVudC1zZXR1cGAKKyAgZW52X3NjcmlwdF9yZWxvY2F0ZWQ9JElOU1RBTExfRk9MREVSLyR7ZW52X3NjcmlwdF9vcmlnaW5hbCMjKi99CisKKyAgIyBvcGtnIHdpbGwgbm90IGluc3RhbGwgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuIHBhY2thZ2UgaWYgaXQgd2FzIGFscmVhZHkKKyAgIyBpbnN0YWxsZWQuIFNvLCB0aGUgZW52aXJvbm1lbnQgc2NyaXB0IGlzIGluIG9uZSBwbGFjZSBvciB0aGUgb3RoZXIuCisgIFsgLWUgIiRJTlNUQUxMX0ZPTERFUi8kZW52X3NjcmlwdF9vcmlnaW5hbCIgXSAmJiBlbnZfc2NyaXB0PSRJTlNUQUxMX0ZPTERFUi8kZW52X3NjcmlwdF9vcmlnaW5hbAorICBbIC1lICIkZW52X3NjcmlwdF9vcmlnaW5hbCIgXSAmJiBlbnZfc2NyaXB0PSRlbnZfc2NyaXB0X29yaWdpbmFsCisgIFsgLWUgIiRlbnZfc2NyaXB0X3JlbG9jYXRlZCIgXSAmJiBlbnZfc2NyaXB0PSRlbnZfc2NyaXB0X3JlbG9jYXRlZAorCisgICRTVURPIHNlZCAtaSAtZSAicyVTREtUQVJHRVRTWVNST09UPS4qJVNES1RBUkdFVFNZU1JPT1Q9JHRhcmdldF9zeXNyb290JWciICRlbnZfc2NyaXB0Citkb25lCisKK2lmIFsgIiRZT0NUT0FEVF9RRU1VIiA9PSAiWSIgXSB8fCBbICIkWU9DVE9BRFRfUUVNVSIgPT0gInkiIF07IHRoZW4KKyAgZWNob19pbmZvICJcbkluc3RhbGxpbmcgcWVtdSBuYXRpdmUgLi4uIgorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXFlbXUgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorICAkT1BLR19JTlNUQUxMX05BVElWRV9DTUQgbmF0aXZlc2RrLXFlbXUtaGVscGVyICY+PiAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorICBjaGVja19yZXN1bHQKK2ZpCisKK2lmIFsgIiRZT0NUT0FEVF9ORlNfVVRJTCIgPT0gIlkiIF0gfHwgWyAiJFlPQ1RPQURUX05GU19VVElMIiA9PSAieSIgXTsgdGhlbgorICBlY2hvX2luZm8gIlxuSW5zdGFsbGluZyB1bmZzIC4uLiIKKyAgJE9QS0dfSU5TVEFMTF9OQVRJVkVfQ01EIG5hdGl2ZXNkay11bmZzMyAmPj4gJFlPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEUKKyAgY2hlY2tfcmVzdWx0CitmaQorCisjIExvc2UgdGhlIC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBwYXJ0LCB3ZSBkb24ndCByZWFsbHkgbmVlZCB0byBrZWVwCisjIHRoZSBlbnRpcmUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gV2UgY291bGQgcGF0Y2ggb3BrZyB0byBkbyB0aGF0IGJ1dCBpdCdzIGZhcgorIyBzaW1wbGVyIHRvIGRvIHRoYXQgaGVyZSBhbmQgYWNoaWV2ZSB0aGUgc2FtZSByZXN1bHQuCisjIFRoaXMgaXMgZG9uZSBpbiB0d28gc3RlcHM6CitpZiBbIC1kICROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIgXTsgdGhlbgorICAgICMgU3RlcCAxOiBjb3B5IC4vb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSBjb250ZW50cyB0byAkTkFUSVZFX0lOU1RBTExfRElSLgorICAgICMgV2UgY2Fubm90IHVzZSBtb3ZlIGlmICROQVRJVkVfSU5TVEFMTF9ESVIgaXMgbm90IGVtcHR5IChmb3IgZXhhbXBsZTogY29udGFpbnMKKyAgICAjIGFub3RoZXIgU0RLKQorICAgICRTVURPIGNwIC1yICROQVRJVkVfSU5TVEFMTF9ESVIvJERFRkFVTFRfSU5TVEFMTF9GT0xERVIvKiAkTkFUSVZFX0lOU1RBTExfRElSCisKKyAgICAjIGRlbGV0ZSB0aGUgc291cmNlIGRpcmVjdG9yeSBub3cKKyAgICAkU1VETyBybSAtcmYgJE5BVElWRV9JTlNUQUxMX0RJUi8kREVGQVVMVF9JTlNUQUxMX0ZPTERFUi8qCisKKyAgICAjIFN0ZXAgMjogRGVsZXRlIHRoZSAuL29wdC8ke0RJU1RST30vJHtTREtfVkVSU0lPTn0gZGlyZWN0b3JpZXMgdG9vLCB0aGV5IHNob3VsZCBiZSBlbXB0eQorICAgIGRpcj0kTkFUSVZFX0lOU1RBTExfRElSLyRERUZBVUxUX0lOU1RBTExfRk9MREVSCisgICAgd2hpbGUgWyAiJGRpciIgIT0gIiROQVRJVkVfSU5TVEFMTF9ESVIiIF07IGRvCisgICAgICAgICMgaWYgdGhlIHVzZXIgY2hvc2UgLyBhcyB0aGUgaW5zdGFsbCBmb2xkZXIsIHRoZW4gd2Ugc2hvdWxkIGxlYXZlIC9vcHQgaW4gcGxhY2UKKyAgICAgICAgaWYgWyAiJGRpciIgPSAiL29wdCIgXTsgdGhlbgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZmkKKworICAgICAgICAjIHRyeSB0byBkZWxldGUgdGhlIGRpcmVjdG9yeSwgb25seSBpZiBpdCdzIGVtcHR5CisgICAgICAgICRTVURPIHJtZGlyICRkaXIKKyAgICAgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorCisgICAgICAgICMgZ28gdG8gdGhlIG5leHQgZGlyZWN0b3J5CisgICAgICAgIGRpcj0kKGRpcm5hbWUgJGRpcikKKyAgICBkb25lCisgICAgIyBTdGVwIDM6IFJld3JpdGUgdGhlICoubGlzdCBmaWxlcyB0byBjb250YWluIHRoZSBjb3JyZWN0IHBhdGhzCisgICAgJFNVRE8gZmluZCAkTkFUSVZFX0lOU1RBTExfRElSL3Zhci9saWIvb3BrZyAtdHlwZSBmIC1leGVjIHNlZCAtaSAtZSAnI14kREVGQVVMVF9JTlNUQUxMX0ZPTERFUiMkTkFUSVZFX0lOU1RBTExfRElSIycge30gXDsKK2ZpCisKKyMgTGluayB0aGUgbGQuc28uY2FjaGUgZmlsZSBpbnRvIHRoZSBob3N0cyBmaWxlc3lzdGVtCitpZiBbICEgLWYgIiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvZXRjL2xkLnNvLmNhY2hlIiBdOyB0aGVuCitlY2hvX2luZm8gIkxpbmsgdGhlIGxkLnNvLmNhY2hlIGZpbGUgaW50byB0aGUgaG9zdCBmaWxlc3lzdGVtIgorJFNVRE8gbG4gLXMgL2V0Yy9sZC5zby5jYWNoZSAkT0VDT1JFX05BVElWRV9TWVNST09UL2V0Yy9sZC5zby5jYWNoZQorY2hlY2tfcmVzdWx0CitmaQorCisjIHJlbG9jYXRlIGJpbmFyaWVzCitlY2hvX2luZm8gIlxuUmVsb2NhdGluZyBiaW5hcmllcyAuLi4iCitlc2NhcGVkX3Nka3BhdGg9JChlY2hvICRERUZBVUxUX0lOU1RBTExfRk9MREVSIHxzZWQgLWUgInM6W1wrXC5dOlxcXFxcXFxcXDA6ZyIpCisKKyMgV2UgZG9uJ3QgY2hhbmdlIHRoZSBzY3JpcHQgaW4tcGxhY2Ugc2luY2Ugd2UgbWF5IHdhbnQgdGhlIHVzZXIgdG8gcmUtcnVuCisjIGFkdC1pbnN0YWxsZXIgc2NyaXB0CitzZWQgLWUgInM6IyNERUZBVUxUX0lOU1RBTExfRElSIyM6JGVzY2FwZWRfc2RrcGF0aDoiIHNjcmlwdHMvcmVsb2NhdGVfc2RrLnB5ID4gc2NyaXB0cy9yZWxvY2F0ZV9zZGtfdG1wLnB5CitjaG1vZCAreCBzY3JpcHRzL3JlbG9jYXRlX3Nka190bXAucHkKKworZGxfcGF0aD0kKGZpbmQgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVC9saWIgLW5hbWUgImxkLWxpbnV4KiIpCitleGVjdXRhYmxlX2ZpbGVzPSQoZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UIC10eXBlIGYgLXBlcm0gLzExMSkKKworJFNVRE8gc2NyaXB0cy9yZWxvY2F0ZV9zZGtfdG1wLnB5ICRJTlNUQUxMX0ZPTERFUiAkZGxfcGF0aCAkZXhlY3V0YWJsZV9maWxlcworY2hlY2tfcmVzdWx0CisKKyMgcmVwbGFjZSAvb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfSB3aXRoIHRoZSBpbnN0YWxsIGZvbGRlciBpbiBhbGwgY29uZmlncworZW52X3NldHVwX3NjcmlwdD0kKGZpbmQgJE5BVElWRV9JTlNUQUxMX0RJUi8gLW5hbWUgImVudmlyb25tZW50LXNldHVwLSoiKQorJFNVRE8gc2VkIC1pIC1lICJzOiRERUZBVUxUX0lOU1RBTExfRk9MREVSOiROQVRJVkVfSU5TVEFMTF9ESVI6ZyIgJGVudl9zZXR1cF9zY3JpcHQKKworZmluZCAkT0VDT1JFX05BVElWRV9TWVNST09UIC10eXBlIGYgLWV4ZWMgZmlsZSAne30nIFw7IHwgZ3JlcCAiOi4qXChBU0NJSVx8c2NyaXB0XHxzb3VyY2VcKS4qdGV4dCIgfCBcCisgICAgY3V0IC1kJzonIC1mMSB8IHhhcmdzICRTVURPIHNlZCAtaSAtZSAiczokREVGQVVMVF9JTlNUQUxMX0ZPTERFUjokTkFUSVZFX0lOU1RBTExfRElSOmciCisKKyMgY2hhbmdlIGFsbCBzeW1saW5rcyBwb2ludGluZyB0byAvb3B0LyR7RElTVFJPfS8ke1NES19WRVJTSU9OfQorZm9yIGwgaW4gJChmaW5kICROQVRJVkVfSU5TVEFMTF9ESVIgLXR5cGUgbCk7IGRvCisgICAgJFNVRE8gbG4gLXNmbiAkKHJlYWRsaW5rICRsfHNlZCAtZSAiczokREVGQVVMVF9JTlNUQUxMX0ZPTERFUjokTkFUSVZFX0lOU1RBTExfRElSOiIpICRsCitkb25lCisKKyMgZmluZCBvdXQgYWxsIHBlcmwgc2NyaXB0cyBpbiAkT0VDT1JFX05BVElWRV9TWVNST09UIGFuZCBtb2RpZnkgdGhlbQorIyByZXBsYWNpbmcgdGhlIGhvc3QgcGVybCB3aXRoIFNESyBwZXJsLgorZm9yIHBlcmxfc2NyaXB0IGluICQoJFNVRE8gZ3JlcCAtbSAxICJeIyEuKnBlcmwiIC1ybCAkT0VDT1JFX05BVElWRV9TWVNST09UKTsgZG8KKyAgICAkU1VETyBzZWQgLWkgLWUgInM6XiMhICovdXNyL2Jpbi9wZXJsLio6IyEgL3Vzci9iaW4vZW52IHBlcmw6ZyIgLWUgXAorICAgICAgICAiczogL3Vzci9iaW4vcGVybDogL3Vzci9iaW4vZW52IHBlcmw6ZyIgJHBlcmxfc2NyaXB0Citkb25lCisKK2VjaG9faW5mbyAiXG5TdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHNlbGVjdGVkIG5hdGl2ZSBBRFQhIgorfQorCisjTmVlZCB0aHJlZSBpbnB1dCBwYXJhbXMsICQxIC0tIGFyY2hfdHlwZShhcm0gcG93ZXJwYyB4ODYgbWlwcykgIzIgLS0gdXNlciBpbnN0YWxsYXRpb24gdHlwZQorI2N1c3RvbWVyIG9yIHNjaWxlbnQKKworaW5zdGFsbF90YXJnZXQoKQoreworCit0YXJnZXRfc3lzcm9vdD1gZ2V0X3RhcmdldF9yb290ZnNfbG9jYXRpb24gJDFgCitbIC16ICIkdGFyZ2V0X3N5c3Jvb3QiIF0gJiYgcmV0dXJuIDAKKwordGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyPSJcJFlPQ1RPQURUX1RBUkdFVF9TWVNST09UX0lNQUdFXyQxIgordGFyZ2V0X3N5c3Jvb3RfaW1hZ2U9YGV2YWwgZWNobyAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2VfdmFyYAoraWYgWyAiJHRhcmdldF9zeXNyb290X2ltYWdlIiA9PSAiIiBdOyB0aGVuCisgIGVjaG9faW5mbyAiW0FEVF9JTlNUXSBFcnJvcjogWU9DVE9BRFRfVEFSR0VUX1NZU1JPT1RfSU1BR0VfJDEgc2VsZWN0aW9uIGlzIGVtcHR5LCBmYWlsZWQgdG8gY3JlYXRlIHRhcmdldCBzeXNyb290ISIKKyAgcmV0dXJuIDEKK2ZpCisKK2VjaG9faW5mbyAiSW5zdGFsbGluZyB0YXJnZXQgc3lzcm9vdCBmb3IgYXJjaDogJDEsIHJvb3RmcyB0eXBlOiAkdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UsIGxvY2F0aW9uOiAkdGFyZ2V0X3N5c3Jvb3QiCisKK3RhcmdldF9tYWNoaW5lX3Zhcj0iXCRZT0NUT0FEVF9UQVJHRVRfTUFDSElORV8kMSIKK3RhcmdldF9tYWNoaW5lPWBldmFsIGVjaG8gJHRhcmdldF9tYWNoaW5lX3ZhcmAKK3N5c3Jvb3RfaW1hZ2VfbmFtZT0iY29yZS1pbWFnZS0kdGFyZ2V0X3N5c3Jvb3RfaW1hZ2UtJHRhcmdldF9tYWNoaW5lLnRhci5iejIiCisgICAgI2VjaG9faW5mbyAiRXh0cmFjdGluZyByb290ZnM6ICRzeXNyb290X2ltYWdlX25hbWUsIHVzaW5nIHBzZXVkby4uLiIKKworIyBzdWRvIHBhc3N3b3JkIG1pZ2h0IGJlIG5lZWRlZCB0byBpbnN0YWxsIHRoZSB0YXJnZXQgc3lzcm9vdAorU1VETz0kKGdldF9zdWRvX2FwcCAkdGFyZ2V0X3N5c3Jvb3QpCisKKyRTVURPIHNjcmlwdHMvZXh0cmFjdF9yb290ZnMgJHN5c3Jvb3RfaW1hZ2VfbmFtZSAkdGFyZ2V0X3N5c3Jvb3QgJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCAkdXNlcl9pbnN0X3R5cGUKK2NoZWNrX3Jlc3VsdAorfQorCisKKyNNYWluIHBhcnQKKy4gc2NyaXB0cy9kYXRhX2RlZmluZQorLiBzY3JpcHRzL3V0aWwKKworcGFyc2VfY29uZmlnCisKKyNzZWNvbmRseSB3ZSB3aWxsIHN0YXJ0IHRvIGluc3RhbGwgbmF0aXZlIHRvb2xzCit1c2VyX2luc3RfdHlwZT0kMQoraW5zdGFsbF9uYXRpdmVfc2RrICR1c2VyX2luc3RfdHlwZQorY2hlY2tfcmVzdWx0CisKK2ZvciBhcmNoX3R5cGUgaW4gJFlPQ1RPQURUX1RBUkdFVFM7IGRvCisgIGluc3RhbGxfdGFyZ2V0ICRhcmNoX3R5cGUKKyAgY2hlY2tfcmVzdWx0Citkb25lCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZGF0YV9kZWZpbmUgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9kYXRhX2RlZmluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmQ2NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvZGF0YV9kZWZpbmUKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL2Jhc2gKKworIyBZb2N0byBBRFQgSW5zdGFsbGVyCisjCisjIENvcHlyaWdodCAyMDEwLTIwMTEgYnkgSW50ZWwgQ29ycC4KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgCisjIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyAKKyMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiAKKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIAorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorIyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCAKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiAKKyMgVEhFIFNPRlRXQVJFLgorCitjb25maWdfZmlsZT0iYWR0X2luc3RhbGxlci5jb25mIgorc291cmNlIGBwd2RgLyRjb25maWdfZmlsZQorCitMT0NBTF9PUEtHX0xPQz0iLi9vcGtnL2J1aWxkL29wa2ciCitMT0NBTF9PUEtHX0ZPTERFUj0iLi9vcGtnL2J1aWxkIgorCisjIExpc3QgYWxsIHN1cHBvcnRlZCByb290IGZzIHR5cGVzIGFuZCB0YXJnZXQgdHlwZXMsCisjIGl0IHdpbGwgYmUgdXNlZCBpbiB1c2VyIGNvbmZpZ3VyYXRpb24gdmFsaWRpdHkgY2hlY2tpbmcKK1lPQ1RPQURUX1NVUFBPUlRFRF9ST09URlM9Im1pbmltYWwgbWluaW1hbC1kZXYgc2F0byBzYXRvLWRldiBzYXRvLXNkayBsc2IgbHNiLWRldiBsc2Itc2RrIgorWU9DVE9BRFRfU1VQUE9SVEVEX1RBUkdFVFM9Ing4NiB4ODZfNjQgYXJtIHBwYyBtaXBzIgorIyBEaWZmZXJlbnQgaG9zdCAoMzIgYml0IG9yIDY0IGJpdCkgd2lsbCBoYXZlIGRpZmZlcmVudCBvcGtnCisjIGNvbmZpZ3VyYXRpb24gZmlsZXMKK1lPQ1RPQURUX09QS0dfQ09ORl9GSUxFXzMyPSIuL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYiCitZT0NUT0FEVF9PUEtHX0NPTkZfRklMRV82ND0iLi9vcGtnL2NvbmYvb3BrZy1zZGsteDg2XzY0LmNvbmYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL2V4dHJhY3Rfcm9vdGZzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxYTU5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXIvc2NyaXB0cy9leHRyYWN0X3Jvb3RmcwpAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vYmFzaAorCisjIFlvY3RvIEFEVCBJbnN0YWxsZXIKKyMKKyMgQ29weXJpZ2h0IDIwMTAtMjAxMSBieSBJbnRlbCBDb3JwLgorIworIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IAorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCAKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKKyMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIAorIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIAorIyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIAorIyBUSEUgU09GVFdBUkUuCisKK2V4dHJhY3Rfcm9vdGZzKCkKK3sKKworICBuYXRpdmVfc3lzcm9vdD0kMworICB0YXJnZXRfc3lzcm9vdD0kMgorICBQU0VVRE9fQ09NTUFORD0iJG5hdGl2ZV9zeXNyb290L3Vzci9iaW4vcHNldWRvIgorICBUQVJfT1BUUz0iLXhqZiIKKyAgUFNFVURPX09QVFM9Ii1QICRuYXRpdmVfc3lzcm9vdC91c3IiCisKKworICBybSAtcmYgJFBTRVVET19MT0NBTFNUQVRFRElSCisKKyAgaWYgWyAtZCAiJHRhcmdldF9zeXNyb290IiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcblRhcmdldCBzeXNyb290IGxvY2F0aW9uOiAkdGFyZ2V0X3N5c3Jvb3QsIGFscmVhZHkgZXhpc3RzISBJZiB5b3UgY29udGludWUgaW5zdGFsbGF0aW9uLCB0aGlzIGZvbGRlciB3aWxsIGJlIHJlLWNyZWF0ZWQuIgorICAgIGNvbmZpcm1faW5zdGFsbCAkNAorICAgIHJtIC1yZiAiJHRhcmdldF9zeXNyb290IgorICBmaQorCisgIGlmIFsgISAtZCAiJHRhcmdldF9zeXNyb290IiBdOyB0aGVuCisgICAgZWNob19pbmZvICJDcmVhdGluZyBkaXJlY3RvcnkgJHRhcmdldF9zeXNyb290Li4uIgorICAgIG1rZGlyIC1wICIkdGFyZ2V0X3N5c3Jvb3QiCisgIGZpCisKKyAgcHNldWRvX3N0YXRlX2Rpcj0iJHRhcmdldF9zeXNyb290Ly4uLyQoYmFzZW5hbWUgIiR0YXJnZXRfc3lzcm9vdCIpLnBzZXVkb19zdGF0ZSIKKyAgbWtkaXIgLXAgIiRwc2V1ZG9fc3RhdGVfZGlyIgorICB0b3VjaCAiJHBzZXVkb19zdGF0ZV9kaXIvcHNldWRvLnBpZCIKKyAgUFNFVURPX0xPQ0FMU1RBVEVESVI9IiRwc2V1ZG9fc3RhdGVfZGlyIgorICBleHBvcnQgUFNFVURPX0xPQ0FMU1RBVEVESVIKKworICBlY2hvX2luZm8gIkV4dHJhY3Rpbmcgcm9vdGZzOiAkMSwgdXNpbmcgcHNldWRvLi4uIgorICAkUFNFVURPX0NPTU1BTkQgJFBTRVVET19PUFRTIHRhciAtQyAkMiAiJFRBUl9PUFRTIiAkTE9DQUxfRE9XTkxPQUQvJDEgJj4+ICRZT0NUT0FEVF9JTlNUQUxMX0xPR19GSUxFCisgIGNoZWNrX3Jlc3VsdAorfQorCisjTWFpbiBwYXJ0CisuIHNjcmlwdHMvdXRpbAorCisjUGFyYW1ldGVyIGRldGFpbCBpcyBsaXN0ZWQgYmVsb3c6CisjUGFyYW0gNDogU2lsZW50IGluc3RhbGwgb3IgY3VzdG9taXplIGluc3RhbGwKKyNQYXJhbSAzOiBPRUNPUkVfTkFUSVZFX1NZU1JPT1QKKyNQYXJhbSAyOiB1c2VyIGRlZmluZWQgcm9vdGZzIGV4dHJhY3Rpb24gZGlyZWN0b3J5CisjcGFyYW0gMTogc3lzcm9vdCBpbWFnZSBuYW1lCitleHRyYWN0X3Jvb3RmcyAkMSAkMiAkMyAkNApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyL3NjcmlwdHMvdXRpbCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL3V0aWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNzUxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvYWR0LWluc3RhbGxlci9zY3JpcHRzL3V0aWwKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9iYXNoCisKKyMgWW9jdG8gQURUIEluc3RhbGxlcgorIworIyBDb3B5cmlnaHQgMjAxMC0yMDExIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworZWNob19pbmZvKCkKK3sKKyAgZWNobyAtZSAkMSB8IHRlZSAtYSAkWU9DVE9BRFRfSU5TVEFMTF9MT0dfRklMRQorfQorCitzZWxlY3RfaW5zdGFsbF90eXBlKCkKK3sKKyMgSWYgY2hvb3Npbmcgc2lsZW50IGluc3RhbGwsIGFsbCBvbGRlciBpbnN0YWxsYXRpb24gZGF0YSB3aWxsIGJlCisjIG92ZXJyaWRlbiB3aXRob3V0IHVzZXIncyBpbnRlcmFjdGlvbgord2hpbGUgdHJ1ZTsgZG8KKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBTaWxlbnQgaW5zdGFsbCBtZWFucyBvdmVycmlkZXMgYWxsIGV4aXN0aW5nIG9sZGVyIgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIGRhdGEgYW5kIHRoZSBpbnN0YWxsYXRpb24gbmVlZHMgbGVhc3QgdXNlciBpbnRlcmFjdGlvbiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUXSBJZiB5b3Ugd2FudCB0byB1c2Ugc2lsZW50IGluc3RhbGxhdGlvbiwgcGxlYXNlIGVudGVyIFM6IgorICAjZWNob19pbmZvICJbQURUX0lOU1RdIElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSBpbnN0YWxsYXRpb24sIHBsZWFzZSBlbnRlciBDOiIKKyAgI2VjaG9faW5mbyAiW0FEVF9JTlNUfSBJZiB5b3Ugd2FudCB0byBleGl0IGN1cnJlbnQgaW5zdGFsbGF0aW9uLCBwbGVhc2UgZW50ZXIgWDoiCisgIGVjaG9faW5mbyAiVGhlcmUncmUgdHdvIHdheXMgeW91IGNhbiBkbyBpbnN0YWxsYXRpb246IHNpbGVudCBtb2RlIG9yIGludGVyYWN0aXZlIG1vZGUuIFRvIGNob29zZSBzaWxlbnQgbW9kZSwgd2hpY2ggbWVhbnMgeW91IG9wdCBmb3IgdGhlIHN5c3RlbSB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgZGF0YSB1bmRlciB0aGUgc3BlY2lmaWVkIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllcyB3aXRob3V0IHByb21wdGluZyBmb3IgeW91ciBjb25maXJtYXRpb24uICBQbGVhc2UgYmUgY2F1dGlvdXMgd2l0aCB0aGlzIHNlbGVjdGlvbiB3aGljaCBtYXkgdHJpZ2dlciB5b3VyIGxvc2luZyBkYXRhLiAgV2l0aCB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgeW91IGhhdmUgdG8gY2xvc2VseSBtb25pdG9yIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcywgc2luY2UgaXQgd2lsbCBwcm9tcHQgeW91IGVhY2ggc3RlcCBpdCBuZWVkcyB0byBvdmVycmlkZSBzb21lIGV4aXN0aW5nIGRhdGEuICBUbyBjaG9vc2Ugc2lsZW50IG1vZGUsIHBsZWFzZSBlbnRlciBbU10sIGZvciBpbnRlcmFjdGl2ZSBtb2RlLCBwbGVhc2UgZW50ZXIgW0ldIG9yIFtYXSB0byBleGl0IHRoZSBpbnN0YWxsYXRpb24uIgorICBlY2hvX2luZm8gIltBRFRfSU5TVF0gUGxlYXNlIGVudGVyIHlvdXIgc2VsZWN0aW9ucyBoZXJlOiIKKyAgcmVhZCBZT0NUT0FEVF9TRUwKKyAgWU9DVE9BRFRfU0VMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX1NFTCJgCisgIGlmIFsgIiRZT0NUT0FEVF9TRUwiID09ICJTIiBdOyB0aGVuCisgICAgcmV0dXJuICIwIgorICBlbGlmIFsgIiRZT0NUT0FEVF9TRUwiID09ICJJIiBdOyB0aGVuCisgICAgcmV0dXJuICIxIgorICBlbGlmIFsgIiRZT0NUT0FEVF9TRUwiID09ICJYIiBdOyB0aGVuCisgICAgZWNob19pbmZvICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKyAgICBlY2hvX2luZm8gIiMgVXNlciBjYW5jZWxsZWQgaW5zdGFsbGF0aW9uISIKKyAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIgorICAgIGV4aXQgMQorICBmaQorZG9uZQorCisKK30KKworY29uZmlybV9pbnN0YWxsKCkKK3sKKyMgYmVsb3cgYXJlIHByb21wdCwgbWFrZSBzdXJlIHVzZXIgc3RpbGwgd2FudCB0byBpbnN0YWxsIGV2ZW4gbWVldAorIyBzb21lIHByb21wdHMKKworI1VzZXIgbGlrZXMgdG8gZW5qb3kgc2lsZW50IGluc3RhbGxhdGlvbiwgd2Ugd2lsbCBub3QgYnJlYWsgaGlzCisjaW5zdGFsbGF0aW9uIHByb2Nlc3MgaGVyZQoraWYgWyAiJDEiID09ICIwIiBdOyB0aGVuCisgIHJldHVybgorZmkKKword2hpbGUgdHJ1ZTsgZG8KKyAgZWNob19pbmZvICJbQURUX0lOU1RdIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlIGluc3RhbGxhdGlvbj8gUGxlYXNlIGVudGVyIFkvTjoiCisgIHJlYWQgWU9DVE9BRFRfSU5TVEFMTAorICBZT0NUT0FEVF9JTlNUQUxMPWB0ciAnW2Etel0nICdbQS1aXSc8PDwiJFlPQ1RPQURUX0lOU1RBTEwiYAorICBpZiBbICIkWU9DVE9BRFRfSU5TVEFMTCIgPT0gIlkiIF07IHRoZW4KKyAgICBicmVhaworICBlbGlmIFsgIiRZT0NUT0FEVF9JTlNUQUxMIiA9PSAiTiIgXTsgdGhlbgorICAgIGVjaG9faW5mbyAiXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgZWNob19pbmZvICIjIFVzZXIgY2FuY2VsbGVkIGluc3RhbGxhdGlvbiEiCisgICAgZWNob19pbmZvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcbiIKKyAgICBleGl0IDEKKyAgZmkKK2RvbmUKK30KKworY2hlY2tfcmVzdWx0KCkKK3sKKyAgcmVzdWx0PSQ/CisgIGlmIFsgJHJlc3VsdCAtZXEgMSBdOyB0aGVuCisgICAgZXhpdCAtMQorICBlbGlmIFsgICRyZXN1bHQgLW5lIDAgXTsgdGhlbgorICAgICBlY2hvX2luZm8gIlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCisgICAgIGVjaG9faW5mbyAiIyBNZWV0IGVycm9yKHMpIHdoZW4gaW5zdGFsbGluZyBZb2N0byBBRFQhIFBsZWFzZSBjaGVjayBsb2cgZmlsZSBmb3IgZGV0YWlscy4gIgorICAgICBlY2hvX2luZm8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iCisgICAgZXhpdCAtMQorICBmaQorfQorCisjIHlvY3RvIGFkdCBpbnN0YWxsYXRpb24gbG9nIGZpbGUKK1lPQ1RPQURUX0lOU1RBTExfTE9HX0ZJTEU9ImFkdF9pbnN0YWxsZXIubG9nIgorIyBUZW1wIGZvbGRlcnMgaG9sZGluZyBxZW11L3Jvb3RmcyBkb3dubG9hZGVkIGltYWdlcworIyBJdCB3aWxsIGJlIHB1dCBpbnRvIHRoZSBpbnN0YWxsYXRpb24gZm9sZGVyCitMT0NBTF9ET1dOTE9BRD0iLi9kb3dubG9hZF9pbWFnZSIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW5zdGFsbGVyL2FkdC1pbnN0YWxsZXJfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmUzODUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9hZHQtaW5zdGFsbGVyXzEuMC5iYgpAQCAtMCwwICsxLDk1IEBACisjIFlvY3RvIEFEVCBJbnN0YWxsZXIgYmIgZmlsZQorIworIyBDb3B5cmlnaHQgMjAxMC0yMDEyIGJ5IEludGVsIENvcnAuCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgCisjIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIAorIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIAorIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIAorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSAKKyMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gCisjIFRIRSBTT0ZUV0FSRS4KKworCitTVU1NQVJZID0gIkFwcGxpY2F0aW9uIERldmVsb3BtZW50IFRvb2xraXQiCitERVNDUklQVElPTiA9ICJDcmVhdGVzIHRoZSBBcHBsaWNhdGlvbiBEZXZlbG9wbWVudCBUb29sa2l0IChBRFQpIGluc3RhbGxlciB0YXJiYWxsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy55b2N0b3Byb2plY3Qub3JnL3Rvb2xzLXJlc291cmNlcy9wcm9qZWN0cy9hcHBsaWNhdGlvbi1kZXZlbG9wbWVudC10b29sa2l0LWFkdCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorTElDRU5TRSA9ICJNSVQiCisKK1BBQ0tBR0VTID0gIiIKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1BSID0gInIxMSIKKworQURUX0RFUExPWSA9ICIke0RFUExPWV9ESVJ9L3Nkay8iCitBRFRfRElSID0gIiR7V09SS0RJUn0vYWR0LWluc3RhbGxlci8iCitTID0gIiR7V09SS0RJUn0vb3BrZy0ke1BWfSIKKworUFYgPSAiMC4zLjAiCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9vcGtnL29wa2ctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3dnZXRfY2FjaGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWR0X2luc3RhbGxlciBcCisgICAgICAgICAgIGZpbGU6Ly9zY3JpcHRzL2FkdF9pbnN0YWxsZXJfaW50ZXJuYWwgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy91dGlsIFwKKyAgICAgICAgICAgZmlsZTovL3NjcmlwdHMvZGF0YV9kZWZpbmUgXAorICAgICAgICAgICBmaWxlOi8vc2NyaXB0cy9leHRyYWN0X3Jvb3RmcyBcCisgICAgICAgICAgIGZpbGU6Ly9hZHRfaW5zdGFsbGVyLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vb3BrZy9jb25mL29wa2ctc2RrLXg4Nl82NC5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL29wa2cvY29uZi9vcGtnLXNkay1pNjg2LmNvbmYgXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzQxMmNkYzcxZDc4Yjk4ZmFjYzg0YjE5MzMxZWM2NGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y3MzVkMWNkYjhlZjM3MThmYjBmOWZiYTQ0Y2EwZDlhNWM5MGQzYTdmMDE0ZjM3YTZkMmY5NDc0ZjU0OTg4ZiIKKworQURUUkVQTyA/PSAiaHR0cDovL2FkdHJlcG8ueW9jdG9wcm9qZWN0Lm9yZy8ke1NES19WRVJTSU9OfSIKKworIyBUaGlzIHJlY2lwZSBtYWtlcyBubyBzZW5zZSBhcyBhIG11bHRpbGliCitNVUxUSUxJQlMgPSAiIgorCitkb19wb3B1bGF0ZV9hZHRbdW1hc2tdID0gIjAyMiIKKworZmFrZXJvb3QgZG9fcG9wdWxhdGVfYWR0ICgpIHsKKwljZCAke1dPUktESVJ9CisJbWtkaXIgLXAgJHtBRFRfREVQTE9ZfQorCXJtIC1mICR7QURUX0RFUExPWX0vYWR0X2luc3RhbGxlci50YXIuYnoyCisJcm0gLXJmICR7QURUX0RJUn0KKwlta2RpciAtcCAke0FEVF9ESVJ9L29wa2cvYnVpbGQKKwljcCAtciBvcGtnICR7QURUX0RJUn0vCisJc2VkIC1pIC1lICdzI0FEVFJFUE9fVVJMIyR7QURUUkVQT30jJyAke0FEVF9ESVJ9L29wa2cvY29uZi8qLmNvbmYKKwljcCAtciBvcGtnLSR7UFZ9ICR7QURUX0RJUn0vb3BrZy9idWlsZC8KKwltdiAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy0ke1BWfSAke0FEVF9ESVJ9L29wa2cvYnVpbGQvb3BrZy1zdm4KKwlybSAtcmYgJHtBRFRfRElSfS9vcGtnL2J1aWxkL29wa2ctc3ZuL3BhdGNoZXMgJHtBRFRfRElSfS9vcGtnL2J1aWxkL29wa2ctc3ZuLy5wYworCWNwIC1yIHNjcmlwdHMgJHtBRFRfRElSfS8KKwljcCBhZHRfaW5zdGFsbGVyICR7QURUX0RJUn0KKwljcCBhZHRfaW5zdGFsbGVyLmNvbmYgJHtBRFRfRElSfQorCXNlZCAtaSAtZSAncyNBRFRSRVBPIyR7QURUUkVQT30jJyAke0FEVF9ESVJ9L2FkdF9pbnN0YWxsZXIuY29uZgorCWVjaG8gJ1NES19WRU5ET1I9JHtTREtfVkVORE9SfScgPj4gJHtBRFRfRElSfS9zY3JpcHRzL2RhdGFfZGVmaW5lCisJZWNobyAnREVGQVVMVF9JTlNUQUxMX0ZPTERFUj0ke1NES1BBVEh9JyA+PiAke0FEVF9ESVJ9L3NjcmlwdHMvZGF0YV9kZWZpbmUKKwljcCAke0NPUkVCQVNFfS9zY3JpcHRzL3JlbG9jYXRlX3Nkay5weSAke0FEVF9ESVJ9L3NjcmlwdHMvCisJdGFyIGNmaiBhZHRfaW5zdGFsbGVyLnRhci5iejIgYWR0LWluc3RhbGxlcgorCWNwICR7V09SS0RJUn0vYWR0X2luc3RhbGxlci50YXIuYnoyICR7QURUX0RFUExPWX0KK30KKworZG9fcG9wdWxhdGVfYWR0W25vc3RhbXBdID0gIjEiCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCitkb19wYWNrYWdlW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2VkYXRhW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfaXBrW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfcnBtW25vZXhlY10gPSAiMSIKK2RvX3BhY2thZ2Vfd3JpdGVfZGViW25vZXhlY10gPSAiMSIKK2RvX3BvcGx1bGF0ZV9zeXNyb290W25vZXhlY10gPSAiMSIKKworYWRkdGFzayBwb3B1bGF0ZV9hZHQgYmVmb3JlIGRvX2J1aWxkIGFmdGVyIGRvX2luc3RhbGwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvZmlsZXMvd2dldF9jYWNoZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnN0YWxsZXIvZmlsZXMvd2dldF9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTE3NTEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2luc3RhbGxlci9maWxlcy93Z2V0X2NhY2hlLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworLS0tCisgbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvbGlib3BrZy9vcGtnX2Rvd25sb2FkX3dnZXQuYyBiL2xpYm9wa2cvb3BrZ19kb3dubG9hZF93Z2V0LmMKK2luZGV4IDkwMDE0OTMuLjE4ZWY5MWUgMTAwNjQ0CistLS0gYS9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jCisrKysgYi9saWJvcGtnL29wa2dfZG93bmxvYWRfd2dldC5jCitAQCAtNTAsNiArNTAsNyBAQCBpbnQgb3BrZ19kb3dubG9hZF9iYWNrZW5kKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZGVzdCwKKyAKKyAgICAgYXJndltpKytdID0gIndnZXQiOworICAgICBhcmd2W2krK10gPSAiLXEiOworKyAgICBhcmd2W2krK10gPSAiLS1uby1jYWNoZSI7CisgICAgIGlmIChvcGtnX2NvbmZpZy0+aHR0cF9wcm94eSB8fCBvcGtnX2NvbmZpZy0+ZnRwX3Byb3h5KSB7CisgICAgICAgICBhcmd2W2krK10gPSAiLVkiOworICAgICAgICAgYXJndltpKytdID0gIm9uIjsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3NzcwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC5pbmMKQEAgLTAsMCArMSwyNyBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IHNjcmlwdHMgZm9yIGludGVybmF0aW9uYWxpemluZyBYTUwiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKKworVVJMVj0iJHtAJy4nLmpvaW4oZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzA6Ml0pfSIKK1NSQ19VUkkgPSAiaHR0cDovL2xhdW5jaHBhZC5uZXQvJHtCUE59L3RydW5rLyR7UFZ9Lytkb3dubG9hZC8ke0JQfS50YXIuZ3oiCitTID0gIiR7V09SS0RJUn0vaW50bHRvb2wtJHtQVn0iCisKK0RFUEVORFMgPSAibGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ID0gImdldHRleHQtZGV2IGxpYnhtbC1wYXJzZXItcGVybCIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCisjIGdldHRleHQgaXMgYXNzdW1lZCB0byBleGlzdCBvbiB0aGUgaG9zdAorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gImxpYnhtbC1wYXJzZXItcGVybC1uYXRpdmUiCitSUkVDT01NRU5EU18ke1BOfSA9ICJwZXJsLW1vZHVsZXMiCitSUkVDT01NRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitGSUxFU18ke1BOfS1kZXYgPSAiIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKKworSU5TQU5FX1NLSVBfJHtQTn0gKz0gImRldi1kZXBzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgcGVybG5hdGl2ZQorCitleHBvcnQgUEVSTCA9ICIke2JpbmRpcn0vZW52IHBlcmwiCitQRVJMX2NsYXNzLW5hdGl2ZSA9ICIvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvaW50bHRvb2wtbm93YXJuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL2ludGx0b29sLW5vd2Fybi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmM5MzhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL2ludGx0b29sLW5vd2Fybi5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogaW50bHRvb2wtMC40MC4wL2ludGx0b29sLWV4dHJhY3QuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjUwLjAub3JpZy9pbnRsdG9vbC1leHRyYWN0LmluCTIwMTEtMTAtMDggMjI6MjQ6NTcuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLWV4dHJhY3QuaW4JMjAxMS0xMi0wNyAxNjowNDowNy4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13IAorKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIworSW5kZXg6IGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1tZXJnZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLW1lcmdlLmluCTIwMTEtMTAtMDggMTc6NTI6MDEuMDAwMDAwMDAwICswMzAwCisrKysgaW50bHRvb2wtMC41MC4wL2ludGx0b29sLW1lcmdlLmluCTIwMTEtMTItMDcgMTY6MDU6NTUuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBJTlRMVE9PTF9QRVJMQCAtdworKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIworSW5kZXg6IGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1wcmVwYXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC41MC4wLm9yaWcvaW50bHRvb2wtcHJlcGFyZS5pbgkyMDExLTEwLTA4IDA5OjE2OjU4LjAwMDAwMDAwMCArMDMwMAorKysrIGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC1wcmVwYXJlLmluCTIwMTEtMTItMDcgMTY6MDY6MTMuMDAwMDAwMDAwICswMjAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIUBJTlRMVE9PTF9QRVJMQCAtdworKyMhQElOVExUT09MX1BFUkxACisgIyAtKi0gTW9kZTogcGVybDsgaW5kZW50LXRhYnMtbW9kZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAgLSotCisgCisgIyAgSW50bHRvb2wgLmRlc2t0b3AsIC5kaXJlY3RvcnkgUHJlcGFyZSBUb29sCitJbmRleDogaW50bHRvb2wtMC41MC4wL2ludGx0b29sLXVwZGF0ZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGludGx0b29sLTAuNTAuMC5vcmlnL2ludGx0b29sLXVwZGF0ZS5pbgkyMDExLTEwLTA4IDIyOjI0OjU3LjAwMDAwMDAwMCArMDMwMAorKysrIGludGx0b29sLTAuNTAuMC9pbnRsdG9vbC11cGRhdGUuaW4JMjAxMS0xMi0wNyAxNjowNjozOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQElOVExUT09MX1BFUkxAIC13CisrIyFASU5UTFRPT0xfUEVSTEAKKyAjIC0qLSBNb2RlOiBwZXJsOyBpbmRlbnQtdGFicy1tb2RlOiBuaWw7IGMtYmFzaWMtb2Zmc2V0OiA0ICAtKi0KKyAKKyAjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvbm9wZXJsY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvbm9wZXJsY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODUzZWUxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9ub3BlcmxjaGVjay5wYXRjaApAQCAtMCwwICsxLDQwIEBACitJbiB0aGUgdGFyZ2V0IGNhc2UsIHdlIGNhbid0IGNoZWNrIGlmIHBlcmwgZXhpc3RzIG9yIHRyeSBydW5uaW5nIGl0LiBJZiB3ZQorZG9uJ3QgcGF0Y2ggdGhlIGNvZGUsIHRoZSBuYXRpdmUgcGVybCBsb2NhdGlvbiB3b3VsZCBiZSB1c2VkLCBub3QgdGhlIHRhcmdldAord2hpY2ggaXMgYWxzbyBpbmNvcnJlY3QuIFdlIHRoZXJlZm9yZSBkaXNhYmxlIHRoaXMgY29kZSBhbmQgcmVseSBvbiB0aGUgCitjb3JyZWN0IHZhbHVlIG9mIFBFUkwgYmVpbmcgcGFzc2VkIGluLgorCitSUCAzMS84LzIwMTEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNTMzOGE3Ni4uZTcwOWEyYiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTEsMjQgKzExLDEwIEBAIEFDX1NVQlNUKHBrZ2RhdGFkaXIpIGRubCBhdXRvbWFrZSBkb2VzIG5vdCBuZWVkIHRoaXMsIGJ1dCBsaWJ0b29saXplIGRvZXMKKyBhY2xvY2FsZGlyPScke2RhdGFkaXJ9Jy9hY2xvY2FsCisgQUNfU1VCU1QoYWNsb2NhbGRpcikKKyAKKy1BQ19QQVRIX1BST0coUEVSTCwgcGVybCkKKyBpZiB0ZXN0IC16ICIkUEVSTCI7IHRoZW4KKy0gICBBQ19NU0dfRVJST1IoW3Blcmwgbm90IGZvdW5kXSkKKy1maQorLUFDX01TR19DSEVDS0lORyhbZm9yIHBlcmwgPj0gNS44LjFdKQorLSRQRVJMIC1lICJ1c2UgNS44LjE7IiA+IC9kZXYvbnVsbCAyPiYxCistaWYgdGVzdCAkPyAtbmUgMDsgdGhlbgorLSAgIEFDX01TR19FUlJPUihbcGVybCA1LjguMSBpcyByZXF1aXJlZCBmb3IgaW50bHRvb2xdKQorLWVsc2UKKy0gICBQRVJMX1ZFUlNJT049ImAkUEVSTCAtZSBcInByaW50ZiAnJXZkJywgJF5WXCJgIgorLSAgIEFDX01TR19SRVNVTFQoWyRQRVJMX1ZFUlNJT05dKQorLWZpCistQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorLWlmIGAkUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCistICAgQUNfTVNHX1JFU1VMVChbb2tdKQorLWVsc2UKKy0gICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisrICAgQUNfTVNHX0VSUk9SKFtQRVJMIHZhcmlhYmxlIG5vdCBzZXRdKQorIGZpCisrQUNfU1VCU1QoUEVSTCkKKyBBQ19QQVRIX1BST0coQlpSLCBienIpCisgCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvaW50bHRvb2wvaW50bHRvb2wvcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjUyMTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3BlcmwtNTIyLWRlcHJlY2F0aW9ucy5wYXRjaApAQCAtMCwwICsxLDU1IEBACitQZXJsIDUuMjIgaGFzIGRlcHJlY2F0ZWQgc29tZSByZWdleCBmZWF0dXJlcywgd2hpY2ggY2F1c2VzIHdhcm5pbmdzIHdoZW4KK2ludGx0b29sLXVwZGF0ZSBydW5zOgorCitVbmVzY2FwZWQgbGVmdCBicmFjZSBpbiByZWdleCBpcyBkZXByZWNhdGVkLCBwYXNzZWQgdGhyb3VnaCBpbiByZWdleDsgbWFya2VkIGJ5Cis8LS0gSEVSRSBpbiBtL14oLiopXCR7IDwtLSBIRVJFID8oW0EtWl9dKyl9PyguKikkLyBhdAorL2RhdGEvcG9reS1tYXN0ZXIvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2ludGx0b29sLXVwZGF0ZSBsaW5lIDEwNjUuCisKK1Rha2UgYSBwYXRjaCBmcm9tIERlYmlhbiB0byBzb2x2ZSB0aGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9idWdzLmxhdW5jaHBhZC5uZXQvaW50bHRvb2wvK2J1Zy8xNDY1MDEwKQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworLS0tIGludGx0b29sLTAuNTEuMC1PUklHL2ludGx0b29sLXVwZGF0ZS5pbgkyMDE1LTA1LTI3IDAwOjIwOjQzLjAzODM3OTk2MyArMDIwMAorKysrIGludGx0b29sLTAuNTEuMC9pbnRsdG9vbC11cGRhdGUuaW4JMjAxNS0wNS0yNyAwMDoyMzo1My4zMDkwNzgwNTIgKzAyMDAKK0BAIC0xMDYyLDcgKzEwNjIsNyBAQAorIAl9CisgICAgIH0KKyAKKy0gICAgaWYgKCRzdHIgPX4gL14oLiopXCR7PyhbQS1aX10rKX0/KC4qKSQvKQorKyAgICBpZiAoJHN0ciA9fiAvXiguKilcJFx7PyhbQS1aX10rKVx9PyguKikkLykKKyAgICAgeworIAlteSAkcmVzdCA9ICQzOworIAlteSAkdW50b3VjaGVkID0gJDE7CitAQCAtMTE5MCwxMCArMTE5MCwxMCBAQAorIAkkbmFtZSAgICA9fiBzL1woKyQvL2c7CisgCSR2ZXJzaW9uID1+IHMvXCgrJC8vZzsKKyAKKy0JJHZhcmhhc2h7IlBBQ0tBR0VfTkFNRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P0FDX1BBQ0tBR0VfTkFNRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJHs/UEFDS0FHRX0/Lyk7CistCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX1ZFUlNJT059Py8pOworLQkkdmFyaGFzaHsiVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1ZFUlNJT059Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRV9OQU1FIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P0FDX1BBQ0tBR0VfTkFNRVx9Py8pOworKwkkdmFyaGFzaHsiUEFDS0FHRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9QQUNLQUdFXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX1ZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9WRVJTSU9OXH0/Lyk7CisrCSR2YXJoYXNoeyJWRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJFx7P1ZFUlNJT05cfT8vKTsKKyAgICAgfQorIAorICAgICBpZiAoJGNvbmZfc291cmNlID1+IC9eQUNfSU5JVFwoKFteLFwpXSspLChbXixcKV0rKVssXT8oW14sXCldKyk/L20pCitAQCAtMTIxOSwxMSArMTIxOSwxMSBAQAorIAkkdmVyc2lvbiA9fiBzL1woKyQvL2c7CisgICAgICAgICAkYnVndXJsICA9fiBzL1woKyQvL2cgaWYgKGRlZmluZWQgJGJ1Z3VybCk7CisgCistCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkez9BQ19QQUNLQUdFX05BTUV9Py8pOworLQkkdmFyaGFzaHsiUEFDS0FHRSJ9ID0gJG5hbWUgaWYgKG5vdCAkbmFtZSA9fiAvXCR7P1BBQ0tBR0V9Py8pOworLQkkdmFyaGFzaHsiUEFDS0FHRV9WRVJTSU9OIn0gPSAkdmVyc2lvbiBpZiAobm90ICRuYW1lID1+IC9cJHs/QUNfUEFDS0FHRV9WRVJTSU9OfT8vKTsKKy0JJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkez9WRVJTSU9OfT8vKTsKKy0gICAgICAgICR2YXJoYXNoeyJQQUNLQUdFX0JVR1JFUE9SVCJ9ID0gJGJ1Z3VybCBpZiAoZGVmaW5lZCAkYnVndXJsIGFuZCBub3QgJGJ1Z3VybCA9fiAvXCR7P1x3K30/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFX05BTUUifSA9ICRuYW1lIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/QUNfUEFDS0FHRV9OQU1FXH0/Lyk7CisrCSR2YXJoYXNoeyJQQUNLQUdFIn0gPSAkbmFtZSBpZiAobm90ICRuYW1lID1+IC9cJFx7P1BBQ0tBR0VcfT8vKTsKKysJJHZhcmhhc2h7IlBBQ0tBR0VfVkVSU0lPTiJ9ID0gJHZlcnNpb24gaWYgKG5vdCAkbmFtZSA9fiAvXCRcez9BQ19QQUNLQUdFX1ZFUlNJT05cfT8vKTsKKysJJHZhcmhhc2h7IlZFUlNJT04ifSA9ICR2ZXJzaW9uIGlmIChub3QgJG5hbWUgPX4gL1wkXHs/VkVSU0lPTlx9Py8pOworKyAgICAgICAgJHZhcmhhc2h7IlBBQ0tBR0VfQlVHUkVQT1JUIn0gPSAkYnVndXJsIGlmIChkZWZpbmVkICRidWd1cmwgYW5kIG5vdCAkYnVndXJsID1+IC9cJFx7P1x3K1x9Py8pOworICAgICB9CisgCisgICAgICMgXHMgbWFrZXMgdGhpcyBub3Qgd29yaywgd2h5PwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3JlbW92ZS14bWwtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2OWUzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC9yZW1vdmUteG1sLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1NpZ25lZC1vZmYtYnk6IEZsb3JpbiBTYXJidSA8ZmxvcmluLnNhcmJ1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK0luZGV4OiBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpbnRsdG9vbC0wLjQwLjYub3JpZy9pbnRsdG9vbC5tNAkyMDA5LTAyLTE0IDE0OjEyOjI4LjAwMDAwMDAwMCAtMDgwMAorKysrIGludGx0b29sLTAuNDAuNi9pbnRsdG9vbC5tNAkyMDExLTExLTIzIDE1OjM5OjM0LjY4OTU2MTg3MiAtMDgwMAorQEAgLTEyMiwxNCArMTIyLDE2IEBACisgICAgSVRfUEVSTF9WRVJTSU9OPSJgJElOVExUT09MX1BFUkwgLWUgXCJwcmludGYgJyV2ZCcsICReVlwiYCIKKyAgICBBQ19NU0dfUkVTVUxUKFskSVRfUEVSTF9WRVJTSU9OXSkKKyBmaQorLWlmIHRlc3QgIngkMiIgIT0gInhuby14bWwiOyB0aGVuCistICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorLSAgIGlmIGAkSU5UTFRPT0xfUEVSTCAtZSAicmVxdWlyZSBYTUw6OlBhcnNlciIgMj4vZGV2L251bGxgOyB0aGVuCistICAgICAgIEFDX01TR19SRVNVTFQoW29rXSkKKy0gICBlbHNlCistICAgICAgIEFDX01TR19FUlJPUihbWE1MOjpQYXJzZXIgcGVybCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIGludGx0b29sXSkKKy0gICBmaQorLWZpCisrCisrIyBEaXNhYmxlIHRoaXMgY2hlY2sgc2luY2Ugd2Uga25vdyBYTUw6OlBhcnNlciBpcyBpbnN0YWxsZWQKKysjaWYgdGVzdCAieCQyIiAhPSAieG5vLXhtbCI7IHRoZW4KKysjICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgWE1MOjpQYXJzZXJdKQorKyMgICBpZiBgJElOVExUT09MX1BFUkwgLWUgInJlcXVpcmUgWE1MOjpQYXJzZXIiIDI+L2Rldi9udWxsYDsgdGhlbgorKyMgICAgICAgQUNfTVNHX1JFU1VMVChbb2tdKQorKyMgICBlbHNlCisrIyAgICAgICBBQ19NU0dfRVJST1IoW1hNTDo6UGFyc2VyIHBlcmwgbW9kdWxlIGlzIHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisrIyAgIGZpCisrI2ZpCisgCisgIyBTdWJzdGl0dXRlIEFMTF9MSU5HVUFTIHNvIHdlIGNhbiB1c2UgaXQgaW4gcG8vTWFrZWZpbGUKKyBBQ19TVUJTVChBTExfTElOR1VBUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC91c2UtbmF0aXZlcGVybC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbC91c2UtbmF0aXZlcGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjVmZWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sL3VzZS1uYXRpdmVwZXJsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK09FIGhhcyBwZXJsIGJpbmFyeSBhcyAnbmF0aXZlcGVybCcgaW4gbmF0aXZlIHN5c3Jvb3Qgc28gd2UgbG9vayBmb3IgaXQKK2luIG9yZGVyIHRvIGF2b2lkIGludGx0b29sIHNlYXJjaGluZyBhbmQgZmluZGluZyBwZXJsIGZyb20gL3Vzci9iaW4KK29uIGJ1aWxkIHN5c3RlbSB3aGljaCBtYXkgbm90IGhhdmUgYWxsIHRoZSBtb2R1bGVzIHRoYXQgaXQgbmVlZHMuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCitJbmRleDogaW50bHRvb2wtMC40MC42L2ludGx0b29sLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW50bHRvb2wtMC40MC42Lm9yaWcvaW50bHRvb2wubTQJMjAwOS0wMi0xNCAxNDoxMjoyOC4wMDAwMDAwMDAgLTA4MDAKKysrKyBpbnRsdG9vbC0wLjQwLjYvaW50bHRvb2wubTQJMjAxMS0wOC0wOSAwODowNzoxNi40MjczNDc4NDYgLTA3MDAKK0BAIC0xMTAsNyArMTEwLDcgQEAKKyAgICAgQUNfTVNHX0VSUk9SKFtHTlUgZ2V0dGV4dCB0b29scyBub3QgZm91bmQ7IHJlcXVpcmVkIGZvciBpbnRsdG9vbF0pCisgZmkKKyAKKy1BQ19QQVRIX1BST0coSU5UTFRPT0xfUEVSTCwgcGVybCkKKytBQ19QQVRIX1BST0coSU5UTFRPT0xfUEVSTCwgbmF0aXZlcGVybCkKKyBpZiB0ZXN0IC16ICIkSU5UTFRPT0xfUEVSTCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3Blcmwgbm90IGZvdW5kXSkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2ludGx0b29sL2ludGx0b29sXzAuNTEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyMGQ0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9pbnRsdG9vbC9pbnRsdG9vbF8wLjUxLjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBpbnRsdG9vbC5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSArPSAiZmlsZTovL2ludGx0b29sLW5vd2Fybi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcGVybC01MjItZGVwcmVjYXRpb25zLnBhdGNoIFwKKyAgICAgICAgICAgJHtOQVRJVkVQQVRDSEVTfSBcCisgICAgICAgICAgICIKKworIworIyBBbGwgb2YgdGhlIGludGx0b29sIHNjcmlwdHMgaGF2ZSB0aGUgY29ycmVjdCBwYXRocyB0byBwZXJsIGFscmVhZHkKKyMgZW1iZWRkZWQgaW50byB0aGVtIGFuZCBjYW4gZmluZCBwZXJsIGZpbmUsIHNvIHdlIGFkZCB0aGUgcmVtb3ZlIHhtbC1jaGVjaworIyBpbiB0aGUgaW50bHRvb2wubTQgdmlhIHRoZSByZW1vdmUteG1sLWNoZWNrLnBhdGNoCitOQVRJVkVQQVRDSEVTID0gImZpbGU6Ly9ub3BlcmxjaGVjay5wYXRjaCBcCisgICAgICAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUteG1sLWNoZWNrLnBhdGNoIgorTkFUSVZFUEFUQ0hFU19jbGFzcy1uYXRpdmUgPSAiZmlsZTovL3VzZS1uYXRpdmVwZXJsLnBhdGNoIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjEyZTUxN2NhYzJiNTdhMDEyMWNkYTM1MTU3MGYxZTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3Yzc0ZDk0MTk2YjE1M2I3NzRhYjlmODliMmZhNmM2YmE3OTM1MjQwNzAzN2M4YzE0ZDVhZWIzMzRlOTU5Y2QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9qc29uLWMvanNvbi1jLzAwMDEtanNvbl90b2tlbmVyLXJlcXVpcmVzLUlORi1hbmQtTkFOLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOWQ5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tYy8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIDliZTcxNzAwZWI1ODBjODE1Njg4NTg0YTY0NjIxYTM4ODY3YzNmZGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYW1lcyBNeWF0dCA8amFtZXMubXlhdHRAdGVzc2VsbGEuY29tPgorRGF0ZTogVGh1LCA1IEZlYiAyMDE1IDE1OjU3OjE0ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGpzb25fdG9rZW5lciByZXF1aXJlcyBJTkYgYW5kIE5BTgorCistLS0KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIGpzb25fdG9rZW5lci5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBqc29uLWMtMC4xMi9qc29uX3Rva2VuZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGpzb24tYy0wLjEyLm9yaWcvanNvbl90b2tlbmVyLmMKKysrKyBqc29uLWMtMC4xMi9qc29uX3Rva2VuZXIuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgCisgI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSAibWF0aF9jb21wYXQuaCIKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorQEAgLTM1MiwxMiArMzUzLDEwIEBAIHN0cnVjdCBqc29uX29iamVjdCoganNvbl90b2tlbmVyX3BhcnNlX2UKKyAKKyAgICAgY2FzZSBqc29uX3Rva2VuZXJfc3RhdGVfaW5mOiAvKiBha2Egc3RhcnRzIHdpdGggJ2knICovCisgICAgICAgeworLQlpbnQgc2l6ZTsKKy0JaW50IHNpemVfaW5mOworKwlzaXplX3Qgc2l6ZV9pbmY7CisgCWludCBpc19uZWdhdGl2ZSA9IDA7CisgCisgCXByaW50YnVmX21lbWFwcGVuZF9mYXN0KHRvay0+cGIsICZjLCAxKTsKKy0Jc2l6ZSA9IGpzb25fbWluKHRvay0+c3RfcG9zKzEsIGpzb25fbnVsbF9zdHJfbGVuKTsKKyAJc2l6ZV9pbmYgPSBqc29uX21pbih0b2stPnN0X3BvcysxLCBqc29uX2luZl9zdHJfbGVuKTsKKyAJY2hhciAqaW5mYnVmID0gdG9rLT5wYi0+YnVmOworIAlpZiAoKmluZmJ1ZiA9PSAnLScpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvanNvbi1jL2pzb24tY18wLjEyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmVmMDNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2pzb24tYy9qc29uLWNfMC4xMi5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkMgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIEpTT04gZGF0YSIKK0RFU0NSSVBUSU9OID0gIkpTT04tQyBpbXBsZW1lbnRzIGEgcmVmZXJlbmNlIGNvdW50aW5nIG9iamVjdCBtb2RlbCB0aGF0IGFsbG93cyB5b3UgdG8gZWFzaWx5IGNvbnN0cnVjdCBKU09OIG9iamVjdHMgaW4gQy4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20vanNvbi1jL2pzb24tYy93aWtpIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZTU0YjYwZmJiYzM1MTIzYmExOTNmZWE4ZWUyMTZmMiIKKworU1JDX1VSSSA9ICJodHRwczovL3MzLmFtYXpvbmF3cy5jb20vanNvbi1jX3JlbGVhc2VzL3JlbGVhc2VzLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWpzb25fdG9rZW5lci1yZXF1aXJlcy1JTkYtYW5kLU5BTi5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiM2NhNGJiYjg4MWRmYzQwMTdlODAyMWI1ZTBhOGM0OTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDAwYzAxYjJiM2Y4MmRjYjQyNjE3NTFlYjcxZjFiMDg0NDA0ZmI3ZDZhMjgyZjA2MDc0ZDNjMTcwNzhiOWYzZiIKKworUlBST1ZJREVTXyR7UE59ID0gImxpYmpzb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgQ2xlYW4gdXAgYXV0b2NvbmYgY3J1ZnQgdGhhdCBzaG91bGQgbm90IGJlIGluIHRoZSB0YXJiYWxsCisgICAgcm0gLWYgJHtTfS9jb25maWcuc3RhdHVzCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMva2NvbmZpZy1mcm9udGVuZHMva2NvbmZpZy1mcm9udGVuZHNfMy4xMi4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhMmY5MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9rY29uZmlnLWZyb250ZW5kcy9rY29uZmlnLWZyb250ZW5kc18zLjEyLjAuMC5iYgpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCBzdHlsZSBjb25maWd1cmF0aW9uIGZyYW1ld29yayBmb3Igb3RoZXIgcHJvamVjdHMiCitERVNDUklQVElPTiA9ICJUaGUga2NvbmZpZy1mcm9udGVuZHMgcHJvamVjdCBhaW1zIGF0IGNlbnRyYWxpc2luZyBcCit0aGUgZWZmb3J0IG9mIGtlZXBpbmcgYW4gdXAtdG8tZGF0ZSwgb3V0LW9mLXRyZWUsIHBhY2thZ2luZyBvZiB0aGUgXAora2NvbmZpZyBpbmZyYXN0cnVjdHVyZSwgcmVhZHkgZm9yIHVzZSBieSB0aGlyZC1wYXJ0eSBwcm9qZWN0cy4gXAorVGhlIGtjb25maWctZnJvbnRlbmRzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGtjb25maWcgcGFyc2VyLCBhcyB3ZWxsIGFzIGFsbCBcCit0aGUgZnJvbnRlbmRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ltb3Jpbi5pcy1hLWdlZWsub3JnL3Byb2plY3RzL2tjb25maWctZnJvbnRlbmRzIgorTElDRU5TRSA9ICJHUEwtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWI4Y2Y2MGZmMzk3NjdmZjA0YjY3MWZjYTgzMDI0MDgiCitTRUNUSU9OID0gImRldmVsIgorREVQRU5EUyArPSAibmN1cnNlcyBmbGV4IGJpc29uIGdwZXJmLW5hdGl2ZSBwa2djb25maWctbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbiBiYXNoIgorU1JDX1VSSSA9ICJodHRwOi8veW1vcmluLmlzLWEtZ2Vlay5vcmcvZG93bmxvYWQvJHtCUE59LyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImI5MzkyODBkY2M4M2Y4ZmVhYmQ4N2ExZDVmOWIwMGMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVhMjYxNWE2MmM3NGJlYTZjZTNiMzg0MDJmMDBjNzUxMzg1OGYzMDdmNmJhN2FhOWZkYmYwYmJjMTJiY2Y0MDciCisKK2luaGVyaXQgYXV0b3Rvb2xzCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgc2NyaXB0cy8uYXV0b3N0dWZmL200Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWxuIC1zIGtjb25maWctY29uZiAke0R9JHtiaW5kaXJ9L2NvbmYKKwlsbiAtcyBrY29uZmlnLW1jb25mICR7RH0ke2JpbmRpcn0vbWNvbmYKK30KKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZ2NvbmYgLS1kaXNhYmxlLXFjb25mIgorCisjIFNvbWUgcGFja2FnZXMgaGF2ZSB0aGUgdmVyc2lvbiBwcmVjZWVkaW5nIHRoZSAuc28gaW5zdGVhZCBwcm9wZXJseQorIyB2ZXJzaW9uZWQgLnNvLjx2ZXJzaW9uPiwgc28gd2UgbmVlZCB0byByZW9yZGVyIGFuZCByZXBhY2thZ2UuCitTT0xJQlMgPSAiLSR7QGQuZ2V0VmFyKCdQVicsMSlbOi0yXX0uc28iCitGSUxFU19TT0xJQlNERVYgPSAiJHtsaWJkaXJ9L2xpYmtjb25maWctcGFyc2VyLnNvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtMi40LjYuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC0yLjQuNi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk3N2M3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtMi40LjYuaW5jCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBsaWJyYXJ5IHN1cHBvcnQgc2NyaXB0IgorREVTQ1JJUFRJT04gPSAiVGhpcyBpcyBHTlUgbGlidG9vbCwgYSBnZW5lcmljIGxpYnJhcnkgc3VwcG9ydCBzY3JpcHQuIFwKK0xpYnRvb2wgaGlkZXMgdGhlIGNvbXBsZXhpdHkgb2YgZ2VuZXJhdGluZyBzcGVjaWFsIGxpYnJhcnkgdHlwZXMgXAorKHN1Y2ggYXMgc2hhcmVkIGxpYnJhcmllcykgYmVoaW5kIGEgY29uc2lzdGVudCBpbnRlcmZhY2UuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvbGlidG9vbC5odG1sIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICBmaWxlOi8vbGlibHRkbC9DT1BZSU5HLkxJQjttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGlidG9vbC9saWJ0b29sLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90cmFpbGluZ3NsYXNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlLXN5c3Jvb3QtaW4tbGlicGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZmluYWwtcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJwYXRoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vcm0tcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXJlc29sdmUtbHQtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub2hhcmRjb2RlcGF0aHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW53aW5kLW9wdC1wYXJzaW5nLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZGRmNDRiNjQ2ZGRiNGUzOTE5ODA1YWE4OGZhN2M1ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlM2JkNGQ1ZDNkMDI1YTM2YzIxZGQ2YWY3ZWE4MThhMmFmY2Q0ZGZjMWVhNWExN2IzOWQ3ODU0YmNkMGMwNmUzIgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCSMgU29tZXRpbWVzIHRoaXMgZmlsZSBkb2Vzbid0IGdldCByZWJ1aWx0LCBmb3JjZSB0aGUgaXNzdWUKKwlybSAtZiAke1N9L2J1aWxkLWF1eC9sdG1haW4uc2gKKwltYWtlIGJ1aWxkLWF1eC9sdG1haW4uc2gKKwkuL2NvbmZpZy5zdGF0dXMKK30KKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworRVhUUkFfQVVUT1JFQ09ORiA9ICItLWV4Y2x1ZGU9bGlidG9vbGl6ZSIKKworREVQRU5EUyA9ICJsaWJ0b29sLW5hdGl2ZSIKKworUEFDS0FHRVMgPSsgImxpYmx0ZGwiCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hY2xvY2FsIgorCitGSUxFU18ke1BOfS1kZXZfcmVtb3ZlID0gIiR7ZGF0YWRpcn0vYWNsb2NhbCIKK0ZJTEVTX2xpYmx0ZGwgPSAiJHtsaWJkaXJ9L2xpYmx0ZGwke1NPTElCU30iCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtY3Jvc3NfMi40LjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Nzg4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLWNyb3NzXzIuNC42LmJiCkBAIC0wLDAgKzEsNDEgQEAKK3JlcXVpcmUgbGlidG9vbC0ke1BWfS5pbmMKKworUEFDS0FHRVMgPSAiIgorU1JDX1VSSSArPSAiZmlsZTovL3ByZWZpeC5wYXRjaCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9maXhpbnN0YWxsLnBhdGNoIgorCitkYXRhZGlyID0gIiR7U1RBR0lOR19ESVJfVEFSR0VUfSR7dGFyZ2V0X2RhdGFkaXJ9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpYnRvb2wgbTQgc2luY2Ugb2xkIHN0YWxlIHZlcnNpb25zIHdvdWxkIGJyZWFrCisJIyBhbnkgdXBncmFkZQorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9sdCoubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtIT1NUX1NZU30tbGlidG9vbCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8ke0hPU1RfU1lTfS1saWJ0b29sCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlHUkVQPScvYmluL2dyZXAnIFNFRD0nc2VkJyAke1N9L2J1aWxkLWF1eC9pbmxpbmUtc291cmNlIGxpYnRvb2xpemUgPiAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9saWJ0b29saXplCisJY2htb2QgMDc1NSAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9saWJ0b29saXplCisJaW5zdGFsbCAtZCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtZCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vYWNsb2NhbC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2NvbXBpbGUgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvY29uZmlnLmd1ZXNzICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L2NvbmZpZy5zdWIgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgJHtTfS9idWlsZC1hdXgvZGVwY29tcCAke0R9JHt0YXJnZXRfZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvCisJaW5zdGFsbCAtYyAke1N9L2J1aWxkLWF1eC9pbnN0YWxsLXNoICR7RH0ke3RhcmdldF9kYXRhZGlyfS9saWJ0b29sL2J1aWxkLWF1eC8KKwlpbnN0YWxsIC1jICR7U30vYnVpbGQtYXV4L21pc3NpbmcgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgLW0gMDY0NCAke1N9L2J1aWxkLWF1eC9sdG1haW4uc2ggJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2xpYnRvb2wvYnVpbGQtYXV4LworCWluc3RhbGwgLWMgLW0gMDY0NCAke1N9L200LyoubTQgJHtEfSR7dGFyZ2V0X2RhdGFkaXJ9L2FjbG9jYWwvCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAibGlidG9vbGNyb3NzX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworbGlidG9vbGNyb3NzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke3RhcmdldF9kYXRhZGlyfSAke1NZU1JPT1RfREVTVERJUn0ke3RhcmdldF9kYXRhZGlyfQorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAibGlidG9vbGl6ZSAqLWxpYnRvb2wiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLW5hdGl2ZV8yLjQuNi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wtbmF0aXZlXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTIxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sLW5hdGl2ZV8yLjQuNi5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK0RFUEVORFMgPSAiIgorCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorCitpbmhlcml0IG5hdGl2ZQorCitFWFRSQV9PRUNPTkYgPSAiIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9OQVRJVkV9IgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpYnRvb2wgbTQgc2luY2Ugb2xkIHN0YWxlIHZlcnNpb25zIHdvdWxkIGJyZWFrCisJIyBhbnkgdXBncmFkZQorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9sdCoubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7SE9TVF9TWVN9LWxpYnRvb2wgJHtEfSR7YmluZGlyfS8ke0hPU1RfU1lTfS1saWJ0b29sCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQwODRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNDA0LDIxICs0MDQsNiBAQCAkKG5vdGVzX3R4dCk6ICQobm90ZXNfdGV4aSkKKyAJJChBTV9WX0dFTikkKE1BS0VJTkZPKSAtUCAnJChzcmNkaXIpL2RvYycgLS1uby1oZWFkZXJzIFwKKyAJICAgICQoTUFLRUlORk9GTEFHUykgLW8gJyRAJyAnJChub3Rlc190ZXhpKScKKyAKKy1kaXN0X21hbjFfTUFOUwkJPSAkKGxpYnRvb2xfMSkgJChsaWJ0b29saXplXzEpCistTUFJTlRBSU5FUkNMRUFORklMRVMJKz0gJChkaXN0X21hbjFfTUFOUykKKy11cGRhdGVfbWFucyA9IFwKKy0gIFBBVEg9Ii4kKFBBVEhfU0VQQVJBVE9SKSQkUEFUSCI7IGV4cG9ydCBQQVRIOyBcCistICAkKEhFTFAyTUFOKSAtLW91dHB1dD0nJEAnCistCistIyBJdCdzIHdyb25nIHRvIG1ha2UgZGlzdHJpYnV0ZWQgZmlsZXMgKGUuZy4gJChsaWJ0b29sXzEpKSByZWx5IG9uCistIyBmaWxlcyBjcmVhdGVkIGluIHRoZSBidWlsZCB0cmVlLCBzbyBpbnN0ZWFkIHdlIHJlZ2VuZXJhdGUgdGhlCistIyBtYW51YWwgcGFnZXMgaWYgdGhlIHNvdXJjZXMgZm9yIHRoZSBidWlsZC10cmVlIGZpbGVzIHdlIHdhbnQgdG8KKy0jIHJ1biBoYXZlIGNoYW5nZWQuCistJChsaWJ0b29sXzEpOiAkKGx0bWFpbl9zaCkKKy0JJChBTV9WX0dFTikkKHVwZGF0ZV9tYW5zKSAtLWhlbHAtb3B0aW9uPS0taGVscC1hbGwgbGlidG9vbAorLSQobGlidG9vbGl6ZV8xKTogJChsaWJ0b29saXplX2luKQorLQkkKEFNX1ZfR0VOKSQodXBkYXRlX21hbnMpIGxpYnRvb2xpemUKKy0KKyAKKyAjIyAtLS0tLS0tLS0tLS0tICMjCisgIyMgSW5zdGFsbGF0aW9uLiAjIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtZmluYWwtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1maW5hbC1ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzlmOGNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtZmluYWwtcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworRW5hbGJpbmcgc3lzcm9vdCBzdXBwb3J0IGV4cG9zZWQgYSBidWcgd2hlcmUgdGhlIGZpbmFsIGxpYnJhcnkKK2hhZCBhbiBSUEFUSCBlbmNvZGVkIGludG8gaXQgd2hpY2ggc3RpbGwgcG9pbnRlZCB0byB0aGUgc3lzcm9vdC4KK1RoaXMgd29ya3MgYXJvdW5kIHRoZSBpc3N1ZSB1bnRpbCBpdCBnZXRzIHNvcnRlZCBvdXQgdXBzdHJlYW0uCisKK0ZpeCBzdWdnZXN0ZWQgYnkgUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUmFuZHkgV2l0dCA8cmFuZHkuZS53aXR0QGxpbnV4LmludGVsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC03NTY5LDkgKzc1NjksMTEgQEAgRU9GCisgCSAgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBycGF0aD0kY29tcGlsZV9ycGF0aCRycGF0aAorIAkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbworIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisrCQkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorKwkJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkJICBmdW5jX3N0cmlwbmFtZSAnPScgJycgIiRsaWJkaXIiCisrCQkgIGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCistCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCQkgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgorIAkJZWxzZQorQEAgLTgzMDEsNiArODMwMywxMCBAQCBFT0YKKyAgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgorQEAgLTgzNTIsNiArODM1OCwxMCBAQCBFT0YKKyAgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworIAlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKysJICBmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAorKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGxpYmRpciIKKysJICBsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisgCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcmVzb2x2ZS1sdC1zeXNyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZDk1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeC1yZXNvbHZlLWx0LXN5c3Jvb3QucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggdXBkYXRlcyBsaWJ0b29sLm00IChhbmQgaXRzIG91dHB1dCkgdG8gcmVzb2x2ZSBhIHByb2JsZW0KK3dpdGggdmFyaWFibGUgJ2x0X3N5c3Jvb3QnIG5vdCBiZWluZyBwcm9wZXJseSB1cGRhdGVkIGlmIHRoZSBvcHRpb24KKyctLXdpdGhbLWxpYnRvb2xdLXN5c3Jvb3QnIGlzIG5vdCBwcm92aWRlZCB3aGVuIHJ1bm5pbmcgdGhlICdjb25maWd1cmUnCitzY3JpcHQgZm9yIGEgcGFja2FnZS4KKworSSBoYXZlIGFsc28gcmVwb3J0ZWQgdGhlIHByb2JsZW0gdG8gbGlidG9vbCBoZXJlCisKK2h0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctbGlidG9vbC8yMDEzLTA5L21zZzAwMDA1Lmh0bWwKKworU2lnbmVkLW9mZi1ieTogSGFucyBCZWNrZXJ1cyA8aGFucy5iZWNrZXJ1cyBhdCBnbWFpbC5jb20+CitVcGRhdGVkIGJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00CistLS0gYS9tNC9saWJ0b29sLm00CisrKysgYi9tNC9saWJ0b29sLm00CitAQCAtMTIyNSwxNiArMTIyNSwyMSBAQCBkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCisgZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCisgbHRfc3lzcm9vdD0KKyBjYXNlICR3aXRoX2xpYnRvb2xfc3lzcm9vdCBpbiAjKAorLSB5ZXMpCisrIG5vKQorICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorKyAgICAgIyBUcmVhdCAiLyIgdGhlIHNhbWUgYSBhbiB1bnNldCBzeXNyb290LiBJdCBzZWVtcyB0byBiZSBtb3JlCisrICAgICAjIGNvbXBhdGlibGUgYWNyb3NzIGhvc3QgcGxhdGZvcm1zIHRoYXQgd2F5IT8KKysgICAgIGlmIHRlc3QgIiRsdF9zeXNyb290IiA9IC87IHRoZW4KKysgICAgICAgbHRfc3lzcm9vdD0KKysgICAgIGZpCisgICAgZmkKKyAgICA7OyAjKAorKyB5ZXN8Jyd8LykKKysgICA7OyAjKAorICAvKikKKyAgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9saWJ0b29sX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICA7OyAjKAorLSBub3wnJykKKy0gICA7OyAjKAorICAqKQorICAgIEFDX01TR19SRVNVTFQoWyR3aXRoX2xpYnRvb2xfc3lzcm9vdF0pCisgICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9maXgtcnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJlYzk0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4LXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1dlIGRvbid0IHdhbnQgdG8gYWRkIFJQQVRIUyB3aGljaCBtYXRjaCBkZWZhdWx0IGxpbmtlcgorc2VhcmNoIHBhdGhzLCB0aGV5J3JlIGEgd2FzdGUgb2Ygc3BhY2UuIFRoaXMgcGF0Y2gKK2ZpbHRlcnMgbGlidG9vbHMgbGlzdCBhbmQgcmVtb3ZlcyB0aGUgb25lcyB3ZSBkb24ndCBuZWVkLgorCitSUCAyMy85LzIwMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitJbmRleDogbGlidG9vbC0yLjQuMi9idWlsZC1hdXgvbHRtYWluLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidG9vbC0yLjQuMi5vcmlnL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBsaWJ0b29sLTIuNC4yL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC03Mjg2LDggKzcyODYsMTQgQEAgRU9GCisgCQkgIGVzYWMKKyAJCWZpCisgCSAgICAgIGVsc2UKKy0JCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKy0JCWZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKysgICAgICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrCSAgICAgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAgICAgKikgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBkZXBfcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAgICAgICAgOzsKKysJICAgICAgICBlc2FjCisgCSAgICAgIGZpCisgCSAgICBlbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorQEAgLTgwMTksOCArODAyNSwxNCBAQCBFT0YKKyAJICAgICAgZXNhYworIAkgICAgZmkKKyAJICBlbHNlCistCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCistCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorKyAgICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGhhcmRjb2RlIGluIGFuIHJwYXRoIGlmIGl0IGlzbid0IGluIHRoZQorKyAgICAgICAgICAgICMgZGVmYXVsdCBkbHNlYXJjaCBwYXRoLgorKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICAgICAgICAgICBycGF0aCs9IiAkZmxhZyIKKysgICAgICAgICAgICAgICA7OworKwkgICAgZXNhYworIAkgIGZpCisgCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorIAkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KK0BAIC04MDcwLDggKzgwODIsMTQgQEAgRU9GCisgCSAgICAgIGVzYWMKKyAJICAgIGZpCisgCSAgZWxzZQorLQkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKysgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKysJICAgICoiICRsaWJkaXIgIiopIDs7CisrCSAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisrICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKKysgICAgICAgICAgICAgICA7OworKwkgICAgZXNhYyAgICAKKyAJICBmaQorIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAJICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeGluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL2ZpeGluc3RhbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYzNDNiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvZml4aW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorVGhlcmUgaXMgbm8gcG9pbnQgaW4gaGF2aW5nICJleGVjdXRhYmxlIiBiaW5hcmllcyBpbiB0aGUgLmxpYnMKK2RpcmVjdG9yeSBsaW5rZWQgd2l0aCBkaWZmZXJlbnQgcnBhdGhzIHRvIHRoZSB0YXJnZXQgd2hpY2ggCitjb3VsZCBjb25jaXZhYmx5IGJlIHJ1biBvbiB0aGUgYnVpbGQgc3lzdGVtIHdoZW4gY3Jvc3MgY29tcGlsaW5nLgorCitUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIGV4dHJhIHJwYXRocyAoJGNvbXBpbGVfcnBhdGgpIHNvIHRoYXQgdGhlCitvdXRwdXQgZnJvbSB0aGUgImxpbmsiIHN0YWdlIGNhbiBiZSB1c2VkIG9uIHRoZSB0YXJnZXQuIFdlIGNhbiB0aGVuCithdm9pZCBoYXZpbmcgdG8gInJlbGluayIgZHVyaW5nIHRoZSBpbnN0YWxsIHN0YWdlLgorCitUaGlzIHNhdmVzIHNvbWUgYnVpbGQgdGltZSAoZG9faW5zdGFsbCBpcyBvdmVyIDIgbWludXRlcyBmYXN0ZXIgZm9yCitwdWxzZWF1ZGlvKS4KKworVGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgYW4gYW5ub3lpbmcgInNlZW1zIHRvIGJlIG1vdmVkIiB3YXJuaW5nCit3aGljaCBpcyB0b3RhbGx5IGJvZ3VzIGluIHRoZSBzeXNyb290IGNhc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gYXJlIHVubGlrZWx5IHRvIHRha2UgYSBwYXRjaCBsaWtlIHRoaXNdCisKK1JQIDIwMTEvMTEvMTYKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTIzNTUsNyArMjM1NSw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorIAlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCistCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisgICAgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkbGliZGlyIgorICAgICAgIGRlc3RsaWJkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorQEAgLTIzOTQsNyArMjM5NCw3IEBAIGZ1bmNfbW9kZV9pbnN0YWxsICgpCisgCSAgc2hpZnQKKyAKKyAJICBzcmNuYW1lPSRyZWFsbmFtZQorLQkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0ke3JlYWxuYW1lfVQKKysJICB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKyAKKyAJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisgCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCitAQCAtNjE2MiwxNSArNjE2MiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorIAkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorIAkgICAgIyBzZWFyY2ggcGF0aC4KKy0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAqKQorLQkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCistCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworLQkgICAgICBlc2FjCistCSAgICAgIDs7CistCSAgICBlc2FjCisrCSAgICAjY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgIyoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjKikKKysJICAgICMgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKysJICAgICMgICoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKysJICAgICMgIGVzYWMKKysJICAgICMgIDs7CisrCSAgICAjZXNhYworIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorIAkgICAgKiIgJGxpYmRpciAiKikgOzsKKyAJICAgICopCitAQCAtNjIzNiwxNSArNjIzNiwxNSBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorIAkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorIAkgICAgIyBzZWFyY2ggcGF0aC4KKy0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAqKQorLQkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCistCSAgICAgICoiICRhYnNkaXIgIiopIDs7CistCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworLQkgICAgICBlc2FjCistCSAgICAgIDs7CistCSAgICBlc2FjCisrCSAgICAjY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorKwkgICAgIyoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjKikKKysJICAgICMgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKysJICAgICMgICoiICRhYnNkaXIgIiopIDs7CisrCSAgICAjICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKKysJICAgICMgIGVzYWMKKysJICAgICMgIDs7CisrCSAgICAjZXNhYworIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorIAkgICAgKiIgJGxpYmRpciAiKikgOzsKKyAJICAgICopCitAQCAtNjU5MCw4ICs2NTkwLDggQEAgZnVuY19tb2RlX2xpbmsgKCkKKyAJCSAgZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisgCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKyAJCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorLQkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAorLQkJICAgIGZ1bmNfd2FybmluZyAiJyRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorKwkJICAjdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKysJCSAgIyAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisgCisgCQkgIHBhdGg9LUwkYWJzZGlyCisgCQlmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub2hhcmRjb2RlcGF0aHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vaGFyZGNvZGVwYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjIzOWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub2hhcmRjb2RlcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorSWYgZm9yIGV4YW1wbGUgeW91IGJ1aWxkIG9uIGEgbWFjaGluZSB3aXRoIC9iaW4vZ3JlcCwgdGhlbiByZXN0b3JlIHRoYXQgc3N0YXRlCitvbnRvIGEgbWFjaGluZSB3aXRoIC91c3IvYmluL2dyZXAsIHRoaW5ncyB3aWxsIGZhaWwuIFNpbXBseSBkb24ndCBib3RoZXIKK2hhcmRjb2RpbmcgcGF0aHMuCisKK1JQIDIwMTUvMi8zCisKK0luZGV4OiBsaWJ0b29sLTIuNC41L2xpYnRvb2xpemUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0b29sLTIuNC41Lm9yaWcvbGlidG9vbGl6ZS5pbgorKysrIGxpYnRvb2wtMi40LjUvbGlidG9vbGl6ZS5pbgorQEAgLTQwLDExICs0MCwxMSBAQAorIAorIDogJHtBVVRPQ09ORj0iYXV0b2NvbmYifQorIDogJHtBVVRPTUFLRT0iYXV0b21ha2UifQorLTogJHtFR1JFUD0iQEVHUkVQQCJ9CistOiAke0ZHUkVQPSJARkdSRVBAIn0KKy06ICR7R1JFUD0iQEdSRVBAIn0KKy06ICR7TE5fUz0iQExOX1NAIn0KKy06ICR7U0VEPSJAU0VEQCJ9CisrOiAke0VHUkVQPSJlZ3JlcCJ9CisrOiAke0ZHUkVQPSJmZ3JlcCJ9CisrOiAke0dSRVA9ImdyZXAifQorKzogJHtMTl9TPSJsbiAtcyJ9CisrOiAke1NFRD0ic2VkIn0KKyAKKyAKKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub3JtLXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9ub3JtLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGM2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL25vcm0tcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorbGlidG9vbDogbm9ybWFsaXplIGxpbmsgcGF0aHMgYmVmb3JlIGNvbnNpZGVyaW5nIGZvciBSUEFUSAorCitMaWJ0b29sIG1heSBiZSBwYXNzZWQgbGluayBwYXRocyBvZiB0aGUgZm9ybSAiL3Vzci9saWIvLi4vbGliIiwgd2hpY2gKK2Zvb2wgaXRzIGRldGVjdGlvbiBjb2RlIGludG8gdGhpbmtpbmcgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGFuCitSUEFUSCBpbiB0aGUgZ2VuZXJhdGVkIGJpbmFyeS4gIE5vcm1hbGl6ZSBiZWZvcmUgY29tcGFyaXNpb24uCisKK1NpZ25lZC1vZmYtYnk6IEFuZHkgUm9zcyA8YW5keS5yb3NzQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLXVyIGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4JMjAxMi0wOC0xNiAxMzo1ODo1NS4wNTg5MDAzNjMgLTA3MDAKKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4JMjAxMi0wOC0yMiAxMTowMTozNC4xOTEzNDU5ODkgLTA3MDAKK0BAIC03Mjg4LDggKzcyODgsMTAgQEAKKyAJICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IGRsc2VhcmNoIHBhdGguCisrICAgICAgICAgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiRsaWJkaXIiCisrICAgICAgICAgICAgICAgIGxpYmRpcl9ub3JtPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorIAkgICAgICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKy0JICAgICAgICAqIiAkbGliZGlyICIqKSA7OworKwkgICAgICAgICoiICRsaWJkaXJfbm9ybSAiKikgOzsKKyAJICAgICAgICAqKSBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIGRlcF9ycGF0aCAiICRmbGFnIgorICAgICAgICAgICAgICAgICAgICA7OworQEAgLTgwMjcsOCArODAyOSwxMCBAQAorIAkgIGVsc2UKKyAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBoYXJkY29kZSBpbiBhbiBycGF0aCBpZiBpdCBpc24ndCBpbiB0aGUKKyAgICAgICAgICAgICAjIGRlZmF1bHQgZGxzZWFyY2ggcGF0aC4KKysgICAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkbGliZGlyIgorKyAgICAgICAgICAgIGxpYmRpcl9ub3JtPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorIAkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorLQkgICAgKiIgJGxpYmRpciAiKikgOzsKKysJICAgICoiICRsaWJkaXJfbm9ybSAiKikgOzsKKyAJICAgICopIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgICAgICAgICAgICBycGF0aCs9IiAkZmxhZyIKKyAgICAgICAgICAgICAgICA7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9wcmVmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3ByZWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzNkZjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC9wcmVmaXgucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworUmVuYW1lcyAibGlidG9vbCIgLT4gIiR7VEFSR0VUX1BSRUZJWH1saWJ0b29sIiB3aGljaCBtYWtlcyBzdXJlCitpdCBjYW4ndCBiZSBjb25mdXNlZCB3aXRoIHRoZSBob3N0IGxpYnRvb2wuCisKK09yaWdpbmFsbHkgYnk6IFJQCisKK1VwZGF0ZWQ6IERhdGU6IDIwMTAvMDYvMjgKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0l0IGFsc28gYWRqdXN0cyBsaWJ0b29sIHNvIHRoYXQgdGhlIGhlYWRlciBhdCB0aGUgc2NyaXB0IGlzIHVzZWQgZm9yIAorc2NyaXB0IGV4ZWN1dGlvbiBhbmQgbm90IHRoZXZhbHVlIG9mICRTSEVMTC4gVGhpcyBpcyBiZWNhdXNlIG1hbnkgCitNYWtlZmlsZXMgY2hhbmdlICRTSEVMTCBzbyBkYXNoIGNhbiBnZXQgdXNlZCB0byBleGVjdXRlIHdoYXQgaXMgCitvdGhlcndpc2UgY29uZmlndXJlZCBhcyBhIGJhc2ggc2hlbGwgc2NyaXB0LiBTaW5jZSB3ZSBkb24ndCBuZWVkIHRvIAorZXhlY3V0ZSBzY2lwdHMgdGhpcyB3YXkgb24gYW55IHN5c3RlbSBJJ20gYXdhcmUgb2YgdXMgYnVpbGRpbmcgdXBvbiwgCit0aGUgc2ltcGxlc3QgZml4IGlzIGp1c3QgdG8gcmVtb3ZlICRTSEVMTC4KKworVXBkYXRlZDogRGF0ZTogMjAxMS8xMS8wOQorUlAKKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0zMSw3ICszMSw3IEBAIFNVQkRJUlMJCQk9IC4KKyBESVNUX1NVQkRJUlMJCT0gJChTVUJESVJTKQorIEVYVFJBX0RJU1QJCT0KKyAKKy1CVUlMVF9TT1VSQ0VTCQk9IGxpYnRvb2wgbGlidG9vbGl6ZQorK0JVSUxUX1NPVVJDRVMJCT0gJChob3N0X2FsaWFzKS1saWJ0b29sIGxpYnRvb2xpemUKKyAKKyBDTEVBTkZJTEVTCQk9CisgTU9TVExZQ0xFQU5GSUxFUwk9CitAQCAtNjcsNyArNjcsNyBAQCBidWlsZF9zY3JpcHRzCT0gJChzcmNkaXIpLyQoYXV4X2RpcikvYW5ub3VuY2UtZ2VuIFwKKyAKKyBFWFRSQV9ESVNUICAgICArPSBib290c3RyYXAgYm9vdHN0cmFwLmNvbmYgJChidWlsZF9zY3JpcHRzKSBjZmcubWsgbWFpbnQubWsgXAorIAkJICBHTlVtYWtlZmlsZQorLUNMRUFORklMRVMgICAgICs9IGxpYnRvb2wgbGlidG9vbGl6ZQorK0NMRUFORklMRVMgICAgICs9ICQoaG9zdF9hbGlhcyktbGlidG9vbCBsaWJ0b29saXplCisgCisgIyMgSWYgYSBmaWxlIGlzIG5hbWVkIHNldmVyYWwgdGltZXMgYmVsb3csIGFuZCBlc3BlY2lhbGx5IGlmIGl0CisgIyMgaXMgYSBkaXN0cmlidXRlZCBmaWxlIGNyZWF0ZWQgZHVyaW5nIExpYnRvb2wgYm9vdHN0cmFwLCB3ZQorQEAgLTI3Niw3ICsyNzYsNyBAQCBjb25maWd1cmVfZWRpdCA9ICQoYm9vdHN0cmFwX2VkaXQpIFwKKyAJLWUgJ3N8QHNyY2RpclxAfCQoc3JjZGlyKXxnJworIAorICMgVGhlIGxpYnRvb2wgZGlzdHJpYnV0b3IgYW5kIHRoZSBzdGFuZGFsb25lIGxpYnRvb2wgc2NyaXB0LgorLWJpbl9TQ1JJUFRTID0gbGlidG9vbAorK2Jpbl9TQ1JJUFRTID0gJChob3N0X2FsaWFzKS1saWJ0b29sCisgCisgbGlidG9vbGl6ZTogJChsaWJ0b29saXplX2luKSAkKGNvbmZpZ19zdGF0dXMpCisgCSQoQU1fVl9hdClybSAtZiAnJEAnCitAQCAtMjg3LDcgKzI4Nyw3IEBAIGxpYnRvb2xpemU6ICQobGlidG9vbGl6ZV9pbikgJChjb25maWdfc3RhdHVzKQorICMgV2UgdXNlZCB0byBkbyB0aGlzIHdpdGggYSAnc3RhbXAtdmNsJyBmaWxlLCBidXQgbm9uLWdtYWtlIGJ1aWxkcworICMgd291bGQgcmVydW4gY29uZmlndXJlIG9uIGV2ZXJ5IGludm9jYXRpb24sIHNvIG5vdyB3ZSBtYW51YWxseQorICMgY2hlY2sgdGhlIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZSBidWlsZCBydWxlIHdoZW4gbmVjZXNzYXJ5LgorLWxpYnRvb2w6ICQobHRtYWluX3NoKSAkKGNvbmZpZ19zdGF0dXMpICQoZG90dmVyc2lvbikKKyskKGhvc3RfYWxpYXMpLWxpYnRvb2w6ICQobHRtYWluX3NoKSAkKGNvbmZpZ19zdGF0dXMpICQoZG90dmVyc2lvbikKKyAJQCQocmVidWlsZCk7IFwKKyAJaWYgdGVzdCAtZiAnJEAnOyB0aGVuIFwKKyAJICBldmFsIGAnJChTRUQpJyAtbiAnL15wYWNrYWdlX3JldmlzaW9uPS9wJyAnJEAnYDsgXAorQEAgLTczMSwxMiArNzMxLDEyIEBAIFRFU1RTX0VOVklST05NRU5UID0gTUFLRT0iJChNQUtFKSIgQ0M9IiQoQ0MpIiBDRkxBR1M9IiQoQ0ZMQUdTKSIgXAorIAorIEJVSUxEQ0hFQ0tfRU5WSVJPTk1FTlQgPSBfbHRfcGtnZGF0YWRpcj0iJChhYnNfdG9wX3NyY2RpcikiIFwKKyAJTElCVE9PTElaRT0iJChhYnNfdG9wX2J1aWxkZGlyKS9saWJ0b29saXplIiBcCistCUxJQlRPT0w9IiQoYWJzX3RvcF9idWlsZGRpcikvbGlidG9vbCIgXAorKwlMSUJUT09MPSIkKGFic190b3BfYnVpbGRkaXIpLyQoaG9zdF9hbGlhcyktbGlidG9vbCIgXAorIAl0c3RfYWNsb2NhbGRpcj0iJChhYnNfdG9wX3NyY2RpcikvbTQiCisgCisgSU5TVEFMTENIRUNLX0VOVklST05NRU5UID0gXAorIAlMSUJUT09MSVpFPSIkKGJpbmRpcikvYGVjaG8gbGlidG9vbGl6ZSB8JChTRUQpICckKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpJ2AiIFwKKy0JTElCVE9PTD0iJChiaW5kaXIpL2BlY2hvIGxpYnRvb2wgfCQoU0VEKSAnJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKSdgIiBcCisrCUxJQlRPT0w9IiQoYmluZGlyKS9gZWNobyAkKGhvc3RfYWxpYXMpLWxpYnRvb2wgfCQoU0VEKSAnJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKSdgIiBcCisgCUxURExJTkNMPSItSSQoaW5jbHVkZWRpcikiIFwKKyAJTElCTFRETD0iJChsaWJkaXIpL2xpYmx0ZGwubGEiIFwKKyAJdHN0X2FjbG9jYWxkaXI9IiQoYWNsb2NhbGRpcikiCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC04Niw3ICs4Niw4IEBAIF9MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQorIExJQlRPT0xfREVQUz0kbHRtYWluCisgCisgIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KKy1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKytMSUJUT09MPSckKHRvcF9idWlsZGRpciknCisrTElCVE9PTD0iJExJQlRPT0wvJHtob3N0X2FsaWFzfS1saWJ0b29sIgorIEFDX1NVQlNUKExJQlRPT0wpZG5sCisgCisgX0xUX1NFVFVQCitAQCAtMTk5LDcgKzIwMCw3IEBAIGFpeDMqKQorIGVzYWMKKyAKKyAjIEdsb2JhbCB2YXJpYWJsZXM6Cistb2ZpbGU9bGlidG9vbAorK29maWxlPSR7aG9zdF9hbGlhc30tbGlidG9vbAorIGNhbl9idWlsZF9zaGFyZWQ9eWVzCisgCisgIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgJy5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3JlbmFtZS13aXRoLXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyYjExMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvcmVuYW1lLXdpdGgtc3lzcm9vdC5wYXRjaApAQCAtMCwwICsxLDE2NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggcmVuYW1lcyB0aGUgLS13aXRoLXN5c3Jvb3Qgb3B0aW9uIHRvIC0td2l0aC1saWJ0b29sLXN5c3Jvb3QKK3RvIGF2b2lkIG5hbWVzcGFjZSBjb25mbGljdCB3aXRoIGJpbnV0aWxzLCBnY2MgYW5kIG90aGVyIHRvb2xjaGFpbgorY29tcG9uZW50cy4KKworSSBhbHNvIHJlcG9ydGVkIHRoZSBwcm9ibGVtIHRvIGxpYnRvb2wgaGVyZQorCitodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvbGlidG9vbC8yMDEwLTEwL21zZzAwMDQ4Lmh0bWwKKworLUtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvbTQvbGlidG9vbC5tNCBiL200L2xpYnRvb2wubTQKKy0tLSBhL200L2xpYnRvb2wubTQKKysrKyBiL200L2xpYnRvb2wubTQKK0BAIC0xMjE1LDI4ICsxMjE1LDI4IEBAIF9MVF9ERUNMKFtdLCBbRUNIT10sIFsxXSwgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzXSkKKyAjIC0tLS0tLS0tLS0tLS0tLS0KKyBBQ19ERUZVTihbX0xUX1dJVEhfU1lTUk9PVF0sCisgW0FDX01TR19DSEVDS0lORyhbZm9yIHN5c3Jvb3RdKQorLUFDX0FSR19XSVRIKFtzeXNyb290XSwKKy1bQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXNyb290QDw6QD1ESVJAOj5AXSwKKytBQ19BUkdfV0lUSChbbGlidG9vbC1zeXNyb290XSwKKytbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJ0b29sLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorICAgW1NlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSIChvciB0aGUgY29tcGlsZXIncyBzeXNyb290CisgICAgaWYgbm90IHNwZWNpZmllZCkuXSldLAorLVtdLCBbd2l0aF9zeXNyb290PW5vXSkKKytbXSwgW3dpdGhfbGlidG9vbF9zeXNyb290PW5vXSkKKyAKKyBkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCisgZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCisgbHRfc3lzcm9vdD0KKy1jYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKKytjYXNlICR3aXRoX2xpYnRvb2xfc3lzcm9vdCBpbiAjKAorICB5ZXMpCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICAgZmkKKyAgICA7OyAjKAorICAvKikKKy0gICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisrICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfbGlidG9vbF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgOzsgIygKKyAgbm98JycpCisgICAgOzsgIygKKyAgKikKKy0gICBBQ19NU0dfUkVTVUxUKFskd2l0aF9zeXNyb290XSkKKysgICBBQ19NU0dfUkVTVUxUKFskd2l0aF9saWJ0b29sX3N5c3Jvb3RdKQorICAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCisgICAgOzsKKyBlc2FjCitkaWZmIC0tZ2l0IGEvdGVzdHMvc3lzcm9vdC5hdCBiL3Rlc3RzL3N5c3Jvb3QuYXQKKy0tLSBhL3Rlc3RzL3N5c3Jvb3QuYXQKKysrKyBiL3Rlc3RzL3N5c3Jvb3QuYXQKK0BAIC02NCw3ICs2NCw3IEBAIHdoaWxlIHJlYWQgZmlsZTsgZG8KKyBkb25lXSkKKyAKKyBMREZMQUdTPSIkTERGTEFHUyAtLXN5c3Jvb3Q9JHN5c3Jvb3QgLW5vLXVuZGVmaW5lZCIKKy1jb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisrY29uZmlndXJlX29wdGlvbnM9IiRjb25maWd1cmVfb3B0aW9ucyAtLXdpdGgtbGlidG9vbC1zeXNyb290PSRzeXNyb290IC0tcHJlZml4PSRwcmVmaXgiCisgCisgIz8/PworIGlmIHRlc3QgUEFUSCA9ICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KK0BAIC0xMTQsNyArMTE0LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBdXSkKK0BAIC0xNTUsNyArMTU1LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW3Byb2cuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBdXSkKK2RpZmYgLS1naXQgYS90ZXN0cy90ZXN0c3VpdGUgYi90ZXN0cy90ZXN0c3VpdGUKKy0tLSBhL3Rlc3RzL3Rlc3RzdWl0ZQorKysrIGIvdGVzdHMvdGVzdHN1aXRlCitAQCAtNDg5NDUsNyArNDg5NDUsNyBAQCAkYXRfdHJhY2VvbjsgfQorIAorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTQ5MTU0LDcgKzQ5MTU0LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC00OTM0Miw3ICs0OTM0Miw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNDk2OTQsNyArNDk2OTQsNyBAQCAkYXRfdHJhY2VvbjsgfQorIAorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTQ5OTAzLDcgKzQ5OTAzLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDA5MSw3ICs1MDA5MSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCitAQCAtNTA0NDMsNyArNTA0NDMsNyBAQCAkYXRfdHJhY2VvbjsgfQorIAorIAorIExERkxBR1M9IiRMREZMQUdTIC0tc3lzcm9vdD0kc3lzcm9vdCAtbm8tdW5kZWZpbmVkIgorLWNvbmZpZ3VyZV9vcHRpb25zPSIkY29uZmlndXJlX29wdGlvbnMgLS13aXRoLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKytjb25maWd1cmVfb3B0aW9ucz0iJGNvbmZpZ3VyZV9vcHRpb25zIC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHN5c3Jvb3QgLS1wcmVmaXg9JHByZWZpeCIKKyAKKyAjPz8/CisgaWYgdGVzdCBQQVRIID0gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorQEAgLTUwNjUyLDcgKzUwNjUyLDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQUNfUFJPR19DQworIEFDX0NPTkZJR19TUkNESVIoW2xpYjIuY10pCisgTFRfSU5JVAorLXN5c3Jvb3Q9JHdpdGhfc3lzcm9vdAorK3N5c3Jvb3Q9JHdpdGhfbGlidG9vbF9zeXNyb290CisgQUNfU1VCU1QoW3N5c3Jvb3RdKQorIEFDX09VVFBVVChNYWtlZmlsZSkKKyBfQVRFT0YKK0BAIC01MDg0MCw3ICs1MDg0MCw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFDX1BST0dfQ0MKKyBBQ19DT05GSUdfU1JDRElSKFtwcm9nLmNdKQorIExUX0lOSVQKKy1zeXNyb290PSR3aXRoX3N5c3Jvb3QKKytzeXNyb290PSR3aXRoX2xpYnRvb2xfc3lzcm9vdAorIEFDX1NVQlNUKFtzeXNyb290XSkKKyBBQ19PVVRQVVQoTWFrZWZpbGUpCisgX0FURU9GCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3RyYWlsaW5nc2xhc2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3RyYWlsaW5nc2xhc2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg4MjRkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL2xpYnRvb2wvdHJhaWxpbmdzbGFzaC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQSBjb21tYW5kIGxpa2UgL2Jpbi9zaCAuLi8uLi9pNTg2LXBva3ktbGludXgtbGlidG9vbCAgIC0tbW9kZT1pbnN0YWxsIC91c3IvYmluL2luc3RhbGwgLWMgICBnY2stcm9vdHMtc3RvcmUtc3RhbmRhbG9uZS5sYSAnL21lZGlhL2RhdGExL2J1aWxkcy9wb2t5MS90bXAvd29yay9jb3JlMi1wb2t5LWxpbnV4L2dub21lLWtleXJpbmctMi4yNi4xLXIxL2ltYWdlL3Vzci9saWIvZ25vbWUta2V5cmluZy9zdGFuZGFsb25lLycgZmFpbHMgKGUuZy4gZ25vbWUta2V5cmluZyBvciBwdWxzZWF1ZGlvKQorCitUaGlzIGlzIGJlY2F1c2UgbGliZGlyIGhhcyBhIHRyYWlsaW5nIHNsYXNoIHdoaWNoIGJyZWFrcyB0aGUgY29tcGFyaXNpb24uCisKK1JQIDIvMS8xMAorCitNZXJnZWQgYSBwYXRjaCByZWNlaXZlZCBmcm9tIEdhcnkgVGhvbWFzIDxnYXJ5QG1sYmFzc29jLmNvbT4KKworRGF0ZTogMjAxMC8wNy8xMgorTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworVXBkYXRlZCBieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9idWlsZC1hdXgvbHRtYWluLmluIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTIzNTYsOCArMjM1NiwxNSBAQCBmdW5jX21vZGVfaW5zdGFsbCAoKQorIAlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisgCisgCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKysgICAgICAjIFN0cmlwIGFueSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBkZXN0aW5hdGlvbi4KKysgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRsaWJkaXIiCisrICAgICAgZGVzdGxpYmRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisrCisrICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdGRpciIKKysgICAgICBzX2Rlc3RkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorKworIAkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCistCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisrCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiWCRzX2Rlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGRlc3RsaWJkaXJcJCUlImAKKyAKKyAJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisgCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3Vud2luZC1vcHQtcGFyc2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjMzYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91bndpbmQtb3B0LXBhcnNpbmcucGF0Y2gKQEAgLTAsMCArMSwxNzkgQEAKK0N1dCBhbmQgcGFzdGUgdGhlIHBpZWNlcyBvZiBidWlsZC1hdXgvb3B0aW9ucy1wYXJzZXIgaW5saW5lIGludG8gdGhlIG1haW4KK2x0bWFpbi5zaCBjb2RlLiBUaGlzIHJlbW92ZXMgYSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBjYXVzZWQgYnkgdGhlIAorcmVwZWF0ZWQgY2FsbHMgdG8gZnVuY19xdW90ZV9mb3JfZXZhbCwgdGhlIG1lY2hhbmlzbSBmdW5jbGliIHVzZXMKK3RvIGNvbnN0cnVjdCB0aGUgZnVuY3Rpb25zIHVzZWQgZm9yIG9wdGlvbiBwYXJzaW5nLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbQmVpbmcgZGlzY3Vzc2VkIG9uIG1haWxpbmcgbGlzdCBGZWIgMjAxNV0KKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9sdG1haW4uaW4gYi9idWlsZC1hdXgvbHRtYWluLmluCitpbmRleCBkNWNmMDdhLi4wZjU0MzAzIDEwMDY0NAorLS0tIGEvYnVpbGQtYXV4L2x0bWFpbi5pbgorKysrIGIvYnVpbGQtYXV4L2x0bWFpbi5pbgorQEAgLTM0MiwxMSArMzQyLDE1IEBAIF9MVF9FT0YKKyAjIGxpYnRvb2xfb3B0aW9uc19wcmVwIFtBUkddLi4uCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxpYnRvb2wuCistbGlidG9vbF9vcHRpb25zX3ByZXAgKCkKKy17CisrI2xpYnRvb2xfb3B0aW9uc19wcmVwICgpCisrI3sKKyAgICAgJGRlYnVnX21vZGUKKyAKKyAgICAgIyBPcHRpb24gZGVmYXVsdHM6CisrICAgIG9wdF92ZXJib3NlPWZhbHNlCisrICAgIG9wdF93YXJuaW5nX3R5cGVzPQorKworKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICAgb3B0X2NvbmZpZz1mYWxzZQorICAgICBvcHRfZGxvcGVuPQorICAgICBvcHRfZHJ5X3J1bj1mYWxzZQorQEAgLTM4MiwxOSArMzg2LDE0IEBAIGxpYnRvb2xfb3B0aW9uc19wcmVwICgpCisgICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICAgICA7OworICAgICBlc2FjCistCistICAgICMgUGFzcyBiYWNrIHRoZSBsaXN0IG9mIG9wdGlvbnMuCistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKy19CistZnVuY19hZGRfaG9vayBmdW5jX29wdGlvbnNfcHJlcCBsaWJ0b29sX29wdGlvbnNfcHJlcAorKyN9CisgCisgCisgIyBsaWJ0b29sX3BhcnNlX29wdGlvbnMgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgUHJvdmlkZSBoYW5kbGluZyBmb3IgbGlidG9vbCBzcGVjaWZpYyBvcHRpb25zLgorLWxpYnRvb2xfcGFyc2Vfb3B0aW9ucyAoKQorLXsKKysjbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisrI3sKKyAgICAgJGRlYnVnX2NtZAorIAorICAgICAjIFBlcmZvcm0gb3VyIG93biBsb29wIHRvIGNvbnN1bWUgYXMgbWFueSBvcHRpb25zIGFzIHBvc3NpYmxlIGluCitAQCAtNDc0LDI5ICs0NzMsOTAgQEAgbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAKKy0JIyBBbiBvcHRpb24gbm90IGhhbmRsZWQgYnkgdGhpcyBob29rIGZ1bmN0aW9uOgorLSAgICAgICAgKikJCXNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CistICAgICAgZXNhYworLSAgICBkb25lCisrICAgICAgICAtLWRlYnVnfC14KSAgIGRlYnVnX2NtZD0nc2V0IC14JworKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisrICAgICAgICAgICAgICAgICAgICAgICRkZWJ1Z19jbWQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKyAKKysgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKysgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15IC0td2FybmluZ3Mgbm9uZSAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysJCSAgICAgIDs7CisgCistICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorLSAgICBsaWJ0b29sX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorLX0KKy1mdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBsaWJ0b29sX3BhcnNlX29wdGlvbnMKKysgICAgICAgIC0td2FybmluZ3N8LS13YXJuaW5nfC1XKQorKyAgICAgICAgICAgICAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19vcHQgJiYgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEiIGluCisrICAgICAgICAgICAgICAgICAgICAgICAgKiIgJDEgIiopCisrICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIHNwYWNlIHByZXZlbnRzIG1hdGNoaW5nIGxhc3QgJDEgYWJvdmUKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdfdHlwZXMgIiAkMSIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgICAgKmFsbCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgICAgKm5vbmUpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz1ub25lCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpCisrICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9ZnVuY19mYXRhbF9lcnJvcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICAgICAgICAgICAgICAqKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19mYXRhbF9lcnJvciBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2FybmluZyBjYXRlZ29yeTogJyQxJyIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9OiA7OworKyAgICAgICAgLS12ZXJzaW9uKSAgICBmdW5jX3ZlcnNpb24gOzsKKysgICAgICAgIC1cP3wtaCkgICAgICAgZnVuY191c2FnZSA7OworKyAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAgOzsKKysKKysJIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9ucyAocGx1Z2lucyBtYXkgbmVlZCB0aGlzKToKKysJLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKKysJICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2VxdWFsc19saHMiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9lcXVhbHNfcmhzIiAkezErIiRAIn0KKysgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKysgICAgICAgICAgICAgICAgICAgICAgOzsKKysKKysgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisrICAgICAgICAtVyopCisrICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrICAgICAgICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorKyAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKKysgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisrICAgICAgICAgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisrICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisrICAgICAgICAgICAgICAgICAgICAgIDs7CisrCisrICAgICAgICAtLSkgICAgICAgICAgIGJyZWFrIDs7CisrICAgICAgICAtKikgICAgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRfR19vcHQnIiA7OworKyAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CisrICAgICAgZXNhYworKyAgICBkb25lCisrI30KKyAKKysjIERpc3BsYXkgYWxsIHdhcm5pbmdzIGlmIC1XIHdhcyBub3QgZ2l2ZW4uCisrdGVzdCAtbiAiJG9wdF93YXJuaW5nX3R5cGVzIiB8fCBvcHRfd2FybmluZ190eXBlcz0iICR3YXJuaW5nX2NhdGVnb3JpZXMiCisgCisgCisgIyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKKyAjIGFyZ3VtZW50cy4KKy1saWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgKCkKKy17CisrI2xpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQorKyN7CisgICAgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisgICAgIGlmIHRlc3QgMCAtbHQgJCM7IHRoZW4KKy0gICAgICBub25vcHQ9JDEKKysgICAgICBub25vcHQ9JF9HX29wdAorICAgICAgIHNoaWZ0CisgICAgIGZpCisgCitAQCAtNTM3LDIwICs1OTcsMTAgQEAgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCisgICAgICAgZ2VuZXJpY19oZWxwPSRoZWxwCisgICAgICAgaGVscD0iVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICAgfQorKyN9CisgCistICAgICMgUGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVudCBsaXN0CistICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CistICAgIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CistfQorLWZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucworLQorLQorLSMgUHJvY2VzcyBvcHRpb25zIGFzIGVhcmx5IGFzIHBvc3NpYmxlIHNvIHRoYXQgLS1oZWxwIGFuZCAtLXZlcnNpb24KKy0jIGNhbiByZXR1cm4gcXVpY2tseS4KKy1mdW5jX29wdGlvbnMgJHsxKyIkQCJ9CistZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKy0KKy0KKysjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkIQorKyRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCisgCisgIyMgLS0tLS0tLS0tLS0gIyMKKyAjIyAgICBNYWluLiAgICAjIwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbC91c2Utc3lzcm9vdC1pbi1saWJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZjk5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sL3VzZS1zeXNyb290LWluLWxpYnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1doZW4gdXNpbmcgc3lzcm9vdCB3ZSBzaG91bGQgYXBwZW5kIGl0IHRvIGxpYmRpciwgd2hpY2ggaXMgaGVscGZ1bCBpbgorY3Jvc3MgYnVpbGRzIGFzIHRoZSBzeXN0ZW0gaXMgc3RhZ2VkIGluIHRoZSBzeXNyb290LiBGb3Igbm9ybWFsIGJ1aWxkcywKK2kuZS4gd2hlbiBsdF9zeXNyb290IGlzIG5vdCBzZXQsIGl0IHdpbGwgc3RpbGwgYmVoYXZlIHRoZSBzYW1lIGFuZCBhZGQKKy1ML3Vzci9saWIgdG8gdGhlIHJlbGluayBjb21tYW5kLgorCistS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1VwZGF0ZWQgYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2x0bWFpbi5pbiBiL2J1aWxkLWF1eC9sdG1haW4uaW4KKy0tLSBhL2J1aWxkLWF1eC9sdG1haW4uaW4KKysrKyBiL2J1aWxkLWF1eC9sdG1haW4uaW4KK0BAIC02NDIxLDcgKzY0MjEsNyBAQCBmdW5jX21vZGVfbGluayAoKQorIAkgICAgICBmaQorIAkgICAgZWxzZQorIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgorLQkgICAgICBhZGRfZGlyPS1MJGxpYmRpcgorKwkgICAgICBhZGRfZGlyPSItTCRsdF9zeXNyb290JGxpYmRpciIKKyAJICAgICAgIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorIAkJY2FzZSAkbGliZGlyIGluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9saWJ0b29sXzIuNC42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbF8yLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYxYjJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpYnRvb2wvbGlidG9vbF8yLjQuNi5iYgpAQCAtMCwwICsxLDI2IEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIgorCisjCisjIFdlIHdhbnQgdGhlIHJlc3VsdHMgb2YgbGlidG9vbC1jcm9zcyBwcmVzZXJ2ZWQgLSBkb24ndCBzdGFnZSBhbnl0aGluZyBvdXJzZWx2ZXMuCisjCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImxpYnRvb2xfc3lzcm9vdF9wcmVwcm9jZXNzIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgICAgIHNlZCAtZSAnc0AtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfUBAZycgXAorICAgICAgICAgICAgLWUgJ3NAJHtTVEFHSU5HX0RJUl9IT1NUfUBAZycgXAorICAgICAgICAgICAgLWUgJ3NAXlwoc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSJcKS4qQFwxJHtsaWJkaXJ9ICR7YmFzZV9saWJkaXJ9IkAnIFwKKyAgICAgICAgICAgIC1lICdzQF5cKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0iXCkuKkBcMSR7bGliZGlyfSAke2Jhc2VfbGliZGlyfSJAJyBcCisgICAgICAgICAgICAtZSAnc0BeXChjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9IlwpLipAXDEke2xpYmRpcn0gJHtiYXNlX2xpYmRpcn0iQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwocHJlZGVwX29iamVjdHM9IlwpLipAXDEiQCcgXAorICAgICAgICAgICAgLWUgJ3NAXlwocG9zdGRlcF9vYmplY3RzPSJcKS4qQFwxIkAnIFwKKyAgICAgICAgICAgIC1pICR7RH0ke2JpbmRpcn0vbGlidG9vbAorfQorCitsaWJ0b29sX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJcm0gLXJmICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS8qCisJcm0gLXJmICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vYWNsb2NhbC8qCisJcm0gLXJmICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vbGlidG9vbC9idWlsZC1hdXgvKgorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9uYXRpdmVzZGstbGlidG9vbF8yLjQuNi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saWJ0b29sL25hdGl2ZXNkay1saWJ0b29sXzIuNC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOGVhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGlidG9vbC9uYXRpdmVzZGstbGlidG9vbF8yLjQuNi5iYgpAQCAtMCwwICsxLDMxIEBACityZXF1aXJlIGxpYnRvb2wtJHtQVn0uaW5jCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2xpYnRvb2w6IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcHJlZml4LnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL2ZpeGluc3RhbGwucGF0Y2giCisKK2luaGVyaXQgbmF0aXZlc2RrCisKK1MgPSAiJHtXT1JLRElSfS9saWJ0b29sLSR7UFZ9IgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbGlidG9vbC8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBSZW1vdmUgYW55IGV4aXN0aW5nIGxpYnRvb2wgbTQgc2luY2Ugb2xkIHN0YWxlIHZlcnNpb25zIHdvdWxkIGJyZWFrCisJIyBhbnkgdXBncmFkZQorCXJtIC1mICR7U1RBR0lOR19EQVRBRElSfS9hY2xvY2FsL2xpYnRvb2wubTQKKwlybSAtZiAke1NUQUdJTkdfREFUQURJUn0vYWNsb2NhbC9sdCoubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCAtbSAwNzU1ICR7SE9TVF9TWVN9LWxpYnRvb2wgJHtEfSR7YmluZGlyfS8KK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJsaWJ0b29sbmF0aXZlc2RrX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworbGlidG9vbG5hdGl2ZXNka19zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCWluc3RhbGwgLWQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8KKwlpbnN0YWxsIC1tIDc1NSAke0R9JHtiaW5kaXJ9LyR7SE9TVF9TWVN9LWxpYnRvb2wgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS8ke0hPU1RfU1lTfS1saWJ0b29sCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy1uYXRpdmVfMC45LjY5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4YTkwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMtbmF0aXZlXzAuOS42OS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkNvbnZlcnQgTGludXhEb2MgU0dNTCBzb3VyY2UgaW50byBvdGhlciBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvbGludXhkb2MtdG9vbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA3N2VmNjRlYzNhYzI1N2ZiMGQ3ODY1MzFjZjI2OTMxIgorCitERVBFTkRTID0gImdyb2ZmLW5hdGl2ZSBvcGVuamFkZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2wvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHNfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlX3R4dF9kb2MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV90ZXhfZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWQxM2Q1MDA5MThhN2ExNDViMGVkYzJmMTZmNjFkZDEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzEwM2ZhY2VlMThhMmVhOTcxODZjYTQ1OWQ3NDNkMjJmN2Y4OWFkNGI1Y2QxZGZkMWMzNGY4M2Q2YmZkNDEwMSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIG5hdGl2ZQorCitkb19jb25maWd1cmUgKCkgeworCW9lX3J1bmNvbmYKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nICdUTVBESVI9JHtUfScgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfZHZpcHNfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MGIzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9kdmlwc19kb2MucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRGlzYWJsZSBidWlsZGluZyBkb2N1bWVudGF0aW9uIHdoaWNoIHJlcXVpcmVzIHRoZSBkdmlwcyB1dGlsaXR5LgorVGhpcyBwYXRjaCBzaG91bGQgYmUgZHJvcHBlZCBvbmNlIHdlIGluY2x1ZGUgYSBuYXRpdmUgdmVyc2lvbiBvZgorZHZpcHMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitUZW1wb3Jhcnkgd29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBkb2N1bWVudGF0aW9uLgorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnL2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6MjY6NDEuMTQyOTE3NzgyIC0wODAwCisrKysgbGludXhkb2MtdG9vbHMtMC45LjY2L2RvYy9NYWtlZG9jLnNoCTIwMTEtMDItMjUgMTU6Mjc6MjUuMTQxOTE3NDcyIC0wODAwCitAQCAtNTIsMTMgKzUyLDEzIEBACisgIwkkVE1QRElSL3NnbWwybGF0ZXggLS1wYXNzPSJcdXNlcGFja2FnZXt0aW1lc30iIC1vIGR2aSAuL2d1aWRlCisgI2ZpCisgCistaWYgWyAtbiAiYHdoaWNoIGR2aXBzYCIgXTsgdGhlbgorLQllY2hvICIgICArIGR2aXBzIiA+JjIKKy0JZHZpcHMgLXQgbGV0dGVyIC1vIC4vZ3VpZGUucHMgLi9ndWlkZS5kdmkKKy0JaWYgWyAtbiAiYHdoaWNoIGd6aXBgIiAtYSAtZiAuL2d1aWRlLnBzIF07IHRoZW4KKy0JCWd6aXAgLWZOIC4vZ3VpZGUucHMKKy0JZmkKKy1maQorKyNpZiBbIC1uICJgd2hpY2ggZHZpcHNgIiBdOyB0aGVuCisrIwllY2hvICIgICArIGR2aXBzIiA+JjIKKysjCWR2aXBzIC10IGxldHRlciAtbyAuL2d1aWRlLnBzIC4vZ3VpZGUuZHZpCisrIwlpZiBbIC1uICJgd2hpY2ggZ3ppcGAiIC1hIC1mIC4vZ3VpZGUucHMgXTsgdGhlbgorKyMJCWd6aXAgLWZOIC4vZ3VpZGUucHMKKysjCWZpCisrI2ZpCisgCisgCisgZWNobyAiLSBCdWlsZGluZyBpbmZvIGRvY3MiID4mMgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfc2dtbDJydGYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV9zZ21sMnJ0Zi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGM4YThmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL2xpbnV4ZG9jLXRvb2xzL2xpbnV4ZG9jLXRvb2xzL2Rpc2FibGVfc2dtbDJydGYucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA3NTZmMjBlNzBhOTdlZTJkZWE5YjMyYzA5NTVlYWJmYzI3ZjI5YmUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyOSBNYXkgMjAxMyAxNjo1MDoxNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBUaGUgYnVpbGQgb2Ygc2dtbDJydGYgaXMgcHJvYmxlbWF0aWMgZHVlIHRvIHRoZSB3YXkgaXQgd2FudHMKKyB0byBsaW5rIHRvIGEgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbiBvZiBmbGV4LiBGbGV4IG9ubHkKKyBzaGlwcyB3aXRoIGEgc3RhdGljIGxpYi4gUmF0aGVyIHRoYW4gZGl2ZXJnaW5nIGZyb20KKyB1cHN0cmVhbSBmbGV4LCBzaW1wbHkgc2tpcCBidWlsZGluZyB0aGlzIHVuLW5lZWRlZCB1dGlsaXR5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorV29ya2Fyb3VuZCB3aGljaCBkaXNhYmxlcyBhIGZlYXR1cmUuCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogQW5kcmVpIERpbnUgPGFuZHJlaS5hZHJpYW54LmRpbnVAaW50ZWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAgIDEyICsrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzNTlmMTRlLi5mYzA0MDIwIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDAsNyArNDAsNyBAQCBwZXJsNWxpYl9kZGlyICAgICAgPSAkKERFU1RESVIpJChwZXJsNWxpYmRpcikKKyBwa2dkYXRhX2RkaXIgICAgICAgPSAkKERFU1RESVIpJChwa2dkYXRhZGlyKQorIHRleF9kZGlyICAgICAgICAgICA9ICQoREVTVERJUikkKHRleGRpcikKKyAKKy1wcm9ncyAgICA6PSBzZ21sMmh0bWwgc2dtbDJpbmZvIHNnbWwybGF0ZXggc2dtbDJseXggc2dtbDJydGYgc2dtbDJ0eHQgc2dtbGNoZWNrCisrcHJvZ3MgICAgOj0gc2dtbDJodG1sIHNnbWwyaW5mbyBzZ21sMmxhdGV4IHNnbWwybHl4IHNnbWwydHh0IHNnbWxjaGVjaworIAorIFBST0ZJTEUgID0KKyBJTkNMVURFICA9CitAQCAtNzEsOSArNzEsOSBAQCBlbmRpZgorIAkoIGNkIHNnbWxwcmUgOyBcCisgCSAgJChNQUtFKSAgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIExFWD1mbGV4IHNnbWxwcmUgfHwgZXhpdCAtMSApCisgCistCUBlY2hvICJDb21waWxpbmcgUlRGIGNvbnZlcnNpb24gdG9vbHMgKGluIHJ0Zi1maXgvKS4uLiIKKy0JKCBjZCBydGYtZml4IDsgXAorLQkgICQoTUFLRSkgQ0ZMQUdTPSIkKENGTEFHUykiIExERkxBR1M9IiQoTERGTEFHUykiIHx8IGV4aXQgLTEgKQorKyMJQGVjaG8gIkNvbXBpbGluZyBSVEYgY29udmVyc2lvbiB0b29scyAoaW4gcnRmLWZpeC8pLi4uIgorKyMJKCBjZCBydGYtZml4IDsgXAorKyMJICAkKE1BS0UpIENGTEFHUz0iJChDRkxBR1MpIiBMREZMQUdTPSIkKExERkxBR1MpIiB8fCBleGl0IC0xICkKKyAKKyAJQGVjaG8gIm1ha2luZyBtYW4gcGFnZXMgaW4gZ2VubWFuIC4uLiIKKyAJaWYgWyAhIC1kIGdlbm1hbiBdOyB0aGVuIG1rZGlyIGdlbm1hbiA7IGZpCitAQCAtMTE3LDcgKzExNyw3IEBAIGVuZGlmCisgCisgIyAgICAtLSBJbnN0YWxsIGF1eGlsaWFyeSBwcm9ncmFtcworIAlta2RpciAtcCAkKGF1eGJpbl9kZGlyKQorLQlmb3IgaWkgaW4gc2dtbHByZS9zZ21scHJlIHJ0Zi1maXgvcnRmMnJ0ZjsgZG8gXAorKwlmb3IgaWkgaW4gc2dtbHByZS9zZ21scHJlOyBkbyBcCisgCSAgYm49YGJhc2VuYW1lICQkaWlgOyBcCisgCSAgJChJTlNUQUxMX1BST0dSQU0pICQkaWkgJChhdXhiaW5fZGRpcikvJCRibjsgXAorIAlkb25lCitAQCAtMjA2LDcgKzIwNiw3IEBAIGJpbi9saW51eGRvYzo6IE1ha2VmaWxlIGJpbi9saW51eGRvYy5pbgorIAorIGNsZWFuOjoKKyAJLXJtIC1mICp+IGJpbi8qfiBiaW4vbGludXhkb2MKKy0JZm9yIGQgaW4gJChERElSUykgJChNRElSUykgcnRmLWZpeDsgZG8gJChNQUtFKSAtQyAkJGQgY2xlYW47IGRvbmUKKysJZm9yIGQgaW4gJChERElSUykgJChNRElSUyk7IGRvICQoTUFLRSkgLUMgJCRkIGNsZWFuOyBkb25lCisgCShjZCBzZ21scHJlIDsgcm0gLWYgc2dtbHByZS5vIHNnbWxwcmUpCisgCS1ybSAtcmYgZ2VubWFuLworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3RleF9kb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90ZXhfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Mjg5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90ZXhfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Rpc2FibGUgYnVpbGRpbmcgZG9jdW1lbnRhdGlvbiB3aGljaCByZXF1aXJlcyB0aGUgbGF0ZXggdXRpbGl0eS4KK1RoaXMgcGF0Y2ggc2hvdWxkIGJlIGRyb3BwZWQgb25jZSB3ZSBpbmNsdWRlIGEgbmF0aXZlIHZlcnNpb24gb2YKK2xhdGV4LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW090aGVyXQorVGVtcG9yYXJ5IHdvcmthcm91bmQgd2hpY2ggZGlzYWJsZXMgZG9jdW1lbnRhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy9kb2MvTWFrZWRvYy5zaCBsaW51eGRvYy10b29scy0wLjkuNjYvZG9jL01ha2Vkb2Muc2gKKy0tLSBsaW51eGRvYy10b29scy0wLjkuNjYub3JpZy9kb2MvTWFrZWRvYy5zaAkyMDA5LTExLTA5IDExOjU4OjI1LjAwMDAwMDAwMCAtMDgwMAorKysrIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAkyMDExLTAyLTI1IDE1OjIzOjU4LjYxMDAxNjExNCAtMDgwMAorQEAgLTQ2LDExICs0NiwxMSBAQAorIAkkVE1QRElSL3NnbWwydHh0IC1iIDEgLi9ndWlkZQorIGZpCisgCistaWYgWyAtbiAiYHdoaWNoIGxhdGV4YCIgXTsgdGhlbgorLQlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleAorLQllY2hvICItIEJ1aWxkaW5nIGxhdGV4IGRvY3MiID4mMgorLQkkVE1QRElSL3NnbWwybGF0ZXggLS1wYXNzPSJcdXNlcGFja2FnZXt0aW1lc30iIC1vIGR2aSAuL2d1aWRlCistZmkKKysjaWYgWyAtbiAiYHdoaWNoIGxhdGV4YCIgXTsgdGhlbgorKyMJbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwybGF0ZXgKKysjCWVjaG8gIi0gQnVpbGRpbmcgbGF0ZXggZG9jcyIgPiYyCisrIwkkVE1QRElSL3NnbWwybGF0ZXggLS1wYXNzPSJcdXNlcGFja2FnZXt0aW1lc30iIC1vIGR2aSAuL2d1aWRlCisrI2ZpCisgCisgaWYgWyAtbiAiYHdoaWNoIGR2aXBzYCIgXTsgdGhlbgorIAllY2hvICIgICArIGR2aXBzIiA+JjIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9saW51eGRvYy10b29scy9saW51eGRvYy10b29scy9kaXNhYmxlX3R4dF9kb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90eHRfZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNzg0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbGludXhkb2MtdG9vbHMvbGludXhkb2MtdG9vbHMvZGlzYWJsZV90eHRfZG9jLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0Rpc2FibGUgYnVpbGRpbmcgdHh0IGRvY3VtZW50YXRpb24uIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCwKK2FzIEkgaGF2ZSBmb3VuZCBhbiBVYnVudHUgMTAuMTAgc3lzdGVtIHdoaWNoIHRocm93cyBlcnJvcnMgZHVyaW5nCitidWlsZGluZyB0aGlzIHRoYXQgSSdkIGxpa2UgdG8gdWx0aW1hdGVseSBmaXguIFRoZSBlcnJvciBtYW5pZmVzdHMKK2l0c2VsZiBmcm9tIHRoZSBlbmQgb2YgTGludXhEb2NUb29scy5wbSB3aXRoIHRoZSBmb2xsb3dpbmcgbWVzc2FnZXMKK2R1cmluZyBkb19pbnN0YWxsOgorCit8IC0gQnVpbGRpbmcgdHh0IGRvY3MKK3wgUHJvY2Vzc2luZyBmaWxlIC4vZ3VpZGUKK3wgdHJvZmY6IGZhdGFsIGVycm9yOiBjYW4ndCBmaW5kIG1hY3JvIGZpbGUgcworfCAgZm10X3R4dDo6cG9zdEFTUDogRW1wdHkgb3V0cHV0IGZpbGUsIGVycm9yIHdoZW4gY2FsbGluZyBncm9mZi4gQWJvcnRpbmcuLi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPdGhlcl0KK1RlbXBvcmFyeSB3b3JrYXJvdW5kIHdoaWNoIGRpc2FibGVzIGRvY3VtZW50YXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gbGludXhkb2MtdG9vbHMtMC45LjY2Lm9yaWcvL2RvYy9NYWtlZG9jLnNoIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAorLS0tIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni5vcmlnLy9kb2MvTWFrZWRvYy5zaAkyMDA5LTExLTA5IDExOjU4OjI1LjAwMDAwMDAwMCAtMDgwMAorKysrIGxpbnV4ZG9jLXRvb2xzLTAuOS42Ni9kb2MvTWFrZWRvYy5zaAkyMDExLTAzLTA0IDE3OjM3OjI0Ljc4ODkyMzk5OCAtMDgwMAorQEAgLTQwLDExICs0MCwxMSBAQAorIAorIGNobW9kIHUreCAkVE1QRElSL2xpbnV4ZG9jCisgCistaWYgWyAtbiAiYHdoaWNoIGdyb2ZmYCIgXTsgdGhlbgorLQlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJ0eHQKKy0JZWNobyAiLSBCdWlsZGluZyB0eHQgZG9jcyIgPiYyCistCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCistZmkKKysjaWYgWyAtbiAiYHdoaWNoIGdyb2ZmYCIgXTsgdGhlbgorKyMJbG4gLXMgJFRNUERJUi9saW51eGRvYyAkVE1QRElSL3NnbWwydHh0CisrIwllY2hvICItIEJ1aWxkaW5nIHR4dCBkb2NzIiA+JjIKKysjCSRUTVBESVIvc2dtbDJ0eHQgLWIgMSAuL2d1aWRlCisrI2ZpCisgCisgaWYgWyAtbiAiYHdoaWNoIGxhdGV4YCIgXTsgdGhlbgorIAlsbiAtcyAkVE1QRElSL2xpbnV4ZG9jICRUTVBESVIvc2dtbDJsYXRleApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC4xNy5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjE3LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE0ZTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LTEuNC4xNy5pbmMKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBtNC5pbmMKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2lnc2Vndi1wcmVmaXgiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0XAorCSAgICAgICAgICAgIGZpbGU6Ly9leGFtcGxlcy9DT1BZSU5HO21kNT00MDMxNTkzYjIxNjZkNmM0N2NhZTI4MmQ5NDRhN2VkZSIKKworU1JDX1VSSSArPSAiZmlsZTovL2FjX2NvbmZpZ19saW5rcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLWdldHMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICJcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKwkgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYTVlOTk1NGIxZGFlMDM2NzYyZjdiMTM2NzNhMmNmNzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2NlNzI1MTMzZWU1NTJiOGI0YmFjYTc4MzdmYjc3Mjk0MGIyNWU4MWIyYTlkYzkyNTM3YWVhZjczMzUzOGM5ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC0xLjQuOS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjkuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYjJjMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtMS40LjkuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgbTQuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlXAorCWZpbGU6Ly9leGFtcGxlcy9DT1BZSU5HO21kNT0xZDQ5YmQ2MWRjNTkwZjAxNGNhZTcxNzNiNDNlM2U1YyIKKworUFIgPSAicjIiCitTUkNfVVJJICs9ICJmaWxlOi8vZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWJhOGUxNDdhZmY1ZTc5YmQyYmZiOTgzZDg2YjUzZDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODE1Y2U1Mzg1M2ZiZjY0OTM2MTdmNDY3Mzg5Yjc5OTIwOGIxZWM5ODI5NmI5NWJlNDRhNjgzZjhiY2ZkN2M0NyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LW5hdGl2ZV8xLjQuMTcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQtbmF0aXZlXzEuNC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmQ4YWEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LW5hdGl2ZV8xLjQuMTcuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSBtNC0ke1BWfS5pbmMKKworaW5oZXJpdCBuYXRpdmUKKworSU5ISUJJVF9BVVRPVE9PTFNfREVQUyA9ICIxIgorREVQRU5EUyArPSAiZ251LWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZSgpICB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7U1RBR0lOR19EQVRBRElSfS9nbnUtY29uZmlnL2NvbmZpZy5zdWIgLgorCWluc3RhbGwgLW0gMDY0NCAke1NUQUdJTkdfREFUQURJUn0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgLgorCW9lX3J1bmNvbmYKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4MzkyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC5pbmMKQEAgLTAsMCArMSwxMCBAQAorU1VNTUFSWSA9ICJUcmFkaXRpb25hbCBVbml4IG1hY3JvIHByb2Nlc3NvciIKK0RFU0NSSVBUSU9OID0gIkdOVSBtNCBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhZGl0aW9uYWwgVW5peCBtYWNybyBwcm9jZXNzb3IuICBJdCBpcyBtb3N0bHkgU1ZSNCBcCitjb21wYXRpYmxlIGFsdGhvdWdoIGl0IGhhcyBzb21lIGV4dGVuc2lvbnMgKGZvciBleGFtcGxlLCBoYW5kbGluZyBtb3JlIHRoYW4gOSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gbWFjcm9zKS4gXAorR05VIE00IGFsc28gaGFzIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgaW5jbHVkaW5nIGZpbGVzLCBydW5uaW5nIHNoZWxsIGNvbW1hbmRzLCBkb2luZyBhcml0aG1ldGljLCBldGMuIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0VYVFJBX09FTUFLRSArPSAiJ2luZm9kaXI9JHtpbmZvZGlyfSciCitMREZMQUdTX3ByZXBlbmRfbGliYy11Y2xpYmMgPSAiIC1scnQgIgorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L200L200LSR7UFZ9LnRhci5neiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200LzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9hY19jb25maWdfbGlua3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvYWNfY29uZmlnX2xpbmtzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NWMwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvYWNfY29uZmlnX2xpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworVGhpcyBwYXRjaCBmaXhlcyBhIGJ1aWxkIHByb2JsZW0gZm9yIG00LW5hdGl2ZSBleHBlcmllbmNlZCBvbiBVYnVudHUgOS4xMCwKK3doZXJlIGF1dG9jb25mL2F1dG9tYWtlIChBQ19DT05GSUdfTElOS1MpIGVuZHMgdXAgbWFraW5nIEdOVW1ha2VmaWxlIGEKK3N5bWxpbmsgdG8gaXRzZWxmLgorCitUaGUgcGF0Y2ggY29tbWVudHMgb3V0IGFjX2NvbmZpZ19saW5rcyBkaXJlY3RseSBpbiBjb25maWd1cmUsCithcyBhdXRvcmVjb25mIGlzIG5vdCBhY3R1YWxseSBydW4gZm9yIG00LW5hdGl2ZS4KKworSSBiZWxpZXZlIGl0IHNob3VsZCBiZSBzYWZlLCBhcyBHTlVtYWtlZmlsZSBpcyBhY3R1YWxseSB1bnBhY2tlZCBmcm9tCitzb3VyY2UsIGFuZCB3aGF0IHdlIHdhbnQgaXMgdG8gaXMgdG8gbm90IHRvdWNoIGl0LgorCitUZXN0ZWQgb24geDg2XzY0X2xpbnV4IChVYnVudHUgOC4wNCBhbmQgOS4xMCkuCisKKzIwMDktMTEtMTAJRXNiZW4gSGFhYmVuZGFsCSAgICA8ZWhhQGRvcmVkZXZlbG9wbWVudC5kaz4KKworZGlmZiAtdXJOIG00LTEuNC4xMy5vcmlnL2NvbmZpZ3VyZSBtNC0xLjQuMTMvY29uZmlndXJlCistLS0gbTQtMS40LjEzLm9yaWcvY29uZmlndXJlCTIwMDktMTEtMTAgMTA6NTQ6MDAuMzAxNzA3MDk3ICswMTAwCisrKysgbTQtMS40LjEzL2NvbmZpZ3VyZQkyMDA5LTExLTEwIDEwOjU0OjE3LjMxNDIwNjM3OSArMDEwMAorQEAgLTE0ODYwLDggKzE0ODYwLDggQEAKKyAgICMgb25seSwgaXQgZG9lcyBub3QgbWF0dGVyIGlmIHdlIHNraXAgdGhlIGxpbmsgd2l0aCBvbGRlciBhdXRvY29uZi4KKyAgICMgQXV0b21ha2UgMS4xMC4xIGFuZCBlYXJsaWVyIHRyeSB0byByZW1vdmUgR05VbWFrZWZpbGUgaW4gbm9uLVZQQVRICisgICAjIGJ1aWxkcywgc28gdXNlIGEgc2hlbGwgdmFyaWFibGUgdG8gYnlwYXNzIHRoaXMuCistICBHTlVtYWtlZmlsZT1HTlVtYWtlZmlsZQorLSAgYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzICRHTlVtYWtlZmlsZTokR05VbWFrZWZpbGUiCisrICMgR05VbWFrZWZpbGU9R05VbWFrZWZpbGUKKysgIyBhY19jb25maWdfbGlua3M9IiRhY19jb25maWdfbGlua3MgJEdOVW1ha2VmaWxlOiRHTlVtYWtlZmlsZSIKKyAKKyAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9maXhfZm9yX2NpcmN1bGFyX2RlcGVuZGVuY3kucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4Nzc0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvZml4X2Zvcl9jaXJjdWxhcl9kZXBlbmRlbmN5LnBhdGNoCkBAIC0wLDAgKzEsNzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitUaGUgb2xkZXIgR1BMdjIgbTQgZG9lcyBub3Qgd29yayB3ZWxsIHdpdGggbmV3ZXIgYXV0b2NvbmYuIEl0IGNhdXNlcyB0aGUgCitjaXJjdWxhciBkZXBlbmRlbmN5IGFzIHNlZW4gYmVsbG93LgorICBSZW1vdmluZyB0aGlzIG00IGZpbGUgd2hpY2ggd2FzIG5lZWRlZCBvbmx5IGZvcmwgb2xkZXIgYXV0b2NvbmYKKworfCBjb25maWd1cmUuYWM6MzQ6IGVycm9yOiBBQ19SRVFVSVJFOiBjaXJjdWxhciBkZXBlbmRlbmN5IG9mIEFDX0dOVV9TT1VSQ0UKK3wgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L200LTEuNC45LXIwL200LTEuNC45L200L2V4dGVuc2lvbnMubTQ6MTk6IEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IC4uLy4uL2xpYi9hdXRvY29uZi9zcGVjaWZpYy5tNDozMTA6IEFDX0dOVV9TT1VSQ0UgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbTQtMS40LjktcjAvbTQtMS40LjkvbTQvZ251bGliLWNvbXAubTQ6MjE6IE00X0VBUkxZIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgY29uZmlndXJlLmFjOjM0OiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKK3wgYWNsb2NhbDogL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2F1dG9tNHRlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCit8IGF1dG9yZWNvbmY6IGFjbG9jYWwgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMDMvMTYKKworSW5kZXg6IG00LTEuNC45L200L2V4dGVuc2lvbnMubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtNC0xLjQuOS5vcmlnL200L2V4dGVuc2lvbnMubTQKKysrKyBtNC0xLjQuOS9tNC9leHRlbnNpb25zLm00CitAQCAtNiw1MyArNiwxMCBAQAorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIFRoaXMgZGVmaW5pdGlvbiBvZiBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgaXMgc3RvbGVuIGZyb20gQ1ZTCistIyBBdXRvY29uZi4gIFBlcmhhcHMgd2UgY2FuIHJlbW92ZSB0aGlzIG9uY2Ugd2UgY2FuIGFzc3VtZSBBdXRvY29uZgorLSMgMi42MSBvciBsYXRlciBldmVyeXdoZXJlLCBidXQgc2luY2UgQ1ZTIEF1dG9jb25mIG11dGF0ZXMgcmFwaWRseQorLSMgZW5vdWdoIGluIHRoaXMgYXJlYSBpdCdzIGxpa2VseSB3ZSdsbCBuZWVkIHRvIHJlZGVmaW5lCistIyBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMgZm9yIHF1aXRlIHNvbWUgdGltZS4KKy0KKy0jIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLAorLSMgdHlwaWNhbGx5IGR1ZSB0byBzdGFuZGFyZHMtY29uZm9ybWFuY2UgaXNzdWVzLgorLUFDX0RFRlVOKFtBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlNdLAorLVsKKy0gIEFDX0JFRk9SRShbJDBdLCBbQUNfQ09NUElMRV9JRkVMU0VdKQorLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSkKKy0KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLSAgQUNfUkVRVUlSRShbQUNfQUlYXSkKKy0gIEFDX1JFUVVJUkUoW0FDX01JTklYXSkKKy0KKy0gIEFIX1ZFUkJBVElNKFtfX0VYVEVOU0lPTlNfX10sCistWy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworLSNpZm5kZWYgX19FWFRFTlNJT05TX18KKy0jIHVuZGVmIF9fRVhURU5TSU9OU19fCistI2VuZGlmCistI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKy0jIHVuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSNlbmRpZgorLSNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jIHVuZGVmIF9UQU5ERU1fU09VUkNFCistI2VuZGlmXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fXSwKKy0gICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fXSwKKy0gICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorLSAgICAgICBbQUNfTEFOR19QUk9HUkFNKFsKKy0jCSAgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKy0JICBBQ19JTkNMVURFU19ERUZBVUxUXSldLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189eWVzXSwKKy0gICAgICAgW2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPW5vXSldKQorLSAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKy0gICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCistICBBQ19ERUZJTkUoW19QT1NJWF9QVEhSRUFEX1NFTUFOVElDU10pCistICBBQ19ERUZJTkUoW19UQU5ERU1fU09VUkNFXSkKKy1dKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisgQUNfREVGVU4oW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistICBbQUNfUkVRVUlSRShbQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TXSldKQorKyAgW10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZmI0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbTQvbTQvbWFrZS5wYXRjaApAQCAtMCwwICsxLDQyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisjCisjIFBhdGNoIG1hbmFnZWQgYnkgaHR0cDovL3d3dy5ob2xnZXJzY2h1cmlnLmRlL3BhdGNoZXIuaHRtbAorIworCistLS0gbTQtMS40LjIvZG9jL01ha2VmaWxlLmlufm1ha2UKKysrKyBtNC0xLjQuMi9kb2MvTWFrZWZpbGUuaW4KK0BAIC01Nyw5ICs1Nyw5IEBACisgCWRhdGUgPiAkKHNyY2Rpcikvc3RhbXAtdnRpCisgCisgaW5zdGFsbDogYWxsCistCSQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoaW5mb2RpcikKKysJJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoaW5mb2RpcikKKyAJY2QgJChzcmNkaXIpICYmIGZvciBmaWxlIGluIG00LmluZm8qOyBkbyBcCistCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZSAkKGluZm9kaXIpLyQkZmlsZTsgXAorKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGUgJChERVNURElSKSQoaW5mb2RpcikvJCRmaWxlOyBcCisgCWRvbmUKKyAKKyB1bmluc3RhbGw6CistLS0gbTQtMS40LjIvc3JjL01ha2VmaWxlLmlufm1ha2UKKysrKyBtNC0xLjQuMi9zcmMvTWFrZWZpbGUuaW4KK0BAIC0zNSw3ICszNSw3IEBACisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKyB0cmFuc2Zvcm0gPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKKy1iaW5kaXIgPSAkKGV4ZWNfcHJlZml4KS9iaW4KKytiaW5kaXIgPSBAYmluZGlyQAorIAorIENPTVBJTEUgPSAkKENDKSAtYyAkKERFRlMpICQoSU5DTFVERVMpICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorIExJTksgPSAkKENDKSAkKExERkxBR1MpIC1vICRACitAQCAtODQsOCArODQsOCBAQAorIAkkKExJTkspIGFuc2kya25yLm8gJChMSUJTKQorIAorIGluc3RhbGw6IGFsbAorLQkkKHNyY2RpcikvLi4vbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG00ICQoYmluZGlyKS9gZWNobyBtNCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AKKysJJChzcmNkaXIpLy4uL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgbTQgJChERVNURElSKSQoYmluZGlyKS9gZWNobyBtNCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AKKyAKKyB1bmluc3RhbGw6CisgCXJtIC1mICQoYmluZGlyKS9gZWNobyBtNCB8IHNlZCAnJCh0cmFuc2Zvcm0pJ2AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9yZW1vdmUtZ2V0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNC9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmZiMzUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200L3JlbW92ZS1nZXRzLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2VnbGliYyBoYXMgcmVtb3ZlIGdldHMgc3RhcnRpbmcgMi4xNgordGhlcmVmb3JlIGNoZWNrIGZvciBpdHMgYmVpbmcgdGhlcmUgYmVmb3JlIAordW5kZWZpbmluZyBpdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IG00LTEuNC4xNy9saWIvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG00LTEuNC4xNy5vcmlnL2xpYi9zdGRpby5pbi5oCTIwMTMtMTAtMTYgMTQ6NDE6MDEuNjc4NDk2MjI3ICswMzAwCisrKysgbTQtMS40LjE3L2xpYi9zdGRpby5pbi5oCTIwMTMtMTAtMTYgMTQ6NDE6NDguODQ5NDI3ODM5ICswMzAwCitAQCAtNzE3LDEwICs3MTcsMTIgQEAKKyAvKiBJdCBpcyB2ZXJ5IHJhcmUgdGhhdCB0aGUgZGV2ZWxvcGVyIGV2ZXIgaGFzIGZ1bGwgY29udHJvbCBvZiBzdGRpbiwKKyAgICBzbyBhbnkgdXNlIG9mIGdldHMgd2FycmFudHMgYW4gdW5jb25kaXRpb25hbCB3YXJuaW5nOyBiZXNpZGVzLCBDMTEKKyAgICByZW1vdmVkIGl0LiAgKi8KKysjaWYgZGVmaW5lZCBnZXRzCisgI3VuZGVmIGdldHMKKyAjaWYgSEFWRV9SQVdfREVDTF9HRVRTCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworICNlbmRpZgorKyNlbmRpZgorIAorIAorICNpZiBAR05VTElCX09CU1RBQ0tfUFJJTlRGQCB8fCBAR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC4xNy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuMTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEyYzBhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuMTcuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG00LSR7UFZ9LmluYworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tNC9tNF8xLjQuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTJjMGFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL200L200XzEuNC45LmJiCkBAIC0wLDAgKzEsMyBAQAorcmVxdWlyZSBtNC0ke1BWfS5pbmMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyZTk2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UtMy44MS9tYWtlX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXV0b21ha2UgMS4xMiBoYXMgZGVwcmljYXRlZCBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0CisKK3RoaXMgcGF0Y2ggYXZvaWRzIHRoZXNlIGtpbmRzIG9mIGVycm9yczoKKworfCBjb25maWd1cmUuaW46NDg6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKy4uLgorfCBNYWtlZmlsZS5hbToxOTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorfCBFUlJPUjogYXV0b3JlY29uZiBleGVjdXRpb24gZmFpbGVkLgorCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBtYWtlLTMuODEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFrZS0zLjgxLm9yaWcvY29uZmlndXJlLmluCisrKysgbWFrZS0zLjgxL2NvbmZpZ3VyZS5pbgorQEAgLTQ0LDkgKzQ0LDYgQEAgQUNfQUlYCisgQUNfSVNDX1BPU0lYCisgQUNfTUlOSVgKKyAKKy0jIE5lZWRlZCBmb3IgYW5zaTJrbnIKKy1BTV9DX1BST1RPVFlQRVMKKy0KKyAjIEVuYWJsZSBnZXR0ZXh0LCBpbiAiZXh0ZXJuYWwiIG1vZGUuCisgCisgQU1fR05VX0dFVFRFWFRfVkVSU0lPTigwLjE0LjEpCitJbmRleDogbWFrZS0zLjgxL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFrZS0zLjgxLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBtYWtlLTMuODEvTWFrZWZpbGUuYW0KK0BAIC0xNiw3ICsxNiw3IEBACisgIyBHTlUgTWFrZTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgCistQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBkaXN0LWJ6aXAyIGNoZWNrLW5ld3MgYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gMS44IGRpc3QtYnppcDIgY2hlY2stbmV3cworIEFDTE9DQUxfQU1GTEFHUwk9ICAtSSBjb25maWcKKyAKKyBNQUtFX0hPU1QgPQlATUFLRV9IT1NUQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VpbmZvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZS0zLjgxL21ha2VpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZDc2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLTMuODEvbWFrZWluZm8ucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorQWxsb3cgZG9jcyB0byBidWlsZCB3aXRoIG1ha2VpbmZvIDUuWCwgZml4aW5nIHRoZSBlcnJvcjoKKworZG9jL21ha2UudGV4aTo4MTY1OiBAaXRlbXggbXVzdCBmb2xsb3cgQGl0ZW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSUAorMjAxNC8wMy8yOQorCitJbmRleDogbWFrZS0zLjgxL2RvYy9tYWtlLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtYWtlLTMuODEub3JpZy9kb2MvbWFrZS50ZXhpCTIwMDYtMDQtMDEgMDY6MzY6NDAuMDAwMDAwMDAwICswMDAwCisrKysgbWFrZS0zLjgxL2RvYy9tYWtlLnRleGkJMjAxNC0wMy0yOSAwOTozOTo1MS4wMDc3MjcwMTIgKzAwMDAKK0BAIC04MTYyLDcgKzgxNjIsNyBAQAorIHJhcmVseSBuZWVkIHRvIHNwZWNpZnkgdGhpcyBvcHRpb24gc2luY2UgQHNhbXB7bWFrZX0gZG9lcyBpdCBmb3IgeW91OworIHNlZSBAcmVmey13IE9wdGlvbiwgLFRoZSBAc2FtcHstLXByaW50LWRpcmVjdG9yeX0gT3B0aW9ufS4pCisgCistQGl0ZW14IC0tbm8tcHJpbnQtZGlyZWN0b3J5CisrQGl0ZW0gLS1uby1wcmludC1kaXJlY3RvcnkKKyBAY2luZGV4IEBjb2Rley0tbm8tcHJpbnQtZGlyZWN0b3J5fQorIERpc2FibGUgcHJpbnRpbmcgb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHVuZGVyIEBjb2Rley13fS4KKyBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiBAY29kZXstd30gaXMgdHVybmVkIG9uIGF1dG9tYXRpY2FsbHksCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZWE2MDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlLmluYwpAQCAtMCwwICsxLDEwIEBACitTVU1NQVJZID0gIkdOVSB0b29sIHRoYXQgY29udHJvbHMgdGhlIGJ1aWxkIHByb2Nlc3MiCitERVNDUklQVElPTiA9ICJNYWtlIGlzIGEgdG9vbCB3aGljaCBjb250cm9scyB0aGUgZ2VuZXJhdGlvbiBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgbm9uLXNvdXJjZSBmaWxlcyBvZiBhIFwKK3Byb2dyYW0gZnJvbSB0aGUgcHJvZ3JhbSdzIHNvdXJjZSBmaWxlcy4gIE1ha2UgZ2V0cyBpdHMga25vd2xlZGdlIG9mIGhvdyB0byBidWlsZCB5b3VyIHByb2dyYW0gZnJvbSBhIGZpbGUgXAorY2FsbGVkIHRoZSBtYWtlZmlsZSwgd2hpY2ggbGlzdHMgZWFjaCBvZiB0aGUgbm9uLXNvdXJjZSBmaWxlcyBhbmQgaG93IHRvIGNvbXB1dGUgaXQgZnJvbSBvdGhlciBmaWxlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbWFrZS8iCitTRUNUSU9OID0gImRldmVsIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbWFrZS9tYWtlLSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnIHRleGluZm8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfMy44MS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlL21ha2VfMy44MS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGE3OWIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV8zLjgxLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzYxYjZiODM3Y2FkMjZjNjkwMGE5MjZiNjJhYWRhNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCisKK3JlcXVpcmUgbWFrZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL21ha2VfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorU1JDX1VSSSArPSAiZmlsZTovL21ha2VpbmZvLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzU0ODUzZTBiMmRhOTBjNTI3ZTM1YWFiYjhkNmYxZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjNlNjkwMjM3NzFlMjM5MDhmNWQ1NTkyOTU0ZDgyNzFkM2Q2YWYwOTY5M2NlY2ZkMjljZWU2ZmRlODU1MGRjOCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZS9tYWtlXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWIwZDdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2UvbWFrZV80LjEuYmIKQEAgLTAsMCArMSwxMiBAQAorTElDRU5TRSA9ICJHUEx2MyAmIExHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsb2IvQ09QWUlORy5MSUI7bWQ1PTRhNzcwYjY3ZTZiZTBmNjBkYTI0NGJlYjJkZTBmY2U0IgorcmVxdWlyZSBtYWtlLmluYworCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1ndWlsZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjU3YTdhMjI0YTgyMmY5NDc4OWE1ODdjY2JjZWRmZjY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiYzc2MTMzODk2NTBlZTZhMjQ1NTRiNTI1NzJhMjcyZjczNTYxNjRmZDJjNDEzMmIwYmNmMTMxMjNlNGZjYTUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9DT1BZSU5HLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL0NPUFlJTkcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4OTAyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tYWtlZGV2cy9tYWtlZGV2cy9DT1BZSU5HLnBhdGNoCkBAIC0wLDAgKzEsMzQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworZGlmZiAtcnVOIG1ha2VkZXZzLTEuMC4wLW9yaWcvQ09QWUlORyBtYWtlZGV2cy0xLjAuMC9DT1BZSU5HCistLS0gbWFrZWRldnMtMS4wLjAtb3JpZy9DT1BZSU5HCTE5NzAtMDEtMDEgMDg6MDA6MDAuMDAwMDAwMDAwICswODAwCisrKysgbWFrZWRldnMtMS4wLjAvQ09QWUlORwkyMDEwLTEyLTA5IDE2OjQyOjIwLjI3NDk4NDY2NSArMDgwMAorQEAgLTAsMCArMSwzNDAgQEAKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisrCisrIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisrIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorKworKwkJCSAgICBQcmVhbWJsZQorKworKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCisrTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCisrR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCisrdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQorK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKwwKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysMCisrVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgorK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCisrYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCisrdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgorK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCisrZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorKworK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAorK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisrCisrSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQorK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCisrdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAorK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKysKKysgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKysgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisrICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisrICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKysgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisrCisrICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisrICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisrICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisrICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKysgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisrCisrVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCisrY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKythc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KKytjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCisrc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCisrYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKKytmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CisraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorKworK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKKythY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CisrYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCisrZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90CisrY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKysMCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysMCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysMCisrCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKysKKysgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKKytwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CisrZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisrCisrICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAorK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKKytjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAorK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorKworKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKworKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisrCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnMvbWFrZWRldnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFmMzNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzL21ha2VkZXZzLmMKQEAgLTAsMCArMSw1ODkgQEAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjZGVmaW5lIE1JTk9SQklUUwk4CisjZGVmaW5lIE1LREVWKG1hLG1pKQkoKChtYSkgPDwgTUlOT1JCSVRTKSB8IChtaSkpCisjZGVmaW5lIE1BWF9JRF9MRU4gICAgICA0MAorI2RlZmluZSBNQVhfTkFNRV9MRU4gICAgNDAKKyNpZm5kZWYgUEFUSF9NQVgKKyNkZWZpbmUgUEFUSF9NQVggICAgICAgIDQwOTYKKyNlbmRpZgorI2RlZmluZSBWRVJTSU9OICAgICAgICAgIjEuMC4xIgorCisvKiBUaGVzZSBhcmUgYWxsIHN0b2xlbiBmcm9tIGJ1c3lib3gncyBsaWJiYiB0byBtYWtlCisgKiBlcnJvciBoYW5kbGluZyBzaW1wbGVyIChhbmQgc2luY2UgSSBtYWludGFpbiBidXN5Ym94LAorICogSSdtIHJhdGhlciBwYXJ0aWFsIHRvIHRoZXNlIGZvciBlcnJvciBoYW5kbGluZykuCisgKiAgLUVyaWsKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGFwcF9uYW1lID0gIm1ha2VkZXZzIjsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1vcnlfZXhoYXVzdGVkID0gIm1lbW9yeSBleGhhdXN0ZWQiOworc3RhdGljIGNoYXIgZGVmYXVsdF9yb290ZGlyW109Ii4iOworc3RhdGljIGNoYXIgKnJvb3RkaXIgPSBkZWZhdWx0X3Jvb3RkaXI7CitzdGF0aWMgaW50IHRyYWNlID0gMDsKKworc3RydWN0IG5hbWVfaWQgeworCWNoYXIgbmFtZVtNQVhfTkFNRV9MRU4rMV07CisJdW5zaWduZWQgbG9uZyBpZDsKKwlzdHJ1Y3QgbmFtZV9pZCAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCAqdXNyX2xpc3QgPSBOVUxMOworc3RhdGljIHN0cnVjdCBuYW1lX2lkICpncnBfbGlzdCA9IE5VTEw7CisKK3N0YXRpYyB2b2lkIHZlcnJvcl9tc2coY29uc3QgY2hhciAqcywgdmFfbGlzdCBwKQoreworCWZmbHVzaChzdGRvdXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIGFwcF9uYW1lKTsKKwl2ZnByaW50ZihzdGRlcnIsIHMsIHApOworfQorCitzdGF0aWMgdm9pZCBlcnJvcl9tc2dfYW5kX2RpZShjb25zdCBjaGFyICpzLCAuLi4pCit7CisJdmFfbGlzdCBwOworCisJdmFfc3RhcnQocCwgcyk7CisJdmVycm9yX21zZyhzLCBwKTsKKwl2YV9lbmQocCk7CisJcHV0YygnXG4nLCBzdGRlcnIpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQgdnBlcnJvcl9tc2coY29uc3QgY2hhciAqcywgdmFfbGlzdCBwKQoreworCWludCBlcnIgPSBlcnJubzsKKworCWlmIChzID09IDApCisJCXMgPSAiIjsKKwl2ZXJyb3JfbXNnKHMsIHApOworCWlmICgqcykKKwkJcyA9ICI6ICI7CisJZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzLCBzdHJlcnJvcihlcnIpKTsKK30KKworc3RhdGljIHZvaWQgcGVycm9yX21zZ19hbmRfZGllKGNvbnN0IGNoYXIgKnMsIC4uLikKK3sKKwl2YV9saXN0IHA7CisKKwl2YV9zdGFydChwLCBzKTsKKwl2cGVycm9yX21zZyhzLCBwKTsKKwl2YV9lbmQocCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitzdGF0aWMgRklMRSAqeGZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqZnA7CisKKwlpZiAoKGZwID0gZm9wZW4ocGF0aCwgbW9kZSkpID09IE5VTEwpCisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCBwYXRoKTsKKwlyZXR1cm4gZnA7Cit9CisKK3N0YXRpYyBjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMpCit7CisJY2hhciAqdDsKKworCWlmIChzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJdCA9IHN0cmR1cChzKTsKKworCWlmICh0ID09IE5VTEwpCisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCisJcmV0dXJuIHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmFtZV9pZCogYWxsb2Nfbm9kZSh2b2lkKQoreworCXN0cnVjdCBuYW1lX2lkICpub2RlOworCW5vZGUgPSAoc3RydWN0IG5hbWVfaWQqKW1hbGxvYyhzaXplb2Yoc3RydWN0IG5hbWVfaWQpKTsKKwlpZiAobm9kZSA9PSBOVUxMKSB7CisJCWVycm9yX21zZ19hbmRfZGllKG1lbW9yeV9leGhhdXN0ZWQpOworCX0KKwltZW1zZXQoKHZvaWQgKilub2RlLT5uYW1lLCAwLCBNQVhfTkFNRV9MRU4rMSk7CisJbm9kZS0+aWQgPSAweGZmZmZmZmZmOworCW5vZGUtPm5leHQgPSBOVUxMOworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgc3RydWN0IG5hbWVfaWQqIHBhcnNlX2xpbmUoY2hhciAqbGluZSkKK3sKKwljaGFyICpwOworCWludCBpOworCWNoYXIgaWRfYnVmW01BWF9JRF9MRU4rMV07CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJbm9kZSA9IGFsbG9jX25vZGUoKTsKKwlwID0gbGluZTsKKwlpID0gMDsKKwkvLyBHZXQgbmFtZSBmaWVsZAorCXdoaWxlICgqcCAhPSAnOicpIHsKKwkJaWYgKGkgPiBNQVhfTkFNRV9MRU4pCisJCQllcnJvcl9tc2dfYW5kX2RpZSgiTmFtZSBmaWVsZCB0b28gbG9uZyIpOworCQlub2RlLT5uYW1lW2krK10gPSAqcCsrOworCX0KKwlub2RlLT5uYW1lW2ldID0gJ1wwJzsKKwlwKys7CisJLy8gU2tpcCB0aGUgc2Vjb25kIGZpZWxkCisJd2hpbGUgKCpwICE9ICc6JykKKwkJcCsrOworCXArKzsKKwkvLyBHZXQgaWQgZmllbGQKKwlpID0gMDsKKwl3aGlsZSAoKnAgIT0gJzonKSB7CisJCWlmIChpID4gTUFYX0lEX0xFTikKKwkJCWVycm9yX21zZ19hbmRfZGllKCJJRCBmaWxlZCB0b28gbG9uZyIpOworCQlpZF9idWZbaSsrXSA9ICpwKys7CisJfQorCWlkX2J1ZltpXSA9ICdcMCc7CisJbm9kZS0+aWQgPSBhdG9sKGlkX2J1Zik7CisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9saXN0X2Zyb21fZmlsZShGSUxFICpmaWxlLCBzdHJ1Y3QgbmFtZV9pZCAqKnBsaXN0KQoreworCWNoYXIgKmxpbmU7CisJaW50IGxlbiA9IDA7CisJc2l6ZV90IGxlbmd0aCA9IDI1NjsKKwlzdHJ1Y3QgbmFtZV9pZCAqbm9kZSwgKmN1cjsKKworCWlmKChsaW5lID0gKGNoYXIgKiltYWxsb2MobGVuZ3RoKSkgPT0gTlVMTCkgeworCQllcnJvcl9tc2dfYW5kX2RpZShtZW1vcnlfZXhoYXVzdGVkKTsKKwl9CisKKwl3aGlsZSAoKGxlbiA9IGdldGxpbmUoJmxpbmUsICZsZW5ndGgsIGZpbGUpKSAhPSAtMSkgeworCQlub2RlID0gcGFyc2VfbGluZShsaW5lKTsKKwkJaWYgKCpwbGlzdCA9PSBOVUxMKSB7CisJCQkqcGxpc3QgPSBub2RlOworCQkJY3VyID0gKnBsaXN0OworCQl9IGVsc2UgeworCQkJY3VyLT5uZXh0ID0gbm9kZTsKKwkJCWN1ciA9IGN1ci0+bmV4dDsKKwkJfQorCX0KKworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb252ZXJ0Mmd1aWQoY2hhciAqaWRfYnVmLCBzdHJ1Y3QgbmFtZV9pZCAqc2VhcmNoX2xpc3QpCit7CisJY2hhciAqcDsKKwlpbnQgaXNudW07CisJc3RydWN0IG5hbWVfaWQgKm5vZGU7CisJcCA9IGlkX2J1ZjsKKwlpc251bSA9IDE7CisJd2hpbGUgKCpwICE9ICdcMCcpIHsKKwkJaWYgKCFpc2RpZ2l0KCpwKSkgeworCQkJaXNudW0gPSAwOworCQkJYnJlYWs7CisJCX0KKwkJcCsrOworCX0KKwlpZiAoaXNudW0pIHsKKwkJLy8gQ2hlY2sgZm9yIGJhZCB1c2VyL2dyb3VwIG5hbWUKKwkJbm9kZSA9IHNlYXJjaF9saXN0OworCQl3aGlsZSAobm9kZSAhPSBOVUxMKSB7CisJCQlpZiAoIXN0cm5jbXAobm9kZS0+bmFtZSwgaWRfYnVmLCBzdHJsZW4oaWRfYnVmKSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIldBUk5JTkc6IEJhZCB1c2VyL2dyb3VwIG5hbWUgJXMgZGV0ZWN0ZWRcbiIsIGlkX2J1Zik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlub2RlID0gbm9kZS0+bmV4dDsKKwkJfQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYXRvbChpZF9idWYpOworCX0gZWxzZSB7CisJCW5vZGUgPSBzZWFyY2hfbGlzdDsKKwkJd2hpbGUgKG5vZGUgIT0gTlVMTCkgeworCQkJaWYgKCFzdHJuY21wKG5vZGUtPm5hbWUsIGlkX2J1Ziwgc3RybGVuKGlkX2J1ZikpKQorCQkJCXJldHVybiBub2RlLT5pZDsKKwkJCW5vZGUgPSBub2RlLT5uZXh0OworCQl9CisJCWVycm9yX21zZ19hbmRfZGllKCJObyBlbnRyeSBmb3IgJXMgaW4gc2VhcmNoIGxpc3QiLCBpZF9idWYpOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9saXN0KHN0cnVjdCBuYW1lX2lkICpsaXN0KQoreworCXN0cnVjdCBuYW1lX2lkICpjdXI7CisJY3VyID0gbGlzdDsKKwl3aGlsZSAoY3VyICE9IE5VTEwpIHsKKwkJbGlzdCA9IGN1cjsKKwkJY3VyID0gY3VyLT5uZXh0OworCQlmcmVlKGxpc3QpOworCX0KK30KKworc3RhdGljIHZvaWQgYWRkX25ld19kaXJlY3RvcnkoY2hhciAqbmFtZSwgY2hhciAqcGF0aCwKKwkJdW5zaWduZWQgbG9uZyB1aWQsIHVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJaWYgKHRyYWNlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRpcmVjdG9yeTogJXMgJXMgIFVJRDogJWxkICBHSUQgJWxkICBNT0RFOiAlMDRsbyIsIHBhdGgsIG5hbWUsIHVpZCwgZ2lkLCBtb2RlKTsKKworCWlmIChta2RpcihwYXRoLCBtb2RlKSA8IDApIHsKKwkJaWYgKEVFWElTVCA9PSBlcnJubykgeworCQkJLyogVW5jb25kaXRpb25hbGx5IGFwcGx5IHRoZSBtb2RlIHNldHRpbmcgdG8gdGhlIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJCSAqIFhYWCBzaG91bGQgb3V0cHV0IHNvbWV0aGluZyB3aGVuIHRyYWNlICovCisJCQljaG1vZChwYXRoLCBtb2RlICYgflNfSUZNVCk7CisJCX0KKwl9CisJaWYgKHRyYWNlKQorCQlwdXRjKCdcbicsIHN0ZGVycik7CisJY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbmV3X2RldmljZShjaGFyICpuYW1lLCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIHVpZCwKKwl1bnNpZ25lZCBsb25nIGdpZCwgdW5zaWduZWQgbG9uZyBtb2RlLCBkZXZfdCByZGV2KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IHN0YXQgc2I7CisKKwlpZiAodHJhY2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJEZXZpY2U6ICVzICVzICBVSUQ6ICVsZCAgR0lEOiAlbGQgIE1PREU6ICUwNGxvICBNQUpPUjogJWQgIE1JTk9SOiAlZCIsCisJCQkJcGF0aCwgbmFtZSwgdWlkLCBnaWQsIG1vZGUsIChzaG9ydCkocmRldiA+PiA4KSwgKHNob3J0KShyZGV2ICYgMHhmZikpOworCX0KKworCW1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOworCXN0YXR1cyA9IGxzdGF0KHBhdGgsICZzYik7CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCS8qIEl0IGlzIG9rIGZvciBzb21lIHR5cGVzIG9mIGZpbGVzIHRvIG5vdCBleGl0IG9uIGRpc2sgKHN1Y2ggYXMKKwkJICogZGV2aWNlIG5vZGVzKSwgYnV0IGlmIHRoZXkgX2RvXyBleGlzdCwgdGhlIGZpbGUgdHlwZSBiaXRzIGhhZAorCQkgKiBiZXR0ZXIgbWF0Y2ggdGhvc2Ugb2YgdGhlIGFjdHVhbCBmaWxlIG9yIHN0cmFuZ2UgdGhpbmdzIHdpbGwgaGFwcGVuLi4uICovCisJCWlmICgobW9kZSAmIFNfSUZNVCkgIT0gKHNiLnN0X21vZGUgJiBTX0lGTVQpKSB7CisJCQlpZiAodHJhY2UpCisJCQkJcHV0YygnXG4nLCBzdGRlcnIpOworCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBleGlzdGluZyBmaWxlICgwNCVvKSB0eXBlIGRvZXMgbm90IG1hdGNoIHNwZWNpZmllZCBmaWxlIHR5cGUgKDA0JWxvKSEiLAorCQkJCQkJcGF0aCwgKHNiLnN0X21vZGUgJiBTX0lGTVQpLCAobW9kZSAmIFNfSUZNVCkpOworCQl9CisJCWlmIChtb2RlICE9IHNiLnN0X21vZGUpIHsKKwkJCWlmICh0cmFjZSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAtLSBhcHBseWluZyBuZXcgbW9kZSAwNCVsbyAob2xkIHdhcyAwNCVvKVxuIiwgbW9kZSAmIH5TX0lGTVQsIHNiLnN0X21vZGUgJiB+U19JRk1UKTsKKwkJCS8qIEFwcGx5IHRoZSBtb2RlIHNldHRpbmcgdG8gdGhlIGV4aXN0aW5nIGRldmljZSBub2RlICovCisJCQljaG1vZChwYXRoLCBtb2RlICYgflNfSUZNVCk7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAodHJhY2UpCisJCQkJZnByaW50ZihzdGRlcnIsICIgLS0gZXh0cmFuZW91cyBlbnRyeSBpbiB0YWJsZVxuIiwgcGF0aCk7CisJCX0KKwl9CisJZWxzZSB7CisJCW1rbm9kKHBhdGgsIG1vZGUsIHJkZXYpOworCQlpZiAodHJhY2UpCisJCQlwdXRjKCdcbicsIHN0ZGVycik7CisKKwl9CisKKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZmlsZShjaGFyICpuYW1lLCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIHVpZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJaWYgKHRyYWNlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmlsZTogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG9cbiIsCisJCQlwYXRoLCBuYW1lLCBnaWQsIHVpZCwgbW9kZSk7CisJfQorCisJaW50IGZkID0gb3BlbihwYXRoLE9fQ1JFQVQgfCBPX1dST05MWSwgbW9kZSk7CisJaWYgKGZkIDwgMCkgeworCQllcnJvcl9tc2dfYW5kX2RpZSgiJXM6IGZpbGUgY2FuIG5vdCBiZSBjcmVhdGVkISIsIHBhdGgpOworCX0gZWxzZSB7CisJCWNsb3NlKGZkKTsKKwl9CisJY2htb2QocGF0aCwgbW9kZSk7CisJY2hvd24ocGF0aCwgdWlkLCBnaWQpOworfQorCisKK3N0YXRpYyB2b2lkIGFkZF9uZXdfZmlmbyhjaGFyICpuYW1lLCBjaGFyICpwYXRoLCB1bnNpZ25lZCBsb25nIHVpZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ2lkLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJaWYgKHRyYWNlKSB7CisJCXByaW50ZigiRmlmbzogJXMgJXMgIFVJRDogJWxkICBHSUQ6ICVsZCAgTU9ERTogJTA0bG9cbiIsCisJCQlwYXRoLCBuYW1lLCBnaWQsIHVpZCwgbW9kZSk7CisJfQorCisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCW1lbXNldCgmc2IsIDAsIHNpemVvZihzdHJ1Y3Qgc3RhdCkpOworCXN0YXR1cyA9IHN0YXQocGF0aCwgJnNiKTsKKworCisJLyogVXBkYXRlIHRoZSBtb2RlIGlmIHdlIGV4aXN0IGFuZCBhcmUgYSBmaWZvIGFscmVhZHkgKi8KKwlpZiAoc3RhdHVzID49IDAgJiYgU19JU0ZJRk8oc2Iuc3RfbW9kZSkpIHsKKwkJY2htb2QocGF0aCwgbW9kZSk7CisJfSBlbHNlIHsKKwkJaWYgKG1rbm9kKHBhdGgsIG1vZGUsIDApKQorCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBmaWxlIGNhbiBub3QgYmUgY3JlYXRlZCB3aXRoIG1rbm9kISIsIHBhdGgpOworCX0KKwljaG93bihwYXRoLCB1aWQsIGdpZCk7Cit9CisKKworLyogIGRldmljZSB0YWJsZSBlbnRyaWVzIHRha2UgdGhlIGZvcm0gb2Y6CisgICAgPHBhdGg+CTx0eXBlPiA8bW9kZT4JPHVzcj4JPGdycD4JPG1ham9yPgk8bWlub3I+CTxzdGFydD4JPGluYz4JPGNvdW50PgorICAgIC9kZXYvbWVtICAgIGMgICAgICA2NDAgICAgICAwICAgICAgIDAgICAgICAgMSAgICAgICAxICAgICAgIDAgICAgICAgIDAgICAgICAgIC0KKyAgICAvZGV2L3plcm8gICBjICAgICAgNjQ0ICAgICAgcm9vdCAgICByb290ICAgIDEgICAgICAgNSAgICAgICAtICAgICAgICAtICAgICAgICAtCisKKyAgICB0eXBlIGNhbiBiZSBvbmUgb2Y6CisJZglBIHJlZ3VsYXIgZmlsZQorCWQJRGlyZWN0b3J5CisJYwlDaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UgZmlsZQorCWIJQmxvY2sgc3BlY2lhbCBkZXZpY2UgZmlsZQorCXAJRmlmbyAobmFtZWQgcGlwZSkKKworICAgIEkgZG9uJ3QgYm90aGVyIHdpdGggc3ltbGlua3MgKHBlcm1pc3Npb25zIGFyZSBpcnJlbGV2YW50KSwgaGFyZAorICAgIGxpbmtzIChzcGVjaWFsIGNhc2VzIG9mIHJlZ3VsYXIgZmlsZXMpLCBvciBzb2NrZXRzICh3aHkgYm90aGVyKS4KKworICAgIFJlZ3VsYXIgZmlsZXMgbXVzdCBleGlzdCBpbiB0aGUgdGFyZ2V0IHJvb3QgZGlyZWN0b3J5LiAgSWYgYSBjaGFyLAorICAgIGJsb2NrLCBmaWZvLCBvciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4KKyovCitzdGF0aWMgaW50IGludGVycHJldF90YWJsZV9lbnRyeShjaGFyICpsaW5lKQoreworCWNoYXIgKm5hbWU7CisJY2hhciB1c3JfYnVmW01BWF9JRF9MRU5dOworCWNoYXIgZ3JwX2J1ZltNQVhfSURfTEVOXTsKKwljaGFyIHBhdGhbNDA5Nl0sIHR5cGU7CisJdW5zaWduZWQgbG9uZyBtb2RlID0gMDc1NSwgdWlkID0gMCwgZ2lkID0gMCwgbWFqb3IgPSAwLCBtaW5vciA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IDAsIGluY3JlbWVudCA9IDEsIGNvdW50ID0gMDsKKworCWlmICgwID4gc3NjYW5mKGxpbmUsICIlNDBzICVjICVsbyAlNDBzICU0MHMgJWx1ICVsdSAlbHUgJWx1ICVsdSIsIHBhdGgsCisJCSAgICAmdHlwZSwgJm1vZGUsIHVzcl9idWYsIGdycF9idWYsICZtYWpvciwgJm1pbm9yLCAmc3RhcnQsCisJCSAgICAmaW5jcmVtZW50LCAmY291bnQpKQorCXsKKwkJZnByaW50ZihzdGRlcnIsICIlczogc3NjYW5mIHJldHVybmVkIDwgMCBmb3IgbGluZSAnJXMnXG4iLCBhcHBfbmFtZSwgbGluZSk7CisJCXJldHVybiAxOworCX0KKworCXVpZCA9IGNvbnZlcnQyZ3VpZCh1c3JfYnVmLCB1c3JfbGlzdCk7CisJZ2lkID0gY29udmVydDJndWlkKGdycF9idWYsIGdycF9saXN0KTsKKworCWlmIChzdHJuY21wKHBhdGgsICIvIiwgMSkpIHsKKwkJZXJyb3JfbXNnX2FuZF9kaWUoIkRldmljZSB0YWJsZSBlbnRyaWVzIHJlcXVpcmUgYWJzb2x1dGUgcGF0aHMiKTsKKwl9CisJbmFtZSA9IHhzdHJkdXAocGF0aCArIDEpOworCS8qIHByZWZpeCBwYXRoIHdpdGggcm9vdGRpciAqLworCXNwcmludGYocGF0aCwgIiVzLyVzIiwgcm9vdGRpciwgbmFtZSk7CisKKwkvKiBYWFggV2h5IGlzIG5hbWUgcGFzc2VkIGludG8gYWxsIG9mIHRoZSBhZGRfbmV3XyooKSByb3V0aW5lcz8gKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlICdkJzoKKwkJbW9kZSB8PSBTX0lGRElSOworCQlhZGRfbmV3X2RpcmVjdG9yeShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSk7CisJCWJyZWFrOworCWNhc2UgJ2YnOgorCQltb2RlIHw9IFNfSUZSRUc7CisJCWFkZF9uZXdfZmlsZShuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSk7CisJCWJyZWFrOworCWNhc2UgJ3AnOgorCQltb2RlIHw9IFNfSUZJRk87CisJCWFkZF9uZXdfZmlmbyhuYW1lLCBwYXRoLCB1aWQsIGdpZCwgbW9kZSk7CisJCWJyZWFrOworCWNhc2UgJ2MnOgorCWNhc2UgJ2InOgorCQltb2RlIHw9ICh0eXBlID09ICdjJykgPyBTX0lGQ0hSIDogU19JRkJMSzsKKwkJaWYgKGNvdW50ID4gMCkgeworCQkJaW50IGk7CisJCQlkZXZfdCByZGV2OworCQkJY2hhciBidWZbODBdOworCisJCQlmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgY291bnQ7IGkrKykgeworCQkJCXNwcmludGYoYnVmLCAiJXMlZCIsIG5hbWUsIGkpOworCQkJCXNwcmludGYocGF0aCwgIiVzLyVzJWQiLCByb290ZGlyLCBuYW1lLCBpKTsKKwkJCQkvKiBGSVhNRTogIE1LREVWIHVzZXMgaWxsaWNpdCBpbnNpZGVyIGtub3dsZWRnZSBvZiBrZXJuZWwKKwkJCQkgKiBtYWpvci9taW5vciByZXByZXNlbnRhdGlvbi4uLiAgKi8KKwkJCQlyZGV2ID0gTUtERVYobWFqb3IsIG1pbm9yICsgKGkgLSBzdGFydCkgKiBpbmNyZW1lbnQpOworCQkJCXNwcmludGYocGF0aCwgIiVzLyVzXDAiLCByb290ZGlyLCBidWYpOworCQkJCWFkZF9uZXdfZGV2aWNlKGJ1ZiwgcGF0aCwgdWlkLCBnaWQsIG1vZGUsIHJkZXYpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRklYTUU6ICBNS0RFViB1c2VzIGlsbGljaXQgaW5zaWRlciBrbm93bGVkZ2Ugb2Yga2VybmVsCisJCQkgKiBtYWpvci9taW5vciByZXByZXNlbnRhdGlvbi4uLiAgKi8KKwkJCWRldl90IHJkZXYgPSBNS0RFVihtYWpvciwgbWlub3IpOworCQkJYWRkX25ld19kZXZpY2UobmFtZSwgcGF0aCwgdWlkLCBnaWQsIG1vZGUsIHJkZXYpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yX21zZ19hbmRfZGllKCJVbnN1cHBvcnRlZCBmaWxlIHR5cGUiKTsKKwl9CisJaWYgKG5hbWUpIGZyZWUobmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgcGFyc2VfZGV2aWNlX3RhYmxlKEZJTEUgKiBmaWxlKQoreworCWNoYXIgKmxpbmU7CisJc2l6ZV90IGxlbmd0aCA9IDI1NjsKKwlpbnQgbGVuID0gMDsKKworCWlmKChsaW5lID0gKGNoYXIgKiltYWxsb2MobGVuZ3RoKSkgPT0gTlVMTCkgeworCQllcnJvcl9tc2dfYW5kX2RpZShtZW1vcnlfZXhoYXVzdGVkKTsKKwl9CisJLyogTG9va3Mgb2sgc28gZmFyLiAgVGhlIGdlbmVyYWwgcGxhbiBub3cgaXMgdG8gcmVhZCBpbiBvbmUKKwkgKiBsaW5lIGF0IGEgdGltZSwgdHJpbSBvZmYgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSwKKwkgKiBjaGVjayBmb3IgbGVhZGluZyBjb21tZW50IGRlbGltaXRlcnMgKCcjJykgb3IgYSBibGFuayBsaW5lLAorCSAqIHRoZW4gdHJ5IGFuZCBwYXJzZSB0aGUgbGluZSBhcyBhIGRldmljZSB0YWJsZSBlbnRyeS4gSWYgd2UgZmFpbAorCSAqIHRvIHBhcnNlIHRoaW5ncywgdHJ5IGFuZCBoZWxwIHRoZSBwb29yIGZvb2wgdG8gZml4IHRoZWlyCisJICogZGV2aWNlIHRhYmxlIHdpdGggYSB1c2VmdWwgZXJyb3IgbXNnLi4uICovCisKKwl3aGlsZSAoKGxlbiA9IGdldGxpbmUoJmxpbmUsICZsZW5ndGgsIGZpbGUpKSAhPSAtMSkgeworCQkvKiBGaXJzdCB0cmltIG9mZiBhbnkgd2hpdGVzcGFjZSAqLworCisJCS8qIHRyaW0gdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCQl3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuIC0gMV0pKQorCQkJbGluZVstLWxlbl0gPSAnXDAnOworCisJCS8qIHRyaW0gbGVhZGluZyB3aGl0ZXNwYWNlICovCisJCW1lbW1vdmUobGluZSwgJmxpbmVbc3Ryc3BuKGxpbmUsICIgXG5cclx0XHYiKV0sIGxlbiArIDEpOworCisJCS8qIElmIHRoaXMgaXMgTk9UIGEgY29tbWVudCBvciBhbiBlbXB0eSBsaW5lLCB0cnkgdG8gaW50ZXJwcmV0IGl0ICovCisJCWlmICgqbGluZSAhPSAnIycgJiYgKmxpbmUgIT0gJ1wwJykgaW50ZXJwcmV0X3RhYmxlX2VudHJ5KGxpbmUpOworCX0KKworCWlmIChsaW5lKQorCQlmcmVlKGxpbmUpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RldnRhYmxlKEZJTEUgKiBkZXZ0YWJsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKworCWlmIChsc3RhdChyb290ZGlyLCAmc2IpKSB7CisJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCByb290ZGlyKTsKKwl9CisJaWYgKGNoZGlyKHJvb3RkaXIpKQorCQlwZXJyb3JfbXNnX2FuZF9kaWUoIiVzIiwgcm9vdGRpcik7CisKKwlpZiAoZGV2dGFibGUpCisJCXBhcnNlX2RldmljZV90YWJsZShkZXZ0YWJsZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsKKwl7InJvb3QiLCAxLCBOVUxMLCAncid9LAorCXsiaGVscCIsIDAsIE5VTEwsICdoJ30sCisJeyJ0cmFjZSIsIDAsIE5VTEwsICd0J30sCisJeyJ2ZXJzaW9uIiwgMCwgTlVMTCwgJ3YnfSwKKwl7ImRldnRhYmxlIiwgMSwgTlVMTCwgJ0QnfSwKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK3N0YXRpYyBjaGFyICpoZWxwdGV4dCA9CisJIlVzYWdlOiBtYWtlZGV2cyBbT1BUSU9OU11cbiIKKwkiQnVpbGQgZW50cmllcyBiYXNlZCB1cG9uIGRldmljZV90YWJsZS50eHRcblxuIgorCSJPcHRpb25zOlxuIgorCSIgIC1yLCAtZCwgLS1yb290PURJUiAgICAgQnVpbGQgZmlsZXN5c3RlbSBmcm9tIGRpcmVjdG9yeSBESVIgKGRlZmF1bHQ6IGN3ZClcbiIKKwkiICAtRCwgLS1kZXZ0YWJsZT1GSUxFICAgIFVzZSB0aGUgbmFtZWQgRklMRSBhcyBhIGRldmljZSB0YWJsZSBmaWxlXG4iCisJIiAgLWgsIC0taGVscCAgICAgICAgICAgICBEaXNwbGF5IHRoaXMgaGVscCB0ZXh0XG4iCisJIiAgLXQsIC0tdHJhY2UgICAgICAgICAgICBCZSB2ZXJib3NlXG4iCisJIiAgLXYsIC0tdmVyc2lvbiAgICAgICAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb25cblxuIjsKKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGMsIG9wdDsKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCXN0cnVjdCBzdGF0IHN0YXRidWY7CisJY2hhciBwYXNzd2RfcGF0aFtQQVRIX01BWF07CisJY2hhciBncm91cF9wYXRoW1BBVEhfTUFYXTsKKwlGSUxFICpwYXNzd2RfZmlsZSA9IE5VTEw7CisJRklMRSAqZ3JvdXBfZmlsZSA9IE5VTEw7CisJRklMRSAqZGV2dGFibGUgPSBOVUxMOworCURJUiAqZGlyID0gTlVMTDsKKworCXVtYXNrICgwKTsKKworCWlmIChhcmdjPT0xKSB7CisJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCWV4aXQoMSk7CisJfQorCisJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiRDpkOnI6aHR2IiwKKwkJCWxvbmdfb3B0aW9ucywgJmMpKSA+PSAwKSB7CisJCXN3aXRjaCAob3B0KSB7CisJCWNhc2UgJ0QnOgorCQkJZGV2dGFibGUgPSB4Zm9wZW4ob3B0YXJnLCAiciIpOworCQkJaWYgKGZzdGF0KGZpbGVubyhkZXZ0YWJsZSksICZzdGF0YnVmKSA8IDApCisJCQkJcGVycm9yX21zZ19hbmRfZGllKG9wdGFyZyk7CisJCQlpZiAoc3RhdGJ1Zi5zdF9zaXplIDwgMTApCisJCQkJZXJyb3JfbXNnX2FuZF9kaWUoIiVzOiBub3QgYSBwcm9wZXIgZGV2aWNlIHRhYmxlIGZpbGUiLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJcHJpbnRmKGhlbHB0ZXh0KTsKKwkJCWV4aXQoMCk7CisJCWNhc2UgJ3InOgorCQljYXNlICdkJzoJCQkJLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBta2ZzLmpmZnMsIGdlbmV4dDJmcywgZXRjLi4uICovCisJCQlpZiAocm9vdGRpciAhPSBkZWZhdWx0X3Jvb3RkaXIpIHsKKwkJCQllcnJvcl9tc2dfYW5kX2RpZSgicm9vdCBkaXJlY3Rvcnkgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlIik7CisJCQl9CisJCQlpZiAoKGRpciA9IG9wZW5kaXIob3B0YXJnKSkgPT0gTlVMTCkgeworCQkJCXBlcnJvcl9tc2dfYW5kX2RpZShvcHRhcmcpOworCQkJfSBlbHNlIHsKKwkJCQljbG9zZWRpcihkaXIpOworCQkJfQorCQkJLyogSWYgIi8iIGlzIHNwZWNpZmllZCwgdXNlICIiIGJlY2F1c2Ugcm9vdGRpciBpcyBhbHdheXMgcHJlcGVuZGVkIHRvIGEKKwkJCSAqIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICIvIiAqLworCQkJaWYgKDAgPT0gc3RyY21wKG9wdGFyZywgIi8iKSkKKwkJCQlyb290ZGlyID0geHN0cmR1cCgiIik7CisJCQllbHNlCisJCQkJcm9vdGRpciA9IHhzdHJkdXAob3B0YXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3QnOgorCQkJdHJhY2UgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSAndic6CisJCQlwcmludGYoIiVzOiAlc1xuIiwgYXBwX25hbWUsIFZFUlNJT04pOworCQkJZXhpdCgwKTsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJaWYgKGFyZ3Zbb3B0aW5kXSAhPSBOVUxMKSB7CisJCWZwcmludGYoc3RkZXJyLCBoZWxwdGV4dCk7CisJCWV4aXQoMSk7CisJfQorCisJLy8gR2V0IG5hbWUtaWQgbWFwcGluZworCXNwcmludGYocGFzc3dkX3BhdGgsICIlcy9ldGMvcGFzc3dkIiwgcm9vdGRpcik7CisJc3ByaW50Zihncm91cF9wYXRoLCAiJXMvZXRjL2dyb3VwIiwgcm9vdGRpcik7CisJaWYgKChwYXNzd2RfZmlsZSA9IGZvcGVuKHBhc3N3ZF9wYXRoLCAiciIpKSAhPSBOVUxMKSB7CisJCWdldF9saXN0X2Zyb21fZmlsZShwYXNzd2RfZmlsZSwgJnVzcl9saXN0KTsKKwkJZmNsb3NlKHBhc3N3ZF9maWxlKTsKKwl9CisJaWYgKChncm91cF9maWxlID0gZm9wZW4oZ3JvdXBfcGF0aCwgInIiKSkgIT0gTlVMTCkgeworCQlnZXRfbGlzdF9mcm9tX2ZpbGUoZ3JvdXBfZmlsZSwgJmdycF9saXN0KTsKKwkJZmNsb3NlKGdyb3VwX2ZpbGUpOworCX0KKworCS8vIFBhcnNlIGRldnRhYmxlCisJaWYoZGV2dGFibGUpIHsKKwkJcGFyc2VfZGV2dGFibGUoZGV2dGFibGUpOworCQlmY2xvc2UoZGV2dGFibGUpOworCX0KKworCS8vIEZyZWUgbGlzdAorCWZyZWVfbGlzdCh1c3JfbGlzdCk7CisJZnJlZV9saXN0KGdycF9saXN0KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzXzEuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21ha2VkZXZzL21ha2VkZXZzXzEuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZDU4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWFrZWRldnMvbWFrZWRldnNfMS4wLjEuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBjcmVhdGluZyBkZXZpY2Ugbm9kZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCitTRUNUSU9OID0gImJhc2UiCitTUkNfVVJJID0gImZpbGU6Ly9tYWtlZGV2cy5jIFwKKyAgICAgICAgICAgZmlsZTovL0NPUFlJTkcucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfSIKKworRklMRVNfJHtQTn1fYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgJHtkYXRhZGlyfSIKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSAke0NGTEFHU30gJHtMREZMQUdTfSAtbyAke1N9L21ha2VkZXZzICR7U30vbWFrZWRldnMuYworfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L21ha2VkZXZzICR7RH0ke2Jhc2Vfc2JpbmRpcn0vbWFrZWRldnMKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1tIDY0NCAke0NPUkVCQVNFfS9tZXRhL2ZpbGVzL2RldmljZV90YWJsZS1taW5pbWFsLnR4dCAke0R9JHtkYXRhZGlyfS8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZS9jcm9zcy1jb21waWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OTI3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2Nyb3NzLWNvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAorbWFrZSB0aGUgdG9vbCB0byBiZSBjcm9zcyBjb21waWxhYmxlLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBta2VsZkltYWdlL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1rZWxmSW1hZ2Uub3JpZy9jb25maWd1cmUuYWMJMjAxMi0wNy0xNCAxNDowNDo0OC45NjQ4OTg2NjcgLTA3MDAKKysrKyBta2VsZkltYWdlL2NvbmZpZ3VyZS5hYwkyMDEyLTA3LTE0IDE0OjEwOjQ3LjgwMDkxNjA4MyAtMDcwMAorQEAgLTcwLDYgKzcwLDkgQEAKKyAJCUFDX01TR19FUlJPUihbY2Mgbm90IGZvdW5kXSkKKyAJZmkKKyAJZXZhbCAiJHt3aXRoX2RlZmF1bHR9X0NDPSckQ0MnIgorKwlpZiB0ZXN0ICJ4JEhPU1RfQ0MiID0gJ3gnOyB0aGVuCisrCQlBQ19DSEVDS19QUk9HKFtIT1NUX0NDXSwgWyRDQ10sIFskQ0NdLCBbZ2NjXSwgWyRQQVRIXSkKKysJZmkKKyAJQUNfUFJPR19DUFAKKyAJaWYgdGVzdCAiJENQUCIgPSBubzsgdGhlbgorIAkJQUNfTVNHX0VSUk9SKFtjcHAgbm90IGZvdW5kXSkKK0BAIC0xNzIsNyArMTc1LDYgQEAKKyAKKyBkbmwgLS0tT3V0cHV0IHZhcmlhYmxlcy4uLgorIAorLUhPU1RfQ0M9JENDCisgSE9TVF9DRkxBR1M9IiRIT1NUX0NGTEFHUyAtTzIgLVdhbGwgXCQoSE9TVF9DUFBGTEFHUykiCisgCisgZG5sIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIHNldCB0aGVzZSBhcHByb3ByaWF0ZWx5IGZvciBjb21waWxlcnMgb3RoZXIgdGhhbiBnY2MKK0luZGV4OiBta2VsZkltYWdlL2xpbnV4LWkzODYvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvbGludXgtaTM4Ni9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvbGludXgtaTM4Ni9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAorQEAgLTQsNyArNCw3IEBACisgCisgJChMSTM4Nl9PQkopL21rZWxmLWxpbnV4LWkzODYubzogJChMSTM4Nl9ESVIpL21rZWxmLWxpbnV4LWkzODYuYyAkKExJMzg2X0RJUikvY29udmVydC5iaW4uYyAkKExJMzg2X0RFUCkKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorIAorIAorIGlmZGVmIEkzODZfQ0MKK0luZGV4OiBta2VsZkltYWdlL2xpbnV4LWlhNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvbGludXgtaWE2NC9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvbGludXgtaWE2NC9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAorQEAgLTQsNyArNCw3IEBACisgCisgJChMSUE2NF9PQkopL21rZWxmLWxpbnV4LWlhNjQubzogJChMSUE2NF9ESVIpL21rZWxmLWxpbnV4LWlhNjQuYyAkKExJQTY0X0RJUikvY29udmVydC5iaW4uYyAkKExJQTY0X0RFUCkKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorKwkkKENDKSAkKEhPU1RfQ0ZMQUdTKSAtYyAtZyAkPCAtbyAkQAorIAorIGlmZGVmIElBNjRfQ0MKKyAKK0luZGV4OiBta2VsZkltYWdlL21haW4vTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta2VsZkltYWdlLm9yaWcvbWFpbi9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ4Ljk2NDg5ODY2NyAtMDcwMAorKysrIG1rZWxmSW1hZ2UvbWFpbi9NYWtlZmlsZQkyMDEyLTA3LTE0IDE0OjA0OjQ5LjAzMjg5ODY3MSAtMDcwMAorQEAgLTQsMTEgKzQsMTEgQEAKKyAKKyAkKE9CSkRJUikvc2Jpbi9ta2VsZkltYWdlOiAkKE1LRUxGX09CSlMpICQoREVQUykKKyAJJChNS0RJUikgLXAgJChARCkKKy0JJChIT1NUX0NDKSAkKEhPU1RfQ0ZMQUdTKSAkKE1LRUxGX09CSlMpIC1vICRAICQoTElCUykKKysJJChDQykgJChIT1NUX0NGTEFHUykgJChNS0VMRl9PQkpTKSAtbyAkQCAkKExJQlMpCisgCisgJChPQkpESVIpL21haW4vbWtlbGZJbWFnZS5vOiBtYWluL21rZWxmSW1hZ2UuYyBpbmNsdWRlL21rZWxmSW1hZ2UuaCAkKERFUFMpCisgCSQoTUtESVIpIC1wICQoQEQpCistCSQoSE9TVF9DQykgJChIT1NUX0NGTEFHUykgLWMgJDwgLW8gJEAKKysJJChDQykgJChIT1NUX0NGTEFHUykgLWMgJDwgLW8gJEAKKyAKKyAkKE9CSkRJUikvbWFuL21hbjgvbWtlbGZJbWFnZS44OiBtYWluL21rZWxmSW1hZ2UubWFuCisgCSQoTUtESVIpIC1wICQoQEQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2YTY1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2VsZmltYWdlL21rZWxmaW1hZ2UvZml4LW1ha2VmaWxlLXRvLWZpbmQtbGliei5wYXRjaApAQCAtMCwwICsxLDMwIEBACitMZXQgbWFrZWZpbGUgZmluZCBsaWJ6IGFuZCB6bGliLmggYnkgQ0ZMQUdTIGFuZCBMREZMQUdTLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDFhY2MzNi4uNmY4NjViMCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjIsNyArNjIsNyBAQCBBQ19DSEVDS19QUk9HKFtSUE1dLCAgIHJwbSwgICBycG0sICAgW10sIFskUEFUSF0pCisgQUNfQ0hFQ0tfUFJPRyhbU0VEXSwgICBzZWQsICAgc2VkLCAgIFtdLCBbJFBBVEhdKQorIEFDX0NIRUNLX1BST0coW0ZJTkRdLCAgZmluZCwgIGZpbmQsICBbXSwgWyRQQVRIXSkKKyAKKy1BQ19DSEVDS19IRUFERVIoemxpYi5oLCBBQ19DSEVDS19MSUIoeiwgaW5mbGF0ZUluaXRfLCBbQUNfREVGSU5FKEhBVkVfWkxJQl9ILCAxKSBMSUJTPSIkTElCUyAtbHoiXSkpCisrQUNfQ0hFQ0tfSEVBREVSKHpsaWIuaCwgQUNfQ0hFQ0tfTElCKHosIGluZmxhdGVJbml0XywgW0FDX0RFRklORShIQVZFX1pMSUJfSCwgMSkgTElCUz0iJExJQlMgJExERkxBR1MgLWx6Il0pKQorIAorIGRubCBGaW5kIHRoZSBkZWZhdWx0IHByb2dyYW1zCisgaWYgdGVzdCAid2l0aF9kZWZhdWx0IiAhPSBubyA7IHRoZW4KK0BAIC0xNzUsNyArMTc1LDcgQEAgZmkKKyAKKyBkbmwgLS0tT3V0cHV0IHZhcmlhYmxlcy4uLgorIAorLUhPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpIgorK0hPU1RfQ0ZMQUdTPSIkSE9TVF9DRkxBR1MgLU8yIC1XYWxsIFwkKEhPU1RfQ1BQRkxBR1MpICRDRkxBR1MiCisgCisgZG5sIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIHNldCB0aGVzZSBhcHByb3ByaWF0ZWx5IGZvciBjb21waWxlcnMgb3RoZXIgdGhhbiBnY2MKKyBJMzg2X0NGTEFHUz0iJEkzODZfQ0ZMQUdTIC1PcyAtZmZyZWVzdGFuZGluZyAtV2FsbCAtVyAtV25vLWZvcm1hdCBcJChJMzg2X0NQUEZMQUdTKSIKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtlbGZpbWFnZS9ta2VsZmltYWdlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODQ1YjhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rZWxmaW1hZ2UvbWtlbGZpbWFnZV9naXQuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciBjcmVhdGluZyBFTEYgYm9vdCBpbWFnZXMgZm9yIEVMRi1iYXNlZCBMaW51eCBrZXJuZWwgaW1hZ2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jb3JlYm9vdC5vcmcvTWtlbGZpbWFnZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWE1YmVkMmY2MGQzNTc2MThjYTE2MWFkNTM5ZjdjMGEiCisKK1NSQ1JFViA9ICI2ODZhNDhhMzM5YjMyMDAxODRjMjdlN2Y5OGQ0YzAzMTgwYjJiZTZjIgorUFYgPSAiNC4wK2dpdCR7U1JDUFZ9IgorUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAibWtlbGZpbWFnZSBoYXMgYmVlbiByZW1vdmVkIGluIGNvcmVib290IDQuMSByZWxlYXNlOiBcCitodHRwOi8vcmV2aWV3LmNvcmVib290Lm9yZy9naXR3ZWI/cD1jb3JlYm9vdC5naXQ7YT1jb21taXQ7aD0zNGZjNGFiODBiNTA3NzM5ZTI1ODBkNDkwZGZmNjdmY2ZkZGUxMWVhIgorCisKK0RFUEVORFMgKz0gInpsaWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vcmV2aWV3LmNvcmVib290Lm9yZy9wL2NvcmVib290O3Byb3RvY29sPWh0dHAgXAorICAgICAgICAgICBmaWxlOi8vY3Jvc3MtY29tcGlsZS5wYXRjaCAgIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1tYWtlZmlsZS10by1maW5kLWxpYnoucGF0Y2ggICBcCisgICAgICAgICAgIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3V0aWwvbWtlbGZJbWFnZSIKKworQ0ZMQUdTICs9ICItZm5vLXN0YWNrLXByb3RlY3RvciIKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJIT1NUX0NDPScke0JVSUxEX0NDfSciCitFWFRSQV9PRU1BS0UgKz0gIkhPU1RfQ1BQRkxBR1M9JyR7QlVJTERfQ1BQRkxBR1N9JyIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtZGlyICR7RH0ke2RhdGFkaXJ9L21rZWxmSW1hZ2UvZWxmMzItaTM4NgorCXJtZGlyICR7RH0ke2RhdGFkaXJ9L21rZWxmSW1hZ2UKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2FjX2luaXRfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hY19pbml0X2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjJhZjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hY19pbml0X2ZpeC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitHZXQgdGhlIHZlcnNpb24gb2YgbWtsaWJzIGJ5IHNpbXBsZXIgbWVhbnMuIFRoZSBNS0xJQlNfVkVSU0lPTiBzdHJpbmcgaW4gdGhlIAorY29uZmlndXJlLmFjIGZpbGUgaXMgcmVwbGFjZWQgd2l0aCByZWFsIHZlcnNpb24gc3RyaW5nIGJ5IHRoZSAKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgZnVuY3Rpb24gZnJvbSB0aGUgcmVjaXBlIC5iYiBmaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDExLzAxLzI0CisKK0luZGV4OiBta2xpYnMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtsaWJzLm9yaWcvY29uZmlndXJlLmFjCTIwMTAtMDItMjEgMTc6MzQ6NTYuMDAwMDAwMDAwIC0wODAwCisrKysgbWtsaWJzL2NvbmZpZ3VyZS5hYwkyMDExLTAxLTI0IDE4OjUyOjE5Ljk0MzI0MjA3OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistQUNfSU5JVChbbWtsaWJzXSxtNF9lc3lzY21kKGRwa2ctcGFyc2VjaGFuZ2Vsb2cgfCBwZXJsIC1uZSAncHJpbnQgJDEgaWYgbS9eVmVyc2lvbjogKC4qKSQvOycpKQorK0FDX0lOSVQoW21rbGlic10sIE1LTElCU19WRVJTSU9OKQorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gbm8tZGVmaW5lXSkKKyBBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorIEFNX01BSU5UQUlORVJfTU9ERQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9hdm9pZC1mYWlsdXJlLW9uLXN5bWJvbC1wcm92aWRlZC1ieS1hcHBsaWNhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2ZDYyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwxMDIgQEAKK0Zyb20gZjE3MjEwMTEzMDYwNGU0YTllZmE1NzQ2ZjRkOGQzMGRlOTlhMGZkYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTcgQXByIDIwMTUgMTQ6NDg6MjAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXZvaWQgZmFpbHVyZSBvbiBzeW1ib2wgcHJvdmlkZWQgYnkgYXBwbGljYXRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1VuZGVmaW5lZCBzeW1ib2xzIGluIGEgbGlicmFyeSBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uCit0aGF0IGxpbmtzIHRvIHRoZSBsaWJyYXJ5LCBzdWNoIGFzIGBsb2dzaW5rJyBpbiBsaWJtdWx0aXBhdGguc28uMC4KK1RoaXMgZml4IGNoZWNrcyB0aGUgdHlwZSBvZiBvYmplY3QgaW4gd2hpY2ggdGhlIHN5bWJvbCBpcyBuZWVkZWQKK2FuZCB0aGUgZXhpc3RlbmNlIG9mIHRoZSBzeW1ib2wgaW4gYXBwbGljYXRpb24sIHdoZW4gYSBzeW1ib2wKK2Nhbm5vdCBiZSBwcm92aWRlZCBieSBsaWJyYXJpZXMuIEl0IHByZXZlbnRzIGZhbHNlIGFsYXJtIG9uIGFic2VuY2UKK29mIHN5bWJvbHMuCisKK1NpZ25lZC1vZmYtYnk6IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9ta2xpYnMgfCAyOCArKysrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzIGIvc3JjL21rbGlicworaW5kZXggYzU2MTRlYS4uYjBkOTAzNCAxMDA3NTUKKy0tLSBhL3NyYy9ta2xpYnMKKysrKyBiL3NyYy9ta2xpYnMKK0BAIC0xMzMsOSArMTMzLDkgQEAgY2xhc3MgU3ltYm9sKG9iamVjdCk6CisgICAgICAgICByZXR1cm4gJ0AnLmpvaW4ocmV0KQorIAorIGNsYXNzIFVuZGVmaW5lZFN5bWJvbChTeW1ib2wpOgorLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgd2VhaywgdmVyc2lvbiwgbGlicmFyeSk6CisrICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5LCBvYmplY3QpOgorICAgICAgICAgc3VwZXIoVW5kZWZpbmVkU3ltYm9sLCBzZWxmKS5fX2luaXRfXyhuYW1lLCB2ZXJzaW9uLCBsaWJyYXJ5KQorLSAgICAgICAgc2VsZi53ZWFrLCBzZWxmLmxpYnJhcnkgPSB3ZWFrLCBsaWJyYXJ5CisrICAgICAgICBzZWxmLndlYWssIHNlbGYubGlicmFyeSwgc2VsZi5vYmplY3QgPSB3ZWFrLCBsaWJyYXJ5LCBvYmplY3QKKyAKKyAjIFJldHVybiB1bmRlZmluZWQgc3ltYm9scyBpbiBhbiBvYmplY3QgYXMgYSBzZXQgb2YgdHVwbGVzIChuYW1lLCB3ZWFrbmVzcykKKyBkZWYgdW5kZWZpbmVkX3N5bWJvbHMob2JqKToKK0BAIC0xNDQsNiArMTQ0LDExIEBAIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorIAorICAgICBvdXRwdXQgPSBjb21tYW5kKCJta2xpYnMtcmVhZGVsZiIsICItLXByaW50LXN5bWJvbHMtdW5kZWZpbmVkIiwgb2JqKQorIAorKyAgICBpZiBsZW4ob2JqKSA+IGxlbihkZXN0X3BhdGgpIGFuZCBvYmpbOmxlbihkZXN0X3BhdGgpXSA9PSBkZXN0X3BhdGg6CisrICAgICAgICBvYmplY3QgPSBvYmpbbGVuKGRlc3RfcGF0aCkgKyAxOi1sZW4oJy1zby1zdHJpcHBlZCcpXQorKyAgICBlbHNlOgorKyAgICAgICAgb2JqZWN0ID0gb2JqCisrCisgICAgIHJlc3VsdCA9IFtdCisgICAgIGZvciBsaW5lIGluIG91dHB1dDoKKyAgICAgICAgIG5hbWUsIHdlYWtfc3RyaW5nLCB2ZXJzaW9uX3N0cmluZywgbGlicmFyeV9zdHJpbmcgPSBsaW5lLnNwbGl0KClbOjRdCitAQCAtMTYwLDcgKzE2NSw3IEBAIGRlZiB1bmRlZmluZWRfc3ltYm9scyhvYmopOgorICAgICAgICAgaWYgbGlicmFyeV9zdHJpbmcubG93ZXIoKSAhPSAnbm9uZSc6CisgICAgICAgICAgICAgbGlicmFyeSA9IGxpYnJhcnlfc3RyaW5nCisgCistICAgICAgICByZXN1bHQuYXBwZW5kKFVuZGVmaW5lZFN5bWJvbChuYW1lLCB3ZWFrLCB2ZXJzaW9uLCBsaWJyYXJ5KSkKKysgICAgICAgIHJlc3VsdC5hcHBlbmQoVW5kZWZpbmVkU3ltYm9sKG5hbWUsIHdlYWssIHZlcnNpb24sIGxpYnJhcnksIG9iamVjdCkpCisgCisgICAgIHJldHVybiByZXN1bHQKKyAKK0BAIC00OTUsMTIgKzUwMCwxMyBAQCB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICAgIGFuZCByZS5zZWFyY2goIl5wc18iLCBzdHIoc3ltYm9sKSkpCisgICAgICAgICAgICAgICAgIGFuZCBub3QgKHJlLnNlYXJjaCgibGQtbGludXguc28uMyQiLCBzdHIoc3ltYm9sKSkpCisgICAgICAgICAgICAgICAgIGFuZCBub3QgKHJlLnNlYXJjaCgiXl9fZ251X2xvY2FsX2dwIiwgc3RyKHN5bWJvbCkpKSk6CistICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJuZWVkZWRfc3ltYm9scyBhZGRpbmcgJXMsIHdlYWs6ICVzIiAlIChzeW1ib2wsIHN5bWJvbC53ZWFrKSkKKysgICAgICAgICAgICAgICAgZGVidWcoREVCVUdfU1BBTSwgIm5lZWRlZF9zeW1ib2xzIGFkZGluZyAlcywgd2VhazogJXMsIGZvciAlcyIgJSAoc3ltYm9sLCBzeW1ib2wud2Vhaywgb2JqKSkKKyAgICAgICAgICAgICAgICAgbmVlZGVkX3N5bWJvbHNbc3RyKHN5bWJvbCldID0gc3ltYm9sCisgICAgICAgICBsaWJyYXJpZXMudXBkYXRlKGxpYnJhcnlfZGVwZW5kcyhvYmopKQorIAorICAgICAjIGNhbGN1bGF0ZSB3aGF0IHN5bWJvbHMgYXJlIHByZXNlbnQgaW4gc21hbGxfbGlicyBhbmQgYXZhaWxhYmxlX2xpYnMKKyAgICAgcHJlc2VudF9zeW1ib2xzID0ge30KKysgICAgcHJlc2VudF9zeW1ib2xfcHJvZ3MgPSB7fQorICAgICBjaGVja2VkX2xpYnMgPSBzbWFsbF9saWJzCisgICAgIGNoZWNrZWRfbGlicy5leHRlbmQoYXZhaWxhYmxlX2xpYnMpCisgICAgIGNoZWNrZWRfbGlicy5hcHBlbmQobGRsaWIpCitAQCAtNTEwLDYgKzUxNiwxMiBAQCB3aGlsZSAxOgorICAgICAgICAgICAgIG5hbWVzID0gc3ltYm9sLmJhc2VfbmFtZXMoKQorICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICBwcmVzZW50X3N5bWJvbHNbbmFtZV0gPSBzeW1ib2wKKysgICAgICAgICAgICBpZiBub3Qgc29fcGF0dGVybi5tYXRjaChsaWIpOgorKyAgICAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAicHJlc2VudF9zeW1ib2xfcHJvZ3MgYWRkaW5nICVzLCBmcm9tIGV4ZWN1dGFibGUgJXMiICUgKCcgJy5qb2luKG5hbWVzKSwgbGliKSkKKysgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisrICAgICAgICAgICAgICAgICAgICBwcm9ncyA9IHByZXNlbnRfc3ltYm9sX3Byb2dzLmdldChuYW1lLCBzZXQoKSkKKysgICAgICAgICAgICAgICAgICAgIHByb2dzLmFkZChsaWIpCisrICAgICAgICAgICAgICAgICAgICBwcmVzZW50X3N5bWJvbF9wcm9nc1tuYW1lXSA9IHByb2dzCisgCisgICAgICMgYXJlIHdlIGZpbmlzaGVkPworICAgICBudW1fdW5yZXNvbHZlZCA9IDAKK0BAIC01NjUsNiArNTc3LDE0IEBAIHdoaWxlIDE6CisgICAgIGZvciBuYW1lIGluIG5lZWRlZF9zeW1ib2xzOgorICAgICAgICAgaWYgbm90IG5hbWUgaW4gc3ltYm9sX3Byb3ZpZGVyOgorICAgICAgICAgICAgIGlmIG5vdCBuZWVkZWRfc3ltYm9sc1tuYW1lXS53ZWFrOgorKyAgICAgICAgICAgICAgICAjIFdPUktBUk9VTkQ6IFVuZGVmaW5lZCBzeW1ib2xzIGluIGEgbGlicmFyeSBjYW4gYmUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisrICAgICAgICAgICAgICAgICMgdGhhdCBsaW5rcyB0byB0aGUgbGlicmFyeS4gU28gaWYgdGhlIG9iamVjdCB3aGljaCByZXF1aXJlcyB0aGUgc3ltYm9sIGlzIGEgbGlicmFyeQorKyAgICAgICAgICAgICAgICAjIGFuZCBzb21lIGFwcGxpY2F0aW9uIGNhbiBwcm92aWRlIHRoZSBzeW1ib2wsIHRoZSB1bmRlZmluZWQgc3ltYm9sIGlzIHNraXBwZWQuCisrICAgICAgICAgICAgICAgIHN5bWJvbCA9IG5lZWRlZF9zeW1ib2xzW25hbWVdCisrICAgICAgICAgICAgICAgIGlmIHNvX3BhdHRlcm4ubWF0Y2goc3ltYm9sLm9iamVjdCkgYW5kIHByZXNlbnRfc3ltYm9sX3Byb2dzLmdldChuYW1lLCBOb25lKToKKysgICAgICAgICAgICAgICAgICAgIGRlYnVnKERFQlVHX1NQQU0sICJzeW1ib2wgJXMgaW4gbGlicmFyeSAlcyBpcyBwcm92aWRlZCBieSBleGVjdXRhYmxlICVzIiBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAlIChuYW1lLCBzeW1ib2wub2JqZWN0LCAnICcuam9pbihwcmVzZW50X3N5bWJvbF9wcm9nc1tuYW1lXSkpKQorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJObyBsaWJyYXJ5IHByb3ZpZGVzIG5vbi13ZWFrICVzIiAlIG5hbWUpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIGxpYiA9IHN5bWJvbF9wcm92aWRlcltuYW1lXQorLS0gCisxLjguNS4yLjIzMy5nOTMyZjdlNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL2ZpbGVzL2ZpeF9TVFRfR05VX0lGVU5DLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdhNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfU1RUX0dOVV9JRlVOQy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitUaGUgbGliYzYtZGV2IGluIFVidW50dSA5LjA0IGlzIHNvIG9sZCB0aGF0IHRoZSBlbGYuaCBkb2Vzbid0CitkZWZpbmUgU1RUX0dOVV9JRlVOQywgc28gd2UgaGF2ZSB0byBkZWZpbmUgaXQgb3Vyc2VsdmVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXSAtIG9sZCByZWxlYXNlIHNwZWNpZmljLCBtYXliZSByZW1vdmFibGUKKworLS0gRGV4dWFuIEN1aSAoZGV4dWFuLmN1aUBpbnRlbC5jb20pIEZlYiAxNiwgMjAxMS4KKworZGlmZiAtLWdpdCBhL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcCBiL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAoraW5kZXggMjQ0NGMzOS4uNTZkOTNmOCAxMDA2NDQKKy0tLSBhL3NyYy9ta2xpYnMtcmVhZGVsZi9tYWluLmNwcAorKysrIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitAQCAtNiw2ICs2LDE0IEBACisgI2luY2x1ZGUgPHZlY3Rvcj4KKyAKKyAjaW5jbHVkZSA8ZWxmLmg+CisrLyoKKysgKiBUaGUgL3Vzci9pbmNsdWRlL2VsZi5oIGluIHNvbWUgZGlzdHJpYnV0aW9ucyhsaWtlIFVidW50dSA5LjA0KSBkb2Vzbid0CisrICogZGVmaW5lIHRoZSBtYWNyby4gV2UgbmVlZCB0byBkZWZpbmUgaXQgaGVyZS4KKysgKi8KKysjaWZuZGVmIFNUVF9HTlVfSUZVTkMKKysjZGVmaW5lIFNUVF9HTlVfSUZVTkMgICAxMCAgICAgICAgICAgICAgLyogU3ltYm9sIGlzIGluZGlyZWN0IGNvZGUgb2JqZWN0ICovCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorICNpbmNsdWRlICJlbGYuaHBwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9maXhfY3Jvc3NfY29tcGlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNDYwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2gKQEAgLTAsMCArMSw4MSBAQAorUmVtb3ZlIGRlcGVuZGVuY3kgb24gZHBrZworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitBc2tpbmcgdGhlIGhvc3QgT1Mgd2hldGhlciBpdCBzdXBwb3J0cyBtdWx0aWFyY2ggaXMgbm90IHVzZWZ1bAoraW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgb3IgaWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZAorYSBsaWJkaXIgZXhwbGljaXRseS4gU28gdGhpcyBwYXRjaCwgYmFzZWQgb24gdGhlIHdvcmsgb2YgTWVudG9yCitHcmFwaGljcywgcmVtb3ZlcyBta2xpYnMncyBkZXBlbmRlbmN5IG9uIGRwa2cgcGFja2FnZS4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8WXVhbmppZS5IdWFuZ0B3aW5kcml2ZXIuY29tPgorIHNyYy9ta2xpYnMgfCAzMCArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbWtsaWJzIGIvc3JjL21rbGlicworaW5kZXggZDliNzg0Yi4uYzU2MTRlYSAxMDA3NTUKKy0tLSBhL3NyYy9ta2xpYnMKKysrKyBiL3NyYy9ta2xpYnMKK0BAIC0yNjEsNiArMjYxLDExIEBAIGRlZiBleHRyYWN0X3NvbmFtZShzb19maWxlKToKKyAgICAgcmV0dXJuICIiCisgCisgZGVmIG11bHRpYXJjaChwYXRocyk6CisrICAgICMgQXNraW5nIHRoZSBob3N0IE9TIHdoZXRoZXIgaXQgc3VwcG9ydHMgbXVsdGlhcmNoIGlzIG5vdCB1c2VmdWwKKysgICAgIyBpbiBhIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50LCBvciBpZiB0aGUgdXNlciBoYXMgc3BlY2lmaWVkCisrICAgICMgYSBsaWJkaXIgZXhwbGljaXRseS4KKysgICAgaWYgc3lzcm9vdCAhPSAiIiBvciBsaWJkaXIgIT0gIiI6CisrICAgICAgICByZXR1cm4gcGF0aHMKKyAgICAgZGV2bnVsbCA9IG9wZW4oJy9kZXYvbnVsbCcsICd3JykKKyAgICAgZHBrZ19hcmNoaXRlY3R1cmUgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgWydkcGtnLWFyY2hpdGVjdHVyZScsICctcURFQl9IT1NUX01VTFRJQVJDSCddLAorQEAgLTM0MCw3ICszNDUsNyBAQCBsaWJfcGF0aCA9IFtdCisgZGVzdF9wYXRoID0gIkRFU1QiCisgbGRsaWIgPSAiTERMSUIiCisgaW5jbHVkZV9kZWZhdWx0X2xpYl9wYXRoID0gInllcyIKKy1kZWZhdWx0X2xpYl9wYXRoID0gbXVsdGlhcmNoKFsiL2xpYi8iLCAiL3Vzci9saWIvIiwgIi91c3IvWDExUjYvbGliLyJdKQorK2RlZmF1bHRfbGliX3BhdGggPSBbIi9saWIvIiwgIi91c3IvbGliLyIsICIvdXNyL1gxMVI2L2xpYi8iXQorIGxpYmNfZXh0cmFzX2RpciA9ICIvdXNyL2xpYi9saWJjX3BpYyIKKyBsaWJjX2V4dHJhc19kaXJfZGVmYXVsdCA9IFRydWUKKyBsaWJkaXIgPSAibGliIgorQEAgLTM4Niw3ICszOTEsNyBAQCBmb3Igb3B0LCBhcmcgaW4gb3B0bGlzdDoKKyAgICAgZWxpZiBvcHQgPT0gIi0tbGliZGlyIjoKKyAgICAgICAgIGxpYmRpciA9IGFyZworICAgICBlbGlmIG9wdCBpbiAoIi0taGVscCIsICItaCIpOgorLQl1c2FnZSgwKQorKyAgICAgICAgdXNhZ2UoMCkKKyAgICAgICAgIHN5cy5leGl0KDApCisgICAgIGVsaWYgb3B0IGluICgiLS12ZXJzaW9uIiwgIi1WIik6CisgICAgICAgICB2ZXJzaW9uKHZlcnMpCitAQCAtMzk1LDYgKzQwMCw3IEBAIGZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgICAgICAgcHJpbnQgIldBUk5JTkc6IHVua25vd24gb3B0aW9uOiAiICsgb3B0ICsgIlx0YXJnOiAiICsgYXJnCisgCisgaWYgaW5jbHVkZV9kZWZhdWx0X2xpYl9wYXRoID09ICJ5ZXMiOgorKyAgICBkZWZhdWx0X2xpYl9wYXRoID0gbXVsdGlhcmNoKGRlZmF1bHRfbGliX3BhdGgpCisgICAgIGxpYl9wYXRoLmV4dGVuZChbYS5yZXBsYWNlKCIvbGliLyIsICIvIiArIGxpYmRpciArICIvIikgZm9yIGEgaW4gZGVmYXVsdF9saWJfcGF0aF0pCisgCisgaWYgbGliY19leHRyYXNfZGlyX2RlZmF1bHQ6CitAQCAtNjYxLDE2ICs2NjksMTYgQEAgbGRfcGF0aF9uYW1lID0gb3MucGF0aC5kaXJuYW1lKGxkbGliKQorIGxkX2Z1bGxfcGF0aCA9ICIuLi8iICsgbGRsaWIKKyBsZF9maWxlID0gZmluZF9saWIobGRfZmlsZV9uYW1lKQorIAorLWlmIGxkX3BhdGhfbmFtZSAhPSAiL2xpYiI6CistICAgIGlmIG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUsIG9zLkZfT0spOgorLSAgICAgICAgb3MucmVtb3ZlKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSkKKysjaWYgbGRfcGF0aF9uYW1lICE9ICIvbGliIjoKKysjICAgIGlmIG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUsIG9zLkZfT0spOgorKyMgICAgICAgIG9zLnJlbW92ZShkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUpCisgCistaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSk6CistICAgIG9zLm1rZGlyKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSkKKysjaWYgbm90IG9zLnBhdGguZXhpc3RzKGRlc3RfcGF0aCArICIvLi4vIiArIGxkX3BhdGhfbmFtZSk6CisrIyAgICBvcy5ta2RpcihkZXN0X3BhdGggKyAiLy4uLyIgKyBsZF9wYXRoX25hbWUpCisgCistaWYgbm90IG9zLmFjY2VzcyhkZXN0X3BhdGggKyAiLyIgKyBsZF9mdWxsX3BhdGgsIG9zLkZfT0spOgorLSAgICBkZWJ1ZyhERUJVR19OT1JNQUwsICJJOiBzdHJpcHBpbmcgYW5kIGNvcHlpbmcgZHluYW1pYyBsaW5rZXIgdG8gIiArIGxkX2Z1bGxfcGF0aCkKKytpZiBub3Qgb3MuYWNjZXNzKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgb3MuRl9PSyk6CisrICAgIGRlYnVnKERFQlVHX05PUk1BTCwgIkk6IHN0cmlwcGluZyBhbmQgY29weWluZyBkeW5hbWljIGxpbmtlciB0byAiICsgbGRfZmlsZV9uYW1lKQorICAgICBjb21tYW5kKHRhcmdldCArICJvYmpjb3B5IiwgIi0tc3RyaXAtdW5uZWVkZWQgLVIgLm5vdGUgLVIgLmNvbW1lbnQiLAorLSAgICAgICAgICAgIGxkX2ZpbGUsIGRlc3RfcGF0aCArICIvIiArIGxkX2Z1bGxfcGF0aCkKKysgICAgICAgICAgICBsZF9maWxlLCBkZXN0X3BhdGggKyAiLyIgKyBsZF9maWxlX25hbWUpCisgCistb3MuY2htb2QoZGVzdF9wYXRoICsgIi8iICsgbGRfZnVsbF9wYXRoLCAwNzU1KQorK29zLmNobW9kKGRlc3RfcGF0aCArICIvIiArIGxkX2ZpbGVfbmFtZSwgMDc1NSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc2hvdy1HTlUtdW5pcXVlLXN5bWJvbHMtYXMtcHJvdmlkZWQtc3ltYm9scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc2hvdy1HTlUtdW5pcXVlLXN5bWJvbHMtYXMtcHJvdmlkZWQtc3ltYm9scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzU2NTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gZWRkZjA0YzdmODMxMmU5YzI5Y2RiMjRlNDMxYjdlNGZiMmNjNzBlZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1YW5qaWUgSHVhbmcgPHl1YW5qaWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMTQ6MDA6MDYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gU2hvdyBHTlUgdW5pcXVlIHN5bWJvbHMgYXMgcHJvdmlkZWQgc3ltYm9scworCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitHTlUgVW5pcXVlIHN5bWJvbCBpcyBhIEdOVSBleHRlbnNpb24gZW1wbG95ZWQgYnkgbmV3IHZlcnNpb24gb2YgR0NDCitieSBkZWZhdWx0LiBFdmVuIFN0YW5kYXJkIEMrKyBsaWJyYXJ5IGluIEdDQyA0LjkgcHJvdmlkZXMgc29tZSBzeW1ib2xzLAorc3VjaCBhcyBfWk5TczRfUmVwMjBfU19lbXB0eV9yZXBfc3RvcmFnZUUgaW4gdGhpcyBiaW5kaW5nIHR5cGUgaW5zdGVhZAorb2YgRUxGIHN0YW5kYXJkIHdlYWsgYmluZGluZy4KK1RoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IG9mIHRoaXMgbmV3IGJpbmRpbmcgdHlwZSB0byBta2xpYnMtcmVhZGVsZi4KKworU2lnbmVkLW9mZi1ieTogWXVhbmppZSBIdWFuZyA8eXVhbmppZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwIGIvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCitpbmRleCA1NmQ5M2Y4Li4wMTM0NTMwIDEwMDY0NAorLS0tIGEvc3JjL21rbGlicy1yZWFkZWxmL21haW4uY3BwCisrKysgYi9zcmMvbWtsaWJzLXJlYWRlbGYvbWFpbi5jcHAKK0BAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3Nfc3ltYm9sc19wcm92aWRlZCAoY29uc3QgRWxmOjpzZWN0aW9uX3R5cGU8RWxmOjpzZWN0aW9uX3R5cGVfCisgICAgIHVpbnQ4X3QgdHlwZSA9IHN5bWJvbC0+Z2V0X3R5cGUgKCk7CisgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lID0gc3ltYm9sLT5nZXRfbmFtZV9zdHJpbmcgKCk7CisgCistICAgIGlmIChiaW5kICE9IFNUQl9HTE9CQUwgJiYgYmluZCAhPSBTVEJfV0VBSykKKysgICAgaWYgKGJpbmQgIT0gU1RCX0dMT0JBTCAmJiBiaW5kICE9IFNUQl9XRUFLICYmIGJpbmQgIT0gU1RCX0dOVV9VTklRVUUpCisgICAgICAgY29udGludWU7CisgICAgIGlmIChzaG5keCA9PSBTSE5fVU5ERUYgfHwgc2huZHggPT0gU0hOX0FCUykKKyAgICAgICBjb250aW51ZTsKKy0tIAorMS44LjUuMi4yMzMuZzkzMmY3ZTQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9maWxlcy9zeXNyb290ZWQtbGRzby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc3lzcm9vdGVkLWxkc28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1MDBhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ta2xpYnMvZmlsZXMvc3lzcm9vdGVkLWxkc28ucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorSW4gY3Jvc3MgYnVpbGRzIHdlIHdpbGwgaGF2ZSB0byByZXNwZWN0IHN5c3Jvb3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbWtsaWJzLTAuMS4zOS9zcmMvbWtsaWJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWtsaWJzLTAuMS4zOS5vcmlnL3NyYy9ta2xpYnMJMjAxNC0wMy0wMSAxODoyNTozNi4wMDAwMDAwMDAgKzAwMDAKKysrKyBta2xpYnMtMC4xLjM5L3NyYy9ta2xpYnMJMjAxNC0xMC0xOSAwMDo1MTo0Ni44MTM1MzQ1OTYgKzAwMDAKK0BAIC00OTUsNyArNDk1LDcgQEAKKyAgICAgcHJlc2VudF9zeW1ib2xzID0ge30KKyAgICAgY2hlY2tlZF9saWJzID0gc21hbGxfbGlicworICAgICBjaGVja2VkX2xpYnMuZXh0ZW5kKGF2YWlsYWJsZV9saWJzKQorLSAgICBjaGVja2VkX2xpYnMuYXBwZW5kKGxkbGliKQorKyAgICBjaGVja2VkX2xpYnMuYXBwZW5kKHN5c3Jvb3QgKyBsZGxpYikKKyAgICAgZm9yIGxpYiBpbiBjaGVja2VkX2xpYnM6CisgICAgICAgICBmb3Igc3ltYm9sIGluIHByb3ZpZGVkX3N5bWJvbHMobGliKToKKyAgICAgICAgICAgICBkZWJ1ZyhERUJVR19TUEFNLCAicHJlc2VudF9zeW1ib2xzIGFkZGluZyAlcyIgJSBzeW1ib2wpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbWtsaWJzL21rbGlicy1uYXRpdmVfMC4xLjQwLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZlYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL21rbGlicy9ta2xpYnMtbmF0aXZlXzAuMS40MC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlNoYXJlZCBsaWJyYXJ5IG9wdGltaXNhdGlvbiB0b29sIgorREVTQ1JJUFRJT04gPSAibWtsaWJzIHByb2R1Y2VzIGN1dC1kb3duIHNoYXJlZCBsaWJyYXJpZXMgdGhhdCBjb250YWluIG9ubHkgdGhlIHJvdXRpbmVzIHJlcXVpcmVkIGJ5IGEgcGFydGljdWxhciBzZXQgb2YgZXhlY3V0YWJsZXMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0L21rbGlicyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTk4ZDMxMDM3YjEzZDg5NmUzMzg5MDczOGVmMDFhZjY0IgorREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL20vbWtsaWJzLyR7QlBOfV8ke1BWfS50YXIueHogXAorCWZpbGU6Ly9hY19pbml0X2ZpeC5wYXRjaFwKKwlmaWxlOi8vZml4X1NUVF9HTlVfSUZVTkMucGF0Y2hcCisJZmlsZTovL3N5c3Jvb3RlZC1sZHNvLnBhdGNoIFwKKwlmaWxlOi8vYXZvaWQtZmFpbHVyZS1vbi1zeW1ib2wtcHJvdmlkZWQtYnktYXBwbGljYXRpb24ucGF0Y2ggXAorCWZpbGU6Ly9zaG93LUdOVS11bmlxdWUtc3ltYm9scy1hcy1wcm92aWRlZC1zeW1ib2xzLnBhdGNoIFwKKwlmaWxlOi8vZml4X2Nyb3NzX2NvbXBpbGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTFkYWZlNWY5NjJjYWE5ZGM1ZjI2NTFjMDcyMzgxMmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWRiMjRhZTc3OWQyMWNjZmVkNDlmMjJlNDlhMmI3ZWU0M2VjMGU5MTk3YmMyMDZkODFjZDAyZjk2ZTkxZTEyNSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBuYXRpdmUgcHl0aG9ubmF0aXZlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlscy8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzLzAwMDEtbW1jLmgtZG9uLXQtaW5jbHVkZS1hc20tZ2VuZXJpYy1pbnQtbGw2NC5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MjRkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlscy8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworbW1jLmg6IGRvbid0IGluY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisKK0luY2x1ZGluZyB0aGlzIGZpbGUgY2F1c2VzIGEgY29tcGlsZSBmYWlsdXJlIGZvciBxZW11bWlwczY0LgorVGhpcyBmaWxlIGlzIG5vdCBuZWVkZWQgdG8gYmUgZXhwbGljaXRseSBpbmNsdWRlZCwgYmVjYXVzZSBpdCB3aWxsIGJlCitpbmNsdWRlZCBieSB0aGUgPGxpbnV4L21tYy9pb2N0bC5oPiBmaWxlIGlmIF9NSVBTX1NaTE9ORyBpcyBub3QgNjQuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIG1tYy5oIHwgICAgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21tYy5oIGIvbW1jLmgKK2luZGV4IDk4NzFkNjIuLjNkZjJjZGYgMTAwNjQ0CistLS0gYS9tbWMuaAorKysrIGIvbW1jLmgKK0BAIC0xNCw3ICsxNCw2IEBACisgICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICAqLworIAorLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pbnQtbGw2NC5oPgorICNpbmNsdWRlIDxsaW51eC9tbWMvaW9jdGwuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbW1jL21tYy11dGlsc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tbWMvbW1jLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitERVNDUklQVElPTiA9ICJVc2Vyc3BhY2UgdG9vbHMgZm9yIE1NQy9TRCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC5rZXJuZWwub3JnL2NnaXQvbGludXgva2VybmVsL2dpdC9jamIvbW1jLXV0aWxzLmdpdC8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbW1jLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9ZDc3NDdmYzg3ZjFlYjIyYjk0NmVmODE5OTY5NTAzZjAiCisKK0JSQU5DSCA/PSAibWFzdGVyIgorU1JDUkVWID0gImY0ZWIyNDE1MTlmOGQ1MDBjZTYwNjhhNzBkMjM4OWJlMzlhYzUxODkiCisKK1BWID0gIjAuMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2piL21tYy11dGlscy5naXQ7YnJhbmNoPSR7QlJBTkNIfSBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1tYy5oLWRvbi10LWluY2x1ZGUtYXNtLWdlbmVyaWMtaW50LWxsNjQuaC5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2VkIC1pICJzOi1XZXJyb3I6OmciICR7U30vTWFrZWZpbGUKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKyAgICBpbnN0YWxsIC1tIDA3NTUgbW1jICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM2MTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvMDAwMS1oYXNodGFibGUtUmVtb3ZlLWR1cGxpY2F0ZS1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUtLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYjg1NmZmMzVjMjAxMjRjZWFlNDBiYmM0ZDMyNTg0ZGY0NzYxOGM5NiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDI1IEZlYiAyMDE1IDA5OjI4OjI2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGhhc2h0YWJsZTogUmVtb3ZlIGR1cGxpY2F0ZSBoYXNodGFibGVfaXRlcmF0b3JfdmFsdWUvaGFzaHRhYmxlX2l0ZXJhdG9yX2tleQorCitnY2M1IGlzIGRlZmF1bHRpbmcgdG8gZ251MTEgaW5zdGVhZCBvZiBnbnU4OSBsaWtlIHByZXZpb3VzIHZlcnNpb25zCithcyBhIHJlc3VsdCB0aGUgc2VtYW50aWNzIG9mICdleHRlcm4gaW5saW5lJyBjaGFuZ2VzIHdoZXJlIGluIGdudTg5IGZvciAnZXh0ZXJuIGlubGluZScgbm8gZXh0ZXJuYWwKK3Zpc2libGUgZnVuY3Rpb24gaXMgZ2VuZXJhdGVkLGluIGM5OSAnZXh0ZXJuYWwgaW5saW5lJyBnZW5lcmF0ZXMgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uCit0aGVyZSBpcyBubyBlcXVpdmFsZW50IGluIGM5OSsgYmVjYXVzZSByZWRlZmluaXRpb25zIGFyZW50IGFsbG93ZWQKK2J1dCAnc3RhdGljIGlubGluZScgcmVtYWlucyBzYW1lIGZvciBmb3IgYzg5IGFuZCBjOTkrLCB0aGF0cyB3aHkgd2UgY2hhbmdlIHRoZSBzZW1hbnRpY3MKK3NvIHdlIG1ha2UgdGhlIGZ1bmN0aW9ucyBzdGF0aWMgaW5saW5lLCBhbmQgYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCistLS0KKyBta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmMgfCAxMiAtLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBnaXQvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvbWtmcy51Ymlmcy9oYXNodGFibGUvaGFzaHRhYmxlX2l0ci5oCisrKysgZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuaAorQEAgLTI4LDcgKzI4LDcgQEAgaGFzaHRhYmxlX2l0ZXJhdG9yKHN0cnVjdCBoYXNodGFibGUgKmgpOworIC8qIGhhc2h0YWJsZV9pdGVyYXRvcl9rZXkKKyAgKiAtIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAKKy1leHRlcm4gaW5saW5lIHZvaWQgKgorK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisgaGFzaHRhYmxlX2l0ZXJhdG9yX2tleShzdHJ1Y3QgaGFzaHRhYmxlX2l0ciAqaSkKKyB7CisgICAgIHJldHVybiBpLT5lLT5rOworQEAgLTM3LDcgKzM3LDcgQEAgaGFzaHRhYmxlX2l0ZXJhdG9yX2tleShzdHJ1Y3QgaGFzaHRhYmxlXworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiB2YWx1ZSAtIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAKKy1leHRlcm4gaW5saW5lIHZvaWQgKgorK3N0YXRpYyBpbmxpbmUgdm9pZCAqCisgaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlKHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorIHsKKyAgICAgcmV0dXJuIGktPmUtPnY7CitJbmRleDogZ2l0L21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL21rZnMudWJpZnMvaGFzaHRhYmxlL2hhc2h0YWJsZV9pdHIuYworKysrIGdpdC9ta2ZzLnViaWZzL2hhc2h0YWJsZS9oYXNodGFibGVfaXRyLmMKK0BAIC0zNSwxOCArMzUsNiBAQCBoYXNodGFibGVfaXRlcmF0b3Ioc3RydWN0IGhhc2h0YWJsZSAqaCkKKyB9CisgCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLS8qIGtleSAgICAgIC0gcmV0dXJuIHRoZSBrZXkgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKy0vKiB2YWx1ZSAgICAtIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIChrZXksdmFsdWUpIHBhaXIgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKy0KKy12b2lkICoKKy1oYXNodGFibGVfaXRlcmF0b3Jfa2V5KHN0cnVjdCBoYXNodGFibGVfaXRyICppKQorLXsgcmV0dXJuIGktPmUtPms7IH0KKy0KKy12b2lkICoKKy1oYXNodGFibGVfaXRlcmF0b3JfdmFsdWUoc3RydWN0IGhhc2h0YWJsZV9pdHIgKmkpCisteyByZXR1cm4gaS0+ZS0+djsgfQorLQorLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAvKiBhZHZhbmNlIC0gYWR2YW5jZSB0aGUgaXRlcmF0b3IgdG8gdGhlIG5leHQgZWxlbWVudAorICAqICAgICAgICAgICByZXR1cm5zIHplcm8gaWYgYWR2YW5jZWQgdG8gZW5kIG9mIHRhYmxlICovCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkNmEzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL2FkZC1leGNsdXNpb24tdG8tbWtmcy1qZmZzMi1naXQtMi5wYXRjaApAQCAtMCwwICsxLDEwMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSAvdG1wL21rZnMuamZmczIuYwkyMDA5LTAxLTExIDE1OjI4OjQxLjAwMDAwMDAwMCArMDEwMAorKysrIGdpdC9ta2ZzLmpmZnMyLmMJMjAwOS0wMS0xMSAxNTo1OToyOS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMDAsNiArMTAwLDExIEBACisgCXN0cnVjdCByYl9ub2RlIGhhcmRsaW5rX3JiOworIH07CisgCisrc3RydWN0IGlnbm9yZXBhdGhfZW50cnkgeworKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogbmV4dDsgIC8qIFBvaW50cyB0byB0aGUgbmV4dCBpZ25vcmVwYXRoIGVsZW1lbnQgKi8KKysJY2hhciBuYW1lW1BBVEhfTUFYXTsgICAgICAgIC8qIE5hbWUgb2YgdGhlIGVudHJ5ICovCisrfTsKKytzdGF0aWMgc3RydWN0IGlnbm9yZXBhdGhfZW50cnkqIGlnbm9yZXBhdGggPSAwOworIHN0cnVjdCByYl9yb290IGhhcmRsaW5rczsKKyBzdGF0aWMgaW50IG91dF9mZCA9IC0xOworIHN0YXRpYyBpbnQgaW5fZmQgPSAtMTsKK0BAIC00MDgsNyArNDEzLDcgQEAKKyAJY2hhciAqaHBhdGgsICp0cGF0aDsKKyAJc3RydWN0IGRpcmVudCAqZHAsICoqbmFtZWxpc3Q7CisgCXN0cnVjdCBmaWxlc3lzdGVtX2VudHJ5ICplbnRyeTsKKy0KKysJc3RydWN0IGlnbm9yZXBhdGhfZW50cnkqIGVsZW1lbnQgPSBpZ25vcmVwYXRoOworIAorIAlpZiAobHN0YXQoaG9zdHBhdGgsICZzYikpIHsKKyAJCXBlcnJvcl9tc2dfYW5kX2RpZSgiJXMiLCBob3N0cGF0aCk7CitAQCAtNDE3LDYgKzQyMiwxNSBAQAorIAllbnRyeSA9IGFkZF9ob3N0X2ZpbGVzeXN0ZW1fZW50cnkodGFyZ2V0cGF0aCwgaG9zdHBhdGgsCisgCQkJc2Iuc3RfdWlkLCBzYi5zdF9naWQsIHNiLnN0X21vZGUsIDAsIHBhcmVudCk7CisgCisrCXdoaWxlICggZWxlbWVudCApIHsKKysJCWlmICggc3RyY21wKCBlbGVtZW50LT5uYW1lLCB0YXJnZXRwYXRoICkgPT0gMCApIHsKKysJCQlwcmludGYoICJOb3RlOiBpZ25vcmluZyBkaXJlY3RvcmllcyBiZWxvdyAnJXMnXG4iLCB0YXJnZXRwYXRoICk7CisrCQkJcmV0dXJuIGVudHJ5OworKwkJCWJyZWFrOworKwkJfQorKwkJZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisrCX0KKysKKyAJbiA9IHNjYW5kaXIoaG9zdHBhdGgsICZuYW1lbGlzdCwgMCwgYWxwaGFzb3J0KTsKKyAJaWYgKG4gPCAwKSB7CisgCQlwZXJyb3JfbXNnX2FuZF9kaWUoIm9wZW5pbmcgZGlyZWN0b3J5ICVzIiwgaG9zdHBhdGgpOworQEAgLTE0NTMsNiArMTQ2Nyw3IEBACisgCXsicm9vdCIsIDEsIE5VTEwsICdyJ30sCisgCXsicGFnZXNpemUiLCAxLCBOVUxMLCAncyd9LAorIAl7ImVyYXNlYmxvY2siLCAxLCBOVUxMLCAnZSd9LAorKwl7Imlnbm9yZSIsIDEsIE5VTEwsICdJJ30sCisgCXsib3V0cHV0IiwgMSwgTlVMTCwgJ28nfSwKKyAJeyJoZWxwIiwgMCwgTlVMTCwgJ2gnfSwKKyAJeyJ2ZXJib3NlIiwgMCwgTlVMTCwgJ3YnfSwKK0BAIC0xNTAwLDYgKzE1MTUsNyBAQAorICIgIC1MLCAtLWxpc3QtY29tcHJlc3NvcnMgIFNob3cgdGhlIGxpc3Qgb2YgdGhlIGF2YWlhYmxlIGNvbXByZXNzb3JzXG4iCisgIiAgLXQsIC0tdGVzdC1jb21wcmVzc2lvbiAgQ2FsbCBkZWNvbXByZXNzIGFuZCBjb21wYXJlIHdpdGggdGhlIG9yaWdpbmFsIChmb3IgdGVzdClcbiIKKyAiICAtbiwgLS1uby1jbGVhbm1hcmtlcnMgICBEb24ndCBhZGQgYSBjbGVhbm1hcmtlciB0byBldmVyeSBlcmFzZWJsb2NrXG4iCisrIiAgLUksIC0taWdub3JlPVBBVEggICAgICAgSWdub3JlIHN1YiBkaXJlY3RvcnkgYW5kIGZpbGUgdHJlZSBiZWxvdyBQQVRIIHdoZW4gcmVjdXJzaW5nIG92ZXIgdGhlIGZpbGUgc3lzdGVtXG4iCisgIiAgLW8sIC0tb3V0cHV0PUZJTEUgICAgICAgT3V0cHV0IHRvIEZJTEUgKGRlZmF1bHQ6IHN0ZG91dClcbiIKKyAiICAtbCwgLS1saXR0bGUtZW5kaWFuICAgICBDcmVhdGUgYSBsaXR0bGUtZW5kaWFuIGZpbGVzeXN0ZW1cbiIKKyAiICAtYiwgLS1iaWctZW5kaWFuICAgICAgICBDcmVhdGUgYSBiaWctZW5kaWFuIGZpbGVzeXN0ZW1cbiIKK0BAIC0xNjY2LDYgKzE2ODIsNyBAQAorIAljaGFyICpjb21wcl9uYW1lID0gTlVMTDsKKyAJaW50IGNvbXByX3ByaW9yICA9IC0xOworIAlpbnQgd2Fybl9wYWdlX3NpemUgPSAwOworKwlzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSogZWxlbWVudCA9IGlnbm9yZXBhdGg7CisgCisgCXBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyAJaWYgKHBhZ2Vfc2l6ZSA8IDApIC8qIFN5c3RlbSBkb2Vzbid0IGtub3cgc28gLi4uICovCitAQCAtMTY3Niw3ICsxNjkzLDcgQEAKKyAJamZmczJfY29tcHJlc3NvcnNfaW5pdCgpOworIAorIAl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsCistCQkJCQkiRDpkOnI6czpvOnFVUGZoP3ZWZTpsYnA6Om5jOm06eDpYOkx0eTppOiIsIGxvbmdfb3B0aW9ucywgJmMpKSA+PSAwKQorKwkJCQkJIkQ6ZDpyOnM6STpvOnFVUGZoP3ZWZTpsYnA6Om5jOm06eDpYOkx0eTppOiIsIGxvbmdfb3B0aW9ucywgJmMpKSA+PSAwKQorIAl7CisgCQlzd2l0Y2ggKG9wdCkgeworIAkJCWNhc2UgJ0QnOgorQEAgLTE3MDAsNiArMTcxNywyOCBAQAorIAkJCQl3YXJuX3BhZ2Vfc2l6ZSA9IDA7IC8qIHNldCBieSB1c2VyLCBzbyBkb24ndCBuZWVkIHRvIHdhcm4gKi8KKyAJCQkJYnJlYWs7CisgCisrCQkJY2FzZSAnSSc6CisrCQkJCXByaW50ZiggIk5vdGU6IEFkZGluZyAnJXMnIHRvIGlnbm9yZSBQYXRoXG4iLCBvcHRhcmcgKTsKKysJCQkJZWxlbWVudCA9IGlnbm9yZXBhdGg7CisrCQkJCWlmICggIWlnbm9yZXBhdGggKSB7CisrCQkJCQlpZ25vcmVwYXRoID0geG1hbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSApICk7CisrCQkJCQlpZ25vcmVwYXRoLT5uZXh0ID0gMDsKKysJCQkJCXN0cmNweSggJmlnbm9yZXBhdGgtPm5hbWVbMF0sIG9wdGFyZyApOworKwkJCQl9IGVsc2UgeworKwkJCQkJd2hpbGUgKCBlbGVtZW50LT5uZXh0ICkgZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisrCQkJCQllbGVtZW50LT5uZXh0ID0geG1hbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgaWdub3JlcGF0aF9lbnRyeSApICk7CisrIAkJCQkJZWxlbWVudC0+bmV4dC0+bmV4dCA9IDA7CisrCQkJCQlzdHJjcHkoICZlbGVtZW50LT5uZXh0LT5uYW1lWzBdLCBvcHRhcmcgKTsKKysJCQkJfQorKwkJCQlwcmludGYoICItLS0tLS0tLS0gRHVtcGluZyBpZ25vcmUgcGF0aCBsaXN0IC0tLS0tLS0tLS0tLS0tLS1cbiIgKTsKKysJCQkJZWxlbWVudCA9IGlnbm9yZXBhdGg7CisrCQkJCXdoaWxlICggZWxlbWVudCApIHsKKysJCQkJCXByaW50ZiggIiAgKiAnJXMnXG4iLCAmZWxlbWVudC0+bmFtZVswXSApOworKwkJCQkJZWxlbWVudCA9IGVsZW1lbnQtPm5leHQ7CisrCQkJCX0KKysJCQkJcHJpbnRmKCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iICk7CisrCQkJCWJyZWFrOworKworIAkJCWNhc2UgJ28nOgorIAkJCQlpZiAob3V0X2ZkICE9IC0xKSB7CisgCQkJCQllcnJvcl9tc2dfYW5kX2RpZSgib3V0cHV0IGZpbGVuYW1lIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZSIpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210ZC9tdGQtdXRpbHMvZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZjE2MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9maXgtYXJtdjctbmVvbi1hbGlnbm1lbnQucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK05FT04gaW5zdHJ1Y3Rpb24gVkxEMS42NCB3YXMgdXNlZCB0byBjb3B5IDY0IGJpdHMgZGF0YSBhZnRlciB0eXBlCitjYXN0aW5nLCBhbmQgdGhleSB3aWxsIHRyaWdnZXIgYWxpZ25tZW50IHRyYXAuCitUaGlzIHBhdGNoIHVzZXMgbWVtY3B5IHRvIGF2b2lkIGFsaWdubWVudCBwcm9ibGVtLgorCitTaWduZWQtb2ZmLWJ5OiBZdWFuamllIEh1YW5nIDxZdWFuamllLkh1YW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9ta2ZzLnViaWZzL2tleS5oIGIvbWtmcy51Ymlmcy9rZXkuaAoraW5kZXggZDNhMDJkNC4uZTdlOTIxOCAxMDA2NDQKKy0tLSBhL21rZnMudWJpZnMva2V5LmgKKysrKyBiL21rZnMudWJpZnMva2V5LmgKK0BAIC0xNDEsMTAgKzE0MSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZGF0YV9rZXlfaW5pdCh1bmlvbiB1Ymlmc19rZXkgKmtleSwgaW5vX3QgaW51bSwKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQga2V5X3dyaXRlKGNvbnN0IHVuaW9uIHViaWZzX2tleSAqZnJvbSwgdm9pZCAqdG8pCisgeworLQl1bmlvbiB1Ymlmc19rZXkgKnQgPSB0bzsKKysJX19sZTMyIHhbMl07CisgCistCXQtPmozMlswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CistCXQtPmozMlsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisrCXhbMF0gPSBjcHVfdG9fbGUzMihmcm9tLT51MzJbMF0pOworKwl4WzFdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzFdKTsKKysKKysJbWVtY3B5KHRvLCAmeCwgOCk7CisgCW1lbXNldCh0byArIDgsIDAsIFVCSUZTX01BWF9LRVlfTEVOIC0gOCk7CisgfQorIAorQEAgLTE1NiwxMCArMTU4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBrZXlfd3JpdGUoY29uc3QgdW5pb24gdWJpZnNfa2V5ICpmcm9tLCB2b2lkICp0bykKKyAgKi8KKyBzdGF0aWMgaW5saW5lIHZvaWQga2V5X3dyaXRlX2lkeChjb25zdCB1bmlvbiB1Ymlmc19rZXkgKmZyb20sIHZvaWQgKnRvKQorIHsKKy0JdW5pb24gdWJpZnNfa2V5ICp0ID0gdG87CisrCV9fbGUzMiB4WzJdOworKworKwl4WzBdID0gY3B1X3RvX2xlMzIoZnJvbS0+dTMyWzBdKTsKKysJeFsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisgCistCXQtPmozMlswXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlswXSk7CistCXQtPmozMlsxXSA9IGNwdV90b19sZTMyKGZyb20tPnUzMlsxXSk7CisrCW1lbWNweSh0bywgJngsIDgpOworIH0KKyAKKyAvKioKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzL210ZC11dGlscy1maXgtY29ycnVwdC1jbGVhbm1hcmtlci13aXRoLWZsYXNoX2VyYXNlLS1qLWNvbW1hbmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMDdjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlscy9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0Zyb20gcGF0Y2h3b3JrIE1vbiBBdWcgIDggMDg6MTY6NDMgMjAxMQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CitTdWJqZWN0OiBtdGQtdXRpbHM6IGZpeCBjb3JydXB0IGNsZWFubWFya2VyIHdpdGggZmxhc2hfZXJhc2UgLWogY29tbWFuZAorRGF0ZTogU3VuLCAwNyBBdWcgMjAxMSAyMjoxNjo0MyAtMDAwMAorRnJvbTogYjM1MzYyQGZyZWVzY2FsZS5jb20KK1gtUGF0Y2h3b3JrLUlkOiAxMDg4NzMKK01lc3NhZ2UtSWQ6IDwxMzEyNzkxNDAzLTEzNDczLTEtZ2l0LXNlbmQtZW1haWwtYjM1MzYyQGZyZWVzY2FsZS5jb20+CitUbzogPGR3bXcyQGluZnJhZGVhZC5vcmc+CitDYzogTGl1IFNodW8gPGIzNTM2MkBmcmVlc2NhbGUuY29tPiwgQXJ0ZW0uQml0eXV0c2tpeUBub2tpYS5jb20sCisgTGkgWWFuZyA8bGVvbGlAZnJlZXNjYWxlLmNvbT4sIGxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCisKK0Zyb206IExpdSBTaHVvIDxiMzUzNjJAZnJlZXNjYWxlLmNvbT4KKworRmxhc2hfZXJhc2UgLWogc2hvdWxkIGZpbGwgZGlzY3JldGUgZnJlZW9vYiBhcmVhcyB3aXRoIHJlcXVpcmVkIGJ5dGVzCitvZiBKRkZTMiBjbGVhbm1hcmtlciBpbiBqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCkuIE5vdCBqdXN0IGZpbGwKK3RoZSBmaXJzdCBmcmVlb29iIGFyZWEuCisKK1RoZSBiZWxvdyBpcyB0aGUgcmVzdWx0IHdpdGhvdXQgdGhpcyB3b3JrYXJvdW5kOgorCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwMDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMDQwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDA4MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAwYzAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMTAwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDE0MDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAxODAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMWMwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKK0pGRlMyOiBFcmFzZSBibG9jayBhdCAweDAwMDIwMDAwIGlzIG5vdCBmb3JtYXR0ZWQuIEl0IHdpbGwgYmUgZXJhc2VkCitKRkZTMjogRXJhc2UgYmxvY2sgYXQgMHgwMDAyNDAwMCBpcyBub3QgZm9ybWF0dGVkLiBJdCB3aWxsIGJlIGVyYXNlZAorSkZGUzI6IEVyYXNlIGJsb2NrIGF0IDB4MDAwMjgwMDAgaXMgbm90IGZvcm1hdHRlZC4gSXQgd2lsbCBiZSBlcmFzZWQKKy4uLgorCitTaWduZWQtb2ZmLWJ5OiBMaXUgU2h1byA8YjM1MzYyQGZyZWVzY2FsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgorCitVcGRhdGVkIGZvciB0aGUgbmV3IHZlcnNpb24KKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQordjIgOiBnZXQgbGVuZ3RoIG9mIGF2YWlsYmxlIGZyZWVvb2IgYnl0ZXMgZnJvbSBvb2JpbmZvIGluZm9ybWF0aW9uLAorICAgICAgbm90IHVzZSB0aGUgaW9jdGwgRUNDR0VUTEFZT1VUIHdoaWNoIGlzIGJlaW5nIGRlcHJlY2F0ZWQuCisKKyBmbGFzaF9lcmFzZS5jIHwgICA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzOSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZmxhc2hfZXJhc2UuYyBiL2ZsYXNoX2VyYXNlLmMKK2luZGV4IDkzMzM3M2EuLjRiOWQ4NGIgMTAwNjQ0CistLS0gYS9mbGFzaF9lcmFzZS5jCisrKysgYi9mbGFzaF9lcmFzZS5jCitAQCAtOTksNiArOTksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlib29sIGlzTkFORDsKKyAJaW50IGVycm9yID0gMDsKKyAJb2ZmX3Qgb2Zmc2V0ID0gMDsKKysJdm9pZCAqb29iX2RhdGEgPSBOVUxMOworIAorIAkvKgorIAkgKiBQcm9jZXNzIHVzZXIgYXJndW1lbnRzCitAQCAtMjAxLDE1ICsyMDIsNDMgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJCQlpZiAoaW9jdGwoZmQsIE1FTUdFVE9PQlNFTCwgJm9vYmluZm8pICE9IDApCisgCQkJCXJldHVybiBzeXNfZXJybXNnKCIlczogdW5hYmxlIHRvIGdldCBOQU5EIG9vYmluZm8iLCBtdGRfZGV2aWNlKTsKKyAKKysJCQljbGVhbm1hcmtlci50b3RsZW4gPSBjcHVfdG9famUzMig4KTsKKyAJCQkvKiBDaGVjayBmb3IgYXV0b3BsYWNlbWVudCAqLworIAkJCWlmIChvb2JpbmZvLnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UpIHsKKy0JCQkJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLworLQkJCQlpZiAoIW9vYmluZm8ub29iZnJlZVswXVsxXSkKKysJCQkJc3RydWN0IG5hbmRfZWNjbGF5b3V0X3VzZXIgZWNjbGF5b3V0OworKwkJCQlpbnQgaSwgb29iYXZhaWw7CisrCisrCQkJCWZvciAoaSA9IDAsIG9vYmF2YWlsID0gMDsgb29iaW5mby5vb2JmcmVlW2ldWzFdOyBpKyspCisrCQkJCQlvb2JhdmFpbCArPSBvb2JpbmZvLm9vYmZyZWVbaV1bMV07CisrCisrCQkJCWlmICghb29iYXZhaWwpCisgCQkJCQlyZXR1cm4gZXJybXNnKCIgRWVlcC4gQXV0b3BsYWNlbWVudCBzZWxlY3RlZCBhbmQgbm8gZW1wdHkgc3BhY2UgaW4gb29iIik7CisrCisrCQkJCS8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhlIGZyZWUgYnl0ZXMgKi8KKyAJCQkJY2xtcG9zID0gb29iaW5mby5vb2JmcmVlWzBdWzBdOworLQkJCQljbG1sZW4gPSBvb2JpbmZvLm9vYmZyZWVbMF1bMV07CistCQkJCWlmIChjbG1sZW4gPiA4KQorLQkJCQkJY2xtbGVuID0gODsKKysJCQkJY2xtbGVuID0gTUlOKG9vYmF2YWlsLCA4KTsKKysKKysJCQkJaWYgKG9vYmluZm8ub29iZnJlZVswXVsxXSA8IDggJiYgb29iYXZhaWwgPj0gOCkgeworKwkJCQkJaW50IGxlZnQsIG4sIGxhc3QgPSAwOworKwkJCQkJdm9pZCAqY207CisrCisrCQkJCQlvb2JfZGF0YSA9IG1hbGxvYyhtdGQub29iX3NpemUpOworKwkJCQkJaWYgKCFvb2JfZGF0YSkKKysJCQkJCQlyZXR1cm4gLUVOT01FTTsKKysKKysJCQkJCW1lbXNldChvb2JfZGF0YSwgMHhmZiwgbXRkLm9vYl9zaXplKTsKKysJCQkJCWNtID0gJmNsZWFubWFya2VyOworKwkJCQkJZm9yIChpID0gMCwgbGVmdCA9IGNsbWxlbjsgbGVmdCA7IGkrKykgeworKwkJCQkJCW4gPSBNSU4obGVmdCwgb29iaW5mby5vb2JmcmVlW2ldWzFdKTsKKysJCQkJCQltZW1jcHkob29iX2RhdGEgKyBvb2JpbmZvLm9vYmZyZWVbaV1bMF0sCisrCQkJCQkJCQljbSwgbik7CisrCQkJCQkJbGVmdCAtPSBuOworKwkJCQkJCWNtICAgKz0gbjsKKysJCQkJCQlsYXN0ID0gb29iaW5mby5vb2JmcmVlW2ldWzBdICsgbjsKKysJCQkJCX0KKysKKysJCQkJCWNsbWxlbiA9IGxhc3QgLSBjbG1wb3M7CisrCQkJCX0KKyAJCQl9IGVsc2UgeworIAkJCQkvKiBMZWdhY3kgbW9kZSAqLworIAkJCQlzd2l0Y2ggKG10ZC5vb2Jfc2l6ZSkgeworQEAgLTIyNyw3ICsyNTYsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJCQkJCWJyZWFrOworIAkJCQl9CisgCQkJfQorLQkJCWNsZWFubWFya2VyLnRvdGxlbiA9IGNwdV90b19qZTMyKDgpOworIAkJfQorIAkJY2xlYW5tYXJrZXIuaGRyX2NyYyA9IGNwdV90b19qZTMyKG10ZF9jcmMzMigwLCAmY2xlYW5tYXJrZXIsIHNpemVvZihjbGVhbm1hcmtlcikgLSA0KSk7CisgCX0KK0BAIC0yNzYsNyArMzA0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAKKyAJCS8qIHdyaXRlIGNsZWFubWFya2VyICovCisgCQlpZiAoaXNOQU5EKSB7CistCQkJaWYgKG10ZF93cml0ZV9vb2IobXRkX2Rlc2MsICZtdGQsIGZkLCAodWludDY0X3Qpb2Zmc2V0ICsgY2xtcG9zLCBjbG1sZW4sICZjbGVhbm1hcmtlcikgIT0gMCkgeworKwkJCXZvaWQgKmRhdGEgPSBvb2JfZGF0YSA/IG9vYl9kYXRhICsgY2xtcG9zIDogJmNsZWFubWFya2VyOworKwkJCWlmIChtdGRfd3JpdGVfb29iKG10ZF9kZXNjLCAmbXRkLCBmZCwgKHVpbnQ2NF90KW9mZnNldCArIGNsbXBvcywgY2xtbGVuLCBkYXRhKSAhPSAwKSB7CisgCQkJCXN5c19lcnJtc2coIiVzOiBNVEQgd3JpdGVvb2IgZmFpbHVyZSIsIG10ZF9kZXZpY2UpOworIAkJCQljb250aW51ZTsKKyAJCQl9CitAQCAtMjkxLDUgKzMyMCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCXNob3dfcHJvZ3Jlc3MoJm10ZCwgb2Zmc2V0LCBlYiwgZWJfc3RhcnQsIGViX2NudCk7CisgCWJhcmV2ZXJib3NlKCFxdWlldCwgIlxuIik7CisgCisrCWlmIChvb2JfZGF0YSkKKysJCWZyZWUob29iX2RhdGEpOworKworIAlyZXR1cm4gMDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRkL210ZC11dGlsc19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdkY2E3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdGQvbXRkLXV0aWxzX2dpdC5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvY29tbW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YmEwNWIwNzkxMmE0NGVhMmJmODFjZTQwOTM4MDA0OWMiCisKK0RFUEVORFMgPSAiemxpYiBsem8gZTJmc3Byb2dzIHV0aWwtbGludXgiCisKK1BWID0gIjEuNS4xK2dpdCR7U1JDUFZ9IgorCitTUkNSRVYgPSAiOWYxMDcxMzJhNmEwNzNjY2UzNzQzNGNhOWNkYTY5MTdkZDhkODY2YiIKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvbXRkLXV0aWxzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtZXhjbHVzaW9uLXRvLW1rZnMtamZmczItZ2l0LTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWFybXY3LW5lb24tYWxpZ25tZW50LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaGFzaHRhYmxlLVJlbW92ZS1kdXBsaWNhdGUtaGFzaHRhYmxlX2l0ZXJhdG9yX3ZhbHVlLS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tdGQtdXRpbHMtZml4LWNvcnJ1cHQtY2xlYW5tYXJrZXItd2l0aC1mbGFzaF9lcmFzZS0tai1jb21tYW5kLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdC8iCisKKyMgeGF0dHIgc3VwcG9ydCBjcmVhdGVzIGFuIGFkZGl0aW9uYWwgY29tcGlsZS10aW1lIGRlcGVuZGVuY3kgb24gYWNsIGJlY2F1c2UKKyMgdGhlIHN5cy9hY2wuaCBoZWFkZXIgaXMgbmVlZGVkLiBsaWJhY2wgaXMgbm90IG5lZWRlZCBhbmQgdGh1cyBlbmFibGluZyB4YXR0cgorIyByZWdhcmRsZXNzIHdoZXRoZXIgYWNsIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIGRpc3RybyBzaG91bGQgYmUgb2theS4KK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAneGF0dHInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLCxhY2wsIgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnUkFOTElCPSR7UkFOTElCfScgJ0FSPSR7QVJ9JyAnQ0ZMQUdTPSR7Q0ZMQUdTfSAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4YXR0cicsICcnLCAnLURXSVRIT1VUX1hBVFRSJywgZCl9IC1JJHtTfS9pbmNsdWRlJyAnQlVJTERESVI9JHtTfSciCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IE1BTkRJUj0ke21hbmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Cit9CisKK1BBQ0tBR0VTID0rICJtdGQtdXRpbHMtamZmczIgbXRkLXV0aWxzLXViaWZzIG10ZC11dGlscy1taXNjIgorCitGSUxFU19tdGQtdXRpbHMtamZmczIgPSAiJHtzYmluZGlyfS9ta2ZzLmpmZnMyICR7c2JpbmRpcn0vamZmczJkdW1wICR7c2JpbmRpcn0vamZmczJyZWFkZXIgJHtzYmluZGlyfS9zdW10b29sIgorRklMRVNfbXRkLXV0aWxzLXViaWZzID0gIiR7c2JpbmRpcn0vbWtmcy51YmlmcyAke3NiaW5kaXJ9L3ViaSoiCitGSUxFU19tdGQtdXRpbHMtbWlzYyA9ICIke3NiaW5kaXJ9L25mdGwqICR7c2JpbmRpcn0vZnRsKiAke3NiaW5kaXJ9L3JmZCogJHtzYmluZGlyfS9kb2MqICR7c2JpbmRpcn0vc2VydmVfaW1hZ2UgJHtzYmluZGlyfS9yZWN2X2ltYWdlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBnaXQvLmNvbXByLmMuZGVwOjQ2OiB3YXJuaW5nOiBOVUwgY2hhcmFjdGVyIHNlZW47IHJlc3Qgb2YgbGluZSBpZ25vcmVkCisjIGdpdC8uY29tcHIuYy5kZXA6NDc6ICoqKiBtaXNzaW5nIHNlcGFyYXRvci4gIFN0b3AuCitQQVJBTExFTF9NQUtFID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL2ZpeC1icm9rZW4tbHoucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9maXgtYnJva2VuLWx6LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDU0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9maXgtYnJva2VuLWx6LnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogV2VubGluIEthbmcgPHdlbmxpbi5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDhmOTMwNWEuLjY5NGU4MzcgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yNTEsNiArMjUxLDcgQEAgaW5zdGFsbC1zY3JpcHRzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworIAlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKyAJQGZvciBqIGluICQoU0NSSVBUUykgOyBkbyBcCisgCQkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2Rpcikvc2NyaXB0cy8kJGogJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQkkKElOU1RBTExfUFJPR1JBTSkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorIAkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorIAlybSAtZiAke0RFU1RESVJ9JChiaW5kaXIpL2x6CistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy1tYWtlaW5mby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy1tYWtlaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTI4NzNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHMvbXRvb2xzLW1ha2VpbmZvLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCistLS0gbXRvb2xzLTMuOS45L2NvbmZpZ3VyZS5pbi5vcmlnCTIwMDYtMDQtMTQgMTY6MDU6NTQuMzM3NjU1MTkyIC0wNjAwCisrKysgbXRvb2xzLTMuOS45L2NvbmZpZ3VyZS5pbgkyMDA2LTA0LTE0IDE2OjEyOjI5LjczNjU0NTQyNCAtMDYwMAorQEAgLTIxLDYgKzIxLDMzIEBACisgQUNfQ19DT05TVAorIEFDX0NfSU5MSU5FCisgCisrQUNfQ0hFQ0tfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8sIG1ha2VpbmZvLCApCisraWYgdGVzdCAieCRNQUtFSU5GTyIgPSAieCI7IHRoZW4KKysJTUFLRUlORk89IkBlY2hvIG1ha2VpbmZvIG1pc3Npbmc7IHRydWUiCisrZmkKKytBQ19DSEVDS19QUk9HKFRFWEkyRFZJLCB0ZXhpMmR2aSwgdGV4aTJkdmksICkKKytpZiB0ZXN0ICJ4JFRFWEkyRFZJIiA9ICJ4IjsgdGhlbgorKwlURVhJMkRWST0iQGVjaG8gdGV4aTJkdmkgbWlzc2luZzsgdHJ1ZSIKKytmaQorK0FDX0NIRUNLX1BST0coVEVYSTJQREYsIHRleGkycGRmLCB0ZXhpMnBkZiwgKQorK2lmIHRlc3QgIngkVEVYSTJQREYiID0gIngiOyB0aGVuCisrCVRFWEkyUERGPSJAZWNobyB0ZXhpMnBkZiBtaXNzaW5nOyB0cnVlIgorK2ZpCisrQUNfQ0hFQ0tfUFJPRyhURVhJMkhUTUwsIHRleGkyaHRtbCwgdGV4aTJodG1sLCApCisraWYgdGVzdCAieCRURVhJMkhUTUwiID0gIngiOyB0aGVuCisrCVRFWEkySFRNTD0iQGVjaG8gdGV4aTJodG1sIG1pc3Npbmc7IHRydWUiCisrZmkgICAgCisrQUNfQ0hFQ0tfUFJPRyhEVkkyUFMsIGR2aTJwcywgZHZpMnBzLCApCisraWYgdGVzdCAieCREVkkyUFMiID0gIngiOyB0aGVuCisrCURWSTJQUz0iQGVjaG8gZHZpMnBzIG1pc3Npbmc7IHRydWUiCisrZmkKKysKKytBQ19TVUJTVChNQUtFSU5GTykKKytBQ19TVUJTVChURVhJMkRWSSkKKytBQ19TVUJTVChURVhJMlBERikKKytBQ19TVUJTVChURVhJMkhUTUwpCisrQUNfU1VCU1QoRFZJMlBTKQorKworIAorIGRubCBDaGVjayBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zCisgZG5sIEVuYWJsZSBPUy8yIGV4dGVuZGVkIGRlbnNpdHkgZm9ybWF0IGRpc2tzCistLS0gbXRvb2xzLTMuOS45L01ha2VmaWxlLmluLnNhdgkyMDA2LTA0LTE0IDE1OjU2OjE5LjAwMDAwMDAwMCAtMDYwMAorKysrIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgkyMDA2LTA0LTE0IDE2OjE1OjI5LjMxNTI0NTMxMiAtMDYwMAorQEAgLTExLDEwICsxMSwxMSBAQAorIFVTRVJMREZMQUdTID0KKyBVU0VSTERMSUJTID0KKyAKKy1NQUtFSU5GTyA9IG1ha2VpbmZvCistVEVYSTJEVkkgPSB0ZXhpMmR2aQorLVRFWEkyUERGID0gdGV4aTJwZGYKKy1URVhJMkhUTUwgPSB0ZXhpMmh0bWwKKytNQUtFSU5GTyA9IEBNQUtFSU5GT0AKKytURVhJMkRWSSA9IEBURVhJMkRWSUAKKytURVhJMlBERiA9IEBURVhJMlBERkAKKytURVhJMkhUTUwgPSBAVEVYSTJIVE1MQAorK0RWSTJQUyA9IEBEVkkyUFNACisgCisgCisgIyBkbyBub3QgZWRpdCBiZWxvdyB0aGlzIGxpbmUKK0BAIC0xODEsNyArMTgyLDcgQEAKKyAKKyBwczogbXRvb2xzLnBzCisgJS5wczogJS5kdmkKKy0JZHZpcHMgLWYgPCAkPCA+ICRACisrCSQoRFZJMlBTKSAtZiA8ICQ8ID4gJEAKKyAKKyBwZGY6IG10b29scy5wZGYKKyAlLnBkZjogJS50ZXhpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9tdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhMzIwOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL210b29scy5wYXRjaApAQCAtMCwwICsxLDEyOSBAQAorJE5ldEJTRDogcGF0Y2gtYWEsdiAxLjEwIDIwMDcvMDgvMTcgMjA6NTU6MzQgam9lcmcgRXhwICQKKworLS0tCisgTWFrZWZpbGUuaW4gfCAgIDc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBtdG9vbHMtMy45LjkvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtdG9vbHMtMy45Ljkub3JpZy9NYWtlZmlsZS5pbgkyMDA3LTEwLTEyIDExOjE4OjQ2LjAwMDAwMDAwMCArMDEwMAorKysrIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgkyMDA3LTEwLTEyIDExOjI4OjE0LjAwMDAwMDAwMCArMDEwMAorQEAgLTE5NSwzMCArMTk1LDIyIEBAIGh0bWw6IG10b29scy5odG1sIG10b29sc190b2MuaHRtbAorIAorICMgRG9uJ3QgY2QsIHRvIGF2b2lkIGJyZWFraW5nIGluc3RhbGwtc2ggcmVmZXJlbmNlcy4KKyBpbnN0YWxsLWluZm86IGluZm8KKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoaW5mb2RpcikKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGluZm9kaXIpCisgCWlmIHRlc3QgLWYgbXRvb2xzLmluZm87IHRoZW4gXAorIAkgIGZvciBpIGluIG10b29scy5pbmZvKjsgZG8gXAorLQkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAkKGluZm9kaXIpLyQkaTsgXAorKwkgICAgJChJTlNUQUxMX0RBVEEpICQkaSAke0RFU1RESVJ9JChpbmZvZGlyKS8kJGk7IFwKKyAJICBkb25lOyBcCisgCWVsc2UgXAorIAkgIGZvciBpIGluICQoc3JjZGlyKS9tdG9vbHMuaW5mbyo7IGRvIFwKKy0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGkgJChpbmZvZGlyKS9gZWNobyAkJGkgfCBzZWQgJ3N8XiQoc3JjZGlyKS98fCdgOyBcCisrCSAgICAkKElOU1RBTExfREFUQSkgJCRpICR7REVTVERJUn0kKGluZm9kaXIpL2BlY2hvICQkaSB8IHNlZCAnc3xeJChzcmNkaXIpL3x8J2A7IFwKKyAJICBkb25lOyBcCisgCWZpOyBcCistCWlmIFsgLW4gIiQoSU5TVEFMTF9JTkZPKSIgXSA7IHRoZW4gXAorLQkJaWYgWyAtZiAkKGluZm9kaXIpL2Rpci5pbmZvIF0gOyB0aGVuIFwKKy0JCQkkKElOU1RBTExfSU5GTykgJChpbmZvZGlyKS9tdG9vbHMuaW5mbyAkKGluZm9kaXIpL2Rpci5pbmZvOyBcCistCQlmaTsgXAorLQkJaWYgWyAtZiAkKGluZm9kaXIpL2RpciBdIDsgdGhlbiBcCistCQkJJChJTlNUQUxMX0lORk8pICQoaW5mb2RpcikvbXRvb2xzLmluZm8gJChpbmZvZGlyKS9kaXI7IFwKKy0JCWZpOyBcCistCWZpCisgCisgdW5pbnN0YWxsLWluZm86CisgCWNkICQoaW5mb2RpcikgJiYgcm0gLWYgbXRvb2xzLmluZm8qCisgCistaW5zdGFsbDoJJChiaW5kaXIpL210b29scyBAQklORkxPUFBZREAgaW5zdGFsbC1tYW4gaW5zdGFsbC1saW5rcyBcCistCQkkKGJpbmRpcikvbWttYW5pZmVzdCBpbnN0YWxsLXNjcmlwdHMgaW5zdGFsbC1pbmZvCisraW5zdGFsbDoJJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMgJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkIGluc3RhbGwtbWFuIGluc3RhbGwtbGlua3MgXAorKwkJJHtERVNURElSfSQoYmluZGlyKS9ta21hbmlmZXN0IGluc3RhbGwtc2NyaXB0cyBpbnN0YWxsLWluZm8KKyAKKyB1bmluc3RhbGw6CXVuaW5zdGFsbC1iaW4gdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbGlua3MgXAorIAkJdW5pbnN0YWxsLXNjcmlwdHMKK0BAIC0yMjgsNTIgKzIyMCw1MiBAQCBkaXN0Y2xlYW46IGNsZWFuIHRleGNsZWFuCisgbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCisgCisgCistJChiaW5kaXIpL2Zsb3BweWQ6IGZsb3BweWQKKy0JJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorLQkkKElOU1RBTExfUFJPR1JBTSkgZmxvcHB5ZCAkKGJpbmRpcikvZmxvcHB5ZAorKyR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZDogZmxvcHB5ZAorKwkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoYmluZGlyKQorKwkkKElOU1RBTExfUFJPR1JBTSkgZmxvcHB5ZCAke0RFU1RESVJ9JChiaW5kaXIpL2Zsb3BweWQKKyAKKy0kKGJpbmRpcikvZmxvcHB5ZF9pbnN0YWxsdGVzdDogZmxvcHB5ZF9pbnN0YWxsdGVzdAorLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkX2luc3RhbGx0ZXN0ICQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0CisrJHtERVNURElSfSQoYmluZGlyKS9mbG9wcHlkX2luc3RhbGx0ZXN0OiBmbG9wcHlkX2luc3RhbGx0ZXN0CisrCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisrCSQoSU5TVEFMTF9QUk9HUkFNKSBmbG9wcHlkX2luc3RhbGx0ZXN0ICR7REVTVERJUn0kKGJpbmRpcikvZmxvcHB5ZF9pbnN0YWxsdGVzdAorIAorLSQoYmluZGlyKS9tdG9vbHM6IG10b29scworLQkkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpCistCSQoSU5TVEFMTF9QUk9HUkFNKSBtdG9vbHMgJChiaW5kaXIpL210b29scworKyR7REVTVERJUn0kKGJpbmRpcikvbXRvb2xzOiBtdG9vbHMKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIG10b29scyAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworIAorLSQoYmluZGlyKS9ta21hbmlmZXN0OiBta21hbmlmZXN0CistCSQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKGJpbmRpcikKKy0JJChJTlNUQUxMX1BST0dSQU0pIG1rbWFuaWZlc3QgJChiaW5kaXIpL21rbWFuaWZlc3QKKyske0RFU1RESVJ9JChiaW5kaXIpL21rbWFuaWZlc3Q6IG1rbWFuaWZlc3QKKysJJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKGJpbmRpcikKKysJJChJTlNUQUxMX1BST0dSQU0pIG1rbWFuaWZlc3QgJHtERVNURElSfSQoYmluZGlyKS9ta21hbmlmZXN0CisgCisgIyQoRVRDRElSKS9tdG9vbHM6IG10b29scy5ldGMKKyAjCWNwIG10b29scy5ldGMgJChFVENESVIpL210b29scworIAorLWluc3RhbGwtbGlua3M6ICQoYmluZGlyKS9tdG9vbHMKKytpbnN0YWxsLWxpbmtzOiAke0RFU1RESVJ9JChiaW5kaXIpL210b29scworIAlAZm9yIGogaW4gJChMSU5LUyk7IGRvIFwKKy0JCXJtIC1mICQoYmluZGlyKS8kJGogOyBcCistCQkkKExOX1MpIG10b29scyAkKGJpbmRpcikvJCRqIDsgXAorLQkJZWNobyAkKGJpbmRpcikvJCRqIDsgXAorKwkJcm0gLWYgJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisrCQkkKExOX1MpIG10b29scyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoYmluZGlyKS8kJGogOyBcCisgCWRvbmUKKyAKKyAjIyAieiIgaXMgdGhlIG9sZGVyIHZlcnNpb24gb2YgImd6IjsgdGhlIG5hbWUgaXMganVzdCAqdG9vKiBzaG9ydAorLWluc3RhbGwtc2NyaXB0czogJChiaW5kaXIpL210b29scworLQlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoYmluZGlyKQorK2luc3RhbGwtc2NyaXB0czogJHtERVNURElSfSQoYmluZGlyKS9tdG9vbHMKKysJQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAke0RFU1RESVJ9JChiaW5kaXIpCisgCUBmb3IgaiBpbiAkKFNDUklQVFMpIDsgZG8gXAorLQkJJChJTlNUQUxMX1BST0dSQU0pICQoc3JjZGlyKS9zY3JpcHRzLyQkaiAkKGJpbmRpcikvJCRqIDsgXAorLQkJZWNobyAkKGJpbmRpcikvJCRqIDsgXAorKwkJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL3NjcmlwdHMvJCRqICR7REVTVERJUn0kKGJpbmRpcikvJCRqIDsgXAorKwkJZWNobyAke0RFU1RESVJ9JChiaW5kaXIpLyQkaiA7IFwKKyAJZG9uZQorLQlybSAtZiAkKGJpbmRpcikvbHoKKy0JJChMTl9TKSB1eiAkKGJpbmRpcikvbHoKKysJcm0gLWYgJHtERVNURElSfSQoYmluZGlyKS9segorKwkkKExOX1MpIHV6ICR7REVTVERJUn0kKGJpbmRpcikvbHoKKyAKKyBpbnN0YWxsLW1hbjoKKy0JQCQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKE1BTjFESVIpCisrCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJHtERVNURElSfSQoTUFOMURJUikKKyAJQGZvciBqIGluICQoTUFOMSk7IGRvIFwKKy0JCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICQoTUFOMURJUikvJCRqIDsgXAorLQkJZWNobyAkKE1BTjFESVIpLyQkaiA7IFwKKysJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRqICR7REVTVERJUn0kKE1BTjFESVIpLyQkaiA7IFwKKysJCWVjaG8gJHtERVNURElSfSQoTUFOMURJUikvJCRqIDsgXAorIAlkb25lCistCUAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMgJChNQU41RElSKQorKwlAJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICR7REVTVERJUn0kKE1BTjVESVIpCisgCUBmb3IgaiBpbiAkKE1BTjUpOyBkbyBcCistCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaiAkKE1BTjVESVIpLyQkaiA7IFwKKy0JCWVjaG8gJChNQU41RElSKS8kJGogOyBcCisrCQkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaiAke0RFU1RESVJ9JChNQU41RElSKS8kJGogOyBcCisrCQllY2hvICR7REVTVERJUn0kKE1BTjVESVIpLyQkaiA7IFwKKyAJZG9uZQorIAorIHVuaW5zdGFsbC1iaW46CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEuZ3BsdjMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEuZ3BsdjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNiM2UzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5ncGx2My5wYXRjaApAQCAtMCwwICsxLDE4IEBACitEaXNhYmxlIGJ1aWxkaW5nIHdpdGggWDExIHN1cHBvcnQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIG10b29scy00LjAuMTUub3JpZy8vTWFrZWZpbGUuaW4gbXRvb2xzLTQuMC4xNS8vTWFrZWZpbGUuaW4KKy0tLSBtdG9vbHMtNC4wLjE1Lm9yaWcvL01ha2VmaWxlLmluCTIwMTAtMTAtMTcgMDg6NDE6MDkuMDAwMDAwMDAwIC0wNzAwCisrKysgbXRvb2xzLTQuMC4xNS8vTWFrZWZpbGUuaW4JMjAxMC0xMS0yMyAxMzo1OTo0OS4yNTgyNTgzNzQgLTA4MDAKK0BAIC0xNDYsNyArMTQ2LDcgQEAKKyBDWFhGTEFHUyAgPSAkKENQUEZMQUdTKSAkKERFRlMpICQoTVlDWFhGTEFHUykgLUkuIEBleHRyYWluY2x1ZGVkaXJAIC1JQHNyY2RpckAgJChVU0VSQ0ZMQUdTKQorIExJTksgICAgICA9ICQoQ0MpICQoTERGTEFHUykgJChVU0VSTERGTEFHUykgQGV4dHJhbGliZGlyQAorIEFMTExJQlMgICA9ICQoVVNFUkxETElCUykgJChNQUNIREVQTElCUykgJChTSExJQikgJChMSUJTKQorLVhfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgLWxYYXUgLWxYMTEgJChMSUJTKQorK1hfTERGTEFHUyA9ICQoWF9FWFRSQV9MSUJTKSAkKFhfTElCUykgJChMSUJTKQorIFhfQ0NGTEFHUyA9ICQoWF9DRkxBR1MpICQoQ0ZMQUdTKQorIAorIGFsbDogICAgbXRvb2xzICQoTElOS1MpIG1rbWFuaWZlc3QgQEZMT1BQWURAIG10b29scy4xIG10b29scy41CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29scy9uby14MTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1YjYyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzL25vLXgxMS5wYXRjaApAQCAtMCwwICsxLDIxIEBACistLS0KKyBNYWtlZmlsZS5pbiB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKy0tLSBtdG9vbHMtMy45Ljkub3JpZy9NYWtlZmlsZS5pbgorKysrIG10b29scy0zLjkuOS9NYWtlZmlsZS5pbgorQEAgLTEyOCwxMSArMTI4LDExIEBAIFhfRVhUUkFfTElCUyA9IEBYX0VYVFJBX0xJQlNACisgWF9QUkVfTElCUyA9IEBYX1BSRV9MSUJTQAorIENGTEFHUyA9ICQoQ1BQRkxBR1MpICQoREVGUykgJChNWUNGTEFHUykgLUkuIEBleHRyYWluY2x1ZGVkaXJAIC1JQHNyY2RpckAgJChVU0VSQ0ZMQUdTKSAKKyBDWFhGTEFHUyAgPSAkKENQUEZMQUdTKSAkKERFRlMpICQoTVlDWFhGTEFHUykgLUkuIEBleHRyYWluY2x1ZGVkaXJAIC1JQHNyY2RpckAgJChVU0VSQ0ZMQUdTKSAKKyBMSU5LICAgICAgPSAkKENDKSAkKExERkxBR1MpICQoVVNFUkxERkxBR1MpIEBleHRyYWxpYmRpckAKKyBBTExMSUJTICAgPSAkKFVTRVJMRExJQlMpICQoTUFDSERFUExJQlMpICQoU0hMSUIpICQoTElCUykKKy1YX0xERkxBR1MgPSAkKFhfRVhUUkFfTElCUykgJChYX0xJQlMpICQoWF9QUkVfTElCUykgLWxYYXUgLWxYMTEgJChMSUJTKSAKKytYX0xERkxBR1MgPSAkKFhfRVhUUkFfTElCUykgJChYX0xJQlMpICQoWF9QUkVfTElCUykgJChMSUJTKQorIFhfQ0NGTEFHUyA9ICQoWF9DRkxBR1MpICQoQ0ZMQUdTKQorIAorIGFsbDogICAgbXRvb2xzICQoTElOS1MpIG1rbWFuaWZlc3QgQEZMT1BQWURACisgCisgJS5vOiAlLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL210b29scy9tdG9vbHNfMy45LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI4NGE3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzMuOS45LmJiCkBAIC0wLDAgKzEsNTYgQEAKKyMgbXRvb2xzIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYsIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgcGFja2FnZXMvQ09QWUlORykKKworU1VNTUFSWSA9ICJVdGlsaXRpZXMgdG8gYWNjZXNzIE1TLURPUyBkaXNrcyB3aXRob3V0IG1vdW50aW5nIHRoZW0iCitERVNDUklQVElPTiA9ICJNdG9vbHMgaXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdGllcyBmb3IgYWNjZXNzaW5nIE1TLURPUyBkaXNrcyBmcm9tIFVuaXggd2l0aG91dCBtb3VudGluZyB0aGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tdG9vbHMvIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05MmI1OGVjNzc2OTY3ODhjZTI3OGIwNDRkMmE4ZTlkMyIKK1BSID0gInI2IgorCitSREVQRU5EU18ke1BOfSA9ICJnbGliYy1nY29udi1pYm04NTAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisJZ2xpYmMtZ2NvbnYtaWJtNDM3IFwKKwlnbGliYy1nY29udi1pYm03MzcgXAorCWdsaWJjLWdjb252LWlibTc3NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODUxIFwKKwlnbGliYy1nY29udi1pYm04NTIgXAorCWdsaWJjLWdjb252LWlibTg1NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODU3IFwKKwlnbGliYy1nY29udi1pYm04NjAgXAorCWdsaWJjLWdjb252LWlibTg2MSBcCisJZ2xpYmMtZ2NvbnYtaWJtODYyIFwKKwlnbGliYy1nY29udi1pYm04NjMgXAorCWdsaWJjLWdjb252LWlibTg2NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODY2IFwKKwlnbGliYy1nY29udi1pYm04NjkgXAorCSIKKworI2h0dHA6Ly9tdG9vbHMubGludXgubHUvbXRvb2xzLSR7UFZ9LnRhci5neiAKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL21pcnJvci9zb3VyY2VzL210b29scy0ke1BWfS50YXIuZ3ogXAorCWZpbGU6Ly9tdG9vbHMtbWFrZWluZm8ucGF0Y2ggXAorCWZpbGU6Ly9tdG9vbHMucGF0Y2ggXAorCWZpbGU6Ly9uby14MTEucGF0Y2ggXAorCWZpbGU6Ly9maXgtYnJva2VuLWx6LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjNlNjhiODU3YjRlMWYzYTY1MjFkMWRmZWZiZDMwYTM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmMDgzYTczNDI1ZDY2NGQ0NjA3ZWY2YzY1NjRmZDkzMTlhMGU0N2VlN2MxMDUyNTlhNDUzNTZjYjgzNDY5MGUiCisKK1MgPSAiJHtXT1JLRElSfS9tdG9vbHMtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2xpYmJzZF0gPSAiYWNfY3ZfbGliX2JzZF9tYWluPXllcyxhY19jdl9saWJfYnNkX21haW49bm8sbGliYnNkIgorCitkb19pbnN0YWxsX3ByZXBlbmQgKCkgeworICAgICMgQ3JlYXRlIGJpbmRpciB0byBmaXggcGFyYWxsZWwgaW5zdGFsbGF0aW9uIGlzc3VlcworICAgIG1rZGlyIC1wICR7RH0vJHtiaW5kaXJ9CisgICAgbWtkaXIgLXAgJHtEfS8ke2RhdGFkaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvbXRvb2xzL210b29sc180LjAuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkZWNmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9tdG9vbHMvbXRvb2xzXzQuMC4xOC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyB0byBhY2Nlc3MgTVMtRE9TIGRpc2tzIHdpdGhvdXQgbW91bnRpbmcgdGhlbSIKK0RFU0NSSVBUSU9OID0gIk10b29scyBpcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0aWVzIHRvIGFjY2VzcyBNUy1ET1MgZGlza3MgZnJvbSBHTlUgYW5kIFVuaXggd2l0aG91dCBtb3VudGluZyB0aGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9tdG9vbHMvIgorU0VDVElPTiA9ICJvcHRpb25hbCIKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworCitSREVQRU5EU18ke1BOfSA9ICJnbGliYy1nY29udi1pYm04NTAiCitSUkVDT01NRU5EU18ke1BOfSA9ICJcCisJZ2xpYmMtZ2NvbnYtaWJtNDM3IFwKKwlnbGliYy1nY29udi1pYm03MzcgXAorCWdsaWJjLWdjb252LWlibTc3NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODUxIFwKKwlnbGliYy1nY29udi1pYm04NTIgXAorCWdsaWJjLWdjb252LWlibTg1NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODU3IFwKKwlnbGliYy1nY29udi1pYm04NjAgXAorCWdsaWJjLWdjb252LWlibTg2MSBcCisJZ2xpYmMtZ2NvbnYtaWJtODYyIFwKKwlnbGliYy1nY29udi1pYm04NjMgXAorCWdsaWJjLWdjb252LWlibTg2NSBcCisJZ2xpYmMtZ2NvbnYtaWJtODY2IFwKKwlnbGliYy1nY29udi1pYm04NjkgXAorCSIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMjM2NDY2MTc1NDZiZjZhZDU2ZjA2MWQ4YjI4M2M4NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1OWU5Y2Y4MDg4NTM5OWM0ZjIyOWU1ZDg3ZTQ5YzBjMmJmZWVjMDQ0ZTEzODZkNTlmY2QwYjBhZWFkNmIyZjg1IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbXRvb2xzL210b29scy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL210b29scy1tYWtlaW5mby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9uby14MTEuZ3BsdjMucGF0Y2giCisKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGliYnNkXSA9ICJhY19jdl9saWJfYnNkX21haW49eWVzLGFjX2N2X2xpYl9ic2RfbWFpbj1ubyxsaWJic2QiCisKK2RvX2luc3RhbGxfcHJlcGVuZCAoKSB7CisgICAgIyBDcmVhdGUgYmluZGlyIHRvIGZpeCBwYXJhbGxlbCBpbnN0YWxsYXRpb24gaXNzdWVzCisgICAgbWtkaXIgLXAgJHtEfS8ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9LyR7ZGF0YWRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9uYXNtL25hc21fMi4xMS4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDcyNGU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL25hc20vbmFzbV8yLjExLjA4LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiR2VuZXJhbC1wdXJwb3NlIHg4NiBhc3NlbWJsZXIiCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT05MDkwNDQ4NmY4ZmJmMTg2MWNmNDI3NTJlMWEzOWVmZSIKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODYpLiotKGxpbnV4fGZyZWVic2QuKiknCisKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm5hc20udXMvcHViL25hc20vcmVsZWFzZWJ1aWxkcy8ke1BWfS9uYXNtLSR7UFZ9LnRhci5iejIgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2FhZTVjYjhlMDNmYWM0ODAyOWM4MmE3NDcwYWIwNjYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRhM2EwMjkxYTBiZGMwNjMwNWI3YmExOTRmMWUyYzJiNTVhZTZmMTEyMTBiNGFmNDM3Mjk4NjgxNDlkNTQ0NSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbIC1mICR7U30vYWNsb2NhbC5tNCBdICYmIFsgISAtZiAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCW12ICR7U30vYWNsb2NhbC5tNCAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjEKKworCW9lX3J1bm1ha2UgJ0lOU1RBTExST09UPSR7RH0nIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0RFUEVORFMgPSAiZ3JvZmYtbmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL2ZpeC1yZWdleC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9maXgtcmVnZXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MGFmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9maXgtcmVnZXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA1NWY2ZmQ4ZjE5NThhYTM2NTg0ZWVmZWVjY2U3ODJhNTA1OTYzYzg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogYmVudm0gPGJlbnZtQHlvdy1nbW9mZmF0dC1seDIud3JzLmNvbT4KK0RhdGU6IFdlZCwgOSBKYW4gMjAxMyAxMjoxNDowNiAtMDUwMAorU3ViamVjdDogW1BBVENIXSBGaXggTWFrZWZpbGUgcmVndWxhciBleHByZXNzaW9uCisKK1RoaXMgcGF0Y2ggbW9kaWZpZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gd2l0aGluIGEgTWFrZWZpbGUgdG8gc3RvcCBidWlsZHMKK2Zyb20gZmFpbGluZyBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgcGF0aCBjb250YWlucyB0aGUgY2hhcmFjdGVycyAiLmEiLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgTWFrZWZpbGUucHJvZy5pbiB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLnByb2cuaW4gYi9NYWtlZmlsZS5wcm9nLmluCitpbmRleCA3NjMxMGM5Li40NGMzNTM0IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUucHJvZy5pbgorKysrIGIvTWFrZWZpbGUucHJvZy5pbgorQEAgLTEyLDcgKzEyLDcgQEAgTElOS0ZMQUdTID0gQExJTktGTEFHU0AKKyAKKyBBTExfTElCUyA9ICQoWExJQlMpICQoTElCUykKKyBNYWtlZmlsZS5sdDoKKy0JZWNobyAnTFRfTElCUz0nYGVjaG8gJChBTExfTElCUyl8c2VkICdzL1wuYS8ubGEvZydgID5NYWtlZmlsZS5sdAorKwllY2hvICdMVF9MSUJTPSdgZWNobyAkKEFMTF9MSUJTKSB8IHNlZCAncy9cLmFccy9cLmxhIC9nJyB8IHNlZCBzL1wuYSQkL1wubGEvYCA+IE1ha2VmaWxlLmx0CisgCisgUFJPRzo9JChzaGVsbCBlY2hvICIkKFBST0cpIiB8IHNlZCAnQHByb2dyYW1fdHJhbnNmb3JtX25hbWVAJykKKyAKKy0tIAorMS43LjAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4YjliNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitUaGlzIHBhdGNoIGZpeGVzIGxpYnRvb2wgUUEgaXNzdWVzIHdpdGggV09SS0RJUiBjcmVlcGluZyBpbiB0bworbGlib3NwZ3JvdmUubGEgYW5kIGxpYm9zdHlsZS5sYS4gUGF0Y2ggb2J0YWluZWQgZnJvbSBPcGVuRW1iZWRkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT3RoZXJdCitXb3JrYXJvdW5kIGlzIHNwZWNpZmljIHRvIG91ciBidWlsZCBzeXN0ZW0uCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitJbmRleDogb3BlbmphZGUtMS4zLjIvc3Bncm92ZS9NYWtlZmlsZS5zdWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuamFkZS0xLjMuMi5vcmlnL3NwZ3JvdmUvTWFrZWZpbGUuc3ViCisrKysgb3BlbmphZGUtMS4zLjIvc3Bncm92ZS9NYWtlZmlsZS5zdWIKK0BAIC0xLDggKzEsOCBAQAorIExUVkVSU0lPTj0wOjE6MAorIExJQj1vc3Bncm92ZQorIElOQ0xVREU9LUkkKHNyY2RpcikvLi4vZ3JvdmUKKy1ERVBMSUJTPS1sbSAtTCQoVE9QKS9ncm92ZSAtTCQoVE9QKS9ncm92ZS8ubGlicyBcCistCS1MJChUT1ApL2xpYiAtTCQoVE9QKS9saWIvLmxpYnMgXAorK0RFUExJQlM9LWxtICQoVE9QKS9ncm92ZSBcCisrCSQoVE9QKS9saWIgXAorIAkkKExJQl9USFJFQURTKQorIE9CSlM9R3JvdmVBcHAubyBHcm92ZUJ1aWxkZXIubyBTZE5vZGUubworIEdFTlNSQ1M9Z3JvdmVfaW5zdC5jeHgKK0luZGV4OiBvcGVuamFkZS0xLjMuMi9zdHlsZS9NYWtlZmlsZS5zdWIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuamFkZS0xLjMuMi5vcmlnL3N0eWxlL01ha2VmaWxlLnN1YgorKysrIG9wZW5qYWRlLTEuMy4yL3N0eWxlL01ha2VmaWxlLnN1YgorQEAgLTEsOCArMSw4IEBACisgTFRWRVJTSU9OPTA6MTowCisgTElCPW9zdHlsZQorLURFUExJQlM9LWxtIC1MJChUT1ApL2dyb3ZlIC1MJChUT1ApL2dyb3ZlLy5saWJzIFwKKy0gIC1MJChUT1ApL2xpYiAtTCQoVE9QKS9saWIvLmxpYnMgXAorLSAgLUwkKFRPUCkvc3Bncm92ZSAtTCQoVE9QKS9zcGdyb3ZlLy5saWJzIAorK0RFUExJQlM9LWxtICQoVE9QKS9ncm92ZSBcCisrICAkKFRPUCkvbGliICBcCisrICAkKFRPUCkvc3Bncm92ZQorIE9CSlM9TGFuZ09iai5vIFwKKyAgIENvbGxlY3Rvci5vIFwKKyAgIERzc3NsQXBwLm8gXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL21zZ2dlbi5wbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tc2dnZW4ucGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZmQ0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9tc2dnZW4ucGwucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorY29tbWl0IGZjYzViOTRmMTE4NDk1YjFhNDY3ZWRjZGE2YzZmNjMxNjkxYzNmNjkKK0F1dGhvcjogRGVubmlzIExhbiA8ZGVubmlzLnl4dW5AZ21haWwuY29tPgorRGF0ZTogICBUdWUgSnVsIDMgMDk6MjU6NDIgMjAxMiArMDgwMAorCisgICAgb3BlbmphZGU6IGZpeCB1bmRlZmluZWQgR2V0b3B0cyBlcnJvciwgdXNlIHN0ZCBuYW1lc3BhY2UKKyAgICAKKyAgICBVc2luZyBHZW50b28gTGludXggYXMgdGhlIGJ1aWxkIGhvc3QsIGl0IGZhaWxzIHdpdGhvdXQgdGhpcyBwYXRjaAorICAgIFVzZSBHZXRvcHQ6OlN0ZCBpbiBwbGFjZSBvZiBnZXRvcHRzLnBsLgorICAgIAorICAgIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm8gdXBzdHJlYW1dCisgICAgT3JpZ2luYWwtQXV0aG9yLUJ5OiBNaWtlIEdpbGJlcnQgPGZsb3BweW1AZ2VudG9vLm9yZz4KKyAgICBTaWduZWQtb2ZmLWJ5OiBEZW5uaXMgTGFuIDxkZW5uaXMueXh1bkBnbWFpbC5jb20+CisKK2RpZmYgLS1naXQgYS9tc2dnZW4ucGwgYi9tc2dnZW4ucGwKK2luZGV4IDBjMzM5NjguLjJlZTNmNjYgMTAwNjQ0CistLS0gYS9tc2dnZW4ucGwKKysrKyBiL21zZ2dlbi5wbAorQEAgLTQsNiArNCw3IEBACisgIyBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgorIAorIHVzZSBQT1NJWDsKKyt1c2UgR2V0b3B0OjpTdGQ7CisgCisgIyBQYWNrYWdlIGFuZCB2ZXJzaW9uLgorICRwYWNrYWdlID0gJ29wZW5qYWRlJzsKK0BAIC0xOCw4ICsxOSw3IEBAICRnZW5fYyA9IDA7CisgdW5kZWYgJG9wdF9sOworIHVuZGVmICRvcHRfcDsKKyB1bmRlZiAkb3B0X3Q7CistZG8gJ2dldG9wdHMucGwnOworLSZHZXRvcHRzKCdsOnA6dDonKTsKKytnZXRvcHRzKCdsOnA6dDonKTsKKyAkbW9kdWxlID0gJG9wdF9sOworICRwb3RfZmlsZSA9ICRvcHRfcDsKKyAKK0BAIC03Miw3ICs3Miw3IEBAIHdoaWxlICg8REVGPikgeworICAgICBlbHNlIHsKKyAJJGZpZWxkWzBdID1+IC9eW0lXUVhFXVswLTldJC8gfHwgJmVycm9yKCJpbnZhbGlkIGZpcnN0IGZpZWxkIik7OworIAkkdHlwZVskbnVtXSA9IHN1YnN0cigkZmllbGRbMF0sIDAsIDEpOworLQkkYXJnYyA9IGludChzdWJzdHIoJGZpZWxkWzBdLCAxLCAxKSk7CisrCSRhcmdjID0gc3Vic3RyKCRmaWVsZFswXSwgMSwgMSk7CisgICAgIH0KKyAgICAgJG5hcmdzWyRudW1dID0gJGFyZ2M7CisgICAgICRmaWVsZFsxXSA9fiAvXlthLXpBLVpfXVthLXpBLVowLTlfXSskLyB8fCAmZXJyb3IoImludmFsaWQgdGFnIik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvcmVhdXRvY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS0xLjMuMi9yZWF1dG9jb25mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMjNhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvcmVhdXRvY29uZi5wYXRjaApAQCAtMCwwICsxLDgzIEBACitFbnN1cmUgd2UgcmVhdXRvY29uZiB0aGUgcGFja2FnCisKK0N1cnJlbnRseSBzaW5jZSBjb25maWd1cmUuaW4gaW4gaXMgaW4gYSBzdWJkaXJlY3RvcnksIHdlIGRvbid0IHJlYXV0b2NvbmYgdGhlIAorcmVjaXBlLiBXZSByZWFsbHkgbmVlZCB0byBkbyB0aGlzLCB0byB1cGRhdGUgdGhpbmdzIGxpa2UgdGhlIGxpYnRvb2wgc2NyaXB0IHVzZWQKK2FuZCBmaXggdmFyaW91cyBpc3N1ZXMgc3VjaCBhcyB0aG9zZSB0aGF0IGNvdWxkIGNyZWVwIGluIGlmIGEgcmVhdXRvY29uZiBpcyAKK3RyaWdnZXJlZCBmb3Igc29tZSByZWFzb24uIFNpbmNlIHRoaXMgc291cmNlIG9ubHkgY2FsbHMgQU1fSU5JVF9BVVRPTUFLRSB0byAKK2dhaW4gdGhlIFBBQ0tBR0UgYW5kIFZFUlNJT04gZGVmaW5pdGlvbnMgYW5kIHRoYXQgbWFjcm8gbm93IGVycm9ycyBpZiBNYWtlZmlsZS5hbSAKK2RvZXNuJ3QgZXhpc3QsIHdlIG5lZWQgdG8gYWRkIHRoZXNlIGRlZmluaXRpb25zIG1hbnVhbGx5LiAKKworVGhlc2UgY2hhbmdlcyBhdm9pZCBmYWlsdXJlcyBsaWtlOiAKKy0tLS0gCit8IC4uLiAKK3wgRHNzc2xBcHAuY3h4OjExNzozNjogZXJyb3I6ICdQQUNLQUdFJyB3YXMgbm90IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUgCit8IERzc3NsQXBwLmN4eDoxMTg6MzY6IGVycm9yOiAnVkVSU0lPTicgd2FzIG5vdCBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlIAorfCBtYWtlWzJdOiAqKiogW0Rzc3NsQXBwLmxvXSBFcnJvciAxIC0tLS0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTIvNi8xMgorCitJbmRleDogb3BlbmphZGUtMS4zLjIvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgb3BlbmphZGUtMS4zLjIvYWNpbmNsdWRlLm00CTIwMTItMDYtMTIgMTI6NDg6NTQuODcxMzY1MzQ0ICswMDAwCitAQCAtMCwwICsxLDM5IEBACisrZG5sIENvbmZpZ3VyZS10aW1lIHN3aXRjaCB3aXRoIGRlZmF1bHQKKytkbmwKKytkbmwgRWFjaCBzd2l0Y2ggZGVmaW5lcyBhbiAtLWVuYWJsZS1GT08gYW5kIC0tZGlzYWJsZS1GT08gb3B0aW9uIGluCisrZG5sIHRoZSByZXN1bHRpbmcgY29uZmlndXJlIHNjcmlwdC4KKytkbmwKKytkbmwgVXNhZ2U6CisrZG5sIHNtcl9TV0lUQ0gobmFtZSwgZGVzY3JpcHRpb24sIGRlZmF1bHQsIHBvcy1kZWYsIG5lZy1kZWYpCisrZG5sCisrZG5sIHdoZXJlOgorK2RubAorK2RubCBuYW1lICAgICAgICBuYW1lIG9mIHN3aXRjaDsgZ2VuZXJhdGVzIC0tZW5hYmxlLW5hbWUgJiAtLWRpc2FibGUtbmFtZQorK2RubCAgICAgICAgICAgICBvcHRpb25zCisrZG5sIGRlc2NyaXB0aW9uIGhlbHAgc3RyaW5nIGlzIHNldCB0byB0aGlzIHByZWZpeGVkIGJ5ICJlbmFibGUiIG9yCisrZG5sICAgICAgICAgICAgICJkaXNhYmxlIiwgd2hpY2hldmVyIGlzIHRoZSBub24tZGVmYXVsdCB2YWx1ZQorK2RubCBkZWZhdWx0ICAgICBlaXRoZXIgIm9uIiBvciAib2ZmIjsgc3BlY2lmaWVzIGRlZmF1bHQgaWYgbmVpdGhlcgorK2RubCAgICAgICAgICAgICAtLWVuYWJsZS1uYW1lIG5vciAtLWRpc2FibGUtbmFtZSBpcyBzcGVjaWZpZWQKKytkbmwgcG9zLWRlZiAgICAgYSBzeW1ib2wgdG8gQUNfREVGSU5FIGlmIHN3aXRjaCBpcyBvbiAob3B0aW9uYWwpCisrZG5sIG5lZy1kZWYgICAgIGEgc3ltYm9sIHRvIEFDX0RFRklORSBpZiBzd2l0Y2ggaXMgb2ZmIChvcHRpb25hbCkKKytkbmwKKytBQ19ERUZVTihzbXJfU1dJVENILCBbCisrICAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGVuYWJsZSAkMikKKysgICAgQUNfQVJHX0VOQUJMRSgKKysgICAgICAgICQxLAorKyAgICAgICAgaWZlbHNlKCQzLCBvbiwKKysgICAgICAgICAgICBbICAtLWRpc2FibGUtWyQxXSAgICBkaXNhYmxlIFskMl1dLAorKyAgICAgICAgICAgIFsgIC0tZW5hYmxlLVskMV0gICAgIGVuYWJsZSBbJDJdXSksCisrICAgICAgICBbIGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzOyB0aGVuCisrICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICAgICAgaWZlbHNlKCQ0LCAsICwgQUNfREVGSU5FKCQ0KSkKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQorKyAgICAgICAgICAgIGlmZWxzZSgkNSwgLCAsIEFDX0RFRklORSgkNSkpCisrICAgICAgICBmaSBdLAorKyAgICAgICAgaWZlbHNlKCQzLCBvbiwKKysgICAgICAgICAgIFsgQUNfTVNHX1JFU1VMVCh5ZXMpCisrICAgICAgICAgICAgIGlmZWxzZSgkNCwgLCAsIEFDX0RFRklORSgkNCkpIF0sCisrICAgICAgICAgICBbIEFDX01TR19SRVNVTFQobm8pCisrICAgICAgICAgICAgaWZlbHNlKCQ1LCAsICwgQUNfREVGSU5FKCQ1KSldKSldKQorKworSW5kZXg6IG9wZW5qYWRlLTEuMy4yL2NvbmZpZy9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcGVuamFkZS0xLjMuMi5vcmlnL2NvbmZpZy9jb25maWd1cmUuaW4JMjAxMi0wNi0xMiAxMjo0NzoyMC43MzUzNjU0NDUgKzAwMDAKKysrKyBvcGVuamFkZS0xLjMuMi9jb25maWcvY29uZmlndXJlLmluCTIwMTItMDYtMTIgMTI6NDg6MTcuNTA3MzY0MDgwICswMDAwCitAQCAtMTIsOSArMTIsMTIgQEAKKyBkbmwgIENyZWRpdHM6IHRoaXMgYXV0b2NvbmYgc2NyaXB0IHdhcyBsYXJnZWx5ICJpbnNwaXJlZCIgPGc+IGJ5IHRoZQorIGRubCAgYXV0b2NvbmYgc2NyaXB0IGFyb3VuZCBTUCBtYWRlIGJ5IEhlbnJ5IFRob21wc29uLgorIGRubAorLUFDX0lOSVQoZHNzc2wpCisrQUNfSU5JVChbb3BlbmphZGVdLCBbMS4zLjJdKQorIEFDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKKy1BTV9JTklUX0FVVE9NQUtFKCBvcGVuamFkZSwgMS4zLjIpCisrQUNfU1VCU1QoW1BBQ0tBR0VdLCBbb3BlbmphZGVdKQorK0FDX1NVQlNUKFtWRVJTSU9OXSwgWzEuMy4yXSkKKytBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIikKKytBQ19ERUZJTkVfVU5RVU9URUQoVkVSU0lPTiwgIiRWRVJTSU9OIikKKyBUT1A9YHB3ZGAKKyBBQ19TVUJTVChUT1ApCisgZG5sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtMS4zLjIvdXNlci1kZWNsYXJlZC1kZWZhdWx0LWNvbnN0cnVjdG9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNhZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wZW5qYWRlL29wZW5qYWRlLTEuMy4yL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaApAQCAtMCwwICsxLDkyIEBACitJbiBHQ0MgNC42IHRoZSBjb21waWxlciBubyBsb25nZXIgYWxsb3dzIG9iamVjdHMgb2YgY29uc3QtcXVhbGlmaWVkIHR5cGUgdG8KK2JlIGRlZmF1bHQgaW5pdGlhbGl6ZWQgdW5sZXNzIHRoZSB0eXBlIGhhcyBhIHVzZXItZGVjbGFyZWQgZGVmYXVsdAorY29uc3RydWN0b3IuCisKK1BhdGNoIGZyb20gR2VudG9vIGJ1Z3ppbGxhOiBodHRwOi8vYnVncy5nZW50b28ub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTgwMjEKKworR2VudG9vIEJ1Z3ppbGxhIGRlc2NyaXB0aW9uIGZvbGxvd3M6CisiSWYgYSBjbGFzcyBvciBzdHJ1Y3QgaGFzIG5vIHVzZXItZGVmaW5lZCBkZWZhdWx0IGNvbnN0cnVjdG9yLCBDKysgZG9lc24ndAorYWxsb3cgeW91IHRvIGRlZmF1bHQgY29uc3RydWN0IGEgY29uc3QgaW5zdGFuY2Ugb2YgaXQuCisKK2h0dHBzOi8vYnVncy5nZW50b28ub3JnLzM1ODAyMQoraHR0cDovL2NsYW5nLmxsdm0ub3JnL2NvbXBhdGliaWxpdHkuaHRtbCNkZWZhdWx0X2luaXRfY29uc3QKK2h0dHA6Ly9nY2MuZ251Lm9yZy9QUjQ0NDk5IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBhL2phZGUvVGVYRk9UQnVpbGRlci5jeHgKKysrKyBiL2phZGUvVGVYRk9UQnVpbGRlci5jeHgKK0BAIC04OCw2ICs4OCw4IEBAIHB1YmxpYzoKKyAgICAgICB2YWx1ZS5jb252ZXJ0U3RyaW5nKG5pY18ucGxhY2VtZW50KTsKKyAgICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgUGFnZUZsb2F0Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgUGFnZUZsb2F0Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBQYWdlRmxvYXROSUMgbmljXzsKKyAgICAgU3RyaW5nQyBuYW1lXzsKK0BAIC0xMDEsNiArMTAzLDggQEAgcHVibGljOgorICAgICAgIGZvdGIuZW5kUGFnZUZvb3Rub3RlKCk7CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBQYWdlRm9vdG5vdGVGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBQYWdlRm9vdG5vdGVGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICB9OworICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLS0tIGEvamFkZS9UcmFuc2Zvcm1GT1RCdWlsZGVyLmN4eAorKysrIGIvamFkZS9UcmFuc2Zvcm1GT1RCdWlsZGVyLmN4eAorQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgorICAgfTsKKyAgIGNsYXNzIEVudGl0eVJlZkZsb3dPYmogOiBwdWJsaWMgVHJhbnNmb3JtRXh0ZW5zaW9uRmxvd09iaiB7CisgICBwdWJsaWM6CisrICAgIEVudGl0eVJlZkZsb3dPYmooKSB7fQorICAgICB2b2lkIGF0b21pYyhUcmFuc2Zvcm1GT1RCdWlsZGVyICZmb3RiLCBjb25zdCBOb2RlUHRyICYpIGNvbnN0IHsKKyAgICAgICBmb3RiLmVudGl0eVJlZihuYW1lXyk7CisgICAgIH0KK0BAIC01Niw2ICs1Nyw3IEBAIHB1YmxpYzoKKyAgIH07CisgICBjbGFzcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25GbG93T2JqIDogcHVibGljIFRyYW5zZm9ybUV4dGVuc2lvbkZsb3dPYmogeworICAgcHVibGljOgorKyAgICBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25GbG93T2JqKCkge30KKyAgICAgdm9pZCBhdG9taWMoVHJhbnNmb3JtRk9UQnVpbGRlciAmZm90YiwgY29uc3QgTm9kZVB0ciAmKSBjb25zdCB7CisgICAgICAgZm90Yi5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZGF0YV8pOworICAgICB9CitAQCAtOTgsNiArMTAwLDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IEVtcHR5RWxlbWVudEZsb3dPYmooKnRoaXMpOyB9CisrICBwdWJsaWM6CisrICAgIEVtcHR5RWxlbWVudEZsb3dPYmooKSB7fQorICAgcHJpdmF0ZToKKyAgICAgRWxlbWVudE5JQyBuaWNfOworICAgfTsKK0BAIC0xMzMsNiArMTM3LDggQEAgcHVibGljOgorICAgICAgIH0KKyAgICAgfQorICAgICBFeHRlbnNpb25GbG93T2JqICpjb3B5KCkgY29uc3QgeyByZXR1cm4gbmV3IEVsZW1lbnRGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBFbGVtZW50Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBFbGVtZW50TklDIG5pY187CisgICB9OworQEAgLTE1MCw2ICsxNTYsOCBAQCBwdWJsaWM6CisgICAgICAgdmFsdWUuY29udmVydFN0cmluZyhzeXN0ZW1JZF8pOworICAgICB9CisgICAgIEV4dGVuc2lvbkZsb3dPYmogKmNvcHkoKSBjb25zdCB7IHJldHVybiBuZXcgRW50aXR5Rmxvd09iaigqdGhpcyk7IH0KKysgIHB1YmxpYzoKKysgICAgRW50aXR5Rmxvd09iaigpIHt9CisgICBwcml2YXRlOgorICAgICBTdHJpbmdDIHN5c3RlbUlkXzsKKyAgIH07CitAQCAtMTc0LDYgKzE4Miw4IEBAIHB1YmxpYzoKKyAgICAgICB9CisgICAgIH0KKyAgICAgRXh0ZW5zaW9uRmxvd09iaiAqY29weSgpIGNvbnN0IHsgcmV0dXJuIG5ldyBEb2N1bWVudFR5cGVGbG93T2JqKCp0aGlzKTsgfQorKyAgcHVibGljOgorKyAgICBEb2N1bWVudFR5cGVGbG93T2JqKCkge30KKyAgIHByaXZhdGU6CisgICAgIERvY3VtZW50VHlwZU5JQyBuaWNfOworICAgfTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuamFkZS9vcGVuamFkZS1uYXRpdmVfMS4zLjIuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtbmF0aXZlXzEuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhN2FhNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbmphZGUvb3BlbmphZGUtbmF0aXZlXzEuMy4yLmJiCkBAIC0wLDAgKzEsMTA4IEBACitTVU1NQVJZID0gIlRvb2xzIGZvciB3b3JraW5nIHdpdGggRFNTU0wgc3R5bGVzaGVldHMgZm9yIFNHTUwgYW5kIFhNTCBkb2N1bWVudHMiCitERVNDUklQVElPTiA9ICJPcGVuSmFkZSBpcyBhIHN1aXRlIG9mIHRvb2xzIGZvciB2YWxpZGF0aW5nLCBcCitwcm9jZXNzaW5nLCBhbmQgYXBwbHlpbmcgRFNTU0wgKERvY3VtZW50IFN0eWxlIFNlbWFudGljcyBhbmQgXAorU3BlY2lmaWNhdGlvbiBMYW5ndWFnZSkgc3R5bGVzaGVldHMgdG8gU0dNTCBhbmQgWE1MIGRvY3VtZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vb3BlbmphZGUuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02NDFmZjFlNDUxMWYwYTg3MDQ0YWQ0MmY4N2NiMTA0NSIKKworUFIgPSAicjUiCisKK0RFUEVORFMgPSAib3BlbnNwLW5hdGl2ZSBzZ21sLWNvbW1vbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJzZ21sLWNvbW1vbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L29wZW5qYWRlL29wZW5qYWRlLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlZmlsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tc2dnZW4ucGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVhdXRvY29uZi5wYXRjaCBcCisJICAgZmlsZTovL3VzZXItZGVjbGFyZWQtZGVmYXVsdC1jb25zdHJ1Y3Rvci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmVnZXgucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZGY2OTJlMzE4NjEwOWNjMDBkYjY4MjViNzc3MjAxZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZDJkNzk5NmNjOTRmOWI4N2QwYzUxY2YwZTAyODA3MGFjMTc3YzQxMjNlY2JmZDdhYzFjYjhkMGI3ZDMyMmQxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgbmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zcGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0vT3BlblNQIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zcGxpYmRpcj0ke1NUQUdJTkdfTElCRElSfSIKKworIyBXZSBuZWVkIHRvIHNldCBkYXRhZGlyIGV4cGxpY2l0bHksIGJ1dCBhZGRpbmcgaXQgdG8gRVhUUkFfT0VDT05GCisjIHJlc3VsdHMgaW4gaXQgYmVpbmcgc3BlY2lmaWVkIHR3aWNlIHdoZW4gY29uZmlndXJlIGlzIHJ1bi4KK0NPTkZJR1VSRU9QVFMgOj0gIiR7QGQuZ2V0VmFyKCdDT05GSUdVUkVPUFRTJywgVHJ1ZSkucmVwbGFjZSgnLS1kYXRhZGlyPSR7ZGF0YWRpcn0nLCAnLS1kYXRhZGlyPSR7U1RBR0lOR19EQVRBRElSfS9zZ21sL29wZW5qYWRlLSR7UFZ9Jyl9IgorCisjIENPTkZJR1VSRU9QVFMgaGFzIGhhcmQgY29kZWQgcGF0aHMgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQncyB2YXJkZXBzCisjIHRoZXJlIGFyZSBvdGhlciBiaXRzIGluIHRoZXJlIHRvbyBidXQgdGhleSBhcmUgcGlja2VkIHVwIGJ5IG90aGVyIHZhcmlhYmxlCisjIGRlcGVuZGVuY2llcyBzbyBpdCBhbGwgd29ya3Mgb3V0CitvZV9ydW5jb25mW3ZhcmRlcHNleGNsdWRlXSArPSAiQ09ORklHVVJFT1BUUyIKKworQ0ZMQUdTID0rICItSSR7U30vaW5jbHVkZSIKKworU1NUQVRFUE9TVElOU1RGVU5DUyArPSAib3BlbmphZGVfc3N0YXRlX3Bvc3RpbnN0IgorU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJvcGVuamFkZV9zeXNyb290X3ByZXByb2Nlc3MiCitDTEVBTkZVTkNTICs9ICJvcGVuamFkZV9zc3RhdGVfY2xlYW4iCisKKyMgY29uZmlndXJlLmluIG5lZWRzIHRvIGJlIHJlbG9hY3RlZCB0byB0cmlnZ2VyIHJlYXV0b2NvbmYKK2RvX2V4dHJhdW5wYWNrICgpIHsKKwljcCAke1N9L2NvbmZpZy9jb25maWd1cmUuaW4gJHtTfS8KK30KK2FkZHRhc2sgZXh0cmF1bnBhY2sgYWZ0ZXIgZG9fcGF0Y2ggYmVmb3JlIGRvX2NvbmZpZ3VyZQorCisjIFdlIG5lZWQgdG8gZG8gdGhpcyBlbHNlIHRoZSBzb3VyY2UgaW50ZXJkZXBlbmRlbmNpZXMgYXJlbid0IGdlbmVyYXRlZCBhbmQKKyMgYnVpbGQgZmFpbHVyZXMgY2FuIHJlc3VsdCAoZS5nLiB6ZXJvIHNpemUgc3R5bGUvTWFrZWZpbGUuZGVwIGZpbGUpCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCW9lX3J1bm1ha2UgZGVwZW5kCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBSZWZlciB0byBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L29wZW5qYWRlLmh0bWwKKwkjIGZvciBkZXRhaWxzLgorCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQkKKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9qYWRlLy5saWJzL29wZW5qYWRlICR7RH0ke2JpbmRpcn0vb3BlbmphZGUKKwlsbiAtc2Ygb3BlbmphZGUgJHtEfSR7YmluZGlyfS9qYWRlCisKKwlvZV9saWJpbnN0YWxsIC1hIC1zbyAtQyBzdHlsZSBsaWJvc3R5bGUgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIHNwZ3JvdmUgbGlib3NwZ3JvdmUgJHtEfSR7bGliZGlyfQorCW9lX2xpYmluc3RhbGwgLWEgLXNvIC1DIGdyb3ZlIGxpYm9ncm92ZSAke0R9JHtsaWJkaXJ9CisKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC9jYXRhbG9nICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKwlpbnN0YWxsIC1tIDY0NCBkc3NzbC8qLmR0ZCAke0R9JHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvKi5kc2wgJHtEfSR7ZGF0YWRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfQorCWluc3RhbGwgLW0gNjQ0IGRzc3NsLyouc2dtICR7RH0ke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0KKworCWluc3RhbGwgLWQgJHtkYXRhZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9CisJaW5zdGFsbCAtbSA2NDQgZHNzc2wvY2F0YWxvZyAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0vY2F0YWxvZworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sCisJZWNobyAiQ0FUQUxPRyAke2RhdGFkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0vY2F0YWxvZyIgPiBcCisJCSR7RH0ke3N5c2NvbmZkaXJ9L3NnbWwvb3BlbmphZGUtJHtQVn0uY2F0Cit9CisKK29wZW5qYWRlX3NzdGF0ZV9wb3N0aW5zdCgpIHsKKwlpZiBbICIke0JCX0NVUlJFTlRUQVNLfSIgPSAicG9wdWxhdGVfc3lzcm9vdCIgLW8gIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCQkjIHVwZGF0ZWQgd2hlbiB0aGUgcGFja2FnZSBpcyBpbnN0YWxsZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJCSR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vaW5zdGFsbC1jYXRhbG9nLW9wZW5qYWRlIFwKKwkJCS0tYWRkICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIFwKKwkJCSR7c3lzY29uZmRpcn0vc2dtbC9vcGVuamFkZS0ke1BWfS5jYXQKKwkJJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUgXAorCQkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkJJHtzeXNjb25mZGlyfS9zZ21sL29wZW5qYWRlLSR7UFZ9LmNhdAorCWZpCit9CisKK29wZW5qYWRlX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisgICAgaW5zdGFsbCAtZCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworICAgIGluc3RhbGwgLW0gNzU1ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9pbnN0YWxsLWNhdGFsb2cgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9pbnN0YWxsLWNhdGFsb2ctb3BlbmphZGUKK30KKworb3BlbmphZGVfc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJZmlsZXM9IiR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IgorCWZvciBmIGluICRmaWxlczsgZG8KKwkJWyAhIC1mICRmIF0gfHwgc2VkIC1pICcvXC9zZ21sXC9vcGVuamFkZS0ke1BWfS5jYXQvZCcgJGYKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcC0xLjUuMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcC0xLjUuMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyMThhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwLTEuNS4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTM1OTkyOTEmZ3JvdXBfaWQ9MjExNSZhdGlkPTEwMjExNV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbiBPcGVuU1AtMS41LjIvY29uZmlndXJlLmluCistLS0gT3BlblNQLTEuNS4yL2NvbmZpZ3VyZS5pbgkyMDA1LTEyLTIzIDE2OjE1OjIxLjAwMDAwMDAwMCArMDIwMAorKysrIE9wZW5TUC0xLjUuMi9jb25maWd1cmUuaW4JMjAxMy0wMS0wMyAwOTowNDo1MS45MjI2NDU2ODkgKzAyMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgQU1fSU5JVF9BVVRPTUFLRShPcGVuU1AsIDEuNS4yLCBuby1kZWZpbmUpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgQUNfUFJFUkVRKDIuNTMpCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKyBBTV9TQU5JVFlfQ0hFQ0sKKworIGRubCBBdXRvaGVhZGVyIGRlZmluaXRpb25zCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcF8xLjUuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGVuc3Avb3BlbnNwXzEuNS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjExNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BlbnNwL29wZW5zcF8xLjUuMi5iYgpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIkFuIFNHTUwgcGFyc2VyIgorREVTQ1JJUFRJT04gPSAiQW4gU0dNTCBwYXJzZXIgdXNlZCBieSB0aGUgT3BlbkphZGUgc3VpdGUgb2YgdXRpbGl0aWVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcGVuamFkZS5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY0MWZmMWU0NTExZjBhODcwNDRhZDQyZjg3Y2IxMDQ1IgorCitQUiA9ICJyMSIKKworIyBBdCAtT3MgaXQgZW5jb3VudGVycyBjYWxscyB0byBzb21lIGlubGluZSBmdW5jdGlvbnMgd2hpY2ggYXJlIHRoZW4KKyMgbm90IGZvdW5kIGluIGFueSBvdGhlciBvYmplY3RzIHdpdGggZ2NjIDQuNQorRlVMTF9PUFRJTUlaQVRJT04gKz0gIi1PMiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vb3BlbmphZGUvT3BlblNQLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjcwYjIyM2M1ZDEyY2VlNDBjOTEzN2JlODZiNmMzOWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTdmNDg5ODQ5OGEzNjg5MThiMGQ0OWM4MjZhYTQzNGJiNWI3MDNkMmMzYjE2OWJlYjM0ODAxNmFiMjU2MTdjZSIKKworUyA9ICIke1dPUktESVJ9L09wZW5TUC0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvYy1idWlsZCIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICJcCisJLS1kaXNhYmxlLWRvYy1idWlsZCBcCisJLS1lbmFibGUtZGVmYXVsdC1jYXRhbG9nPSR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nIFwKKwktLWVuYWJsZS1kZWZhdWx0LXNlYXJjaC1wYXRoPSR7ZGF0YWRpcn0vc2dtbCBcCisJIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNldCB1cCBzeW1saW5rcyB0byBvZnRlbi11c2VkIGFsdGVybmF0ZSBuYW1lcy4gU2VlCisJIyBodHRwOi8vd3d3LmxpbnV4ZnJvbXNjcmF0Y2gub3JnL2JsZnMvdmlldy9zdGFibGUvcHN0L29wZW5zcC5odG1sCisJY2QgJHtEfSR7bGliZGlyfQorCWxuIC1zZiBsaWJvc3Auc28gbGlic3Auc28KKworCWNkICR7RH0ke2JpbmRpcn0KKwlmb3IgdXRpbCBpbiBuc2dtbHMgc2dtbG5vcm0gc3BhbSBzcGNhdCBzcGVudCBzeDsgZG8KKwkJbG4gLXNmIG8kdXRpbCAkdXRpbAkKKwlkb25lCisJbG4gLXNmIG9zeCBzZ21sMnhtbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZm9yIHV0aWwgaW4gbnNnbWxzIHNnbWxub3JtIHNwYW0gc3BjYXQgc3BlbnQgc3g7IGRvCisJCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vJHV0aWwgXAorCQkgICAgLUQgJHtzeXNjb25mZGlyfS9zZ21sCisJZG9uZQorfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9PcGVuU1AvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvdGFyX2lnbm9yZV9lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnLXV0aWxzL29wa2ctdXRpbHMvdGFyX2lnbm9yZV9lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGRkYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlscy90YXJfaWdub3JlX2Vycm9yLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0lmIGEgdGhlIG51bWJlciBvZiBoYXJkIGxpbmtzIGRlY3JlYXNlcyBvciBpbmNyZWFzZXMgd2hpbGUgY3JlYXRpbmcKK3RoZSB0YXIgZmlsZXMgdXNlZCBmb3IgYW4gaXBrIHBhY2thZ2UsIHRhciBmYWlscyB3aXRoIGVycm9yIGNvZGUgMToKKworfCBERUJVRzogRXhlY3V0aW5nIHB5dGhvbiBmdW5jdGlvbiBkb19wYWNrYWdlX2lwaworfCB0YXI6IC4vdXNyL3NyYy9kZWJ1Zy9ncGVyZi8zLjAuNC1yMC9ncGVyZi0zLjAuNC9zcmMvbWFpbi5jYzogZmlsZSBjaGFuZ2VkIGFzIHdlIHJlYWQgaXQKK05PVEU6IHJlY2lwZSBncGVyZi0zLjAuNC1yMDogdGFzayBkb19wYWNrYWdlX3dyaXRlX2lwazogRmFpbGVkCitFUlJPUjogVGFzayA2NTM5IChyZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiLCBkb19wYWNrYWdlX3dyaXRlX2lwaykgZmFpbGVkIHdpdGggZXhpdCBjb2RlICcxJworCisKK1dlIGRldGVjdCBpZiB0aGUgZXJyb3IgY29kZSBwcm9kdWNlZCBieSB0YXIgaXMgMSBhbmQgaW4gdGhpcyBjYXNlIGlnbm9yZSBpdC4KKworVGhpcyBhIHNpbWlsYXIgYmVoYXZpb3IgdG8gdGhlIG9uZSBvbiBkcGtnOgoraHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcG9reS9jb21taXQvP2lkPTQwNzMxOTQyNTE1ZWM4ZDgwYzcyN2FkNTYxMTc0OTg2ZDRmMDU4MTgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCisKK0luZGV4OiBnaXQvb3BrZy1idWlsZAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL29wa2ctYnVpbGQKKysrKyBnaXQvb3BrZy1idWlsZAorQEAgLTI1MCw4ICsyNTAsMjEgQEAgdG1wX2Rpcj0kZGVzdF9kaXIvSVBLR19CVUlMRC4kJAorIG1rZGlyICR0bXBfZGlyCisgCisgZWNobyAkQ09OVFJPTCA+ICR0bXBfZGlyL3RhclgKKy0oIGNkICRwa2dfZGlyICYmIHRhciAkb2dhcmdzIC1YICR0bXBfZGlyL3RhclggLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvZGF0YS50YXIuZ3ogLiApCistKCBjZCAkcGtnX2Rpci8kQ09OVFJPTCAmJiB0YXIgJG9nYXJncyAtY3ogJHRhcmZvcm1hdCAtZiAkdG1wX2Rpci9jb250cm9sLnRhci5neiAuICkKKysKKysKKysjIElnbm9yZSBlcnJvciBjb2RlIDEsIGNhdXNlZCBieSBtb2RpZnlpbmcgdGhlIG51bWJlciBvZiBoYXJkIGxpbmtzIHdoaWxlIGNyZWF0aW5nIHRoZSB0YXIgZmlsZQorK3JjPTAKKysoIGNkICRwa2dfZGlyICYmIHRhciAkb2dhcmdzIC1YICR0bXBfZGlyL3RhclggLWN6ICR0YXJmb3JtYXQgLWYgJHRtcF9kaXIvZGF0YS50YXIuZ3ogLiApIHx8IHJjPSQ/CisraWYgWyAkcmMgLW5lIDEgXSAmJiBbICRyYyAtbmUgMCBdOyB0aGVuCisrICAgICAgICBleGl0ICRyYyAKKytmaQorKworK3JjPTAKKysoIGNkICRwa2dfZGlyLyRDT05UUk9MICYmIHRhciAkb2dhcmdzIC1jeiAkdGFyZm9ybWF0IC1mICR0bXBfZGlyL2NvbnRyb2wudGFyLmd6IC4gKSB8fCByYz0kPworK2lmIFsgJHJjIC1uZSAxIF0gJiYgWyAkcmMgLW5lIDAgXTsgdGhlbgorKyAgICAgICAgZXhpdCAkcmMKKytmaQorKworIHJtICR0bXBfZGlyL3RhclgKKyAKKyBlY2hvICIyLjAiID4gJHRtcF9kaXIvZGViaWFuLWJpbmFyeQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy11dGlscy9vcGtnLXV0aWxzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUxOGQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2ctdXRpbHMvb3BrZy11dGlsc19naXQuYmIKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJBZGRpdGlvbmFsIHV0aWxpdGllcyBmb3IgdGhlIG9wa2cgcGFja2FnZSBtYW5hZ2VyIgorU1VNTUFSWV91cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAiVXRpbGl0eSBmb3IgbWFuYWdpbmcgdGhlIGFsdGVybmF0aXZlcyBzeXN0ZW0iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3Avb3BrZy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29wa2cucHk7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9MTU5MTc0OTFhZDZiZjdhY2M2NjZjYTVmN2NjMWUwODMiCitQUk9WSURFUyArPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitTUkNSRVYgPSAiNTMyNzRmMDg3NTY1ZmQ0NWQ4NDUyYzUzNjc5OTdiYTZhNjgyYTM3YSIKK1BWID0gIjAuMS44K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL29wa2ctdXRpbHMiCisKK1NSQ19VUklfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgZmlsZTovL3Rhcl9pZ25vcmVfZXJyb3IucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitQWVRIT05SREVQUyA9ICJweXRob24gcHl0aG9uLXNoZWxsIHB5dGhvbi1pbyBweXRob24tbWF0aCBweXRob24tY3J5cHQgcHl0aG9uLWxvZ2dpbmcgcHl0aG9uLWZjbnRsIHB5dGhvbi1zdWJwcm9jZXNzIHB5dGhvbi1waWNrbGUgcHl0aG9uLWNvbXByZXNzaW9uIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLXN0cmluZ29sZCIKK1BZVEhPTlJERVBTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1BBQ0tBR0VDT05GSUcgPSAicHl0aG9uIgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIiwsLCR7UFlUSE9OUkRFUFN9IgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUFJFRklYPSR7cHJlZml4fSBERVNURElSPSR7RH0gaW5zdGFsbAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJc2VkIC1pICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyAtZSAncywvdXNyL2Jpbiwke2JpbmRpcn0sZzsgcywvdXNyL2xpYiwke2xpYmRpcn0sZycKK30KKworUEFDS0FHRVMgPSsgInVwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyIKK0ZJTEVTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICIke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyIKK1JQUk9WSURFU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAidXBkYXRlLWFsdGVybmF0aXZlcyB1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKK1JSRVBMQUNFU191cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgPSAidXBkYXRlLWFsdGVybmF0aXZlcy1jd29ydGgiCitSQ09ORkxJQ1RTX3VwZGF0ZS1hbHRlcm5hdGl2ZXMtb3BrZyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLWN3b3J0aCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1hcmNoLWNvbmZpZ18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnLWFyY2gtY29uZmlnXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2UzZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1hcmNoLWNvbmZpZ18xLjAuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJBcmNoaXRlY3R1cmUtZGVwZW5kZW50IGNvbmZpZ3VyYXRpb24gZm9yIG9wa2ciCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKK1BSID0gInIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJbWtkaXIgLXAgJHtTfS8ke3N5c2NvbmZkaXJ9L29wa2cvCisKKwlhcmNoY29uZj0ke1N9LyR7c3lzY29uZmRpcn0vb3BrZy9hcmNoLmNvbmYKKworCXJtIC1mICRhcmNoY29uZgorCWlwa2dhcmNocz0iJHtBTExfTVVMVElMSUJfUEFDS0FHRV9BUkNIU30iCisJcHJpb3JpdHk9MQorCWZvciBhcmNoIGluICRpcGtnYXJjaHM7IGRvIAorCQllY2hvICJhcmNoICRhcmNoICRwcmlvcml0eSIgPj4gJGFyY2hjb25mCisJCXByaW9yaXR5PSQoZXhwciAkcHJpb3JpdHkgKyA1KQorCWRvbmUKK30KKworCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cKKwlpbnN0YWxsIC1tIDA2NDQgICR7U30vJHtzeXNjb25mZGlyfS9vcGtnLyogJHtEfSR7c3lzY29uZmRpcn0vb3BrZy8KK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9vcGtnLyAiCisKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9vcGtnL2FyY2guY29uZiIKKworUlJFUExBQ0VTXyR7UE59ID0gIm9wa2ctY29uZmlnLWJhc2UiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm9wa2ctY29uZmlnLWJhc2UiCitSUFJPVklERVNfJHtQTn0gPSAib3BrZy1jb25maWctYmFzZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cta2V5cmluZ3NfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy1rZXlyaW5nc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThkNmFiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cta2V5cmluZ3NfMS4wLmJiCkBAIC0wLDAgKzEsNDggQEAKK1NVTU1BUlkgPSAiS2V5cmluZ3MgZm9yIHZlcmlmeWluZyBvcGtnIHBhY2thZ2VzIGFuZCBmZWVkcyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKKyMgRGlzdHJvLXNwZWNpZmljIGtleXMgY2FuIGJlIGFkZGVkIHRvIHRoaXMgcGFja2FnZSBpbiB0d28gd2F5czoKKyMKKyMgICAxKSBJbiBhIC5iYmFwcGVuZCwgYWRkIC5ncGcgYW5kL29yIC5hc2MgZmlsZXMgdG8gU1JDX1VSSSBhbmQgaW5zdGFsbCB0aGVtIHRvCisjICAgICAgJHtEfSR7ZGF0YWRpcn0vb3BrZy9rZXlyaW5ncy8gaW4gYSBkb19pbnN0YWxsX2FwcGVuZCBmdW5jdGlvbi4gVGhlc2UKKyMgICAgICBmaWxlcyBzaG91bGQgbm90IGJlIG5hbWVkICdrZXktJG5hbWUuZ3BnJyB0byBlbnN1cmUgdGhleSBkb24ndCBjb25mbGljdAorIyAgICAgIHdpdGgga2V5cyBleHBvcnRlZCBhcyBwZXIgKDIpLgorIworIyAgIDIpIEluIGEgLmJiYXBwZW5kLCBkaXN0cm8gY29uZmlnIG9yIGxvY2FsLmNvbmYsIG92ZXJyaWRlIHRoZSB2YXJpYWJsZQorIyAgICAgIE9QS0dfS0VZUklOR19LRVlTIHRvIGNvbnRhaW4gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBrZXkgbmFtZXMuIEZvcgorIyAgICAgIGVhY2ggbmFtZSwgJ2dwZyAtLWV4cG9ydCAkbmFtZScgd2lsbCBiZSByYW4gdG8gZXhwb3J0IHRoZSBwdWJsaWMga2V5IHRvIGEKKyMgICAgICBmaWxlIG5hbWVkICdrZXktJG5hbWUuZ3BnJy4gVGhlIHB1YmxpYyBrZXkgbXVzdCB0aGVyZWZvcmUgYmUgaW4gdGhlIGdwZworIyAgICAgIGtleXJpbmdzIG9uIHRoZSBidWlsZCBtYWNoaW5lLgorCitPUEtHX0tFWVJJTkdfS0VZUyA/PSAiIgorCitkb19jb21waWxlKCkgeworICAgIGZvciBuYW1lIGluICR7T1BLR19LRVlSSU5HX0tFWVN9OyBkbworICAgICAgICBncGcgLS1leHBvcnQgJHtuYW1lfSA+ICR7Qn0va2V5LSR7bmFtZX0uZ3BnCisgICAgZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L29wa2cva2V5cmluZ3MvCisgICAgZm9yIG5hbWUgaW4gJHtPUEtHX0tFWVJJTkdfS0VZU307IGRvCisgICAgICAgIGluc3RhbGwgLW0gMDY0NCAke0J9L2tleS0ke25hbWV9LmdwZyAke0R9JHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzLworICAgIGRvbmUKK30KKworRklMRVNfJHtQTn0gPSAiJHtkYXRhZGlyfS9vcGtnL2tleXJpbmdzIgorCisjIFdlIG5lZWQgJ29wa2cta2V5JyB0byBydW4gdGhlIHBvc3RpbnN0IHNjcmlwdAorUkRFUEVORFNfJHtQTn0gPSAib3BrZyIKKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyMhIC9iaW4vc2gKK3NldCAtZQorCitpZiBbIHgiJEQiID0gIngiIF07IHRoZW4KKyAgICAjIE9uIHRhcmdldAorICAgIG9wa2cta2V5IHBvcHVsYXRlCitlbHNlCisgICAgZXhpdCAxCitmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29wa2cvb3BrZy8wMDAxLW9wa2dfYXJjaGl2ZS1hZGQtc3VwcG9ydC1mb3ItZW1wdHktY29tcHJlc3NlZC1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiZDE5NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSBiZDMyYmI4NjQ2NDU5NTA4YmIwYjBjZTU0YTE0YmQ2ZmUwZTE5Yjc1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxlamFuZHJvIGRlbCBDYXN0aWxsbyA8YWxlamFuZHJvLmRlbGNhc3RpbGxvQG5pLmNvbT4KK0RhdGU6IFRodSwgMjcgQXVnIDIwMTUgMTU6NTI6MTYgLTA1MDAKK1N1YmplY3Q6IFtQQVRDSF0gb3BrZ19hcmNoaXZlOiBhZGQgc3VwcG9ydCBmb3IgZW1wdHkgY29tcHJlc3NlZCBmaWxlcworCitSZWdyZXNzaW9uIGZyb20gMC4yLng6IG9wa2cgdXNlZCB0byBzdXBwb3J0IGVtcHR5IFBhY2thZ2UuZ3ogZmlsZXMuCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBkZWwgQ2FzdGlsbG8gPGFsZWphbmRyby5kZWxjYXN0aWxsb0BuaS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKKy0tLQorIGxpYm9wa2cvb3BrZ19hcmNoaXZlLmMgfCAxNSArKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYm9wa2cvb3BrZ19hcmNoaXZlLmMgYi9saWJvcGtnL29wa2dfYXJjaGl2ZS5jCitpbmRleCBiZTkwM2U0Li43ZTkxZTQ4IDEwMDY0NAorLS0tIGEvbGlib3BrZy9vcGtnX2FyY2hpdmUuYworKysrIGIvbGlib3BrZy9vcGtnX2FyY2hpdmUuYworQEAgLTEyMSw2ICsxMjEsOSBAQCBzdGF0aWMgaW50IGNvcHlfdG9fc3RyZWFtKHN0cnVjdCBhcmNoaXZlICphLCBGSUxFICogc3RyZWFtKQorICAgICBpbnQgZW9mOworICAgICBzaXplX3QgbGVuID0gRVhUUkFDVF9CVUZGRVJfTEVOOworIAorKyAgICBpZiAoYXJjaGl2ZV9mb3JtYXQoYSkgPT0gQVJDSElWRV9GT1JNQVRfRU1QVFkpCisrICAgICAgICByZXR1cm4gMDsKKysKKyAgICAgYnVmZmVyID0geG1hbGxvYyhsZW4pOworIAorICAgICB3aGlsZSAoMSkgeworQEAgLTY1NCw2ICs2NTcsMTMgQEAgc3RhdGljIHN0cnVjdCBhcmNoaXZlICpvcGVuX2NvbXByZXNzZWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyAgICAgICAgIGdvdG8gZXJyX2NsZWFudXA7CisgICAgIH0KKyAKKysgICAgciA9IGFyY2hpdmVfcmVhZF9zdXBwb3J0X2Zvcm1hdF9lbXB0eShhcik7CisrICAgIGlmIChyICE9IEFSQ0hJVkVfT0spIHsKKysgICAgICAgIG9wa2dfbXNnKEVSUk9SLCAiRW1wdHkgZm9ybWF0IG5vdCBzdXBwb3J0ZWQ6ICVzXG4iLAorKyAgICAgICAgICAgICAgICAgYXJjaGl2ZV9lcnJvcl9zdHJpbmcoYXIpKTsKKysgICAgICAgIGdvdG8gZXJyX2NsZWFudXA7CisrICAgIH0KKysKKyAgICAgLyogT3BlbiBpbnB1dCBmaWxlIGFuZCBwcmVwYXJlIGZvciByZWFkaW5nLiAqLworICAgICByID0gYXJjaGl2ZV9yZWFkX29wZW5fZmlsZW5hbWUoYXIsIGZpbGVuYW1lLCBFWFRSQUNUX0JVRkZFUl9MRU4pOworICAgICBpZiAociAhPSBBUkNISVZFX09LKSB7CitAQCAtNzIzLDYgKzczMyw3IEBAIHN0cnVjdCBvcGtnX2FyICphcl9vcGVuX2NvbXByZXNzZWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyB7CisgICAgIHN0cnVjdCBvcGtnX2FyICphcjsKKyAgICAgc3RydWN0IGFyY2hpdmVfZW50cnkgKmVudHJ5OworKyAgICBpbnQgZW9mOworIAorICAgICBhciA9IChzdHJ1Y3Qgb3BrZ19hciAqKXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvcGtnX2FyKSk7CisgCitAQCAtNzM3LDggKzc0OCw4IEBAIHN0cnVjdCBvcGtnX2FyICphcl9vcGVuX2NvbXByZXNzZWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKKyAgICAgICogaGVhZGVyLiBXZSBza2lwIG92ZXIgdGhpcyBoZWFkZXIgaGVyZSBzbyB0aGF0IHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkCisgICAgICAqIHRvIGtub3cgYWJvdXQgaXQuCisgICAgICAqLworLSAgICBlbnRyeSA9IHJlYWRfaGVhZGVyKGFyLT5hciwgTlVMTCk7CistICAgIGlmICghZW50cnkpCisrICAgIGVudHJ5ID0gcmVhZF9oZWFkZXIoYXItPmFyLCAmZW9mKTsKKysgICAgaWYgKCFlbnRyeSAmJiAhZW9mKQorICAgICAgICAgZ290byBlcnJfY2xlYW51cDsKKyAKKyAgICAgcmV0dXJuIGFyOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2ctY29uZmlndXJlLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3NDAyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy1jb25maWd1cmUuc2VydmljZQpAQCAtMCwwICsxLDE3IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPU9wa2cgZmlyc3QgYm9vdCBjb25maWd1cmUKK0RlZmF1bHREZXBlbmRlbmNpZXM9bm8KK0FmdGVyPXN5c3RlbWQtcmVtb3VudC1mcy5zZXJ2aWNlIHN5c3RlbWQtdG1wZmlsZXMtc2V0dXAuc2VydmljZSB0bXAubW91bnQKK0JlZm9yZT1zeXNpbml0LnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9b25lc2hvdAorRW52aXJvbm1lbnRGaWxlPS1AU1lTQ09ORkRJUkAvZGVmYXVsdC9wb3N0aW5zdAorRXhlY1N0YXJ0PS1AQkFTRV9CSU5ESVJAL3NoIC1jICIgaWYgWyAkUE9TVElOU1RfTE9HR0lORyA9ICcxJyBdOyB0aGVuIEBCSU5ESVJAL29wa2cgY29uZmlndXJlID4gJExPR0ZJTEUgMj4mMTsgZWxzZSBAQklORElSQC9vcGtnIGNvbmZpZ3VyZTsgZmkiCitFeGVjU3RhcnRQb3N0PUBCQVNFX0JJTkRJUkAvc3lzdGVtY3RsIGRpc2FibGUgb3BrZy1jb25maWd1cmUuc2VydmljZQorU3RhbmRhcmRPdXRwdXQ9c3lzbG9nCitSZW1haW5BZnRlckV4aXQ9Tm8KKworW0luc3RhbGxdCitXYW50ZWRCeT1iYXNpYy50YXJnZXQKK1dhbnRlZEJ5PXN5c2luaXQudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2cuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2cvb3BrZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTllOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnL29wa2cuY29uZgpAQCAtMCwwICsxLDI4IEBACisjIE11c3QgaGF2ZSBvbmUgb3IgbW9yZSBzb3VyY2UgZW50cmllcyBvZiB0aGUgZm9ybToKKyMKKyMgICBzcmMgPHNyYy1uYW1lPiA8c291cmNlLXVybD4KKyMKKyMgYW5kIG9uZSBvciBtb3JlIGRlc3RpbmF0aW9uIGVudHJpZXMgb2YgdGhlIGZvcm06CisjCisjICAgZGVzdCA8ZGVzdC1uYW1lPiA8dGFyZ2V0LXBhdGg+CisjCisjIHdoZXJlIDxzcmMtbmFtZT4gYW5kIDxkZXN0LW5hbWVzPiBhcmUgaWRlbnRpZmllcnMgdGhhdAorIyBzaG91bGQgbWF0Y2ggW2EtekEtWjAtOS5fLV0rLCA8c291cmNlLXVybD4gc2hvdWxkIGJlIGEKKyMgVVJMIHRoYXQgcG9pbnRzIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSBGYW1pbGlhcgorIyBQYWNrYWdlcyBmaWxlLCBhbmQgPHRhcmdldC1wYXRoPiBzaG91bGQgYmUgYSBkaXJlY3RvcnkKKyMgdGhhdCBleGlzdHMgb24gdGhlIHRhcmdldCBzeXN0ZW0uCisKKyMgUHJveHkgU3VwcG9ydAorI29wdGlvbiBodHRwX3Byb3h5IGh0dHA6Ly9wcm94eS50bGQ6MzEyOAorI29wdGlvbiBmdHBfcHJveHkgaHR0cDovL3Byb3h5LnRsZDozMTI4Cisjb3B0aW9uIHByb3h5X3VzZXJuYW1lIDx1c2VybmFtZT4KKyNvcHRpb24gcHJveHlfcGFzc3dvcmQgPHBhc3N3b3JkPgorCisjIEVuYWJsZSBHUEdNRSBzaWduYXR1cmUKKyMgb3B0aW9uIGNoZWNrX3NpZ25hdHVyZSAxCisKKyMgT2ZmbGluZSBtb2RlIChmb3IgdXNlIGluIGNvbnN0cnVjdGluZyBmbGFzaCBpbWFnZXMgb2ZmbGluZSkKKyNvcHRpb24gb2ZmbGluZV9yb290IHRhcmdldAorCisjIERlZmF1bHQgZGVzdGluYXRpb24gZm9yIGluc3RhbGxlZCBwYWNrYWdlcworZGVzdCByb290IC8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcGtnL29wa2dfMC4zLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGJiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3BrZy9vcGtnXzAuMy4wLmJiCkBAIC0wLDAgKzEsNzIgQEAKK1NVTU1BUlkgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIiCitTVU1NQVJZX2xpYm9wa2cgPSAiT3BlbiBQYWNrYWdlIE1hbmFnZXIgbGlicmFyeSIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9vcGtnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL29wa2cvaXNzdWVzL2xpc3QiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9vcGtnLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0yMTttZDU9OTA0MzVhNTE5YzZlYTY5ZWYyMmU0YTg4YmNjNTJmYTAiCisKK0RFUEVORFMgPSAibGliYXJjaGl2ZSIKKworUEUgPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb3BrZy1jb25maWd1cmUuc2VydmljZSBcCisgICAgICAgICAgIGZpbGU6Ly9vcGtnLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1vcGtnX2FyY2hpdmUtYWRkLXN1cHBvcnQtZm9yLWVtcHR5LWNvbXByZXNzZWQtZmlsZXMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzQxMmNkYzcxZDc4Yjk4ZmFjYzg0YjE5MzMxZWM2NGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y3MzVkMWNkYjhlZjM3MThmYjBmOWZiYTQ0Y2EwZDlhNWM5MGQzYTdmMDE0ZjM3YTZkMmY5NDc0ZjU0OTg4ZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHN5c3RlbWQKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wa2ctY29uZmlndXJlLnNlcnZpY2UiCisKK3RhcmdldF9sb2NhbHN0YXRlZGlyIDo9ICIke2xvY2Fsc3RhdGVkaXJ9IgorT1BLR0xJQkRJUiA9ICIke3RhcmdldF9sb2NhbHN0YXRlZGlyfS9saWIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCisKK1BBQ0tBR0VDT05GSUdbZ3BnXSA9ICItLWVuYWJsZS1ncGcsLS1kaXNhYmxlLWdwZyxncGdtZSBsaWJncGctZXJyb3IsZ251cGciCitQQUNLQUdFQ09ORklHW2N1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsY3VybCIKK1BBQ0tBR0VDT05GSUdbc3NsLWN1cmxdID0gIi0tZW5hYmxlLXNzbC1jdXJsLC0tZGlzYWJsZS1zc2wtY3VybCxjdXJsIG9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2hhMjU2XSA9ICItLWVuYWJsZS1zaGEyNTYsLS1kaXNhYmxlLXNoYTI1NiIKK1BBQ0tBR0VDT05GSUdbcGF0aGZpbmRlcl0gPSAiLS1lbmFibGUtcGF0aGZpbmRlciwtLWRpc2FibGUtcGF0aGZpbmRlcixwYXRoZmluZGVyIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9vcGtnCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vb3BrZy5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L29wa2cvb3BrZy5jb25mCisJZWNobyAib3B0aW9uIGxpc3RzX2RpciAke09QS0dMSUJESVJ9L29wa2cvbGlzdHMiID4+JHtEfSR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYKKworCSMgV2UgbmVlZCB0byBjcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5CisJaW5zdGFsbCAtZCAke0R9JHtPUEtHTElCRElSfS9vcGtnCisKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9O3RoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9vcGtnLWNvbmZpZ3VyZS5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCQlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJCQktZSAncyxAU1lTQ09ORkRJUkAsJHtzeXNjb25mZGlyfSxnJyBcCisJCQktZSAncyxAQklORElSQCwke2JpbmRpcn0sZycgXAorCQkJLWUgJ3MsQFNZU1RFTURfVU5JVERJUkAsJHtzeXN0ZW1kX3VuaXRkaXJ9LGcnIFwKKwkJCSR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wa2ctY29uZmlndXJlLnNlcnZpY2UKKwlmaQorfQorCitSREVQRU5EU18ke1BOfSA9ICIke1ZJUlRVQUwtUlVOVElNRV91cGRhdGUtYWx0ZXJuYXRpdmVzfSBvcGtnLWFyY2gtY29uZmlnIHJ1bi1wb3N0aW5zdHMgbGliYXJjaGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorUlJFUExBQ0VTXyR7UE59ID0gIm9wa2ctbm9ncGcgb3BrZy1jb2xsYXRlcmFsIgorUkNPTkZMSUNUU18ke1BOfSA9ICJvcGtnLWNvbGxhdGVyYWwiCitSUFJPVklERVNfJHtQTn0gPSAib3BrZy1jb2xsYXRlcmFsIgorCitQQUNLQUdFUyA9KyAibGlib3BrZyIKKworRklMRVNfbGlib3BrZyA9ICIke2xpYmRpcn0vKi5zby4qICR7T1BLR0xJQkRJUn0vb3BrZy8iCitGSUxFU18ke1BOfSArPSAiJHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vb3BrZy9vcGtnLmNvbmYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3JjL29yY18wLjQuMjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyNTdjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vcmMvb3JjXzAuNC4yMy5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIk9wdGltaXNlZCBJbm5lciBMb29wIFJ1bnRpbWUgQ29tcGlsZXIiCitIT01FUEFHRSA9ICJodHRwOi8vY29kZS5lbnRyb3B5d2F2ZS5jb20vcHJvamVjdHMvb3JjLyIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwMGJkOWQwOWU4YWY1NmI5ZWM5ODJiM2Q4NTc5N2UiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjL29yYy9vcmMtJHtQVn0udGFyLnh6O25hbWU9b3JjIgorU1JDX1VSSVtvcmMubWQ1c3VtXSA9ICI3MmUwNjEyYWNlNTRkNzdhYTJmN2EwMDYzNDhlZTgxYSIKK1NSQ19VUklbb3JjLnNoYTI1NnN1bV0gPSAiNzY3ZWFlYmNlMjk0MTczN2I0MzM2ODIyNWVjNTQ1OThiMzA1NWNhNzhiNGRjNTBjNDA5MmY1ZmNkYzBiZGZlNyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRVMgPSsgIm9yYy1leGFtcGxlcyIKK0ZJTEVTX29yYy1leGFtcGxlcyA9ICIke2xpYmRpcn0vb3JjLyoiCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGxpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdPUkMgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworICAgIHNlZCAtaSAtZSAncyMvdG1wIy4jZycgJHtTfS9vcmMvb3JjY29kZW1lbS5jCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAxLUNoYW5nZS1saWJyYXJ5LW5hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2N2M1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDEtQ2hhbmdlLWxpYnJhcnktbmFtZS5wYXRjaApAQCAtMCwwICsxLDExOSBAQAorRnJvbTogUGlvdHIgUm9zemF0eWNraSA8ZGV4dGVyQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI3IEphbiAyMDEwIDE2OjUzOjExICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIENoYW5nZSBsaWJyYXJ5IG5hbWUKKworVGhlIHNvbmFtZSB3YXMgY2hhbmdlZCB0byBvc3NwLXV1aWQgdG8gcHJldmVuZCB0aGUgbmFtZSBjbGFzaCB3aXRoIGUyZnNwcm9ncydzCit1dWlkIGxpYnJhcnkuCistLS0KKyBNYWtlZmlsZS5pbiAgICAgIHwgICAgNiArKystLS0KKyBwZXJsL01ha2VmaWxlLlBMIHwgICAxMiArKysrKystLS0tLS0KKyBwaHAvY29uZmlnLm00ICAgIHwgICAgMiArLQorIHV1aWQtY29uZmlnLmluICAgfCAgICAyICstCisgdXVpZC5wYy5pbiAgICAgICB8ICAgIDQgKystLQorIDUgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGQyOGY0YmUuLmMyYmE5OWQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC02MiwxMyArNjIsMTMgQEAgUEVSTCAgICAgICAgPSBAUEVSTEAKKyBQSFAgICAgICAgICA9IEBQSFBACisgUEdfQ09ORklHICAgPSBAUEdfQ09ORklHQAorIAorLUxJQl9OQU1FICAgID0gbGlidXVpZC5sYQorK0xJQl9OQU1FICAgID0gbGlib3NzcC11dWlkLmxhCisgTElCX09CSlMgICAgPSB1dWlkLmxvIHV1aWRfbWQ1LmxvIHV1aWRfc2hhMS5sbyB1dWlkX3BybmcubG8gdXVpZF9tYWMubG8gdXVpZF90aW1lLmxvIHV1aWRfdWk2NC5sbyB1dWlkX3VpMTI4LmxvIHV1aWRfc3RyLmxvCisgCistRENFX05BTUUgICAgPSBsaWJ1dWlkX2RjZS5sYQorK0RDRV9OQU1FICAgID0gbGlib3NzcC11dWlkX2RjZS5sYQorIERDRV9PQkpTICAgID0gdXVpZF9kY2UubG8gJChMSUJfT0JKUykKKyAKKy1DWFhfTkFNRSAgICA9IGxpYnV1aWQrKy5sYQorK0NYWF9OQU1FICAgID0gbGlib3NzcC11dWlkKysubGEKKyBDWFhfT0JKUyAgICA9IHV1aWQrKy5sbyAkKExJQl9PQkpTKQorIAorIFBSR19OQU1FICAgID0gdXVpZAorZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUuUEwgYi9wZXJsL01ha2VmaWxlLlBMCitpbmRleCA5MmY0NDk0Li45YzZmZWU2IDEwMDY0NAorLS0tIGEvcGVybC9NYWtlZmlsZS5QTAorKysrIGIvcGVybC9NYWtlZmlsZS5QTAorQEAgLTMzLDkgKzMzLDkgQEAgdXNlIENvbmZpZzsKKyB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKKyAKKyAjICAgZGV0ZXJtaW5lIHNvdXJjZSBkaXJlY3RvcnkKKy1teSAoJHNyY2RpcikgPSBtYXAgeyBteSAkZCA9ICRfOyAkZCA9fiBzL1wvbGlidXVpZFwubGEkLy87ICRkIH0KKy0gICAgICAgICAgICAgICBncmVwIHsgLWYgJF8gfSAoIi4uL2xpYnV1aWQubGEiLCBnbG9iKCIuLi8qL2xpYnV1aWQubGEiKSkKKy0gICAgb3IgZGllICJubyBzb3VyY2UgZGlyZWN0b3J5IGZvdW5kICh3aGVyZSBsaWJ1dWlkLmxhIGlzIGxvY2F0ZWQpIjsKKytteSAoJHNyY2RpcikgPSBtYXAgeyBteSAkZCA9ICRfOyAkZCA9fiBzL1wvbGlib3NzcC11dWlkXC5sYSQvLzsgJGQgfQorKyAgICAgICAgICAgICAgIGdyZXAgeyAtZiAkXyB9ICgiLi4vbGlib3NzcC11dWlkLmxhIiwgZ2xvYigiLi4vKi9saWJvc3NwLXV1aWQubGEiKSkKKysgICAgb3IgZGllICJubyBzb3VyY2UgZGlyZWN0b3J5IGZvdW5kICh3aGVyZSBsaWJvc3NwLXV1aWQubGEgaXMgbG9jYXRlZCkiOworIAorICMgICBkZXRlcm1pbmUgZXh0cmEgYnVpbGQgb3B0aW9ucworIG15ICRjb21wYXQgPSAwOworQEAgLTQ3LDE1ICs0NywxNSBAQCBXcml0ZU1ha2VmaWxlKAorICAgICBWRVJTSU9OX0ZST00gICAgICA9PiAndXVpZC5wbScsCisgICAgIEFCU1RSQUNUX0ZST00gICAgID0+ICd1dWlkLnBvZCcsCisgICAgIFBSRVJFUV9QTSAgICAgICAgID0+IHt9LAorLSAgICBMSUJTICAgICAgICAgICAgICA9PiBbICItTCRzcmNkaXIvLmxpYnMgLUwkc3JjZGlyIC1sdXVpZCIgXSwKKysgICAgTElCUyAgICAgICAgICAgICAgPT4gWyAiLUwkc3JjZGlyLy5saWJzIC1MJHNyY2RpciAtbG9zc3AtdXVpZCIgXSwKKyAgICAgREVGSU5FICAgICAgICAgICAgPT4gJycsCisgICAgIElOQyAgICAgICAgICAgICAgID0+ICItSS4gLUkkc3JjZGlyIiwKKyAgICAgUE0gICAgICAgICAgICAgICAgPT4geyAndXVpZC5wbScgICA9PiAnJChJTlNUX0xJQkRJUikvdXVpZC5wbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3V1aWQucG9kJyAgPT4gJyQoSU5TVF9MSUJESVIpL3V1aWQucG9kJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJGNvbXBhdCA/ICgndXVpZF9jb21wYXQucG0nICA9PiAnJChJTlNUX0xJQkRJUikvLi4vRGF0YS9VVUlELnBtJykgIDogKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wb2QnID0+ICckKElOU1RfTElCRElSKS8uLi9EYXRhL1VVSUQucG9kJykgOiAoKSksIH0sCistICAgIE1BTjNQT0RTICAgICAgICAgID0+IHsgJ3V1aWQucG9kJyA9PiAnJChJTlNUX01BTjNESVIpL09TU1A6OnV1aWQuMycsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgKCRjb21wYXQgPyAoJ3V1aWRfY29tcGF0LnBvZCcgPT4gJyQoSU5TVF9NQU4zRElSKS9EYXRhOjpVVUlELjMnKSA6ICgpKSwgfSwKKysgICAgTUFOM1BPRFMgICAgICAgICAgPT4geyAndXVpZC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvT1NTUDo6dXVpZC4zcG0nLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY29tcGF0ID8gKCd1dWlkX2NvbXBhdC5wb2QnID0+ICckKElOU1RfTUFOM0RJUikvRGF0YTo6VVVJRC4zcG0nKSA6ICgpKSwgfSwKKyAgICAgVFlQRU1BUFMgICAgICAgICAgPT4gWyAndXVpZC50bScgXSwKKyAgICAgdGVzdCAgICAgICAgICAgICAgPT4geyBURVNUUyA9PiAndXVpZC50cycgLiAoJGNvbXBhdCA/ICcgdXVpZF9jb21wYXQudHMnIDogJycpIH0sCisgICAgIE5PX01FVEEgICAgICAgICAgID0+IDEsCitkaWZmIC0tZ2l0IGEvcGhwL2NvbmZpZy5tNCBiL3BocC9jb25maWcubTQKK2luZGV4IDUwOTFiOTYuLjk2OWI0NTcgMTAwNjQ0CistLS0gYS9waHAvY29uZmlnLm00CisrKysgYi9waHAvY29uZmlnLm00CitAQCAtMzQsNyArMzQsNyBAQCBpZiB0ZXN0ICIkUEhQX1VVSUQiICE9ICJubyI7IHRoZW4KKyAgICAgUEhQX05FV19FWFRFTlNJT04odXVpZCwgdXVpZC5jLCAkZXh0X3NoYXJlZCkKKyAgICAgQUNfREVGSU5FKEhBVkVfVVVJRCwgMSwgW0hhdmUgT1NTUCB1dWlkIGxpYnJhcnldKQorICAgICBQSFBfQUREX0xJQlBBVEgoWy4uXSwgKQorLSAgICBQSFBfQUREX0xJQlJBUlkoW3V1aWRdLCwgVVVJRF9TSEFSRURfTElCQUREKQorKyAgICBQSFBfQUREX0xJQlJBUlkoW29zc3AtdXVpZF0sLCBVVUlEX1NIQVJFRF9MSUJBREQpCisgICAgIFBIUF9BRERfSU5DTFVERShbLi5dKQorICAgICBQSFBfU1VCU1QoVVVJRF9TSEFSRURfTElCQUREKQorIAorZGlmZiAtLWdpdCBhL3V1aWQtY29uZmlnLmluIGIvdXVpZC1jb25maWcuaW4KK2luZGV4IDhkMmEwNjMuLjViNTg4MTIgMTAwNjQ0CistLS0gYS91dWlkLWNvbmZpZy5pbgorKysrIGIvdXVpZC1jb25maWcuaW4KK0BAIC0xMjEsNyArMTIxLDcgQEAgZG8KKyAgICAgICAgICAgICBvdXRwdXRfZXh0cmE9IiRvdXRwdXRfZXh0cmEgJHV1aWRfbGRmbGFncyIKKyAgICAgICAgICAgICA7OworICAgICAgICAgLS1saWJzKQorLSAgICAgICAgICAgIG91dHB1dD0iJG91dHB1dCAtbHV1aWQiCisrICAgICAgICAgICAgb3V0cHV0PSIkb3V0cHV0IC1sb3NzcC11dWlkIgorICAgICAgICAgICAgIG91dHB1dF9leHRyYT0iJG91dHB1dF9leHRyYSAkdXVpZF9saWJzIgorICAgICAgICAgICAgIDs7CisgICAgICAgICAqICkKK2RpZmYgLS1naXQgYS91dWlkLnBjLmluIGIvdXVpZC5wYy5pbgoraW5kZXggYzc2YWQxZS4uZGUwMGMyZiAxMDA2NDQKKy0tLSBhL3V1aWQucGMuaW4KKysrKyBiL3V1aWQucGMuaW4KK0BAIC0zNiw3ICszNiw3IEBAIE5hbWU6IE9TU1AgdXVpZAorIERlc2NyaXB0aW9uOiBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgTGlicmFyeQorIFZlcnNpb246IEBVVUlEX1ZFUlNJT05fUkFXQAorIFVSTDogaHR0cDovL3d3dy5vc3NwLm9yZy9wa2cvbGliL3V1aWQvCistQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KKy1MaWJzOiAtTCR7bGliZGlyfSAtbHV1aWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9vc3NwCisrTGliczogLUwke2xpYmRpcn0gLWxvc3NwLXV1aWQKKyBMaWJzLnByaXZhdGU6IEBMSUJTQAorIAorLS0gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAyLXV1aWQtcHJlc2VydmUtbS1vcHRpb24tc3RhdHVzLWluLXYtb3B0aW9uLWhhbmRsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDRhNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tOiBNYXJjbyBOZW5jaWFyaW5pIDxtYXJjby5uZW5jaWFyaW5pQGRldmlzZS5pdD4KK0RhdGU6IFdlZCwgMjcgSmFuIDIwMTAgMTk6NDY6MjEgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdXVpZDogcHJlc2VydmUgLW0gb3B0aW9uIHN0YXR1cyBpbiAtdiBvcHRpb24gaGFuZGxpbmcKKworQnVnOiA1MzEzOTYKKy0tLQorIHV1aWRfY2xpLmMgfCAgIDE5ICsrKysrKysrKystLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3V1aWRfY2xpLmMgYi91dWlkX2NsaS5jCitpbmRleCBkMWIwYjExLi4xNGE2N2ZlIDEwMDY0NAorLS0tIGEvdXVpZF9jbGkuYworKysrIGIvdXVpZF9jbGkuYworQEAgLTE0MCwxMSArMTQwLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgICAgICAgICAgIGkgPSBzdHJ0b2wob3B0YXJnLCAmcCwgMTApOworICAgICAgICAgICAgICAgICBpZiAoKnAgIT0gJ1wwJykKKyAgICAgICAgICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIGFyZ3VtZW50IHRvIG9wdGlvbiAndiciKTsKKysgICAgICAgICAgICAgICAgdmVyc2lvbiAmPSB+KFVVSURfTUFLRV9WMXxVVUlEX01BS0VfVjN8VVVJRF9NQUtFX1Y0fFVVSURfTUFLRV9WNSk7CisgICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkgeworLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJzaW9uID0gVVVJRF9NQUtFX1YxOyBicmVhazsKKy0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVyc2lvbiA9IFVVSURfTUFLRV9WMzsgYnJlYWs7CistICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHZlcnNpb24gPSBVVUlEX01BS0VfVjQ7IGJyZWFrOworLSAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiB2ZXJzaW9uID0gVVVJRF9NQUtFX1Y1OyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjE7IGJyZWFrOworKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJzaW9uIHw9IFVVSURfTUFLRV9WMzsgYnJlYWs7CisrICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHZlcnNpb24gfD0gVVVJRF9NQUtFX1Y0OyBicmVhazsKKysgICAgICAgICAgICAgICAgICAgIGNhc2UgNTogdmVyc2lvbiB8PSBVVUlEX01BS0VfVjU7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSgiaW52YWxpZCB2ZXJzaW9uIG9uIG9wdGlvbiAndiciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKK0BAIC0yMTMsMTAgKzIxNCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICB9CisgICAgIGVsc2UgeworICAgICAgICAgLyogZW5jb2RpbmcgKi8KKy0gICAgICAgIGlmICggICAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjEgJiYgYXJnYyAhPSAwKQorLSAgICAgICAgICAgIHx8ICh2ZXJzaW9uID09IFVVSURfTUFLRV9WMyAmJiBhcmdjICE9IDIpCistICAgICAgICAgICAgfHwgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1Y0ICYmIGFyZ2MgIT0gMCkKKy0gICAgICAgICAgICB8fCAodmVyc2lvbiA9PSBVVUlEX01BS0VfVjUgJiYgYXJnYyAhPSAyKSkKKysgICAgICAgIGlmICggICAodmVyc2lvbiAmIFVVSURfTUFLRV9WMSAmJiBhcmdjICE9IDApCisrICAgICAgICAgICAgfHwgKHZlcnNpb24gJiBVVUlEX01BS0VfVjMgJiYgYXJnYyAhPSAyKQorKyAgICAgICAgICAgIHx8ICh2ZXJzaW9uICYgVVVJRF9NQUtFX1Y0ICYmIGFyZ2MgIT0gMCkKKysgICAgICAgICAgICB8fCAodmVyc2lvbiAmIFVVSURfTUFLRV9WNSAmJiBhcmdjICE9IDIpKQorICAgICAgICAgICAgIHVzYWdlKCJpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMiKTsKKyAgICAgICAgIGlmICgocmMgPSB1dWlkX2NyZWF0ZSgmdXVpZCkpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgZXJyb3IoMSwgInV1aWRfY3JlYXRlOiAlcyIsIHV1aWRfZXJyb3IocmMpKTsKK0BAIC0yMzIsNyArMjMzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHV1aWRfbG9hZCh1dWlkLCAibmlsIikpICE9IFVVSURfUkNfT0spCisgICAgICAgICAgICAgICAgICAgICBlcnJvcigxLCAidXVpZF9sb2FkOiAlcyIsIHV1aWRfZXJyb3IocmMpKTsKKyAgICAgICAgICAgICB9CistICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gVVVJRF9NQUtFX1YzIHx8IHZlcnNpb24gPT0gVVVJRF9NQUtFX1Y1KSB7CisrICAgICAgICAgICAgaWYgKHZlcnNpb24gJiBVVUlEX01BS0VfVjMgfHwgdmVyc2lvbiAmIFVVSURfTUFLRV9WNSkgeworICAgICAgICAgICAgICAgICBpZiAoKHJjID0gdXVpZF9jcmVhdGUoJnV1aWRfbnMpKSAhPSBVVUlEX1JDX09LKQorICAgICAgICAgICAgICAgICAgICAgZXJyb3IoMSwgInV1aWRfY3JlYXRlOiAlcyIsIHV1aWRfZXJyb3IocmMpKTsKKyAgICAgICAgICAgICAgICAgaWYgKChyYyA9IHV1aWRfbG9hZCh1dWlkX25zLCBhcmd2WzBdKSkgIT0gVVVJRF9SQ19PSykgeworLS0gCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzY2JiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDAzLUZpeC13aGF0aXMtZW50cmllcy5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tOiBNYXJjbyBOZW5jaWFyaW5pIDxtYXJjby5uZW5jaWFyaW5pQGRldmlzZS5pdD4KK0RhdGU6IFR1ZSwgMiBGZWIgMjAxMCAxMjoxNjo0OSArMDEwMAorU3ViamVjdDogW1BBVENIXSBGaXggd2hhdGlzIGVudHJpZXMKKworRml4IHdoYXRpcyBlbnRyeSBvZiB1dWlkLjEsIHV1aWQuM29zc3AgYW5kIHV1aWQrKy4zb3NzcCBtYW5wYWdlcworLS0tCisgdXVpZCsrLnBvZCAgIHwgICAgMiArLQorIHV1aWQucG9kICAgICB8ICAgIDIgKy0KKyB1dWlkX2NsaS5wb2QgfCAgICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLS0KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbm90IGF1dGhvcl0KKworVGhpcyBwYXRjaCBpcyBmcm9tIGRlYmlhbiBvc3NwLXV1aWQgMS42LjIgaW50ZWdyYXRpb24uCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3V1aWQrKy5wb2QgYi91dWlkKysucG9kCitpbmRleCA4YjVhNGIxLi44OWM1ZWZiIDEwMDY0NAorLS0tIGEvdXVpZCsrLnBvZAorKysrIGIvdXVpZCsrLnBvZAorQEAgLTMxLDcgKzMxLDcgQEAKKyAKKyA9aGVhZDEgTkFNRQorIAorLUI8T1NTUCB1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+IChDKysgQVBJKQorK0I8dXVpZCsrPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+IChDKysgQVBJKQorIAorID1oZWFkMSBWRVJTSU9OCisgCitkaWZmIC0tZ2l0IGEvdXVpZC5wb2QgYi91dWlkLnBvZAoraW5kZXggNGFkMzc0Mi4uMDE3OWE0NiAxMDA2NDQKKy0tLSBhL3V1aWQucG9kCisrKysgYi91dWlkLnBvZAorQEAgLTMxLDcgKzMxLDcgQEAKKyAKKyA9aGVhZDEgTkFNRQorIAorLUI8T1NTUCB1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+CisrQjx1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXI+CisgCisgPWhlYWQxIFZFUlNJT04KKyAKK2RpZmYgLS1naXQgYS91dWlkX2NsaS5wb2QgYi91dWlkX2NsaS5wb2QKK2luZGV4IGRkZWM2YmIuLmRmOWRjODMgMTAwNjQ0CistLS0gYS91dWlkX2NsaS5wb2QKKysrKyBiL3V1aWRfY2xpLnBvZAorQEAgLTMxLDcgKzMxLDcgQEAKKyAKKyA9aGVhZDEgTkFNRQorIAorLUI8T1NTUCB1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgQ29tbWFuZC1MaW5lIFRvb2w+CisrQjx1dWlkPiAtIEI8VW5pdmVyc2FsbHkgVW5pcXVlIElkZW50aWZpZXIgQ29tbWFuZC1MaW5lIFRvb2w+CisgCisgPWhlYWQxIFZFUlNJT04KKyAKKy0tIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNWUxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC8wMDA0LWZpeC1kYXRhLXV1aWQtZnJvbS1zdHJpbmcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRGVzY3JpcHRpb246IFN1cHBvcnQgZGFzaC1sZXNzIGFyZ3MgdG8gZnJvbV9zdHJpbmcuCitBdXRob3I6IFRpbSBSZXRvdXQgPGRpb2NsZXNAZGViaWFuLm9yZz4KK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjM1NjA3CisKK1RoZSBtb2R1bGUgRGF0YTo6R1VJRCBkZXBlbmRzIG9uIERhdGE6OlVVSUQgc3VwcG9ydGluZyB0aGlzIGJlaGF2aW91ci4KKworLS0tLQorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtub3QgYXV0aG9yXQorCitUaGlzIHBhdGNoIGlzIGZyb20gZGViaWFuIG9zc3AtdXVpZCAxLjYuMiBpbnRlZ3JhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9wZXJsL3V1aWRfY29tcGF0LnBtCisrKysgYi9wZXJsL3V1aWRfY29tcGF0LnBtCitAQCAtOTMsNyArOTMsOSBAQAorICAgICAkdXVpZC0+aW1wb3J0KCdzdHInLAorICAgICAgICAgICAkc3RyID1+IC9eMHgvCisgICAgICAgICA/IGpvaW4gJy0nLCB1bnBhY2soJ3gyIGE4IGE0IGE0IGE0IGExMicsICRzdHIpCistICAgICAgICA6ICRzdHIKKysgICAgICAgIDogJHN0ciA9fiAvLS8KKysgICAgICAgID8gJHN0cgorKyAgICAgICAgOiBqb2luICctJywgdW5wYWNrKCdBOCBBNCBBNCBBNCBBMTInLCAkc3RyKQorICAgICApOworICAgICByZXR1cm4gJHV1aWQtPmV4cG9ydCgnYmluJyk7CisgfQorLS0tIGEvcGVybC91dWlkX2NvbXBhdC50cworKysrIGIvcGVybC91dWlkX2NvbXBhdC50cworQEAgLTI4LDcgKzI4LDcgQEAKKyAjIyAgdXVpZF9jb21wYXQudHM6IERhdGE6OlVVSUQgQmFja3dhcmQgQ29tcGF0aWJpbGl0eSBQZXJsIEFQSSAoUGVybCB0ZXN0IHN1aXRlIHBhcnQpCisgIyMKKyAKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxNDsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAxNjsKKyAKKyBCRUdJTiB7CisgICAgIHVzZV9vaygnRGF0YTo6VVVJRCcpOworQEAgLTUzLDMgKzUzLDUgQEAKKyBvaygkdXVpZDggPSAkdWctPmZyb21fc3RyaW5nKCI2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgiKSk7Cisgb2soJHVnLT5jb21wYXJlKCR1dWlkNywgJHV1aWQ4KSA9PSAwKTsKKyAKKytvaygkdXVpZDkgPSAkdWctPmZyb21fc3RyaW5nKCI2YmE3YjgxMTlkYWQxMWQxODBiNDAwYzA0ZmQ0MzBjOCIpKTsKKytvaygkdWctPmNvbXBhcmUoJHV1aWQ3LCAkdXVpZDkpID09IDApOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvaW5zdGFsbC1wYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2luc3RhbGwtcGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyMjJjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2luc3RhbGwtcGMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAordXVpZC5wYyBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBzbyBzaG91bGQgYmUgaW5zdGFsbGVkIGZyb20gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSwgYW5kIG5vdCAkUy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nIFtzaG91bGQgYmUgc3VibWl0dGVkXQorU2lnbmVkLU9mZi1CeTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworSW5kZXg6IHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0xMS0xMyAxNjo1ODoyOC42MjQxNTYwMDAgKzAwMDAKKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCTIwMTItMTEtMTMgMTc6MDU6MjQuMjI0MTU4NjcwICswMDAwCitAQCAtMjMyLDcgKzIzMiw3IEBACisgCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQobWFuZGlyKS9tYW4xCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDc1NSB1dWlkLWNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpLworIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLWNvbmZpZy4xICQoREVTVERJUikkKG1hbmRpcikvbWFuMS8KKy0JJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUykvdXVpZC5wYyAkKERFU1RESVIpJChsaWJkaXIpL3BrZ2NvbmZpZy8KKysJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0IHV1aWQucGMgJChERVNURElSKSQobGliZGlyKS9wa2djb25maWcvCisgCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCB1dWlkLmggJChERVNURElSKSQoaW5jbHVkZWRpcikvCisgCS1AaWYgWyAiLiQoV0lUSF9EQ0UpIiA9IC55ZXMgXTsgdGhlbiBcCisgCSAgICBlY2hvICIkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkX2RjZS5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpLyI7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkL2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZmMxMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4KKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCitAQCAtMTEzLDE1ICsxMTMsMTUgQEAgYWxsOiAkKFRBUkdFVFMpCisJQCQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDWFgpICQoQ1BQRkxBR1MpICQoQ1hYRkxBR1MpIC1jICQ8CisKKyAkKExJQl9OQU1FKTogJChMSUJfT0JKUykKKy0JQCQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gJChMSUJfTkFNRSkgJChMSUJfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gJChMSUJfTkFNRSkgJChMSUJfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisJICAgIC12ZXJzaW9uLWluZm8gYCQoU0hUT09MKSB2ZXJzaW9uIC1sIGMgLWQgbGlidG9vbCAkKFMpL3V1aWRfdmVycy5oYAorCisgJChEQ0VfTkFNRSk6ICQoRENFX09CSlMpCistCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpIC1vICQoRENFX05BTUUpICQoRENFX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorKwlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAkKExERkxBR1MpIC1vICQoRENFX05BTUUpICQoRENFX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorCSAgICAtdmVyc2lvbi1pbmZvIGAkKFNIVE9PTCkgdmVyc2lvbiAtbCBjIC1kIGxpYnRvb2wgJChTKS91dWlkX3ZlcnMuaGAKKworICQoQ1hYX05BTUUpOiAkKENYWF9PQkpTKQorLQlAJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENYWCkgLW8gJChDWFhfTkFNRSkgJChDWFhfT0JKUykgLXJwYXRoICQobGliZGlyKSBcCisrCUAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ1hYKSAkKExERkxBR1MpIC1vICQoQ1hYX05BTUUpICQoQ1hYX09CSlMpIC1ycGF0aCAkKGxpYmRpcikgXAorCSAgICAtdmVyc2lvbi1pbmZvIGAkKFNIVE9PTCkgdmVyc2lvbiAtbCBjIC1kIGxpYnRvb2wgJChTKS91dWlkX3ZlcnMuaGAKKworICQoUFJHX05BTUUpOiAkKFBSR19PQkpTKSAkKExJQl9OQU1FKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYzkxYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLWxpYnRvb2wucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorUmVtb3ZlIGhhcmRjb2RlZCBsaWJ0b29sIG5hbWUsIGZhbGwgYmFjayB0byBnZW5lcmF0ZWQgbmFtZQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIHVwc3RyZWFtXQorVGhlIHByb2plY3QgYXBwZWFycyB0byBubyBsb25nZXIgYmUgYWNjZXB0aW5nIGNoYW5nZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDozNzoxOS41Nzk2NzI5MzAgLTA1MDAKKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCTIwMTItMDUtMTQgMTQ6Mzc6NDkuMTEyNzMzNzg3IC0wNTAwCitAQCAtMzIsNiArMzIsNyBAQAorIFZQQVRIICAgICAgID0gQHNyY2RpckAKKyBzcmNkaXIgICAgICA9IEBzcmNkaXJACisgdG9wX3NyY2RpciAgPSBAdG9wX3NyY2RpckAKKyt0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAorIFMgICAgICAgICAgID0gJChzcmNkaXIpCisgQyAgICAgICAgICAgPSAuCisgCitAQCAtNTUsNyArNTYsNyBAQAorIENQICAgICAgICAgID0gY3AKKyBSTURJUiAgICAgICA9IHJtZGlyCisgU0hUT09MICAgICAgPSAkKFMpL3NodG9vbAorLUxJQlRPT0wgICAgID0gJChDKS9saWJ0b29sCisrTElCVE9PTCAgICAgPSBATElCVE9PTEAKKyBUUlVFICAgICAgICA9IHRydWUKKyBQT0QyTUFOICAgICA9IHBvZDJtYW4KKyBQRVJMICAgICAgICA9IEBQRVJMQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1ub3N0cmlwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL29zc3AtdXVpZC9vc3NwLXV1aWQvdXVpZC1ub3N0cmlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MDZiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZC91dWlkLW5vc3RyaXAucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2UgZG9uJ3Qgd2FudCBhbnl0aGluZyBzdHJpcHBlZAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vIHVwc3RyZWFtXQorVGhlIHByb2plY3QgYXBwZWFycyB0byBubyBsb25nZXIgYmUgYWNjZXB0aW5nIGNoYW5nZXMuCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXIgdXVpZC0xLjYuMi5vcmlnL01ha2VmaWxlLmluIHV1aWQtMS42LjIvTWFrZWZpbGUuaW4KKy0tLSB1dWlkLTEuNi4yLm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wNS0xNCAxNDo0Mjo0Mi4yMjU3ODk0NTYgLTA1MDAKKysrKyB1dWlkLTEuNi4yL01ha2VmaWxlLmluCTIwMTItMDUtMTQgMTU6MDM6MDMuMTE5NzMzNDAwIC0wNTAwCitAQCAtMjU0LDcgKzI1NCw3IEBACisgCS1AaWYgWyAiLiQoV0lUSF9DWFgpIiA9IC55ZXMgXTsgdGhlbiBcCisgCSAgICAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKENYWF9OQU1FKSAkKERFU1RESVIpJChsaWJkaXIpLzsgXAorIAlmaQorLQlAJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKFNIVE9PTCkgaW5zdGFsbCAtYyAtcyAtbSA3NTUgdXVpZCAkKERFU1RESVIpJChiaW5kaXIpLworKwlAJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA3NTUgdXVpZCAkKERFU1RESVIpJChiaW5kaXIpLworIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA2NDQgJChTKS91dWlkLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xLworIAktQGlmIFsgIi4kKFdJVEhfUEVSTCkiID0gLnllcyBdOyB0aGVuIFwKKyAJICAgIChjZCAkKFMpL3BlcmwgJiYgJChNQUtFKSAkKE1GTEFHUykgaW5zdGFsbCBERVNURElSPSQoREVTVERJUikpOyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9vc3NwLXV1aWQvb3NzcC11dWlkXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTI2YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvb3NzcC11dWlkL29zc3AtdXVpZF8xLjYuMi5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiT1NTUCB1dWlkIGlzIGEgSVNPLUM6MTk5OSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgXAorKEFQSSkgYW5kIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBsaW5lIGludGVyZmFjZSAoQ0xJKSBmb3IgdGhlIGdlbmVyYXRpb24gb2YgXAorRENFIDEuMSwgSVNPL0lFQyAxMTU3ODoxOTk2IGFuZCBSRkMgNDEyMiBjb21wbGlhbnQgVW5pdmVyc2FsbHkgVW5pcXVlIFwKK0lkZW50aWZpZXIgKFVVSUQpLiBJdCBzdXBwb3J0cyBEQ0UgMS4xIHZhcmlhbnQgVVVJRHMgb2YgdmVyc2lvbiAxICh0aW1lIFwKK2FuZCBub2RlIGJhc2VkKSwgdmVyc2lvbiAzIChuYW1lIGJhc2VkLCBNRDUpLCB2ZXJzaW9uIDQgKHJhbmRvbSBudW1iZXIgXAorYmFzZWQpIGFuZCB2ZXJzaW9uIDUgKG5hbWUgYmFzZWQsIFNIQS0xKS4iCitERVNDUklQVElPTl91dWlkID0gIlRoaXMgcGFja2FnZSBjb250YWlucyBhIHRvb2wgdG8gY3JlYXRlIFVuaXZlcnNhbGx5IFwKK1VuaXF1ZSBJZGVudGlmaWVycyAoVVVJRCkgZnJvbSB0aGUgY29tbWFuZC1saW5lLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vc3NwLm9yZy9wa2cvbGliL3V1aWQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzA7ZW5kbGluZT01NTttZDU9YjM5NGZhZGIwMzliYmZjYTZhZDlkOWQ3NjllZTk2MGUgXAorCSAgIGZpbGU6Ly91dWlkX21kNS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjg7bWQ1PTljMWY0YjIyMTg1NDZkZWFlMjRjOTFiZTFkY2YwMGRkIgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vby8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKwkgICBmaWxlOi8vMDAwMS1DaGFuZ2UtbGlicmFyeS1uYW1lLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMi11dWlkLXByZXNlcnZlLW0tb3B0aW9uLXN0YXR1cy1pbi12LW9wdGlvbi1oYW5kbGluZy5wYXRjaCBcCisJICAgZmlsZTovLzAwMDMtRml4LXdoYXRpcy1lbnRyaWVzLnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwNC1maXgtZGF0YS11dWlkLWZyb20tc3RyaW5nLnBhdGNoIFwKKwkgICBmaWxlOi8vdXVpZC1saWJ0b29sLnBhdGNoIFwKKwkgICBmaWxlOi8vdXVpZC1ub3N0cmlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGwtcGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisJICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNWRiMGQ0M2E5MDIyYTZlYmJiYzI1MzM3YWUyODk0MmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTFhNjE1MjI1YmFhNWY4YmI2ODY4MjQ0MjNmNTBlNDQyN2FjZDNmNzBkMzk0NzY1YmRmZjMyODAxZjBmZDViMCIKKworUyA9ICIke1dPUktESVJ9L3V1aWQtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1kY2UgLS13aXRob3V0LWN4eCAtLXdpdGhvdXQtcGVybCAtLXdpdGhvdXQtcGVybC1jb21wYXQgLS13aXRob3V0LXBocCAtLXdpdGhvdXQtcGdzcWwiCitFWFRSQV9PRUNPTkYgPSAiLS1pbmNsdWRlZGlyPSR7aW5jbHVkZWRpcn0vb3NzcCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICMgVGhpcyBwYWNrYWdlIGhhcyBhIGNvbXBsZXRlbHkgY3VzdG9tIGFjbG9jYWwubTQsIHdoaWNoIHNob3VsZCBiZSBhY2luY2x1ZGUubTQuCisgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgbXYgJHtTfS9hY2xvY2FsLm00ICR7U30vYWNpbmNsdWRlLm00CisgIGZpCisKKyAgcm0gLWYgJHtTfS9saWJ0b29sLm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICBta2RpciAtcCAgJHtEfSR7aW5jbHVkZWRpcn0vb3NzcAorICBtdiAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy91dWlkLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL29zc3AtdXVpZC5wYworfQorCitQQUNLQUdFUyA9KyAidXVpZCIKK0ZJTEVTX3V1aWQgPSAiJHtiaW5kaXJ9L3V1aWQiCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlib3NzcC11dWlkLnNvLjE2KiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L3V1aWQtY29uZmlnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJ1dWlkLjMiCitBTFRFUk5BVElWRV9QUklPUklUWV8ke1BOfS1kb2MgPSAiMjAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3V1aWQuM10gPSAiJHttYW5kaXJ9L21hbjMvdXVpZC4zIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGV2aWNlLWRldmVsLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzE4NjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kZXZpY2UtZGV2ZWwuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJQcm92aWRlcyBhIHNtYWxsIHNldCBvZiB0b29scyBmb3IgZGV2ZWxvcG1lbnQgb24gdGhlIGRldmljZSIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUlBST1ZJREVTXyR7UE59ID0gInFlbXUtY29uZmlnIgorUlJFUExBQ0VTXyR7UE59ID0gInFlbXUtY29uZmlnIgorUkNPTkZMSUNUU18ke1BOfSA9ICJxZW11LWNvbmZpZyIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgIGRpc3RjYy1jb25maWcgXAorICAgIG9wcm9maWxldWktc2VydmVyIFwKKyAgICBuZnMtZXhwb3J0LXJvb3QgXAorICAgIGJhc2ggXAorICAgICIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JmYjhjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC5pbmMKQEAgLTAsMCArMSwxNCBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBhcHBseWluZyBhIHBhdGNoIGZpbGUiCitERVNDUklQVElPTiA9ICJwYXRjaCB0YWtlcyBhIHBhdGNoIGZpbGUgY29udGFpbmluZyBhIGRpZmZlcmVuY2UgbGlzdGluZyBcCitwcm9kdWNlZCBieSB0aGUgZGlmZiBwcm9ncmFtIGFuZCBhcHBsaWVzIHRob3NlIGRpZmZlcmVuY2VzIHRvIG9uZSBvciBtb3JlIFwKK29yaWdpbmFsIGZpbGVzLCBwcm9kdWNpbmcgcGF0Y2hlZCB2ZXJzaW9ucy4iCitTRUNUSU9OID0gInV0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvcGF0Y2gvIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcGF0Y2gvcGF0Y2gtJHtQVn0udGFyLmd6IgorUyA9ICIke1dPUktESVJ9L3BhdGNoLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhdGNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL2dudWxpYi5tayBiL2xpYi9nbnVsaWIubWsKK2luZGV4IGUxZDc0ZGIuLmMwZTkyZGQgMTAwNjQ0CistLS0gYS9saWIvZ251bGliLm1rCisrKysgYi9saWIvZ251bGliLm1rCitAQCAtMTg4Miw3ICsxODgyLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoL2RlYmlhbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9kZWJpYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwNzY0NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9kZWJpYW4ucGF0Y2gKQEAgLTAsMCArMSwxMDQyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL200L2hhc2gubTQKKysrKyBwYXRjaC0yLjUuOS9tNC9oYXNoLm00CitAQCAtMCwwICsxLDE1IEBACisrIyBoYXNoLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9IQVNIXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvaGFzaC5jLgorKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0ZGxpYi5oKQorKyAgQUNfSEVBREVSX1NUREJPT0wKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoZnJlZSBtYWxsb2MpCisrXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL200L25hbm9zZWNvbmRfc3RhdC5tNAorKysrIHBhdGNoLTIuNS45L200L25hbm9zZWNvbmRfc3RhdC5tNAorQEAgLTAsMCArMSwzNSBAQAorK0FDX0RFRlVOKFthZ19DSEVDS19OQU5PU0VDT05EX1NUQVRdLAorKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0XSwKKysgICAgIFthY19jdl9zdGF0X25zZWNdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysJXSwKKysJWyByZXR1cm4gc3Quc3RfYXRpbWVuc2VjICsgc3Quc3RfbXRpbWVuc2VjICsgc3Quc3RfY3RpbWVuc2VjOyBdLAorKwlbYWNfY3Zfc3RhdF9uc2VjPXllc10sCisrCVthY19jdl9zdGF0X25zZWM9bm9dKQorKyAgICAgXSkKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X25zZWMgPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUQVRfTlNFQywgMSwgW0RlZmluZSB0byAxIGlmIHN0cnVjdCBzdGF0IGhhcyBuYW5vc2Vjb25kIHRpbWVzdGFtcHMuXSkKKysgICBmaQorKworKyAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0XSwKKysgICAgIFthY19jdl9zdGF0X3RpbWV2YWxdLAorKyAgICAgW0FDX1RSWV9DT01QSUxFKAorKwlbCisrCSAgI2luY2x1ZGUgPHRpbWUuaD4KKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltLnR2X25zZWMgKyBzdC5zdF9tdGltLnR2X25zZWMgKyBzdC5zdF9jdGltLnR2X25zZWM7IF0sCisrCVthY19jdl9zdGF0X3RpbWV2YWw9eWVzXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfdGltZXZhbCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9USU1FVkFMLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgY29tdGFpbnMgc3RydWN0IHRpbWV2YWwncy5dKQorKyAgIGZpXSkKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL01ha2VmaWxlLmluCisrKysgcGF0Y2gtMi41LjkvTWFrZWZpbGUuaW4KK0BAIC02Miw3ICs2Miw3IEBACisgU0hFTEwgPSAvYmluL3NoCisgCisgTElCU1JDUyA9IGVycm9yLmMgbWFsbG9jLmMgbWVtY2hyLmMgbWtkaXIuYyBcCistCXJlYWxsb2MuYyBybWRpci5jIHN0cmNhc2VjbXAuYyBzdHJuY2FzZWNtcC5jCisrCXJlYWxsb2MuYyBybWRpci5jIHN0cmNhc2VjbXAuYyBzdHJuY2FzZWNtcC5jIGhhc2guYworIFNSQ1MgPSAkKExJQlNSQ1MpIFwKKyAJYWRkZXh0LmMgYXJnbWF0Y2guYyBiYWNrdXBmaWxlLmMgXAorIAliYXNlbmFtZS5jIGRpcm5hbWUuYyBcCitAQCAtNzgsMTIgKzc4LDEyIEBACisgCW1ha2V0aW1lLiQoT0JKRVhUKSBwYXJ0aW1lLiQoT0JKRVhUKSBcCisgCXBhdGNoLiQoT0JKRVhUKSBwY2guJChPQkpFWFQpIFwKKyAJcXVvdGUuJChPQkpFWFQpIHF1b3RlYXJnLiQoT0JKRVhUKSBxdW90ZXN5cy4kKE9CSkVYVCkgXAorLQl1dGlsLiQoT0JKRVhUKSB2ZXJzaW9uLiQoT0JKRVhUKSB4bWFsbG9jLiQoT0JKRVhUKQorKwl1dGlsLiQoT0JKRVhUKSB2ZXJzaW9uLiQoT0JKRVhUKSB4bWFsbG9jLiQoT0JKRVhUKSBoYXNoLiQoT0JKRVhUKQorIEhEUlMgPSBhcmdtYXRjaC5oIGJhY2t1cGZpbGUuaCBjb21tb24uaCBkaXJuYW1lLmggXAorIAllcnJvci5oIGdldG9wdC5oIGdldHRleHQuaCBcCisgCWlucC5oIG1ha2V0aW1lLmggcGFydGltZS5oIHBjaC5oIFwKKyAJcXVvdGUuaCBxdW90ZWFyZy5oIHF1b3Rlc3lzLmggXAorLQl1bmxvY2tlZC1pby5oIHV0aWwuaCB2ZXJzaW9uLmggeGFsbG9jLmgKKysJdW5sb2NrZWQtaW8uaCB1dGlsLmggdmVyc2lvbi5oIHhhbGxvYy5oIGhhc2guaAorIE1JU0MgPSBBVVRIT1JTIENPUFlJTkcgQ2hhbmdlTG9nIElOU1RBTEwgTWFrZWZpbGUuaW4gTkVXUyBSRUFETUUgXAorIAlhY2xvY2FsLm00IFwKKyAJY29uZmlnLmhpbiBjb25maWd1cmUgY29uZmlndXJlLmFjIFwKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL2FjbG9jYWwubTQKKysrKyBwYXRjaC0yLjUuOS9hY2xvY2FsLm00CitAQCAtMSwzICsxLDEwNTggQEAKKytkbmwgYWNsb2NhbC5tNCBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuNC1wNgorKworK2RubCBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUtOCwgMTk5OSwgMjAwMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKytkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKworK2RubCBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKytkbmwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKytkbmwgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorK2RubCBQQVJUSUNVTEFSIFBVUlBPU0UuCisrCisrIyBsaWItcHJlZml4Lm00IHNlcmlhbCAzIChnZXR0ZXh0LTAuMTMpCisrZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorKworK2RubCBBQ19MSUJfQVJHX1dJVEggaXMgc3lub255bW91cyB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZi0yLjEzLCBhbmQKKytkbmwgc2ltaWxhciB0byBBQ19BUkdfV0lUSCBpbiBhdXRvY29uZiAyLjUyLi4uMi41NyBleGNlcHQgdGhhdCBpcyBkb2Vzbid0CisrZG5sIHJlcXVpcmUgZXhjZXNzaXZlIGJyYWNrZXRpbmcuCisraWZkZWYoW0FDX0hFTFBfU1RSSU5HXSwKKytbQUNfREVGVU4oW0FDX0xJQl9BUkdfV0lUSF0sIFtBQ19BUkdfV0lUSChbJDFdLFtbJDJdXSxbJDNdLFskNF0pXSldLAorK1tBQ19ERUZVTihbQUNfXVtMSUJfQVJHX1dJVEhdLCBbQUNfQVJHX1dJVEgoWyQxXSxbJDJdLFskM10sWyQ0XSldKV0pCisrCisrZG5sIEFDX0xJQl9QUkVGSVggYWRkcyB0byB0aGUgQ1BQRkxBR1MgYW5kIExERkxBR1MgdGhlIGZsYWdzIHRoYXQgYXJlIG5lZWRlZAorK2RubCB0byBhY2Nlc3MgcHJldmlvdXNseSBpbnN0YWxsZWQgbGlicmFyaWVzLiBUaGUgYmFzaWMgYXNzdW1wdGlvbiBpcyB0aGF0CisrZG5sIGEgdXNlciB3aWxsIHdhbnQgcGFja2FnZXMgdG8gdXNlIG90aGVyIHBhY2thZ2VzIGhlIHByZXZpb3VzbHkgaW5zdGFsbGVkCisrZG5sIHdpdGggdGhlIHNhbWUgLS1wcmVmaXggb3B0aW9uLgorK2RubCBUaGlzIG1hY3JvIGlzIG5vdCBuZWVkZWQgaWYgb25seSBBQ19MSUJfTElOS0ZMQUdTIGlzIHVzZWQgdG8gbG9jYXRlCisrZG5sIGxpYnJhcmllcywgYnV0IGlzIG90aGVyd2lzZSB2ZXJ5IGNvbnZlbmllbnQuCisrQUNfREVGVU4oW0FDX0xJQl9QUkVGSVhdLAorK1sKKysgIEFDX0JFRk9SRShbJDBdLCBbQUNfTElCX0xJTktGTEFHU10pCisrICBBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSkKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBkbmwgQnkgZGVmYXVsdCwgbG9vayBpbiAkaW5jbHVkZWRpciBhbmQgJGxpYmRpci4KKysgIHVzZV9hZGRpdGlvbmFsPXllcworKyAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFsKKysgICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiCisrICAgIGV2YWwgYWRkaXRpb25hbF9saWJkaXI9XCIkbGliZGlyXCIKKysgIF0pCisrICBBQ19MSUJfQVJHX1dJVEgoW2xpYi1wcmVmaXhdLAorK1sgIC0td2l0aC1saWItcHJlZml4Wz1ESVJdIHNlYXJjaCBmb3IgbGlicmFyaWVzIGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliCisrICAtLXdpdGhvdXQtbGliLXByZWZpeCAgICBkb24ndCBzZWFyY2ggZm9yIGxpYnJhcmllcyBpbiBpbmNsdWRlZGlyIGFuZCBsaWJkaXJdLAorK1sKKysgICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuCisrICAgICAgdXNlX2FkZGl0aW9uYWw9bm8KKysgICAgZWxzZQorKyAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWCI7IHRoZW4KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgICAgICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICAgICAgICBdKQorKyAgICAgIGVsc2UKKysgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVkZSIKKysgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC9saWIiCisrICAgICAgZmkKKysgICAgZmkKKytdKQorKyAgaWYgdGVzdCAkdXNlX2FkZGl0aW9uYWwgPSB5ZXM7IHRoZW4KKysgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRDUFBGTEFHUy4KKysgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9pbmNsdWRlLAorKyAgICBkbmwgICAyLiBpZiBpdCdzIGFscmVhZHkgcHJlc2VudCBpbiAkQ1BQRkxBR1MsCisrICAgIGRubCAgIDMuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisrICAgICAgaGF2ZWl0PQorKyAgICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbgorKyAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJENQUEZMQUdTLgorKyAgICAgICAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBmaQorKyAgICBkbmwgUG90ZW50aWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTERGTEFHUy4KKysgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisrICAgIGRubCAgIDIuIGlmIGl0J3MgYWxyZWFkeSBwcmVzZW50IGluICRMREZMQUdTLAorKyAgICBkbmwgICAzLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICBkbmwgICA0LiBpZiBpdCBkb2Vzbid0IGV4aXN0IGFzIGEgZGlyZWN0b3J5LgorKyAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgIGhhdmVpdD0KKysgICAgICBmb3IgeCBpbiAkTERGTEFHUzsgZG8KKysgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICBicmVhaworKyAgICAgICAgZmkKKysgICAgICBkb25lCisrICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiID0gIlgvdXNyL2xvY2FsL2xpYiI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICBsaW51eCopIGhhdmVpdD15ZXM7OworKyAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMREZMQUdTLgorKyAgICAgICAgICAgIExERkxBR1M9IiR7TERGTEFHU30ke0xERkxBR1M6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgIGZpCisrICAgICAgICBmaQorKyAgICAgIGZpCisrICAgIGZpCisrICBmaQorK10pCisrCisrZG5sIEFDX0xJQl9QUkVQQVJFX1BSRUZJWCBjcmVhdGVzIHZhcmlhYmxlcyBhY2xfZmluYWxfcHJlZml4LAorK2RubCBhY2xfZmluYWxfZXhlY19wcmVmaXgsIGNvbnRhaW5pbmcgdGhlIHZhbHVlcyB0byB3aGljaCAkcHJlZml4IGFuZAorK2RubCAkZXhlY19wcmVmaXggd2lsbCBleHBhbmQgYXQgdGhlIGVuZCBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4KKytBQ19ERUZVTihbQUNfTElCX1BSRVBBUkVfUFJFRklYXSwKKytbCisrICBkbmwgVW5mb3J0dW5hdGVseSwgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBnZXQgb25seSBmaW5hbGx5IGRldGVybWluZWQKKysgIGRubCBhdCB0aGUgZW5kIG9mIGNvbmZpZ3VyZS4KKysgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4KKysgICAgYWNsX2ZpbmFsX3ByZWZpeD0iJGFjX2RlZmF1bHRfcHJlZml4IgorKyAgZWxzZQorKyAgICBhY2xfZmluYWxfcHJlZml4PSIkcHJlZml4IgorKyAgZmkKKysgIGlmIHRlc3QgIlgkZXhlY19wcmVmaXgiID0gIlhOT05FIjsgdGhlbgorKyAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKysgIGVsc2UKKysgICAgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisrICBmaQorKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKysgIGV2YWwgYWNsX2ZpbmFsX2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiCisrICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiCisrXSkKKysKKytkbmwgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtzdGF0ZW1lbnRdKSBldmFsdWF0ZXMgc3RhdGVtZW50LCB3aXRoIHRoZQorK2RubCB2YXJpYWJsZXMgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBib3VuZCB0byB0aGUgdmFsdWVzIHRoZXkgd2lsbCBoYXZlCisrZG5sIGF0IHRoZSBlbmQgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisrQUNfREVGVU4oW0FDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWF0sCisrWworKyAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCIKKysgIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiCisrICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCIKKysgICQxCisrICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4IgorKyAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4IgorK10pCisrCisrIyBsaWItbGluay5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjEyKQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK2RubCBGcm9tIEJydW5vIEhhaWJsZS4KKysKKytkbmwgQUNfTElCX0xJTktGTEFHUyhuYW1lIFssIGRlcGVuZGVuY2llc10pIHNlYXJjaGVzIGZvciBsaWJuYW1lIGFuZAorK2RubCB0aGUgbGlicmFyaWVzIGNvcnJlc3BvbmRpbmcgdG8gZXhwbGljaXQgYW5kIGltcGxpY2l0IGRlcGVuZGVuY2llcy4KKytkbmwgU2V0cyBhbmQgQUNfU1VCU1RzIHRoZSBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZAorK2RubCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUuCisrQUNfREVGVU4oW0FDX0xJQl9MSU5LRkxBR1NdLAorK1sKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9QUkVQQVJFX1BSRUZJWF0pCisrICBBQ19SRVFVSVJFKFtBQ19MSUJfUlBBVEhdKQorKyAgZGVmaW5lKFtOYW1lXSxbdHJhbnNsaXQoWyQxXSxbLi8tXSwgW19fX10pXSkKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVbXV9saWJzXSwgWworKyAgICBBQ19MSUJfTElOS0ZMQUdTX0JPRFkoWyQxXSwgWyQyXSkKKysgICAgYWNfY3ZfbGliW11OYW1lW11fbGlicz0iJExJQltdTkFNRSIKKysgICAgYWNfY3ZfbGliW11OYW1lW11fbHRsaWJzPSIkTFRMSUJbXU5BTUUiCisrICAgIGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzPSIkSU5DW11OQU1FIgorKyAgXSkKKysgIExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2xpYnMiCisrICBMVExJQltdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2x0bGlicyIKKysgIElOQ1tdTkFNRT0iJGFjX2N2X2xpYltdTmFtZVtdX2NwcGZsYWdzIgorKyAgQUNfTElCX0FQUEVORFRPVkFSKFtDUFBGTEFHU10sIFskSU5DXU5BTUUpCisrICBBQ19TVUJTVChbTElCXU5BTUUpCisrICBBQ19TVUJTVChbTFRMSUJdTkFNRSkKKysgIGRubCBBbHNvIHNldCBIQVZFX0xJQltdTkFNRSBzbyB0aGF0IEFDX0xJQl9IQVZFX0xJTktGTEFHUyBjYW4gcmV1c2UgdGhlCisrICBkbmwgcmVzdWx0cyBvZiB0aGlzIHNlYXJjaCB3aGVuIHRoaXMgbGlicmFyeSBhcHBlYXJzIGFzIGEgZGVwZW5kZW5jeS4KKysgIEhBVkVfTElCW11OQU1FPXllcworKyAgdW5kZWZpbmUoW05hbWVdKQorKyAgdW5kZWZpbmUoW05BTUVdKQorK10pCisrCisrZG5sIEFDX0xJQl9IQVZFX0xJTktGTEFHUyhuYW1lLCBkZXBlbmRlbmNpZXMsIGluY2x1ZGVzLCB0ZXN0Y29kZSkKKytkbmwgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQKKytkbmwgaW1wbGljaXQgZGVwZW5kZW5jaWVzLCB0b2dldGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgaW5jbHVkZSBmaWxlcyBhbmQKKytkbmwgdGhlIGFiaWxpdHkgdG8gY29tcGlsZSBhbmQgbGluayB0aGUgc3BlY2lmaWVkIHRlc3Rjb2RlLiBJZiBmb3VuZCwgaXQKKytkbmwgc2V0cyBhbmQgQUNfU1VCU1RzIEhBVkVfTElCJHtOQU1FfT15ZXMgYW5kIHRoZSBMSUIke05BTUV9IGFuZAorK2RubCBMVExJQiR7TkFNRX0gdmFyaWFibGVzIGFuZCBhdWdtZW50cyB0aGUgQ1BQRkxBR1MgdmFyaWFibGUsIGFuZAorK2RubCAjZGVmaW5lcyBIQVZFX0xJQiR7TkFNRX0gdG8gMS4gT3RoZXJ3aXNlLCBpdCBzZXRzIGFuZCBBQ19TVUJTVHMKKytkbmwgSEFWRV9MSUIke05BTUV9PW5vIGFuZCBMSUIke05BTUV9IGFuZCBMVExJQiR7TkFNRX0gdG8gZW1wdHkuCisrQUNfREVGVU4oW0FDX0xJQl9IQVZFX0xJTktGTEFHU10sCisrWworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BSRVBBUkVfUFJFRklYXSkKKysgIEFDX1JFUVVJUkUoW0FDX0xJQl9SUEFUSF0pCisrICBkZWZpbmUoW05hbWVdLFt0cmFuc2xpdChbJDFdLFsuLy1dLCBbX19fXSldKQorKyAgZGVmaW5lKFtOQU1FXSxbdHJhbnNsaXQoWyQxXSxbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX19dKV0pCisrCisrICBkbmwgU2VhcmNoIGZvciBsaWJbXU5hbWUgYW5kIGRlZmluZSBMSUJbXU5BTUUsIExUTElCW11OQU1FIGFuZCBJTkNbXU5BTUUKKysgIGRubCBhY2NvcmRpbmdseS4KKysgIEFDX0xJQl9MSU5LRkxBR1NfQk9EWShbJDFdLCBbJDJdKQorKworKyAgZG5sIEFkZCAkSU5DW11OQU1FIHRvIENQUEZMQUdTIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSBmb2xsb3dpbmcgY2hlY2tzLAorKyAgZG5sIGJlY2F1c2UgaWYgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBsaWJbXU5hbWUgYW5kIG5vdCBkaXNhYmxlZCBpdHMgdXNlCisrICBkbmwgdmlhIC0td2l0aG91dC1saWJbXU5hbWUtcHJlZml4LCBoZSB3YW50cyB0byB1c2UgaXQuCisrICBhY19zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisrICBBQ19MSUJfQVBQRU5EVE9WQVIoW0NQUEZMQUdTXSwgWyRJTkNdTkFNRSkKKysKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbGliW10kMV0sIFthY19jdl9saWJbXU5hbWVdLCBbCisrICAgIGFjX3NhdmVfTElCUz0iJExJQlMiCisrICAgIExJQlM9IiRMSUJTICRMSUJbXU5BTUUiCisrICAgIEFDX1RSWV9MSU5LKFskM10sIFskNF0sIFthY19jdl9saWJbXU5hbWU9eWVzXSwgW2FjX2N2X2xpYltdTmFtZT1ub10pCisrICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCisrICBdKQorKyAgaWYgdGVzdCAiJGFjX2N2X2xpYltdTmFtZSIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9MSUJbXU5BTUU9eWVzCisrICAgIEFDX0RFRklORShbSEFWRV9MSUJdTkFNRSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJDEgbGlicmFyeS5dKQorKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBsaW5rIHdpdGggbGliW10kMV0pCisrICAgIEFDX01TR19SRVNVTFQoWyRMSUJbXU5BTUVdKQorKyAgZWxzZQorKyAgICBIQVZFX0xJQltdTkFNRT1ubworKyAgICBkbmwgSWYgJExJQltdTkFNRSBkaWRuJ3QgbGVhZCB0byBhIHVzYWJsZSBsaWJyYXJ5LCB3ZSBkb24ndCBuZWVkCisrICAgIGRubCAkSU5DW11OQU1FIGVpdGhlci4KKysgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIgorKyAgICBMSUJbXU5BTUU9CisrICAgIExUTElCW11OQU1FPQorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xJQl1OQU1FKQorKyAgQUNfU1VCU1QoW0xUTElCXU5BTUUpCisrICB1bmRlZmluZShbTmFtZV0pCisrICB1bmRlZmluZShbTkFNRV0pCisrXSkKKysKKytkbmwgRGV0ZXJtaW5lIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbnQgcGFyYW1ldGVycyBuZWVkZWQgdG8gdXNlIHJwYXRoOgorK2RubCBsaWJleHQsIHNobGliZXh0LCBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLAorK2RubCBoYXJkY29kZV9kaXJlY3QsIGhhcmRjb2RlX21pbnVzX0wuCisrQUNfREVGVU4oW0FDX0xJQl9SUEFUSF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pICAgICAgICAgICAgICAgIGRubCB3ZSB1c2UgJENDLCAkR0NDLCAkTERGTEFHUworKyAgQUNfUkVRVUlSRShbQUNfTElCX1BST0dfTERdKSAgICAgICAgICAgIGRubCB3ZSB1c2UgJExELCAkd2l0aF9nbnVfbGQKKysgIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkgICAgICAgICBkbmwgd2UgdXNlICRob3N0CisrICBBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSkgZG5sIHdlIHVzZSAkYWNfYXV4X2RpcgorKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzaGFyZWQgbGlicmFyeSBydW4gcGF0aCBvcmlnaW5dLCBhY2xfY3ZfcnBhdGgsIFsKKysgICAgQ0M9IiRDQyIgR0NDPSIkR0NDIiBMREZMQUdTPSIkTERGTEFHUyIgTEQ9IiRMRCIgd2l0aF9nbnVfbGQ9IiR3aXRoX2dudV9sZCIgXAorKyAgICAke0NPTkZJR19TSEVMTC0vYmluL3NofSAiJGFjX2F1eF9kaXIvY29uZmlnLnJwYXRoIiAiJGhvc3QiID4gY29uZnRlc3Quc2gKKysgICAgLiAuL2NvbmZ0ZXN0LnNoCisrICAgIHJtIC1mIC4vY29uZnRlc3Quc2gKKysgICAgYWNsX2N2X3JwYXRoPWRvbmUKKysgIF0pCisrICB3bD0iJGFjbF9jdl93bCIKKysgIGxpYmV4dD0iJGFjbF9jdl9saWJleHQiCisrICBzaGxpYmV4dD0iJGFjbF9jdl9zaGxpYmV4dCIKKysgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIKKysgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9IiRhY2xfY3ZfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIKKysgIGhhcmRjb2RlX2RpcmVjdD0iJGFjbF9jdl9oYXJkY29kZV9kaXJlY3QiCisrICBoYXJkY29kZV9taW51c19MPSIkYWNsX2N2X2hhcmRjb2RlX21pbnVzX0wiCisrICBkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVzZXIgd2FudHMgcnBhdGggaGFuZGxpbmcgYXQgYWxsLgorKyAgQUNfQVJHX0VOQUJMRShycGF0aCwKKysgICAgWyAgLS1kaXNhYmxlLXJwYXRoICAgICAgICAgZG8gbm90IGhhcmRjb2RlIHJ1bnRpbWUgbGlicmFyeSBwYXRoc10sCisrICAgIDosIGVuYWJsZV9ycGF0aD15ZXMpCisrXSkKKysKKytkbmwgQUNfTElCX0xJTktGTEFHU19CT0RZKG5hbWUgWywgZGVwZW5kZW5jaWVzXSkgc2VhcmNoZXMgZm9yIGxpYm5hbWUgYW5kCisrZG5sIHRoZSBsaWJyYXJpZXMgY29ycmVzcG9uZGluZyB0byBleHBsaWNpdCBhbmQgaW1wbGljaXQgZGVwZW5kZW5jaWVzLgorK2RubCBTZXRzIHRoZSBMSUIke05BTUV9LCBMVExJQiR7TkFNRX0gYW5kIElOQyR7TkFNRX0gdmFyaWFibGVzLgorK0FDX0RFRlVOKFtBQ19MSUJfTElOS0ZMQUdTX0JPRFldLAorK1sKKysgIGRlZmluZShbTkFNRV0sW3RyYW5zbGl0KFskMV0sW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldKQorKyAgZG5sIEJ5IGRlZmF1bHQsIGxvb2sgaW4gJGluY2x1ZGVkaXIgYW5kICRsaWJkaXIuCisrICB1c2VfYWRkaXRpb25hbD15ZXMKKysgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbCisrICAgIGV2YWwgYWRkaXRpb25hbF9pbmNsdWRlZGlyPVwiJGluY2x1ZGVkaXJcIgorKyAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiCisrICBdKQorKyAgQUNfTElCX0FSR19XSVRIKFtsaWIkMS1wcmVmaXhdLAorK1sgIC0td2l0aC1saWIkMS1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliJDEgaW4gRElSL2luY2x1ZGUgYW5kIERJUi9saWIKKysgIC0td2l0aG91dC1saWIkMS1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliJDEgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyXSwKKytbCisrICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAiWG5vIjsgdGhlbgorKyAgICAgIHVzZV9hZGRpdGlvbmFsPW5vCisrICAgIGVsc2UKKysgICAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlgiOyB0aGVuCisrICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoWworKyAgICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCIKKysgICAgICAgICAgZXZhbCBhZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIgorKyAgICAgICAgXSkKKysgICAgICBlbHNlCisrICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiCisrICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvbGliIgorKyAgICAgIGZpCisrICAgIGZpCisrXSkKKysgIGRubCBTZWFyY2ggdGhlIGxpYnJhcnkgYW5kIGl0cyBkZXBlbmRlbmNpZXMgaW4gJGFkZGl0aW9uYWxfbGliZGlyIGFuZAorKyAgZG5sICRMREZMQUdTLiBVc2luZyBicmVhZHRoLWZpcnN0LXNlYWNoLgorKyAgTElCW11OQU1FPQorKyAgTFRMSUJbXU5BTUU9CisrICBJTkNbXU5BTUU9CisrICBycGF0aGRpcnM9CisrICBsdHJwYXRoZGlycz0KKysgIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0KKysgIG5hbWVzX25leHRfcm91bmQ9JyQxICQyJworKyAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25leHRfcm91bmQiOyBkbworKyAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCIKKysgICAgbmFtZXNfbmV4dF9yb3VuZD0KKysgICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7IGRvCisrICAgICAgYWxyZWFkeV9oYW5kbGVkPQorKyAgICAgIGZvciBuIGluICRuYW1lc19hbHJlYWR5X2hhbmRsZWQ7IGRvCisrICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuCisrICAgICAgICAgIGFscmVhZHlfaGFuZGxlZD15ZXMKKysgICAgICAgICAgYnJlYWsKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGlmIHRlc3QgLXogIiRhbHJlYWR5X2hhbmRsZWQiOyB0aGVuCisrICAgICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUiCisrICAgICAgICBkbmwgU2VlIGlmIGl0IHdhcyBhbHJlYWR5IGxvY2F0ZWQgYnkgYW4gZWFybGllciBBQ19MSUJfTElOS0ZMQUdTCisrICAgICAgICBkbmwgb3IgQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbGwuCisrICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAtZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLXxBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX3wnYAorKyAgICAgICAgZXZhbCB2YWx1ZT1cIlwkSEFWRV9MSUIkdXBwZXJuYW1lXCIKKysgICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4KKysgICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHllczsgdGhlbgorKyAgICAgICAgICAgIGV2YWwgdmFsdWU9XCJcJExJQiR1cHBlcm5hbWVcIgorKyAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kdmFsdWUiCisrICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIKKysgICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JHZhbHVlIgorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIEFuIGVhcmxpZXIgY2FsbCB0byBBQ19MSUJfSEFWRV9MSU5LRkxBR1MgaGFzIGRldGVybWluZWQKKysgICAgICAgICAgICBkbmwgdGhhdCB0aGlzIGxpYnJhcnkgZG9lc24ndCBleGlzdC4gU28ganVzdCBkcm9wIGl0LgorKyAgICAgICAgICAgIDoKKysgICAgICAgICAgZmkKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgZG5sIFNlYXJjaCB0aGUgbGlicmFyeSBsaWIkbmFtZSBpbiAkYWRkaXRpb25hbF9saWJkaXIgYW5kICRMREZMQUdTCisrICAgICAgICAgIGRubCBhbmQgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUvJExUTElCTkFNRS4KKysgICAgICAgICAgZm91bmRfZGlyPQorKyAgICAgICAgICBmb3VuZF9sYT0KKysgICAgICAgICAgZm91bmRfc289CisrICAgICAgICAgIGZvdW5kX2E9CisrICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHNobGliZXh0IiAmJiB0ZXN0IC1mICIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJHNobGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgZm91bmRfZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiCisrICAgICAgICAgICAgICBmb3VuZF9zbz0iJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRzaGxpYmV4dCIKKysgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRhZGRpdGlvbmFsX2xpYmRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLiRsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICBmb3VuZF9hPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUuJGxpYmV4dCIKKysgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGFkZGl0aW9uYWxfbGliZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZvdW5kX2xhPSIkYWRkaXRpb25hbF9saWJkaXIvbGliJG5hbWUubGEiCisrICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGZpCisrICAgICAgICAgIGZpCisrICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbgorKyAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICBjYXNlICIkeCIgaW4KKysgICAgICAgICAgICAgICAgLUwqKQorKyAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYAorKyAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYmV4dCIgJiYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kc2hsaWJleHQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci9saWIkbmFtZS4kc2hsaWJleHQiCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyL2xpYiRuYW1lLmxhIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS4kbGliZXh0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisrICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2E9IiRkaXIvbGliJG5hbWUuJGxpYmV4dCIKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbmFtZS5sYSI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci9saWIkbmFtZS5sYSIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgZXNhYworKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkb25lCisrICAgICAgICAgIGZpCisrICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICBkbmwgRm91bmQgdGhlIGxpYnJhcnkuCisrICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKysgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgIGRubCBMaW5raW5nIHdpdGggYSBzaGFyZWQgbGlicmFyeS4gV2UgYXR0ZW1wdCB0byBoYXJkY29kZSBpdHMKKysgICAgICAgICAgICAgIGRubCBkaXJlY3RvcnkgaW50byB0aGUgZXhlY3V0YWJsZSdzIHJ1bnBhdGgsIHVubGVzcyBpdCdzIHRoZQorKyAgICAgICAgICAgICAgZG5sIHN0YW5kYXJkIC91c3IvbGliLgorKyAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIgPSBubyB8fCB0ZXN0ICJYJGZvdW5kX2RpciIgPSAiWC91c3IvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICBkbmwgTm8gaGFyZGNvZGluZyBpcyBuZWVkZWQuCisrICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkbmwgVXNlIGFuIGV4cGxpY2l0IG9wdGlvbiB0byBoYXJkY29kZSBESVIgaW50byB0aGUgcmVzdWx0aW5nCisrICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisrICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIGx0cnBhdGhkaXJzLgorKyAgICAgICAgICAgICAgICBkbmwgVGhlIGx0cnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExUTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8KKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBkbmwgVGhlIGhhcmRjb2RpbmcgaW50byAkTElCTkFNRSBpcyBzeXN0ZW0gZGVwZW5kZW50LgorKyAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGRubCBVc2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisrICAgICAgICAgICAgICAgICAgZG5sIHJlc3VsdGluZyBiaW5hcnkuCisrICAgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZm91bmRfc28iCisrICAgICAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgJiYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGRubCBVc2UgYW4gZXhwbGljaXQgb3B0aW9uIHRvIGhhcmRjb2RlIERJUiBpbnRvIHRoZSByZXN1bHRpbmcKKysgICAgICAgICAgICAgICAgICAgIGRubCBiaW5hcnkuCisrICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgIGRubCBUaGUgcnBhdGhkaXJzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2RpciIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgZG5sIFJlbHkgb24gIi1MJGZvdW5kX2RpciIuCisrICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZSBMREZMQUdTCisrICAgICAgICAgICAgICAgICAgICBkbmwgb3IgdGhlIGFscmVhZHkgY29uc3RydWN0ZWQgJExJQk5BTUUKKysgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGZvdW5kX2RpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LUwkZm91bmRfZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGZvdW5kX3NvIgorKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgV2UgY2Fubm90IHVzZSAkaGFyZGNvZGVfcnVucGF0aF92YXIgYW5kIExEX1JVTl9QQVRICisrICAgICAgICAgICAgICAgICAgICAgIGRubCBoZXJlLCBiZWNhdXNlIHRoaXMgZG9lc24ndCBmaXQgaW4gZmxhZ3MgcGFzc2VkIHRvIHRoZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgY29tcGlsZXIuIFNvIGdpdmUgdXAuIE5vIGhhcmRjb2RpbmcuIFRoaXMgYWZmZWN0cyBvbmx5CisrICAgICAgICAgICAgICAgICAgICAgIGRubCB2ZXJ5IG9sZCBzeXN0ZW1zLgorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgRklYTUU6IE5vdCBzdXJlIHdoZXRoZXIgd2Ugc2hvdWxkIHVzZQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgIi1MJGZvdW5kX2RpciAtbCRuYW1lIiBvciAiLUwkZm91bmRfZGlyICRmb3VuZF9zbyIKKysgICAgICAgICAgICAgICAgICAgICAgZG5sIGhlcmUuCisrICAgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9LWwkbmFtZSIKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4KKysgICAgICAgICAgICAgICAgZG5sIExpbmtpbmcgd2l0aCBhIHN0YXRpYyBsaWJyYXJ5LgorKyAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfSRmb3VuZF9hIgorKyAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICBkbmwgV2Ugc2hvdWxkbid0IGNvbWUgaGVyZSwgYnV0IGFueXdheSBpdCdzIGdvb2QgdG8gaGF2ZSBhCisrICAgICAgICAgICAgICAgIGRubCBmYWxsYmFjay4KKysgICAgICAgICAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSIKKysgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBkbmwgQXNzdW1lIHRoZSBpbmNsdWRlIGZpbGVzIGFyZSBuZWFyYnkuCisrICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQorKyAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9kaXIiIGluCisrICAgICAgICAgICAgICAqL2xpYiB8ICovbGliLykKKysgICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICdzLC9saWIvKiQsLCdgCisrICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIKKysgICAgICAgICAgICAgICAgOzsKKysgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9pbmNsdWRlZGlyIHRvICRJTkNOQU1FLgorKyAgICAgICAgICAgICAgZG5sIEJ1dCBkb24ndCBhZGQgaXQKKysgICAgICAgICAgICAgIGRubCAgIDEuIGlmIGl0J3MgdGhlIHN0YW5kYXJkIC91c3IvaW5jbHVkZSwKKysgICAgICAgICAgICAgIGRubCAgIDIuIGlmIGl0J3MgL3Vzci9sb2NhbC9pbmNsdWRlIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJENQUEZMQUdTIG9yIHRoZSBhbHJlYWR5CisrICAgICAgICAgICAgICBkbmwgICAgICBjb25zdHJ1Y3RlZCAkSU5DTkFNRSwKKysgICAgICAgICAgICAgIGRubCAgIDQuIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYXMgYSBkaXJlY3RvcnkuCisrICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNyL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiID0gIlgvdXNyL2xvY2FsL2luY2x1ZGUiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKysgICAgICAgICAgICAgICAgICAgICAgbGludXgqKSBoYXZlaXQ9eWVzOzsKKysgICAgICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgIGZvciB4IGluICRDUFBGTEFHUyAkSU5DW11OQU1FOyBkbworKyAgICAgICAgICAgICAgICAgICAgQUNfTElCX1dJVEhfRklOQUxfUFJFRklYKFtldmFsIHg9XCIkeFwiXSkKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2luY2x1ZGVkaXIgdG8gJElOQ05BTUUuCisrICAgICAgICAgICAgICAgICAgICAgIElOQ1tdTkFNRT0iJHtJTkNbXU5BTUV9JHtJTkNbXU5BTUU6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIgorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICAgIGRubCBMb29rIGZvciBkZXBlbmRlbmNpZXMuCisrICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZvdW5kX2xhIjsgdGhlbgorKyAgICAgICAgICAgICAgZG5sIFJlYWQgdGhlIC5sYSBmaWxlLiBJdCBkZWZpbmVzIHRoZSB2YXJpYWJsZXMKKysgICAgICAgICAgICAgIGRubCBkbG5hbWUsIGxpYnJhcnlfbmFtZXMsIG9sZF9saWJyYXJ5LCBkZXBlbmRlbmN5X2xpYnMsIGN1cnJlbnQsCisrICAgICAgICAgICAgICBkbmwgYWdlLCByZXZpc2lvbiwgaW5zdGFsbGVkLCBkbG9wZW4sIGRscHJlb3BlbiwgbGliZGlyLgorKyAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIiCisrICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluCisrICAgICAgICAgICAgICAgICovKiB8ICpcXCopIC4gIiRmb3VuZF9sYSIgOzsKKysgICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRfbGEiIDs7CisrICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICBsaWJkaXI9IiRzYXZlX2xpYmRpciIKKysgICAgICAgICAgICAgIGRubCBXZSB1c2Ugb25seSBkZXBlbmRlbmN5X2xpYnMuCisrICAgICAgICAgICAgICBmb3IgZGVwIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisrICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluCisrICAgICAgICAgICAgICAgICAgLUwqKQorKyAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1MLy8nYAorKyAgICAgICAgICAgICAgICAgICAgZG5sIFBvdGVudGlhbGx5IGFkZCAkYWRkaXRpb25hbF9saWJkaXIgdG8gJExJQk5BTUUgYW5kICRMVExJQk5BTUUuCisrICAgICAgICAgICAgICAgICAgICBkbmwgQnV0IGRvbid0IGFkZCBpdAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMS4gaWYgaXQncyB0aGUgc3RhbmRhcmQgL3Vzci9saWIsCisrICAgICAgICAgICAgICAgICAgICBkbmwgICAyLiBpZiBpdCdzIC91c3IvbG9jYWwvbGliIGFuZCB3ZSBhcmUgdXNpbmcgR0NDIG9uIExpbnV4LAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgMy4gaWYgaXQncyBhbHJlYWR5IHByZXNlbnQgaW4gJExERkxBR1Mgb3IgdGhlIGFscmVhZHkKKysgICAgICAgICAgICAgICAgICAgIGRubCAgICAgIGNvbnN0cnVjdGVkICRMSUJOQU1FLAorKyAgICAgICAgICAgICAgICAgICAgZG5sICAgNC4gaWYgaXQgZG9lc24ndCBleGlzdCBhcyBhIGRpcmVjdG9yeS4KKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci9saWIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvbGliIjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICRob3N0X29zIGluCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KikgaGF2ZWl0PXllczs7CisrICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQltdTkFNRTsgZG8KKysgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sIFJlYWxseSBhZGQgJGFkZGl0aW9uYWxfbGliZGlyIHRvICRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0KKysgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJbXU5BTUU7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgICBBQ19MSUJfV0lUSF9GSU5BTF9QUkVGSVgoW2V2YWwgeD1cIiR4XCJdKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRubCBSZWFsbHkgYWRkICRhZGRpdGlvbmFsX2xpYmRpciB0byAkTFRMSUJOQU1FLgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVExJQltdTkFNRT0iJHtMVExJQltdTkFNRX0ke0xUTElCW11OQU1FOisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgICAgLVIqKQorKyAgICAgICAgICAgICAgICAgICAgZGlyPWBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtUi8vJ2AKKysgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuCisrICAgICAgICAgICAgICAgICAgICAgIGRubCBQb3RlbnRpYWxseSBhZGQgRElSIHRvIHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBycGF0aGRpcnMgd2lsbCBiZSBhcHBlbmRlZCB0byAkTElCTkFNRSBhdCB0aGUgZW5kLgorKyAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9CisrICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJwYXRoZGlycz0iJHJwYXRoZGlycyAkZGlyIgorKyAgICAgICAgICAgICAgICAgICAgICBmaQorKyAgICAgICAgICAgICAgICAgICAgICBkbmwgUG90ZW50aWFsbHkgYWRkIERJUiB0byBsdHJwYXRoZGlycy4KKysgICAgICAgICAgICAgICAgICAgICAgZG5sIFRoZSBsdHJwYXRoZGlycyB3aWxsIGJlIGFwcGVuZGVkIHRvICRMVExJQk5BTUUgYXQgdGhlIGVuZC4KKysgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQorKyAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvCisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGRpciI7IHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgICAgZG9uZQorKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbgorKyAgICAgICAgICAgICAgICAgICAgICAgIGx0cnBhdGhkaXJzPSIkbHRycGF0aGRpcnMgJGRpciIKKysgICAgICAgICAgICAgICAgICAgICAgZmkKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgIC1sKikKKysgICAgICAgICAgICAgICAgICAgIGRubCBIYW5kbGUgdGhpcyBpbiB0aGUgbmV4dCByb3VuZC4KKysgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLWwvLydgCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICoubGEpCisrICAgICAgICAgICAgICAgICAgICBkbmwgSGFuZGxlIHRoaXMgaW4gdGhlIG5leHQgcm91bmQuIFRocm93IGF3YXkgdGhlIC5sYSdzCisrICAgICAgICAgICAgICAgICAgICBkbmwgZGlyZWN0b3J5OyBpdCBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiBhIHByZWNlZGluZyAtTAorKyAgICAgICAgICAgICAgICAgICAgZG5sIG9wdGlvbi4KKysgICAgICAgICAgICAgICAgICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgCisrICAgICAgICAgICAgICAgICAgICA7OworKyAgICAgICAgICAgICAgICAgICopCisrICAgICAgICAgICAgICAgICAgICBkbmwgTW9zdCBsaWtlbHkgYW4gaW1tZWRpYXRlIGxpYnJhcnkgbmFtZS4KKysgICAgICAgICAgICAgICAgICAgIExJQltdTkFNRT0iJHtMSUJbXU5BTUV9JHtMSUJbXU5BTUU6KyB9JGRlcCIKKysgICAgICAgICAgICAgICAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9JGRlcCIKKysgICAgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgICAgIGVzYWMKKysgICAgICAgICAgICAgIGRvbmUKKysgICAgICAgICAgICBmaQorKyAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgZG5sIERpZG4ndCBmaW5kIHRoZSBsaWJyYXJ5OyBhc3N1bWUgaXQgaXMgaW4gdGhlIHN5c3RlbSBkaXJlY3RvcmllcworKyAgICAgICAgICAgIGRubCBrbm93biB0byB0aGUgbGlua2VyIGFuZCBydW50aW1lIGxvYWRlci4gKEFsbCB0aGUgc3lzdGVtCisrICAgICAgICAgICAgZG5sIGRpcmVjdG9yaWVzIGtub3duIHRvIHRoZSBsaW5rZXIgc2hvdWxkIGFsc28gYmUga25vd24gdG8gdGhlCisrICAgICAgICAgICAgZG5sIHJ1bnRpbWUgbG9hZGVyLCBvdGhlcndpc2UgdGhlIHN5c3RlbSBpcyBzZXZlcmVseSBtaXNjb25maWd1cmVkLikKKysgICAgICAgICAgICBMSUJbXU5BTUU9IiR7TElCW11OQU1FfSR7TElCW11OQU1FOisgfS1sJG5hbWUiCisrICAgICAgICAgICAgTFRMSUJbXU5BTUU9IiR7TFRMSUJbXU5BTUV9JHtMVExJQltdTkFNRTorIH0tbCRuYW1lIgorKyAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgICBmaQorKyAgICBkb25lCisrICBkb25lCisrICBpZiB0ZXN0ICJYJHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorKyAgICAgIGRubCBXZWlyZCBwbGF0Zm9ybTogb25seSB0aGUgbGFzdCAtcnBhdGggb3B0aW9uIGNvdW50cywgdGhlIHVzZXIgbXVzdAorKyAgICAgIGRubCBwYXNzIGFsbCBwYXRoIGVsZW1lbnRzIGluIG9uZSBvcHRpb24uIFdlIGNhbiBhcnJhbmdlIHRoYXQgZm9yIGEKKysgICAgICBkbmwgc2luZ2xlIGxpYnJhcnksIGJ1dCBub3Qgd2hlbiBtb3JlIHRoYW4gb25lICRMSUJOQU1FcyBhcmUgdXNlZC4KKysgICAgICBhbGxkaXJzPQorKyAgICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8KKysgICAgICAgIGFsbGRpcnM9IiR7YWxsZGlyc30ke2FsbGRpcnM6KyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yfSRmb3VuZF9kaXIiCisrICAgICAgZG9uZQorKyAgICAgIGRubCBOb3RlOiBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIHVzZXMgJGxpYmRpciBhbmQgJHdsLgorKyAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciIKKysgICAgICBsaWJkaXI9IiRhbGxkaXJzIgorKyAgICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKysgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiCisrICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKysgICAgZWxzZQorKyAgICAgIGRubCBUaGUgLXJwYXRoIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbworKyAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIgorKyAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIgorKyAgICAgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorKyAgICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIgorKyAgICAgICAgTElCW11OQU1FPSIke0xJQltdTkFNRX0ke0xJQltdTkFNRTorIH0kZmxhZyIKKysgICAgICBkb25lCisrICAgIGZpCisrICBmaQorKyAgaWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuCisrICAgIGRubCBXaGVuIHVzaW5nIGxpYnRvb2wsIHRoZSBvcHRpb24gdGhhdCB3b3JrcyBmb3IgYm90aCBsaWJyYXJpZXMgYW5kCisrICAgIGRubCBleGVjdXRhYmxlcyBpcyAtUi4gVGhlIC1SIG9wdGlvbnMgYXJlIGN1bXVsYXRpdmUuCisrICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJzOyBkbworKyAgICAgIExUTElCW11OQU1FPSIke0xUTElCW11OQU1FfSR7TFRMSUJbXU5BTUU6KyB9LVIkZm91bmRfZGlyIgorKyAgICBkb25lCisrICBmaQorK10pCisrCisrZG5sIEFDX0xJQl9BUFBFTkRUT1ZBUihWQVIsIENPTlRFTlRTKSBhcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBDT05URU5UUyB0byBWQVIsCisrZG5sIHVubGVzcyBhbHJlYWR5IHByZXNlbnQgaW4gVkFSLgorK2RubCBXb3JrcyBvbmx5IGZvciBDUFBGTEFHUywgbm90IGZvciBMSUIqIHZhcmlhYmxlcyBiZWNhdXNlIHRoYXQgc29tZXRpbWVzCisrZG5sIGNvbnRhaW5zIHR3byBvciB0aHJlZSBjb25zZWN1dGl2ZSBlbGVtZW50cyB0aGF0IGJlbG9uZyB0b2dldGhlci4KKytBQ19ERUZVTihbQUNfTElCX0FQUEVORFRPVkFSXSwKKytbCisrICBmb3IgZWxlbWVudCBpbiBbJDJdOyBkbworKyAgICBoYXZlaXQ9CisrICAgIGZvciB4IGluICRbJDFdOyBkbworKyAgICAgIEFDX0xJQl9XSVRIX0ZJTkFMX1BSRUZJWChbZXZhbCB4PVwiJHhcIl0pCisrICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuCisrICAgICAgICBoYXZlaXQ9eWVzCisrICAgICAgICBicmVhaworKyAgICAgIGZpCisrICAgIGRvbmUKKysgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4KKysgICAgICBbJDFdPSIke1skMV19JHtbJDFdOisgfSRlbGVtZW50IgorKyAgICBmaQorKyAgZG9uZQorK10pCisrCisrIyBsaWItbGQubTQgc2VyaWFsIDMgKGdldHRleHQtMC4xMykKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgU3Vicm91dGluZXMgb2YgbGlidG9vbC5tNCwKKytkbmwgd2l0aCByZXBsYWNlbWVudHMgcy9BQ18vQUNfTElCLyBhbmQgcy9sdF9jdi9hY2xfY3YvIHRvIGF2b2lkIGNvbGxpc2lvbgorK2RubCB3aXRoIGxpYnRvb2wubTQuCisrCisrZG5sIEZyb20gbGlidG9vbC0xLjQuIFNldHMgdGhlIHZhcmlhYmxlIHdpdGhfZ251X2xkIHRvIHllcyBvciBuby4KKytBQ19ERUZVTihbQUNfTElCX1BST0dfTERfR05VXSwKKytbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgYWNsX2N2X3Byb2dfZ251X2xkLAorK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9ubHkgYWNjZXB0IC12LgorK2Nhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCisrKkdOVSogfCAqJ3dpdGggQkZEJyopCisrICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7CisrKikKKysgIGFjbF9jdl9wcm9nX2dudV9sZD1ubyA7OworK2VzYWNdKQorK3dpdGhfZ251X2xkPSRhY2xfY3ZfcHJvZ19nbnVfbGQKKytdKQorKworK2RubCBGcm9tIGxpYnRvb2wtMS40LiBTZXRzIHRoZSB2YXJpYWJsZSBMRC4KKytBQ19ERUZVTihbQUNfTElCX1BST0dfTERdLAorK1tBQ19BUkdfV0lUSChnbnUtbGQsCisrWyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXV0sCisrdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzLCB3aXRoX2dudV9sZD1ubykKKytBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKytBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCisrIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLgorKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgorK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisrICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisrICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisrICBjaG1vZCAreCBjb25mJCQuc2gKKysgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrICAgIFBBVEhfU0VQQVJBVE9SPSc7JworKyAgZWxzZQorKyAgICBQQVRIX1NFUEFSQVRPUj06CisrICBmaQorKyAgcm0gLWYgY29uZiQkLnNoCisrZmkKKythY19wcm9nPWxkCisraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKysgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgorKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgbGQgdXNlZCBieSBHQ0NdKQorKyAgY2FzZSAkaG9zdCBpbgorKyAgKi0qLW1pbmd3KikKKysgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisrICAqKQorKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7CisrICBlc2FjCisrICBjYXNlICRhY19wcm9nIGluCisrICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgorKyAgICBbW1xcL10qIHwgW0EtWmEtel06W1xcL10qKV0KKysgICAgICBbcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJ10KKysgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZAorKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAncyVcXFxcJS8lZydgCisrICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisrCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8IHNlZCAicyUkcmVfZGlyZWx0JS8lImAKKysgICAgICBkb25lCisrICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCisrICAgICAgOzsKKysgICIiKQorKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKysgICAgYWNfcHJvZz1sZAorKyAgICA7OworKyAgKikKKysgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorKyAgICB3aXRoX2dudV9sZD11bmtub3duCisrICAgIDs7CisrICBlc2FjCisrZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisrICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorK2Vsc2UKKysgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorK2ZpCisrQUNfQ0FDSEVfVkFMKGFjbF9jdl9wYXRoX0xELAorK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisrICBJRlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQQVJBVE9SLTp9IgorKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKysgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKysgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisrICAgICAgYWNsX2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisrICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4KKysgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKysgICAgICBjYXNlIGAiJGFjbF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwgL2Rldi9udWxsYCBpbgorKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrIDs7CisrICAgICAgKikKKysJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrICBkb25lCisrICBJRlM9IiRhY19zYXZlX2lmcyIKKytlbHNlCisrICBhY2xfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKytmaV0pCisrTEQ9IiRhY2xfY3ZfcGF0aF9MRCIKKytpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKCRMRCkKKytlbHNlCisrICBBQ19NU0dfUkVTVUxUKG5vKQorK2ZpCisrdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKKytBQ19MSUJfUFJPR19MRF9HTlUKKytdKQorKworKyMgaXNjLXBvc2l4Lm00IHNlcmlhbCAyIChnZXR0ZXh0LTAuMTEuMikKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKysjIFRoaXMgZmlsZSBpcyBub3QgbmVlZGVkIHdpdGggYXV0b2NvbmYtMi41MyBhbmQgbmV3ZXIuICBSZW1vdmUgaXQgaW4gMjAwNS4KKysKKysjIFRoaXMgdGVzdCByZXBsYWNlcyB0aGUgb25lIGluIGF1dG9jb25mLgorKyMgQ3VycmVudGx5IHRoaXMgbWFjcm8gc2hvdWxkIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgYXV0b2NvbmYgbWFjcm8KKysjIGJlY2F1c2UgZ2V0dGV4dCdzIGdldHRleHQubTQgKGRpc3RyaWJ1dGVkIGluIHRoZSBhdXRvbWFrZSBwYWNrYWdlKQorKyMgc3RpbGwgdXNlcyBpdC4gIE90aGVyd2lzZSwgdGhlIHVzZSBpbiBnZXR0ZXh0Lm00IG1ha2VzIGF1dG9oZWFkZXIKKysjIGdpdmUgdGhlc2UgZGlhZ25vc3RpY3M6CisrIyAgIGNvbmZpZ3VyZS5pbjo1NTY6IEFDX1RSWV9DT01QSUxFIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKyMgICBjb25maWd1cmUuaW46NTU2OiBBQ19UUllfUlVOIHdhcyBjYWxsZWQgYmVmb3JlIEFDX0lTQ19QT1NJWAorKworK3VuZGVmaW5lKFtBQ19JU0NfUE9TSVhdKQorKworK0FDX0RFRlVOKFtBQ19JU0NfUE9TSVhdLAorKyAgWworKyAgICBkbmwgVGhpcyB0ZXN0IHJlcGxhY2VzIHRoZSBvYnNvbGVzY2VudCBBQ19JU0NfUE9TSVgga2x1ZGdlLgorKyAgICBBQ19DSEVDS19MSUIoY3Bvc2l4LCBzdHJlcnJvciwgW0xJQlM9IiRMSUJTIC1sY3Bvc2l4Il0pCisrICBdCisrKQorKworKyMgQ2hlY2sgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4KKysKKysjIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorKyMgMDIxMTEtMTMwNywgVVNBLgorKworKyMgUHJlcGFyZSBmb3Igc3Vic3RpdHV0aW5nIDxzdGRib29sLmg+IGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQuCisrCisrQUNfREVGVU4oW0FNX1NUREJPT0xfSF0sCisrWworKyAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUREJPT0xdKQorKworKyAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKysKKysgIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IHllczsgdGhlbgorKyAgICBTVERCT09MX0g9JycKKysgIGVsc2UKKysgICAgU1REQk9PTF9IPSdzdGRib29sLmgnCisrICBmaQorKyAgQUNfU1VCU1QoW1NUREJPT0xfSF0pCisrCisrICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4KKysgICAgSEFWRV9fQk9PTD0xCisrICBlbHNlCisrICAgIEhBVkVfX0JPT0w9MAorKyAgZmkKKysgIEFDX1NVQlNUKFtIQVZFX19CT09MXSkKKytdKQorKworKyMgVGhpcyBtYWNybyBpcyBvbmx5IG5lZWRlZCBpbiBhdXRvY29uZiA8PSAyLjU0LiAgTmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYKKysjIGhhdmUgdGhpcyBtYWNybyBidWlsdC1pbi4KKysKKytBQ19ERUZVTihbQUNfSEVBREVSX1NUREJPT0xdLAorKyAgW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5XSwKKysgICAgIFthY19jdl9oZWFkZXJfc3RkYm9vbF9oXSwKKysgICAgIFtBQ19UUllfQ09NUElMRSgKKysJWworKwkgICNpbmNsdWRlIDxzdGRib29sLmg+CisrCSAgI2lmbmRlZiBib29sCisrCSAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIGZhbHNlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmIGZhbHNlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiB0cnVlCisrCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCSAgI2lmIHRydWUgIT0gMQorKwkgICAiZXJyb3I6IHRydWUgaXMgbm90IDEiCisrCSAgI2VuZGlmCisrCSAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorKwkgICAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKworKwkgIHN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOworKworKwkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworKwkgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKysJICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBkWyhib29sKSAtMC41ID09IHRydWUgPyAxIDogLTFdOworKwkgIGJvb2wgZSA9ICZzOworKwkgIGNoYXIgZlsoX0Jvb2wpIC0wLjAgPT0gZmFsc2UgPyAxIDogLTFdOworKwkgIGNoYXIgZ1t0cnVlXTsKKysJICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworKwkgIGNoYXIgaVtzaXplb2Ygcy50XTsKKysJXSwKKysJWyByZXR1cm4gIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpOyBdLAorKwlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXNdLAorKwlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKKysgICBBQ19DSEVDS19UWVBFUyhbX0Jvb2xdKQorKyAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRib29sX2ggPSB5ZXM7IHRoZW4KKysgICAgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKKysgICBmaV0pCisrCisrI3NlcmlhbCA1CisrCisrZG5sIEZyb20gSmltIE1leWVyaW5nCisrCisrZG5sIERlZmluZSBIQVZFX1NUUlVDVF9VVElNQlVGIGlmIGBzdHJ1Y3QgdXRpbWJ1ZicgaXMgZGVjbGFyZWQgLS0KKytkbmwgdXN1YWxseSBpbiA8dXRpbWUuaD4uCisrZG5sIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4KKysKKytBQ19ERUZVTihbam1fQ0hFQ0tfVFlQRV9TVFJVQ1RfVVRJTUJVRl0sCisrWworKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN5cy90aW1lLmggdXRpbWUuaCkKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSkKKysgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHV0aW1idWZdLCBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYsCisrICAgIFtBQ19UUllfQ09NUElMRSgKKysgICAgICBbCisrI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjIGluY2x1ZGUgPHRpbWUuaD4KKysjZWxzZQorKyMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICisrIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjIGVsc2UKKysjICBpbmNsdWRlIDx0aW1lLmg+CisrIyBlbmRpZgorKyNlbmRpZgorKyNpZmRlZiBIQVZFX1VUSU1FX0gKKysjIGluY2x1ZGUgPHV0aW1lLmg+CisrI2VuZGlmCisrICAgICAgXSwKKysgICAgICBbc3RhdGljIHN0cnVjdCB1dGltYnVmIHg7IHguYWN0aW1lID0geC5tb2R0aW1lO10sCisrICAgICAgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPXllcywKKysgICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8pCisrICAgIF0pCisrCisrICBpZiB0ZXN0ICRmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYgPSB5ZXM7IHRoZW4KKysgICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1VUSU1CVUYsIDEsCisrICAgICAgW0RlZmluZSBpZiBzdHJ1Y3QgdXRpbWJ1ZiBpcyBkZWNsYXJlZCAtLSB1c3VhbGx5IGluIDx1dGltZS5oPi4KKysgICAgICAgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLiBdKQorKyAgZmkKKytdKQorKworKyMgb25jZW9ubHkubTQgc2VyaWFsIDMKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrZG5sIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgIm9uY2Ugb25seSIgdmFyaWFudHMgb2Ygc3RhbmRhcmQgYXV0b2NvbmYgbWFjcm9zLgorK2RubCAgIEFDX0NIRUNLX0hFQURFUlNfT05DRSAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0hFQURFUlMKKytkbmwgICBBQ19DSEVDS19GVU5DU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19GVU5DUworK2RubCAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0RFQ0xTCisrZG5sICAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKSAgbGlrZSAgQUNfSEVBREVSX1NUREMKKytkbmwgVGhlIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBjaGVjayBmb3IgZWFjaCBvZiB0aGUgaGVhZGVycy9mdW5jdGlvbnMvZGVjbHMKKytkbmwgd2lsbCBiZSBwdXQgb25seSBvbmNlIGludG8gdGhlICdjb25maWd1cmUnIGZpbGUuIEl0IGtlZXBzIHRoZSBzaXplIG9mCisrZG5sIHRoZSAnY29uZmlndXJlJyBmaWxlIGRvd24sIGFuZCBhdm9pZHMgcmVkdW5kYW50IG91dHB1dCB3aGVuICdjb25maWd1cmUnCisrZG5sIGlzIHJ1bi4KKytkbmwgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNoZWNrcyBjYW5ub3QgYmUgY29uZGl0aW9uYWxpemVkLiBJZiB5b3Ugd3JpdGUKKytkbmwgICBpZiBzb21lX2NvbmRpdGlvbjsgdGhlbiBnbF9DSEVDS19IRUFERVJTKHN0ZGxpYi5oKTsgZmkKKytkbmwgaW5zaWRlIGFuIEFDX0RFRlVOZWQgZnVuY3Rpb24sIHRoZSBnbF9DSEVDS19IRUFERVJTIG1hY3JvIGNhbGwgZXhwYW5kcyB0bworK2RubCBlbXB0eSwgYW5kIHRoZSBjaGVjayB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgQUNfREVGVU5lZAorK2RubCBmdW5jdGlvbi4KKysKKytkbmwgQXV0b2NvbmYgdmVyc2lvbiAyLjU3IG9yIG5ld2VyIGlzIHJlY29tbWVuZGVkLgorK0FDX1BSRVJFUSgyLjU0KQorKworKyMgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKEhFQURFUjEgSEVBREVSMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKysjIEFDX0NIRUNLX0hFQURFUlMoSEVBREVSMSBIRUFERVIyIC4uLikuCisrQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sIFsKKysgIDoKKysgIEFDX0ZPUkVBQ0goW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwgWworKyAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSwgWworKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoZ2xfSEVBREVSX05BTUUpCisrICAgIF0pCisrICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0hFQURFUl9dbTRfcXVvdGUodHJhbnNsaXQoZ2xfSEVBREVSX05BTUUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0uL10sIFtfX19dKSkpCisrICBdKQorK10pCisrCisrIyBBQ19DSEVDS19GVU5DU19PTkNFKEZVTkMxIEZVTkMyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorKyMgQUNfQ0hFQ0tfRlVOQ1MoRlVOQzEgRlVOQzIgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ1NfT05DRV0sIFsKKysgIDoKKysgIEFDX0ZPUkVBQ0goW2dsX0ZVTkNfTkFNRV0sIFskMV0sIFsKKysgICAgQUNfREVGVU4oW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pLCBbCisrICAgICAgQUNfQ0hFQ0tfRlVOQ1MobTRfZGVmbihbZ2xfRlVOQ19OQU1FXSkpCisrICAgIF0pCisrICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0ZVTkNfXW00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorKyAgXSkKKytdKQorKworKyMgQUNfQ0hFQ0tfREVDTFNfT05DRShERUNMMSBERUNMMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKysjIEFDX0NIRUNLX0RFQ0xTKERFQ0wxLCBERUNMMiwgLi4uKS4KKytBQ19ERUZVTihbQUNfQ0hFQ0tfREVDTFNfT05DRV0sIFsKKysgIDoKKysgIEFDX0ZPUkVBQ0goW2dsX0RFQ0xfTkFNRV0sIFskMV0sIFsKKysgICAgQUNfREVGVU4oW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pLCBbCisrICAgICAgQUNfQ0hFQ0tfREVDTFMobTRfZGVmbihbZ2xfREVDTF9OQU1FXSkpCisrICAgIF0pCisrICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0RFQ0xfXW00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorKyAgXSkKKytdKQorKworICMgYmFja3VwZmlsZS5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorQEAgLTIxLDYgKzEwNzYsNyBAQAorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0cmluZy5oIHVuaXN0ZC5oKQorICAgQUNfQ0hFQ0tfRlVOQ1MocGF0aGNvbmYpCisgXSkKKysKKyAjc2VyaWFsIDUKKyAKKyBkbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCitAQCAtNjMsMzEgKzExMTksNyBAQAorICAgIGZpCisgICBdCisgKQorLSMgZGlybmFtZS5tNCBzZXJpYWwgMQorLWRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfRElSTkFNRV0sCistWworLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Rpcm5hbWUuaC4KKy0gIEFDX1JFUVVJUkUoW2ptX0FDX0RPU10pCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5jLgorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLQorLSAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Jhc2VuYW1lLmMuCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCistICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCistCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyaXBzbGFzaC5jLgorLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLV0pCisgI3NlcmlhbCA1CisgCisgIyBEZWZpbmUgc29tZSBtYWNyb3MgcmVxdWlyZWQgZm9yIHByb3BlciBvcGVyYXRpb24gb2YgY29kZSBpbiBsaWIvKi5jCitAQCAtMTQxLDYgKzExNzMsMzMgQEAKKyAgICAgICBbRGVmaW5lIGlmIHRoZSBiYWNrc2xhc2ggY2hhcmFjdGVyIG1heSBhbHNvIHNlcnZlIGFzIGEgZmlsZSBuYW1lCisgICAgICAgIGNvbXBvbmVudCBzZXBhcmF0b3IuXSkKKyAgIF0pCisrCisrIyBkaXJuYW1lLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9ESVJOQU1FXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZGlybmFtZS5oLgorKyAgQUNfUkVRVUlSRShbam1fQUNfRE9TXSkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9kaXJuYW1lLmMuCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvYmFzZW5hbWUuYy4KKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdHJpbmcuaCkKKysKKysgIGRubCBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zdHJpcHNsYXNoLmMuCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrXSkKKysKKyAjc2VyaWFsIDcKKyAKKyBBQ19ERUZVTihbZ2xfRVJST1JdLAorQEAgLTE1OSw3ICsxMjE4LDY3IEBACisgICBBQ19DSEVDS19ERUNMUyhbc3RyZXJyb3JdKQorICAgQUNfRlVOQ19TVFJFUlJPUl9SCisgXSkKKy0jIGdldG9wdC5tNCBzZXJpYWwgMQorKworKyMgbWVtY2hyLm00IHNlcmlhbCAxCisrZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisrZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorK2RubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorK2RubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKworK0FDX0RFRlVOKFtnbF9GVU5DX01FTUNIUl0sCisrWworKyAgQUNfUkVQTEFDRV9GVU5DUyhtZW1jaHIpCisrICBpZiB0ZXN0ICRhY19jdl9mdW5jX21lbWNociA9IG5vOyB0aGVuCisrICAgIGptX1BSRVJFUV9NRU1DSFIKKysgIGZpCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL21lbWNoci5jLgorK0FDX0RFRlVOKFtqbV9QUkVSRVFfTUVNQ0hSXSwgWworKyAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKGxpbWl0cy5oIHN0ZGxpYi5oKQorKyAgQUNfQ0hFQ0tfSEVBREVSUyhicC1zeW0uaCkKKytdKQorKworKyMgcm1kaXIubTQgc2VyaWFsIDEKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK2RubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKytkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCisrZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCisrZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCisrZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisrCisrQUNfREVGVU4oW2dsX0ZVTkNfUk1ESVJdLAorK1sKKysgIEFDX1JFUExBQ0VfRlVOQ1Mocm1kaXIpCisrICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JtZGlyID0gbm87IHRoZW4KKysgICAgZ2xfUFJFUkVRX1JNRElSCisrICBmaQorK10pCisrCisrIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9ybWRpci5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfUk1ESVJdLCBbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1RBVF0pCisrICA6CisrXSkKKysKKysKKysjIGdldG9wdC5tNCBzZXJpYWwgMQorK2RubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytBQ19ERUZVTihbZ2xfR0VUT1BUXSwKKytbCisrICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0b3B0LmMuCisrICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisrXSkKKysKKysjIHhhbGxvYy5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC0xNjcsMTEgKzEyODYsMjUgQEAKKyBkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyBkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfR0VUT1BUXSwKKytBQ19ERUZVTihbZ2xfWEFMTE9DXSwKKyBbCistICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvZ2V0b3B0LmMuCisrICBnbF9QUkVSRVFfWE1BTExPQworKyAgZ2xfUFJFUkVRX1hTVFJEVVAKKytdKQorKworKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIveG1hbGxvYy5jLgorK0FDX0RFRlVOKFtnbF9QUkVSRVFfWE1BTExPQ10sIFsKKysgIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKKysgIEFDX1JFUVVJUkUoW2ptX0ZVTkNfTUFMTE9DXSkKKysgIEFDX1JFUVVJUkUoW2ptX0ZVTkNfUkVBTExPQ10pCisrXSkKKysKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3hzdHJkdXAuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1hTVFJEVVBdLCBbCisrICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RyaW5nLmgpCisgXSkKKysKKyAjIG1hbGxvYy5tNCBzZXJpYWwgNworIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorQEAgLTE5Nyw2NiArMTMzMCw4IEBACisgQUNfREVGVU4oW2dsX1BSRVJFUV9NQUxMT0NdLCBbCisgICA6CisgXSkKKy0jIG1icnRvd2MubTQgc2VyaWFsIDUKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorLWRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKy1kbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKy1kbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKy1kbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKy0KKy1kbmwgRnJvbSBQYXVsIEVnZ2VydAorLQorLWRubCBUaGlzIGZpbGUgY2FuIGJlIHJlbW92ZWQsIGFuZCBqbV9GVU5DX01CUlRPV0MgcmVwbGFjZWQgd2l0aAorLWRubCBBQ19GVU5DX01CUlRPV0MsIHdoZW4gYXV0b2NvbmYgMi41NyBjYW4gYmUgYXNzdW1lZCBldmVyeXdoZXJlLgorLQorLUFDX0RFRlVOKFtqbV9GVU5DX01CUlRPV0NdLAorLVsKKy0gIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1icnRvd2MgYW5kIG1ic3RhdGVfdCBhcmUgcHJvcGVybHkgZGVjbGFyZWRdLAorLSAgICBqbV9jdl9mdW5jX21icnRvd2MsCistICAgIFtBQ19UUllfTElOSygKKy0gICAgICAgWyNpbmNsdWRlIDx3Y2hhci5oPl0sCistICAgICAgIFttYnN0YXRlX3Qgc3RhdGU7IHJldHVybiAhIChzaXplb2Ygc3RhdGUgJiYgbWJydG93Yyk7XSwKKy0gICAgICAgam1fY3ZfZnVuY19tYnJ0b3djPXllcywKKy0gICAgICAgam1fY3ZfZnVuY19tYnJ0b3djPW5vKV0pCistICBpZiB0ZXN0ICRqbV9jdl9mdW5jX21icnRvd2MgPSB5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKEhBVkVfTUJSVE9XQywgMSwKKy0gICAgICBbRGVmaW5lIHRvIDEgaWYgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZC5dKQorLSAgZmkKKy1dKQorLSMgbWJzdGF0ZV90Lm00IHNlcmlhbCA5CistZG5sIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorLQorLSMgRnJvbSBQYXVsIEVnZ2VydC4KKy0KKy0jIEJlT1MgNSBoYXMgPHdjaGFyLmg+IGJ1dCBkb2VzIG5vdCBkZWZpbmUgbWJzdGF0ZV90LAorLSMgc28geW91IGNhbid0IGRlY2xhcmUgYW4gb2JqZWN0IG9mIHRoYXQgdHlwZS4KKy0jIENoZWNrIGZvciB0aGlzIGluY29tcGF0aWJpbGl0eSB3aXRoIFN0YW5kYXJkIEMuCisgCistIyBBQ19UWVBFX01CU1RBVEVfVAorLSMgLS0tLS0tLS0tLS0tLS0tLS0KKy1BQ19ERUZVTihbQUNfVFlQRV9NQlNUQVRFX1RdLAorLSAgW0FDX0NBQ0hFX0NIRUNLKFtmb3IgbWJzdGF0ZV90XSwgYWNfY3ZfdHlwZV9tYnN0YXRlX3QsCistICAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistCVtBQ19MQU5HX1BST0dSQU0oCistCSAgIFtBQ19JTkNMVURFU19ERUZBVUxUCistIwkgICAgaW5jbHVkZSA8d2NoYXIuaD5dLAorLQkgICBbbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDtdKV0sCistCVthY19jdl90eXBlX21ic3RhdGVfdD15ZXNdLAorLQlbYWNfY3ZfdHlwZV9tYnN0YXRlX3Q9bm9dKV0pCistICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QgPSB5ZXM7IHRoZW4KKy0gICAgIEFDX0RFRklORShbSEFWRV9NQlNUQVRFX1RdLCAxLAorLQkgICAgICAgW0RlZmluZSB0byAxIGlmIDx3Y2hhci5oPiBkZWNsYXJlcyBtYnN0YXRlX3QuXSkKKy0gICBlbHNlCistICAgICBBQ19ERUZJTkUoW21ic3RhdGVfdF0sIGludCwKKy0JICAgICAgIFtEZWZpbmUgdG8gYSB0eXBlIGlmIDx3Y2hhci5oPiBkb2VzIG5vdCBkZWZpbmUuXSkKKy0gICBmaV0pCistIyBtZW1jaHIubTQgc2VyaWFsIDEKKysjIHJlYWxsb2MubTQgc2VyaWFsIDcKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyBkbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCitAQCAtMjY0LDExNiArMTMzOSwyNCBAQAorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLUFDX0RFRlVOKFtnbF9GVU5DX01FTUNIUl0sCisrZG5sIEZyb20gSmltIE1leWVyaW5nLgorK2RubCBEZXRlcm1pbmUgd2hldGhlciByZWFsbG9jIHdvcmtzIHdoZW4gYm90aCBhcmd1bWVudHMgYXJlIDAuCisrZG5sIElmIGl0IGRvZXNuJ3QsIGFycmFuZ2UgdG8gdXNlIHRoZSByZXBsYWNlbWVudCBmdW5jdGlvbi4KKysKKytBQ19ERUZVTihbam1fRlVOQ19SRUFMTE9DXSwKKyBbCistICBBQ19SRVBMQUNFX0ZVTkNTKG1lbWNocikKKy0gIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0gbm87IHRoZW4KKy0gICAgam1fUFJFUkVRX01FTUNIUgorKyAgQUNfUkVRVUlSRShbQUNfRlVOQ19SRUFMTE9DXSkKKysgIGRubCBhdXRvY29uZiA8IDIuNTcgdXNlZCB0aGUgc3ltYm9sIGFjX2N2X2Z1bmNfcmVhbGxvY193b3Jrcy4KKysgIGlmIHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPSBYbm8gfHwgdGVzdCBYIiRhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MiID0gWG5vOyB0aGVuCisrICAgIGdsX1BSRVJFUV9SRUFMTE9DCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9tZW1jaHIuYy4KKy1BQ19ERUZVTihbam1fUFJFUkVRX01FTUNIUl0sIFsKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShsaW1pdHMuaCBzdGRsaWIuaCkKKy0gIEFDX0NIRUNLX0hFQURFUlMoYnAtc3ltLmgpCistXSkKKy0jc2VyaWFsIDEKKy0KKy1kbmwgRnJvbSBNdW1pdCBLaGFuIGFuZCBQYXVsIEVnZ2VydAorLWRubCBEZXRlcm1pbmUgd2hldGhlciBta2RpciBhY2NlcHRzIG9ubHkgb25lIGFyZ3VtZW50IGluc3RlYWQgb2YgdGhlIHVzdWFsIHR3by4KKy0KKy1BQ19ERUZVTihbUEFUQ0hfRlVOQ19NS0RJUl9UQUtFU19PTkVfQVJHXSwKKy0gIFtBQ19DSEVDS19GVU5DUyhta2RpcikKKy0gICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBta2RpciB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudF0sCistICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnLAorLSAgICAgW3BhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmc9bm8KKy0gICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX21rZGlyID0geWVzOyB0aGVuCistICAgICAgICBBQ19UUllfQ09NUElMRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLQkgIF0sCistCSAgW21rZGlyICgiLiIsIDApO10sCistCSAgLAorLQkgIFtBQ19UUllfQ09NUElMRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLQkgICAgIF0sCistCSAgICAgW21rZGlyICgiLiIpO10sCistCSAgICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz15ZXMKKy0JICApXQorLQkpCistICAgICAgZmkKKy0gICAgIF0KKy0gICApCistICAgaWYgdGVzdCAkcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZyA9IHllczsgdGhlbgorLSAgICAgQUNfREVGSU5FKFtNS0RJUl9UQUtFU19PTkVfQVJHXSwgMSwKKy0gICAgICAgW0RlZmluZSBpZiBta2RpciB0YWtlcyBvbmx5IG9uZSBhcmd1bWVudC5dKQorLSAgIGZpCistICBdCistKQorLSMgb25jZW9ubHkubTQgc2VyaWFsIDMKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLWRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKy1kbmwgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsCistZG5sIFB1YmxpYyBMaWNlbnNlLCB0aGlzIGZpbGUgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgYSBwcm9ncmFtCistZG5sIHRoYXQgY29udGFpbnMgYSBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHVuZGVyCistZG5sIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCistCistZG5sIFRoaXMgZmlsZSBkZWZpbmVzIHNvbWUgIm9uY2Ugb25seSIgdmFyaWFudHMgb2Ygc3RhbmRhcmQgYXV0b2NvbmYgbWFjcm9zLgorLWRubCAgIEFDX0NIRUNLX0hFQURFUlNfT05DRSAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0hFQURFUlMKKy1kbmwgICBBQ19DSEVDS19GVU5DU19PTkNFICAgICAgICAgICBsaWtlICBBQ19DSEVDS19GVU5DUworLWRubCAgIEFDX0NIRUNLX0RFQ0xTX09OQ0UgICAgICAgICAgIGxpa2UgIEFDX0NIRUNLX0RFQ0xTCistZG5sICAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKSAgbGlrZSAgQUNfSEVBREVSX1NUREMKKy1kbmwgVGhlIGFkdmFudGFnZSBpcyB0aGF0IHRoZSBjaGVjayBmb3IgZWFjaCBvZiB0aGUgaGVhZGVycy9mdW5jdGlvbnMvZGVjbHMKKy1kbmwgd2lsbCBiZSBwdXQgb25seSBvbmNlIGludG8gdGhlICdjb25maWd1cmUnIGZpbGUuIEl0IGtlZXBzIHRoZSBzaXplIG9mCistZG5sIHRoZSAnY29uZmlndXJlJyBmaWxlIGRvd24sIGFuZCBhdm9pZHMgcmVkdW5kYW50IG91dHB1dCB3aGVuICdjb25maWd1cmUnCistZG5sIGlzIHJ1bi4KKy1kbmwgVGhlIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNoZWNrcyBjYW5ub3QgYmUgY29uZGl0aW9uYWxpemVkLiBJZiB5b3Ugd3JpdGUKKy1kbmwgICBpZiBzb21lX2NvbmRpdGlvbjsgdGhlbiBnbF9DSEVDS19IRUFERVJTKHN0ZGxpYi5oKTsgZmkKKy1kbmwgaW5zaWRlIGFuIEFDX0RFRlVOZWQgZnVuY3Rpb24sIHRoZSBnbF9DSEVDS19IRUFERVJTIG1hY3JvIGNhbGwgZXhwYW5kcyB0bworLWRubCBlbXB0eSwgYW5kIHRoZSBjaGVjayB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgYm9keSBvZiB0aGUgQUNfREVGVU5lZAorLWRubCBmdW5jdGlvbi4KKy0KKy1kbmwgQXV0b2NvbmYgdmVyc2lvbiAyLjU3IG9yIG5ld2VyIGlzIHJlY29tbWVuZGVkLgorLUFDX1BSRVJFUSgyLjU0KQorLQorLSMgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKEhFQURFUjEgSEVBREVSMiAuLi4pIGlzIGEgb25jZS1vbmx5IHZhcmlhbnQgb2YKKy0jIEFDX0NIRUNLX0hFQURFUlMoSEVBREVSMSBIRUFERVIyIC4uLikuCistQUNfREVGVU4oW0FDX0NIRUNLX0hFQURFUlNfT05DRV0sIFsKKy0gIDoKKy0gIEFDX0ZPUkVBQ0goW2dsX0hFQURFUl9OQU1FXSwgWyQxXSwgWworLSAgICBBQ19ERUZVTihbZ2xfQ0hFQ0tfSEVBREVSX11tNF9xdW90ZSh0cmFuc2xpdChtNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLS4vXSwgW19fX10pKSwgWworLSAgICAgIEFDX0NIRUNLX0hFQURFUlMoZ2xfSEVBREVSX05BTUUpCistICAgIF0pCistICAgIEFDX1JFUVVJUkUoW2dsX0NIRUNLX0hFQURFUl9dbTRfcXVvdGUodHJhbnNsaXQoZ2xfSEVBREVSX05BTUUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy0uL10sIFtfX19dKSkpCistICBdKQorLV0pCistCistIyBBQ19DSEVDS19GVU5DU19PTkNFKEZVTkMxIEZVTkMyIC4uLikgaXMgYSBvbmNlLW9ubHkgdmFyaWFudCBvZgorLSMgQUNfQ0hFQ0tfRlVOQ1MoRlVOQzEgRlVOQzIgLi4uKS4KKy1BQ19ERUZVTihbQUNfQ0hFQ0tfRlVOQ1NfT05DRV0sIFsKKysjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3JlYWxsb2MuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1JFQUxMT0NdLCBbCisgICA6CistICBBQ19GT1JFQUNIKFtnbF9GVU5DX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSwgWworLSAgICAgIEFDX0NIRUNLX0ZVTkNTKG00X2RlZm4oW2dsX0ZVTkNfTkFNRV0pKQorLSAgICBdKQorLSAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19GVU5DX11tNF9kZWZuKFtnbF9GVU5DX05BTUVdKSkKKy0gIF0pCisgXSkKKyAKKy0jIEFDX0NIRUNLX0RFQ0xTX09OQ0UoREVDTDEgREVDTDIgLi4uKSBpcyBhIG9uY2Utb25seSB2YXJpYW50IG9mCistIyBBQ19DSEVDS19ERUNMUyhERUNMMSwgREVDTDIsIC4uLikuCistQUNfREVGVU4oW0FDX0NIRUNLX0RFQ0xTX09OQ0VdLCBbCistICA6CistICBBQ19GT1JFQUNIKFtnbF9ERUNMX05BTUVdLCBbJDFdLCBbCistICAgIEFDX0RFRlVOKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSwgWworLSAgICAgIEFDX0NIRUNLX0RFQ0xTKG00X2RlZm4oW2dsX0RFQ0xfTkFNRV0pKQorLSAgICBdKQorLSAgICBBQ19SRVFVSVJFKFtnbF9DSEVDS19ERUNMX11tNF9kZWZuKFtnbF9ERUNMX05BTUVdKSkKKy0gIF0pCistXSkKKyAjIHF1b3RlLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtMzg3LDYgKzEzNzAsNyBAQAorICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3F1b3RlLmMuCisgICBBQ19DSEVDS19IRUFERVJTX09OQ0Uoc3RkZGVmLmgpCisgXSkKKysKKyAjIHF1b3RlYXJnLm00IHNlcmlhbCAxCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCitAQCAtNDAzLDMyICsxMzg3LDY5IEBACisgICBBQ19UWVBFX01CU1RBVEVfVAorICAgam1fRlVOQ19NQlJUT1dDCisgXSkKKy0jIHJlYWxsb2MubTQgc2VyaWFsIDcKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgbWJzdGF0ZV90Lm00IHNlcmlhbCA5CisrZG5sIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorIGRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorIGRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorIGRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIAorLWRubCBGcm9tIEppbSBNZXllcmluZy4KKy1kbmwgRGV0ZXJtaW5lIHdoZXRoZXIgcmVhbGxvYyB3b3JrcyB3aGVuIGJvdGggYXJndW1lbnRzIGFyZSAwLgorLWRubCBJZiBpdCBkb2Vzbid0LCBhcnJhbmdlIHRvIHVzZSB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24uCisrIyBGcm9tIFBhdWwgRWdnZXJ0LgorIAorLUFDX0RFRlVOKFtqbV9GVU5DX1JFQUxMT0NdLAorKyMgQmVPUyA1IGhhcyA8d2NoYXIuaD4gYnV0IGRvZXMgbm90IGRlZmluZSBtYnN0YXRlX3QsCisrIyBzbyB5b3UgY2FuJ3QgZGVjbGFyZSBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgorKyMgQ2hlY2sgZm9yIHRoaXMgaW5jb21wYXRpYmlsaXR5IHdpdGggU3RhbmRhcmQgQy4KKysKKysjIEFDX1RZUEVfTUJTVEFURV9UCisrIyAtLS0tLS0tLS0tLS0tLS0tLQorK0FDX0RFRlVOKFtBQ19UWVBFX01CU1RBVEVfVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBtYnN0YXRlX3RdLCBhY19jdl90eXBlX21ic3RhdGVfdCwKKysgICAgIFtBQ19DT01QSUxFX0lGRUxTRSgKKysJW0FDX0xBTkdfUFJPR1JBTSgKKysJICAgW0FDX0lOQ0xVREVTX0RFRkFVTFQKKysjCSAgICBpbmNsdWRlIDx3Y2hhci5oPl0sCisrCSAgIFttYnN0YXRlX3QgeDsgcmV0dXJuIHNpemVvZiB4O10pXSwKKysJW2FjX2N2X3R5cGVfbWJzdGF0ZV90PXllc10sCisrCVthY19jdl90eXBlX21ic3RhdGVfdD1ub10pXSkKKysgICBpZiB0ZXN0ICRhY19jdl90eXBlX21ic3RhdGVfdCA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKFtIQVZFX01CU1RBVEVfVF0sIDEsCisrCSAgICAgICBbRGVmaW5lIHRvIDEgaWYgPHdjaGFyLmg+IGRlY2xhcmVzIG1ic3RhdGVfdC5dKQorKyAgIGVsc2UKKysgICAgIEFDX0RFRklORShbbWJzdGF0ZV90XSwgaW50LAorKwkgICAgICAgW0RlZmluZSB0byBhIHR5cGUgaWYgPHdjaGFyLmg+IGRvZXMgbm90IGRlZmluZS5dKQorKyAgIGZpXSkKKysKKysjIG1icnRvd2MubTQgc2VyaWFsIDUKKytkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorK2RubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKKytkbmwgUHVibGljIExpY2Vuc2UsIHRoaXMgZmlsZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBhIHByb2dyYW0KKytkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKytkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKysKKytkbmwgRnJvbSBQYXVsIEVnZ2VydAorKworK2RubCBUaGlzIGZpbGUgY2FuIGJlIHJlbW92ZWQsIGFuZCBqbV9GVU5DX01CUlRPV0MgcmVwbGFjZWQgd2l0aAorK2RubCBBQ19GVU5DX01CUlRPV0MsIHdoZW4gYXV0b2NvbmYgMi41NyBjYW4gYmUgYXNzdW1lZCBldmVyeXdoZXJlLgorKworK0FDX0RFRlVOKFtqbV9GVU5DX01CUlRPV0NdLAorIFsKKy0gIEFDX1JFUVVJUkUoW0FDX0ZVTkNfUkVBTExPQ10pCistICBkbmwgYXV0b2NvbmYgPCAyLjU3IHVzZWQgdGhlIHN5bWJvbCBhY19jdl9mdW5jX3JlYWxsb2Nfd29ya3MuCistICBpZiB0ZXN0IFgiJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwiID0gWG5vIHx8IHRlc3QgWCIkYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzIiA9IFhubzsgdGhlbgorLSAgICBnbF9QUkVSRVFfUkVBTExPQworKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbWJydG93YyBhbmQgbWJzdGF0ZV90IGFyZSBwcm9wZXJseSBkZWNsYXJlZF0sCisrICAgIGptX2N2X2Z1bmNfbWJydG93YywKKysgICAgW0FDX1RSWV9MSU5LKAorKyAgICAgICBbI2luY2x1ZGUgPHdjaGFyLmg+XSwKKysgICAgICAgW21ic3RhdGVfdCBzdGF0ZTsgcmV0dXJuICEgKHNpemVvZiBzdGF0ZSAmJiBtYnJ0b3djKTtdLAorKyAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9eWVzLAorKyAgICAgICBqbV9jdl9mdW5jX21icnRvd2M9bm8pXSkKKysgIGlmIHRlc3QgJGptX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoSEFWRV9NQlJUT1dDLCAxLAorKyAgICAgIFtEZWZpbmUgdG8gMSBpZiBtYnJ0b3djIGFuZCBtYnN0YXRlX3QgYXJlIHByb3Blcmx5IGRlY2xhcmVkLl0pCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9yZWFsbG9jLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9SRUFMTE9DXSwgWworLSAgOgorLV0pCistIyBybWRpci5tNCBzZXJpYWwgMQorKyMgaGFzaC5tNCBzZXJpYWwgMQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorIGRubCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwKK0BAIC00MzYsMTggKzE0NTcsNzEgQEAKKyBkbmwgdGhhdCBjb250YWlucyBhIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgdW5kZXIKKyBkbmwgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIGFzIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyAKKy1BQ19ERUZVTihbZ2xfRlVOQ19STURJUl0sCisrQUNfREVGVU4oW2dsX0hBU0hdLAorIFsKKy0gIEFDX1JFUExBQ0VfRlVOQ1Mocm1kaXIpCistICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JtZGlyID0gbm87IHRoZW4KKy0gICAgZ2xfUFJFUkVRX1JNRElSCistICBmaQorKyAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL2hhc2guYy4KKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShzdGRsaWIuaCkKKysgIEFDX0hFQURFUl9TVERCT09MCisrICBBQ19DSEVDS19ERUNMU19PTkNFKGZyZWUgbWFsbG9jKQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9ybWRpci5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfUk1ESVJdLCBbCistICBBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1RBVF0pCistICA6CisrQUNfREVGVU4oW2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVF0sCisrICBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfbnNlY10sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCSAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKwkgIHN0cnVjdCBzdGF0IHN0OworKwldLAorKwlbIHJldHVybiBzdC5zdF9hdGltZW5zZWMgKyBzdC5zdF9tdGltZW5zZWMgKyBzdC5zdF9jdGltZW5zZWM7IF0sCisrCVthY19jdl9zdGF0X25zZWM9eWVzXSwKKysJW2FjX2N2X3N0YXRfbnNlYz1ub10pCisrICAgICBdKQorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfbnNlYyA9IHllczsgdGhlbgorKyAgICAgQUNfREVGSU5FKEhBVkVfU1RBVF9OU0VDLCAxLCBbRGVmaW5lIHRvIDEgaWYgc3RydWN0IHN0YXQgaGFzIG5hbm9zZWNvbmQgdGltZXN0YW1wcy5dKQorKyAgIGZpCisrCisrICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXRdLAorKyAgICAgW2FjX2N2X3N0YXRfdGltZXZhbF0sCisrICAgICBbQUNfVFJZX0NPTVBJTEUoCisrCVsKKysJICAjaW5jbHVkZSA8dGltZS5oPgorKwkgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysJICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysJICAjaW5jbHVkZSA8dW5pc3RkLmg+CisrCSAgc3RydWN0IHN0YXQgc3Q7CisrCV0sCisrCVsgcmV0dXJuIHN0LnN0X2F0aW0udHZfbnNlYyArIHN0LnN0X210aW0udHZfbnNlYyArIHN0LnN0X2N0aW0udHZfbnNlYzsgXSwKKysJW2FjX2N2X3N0YXRfdGltZXZhbD15ZXNdLAorKwlbYWNfY3Zfc3RhdF90aW1ldmFsPW5vXSkKKysgICAgIF0pCisrICAgaWYgdGVzdCAkYWNfY3Zfc3RhdF90aW1ldmFsID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoSEFWRV9TVEFUX1RJTUVWQUwsIDEsIFtEZWZpbmUgdG8gMSBpZiBzdHJ1Y3Qgc3RhdCBjb210YWlucyBzdHJ1Y3QgdGltZXZhbCdzLl0pCisrICAgZmldKQorKworKyNzZXJpYWwgNyAtKi0gYXV0b2NvbmYgLSotCisrCisrZG5sIEZyb20gSmltIE1leWVyaW5nLgorK2RubAorK2RubCBTZWUgaWYgdGhlIGdsaWJjICpfdW5sb2NrZWQgSS9PIG1hY3JvcyBvciBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZS4KKytkbmwgVXNlIG9ubHkgdGhvc2UgKl91bmxvY2tlZCBtYWNyb3Mgb3IgZnVuY3Rpb25zIHRoYXQgYXJlIGRlY2xhcmVkCisrZG5sIChiZWNhdXNlIHNvbWUgb2YgdGhlbSB3ZXJlIGRlY2xhcmVkIGluIFNvbGFyaXMgMi41LjEgYnV0IHdlcmUgcmVtb3ZlZAorK2RubCBpbiBTb2xhcmlzIDIuNiwgd2hlcmVhcyB3ZSB3YW50IGJpbmFyaWVzIGJ1aWx0IG9uIFNvbGFyaXMgMi41LjEgdG8gcnVuCisrZG5sIG9uIFNvbGFyaXMgMi42KS4KKysKKytBQ19ERUZVTihbam1fRlVOQ19HTElCQ19VTkxPQ0tFRF9JT10sCisrWworKyAgZG5sIFBlcnN1YWRlIGdsaWJjIDxzdGRpby5oPiB0byBkZWNsYXJlIGZnZXRzX3VubG9ja2VkKCksIGZwdXRzX3VubG9ja2VkKCkKKysgIGRubCBldGMuCisrICBBQ19SRVFVSVJFKFtBQ19HTlVfU09VUkNFXSkKKysKKysgIEFDX0NIRUNLX0RFQ0xTX09OQ0UoCisrICAgICBbY2xlYXJlcnJfdW5sb2NrZWQgZmVvZl91bmxvY2tlZCBmZXJyb3JfdW5sb2NrZWQKKysgICAgICBmZmx1c2hfdW5sb2NrZWQgZmdldHNfdW5sb2NrZWQgZnB1dGNfdW5sb2NrZWQgZnB1dHNfdW5sb2NrZWQKKysgICAgICBmcmVhZF91bmxvY2tlZCBmd3JpdGVfdW5sb2NrZWQgZ2V0Y191bmxvY2tlZAorKyAgICAgIGdldGNoYXJfdW5sb2NrZWQgcHV0Y191bmxvY2tlZCBwdXRjaGFyX3VubG9ja2VkXSkKKyBdKQorIAorICMgQ2hlY2sgZm9yIHNldG1vZGUsIERPUyBzdHlsZS4KK0BAIC00ODgsMTgwICsxNTYyLDM5IEBACisgICAgICBBQ19ERUZJTkUoSEFWRV9TRVRNT0RFX0RPUywgMSwKKyAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBET1Mtc3R5bGUgYHNldG1vZGUnIGZ1bmN0aW9uLl0pCisgICAgZmldKQorLSMgQ2hlY2sgZm9yIHN0ZGJvb2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OS4KKy0KKy0jIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLQorLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCistIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy0jIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorLSMgMDIxMTEtMTMwNywgVVNBLgorLQorLSMgUHJlcGFyZSBmb3Igc3Vic3RpdHV0aW5nIDxzdGRib29sLmg+IGlmIGl0IGlzIG5vdCBzdXBwb3J0ZWQuCistCistQUNfREVGVU4oW0FNX1NUREJPT0xfSF0sCistWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NUREJPT0xdKQorLQorLSAgIyBEZWZpbmUgdHdvIGFkZGl0aW9uYWwgdmFyaWFibGVzIHVzZWQgaW4gdGhlIE1ha2VmaWxlIHN1YnN0aXR1dGlvbi4KKy0KKy0gIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IHllczsgdGhlbgorLSAgICBTVERCT09MX0g9JycKKy0gIGVsc2UKKy0gICAgU1REQk9PTF9IPSdzdGRib29sLmgnCistICBmaQorLSAgQUNfU1VCU1QoW1NUREJPT0xfSF0pCistCistICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9fQk9PTD0xCistICBlbHNlCistICAgIEhBVkVfX0JPT0w9MAorLSAgZmkKKy0gIEFDX1NVQlNUKFtIQVZFX19CT09MXSkKKy1dKQorLQorLSMgVGhpcyBtYWNybyBpcyBvbmx5IG5lZWRlZCBpbiBhdXRvY29uZiA8PSAyLjU0LiAgTmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYKKy0jIGhhdmUgdGhpcyBtYWNybyBidWlsdC1pbi4KKy0KKy1BQ19ERUZVTihbQUNfSEVBREVSX1NUREJPT0xdLAorLSAgW0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5XSwKKy0gICAgIFthY19jdl9oZWFkZXJfc3RkYm9vbF9oXSwKKy0gICAgIFtBQ19UUllfQ09NUElMRSgKKy0JWworLQkgICNpbmNsdWRlIDxzdGRib29sLmg+CistCSAgI2lmbmRlZiBib29sCistCSAgICJlcnJvcjogYm9vbCBpcyBub3QgZGVmaW5lZCIKKy0JICAjZW5kaWYKKy0JICAjaWZuZGVmIGZhbHNlCistCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCSAgI2lmIGZhbHNlCistCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IDAiCistCSAgI2VuZGlmCistCSAgI2lmbmRlZiB0cnVlCistCSAgICJlcnJvcjogZmFsc2UgaXMgbm90IGRlZmluZWQiCistCSAgI2VuZGlmCistCSAgI2lmIHRydWUgIT0gMQorLQkgICAiZXJyb3I6IHRydWUgaXMgbm90IDEiCistCSAgI2VuZGlmCistCSAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZAorLQkgICAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZpbmVkIgorLQkgICNlbmRpZgorLQorLQkgIHN0cnVjdCBzIHsgX0Jvb2wgczogMTsgX0Jvb2wgdDsgfSBzOworLQorLQkgIGNoYXIgYVt0cnVlID09IDEgPyAxIDogLTFdOworLQkgIGNoYXIgYltmYWxzZSA9PSAwID8gMSA6IC0xXTsKKy0JICBjaGFyIGNbX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgPT0gMSA/IDEgOiAtMV07CistCSAgY2hhciBkWyhib29sKSAtMC41ID09IHRydWUgPyAxIDogLTFdOworLQkgIGJvb2wgZSA9ICZzOworLQkgIGNoYXIgZlsoX0Jvb2wpIC0wLjAgPT0gZmFsc2UgPyAxIDogLTFdOworLQkgIGNoYXIgZ1t0cnVlXTsKKy0JICBjaGFyIGhbc2l6ZW9mIChfQm9vbCldOworLQkgIGNoYXIgaVtzaXplb2Ygcy50XTsKKy0JXSwKKy0JWyByZXR1cm4gIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcgKyAhaCArICFpOyBdLAorLQlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXNdLAorLQlbYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ub10pXSkKKy0gICBBQ19DSEVDS19UWVBFUyhbX0Jvb2xdKQorLSAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRib29sX2ggPSB5ZXM7IHRoZW4KKy0gICAgIEFDX0RFRklORShIQVZFX1NUREJPT0xfSCwgMSwgW0RlZmluZSB0byAxIGlmIHN0ZGJvb2wuaCBjb25mb3JtcyB0byBDOTkuXSkKKy0gICBmaV0pCistI3NlcmlhbCA3IC0qLSBhdXRvY29uZiAtKi0KKy0KKy1kbmwgRnJvbSBKaW0gTWV5ZXJpbmcuCistZG5sCistZG5sIFNlZSBpZiB0aGUgZ2xpYmMgKl91bmxvY2tlZCBJL08gbWFjcm9zIG9yIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlLgorLWRubCBVc2Ugb25seSB0aG9zZSAqX3VubG9ja2VkIG1hY3JvcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgZGVjbGFyZWQKKy1kbmwgKGJlY2F1c2Ugc29tZSBvZiB0aGVtIHdlcmUgZGVjbGFyZWQgaW4gU29sYXJpcyAyLjUuMSBidXQgd2VyZSByZW1vdmVkCistZG5sIGluIFNvbGFyaXMgMi42LCB3aGVyZWFzIHdlIHdhbnQgYmluYXJpZXMgYnVpbHQgb24gU29sYXJpcyAyLjUuMSB0byBydW4KKy1kbmwgb24gU29sYXJpcyAyLjYpLgorLQorLUFDX0RFRlVOKFtqbV9GVU5DX0dMSUJDX1VOTE9DS0VEX0lPXSwKKy1bCistICBkbmwgUGVyc3VhZGUgZ2xpYmMgPHN0ZGlvLmg+IHRvIGRlY2xhcmUgZmdldHNfdW5sb2NrZWQoKSwgZnB1dHNfdW5sb2NrZWQoKQorLSAgZG5sIGV0Yy4KKy0gIEFDX1JFUVVJUkUoW0FDX0dOVV9TT1VSQ0VdKQorLQorLSAgQUNfQ0hFQ0tfREVDTFNfT05DRSgKKy0gICAgIFtjbGVhcmVycl91bmxvY2tlZCBmZW9mX3VubG9ja2VkIGZlcnJvcl91bmxvY2tlZAorLSAgICAgIGZmbHVzaF91bmxvY2tlZCBmZ2V0c191bmxvY2tlZCBmcHV0Y191bmxvY2tlZCBmcHV0c191bmxvY2tlZAorLSAgICAgIGZyZWFkX3VubG9ja2VkIGZ3cml0ZV91bmxvY2tlZCBnZXRjX3VubG9ja2VkCistICAgICAgZ2V0Y2hhcl91bmxvY2tlZCBwdXRjX3VubG9ja2VkIHB1dGNoYXJfdW5sb2NrZWRdKQorLV0pCistI3NlcmlhbCA1CistCistZG5sIEZyb20gSmltIE1leWVyaW5nCistCistZG5sIERlZmluZSBIQVZFX1NUUlVDVF9VVElNQlVGIGlmIGBzdHJ1Y3QgdXRpbWJ1ZicgaXMgZGVjbGFyZWQgLS0KKy1kbmwgdXN1YWxseSBpbiA8dXRpbWUuaD4uCistZG5sIFNvbWUgc3lzdGVtcyBoYXZlIHV0aW1lLmggYnV0IGRvbid0IGRlY2xhcmUgdGhlIHN0cnVjdCBhbnl3aGVyZS4KKy0KKy1BQ19ERUZVTihbam1fQ0hFQ0tfVFlQRV9TVFJVQ1RfVVRJTUJVRl0sCistWworLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN5cy90aW1lLmggdXRpbWUuaCkKKy0gIEFDX1JFUVVJUkUoW0FDX0hFQURFUl9USU1FXSkKKy0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHV0aW1idWZdLCBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYsCistICAgIFtBQ19UUllfQ09NUElMRSgKKy0gICAgICBbCistI2lmZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorLSMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jIGluY2x1ZGUgPHRpbWUuaD4KKy0jZWxzZQorLSMgaWZkZWYgSEFWRV9TWVNfVElNRV9ICistIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKy0jIGVsc2UKKy0jICBpbmNsdWRlIDx0aW1lLmg+CistIyBlbmRpZgorLSNlbmRpZgorLSNpZmRlZiBIQVZFX1VUSU1FX0gKKy0jIGluY2x1ZGUgPHV0aW1lLmg+CistI2VuZGlmCistICAgICAgXSwKKy0gICAgICBbc3RhdGljIHN0cnVjdCB1dGltYnVmIHg7IHguYWN0aW1lID0geC5tb2R0aW1lO10sCistICAgICAgZnVfY3Zfc3lzX3N0cnVjdF91dGltYnVmPXllcywKKy0gICAgICBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8pCistICAgIF0pCisgCistICBpZiB0ZXN0ICRmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYgPSB5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKEhBVkVfU1RSVUNUX1VUSU1CVUYsIDEsCistICAgICAgW0RlZmluZSBpZiBzdHJ1Y3QgdXRpbWJ1ZiBpcyBkZWNsYXJlZCAtLSB1c3VhbGx5IGluIDx1dGltZS5oPi4KKy0gICAgICAgU29tZSBzeXN0ZW1zIGhhdmUgdXRpbWUuaCBidXQgZG9uJ3QgZGVjbGFyZSB0aGUgc3RydWN0IGFueXdoZXJlLiBdKQorLSAgZmkKKy1dKQorLSMgeGFsbG9jLm00IHNlcmlhbCAxCistZG5sIENvcHlyaWdodCAoQykgMjAwMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy1kbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCistZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbAorLWRubCBQdWJsaWMgTGljZW5zZSwgdGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIGEgcHJvZ3JhbQorLWRubCB0aGF0IGNvbnRhaW5zIGEgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB1bmRlcgorLWRubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgYXMgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorKyNzZXJpYWwgMQorIAorLUFDX0RFRlVOKFtnbF9YQUxMT0NdLAorLVsKKy0gIGdsX1BSRVJFUV9YTUFMTE9DCistICBnbF9QUkVSRVFfWFNUUkRVUAorLV0pCisrZG5sIEZyb20gTXVtaXQgS2hhbiBhbmQgUGF1bCBFZ2dlcnQKKytkbmwgRGV0ZXJtaW5lIHdoZXRoZXIgbWtkaXIgYWNjZXB0cyBvbmx5IG9uZSBhcmd1bWVudCBpbnN0ZWFkIG9mIHRoZSB1c3VhbCB0d28uCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94bWFsbG9jLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9YTUFMTE9DXSwgWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfUkVRVUlSRShbam1fRlVOQ19NQUxMT0NdKQorLSAgQUNfUkVRVUlSRShbam1fRlVOQ19SRUFMTE9DXSkKKy1dKQorK0FDX0RFRlVOKFtQQVRDSF9GVU5DX01LRElSX1RBS0VTX09ORV9BUkddLAorKyAgW0FDX0NIRUNLX0ZVTkNTKG1rZGlyKQorKyAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50XSwKKysgICAgIHBhdGNoX2N2X21rZGlyX3Rha2VzX29uZV9hcmcsCisrICAgICBbcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworKyAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKysgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgXSwKKysJICBbbWtkaXIgKCIuIiwgMCk7XSwKKysJICAsCisrCSAgW0FDX1RSWV9DT01QSUxFKFsKKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrCSAgICAgXSwKKysJICAgICBbbWtkaXIgKCIuIik7XSwKKysJICAgICBwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnPXllcworKwkgICldCisrCSkKKysgICAgICBmaQorKyAgICAgXQorKyAgICkKKysgICBpZiB0ZXN0ICRwYXRjaF9jdl9ta2Rpcl90YWtlc19vbmVfYXJnID0geWVzOyB0aGVuCisrICAgICBBQ19ERUZJTkUoW01LRElSX1RBS0VTX09ORV9BUkddLCAxLAorKyAgICAgICBbRGVmaW5lIGlmIG1rZGlyIHRha2VzIG9ubHkgb25lIGFyZ3VtZW50Ll0pCisrICAgZmkKKysgIF0KKyspCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi94c3RyZHVwLmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9YU1RSRFVQXSwgWworLSAgQUNfUkVRVUlSRShbQUNfSEVBREVSX1NURENdKQorLSAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKHN0cmluZy5oKQorLV0pCistLS0gcGF0Y2gtMi41Ljkub3JpZy9jb25maWd1cmUKKysrKyBwYXRjaC0yLjUuOS9jb25maWd1cmUKK0BAIC0xLDExICsxLDEwIEBACisgIyEgL2Jpbi9zaAorICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKy0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41NyBmb3IgcGF0Y2ggMi41LjkuCisrIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkgZm9yIHBhdGNoIDIuNS45LgorICMKKyAjIFJlcG9ydCBidWdzIHRvIDxidWctcGF0Y2hAZ251Lm9yZz4uCisgIworLSMgQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIKKy0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKyMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK0BAIC0yMiw5ICsyMSwxMCBAQAorIGVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBzZXQgLW8gcG9zaXgKKyBmaQorK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKyAKKyAjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKy1pZiAoRk9PPUZPTzsgdW5zZXQgRk9PKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIGFzX3Vuc2V0PXVuc2V0CisgZWxzZQorICAgYXNfdW5zZXQ9ZmFsc2UKK0BAIC00Myw3ICs0Myw3IEBACisgICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICAgTENfVEVMRVBIT05FIExDX1RJTUUKKyBkbworLSAgaWYgKHNldCAreDsgdGVzdCAtbiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKysgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICAgZWxzZQorICAgICAkYXNfdW5zZXQgJGFzX3ZhcgorQEAgLTIyMCwxNiArMjIwLDE3IEBACisgaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICAgYXNfbWtkaXJfcD06CisgZWxzZQorKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgIGFzX21rZGlyX3A9ZmFsc2UKKyBmaQorIAorIGFzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKyAKKyAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCistYXNfdHJfY3BwPSJzZWQgeSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCistYXNfdHJfc2g9InNlZCB5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnIgorK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisgCisgCisgIyBJRlMKK0BAIC02NjksNyArNjcwLDcgQEAKKyAKKyAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KKyBmb3IgYWNfdmFyIGluIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIFwKKy0gICAgICAgICAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorKwkgICAgICBsb2NhbHN0YXRlZGlyIGxpYmRpciBpbmNsdWRlZGlyIG9sZGluY2x1ZGVkaXIgaW5mb2RpciBtYW5kaXIKKyBkbworICAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgICBjYXNlICRhY192YWwgaW4KK0BAIC03MDksMTAgKzcxMCwxMCBAQAorICAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCisgICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAorICRhc19leHByIFgiJDAiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCistICAgICAgICAgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorLSAgICAgICAgIFgiJDAiIDogJ1hcKC9cKScgXHwgXAorLSAgICAgICAgIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorKwkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisrCSBYIiQwIiA6ICdYXCgvXCknIFx8IFwKKysJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorIGVjaG8gWCIkMCIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtODA0LDkgKzgwNSw5IEBACisgICBjYXQgPDxfQUNFT0YKKyBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgICAtLXByZWZpeD1QUkVGSVggICAgICAgICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBmaWxlcyBpbiBQUkVGSVgKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisrCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAgLS1leGVjLXByZWZpeD1FUFJFRklYICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGZpbGVzIGluIEVQUkVGSVgKKy0gICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisrCQkJICBbUFJFRklYXQorIAorIEJ5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorIFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CitAQCAtODk2LDEyICs4OTcsNDUgQEAKKyAgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworIGVzYWMKKy0jIERvbid0IGJsaW5kbHkgcGVyZm9ybSBhIGBjZCAiJGFjX2RpciIvJGFjX2ZvbyAmJiBwd2RgIHNpbmNlICRhY19mb28gY2FuIGJlCistIyBhYnNvbHV0ZS4KKy1hY19hYnNfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfYnVpbGRkaXIgJiYgcHdkYAorLWFjX2Fic190b3BfYnVpbGRkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAke2FjX3RvcF9idWlsZGRpcn0uICYmIHB3ZGAKKy1hY19hYnNfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3NyY2RpciAmJiBwd2RgCistYWNfYWJzX3RvcF9zcmNkaXI9YGNkICIkYWNfZGlyIiAmJiBjZCAkYWNfdG9wX3NyY2RpciAmJiBwd2RgCisrCisrIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisrIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KKytjYXNlIGBwd2RgIGluCisrLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrKikKKysgIGNhc2UgIiRhY19kaXIiIGluCisrICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKysgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrKikKKysgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyopCisrICBjYXNlICRhY19zcmNkaXIgaW4KKysgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisrICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyopCisrICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisrICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisrICBlc2FjOzsKKytlc2FjCisgCisgICAgIGNkICRhY19kaXIKKyAgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmU7IG90aGVyd2lzZSBnZXQgQ3lnbnVzIHN0eWxlIGNvbmZpZ3VyZS4KK0BAIC05MTIsMTMgKzk0NiwxMyBAQAorICAgICAgIGVjaG8KKyAgICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKKyAgICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmFjIHx8CistICAgICAgICAgICB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCisrCSAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKyAgICAgICBlY2hvCisgICAgICAgJGFjX2NvbmZpZ3VyZSAtLWhlbHAKKyAgICAgZWxzZQorICAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICAgZmkKKy0gICAgY2QgJGFjX3BvcGRpcgorKyAgICBjZCAiJGFjX3BvcGRpciIKKyAgIGRvbmUKKyBmaQorIAorQEAgLTkyNiwxMCArOTYwLDkgQEAKKyBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCisgICBjYXQgPDxcX0FDRU9GCisgcGF0Y2ggY29uZmlndXJlIDIuNS45CistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3CisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5CisgCistQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIKKy1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisgX0FDRU9GCitAQCAtOTQxLDcgKzk3NCw3IEBACisgcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKyAKKyBJdCB3YXMgY3JlYXRlZCBieSBwYXRjaCAkYXNfbWUgMi41LjksIHdoaWNoIHdhcworLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41Ny4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworIAorICAgJCAkMCAkQAorIAorQEAgLTEwMTgsMTkgKzEwNTEsMTkgQEAKKyAgICAgMikKKyAgICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorLSAgICAgICAgYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgorKwlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCisgICAgICAgZWxzZQorLSAgICAgICAgY2FzZSAkYWNfYXJnIGluCistICAgICAgICAgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorLSAgICAgICAgICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCistICAgICAgICAgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKy0gICAgICAgICAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCistICAgICAgICAgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCistICAgICAgICAgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworLSAgICAgICAgICAgIGVzYWMKKy0gICAgICAgICAgICA7OworLSAgICAgICAgICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKy0gICAgICAgIGVzYWMKKysJY2FzZSAkYWNfYXJnIGluCisrCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCisrCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorKwkgIHwgLXEgfCAtcXVpZXQgfCAtLXEqIHwgLXNpbGVudCB8IC0tc2lsKiB8IC12IHwgLXZlcmIqIFwKKysJICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKKysJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorKwkgICAgICAiJGFjX2NvbmZpZ3VyZV9hcmdzMSIqIiAnJGFjX2FyZycgIiogKSBjb250aW51ZSA7OworKwkgICAgZXNhYworKwkgICAgOzsKKysJICAtKiApIGFjX211c3Rfa2VlcF9uZXh0PXRydWUgOzsKKysJZXNhYworICAgICAgIGZpCisgICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyRhY19zZXAnJGFjX2FyZyciCisgICAgICAgIyBHZXQgcmlkIG9mIHRoZSBsZWFkaW5nIHNwYWNlLgorQEAgLTEwNjQsMTIgKzEwOTcsMTIgQEAKKyAgICAgY2FzZSBgKGFjX3NwYWNlPSciJyInICciJyInOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorICAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy8nIiciJy8nIiciJ1xcXFwnIiciJyciJyInL2c7CistICAgIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9JyInIidcXDInIiciJy9wIgorKwkicy8nIiciJy8nIiciJ1xcXFwnIiciJyciJyInL2c7CisrCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICBzZWQgLW4gXAorLSAgICAgICAgInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisrCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgIDs7CisgICAgIGVzYWM7CisgfQorQEAgLTEwOTgsNyArMTEzMSw3IEBACisgICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgICBkbworIAlldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKKy0gICAgICAgIGVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisrCWVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisgICAgICAgZG9uZSB8IHNvcnQKKyAgICAgICBlY2hvCisgICAgIGZpCitAQCAtMTExNyw3ICsxMTUwLDcgQEAKKyAgICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgIH0gPiY1CistICBybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgJiYKKysgIHJtIC1mIGNvcmUgKi5jb3JlICYmCisgICBybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgorICAgICBleGl0ICRleGl0X3N0YXR1cworICAgICAgJyAwCitAQCAtMTE5Nyw3ICsxMjMwLDcgQEAKKyAjIHZhbHVlLgorIGFjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfAorLSAgICAgICAgICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisrCSAgICAgICBzZWQgLW4gJ3MvXmFjX2Vudl9cKFthLXpBLVpfMC05XSpcKV9zZXQ9LiovXDEvcCdgOyBkbworICAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKyAgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgICBldmFsIGFjX29sZF92YWw9IlwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZSIKK0BAIC0xMjE0LDEzICsxMjQ3LDEzIEBACisgICAgICwpOzsKKyAgICAgKikKKyAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCistICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorLSAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiY1CisrCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQorIGVjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KKy0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQorKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKKyBlY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mMjt9CistICAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OgorKwlhY19jYWNoZV9jb3JydXB0ZWQ9OgorICAgICAgIGZpOzsKKyAgIGVzYWMKKyAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KK0BAIC0xNjI5LDcgKzE2NjIsNiBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTY0OSw4ICsxNjgxLDggQEAKKyAjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisgIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorICMgb2YgZXhlZXh0LgorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCIgPiY1CistZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dC4uLiAkRUNIT19DIiA+JjYKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAkRUNIT19DIiA+JjYKKyBhY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKKyAgIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKK0BAIC0xNjcwLDIzICsxNzAyLDIzIEBACisgICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApCistICAgICAgICA7OworKwk7OworICAgICBjb25mdGVzdC4kYWNfZXh0ICkKKy0gICAgICAgICMgVGhpcyBpcyB0aGUgc291cmNlIGZpbGUuCistICAgICAgICA7OworKwkjIFRoaXMgaXMgdGhlIHNvdXJjZSBmaWxlLgorKwk7OworICAgICBbYWJdLm91dCApCistICAgICAgICAjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorLSAgICAgICAgIyBjZXJ0YWlubHkgcmlnaHQuCistICAgICAgICBicmVhazs7CisrCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisrCSMgY2VydGFpbmx5IHJpZ2h0LgorKwlicmVhazs7CisgICAgICouKiApCistICAgICAgICBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKy0gICAgICAgICMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sLAorLSAgICAgICAgIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKy0gICAgICAgICMgbWFpbnRhaW4gTGlidG9vbD8gLS1ha2ltLgorLSAgICAgICAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorLSAgICAgICAgYnJlYWs7OworKwlhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKysJIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCisrCSMgYnV0IGl0IHdvdWxkIGJlIGNvb2wgdG8gZmluZCBvdXQgaWYgaXQncyB0cnVlLiAgRG9lcyBhbnlib2R5CisrCSMgbWFpbnRhaW4gTGlidG9vbD8gLS1ha2ltLgorKwlleHBvcnQgYWNfY3ZfZXhlZXh0CisrCWJyZWFrOzsKKyAgICAgKiApCistICAgICAgICBicmVhazs7CisrCWJyZWFrOzsKKyAgIGVzYWMKKyBkb25lCisgZWxzZQorQEAgLTE3NjAsOCArMTc5Miw4IEBACisgICBjYXNlICRhY19maWxlIGluCisgICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKSA7OworICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKy0gICAgICAgICAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorLSAgICAgICAgICBicmVhazs7CisrCSAgZXhwb3J0IGFjX2N2X2V4ZWV4dAorKwkgIGJyZWFrOzsKKyAgICAgKiApIGJyZWFrOzsKKyAgIGVzYWMKKyBkb25lCitAQCAtMTc4Niw3ICsxODE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTE4MzcsNyArMTg2OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xODU3LDExICsxODg3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMTg3NCw3ICsxOTEzLDcgQEAKKyAKKyBhY19jb21waWxlcl9nbnU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBhY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisgCisgZmkKK0BAIC0xODkwLDcgKzE5MjksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTkwNywxMSArMTk0NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTE5MjQsNyArMTk3MSw3IEBACisgCisgYWNfY3ZfcHJvZ19jY19nPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKK0BAIC0xOTUxLDcgKzE5OTgsNiBAQAorICAgYWNfY3ZfcHJvZ19jY19zdGRjPW5vCisgYWNfc2F2ZV9DQz0kQ0MKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTk3OSw2ICsyMDI1LDE2IEBACisgICB2YV9lbmQgKHYpOworICAgcmV0dXJuIHM7CisgfQorKworKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisrICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZDEgaXMgYWRkZWQgdG8gZ2V0CisrICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorKyAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZworKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkMS4gICovCisraW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKysKKyBpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKKyBzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKKyBzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK0BAIC0yMDA1LDExICsyMDYxLDIwIEBACisgICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKKyAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTIwMjIsNyArMjA4Nyw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgZG9uZQorIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorIENDPSRhY19zYXZlX0NDCitAQCAtMjA1MCwxOSArMjExNSwyNyBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGZvciBhY19kZWNsYXJhdGlvbiBpbiBcCistICAgJydcCistICAgJyNpbmNsdWRlIDxzdGRsaWIuaD4nIFwKKysgICAnJyBcCisgICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKK0BAIC0yMDcwLDE0ICsyMTQzLDEzIEBACisgICAgJ3ZvaWQgZXhpdCAoaW50KTsnCisgZG8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLSNpbmNsdWRlIDxzdGRsaWIuaD4KKyAkYWNfZGVjbGFyYXRpb24KKysjaW5jbHVkZSA8c3RkbGliLmg+CisgaW50CisgbWFpbiAoKQorIHsKK0BAIC0yMDg4LDExICsyMTYwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjEwNSw5ICsyMTg2LDggQEAKKyAKKyBjb250aW51ZQorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIxMjQsMTEgKzIyMDQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yMTQwLDcgKzIyMjksNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBkb25lCisgcm0gLWYgY29uZnRlc3QqCisgaWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgorQEAgLTIxNTQsNyArMjI0Myw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGFjX2V4dD1jCisgYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKKyBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCitAQCAtMjE4OSw3ICsyMjc4LDYgQEAKKyAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yMjAwLDcgKzIyODgsNyBAQAorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKy0gICAgICAgICAgICAgICAgICAgICBTeW50YXggZXJyb3IKKysJCSAgICAgU3ludGF4IGVycm9yCisgX0FDRU9GCisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorQEAgLTIyMTIsNiArMjMwMCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yMjMyLDcgKzIzMjEsNiBAQAorICAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIyNTAsNiArMjMzOCw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC0yMjk2LDcgKzIzODUsNiBAQAorICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTIzMDcsNyArMjM5NSw3IEBACisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorLSAgICAgICAgICAgICAgICAgICAgIFN5bnRheCBlcnJvcgorKwkJICAgICBTeW50YXggZXJyb3IKKyBfQUNFT0YKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCitAQCAtMjMxOSw2ICsyNDA3LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTIzMzksNyArMjQyOCw2IEBACisgICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjM1Nyw2ICsyNDQ1LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTI0MzEsNiArMjUyMCw3IEBACisgIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKKyAjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyAjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisrIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCisgIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAkRUNIT19DIiA+JjYKK0BAIC0yNDQ3LDYgKzI1MzcsNyBAQAorIGNhc2UgJGFzX2Rpci8gaW4KKyAgIC4vIHwgLi8vIHwgL2NDLyogfCBcCisgICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKysgID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAorICAgL3Vzci91Y2IvKiApIDs7CisgICAqKQorICAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorQEAgLTI0NTQsMjAgKzI1NDUsMjAgQEAKKyAgICAgIyBieSBkZWZhdWx0LgorICAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCistICAgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorLSAgICAgICAgICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorLSAgICAgICAgICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKy0gICAgICAgICAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCistICAgICAgICAgICAgOgorLSAgICAgICAgICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCistICAgICAgICAgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorLSAgICAgICAgICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorLSAgICAgICAgICAgIDoKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKy0gICAgICAgICAgICBicmVhayAzCistICAgICAgICAgIGZpCistICAgICAgICBmaQorKwlpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorKwkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCisrCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisrCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisrCSAgICA6CisrCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorKwkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCisrCSAgICA6CisrCSAgZWxzZQorKwkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorKwkgICAgYnJlYWsgMworKwkgIGZpCisrCWZpCisgICAgICAgZG9uZQorICAgICBkb25lCisgICAgIDs7CitAQCAtMjQ5OSw3ICsyNTkwLDcgQEAKKyAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNgorLXNldCBkdW1teSAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAneSwuLystLF9fcF8sJ2AKKytzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksOi4vKy0sX19fcF8sJ2AKKyBpZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorQEAgLTI1OTYsNyArMjY4Nyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBSVgiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEFJWC4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjYyOCw3ICsyNzE4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI2NDksMTEgKzI3MzgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0yNjY2LDEyICsyNzY0LDExIEBACisgCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTI2OTMsNyArMjc5MCw2IEBACisgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgICMgSVNDIDIuMC4yIHN0ZGxpYi5oIGRvZXMgbm90IGRlY2xhcmUgZnJlZSwgY29udHJhcnkgdG8gQU5TSS4KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNzE4LDcgKzI4MTQsNiBAQAorICAgOgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yNzMwLDkgKzI4MjUsOSBAQAorICMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyAjZWxzZQorICMgZGVmaW5lIElTTE9XRVIoYykgXAorLSAgICAgICAgICAgICAgICAgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKy0gICAgICAgICAgICAgICAgICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKysJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisrCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKysJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyAjZW5kaWYKKyAKK0BAIC0yNzQzLDcgKzI4MzgsNyBAQAorICAgaW50IGk7CisgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKy0gICAgICAgIHx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgICBleGl0KDIpOworICAgZXhpdCAoMCk7CisgfQorQEAgLTI3NjgsNyArMjg2Myw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2hlYWRlcl9zdGRjPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBmaQorQEAgLTI3OTMsNyArMjg4OCw3IEBACisgCisgCisgZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCistICAgICAgICAgICAgICAgICAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCisgZG8KKyBhc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorQEAgLTI4MDIsNyArMjg5Nyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yODE0LDExICsyOTA4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjgzMSw3ICsyOTM0LDcgQEAKKyAKKyBldmFsICIkYXNfYWNfSGVhZGVyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0yODU4LDcgKzI5NjEsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBtaW5peC9jb25maWcuaCB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgbWluaXgvY29uZmlnLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0yODY5LDExICsyOTcxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMjg4Niw3ICsyOTk3LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC0yODk0LDcgKzMwMDUsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBtaW5peC9jb25maWcuaCBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyBtaW5peC9jb25maWcuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMjkxMiw2ICszMDIyLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTI5MzEsMzMgKzMwNDIsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogbWluaXgvY29uZmlnLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaW5peC9jb25maWcuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pbml4L2NvbmZpZy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTMwMDAsMTUgKzMxMTAsMTUgQEAKKyBmaQorIAorIAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHN0cmVycm9yIiA+JjUKKy1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJyb3IuLi4gJEVDSE9fQyIgPiY2CistaWYgdGVzdCAiJHthY19jdl9zZWFyY2hfc3RyZXJyb3Irc2V0fSIgPSBzZXQ7IHRoZW4KKysKKysgICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RyZXJyb3IgaW4gLWxjcG9zaXgiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cmVycm9yIGluIC1sY3Bvc2l4Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvcitzZXR9IiA9IHNldDsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKKy1hY19jdl9zZWFyY2hfc3RyZXJyb3I9bm8KKysgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKKytMSUJTPSItbGNwb3NpeCAgJExJQlMiCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMwMzIsNzkgKzMxNDIsNDMgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CistICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorLSAgYWNfY3Zfc2VhcmNoX3N0cmVycm9yPSJub25lIHJlcXVpcmVkIgorLWVsc2UKKy0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cistc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorLQorLWZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID0gbm87IHRoZW4KKy0gIGZvciBhY19saWIgaW4gY3Bvc2l4OyBkbworLSAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCistICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKy0vKiBjb25mZGVmcy5oLiAgKi8KKy1fQUNFT0YKKy1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKy1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCistI2lmZGVmIF9fY3BsdXNwbHVzCistZXh0ZXJuICJDIgorLSNlbmRpZgorLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKy0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworLWNoYXIgc3RyZXJyb3IgKCk7CistaW50CistbWFpbiAoKQorLXsKKy1zdHJlcnJvciAoKTsKKy0gIDsKKy0gIHJldHVybiAwOworLX0KKy1fQUNFT0YKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKy0gIGFjX3N0YXR1cz0kPworLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKy0gIGFjX2N2X3NlYXJjaF9zdHJlcnJvcj0iLWwkYWNfbGliIgorLWJyZWFrCisrICBhY19jdl9saWJfY3Bvc2l4X3N0cmVycm9yPXllcworIGVsc2UKKyAgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorK2FjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKy0gIGRvbmUKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCisgZmkKKy1MSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2Nwb3NpeF9zdHJlcnJvciIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3IiID4mNgorK2lmIHRlc3QgJGFjX2N2X2xpYl9jcG9zaXhfc3RyZXJyb3IgPSB5ZXM7IHRoZW4KKysgIExJQlM9IiRMSUJTIC1sY3Bvc2l4IgorIGZpCistZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY1CistZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgPiY2CistaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9zdHJlcnJvciIgIT0gbm87IHRoZW4KKy0gIHRlc3QgIiRhY19jdl9zZWFyY2hfc3RyZXJyb3IiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19jdl9zZWFyY2hfc3RyZXJyb3IgJExJQlMiCisgCistZmkKKysKKyAKKyAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIG9yIC0tZGlzYWJsZS1sYXJnZWZpbGUgd2FzIGdpdmVuLgorIGlmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbgorQEAgLTMxMjQsOCArMzE5OCw3IEBACisgICAgICAgIHdoaWxlIDo7IGRvCisgICAgICAJICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCisgICAgICAJICMgc28gdXNlIHRoZSBDIGNvbXBpbGVyJ3MgLW4zMiBvcHRpb24gaWYgdGhhdCBoZWxwcy4KKy0gICAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisrCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMTUwLDExICszMjIzLDIwIEBACisgX0FDRU9GCisgICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMxNjYsMTUgKzMyNDgsMjQgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgIAkgQ0M9IiRDQyAtbjMyIgorICAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMTg2LDggKzMyNzcsOCBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKy0gICAgICAgICBicmVhaworK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisrCSBicmVhaworICAgICAgICBkb25lCisgICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMjA3LDcgKzMyOTgsNiBAQAorICAgd2hpbGUgOjsgZG8KKyAgIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPW5vCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzIzMiwxMSArMzMyMiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMyNDgsOSArMzM0Nyw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTMyNzYsMTEgKzMzNzQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0zMjkyLDcgKzMzOTksNyBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGJyZWFrCisgZG9uZQorIGZpCitAQCAtMzMxNCw3ICszNDIxLDYgQEAKKyAgIHdoaWxlIDo7IGRvCisgICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0zMzM5LDExICszNDQ1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzM1NSw5ICszNDcwLDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzM4MywxMSArMzQ5NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTMzOTksNyArMzUyMiw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC0zNDQzLDcgKzM1NjYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzUwNiwxMSArMzYyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM1MjMsNyArMzY1NCw3IEBACisgCisgYWNfY3ZfY19jb25zdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjYKK0BAIC0zNTUwLDcgKzM2ODEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzU3MCwxMSArMzcwMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM1ODcsNyArMzcyNiw3IEBACisgCisgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtMzYxMCw3ICszNzQ5LDYgQEAKKyAgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworIGFjX2N2X3NlYXJjaF9vcGVuZGlyPW5vCisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM2MzQsMTEgKzM3NzIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM2NTAsMTIgKzM3OTcsMTIgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9IG5vOyB0aGVuCisgICBmb3IgYWNfbGliIGluIGRpcjsgZG8KKyAgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzY3OSwxMSArMzgyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzY5Niw3ICszODUyLDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBkb25lCisgZmkKKyBMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK0BAIC0zNzE3LDcgKzM4NzQsNiBAQAorICAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCisgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzc0MSwxMSArMzg5NywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzc1NywxMiArMzkyMiwxMiBAQAorIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KKyAgIGZvciBhY19saWIgaW4geDsgZG8KKyAgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzc4NiwxMSArMzk1MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtMzgwMyw3ICszOTc3LDggQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICBkb25lCisgZmkKKyBMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK0BAIC0zODIzLDcgKzM5OTgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzg0NCwxMSArNDAxOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTM4NjEsMTIgKzQwNDQsMTEgQEAKKyAKKyBhY19jdl9oZWFkZXJfc3RkYz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMzg4OCw3ICs0MDcwLDYgQEAKKyBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM5MTMsNyArNDA5NCw2IEBACisgICA6CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTM5MjUsOSArNDEwNSw5IEBACisgIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorICNlbHNlCisgIyBkZWZpbmUgSVNMT1dFUihjKSBcCistICAgICAgICAgICAgICAgICAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCistICAgICAgICAgICAgICAgICAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorLSAgICAgICAgICAgICAgICAgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKysJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyAjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorICNlbmRpZgorIAorQEAgLTM5MzgsNyArNDExOCw3IEBACisgICBpbnQgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorLSAgICAgICAgfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisrCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgIGV4aXQoMik7CisgICBleGl0ICgwKTsKKyB9CitAQCAtMzk2Myw3ICs0MTQzLDcgQEAKKyAoIGV4aXQgJGFjX3N0YXR1cyApCisgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGZpCitAQCAtMzk5OSw3ICs0MTc5LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQwMTAsMTEgKzQxODksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00MDI3LDcgKzQyMTUsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTQwMzUsNyArNDIyMyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDA1Myw2ICs0MjQwLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTQwNzIsMzMgKzQyNjAsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKysgICAgOzsKKysgIG5vOnllczoqICkKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKy0gICAgOzsKKy0gIG5vOnllcyApCistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC00MTA5LDcgKzQyOTYsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTQxMzEsNyArNDMxOCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MTUxLDExICs0MzM3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDE2OCw3ICs0MzYzLDcgQEAKKyAKKyBhY19jdl90eXBlX21vZGVfdD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbW9kZV90IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9tb2RlX3QiID4mNgorQEAgLTQxODgsNyArNDM4Myw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MjA4LDExICs0NDAyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDIyNSw3ICs0NDI4LDcgQEAKKyAKKyBhY19jdl90eXBlX29mZl90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9vZmZfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfb2ZmX3QiID4mNgorQEAgLTQyNDUsNyArNDQ0OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MjY1LDExICs0NDY3LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDI4Miw3ICs0NDkzLDcgQEAKKyAKKyBhY19jdl90eXBlX3BpZF90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9waWRfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfcGlkX3QiID4mNgorQEAgLTQzMDIsNyArNDUxMyw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00MzI5LDExICs0NTM5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDM0Niw3ICs0NTY1LDcgQEAKKyAKKyBhY19jdl90eXBlX3NpZ25hbD1pbnQKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2lnbmFsIiA+JjYKK0BAIC00MzYyLDcgKzQ1ODEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDM4MiwxMSArNDYwMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQzOTksNyArNDYyNiw3IEBACisgCisgYWNfY3ZfdHlwZV9zaXplX3Q9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpemVfdCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2l6ZV90IiA+JjYKK0BAIC00NDE5LDcgKzQ2NDYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDQ2OCwxMSArNDY5NCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ0ODUsNyArNDcyMCw3IEBACisgCisgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjYKK0BAIC00NDk1LDcgKzQ3MzAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDUxNSwxMSArNDc0OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ1MzIsNyArNDc3NSw3IEBACisgCisgYWNfY3ZfdHlwZV9fQm9vbD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfX0Jvb2wiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX19Cb29sIiA+JjYKK0BAIC00NTg5LDcgKzQ4MzIsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDYwMCwxMSArNDg0MiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTQ2MTcsNyArNDg2OCw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNDYyNSw3ICs0ODc2LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00NjQzLDYgKzQ4OTMsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNDY2MiwzMyArNDkxMywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTQ2OTksNyArNDk0OSw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNDczMyw3ICs0OTgzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTQ3NDQsMTEgKzQ5OTMsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC00NzYxLDcgKzUwMTksNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTQ3NjksNyArNTAyNyw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNDc4Nyw2ICs1MDQ0LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTQ4MDYsMzMgKzUwNjQsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC00ODQzLDcgKzUxMDAsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTQ4NjUsNyArNTEyMiw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00ODg2LDExICs1MTQyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDkwMyw3ICs1MTY4LDcgQEAKKyAKKyBhY19jdl9oZWFkZXJfdGltZT1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3RpbWUiID4mNgorQEAgLTQ5MzMsNyArNTE5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC00OTY0LDExICs1MjI4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNDk4MSw3ICs1MjU0LDcgQEAKKyAKKyBmdV9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRmdV9jdl9zeXNfc3RydWN0X3V0aW1idWYiID4mNQorQEAgLTUwMDUsNyArNTI3OCw2IEBACisgICBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUwNDUsNyArNTMxNyw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBmaQorLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQiID4mNQorQEAgLTUwNzYsNyArNTM0OCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01MDg3LDExICs1MzU4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTEwNCw3ICs1Mzg0LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC01MTEyLDcgKzUzOTIsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUxMzAsNiArNTQwOSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC01MTQ5LDMzICs1NDI5LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNTE4Niw3ICs1NDY1LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC01MjIwLDcgKzU0OTksNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTIzMSwxMSArNTUwOSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTUyNDgsNyArNTUzNSw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTI1Niw3ICs1NTQzLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01Mjc0LDYgKzU1NjAsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTI5MywzMyArNTU4MCwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTUzMzAsNyArNTYxNiw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTM2NCw3ICs1NjUwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTUzNzUsMTEgKzU2NjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01MzkyLDcgKzU2ODYsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTU0MDAsNyArNTY5NCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTQxOCw2ICs1NzExLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTU0MzcsMzMgKzU3MzEsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC01NDc0LDcgKzU3NjcsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTU0OTcsNyArNTc5MCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NTE3LDExICs1ODA5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTUzNCw3ICs1ODM1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0ZW52PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9nZXRlbnYiID4mNgorQEAgLTU1NjIsNyArNTg2Myw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NTgyLDExICs1ODgyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNTU5OSw3ICs1OTA4LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfbWFsbG9jPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9tYWxsb2MiID4mNgorQEAgLTU2MjgsNyArNTkzNyw2IEBACisgZWxzZQorIAorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU2NDcsMTEgKzU5NTUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC01NjY0LDcgKzU5ODEsNyBAQAorIAorIGFjX2N2X3dpbl9vcl9kb3M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93aW5fb3JfZG9zIiA+JjUKK0BAIC01NzE0LDcgKzYwMzEsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNTcyNSwxMSArNjA0MSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU3NDIsNyArNjA2Nyw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNTc1MCw3ICs2MDc1LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC01NzY4LDYgKzYwOTIsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNTc4NywzMyArNjExMiwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTU4MjQsNyArNjE0OCw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNTg3Miw3ICs2MTk2LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTU5MDUsMTEgKzYyMjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTU5MjIsNyArNjI1NCw4IEBACisgCisgam1fY3Zfc3RydWN0X2RpcmVudF9kX2lubz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIAorIAorIGZpCitAQCAtNjAxMSwyMSArNjM0NCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02MDU2LDExICs2Mzk2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MDczLDcgKzY0MjIsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTYxMjYsMjEgKzY0NzYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjE3MSwxMSArNjUyOCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjE4OCw3ICs2NTU0LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02MjAzLDIxICs2NTcwLDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSBfZG9wcm50IHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgX2RvcHJudC4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lIF9kb3BybnQgaW5ub2N1b3VzX19kb3BybnQKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgX2RvcHJudCAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgX2RvcHJudAorKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTYyNDgsMTEgKzY2MjIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTYyNjUsNyArNjY0OCw4IEBACisgCisgYWNfY3ZfZnVuY19fZG9wcm50PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19fZG9wcm50IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19fZG9wcm50IiA+JjYKK0BAIC02Mjg4LDEzICs2NjcyLDEyIEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLQorKyRhY19pbmNsdWRlc19kZWZhdWx0CisgaW50CisgbWFpbiAoKQorIHsKK0BAIC02MzA1LDExICs2Njg4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02MzIyLDEyICs2NzE0LDIwIEBACisgCisgYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lIiA+JjYKKyBpZiB0ZXN0ICRhY19jdl9saWJfZXJyb3JfYXRfbGluZSA9IG5vOyB0aGVuCistICBMSUJPQkpTPSIkTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0IgorKyAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAiZXJyb3IuJGFjX29iamV4dCIgICB8IFwKKysgICoiIGVycm9yLiRhY19vYmpleHQiICAgfCBcCisrICAgICJlcnJvci4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgZXJyb3IuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyBlcnJvci4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyBmaQorIAorIAorQEAgLTYzNDMsMjEgKzY3NDMsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtNjM4OCwxMSArNjc5NSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKy0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjQwNSw3ICs2ODIxLDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC02NDIzLDcgKzY4NDAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjQ0MywxMSArNjg1OSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY0NjAsNyArNjg4NSw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yIiA+JjYKK0BAIC02NDg2LDcgKzY5MTEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjUwNiwxMSArNjkzMCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY1MjMsNyArNjk1Niw3IEBACisgCisgYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9yX3I9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yIiA+JjYKK0BAIC02NTUzLDIxICs2OTg2LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTY1OTgsMTEgKzcwMzgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTY2MTUsNyArNzA2NCw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtNjYzNiw3ICs3MDg2LDYgQEAKKyAgICAgYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcD1ubworICAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciA9IHllczsgdGhlbgorICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02NjU3LDExICs3MTA2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjY3Myw3ICs3MTMxLDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGVsc2UKKyAgICAgICAjIHN0cmVycm9yX3IgaXMgbm90IGRlY2xhcmVkLiAgQ2hvb3NlIGJldHdlZW4KKyAgICAgICAjIHN5c3RlbXMgdGhhdCBoYXZlIHJlbGF0aXZlbHkgaW5hY2Nlc3NpYmxlIGRlY2xhcmF0aW9ucyBmb3IgdGhlCitAQCAtNjY4NSw3ICs3MTQzLDYgQEAKKyAgIDoKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNjcyMSw3ICs3MTc4LDcgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgICAgIGZpCisgCitAQCAtNjc0OSwyMSArNzIwNiwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC02Nzk0LDExICs3MjU4LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC02ODExLDcgKzcyODQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTY4MjEsNyArNzI5NSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTY4NTUsNyArNzMzNiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC02ODY2LDExICs3MzQ2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNjg4Myw3ICs3MzcyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC02ODkxLDcgKzczODAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTY5MDksNiArNzM5Nyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC02OTI4LDMzICs3NDE3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNjk2NSw3ICs3NDUzLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC02OTg5LDcgKzc0NzcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzA1MywyMSArNzU0MCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC03MDk4LDExICs3NTkyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03MTE1LDcgKzc2MTgsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTcxMjUsNyArNzYyOSwxNCBAQAorIF9BQ0VPRgorIAorIGVsc2UKKy0gIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiCisrICBjYXNlICRMSUJPQkpTIGluCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0IiAgIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICAgIiRhY19mdW5jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiAkYWNfZnVuYy4kYWNfb2JqZXh0ICIqICkgOzsKKysgICopIExJQk9CSlM9IiRMSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIGZpCisgZG9uZQorIAorQEAgLTcxNjMsNyArNzY3NCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03MTc0LDExICs3Njg0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzE5MSw3ICs3NzEwLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03MTk5LDcgKzc3MTgsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTcyMTcsNiArNzczNSw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03MjM2LDMzICs3NzU1LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzI3Myw3ICs3NzkxLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03Mjk3LDcgKzc4MTUsNiBAQAorICAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vCisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTczMzcsNyArNzg1NCw3IEBACisgKCBleGl0ICRhY19zdGF0dXMgKQorIGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD1ubworIGZpCistcm0gLWYgY29yZSBjb3JlLiogKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCIgPiY1CitAQCAtNzM1Myw3ICs3ODcwLDE0IEBACisgI2RlZmluZSBIQVZFX01BTExPQyAwCisgX0FDRU9GCisgCistICAgTElCT0JKUz0iJExJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiCisrICAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAibWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiBtYWxsb2MuJGFjX29iamV4dCIgICB8IFwKKysgICAgIm1hbGxvYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgbWFsbG9jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiIDs7CisrZXNhYworKworIAorIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisgI2RlZmluZSBtYWxsb2MgcnBsX21hbGxvYworQEAgLTczODgsNyArNzkxMiw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03Mzk5LDExICs3OTIyLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzQxNiw3ICs3OTQ4LDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03NDI0LDcgKzc5NTYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc0NDIsNiArNzk3Myw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03NDYxLDMzICs3OTkzLDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzQ5OCw3ICs4MDI5LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03NTIyLDcgKzgwNTMsNiBAQAorICAgYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD1ubworIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NTYyLDcgKzgwOTIsNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPW5vCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCIgPiY1CitAQCAtNzU3OCw3ICs4MTA4LDE0IEBACisgI2RlZmluZSBIQVZFX1JFQUxMT0MgMAorIF9BQ0VPRgorIAorLSAgIExJQk9CSlM9IiRMSUJPQkpTIHJlYWxsb2MuJGFjX29iamV4dCIKKysgICBjYXNlICRMSUJPQkpTIGluCisrICAgICJyZWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAqIiByZWFsbG9jLiRhY19vYmpleHQiICAgfCBcCisrICAgICJyZWFsbG9jLiRhY19vYmpleHQgIiogfCBcCisrICAqIiByZWFsbG9jLiRhY19vYmpleHQgIiogKSA7OworKyAgKikgTElCT0JKUz0iJExJQk9CSlMgcmVhbGxvYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyAKKyBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorICNkZWZpbmUgcmVhbGxvYyBycGxfcmVhbGxvYworQEAgLTc2MTksNyArODE1Niw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03NjMwLDExICs4MTY2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtNzY0Nyw3ICs4MTkyLDcgQEAKKyAKKyBhY19oZWFkZXJfY29tcGlsZXI9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKyAKK0BAIC03NjU1LDcgKzgyMDAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc2NzMsNiArODIxNyw3IEBACisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisrICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICAgZWxzZQorICAgICBhY19jcHBfZXJyPQorICAgZmkKK0BAIC03NjkyLDMzICs4MjM3LDMyIEBACisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKyAKKyAjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KKy1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jIGluCistICB5ZXM6bm8gKQorK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKysgIHllczpubzogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorLSAgICAoCistICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLV9BU0JPWAorLSAgICApIHwKKy0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICAgOzsKKy0gIG5vOnllcyApCisrICBubzp5ZXM6KiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CistICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAgKAorICAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1wYXRjaEBnbnUub3JnICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyBfQVNCT1gKKyAgICAgKSB8CisgICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCitAQCAtNzcyOSw3ICs4MjczLDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC03NzcyLDcgKzgzMTYsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzc4MywxMSArODMyNiwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTc4MDAsNyArODM1Miw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtNzgwOCw3ICs4MzYwLDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC03ODI2LDYgKzgzNzcsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtNzg0NSwzMyArODM5NywzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTc4ODIsNyArODQzMyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtNzkxNiw3ICs4NDY3LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTc5MjcsMTEgKzg0NzcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC03OTQ0LDcgKzg1MDMsNyBAQAorIAorIGFjX2hlYWRlcl9jb21waWxlcj1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorIAorQEAgLTc5NTIsNyArODUxMSw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorIGVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtNzk3MCw2ICs4NTI4LDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTc5ODksMzMgKzg1NDgsMzIgQEAKKyBlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorIAorICMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2MgaW4KKy0gIHllczpubyApCisrY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorKyAgeWVzOm5vOiApCisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CistICAgICgKKy0gICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistX0FTQk9YCistICAgICkgfAorLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisrICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgICA7OworLSAgbm86eWVzICkKKysgIG5vOnllczoqICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKy0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKy1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKysgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKKyBlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICAoCisgICAgICAgY2F0IDw8XF9BU0JPWAorLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworLSMjIFJlcG9ydCB0aGlzIHRvIGJ1Zy1hdXRvY29uZkBnbnUub3JnLiAjIworLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgUmVwb3J0IHRoaXMgdG8gYnVnLXBhdGNoQGdudS5vcmcgIyMKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIF9BU0JPWAorICAgICApIHwKKyAgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKK0BAIC04MDI2LDcgKzg1ODQsNyBAQAorIGlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj0kYWNfaGVhZGVyX3ByZXByb2MiCisrICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorQEAgLTgwNTMsMjEgKzg2MTEsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODA5OCwxMSArODY2MywyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CistICAoZXZhbCAkYWNfbGluaykgMj4mNQorKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODExNSw3ICs4Njg5LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04MTM5LDIxICs4NzE0LDI4IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCisrCisgLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiAkYWNfZnVuYworKworIC8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIgorQEAgLTgxODQsMTEgKzg3NjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgyMDEsNyArODc5Miw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtODI0MSw3ICs4ODMzLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTgyNTksMTEgKzg4NTAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04Mjc2LDcgKzg4NzYsNyBAQAorIAorIGFjX2N2X3R5cGVfbWJzdGF0ZV90PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY2CitAQCAtODMwMCw3ICs4OTAwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTgzMTcsMTEgKzg5MTYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTgzMzQsNyArODk0Miw4IEBACisgCisgam1fY3ZfZnVuY19tYnJ0b3djPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkam1fY3ZfZnVuY19tYnJ0b3djIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kam1fY3ZfZnVuY19tYnJ0b3djIiA+JjYKK0BAIC04MzQ4LDY5ICs4OTU3LDQ2NSBAQAorIAorIAorIAorLQorLQorLQorLQorLWZvciBhY19mdW5jIGluIHBhdGhjb25mCistZG8KKy1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQorLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgorLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKysgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBmcmVlIGlzIGRlY2xhcmVkIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgZnJlZSBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X2hhdmVfZGVjbF9mcmVlK3NldH0iID0gc2V0OyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKyBjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgLyogZW5kIGNvbmZkZWZzLmguICAqLworLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKy0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCistICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKy0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKy0jaWZkZWYgX19TVERDX18KKy0jIGluY2x1ZGUgPGxpbWl0cy5oPgorLSNlbHNlCistIyBpbmNsdWRlIDxhc3NlcnQuaD4KKy0jZW5kaWYKKy0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLSNpZmRlZiBfX2NwbHVzcGx1cworLWV4dGVybiAiQyIKKy17CistI2VuZGlmCistLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCistY2hhciAkYWNfZnVuYyAoKTsKKy0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCistICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCistICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQorLWNob2tlIG1lCistI2Vsc2UKKy1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKKy0jZW5kaWYKKy0jaWZkZWYgX19jcGx1c3BsdXMKKy19CistI2VuZGlmCistCisrJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyBpbnQKKyBtYWluICgpCisgeworLXJldHVybiBmICE9ICRhY19mdW5jOworKyNpZm5kZWYgZnJlZQorKyAgY2hhciAqcCA9IChjaGFyICopIGZyZWU7CisrI2VuZGlmCisrCisgICA7CisgICByZXR1cm4gMDsKKyB9CisgX0FDRU9GCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKy1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1Cisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3ZfaGF2ZV9kZWNsX2ZyZWU9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mcmVlIiA+JjYKKytpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZnJlZSA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfREVDTF9GUkVFIDEKKytfQUNFT0YKKysKKysKKytlbHNlCisrICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisrI2RlZmluZSBIQVZFX0RFQ0xfRlJFRSAwCisrX0FDRU9GCisrCisrCisrZmkKKysKKysKKysKKysKKysKKysgIDoKKysKKysKKysKKysKKysKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5IiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGRib29sLmggdGhhdCBjb25mb3JtcyB0byBDOTkuLi4gJEVDSE9fQyIgPiY2CisraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYm9vbF9oK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKysJICAjaWZuZGVmIGJvb2wKKysJICAgImVycm9yOiBib29sIGlzIG5vdCBkZWZpbmVkIgorKwkgICNlbmRpZgorKwkgICNpZm5kZWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgZmFsc2UKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgMCIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIHRydWUKKysJICAgImVycm9yOiBmYWxzZSBpcyBub3QgZGVmaW5lZCIKKysJICAjZW5kaWYKKysJICAjaWYgdHJ1ZSAhPSAxCisrCSAgICJlcnJvcjogdHJ1ZSBpcyBub3QgMSIKKysJICAjZW5kaWYKKysJICAjaWZuZGVmIF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkCisrCSAgICJlcnJvcjogX19ib29sX3RydWVfZmFsc2VfYXJlX2RlZmluZWQgaXMgbm90IGRlZmluZWQiCisrCSAgI2VuZGlmCisrCisrCSAgc3RydWN0IHMgeyBfQm9vbCBzOiAxOyBfQm9vbCB0OyB9IHM7CisrCisrCSAgY2hhciBhW3RydWUgPT0gMSA/IDEgOiAtMV07CisrCSAgY2hhciBiW2ZhbHNlID09IDAgPyAxIDogLTFdOworKwkgIGNoYXIgY1tfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZCA9PSAxID8gMSA6IC0xXTsKKysJICBjaGFyIGRbKGJvb2wpIC0wLjUgPT0gdHJ1ZSA/IDEgOiAtMV07CisrCSAgYm9vbCBlID0gJnM7CisrCSAgY2hhciBmWyhfQm9vbCkgLTAuMCA9PSBmYWxzZSA/IDEgOiAtMV07CisrCSAgY2hhciBnW3RydWVdOworKwkgIGNoYXIgaFtzaXplb2YgKF9Cb29sKV07CisrCSAgY2hhciBpW3NpemVvZiBzLnRdOworKworK2ludAorK21haW4gKCkKKyt7CisrIHJldHVybiAhYSArICFiICsgIWMgKyAhZCArICFlICsgIWYgKyAhZyArICFoICsgIWk7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisrICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorKyAgYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaD15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCIgPiY1CisrZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRib29sX2giID4mNgorKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0Jvb2wiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9Cb29sLi4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9fQm9vbCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKyRhY19pbmNsdWRlc19kZWZhdWx0CisraW50CisrbWFpbiAoKQorK3sKKytpZiAoKF9Cb29sICopIDApCisrICByZXR1cm4gMDsKKytpZiAoc2l6ZW9mIChfQm9vbCkpCisrICByZXR1cm4gMDsKKysgIDsKKysgIHJldHVybiAwOworK30KKytfQUNFT0YKKytybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKysgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl90eXBlX19Cb29sPXllcworK2Vsc2UKKysgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Cisrc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorKworK2FjX2N2X3R5cGVfX0Jvb2w9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19Cb29sIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9fQm9vbCIgPiY2CisraWYgdGVzdCAkYWNfY3ZfdHlwZV9fQm9vbCA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKysjZGVmaW5lIEhBVkVfX0JPT0wgMQorK19BQ0VPRgorKworKworK2ZpCisrCisrICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGJvb2xfaCA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUREJPT0xfSCAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysgIDoKKysKKysKKysKKysKKysKKysKKysKKysKKysKKysKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdCIgPiY1CisrZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmFub3NlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0Li4uICRFQ0hPX0MiID4mNgorK2lmIHRlc3QgIiR7YWNfY3Zfc3RhdF9uc2VjK3NldH0iID0gc2V0OyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrCisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKytpbnQKKyttYWluICgpCisreworKyByZXR1cm4gc3Quc3RfYXRpbWVuc2VjICsgc3Quc3RfbXRpbWVuc2VjICsgc3Quc3RfY3RpbWVuc2VjOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisrICBhY19jdl9zdGF0X25zZWM9eWVzCisrZWxzZQorKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKKytzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisrCisrYWNfY3Zfc3RhdF9uc2VjPW5vCisrZmkKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisrCisrZmkKKytlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3RhdF9uc2VjIiA+JjUKKytlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3RhdF9uc2VjIiA+JjYKKysgICBpZiB0ZXN0ICRhY19jdl9zdGF0X25zZWMgPSB5ZXM7IHRoZW4KKysKKytjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorKyNkZWZpbmUgSEFWRV9TVEFUX05TRUMgMQorK19BQ0VPRgorKworKyAgIGZpCisrCisrICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBuYW5vc2Vjb25kIHRpbWVzdGFtcHMgaW4gc3RydWN0IHN0YXQiID4mNQorK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5hbm9zZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdC4uLiAkRUNIT19DIiA+JjYKKytpZiB0ZXN0ICIke2FjX2N2X3N0YXRfdGltZXZhbCtzZXR9IiA9IHNldDsgdGhlbgorKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKytlbHNlCisrICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBjb25mZGVmcy5oLiAgKi8KKytfQUNFT0YKKytjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKKytjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisrLyogZW5kIGNvbmZkZWZzLmguICAqLworKworKwkgICNpbmNsdWRlIDx0aW1lLmg+CisrCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKwkgICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKwkgICNpbmNsdWRlIDx1bmlzdGQuaD4KKysJICBzdHJ1Y3Qgc3RhdCBzdDsKKysKKytpbnQKKyttYWluICgpCisreworKyByZXR1cm4gc3Quc3RfYXRpbS50dl9uc2VjICsgc3Quc3RfbXRpbS50dl9uc2VjICsgc3Quc3RfY3RpbS50dl9uc2VjOworKyAgOworKyAgcmV0dXJuIDA7CisrfQorK19BQ0VPRgorK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKysgIGFjX2N2X3N0YXRfdGltZXZhbD15ZXMKKytlbHNlCisrICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKysKKythY19jdl9zdGF0X3RpbWV2YWw9bm8KKytmaQorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKysKKytmaQorK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdGF0X3RpbWV2YWwiID4mNQorK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zdGF0X3RpbWV2YWwiID4mNgorKyAgIGlmIHRlc3QgJGFjX2N2X3N0YXRfdGltZXZhbCA9IHllczsgdGhlbgorKworK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisrI2RlZmluZSBIQVZFX1NUQVRfVElNRVZBTCAxCisrX0FDRU9GCisrCisrICAgZmkKKysKKysKKysKKysKKysKKytmb3IgYWNfZnVuYyBpbiBwYXRoY29uZgorK2RvCisrYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKKytlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKKytlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKKytpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCisrICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorK2Vsc2UKKysgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorKy8qIGNvbmZkZWZzLmguICAqLworK19BQ0VPRgorK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKysvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKysvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisrICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisrICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisrI2lmZGVmIF9fU1REQ19fCisrIyBpbmNsdWRlIDxsaW1pdHMuaD4KKysjZWxzZQorKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisrLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKysjaWZkZWYgX19jcGx1c3BsdXMKKytleHRlcm4gIkMiCisreworKyNlbmRpZgorKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKysgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworK2NoYXIgJGFjX2Z1bmMgKCk7CisrLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKysjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKKytjaG9rZSBtZQorKyNlbHNlCisrY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7CisrI2VuZGlmCisrI2lmZGVmIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKworK2ludAorK21haW4gKCkKKyt7CisrcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisrICA7CisrICByZXR1cm4gMDsKKyt9CisrX0FDRU9GCisrcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKytpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorKyAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtODQyMyw3ICs5NDI4LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC04NDU0LDcgKzk0NjAsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKKyBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtODQ2NSwxMSArOTQ3MCwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg0ODIsNyArOTQ5Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtODQ5MCw3ICs5NTA0LDYgQEAKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CisgZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC04NTA4LDYgKzk1MjEsNyBAQAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGVsc2UKKyAgICAgYWNfY3BwX2Vycj0KKyAgIGZpCitAQCAtODUyNywzMyArOTU0MSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTg1NjQsNyArOTU3Nyw3IEBACisgaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCistICBldmFsICIkYXNfYWNfSGVhZGVyPSRhY19oZWFkZXJfcHJlcHJvYyIKKysgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitAQCAtODU4Nyw3ICs5NjAwLDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg2MDcsMTEgKzk2MTksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NjI0LDcgKzk2NDUsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9mcmVlPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZyZWUiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnJlZSIgPiY2CitAQCAtODY0OCw3ICs5NjY5LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg2NjgsMTEgKzk2ODgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04Njg1LDcgKzk3MTQsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9nZXRlbnY9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgPiY2CitAQCAtODcwOSw3ICs5NzM4LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg3MjksMTEgKzk3NTcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04NzQ2LDcgKzk3ODMsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9tYWxsb2M9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWFsbG9jIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21hbGxvYyIgPiY2CitAQCAtODc3MCw3ICs5ODA3LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTg3OTAsMTEgKzk4MjYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04ODA3LDcgKzk4NTIsNyBAQAorIAorIGFjX2N2X2hhdmVfZGVjbF9ta3RlbXA9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfbWt0ZW1wIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX21rdGVtcCIgPiY2CitAQCAtODg0OSwyMSArOTg5NCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC04ODk0LDExICs5OTQ2LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC04OTExLDcgKzk5NzIsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTg5MzQsMjEgKzk5OTYsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtODk3OSwxMSArMTAwNDgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTg5OTYsNyArMTAwNzQsOCBAQAorIAorIGV2YWwgIiRhc19hY192YXI9bm8iCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgorQEAgLTkwMDYsNyArMTAwODUsMTQgQEAKKyBfQUNFT0YKKyAKKyBlbHNlCistICBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IgorKyAgY2FzZSAkTElCT0JKUyBpbgorKyAgICAiJGFjX2Z1bmMuJGFjX29iamV4dCIgICB8IFwKKysgICoiICRhY19mdW5jLiRhY19vYmpleHQiICAgfCBcCisrICAgICIkYWNfZnVuYy4kYWNfb2JqZXh0ICIqIHwgXAorKyAgKiIgJGFjX2Z1bmMuJGFjX29iamV4dCAiKiApIDs7CisrICAqKSBMSUJPQkpTPSIkTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0IiA7OworK2VzYWMKKysKKyBmaQorIGRvbmUKKyAKK0BAIC05MDE5LDcgKzEwMTA1LDYgQEAKKyAgIHdoaWxlIDo7IGRvCisgICBhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZT1ubworICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkwMzYsMTEgKzEwMTIxLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTA1Miw5ICsxMDE0Niw4IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkwNzIsMTEgKzEwMTY1LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKysgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICAgYWNfc3RhdHVzPSQ/CitAQCAtOTA4OCw3ICsxMDE5MCw3IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYnJlYWsKKyBkb25lCisgZmkKK0BAIC05MTEyLDcgKzEwMjE0LDYgQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTkxMjksMTEgKzEwMjMwLDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MTQ2LDcgKzEwMjU2LDggQEAKKyAKKyBhY19jdl9mdW5jX2ZzZWVrbz1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZnNlZWtvIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19mc2Vla28iID4mNgorQEAgLTkxNjUsNyArMTAyNzYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTE4NSwxMSArMTAyOTUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MjAyLDcgKzEwMzIxLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfY2xlYXJlcnJfdW5sb2NrZWQiID4mNgorQEAgLTkyMzAsNyArMTAzNDksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTI1MCwxMSArMTAzNjgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MjY3LDcgKzEwMzk0LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9mZW9mX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2Zlb2ZfdW5sb2NrZWQiID4mNgorQEAgLTkyOTUsNyArMTA0MjIsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTMxNSwxMSArMTA0NDEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05MzMyLDcgKzEwNDY3LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmVycm9yX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQiID4mNgorQEAgLTkzNjAsNyArMTA0OTUsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTM4MCwxMSArMTA1MTQsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05Mzk3LDcgKzEwNTQwLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmZsdXNoX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2ZmbHVzaF91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2NrZWQiID4mNgorQEAgLTk0MjUsNyArMTA1NjgsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTQ0NSwxMSArMTA1ODcsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NDYyLDcgKzEwNjEzLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiID4mNgorQEAgLTk0OTAsNyArMTA2NDEsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTUxMCwxMSArMTA2NjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NTI3LDcgKzEwNjg2LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnB1dGNfdW5sb2NrZWQiID4mNgorQEAgLTk1NTUsNyArMTA3MTQsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTU3NSwxMSArMTA3MzMsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NTkyLDcgKzEwNzU5LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnB1dHNfdW5sb2NrZWQiID4mNgorQEAgLTk2MjAsNyArMTA3ODcsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTY0MCwxMSArMTA4MDYsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NjU3LDcgKzEwODMyLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQ9bm8KKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQiID4mNQorIGVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfZnJlYWRfdW5sb2NrZWQiID4mNgorQEAgLTk2ODUsNyArMTA4NjAsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTcwNSwxMSArMTA4NzksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05NzIyLDcgKzEwOTA1LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9md3JpdGVfdW5sb2NrZWQiID4mNgorQEAgLTk3NTAsNyArMTA5MzMsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTc3MCwxMSArMTA5NTIsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05Nzg3LDcgKzEwOTc4LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRjX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID4mNgorQEAgLTk4MTUsNyArMTEwMDYsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTgzNSwxMSArMTEwMjUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05ODUyLDcgKzExMDUxLDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfZ2V0Y2hhcl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9nZXRjaGFyX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID4mNgorQEAgLTk4ODAsNyArMTEwNzksNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTkwMCwxMSArMTEwOTgsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05OTE3LDcgKzExMTI0LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfcHV0Y191bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9wdXRjX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3B1dGNfdW5sb2NrZWQiID4mNgorQEAgLTk5NDUsNyArMTExNTIsNiBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtOTk2NSwxMSArMTExNzEsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC05OTgyLDcgKzExMTk3LDcgQEAKKyAKKyBhY19jdl9oYXZlX2RlY2xfcHV0Y2hhcl91bmxvY2tlZD1ubworIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfZGVjbF9wdXRjaGFyX3VubG9ja2VkIiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQiID4mNgorQEAgLTEwMDc1LDcgKzExMjkwLDYgQEAKKyAgIGFjX2N2X2Z1bmNfY2xvc2VkaXJfdm9pZD15ZXMKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitAQCAtMTAxMTUsNyArMTEzMjksNyBAQAorICggZXhpdCAkYWNfc3RhdHVzICkKKyBhY19jdl9mdW5jX2Nsb3NlZGlyX3ZvaWQ9eWVzCisgZmkKKy1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19jbG9zZWRpcl92b2lkIiA+JjUKK0BAIC0xMDE0Niw3ICsxMTM2MCw2IEBACisgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDE1NywxMSArMTEzNzAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDE3NCw3ICsxMTM5Niw3IEBACisgCisgYWNfaGVhZGVyX2NvbXBpbGVyPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisgCitAQCAtMTAxODIsNyArMTE0MDQsNiBAQAorIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKKyBlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CisgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwMjAwLDYgKzExNDIxLDcgQEAKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKysgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgICBlbHNlCisgICAgIGFjX2NwcF9lcnI9CisgICBmaQorQEAgLTEwMjE5LDMzICsxMTQ0MSwzMiBAQAorIGVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisgCisgIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CistY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYyBpbgorLSAgeWVzOm5vICkKKytjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisrICB5ZXM6bm86ICkKKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CisgZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CistZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKy0gICAgKAorLSAgICAgIGNhdCA8PFxfQVNCT1gKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy0jIyBSZXBvcnQgdGhpcyB0byBidWctYXV0b2NvbmZAZ251Lm9yZy4gIyMKKy0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKy1fQVNCT1gKKy0gICAgKSB8CistICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKysgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgIDs7CistICBubzp5ZXMgKQorKyAgbm86eWVzOiogKQorICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKytlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorIGVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisrICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CisrZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgICgKKyAgICAgICBjYXQgPDxcX0FTQk9YCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCistIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWF1dG9jb25mQGdudS5vcmcuICMjCistIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisrIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKysjIyBSZXBvcnQgdGhpcyB0byBidWctcGF0Y2hAZ251Lm9yZyAjIworKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisgX0FTQk9YCisgICAgICkgfAorICAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorQEAgLTEwMjU2LDcgKzExNDc3LDcgQEAKKyBpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKy0gIGV2YWwgIiRhc19hY19IZWFkZXI9JGFjX2hlYWRlcl9wcmVwcm9jIgorKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK0BAIC0xMDI3Nyw3ICsxMTQ5OCw2IEBACisgICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIGVsc2UKKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDMwMCwxMSArMTE1MjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwMzE3LDcgKzExNTQ2LDggQEAKKyAKKyBhY19jdl9mdW5jX3NldG1vZGVfZG9zPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zZXRtb2RlX2RvcyIgPiY1CisgZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2V0bW9kZV9kb3MiID4mNgorQEAgLTEwMzM4LDIxICsxMTU2OCwyOCBAQAorICAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyBlbHNlCisgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy0jbGluZSAkTElORU5PICJjb25maWd1cmUiCisgLyogY29uZmRlZnMuaC4gICovCisgX0FDRU9GCisgY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CisgY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKysvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKysgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKysjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKysKKyAjaWZkZWYgX19TVERDX18KKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorICNlbHNlCisgIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyAjZW5kaWYKKysKKysjdW5kZWYgJGFjX2Z1bmMKKysKKyAvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworICNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIKK0BAIC0xMDM4MywxMSArMTE2MjAsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKysgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICAgYWNfc3RhdHVzPSQ/CisrICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorKyAgcm0gLWYgY29uZnRlc3QuZXIxCisrICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKy0gICAgICAgICB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNDAwLDcgKzExNjQ2LDggQEAKKyAKKyBldmFsICIkYXNfYWNfdmFyPW5vIgorIGZpCistcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKysgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorIGZpCisgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorIGVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK0BAIC0xMDQxNSwyMSArMTE2NjIsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lIF9kb3BybnQgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBfZG9wcm50LgorKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworKyNkZWZpbmUgX2RvcHJudCBpbm5vY3VvdXNfX2RvcHJudAorKworIC8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBfZG9wcm50ICgpOyBiZWxvdy4KKyAgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworKworICNpZmRlZiBfX1NURENfXworICMgaW5jbHVkZSA8bGltaXRzLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgPGFzc2VydC5oPgorICNlbmRpZgorKworKyN1bmRlZiBfZG9wcm50CisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtMTA0NjAsMTEgKzExNzE0LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDQ3Nyw3ICsxMTc0MCw4IEBACisgCisgYWNfY3ZfZnVuY19fZG9wcm50PW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cisrcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19fZG9wcm50IiA+JjUKKyBlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19fZG9wcm50IiA+JjYKK0BAIC0xMDUwMywyMSArMTE3NjcsMjggQEAKKyAgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgZWxzZQorICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorIGNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAvKiBlbmQgY29uZmRlZnMuaC4gICovCisrLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCisrICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisrI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKysKKyAvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisrCisgI2lmZGVmIF9fU1REQ19fCisgIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyAjZWxzZQorICMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisgI2VuZGlmCisrCisrI3VuZGVmICRhY19mdW5jCisrCisgLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAjaWZkZWYgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiCitAQCAtMTA1NDgsMTEgKzExODE5LDIwIEBACisgX0FDRU9GCisgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKy0gIChldmFsICRhY19saW5rKSAyPiY1CisrICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKysgIChldmFsICRhY190cnkpIDI+JjUKKysgIGFjX3N0YXR1cz0kPworKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKysJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDU2NSw3ICsxMTg0NSw4IEBACisgCisgZXZhbCAiJGFzX2FjX3Zhcj1ubyIKKyBmaQorLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisrICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyBmaQorIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKKyBlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitAQCAtMTA1ODUsNyArMTE4NjYsNiBAQAorICAgcGF0Y2hfY3ZfbWtkaXJfdGFrZXNfb25lX2FyZz1ubworICAgICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDYwNSwxMSArMTE4ODUsMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDYyMSw3ICsxMTkxMCw2IEBACisgc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorIAorIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyAvKiBjb25mZGVmcy5oLiAgKi8KKyBfQUNFT0YKKyBjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK0BAIC0xMDY0MSwxMSArMTE5MjksMjAgQEAKKyBfQUNFT0YKKyBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CistICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgICBhY19zdGF0dXM9JD8KKysgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisrICBybSAtZiBjb25mdGVzdC5lcjEKKysgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorLSAgICAgICAgIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisrCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisrICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorKyAgYWNfc3RhdHVzPSQ/CisrICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisrICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgICBhY19zdGF0dXM9JD8KK0BAIC0xMDY1OCwxMCArMTE5NTUsMTAgQEAKKyBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgZmkKKyAKKyAKK0BAIC0xMDY4Niw3ICsxMTk4Myw2IEBACisgZWxzZQorIAorICAgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCistI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorIC8qIGNvbmZkZWZzLmguICAqLworIF9BQ0VPRgorIGNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorQEAgLTEwNzA1LDExICsxMjAwMSwyMCBAQAorIF9BQ0VPRgorIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKy0gIChldmFsICRhY19jb21waWxlKSAyPiY1CisrICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgIGFjX3N0YXR1cz0kPworKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKysgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCistICAgICAgICAgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKysJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKysgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisrICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisrICBhY19zdGF0dXM9JD8KKysgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKysgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisrCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgIChldmFsICRhY190cnkpIDI+JjUKKyAgIGFjX3N0YXR1cz0kPworQEAgLTEwNzIyLDcgKzEyMDI3LDcgQEAKKyAKKyBhY19jdl93aW5fb3JfZG9zPW5vCisgZmkKKy1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKytybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgCisgZmkKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfd2luX29yX2RvcyIgPiY1CitAQCAtMTA4MzQsMTMgKzEyMTM5LDEzIEBACisgICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy8nLydcXFxcJycvZzsKKy0gICAgCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorKwkicy8nLydcXFxcJycvZzsKKysJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICAgOzsKKyAgICAgKikKKyAgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgIHNlZCAtbiBcCistICAgICAgICAicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKysJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICAgOzsKKyAgICAgZXNhYzsKKyB9IHwKK0BAIC0xMDg3MCwxMyArMTIxNzUsMTMgQEAKKyAjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorICMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KKyBpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorLSAgYWNfdnBzdWI9Jy9eWyAJXSpWUEFUSFsgCV0qPS97CisrICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKKyBzLzoqXCQoc3JjZGlyKToqLzovOworIHMvOipcJHtzcmNkaXJ9OiovOi87Cisgcy86KkBzcmNkaXJAOiovOi87Cistcy9eXChbXj1dKj1bIAldKlwpOiovXDEvOworK3MvXlwoW149XSo9WwkgXSpcKToqL1wxLzsKKyBzLzoqJC8vOworLXMvXltePV0qPVsgCV0qJC8vOworK3MvXltePV0qPVsJIF0qJC8vOworIH0nCisgZmkKKyAKK0BAIC0xMDg4Nyw3ICsxMjE5Miw3IEBACisgZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgICBhY19pPWBlY2hvICIkYWNfaSIgfAorLSAgICAgICAgIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKKysJIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKKyAgICMgMi4gQWRkIHRoZW0uCisgICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyAkYWNfaVwkVS4kYWNfb2JqZXh0IgorICAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzICRhY19pIickVS5sbycKK0BAIC0xMDkzMSw5ICsxMjIzNiwxMCBAQAorIGVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICBzZXQgLW8gcG9zaXgKKyBmaQorK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKyAKKyAjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KKy1pZiAoRk9PPUZPTzsgdW5zZXQgRk9PKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKytpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgIGFzX3Vuc2V0PXVuc2V0CisgZWxzZQorICAgYXNfdW5zZXQ9ZmFsc2UKK0BAIC0xMDk1Miw3ICsxMjI1OCw3IEBACisgICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICAgTENfVEVMRVBIT05FIExDX1RJTUUKKyBkbworLSAgaWYgKHNldCAreDsgdGVzdCAtbiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKysgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICAgZWxzZQorICAgICAkYXNfdW5zZXQgJGFzX3ZhcgorQEAgLTExMTMxLDE2ICsxMjQzNywxNyBAQAorIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgIGFzX21rZGlyX3A9OgorIGVsc2UKKysgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICBhc19ta2Rpcl9wPWZhbHNlCisgZmkKKyAKKyBhc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisgCisgIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorLWFzX3RyX2NwcD0ic2VkIHklKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKythc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorLWFzX3RyX3NoPSJzZWQgeSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyIKKythc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorIAorIAorICMgSUZTCitAQCAtMTExNjcsNyArMTI0NzQsNyBAQAorIGNhdCA+JjUgPDxfQ1NFT0YKKyAKKyBUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHBhdGNoICRhc19tZSAyLjUuOSwgd2hpY2ggd2FzCistZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU3LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisrZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisgCisgICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKK0BAIC0xMTIxMSw5ICsxMjUxOCw5IEBACisgICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKy0gICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisrCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorLSAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKyAKKyBDb25maWd1cmF0aW9uIGZpbGVzOgorICRjb25maWdfZmlsZXMKK0BAIC0xMTIyNywxMSArMTI1MzQsMTAgQEAKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorIGFjX2NzX3ZlcnNpb249IlxcCisgcGF0Y2ggY29uZmlnLnN0YXR1cyAyLjUuOQorLWNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41NywKKytjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCisgICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKyAKKy1Db3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorLUZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorK0NvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorIHNyY2Rpcj0kc3JjZGlyCitAQCAtMTE0NjMsOSArMTI3NjksOSBAQAorICAgICAgIChlY2hvICc6dAorICAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKKyAgICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCistICAJYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKysJYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgICBlbHNlCistICAJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKysJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgICBmaQorICAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCisgICAgICAgYWNfYmVnPSRhY19lbmQKK0BAIC0xMTQ4MywyMSArMTI3ODksMjEgQEAKKyAgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorLSAgICAgICAgY2F0ID4kdG1wL3N0ZGluCistICAgICAgICBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKysJY2F0ID4kdG1wL3N0ZGluCisrCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisrCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorLSAgICAgICAgYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgIGVzYWMKKyAKKyAgICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KKyAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorQEAgLTExNTEzLDEwICsxMjgxOSwxMCBAQAorICAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFzX2RpciIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CitAQCAtMTE1NTQsMTIgKzEyODYwLDQ1IEBACisgICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKKyBlc2FjCistIyBEb24ndCBibGluZGx5IHBlcmZvcm0gYSBgY2QgIiRhY19kaXIiLyRhY19mb28gJiYgcHdkYCBzaW5jZSAkYWNfZm9vIGNhbiBiZQorLSMgYWJzb2x1dGUuCistYWNfYWJzX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX2J1aWxkZGlyICYmIHB3ZGAKKy1hY19hYnNfdG9wX2J1aWxkZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJHthY190b3BfYnVpbGRkaXJ9LiAmJiBwd2RgCistYWNfYWJzX3NyY2Rpcj1gY2QgIiRhY19kaXIiICYmIGNkICRhY19zcmNkaXIgJiYgcHdkYAorLWFjX2Fic190b3Bfc3JjZGlyPWBjZCAiJGFjX2RpciIgJiYgY2QgJGFjX3RvcF9zcmNkaXIgJiYgcHdkYAorKworKyMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCisrY2FzZSBgcHdkYCBpbgorKy4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKyopCisrICBjYXNlICIkYWNfZGlyIiBpbgorKyAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKysgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisrICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKysgIGVzYWM7OworK2VzYWMKKytjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKysuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKyopCisrICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKysgIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisrICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CisrICBlc2FjOzsKKytlc2FjCisrY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisrLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKysqKQorKyAgY2FzZSAkYWNfc3JjZGlyIGluCisrICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKyAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworKyAgZXNhYzs7CisrZXNhYworK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorKy4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKysqKQorKyAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorKyAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisrICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKysgICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworKyAgZXNhYzs7CisrZXNhYworIAorIAorICAgY2FzZSAkSU5TVEFMTCBpbgorQEAgLTExNTY3LDExICsxMjkwNiw2IEBACisgICAqKSBhY19JTlNUQUxMPSRhY190b3BfYnVpbGRkaXIkSU5TVEFMTCA7OworICAgZXNhYworIAorLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CistZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKy0gICAgcm0gLWYgIiRhY19maWxlIgorLSAgZmkKKyAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworQEAgLTExNTgxLDcgKzEyOTE1LDcgQEAKKyAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICIKKyAgIGZpCisgICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCisrCQkJCSAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKyAKKyAgICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCisgICAjIHNyYyB0cmVlLgorQEAgLTExNTkwLDI2ICsxMjkyNCwzMiBAQAorICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgICBbXFwvJF0qKQorLSAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCistICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisrCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGVjaG8gJGY7OworKwkgZWNobyAiJGYiOzsKKyAgICAgICAqKSAjIFJlbGF0aXZlCistICAgICAgICAgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCistICAgICAgICAgICAjIEJ1aWxkIHRyZWUKKy0gICAgICAgICAgIGVjaG8gJGYKKy0gICAgICAgICBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCistICAgICAgICAgICAjIFNvdXJjZSB0cmVlCistICAgICAgICAgICBlY2hvICRzcmNkaXIvJGYKKy0gICAgICAgICBlbHNlCistICAgICAgICAgICAjIC9kZXYvbnVsbCB0cmVlCistICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CisrCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKysJICAgIyBCdWlsZCB0cmVlCisrCSAgIGVjaG8gIiRmIgorKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorKwkgICAjIFNvdXJjZSB0cmVlCisrCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisrCSBlbHNlCisrCSAgICMgL2Rldi9udWxsIHRyZWUKKysJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGZpOzsKKysJIGZpOzsKKyAgICAgICBlc2FjCisgICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorKworKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CisrZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKysgICAgcm0gLWYgIiRhY19maWxlIgorKyAgZmkKKyBfQUNFT0YKKyBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICAgc2VkICIkYWNfdnBzdWIKK0BAIC0xMTY0OSwxMiArMTI5ODksMTIgQEAKKyAjIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCisgIworICMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KKy1hY19kQT0ncyxeXChbIAldKlwpI1woWyAJXSpkZWZpbmVbIAldWyAJXSpcKScKKy1hY19kQj0nWyAJXS4qJCxcMSNcMicKKythY19kQT0ncyxeXChbCSBdKlwpI1woWwkgXSpkZWZpbmVbCSBdWwkgXSpcKScKKythY19kQj0nWwkgXS4qJCxcMSNcMicKKyBhY19kQz0nICcKKyBhY19kRD0nLDt0JworICMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCistYWNfdUE9J3MsXlwoWyAJXSpcKSNcKFsgCV0qXCl1bmRlZlwoWyAJXVsgCV0qXCknCisrYWNfdUE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qXCl1bmRlZlwoWwkgXVsJIF0qXCknCisgYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKKyBhY191Qz0nICcKKyBhY191RD0nLDt0JworQEAgLTExNjYzLDExICsxMzAwMywxMSBAQAorICAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICAgY2FzZSAkYWNfZmlsZSBpbgorICAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCistICAgICAgICBjYXQgPiR0bXAvc3RkaW4KKy0gICAgICAgIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwljYXQgPiR0bXAvc3RkaW4KKysJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKysJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCistICAgICAgICBhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICAgZXNhYworIAorQEAgLTExNjgxLDI4ICsxMzAyMSwyOSBAQAorICAgICAgIGNhc2UgJGYgaW4KKyAgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgICBbXFwvJF0qKQorLSAgICAgICAgICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCistICAgICAgICAgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKysJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisrCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorIGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorLSAgICAgICAgIGVjaG8gJGY7OworKwkgIyBEbyBxdW90ZSAkZiwgdG8gcHJldmVudCBET1MgcGF0aHMgZnJvbSBiZWluZyBJRlMnZC4KKysJIGVjaG8gIiRmIjs7CisgICAgICAgKikgIyBSZWxhdGl2ZQorLSAgICAgICAgIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorLSAgICAgICAgICAgIyBCdWlsZCB0cmVlCistICAgICAgICAgICBlY2hvICRmCistICAgICAgICAgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorLSAgICAgICAgICAgIyBTb3VyY2UgdHJlZQorLSAgICAgICAgICAgZWNobyAkc3JjZGlyLyRmCistICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIyAvZGV2L251bGwgdHJlZQorLSAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorKwkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisrCSAgICMgQnVpbGQgdHJlZQorKwkgICBlY2hvICIkZiIKKysJIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKysJICAgIyBTb3VyY2UgdHJlZQorKwkgICBlY2hvICIkc3JjZGlyLyRmIgorKwkgZWxzZQorKwkgICAjIC9kZXYvbnVsbCB0cmVlCisrCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKKyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKy0gICAgICAgICBmaTs7CisrCSBmaTs7CisgICAgICAgZXNhYworICAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCistICBzZWQgJ3MvWyAJXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorKyAgc2VkICdzL1sJIF0qJC8vJyAkYWNfZmlsZV9pbnB1dHMgPiR0bXAvaW4KKyAKKyBfQUNFT0YKKyAKK0BAIC0xMTcyNSw5ICsxMzA2Niw5IEBACisgcyxbXFwkYF0sXFwmLGcKKyB0IGNsZWFyCisgOiBjbGVhcgorLXMsXlsgCV0qI1sgCV0qZGVmaW5lWyAJXVsgCV0qXChbXiAJKF1bXiAJKF0qXClcKChbXildKilcKVsgCV0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCisrcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSpcKVwoKFteKV0qKVwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKKyB0IGVuZAorLXMsXlsgCV0qI1sgCV0qZGVmaW5lWyAJXVsgCV0qXChbXiAJXVteIAldKlwpWyAJXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxJHthY19kQ31cMiR7YWNfZER9LGdwCisrcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKKyA6IGVuZAorIF9BQ0VPRgorICMgSWYgc29tZSBtYWNyb3Mgd2VyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsIHRpbWVzCitAQCAtMTE3NDEsMTMgKzEzMDgyLDEzIEBACisgIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorIGNhdCA+PmNvbmZ0ZXN0LnVuZGVmcyA8PFxfQUNFT0YKKy1zLF5bIAldKiNbIAldKnVuZGVmWyAJXVsgCV0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAorK3MsXlsJIF0qI1sJIF0qdW5kZWZbCSBdWwkgXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCisgX0FDRU9GCisgCisgIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCisgIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgorIGVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4nID4+JENPTkZJR19TVEFUVVMKKy1lY2hvICcgIGlmIGdyZXAgIl5bIAldKiNbIAldKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCisrZWNobyAnICBpZiBncmVwICJeWwkgXSojWwkgXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUworIGVjaG8gJyAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmknID4+JENPTkZJR19TVEFUVVMKKyBlY2hvICcgIDonID4+JENPTkZJR19TVEFUVVMKKyBybSAtZiBjb25mdGVzdC50YWlsCitAQCAtMTE3NTYsNyArMTMwOTcsNyBAQAorICAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvZGVmaW5lcy5zZWQuCisgICBlY2hvICcgIGNhdCA+JHRtcC9kZWZpbmVzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCNkZWZpbmUnIGxpbmVzLgorLSAgZWNobyAnL15bIAldKiNbIAldKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUworKyAgZWNobyAnL15bCSBdKiNbCSBdKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUworICAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworQEAgLTExNzgzLDcgKzEzMTI0LDcgQEAKKyAgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL3VuZGVmcy5zZWQuCisgICBlY2hvICcgIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI3VuZGVmJworLSAgZWNobyAnL15bIAldKiNbIAldKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCisrICBlY2hvICcvXlsJIF0qI1sJIF0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKyAgICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCisgICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUworICAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKK0BAIC0xMTgxNywxMCArMTMxNTgsMTAgQEAKKyAgICAgZWxzZQorICAgICAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKKyAkYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCistICAgICAgICAgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKy0gICAgICAgICBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisrCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorQEAgLTExODM2LDEwICsxMzE3NywxMCBAQAorICAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CisgJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorLSAgICAgICAgIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKy0gICAgICAgICBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCistICAgICAgICAgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKy0gICAgICAgICAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKysJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisrCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKKyBlY2hvIFgiJGFzX2RpciIgfAorICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CistLS0gcGF0Y2gtMi41Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBwYXRjaC0yLjUuOS9jb25maWd1cmUuYWMKK0BAIC02NCw2ICs2NCw5IEBACisgZ2xfUFJFUkVRX1hNQUxMT0MKKyBnbF9RVU9URQorIGdsX1FVT1RFQVJHCisrZ2xfSEFTSAorKworK2FnX0NIRUNLX05BTk9TRUNPTkRfU1RBVAorIAorIGRubCBUaGlzIHNob3VsZCBiZSBpbiBnbnVsaWIsIGJ1dCBpc24ndCBmb3Igc29tZSByZWFzb24uCisgQUNfREVGVU4oW2ptX1BSRVJFUV9BRERFWFRdLAorLS0tIHBhdGNoLTIuNS45Lm9yaWcvcGNoLmMKKysrKyBwYXRjaC0yLjUuOS9wY2guYworQEAgLTEsNiArMSw2IEBACisgLyogcmVhZGluZyBwYXRjaGVzICovCisgCistLyogJElkOiBwY2guYyx2IDEuNDQgMjAwMy8wNS8yMCAxNDowMzoxNyBlZ2dlcnQgRXhwICQgKi8KKysvKiAkSWQ6IHBjaC5jLHYgMS40NSAyMDAzLzA3LzAyIDIyOjE5OjIxIGVnZ2VydCBFeHAgJCAqLworIAorIC8qIENvcHlyaWdodCAoQykgMTk4NiwgMTk4NywgMTk4OCBMYXJyeSBXYWxsCisgCitAQCAtMzY2LDEwICszNjYsMTYgQEAKKyAJaWYgKCFzdGFyc19sYXN0X2xpbmUgJiYgc3RybkVRKHMsICIqKiogIiwgNCkpCisgCSAgICBuYW1lW09MRF0gPSBmZXRjaG5hbWUgKHMrNCwgc3RyaXBwYXRoLCAmcF90aW1lc3RhbXBbT0xEXSk7CisgCWVsc2UgaWYgKHN0cm5FUShzLCAiKysrICIsIDQpKQorKwkgIHsKKyAJICAgIC8qIFN3YXAgd2l0aCBORVcgYmVsb3cuICAqLworIAkgICAgbmFtZVtPTERdID0gZmV0Y2huYW1lIChzKzQsIHN0cmlwcGF0aCwgJnBfdGltZXN0YW1wW09MRF0pOworKwkgICAgcF9zdHJpcF90cmFpbGluZ19jciA9IHN0cmlwX3RyYWlsaW5nX2NyOworKwkgIH0KKyAJZWxzZSBpZiAoc3RybkVRKHMsICJJbmRleDoiLCA2KSkKKysJICB7CisgCSAgICBuYW1lW0lOREVYXSA9IGZldGNobmFtZSAocys2LCBzdHJpcHBhdGgsICh0aW1lX3QgKikgMCk7CisrCSAgICBwX3N0cmlwX3RyYWlsaW5nX2NyID0gc3RyaXBfdHJhaWxpbmdfY3I7CisrCSAgfQorIAllbHNlIGlmIChzdHJuRVEocywgIlByZXJlcToiLCA3KSkgeworIAkgICAgZm9yICh0ID0gcyArIDc7ICBJU1NQQUNFICgodW5zaWduZWQgY2hhcikgKnQpOyAgdCsrKQorIAkgICAgICBjb250aW51ZTsKK0BAIC00MDksNiArNDE1LDcgQEAKKyAJCSAgICBwX3RpbWVzdGFtcFtORVddID0gdGltZXN0YW1wOworIAkJICAgIHBfcmZjOTM0X25lc3RpbmcgPSAodCAtIHMpID4+IDE7CisgCQkgIH0KKysJCXBfc3RyaXBfdHJhaWxpbmdfY3IgPSBzdHJpcF90cmFpbGluZ19jcjsKKyAJICAgICAgfQorIAkgIH0KKyAJaWYgKChkaWZmX3R5cGUgPT0gTk9fRElGRiB8fCBkaWZmX3R5cGUgPT0gRURfRElGRikgJiYKKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3V0aWwuYworKysrIHBhdGNoLTIuNS45L3V0aWwuYworQEAgLTQ1LDkgKzQ1LDE3IEBACisgIyBkZWZpbmUgcmFpc2Uoc2lnKSBraWxsIChnZXRwaWQgKCksIHNpZykKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfVElNRVZBTCkKKysjaW5jbHVkZSA8dGltZS5oPgorKyNlbmRpZgorKworICNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8aGFzaC5oPgorIAorIHN0YXRpYyB2b2lkIG1ha2VkaXJzIChjaGFyICopOworK3N0YXRpYyBib29sIGZpZF9zZWFyY2ggKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHN0YXQgKiwgYm9vbCk7CisrIyBkZWZpbmUgZmlkX2V4aXN0cyhuYW1lLCBwc3QpIGZpZF9zZWFyY2ggKG5hbWUsIHBzdCwgZmFsc2UpCisrIyBkZWZpbmUgaW5zZXJ0X2ZpZChuYW1lKSBmaWRfc2VhcmNoIChuYW1lLCBOVUxMLCB0cnVlKQorIAorIC8qIE1vdmUgYSBmaWxlIEZST00gKHdoZXJlICpGUk9NX05FRURTX1JFTU9WQUwgaXMgbm9uemVybyBpZiBGUk9NCisgICAgbmVlZHMgcmVtb3ZhbCB3aGVuIGNsZWFuaW5nIHVwIGF0IHRoZSBlbmQgb2YgZXhlY3V0aW9uKQorQEAgLTY0LDcgKzcyLDcgQEAKKyAgIHN0cnVjdCBzdGF0IHRvX3N0OworICAgaW50IHRvX2Vycm5vID0gISBiYWNrdXAgPyAtMSA6IHN0YXQgKHRvLCAmdG9fc3QpID09IDAgPyAwIDogZXJybm87CisgCistICBpZiAoYmFja3VwKQorKyAgaWYgKGJhY2t1cCAmJiAodG9fZXJybm8gfHwgISBmaWRfZXhpc3RzICh0bywgJnRvX3N0KSkpCisgICAgIHsKKyAgICAgICBpbnQgdHJ5X21ha2VkaXJzX2Vycm5vID0gMDsKKyAgICAgICBjaGFyICpiYWtuYW1lOworQEAgLTE2NSw2ICsxNzMsNyBAQAorIAkgICAgICBpZiAoISB0b19kaXJfa25vd25fdG9fZXhpc3QpCisgCQltYWtlZGlycyAodG8pOworIAkgICAgICBjb3B5X2ZpbGUgKGZyb20sIHRvLCAwLCBtb2RlKTsKKysJICAgICAgaW5zZXJ0X2ZpZCAodG8pOworIAkgICAgICByZXR1cm47CisgCSAgICB9CisgCitAQCAtMTczLDYgKzE4Miw3IEBACisgCX0KKyAKKyAgICAgcmVuYW1lX3N1Y2NlZWRlZDoKKysgICAgICBpbnNlcnRfZmlkICh0byk7CisgICAgICAgLyogRG8gbm90IGNsZWFyICpGUk9NX05FRURTX1JFTU9WQUwgaWYgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQorIAkgcmVuYW1lIHJldHVybmVkIHplcm8gYmVjYXVzZSBGUk9NIGFuZCBUTyBhcmUgaGFyZCBsaW5rcyB0bworIAkgdGhlIHNhbWUgZmlsZS4gICovCitAQCAtMTAxMSwzICsxMDIxLDEwNSBAQAorICAgaWYgKGZpbGVfc2VlayAoc3RyZWFtLCBvZmZzZXQsIHB0cm5hbWUpICE9IDApCisgICAgIHBmYXRhbCAoImZzZWVrIik7CisgfQorKworK3R5cGVkZWYgc3RydWN0CisreworKyAgZGV2X3QJCWZpZF9kZXY7CisrICBpbm9fdAkJZmlkX2lubzsKKysgIHRpbWVfdAlmaWRfbXRpbWU7CisrICB1bnNpZ25lZCBsb25nCWZpZF9tdGltZW5zZWM7CisrfSBmaWxlX2lkOworKworK3Vuc2lnbmVkCisrZmlsZV9pZF9oYXNoZXIgKGZpbGVfaWQgKmVudHJ5LCB1bnNpZ25lZCB0YWJsZV9zaXplKQorK3sKKysgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfaW5vICsKKysgIAkgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+ZmlkX2RldiArCisrICAJICAodW5zaWduZWQgbG9uZykgZW50cnktPmZpZF9tdGltZSArCisrCSAgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5maWRfbXRpbWVuc2VjKSAlIHRhYmxlX3NpemU7CisrfQorKworK2Jvb2wKKytmaWxlX2lkX2NvbXBhcmF0b3IgKGZpbGVfaWQgKmVudHJ5MSwgZmlsZV9pZCAqZW50cnkyKQorK3sKKysgIHJldHVybiAoZW50cnkxLT5maWRfZGV2CT09IGVudHJ5Mi0+ZmlkX2RldiAmJgorKwkgIGVudHJ5MS0+ZmlkX2lubwk9PSBlbnRyeTItPmZpZF9pbm8gJiYKKysJICBlbnRyeTEtPmZpZF9tdGltZQk9PSBlbnRyeTItPmZpZF9tdGltZSAmJgorKwkgIGVudHJ5MS0+ZmlkX210aW1lbnNlYyA9PSBlbnRyeTItPmZpZF9tdGltZW5zZWMpOworK30KKysKKyt2b2lkCisrZmlsZV9pZF9mcmVlciAoZmlsZV9pZCAqZW50cnkpCisreworKyAgZnJlZSAoZW50cnkpOworK30KKysKKytIYXNoX3RhYmxlICpmaWxlX2lkX2hhc2g7CisrCisrLyogQ2hlY2sgaWYgdGhlIGZpbGUgaWRlbnRpZmllZCBieSBGSUxFTkFNRSBhbmQgUFNUIHdhcyBhbHJlYWR5IHNlZW4uIElmIHRoZQorKyAgIGZpbGUgd2FzIGFscmVhZHkgc2VlbiwgcmV0dXJucyBUUlVFLiAgSWYgdGhlIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBzZWVuCisrICAgYW5kIElOU0VSVCBpcyBUUlVFLCBpdCBpcyBpbnNlcnRlZC4gIFBTVCBvciBGSUxFTkFNRSBtYXkgYmUgTlVMTCAoYnV0IG5vdAorKyAgIGJvdGggb2YgdGhlbSkuICAqLworKworK3N0YXRpYyBib29sCisrZmlkX3NlYXJjaCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHN0cnVjdCBzdGF0ICpwc3QsIGJvb2wgaW5zZXJ0KQorK3sKKysgIHN0cnVjdCBzdGF0IHN0OworKworKyAgaWYgKCFmaWxlX2lkX2hhc2gpCisrICAgIHsKKysgICAgICBmaWxlX2lkX2hhc2ggPSBoYXNoX2luaXRpYWxpemUgKDAsIE5VTEwsIChIYXNoX2hhc2hlcikgZmlsZV9pZF9oYXNoZXIsCisrCQkJCSAgICAgIChIYXNoX2NvbXBhcmF0b3IpIGZpbGVfaWRfY29tcGFyYXRvciwKKysJCQkJICAgICAgKEhhc2hfZGF0YV9mcmVlcikgZmlsZV9pZF9mcmVlcik7CisrICAgICAgaWYgKCFmaWxlX2lkX2hhc2gpCisrCXBmYXRhbCAoImhhc2hfaW5pdGlhbGl6ZSIpOworKyAgICB9CisrCisrICBpZiAoIXBzdCkKKysgICAgeworKyAgICAgIGlmIChzdGF0IChmaWxlbmFtZSwgJnN0KSAhPSAwKQorKwlwZmF0YWwgKCIlcyIsIHF1b3RlYXJnIChmaWxlbmFtZSkpOworKyAgICAgIHBzdCA9ICZzdDsKKysgICAgfQorKworKyAgaWYgKGluc2VydCkKKysgICAgeworKyAgICAgIGZpbGVfaWQgKnBmaWQgPSB4bWFsbG9jIChzaXplb2YgKGZpbGVfaWQpKSwgKm9sZF9wZmlkOworKyAgICAgIHBmaWQtPmZpZF9kZXYJICA9IHBzdC0+c3RfZGV2OworKyAgICAgIHBmaWQtPmZpZF9pbm8JICA9IHBzdC0+c3RfaW5vOworKyAgICAgIHBmaWQtPmZpZF9tdGltZQkgID0gcHN0LT5zdF9tdGltZTsKKysjaWYgZGVmaW5lZChIQVZFX1NUQVRfTlNFQykKKysgICAgICBwZmlkLT5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltZW5zZWM7CisrI2VsaWYgZGVmaW5lZChIQVZFX1NUQVRfVElNRVZBTCkKKysgICAgICBwZmlkLT5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltLnR2X25zZWM7CisrI2Vsc2UKKysgICAgICBwZmlkLT5maWRfbXRpbWVuc2VjID0gMDsKKysjZW5kaWYKKysgICAgICBvbGRfcGZpZCA9IGhhc2hfaW5zZXJ0IChmaWxlX2lkX2hhc2gsIHBmaWQpOworKyAgICAgIGlmICghb2xkX3BmaWQpCisrCXBmYXRhbCAoImhhc2hfaW5zZXJ0Iik7CisrICAgICAgZWxzZSBpZiAob2xkX3BmaWQgIT0gcGZpZCkKKysgICAgICAgIHsKKysJICBmcmVlIChwZmlkKTsKKysJICByZXR1cm4gdHJ1ZTsKKysJfQorKyAgICAgIGVsc2UKKysJcmV0dXJuIGZhbHNlOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBmaWxlX2lkIGZpZDsKKysgICAgICBmaWQuZmlkX2Rldgk9IHBzdC0+c3RfZGV2OworKyAgICAgIGZpZC5maWRfaW5vCT0gcHN0LT5zdF9pbm87CisrICAgICAgZmlkLmZpZF9tdGltZQk9IHBzdC0+c3RfbXRpbWU7CisrI2lmIGRlZmluZWQoSEFWRV9TVEFUX05TRUMpCisrICAgICAgZmlkLmZpZF9tdGltZW5zZWMgPSBwc3QtPnN0X210aW1lbnNlYzsKKysjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVF9USU1FVkFMKQorKyAgICAgIGZpZC5maWRfbXRpbWVuc2VjID0gcHN0LT5zdF9tdGltLnR2X25zZWM7CisrI2Vsc2UKKysgICAgICBmaWQuZmlkX210aW1lbnNlYyA9IDA7CisrI2VuZGlmCisrICAgICAgcmV0dXJuIGhhc2hfbG9va3VwIChmaWxlX2lkX2hhc2gsICZmaWQpICE9IDA7CisrICAgIH0KKyt9CisrCistLS0gcGF0Y2gtMi41Ljkub3JpZy9oYXNoLmMKKysrKyBwYXRjaC0yLjUuOS9oYXNoLmMKK0BAIC0wLDAgKzEsMTA1MSBAQAorKy8qIGhhc2ggLSBoYXNoaW5nIHRhYmxlIHByb2Nlc3NpbmcuCisrCisrICAgQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzIEZyZWUgU29mdHdhcmUKKysgICBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcsIDE5OTIuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKysgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKysKKysvKiBBIGdlbmVyaWMgaGFzaCB0YWJsZSBwYWNrYWdlLiAgKi8KKysKKysvKiBEZWZpbmUgVVNFX09CU1RBQ0sgdG8gMSBpZiB5b3Ugd2FudCB0aGUgYWxsb2NhdG9yIHRvIHVzZSBvYnN0YWNrcyBpbnN0ZWFkCisrICAgb2YgbWFsbG9jLiAgSWYgeW91IGNoYW5nZSBVU0VfT0JTVEFDSywgeW91IGhhdmUgdG8gcmVjb21waWxlISAgKi8KKysKKysjaWYgSEFWRV9DT05GSUdfSAorKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisrI2VuZGlmCisrI2lmIEhBVkVfU1RETElCX0gKKysjIGluY2x1ZGUgPHN0ZGxpYi5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSA8c3RkYm9vbC5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworKyNpZm5kZWYgSEFWRV9ERUNMX0ZSRUUKKysidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorKyNlbmRpZgorKyNpZiAhSEFWRV9ERUNMX0ZSRUUKKyt2b2lkIGZyZWUgKCk7CisrI2VuZGlmCisrCisrI2lmbmRlZiBIQVZFX0RFQ0xfTUFMTE9DCisrInRoaXMgY29uZmlndXJlLXRpbWUgZGVjbGFyYXRpb24gdGVzdCB3YXMgbm90IHJ1biIKKysjZW5kaWYKKysjaWYgIUhBVkVfREVDTF9NQUxMT0MKKytjaGFyICptYWxsb2MgKCk7CisrI2VuZGlmCisrCisrI2lmIFVTRV9PQlNUQUNLCisrIyBpbmNsdWRlICJvYnN0YWNrLmgiCisrIyBpZm5kZWYgb2JzdGFja19jaHVua19hbGxvYworKyMgIGRlZmluZSBvYnN0YWNrX2NodW5rX2FsbG9jIG1hbGxvYworKyMgZW5kaWYKKysjIGlmbmRlZiBvYnN0YWNrX2NodW5rX2ZyZWUKKysjICBkZWZpbmUgb2JzdGFja19jaHVua19mcmVlIGZyZWUKKysjIGVuZGlmCisrI2VuZGlmCisrCisrI2luY2x1ZGUgImhhc2guaCIKKysKKytzdHJ1Y3QgaGFzaF90YWJsZQorKyAgeworKyAgICAvKiBUaGUgYXJyYXkgb2YgYnVja2V0cyBzdGFydHMgYXQgQlVDS0VUIGFuZCBleHRlbmRzIHRvIEJVQ0tFVF9MSU1JVC0xLAorKyAgICAgICBmb3IgYSBwb3NzaWJpbGl0eSBvZiBOX0JVQ0tFVFMuICBBbW9uZyB0aG9zZSwgTl9CVUNLRVRTX1VTRUQgYnVja2V0cworKyAgICAgICBhcmUgbm90IGVtcHR5LCB0aGVyZSBhcmUgTl9FTlRSSUVTIGFjdGl2ZSBlbnRyaWVzIGluIHRoZSB0YWJsZS4gICovCisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXRfbGltaXQ7CisrICAgIHVuc2lnbmVkIG5fYnVja2V0czsKKysgICAgdW5zaWduZWQgbl9idWNrZXRzX3VzZWQ7CisrICAgIHVuc2lnbmVkIG5fZW50cmllczsKKysKKysgICAgLyogVHVuaW5nIGFyZ3VtZW50cywga2VwdCBpbiBhIHBoeXNpY2FseSBzZXBhcmF0ZSBzdHJ1Y3R1cmUuICAqLworKyAgICBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nOworKworKyAgICAvKiBUaHJlZSBmdW5jdGlvbnMgYXJlIGdpdmVuIHRvIGBoYXNoX2luaXRpYWxpemUnLCBzZWUgdGhlIGRvY3VtZW50YXRpb24KKysgICAgICAgYmxvY2sgZm9yIHRoaXMgZnVuY3Rpb24uICBJbiBhIHdvcmQsIEhBU0hFUiByYW5kb21pemVzIGEgdXNlciBlbnRyeQorKyAgICAgICBpbnRvIGEgbnVtYmVyIHVwIGZyb20gMCB1cCB0byBzb21lIG1heGltdW0gbWludXMgMTsgQ09NUEFSQVRPUiByZXR1cm5zCisrICAgICAgIHRydWUgaWYgdHdvIHVzZXIgZW50cmllcyBjb21wYXJlIGVxdWFsbHk7IGFuZCBEQVRBX0ZSRUVSIGlzIHRoZSBjbGVhbnVwCisrICAgICAgIGZ1bmN0aW9uIGZvciBhIHVzZXIgZW50cnkuICAqLworKyAgICBIYXNoX2hhc2hlciBoYXNoZXI7CisrICAgIEhhc2hfY29tcGFyYXRvciBjb21wYXJhdG9yOworKyAgICBIYXNoX2RhdGFfZnJlZXIgZGF0YV9mcmVlcjsKKysKKysgICAgLyogQSBsaW5rZWQgbGlzdCBvZiBmcmVlZCBzdHJ1Y3QgaGFzaF9lbnRyeSBzdHJ1Y3RzLiAgKi8KKysgICAgc3RydWN0IGhhc2hfZW50cnkgKmZyZWVfZW50cnlfbGlzdDsKKysKKysjaWYgVVNFX09CU1RBQ0sKKysgICAgLyogV2hlbmV2ZXIgb2JzdGFja3MgYXJlIHVzZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGFsbCBvdmVyZmxvd2VkCisrICAgICAgIGVudHJpZXMgaW50byBhIHNpbmdsZSBzdGFjaywgc28gdGhleSBhbGwgY2FuIGJlIGZyZWVkIGluIGEgc2luZ2xlCisrICAgICAgIG9wZXJhdGlvbi4gIEl0IGlzIG5vdCBjbGVhciBpZiB0aGUgc3BlZWR1cCBpcyB3b3J0aCB0aGUgdHJvdWJsZS4gICovCisrICAgIHN0cnVjdCBvYnN0YWNrIGVudHJ5X3N0YWNrOworKyNlbmRpZgorKyAgfTsKKysKKysvKiBBIGhhc2ggdGFibGUgY29udGFpbnMgbWFueSBpbnRlcm5hbCBlbnRyaWVzLCBlYWNoIGhvbGRpbmcgYSBwb2ludGVyIHRvCisrICAgc29tZSB1c2VyIHByb3ZpZGVkIGRhdGEgKGFsc28gY2FsbGVkIGEgdXNlciBlbnRyeSkuICBBbiBlbnRyeSBpbmRpc3RpbmN0bHkKKysgICByZWZlcnMgdG8gYm90aCB0aGUgaW50ZXJuYWwgZW50cnkgYW5kIGl0cyBhc3NvY2lhdGVkIHVzZXIgZW50cnkuICBBIHVzZXIKKysgICBlbnRyeSBjb250ZW50cyBtYXkgYmUgaGFzaGVkIGJ5IGEgcmFuZG9taXphdGlvbiBmdW5jdGlvbiAodGhlIGhhc2hpbmcKKysgICBmdW5jdGlvbiwgb3IganVzdCBgaGFzaGVyJyBmb3Igc2hvcnQpIGludG8gYSBudW1iZXIgKG9yIGBzbG90JykgYmV0d2VlbiAwCisrICAgYW5kIHRoZSBjdXJyZW50IHRhYmxlIHNpemUuICBBdCBlYWNoIHNsb3QgcG9zaXRpb24gaW4gdGhlIGhhc2ggdGFibGUsCisrICAgc3RhcnRzIGEgbGlua2VkIGNoYWluIG9mIGVudHJpZXMgZm9yIHdoaWNoIHRoZSB1c2VyIGRhdGEgYWxsIGhhc2ggdG8gdGhpcworKyAgIHNsb3QuICBBIGJ1Y2tldCBpcyB0aGUgY29sbGVjdGlvbiBvZiBhbGwgZW50cmllcyBoYXNoaW5nIHRvIHRoZSBzYW1lIHNsb3QuCisrCisrICAgQSBnb29kIGBoYXNoZXInIGZ1bmN0aW9uIHdpbGwgZGlzdHJpYnV0ZSBlbnRyaWVzIHJhdGhlciBldmVubHkgaW4gYnVja2V0cy4KKysgICBJbiB0aGUgaWRlYWwgY2FzZSwgdGhlIGxlbmd0aCBvZiBlYWNoIGJ1Y2tldCBpcyByb3VnaGx5IHRoZSBudW1iZXIgb2YKKysgICBlbnRyaWVzIGRpdmlkZWQgYnkgdGhlIHRhYmxlIHNpemUuICBGaW5kaW5nIHRoZSBzbG90IGZvciBhIGRhdGEgaXMgdXN1YWxseQorKyAgIGRvbmUgaW4gY29uc3RhbnQgdGltZSBieSB0aGUgYGhhc2hlcicsIGFuZCB0aGUgbGF0ZXIgZmluZGluZyBvZiBhIHByZWNpc2UKKysgICBlbnRyeSBpcyBsaW5lYXIgaW4gdGltZSB3aXRoIHRoZSBzaXplIG9mIHRoZSBidWNrZXQuICBDb25zZXF1ZW50bHksIGEKKysgICBsYXJnZXIgaGFzaCB0YWJsZSBzaXplICh0aGF0IGlzLCBhIGxhcmdlciBudW1iZXIgb2YgYnVja2V0cykgaXMgcHJvbmUgdG8KKysgICB5aWVsZGluZyBzaG9ydGVyIGNoYWlucywgKmdpdmVuKiB0aGUgYGhhc2hlcicgZnVuY3Rpb24gYmVoYXZlcyBwcm9wZXJseS4KKysKKysgICBMb25nIGJ1Y2tldHMgc2xvdyBkb3duIHRoZSBsb29rdXAgYWxnb3JpdGhtLiAgT25lIG1pZ2h0IHVzZSBiaWcgaGFzaCB0YWJsZQorKyAgIHNpemVzIGluIGhvcGUgdG8gcmVkdWNlIHRoZSBhdmVyYWdlIGxlbmd0aCBvZiBidWNrZXRzLCBidXQgdGhpcyBtaWdodAorKyAgIGJlY29tZSBpbm9yZGluYXRlLCBhcyB1bnVzZWQgc2xvdHMgaW4gdGhlIGhhc2ggdGFibGUgdGFrZSBzb21lIHNwYWNlLiAgVGhlCisrICAgYmVzdCBiZXQgaXMgdG8gbWFrZSBzdXJlIHlvdSBhcmUgdXNpbmcgYSBnb29kIGBoYXNoZXInIGZ1bmN0aW9uIChiZXdhcmUKKysgICB0aGF0IHRob3NlIGFyZSBub3QgdGhhdCBlYXN5IHRvIHdyaXRlISA6LSksIGFuZCB0byB1c2UgYSB0YWJsZSBzaXplCisrICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcy4gICovCisrCisrLyogSWYgYW4gaW5zZXJ0aW9uIG1ha2VzIHRoZSByYXRpbyBvZiBub25lbXB0eSBidWNrZXRzIHRvIHRhYmxlIHNpemUgbGFyZ2VyCisrICAgdGhhbiB0aGUgZ3Jvd3RoIHRocmVzaG9sZCAoYSBudW1iZXIgYmV0d2VlbiAwLjAgYW5kIDEuMCksIHRoZW4gaW5jcmVhc2UKKysgICB0aGUgdGFibGUgc2l6ZSBieSBtdWx0aXBseWluZyBieSB0aGUgZ3Jvd3RoIGZhY3RvciAoYSBudW1iZXIgZ3JlYXRlciB0aGFuCisrICAgMS4wKS4gIFRoZSBncm93dGggdGhyZXNob2xkIGRlZmF1bHRzIHRvIDAuOCwgYW5kIHRoZSBncm93dGggZmFjdG9yCisrICAgZGVmYXVsdHMgdG8gMS40MTQsIG1lYW5pbmcgdGhhdCB0aGUgdGFibGUgd2lsbCBoYXZlIGRvdWJsZWQgaXRzIHNpemUKKysgICBldmVyeSBzZWNvbmQgdGltZSA4MCUgb2YgdGhlIGJ1Y2tldHMgZ2V0IHVzZWQuICAqLworKyNkZWZpbmUgREVGQVVMVF9HUk9XVEhfVEhSRVNIT0xEIDAuOAorKyNkZWZpbmUgREVGQVVMVF9HUk9XVEhfRkFDVE9SIDEuNDE0CisrCisrLyogSWYgYSBkZWxldGlvbiBlbXB0aWVzIGEgYnVja2V0IGFuZCBjYXVzZXMgdGhlIHJhdGlvIG9mIHVzZWQgYnVja2V0cyB0bworKyAgIHRhYmxlIHNpemUgdG8gYmVjb21lIHNtYWxsZXIgdGhhbiB0aGUgc2hyaW5rIHRocmVzaG9sZCAoYSBudW1iZXIgYmV0d2VlbgorKyAgIDAuMCBhbmQgMS4wKSwgdGhlbiBzaHJpbmsgdGhlIHRhYmxlIGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBzaHJpbmsgZmFjdG9yIChhCisrICAgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGUgc2hyaW5rIHRocmVzaG9sZCBidXQgc21hbGxlciB0aGFuIDEuMCkuICBUaGUgc2hyaW5rCisrICAgdGhyZXNob2xkIGFuZCBmYWN0b3IgZGVmYXVsdCB0byAwLjAgYW5kIDEuMCwgbWVhbmluZyB0aGF0IHRoZSB0YWJsZSBuZXZlcgorKyAgIHNocmlua3MuICAqLworKyNkZWZpbmUgREVGQVVMVF9TSFJJTktfVEhSRVNIT0xEIDAuMAorKyNkZWZpbmUgREVGQVVMVF9TSFJJTktfRkFDVE9SIDEuMAorKworKy8qIFVzZSB0aGlzIHRvIGluaXRpYWxpemUgb3IgcmVzZXQgYSBUVU5JTkcgc3RydWN0dXJlIHRvCisrICAgc29tZSBzZW5zaWJsZSB2YWx1ZXMuICovCisrc3RhdGljIGNvbnN0IEhhc2hfdHVuaW5nIGRlZmF1bHRfdHVuaW5nID0KKysgIHsKKysgICAgREVGQVVMVF9TSFJJTktfVEhSRVNIT0xELAorKyAgICBERUZBVUxUX1NIUklOS19GQUNUT1IsCisrICAgIERFRkFVTFRfR1JPV1RIX1RIUkVTSE9MRCwKKysgICAgREVGQVVMVF9HUk9XVEhfRkFDVE9SLAorKyAgICBmYWxzZQorKyAgfTsKKysKKysvKiBJbmZvcm1hdGlvbiBhbmQgbG9va3VwLiAgKi8KKysKKysvKiBUaGUgZm9sbG93aW5nIGZldyBmdW5jdGlvbnMgcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3ZlcmFsbCBoYXNoCisrICAgdGFibGUgb3JnYW5pemF0aW9uOiB0aGUgbnVtYmVyIG9mIGVudHJpZXMsIG51bWJlciBvZiBidWNrZXRzIGFuZCBtYXhpbXVtCisrICAgbGVuZ3RoIG9mIGJ1Y2tldHMuICAqLworKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIGhhc2ggdGFibGUuICBUaGUgdGFibGUgc2l6ZSwgdGhlIHRvdGFsCisrICAgbnVtYmVyIG9mIGJ1Y2tldHMgKHVzZWQgcGx1cyB1bnVzZWQpLCBvciB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMsIGFyZQorKyAgIHRoZSBzYW1lIHF1YW50aXR5LiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fYnVja2V0cyAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgcmV0dXJuIHRhYmxlLT5uX2J1Y2tldHM7CisrfQorKworKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHNsb3RzIGluIHVzZSAobm9uLWVtcHR5IGJ1Y2tldHMpLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X25fYnVja2V0c191c2VkIChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICByZXR1cm4gdGFibGUtPm5fYnVja2V0c191c2VkOworK30KKysKKysvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBhY3RpdmUgZW50cmllcy4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9uX2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHJldHVybiB0YWJsZS0+bl9lbnRyaWVzOworK30KKysKKysvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBjaGFpbiAoYnVja2V0KS4gICovCisrCisrdW5zaWduZWQKKytoYXNoX2dldF9tYXhfYnVja2V0X2xlbmd0aCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHVuc2lnbmVkIG1heF9idWNrZXRfbGVuZ3RoID0gMDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBpZiAoYnVja2V0LT5kYXRhKQorKwl7CisrCSAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvciA9IGJ1Y2tldDsKKysJICB1bnNpZ25lZCBidWNrZXRfbGVuZ3RoID0gMTsKKysKKysJICB3aGlsZSAoY3Vyc29yID0gY3Vyc29yLT5uZXh0LCBjdXJzb3IpCisrCSAgICBidWNrZXRfbGVuZ3RoKys7CisrCisrCSAgaWYgKGJ1Y2tldF9sZW5ndGggPiBtYXhfYnVja2V0X2xlbmd0aCkKKysJICAgIG1heF9idWNrZXRfbGVuZ3RoID0gYnVja2V0X2xlbmd0aDsKKysJfQorKyAgICB9CisrCisrICByZXR1cm4gbWF4X2J1Y2tldF9sZW5ndGg7CisrfQorKworKy8qIERvIGEgbWlsZCB2YWxpZGF0aW9uIG9mIGEgaGFzaCB0YWJsZSwgYnkgdHJhdmVyc2luZyBpdCBhbmQgY2hlY2tpbmcgdHdvCisrICAgc3RhdGlzdGljcy4gICovCisrCisrYm9vbAorK2hhc2hfdGFibGVfb2sgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICB1bnNpZ25lZCBuX2J1Y2tldHNfdXNlZCA9IDA7CisrICB1bnNpZ25lZCBuX2VudHJpZXMgPSAwOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yID0gYnVja2V0OworKworKwkgIC8qIENvdW50IGJ1Y2tldCBoZWFkLiAgKi8KKysJICBuX2J1Y2tldHNfdXNlZCsrOworKwkgIG5fZW50cmllcysrOworKworKwkgIC8qIENvdW50IGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCSAgd2hpbGUgKGN1cnNvciA9IGN1cnNvci0+bmV4dCwgY3Vyc29yKQorKwkgICAgbl9lbnRyaWVzKys7CisrCX0KKysgICAgfQorKworKyAgaWYgKG5fYnVja2V0c191c2VkID09IHRhYmxlLT5uX2J1Y2tldHNfdXNlZCAmJiBuX2VudHJpZXMgPT0gdGFibGUtPm5fZW50cmllcykKKysgICAgcmV0dXJuIHRydWU7CisrCisrICByZXR1cm4gZmFsc2U7CisrfQorKworK3ZvaWQKKytoYXNoX3ByaW50X3N0YXRpc3RpY3MgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBGSUxFICpzdHJlYW0pCisreworKyAgdW5zaWduZWQgbl9lbnRyaWVzID0gaGFzaF9nZXRfbl9lbnRyaWVzICh0YWJsZSk7CisrICB1bnNpZ25lZCBuX2J1Y2tldHMgPSBoYXNoX2dldF9uX2J1Y2tldHMgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG5fYnVja2V0c191c2VkID0gaGFzaF9nZXRfbl9idWNrZXRzX3VzZWQgKHRhYmxlKTsKKysgIHVuc2lnbmVkIG1heF9idWNrZXRfbGVuZ3RoID0gaGFzaF9nZXRfbWF4X2J1Y2tldF9sZW5ndGggKHRhYmxlKTsKKysKKysgIGZwcmludGYgKHN0cmVhbSwgIiMgZW50cmllczogICAgICAgICAldVxuIiwgbl9lbnRyaWVzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIiMgYnVja2V0czogICAgICAgICAldVxuIiwgbl9idWNrZXRzKTsKKysgIGZwcmludGYgKHN0cmVhbSwgIiMgYnVja2V0cyB1c2VkOiAgICAldSAoJS4yZiUlKVxuIiwgbl9idWNrZXRzX3VzZWQsCisrCSAgICgxMDAuMCAqIG5fYnVja2V0c191c2VkKSAvIG5fYnVja2V0cyk7CisrICBmcHJpbnRmIChzdHJlYW0sICJtYXggYnVja2V0IGxlbmd0aDogJXVcbiIsIG1heF9idWNrZXRfbGVuZ3RoKTsKKyt9CisrCisrLyogSWYgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBhbHJlYWR5IGluIHRoZSBoYXNoIHRhYmxlLCByZXR1cm4gdGhlCisrICAgZW50cnkgZnJvbSB0aGUgdGFibGUuICBPdGhlcndpc2UsIHJldHVybiBOVUxMLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2xvb2t1cCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQKKysgICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgYWJvcnQgKCk7CisrCisrICBpZiAoYnVja2V0LT5kYXRhID09IE5VTEwpCisrICAgIHJldHVybiBOVUxMOworKworKyAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKyAgICBpZiAodGFibGUtPmNvbXBhcmF0b3IgKGVudHJ5LCBjdXJzb3ItPmRhdGEpKQorKyAgICAgIHJldHVybiBjdXJzb3ItPmRhdGE7CisrCisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrLyogV2Fsa2luZy4gICovCisrCisrLyogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHBhZ2UgdHJhdmVyc2UgdGhlIGhhc2ggdGFibGUgYW5kIHByb2Nlc3MgdGhlCisrICAgY29udGFpbmVkIGVudHJpZXMuICBGb3IgdGhlIHRyYXZlcnNhbCB0byB3b3JrIHByb3Blcmx5LCB0aGUgaGFzaCB0YWJsZQorKyAgIHNob3VsZCBub3QgYmUgcmVzaXplZCBub3IgbW9kaWZpZWQgd2hpbGUgYW55IHBhcnRpY3VsYXIgZW50cnkgaXMgYmVpbmcKKysgICBwcm9jZXNzZWQuICBJbiBwYXJ0aWN1bGFyLCBlbnRyaWVzIHNob3VsZCBub3QgYmUgYWRkZWQgb3IgcmVtb3ZlZC4gICovCisrCisrLyogUmV0dXJuIHRoZSBmaXJzdCBkYXRhIGluIHRoZSB0YWJsZSwgb3IgTlVMTCBpZiB0aGUgdGFibGUgaXMgZW1wdHkuICAqLworKworK3ZvaWQgKgorK2hhc2hfZ2V0X2ZpcnN0IChjb25zdCBIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgaWYgKHRhYmxlLT5uX2VudHJpZXMgPT0gMCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IDsgYnVja2V0KyspCisrICAgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgICBhYm9ydCAoKTsKKysgICAgZWxzZSBpZiAoYnVja2V0LT5kYXRhKQorKyAgICAgIHJldHVybiBidWNrZXQtPmRhdGE7CisrfQorKworKy8qIFJldHVybiB0aGUgdXNlciBkYXRhIGZvciB0aGUgZW50cnkgZm9sbG93aW5nIEVOVFJZLCB3aGVyZSBFTlRSWSBoYXMgYmVlbgorKyAgIHJldHVybmVkIGJ5IGEgcHJldmlvdXMgY2FsbCB0byBlaXRoZXIgYGhhc2hfZ2V0X2ZpcnN0JyBvciBgaGFzaF9nZXRfbmV4dCcuCisrICAgUmV0dXJuIE5VTEwgaWYgdGhlcmUgYXJlIG5vIG1vcmUgZW50cmllcy4gICovCisrCisrdm9pZCAqCisraGFzaF9nZXRfbmV4dCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQKKysgICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgYWJvcnQgKCk7CisrCisrICAvKiBGaW5kIG5leHQgZW50cnkgaW4gdGhlIHNhbWUgYnVja2V0LiAgKi8KKysgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysgICAgaWYgKGN1cnNvci0+ZGF0YSA9PSBlbnRyeSAmJiBjdXJzb3ItPm5leHQpCisrICAgICAgcmV0dXJuIGN1cnNvci0+bmV4dC0+ZGF0YTsKKysKKysgIC8qIEZpbmQgZmlyc3QgZW50cnkgaW4gYW55IHN1YnNlcXVlbnQgYnVja2V0LiAgKi8KKysgIHdoaWxlICgrK2J1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQpCisrICAgIGlmIChidWNrZXQtPmRhdGEpCisrICAgICAgcmV0dXJuIGJ1Y2tldC0+ZGF0YTsKKysKKysgIC8qIE5vbmUgZm91bmQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEZpbGwgQlVGRkVSIHdpdGggcG9pbnRlcnMgdG8gYWN0aXZlIHVzZXIgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZSwgdGhlbgorKyAgIHJldHVybiB0aGUgbnVtYmVyIG9mIHBvaW50ZXJzIGNvcGllZC4gIERvIG5vdCBjb3B5IG1vcmUgdGhhbiBCVUZGRVJfU0laRQorKyAgIHBvaW50ZXJzLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZ2V0X2VudHJpZXMgKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCB2b2lkICoqYnVmZmVyLAorKwkJICB1bnNpZ25lZCBidWZmZXJfc2l6ZSkKKyt7CisrICB1bnNpZ25lZCBjb3VudGVyID0gMDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQpCisrCSAgICB7CisrCSAgICAgIGlmIChjb3VudGVyID49IGJ1ZmZlcl9zaXplKQorKwkJcmV0dXJuIGNvdW50ZXI7CisrCSAgICAgIGJ1ZmZlcltjb3VudGVyKytdID0gY3Vyc29yLT5kYXRhOworKwkgICAgfQorKwl9CisrICAgIH0KKysKKysgIHJldHVybiBjb3VudGVyOworK30KKysKKysvKiBDYWxsIGEgUFJPQ0VTU09SIGZ1bmN0aW9uIGZvciBlYWNoIGVudHJ5IG9mIGEgaGFzaCB0YWJsZSwgYW5kIHJldHVybiB0aGUKKysgICBudW1iZXIgb2YgZW50cmllcyBmb3Igd2hpY2ggdGhlIHByb2Nlc3NvciBmdW5jdGlvbiByZXR1cm5lZCBzdWNjZXNzLiAgQQorKyAgIHBvaW50ZXIgdG8gc29tZSBQUk9DRVNTT1JfREFUQSB3aGljaCB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGVhY2ggY2FsbCB0bworKyAgIHRoZSBwcm9jZXNzb3IgZnVuY3Rpb24uICBUaGUgUFJPQ0VTU09SIGFjY2VwdHMgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzCisrICAgdGhlIHVzZXIgZW50cnkgYmVpbmcgd2Fsa2VkIGludG8sIHRoZSBzZWNvbmQgaXMgdGhlIHZhbHVlIG9mIFBST0NFU1NPUl9EQVRBCisrICAgYXMgcmVjZWl2ZWQuICBUaGUgd2Fsa2luZyBjb250aW51ZSBmb3IgYXMgbG9uZyBhcyB0aGUgUFJPQ0VTU09SIGZ1bmN0aW9uCisrICAgcmV0dXJucyBub256ZXJvLiAgV2hlbiBpdCByZXR1cm5zIHplcm8sIHRoZSB3YWxraW5nIGlzIGludGVycnVwdGVkLiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfZG9fZm9yX2VhY2ggKGNvbnN0IEhhc2hfdGFibGUgKnRhYmxlLCBIYXNoX3Byb2Nlc3NvciBwcm9jZXNzb3IsCisrCQkgIHZvaWQgKnByb2Nlc3Nvcl9kYXRhKQorK3sKKysgIHVuc2lnbmVkIGNvdW50ZXIgPSAwOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrCisrICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKyAgICB7CisrICAgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJeworKwkgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3I7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKCEoKnByb2Nlc3NvcikgKGN1cnNvci0+ZGF0YSwgcHJvY2Vzc29yX2RhdGEpKQorKwkJcmV0dXJuIGNvdW50ZXI7CisrCSAgICAgIGNvdW50ZXIrKzsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gY291bnRlcjsKKyt9CisrCisrLyogQWxsb2NhdGlvbiBhbmQgY2xlYW4tdXAuICAqLworKworKy8qIFJldHVybiBhIGhhc2ggaW5kZXggZm9yIGEgTlVMLXRlcm1pbmF0ZWQgU1RSSU5HIGJldHdlZW4gMCBhbmQgTl9CVUNLRVRTLTEuCisrICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgZm9yIGNvbnN0cnVjdGluZyBvdGhlciBoYXNoaW5nIGZ1bmN0aW9ucy4gICovCisrCisrI2lmIFVTRV9ESUZGX0hBU0gKKysKKysvKiBBYm91dCBoYXNoaW5ncywgUGF1bCBFZ2dlcnQgd3JpdGVzIHRvIG1lIChGUCksIG9uIDE5OTQtMDEtMDE6ICJQbGVhc2Ugc2VlCisrICAgQi4gSi4gTWNLZW56aWUsIFIuIEhhcnJpZXMgJiBULiBCZWxsLCBTZWxlY3RpbmcgYSBoYXNoaW5nIGFsZ29yaXRobSwKKysgICBTb2Z0d2FyZS0tcHJhY3RpY2UgJiBleHBlcmllbmNlIDIwLCAyIChGZWIgMTk5MCksIDIwOS0yMjQuICBHb29kIGhhc2gKKysgICBhbGdvcml0aG1zIHRlbmQgdG8gYmUgZG9tYWluLXNwZWNpZmljLCBzbyB3aGF0J3MgZ29vZCBmb3IgW2RpZmZ1dGlscyddIGlvLmMKKysgICBtYXkgbm90IGJlIGdvb2QgZm9yIHlvdXIgYXBwbGljYXRpb24uIiAgKi8KKysKKyt1bnNpZ25lZAorK2hhc2hfc3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIG5fYnVja2V0cykKKyt7CisrIyBkZWZpbmUgUk9UQVRFX0xFRlQoVmFsdWUsIFNoaWZ0KSBcCisrICAoKFZhbHVlKSA8PCAoU2hpZnQpIHwgKFZhbHVlKSA+PiAoKHNpemVvZiAodW5zaWduZWQpICogQ0hBUl9CSVQpIC0gKFNoaWZ0KSkpCisrIyBkZWZpbmUgSEFTSF9PTkVfQ0hBUihWYWx1ZSwgQnl0ZSkgXAorKyAgKChCeXRlKSArIFJPVEFURV9MRUZUIChWYWx1ZSwgNykpCisrCisrICB1bnNpZ25lZCB2YWx1ZSA9IDA7CisrCisrICBmb3IgKDsgKnN0cmluZzsgc3RyaW5nKyspCisrICAgIHZhbHVlID0gSEFTSF9PTkVfQ0hBUiAodmFsdWUsICooY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHJpbmcpOworKyAgcmV0dXJuIHZhbHVlICUgbl9idWNrZXRzOworKworKyMgdW5kZWYgUk9UQVRFX0xFRlQKKysjIHVuZGVmIEhBU0hfT05FX0NIQVIKKyt9CisrCisrI2Vsc2UgLyogbm90IFVTRV9ESUZGX0hBU0ggKi8KKysKKysvKiBUaGlzIG9uZSBjb21lcyBmcm9tIGByZWNvZGUnLCBhbmQgcGVyZm9ybXMgYSBiaXQgYmV0dGVyIHRoYW4gdGhlIGFib3ZlIGFzCisrICAgcGVyIGEgZmV3IGV4cGVyaW1lbnRzLiAgSXQgaXMgaW5zcGlyZWQgZnJvbSBhIGhhc2hpbmcgcm91dGluZSBmb3VuZCBpbiB0aGUKKysgICB2ZXJ5IG9sZCBDeWJlciBgc25vb3AnLCBpdHNlbGYgd3JpdHRlbiBpbiB0eXBpY2FsIEdyZWcgTWFuc2ZpZWxkIHN0eWxlLgorKyAgIChCeSB0aGUgd2F5LCB3aGF0IGhhcHBlbmVkIHRvIHRoaXMgZXhjZWxsZW50IG1hbj8gIElzIGhlIHN0aWxsIGFsaXZlPykgICovCisrCisrdW5zaWduZWQKKytoYXNoX3N0cmluZyAoY29uc3QgY2hhciAqc3RyaW5nLCB1bnNpZ25lZCBuX2J1Y2tldHMpCisreworKyAgdW5zaWduZWQgdmFsdWUgPSAwOworKworKyAgd2hpbGUgKCpzdHJpbmcpCisrICAgIHZhbHVlID0gKCh2YWx1ZSAqIDMxICsgKGludCkgKihjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0cmluZysrKQorKwkgICAgICUgbl9idWNrZXRzKTsKKysgIHJldHVybiB2YWx1ZTsKKyt9CisrCisrI2VuZGlmIC8qIG5vdCBVU0VfRElGRl9IQVNIICovCisrCisrLyogUmV0dXJuIHRydWUgaWYgQ0FORElEQVRFIGlzIGEgcHJpbWUgbnVtYmVyLiAgQ0FORElEQVRFIHNob3VsZCBiZSBhbiBvZGQKKysgICBudW1iZXIgYXQgbGVhc3QgZXF1YWwgdG8gMTEuICAqLworKworK3N0YXRpYyBib29sCisraXNfcHJpbWUgKHVuc2lnbmVkIGxvbmcgY2FuZGlkYXRlKQorK3sKKysgIHVuc2lnbmVkIGxvbmcgZGl2aXNvciA9IDM7CisrICB1bnNpZ25lZCBsb25nIHNxdWFyZSA9IGRpdmlzb3IgKiBkaXZpc29yOworKworKyAgd2hpbGUgKHNxdWFyZSA8IGNhbmRpZGF0ZSAmJiAoY2FuZGlkYXRlICUgZGl2aXNvcikpCisrICAgIHsKKysgICAgICBkaXZpc29yKys7CisrICAgICAgc3F1YXJlICs9IDQgKiBkaXZpc29yOworKyAgICAgIGRpdmlzb3IrKzsKKysgICAgfQorKworKyAgcmV0dXJuIChjYW5kaWRhdGUgJSBkaXZpc29yID8gdHJ1ZSA6IGZhbHNlKTsKKyt9CisrCisrLyogUm91bmQgYSBnaXZlbiBDQU5ESURBVEUgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0IHByaW1lLCBhbmQgcmV0dXJuIHRoYXQKKysgICBwcmltZS4gIFByaW1lcyBsb3dlciB0aGFuIDEwIGFyZSBtZXJlbHkgc2tpcHBlZC4gICovCisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcKKytuZXh0X3ByaW1lICh1bnNpZ25lZCBsb25nIGNhbmRpZGF0ZSkKKyt7CisrICAvKiBTa2lwIHNtYWxsIHByaW1lcy4gICovCisrICBpZiAoY2FuZGlkYXRlIDwgMTApCisrICAgIGNhbmRpZGF0ZSA9IDEwOworKworKyAgLyogTWFrZSBpdCBkZWZpbml0ZWx5IG9kZC4gICovCisrICBjYW5kaWRhdGUgfD0gMTsKKysKKysgIHdoaWxlICghaXNfcHJpbWUgKGNhbmRpZGF0ZSkpCisrICAgIGNhbmRpZGF0ZSArPSAyOworKworKyAgcmV0dXJuIGNhbmRpZGF0ZTsKKyt9CisrCisrdm9pZAorK2hhc2hfcmVzZXRfdHVuaW5nIChIYXNoX3R1bmluZyAqdHVuaW5nKQorK3sKKysgICp0dW5pbmcgPSBkZWZhdWx0X3R1bmluZzsKKyt9CisrCisrLyogRm9yIHRoZSBnaXZlbiBoYXNoIFRBQkxFLCBjaGVjayB0aGUgdXNlciBzdXBwbGllZCB0dW5pbmcgc3RydWN0dXJlIGZvcgorKyAgIHJlYXNvbmFibGUgdmFsdWVzLCBhbmQgcmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gZ3Jvc3MgZXJyb3Igd2l0aCBpdC4KKysgICBPdGhlcndpc2UsIGRlZmluaXRpdmVseSByZXNldCB0aGUgVFVOSU5HIGZpZWxkIHRvIHNvbWUgYWNjZXB0YWJsZSBkZWZhdWx0CisrICAgaW4gdGhlIGhhc2ggdGFibGUgKHRoYXQgaXMsIHRoZSB1c2VyIGxvc2VzIHRoZSByaWdodCBvZiBmdXJ0aGVyIG1vZGlmeWluZworKyAgIHR1bmluZyBhcmd1bWVudHMpLCBhbmQgcmV0dXJuIGZhbHNlLiAgKi8KKysKKytzdGF0aWMgYm9vbAorK2NoZWNrX3R1bmluZyAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCisrICBpZiAodHVuaW5nLT5ncm93dGhfdGhyZXNob2xkID4gMC4wCisrICAgICAgJiYgdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkIDwgMS4wCisrICAgICAgJiYgdHVuaW5nLT5ncm93dGhfZmFjdG9yID4gMS4wCisrICAgICAgJiYgdHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkID49IDAuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCA8IDEuMAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX2ZhY3RvciA+IHR1bmluZy0+c2hyaW5rX3RocmVzaG9sZAorKyAgICAgICYmIHR1bmluZy0+c2hyaW5rX2ZhY3RvciA8PSAxLjAKKysgICAgICAmJiB0dW5pbmctPnNocmlua190aHJlc2hvbGQgPCB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpCisrICAgIHJldHVybiB0cnVlOworKworKyAgdGFibGUtPnR1bmluZyA9ICZkZWZhdWx0X3R1bmluZzsKKysgIHJldHVybiBmYWxzZTsKKyt9CisrCisrLyogQWxsb2NhdGUgYW5kIHJldHVybiBhIG5ldyBoYXNoIHRhYmxlLCBvciBOVUxMIHVwb24gZmFpbHVyZS4gIFRoZSBpbml0aWFsCisrICAgbnVtYmVyIG9mIGJ1Y2tldHMgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBzbyBhcyB0byBfZ3VhcmFudGVlXyB0aGF0IHlvdQorKyAgIG1heSBpbnNlcnQgYXQgbGVhc3QgQ0FORElEQVRFIGRpZmZlcmVudCB1c2VyIGVudHJpZXMgYmVmb3JlIGFueSBncm93dGggb2YKKysgICB0aGUgaGFzaCB0YWJsZSBzaXplIG9jY3Vycy4gIFNvLCBpZiBoYXZlIGEgcmVhc29uYWJseSB0aWdodCBhLXByaW9yaSB1cHBlcgorKyAgIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgZW50cmllcyB5b3UgaW50ZW5kIHRvIGluc2VydCBpbiB0aGUgaGFzaCB0YWJsZSwgeW91CisrICAgbWF5IHNhdmUgc29tZSB0YWJsZSBtZW1vcnkgYW5kIGluc2VydGlvbiB0aW1lLCBieSBzcGVjaWZ5aW5nIGl0IGhlcmUuICBJZgorKyAgIHRoZSBJU19OX0JVQ0tFVFMgZmllbGQgb2YgdGhlIFRVTklORyBzdHJ1Y3R1cmUgaXMgdHJ1ZSwgdGhlIENBTkRJREFURQorKyAgIGFyZ3VtZW50IGhhcyBpdHMgbWVhbmluZyBjaGFuZ2VkIHRvIHRoZSB3YW50ZWQgbnVtYmVyIG9mIGJ1Y2tldHMuCisrCisrICAgVFVOSU5HIHBvaW50cyB0byBhIHN0cnVjdHVyZSBvZiB1c2VyLXN1cHBsaWVkIHZhbHVlcywgaW4gY2FzZSBzb21lIGZpbmUKKysgICB0dW5pbmcgaXMgd2FudGVkIG92ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGhhc2hlci4gIElmIFRVTklORyBpcworKyAgIE5VTEwsIHRoZSBkZWZhdWx0IHR1bmluZyBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluc3RlYWQuCisrCisrICAgVGhlIHVzZXItc3VwcGxpZWQgSEFTSEVSIGZ1bmN0aW9uIHNob3VsZCBiZSBwcm92aWRlZC4gIEl0IGFjY2VwdHMgdHdvCisrICAgYXJndW1lbnRzIEVOVFJZIGFuZCBUQUJMRV9TSVpFLiAgSXQgY29tcHV0ZXMsIGJ5IGhhc2hpbmcgRU5UUlkgY29udGVudHMsIGEKKysgICBzbG90IG51bWJlciBmb3IgdGhhdCBlbnRyeSB3aGljaCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDAuLlRBQkxFX1NJWkUtMS4KKysgICBUaGlzIHNsb3QgbnVtYmVyIGlzIHRoZW4gcmV0dXJuZWQuCisrCisrICAgVGhlIHVzZXItc3VwcGxpZWQgQ09NUEFSQVRPUiBmdW5jdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQuICBJdCBhY2NlcHRzIHR3bworKyAgIGFyZ3VtZW50cyBwb2ludGluZyB0byB1c2VyIGRhdGEsIGl0IHRoZW4gcmV0dXJucyB0cnVlIGZvciBhIHBhaXIgb2YgZW50cmllcworKyAgIHRoYXQgY29tcGFyZSBlcXVhbCwgb3IgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlcm5hbGx5IGNhbGxlZAorKyAgIG9uIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkga25vd24gdG8gaGFzaCB0byB0aGUgc2FtZSBidWNrZXQgaW5kZXguCisrCisrICAgVGhlIHVzZXItc3VwcGxpZWQgREFUQV9GUkVFUiBmdW5jdGlvbiwgd2hlbiBub3QgTlVMTCwgbWF5IGJlIGxhdGVyIGNhbGxlZAorKyAgIHdpdGggdGhlIHVzZXIgZGF0YSBhcyBhbiBhcmd1bWVudCwganVzdCBiZWZvcmUgdGhlIGVudHJ5IGNvbnRhaW5pbmcgdGhlCisrICAgZGF0YSBnZXRzIGZyZWVkLiAgVGhpcyBoYXBwZW5zIGZyb20gd2l0aGluIGBoYXNoX2ZyZWUnIG9yIGBoYXNoX2NsZWFyJy4KKysgICBZb3Ugc2hvdWxkIHNwZWNpZnkgdGhpcyBmdW5jdGlvbiBvbmx5IGlmIHlvdSB3YW50IHRoZXNlIGZ1bmN0aW9ucyB0byBmcmVlCisrICAgYWxsIG9mIHlvdXIgYGRhdGEnIGRhdGEuICBUaGlzIGlzIHR5cGljYWxseSB0aGUgY2FzZSB3aGVuIHlvdXIgZGF0YSBpcworKyAgIHNpbXBseSBhbiBhdXhpbGlhcnkgc3RydWN0IHRoYXQgeW91IGhhdmUgbWFsbG9jJ2QgdG8gYWdncmVnYXRlIHNldmVyYWwKKysgICB2YWx1ZXMuICAqLworKworK0hhc2hfdGFibGUgKgorK2hhc2hfaW5pdGlhbGl6ZSAodW5zaWduZWQgY2FuZGlkYXRlLCBjb25zdCBIYXNoX3R1bmluZyAqdHVuaW5nLAorKwkJIEhhc2hfaGFzaGVyIGhhc2hlciwgSGFzaF9jb21wYXJhdG9yIGNvbXBhcmF0b3IsCisrCQkgSGFzaF9kYXRhX2ZyZWVyIGRhdGFfZnJlZXIpCisreworKyAgSGFzaF90YWJsZSAqdGFibGU7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgaWYgKGhhc2hlciA9PSBOVUxMIHx8IGNvbXBhcmF0b3IgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICB0YWJsZSA9IChIYXNoX3RhYmxlICopIG1hbGxvYyAoc2l6ZW9mIChIYXNoX3RhYmxlKSk7CisrICBpZiAodGFibGUgPT0gTlVMTCkKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBpZiAoIXR1bmluZykKKysgICAgdHVuaW5nID0gJmRlZmF1bHRfdHVuaW5nOworKyAgdGFibGUtPnR1bmluZyA9IHR1bmluZzsKKysgIGlmICghY2hlY2tfdHVuaW5nICh0YWJsZSkpCisrICAgIHsKKysgICAgICAvKiBGYWlsIGlmIHRoZSB0dW5pbmcgb3B0aW9ucyBhcmUgaW52YWxpZC4gIFRoaXMgaXMgdGhlIG9ubHkgb2NjYXNpb24KKysJIHdoZW4gdGhlIHVzZXIgZ2V0cyBzb21lIGZlZWRiYWNrIGFib3V0IGl0LiAgT25jZSB0aGUgdGFibGUgaXMgY3JlYXRlZCwKKysJIGlmIHRoZSB1c2VyIHByb3ZpZGVzIGludmFsaWQgdHVuaW5nIG9wdGlvbnMsIHdlIHNpbGVudGx5IHJldmVydCB0bworKwkgdXNpbmcgdGhlIGRlZmF1bHRzLCBhbmQgaWdub3JlIGZ1cnRoZXIgcmVxdWVzdCB0byBjaGFuZ2UgdGhlIHR1bmluZworKwkgb3B0aW9ucy4gICovCisrICAgICAgZnJlZSAodGFibGUpOworKyAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrCisrICB0YWJsZS0+bl9idWNrZXRzCisrICAgID0gbmV4dF9wcmltZSAodHVuaW5nLT5pc19uX2J1Y2tldHMgPyBjYW5kaWRhdGUKKysJCSAgOiAodW5zaWduZWQpIChjYW5kaWRhdGUgLyB0dW5pbmctPmdyb3d0aF90aHJlc2hvbGQpKTsKKysKKysgIHRhYmxlLT5idWNrZXQgPSAoc3RydWN0IGhhc2hfZW50cnkgKikKKysgICAgbWFsbG9jICh0YWJsZS0+bl9idWNrZXRzICogc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSkpOworKyAgaWYgKHRhYmxlLT5idWNrZXQgPT0gTlVMTCkKKysgICAgeworKyAgICAgIGZyZWUgKHRhYmxlKTsKKysgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyAgdGFibGUtPmJ1Y2tldF9saW1pdCA9IHRhYmxlLT5idWNrZXQgKyB0YWJsZS0+bl9idWNrZXRzOworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisrICAgICAgYnVja2V0LT5uZXh0ID0gTlVMTDsKKysgICAgfQorKyAgdGFibGUtPm5fYnVja2V0c191c2VkID0gMDsKKysgIHRhYmxlLT5uX2VudHJpZXMgPSAwOworKworKyAgdGFibGUtPmhhc2hlciA9IGhhc2hlcjsKKysgIHRhYmxlLT5jb21wYXJhdG9yID0gY29tcGFyYXRvcjsKKysgIHRhYmxlLT5kYXRhX2ZyZWVyID0gZGF0YV9mcmVlcjsKKysKKysgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBOVUxMOworKyNpZiBVU0VfT0JTVEFDSworKyAgb2JzdGFja19pbml0ICgmdGFibGUtPmVudHJ5X3N0YWNrKTsKKysjZW5kaWYKKysgIHJldHVybiB0YWJsZTsKKyt9CisrCisrLyogTWFrZSBhbGwgYnVja2V0cyBlbXB0eSwgcGxhY2luZyBhbnkgY2hhaW5lZCBlbnRyaWVzIG9uIHRoZSBmcmVlIGxpc3QuCisrICAgQXBwbHkgdGhlIHVzZXItc3BlY2lmaWVkIGZ1bmN0aW9uIGRhdGFfZnJlZXIgKGlmIGFueSkgdG8gdGhlIGRhdGFzIG9mIGFueQorKyAgIGFmZmVjdGVkIGVudHJpZXMuICAqLworKworK3ZvaWQKKytoYXNoX2NsZWFyIChIYXNoX3RhYmxlICp0YWJsZSkKKyt7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgeworKyAgICAgIGlmIChidWNrZXQtPmRhdGEpCisrCXsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKwkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0OworKworKwkgIC8qIEZyZWUgdGhlIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCSAgZm9yIChjdXJzb3IgPSBidWNrZXQtPm5leHQ7IGN1cnNvcjsgY3Vyc29yID0gbmV4dCkKKysJICAgIHsKKysJICAgICAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyKQorKwkJKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGN1cnNvci0+ZGF0YSk7CisrCSAgICAgIGN1cnNvci0+ZGF0YSA9IE5VTEw7CisrCisrCSAgICAgIG5leHQgPSBjdXJzb3ItPm5leHQ7CisrCSAgICAgIC8qIFJlbGlua2luZyBpcyBkb25lIG9uZSBlbnRyeSBhdCBhIHRpbWUsIGFzIGl0IGlzIHRvIGJlIGV4cGVjdGVkCisrCQkgdGhhdCBvdmVyZmxvd3MgYXJlIGVpdGhlciByYXJlIG9yIHNob3J0LiAgKi8KKysJICAgICAgY3Vyc29yLT5uZXh0ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysJICAgICAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IGN1cnNvcjsKKysJICAgIH0KKysKKysJICAvKiBGcmVlIHRoZSBidWNrZXQgaGVhZC4gICovCisrCSAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyKQorKwkgICAgKCp0YWJsZS0+ZGF0YV9mcmVlcikgKGJ1Y2tldC0+ZGF0YSk7CisrCSAgYnVja2V0LT5kYXRhID0gTlVMTDsKKysJICBidWNrZXQtPm5leHQgPSBOVUxMOworKwl9CisrICAgIH0KKysKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCA9IDA7CisrICB0YWJsZS0+bl9lbnRyaWVzID0gMDsKKyt9CisrCisrLyogUmVjbGFpbSBhbGwgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggYSBoYXNoIHRhYmxlLiAgSWYgYSBkYXRhX2ZyZWVyCisrICAgZnVuY3Rpb24gaGFzIGJlZW4gc3VwcGxpZWQgYnkgdGhlIHVzZXIgd2hlbiB0aGUgaGFzaCB0YWJsZSB3YXMgY3JlYXRlZCwKKysgICB0aGlzIGZ1bmN0aW9uIGFwcGxpZXMgaXQgdG8gdGhlIGRhdGEgb2YgZWFjaCBlbnRyeSBiZWZvcmUgZnJlZWluZyB0aGF0CisrICAgZW50cnkuICAqLworKworK3ZvaWQKKytoYXNoX2ZyZWUgKEhhc2hfdGFibGUgKnRhYmxlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQ7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKyAgc3RydWN0IGhhc2hfZW50cnkgKm5leHQ7CisrCisrICAvKiBDYWxsIHRoZSB1c2VyIGRhdGFfZnJlZXIgZnVuY3Rpb24uICAqLworKyAgaWYgKHRhYmxlLT5kYXRhX2ZyZWVyICYmIHRhYmxlLT5uX2VudHJpZXMpCisrICAgIHsKKysgICAgICBmb3IgKGJ1Y2tldCA9IHRhYmxlLT5idWNrZXQ7IGJ1Y2tldCA8IHRhYmxlLT5idWNrZXRfbGltaXQ7IGJ1Y2tldCsrKQorKwl7CisrCSAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysJICAgIHsKKysJICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwkJeworKwkJICAoKnRhYmxlLT5kYXRhX2ZyZWVyKSAoY3Vyc29yLT5kYXRhKTsKKysJCX0KKysJICAgIH0KKysJfQorKyAgICB9CisrCisrI2lmIFVTRV9PQlNUQUNLCisrCisrICBvYnN0YWNrX2ZyZWUgKCZ0YWJsZS0+ZW50cnlfc3RhY2ssIE5VTEwpOworKworKyNlbHNlCisrCisrICAvKiBGcmVlIGFsbCBidWNrZXQgb3ZlcmZsb3dlZCBlbnRyaWVzLiAgKi8KKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldC0+bmV4dDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwl7CisrCSAgbmV4dCA9IGN1cnNvci0+bmV4dDsKKysJICBmcmVlIChjdXJzb3IpOworKwl9CisrICAgIH0KKysKKysgIC8qIEFsc28gcmVjbGFpbSB0aGUgaW50ZXJuYWwgbGlzdCBvZiBwcmV2aW91c2x5IGZyZWVkIGVudHJpZXMuICAqLworKyAgZm9yIChjdXJzb3IgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OyBjdXJzb3I7IGN1cnNvciA9IG5leHQpCisrICAgIHsKKysgICAgICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKyAgICAgIGZyZWUgKGN1cnNvcik7CisrICAgIH0KKysKKysjZW5kaWYKKysKKysgIC8qIEZyZWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgaGFzaCB0YWJsZSBzdHJ1Y3R1cmUuICAqLworKyAgZnJlZSAodGFibGUtPmJ1Y2tldCk7CisrICBmcmVlICh0YWJsZSk7CisrfQorKworKy8qIEluc2VydGlvbiBhbmQgZGVsZXRpb24uICAqLworKworKy8qIEdldCBhIG5ldyBoYXNoIGVudHJ5IGZvciBhIGJ1Y2tldCBvdmVyZmxvdywgcG9zc2libHkgYnkgcmVjbHlpbmcgYQorKyAgIHByZXZpb3VzbHkgZnJlZWQgb25lLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGFsbG9jYXRlIGEgbmV3IG9uZS4gICovCisrCisrc3RhdGljIHN0cnVjdCBoYXNoX2VudHJ5ICoKKythbGxvY2F0ZV9lbnRyeSAoSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKm5ldzsKKysKKysgIGlmICh0YWJsZS0+ZnJlZV9lbnRyeV9saXN0KQorKyAgICB7CisrICAgICAgbmV3ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysgICAgICB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0ID0gbmV3LT5uZXh0OworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysjaWYgVVNFX09CU1RBQ0sKKysgICAgICBuZXcgPSAoc3RydWN0IGhhc2hfZW50cnkgKikKKysJb2JzdGFja19hbGxvYyAoJnRhYmxlLT5lbnRyeV9zdGFjaywgc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSkpOworKyNlbHNlCisrICAgICAgbmV3ID0gKHN0cnVjdCBoYXNoX2VudHJ5ICopIG1hbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgaGFzaF9lbnRyeSkpOworKyNlbmRpZgorKyAgICB9CisrCisrICByZXR1cm4gbmV3OworK30KKysKKysvKiBGcmVlIGEgaGFzaCBlbnRyeSB3aGljaCB3YXMgcGFydCBvZiBzb21lIGJ1Y2tldCBvdmVyZmxvdywKKysgICBzYXZpbmcgaXQgZm9yIGxhdGVyIHJlY3ljbGluZy4gICovCisrCisrc3RhdGljIHZvaWQKKytmcmVlX2VudHJ5IChIYXNoX3RhYmxlICp0YWJsZSwgc3RydWN0IGhhc2hfZW50cnkgKmVudHJ5KQorK3sKKysgIGVudHJ5LT5kYXRhID0gTlVMTDsKKysgIGVudHJ5LT5uZXh0ID0gdGFibGUtPmZyZWVfZW50cnlfbGlzdDsKKysgIHRhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSBlbnRyeTsKKyt9CisrCisrLyogVGhpcyBwcml2YXRlIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaGVscCB3aXRoIGluc2VydGlvbiBhbmQgZGVsZXRpb24uICBXaGVuCisrICAgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBpbiB0aGUgdGFibGUsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKysgICB1c2VyIGRhdGEgYW5kIHNldCAqQlVDS0VUX0hFQUQgdG8gdGhlIGhlYWQgb2YgdGhlIHNlbGVjdGVkIGJ1Y2tldC4KKysgICBPdGhlcndpc2UsIHJldHVybiBOVUxMLiAgV2hlbiBERUxFVEUgaXMgdHJ1ZSBhbmQgRU5UUlkgbWF0Y2hlcyBhbiBlbnRyeSBpbgorKyAgIHRoZSB0YWJsZSwgdW5saW5rIHRoZSBtYXRjaGluZyBlbnRyeS4gICovCisrCisrc3RhdGljIHZvaWQgKgorK2hhc2hfZmluZF9lbnRyeSAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5LAorKwkJIHN0cnVjdCBoYXNoX2VudHJ5ICoqYnVja2V0X2hlYWQsIGJvb2wgZGVsZXRlKQorK3sKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpidWNrZXQKKysgICAgPSB0YWJsZS0+YnVja2V0ICsgdGFibGUtPmhhc2hlciAoZW50cnksIHRhYmxlLT5uX2J1Y2tldHMpOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmN1cnNvcjsKKysKKysgIGlmICghIChidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0KSkKKysgICAgYWJvcnQgKCk7CisrCisrICAqYnVja2V0X2hlYWQgPSBidWNrZXQ7CisrCisrICAvKiBUZXN0IGZvciBlbXB0eSBidWNrZXQuICAqLworKyAgaWYgKGJ1Y2tldC0+ZGF0YSA9PSBOVUxMKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIC8qIFNlZSBpZiB0aGUgZW50cnkgaXMgdGhlIGZpcnN0IGluIHRoZSBidWNrZXQuICAqLworKyAgaWYgKCgqdGFibGUtPmNvbXBhcmF0b3IpIChlbnRyeSwgYnVja2V0LT5kYXRhKSkKKysgICAgeworKyAgICAgIHZvaWQgKmRhdGEgPSBidWNrZXQtPmRhdGE7CisrCisrICAgICAgaWYgKGRlbGV0ZSkKKysJeworKwkgIGlmIChidWNrZXQtPm5leHQpCisrCSAgICB7CisrCSAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gYnVja2V0LT5uZXh0OworKworKwkgICAgICAvKiBCdW1wIHRoZSBmaXJzdCBvdmVyZmxvdyBlbnRyeSBpbnRvIHRoZSBidWNrZXQgaGVhZCwgdGhlbiBzYXZlCisrCQkgdGhlIHByZXZpb3VzIGZpcnN0IG92ZXJmbG93IGVudHJ5IGZvciBsYXRlciByZWN5Y2xpbmcuICAqLworKwkgICAgICAqYnVja2V0ID0gKm5leHQ7CisrCSAgICAgIGZyZWVfZW50cnkgKHRhYmxlLCBuZXh0KTsKKysJICAgIH0KKysJICBlbHNlCisrCSAgICB7CisrCSAgICAgIGJ1Y2tldC0+ZGF0YSA9IE5VTEw7CisrCSAgICB9CisrCX0KKysKKysgICAgICByZXR1cm4gZGF0YTsKKysgICAgfQorKworKyAgLyogU2NhbiB0aGUgYnVja2V0IG92ZXJmbG93LiAgKi8KKysgIGZvciAoY3Vyc29yID0gYnVja2V0OyBjdXJzb3ItPm5leHQ7IGN1cnNvciA9IGN1cnNvci0+bmV4dCkKKysgICAgeworKyAgICAgIGlmICgoKnRhYmxlLT5jb21wYXJhdG9yKSAoZW50cnksIGN1cnNvci0+bmV4dC0+ZGF0YSkpCisrCXsKKysJICB2b2lkICpkYXRhID0gY3Vyc29yLT5uZXh0LT5kYXRhOworKworKwkgIGlmIChkZWxldGUpCisrCSAgICB7CisrCSAgICAgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXh0ID0gY3Vyc29yLT5uZXh0OworKworKwkgICAgICAvKiBVbmxpbmsgdGhlIGVudHJ5IHRvIGRlbGV0ZSwgdGhlbiBzYXZlIHRoZSBmcmVlZCBlbnRyeSBmb3IgbGF0ZXIKKysJCSByZWN5Y2xpbmcuICAqLworKwkgICAgICBjdXJzb3ItPm5leHQgPSBuZXh0LT5uZXh0OworKwkgICAgICBmcmVlX2VudHJ5ICh0YWJsZSwgbmV4dCk7CisrCSAgICB9CisrCisrCSAgcmV0dXJuIGRhdGE7CisrCX0KKysgICAgfQorKworKyAgLyogTm8gZW50cnkgZm91bmQuICAqLworKyAgcmV0dXJuIE5VTEw7CisrfQorKworKy8qIEZvciBhbiBhbHJlYWR5IGV4aXN0aW5nIGhhc2ggdGFibGUsIGNoYW5nZSB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgdGhyb3VnaAorKyAgIHNwZWNpZnlpbmcgQ0FORElEQVRFLiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBoYXNoIHRhYmxlIGFyZSBwcmVzZXJ2ZWQuICBUaGUKKysgICBuZXcgbnVtYmVyIG9mIGJ1Y2tldHMgaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBzbyBhcyB0byBfZ3VhcmFudGVlXyB0aGF0CisrICAgdGhlIHRhYmxlIG1heSByZWNlaXZlIGF0IGxlYXN0IENBTkRJREFURSBkaWZmZXJlbnQgdXNlciBlbnRyaWVzLCBpbmNsdWRpbmcKKysgICB0aG9zZSBhbHJlYWR5IGluIHRoZSB0YWJsZSwgYmVmb3JlIGFueSBvdGhlciBncm93dGggb2YgdGhlIGhhc2ggdGFibGUgc2l6ZQorKyAgIG9jY3Vycy4gIElmIFRVTklORy0+SVNfTl9CVUNLRVRTIGlzIHRydWUsIHRoZW4gQ0FORElEQVRFIHNwZWNpZmllcyB0aGUKKysgICBleGFjdCBudW1iZXIgb2YgYnVja2V0cyBkZXNpcmVkLiAgKi8KKysKKytib29sCisraGFzaF9yZWhhc2ggKEhhc2hfdGFibGUgKnRhYmxlLCB1bnNpZ25lZCBjYW5kaWRhdGUpCisreworKyAgSGFzaF90YWJsZSAqbmV3X3RhYmxlOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysgIHN0cnVjdCBoYXNoX2VudHJ5ICpjdXJzb3I7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysKKysgIG5ld190YWJsZSA9IGhhc2hfaW5pdGlhbGl6ZSAoY2FuZGlkYXRlLCB0YWJsZS0+dHVuaW5nLCB0YWJsZS0+aGFzaGVyLAorKwkJCSAgICAgICB0YWJsZS0+Y29tcGFyYXRvciwgdGFibGUtPmRhdGFfZnJlZXIpOworKyAgaWYgKG5ld190YWJsZSA9PSBOVUxMKQorKyAgICByZXR1cm4gZmFsc2U7CisrCisrICAvKiBNZXJlbHkgcmV1c2UgdGhlIGV4dHJhIG9sZCBzcGFjZSBpbnRvIHRoZSBuZXcgdGFibGUuICAqLworKyNpZiBVU0VfT0JTVEFDSworKyAgb2JzdGFja19mcmVlICgmbmV3X3RhYmxlLT5lbnRyeV9zdGFjaywgTlVMTCk7CisrICBuZXdfdGFibGUtPmVudHJ5X3N0YWNrID0gdGFibGUtPmVudHJ5X3N0YWNrOworKyNlbmRpZgorKyAgbmV3X3RhYmxlLT5mcmVlX2VudHJ5X2xpc3QgPSB0YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKworKyAgZm9yIChidWNrZXQgPSB0YWJsZS0+YnVja2V0OyBidWNrZXQgPCB0YWJsZS0+YnVja2V0X2xpbWl0OyBidWNrZXQrKykKKysgICAgaWYgKGJ1Y2tldC0+ZGF0YSkKKysgICAgICBmb3IgKGN1cnNvciA9IGJ1Y2tldDsgY3Vyc29yOyBjdXJzb3IgPSBuZXh0KQorKwl7CisrCSAgdm9pZCAqZGF0YSA9IGN1cnNvci0+ZGF0YTsKKysJICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV3X2J1Y2tldAorKwkgICAgPSAobmV3X3RhYmxlLT5idWNrZXQKKysJICAgICAgICsgbmV3X3RhYmxlLT5oYXNoZXIgKGRhdGEsIG5ld190YWJsZS0+bl9idWNrZXRzKSk7CisrCisrCSAgaWYgKCEgKG5ld19idWNrZXQgPCBuZXdfdGFibGUtPmJ1Y2tldF9saW1pdCkpCisrCSAgICBhYm9ydCAoKTsKKysKKysJICBuZXh0ID0gY3Vyc29yLT5uZXh0OworKworKwkgIGlmIChuZXdfYnVja2V0LT5kYXRhKQorKwkgICAgeworKwkgICAgICBpZiAoY3Vyc29yID09IGJ1Y2tldCkKKysJCXsKKysJCSAgLyogQWxsb2NhdGUgb3IgcmVjeWNsZSBhbiBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAorKwkJICAgICBoZWFkZXIgaW50byBhIGJ1Y2tldCBvdmVyZmxvdy4gICovCisrCQkgIHN0cnVjdCBoYXNoX2VudHJ5ICpuZXdfZW50cnkgPSBhbGxvY2F0ZV9lbnRyeSAobmV3X3RhYmxlKTsKKysKKysJCSAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQorKwkJICAgIHJldHVybiBmYWxzZTsKKysKKysJCSAgbmV3X2VudHJ5LT5kYXRhID0gZGF0YTsKKysJCSAgbmV3X2VudHJ5LT5uZXh0ID0gbmV3X2J1Y2tldC0+bmV4dDsKKysJCSAgbmV3X2J1Y2tldC0+bmV4dCA9IG5ld19lbnRyeTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJeworKwkJICAvKiBNZXJlbHkgcmVsaW5rIGFuIGV4aXN0aW5nIGVudHJ5LCB3aGVuIG1vdmluZyBmcm9tIGEKKysJCSAgICAgYnVja2V0IG92ZXJmbG93IGludG8gYSBidWNrZXQgb3ZlcmZsb3cuICAqLworKwkJICBjdXJzb3ItPm5leHQgPSBuZXdfYnVja2V0LT5uZXh0OworKwkJICBuZXdfYnVja2V0LT5uZXh0ID0gY3Vyc29yOworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgLyogRnJlZSBhbiBleGlzdGluZyBlbnRyeSwgd2hlbiBtb3ZpbmcgZnJvbSBhIGJ1Y2tldAorKwkJIG92ZXJmbG93IGludG8gYSBidWNrZXQgaGVhZGVyLiAgQWxzbyB0YWtlIGNhcmUgb2YgdGhlCisrCQkgc2ltcGxlIGNhc2Ugb2YgbW92aW5nIGZyb20gYSBidWNrZXQgaGVhZGVyIGludG8gYSBidWNrZXQKKysJCSBoZWFkZXIuICAqLworKwkgICAgICBuZXdfYnVja2V0LT5kYXRhID0gZGF0YTsKKysJICAgICAgbmV3X3RhYmxlLT5uX2J1Y2tldHNfdXNlZCsrOworKwkgICAgICBpZiAoY3Vyc29yICE9IGJ1Y2tldCkKKysJCWZyZWVfZW50cnkgKG5ld190YWJsZSwgY3Vyc29yKTsKKysJICAgIH0KKysJfQorKworKyAgZnJlZSAodGFibGUtPmJ1Y2tldCk7CisrICB0YWJsZS0+YnVja2V0ID0gbmV3X3RhYmxlLT5idWNrZXQ7CisrICB0YWJsZS0+YnVja2V0X2xpbWl0ID0gbmV3X3RhYmxlLT5idWNrZXRfbGltaXQ7CisrICB0YWJsZS0+bl9idWNrZXRzID0gbmV3X3RhYmxlLT5uX2J1Y2tldHM7CisrICB0YWJsZS0+bl9idWNrZXRzX3VzZWQgPSBuZXdfdGFibGUtPm5fYnVja2V0c191c2VkOworKyAgdGFibGUtPmZyZWVfZW50cnlfbGlzdCA9IG5ld190YWJsZS0+ZnJlZV9lbnRyeV9saXN0OworKyAgLyogdGFibGUtPm5fZW50cmllcyBhbHJlYWR5IGhvbGRzIGl0cyB2YWx1ZS4gICovCisrI2lmIFVTRV9PQlNUQUNLCisrICB0YWJsZS0+ZW50cnlfc3RhY2sgPSBuZXdfdGFibGUtPmVudHJ5X3N0YWNrOworKyNlbmRpZgorKyAgZnJlZSAobmV3X3RhYmxlKTsKKysKKysgIHJldHVybiB0cnVlOworK30KKysKKysvKiBJZiBFTlRSWSBtYXRjaGVzIGFuIGVudHJ5IGFscmVhZHkgaW4gdGhlIGhhc2ggdGFibGUsIHJldHVybiB0aGUgcG9pbnRlcgorKyAgIHRvIHRoZSBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIE90aGVyd2lzZSwgaW5zZXJ0IEVOVFJZIGFuZCByZXR1cm4gRU5UUlkuCisrICAgUmV0dXJuIE5VTEwgaWYgdGhlIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIGluc2VydGlvbiBjYW5ub3QgYmUgYWxsb2NhdGVkLiAgKi8KKysKKyt2b2lkICoKKytoYXNoX2luc2VydCAoSGFzaF90YWJsZSAqdGFibGUsIGNvbnN0IHZvaWQgKmVudHJ5KQorK3sKKysgIHZvaWQgKmRhdGE7CisrICBzdHJ1Y3QgaGFzaF9lbnRyeSAqYnVja2V0OworKworKyAgLyogVGhlIGNhbGxlciBjYW5ub3QgaW5zZXJ0IGEgTlVMTCBlbnRyeS4gICovCisrICBpZiAoISBlbnRyeSkKKysgICAgYWJvcnQgKCk7CisrCisrICAvKiBJZiB0aGVyZSdzIGEgbWF0Y2hpbmcgZW50cnkgYWxyZWFkeSBpbiB0aGUgdGFibGUsIHJldHVybiB0aGF0LiAgKi8KKysgIGlmICgoZGF0YSA9IGhhc2hfZmluZF9lbnRyeSAodGFibGUsIGVudHJ5LCAmYnVja2V0LCBmYWxzZSkpICE9IE5VTEwpCisrICAgIHJldHVybiBkYXRhOworKworKyAgLyogRU5UUlkgaXMgbm90IG1hdGNoZWQsIGl0IHNob3VsZCBiZSBpbnNlcnRlZC4gICovCisrCisrICBpZiAoYnVja2V0LT5kYXRhKQorKyAgICB7CisrICAgICAgc3RydWN0IGhhc2hfZW50cnkgKm5ld19lbnRyeSA9IGFsbG9jYXRlX2VudHJ5ICh0YWJsZSk7CisrCisrICAgICAgaWYgKG5ld19lbnRyeSA9PSBOVUxMKQorKwlyZXR1cm4gTlVMTDsKKysKKysgICAgICAvKiBBZGQgRU5UUlkgaW4gdGhlIG92ZXJmbG93IG9mIHRoZSBidWNrZXQuICAqLworKworKyAgICAgIG5ld19lbnRyeS0+ZGF0YSA9ICh2b2lkICopIGVudHJ5OworKyAgICAgIG5ld19lbnRyeS0+bmV4dCA9IGJ1Y2tldC0+bmV4dDsKKysgICAgICBidWNrZXQtPm5leHQgPSBuZXdfZW50cnk7CisrICAgICAgdGFibGUtPm5fZW50cmllcysrOworKyAgICAgIHJldHVybiAodm9pZCAqKSBlbnRyeTsKKysgICAgfQorKworKyAgLyogQWRkIEVOVFJZIHJpZ2h0IGluIHRoZSBidWNrZXQgaGVhZC4gICovCisrCisrICBidWNrZXQtPmRhdGEgPSAodm9pZCAqKSBlbnRyeTsKKysgIHRhYmxlLT5uX2VudHJpZXMrKzsKKysgIHRhYmxlLT5uX2J1Y2tldHNfdXNlZCsrOworKworKyAgLyogSWYgdGhlIGdyb3d0aCB0aHJlc2hvbGQgb2YgdGhlIGJ1Y2tldHMgaW4gdXNlIGhhcyBiZWVuIHJlYWNoZWQsIGluY3JlYXNlCisrICAgICB0aGUgdGFibGUgc2l6ZSBhbmQgcmVoYXNoLiAgVGhlcmUncyBubyBwb2ludCBpbiBjaGVja2luZyB0aGUgbnVtYmVyIG9mCisrICAgICBlbnRyaWVzOiAgaWYgdGhlIGhhc2hpbmcgZnVuY3Rpb24gaXMgaWxsLWNvbmRpdGlvbmVkLCByZWhhc2hpbmcgaXMgbm90CisrICAgICBsaWtlbHkgdG8gaW1wcm92ZSBpdC4gICovCisrCisrICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrICAgICAgPiB0YWJsZS0+dHVuaW5nLT5ncm93dGhfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysgICAgeworKyAgICAgIC8qIENoZWNrIG1vcmUgZnVsbHksIGJlZm9yZSBzdGFydGluZyByZWFsIHdvcmsuICBJZiB0dW5pbmcgYXJndW1lbnRzCisrCSBiZWNhbWUgaW52YWxpZCwgdGhlIHNlY29uZCBjaGVjayB3aWxsIHJlbHkgb24gcHJvcGVyIGRlZmF1bHRzLiAgKi8KKysgICAgICBjaGVja190dW5pbmcgKHRhYmxlKTsKKysgICAgICBpZiAodGFibGUtPm5fYnVja2V0c191c2VkCisrCSAgPiB0YWJsZS0+dHVuaW5nLT5ncm93dGhfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJeworKwkgIGNvbnN0IEhhc2hfdHVuaW5nICp0dW5pbmcgPSB0YWJsZS0+dHVuaW5nOworKwkgIHVuc2lnbmVkIGNhbmRpZGF0ZQorKwkgICAgPSAodW5zaWduZWQpICh0dW5pbmctPmlzX25fYnVja2V0cworKwkJCSAgPyAodGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+Z3Jvd3RoX2ZhY3RvcikKKysJCQkgIDogKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPmdyb3d0aF9mYWN0b3IKKysJCQkgICAgICogdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7CisrCisrCSAgLyogSWYgdGhlIHJlaGFzaCBmYWlscywgYXJyYW5nZSB0byByZXR1cm4gTlVMTC4gICovCisrCSAgaWYgKCFoYXNoX3JlaGFzaCAodGFibGUsIGNhbmRpZGF0ZSkpCisrCSAgICBlbnRyeSA9IE5VTEw7CisrCX0KKysgICAgfQorKworKyAgcmV0dXJuICh2b2lkICopIGVudHJ5OworK30KKysKKysvKiBJZiBFTlRSWSBpcyBhbHJlYWR5IGluIHRoZSB0YWJsZSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gdGhlIGp1c3QtZGVsZXRlZAorKyAgIGRhdGEgKHRoZSB1c2VyIG1heSB3YW50IHRvIGRlYWxsb2NhdGUgaXRzIHN0b3JhZ2UpLiAgSWYgRU5UUlkgaXMgbm90IGluIHRoZQorKyAgIHRhYmxlLCBkb24ndCBtb2RpZnkgdGhlIHRhYmxlIGFuZCByZXR1cm4gTlVMTC4gICovCisrCisrdm9pZCAqCisraGFzaF9kZWxldGUgKEhhc2hfdGFibGUgKnRhYmxlLCBjb25zdCB2b2lkICplbnRyeSkKKyt7CisrICB2b2lkICpkYXRhOworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGRhdGEgPSBoYXNoX2ZpbmRfZW50cnkgKHRhYmxlLCBlbnRyeSwgJmJ1Y2tldCwgdHJ1ZSk7CisrICBpZiAoIWRhdGEpCisrICAgIHJldHVybiBOVUxMOworKworKyAgdGFibGUtPm5fZW50cmllcy0tOworKyAgaWYgKCFidWNrZXQtPmRhdGEpCisrICAgIHsKKysgICAgICB0YWJsZS0+bl9idWNrZXRzX3VzZWQtLTsKKysKKysgICAgICAvKiBJZiB0aGUgc2hyaW5rIHRocmVzaG9sZCBvZiB0aGUgYnVja2V0cyBpbiB1c2UgaGFzIGJlZW4gcmVhY2hlZCwKKysJIHJlaGFzaCBpbnRvIGEgc21hbGxlciB0YWJsZS4gICovCisrCisrICAgICAgaWYgKHRhYmxlLT5uX2J1Y2tldHNfdXNlZAorKwkgIDwgdGFibGUtPnR1bmluZy0+c2hyaW5rX3RocmVzaG9sZCAqIHRhYmxlLT5uX2J1Y2tldHMpCisrCXsKKysJICAvKiBDaGVjayBtb3JlIGZ1bGx5LCBiZWZvcmUgc3RhcnRpbmcgcmVhbCB3b3JrLiAgSWYgdHVuaW5nIGFyZ3VtZW50cworKwkgICAgIGJlY2FtZSBpbnZhbGlkLCB0aGUgc2Vjb25kIGNoZWNrIHdpbGwgcmVseSBvbiBwcm9wZXIgZGVmYXVsdHMuICAqLworKwkgIGNoZWNrX3R1bmluZyAodGFibGUpOworKwkgIGlmICh0YWJsZS0+bl9idWNrZXRzX3VzZWQKKysJICAgICAgPCB0YWJsZS0+dHVuaW5nLT5zaHJpbmtfdGhyZXNob2xkICogdGFibGUtPm5fYnVja2V0cykKKysJICAgIHsKKysJICAgICAgY29uc3QgSGFzaF90dW5pbmcgKnR1bmluZyA9IHRhYmxlLT50dW5pbmc7CisrCSAgICAgIHVuc2lnbmVkIGNhbmRpZGF0ZQorKwkJPSAodW5zaWduZWQpICh0dW5pbmctPmlzX25fYnVja2V0cworKwkJCSAgICAgID8gdGFibGUtPm5fYnVja2V0cyAqIHR1bmluZy0+c2hyaW5rX2ZhY3RvcgorKwkJCSAgICAgIDogKHRhYmxlLT5uX2J1Y2tldHMgKiB0dW5pbmctPnNocmlua19mYWN0b3IKKysJCQkJICogdHVuaW5nLT5ncm93dGhfdGhyZXNob2xkKSk7CisrCisrCSAgICAgIGhhc2hfcmVoYXNoICh0YWJsZSwgY2FuZGlkYXRlKTsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrICByZXR1cm4gZGF0YTsKKyt9CisrCisrLyogVGVzdGluZy4gICovCisrCisrI2lmIFRFU1RJTkcKKysKKyt2b2lkCisraGFzaF9wcmludCAoY29uc3QgSGFzaF90YWJsZSAqdGFibGUpCisreworKyAgc3RydWN0IGhhc2hfZW50cnkgKmJ1Y2tldDsKKysKKysgIGZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldDsgYnVja2V0IDwgdGFibGUtPmJ1Y2tldF9saW1pdDsgYnVja2V0KyspCisrICAgIHsKKysgICAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqY3Vyc29yOworKworKyAgICAgIGlmIChidWNrZXQpCisrCXByaW50ZiAoIiVkOlxuIiwgYnVja2V0IC0gdGFibGUtPmJ1Y2tldCk7CisrCisrICAgICAgZm9yIChjdXJzb3IgPSBidWNrZXQ7IGN1cnNvcjsgY3Vyc29yID0gY3Vyc29yLT5uZXh0KQorKwl7CisrCSAgY2hhciAqcyA9IChjaGFyICopIGN1cnNvci0+ZGF0YTsKKysJICAvKiBGSVhNRSAqLworKwkgIGlmIChzKQorKwkgICAgcHJpbnRmICgiICAlc1xuIiwgcyk7CisrCX0KKysgICAgfQorK30KKysKKysjZW5kaWYgLyogVEVTVElORyAqLworLS0tIHBhdGNoLTIuNS45Lm9yaWcvaGFzaC5oCisrKysgcGF0Y2gtMi41LjkvaGFzaC5oCitAQCAtMCwwICsxLDkzIEBACisrLyogaGFzaCAtIGhhc2hpbmcgdGFibGUgcHJvY2Vzc2luZy4KKysgICBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrICAgV3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGFzY2VuZC5jb20+LCAxOTk4LgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisrICAgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisrICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCisrCisrLyogQSBnZW5lcmljIGhhc2ggdGFibGUgcGFja2FnZS4gICovCisrCisrLyogTWFrZSBzdXJlIFVTRV9PQlNUQUNLIGlzIGRlZmluZWQgdG8gMSBpZiB5b3Ugd2FudCB0aGUgYWxsb2NhdG9yIHRvIHVzZQorKyAgIG9ic3RhY2tzIGluc3RlYWQgb2YgbWFsbG9jLCBhbmQgcmVjb21waWxlIGBoYXNoLmMnIHdpdGggc2FtZSBzZXR0aW5nLiAgKi8KKysKKysjaWZuZGVmIEhBU0hfSF8KKysjIGRlZmluZSBIQVNIX0hfCisrCisrIyBpZm5kZWYgUEFSQU1TCisrIyAgaWYgUFJPVE9UWVBFUyB8fCBfX1NURENfXworKyMgICBkZWZpbmUgUEFSQU1TKEFyZ3MpIEFyZ3MKKysjICBlbHNlCisrIyAgIGRlZmluZSBQQVJBTVMoQXJncykgKCkKKysjICBlbmRpZgorKyMgZW5kaWYKKysKKyt0eXBlZGVmIHVuc2lnbmVkICgqSGFzaF9oYXNoZXIpIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQpKTsKKyt0eXBlZGVmIGJvb2wgKCpIYXNoX2NvbXBhcmF0b3IpIFBBUkFNUyAoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisrdHlwZWRlZiB2b2lkICgqSGFzaF9kYXRhX2ZyZWVyKSBQQVJBTVMgKCh2b2lkICopKTsKKyt0eXBlZGVmIGJvb2wgKCpIYXNoX3Byb2Nlc3NvcikgUEFSQU1TICgodm9pZCAqLCB2b2lkICopKTsKKysKKytzdHJ1Y3QgaGFzaF9lbnRyeQorKyAgeworKyAgICB2b2lkICpkYXRhOworKyAgICBzdHJ1Y3QgaGFzaF9lbnRyeSAqbmV4dDsKKysgIH07CisrCisrc3RydWN0IGhhc2hfdHVuaW5nCisrICB7CisrICAgIC8qIFRoaXMgc3RydWN0dXJlIGlzIG1haW5seSB1c2VkIGZvciBgaGFzaF9pbml0aWFsaXplJywgc2VlIHRoZSBibG9jaworKyAgICAgICBkb2N1bWVudGF0aW9uIG9mIGBoYXNoX3Jlc2V0X3R1bmluZycgZm9yIG1vcmUgY29tcGxldGUgY29tbWVudHMuICAqLworKworKyAgICBmbG9hdCBzaHJpbmtfdGhyZXNob2xkOwkvKiByYXRpbyBvZiB1c2VkIGJ1Y2tldHMgdG8gdHJpZ2dlciBhIHNocmluayAqLworKyAgICBmbG9hdCBzaHJpbmtfZmFjdG9yOwkvKiByYXRpbyBvZiBuZXcgc21hbGxlciBzaXplIHRvIG9yaWdpbmFsIHNpemUgKi8KKysgICAgZmxvYXQgZ3Jvd3RoX3RocmVzaG9sZDsJLyogcmF0aW8gb2YgdXNlZCBidWNrZXRzIHRvIHRyaWdnZXIgYSBncm93dGggKi8KKysgICAgZmxvYXQgZ3Jvd3RoX2ZhY3RvcjsJLyogcmF0aW8gb2YgbmV3IGJpZ2dlciBzaXplIHRvIG9yaWdpbmFsIHNpemUgKi8KKysgICAgYm9vbCBpc19uX2J1Y2tldHM7CQkvKiBpZiBDQU5ESURBVEUgcmVhbGx5IG1lYW5zIHRhYmxlIHNpemUgKi8KKysgIH07CisrCisrdHlwZWRlZiBzdHJ1Y3QgaGFzaF90dW5pbmcgSGFzaF90dW5pbmc7CisrCisrc3RydWN0IGhhc2hfdGFibGU7CisrCisrdHlwZWRlZiBzdHJ1Y3QgaGFzaF90YWJsZSBIYXNoX3RhYmxlOworKworKy8qIEluZm9ybWF0aW9uIGFuZCBsb29rdXAuICAqLworK3Vuc2lnbmVkIGhhc2hfZ2V0X25fYnVja2V0cyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9uX2J1Y2tldHNfdXNlZCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt1bnNpZ25lZCBoYXNoX2dldF9uX2VudHJpZXMgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7CisrdW5zaWduZWQgaGFzaF9nZXRfbWF4X2J1Y2tldF9sZW5ndGggUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqKSk7CisrYm9vbCBoYXNoX3RhYmxlX29rIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKikpOworK3ZvaWQgaGFzaF9wcmludF9zdGF0aXN0aWNzIFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgRklMRSAqKSk7Cisrdm9pZCAqaGFzaF9sb29rdXAgUEFSQU1TICgoY29uc3QgSGFzaF90YWJsZSAqLCBjb25zdCB2b2lkICopKTsKKysKKysvKiBXYWxraW5nLiAgKi8KKyt2b2lkICpoYXNoX2dldF9maXJzdCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICopKTsKKyt2b2lkICpoYXNoX2dldF9uZXh0IFBBUkFNUyAoKGNvbnN0IEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7CisrdW5zaWduZWQgaGFzaF9nZXRfZW50cmllcyBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIHZvaWQgKiosIHVuc2lnbmVkKSk7CisrdW5zaWduZWQgaGFzaF9kb19mb3JfZWFjaCBQQVJBTVMgKChjb25zdCBIYXNoX3RhYmxlICosIEhhc2hfcHJvY2Vzc29yLCB2b2lkICopKTsKKysKKysvKiBBbGxvY2F0aW9uIGFuZCBjbGVhbi11cC4gICovCisrdW5zaWduZWQgaGFzaF9zdHJpbmcgUEFSQU1TICgoY29uc3QgY2hhciAqLCB1bnNpZ25lZCkpOworK3ZvaWQgaGFzaF9yZXNldF90dW5pbmcgUEFSQU1TICgoSGFzaF90dW5pbmcgKikpOworK0hhc2hfdGFibGUgKmhhc2hfaW5pdGlhbGl6ZSBQQVJBTVMgKCh1bnNpZ25lZCwgY29uc3QgSGFzaF90dW5pbmcgKiwKKysJCQkJICAgICBIYXNoX2hhc2hlciwgSGFzaF9jb21wYXJhdG9yLAorKwkJCQkgICAgIEhhc2hfZGF0YV9mcmVlcikpOworK3ZvaWQgaGFzaF9jbGVhciBQQVJBTVMgKChIYXNoX3RhYmxlICopKTsKKyt2b2lkIGhhc2hfZnJlZSBQQVJBTVMgKChIYXNoX3RhYmxlICopKTsKKysKKysvKiBJbnNlcnRpb24gYW5kIGRlbGV0aW9uLiAgKi8KKytib29sIGhhc2hfcmVoYXNoIFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgdW5zaWduZWQpKTsKKyt2b2lkICpoYXNoX2luc2VydCBQQVJBTVMgKChIYXNoX3RhYmxlICosIGNvbnN0IHZvaWQgKikpOworK3ZvaWQgKmhhc2hfZGVsZXRlIFBBUkFNUyAoKEhhc2hfdGFibGUgKiwgY29uc3Qgdm9pZCAqKSk7CisrCisrI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvZ2xvYmFsLXJlamVjdC1maWxlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI3Y2E3OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9nbG9iYWwtcmVqZWN0LWZpbGUuZGlmZgpAQCAtMCwwICsxLDIwMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5tYW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLm1hbgorKysrIHBhdGNoLTIuNS45L3BhdGNoLm1hbgorQEAgLTUyMCw2ICs1MjAsMTUgQEAgZmlsZS4KKyBcZkJcKj1yZWplY3RcLXVuaWZpZWRcZlAKKyBQcm9kdWNlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiBUaGUgZGVmYXVsdCBpcyB0byBwcm9kdWNlIGNvbnRleHQgdHlwZSByZWplY3QgZmlsZXMuCisgLlRQCisrLkJJIFwqPWdsb2JhbFwtcmVqZWN0XC1maWxlPSByZWplY3RmaWxlCisrUHV0IGFsbCByZWplY3RzIGludG8KKysuSSByZWplY3RmaWxlCisraW5zdGVhZCBvZiBjcmVhdGluZyBzZXBhcmF0ZSByZWplY3QgZmlsZXMgZm9yIGFsbCBmaWxlcyB0aGF0IGhhdmUgcmVqZWN0cy4gVGhlCisrLkkgcmVqZWN0ZmlsZQorK3dpbGwgY29udGFpbiBoZWFkZXJzIHRoYXQgaWRlbnRpZnkgd2hpY2ggZmlsZSBlYWNoIHJlamVjdCByZWZlcnMgdG8uIE5vdGUgdGhhdAorK3RoZSBnbG9iYWwgcmVqZWN0IGZpbGUgaXMgY3JlYXRlZCBldmVuIGlmIFwtXC1kcnlcLXJ1biBpcyBzcGVjaWZpZWQgKHdoaWxlCisrbm9uLWdsb2JhbCByZWplY3QgZmlsZXMgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgd2l0aG91dCBcLVwtZHJ5XC1ydW4pLgorKy5UUAorIFxmQlwtUlxmUCAgb3IgIFxmQlwqPXJldmVyc2VcZlAKKyBBc3N1bWUgdGhhdCB0aGlzIHBhdGNoIHdhcyBjcmVhdGVkIHdpdGggdGhlIG9sZCBhbmQgbmV3IGZpbGVzIHN3YXBwZWQuCisgKFllcywgSSdtIGFmcmFpZCB0aGF0IGRvZXMgaGFwcGVuIG9jY2FzaW9uYWxseSwgaHVtYW4gbmF0dXJlIGJlaW5nIHdoYXQgaXQKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wYXRjaC5jCisrKysgcGF0Y2gtMi41LjkvcGF0Y2guYworQEAgLTY3LDYgKzY3LDcgQEAgc3RhdGljIGJvb2wgc2ltaWxhciAoY2hhciBjb25zdCAqLCBzaXplXworIHN0YXRpYyBib29sIHNwZXdfb3V0cHV0IChzdHJ1Y3Qgb3V0c3RhdGUgKik7Cisgc3RhdGljIGNoYXIgY29uc3QgKm1ha2VfdGVtcCAoY2hhcik7Cisgc3RhdGljIGludCBudW1lcmljX3N0cmluZyAoY2hhciBjb25zdCAqLCBib29sLCBjaGFyIGNvbnN0ICopOworK3N0YXRpYyB2b2lkIHJlamVjdF9oZWFkZXIgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKyBzdGF0aWMgdm9pZCBhYm9ydF9odW5rICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lkKTsKKyBzdGF0aWMgdm9pZCBnZXRfc29tZV9zd2l0Y2hlcyAodm9pZCk7CitAQCAtOTgsNiArOTksNyBAQCBzdGF0aWMgaW50IEFyZ2M7Cisgc3RhdGljIGNoYXIgKiBjb25zdCAqQXJndjsKKyAKKyBzdGF0aWMgRklMRSAqcmVqZnA7ICAvKiByZWplY3QgZmlsZSBwb2ludGVyICovCisrc3RhdGljIGNoYXIgKmdsb2JhbF9yZWplY3Q7CisgCisgc3RhdGljIGNoYXIgY29uc3QgKnBhdGNobmFtZTsKKyBzdGF0aWMgY2hhciAqcmVqbmFtZTsKK0BAIC0xNzIsNiArMTc0LDEwIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgLyogTWFrZSBzdXJlIHdlIGNsZWFuIHVwIGluIGNhc2Ugb2YgZGlzYXN0ZXIuICAqLworICAgICBzZXRfc2lnbmFscyAoZmFsc2UpOworIAorKyAgICAvKiBpbml0aWFsaXplIGdsb2JhbCByZWplY3QgZmlsZSAqLworKyAgICBpZiAoZ2xvYmFsX3JlamVjdCkKKysgICAgICBpbml0X3JlamVjdCAoKTsKKysKKyAgICAgZm9yICgKKyAJb3Blbl9wYXRjaF9maWxlIChwYXRjaG5hbWUpOworIAl0aGVyZV9pc19hbm90aGVyX3BhdGNoKCk7CitAQCAtMjA4LDggKzIxNCw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgIGluaXRfb3V0cHV0IChUTVBPVVROQU1FLCBleGNsdXNpdmUsICZvdXRzdGF0ZSk7CisgCSAgfQorIAorLQkvKiBpbml0aWFsaXplIHJlamVjdCBmaWxlICovCistCWluaXRfcmVqZWN0ICgpOworKwkvKiBpbml0aWFsaXplIHBlci1wYXRjaCByZWplY3QgZmlsZSAqLworKwlpZiAoIWdsb2JhbF9yZWplY3QpCisrCSAgaW5pdF9yZWplY3QgKCk7CisgCisgCS8qIGZpbmQgb3V0IHdoZXJlIGFsbCB0aGUgbGluZXMgYXJlICovCisgCWlmICghc2tpcF9yZXN0X29mX3BhdGNoKQorQEAgLTI3OCw2ICsyODUsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCisgCSAgICBuZXd3aGVyZSA9IHBjaF9uZXdmaXJzdCgpICsgbGFzdF9vZmZzZXQ7CisgCSAgICBpZiAoc2tpcF9yZXN0X29mX3BhdGNoKSB7CisrCQlpZiAoIWZhaWxlZCkKKysJCSAgcmVqZWN0X2hlYWRlcihvdXRuYW1lKTsKKyAJCWFib3J0X2h1bmsoKTsKKyAJCWZhaWxlZCsrOworIAkJaWYgKHZlcmJvc2l0eSA9PSBWRVJCT1NFKQorQEAgLTI5Miw2ICszMDEsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgIHNheSAoIlBhdGNoIGF0dGVtcHRlZCB0byBjcmVhdGUgZmlsZSAlcywgd2hpY2ggYWxyZWFkeSBleGlzdHMuXG4iLAorIAkJICAgICAgIHF1b3RlYXJnIChpbm5hbWUpKTsKKyAKKysJCWlmICghZmFpbGVkKQorKwkJICByZWplY3RfaGVhZGVyKG91dG5hbWUpOworIAkJYWJvcnRfaHVuaygpOworIAkJZmFpbGVkKys7CisgCQlpZiAodmVyYm9zaXR5ICE9IFNJTEVOVCkKK0BAIC0yOTksNiArMzEwLDggQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgICAgIGZvcm1hdF9saW5lbnVtIChudW1idWYsIG5ld3doZXJlKSk7CisgCSAgICB9CisgCSAgICBlbHNlIGlmICghIGFwcGx5X2h1bmsgKCZvdXRzdGF0ZSwgd2hlcmUpKSB7CisrCQlpZiAoIWZhaWxlZCkKKysJCSAgcmVqZWN0X2hlYWRlcihvdXRuYW1lKTsKKyAJCWFib3J0X2h1bmsgKCk7CisgCQlmYWlsZWQrKzsKKyAJCWlmICh2ZXJib3NpdHkgIT0gU0lMRU5UKQorQEAgLTMzMiw3ICszNDUsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkgICAgZmNsb3NlIChvdXRzdGF0ZS5vZnApOworIAkJICAgIG91dHN0YXRlLm9mcCA9IDA7CisgCQkgIH0KKy0JCWZjbG9zZSAocmVqZnApOworKwkJaWYgKCFnbG9iYWxfcmVqZWN0KQorKwkJICBmY2xvc2UgKHJlamZwKTsKKyAJCWNvbnRpbnVlOworIAkgICAgICB9CisgCitAQCAtNDEyLDEzICs0MjYsMTMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgfQorICAgICAgIH0KKyAgICAgICBpZiAoZGlmZl90eXBlICE9IEVEX0RJRkYpIHsKKy0JaWYgKGZjbG9zZSAocmVqZnApICE9IDApCisrCWlmICghZ2xvYmFsX3JlamVjdCAmJiBmY2xvc2UgKHJlamZwKSAhPSAwKQorIAkgICAgd3JpdGVfZmF0YWwgKCk7CisgCWlmIChmYWlsZWQpIHsKKyAJICAgIHNvbWVmYWlsZWQgPSB0cnVlOworIAkgICAgc2F5ICgiJWQgb3V0IG9mICVkIGh1bmslcyAlcyIsIGZhaWxlZCwgaHVuaywgInMiICsgKGh1bmsgPT0gMSksCisgCQkgc2tpcF9yZXN0X29mX3BhdGNoID8gImlnbm9yZWQiIDogIkZBSUxFRCIpOworLQkgICAgaWYgKG91dG5hbWUpIHsKKysJICAgIGlmICghZ2xvYmFsX3JlamVjdCAmJiBvdXRuYW1lKSB7CisgCQljaGFyICpyZWogPSByZWpuYW1lOworIAkJaWYgKCFyZWpuYW1lKSB7CisgCQkgICAgcmVqID0geG1hbGxvYyAoc3RybGVuIChvdXRuYW1lKSArIDUpOworQEAgLTQ0NSw2ICs0NTksMjAgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgIH0KKyAgICAgICBzZXRfc2lnbmFscyAodHJ1ZSk7CisgICAgIH0KKysgICAgaWYgKGdsb2JhbF9yZWplY3QpCisrICAgICAgeworKwlpZiAoZmNsb3NlIChyZWpmcCkgIT0gMCkKKysJICB3cml0ZV9mYXRhbCAoKTsKKysJaWYgKHNvbWVmYWlsZWQpCisrCSAgeworKwkgIHNheSAoIiAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlICVzXG4iLCBxdW90ZWFyZyAoZ2xvYmFsX3JlamVjdCkpOworKwkgIC8qaWYgKCEgZHJ5X3J1bikKKysJICAgIHsqLworKwkgICAgICBtb3ZlX2ZpbGUgKFRNUFJFSk5BTUUsICZUTVBSRUpOQU1FX25lZWRzX3JlbW92YWwsCisrCQkJIGdsb2JhbF9yZWplY3QsIDA2NDQsIGZhbHNlKTsKKysJICAgIC8qfSovCisrCSAgfQorKyAgICAgIH0KKyAgICAgaWYgKG91dHN0YXRlLm9mcCAmJiAoZmVycm9yIChvdXRzdGF0ZS5vZnApIHx8IGZjbG9zZSAob3V0c3RhdGUub2ZwKSAhPSAwKSkKKyAgICAgICB3cml0ZV9mYXRhbCAoKTsKKyAgICAgY2xlYW51cCAoKTsKK0BAIC01MjMsNiArNTUxLDcgQEAgc3RhdGljIHN0cnVjdCBvcHRpb24gY29uc3QgbG9uZ29wdHNbXSA9CisgICB7InBvc2l4Iiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgN30sCisgICB7InF1b3Rpbmctc3R5bGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA4fSwKKyAgIHsidW5pZmllZC1yZWplY3QtZmlsZXMiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA5fSwKKysgIHsiZ2xvYmFsLXJlamVjdC1maWxlIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgMTB9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorIH07CisgCitAQCAtNTgyLDYgKzYxMSw3IEBAIHN0YXRpYyBjaGFyIGNvbnN0ICpjb25zdCBvcHRpb25faGVscFtdID0KKyAiICAtLWRyeS1ydW4gIERvIG5vdCBhY3R1YWxseSBjaGFuZ2UgYW55IGZpbGVzOyBqdXN0IHByaW50IHdoYXQgd291bGQgaGFwcGVuLiIsCisgIiAgLS1wb3NpeCAgQ29uZm9ybSB0byB0aGUgUE9TSVggc3RhbmRhcmQuIiwKKyAiICAtLXVuaWZpZWQtcmVqZWN0LWZpbGVzICBDcmVhdGUgdW5pZmllZCByZWplY3QgZmlsZXMuIiwKKysiICAtLWdsb2JhbC1yZWplY3QtZmlsZT1maWxlICBQdXQgYWxsIHJlamVjdHMgaW50byBvbmUgZmlsZS4iLAorICIiLAorICIgIC1kIERJUiAgLS1kaXJlY3Rvcnk9RElSICBDaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIERJUiBmaXJzdC4iLAorICNpZiBIQVZFX1NFVE1PREVfRE9TCitAQCAtNzg0LDYgKzgxNCw5IEBAIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKQorIAkgICAgY2FzZSBDSEFSX01BWCArIDk6CisgCQl1bmlmaWVkX3JlamVjdF9maWxlcyA9IHRydWU7CisgCQlicmVhazsKKysJICAgIGNhc2UgQ0hBUl9NQVggKyAxMDoKKysJCWdsb2JhbF9yZWplY3QgPSBzYXZlc3RyIChvcHRhcmcpOworKwkJYnJlYWs7CisgCSAgICBkZWZhdWx0OgorIAkJdXNhZ2UgKHN0ZGVyciwgMik7CisgCX0KK0BAIC05MzMsNiArOTY2LDM3IEBAIGxvY2F0ZV9odW5rIChMSU5FTlVNIGZ1enopCisgfQorIAorIHN0YXRpYyBjaGFyICoKKytmb3JtYXRfdGltZXN0YW1wIChjaGFyIHRpbWVidWZbMzddLCBib29sIHdoaWNoKQorK3sKKysgIHRpbWVfdCB0cyA9IHBjaF90aW1lc3RhbXAod2hpY2gpOworKyAgaWYgKHRzICE9IC0xKQorKyAgICB7CisrICAgICAgc3RydWN0IHRtICp0bSA9IGxvY2FsdGltZSgmdHMpOworKyAgICAgIHN0cmZ0aW1lKHRpbWVidWYsIDM3LCAiXHQlWS0lbS0lZCAlSDolTTolUy4wMDAwMDAwMDAgJXoiLCB0bSk7CisrICAgIH0KKysgIGVsc2UKKysgICAgdGltZWJ1ZlswXSA9IDA7CisrICByZXR1cm4gdGltZWJ1ZjsKKyt9CisrCisrLyogV3JpdGUgYSBoZWFkZXIgaW4gYSByZWplY3QgZmlsZSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGh1bmtzLiAqLworK3N0YXRpYyB2b2lkCisrcmVqZWN0X2hlYWRlciAoY29uc3QgY2hhciAqb3V0bmFtZSkKKyt7CisrICAgIGNoYXIgdGltZWJ1ZjBbMzddLCB0aW1lYnVmMVszN107CisrICAgIGlmICghZ2xvYmFsX3JlamVjdCkKKysgICAgICByZXR1cm47CisrICAgIGlmIChkaWZmX3R5cGUgPT0gVU5JX0RJRkYpCisrCWZwcmludGYocmVqZnAsICItLS0gJXMub3JpZyVzXG4rKysgJXMlc1xuIiwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjAsIHJldmVyc2UpLAorKwkJb3V0bmFtZSwgZm9ybWF0X3RpbWVzdGFtcCh0aW1lYnVmMSwgIXJldmVyc2UpKTsKKysgICAgZWxzZQorKwlmcHJpbnRmKHJlamZwLCAiKioqICVzLm9yaWclc1xuLS0tICVzJXNcbiIsCisrCQlvdXRuYW1lLCBmb3JtYXRfdGltZXN0YW1wKHRpbWVidWYwLCByZXZlcnNlKSwKKysJCW91dG5hbWUsIGZvcm1hdF90aW1lc3RhbXAodGltZWJ1ZjEsICFyZXZlcnNlKSk7CisrfQorKworK3N0YXRpYyBjaGFyICoKKyBmb3JtYXRfbGluZXJhbmdlIChjaGFyIHJhbmdlYnVmW0xJTkVOVU1fTEVOR1RIX0JPVU5EKjIgKyAyXSwKKyAJCSAgTElORU5VTSBmaXJzdCwgTElORU5VTSBsaW5lcykKKyB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC9pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNTRlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitJbmRleDogcGF0Y2gtMi41LjQvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuNC5vcmlnL01ha2VmaWxlLmluCTIwMDUtMDMtMDkgMDc6MjM6NTQuNzc5MzExODI0IC0wNTAwCisrKysgcGF0Y2gtMi41LjQvTWFrZWZpbGUuaW4JMjAwNS0wMy0wOSAwNzoyNjowOS42MTY4MTM0MDggLTA1MDAKK0BAIC00MywxMCArNDMsMTEgQEAKKyBQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorIFBBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACisgCisrREVTVERJUiA9CisgcHJlZml4ID0gQHByZWZpeEAKKyBleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKKyAKKy1iaW5kaXIgPSAkKGV4ZWNfcHJlZml4KS9iaW4KKytiaW5kaXIgPSBAYmluZGlyQAorIAorICMgV2hlcmUgdG8gcHV0IHRoZSBtYW51YWwgcGFnZXMuCisgbWFuZGlyID0gQG1hbmRpckAKK0BAIC0xMTIsMTggKzExMywxOCBAQAorIAkkKENDKSAtbyAkQCAkKENGTEFHUykgJChMREZMQUdTKSAkKE9CSlMpICQoTElCUykKKyAKKyBpbnN0YWxsOjogYWxsIGluc3RhbGxkaXJzCistCSQoSU5TVEFMTF9QUk9HUkFNKSBwYXRjaCQoRVhFRVhUKSAkKGJpbmRpcikvJChwYXRjaF9uYW1lKSQoRVhFRVhUKQorLQktJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wYXRjaC5tYW4gJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorKwkkKElOU1RBTExfUFJPR1JBTSkgcGF0Y2gkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS8kKHBhdGNoX25hbWUpJChFWEVFWFQpCisrCS0kKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BhdGNoLm1hbiAkKERFU1RESVIpJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorIAorIGluc3RhbGxkaXJzOjoKKy0JJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChiaW5kaXIpICQobWFuMWRpcikKKysJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKSAkKERFU1RESVIpJChtYW4xZGlyKQorIAorIGluc3RhbGwtc3RyaXA6OgorIAkkKE1BS0UpIElOU1RBTExfUFJPR1JBTT0nJChJTlNUQUxMX1BST0dSQU0pIC1zJyBpbnN0YWxsCisgCisgdW5pbnN0YWxsOjoKKy0Jcm0gLWYgJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKy0Jcm0gLWYgJChtYW4xZGlyKS8kKHBhdGNoX25hbWUpJChtYW4xZXh0KQorKwlybSAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQocGF0Y2hfbmFtZSkkKEVYRUVYVCkKKysJcm0gLWYgJChERVNURElSKSQobWFuMWRpcikvJChwYXRjaF9uYW1lKSQobWFuMWV4dCkKKyAKKyBNYWtlZmlsZTogTWFrZWZpbGUuaW4gJChDT05GSUdfU1RBVFVTKQorIAkkKFNIRUxMKSAkKENPTkZJR19TVEFUVVMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvdW5pZmllZC1yZWplY3QtZmlsZXMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXRjaC9wYXRjaC91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNTkyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2gvdW5pZmllZC1yZWplY3QtZmlsZXMuZGlmZgpAQCAtMCwwICsxLDMwNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK0dlbmVyYXRlIHVuaWZpZWQgZGlmZiBzdHlsZSByZWplY3QgZmlsZXMuIEFsc28gaW5jbHVkZSB0aGUgQyBmdW5jdGlvbiBuYW1lcworaW4gcmVqZWN0IGZpbGVzIHdoZW5ldmVyIHBvc3NpYmxlLgorCisJJCBjYXQgPiBmLm9yaWcKKwk8IGEoKSB7CisJPCAyCisJPCAzCisJPAorCTwgNQorCTwgNgorCTwgfQorCisJJCBzZWQgLWUgJ3MvNS81YS8nIGYub3JpZyA+IGYKKwkkIGRpZmYgLVUyIC1wIGYub3JpZyBmID4gZi5kaWZmCisJJCBzZWQgLWUgJ3MvNS81YS8nIC1lICdzLzYvNngvJyBmLm9yaWcgPiBmCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIC0tcmVqZWN0LXVuaWZpZWQgPCBmLmRpZmYKKwk+IDEgb3V0IG9mIDEgaHVuayBGQUlMRUQgLS0gc2F2aW5nIHJlamVjdHMgdG8gZmlsZSBmLnJlagorCisJJCBjYXQgZi5yZWoKKwk+IEBAIC0zLDUgKzMsNSBAQCBhKCkgeworCT4gIDMKKwk+ICAKKwk+IC01CisJPiArNWEKKwk+ICA2CisJPiAgfQorCisJJCAuL3BhdGNoIC1GMCAtcyAtLW5vLWJhY2t1cC1pZi1taXNtYXRjaCBmIDwgZi5kaWZmCisJPiAxIG91dCBvZiAxIGh1bmsgRkFJTEVEIC0tIHNhdmluZyByZWplY3RzIHRvIGZpbGUgZi5yZWoKKworCSQgY2F0IGYucmVqCisJPiAqKioqKioqKioqKioqKiogYSgpIHsKKwk+ICoqKiAzLDcgKioqKgorCT4gICAzCisJPiAgIAorCT4gLSA1CisJPiAgIDYKKwk+ICAgfQorCT4gLS0tIDMsNyAtLS0tCisJPiAgIDMKKwk+ICAgCisJPiArIDVhCisJPiAgIDYKKwk+ICAgfQorCisJJCBkaWZmIC1OdSAtcCAvZGV2L251bGwgZi5vcmlnID4gZjIuZGlmZgorCSQgLi9wYXRjaCAtRjAgLXMgLS1uby1iYWNrdXAtaWYtbWlzbWF0Y2ggZiAtLXJlamVjdC11bmlmaWVkIDwgZjIuZGlmZgorCT4gUGF0Y2ggYXR0ZW1wdGVkIHRvIGNyZWF0ZSBmaWxlIGYsIHdoaWNoIGFscmVhZHkgZXhpc3RzLgorCT4gMSBvdXQgb2YgMSBodW5rIEZBSUxFRCAtLSBzYXZpbmcgcmVqZWN0cyB0byBmaWxlIGYucmVqCisKKwkkIGNhdCBmLnJlagorCT4gQEAgLTAsMCArMSw3IEBACisJPiArYSgpIHsKKwk+ICsyCisJPiArMworCT4gKworCT4gKzUKKwk+ICs2CisJPiArfQorCisJJCBybSAtZiBmIGYub3JpZyBmLnJlaiBmLmRpZmYgZjIuZGlmZgorCitJbmRleDogcGF0Y2gtMi41LjkvcGNoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BjaC5jCisrKysgcGF0Y2gtMi41LjkvcGNoLmMKK0BAIC02OCw2ICs2OCw3IEBAIHN0YXRpYyBMSU5FTlVNIHBfc2xpbmU7CQkJLyogYW5kIHRoZSBsaW4KKyBzdGF0aWMgTElORU5VTSBwX2h1bmtfYmVnOwkJLyogbGluZSBudW1iZXIgb2YgY3VycmVudCBodW5rICovCisgc3RhdGljIExJTkVOVU0gcF9lZmFrZSA9IC0xOwkJLyogZW5kIG9mIGZha2VkIHVwIGxpbmVzLS1kb24ndCBmcmVlICovCisgc3RhdGljIExJTkVOVU0gcF9iZmFrZSA9IC0xOwkJLyogYmVnIG9mIGZha2VkIHVwIGxpbmVzICovCisrc3RhdGljIGNoYXIgKnBfY19mdW5jdGlvbjsJCS8qIHRoZSBDIGZ1bmN0aW9uIGEgaHVuayBpcyBpbiAqLworIAorIGVudW0gbmFtZXR5cGUgeyBPTEQsIE5FVywgSU5ERVgsIE5PTkUgfTsKKyAKK0BAIC04ODgsNiArODg5LDE5IEBAIGFub3RoZXJfaHVuayAoZW51bSBkaWZmIGRpZmZ0eXBlLCBib29sIHIKKyAJICAgIG5leHRfaW50dWl0X2F0KGxpbmVfYmVnaW5uaW5nLHBfaW5wdXRfbGluZSk7CisgCSAgICByZXR1cm4gY2hhcnNfcmVhZCA9PSAoc2l6ZV90KSAtMSA/IC0xIDogMDsKKyAJfQorKwlzID0gYnVmOworKwl3aGlsZSAoKnMgPT0gJyonKQorKwkgICAgcysrOworKwlpZiAoKnMgPT0gJyAnKQorKwkgIHsKKysJICAgIHBfY19mdW5jdGlvbiA9IHM7CisrCSAgICB3aGlsZSAoKnMgIT0gJ1xuJykKKysJCXMrKzsKKysJICAgICpzID0gJ1wwJzsKKysJICAgIHBfY19mdW5jdGlvbiA9IHNhdmVzdHIgKHBfY19mdW5jdGlvbik7CisrCSAgfQorKwllbHNlCisrCSAgICBwX2NfZnVuY3Rpb24gPSBOVUxMOworIAlwX2h1bmtfYmVnID0gcF9pbnB1dF9saW5lICsgMTsKKyAJd2hpbGUgKHBfZW5kIDwgcF9tYXgpIHsKKyAJICAgIGNoYXJzX3JlYWQgPSBnZXRfbGluZSAoKTsKK0BAIC0xMjc3LDggKzEyOTEsMTggQEAgYW5vdGhlcl9odW5rIChlbnVtIGRpZmYgZGlmZnR5cGUsIGJvb2wgcgorIAllbHNlCisgCSAgICBwX3JlcGxfbGluZXMgPSAxOworIAlpZiAoKnMgPT0gJyAnKSBzKys7CistCWlmICgqcyAhPSAnQCcpCisrCWlmICgqcysrICE9ICdAJykKKyAJICAgIG1hbGZvcm1lZCAoKTsKKysJaWYgKCpzKysgPT0gJ0AnICYmICpzID09ICcgJyAmJiAqcyAhPSAnXDAnKQorKwkgIHsKKysJICAgIHBfY19mdW5jdGlvbiA9IHM7CisrCSAgICB3aGlsZSAoKnMgIT0gJ1xuJykKKysJCXMrKzsKKysJICAgICpzID0gJ1wwJzsKKysJICAgIHBfY19mdW5jdGlvbiA9IHNhdmVzdHIgKHBfY19mdW5jdGlvbik7CisrCSAgfQorKwllbHNlCisrCSAgICBwX2NfZnVuY3Rpb24gPSBOVUxMOworIAlpZiAoIXBfcHRybl9saW5lcykKKyAJICAgIHBfZmlyc3QrKzsJCQkvKiBkbyBhcHBlbmQgcmF0aGVyIHRoYW4gaW5zZXJ0ICovCisgCWlmICghcF9yZXBsX2xpbmVzKQorQEAgLTE4ODQsNiArMTkwOCwxMiBAQCBwY2hfaHVua19iZWcgKHZvaWQpCisgICAgIHJldHVybiBwX2h1bmtfYmVnOworIH0KKyAKKytjaGFyIGNvbnN0ICoKKytwY2hfY19mdW5jdGlvbiAodm9pZCkKKyt7CisrICAgIHJldHVybiBwX2NfZnVuY3Rpb247CisrfQorKworIC8qIElzIHRoZSBuZXdsaW5lLXRlcm1pbmF0ZWQgbGluZSBhIHZhbGlkIGBlZCcgY29tbWFuZCBmb3IgcGF0Y2gKKyAgICBpbnB1dD8gIElmIHNvLCByZXR1cm4gdGhlIGNvbW1hbmQgY2hhcmFjdGVyOyBpZiBub3QsIHJldHVybiAwLgorICAgIFRoaXMgYWNjZXB0cyBhY2NlcHRzIGp1c3QgYSBzdWJzZXQgb2YgdGhlIHZhbGlkIGNvbW1hbmRzLCBidXQgaXQncworSW5kZXg6IHBhdGNoLTIuNS45L3BjaC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wY2guaAorKysrIHBhdGNoLTIuNS45L3BjaC5oCitAQCAtMjUsNiArMjUsNyBAQAorIExJTkVOVU0gcGNoX2VuZCAodm9pZCk7CisgTElORU5VTSBwY2hfZmlyc3QgKHZvaWQpOworIExJTkVOVU0gcGNoX2h1bmtfYmVnICh2b2lkKTsKKytjaGFyIGNvbnN0ICpwY2hfY19mdW5jdGlvbiAodm9pZCk7CisgTElORU5VTSBwY2hfbmV3Zmlyc3QgKHZvaWQpOworIExJTkVOVU0gcGNoX3ByZWZpeF9jb250ZXh0ICh2b2lkKTsKKyBMSU5FTlVNIHBjaF9wdHJuX2xpbmVzICh2b2lkKTsKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5tYW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXRjaC0yLjUuOS5vcmlnL3BhdGNoLm1hbgorKysrIHBhdGNoLTIuNS45L3BhdGNoLm1hbgorQEAgLTUxNyw2ICs1MTcsOSBAQCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisgLkIgXCYucmVqCisgZmlsZS4KKyAuVFAKKytcZkJcKj1yZWplY3RcLXVuaWZpZWRcZlAKKytQcm9kdWNlIHVuaWZpZWQgcmVqZWN0IGZpbGVzLiBUaGUgZGVmYXVsdCBpcyB0byBwcm9kdWNlIGNvbnRleHQgdHlwZSByZWplY3QgZmlsZXMuCisrLlRQCisgXGZCXC1SXGZQICBvciAgXGZCXCo9cmV2ZXJzZVxmUAorIEFzc3VtZSB0aGF0IHRoaXMgcGF0Y2ggd2FzIGNyZWF0ZWQgd2l0aCB0aGUgb2xkIGFuZCBuZXcgZmlsZXMgc3dhcHBlZC4KKyAoWWVzLCBJJ20gYWZyYWlkIHRoYXQgZG9lcyBoYXBwZW4gb2NjYXNpb25hbGx5LCBodW1hbiBuYXR1cmUgYmVpbmcgd2hhdCBpdAorSW5kZXg6IHBhdGNoLTIuNS45L2NvbW1vbi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9jb21tb24uaAorKysrIHBhdGNoLTIuNS45L2NvbW1vbi5oCitAQCAtMTQ2LDYgKzE0Niw3IEBAIFhURVJOIGludCBpbnZjOworIFhURVJOIHN0cnVjdCBzdGF0IGluc3RhdDsKKyBYVEVSTiBib29sIGRyeV9ydW47CisgWFRFUk4gYm9vbCBwb3NpeGx5X2NvcnJlY3Q7CisrWFRFUk4gYm9vbCB1bmlmaWVkX3JlamVjdF9maWxlczsKKyAKKyBYVEVSTiBjaGFyIGNvbnN0ICpvcmlncHJhZTsKKyBYVEVSTiBjaGFyIGNvbnN0ICpvcmlnYmFzZTsKK0luZGV4OiBwYXRjaC0yLjUuOS9wYXRjaC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF0Y2gtMi41Ljkub3JpZy9wYXRjaC5jCisrKysgcGF0Y2gtMi41LjkvcGF0Y2guYworQEAgLTUyMiw2ICs1MjIsNyBAQCBzdGF0aWMgc3RydWN0IG9wdGlvbiBjb25zdCBsb25nb3B0c1tdID0KKyAgIHsibm8tYmFja3VwLWlmLW1pc21hdGNoIiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgNn0sCisgICB7InBvc2l4Iiwgbm9fYXJndW1lbnQsIE5VTEwsIENIQVJfTUFYICsgN30sCisgICB7InF1b3Rpbmctc3R5bGUiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA4fSwKKysgIHsidW5pZmllZC1yZWplY3QtZmlsZXMiLCBub19hcmd1bWVudCwgTlVMTCwgQ0hBUl9NQVggKyA5fSwKKyAgIHtOVUxMLCBub19hcmd1bWVudCwgTlVMTCwgMH0KKyB9OworIAorQEAgLTU4MCw2ICs1ODEsNyBAQCBzdGF0aWMgY2hhciBjb25zdCAqY29uc3Qgb3B0aW9uX2hlbHBbXSA9CisgIiAgLS12ZXJib3NlICBPdXRwdXQgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHdvcmsgYmVpbmcgZG9uZS4iLAorICIgIC0tZHJ5LXJ1biAgRG8gbm90IGFjdHVhbGx5IGNoYW5nZSBhbnkgZmlsZXM7IGp1c3QgcHJpbnQgd2hhdCB3b3VsZCBoYXBwZW4uIiwKKyAiICAtLXBvc2l4ICBDb25mb3JtIHRvIHRoZSBQT1NJWCBzdGFuZGFyZC4iLAorKyIgIC0tdW5pZmllZC1yZWplY3QtZmlsZXMgIENyZWF0ZSB1bmlmaWVkIHJlamVjdCBmaWxlcy4iLAorICIiLAorICIgIC1kIERJUiAgLS1kaXJlY3Rvcnk9RElSICBDaGFuZ2UgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIERJUiBmaXJzdC4iLAorICNpZiBIQVZFX1NFVE1PREVfRE9TCitAQCAtNzc5LDYgKzc4MSw5IEBAIGdldF9zb21lX3N3aXRjaGVzICh2b2lkKQorIAkJCQkgICAgIChlbnVtIHF1b3Rpbmdfc3R5bGUpIGkpOworIAkJfQorIAkJYnJlYWs7CisrCSAgICBjYXNlIENIQVJfTUFYICsgOToKKysJCXVuaWZpZWRfcmVqZWN0X2ZpbGVzID0gdHJ1ZTsKKysJCWJyZWFrOworIAkgICAgZGVmYXVsdDoKKyAJCXVzYWdlIChzdGRlcnIsIDIpOworIAl9CitAQCAtOTI3LDYgKzkzMiwyNCBAQCBsb2NhdGVfaHVuayAoTElORU5VTSBmdXp6KQorICAgICByZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGNoYXIgKgorK2Zvcm1hdF9saW5lcmFuZ2UgKGNoYXIgcmFuZ2VidWZbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdLAorKwkJICBMSU5FTlVNIGZpcnN0LCBMSU5FTlVNIGxpbmVzKQorK3sKKysgICAgaWYgKGxpbmVzID09IDEpCisrICAgICAgcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYsIGZpcnN0KTsKKysgICAgZWxzZQorKyAgICAgIHsKKysJY2hhciAqcmI7CisrCXJhbmdlYnVmID0gZm9ybWF0X2xpbmVudW0gKHJhbmdlYnVmICsgTElORU5VTV9MRU5HVEhfQk9VTkQgKyAxLCBsaW5lcyk7CisrCXJiID0gcmFuZ2VidWYtMTsKKysJcmFuZ2VidWYgPSBmb3JtYXRfbGluZW51bSAocmFuZ2VidWYgLSBMSU5FTlVNX0xFTkdUSF9CT1VORCAtIDEsCisrCQkJCSAgIChsaW5lcyA+IDApID8gZmlyc3QgOiAwKTsKKysJKnJiID0gJywnOworKyAgICAgIH0KKysgICAgcmV0dXJuIHJhbmdlYnVmOworK30KKysKKyAvKiBXZSBkaWQgbm90IGZpbmQgdGhlIHBhdHRlcm4sIGR1bXAgb3V0IHRoZSBodW5rIHNvIHRoZXkgY2FuIGhhbmRsZSBpdC4gKi8KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTk0Myw4ICs5NjYsODMgQEAgYWJvcnRfaHVuayAodm9pZCkKKyAgICAgICAoaW50KSBORVdfQ09OVEVYVF9ESUZGIDw9IChpbnQpIGRpZmZfdHlwZSA/ICIgKioqKiIgOiAiIjsKKyAgICAgY2hhciBjb25zdCAqbWludXNlcyA9CisgICAgICAgKGludCkgTkVXX0NPTlRFWFRfRElGRiA8PSAoaW50KSBkaWZmX3R5cGUgPyAiIC0tLS0iIDogIiAtLS0tLSI7CisrICAgIGNoYXIgY29uc3QgKmZ1bmN0aW9uID0gcGNoX2NfZnVuY3Rpb24oKTsKKysgICAgaWYgKGZ1bmN0aW9uID09IE5VTEwpCisrCWZ1bmN0aW9uID0gIiI7CisrCisrICAgIGlmICh1bmlmaWVkX3JlamVjdF9maWxlcykKKysgICAgICB7CisrCS8qIHByb2R1Y2UgdW5pZmllZCByZWplY3QgZmlsZXMgKi8KKysJY2hhciByYW5nZWJ1ZjBbTElORU5VTV9MRU5HVEhfQk9VTkQqMiArIDJdOworKwljaGFyIHJhbmdlYnVmMVtMSU5FTlVNX0xFTkdUSF9CT1VORCoyICsgMl07CisrCUxJTkVOVU0gajsKKysKKysJLyogRmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW1vdmUgYW5kIGluc2VydCBzZWN0aW9uLiAqLworKwlmb3IgKGogPSAwOyBqIDw9IHBhdF9lbmQ7IGorKykKKysJICBpZiAocGNoX2NoYXIgKGopID09ICc9JykKKysJICAgIGJyZWFrOworKwlmb3IgKGkgPSBqKzE7IGkgPD0gcGF0X2VuZDsgaSsrKQorKwkgIGlmIChwY2hfY2hhciAoaSkgPT0gJ14nKQorKwkgICAgYnJlYWs7CisrCWlmIChwY2hfY2hhciAoMCkgIT0gJyonIHx8IGogPiBwYXRfZW5kIHx8IGkgPiBwYXRfZW5kKzEpCisrCSAgZmF0YWwgKCJpbnRlcm5hbCBlcnJvciBpbiBhYm9ydF9odW5rIik7CisrCWkgPSAxOyBqKys7CisrCisrCS8qIEBAIC1mcm9tLGxpbmVzICt0byxsaW5lcyBAQCAqLworKwlmcHJpbnRmIChyZWpmcCwgIkBAIC0lcyArJXMgQEAlc1xuIiwKKysJCSBmb3JtYXRfbGluZXJhbmdlIChyYW5nZWJ1ZjAsIG9sZGZpcnN0LCBwY2hfcHRybl9saW5lcygpKSwKKysJCSBmb3JtYXRfbGluZXJhbmdlIChyYW5nZWJ1ZjEsIG5ld2ZpcnN0LCBwY2hfcmVwbF9saW5lcygpKSwKKysJCSBmdW5jdGlvbik7CisrCisrCXdoaWxlICggICAoaSA8PSBwYXRfZW5kICYmIHBjaF9jaGFyIChpKSAhPSAnPScpCisrCSAgICAgICB8fCAoaiA8PSBwYXRfZW5kICYmIHBjaF9jaGFyIChqKSAhPSAnXicpKQorKwkgIHsKKysJICAgIGlmIChpIDw9IHBhdF9lbmQKKysJCSYmIChwY2hfY2hhciAoaSkgPT0gJy0nIHx8IHBjaF9jaGFyIChpKSA9PSAnIScpKQorKwkgICAgICB7CisrCQlmcHV0YygnLScsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChpKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZSBpZiAoaiA8PSBwYXRfZW5kCisrCQkgICAgICYmIChwY2hfY2hhciAoaikgPT0gJysnIHx8IHBjaF9jaGFyIChqKSA9PSAnIScpKQorKwkgICAgICB7CisrCQlmcHV0YygnKycsIHJlamZwKTsKKysJCXBjaF93cml0ZV9saW5lIChqKyssIHJlamZwKTsKKysJICAgICAgfQorKwkgICAgZWxzZSBpZiAoKGkgPD0gcGF0X2VuZAorKwkJICAgICAgJiYgKHBjaF9jaGFyIChpKSA9PSAnICcgfHwgcGNoX2NoYXIgKGkpID09ICdcbicpKSAmJgorKwkJICAgICAoaiA+IHBhdF9lbmQKKysJCSAgICAgIHx8IChwY2hfY2hhciAoaikgPT0gJyAnIHx8IHBjaF9jaGFyIChqKSA9PSAnXG4nKSkpCisrCSAgICAgIHsKKysJCS8qIFVubGVzcyBqIGlzIGFscmVhZHkgcGFzdCB0aGUgZW5kLCBsaW5lcyBpIGFuZCBqCisrCQkgICBtdXN0IGJlIGVxdWFsIGhlcmUuICAqLworKworKwkJaWYgKHBjaF9jaGFyIChpKSA9PSAnICcpCisrCQkgIGZwdXRjKCcgJywgcmVqZnApOworKwkJcGNoX3dyaXRlX2xpbmUgKGkrKywgcmVqZnApOworKwkJaWYgKGogPD0gcGF0X2VuZCkKKysJCSAgaisrOworKwkgICAgICB9CisrCSAgICBlbHNlIGlmICgoaiA8PSBwYXRfZW5kICYmCisrCQkgICAgIChwY2hfY2hhciAoaikgPT0gJyAnIHx8IHBjaF9jaGFyIChqKSA9PSAnXG4nKSkgJiYKKysJCSAgICAgKHBjaF9jaGFyIChpKSA9PSAnPScpKQorKwkgICAgICB7CisrCQlpZiAocGNoX2NoYXIgKGopID09ICcgJykKKysJCSAgZnB1dGMoJyAnLCByZWpmcCk7CisrCQlwY2hfd3JpdGVfbGluZSAoaisrLCByZWpmcCk7CisrCSAgICAgIH0KKysJICAgIGVsc2UKKysJICAgICAgZmF0YWwgKCJpbnRlcm5hbCBlcnJvciBpbiBhYm9ydF9odW5rIik7CisrCSAgfQorKworKwlpZiAoZmVycm9yIChyZWpmcCkpCisrCSAgd3JpdGVfZmF0YWwgKCk7CisrCXJldHVybjsKKysgICAgICB9CisgCistICAgIGZwcmludGYocmVqZnAsICIqKioqKioqKioqKioqKipcbiIpOworKyAgICAvKiBwcm9kdWNlIGNvbnRleHQgdHlwZSByZWplY3QgZmlsZXMgKi8KKysgICAKKysgICAgZnByaW50ZihyZWpmcCwgIioqKioqKioqKioqKioqKiVzXG4iLCBmdW5jdGlvbik7CisgICAgIGZvciAoaT0wOyBpPD1wYXRfZW5kOyBpKyspIHsKKyAJY2hhciBudW1idWYwW0xJTkVOVU1fTEVOR1RIX0JPVU5EICsgMV07CisgCWNoYXIgbnVtYnVmMVtMSU5FTlVNX0xFTkdUSF9CT1VORCArIDFdOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNS45LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyOWIyNDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi41LjkuYmIKQEAgLTAsMCArMSwxMiBAQAorcmVxdWlyZSBwYXRjaC5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vZGViaWFuLnBhdGNoIFwKKwkgICBmaWxlOi8vaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91bmlmaWVkLXJlamVjdC1maWxlcy5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2dsb2JhbC1yZWplY3QtZmlsZS5kaWZmICIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkYWNmYjYxODA4MmY4ZDNhMjE5NDYwMTE5M2NmODcxNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlY2I1YzY0NjlkNzMyYmNmMDFkNmVjMWFmZTllNjRmMTY2OGNhYmE1YmZkYjEwM2MyOGQ3ZjUzN2JhM2NkYjhhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNy41LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoL3BhdGNoXzIuNy41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmNmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2gvcGF0Y2hfMi43LjUuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBwYXRjaC5pbmMKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWQ0ZDU2NzRlZjQ1NDNiNGViNDYzZGIxNjg4ODZkYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzQzNmY1YTE5ZjkzYzNjYTgzMTUzY2U5YzVjYmU0ODQ3ZTk3YzVkOTU2ZTU3YTIyMDEyMWU3NDFmNmU3OTY4ZiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK2FjcGF0aHMgPSAiLUkgJHtTfS9tNCAiCisKK1BBQ0tBR0VDT05GSUcgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneGF0dHInLCAneGF0dHInLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4YXR0cl0gPSAiLS1lbmFibGUteGF0dHIsLS1kaXNhYmxlLXhhdHRyLGF0dHIsIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF0Y2hlbGYvcGF0Y2hlbGZfMC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI4N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BhdGNoZWxmL3BhdGNoZWxmXzAuOC5iYgpAQCAtMCwwICsxLDEyIEBACitTUkNfVVJJID0gImh0dHA6Ly9uaXhvcy5vcmcvcmVsZWFzZXMvJHtCUE59LyR7QlBOfS0ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKK0xJQ0VOU0UgPSAiR1BMdjMiCitTVU1NQVJZID0gIlRvb2wgdG8gYWxsb3cgZWRpdGluZyBvZiBSUEFUSCBhbmQgaW50ZXJwcmV0ZXIgZmllbGRzIGluIEVMRiBiaW5hcmllcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjViMTUxZTNjODNiMzFmNTkzMWI0YTlmYzAxNjM1YmZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5OWY4NGQxMjQzNDczNDBjMzY3MDcwODllYzhmNzA1MzBhYmQ1NmU3ODI3YzU0ZDUwNmViNGNjMDk3YTE3ZTciCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitpbmhlcml0IGF1dG90b29scworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjAuNS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wYXgtdXRpbHMvcGF4LXV0aWxzXzEuMC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MTZhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGF4LXV0aWxzL3BheC11dGlsc18xLjAuNS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlNlY3VyaXR5LWZvY3VzZWQgRUxGIGZpbGVzIGNoZWNraW5nIHRvb2wiCitERVNDUklQVElPTiA9ICJUaGlzIGlzIGEgc21hbGwgc2V0IG9mIHZhcmlvdXMgUGFYIGF3YXJlIGFuZCByZWxhdGVkIFwKK3V0aWxpdGllcyBmb3IgRUxGIGJpbmFyaWVzLiBJdCBjYW4gY2hlY2sgRUxGIGJpbmFyeSBmaWxlcyBhbmQgcnVubmluZyBcCitwcm9jZXNzZXMgZm9yIGlzc3VlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHdoZW4gdXNpbmcgRUxGIGJpbmFyaWVzIFwKK2Fsb25nIHdpdGggUGFYLCBzdWNoIGFzIG5vbi1QSUMgY29kZSBvciBleGVjdXRhYmxlIHN0YWNrIGFuZCBoZWFwLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ2VudG9vLm9yZy9wcm9qL2VuL2hhcmRlbmVkL3BheC11dGlscy54bWwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gImh0dHA6Ly9nZW50b28ub3N1b3NsLm9yZy9kaXN0ZmlsZXMvcGF4LXV0aWxzLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ3MzFmNTM4NTY4MmE3YTYyZWUyZTdiN2RhY2MxM2E3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY2OWE5OTM4ZTRhZjc5MTJkMjZkNTg1MDk0YmMwMjAzZTQzNTcxYTk5MGZkZDA0ODMxOTA4OGE4YjhhZDkwNmYiCisKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNoIHB5dGhvbiIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIFBSRUZJWD0ke0R9JHtwcmVmaXh9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGliZXJyb3ItcGVybF8wLjE3MDI0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvbGliZXJyb3ItcGVybF8wLjE3MDI0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZTBlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJlcnJvci1wZXJsXzAuMTcwMjQuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJFcnJvciAtIEVycm9yL2V4Y2VwdGlvbiBoYW5kbGluZyBpbiBhbiBPTy1pc2ggd2F5IgorREVTQ1JJUFRJT04gPSAiVGhlIEVycm9yIHBhY2thZ2UgcHJvdmlkZXMgdHdvIGludGVyZmFjZXMuIEZpcnN0bHkgXAorRXJyb3IgcHJvdmlkZXMgYSBwcm9jZWR1cmFsIGludGVyZmFjZSB0byBleGNlcHRpb24gaGFuZGxpbmcuIFwKK1NlY29uZGx5IEVycm9yIGlzIGEgYmFzZSBjbGFzcyBmb3IgZXJyb3JzL2V4Y2VwdGlvbnMgdGhhdCBjYW4gXAorZWl0aGVyIGJlIHRocm93biwgZm9yIHN1YnNlcXVlbnQgY2F0Y2gsIG9yIGNhbiBzaW1wbHkgYmUgcmVjb3JkZWQuIgorCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT04ZjM0OTlkMDllZTc0YTA1MGMwMzE5MzkxZmY5ZDEwMCIKKworREVQRU5EUyArPSAicGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vY3Bhbi5tZXRhY3Bhbi5vcmcvYXV0aG9ycy9pZC9TL1NIL1NITE9NSUYvRXJyb3ItJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2UzNjc2YTdmYjE0ZjY1ZjU2OGYxMmQ0YjQwYTJhNzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDc0ZGI3Yzc4M2E2N2IwNjY3ZWNhNjRhNGY2YTBjM2RlOTQ5OThhZmM5MmMwMWQ2NDUzMTYzZWIwNGI5MTUwZCIKKworUyA9ICIke1dPUktESVJ9L0Vycm9yLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnVyaS1wZXJsXzEuNjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ1cmktcGVybF8xLjYwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MDlhNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ1cmktcGVybF8xLjYwLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdG8gbWFuaXB1bGF0ZSBhbmQgYWNjZXNzIFVSSSBzdHJpbmdzIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBVUkkucG0gbW9kdWxlIHdpdGggZnJpZW5kcy4gXAorVGhlIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBVUkkgY2xhc3MuIFVSSSBvYmplY3RzIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBcCithbmQgbWFuaXB1bGF0ZSB0aGUgdmFyaW91cyBjb21wb25lbnRzIHRoYXQgbWFrZSB1cCB0aGVzZSBzdHJpbmdzLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNjtlbmRsaW5lPTMwO21kNT02YzMzYWU1Yzg3ZmQxYzQ4OTc3MTRlMTIyZGQ5YzIzZCIKKworREVQRU5EUyArPSAicGVybCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmNwYW4ub3JnL2F1dGhvcnMvaWQvRy9HQS9HQUFTL1VSSS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGY3MzliZThjZTI4YjhiYWJhN2M1OTIwZmZlZTRkYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjkyZDNkYzY0YWNiODg0NWU5OTE3Yzk0NWUyMmI5YTUyNzVhZWI5ZmY5MjRlYjc4NzNjM2I3YTVjMGQyMzc3IgorCitTID0gIiR7V09SS0RJUn0vVVJJLSR7UFZ9IgorCitFWFRSQV9DUEFORkxBR1MgPSAiRVhQQVRMSUJQQVRIPSR7U1RBR0lOR19MSUJESVJ9IEVYUEFUSU5DUEFUSD0ke1NUQUdJTkdfSU5DRElSfSIKKworaW5oZXJpdCBjcGFuCisKK2RvX2NvbXBpbGUoKSB7CisJZXhwb3J0IExJQkM9IiQoZmluZCAke1NUQUdJTkdfRElSX1RBUkdFVH0vJHtiYXNlX2xpYmRpcn0vIC1uYW1lICdsaWJjLSouc28nKSIKKwljcGFuX2RvX2NvbXBpbGUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wYXJzZXItcGVybF8yLjQ0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljY2Q0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGFyc2VyLXBlcmxfMi40NC5iYgpAQCAtMCwwICsxLDM3IEBACitTVU1NQVJZID0gIlhNTDo6UGFyc2VyIC0gQSBwZXJsIG1vZHVsZSBmb3IgcGFyc2luZyBYTUwgZG9jdW1lbnRzIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjtlbmRsaW5lPTY7bWQ1PWM4NzY3ZDc1MTYyMjlmMDdiMjZlNDJkMWNmOGI1MWYxIgorCitERVBFTkRTICs9ICJleHBhdCBleHBhdC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvWE1MLVBhcnNlci0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiYWY0ODEzZmUzOTUyMzYyNDUxMjAxY2VkNmZiY2UzNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWFlOWQwN2VlOWMzNTMyNmIzZDlhYWQ1NmVhZTcxYTY3MzBhNzNhMTE2YjlmZTllOGE0NzU4YjdjYzAzMzIxNiIKKworUyA9ICIke1dPUktESVJ9L1hNTC1QYXJzZXItJHtQVn0iCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IENDPScke0NDfScgTEQ9JyR7Q0NMRH0nIEZVTExfQVI9JyR7QVJ9JyIKKworaW5oZXJpdCBjcGFuCisKKyMgZml4IHVwIHN1YiBNYWtlTWFrZXIgcHJvamVjdCBhcyBhcmd1bWVudHMgZG9uJ3QgZ2V0IHByb3BhZ2F0ZWQgdGhvdWdoCisjIHNlZSBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTI4NjMyCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCXNlZCAnczotLXN5c3Jvb3Q9LipcKFxzXHwkXCk6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfSA6ZycgLWkgTWFrZWZpbGUgRXhwYXQvTWFrZWZpbGUKKwlzZWQgJ3M6XkZVTExfQVIgPSAuKjpGVUxMX0FSID0gJHtBUn06ZycgLWkgRXhwYXQvTWFrZWZpbGUKK30KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCitkb19jb21waWxlX2NsYXNzLW5hdGl2ZSgpIHsKKwljcGFuX2RvX2NvbXBpbGUKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGVybC92ZW5kb3JfcGVybC8qL2F1dG8vWE1ML1BhcnNlci9FeHBhdC8uZGVidWcvIgorCitCQkNMQVNTRVhURU5EPSJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1wZXJsXzAuMDguYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGVybF8wLjA4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDE5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtcGVybF8wLjA4LmJiCkBAIC0wLDAgKzEsMjcgQEAKK0RFU0NSSVBUSU9OID0gImxpYnhtbC1wZXJsIGlzIGEgY29sbGVjdGlvbiBvZiBzbWFsbGVyIFBlcmwgbW9kdWxlcywgc2NyaXB0cywgYW5kIFwKK2RvY3VtZW50cyBmb3Igd29ya2luZyB3aXRoIFhNTCBpbiBQZXJsLiAgbGlieG1sLXBlcmwgc29mdHdhcmUgXAord29ya3MgaW4gY29tYmluYXRpb24gd2l0aCBYTUw6OlBhcnNlciwgUGVybFNBWCwgWE1MOjpET00sIFwKK1hNTDo6R3JvdmUgYW5kIG90aGVycy4iCitTVU1NQVJZID0gIkNvbGxlY3Rpb24gb2YgUGVybCBtb2R1bGVzIGZvciB3b3JraW5nIHdpdGggWE1MIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7YmVnaW5saW5lPTMzO2VuZGxpbmU9MzU7bWQ1PTE3MDU1NDllZWY3NTc3YTNkNmJhNzExMjNhMWYwY2U4IgorCitERVBFTkRTICs9ICJsaWJ4bWwtcGFyc2VyLXBlcmwiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9YTUwvJHtCUE59LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjBlZDVmYmRkYTUzZDEzMDFkZGFlZDg4ZGIxMDUwM2JiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1NzEwNTliN2I1ZDQ4YjdjZTUyYjAxMzg5ZTk1ZDc5OGJmNWNmMjAyMDUyM2MxNTNmZjI3YjQ5ODE1M2M5Y2IiCisKK0VYVFJBX0NQQU5GTEFHUyA9ICJFWFBBVExJQlBBVEg9JHtTVEFHSU5HX0xJQkRJUn0gRVhQQVRJTkNQQVRIPSR7U1RBR0lOR19JTkNESVJ9IgorCitpbmhlcml0IGNwYW4KKworZG9fY29tcGlsZSgpIHsKKwlleHBvcnQgTElCQz0iJChmaW5kICR7U1RBR0lOR19ESVJfVEFSR0VUfS8ke2Jhc2VfbGliZGlyfS8gLW5hbWUgJ2xpYmMtKi5zbycpIgorCWNwYW5fZG9fY29tcGlsZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL2xpYnhtbC1zaW1wbGUtcGVybF8yLjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjFiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9saWJ4bWwtc2ltcGxlLXBlcmxfMi4yMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFhNTCIKK0RFU0NSSVBUSU9OID0gIlRoZSBYTUw6OlNpbXBsZSBQZXJsIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBBUEkgbGF5ZXIgXAorb24gdG9wIG9mIGFuIHVuZGVybHlpbmcgWE1MIHBhcnNpbmcgbW9kdWxlIHRvIG1haW50YWluIFhNTCBmaWxlcyBcCisoZXNwZWNpYWxseSBjb25maWd1cmF0aW9uIGZpbGVzKS4gSXQgaXMgYSBibHVudCByZXdyaXRlIG9mIFhNTDo6U2ltcGxlIFwKKyhieSBHcmFudCBNY0xlYW4pIHRvIHVzZSB0aGUgWE1MOjpMaWJYTUwgcGFyc2VyIGZvciBYTUwgc3RydWN0dXJlcywgXAord2hlcmUgdGhlIG9yaWdpbmFsIHVzZXMgcGxhaW4gUGVybCBvciBTQVggcGFyc2Vycy4iCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35tYXJrb3YvWE1MLUxpYlhNTC1TaW1wbGUtMC45My9saWIvWE1ML0xpYlhNTC9TaW1wbGUucG9kIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWU3ZGJiM2UyMjQxZmFjODQ1Nzk2NzA1M2ZjMWExZGRiIgorREVQRU5EUyArPSAibGlieG1sLXBhcnNlci1wZXJsIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvWE1ML1hNTC1TaW1wbGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGQxMDk2NGUxMjNiNzZlY2EzNjY3ODQ2NGRhYTYzY2QiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWNmZjEzZDA4MDI3OTJkYTFlYjQ1ODk1Y2UxYmU0NjE5MDNkOThlYzk3YzljOTUzYmM4NDA2YWY3Mjk0NDM0YSIKKworUyA9ICIke1dPUktESVJ9L1hNTC1TaW1wbGUtJHtQVn0iCisKK0VYVFJBX1BFUkxGTEFHUyA9ICItSSAke1BFUkxIT1NUTElCfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1uYXRpdmVfNS4yMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5YTFjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLW5hdGl2ZV81LjIyLjAuYmIKQEAgLTAsMCArMSwxMjMgQEAKK3JlcXVpcmUgcGVybC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICBmaWxlOi8vQ29uZmlndXJlLW11bHRpbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25hdGl2ZS1wZXJsaW5jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01NX1VuaXgucG0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL2Vycm5vX3Zlci5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2R5bmFsb2FkZXJoYWNrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmYwZjA5YjE3ZGU0MjZlZmYzMjM0MjZjYjE0MGVlNzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmU4M2VhZDBjNWMyNmNiYmU2MjZmYTRiYWMxYTRiZWFiZTIzYTllZWJjMTVkMzViYTQ5Y2NkZTExODc4ZTE5NiIKKworaW5oZXJpdCBuYXRpdmUKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitleHBvcnQgTEQ9IiR7Q0NMRH0iCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJLi9Db25maWd1cmUgXAorCQktRGNjPSIke0NDfSIgXAorCQktRGNmbGFncz0iJHtDRkxBR1N9IiBcCisJCS1EbGRmbGFncz0iJHtMREZMQUdTfSIgXAorCQktRGNmX2J5PSJPcGVuIEVtYmVkZGVkIiBcCisJCS1EcHJlZml4PSR7cHJlZml4fSBcCisJCS1EdmVuZG9ycHJlZml4PSR7cHJlZml4fSBcCisJCS1EdmVuZG9ycHJlZml4PSR7cHJlZml4fSBcCisJCS1Ec2l0ZXByZWZpeD0ke3ByZWZpeH0gXAorCQlcCisJCS1EYmluPSR7U1RBR0lOR19CSU5ESVJ9LyR7UE59IFwKKwkJLURwcml2bGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRGFyY2hsaWI9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1EdmVuZG9ybGliPSR7U1RBR0lOR19MSUJESVJ9L3BlcmwvJHtQVn0gXAorCQktRHZlbmRvcmFyY2g9JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfSBcCisJCS1Ec2l0ZWxpYj0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJLURzaXRlYXJjaD0ke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9IFwKKwkJXAorCQktRHVzZXNocnBsaWIgXAorCQktRHVzZXRocmVhZHMgXAorCQktRHVzZWl0aHJlYWRzIFwKKwkJLUR1c2VsYXJnZWZpbGVzIFwKKwkJLURub2V4dGVuc2lvbnM9T0RCTV9GaWxlIFwKKwkJLVVkX2Rvc3VpZCBcCisJCS1VaV9kYiBcCisJCS1VaV9uZGJtIFwKKwkJLVVpX2dkYm0gXAorCQktVWlfZ2RibV9uZGJtIFwKKwkJLVVpX2dkYm1uZGJtIFwKKwkJLURpX3NoYWRvdyBcCisJCS1EaV9zeXNsb2cgXAorCQktRHVzZXBlcmxpbyBcCisJCS1EbWFuM2V4dD0zcG0gXAorCQktRHNlZD0vYmluL3NlZCBcCisJCS1VYWZzIFwKKwkJLVVkX2NzaCBcCisJCS1VdXNlc2ZpbyBcCisJCS1VdXNlbm0gLWRlcworfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKworCSMgV2UgbmVlZCBhIGhvc3RwZXJsIGxpbmsgZm9yIGJ1aWxkaW5nIHBlcmwKKwlsbiAtc2YgcGVybCR7UFZ9ICR7RH0ke2JpbmRpcn0vaG9zdHBlcmwKKworICAgICAgICBsbiAtc2YgcGVybCAke0R9JHtsaWJkaXJ9L3Blcmw1CisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFIFwKKwkgICAgICAgICAgICR7RH0ke2RhdGFkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMKKworCSMgU2F2ZSBuYXRpdmUgY29uZmlnIAorCWluc3RhbGwgY29uZmlnLnNoICR7RH0ke2xpYmRpcn0vcGVybAorCWluc3RhbGwgbGliL0NvbmZpZy5wbSAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vCisJaW5zdGFsbCBsaWIvRXh0VXRpbHMvdHlwZW1hcCAke0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvCisKKwkjIHBlcmwgc2hhcmVkIGxpYnJhcnkgaGVhZGVycworCSMgcmVmZXJlbmNlIHBlcmwgNS4yMC4wLTEgaW4gZGViaWFuOgorCSMgaHR0cHM6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL2V4cGVyaW1lbnRhbC9pMzg2L3BlcmwvZmlsZWxpc3QKKwlmb3IgaSBpbiBhdi5oIGJpdGNvdW50LmggY2hhcmNsYXNzX2ludmxpc3RzLmggY29uZmlnLmggY29wLmggY3YuaCBkb3Npc2guaCBcCisJCWVtYmVkLmggZW1iZWR2YXIuaCBFWFRFUk4uaCBmYWtlc2Rpby5oIGZlYXR1cmUuaCBmb3JtLmggZ2l0X3ZlcnNpb24uaCBcCisJCWd2LmggaGFuZHkuaCBodl9mdW5jLmggaHYuaCBpbmxpbmUuaCBJTlRFUk4uaCBpbnRycHZhci5oIGlwZXJsc3lzLmggXAorCQlrZXl3b3Jkcy5oIGwxX2NoYXJfY2xhc3NfdGFiLmggbWFsbG9jX2N0bC5oIG1ldGFjb25maWcuaCBtZ19kYXRhLmggXAorCQltZy5oIG1nX3Jhdy5oIG1nX3Z0YWJsZS5oIG15ZHRyYWNlLmggbm9zdGRpby5oIG9wY29kZS5oIG9wLmggXAorCQlvcG5hbWVzLmggb3BfcmVnX2NvbW1vbi5oIG92ZXJsb2FkLmggcGFkLmggcGFyc2VyLmggcGF0Y2hsZXZlbC5oIFwKKwkJcGVybGFwaS5oIHBlcmwuaCBwZXJsaW8uaCBwZXJsaW9sLmggcGVybHNkaW8uaCBwZXJsdmFycy5oIHBlcmx5LmggXAorCQlwcC5oIHBwX3Byb3RvLmggcHJvdG8uaCByZWVudHIuaCByZWdjaGFyY2xhc3MuaCByZWdjb21wLmggcmVnZXhwLmggXAorCQlyZWdub2Rlcy5oIHNjb3BlLmggc3YuaCB0aHJlYWQuaCB0aW1lNjRfY29uZmlnLmggdGltZTY0LmggdWNvbmZpZy5oIFwKKwkJdW5pY29kZV9jb25zdGFudHMuaCB1bml4aXNoLmggdXRmOC5oIHV0ZmViY2RpYy5oIHV0aWwuaCB1dWRtYXAuaCBcCisJCXZ1dGlsLmggd2FybmluZ3MuaCBYU1VCLmgKKwlkbworCQlpbnN0YWxsICRpICR7RH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFCisJZG9uZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9wZXJsIFBFUkw1TElCPSckUEVSTDVMSUI6JHtTVEFHSU5HX0xJQkRJUn0vcGVybC8ke1BWfToke1NUQUdJTkdfTElCRElSfS9wZXJsOiR7U1RBR0lOR19MSUJESVJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCisJY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9wZXJsJHtQVn0gUEVSTDVMSUI9JyRQRVJMNUxJQjoke1NUQUdJTkdfTElCRElSfS9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3Blcmwke1NUQUdJTkdfTElCRElSfS9wZXJsOiR7U1RBR0lOR19MSUJESVJ9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9OiR7U1RBR0lOR19MSUJESVJ9L3BlcmwvdmVuZG9yX3BlcmwvJHtQVn0nCisKKwkjIFVzZSAvdXNyL2Jpbi9lbnYgbmF0aXZlcGVybCBmb3IgdGhlIHBlcmwgc2NyaXB0LgorCWZvciBmIGluIGBncmVwIC1JbCAnIyEgKiR7YmluZGlyfS9wZXJsJyAke0R9LyR7YmluZGlyfS8qYDsgZG8KKwkJc2VkIC1pIC1lICdzfCR7YmluZGlyfS9wZXJsfC91c3IvYmluL2VudiBuYXRpdmVwZXJsfCcgJGYKKwlkb25lCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAicGVybF9zeXNyb290X2NyZWF0ZV93cmFwcGVyIgorCitwZXJsX3N5c3Jvb3RfY3JlYXRlX3dyYXBwZXIgKCkgeworCW1rZGlyIC1wICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfQorCSMgQ3JlYXRlIGEgd3JhcHBlciB0aGF0IC91c3IvYmluL2VudiBwZXJsIHdpbGwgdXNlIHRvIGdldCBwZXJsLW5hdGl2ZS4KKwkjIFRoaXMgTVVTVCBsaXZlIGluIHRoZSBub3JtYWwgYmluZGlyLgorCWNhdCA+ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyfS8uLi9uYXRpdmVwZXJsIDw8IEVPRgorIyEvYmluL3NoCityZWFscGF0aD1cYHJlYWRsaW5rIC1mbiBcJDBcYAorZXhlYyBcYGRpcm5hbWUgXCRyZWFscGF0aFxgL3BlcmwtbmF0aXZlL3BlcmwgIlwkQCIKK0VPRgorCWNobW9kIDA3NTUgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwKKwljYXQgJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJ9Ly4uL25hdGl2ZXBlcmwKK30KKworIyBGaXggdGhlIHBhdGggaW4gc3N0YXRlCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKi5wbSAqLnBvZCAqLmggKi5wbCAqLnNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXB0ZXN0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhlYTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC1wdGVzdC5pbmMKQEAgLTAsMCArMSwzNyBAQAoraW5oZXJpdCBwdGVzdAorCitTUkNfVVJJICs9ICJmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgIgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlta2RpciAtcCAke0R9JHtQVEVTVF9QQVRIfQorCXNlZCAtZSAiczpcL29wdDpcL3VzcjoiIC1pIFBvcnRpbmcvYWRkLXBhY2thZ2UucGwKKwlzZWQgLWUgInM6XC9sb2NhbFwvZ251XC86XC86IiAtaSBoaW50cy9jeHV4LnNoCisJdGFyIC1jZiAtICogLS1leGNsdWRlIFwqLm8gLS1leGNsdWRlIGxpYnBlcmwuc28gLS1leGNsdWRlIE1ha2VmaWxlIC0tZXhjbHVkZSBtYWtlZmlsZSAtLWV4Y2x1ZGUgaG9zdHBlcmwgXAorCQktLWV4Y2x1ZGUgbWluaXBlcmwgLS1leGNsdWRlIGdlbmVyYXRlX3V1ZG1hcCAtLWV4Y2x1ZGUgcGF0Y2hlcyB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKworCXNlZCAtaSAtZSAicywke0R9LCxnIiBcCisJICAgICAgIC1lICJzLC0tc3lzcm9vdD0ke1NUQUdJTkdfRElSX0hPU1R9LCxnIiBcCisJICAgICAgIC1lICJzLC1pc3lzdGVtJHtTVEFHSU5HX0lOQ0RJUn0gLCxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJ9LCR7YmluZGlyfSxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19JTkNESVJ9LCR7aW5jbHVkZWRpcn0sZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvLCR7YmluZGlyfS8sZyIgXAorCSAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vLCxnIiBcCisJICAgICAgIC1lICJzLCR7U1RBR0lOR19CSU5ESVJfVE9PTENIQUlOfS8ke1RBUkdFVF9QUkVGSVh9LCR7YmluZGlyfSxnIiBcCisJICAgICR7RH0ke1BURVNUX1BBVEh9L2xpYi9Db25maWcucG0KKworCWxuIC1zZiAke2JpbmRpcn0vcGVybCAke0R9JHtQVEVTVF9QQVRIfS90L3BlcmwKKworfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICAjIFB1dCBhbGwgKi50IGZpbGVzIGZyb20gdGhlIGxpYiBkaXIgaW4gdGhlIHB0ZXN0IHBhY2thZ2UKKyAgICAjIGRvX3NwbGl0X3BhY2thZ2VzIHJlcXVpcmVzIGEgcGFpciBvZiAoKSBpbiB0aGUgcmVnZXgsIGJ1dCB3ZSBoYXZlIG5vdGhpbmcKKyAgICAjIHRvIG1hdGNoLCBzbyB1c2UgYW4gZW1wdHkgcGFpci4KKyAgICBpZiBiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B0ZXN0JywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BlcmwvJHtQVn0nKSwgJy4qXC50KCknLAorICAgICAgICAgICAgJyR7UE59LXB0ZXN0JXMnLCAnJXMnLCByZWN1cnNpdmU9VHJ1ZSwgbWF0Y2hfcGF0aD1UcnVlKQorfQorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiJHtQTn0tbW9kdWxlcyAke1BOfS1kb2MgJHtQTn0tbWlzYyBzZWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsLXJkZXBlbmRzXzUuMjIuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ODZmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwtcmRlcGVuZHNfNS4yMi4wLmluYwpAQCAtMCwwICsxLDI1NjcgQEAKKyMgVG8gY3JlYXRlL3VwZGF0ZSB0aGUgcGVybC1yZGVwZW5kc18ke1BWfS5pbmMgdXNlIHRoaXMgcGllY2Ugb2YgdWdseSBzY3JpcHQgKG1vZGlmaWVkIGZvciB5b3VyIGFyY2gvcGF0aHMgZXRjKToKKworI2ppYWhvbmd4dTo1LjIwLjAtcjEkIHB3ZAorIy9ob21lL2ppYWhvbmd4dS95b2N0by9idWlsZC0yMDE0MDYxOC1wZXJsL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC9wZXJsLzUuMjAuMC1yMQorCisjMSBjcCAtciBwYWNrYWdlcy1zcGxpdCBwYWNrYWdlcy1zcGxpdC5uZXcgJiYgY2QgcGFja2FnZXMtc3BsaXQubmV3CisjMiBmaW5kIC4gLW5hbWUgXCoucG0gfCB4YXJncyBzZWQgLWkgJy9ePWhlYWQvLC9ePWN1dC9kJworIzMgZWdyZXAgLXIgIl5ccyooXDx1c2UgLip8XDxyZXF1aXJlIC4qKTs/IiBwZXJsLW1vZHVsZS0qIC0taW5jbHVkZT0iKi5wbSIgCisjfCBzZWQgInMvXC8uKlwucG06ICovICs9IC9nO3MvW1wiXCddLy9nO3MvOy4qL1wiL2c7cy8rPSAuKlwocmVxdWlyZVx8dXNlXClcPiAqLys9IFwicGVybC1tb2R1bGUtL2c7cy9DUEFOUExVUzo6LiovY3BhbnBsdXMvZztzL0NQQU46Oi4qL2NwYW4vZztzLzo6Ly0vZztzLyBbXitcIl0uKi8vZztzL18vLS9nO3MvXC5wbFwiJC9cIi87cy9cIlw/XCQvXCIvO3MvKC8vOyIgfCB0ciBbOnVwcGVyOl0gWzpsb3dlcjpdIAorI3wgZ3JlcCAtdiAtZSAiXC12bXNcLSIgLWUgbW9kdWxlLTUgLWUgIl4kIiAtZSAiXFwkIiAtZSB5b3VyIC1lIHRrIC1lIGF1dG9wZXJsIC1lIGh0bWwgLWUgaHR0cCAtZSBwYXJzZS1jcGFuIC1lIHBlcmwtb3N0eXBlIC1lIG5kYm0tZmlsZSAtZSBtb2R1bGUtbWFjIC1lIGZjZ2kgLWUgbHdwIC1lIGRiZCAtZSBkYml4IAorI3wgc29ydCAtdSAKKyN8IHNlZCAncy9eL1JERVBFTkRTXy87cy9wZXJsLW1vZHVsZS0vJHtQTn0tbW9kdWxlLS9nO3MvbW9kdWxlLVwobW9kdWxlLVwpL1wxL2c7cy9cKG1vZHVsZS1sb2FkXCktY29uZGl0aW9uYWwvXDEvZztzL2VuY29kZS1jb25maWdsb2NhbC8mLXBtLzsnIAorI3wgZWdyZXAgLXd2ICc9Pnxtb2R1bGUtYXxtb2R1bGUtYXBhY2hlLj98bW9kdWxlLWFwcnxtb2R1bGUtYXV0aGVuLXNhc2x8bW9kdWxlLWItYXNtZGF0YXxtb2R1bGUtY29udmVydC1lYmNkaWN8bW9kdWxlLWRldmVsLXNpemV8bW9kdWxlLWRpZ2VzdC1wZXJsLW1kNXxtb2R1bGUtZHVtcHZhbHVlfG1vZHVsZS1leHR1dGlscy1jb25zdGFudC1hYWFyZ2g1Nmhhc2h8bW9kdWxlLWV4dHV0aWxzLXhzc3ltc2V0fG1vZHVsZS1maWxlLWJzZGdsb2J8bW9kdWxlLWZvcnxtb2R1bGUtaXR8bW9kdWxlLWlvLXN0cmluZ3xtb2R1bGUtaXBjLXN5c3RlbS1zaW1wbGV8bW9kdWxlLWxleGljYWx8bW9kdWxlLWxvY2FsLWxpYnxtZXRhZGF0YXxtb2R1bGUtbW9kcGVybC11dGlsfG1vZHVsZS1wbHVnZ2FibGUtb2JqZWN0fG1vZHVsZS10ZXN0LWJ1aWxkZXItaW8tc2NhbGFyfG1vZHVsZS10ZXh0LXVuaWRlY29kZXxtb2R1bGUtd2luMzJ8b2JqZWN0c1xzbG9hZHxzeXNjYWxsLnBofHN5c3RlbWluZm8ucGh8JXMnID4gL3RtcC9wZXJsLXJkZXBlbmRzCisKK1JERVBFTkRTX3BlcmwtbWlzYyArPSAicGVybCIKK1JERVBFTkRTXyR7UE59LXBvZCArPSAicGVybCIKKworIyBTb21lIGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgdGhlIGFib3ZlIGRvZXNuJ3QgbWFuYWdlIHRvIGZpZ3VyZSBvdXQKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK0RFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzIgorCisKKyMgRGVwZW5kcyBsaXN0CisjIGNvcHkgY29udGVudHMgb2YgL3RtcC9wZXJsLXJkZXBlbmRzIGluIHRoaXMgZmlsZQorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFueWRibS1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFueWRibS1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jcGFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1pZiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLW5ldC1waW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1jcGFuICs9ICIke1BOfS1tb2R1bGUtdXNlci1wd2VudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLWNwYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlICs9ICIke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MtZW52IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZSArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQtdGVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcHAtcHJvdmUtc3RhdGUtcmVzdWx0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXBwLXByb3ZlLXN0YXRlLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFwcC1wcm92ZS1zdGF0ZS1yZXN1bHQtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1maWxlICs9ICIke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1hcmNoaXZlLXRhci1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcmNoaXZlLXRhciArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXJjaGl2ZS10YXIgKz0gIiR7UE59LW1vZHVsZS1pby16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWFyY2hpdmUtdGFyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hcnliYXNlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlLWhhbmRsZXJzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlLWhhbmRsZXJzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGUtaGFuZGxlcnMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdHRyaWJ1dGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXR0cmlidXRlcyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtZmF0YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24gKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbiArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWV4Y2VwdGlvbi1zeXN0ZW0gKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1leGNlcHRpb24tc3lzdGVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLWhpbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLWxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmRzdGFjayArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGUtZ3VhcmRzdGFjayArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsICs9ICIke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZS1ndWFyZHN0YWNrIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9kaWUtc2NvcGV1dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1zY29wZXV0aWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvZGllLXNraXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2RpZS1za2lwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYXV0b2xvYWRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvc3BsaXQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1hdXRvdXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJhc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtYi1vcC1wcml2YXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItY29uY2lzZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWNvbmNpc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1jb25jaXNlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi1kZXBhcnNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkaW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLWRlcGFyc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItZGVwYXJzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJlbmNobWFyayArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmVuY2htYXJrICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ2ludCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlnbnVtICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ251bSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdudW0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYmxpYiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1ibGliICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJsaWIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXNob3dsZXggKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLWItY29uY2lzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXNob3dsZXggKz0gIiR7UE59LW1vZHVsZS1iLXRlcnNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItc2hvd2xleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXRlcnNlICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXRlcnNlICs9ICIke1BOfS1tb2R1bGUtYi1jb25jaXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWItdGVyc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi14cmVmICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1iLXhyZWYgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYi14cmVmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWJ5dGVzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtYnl0ZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAtaGVhdnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jYXJwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNhcnAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jaGFybmFtZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2hhcm5hbWVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LWJ6aXAyICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWNhcnAgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29tcHJlc3MtemxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbXByZXNzLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb21wcmVzcy16bGliICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1leHRlbnNpb25zICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1leHRlbnNpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLWV4dGVuc2lvbnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbmZpZy1wZXJsLXYgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29uZmlnLXBlcmwtdiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtY29yZWxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY29yZWxpc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNvcmVsaXN0ICs9ICIke1BOfS1tb2R1bGUtdmVyc2lvbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jb3JlbGlzdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLWxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtbmV0LXBpbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc2FmZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWNwYW4gKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3BhbiArPSAiJHtQTn0tbW9kdWxlLXRleHQtd3JhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jcGFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1jd2QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWN3ZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtY3dkICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1iLWRlcGFyc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLWludDMyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRibS1maWx0ZXItaW50MzIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLW51bGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci1udWxsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci11dGY4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kYm0tZmlsdGVyLXV0ZjggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGJtLWZpbHRlci11dGY4ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGVwcmVjYXRlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXByZWNhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGVwcmVjYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcGVlayArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBlZWsgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kZXZlbC1wcHBvcnQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtcHBwb3J0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRldmVsLXBwcG9ydCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtc2VsZnN0dWJiZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGV2ZWwtc2VsZnN0dWJiZXIgKz0gIiR7UE59LW1vZHVsZS1zZWxmbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpYWdub3N0aWNzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWFnbm9zdGljcyArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlhZ25vc3RpY3MgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXRhYnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1iYXNlICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWRpZ2VzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtZmlsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1maWxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QtbWQ1ICs9ICIke1BOfS1tb2R1bGUtZGlnZXN0LWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1tZDUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LW1kNSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1kaWdlc3QtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1kaWdlc3Qtc2hhICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpZ2VzdC1zaGEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlnZXN0LXNoYSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZGlyaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1hbGlhcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtYnl0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ieXRlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNqa2NvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbi1oeiArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24taHogKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWNuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNuLWh6IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY24gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1jb25maWcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZWJjZGljICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWViY2RpYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lYmNkaWMgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RlciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGVyICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWdzbTAzMzggKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1nc20wMzM4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3NtMDMzOCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1ndWVzcyArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtZ3Vlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWd1ZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWgyeiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAtamlzNyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwLWppczcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtanAtaDJ6IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWpwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1qcC1qaXM3IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1qcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtanAgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3ItMjAyMi1rciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUta3IgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWtyLTIwMjIta3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLWtyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1rciArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZS1jamtjb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyLWlzby0yMDIyLWpwICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlci1pc28tMjAyMi1qcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXItaXNvLTIwMjItanAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1oZWFkZXIgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1taW1lLWhlYWRlciArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtaGVhZGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLW1pbWUtbmFtZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtbWltZS1uYW1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtYWxpYXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUtY29uZmlnbG9jYWwtcG0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWVuY29kaW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXN5bWJvbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS1zeW1ib2wgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdHcgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXR3ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS10dyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RlLXVuaWNvZGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS1yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGUtdW5pY29kZS11dGY3ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kZS11bmljb2RlLXV0ZjcgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVuY29kaW5nLXdhcm5pbmdzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmNvZGluZy13YXJuaW5ncyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbmdsaXNoICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZW5nbGlzaCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVudiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1lbnYgKz0gIiR7UE59LW1vZHVsZS10aWUtYXJyYXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWVycm5vICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXJybm8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXhwZXJpbWVudGFsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS1mZWF0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBlcmltZW50YWwgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cGVyaW1lbnRhbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHBvcnRlci1oZWF2eSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyLWhlYXZ5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4cG9ydGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXItaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1ta3N5bWxpc3RzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtaXBjLWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFpeCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1haXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYWl4ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWFuZHJvaWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tYW5kcm9pZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1hbmRyb2lkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kYXJ3aW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLWRlYy1vc2YgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tZGVjLW9zZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1kZWMtb3NmICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLW9zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS1vczIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXZtcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS12bXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0tdm1zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jYnVpbGRlci1wbGF0Zm9ybS13aW5kb3dzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNidWlsZGVyLXBsYXRmb3JtLXdpbmRvd3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY2J1aWxkZXItcGxhdGZvcm0td2luZG93cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kLW1tICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQtbW0gKz0gIiR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZC1tbSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb3B5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb21tYW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbW1hbmQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29tbWFuZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LWJhc2UgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50ICs9ICIke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC1wcm94eXN1YnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtcHJveHlzdWJzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtdXRpbHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC11dGlscyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQteHMgKz0gIiR7UE59LW1vZHVsZS1kYXRhLWR1bXBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtY29uc3RhbnQtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1jb25zdGFudC14cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXV0aWxzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWNvbnN0YW50LXhzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWVtYmVkICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1lbWJlZCArPSAiJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWRhdGEtZHVtcGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsZWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbGVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGxlZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWluc3RhbGwgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtaW5zdGFsbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1pbnN0YWxsICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdC1raWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3Qta2lkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbGlibGlzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlLWFsaWFzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1hbmlmZXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW15IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlciArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi1yZWdleCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS11bml2ZXJzYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tYW5pZmVzdCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXBhdGgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFuaWZlc3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1taW5pcGVybCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1pbmlwZXJsICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtZW1iZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWluaXBlcmwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1ta2Jvb3RzdHJhcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rYm9vdHN0cmFwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWtzeW1saXN0cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1rc3ltbGlzdHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFpeCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYWl4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWF1dG9zcGxpdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWNwYW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZGF0YS1kdW1wZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWZpbmQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWJlb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYmVvcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1iZW9zICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1jeWd3aW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tY3lnd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRhcndpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tZGFyd2luICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1kb3MgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWRvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1tYWNvcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tbnc1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1udzUgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW53NSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1vczIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tb3MyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLW9zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbSArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLWxpYmxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0gKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXFueCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tcW54ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWRpcmhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1ha2VtYWtlci1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLWFueSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS11bml4ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1maW5kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdXdpbiArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdXdpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1saWJsaXN0LWtpZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbS1hbnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm1zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12bXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdm9zICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS12b3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tYW55IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0tdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1tbS13aW4zMiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXItY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLW1tLXdpbjk1ICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luMzIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbW0td2luOTUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtbXkgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1tbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1teSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYWNrbGlzdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFja2xpc3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb3VudGxpbmVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtZXZhbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWV2YWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb3VudGxpbmVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWV2YWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cyArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMtdXRpbGl0aWVzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtcGFyc2V4cy11dGlsaXRpZXMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLXV0aWxpdGllcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10ZXN0bGliICs9ICIke1BOfS1tb2R1bGUtbGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXRlc3RsaWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdGVzdGxpYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWNtZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1jbWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1pbnB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1pbnB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLW91dHB1dG1hcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy1vdXRwdXRtYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXBhcnNleHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy1wYXJzZXhzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLWlucHV0bWFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtb3V0cHV0bWFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtdHlwZW1hcHMtdHlwZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1leHR1dGlscy10eXBlbWFwcy10eXBlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4dHV0aWxzLXR5cGVtYXBzLXR5cGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtZXhjZXB0aW9uLXN5c3RlbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWF1dG9kaWUtaGludHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1hdXRvZGllLXNjb3BldXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLWZhdGFsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mYXRhbCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZhdGFsICs9ICIke1BOfS1tb2R1bGUtdGllLXJlZmhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmF0YWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1mY250bCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZjbnRsICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmVhdHVyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpZWxkcyArPSAiJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWVsZHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmllbGRzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWNhY2hlICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVjYWNoZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlY2FjaGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb21wYXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29tcGFyZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1jb3B5ICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtY29weSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWNvcHkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWRvc2dsb2IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1kb3NnbG9iICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZG9zZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLWNvcHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1pcGMtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1sb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmV0Y2ggKz0gIiR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2siCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1mZXRjaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZldGNoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1maW5kICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZmluZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWZpbmQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLWdsb2JtYXBwZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9ibWFwcGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1nbG9iICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYiArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWN3ZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXBhdGggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1wYXRoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWN5Z3dpbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtY3lnd2luICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZXBvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1lcG9jICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW1hYyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtbWFjICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLW9zMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtb3MyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXVuaXggKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy12bXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXZtcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtY3dkICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtdW5peCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXNwZWMtd2luMzIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zcGVjLXdpbjMyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS1zdGF0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXN0YXQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtc3RhdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtcGFyZW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbGUtdGVtcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWxlLXRlbXAgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsZS10ZW1wICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1maWx0ZXItdXRpbC1jYWxsICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbHRlci11dGlsLWNhbGwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmlsdGVyLXV0aWwtY2FsbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZmluZGJpbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWZpbmRiaW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1nZXRvcHQtbG9uZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1sb25nICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1wb2QtdXNhZ2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXBhcnNld29yZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtZ2V0b3B0LWxvbmcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWdldG9wdC1zdGQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwtZmllbGRoYXNoICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsLWZpZWxkaGFzaCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2ggKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1oYXNoLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLWhhc2gtdXRpbC1maWVsZGhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaGFzaC11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWhhc2gtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmdpbmZvICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5naW5mbyArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtZGV0ZWN0ICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncy1saXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MtbGlzdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWkxOG4tbGFuZ3RhZ3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItYnppcDIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWlkZW50aXR5ICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZ2xvYm1hcHBlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWJ6aXAyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJ6aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWRlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1kZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWFkYXB0ZXItZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1nemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtZ3ppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1yYXdkZWZsYXRlICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXJhd2RlZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1hZGFwdGVyLWRlZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iemlwMiAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtcmF3ZGVmbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemlwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXpsaWItZXh0cmEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1maWxlLXN0YXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1kaXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZGlyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWRpciArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYXNoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tZmlsZSArPSAiJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zZWxlY3RzYXZlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8taGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1pbyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcGlwZSArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1waXBlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBpcGUgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXBvbGwgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tcG9sbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc2Vla2FibGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWVrYWJsZSArPSAiJHtQTn0tbW9kdWxlLWZjbnRsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlZWthYmxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaW5ldCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1pby1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWluZXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQtaXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1lcnJubyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0ICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pbmV0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tc29ja2V0LXVuaXggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4ICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXNvY2tldC11bml4ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctYnppcDIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLXppcC1jb25zdGFudHMgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pZGVudGl0eSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWNvbXByZXNzLXJhdy16bGliIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hZGFwdGVyLWluZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnlpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtYnl0ZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYW55dW5jb21wcmVzcyArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFueXVuY29tcHJlc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1hbnl1bmNvbXByZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtY2FycCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1iYXNlICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYnVuemlwMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItYnVuemlwMiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1idW56aXAyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0ICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWJ1bnppcDIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy1iYXNlLWNvbW1vbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWd6aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtZ3VuemlwICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1leHRyYSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWd1bnppcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1ndW56aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1ieXRlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWluZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtYmFzZS1jb21tb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tY29tcHJlc3MtemxpYi1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtaW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1pbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtY29tcHJlc3MtcmF3LXpsaWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy1yYXdpbmZsYXRlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtcmF3aW5mbGF0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1jb21wcmVzcy1yYXctemxpYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyICIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXVuemlwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLWNvbXByZXNzLWJhc2UtY29tbW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16aXAtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1jb21wcmVzcy16bGliLWV4dHJhIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLWFkYXB0ZXItaWRlbnRpdHkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtYWRhcHRlci1pbmZsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1pby11bmNvbXByZXNzLXJhd2luZmxhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8tdW5jb21wcmVzcy11bnppcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QgIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXVuY29tcHJlc3MtdW56aXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pby16bGliICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlvLXpsaWIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaW8temxpYiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtZXh0dXRpbHMtbWFrZW1ha2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1maWxlaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWlvLWhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1pcGMtb3BlbjMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1jbWQgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLWNtZCArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdGltZS1oaXJlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtY21kICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtbXNnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1tc2cgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMiArPSAiJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLW9wZW4zICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1pby1waXBlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1vcGVuMyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtb3BlbjMgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtaXBjLXN5c3YiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2VtYXBob3JlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS1pcGMtc3lzdiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc2hhcmVkbWVtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zaGFyZWRtZW0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWlwYy1zeXN2ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtaXBjLXN5c3YgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1pcGMtc3lzdiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcC1ib29sZWFuICs9ICIke1BOfS1tb2R1bGUtanNvbi1wcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwLWJvb2xlYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLWJ5dGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWpzb24tcHAgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtanNvbi1wcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1qc29uLXBwICs9ICIke1BOfS1tb2R1bGUtc3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saWIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpYiArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbGlzdC11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxpc3QtdXRpbC14cyArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1saXN0LXV0aWwteHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZGVkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZGVkICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtY29yZWxpc3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLWxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9hZCArPSAiJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2FkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvYWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY291bnRyeSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb3VudHJ5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvdW50cnktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LWNvZGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeS1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jdXJyZW5jeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY3VycmVuY3ktcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWN1cnJlbmN5LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdleHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2V4dC1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZXh0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXV0ZjgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0tY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1jb25zdGFudHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmdmYW0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ2ZhbS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5nZmFtLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UtcmV0aXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3VhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd1YWdlLXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndWFnZS1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItY29kZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXIgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1sYW5ndmFyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWxhbmd2YXItcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtbGFuZ3Zhci1yZXRpcmVkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtY29uc3RhbnRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LWNvZGVzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtY29kZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLWNvbnN0YW50cyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1jb2RlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0ICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdC1yZXRpcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvZGVzLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY29kZXMtc2NyaXB0LXJldGlyZWQgKz0gIiR7UE59LW1vZHVsZS11dGY4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb2Rlcy1zY3JpcHQtcmV0aXJlZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1jb3VudHJ5ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWNvdW50cnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtY3VycmVuY3kgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWN1cnJlbmN5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLWxhbmd1YWdlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1sYW5ndWFnZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1ndXRzbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1ndXRzICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0ICs9ICIke1BOfS1tb2R1bGUtaTE4bi1sYW5ndGFncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pMThuLWxhbmd0YWdzLWRldGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUtbWFrZXRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1tYWtldGV4dC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1sb2NhbGUgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWxvY2FsZS1zY3JpcHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbG9jYWxlLXNjcmlwdCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdmbG9hdC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnZmxvYXQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGNlbXUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsY2VtdSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtY2FsYyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMgKz0gIiR7UE59LW1vZHVsZS1pbnRlZ2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWNhbGMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtZmFzdGNhbGMgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1jYWxjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC1mYXN0Y2FsYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LWZhc3RjYWxjICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50ICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQtdHJhY2UgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ2ludC10cmFjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlnaW50LXRyYWNlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWJpZ2Zsb2F0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtYmlncmF0ICs9ICIke1BOfS1tb2R1bGUtbWF0aC1iaWdpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1iaWdyYXQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWJpZ3JhdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC1jb21wbGV4ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1hdGgtY29tcGxleCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXggKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tYXRoLXRyaWcgKz0gIiR7UE59LW1vZHVsZS1tYXRoLWNvbXBsZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWF0aC10cmlnICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtYW55ZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUtZXhwaXJlZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1leHBpcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1lbW9pemUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zZGJtLWZpbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWVtb2l6ZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXN0b3JhYmxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ldGEtbm90YXRpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWV0YS1ub3RhdGlvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbWltZS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS1taW1lLWJhc2U2NCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1taW1lLXF1b3RlZHByaW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW1ybyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tcm8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1tcm8gKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jbWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNtZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY21kICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1jb25maWcgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtY29uZmlnICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZG9tYWluICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1kb21haW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWRvbWFpbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtYSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWEgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1hICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLWVycm5vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZGF0YWNvbm4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1kYXRhY29ubiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtZSArPSAiJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1lICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1pICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWRhdGFjb25uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtaSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwLWwgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cC1sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAtbCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtZnRwLWEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtZnRwICs9ICIke1BOfS1tb2R1bGUtc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1mdHAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWZ0cCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtY2xhc3Mtc3RydWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ob3N0ZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LWhvc3RlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRlbnQgKz0gIiR7UE59LW1vZHVsZS1zb2NrZXQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldGVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0ZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbmV0cmMgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5ldHJjICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1uZXRyYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLW5ldC1jbWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LW5udHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1ubnRwICs9ICIke1BOfS1tb2R1bGUtdGltZS1sb2NhbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtbm50cCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1waW5nICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLWZpbGVoYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcGluZyArPSAiJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBpbmcgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLWlvLXNvY2tldC1pcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW1pbWUtYmFzZTY0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wb3AzICs9ICIke1BOfS1tb2R1bGUtbmV0LWNtZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcG9wMyArPSAiJHtQTn0tbW9kdWxlLW5ldC1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1uZXQtbmV0cmMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXBvcDMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtcHJvdG9lbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXByb3RvZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1wcm90b2VudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNlcnZlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNlcnZlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc2VydmVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0LWlwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtbWltZS1iYXNlNjQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtbmV0LXNtdHAgKz0gIiR7UE59LW1vZHVsZS1uZXQtY21kIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC1zbXRwICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtc210cCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtaW8tc2VsZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtaW8tc29ja2V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5ldC10aW1lICs9ICIke1BOfS1tb2R1bGUtbmV0LWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXQtdGltZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW5leHQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1uZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9kYm0tZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vayArPSAiJHtQTn0tbW9kdWxlLXRlc3QtbW9yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcGNvZGUgKz0gIiR7UE59LW1vZHVsZS1zdWJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wY29kZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3BlbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kaW5nIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW9wZW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vICs9ICIke1BOfS1tb2R1bGUtYiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vcHMgKz0gIiR7UE59LW1vZHVsZS1vcGNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWRpbmcgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZC1udW1iZXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLW92ZXJsb2FkaW5nICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWQgKz0gIiR7UE59LW1vZHVsZS1tcm8iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtb3ZlcmxvYWQgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1vdmVybG9hZCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBhcmFtcy1jaGVjayArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtbG9jYWxlLW1ha2V0ZXh0LXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJhbXMtY2hlY2sgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyYW1zLWNoZWNrICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wYXJlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGFyZW50ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsZmFxICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxmYXEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tZW5jb2RpbmcgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLWVuY29kaW5nICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLW1tYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLW1tYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tbW1hcCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBlcmxpby1zY2FsYXIgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wZXJsaW8tdmlhICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXZpYS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLW1pbWUtcXVvdGVkcHJpbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcGVybGlvLXZpYS1xdW90ZWRwcmludCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZXNjYXBlcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1jd2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZpbmQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtZmluZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtZmluZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWZ1bmN0aW9ucyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1mdW5jdGlvbnMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLWlucHV0b2JqZWN0cyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtaW5wdXRvYmplY3RzICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1tYW4gKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLW1hbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtc3VicyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtbWFuICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlbGluayArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VsaW5rICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1pbnB1dG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wYXJzZXV0aWxzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGFyc2V1dGlscyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjLWZ1bmN0aW9ucyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtYmFzZXRvICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1iYXNldG8gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy1nZXRvcHRzb28gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtZ2V0b3B0c29vICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1lbmNvZGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MgKz0gIiR7UE59LW1vZHVsZS1maWxlLXNwZWMtZnVuY3Rpb25zIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtZmlsZS10ZW1wIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtZ2V0b3B0c29vIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvYW5zaSArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9hbnNpICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2Fuc2kgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2QtY2hlY2tlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b2NoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b21hbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYy1mdW5jdGlvbnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1pby1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1pby1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1pcGMtb3BlbjMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1wb2QtbWFuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9tYW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbWFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ucm9mZiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtcG9kLW1hbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b25yb2ZmICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvbnJvZmYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3BvZCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9wb2QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXBhcmVudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3J0ZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG9ydGYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXJtICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3Rlcm0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGVybGRvYy10b3RleHQgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRvdGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG90ZXh0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS1wYXJlbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBlcmxkb2MtdG94bWwgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wZXJsZG9jLXRveG1sICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXBsYWludGV4dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtcGxhaW50ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1wbGFpbnRleHQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1wb2QtcGFyc2VyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zZWxlY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNlbGVjdCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ibGFja2JveCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWNoZWNrZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1jaGVja2VyICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtY2hlY2tlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kZWJ1ZyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWRlYnVnICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3RleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN0ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtZHVtcGFzeG1sICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWR1bXBhc3htbCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1kdW1wYXN4bWwgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXdyYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24gKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLWJsYWNrYm94IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1saW5rc2VjdGlvbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLW1ldGhvZHkgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1tZXRob2R5ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtcG9kLWVzY2FwZXMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtYmxhY2tib3giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbGlua3NlY3Rpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXByb2dyZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcmVuZHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyZW5kdG9rZW4gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VyICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJlbmR0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXJzdGFydHRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRleHR0b2tlbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXB1bGxwYXJzZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRva2VuIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnN0YXJ0dG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2Vyc3RhcnR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydGV4dHRva2VuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlcnRleHR0b2tlbiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1wdWxscGFyc2VydG9rZW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1ydGYgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcnRmICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtcHVsbHBhcnNlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXJ0ZiArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zZWFyY2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtY3dkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2VhcmNoICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNlYXJjaCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS1zaW1wbGV0cmVlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtc2ltcGxldHJlZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXNpbXBsZXRyZWUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dGNvbnRlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0Y29udGVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtbWV0aG9keSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRleHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdGV4dC13cmFwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGV4dCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10aWVkb3V0ZmggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdGllZG91dGZoICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZWR1bWIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVkdW1iICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS10cmFuc2NvZGVzbWFydCArPSAiJHtQTn0tbW9kdWxlLWVuY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtcG9kLXNpbXBsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXRyYW5zY29kZXNtYXJ0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUtdHJhbnNjb2Rlc21hcnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUteG1sb3V0c3RyZWFtICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlLXhtbG91dHN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLXBvZC1zaW1wbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXNpbXBsZS14bWxvdXRzdHJlYW0gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LWNvbG9yICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtY29sb3IgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC1jb2xvciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXBvZC10ZXh0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LW92ZXJzdHJpa2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtb3ZlcnN0cmlrZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtZW5jb2RlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQgKz0gIiR7UE59LW1vZHVsZS1wb2Qtc2ltcGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdGV4dC10ZXJtY2FwICs9ICIke1BOfS1tb2R1bGUtcG9kLXRleHQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXRleHQtdGVybWNhcCArPSAiJHtQTn0tbW9kdWxlLXRlcm0tY2FwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC10ZXh0LXRlcm1jYXAgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvZC11c2FnZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb2QtdXNhZ2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9kLXVzYWdlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcG9zaXggKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1wb3NpeCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXBvc2l4ICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtcmUgKz0gIiR7UE59LW1vZHVsZS10ZXJtLWNhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1yZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXJlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLWIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLW9wY29kZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2FmZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zYWZlICs9ICIke1BOfS1tb2R1bGUtdXRmOCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWxpc3QtdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZGJtLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2RibS1maWxlICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VhcmNoLWRpY3QgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWFyY2gtZGljdCArPSAiJHtQTn0tbW9kdWxlLWZlYXR1cmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VhcmNoLWRpY3QgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZWN0c2F2ZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGVjdHNhdmVyICs9ICIke1BOfS1tb2R1bGUtc3ltYm9sIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zZWxmbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNlbGZsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2VsZmxvYWRlciArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2lndHJhcCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc2lndHJhcCArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXNvY2tldCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb2NrZXQgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb3J0ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zb3J0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN0b3JhYmxlICs9ICIke1BOfS1tb2R1bGUtaW8tZmlsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdG9yYWJsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3RvcmFibGUgKz0gIiR7UE59LW1vZHVsZS14c2xvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zdWItdXRpbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtbGlzdC11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN1Yi11dGlsICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3ltYm9sICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLWhvc3RuYW1lICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1mY250bCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtZmlsZS1iYXNlbmFtZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXNvY2tldCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS1zeXMtaG9zdG5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtc3lzLXN5c2xvZyArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXN5cy1zeXNsb2cgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS1zeXMtc3lzbG9nICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1iYXNlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWJhc2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWJhc2UgKz0gIiR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItYmFzZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWZpbGUtcGF0aCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtcGFyYWxsZWxzZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1wYXJhbGxlbHNlc3Npb24gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlLXBhcmFsbGVsc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1jb25zb2xlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItY29uc29sZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWNvbnNvbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtcG9zaXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItZmlsZS1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtZm9ybWF0dGVyLWZpbGUtc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWZvcm1hdHRlci1zZXNzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1mb3JtYXR0ZXItc2Vzc2lvbiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS10YXAtb2JqZWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzLWVudiArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcy1lbnYgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1wYXRoIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtZmlsZS1zcGVjIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLW9iamVjdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLW9iamVjdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtb2JqZWN0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1iZW5jaG1hcmsiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWFnZ3JlZ2F0b3IgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItZ3JhbW1hciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1ncmFtbWFyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci15YW1saXNoLXJlYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1maWxlLWJhc2VuYW1lIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1wcm9jZXNzICs9ICIke1BOfS1tb2R1bGUtaW8taGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXByb2Nlc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1tdWx0aXBsZXhlciArPSAiJHtQTn0tbW9kdWxlLWlvLXNlbGVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLW11bHRpcGxleGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItbXVsdGlwbGV4ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWdyYW1tYXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtYmFpbG91dCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtYmFpbG91dCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtY29tbWVudCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1jb21tZW50ICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1iYWlsb3V0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LWNvbW1lbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtcGxhbiIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQtdGVzdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0ZmFjdG9yeSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHRmYWN0b3J5ICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQteWFtbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdGZhY3RvcnkgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdCArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1yZXN1bHQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wbGFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXBsYW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXByYWdtYSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC1wcmFnbWEgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC10ZXN0ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXRlc3QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC11bmtub3duICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXVua25vd24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXJlc3VsdC15YW1sICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItcmVzdWx0LXlhbWwgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyLWpvYiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1qb2IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXIgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc2NoZWR1bGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItc3Bpbm5lciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zY2hlZHVsZXItc3Bpbm5lciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNjaGVkdWxlci1zcGlubmVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1leGVjdXRhYmxlICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWV4ZWN1dGFibGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZXhlY3V0YWJsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1maWxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvcmZhY3RvcnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWZpbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yLXN0cmVhbSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItZmlsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1oYW5kbGUgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1pdGVyYXRvci1zdHJlYW0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLWhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlciArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlciArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3IiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXBlcmwgKz0gIiR7UE59LW1vZHVsZS10YXAtcGFyc2VyLWl0ZXJhdG9yZmFjdG9yeSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItcHJvY2VzcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZWhhbmRsZXItcGVybCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3ItYXJyYXkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2VoYW5kbGVyLXJhd3RhcCArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItaXRlcmF0b3JmYWN0b3J5IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1yYXd0YXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXNvdXJjZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtYmFzZW5hbWUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1zb3VyY2UgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtcmVhZGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC1yZWFkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtd3JpdGVyICs9ICIke1BOfS1tb2R1bGUtYmFzZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10YXAtcGFyc2VyLXlhbWxpc2gtd3JpdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXIteWFtbGlzaC13cml0ZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1hbnNpY29sb3IgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWFuc2ljb2xvciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY2FwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLWNhcCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1jb21wbGV0ZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlcm0tY29tcGxldGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVybS1yZWFkbGluZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXJtLXJlYWRsaW5lICs9ICIke1BOfS1tb2R1bGUtdGVybS1jYXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyICs9ICIke1BOfS1tb2R1bGUtcGVybGlvIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyLWNvbG9yICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXItY29sb3IgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXItdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zeW1ib2wiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLXRlc3RlciArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1iYXNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLWhhcm5lc3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1oYXJuZXNzICs9ICIke1BOfS1tb2R1bGUtdGFwLXBhcnNlci1hZ2dyZWdhdG9yIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRhcC1wYXJzZXItc291cmNlaGFuZGxlci1wZXJsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtaGFybmVzcyArPSAiJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LWhhcm5lc3MgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtdGVzdC1idWlsZGVyLW1vZHVsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LW1vcmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LW1vcmUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC1tb3JlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QgKz0gIiR7UE59LW1vZHVsZS1maWxlLXRlbXAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0ICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXNpbXBsZSArPSAiJHtQTn0tbW9kdWxlLXRlc3QtYnVpbGRlci1tb2R1bGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlcnVubmVyICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWNhcHR1cmVydW5uZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyLWRlbGVnYXRlICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1kZWxlZ2F0ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LWJ1aWxkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS10ZXN0LXRlc3Rlci1jYXB0dXJlcnVubmVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRlc3QtdGVzdGVyICs9ICIke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXItZGVsZWdhdGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGVzdC10ZXN0ZXIgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYWJicmV2ICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1iYWxhbmNlZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtc2VsZmxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LWJhbGFuY2VkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtYmFsYW5jZWQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtcGFyc2V3b3JkcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC1wYXJzZXdvcmRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtdGFicyArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXRhYnMgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXJlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRleHQtd3JhcCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS10ZXh0LXRhYnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGV4dC13cmFwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10ZXh0LXdyYXAgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQgKz0gIiR7UE59LW1vZHVsZS1jb25maWciCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZCArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1zY2FsYXItdXRpbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWQtcXVldWUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXF1ZXVlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXNjYWxhci11dGlsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkLXNlbWFwaG9yZSArPSAiJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZC1zZW1hcGhvcmUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzICs9ICIke1BOfS1tb2R1bGUteHNsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRocmVhZHMtc2hhcmVkICs9ICIke1BOfS1tb2R1bGUtc2NhbGFyLXV0aWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGhyZWFkcy1zaGFyZWQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aHJlYWRzLXNoYXJlZCArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1hcnJheSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWFycmF5ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1hcnJheSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1maWxlICs9ICIke1BOfS1tb2R1bGUtZmNudGwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWZpbGUgKz0gIiR7UE59LW1vZHVsZS1wb3NpeCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtZmlsZSArPSAiJHtQTn0tbW9kdWxlLXN5bWJvbCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFuZGxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MtcmVnaXN0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLWhhc2gtbmFtZWRjYXB0dXJlICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoLW5hbWVkY2FwdHVyZSArPSAiJHtQTn0tbW9kdWxlLXhzbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1oYXNoICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtaGFzaCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1tZW1vaXplICs9ICIke1BOfS1tb2R1bGUtdGllLWhhc2giCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1yZWZoYXNoICs9ICIke1BOfS1tb2R1bGUtb3ZlcmxvYWQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXJlZmhhc2ggKz0gIiR7UE59LW1vZHVsZS10aWUtaGFzaCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aWUtcmVmaGFzaCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXNjYWxhciArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzLXJlZ2lzdGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdGRoYW5kbGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXRpZS1oYW5kbGUiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN0ZGhhbmRsZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGllLXN1YnN0cmhhc2ggKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpZS1zdWJzdHJoYXNoICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWdtdGltZSArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtZ210aW1lICs9ICIke1BOfS1tb2R1bGUtdGltZS10bSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWdtdGltZSArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLWR5bmFsb2FkZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1oaXJlcyArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtaGlyZXMgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbHRpbWUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLWxvY2FsdGltZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtdG0iCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1sb2NhbHRpbWUgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXBpZWNlICs9ICIke1BOfS1tb2R1bGUtZXhwb3J0ZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLWludGVnZXIiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLW92ZXJsb2FkIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtcGllY2UgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtbG9jYWwiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1waWVjZSArPSAiJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXNlY29uZHMgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS1zZWNvbmRzICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXRpbWUtc2Vjb25kcyArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdGltZS10bSArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS10aW1lLXRtICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstYmlnNSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWJpZzUgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWdiMjMxMiArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLWdiMjMxMiArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstamlzeDAyMDggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1qaXN4MDIwOCArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamsta29yZWFuICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamsta29yZWFuICs9ICIke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamsta29yZWFuICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1waW55aW4gKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWNqay1waW55aW4gKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXN0cm9rZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtY2prLXN0cm9rZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstemh1eWluICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZS1jamstemh1eWluICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWJhc2UiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlLWxvY2FsZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUtbG9jYWxlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1jb25zdGFudCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1keW5hbG9hZGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtY29sbGF0ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLWNvbGxhdGUgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1jb2xsYXRlICs9ICIke1BOfS1tb2R1bGUtd2FybmluZ3MiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplICs9ICIke1BOfS1tb2R1bGUtY29uc3RhbnQiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS1ub3JtYWxpemUgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLW5vcm1hbGl6ZSArPSAiJHtQTn0tbW9kdWxlLXdhcm5pbmdzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWNoYXJuYW1lcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtZmVhdHVyZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWZpbGUtc3BlYyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLWlmIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXN0cmljdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXVuaWNvZGUtbm9ybWFsaXplIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVuaWNvZGUtdWNkICs9ICIke1BOfS1tb2R1bGUtdW5pY29yZSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb2RlLXVjZCArPSAiJHtQTn0tbW9kdWxlLXV0ZjgtaGVhdnkiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdW5pY29kZS11Y2QgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bmljb3JlICs9ICIke1BOfS1tb2R1bGUtaW50ZWdlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11bml2ZXJzYWwgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItZ3JlbnQgKz0gIiR7UE59LW1vZHVsZS1jbGFzcy1zdHJ1Y3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLWV4cG9ydGVyIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItZ3JlbnQgKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1ncmVudCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWNhcnAiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdXNlci1wd2VudCArPSAiJHtQTn0tbW9kdWxlLWNsYXNzLXN0cnVjdCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS1leHBvcnRlciIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11c2VyLXB3ZW50ICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXVzZXItcHdlbnQgKz0gIiR7UE59LW1vZHVsZS13YXJuaW5ncyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11dGY4ICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS11dGY4ICs9ICIke1BOfS1tb2R1bGUtdXRmOC1oZWF2eSIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS12YXJzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24gKz0gIiR7UE59LW1vZHVsZS12ZXJzaW9uLXJlZ2V4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXggKz0gIiR7UE59LW1vZHVsZS1zdHJpY3QiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi1yZWdleCArPSAiJHtQTn0tbW9kdWxlLXZhcnMiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1iIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtY2FycCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbmZpZyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLWNvbnN0YW50IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtaWYiCitSREVQRU5EU18ke1BOfS1tb2R1bGUtdmVyc2lvbi12cHAgKz0gIiR7UE59LW1vZHVsZS1vdmVybG9hZCIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXBvc2l4IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtc3RyaWN0IgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdW5pdmVyc2FsIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXZlcnNpb24tdnBwICs9ICIke1BOfS1tb2R1bGUtdmFycyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZS12ZXJzaW9uLXZwcCArPSAiJHtQTn0tbW9kdWxlLXZlcnNpb24tcmVnZXgiCitSREVQRU5EU18ke1BOfS1tb2R1bGUteHNsb2FkZXIgKz0gIiR7UE59LW1vZHVsZS1jYXJwIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLXhzbG9hZGVyICs9ICIke1BOfS1tb2R1bGUtZHluYWxvYWRlciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ5NzE2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwuaW5jCkBAIC0wLDAgKzEsOCBAQAorU1VNTUFSWSA9ICJQZXJsIHNjcmlwdGluZyBsYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGVybC5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5aW5nO21kNT01YjEyMmEzNmQwZjZkYzU1Mjc5YTBlYmM2OWYzYzYwYiBcCisJCSAgICBmaWxlOi8vQXJ0aXN0aWM7bWQ1PTJlNmZkMjQ3NTMzNWFmODkyNDk0ZmUxZjczMjdiYWYzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuY3Bhbi5vcmcvc3JjLzUuMC8ke0JQfS50YXIueHoiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL0NvbmZpZ3VyZS1tdWx0aWxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvQ29uZmlndXJlLW11bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MjViMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL0NvbmZpZ3VyZS1tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitJbmRleDogcGVybC01LjEyLjMvQ29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9Db25maWd1cmUKKysrKyBwZXJsLTUuMTIuMy9Db25maWd1cmUKK0BAIC0xMzE2LDggKzEzMTYsOSBAQCBsb2NsaWJwdGg9Ii91c3IvbG9jYWwvbGliIC9vcHQvbG9jYWwvbGliCisgbG9jbGlicHRoPSIkbG9jbGlicHRoIC9vcHQvZ251L2xpYiAvdXNyL0dOVS9saWIgL29wdC9HTlUvbGliIgorIAorIDogZ2VuZXJhbCBsb29raW5nIHBhdGggZm9yIGxvY2F0aW5nIGxpYnJhcmllcworLWdsaWJwdGg9Ii9saWIgL3Vzci9saWIgJHhsaWJwdGgiCisrZ2xpYnB0aD0iL2xpYiAvdXNyL2xpYiAvbGliNjQgL3Vzci9saWI2NCAkeGxpYnB0aCIKKyBnbGlicHRoPSIkZ2xpYnB0aCAvdXNyL2Njcy9saWIgL3Vzci91Y2JsaWIgL3Vzci9sb2NhbC9saWIiCisrdGVzdCAtZiAvdXNyL2xpYi8qLWxpbnV4LWdudS9saWJjLnNvICYmIGdsaWJwdGg9Ii91c3IvbGliLyotbGludXgtZ251ICRnbGlicHRoIgorIHRlc3QgLWYgL3Vzci9zaGxpYi9saWJjLnNvICYmIGdsaWJwdGg9Ii91c3Ivc2hsaWIgJGdsaWJwdGgiCisgdGVzdCAtZiAvc2hsaWIvbGliYy5zbyAgICAgJiYgZ2xpYnB0aD0iL3NobGliICRnbGlicHRoIgorIHRlc3QgLWQgL3Vzci9saWI2NCAgICAgICAgICYmIGdsaWJwdGg9IiRnbGlicHRoIC9saWI2NCAvdXNyL2xpYjY0IC91c3IvbG9jYWwvbGliNjQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01NX1VuaXgucG0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01NX1VuaXgucG0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5MmNjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTU1fVW5peC5wbS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6UGVuZGluZworCitUaGUgcGVybC1uYXRpdmUgc2hvdWxkIGJlIHJlbG9jYXRhYmxlIHdoaWxlIHJlLXVzZSBzc3RhdGUtY2FjaGUgZnJvbQorYW5vdGhlciBidWlsZCwgZXNwZWNpYWxseSB0aGUgb3JpZ2luYWwgYnVpbGQgd2FzIHJlbmFtZWQvcmVtb3ZlZC4KKworVG8gZ2V0IHRoZSBNYWtlTWFrZXIucG0gd29ya3MgaW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHBlcmwgd3JhcHBlciBoZXJlCitpbnN0ZWFkIG9mIHJlYWwgcGVybCBiaW5hcnkuCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtLm9yaWcJMjAxMS0wOC0xMiAxNjowNzozMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBwZXJsLTUuMTIuMy9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQkyMDExLTA4LTEyIDE2OjA4OjU2LjAwMDAwMDAwMCArMDgwMAorQEAgLTEwMTksNiArMTAxOSw5IEBACisgICAgIH0KKyAKKyAgICAgZm9yZWFjaCBteSAkbmFtZSAoQCRuYW1lcyl7CisrICAgICAgICAjIEdldHRpbmcgTWFrZU1ha2VyLnBtIHVzZSBwZXJsIHdyYXBwZXIgaW5zdGVhZCBvZiAncGVybC5yZWFsJyBkaXJlY3RseQorKyAgICAgICAgJG5hbWUgPX4gcy9wZXJsXC5yZWFsL3BlcmwvIGlmICgkbmFtZSA9fiAvcGVybFwucmVhbC8pOworKworICAgICAgICAgZm9yZWFjaCBteSAkZGlyIChAJGRpcnMpeworICAgICAgICAgICAgIG5leHQgdW5sZXNzIGRlZmluZWQgJGRpcjsgIyAkc2VsZi0+e1BFUkxfU1JDfSBtYXkgYmUgdW5kZWZpbmVkCisgICAgICAgICAgICAgbXkgKCRhYnMsICR2YWwpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5TSC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUuU0gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMjMzMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvTWFrZWZpbGUuU0gucGF0Y2gKQEAgLTAsMCArMSwzNzQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuU0ggfCAgMTQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKyksIDc4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuU0ggYi9NYWtlZmlsZS5TSAoraW5kZXggMDM0ZDgxMi4uNjdlMDhmZCAxMDA3NTUKKy0tLSBhL01ha2VmaWxlLlNICisrKysgYi9NYWtlZmlsZS5TSAorQEAgLTM5LDEwICszOSwxMCBAQCBjYXNlICIkdXNlc2hycGxpYiIgaW4KKyB0cnVlKQorIAkjIFByZWZpeCBhbGwgcnVucyBvZiAnbWluaXBlcmwnIGFuZCAncGVybCcgd2l0aAorIAkjICRsZGxpYnB0aCBzbyB0aGF0IC4vcGVybCBmaW5kcyAqdGhpcyogc2hhcmVkIGxpYnBlcmwuCistCWNhc2UgIiRMRF9MSUJSQVJZX1BBVEgiIGluCistCScnKSAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgIiA7OworLQkqKSAgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkTERfTElCUkFSWV9QQVRIIiBgIiA7OworLQllc2FjCisrCSNjYXNlICIkTERfTElCUkFSWV9QQVRIIiBpbgorKwkjJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CisrCSMqKSAgIGxkbGlicHRoPSJMRF9MSUJSQVJZX1BBVEg9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkTERfTElCUkFSWV9QQVRIIiBgIiA7OworKwkjZXNhYworIAorIAlwbGRsZmxhZ3M9IiRjY2NkbGZsYWdzIgorIAlzdGF0aWNfbGRmbGFncz0nJworQEAgLTEyMiwxMCArMTIyLDExIEBAIHRydWUpCisgCSAgICAqKQorIAkJZXZhbCAibGRsaWJwdGh2YWw9XCJcJCRsZGxpYnB0aG5hbWVcIiIKKyAKKy0JCWNhc2UgIiRsZGxpYnB0aHZhbCIgaW4KKy0JCScnKSAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKy0JCSopICAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYDpgIHF1b3RlICIkbGRsaWJwdGh2YWwiIGAiIDs7CistCQllc2FjCisrIyBXZSBjb21waWxlIGluIHRoZSBsaWJyYXJ5IHBhdGggaW4gT0UgZnJvbSBjcm9zcy1jb21waWxlLCBzbyBsZXRzIG5vdCBkbyB0aGlzCisrIwkJY2FzZSAiJGxkbGlicHRodmFsIiBpbgorKyMJCScnKSAgbGRsaWJwdGg9IiRsZGxpYnB0aG5hbWU9YCBxdW90ZSAiJHB3ZCIgYCIgOzsKKysjCQkqKSAgIGxkbGlicHRoPSIkbGRsaWJwdGhuYW1lPWAgcXVvdGUgIiRwd2QiIGA6YCBxdW90ZSAiJGxkbGlicHRodmFsIiBgIiA7OworKyMJCWVzYWMKKyAKKyAJCTs7CisgCSAgICBlc2FjCitAQCAtMTQxLDE4ICsxNDIsNyBAQCB0cnVlKQorIAkgICAgIyBJTlNUQUxMIGZpbGUsIHVuZGVyICJCdWlsZGluZyBhIHNoYXJlZCBwZXJsIGxpYnJhcnkiLgorIAkgICAgIyBJZiB0aGVyZSBpcyBubyBwcmUtZXhpc3RpbmcgJGxpYnBlcmwsIHdlIGRvbid0IG5lZWQKKyAJICAgICMgdG8gZG8gYW55dGhpbmcgZnVydGhlci4KKy0JICAgIGlmIHRlc3QgLWYgJGFyY2hsaWIvQ09SRS8kbGlicGVybDsgdGhlbgorLQkJcm0gLWYgcHJlbG9hZAorLQkJY2F0IDw8J0VPVCcgPiBwcmVsb2FkCistIyEgL2Jpbi9zaAorLWxpYj0kMQorLXNoaWZ0CistdGVzdCAtciAkbGliICYmIGV4cG9ydCBMRF9QUkVMT0FEPSIkbGliICRMRF9QUkVMT0FEIgorLWV4ZWMgIiRAIgorLUVPVAorLQkJY2htb2QgNzU1IHByZWxvYWQKKy0JCWxkbGlicHRoPSIkbGRsaWJwdGggYHB3ZGAvcHJlbG9hZCBgcHdkYC8kbGlicGVybCIKKy0JICAgIGZpCisrCSAgICBlY2hvIGxpbnV4IGxpYnJhcmllcyBvdmVyd3JpdHRlbiBieSBjcm9zcy1jb21waWxlIHBhdGNoZXMKKyAJICAgIDs7CisgCW9zMzkwKQl0ZXN0IC1mIC9iaW4vZW52ICYmIGxkbGlicHRoPSIvYmluL2VudiAkbGRsaWJwdGgiCisgCQk7OworQEAgLTU2NiwxMyArNTU2LDIzIEBAIHNwbGludGZpbGVzID0gJChjMSkKKyAJQGVjaG8gYCQoQ0NDTURTUkMpYCAtUyAkKi5jCisgCUBgJChDQ0NNRFNSQylgIC1TICQqLmMKKyAKKy1hbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJCh1bmlkYXRhZmlsZXMpICQocHVibGljKSAkKGR5bmFtaWNfZXh0KSAkKG5vbnhzX2V4dCkgZXh0cmFzLm1ha2UgJChNQU5JRkVTVF9TUlQpCistCUBlY2hvICIgIjsKKy0JQGVjaG8gIglFdmVyeXRoaW5nIGlzIHVwIHRvIGRhdGUuIFR5cGUgJyQoTUFLRSkgdGVzdCcgdG8gcnVuIHRlc3Qgc3VpdGUuIgorKyNhbGw6ICQoRklSU1RNQUtFRklMRSkgJChNSU5JUEVSTF9FWEUpICQoZ2VuZXJhdGVkX3BvZHMpICQocHJpdmF0ZSkgJCh1bmlkYXRhZmlsZXMpICQocHVibGljKSAkKGR5bmFtaWNfZXh0KSAkKG5vbnhzX2V4dCkgZXh0cmFzLm1ha2UgJChNQU5JRkVTVF9TUlQpCisrIwlAZWNobyAiICI7CisrIwlAZWNobyAiCUV2ZXJ5dGhpbmcgaXMgdXAgdG8gZGF0ZS4gVHlwZSAnJChNQUtFKSB0ZXN0JyB0byBydW4gdGVzdCBzdWl0ZS4iCisrCisrYWxsOiAkKEZJUlNUTUFLRUZJTEUpICQoTUlOSVBFUkxfRVhFKSBtaW5pcGVybCAkKHVuaWRhdGFmaWxlcykKKysKKyttb3JlOiAkKGdlbmVyYXRlZF9wb2RzKSAkKHByaXZhdGUpICQocHVibGljKQorKworK21vcmUyOiAkKGR5bmFtaWNfZXh0KQorIAorLSQoTUFOSUZFU1RfU1JUKToJTUFOSUZFU1QgJChQRVJMX0VYRSkKKy0JQCQoUlVOX1BFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgfHwgKGVjaG8gIldBUk5JTkc6IHJlLXNvcnRpbmcgTUFOSUZFU1QiOyBcCistCSAgICAkKFJVTl9QRVJMKSBQb3J0aW5nL21hbmlzb3J0IC1xIC1vIE1BTklGRVNUOyBzaCAtYyB0cnVlKQorK21vcmUzOiAkKG5vbnhzX2V4dCkKKysKKyttb3JlNDogZXh0cmFzLm1ha2UgJChNQU5JRkVTVF9TUlQpCisrCisrJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVAorKwlAJChNSU5JUEVSTCkgUG9ydGluZy9tYW5pc29ydCAtcSB8fCAoZWNobyAiV0FSTklORzogcmUtc29ydGluZyBNQU5JRkVTVCI7IFwKKysJICAgICQoTUlOSVBFUkwpIFBvcnRpbmcvbWFuaXNvcnQgLXEgLW8gTUFOSUZFU1Q7IHNoIC1jIHRydWUpCisgCUB0b3VjaCAkKE1BTklGRVNUX1NSVCkKKyAKKyAuUEhPTlk6IGFsbCB1dGlsaXRpZXMKK0BAIC01ODEsNyArNTgxLDcgQEAgJChNQU5JRkVTVF9TUlQpOglNQU5JRkVTVCAkKFBFUkxfRVhFKQorICMgYnkgbWFrZV9wYXRjaG51bS5wbC4KKyBnaXRfdmVyc2lvbi5oOiBsaWIvQ29uZmlnX2dpdC5wbAorIAorLWxpYi9Db25maWdfZ2l0LnBsOiAkKE1JTklQRVJMX0VYRSkgbWFrZV9wYXRjaG51bS5wbAorK2xpYi9Db25maWdfZ2l0LnBsOiBtYWtlX3BhdGNobnVtLnBsCisgCSQoTUlOSVBFUkwpIG1ha2VfcGF0Y2hudW0ucGwKKyAKKyAjIG1ha2Ugc3VyZSB0aGF0IHdlIHJlY29tcGlsZSBwZXJsLmMgaWYgdGhlIGdpdCB2ZXJzaW9uIGNoYW5nZXMKK0BAIC01OTQsNyArNTk0LDcgQEAgcGVybCQoT0JKX0VYVCk6IGdpdF92ZXJzaW9uLmgKKyAjIGxvYWRpbmcsIHdlIG5lZWQgdG8gYnVpbGQgcGVybCBmaXJzdC4KKyBjYXNlICIkdXNlZGwkc3RhdGljX2N3ZCIgaW4KKyBkZWZpbmV1bmRlZikKKy0gICAgdXRpbF9kZXBzPSckKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgbGliL2F1dG8vQ3dkL0N3ZCQoRExTVUZGSVgpIEZPUkNFJworKyAgICB1dGlsX2RlcHM9JyQoQ09ORklHUE0pIGxpYi9hdXRvL0N3ZC9Dd2QkKERMU1VGRklYKSBGT1JDRScKKyAgICAgOzsKKyBkZWZpbmVkZWZpbmUpCisgICAgIHV0aWxfZGVwcz0nJChQRVJMX0VYRSkgJChDT05GSUdQTSkgRk9SQ0UnCitAQCAtNjA0LDcgKzYwNCw3IEBAIGRlZmluZWRlZmluZSkKKyBlc2FjCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCFHUk9LIVRISVMhCistdXRpbHMvTWFrZWZpbGU6IFwkKE1JTklQRVJMX0VYRSkgXCQoQ09ORklHUE0pIHV0aWxzL01ha2VmaWxlLlBMCisrdXRpbHMvTWFrZWZpbGU6IFwkKENPTkZJR1BNKSB1dGlscy9NYWtlZmlsZS5QTAorIAlcJChNSU5JUEVSTCkgLUlsaWIgdXRpbHMvTWFrZWZpbGUuUEwKKyAKKyB1dGlsaXRpZXM6CXV0aWxzL01ha2VmaWxlICR1dGlsX2RlcHMKK0BAIC02OTksNyArNjk5LDcgQEAgZXNhYworIAorIAorICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworLXBlcmxtYWluLmM6ICQoTUlOSVBFUkxfRVhFKSBleHQvRXh0VXRpbHMtTWluaXBlcmwvcG1fdG9fYmxpYgorK3BlcmxtYWluLmM6IGV4dC9FeHRVdGlscy1NaW5pcGVybC9saWIvRXh0VXRpbHMvTWluaXBlcmwucG0KKyAJJChNSU5JUEVSTCkgLUlsaWIgLU1FeHRVdGlsczo6TWluaXBlcmwgLWUgJ3dyaXRlbWFpbihcInBlcmxtYWluLmMiLCBAQVJHViknIER5bmFMb2FkZXIgJChzdGF0aWNfZXh0KQorIAorICMgVGhlIGZpbGUgZXh0LmxpYnMgaXMgYSBsaXN0IG9mIGxpYnJhcmllcyB0aGF0IG11c3QgYmUgbGlua2VkIGluCitAQCAtNzYwLDcgKzc2MCw3IEBAIFBFUkxFWFBPUlQJCT0gcGVybC5leHAKKyAJOzsKKyAJZXNhYworIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKy1wZXJsLmV4cDogJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAkKENPTkZJR1BNKSAkKFNZTSkgJChTWU1IKQorK3BlcmwuZXhwOiBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpCisgCS4vJChNSU5JUEVSTEVYUCkgbWFrZWRlZi5wbCAtLXNvcnQtZm9sZCBQTEFURk9STT1haXggQ0NfRkxBR1M9IiQoT1BUSU1JWkUpIiA+IHBlcmwuZXhwCisgCisgIU5PIVNVQlMhCitAQCAtNzY5LDcgKzc2OSw3IEBAIG9zMikKKyAJJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgTUlOSVBFUkxFWFAJCT0gbWluaXBlcmwKKyAKKy1wZXJsNS5kZWY6ICQoTUlOSVBFUkxFWFApIG1ha2VkZWYucGwgJChDT05GSUdQTSkgJChTWU0pICQoU1lNSCkgbWluaXBlcmwubWFwCisrcGVybDUuZGVmOiBtYWtlZGVmLnBsICQoQ09ORklHUE0pICQoU1lNKSAkKFNZTUgpIG1pbmlwZXJsLm1hcAorIAkuLyQoTUlOSVBFUkxFWFApIG1ha2VkZWYucGwgUExBVEZPUk09b3MyIC1EUEVSTF9ETEw9JChQRVJMX0RMTCkgQ0NfRkxBR1M9IiQoT1BUSU1JWkUpIiA+IHBlcmw1LmRlZgorIAorICFOTyFTVUJTIQorQEAgLTgyOSw3ICs4MjksNyBAQCAkKExJQlBFUkwpOiAkJiAkKG9iaikgJChEWU5BTE9BREVSKSAkKExJQlBFUkxFWFBPUlQpCisgCXRydWUpCisgCQkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAJcm0gLWYgJEAKKy0JJChMRCkgLW8gJEAgJChTSFJQTERGTEFHUykgJChvYmopICQoRFlOQUxPQURFUikgJChsaWJzKQorKwkkKExEKSAtbyAkQCAkKFNIUlBMREZMQUdTKSAkKG9iaikgJChEWU5BTE9BREVSKSAkKGxpYnMpIC1XbCwtc29uYW1lLGxpYnBlcmwuc28uNQorICFOTyFTVUJTIQorIAkJY2FzZSAiJG9zbmFtZSIgaW4KKyAJCWFpeCkKK0BAIC04NzcsNyArODc3LDkgQEAgJChNSU5JUEVSTF9FWEUpOiBsaWIvYnVpbGRjdXN0b21pemUucGwKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikKKyAJJChDQykgLW8gJChNSU5JUEVSTF9FWEUpICQoQ0xERkxBR1MpICQobWluaV9vYmopICQobGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAhTk8hU1VCUyEKKyAJCTs7CitAQCAtODg1LDcgKzg4Nyw5IEBAIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikKKyAJCSRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwnIU5PIVNVQlMhJworIGxpYi9idWlsZGN1c3RvbWl6ZS5wbDogJCYgJChtaW5pX29iaikgd3JpdGUgICAgbGRjdXN0b21pemUucGwKKyAJJChDQykgLW8gJChNSU5JUEVSTF9FWEUpICQobWluaV9vYmogICAgbGlicykKKy0JJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVCAgICBfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJIyQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1QgICAgX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKyAJJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwgICAgCisgIU5PIVNVQlMhCisgCQk7OworQEAgLTkwNyw3ICs5MTEsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6ICQmICQobWluaV9vYmopIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgCS1Acm0gLWYgbWluaXBlcmwueG9rCisgCSQoQ0MpICQoQ0xERkxBR1MpICQoTkFNRVNQQUNFRkxBR1MpIC1vICQoTUlOSVBFUkxfRVhFKSBcCisgCSAgICAkKG1pbmlfb2JqKSAkKGxpYnMpCistCSQoTERMSUJQVEgpIC4vbWluaXBlcmwkKEhPU1RfRVhFX0VYVCkgLXcgLUlsaWIgLUlkaXN0L0V4cG9ydGVyL2xpYiAtTUV4cG9ydGVyIC1lICc8Pz4nIHx8IHNoIC1jICdlY2hvID4mMiBGYWlsZWQgdG8gYnVpbGQgbWluaXBlcmwuICBQbGVhc2UgcnVuIG1ha2UgbWluaXRlc3Q7IGV4aXQgMScKKysJbXYgLWYgbWluaXBlcmwgbWluaXBlcmwtdGFyZ2V0CisrCWxuIC1zIGhvc3RwZXJsIG1pbmlwZXJsCisrCSMkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisgCSQoTUlOSVBFUkwpIC1mIHdyaXRlX2J1aWxkY3VzdG9taXplLnBsCisgIU5PIVNVQlMhCisgCQk7OworQEAgLTkxOCw3ICs5MjQsOSBAQCBsaWIvYnVpbGRjdXN0b21pemUucGw6IFwkJiBcJChtaW5pX29iaikgd3JpdGVfYnVpbGRjdXN0b21pemUucGwKKyAJLUBybSAtZiBtaW5pcGVybC54b2sKKyAJLUBybSBcJChNSU5JUEVSTF9FWEUpCisgCVwkKExOUykgXCQoSE9TVF9QRVJMKSBcJChNSU5JUEVSTF9FWEUpCistCVwkKExETElCUFRIKSAuL21pbmlwZXJsXCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworKwltdiAtZiBtaW5pcGVybCBtaW5pcGVybC10YXJnZXQKKysJbG4gLXMgaG9zdHBlcmwgbWluaXBlcmwKKysJI1wkKExETElCUFRIKSAuL21pbmlwZXJsXCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAlcJChNSU5JUEVSTCkgLWYgd3JpdGVfYnVpbGRjdXN0b21pemUucGwgJ29zbmFtZScgIiRvc25hbWUiCisgIUdST0shVEhJUyEKKyAJCWVsc2UKK0BAIC05MjcsNyArOTM1LDkgQEAgbGliL2J1aWxkY3VzdG9taXplLnBsOiAkJiAkKG1pbmlfb2JqKSB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorIAktQHJtIC1mIG1pbmlwZXJsLnhvaworIAkkKENDKSAkKENMREZMQUdTKSAtbyAkKE1JTklQRVJMX0VYRSkgXAorIAkgICAgJChtaW5pX29iaikgJChsaWJzKQorLQkkKExETElCUFRIKSAuL21pbmlwZXJsJChIT1NUX0VYRV9FWFQpIC13IC1JbGliIC1JZGlzdC9FeHBvcnRlci9saWIgLU1FeHBvcnRlciAtZSAnPD8+JyB8fCBzaCAtYyAnZWNobyA+JjIgRmFpbGVkIHRvIGJ1aWxkIG1pbmlwZXJsLiAgUGxlYXNlIHJ1biBtYWtlIG1pbml0ZXN0OyBleGl0IDEnCisrCW12IC1mIG1pbmlwZXJsIG1pbmlwZXJsLXRhcmdldAorKwlsbiAtcyBob3N0cGVybCBtaW5pcGVybAorKwkjJChMRExJQlBUSCkgLi9taW5pcGVybCQoSE9TVF9FWEVfRVhUKSAtdyAtSWxpYiAtSWRpc3QvRXhwb3J0ZXIvbGliIC1NRXhwb3J0ZXIgLWUgJzw/PicgfHwgc2ggLWMgJ2VjaG8gPiYyIEZhaWxlZCB0byBidWlsZCBtaW5pcGVybC4gIFBsZWFzZSBydW4gbWFrZSBtaW5pdGVzdDsgZXhpdCAxJworIAkkKE1JTklQRVJMKSAtZiB3cml0ZV9idWlsZGN1c3RvbWl6ZS5wbAorICFOTyFTVUJTIQorIAkJZmkKK0BAIC05NzEsNyArOTgxLDcgQEAgY2FzZSAiJHtvc25hbWV9IiBpbgorIGNhdGFtb3VudCkKKyAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8IUdST0shVEhJUyEKKyAuUEhPTlk6IG1ha2VwcHBvcnQKKy1tYWtlcHBwb3J0OiBcJChNSU5JUEVSTF9FWEUpIFwkKENPTkZJR1BNKQorK21ha2VwcHBvcnQ6IFwkKENPTkZJR1BNKQorIAktQGZvciBmIGluIE1ha2VmaWxlLlBMIFBQUG9ydF9wbS5QTCBQUFBvcnRfeHMuUEwgcHBwb3J0X2guUEw7IGRvIFwKKyAJKGNkIGV4dC9EZXZlbC1QUFBvcnQgJiYgYHB3ZGAvcnVuLnNoIC4uLy4uLyQoTUlOSVBFUkxfRVhFKSAtSS4uLy4uL2xpYiBcJFwkZik7IFwKKyAJZG9uZQorQEAgLTk4MSw3ICs5OTEsNyBAQCBtYWtlcHBwb3J0OiBcJChNSU5JUEVSTF9FWEUpIFwkKENPTkZJR1BNKQorICopCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgLlBIT05ZOiBtYWtlcHBwb3J0CistbWFrZXBwcG9ydDogJChNSU5JUEVSTF9FWEUpICQoQ09ORklHUE0pICQobm9ueHNfZXh0KQorK21ha2VwcHBvcnQ6ICQoQ09ORklHUE0pICQobm9ueHNfZXh0KQorIAkkKE1JTklQRVJMKSBta3BwcG9ydAorIAorICFOTyFTVUJTIQorQEAgLTk5MSwxNiArMTAwMSwxNiBAQCBlc2FjCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCisgCisgLlBIT05ZOiBwcmVwbGlicmFyeQorLXByZXBsaWJyYXJ5OiAkKE1JTklQRVJMX0VYRSkgJChDT05GSUdQTSkgJChQUkVQTElCUkFSWV9MSUJQRVJMKQorK3ByZXBsaWJyYXJ5OiAkKENPTkZJR1BNKSAkKFBSRVBMSUJSQVJZX0xJQlBFUkwpCisgCisgJChDT05GSUdQTV9GUk9NX0NPTkZJR19TSCk6ICQoQ09ORklHUE9EKQorIAorLSQoQ09ORklHUE9EKTogY29uZmlnLnNoICQoTUlOSVBFUkxfRVhFKSBjb25maWdwbSBQb3J0aW5nL0dsb3NzYXJ5IGxpYi9Db25maWdfZ2l0LnBsCisrJChDT05GSUdQT0QpOiBjb25maWcuc2ggY29uZmlncG0gUG9ydGluZy9HbG9zc2FyeSBsaWIvQ29uZmlnX2dpdC5wbAorIAkkKE1JTklQRVJMKSBjb25maWdwbQorIAorIHVuaWRhdGFmaWxlcyAkKHVuaWRhdGFmaWxlcykgcG9kL3Blcmx1bmlwcm9wcy5wb2Q6IHVuaS5kYXRhCisgCistdW5pLmRhdGE6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyt1bmkuZGF0YTogJChDT05GSUdQTSkgbGliL3VuaWNvcmUvbWt0YWJsZXMgJChub254c19leHQpCisgCSQoTUlOSVBFUkwpIGxpYi91bmljb3JlL21rdGFibGVzIC1DIGxpYi91bmljb3JlIC1QIHBvZCAtbWFrZXRlc3QgLW1ha2VsaXN0IC1wCisgIwlDb21tZW50ZWQgb3V0IHNvIGFsd2F5cyBydW5zLCBta3RhYmxlcyBsb29rcyBhdCBmYXIgbW9yZSBmaWxlcyB0aGFuIHdlCisgIwljYW4gaW4gdGhpcyBtYWtlZmlsZSB0byBkZWNpZGUgaWYgbmVlZHMgdG8gcnVuIG9yIG5vdAorQEAgLTEwMDksMTIgKzEwMTksMTIgQEAgdW5pLmRhdGE6ICQoTUlOSVBFUkxfRVhFKSAkKENPTkZJR1BNKSBsaWIvdW5pY29yZS9ta3RhYmxlcyAkKG5vbnhzX2V4dCkKKyAjICQoUEVSTF9FWEUpIGFuZCBleHQgYmVjYXVzZSBwb2RfbGliLnBsIG5lZWRzIERpZ2VzdDo6TUQ1CisgIyBCdXQgYWxzbyB0aGlzIGVuc3VyZXMgdGhhdCBhbGwgZXh0ZW5zaW9ucyBhcmUgYnVpbHQgYmVmb3JlIHdlIHRyeSB0byBzY2FuCisgIyB0aGVtLCB3aGljaCBwaWNrcyB1cCBEZXZlbDo6UFBQb3J0J3MgZG9jdW1lbnRhdGlvbi4KKy1wb2QvcGVybHRvYy5wb2Q6ICQocGVybHRvY19wb2RfcHJlcmVxcykgICQoUEVSTF9FWEUpICQoZXh0KSBwb2QvYnVpbGR0b2MKKy0JJChSVU5fUEVSTCkgLWYgcG9kL2J1aWxkdG9jIC1xCisrcG9kL3Blcmx0b2MucG9kOiAkKHBlcmx0b2NfcG9kX3ByZXJlcXMpICQoZXh0KSBwb2QvYnVpbGR0b2MKKysJJChNSU5JUEVSTCkgLWYgcG9kL2J1aWxkdG9jIC1xCisgCisgcG9kL3BlcmxhcGkucG9kOiBwb2QvcGVybGludGVybi5wb2QKKyAKKy1wb2QvcGVybGludGVybi5wb2Q6ICQoTUlOSVBFUkxfRVhFKSBhdXRvZG9jLnBsIGVtYmVkLmZuYworK3BvZC9wZXJsaW50ZXJuLnBvZDogYXV0b2RvYy5wbCBlbWJlZC5mbmMKKyAJJChNSU5JUEVSTCkgYXV0b2RvYy5wbAorIAorIHBvZC9wZXJsbW9kbGliLnBvZDogJChNSU5JUEVSTF9FWEUpIHBvZC9wZXJsbW9kbGliLlBMIE1BTklGRVNUCitAQCAtMTAyNCw3ICsxMDM0LDcgQEAgcG9kL3Blcmw1MjIwZGVsdGEucG9kOiBwb2QvcGVybGRlbHRhLnBvZAorIAkkKFJNUykgcG9kL3Blcmw1MjIwZGVsdGEucG9kCisgCSQoTE5TKSBwZXJsZGVsdGEucG9kIHBvZC9wZXJsNTIyMGRlbHRhLnBvZAorIAorLWV4dHJhLnBvZHM6ICQoTUlOSVBFUkxfRVhFKQorK2V4dHJhLnBvZHM6CisgCS1AdGVzdCAhIC1mIGV4dHJhLnBvZHMgfHwgcm0gLWYgYGNhdCBleHRyYS5wb2RzYAorIAktQHJtIC1mIGV4dHJhLnBvZHMKKyAJLUBmb3IgeCBpbiBgZ3JlcCAtbCAnXj1bYS16XScgUkVBRE1FLiogfCBncmVwIC12IFJFQURNRS52bXNgIDsgZG8gXAorQEAgLTEwNjgsOCArMTA3OCw3IEBAIEVPVAorICAgICAgICAgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PEVPVAorIAorIGluc3RhbGxfJG5hbWUgaW5zdGFsbC0kbmFtZTogXCQoSU5TVEFMTF9ERVBFTkRFTkNFKSBpbnN0YWxscGVybCBhbGwgaW5zdGFsbG1hbgorLQlcJChSVU5fUEVSTCkgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncyBcJChJTlNUQUxMRkxBR1MpIFwkKFNUUklQRkxBR1MpCistCVwkKFJVTl9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj1cJChERVNURElSKSAkZmxhZ3MKKysJLi9ob3N0cGVybCAtSWZha2VfY29uZmlnX2xpYnJhcnkgLUlsaWIgLU1Db25maWcgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPVwkKERFU1RESVIpICRmbGFncyAgXCQoSU5TVEFMTEZMQUdTKSBcJChTVFJJUEZMQUdTKQorIEVPVAorICAgICBmaQorIAorQEAgLTEwNzksMTEgKzEwODgsNyBAQCBkb25lCisgaWYgdGVzdCAiWCRob3N0cGVybCIgIT0gWDsgdGhlbgorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBpbnN0YWxsLnBlcmw6CSQoSU5TVEFMTF9ERVBFTkRFTkNFKSBpbnN0YWxscGVybAorLQkkKEhPU1RfUEVSTCkgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpICQoU1RSSVBGTEFHUykKKy0JLUB0ZXN0ICEgLXMgZXh0cmFzLmxzdCB8fCAkKE1BS0UpIGV4dHJhcy5pbnN0YWxsCistCistaW5zdGFsbC5tYW46CWFsbCBpbnN0YWxsbWFuCistCSQoSE9TVF9QRVJMKSBpbnN0YWxsbWFuIC0tZGVzdGRpcj0kKERFU1RESVIpICQoSU5TVEFMTEZMQUdTKQorKwkuL2hvc3RwZXJsIC1JZmFrZV9jb25maWdfbGlicmFyeSAtSWxpYiAtTUNvbmZpZyBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorIAorICMgWFhYIEV4cGVyaW1lbnRhbC4gSGFyZHdpcmVkIHZhbHVlcywgYnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKyAjIEV2ZW50dWFsbHkgQ29uZmlndXJlIGNvdWxkIGFzayBmb3Igc29tZSBvZiB0aGVzZSB2YWx1ZXMuCitAQCAtMTEwMSwyNCArMTEwNiw4IEBAIGluc3RhbGwuaHRtbDogYWxsIGluc3RhbGxodG1sCisgZWxzZQorIAkkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyBpbnN0YWxsLnBlcmw6CSQoSU5TVEFMTF9ERVBFTkRFTkNFKSBpbnN0YWxscGVybAorLQkkKFJVTl9QRVJMKSBpbnN0YWxscGVybCAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykgJChTVFJJUEZMQUdTKQorLQktQHRlc3QgISAtcyBleHRyYXMubHN0IHx8IFBBVEg9ImBwd2RgOlwke1BBVEh9IiBQRVJMNUxJQj0iYHB3ZGAvbGliIiBcJChSVU5fUEVSTCkgLUlsaWIgLU1DUEFOIC1lICdAQVJHViYmaW5zdGFsbChAQVJHViknIGBjYXQgZXh0cmFzLmxzdGAKKysJLi9ob3N0cGVybCAtSWZha2VfY29uZmlnX2xpYnJhcnkgLUlsaWIgLU1Db25maWcgaW5zdGFsbHBlcmwgLS1kZXN0ZGlyPSQoREVTVERJUikgJChJTlNUQUxMRkxBR1MpICQoU1RSSVBGTEFHUykKKyAKKy1pbnN0YWxsLm1hbjoJYWxsIGluc3RhbGxtYW4KKy0JJChSVU5fUEVSTCkgaW5zdGFsbG1hbiAtLWRlc3RkaXI9JChERVNURElSKSAkKElOU1RBTExGTEFHUykKKy0KKy0jIFhYWCBFeHBlcmltZW50YWwuIEhhcmR3aXJlZCB2YWx1ZXMsIGJ1dCB1c2VmdWwgZm9yIHRlc3RpbmcuCistIyBFdmVudHVhbGx5IENvbmZpZ3VyZSBjb3VsZCBhc2sgZm9yIHNvbWUgb2YgdGhlc2UgdmFsdWVzLgorLWluc3RhbGwuaHRtbDogYWxsIGluc3RhbGxodG1sCistCS1AdGVzdCAtZiBSRUFETUUudm1zICYmIGNkIHZtcyAmJiAkKExOUykgLi4vUkVBRE1FLnZtcyBSRUFETUVfdm1zLnBvZCAmJiBjZCAuLgorLQkkKFJVTl9QRVJMKSBpbnN0YWxsaHRtbCAgIFwKKy0gICAgICAtLXBvZHJvb3Q9LiAtLXBvZHBhdGg9LiAtLXJlY3Vyc2UgIFwKKy0gICAgICAtLWh0bWxkaXI9JChwcml2bGliKS9odG1sICAgXAorLSAgICAgIC0taHRtbHJvb3Q9JChwcml2bGliKS9odG1sICBcCistICAgICAgLS1zcGxpdGhlYWQ9cG9kL3BlcmxpcGMgICAgIFwKKy0gICAgICAtLXNwbGl0aXRlbT1wb2QvcGVybGZ1bmMgICAgXAorLSAgICAgIC0taWdub3JlPVBvcnRpbmcvTWFpbnRhaW5lcnMucG0sUG9ydGluZy9wdW1wa2luLnBvZCxQb3J0aW5nL3JlcG9zaXRvcnkucG9kIFwKKy0gICAgICAtLXZlcmJvc2UKKyAhTk8hU1VCUyEKKyBmaQorIAorQEAgLTEyMTAsMTMgKzExOTksMTMgQEAgbWFuaWNoZWNrOglGT1JDRQorICMKKyAjIER5bmFMb2FkZXIgbWF5IGJlIG5lZWRlZCBmb3IgZXh0ZW5zaW9ucyB0aGF0IHVzZSBNYWtlZmlsZS5QTC4KKyAKKy0kKERZTkFMT0FERVIpOgkkKE1JTklQRVJMX0VYRSkgbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IEZPUkNFICQobm9ueHNfZXh0KQorKyQoRFlOQUxPQURFUik6IGxpYi9idWlsZGN1c3RvbWl6ZS5wbCBwcmVwbGlicmFyeSBGT1JDRSAkKG5vbnhzX2V4dCkKKyAJJChNSU5JUEVSTCkgbWFrZV9leHQucGwgJEAgJChNQUtFX0VYVF9BUkdTKSBNQUtFPSIkKE1BS0UpIiBMSUJQRVJMX0E9JChMSUJQRVJMKSBMSU5LVFlQRT1zdGF0aWMgJChTVEFUSUNfTERGTEFHUykKKyAKKy1kX2R1bW15ICQoZHluYW1pY19leHQpOgkkKE1JTklQRVJMX0VYRSkgbGliL2J1aWxkY3VzdG9taXplLnBsIHByZXBsaWJyYXJ5IG1ha2VwcHBvcnQgJChEWU5BTE9BREVSKSBGT1JDRSAkKFBFUkxFWFBPUlQpICQoTElCUEVSTCkKKytkX2R1bW15ICQoZHluYW1pY19leHQpOglsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFICQoUEVSTEVYUE9SVCkgJChMSUJQRVJMKQorIAkkKE1JTklQRVJMKSBtYWtlX2V4dC5wbCAkQCAkKE1BS0VfRVhUX0FSR1MpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPWR5bmFtaWMKKyAKKy1zX2R1bW15ICQoc3RhdGljX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFCisrc19kdW1teSAkKHN0YXRpY19leHQpOglsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgbWFrZXBwcG9ydCAkKERZTkFMT0FERVIpIEZPUkNFCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICRAICQoTUFLRV9FWFRfQVJHUykgTUFLRT0iJChNQUtFKSIgTElCUEVSTF9BPSQoTElCUEVSTCkgTElOS1RZUEU9c3RhdGljICQoU1RBVElDX0xERkxBR1MpCisgCisgbl9kdW1teSAkKG5vbnhzX2V4dCk6CSQoTUlOSVBFUkxfRVhFKSBsaWIvYnVpbGRjdXN0b21pemUucGwgcHJlcGxpYnJhcnkgRk9SQ0UKK0BAIC0xNDA1LDE0ICsxMzk0LDE0IEBAIHRlc3RfcHJlcF9wcmU6IHByZXBsaWJyYXJ5IHV0aWxpdGllcyAkKG5vbnhzX2V4dCkKKyAKKyBjYXNlICIkdGFyZ2V0aG9zdCIgaW4KKyAnJykgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSAkKE1JTklQRVJMX0VYRSkgJCh1bmlkYXRhZmlsZXMpICQoUEVSTF9FWEUpIFwKKyt0ZXN0X3ByZXAgdGVzdC1wcmVwOiB0ZXN0X3ByZXBfcHJlICQodW5pZGF0YWZpbGVzKSAkKFBFUkxfRVhFKSBcCisgCSQoZHluYW1pY19leHQpICQoVEVTVF9QRVJMX0RMTCkgcnVudGVzdHMgJChnZW5lcmF0ZWRfcG9kcykKKyAJY2QgdCAmJiAocm0gLWYgJChQRVJMX0VYRSk7ICQoTE5TKSAuLi8kKFBFUkxfRVhFKSAkKFBFUkxfRVhFKSkKKyAKKyAhTk8hU1VCUyEKKyA7OworICopICRzcGl0c2hlbGwgPj4kTWFrZWZpbGUgPDwhR1JPSyFUSElTIQorLXRlc3RfcHJlcCB0ZXN0LXByZXA6IHRlc3RfcHJlcF9wcmUgXCQoTUlOSVBFUkxfRVhFKSBcJCh1bmlkYXRhZmlsZXMpIFwkKFBFUkxfRVhFKSBcCisrdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJCh1bmlkYXRhZmlsZXMpIFwkKFBFUkxfRVhFKSBcCisgCVwkKGR5bmFtaWNfZXh0KSBcJChURVNUX1BFUkxfRExMKSBydW50ZXN0cyBcCisgCVwkKGdlbmVyYXRlZF9wb2RzKQorIAkkdG8gbGlicGVybC4qCitAQCAtMTQ2NSw3ICsxNDU0LDcgQEAgdGVzdF9wcmVwIHRlc3QtcHJlcDogdGVzdF9wcmVwX3ByZSBcJChNSU5JUEVSTF9FWEUpIFwkKHVuaWRhdGFmaWxlcykgXCQoUEVSTF9FWEUKKyBlc2FjCisgCisgJHNwaXRzaGVsbCA+PiRNYWtlZmlsZSA8PCchTk8hU1VCUyEnCistdGVzdF9wcmVwX3Jlb25seTogJChNSU5JUEVSTF9FWEUpICQoUEVSTF9FWEUpICQoZHluYW1pY19leHRfcmUpICQoVEVTVF9QRVJMX0RMTCkKKyt0ZXN0X3ByZXBfcmVvbmx5OiAkKFBFUkxfRVhFKSAkKGR5bmFtaWNfZXh0X3JlKSAkKFRFU1RfUEVSTF9ETEwpCisgCSQoTUlOSVBFUkwpIG1ha2VfZXh0LnBsICQoZHluYW1pY19leHRfcmUpIE1BS0U9IiQoTUFLRSkiIExJQlBFUkxfQT0kKExJQlBFUkwpIExJTktUWVBFPWR5bmFtaWMKKyAJY2QgdCAmJiAocm0gLWYgJChQRVJMX0VYRSk7ICQoTE5TKSAuLi8kKFBFUkxfRVhFKSAkKFBFUkxfRVhFKSkKKyAhTk8hU1VCUyEKK0BAIC0xNTE2LDcgKzE1MDUsNyBAQCAkc3BpdHNoZWxsID4+JE1ha2VmaWxlIDw8JyFOTyFTVUJTIScKKyAKKyAjIENhbid0IGRlcGVuZCBvbiBsaWIvQ29uZmlnLnBtIGJlY2F1c2UgdGhhdCBtaWdodCBiZSB3aGVyZSBtaW5pcGVybAorICMgaXMgY3Jhc2hpbmcuCistbWluaXRlc3Q6ICQoTUlOSVBFUkxfRVhFKQorK21pbml0ZXN0OgorIAktQHRlc3QgLWYgbGliL0NvbmZpZy5wbSB8fCAkKE1BS0UpIGxpYi9Db25maWcucG0gJCh1bmlkYXRhZmlsZXMpCisgCUBlY2hvICIgIgorIAlAZWNobyAiWW91IG1heSBzZWUgc29tZSBpcnJlbGV2YW50IHRlc3QgZmFpbHVyZXMgaWYgeW91IGhhdmUgYmVlbiB1bmFibGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL01ha2VmaWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThlMmUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9NYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDU4IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuMTQuMi9Dcm9zcy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvQ3Jvc3MvTWFrZWZpbGUKKysrKyBwZXJsLTUuMTQuMi9Dcm9zcy9NYWtlZmlsZQorQEAgLTEsNiArMSw3IEBACisgIyMgVG9wbGV2ZWwgTWFrZWZpbGUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIG9mIHBlcmwKKyAKKy1leHBvcnQgVE9QRElSPSR7c2hlbGwgcHdkfQorK292ZXJyaWRlIFRPUERJUj0ke3NoZWxsIHB3ZH0KKytleHBvcnQgVE9QRElSCisgaW5jbHVkZSAkKFRPUERJUikvY29uZmlnCisgZXhwb3J0IENGTEFHUworIGV4cG9ydCBTWVM9JChBUkNIKS0kKE9TKQorQEAgLTEwLDcgKzExLDcgQEAgZXhwb3J0IE9QVElNSVpBVElPTiA9IC1PMgorIAorIGV4cG9ydCBDQyA9ICQoQ1JPU1MpZ2NjCisgZXhwb3J0IENYWCA9ICQoQ1JPU1MpZysrCistZXhwb3J0IExEID0gJChDUk9TUylsZAorK2V4cG9ydCBMRCA9ICQoQ0MpCisgZXhwb3J0IFNUUklQID0gJChDUk9TUylzdHJpcAorIGV4cG9ydCBBUiA9ICQoQ1JPU1MpYXIKKyBleHBvcnQgUkFOTElCID0gJChDUk9TUylyYW5saWIKK0BAIC0zMiwxNyArMzMsNiBAQCBDRkxBR1MrPSQoRlVMTF9PUFRJTUlaQVRJT04pCisgYWxsOgorIAlAZWNobyBQbGVhc2UgcmVhZCB0aGUgUkVBRE1FIGZpbGUgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuCisgCistZ2VuX3BhdGNoOgorLQlkaWZmIC1CYnVyIC4uL01ha2VmaWxlLlNIIE1ha2VmaWxlLlNIID4gTWFrZWZpbGUuU0gucGF0Y2gKKy0JZGlmZiAtQmJ1ciAuLi9pbnN0YWxscGVybCBpbnN0YWxscGVybCA+IGluc3RhbGxwZXJsLnBhdGNoCistCistcGF0Y2g6CistCWNkIC4uIDsgaWYgWyAhIC1lIC4vQ1JPU1NfUEFUQ0hFRCBdIDsgdGhlbiBcCistCQlwYXRjaCAtcDEgPCBDcm9zcy9NYWtlZmlsZS5TSC5wYXRjaDsgXAorLQkJcGF0Y2ggLXAxIDwgQ3Jvc3MvaW5zdGFsbHBlcmwucGF0Y2ggOyBtdiBpbnN0YWxscGVybCBpbnN0YWxscGVybC1wYXRjaGVkOyBcCistCQlzZWQgLWUgJ3MvWFhTVFJJUFhYLyQoU1lTKS8nIGluc3RhbGxwZXJsLXBhdGNoZWQgPiBpbnN0YWxscGVybDsgXAorLQkJdG91Y2ggQ1JPU1NfUEFUQ0hFRCA7IGZpCistCisgcGVybDoKKyAJQGVjaG8gUGVybCBjcm9zcy1idWlsZCBkaXJlY3RvcnkgaXMgJChUT1BESVIpCisgCUBlY2hvIFRhcmdldCBhcmNoIGlzICQoU1lTKQorQEAgLTUyLDExICs0MiwxMSBAQCBwZXJsOgorIAkkKFRPUERJUikvZ2VuZXJhdGVfY29uZmlnX3NoIGNvbmZpZy5zaC0kKFNZUykgPiAkKFRPUERJUikvLi4vY29uZmlnLnNoCisgCWNkICQoVE9QRElSKS8uLiA7IC4vQ29uZmlndXJlIC1TIDsgbWFrZSBkZXBlbmQgOyBtYWtlIDsgbWFrZSBtb3JlCisgCWNkICQoVE9QRElSKS8uLiA7IG1rZGlyIC1wIGZha2VfY29uZmlnX2xpYnJhcnkgOyBjcCBsaWIvQ29uZmlnLnBtIGxpYi9Db25maWdfaGVhdnkucGwgZmFrZV9jb25maWdfbGlicmFyeQorLQljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUyICJQRVJMUlVOPS91c3IvYmluL3BlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKy0JY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlMyAiUEVSTFJVTj0vdXNyL2Jpbi9wZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCistCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTQgIlBFUkxSVU49L3Vzci9iaW4vcGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorKwljZCAkKFRPUERJUikvLi4gOyAkKE1BS0UpIG1vcmUyICJQRVJMUlVOPWhvc3RwZXJsIC1JJChUT1BESVIpLy4uL2Zha2VfY29uZmlnX2xpYnJhcnkgLU1Db25maWciCisrCWNkICQoVE9QRElSKS8uLiA7ICQoTUFLRSkgbW9yZTMgIlBFUkxSVU49aG9zdHBlcmwgLUkkKFRPUERJUikvLi4vZmFrZV9jb25maWdfbGlicmFyeSAtTUNvbmZpZyIKKysJY2QgJChUT1BESVIpLy4uIDsgJChNQUtFKSBtb3JlNCAiUEVSTFJVTj1ob3N0cGVybCAtSSQoVE9QRElSKS8uLi9mYWtlX2NvbmZpZ19saWJyYXJ5IC1NQ29uZmlnIgorIAljZCAkKFRPUERJUikvLi4gOyBybSAtcmYgaW5zdGFsbF9tZV9oZXJlCistCWNkICQoVE9QRElSKS8uLiA7IG1ha2UgaW5zdGFsbC1zdHJpcAorKyMJY2QgJChUT1BESVIpLy4uIDsgbWFrZSBpbnN0YWxsLXN0cmlwCisgCWNkICQoVE9QRElSKS8uLiA7IHNoIC14IENyb3NzL3dhcnAKKyAKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiNTA0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoCkBAIC0wLDAgKzEsMTIyMSBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgcnVubmluZyB0aGUgQ29uZmlndXJlIHNjcmlwdC4gSXQgaG9sZHMgYWxsIHRoZQorIyBkZWZpbml0aW9ucyBmaWd1cmVkIG91dCBieSBDb25maWd1cmUuIFNob3VsZCB5b3UgbW9kaWZ5IG9uZSBvZiB0aGVzZSB2YWx1ZXMsCisjIGRvIG5vdCBmb3JnZXQgdG8gcHJvcGFnYXRlIHlvdXIgY2hhbmdlcyBieSBydW5uaW5nICJDb25maWd1cmUgLWRlciIuIFlvdSBtYXkKKyMgaW5zdGVhZCBjaG9vc2UgdG8gcnVuIGVhY2ggb2YgdGhlIC5TSCBmaWxlcyBieSB5b3Vyc2VsZiwgb3IgIkNvbmZpZ3VyZSAtUyIuCisjCisKKyMgUGFja2FnZSBuYW1lICAgICAgOiBwZXJsNQorIyBTb3VyY2UgZGlyZWN0b3J5ICA6IC4KKyMgQ29uZmlndXJhdGlvbiB0aW1lOiBUaHUgSnVuIDE4IDA1OjM3OjI3IFVUQyAyMDE1CisjIENvbmZpZ3VyZWQgYnkgICAgIDogT3BlbiBFbWJlZGRlZAorIyBUYXJnZXQgc3lzdGVtICAgICA6IGxpbnV4IHFlbXV4ODYtNjQgMy4xOS41LXlvY3RvLXN0YW5kYXJkICMxIHNtcCBwcmVlbXB0IHR1ZSBqdW4gMTYgMDA6Mjg6MTcgcGR0IDIwMTUgeDg2XzY0IGdudWxpbnV4CisKKzogQ29uZmlndXJlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCitjb25maWdfYXJnMD0nQ29uZmlndXJlJworY29uZmlnX2FyZ3M9Jy1kZXMgLURvcHRpbWl6ZT0tTzIgLURteWhvc3RuYW1lPWxvY2FsaG9zdCAtRHBlcmxhZG1pbj1yb290QGxvY2FsaG9zdCAtRGNjPWdjYyAtRGNmX2J5PU9wZW4gRW1iZWRkZWQgLURpbnN0YWxscHJlZml4PUBFWEVDUFJFRklYQCAtRHByZWZpeD1ARVhFQ1BSRUZJWEAgLUR2ZW5kb3JwcmVmaXg9QEVYRUNQUkVGSVhAIC1Ec2l0ZXByZWZpeD1ARVhFQ1BSRUZJWEAgLURvdGhlcmxpYmRpcnM9QExJQkRJUkAvcGVybC81LjIyLjAgLUR1c2VzaHJwbGliIC1EdXNldGhyZWFkcyAtRHVzZWl0aHJlYWRzIC1EdXNlbGFyZ2VmaWxlcyAtVWRfZG9zdWlkIC1EZF9zZW1jdGxfc2VtdW4gLVVpX2RiIC1VaV9uZGJtIC1VaV9nZGJtIC1EaV9zaGFkb3cgLURpX3N5c2xvZyAtRG1hbjNleHQ9M3BtIC1EdXNlcGVybGlvIC1EaW5zdGFsbHVzcmJpbnBlcmwgLVViaW5jb21wYXQ1MDA1IC1VdmVyc2lvbm9ubHkgLURwYWdlcj1AVVNSQklOQC9sZXNzIC1pc3InCitjb25maWdfYXJnYz0yOAorY29uZmlnX2FyZzE9Jy1kZXMnCitjb25maWdfYXJnMj0nLURvcHRpbWl6ZT0tTzInCitjb25maWdfYXJnMz0nLURteWhvc3RuYW1lPWxvY2FsaG9zdCcKK2NvbmZpZ19hcmc0PSctRHBlcmxhZG1pbj1yb290QGxvY2FsaG9zdCcKK2NvbmZpZ19hcmc1PSctRGNjPWdjYycKK2NvbmZpZ19hcmc2PSctRGNmX2J5PU9wZW4gRW1iZWRkZWQnCitjb25maWdfYXJnNz0nLURpbnN0YWxscHJlZml4PUBFWEVDUFJFRklYQCcKK2NvbmZpZ19hcmc4PSctRHByZWZpeD1ARVhFQ1BSRUZJWEAnCitjb25maWdfYXJnOT0nLUR2ZW5kb3JwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzEwPSctRHNpdGVwcmVmaXg9QEVYRUNQUkVGSVhAJworY29uZmlnX2FyZzExPSctRG90aGVybGliZGlycz1ATElCRElSQC9wZXJsLzUuMjIuMCcKK2NvbmZpZ19hcmcxMj0nLUR1c2VzaHJwbGliJworY29uZmlnX2FyZzEzPSctRHVzZXRocmVhZHMnCitjb25maWdfYXJnMTQ9Jy1EdXNlaXRocmVhZHMnCitjb25maWdfYXJnMTU9Jy1EdXNlbGFyZ2VmaWxlcycKK2NvbmZpZ19hcmcxNj0nLVVkX2Rvc3VpZCcKK2NvbmZpZ19hcmcxNz0nLURkX3NlbWN0bF9zZW11bicKK2NvbmZpZ19hcmcxOD0nLVVpX2RiJworY29uZmlnX2FyZzE5PSctVWlfbmRibScKK2NvbmZpZ19hcmcyMD0nLVVpX2dkYm0nCitjb25maWdfYXJnMjE9Jy1EaV9zaGFkb3cnCitjb25maWdfYXJnMjI9Jy1EaV9zeXNsb2cnCitjb25maWdfYXJnMjM9Jy1EbWFuM2V4dD0zcG0nCitjb25maWdfYXJnMjQ9Jy1EdXNlcGVybGlvJworY29uZmlnX2FyZzI1PSctRGluc3RhbGx1c3JiaW5wZXJsJworY29uZmlnX2FyZzI2PSctVWJpbmNvbXBhdDUwMDUnCitjb25maWdfYXJnMjc9Jy1VdmVyc2lvbm9ubHknCitjb25maWdfYXJnMjg9Jy1EcGFnZXI9QFVTUkJJTkAvbGVzcyAtaXNyJworCitBdXRob3I9JycKK0RhdGU9JycKK0hlYWRlcj0nJworSWQ9JycKK0xvY2tlcj0nJworTG9nPScnCitSQ1NmaWxlPScnCitSZXZpc2lvbj0nJworU291cmNlPScnCitTdGF0ZT0nJworX2E9Jy5hJworX2V4ZT0nJworX289Jy5vJworYWZzPSdmYWxzZScKK2Fmc3Jvb3Q9Jy9hZnMnCithbGlnbmJ5dGVzPSc4JworYW5zaTJrbnI9JycKK2FwaG9zdG5hbWU9JycKK2FwaV9yZXZpc2lvbj0nNScKK2FwaV9zdWJ2ZXJzaW9uPScwJworYXBpX3ZlcnNpb249JzIyJworYXBpX3ZlcnNpb25zdHJpbmc9JzUuMjIuMCcKK2FyPSdhcicKK2FyY2hsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobGliZXhwPSdAU1RBR0lOR0RJUkBATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworYXJjaGxpYl9leHA9J0BMSUJESVJAL3BlcmwvNS4yMi4wL0BBUkNIQC10aHJlYWQtbXVsdGknCithcmNobmFtZTY0PScnCithcmNobmFtZT0nQEFSQ0hALXRocmVhZC1tdWx0aScKK2FyY2hvYmpzPScnCithc2N0aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19CX1NCJworYXdrPSdhd2snCitiYXNlcmV2PSc1LjAnCitiYXNoPScnCitiaW49J0BVU1JCSU5AJworYmluX0VMRj0nZGVmaW5lJworYmluZXhwPSdAVVNSQklOQCcKK2Jpc29uPSdiaXNvbicKK2J5YWNjPSdieWFjYycKK2M9JycKK2Nhc3RmbGFncz0nMCcKK2NhdD0nY2F0JworY2M9J2djYycKK2NjY2RsZmxhZ3M9Jy1mUElDJworY2NkbGZsYWdzPSctV2wsLUUgLVdsLC1ycGF0aCxATElCRElSQC9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpL0NPUkUnCitjY2ZsYWdzPSctRF9SRUVOVFJBTlQgLURfR05VX1NPVVJDRSAtZndyYXB2IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1waXBlIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9GT1JUSUZZX1NPVVJDRT0yJworY2NmbGFnc191c2VsYXJnZWZpbGVzPSctRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQnCitjY25hbWU9J2djYycKK2Njc3ltYm9scz0nJworY2N2ZXJzaW9uPScnCitjZl9ieT0nT3BlbiBFbWJlZGRlZCcKK2NmX2VtYWlsPSdPcGVuIEVtYmVkZGVkQGxvY2FsaG9zdC5sb2NhbGRvbWFpbicKK2NmX3RpbWU9J1RodSBKdW4gMTggMDU6Mzc6MjcgVVRDIDIwMTUnCitjaGFyYml0cz0nOCcKK2NoYXJzaXplPScxJworY2hncnA9JycKK2NobW9kPSdjaG1vZCcKK2Nob3duPScnCitjbG9ja3R5cGU9J2Nsb2NrX3QnCitjb21tPSdjb21tJworY29tcHJlc3M9JycKK2NvbnRhaW5zPSdncmVwJworY3A9J2NwJworY3Bpbz0nJworY3BwPSdjcHAnCitjcHBfc3R1ZmY9JzQyJworY3BwY2NzeW1ib2xzPScnCitjcHBmbGFncz0nLURfUkVFTlRSQU5UIC1EX0dOVV9TT1VSQ0UgLWZ3cmFwdiAtZm5vLXN0cmljdC1hbGlhc2luZyAtcGlwZScKK2NwcGxhc3Q9Jy0nCitjcHBtaW51cz0nLScKK2NwcHJ1bj0nZ2NjICAtRScKK2NwcHN0ZGluPSdnY2MgIC1FJworY3J5cHRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfQ0NTJworY3J5cHRsaWI9JycKK2NzaD0nY3NoJworY3Rlcm1pZF9yX3Byb3RvPScwJworY3RpbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfU0InCitkX0djb252ZXJ0PSdnY3Z0KCh4KSwobiksKGIpKScKK2RfUFJJRVVsZGJsPSdkZWZpbmUnCitkX1BSSUZVbGRibD0nZGVmaW5lJworZF9QUklHVWxkYmw9J2RlZmluZScKK2RfUFJJWFU2ND0nZGVmaW5lJworZF9QUklkNjQ9J2RlZmluZScKK2RfUFJJZWxkYmw9J2RlZmluZScKK2RfUFJJZmxkYmw9J2RlZmluZScKK2RfUFJJZ2xkYmw9J2RlZmluZScKK2RfUFJJaTY0PSdkZWZpbmUnCitkX1BSSW82ND0nZGVmaW5lJworZF9QUkl1NjQ9J2RlZmluZScKK2RfUFJJeDY0PSdkZWZpbmUnCitkX1NDTmZsZGJsPSdkZWZpbmUnCitkX19md2Fsaz0ndW5kZWYnCitkX2FjY2Vzcz0nZGVmaW5lJworZF9hY2Nlc3N4PSd1bmRlZicKK2RfYWNvc2g9J2RlZmluZScKK2RfYWludGw9J3VuZGVmJworZF9hbGFybT0nZGVmaW5lJworZF9hcmNobGliPSdkZWZpbmUnCitkX2FzY3RpbWU2ND0ndW5kZWYnCitkX2FzY3RpbWVfcj0nZGVmaW5lJworZF9hc2luaD0nZGVmaW5lJworZF9hdGFuaD0nZGVmaW5lJworZF9hdG9sZj0ndW5kZWYnCitkX2F0b2xsPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9kZXByZWNhdGVkPSdkZWZpbmUnCitkX2F0dHJpYnV0ZV9mb3JtYXQ9J2RlZmluZScKK2RfYXR0cmlidXRlX21hbGxvYz0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbm9ubnVsbD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfbm9yZXR1cm49J2RlZmluZScKK2RfYXR0cmlidXRlX3B1cmU9J2RlZmluZScKK2RfYXR0cmlidXRlX3VudXNlZD0nZGVmaW5lJworZF9hdHRyaWJ1dGVfd2Fybl91bnVzZWRfcmVzdWx0PSdkZWZpbmUnCitkX2JhY2t0cmFjZT0nZGVmaW5lJworZF9iY21wPSdkZWZpbmUnCitkX2Jjb3B5PSdkZWZpbmUnCitkX2JzZD0ndW5kZWYnCitkX2JzZGdldHBncnA9J3VuZGVmJworZF9ic2RzZXRwZ3JwPSd1bmRlZicKK2RfYnVpbHRpbl9jaG9vc2VfZXhwcj0nZGVmaW5lJworZF9idWlsdGluX2V4cGVjdD0nZGVmaW5lJworZF9iemVybz0nZGVmaW5lJworZF9jOTlfdmFyaWFkaWNfbWFjcm9zPSdkZWZpbmUnCitkX2Nhc3RpMzI9J2RlZmluZScKK2RfY2FzdG5lZz0nZGVmaW5lJworZF9jYnJ0PSdkZWZpbmUnCitkX2NoYXJ2c3ByPSd1bmRlZicKK2RfY2hvd249J2RlZmluZScKK2RfY2hyb290PSdkZWZpbmUnCitkX2Noc2l6ZT0ndW5kZWYnCitkX2NsYXNzPSd1bmRlZicKK2RfY2xlYXJlbnY9J2RlZmluZScKK2RfY2xvc2VkaXI9J2RlZmluZScKK2RfY21zZ2hkcl9zPSdkZWZpbmUnCitkX2NvbnN0PSdkZWZpbmUnCitkX2NvcHlzaWduPSdkZWZpbmUnCitkX2NvcHlzaWdubD0nZGVmaW5lJworZF9jcGx1c3BsdXM9J3VuZGVmJworZF9jcnlwdD0nZGVmaW5lJworZF9jcnlwdF9yPSdkZWZpbmUnCitkX2NzaD0ndW5kZWYnCitkX2N0ZXJtaWQ9J2RlZmluZScKK2RfY3Rlcm1pZF9yPSd1bmRlZicKK2RfY3RpbWU2ND0ndW5kZWYnCitkX2N0aW1lX3I9J2RlZmluZScKK2RfY3VzZXJpZD0nZGVmaW5lJworZF9kYmxfZGlnPSdkZWZpbmUnCitkX2RibWluaXRwcm90bz0nZGVmaW5lJworZF9kaWZmdGltZTY0PSd1bmRlZicKK2RfZGlmZnRpbWU9J2RlZmluZScKK2RfZGlyX2RkX2ZkPSd1bmRlZicKK2RfZGlyZmQ9J2RlZmluZScKK2RfZGlybmFtbGVuPSd1bmRlZicKK2RfZGxhZGRyPSdkZWZpbmUnCitkX2RsZXJyb3I9J2RlZmluZScKK2RfZGxvcGVuPSdkZWZpbmUnCitkX2Rsc3ltdW49J3VuZGVmJworZF9kb3N1aWQ9J3VuZGVmJworZF9kcmFuZDQ4X3I9J2RlZmluZScKK2RfZHJhbmQ0OHByb3RvPSdkZWZpbmUnCitkX2R1cDI9J2RlZmluZScKK2RfZWFjY2Vzcz0nZGVmaW5lJworZF9lbmRncmVudD0nZGVmaW5lJworZF9lbmRncmVudF9yPSd1bmRlZicKK2RfZW5kaGVudD0nZGVmaW5lJworZF9lbmRob3N0ZW50X3I9J3VuZGVmJworZF9lbmRuZW50PSdkZWZpbmUnCitkX2VuZG5ldGVudF9yPSd1bmRlZicKK2RfZW5kcGVudD0nZGVmaW5lJworZF9lbmRwcm90b2VudF9yPSd1bmRlZicKK2RfZW5kcHdlbnQ9J2RlZmluZScKK2RfZW5kcHdlbnRfcj0ndW5kZWYnCitkX2VuZHNlbnQ9J2RlZmluZScKK2RfZW5kc2VydmVudF9yPSd1bmRlZicKK2RfZW9mbmJsaz0nZGVmaW5lJworZF9lcmY9J2RlZmluZScKK2RfZXJmYz0nZGVmaW5lJworZF9ldW5pY2U9J3VuZGVmJworZF9leHAyPSdkZWZpbmUnCitkX2V4cG0xPSdkZWZpbmUnCitkX2Zhc3RzdGRpbz0ndW5kZWYnCitkX2ZjaGRpcj0nZGVmaW5lJworZF9mY2htb2Q9J2RlZmluZScKK2RfZmNob3duPSdkZWZpbmUnCitkX2ZjbnRsPSdkZWZpbmUnCitkX2ZjbnRsX2Nhbl9sb2NrPSdkZWZpbmUnCitkX2ZkX21hY3Jvcz0nZGVmaW5lJworZF9mZF9zZXQ9J2RlZmluZScKK2RfZmRpbT0nZGVmaW5lJworZF9mZHNfYml0cz0nZGVmaW5lJworZF9mZWdldHJvdW5kPSdkZWZpbmUnCitkX2ZnZXRwb3M9J2RlZmluZScKK2RfZmluaXRlPSdkZWZpbmUnCitkX2Zpbml0ZWw9J2RlZmluZScKK2RfZmxleGZuYW09J2RlZmluZScKK2RfZmxvY2s9J2RlZmluZScKK2RfZmxvY2twcm90bz0nZGVmaW5lJworZF9mbWE9J2RlZmluZScKK2RfZm1heD0nZGVmaW5lJworZF9mbWluPSdkZWZpbmUnCitkX2Zvcms9J2RlZmluZScKK2RfZnBfY2xhc3M9J3VuZGVmJworZF9mcF9jbGFzc2lmeT0ndW5kZWYnCitkX2ZwX2NsYXNzbD0ndW5kZWYnCitkX2ZwYXRoY29uZj0nZGVmaW5lJworZF9mcGNsYXNzPSd1bmRlZicKK2RfZnBjbGFzc2lmeT0nZGVmaW5lJworZF9mcGNsYXNzbD0ndW5kZWYnCitkX2ZwZ2V0cm91bmQ9J3VuZGVmJworZF9mcG9zNjRfdD0ndW5kZWYnCitkX2ZyZXhwbD0nZGVmaW5lJworZF9mc19kYXRhX3M9J3VuZGVmJworZF9mc2Vla289J2RlZmluZScKK2RfZnNldHBvcz0nZGVmaW5lJworZF9mc3RhdGZzPSdkZWZpbmUnCitkX2ZzdGF0dmZzPSdkZWZpbmUnCitkX2ZzeW5jPSdkZWZpbmUnCitkX2Z0ZWxsbz0nZGVmaW5lJworZF9mdGltZT0ndW5kZWYnCitkX2Z1dGltZXM9J2RlZmluZScKK2RfZ2RibV9uZGJtX2hfdXNlc19wcm90b3R5cGVzPSd1bmRlZicKK2RfZ2RibW5kYm1faF91c2VzX3Byb3RvdHlwZXM9J2RlZmluZScKK2RfZ2V0YWRkcmluZm89J2RlZmluZScKK2RfZ2V0Y3dkPSdkZWZpbmUnCitkX2dldGVzcHduYW09J3VuZGVmJworZF9nZXRmc3N0YXQ9J3VuZGVmJworZF9nZXRncmVudD0nZGVmaW5lJworZF9nZXRncmVudF9yPSdkZWZpbmUnCitkX2dldGdyZ2lkX3I9J2RlZmluZScKK2RfZ2V0Z3JuYW1fcj0nZGVmaW5lJworZF9nZXRncnBzPSdkZWZpbmUnCitkX2dldGhieWFkZHI9J2RlZmluZScKK2RfZ2V0aGJ5bmFtZT0nZGVmaW5lJworZF9nZXRoZW50PSdkZWZpbmUnCitkX2dldGhuYW1lPSdkZWZpbmUnCitkX2dldGhvc3RieWFkZHJfcj0nZGVmaW5lJworZF9nZXRob3N0YnluYW1lX3I9J2RlZmluZScKK2RfZ2V0aG9zdGVudF9yPSdkZWZpbmUnCitkX2dldGhvc3Rwcm90b3M9J2RlZmluZScKK2RfZ2V0aXRpbWVyPSdkZWZpbmUnCitkX2dldGxvZ2luPSdkZWZpbmUnCitkX2dldGxvZ2luX3I9J2RlZmluZScKK2RfZ2V0bW50PSd1bmRlZicKK2RfZ2V0bW50ZW50PSdkZWZpbmUnCitkX2dldG5hbWVpbmZvPSdkZWZpbmUnCitkX2dldG5ieWFkZHI9J2RlZmluZScKK2RfZ2V0bmJ5bmFtZT0nZGVmaW5lJworZF9nZXRuZW50PSdkZWZpbmUnCitkX2dldG5ldGJ5YWRkcl9yPSdkZWZpbmUnCitkX2dldG5ldGJ5bmFtZV9yPSdkZWZpbmUnCitkX2dldG5ldGVudF9yPSdkZWZpbmUnCitkX2dldG5ldHByb3Rvcz0nZGVmaW5lJworZF9nZXRwYWdzej0nZGVmaW5lJworZF9nZXRwYnluYW1lPSdkZWZpbmUnCitkX2dldHBieW51bWJlcj0nZGVmaW5lJworZF9nZXRwZW50PSdkZWZpbmUnCitkX2dldHBnaWQ9J2RlZmluZScKK2RfZ2V0cGdycDI9J3VuZGVmJworZF9nZXRwZ3JwPSdkZWZpbmUnCitkX2dldHBwaWQ9J2RlZmluZScKK2RfZ2V0cHJpb3I9J2RlZmluZScKK2RfZ2V0cHJvdG9ieW5hbWVfcj0nZGVmaW5lJworZF9nZXRwcm90b2J5bnVtYmVyX3I9J2RlZmluZScKK2RfZ2V0cHJvdG9lbnRfcj0nZGVmaW5lJworZF9nZXRwcm90b3Byb3Rvcz0nZGVmaW5lJworZF9nZXRwcnB3bmFtPSd1bmRlZicKK2RfZ2V0cHdlbnQ9J2RlZmluZScKK2RfZ2V0cHdlbnRfcj0nZGVmaW5lJworZF9nZXRwd25hbV9yPSdkZWZpbmUnCitkX2dldHB3dWlkX3I9J2RlZmluZScKK2RfZ2V0c2J5bmFtZT0nZGVmaW5lJworZF9nZXRzYnlwb3J0PSdkZWZpbmUnCitkX2dldHNlbnQ9J2RlZmluZScKK2RfZ2V0c2VydmJ5bmFtZV9yPSdkZWZpbmUnCitkX2dldHNlcnZieXBvcnRfcj0nZGVmaW5lJworZF9nZXRzZXJ2ZW50X3I9J2RlZmluZScKK2RfZ2V0c2VydnByb3Rvcz0nZGVmaW5lJworZF9nZXRzcG5hbT0nZGVmaW5lJworZF9nZXRzcG5hbV9yPSdkZWZpbmUnCitkX2dldHRpbWVvZD0nZGVmaW5lJworZF9nbXRpbWU2ND0ndW5kZWYnCitkX2dtdGltZV9yPSdkZWZpbmUnCitkX2dudWxpYmM9J2RlZmluZScKK2RfZ3JwYXNzd2Q9J2RlZmluZScKK2RfaGFzbW50b3B0PSdkZWZpbmUnCitkX2h0b25sPSdkZWZpbmUnCitkX2h5cG90PSdkZWZpbmUnCitkX2lsb2diPSdkZWZpbmUnCitkX2lsb2dibD0nZGVmaW5lJworZF9pbmNfdmVyc2lvbl9saXN0PSd1bmRlZicKK2RfaW5kZXg9J3VuZGVmJworZF9pbmV0YXRvbj0nZGVmaW5lJworZF9pbmV0bnRvcD0nZGVmaW5lJworZF9pbmV0cHRvbj0nZGVmaW5lJworZF9pbnQ2NF90PSdkZWZpbmUnCitkX2lwX21yZXE9J2RlZmluZScKK2RfaXBfbXJlcV9zb3VyY2U9J2RlZmluZScKK2RfaXB2Nl9tcmVxPSdkZWZpbmUnCitkX2lwdjZfbXJlcV9zb3VyY2U9J3VuZGVmJworZF9pc2FzY2lpPSdkZWZpbmUnCitkX2lzYmxhbms9J2RlZmluZScKK2RfaXNmaW5pdGU9J2RlZmluZScKK2RfaXNmaW5pdGVsPSd1bmRlZicKK2RfaXNpbmY9J2RlZmluZScKK2RfaXNpbmZsPSdkZWZpbmUnCitkX2lzbGVzcz0ndW5kZWYnCitkX2lzbmFuPSdkZWZpbmUnCitkX2lzbmFubD0nZGVmaW5lJworZF9pc25vcm1hbD0nZGVmaW5lJworZF9qMD0nZGVmaW5lJworZF9qMGw9J2RlZmluZScKK2Rfa2lsbHBnPSdkZWZpbmUnCitkX2xjX21vbmV0YXJ5XzIwMDg9J2RlZmluZScKK2RfbGNob3duPSdkZWZpbmUnCitkX2xkYmxfZGlnPSdkZWZpbmUnCitkX2xkZXhwbD0nZGVmaW5lJworZF9sZ2FtbWE9J2RlZmluZScKK2RfbGdhbW1hX3I9J2RlZmluZScKK2RfbGlibV9saWJfdmVyc2lvbj0nZGVmaW5lJworZF9saWJuYW1lX3VuaXF1ZT0ndW5kZWYnCitkX2xpbms9J2RlZmluZScKK2RfbGxyaW50PSdkZWZpbmUnCitkX2xscmludGw9J2RlZmluZScKK2RfbGxyb3VuZD0nZGVmaW5lJworZF9sbHJvdW5kbD0nZGVmaW5lJworZF9sb2NhbHRpbWU2ND0ndW5kZWYnCitkX2xvY2FsdGltZV9yPSdkZWZpbmUnCitkX2xvY2FsdGltZV9yX25lZWRzX3R6c2V0PSdkZWZpbmUnCitkX2xvY2NvbnY9J2RlZmluZScKK2RfbG9ja2Y9J2RlZmluZScKK2RfbG9nMXA9J2RlZmluZScKK2RfbG9nMj0nZGVmaW5lJworZF9sb2diPSdkZWZpbmUnCitkX2xvbmdkYmw9J2RlZmluZScKK2RfbG9uZ2xvbmc9J2RlZmluZScKK2RfbHJpbnQ9J2RlZmluZScKK2RfbHJpbnRsPSdkZWZpbmUnCitkX2xyb3VuZD0nZGVmaW5lJworZF9scm91bmRsPSdkZWZpbmUnCitkX2xzZWVrcHJvdG89J2RlZmluZScKK2RfbHN0YXQ9J2RlZmluZScKK2RfbWFkdmlzZT0nZGVmaW5lJworZF9tYWxsb2NfZ29vZF9zaXplPSd1bmRlZicKK2RfbWFsbG9jX3NpemU9J3VuZGVmJworZF9tYmxlbj0nZGVmaW5lJworZF9tYnN0b3djcz0nZGVmaW5lJworZF9tYnRvd2M9J2RlZmluZScKK2RfbWVtY2hyPSdkZWZpbmUnCitkX21lbWNtcD0nZGVmaW5lJworZF9tZW1jcHk9J2RlZmluZScKK2RfbWVtbW92ZT0nZGVmaW5lJworZF9tZW1zZXQ9J2RlZmluZScKK2RfbWtkaXI9J2RlZmluZScKK2RfbWtkdGVtcD0nZGVmaW5lJworZF9ta2ZpZm89J2RlZmluZScKK2RfbWtzdGVtcD0nZGVmaW5lJworZF9ta3N0ZW1wcz0nZGVmaW5lJworZF9ta3RpbWU2ND0ndW5kZWYnCitkX21rdGltZT0nZGVmaW5lJworZF9tbWFwPSdkZWZpbmUnCitkX21vZGZsPSdkZWZpbmUnCitkX21vZGZsX3BvdzMyX2J1Zz0ndW5kZWYnCitkX21vZGZscHJvdG89J2RlZmluZScKK2RfbXByb3RlY3Q9J2RlZmluZScKK2RfbXNnPSdkZWZpbmUnCitkX21zZ19jdHJ1bmM9J2RlZmluZScKK2RfbXNnX2RvbnRyb3V0ZT0nZGVmaW5lJworZF9tc2dfb29iPSdkZWZpbmUnCitkX21zZ19wZWVrPSdkZWZpbmUnCitkX21zZ19wcm94eT0nZGVmaW5lJworZF9tc2djdGw9J2RlZmluZScKK2RfbXNnZ2V0PSdkZWZpbmUnCitkX21zZ2hkcl9zPSdkZWZpbmUnCitkX21zZ3Jjdj0nZGVmaW5lJworZF9tc2dzbmQ9J2RlZmluZScKK2RfbXN5bmM9J2RlZmluZScKK2RfbXVubWFwPSdkZWZpbmUnCitkX215bWFsbG9jPSd1bmRlZicKK2RfbmFuPSdkZWZpbmUnCitkX25kYm09J2RlZmluZScKK2RfbmRibV9oX3VzZXNfcHJvdG90eXBlcz0ndW5kZWYnCitkX25lYXJieWludD0nZGVmaW5lJworZF9uZXh0YWZ0ZXI9J2RlZmluZScKK2RfbmV4dHRvd2FyZD0nZGVmaW5lJworZF9uaWNlPSdkZWZpbmUnCitkX25sX2xhbmdpbmZvPSdkZWZpbmUnCitkX252X3ByZXNlcnZlc191dj0ndW5kZWYnCitkX252X3plcm9faXNfYWxsYml0c196ZXJvPSdkZWZpbmUnCitkX29mZjY0X3Q9J2RlZmluZScKK2Rfb2xkX3B0aHJlYWRfY3JlYXRlX2pvaW5hYmxlPSd1bmRlZicKK2Rfb2xkcHRocmVhZHM9J3VuZGVmJworZF9vbGRzb2NrPSd1bmRlZicKK2Rfb3BlbjM9J2RlZmluZScKK2RfcGF0aGNvbmY9J2RlZmluZScKK2RfcGF1c2U9J2RlZmluZScKK2RfcGVybF9vdGhlcmxpYmRpcnM9J2RlZmluZScKK2RfcGhvc3RuYW1lPSd1bmRlZicKK2RfcGlwZT0nZGVmaW5lJworZF9wb2xsPSdkZWZpbmUnCitkX3BvcnRhYmxlPSdkZWZpbmUnCitkX3ByY3RsPSdkZWZpbmUnCitkX3ByY3RsX3NldF9uYW1lPSdkZWZpbmUnCitkX3ByaW50Zl9mb3JtYXRfbnVsbD0ndW5kZWYnCitkX3Byb2NzZWxmZXhlPSdkZWZpbmUnCitkX3BzZXVkb2Zvcms9J3VuZGVmJworZF9wdGhyZWFkX2F0Zm9yaz0nZGVmaW5lJworZF9wdGhyZWFkX2F0dHJfc2V0c2NvcGU9J2RlZmluZScKK2RfcHRocmVhZF95aWVsZD0nZGVmaW5lJworZF9wdHJkaWZmX3Q9J2RlZmluZScKK2RfcHdhZ2U9J3VuZGVmJworZF9wd2NoYW5nZT0ndW5kZWYnCitkX3B3Y2xhc3M9J3VuZGVmJworZF9wd2NvbW1lbnQ9J3VuZGVmJworZF9wd2V4cGlyZT0ndW5kZWYnCitkX3B3Z2Vjb3M9J2RlZmluZScKK2RfcHdwYXNzd2Q9J2RlZmluZScKK2RfcHdxdW90YT0ndW5kZWYnCitkX3FnY3Z0PSdkZWZpbmUnCitkX3F1YWQ9J2RlZmluZScKK2RfcmFuZG9tX3I9J2RlZmluZScKK2RfcmVfY29tcD0ndW5kZWYnCitkX3JlYWRkaXI2NF9yPSdkZWZpbmUnCitkX3JlYWRkaXI9J2RlZmluZScKK2RfcmVhZGRpcl9yPSdkZWZpbmUnCitkX3JlYWRsaW5rPSdkZWZpbmUnCitkX3JlYWR2PSdkZWZpbmUnCitkX3JlY3Ztc2c9J2RlZmluZScKK2RfcmVnY21wPSd1bmRlZicKK2RfcmVnY29tcD0nZGVmaW5lJworZF9yZW1haW5kZXI9J2RlZmluZScKK2RfcmVtcXVvPSdkZWZpbmUnCitkX3JlbmFtZT0nZGVmaW5lJworZF9yZXdpbmRkaXI9J2RlZmluZScKK2RfcmludD0nZGVmaW5lJworZF9ybWRpcj0nZGVmaW5lJworZF9yb3VuZD0nZGVmaW5lJworZF9zYWZlYmNweT0ndW5kZWYnCitkX3NhZmVtY3B5PSd1bmRlZicKK2Rfc2FuZW1jbXA9J2RlZmluZScKK2Rfc2Jya3Byb3RvPSdkZWZpbmUnCitkX3NjYWxibj0nZGVmaW5lJworZF9zY2FsYm5sPSdkZWZpbmUnCitkX3NjaGVkX3lpZWxkPSdkZWZpbmUnCitkX3NjbV9yaWdodHM9J2RlZmluZScKK2Rfc2Vla2Rpcj0nZGVmaW5lJworZF9zZWxlY3Q9J2RlZmluZScKK2Rfc2VtPSdkZWZpbmUnCitkX3NlbWN0bD0nZGVmaW5lJworZF9zZW1jdGxfc2VtaWRfZHM9J2RlZmluZScKK2Rfc2VtY3RsX3NlbXVuPSdkZWZpbmUnCitkX3NlbWdldD0nZGVmaW5lJworZF9zZW1vcD0nZGVmaW5lJworZF9zZW5kbXNnPSdkZWZpbmUnCitkX3NldGVnaWQ9J2RlZmluZScKK2Rfc2V0ZXVpZD0nZGVmaW5lJworZF9zZXRncmVudD0nZGVmaW5lJworZF9zZXRncmVudF9yPSd1bmRlZicKK2Rfc2V0Z3Jwcz0nZGVmaW5lJworZF9zZXRoZW50PSdkZWZpbmUnCitkX3NldGhvc3RlbnRfcj0ndW5kZWYnCitkX3NldGl0aW1lcj0nZGVmaW5lJworZF9zZXRsaW5lYnVmPSdkZWZpbmUnCitkX3NldGxvY2FsZT0nZGVmaW5lJworZF9zZXRsb2NhbGVfcj0ndW5kZWYnCitkX3NldG5lbnQ9J2RlZmluZScKK2Rfc2V0bmV0ZW50X3I9J3VuZGVmJworZF9zZXRwZW50PSdkZWZpbmUnCitkX3NldHBnaWQ9J2RlZmluZScKK2Rfc2V0cGdycDI9J3VuZGVmJworZF9zZXRwZ3JwPSdkZWZpbmUnCitkX3NldHByaW9yPSdkZWZpbmUnCitkX3NldHByb2N0aXRsZT0ndW5kZWYnCitkX3NldHByb3RvZW50X3I9J3VuZGVmJworZF9zZXRwd2VudD0nZGVmaW5lJworZF9zZXRwd2VudF9yPSd1bmRlZicKK2Rfc2V0cmVnaWQ9J2RlZmluZScKK2Rfc2V0cmVzZ2lkPSdkZWZpbmUnCitkX3NldHJlc3VpZD0nZGVmaW5lJworZF9zZXRyZXVpZD0nZGVmaW5lJworZF9zZXRyZ2lkPSd1bmRlZicKK2Rfc2V0cnVpZD0ndW5kZWYnCitkX3NldHNlbnQ9J2RlZmluZScKK2Rfc2V0c2VydmVudF9yPSd1bmRlZicKK2Rfc2V0c2lkPSdkZWZpbmUnCitkX3NldHZidWY9J2RlZmluZScKK2Rfc2htPSdkZWZpbmUnCitkX3NobWF0PSdkZWZpbmUnCitkX3NobWF0cHJvdG90eXBlPSdkZWZpbmUnCitkX3NobWN0bD0nZGVmaW5lJworZF9zaG1kdD0nZGVmaW5lJworZF9zaG1nZXQ9J2RlZmluZScKK2Rfc2lnYWN0aW9uPSdkZWZpbmUnCitkX3NpZ25iaXQ9J2RlZmluZScKK2Rfc2lncHJvY21hc2s9J2RlZmluZScKK2Rfc2lnc2V0am1wPSdkZWZpbmUnCitkX3NpbjZfc2NvcGVfaWQ9J2RlZmluZScKK2Rfc2l0ZWFyY2g9J2RlZmluZScKK2Rfc25wcmludGY9J2RlZmluZScKK2Rfc29ja2FkZHJfaW42PSdkZWZpbmUnCitkX3NvY2thZGRyX3NhX2xlbj0ndW5kZWYnCitkX3NvY2thdG1hcms9J2RlZmluZScKK2Rfc29ja2F0bWFya3Byb3RvPSdkZWZpbmUnCitkX3NvY2tldD0nZGVmaW5lJworZF9zb2NrbGVuX3Q9J2RlZmluZScKK2Rfc29ja3BhaXI9J2RlZmluZScKK2Rfc29ja3M1X2luaXQ9J3VuZGVmJworZF9zcHJpbnRmX3JldHVybnNfc3RybGVuPSdkZWZpbmUnCitkX3NxcnRsPSdkZWZpbmUnCitkX3NyYW5kNDhfcj0nZGVmaW5lJworZF9zcmFuZG9tX3I9J2RlZmluZScKK2Rfc3Jlc2dwcm90bz0nZGVmaW5lJworZF9zcmVzdXByb3RvPSdkZWZpbmUnCitkX3N0YXQ9J2RlZmluZScKK2Rfc3RhdGJsa3M9J2RlZmluZScKK2Rfc3RhdGZzX2ZfZmxhZ3M9J2RlZmluZScKK2Rfc3RhdGZzX3M9J2RlZmluZScKK2Rfc3RhdGljX2lubGluZT0nZGVmaW5lJworZF9zdGF0dmZzPSdkZWZpbmUnCitkX3N0ZGlvX2NudF9sdmFsPSd1bmRlZicKK2Rfc3RkaW9fcHRyX2x2YWw9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbF9ub2NoYW5nZV9jbnQ9J3VuZGVmJworZF9zdGRpb19wdHJfbHZhbF9zZXRzX2NudD0ndW5kZWYnCitkX3N0ZGlvX3N0cmVhbV9hcnJheT0ndW5kZWYnCitkX3N0ZGlvYmFzZT0ndW5kZWYnCitkX3N0ZHN0ZGlvPSd1bmRlZicKK2Rfc3RyY2hyPSdkZWZpbmUnCitkX3N0cmNvbGw9J2RlZmluZScKK2Rfc3RyY3RjcHk9J2RlZmluZScKK2Rfc3RyZXJybT0nc3RyZXJyb3IoZSknCitkX3N0cmVycm9yPSdkZWZpbmUnCitkX3N0cmVycm9yX3I9J2RlZmluZScKK2Rfc3RyZnRpbWU9J2RlZmluZScKK2Rfc3RybGNhdD0ndW5kZWYnCitkX3N0cmxjcHk9J3VuZGVmJworZF9zdHJ0b2Q9J2RlZmluZScKK2Rfc3RydG9sPSdkZWZpbmUnCitkX3N0cnRvbGQ9J2RlZmluZScKK2Rfc3RydG9sbD0nZGVmaW5lJworZF9zdHJ0b3E9J2RlZmluZScKK2Rfc3RydG91bD0nZGVmaW5lJworZF9zdHJ0b3VsbD0nZGVmaW5lJworZF9zdHJ0b3VxPSdkZWZpbmUnCitkX3N0cnhmcm09J2RlZmluZScKK2Rfc3VpZHNhZmU9J3VuZGVmJworZF9zeW1saW5rPSdkZWZpbmUnCitkX3N5c2NhbGw9J2RlZmluZScKK2Rfc3lzY2FsbHByb3RvPSdkZWZpbmUnCitkX3N5c2NvbmY9J2RlZmluZScKK2Rfc3lzZXJubHN0PScnCitkX3N5c2VycmxzdD0nZGVmaW5lJworZF9zeXN0ZW09J2RlZmluZScKK2RfdGNnZXRwZ3JwPSdkZWZpbmUnCitkX3Rjc2V0cGdycD0nZGVmaW5lJworZF90ZWxsZGlyPSdkZWZpbmUnCitkX3RlbGxkaXJwcm90bz0nZGVmaW5lJworZF90Z2FtbWE9J2RlZmluZScKK2RfdGltZT0nZGVmaW5lJworZF90aW1lZ209J2RlZmluZScKK2RfdGltZXM9J2RlZmluZScKK2RfdG1fdG1fZ210b2ZmPSdkZWZpbmUnCitkX3RtX3RtX3pvbmU9J2RlZmluZScKK2RfdG1wbmFtX3I9J2RlZmluZScKK2RfdHJ1bmM9J2RlZmluZScKK2RfdHJ1bmNhdGU9J2RlZmluZScKK2RfdHJ1bmNsPSdkZWZpbmUnCitkX3R0eW5hbWVfcj0nZGVmaW5lJworZF90em5hbWU9J2RlZmluZScKK2RfdTMyYWxpZ249J2RlZmluZScKK2RfdWFsYXJtPSdkZWZpbmUnCitkX3VtYXNrPSdkZWZpbmUnCitkX3VuYW1lPSdkZWZpbmUnCitkX3VuaW9uX3NlbXVuPSd1bmRlZicKK2RfdW5vcmRlcmVkPSd1bmRlZicKK2RfdW5zZXRlbnY9J2RlZmluZScKK2RfdXNsZWVwPSdkZWZpbmUnCitkX3VzbGVlcHByb3RvPSdkZWZpbmUnCitkX3VzdGF0PSdkZWZpbmUnCitkX3ZlbmRvcmFyY2g9J2RlZmluZScKK2RfdmVuZG9yYmluPSdkZWZpbmUnCitkX3ZlbmRvcmxpYj0nZGVmaW5lJworZF92ZW5kb3JzY3JpcHQ9J2RlZmluZScKK2RfdmZvcms9J3VuZGVmJworZF92b2lkX2Nsb3NlZGlyPSd1bmRlZicKK2Rfdm9pZHNpZz0nZGVmaW5lJworZF92b2lkdHR5PScnCitkX3ZvbGF0aWxlPSdkZWZpbmUnCitkX3ZwcmludGY9J2RlZmluZScKK2RfdnNucHJpbnRmPSdkZWZpbmUnCitkX3dhaXQ0PSdkZWZpbmUnCitkX3dhaXRwaWQ9J2RlZmluZScKK2Rfd2NzY21wPSdkZWZpbmUnCitkX3djc3RvbWJzPSdkZWZpbmUnCitkX3djc3hmcm09J2RlZmluZScKK2Rfd2N0b21iPSdkZWZpbmUnCitkX3dyaXRldj0nZGVmaW5lJworZF94ZW5peD0ndW5kZWYnCitkYXRlPSdkYXRlJworZGJfaGFzaHR5cGU9J3VfaW50MzJfdCcKK2RiX3ByZWZpeHR5cGU9J3NpemVfdCcKK2RiX3ZlcnNpb25fbWFqb3I9JycKK2RiX3ZlcnNpb25fbWlub3I9JycKK2RiX3ZlcnNpb25fcGF0Y2g9JycKK2RpcmVudHJ5dHlwZT0nc3RydWN0IGRpcmVudCcKK2RsZXh0PSdzbycKK2Rsc3JjPSdkbF9kbG9wZW4ueHMnCitkb3VibGVraW5kPSczJworZG91Ymxlc2l6ZT0nOCcKK2RyYW5kMDE9J1BlcmxfZHJhbmQ0OCgpJworZHJhbmQ0OF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TVCcKK2R0cmFjZT0nJworZHluYW1pY19leHQ9J0IgQ29tcHJlc3MvUmF3L0J6aXAyIENvbXByZXNzL1Jhdy9abGliIEN3ZCBEYXRhL0R1bXBlciBEZXZlbC9QUFBvcnQgRGV2ZWwvUGVlayBEaWdlc3QvTUQ1IERpZ2VzdC9TSEEgRW5jb2RlIEZjbnRsIEZpbGUvRG9zR2xvYiBGaWxlL0dsb2IgRmlsdGVyL1V0aWwvQ2FsbCBIYXNoL1V0aWwgSGFzaC9VdGlsL0ZpZWxkSGFzaCBJMThOL0xhbmdpbmZvIElPIElQQy9TeXNWIExpc3QvVXRpbCBNSU1FL0Jhc2U2NCBNYXRoL0JpZ0ludC9GYXN0Q2FsYyBOREJNX0ZpbGUgT0RCTV9GaWxlIE9wY29kZSBQT1NJWCBQZXJsSU8vZW5jb2RpbmcgUGVybElPL21tYXAgUGVybElPL3NjYWxhciBQZXJsSU8vdmlhIFNEQk1fRmlsZSBTb2NrZXQgU3RvcmFibGUgU3lzL0hvc3RuYW1lIFN5cy9TeXNsb2cgVGllL0hhc2gvTmFtZWRDYXB0dXJlIFRpbWUvSGlSZXMgVGltZS9QaWVjZSBVbmljb2RlL0NvbGxhdGUgWFMvQVBJdGVzdCBYUy9UeXBlbWFwIGFyeWJhc2UgYXR0cmlidXRlcyBtcm8gcmUgdGhyZWFkcyB0aHJlYWRzL3NoYXJlZCcKK2VhZ2Fpbj0nRUFHQUlOJworZWJjZGljPSd1bmRlZicKK2VjaG89J2VjaG8nCitlZ3JlcD0nZWdyZXAnCitlbWFjcz0nJworZW5kZ3JlbnRfcl9wcm90bz0nMCcKK2VuZGhvc3RlbnRfcl9wcm90bz0nMCcKK2VuZG5ldGVudF9yX3Byb3RvPScwJworZW5kcHJvdG9lbnRfcl9wcm90bz0nMCcKK2VuZHB3ZW50X3JfcHJvdG89JzAnCitlbmRzZXJ2ZW50X3JfcHJvdG89JzAnCitldW5pY2VmaXg9JzonCitleGVfZXh0PScnCitleHByPSdleHByJworZXh0ZW5zaW9ucz0nQiBDb21wcmVzcy9SYXcvQnppcDIgQ29tcHJlc3MvUmF3L1psaWIgQ3dkIERhdGEvRHVtcGVyIERldmVsL1BQUG9ydCBEZXZlbC9QZWVrIERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBFbmNvZGUgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvR2xvYiBGaWx0ZXIvVXRpbC9DYWxsIEhhc2gvVXRpbCBIYXNoL1V0aWwvRmllbGRIYXNoIEkxOE4vTGFuZ2luZm8gSU8gSVBDL1N5c1YgTGlzdC9VdGlsIE1JTUUvQmFzZTY0IE1hdGgvQmlnSW50L0Zhc3RDYWxjIE5EQk1fRmlsZSBPREJNX0ZpbGUgT3Bjb2RlIFBPU0lYIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgU0RCTV9GaWxlIFNvY2tldCBTdG9yYWJsZSBTeXMvSG9zdG5hbWUgU3lzL1N5c2xvZyBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGltZS9IaVJlcyBUaW1lL1BpZWNlIFVuaWNvZGUvQ29sbGF0ZSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgYXJ5YmFzZSBhdHRyaWJ1dGVzIG1ybyByZSB0aHJlYWRzIHRocmVhZHMvc2hhcmVkIEFyY2hpdmUvVGFyIEF0dHJpYnV0ZS9IYW5kbGVycyBBdXRvTG9hZGVyIEIvRGVidWcgQ1BBTiBDUEFOL01ldGEgQ1BBTi9NZXRhL1JlcXVpcmVtZW50cyBDUEFOL01ldGEvWUFNTCBDYXJwIENvbmZpZy9QZXJsL1YgRGV2ZWwvU2VsZlN0dWJiZXIgRGlnZXN0IER1bXB2YWx1ZSBFbnYgRXJybm8gRXhwb3J0ZXIgRXh0VXRpbHMvQ0J1aWxkZXIgRXh0VXRpbHMvQ29tbWFuZCBFeHRVdGlscy9Db25zdGFudCBFeHRVdGlscy9JbnN0YWxsIEV4dFV0aWxzL01ha2VNYWtlciBFeHRVdGlscy9NYW5pZmVzdCBFeHRVdGlscy9NaW5pcGVybCBFeHRVdGlscy9QYXJzZVhTIEZpbGUvRmV0Y2ggRmlsZS9GaW5kIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIElPL0NvbXByZXNzIElPL1NvY2tldC9JUCBJTy9abGliIElQQy9DbWQgSVBDL09wZW4zIEpTT04vUFAgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1hdGgvQmlnSW50IE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBORVhUIE5ldC9QaW5nIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL3ZpYS9RdW90ZWRQcmludCBQb2QvQ2hlY2tlciBQb2QvRXNjYXBlcyBQb2QvRnVuY3Rpb25zIFBvZC9IdG1sIFBvZC9QYXJzZXIgUG9kL1Blcmxkb2MgUG9kL1NpbXBsZSBQb2QvVXNhZ2UgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFRlcm0vQU5TSUNvbG9yIFRlcm0vQ2FwIFRlcm0vQ29tcGxldGUgVGVybS9SZWFkTGluZSBUZXN0IFRlc3QvSGFybmVzcyBUZXN0L1NpbXBsZSBUZXh0L0FiYnJldiBUZXh0L0JhbGFuY2VkIFRleHQvUGFyc2VXb3JkcyBUZXh0L1RhYnMgVGhyZWFkL1F1ZXVlIFRocmVhZC9TZW1hcGhvcmUgVGllL0ZpbGUgVGllL01lbW9pemUgVGllL1JlZkhhc2ggVGltZS9Mb2NhbCBVbmljb2RlL05vcm1hbGl6ZSBYU0xvYWRlciBhdXRvZGllIGF1dG91c2UgYmFzZSBiaWdudW0gY29uc3RhbnQgZW5jb2Rpbmcvd2FybmluZ3MgZXhwZXJpbWVudGFsIGlmIGxpYiBsaWJuZXQgcGFyZW50IHBlcmxmYXEgcG9kbGF0b3JzIHZlcnNpb24nCitleHRlcm5fQz0nZXh0ZXJuJworZXh0cmFzPScnCitmZmx1c2hOVUxMPSdkZWZpbmUnCitmZmx1c2hhbGw9J3VuZGVmJworZmluZD0nJworZmlyc3RtYWtlZmlsZT0nbWFrZWZpbGUnCitmbGV4PScnCitmcG9zc2l6ZT0nMTYnCitmcG9zdHlwZT0nZnBvc190JworZnJlZXR5cGU9J3ZvaWQnCitmcm9tPSc6JworZnVsbF9hcj0nYXInCitmdWxsX2NzaD0nY3NoJworZnVsbF9zZWQ9J3NlZCcKK2djY2Fuc2lwZWRhbnRpYz0nJworZ2Njb3NhbmR2ZXJzPScnCitnY2N2ZXJzaW9uPSc0LjkuMicKK2dldGdyZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1InCitnZXRncmdpZF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UU0JXUicKK2dldGdybmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2V0aG9zdGJ5YWRkcl9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9Uc0lTQldSRScKK2dldGhvc3RieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1JFJworZ2V0aG9zdGVudF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TQldSRScKK2dldGxvZ2luX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0JXJworZ2V0bmV0YnlhZGRyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX3VJU0JXUkUnCitnZXRuZXRieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1JFJworZ2V0bmV0ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1JFJworZ2V0cHJvdG9ieW5hbWVfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfQ1NCV1InCitnZXRwcm90b2J5bnVtYmVyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lTQldSJworZ2V0cHJvdG9lbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHB3ZW50X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1NCV1InCitnZXRwd25hbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DU0JXUicKK2dldHB3dWlkX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTQldSJworZ2V0c2VydmJ5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9DQ1NCV1InCitnZXRzZXJ2Ynlwb3J0X3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0lDU0JXUicKK2dldHNlcnZlbnRfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfU0JXUicKK2dldHNwbmFtX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX0NTQldSJworZ2lkZm9ybWF0PScidSInCitnaWRzaWduPScxJworZ2lkc2l6ZT0nNCcKK2dpZHR5cGU9J2dpZF90JworZ2xpYnB0aD0nQEVYRUNQUkVGSVhAL3NobGliICBAQkFTRUxJQkRJUkAgQExJQkRJUkAgQExJQkRJUkAvMzg2IEBCQVNFTElCRElSQDM4NiBARVhFQ1BSRUZJWEAvY2NzQEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC91Y2JsaWIgQEVYRUNQUkVGSVhAL2xvY2FsQEJBU0VMSUJESVJAIEBCQVNFTElCRElSQCBATElCRElSQCBARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgJworZ21ha2U9J2dtYWtlJworZ210aW1lX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19TX1RTJworZ251bGliY192ZXJzaW9uPScyLjIxJworZ3JlcD0nZ3JlcCcKK2dyb3VwY2F0PSdjYXQgL2V0Yy9ncm91cCcKK2dyb3Vwc3R5cGU9J2dpZF90JworZ3ppcD0nZ3ppcCcKK2hfZmNudGw9J2ZhbHNlJworaF9zeXNmaWxlPSd0cnVlJworaGludD0ncmVjb21tZW5kZWQnCitob3N0Y2F0PSdjYXQgL2V0Yy9ob3N0cycKK2hvc3RnZW5lcmF0ZT0nJworaG9zdG9zbmFtZT0nJworaG9zdHBlcmw9JycKK2h0bWwxZGlyPScgJworaHRtbDFkaXJleHA9JycKK2h0bWwzZGlyPScgJworaHRtbDNkaXJleHA9JycKK2kxNnNpemU9JzInCitpMTZ0eXBlPSdzaG9ydCcKK2kzMnNpemU9JzQnCitpMzJ0eXBlPSdpbnQnCitpNjRzaXplPSc4JworaTY0dHlwZT0nbG9uZycKK2k4c2l6ZT0nMScKK2k4dHlwZT0nc2lnbmVkIGNoYXInCitpX2FycGFpbmV0PSdkZWZpbmUnCitpX2Fzc2VydD0nZGVmaW5lJworaV9iZmQ9J2RlZmluZScKK2lfYnNkaW9jdGw9JycKK2lfY3J5cHQ9J2RlZmluZScKK2lfZGI9J3VuZGVmJworaV9kYm09J2RlZmluZScKK2lfZGlyZW50PSdkZWZpbmUnCitpX2RsZmNuPSdkZWZpbmUnCitpX2V4ZWNpbmZvPSdkZWZpbmUnCitpX2ZjbnRsPSd1bmRlZicKK2lfZmVudj0nZGVmaW5lJworaV9mbG9hdD0nZGVmaW5lJworaV9mcD0ndW5kZWYnCitpX2ZwX2NsYXNzPSd1bmRlZicKK2lfZ2RibT0ndW5kZWYnCitpX2dkYm1fbmRibT0ndW5kZWYnCitpX2dkYm1uZGJtPSdkZWZpbmUnCitpX2dycD0nZGVmaW5lJworaV9pZWVlZnA9J3VuZGVmJworaV9pbnR0eXBlcz0nZGVmaW5lJworaV9sYW5naW5mbz0nZGVmaW5lJworaV9saWJ1dGlsPSd1bmRlZicKK2lfbGltaXRzPSdkZWZpbmUnCitpX2xvY2FsZT0nZGVmaW5lJworaV9tYWNoY3Rocj0ndW5kZWYnCitpX21hbGxvYz0nZGVmaW5lJworaV9tYWxsb2NtYWxsb2M9J3VuZGVmJworaV9tYXRoPSdkZWZpbmUnCitpX21lbW9yeT0ndW5kZWYnCitpX21udGVudD0nZGVmaW5lJworaV9uZGJtPSd1bmRlZicKK2lfbmV0ZGI9J2RlZmluZScKK2lfbmV0ZXJybm89J3VuZGVmJworaV9uZXRpbmV0dGNwPSdkZWZpbmUnCitpX25paW49J2RlZmluZScKK2lfcG9sbD0nZGVmaW5lJworaV9wcm90PSd1bmRlZicKK2lfcHRocmVhZD0nZGVmaW5lJworaV9wd2Q9J2RlZmluZScKK2lfcXVhZG1hdGg9J3VuZGVmJworaV9ycGNzdmNkYm09J3VuZGVmJworaV9zZ3R0eT0ndW5kZWYnCitpX3NoYWRvdz0nZGVmaW5lJworaV9zb2Nrcz0ndW5kZWYnCitpX3N0ZGFyZz0nZGVmaW5lJworaV9zdGRib29sPSdkZWZpbmUnCitpX3N0ZGRlZj0nZGVmaW5lJworaV9zdGRpbnQ9J2RlZmluZScKK2lfc3RkbGliPSdkZWZpbmUnCitpX3N0cmluZz0nZGVmaW5lJworaV9zdW5tYXRoPSd1bmRlZicKK2lfc3lzYWNjZXNzPSd1bmRlZicKK2lfc3lzZGlyPSdkZWZpbmUnCitpX3N5c2ZpbGU9J2RlZmluZScKK2lfc3lzZmlsaW89J3VuZGVmJworaV9zeXNpbj0ndW5kZWYnCitpX3N5c2lvY3RsPSdkZWZpbmUnCitpX3N5c2xvZz0nZGVmaW5lJworaV9zeXNtbWFuPSdkZWZpbmUnCitpX3N5c21vZGU9J3VuZGVmJworaV9zeXNtb3VudD0nZGVmaW5lJworaV9zeXNuZGlyPSd1bmRlZicKK2lfc3lzcGFyYW09J2RlZmluZScKK2lfc3lzcG9sbD0nZGVmaW5lJworaV9zeXNyZXNyYz0nZGVmaW5lJworaV9zeXNzZWNydD0ndW5kZWYnCitpX3N5c3NlbGN0PSdkZWZpbmUnCitpX3N5c3NvY2tpbz0ndW5kZWYnCitpX3N5c3N0YXQ9J2RlZmluZScKK2lfc3lzc3RhdGZzPSdkZWZpbmUnCitpX3N5c3N0YXR2ZnM9J2RlZmluZScKK2lfc3lzdGltZT0nZGVmaW5lJworaV9zeXN0aW1laz0ndW5kZWYnCitpX3N5c3RpbWVzPSdkZWZpbmUnCitpX3N5c3R5cGVzPSdkZWZpbmUnCitpX3N5c3Vpbz0nZGVmaW5lJworaV9zeXN1bj0nZGVmaW5lJworaV9zeXN1dHNuYW1lPSdkZWZpbmUnCitpX3N5c3Zmcz0nZGVmaW5lJworaV9zeXN3YWl0PSdkZWZpbmUnCitpX3Rlcm1pbz0ndW5kZWYnCitpX3Rlcm1pb3M9J2RlZmluZScKK2lfdGltZT0nZGVmaW5lJworaV91bmlzdGQ9J2RlZmluZScKK2lfdXN0YXQ9J2RlZmluZScKK2lfdXRpbWU9J2RlZmluZScKK2lfdmFsdWVzPSdkZWZpbmUnCitpX3ZhcmFyZ3M9J3VuZGVmJworaV92YXJoZHI9J3N0ZGFyZy5oJworaV92Zm9yaz0ndW5kZWYnCitpZ25vcmVfdmVyc2lvbmVkX3NvbGlicz0neScKK2luY192ZXJzaW9uX2xpc3Q9JyAnCitpbmNfdmVyc2lvbl9saXN0X2luaXQ9JzAnCitpbmNwYXRoPScnCitpbmV3cz0nJworaW5pdGlhbGluc3RhbGxsb2NhdGlvbj0nQFVTUkJJTkAnCitpbnN0YWxsYXJjaGxpYj0nQExJQkRJUkAvcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK2luc3RhbGxiaW49J0BVU1JCSU5AJworaW5zdGFsbGh0bWwxZGlyPScnCitpbnN0YWxsaHRtbDNkaXI9JycKK2luc3RhbGxtYW4xZGlyPScnCitpbnN0YWxsbWFuM2Rpcj0nJworaW5zdGFsbHByZWZpeD0nQEVYRUNQUkVGSVhAJworaW5zdGFsbHByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJworaW5zdGFsbHByaXZsaWI9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworaW5zdGFsbHNjcmlwdD0nQFVTUkJJTkAnCitpbnN0YWxsc2l0ZWFyY2g9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbHNpdGViaW49J0BVU1JCSU5AJworaW5zdGFsbHNpdGVodG1sMWRpcj0nJworaW5zdGFsbHNpdGVodG1sM2Rpcj0nJworaW5zdGFsbHNpdGVsaWI9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK2luc3RhbGxzaXRlbWFuMWRpcj0nJworaW5zdGFsbHNpdGVtYW4zZGlyPScnCitpbnN0YWxsc2l0ZXNjcmlwdD0nQFVTUkJJTkAnCitpbnN0YWxsc3R5bGU9J2xpYi9wZXJsJworaW5zdGFsbHVzcmJpbnBlcmw9J2RlZmluZScKK2luc3RhbGx2ZW5kb3JhcmNoPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJworaW5zdGFsbHZlbmRvcmJpbj0nQFVTUkJJTkAnCitpbnN0YWxsdmVuZG9yaHRtbDFkaXI9JycKK2luc3RhbGx2ZW5kb3JodG1sM2Rpcj0nJworaW5zdGFsbHZlbmRvcmxpYj0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAnCitpbnN0YWxsdmVuZG9ybWFuMWRpcj0nJworaW5zdGFsbHZlbmRvcm1hbjNkaXI9JycKK2luc3RhbGx2ZW5kb3JzY3JpcHQ9J0BVU1JCSU5AJworaW50c2l6ZT0nNCcKK2lzc3ltbGluaz0ndGVzdCAtaCcKK2l2ZGZvcm1hdD0nImxkIicKK2l2c2l6ZT0nOCcKK2l2dHlwZT0nbG9uZycKK2tub3duX2V4dGVuc2lvbnM9J0FyY2hpdmUvVGFyIEF0dHJpYnV0ZS9IYW5kbGVycyBBdXRvTG9hZGVyIEIgQi9EZWJ1ZyBDUEFOIENQQU4vTWV0YSBDUEFOL01ldGEvUmVxdWlyZW1lbnRzIENQQU4vTWV0YS9ZQU1MIENhcnAgQ29tcHJlc3MvUmF3L0J6aXAyIENvbXByZXNzL1Jhdy9abGliIENvbmZpZy9QZXJsL1YgQ3dkIERCX0ZpbGUgRGF0YS9EdW1wZXIgRGV2ZWwvUFBQb3J0IERldmVsL1BlZWsgRGV2ZWwvU2VsZlN0dWJiZXIgRGlnZXN0IERpZ2VzdC9NRDUgRGlnZXN0L1NIQSBEdW1wdmFsdWUgRW5jb2RlIEVudiBFcnJubyBFeHBvcnRlciBFeHRVdGlscy9DQnVpbGRlciBFeHRVdGlscy9Db21tYW5kIEV4dFV0aWxzL0NvbnN0YW50IEV4dFV0aWxzL0luc3RhbGwgRXh0VXRpbHMvTWFrZU1ha2VyIEV4dFV0aWxzL01hbmlmZXN0IEV4dFV0aWxzL01pbmlwZXJsIEV4dFV0aWxzL1BhcnNlWFMgRmNudGwgRmlsZS9Eb3NHbG9iIEZpbGUvRmV0Y2ggRmlsZS9GaW5kIEZpbGUvR2xvYiBGaWxlL1BhdGggRmlsZS9UZW1wIEZpbGVDYWNoZSBGaWx0ZXIvU2ltcGxlIEZpbHRlci9VdGlsL0NhbGwgR0RCTV9GaWxlIEdldG9wdC9Mb25nIEhUVFAvVGlueSBIYXNoL1V0aWwgSGFzaC9VdGlsL0ZpZWxkSGFzaCBJMThOL0NvbGxhdGUgSTE4Ti9MYW5nVGFncyBJMThOL0xhbmdpbmZvIElPIElPL0NvbXByZXNzIElPL1NvY2tldC9JUCBJTy9abGliIElQQy9DbWQgSVBDL09wZW4zIElQQy9TeXNWIEpTT04vUFAgTGlzdC9VdGlsIExvY2FsZS9Db2RlcyBMb2NhbGUvTWFrZXRleHQgTG9jYWxlL01ha2V0ZXh0L1NpbXBsZSBNSU1FL0Jhc2U2NCBNYXRoL0JpZ0ludCBNYXRoL0JpZ0ludC9GYXN0Q2FsYyBNYXRoL0JpZ1JhdCBNYXRoL0NvbXBsZXggTWVtb2l6ZSBNb2R1bGUvQ29yZUxpc3QgTW9kdWxlL0xvYWQgTW9kdWxlL0xvYWQvQ29uZGl0aW9uYWwgTW9kdWxlL0xvYWRlZCBNb2R1bGUvTWV0YWRhdGEgTkRCTV9GaWxlIE5FWFQgTmV0L1BpbmcgT0RCTV9GaWxlIE9wY29kZSBQT1NJWCBQYXJhbXMvQ2hlY2sgUGFyc2UvQ1BBTi9NZXRhIFBlcmwvT1NUeXBlIFBlcmxJTy9lbmNvZGluZyBQZXJsSU8vbW1hcCBQZXJsSU8vc2NhbGFyIFBlcmxJTy92aWEgUGVybElPL3ZpYS9RdW90ZWRQcmludCBQb2QvQ2hlY2tlciBQb2QvRXNjYXBlcyBQb2QvRnVuY3Rpb25zIFBvZC9IdG1sIFBvZC9QYXJzZXIgUG9kL1Blcmxkb2MgUG9kL1NpbXBsZSBQb2QvVXNhZ2UgU0RCTV9GaWxlIFNhZmUgU2VhcmNoL0RpY3QgU2VsZkxvYWRlciBTb2NrZXQgU3RvcmFibGUgU3lzL0hvc3RuYW1lIFN5cy9TeXNsb2cgVGVybS9BTlNJQ29sb3IgVGVybS9DYXAgVGVybS9Db21wbGV0ZSBUZXJtL1JlYWRMaW5lIFRlc3QgVGVzdC9IYXJuZXNzIFRlc3QvU2ltcGxlIFRleHQvQWJicmV2IFRleHQvQmFsYW5jZWQgVGV4dC9QYXJzZVdvcmRzIFRleHQvVGFicyBUaHJlYWQvUXVldWUgVGhyZWFkL1NlbWFwaG9yZSBUaWUvRmlsZSBUaWUvSGFzaC9OYW1lZENhcHR1cmUgVGllL01lbW9pemUgVGllL1JlZkhhc2ggVGltZS9IaVJlcyBUaW1lL0xvY2FsIFRpbWUvUGllY2UgVW5pY29kZS9Db2xsYXRlIFVuaWNvZGUvTm9ybWFsaXplIFZNUy9EQ0xzeW0gVk1TL0ZpbGVzcGVjIFZNUy9TdGRpbyBXaW4zMiBXaW4zMkFQSS9GaWxlIFdpbjMyQ09SRSBYUy9BUEl0ZXN0IFhTL1R5cGVtYXAgWFNMb2FkZXIgYXJ5YmFzZSBhdHRyaWJ1dGVzIGF1dG9kaWUgYXV0b3VzZSBiYXNlIGJpZ251bSBjb25zdGFudCBlbmNvZGluZy93YXJuaW5ncyBleHBlcmltZW50YWwgaWYgbGliIGxpYm5ldCBtcm8gcGFyZW50IHBlcmxmYXEgcG9kbGF0b3JzIHJlIHRocmVhZHMgdGhyZWFkcy9zaGFyZWQgdmVyc2lvbiAnCitrc2g9JycKK2xkPSdnY2MnCitsZF9jYW5fc2NyaXB0PSdkZWZpbmUnCitsZGRsZmxhZ3M9Jy1zaGFyZWQgLU8yJworbGRmbGFncz0nJworbGRmbGFnc191c2VsYXJnZWZpbGVzPScnCitsZGxpYnB0aG5hbWU9J0xEX0xJQlJBUllfUEFUSCcKK2xlc3M9J2xlc3MnCitsaWJfZXh0PScuYScKK2xpYmM9J2xpYmMtMi4yMS5zbycKK2xpYnBlcmw9J2xpYnBlcmwuc28nCitsaWJwdGg9J0BMSUJESVJAIEBCQVNFTElCRElSQCcKK2xpYnM9Jy1scHRocmVhZCAtbG5zbCAtbGdkYm0gLWxkYiAtbGRsIC1sbSAtbGNyeXB0IC1sdXRpbCAtbGMgLWxnZGJtX2NvbXBhdCcKK2xpYnNkaXJzPScgQExJQkRJUkAnCitsaWJzZmlsZXM9JyBsaWJwdGhyZWFkLnNvIGxpYm5zbC5zbyBsaWJnZGJtLnNvIGxpYmRiLnNvIGxpYmRsLnNvIGxpYm0uc28gbGliY3J5cHQuc28gbGlidXRpbC5zbyBsaWJjLnNvIGxpYmdkYm1fY29tcGF0LnNvJworbGlic2ZvdW5kPScgQExJQkRJUkAvbGlicHRocmVhZC5zbyBATElCRElSQC9saWJuc2wuc28gQExJQkRJUkAvbGliZ2RibS5zbyBATElCRElSQC9saWJkYi5zbyBATElCRElSQC9saWJkbC5zbyBATElCRElSQC9saWJtLnNvIEBMSUJESVJAL2xpYmNyeXB0LnNvIEBMSUJESVJAL2xpYnV0aWwuc28gQExJQkRJUkAvbGliYy5zbyBATElCRElSQC9saWJnZGJtX2NvbXBhdC5zbycKK2xpYnNwYXRoPScgQExJQkRJUkAgQEJBU0VMSUJESVJAJworbGlic3dhbnRlZD0nY2wgcHRocmVhZCBzb2NrZXQgaW5ldCBuc2wgbm0gZ2RibSBkYm0gZGIgbWFsbG9jIGRsIGxkIHN1biBtIGNyeXB0IHNlYyB1dGlsIGMgY3Bvc2l4IHBvc2l4IHVjYiBCU0QgZ2RibV9jb21wYXQnCitsaWJzd2FudGVkX3VzZWxhcmdlZmlsZXM9JycKK2xpbmU9JycKK2xpbnQ9JycKK2xrZmxhZ3M9JycKK2xuPSdsbicKK2xucz0nL2Jpbi9sbiAtcycKK2xvY2FsdGltZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fU19UUycKK2xvY2luY3B0aD0nQEVYRUNQUkVGSVhAL2xvY2FsL2luY2x1ZGUgL29wdC9sb2NhbC9pbmNsdWRlIEBFWEVDUFJFRklYQC9nbnUvaW5jbHVkZSAvb3B0L2dudS9pbmNsdWRlIEBFWEVDUFJFRklYQC9HTlUvaW5jbHVkZSAvb3B0L0dOVS9pbmNsdWRlJworbG9jbGlicHRoPSdARVhFQ1BSRUZJWEAvbG9jYWxAQkFTRUxJQkRJUkAgL29wdC9sb2NhbEBCQVNFTElCRElSQCBARVhFQ1BSRUZJWEAvZ251QEJBU0VMSUJESVJAIC9vcHQvZ251QEJBU0VMSUJESVJAIEBFWEVDUFJFRklYQC9HTlVAQkFTRUxJQkRJUkAgL29wdC9HTlVAQkFTRUxJQkRJUkAnCitsb25nZGJsa2luZD0nMycKK2xvbmdkYmxzaXplPScxNicKK2xvbmdsb25nc2l6ZT0nOCcKK2xvbmdzaXplPSc4JworbHA9JycKK2xwcj0nJworbHM9J2xzJworbHNlZWtzaXplPSc4JworbHNlZWt0eXBlPSdvZmZfdCcKK21haWw9JycKK21haWx4PScnCittYWtlPSdtYWtlJworbWFrZV9zZXRfbWFrZT0nIycKK21hbGxvY29iaj0nJworbWFsbG9jc3JjPScnCittYWxsb2N0eXBlPSd2b2lkIConCittYW4xZGlyPScgJworbWFuMWRpcmV4cD0nJworbWFuMWV4dD0nMCcKK21hbjNkaXI9JyAnCittYW4zZGlyZXhwPScnCittYW4zZXh0PScwJworbWlwc190eXBlPScnCittaXN0cnVzdG5tPScnCitta2Rpcj0nbWtkaXInCittbWFwdHlwZT0ndm9pZCAqJworbW9kZXR5cGU9J21vZGVfdCcKK21vcmU9J21vcmUnCittdWx0aWFyY2g9J3VuZGVmJworbXY9JycKK215YXJjaG5hbWU9J0BBUkNIQCcKK215ZG9tYWluPScubG9jYWxkb21haW4nCitteWhvc3RuYW1lPSdsb2NhbGhvc3QnCitteXVuYW1lPSdsaW51eCBxZW11eDg2LTY0IDMuMTkuNS15b2N0by1zdGFuZGFyZCAjMSBzbXAgcHJlZW1wdCB0dWUganVuIDE2IDAwOjI4OjE3IHBkdCAyMDE1IHg4Nl82NCBnbnVsaW51eCAnCituPSctbicKK25lZWRfdmFfY29weT0nZGVmaW5lJworbmV0ZGJfaGxlbl90eXBlPSdzaXplX3QnCituZXRkYl9ob3N0X3R5cGU9J2NoYXIgKicKK25ldGRiX25hbWVfdHlwZT0nY29uc3QgY2hhciAqJworbmV0ZGJfbmV0X3R5cGU9J2luX2FkZHJfdCcKK25tPSdubScKK25tX29wdD0nJworbm1fc29fb3B0PSctLWR5bmFtaWMnCitub254c19leHQ9J0FyY2hpdmUvVGFyIEF0dHJpYnV0ZS9IYW5kbGVycyBBdXRvTG9hZGVyIEIvRGVidWcgQ1BBTiBDUEFOL01ldGEgQ1BBTi9NZXRhL1JlcXVpcmVtZW50cyBDUEFOL01ldGEvWUFNTCBDYXJwIENvbmZpZy9QZXJsL1YgRGV2ZWwvU2VsZlN0dWJiZXIgRGlnZXN0IER1bXB2YWx1ZSBFbnYgRXJybm8gRXhwb3J0ZXIgRXh0VXRpbHMvQ0J1aWxkZXIgRXh0VXRpbHMvQ29tbWFuZCBFeHRVdGlscy9Db25zdGFudCBFeHRVdGlscy9JbnN0YWxsIEV4dFV0aWxzL01ha2VNYWtlciBFeHRVdGlscy9NYW5pZmVzdCBFeHRVdGlscy9NaW5pcGVybCBFeHRVdGlscy9QYXJzZVhTIEZpbGUvRmV0Y2ggRmlsZS9GaW5kIEZpbGUvUGF0aCBGaWxlL1RlbXAgRmlsZUNhY2hlIEZpbHRlci9TaW1wbGUgR2V0b3B0L0xvbmcgSFRUUC9UaW55IEkxOE4vQ29sbGF0ZSBJMThOL0xhbmdUYWdzIElPL0NvbXByZXNzIElPL1NvY2tldC9JUCBJTy9abGliIElQQy9DbWQgSVBDL09wZW4zIEpTT04vUFAgTG9jYWxlL0NvZGVzIExvY2FsZS9NYWtldGV4dCBMb2NhbGUvTWFrZXRleHQvU2ltcGxlIE1hdGgvQmlnSW50IE1hdGgvQmlnUmF0IE1hdGgvQ29tcGxleCBNZW1vaXplIE1vZHVsZS9Db3JlTGlzdCBNb2R1bGUvTG9hZCBNb2R1bGUvTG9hZC9Db25kaXRpb25hbCBNb2R1bGUvTG9hZGVkIE1vZHVsZS9NZXRhZGF0YSBORVhUIE5ldC9QaW5nIFBhcmFtcy9DaGVjayBQYXJzZS9DUEFOL01ldGEgUGVybC9PU1R5cGUgUGVybElPL3ZpYS9RdW90ZWRQcmludCBQb2QvQ2hlY2tlciBQb2QvRXNjYXBlcyBQb2QvRnVuY3Rpb25zIFBvZC9IdG1sIFBvZC9QYXJzZXIgUG9kL1Blcmxkb2MgUG9kL1NpbXBsZSBQb2QvVXNhZ2UgU2FmZSBTZWFyY2gvRGljdCBTZWxmTG9hZGVyIFRlcm0vQU5TSUNvbG9yIFRlcm0vQ2FwIFRlcm0vQ29tcGxldGUgVGVybS9SZWFkTGluZSBUZXN0IFRlc3QvSGFybmVzcyBUZXN0L1NpbXBsZSBUZXh0L0FiYnJldiBUZXh0L0JhbGFuY2VkIFRleHQvUGFyc2VXb3JkcyBUZXh0L1RhYnMgVGhyZWFkL1F1ZXVlIFRocmVhZC9TZW1hcGhvcmUgVGllL0ZpbGUgVGllL01lbW9pemUgVGllL1JlZkhhc2ggVGltZS9Mb2NhbCBVbmljb2RlL05vcm1hbGl6ZSBYU0xvYWRlciBhdXRvZGllIGF1dG91c2UgYmFzZSBiaWdudW0gY29uc3RhbnQgZW5jb2Rpbmcvd2FybmluZ3MgZXhwZXJpbWVudGFsIGlmIGxpYiBsaWJuZXQgcGFyZW50IHBlcmxmYXEgcG9kbGF0b3JzIHZlcnNpb24nCitucm9mZj0nbnJvZmYnCitudkVVZm9ybWF0PSciRSInCitudkZVZm9ybWF0PSciRiInCitudkdVZm9ybWF0PSciRyInCitudl9vdmVyZmxvd3NfaW50ZWdlcnNfYXQ9JzI1Ni4wKjI1Ni4wKjI1Ni4wKjI1Ni4wKjI1Ni4wKjI1Ni4wKjIuMCoyLjAqMi4wKjIuMCoyLjAnCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nNTMnCitudmVmb3JtYXQ9JyJlIicKK252ZmZvcm1hdD0nImYiJworbnZnZm9ybWF0PSciZyInCitudnNpemU9JzgnCitudnR5cGU9J2RvdWJsZScKK29fbm9uYmxvY2s9J09fTk9OQkxPQ0snCitvYmpfZXh0PScubycKK29sZF9wdGhyZWFkX2NyZWF0ZV9qb2luYWJsZT0nJworb3B0aW1pemU9Jy1PMicKK29yZGVybGliPSdmYWxzZScKK29zbmFtZT0nbGludXgnCitvc3ZlcnM9JzMuMTkuNS15b2N0by1zdGFuZGFyZCcKK290aGVybGliZGlycz0nQExJQkRJUkAvcGVybC81LjIyLjAnCitwYWNrYWdlPSdwZXJsJworcGFnZXI9Jy91c3IvYmluL2xlc3MgLWlzcicKK3Bhc3NjYXQ9J2NhdCAvZXRjL3Bhc3N3ZCcKK3BhdGNobGV2ZWw9JzIyJworcGF0aF9zZXA9JzonCitwZXJsNT0nQFVTUkJJTkAvcGVybCcKK3Blcmw9J3BlcmwnCitwZXJsX3BhdGNobGV2ZWw9JycKK3Blcmxfc3RhdGljX2lubGluZT0nc3RhdGljIF9faW5saW5lX18nCitwZXJsYWRtaW49J3Jvb3RAbG9jYWxob3N0JworcGVybGxpYnM9Jy1scHRocmVhZCAtbG5zbCAtbGRsIC1sbSAtbGNyeXB0IC1sdXRpbCAtbGMnCitwZXJscGF0aD0nQFVTUkJJTkAvcGVybCcKK3BnPSdwZycKK3Bob3N0bmFtZT0nJworcGlkdHlwZT0ncGlkX3QnCitwbGlicHRoPSdATElCRElSQCBAQkFTRUxJQkRJUkAnCitwbWFrZT0nJworcHI9JycKK3ByZWZpeD0nQEVYRUNQUkVGSVhAJworcHJlZml4ZXhwPSdARVhFQ1BSRUZJWEAnCitwcml2bGliPSdATElCRElSQC9wZXJsLzUuMjIuMCcKK3ByaXZsaWJleHA9J0BMSUJESVJAL3BlcmwvNS4yMi4wJworcHJvY3NlbGZleGU9JyIvcHJvYy9zZWxmL2V4ZSInCitwcm90b3R5cGU9J2RlZmluZScKK3B0cnNpemU9JzgnCitxdWFka2luZD0nMicKK3F1YWR0eXBlPSdsb25nJworcmFuZGJpdHM9JzQ4JworcmFuZGZ1bmM9J1BlcmxfZHJhbmQ0OCcKK3JhbmRvbV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9TdCcKK3JhbmRzZWVkdHlwZT0nVTMyJworcmFubGliPSc6JworcmRfbm9kYXRhPSctMScKK3JlYWRkaXI2NF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9UU1InCityZWFkZGlyX3JfcHJvdG89J1JFRU5UUkFOVF9QUk9UT19JX1RTUicKK3JldmlzaW9uPSc1Jworcm09J3JtJworcm1fdHJ5PScvYmluL3JtIC1mIHRyeSB0cnkgYS5vdXQgLm91dCB0cnkuW2Nob10gdHJ5Li5vIGNvcmUgY29yZS50cnkqIHRyeS5jb3JlKicKK3JtYWlsPScnCitydW49JycKK3J1bm5tPSdmYWxzZScKK3NHTVRJTUVfbWF4PSc2Nzc2ODAzNjE5MTY3Njc5OScKK3NHTVRJTUVfbWluPSctNjIxNjcyMTkyMDAnCitzTE9DQUxUSU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzTE9DQUxUSU1FX21pbj0nLTYyMTY3MjE5MjAwJworc1BSSUVVbGRibD0nIkxFIicKK3NQUklGVWxkYmw9JyJMRiInCitzUFJJR1VsZGJsPSciTEciJworc1BSSVhVNjQ9JyJsWCInCitzUFJJZDY0PScibGQiJworc1BSSWVsZGJsPSciTGUiJworc1BSSWZsZGJsPSciTGYiJworc1BSSWdsZGJsPSciTGciJworc1BSSWk2ND0nImxpIicKK3NQUklvNjQ9JyJsbyInCitzUFJJdTY0PScibHUiJworc1BSSXg2ND0nImx4IicKK3NTQ05mbGRibD0nIkxmIicKK3NjaGVkX3lpZWxkPSdzY2hlZF95aWVsZCgpJworc2NyaXB0ZGlyPSdAVVNSQklOQCcKK3NjcmlwdGRpcmV4cD0nQFVTUkJJTkAnCitzZWQ9J3NlZCcKK3NlZWRmdW5jPSdQZXJsX2RyYW5kNDhfaW5pdCcKK3NlbGVjdG1pbmJpdHM9JzY0Jworc2VsZWN0dHlwZT0nZmRfc2V0IConCitzZW5kbWFpbD0nJworc2V0Z3JlbnRfcl9wcm90bz0nMCcKK3NldGhvc3RlbnRfcl9wcm90bz0nMCcKK3NldGxvY2FsZV9yX3Byb3RvPScwJworc2V0bmV0ZW50X3JfcHJvdG89JzAnCitzZXRwcm90b2VudF9yX3Byb3RvPScwJworc2V0cHdlbnRfcl9wcm90bz0nMCcKK3NldHNlcnZlbnRfcl9wcm90bz0nMCcKK3NoPScvYmluL3NoJworc2hhcj0nJworc2hhcnBiYW5nPScjIScKK3NobWF0dHlwZT0ndm9pZCAqJworc2hvcnRzaXplPScyJworc2hycGVudj0nJworc2hzaGFycD0ndHJ1ZScKK3NpZ19jb3VudD0nNjUnCitzaWdfbmFtZT0nWkVSTyBIVVAgSU5UIFFVSVQgSUxMIFRSQVAgQUJSVCBCVVMgRlBFIEtJTEwgVVNSMSBTRUdWIFVTUjIgUElQRSBBTFJNIFRFUk0gU1RLRkxUIENITEQgQ09OVCBTVE9QIFRTVFAgVFRJTiBUVE9VIFVSRyBYQ1BVIFhGU1ogVlRBTFJNIFBST0YgV0lOQ0ggSU8gUFdSIFNZUyBOVU0zMiBOVU0zMyBSVE1JTiBOVU0zNSBOVU0zNiBOVU0zNyBOVU0zOCBOVU0zOSBOVU00MCBOVU00MSBOVU00MiBOVU00MyBOVU00NCBOVU00NSBOVU00NiBOVU00NyBOVU00OCBOVU00OSBOVU01MCBOVU01MSBOVU01MiBOVU01MyBOVU01NCBOVU01NSBOVU01NiBOVU01NyBOVU01OCBOVU01OSBOVU02MCBOVU02MSBOVU02MiBOVU02MyBSVE1BWCBJT1QgQ0xEIFBPTEwgVU5VU0VEICcKK3NpZ19uYW1lX2luaXQ9JyJaRVJPIiwgIkhVUCIsICJJTlQiLCAiUVVJVCIsICJJTEwiLCAiVFJBUCIsICJBQlJUIiwgIkJVUyIsICJGUEUiLCAiS0lMTCIsICJVU1IxIiwgIlNFR1YiLCAiVVNSMiIsICJQSVBFIiwgIkFMUk0iLCAiVEVSTSIsICJTVEtGTFQiLCAiQ0hMRCIsICJDT05UIiwgIlNUT1AiLCAiVFNUUCIsICJUVElOIiwgIlRUT1UiLCAiVVJHIiwgIlhDUFUiLCAiWEZTWiIsICJWVEFMUk0iLCAiUFJPRiIsICJXSU5DSCIsICJJTyIsICJQV1IiLCAiU1lTIiwgIk5VTTMyIiwgIk5VTTMzIiwgIlJUTUlOIiwgIk5VTTM1IiwgIk5VTTM2IiwgIk5VTTM3IiwgIk5VTTM4IiwgIk5VTTM5IiwgIk5VTTQwIiwgIk5VTTQxIiwgIk5VTTQyIiwgIk5VTTQzIiwgIk5VTTQ0IiwgIk5VTTQ1IiwgIk5VTTQ2IiwgIk5VTTQ3IiwgIk5VTTQ4IiwgIk5VTTQ5IiwgIk5VTTUwIiwgIk5VTTUxIiwgIk5VTTUyIiwgIk5VTTUzIiwgIk5VTTU0IiwgIk5VTTU1IiwgIk5VTTU2IiwgIk5VTTU3IiwgIk5VTTU4IiwgIk5VTTU5IiwgIk5VTTYwIiwgIk5VTTYxIiwgIk5VTTYyIiwgIk5VTTYzIiwgIlJUTUFYIiwgIklPVCIsICJDTEQiLCAiUE9MTCIsICJVTlVTRUQiLCAwJworc2lnX251bT0nMCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAzOCAzOSA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA0OCA0OSA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MyA2NCA2IDE3IDI5IDMxICcKK3NpZ19udW1faW5pdD0nMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDYsIDE3LCAyOSwgMzEsIDAnCitzaWdfc2l6ZT0nNjknCitzaWduYWxfdD0ndm9pZCcKK3NpdGVhcmNoPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3NpdGVhcmNoZXhwPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3NpdGViaW49J0BVU1JCSU5AJworc2l0ZWJpbmV4cD0nQFVTUkJJTkAnCitzaXRlaHRtbDFkaXI9JycKK3NpdGVodG1sMWRpcmV4cD0nJworc2l0ZWh0bWwzZGlyPScnCitzaXRlaHRtbDNkaXJleHA9JycKK3NpdGVsaWI9J0BMSUJESVJAL3Blcmwvc2l0ZV9wZXJsLzUuMjIuMCcKK3NpdGVsaWJfc3RlbT0nQExJQkRJUkAvcGVybC9zaXRlX3BlcmwnCitzaXRlbGliZXhwPSdATElCRElSQC9wZXJsL3NpdGVfcGVybC81LjIyLjAnCitzaXRlbWFuMWRpcj0nJworc2l0ZW1hbjFkaXJleHA9JycKK3NpdGVtYW4zZGlyPScnCitzaXRlbWFuM2RpcmV4cD0nJworc2l0ZXByZWZpeD0nQEVYRUNQUkVGSVhAJworc2l0ZXByZWZpeGV4cD0nQEVYRUNQUkVGSVhAJworc2l0ZXNjcmlwdD0nQFVTUkJJTkAnCitzaXRlc2NyaXB0ZXhwPSdAVVNSQklOQCcKK3NpemVzaXplPSc4Jworc2l6ZXR5cGU9J3NpemVfdCcKK3NsZWVwPScnCitzbWFpbD0nJworc289J3NvJworc29ja2V0aGRyPScnCitzb2NrZXRsaWI9JycKK3NvY2tzaXpldHlwZT0nc29ja2xlbl90Jworc29ydD0nc29ydCcKK3NwYWNrYWdlPSdQZXJsNScKK3NwaXRzaGVsbD0nY2F0Jworc3JhbmQ0OF9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9MUycKK3NyYW5kb21fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0lfVFMnCitzcmM9Jy4nCitzc2l6ZXR5cGU9J3NzaXplX3QnCitzdF9pbm9fc2lnbj0nMScKK3N0X2lub19zaXplPSc4Jworc3RhcnRwZXJsPScjIUBVU1JCSU5AL3BlcmwnCitzdGFydHNoPScjIS9iaW4vc2gnCitzdGF0aWNfZXh0PScgJworc3RkY2hhcj0nY2hhcicKK3N0ZGlvX2Jhc2U9JygoZnApLT5fSU9fcmVhZF9iYXNlKScKK3N0ZGlvX2J1ZnNpej0nKChmcCktPl9JT19yZWFkX2VuZCAtIChmcCktPl9JT19yZWFkX2Jhc2UpJworc3RkaW9fY250PScoKGZwKS0+X0lPX3JlYWRfZW5kIC0gKGZwKS0+X0lPX3JlYWRfcHRyKScKK3N0ZGlvX2ZpbGJ1Zj0nJworc3RkaW9fcHRyPScoKGZwKS0+X0lPX3JlYWRfcHRyKScKK3N0ZGlvX3N0cmVhbV9hcnJheT0nJworc3RyZXJyb3Jfcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfSUJXJworc3RyaW5ncz0nQElOQ0xVREVESVJAL3N0cmluZy5oJworc3VibWl0PScnCitzdWJ2ZXJzaW9uPScwJworc3lzbWFuPSdARVhFQ1BSRUZJWEAvc2hhcmUvbWFuL21hbjEnCitzeXNyb290PScnCit0YWlsPScnCit0YXI9JycKK3RhcmdldGFyY2g9JycKK3RhcmdldGRpcj0nJwordGFyZ2V0ZW52PScnCit0YXJnZXRob3N0PScnCit0YXJnZXRta2Rpcj0nJwordGFyZ2V0cG9ydD0nJwordGFyZ2V0c2g9Jy9iaW4vc2gnCit0Ymw9JycKK3RlZT0nJwordGVzdD0ndGVzdCcKK3RpbWVpbmNsPSdASU5DTFVERURJUkAvc3lzL3RpbWUuaCBASU5DTFVERURJUkAvdGltZS5oICcKK3RpbWV0eXBlPSd0aW1lX3QnCit0bXBuYW1fcl9wcm90bz0nUkVFTlRSQU5UX1BST1RPX0JfQicKK3RvPSc6JwordG91Y2g9J3RvdWNoJwordHI9J3RyJwordHJubD0nXG4nCit0cm9mZj0nJwordHR5bmFtZV9yX3Byb3RvPSdSRUVOVFJBTlRfUFJPVE9fSV9JQlcnCit1MTZzaXplPScyJwordTE2dHlwZT0ndW5zaWduZWQgc2hvcnQnCit1MzJzaXplPSc0JwordTMydHlwZT0ndW5zaWduZWQgaW50JwordTY0c2l6ZT0nOCcKK3U2NHR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1OHNpemU9JzEnCit1OHR5cGU9J3Vuc2lnbmVkIGNoYXInCit1aWRmb3JtYXQ9JyJ1IicKK3VpZHNpZ249JzEnCit1aWRzaXplPSc0JwordWlkdHlwZT0ndWlkX3QnCit1bmFtZT0ndW5hbWUnCit1bmlxPSd1bmlxJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nJwordXNlNTAwNXRocmVhZHM9J3VuZGVmJwordXNlNjRiaXRhbGw9J2RlZmluZScKK3VzZTY0Yml0aW50PSdkZWZpbmUnCit1c2VjYmFja3RyYWNlPSd1bmRlZicKK3VzZWNyb3NzY29tcGlsZT0nZGVmaW5lJwordXNlZGV2ZWw9J3VuZGVmJwordXNlZGw9J2RlZmluZScKK3VzZWR0cmFjZT0ndW5kZWYnCit1c2VmYXN0c3RkaW89J3VuZGVmJwordXNlaXRocmVhZHM9J2RlZmluZScKK3VzZWtlcm5wcm9jcGF0aG5hbWU9J3VuZGVmJwordXNlbGFyZ2VmaWxlcz0nZGVmaW5lJwordXNlbG9uZ2RvdWJsZT0ndW5kZWYnCit1c2VtYWxsb2N3cmFwPSdkZWZpbmUnCit1c2Vtb3JlYml0cz0ndW5kZWYnCit1c2VtdWx0aXBsaWNpdHk9J2RlZmluZScKK3VzZW15bWFsbG9jPSduJwordXNlbm09J2ZhbHNlJwordXNlbnNnZXRleGVjdXRhYmxlcGF0aD0ndW5kZWYnCit1c2VvcGNvZGU9J3RydWUnCit1c2VwZXJsaW89J2RlZmluZScKK3VzZXBvc2l4PSd0cnVlJwordXNlcXVhZG1hdGg9J3VuZGVmJwordXNlcmVlbnRyYW50PSd1bmRlZicKK3VzZXJlbG9jYXRhYmxlaW5jPSd1bmRlZicKK3VzZXNocnBsaWI9J3RydWUnCit1c2VzaXRlY3VzdG9taXplPSd1bmRlZicKK3VzZXNvY2tzPSd1bmRlZicKK3VzZXRocmVhZHM9J2RlZmluZScKK3VzZXZlbmRvcnByZWZpeD0nZGVmaW5lJwordXNldmVyc2lvbmVkYXJjaG5hbWU9J3VuZGVmJwordXNldmZvcms9J2ZhbHNlJwordXNyaW5jPSdASU5DTFVERURJUkAnCit1dW5hbWU9JycKK3V2WFVmb3JtYXQ9JyJsWCInCit1dm9mb3JtYXQ9JyJsbyInCit1dnNpemU9JzgnCit1dnR5cGU9J3Vuc2lnbmVkIGxvbmcnCit1dnVmb3JtYXQ9JyJsdSInCit1dnhmb3JtYXQ9JyJseCInCit2YXByb3RvPSdkZWZpbmUnCit2ZW5kb3JhcmNoPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMC9AQVJDSEAtdGhyZWFkLW11bHRpJwordmVuZG9yYXJjaGV4cD0nQExJQkRJUkAvcGVybC92ZW5kb3JfcGVybC81LjIyLjAvQEFSQ0hALXRocmVhZC1tdWx0aScKK3ZlbmRvcmJpbj0nQFVTUkJJTkAnCit2ZW5kb3JiaW5leHA9J0BVU1JCSU5AJwordmVuZG9yaHRtbDFkaXI9JyAnCit2ZW5kb3JodG1sMWRpcmV4cD0nJwordmVuZG9yaHRtbDNkaXI9JyAnCit2ZW5kb3JodG1sM2RpcmV4cD0nJwordmVuZG9ybGliPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK3ZlbmRvcmxpYl9zdGVtPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsJwordmVuZG9ybGliZXhwPSdATElCRElSQC9wZXJsL3ZlbmRvcl9wZXJsLzUuMjIuMCcKK3ZlbmRvcm1hbjFkaXI9JyAnCit2ZW5kb3JtYW4xZGlyZXhwPScnCit2ZW5kb3JtYW4zZGlyPScgJwordmVuZG9ybWFuM2RpcmV4cD0nJwordmVuZG9ycHJlZml4PSdARVhFQ1BSRUZJWEAnCit2ZW5kb3JwcmVmaXhleHA9J0BFWEVDUFJFRklYQCcKK3ZlbmRvcnNjcmlwdD0nQFVTUkJJTkAnCit2ZW5kb3JzY3JpcHRleHA9J0BVU1JCSU5AJwordmVyc2lvbj0nNS4yMi4wJwordmVyc2lvbl9wYXRjaGxldmVsX3N0cmluZz0ndmVyc2lvbiAyMiBzdWJ2ZXJzaW9uIDAnCit2ZXJzaW9ub25seT0ndW5kZWYnCit2aT0nJworeGxpYnB0aD0nQExJQkRJUkAvMzg2IEBCQVNFTElCRElSQDM4NicKK3lhY2M9J3lhY2MnCit5YWNjZmxhZ3M9JycKK3pjYXQ9JycKK3ppcD0nemlwJworUEVSTF9SRVZJU0lPTj01CitQRVJMX1ZFUlNJT049MjIKK1BFUkxfU1VCVkVSU0lPTj0wCitQRVJMX0FQSV9SRVZJU0lPTj01CitQRVJMX0FQSV9WRVJTSU9OPTIyCitQRVJMX0FQSV9TVUJWRVJTSU9OPTAKK1BFUkxfUEFUQ0hMRVZFTD0nJworUEVSTF9DT05GSUdfU0g9dHJ1ZQorOiBWYXJpYWJsZXMgcHJvcGFnYXRlZCBmcm9tIHByZXZpb3VzIGNvbmZpZy5zaCBmaWxlLgorbGliZGJfbmVlZHNfcHRocmVhZD0nTicKKworIyBmb3IgVGltZS1IaVJlcworZF9jbG9ja19uYW5vc2xlZXA9J2RlZmluZScKK2RfY2xvY2tfZ2V0dGltZT0nZGVmaW5lJworZF9jbG9ja19nZXRyZXM9J2RlZmluZScKK2RfY2xvY2s9J2RlZmluZScKK2RfbmFub3NsZWVwPSdkZWZpbmUnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTlhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMgpAQCAtMCwwICsxLDM4IEBACithbGlnbmJ5dGVzPSc0JworY2ZfdGltZT0nVGh1IERlYyAyMyAwMzo1Nzo1MSBVVEMgMjAxMCcKK2NwcHN5bWJvbHM9J19GSUxFX09GRlNFVF9CSVRTPTY0IF9HTlVfU09VUkNFPTEgX0xBUkdFRklMRTY0X1NPVVJDRT0xIF9MQVJHRUZJTEVfU09VUkNFPTEgX1BPU0lYX0NfU09VUkNFPTIwMDgwOUwgX1BPU0lYX1NPVVJDRT0xIF9SRUVOVFJBTlQ9MSBfWE9QRU5fU09VUkNFPTcwMCBfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgX19CSUdHRVNUX0FMSUdOTUVOVF9fPTE2IF9fQ0hBUjE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX0NIQVIzMl9UWVBFX189dW5zaWduZWRcIGludCBfX0NIQVJfQklUX189OCBfX0RCTF9ERU5PUk1fTUlOX189KChkb3VibGUpNC45NDA2NTY0NTg0MTI0NjU0NDE3N2UtMzI0TCkgX19EQkxfRElHX189MTUgX19EQkxfRVBTSUxPTl9fPSgoZG91YmxlKTIuMjIwNDQ2MDQ5MjUwMzEzMDgwODVlLTE2TCkgX19EQkxfSEFTX0RFTk9STV9fPTEgX19EQkxfSEFTX0lORklOSVRZX189MSBfX0RCTF9IQVNfUVVJRVRfTkFOX189MSBfX0RCTF9NQU5UX0RJR19fPTUzIF9fREJMX01BWF8xMF9FWFBfXz0zMDggX19EQkxfTUFYX0VYUF9fPTEwMjQgX19EQkxfTUFYX189KChkb3VibGUpMS43OTc2OTMxMzQ4NjIzMTU3MDgxNWUrMzA4TCkgX19EQkxfTUlOXzEwX0VYUF9fPSgtMzA3KSBfX0RCTF9NSU5fRVhQX189KC0xMDIxKSBfX0RCTF9NSU5fXz0oKGRvdWJsZSkyLjIyNTA3Mzg1ODUwNzIwMTM4MzA5ZS0zMDhMKSBfX0RFQzEyOF9FUFNJTE9OX189MUUtMzNETCBfX0RFQzEyOF9NQU5UX0RJR19fPTM0IF9fREVDMTI4X01BWF9FWFBfXz02MTQ1IF9fREVDMTI4X01BWF9fPTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RTYxNDRETCBfX0RFQzEyOF9NSU5fRVhQX189KC02MTQyKSBfX0RFQzEyOF9NSU5fXz0xRS02MTQzREwgX19ERUMxMjhfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzREwgX19ERUMzMl9FUFNJTE9OX189MUUtNkRGIF9fREVDMzJfTUFOVF9ESUdfXz03IF9fREVDMzJfTUFYX0VYUF9fPTk3IF9fREVDMzJfTUFYX189OS45OTk5OTlFOTZERiBfX0RFQzMyX01JTl9FWFBfXz0oLTk0KSBfX0RFQzMyX01JTl9fPTFFLTk1REYgX19ERUMzMl9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDFFLTk1REYgX19ERUM2NF9FUFNJTE9OX189MUUtMTVERCBfX0RFQzY0X01BTlRfRElHX189MTYgX19ERUM2NF9NQVhfRVhQX189Mzg1IF9fREVDNjRfTUFYX189OS45OTk5OTk5OTk5OTk5OTlFMzg0REQgX19ERUM2NF9NSU5fRVhQX189KC0zODIpIF9fREVDNjRfTUlOX189MUUtMzgzREQgX19ERUM2NF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDFFLTM4M0REIF9fREVDSU1BTF9CSURfRk9STUFUX189MSBfX0RFQ0lNQUxfRElHX189MjEgX19ERUNfRVZBTF9NRVRIT0RfXz0yIF9fRUxGX189MSBfX0ZJTklURV9NQVRIX09OTFlfXz0wIF9fRkxUX0RFTk9STV9NSU5fXz0xLjQwMTI5ODQ2NDMyNDgxNzA3MDkyZS00NUYgX19GTFRfRElHX189NiBfX0ZMVF9FUFNJTE9OX189MS4xOTIwOTI4OTU1MDc4MTI1MDAwMGUtN0YgX19GTFRfRVZBTF9NRVRIT0RfXz0yIF9fRkxUX0hBU19ERU5PUk1fXz0xIF9fRkxUX0hBU19JTkZJTklUWV9fPTEgX19GTFRfSEFTX1FVSUVUX05BTl9fPTEgX19GTFRfTUFOVF9ESUdfXz0yNCBfX0ZMVF9NQVhfMTBfRVhQX189MzggX19GTFRfTUFYX0VYUF9fPTEyOCBfX0ZMVF9NQVhfXz0zLjQwMjgyMzQ2NjM4NTI4ODU5ODEyZSszOEYgX19GTFRfTUlOXzEwX0VYUF9fPSgtMzcpIF9fRkxUX01JTl9FWFBfXz0oLTEyNSkgX19GTFRfTUlOX189MS4xNzU0OTQzNTA4MjIyODc1MDc5N2UtMzhGIF9fRkxUX1JBRElYX189MiBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8xPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMj0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQ9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84PTEgX19HTElCQ19NSU5PUl9fPTEyIF9fR0xJQkNfXz0yIF9fR05VQ19HTlVfSU5MSU5FX189MSBfX0dOVUNfTUlOT1JfXz01IF9fR05VQ19QQVRDSExFVkVMX189MSBfX0dOVUNfXz00IF9fR05VX0xJQlJBUllfXz02IF9fR1hYX0FCSV9WRVJTSU9OPTEwMDIgX19JTlQxNl9DKGMpPWMgX19JTlQxNl9NQVhfXz0zMjc2NyBfX0lOVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UMzJfQyhjKT1jIF9fSU5UMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVDMyX1RZUEVfXz1pbnQgX19JTlQ2NF9DKGMpPWNMTCBfX0lOVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0lOVDY0X1RZUEVfXz1sb25nXCBsb25nXCBpbnQgX19JTlQ4X0MoYyk9YyBfX0lOVDhfTUFYX189MTI3IF9fSU5UOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UTUFYX0MoYyk9Y0xMIF9fSU5UTUFYX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0lOVE1BWF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UUFRSX01BWF9fPTIxNDc0ODM2NDcgX19JTlRQVFJfVFlQRV9fPWludCBfX0lOVF9GQVNUMTZfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9GQVNUMTZfVFlQRV9fPWludCBfX0lOVF9GQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9GQVNUMzJfVFlQRV9fPWludCBfX0lOVF9GQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UX0ZBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgaW50IF9fSU5UX0ZBU1Q4X01BWF9fPTEyNyBfX0lOVF9GQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX0xFQVNUMTZfTUFYX189MzI3NjcgX19JTlRfTEVBU1QxNl9UWVBFX189c2hvcnRcIGludCBfX0lOVF9MRUFTVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlRfTEVBU1QzMl9UWVBFX189aW50IF9fSU5UX0xFQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0xMIF9fSU5UX0xFQVNUNjRfVFlQRV9fPWxvbmdcIGxvbmdcIGludCBfX0lOVF9MRUFTVDhfTUFYX189MTI3IF9fSU5UX0xFQVNUOF9UWVBFX189c2lnbmVkXCBjaGFyIF9fSU5UX01BWF9fPTIxNDc0ODM2NDcgX19MREJMX0RFTk9STV9NSU5fXz0zLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUxTCBfX0xEQkxfRElHX189MTggX19MREJMX0VQU0lMT05fXz0xLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUwgX19MREJMX0hBU19ERU5PUk1fXz0xIF9fTERCTF9IQVNfSU5GSU5JVFlfXz0xIF9fTERCTF9IQVNfUVVJRVRfTkFOX189MSBfX0xEQkxfTUFOVF9ESUdfXz02NCBfX0xEQkxfTUFYXzEwX0VYUF9fPTQ5MzIgX19MREJMX01BWF9FWFBfXz0xNjM4NCBfX0xEQkxfTUFYX189MS4xODk3MzE0OTUzNTcyMzE3NjUwMmUrNDkzMkwgX19MREJMX01JTl8xMF9FWFBfXz0oLTQ5MzEpIF9fTERCTF9NSU5fRVhQX189KC0xNjM4MSkgX19MREJMX01JTl9fPTMuMzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMIF9fTE9OR19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCBfX0xPTkdfTUFYX189MjE0NzQ4MzY0N0wgX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRT0xIF9fUFRSRElGRl9NQVhfXz0yMTQ3NDgzNjQ3IF9fUFRSRElGRl9UWVBFX189aW50IF9fUkVHSVNURVJfUFJFRklYX189IF9fU0NIQVJfTUFYX189MTI3IF9fU0hSVF9NQVhfXz0zMjc2NyBfX1NJR19BVE9NSUNfTUFYX189MjE0NzQ4MzY0NyBfX1NJR19BVE9NSUNfTUlOX189KC0yMTQ3NDgzNjQ3XCAtXCAxKSBfX1NJR19BVE9NSUNfVFlQRV9fPWludCBfX1NJWkVPRl9ET1VCTEVfXz04IF9fU0laRU9GX0ZMT0FUX189NCBfX1NJWkVPRl9JTlRfXz00IF9fU0laRU9GX0xPTkdfRE9VQkxFX189MTIgX19TSVpFT0ZfTE9OR19MT05HX189OCBfX1NJWkVPRl9MT05HX189NCBfX1NJWkVPRl9QT0lOVEVSX189NCBfX1NJWkVPRl9QVFJESUZGX1RfXz00IF9fU0laRU9GX1NIT1JUX189MiBfX1NJWkVPRl9TSVpFX1RfXz00IF9fU0laRU9GX1dDSEFSX1RfXz00IF9fU0laRU9GX1dJTlRfVF9fPTQgX19TSVpFX01BWF9fPTQyOTQ5NjcyOTVVIF9fU0laRV9UWVBFX189dW5zaWduZWRcIGludCBfX1NURENfSE9TVEVEX189MSBfX1NURENfXz0xIF9fVUlOVDE2X0MoYyk9YyBfX1VJTlQxNl9NQVhfXz02NTUzNSBfX1VJTlQxNl9UWVBFX189c2hvcnRcIHVuc2lnbmVkXCBpbnQgX19VSU5UMzJfQyhjKT1jVSBfX1VJTlQzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlQzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlQ2NF9DKGMpPWNVTEwgX19VSU5UNjRfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UNjRfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UOF9DKGMpPWMgX19VSU5UOF9NQVhfXz0yNTUgX19VSU5UOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UTUFYX0MoYyk9Y1VMTCBfX1VJTlRNQVhfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgX19VSU5UTUFYX1RZUEVfXz1sb25nXCBsb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVFBUUl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRQVFJfVFlQRV9fPXVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QxNl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfRkFTVDE2X1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVF9GQVNUMzJfTUFYX189NDI5NDk2NzI5NVUgX19VSU5UX0ZBU1QzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfRkFTVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIF9fVUlOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIGxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q4X01BWF9fPTI1NSBfX1VJTlRfRkFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVUlOVF9MRUFTVDE2X01BWF9fPTY1NTM1IF9fVUlOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfTEVBU1QzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMTCBfX1VJTlRfTEVBU1Q2NF9UWVBFX189bG9uZ1wgbG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q4X01BWF9fPTI1NSBfX1VJTlRfTEVBU1Q4X1RZUEVfXz11bnNpZ25lZFwgY2hhciBfX1VTRVJfTEFCRUxfUFJFRklYX189IF9fVVNFX0JTRD0xIF9fVVNFX0ZJTEVfT0ZGU0VUNjQ9MSBfX1VTRV9HTlU9MSBfX1VTRV9MQVJHRUZJTEU2ND0xIF9fVVNFX0xBUkdFRklMRT0xIF9fVVNFX01JU0M9MSBfX1VTRV9QT1NJWDE5OTMwOT0xIF9fVVNFX1BPU0lYMTk5NTA2PTEgX19VU0VfUE9TSVgyPTEgX19VU0VfUE9TSVg9MSBfX1VTRV9SRUVOVFJBTlQ9MSBfX1VTRV9TVklEPTEgX19VU0VfVU5JWDk4PTEgX19VU0VfWE9QRU49MSBfX1VTRV9YT1BFTl9FWFRFTkRFRD0xIF9fVkVSU0lPTl9fPSI0LjUuMSIgX19XQ0hBUl9NQVhfXz0yMTQ3NDgzNjQ3TCBfX1dDSEFSX01JTl9fPSgtMjE0NzQ4MzY0N0xcIC1cIDEpIF9fV0NIQVJfVFlQRV9fPWxvbmdcIGludCBfX1dJTlRfTUFYX189NDI5NDk2NzI5NVUgX19XSU5UX01JTl9fPTBVIF9fV0lOVF9UWVBFX189dW5zaWduZWRcIGludCBfX2dudV9saW51eF9fPTEgX19pMzg2PTEgX19pMzg2X189MSBfX2k1ODY9MSBfX2k1ODZfXz0xIF9fbGludXg9MSBfX2xpbnV4X189MSBfX3BlbnRpdW09MSBfX3BlbnRpdW1fXz0xIF9fdHVuZV9pNTg2X189MSBfX3R1bmVfcGVudGl1bV9fPTEgX191bml4PTEgX191bml4X189MSBpMzg2PTEgbGludXg9MSB1bml4PTEnCitkX252X3ByZXNlcnZlc191dj0nZGVmaW5lJworZF9wcmludGZfZm9ybWF0X251bGw9J2RlZmluZScKK2RfdTMyYWxpZ249J3VuZGVmJworZ2lkZm9ybWF0PScibHUiJworaTMydHlwZT0nbG9uZycKK2k2NHR5cGU9J2xvbmcgbG9uZycKK2l2c2l6ZT0nNCcKK2xvbmdkYmxzaXplPScxMicKK2xvbmdzaXplPSc0JworbXl1bmFtZT0nbGludXggcWVtdXg4NiAyLjYuMzctcmM1LXlvY3RvLXN0YW5kYXJkKyAjMSBwcmVlbXB0IG1vbiBkZWMgMjAgMTQ6MjE6MjcgcHN0IDIwMTAgaTY4NiBnbnVsaW51eCAnCituZWVkX3ZhX2NvcHk9J3VuZGVmJworbmV0ZGJfaG9zdF90eXBlPSdjb25zdCB2b2lkIConCitudl9wcmVzZXJ2ZXNfdXZfYml0cz0nMzInCitwdHJzaXplPSc0JworcXVhZGtpbmQ9JzMnCitxdWFkdHlwZT0nbG9uZyBsb25nJworc0dNVElNRV9tYXg9JzIxNDc0ODM2NDcnCitzR01USU1FX21pbj0nLTIxNDc0ODM2NDgnCitzTE9DQUxUSU1FX21heD0nMjE0NzQ4MzY0NycKK3NMT0NBTFRJTUVfbWluPSctMjE0NzQ4MzY0OCcKK3NQUklYVTY0PSciTFgiJworc1BSSWQ2ND0nIkxkIicKK3NQUklpNjQ9JyJMaSInCitzUFJJbzY0PSciTG8iJworc1BSSXU2ND0nIkx1IicKK3NQUkl4NjQ9JyJMeCInCitzZWxlY3RtaW5iaXRzPSczMicKK3NpemVzaXplPSc0JwordTMydHlwZT0ndW5zaWduZWQgbG9uZycKK3U2NHR5cGU9J3Vuc2lnbmVkIGxvbmcgbG9uZycKK3VpZGZvcm1hdD0nImx1IicKK3VxdWFkdHlwZT0ndW5zaWduZWQgbG9uZyBsb25nJwordXNlNjRiaXRhbGw9J3VuZGVmJwordXNlNjRiaXRpbnQ9J3VuZGVmJwordXZzaXplPSc0JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItYmUgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1iZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTlhOWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItYmUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPSc0MzIxJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItbGUgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC0zMi1sZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU0MjI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtMzItbGUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPScxMjM0JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI5ZDNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQKQEAgLTAsMCArMSwzOCBAQAorYWxpZ25ieXRlcz0nOCcKK2NmX3RpbWU9J1RodSBEZWMgMjMgMDI6MDY6NDIgVVRDIDIwMTAnCitjcHBzeW1ib2xzPSdfRklMRV9PRkZTRVRfQklUUz02NCBfR05VX1NPVVJDRT0xIF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSBfTEFSR0VGSUxFX1NPVVJDRT0xIF9MUDY0PTEgX1BPU0lYX0NfU09VUkNFPTIwMDgwOUwgX1BPU0lYX1NPVVJDRT0xIF9SRUVOVFJBTlQ9MSBfWE9QRU5fU09VUkNFPTcwMCBfWE9QRU5fU09VUkNFX0VYVEVOREVEPTEgX19CSUdHRVNUX0FMSUdOTUVOVF9fPTE2IF9fQ0hBUjE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX0NIQVIzMl9UWVBFX189dW5zaWduZWRcIGludCBfX0NIQVJfQklUX189OCBfX0RCTF9ERU5PUk1fTUlOX189KChkb3VibGUpNC45NDA2NTY0NTg0MTI0NjU0NDE3N2UtMzI0TCkgX19EQkxfRElHX189MTUgX19EQkxfRVBTSUxPTl9fPSgoZG91YmxlKTIuMjIwNDQ2MDQ5MjUwMzEzMDgwODVlLTE2TCkgX19EQkxfSEFTX0RFTk9STV9fPTEgX19EQkxfSEFTX0lORklOSVRZX189MSBfX0RCTF9IQVNfUVVJRVRfTkFOX189MSBfX0RCTF9NQU5UX0RJR19fPTUzIF9fREJMX01BWF8xMF9FWFBfXz0zMDggX19EQkxfTUFYX0VYUF9fPTEwMjQgX19EQkxfTUFYX189KChkb3VibGUpMS43OTc2OTMxMzQ4NjIzMTU3MDgxNWUrMzA4TCkgX19EQkxfTUlOXzEwX0VYUF9fPSgtMzA3KSBfX0RCTF9NSU5fRVhQX189KC0xMDIxKSBfX0RCTF9NSU5fXz0oKGRvdWJsZSkyLjIyNTA3Mzg1ODUwNzIwMTM4MzA5ZS0zMDhMKSBfX0RFQzEyOF9FUFNJTE9OX189MUUtMzNETCBfX0RFQzEyOF9NQU5UX0RJR19fPTM0IF9fREVDMTI4X01BWF9FWFBfXz02MTQ1IF9fREVDMTI4X01BWF9fPTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RTYxNDRETCBfX0RFQzEyOF9NSU5fRVhQX189KC02MTQyKSBfX0RFQzEyOF9NSU5fXz0xRS02MTQzREwgX19ERUMxMjhfU1VCTk9STUFMX01JTl9fPTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzREwgX19ERUMzMl9FUFNJTE9OX189MUUtNkRGIF9fREVDMzJfTUFOVF9ESUdfXz03IF9fREVDMzJfTUFYX0VYUF9fPTk3IF9fREVDMzJfTUFYX189OS45OTk5OTlFOTZERiBfX0RFQzMyX01JTl9FWFBfXz0oLTk0KSBfX0RFQzMyX01JTl9fPTFFLTk1REYgX19ERUMzMl9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDFFLTk1REYgX19ERUM2NF9FUFNJTE9OX189MUUtMTVERCBfX0RFQzY0X01BTlRfRElHX189MTYgX19ERUM2NF9NQVhfRVhQX189Mzg1IF9fREVDNjRfTUFYX189OS45OTk5OTk5OTk5OTk5OTlFMzg0REQgX19ERUM2NF9NSU5fRVhQX189KC0zODIpIF9fREVDNjRfTUlOX189MUUtMzgzREQgX19ERUM2NF9TVUJOT1JNQUxfTUlOX189MC4wMDAwMDAwMDAwMDAwMDFFLTM4M0REIF9fREVDSU1BTF9CSURfRk9STUFUX189MSBfX0RFQ0lNQUxfRElHX189MjEgX19ERUNfRVZBTF9NRVRIT0RfXz0yIF9fRUxGX189MSBfX0ZJTklURV9NQVRIX09OTFlfXz0wIF9fRkxUX0RFTk9STV9NSU5fXz0xLjQwMTI5ODQ2NDMyNDgxNzA3MDkyZS00NUYgX19GTFRfRElHX189NiBfX0ZMVF9FUFNJTE9OX189MS4xOTIwOTI4OTU1MDc4MTI1MDAwMGUtN0YgX19GTFRfRVZBTF9NRVRIT0RfXz0wIF9fRkxUX0hBU19ERU5PUk1fXz0xIF9fRkxUX0hBU19JTkZJTklUWV9fPTEgX19GTFRfSEFTX1FVSUVUX05BTl9fPTEgX19GTFRfTUFOVF9ESUdfXz0yNCBfX0ZMVF9NQVhfMTBfRVhQX189MzggX19GTFRfTUFYX0VYUF9fPTEyOCBfX0ZMVF9NQVhfXz0zLjQwMjgyMzQ2NjM4NTI4ODU5ODEyZSszOEYgX19GTFRfTUlOXzEwX0VYUF9fPSgtMzcpIF9fRkxUX01JTl9FWFBfXz0oLTEyNSkgX19GTFRfTUlOX189MS4xNzU0OTQzNTA4MjIyODc1MDc5N2UtMzhGIF9fRkxUX1JBRElYX189MiBfX0dDQ19IQVZFX0RXQVJGMl9DRklfQVNNPTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMT0xIF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzI9MSBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF80PTEgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfOD0xIF9fR0xJQkNfTUlOT1JfXz0xMiBfX0dMSUJDX189MiBfX0dOVUNfR05VX0lOTElORV9fPTEgX19HTlVDX01JTk9SX189NSBfX0dOVUNfUEFUQ0hMRVZFTF9fPTEgX19HTlVDX189NCBfX0dOVV9MSUJSQVJZX189NiBfX0dYWF9BQklfVkVSU0lPTj0xMDAyIF9fSU5UMTZfQyhjKT1jIF9fSU5UMTZfTUFYX189MzI3NjcgX19JTlQxNl9UWVBFX189c2hvcnRcIGludCBfX0lOVDMyX0MoYyk9YyBfX0lOVDMyX01BWF9fPTIxNDc0ODM2NDcgX19JTlQzMl9UWVBFX189aW50IF9fSU5UNjRfQyhjKT1jTCBfX0lOVDY0X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UNjRfVFlQRV9fPWxvbmdcIGludCBfX0lOVDhfQyhjKT1jIF9fSU5UOF9NQVhfXz0xMjcgX19JTlQ4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRNQVhfQyhjKT1jTCBfX0lOVE1BWF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVE1BWF9UWVBFX189bG9uZ1wgaW50IF9fSU5UUFRSX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UUFRSX1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDE2X01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fSU5UX0ZBU1QxNl9UWVBFX189bG9uZ1wgaW50IF9fSU5UX0ZBU1QzMl9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9GQVNUMzJfVFlQRV9fPWxvbmdcIGludCBfX0lOVF9GQVNUNjRfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19JTlRfRkFTVDY0X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfRkFTVDhfTUFYX189MTI3IF9fSU5UX0ZBU1Q4X1RZUEVfXz1zaWduZWRcIGNoYXIgX19JTlRfTEVBU1QxNl9NQVhfXz0zMjc2NyBfX0lOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgaW50IF9fSU5UX0xFQVNUMzJfTUFYX189MjE0NzQ4MzY0NyBfX0lOVF9MRUFTVDMyX1RZUEVfXz1pbnQgX19JTlRfTEVBU1Q2NF9NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TCBfX0lOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCBpbnQgX19JTlRfTEVBU1Q4X01BWF9fPTEyNyBfX0lOVF9MRUFTVDhfVFlQRV9fPXNpZ25lZFwgY2hhciBfX0lOVF9NQVhfXz0yMTQ3NDgzNjQ3IF9fTERCTF9ERU5PUk1fTUlOX189My42NDUxOTk1MzE4ODI0NzQ2MDI1M2UtNDk1MUwgX19MREJMX0RJR19fPTE4IF9fTERCTF9FUFNJTE9OX189MS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMIF9fTERCTF9IQVNfREVOT1JNX189MSBfX0xEQkxfSEFTX0lORklOSVRZX189MSBfX0xEQkxfSEFTX1FVSUVUX05BTl9fPTEgX19MREJMX01BTlRfRElHX189NjQgX19MREJMX01BWF8xMF9FWFBfXz00OTMyIF9fTERCTF9NQVhfRVhQX189MTYzODQgX19MREJMX01BWF9fPTEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMIF9fTERCTF9NSU5fMTBfRVhQX189KC00OTMxKSBfX0xEQkxfTUlOX0VYUF9fPSgtMTYzODEpIF9fTERCTF9NSU5fXz0zLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTCBfX0xPTkdfTE9OR19NQVhfXz05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgX19MT05HX01BWF9fPTkyMjMzNzIwMzY4NTQ3NzU4MDdMIF9fTFA2NF9fPTEgX19NTVhfXz0xIF9fUFJBR01BX1JFREVGSU5FX0VYVE5BTUU9MSBfX1BUUkRJRkZfTUFYX189OTIyMzM3MjAzNjg1NDc3NTgwN0wgX19QVFJESUZGX1RZUEVfXz1sb25nXCBpbnQgX19SRUdJU1RFUl9QUkVGSVhfXz0gX19TQ0hBUl9NQVhfXz0xMjcgX19TSFJUX01BWF9fPTMyNzY3IF9fU0lHX0FUT01JQ19NQVhfXz0yMTQ3NDgzNjQ3IF9fU0lHX0FUT01JQ19NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fU0lHX0FUT01JQ19UWVBFX189aW50IF9fU0laRU9GX0RPVUJMRV9fPTggX19TSVpFT0ZfRkxPQVRfXz00IF9fU0laRU9GX0lOVF9fPTQgX19TSVpFT0ZfTE9OR19ET1VCTEVfXz0xNiBfX1NJWkVPRl9MT05HX0xPTkdfXz04IF9fU0laRU9GX0xPTkdfXz04IF9fU0laRU9GX1BPSU5URVJfXz04IF9fU0laRU9GX1BUUkRJRkZfVF9fPTggX19TSVpFT0ZfU0hPUlRfXz0yIF9fU0laRU9GX1NJWkVfVF9fPTggX19TSVpFT0ZfV0NIQVJfVF9fPTQgX19TSVpFT0ZfV0lOVF9UX189NCBfX1NJWkVfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1NJWkVfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19TU0UyX01BVEhfXz0xIF9fU1NFMl9fPTEgX19TU0VfTUFUSF9fPTEgX19TU0VfXz0xIF9fU1REQ19IT1NURURfXz0xIF9fU1REQ19fPTEgX19VSU5UMTZfQyhjKT1jIF9fVUlOVDE2X01BWF9fPTY1NTM1IF9fVUlOVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlQzMl9DKGMpPWNVIF9fVUlOVDMyX01BWF9fPTQyOTQ5NjcyOTVVIF9fVUlOVDMyX1RZUEVfXz11bnNpZ25lZFwgaW50IF9fVUlOVDY0X0MoYyk9Y1VMIF9fVUlOVDY0X01BWF9fPTE4NDQ2NzQ0MDczNzA5NTUxNjE1VUwgX19VSU5UNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UOF9DKGMpPWMgX19VSU5UOF9NQVhfXz0yNTUgX19VSU5UOF9UWVBFX189dW5zaWduZWRcIGNoYXIgX19VSU5UTUFYX0MoYyk9Y1VMIF9fVUlOVE1BWF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVE1BWF9UWVBFX189bG9uZ1wgdW5zaWduZWRcIGludCBfX1VJTlRQVFJfTUFYX189MTg0NDY3NDQwNzM3MDk1NTE2MTVVTCBfX1VJTlRQVFJfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QxNl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9GQVNUMTZfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1QzMl9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9GQVNUMzJfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9GQVNUNjRfVFlQRV9fPWxvbmdcIHVuc2lnbmVkXCBpbnQgX19VSU5UX0ZBU1Q4X01BWF9fPTI1NSBfX1VJTlRfRkFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVUlOVF9MRUFTVDE2X01BWF9fPTY1NTM1IF9fVUlOVF9MRUFTVDE2X1RZUEVfXz1zaG9ydFwgdW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1QzMl9NQVhfXz00Mjk0OTY3Mjk1VSBfX1VJTlRfTEVBU1QzMl9UWVBFX189dW5zaWduZWRcIGludCBfX1VJTlRfTEVBU1Q2NF9NQVhfXz0xODQ0Njc0NDA3MzcwOTU1MTYxNVVMIF9fVUlOVF9MRUFTVDY0X1RZUEVfXz1sb25nXCB1bnNpZ25lZFwgaW50IF9fVUlOVF9MRUFTVDhfTUFYX189MjU1IF9fVUlOVF9MRUFTVDhfVFlQRV9fPXVuc2lnbmVkXCBjaGFyIF9fVVNFUl9MQUJFTF9QUkVGSVhfXz0gX19VU0VfQlNEPTEgX19VU0VfRklMRV9PRkZTRVQ2ND0xIF9fVVNFX0dOVT0xIF9fVVNFX0xBUkdFRklMRTY0PTEgX19VU0VfTEFSR0VGSUxFPTEgX19VU0VfTUlTQz0xIF9fVVNFX1BPU0lYMTk5MzA5PTEgX19VU0VfUE9TSVgxOTk1MDY9MSBfX1VTRV9QT1NJWDI9MSBfX1VTRV9QT1NJWD0xIF9fVVNFX1JFRU5UUkFOVD0xIF9fVVNFX1NWSUQ9MSBfX1VTRV9VTklYOTg9MSBfX1VTRV9YT1BFTj0xIF9fVVNFX1hPUEVOX0VYVEVOREVEPTEgX19WRVJTSU9OX189IjQuNS4xIiBfX1dDSEFSX01BWF9fPTIxNDc0ODM2NDcgX19XQ0hBUl9NSU5fXz0oLTIxNDc0ODM2NDdcIC1cIDEpIF9fV0NIQVJfVFlQRV9fPWludCBfX1dJTlRfTUFYX189NDI5NDk2NzI5NVUgX19XSU5UX01JTl9fPTBVIF9fV0lOVF9UWVBFX189dW5zaWduZWRcIGludCBfX2FtZDY0PTEgX19hbWQ2NF9fPTEgX19nbnVfbGludXhfXz0xIF9fazg9MSBfX2s4X189MSBfX2xpbnV4PTEgX19saW51eF9fPTEgX191bml4PTEgX191bml4X189MSBfX3g4Nl82ND0xIF9feDg2XzY0X189MSBsaW51eD0xIHVuaXg9MScKK2RfbnZfcHJlc2VydmVzX3V2PSd1bmRlZicKK2RfcHJpbnRmX2Zvcm1hdF9udWxsPSd1bmRlZicKK2RfdTMyYWxpZ249J2RlZmluZScKK2dpZGZvcm1hdD0nInUiJworaTMydHlwZT0naW50JworaTY0dHlwZT0nbG9uZycKK2l2c2l6ZT0nOCcKK2xvbmdkYmxzaXplPScxNicKK2xvbmdzaXplPSc4JworbXl1bmFtZT0nbGludXggcWVtdXg4Ni02NCAyLjYuMzctcmM1LXlvY3RvLXN0YW5kYXJkKyAjMSBzbXAgcHJlZW1wdCBtb24gZGVjIDIwIDE3OjE5OjUwIHBzdCAyMDEwIHg4Nl82NCBnbnVsaW51eCAnCituZWVkX3ZhX2NvcHk9J2RlZmluZScKK25ldGRiX2hvc3RfdHlwZT0nY2hhciAqJworbnZfcHJlc2VydmVzX3V2X2JpdHM9JzUzJworcHRyc2l6ZT0nOCcKK3F1YWRraW5kPScyJworcXVhZHR5cGU9J2xvbmcnCitzR01USU1FX21heD0nNjc3NjgwMzYxOTE2NzY3OTknCitzR01USU1FX21pbj0nLTYyMTY3MjE5MjAwJworc0xPQ0FMVElNRV9tYXg9JzY3NzY4MDM2MTkxNjc2Nzk5Jworc0xPQ0FMVElNRV9taW49Jy02MjE2NzIxOTIwMCcKK3NQUklYVTY0PScibFgiJworc1BSSWQ2ND0nImxkIicKK3NQUklpNjQ9JyJsaSInCitzUFJJbzY0PScibG8iJworc1BSSXU2ND0nImx1IicKK3NQUkl4NjQ9JyJseCInCitzZWxlY3RtaW5iaXRzPSc2NCcKK3NpemVzaXplPSc4JwordTMydHlwZT0ndW5zaWduZWQgaW50JwordTY0dHlwZT0ndW5zaWduZWQgbG9uZycKK3VpZGZvcm1hdD0nInUiJwordXF1YWR0eXBlPSd1bnNpZ25lZCBsb25nJwordXNlNjRiaXRhbGw9J2RlZmluZScKK3VzZTY0Yml0aW50PSdkZWZpbmUnCit1dnNpemU9JzgnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1iZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY29uZmlnLnNoLTY0LWJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOGNlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1iZQpAQCAtMCwwICsxIEBACitieXRlb3JkZXI9Jzg3NjU0MzIxJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtbGUgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2NvbmZpZy5zaC02NC1sZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzdkMmE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jb25maWcuc2gtNjQtbGUKQEAgLTAsMCArMSBAQAorYnl0ZW9yZGVyPScxMjM0NTY3OCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9jcm9zcy1nZW5lcmF0ZV91dWRtYXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwYWQ2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvY3Jvc3MtZ2VuZXJhdGVfdXVkbWFwLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS4xNC4yL01ha2VmaWxlLlNICis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9NYWtlZmlsZS5TSAorKysrIHBlcmwtNS4xNC4yL01ha2VmaWxlLlNICitAQCAtNjIyLDcgKzYyMiw3IEBAIGJpdGNvdW50Lmg6IGdlbmVyYXRlX3V1ZG1hcCQoSE9TVF9FWEVfRVgKKyAJJChSVU4pIC4vZ2VuZXJhdGVfdXVkbWFwJChIT1NUX0VYRV9FWFQpIHV1ZG1hcC5oIGJpdGNvdW50LmgKKyAKKyBnZW5lcmF0ZV91dWRtYXAkKEhPU1RfRVhFX0VYVCk6IGdlbmVyYXRlX3V1ZG1hcCQoT0JKX0VYVCkKKy0JJChDQykgLW8gZ2VuZXJhdGVfdXVkbWFwJChFWEVfRVhUKSAkKExERkxBR1MpIGdlbmVyYXRlX3V1ZG1hcCQoT0JKX0VYVCkgJChsaWJzKQorKwkkKEJVSUxEX0NDKSAtbyBnZW5lcmF0ZV91dWRtYXAkKEVYRV9FWFQpIGdlbmVyYXRlX3V1ZG1hcC5jCisgCisgbWluaXBlcmxtYWluJChPQkpfRVhUKTogbWluaXBlcmxtYWluLmMgcGF0Y2hsZXZlbC5oCisgCSQoQ0NDTUQpICQoUExETEZMQUdTKSAkKi5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuLW1pc3Npbmctc2l0ZS1kaXJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzYjk2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgpAQCAtMCwwICsxLDYyIEBACitGcm9tIGQzM2Q0Njk2MzAzNWVmNzI2MTQ0ZGM2NmJlMmFlOWMwMGFlYzAzMzMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDE2IE9jdCAyMDEyIDIzOjA3OjU2ICswMzAwCitTdWJqZWN0OiBGaXggQ1BBTjo6Rmlyc3RUaW1lIGRlZmF1bHRzIHdpdGggbm9uZXhpc3Rpbmcgc2l0ZSBkaXJzIGlmIGEgcGFyZW50CisgaXMgd3JpdGFibGUKKworVGhlIHNpdGUgZGlyZWN0b3JpZXMgZG8gbm90IGV4aXN0IG9uIGEgdHlwaWNhbCBEZWJpYW4gc3lzdGVtLiAgVGhlIGJ1aWxkCitzeXN0ZW1zIHdpbGwgY3JlYXRlIHRoZW0gd2hlbiBuZWNlc3NhcnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBwcm9tcHQKK3N1Z2dlc3RpbmcgbG9jYWw6OmxpYiBpZiB0aGUgZmlyc3QgZXhpc3RpbmcgcGFyZW50IGRpcmVjdG9yeSBpcyB3cml0YWJsZS4KKworQWxzbywgd3JpdGFiaWxpdHkgb2YgdGhlIGNvcmUgZGlyZWN0b3JpZXMgaXMgbm90IGludGVyZXN0aW5nIGFzIHdlCitleHBsaWNpdGx5IHRlbGwgQ1BBTiBub3QgdG8gdG91Y2ggdGhvc2Ugd2l0aCBJTlNUQUxMRElSUz1zaXRlLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY4ODg0MgorUGF0Y2gtTmFtZTogZGViaWFuL2NwYW4tbWlzc2luZy1zaXRlLWRpcnMuZGlmZgorLS0tCisgY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSB8IDMxICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtCitpbmRleCAzMzA1NGNkLi43YjBiZWNmIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQorQEAgLTIwNTcsMTEgKzIwNTcsMzQgQEAgc3ViIF9wcmludF91cmxsaXN0IHsKKyAgICAgfTsKKyB9CisgCisrIyBEZWJpYW4gbW9kaWZpY2F0aW9uOiByZXR1cm4gdHJ1ZSBpZiB0aGlzIGRpcmVjdG9yeQorKyMgb3IgdGhlIGZpcnN0IGV4aXN0aW5nIG9uZSB1cHdhcmRzIGlzIHdyaXRhYmxlCisrc3ViIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQgeworKyAgICBteSAoJGRpcikgPSBAXzsKKysgICAgbXkgQHBhcnRzID0gRmlsZTo6U3BlYy0+c3BsaXRkaXIoJGRpcik7CisrICAgIHdoaWxlIChAcGFydHMpIHsKKysgICAgICAgIG15ICRjdXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoQHBhcnRzKTsKKysgICAgICAgIHJldHVybiAxIGlmIC13ICRjdXI7CisrICAgICAgICByZXR1cm4gMCBpZiAtZSBfOworKyAgICAgICAgcG9wIEBwYXJ0czsKKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrIyBEZWJpYW4gc3BlY2lmaWMgbW9kaWZpY2F0aW9uOiB0aGUgc2l0ZSBkaXJlY3RvcmllcyBkb24ndCBuZWNlc3NhcmlseQorKyMgZXhpc3Qgb24gdGhlIHN5c3RlbSwgYnV0IHRoZSBidWlsZCBzeXN0ZW1zIGNyZWF0ZSB0aGVtIHdoZW4gbmVjZXNzYXJ5LAorKyMgc28gcmV0dXJuIHRydWUgaWYgdGhlIGZpcnN0IGV4aXN0aW5nIGRpcmVjdG9yeSB1cHdhcmRzIGlzIHdyaXRhYmxlCisrIworKyMgRnVydGhlcm1vcmUsIG9uIERlYmlhbiwgb25seSB0ZXN0IHRoZSBzaXRlIGRpcmVjdG9yaWVzCisrIyAoaW5zdGFsbHNpdGUqLCBleHBhbmRlZCB0byAvdXNyL2xvY2FsL3tzaGFyZSxsaWJ9L3BlcmwpLAorKyMgbm90IHRoZSBjb3JlIG9uZXMgCisrIyAoaW5zdGFsbCpsaWIsIGV4cGFuZGVkIHRvIC91c3Ive3NoYXJlLGxpYn0vcGVybCkuCisrIyBXZSBwYXNzIElOU1RBTExESVJTPXNpdGUgYnkgZGVmYXVsdCB0byBrZWVwIENQQU4gZnJvbSB0b3VjaGluZworKyMgdGhlIGNvcmUgZGlyZWN0b3JpZXMuCisrCisgc3ViIF9jYW5fd3JpdGVfdG9fbGliZGlycyB7CistICAgIHJldHVybiAtdyAkQ29uZmlne2luc3RhbGxwcml2bGlifQorLSAgICAgICAgJiYgLXcgJENvbmZpZ3tpbnN0YWxsYXJjaGxpYn0KKy0gICAgICAgICYmIC13ICRDb25maWd7aW5zdGFsbHNpdGVsaWJ9CistICAgICAgICAmJiAtdyAkQ29uZmlne2luc3RhbGxzaXRlYXJjaH0KKysgICAgcmV0dXJuIF9jYW5fd3JpdGVfdG9fdGhpc19vcl9wYXJlbnQoJENvbmZpZ3tpbnN0YWxsc2l0ZWxpYn0pCisrICAgICAgICAmJiBfY2FuX3dyaXRlX3RvX3RoaXNfb3JfcGFyZW50KCRDb25maWd7aW5zdGFsbHNpdGVhcmNofSkKKyB9CisgCisgc3ViIF91c2luZ19pbnN0YWxsYmFzZSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1Mjk1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgpAQCAtMCwwICsxLDM3IEBACitGcm9tIDVmZjFmMjE0ODRhYWI2OGVmZTMyMWZmNGJhNWQzNTkyOGY3MmFmOTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogUHJvdmlkZSBhIHNlbnNpYmxlIElOU1RBTExESVJTIGRlZmF1bHQgZm9yIG1vZHVsZXMgaW5zdGFsbGVkIGZyb20KKyBDUEFOLgorCitTb21lIG1vZHVsZXMgd2hpY2ggYXJlIGluY2x1ZGVkIGluIGNvcmUgc2V0IElOU1RBTExESVJTID0+ICdwZXJsJworZXhwbGljaXRseSBpbiBNYWtlZmlsZS5QTCBvciBCdWlsZC5QTC4gIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIHRoZSBub3JtYWwgQElOQworb3JkZXJpbmcsIGJ1dCBub3Qgb3Vycy4KKworUGF0Y2gtTmFtZTogZGViaWFuL2NwYW5fZGVmaW5zdGFsbGRpcnMuZGlmZgorLS0tCisgY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0NQQU4vbGliL0NQQU4vRmlyc3RUaW1lLnBtIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0ZpcnN0VGltZS5wbQoraW5kZXggOTE4ZTAwOS4uMzMwNTRjZCAxMDA2NDQKKy0tLSBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KKysrKyBiL2NwYW4vQ1BBTi9saWIvQ1BBTi9GaXJzdFRpbWUucG0KK0BAIC0xMDI0LDcgKzEwMjQsNyBAQCBzdWIgaW5pdCB7CisgICAgIG15X3Byb21wdF9sb29wKHByZWZlcl9pbnN0YWxsZXIgPT4gJ01CJywgJG1hdGNoZXIsICdNQnxFVU1NfFJBTkQnKTsKKyAKKyAgICAgaWYgKCEkbWF0Y2hlciBvciAnbWFrZXBsX2FyZyBtYWtlX2FyZycgPX4gLyRtYXRjaGVyLykgeworLSAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZXBsX2FyZyA9PiAiIiwgJG1hdGNoZXIpOworKyAgICAgICAgbXlfZGZsdF9wcm9tcHQobWFrZXBsX2FyZyA9PiAiSU5TVEFMTERJUlM9c2l0ZSIsICRtYXRjaGVyKTsKKyAgICAgICAgIG15X2RmbHRfcHJvbXB0KG1ha2VfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisgICAgICAgICBpZiAoICRDUEFOOjpDb25maWctPnttYWtlcGxfYXJnfSA9fiAvTElCUz18SU5DPS8gKSB7CisgICAgICAgICAgICAgJENQQU46OkZyb250ZW5kLT5teXdhcm4oCitAQCAtMTA1Niw3ICsxMDU2LDcgQEAgc3ViIGluaXQgeworICAgICBteV9kZmx0X3Byb21wdChtYWtlX2luc3RhbGxfYXJnID0+ICRDUEFOOjpDb25maWctPnttYWtlX2FyZ30gfHwgIiIsCisgICAgICAgICAgICAgICAgICAgICRtYXRjaGVyKTsKKyAKKy0gICAgbXlfZGZsdF9wcm9tcHQobWJ1aWxkcGxfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisrICAgIG15X2RmbHRfcHJvbXB0KG1idWlsZHBsX2FyZyA9PiAiLS1pbnN0YWxsZGlycyBzaXRlIiwgJG1hdGNoZXIpOworICAgICBteV9kZmx0X3Byb21wdChtYnVpbGRfYXJnID0+ICIiLCAkbWF0Y2hlcik7CisgCisgICAgIGlmIChleGlzdHMgJENQQU46OkhhbmRsZUNvbmZpZzo6a2V5c3ttYnVpbGRfaW5zdGFsbF9idWlsZF9jb21tYW5kfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwYmYxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RiX2ZpbGVfdmVyLmRpZmYKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAwMTQyMWY4YTgwZDVjNjIzOTU5Njk1YmEyYjgxNjdmMzAxMTJkMzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDE2IERlYyAyMDA1IDAxOjMyOjE0ICsxMTAwCitTdWJqZWN0OiBSZW1vdmUgb3Zlcmx5IHJlc3RyaWN0aXZlIERCX0ZpbGUgdmVyc2lvbiBjaGVjay4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8zNDAwNDcKKworUGFja2FnZSBkZXBlbmRlbmNpZXMgZW5zdXJlIHRoZSBjb3JyZWN0IGxpYnJhcnkgaXMgbGlua2VkIGF0IHJ1bi10aW1lLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZGJfZmlsZV92ZXIuZGlmZgorLS0tCisgY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL0RCX0ZpbGUvdmVyc2lvbi5jIGIvY3Bhbi9EQl9GaWxlL3ZlcnNpb24uYworaW5kZXggZTAxZjZmNi4uNTQ0ZTZlZSAxMDA2NDQKKy0tLSBhL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMKKysrKyBiL2NwYW4vREJfRmlsZS92ZXJzaW9uLmMKK0BAIC00OCw2ICs0OCw3IEBAIF9fZ2V0QmVya2VsZXlEQkluZm8oKQorIAorICAgICAodm9pZClkYl92ZXJzaW9uKCZNYWpvciwgJk1pbm9yLCAmUGF0Y2gpIDsKKyAKKysjaWZuZGVmIERFQklBTgorICAgICAvKiBDaGVjayB0aGF0IHRoZSB2ZXJzaW9ucyBvZiBkYi5oIGFuZCBsaWJkYi5hIGFyZSB0aGUgc2FtZSAqLworICAgICBpZiAoTWFqb3IgIT0gREJfVkVSU0lPTl9NQUpPUiB8fCBNaW5vciAhPSBEQl9WRVJTSU9OX01JTk9SICkKKyAJCS8qIHx8IFBhdGNoICE9IERCX1ZFUlNJT05fUEFUQ0gpICovCitAQCAtNTUsNiArNTYsNyBAQCBfX2dldEJlcmtlbGV5REJJbmZvKCkKKyAJY3JvYWsoIlxuREJfRmlsZSB3YXMgYnVpbGQgd2l0aCBsaWJkYiB2ZXJzaW9uICVkLiVkLiVkLFxuYnV0IHlvdSBhcmUgYXR0ZW1wdGluZyB0byBydW4gaXQgd2l0aCBsaWJkYiB2ZXJzaW9uICVkLiVkLiVkXG4iLAorIAkJREJfVkVSU0lPTl9NQUpPUiwgREJfVkVSU0lPTl9NSU5PUiwgREJfVkVSU0lPTl9QQVRDSCwgCisgCQlNYWpvciwgTWlub3IsIFBhdGNoKSA7CisrI2VuZGlmIC8qIERFQklBTiAqLworICAgICAKKyAgICAgLyogY2hlY2sgdGhhdCBsaWJkYiBpcyByZWNlbnQgZW5vdWdoICAtLSB3ZSBuZWVkIDIuMy40IG9yIGdyZWF0ZXIgKi8KKyAgICAgaWYgKE1ham9yID09IDIgJiYgKE1pbm9yIDwgMyB8fCAoTWlub3IgPT0gIDMgJiYgUGF0Y2ggPCA0KSkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWVlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kZXByZWNhdGUtd2l0aC1hcHQuZGlmZgpAQCAtMCwwICsxLDU2IEBACitGcm9tIGRlZjRhYTM4MTdmOThhYWU2MjVlNjAxYjc5MWVmMDY4Mjc2ZjA1ZDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEb21pbmljIEhhcmdyZWF2ZXMgPGRvbUBlYXJ0aC5saT4KK0RhdGU6IE1vbiwgMTcgTWF5IDIwMTAgMTM6MjM6MDcgKzAzMDAKK1N1YmplY3Q6IFBvaW50IHVzZXJzIHRvIERlYmlhbiBwYWNrYWdlcyBvZiBkZXByZWNhdGVkIGNvcmUgbW9kdWxlcworCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc0NzYyOAorCitTZXZlcmFsIG1vZHVsZXMgYXJlIGJlaW5nIGRlcHJlY2F0ZWQgd2l0aCBwZXJsIDUuMjAuCitUbyBnZXQgYSBjbGVhbiB0cmFuc2l0aW9uLCBwZXJsL3BlcmwtbW9kdWxlcyBpcyBnb2luZyB0byByZWNvbW1lbmQgdGhlCitzZXBhcmF0ZSBEZWJpYW4gcGFja2FnZXMgb2YgdGhlc2UgZm9yIG9uZSByZWxlYXNlIGN5Y2xlIHNvIHRoYXQgdGhleSB3aWxsIGJlCitwdWxsZWQgaW4gYnkgZGVmYXVsdCBvbiB1cGdyYWRlcy4gVGhpcyBpcyB0YWtpbmcgcGxhY2UgZm9yIHBlcmwgNS4yMC9qZXNzaWUuCisKK0hvd2V2ZXIsIG9uIHN5c3RlbXMgY29uZmlndXJlZCB0byBpZ25vcmUgcmVjb21tZW5kYXRpb25zIHRoZSBkZXByZWNhdGlvbgord2FybmluZ3Mgd2lsbCBzdGlsbCBiZSB1c2VmdWwsIHNvIG1vZGlmeSB0aGVtIHNsaWdodGx5IHRvIHBvaW50IHRvIHRoZQorc2VwYXJhdGUgcGFja2FnZXMgaW5zdGVhZC4KKworUGF0Y2gtTmFtZTogZGViaWFuL2RlcHJlY2F0ZS13aXRoLWFwdC5kaWZmCistLS0KKyBsaWIvZGVwcmVjYXRlLnBtIHwgMTUgKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kZXByZWNhdGUucG0gYi9saWIvZGVwcmVjYXRlLnBtCitpbmRleCA0N2JjMTEyLi5iMGM2MWRmIDEwMDY0NAorLS0tIGEvbGliL2RlcHJlY2F0ZS5wbQorKysrIGIvbGliL2RlcHJlY2F0ZS5wbQorQEAgLTcsNiArNywxMyBAQCBvdXIgJFZFUlNJT04gPSAwLjAzOworIG91ciAlQ29uZmlnOworIHVubGVzcyAoJUNvbmZpZykgeyByZXF1aXJlIENvbmZpZzsgKkNvbmZpZyA9IFwlQ29uZmlnOjpDb25maWc7IH0KKyAKKysjIERlYmlhbi1zcGVjaWZpYyBjaGFuZ2U6IHJlY29tbWVuZCB0aGUgc2VwYXJhdGUgRGViaWFuIHBhY2thZ2VzIG9mCisrIyBkZXByZWNhdGVkIG1vZHVsZXMgd2hlcmUgYXZhaWxhYmxlCisrCisrb3VyICVERUJJQU5fUEFDS0FHRVMgPSAoCisrICAgICMgTm9uZSBmb3IgdGhlIHBlcmwgNS4yMiBjeWNsZQorKyk7CisrCisgIyBUaGlzIGlzbid0IGEgcHVibGljIEFQSS4gSXQncyBpbnRlcm5hbCB0byBjb2RlIG1haW50YWluZWQgYnkgdGhlIHBlcmwtcG9ydGVycworICMgSWYgeW91IHdvdWxkIGxpa2UgaXQgdG8gYmUgYSBwdWJsaWMgQVBJLCBwbGVhc2Ugc2VuZCBhIHBhdGNoIHdpdGgKKyAjIGRvY3VtZW50YXRpb24gYW5kIHRlc3RzLiBVbnRpbCB0aGVuLCBpdCBtYXkgY2hhbmdlIHdpdGhvdXQgd2FybmluZy4KK0BAIC01OCw5ICs2NSwxNSBAQCBFT00KKyAJaWYgKGRlZmluZWQgJGNhbGxlcnNfYml0bWFzaworIAkgICAgJiYgKHZlYygkY2FsbGVyc19iaXRtYXNrLCAkd2FybmluZ3M6Ok9mZnNldHN7ZGVwcmVjYXRlZH0sIDEpCisgCQl8fCB2ZWMoJGNhbGxlcnNfYml0bWFzaywgJHdhcm5pbmdzOjpPZmZzZXRze2FsbH0sIDEpKSkgeworLQkgICAgd2FybiA8PCJFT00iOworKwkJaWYgKG15ICRkZWIgPSAkREVCSUFOX1BBQ0tBR0VTeyRwYWNrYWdlfSkgeworKwkJICAgIHdhcm4gPDwiRU9NIjsKKyskcGFja2FnZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgUGVybCBjb3JlIGRpc3RyaWJ1dGlvbiBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLiBQbGVhc2UgaW5zdGFsbCB0aGUgc2VwYXJhdGUgJGRlYiBwYWNrYWdlLiBJdCBpcyBiZWluZyB1c2VkIGF0ICRjYWxsX2ZpbGUsIGxpbmUgJGNhbGxfbGluZS4KKytFT00KKysJCX0gZWxzZSB7CisrCQkgICAgd2FybiA8PCJFT00iOworICRwYWNrYWdlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBQZXJsIGNvcmUgZGlzdHJpYnV0aW9uIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuIFBsZWFzZSBpbnN0YWxsIGl0IGZyb20gQ1BBTi4gSXQgaXMgYmVpbmcgdXNlZCBhdCAkY2FsbF9maWxlLCBsaW5lICRjYWxsX2xpbmUuCisgRU9NCisrCQl9CisgCX0KKyAgICAgfQorIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2RvY19pbmZvLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kb2NfaW5mby5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZWEyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9kb2NfaW5mby5kaWZmCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gZTE4ZjgxZTY5YzU1ZDY5OGFiZDI5M2U3MTA2M2Q2YjZiMjc1Y2MwNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUmVwbGFjZSBnZW5lcmljIG1hbigxKSBpbnN0cnVjdGlvbnMgd2l0aCBEZWJpYW4tc3BlY2lmaWMgaW5mb3JtYXRpb24uCisKK0luZGljYXRlIHRoYXQgdGhlIHVzZXIgbmVlZHMgdG8gaW5zdGFsbCB0aGUgcGVybC1kb2MgcGFja2FnZS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2RvY19pbmZvLmRpZmYKKy0tLQorIHBvZC9wZXJsLnBvZCB8IDEyICsrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcG9kL3BlcmwucG9kIGIvcG9kL3BlcmwucG9kCitpbmRleCAzNjRlOTU3Li5mOTdlMTAzIDEwMDY0NAorLS0tIGEvcG9kL3BlcmwucG9kCisrKysgYi9wb2QvcGVybC5wb2QKK0BAIC0yOTEsOCArMjkxLDE2IEBAIGF1eCBjMnBoIGgycGggaDJ4cyBwZXJsYnVnIHBsMnBtIHBvZDJodG1sIHBvZDJtYW4gc3BsYWluIHhzdWJwcAorIAorID1mb3IgYnVpbGR0b2MgX19FTkRfXworIAorLU9uIGEgVW5peC1saWtlIHN5c3RlbSwgdGhlc2UgZG9jdW1lbnRhdGlvbiBmaWxlcyB3aWxsIHVzdWFsbHkgYWxzbyBiZQorLWF2YWlsYWJsZSBhcyBtYW5wYWdlcyBmb3IgdXNlIHdpdGggdGhlIEY8bWFuPiBwcm9ncmFtLgorK09uIERlYmlhbiBzeXN0ZW1zLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBCPHBlcmwtZG9jPiBwYWNrYWdlIHdoaWNoCisrY29udGFpbnMgdGhlIG1ham9yaXR5IG9mIHRoZSBzdGFuZGFyZCBQZXJsIGRvY3VtZW50YXRpb24gYW5kIHRoZQorK0Y8cGVybGRvYz4gcHJvZ3JhbS4KKysKKytFeHRlbnNpdmUgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uIGZvciBQZXJsIG1vZHVsZXMgaXMgYXZhaWxhYmxlLCBib3RoCisrdGhvc2UgZGlzdHJpYnV0ZWQgd2l0aCBQZXJsIGFuZCB0aGlyZC1wYXJ0eSBtb2R1bGVzIHdoaWNoIGFyZSBwYWNrYWdlZAorK29yIGxvY2FsbHkgaW5zdGFsbGVkLgorKworK1lvdSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IFBlcmwncyBkb2N1bWVudGF0aW9uIHdpdGggeW91ciBtYW4oMSkKKytwcm9ncmFtIG9yIHBlcmxkb2MoMSkuCisgCisgU29tZSBkb2N1bWVudGF0aW9uIGlzIG5vdCBhdmFpbGFibGUgYXMgbWFuIHBhZ2VzLCBzbyBpZiBhCisgY3Jvc3MtcmVmZXJlbmNlIGlzIG5vdCBmb3VuZCBieSBtYW4sIHRyeSBpdCB3aXRoIEw8cGVybGRvYz4uICBQZXJsZG9jIGNhbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZW5jMnhzX2luYy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzRiMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lbmMyeHNfaW5jLmRpZmYKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA3ZmU1OWEzZDA2MDFjNmQ4NjM0ZWFlNGY5OWRhZTMwMjRjZDAyYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFR3ZWFrIGVuYzJ4cyB0byBmb2xsb3cgc3ltbGlua3MgYW5kIGlnbm9yZSBtaXNzaW5nIEBJTkMgZGlyZWN0b3JpZXMuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMjkwMzM2CisKKy0gaWdub3JlIG1pc3NpbmcgZGlyZWN0b3JpZXMsCistIGZvbGxvdyBzeW1saW5rcyAoL3Vzci9zaGFyZS9wZXJsLzUuOCAtPiA1LjguNCkuCistIGZpbHRlciAiLiIgb3V0IHdoZW4gcnVubmluZyAiZW5jMnhzIC1DIiwgaXQncyB1bm5lY2Vzc2FyeSBhbmQgY2F1c2VzCisgIGlzc3VlcyB3aXRoIGZvbGxvdyA9PiAxIChzZWUgIzYwMzY4NiBhbmQgW3J0LmNwYW4ub3JnICM2NDU4NV0pCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9lbmMyeHNfaW5jLmRpZmYKKy0tLQorIGNwYW4vRW5jb2RlL2Jpbi9lbmMyeHMgfCA4ICsrKystLS0tCisgdC9wb3J0aW5nL2N1c3RvbWl6ZWQudCB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0VuY29kZS9iaW4vZW5jMnhzIGIvY3Bhbi9FbmNvZGUvYmluL2VuYzJ4cworaW5kZXggMTlmMmIyYi4uNGQ2NGUzOCAxMDA2NDQKKy0tLSBhL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKKysrKyBiL2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMKK0BAIC05NDQsMTEgKzk0NCwxMSBAQCB1c2UgdmFycyBxdygKKyBzdWIgZmluZF9lMnh7CisgICAgIGV2YWwgeyByZXF1aXJlIEZpbGU6OkZpbmQ7IH07CisgICAgIG15IChAaW5jLCAlZTJ4X2Rpcik7CistICAgIGZvciBteSAkaW5jIChASU5DKXsKKysgICAgZm9yIG15ICRpbmMgKGdyZXAgLWQsIEBJTkMpeworICAgICBwdXNoIEBpbmMsICRpbmMgdW5sZXNzICRpbmMgZXEgJy4nOyAjc2tpcCBjdXJyZW50IGRpcgorICAgICB9CisgICAgIEZpbGU6OkZpbmQ6OmZpbmQoCistICAgICAgICAgc3ViIHsKKysgICAgICAgICB7IHdhbnRlZCA9PiBzdWIgeworICAgICAgICAgIG15ICgkZGV2LCRpbm8sJG1vZGUsJG5saW5rLCR1aWQsJGdpZCwkcmRldiwkc2l6ZSwKKyAgICAgICAgICAgICAgJGF0aW1lLCRtdGltZSwkY3RpbWUsJGJsa3NpemUsJGJsb2NrcykKKyAgICAgICAgICAgICAgPSBsc3RhdCgkXykgb3IgcmV0dXJuOworQEAgLTk1OCw3ICs5NTgsNyBAQCBzdWIgZmluZF9lMnh7CisgICAgICAgICAgICAgICRlMnhfZGlyeyRGaWxlOjpGaW5kOjpkaXJ9IHx8PSAkbXRpbWU7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybjsKKy0gICAgICAgICB9LCBAaW5jKTsKKysgICAgICAgICB9LCBmb2xsb3cgPT4gMX0sIEBpbmMpOworICAgICB3YXJuIGpvaW4oIlxuIiwga2V5cyAlZTJ4X2RpciksICJcbiI7CisgICAgIGZvciBteSAkZCAoc29ydCB7JGUyeF9kaXJ7JGF9IDw9PiAkZTJ4X2RpcnskYn19IGtleXMgJWUyeF9kaXIpeworICAgICAkX0UyWCA9ICRkOworQEAgLTEwMjUsNyArMTAyNSw3IEBAIHN1YiBtYWtlX2NvbmZpZ2xvY2FsX3BtIHsKKyAJICAgICRMb2NhbE1vZHskZW5jfSB8fD0gJG1vZDsKKyAJfQorICAgICB9OworLSAgICBGaWxlOjpGaW5kOjpmaW5kKHt3YW50ZWQgPT4gJHdhbnRlZH0sIEBJTkMpOworKyAgICBGaWxlOjpGaW5kOjpmaW5kKHt3YW50ZWQgPT4gJHdhbnRlZCwgZm9sbG93ID0+IDF9LCBncmVwIC1kICYmICEvXlwuLywgQElOQyk7CisgICAgICRfTW9kTGluZXMgPSAiIjsKKyAgICAgZm9yIG15ICRlbmMgKCBzb3J0IGtleXMgJUxvY2FsTW9kICkgeworICAgICAgICAgJF9Nb2RMaW5lcyAuPQorZGlmZiAtLWdpdCBhL3QvcG9ydGluZy9jdXN0b21pemVkLnQgYi90L3BvcnRpbmcvY3VzdG9taXplZC50CitpbmRleCA0NWZjYWZiLi4zYmQ2YWRiIDEwMDY0NAorLS0tIGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudAorKysrIGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQudAorQEAgLTEwMSw4ICsxMDEsMTEgQEAgZm9yZWFjaCBteSAkbW9kdWxlICggc29ydCBrZXlzICVNb2R1bGVzICkgeworICAgICAgIHByaW50ICRkYXRhX2ZoIGpvaW4oJyAnLCAkbW9kdWxlLCAkZmlsZSwgJGlkKSwgIlxuIjsKKyAgICAgICBuZXh0OworICAgICB9CisrU0tJUDogeworKyAgICBza2lwKCIkZmlsZSBtb2RpZmllZCBmb3IgRGViaWFuIiwgMSkgaWYgJGZpbGUgZXEgJ2NwYW4vRW5jb2RlL2Jpbi9lbmMyeHMnOworICAgICBteSAkc2hvdWxkX2JlID0gJGN1c3RvbWlzZWR7ICRtb2R1bGUgfS0+eyAkZmlsZSB9OworICAgICBpcyggJGlkLCAkc2hvdWxkX2JlLCAiU0hBIGZvciAkZmlsZSBtYXRjaGVzIHN0YXNoZWQgU0hBIiApOworK30KKyAgIH0KKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lcnJub192ZXIuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2Vycm5vX3Zlci5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjU5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9lcnJub192ZXIuZGlmZgpAQCAtMCwwICsxLDM1IEBACitGcm9tIDgyN2VlZTIyNTg5N2MzNWVjOTcxOTRhNTk3MWJmNGJmY2YyNTA3NDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTYgRGVjIDIwMDUgMDE6MzI6MTQgKzExMDAKK1N1YmplY3Q6IFJlbW92ZSBFcnJubyB2ZXJzaW9uIGNoZWNrIGR1ZSB0byB1cGdyYWRlIHByb2JsZW1zIHdpdGggbG9uZy1ydW5uaW5nCisgcHJvY2Vzc2VzLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzM0MzM1MQorCitSZW1vdmUgdmVyc2lvbiBjaGVjayB3aGljaCBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIGxvbmcgcnVubmluZworcHJvY2Vzc2VzIGVtYmVkZGluZyBwZXJsIHdoZW4gdXBncmFkaW5nIHRvIGEgbmV3ZXIgdmVyc2lvbiwKK2NvbXBhdGlibGUsIGJ1dCBidWlsdCBvbiBhIGRpZmZlcmVudCBtYWNoaW5lLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZXJybm9fdmVyLmRpZmYKKy0tLQorIGV4dC9FcnJuby9FcnJub19wbS5QTCB8IDUgLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dC9FcnJuby9FcnJub19wbS5QTCBiL2V4dC9FcnJuby9FcnJub19wbS5QTAoraW5kZXggYzZiZmEwNi4uNTE5ZTVjNyAxMDA2NDQKKy0tLSBhL2V4dC9FcnJuby9FcnJub19wbS5QTAorKysrIGIvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCitAQCAtMjc4LDEzICsyNzgsOCBAQCBzdWIgd3JpdGVfZXJybm9fcG0geworIAorIHBhY2thZ2UgRXJybm87CisgcmVxdWlyZSBFeHBvcnRlcjsKKy11c2UgQ29uZmlnOworIHVzZSBzdHJpY3Q7CisgCistIlwkQ29uZmlneydhcmNobmFtZSd9LVwkQ29uZmlneydvc3ZlcnMnfSIgZXEKKy0iJGFyY2huYW1lLSRDb25maWd7J29zdmVycyd9IiBvcgorLQlkaWUgIkVycm5vIGFyY2hpdGVjdHVyZSAoJGFyY2huYW1lLSRDb25maWd7J29zdmVycyd9KSBkb2VzIG5vdCBtYXRjaCBleGVjdXRhYmxlIGFyY2hpdGVjdHVyZSAoXCRDb25maWd7J2FyY2huYW1lJ30tXCRDb25maWd7J29zdmVycyd9KSI7CistCisgb3VyIFwkVkVSU0lPTiA9ICIkVkVSU0lPTiI7CisgXCRWRVJTSU9OID0gZXZhbCBcJFZFUlNJT047Cisgb3VyIFxASVNBID0gJ0V4cG9ydGVyJzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2V4dHV0aWxzX3NldF9saWJwZXJsX3BhdGguZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGI0YmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZXh0dXRpbHNfc2V0X2xpYnBlcmxfcGF0aC5kaWZmCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNDMxMjc1MDc4YjA0OTBkMmUwOTI0NDJkOTU4MmJlMDZiYjk1YjM1NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFNhdCwgMTAgTWF5IDIwMTQgMjM6MzQ6MTQgKzAzMDAKK1N1YmplY3Q6IEVVOk1NOiBzZXQgbG9jYXRpb24gb2YgbGlicGVybC5hIHVuZGVyIC91c3IvbGliCisKK1RoZSBEZWJpYW4gcGFja2FnaW5nIG1vdmVzIGxpYnBlcmwuYSBhIGNvdXBsZSBvZiBsZXZlbHMgdXAgZnJvbSB0aGUKK0NPUkUgZGlyZWN0b3J5IHRvIG1hdGNoIG90aGVyIHN0YXRpYyBsaWJyYXJpZXMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMiArLQorIHBwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNWYxYjg3Zi4uNTcwYTYzMSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTI1MDUsNyArMjUwNSw3IEBAIE1BUF9QUkVMSUJTICAgPSAkQ29uZmlne3BlcmxsaWJzfSAkQ29uZmlne2NyeXB0bGlifQorIAkoJGxwZXJsID0gJGxpYnBlcmwpID1+IHMvXCRcKEFcKS8kc2VsZi0+e0xJQl9FWFR9LzsKKyAgICAgfQorICAgICB1bmxlc3MgKCRsaWJwZXJsICYmIC1mICRscGVybCkgeyAjIElseWEncyBjb2RlLi4uCistCW15ICRkaXIgPSAkc2VsZi0+e1BFUkxfU1JDfSB8fCAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9L0NPUkUiOworKwlteSAkZGlyID0gJHNlbGYtPntQRVJMX1NSQ30gfHwgIiRzZWxmLT57UEVSTF9BUkNITElCfS8uLi8uLiI7CisgCSRkaXIgPSAiJHNlbGYtPntQRVJMX0FSQ0hMSUJ9Ly4uIiBpZiAkc2VsZi0+e1VOSU5TVEFMTEVEX1BFUkx9OworIAkkbGlicGVybCB8fD0gImxpYnBlcmwkc2VsZi0+e0xJQl9FWFR9IjsKKyAJJGxpYnBlcmwgICA9ICIkZGlyLyRsaWJwZXJsIjsKK2RpZmYgLS1naXQgYS9wcC5jIGIvcHAuYworaW5kZXggNDJmMTU2YS4uNzdjMTI3OSAxMDA2NDQKKy0tLSBhL3BwLmMKKysrKyBiL3BwLmMKK0BAIC0xLDQgKzEsNCBAQAorLS8qICAgIHBwLmMKKysgLyogICAgcHAuYworICAqCisgICogICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorICAqICAgIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggYnkgTGFycnkgV2FsbCBhbmQgb3RoZXJzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9mYWtlcm9vdC5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQ2MWNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmFrZXJvb3QuZGlmZgpAQCAtMCwwICsxLDQyIEBACitGcm9tIDI3YWU3YjE4MDc4ZDgwMWEyYzk0M2FhNmRlMmY3ZTk4MDgxNzcyNTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFBvc3Rwb25lIExEX0xJQlJBUllfUEFUSCBldmFsdWF0aW9uIHRvIHRoZSBiaW5hcnkgdGFyZ2V0cy4KKworTW9kaWZ5IHRoZSBzZXR0aW5nIG9mIExEX0xJQlJBUllfUEFUSCB0byBhcHBlbmQgcHJlLWV4aXN0aW5nIHZhbHVlcyBhdCB0aGUKK3RpbWUgdGhlIHJ1bGUgaXMgZXZhbHVhdGVkIHJhdGhlciB0aGFuIHdoZW4gdGhlIE1ha2VmaWxlIGlzIGNyZWF0ZWQuCisKK1RoaXMgaXMgcmVxdWlyZWQgd2hlbiBidWlsZGluZyBwYWNrYWdlcyB3aXRoIGRwa2ctYnVpbGRwYWNrYWdlIGFuZCBmYWtlcm9vdCwKK3NpbmNlIGZha2Vyb290ICh3aGljaCBub3cgc2V0cyBMRF9MSUJSQVJZX1BBVEgpIGlzIG5vdCB1c2VkIGZvciB0aGUgImJ1aWxkIgorcnVsZSB3aGVyZSB0aGUgTWFrZWZpbGUgaXMgY3JlYXRlZCwgYnV0IGlzIGZvciB0aGUgY2xlYW4vYmluYXJ5KiB0YXJnZXRzLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vZmFrZXJvb3QuZGlmZgorLS0tCisgTWFrZWZpbGUuU0ggfCA3ICsrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuU0ggYi9NYWtlZmlsZS5TSAoraW5kZXggMDM0ZDgxMi4uMDRkZDdkNSAxMDA3NTUKKy0tLSBhL01ha2VmaWxlLlNICisrKysgYi9NYWtlZmlsZS5TSAorQEAgLTM5LDEwICszOSw3IEBAIGNhc2UgIiR1c2VzaHJwbGliIiBpbgorIHRydWUpCisgCSMgUHJlZml4IGFsbCBydW5zIG9mICdtaW5pcGVybCcgYW5kICdwZXJsJyB3aXRoCisgCSMgJGxkbGlicHRoIHNvIHRoYXQgLi9wZXJsIGZpbmRzICp0aGlzKiBzaGFyZWQgbGlicGVybC4KKy0JY2FzZSAiJExEX0xJQlJBUllfUEFUSCIgaW4KKy0JJycpICBsZGxpYnB0aD0iTERfTElCUkFSWV9QQVRIPWAgcXVvdGUgIiRwd2QiIGAiIDs7CistCSopICAgbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgOmAgcXVvdGUgIiRMRF9MSUJSQVJZX1BBVEgiIGAiIDs7CistCWVzYWMKKysJbGRsaWJwdGg9IkxEX0xJQlJBUllfUEFUSD1gIHF1b3RlICIkcHdkIiBgIickJHtMRF9MSUJSQVJZX1BBVEg6Kzp9JCRMRF9MSUJSQVJZX1BBVEgnCisgCisgCXBsZGxmbGFncz0iJGNjY2RsZmxhZ3MiCisgCXN0YXRpY19sZGZsYWdzPScnCitAQCAtMTEzLDcgKzExMCw3IEBAIHRydWUpCisgCSAgICA7OworIAllc2FjCisgCWNhc2UgIiRsZGxpYnB0aG5hbWUiIGluCistCScnKSA7OworKwknJ3xMRF9MSUJSQVJZX1BBVEgpIDs7CisgCSopCisgCSAgICBjYXNlICIkb3NuYW1lIiBpbgorIAkgICAgb3MyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxOWU3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpbmRfaHRtbDJ0ZXh0LmRpZmYKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBjODFkYmRlZGZmOWU5YjRmYjc1YWMwMjhhYTcxODgzOGMwMjkyZDJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmVhcyBNYXJzY2hrZSA8YW5kcmVhcy5tYXJzY2hrZUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTcgU2VwIDIwMTEgMTE6Mzg6NDIgKzAxMDAKK1N1YmplY3Q6IENvbmZpZ3VyZSBDUEFOOjpEaXN0cmlidXRpb24gd2l0aCBjb3JyZWN0IG5hbWUgb2YgaHRtbDJ0ZXh0CisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNjQwNDc5CitQYXRjaC1OYW1lOiBkZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZgorCitJZiB5b3UgdXNlIGNwYW4gZnJvbSBEZWJpYW4geW91IHVzdWFsbHkgd2luZCB1cCB0cnlpbmcgdG8gcmVhZCBvbmxpbmUKK2RvY3VtZW50YXRpb24gdGhyb3VnaCBpdC4gVW5mb3J0dW5hdGVseSBjcGFuIGNhbid0IGZpbmQgdGhlCitodG1sMnRleHQucGwgc2NyaXB0IGV2ZW4gdGhvdWdoIGl0IGlzIGluc3RhbGxlZCB1c2luZyB0aGUgRGViaWFuCitwYWNrYWdlICdodG1sMnRleHQnLgorCitQbGVhc2Ugc2VlIHRoZSBhdHRhY2hlZCBwYXRjaCBmb3IgYSBxdWljayBmaXggb2YgdGhpcyBpc3N1ZS4KKworW01haW50YWluZXIncyBub3RlOiBodG1sMnRleHQgaW4gRGViaWFuIGlzIG5vdCB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbgorYXMgdGhlIGh0bWwydGV4dC5wbCB3aGljaCBpcyBleHBlY3RlZCwgYnV0IHNob3VsZCBwcm92aWRlIHNpbWlsYXIKK2Z1bmN0aW9uYWxpdHldLgorLS0tCisgY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vQ1BBTi9saWIvQ1BBTi9EaXN0cmlidXRpb24ucG0gYi9jcGFuL0NQQU4vbGliL0NQQU4vRGlzdHJpYnV0aW9uLnBtCitpbmRleCAwOTJiNzgxLi41YzJiYWUxIDEwMDY0NAorLS0tIGEvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbQorKysrIGIvY3Bhbi9DUEFOL2xpYi9DUEFOL0Rpc3RyaWJ1dGlvbi5wbQorQEAgLTQwOTksNyArNDA5OSw3IEBAIHN1YiBfZGlzcGxheV91cmwgeworICAgICAgIGlmICRDUEFOOjpERUJVRzsKKyAKKyAgICAgIyBzaG91bGQgd2UgZGVmaW5lIGl0IGluIHRoZSBjb25maWcgaW5zdGVhZD8KKy0gICAgbXkgJGh0bWxfY29udmVydGVyID0gImh0bWwydGV4dC5wbCI7CisrICAgIG15ICRodG1sX2NvbnZlcnRlciA9ICJodG1sMnRleHQiOworIAorICAgICBteSAkd2ViX2Jyb3dzZXIgPSAkQ1BBTjo6Q29uZmlnLT57J2x5bngnfSB8fCB1bmRlZjsKKyAgICAgbXkgJHdlYl9icm93c2VyX291dCA9ICR3ZWJfYnJvd3NlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhOTI3MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYKQEAgLTAsMCArMSwzMSBAQAorRnJvbSA5ZmFmNmRjYzNhNWM0MTU0NDg0ZDgxMmViM2NjM2RkNzhiMzU1NjNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogTW9uLCAzMCBNYXkgMjAxMSAyMjo1NDoyNCArMDMwMAorU3ViamVjdDogRG9jdW1lbnQgdGhhdCBDQ0ZMQUdTIHNob3VsZCBpbmNsdWRlICRDb25maWd7Y2NmbGFnc30KKworQnVnOiBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTY4NjEzCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzYyODUyMgorCitDb21waWxpbmcgWFMgZXh0ZW5zaW9ucyB3aXRob3V0ICRDb25maWd7Y2NmbGFnc30gY2FuIGJyZWFrIHRoZQorYmluYXJ5IGludGVyZmFjZSBvbiBzb21lIHBsYXRmb3Jtcy4KKworUGF0Y2gtTmFtZTogZml4ZXMvZG9jdW1lbnRfbWFrZW1ha2VyX2NjZmxhZ3MuZGlmZgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NYWtlTWFrZXIucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyLnBtCitpbmRleCBmZTk1YjI3Li45MDQwM2U4IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbQorQEAgLTE3NzQsNiArMTc3NCwxMCBAQCBjdXJyZW50bHkgdXNlZCBieSBNYWtlTWFrZXIgYnV0IG1heSBiZSBoYW5keSBpbiBNYWtlZmlsZS5QTHMuCisgU3RyaW5nIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY29tcGlsZXIgY2FsbCBjb21tYW5kIGxpbmUgYmV0d2VlbgorIHRoZSBhcmd1bWVudHMgSU5DIGFuZCBPUFRJTUlaRS4KKyAKKytUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0YWtlbiBmcm9tICRDb25maWd7Y2NmbGFnc30uIFdoZW4gb3ZlcnJpZGluZworK0NDRkxBR1MsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIHRoZSAkQ29uZmlne2NjZmxhZ3N9IHNldHRpbmdzIHRvIGF2b2lkCisrYmluYXJ5IGluY29tcGF0aWJpbGl0aWVzLgorKworID1pdGVtIENPTkZJRworIAorIEFycmF5cmVmLiBFLmcuIFtxdyhhcmNobmFtZSBtYW5leHQpXSBkZWZpbmVzIEFSQ0hOQU1FICYgTUFORVhUIGZyb20KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNWY5NjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9tZW1vaXplX3N0b3JhYmxlX25zdG9yZS5kaWZmCkBAIC0wLDAgKzEsMTEwIEBACitGcm9tIDU1ZDQzMGViMDJmYzExNjU4MTg0NzMwNGNhMjAzMjE2ODc5NzgyNjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKb25hdGhhbiBOaWVkZXIgPGpybmllZGVyQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjcgSnVsIDIwMTIgMTA6MzU6MDcgLTA1MDAKK1N1YmplY3Q6IE1lbW9pemU6OlN0b3JhYmxlOiByZXNwZWN0ICduc3RvcmUnIG9wdGlvbiBub3QgcmVzcGVjdGVkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK01lbW9pemUoM3BlcmwpIHNheXM6CisKKyAgICAgICAgICAgICAgICB0aWUgbXkgJWNhY2hlID0+ICdNZW1vaXplOjpTdG9yYWJsZScsICRmaWxlbmFtZSwgJ25zdG9yZSc7CisgICAgICAgICAgICAgICAgbWVtb2l6ZSAnZnVuY3Rpb24nLCBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV07CisKKyAgICAgICAgSW5jbHVkZSB0aGUg4oCYbnN0b3Jl4oCZIG9wdGlvbiB0byBoYXZlIHRoZSAiU3RvcmFibGUiIGRhdGFiYXNlCisgICAgICAgIHdyaXR0ZW4gaW4g4oCYbmV0d29yayBvcmRlcuKAmS4gIChTZWUgU3RvcmFibGUgZm9yIG1vcmUgZGV0YWlscworICAgICAgICBhYm91dCB0aGlzLikKKworSW4gZmFjdCB0aGUgIm5zdG9yZSIgb3B0aW9uIGRvZXMgbm8gc3VjaCB0aGluZy4gIE9wdGlvbiBwYXJzaW5nIGxvb2tzCitsaWtlIHRoaXM6CisKKyAgICAgICAgQG9wdGlvbnN7QF99ID0gKCk7CisKKyRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9IGlzIGFjY29yZGluZ2x5IHNldCB0byB1bmRlZi4gIExhdGVyCitNZW1vaXplOjpTdG9yYWJsZSBjaGVja3MgaWYgdGhlIG9wdGlvbiBpcyB0cnVlLCBhbmQgc2luY2UgdW5kZWYgaXMKK25vdCB0cnVlLCB0aGUgImVsc2UiIGJyYW5jaCBpcyBhbHdheXMgdGFrZW4uCisKKyAgICAgICAgaWYgKCRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSB7CisgICAgICAgICAgICAgICAgU3RvcmFibGU6Om5zdG9yZSgkc2VsZi0+e0h9LCAkc2VsZi0+e0ZJTEVOQU1FfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgU3RvcmFibGU6OnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKKyAgICAgICAgfQorCitDb3JyZWN0aW5nIHRoZSBjb25kaXRpb24gdG8gKGV4aXN0cyAkc2VsZi0+e09QVElPTlN9eyduc3RvcmUnfSkgZml4ZXMKK2l0LgorCitOb3RpY2VkIGJlY2F1c2UgZ2l0LXN2biwgd2hpY2ggdXNlcyB0aGUgJ25zdG9yZScgb3B0aW9uIGZvciBpdHMKK29uLWRpc2sgY2FjaGVzLCB3YXMgcHJvZHVjaW5nCisKKyAgICAgICAgQnl0ZSBvcmRlciBpcyBub3QgY29tcGF0aWJsZSBhdCAuLi8uLi9saWIvU3RvcmFibGUucG0KKword2hlbiBydW4gdXNpbmcgYSBwZXJsIHdpdGggYSBkaWZmZXJlbnQgaW50ZWdlciBzaXplIChhbmQgaGVuY2UKK2J5dGVvcmRlcikuCisKK1JlcG9ydGVkIGJ5IFRpbSBSZXRvdXQgKFJUIzc3NzkwKQorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzU4NzY1MAorQnVnOiBodHRwczovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTc3NzkwCitGb3J3YXJkZWQ6IGh0dHBzOi8vcnQuY3Bhbi5vcmcvUHVibGljL0J1Zy9EaXNwbGF5Lmh0bWw/aWQ9Nzc3OTAKK1BhdGNoLU5hbWU6IGZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYKKy0tLQorIGNwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtIHwgIDIgKy0KKyBjcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudCAgICB8IDI0ICsrKysrKysrKysrKysrKysrKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vTWVtb2l6ZS9NZW1vaXplL1N0b3JhYmxlLnBtIGIvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0KK2luZGV4IDEzMTQ3OTcuLjg3ODc2ZjIgMTAwNjQ0CistLS0gYS9jcGFuL01lbW9pemUvTWVtb2l6ZS9TdG9yYWJsZS5wbQorKysrIGIvY3Bhbi9NZW1vaXplL01lbW9pemUvU3RvcmFibGUucG0KK0BAIC01NSw3ICs1NSw3IEBAIHN1YiBERVNUUk9ZIHsKKyAgIHJlcXVpcmUgQ2FycCBpZiAkVmVyYm9zZTsKKyAgIG15ICRzZWxmPSBzaGlmdDsKKyAgIHByaW50IFNUREVSUiAiTWVtb2l6ZTo6U3RvcmFibGU6OkRFU1RST1koQF8pXG4iIGlmICRWZXJib3NlOworLSAgaWYgKCRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSB7CisrICBpZiAoZXhpc3RzICRzZWxmLT57T1BUSU9OU317J25zdG9yZSd9KSB7CisgICAgIFN0b3JhYmxlOjpuc3RvcmUoJHNlbGYtPntIfSwgJHNlbGYtPntGSUxFTkFNRX0pOworICAgfSBlbHNlIHsKKyAgICAgU3RvcmFibGU6OnN0b3JlKCRzZWxmLT57SH0sICRzZWxmLT57RklMRU5BTUV9KTsKK2RpZmYgLS1naXQgYS9jcGFuL01lbW9pemUvdC90aWVfc3RvcmFibGUudCBiL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50CitpbmRleCBkZTNiOGRjLi5hNjI0MjM4IDEwMDY0NAorLS0tIGEvY3Bhbi9NZW1vaXplL3QvdGllX3N0b3JhYmxlLnQKKysrKyBiL2NwYW4vTWVtb2l6ZS90L3RpZV9zdG9yYWJsZS50CitAQCAtMzEsMTggKzMxLDM0IEBAIGlmICgkQCkgeworICAgZXhpdCAwOworIH0KKyAKKy1wcmludCAiMS4uNFxuIjsKKytwcmludCAiMS4uOVxuIjsKKyAKKyAkZmlsZSA9ICJzdG9yYWJsZSQkIjsKKyAxIHdoaWxlIHVubGluayAkZmlsZTsKKyB0cnlvdXQoJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGUsIDEpOyAgIyBUZXN0IDEuLjQKKyAxIHdoaWxlIHVubGluayAkZmlsZTsKKyt0cnlvdXQoJ01lbW9pemU6OlN0b3JhYmxlJywgJGZpbGUsIDUsICduc3RvcmUnKTsgICMgVGVzdCA1Li44CisrYXNzZXJ0X25ldG9yZGVyKCRmaWxlLCA5KTsgICMgVGVzdCA5CisrMSB3aGlsZSB1bmxpbmsgJGZpbGU7CisrCisrCisrc3ViIGFzc2VydF9uZXRvcmRlciB7CisrICBteSAoJGZpbGUsICR0ZXN0bm8pID0gQF87CisrCisrICBteSAkbmV0b3JkZXIgPSBTdG9yYWJsZTo6ZmlsZV9tYWdpYygkZmlsZSktPnsnbmV0b3JkZXInfTsKKysgIHByaW50ICgkbmV0b3JkZXIgPyAib2sgJHRlc3Rub1xuIiA6ICJub3Qgb2sgJHRlc3Rub1xuIik7CisrfQorIAorIHN1YiB0cnlvdXQgeworLSAgbXkgKCR0aWVwYWNrLCAkZmlsZSwgJHRlc3RubykgPSBAXzsKKysgIG15ICgkdGllcGFjaywgJGZpbGUsICR0ZXN0bm8sICRvcHRpb24pID0gQF87CisgCistICB0aWUgbXkgJWNhY2hlID0+ICR0aWVwYWNrLCAkZmlsZQorLSAgICBvciBkaWUgJCE7CisrICBpZiAoZGVmaW5lZCAkb3B0aW9uKSB7CisrICAgIHRpZSBteSAlY2FjaGUgPT4gJHRpZXBhY2ssICRmaWxlLCAkb3B0aW9uCisrICAgICAgb3IgZGllICQhOworKyAgfSBlbHNlIHsKKysgICAgdGllIG15ICVjYWNoZSA9PiAkdGllcGFjaywgJGZpbGUKKysgICAgICBvciBkaWUgJCE7CisrICB9CisgCisgICBtZW1vaXplICdjNScsIAorICAgU0NBTEFSX0NBQ0hFID0+IFtIQVNIID0+IFwlY2FjaGVdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMzE5NzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9uZXRfc210cF9kb2NzLmRpZmYKQEAgLTAsMCArMSwyNSBAQAorRnJvbSBmYTA4NWZlZGQ5YzQwNmVkY2Q0YTFhMjU2YzAyNWQ1ZmY3ZjZjNmRlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUaHUsIDIwIFNlcCAyMDA3IDE5OjQ3OjE0ICsxMDAwCitTdWJqZWN0OiBEb2N1bWVudCB0aGUgTmV0OjpTTVRQICdQb3J0JyBvcHRpb24KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy8xMDAxOTUKK0J1ZzogaHR0cDovL3J0LmNwYW4ub3JnL1B1YmxpYy9CdWcvRGlzcGxheS5odG1sP2lkPTM2MDM4CisKK1BhdGNoLU5hbWU6IGZpeGVzL25ldF9zbXRwX2RvY3MuZGlmZgorLS0tCisgY3Bhbi9saWJuZXQvbGliL05ldC9TTVRQLnBtIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0gYi9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0KK2luZGV4IGFmZDAxN2EuLjZhZTdkOWUgMTAwNjQ0CistLS0gYS9jcGFuL2xpYm5ldC9saWIvTmV0L1NNVFAucG0KKysrKyBiL2NwYW4vbGlibmV0L2xpYi9OZXQvU01UUC5wbQorQEAgLTczOCw2ICs3MzgsNyBAQCBOZXQ6OlNNVFAgd2lsbCBhdHRlbXB0IHRvIGV4dHJhY3QgdGhlIGFkZHJlc3MgZnJvbSB0aGUgdmFsdWUgcGFzc2VkLgorIAorIEI8RGVidWc+IC0gRW5hYmxlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorIAorK0I8UG9ydD4gLSBTZWxlY3QgYSBwb3J0IG9uIHRoZSByZW1vdGUgaG9zdCB0byBjb25uZWN0IHRvIChkZWZhdWx0IGlzIDI1KQorIAorIEV4YW1wbGU6CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wZXJsLUNubi5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcGVybC1Dbm4uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTU2NGZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcGVybC1Dbm4uZGlmZgpAQCAtMCwwICsxLDczIEBACitGcm9tIDBlY2Y4M2YyNTlkYjA5Y2IzOGNiMzdjOWIyMmU3MmJlMTg1YWZhOGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIdWdvIHZhbiBkZXIgU2FuZGVuIDxodkBjcnlwdC5vcmc+CitEYXRlOiBUaHUsIDExIEp1biAyMDE1IDEyOjI1OjQwICswMTAwCitTdWJqZWN0OiBmaXggLUNubiBwYXJzaW5nCisKK0NvbW1pdCAyMmZmMzEzMDY4IGZvciBbcGVybCAjMTIzODE0XSBpbmFkdmVydGVudGx5IGNoYW5nZWQgdGhlIGxvZ2ljIHdoZW4KK3BhcnNpbmcgYSBudW1lcmljIHBhcmFtZXRlciB0byB0aGUgLUMgb3B0aW9uLCBzdWNoIHRoYXQgdGhlIHN1Y2Nlc3NmdWxseQorcGFyc2VkIG51bWJlciB3YXMgbm90IHNhdmVkIGFzIHRoZSBvcHRpb24gdmFsdWUgaWYgaXQgcGFyc2VkIHRvIHRoZSBlbmQKK29mIHRoZSBhcmd1bWVudC4KKworQnVnOiBodHRwczovL3J0LnBlcmwub3JnL1RpY2tldC9EaXNwbGF5Lmh0bWw/aWQ9MTI1MzgxCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODg2MzYKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9wZXJsNS5naXQucGVybC5vcmcvcGVybC5naXQvY29tbWl0Lzg5ZDg0ZmY5NjUKK1BhdGNoLU5hbWU6IGZpeGVzL3BlcmwtQ25uLmRpZmYKKy0tLQorIHQvcnVuL3N3aXRjaEMudCB8ICA3ICsrKysrKy0KKyB1dGlsLmMgICAgICAgICAgfCAxNyArKysrKysrKy0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90L3J1bi9zd2l0Y2hDLnQgYi90L3J1bi9zd2l0Y2hDLnQKK2luZGV4IGY2YWE4NjguLjRmNjNjM2IgMTAwNjQ0CistLS0gYS90L3J1bi9zd2l0Y2hDLnQKKysrKyBiL3QvcnVuL3N3aXRjaEMudAorQEAgLTExLDcgKzExLDcgQEAgQkVHSU4geworICAgICBza2lwX2FsbF9pZl9taW5pcGVybCgnLUMgYW5kICRFTlZ7UEVSTF9VTklDT0RFfSBhcmUgZGlzYWJsZWQgb24gbWluaXBlcmwnKTsKKyB9CisgCistcGxhbih0ZXN0cyA9PiAxMyk7CisrcGxhbih0ZXN0cyA9PiAxNCk7CisgCisgbXkgJHI7CisgCitAQCAtMjUsNiArMjUsMTEgQEAgJHIgPSBydW5wZXJsKCBzd2l0Y2hlcyA9PiBbICctQ08nLCAnLXcnIF0sCisgICAgICAgICAgICAgICBzdGRlcnIgICA9PiAxICk7CisgbGlrZSggJHIsIHFyL14kYig/OlxyP1xuKT8kL3MsICctQ086IG5vIHdhcm5pbmcgb24gVVRGLTggb3V0cHV0JyApOworIAorKyRyID0gcnVucGVybCggc3dpdGNoZXMgPT4gWyAnLUMyJywgJy13JyBdLAorKwkgICAgICBwcm9nICAgICA9PiAncHJpbnQgY2hyKDI1NiknLAorKyAgICAgICAgICAgICAgc3RkZXJyICAgPT4gMSApOworK2xpa2UoICRyLCBxci9eJGIoPzpccj9cbik/JC9zLCAnLUMyOiBubyB3YXJuaW5nIG9uIFVURi04IG91dHB1dCcgKTsKKysKKyBTS0lQOiB7CisgICAgIGlmIChleGlzdHMgJEVOVntQRVJMX1VOSUNPREV9ICYmCisgCSgkRU5We1BFUkxfVU5JQ09ERX0gZXEgIiIgfHwgJEVOVntQRVJMX1VOSUNPREV9ID1+IC9bU09dLykpIHsKK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMKK2luZGV4IDhjZjYyZjUuLmVlMjMzMTQgMTAwNjQ0CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTQ0MjAsMTYgKzQ0MjAsMTUgQEAgUGVybF9wYXJzZV91bmljb2RlX29wdHMocFRIWF8gY29uc3QgY2hhciAqKnBvcHQpCisgICAgICAgIGlmIChpc0RJR0lUKCpwKSkgeworICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZHB0cjsKKyAgICAgICAgICAgICBVViB1djsKKy0gICAgICAgICAgICBpZiAoZ3Jva19hdG9VVihwLCAmdXYsICZlbmRwdHIpCistICAgICAgICAgICAgICAgICYmIHV2IDw9IFUzMl9NQVgKKy0gICAgICAgICAgICAgICAgJiYgKHAgPSBlbmRwdHIpCistICAgICAgICAgICAgICAgICYmICpwICYmICpwICE9ICdcbicgJiYgKnAgIT0gJ1xyJworLSAgICAgICAgICAgICkgeworKyAgICAgICAgICAgIGlmIChncm9rX2F0b1VWKHAsICZ1diwgJmVuZHB0cikgJiYgdXYgPD0gVTMyX01BWCkgeworICAgICAgICAgICAgICAgICBvcHQgPSAoVTMyKXV2OworLSAgICAgICAgICAgICAgICBpZiAoaXNTUEFDRSgqcCkpCistICAgICAgICAgICAgICAgICAgICBnb3RvIHRoZV9lbmRfb2ZfdGhlX29wdHNfcGFyc2VyOworLSAgICAgICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgICBQZXJsX2Nyb2FrKGFUSFhfICJVbmtub3duIFVuaWNvZGUgb3B0aW9uIGxldHRlciAnJWMnIiwgKnApOworKyAgICAgICAgICAgICAgICBwID0gZW5kcHRyOworKyAgICAgICAgICAgICAgICBpZiAocCAmJiAqcCAmJiAqcCAhPSAnXG4nICYmICpwICE9ICdccicpIHsKKysgICAgICAgICAgICAgICAgICAgIGlmIChpc1NQQUNFKCpwKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHRoZV9lbmRfb2ZfdGhlX29wdHNfcGFyc2VyOworKyAgICAgICAgICAgICAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICAgICAgICAgIFBlcmxfY3JvYWsoYVRIWF8gIlVua25vd24gVW5pY29kZSBvcHRpb24gbGV0dGVyICclYyciLCAqcCk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzljYTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kX21hbl9yZXByb2R1Y2libGVfZGF0ZS5kaWZmCkBAIC0wLDAgKzEsMTcwIEBACitGcm9tIDkwNTdhZGMxMDZkNmJiZWY1M2M5ZTcwNjUyM2NkOTRmMWE3YTA4ZDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBkZWJpYW4ub3JnPgorRGF0ZTogU2F0LCAzMCBBdWcgMjAxNCAxNToxMDo0MSAtMDcwMAorU3ViamVjdDogU3VwcG9ydCBQT0RfTUFOX0RBVEUgaW4gUG9kOjpNYW4gZm9yIHRoZSBsZWZ0LWhhbmQgZm9vdGVyCisKK0hvbm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQT0RfTUFOX0RBVEUgYW5kIHVzZSBpdHMgY29udGVudHMsIGlmCitzZXQsIGFzIHRoZSB2YWx1ZSBvZiB0aGUgbGVmdC1oYW5kIGZvb3RlciBpZiB0aGUgZGF0ZSBvcHRpb24gaXMgbm90CitzZXQsIG92ZXJyaWRpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgaW5wdXQgZmlsZS4gIFRoaXMgaXMgcHJpbWFyaWx5Cit1c2VmdWwgdG8gZW5zdXJlIHJlcHJvZHVjaWJsZSBidWlsZHMgb2YgdGhlIHNhbWUgb3V0cHV0IGZpbGUgZ2l2ZW4gdGhlCitzYW1lIHNvdWNlIGFuZCBQb2Q6Ok1hbiB2ZXJzaW9uLCBldmVuIHdoZW4gZmlsZSB0aW1lc3RhbXBzIG1heSBub3QgYmUKK2NvbnNpc3RlbnQuICBUaGFua3MsIE5pa28gVHluaS4KKworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NTk0MDUKK09yaWdpbjogdXBzdHJlYW0KK1BhdGNoLU5hbWU6IGZpeGVzL3BvZF9tYW5fcmVwcm9kdWNpYmxlX2RhdGUuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gIHwgNjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IHwgMjkgKysrKysrKysrKysrKy0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK2luZGV4IDcyY2E5ZmYuLjA1MzY2NjIgMTAwNjQ0CistLS0gYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorKysrIGIvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KK0BAIC04NzYsMjUgKzg3Niw0MiBAQCBzdWIgZGV2aXNlX3RpdGxlIHsKKyB9CisgCisgIyBEZXRlcm1pbmUgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIGFuZCByZXR1cm4gdGhhdCwgcHJvcGVybHkgZm9ybWF0dGVkIGluIElTTworLSMgZm9ybWF0LiAgSWYgd2UgY2FuJ3QgZ2V0IHRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgaW5wdXQsIGluc3RlYWQgdXNlIHRoZQorLSMgY3VycmVudCB0aW1lLiAgUG9kOjpTaW1wbGUgcmV0dXJucyBhIGNvbXBsZXRlbHkgdW51c2VmdWwgc3RyaW5naWZpZWQgZmlsZQorLSMgaGFuZGxlIGFzIHRoZSBzb3VyY2VfZmlsZW5hbWUgZm9yIGlucHV0IGZyb20gYSBmaWxlIGhhbmRsZSwgc28gd2UgaGF2ZSB0bworLSMgZGVhbCB3aXRoIHRoYXQgYXMgd2VsbC4KKysjIGZvcm1hdC4KKysjCisrIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCB0aGF0IG92ZXJyaWRlcyBhbnl0aGluZyBlbHNlLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IKKysjIHJlcHJvZHVjaWJsZSBnZW5lcmF0aW9uIG9mIHRoZSBzYW1lIGZpbGUgZXZlbiBpZiB0aGUgaW5wdXQgZmlsZSB0aW1lc3RhbXBzCisrIyBhcmUgdW5wcmVkaWN0YWJsZSBvciB0aGUgUE9EIGNvbXMgZnJvbSBzdGFuZGFyZCBpbnB1dC4KKysjCisrIyBPdGhlcndpc2UsIHVzZSB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGlmIHdlIGNhbiBzdGF0IGl0LiAgQmUKKysjIGF3YXJlIHRoYXQgUG9kOjpTaW1wbGUgcmV0dXJucyB0aGUgc3RyaW5naWZpY2F0aW9uIG9mIHRoZSBmaWxlIGhhbmRsZSBhcworKyMgc291cmNlX2ZpbGVuYW1lIGZvciBpbnB1dCBmcm9tIGEgZmlsZSBoYW5kbGUsIHNvIHdlJ2xsIHN0YXQgc29tZSByYW5kb20gcmVmCisrIyBzdHJpbmcgaW4gdGhhdCBjYXNlLiAgSWYgdGhhdCBmYWlscywgaW5zdGVhZCB1c2UgdGhlIGN1cnJlbnQgdGltZS4KKysjCisrIyAkc2VsZiAtIFBvZDo6TWFuIG9iamVjdCwgdXNlZCB0byBnZXQgdGhlIHNvdXJjZSBmaWxlCisrIworKyMgUmV0dXJuczogWVlZWS1NTS1ERCBkYXRlIHN1aXRhYmxlIGZvciB0aGUgbGVmdC1oYW5kIGZvb3RlcgorIHN1YiBkZXZpc2VfZGF0ZSB7CisgICAgIG15ICgkc2VsZikgPSBAXzsKKysKKysgICAgIyBJZiBQT0RfTUFOX0RBVEUgaXMgc2V0LCBhbHdheXMgdXNlIGl0LgorKyAgICBpZiAoJEVOVntQT0RfTUFOX0RBVEV9KSB7CisrICAgICAgICByZXR1cm4gJEVOVntQT0RfTUFOX0RBVEV9OworKyAgICB9CisrCisrICAgICMgT3RoZXJ3aXNlLCBnZXQgdGhlIGlucHV0IGZpbGVuYW1lIGFuZCB0cnkgdG8gc3RhdCBpdC4gIElmIHRoYXQgZmFpbHMsCisrICAgICMgdXNlIHRoZSBjdXJyZW50IHRpbWUuCisgICAgIG15ICRpbnB1dCA9ICRzZWxmLT5zb3VyY2VfZmlsZW5hbWU7CisgICAgIG15ICR0aW1lOworICAgICBpZiAoJGlucHV0KSB7CistICAgICAgICAkdGltZSA9IChzdGF0ICRpbnB1dClbOV0gfHwgdGltZTsKKysgICAgICAgICR0aW1lID0gKHN0YXQoJGlucHV0KSlbOV0gfHwgdGltZSgpOworICAgICB9IGVsc2UgeworLSAgICAgICAgJHRpbWUgPSB0aW1lOworKyAgICAgICAgJHRpbWUgPSB0aW1lKCk7CisgICAgIH0KKyAKKy0gICAgIyBDYW4ndCB1c2UgUE9TSVg6OnN0cmZ0aW1lKCksIHdoaWNoIHVzZXMgRmNudGwsIGJlY2F1c2UgTWFrZU1ha2VyCistICAgICMgdXNlcyB0aGlzIGFuZCBpdCBoYXMgdG8gd29yayBpbiB0aGUgY29yZSB3aGljaCBjYW4ndCBsb2FkIGR5bmFtaWMKKy0gICAgIyBsaWJyYXJpZXMuCistICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChsb2NhbHRpbWUgJHRpbWUpWzUsNCwzXTsKKy0gICAgcmV0dXJuIHNwcmludGYgKCIlMDRkLSUwMmQtJTAyZCIsICR5ZWFyICsgMTkwMCwgJG1vbnRoICsgMSwgJGRheSk7CisrICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlciB1c2VzCisrICAgICMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljIGxpYnJhcmllcy4KKysgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSgkdGltZSkpWzUsNCwzXTsKKysgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CisgCisgIyBQcmludCBvdXQgdGhlIHByZWFtYmxlIGFuZCB0aGUgdGl0bGUuICBUaGUgbWVhbmluZyBvZiB0aGUgYXJndW1lbnRzIHRvIC5USAorQEAgLTE2MzIsNiArMTY0OSwxNSBAQCBhcmd1bWVudC4KKyBTZXRzIHRoZSBjZW50ZXJlZCBwYWdlIGhlYWRlciB0byB1c2UgaW5zdGVhZCBvZiAiVXNlciBDb250cmlidXRlZCBQZXJsCisgRG9jdW1lbnRhdGlvbiIuCisgCisrPWl0ZW0gZGF0ZQorKworK1NldHMgdGhlIGxlZnQtaGFuZCBmb290ZXIuICBJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGUgY29udGVudHMgb2YgdGhlCisrZW52aXJvbm1lbnQgdmFyaWFibGUgUE9EX01BTl9EQVRFLCBpZiBzZXQsIHdpbGwgYmUgdXNlZC4gIEZhaWxpbmcgdGhhdCwKKyt0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCB0aW1lCisraWYgc3RhdCgpIGNhbid0IGZpbmQgdGhhdCBmaWxlICh3aGljaCB3aWxsIGJlIHRoZSBjYXNlIGlmIHRoZSBpbnB1dCBpcworK2Zyb20gQzxTVERJTj4pLiAgSWYgb2J0YWluZWQgZnJvbSB0aGUgZmlsZSBtb2RpZmljYXRpb24gZGF0ZSBvciB0aGUKKytjdXJyZW50IHRpbWUsIGhlIGRhdGUgd2lsbCBiZSBmb3JtYXR0ZWQgYXMgQzxZWVlZLU1NLUREPi4KKysKKyA9aXRlbSBlcnJvcnMKKyAKKyBIb3cgdG8gcmVwb3J0IGVycm9ycy4gIEM8ZGllPiBzYXlzIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBvbiBhbnkgUE9ECitAQCAtMTY0MiwxMyArMTY2OCw2IEBAIFBPRCBlcnJvcnMgZW50aXJlbHksIGFzIG11Y2ggYXMgcG9zc2libGUuCisgCisgVGhlIGRlZmF1bHQgaXMgQzxwb2Q+LgorIAorLT1pdGVtIGRhdGUKKy0KKy1TZXRzIHRoZSBsZWZ0LWhhbmQgZm9vdGVyLiAgQnkgZGVmYXVsdCwgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dAorLWZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmIHN0YXQoKSBjYW4ndCBmaW5kIHRoYXQgZmlsZSAodGhlCistY2FzZSBpZiB0aGUgaW5wdXQgaXMgZnJvbSBDPFNURElOPiksIGFuZCB0aGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcworLUM8WVlZWS1NTS1ERD4uCistCisgPWl0ZW0gZml4ZWQKKyAKKyBUaGUgZml4ZWQtd2lkdGggZm9udCB0byB1c2UgZm9yIHZlcmJhdGltIHRleHQgYW5kIGNvZGUuICBEZWZhdWx0cyB0bworQEAgLTE4MTAsNiArMTgyOSwyMCBAQCBvcHRpb24gd2FzIHNldCB0byBDPGRpZT4uCisgCisgPWJhY2sKKyAKKys9aGVhZDEgRU5WSVJPTk1FTlQKKysKKys9b3ZlciA0CisrCisrPWl0ZW0gUE9EX01BTl9EQVRFCisrCisrSWYgc2V0LCB0aGlzIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgb2YgdGhlIGxlZnQtaGFuZCBmb290ZXIgdW5sZXNzIHRoZQorK0M8ZGF0ZT4gb3B0aW9uIGlzIGV4cGxpY2l0bHkgc2V0LCBvdmVycmlkaW5nIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGlucHV0CisrZmlsZSBvciB0aGUgY3VycmVudCB0aW1lLiAgVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIHRvIGVuc3VyZSByZXByb2R1Y2libGUKKytidWlsZHMgb2YgdGhlIHNhbWUgb3V0cHV0IGZpbGUgZ2l2ZW4gdGhlIHNhbWUgc291Y2UgYW5kIFBvZDo6TWFuIHZlcnNpb24sCisrZXZlbiB3aGVuIGZpbGUgdGltZXN0YW1wcyBtYXkgbm90IGJlIGNvbnNpc3RlbnQuCisrCisrPWJhY2sKKysKKyA9aGVhZDEgQlVHUworIAorIEVuY29kaW5nIGhhbmRsaW5nIGFzc3VtZXMgdGhhdCBQZXJsSU8gaXMgYXZhaWxhYmxlIGFuZCBkb2VzIG5vdCB3b3JrCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCAzY2NlOWY1Li5jNjEwZGQ5IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xLDE1ICsxLDI4IEBACistIyEvdXNyL2Jpbi9wZXJsIC13CistCistIyBJbiBvcmRlciBmb3IgTWFrZU1ha2VyIHRvIGJ1aWxkIGluIHRoZSBjb3JlLCBub3RoaW5nIGNhbiB1c2UKKy0jIEZjbnRsIHdoaWNoIGluY2x1ZGVzIFBPU0lYLiAgZGV2aXNlX2RhdGUoKSdzIHVzZSBvZiBzdHJmdGltZSgpCistIyB3YXMgcmVwbGFjZWQuICBUaGlzIHRlc3RzIHRoYXQgaXQncyBpZGVudGljYWwuCisrIyEvdXNyL2Jpbi9wZXJsCisrIworKyMgSW4gb3JkZXIgZm9yIE1ha2VNYWtlciB0byBidWlsZCBpbiB0aGUgY29yZSwgbm90aGluZyBjYW4gdXNlIEZjbnRsIHdoaWNoCisrIyBpbmNsdWRlcyBQT1NJWC4gIGRldmlzZV9kYXRlKCkncyB1c2Ugb2Ygc3RyZnRpbWUoKSB3YXMgcmVwbGFjZWQuICBUaGlzIHRlc3RzCisrIyB0aGF0IGl0J3MgaWRlbnRpY2FsLiAgSXQgYWxzbyB0ZXN0cyBzcGVjaWFsIGhhbmRsaW5nIG9mIHRoZSBQT0RfTUFOX0RBVEUKKysjIGVudmlyb25tZW50IHZhcmlhYmxlLgorIAorK3VzZSA1LjAwNjsKKyB1c2Ugc3RyaWN0OworLQorLXVzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDE7CisrdXNlIHdhcm5pbmdzOworIAorIHVzZSBQb2Q6Ok1hbjsKKyB1c2UgUE9TSVggcXcoc3RyZnRpbWUpOworIAorK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDI7CisrCisrIyBDaGVjayB0aGF0IHRoZSByZXN1bHRzIG9mIGRldmljZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUuICBUaGVyZSBpcyBubyBpbnB1dAorKyMgZmlsZSBuYW1lLCBzbyB0aGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50IHRpbWUuCisgbXkgJHBhcnNlciA9IFBvZDo6TWFuLT5uZXc7CistaXMgJHBhcnNlci0+ZGV2aXNlX2RhdGUsIHN0cmZ0aW1lKCIlWS0lbS0lZCIsIGxvY2FsdGltZSk7CisraXMoCisrICAgICRwYXJzZXItPmRldmlzZV9kYXRlLAorKyAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBsb2NhbHRpbWUoKSksCisrICAgICdkZXZpc2VfZGF0ZSBtYXRjaGVzIHN0cmZ0aW1lJworKyk7CisrCisrIyBTZXQgdGhlIG92ZXJyaWRlIGVudmlyb25tZW50IHZhcmlhYmxlIGFuZCBlbnN1cmUgdGhhdCBpdCdzIGhvbm9yZWQuCisrbG9jYWwgJEVOVntQT0RfTUFOX0RBVEV9ID0gJzIwMTQtMDEtMDEnOworK2lzKCRwYXJzZXItPmRldmlzZV9kYXRlLCAnMjAxNC0wMS0wMScsICdkZXZpc2VfZGF0ZSBob25vcnMgUE9EX01BTl9EQVRFJyk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tZW1wdHktZGF0ZS5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJiZjljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLWVtcHR5LWRhdGUuZGlmZgpAQCAtMCwwICsxLDUxIEBACitGcm9tIDE4M2JiNGFmN2FkODYyYTJjZjMxZDBkY2IzZGQ0NWMxMDBmNzY3NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMjI6MjE6MjUgLTA3MDAKK1N1YmplY3Q6IFN1cHBvcnQgYW4gZW1wdHkgUE9EX01BTl9EQVRFIGVudmlyb25tZW50IHZhcmlhYmxlCisKK09uZSBtYXkgd2FudCB0byBzZXQgdGhpcyB0byBhbiBlbXB0eSBzdHJpbmcuICBIYW5kbGUgdGhhdCBjb3JyZWN0bHkuCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD1lMGU5ZmNiNTNlOGZjOTU0YjJiMTk1NTM4NWVlYTE4YzI3Zjg2OWFmCitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODAyNTkKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi1lbXB0eS1kYXRlLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICB8IDIgKy0KKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQgfCA2ICsrKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQoraW5kZXggMzY1ODkyZS4uODk5N2ExNSAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCisrKysgYi9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbQorQEAgLTg5NCw3ICs4OTQsNyBAQCBzdWIgZGV2aXNlX2RhdGUgeworICAgICBteSAoJHNlbGYpID0gQF87CisgCisgICAgICMgSWYgUE9EX01BTl9EQVRFIGlzIHNldCwgYWx3YXlzIHVzZSBpdC4KKy0gICAgaWYgKCRFTlZ7UE9EX01BTl9EQVRFfSkgeworKyAgICBpZiAoZGVmaW5lZCgkRU5We1BPRF9NQU5fREFURX0pKSB7CisgICAgICAgICByZXR1cm4gJEVOVntQT0RfTUFOX0RBVEV9OworICAgICB9CisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50IGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitpbmRleCA5ZGE5ZDFiLi4yNzI3MWQ5IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS1kYXRlLnQKK0BAIC0xMiw3ICsxMiw3IEBAIHVzZSB3YXJuaW5nczsKKyB1c2UgUG9kOjpNYW47CisgdXNlIFBPU0lYIHF3KHN0cmZ0aW1lKTsKKyAKKy11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyOworK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDM7CisgCisgIyBDaGVjayB0aGF0IHRoZSByZXN1bHRzIG9mIGRldmljZV9kYXRlIG1hdGNoZXMgc3RyZnRpbWUuICBUaGVyZSBpcyBubyBpbnB1dAorICMgZmlsZSBuYW1lLCBzbyB0aGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50IHRpbWUuCitAQCAtMjYsMyArMjYsNyBAQCBpcygKKyAjIFNldCB0aGUgb3ZlcnJpZGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIGVuc3VyZSB0aGF0IGl0J3MgaG9ub3JlZC4KKyBsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSAnMjAxNC0wMS0wMSc7CisgaXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsICcyMDE0LTAxLTAxJywgJ2RldmlzZV9kYXRlIGhvbm9ycyBQT0RfTUFOX0RBVEUnKTsKKysKKysjIENoZWNrIHRoYXQgYW4gZW1wdHkgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgaG9ub3JlZC4KKytsb2NhbCAkRU5We1BPRF9NQU5fREFURX0gPSBxe307CisraXMoJHBhcnNlci0+ZGV2aXNlX2RhdGUsIHF7fSwgJ2RldmlzZV9kYXRlIGhvbm9ycyBlbXB0eSBQT0RfTUFOX0RBVEUnKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi1waXBlLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNjAzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tcGlwZS5kaWZmCkBAIC0wLDAgKzEsMTA5IEBACitGcm9tIDc2NzFkMTAxYmFhNzVkN2E3OWJmYmQ4Yzc1YzE1OTVmYmIzZjUzYmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSdXNzIEFsbGJlcnkgPHJyYUBjcGFuLm9yZz4KK0RhdGU6IFNhdCwgNyBGZWIgMjAxNSAxOTowMzozNCAtMDgwMAorU3ViamVjdDogQmV0dGVyIGVycm9ycyBmb3IgbWFuIHBhZ2VzIGZyb20gc3RhbmRhcmQgaW5wdXQKKworW1BvZDo6TWFuXSBBdHRlbXB0IHRvIGRldGVjdCBpZiB0aGUgaW5wdXQgY2FtZSBmcm9tIGEgcGlwZSBhbmQKK3RoZXJlZm9yZSBoYXMgYSBjb21wbGV0ZWx5IHVuaGVscGZ1bCAoYW5kIG5vbnJlcHJvZHVjaWJsZSkgc291cmNlIGZpbGUKK25hbWUsIGFuZCBkaWFnbm9zZSB0aGlzIGFzIGFuIGVycm9yLiAgRG9jdW1lbnQgdGhhdCB0aGUgbmFtZSBvcHRpb24KKygtLW5hbWUgdG8gcG9kMm1hbikgaXMgcmVxdWlyZWQgd2hlbiBwcm9jZXNzaW5nIFBPRCBzb3VyY2UgZnJvbQorc3RhbmRhcmQgaW5wdXQuICAoRGViaWFuIEJ1ZyM3Nzc0MDUpCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD1kOTg4NzJlNDZjOTM4NjFiN2FiYTE0OTQ5ZTEyNTg3MTIwODdkYzU1CitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83Nzc0MDUKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi1waXBlLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICAgICB8IDE1ICsrKysrKysrKysrKysrKworIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCB8ICA0ICsrKysKKyBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50ICAgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSBjcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50CisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCA4OTk3YTE1Li45NjllYWZmIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtODI4LDYgKzgyOCwxNyBAQCBzdWIgZGV2aXNlX3RpdGxlIHsKKyAgICAgJHNlY3Rpb24gPSAzIGlmICghJCRzZWxme3NlY3Rpb259ICYmICRuYW1lID1+IC9cLnBtXHovaSk7CisgICAgICRuYW1lID1+IHMvXC5wKG9kfFtsbV0pXHovL2k7CisgCisrICAgICMgSWYgUG9kOjpQYXJzZXIgZ2F2ZSB1cyBhbiBJTzo6RmlsZSByZWZlcmVuY2UgYXMgdGhlIHNvdXJjZSBmaWxlIG5hbWUsCisrICAgICMgY29udmVydCB0aGF0IHRvIHRoZSBlbXB0eSBzdHJpbmcgYXMgd2VsbC4gIFRoZW4sIGlmIHdlIGRvbid0IGhhdmUgYQorKyAgICAjIHZhbGlkIG5hbWUsIGVtaXQgYSB3YXJuaW5nIGFuZCBjb252ZXJ0IGl0IHRvIFNURElOLgorKyAgICBpZiAoJG5hbWUgPX4gL15JTzo6RmlsZSg/Oj1cdyspXCgweFtcZGEtZl0rXCkkL2kpIHsKKysgICAgICAgICRuYW1lID0gJyc7CisrICAgIH0KKysgICAgaWYgKCRuYW1lIGVxICcnKSB7CisrICAgICAgICAkc2VsZi0+d2hpbmUgKDEsICdObyBuYW1lIGdpdmVuIGZvciBkb2N1bWVudCcpOworKyAgICAgICAgJG5hbWUgPSAnU1RESU4nOworKyAgICB9CisrCisgICAgICMgSWYgdGhlIHNlY3Rpb24gaXNuJ3QgMywgdGhlbiB0aGUgbmFtZSBkZWZhdWx0cyB0byBqdXN0IHRoZSBiYXNlbmFtZSBvZgorICAgICAjIHRoZSBmaWxlLiAgT3RoZXJ3aXNlLCBhc3N1bWUgd2UncmUgZGVhbGluZyB3aXRoIGEgbW9kdWxlLiAgV2Ugd2FudCB0bworICAgICAjIGZpZ3VyZSBvdXQgdGhlIGZ1bGwgbW9kdWxlIG5hbWUgZnJvbSB0aGUgcGF0aCB0byB0aGUgZmlsZSwgYnV0IHdlIGRvbid0CitAQCAtMTcwNSw2ICsxNzE2LDEwIEBAIG1vZHVsZSBwYXRoLiAgSWYgaXQgaXMsIGEgcGF0aCBsaWtlIEM8Li4uL2xpYi9Qb2QvTWFuLnBtPiBpcyBjb252ZXJ0ZWQgaW50bworIGEgbmFtZSBsaWtlIEM8UG9kOjpNYW4+LiAgVGhpcyBvcHRpb24sIGlmIGdpdmVuLCBvdmVycmlkZXMgYW55IGF1dG9tYXRpYworIGRldGVybWluYXRpb24gb2YgdGhlIG5hbWUuCisgCisrSWYgZ2VuZXJhdGluZyBhIG1hbnVhbCBwYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQsIHRoaXMgb3B0aW9uIGlzIHJlcXVpcmVkLAorK3NpbmNlIHRoZXJlJ3Mgb3RoZXJ3aXNlIG5vIHdheSBmb3IgUG9kOjpNYW4gdG8ga25vdyB3aGF0IHRvIHVzZSBmb3IgdGhlCisrbWFudWFsIHBhZ2UgbmFtZS4KKysKKyA9aXRlbSBub3VybHMKKyAKKyBOb3JtYWxseSwgTFo8Pjw+IGZvcm1hdHRpbmcgY29kZXMgd2l0aCBhIFVSTCBidXQgYW5jaG9yIHRleHQgYXJlIGZvcm1hdHRlZAorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCBiL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAoraW5kZXggMzg2OTVmOC4uNDNlMzVkZiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitAQCAtMjM2LDYgKzIzNiwxMCBAQCBOb3RlIHRoYXQgdGhpcyBvcHRpb24gaXMgcHJvYmFibHkgbm90IHVzZWZ1bCB3aGVuIGNvbnZlcnRpbmcgbXVsdGlwbGUgUE9ECisgZmlsZXMgYXQgb25jZS4gIFRoZSBjb252ZW50aW9uIGZvciBVbml4IG1hbiBwYWdlcyBmb3IgY29tbWFuZHMgaXMgZm9yIHRoZQorIG1hbiBwYWdlIHRpdGxlIHRvIGJlIGluIGFsbC11cHBlcmNhc2UgZXZlbiBpZiB0aGUgY29tbWFuZCBpc24ndC4KKyAKKytXaGVuIGNvbnZlcnRpbmcgUE9EIHNvdXJjZSBmcm9tIHN0YW5kYXJkIGlucHV0LCB0aGlzIG9wdGlvbiBpcyByZXF1aXJlZCwKKytzaW5jZSB0aGVyZSdzIG90aGVyd2lzZSBubyB3YXkgdG8ga25vdyB3aGF0IHRvIHVzZSBhcyB0aGUgbmFtZSBvZiB0aGUKKyttYW51YWwgcGFnZS4KKysKKyA9aXRlbSBCPC0tbm91cmxzPgorIAorIE5vcm1hbGx5LCBMWjw+PD4gZm9ybWF0dGluZyBjb2RlcyB3aXRoIGEgVVJMIGJ1dCBhbmNob3IgdGV4dCBhcmUgZm9ybWF0dGVkCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtdGl0bGUudCBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLXRpdGxlLnQKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi44NjM5NDQxCistLS0gL2Rldi9udWxsCisrKysgYi9jcGFuL3BvZGxhdG9ycy90L2RldmlzZS10aXRsZS50CitAQCAtMCwwICsxLDMyIEBACisrIyEvdXNyL2Jpbi9wZXJsCisrIworKyMgVGVzdHMgZm9yIHRoZSBhdXRvbWF0aWMgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgbWFudWFsIHBhZ2UgdGl0bGUgaWYgbm90CisrIyBzcGVjaWZpZWQgdmlhIG9wdGlvbnMgdG8gcG9kMm1hbiBvciB0aGUgUG9kOjpNYW4gY29uc3RydWN0b3IuCisrCisrdXNlIDUuMDA2OworK3VzZSBzdHJpY3Q7CisrdXNlIHdhcm5pbmdzOworKworK3VzZSBGaWxlOjpTcGVjOworK3VzZSBJTzo6RmlsZTsKKyt1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAzOworKworK0JFR0lOIHsKKysgICAgdXNlX29rKCdQb2Q6Ok1hbicpOworK30KKysKKysjIENyZWF0ZSBhIHBhcnNlciBhbmQgc2V0IGl0IHVwIHdpdGggYW4gaW5wdXQgc291cmNlLiAgVGhlcmUgaXNuJ3QgYSB3YXkgdG8gZG8KKysjIHRoaXMgaW4gUG9kOjpTaW1wbGUgd2l0aG91dCBhY3R1YWxseSBwYXJzaW5nIHRoZSBkb2N1bWVudCwgc28gc2VuZCB0aGUKKysjIG91dHB1dCB0byBhIHN0cmluZyB0aGF0IHdlJ2xsIGlnbm9yZS4KKytteSAkcGF0aCA9IEZpbGU6OlNwZWMtPmNhdGRpcigndCcsICdkYXRhJywgJ2Jhc2ljLnBvZCcpOworK215ICRoYW5kbGUgPSBJTzo6RmlsZS0+bmV3KCRwYXRoLCAncicpOworK215ICRwYXJzZXIgPSBQb2Q6Ok1hbi0+bmV3KGVycm9ycyA9PiAncG9kJyk7CisrbXkgJG91dHB1dDsKKyskcGFyc2VyLT5vdXRwdXRfc3RyaW5nKFwkb3V0cHV0KTsKKyskcGFyc2VyLT5wYXJzZV9maWxlKCRoYW5kbGUpOworKworKyMgQ2hlY2sgdGhlIHJlc3VsdHMgb2YgZGV2aXNlX3RpdGxlIGZvciB0aGlzLiAgV2Ugc2hvdWxkIGdldCBiYWNrIFNURElOLCBhbmQKKysjIHdlIHNob3VsZCBoYXZlIHJlcG9ydGVkIGFuIGVycm9yLgorK215ICgkbmFtZSwgJHNlY3Rpb24pID0gJHBhcnNlci0+ZGV2aXNlX3RpdGxlOworK2lzKCRuYW1lLCAnU1RESU4nLCAnZGV2aXNlX3RpdGxlIHVzZXMgU1RESU4gZm9yIGZpbGUgaGFuZGxlIGlucHV0Jyk7Cisrb2soJHBhcnNlci0+ZXJyb3JzX3NlZW4sICcuLi5hbmQgZXJyb3JzIHdlcmUgc2VlbicpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLWRvY3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2RmZWZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYKQEAgLTAsMCArMSw4NiBAQAorRnJvbSA2MTk4ODU2YjUzMjNkNjIwNDA5NDI5M2YwMWI4OTA0NzI2MThmMTgyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUnVzcyBBbGxiZXJ5IDxycmFAY3Bhbi5vcmc+CitEYXRlOiBXZWQsIDE1IEFwciAyMDE1IDIwOjQ5OjA3IC0wNzAwCitTdWJqZWN0OiBEb2N1bWVudGF0aW9uIGFuZCB0ZXN0IHN1aXRlIHVwZGF0ZXMgZm9yIFVUQyBmaXgKKworVXBkYXRlIHRoZSBQb2Q6Ok1hbiBhbmQgcG9kMm1hbiBkb2N1bWVudGF0aW9uIGFuZCB0aGUgdGVzdCBzdWl0ZQorZm9yIHRoZSBuZXcgVVRDLWJhc2VkIGRlZmF1bHQgcGFnZSBmb290ZXIsIGFuZCBhZGQgYSBDaGFuZ2VzCitlbnRyeS4KKworKGJhY2twb3J0ZWQgdG8gUGVybCA1LjIwLjIgYnkgTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPikKKworT3JpZ2luOiB1cHN0cmVhbSwgaHR0cDovL2dpdC5leXJpZS5vcmcvP3A9cGVybC9wb2RsYXRvcnMuZ2l0O2E9Y29tbWl0ZGlmZjtoPTUyZGI5M2JmODBlNGEwNmY4NDk3ZTRlYmFkZTA1MDZiNmVlMGU3MGQKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MDI1OQorUGF0Y2gtTmFtZTogZml4ZXMvcG9kbWFuLXV0Yy1kb2NzLmRpZmYKKy0tLQorIGNwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtICAgICB8ICA2ICsrKysrLQorIGNwYW4vcG9kbGF0b3JzL3NjcmlwdHMvcG9kMm1hbi5QTCB8IDExICsrKysrKy0tLS0tCisgY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50ICAgIHwgIDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCBjM2JhMjAxLi4zNjU4OTJlIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtOTEwLDYgKzkxMCw4IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgCisgICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlciB1c2VzCisgICAgICMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljIGxpYnJhcmllcy4KKysgICAgIyBVc2UgZ210aW1lIGluc3RlYWQgb2YgbG9jYWx0aW1lIHNvIHRoYXQgdGhlIGdlbmVyYXRlZCBtYW4gcGFnZSBkb2VzIG5vdAorKyAgICAjIGRlcGVuZCBvbiB0aGUgbG9jYWwgdGltZSB6b25lIHNldHRpbmcgYW5kIGlzIG1vcmUgcmVwcm9kdWNpYmxlCisgICAgIG15ICgkeWVhciwgJG1vbnRoLCAkZGF5KSA9IChnbXRpbWUoJHRpbWUpKVs1LDQsM107CisgICAgIHJldHVybiBzcHJpbnRmKCIlMDRkLSUwMmQtJTAyZCIsICR5ZWFyICsgMTkwMCwgJG1vbnRoICsgMSwgJGRheSk7CisgfQorQEAgLTE2NTYsNyArMTY1OCw5IEBAIGVudmlyb25tZW50IHZhcmlhYmxlIFBPRF9NQU5fREFURSwgaWYgc2V0LCB3aWxsIGJlIHVzZWQuICBGYWlsaW5nIHRoYXQsCisgdGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgdGltZQorIGlmIHN0YXQoKSBjYW4ndCBmaW5kIHRoYXQgZmlsZSAod2hpY2ggd2lsbCBiZSB0aGUgY2FzZSBpZiB0aGUgaW5wdXQgaXMKKyBmcm9tIEM8U1RESU4+KS4gIElmIG9idGFpbmVkIGZyb20gdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGRhdGUgb3IgdGhlCistY3VycmVudCB0aW1lLCBoZSBkYXRlIHdpbGwgYmUgZm9ybWF0dGVkIGFzIEM8WVlZWS1NTS1ERD4uCisrY3VycmVudCB0aW1lLCB0aGUgZGF0ZSB3aWxsIGJlIGZvcm1hdHRlZCBhcyBDPFlZWVktTU0tREQ+IGFuZCB3aWxsIGJlIGJhc2VkCisrb24gVVRDIChzbyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBiZSByZXByb2R1Y2libGUgcmVnYXJkbGVzcyBvZiBsb2NhbCB0aW1lCisrem9uZSkuCisgCisgPWl0ZW0gZXJyb3JzCisgCitkaWZmIC0tZ2l0IGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMIGIvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCitpbmRleCA2YWYzNDc0Li4zODY5NWY4IDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvc2NyaXB0cy9wb2QybWFuLlBMCisrKysgYi9jcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwKK0BAIC0xNzQsOSArMTc0LDEwIEBAIENvbnRyaWJ1dGVkIFBlcmwgRG9jdW1lbnRhdGlvbiIsIGJ1dCBhbHNvIHNlZSBCPC0tb2ZmaWNpYWw+IGJlbG93LgorIAorID1pdGVtIEI8LWQ+IEk8c3RyaW5nPiwgQjwtLWRhdGU+PUk8c3RyaW5nPgorIAorLVNldCB0aGUgbGVmdC1oYW5kIGZvb3RlciBzdHJpbmcgdG8gdGhpcyB2YWx1ZS4gIEJ5IGRlZmF1bHQsIHRoZSBtb2RpZmljYXRpb24KKy1kYXRlIG9mIHRoZSBpbnB1dCBmaWxlIHdpbGwgYmUgdXNlZCwgb3IgdGhlIGN1cnJlbnQgZGF0ZSBpZiBpbnB1dCBjb21lcyBmcm9tCistQzxTVERJTj4uCisrU2V0IHRoZSBsZWZ0LWhhbmQgZm9vdGVyIHN0cmluZyB0byB0aGlzIHZhbHVlLiAgQnkgZGVmYXVsdCwgdGhlCisrbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIGlucHV0IGZpbGUgd2lsbCBiZSB1c2VkLCBvciB0aGUgY3VycmVudCBkYXRlIGlmCisraW5wdXQgY29tZXMgZnJvbSBDPFNURElOPiwgYW5kIHdpbGwgYmUgYmFzZWQgb24gVVRDIChzbyB0aGF0IHRoZSBvdXRwdXQKKyt3aWxsIGJlIHJlcHJvZHVjaWJsZSByZWdhcmRsZXNzIG9mIGxvY2FsIHRpbWUgem9uZSkuCisgCisgPWl0ZW0gQjwtZXJyb3JzPj1JPHN0eWxlPgorIAorQEAgLTM4Myw4ICszODQsOCBAQCBCPHBvZDJtYW4+IGJ5IExhcnJ5IFdhbGwgYW5kIFRvbSBDaHJpc3RpYW5zZW4uCisgCisgPWhlYWQxIENPUFlSSUdIVCBBTkQgTElDRU5TRQorIAorLUNvcHlyaWdodCAxOTk5LCAyMDAwLCAyMDAxLCAyMDA0LCAyMDA2LCAyMDA4LCAyMDEwLCAyMDEyLCAyMDEzIFJ1c3MKKy1BbGxiZXJ5IDxycmFAc3RhbmZvcmQuZWR1Pi4KKytDb3B5cmlnaHQgMTk5OSwgMjAwMCwgMjAwMSwgMjAwNCwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiwgMjAxMywgMjAxNCwKKysyMDE1IFJ1c3MgQWxsYmVyeSA8cnJhQGNwYW4ub3JnPi4KKyAKKyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorZGlmZiAtLWdpdCBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudCBiL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAoraW5kZXggYzYxMGRkOS4uOWRhOWQxYiAxMDA2NDQKKy0tLSBhL2NwYW4vcG9kbGF0b3JzL3QvZGV2aXNlLWRhdGUudAorKysrIGIvY3Bhbi9wb2RsYXRvcnMvdC9kZXZpc2UtZGF0ZS50CitAQCAtMTksNyArMTksNyBAQCB1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiAyOworIG15ICRwYXJzZXIgPSBQb2Q6Ok1hbi0+bmV3OworIGlzKAorICAgICAkcGFyc2VyLT5kZXZpc2VfZGF0ZSwKKy0gICAgc3RyZnRpbWUoJyVZLSVtLSVkJywgbG9jYWx0aW1lKCkpLAorKyAgICBzdHJmdGltZSgnJVktJW0tJWQnLCBnbXRpbWUoKSksCisgICAgICdkZXZpc2VfZGF0ZSBtYXRjaGVzIHN0cmZ0aW1lJworICk7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9wb2RtYW4tdXRjLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJkN2I5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3BvZG1hbi11dGMuZGlmZgpAQCAtMCwwICsxLDMzIEBACitGcm9tIGM3OTY3NzVjZGJkMmNjZTA2YWNiYjdhYzM1NTE4N2Q0MDYzMDE3YTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaHJpcyBMYW1iIDxsYW1ieUBkZWJpYW4ub3JnPgorRGF0ZTogV2VkLCAxNSBBcHIgMjAxNSAyMDo0Mjo1MyAtMDcwMAorU3ViamVjdDogTWFrZSB0aGUgZW1iZWRkZWQgZGF0ZSBmcm9tIFBvZDo6TWFuIHJlcHJvZHVjaWJsZQorCitXaGlsZSB3b3JraW5nIG9uIHRoZSAicmVwcm9kdWNpYmxlIGJ1aWxkcyIgZWZmb3J0LCB3ZSBoYXZlIG5vdGljZWQKK3RoYXQgUG9kOjpNYW4gZ2VuZXJhdGVzIG91dHB1dCB0aGF0IHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKK3RpbWV6b25lLgorCitUaGUgYXR0YWNoZWQgcGF0Y2ggZml4ZXMgdGhpcyBieSB1c2luZyBHTVQgKH5VVEMpIGRhdGVzIGluc3RlYWQuCisKKyhiYWNrcG9ydGVkIHRvIFBlcmwgNS4yMC4yIGJ5IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4pCisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly9naXQuZXlyaWUub3JnLz9wPXBlcmwvcG9kbGF0b3JzLmdpdDthPWNvbW1pdGRpZmY7aD05MTNmYmIyYmQyY2UwNzFlMjAxMjg2MjkzMDJhZTI4NTI1NTRjYWQ0CitCdWctRGViaWFuOiBodHRwczovL2J1Z3MuZGViaWFuLm9yZy83ODAyNTkKK1BhdGNoLU5hbWU6IGZpeGVzL3BvZG1hbi11dGMuZGlmZgorLS0tCisgY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL3BvZGxhdG9ycy9saWIvUG9kL01hbi5wbSBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitpbmRleCAwNTM2NjYyLi5jM2JhMjAxIDEwMDY0NAorLS0tIGEvY3Bhbi9wb2RsYXRvcnMvbGliL1BvZC9NYW4ucG0KKysrKyBiL2NwYW4vcG9kbGF0b3JzL2xpYi9Qb2QvTWFuLnBtCitAQCAtOTEwLDcgKzkxMCw3IEBAIHN1YiBkZXZpc2VfZGF0ZSB7CisgCisgICAgICMgQ2FuJ3QgdXNlIFBPU0lYOjpzdHJmdGltZSgpLCB3aGljaCB1c2VzIEZjbnRsLCBiZWNhdXNlIE1ha2VNYWtlciB1c2VzCisgICAgICMgdGhpcyBhbmQgaXQgaGFzIHRvIHdvcmsgaW4gdGhlIGNvcmUgd2hpY2ggY2FuJ3QgbG9hZCBkeW5hbWljIGxpYnJhcmllcy4KKy0gICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGxvY2FsdGltZSgkdGltZSkpWzUsNCwzXTsKKysgICAgbXkgKCR5ZWFyLCAkbW9udGgsICRkYXkpID0gKGdtdGltZSgkdGltZSkpWzUsNCwzXTsKKyAgICAgcmV0dXJuIHNwcmludGYoIiUwNGQtJTAyZC0lMDJkIiwgJHllYXIgKyAxOTAwLCAkbW9udGggKyAxLCAkZGF5KTsKKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9maXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiNDk4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZgpAQCAtMCwwICsxLDE1MyBAQAorRnJvbSBkOWQ1MzVlZjk3ZjU3YWY2ZTk3MjgwNzU5NDRjMzNmM2IwYjUzNzJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFJlc3BlY3QgdW1hc2sgZHVyaW5nIGluc3RhbGxhdGlvbgorCitUaGlzIGlzIG5lZWRlZCB0byBzYXRpc2Z5IERlYmlhbiBwb2xpY3kgcmVnYXJkaW5nIGdyb3VwLXdyaXRhYmxlCitzaXRlIGRpcmVjdG9yaWVzLgorCitQYXRjaC1OYW1lOiBmaXhlcy9yZXNwZWN0X3VtYXNrLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtSW5zdGFsbC9saWIvRXh0VXRpbHMvSW5zdGFsbC5wbSAgIHwgMTggKysrKysrKysrLS0tLS0tLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAxOCArKysrKysrKystLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtIGIvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtCitpbmRleCAxZThhYzRjLi4zZTc5MTIxIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1JbnN0YWxsL2xpYi9FeHRVdGlscy9JbnN0YWxsLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLUluc3RhbGwvbGliL0V4dFV0aWxzL0luc3RhbGwucG0KK0BAIC00NTEsNyArNDUxLDcgQEAgc3ViIF9jYW5fd3JpdGVfZGlyIHsKKyAKKyA9cG9kCisgCistPWl0ZW0gX21rcGF0aCgkZGlyLCRzaG93LCRtb2RlLCR2ZXJib3NlLCRkcnlfcnVuKQorKz1pdGVtIF9ta3BhdGgoJGRpciwkc2hvdywkdmVyYm9zZSwkZHJ5X3J1bikKKyAKKyBXcmFwcGVyIGFyb3VuZCBGaWxlOjpQYXRoOjpta3BhdGgoKSB0byBoYW5kbGUgZXJyb3JzLgorIAorQEAgLTQ2OCwxMyArNDY4LDEzIEBAIHdyaXRhYmxlLgorID1jdXQKKyAKKyBzdWIgX21rcGF0aCB7CistICAgIG15ICgkZGlyLCRzaG93LCRtb2RlLCR2ZXJib3NlLCRkcnlfcnVuKT1AXzsKKysgICAgbXkgKCRkaXIsJHNob3csJHZlcmJvc2UsJGRyeV9ydW4pPUBfOworICAgICBpZiAoICR2ZXJib3NlICYmICR2ZXJib3NlID4gMSAmJiAhIC1kICRkaXIpIHsKKyAgICAgICAgICRzaG93PSAxOworLSAgICAgICAgcHJpbnRmICJta3BhdGgoJXMsJWQsJSNvKVxuIiwgJGRpciwgJHNob3csICRtb2RlOworKyAgICAgICAgcHJpbnRmICJta3BhdGgoJXMsJWQpXG4iLCAkZGlyLCAkc2hvdzsKKyAgICAgfQorICAgICBpZiAoISRkcnlfcnVuKSB7CistICAgICAgICBpZiAoICEgZXZhbCB7IEZpbGU6OlBhdGg6Om1rcGF0aCgkZGlyLCRzaG93LCRtb2RlKTsgMSB9ICkgeworKyAgICAgICAgaWYgKCAhIGV2YWwgeyBGaWxlOjpQYXRoOjpta3BhdGgoJGRpciwkc2hvdyk7IDEgfSApIHsKKyAgICAgICAgICAgICBfY2hva2UoIkNhbid0IGNyZWF0ZSAnJGRpciciLCIkQCIpOworICAgICAgICAgfQorIAorQEAgLTc4Myw3ICs3ODMsNyBAQCBzdWIgaW5zdGFsbCB7ICNYWFggT1MtU1BFQ0lGSUMKKyAgICAgICAgIF9jaGRpcigkY3dkKTsKKyAgICAgfQorICAgICBmb3JlYWNoIG15ICR0YXJnZXRkaXIgKHNvcnQga2V5cyAlY2hlY2tfZGlycykgeworLSAgICAgICAgX21rcGF0aCggJHRhcmdldGRpciwgMCwgMDc1NSwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisrICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKyAgICAgfQorICAgICBmb3JlYWNoIG15ICRmb3VuZCAoQGZvdW5kX2ZpbGVzKSB7CisgICAgICAgICBteSAoJGRpZmYsICRmZmQsICRvcmlnZmlsZSwgJG1vZGUsICRzaXplLCAkYXRpbWUsICRtdGltZSwKK0BAIC03OTcsNyArNzk3LDcgQEAgc3ViIGluc3RhbGwgeyAjWFhYIE9TLVNQRUNJRklDCisgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0ZmlsZT0gX3VubGlua19vcl9yZW5hbWUoICR0YXJnZXRmaWxlLCAndHJ5aGFyZCcsICdpbnN0YWxsJyApCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzICRkcnlfcnVuOworICAgICAgICAgICAgICAgICB9IGVsc2lmICggISAtZCAkdGFyZ2V0ZGlyICkgeworLSAgICAgICAgICAgICAgICAgICAgX21rcGF0aCggJHRhcmdldGRpciwgMCwgMDc1NSwgJHZlcmJvc2UsICRkcnlfcnVuICk7CisrICAgICAgICAgICAgICAgICAgICBfbWtwYXRoKCAkdGFyZ2V0ZGlyLCAwLCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBwcmludCAiSW5zdGFsbGluZyAkdGFyZ2V0ZmlsZVxuIjsKKyAKK0BAIC04MzcsNyArODM3LDcgQEAgc3ViIGluc3RhbGwgeyAjWFhYIE9TLVNQRUNJRklDCisgCisgICAgIGlmICgkcGFja3snd3JpdGUnfSkgeworICAgICAgICAgJGRpciA9IGluc3RhbGxfcm9vdGVkX2RpcihkaXJuYW1lKCRwYWNreyd3cml0ZSd9KSk7CistICAgICAgICBfbWtwYXRoKCAkZGlyLCAwLCAwNzU1LCAkdmVyYm9zZSwgJGRyeV9ydW4gKTsKKysgICAgICAgIF9ta3BhdGgoICRkaXIsIDAsICR2ZXJib3NlLCAkZHJ5X3J1biApOworICAgICAgICAgcHJpbnQgIldyaXRpbmcgJHBhY2t7J3dyaXRlJ31cbiIgaWYgJHZlcmJvc2U7CisgICAgICAgICAkcGFja2xpc3QtPndyaXRlKGluc3RhbGxfcm9vdGVkX2ZpbGUoJHBhY2t7J3dyaXRlJ30pKSB1bmxlc3MgJGRyeV9ydW47CisgICAgIH0KK0BAIC0xMTgwLDcgKzExODAsNyBAQCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIHNpbGVuY2UgdGhpcyBvdXRwdXQuCisgc3ViIHBtX3RvX2JsaWIgeworICAgICBteSgkZnJvbXRvLCRhdXRvZGlyLCRwbV9maWx0ZXIpID0gQF87CisgCistICAgIF9ta3BhdGgoJGF1dG9kaXIsMCwwNzU1KTsKKysgICAgX21rcGF0aCgkYXV0b2RpciwwKTsKKyAgICAgd2hpbGUobXkoJGZyb20sICR0bykgPSBlYWNoICUkZnJvbXRvKSB7CisgICAgICAgICBpZiggLWYgJHRvICYmIC1zICRmcm9tID09IC1zICR0byAmJiAtTSAkdG8gPCAtTSAkZnJvbSApIHsKKyAgICAgICAgICAgICBwcmludCAiU2tpcCAkdG8gKHVuY2hhbmdlZClcbiIgdW5sZXNzICRJTlNUQUxMX1FVSUVUOworQEAgLTEyMDMsNyArMTIwMyw3IEBAIHN1YiBwbV90b19ibGliIHsKKyAgICAgICAgICAgICAjIHdlIHdvbnQgdHJ5IGhhcmQgaGVyZS4gaXRzIHRvbyBsaWtlbHkgdG8gbWVzcyB0aGluZ3MgdXAuCisgICAgICAgICAgICAgZm9yY2V1bmxpbmsoJHRvKTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgX21rcGF0aChkaXJuYW1lKCR0byksMCwwNzU1KTsKKysgICAgICAgICAgICBfbWtwYXRoKGRpcm5hbWUoJHRvKSwwKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgkbmVlZF9maWx0ZXJpbmcpIHsKKyAgICAgICAgICAgICBydW5fZmlsdGVyKCRwbV9maWx0ZXIsICRmcm9tLCAkdG8pOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IGY2MzE0NWMuLjE5N2YxMDIgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTE4LDcgKzIxMTgsNyBAQCBkb2NfX2luc3RhbGwgOiBkb2Nfc2l0ZV9pbnN0YWxsCisgCSQoTk9FQ0hPKSAkKEVDSE8pIElOU1RBTExESVJTIG5vdCBkZWZpbmVkLCBkZWZhdWx0aW5nIHRvIElOU1RBTExESVJTPXNpdGUKKyAKKyBwdXJlX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoTU9EX0lOU1RBTEwpIFwKKysJJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CisgCisgICAgIHB1c2ggQG0sCitAQCAtMjEzOCw3ICsyMTM4LDcgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExQUklWTElCKSIgXAorIAorIAorIHB1cmVfc2l0ZV9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAgICAgcHVzaCBAbSwKKyBxewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChTSVRFQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCitAQCAtMjE1Niw3ICsyMTU2LDcgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExTSVRFTElCKSIgXAorIAkJIn0uJHNlbGYtPmNhdGRpcignJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknKS5xeyIKKyAKKyBwdXJlX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChNT0RfSU5TVEFMTCkgXAorKwkkKE5PRUNITykgdW1hc2sgMDIyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAgICAgcHVzaCBAbSwKKyBxewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKK0BAIC0yMTg4LDggKzIxODgsOCBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorQEAgLTIxOTksOCArMjE5OSw4IEBAIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorQEAgLTIyMTAsOCArMjIxMCw4IEBAIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCisgCisgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKysJLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChET0NfSU5TVEFMTCkgXAorIAkJIk1vZHVsZSIgIiQoTkFNRSkiIFwKKyAJCSJpbnN0YWxsZWQgaW50byIgJChJTlNUQUxMVkVORE9STElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2luc3Rtb2RzaF9kb2MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJjNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gMjYyMDliNTUyMDFhMWIyZDI1MjUyYWMzYjQyNWJjNDkwODEyOTlkZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogVHVlLCA4IE1hciAyMDA1IDE5OjMwOjM4ICsxMTAwCitTdWJqZWN0OiBEZWJpYW4gcG9saWN5IGRvZXNuJ3QgaW5zdGFsbCAucGFja2xpc3QgZmlsZXMgZm9yIGNvcmUgb3IgdmVuZG9yLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vaW5zdG1vZHNoX2RvYy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoIHwgNCArKystCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvYmluL2luc3Rtb2RzaCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2Jpbi9pbnN0bW9kc2gKK2luZGV4IDhiOWFhOTUuLmU1NTE0MzQgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9iaW4vaW5zdG1vZHNoCitAQCAtMTgsOSArMTgsMTEgQEAgaW5zdG1vZHNoIC0gQSBzaGVsbCB0byBleGFtaW5lIGluc3RhbGxlZCBtb2R1bGVzCisgCisgPWhlYWQxIERFU0NSSVBUSU9OCisgCistQSBsaXR0bGUgaW50ZXJmYWNlIHRvIEV4dFV0aWxzOjpJbnN0YWxsZWQgdG8gZXhhbWluZSBpbnN0YWxsZWQgbW9kdWxlcywKKytBIGxpdHRsZSBpbnRlcmZhY2UgdG8gRXh0VXRpbHM6Okluc3RhbGxlZCB0byBleGFtaW5lIGxvY2FsbHkqIGluc3RhbGxlZCBtb2R1bGVzLAorIHZhbGlkYXRlIHlvdXIgcGFja2xpc3RzIGFuZCBldmVuIGNyZWF0ZSBhIHRhcmJhbGwgZnJvbSBhbiBpbnN0YWxsZWQgbW9kdWxlLgorIAorKypPbiBEZWJpYW4gc3lzdGVtLCBCPGNvcmU+IGFuZCBCPHZlbmRvcj4gbW9kdWxlcyBhcmUgbWFuYWdlZCBieSBDPGRwa2c+LgorKworID1oZWFkMSBTRUUgQUxTTworIAorIEV4dFV0aWxzOjpJbnN0YWxsZWQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGY4NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9sZF9ydW5fcGF0aC5kaWZmCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gNTNjZTY5MDg1OTE4MjMyYTFiN2UyNmU3NzYyYzFiMmY3MGIxZWI0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUmVtb3ZlIHN0YW5kYXJkIGxpYnMgZnJvbSBMRF9SVU5fUEFUSCBhcyBwZXIgRGViaWFuIHBvbGljeS4KKworUGF0Y2gtTmFtZTogZGViaWFuL2xkX3J1bl9wYXRoLmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbSB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCitpbmRleCAzN2JjZmQ0Li5iZDY2ZTY1IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KK0BAIC01Niw2ICs1Niw5IEBAIHN1YiBfdW5peF9vczJfZXh0IHsKKyAgICAgbXkgKCAkcHdkICkgICA9IGN3ZCgpOyAgICAjIGZyb20gQ3dkLnBtCisgICAgIG15ICggJGZvdW5kICkgPSAwOworIAorKyAgICAjIERlYmlhbi1zcGVjaWZpYzogZG9uJ3QgdXNlIExEX1JVTl9QQVRIIGZvciBzdGFuZGFyZCBkaXJzCisrICAgICRsZF9ydW5fcGF0aF9zZWVueyRffSsrIGZvciBAbGlicGF0aDsKKysKKyAgICAgZm9yZWFjaCBteSAkdGhpc2xpYiAoIHNwbGl0ICcgJywgJHBvdGVudGlhbF9saWJzICkgeworICAgICAgICAgbXkgKCAkY3VzdG9tX25hbWUgKSA9ICcnOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGVmOTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlibmV0X2NvbmZpZ19wYXRoLmRpZmYKQEAgLTAsMCArMSwzNyBAQAorRnJvbSBhN2Y2ZDQ1M2U2MDI1NmQzMjk0NjlhNzViNjQyY2NhODU0Y2ViZWExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFNldCBsb2NhdGlvbiBvZiBsaWJuZXQuY2ZnIHRvIC9ldGMvcGVybC9OZXQgYXMgL3VzciBtYXkgbm90IGJlCisgd3JpdGFibGUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZgorLS0tCisgY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0gfCA3ICsrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9saWJuZXQvbGliL05ldC9Db25maWcucG0gYi9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbQoraW5kZXggOTUzYTgyNi4uNjFiYTEyYSAxMDA2NDQKKy0tLSBhL2NwYW4vbGlibmV0L2xpYi9OZXQvQ29uZmlnLnBtCisrKysgYi9jcGFuL2xpYm5ldC9saWIvTmV0L0NvbmZpZy5wbQorQEAgLTY4LDkgKzY4LDggQEAgbXkgJW5jID0gKAorIFRSWV9JTlRFUk5FVF9DT05GSUcKKyB9CisgCistbXkgJGZpbGUgPSBfX0ZJTEVfXzsKKytteSAkZmlsZSA9ICcvZXRjL3BlcmwvTmV0L2xpYm5ldC5jZmcnOworIG15ICRyZWY7CistJGZpbGUgPX4gcy9Db25maWcucG0vbGlibmV0LmNmZy87CisgaWYgKC1mICRmaWxlKSB7CisgICAkcmVmID0gZXZhbCB7IGxvY2FsICRTSUd7X19ESUVfX307IGRvICRmaWxlIH07CisgICBpZiAocmVmKCRyZWYpIGVxICdIQVNIJykgeworQEAgLTE0Miw4ICsxNDEsOCBAQCBOZXQ6OkNvbmZpZyAtIExvY2FsIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgbGlibmV0CisgQzxOZXQ6OkNvbmZpZz4gaG9sZHMgY29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgbW9kdWxlcyBpbiB0aGUgbGlibmV0CisgZGlzdHJpYnV0aW9uLiBEdXJpbmcgaW5zdGFsbGF0aW9uIHlvdSB3aWxsIGJlIGFza2VkIGZvciB0aGVzZSB2YWx1ZXMuCisgCistVGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBpcyBoZWxkIGdsb2JhbGx5IGluIGEgZmlsZSBpbiB0aGUgcGVybCBpbnN0YWxsYXRpb24KKy10cmVlLCBidXQgYSB1c2VyIG1heSBvdmVycmlkZSBhbnkgb2YgdGhlc2UgdmFsdWVzIGJ5IHByb3ZpZGluZyB0aGVpciBvd24uIFRoaXMKKytUaGUgY29uZmlndXJhdGlvbiBkYXRhIGlzIGhlbGQgZ2xvYmFsbHkgaW4gQzwvZXRjL3BlcmwvTmV0L2xpYm5ldC5jZmc+LAorK2J1dCBhIHVzZXIgbWF5IG92ZXJyaWRlIGFueSBvZiB0aGVzZSB2YWx1ZXMgYnkgcHJvdmlkaW5nIHRoZWlyIG93bi4gVGhpcworIGNhbiBiZSBkb25lIGJ5IGhhdmluZyBhIEM8LmxpYm5ldHJjPiBmaWxlIGluIHRoZWlyIGhvbWUgZGlyZWN0b3J5LiBUaGlzIGZpbGUKKyBzaG91bGQgcmV0dXJuIGEgcmVmZXJlbmNlIHRvIGEgSEFTSCBjb250YWluaW5nIHRoZSBrZXlzIGRlc2NyaWJlZCBiZWxvdy4KKyBGb3IgZXhhbXBsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbGlicGVybF9lbWJlZF9kb2MuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZiODA1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xpYnBlcmxfZW1iZWRfZG9jLmRpZmYKQEAgLTAsMCArMSwyNiBAQAorRnJvbSBmYjhiZGJiNGJmNTYzODJkZTA5OWU2MmMyNTY0Mjg2YjlkZmRhNDZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IE5vdGUgdGhhdCBsaWJwZXJsLWRldiBwYWNrYWdlIGlzIHJlcXVpcmVkIGZvciBlbWJlZGRlZCBsaW5raW5nCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMTg2Nzc4CisKK1BhdGNoLU5hbWU6IGRlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmCistLS0KKyBsaWIvRXh0VXRpbHMvRW1iZWQucG0gfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYi9FeHRVdGlscy9FbWJlZC5wbSBiL2xpYi9FeHRVdGlscy9FbWJlZC5wbQoraW5kZXggM2Y5ODNjMS4uMGVjOGE2NyAxMDA2NDQKKy0tLSBhL2xpYi9FeHRVdGlscy9FbWJlZC5wbQorKysrIGIvbGliL0V4dFV0aWxzL0VtYmVkLnBtCitAQCAtMjk2LDYgKzI5Niw5IEBAIGFuZCBleHRlbnNpb25zIGluIHlvdXIgQy9DKysgYXBwbGljYXRpb25zLgorIFR5cGljYWxseSwgYW4gYXBwbGljYXRpb24gRjxNYWtlZmlsZT4gd2lsbCBpbnZva2UgQzxFeHRVdGlsczo6RW1iZWQ+CisgZnVuY3Rpb25zIHdoaWxlIGJ1aWxkaW5nIHlvdXIgYXBwbGljYXRpb24uICAKKyAKKytOb3RlIHRoYXQgb24gRGViaWFuIHN5c3RlbXMgdGhlIEI8bGlicGVybC1kZXY+IHBhY2thZ2UgaXMgcmVxdWlyZWQgZm9yCisrY29tcGlsaW5nIGFwcGxpY2F0aW9ucyB3aGljaCBlbWJlZCBhbiBpbnRlcnByZXRlci4KKysKKyA9aGVhZDEgQEVYUE9SVAorIAorIEM8RXh0VXRpbHM6OkVtYmVkPiBleHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbG9jYWxlLXJvYnVzdG5lc3MuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0NzFlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKQEAgLTAsMCArMSw1MiBAQAorRnJvbSAyODllYWY4N2Y4ZGU0ZDllYmZkNjYxZDRlNDI5OWMyOTUyNDM1MjQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxMCBBcHIgMjAxNSAxMDoxOTo1MSArMDMwMAorU3ViamVjdDogTWFrZSB0L3J1bi9sb2NhbGUudCBzdXJ2aXZlIG1pc3NpbmcgbG9jYWxlcyBtYXNrZWQgYnkgTENfQUxMCisKK0lmIExDX0FMTCBpcyBzZXQgdG8gYSB2YWxpZCBsb2NhbGUgYnV0IGFub3RoZXIgTENfKiBzZXR0aW5nIGxpa2UgTENfQ1RZUEUKK2lzbid0LCB0L3J1bi9sb2NhbGUudCB3b3VsZCBmYWlsIGJlY2F1c2UgaXQgZXhwbGljaXRseSB1bnNldHMgTENfQUxMLAordW5tYXNraW5nIHRoZSBwcm9ibGVtIHVuZGVybmVhdGguIEFsbCB0aGUgb3RoZXIgdGVzdHMgc3Vydml2ZSBzdWNoCithIHNjZW5hcmlvLgorCitXaGlsZSB0aGlzIGlzIGNsZWFybHkgYW4gZXJyb3IgaW4gdGhlIGJ1aWxkIGVudmlyb25tZW50LCBpdCdzIGVhc3kgdG8gbWFrZQordGhlIHRlc3QgbW9yZSByb2J1c3QgYnkgZmlyc3QgY2xlYXJpbmcgYWxsIHRoZSBsb2NhbGUgcmVsZXZhbnQgdmFyaWFibGVzLgorCitCdWc6IGh0dHBzOi8vcnQucGVybC5vcmcvVGlja2V0L0Rpc3BsYXkuaHRtbD9pZD0xMjQzMTAKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc4MjA2OAorUGF0Y2gtTmFtZTogZGViaWFuL2xvY2FsZS1yb2J1c3RuZXNzLmRpZmYKKy0tLQorIHQvcnVuL2xvY2FsZS50IHwgNyArKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL2xvY2FsZS50IGIvdC9ydW4vbG9jYWxlLnQKK2luZGV4IGJkMWEwMzQuLjIxMDUzMzkgMTAwNjQ0CistLS0gYS90L3J1bi9sb2NhbGUudAorKysrIGIvdC9ydW4vbG9jYWxlLnQKK0BAIC0yNyw2ICsyNyw5IEBAIG15IEBsb2NhbGVzID0gZXZhbCB7IGZpbmRfbG9jYWxlcyggWyAmTENfQUxMLCAmTENfQ1RZUEUsICZMQ19OVU1FUklDIF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB9OworIHNraXBfYWxsKCJubyBsb2NhbGVzIGF2YWlsYWJsZSIpIHVubGVzcyBAbG9jYWxlczsKKyAKKysjIHJlc2V0IHRoZSBsb2NhbGUgZW52aXJvbm1lbnQKKytsb2NhbCBARU5WeydMQU5HJywgKGdyZXAgL15MQ18vLCBrZXlzICVFTlYpfTsKKysKKyBwbGFuIHRlc3RzID0+ICZsYXN0OworIAorIG15ICRub25fQ19sb2NhbGU7CitAQCAtNTgsOSArNjEsNiBAQCBFT0YKKyBTS0lQOiB7CisgICAgIHNraXAoIldpbmRvd3Mgc3RvcmVzIGxvY2FsZSBkZWZhdWx0cyBpbiB0aGUgcmVnaXN0cnkiLCAxICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAkXk8gZXEgJ01TV2luMzInOworLSAgICBsb2NhbCAkRU5We0xDX05VTUVSSUN9OyAjIFNvIG5vdCB0YWtlbiBhcyBhIGRlZmF1bHQKKy0gICAgbG9jYWwgJEVOVntMQ19BTEx9OyAjIHNvIGl0IG5ldmVyIG92ZXJyaWRlcyBMQ19OVU1FUklDCistICAgIGxvY2FsICRFTlZ7TEFOR307ICAgIyBTbyBub3QgdGFrZW4gYXMgYSBkZWZhdWx0CisgICAgIGZyZXNoX3BlcmxfaXMoImZvciAocXcoQGxvY2FsZXMpKSB7XG4iIC4gPDwnRU9GJywKKyAgICAgICAgIHVzZSBQT1NJWCBxdyhsb2NhbGVfaCk7CisgICAgICAgICB1c2UgbG9jYWxlOworQEAgLTM0OCw3ICszNDgsNiBAQCBFT0YKKyAKKyAgICAgeworIAlsb2NhbCAkRU5We0xDX05VTUVSSUN9ID0gJGRpZmZlcmVudDsKKy0JbG9jYWwgJEVOVntMQ19BTEx9OyAjIHNvIGl0IG5ldmVyIG92ZXJyaWRlcyBMQ19OVU1FUklDCisgCWZyZXNoX3BlcmxfaXMoPDwiRU9GIiwKKyAJICAgIHVzZSBQT1NJWCBxdyhsb2NhbGVfaCk7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tYWtlbWFrZXItcGFzdGhydS5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTBmOWRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyLXBhc3RocnUuZGlmZgpAQCAtMCwwICsxLDMwIEBACitGcm9tIDU5M2RkNTJmNTM1YjFmNDM5ZGZkMGFmZTUyMjExYWU4OTYwZTk4MGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDI0IEF1ZyAyMDE0IDEyOjU2OjExIC0wNzAwCitTdWJqZWN0OiBQYXNzIExEIHNldHRpbmdzIHRocm91Z2ggdG8gc3ViZGlyZWN0b3JpZXMKKworW3J0LmNwYW4ub3JnICMyODYzMl0gZml4ZWQgbW9zdCBpc3N1ZXMgd2l0aCBwYXNzaW5nIExEIGRvd24gdG8KK3N1YmRpcmVjdG9yeSBNYWtlZmlsZS5QTCBmaWxlcy4gSG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgZGlzdHJpYnV0aW9ucworKGluY2x1ZGluZyBXeCwgUGFyOjpQYWNrZXIsIGFuZCBWZXJpbG9nLVBlcmwpIHRoYXQgZXhwbGljaXRseSBzZXQKK0xELiBUaG9zZSBzdGlsbCBjYW4ndCBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gQWRkaW5nIExEIHRvCit0aGUgUEFTVEhSVSBsaXN0IGZpeGVzIHRoaXMuCisKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc1ODQ3MQorUGF0Y2gtTmFtZTogZGViaWFuL21ha2VtYWtlci1wYXN0aHJ1LmRpZmYKKy0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggNGE4ZTE0Yy4uNTQ4ZDk4ZSAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTI3OTMsNyArMjc5Myw3IEBAIHN1YiBwYXN0aHJ1IHsKKyAgICAgbXkoJHNlcCkgPSAkSXN7Vk1TfSA/ICcsJyA6ICcnOworICAgICAkc2VwIC49ICJcXFxuXHQiOworIAorLSAgICBmb3JlYWNoIG15ICRrZXkgKHF3KExJQiBMSUJQRVJMX0EgTElOS1RZUEUgT1BUSU1JWkUKKysgICAgZm9yZWFjaCBteSAka2V5IChxdyhMSUIgTElCUEVSTF9BIExJTktUWVBFIE9QVElNSVpFIExECisgICAgICAgICAgICAgICAgICAgICAgUFJFRklYIElOU1RBTExfQkFTRSkKKyAgICAgICAgICAgICAgICAgICkKKyAgICAgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiNGNiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21ha2VtYWtlcl9jdXN0b21pemVkLmRpZmYKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA2MzQ0NDkwNjZhOWM4MTBlODE1MDY0MjVkMmNhOTI1YjJmZDcyYWIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pYyBIYXJncmVhdmVzIDxkb21AZWFydGgubGk+CitEYXRlOiBTYXQsIDIzIE1heSAyMDE1IDIxOjE1OjA2ICswMjAwCitTdWJqZWN0OiBVcGRhdGUgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGZvciBmaWxlcyBwYXRjaGVkIGluIERlYmlhbgorCitQYXRjaC1OYW1lOiBkZWJpYW4vbWFrZW1ha2VyX2N1c3RvbWl6ZWQuZGlmZgorLS0tCisgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK2luZGV4IDdkZjM5OGQuLmY4NTdiZDIgMTAwNjQ0CistLS0gYS90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKKysrKyBiL3QvcG9ydGluZy9jdXN0b21pemVkLmRhdAorQEAgLTEsNyArMSw3IEBACisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvQ29tbWFuZC9NTS5wbSA3ZjRkZmQwZmU4ODRiZDQyNDEyYmNmMDRjYTgwZWY5N2IzOWMxZDU0CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC5wbSBiZWYwOTk5ODhiMTVmYjBiMmExZjVhYzQ4YzAxYWYxZjdmMzZkMzI5CistRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gODE2OGUxOGYwZTNjZTNlY2U0YmI3ZTdjNzJkNTdlYzA3YzY3YzQwMgorLUV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSA3MTE1ZTk3YTUzNTU5Y2IzZWMwNjFkZDZmN2YzNDRlNTIyNzI0YzRhCisrRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gMzQ5M2FlNmY5MzI2NGU5NjdmNThkZWRhYTNkYmYzZGJjYjI0OTg1MworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSAzZDdhYmQ2NzRiMTVlZDMyM2Y3NDM1OTRlZjBiZDA5ZGI3NmIxYWVlCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0NvbmZpZy5wbSBmOGRiOGQ0MjQ1YmYwNjg0YjgyMTBjODExZjUwZDdjZmIxYTI3ZDc4CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWFrZU1ha2VyL0ZBUS5wb2QgNzU3YmZmYjQ3ODU3NTIxMzExZjhmM2JkZTQzZWJlMTY1ZjhkNTE5MQorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01ha2VNYWtlci9Mb2NhbGUucG0gODJiZTA2ODUxZGViODRjNjQxOWFkMDAzY2U5YjZkMTk1N2YzOTVmMworQEAgLTEzLDcgKzEzLDcgQEAgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTWtib290c3RyYXAucG0gNTg4NzJkNjYKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9Na3N5bWxpc3RzLnBtIGFiODAwMjlhYjE2ZDM4ZDRmMmU0MWRjODhkMmNlYjlmMzc5MGU0NzcKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTS5wbSA0NTNlMGFiYmM0YmIzOGRiNGMwODIwYWQ1YzQ4NDZmMzEzYjY2MjkxCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQUlYLnBtIGMxYjFiYWJkYThmNDNhZTdhMmNhYmExY2I0ZjcwZjkyYWY1YTBlMzQKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gNmY5MGQ5NGFkM2U3YWEwMDQ1YTNiMWExMGExYmIxODM5MWY4OWY1NworK0V4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbSAyMWJkZTUzMjkwYmYxYTRkYTQ0NTcyOTBiNjViZDFiMGNhNmYxZDE2CisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQmVPUy5wbSBjYWIyYjNjZTA4YjcxYTRjZTg5YWE2MzBmMjM2ZWIwOGI4NTI0MzlkCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQ3lnd2luLnBtIDYxZmNlZDBmYWY1MThiZjg3YzI2NWZjYjUxZWQzMzBiYTM1NDYyM2YKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9EYXJ3aW4ucG0gYWUwZWY1MWE3YjZkZDBiMDVhYTYxYzc3OWRmNzE2N2RkYTVmNTExOQorQEAgLTIyLDcgKzIyLDcgQEAgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fTWFjT1MucG0gMDU0NDMwMWY3MTIKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9OVzUucG0gNDMzMTM1ZWVjYjg1YjRiMWQ5MGQzMDI3NDMyZjMyOTQzNmM3ODQ0NworIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX09TMi5wbSAxZmJiNTYwNWJmYjQ3ZmVlZTQwODNmZWJhOGFhODVlNjU5NjI4ZjcwCisgRXh0VXRpbHM6Ok1ha2VNYWtlciBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fUU5YLnBtIDViNjZkMWY0ODVhNjAzNGQ5NmZjMjRiYTE2NjViMWJhZDllNDQ3ZjEKKy1FeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIDhjZWY5OWE5YmQzNzBlY2ZkMDdkZGIwZWZiZGNiYjQxMDEyNTVlNDUKKytFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGM0NTVjOTE1ZmI3ZGMzZWViMTIwMGVkMWNkMTkwNDhlNmYyMWU2YjEKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9VV0lOLnBtIDkzOTU3MmZkZTNkNTliYTc3YzJlNjc3ZmUyZGYyYmVkNGJlZDU4OTgKKyBFeHRVdGlsczo6TWFrZU1ha2VyIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9WTVMucG0gMDljMjA0OWJmZDI1YjczNWUyYTViY2Y1NmE2Y2ZmN2I0ODI3ZjljOAorIEV4dFV0aWxzOjpNYWtlTWFrZXIgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1ZPUy5wbSBkNjVkNjNmODIxN2E1NWMzNmY2MmUyNDk4MTQ5ODg5NzRmNTkzYzc5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tb2RfcGF0aHMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL21vZF9wYXRocy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTU5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9tb2RfcGF0aHMuZGlmZgpAQCAtMCwwICsxLDk5IEBACitGcm9tIDZjNmNmMTRlMjA0ZjNjMDMxMzcyYmZkOTYwNGFkNTI0ZDU2OTExODYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgMTggTWFyIDIwMDUgMjI6MjI6MjUgKzExMDAKK1N1YmplY3Q6IFR3ZWFrIEBJTkMgb3JkZXJpbmcgZm9yIERlYmlhbgorCitPdXIgb3JkZXIgaXM6CisKKyAgICBldGMgKGZvciBjb25maWcgZmlsZXMpCisgICAgc2l0ZSAoNS44LjEpCisgICAgdmVuZG9yIChhbGwpCisgICAgY29yZSAoNS44LjEpCisgICAgc2l0ZSAodmVyc2lvbi1pbmRlcCkKKyAgICBzaXRlIChwcmUtNS44LjEpCisKK1RoZSByYXRpb25hbGUgYmVpbmcgdGhhdCBhbiBhZG1pbiAodmlhIHNpdGUpLCBvciBtb2R1bGUgcGFja2FnZXIKKyh2ZW5kb3IpIGNhbiBjaG9zZSB0byBzaGFkb3cgY29yZSBtb2R1bGVzIHdoZW4gdGhlcmUgaXMgYSBuZXdlcgordmVyc2lvbiB0aGFuIGlzIGluY2x1ZGVkIGluIGNvcmUuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9tb2RfcGF0aHMuZGlmZgorLS0tCisgcGVybC5jIHwgNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9wZXJsLmMgYi9wZXJsLmMKK2luZGV4IDA4NjY0NWIuLmU2NGYxZjQgMTAwNjQ0CistLS0gYS9wZXJsLmMKKysrKyBiL3BlcmwuYworQEAgLTQzNzMsNiArNDM3MywxMSBAQCBTX2luaXRfcGVybGxpYihwVEhYKQorIAkJICAgICAgSU5DUFVTSF9BRERfU1VCX0RJUlN8SU5DUFVTSF9DQU5fUkVMT0NBVEUpOworICNlbmRpZgorIAorKyNpZmRlZiBERUJJQU4KKysgICAgLyogZm9yIGNvbmZpZ3VyYXRpb24gd2hlcmUgL3VzciBpcyBtb3VudGVkIHJvIChDUEFOOjpDb25maWcsIE5ldDo6Q29uZmlnKSAqLworKyAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBTVFJfV0lUSF9MRU4oIi9ldGMvcGVybCIpLCAweDApOworKyNlbmRpZgorKworICNpZmRlZiBTSVRFQVJDSF9FWFAKKyAgICAgLyogc2l0ZWFyY2ggaXMgYWx3YXlzIHJlbGF0aXZlIHRvIHNpdGVsaWIgb24gV2luZG93cyBmb3IKKyAgICAgICogRExMLWJhc2VkIHBhdGggaW50dWl0aW9uIHRvIHdvcmsgY29ycmVjdGx5ICovCitAQCAtNDQ5MCw2ICs0NDk1LDU5IEBAIFNfaW5pdF9wZXJsbGliKHBUSFgpCisgCQkgICAgICBJTkNQVVNIX0FERF9PTERfVkVSU3xJTkNQVVNIX0NBTl9SRUxPQ0FURSk7CisgI2VuZGlmCisgCisrI2lmZGVmIERFQklBTgorKyAgICAvKiBOb24tdmVyc2lvbmVkIHNpdGUgZGlyZWN0b3J5IGZvciBsb2NhbCBtb2R1bGVzIGFuZCBmb3IKKysgICAgICAgY29tcGF0YWJpbGl0eSB3aXRoIHRoZSBwcmV2aW91cyBwYWNrYWdlcycgc2l0ZSBkaXJzICovCisrICAgIFNfaW5jcHVzaF91c2Vfc2VwKGFUSFhfIFNUUl9XSVRIX0xFTigiL3Vzci9sb2NhbC9saWIvc2l0ZV9wZXJsIiksCisrCQkgICAgICBJTkNQVVNIX0FERF9TVUJfRElSUyk7CisrCisrI2lmZGVmIFBFUkxfSU5DX1ZFUlNJT05fTElTVAorKyAgICB7CisrCXN0cnVjdCBzdGF0IHM7CisrCisrCS8qIGFkZCBzbWFsbCBidWZmZXIgaW4gY2FzZSBvbGQgdmVyc2lvbnMgYXJlIGxvbmdlciB0aGFuIHRoZQorKwkgICBjdXJyZW50IHZlcnNpb24gKi8KKysJY2hhciBzaXRlYXJjaFtzaXplb2YoU0lURUFSQ0hfRVhQKSsxNl0gPSBTSVRFQVJDSF9FWFA7CisrCWNoYXIgc2l0ZWxpYltzaXplb2YoU0lURUxJQl9FWFApKzE2XSA9IFNJVEVMSUJfRVhQOworKwljaGFyIGNvbnN0ICp2ZXJzW10gPSB7IFBFUkxfSU5DX1ZFUlNJT05fTElTVCB9OworKwljaGFyIGNvbnN0ICoqcDsKKysKKysJY2hhciAqYXJjaF92ZXJzID0gc3RycmNocihzaXRlYXJjaCwgJy8nKTsKKysJY2hhciAqbGliX3ZlcnMgPSBzdHJyY2hyKHNpdGVsaWIsICcvJyk7CisrCisrCWlmIChhcmNoX3ZlcnMgJiYgaXNkaWdpdCgqKythcmNoX3ZlcnMpKQorKwkgICAgKmFyY2hfdmVycyA9IDA7CisrCWVsc2UKKysJICAgIGFyY2hfdmVycyA9IDA7CisrCisrCWlmIChsaWJfdmVycyAmJiBpc2RpZ2l0KCorK2xpYl92ZXJzKSkKKysJICAgICpsaWJfdmVycyA9IDA7CisrCWVsc2UKKysJICAgIGxpYl92ZXJzID0gMDsKKysKKysJLyogdGhlcmUgaXMgc29tZSBkdXBsaWNhdGlvbiBoZXJlIGFzIGluY3B1c2ggZG9lcyBzb21ldGhpbmcKKysJICAgc2ltaWxhciBpbnRlcm5hbGx5LCBidXQgcmVxdWlyZWQgYXMgc2l0ZWFyY2ggaXMgbm90IGEKKysJICAgc3ViZGlyZWN0b3J5IG9mIHNpdGVsaWIgKi8KKysJZm9yIChwID0gdmVyczsgKnA7IHArKykKKysJeworKwkgICAgaWYgKGFyY2hfdmVycykKKysJICAgIHsKKysJCXN0cmNweShhcmNoX3ZlcnMsICpwKTsKKysJCWlmIChQZXJsTElPX3N0YXQoc2l0ZWFyY2gsICZzKSA+PSAwICYmIFNfSVNESVIocy5zdF9tb2RlKSkKKysJCSAgICBTX2luY3B1c2hfdXNlX3NlcChhVEhYXyBzaXRlYXJjaCwgc3RybGVuKHNpdGVhcmNoKSwgMHgwKTsKKysJICAgIH0KKysKKysJICAgIGlmIChsaWJfdmVycykKKysJICAgIHsKKysJCXN0cmNweShsaWJfdmVycywgKnApOworKwkJaWYgKFBlcmxMSU9fc3RhdChzaXRlbGliLCAmcykgPj0gMCAmJiBTX0lTRElSKHMuc3RfbW9kZSkpCisrCQkgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gc2l0ZWxpYiwgc3RybGVuKHNpdGVsaWIpLCAweDApOworKwkgICAgfQorKwl9CisrICAgIH0KKysjZW5kaWYKKysjZW5kaWYKKysKKyAjaWZkZWYgUEVSTF9PVEhFUkxJQkRJUlMKKyAgICAgU19pbmNwdXNoX3VzZV9zZXAoYVRIWF8gU1RSX1dJVEhfTEVOKFBFUkxfT1RIRVJMSUJESVJTKSwKKyAJCSAgICAgIElOQ1BVU0hfQUREX09MRF9WRVJTfElOQ1BVU0hfQUREX0FSQ0hPTkxZX1NVQl9ESVJTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MTFmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9ub19wYWNrbGlzdF9wZXJsbG9jYWwuZGlmZgpAQCAtMCwwICsxLDkyIEBACitGcm9tIDI0MGYyZjRhZWIzODUwYmMwYzUzNzBiOWZiYzM5MDk1NzNiZWQ5YjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogRG9uJ3QgaW5zdGFsbCAucGFja2xpc3Qgb3IgcGVybGxvY2FsLnBvZCBmb3IgcGVybCBvciB2ZW5kb3IKKworUGF0Y2gtTmFtZTogZGViaWFuL25vX3BhY2tsaXN0X3Blcmxsb2NhbC5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDM1ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDU3MGE2MzEuLjM5MWRjMjIgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTIyLDExICsyMTIyLDYgQEAgcHVyZV9wZXJsX2luc3RhbGwgOjogYWxsCisgfTsKKyAKKyAgICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLQkJd3JpdGUgIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy19IHVubGVzcyAkc2VsZi0+e05PX1BBQ0tMSVNUfTsKKy0KKy0gICAgcHVzaCBAbSwKKyBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCQkiJChJTlNUX0FSQ0hMSUIpIiAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIiBcCisgCQkiJChJTlNUX0JJTikiICIkKERFU1RJTlNUQUxMQklOKSIgXAorQEAgLTIxNTgsMTAgKzIxNTMsNiBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFNJVEVMSUIpIiBcCisgcHVyZV92ZW5kb3JfaW5zdGFsbCA6OiBhbGwKKyAJJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNT0RfSU5TVEFMTCkgXAorIH07CistICAgIHB1c2ggQG0sCistcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoVkVORE9SQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistCQl3cml0ZSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFZFTkRPUkFSQ0gpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIgXAorLX0gdW5sZXNzICRzZWxmLT57Tk9fUEFDS0xJU1R9OworIAorICAgICBwdXNoIEBtLAorIHF7CQkiJChJTlNUX0xJQikiICIkKERFU1RJTlNUQUxMVkVORE9STElCKSIgXAorQEAgLTIxODcsMzcgKzIxNzgsMTkgQEAgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorIAorICAgICBwdXNoIEBtLCBxeworIGRvY19wZXJsX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFBSSVZMSUIpIFwKKy0JCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorLQkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorLQkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3NpdGVfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTFNJVEVBUkNIKS9wZXJsbG9jYWwucG9kIgorKwktJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExTSVRFQVJDSCkiCisgCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoRE9DX0lOU1RBTEwpIFwKKyAJCSJNb2R1bGUiICIkKE5BTUUpIiBcCisgCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFNJVEVMSUIpIFwKKyAJCUxJTktUWVBFICIkKExJTktUWVBFKSIgXAorIAkJVkVSU0lPTiAiJChWRVJTSU9OKSIgXAorIAkJRVhFX0ZJTEVTICIkKEVYRV9GSUxFUykiIFwKKy0JCT4+ICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdwZXJsbG9jYWwucG9kJykucXsiCisrCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTFNJVEVBUkNIKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFZFTkRPUkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyB9IHVubGVzcyAkc2VsZi0+e05PX1BFUkxMT0NBTH07CisgCitAQCAtMjIyNiwxMyArMjE5OSwxMSBAQCB1bmluc3RhbGwgOjogdW5pbnN0YWxsX2Zyb21fJChJTlNUQUxMRElSUylkaXJzCisgCSQoTk9FQ0hPKSAkKE5PT1ApCisgCisgdW5pbnN0YWxsX2Zyb21fcGVybGRpcnMgOjoKKy0JJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV9zaXRlZGlycyA6OgorIAkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgCisgdW5pbnN0YWxsX2Zyb21fdmVuZG9yZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyB9OworIAorICAgICBqb2luKCIiLEBtKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BhdGNobGV2ZWwuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BhdGNobGV2ZWwuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjU2YjAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGF0Y2hsZXZlbC5kaWZmCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjUxN2M1ZTE1ZDA4NzFlMzZkMGYxMTg3NjYxZmUxZGQyOGRkZjgyMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IFN1biwgMTUgTWF5IDIwMTEgMTk6MzU6NTggKzAzMDAKK1N1YmplY3Q6IExpc3QgcGFja2FnZWQgcGF0Y2hlcyBpbiBwYXRjaGxldmVsLmgKKworT3JpZ2luOiB2ZW5kb3IKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTY3NDg5CisKK1RoZSBsaXN0IG9mIHBhY2thZ2VkIHBhdGNoZXMgaXMgaW4gcGF0Y2hsZXZlbC1kZWJpYW4uaCwgd2hpY2ggaXMgZ2VuZXJhdGVkCitmcm9tIHRoZSBkZWJpYW4vcGF0Y2hlcy8gZGlyZWN0b3J5IHdoZW4gYnVpbGRpbmcgdGhlIHBhY2thZ2UuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wYXRjaGxldmVsLmRpZmYKKy0tLQorIHBhdGNobGV2ZWwuaCB8IDMgKysrCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcGF0Y2hsZXZlbC5oIGIvcGF0Y2hsZXZlbC5oCitpbmRleCBhMGFkNzhiLi4wMTM2N2I3IDEwMDY0NAorLS0tIGEvcGF0Y2hsZXZlbC5oCisrKysgYi9wYXRjaGxldmVsLmgKK0BAIC0xMzcsNiArMTM3LDkgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsb2NhbF9wYXRjaGVzW10gPSB7CisgCSwidW5jb21taXR0ZWQtY2hhbmdlcyIKKyAjZW5kaWYKKyAJUEVSTF9HSVRfVU5QVVNIRURfQ09NTUlUUyAgICAJLyogZG8gbm90IHJlbW92ZSB0aGlzIGxpbmUgKi8KKysjaWZkZWYgREVCSUFOCisrI2luY2x1ZGUgInBhdGNobGV2ZWwtZGViaWFuLmgiCisrI2VuZGlmCisgCSxOVUxMCisgfTsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3Blcmw1ZGIteC10ZXJtaW5hbC1lbXVsYXRvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzM5NTJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybDVkYi14LXRlcm1pbmFsLWVtdWxhdG9yLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gYzk5YzYxZThmODYzYTUwOGEwNzkzMTY4MDExYzk4ZGM3NGFiYmQwNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERvbWluaWMgSGFyZ3JlYXZlcyA8ZG9tQGVhcnRoLmxpPgorRGF0ZTogU2F0LCAxNCBBcHIgMjAxMiAxMTozNDowNSArMDEwMAorU3ViamVjdDogSW52b2tlIHgtdGVybWluYWwtZW11bGF0b3IgcmF0aGVyIHRoYW4geHRlcm0gaW4gcGVybDVkYi5wbAorCitJbiBEZWJpYW4gc3lzdGVtcywgeHRlcm0gbWlnaHQgbm90IGV4aXN0IG9yIG1pZ2h0IG5vdCBiZSB0aGUgcHJlZmVycmVkCit0ZXJtaW5hbCBlbXVsYXRvci4gVXNlIHgtdGVybWluYWwtZW11bGF0b3IgaW5zdGVhZAorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzY2ODQ5MAorRm9yd2FyZGVkOiBub3QtbmVlZGVkCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2gKKy0tLQorIGxpYi9wZXJsNWRiLnBsIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbGliL3Blcmw1ZGIucGwgYi9saWIvcGVybDVkYi5wbAoraW5kZXggN2U3MTk0ZS4uYzQ2NmJmMyAxMDA2NDQKKy0tLSBhL2xpYi9wZXJsNWRiLnBsCisrKysgYi9saWIvcGVybDVkYi5wbAorQEAgLTY5NjAsNyArNjk2MCw3IEBAIHByb3Blcmx5IHNldCB1cC4KKyBzdWIgeHRlcm1fZ2V0X2ZvcmtfVFRZIHsKKyAgICAgKCBteSAkbmFtZSA9ICQwICkgPX4gcyxeLipbL1xcXSwsczsKKyAgICAgb3BlbiBYVCwKKy1xcVszPiYxIHh0ZXJtIC10aXRsZSAiRGF1Z2h0ZXIgUGVybCBkZWJ1Z2dlciAkcGlkcyAkbmFtZSIgLWUgc2ggLWMgJ3R0eSAxPiYzO1wKKytxcVszPiYxIHgtdGVybWluYWwtZW11bGF0b3IgLVQgIkRhdWdodGVyIFBlcmwgZGVidWdnZXIgJHBpZHMgJG5hbWUiIC1lIHNoIC1jICd0dHkgMT4mMztcCisgIHNsZWVwIDEwMDAwMDAwJyB8XTsKKyAKKyAgICAgIyBHZXQgdGhlIG91dHB1dCBmcm9tICd0dHknIGFuZCBjbGVhbiBpdCB1cCBhIGxpdHRsZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BlcmxpdnAuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BlcmxpdnAuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzFlYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcGVybGl2cC5kaWZmCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gZmJmYmViN2E2OTBkNzAzYTNjZGM1NmY5MjNlODllYjdiNzk5N2QzMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4KK0RhdGU6IEZyaSwgOSBKYW4gMjAwOSAxODo1NDo0NyArMDIwMAorU3ViamVjdDogTWFrZSBwZXJsaXZwIHNraXAgaW5jbHVkZSBkaXJlY3RvcmllcyBpbiAvdXNyL2xvY2FsCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNTEwODk1CisKK09uIFNhdCwgSmFuIDEwLCAyMDA5IGF0IDEyOjM3OjE4QU0gKzExMDAsIEJyZW5kYW4gTydEZWEgd3JvdGU6Cis+IE9uIFdlZCwgSmFuIDcsIDIwMDkgYXQgMTI6MjEgQU0sIE5pa28gVHluaSA8bnR5bmlAZGViaWFuLm9yZz4gd3JvdGU6CisKKz4gPiBXZSBjb3VsZCBjcmVhdGUgdGhlIGRpcmVjdG9yaWVzIGluIGEgcG9zdGluc3Qgc2NyaXB0LCBidXQgSSdtIG5vdCBzdXJlCis+ID4gSSBzZWUgdGhlIHBvaW50LiBUaGV5IHdpbGwgYmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaW5zdGFsbGluZworPiA+IENQQU4gbW9kdWxlcy4KKz4KKz4gVGhlIGRpcmVjdG9yaWVzIGFyZSBpbnRlbnRpb25hbGx5IG5vdCBjcmVhdGVkLCBhcyB0aGlzIHdheSB0aGV5IGFyZQorPiBleGNsdWRlZCBmcm9tIHRoZSBzZWFyY2ggcGF0aCBhdCBzdGFydC11cCwgc2F2aW5nIGEgYnVuY2ggb2Ygd2FzdGVkCis+IHN0YXRzIGF0IHVzZS9yZXF1aXJlIHRpbWUgaW4gdGhlIGNvbW1vbiBjYXNlIHRoYXQgdGhlIHVzZXIgaGFzIG5vdAorPiBpbnN0YWxsZWQgYW55IGxvY2FsIHBhY2thZ2VzLiAgQXMgTmlrbyBwb2ludHMgb3V0LCB0aGV5IHdpbGwgYmUKKz4gY3JlYXRlZCBhcyByZXF1aXJlZC4KKworU2lnbmVkLW9mZi1ieTogTmlrbyBUeW5pIDxudHluaUBkZWJpYW4ub3JnPgorCitQYXRjaC1OYW1lOiBkZWJpYW4vcGVybGl2cC5kaWZmCistLS0KKyB1dGlscy9wZXJsaXZwLlBMIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS91dGlscy9wZXJsaXZwLlBMIGIvdXRpbHMvcGVybGl2cC5QTAoraW5kZXggYzJmMGExMS4uY2M0OWY5NiAxMDA2NDQKKy0tLSBhL3V0aWxzL3BlcmxpdnAuUEwKKysrKyBiL3V0aWxzL3BlcmxpdnAuUEwKK0BAIC0xNTMsNiArMTUzLDcgQEAgbXkgJElOQ190b3RhbCA9IDA7CisgbXkgJElOQ190aGVyZSA9IDA7CisgZm9yZWFjaCAoQElOQykgeworICAgICBuZXh0IGlmICRfIGVxICcuJzsgIyBza2lwIC1kIHRlc3QgaGVyZQorKyAgICBuZXh0IGlmIG18L3Vzci9sb2NhbHw7ICMgbm90IHNoaXBwZWQgb24gRGViaWFuCisgICAgIGlmICgtZCAkXykgeworICAgICAgICAgcHJpbnQgIiMjIFBlcmwgXEBJTkMgZGlyZWN0b3J5ICckXycgZXhpc3RzLlxuIiBpZiAkb3B0eyd2J307CisgICAgICAgICAkSU5DX3RoZXJlKys7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BvZDJtYW4tY3VzdG9taXplZC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzBiODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZgpAQCAtMCwwICsxLDIzIEBACitGcm9tIDI3YTQ5NTJjMmU1MzE5NDdkYzlmMmYwMmUyMDYzZDExN2UyZTY5OWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE4IEFwciAyMDE1IDE3OjM5OjMyICswMzAwCitTdWJqZWN0OiBVcGRhdGUgcG9ydGluZy9jdXN0b21pemVkLmRhdCBmb3IgcG9kMm1hbiBtb2RpZmljYXRpb25zCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wb2QybWFuLWN1c3RvbWl6ZWQuZGlmZgorLS0tCisgdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0IGIvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CitpbmRleCAwZWVkOWY3Li43ZGYzOThkIDEwMDY0NAorLS0tIGEvdC9wb3J0aW5nL2N1c3RvbWl6ZWQuZGF0CisrKysgYi90L3BvcnRpbmcvY3VzdG9taXplZC5kYXQKK0BAIC00Miw3ICs0Miw3IEBAIFdpbjMyQVBJOjpGaWxlIGNwYW4vV2luMzJBUEktRmlsZS9NYWtlZmlsZS5QTCA2MDVkMGFlZTMxYWViZTg0YTk5NDA4ZjlhYjVmNjQ0ZGI1CisgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL3QvZmlsZS50IDEyNGU2NGFhNzdlNzU1MjM1ZWIyOTc2NDRhODdmYWM1Mzg4ZDNkNzgKKyBXaW4zMkFQSTo6RmlsZSBjcGFuL1dpbjMyQVBJLUZpbGUvdC90aWUudCA3MTJlYTdlZGQwY2M4MDVjZTFjMGI4MTcyYzAxYjAzZGQxOWI1ODNkCisgV2luMzJBUEk6OkZpbGUgY3Bhbi9XaW4zMkFQSS1GaWxlL3R5cGVtYXAgMjRiZmYwODhiYWJlYWRhYzA4NzNlOGRmMzkwZDE2NjZkOWQ5ZGI0YQorLXBvZGxhdG9ycyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgZjgxYWNmNTNmM2ZmNDZjZGNjNWViZGQ2NjFjNWQxM2ViMzVkMjBkNgorK3BvZGxhdG9ycyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJtYW4uUEwgNzYxZjM1ZDNmY2Y5MWMxYmMyZjllMDI0YTlmYTVjNjJmZDNmYzMzOAorIHBvZGxhdG9ycyBjcGFuL3BvZGxhdG9ycy9zY3JpcHRzL3BvZDJ0ZXh0LlBMIGI0NjkzZmNmZTRhMGExYjM4YTIxNWNmYjg5ODVhNjVkNWQwMjVkNjkKKyB2ZXJzaW9uIGNwYW4vdmVyc2lvbi9saWIvdmVyc2lvbi5wbSBkMDkyM2I4OTVkNTdmMWQ2NjlhZTM2ZmNmODVjODdiMTZkYjM0MWQxCisgdmVyc2lvbiB2dXRpbC5jIDY2OGYxN2NhNDNlMjUyNzY0NTY3NGQyOWJhNzcyYjg2MzMwZDU2NjMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3ByZWZpeF9jaGFuZ2VzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MWVmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmCkBAIC0wLDAgKzEsMTE4IEBACitGcm9tIDkxNDk0OGYwMjZlZmNlMDJjZjBhYmZmOGIwMzEyYWFhZDk2NTkyZWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcmVuZGFuIE8nRGVhIDxib2RAZGViaWFuLm9yZz4KK0RhdGU6IFR1ZSwgOCBNYXIgMjAwNSAxOTozMDozOCArMTEwMAorU3ViamVjdDogRmlkZGxlIHdpdGggKlBSRUZJWCBhbmQgdmFyaWFibGVzIHdyaXR0ZW4gdG8gdGhlIG1ha2VmaWxlCisKK0ZpZGRsZSB3aXRoICpQUkVGSVggYW5kIHZhcmlhYmxlcyB3cml0dGVuIHRvIHRoZSBtYWtlZmlsZSBzbyB0aGF0CitpbnN0YWxsIGRpcmVjdG9yaWVzIG1heSBiZSBjaGFuZ2VkIHdoZW4gbWFrZSBpcyBydW4gYnkgcGFzc2luZworUFJFRklYPSB0byB0aGUgIm1ha2UgaW5zdGFsbCIgY29tbWFuZCAodXNlZCB3aGVuIHBhY2thZ2luZworbW9kdWxlcykuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9wcmVmaXhfY2hhbmdlcy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtICB8IDEyICsrKysrKy0tLS0tLQorIGNwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIHwgIDMgKy0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQgICAgICAgICAgICAgICAgfCAgNCArLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50ICAgICAgICAgfCAxMCArKysrKy0tLS0tCisgNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9BbnkucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fQW55LnBtCitpbmRleCA0YzAwMTI5Li4xZWEyMDM1IDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX0FueS5wbQorQEAgLTkwMiw4ICs5MDIsNiBAQCBhbGwgUE9EIGZpbGVzIGluIE1BTjFQT0RTIGFuZCBNQU4zUE9EUy4KKyBzdWIgbWFuaWZ5cG9kc190YXJnZXQgeworICAgICBteSgkc2VsZikgPSBzaGlmdDsKKyAKKy0gICAgbXkgJG1hbjFwb2RzICAgICAgPSAnJzsKKy0gICAgbXkgJG1hbjNwb2RzICAgICAgPSAnJzsKKyAgICAgbXkgJGRlcGVuZGVuY2llcyAgPSAnJzsKKyAKKyAgICAgIyBwb3B1bGF0ZSBtYW5YcG9kcyAmIGRlcGVuZGVuY2llczoKK0BAIC05MTksNyArOTE3LDcgQEAgRU5ECisgICAgIGZvcmVhY2ggbXkgJHNlY3Rpb24gKHF3KDEgMykpIHsKKyAgICAgICAgIG15ICRwb2RzID0gJHNlbGYtPnsiTUFOJHtzZWN0aW9ufVBPRFMifTsKKyAgICAgICAgIG15ICRwMm0gPSBzcHJpbnRmIDw8Q01ELCAkXSA+IDUuMDA4ID8gIiAtdSIgOiAiIjsKKy0JXCQoTk9FQ0hPKSBcJChQT0QyTUFOKSAtLXNlY3Rpb249JHNlY3Rpb24gLS1wZXJtX3J3PVwkKFBFUk1fUlcpJXMKKysJXCQoTk9FQ0hPKSBcJChQT0QyTUFOKSAtLXNlY3Rpb249XCQoTUFOJHtzZWN0aW9ufUVYVCkgLS1wZXJtX3J3PVwkKFBFUk1fUlcpJXMKKyBDTUQKKyAgICAgICAgIHB1c2ggQG1hbl9jbWRzLCAkc2VsZi0+c3BsaXRfY29tbWFuZCgkcDJtLCBtYXAgeygkXywkcG9kcy0+eyRffSl9IHNvcnQga2V5cyAlJHBvZHMpOworICAgICB9CitAQCAtMTg3NSw5ICsxODczLDExIEBAIHN1YiBpbml0X0lOU1RBTExfZnJvbV9QUkVGSVggeworICAgICAgICAgJHNlbGYtPntTSVRFUFJFRklYfSAgIHx8PSAkc3ByZWZpeDsKKyAgICAgICAgICRzZWxmLT57VkVORE9SUFJFRklYfSB8fD0gJHZwcmVmaXg7CisgCistICAgICAgICAjIExvdHMgb2YgTU0gZXh0ZW5zaW9uIGF1dGhvcnMgbGlrZSB0byB1c2UgJChQUkVGSVgpIHNvIHdlCistICAgICAgICAjIHB1dCBzb21ldGhpbmcgc2Vuc2libGUgaW4gdGhlcmUgbm8gbWF0dGVyIHdoYXQuCistICAgICAgICAkc2VsZi0+e1BSRUZJWH0gPSAnJCgnLnVjICRzZWxmLT57SU5TVEFMTERJUlN9LidQUkVGSVgpJzsKKysJbXkgJHAgPSAkc2VsZi0+e1BSRUZJWH0gPSAkc2VsZi0+e1BFUkxQUkVGSVh9OworKwlmb3IgbXkgJHQgKHF3L1BFUkwgU0lURSBWRU5ET1IvKQorKwl7CisrCSAgICAkc2VsZi0+eyIke3R9UFJFRklYIn0gPX4gcyFeXFEkcFxFKD89L3wkKSFcJChQUkVGSVgpITsKKysJfQorICAgICB9CisgCisgICAgIG15ICRhcmNoICAgID0gJENvbmZpZ3thcmNobmFtZX07CitkaWZmIC0tZ2l0IGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQoraW5kZXggMzkxZGMyMi4uNGE4ZTE0YyAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCisrKysgYi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorQEAgLTMwNzcsOCArMzA3Nyw3IEBAIHN1YiBwcmVmaXhpZnkgeworICAgICB3YXJuICIgIHByZWZpeGlmeSAkdmFyID0+ICRwYXRoXG4iIGlmICRWZXJib3NlID49IDI7CisgICAgIHdhcm4gIiAgICBmcm9tICRzcHJlZml4IHRvICRycHJlZml4XG4iIGlmICRWZXJib3NlID49IDI7CisgCistICAgIGlmKCAkc2VsZi0+e0FSR1N9e1BSRUZJWH0gJiYKKy0gICAgICAgICRwYXRoICF+IHN7XlxRJHNwcmVmaXhcRVxifXskcnByZWZpeH1zICkKKysgICAgaWYoICRwYXRoICF+IHN7XlxRJHNwcmVmaXhcRVxifXskcnByZWZpeH1zICYmICRzZWxmLT57QVJHU317UFJFRklYfSApCisgICAgIHsKKyAKKyAgICAgICAgIHdhcm4gIiAgICBjYW5ub3QgcHJlZml4LCB1c2luZyBkZWZhdWx0LlxuIiBpZiAkVmVyYm9zZSA+PSAyOworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVC50IGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQKK2luZGV4IDkxMDU4YmIuLmUzOTljZWQgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci90L0lOU1QudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNULnQKK0BAIC02NSw5ICs2NSw3IEBAIGlzYV9vayggJG1tLCAnRXh0VXRpbHM6Ok1ha2VNYWtlcicgKTsKKyBpcyggJG1tLT57TkFNRX0sICdCaWc6OkR1bW15JywgICdOQU1FJyApOworIGlzKCAkbW0tPntWRVJTSU9OfSwgMC4wMSwgICAgICAgICAgICAnVkVSU0lPTicgKTsKKyAKKy1teSAkY29uZmlnX3ByZWZpeCA9ICRDb25maWd7aW5zdGFsbHByZWZpeGV4cH0gfHwgJENvbmZpZ3tpbnN0YWxscHJlZml4fSB8fAorLSAgICAgICAgICAgICAgICAgICAgJENvbmZpZ3twcmVmaXhleHB9ICAgICAgICB8fCAkQ29uZmlne3ByZWZpeH07CistaXMoICRtbS0+e1BFUkxQUkVGSVh9LCAkY29uZmlnX3ByZWZpeCwgICAnUEVSTFBSRUZJWCcgKTsKKytpcyggJG1tLT57UEVSTFBSRUZJWH0sICckKFBSRUZJWCknLCAgICdQRVJMUFJFRklYJyApOworIAorIGlzKCAhISRtbS0+e1BFUkxfQ09SRX0sICEhJEVOVntQRVJMX0NPUkV9LCAnUEVSTF9DT1JFJyApOworIAorZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudCBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudAoraW5kZXggZThkZTdjNi4uM2ZiM2YxMiAxMDA2NDQKKy0tLSBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL3QvSU5TVF9QUkVGSVgudAorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvdC9JTlNUX1BSRUZJWC50CitAQCAtMTAsNyArMTAsNyBAQCBCRUdJTiB7CisgfQorIAorIHVzZSBzdHJpY3Q7CistdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNTI7CisrdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4gNDc7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6VXRpbHM7CisgdXNlIE1ha2VNYWtlcjo6VGVzdDo6U2V0dXA6OkJGRDsKKyB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKK0BAIC02MiwxNiArNjIsMTYgQEAgbGlrZSggJHN0ZG91dC0+cmVhZCwgcXJ7CisgICAgICAgICAgICAgICAgICAgICAgICAgKD86V3JpdGluZ1wgTVlNRVRBLnltbFwgYW5kXCBNWU1FVEEuanNvblxuKT8KKyB9eCApOworIAorLWlzKCAkbW0tPntQUkVGSVh9LCAnJChTSVRFUFJFRklYKScsICdQUkVGSVggc2V0IGJhc2VkIG9uIElOU1RBTExESVJTJyApOworKyNpcyggJG1tLT57UFJFRklYfSwgJyQoU0lURVBSRUZJWCknLCAnUFJFRklYIHNldCBiYXNlZCBvbiBJTlNUQUxMRElSUycgKTsKKyAKKyBpc2Ffb2soICRtbSwgJ0V4dFV0aWxzOjpNYWtlTWFrZXInICk7CisgCisgaXMoICRtbS0+e05BTUV9LCAnQmlnOjpEdW1teScsICAnTkFNRScgKTsKKyBpcyggJG1tLT57VkVSU0lPTn0sIDAuMDEsICAgICAgICAgICAgJ1ZFUlNJT04nICk7CisgCistZm9yZWFjaCBteSAkcHJlZml4IChxdyhQUkVGSVggUEVSTFBSRUZJWCBTSVRFUFJFRklYIFZFTkRPUlBSRUZJWCkpIHsKKy0gICAgdW5saWtlKCAkbW0tPnskcHJlZml4fSwgcXIvXCRcKFBSRUZJWFwpLyApOworLX0KKysjZm9yZWFjaCBteSAkcHJlZml4IChxdyhQUkVGSVggUEVSTFBSRUZJWCBTSVRFUFJFRklYIFZFTkRPUlBSRUZJWCkpIHsKKysjICAgIHVubGlrZSggJG1tLT57JHByZWZpeH0sIHFyL1wkXChQUkVGSVhcKS8gKTsKKysjfQorIAorIAorIG15ICRQUkVGSVggPSBGaWxlOjpTcGVjLT5jYXRkaXIoJ2ZvbycsICdiYXInKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BydW5lX2xpYnMuZGlmZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3BydW5lX2xpYnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDQ0M2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vcHJ1bmVfbGlicy5kaWZmCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMjFiYzAzMzc1NWYwYjYwOWY5YmIyYWE5ZTk4YjEwZDU4NDI0NDA2ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyZW5kYW4gTydEZWEgPGJvZEBkZWJpYW4ub3JnPgorRGF0ZTogRnJpLCAxOCBNYXIgMjAwNSAyMjoyMjoyNSArMTEwMAorU3ViamVjdDogUHJ1bmUgdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHdhbnRlZCB0byB3aGF0IHdlIGFjdHVhbGx5IG5lZWQuCisKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvMTI4MzU1CisKK1dlIHdhbnQgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIG9uIHBlcmwtYmFzZSBhcyBzbWFsbCBhcyBwb3NzaWJsZSwKK2FuZCBzb21lIG9mIHRoZSBvcmlnaW5hbCBsaXN0IG1heSBiZSBwcmVzZW50IG9uIGJ1aWxkZHMgKHNlZSBCdWcjMTI4MzU1KS4KKworUGF0Y2gtTmFtZTogZGViaWFuL3BydW5lX2xpYnMuZGlmZgorLS0tCisgQ29uZmlndXJlIHwgNSArKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Db25maWd1cmUgYi9Db25maWd1cmUKK2luZGV4IDBhNDA1ZDMuLjZmY2MzYmMgMTAwNzU1CistLS0gYS9Db25maWd1cmUKKysrKyBiL0NvbmZpZ3VyZQorQEAgLTE0NTQsOCArMTQ1NCw3IEBAIGxpYnN3YW50ZWRfdXNlbGFyZ2VmaWxlcz0nJworIDogc2V0IHVzZXNvY2tzIG9uIHRoZSBDb25maWd1cmUgY29tbWFuZCBsaW5lIHRvIGVuYWJsZSBzb2Nrcy4KKyA6IExpc3Qgb2YgbGlicmFyaWVzIHdlIHdhbnQuCisgOiBJZiBhbnlvbmUgbmVlZHMgZXh0cmEgLWx4eHgsIHB1dCB0aG9zZSBpbiBhIGhpbnQgZmlsZS4KKy1saWJzd2FudGVkPSJjbCBwdGhyZWFkIHNvY2tldCBiaW5kIGluZXQgbnNsIG5tIG5kYm0gZ2RibSBkYm0gZGIgbWFsbG9jIGRsIGxkIgorLWxpYnN3YW50ZWQ9IiRsaWJzd2FudGVkIHN1biBtIGNyeXB0IHNlYyB1dGlsIGMgY3Bvc2l4IHBvc2l4IHVjYiBic2QgQlNEIgorK2xpYnN3YW50ZWQ9J2dkYm0gZ2RibV9jb21wYXQgZGIgZGwgbSBjIGNyeXB0JworIDogV2UgcHJvYmFibHkgd2FudCB0byBzZWFyY2ggL3Vzci9zaGxpYiBiZWZvcmUgbW9zdCBvdGhlciBsaWJyYXJpZXMuCisgOiBUaGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgbGliL0V4dFV0aWxzL01ha2VNYWtlci5wbSByb3V0aW5lIGV4dGxpYmxpc3QuCisgZ2xpYnB0aD1gZWNobyAiICRnbGlicHRoICIgfCBzZWQgLWUgJ3MhIC91c3Ivc2hsaWIgISAhJ2AKK0BAIC0yMzU5Myw3ICsyMzU5Miw3IEBAIHN1bm9zKlg0KikKKyAgICAgOzsKKyAqKSBjYXNlICIkdXNlZGwiIGluCisgICAgICRkZWZpbmV8dHJ1ZXxbeVldKikKKy0JICAgIHNldCBYIGBlY2hvICIgJGxpYnMgIiB8IHNlZCAtZSAnc0AgLWxuZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibSBAIEAnIC1lICdzQCAtbGdkYm1fY29tcGF0IEAgQCcgLWUgJ3NAIC1sZGJtIEAgQCcgLWUgJ3NAIC1sZGIgQCBAJ2AKKysJICAgIHNldCBYIGBlY2hvICIgJGxpYnMgIiB8IHNlZCAtZSAnc0AgLWxnZGJtIEAgQCcgLWUgJ3NAIC1sZ2RibV9jb21wYXQgQCBAJyAtZSAnc0AgLWxkYiBAIEAnYAorIAkgICAgc2hpZnQKKyAJICAgIHBlcmxsaWJzPSIkKiIKKyAJICAgIDs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9yZWdlbi1za2lwLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEzZmM5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3JlZ2VuLXNraXAuZGlmZgpAQCAtMCwwICsxLDI3IEBACitGcm9tIGNiM2U5OGUxN2E2NjY4OTYxNTBiMTA5Njk0ZTllYjkyNzg2MjA4NDUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE3IE1heSAyMDE0IDE0OjU3OjAxICswMzAwCitTdWJqZWN0OiBTa2lwIGEgcmVnZW5lcmF0aW9uIGNoZWNrIGluIHVucmVsYXRlZCBnaXQgcmVwb3NpdG9yaWVzCisKK0lmIHRoZSB0ZXN0IGlzIHJ1biBpbiBhIGdpdCByZXBvc2l0b3J5IHdpdGhvdXQgbGliLy5naXRpZ25vcmUsCitmb3IgaW5zdGFuY2UgYmVjYXVzZSB0aGUgcmVwb3NpdG9yeSBvbmx5IGltcG9ydGVkIHRoZSBQZXJsIHRhcmJhbGwsCit0aGUgcmVnZW5lcmF0aW9uIGNoZWNrIGlzIGJyb2tlbiBiZWNhdXNlIGxpYi8uZ2l0aWdub3JlIGlzIG1pc3NpbmcuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9yZWdlbi1za2lwLmRpZmYKKy0tLQorIHJlZ2VuL2xpYl9jbGVhbnVwLnBsIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcmVnZW4vbGliX2NsZWFudXAucGwgYi9yZWdlbi9saWJfY2xlYW51cC5wbAoraW5kZXggYzlkNmU0My4uZmVjZTFlZCAxMDA2NDQKKy0tLSBhL3JlZ2VuL2xpYl9jbGVhbnVwLnBsCisrKysgYi9yZWdlbi9saWJfY2xlYW51cC5wbAorQEAgLTE1OSw3ICsxNTksNyBAQCBmb3JlYWNoICgnd2luMzIvTWFrZWZpbGUnLCAnd2luMzIvbWFrZWZpbGUubWsnKSB7CisgfQorIAorICMgVGhpcyBtdXN0IGNvbWUgbGFzdCBhcyBpdCBjYW4gZXhpdCBlYXJseToKKy1pZiAoJFRBUCAmJiAhLWQgJy5naXQnICYmICEtZiAnbGliLy5naXRpZ25vcmUnKSB7CisraWYgKCRUQVAgJiYgIS1kICcuZ2l0JyB8fCAhLWYgJ2xpYi8uZ2l0aWdub3JlJykgeworICAgICBwcmludCAib2sgIyBza2lwIG5vdCBiZWluZyBydW4gZnJvbSBhIGdpdCBjaGVja291dCwgaGVuY2Ugbm8gbGliLy5naXRpZ25vcmVcbiI7CisgICAgIGV4aXQgMDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLWtmcmVlYnNkLWNyYXNoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNmYzBiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZGViaWFuL3NraXAta2ZyZWVic2QtY3Jhc2guZGlmZgpAQCAtMCwwICsxLDQwIEBACitGcm9tIDQyODUzYWY2NWEyODA2NmIxMTlkMjNkOTZlOTY0ZTk0YjU1YTg1NDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDUgQXVnIDIwMTEgMTA6NTA6MTggKzAzMDAKK1N1YmplY3Q6IFNraXAgYSBjcmFzaGluZyB0ZXN0IGNhc2UgaW4gdC9vcC90aHJlYWRzLnQgb24gR05VL2tGcmVlQlNECisKK0J1ZzogaHR0cDovL3J0LnBlcmwub3JnL3J0My9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTk2MjcyCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzYyODQ5MworCitUaGUgY3Jhc2ggaXMgbm90IGEgcmVncmVzc2lvbiBpbiA1LjE0LCBpdCBqdXN0IGdldHMgdHJpZ2dlcmVkIHRoZXJlIGJ5CithIG5ldyB1bnJlbGF0ZWQgdGVzdCBjYXNlLgorCitTa2lwIHRoZSB0ZXN0IHVudGlsIHRoZSBjdWxwcml0IGlzIGZvdW5kLgorCitQYXRjaC1OYW1lOiBkZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmCistLS0KKyB0L29wL3RocmVhZHMudCB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3Qvb3AvdGhyZWFkcy50IGIvdC9vcC90aHJlYWRzLnQKK2luZGV4IGU3NmM5NTYuLmJlYzIxMGIgMTAwNjQ0CistLS0gYS90L29wL3RocmVhZHMudAorKysrIGIvdC9vcC90aHJlYWRzLnQKK0BAIC0zNzYsNiArMzc2LDkgQEAgRU9GCisgfQorIAorIAorK1NLSVA6IHsKKysgICAgc2tpcCAiW3BlcmwgIzk2MjcyXSBhdm9pZCBjcmFzaCBvbiBHTlUva0ZyZWVCU0QiLCAxCisrICAgICAgICBpZiAkXk8gZXEgJ2dudWtmcmVlYnNkJzsKKyAjIFtwZXJsICM3ODQ5NF0gUGlwZXMgc2hhcmVkIGJldHdlZW4gdGhyZWFkcyBibG9jayB3aGVuIGNsb3NlZAorIHsKKyAgIG15ICRwZXJsID0gd2hpY2hfcGVybDsKK0BAIC0zODQsNiArMzg3LDcgQEAgRU9GCisgICB0aHJlYWRzLT5jcmVhdGUoc3ViIHsgfSktPmpvaW47CisgICBvaygxLCAiUGlwZXMgc2hhcmVkIGJldHdlZW4gdGhyZWFkcyBkbyBub3QgYmxvY2sgd2hlbiBjbG9zZWQiKTsKKyB9CisrfQorIAorICMgW3BlcmwgIzEwNTIwOF0gVHlwZWdsb2IgY2xvbmVzIHNob3VsZCBub3QgYmUgY2xvbmVkIGFnYWluIGR1cmluZyBhIGpvaW4KKyB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Yzg3MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc2tpcC11cHN0cmVhbS1naXQtdGVzdHMuZGlmZgpAQCAtMCwwICsxLDI4IEBACitGcm9tIGFlOWI2NDVkNmRhMjk5MGZkMDU1MzY4ZWNhMmM2N2M0NDk0NzRlMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBGcmksIDIyIEFwciAyMDExIDExOjE1OjMyICswMzAwCitTdWJqZWN0OiBTa2lwIHRlc3RzIHNwZWNpZmljIHRvIHRoZSB1cHN0cmVhbSBHaXQgcmVwb3NpdG9yeQorCitUaGVzZSB0ZXN0cyBmYWlsIGlmIHJ1biBmcm9tIGEgZGlmZmVyZW50IGdpdCByZXBvc2l0b3J5IHRoYW4KK3Vwc3RyZWFtLiBUaGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBuZWVkbGVzc2x5IGZvciBkb3duc3RyZWFtIHBhY2thZ2Vycy4KKworU2tpcCB0aGUgdGVzdHMgYWx0b2dldGhlciBldmVuIGlmIHRoZSAuZ2l0IGRpcmVjdG9yeSBleGlzdHMuCisKK1BhdGNoLU5hbWU6IGRlYmlhbi9za2lwLXVwc3RyZWFtLWdpdC10ZXN0cy5kaWZmCistLS0KKyB0L3Rlc3QucGwgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90L3Rlc3QucGwgYi90L3Rlc3QucGwKK2luZGV4IGNkYTM4NDAuLmFmNTc5YTIgMTAwNjQ0CistLS0gYS90L3Rlc3QucGwKKysrKyBiL3QvdGVzdC5wbAorQEAgLTE3NCw3ICsxNzQsNyBAQCBzdWIgc2tpcF9hbGxfd2l0aG91dF91bmljb2RlX3RhYmxlcyB7ICMgKGJ1dCBvbmx5IHVuZGVyIG1pbmlwZXJsKQorIAorIHN1YiBmaW5kX2dpdF9vcl9za2lwIHsKKyAgICAgbXkgKCRzb3VyY2VfZGlyLCAkcmVhc29uKTsKKy0gICAgaWYgKC1kICcuZ2l0JykgeworKyAgICBpZiAoLWQgJy5naXQnICYmICEgLWQgJ2RlYmlhbicpIHsKKyAJJHNvdXJjZV9kaXIgPSAnLic7CisgICAgIH0gZWxzaWYgKC1sICdNQU5JRkVTVCcgJiYgLWwgJ0FVVEhPUlMnKSB7CisgCW15ICR3aGVyZSA9IHJlYWRsaW5rICdNQU5JRkVTVCc7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjMxNDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vc3F1ZWxjaC1sb2NhbGUtd2FybmluZ3MuZGlmZgpAQCAtMCwwICsxLDU2IEBACitGcm9tIDQ4N2E2ZDZhZGEwYjA4ZTZhNzI3NjUyMGViYzYxY2Q4NTEwMDVlN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOaWtvIFR5bmkgPG50eW5pQGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDMgT2N0IDIwMTAgMjE6MzY6MTcgKzAzMDAKK1N1YmplY3Q6IFNxdWVsY2ggbG9jYWxlIHdhcm5pbmdzIGluIERlYmlhbiBwYWNrYWdlIG1haW50YWluZXIgc2NyaXB0cworCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2NAorCitUaGUgc3lzdGVtIGxvY2FsZXMgYXJlIHJhdGhlciBmcmVxdWVudGx5IG91dCBvZiBzeW5jIHdpdGggdGhlIEMgbGlicmFyeQorZHVyaW5nIHBhY2thZ2UgdXBncmFkZXMsIGNhdXNpbmcgYSBodWdlIGFtb3VudCBvZiB1c2VsZXNzIFBlcmwgbG9jYWxlCit3YXJuaW5ncy4gU3F1ZWxjaCB0aGVtIHdoZW4gcnVubmluZyBwYWNrYWdlIG1haW50YWluZXIgc2NyaXB0cywgZGV0ZWN0ZWQKK2J5IHRoZSBEUEtHX1JVTk5JTkdfVkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworQW55IHJlYWwgbG9jYWxlIHByb2JsZW0gd2lsbCBzaG93IHVwIGFmdGVyIHRoZSBzeXN0ZW0gdXBncmFkZSB0b28sIGFuZAordGhlIHdhcm5pbmcgd2lsbCBiZSB0cmlnZ2VyZWQgbm9ybWFsbHkgYWdhaW4gYXQgdGhhdCBwb2ludC4KKworUGF0Y2gtTmFtZTogZGViaWFuL3NxdWVsY2gtbG9jYWxlLXdhcm5pbmdzLmRpZmYKKy0tLQorIGxvY2FsZS5jICAgICAgICAgICB8IDUgKysrKy0KKyBwb2QvcGVybGxvY2FsZS5wb2QgfCA4ICsrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9sb2NhbGUuYyBiL2xvY2FsZS5jCitpbmRleCA3YTRhNDE4Li5mZGY5MTFkIDEwMDY0NAorLS0tIGEvbG9jYWxlLmMKKysrKyBiL2xvY2FsZS5jCitAQCAtNjc0LDcgKzY3NCwxMCBAQCBQZXJsX2luaXRfaTE4bmwxMG4ocFRIWF8gaW50IHByaW50d2FybikKKyAKKyAgICAgY29uc3QgYm9vbCBsb2N3YXJuID0gKHByaW50d2FybiA+IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwcmludHdhcm4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoISBiYWRfbGFuZ191c2Vfb25jZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRGViaWFuIHNwZWNpZmljIGNoYW5nZSAtIHNlZSBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzUwODc2NCAqLworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghUGVybEVudl9nZXRlbnYoIkRQS0dfUlVOTklOR19WRVJTSU9OIikpICYmCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCEgYmFkX2xhbmdfdXNlX29uY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpc2FsbG93IHdpdGggIiIgb3IgIjAiICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmJhZF9sYW5nX3VzZV9vbmNlCitkaWZmIC0tZ2l0IGEvcG9kL3Blcmxsb2NhbGUucG9kIGIvcG9kL3Blcmxsb2NhbGUucG9kCitpbmRleCA3MDFiNDIyLi41OGNhYmFmIDEwMDY0NAorLS0tIGEvcG9kL3Blcmxsb2NhbGUucG9kCisrKysgYi9wb2QvcGVybGxvY2FsZS5wb2QKK0BAIC0xMjE3LDYgKzEyMTcsMTQgQEAgQjxOT1RFPjogQzxQRVJMX0JBRExBTkc+IG9ubHkgZ2l2ZXMgeW91IGEgd2F5IHRvIGhpZGUgdGhlIHdhcm5pbmcgbWVzc2FnZS4KKyBUaGUgbWVzc2FnZSB0ZWxscyBhYm91dCBzb21lIHByb2JsZW0gaW4geW91ciBzeXN0ZW0ncyBsb2NhbGUgc3VwcG9ydCwKKyBhbmQgeW91IHNob3VsZCBpbnZlc3RpZ2F0ZSB3aGF0IHRoZSBwcm9ibGVtIGlzLgorIAorKz1pdGVtIERQS0dfUlVOTklOR19WRVJTSU9OCisrCisrT24gRGViaWFuIHN5c3RlbXMsIGlmIHRoZSBEUEtHX1JVTk5JTkdfVkVSU0lPTiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcworK3NldCAodG8gYW55IHZhbHVlKSwgdGhlIGxvY2FsZSBmYWlsdXJlIHdhcm5pbmdzIHdpbGwgYmUgc3VwcHJlc3NlZCBqdXN0CisrbGlrZSB3aXRoIGEgemVybyBQRVJMX0JBRExBTkcgc2V0dGluZy4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIGZsb29kcworK29mIHNwdXJpb3VzIHdhcm5pbmdzIGR1cmluZyBzeXN0ZW0gdXBncmFkZXMuCisrU2VlIEw8aHR0cDovL2J1Z3MuZGViaWFuLm9yZy81MDg3NjQ+LgorKworID1iYWNrCisgCisgVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzcGVjaWZpYyB0byBQZXJsOiBUaGV5IGFyZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FkYzJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9kZWJpYW4vd3JpdGFibGVfc2l0ZV9kaXJzLmRpZmYKQEAgLTAsMCArMSwzNiBAQAorRnJvbSA1OTFjMWY5YjdkNDc1NWJmYzU5ZDk2NjViYWIxZjJjYTQxMGRlNzY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQnJlbmRhbiBPJ0RlYSA8Ym9kQGRlYmlhbi5vcmc+CitEYXRlOiBUdWUsIDggTWFyIDIwMDUgMTk6MzA6MzggKzExMDAKK1N1YmplY3Q6IFNldCB1bWFzayBhcHByb3Byb2F0ZWx5IGZvciBzaXRlIGluc3RhbGwgZGlyZWN0b3JpZXMKKworUG9saWN5IHJlcXVpcmVzIGdyb3VwIHdyaXRhYmxlIHNpdGUgZGlyZWN0b3JpZXMKKworUGF0Y2gtTmFtZTogZGViaWFuL3dyaXRhYmxlX3NpdGVfZGlycy5kaWZmCistLS0KKyBjcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSB8IDYgKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK2luZGV4IDE5N2YxMDIuLjVmMWI4N2YgMTAwNjQ0CistLS0gYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbQorKysrIGIvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KK0BAIC0yMTM4LDcgKzIxMzgsNyBAQCBxewkJIiQoSU5TVF9MSUIpIiAiJChERVNUSU5TVEFMTFBSSVZMSUIpIiBcCisgCisgCisgcHVyZV9zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSB1bWFzayAwMjI7ICQoTU9EX0lOU1RBTEwpIFwKKysJJChOT0VDSE8pIHVtYXNrIDAyOyAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKyAgICAgcHVzaCBAbSwKKyBxewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChTSVRFQVJDSEVYUCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCitAQCAtMjE5OSw4ICsyMTk5LDggQEAgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKyAKKyBkb2Nfc2l0ZV9pbnN0YWxsIDo6IGFsbAorIAkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pIHVtYXNrIDAyMjsgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCistCS0kKE5PRUNITykgdW1hc2sgMDIyOyAkKERPQ19JTlNUQUxMKSBcCisrCS0kKE5PRUNITykgdW1hc2sgMDI7ICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorKwktJChOT0VDSE8pIHVtYXNrIDAyOyAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExTSVRFTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZHluYWxvYWRlcmhhY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2R5bmFsb2FkZXJoYWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZjU5MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2R5bmFsb2FkZXJoYWNrLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK0hhY2sgdGhlIGR5bmFtaWMgbW9kdWxlIGxvYWRlciBzbyB0aGF0IHdlIHVzZSBuYXRpdmUgbW9kdWxlcyBzaW5jZSB3ZSBjYW4ndCBsb2FkCit0aGUgdGFyZ2V0IG9uZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitSUAorMjAxMy8wMS8xMworCitJbmRleDogcGVybC01LjE0LjIvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xNC4yLm9yaWcvZXh0L0R5bmFMb2FkZXIvRHluYUxvYWRlcl9wbS5QTAkyMDExLTA5LTE5IDEzOjE4OjIyLjAwMDAwMDAwMCArMDAwMAorKysrIHBlcmwtNS4xNC4yL2V4dC9EeW5hTG9hZGVyL0R5bmFMb2FkZXJfcG0uUEwJMjAxMy0wMS0xOSAxNjowOTo1MS4wMjA1ODQ5NDUgKzAwMDAKK0BAIC0zMTAsNiArMzEwLDEwIEBACisgICAgIGZvcmVhY2ggKEBJTkMpIHsKKyAJPDwkXk8tZXEtVk1TPj5jaG9wKCRfID0gVk1TOjpGaWxlc3BlYzo6dW5peHBhdGgoJF8pKTs8PC8kXk8tZXEtVk1TPj4KKyAJICAgIG15ICRkaXIgPSAiJF8vYXV0by8kbW9kcG5hbWUiOworKworKwlpZiAoZGVmaW5lZCAkRU5We1BFUkxfTElCfSBhbmQgZGVmaW5lZCAkRU5We1BFUkxIT1NUTElCfSkgeworKwkgICAgJGRpciA9fiBzLyRFTlZ7UEVSTF9MSUJ9LyRFTlZ7UEVSTEhPU1RMSUJ9L2c7CisrCX0KKyAJCisgCW5leHQgdW5sZXNzIC1kICRkaXI7ICMgc2tpcCBvdmVyIHVuaW50ZXJlc3RpbmcgZGlyZWN0b3JpZXMKKyAJCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZXh0LU9EQk1fRmlsZS1oaW50cy1saW51eC5wbC1saW5rLWxpYmdkYm1fY29tcGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NGVmNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIGJhNGVkMGI1YjdiYWFkNTM1M2MxZTY1YjY1NWY0MWQ0NWUwMWM5OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjIgSnVuIDIwMTUgMjA6MDA6MTEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbDogbGluayBsaWJnZGJtX2NvbXBhdAorCitGaXhlZCBmb3IgdGVzdCBjYXNlIC4uL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQ6CitvayAxIC0gdXNlIE9EQk1fRmlsZTsKK29rIDIgLSB1c2UgRmNudGw7CisuL3Blcmw6IHN5bWJvbCBsb29rdXAgZXJyb3I6IC91c3IvbGliL3BlcmwvNS4yMi4wL2F1dG8vT0RCTV9GaWxlL09EQk1fRmlsZS5zbzogdW5kZWZpbmVkIHN5bWJvbDogZGJtaW5pdAorCitUaGUgY2hlY2tpbmcgImlmIC1lICRfLicvbGliZ2RibV9jb21wYXQuc28nIiBkb2Vzbid0IHdvcmsgd2hlbiBjcm9zcworYnVpbGQsIHNvIGFsd2F5cyBsaW5rIGxpYmdkYm1fY29tcGF0LCBzaW5jZSBwZXJsIGRlcGVuZHMgb24gZ2RibSBhbmQgd2UKK2Fsd2F5cyBoYXZlIGxpYmdkYm1fY29tcGF0LgorCitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbCB8ICAgIDYgLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHQvT0RCTV9GaWxlL2hpbnRzL2xpbnV4LnBsIGIvZXh0L09EQk1fRmlsZS9oaW50cy9saW51eC5wbAoraW5kZXggMjA0YmJhMC4uOTI3MWI0NSAxMDA2NDQKKy0tLSBhL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwKKysrKyBiL2V4dC9PREJNX0ZpbGUvaGludHMvbGludXgucGwKK0BAIC0xLDggKzEsMiBAQAorICMgdXNlcyBHREJNIGRibSBjb21wYXRpYmlsaXR5IGZlYXR1cmUgLSBhdCBsZWFzdCBvbiBTdVNFIDguMAorLSRzZWxmLT57TElCU30gPSBbJy1sZ2RibSddOworLQorLSMgRGViaWFuL1VidW50dSBoYXZlIGxpYmdkYm1fY29tcGF0LnNvIGJ1dCBub3QgdGhpcyBmaWxlLAorLSMgc28gbGlua2luZyBtYXkgZmFpbAorLWZvcmVhY2ggKHNwbGl0IC8gLywgJENvbmZpZ3tsaWJwdGh9KSB7CistICAgICRzZWxmLT57TElCU30tPlswXSAuPSAnIC1sZ2RibV9jb21wYXQnIGlmIC1lICRfLicvbGliZ2RibV9jb21wYXQuc28nOworLX0KKyskc2VsZi0+e0xJQlN9ID0gWyctbGdkYm0gLWxnZGJtX2NvbXBhdCddOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMDViODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2V4dC1PREJNX0ZpbGUtdC1vZGJtLnQtZml4LXRoZS1wYXRoLW9mLWRibXRfY29tbW9uLnAucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBiODQyZTFkZTc3OThhMWY3ZGY3NzBiYjNmMTg1YWQzMzU2ZTQ5MGU2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDIyIEp1biAyMDE1IDIwOjA2OjU2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGV4dC9PREJNX0ZpbGUvdC9vZGJtLnQ6IGZpeCB0aGUgIHBhdGggb2YgZGJtdF9jb21tb24ucGwKKworSXQgc2hvdWxkIGJlIGxpYi9kYm10X2NvbW1vbi5wbCB3aGVuIHJ1biBieSBydW4tcHRlc3QuCisKK0ZpeGVkOgorQ2FuJ3QgbG9jYXRlIC4uLy4uL3QvbGliL2RibXRfY29tbW9uLnBsIGluIEBJTkMKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBleHQvT0RCTV9GaWxlL3Qvb2RibS50IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvZXh0L09EQk1fRmlsZS90L29kYm0udCBiL2V4dC9PREJNX0ZpbGUvdC9vZGJtLnQKK2luZGV4IDA3OWI5ZjEuLjI1MGI5OTEgMTAwNjQ0CistLS0gYS9leHQvT0RCTV9GaWxlL3Qvb2RibS50CisrKysgYi9leHQvT0RCTV9GaWxlL3Qvb2RibS50CitAQCAtMiw3ICsyLDcgQEAKKyAKKyBvdXIgJERCTV9DbGFzcyA9ICdPREJNX0ZpbGUnOworIAorLXJlcXVpcmUgJy4uLy4uL3QvbGliL2RibXRfY29tbW9uLnBsJzsKKytyZXF1aXJlICdsaWIvZGJtdF9jb21tb24ucGwnOworIAorIGlmICgkXk8gZXEgJ2hwdXgnKSB7CisgICAgIHByaW50IDw8RU9NOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvZml4X2JhZF9ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWFjNDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9maXhfYmFkX3JwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDExLzA3LzAxCisKK0ZpeCB0aGVzZSBQYWNrYWdlIFFBIHdhcm5pbmdzIGJlZm9yZSB0aGV5IGFyZSBjb252ZXJ0ZWQgaW50byBmZXRhbCBlcnJvcnM6CisKK1dBUk5JTkc6IFFBIElzc3VlOiBwYWNrYWdlIHBlcmwtbW9kdWxlLWNvbXByZXNzIGNvbnRhaW5zIGJhZCBSUEFUSCAvYnVpbGRfZGlzay9wb2t5X2J1aWxkL2J1aWxkMC90bXAvc3lzcm9vdHMvcWVtdXg4Ni91c3IvbGliIGluIGZpbGUgL2J1aWxkX2Rpc2svcG9reV9idWlsZC9idWlsZDAvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3BlcmwtNS4xMi4zLXIxL3BhY2thZ2VzLXNwbGl0L3BlcmwtbW9kdWxlLWNvbXByZXNzL3Vzci9saWIvcGVybC81LjEyLjMvYXV0by9Db21wcmVzcy9SYXcvWmxpYi9abGliLnNvCisKK1RoaXMgZml4ZXMgdGhpcyB3YXJuaW5nIGZvciBwZXJsIHJlY2lwZSBhcyB3ZWxsIGFzIGxpYnhtbC1wYXJzZXItcGVybCByZWNpcGUuIAorSXQgaXMgYSBmaXggdG8gTWFrZU1ha2VyIHdpdGhpbiBwZXJsLCBzbyBhbGwgc3VjaCBwZXJsIHJlY2lwZXMgd2lsbCBnZXQgCitmaXhlZCB3aXRoIHRoaXMgcGVybCBmaXguCisKK0luZGV4OiBwZXJsLTUuMTQuMi9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTGlibGlzdC9LaWQucG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorKysrIHBlcmwtNS4xNC4yL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9MaWJsaXN0L0tpZC5wbQorQEAgLTU1LDYgKzU1LDcgQEAgc3ViIF91bml4X29zMl9leHQgeworICAgICBteSgkZm91bmQpID0gMDsKKyAKKyAgICAgIyBEZWJpYW4tc3BlY2lmaWM6IGRvbid0IHVzZSBMRF9SVU5fUEFUSCBmb3Igc3RhbmRhcmQgZGlycworKyAgICBwdXNoKEBsaWJwYXRoLCAiU1lTUk9PVExJQiIpOworICAgICAkbGRfcnVuX3BhdGhfc2VlbnskX30rKyBmb3IgQGxpYnBhdGg7CisgCisgICAgIGZvcmVhY2ggbXkgJHRoaXNsaWIgKHNwbGl0ICcgJywgJHBvdGVudGlhbF9saWJzKSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2dlbmVyYXRlLXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9nZW5lcmF0ZS1zaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2Y2ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9nZW5lcmF0ZS1zaC5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1VzZSB0aGUgbGQgZmxhZ3MgZnJvbSB0aGUgc3VwcGxpZWQgY29uZmlndXJhdGlvbiBmaWxlLiBGb3Igc2ggd2UgbmVlZCB0aGUKK2ZsYWdzIHRoYXQgc3BlY2lmeSB0byBidWlsZCBQSUMgY29kZSBzbyB0aGF0IHRoZSBzaGFyZWQgbGlicmFyaWVzIHdvcmsuCisKK0luZGV4OiBwZXJsLTUuMTQuMi9Dcm9zcy9nZW5lcmF0ZV9jb25maWdfc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTQuMi5vcmlnL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAkyMDEwLTEyLTMwIDA0OjA3OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIHBlcmwtNS4xNC4yL0Nyb3NzL2dlbmVyYXRlX2NvbmZpZ19zaAkyMDEyLTExLTIyIDE1OjU4OjQ5Ljg1Mjg1MjgwNSArMDIwMAorQEAgLTE5LDEwICsxOSwxMCBAQAorICRjYWxsYmFja3MtPnsnYXInfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkFSIiwgImFybS1saW51eC1hciJdXTsKKyAkY2FsbGJhY2tzLT57J2FyY2huYW1lJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJTWVMiLCAiYXJtdjRsLWxpbnV4Il1dOworICRjYWxsYmFja3MtPnsnY2MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkNDIiwgImFybS1saW51eC1nY2MiXV07CistJGNhbGxiYWNrcy0+eydjY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworLSRjYWxsYmFja3MtPnsnY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworLSRjYWxsYmFja3MtPnsnY2NmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIi1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKy0kY2FsbGJhY2tzLT57J2NjZmxhZ3NfdXNlbGFyZ2VmaWxlcyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIi1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKysjJGNhbGxiYWNrcy0+eydjY2NkbGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDRkxBR1MiLCAiIl1dOworKyMkY2FsbGJhY2tzLT57J2NjZGxmbGFncyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiQ0ZMQUdTIiwgIiJdXTsKKyskY2FsbGJhY2tzLT57J2NjZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzX2luc2VydCwgWyJDRkxBR1MiLCAiLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfR05VX1NPVVJDRSAtRFRIUkVBRFNfSEFWRV9QSURTIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCJdXTsKKyskY2FsbGJhY2tzLT57J2NjZmxhZ3NfdXNlbGFyZ2VmaWxlcyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0LCBbIkNGTEFHUyIsICItRF9HTlVfU09VUkNFIC1EVEhSRUFEU19IQVZFX1BJRFMgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Il1dOworICRjYWxsYmFja3MtPnsnY2NuYW1lJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQyIsICJhcm0tbGludXgtZ2NjIl1dOworICRjYWxsYmFja3MtPnsnY3BwJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQ1AiLCAiYXJtLWxpbnV4LWNwcCJdXTsKKyAkY2FsbGJhY2tzLT57J2NwcGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJDQ1BGTEFHUyIsICItZm5vLXN0cmljdC1hbGlhc2luZyJdXTsKK0BAIC0zMCw2ICszMCw3IEBACisgJGNhbGxiYWNrcy0+eydjcHBzdGRpbid9ID0gW1wmc2ltcGxlX3Byb2Nlc3NfYXBwZW5kLCBbIkNDIiwgImFybS1saW51eC1nY2MgLUUiLCAiLUUiXV07CisgJGNhbGxiYWNrcy0+eydmdWxsX2FyJ30gPSBbXCZiYWNrdGljaywgWyJBUiIsICJ3aGljaCAkRU5We0FSfSIsICIvdXNyL2xvY2FsL2FybS8yLjk1LjMvYmluL2FybS1saW51eC1hciJdXTsKKyAkY2FsbGJhY2tzLT57J2xkJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMRCIsICJhcm0tbGludXgtbGQiXV07CisrJGNhbGxiYWNrcy0+eydsZGRsZmxhZ3MnfSA9IFtcJnNpbXBsZV9wcm9jZXNzLCBbIkxERExGTEFHUyIsICIiXV07CisgJGNhbGxiYWNrcy0+eydsZGZsYWdzJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJMREZMQUdTIiwgIiJdXTsKKyAkY2FsbGJhY2tzLT57J2xkZmxhZ3NfdXNlbGFyZ2VmaWxlcyd9ID0gW1wmc2ltcGxlX3Byb2Nlc3MsIFsiTERGTEFHUyIsICIiXV07CisgJGNhbGxiYWNrcy0+eydteWFyY2huYW1lJ30gPSBbXCZzaW1wbGVfcHJvY2VzcywgWyJTWVMiLCAiYXJtdjRsLWxpbnV4Il1dOworQEAgLTEwNSw2ICsxMDYsMjMgQEAKKyAKKyB9CisgCisrIyBJbnNlcnQgZW52IHZhciBpbnRvIHRoZSB2YXJpYWJsZXMgdmFsdWUKKytzdWIgc2ltcGxlX3Byb2Nlc3NfaW5zZXJ0IHsKKysJbXkgJGtleSA9IHNoaWZ0OworKwlteSAkdmFsdWUgPSBzaGlmdDsKKysJbXkgJGVudnZhciA9ICRjYWxsYmFja3MtPnska2V5fS0+WzFdWzBdOworKworKwlpZiAoJEVOVnskZW52dmFyfSkgeworKwkJIyBTdHJpcCBxdW90ZXMgZnJvbSB2YWx1ZQorKwkJJHZhbHVlID1+IHMvXlwnLy87CisrCQkkdmFsdWUgPX4gcy9cJyQvLzsKKysJCSMgUmVtb3ZlIC1JL3Vzci9sb2NhbC8uLi4gZnJvbSB0aGUgdmFsdWUKKysJCSR2YWx1ZSA9fiBzI1xXLUkvdXNyL2xvY2FsL1x3K1xXIyAjZzsKKysJCSMgUHJlcGVuZCBlbnYgdmFyIChPRSBzZXR0aW5nKSB0byB2YWx1ZQorKwkJcHJpbnQoIiRrZXk9XCckRU5WeyRlbnZ2YXJ9ICR2YWx1ZVwnXG4iKTsKKysJfQorK30KKysKKyBzdWIgbGlicmFyeV9tdW5nZSB7CisgCW15ICRrZXkgPSBzaGlmdDsKKyAJbXkgJHZhbHVlID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2luc3RhbGxwZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9pbnN0YWxscGVybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTYwMTIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9pbnN0YWxscGVybC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuMTIuMy9pbnN0YWxscGVybAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBlcmwtNS4xMi4zLm9yaWcvaW5zdGFsbHBlcmwKKysrKyBwZXJsLTUuMTIuMy9pbnN0YWxscGVybAorQEAgLTMsOCArMyw4IEBACisgQkVHSU4geworICAgICByZXF1aXJlIDUuMDA0OworICAgICBjaGRpciAnLi4nIGlmICEtZCAnbGliJyBhbmQgLWQgJy4uL2xpYic7CistICAgIEBJTkMgPSAnbGliJzsKKy0gICAgJEVOVntQRVJMNUxJQn0gPSAnbGliJzsKKysjICAgIEBJTkMgPSAnbGliJzsKKysjICAgICRFTlZ7UEVSTDVMSUJ9ID0gJ2xpYic7CisgCisgICAgICMgVGhpcyBuZWVkcyB0byBiZSBhdCBCRUdJTiB0aW1lLCBiZWZvcmUgYW55IHVzZSBvZiBDb25maWcKKyAgICAgcmVxdWlyZSAnLi9pbnN0YWxsX2xpYi5wbCc7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL2xldGdjYy1maW5kLWVycm5vLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9sZXRnY2MtZmluZC1lcnJuby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYxZTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9sZXRnY2MtZmluZC1lcnJuby5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcmVtb3ZlcyBhbGwgdGhlIGxvZ2ljIHRoYXQgcGVybCB1c2VzIHRvIGxvY2F0ZSBhbiBhcHByb3ByaWF0ZQorZXJybm8uaCBmb3IgdGhlIHRhcmdldC4gSW5zdGVhZCB3ZSBzaW1wbGUgY3JlYXRlIGEgZmlsZSB0aGF0IGRvZXMKKworICAjaW5jbHVkZSAiZXJybm8uaCIKKworYW5kIHVzZSB0aGF0IGFzIHRoZSBmaWxlIHRvIHBhcnNlLiBUaGlzIGlzIG5lZWRlZCB3aGVuIHVzaW5nIGFuCitleHRlcm5hbCB0b29sY2hhaW4gc2luY2UgcGVybCB3aWxsIHNlYXJjaCBpbiAke1NUQUdJTkdfSU5DRElSfSBmb3IKK2Vycm5vLmggKHdoZW4gdXNpbmcgZ2NjKSBhbmQgdGhhdCBpc24ndCB3aGVyZSBpdCdzIGxvY2F0ZWQgLSBpdHMKK3doZXJldmVyIHRoZSBleHRlcm5hbCB0b29sY2hhaW4ga2VlcHMgaXQncyBoZWFkZXJzLgorCitJbmRleDogcGVybC01LjEyLjMvZXh0L0Vycm5vL0Vycm5vX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjEyLjMub3JpZy9leHQvRXJybm8vRXJybm9fcG0uUEwKKysrKyBwZXJsLTUuMTIuMy9leHQvRXJybm8vRXJybm9fcG0uUEwKK0BAIC0xNyw4ICsxNywxOCBAQCB1bmxpbmsgIkVycm5vLnRtcCIgaWYgLWYgIkVycm5vLnRtcCI7Cisgb3BlbiBPVVQsICI+RXJybm8udG1wIiBvciBkaWUgIkNhbm5vdCBvcGVuIEVycm5vLnRtcDogJCEiOworIHNlbGVjdCBPVVQ7CisgbXkgJGZpbGU7CistbXkgQGZpbGVzID0gZ2V0X2ZpbGVzKCk7CistaWYgKCRDb25maWd7Z2NjdmVyc2lvbn0gbmUgJycgJiYgJF5PIGVxICdNU1dpbjMyJykgeworKyNteSBAZmlsZXMgPSBnZXRfZmlsZXMoKTsKKytteSBAZmlsZXMgPSAoImVycm5vLmgiKTsKKysKKytpZiAoMSkgeworKyAgICBvcGVuIElOQ1MsICc+aW5jbHVkZXMuYycgb3IKKysJZGllICJDYW5ub3Qgb3BlbiBpbmNsdWRlcy5jIjsKKysgICAgcHJpbnQgSU5DUyBxcVsjaW5jbHVkZSAiZXJybm8uaCJcbl07CisrICAgIGNsb3NlIElOQ1M7CisrICAgIHByb2Nlc3NfZmlsZSgnaW5jbHVkZXMuYycpOworKyAgICB1bmxpbmsgJ2luY2x1ZGVzLmMnOworK30KKytlbHNpZiAoJENvbmZpZ3tnY2N2ZXJzaW9ufSBuZSAnJyAmJiAkXk8gZXEgJ01TV2luMzInKSB7CisgICAgICMgTWluR1cgY29tcGxhaW5zICJ3YXJuaW5nOiAjcHJhZ21hIHN5c3RlbV9oZWFkZXIgaWdub3JlZCBvdXRzaWRlIGluY2x1ZGUKKyAgICAgIyBmaWxlIiBpZiB0aGUgaGVhZGVyIGZpbGVzIGFyZSBwcm9jZXNzZWQgaW5kaXZpZHVhbGx5LCBzbyBpbmNsdWRlIHRoZW0KKyAgICAgIyBhbGwgaW4gLmMgZmlsZSBhbmQgcHJvY2VzcyB0aGF0IGluc3RlYWQuCitAQCAtNTMsNyArNjMsNyBAQCBzdWIgcHJvY2Vzc19maWxlIHsKKyAgICAgICAgIGNob21wKCRmaWxlID0gYGN5Z3BhdGggLXcgIiRmaWxlImApOworICAgICB9CisgCistICAgIHJldHVybiB1bmxlc3MgZGVmaW5lZCAkZmlsZSBhbmQgLWYgJGZpbGU7CisrIyAgICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJGZpbGUgYW5kIC1mICRmaWxlOworICMgICAgd2FybiAiUHJvY2Vzc2luZyAkZmlsZVxuIjsKKyAKKyAgICAgbG9jYWwgKkZIOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9tYWtlX2V4dC5wbC1maXgtcmVnZW5lcmF0ZS1tYWtlZmlsZS1mYWlsZWQtd2hpbGUtY2MtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9tYWtlX2V4dC5wbC1maXgtcmVnZW5lcmF0ZS1tYWtlZmlsZS1mYWlsZWQtd2hpbGUtY2MtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNmY2NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorbWFrZV9leHQucGw6IGZpeCByZWdlbmVyYXRlIG1ha2VmaWxlIGZhaWxlZCB3aGlsZSAkY2MgY2hhbmdlZAorCitXaGlsZSAkY2MgY2hhbmdlZCwgdGhlIGV4aXN0YW5jZSBvZiAneGRlZmluZScgY2F1c2VkIG1ha2VmaWxlCityZWdlbmVyYXRpb24gZmFpbGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbWFrZV9leHQucGwgfCA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9tYWtlX2V4dC5wbCBiL21ha2VfZXh0LnBsCitpbmRleCBiNDMzNzYyLi45ZmMxYTM2IDEwMDY0NAorLS0tIGEvbWFrZV9leHQucGwKKysrKyBiL21ha2VfZXh0LnBsCitAQCAtMzM1LDYgKzMzNSwxMCBAQCBzdWIgYnVpbGRfZXh0ZW5zaW9uIHsKKyAgICAgICAgICAgICAgICAgcHJpbnQgIkRlbGV0aW5nIG5vbi1Dcm9zcyBtYWtlZmlsZVxuIjsKKyAgICAgICAgICAgICAgICAgY2xvc2UgJG1maCBvciBkaWUgImNsb3NlICRtYWtlZmlsZTogJCEiOworICAgICAgICAgICAgICAgICBfdW5saW5rKCRtYWtlZmlsZSk7CisrICAgICAgICAgICAgICAgIGlmKC1lICd4ZGVmaW5lJykgeworKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkRlbGV0aW5nIHhkZWZpbmUgZm9yIHJlZ2VuZXJhdGUgbWFrZWZpbGVcbiI7CisrICAgICAgICAgICAgICAgICAgICBfdW5saW5rKCd4ZGVmaW5lJyk7CisrICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1ub3BhY2tsaXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtbm9wYWNrbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDgyZGNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9uYXRpdmUtbm9wYWNrbGlzdC5wYXRjaApAQCAtMCwwICsxLDkxIEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZGViaWFuIHBhdGNoXQorCitQYXJ0IG9mIDUyX2RlYmlhbl9leHR1dGlsc19oYWNrcy5wYXRjaCBqdXN0IHRvIGV4Y2x1ZGUgdGhlIGluc3RhbGxhdGlvbiBvZiAucGFja2xpc3QgZmlsZXMKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0gfCAgIDM1ICsrLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGFuL0V4dFV0aWxzLU1ha2VNYWtlci9saWIvRXh0VXRpbHMvTU1fVW5peC5wbSBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitpbmRleCBmNjMxNDVjLi5hNTg5NzEwIDEwMDY0NAorLS0tIGEvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKysrKyBiL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCitAQCAtMjEyMiwxMSArMjEyMiw2IEBAIHB1cmVfcGVybF9pbnN0YWxsIDo6IGFsbAorIH07CisgCisgICAgIHB1c2ggQG0sCistcXsJCXJlYWQgIn0uJHNlbGYtPmNhdGZpbGUoJyQoUEVSTF9BUkNITElCKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMQVJDSExJQiknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CistCistICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExQUklWTElCKSIgXAorIAkJIiQoSU5TVF9BUkNITElCKSIgIiQoREVTVElOU1RBTExBUkNITElCKSIgXAorIAkJIiQoSU5TVF9CSU4pIiAiJChERVNUSU5TVEFMTEJJTikiIFwKK0BAIC0yMTU4LDEwICsyMTUzLDYgQEAgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExTSVRFTElCKSIgXAorIHB1cmVfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCSQoTk9FQ0hPKSAkKE1PRF9JTlNUQUxMKSBcCisgfTsKKy0gICAgcHVzaCBAbSwKKy1xewkJcmVhZCAifS4kc2VsZi0+Y2F0ZmlsZSgnJChWRU5ET1JBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiIFwKKy0JCXdyaXRlICJ9LiRzZWxmLT5jYXRmaWxlKCckKERFU1RJTlNUQUxMVkVORE9SQVJDSCknLCdhdXRvJywnJChGVUxMRVhUKScsJy5wYWNrbGlzdCcpLnF7IiBcCistfSB1bmxlc3MgJHNlbGYtPntOT19QQUNLTElTVH07CisgCisgICAgIHB1c2ggQG0sCisgcXsJCSIkKElOU1RfTElCKSIgIiQoREVTVElOU1RBTExWRU5ET1JMSUIpIiBcCitAQCAtMjE4NywzNyArMjE3OCwxOSBAQCBkb2NfdmVuZG9yX2luc3RhbGwgOjogYWxsCisgCisgICAgIHB1c2ggQG0sIHF7CisgZG9jX3BlcmxfaW5zdGFsbCA6OiBhbGwKKy0JJChOT0VDSE8pICQoRUNITykgQXBwZW5kaW5nIGluc3RhbGxhdGlvbiBpbmZvIHRvICIkKERFU1RJTlNUQUxMQVJDSExJQikvcGVybGxvY2FsLnBvZCIKKy0JLSQoTk9FQ0hPKSAkKE1LUEFUSCkgIiQoREVTVElOU1RBTExBUkNITElCKSIKKy0JLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCistCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorLQkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExQUklWTElCKSBcCistCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKy0JCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKy0JCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorIAorIGRvY19zaXRlX2luc3RhbGwgOjogYWxsCistCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTEFSQ0hMSUIpL3Blcmxsb2NhbC5wb2QiCistCS0kKE5PRUNITykgJChNS1BBVEgpICIkKERFU1RJTlNUQUxMQVJDSExJQikiCisrCSQoTk9FQ0hPKSAkKEVDSE8pIEFwcGVuZGluZyBpbnN0YWxsYXRpb24gaW5mbyB0byAiJChERVNUSU5TVEFMTFNJVEVBUkNIKS9wZXJsbG9jYWwucG9kIgorKwktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTFNJVEVBUkNIKSIKKyAJLSQoTk9FQ0hPKSAkKERPQ19JTlNUQUxMKSBcCisgCQkiTW9kdWxlIiAiJChOQU1FKSIgXAorIAkJImluc3RhbGxlZCBpbnRvIiAkKElOU1RBTExTSVRFTElCKSBcCisgCQlMSU5LVFlQRSAiJChMSU5LVFlQRSkiIFwKKyAJCVZFUlNJT04gIiQoVkVSU0lPTikiIFwKKyAJCUVYRV9GSUxFUyAiJChFWEVfRklMRVMpIiBcCistCQk+PiAifS4kc2VsZi0+Y2F0ZmlsZSgnJChERVNUSU5TVEFMTEFSQ0hMSUIpJywncGVybGxvY2FsLnBvZCcpLnF7IgorKwkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExTSVRFQVJDSCknLCdwZXJsbG9jYWwucG9kJykucXsiCisgCisgZG9jX3ZlbmRvcl9pbnN0YWxsIDo6IGFsbAorLQkkKE5PRUNITykgJChFQ0hPKSBBcHBlbmRpbmcgaW5zdGFsbGF0aW9uIGluZm8gdG8gIiQoREVTVElOU1RBTExBUkNITElCKS9wZXJsbG9jYWwucG9kIgorLQktJChOT0VDSE8pICQoTUtQQVRIKSAiJChERVNUSU5TVEFMTEFSQ0hMSUIpIgorLQktJChOT0VDSE8pICQoRE9DX0lOU1RBTEwpIFwKKy0JCSJNb2R1bGUiICIkKE5BTUUpIiBcCistCQkiaW5zdGFsbGVkIGludG8iICQoSU5TVEFMTFZFTkRPUkxJQikgXAorLQkJTElOS1RZUEUgIiQoTElOS1RZUEUpIiBcCistCQlWRVJTSU9OICIkKFZFUlNJT04pIiBcCistCQlFWEVfRklMRVMgIiQoRVhFX0ZJTEVTKSIgXAorLQkJPj4gIn0uJHNlbGYtPmNhdGZpbGUoJyQoREVTVElOU1RBTExBUkNITElCKScsJ3Blcmxsb2NhbC5wb2QnKS5xeyIKKyAKKyB9IHVubGVzcyAkc2VsZi0+e05PX1BFUkxMT0NBTH07CisgCitAQCAtMjIyNiwxMyArMjE5OSwxMSBAQCB1bmluc3RhbGwgOjogdW5pbnN0YWxsX2Zyb21fJChJTlNUQUxMRElSUylkaXJzCisgCSQoTk9FQ0hPKSAkKE5PT1ApCisgCisgdW5pbnN0YWxsX2Zyb21fcGVybGRpcnMgOjoKKy0JJChOT0VDSE8pICQoVU5JTlNUQUxMKSAifS4kc2VsZi0+Y2F0ZmlsZSgnJChQRVJMX0FSQ0hMSUIpJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyAKKyB1bmluc3RhbGxfZnJvbV9zaXRlZGlycyA6OgorIAkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFNJVEVBUkNIRVhQKScsJ2F1dG8nLCckKEZVTExFWFQpJywnLnBhY2tsaXN0JykucXsiCisgCisgdW5pbnN0YWxsX2Zyb21fdmVuZG9yZGlycyA6OgorLQkkKE5PRUNITykgJChVTklOU1RBTEwpICJ9LiRzZWxmLT5jYXRmaWxlKCckKFZFTkRPUkFSQ0hFWFApJywnYXV0bycsJyQoRlVMTEVYVCknLCcucGFja2xpc3QnKS5xeyIKKyB9OworIAorICAgICBqb2luKCIiLEBtKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvbmF0aXZlLXBlcmxpbmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1wZXJsaW5jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYmIxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL25hdGl2ZS1wZXJsaW5jLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHBlcmwtNS44LjgvbGliL0V4dFV0aWxzL01NX1VuaXgucG0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwZXJsLTUuMTIuMy5vcmlnL2NwYW4vRXh0VXRpbHMtTWFrZU1ha2VyL2xpYi9FeHRVdGlscy9NTV9Vbml4LnBtCTIwMDgtMTAtMzEgMjI6MDE6MzUuMDAwMDAwMDAwICswMDAwCisrKysgcGVybC01LjEyLjMvY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL01NX1VuaXgucG0JMjAwOC0xMC0zMSAyMjowMTozNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xNTk3LDYgKzE1OTcsMTkgQEAKKyAJJHNlbGYtPntQRVJMX0xJQn0gICAgIHx8PSAkQ29uZmlne3ByaXZsaWJleHB9OworIAkkc2VsZi0+e1BFUkxfQVJDSExJQn0gfHw9ICRDb25maWd7YXJjaGxpYmV4cH07CisgCSRzZWxmLT57UEVSTF9JTkN9ICAgICA9ICRzZWxmLT5jYXRkaXIoIiRzZWxmLT57UEVSTF9BUkNITElCfSIsIkNPUkUiKTsgIyB3aWxkIGd1ZXNzIGZvciBub3cKKysJIyBDaGVjayBmb3IgZW52aXJvbm1lbnQgb3ZlcnJpZGUgc28gd2UnbGwgZmluZCB0aGUgaGVhZGVycyBpbiB0aGUgY29ycmVjdCBwbGFjZQorKyAgICAgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0xJQn0pCisrICAgICAgICB7CisrICAgICAgICAgICAgJHNlbGYtPntQRVJMX0xJQn0gPSAkRU5We1BFUkxfTElCfTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChkZWZpbmVkICRFTlZ7UEVSTF9BUkNITElCfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfQVJDSExJQn0gPSAkRU5We1BFUkxfQVJDSExJQn07CisrICAgICAgICB9CisrICAgICAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxfSU5DfSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAkc2VsZi0+e1BFUkxfSU5DfSA9ICRFTlZ7UEVSTF9JTkN9OworKyAgICAgICAgfQorIAlteSAkcGVybF9oOworIAorIAlpZiAobm90IC1mICgkcGVybF9oID0gJHNlbGYtPmNhdGZpbGUoJHNlbGYtPntQRVJMX0lOQ30sInBlcmwuaCIpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQ5MDQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLVBhdGhUb29scy1kb24tdC1maWx0ZXItb3V0LWJsaWItZnJvbS1JTkMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSA5MGMyNTJjZWNjMzhhZWQ1ZDVmYWVkYjMwNDg1ZGQ2ZWVlMmU1NGViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1IDE1OjE0OjQwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHBlcmwgLyBQYXRoVG9vbHM6IGRvbid0IGZpbHRlciBvdXQgYmxpYiBmcm9tIEBJTkMKKworSWYgJFRPUERJUiBpbmNsdWRlcyB0aGUgc3RyaW5nICJibGliIiwgZmlsdGVyIGl0IG91dCBmcm9tIEBJTkMgbWF5IGVtcHR5Cit0aGUgQElOQyBhbmQgY2F1c2UgYnVpbGQgZXJyb3JzIGxpa2U6CisKKyAgQ2FuJ3QgbG9jYXRlIEV4dFV0aWxzL01ha2VNYWtlci5wbSBpbiBASU5DIFwKKyAgKHlvdSBtYXkgbmVlZCB0byBpbnN0YWxsIHRoZSBFeHRVdGlsczo6TWFrZU1ha2VyIG1vZHVsZSkgXAorICAoQElOQyBjb250YWluczogLikgYXQgTWFrZWZpbGUuUEwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwgfCAzIC0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC9QYXRoVG9vbHMvTWFrZWZpbGUuUEwgYi9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTAoraW5kZXggMWIyMWRlNC4uZjU2MmNiMiAxMDA2NDQKKy0tLSBhL2Rpc3QvUGF0aFRvb2xzL01ha2VmaWxlLlBMCisrKysgYi9kaXN0L1BhdGhUb29scy9NYWtlZmlsZS5QTAorQEAgLTEsNiArMSwzIEBACistCistQkVHSU4geyBASU5DID0gZ3JlcCB7IS9ibGliL30gQElOQyB9CistCisgcmVxdWlyZSA1LjAwNTsKKyB1c2UgRXh0VXRpbHM6Ok1ha2VNYWtlcjsKKyBXcml0ZU1ha2VmaWxlCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1hcmNobGliLWV4cC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1hcmNobGliLWV4cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTEyZDAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWFyY2hsaWItZXhwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK3Blcmw6IGFkZCBhcmNobGliX2V4cCB2YXJpYWJsZSB1c2VkIHRvIGdlbmVyYXRlIEFSQ0hMSUJfRVhQIGluIGNvbmZpZy5oCisgICAgCitwZXJsLmMgdXNlcyBhbiBBUkNITElCX0VYUCBkZWZpbmUgdG8gZ2VuZXJhdGUgY29tcGlsZS10aW1lIGNvZGUgdGhhdAorYWRkcyB0aGUgYXJjaGxpYmV4cCBwYXRoIHRvIEBJTkMgZHVyaW5nIHJ1bi10aW1lIGluaXRpYWxpemF0aW9uIG9mIGEKK25ldyBwZXJsIGludGVycHJldGVyLgorICAgIAorQmVjYXVzZSB3ZSd2ZSBjaGFuZ2VkIHRoaXMgdmFsdWUgaW4gYSB0ZW1wb3Jhcnkgd2F5IHRvIG1ha2UgaXQKK3Bvc3NpYmxlIHRvIHVzZSBFeHRVdGlsczo6RW1iZWQgaW4gdGhlIHRhcmdldCBidWlsZCAodGhlIHRlbXBvcmFyeQordmFsdWUgaW4gY29uZmlnLnNoIGdldHMgcmUtc3RyaXBwZWQgb3V0IGR1cmluZyBwYWNrYWdpbmcpLCB0aGUKK0FSQ0hMSUJfRVhQIHZhbHVlIHRoYXQgZ2V0cyBnZW5lcmF0ZWQgc3RpbGwgdXNlcyB0aGUgdGVtcG9yYXJ5IHZlcnNpb24KK2luc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGV4cGVjdGVkIHZlcnNpb24gKGkuZS4gYmVjYXVzZXMgaXQncyBpbiB0aGUKK2dlbmVyYXRlZCBjb25maWcuaCwgaXQgZG9lc24ndCBnZXQgc3RyaXBwZWQgb3V0IGR1cmluZyBwYWNrYWdpbmcgbGlrZQordGhlIG90aGVycyBpbiBjb25maWcuc2gpLgorCitUaGlzIGNyZWF0ZXMgYW4gdW5tb2RpZmllZCB2ZXJzaW9uIGNhbGxlZCBhcmNobGliX2V4cCB0aGF0IGdldHMgdXNlZAorYnkgYSBtb2RpZmllZCBjb25maWdfaC5TSCB0byBnZXQgdGhlIGNvcnJlY3QgdmFsdWUgaW50byBjb25maWcuaAorICAgIAorVGhpcyBwYXRjaCB1c2VzIGFuIHVubW9kaWZpZWQgdmVyc2lvbiBvZiBhcmNobGliZXhwIGNhbGxlZAorYXJjaGxpYl9leHAsIGludHJvZHVjZWQgdG8gY29uZmlnLnNoLCB3aGljaCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZQorY29ycmVjdCB2YWx1ZSBvZiBBUkNITElCX0VYUCBpbnRvIGNvbmZpZy5oCisgIAorU2VlIFlPQ1RPICMzMDk5IGZvciBtb3JlIGluZm8uCisKK1Vwc3RyZWFtLVN0YXR1czpJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NvbmZpZ19oLlNICis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9jb25maWdfaC5TSAorKysrIHBlcmwtNS4xNC4yL2NvbmZpZ19oLlNICitAQCAtOTk2LDcgKzk5Niw3IEBAIHNlZCA8PCFHUk9LIVRISVMhID4kQ09ORklHX0ggLWUgJ3MhXiN1bmQKKyAgKglpbiBwcm9ncmFtcyB0aGF0IGFyZSBub3QgcHJlcGFyZWQgdG8gZGVhbCB3aXRoIH4gZXhwYW5zaW9uIGF0IHJ1bi10aW1lLgorICAqLworICMkZF9hcmNobGliIEFSQ0hMSUIgIiRhcmNobGliIgkJLyoqLworLSMkZF9hcmNobGliIEFSQ0hMSUJfRVhQICIkYXJjaGxpYmV4cCIJCS8qKi8KKysjJGRfYXJjaGxpYiBBUkNITElCX0VYUCAiJGFyY2hsaWJfZXhwIgkJLyoqLworIAorIC8qIEFSQ0hOQU1FOgorICAqCVRoaXMgc3ltYm9sIGhvbGRzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYXJjaGl0ZWN0dXJlIG5hbWUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlncG0tc3dpdGNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3BtLXN3aXRjaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmNjMTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWNvbmZpZ3BtLXN3aXRjaC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbbmF0aXZlXQorCitUaGlzIHBhdGNoIGlzIHVzZWQgZm9yIHBlcmwtbmF0aXZlIG9ubHkuIEl0IGVuYWJsZXMgdGhlIHN3aXRjaGluZyBvZgorY29uZmlndXJhdGlvbiBmaWxlcyBiZXR3ZWVuIENvbmZpZ19oZWF2eS5wbCBhbmQKK0NvbmZpZ19oZWF2eS10YXJnZXQucGwgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCitQRVJMQ09ORklHVEFSR0VUIC0gdGhlIGxhdGVyIGNvbnRhaW5pbmcgc2V0dGluZ3MgZm9yIHRoZSB0YXJnZXQgd2hpbGUKK3RoZSBmb3JtZXIgY29udGFpbnMgdGhvc2UgZm9yIHRoZSBob3N0LiBUaGlzIHdpbGwgYWxsb3cgY3Bhbi5iYmNsYXNzCit0byB1c2UgdGhlIHNldHRpbmdzIGFwcHJvcHJpYXRlIGZvciB0aGUgbmF0aXZlIGFuZC9vciB0YXJnZXQgYnVpbGRzCithcyByZXF1aXJlZC4gVGhpcyBhbHNvIGRpc2FibGVzIHRoZSB1c2Ugb2YgdGhlIGNhY2hlIHNpbmNlIHRoZSBjYWNoZWQKK3ZhbHVlcyB3b3VsZCBiZSB2YWxpZCBmb3IgdGhlIGhvc3Qgb25seS4KKworSW5kZXg6IHBlcmwtNS4xNC4yL2NvbmZpZ3BtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9jb25maWdwbQorKysrIHBlcmwtNS4xNC4yL2NvbmZpZ3BtCitAQCAtNjU4LDcgKzY1OCw3IEBAIHN1YiBGRVRDSCB7CisgICAgIG15KCRzZWxmLCAka2V5KSA9IEBfOworIAorICAgICAjIGNoZWNrIGZvciBjYWNoZWQgdmFsdWUgKHdoaWNoIG1heSBiZSB1bmRlZiBzbyB3ZSB1c2UgZXhpc3RzIG5vdCBkZWZpbmVkKQorLSAgICByZXR1cm4gZXhpc3RzICRzZWxmLT57JGtleX0gPyAkc2VsZi0+eyRrZXl9IDogJHNlbGYtPmZldGNoX3N0cmluZygka2V5KTsKKysgICAgcmV0dXJuICRzZWxmLT5mZXRjaF9zdHJpbmcoJGtleSk7CisgfQorIAorIEVORE9GRU5ECitAQCAtODE2LDcgKzgxNiwyMSBAQCAkY29uZmlnX3R4dCAuPSBzcHJpbnRmIDw8J0VORE9GVElFJywgJGZhCisgc3ViIERFU1RST1kgeyB9CisgCisgc3ViIEFVVE9MT0FEIHsKKy0gICAgcmVxdWlyZSAnQ29uZmlnX2hlYXZ5LnBsJzsKKysgICAgbXkgJGNmZ2ZpbGUgPSAnQ29uZmlnX2hlYXZ5LnBsJzsKKysgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMQ09ORklHVEFSR0VUfSBhbmQgJEVOVntQRVJMQ09ORklHVEFSR0VUfSBlcSAieWVzIikKKysgICAgeworKyAgICAgICAgJGNmZ2ZpbGUgPSAnQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCc7CisrICAgIH0KKysgICAgaWYgKGRlZmluZWQgJEVOVntQRVJMX0FSQ0hMSUJ9KQorKyAgICB7CisrICAgICAgICBwdXNoIEBJTkMsICRFTlZ7UEVSTF9BUkNITElCfTsKKysgICAgICAgIHJlcXVpcmUgJGNmZ2ZpbGU7CisrICAgICAgICBwb3AgQElOQzsKKysgICAgfQorKyAgICBlbHNlCisrICAgIHsKKysgICAgICAgIHJlcXVpcmUgJGNmZ2ZpbGU7CisrICAgIH0KKyAgICAgZ290byBcJmxhdW5jaGVyIHVubGVzcyAkQ29uZmlnOjpBVVRPTE9BRCA9fiAvbGF1bmNoZXIkLzsKKyAgICAgZGllICImQ29uZmlnOjpBVVRPTE9BRCBmYWlsZWQgb24gJENvbmZpZzo6QVVUT0xPQUQiOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1jb25maWd1cmUuc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3MmNlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtY29uZmlndXJlLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhIC9iaW4vc2gKKworIworIyBHZW5lcmF0ZSB0aGUgY29tbW9uIHBlcmwgY29uZmlndXJhdGlvbgorIyBOZWVkcyB0byBiZSBydW4gb24gYSBob3N0IHRoYXQgbWF0Y2hlcyB0aGUgYml0c2l6ZSBvZiB0aGUgdGFyZ2V0IHBsYXRmb3JtCisjCisKK2VjaG8gc2ggQ29uZmlndXJlIC1kZXMgXAorICAgICAgICAtRG9wdGltaXplPS1PMiBcCisgICAgICAgIC1EbXlob3N0bmFtZT1sb2NhbGhvc3QgXAorICAgICAgICAtRHBlcmxhZG1pbj1yb290QGxvY2FsaG9zdCBcCisgICAgICAgIC1EY2M9Z2NjIFwKKyAgICAgICAgLURjZl9ieT0nT3BlbiBFbWJlZGRlZCcgXAorICAgICAgICAtRGluc3RhbGxwcmVmaXg9QERFU1RESVJAIFwKKyAgICAgICAgLURwcmVmaXg9L3VzciBcCisgICAgICAgIC1EdmVuZG9ycHJlZml4PS91c3IgXAorICAgICAgICAtRHNpdGVwcmVmaXg9L3VzciBcCisgICAgICAgIC1Eb3RoZXJsaWJkaXJzPS91c3IvbGliL3Blcmw1LzUuMTIuMyBcCisgICAgICAgIC1EdXNlc2hycGxpYiBcCisgICAgICAgIC1EdXNldGhyZWFkcyBcCisgICAgICAgIC1EdXNlaXRocmVhZHMgXAorICAgICAgICAtRHVzZWxhcmdlZmlsZXMgXAorICAgICAgICAtVWRfZG9zdWlkIFwKKyAgICAgICAgLURkX3NlbWN0bF9zZW11biBcCisgICAgICAgIC1VaV9kYiBcCisgICAgICAgIC1VaV9uZGJtIFwKKyAgICAgICAgLVVpX2dkYm0gXAorICAgICAgICAtRGlfc2hhZG93IFwKKyAgICAgICAgLURpX3N5c2xvZyBcCisgICAgICAgIC1EbWFuM2V4dD0zcG0gXAorICAgICAgICAtRHVzZXBlcmxpbyBcCisgICAgICAgIC1EaW5zdGFsbHVzcmJpbnBlcmwgXAorICAgICAgICAtVWJpbmNvbXBhdDUwMDUgXAorICAgICAgICAtVXZlcnNpb25vbmx5IFwKKyAgICAgICAgLURwYWdlcj0nL3Vzci9iaW4vbGVzcyAtaXNyJworCitjcCAtZiBjb25maWcuc2ggY29uZmlnLnNoLkNPTU1PTgorCitUQVJHRVRPUz0kKGdyZXAgbXlhcmNobmFtZSBjb25maWcuc2guQ09NTU9OIHwgc2VkICJzIy4qJ1woLipcKScuKiNcMSMiKQorCitzZWQgLXIgLWkgY29uZmlnLnNoLkNPTU1PTiBcCisJLWUgInMjKGluc3RhbGwuKj0nKSgvdXNyKS9sb2NhbCguKicpI1wxQERFU1RESVJAXDJcMyNnIiBcCisJLWUgJ3MjJyRUQVJHRVRPUycjQEFSQ0hAI2cnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZHlubG9hZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWR5bmxvYWRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzViZWJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9wZXJsLWR5bmxvYWRlci5wYXRjaApAQCAtMCwwICsxLDM0IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0FsbG93IHRoZSBsb2NhdGlvbiB0aGF0IC5zbyBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yIGZvciBkeW5hbWljCitsb2FkaW5nIHRvIGJlIGNoYW5nZWQgdmlhIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLiBUaGlzIGlzIHRvIGFsbG93Cit1cyB0byBsb2FkIC5zbydzIGZyb20gdGhlIGhvc3Qgc3lzdGVtIHdoaWxlIGJ1aWxkaW5nIGZvciB0aGUgdGFyZ2V0CitzeXN0ZW0uCisKK1VwZGF0ZSBieSBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzIxCisKK0luZGV4OiBwZXJsLTUuMTQuMi9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjE0LjIub3JpZy9kaXN0L1hTTG9hZGVyL1hTTG9hZGVyX3BtLlBMCisrKysgcGVybC01LjE0LjIvZGlzdC9YU0xvYWRlci9YU0xvYWRlcl9wbS5QTAorQEAgLTI4LDYgKzI4LDIwIEBAIHN1YiBsb2FkIHsKKyAKKyAgICAgbXkgKCRtb2R1bGUsICRtb2RsaWJuYW1lKSA9IGNhbGxlcigpOworIAorKyAgICAjIE9FOiBBbGxvdyBlbnYgdG8gZm9ybSBkeW5hbWljIGxvYWRlciB0byBsb29rIGluIGEgZGlmZmVyZW50IHBsYWNlCisrICAgICMgVGhpcyBpcyBzbyBpdCBmaW5kcyB0aGUgaG9zdCAuc28gZmlsZXMsIG5vdCB0aGUgdGFyZ2V0cworKyAgICBpZiAoZGVmaW5lZCAkRU5We1BFUkxIT1NUTElCfSkKKysgICAgeworKyAgICAgICAgbXkgJGhvc3RsaWIgPSAkRU5We1BFUkxIT1NUTElCfTsKKysgICAgICAgIHByaW50IFNUREVSUiAiKioqIE1vZHVsZSBuYW1lIElOOiAkbW9kbGlibmFtZVxuIjsKKysgICAgICAgICgkcDEsICRwMiwgJHAzLCAkcDQsICRwNSkgPSAkbW9kbGlibmFtZSA9fiBtLyheKC4qbGliXHcqXC8pPykoKHBlcmxcL1swLTlcLl0qXC8pPykoLiopJC87CisrICAgICAgICBwcmludCBTVERFUlIgIioqKiBwMTogJHAxICBwMzogJHAzICBwNTogJHA1XG4iOworKyAgICAgICAgaWYgKCAkcDEgbmUgIiIgKSB7CisrICAgICAgICAgICAgJG1vZGxpYm5hbWUgPSAkaG9zdGxpYi4kcDU7CisrICAgICAgICB9CisrICAgICAgICBwcmludCBTVERFUlIgIioqKiBNb2R1bGUgbmFtZSBPVVQ6ICRtb2RsaWJuYW1lXG4iOworKyAgICB9CisrCisgICAgIGlmIChAXykgeworIAkkbW9kdWxlID0gJF9bMF07CisgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtZW5hYmxlLWdkYm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE4M2ZjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1lbmFibGUtZ2RibS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0luZGV4OiBwZXJsLTUuOC44L2NvbmZpZ19oLlNICis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGVybC01LjguOC5vcmlnL2NvbmZpZ19oLlNICTIwMDUtMTEtMDEgMDI6MTM6MDUuMDAwMDAwMDAwICswODAwCisrKysgcGVybC01LjguOC9jb25maWdfaC5TSAkyMDEwLTExLTAxIDE3OjA2OjA3LjIxNTIxOTczOCArMDgwMAorQEAgLTcwOSw2ICs3MDksMTIgQEAKKyAgKi8KKyAjJGlfZmxvYXQgSV9GTE9BVAkJLyoqLworIAorKy8qIElfR0RCTToKKysgKiAgICAgIFRoaXMgc3ltYm9sLCBpZiBkZWZpbmVkLCBpbmRpY2F0ZXMgdGhhdCA8Z2RibS5oPiBleGlzdHMgYW5kIHNob3VsZAorKyAqICAgICAgYmUgaW5jbHVkZWQuCisrICovCisrIyRpX2dkYm0gSV9HREJNIC8qKi8KKysKKyAvKiBJX0xJTUlUUzoKKyAgKglUaGlzIHN5bWJvbCwgaWYgZGVmaW5lZCwgaW5kaWNhdGVzIHRvIHRoZSBDIHByb2dyYW0gdGhhdCBpdCBzaG91bGQKKyAgKglpbmNsdWRlIDxsaW1pdHMuaD4gdG8gZ2V0IGRlZmluaXRpb24gb2Ygc3ltYm9scyBsaWtlIFdPUkRfQklUIG9yCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtbW9yZWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvcGVybC1tb3JlY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5Y2U4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3BlcmwtbW9yZWNvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1dlIG5lZWQgbGQgaW4gdGhlIGZha2UgY29uZmlnIGxpYnJhcnksIGJ1dCBpdCdzIG5vdCBpbmNsdWRlZCBieSBkZWZhdWx0LiBTbworZXhwYW5kIHRoZSBudW1iZXIgb2YgaXRlbXMgaW5jbHVkZWQuIFdoaWxlIHRoaXMgd29ya3MgaXQgaW5kaWNhdGVzIHRoYXQgdGhlCityZXN0IG9mIHRoZSBjb25maWcgaXRlbXMgYXJlIG5vdCBiZWluZyBwaWNrZWQgdXAgYW5kL29yIGFyZSBiZWluZyBwaWNrZWQgdXAKK2Zyb20gdGhlIGhvc3QuIE1vcmUgaW52ZXN0aWdhdGlvbiBuZWVkZWQuCisKKy0tLSBwZXJsLTUuOC44L2NvbmZpZ3BtCTIwMDcvMDQvMjAgMDk6NDg6MDUJMS4xCisrKysgcGVybC01LjguOC9jb25maWdwbQkyMDA3LzA0LzIwIDA5OjU3OjEyCitAQCAtMiw3ICsyLDcgQEAKKyB1c2Ugc3RyaWN0OworIHVzZSB2YXJzIHF3KCVDb25maWcgJENvbmZpZ19TSF9leHBhbmRlZCk7CisgCistbXkgJGhvd19tYW55X2NvbW1vbiA9IDIyOworK215ICRob3dfbWFueV9jb21tb24gPSA1MDsKKyAKKyAjIGNvbW1vbmx5IHVzZWQgbmFtZXMgdG8gcHJlY2FjaGUgKGFuZCBoZW5jZSBsb29rdXAgZmFzdGVzdCkKKyBteSAlQ29tbW9uOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTJkZDFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK2NkIHQgJiYgLi9URVNUIHwgc2VkIC11IC1lICdzfFwoLipcKSAuKiBvayR8UEFTUzogXDF8JyAtZSAnc3xcKC4qXCkgLiogc2tpcHBlZHxTS0lQOiBcMXwnIC1lICdzfFwoLipcKSBcLlwoLipcKXxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3QtcnVuLXN3aXRjaGVzLnQtcGVybDUtcGVybC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZmRmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3QtcnVuLXN3aXRjaGVzLnQtcGVybDUtcGVybC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDE1NjE1NDllYTM2ZTM3Y2MyNTcwNmYwOTRhMTk1ZGU0OTI4ZjQyMTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTkgSnVuIDIwMTUgMDE6MjM6NDYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdC9ydW4vc3dpdGNoZXMudDogcGVybDUgLT4gcGVybAorCitXZSBjYWxsIGl0IHBlcmwgcmF0aGVyIHRoYW4gcGVybDUgaW4gb2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb2Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdC9ydW4vc3dpdGNoZXMudCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3QvcnVuL3N3aXRjaGVzLnQgYi90L3J1bi9zd2l0Y2hlcy50CitpbmRleCA3ODkxNWUwLi5lOWU0YjQ1IDEwMDY0NAorLS0tIGEvdC9ydW4vc3dpdGNoZXMudAorKysrIGIvdC9ydW4vc3dpdGNoZXMudAorQEAgLTI2OSw3ICsyNjksNyBAQCBpcyBydW5wZXJsKHN0ZGVyciA9PiAxLCBwcm9nID0+ICcjIXBlcmwgLU0nKSwKKyAgICAgICAgICAgJy1WIGdlbmVyYXRlcyAyMCsgbGluZXMnICk7CisgCisgICAgIGxpa2UoIHJ1bnBlcmwoIHN3aXRjaGVzID0+IFsnLVYnXSApLAorLQkgIHFyL1xBU3VtbWFyeSBvZiBteSBwZXJsNSAuKmNvbmZpZ3VyYXRpb246LywKKysJICBxci9cQVN1bW1hcnkgb2YgbXkgcGVybCAuKmNvbmZpZ3VyYXRpb246LywKKyAgICAgICAgICAgJy1WIGxvb2tzIG9rYXknICk7CisgCisgICAgICMgbG9va3VwIGEga25vd24gY29uZmlnIHZhcgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmwvdGVzdC9kaXN0LXRocmVhZHMtdC1qb2luLnQtYWRqdXN0LXBzLW9wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODI5M2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2Rpc3QtdGhyZWFkcy10LWpvaW4udC1hZGp1c3QtcHMtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK2Rpc3QvdGhyZWFkcy90L2pvaW4udDogYWRqdXN0IHBzIG9wdGlvbgorCitUaGUgcHMncyBvcHRpb24gJy1mJyBpcyBub3Qgc3VwcG9ydGVkIGJ5IGJ1c3lib3ggaW4gb2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZGlzdC90aHJlYWRzL3Qvam9pbi50IHwgNiArKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZGlzdC90aHJlYWRzL3Qvam9pbi50IGIvZGlzdC90aHJlYWRzL3Qvam9pbi50CistLS0gYS9kaXN0L3RocmVhZHMvdC9qb2luLnQKKysrKyBiL2Rpc3QvdGhyZWFkcy90L2pvaW4udAorQEAgLTExOCw3ICsxMTgsNyBAQCBpZiAoJF5PIGVxICdsaW51eCcpIHsKKyAgICAgICAgICAgICAgICAgIH0pLT5qb2luOworICAgICAjcHJpbnQgIiMgbWFpbnRocmVhZDogXCQwID0gJDBcbiI7CisgICAgICNwcmludCAiIyBwaWQgPSAkJFxuIjsKKy0gICAgaWYgKG9wZW4gUFMsICJwcyAtZiB8IikgeyAjIE5vdGU6IG11c3Qgd29yayBpbiAoYWxsKSBzeXN0ZW1zLgorKyAgICBpZiAob3BlbiBQUywgInBzIHwiKSB7ICMgTm90ZTogbXVzdCB3b3JrIGluIChhbGwpIHN5c3RlbXMuCisgICAgICAgICBteSAoJHNhd3BpZCwgJHNhd2V4ZSk7CisgICAgICAgICB3aGlsZSAoPFBTPikgeworICAgICAgICAgICAgIGNob21wOworQEAgLTEzNSwxMCArMTM1LDEwIEBAIGlmICgkXk8gZXEgJ2xpbnV4JykgeworICAgICAgICAgaWYgKCRzYXdwaWQpIHsKKyAgICAgICAgICAgICBvaygkc2F3cGlkICYmICRzYXdleGUsICdhbHRlcmluZyAkMCBpcyBlZmZlY3RpdmUnKTsKKyAgICAgICAgIH0gZWxzZSB7CistICAgICAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBkaWQgbm90IHNlZSBwaWQgJCQgaW4gJ3BzIC1mIHwnIik7CisrICAgICAgICAgICAgc2tpcCgiXCQwIGNoZWNrOiBkaWQgbm90IHNlZSBwaWQgJCQgaW4gJ3BzIHwnIik7CisgICAgICAgICB9CisgICAgIH0gZWxzZSB7CistICAgICAgICBza2lwKCJcJDAgY2hlY2s6IG9wZW5pbmcgJ3BzIC1mIHwnIGZhaWxlZDogJCEiKTsKKysgICAgICAgIHNraXAoIlwkMCBjaGVjazogb3BlbmluZyAncHMgfCcgZmFpbGVkOiAkISIpOworICAgICB9CisgfSBlbHNlIHsKKyAgICAgc2tpcCgiXCQwIGNoZWNrOiBvbmx5IG9uIExpbnV4Iik7CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2V4dC1EeW5hTG9hZGVyLXQtRHluYUxvYWRlci50LWZpeC1jYWxsaW5nLWRsX2ZpbmRmaWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGVybC9wZXJsL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU3N2ZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybC90ZXN0L2V4dC1EeW5hTG9hZGVyLXQtRHluYUxvYWRlci50LWZpeC1jYWxsaW5nLWRsX2ZpbmRmaWwucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQ6IGZpeCBjYWxsaW5nIGRsX2ZpbmRmaWxlKCkgZmFpbGVkCisKK1VzZSAnJENvbmZpZ3tsaWJjfScgYXMgdGhlIGxpYmMgZmlsZSBuYW1lCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leHQvRHluYUxvYWRlci90L0R5bmFMb2FkZXIudCBiL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50CitpbmRleCBhZGUxZjhlLi4zNTY3YWZlIDEwMDY0NAorLS0tIGEvZXh0L0R5bmFMb2FkZXIvdC9EeW5hTG9hZGVyLnQKKysrKyBiL2V4dC9EeW5hTG9hZGVyL3QvRHluYUxvYWRlci50CitAQCAtMTA2LDcgKzEwNiw3IEBAIG9rKCBkZWZpbmVkICRkbGVyciwgImRsX2Vycm9yKCkgcmV0dXJuaW5nIGFuIGVycm9yIG1lc3NhZ2U6ICckZGxlcnInIiApOworICMgLi4uIGRsX2ZpbmRmaWxlKCkKKyBTS0lQOiB7CisgICAgIG15IEBmaWxlcyA9ICgpOworLSAgICBldmFsIHsgQGZpbGVzID0gRHluYUxvYWRlcjo6ZGxfZmluZGZpbGUoImMiKSB9OworKyAgICBldmFsIHsgQGZpbGVzID0gRHluYUxvYWRlcjo6ZGxfZmluZGZpbGUoJENvbmZpZ3tsaWJjfSkgfTsKKyAgICAgaXMoICRALCAnJywgImNhbGxpbmcgZGxfZmluZGZpbGUoKSIgKTsKKyAgICAgIyBTb21lIHBsYXRmb3JtcyBhcmUga25vd24gdG8gbm90IGhhdmUgYSAibGliYyIKKyAgICAgIyAobm90IGF0IGxlYXN0IGJ5IHRoYXQgbmFtZSkgdGhhdCB0aGUgZGxfZmluZGZpbGUoKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BlcmwvcGVybF81LjIyLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NlNzg0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wZXJsL3BlcmxfNS4yMi4wLmJiCkBAIC0wLDAgKzEsMzcxIEBACityZXF1aXJlIHBlcmwuaW5jCisKKyMgV2UgbmVlZCBnbnVncmVwIChmb3IgLUkpCitERVBFTkRTID0gInZpcnR1YWwvZGIgZ3JlcC1uYXRpdmUiCitERVBFTkRTICs9ICJnZGJtIHpsaWIiCisKKyMgUGljayB1cCBwYXRjaGVzIGZyb20gZGViaWFuCisjIGh0dHA6Ly9mdHAuZGUuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL3AvcGVybC9wZXJsXzUuMjIuMC0xLmRlYmlhbi50YXIueHoKK1NSQ19VUkkgKz0gIiBcCisJZmlsZTovL2RlYmlhbi9jcGFuX2RlZmluc3RhbGxkaXJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZGJfZmlsZV92ZXIuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9kb2NfaW5mby5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2VuYzJ4c19pbmMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9lcnJub192ZXIuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9saWJwZXJsX2VtYmVkX2RvYy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL3Jlc3BlY3RfdW1hc2suZGlmZiBcCisJZmlsZTovL2RlYmlhbi93cml0YWJsZV9zaXRlX2RpcnMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9leHR1dGlsc19zZXRfbGlicGVybF9wYXRoLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbm9fcGFja2xpc3RfcGVybGxvY2FsLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcHJlZml4X2NoYW5nZXMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9pbnN0bW9kc2hfZG9jLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vbGRfcnVuX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9saWJuZXRfY29uZmlnX3BhdGguZGlmZiBcCisJZmlsZTovL2RlYmlhbi9tb2RfcGF0aHMuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wcnVuZV9saWJzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZml4ZXMvbmV0X3NtdHBfZG9jcy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3BlcmxpdnAuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9zcXVlbGNoLWxvY2FsZS13YXJuaW5ncy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL3NraXAtdXBzdHJlYW0tZ2l0LXRlc3RzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vc2tpcC1rZnJlZWJzZC1jcmFzaC5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL2RvY3VtZW50X21ha2VtYWtlcl9jY2ZsYWdzLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vZmluZF9odG1sMnRleHQuZGlmZiBcCisJZmlsZTovL2RlYmlhbi9wZXJsNWRiLXgtdGVybWluYWwtZW11bGF0b3IucGF0Y2ggXAorCWZpbGU6Ly9kZWJpYW4vY3Bhbi1taXNzaW5nLXNpdGUtZGlycy5kaWZmIFwKKwlmaWxlOi8vZGViaWFuL2ZpeGVzL21lbW9pemVfc3RvcmFibGVfbnN0b3JlLmRpZmYgXAorCWZpbGU6Ly9kZWJpYW4vcmVnZW4tc2tpcC5kaWZmIFwKKyIKKworU1JDX1VSSSArPSAiIFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlLlNILnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2luc3RhbGxwZXJsLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtZHlubG9hZGVyLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtbW9yZWNvbmZpZy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9sZXRnY2MtZmluZC1lcnJuby5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9nZW5lcmF0ZS1zaC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9uYXRpdmUtcGVybGluYy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9wZXJsLWVuYWJsZS1nZGJtLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2Nyb3NzLWdlbmVyYXRlX3V1ZG1hcC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXhfYmFkX3JwYXRoLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtYXJjaGxpYi1leHAucGF0Y2ggXAorICAgICAgICBmaWxlOi8vZHluYWxvYWRlcmhhY2sucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC0zMiBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtMzItbGUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTMyLWJlIFwKKyAgICAgICAgZmlsZTovL2NvbmZpZy5zaC02NCBcCisgICAgICAgIGZpbGU6Ly9jb25maWcuc2gtNjQtbGUgXAorICAgICAgICBmaWxlOi8vY29uZmlnLnNoLTY0LWJlIFwKKyAgICAgICAgZmlsZTovL21ha2VfZXh0LnBsLWZpeC1yZWdlbmVyYXRlLW1ha2VmaWxlLWZhaWxlZC13aGlsZS1jYy0ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vdC1ydW4tc3dpdGNoZXMudC1wZXJsNS1wZXJsLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL2V4dC1PREJNX0ZpbGUtaGludHMtbGludXgucGwtbGluay1saWJnZGJtX2NvbXBhdC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9leHQtT0RCTV9GaWxlLXQtb2RibS50LWZpeC10aGUtcGF0aC1vZi1kYm10X2NvbW1vbi5wLnBhdGNoIFwKKyAgICAgICAgZmlsZTovL3BlcmwtUGF0aFRvb2xzLWRvbi10LWZpbHRlci1vdXQtYmxpYi1mcm9tLUlOQy5wYXRjaCBcCisiCisKKyMgRml4IHRlc3QgY2FzZSBpc3N1ZXMKK1NSQ19VUklfYXBwZW5kX2NsYXNzLXRhcmdldCA9ICIgXAorICAgICAgICAgICAgZmlsZTovL3Rlc3QvZGlzdC10aHJlYWRzLXQtam9pbi50LWFkanVzdC1wcy1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3Rlc3QvZXh0LUR5bmFMb2FkZXItdC1EeW5hTG9hZGVyLnQtZml4LWNhbGxpbmctZGxfZmluZGZpbC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZmMGYwOWIxN2RlNDI2ZWZmMzIzNDI2Y2IxNDBlZTc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJlODNlYWQwYzVjMjZjYmJlNjI2ZmE0YmFjMWE0YmVhYmUyM2E5ZWViYzE1ZDM1YmE0OWNjZGUxMTg3OGUxOTYiCisKK2luaGVyaXQgcGVybG5hdGl2ZSBzaXRlaW5mbworCisjIFdoZXJlIHRvIGZpbmQgdGhlIG5hdGl2ZSBwZXJsCitIT1NUUEVSTCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybCR7UFZ9IgorCisjIFdoZXJlIHRvIGZpbmQgLnNvIGZpbGVzIC0gdXNlIHRoZSAtbmF0aXZlIHZlcnNpb25zIG5vdCB0aG9zZSBmcm9tIHRoZSB0YXJnZXQgYnVpbGQKK2V4cG9ydCBQRVJMSE9TVExJQiA9ICIke1NUQUdJTkdfTElCRElSX05BVElWRX0vcGVybC1uYXRpdmUvcGVybC8ke1BWfS8iCisKKyMgV2hlcmUgdG8gZmluZCBwZXJsIEBJTkMvI2luY2x1ZGUgZmlsZXMKKyMgLSB1c2UgdGhlIC1uYXRpdmUgdmVyc2lvbnMgbm90IHRob3NlIGZyb20gdGhlIHRhcmdldCBidWlsZAorZXhwb3J0IFBFUkxfTElCID0gIiR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsLyR7UFZ9LyIKK2V4cG9ydCBQRVJMX0FSQ0hMSUIgPSAiJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3BlcmwtbmF0aXZlL3BlcmwvJHtQVn0vIgorCisjIExERkxBR1MgZm9yIHNoYXJlZCBsaWJyYXJpZXMKK2V4cG9ydCBMRERMRkxBR1MgPSAiJHtMREZMQUdTfSAtc2hhcmVkIgorCitMREZMQUdTX2FwcGVuZCA9ICIgLWZzdGFjay1wcm90ZWN0b3IiCisKKyMgV2UncmUgYWxtb3N0IERlYmlhbiwgYXJlbid0IHdlPworQ0ZMQUdTICs9ICItRERFQklBTiIKKworZG9fbm9sYXJnZWZpbGUoKSB7CisJc2VkIC1pIC1lICJzLFwodXNlbGFyZ2VmaWxlcz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisJCS1lICJzLFwoZF9yZWFkZGlyNjRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisJCS1lICJzLFwocmVhZGRpcjY0X3JfcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisJCS1lICIvY2NmbGFnc191c2VsYXJnZWZpbGVzL2QiIFwKKwkJLWUgInMvLUR1c2VsYXJnZWZpbGVzLy8iIFwKKwkJLWUgInMvLURfRklMRV9PRkZTRVRfQklUUz02NC8vIiBcCisJCS1lICJzLy1EX0xBUkdFRklMRV9TT1VSQ0UvLyIgXAorCQkke1N9L0Nyb3NzL2NvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KK30KKworZG9fY29uZmlndXJlKCkgeworICAgICAgICAjIE1ha2UgaG9zdHBlcmwgaW4gYnVpbGQgZGlyZWN0b3J5IGJlIHRoZSBuYXRpdmUgcGVybAorICAgICAgICBsbiAtc2YgJHtIT1NUUEVSTH0gaG9zdHBlcmwKKworCWlmIFsgLW4gIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgLWEgLWUgIiR7Q09ORklHVVJFU1RBTVBGSUxFfSIgXTsgdGhlbgorCQlpZiBbICJgY2F0ICR7Q09ORklHVVJFU1RBTVBGSUxFfWAiICE9ICIke0JCX1RBU0tIQVNIfSIgLWEgLWUgTWFrZWZpbGUgXTsgdGhlbgorCQkJJHtNQUtFfSBjbGVhbgorCQlmaQorCQlmaW5kICR7U30gLW5hbWUgKi5zbyAtZGVsZXRlCisJZmkKKwlpZiBbIC1uICIke0NPTkZJR1VSRVNUQU1QRklMRX0iIF07IHRoZW4KKwkJZWNobyAke0JCX1RBU0tIQVNIfSA+ICR7Q09ORklHVVJFU1RBTVBGSUxFfQorCWZpCisKKyAgICAgICAgIyBEbyBvdXIgd29yayBpbiB0aGUgY3Jvc3Mgc3ViZGlyCisgICAgICAgIGNkIENyb3NzCisKKyAgICAgICAgIyBHZW5lcmF0ZSBjb25maWd1cmF0aW9uCisgICAgICAgIHJtIC1mIGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZm9yIGkgaW4gJHtXT1JLRElSfS9jb25maWcuc2ggXAorICAgICAgICAgICAgICAgICAke1dPUktESVJ9L2NvbmZpZy5zaC0ke1NJVEVJTkZPX0JJVFN9IFwKKyAgICAgICAgICAgICAgICAgJHtXT1JLRElSfS9jb25maWcuc2gtJHtTSVRFSU5GT19CSVRTfS0ke1NJVEVJTkZPX0VORElBTk5FU1N9OyBkbworICAgICAgICAgICAgY2F0ICRpID4+IGNvbmZpZy5zaC0ke1RBUkdFVF9BUkNIfS0ke1RBUkdFVF9PU30KKyAgICAgICAgZG9uZQorCisgICAgICAgICMgRml4dXBzIGZvciB1Y2xpYmMKKyAgICAgICAgaWYgWyAiJHtUQVJHRVRfT1N9IiA9ICJsaW51eC11Y2xpYmMiIC1vICIke1RBUkdFVF9PU30iID0gImxpbnV4LXVjbGliY2VhYmkiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzZWQgLWkgLWUgInMsXChkX2NyeXB0X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZnV0aW1lcz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9maW5pdGVsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChjcnlwdF9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0YnluYW1lX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGJ5bmFtZV9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0YnlhZGRyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGJ5YWRkcl9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfZ2V0bmV0ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGVudF9yX3Byb3RvPVwpJ1x3KycsXDEnMCcsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGRfc29ja2F0bWFyaz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zb2NrYXRtYXJrcHJvdG89XCknXHcrJyxcMScwJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9lYWNjZXNzPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvYmFzZT1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRzdGRpbz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLC1mc3RhY2stcHJvdGVjdG9yLC1mbm8tc3RhY2stcHJvdGVjdG9yLGciIFwKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorICAgICAgICBmaQorICAgICAgICAjIEZpeHVwcyBmb3IgbXVzbAorICAgICAgICBpZiBbICIke1RBUkdFVF9PU30iID0gImxpbnV4LW11c2wiIC1vICIke1RBUkdFVF9PU30iID0gImxpbnV4LW11c2xlYWJpIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgc2VkIC1pIC1lICJzLFwoZF9saWJtX2xpYl92ZXJzaW9uPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvX3B0cl9sdmFsX3NldHNfY250PVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChkX3N0ZGlvYmFzZT1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9zdGRzdGRpbz1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9nZXRuZXRieW5hbWVfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZF9maW5pdGVsPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwcm90b2J5bmFtZV9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwd2VudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRzZXJ2ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldGhvc3RlbnRfcj1cKSdkZWZpbmUnLFwxJ3VuZGVmJyxnIiBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICJzLFwoZ2V0bmV0ZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldG5ldGJ5YWRkcl9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwcm90b2VudF9yPVwpJ2RlZmluZScsXDEndW5kZWYnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsXChnZXRwcm90b2J5bnVtYmVyX3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGdldGdyZW50X3I9XCknZGVmaW5lJyxcMSd1bmRlZicsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGlfZmNudGw9XCkndW5kZWYnLFwxJ2RlZmluZScsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicyxcKGhfZmNudGw9XCknZmFsc2UnLFwxJ3RydWUnLGciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgInMsLWZzdGFjay1wcm90ZWN0b3IsLWZuby1zdGFjay1wcm90ZWN0b3IsZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAtZSAicywtbG5zbCwsZyIgXAorICAgICAgICAgICAgICAgICAgICBjb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisgICAgICAgIGZpCisKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2xhcmdlZmlsZScsICcnLCAnZG9fbm9sYXJnZWZpbGUnLCBkKX0KKworICAgICAgICAjIFVwZGF0ZSBzb21lIHBhdGhzIGluIHRoZSBjb25maWd1cmF0aW9uCisgICAgICAgIHNlZCAtaSAtZSAncyxAQVJDSEAtdGhyZWFkLW11bHRpLCxnJyBcCisgICAgICAgICAgICAgICAtZSAncyxAQVJDSEAsJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9LGcnIFwKKyAgICAgICAgICAgICAgIC1lICdzLEBTVEFHSU5HRElSQCwke1NUQUdJTkdfRElSX0hPU1R9LGcnIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBJTkNMVURFRElSQCwke1NUQUdJTkdfSU5DRElSfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicyxATElCRElSQCwke2xpYmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsQEJBU0VMSUJESVJALCR7YmFzZV9saWJkaXJ9LGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLEBFWEVDUFJFRklYQCwke2V4ZWNfcHJlZml4fSxnIiBcCisgICAgICAgICAgICAgICAtZSAncyxAVVNSQklOQCwke2JpbmRpcn0sZycgXAorICAgICAgICAgICAgY29uZmlnLnNoLSR7VEFSR0VUX0FSQ0h9LSR7VEFSR0VUX09TfQorCisJY2FzZSAiJHtUQVJHRVRfQVJDSH0iIGluCisJCXg4Nl82NCB8IHBvd2VycGMgfCBzMzkwKQorCQkJc2VkIC1pIC1lICJzLFwobmVlZF92YV9jb3B5PVwpJ3VuZGVmJyxcMSdkZWZpbmUnLGciIFwKKwkJCQljb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisJCQk7OworCQlhcm0pCisJCQlzZWQgLWkgLWUgInMsXChkX3UzMmFsaWduPVwpJ3VuZGVmJyxcMSdkZWZpbmUnLGciIFwKKwkJCQljb25maWcuc2gtJHtUQVJHRVRfQVJDSH0tJHtUQVJHRVRfT1N9CisJCQk7OworCWVzYWMKKyAgICAgICAgIyBUaGVzZSBhcmUgc3RyZXduIGFsbCBvdmVyIHRoZSBzb3VyY2UgdHJlZQorICAgICAgICBmb3IgZm9vIGluIGBncmVwIC1JIC0tZXhjbHVkZT0iKi5wYXRjaCIgLS1leGNsdWRlPSIqLmRpZmYiIC0tZXhjbHVkZT0iKi5wb2QiIC0tZXhjbHVkZT0iUkVBRE1FKiIgLW0xICIvdXNyL2luY2x1ZGUvLipcLmgiICR7U30vKiAtciAtbGAgJHtTfS91dGlscy9oMnhzLlBMIDsgZG8KKyAgICAgICAgICAgIGVjaG8gRml4aW5nOiAkZm9vCisgICAgICAgICAgICBzZWQgLWUgJ3N8XChbICJeJ1wnJ0ldXCtcKS91c3IvaW5jbHVkZS98XDEke1NUQUdJTkdfSU5DRElSfS98ZycgLWkgJGZvbworICAgICAgICBkb25lCisKKyAgICAgICAgcm0gLWYgY29uZmlnCisgICAgICAgIGVjaG8gIkFSQ0ggPSAke1RBUkdFVF9BUkNIfSIgPiBjb25maWcKKyAgICAgICAgZWNobyAiT1MgPSAke1RBUkdFVF9PU30iID4+IGNvbmZpZworfQorCitkb19jb21waWxlKCkgeworICAgICAgICAjIEZpeCB0byBhdm9pZCByZWN1cnNpdmUgc3Vic3RpdHV0aW9uIG9mIHBhdGgKKyAgICAgICAgc2VkIC1pIC1lICdzfChAbGlicGF0aCwgIi4qInwoQGxpYnBhdGgsICIke1NUQUdJTkdfTElCRElSfSJ8ZycgY3Bhbi9FeHRVdGlscy1NYWtlTWFrZXIvbGliL0V4dFV0aWxzL0xpYmxpc3QvS2lkLnBtCisKKyAgICAgICAgY2QgQ3Jvc3MKKyAgICAgICAgb2VfcnVubWFrZSBwZXJsIExEPSIke0NDTER9IgorfQorCitkb19pbnN0YWxsKCkgeworCSNleHBvcnQgaG9zdHBlcmw9IiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wZXJsLW5hdGl2ZS9wZXJsJHtQVn0iCisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorICAgICAgICAjIEFkZCBwZXJsIHBvaW50aW5nIGF0IGN1cnJlbnQgdmVyc2lvbgorICAgICAgICBsbiAtc2YgcGVybCR7UFZ9ICR7RH0ke2JpbmRpcn0vcGVybAorCisgICAgICAgIGxuIC1zZiBwZXJsICR7RH0vJHtsaWJkaXJ9L3Blcmw1CisKKyAgICAgICAgIyBSZW1vdmUgdW53YW50ZWQgZmlsZSBhbmQgZW1wdHkgZGlyZWN0b3JpZXMKKyAgICAgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcGVybC8ke1BWfS8ucGFja2xpc3QKKwlybWRpciAke0R9LyR7bGliZGlyfS9wZXJsL3NpdGVfcGVybC8ke1BWfQorCXJtZGlyICR7RH0vJHtsaWJkaXJ9L3Blcmwvc2l0ZV9wZXJsCisKKyAgICAgICAgIyBGaXggdXAgc2hhcmVkIGxpYnJhcnkKKyAgICAgICAgbXYgJHtEfS8ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL2xpYnBlcmwuc28gJHtEfS8ke2xpYmRpcn0vbGlicGVybC5zby4ke1BWfQorICAgICAgICBsbiAtc2YgbGlicGVybC5zby4ke1BWfSAke0R9LyR7bGliZGlyfS9saWJwZXJsLnNvLjUKKyAgICAgICAgbG4gLXNmIC4uLy4uLy4uL2xpYnBlcmwuc28uJHtQVn0gJHtEfS8ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL2xpYnBlcmwuc28KKworICAgICAgICAjIHRhcmdldCBjb25maWcsIHVzZWQgYnkgY3Bhbi5iYmNsYXNzIHRvIGV4dHJhY3QgdmVyc2lvbiBpbmZvcm1hdGlvbgorICAgICAgICBpbnN0YWxsIGNvbmZpZy5zaCAke0R9JHtsaWJkaXJ9L3BlcmwKKworICAgICAgICBsbiAtcyBDb25maWdfaGVhdnkucGwgJHtEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS10YXJnZXQucGwKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfSR7YmluZGlyfS9wZXJsIFwKKyAgICAgICAgICAgIFBFUkw1TElCPSckUEVSTDVMSUI6JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3Blcmw6JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3BlcmwvJHtQVn06JE9FQ09SRV9OQVRJVkVfU1lTUk9PVC8ke2xpYmRpcl9uYXRpdmVzZGt9L3Blcmwvc2l0ZV9wZXJsLyR7UFZ9OiRPRUNPUkVfTkFUSVZFX1NZU1JPT1QvJHtsaWJkaXJfbmF0aXZlc2RrfS9wZXJsL3ZlbmRvcl9wZXJsLyR7UFZ9JworfQorCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInBlcmxfcGFja2FnZV9wcmVwcm9jZXNzIgorCitwZXJsX3BhY2thZ2VfcHJlcHJvY2VzcyAoKSB7CisgICAgICAgICMgRml4IHVwIGluc3RhbGxlZCBjb25maWd1cmF0aW9uCisgICAgICAgIHNlZCAtaSAtZSAicywke0R9LCxnIiBcCisgICAgICAgICAgICAgICAtZSAicywtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSwsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsLWlzeXN0ZW0ke1NUQUdJTkdfSU5DRElSfSAsLGciIFwKKyAgICAgICAgICAgICAgIC1lICJzLCR7U1RBR0lOR19MSUJESVJ9LCR7bGliZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSfSwke2JpbmRpcn0sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0lOQ0RJUn0sJHtpbmNsdWRlZGlyfSxnIiBcCisgICAgICAgICAgICAgICAtZSAicywke1NUQUdJTkdfQklORElSX05BVElWRX0vcGVybC1uYXRpdmUvLCR7YmluZGlyfS8sZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9LywsZyIgXAorICAgICAgICAgICAgICAgLWUgInMsJHtTVEFHSU5HX0JJTkRJUl9UT09MQ0hBSU59LyR7VEFSR0VUX1BSRUZJWH0sJHtiaW5kaXJ9LGciIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vaDJ4cyBcCisgICAgICAgICAgICAke1BLR0R9JHtiaW5kaXJ9L2gycGggXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QybWFuIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kMnRleHQgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2QydXNhZ2UgXAorICAgICAgICAgICAgJHtQS0dEfSR7YmluZGlyfS9wb2RjaGVja2VyIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2JpbmRpcn0vcG9kc2VsZWN0IFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL2NvbmZpZy5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFL3BlcmwuaCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS9wcC5oIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWcucG0gXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZy5wb2QgXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS5wbCBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvTGlibGlzdC9LaWQucG0gXAorICAgICAgICAgICAgJHtQS0dEfSR7bGliZGlyfS9wZXJsLyR7UFZ9L0ZpbGVDYWNoZS5wbSBcCisgICAgICAgICAgICAke1BLR0R9JHtsaWJkaXJ9L3BlcmwvJHtQVn0vcG9kLyoucG9kIFwKKyAgICAgICAgICAgICR7UEtHRH0ke2xpYmRpcn0vcGVybC9jb25maWcuc2gKK30KKworUEFDS0FHRVMgPSAicGVybC1kYmcgcGVybCBwZXJsLW1pc2MgcGVybC1kZXYgcGVybC1wb2QgcGVybC1kb2MgcGVybC1saWIgXAorICAgICAgICAgICAgcGVybC1tb2R1bGUtY3BhbiBwZXJsLW1vZHVsZS1jcGFucGx1cyBwZXJsLW1vZHVsZS11bmljb3JlIgorRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L3BlcmwgJHtiaW5kaXJ9L3Blcmwke1BWfSBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9Db25maWcucG0gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vc3RyaWN0LnBtIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3dhcm5pbmdzLnBtIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3dhcm5pbmdzIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3ZhcnMucG0gXAorICAgICAgICAgICAgICAiCitGSUxFU18ke1BOfV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiAke2JpbmRpcn0vcGVybC5yZWFsIgorUlBST1ZJREVTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1zdHJpY3QgcGVybC1tb2R1bGUtdmFycyBwZXJsLW1vZHVsZS1jb25maWcgcGVybC1tb2R1bGUtd2FybmluZ3MgXAorICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS13YXJuaW5ncy1yZWdpc3RlciIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9DT1JFIgorRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWJwZXJsLnNvKiBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3Blcmw1IFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC9jb25maWcuc2ggXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NvbmZpZ19oZWF2eS5wbCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ29uZmlnX2hlYXZ5LXRhcmdldC5wbCIKK0ZJTEVTXyR7UE59LXBvZCA9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9wb2QgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLnBvZCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLnBvZCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vKi8qLyoucG9kICIKK0ZJTEVTX3BlcmwtbWlzYyA9ICIke2JpbmRpcn0vKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L2F1dG8vKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L2F1dG8vKi8qLyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ09SRS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS8qLyovKi8uZGVidWcgIgorRklMRVNfJHtQTn0tZG9jID0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi50eHQgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9LyovKi8qLnR4dCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vYXV0by9YUy9UeXBlbWFwIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9CL2Fzc2VtYmxlIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9CL2NjX2hhcm5lc3MgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvZGlzYXNzZW1ibGUgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0IvbWFrZWxpYmxpbmtzIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DR0kvZWcgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU4vUEFVU0UyMDAzLnB1YiBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi9TSUdOQVRVUkUgXAorCQkgICAke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUy9TaGVsbC9EZWZhdWx0L1BsdWdpbnMvSE9XVE8ucG9kIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FbmNvZGUvZW5jb2RlLmggXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL01BTklGRVNULlNLSVAgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L0V4dFV0aWxzL05PVEVTIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9FeHRVdGlscy9QQVRDSElORyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvdHlwZW1hcCBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMveHN1YnBwIFwKKwkJICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vRXh0VXRpbHMvQ2hhbmdlc19FVS1JbnN0YWxsIFwKKyAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGVybC8ke1BWfS9OZXQvKi5lZyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS9ta3RhYmxlcyBcCisgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vdW5pY29yZS9ta3RhYmxlcy5sc3QgXAorICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wZXJsLyR7UFZ9L3VuaWNvcmUvdmVyc2lvbiAiCisKK0ZJTEVTX3BlcmwtbW9kdWxlLWNwYW4gKz0gIiR7bGliZGlyfS9wZXJsLyR7UFZ9L0NQQU4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTi5wbSIKK0ZJTEVTX3BlcmwtbW9kdWxlLWNwYW5wbHVzICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS9DUEFOUExVUyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BlcmwvJHtQVn0vQ1BBTlBMVVMucG0iCitGSUxFU19wZXJsLW1vZHVsZS11bmljb3JlICs9ICIke2xpYmRpcn0vcGVybC8ke1BWfS91bmljb3JlIgorCisjIENyZWF0ZSBhIHBlcmwtbW9kdWxlcyBwYWNrYWdlIHJlY29tbWVuZGluZyBhbGwgdGhlIG90aGVyIHBlcmwKKyMgcGFja2FnZXMgKGFjdHVhbGx5IHRoZSBub24gbW9kdWxlcyBwYWNrYWdlcyBhbmQgbm90IGNyZWF0ZWQgdG9vKQorQUxMT1dfRU1QVFlfcGVybC1tb2R1bGVzID0gIjEiCitQQUNLQUdFU19hcHBlbmQgPSAiIHBlcmwtbW9kdWxlcyAiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L3BlcmwvJHtQVn0nKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGxpYmRpciwgJ2F1dG8vKFteLl0qKS9bXi9dKlwuKHNvfGxkfGl4fGFsKScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnTW9kdWxlLyhbXlwvXSopXC5wbScsICdwZXJsLW1vZHVsZS0lcycsICdwZXJsIG1vZHVsZSAlcycsIHJlY3Vyc2l2ZT1UcnVlLCBhbGxvd19kaXJzPUZhbHNlLCBtYXRjaF9wYXRoPVRydWUsIHByZXBlbmQ9RmFsc2UpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgbGliZGlyLCAnTW9kdWxlLyhbXlwvXSopLy4qJywgJ3BlcmwtbW9kdWxlLSVzJywgJ3BlcmwgbW9kdWxlICVzJywgcmVjdXJzaXZlPVRydWUsIGFsbG93X2RpcnM9RmFsc2UsIG1hdGNoX3BhdGg9VHJ1ZSwgcHJlcGVuZD1GYWxzZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWJkaXIsICcoXig/IShDUEFOXC98Q1BBTlBMVVNcL3xNb2R1bGVcL3x1bmljb3JlXC98YXV0b1wvKVteXC9dKS4qKVwuKHBtfHBsfGUyeCknLCAncGVybC1tb2R1bGUtJXMnLCAncGVybCBtb2R1bGUgJXMnLCByZWN1cnNpdmU9VHJ1ZSwgYWxsb3dfZGlycz1GYWxzZSwgbWF0Y2hfcGF0aD1UcnVlLCBwcmVwZW5kPUZhbHNlKQorCisgICAgIyBwZXJsLW1vZHVsZXMgc2hvdWxkIHJlY29tbWVuZCBldmVyeSBwZXJsIG1vZHVsZSwgYW5kIG9ubHkgdGhlCisgICAgIyBtb2R1bGVzLiBEb24ndCBhdHRlbXB0IHRvIHVzZSB0aGUgcmVzdWx0IG9mIGRvX3NwbGl0X3BhY2thZ2VzKCkgYXMgc29tZQorICAgICMgbW9kdWxlcyBhcmUgbWFudWFsbHkgc3BsaXQgKGVnLiBwZXJsLW1vZHVsZS11bmljb3JlKS4KKyAgICBwYWNrYWdlcyA9IGZpbHRlcihsYW1iZGEgcDogJ3BlcmwtbW9kdWxlLScgaW4gcCwgZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSkKKyAgICBkLnNldFZhcigiUlJFQ09NTUVORFNfJHtQTn0tbW9kdWxlcyIsICcgJy5qb2luKHBhY2thZ2VzKSkKK30KKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnBlcmwtbW9kdWxlLS4qIgorUEFDS0FHRVNfRFlOQU1JQ19jbGFzcy1uYXRpdmVzZGsgKz0gIl5uYXRpdmVzZGstcGVybC1tb2R1bGUtLioiCisKK1JQUk9WSURFU19wZXJsLWxpYiA9ICJwZXJsLWxpYiIKKworcmVxdWlyZSBwZXJsLXJkZXBlbmRzXyR7UFZ9LmluYworcmVxdWlyZSBwZXJsLXB0ZXN0LmluYworCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiKi5wbSAqLnBvZCAqLmggKi5wbCAqLnNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWFiNWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiSGVscGVyIHRvb2wgdXNlZCB3aGVuIGNvbXBpbGluZyIKK0RFU0NSSVBUSU9OID0gInBrZy1jb25maWcgaXMgYSBoZWxwZXIgdG9vbCB1c2VkIHdoZW4gY29tcGlsaW5nIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzLiBJdCBoZWxwcyBkZXRlcm1pbmVkIFwKK3RoZSBjb3JyZWN0IGNvbXBpbGVyL2xpbmsgb3B0aW9ucy4gIEl0IGlzIGFsc28gbGFuZ3VhZ2UtYWdub3N0aWMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnL3dpa2kvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1wa2ctY29uZmlnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gImdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitTUkNSRVYgPSAiNDAzNDJkZDBlYWQwNWQ0NTdhMmE0ZTY5MmNmODY1ZjUwMDMzYTcwOSIKK1BWID0gIjAuMjgrZ2l0JHtTUkNQVn0iCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL3BrZy1jb25maWciCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtaW50ZXJuYWwtZ2xpYiIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS13aXRoLWludGVybmFsLWdsaWIiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aC1pbnRlcm5hbC1nbGliIgorCithY3BhdGhzID0gIi1JIC4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworIyBTZXQgYW4gZW1wdHkgZGV2IHBhY2thZ2UgdG8gZW5zdXJlIHRoZSBiYXNlIFBOIHBhY2thZ2UgZ2V0cworIyB0aGUgcGtnLm00IG1hY3JvcywgcGtnY29uZmlnIGRvZXMgbm90IGRlbGl2ZXIgYW55IG90aGVyIC1kZXYKKyMgZmlsZXMuCitGSUxFU18ke1BOfS1kZXYgPSAiIgorRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYWNsb2NhbC9wa2cubTQiCisKKyMgV2hlbiB1c2luZyB0aGUgUlBNIGdlbmVyYXRlZCBhdXRvbWF0aWMgcGFja2FnZSBkZXBlbmRlbmNpZXMsIHNvbWUgcGFja2FnZXMKKyMgd2lsbCBlbmQgdXAgcmVxdWlyaW5nICdwa2djb25maWcocGtnLWNvbmZpZyknLiAgQWxsb3cgdGhpcyBiZWhhdmlvciBieQorIyBzcGVjaWZ5aW5nIGFuIGFwcHJvcHJpYXRlIHByb3ZpZGUuCitSUFJPVklERVNfJHtQTn0gKz0gInBrZ2NvbmZpZyhwa2ctY29uZmlnKSIKKworIyBJbnN0YWxsIGEgcGtnLWNvbmZpZy1uYXRpdmUgd3JhcHBlciB0aGF0IHdpbGwgdXNlIHRoZSBuYXRpdmUgc3lzcm9vdCBpbnN0ZWFkCisjIG9mIHRoZSBNQUNISU5FIHN5c3Jvb3QsIGZvciB1c2luZyBwa2ctY29uZmlnIHdoZW4gYnVpbGRpbmcgbmF0aXZlIHRvb2xzLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBzZWQgLWUgInN8QFBBVEhfTkFUSVZFQHwke1BLR19DT05GSUdfUEFUSH18IiBcCisgICAgICAgIC1lICJzfEBMSUJESVJfTkFUSVZFQHwke1BLR19DT05GSUdfTElCRElSfXwiIFwKKyAgICAgICAgPCAke1dPUktESVJ9L3BrZy1jb25maWctbmF0aXZlLmluID4gJHtCfS9wa2ctY29uZmlnLW5hdGl2ZQorICAgIGluc3RhbGwgLW03NTUgJHtCfS9wa2ctY29uZmlnLW5hdGl2ZSAke0R9JHtiaW5kaXJ9L3BrZy1jb25maWctbmF0aXZlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wa2djb25maWcvcGtnY29uZmlnL2ZpeC1nbGliLWNvbmZpZ3VyZS1saWJ0b29sLXVzYWdlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzYyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9maXgtZ2xpYi1jb25maWd1cmUtbGlidG9vbC11c2FnZS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogcGtnLWNvbmZpZy0wLjI4L2dsaWIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGtnLWNvbmZpZy0wLjI4Lm9yaWcvZ2xpYi9jb25maWd1cmUuYWMKKysrKyBwa2ctY29uZmlnLTAuMjgvZ2xpYi9jb25maWd1cmUuYWMKK0BAIC0xNDM4LDcgKzE0MzgsNyBAQCBpZiB0ZXN0IHgiJGdsaWJfbmF0aXZlX3dpbjMyIiA9IHh5ZXM7IHRoCisgICBHX01PRFVMRV9MREZMQUdTPQorIGVsc2UKKyAgIGV4cG9ydCBTRUQKKy0gIEdfTU9EVUxFX0xERkxBR1M9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKysgIEdfTU9EVUxFX0xERkxBR1M9YCguLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGZpCisgZG5sIEdfTU9EVUxFX0lNUEw9IGRvbid0IHJlc2V0LCBzbyBjbWQtbGluZSBjYW4gb3ZlcnJpZGUKKyBHX01PRFVMRV9ORUVEX1VTQ09SRT0wCitAQCAtMTUwMywxMyArMTUwMywxMyBAQCBpZiB0ZXN0ICIkR19NT0RVTEVfSU1QTCIgPSAiR19NT0RVTEVfSU1QCisgCUxERkxBR1M9IiRMREZMQUdTICRHX01PRFVMRV9MREZMQUdTIgorIGRubCAqKiogY2hlY2sgZm9yIE9TRjEvNS4wIFJUTERfR0xPQkFMIGJyb2tlbm5lc3MKKyAJZWNobyAidm9pZCBnbGliX3BsdWdpbl90ZXN0KHZvaWQpIHsgfSIgPiBwbHVnaW4uYworLQkke1NIRUxMfSAuL2xpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKysJJHtTSEVMTH0gLi8ke2hvc3RfYWxpYXN9LWxpYnRvb2wgLS1tb2RlPWNvbXBpbGUgLS10YWc9Q0MgJHtDQ30gJHtDRkxBR1N9IFwKKyAJCSR7Q1BQRkxBR1N9IC1jIC1vIHBsdWdpbi5sbyBwbHVnaW4uYyA+L2Rldi9udWxsIDI+JjEKKy0JJHtTSEVMTH0gLi9saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisrCSR7U0hFTEx9IC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tbW9kZT1saW5rIC0tdGFnPUNDICR7Q0N9ICR7Q0ZMQUdTfSBcCisgCQkke0xERkxBR1N9IC1tb2R1bGUgLW8gcGx1Z2luLmxhIC1leHBvcnQtZHluYW1pYyBcCisgCQktc2hyZXh0ICIubyIgLWF2b2lkLXZlcnNpb24gcGx1Z2luLmxvIFwKKyAJCS1ycGF0aCAvZG9udC9jYXJlID4vZGV2L251bGwgMj4mMQorLQlldmFsIGAuL2xpYnRvb2wgLS1jb25maWcgfCBncmVwIF5vYmpkaXJgCisrCWV2YWwgYC4vJHtob3N0X2FsaWFzfS1saWJ0b29sIC0tY29uZmlnIHwgZ3JlcCBeb2JqZGlyYAorIAlBQ19DQUNIRV9DSEVDSyhbZm9yIFJUTERfR0xPQkFMIGJyb2tlbm5lc3NdLAorIAkJZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbixbCisgCQlBQ19UUllfUlVOKFsKK0BAIC0xNTgyLDcgKzE1ODIsNyBAQCBmaQorIAorIEFDX01TR19DSEVDS0lORyhmb3IgdGhlIHN1ZmZpeCBvZiBtb2R1bGUgc2hhcmVkIGxpYnJhcmllcykKKyBleHBvcnQgU0VECistc2hyZXh0X2NtZHM9YC4vbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorK3NocmV4dF9jbWRzPWAuLyR7aG9zdF9hbGlhc30tbGlidG9vbCAtLWNvbmZpZyB8IGdyZXAgJ15zaHJleHRfY21kcz0nYAorIGV2YWwgJHNocmV4dF9jbWRzCisgbW9kdWxlPXllcyBldmFsIHN0ZF9zaHJleHQ9JHNocmV4dF9jbWRzCisgIyBjaG9wIHRoZSBpbml0aWFsIGRvdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1uYXRpdmUuaW4gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZy9wa2ctY29uZmlnLW5hdGl2ZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ0YmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWcvcGtnLWNvbmZpZy1uYXRpdmUuaW4KQEAgLTAsMCArMSw3IEBACisjISAvYmluL3NoCisKK1BLR19DT05GSUdfUEFUSD0iQFBBVEhfTkFUSVZFQCIKK1BLR19DT05GSUdfTElCRElSPSJATElCRElSX05BVElWRUAiCit1bnNldCBQS0dfQ09ORklHX1NZU1JPT1RfRElSCisKK3BrZy1jb25maWcgIiRAIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BrZ2NvbmZpZy9wa2djb25maWdfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTUxMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcGtnY29uZmlnL3BrZ2NvbmZpZ19naXQuYmIKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHBrZ2NvbmZpZy5pbmMKKworU1JDX1VSSSArPSAiIFwKKyAgICAgICAgICAgIGZpbGU6Ly9wa2ctY29uZmlnLW5hdGl2ZS5pbiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LWdsaWItY29uZmlndXJlLWxpYnRvb2wtdXNhZ2UucGF0Y2ggXAorICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcG9zdGluc3QtaW50ZXJjZXB0L25hdGl2ZXNkay1wb3N0aW5zdC1pbnRlcmNlcHRfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3Bvc3RpbnN0LWludGVyY2VwdC9uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0XzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM0NWM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3Bvc3RpbnN0LWludGVyY2VwdC9uYXRpdmVzZGstcG9zdGluc3QtaW50ZXJjZXB0XzEuMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlBvc3RpbnN0YWxsIHNjcmlwdGxldHMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitGSUxFU18ke1BOfV9hcHBlbmQgPSAiICR7ZGF0YWRpcn0vcG9zdGluc3QtaW50ZXJjZXB0cy8qIgorCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIgorZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzCisJaW5zdGFsbCAtbSA3NTUgJHtDT1JFQkFTRX0vc2NyaXB0cy9wb3N0aW5zdC1pbnRlcmNlcHRzL3Bvc3RpbnN0X2ludGVyY2VwdCAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfZm9udF9jYWNoZSAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfaWNvbl9jYWNoZSAke0R9JHtkYXRhZGlyfS9wb3N0aW5zdC1pbnRlcmNlcHRzLworCWluc3RhbGwgLW0gNzU1ICR7Q09SRUJBU0V9L3NjcmlwdHMvcG9zdGluc3QtaW50ZXJjZXB0cy91cGRhdGVfcGl4YnVmX2NhY2hlICR7RH0ke2RhdGFkaXJ9L3Bvc3RpbnN0LWludGVyY2VwdHMvCit9CisKK2luaGVyaXQgbmF0aXZlc2RrCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9tYWNyb3MucHJlbGluayBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvbWFjcm9zLnByZWxpbmsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxNjY5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvbWFjcm9zLnByZWxpbmsKQEAgLTAsMCArMSw1IEBACisjIHJwbS00LjEgdmVyaWZpZXMgcHJlbGlua2VkIGxpYnJhcmllcyB1c2luZyBhIHByZWxpbmsgdW5kbyBoZWxwZXIuCisjICAgICAgIE5vdGU6IFRoZSAybmQgdG9rZW4gaXMgdXNlZCBhcyBhcmd2WzBdIGFuZCAibGlicmFyeSIgaXMgYQorIyAgICAgICBwbGFjZWhvbGRlciB0aGF0IHdpbGwgYmUgZGVsZXRlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKKyMgICAgICAgbGlicmFyeSBmaWxlIHBhdGguCislX19wcmVsaW5rX3VuZG9fY21kICAgICAvdXNyL3NiaW4vcHJlbGluayBwcmVsaW5rIC15IGxpYnJhcnkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyZjIzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5jb25mCkBAIC0wLDAgKzEsMTggQEAKKyMgVGhpcyBjb25maWcgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgYm90aCB3aXRoIGJpbmFyaWVzCisjIGFuZCBsaWJyYXJpZXMgcHJlbGluayBzaG91bGQgY29uc2lkZXIgYnkgZGVmYXVsdC4KKyMgSWYgYSBkaXJlY3RvcnkgbmFtZSBpcyBwcmVmaXhlZCB3aXRoIGAtbCAnLCB0aGUgZGlyZWN0b3J5IGhpZXJhcmNoeQorIyB3aWxsIGJlIHdhbGtlZCBhcyBsb25nIGFzIGZpbGVzeXN0ZW0gYm91bmRhcmllcyBhcmUgbm90IGNyb3NzZWQuCisjIElmIGEgZGlyZWN0b3J5IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCBgLWggJywgc3ltYm9saWMgbGlua3MgaW4gYQorIyBkaXJlY3RvcnkgaGllcmFyY2h5IGFyZSBmb2xsb3dlZC4KKy1sIC91c3IvbG9jYWwvc2JpbgorLWwgL3NiaW4KKy1sIC91c3Ivc2JpbgorLWwgL3Vzci9sb2NhbC9iaW4KKy1sIC9iaW4KKy1sIC91c3IvYmluCistbCAvdXNyL1gxMVI2L2JpbgorLWwgL3Vzci9nYW1lcworLWwgL3Vzci9sb2NhbC9saWJ7LDMyLDY0LHgzMn0KKy1sIC9saWJ7LDMyLDY0LHgzMn0KKy1sIC91c3IvbGlieywzMiw2NCx4MzJ9CistbCAvdXNyL1gxMVI2L2xpYnssMzIsNjQseDMyfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNyb24uZGFpbHkgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuY3Jvbi5kYWlseQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNjMDczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ByZWxpbmsvcHJlbGluay9wcmVsaW5rLmNyb24uZGFpbHkKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9kZWZhdWx0L3ByZWxpbmsKKworcmVuaWNlICsxOSAtcCAkJCA+L2Rldi9udWxsIDI+JjEKKworaWYgWyAiJFBSRUxJTktJTkciICE9IHllcyBdOyB0aGVuCisgIGlmIFsgLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIF07IHRoZW4KKyAgICBlY2hvIC91c3Ivc2Jpbi9wcmVsaW5rIC11YXYgPiAvdmFyL2xvZy9wcmVsaW5rLmxvZworICAgIC91c3Ivc2Jpbi9wcmVsaW5rIC11YXYgPj4gL3Zhci9sb2cvcHJlbGluay5sb2cgMj4mMQorICAgIHJtIC1mIC9ldGMvcHJlbGluay5jYWNoZQorICAgICMgUmVzdGFydCBpbml0IGlmIG5lZWRlZAorICAgIFsgLW4gIiQoZmluZCBgbGRkIC9zYmluL2luaXQgfCBhd2sgJ3sgcHJpbnQgJDMgfSdgIC9zYmluL2luaXQgLWN0aW1lIC0xIDI+L2Rldi9udWxsICkiIF0gJiYgL3NiaW4vdGVsaW5pdCB1CisgIGZpCisgIGV4aXQgMAorZmkKKworaWYgWyAhIC1mIC9ldGMvcHJlbGluay5jYWNoZSAtbyAtZiAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZm9yY2UgXSBcCisgICB8fCBncmVwIC1xICdecHJlbGluay1FTEYwLlswLTJdJyAvZXRjL3ByZWxpbmsuY2FjaGU7IHRoZW4KKyAgIyBJZiBjYWNoZSBkb2VzIG5vdCBleGlzdCBvciBpcyBmcm9tIG9sZGVyIHByZWxpbmsgdmVyc2lvbnMgb3IKKyAgIyBpZiB3ZSB3ZXJlIGFza2VkIHRvIGV4cGxpY2l0ZWx5LCBmb3JjZSBmdWxsIHByZWxpbmtpbmcKKyAgcm0gLWYgL2V0Yy9wcmVsaW5rLmNhY2hlIC92YXIvbGliL21pc2MvcHJlbGluay5mb3JjZQorICBQUkVMSU5LX09QVFM9IiRQUkVMSU5LX09QVFMgLWYiCisgIGRhdGUgPiAvdmFyL2xpYi9taXNjL3ByZWxpbmsuZnVsbAorZWxpZiBbIC1uICIkUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUwiIFwKKyAgICAgICAtYSAiYGZpbmQgL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwgLW10aW1lIC0ke1BSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMfSAyPi9kZXYvbnVsbGAiIFwKKwkgID0gL3Zhci9saWIvbWlzYy9wcmVsaW5rLmZ1bGwgXTsgdGhlbgorICAjIElmIHByZWxpbmsgd2l0aG91dCAtcSBoYXMgYmVlbiBydW4gaW4gdGhlIGxhc3QKKyAgIyBQUkVMSU5LX0ZVTExfVElNRV9JTlRFUlZBTCBkYXlzLCBqdXN0IHVzZSBxdWljayBtb2RlCisgIFBSRUxJTktfT1BUUz0iJFBSRUxJTktfT1BUUyAtcSIKK2Vsc2UKKyAgZGF0ZSA+IC92YXIvbGliL21pc2MvcHJlbGluay5mdWxsCitmaQorCitlY2hvIC91c3Ivc2Jpbi9wcmVsaW5rIC1hdiAkUFJFTElOS19PUFRTID4gL3Zhci9sb2cvcHJlbGluay5sb2cKKy91c3Ivc2Jpbi9wcmVsaW5rIC1hdiAkUFJFTElOS19PUFRTID4+IC92YXIvbG9nL3ByZWxpbmsubG9nIDI+JjEKKyMgUmVzdGFydCBpbml0IGlmIG5lZWRlZAorWyAtbiAiJChmaW5kIGBsZGQgL3NiaW4vaW5pdCB8IGF3ayAneyBwcmludCAkMyB9J2AgL3NiaW4vaW5pdCAtY3RpbWUgLTEgMj4vZGV2L251bGwgKSIgXSAmJiAvc2Jpbi90ZWxpbml0IHUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuZGVmYXVsdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmsvcHJlbGluay5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODAyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rL3ByZWxpbmsuZGVmYXVsdApAQCAtMCwwICsxLDIyIEBACisjIFNldCB0aGlzIHRvIG5vIHRvIGRpc2FibGUgcHJlbGlua2luZyBhbHRvZ2V0aGVyCisjIG9yIHRvIHllcyB0byBlbmFibGUgaXQuCisjIChpZiB5b3UgY2hhbmdlIHRoaXMgZnJvbSB5ZXMgdG8gbm8gcHJlbGluayAtdWEKKyMgd2lsbCBiZSBydW4gbmV4dCBuaWdodCB0byB1bmRvIHByZWxpbmtpbmcpCitQUkVMSU5LSU5HPXllcworCisjIE9wdGlvbnMgdG8gcGFzcyB0byBwcmVsaW5rCisjIC1tCVRyeSB0byBjb25zZXJ2ZSB2aXJ0dWFsIG1lbW9yeSBieSBhbGxvd2luZyBvdmVybGFwcGluZworIwlhc3NpZ25lZCB2aXJ0dWFsIG1lbW9yeSBzbG90cyBmb3IgbGlicmFyaWVzIHdoaWNoCisjCW5ldmVyIGFwcGVhciB0b2dldGhlciBpbiBvbmUgYmluYXJ5CisjIC1SCVJhbmRvbWl6ZSB2aXJ0dWFsIG1lbW9yeSBzbG90IGFzc2lnbm1lbnRzIGZvciBsaWJyYXJpZXMuCisjCVRoaXMgbWFrZXMgaXQgc2xpZ2h0bHkgaGFyZGVyIGZvciB2YXJpb3VzIGJ1ZmZlciBvdmVyZmxvdworIwlhdHRhY2tzLCBzaW5jZSBsaWJyYXJ5IGFkZHJlc3NlcyB3aWxsIGJlIGRpZmZlcmVudCBvbiBlYWNoCisjCWhvc3QgdXNpbmcgLVIuCitQUkVMSU5LX09QVFM9LW1SCisKKyMgSG93IG9mdGVuIHNob3VsZCBmdWxsIHByZWxpbmsgYmUgcnVuIChpbiBkYXlzKQorIyBOb3JtYWxseSwgcHJlbGluayB3aWxsIGJlIHJ1biBpbiBxdWljayBtb2RlLCBldmVyeQorIyAkUFJFTElOS19GVUxMX1RJTUVfSU5URVJWQUwgZGF5cyBpdCB3aWxsIGJlIHJ1bgorIyBpbiBub3JtYWwgbW9kZS4gIENvbW1lbnQgdGhpcyBsaW5lIG91dCBpZiBwcmVsaW5rIAorIyBzaG91bGQgYmUgcnVuIGluIG5vcm1hbCBtb2RlIGFsd2F5cy4KK1BSRUxJTktfRlVMTF9USU1FX0lOVEVSVkFMPTE0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wcmVsaW5rL3ByZWxpbmtfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZjY5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHJlbGluay9wcmVsaW5rX2dpdC5iYgpAQCAtMCwwICsxLDgxIEBACitTRUNUSU9OID0gImRldmVsIgorIyBOZWVkIGJpbnV0aWxzIGZvciBsaWJpYmVydHkuYQorIyBXb3VsZCBuZWVkIHRyYW5zZmlnLW5hdGl2ZSBmb3IgZG9jdW1lbnRhdGlvbiBpZiBpdCB3YXNuJ3QgZGlzYWJsZWQKK0RFUEVORFMgPSAiZWxmdXRpbHMgYmludXRpbHMiCitTVU1NQVJZID0gIkFuIEVMRiBwcmVsaW5raW5nIHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJUaGUgcHJlbGluayBwYWNrYWdlIGNvbnRhaW5zIGEgdXRpbGl0eSB3aGljaCBtb2RpZmllcyBFTEYgc2hhcmVkIGxpYnJhcmllcyBcCithbmQgZXhlY3V0YWJsZXMsIHNvIHRoYXQgZmFyIGZld2VyIHJlbG9jYXRpb25zIG5lZWQgdG8gYmUgcmVzb2x2ZWQgYXQgXAorcnVudGltZSBhbmQgdGh1cyBwcm9ncmFtcyBjb21lIHVwIGZhc3Rlci4iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzkzYzA1NTBiZDMxNzNmNDUwNGIyY2JkODk5MWU1MGIiCitTUkNSRVYgPSAiNDAzMjdmYjk5NjU0ZTk2ZGI2ZWYxNWUyZjJkNWVmMTQwYWMzZTk5OCIKK1BWID0gIjEuMCtnaXQke1NSQ1BWfSIKKworIworIyBUaGUgY3JvbiBzY3JpcHQgYXR0ZW1wdHMgdG8gcmUtcHJlbGluayB0aGUgc3lzdGVtIGRhaWx5IC0tIG9uCisjIHN5c3RlbXMgd2hlcmUgdXNlcnMgYXJlIGFkZGluZyBhcHBsaWNhdGlvbnMsIHRoaXMgbWlnaHQgYmUgcmVhc29uYWJsZQorIyBidXQgZm9yIGVtYmVkZGVkLCB3ZSBzaG91bGQgYmUgcmUtcnVubmluZyBwcmVsaW5rIC1hIGFmdGVyIGFuIHVwZGF0ZS4KKyMKKyMgRGVmYXVsdCBpcyBwcmVsaW5raW5nIGlzIGVuYWJsZWQuCisjCitTVU1NQVJZXyR7UE59LWNyb24gPSAiQ3JvbiBzY3JpcHRzIHRvIGNvbnRyb2wgYXV0b21hdGljIHByZWxpbmtpbmciCitERVNDUklQVElPTl8ke1BOfS1jcm9uID0gIkNyb24gc2NyaXB0cyB0byBjb250cm9sIGF1dG9tYXRpYyBwcmVsaW5raW5nLiAgXAorU2VlOiAke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvcHJlbGluayBmb3IgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iCisKK0ZJTEVTXyR7UE59LWNyb24gPSAiJHtzeXNjb25mZGlyfS9jcm9uLmRhaWx5ICR7c3lzY29uZmRpcn0vZGVmYXVsdCIKKworUEFDS0FHRVMgPSsgIiR7UE59LWNyb24iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvcHJlbGluay1jcm9zcy5naXQ7YnJhbmNoPWNyb3NzX3ByZWxpbmsgXAorICAgICAgICAgICBmaWxlOi8vcHJlbGluay5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL3ByZWxpbmsuY3Jvbi5kYWlseSBcCisgICAgICAgICAgIGZpbGU6Ly9wcmVsaW5rLmRlZmF1bHQgXAorCSAgIGZpbGU6Ly9tYWNyb3MucHJlbGluayIKKworVEFSR0VUX09TX09SSUcgOj0gIiR7VEFSR0VUX09TfSIKK09WRVJSSURFU19hcHBlbmQgPSAiOiR7VEFSR0VUX09TX09SSUd9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3RydW5rIgorCitpbmhlcml0IGF1dG90b29scyAKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtc2VsaW51eCAtLXdpdGgtcGtndmVyc2lvbj0ke1BWfS0ke1BSfSBcCisJLS13aXRoLWJ1Z3VybD1odHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgIyBEaXNhYmxlIGRvY3VtZW50YXRpb24hCisgICAgICAgIGVjaG8gImFsbDoiID4gJHtTfS9kb2MvTWFrZWZpbGUuYW0KK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L3JwbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ByZWxpbmsuY29uZiAke0R9JHtzeXNjb25mZGlyfS9wcmVsaW5rLmNvbmYKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wcmVsaW5rLmNyb24uZGFpbHkgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseS9wcmVsaW5rCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcHJlbGluay5kZWZhdWx0ICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvcHJlbGluaworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L21hY3Jvcy5wcmVsaW5rICR7RH0ke3N5c2NvbmZkaXJ9L3JwbS9tYWNyb3MucHJlbGluaworfQorCisjIElmIHdlJ3JlIHVzaW5nIGltYWdlLXByZWxpbmssIHdlIHdhbnQgdG8gc2tpcCB0aGlzIG9uIHRoZSBob3N0IHNpZGUKKyMgYnV0IHN0aWxsIGRvIGl0IGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBvbiB0aGUgdGFyZ2V0Li4uCitwa2dfcG9zdGluc3RfcHJlbGluaygpIHsKKyMhL2Jpbi9zaAorCitpZiBbICJ4JEQiICE9ICJ4IiBdOyB0aGVuCisgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdVU0VSX0NMQVNTRVMnLCAnaW1hZ2UtcHJlbGluaycsICdleGl0IDAnLCAnZXhpdCAxJywgZCl9CitmaQorCitwcmVsaW5rIC1hCit9CisKK3BrZ19wcmVybV9wcmVsaW5rKCkgeworIyEvYmluL3NoCisKK2lmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKyAgZXhpdCAxCitmaQorCitwcmVsaW5rIC1hdQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLWdyb3VwIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWJmNzMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9maWxlcy9mYWxsYmFjay1ncm91cApAQCAtMCwwICsxLDIgQEAKK3Jvb3Q6KjowOgorbWFpbDoqOjg6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vZmlsZXMvZmFsbGJhY2stcGFzc3dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNDU4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL2ZpbGVzL2ZhbGxiYWNrLXBhc3N3ZApAQCAtMCwwICsxIEBACityb290OjowOjA6cm9vdDovaG9tZS9yb290Oi9iaW4vc2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTEyMjU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG8uaW5jCkBAIC0wLDAgKzEsMTM1IEBACisjIE5vdGU6IER1ZSB0byB0aGUgYml0YmFrZSB3cmFwcGVyIHNjcmlwdCwgbWFraW5nIGNoYW5nZXMgdG8gcHNldWRvIGNhbiBiZQorIyBkaWZmaWN1bHQuICBUbyB3b3JrIGFyb3VuZCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB3cmFwcGVyIHVzZToKKyMgQkJGRVRDSDI9VHJ1ZSBQU0VVRE9fQlVJTEQ9MSAuLi9iaXRiYWtlL2Jpbi9iaXRiYWtlIHBzZXVkby1uYXRpdmUgWy1jIENNRF0KKworU1VNTUFSWSA9ICJQc2V1ZG8gZ2l2ZXMgZmFrZSByb290IGNhcGFiaWxpdGllcyB0byBhIG5vcm1hbCB1c2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kvcHNldWRvIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQzYjcyNWQ3MWJiNWRmNGExZTU5MjBiMzQ0Yjg2YWQiCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkxHUEwyLjEiCitERVBFTkRTID0gInNxbGl0ZTMgYXR0ciIKKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliKi9saWJwc2V1ZG8uc28gJHtiaW5kaXJ9LyogJHtsb2NhbHN0YXRlZGlyfS9wc2V1ZG8gJHtwcmVmaXh9L3Zhci9wc2V1ZG8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cHJlZml4fS9saWIvcHNldWRvL2xpYiovLmRlYnVnIgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImxpYmRpciIKK0lOU0FORV9TS0lQXyR7UE59LWRiZyArPSAibGliZGlyIgorCitQUk9WSURFUyArPSAidmlydHVhbC9mYWtlcm9vdCIKKworTUFLRU9QVFMgPSAiIgorCitpbmhlcml0IHNpdGVpbmZvCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJOgorfQorCitOTzMyTElCUyA/Pz0gIjEiCitOTzMyTElCU19jbGFzcy1uYXRpdmVzZGsgPSAiMSIKKworIyBDb21waWxlIGZvciB0aGUgbG9jYWwgbWFjaGluZSBhcmNoLi4uCitkb19jb21waWxlICgpIHsKKwlpZiBbICIke1NJVEVJTkZPX0JJVFN9IiA9ICI2NCIgXTsgdGhlbgorCSAgJHtTfS9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiR7U0lURUlORk9fQklUU30gLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tY2ZsYWdzPSIke0NGTEFHU30iIC0tYml0cz0ke1NJVEVJTkZPX0JJVFN9IC0tZW5hYmxlLXN0YXRpYy1zcWxpdGUgLS13aXRob3V0LXJwYXRoCisJZWxzZQorCSAgJHtTfS9jb25maWd1cmUgJHtQU0VVRE9fRVhUUkFfT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IC0tbGliZGlyPSR7cHJlZml4fS9saWIvcHNldWRvL2xpYiAtLXdpdGgtc3FsaXRlLWxpYj0ke2Jhc2VsaWJ9IC0td2l0aC1zcWxpdGU9JHtTVEFHSU5HX0RJUl9UQVJHRVR9JHtleGVjX3ByZWZpeH0gLS1jZmxhZ3M9IiR7Q0ZMQUdTfSIgLS1iaXRzPSR7U0lURUlORk9fQklUU30gLS1lbmFibGUtc3RhdGljLXNxbGl0ZSAtLXdpdGhvdXQtcnBhdGgKKwlmaQorCW9lX3J1bm1ha2UgJHtNQUtFT1BUU30KK30KK2RvX2NvbXBpbGVbdmFyZGVwc2V4Y2x1ZGVdID0gIlNJVEVJTkZPX0JJVFMiCisKK21heWJlX21ha2UzMigpIHsKKwkjIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gYnVpbGQgMzItYml0IGJpbmFyaWVzLgorCW1ha2UzMj1mYWxzZQorCWlmIFsgIiR7U0lURUlORk9fQklUU30iID0gIjY0IiBdOyB0aGVuCisJCWNhc2UgIiR7Tk8zMkxJQlN9IiBpbgorCQkwKQltYWtlMzI9dHJ1ZQorCQkJOzsKKwkJMSkJbWFrZTMyPWZhbHNlCisJCQk7OworCQkqKQkjIElmIHVuc2V0LCBidWlsZCAzMi1iaXQgaWYgd2UgdGhpbmsgd2UgY2FuLgorCQkJaWYgWyAtZSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oIiBdOyB0aGVuCisJCQkJbWFrZTMyPXRydWUKKwkJCWZpCisJCQk7OworCQllc2FjCisJZmkKKwlpZiAkbWFrZTMyOyB0aGVuCisJCWlmICEgWyAtZSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy0zMi5oIiBdOyB0aGVuCisJCQl3YXJuXzMyYml0X21pc3NpbmcKKwkJZWxzZQorCQkJYmJub3RlICJBdHRlbXB0aW5nIHRvIGJ1aWxkIDMyLWJpdCBsaWJwc2V1ZG8uc28gZm9yICR7UE59LiIKKwkJZmkKKwllbHNlCisJCWJibm90ZSAiQnVpbGRpbmcvaW5zdGFsbGluZyBvbmx5IDY0LWJpdCBsaWJwc2V1ZG8uc28gZm9yICR7UE59LiIKKwkJYmJub3RlICJJZiB5b3UgbmVlZCB0byBydW4gMzItYml0IGV4ZWN1dGFibGVzLCBlbnN1cmUgdGhhdCBOTzMyTElCUyBpcyBzZXQgdG8gMC4iCisJZmkKK30KK21heWJlX21ha2UzMlt2YXJkZXBzZXhjbHVkZV0gPSAiU0lURUlORk9fQklUUyIKKword2Fybl8zMmJpdF9taXNzaW5nKCkgeworCWJid2FybiAiQ2FuJ3QgZmluZCBzdHVicy0zMi5oLCBidXQgdXN1YWxseSBuZWVkIGl0IHRvIGJ1aWxkIDMyLWJpdCBsaWJwc2V1ZG8uIgorCWJid2FybiAiSWYgdGhlIGJ1aWxkIGZhaWxzLCBpbnN0YWxsIDMyLWJpdCBkZXZlbG9wZXIgcGFja2FnZXMuIgorCWJid2FybiAiSWYgeW91IGFyZSB1c2luZyAzMi1iaXQgYmluYXJpZXMsIHRoZSAzMi1iaXQgbGlicHNldWRvIGlzIE5PVCBvcHRpb25hbC4iCit9CisKKyMgVHdvIGJlbG93IGFyZSB0aGUgc2FtZQorIyBJZiBuZWNlc3NhcnkgY29tcGlsZSBmb3IgdGhlIGFsdGVybmF0aXZlIG1hY2hpbmUgYXJjaC4gIFRoaXMgaXMgb25seSAKKyMgbmVjZXNzYXJ5IGluIGEgbmF0aXZlIGJ1aWxkLgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQkjIFdlIG5lZWQgdGhlIDMyLWJpdCBsaWJwc2V1ZG8gb24gYSA2NC1iaXQgbWFjaGluZS4uLgorCQkjIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB3ZWxsLXRlc3RlZCBvdXRzaWRlIG9mIHg4Ni94ODZfNjQuCisKKwkJIyBpZiB3ZSdyZSBiZWluZyByZWJ1aWx0IGR1ZSB0byBhIGRlcGVuZGVuY3kgY2hhbmdlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZQorCQkjIGV2ZXJ5dGhpbmcgaXMgY2xlYW4gYmVmb3JlIHdlIGNvbmZpZ3VyZSBhbmQgYnVpbGQgLS0gaWYgd2UgaGF2ZW4ndCBwcmV2aW91c2x5CisJCSMgYnVpbHQgdGhpcyB3aWxsIGZhaWwgYW5kIGJlIGlnbm9yZWQuCisJCW1ha2UgJHtNQUtFT1BUU30gZGlzdGNsZWFuIHx8IDoKKworCQkuL2NvbmZpZ3VyZSAke1BTRVVET19FWFRSQV9PUFRTfSAtLXByZWZpeD0ke3ByZWZpeH0gLS1saWJkaXI9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliIC0td2l0aC1zcWxpdGUtbGliPSR7YmFzZWxpYn0gLS13aXRoLXNxbGl0ZT0ke1NUQUdJTkdfRElSX1RBUkdFVH0ke2V4ZWNfcHJlZml4fSAtLWJpdHM9MzIgLS13aXRob3V0LXJwYXRoCisJCXNhdmVfdHJhcHM9JCh0cmFwKQorCQl0cmFwICd3YXJuXzMyYml0X21pc3NpbmcnIDAKKwkJb2VfcnVubWFrZSAke01BS0VPUFRTfSBsaWJwc2V1ZG8KKwkJZXZhbCAiJHNhdmVfdHJhcHMiCisJCSMgcHJldmVudCBpdCBmcm9tIHJlbW92aW5nIHRoZSBsaWIsIGJ1dCByZW1vdmUgZXZlcnl0aGluZyBlbHNlCisJCW1ha2UgJ0xJQj1mb28nICR7TUFLRU9QVFN9IGRpc3RjbGVhbiAKKwlmaQorfQorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwltYXliZV9tYWtlMzIKKwlpZiAkbWFrZTMyOyB0aGVuCisJCSMgV2UgbmVlZCB0aGUgMzItYml0IGxpYnBzZXVkbyBvbiBhIDY0LWJpdCBtYWNoaW5lLgorCQkjIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB3ZWxsLXRlc3RlZCBvdXRzaWRlIG9mIHg4Ni94ODZfNjQuCisJCS4vY29uZmlndXJlICR7UFNFVURPX0VYVFJBX09QVFN9IC0tcHJlZml4PSR7cHJlZml4fSAtLWxpYmRpcj0ke3ByZWZpeH0vbGliL3BzZXVkby9saWIgLS13aXRoLXNxbGl0ZS1saWI9JHtiYXNlbGlifSAtLXdpdGgtc3FsaXRlPSR7U1RBR0lOR19ESVJfVEFSR0VUfSR7ZXhlY19wcmVmaXh9IC0tYml0cz0zMiAtLXdpdGhvdXQtcnBhdGgKKwkJb2VfcnVubWFrZSAke01BS0VPUFRTfSBsaWJwc2V1ZG8KKwkJIyBwcmV2ZW50IGl0IGZyb20gcmVtb3ZpbmcgdGhlIGxpYiwgYnV0IHJlbW92ZSBldmVyeXRoaW5nIGVsc2UKKwkJbWFrZSAnTElCPWZvbycgJHtNQUtFT1BUU30gZGlzdGNsZWFuIAorCWZpCit9CisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJHtNQUtFT1BUU30gJ0xJQj1saWIvcHNldWRvL2xpYiQoTUFSSzY0KScgaW5zdGFsbAorfQorCisjIFR3byBiZWxvdyBhcmUgdGhlIHNhbWUKKyMgSWYgbmVjZXNzYXJ5IGluc3RhbGwgZm9yIHRoZSBhbHRlcm5hdGl2ZSBtYWNoaW5lIGFyY2guICBUaGlzIGlzIG9ubHkgCisjIG5lY2Vzc2FyeSBpbiBhIG5hdGl2ZSBidWlsZC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJbWF5YmVfbWFrZTMyCisJaWYgJG1ha2UzMjsgdGhlbgorCQlta2RpciAtcCAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliCisJCWNwIGxpYi9wc2V1ZG8vbGliL2xpYnBzZXVkby5zbyAke0R9JHtwcmVmaXh9L2xpYi9wc2V1ZG8vbGliLy4KKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCW1heWJlX21ha2UzMgorCWlmICRtYWtlMzI7IHRoZW4KKwkJbWtkaXIgLXAgJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYgorCQljcCBsaWIvcHNldWRvL2xpYi9saWJwc2V1ZG8uc28gJHtEfSR7cHJlZml4fS9saWIvcHNldWRvL2xpYi8uCisJZmkKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb18xLjYuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGMyMGFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS42LjcuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSBwc2V1ZG8uaW5jCisKK1NSQ19VUkkgPSAiIFwKKyAgICBodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvcHNldWRvLyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stcGFzc3dkIFwKKyAgICBmaWxlOi8vZmFsbGJhY2stZ3JvdXAgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGNkMzk1MDJmOWJkMGU3MzRkZWU4MGUwOGIyOGE1ZjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWYyY2FjYTVmMTU3OWEzNzZhNTA5Y2Q4MWE4MTE1NmZjMjA4NjUwYWRkOWYwYWYyNzVkYTllOTExZjE4ZjI5MSIKKworUFNFVURPX0VYVFJBX09QVFMgPz0gIi0tZW5hYmxlLWZvcmNlLWFzeW5jIC0td2l0aG91dC1wYXNzd2QtZmFsbGJhY2siCisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCSMgVGhlIGZhbGxiYWNrIGZpbGVzIHNob3VsZCBuZXZlciBiZSBtb2RpZmllZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stcGFzc3dkICR7RH0ke3N5c2NvbmZkaXJ9L3Bhc3N3ZAorCWluc3RhbGwgLW0gNDQ0ICR7V09SS0RJUn0vZmFsbGJhY2stZ3JvdXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvdXAKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNy4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3BzZXVkby9wc2V1ZG9fMS43LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZWYzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvXzEuNy4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgcHNldWRvLmluYworCitTUkNfVVJJID0gIiBcCisgICAgaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL3BzZXVkby8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgZmlsZTovL2ZhbGxiYWNrLXBhc3N3ZCBcCisgICAgZmlsZTovL2ZhbGxiYWNrLWdyb3VwIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZDBhNDRlYWRkNDcxM2U5MGFkOGMxNTJlZWE3N2FhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU5ZmMzOTIyZjhmZWI5NzgzOWI1MGQxNGViMTk4N2FmZGM4ZjIyY2RjYWM5MzExOTMyM2NjY2Q1Zjg0NDQ2NTIiCisKK1BTRVVET19FWFRSQV9PUFRTID89ICItLWVuYWJsZS1mb3JjZS1hc3luYyAtLXdpdGhvdXQtcGFzc3dkLWZhbGxiYWNrIgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwkjIFRoZSBmYWxsYmFjayBmaWxlcyBzaG91bGQgbmV2ZXIgYmUgbW9kaWZpZWQKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLXBhc3N3ZCAke0R9JHtzeXNjb25mZGlyfS9wYXNzd2QKKwlpbnN0YWxsIC1tIDQ0NCAke1dPUktESVJ9L2ZhbGxiYWNrLWdyb3VwICR7RH0ke3N5c2NvbmZkaXJ9L2dyb3VwCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHNldWRvL3BzZXVkb19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlMTIyMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9wc2V1ZG8vcHNldWRvX2dpdC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIHBzZXVkby5pbmMKKworU1JDUkVWID0gImU3OTVkZjQ0YTkwYTQyNmE3NmI3OTBmMWIyNzc0ZjMwNDZhOGZjMzEiCitQViA9ICIxLjcuMitnaXQke1NSQ1BWfSIKKworREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3BzZXVkbyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMi43LW1hbmlmZXN0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTIuNy1tYW5pZmVzdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ4ZDgyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTIuNy1tYW5pZmVzdC5pbmMKQEAgLTAsMCArMSwyODggQEAKKworIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KKyMgR2VuZXJhdG9yOiAnLi4vLi4vLi4vc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0yLjcucHknIFZlcnNpb24gMjAxMTAyMjIuMiAoQykgMjAwMi0yMDEwIE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1sYXVlckB2YW5pbGxlLW1lZGlhLmRlPgorIyBWaXNpdCB0aGUgUHl0aG9uIGZvciBFbWJlZGRlZCBTeXN0ZW1zIFNpdGUgPT4gaHR0cDovL3d3dy5WYW5pbGxlLmRlL3Byb2plY3RzL3B5dGhvbi5zcHkKKworIAorCitQUk9WSURFUys9IiR7UE59LTJ0bzMgJHtQTn0tYXJncGFyc2UgJHtQTn0tYXVkaW8gJHtQTn0tYnNkZGIgJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcGlsZXIgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29udGV4dGxpYiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGV2ICR7UE59LWRpZmZsaWIgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWhvdHNob3QgJHtQTn0taHRtbCAke1BOfS1pZGxlICR7UE59LWltYWdlICR7UE59LWltcG9ydGxpYiAke1BOfS1pbyAke1BOfS1qc29uICR7UE59LWxhbmcgJHtQTn0tbG9nZ2luZyAke1BOfS1tYWlsYm94ICR7UE59LW1hdGggJHtQTn0tbWltZSAke1BOfS1tbWFwICR7UE59LW11bHRpcHJvY2Vzc2luZyAke1BOfS1uZXRjbGllbnQgJHtQTn0tbmV0c2VydmVyICR7UE59LW51bWJlcnMgJHtQTn0tcGlja2xlICR7UE59LXBrZ3V0aWwgJHtQTn0tcHByaW50ICR7UE59LXByb2ZpbGUgJHtQTn0tcHlkb2MgJHtQTn0tcmUgJHtQTn0tcmVhZGxpbmUgJHtQTn0tcmVzb3VyY2UgJHtQTn0tcm9ib3RwYXJzZXIgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgJHtQTn0temxpYiAiCisKK1BBQ0tBR0VTPSIke1BOfS1kYmcgJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kZXYgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICR7UE59LW1vZHVsZXMiCisKK1NVTU1BUllfJHtQTn0tMnRvMz0iUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIKK1JERVBFTkRTXyR7UE59LTJ0bzM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS0ydG8zPSIke2JpbmRpcn0vMnRvMyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYjJ0bzMgIgorCitTVU1NQVJZXyR7UE59LWFyZ3BhcnNlPSJQeXRob24gY29tbWFuZCBsaW5lIGFyZ3VtZW50IHBhcnNlciIKK1JERVBFTkRTXyR7UE59LWFyZ3BhcnNlPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyAke1BOfS10ZXh0dXRpbHMiCitGSUxFU18ke1BOfS1hcmdwYXJzZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9hcmdwYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1hdWRpbz0iUHl0aG9uIEF1ZGlvIEhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0tYXVkaW89IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1hdWRpbz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy93YXZlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jaHVuay4qICR7bGliZGlyfS9weXRob24yLjcvc25kaGRyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9vc3NhdWRpb2Rldi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2F1ZGlvb3Auc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9hdWRpb2Rldi4qICR7bGliZGlyfS9weXRob24yLjcvc3VuYXVkaW8uKiAke2xpYmRpcn0vcHl0aG9uMi43L3N1bmF1LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2FpZmYuKiAiCisKK1NVTU1BUllfJHtQTn0tYnNkZGI9IlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIEJlcmtlbGV5IERhdGFiYXNlIgorUkRFUEVORFNfJHtQTn0tYnNkZGI9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1ic2RkYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9ic2RkYiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19ic2RkYi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29kZWNzPSJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb2RlY3M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LWNvZGVjcz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2RlY3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L2VuY29kaW5ncyAke2xpYmRpcn0vcHl0aG9uMi43L2dldHRleHQuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xvY2FsZS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2xvY2FsZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jb2RlY3MqICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX211bHRpYnl0ZWNvZGVjLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvdW5pY29kZWRhdGEuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9zdHJpbmdwcmVwLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy94ZHJsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZT0iUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21waWxlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29tcGlsZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9weV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21waWxlYWxsLiogIgorCitTVU1NQVJZXyR7UE59LWNvbXBpbGVyPSJQeXRob24gY29tcGlsZXIgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNvbXBpbGVyPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29tcGlsZXI9IiR7bGliZGlyfS9weXRob24yLjcvY29tcGlsZXIgIgorCitTVU1NQVJZXyR7UE59LWNvbXByZXNzaW9uPSJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcHJlc3Npb249IiR7UE59LWNvcmUgJHtQTn0temxpYiIKK0ZJTEVTXyR7UE59LWNvbXByZXNzaW9uPSIke2xpYmRpcn0vcHl0aG9uMi43L2d6aXAuKiAke2xpYmRpcn0vcHl0aG9uMi43L3ppcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RhcmZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2J6Mi5zbyAiCisKK1NVTU1BUllfJHtQTn0tY29udGV4dGxpYj0iUHl0aG9uIHV0aWxpdGllcyBmb3Igd2l0aC1zdGF0ZW1lbnRjb250ZXh0cy4iCitSREVQRU5EU18ke1BOfS1jb250ZXh0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29udGV4dGxpYj0iJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29udGV4dGxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1jb3JlPSJQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGNvcmUgbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LWNvcmU9IiR7UE59LWxhbmcgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1jb3JlPSIke2xpYmRpcn0vcHl0aG9uMi43L19fZnV0dXJlX18uKiAke2xpYmRpcn0vcHl0aG9uMi43L19hYmNvbGwuKiAke2xpYmRpcn0vcHl0aG9uMi43L2FiYy4qICR7bGliZGlyfS9weXRob24yLjcvY29weS4qICR7bGliZGlyfS9weXRob24yLjcvY29weV9yZWcuKiAke2xpYmRpcn0vcHl0aG9uMi43L0NvbmZpZ1BhcnNlci4qICR7bGliZGlyfS9weXRob24yLjcvZ2VuZXJpY3BhdGguKiAke2xpYmRpcn0vcHl0aG9uMi43L2dldG9wdC4qICR7bGliZGlyfS9weXRob24yLjcvbGluZWNhY2hlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9uZXcuKiAke2xpYmRpcn0vcHl0aG9uMi43L29zLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9wb3NpeHBhdGguKiAke2xpYmRpcn0vcHl0aG9uMi43L3N0cnVjdC4qICR7bGliZGlyfS9weXRob24yLjcvd2FybmluZ3MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NpdGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3N0YXQuKiAke2xpYmRpcn0vcHl0aG9uMi43L1VzZXJEaWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9Vc2VyTGlzdC4qICR7bGliZGlyfS9weXRob24yLjcvVXNlclN0cmluZy4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYmluYXNjaWkuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc3RydWN0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvdGltZS5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3hyZWFkbGluZXMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy90eXBlcy4qICR7bGliZGlyfS9weXRob24yLjcvcGxhdGZvcm0uKiAke2JpbmRpcn0vcHl0aG9uKiAke2xpYmRpcn0vcHl0aG9uMi43L193ZWFrcmVmc2V0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zeXNjb25maWcuKiAke2xpYmRpcn0vcHl0aG9uMi43L19zeXNjb25maWdkYXRhLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb25maWcvTWFrZWZpbGUgJHtpbmNsdWRlZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3B5Y29uZmlnKi5oICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L3NpdGVjdXN0b21pemUucHkgIgorCitTVU1NQVJZXyR7UE59LWNyeXB0PSJQeXRob24gYmFzaWMgY3J5cHRvZ3JhcGhpYyBhbmQgaGFzaGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3J5cHQ9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jcnlwdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9oYXNobGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9tZDUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NoYS4qICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY3J5cHQuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9faGFzaGxpYi5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zaGEyNTYuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fc2hhNTEyLnNvICIKKworU1VNTUFSWV8ke1BOfS1jdHlwZXM9IlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdHlwZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdHlwZXM9IiR7bGliZGlyfS9weXRob24yLjcvY3R5cGVzICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N0eXBlcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jdHlwZXNfdGVzdC5zbyAiCisKK1NVTU1BUllfJHtQTn0tY3Vyc2VzPSJQeXRob24gY3Vyc2VzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdXJzZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdXJzZXM9IiR7bGliZGlyfS9weXRob24yLjcvY3Vyc2VzICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2N1cnNlcy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuc28gIgorCitTVU1NQVJZXyR7UE59LWRhdGV0aW1lPSJQeXRob24gY2FsZW5kYXIgYW5kIHRpbWUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRhdGV0aW1lPSIke1BOfS1jb3JlICR7UE59LWNvZGVjcyIKK0ZJTEVTXyR7UE59LWRhdGV0aW1lPSIke2xpYmRpcn0vcHl0aG9uMi43L19zdHJwdGltZS4qICR7bGliZGlyfS9weXRob24yLjcvY2FsZW5kYXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2RhdGV0aW1lLnNvICIKKworU1VNTUFSWV8ke1BOfS1kYj0iUHl0aG9uIGZpbGUtYmFzZWQgZGF0YWJhc2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWRiPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGI9IiR7bGliZGlyfS9weXRob24yLjcvYW55ZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kdW1iZGJtLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy93aGljaGRiLiogIgorCitTVU1NQVJZXyR7UE59LWRlYnVnZ2VyPSJQeXRob24gZGVidWdnZXIiCitSREVQRU5EU18ke1BOfS1kZWJ1Z2dlcj0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXJlICR7UE59LXN0cmluZ29sZCAke1BOfS1zaGVsbCAke1BOfS1wcHJpbnQiCitGSUxFU18ke1BOfS1kZWJ1Z2dlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9iZGIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BkYi4qICIKKworU1VNTUFSWV8ke1BOfS1kZXY9IlB5dGhvbiBkZXZlbG9wbWVudCBwYWNrYWdlIgorUkRFUEVORFNfJHtQTn0tZGV2PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGV2PSIke2luY2x1ZGVkaXJ9ICR7bGliZGlyfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLmEgJHtsaWJkaXJ9LyoubyAke2xpYmRpcn0vcGtnY29uZmlnICR7YmFzZV9saWJkaXJ9LyouYSAke2Jhc2VfbGliZGlyfS8qLm8gJHtkYXRhZGlyfS9hY2xvY2FsICR7ZGF0YWRpcn0vcGtnY29uZmlnICIKKworU1VNTUFSWV8ke1BOfS1kaWZmbGliPSJQeXRob24gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMiCitSREVQRU5EU18ke1BOfS1kaWZmbGliPSIke1BOfS1sYW5nICR7UE59LXJlIgorRklMRVNfJHtQTn0tZGlmZmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaWZmbGliLiogIgorCitTVU1NQVJZXyR7UE59LWRpc3R1dGlscz0iUHl0aG9uIERpc3RyaWJ1dGlvbiBVdGlsaXRpZXMiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1kaXN0dXRpbHM9IiR7bGliZGlyfS9weXRob24yLjcvY29uZmlnICR7bGliZGlyfS9weXRob24yLjcvZGlzdHV0aWxzICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSJQeXRob24gZGlzdHJpYnV0aW9uIHV0aWxpdGllcyAoc3RhdGljIGxpYnJhcmllcykiCitSREVQRU5EU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke1BOfS1kaXN0dXRpbHMiCitGSUxFU18ke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2PSIke2xpYmRpcn0vcHl0aG9uMi43L2NvbmZpZy9saWIqLmEgIgorCitTVU1NQVJZXyR7UE59LWRvY3Rlc3Q9IlB5dGhvbiBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgZXhhbXBsZXMgaW4gZG9jc3RyaW5ncyIKK1JERVBFTkRTXyR7UE59LWRvY3Rlc3Q9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1pbyAke1BOfS1yZSAke1BOfS11bml0dGVzdCAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliIgorRklMRVNfJHtQTn0tZG9jdGVzdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9kb2N0ZXN0LiogIgorCitTVU1NQVJZXyR7UE59LWVsZW1lbnR0cmVlPSJQeXRob24gZWxlbWVudHJlZSIKK1JERVBFTkRTXyR7UE59LWVsZW1lbnR0cmVlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZWxlbWVudHRyZWU9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2VsZW1lbnR0cmVlLnNvICIKKworU1VNTUFSWV8ke1BOfS1lbWFpbD0iUHl0aG9uIGVtYWlsIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1lbWFpbD0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LWVtYWlsPSIke2xpYmRpcn0vcHl0aG9uMi43L2ltYXBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2VtYWlsICIKKworU1VNTUFSWV8ke1BOfS1mY250bD0iUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tZmNudGw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1mY250bD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9mY250bC5zbyAiCisKK1NVTU1BUllfJHtQTn0tZ2RibT0iUHl0aG9uIEdOVSBkYXRhYmFzZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZ2RibT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWdkYm09IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZ2RibS5zbyAiCisKK1NVTU1BUllfJHtQTn0taG90c2hvdD0iUHl0aG9uIGhvdHNob3QgcGVyZm9ybWFuY2UgcHJvZmlsZXIiCitSREVQRU5EU18ke1BOfS1ob3RzaG90PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taG90c2hvdD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9ob3RzaG90ICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2hvdHNob3Quc28gIgorCitTVU1NQVJZXyR7UE59LWh0bWw9IlB5dGhvbiBIVE1MIHByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWh0bWw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1odG1sPSIke2xpYmRpcn0vcHl0aG9uMi43L2Zvcm1hdHRlci4qICR7bGliZGlyfS9weXRob24yLjcvaHRtbGVudGl0eWRlZnMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2h0bWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21hcmt1cGJhc2UuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NnbWxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L0hUTUxQYXJzZXIuKiAiCisKK1NVTU1BUllfJHtQTn0taWRsZT0iUHl0aG9uIEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQiCitSREVQRU5EU18ke1BOfS1pZGxlPSIke1BOfS1jb3JlICR7UE59LXRraW50ZXIiCitGSUxFU18ke1BOfS1pZGxlPSIke2JpbmRpcn0vaWRsZSAke2xpYmRpcn0vcHl0aG9uMi43L2lkbGVsaWIgIgorCitTVU1NQVJZXyR7UE59LWltYWdlPSJQeXRob24gZ3JhcGhpY2FsIGltYWdlIGhhbmRsaW5nIgorUkRFUEVORFNfJHtQTn0taW1hZ2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1pbWFnZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2xvcnN5cy4qICR7bGliZGlyfS9weXRob24yLjcvaW1naGRyLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9pbWFnZW9wLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmdiaW1nLnNvICIKKworU1VNTUFSWV8ke1BOfS1pbXBvcnRsaWI9IlB5dGhvbiBpbXBvcnQgaW1wbGVtZW50YXRpb24gbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LWltcG9ydGxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWltcG9ydGxpYj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9pbXBvcnRsaWIgIgorCitTVU1NQVJZXyR7UE59LWlvPSJQeXRob24gbG93LWxldmVsIEkvTyIKK1JERVBFTkRTXyR7UE59LWlvPSIke1BOfS1jb3JlICR7UE59LW1hdGggJHtQTn0tdGV4dHV0aWxzICR7UE59LW5ldGNsaWVudCAke1BOfS1jb250ZXh0bGliIgorRklMRVNfJHtQTn0taW89IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3NvY2tldC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19pby5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zc2wuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9zZWxlY3Quc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC90ZXJtaW9zLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvY1N0cmluZ0lPLnNvICR7bGliZGlyfS9weXRob24yLjcvcGlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NvY2tldC4qICR7bGliZGlyfS9weXRob24yLjcvc3NsLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZW1wZmlsZS4qICR7bGliZGlyfS9weXRob24yLjcvU3RyaW5nSU8uKiAke2xpYmRpcn0vcHl0aG9uMi43L2lvLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9fcHlpby4qICIKKworU1VNTUFSWV8ke1BOfS1qc29uPSJQeXRob24gSlNPTiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tanNvbj0iJHtQTn0tY29yZSAke1BOfS1tYXRoICR7UE59LXJlICR7UE59LWNvZGVjcyIKK0ZJTEVTXyR7UE59LWpzb249IiR7bGliZGlyfS9weXRob24yLjcvanNvbiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19qc29uLnNvICIKKworU1VNTUFSWV8ke1BOfS1sYW5nPSJQeXRob24gbG93LWxldmVsIGxhbmd1YWdlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sYW5nPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tbGFuZz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fYmlzZWN0LnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2NvbGxlY3Rpb25zLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX2hlYXBxLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3dlYWtyZWYuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fZnVuY3Rvb2xzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvYXJyYXkuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9pdGVydG9vbHMuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9vcGVyYXRvci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3BhcnNlci5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2F0ZXhpdC4qICR7bGliZGlyfS9weXRob24yLjcvYmlzZWN0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb2Rlb3AuKiAke2xpYmRpcn0vcHl0aG9uMi43L2NvbGxlY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9kaXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Z1bmN0b29scy4qICR7bGliZGlyfS9weXRob24yLjcvaGVhcHEuKiAke2xpYmRpcn0vcHl0aG9uMi43L2luc3BlY3QuKiAke2xpYmRpcn0vcHl0aG9uMi43L2tleXdvcmQuKiAke2xpYmRpcn0vcHl0aG9uMi43L29wY29kZS4qICR7bGliZGlyfS9weXRob24yLjcvc3ltYm9sLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9yZXByLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90b2tlbi4qICR7bGliZGlyfS9weXRob24yLjcvdG9rZW5pemUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3RyYWNlYmFjay4qICR7bGliZGlyfS9weXRob24yLjcvd2Vha3JlZi4qICIKKworU1VNTUFSWV8ke1BOfS1sb2dnaW5nPSJQeXRob24gbG9nZ2luZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbG9nZ2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS1zdHJpbmdvbGQiCitGSUxFU18ke1BOfS1sb2dnaW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xvZ2dpbmcgIgorCitTVU1NQVJZXyR7UE59LW1haWxib3g9IlB5dGhvbiBtYWlsYm94IGZvcm1hdCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tbWFpbGJveD0iJHtQTn0tY29yZSAke1BOfS1taW1lIgorRklMRVNfJHtQTn0tbWFpbGJveD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9tYWlsYm94LiogIgorCitTVU1NQVJZXyR7UE59LW1hdGg9IlB5dGhvbiBtYXRoIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYXRoPSIke1BOfS1jb3JlICR7UE59LWNyeXB0IgorRklMRVNfJHtQTn0tbWF0aD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9jbWF0aC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL21hdGguc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9fcmFuZG9tLnNvICR7bGliZGlyfS9weXRob24yLjcvcmFuZG9tLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zZXRzLiogIgorCitTVU1NQVJZXyR7UE59LW1pbWU9IlB5dGhvbiBNSU1FIGhhbmRsaW5nIEFQSXMiCitSREVQRU5EU18ke1BOfS1taW1lPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tbWltZT0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9taW1ldG9vbHMuKiAke2xpYmRpcn0vcHl0aG9uMi43L3V1LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9xdW9wcmkuKiAke2xpYmRpcn0vcHl0aG9uMi43L3JmYzgyMi4qICR7bGliZGlyfS9weXRob24yLjcvTWltZVdyaXRlci4qICIKKworU1VNTUFSWV8ke1BOfS1tbWFwPSJQeXRob24gbWVtb3J5LW1hcHBlZCBmaWxlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tbWFwPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tbW1hcD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9tbWFwLnNvICIKKworU1VNTUFSWV8ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IlB5dGhvbiBtdWx0aXByb2Nlc3Npbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW11bHRpcHJvY2Vzc2luZz0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LXBpY2tsZSAke1BOfS10aHJlYWRpbmcgJHtQTn0tY3R5cGVzICR7UE59LW1tYXAiCitGSUxFU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX211bHRpcHJvY2Vzc2luZy5zbyAke2xpYmRpcn0vcHl0aG9uMi43L211bHRpcHJvY2Vzc2luZyAiCisKK1NVTU1BUllfJHtQTn0tbmV0Y2xpZW50PSJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgY2xpZW50cyIKK1JERVBFTkRTXyR7UE59LW5ldGNsaWVudD0iJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1kYXRldGltZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW5ldGNsaWVudD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy8qQ29va2llKi4qICR7bGliZGlyfS9weXRob24yLjcvYmFzZTY0LiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb29raWVsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L2Z0cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvZ29waGVybGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9obWFjLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9odHRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9taW1ldHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMi43L25udHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BvcGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvc210cGxpYi4qICR7bGliZGlyfS9weXRob24yLjcvdGVsbmV0bGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91cmxsaWIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybGxpYjIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3VybHBhcnNlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy91dWlkLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMi43L21pbWV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1uZXRzZXJ2ZXI9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBzZXJ2ZXJzIgorUkRFUEVORFNfJHtQTn0tbmV0c2VydmVyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1uZXRzZXJ2ZXI9IiR7bGliZGlyfS9weXRob24yLjcvY2dpLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy8qSFRUUFNlcnZlci4qICR7bGliZGlyfS9weXRob24yLjcvU29ja2V0U2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LW51bWJlcnM9IlB5dGhvbiBudW1iZXIgQVBJcyIKK1JERVBFTkRTXyR7UE59LW51bWJlcnM9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LW51bWJlcnM9IiR7bGliZGlyfS9weXRob24yLjcvZGVjaW1hbC4qICR7bGliZGlyfS9weXRob24yLjcvZnJhY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9udW1iZXJzLiogIgorCitTVU1NQVJZXyR7UE59LXBpY2tsZT0iUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBpY2tsZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiCitGSUxFU18ke1BOfS1waWNrbGU9IiR7bGliZGlyfS9weXRob24yLjcvcGlja2xlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaGVsdmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL2NQaWNrbGUuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9waWNrbGV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1wa2d1dGlsPSJQeXRob24gcGFja2FnZSBleHRlbnNpb24gdXRpbGl0eSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcGtndXRpbD0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXBrZ3V0aWw9IiR7bGliZGlyfS9weXRob24yLjcvcGtndXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1wcHJpbnQ9IlB5dGhvbiBwcmV0dHktcHJpbnQgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBwcmludD0iJHtQTn0tY29yZSAke1BOfS1pbyIKK0ZJTEVTXyR7UE59LXBwcmludD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wcHJpbnQuKiAiCisKK1NVTU1BUllfJHtQTn0tcHJvZmlsZT0iUHl0aG9uIGJhc2ljIHBlcmZvcm1hbmNlIHByb2ZpbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHJvZmlsZT0iJHtQTn0tY29yZSAke1BOfS10ZXh0dXRpbHMiCitGSUxFU18ke1BOfS1wcm9maWxlPSIke2xpYmRpcn0vcHl0aG9uMi43L3Byb2ZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BzdGF0cy4qICR7bGliZGlyfS9weXRob24yLjcvY1Byb2ZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19sc3Byb2Yuc28gIgorCitTVU1NQVJZXyR7UE59LXB5ZG9jPSJQeXRob24gaW50ZXJhY3RpdmUgaGVscCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHlkb2M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tcmUiCitGSUxFU18ke1BOfS1weWRvYz0iJHtiaW5kaXJ9L3B5ZG9jICR7bGliZGlyfS9weXRob24yLjcvcHlkb2MuKiAke2xpYmRpcn0vcHl0aG9uMi43L3B5ZG9jX2RhdGEgIgorCitTVU1NQVJZXyR7UE59LXJlPSJQeXRob24gUmVndWxhciBFeHByZXNzaW9uIEFQSXMiCitSREVQRU5EU18ke1BOfS1yZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlPSIke2xpYmRpcn0vcHl0aG9uMi43L3JlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcmUuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcmVfY29uc3RhbnRzKiAke2xpYmRpcn0vcHl0aG9uMi43L3NyZV9wYXJzZS4qICIKKworU1VNTUFSWV8ke1BOfS1yZWFkbGluZT0iUHl0aG9uIHJlYWRsaW5lIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1yZWFkbGluZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXJlYWRsaW5lPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3JlYWRsaW5lLnNvICR7bGliZGlyfS9weXRob24yLjcvcmxjb21wbGV0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVzb3VyY2U9IlB5dGhvbiByZXNvdXJjZSBjb250cm9sIGludGVyZmFjZSIKK1JERVBFTkRTXyR7UE59LXJlc291cmNlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVzb3VyY2U9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcmVzb3VyY2Uuc28gIgorCitTVU1NQVJZXyR7UE59LXJvYm90cGFyc2VyPSJQeXRob24gcm9ib3RzLnR4dCBwYXJzZXIiCitSREVQRU5EU18ke1BOfS1yb2JvdHBhcnNlcj0iJHtQTn0tY29yZSAke1BOfS1uZXRjbGllbnQiCitGSUxFU18ke1BOfS1yb2JvdHBhcnNlcj0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9yb2JvdHBhcnNlci4qICIKKworU1VNTUFSWV8ke1BOfS1zaGVsbD0iUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIKK1JERVBFTkRTXyR7UE59LXNoZWxsPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc2hlbGw9IiR7bGliZGlyfS9weXRob24yLjcvY21kLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9jb21tYW5kcy4qICR7bGliZGlyfS9weXRob24yLjcvZGlyY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMi43L2ZubWF0Y2guKiAke2xpYmRpcn0vcHl0aG9uMi43L2dsb2IuKiAke2xpYmRpcn0vcHl0aG9uMi43L3BvcGVuMi4qICR7bGliZGlyfS9weXRob24yLjcvc2hsZXguKiAke2xpYmRpcn0vcHl0aG9uMi43L3NodXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1zbXRwZD0iUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iCitSREVQRU5EU18ke1BOfS1zbXRwZD0iJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LXNtdHBkPSIke2JpbmRpcn0vc210cGQuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NtdHBkLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzPSIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nICR7UE59LXpsaWIiCitGSUxFU18ke1BOfS1zcWxpdGUzPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19zcWxpdGUzLnNvICR7bGliZGlyfS9weXRob24yLjcvc3FsaXRlMy9kYmFwaTIuKiAke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvX19pbml0X18uKiAke2xpYmRpcn0vcHl0aG9uMi43L3NxbGl0ZTMvZHVtcC4qICIKKworU1VNTUFSWV8ke1BOfS1zcWxpdGUzLXRlc3RzPSJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIgorUkRFUEVORFNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIgorRklMRVNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9zcWxpdGUzL3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXN0cmluZ29sZD0iUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIKK1JERVBFTkRTXyR7UE59LXN0cmluZ29sZD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXN0cmluZ29sZD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9zdHJvcC5zbyAke2xpYmRpcn0vcHl0aG9uMi43L3N0cmluZy4qICR7bGliZGlyfS9weXRob24yLjcvc3RyaW5nb2xkLiogIgorCitTVU1NQVJZXyR7UE59LXN1YnByb2Nlc3M9IlB5dGhvbiBzdWJwcm9jZXNzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zdWJwcm9jZXNzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LWZjbnRsICR7UE59LXBpY2tsZSIKK0ZJTEVTXyR7UE59LXN1YnByb2Nlc3M9IiR7bGliZGlyfS9weXRob24yLjcvc3VicHJvY2Vzcy4qICIKKworU1VNTUFSWV8ke1BOfS1zeXNsb2c9IlB5dGhvbiBzeXNsb2cgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tc3lzbG9nPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tc3lzbG9nPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL3N5c2xvZy5zbyAiCisKK1NVTU1BUllfJHtQTn0tdGVybWluYWw9IlB5dGhvbiB0ZXJtaW5hbCBjb250cm9sbGluZyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGVybWluYWw9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS10ZXJtaW5hbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9wdHkuKiAke2xpYmRpcn0vcHl0aG9uMi43L3R0eS4qICIKKworU1VNTUFSWV8ke1BOfS10ZXN0cz0iUHl0aG9uIHRlc3RzIgorUkRFUEVORFNfJHtQTn0tdGVzdHM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZXN0ICIKKworU1VNTUFSWV8ke1BOfS10ZXh0dXRpbHM9IlB5dGhvbiBvcHRpb24gcGFyc2luZywgdGV4dCB3cmFwcGluZyBhbmQgQ1NWIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS10ZXh0dXRpbHM9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tc3RyaW5nb2xkIgorRklMRVNfJHtQTn0tdGV4dHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMi43L2xpYi1keW5sb2FkL19jc3Yuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9jc3YuKiAke2xpYmRpcn0vcHl0aG9uMi43L29wdHBhcnNlLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy90ZXh0d3JhcC4qICIKKworU1VNTUFSWV8ke1BOfS10aHJlYWRpbmc9IlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRocmVhZGluZz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tdGhyZWFkaW5nPSIke2xpYmRpcn0vcHl0aG9uMi43L190aHJlYWRpbmdfbG9jYWwuKiAke2xpYmRpcn0vcHl0aG9uMi43L2R1bW15X3RocmVhZC4qICR7bGliZGlyfS9weXRob24yLjcvZHVtbXlfdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9tdXRleC4qICR7bGliZGlyfS9weXRob24yLjcvdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9RdWV1ZS4qICIKKworU1VNTUFSWV8ke1BOfS10a2ludGVyPSJQeXRob24gVGNsL1RrIGJpbmRpbmdzIgorUkRFUEVORFNfJHtQTn0tdGtpbnRlcj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRraW50ZXI9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvX3RraW50ZXIuc28gJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItdGsgIgorCitTVU1NQVJZXyR7UE59LXVuaXR0ZXN0PSJQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayIKK1JERVBFTkRTXyR7UE59LXVuaXR0ZXN0PSIke1BOfS1jb3JlICR7UE59LXN0cmluZ29sZCAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LWRpZmZsaWIgJHtQTn0tcHByaW50ICR7UE59LXNoZWxsIgorRklMRVNfJHtQTn0tdW5pdHRlc3Q9IiR7bGliZGlyfS9weXRob24yLjcvdW5pdHRlc3QvICIKKworU1VNTUFSWV8ke1BOfS11bml4YWRtaW49IlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS11bml4YWRtaW49IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS11bml4YWRtaW49IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvbmlzLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvZ3JwLnNvICR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvcHdkLnNvICR7bGliZGlyfS9weXRob24yLjcvZ2V0cGFzcy4qICIKKworU1VNTUFSWV8ke1BOfS14bWw9IlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbD0iJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXhtbD0iJHtsaWJkaXJ9L3B5dGhvbjIuNy9saWItZHlubG9hZC9weWV4cGF0LnNvICR7bGliZGlyfS9weXRob24yLjcveG1sICR7bGliZGlyfS9weXRob24yLjcveG1sbGliLiogIgorCitTVU1NQVJZXyR7UE59LXhtbHJwYz0iUHl0aG9uIFhNTC1SUEMgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbHJwYz0iJHtQTn0tY29yZSAke1BOfS14bWwgJHtQTn0tbmV0c2VydmVyICR7UE59LWxhbmciCitGSUxFU18ke1BOfS14bWxycGM9IiR7bGliZGlyfS9weXRob24yLjcveG1scnBjbGliLiogJHtsaWJkaXJ9L3B5dGhvbjIuNy9TaW1wbGVYTUxSUENTZXJ2ZXIuKiAke2xpYmRpcn0vcHl0aG9uMi43L0RvY1hNTFJQQ1NlcnZlci4qICIKKworU1VNTUFSWV8ke1BOfS16bGliPSJQeXRob24gemxpYiBjb21wcmVzc2lvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0temxpYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXpsaWI9IiR7bGliZGlyfS9weXRob24yLjcvbGliLWR5bmxvYWQvemxpYi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbW9kdWxlcz0iQWxsIFB5dGhvbiBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlcz0iJHtQTn0tMnRvMyAke1BOfS1hcmdwYXJzZSAke1BOfS1hdWRpbyAke1BOfS1ic2RkYiAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21waWxlciAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb250ZXh0bGliICR7UE59LWNvcmUgJHtQTn0tY3J5cHQgJHtQTn0tY3R5cGVzICR7UE59LWN1cnNlcyAke1BOfS1kYXRldGltZSAke1BOfS1kYiAke1BOfS1kZWJ1Z2dlciAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kb2N0ZXN0ICR7UE59LWVsZW1lbnR0cmVlICR7UE59LWVtYWlsICR7UE59LWZjbnRsICR7UE59LWdkYm0gJHtQTn0taG90c2hvdCAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXNvdXJjZSAke1BOfS1yb2JvdHBhcnNlciAke1BOfS1zaGVsbCAke1BOfS1zbXRwZCAke1BOfS1zcWxpdGUzICR7UE59LXNxbGl0ZTMtdGVzdHMgJHtQTn0tc3RyaW5nb2xkICR7UE59LXN1YnByb2Nlc3MgJHtQTn0tc3lzbG9nICR7UE59LXRlcm1pbmFsICR7UE59LXRlc3RzICR7UE59LXRleHR1dGlscyAke1BOfS10aHJlYWRpbmcgJHtQTn0tdGtpbnRlciAke1BOfS11bml0dGVzdCAke1BOfS11bml4YWRtaW4gJHtQTn0teG1sICR7UE59LXhtbHJwYyAke1BOfS16bGliICAiCitBTExPV19FTVBUWV8ke1BOfS1tb2R1bGVzID0gIjEiCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tMy40LW1hbmlmZXN0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNC1tYW5pZmVzdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdlMTQ5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLTMuNC1tYW5pZmVzdC5pbmMKQEAgLTAsMCArMSwyNjggQEAKKworIyBXQVJOSU5HOiBUaGlzIGZpbGUgaXMgQVVUTyBHRU5FUkFURUQ6IE1hbnVhbCBlZGl0cyB3aWxsIGJlIGxvc3QgbmV4dCB0aW1lIEkgcmVnZW5lcmF0ZSB0aGUgZmlsZS4KKyMgR2VuZXJhdG9yOiAnLi4vLi4vLi4vc2NyaXB0cy9jb250cmliL3B5dGhvbi9nZW5lcmF0ZS1tYW5pZmVzdC0zLjQucHknIFZlcnNpb24gMjAxNDAxMzEgKEMpIDIwMDItMjAxMCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgVmlzaXQgdGhlIFB5dGhvbiBmb3IgRW1iZWRkZWQgU3lzdGVtcyBTaXRlID0+IGh0dHA6Ly93d3cuVmFuaWxsZS5kZS9wcm9qZWN0cy9weXRob24uc3B5CisKKyAKKworUFJPVklERVMrPSIke1BOfS0ydG8zICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscyAke1BOfS1kaXN0dXRpbHMtc3RhdGljZGV2ICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICIKKworUEFDS0FHRVM9IiR7UE59LWRiZyAke1BOfS0ydG8zICR7UE59LWFzeW5jaW8gJHtQTn0tYXVkaW8gJHtQTn0tY29kZWNzICR7UE59LWNvbXBpbGUgJHtQTn0tY29tcHJlc3Npb24gJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1jdHlwZXMgJHtQTn0tY3Vyc2VzICR7UE59LWRhdGV0aW1lICR7UE59LWRiICR7UE59LWRlYnVnZ2VyICR7UE59LWRldiAke1BOfS1kaWZmbGliICR7UE59LWRpc3R1dGlscy1zdGF0aWNkZXYgJHtQTn0tZGlzdHV0aWxzICR7UE59LWRvY3Rlc3QgJHtQTn0tZWxlbWVudHRyZWUgJHtQTn0tZW1haWwgJHtQTn0tZmNudGwgJHtQTn0tZ2RibSAke1BOfS1odG1sICR7UE59LWlkbGUgJHtQTn0taW1hZ2UgJHtQTn0taW1wb3J0bGliICR7UE59LWlvICR7UE59LWpzb24gJHtQTn0tbGFuZyAke1BOfS1sb2dnaW5nICR7UE59LW1haWxib3ggJHtQTn0tbWF0aCAke1BOfS1taW1lICR7UE59LW1tYXAgJHtQTn0tbXVsdGlwcm9jZXNzaW5nICR7UE59LW5ldGNsaWVudCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbnVtYmVycyAke1BOfS1waWNrbGUgJHtQTn0tcGtndXRpbCAke1BOfS1wcHJpbnQgJHtQTn0tcHJvZmlsZSAke1BOfS1weWRvYyAke1BOfS1yZSAke1BOfS1yZWFkbGluZSAke1BOfS1yZXBybGliICR7UE59LXJlc291cmNlICR7UE59LXNoZWxsICR7UE59LXNtdHBkICR7UE59LXNxbGl0ZTMgJHtQTn0tc3FsaXRlMy10ZXN0cyAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc3VicHJvY2VzcyAke1BOfS1zeXNsb2cgJHtQTn0tdGVybWluYWwgJHtQTn0tdGVzdHMgJHtQTn0tdGV4dHV0aWxzICR7UE59LXRocmVhZGluZyAke1BOfS10a2ludGVyICR7UE59LXVuaXR0ZXN0ICR7UE59LXVuaXhhZG1pbiAke1BOfS14bWwgJHtQTn0teG1scnBjICR7UE59LW1vZHVsZXMiCisKK1NVTU1BUllfJHtQTn0tMnRvMz0iUHl0aG9uIGF1dG9tYXRlZCBQeXRob24gMiB0byAzIGNvZGUgdHJhbnNsYXRvciIKK1JERVBFTkRTXyR7UE59LTJ0bzM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS0ydG8zPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYjJ0bzMgIgorCitTVU1NQVJZXyR7UE59LWFzeW5jaW89IlB5dGhvbiBBc3luY2hyb25vdXMgSS9PLCBldmVudCBsb29wLCBjb3JvdXRpbmVzIGFuZCB0YXNrcyIKK1JERVBFTkRTXyR7UE59LWFzeW5jaW89IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1hc3luY2lvPSIke2xpYmRpcn0vcHl0aG9uMy40L2FzeW5jaW8gIgorCitTVU1NQVJZXyR7UE59LWF1ZGlvPSJQeXRob24gQXVkaW8gSGFuZGxpbmciCitSREVQRU5EU18ke1BOfS1hdWRpbz0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWF1ZGlvPSIke2xpYmRpcn0vcHl0aG9uMy40L3dhdmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NodW5rLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zbmRoZHIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL29zc2F1ZGlvZGV2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9hdWRpb29wLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9hdWRpb2Rldi4qICR7bGliZGlyfS9weXRob24zLjQvc3VuYXVkaW8uKiAke2xpYmRpcn0vcHl0aG9uMy40L3N1bmF1LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90b2FpZmYuKiAiCisKK1NVTU1BUllfJHtQTn0tY29kZWNzPSJQeXRob24gY29kZWNzLCBlbmNvZGluZ3MgJiBpMThuIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb2RlY3M9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LWNvZGVjcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb2RlY3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L2VuY29kaW5ncyAke2xpYmRpcn0vcHl0aG9uMy40L2dldHRleHQuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xvY2FsZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2xvY2FsZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2NvZGVjcyogJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fbXVsdGlieXRlY29kZWMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3VuaWNvZGVkYXRhLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmdwcmVwLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC94ZHJsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0tY29tcGlsZT0iUHl0aG9uIGJ5dGVjb2RlIGNvbXBpbGF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jb21waWxlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY29tcGlsZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9weV9jb21waWxlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb21waWxlYWxsLiogIgorCitTVU1NQVJZXyR7UE59LWNvbXByZXNzaW9uPSJQeXRob24gaGlnaC1sZXZlbCBjb21wcmVzc2lvbiBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY29tcHJlc3Npb249IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tY29tcHJlc3Npb249IiR7bGliZGlyfS9weXRob24zLjQvZ3ppcC4qICR7bGliZGlyfS9weXRob24zLjQvemlwZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvdGFyZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYnoyLiouc28gIgorCitTVU1NQVJZXyR7UE59LWNvcmU9IlB5dGhvbiBpbnRlcnByZXRlciBhbmQgY29yZSBtb2R1bGVzIgorUkRFUEVORFNfJHtQTn0tY29yZT0iJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1yZXBybGliICR7UE59LWNvZGVjcyAke1BOfS1pbyAke1BOfS1tYXRoIgorRklMRVNfJHtQTn0tY29yZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9fX2Z1dHVyZV9fLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9fYWJjb2xsLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvcHkuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvcHlyZWcuKiAke2xpYmRpcn0vcHl0aG9uMy40L0NvbmZpZ1BhcnNlci4qICR7bGliZGlyfS9weXRob24zLjQvZ2VuZXJpY3BhdGguKiAke2xpYmRpcn0vcHl0aG9uMy40L2dldG9wdC4qICR7bGliZGlyfS9weXRob24zLjQvbGluZWNhY2hlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9uZXcuKiAke2xpYmRpcn0vcHl0aG9uMy40L29zLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wb3NpeHBhdGguKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0cnVjdC4qICR7bGliZGlyfS9weXRob24zLjQvd2FybmluZ3MuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NpdGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N0YXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L1VzZXJEaWN0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9Vc2VyTGlzdC4qICR7bGliZGlyfS9weXRob24zLjQvVXNlclN0cmluZy4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYmluYXNjaWkuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zdHJ1Y3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3RpbWUuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3hyZWFkbGluZXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3R5cGVzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wbGF0Zm9ybS4qICR7YmluZGlyfS9weXRob24qICR7bGliZGlyfS9weXRob24zLjQvX3dlYWtyZWZzZXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3N5c2NvbmZpZy4qICR7bGliZGlyfS9weXRob24zLjQvX3N5c2NvbmZpZ2RhdGEuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZy9NYWtlZmlsZSAke2luY2x1ZGVkaXJ9L3B5dGhvbiR7UFlUSE9OX0JJTkFCSX0vcHljb25maWcqLmggJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29sbGVjdGlvbnMgJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vX2NvbGxlY3Rpb25zX2FiYy4qICR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zaXRlYnVpbHRpbnMuKiAke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlY3VzdG9taXplLnB5ICIKKworU1VNTUFSWV8ke1BOfS1jcnlwdD0iUHl0aG9uIGJhc2ljIGNyeXB0b2dyYXBoaWMgYW5kIGhhc2hpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWNyeXB0PSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3J5cHQ9IiR7bGliZGlyfS9weXRob24zLjQvaGFzaGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvbWQ1LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGEuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NyeXB0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9faGFzaGxpYi4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NoYTI1Ni4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NoYTUxMi4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1jdHlwZXM9IlB5dGhvbiBDIHR5cGVzIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1jdHlwZXM9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1jdHlwZXM9IiR7bGliZGlyfS9weXRob24zLjQvY3R5cGVzICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N0eXBlcy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2N0eXBlc190ZXN0Liouc28gIgorCitTVU1NQVJZXyR7UE59LWN1cnNlcz0iUHl0aG9uIGN1cnNlcyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tY3Vyc2VzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tY3Vyc2VzPSIke2xpYmRpcn0vcHl0aG9uMy40L2N1cnNlcyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jdXJzZXMuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jdXJzZXNfcGFuZWwuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGF0ZXRpbWU9IlB5dGhvbiBjYWxlbmRhciBhbmQgdGltZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tZGF0ZXRpbWU9IiR7UE59LWNvcmUgJHtQTn0tY29kZWNzIgorRklMRVNfJHtQTn0tZGF0ZXRpbWU9IiR7bGliZGlyfS9weXRob24zLjQvX3N0cnB0aW1lLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jYWxlbmRhci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvZGF0ZXRpbWUuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tZGI9IlB5dGhvbiBmaWxlLWJhc2VkIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1kYj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRiPSIke2xpYmRpcn0vcHl0aG9uMy40L2FueWRibS4qICR7bGliZGlyfS9weXRob24zLjQvZHVtYmRibS4qICR7bGliZGlyfS9weXRob24zLjQvd2hpY2hkYi4qICR7bGliZGlyfS9weXRob24zLjQvZGJtICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2RibS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1kZWJ1Z2dlcj0iUHl0aG9uIGRlYnVnZ2VyIgorUkRFUEVORFNfJHtQTn0tZGVidWdnZXI9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1yZSAke1BOfS1zdHJpbmdvbGQgJHtQTn0tc2hlbGwgJHtQTn0tcHByaW50IgorRklMRVNfJHtQTn0tZGVidWdnZXI9IiR7bGliZGlyfS9weXRob24zLjQvYmRiLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9wZGIuKiAiCisKK1NVTU1BUllfJHtQTn0tZGV2PSJQeXRob24gZGV2ZWxvcG1lbnQgcGFja2FnZSIKK1JERVBFTkRTXyR7UE59LWRldj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWRldj0iJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2xpYmRpcn0vKi5sYSAke2xpYmRpcn0vKi5hICR7bGliZGlyfS8qLm8gJHtsaWJkaXJ9L3BrZ2NvbmZpZyAke2Jhc2VfbGliZGlyfS8qLmEgJHtiYXNlX2xpYmRpcn0vKi5vICR7ZGF0YWRpcn0vYWNsb2NhbCAke2RhdGFkaXJ9L3BrZ2NvbmZpZyAiCisKK1NVTU1BUllfJHtQTn0tZGlmZmxpYj0iUHl0aG9uIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzIgorUkRFUEVORFNfJHtQTn0tZGlmZmxpYj0iJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWRpZmZsaWI9IiR7bGliZGlyfS9weXRob24zLjQvZGlmZmxpYi4qICIKKworU1VNTUFSWV8ke1BOfS1kaXN0dXRpbHM9IlB5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzIgorUkRFUEVORFNfJHtQTn0tZGlzdHV0aWxzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZGlzdHV0aWxzPSIke2xpYmRpcn0vcHl0aG9uMy40L2NvbmZpZyAke2xpYmRpcn0vcHl0aG9uMy40L2Rpc3R1dGlscyAiCisKK1NVTU1BUllfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iUHl0aG9uIGRpc3RyaWJ1dGlvbiB1dGlsaXRpZXMgKHN0YXRpYyBsaWJyYXJpZXMpIgorUkRFUEVORFNfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iJHtQTn0tZGlzdHV0aWxzIgorRklMRVNfJHtQTn0tZGlzdHV0aWxzLXN0YXRpY2Rldj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb25maWcvbGliKi5hICIKKworU1VNTUFSWV8ke1BOfS1kb2N0ZXN0PSJQeXRob24gZnJhbWV3b3JrIGZvciBydW5uaW5nIGV4YW1wbGVzIGluIGRvY3N0cmluZ3MiCitSREVQRU5EU18ke1BOfS1kb2N0ZXN0PSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tdW5pdHRlc3QgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiIKK0ZJTEVTXyR7UE59LWRvY3Rlc3Q9IiR7bGliZGlyfS9weXRob24zLjQvZG9jdGVzdC4qICIKKworU1VNTUFSWV8ke1BOfS1lbGVtZW50dHJlZT0iUHl0aG9uIGVsZW1lbnRyZWUiCitSREVQRU5EU18ke1BOfS1lbGVtZW50dHJlZT0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LWVsZW1lbnR0cmVlPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19lbGVtZW50dHJlZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1lbWFpbD0iUHl0aG9uIGVtYWlsIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1lbWFpbD0iJHtQTn0tY29yZSAke1BOfS1pbyAke1BOfS1yZSAke1BOfS1taW1lICR7UE59LWF1ZGlvICR7UE59LWltYWdlICR7UE59LW5ldGNsaWVudCIKK0ZJTEVTXyR7UE59LWVtYWlsPSIke2xpYmRpcn0vcHl0aG9uMy40L2ltYXBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2VtYWlsICIKKworU1VNTUFSWV8ke1BOfS1mY250bD0iUHl0aG9uJ3MgZmNudGwgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tZmNudGw9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1mY250bD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9mY250bC4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1nZGJtPSJQeXRob24gR05VIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1nZGJtPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tZ2RibT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fZ2RibS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1odG1sPSJQeXRob24gSFRNTCBwcm9jZXNzaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1odG1sPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taHRtbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9mb3JtYXR0ZXIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2h0bWxlbnRpdHlkZWZzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9odG1sbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tYXJrdXBiYXNlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zZ21sbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9IVE1MUGFyc2VyLiogIgorCitTVU1NQVJZXyR7UE59LWlkbGU9IlB5dGhvbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IgorUkRFUEVORFNfJHtQTn0taWRsZT0iJHtQTn0tY29yZSAke1BOfS10a2ludGVyIgorRklMRVNfJHtQTn0taWRsZT0iJHtiaW5kaXJ9L2lkbGUgJHtsaWJkaXJ9L3B5dGhvbjMuNC9pZGxlbGliICIKKworU1VNTUFSWV8ke1BOfS1pbWFnZT0iUHl0aG9uIGdyYXBoaWNhbCBpbWFnZSBoYW5kbGluZyIKK1JERVBFTkRTXyR7UE59LWltYWdlPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1hZ2U9IiR7bGliZGlyfS9weXRob24zLjQvY29sb3JzeXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2ltZ2hkci4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvaW1hZ2VvcC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvcmdiaW1nLiouc28gIgorCitTVU1NQVJZXyR7UE59LWltcG9ydGxpYj0iUHl0aG9uIGltcG9ydCBpbXBsZW1lbnRhdGlvbiBsaWJyYXJ5IgorUkRFUEVORFNfJHtQTn0taW1wb3J0bGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0taW1wb3J0bGliPSIke2xpYmRpcn0vcHl0aG9uMy40L2ltcG9ydGxpYiAiCisKK1NVTU1BUllfJHtQTn0taW89IlB5dGhvbiBsb3ctbGV2ZWwgSS9PIgorUkRFUEVORFNfJHtQTn0taW89IiR7UE59LWNvcmUgJHtQTn0tbWF0aCIKK0ZJTEVTXyR7UE59LWlvPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19zb2NrZXQuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19pby4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3NzbC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvc2VsZWN0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC90ZXJtaW9zLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9jU3RyaW5nSU8uKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3BpcGVzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zb2NrZXQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NzbC4qICR7bGliZGlyfS9weXRob24zLjQvdGVtcGZpbGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L1N0cmluZ0lPLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9pby4qICR7bGliZGlyfS9weXRob24zLjQvX3B5aW8uKiAiCisKK1NVTU1BUllfJHtQTn0tanNvbj0iUHl0aG9uIEpTT04gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWpzb249IiR7UE59LWNvcmUgJHtQTn0tbWF0aCAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LWpzb249IiR7bGliZGlyfS9weXRob24zLjQvanNvbiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19qc29uLiouc28gIgorCitTVU1NQVJZXyR7UE59LWxhbmc9IlB5dGhvbiBsb3ctbGV2ZWwgbGFuZ3VhZ2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LWxhbmc9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1sYW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19iaXNlY3QuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19jb2xsZWN0aW9ucy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2hlYXBxLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fd2Vha3JlZi4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2Z1bmN0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvYXJyYXkuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2l0ZXJ0b29scy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvb3BlcmF0b3IuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3BhcnNlci4qLnNvICR7bGliZGlyfS9weXRob24zLjQvYXRleGl0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9iaXNlY3QuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvZGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2NvZGVvcC4qICR7bGliZGlyfS9weXRob24zLjQvY29sbGVjdGlvbnMuKiAke2xpYmRpcn0vcHl0aG9uMy40L19jb2xsZWN0aW9uc19hYmMuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Rpcy4qICR7bGliZGlyfS9weXRob24zLjQvZnVuY3Rvb2xzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9oZWFwcS4qICR7bGliZGlyfS9weXRob24zLjQvaW5zcGVjdC4qICR7bGliZGlyfS9weXRob24zLjQva2V5d29yZC4qICR7bGliZGlyfS9weXRob24zLjQvb3Bjb2RlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zeW1ib2wuKiAke2xpYmRpcn0vcHl0aG9uMy40L3JlcHIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3Rva2VuLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90b2tlbml6ZS4qICR7bGliZGlyfS9weXRob24zLjQvdHJhY2ViYWNrLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC93ZWFrcmVmLiogIgorCitTVU1NQVJZXyR7UE59LWxvZ2dpbmc9IlB5dGhvbiBsb2dnaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1sb2dnaW5nPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LWxhbmcgJHtQTn0tcGlja2xlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LWxvZ2dpbmc9IiR7bGliZGlyfS9weXRob24zLjQvbG9nZ2luZyAiCisKK1NVTU1BUllfJHtQTn0tbWFpbGJveD0iUHl0aG9uIG1haWxib3ggZm9ybWF0IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tYWlsYm94PSIke1BOfS1jb3JlICR7UE59LW1pbWUiCitGSUxFU18ke1BOfS1tYWlsYm94PSIke2xpYmRpcn0vcHl0aG9uMy40L21haWxib3guKiAiCisKK1NVTU1BUllfJHtQTn0tbWF0aD0iUHl0aG9uIG1hdGggc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1hdGg9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1tYXRoPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NtYXRoLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9tYXRoLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fcmFuZG9tLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9yYW5kb20uKiAke2xpYmRpcn0vcHl0aG9uMy40L3NldHMuKiAiCisKK1NVTU1BUllfJHtQTn0tbWltZT0iUHl0aG9uIE1JTUUgaGFuZGxpbmcgQVBJcyIKK1JERVBFTkRTXyR7UE59LW1pbWU9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1taW1lPSIke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0b29scy4qICR7bGliZGlyfS9weXRob24zLjQvdXUuKiAke2xpYmRpcn0vcHl0aG9uMy40L3F1b3ByaS4qICR7bGliZGlyfS9weXRob24zLjQvcmZjODIyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9NaW1lV3JpdGVyLiogIgorCitTVU1NQVJZXyR7UE59LW1tYXA9IlB5dGhvbiBtZW1vcnktbWFwcGVkIGZpbGUgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LW1tYXA9IiR7UE59LWNvcmUgJHtQTn0taW8iCitGSUxFU18ke1BOfS1tbWFwPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL21tYXAuKi5zbyAiCisKK1NVTU1BUllfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSJQeXRob24gbXVsdGlwcm9jZXNzaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1tdWx0aXByb2Nlc3Npbmc9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tbGFuZyAke1BOfS1waWNrbGUgJHtQTn0tdGhyZWFkaW5nICR7UE59LWN0eXBlcyAke1BOfS1tbWFwIgorRklMRVNfJHtQTn0tbXVsdGlwcm9jZXNzaW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL19tdWx0aXByb2Nlc3NpbmcuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L211bHRpcHJvY2Vzc2luZyAiCisKK1NVTU1BUllfJHtQTn0tbmV0Y2xpZW50PSJQeXRob24gSW50ZXJuZXQgUHJvdG9jb2wgY2xpZW50cyIKK1JERVBFTkRTXyR7UE59LW5ldGNsaWVudD0iJHtQTn0tY29yZSAke1BOfS1jcnlwdCAke1BOfS1kYXRldGltZSAke1BOfS1pbyAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW5ldGNsaWVudD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC8qQ29va2llKi4qICR7bGliZGlyfS9weXRob24zLjQvYmFzZTY0LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb29raWVsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L2Z0cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvZ29waGVybGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9obWFjLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9odHRwbGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9taW1ldHlwZXMuKiAke2xpYmRpcn0vcHl0aG9uMy40L25udHBsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BvcGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvc210cGxpYi4qICR7bGliZGlyfS9weXRob24zLjQvdGVsbmV0bGliLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC91cmxsaWIgJHtsaWJkaXJ9L3B5dGhvbjMuNC91dWlkLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZmM4MjIuKiAke2xpYmRpcn0vcHl0aG9uMy40L21pbWV0b29scy4qICIKKworU1VNTUFSWV8ke1BOfS1uZXRzZXJ2ZXI9IlB5dGhvbiBJbnRlcm5ldCBQcm90b2NvbCBzZXJ2ZXJzIgorUkRFUEVORFNfJHtQTn0tbmV0c2VydmVyPSIke1BOfS1jb3JlICR7UE59LW5ldGNsaWVudCAke1BOfS1zaGVsbCAke1BOfS10aHJlYWRpbmciCitGSUxFU18ke1BOfS1uZXRzZXJ2ZXI9IiR7bGliZGlyfS9weXRob24zLjQvY2dpLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC8qSFRUUFNlcnZlci4qICR7bGliZGlyfS9weXRob24zLjQvU29ja2V0U2VydmVyLiogIgorCitTVU1NQVJZXyR7UE59LW51bWJlcnM9IlB5dGhvbiBudW1iZXIgQVBJcyIKK1JERVBFTkRTXyR7UE59LW51bWJlcnM9IiR7UE59LWNvcmUgJHtQTn0tbGFuZyAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LW51bWJlcnM9IiR7bGliZGlyfS9weXRob24zLjQvZGVjaW1hbC4qICR7bGliZGlyfS9weXRob24zLjQvZnJhY3Rpb25zLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9udW1iZXJzLiogIgorCitTVU1NQVJZXyR7UE59LXBpY2tsZT0iUHl0aG9uIHNlcmlhbGlzYXRpb24vcGVyc2lzdGVuY2Ugc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXBpY2tsZT0iJHtQTn0tY29yZSAke1BOfS1jb2RlY3MgJHtQTn0taW8gJHtQTn0tcmUiCitGSUxFU18ke1BOfS1waWNrbGU9IiR7bGliZGlyfS9weXRob24zLjQvcGlja2xlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zaGVsdmUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL2NQaWNrbGUuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L3BpY2tsZXRvb2xzLiogIgorCitTVU1NQVJZXyR7UE59LXBrZ3V0aWw9IlB5dGhvbiBwYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5IHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wa2d1dGlsPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcGtndXRpbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9wa2d1dGlsLiogIgorCitTVU1NQVJZXyR7UE59LXBwcmludD0iUHl0aG9uIHByZXR0eS1wcmludCBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcHByaW50PSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tcHByaW50PSIke2xpYmRpcn0vcHl0aG9uMy40L3BwcmludC4qICIKKworU1VNTUFSWV8ke1BOfS1wcm9maWxlPSJQeXRob24gYmFzaWMgcGVyZm9ybWFuY2UgcHJvZmlsaW5nIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1wcm9maWxlPSIke1BOfS1jb3JlICR7UE59LXRleHR1dGlscyIKK0ZJTEVTXyR7UE59LXByb2ZpbGU9IiR7bGliZGlyfS9weXRob24zLjQvcHJvZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvcHN0YXRzLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jUHJvZmlsZS4qICR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX2xzcHJvZi4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1weWRvYz0iUHl0aG9uIGludGVyYWN0aXZlIGhlbHAgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXB5ZG9jPSIke1BOfS1jb3JlICR7UE59LWxhbmcgJHtQTn0tc3RyaW5nb2xkICR7UE59LXJlIgorRklMRVNfJHtQTn0tcHlkb2M9IiR7YmluZGlyfS9weWRvYyAke2xpYmRpcn0vcHl0aG9uMy40L3B5ZG9jLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9weWRvY19kYXRhICIKKworU1VNTUFSWV8ke1BOfS1yZT0iUHl0aG9uIFJlZ3VsYXIgRXhwcmVzc2lvbiBBUElzIgorUkRFUEVORFNfJHtQTn0tcmU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZS4qICR7bGliZGlyfS9weXRob24zLjQvc3JlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfY29tcGlsZS4qICR7bGliZGlyfS9weXRob24zLjQvc3JlX2NvbnN0YW50cyogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcmVfcGFyc2UuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVhZGxpbmU9IlB5dGhvbiByZWFkbGluZSBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tcmVhZGxpbmU9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZWFkbGluZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZWFkbGluZS4qLnNvICR7bGliZGlyfS9weXRob24zLjQvcmxjb21wbGV0ZXIuKiAiCisKK1NVTU1BUllfJHtQTn0tcmVwcmxpYj0iUHl0aG9uIGFsdGVybmF0ZSByZXByKCkgaW1wbGVtZW50YXRpb24iCitSREVQRU5EU18ke1BOfS1yZXBybGliPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tcmVwcmxpYj0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9yZXBybGliLnB5ICIKKworU1VNTUFSWV8ke1BOfS1yZXNvdXJjZT0iUHl0aG9uIHJlc291cmNlIGNvbnRyb2wgaW50ZXJmYWNlIgorUkRFUEVORFNfJHtQTn0tcmVzb3VyY2U9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1yZXNvdXJjZT0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9yZXNvdXJjZS4qLnNvICIKKworU1VNTUFSWV8ke1BOfS1zaGVsbD0iUHl0aG9uIHNoZWxsLWxpa2UgZnVuY3Rpb25hbGl0eSIKK1JERVBFTkRTXyR7UE59LXNoZWxsPSIke1BOfS1jb3JlICR7UE59LXJlIgorRklMRVNfJHtQTn0tc2hlbGw9IiR7bGliZGlyfS9weXRob24zLjQvY21kLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9jb21tYW5kcy4qICR7bGliZGlyfS9weXRob24zLjQvZGlyY2FjaGUuKiAke2xpYmRpcn0vcHl0aG9uMy40L2ZubWF0Y2guKiAke2xpYmRpcn0vcHl0aG9uMy40L2dsb2IuKiAke2xpYmRpcn0vcHl0aG9uMy40L3BvcGVuMi4qICR7bGliZGlyfS9weXRob24zLjQvc2hsZXguKiAke2xpYmRpcn0vcHl0aG9uMy40L3NodXRpbC4qICIKKworU1VNTUFSWV8ke1BOfS1zbXRwZD0iUHl0aG9uIFNpbXBsZSBNYWlsIFRyYW5zcG9ydCBEYWVtb24iCitSREVQRU5EU18ke1BOfS1zbXRwZD0iJHtQTn0tY29yZSAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tZW1haWwgJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LXNtdHBkPSIke2JpbmRpcn0vc210cGQuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NtdHBkLiogIgorCitTVU1NQVJZXyR7UE59LXNxbGl0ZTM9IlB5dGhvbiBTcWxpdGUzIGRhdGFiYXNlIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS1zcWxpdGUzPSIke1BOfS1jb3JlICR7UE59LWRhdGV0aW1lICR7UE59LWxhbmcgJHtQTn0tY3J5cHQgJHtQTn0taW8gJHtQTn0tdGhyZWFkaW5nIgorRklMRVNfJHtQTn0tc3FsaXRlMz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fc3FsaXRlMy4qLnNvICR7bGliZGlyfS9weXRob24zLjQvc3FsaXRlMy9kYmFwaTIuKiAke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvX19pbml0X18uKiAke2xpYmRpcn0vcHl0aG9uMy40L3NxbGl0ZTMvZHVtcC4qICIKKworU1VNTUFSWV8ke1BOfS1zcWxpdGUzLXRlc3RzPSJQeXRob24gU3FsaXRlMyBkYXRhYmFzZSBzdXBwb3J0IHRlc3RzIgorUkRFUEVORFNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtQTn0tY29yZSAke1BOfS1zcWxpdGUzIgorRklMRVNfJHtQTn0tc3FsaXRlMy10ZXN0cz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9zcWxpdGUzL3Rlc3QgIgorCitTVU1NQVJZXyR7UE59LXN0cmluZ29sZD0iUHl0aG9uIHN0cmluZyBBUElzIFtkZXByZWNhdGVkXSIKK1JERVBFTkRTXyR7UE59LXN0cmluZ29sZD0iJHtQTn0tY29yZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXN0cmluZ29sZD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9zdHJvcC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvc3RyaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdHJpbmdvbGQuKiAiCisKK1NVTU1BUllfJHtQTn0tc3VicHJvY2Vzcz0iUHl0aG9uIHN1YnByb2Nlc3Mgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXN1YnByb2Nlc3M9IiR7UE59LWNvcmUgJHtQTn0taW8gJHtQTn0tcmUgJHtQTn0tZmNudGwgJHtQTn0tcGlja2xlIgorRklMRVNfJHtQTn0tc3VicHJvY2Vzcz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9zdWJwcm9jZXNzLiogIgorCitTVU1NQVJZXyR7UE59LXN5c2xvZz0iUHl0aG9uIHN5c2xvZyBpbnRlcmZhY2UiCitSREVQRU5EU18ke1BOfS1zeXNsb2c9IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS1zeXNsb2c9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvc3lzbG9nLiouc28gIgorCitTVU1NQVJZXyR7UE59LXRlcm1pbmFsPSJQeXRob24gdGVybWluYWwgY29udHJvbGxpbmcgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRlcm1pbmFsPSIke1BOfS1jb3JlICR7UE59LWlvIgorRklMRVNfJHtQTn0tdGVybWluYWw9IiR7bGliZGlyfS9weXRob24zLjQvcHR5LiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90dHkuKiAiCisKK1NVTU1BUllfJHtQTn0tdGVzdHM9IlB5dGhvbiB0ZXN0cyIKK1JERVBFTkRTXyR7UE59LXRlc3RzPSIke1BOfS1jb3JlIgorRklMRVNfJHtQTn0tdGVzdHM9IiR7bGliZGlyfS9weXRob24zLjQvdGVzdCAiCisKK1NVTU1BUllfJHtQTn0tdGV4dHV0aWxzPSJQeXRob24gb3B0aW9uIHBhcnNpbmcsIHRleHQgd3JhcHBpbmcgYW5kIENTViBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0tdGV4dHV0aWxzPSIke1BOfS1jb3JlICR7UE59LWlvICR7UE59LXJlICR7UE59LXN0cmluZ29sZCIKK0ZJTEVTXyR7UE59LXRleHR1dGlscz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9fY3N2Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9jc3YuKiAke2xpYmRpcn0vcHl0aG9uMy40L29wdHBhcnNlLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC90ZXh0d3JhcC4qICIKKworU1VNTUFSWV8ke1BOfS10aHJlYWRpbmc9IlB5dGhvbiB0aHJlYWRpbmcgJiBzeW5jaHJvbml6YXRpb24gc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXRocmVhZGluZz0iJHtQTn0tY29yZSAke1BOfS1sYW5nIgorRklMRVNfJHtQTn0tdGhyZWFkaW5nPSIke2xpYmRpcn0vcHl0aG9uMy40L190aHJlYWRpbmdfbG9jYWwuKiAke2xpYmRpcn0vcHl0aG9uMy40L2R1bW15X3RocmVhZC4qICR7bGliZGlyfS9weXRob24zLjQvZHVtbXlfdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9tdXRleC4qICR7bGliZGlyfS9weXRob24zLjQvdGhyZWFkaW5nLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC9RdWV1ZS4qICIKKworU1VNTUFSWV8ke1BOfS10a2ludGVyPSJQeXRob24gVGNsL1RrIGJpbmRpbmdzIgorUkRFUEVORFNfJHtQTn0tdGtpbnRlcj0iJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LXRraW50ZXI9IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvX3RraW50ZXIuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi10ayAke2xpYmRpcn0vcHl0aG9uMy40L3RraW50ZXIgIgorCitTVU1NQVJZXyR7UE59LXVuaXR0ZXN0PSJQeXRob24gdW5pdCB0ZXN0aW5nIGZyYW1ld29yayIKK1JERVBFTkRTXyR7UE59LXVuaXR0ZXN0PSIke1BOfS1jb3JlICR7UE59LXN0cmluZ29sZCAke1BOfS1sYW5nICR7UE59LWlvICR7UE59LWRpZmZsaWIgJHtQTn0tcHByaW50ICR7UE59LXNoZWxsIgorRklMRVNfJHtQTn0tdW5pdHRlc3Q9IiR7bGliZGlyfS9weXRob24zLjQvdW5pdHRlc3QvICIKKworU1VNTUFSWV8ke1BOfS11bml4YWRtaW49IlB5dGhvbiBVbml4IGFkbWluaXN0cmF0aW9uIHN1cHBvcnQiCitSREVQRU5EU18ke1BOfS11bml4YWRtaW49IiR7UE59LWNvcmUiCitGSUxFU18ke1BOfS11bml4YWRtaW49IiR7bGliZGlyfS9weXRob24zLjQvbGliLWR5bmxvYWQvbmlzLiouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9ncnAuKi5zbyAke2xpYmRpcn0vcHl0aG9uMy40L2xpYi1keW5sb2FkL3B3ZC4qLnNvICR7bGliZGlyfS9weXRob24zLjQvZ2V0cGFzcy4qICIKKworU1VNTUFSWV8ke1BOfS14bWw9IlB5dGhvbiBiYXNpYyBYTUwgc3VwcG9ydCIKK1JERVBFTkRTXyR7UE59LXhtbD0iJHtQTn0tY29yZSAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1yZSIKK0ZJTEVTXyR7UE59LXhtbD0iJHtsaWJkaXJ9L3B5dGhvbjMuNC9saWItZHlubG9hZC9weWV4cGF0Liouc28gJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWwgJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWxsaWIuKiAiCisKK1NVTU1BUllfJHtQTn0teG1scnBjPSJQeXRob24gWE1MLVJQQyBzdXBwb3J0IgorUkRFUEVORFNfJHtQTn0teG1scnBjPSIke1BOfS1jb3JlICR7UE59LXhtbCAke1BOfS1uZXRzZXJ2ZXIgJHtQTn0tbGFuZyIKK0ZJTEVTXyR7UE59LXhtbHJwYz0iJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWxycGNsaWIuKiAke2xpYmRpcn0vcHl0aG9uMy40L1NpbXBsZVhNTFJQQ1NlcnZlci4qICR7bGliZGlyfS9weXRob24zLjQvRG9jWE1MUlBDU2VydmVyLiogJHtsaWJkaXJ9L3B5dGhvbjMuNC94bWxycGMgIgorCitTVU1NQVJZXyR7UE59LW1vZHVsZXM9IkFsbCBQeXRob24gbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LW1vZHVsZXM9IiR7UE59LTJ0bzMgJHtQTn0tYXN5bmNpbyAke1BOfS1hdWRpbyAke1BOfS1jb2RlY3MgJHtQTn0tY29tcGlsZSAke1BOfS1jb21wcmVzc2lvbiAke1BOfS1jb3JlICR7UE59LWNyeXB0ICR7UE59LWN0eXBlcyAke1BOfS1jdXJzZXMgJHtQTn0tZGF0ZXRpbWUgJHtQTn0tZGIgJHtQTn0tZGVidWdnZXIgJHtQTn0tZGlmZmxpYiAke1BOfS1kaXN0dXRpbHMgJHtQTn0tZG9jdGVzdCAke1BOfS1lbGVtZW50dHJlZSAke1BOfS1lbWFpbCAke1BOfS1mY250bCAke1BOfS1nZGJtICR7UE59LWh0bWwgJHtQTn0taWRsZSAke1BOfS1pbWFnZSAke1BOfS1pbXBvcnRsaWIgJHtQTn0taW8gJHtQTn0tanNvbiAke1BOfS1sYW5nICR7UE59LWxvZ2dpbmcgJHtQTn0tbWFpbGJveCAke1BOfS1tYXRoICR7UE59LW1pbWUgJHtQTn0tbW1hcCAke1BOfS1tdWx0aXByb2Nlc3NpbmcgJHtQTn0tbmV0Y2xpZW50ICR7UE59LW5ldHNlcnZlciAke1BOfS1udW1iZXJzICR7UE59LXBpY2tsZSAke1BOfS1wa2d1dGlsICR7UE59LXBwcmludCAke1BOfS1wcm9maWxlICR7UE59LXB5ZG9jICR7UE59LXJlICR7UE59LXJlYWRsaW5lICR7UE59LXJlcHJsaWIgJHtQTn0tcmVzb3VyY2UgJHtQTn0tc2hlbGwgJHtQTn0tc210cGQgJHtQTn0tc3FsaXRlMyAke1BOfS1zcWxpdGUzLXRlc3RzICR7UE59LXN0cmluZ29sZCAke1BOfS1zdWJwcm9jZXNzICR7UE59LXN5c2xvZyAke1BOfS10ZXJtaW5hbCAke1BOfS10ZXN0cyAke1BOfS10ZXh0dXRpbHMgJHtQTn0tdGhyZWFkaW5nICR7UE59LXRraW50ZXIgJHtQTn0tdW5pdHRlc3QgJHtQTn0tdW5peGFkbWluICR7UE59LXhtbCAke1BOfS14bWxycGMgICIKK0FMTE9XX0VNUFRZXyR7UE59LW1vZHVsZXMgPSAiMSIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWFzeW5jXzAuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZDBiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1hc3luY18wLjYuMi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlB5dGhvbiBmcmFtZXdvcmsgdG8gcHJvY2VzcyBpbnRlcmRlcGVuZGVudCB0YXNrcyBpbiBhIHBvb2wgb2Ygd29ya2VycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2FzeW5jIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1BLRy1JTkZPO2JlZ2lubGluZT04O2VuZGxpbmU9ODttZDU9ODhkZjhlNzhiOWVkZmQ3NDQ5NTM4NjIxNzlmMmQxNGUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2UvYS9hc3luYy9hc3luYy0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiOWIwNmI1OTk3ZGUyMTU0ZjNiYzAyNzNmODBiY2VmNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWM2ODk0ZDg3NmU0NTg3OGZhYWU0OTNiMGNmNjFkMGUyOGVjNDE3MzM0NDQ4YWMwYTZlYTIyMjlkODM0MzA1MSIKKworUyA9ICIke1dPUktESVJ9L2FzeW5jLSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXRocmVhZGluZyBweXRob24tbGFuZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kYnVzXzEuMi4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzE0ZGNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZGJ1c18xLjIuMC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIERCdXMgaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIHN5c3RlbSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvU29mdHdhcmUvZGJ1cyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGI4MzA0N2NlOWU5NDhiNjdjMGZhY2M1ZjIzMzQ3NmEiCitERVBFTkRTID0gImV4cGF0IGRidXMgZGJ1cy1nbGliIHZpcnR1YWwvbGliaW50bCBweXRob24tcHlyZXgtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly9kYnVzLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy9kYnVzLXB5dGhvbi9kYnVzLXB5dGhvbi0ke1BWfS50YXIuZ3ogXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjA5Y2QyZDFhMDU3Y2M0MzJjZTk0NGRlM2ZjMDZiZjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTEyYzZjOGIyYmYzYTkzMDJmNzUxNjY5NTJjYmU0MWQ2YjM4YzM0NDFiYmM2NzY3ZGJkNDk4OTQyMzE2YzZkZiIKK1MgPSAiJHtXT1JLRElSfS9kYnVzLXB5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMtYmFzZSBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gIiIKK1BBQ0tBR0VDT05GSUdbZG9jc10gPSAiLS1lbmFibGUtaHRtbC1kb2NzLC0tZGlzYWJsZS1odG1sLWRvY3MscHl0aG9uLWRvY3V0aWxzLW5hdGl2ZSIKK1BBQ0tBR0VDT05GSUdbYXBpLWRvY3NdID0gIi0tZW5hYmxlLWFwaS1kb2NzLC0tZGlzYWJsZS1hcGktZG9jcyxweXRob24tZG9jdXRpbHMtbmF0aXZlIHB5dGhvbi1lcHlkb2MtbmF0aXZlIgorCitleHBvcnQgQlVJTERfU1lTCitleHBvcnQgSE9TVF9TWVMKKworZXhwb3J0IFNUQUdJTkdfTElCRElSCitleHBvcnQgU1RBR0lOR19JTkNESVIKKworUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLWlvIHB5dGhvbi1sb2dnaW5nIHB5dGhvbi1zdHJpbmdvbGQgcHl0aG9uLXRocmVhZGluZyBweXRob24teG1sIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wa2djb25maWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1kb2N1dGlsc18wLjEyLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2RhODhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZG9jdXRpbHNfMC4xMi5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlRleHQgcHJvY2Vzc2luZyBzeXN0ZW0gZm9yIGRvY3VtZW50YXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiAmIEJTRC0yLUNsYXVzZSAmIEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy50eHQ7bWQ1PWE3MjJmYmRjMjAzNDdkYjdiNjkyMjM1OTRkZDU0NTc0IgorCitERVBFTkRTID0gInB5dGhvbiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vZG9jdXRpbHMvZG9jdXRpbHMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjQ2MjIyNjNiNjJjNWM3NzFjMDM1MDJhZmEzMTU3NzY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM3ZGI3MTc4MTBhYjY5NjVmNjZjOGNmMDM5OGE5OGM5ZDhkZjk4MmRhMzliNGNkN2YxNjI5MTFlYjg5NTk2ZmEiCisKK1MgPSAiJHtXT1JLRElSfS9kb2N1dGlscy0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdF8xLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzhkN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tZ2l0XzEuMC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGxpYnJhcnkgdXNlZCB0byBpbnRlcmFjdCB3aXRoIEdpdCByZXBvc2l0b3JpZXMiCitERVNDUklQVElPTiA9ICJHaXRQeXRob24gcHJvdmlkZXMgb2JqZWN0IG1vZGVsIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byBcCithIGdpdCByZXBvc2l0b3J5LiBBY2Nlc3MgcmVwb3NpdG9yeSBpbmZvcm1hdGlvbiBjb252ZW5pZW50bHksIGFsdGVyIHRoZSBcCitpbmRleCBkaXJlY3RseSwgaGFuZGxlIHJlbW90ZXMsIG9yIGdvIGRvd24gdG8gbG93LWxldmVsIG9iamVjdCBkYXRhYmFzZSBcCithY2Nlc3Mgd2l0aCBiaWctZmlsZXMgc3VwcG9ydC4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9HaXRQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OGI4ZDI2YzM3YzFkNWEwNGY5YjAxODZlZGJlYmMxODMiCitERVBFTkRTID0gInB5dGhvbi1naXRkYiIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9HL0dpdFB5dGhvbi9HaXRQeXRob24tJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDY1OTY0NGI0MmM0MWU1ZTUxNzBjMGNkODNlZDY0MjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWM4OGMxN2JiY2FlMmE0NDVmZjY0MDI0ZWYxMzUyNjIyNGY3MGUzNWUzOGMzMzQxNmJlNWNlYjU2Y2E3Zjc2MCIKKworUyA9ICIke1dPUktESVJ9L0dpdFB5dGhvbi0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24tZ2l0ZGIgcHl0aG9uLWxhbmcgcHl0aG9uLWlvIHB5dGhvbi1zaGVsbCBweXRob24tbWF0aCBweXRob24tcmUgcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXN0cmluZ29sZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWdpdGRiXzAuNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDgzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1naXRkYl8wLjYuNC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIkEgcHVyZS1QeXRob24gZ2l0IG9iamVjdCBkYXRhYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXRodWIuY29tL2dpdHB5dGhvbi1kZXZlbG9wZXJzL2dpdGRiIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTU5ZTVlY2IxMzMzOWE5MzZlZWRmODMyODJlYWY0NTI4IgorREVQRU5EUyA9ICJweXRob24tYXN5bmMgcHl0aG9uLXNtbWFwIgorCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9nL2dpdGRiL2dpdGRiLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0ZTQzNjZiOGJkZmQzMDZiMDc1YzNhNTJjOTZhZTFhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEzZWJiYzI3YmUwMzVhMmU4NzRlZDkwNGRmNTE2ZTM1ZjRhMjlhNzc4YTc2NDM4NWRlMDlkZTllMGYxMzk2NTgiCisKK1MgPSAiJHtXT1JLRElSfS9naXRkYi0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1zbW1hcCBweXRob24tYXN5bmMgcHl0aG9uLW1tYXAgcHl0aG9uLWxhbmcgcHl0aG9uLXpsaWIgcHl0aG9uLWlvIHB5dGhvbi1zaGVsbCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvMDAwMS1weXRob24taW1hZ2luZy1zZXR1cC5weS1mb3JjZS1wYXRocy1mb3ItemxpYi1mcmVldHlwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NzUzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nLzAwMDEtcHl0aG9uLWltYWdpbmctc2V0dXAucHktZm9yY2UtcGF0aHMtZm9yLXpsaWItZnJlZXR5cC5wYXRjaApAQCAtMCwwICsxLDU1IEBACitGcm9tIDA3ZDRmMDk1YTllMjJhZTY3NmE4ZDY4MDczMTAxMTMxZTY1MDEyZGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAxNSBOb3YgMjAxMSAxMzoxNjo1NCArMDEwMAorU3ViamVjdDogW1BBVENIXSBweXRob24gaW1hZ2luZyBzZXR1cC5weTogZm9yY2UgcGF0aHMgZm9yIHpsaWIsIGZyZWV0eXBlIGFuZCBqcGVnIGFuZCBkb24ndCBhZGQgaG9zdCBwYXRocworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorLS0tCisgc2V0dXAucHkgfCAgIDE0ICsrKy0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggNWQ0ZDUzYS4uYjFhMjJlYyAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTM0LDEwICszNCwxMCBAQCBkZWYgbGliaW5jbHVkZShyb290KToKKyAjIFRJRkZfUk9PVCA9IGxpYmluY2x1ZGUoIi9vcHQvdGlmZiIpCisgCisgVENMX1JPT1QgPSBOb25lCistSlBFR19ST09UID0gTm9uZQorLVpMSUJfUk9PVCA9IE5vbmUKKytKUEVHX1JPT1QgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddCisrWkxJQl9ST09UID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXQorIFRJRkZfUk9PVCA9IE5vbmUKKy1GUkVFVFlQRV9ST09UID0gTm9uZQorK0ZSRUVUWVBFX1JPT1QgPSAgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSwgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXQorIExDTVNfUk9PVCA9IE5vbmUKKyAKKyAjIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5CitAQCAtMTQ3LDcgKzE0Nyw2IEBAIGNsYXNzIHBpbF9idWlsZF9leHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi9vcHQvbG9jYWwvbGliIikKKyAgICAgICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi9vcHQvbG9jYWwvaW5jbHVkZSIpCisgCistICAgICAgICBhZGRfZGlyZWN0b3J5KGxpYnJhcnlfZGlycywgIi91c3IvbG9jYWwvbGliIikKKyAgICAgICAgICMgRklYTUU6IGNoZWNrIC9vcHQvc3R1ZmYgZGlyZWN0b3JpZXMgaGVyZT8KKyAKKyAgICAgICAgIHByZWZpeCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigicHJlZml4IikKK0BAIC0yMDcsMTMgKzIwNiw2IEBAIGNsYXNzIHBpbF9idWlsZF9leHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4odGNsX2RpciwgInRrLmgiKSk6CisgICAgICAgICAgICAgICAgIGFkZF9kaXJlY3RvcnkoaW5jbHVkZV9kaXJzLCB0Y2xfZGlyKQorIAorLSAgICAgICAgIyBzdGFuZGFyZCBsb2NhdGlvbnMKKy0gICAgICAgIGFkZF9kaXJlY3RvcnkobGlicmFyeV9kaXJzLCAiL3Vzci9sb2NhbC9saWIiKQorLSAgICAgICAgYWRkX2RpcmVjdG9yeShpbmNsdWRlX2RpcnMsICIvdXNyL2xvY2FsL2luY2x1ZGUiKQorLQorLSAgICAgICAgYWRkX2RpcmVjdG9yeShsaWJyYXJ5X2RpcnMsICIvdXNyL2xpYiIpCistICAgICAgICBhZGRfZGlyZWN0b3J5KGluY2x1ZGVfZGlycywgIi91c3IvaW5jbHVkZSIpCistCisgICAgICAgICAjCisgICAgICAgICAjIGluc2VydCBuZXcgZGlycyAqYmVmb3JlKiBkZWZhdWx0IGxpYnMsIHRvIGF2b2lkIGNvbmZsaWN0cworICAgICAgICAgIyBiZXR3ZWVuIFB5dGhvbiBQWUQgc3R1YiBsaWJzIGFuZCByZWFsIGxpYnJhcmllcworLS0gCisxLjcuMi41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZy9hbGxvdy50by5kaXNhYmxlLnNvbWUuZmVhdHVyZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk2MGVkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0F0IGxlYXN0IGxjbXMgd2Fzbid0IGRldGVybWluaXN0aWNseSBkZXRlY3RlZCBmcm9tIHN5c3Jvb3QuCisKK1RoaXMgd2lsbCBhbGxvdyB0byBleHBvcnQgTENNU19FTkFCTEVEPUZhbHNlIHdoZW4gbGNtcyBpc24ndCBpbiBQQUNLQUdFQ09ORklHLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworZGlmZiAtdU5yIEltYWdpbmctMS4xLjcub3JpZy9zZXR1cC5weSBJbWFnaW5nLTEuMS43L3NldHVwLnB5CistLS0gSW1hZ2luZy0xLjEuNy5vcmlnL3NldHVwLnB5CTIwMTMtMDctMjIgMTA6MTc6MDIuMDgxNDU3MDc1ICswMjAwCisrKysgSW1hZ2luZy0xLjEuNy9zZXR1cC5weQkyMDEzLTA3LTIyIDEzOjEwOjA5LjAyOTcwNzQ5MiArMDIwMAorQEAgLTM5LDYgKzM5LDEyIEBACisgVElGRl9ST09UID0gTm9uZQorIEZSRUVUWVBFX1JPT1QgPSAgb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXSwgb3MuZW52aXJvblsnU1RBR0lOR19JTkNESVInXQorIExDTVNfUk9PVCA9IE5vbmUKKytUQ0xfRU5BQkxFRCA9IG9zLmdldGVudignVENMX0VOQUJMRUQnLCAiVHJ1ZSIpCisrSlBFR19FTkFCTEVEID0gb3MuZ2V0ZW52KCdKUEVHX0VOQUJMRUQnLCAiVHJ1ZSIpCisrWkxJQl9FTkFCTEVEID0gb3MuZ2V0ZW52KCdaTElCX0VOQUJMRUQnLCAiVHJ1ZSIpCisrVElGRl9FTkFCTEVEID0gb3MuZ2V0ZW52KCdUSUZGX0VOQUJMRUQnLCAiVHJ1ZSIpCisrRlJFRVRZUEVfRU5BQkxFRCA9IG9zLmdldGVudignRlJFRVRZUEVfRU5BQkxFRCcsICJUcnVlIikKKytMQ01TX0VOQUJMRUQgPSBvcy5nZXRlbnYoJ0xDTVNfRU5BQkxFRCcsICJUcnVlIikKKyAKKyAjIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5CisgCitAQCAtMjIwLDIyICsyMjYsMjIgQEAKKyAgICAgICAgICAgICB6bGliID0ganBlZyA9IHRpZmYgPSBmcmVldHlwZSA9IHRjbCA9IHRrID0gbGNtcyA9IE5vbmUKKyAgICAgICAgIGZlYXR1cmUgPSBmZWF0dXJlKCkKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ6bGliLmgiKToKKysgICAgICAgIGlmIFpMSUJfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJ6bGliLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAieiIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLnpsaWIgPSAieiIKKyAgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAiemxpYiIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLnpsaWIgPSAiemxpYiIgIyBhbHRlcm5hdGl2ZSBuYW1lCisgCistICAgICAgICBpZiBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAianBlZ2xpYi5oIik6CisrICAgICAgICBpZiBKUEVHX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAianBlZ2xpYi5oIik6CisgICAgICAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImpwZWciKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS5qcGVnID0gImpwZWciCisgICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBhbmQgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgImxpYmpwZWciKToKKyAgICAgICAgICAgICAgICAgZmVhdHVyZS5qcGVnID0gImxpYmpwZWciICMgYWx0ZXJuYXRpdmUgbmFtZQorIAorLSAgICAgICAgaWYgZmluZF9saWJyYXJ5X2ZpbGUoc2VsZiwgInRpZmYiKToKKysgICAgICAgIGlmIFRJRkZfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ0aWZmIik6CisgICAgICAgICAgICAgZmVhdHVyZS50aWZmID0gInRpZmYiCisgCistICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAiZnJlZXR5cGUiKToKKysgICAgICAgIGlmIEZSRUVUWVBFX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAiZnJlZXR5cGUiKToKKyAgICAgICAgICAgICAjIGxvb2sgZm9yIGZyZWV0eXBlMiBpbmNsdWRlIGZpbGVzCisgICAgICAgICAgICAgZnJlZXR5cGVfdmVyc2lvbiA9IDAKKyAgICAgICAgICAgICBmb3IgZGlyIGluIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzOgorQEAgLTI1NiwxMSArMjYyLDExIEBACisgICAgICAgICAgICAgICAgIGlmIGRpcjoKKyAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJlY3Rvcnkoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsIGRpciwgMCkKKyAKKy0gICAgICAgIGlmIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJsY21zLmgiKToKKysgICAgICAgIGlmIExDTVNfRU5BQkxFRCA9PSAnVHJ1ZScgYW5kIGZpbmRfaW5jbHVkZV9maWxlKHNlbGYsICJsY21zLmgiKToKKyAgICAgICAgICAgICBpZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCAibGNtcyIpOgorICAgICAgICAgICAgICAgICBmZWF0dXJlLmxjbXMgPSAibGNtcyIKKyAKKy0gICAgICAgIGlmIF90a2ludGVyIGFuZCBmaW5kX2luY2x1ZGVfZmlsZShzZWxmLCAidGsuaCIpOgorKyAgICAgICAgaWYgVENMX0VOQUJMRUQgPT0gJ1RydWUnIGFuZCBfdGtpbnRlciBhbmQgZmluZF9pbmNsdWRlX2ZpbGUoc2VsZiwgInRrLmgiKToKKyAgICAgICAgICAgICAjIHRoZSBsaWJyYXJ5IG5hbWVzIG1heSB2YXJ5IHNvbWV3aGF0IChlLmcuIHRjbDg0IG9yIHRjbDguNCkKKyAgICAgICAgICAgICB2ZXJzaW9uID0gVENMX1ZFUlNJT05bMF0gKyBUQ0xfVkVSU0lPTlsyXQorICAgICAgICAgICAgIGlmIGZpbmRfbGlicmFyeV9maWxlKHNlbGYsICJ0Y2wiICsgdmVyc2lvbik6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLWltYWdpbmcvZml4LWZyZWV0eXBlLWluY2x1ZGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2M2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGM2MDQwZjYxOGQ4ZjI3MDZhN2I0NmQxY2RmMzdkMWE1ODdmOTcwMWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZXcgU3Ryb21ub3YgPHN0cm9tbm92QGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMjggTm92IDIwMTMgMTY6NTg6NDMgKzA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGNvbXBpbGluZyB3aXRoIEZyZWVUeXBlIDIuNS4xCisKKy0tLQorIF9pbWFnaW5nZnQuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL19pbWFnaW5nZnQuYyBiL19pbWFnaW5nZnQuYworaW5kZXggNDdkNTBiZC4uZjE5NTU1YiAxMDA2NDQKKy0tLSBhL19pbWFnaW5nZnQuYworKysrIGIvX2ltYWdpbmdmdC5jCitAQCAtNTksNyArNTksMTEgQEAgc3RydWN0IHsKKyAgICAgY29uc3QgY2hhciogbWVzc2FnZTsKKyB9IGZ0X2Vycm9yc1tdID0KKyAKKysjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEVfMl8xKQorKyNpbmNsdWRlIEZUX0VSUk9SU19ICisrI2Vsc2UKKyAjaW5jbHVkZSA8ZnJlZXR5cGUvZnRlcnJvcnMuaD4KKysjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworIC8qIGZvbnQgb2JqZWN0cyAqLworLS0gCisxLjguNS4xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1pbWFnaW5nXzEuMS43LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZ18xLjEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjc4MzI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24taW1hZ2luZ18xLjEuNy5iYgpAQCAtMCwwICsxLDQ1IEBACitTVU1NQVJZID0gIlB5dGhvbiBJbWFnaW5nIExpYnJhcnkgKFBJTCkiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT05MjtlbmRsaW5lPTEyMDttZDU9YzQzNzFhZjQ1NzlmMWU0ODljZjg4MWMxNDQzZGQ0ZWMiCitERVBFTkRTID0gImZyZWV0eXBlIGpwZWcgdGlmZiIKK1NSQ05BTUUgPSAiSW1hZ2luZyIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9lZmZib3Qub3JnL2Rvd25sb2Fkcy9JbWFnaW5nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXB5dGhvbi1pbWFnaW5nLXNldHVwLnB5LWZvcmNlLXBhdGhzLWZvci16bGliLWZyZWV0eXAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWxsb3cudG8uZGlzYWJsZS5zb21lLmZlYXR1cmVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1mcmVldHlwZS1pbmNsdWRlcy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImZjMTRhNTRlMWNlMDJhMDIyNWJlODg1NGJmYmE0NzhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5NWJjN2MyNDk4YzhlMWY5Yjk5OTM4ZjFhNDBkYzg2YjNmMTQ5NzQxZjEwNWNmN2M3YmQyZTA3MjU0MDUyMTEiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworIyBUaGVyZSBpc24ndCBlbmFibGUvZGlzYWJsZSBvcHRpb24sIGFuZCBsY21zIGlzIGluIG1ldGEtb2UsIGF0IGxlYXN0IG1ha2UgaXQgZXhwbGljaXQgd2hlbiBlbmFibGVkCisjIHNldHVwLnB5IGFscmVhZHkgaGFzIEZJWE1FOiBhZGQgbWVjaGFuaXNtIHRvIGV4cGxpY2l0bHkgKmRpc2FibGUqIHRoZSB1c2Ugb2YgYSBsaWJyYXJ5CitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsY21zXSA9ICIsLGxjbXMiCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZXhwb3J0IFNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9CisgICAgZXhwb3J0IFNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9CisgICAgZXhwb3J0IExDTVNfRU5BQkxFRD0ke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdsY21zJywgJ1RydWUnLCAnRmFsc2UnLCBkKX0KKyAgICBkaXN0dXRpbHNfZG9fY29tcGlsZQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGV4cG9ydCBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfQorICAgIGV4cG9ydCBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfQorICAgIGV4cG9ydCBMQ01TX0VOQUJMRUQ9JHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnbGNtcycsICdUcnVlJywgJ0ZhbHNlJywgZCl9CisgICAgZGlzdHV0aWxzX2RvX2luc3RhbGwKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vaHRtbC8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9SRUFETUUgJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS8KKyAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9Eb2NzLyogJHtEfSR7ZGF0YWRpcn0vZG9jLyR7QlBOfS9odG1sLworCisgICAgIyBnZXQgcmlkIG9mICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisgICAgc2VkIC1pIC1lICdzOi91c3IvbG9jYWwvYmluLzoke2JpbmRpcn0vZW52IDpnJyAke0R9JHtiaW5kaXJ9LyoKK30KKworUkRFUEVORFNfJHtQTn0gKz0gInB5dGhvbi1sYW5nIHB5dGhvbi1zdHJpbmdvbGQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1tYWtvXzEuMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQyYjBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbWFrb18xLjAuMS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlRlbXBsYXRpbmcgbGlicmFyeSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRlYjNmZjhlNGMxN2FhZjdiODA4ODliNmIyYmY0YzgzIgorCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9NL01ha28vTWFrby0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZjBhYWZkMTc3YjAzOWVmNjdiOTBlYTM1MDQ5N2E1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NWYwODY5ZmViZWE1OWRhYjdlZmQyNTZmYjQ1MWMzNzdjYmI3OTQ3YmVmMzg2ZmYwYmI0NDYyN2MzMWE4ZDFjIgorCitTID0gIiR7V09SS0RJUn0vTWFrby0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi10aHJlYWRpbmcgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW5ldGNsaWVudCBcCisgICAgICAgICAgICAgICAgICBweXRob24taHRtbCBcCisiCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMC1kaXN0dXRpbHMtZml4LXN3aWctcGFyYW1ldGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTI0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTAtZGlzdHV0aWxzLWZpeC1zd2lnLXBhcmFtZXRlci5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBTb21lIHZlcnNpb25zIG9mIFNXSUcgZG8gbm90IHVzZSB0aGUgZXh0ZW5zaW9uIHBhcmFtZXRlci4KKyMgTWFrZSBpdCBvcHRpb25hbC4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi42LjEub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKK0BAIC01NjYsNyArNTY2LDcgQEAgY2xhc3MgYnVpbGRfZXh0IChDb21tYW5kKToKKyAgICAgICAgICAgICB0YXJnZXRfbGFuZz1sYW5ndWFnZSkKKyAKKyAKKy0gICAgZGVmIHN3aWdfc291cmNlcyAoc2VsZiwgc291cmNlcywgZXh0ZW5zaW9uKToKKysgICAgZGVmIHN3aWdfc291cmNlcyAoc2VsZiwgc291cmNlcywgZXh0ZW5zaW9uPU5vbmUpOgorIAorICAgICAgICAgIiIiV2FsayB0aGUgbGlzdCBvZiBzb3VyY2UgZmlsZXMgaW4gJ3NvdXJjZXMnLCBsb29raW5nIGZvciBTV0lHCisgICAgICAgICBpbnRlcmZhY2UgKC5pKSBmaWxlcy4gIFJ1biBTV0lHIG9uIGFsbCB0aGF0IGFyZSBmb3VuZCwgYW5kCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTEtZGlzdHV0aWxzLW5ldmVyLW1vZGlmeS1zaGViYW5nLWxpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyNDY5YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMS1kaXN0dXRpbHMtbmV2ZXItbW9kaWZ5LXNoZWJhbmctbGluZS5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIyBEb24ndCBtb2RpZnkgdGhlIHNoZS1iYW5nIGxpbmUgZm9yIGEgY3Jvc3MtYnVpbGQuCisjIE90aGVyd2lzZSBpdCBwb2ludHMgdG8gb3VyIGhvc3RweXRob24gKHdoaWNoIHdlIGRvIG5vdCB3YW50KQorIworIyBTaWduZWQtT2ZmOiBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KKworSW5kZXg6IFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKysgUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CitAQCAtODcsNyArODcsNyBAQCBjbGFzcyBidWlsZF9zY3JpcHRzIChDb21tYW5kKToKKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgCisgICAgICAgICAgICAgICAgIG1hdGNoID0gZmlyc3RfbGluZV9yZS5tYXRjaChmaXJzdF9saW5lKQorLSAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKysgICAgICAgICAgICAgICAgaWYgRmFsc2U6ICNtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9IDEKKyAgICAgICAgICAgICAgICAgICAgIHBvc3RfaW50ZXJwID0gbWF0Y2guZ3JvdXAoMSkgb3IgJycKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4OWFhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgVGhlIHByb3BlciBwcmVmaXggaXMgaW5zaWRlIG91ciBzdGFnaW5nIGFyZWEuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorIyBTaWduZWQtb2ZmLWJ5OiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorCistLS0gUHl0aG9uLTIuNi42L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5Lm9yaWcJMjAxMi0wMS0wMyAxNDowMjowMy4wMjcwMDUyOTYgKzAwMDAKKysrKyBQeXRob24tMi42LjYvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkJMjAxMi0wMS0wMyAxNDowMjozMS41MTc2MDEwODEgKzAwMDAKK0BAIC0xOSw4ICsxOSw4IEBACisgZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yCisgCisgIyBUaGVzZSBhcmUgbmVlZGVkIGluIGEgY291cGxlIG9mIHNwb3RzLCBzbyBqdXN0IGNvbXB1dGUgdGhlbSBvbmNlLgorLVBSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKKy1FWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KQorK1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorICMgUGF0aCB0byB0aGUgYmFzZSBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QuIE9uIFdpbmRvd3MgdGhlIGJpbmFyeSBtYXkKKyAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKK0BAIC03MCw3ICs3MCw3IEBACisgICAgIHN5cy5leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKyAgICAgaWYgcHJlZml4IGlzIE5vbmU6CistICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBFWEVDX1BSRUZJWCBvciBQUkVGSVgKKysgICAgICAgIHByZWZpeCA9IG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10ucnN0cmlwKCdpbmNsdWRlJykKKyAKKyAgICAgaWYgb3MubmFtZSA9PSAicG9zaXgiOgorICAgICAgICAgaWYgcHl0aG9uX2J1aWxkOgorQEAgLTExNSwxMiArMTE1LDE2IEBACisgICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMucHJlZml4IG9yCisgICAgIHN5cy5leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKysgICAgbGliX2Jhc2VuYW1lID0gb3MuZW52aXJvblsnU1RBR0lOR19MSUJESVInXS5zcGxpdCgnLycpWy0xXQorICAgICBpZiBwcmVmaXggaXMgTm9uZToKKy0gICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEVYRUNfUFJFRklYIG9yIFBSRUZJWAorKyAgICAgICAgaWYgcGxhdF9zcGVjaWZpYzoKKysgICAgICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnJzdHJpcChsaWJfYmFzZW5hbWUpCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIHByZWZpeCA9IFBSRUZJWAorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9iYXNlbmFtZSwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCisgICAgICAgICBlbHNlOgorQEAgLTIxNiw3ICsyMjAsNyBAQAorICAgICBlbHNlOgorICAgICAgICAgIyBUaGUgbmFtZSBvZiB0aGUgY29uZmlnLmggZmlsZSBjaGFuZ2VkIGluIDIuMgorICAgICAgICAgY29uZmlnX2ggPSAncHljb25maWcuaCcKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCBjb25maWdfaCkKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCBjb25maWdfaCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKyAKKyAKKyBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CitAQCAtMjI1LDcgKzIyOSw3IEBACisgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYWtlZmlsZSIpCisgICAgIGxpYl9kaXIgPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTEsIHN0YW5kYXJkX2xpYj0xKQorLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsICJjb25maWciLCAiTWFrZWZpbGUiKQorKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGxpYl9kaXIsICJjb25maWciLCAiTWFrZWZpbGUiKS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorIAorIAorIGRlZiBwYXJzZV9jb25maWdfaChmcCwgZz1Ob25lKToKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzllN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdm9pZHMgcGFyYWxsZWwgbWFrZSByYWNlcyBsaW5raW5nIGVycm9ycyB3aGVuIG1ha2luZyBQYXJzZXIvUEdFTgorCistIEltcGxlbWVudHMgUmljaGFyZCBQdXJkaWUncyBpZGVhCisKK1NpZ25lZC1PZmYtQnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTYxMCwxMiArNjEwLDEwIEBAIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2cKKyAKKyBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wd2Rtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCisgCistJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisrJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpICQoUEdFTikKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKy0JCSQoTUFLRSkgJChQR0VOKQorIAkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCistCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCisgCisgJChQR0VOKToJJChQR0VOT0JKUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9kZWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWMxMGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL2RlYnVnLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTIuNi4xL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjYuMS5vcmlnL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDA5LTExLTEzIDE2OjA0OjU0LjAwMDAwMDAwMCArMDAwMAorKysrIFB5dGhvbi0yLjYuMS9MaWIvZGlzdHV0aWxzL3VuaXhjY29tcGlsZXIucHkJMjAwOS0xMS0xMyAxNjowNjoyNy4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zMDAsNiArMzAwLDggQEAKKyAgICAgICAgIGR5bGliX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nZHlsaWInKQorICAgICAgICAgc3RhdGljX2YgPSBzZWxmLmxpYnJhcnlfZmlsZW5hbWUobGliLCBsaWJfdHlwZT0nc3RhdGljJykKKyAKKysgICAgICAgIHByaW50ICJMb29raW5nIGluICVzIGZvciAlcyIgJSAobGliLCBkaXJzKQorKworICAgICAgICAgZm9yIGRpciBpbiBkaXJzOgorICAgICAgICAgICAgIHNoYXJlZCA9IG9zLnBhdGguam9pbihkaXIsIHNoYXJlZF9mKQorICAgICAgICAgICAgIGR5bGliID0gb3MucGF0aC5qb2luKGRpciwgZHlsaWJfZikKK0BAIC0zMDksMTAgKzMxMSwxMyBAQAorICAgICAgICAgICAgICMgYXNzdW1pbmcgdGhhdCAqYWxsKiBVbml4IEMgY29tcGlsZXJzIGRvLiAgQW5kIG9mIGNvdXJzZSBJJ20KKyAgICAgICAgICAgICAjIGlnbm9yaW5nIGV2ZW4gR0NDJ3MgIi1zdGF0aWMiIG9wdGlvbi4gIFNvIHN1ZSBtZS4KKyAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkeWxpYik6CisrICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoZHlsaWIpCisgICAgICAgICAgICAgICAgIHJldHVybiBkeWxpYgorICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc2hhcmVkKToKKysgICAgICAgICAgICAgICAgcHJpbnQgIkZvdW5kICVzIiAlIChzaGFyZWQpCisgICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZWQKKyAgICAgICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHN0YXRpYyk6CisrICAgICAgICAgICAgICAgIHByaW50ICJGb3VuZCAlcyIgJSAoc3RhdGljKQorICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljCisgCisgICAgICAgICAjIE9vcHMsIGRpZG4ndCBmaW5kIGl0IGluICphbnkqIG9mICdkaXJzJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL211bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTg5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwyMzUgQEAKK1JlYmFzZWQgZm9yIFB5dGhvbiAyLjcuOQorCitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworMjAxMS8wOS8yOQorVGhlIHB5dGhvbiByZWNpcGUgYnVpbGRpbmcgd2FzIGZhaWxpbmcgYmVjYXVzZSBweXRob24tbmF0aXZlIAorY291bGQgbm90IGhhbmRsZSBzeXMubGliIHZhci4gc3lzLmxpYiB2YXIgaXMgZGVmaW5lZCBpbiB0aGUgCittdWx0aWxpYiBwYXRjaCBoZW5jZSBhZGRlZCB0aGlzIG11bHRpbGliLnBhdGNoIGZvciBweXRob24tbmF0aXZlIAorcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9JbmNsdWRlL3B5dGhvbnJ1bi5oCisrKysgUHl0aG9uLTIuNy45L0luY2x1ZGUvcHl0aG9ucnVuLmgKK0BAIC0xMDgsNiArMTA4LDcgQEAgUHlBUElfRlVOQyhjaGFyICopIFB5X0dldFBhdGgodm9pZCk7CisgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRMaWIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEJ1aWxkSW5mbyh2b2lkKTsKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorQEAgLTIyLDYgKzIyLDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKKyBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorIAorIAorK2xpYm5hbWUgPSBzeXMubGliCisrCisgaWYgc3lzLnZlcnNpb24gPCAiMi4yIjoKKyAgICAgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgICAgICAncHVyZWxpYic6ICckYmFzZScsCitAQCAtNDIsNyArNDQsNyBAQCBlbHNlOgorIElOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgJ3VuaXhfcHJlZml4JzogeworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAorLSAgICAgICAgJ3BsYXRsaWInOiAnJHBsYXRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS8nK2xpYm5hbWUrJy9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdoZWFkZXJzJzogJyRiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCisgICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvcHlkb2MucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvcHlkb2MucHkKKysrKyBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5CitAQCAtMzgzLDcgKzM4Myw3IEBAIGNsYXNzIERvYzoKKyAKKyAgICAgICAgIGRvY2xvYyA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05ET0NTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkiKQorLSAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iK3N5cy52ZXJzaW9uWzA6M10pCisgICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKKyAgICAgICAgICAgICAob2JqZWN0Ll9fbmFtZV9fIGluICgnZXJybm8nLCAnZXhjZXB0aW9ucycsICdnYycsICdpbXAnLAorSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zaXRlLnB5CitAQCAtMjg4LDEzICsyODgsMTkgQEAgZGVmIGdldHNpdGVwYWNrYWdlcygpOgorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQocHJlZml4KQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKKyAgICAgICAgICAgICAjIGxvY2F0aW9ucy4KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3RfZGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL3Rlc3QvdGVzdF9kbC5weQorQEAgLTQsMTAgKzQsMTEgQEAKKyBpbXBvcnQgdW5pdHRlc3QKKyBmcm9tIHRlc3QudGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlCisgZGwgPSBpbXBvcnRfbW9kdWxlKCdkbCcsIGRlcHJlY2F0ZWQ9VHJ1ZSkKKytpbXBvcnQgc3lzCisgCisgc2hhcmVkbGlicyA9IFsKKy0gICAgKCcvdXNyL2xpYi9saWJjLnNvJywgJ2dldHBpZCcpLAorLSAgICAoJy9saWIvbGliYy5zby42JywgJ2dldHBpZCcpLAorKyAgICAoJy91c3IvJytzeXMubGliKycvbGliYy5zbycsICdnZXRwaWQnKSwKKysgICAgKCcvJytzeXMubGliKycvbGliYy5zby42JywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvYmluL2N5Z3dpbjEuZGxsJywgJ2dldHBpZCcpLAorICAgICAoJy91c3IvbGliL2xpYmMuZHlsaWInLCAnZ2V0cGlkJyksCisgICAgIF0KK0luZGV4OiBQeXRob24tMi43LjkvTGliL3RyYWNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3RyYWNlLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorQEAgLTc1NCwxMCArNzU0LDEwIEBAIGRlZiBtYWluKGFyZ3Y9Tm9uZSk6CisgICAgICAgICAgICAgICAgICMgc2hvdWxkIEkgYWxzbyBjYWxsIGV4cGFuZHVzZXI/IChhZnRlciBhbGwsIGNvdWxkIHVzZSAkSE9NRSkKKyAKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJHByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSkpCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRleGVjX3ByZWZpeCIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQorICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTg3LDYgKzg3LDcgQEAgUFlfQ0ZMQUdTPQkkKENGTEFHUykgJChDUFBGTEFHUykgJChDRkxBRworIAorICMgTWFjaGluZS1kZXBlbmRlbnQgc3ViZGlyZWN0b3JpZXMKKyBNQUNIREVQPQlATUFDSERFUEAKKytMSUI9CQlATElCQAorIAorICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQorIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKK0BAIC0xMDYsNyArMTA3LDcgQEAgTElCRElSPQkJQGxpYmRpckAKKyBNQU5ESVI9CQlAbWFuZGlyQAorIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAorIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCistU0NSSVBURElSPQkkKHByZWZpeCkvbGliCisrU0NSSVBURElSPQkkKHByZWZpeCkvQExJQkAKKyAKKyAjIERldGFpbGVkIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzCisgQklOTElCREVTVD0JJChMSUJESVIpL3B5dGhvbiQoVkVSU0lPTikKK0BAIC01OTcsNiArNTk4LDcgQEAgTW9kdWxlcy9nZXRwYXRoLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2dldAorIAkJLURFWEVDX1BSRUZJWD0nIiQoZXhlY19wcmVmaXgpIicgXAorIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKKyAJCS1EVlBBVEg9JyIkKFZQQVRIKSInIFwKKysJCS1ETElCPSciJChMSUIpIicgXAorIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCisgCisgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK0BAIC02MzksNyArNjQxLDcgQEAgJChBU1RfQyk6ICQoQVNUX0FTREwpICQoQVNETEdFTl9GSUxFUykKKyBQeXRob24vY29tcGlsZS5vIFB5dGhvbi9zeW10YWJsZS5vIFB5dGhvbi9hc3QubzogJChHUkFNTUFSX0gpICQoQVNUX0gpCisgCisgUHl0aG9uL2dldHBsYXRmb3JtLm86ICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworLQkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCisrCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtRExJQj0nIiQoTElCKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworIAorIFB5dGhvbi9pbXBvcnRkbC5vOiAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKyAJCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKK0luZGV4OiBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0yLjcuOS9Nb2R1bGVzL2dldHBhdGguYworQEAgLTExNiw5ICsxMTYsMTEgQEAKKyAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorICNlbmRpZgorIAorKyNkZWZpbmUgTElCX1BZVEhPTiBMSUIgIi9weXRob24iIFZFUlNJT04KKysKKyAjaWZuZGVmIFBZVEhPTlBBVEgKKy0jZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiOiIgXAorLSAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICIvbGliLWR5bmxvYWQiCisrI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiLyIgTElCX1BZVEhPTiAiOiIgXAorKyAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIExBTkRNQVJLCitAQCAtMTI5LDcgKzEzMSw3IEBAIHN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKKy1zdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSAibGliL3B5dGhvbiIgVkVSU0lPTjsKKytzdGF0aWMgY2hhciBsaWJfcHl0aG9uW10gPSBMSUJfUFlUSE9OOworIAorIHN0YXRpYyB2b2lkCisgcmVkdWNlKGNoYXIgKmRpcikKK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0yLjcuOS9QeXRob24vZ2V0cGxhdGZvcm0uYworQEAgLTEwLDMgKzEwLDEzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCisgeworIAlyZXR1cm4gUExBVEZPUk07CisgfQorKworKyNpZm5kZWYgTElCCisrI2RlZmluZSBMSUIgImxpYiIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRMaWIodm9pZCkKKyt7CisrCXJldHVybiBMSUI7CisrfQorSW5kZXg6IFB5dGhvbi0yLjcuOS9QeXRob24vc3lzbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9QeXRob24vc3lzbW9kdWxlLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCitAQCAtMTQzNyw2ICsxNDM3LDggQEAgX1B5U3lzX0luaXQodm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldENvcHlyaWdodCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInBsYXRmb3JtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFBsYXRmb3JtKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygibGliIiwKKysgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRMaWIoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFByb2dyYW1GdWxsUGF0aCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInByZWZpeCIsCitJbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0BAIC03MzYsNiArNzM2LDExIEBAIFN1bk9TKikKKyAgICAgOzsKKyBlc2FjCisgCisrQUNfU1VCU1QoTElCKQorK0FDX01TR19DSEVDS0lORyhMSUIpCisrTElCPWBiYXNlbmFtZSAke2xpYmRpcn1gCisrQUNfTVNHX1JFU1VMVCgkTElCKQorKworIAorIEFDX1NVQlNUKExJQlJBUlkpCisgQUNfTVNHX0NIRUNLSU5HKExJQlJBUlkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9ub2hvc3RsaWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDUyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvbm9ob3N0bGlicy5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCisyMDE0LzEyLzE1CitSZWJhc2VkIGZvciBweXRob24tMi43LjkKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTIuNy45L3NldHVwLnB5CitAQCAtNDM5LDkgKzQzOSw5IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgZGVmIGRldGVjdF9tb2R1bGVzKHNlbGYpOgorICAgICAgICAgIyBFbnN1cmUgdGhhdCAvdXNyL2xvY2FsIGlzIGFsd2F5cyB1c2VkCistICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywgJy91c3IvbG9jYWwvbGliJykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorKyAgICAgICAgIyBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorKyAgICAgICAgICAgICMgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQorKyAgICAgICAgICAgICMgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLCAnL3Vzci9sb2NhbC9pbmNsdWRlJykKKyAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKyAgICAgICAgICAgICBzZWxmLmFkZF9nY2NfcGF0aHMoKQorICAgICAgICAgc2VsZi5hZGRfbXVsdGlhcmNoX3BhdGhzKCkKK0BAIC00ODAsMTUgKzQ4MCwxNSBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHJldmVyc2VkKG9wdGlvbnMuZGlycyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KGRpcl9saXN0LCBkaXJlY3RvcnkpCisgCistICAgICAgICBpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCistICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKysgICAgICAgICNpZiBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpICE9ICcvdXNyJyBcCisrICAgICAgICAgICAgICAgICNhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisgICAgICAgICAgICAgIyBPU1ggbm90ZTogRG9uJ3QgYWRkIExJQkRJUiBhbmQgSU5DTFVERURJUiB0byBidWlsZGluZyBhIGZyYW1ld29yaworICAgICAgICAgICAgICMgKFBZVEhPTkZSQU1FV09SSyBpcyBzZXQpIHRvIGF2b2lkICMgbGlua2luZyBwcm9ibGVtcyB3aGVuCisgICAgICAgICAgICAgIyBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIHRoYW4KKyAgICAgICAgICAgICAjIHRoZSBvbmUgdGhhdCBpcyBjdXJyZW50bHkgaW5zdGFsbGVkIChpc3N1ZSAjNzQ3MykKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisrICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorKyAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKyAKKyAgICAgICAgIHRyeToKK0BAIC03NjEsOCArNzYxLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICBwYXNzICMgSXNzdWUgNzM4NDogQWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMgb3IgdGluZm8uCisgICAgICAgICAgICAgZWxpZiBjdXJzZXNfbGlicmFyeToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCistICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdyZWFkbGluZScsIFsncmVhZGxpbmUuYyddLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3JldmVydF91c2Vfb2Zfc3lzY29uZmlnZGF0YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyYWFmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZS9yZXZlcnRfdXNlX29mX3N5c2NvbmZpZ2RhdGEucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorT24gb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uLCBzeXNjb25maWcgcmVhZCB0aGUgZGF0YSBmcm9tIGJvdGggdGhlIE1ha2VmaWxlIGFuZAordGhlIFB5dGhvbi5oIGZpbGUgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUsIGNyZWF0ZWQgZGljdGlvbmFyaWVzIHdpdGggdGhlaXIgdmFyaWFibGVzCithbmQgdXNlZCB0aG9zZSB3aGVuIHVzaW5nIGdldF9jb25maWdfdmFyKCksIG5vdyBpdCB1c2VzIF9zeXNjb25maWdkYXRhLmJ1aWxkX3RpbWVfdmFyc1tdCit3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBIT1NULCBlcnJvbmVvdXMgaW4gb3VyIGNhc2UsIHRoaXMgcGF0Y2ggcmV2ZXJ0cyB0aGlzCitiZWhhdmlvciBhbmQgdXNlcyBQeXRob24uaCBhbmQgTWFrZWZpbGUgdG8gZ2V0IGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lLXNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtNDAxLDEyICs0MDEsNjYgQEAgX2NvbmZpZ192YXJzID0gTm9uZQorIAorIGRlZiBfaW5pdF9wb3NpeCgpOgorICAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIFBPU0lYIHN5c3RlbXMuIiIiCistICAgICMgX3N5c2NvbmZpZ2RhdGEgaXMgZ2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUsIHNlZSB0aGUgc3lzY29uZmlnIG1vZHVsZQorLSAgICBmcm9tIF9zeXNjb25maWdkYXRhIGltcG9ydCBidWlsZF90aW1lX3ZhcnMKKy0gICAgZ2xvYmFsIF9jb25maWdfdmFycworLSAgICBfY29uZmlnX3ZhcnMgPSB7fQorLSAgICBfY29uZmlnX3ZhcnMudXBkYXRlKGJ1aWxkX3RpbWVfdmFycykKKysgICAgZyA9IHt9CisrICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIE1ha2VmaWxlOgorKyAgICB0cnk6CisrICAgICAgICBmaWxlbmFtZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCisrICAgICAgICBwYXJzZV9tYWtlZmlsZShmaWxlbmFtZSwgZykKKysgICAgZXhjZXB0IElPRXJyb3IsIG1zZzoKKysgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCisrICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CisrICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgorKworKyAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcihteV9tc2cpCisrCisrICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIHB5Y29uZmlnLmg6CisrICAgIHRyeToKKysgICAgICAgIGZpbGVuYW1lID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKKysgICAgICAgIHBhcnNlX2NvbmZpZ19oKGZpbGUoZmlsZW5hbWUpLCBnKQorKyAgICBleGNlcHQgSU9FcnJvciwgbXNnOgorKyAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKKysgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKKysgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCisrCisrICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKG15X21zZykKKysKKysgICAgIyBPbiBBSVgsIHRoZXJlIGFyZSB3cm9uZyBwYXRocyB0byB0aGUgbGlua2VyIHNjcmlwdHMgaW4gdGhlIE1ha2VmaWxlCisrICAgICMgLS0gdGhlc2UgcGF0aHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBQeXRob24gc291cmNlLCBidXQgd2hlbiBpbnN0YWxsZWQKKysgICAgIyB0aGUgc2NyaXB0cyBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnkuCisrICAgIGlmIHB5dGhvbl9idWlsZDoKKysgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSBnWydCTERTSEFSRUQnXQorIAorKyAgICBlbGlmIGdldF9weXRob25fdmVyc2lvbigpIDwgJzIuMSc6CisrICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIGJyYW5jaGVzIGFyZSBmb3IgMS41LjIgY29tcGF0aWJpbGl0eS4KKysgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnYWl4NCc6ICAgICAgICAgICMgd2hhdCBhYm91dCBBSVggMy54ID8KKysgICAgICAgICAgICAjIExpbmtlciBzY3JpcHQgaXMgaW4gdGhlIGNvbmZpZyBkaXJlY3RvcnksIG5vdCBpbiBNb2R1bGVzIGFzIHRoZQorKyAgICAgICAgICAgICMgTWFrZWZpbGUgc2F5cy4KKysgICAgICAgICAgICBweXRob25fbGliID0gZ2V0X3B5dGhvbl9saWIoc3RhbmRhcmRfbGliPTEpCisrICAgICAgICAgICAgbGRfc29fYWl4ID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAnbGRfc29fYWl4JykKKysgICAgICAgICAgICBweXRob25fZXhwID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAncHl0aG9uLmV4cCcpCisrCisrICAgICAgICAgICAgZ1snTERTSEFSRUQnXSA9ICIlcyAlcyAtYkk6JXMiICUgKGxkX3NvX2FpeCwgZ1snQ0MnXSwgcHl0aG9uX2V4cCkKKysKKysgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdiZW9zJzoKKysgICAgICAgICAgICAjIExpbmtlciBzY3JpcHQgaXMgaW4gdGhlIGNvbmZpZyBkaXJlY3RvcnkuICBJbiB0aGUgTWFrZWZpbGUgaXQgaXMKKysgICAgICAgICAgICAjIHJlbGF0aXZlIHRvIHRoZSBzcmNkaXIsIHdoaWNoIGFmdGVyIGluc3RhbGxhdGlvbiBubyBsb25nZXIgbWFrZXMKKysgICAgICAgICAgICAjIHNlbnNlLgorKyAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKKysgICAgICAgICAgICBsaW5rZXJzY3JpcHRfcGF0aCA9IHN0cmluZy5zcGxpdChnWydMRFNIQVJFRCddKVswXQorKyAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShsaW5rZXJzY3JpcHRfcGF0aCkKKysgICAgICAgICAgICBsaW5rZXJzY3JpcHQgPSBvcy5wYXRoLmpvaW4ocHl0aG9uX2xpYiwgJ2NvbmZpZycsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcnNjcmlwdF9uYW1lKQorKworKyAgICAgICAgICAgICMgWFhYIHRoaXMgaXNuJ3QgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHRoaXM6IGFkZGluZyB0aGUgUHl0aG9uCisrICAgICAgICAgICAgIyBsaWJyYXJ5IHRvIHRoZSBsaW5rLCBpZiBuZWVkZWQsIHNob3VsZCBiZSBpbiB0aGUgImJ1aWxkX2V4dCIKKysgICAgICAgICAgICAjIGNvbW1hbmQuICAoSXQncyBhbHNvIG5lZWRlZCBmb3Igbm9uLU1TIGNvbXBpbGVycyBvbiBXaW5kb3dzLCBhbmQKKysgICAgICAgICAgICAjIGl0J3MgdGFrZW4gY2FyZSBvZiBmb3IgdGhlbSBieSB0aGUgJ2J1aWxkX2V4dC5nZXRfbGlicmFyaWVzKCknCisrICAgICAgICAgICAgIyBtZXRob2QuKQorKyAgICAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSAoIiVzIC1MJXMvbGliIC1scHl0aG9uJXMiICUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5rZXJzY3JpcHQsIFBSRUZJWCwgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpKQorKworKyAgICBnbG9iYWwgX2NvbmZpZ192YXJzCisrICAgIF9jb25maWdfdmFycyA9IGcKKyAKKyBkZWYgX2luaXRfbnQoKToKKyAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBOVCIiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3VuaXhjY29tcGlsZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmUvdW5peGNjb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTAyODI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbmF0aXZlL3VuaXhjY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBDQyB2YXJpYWJsZSxzb21ldGltZXMgbGlrZToieDg2XzY0LXBva3ktbGludXgtZ2NjICAgLW02NCAtLXN5c3Jvb3Q9LyR7VE1QRElSfS9zeXNyb290cy9xZW11eDg2LTY0IiwgY29udGFpbnMgb3B0aW9uIGluZm9ybWF0aW9uLiAKK1RoaXMgd2lsbCBsZWFkIHRvIHdyb25nIGNvbXBpbGVyIG5hbWUgInFlbXV4ODYtNjQiIHJhdGhlciB0aGFuICJ4ODZfNjQtcG9reS1saW51eC1nY2MiIHdoZW4gcHl0aG9uIGZpbmRpbmcgdGhlIGNvbXBpbGVyIG5hbWUuCisKK1NpZ25lZC1vZmYtYnk6IE1laSBMZWkgPGxlaS5tZWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBQeXRob24tMi43LjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTEtMTEtMjQgMTM6NTE6MTAuNTM5OTk4NzIyIC0wODAwCisrKysgUHl0aG9uLTIuNy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDExLTExLTI0IDE1OjU0OjM2Ljg3MjEzNzc2NiAtMDgwMAorQEAgLTI4Miw3ICsyODIsNyBAQAorICAgICAgICAgIyB0aGlzIHRpbWUsIHRoZXJlJ3Mgbm8gd2F5IHRvIGRldGVybWluZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KKyAgICAgICAgICMgdGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBzdG9yZWQgaW4gdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24sIHNvCisgICAgICAgICAjIHdlIHVzZSB0aGlzIGhhY2suCistICAgICAgICBjb21waWxlciA9IG9zLnBhdGguYmFzZW5hbWUoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpKQorKyAgICAgICAgY29tcGlsZXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNDIikKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBNYWNPU1gncyBsaW5rZXIgZG9lc24ndCB1bmRlcnN0YW5kIHRoZSAtUiBmbGFnIGF0IGFsbAorICAgICAgICAgICAgIHJldHVybiAiLUwiICsgZGlyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1uYXRpdmVfMi43LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmNWMyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW5hdGl2ZV8yLjcuOS5iYgpAQCAtMCwwICsxLDYzIEBACityZXF1aXJlIHB5dGhvbi5pbmMKKworRVhUUkFOQVRJVkVQQVRIICs9ICJiemlwMi1uYXRpdmUiCitERVBFTkRTID0gIm9wZW5zc2wtbmF0aXZlIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSB6bGliLW5hdGl2ZSByZWFkbGluZS1uYXRpdmUgc3FsaXRlMy1uYXRpdmUiCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzEwLWRpc3R1dGlscy1maXgtc3dpZy1wYXJhbWV0ZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzExLWRpc3R1dGlscy1uZXZlci1tb2RpZnktc2hlYmFuZy1saW5lLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2RlYnVnLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ub2hvc3RsaWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9idWlsZGRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcmV2ZXJ0X3VzZV9vZl9zeXNjb25maWdkYXRhLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggXAorICAgICAgICAgICAiCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS8ke1BOfToiCisKK2luaGVyaXQgbmF0aXZlCisKK1JQUk9WSURFUyArPSAicHl0aG9uLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uLWNvbXByZXNzaW9uLW5hdGl2ZSBweXRob24tdGV4dHV0aWxzLW5hdGl2ZSBweXRob24tY29kZWNzLW5hdGl2ZSBweXRob24tY29yZS1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSIKKworRVhUUkFfT0VNQUtFID0gJ1wKKyAgQlVJTERfU1lTPSIiIFwKKyAgSE9TVF9TWVM9IiIgXAorICBMSUJDPSIiIFwKKyAgU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUl9OQVRJVkV9IFwKKycKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LyR7UE59CisJaW5zdGFsbCAtbSAwNzU1IFBhcnNlci9wZ2VuICR7RH0ke2JpbmRpcn0vJHtQTn0KKworCSMgTWFrZSBzdXJlIHdlIHVzZSAvdXNyL2Jpbi9lbnYgcHl0aG9uCisJZm9yIFBZVEhTQ1JJUFQgaW4gYGdyZXAgLXJJbCAke2JpbmRpcn0vJHtQTn0vcHl0aG9uICR7RH0ke2JpbmRpcn0vJHtQTn1gOyBkbworCQlzZWQgLWkgLWUgJzFzfF4jIS4qfCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnICRQWVRIU0NSSVBUCisJZG9uZQorCisJIyBBZGQgYSBzeW1saW5rIHRvIHRoZSBuYXRpdmUgUHl0aG9uIHNvIHRoYXQgc2NyaXB0cyBjYW4ganVzdCBpbnZva2UKKwkjICJuYXRpdmVweXRob24iIGFuZCBnZXQgdGhlIHJpZ2h0IG9uZSB3aXRob3V0IG5lZWRpbmcgYWJzb2x1dGUgcGF0aHMKKwkjICh0aGVzZSBvZnRlbiBlbmQgdXAgdG9vIGxvbmcgZm9yIHRoZSAjISBwYXJzZXIgaW4gdGhlIGtlcm5lbCBhcyB0aGUKKwkjIGJ1ZmZlciBpcyAxMjggYnl0ZXMgbG9uZykuCisJbG4gLXMgcHl0aG9uLW5hdGl2ZS9weXRob24gJHtEfSR7YmluZGlyfS9uYXRpdmVweXRob24KKworCSMgV2UgZG9uJ3Qgd2FudCBtb2R1bGVzIGluIH4vLmxvY2FsIGJlaW5nIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZQorCSMgaW5zdGFsbGVkIGluIHRoZSBuYXRpdmUgc3lzcm9vdCwgc28gZGlzYWJsZSB1c2VyIHNpdGUgc3VwcG9ydC4KKwlzZWQgLWkgLWUgJ3MsXlwoRU5BQkxFX1VTRVJfU0lURSA9IFwpLiosXDFGYWxzZSwnICR7RH0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9zaXRlLnB5Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1ub3NlXzEuMy42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmU4ZmMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbm9zZV8xLjMuNi5iYgpAQCAtMCwwICsxLDE2IEBACitERVNDUklQVElPTiA9ICJub3NlIGV4dGVuZHMgdGhlIHRlc3QgbG9hZGluZyBhbmQgcnVubmluZyBmZWF0dXJlcyBvZiB1bml0dGVzdCwgXAorbWFraW5nIGl0IGVhc2llciB0byB3cml0ZSwgZmluZCBhbmQgcnVuIHRlc3RzLiIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xncGwudHh0O21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9uL25vc2Uvbm9zZS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2E1NDZkODFjYTgzMDkwODBmYzgwY2IzODllN2ExNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjFlMDkwOWE3NDNlZWQzN2IxMjA3ZTM4YThlN2I0YTJmZTBhODIxODVlMzZmMmJlMjUyZWYxYjNmOTAxNzU4IgorCitTID0gIiR7V09SS0RJUn0vbm9zZS0ke1BWfSIKKworaW5oZXJpdCBzZXR1cHRvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hYXJjaDY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYWFyY2g2NC9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwYjg2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FhcmNoNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybS9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm0vbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJmNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWYxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9hcm1lYi9jb25maWcuaApAQCAtMCwwICsxLDIxIEBACisvKiAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvY29uZmlnLmggKi8KKy8qICNkZWZpbmUgU0laRU9GX1NIT1JUIDIgKi8KKy8qICNkZWZpbmUgU0laRU9GX0lOVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9MT05HIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0ZMT0FUIDQgKi8KKy8qICNkZWZpbmUgU0laRU9GX0RPVUJMRSA4ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxMgorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgNAorLyogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HIDggKi8KKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfRkxPQVRfRlVOQ1MKKyNkZWZpbmUgSEFWRV9MT0cxUAorI2RlZmluZSBIQVZFX0VYUE0xCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDCisjZGVmaW5lIEhBVkVfSU5WRVJTRV9IWVBFUkJPTElDX0ZMT0FUCisjZGVmaW5lIEhBVkVfSVNOQU4KKyNkZWZpbmUgSEFWRV9JU0lORgorI2RlZmluZSBIQVZFX1JJTlQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvYXJtZWIvbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjY1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L2FybWViL251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwxNyBAQAorLyogY2F0IC4vc3JjLmxpbnV4LWk2ODYtMi41L251bXB5L2NvcmUvaW5jbHVkZS9udW1weS9udW1weWNvbmZpZy5oICovCisvKgorICogICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBudW1weS9jb3JlL3NldHVwLnB5Yy4gRE8gTk9UIEVESVQgCisgKiAgICovCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDEyIAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQgCisjZGVmaW5lIE5QWV9OT19TTVAgMAorCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOCAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOCAKKy8qICNkZWZpbmUgQ0hBUl9CSVQgOCAqLworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzL19udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGM0Mjg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwcy9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2MTM1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHMvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA0CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9ET1VCTEVfQkUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NC9fbnVtcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTU3YWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L19udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNkZWZpbmUgTlBZX0hBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIFNJWkVPRl9TSE9SVAorI2RlZmluZSBOUFlfU0laRU9GX0lOVCBTSVpFT0ZfSU5UCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyBTSVpFT0ZfTE9ORworI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0ZMT0FUIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfTE9OR0RPVUJMRSAzMgorI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDgKKyNkZWZpbmUgTlBZX05PX1NNUCAwCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNOQU4KKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0lORgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTRklOSVRFCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBOUFlfVVNFX0M5OV9DT01QTEVYIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9ET1VCTEUgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0ZMT0FUIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9MT05HX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9VU0VfQzk5X0ZPUk1BVFMgMQorI2RlZmluZSBOUFlfVklTSUJJTElUWV9ISURERU4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKQorI2RlZmluZSBOUFlfQUJJX1ZFUlNJT04gMHgwMTAwMDAwOQorI2RlZmluZSBOUFlfQVBJX1ZFUlNJT04gMHgwMDAwMDAwNworCisjaWZuZGVmIF9fU1REQ19GT1JNQVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIDEKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMGI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjQvY29uZmlnLmgKQEAgLTAsMCArMSwxMzkgQEAKKyNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIFNJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorI2RlZmluZSBNQVRITElCIG0KKyNkZWZpbmUgSEFWRV9TSU4gMQorI2RlZmluZSBIQVZFX0NPUyAxCisjZGVmaW5lIEhBVkVfVEFOIDEKKyNkZWZpbmUgSEFWRV9TSU5IIDEKKyNkZWZpbmUgSEFWRV9DT1NIIDEKKyNkZWZpbmUgSEFWRV9UQU5IIDEKKyNkZWZpbmUgSEFWRV9GQUJTIDEKKyNkZWZpbmUgSEFWRV9GTE9PUiAxCisjZGVmaW5lIEhBVkVfQ0VJTCAxCisjZGVmaW5lIEhBVkVfU1FSVCAxCisjZGVmaW5lIEhBVkVfTE9HMTAgMQorI2RlZmluZSBIQVZFX0xPRyAxCisjZGVmaW5lIEhBVkVfRVhQIDEKKyNkZWZpbmUgSEFWRV9BU0lOIDEKKyNkZWZpbmUgSEFWRV9BQ09TIDEKKyNkZWZpbmUgSEFWRV9BVEFOIDEKKyNkZWZpbmUgSEFWRV9GTU9EIDEKKyNkZWZpbmUgSEFWRV9NT0RGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUCAxCisjZGVmaW5lIEhBVkVfTERFWFAgMQorI2RlZmluZSBIQVZFX1JJTlQgMQorI2RlZmluZSBIQVZFX1RSVU5DIDEKKyNkZWZpbmUgSEFWRV9FWFAyIDEKKyNkZWZpbmUgSEFWRV9MT0cyIDEKKyNkZWZpbmUgSEFWRV9BVEFOMiAxCisjZGVmaW5lIEhBVkVfUE9XIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVIgMQorI2RlZmluZSBIQVZFX1NJTkYgMQorI2RlZmluZSBIQVZFX0NPU0YgMQorI2RlZmluZSBIQVZFX1RBTkYgMQorI2RlZmluZSBIQVZFX1NJTkhGIDEKKyNkZWZpbmUgSEFWRV9DT1NIRiAxCisjZGVmaW5lIEhBVkVfVEFOSEYgMQorI2RlZmluZSBIQVZFX0ZBQlNGIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkYgMQorI2RlZmluZSBIQVZFX0NFSUxGIDEKKyNkZWZpbmUgSEFWRV9SSU5URiAxCisjZGVmaW5lIEhBVkVfVFJVTkNGIDEKKyNkZWZpbmUgSEFWRV9TUVJURiAxCisjZGVmaW5lIEhBVkVfTE9HMTBGIDEKKyNkZWZpbmUgSEFWRV9MT0dGIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEYgMQorI2RlZmluZSBIQVZFX0VYUEYgMQorI2RlZmluZSBIQVZFX0VYUE0xRiAxCisjZGVmaW5lIEhBVkVfQVNJTkYgMQorI2RlZmluZSBIQVZFX0FDT1NGIDEKKyNkZWZpbmUgSEFWRV9BVEFORiAxCisjZGVmaW5lIEhBVkVfQVNJTkhGIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEYgMQorI2RlZmluZSBIQVZFX0FUQU5IRiAxCisjZGVmaW5lIEhBVkVfSFlQT1RGIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkYgMQorI2RlZmluZSBIQVZFX1BPV0YgMQorI2RlZmluZSBIQVZFX0ZNT0RGIDEKKyNkZWZpbmUgSEFWRV9NT0RGRiAxCisjZGVmaW5lIEhBVkVfRlJFWFBGIDEKKyNkZWZpbmUgSEFWRV9MREVYUEYgMQorI2RlZmluZSBIQVZFX0VYUDJGIDEKKyNkZWZpbmUgSEFWRV9MT0cyRiAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05GIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJGIDEKKyNkZWZpbmUgSEFWRV9TSU5MIDEKKyNkZWZpbmUgSEFWRV9DT1NMIDEKKyNkZWZpbmUgSEFWRV9UQU5MIDEKKyNkZWZpbmUgSEFWRV9TSU5ITCAxCisjZGVmaW5lIEhBVkVfQ09TSEwgMQorI2RlZmluZSBIQVZFX1RBTkhMIDEKKyNkZWZpbmUgSEFWRV9GQUJTTCAxCisjZGVmaW5lIEhBVkVfRkxPT1JMIDEKKyNkZWZpbmUgSEFWRV9DRUlMTCAxCisjZGVmaW5lIEhBVkVfUklOVEwgMQorI2RlZmluZSBIQVZFX1RSVU5DTCAxCisjZGVmaW5lIEhBVkVfU1FSVEwgMQorI2RlZmluZSBIQVZFX0xPRzEwTCAxCisjZGVmaW5lIEhBVkVfTE9HTCAxCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKyNkZWZpbmUgSEFWRV9FWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUwgMQorI2RlZmluZSBIQVZFX0FTSU5MIDEKKyNkZWZpbmUgSEFWRV9BQ09TTCAxCisjZGVmaW5lIEhBVkVfQVRBTkwgMQorI2RlZmluZSBIQVZFX0FTSU5ITCAxCisjZGVmaW5lIEhBVkVfQUNPU0hMIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEwgMQorI2RlZmluZSBIQVZFX0hZUE9UTCAxCisjZGVmaW5lIEhBVkVfQVRBTjJMIDEKKyNkZWZpbmUgSEFWRV9QT1dMIDEKKyNkZWZpbmUgSEFWRV9GTU9ETCAxCisjZGVmaW5lIEhBVkVfTU9ERkwgMQorI2RlZmluZSBIQVZFX0ZSRVhQTCAxCisjZGVmaW5lIEhBVkVfTERFWFBMIDEKKyNkZWZpbmUgSEFWRV9FWFAyTCAxCisjZGVmaW5lIEhBVkVfTE9HMkwgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdOTCAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTCAxCisjZGVmaW5lIEhBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIEhBVkVfQ09NUExFWF9IIDEKKyNkZWZpbmUgSEFWRV9DUkVBTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUcgMQorI2RlZmluZSBIQVZFX0NBQlMgMQorI2RlZmluZSBIQVZFX0NBUkcgMQorI2RlZmluZSBIQVZFX0NFWFAgMQorI2RlZmluZSBIQVZFX0NTUVJUIDEKKyNkZWZpbmUgSEFWRV9DTE9HIDEKKyNkZWZpbmUgSEFWRV9DQ09TIDEKKyNkZWZpbmUgSEFWRV9DU0lOIDEKKyNkZWZpbmUgSEFWRV9DUE9XIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEYgMQorI2RlZmluZSBIQVZFX0NJTUFHRiAxCisjZGVmaW5lIEhBVkVfQ0FCU0YgMQorI2RlZmluZSBIQVZFX0NBUkdGIDEKKyNkZWZpbmUgSEFWRV9DRVhQRiAxCisjZGVmaW5lIEhBVkVfQ1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9DTE9HRiAxCisjZGVmaW5lIEhBVkVfQ0NPU0YgMQorI2RlZmluZSBIQVZFX0NTSU5GIDEKKyNkZWZpbmUgSEFWRV9DUE9XRiAxCisjZGVmaW5lIEhBVkVfQ1JFQUxMIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0wgMQorI2RlZmluZSBIQVZFX0NBQlNMIDEKKyNkZWZpbmUgSEFWRV9DQVJHTCAxCisjZGVmaW5lIEhBVkVfQ0VYUEwgMQorI2RlZmluZSBIQVZFX0NTUVJUTCAxCisjZGVmaW5lIEhBVkVfQ0xPR0wgMQorI2RlZmluZSBIQVZFX0NDT1NMIDEKKyNkZWZpbmUgSEFWRV9DU0lOTCAxCisjZGVmaW5lIEhBVkVfQ1BPV0wgMQorI2RlZmluZSBIQVZFX0xET1VCTEVfSUVFRV9RVUFEX0xFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzNjRuMzIvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHM2NG4zMi9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwczY0bjMyL2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfUVVBRF9MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWYxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9taXBzZWwvY29uZmlnLmgKQEAgLTAsMCArMSwyMSBAQAorLyogLi9zcmMubGludXgtaTY4Ni0yLjUvbnVtcHkvY29yZS9pbmNsdWRlL251bXB5L2NvbmZpZy5oICovCisvKiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAyICovCisvKiAjZGVmaW5lIFNJWkVPRl9JTlQgNCAqLworLyogI2RlZmluZSBTSVpFT0ZfTE9ORyA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9GTE9BVCA0ICovCisvKiAjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOCAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgMTIKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKy8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4ICovCisjZGVmaW5lIFNJWkVPRl9QWV9MT05HX0xPTkcgOAorLyogI2RlZmluZSBDSEFSX0JJVCA4ICovCisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX0ZMT0FUX0ZVTkNTCisjZGVmaW5lIEhBVkVfTE9HMVAKKyNkZWZpbmUgSEFWRV9FWFBNMQorI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQworI2RlZmluZSBIQVZFX0lOVkVSU0VfSFlQRVJCT0xJQ19GTE9BVAorI2RlZmluZSBIQVZFX0lTTkFOCisjZGVmaW5lIEhBVkVfSVNJTkYKKyNkZWZpbmUgSEFWRV9SSU5UCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbWlwc2VsL251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRiZjY1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L21pcHNlbC9udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGNhdCAuL3NyYy5saW51eC1pNjg2LTIuNS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvbnVtcHljb25maWcuaCAqLworLyoKKyAqICAqIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbnVtcHkvY29yZS9zZXR1cC5weWMuIERPIE5PVCBFRElUIAorICogICAqLworI2RlZmluZSBOUFlfU0laRU9GX1NIT1JUIDIgCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyA0IAorI2RlZmluZSBOUFlfU0laRU9GX0ZMT0FUIDQgCisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0RPVUJMRSAxMiAKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA0IAorI2RlZmluZSBOUFlfTk9fU01QIDAKKworI2RlZmluZSBOUFlfU0laRU9GX0xPTkdMT05HIDggCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDggCisvKiAjZGVmaW5lIENIQVJfQklUIDggKi8KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvbm8taG9zdC1wYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L25vLWhvc3QtcGF0aHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc0NTAzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L25vLWhvc3QtcGF0aHMucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRG9uJ3Qgc2VhcmNoIC91c3IgYW5kIHNvIG9uIGZvciBsaWJyYXJpZXMgYnkgZGVmYXVsdCB0byBhdm9pZCBob3N0IGNvbnRhbWluYXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoQXMgdGhlIGNvZGUgc3RhbmRzLCB0aGlzIGlzIGEgaGFjaykKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkgYi9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkKK2luZGV4IGJhYzkwZmIuLmE2M2Q3OTYgMTAwNjQ0CistLS0gYS9udW1weS9kaXN0dXRpbHMvc3lzdGVtX2luZm8ucHkKKysrKyBiL251bXB5L2Rpc3R1dGlscy9zeXN0ZW1faW5mby5weQorQEAgLTE5MSw0MSArMTkxLDEyIEBAIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICBkZWZhdWx0X3gxMV9saWJfZGlycyA9IFtdCisgICAgIGRlZmF1bHRfeDExX2luY2x1ZGVfZGlycyA9IFtdCisgZWxzZToKKy0gICAgZGVmYXVsdF9saWJfZGlycyA9IGxpYnBhdGhzKFsnL3Vzci9sb2NhbC9saWInLCAnL29wdC9saWInLCAnL3Vzci9saWInLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2xpYicsICcvc3cvbGliJ10sIHBsYXRmb3JtX2JpdHMpCistICAgIGRlZmF1bHRfaW5jbHVkZV9kaXJzID0gWycvdXNyL2xvY2FsL2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbmNsdWRlJywgJy91c3IvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGF0aCBvZiB1bWZwYWNrIHVuZGVyIG1hY3BvcnRzCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2xvY2FsL2luY2x1ZGUvdWZzcGFyc2UnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL29wdC9sb2NhbC9pbmNsdWRlJywgJy9zdy9pbmNsdWRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvaW5jbHVkZS9zdWl0ZXNwYXJzZSddCistICAgIGRlZmF1bHRfc3JjX2RpcnMgPSBbJy4nLCAnL3Vzci9sb2NhbC9zcmMnLCAnL29wdC9zcmMnLCAnL3N3L3NyYyddCistCistICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gbGlicGF0aHMoWycvdXNyL1gxMVI2L2xpYicsICcvdXNyL1gxMS9saWInLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9saWInXSwgcGxhdGZvcm1fYml0cykKKy0gICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gWycvdXNyL1gxMVI2L2luY2x1ZGUnLCAnL3Vzci9YMTEvaW5jbHVkZScsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL3Vzci9pbmNsdWRlJ10KKy0KKy0gICAgaWYgb3MucGF0aC5leGlzdHMoJy91c3IvbGliL1gxMScpOgorLSAgICAgICAgZ2xvYmJlZF94MTFfZGlyID0gZ2xvYignL3Vzci9saWIvKi9saWJYMTEuc28nKQorLSAgICAgICAgaWYgZ2xvYmJlZF94MTFfZGlyOgorLSAgICAgICAgICAgIHgxMV9zb19kaXIgPSBvcy5wYXRoLnNwbGl0KGdsb2JiZWRfeDExX2RpclswXSlbMF0KKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9saWJfZGlycy5leHRlbmQoW3gxMV9zb19kaXIsICcvdXNyL2xpYi9YMTEnXSkKKy0gICAgICAgICAgICBkZWZhdWx0X3gxMV9pbmNsdWRlX2RpcnMuZXh0ZW5kKFsnL3Vzci9saWIvWDExL2luY2x1ZGUnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2luY2x1ZGUvWDExJ10pCistCistICAgIGltcG9ydCBzdWJwcm9jZXNzIGFzIHNwCistICAgIHRyeToKKy0gICAgICAgIHAgPSBzcC5Qb3BlbihbImdjYyIsICItcHJpbnQtbXVsdGlhcmNoIl0sIHN0ZG91dD1zcC5QSVBFLAorLSAgICAgICAgICAgICAgICBzdGRlcnI9b3Blbihvcy5kZXZudWxsLCAndycpKQorLSAgICBleGNlcHQgT1NFcnJvcjoKKy0gICAgICAgIHBhc3MgIyBnY2MgaXMgbm90IGluc3RhbGxlZAorLSAgICBlbHNlOgorLSAgICAgICAgdHJpcGxldCA9IHN0cihwLmNvbW11bmljYXRlKClbMF0uZGVjb2RlKCkuc3RyaXAoKSkKKy0gICAgICAgIGlmIHAucmV0dXJuY29kZSA9PSAwOgorLSAgICAgICAgICAgICMgZ2NjIHN1cHBvcnRzIHRoZSAiLXByaW50LW11bHRpYXJjaCIgb3B0aW9uCistICAgICAgICAgICAgZGVmYXVsdF94MTFfbGliX2RpcnMgKz0gW29zLnBhdGguam9pbigiL3Vzci9saWIvIiwgdHJpcGxldCldCistICAgICAgICAgICAgZGVmYXVsdF9saWJfZGlycyArPSBbb3MucGF0aC5qb2luKCIvdXNyL2xpYi8iLCB0cmlwbGV0KV0KKysgICAgZGVmYXVsdF9saWJfZGlycyA9IGxpYnBhdGhzKFsnL2RlYWRpci9saWInXSwgcGxhdGZvcm1fYml0cykKKysgICAgZGVmYXVsdF9pbmNsdWRlX2RpcnMgPSBbJy9kZWFkZGlyL2luY2x1ZGUnXQorKyAgICBkZWZhdWx0X3NyY19kaXJzID0gWycuJywgJy9kZWFkZGlyL3NyYyddCisrCisrICAgIGRlZmF1bHRfeDExX2xpYl9kaXJzID0gbGlicGF0aHMoWycvZGVhZGRpci9saWInXSwgcGxhdGZvcm1fYml0cykKKysgICAgZGVmYXVsdF94MTFfaW5jbHVkZV9kaXJzID0gWycvZGVhZGRpci9pbmNsdWRlJ10KKyAKKyBpZiBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgJ2xpYicpIG5vdCBpbiBkZWZhdWx0X2xpYl9kaXJzOgorICAgICBkZWZhdWx0X2xpYl9kaXJzLmluc2VydCgwLCBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgJ2xpYicpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9fbnVtcHljb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjYmZiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGMvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgNAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjL2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVkMzlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYy9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9ET1VCTEVfRE9VQkxFX0JFIDEKKyNpZm5kZWYgX19jcGx1c3BsdXMKKy8qICN1bmRlZiBpbmxpbmUgKi8KKyNlbmRpZgorCisjaWZuZGVmIF9OUFlfTlBZX0NPTkZJR19IXworI2Vycm9yIGNvbmZpZy5oIHNob3VsZCBuZXZlciBiZSBpbmNsdWRlZCBkaXJlY3RseSwgaW5jbHVkZSBucHlfY29uZmlnLmggaW5zdGVhZAorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS9wb3dlcnBjNjQvX251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU1N2FjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9fbnVtcHljb25maWcuaApAQCAtMCwwICsxLDMwIEBACisjZGVmaW5lIE5QWV9IQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgTlBZX1NJWkVPRl9TSE9SVCBTSVpFT0ZfU0hPUlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9JTlQgU0laRU9GX0lOVAorI2RlZmluZSBOUFlfU0laRU9GX0xPTkcgU0laRU9GX0xPTkcKKyNkZWZpbmUgTlBZX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9GTE9BVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfRE9VQkxFIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0RPVUJMRSAxNgorI2RlZmluZSBOUFlfU0laRU9GX0xPTkdET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9DT01QTEVYX0xPTkdET1VCTEUgMzIKKyNkZWZpbmUgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVCA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HTE9ORyA4CisjZGVmaW5lIE5QWV9OT19TTVAgMAorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTTkFOCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNJTkYKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU0ZJTklURQorI2RlZmluZSBOUFlfSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgTlBZX1VTRV9DOTlfQ09NUExFWCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX0hBVkVfQ09NUExFWF9GTE9BVCAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfTE9OR19ET1VCTEUgMQorI2RlZmluZSBOUFlfVVNFX0M5OV9GT1JNQVRTIDEKKyNkZWZpbmUgTlBZX1ZJU0lCSUxJVFlfSElEREVOIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkKKyNkZWZpbmUgTlBZX0FCSV9WRVJTSU9OIDB4MDEwMDAwMDkKKyNkZWZpbmUgTlBZX0FQSV9WRVJTSU9OIDB4MDAwMDAwMDcKKworI2lmbmRlZiBfX1NURENfRk9STUFUX01BQ1JPUworI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUyAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9jb25maWcuaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3Bvd2VycGM2NC9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzBiODY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkvcG93ZXJwYzY0L2NvbmZpZy5oCkBAIC0wLDAgKzEsMTM5IEBACisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorI2RlZmluZSBTSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBTSVpFT0ZfUFlfTE9OR19MT05HIDgKKyNkZWZpbmUgTUFUSExJQiBtCisjZGVmaW5lIEhBVkVfU0lOIDEKKyNkZWZpbmUgSEFWRV9DT1MgMQorI2RlZmluZSBIQVZFX1RBTiAxCisjZGVmaW5lIEhBVkVfU0lOSCAxCisjZGVmaW5lIEhBVkVfQ09TSCAxCisjZGVmaW5lIEhBVkVfVEFOSCAxCisjZGVmaW5lIEhBVkVfRkFCUyAxCisjZGVmaW5lIEhBVkVfRkxPT1IgMQorI2RlZmluZSBIQVZFX0NFSUwgMQorI2RlZmluZSBIQVZFX1NRUlQgMQorI2RlZmluZSBIQVZFX0xPRzEwIDEKKyNkZWZpbmUgSEFWRV9MT0cgMQorI2RlZmluZSBIQVZFX0VYUCAxCisjZGVmaW5lIEhBVkVfQVNJTiAxCisjZGVmaW5lIEhBVkVfQUNPUyAxCisjZGVmaW5lIEhBVkVfQVRBTiAxCisjZGVmaW5lIEhBVkVfRk1PRCAxCisjZGVmaW5lIEhBVkVfTU9ERiAxCisjZGVmaW5lIEhBVkVfRlJFWFAgMQorI2RlZmluZSBIQVZFX0xERVhQIDEKKyNkZWZpbmUgSEFWRV9SSU5UIDEKKyNkZWZpbmUgSEFWRV9UUlVOQyAxCisjZGVmaW5lIEhBVkVfRVhQMiAxCisjZGVmaW5lIEhBVkVfTE9HMiAxCisjZGVmaW5lIEhBVkVfQVRBTjIgMQorI2RlZmluZSBIQVZFX1BPVyAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSIDEKKyNkZWZpbmUgSEFWRV9TSU5GIDEKKyNkZWZpbmUgSEFWRV9DT1NGIDEKKyNkZWZpbmUgSEFWRV9UQU5GIDEKKyNkZWZpbmUgSEFWRV9TSU5IRiAxCisjZGVmaW5lIEhBVkVfQ09TSEYgMQorI2RlZmluZSBIQVZFX1RBTkhGIDEKKyNkZWZpbmUgSEFWRV9GQUJTRiAxCisjZGVmaW5lIEhBVkVfRkxPT1JGIDEKKyNkZWZpbmUgSEFWRV9DRUlMRiAxCisjZGVmaW5lIEhBVkVfUklOVEYgMQorI2RlZmluZSBIQVZFX1RSVU5DRiAxCisjZGVmaW5lIEhBVkVfU1FSVEYgMQorI2RlZmluZSBIQVZFX0xPRzEwRiAxCisjZGVmaW5lIEhBVkVfTE9HRiAxCisjZGVmaW5lIEhBVkVfTE9HMVBGIDEKKyNkZWZpbmUgSEFWRV9FWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFBNMUYgMQorI2RlZmluZSBIQVZFX0FTSU5GIDEKKyNkZWZpbmUgSEFWRV9BQ09TRiAxCisjZGVmaW5lIEhBVkVfQVRBTkYgMQorI2RlZmluZSBIQVZFX0FTSU5IRiAxCisjZGVmaW5lIEhBVkVfQUNPU0hGIDEKKyNkZWZpbmUgSEFWRV9BVEFOSEYgMQorI2RlZmluZSBIQVZFX0hZUE9URiAxCisjZGVmaW5lIEhBVkVfQVRBTjJGIDEKKyNkZWZpbmUgSEFWRV9QT1dGIDEKKyNkZWZpbmUgSEFWRV9GTU9ERiAxCisjZGVmaW5lIEhBVkVfTU9ERkYgMQorI2RlZmluZSBIQVZFX0ZSRVhQRiAxCisjZGVmaW5lIEhBVkVfTERFWFBGIDEKKyNkZWZpbmUgSEFWRV9FWFAyRiAxCisjZGVmaW5lIEhBVkVfTE9HMkYgMQorI2RlZmluZSBIQVZFX0NPUFlTSUdORiAxCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSRiAxCisjZGVmaW5lIEhBVkVfU0lOTCAxCisjZGVmaW5lIEhBVkVfQ09TTCAxCisjZGVmaW5lIEhBVkVfVEFOTCAxCisjZGVmaW5lIEhBVkVfU0lOSEwgMQorI2RlZmluZSBIQVZFX0NPU0hMIDEKKyNkZWZpbmUgSEFWRV9UQU5ITCAxCisjZGVmaW5lIEhBVkVfRkFCU0wgMQorI2RlZmluZSBIQVZFX0ZMT09STCAxCisjZGVmaW5lIEhBVkVfQ0VJTEwgMQorI2RlZmluZSBIQVZFX1JJTlRMIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0wgMQorI2RlZmluZSBIQVZFX1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorI2RlZmluZSBIQVZFX0xPR0wgMQorI2RlZmluZSBIQVZFX0xPRzFQTCAxCisjZGVmaW5lIEhBVkVfRVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQTTFMIDEKKyNkZWZpbmUgSEFWRV9BU0lOTCAxCisjZGVmaW5lIEhBVkVfQUNPU0wgMQorI2RlZmluZSBIQVZFX0FUQU5MIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEwgMQorI2RlZmluZSBIQVZFX0FDT1NITCAxCisjZGVmaW5lIEhBVkVfQVRBTkhMIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEwgMQorI2RlZmluZSBIQVZFX0FUQU4yTCAxCisjZGVmaW5lIEhBVkVfUE9XTCAxCisjZGVmaW5lIEhBVkVfRk1PREwgMQorI2RlZmluZSBIQVZFX01PREZMIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEwgMQorI2RlZmluZSBIQVZFX0xERVhQTCAxCisjZGVmaW5lIEhBVkVfRVhQMkwgMQorI2RlZmluZSBIQVZFX0xPRzJMIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkwgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkwgMQorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSCAxCisjZGVmaW5lIEhBVkVfQ1JFQUwgMQorI2RlZmluZSBIQVZFX0NJTUFHIDEKKyNkZWZpbmUgSEFWRV9DQUJTIDEKKyNkZWZpbmUgSEFWRV9DQVJHIDEKKyNkZWZpbmUgSEFWRV9DRVhQIDEKKyNkZWZpbmUgSEFWRV9DU1FSVCAxCisjZGVmaW5lIEhBVkVfQ0xPRyAxCisjZGVmaW5lIEhBVkVfQ0NPUyAxCisjZGVmaW5lIEhBVkVfQ1NJTiAxCisjZGVmaW5lIEhBVkVfQ1BPVyAxCisjZGVmaW5lIEhBVkVfQ1JFQUxGIDEKKyNkZWZpbmUgSEFWRV9DSU1BR0YgMQorI2RlZmluZSBIQVZFX0NBQlNGIDEKKyNkZWZpbmUgSEFWRV9DQVJHRiAxCisjZGVmaW5lIEhBVkVfQ0VYUEYgMQorI2RlZmluZSBIQVZFX0NTUVJURiAxCisjZGVmaW5lIEhBVkVfQ0xPR0YgMQorI2RlZmluZSBIQVZFX0NDT1NGIDEKKyNkZWZpbmUgSEFWRV9DU0lORiAxCisjZGVmaW5lIEhBVkVfQ1BPV0YgMQorI2RlZmluZSBIQVZFX0NSRUFMTCAxCisjZGVmaW5lIEhBVkVfQ0lNQUdMIDEKKyNkZWZpbmUgSEFWRV9DQUJTTCAxCisjZGVmaW5lIEhBVkVfQ0FSR0wgMQorI2RlZmluZSBIQVZFX0NFWFBMIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEwgMQorI2RlZmluZSBIQVZFX0NMT0dMIDEKKyNkZWZpbmUgSEFWRV9DQ09TTCAxCisjZGVmaW5lIEhBVkVfQ1NJTkwgMQorI2RlZmluZSBIQVZFX0NQT1dMIDEKKyNkZWZpbmUgSEFWRV9MRE9VQkxFX0lFRUVfUVVBRF9MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2LTY0L19udW1weWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNTdhYzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvX251bXB5Y29uZmlnLmgKQEAgLTAsMCArMSwzMCBAQAorI2RlZmluZSBOUFlfSEFWRV9FTkRJQU5fSCAxCisjZGVmaW5lIE5QWV9TSVpFT0ZfU0hPUlQgU0laRU9GX1NIT1JUCisjZGVmaW5lIE5QWV9TSVpFT0ZfSU5UIFNJWkVPRl9JTlQKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIFNJWkVPRl9MT05HCisjZGVmaW5lIE5QWV9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBOUFlfU0laRU9GX0NPTVBMRVhfRkxPQVQgOAorI2RlZmluZSBOUFlfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9ET1VCTEUgMTYKKyNkZWZpbmUgTlBZX1NJWkVPRl9MT05HRE9VQkxFIDE2CisjZGVmaW5lIE5QWV9TSVpFT0ZfQ09NUExFWF9MT05HRE9VQkxFIDMyCisjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgOAorI2RlZmluZSBOUFlfU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE5QWV9TSVpFT0ZfTE9OR0xPTkcgOAorI2RlZmluZSBOUFlfTk9fU01QIDAKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9JU05BTgorI2RlZmluZSBOUFlfSEFWRV9ERUNMX0lTSU5GCisjZGVmaW5lIE5QWV9IQVZFX0RFQ0xfSVNGSU5JVEUKKyNkZWZpbmUgTlBZX0hBVkVfREVDTF9TSUdOQklUCisjZGVmaW5lIE5QWV9VU0VfQzk5X0NPTVBMRVggMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0RPVUJMRSAxCisjZGVmaW5lIE5QWV9IQVZFX0NPTVBMRVhfRkxPQVQgMQorI2RlZmluZSBOUFlfSEFWRV9DT01QTEVYX0xPTkdfRE9VQkxFIDEKKyNkZWZpbmUgTlBZX1VTRV9DOTlfRk9STUFUUyAxCisjZGVmaW5lIE5QWV9WSVNJQklMSVRZX0hJRERFTiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSkpCisjZGVmaW5lIE5QWV9BQklfVkVSU0lPTiAweDAxMDAwMDA5CisjZGVmaW5lIE5QWV9BUElfVkVSU0lPTiAweDAwMDAwMDA3CisKKyNpZm5kZWYgX19TVERDX0ZPUk1BVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYtNjQvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlNjNiNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni02NC9jb25maWcuaApAQCAtMCwwICsxLDEzOSBAQAorI2RlZmluZSBIQVZFX0VORElBTl9IIDEKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDgKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTiAxCisjZGVmaW5lIEhBVkVfQ09TIDEKKyNkZWZpbmUgSEFWRV9UQU4gMQorI2RlZmluZSBIQVZFX1NJTkggMQorI2RlZmluZSBIQVZFX0NPU0ggMQorI2RlZmluZSBIQVZFX1RBTkggMQorI2RlZmluZSBIQVZFX0ZBQlMgMQorI2RlZmluZSBIQVZFX0ZMT09SIDEKKyNkZWZpbmUgSEFWRV9DRUlMIDEKKyNkZWZpbmUgSEFWRV9TUVJUIDEKKyNkZWZpbmUgSEFWRV9MT0cxMCAxCisjZGVmaW5lIEhBVkVfTE9HIDEKKyNkZWZpbmUgSEFWRV9FWFAgMQorI2RlZmluZSBIQVZFX0FTSU4gMQorI2RlZmluZSBIQVZFX0FDT1MgMQorI2RlZmluZSBIQVZFX0FUQU4gMQorI2RlZmluZSBIQVZFX0ZNT0QgMQorI2RlZmluZSBIQVZFX01PREYgMQorI2RlZmluZSBIQVZFX0ZSRVhQIDEKKyNkZWZpbmUgSEFWRV9MREVYUCAxCisjZGVmaW5lIEhBVkVfUklOVCAxCisjZGVmaW5lIEhBVkVfVFJVTkMgMQorI2RlZmluZSBIQVZFX0VYUDIgMQorI2RlZmluZSBIQVZFX0xPRzIgMQorI2RlZmluZSBIQVZFX0FUQU4yIDEKKyNkZWZpbmUgSEFWRV9QT1cgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUiAxCisjZGVmaW5lIEhBVkVfU0lORiAxCisjZGVmaW5lIEhBVkVfQ09TRiAxCisjZGVmaW5lIEhBVkVfVEFORiAxCisjZGVmaW5lIEhBVkVfU0lOSEYgMQorI2RlZmluZSBIQVZFX0NPU0hGIDEKKyNkZWZpbmUgSEFWRV9UQU5IRiAxCisjZGVmaW5lIEhBVkVfRkFCU0YgMQorI2RlZmluZSBIQVZFX0ZMT09SRiAxCisjZGVmaW5lIEhBVkVfQ0VJTEYgMQorI2RlZmluZSBIQVZFX1JJTlRGIDEKKyNkZWZpbmUgSEFWRV9UUlVOQ0YgMQorI2RlZmluZSBIQVZFX1NRUlRGIDEKKyNkZWZpbmUgSEFWRV9MT0cxMEYgMQorI2RlZmluZSBIQVZFX0xPR0YgMQorI2RlZmluZSBIQVZFX0xPRzFQRiAxCisjZGVmaW5lIEhBVkVfRVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQTTFGIDEKKyNkZWZpbmUgSEFWRV9BU0lORiAxCisjZGVmaW5lIEhBVkVfQUNPU0YgMQorI2RlZmluZSBIQVZFX0FUQU5GIDEKKyNkZWZpbmUgSEFWRV9BU0lOSEYgMQorI2RlZmluZSBIQVZFX0FDT1NIRiAxCisjZGVmaW5lIEhBVkVfQVRBTkhGIDEKKyNkZWZpbmUgSEFWRV9IWVBPVEYgMQorI2RlZmluZSBIQVZFX0FUQU4yRiAxCisjZGVmaW5lIEhBVkVfUE9XRiAxCisjZGVmaW5lIEhBVkVfRk1PREYgMQorI2RlZmluZSBIQVZFX01PREZGIDEKKyNkZWZpbmUgSEFWRV9GUkVYUEYgMQorI2RlZmluZSBIQVZFX0xERVhQRiAxCisjZGVmaW5lIEhBVkVfRVhQMkYgMQorI2RlZmluZSBIQVZFX0xPRzJGIDEKKyNkZWZpbmUgSEFWRV9DT1BZU0lHTkYgMQorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYgMQorI2RlZmluZSBIQVZFX1NJTkwgMQorI2RlZmluZSBIQVZFX0NPU0wgMQorI2RlZmluZSBIQVZFX1RBTkwgMQorI2RlZmluZSBIQVZFX1NJTkhMIDEKKyNkZWZpbmUgSEFWRV9DT1NITCAxCisjZGVmaW5lIEhBVkVfVEFOSEwgMQorI2RlZmluZSBIQVZFX0ZBQlNMIDEKKyNkZWZpbmUgSEFWRV9GTE9PUkwgMQorI2RlZmluZSBIQVZFX0NFSUxMIDEKKyNkZWZpbmUgSEFWRV9SSU5UTCAxCisjZGVmaW5lIEhBVkVfVFJVTkNMIDEKKyNkZWZpbmUgSEFWRV9TUVJUTCAxCisjZGVmaW5lIEhBVkVfTE9HMTBMIDEKKyNkZWZpbmUgSEFWRV9MT0dMIDEKKyNkZWZpbmUgSEFWRV9MT0cxUEwgMQorI2RlZmluZSBIQVZFX0VYUEwgMQorI2RlZmluZSBIQVZFX0VYUE0xTCAxCisjZGVmaW5lIEhBVkVfQVNJTkwgMQorI2RlZmluZSBIQVZFX0FDT1NMIDEKKyNkZWZpbmUgSEFWRV9BVEFOTCAxCisjZGVmaW5lIEhBVkVfQVNJTkhMIDEKKyNkZWZpbmUgSEFWRV9BQ09TSEwgMQorI2RlZmluZSBIQVZFX0FUQU5ITCAxCisjZGVmaW5lIEhBVkVfSFlQT1RMIDEKKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQorI2RlZmluZSBIQVZFX1BPV0wgMQorI2RlZmluZSBIQVZFX0ZNT0RMIDEKKyNkZWZpbmUgSEFWRV9NT0RGTCAxCisjZGVmaW5lIEhBVkVfRlJFWFBMIDEKKyNkZWZpbmUgSEFWRV9MREVYUEwgMQorI2RlZmluZSBIQVZFX0VYUDJMIDEKKyNkZWZpbmUgSEFWRV9MT0cyTCAxCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MIDEKKyNkZWZpbmUgSEFWRV9ORVhUQUZURVJMIDEKKyNkZWZpbmUgSEFWRV9ERUNMX1NJR05CSVQKKyNkZWZpbmUgSEFWRV9DT01QTEVYX0ggMQorI2RlZmluZSBIQVZFX0NSRUFMIDEKKyNkZWZpbmUgSEFWRV9DSU1BRyAxCisjZGVmaW5lIEhBVkVfQ0FCUyAxCisjZGVmaW5lIEhBVkVfQ0FSRyAxCisjZGVmaW5lIEhBVkVfQ0VYUCAxCisjZGVmaW5lIEhBVkVfQ1NRUlQgMQorI2RlZmluZSBIQVZFX0NMT0cgMQorI2RlZmluZSBIQVZFX0NDT1MgMQorI2RlZmluZSBIQVZFX0NTSU4gMQorI2RlZmluZSBIQVZFX0NQT1cgMQorI2RlZmluZSBIQVZFX0NSRUFMRiAxCisjZGVmaW5lIEhBVkVfQ0lNQUdGIDEKKyNkZWZpbmUgSEFWRV9DQUJTRiAxCisjZGVmaW5lIEhBVkVfQ0FSR0YgMQorI2RlZmluZSBIQVZFX0NFWFBGIDEKKyNkZWZpbmUgSEFWRV9DU1FSVEYgMQorI2RlZmluZSBIQVZFX0NMT0dGIDEKKyNkZWZpbmUgSEFWRV9DQ09TRiAxCisjZGVmaW5lIEhBVkVfQ1NJTkYgMQorI2RlZmluZSBIQVZFX0NQT1dGIDEKKyNkZWZpbmUgSEFWRV9DUkVBTEwgMQorI2RlZmluZSBIQVZFX0NJTUFHTCAxCisjZGVmaW5lIEhBVkVfQ0FCU0wgMQorI2RlZmluZSBIQVZFX0NBUkdMIDEKKyNkZWZpbmUgSEFWRV9DRVhQTCAxCisjZGVmaW5lIEhBVkVfQ1NRUlRMIDEKKyNkZWZpbmUgSEFWRV9DTE9HTCAxCisjZGVmaW5lIEhBVkVfQ0NPU0wgMQorI2RlZmluZSBIQVZFX0NTSU5MIDEKKyNkZWZpbmUgSEFWRV9DUE9XTCAxCisjZGVmaW5lIEhBVkVfTERPVUJMRV9JTlRFTF9FWFRFTkRFRF8xNl9CWVRFU19MRSAxCisjaWZuZGVmIF9fY3BsdXNwbHVzCisvKiAjdW5kZWYgaW5saW5lICovCisjZW5kaWYKKworI2lmbmRlZiBfTlBZX05QWV9DT05GSUdfSF8KKyNlcnJvciBjb25maWcuaCBzaG91bGQgbmV2ZXIgYmUgaW5jbHVkZWQgZGlyZWN0bHksIGluY2x1ZGUgbnB5X2NvbmZpZy5oIGluc3RlYWQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L2NvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZTQxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weS94ODYvY29uZmlnLmgKQEAgLTAsMCArMSwxMDggQEAKKyNkZWZpbmUgU0laRU9GX1BZX0lOVFBUUl9UIDQKKyNkZWZpbmUgU0laRU9GX1BZX0xPTkdfTE9ORyA4CisjZGVmaW5lIE1BVEhMSUIgbQorI2RlZmluZSBIQVZFX1NJTgorI2RlZmluZSBIQVZFX0NPUworI2RlZmluZSBIQVZFX1RBTgorI2RlZmluZSBIQVZFX1NJTkgKKyNkZWZpbmUgSEFWRV9DT1NICisjZGVmaW5lIEhBVkVfVEFOSAorI2RlZmluZSBIQVZFX0ZBQlMKKyNkZWZpbmUgSEFWRV9GTE9PUgorI2RlZmluZSBIQVZFX0NFSUwKKyNkZWZpbmUgSEFWRV9TUVJUCisjZGVmaW5lIEhBVkVfTE9HMTAKKyNkZWZpbmUgSEFWRV9MT0cKKyNkZWZpbmUgSEFWRV9FWFAKKyNkZWZpbmUgSEFWRV9BU0lOCisjZGVmaW5lIEhBVkVfQUNPUworI2RlZmluZSBIQVZFX0FUQU4KKyNkZWZpbmUgSEFWRV9GTU9ECisjZGVmaW5lIEhBVkVfTU9ERgorI2RlZmluZSBIQVZFX0ZSRVhQCisjZGVmaW5lIEhBVkVfTERFWFAKKyNkZWZpbmUgSEFWRV9SSU5UCisjZGVmaW5lIEhBVkVfVFJVTkMKKyNkZWZpbmUgSEFWRV9FWFAyCisjZGVmaW5lIEhBVkVfTE9HMgorI2RlZmluZSBIQVZFX0FUQU4yCisjZGVmaW5lIEhBVkVfUE9XCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSCisjZGVmaW5lIEhBVkVfU0lORgorI2RlZmluZSBIQVZFX0NPU0YKKyNkZWZpbmUgSEFWRV9UQU5GCisjZGVmaW5lIEhBVkVfU0lOSEYKKyNkZWZpbmUgSEFWRV9DT1NIRgorI2RlZmluZSBIQVZFX1RBTkhGCisjZGVmaW5lIEhBVkVfRkFCU0YKKyNkZWZpbmUgSEFWRV9GTE9PUkYKKyNkZWZpbmUgSEFWRV9DRUlMRgorI2RlZmluZSBIQVZFX1JJTlRGCisjZGVmaW5lIEhBVkVfVFJVTkNGCisjZGVmaW5lIEhBVkVfU1FSVEYKKyNkZWZpbmUgSEFWRV9MT0cxMEYKKyNkZWZpbmUgSEFWRV9MT0dGCisjZGVmaW5lIEhBVkVfTE9HMVBGCisjZGVmaW5lIEhBVkVfRVhQRgorI2RlZmluZSBIQVZFX0VYUE0xRgorI2RlZmluZSBIQVZFX0FTSU5GCisjZGVmaW5lIEhBVkVfQUNPU0YKKyNkZWZpbmUgSEFWRV9BVEFORgorI2RlZmluZSBIQVZFX0FTSU5IRgorI2RlZmluZSBIQVZFX0FDT1NIRgorI2RlZmluZSBIQVZFX0FUQU5IRgorI2RlZmluZSBIQVZFX0hZUE9URgorI2RlZmluZSBIQVZFX0FUQU4yRgorI2RlZmluZSBIQVZFX1BPV0YKKyNkZWZpbmUgSEFWRV9GTU9ERgorI2RlZmluZSBIQVZFX01PREZGCisjZGVmaW5lIEhBVkVfRlJFWFBGCisjZGVmaW5lIEhBVkVfTERFWFBGCisjZGVmaW5lIEhBVkVfRVhQMkYKKyNkZWZpbmUgSEFWRV9MT0cyRgorI2RlZmluZSBIQVZFX0NPUFlTSUdORgorI2RlZmluZSBIQVZFX05FWFRBRlRFUkYKKyNkZWZpbmUgSEFWRV9TSU5MCisjZGVmaW5lIEhBVkVfQ09TTAorI2RlZmluZSBIQVZFX1RBTkwKKyNkZWZpbmUgSEFWRV9TSU5ITAorI2RlZmluZSBIQVZFX0NPU0hMCisjZGVmaW5lIEhBVkVfVEFOSEwKKyNkZWZpbmUgSEFWRV9GQUJTTAorI2RlZmluZSBIQVZFX0ZMT09STAorI2RlZmluZSBIQVZFX0NFSUxMCisjZGVmaW5lIEhBVkVfUklOVEwKKyNkZWZpbmUgSEFWRV9UUlVOQ0wKKyNkZWZpbmUgSEFWRV9TUVJUTAorI2RlZmluZSBIQVZFX0xPRzEwTAorI2RlZmluZSBIQVZFX0xPR0wKKyNkZWZpbmUgSEFWRV9MT0cxUEwKKyNkZWZpbmUgSEFWRV9FWFBMCisjZGVmaW5lIEhBVkVfRVhQTTFMCisjZGVmaW5lIEhBVkVfQVNJTkwKKyNkZWZpbmUgSEFWRV9BQ09TTAorI2RlZmluZSBIQVZFX0FUQU5MCisjZGVmaW5lIEhBVkVfQVNJTkhMCisjZGVmaW5lIEhBVkVfQUNPU0hMCisjZGVmaW5lIEhBVkVfQVRBTkhMCisjZGVmaW5lIEhBVkVfSFlQT1RMCisjZGVmaW5lIEhBVkVfQVRBTjJMCisjZGVmaW5lIEhBVkVfUE9XTAorI2RlZmluZSBIQVZFX0ZNT0RMCisjZGVmaW5lIEhBVkVfTU9ERkwKKyNkZWZpbmUgSEFWRV9GUkVYUEwKKyNkZWZpbmUgSEFWRV9MREVYUEwKKyNkZWZpbmUgSEFWRV9FWFAyTAorI2RlZmluZSBIQVZFX0xPRzJMCisjZGVmaW5lIEhBVkVfQ09QWVNJR05MCisjZGVmaW5lIEhBVkVfTkVYVEFGVEVSTAorI2RlZmluZSBIQVZFX0RFQ0xfU0lHTkJJVAorI2RlZmluZSBIQVZFX0NPTVBMRVhfSAorI2RlZmluZSBIQVZFX0xET1VCTEVfSU5URUxfRVhURU5ERURfMTJfQllURVNfTEUgMQorI2lmbmRlZiBfX2NwbHVzcGx1cworLyogI3VuZGVmIGlubGluZSAqLworI2VuZGlmCisKKyNpZm5kZWYgX05QWV9OUFlfQ09ORklHX0hfCisjZXJyb3IgY29uZmlnLmggc2hvdWxkIG5ldmVyIGJlIGluY2x1ZGVkIGRpcmVjdGx5LCBpbmNsdWRlIG5weV9jb25maWcuaCBpbnN0ZWFkCisjZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9udW1weWNvbmZpZy5oIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tbnVtcHkveDg2L251bXB5Y29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY3OTM4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5L3g4Ni9udW1weWNvbmZpZy5oCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX05QWV9OVU1QWUNPTkZJR19IXworI2RlZmluZSBfTlBZX05VTVBZQ09ORklHX0hfCisKKyNpbmNsdWRlICJfbnVtcHljb25maWcuaCIKKworLyogCisgKiBPbiBNYWMgT1MgWCwgYmVjYXVzZSB0aGVyZSBpcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uIHN0YWdlIGZvciBhbGwgdGhlIGFyY2hzCisgKiBpbiB1bml2ZXJzYWwgYnVpbGRzLCBhbnkgbWFjcm8gd2hpY2ggZGVwZW5kcyBvbiB0aGUgYXJjaCBuZWVkcyB0byBiZQorICogaGFyY29kZWQKKyAqLworI2lmZGVmIF9fQVBQTEVfXworCSN1bmRlZiBOUFlfU0laRU9GX0xPTkcKKwkjdW5kZWYgTlBZX1NJWkVPRl9QWV9JTlRQVFJfVAorCisJI2lmZGVmIF9fTFA2NF9fCisJCSNkZWZpbmUgTlBZX1NJWkVPRl9MT05HIAkJOAorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfUFlfSU5UUFRSX1QgCTgKKwkjZWxzZQorCQkjZGVmaW5lIE5QWV9TSVpFT0ZfTE9ORyAJCTQKKwkJI2RlZmluZSBOUFlfU0laRU9GX1BZX0lOVFBUUl9UIAk0CisJI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjcuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLW51bXB5XzEuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxY2RmZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1udW1weV8xLjcuMC5iYgpAQCAtMCwwICsxLDk5IEBACitTVU1NQVJZID0gIkEgc29waGlzdGljYXRlZCBOdW1lcmljIFByb2Nlc3NpbmcgUGFja2FnZSBmb3IgUHl0aG9uIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlBTRiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UudHh0O21kNT1mODc4MzJkODU0YWNiYWRlNmU5ZjVjNjAxYzhiMzBiMSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9udW1weS9udW1weS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8taG9zdC1wYXRocy5wYXRjaCBcCisgICAgICAgICAgICR7Q09ORklHRklMRVNVUkl9ICIKKworQ09ORklHRklMRVNVUkkgPz0gIiIKKworQ09ORklHRklMRVNVUklfYWFyY2g2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX2FybSA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfYXJtZWIgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHNlbCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfeDg2ID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV94ODYtNjQgPSAiIFwKKyAgICBmaWxlOi8vY29uZmlnLmggXAorICAgIGZpbGU6Ly9fbnVtcHljb25maWcuaCBcCisiCitDT05GSUdGSUxFU1VSSV9taXBzID0gIiBcCisgICAgZmlsZTovL2NvbmZpZy5oIFwKKyAgICBmaWxlOi8vX251bXB5Y29uZmlnLmggXAorIgorQ09ORklHRklMRVNVUklfcG93ZXJwYyA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX3Bvd2VycGM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NCA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKK0NPTkZJR0ZJTEVTVVJJX21pcHM2NG4zMiA9ICIgXAorICAgIGZpbGU6Ly9jb25maWcuaCBcCisgICAgZmlsZTovL19udW1weWNvbmZpZy5oIFwKKyIKKworUyA9ICIke1dPUktESVJ9L251bXB5LSR7UFZ9IgorCitpbmhlcml0IGRpc3R1dGlscworCisjIE1ha2UgdGhlIGJ1aWxkIGZhaWwgYW5kIHJlcGxhY2UgKmNvbmZpZy5oIHdpdGggcHJvcGVyIG9uZQorIyBUaGlzIGlzIGEgdWdseSwgdWdseSBoYWNrIC0gS29lbgorZG9fY29tcGlsZV9wcmVwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKyAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gc2V0dXAucHkgYnVpbGQgJHtESVNUVVRJTFNfQlVJTERfQVJHU30gfHwgXAorICAgIHRydWUKKyAgICBjcCAke1dPUktESVJ9Lypjb25maWcuaCAke1N9L2J1aWxkLyQobHMgJHtTfS9idWlsZCB8IGdyZXAgc3JjKS9udW1weS9jb3JlL2luY2x1ZGUvbnVtcHkvCit9CisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vbnVtcHkvY29yZS9saWIvKi5hIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGZhNTRlNDBiNmEyNDM0MTZmMDI0ODEyM2I2ZWMzMzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRmYTcwYjdlZGJhYjY1ZWU2NDMyZWI2Mzc0M2Y1NDg5ZjE5MTljNjE0NjMyYjIwYjJmYjQ1YWE3ZTY4MmFjNiIKKworIyBpbnN0YWxsIHdoYXQgaXMgbmVlZGVkIGZvciBudW1weS50ZXN0KCkKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi11bml0dGVzdCBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGlmZmxpYiBcCisgICAgICAgICAgICAgICAgICBweXRob24tcHByaW50IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1waWNrbGUgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXNoZWxsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1ub3NlIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kb2N0ZXN0IFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1kYXRldGltZSBcCisgICAgICAgICAgICAgICAgICBweXRob24tZGlzdHV0aWxzIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1taXNjIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1tbWFwIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1uZXRjbGllbnQgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLW51bWJlcnMgXAorICAgICAgICAgICAgICAgICAgcHl0aG9uLXB5ZG9jIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1wa2d1dGlsIFwKKyAgICAgICAgICAgICAgICAgIHB5dGhvbi1lbWFpbCBcCisgICAgICAgICAgICAgICAgICBweXRob24tc3VicHJvY2VzcyBcCisgICAgICAgICAgICAgICAgICBweXRob24tY29tcHJlc3Npb24gXAorIgorCitSREVQRU5EU18ke1BOfV9jbGFzcy1uYXRpdmUgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzMuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXBleHBlY3RfMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkODBhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1wZXhwZWN0XzMuMy5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkEgUHVyZSBQeXRob24gRXhwZWN0IGxpa2UgTW9kdWxlIGZvciBQeXRob24iCitIT01FUEFHRSA9ICJodHRwOi8vcGV4cGVjdC5yZWFkdGhlZG9jcy5vcmcvIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWMyNWQ5YTA3NzBiYTY5YTk5NjVhY2M4OTRlOWYzNjQ0IgorCitTUkNfVVJJID0gImh0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9wL3BleHBlY3QvcGV4cGVjdC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiMGRlNzI1NDFkM2YxMzc0Yjc5NTQ3MmZlZDg0MWRjZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZGZlYTYxOGQ0M2U4M2NmZmYyMTUwNGYxOGY5ODAxOWJhNTIwZjMzMGU0MTQyZTUxODVlZjdjNzM1MjdkZTViYSIKKworUyA9ICIke1dPUktESVJ9L3BleHBlY3QtJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICBweXRob24tY29yZSBcCisgICAgcHl0aG9uLWlvIFwKKyAgICBweXRob24tdGVybWluYWwgXAorICAgIHB5dGhvbi1yZXNvdXJjZSBcCisgICAgcHl0aG9uLWZjbnRsIFwKKyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Y2Fpcm9fMS4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZmUyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWNhaXJvXzEuMTAuMC5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgdGhlIENhaXJvIGNhbnZhcyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3B5Y2Fpcm8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAicHl0aG9uLWRldmVsIgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIE1QTC0xLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMmUwNzFhYjcyOTc4NDMxYjI5NGEwZDY5NjMyNzQyMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLUxHUEwtMi4xO21kNT1mYWQ5YjMzMzJiZTg5NGJhYjliYzUwMTU3Mjg2NGIyOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLU1QTC0xLjE7bWQ1PWJmZTFmNzVkNjA2OTEyYTQxMTFjOTA3NDNkNmM3MzI1IgorCisjIGNhaXJvID49IDEuOC44CitERVBFTkRTID0gImNhaXJvIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL3B5MmNhaXJvLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMDMzNzEzMmM0YWIwNmMxMTQ2YWQzODRkNTUzNzJjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMzA0MzlmMDZjMmVjMWEzOWUyNzQ2NGM2YzgyOGI2ZWZhY2UzYjIyZWUxN2IyZGUwNWRjNDA5ZTQyOWE3NDMxIgorCitTID0gIiR7V09SS0RJUn0vcHkyY2Fpcm8tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gLi93YWYgY29uZmlndXJlIC0tcHJlZml4PSR7RH0ke3ByZWZpeH0gLS1saWJkaXI9JHtEfSR7bGliZGlyfQorfQorCitkb19jb21waWxlKCkgeworCS4vd2FmIGJ1aWxkICR7UEFSQUxMRUxfTUFLRX0KK30KKworZG9faW5zdGFsbCgpIHsKKwkuL3dhZiBpbnN0YWxsCisJc2VkIFwKKwkJLWUgJ3M6QHByZWZpeEA6JHtwcmVmaXh9OicgXAorCQktZSAnczpAVkVSU0lPTkA6JHtQVn06JyBcCisJCS1lICdzOkBpbmNsdWRlZGlyQDoke2luY2x1ZGVkaXJ9OicgXAorCQlweWNhaXJvLnBjLmluID4gcHljYWlyby5wYworCWluc3RhbGwgLW0gMDY0NCBweWNhaXJvLnBjICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsL25vLXN0YXRpYy1saW5rLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsL25vLXN0YXRpYy1saW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MzQ5ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmwvbm8tc3RhdGljLWxpbmsucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KKworSW5kZXg6IHB5Y3VybC03LjE5LjMuMS9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Y3VybC03LjE5LjMuMS5vcmlnL3NldHVwLnB5CTIwMTQtMDctMTYgMTI6NTc6MjQuMDY1MzQ2ODg3ICswMDAwCisrKysgcHljdXJsLTcuMTkuMy4xL3NldHVwLnB5CTIwMTQtMDctMTYgMTI6NTc6NTMuMDU3MzQ3Njc4ICswMDAwCitAQCAtMTQ3LDcgKzE0Nyw3IEBACisgICAgICAgICBvcHRidWYgPSAnJworICAgICAgICAgc3NsaGludGJ1ZiA9ICcnCisgICAgICAgICBlcnJ0ZXh0ID0gJycKKy0gICAgICAgIGZvciBvcHRpb24gaW4gWyItLWxpYnMiLCAiLS1zdGF0aWMtbGlicyJdOgorKyAgICAgICAgZm9yIG9wdGlvbiBpbiBbIi0tbGlicyJdOgorICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKChDVVJMX0NPTkZJRywgb3B0aW9uKSwKKyAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsXzcuMTkuNS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHljdXJsXzcuMTkuNS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGVmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWN1cmxfNy4xOS41LjEuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGxpYmN1cmwiCitIT01FUEFHRSA9ICJodHRwOi8vcHljdXJsLnNvdXJjZWZvcmdlLm5ldC8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIHwgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FLnJzdDtiZWdpbmxpbmU9MTY2O2VuZGxpbmU9MTgxO21kNT01N2U1YWIwYzBmOTY0NTMzZmM1OWQ5M2RlYzU2OTViYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLUxHUEw7bWQ1PTM1NzlhOWZkMDIyMWQ0OWEyMzdhYWEzMzQ5MmY5ODhjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkctTUlUO21kNT1lODIwMDk1NWM3NzNiMmEwZmQ2Y2VhMzZlYTVlODdiZSIKKworREVQRU5EUyA9ICJjdXJsIHB5dGhvbiIKK1JERVBFTkRTXyR7UE59ID0gInB5dGhvbi1jb3JlIGN1cmwiCitTUkNOQU1FID0gInB5Y3VybCIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly8ke1NSQ05BTUV9LnNvdXJjZWZvcmdlLm5ldC9kb3dubG9hZC8ke1NSQ05BTUV9LSR7UFZ9LnRhci5nejtuYW1lPWFyY2hpdmUgXAorICBmaWxlOi8vbm8tc3RhdGljLWxpbmsucGF0Y2ggXAorIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmNDRjZDU0MjU2ZDdhNjQzYWI3YjE2ZTNmNDA5YjI2YiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjZlOTc3MGY4MDQ1OTc1N2Y3M2JkNzFhZjgyZmJiMjljZDM5OGIzODM4OGNkZjFiZWFiMzFlYTkxYTMzMWJjNmMiCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworIyBuZWVkIHRvIGV4cG9ydCB0aGVzZSB2YXJpYWJsZXMgZm9yIHB5dGhvbi1jb25maWcgdG8gd29yaworZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworIyBFbnN1cmUgdGhlIGRvY3N0cmluZ3MgYXJlIGdlbmVyYXRlZCBhcyBtYWtlIGNsZWFuIHdpbGwgcmVtb3ZlIHRoZW0KK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwkke1NUQUdJTkdfQklORElSX05BVElWRX0vJHtQWVRIT05fUE59LW5hdGl2ZS8ke1BZVEhPTl9QTn0gc2V0dXAucHkgZG9jc3RyaW5ncworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vc2hhcmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3Qvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNTkxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3Qvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExMDFdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIHB5Z29iamVjdC0yLjI3LjkxL2NvbmZpZ3VyZS5hYyBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMKKy0tLSBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMJMjAxMS0wMi0yMyAyMjoxNDozNy4wMDAwMDAwMDAgKzAyMDAKKysrKyBweWdvYmplY3QtMi4yNy45MS9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwNToxMzo0NC4wMzQ5NDk5NTQgKzAyMDAKK0BAIC0zNSw3ICszNSw3IEBACisgQUNfREVGSU5FKFBZR09CSkVDVF9NSUNST19WRVJTSU9OLCBweWdvYmplY3RfbWljcm9fdmVyc2lvbiwgW3B5Z29iamVjdCBtaWNybyB2ZXJzaW9uXSkKKyBBQ19TVUJTVChQWUdPQkpFQ1RfTUlDUk9fVkVSU0lPTiwgcHlnb2JqZWN0X21pY3JvX3ZlcnNpb24pCisKKy1BTV9DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorK0FDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorIG00X2lmZGVmKFtBTV9TSUxFTlRfUlVMRVNdLCBbQU1fU0lMRU5UX1JVTEVTKHllcyldKQorIEFNX0lOSVRfQVVUT01BS0UoZm9yZWlnbikKKyBBTV9NQUlOVEFJTkVSX01PREUKK0BAIC04Miw3ICs4Miw2IEBACisgbTRfaWZkZWYoW0xUX09VVFBVVF0sIFtMVF9PVVRQVVRdKQorIEFDX0lTQ19QT1NJWAorIEFDX1BST0dfQ0MKKy1BTV9QUk9HX0NDX1NUREMKKyBBTV9QUk9HX0NDX0NfTworCisgIyBjaGVjayB0aGF0IHdlIGhhdmUgdGhlIG1pbmltdW0gdmVyc2lvbiBvZiBweXRob24gbmVjaXNhcnkgdG8gYnVpbGQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z29iamVjdF8yLjI4LjMuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3RfMi4yOC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZDM3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWdvYmplY3RfMi4yOC4zLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIEdPYmplY3QgYmluZGluZ3MiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIk5ld2VyIHZlcnNpb25zIG9mIHB5dGhvbi1weWdvYmplY3QgZGVwZW5kIG9uIGdvYmplY3QtaW50cm9zcGVjdGlvbiB3aGljaCBkb2Vzbid0IGNyb3NzLWNvbXBpbGUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE5MTY0NjdiOTEwNzZlNjMxZGQ4ZWRiNzQyNDc2OWM3IgorREVQRU5EUyA9ICJweXRob24gcHl0aG9uLXB5Z29iamVjdC1uYXRpdmUgbGliZmZpIGdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAicHl0aG9uLW5hdGl2ZSBsaWJmZmktbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKK1JERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKK01BSl9WRVIgPSAiJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzBdfS4ke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMV19IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9weWdvYmplY3QvJHtNQUpfVkVSfS9weWdvYmplY3QtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCisjIGxpYnRvb2wtbmF0aXZlIGRvZXNuJ3QgaGF2ZSBmaXhpbnN0YWxsLnBhdGNoIGFwcGxpZWQgd2hpY2ggbWVhbnMKKyMgdGhhdCBsaWJzIGdldCByZWxpbmtlZCBhdCBpbnN0YWxsYXRpb24gdGltZS4gVGhpcyB0cmlnZ2VycyBhIAorIyByZWxpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mOgorIyBnY2MgLUwvdG1wL2Zvby9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWIgLWxweWdsaWItMi4wLXB5dGhvbiAtbyAubGlicy9fZ2xpYi5zbworIyB3aGVyZSAvdG1wL2ZvbyBpcyBERVNURElSIGFuZCBweWdsaWItMi4wLXB5dGhvbiBtYXkgYmUgaW5zdGFsbGVkL3JlaW5zdGFsbGVkCisjIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIGdjYyBjb21tYW5kIHJ1bnMuCisjIElmIHRoaXMgaGFwcGVucyBiZXR3ZWVuIHRoZSBoYW5kb2ZmIGJldHdlZW4gZ2NjIGFuZCBsZCwgeW91IGNhbiBzZWU6CisjIC9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1scHlnbGliLTIuMC1weXRob24KKyMgQWRkaW5nIGEgZGVwZW5kZW5jeSBydWxlIGxpa2UgIGluc3RhbGwtcHlnbGliTFRMSUJSQVJJRVM6IGluc3RhbGwtbGliTFRMSUJSQVJJRVMKKyMgd291bGQgYmUgaWRlYWwgYnV0IGF1dG9tYWtlIGNhbid0IGNvcGUgd2l0aCB0aGF0IHdpdGhvdXQgbWFudWFsbHkgCisjIGRlZmluaW5nIHRoZSB3aG9sZSBmdW5jdGlvbi4gR2l2ZSB1cCBhbmQgZGlzYWJsZSBwYXJhbGxlbCBtYWtlIGluIG5hdGl2ZSBidWlsZHMuCitQQVJBTExFTF9NQUtFSU5TVF9jbGFzcy1uYXRpdmUgPSAiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWE2NDkwMGIyNzRjNDY2MWE1YzMyZTUyOTIyOTc3ZjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RhODhjMTY5YTU2ZWZjY2M1MTZjZWJkOTIzN2RhM2ZlNTE4YTM0MzA5NWE2NjQ2MDdiMzY4ZmUyMWRmOTViNiIKK1MgPSAiJHtXT1JLRElSfS9weWdvYmplY3QtJHtQVn0iCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3R1dGlscy1iYXNlIHBrZ2NvbmZpZworCisjIG5lY2Vzc2FyeSB0byBsZXQgdGhlIGNhbGwgZm9yIHB5dGhvbi1jb25maWcgc3VjY2VlZAorZXhwb3J0IEJVSUxEX1NZUworZXhwb3J0IEhPU1RfU1lTCitleHBvcnQgU1RBR0lOR19JTkNESVIKK2V4cG9ydCBTVEFHSU5HX0xJQkRJUgorCitQQUNLQUdFUyArPSAiJHtQTn0tbGliIgorCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLXRleHR1dGlscyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L3B5dGhvbioiCitGSUxFU18ke1BOfS1saWIgPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9ICR7ZGF0YWRpcn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTE4ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5MCBAQAorIyMgdGhpcyBvbmUgaXMgY29tbW9ubHkgdXNlZCB3aXRoIEFNX1BBVEhfUFlUSE9ORElSIC4uLgorZG5sIEFNX0NIRUNLX1BZTU9EKE1PRE5BTUUgWyxTWU1CT0wgWyxBQ1RJT04tSUYtRk9VTkQgWyxBQ1RJT04tSUYtTk9ULUZPVU5EXV1dKQorZG5sIENoZWNrIGlmIGEgbW9kdWxlIGNvbnRhaW5pbmcgYSBnaXZlbiBzeW1ib2wgaXMgdmlzaWJsZSB0byBweXRob24uCitBQ19ERUZVTihBTV9DSEVDS19QWU1PRCwKK1tBQ19SRVFVSVJFKFtBTV9QQVRIX1BZVEhPTl0pCitweV9tb2RfdmFyPWBlY2hvICQxWydfJ10kMiB8IHNlZCAneSUuLystJV9fcF8lJ2AKK0FDX01TR19DSEVDS0lORyhmb3IgaWZlbHNlKFskMl0sW10sLFskMiBpbiBdKXB5dGhvbiBtb2R1bGUgJDEpCitBQ19DQUNIRV9WQUwocHlfY3ZfbW9kXyRweV9tb2RfdmFyLCBbCitpZmVsc2UoWyQyXSxbXSwgW3Byb2c9IgoraW1wb3J0IHN5cwordHJ5OgorICAgICAgICBpbXBvcnQgJDEKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgc3lzLmV4aXQoMSkKK2V4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMCkKK3N5cy5leGl0KDApIl0sIFtwcm9nPSIKK2ltcG9ydCAkMQorJDEuJDIiXSkKK2lmICRQWVRIT04gLWMgIiRwcm9nIiAxPiZBQ19GRF9DQyAyPiZBQ19GRF9DQworICB0aGVuCisgICAgZXZhbCAicHlfY3ZfbW9kXyRweV9tb2RfdmFyPXllcyIKKyAgZWxzZQorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj1ubyIKKyAgZmkKK10pCitweV92YWw9YGV2YWwgImVjaG8gXGBlY2hvICckcHlfY3ZfbW9kXyckcHlfbW9kX3ZhclxgImAKK2lmIHRlc3QgIngkcHlfdmFsIiAhPSB4bm87IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGlmZWxzZShbJDNdLCBbXSwsIFskMworXSlkbmwKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgaWZlbHNlKFskNF0sIFtdLCwgWyQ0CitdKWRubAorZmkKK10pCisKK2RubCBhIG1hY3JvIHRvIGNoZWNrIGZvciBhYmlsaXR5IHRvIGNyZWF0ZSBweXRob24gZXh0ZW5zaW9ucworZG5sICBBTV9DSEVDS19QWVRIT05fSEVBREVSUyhbQUNUSU9OLUlGLVBPU1NJQkxFXSwgW0FDVElPTi1JRi1OT1QtUE9TU0lCTEVdKQorZG5sIGZ1bmN0aW9uIGFsc28gZGVmaW5lcyBQWVRIT05fSU5DTFVERVMKK0FDX0RFRlVOKFtBTV9DSEVDS19QWVRIT05fSEVBREVSU10sCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorQUNfTVNHX0NIRUNLSU5HKGZvciBoZWFkZXJzIHJlcXVpcmVkIHRvIGNvbXBpbGUgcHl0aG9uIGV4dGVuc2lvbnMpCitkbmwgZGVkdWNlIFBZVEhPTl9JTkNMVURFUworQUNfQVJHX1dJVEgocHl0aG9uLWluY2x1ZGVzLAorCVsgIC0td2l0aC1weXRob24taW5jbHVkZXM9RElSICBwYXRoIHRvIFB5dGhvbiBpbmNsdWRlc10sIHB5X2V4ZWNfcHJlZml4PSR3aXRodmFsKQoraWYgdGVzdCB4JHB5X2V4ZWNfcHJlZml4ICE9IHg7IHRoZW4KK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X2V4ZWNfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgorZWxzZQorcHlfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMucHJlZml4ImAKK3B5X2V4ZWNfcHJlZml4PWAkUFlUSE9OIC1jICJpbXBvcnQgc3lzOyBwcmludCBzeXMuZXhlY19wcmVmaXgiYAorUFlUSE9OX0lOQ0xVREVTPSItSSR7cHlfcHJlZml4fS9pbmNsdWRlL3B5dGhvbiR7UFlUSE9OX1ZFUlNJT059IgoraWYgdGVzdCAiJHB5X3ByZWZpeCIgIT0gIiRweV9leGVjX3ByZWZpeCI7IHRoZW4KKyAgUFlUSE9OX0lOQ0xVREVTPSIkUFlUSE9OX0lOQ0xVREVTIC1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2ZpCitmaQorQUNfU1VCU1QoUFlUSE9OX0lOQ0xVREVTKQorZG5sIGNoZWNrIGlmIHRoZSBoZWFkZXJzIGV4aXN0Ogorc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUFlUSE9OX0lOQ0xVREVTIgorQUNfVFJZX0NQUChbI2luY2x1ZGUgPFB5dGhvbi5oPl0sZG5sCitbQUNfTVNHX1JFU1VMVChmb3VuZCkKKyQxXSxkbmwKK1tBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKyQyXSkKK0NQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKK10pCisKK2RubAorZG5sIEpIX0FERF9DRkxBRyhGTEFHKQorZG5sIGNoZWNrcyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSBnaXZlbiBmbGFnLCBhbmQgaWYgc28sIGFkZHMKK2RubCBpdCB0byAkQ0ZMQUdTLiAgSWYgdGhlIGZsYWcgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZSBsaXN0LCB0aGVuIHRoZQorZG5sIGNoZWNrIGlzIG5vdCBwZXJmb3JtZWQuCitBQ19ERUZVTihbSkhfQUREX0NGTEFHXSwKK1sKK2Nhc2UgIiAkQ0ZMQUdTICIgaW4KKypAPDpAXAlcIEA6PkAkMUA8OkBcCVwgQDo+QCopCisgIDs7CisqKQorICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTICQxIgorICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgWyRdQ0MgdW5kZXJzdGFuZHMgJDFdKQorICBBQ19UUllfQ09NUElMRShbXSwgW10sIFtqaF9oYXNfb3B0aW9uPXllc10sIFtqaF9oYXNfb3B0aW9uPW5vXSkKKyAgQUNfTVNHX1JFU1VMVCgkamhfaGFzX29wdGlvbikKKyAgaWYgdGVzdCAkamhfaGFzX29wdGlvbiA9IG5vOyB0aGVuCisgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgIGZpCisgIDs7Citlc2FjXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2FkZC1ndGstdHlwZXMuZGVmcy1pbnRvLWdkay5jLWRlcGVuZGVuY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMGY5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK2FkZCBndGstdHlwZXMuZGVmcyBpbnRvIGdkay5jIGRlcGVuZGVuY2UKKworZ2RrLmMgZGVwZW5kcyBvbiBndGstdHlwZXMuZGVmcyBidXQKK2dkay9NYWtlZmlsZS5hbSBtaXNzIHRoaXMuIFRoaXMgd2lsbCBjYXVzZQorYnVpbGQgZXJyb3Igc29tZXRpbWVzIHdoZW4gYnVpbHQKK3dpdGggbXVsdGktam9iYmluZywgc28gYWRkIGd0ay10eXBlcy5kZWZzIGludG8KK2dkay5jIGRlcGVuZGVuY2UuCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBndGsvTWFrZWZpbGUuYW0gfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvTWFrZWZpbGUuYW0gYi9ndGsvTWFrZWZpbGUuYW0KK2luZGV4IDdiYjVkMGMuLjRhODgzNTEgMTAwNjQ0CistLS0gYS9ndGsvTWFrZWZpbGUuYW0KKysrKyBiL2d0ay9NYWtlZmlsZS5hbQorQEAgLTIxNCw3ICsyMTQsNyBAQCBndGt1bml4cHJpbnQuZGVmczogJChHVEtVTklYUFJJTlRfREVGUykgTWFrZWZpbGUKKyBndGt1bml4cHJpbnQtdHlwZXMuZGVmczogJChHVEtVTklYUFJJTlRfVFlQRVNfREVGUykgTWFrZWZpbGUKKyAJJChDUkVBVEVERUZTKSAkQCAkKEdUS1VOSVhQUklOVF9UWVBFU19ERUZTKQorIAorLWdkay5jOiBnZGstdHlwZXMuZGVmcyBnZGsuZGVmcyAkKEdES19PVkVSUklERVMpCisrZ2RrLmM6IGdkay10eXBlcy5kZWZzIGd0ay10eXBlcy5kZWZzIGdkay5kZWZzICQoR0RLX09WRVJSSURFUykKKyBndGsuYzogZ2RrLXR5cGVzLmRlZnMgZ3RrLXR5cGVzLmRlZnMgZ3RrLmRlZnMgZ2RrLXR5cGVzLmRlZnMgJChHVEtfT1ZFUlJJREVTKQorIF9ndGtfbGFfQ0ZMQUdTID0gJChQWUNBSVJPX0NGTEFHUykgJChHVEtfQ0ZMQUdTKQorIF9ndGtfbGFfTERGTEFHUyA9ICQoY29tbW9uX2xkZmxhZ3MpIC1leHBvcnQtc3ltYm9scy1yZWdleCBpbml0X2d0aworLS0gCisxLjcuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9maXgtZ3RrdW5peHByaW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LWd0a3VuaXhwcmludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMwZThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LWd0a3VuaXhwcmludC5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHB5Z3RrLTIuMjQuMC9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4yNC4wLm9yaWcvZ3RrL2d0a3VuaXhwcmludC5vdmVycmlkZQorKysrIHB5Z3RrLTIuMjQuMC9ndGsvZ3RrdW5peHByaW50Lm92ZXJyaWRlCitAQCAtMTAyLDExICsxMDIsNiBAQCBfd3JhcF9ndGtfcHJpbnRfam9iX2dldF9zdXJmYWNlKFB5R09iamVjCisgICAgIGlmIChweWdfZXJyb3JfY2hlY2soJmVycm9yKSkKKyAgICAgICAgIHJldHVybiBOVUxMOworIAorLSNpZiBQWUNBSVJPX1ZFUlNJT05fSEVYID49IDB4MTAxMDYwMAorLSAgICByZXR1cm4gUHljYWlyb1N1cmZhY2VfRnJvbVN1cmZhY2UoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2Uoc3VyZmFjZSksIE5VTEwpOworLSNlbHNlCistICAgIHJldHVybiBQeWNhaXJvU3VyZmFjZV9Gcm9tU3VyZmFjZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShzdXJmYWNlKSwgTlVMTCwgTlVMTCk7CistI2VuZGlmCisgfQorICUlCisgb3ZlcnJpZGUgZ3RrX3ByaW50X2pvYl9zZW5kIGt3YXJncwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvZml4LXB5Z3RrLTIuMC5wYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1weWd0ay0yLjAucGMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYxNTY1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL2ZpeC1weWd0ay0yLjAucGMucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogcHlndGstMi4yNC4wL3B5Z3RrLTIuMC5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHB5Z3RrLTIuMjQuMC5vcmlnL3B5Z3RrLTIuMC5wYy5pbgorKysrIHB5Z3RrLTIuMjQuMC9weWd0ay0yLjAucGMuaW4KK0BAIC0xLDUgKzEsNiBAQAorIHByZWZpeD1AcHJlZml4QAorIGV4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKyBpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorIGRhdGFyb290ZGlyPUBkYXRhcm9vdGRpckAKKyBkYXRhZGlyPUBkYXRhZGlyQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvbm9kb2NzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvbm9kb2NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzMwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9ub2RvY3MucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogcHlndGstMi4xNy4wL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHlndGstMi4xNy4wLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBweWd0ay0yLjE3LjAvTWFrZWZpbGUuYW0KK0BAIC00LDcgKzQsNyBAQCBpZiBCVUlMRF9HVEsKKyAgIEdUS19TVUJESVIgPSBndGsKKyBlbmRpZgorIAorLVNVQkRJUlMgPSAuICQoR1RLX1NVQkRJUikgZXhhbXBsZXMgdGVzdHMgZG9jcworK1NVQkRJUlMgPSAuICQoR1RLX1NVQkRJUikgZXhhbXBsZXMgdGVzdHMKKyAKKyBQTEFURk9STV9WRVJTSU9OID0gMi4wCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay9wcmV2ZW50X3RvX2dldF9kaXNwbGF5X2R1cmluZ19pbXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMDM4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3ByZXZlbnRfdG9fZ2V0X2Rpc3BsYXlfZHVyaW5nX2ltcG9ydC5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHB5Z3RrLTIuMTAuNC9ndGsvX19pbml0X18ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBweWd0ay0yLjEwLjQub3JpZy9ndGsvX19pbml0X18ucHkJMjAwNy0xMS0yNyAxOToyNzowNS4wMDAwMDAwMDAgLTAzMDAKKysrKyBweWd0ay0yLjEwLjQvZ3RrL19faW5pdF9fLnB5CTIwMDctMTEtMjcgMTk6Mjg6MjIuMDAwMDAwMDAwIC0wMzAwCitAQCAtNzgsNyArNzgsOCBAQAorIAorIGtleXN5bXMgPSBMYXp5TW9kdWxlKCdrZXlzeW1zJywgbG9jYWxzKCkpCisgCistX2luaXQoKQorK2lmIG5vdCBoYXNhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAncHl0aG9uX2xhdW5jaGVyX2VuYWJsZWQnKToKKysgICAgX2luaXQoKQorIAorICMgQ0FQSQorIF9QeUd0a19BUEkgPSBfZ3RrLl9QeUd0a19BUEkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3B5dGhvbi1weWd0azIvYWNpbmNsdWRlLm00IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvcHl0aG9uLXB5Z3RrMi9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MThmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5Z3RrL3B5dGhvbi1weWd0azIvYWNpbmNsdWRlLm00CkBAIC0wLDAgKzEsOTAgQEAKKyMjIHRoaXMgb25lIGlzIGNvbW1vbmx5IHVzZWQgd2l0aCBBTV9QQVRIX1BZVEhPTkRJUiAuLi4KK2RubCBBTV9DSEVDS19QWU1PRChNT0ROQU1FIFssU1lNQk9MIFssQUNUSU9OLUlGLUZPVU5EIFssQUNUSU9OLUlGLU5PVC1GT1VORF1dXSkKK2RubCBDaGVjayBpZiBhIG1vZHVsZSBjb250YWluaW5nIGEgZ2l2ZW4gc3ltYm9sIGlzIHZpc2libGUgdG8gcHl0aG9uLgorQUNfREVGVU4oQU1fQ0hFQ0tfUFlNT0QsCitbQUNfUkVRVUlSRShbQU1fUEFUSF9QWVRIT05dKQorcHlfbW9kX3Zhcj1gZWNobyAkMVsnXyddJDIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlmZWxzZShbJDJdLFtdLCxbJDIgaW4gXSlweXRob24gbW9kdWxlICQxKQorQUNfQ0FDSEVfVkFMKHB5X2N2X21vZF8kcHlfbW9kX3ZhciwgWworaWZlbHNlKFskMl0sW10sIFtwcm9nPSIKK2ltcG9ydCBzeXMKK3RyeToKKyAgICAgICAgaW1wb3J0ICQxCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHN5cy5leGl0KDEpCitleGNlcHQ6CisgICAgICAgIHN5cy5leGl0KDApCitzeXMuZXhpdCgwKSJdLCBbcHJvZz0iCitpbXBvcnQgJDEKKyQxLiQyIl0pCitpZiAkUFlUSE9OIC1jICIkcHJvZyIgMT4mQUNfRkRfQ0MgMj4mQUNfRkRfQ0MKKyAgdGhlbgorICAgIGV2YWwgInB5X2N2X21vZF8kcHlfbW9kX3Zhcj15ZXMiCisgIGVsc2UKKyAgICBldmFsICJweV9jdl9tb2RfJHB5X21vZF92YXI9bm8iCisgIGZpCitdKQorcHlfdmFsPWBldmFsICJlY2hvIFxgZWNobyAnJHB5X2N2X21vZF8nJHB5X21vZF92YXJcYCJgCitpZiB0ZXN0ICJ4JHB5X3ZhbCIgIT0geG5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorICBpZmVsc2UoWyQzXSwgW10sLCBbJDMKK10pZG5sCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCisgIGlmZWxzZShbJDRdLCBbXSwsIFskNAorXSlkbmwKK2ZpCitdKQorCitkbmwgYSBtYWNybyB0byBjaGVjayBmb3IgYWJpbGl0eSB0byBjcmVhdGUgcHl0aG9uIGV4dGVuc2lvbnMKK2RubCAgQU1fQ0hFQ0tfUFlUSE9OX0hFQURFUlMoW0FDVElPTi1JRi1QT1NTSUJMRV0sIFtBQ1RJT04tSUYtTk9ULVBPU1NJQkxFXSkKK2RubCBmdW5jdGlvbiBhbHNvIGRlZmluZXMgUFlUSE9OX0lOQ0xVREVTCitBQ19ERUZVTihbQU1fQ0hFQ0tfUFlUSE9OX0hFQURFUlNdLAorW0FDX1JFUVVJUkUoW0FNX1BBVEhfUFlUSE9OXSkKK0FDX01TR19DSEVDS0lORyhmb3IgaGVhZGVycyByZXF1aXJlZCB0byBjb21waWxlIHB5dGhvbiBleHRlbnNpb25zKQorZG5sIGRlZHVjZSBQWVRIT05fSU5DTFVERVMKK0FDX0FSR19XSVRIKHB5dGhvbi1pbmNsdWRlcywKKwlbICAtLXdpdGgtcHl0aG9uLWluY2x1ZGVzPURJUiAgcGF0aCB0byBQeXRob24gaW5jbHVkZXNdLCBweV9leGVjX3ByZWZpeD0kd2l0aHZhbCkKK2lmIHRlc3QgeCRweV9leGVjX3ByZWZpeCAhPSB4OyB0aGVuCitQWVRIT05fSU5DTFVERVM9Ii1JJHtweV9leGVjX3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2Vsc2UKK3B5X3ByZWZpeD1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLnByZWZpeCJgCitweV9leGVjX3ByZWZpeD1gJFBZVEhPTiAtYyAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLmV4ZWNfcHJlZml4ImAKK1BZVEhPTl9JTkNMVURFUz0iLUkke3B5X3ByZWZpeH0vaW5jbHVkZS9weXRob24ke1BZVEhPTl9WRVJTSU9OfSIKK2lmIHRlc3QgIiRweV9wcmVmaXgiICE9ICIkcHlfZXhlY19wcmVmaXgiOyB0aGVuCisgIFBZVEhPTl9JTkNMVURFUz0iJFBZVEhPTl9JTkNMVURFUyAtSSR7cHlfZXhlY19wcmVmaXh9L2luY2x1ZGUvcHl0aG9uJHtQWVRIT05fVkVSU0lPTn0iCitmaQorZmkKK0FDX1NVQlNUKFBZVEhPTl9JTkNMVURFUykKK2RubCBjaGVjayBpZiB0aGUgaGVhZGVycyBleGlzdDoKK3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKK0NQUEZMQUdTPSIkQ1BQRkxBR1MgJFBZVEhPTl9JTkNMVURFUyIKK0FDX1RSWV9DUFAoWyNpbmNsdWRlIDxQeXRob24uaD5dLGRubAorW0FDX01TR19SRVNVTFQoZm91bmQpCiskMV0sZG5sCitbQUNfTVNHX1JFU1VMVChub3QgZm91bmQpCiskMl0pCitDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCitdKQorCitkbmwKK2RubCBKSF9BRERfQ0ZMQUcoRkxBRykKK2RubCBjaGVja3Mgd2hldGhlciB0aGUgQyBjb21waWxlciBzdXBwb3J0cyB0aGUgZ2l2ZW4gZmxhZywgYW5kIGlmIHNvLCBhZGRzCitkbmwgaXQgdG8gJENGTEFHUy4gIElmIHRoZSBmbGFnIGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgbGlzdCwgdGhlbiB0aGUKK2RubCBjaGVjayBpcyBub3QgcGVyZm9ybWVkLgorQUNfREVGVU4oW0pIX0FERF9DRkxBR10sCitbCitjYXNlICIgJENGTEFHUyAiIGluCisqQDw6QFwJXCBAOj5AJDFAPDpAXAlcIEA6PkAqKQorICA7OworKikKKyAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAkMSIKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFskXUNDIHVuZGVyc3RhbmRzICQxXSkKKyAgQUNfVFJZX0NPTVBJTEUoW10sIFtdLCBbamhfaGFzX29wdGlvbj15ZXNdLCBbamhfaGFzX29wdGlvbj1ub10pCisgIEFDX01TR19SRVNVTFQoJGpoX2hhc19vcHRpb24pCisgIGlmIHRlc3QgJGpoX2hhc19vcHRpb24gPSBubzsgdGhlbgorICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICBmaQorICA7OworZXNhY10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0ay91cGRhdGUtZGVwZW5kZW5jZXMtb2YtZGVmcy5jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWQ5NTRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGsvdXBkYXRlLWRlcGVuZGVuY2VzLW9mLWRlZnMuYy5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGRjMDI0ZTkwNzliYmZmYmI0NDQzNmJhM2U3MGE3NThlYmFkNTUyMGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiU29uZy5MaSIgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgNSBKYW4gMjAxMyAxNDo1NTo1OSArMDgwMAorU3ViamVjdDogW1BBVENIXSB1cGRhdGUgZGVwZW5kZW5jZXMgb2YgZGVmcy5jIGluIE1ha2VmaWxlLmFtCisKK0luIGd0ay9NYWtlZmlsZS5hbSwgZGVmcy5jIHNob3VsZCBkZXBlbmRlcyBvbiBnZGstdHlwZXMuZGVmcyBhbmQKK2d0ay10eXBlcy5kZWZzLCBvdGhlcndpc2UgaXQgZmFpbHMgb2NjYXNpb25hbGx5IHdoZW4gcGFyYWxsZWwgY29tcGlsZS4KK1RoZSBlcnJvciBtZXNzYWdlOgorIklPRXJyb3I6IFtFcnJubyAyXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAnZ3RrLXR5cGVzLmRlZnMnIgorCitBZGQgdGhlbSB0byBkZXBlbmRlbmNlcyBvZiBkZWZzLmMgdG8gZml4IHRoaXMgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAyNzA2CisKK1NpZ25lZC1vZmYtYnk6IFNvbmcuTGkgPFNvbmcuTGlAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyBndGsvTWFrZWZpbGUuYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ndGsvTWFrZWZpbGUuYW0gYi9ndGsvTWFrZWZpbGUuYW0KK2luZGV4IDdiYjVkMGMuLjkxODI2Y2IgMTAwNjQ0CistLS0gYS9ndGsvTWFrZWZpbGUuYW0KKysrKyBiL2d0ay9NYWtlZmlsZS5hbQorQEAgLTI4OSw3ICsyODksNyBAQCBpZiBIQVZFX0dJT19UWVBFU19ERUZTCisgZXh0cmFfY29kZWdlbl9hcmdzICs9IC0tcmVnaXN0ZXIgJChQWUdPQkpFQ1RfREVGU0RJUikvZ2lvLXR5cGVzLmRlZnMKKyBlbmRpZgorIAorLS5kZWZzLmM6IAorKy5kZWZzLmM6IGdkay10eXBlcy5kZWZzIGd0ay10eXBlcy5kZWZzCisgCSgkKFBZVEhPTikgJChDT0RFR0VORElSKS9jb2RlZ2VuLnB5IFwKKyAJICAgJChQWUdUS19DT0RFR0VOX0RFRklORVMpIFwKKyAJICAgIC1JICQoc3JjZGlyKSBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGtfMi4yNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlndGtfMi4yNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YzMzYTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weWd0a18yLjI0LjAuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJQeXRob24gYmluZGluZ3MgZm9yIHRoZSBHVEsrIFVJIHRvb2xraXQiCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKKyMgbmVlZHMgZ3RrKyAyLjE3LngKK0RFUEVORFMgPSAiZ3RrKyBsaWJnbGFkZSBweXRob24tcHljYWlybyBweXRob24tcHlnb2JqZWN0IgorUkRFUEVORFNfJHtQTn0gPSAicHl0aG9uLXNoZWxsIHB5dGhvbi1weWNhaXJvIHB5dGhvbi1weWdvYmplY3QiCitQUk9WSURFUyA9ICJweXRob24tcHlndGsyIgorU1JDTkFNRSA9ICJweWd0ayIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hOTE2NDY3YjkxMDc2ZTYzMWRkOGVkYjc0MjQ3NjljNyIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9weWd0ay8yLjI0LyR7U1JDTkFNRX0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtZ3RrLXR5cGVzLmRlZnMtaW50by1nZGsuYy1kZXBlbmRlbmNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1ndGt1bml4cHJpbnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcHJldmVudF90b19nZXRfZGlzcGxheV9kdXJpbmdfaW1wb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL25vZG9jcy5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC1weWd0ay0yLjAucGMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS1kZXBlbmRlbmNlcy1vZi1kZWZzLmMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMTA1MWQ1Nzk0ZmQ3Njk2ZDNjMWFmNjQyMmQxN2E0OSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZDFjMWVhMjY1YmQ2M2ZmNjY5ZTkyYTJkM2MyYTg4ZWIyNmJjZDllNTM2M2UwZjgyYzg5NmU2NDlmMjA2OTEyIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2NzIC0td2l0aC1weXRob24taW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0vLi4vIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHV0aWxzLWJhc2UKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vYWNpbmNsdWRlLm00ICR7U30vCisJc2VkIC1pIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGUgZGVmc2RpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0LzIuMC9kZWZzXCI6ZyBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5Z3RraW5jbHVkZWRpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfSU5DRElSfS9weWd0ay0yLjBcIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9ZGF0YWRpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn1cIjpnIFwKKwkJLWUgczonYCRQS0dfQ09ORklHIC0tdmFyaWFibGUgY29kZWdlbmRpciBweWdvYmplY3QtMi4wYCc6XCIke1NUQUdJTkdfREFUQURJUn0vcHlnb2JqZWN0LzIuMC9jb2RlZ2VuXCI6ZyBcCisJCS1lIHM6J2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWZpeHhyZWYgcHlnb2JqZWN0LTIuMGAnOlwiJHtTVEFHSU5HX0RBVEFESVJ9L3B5Z29iamVjdC94c2wvZml4eHJlZi5weVwiOmcgXAorCQkke1N9L2NvbmZpZ3VyZS5hYworfQorCisjIGRpcnR5IGZpeCAjMjogZml4IGJ1aWxkIHN5c3RlbSBwYXRocyBsZWFraW5nIGluCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJzFzfF4jIS4qcHl0aG9ufCMhL3Vzci9iaW4vZW52IHB5dGhvbnwnICR7RH0ke2JpbmRpcn0vcHlndGstZGVtbworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tZGVtbyIKK0ZJTEVTXyR7UE59LWRlbW8gPSAiICR7YmluZGlyfS9weWd0ay1kZW1vICR7bGliZGlyfS9weWd0ayAiCitSREVQRU5EU18ke1BOfS1kZW1vID0gInB5dGhvbi1weWd0ayBweXRob24tc3RyaW5nb2xkIHB5dGhvbi1sYW5nIgorCisjIHRvZG86IHJldmFtcCBwYWNrYWdpbmcsIHBhY2thZ2UgZGVtbyBzZXBlcmF0bHkKK0ZJTEVTXyR7UE59LWRldiArPSAiICR7bGliZGlyfS9weWd0ay8yLjAgJHtiaW5kaXJ9L3B5Z3RrLSogJHtkYXRhZGlyfS9weWd0ay8yLjAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4LW5hdGl2ZV8wLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGVmMWFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tcHlyZXgtbmF0aXZlXzAuOS45LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBweXRob24tcHlyZXhfJHtQVn0uYmIKK2luaGVyaXQgbmF0aXZlIHB5dGhvbm5hdGl2ZQorREVQRU5EUyA9ICJweXRob24tbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiIgorUFIgPSAicjMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleC9weXJleC1maXgtb3B0aW1pemVkLW1vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4YzMyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4L3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5cmV4LTAuOS44LjQvUHlyZXgvRGlzdHV0aWxzL2V4dGVuc2lvbi5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5cmV4LTAuOS44LjQub3JpZy9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CisrKysgUHlyZXgtMC45LjguNC9QeXJleC9EaXN0dXRpbHMvZXh0ZW5zaW9uLnB5CitAQCAtMTUsNyArMTUsNyBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIHdhcm5pbmdzID0gTm9uZQorIAorIGNsYXNzIEV4dGVuc2lvbihfRXh0ZW5zaW9uLkV4dGVuc2lvbik6CistICAgIF9FeHRlbnNpb24uRXh0ZW5zaW9uLl9fZG9jX18gKyBcCisrICAgIF9FeHRlbnNpb24uRXh0ZW5zaW9uLl9fZG9jX18gb3IgIiIgKyBcCisgICAgICIiInB5cmV4X2luY2x1ZGVfZGlycyA6IFtzdHJpbmddCisgICAgICAgICBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgUHlyZXggaGVhZGVyIGZpbGVzICgucHhkKSAoaW4KKyAgICAgICAgIFVuaXggZm9ybSBmb3IgcG9ydGFiaWxpdHkpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXB5cmV4XzAuOS45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZGQyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1weXJleF8wLjkuOS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkxhbmd1YWdlIGZvciB3cml0aW5nIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcyIKK0RFU0NSSVBUSU9OID0gIlB5cmV4IGlzIGEgbGFuZ3VhZ2Ugc3BlY2lhbGx5IGRlc2lnbmVkIGZvciB3cml0aW5nIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcy4gXAorSXQncyBkZXNpZ25lZCB0byBicmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBuaWNlLCBoaWdoLWxldmVsLCBlYXN5LXRvLXVzZSB3b3JsZCBvZiBQeXRob24gXAorYW5kIHRoZSBtZXNzeSwgbG93LWxldmVsIHdvcmxkIG9mIEMuIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NzcxZDQ3MmY1M2Y5MzMwMzNmNTdlZWVlNzgwOGU1YmQiCitTUkNOQU1FID0gIlB5cmV4IgorUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiXAorICBodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9ncmVnLmV3aW5nL3B5dGhvbi8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyAgZmlsZTovL3B5cmV4LWZpeC1vcHRpbWl6ZWQtbW9kZS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MTVkZWU2N2QxNWQ0MzkzODQxZTJkNjBlODM0MTk0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Zjg3ZGYwNjgzMWQwYjM0MTJlYjRiYzlkM2ZjMmVlN2JmYWUxYjkxM2Q3ZGE4YzIzYWIyYmY1Njk5ZmI2YjUwIgorUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL1B5cmV4L0NvbXBpbGVyL0xleGljb24ucGlja2xlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnMtbmF0aXZlXzIuMy42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnMtbmF0aXZlXzIuMy42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTg5YWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zY29ucy1uYXRpdmVfMi4zLjYuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHB5dGhvbi1zY29uc18ke1BWfS5iYgoraW5oZXJpdCBuYXRpdmUgcHl0aG9ubmF0aXZlCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vc2NvbnMgU0NPTlNfTElCX0RJUj0nJHtTVEFHSU5HX0RJUl9IT1NUfS8ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfScKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuMy42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2NvbnNfMi4zLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRhZDdkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNjb25zXzIuMy42LmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiU29mdHdhcmUgQ29uc3RydWN0aW9uIHRvb2wgKG1ha2UvYXV0b3Rvb2xzIHJlcGxhY2VtZW50KSIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MjNiYzE1MzBjNTVlOWYwZDFiNzA5MDU2YmNlYTIzN2QiCitTUkNOQU1FID0gInNjb25zIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9zY29ucy9zY29ucy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YzZhMWMzYzcxNmNiZTVmMTY1MTVmMTYzYzkxZDkyOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5OGFkYWEzNTFkOGY0ZTQwNjhhNWJmMTg5NGJkZDdmODViMzkwYzhjM2Y4MGQ0MzdjZjhiYjI2NjAxMjQwNGRmIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTguMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNldHVwdG9vbHNfMTguMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGUyYjJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc2V0dXB0b29sc18xOC4yLmJiCkBAIC0wLDAgKzEsNDYgQEAKK1NVTU1BUlkgPSAiRG93bmxvYWRzLCBidWlsZHMsIGluc3RhbGxzLCB1cGdyYWRlcywgYW5kIHVuaW5zdGFsbHMgUHl0aG9uIHBhY2thZ2VzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9zZXR1cHRvb2xzIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCitMSUNFTlNFID0gIlB5dGhvbi0yLjAgfCBaUEwtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc2V0dXAucHk7YmVnaW5saW5lPTc4O2VuZGxpbmU9Nzg7bWQ1PThhMzE0MjcwZGQ3YThkYmNhNzQxNzc1NDE1ZjE3MTZlIgorCitTUkNOQU1FID0gInNldHVwdG9vbHMiCisKK1BST1ZJREVTID0gInB5dGhvbi1kaXN0cmlidXRlIgorCitERVBFTkRTICs9ICJweXRob24iCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKKworaW5oZXJpdCBkaXN0dXRpbHMKKworU1JDX1VSSSA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy9zZXR1cHRvb2xzL3NldHVwdG9vbHMtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjUyYjRlNDg5MzllZjMxMWQ3MjA0ZjhmZTk0MDc2NGY0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA5OTRhNThkZjI3ZWE1ZGM1MjM3ODJhNjAxMzU3YTIxOThiNzQ5M2RjYzk5YTMwZDUxODI3YTIzNTg1YjViMWQiCisKK1MgPSAiJHtXT1JLRElSfS8ke1NSQ05BTUV9LSR7UFZ9IgorCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbi1zdHJpbmdvbGQgXAorICBweXRob24tZW1haWwgXAorICBweXRob24tc2hlbGwgXAorICBweXRob24tZGlzdHV0aWxzIFwKKyAgcHl0aG9uLWNvbXByZXNzaW9uIFwKKyIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIlwKKyAgcHl0aG9uLWRpc3R1dGlscyBcCisgIHB5dGhvbi1jb21wcmVzc2lvbiBcCisiCisKK1JSRVBMQUNFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JQUk9WSURFU18ke1BOfSA9ICJweXRob24tZGlzdHJpYnV0ZSIKK1JDT05GTElDVFNfJHtQTn0gPSAicHl0aG9uLWRpc3RyaWJ1dGUiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI3ZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hZGQtZm9yLXJwbS1pZ25vcmVzaXplLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK3B5dGhvbi1zbWFydHBtOiBBZGQgY2hlY2tpbmcgZm9yICJycG0taWdub3Jlc2l6ZSIgb3B0aW9uCisKK1RoZSBkb19yb290ZnMgdGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSB3aGVuIGJ1aWxkIGhvc3QgaGFzIG1vdW50ZWQgbWFueSBORlMKK2RldmljZXMuIHN5c2NhbGwgbHN0YXQoKSB3YXMgYmVpbmcgY2FsbGVkIG9uIGV2ZXJ5IGZpbGVzeXN0ZW0gbW91bnRlZCBvbiB0aGUKK2J1aWxkIGhvc3QgZHVyaW5nIGJ1aWxkaW5nLgorVGhlIHJlYXNvbiBmb3IgdGhlIGxzdGF0KCkgaXMgdGhhdCBycG0gaXMgdmVyaWZ5aW5nIHRoYXQgZW5vdWdoIGZyZWUgZGlzayBzcGFjZQoraXMgYXZhaWxhYmxlIHRvIGRvIHRoZSBpbnN0YWxsLiBIb3dldmVyLCBzaW5jZSB0aGUgaW5zdGFsbCBpcyBpbnRvIHRoZSB0YXJnZXQKK3Jvb3RmcyBpdCBzaG91bGQgbm90IG1hdHRlciBob3cgbXVjaCBmcmVlIHNwYWNlIHRoZXJlIGlzIGluIHRoZSBob3N0IG1vdW50cy4KK0FkZCBjaGVja2luZyBmb3IgInJwbS1pZ25vcmVzaXplIiwgYnkgaXQsIHNtYXJ0IGNhbiBtYWtlIHdoZXRoZXIgUlBNIHNraXAKK2NoZWNraW5nIGZvciBkaXNrc3BhY2Ugd2hlbiBpbnN0YWxsIGEgcnBtIHBhY2thZ2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiB3ZW5saW4ua2FuZyA8d2VubGluLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitpbmRleCA1ZGE5ZWU2Li5mMDQ4OGVjIDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK0BAIC0yNDEsNiArMjQxLDEwIEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9JR05PUkVBUkNICisgCisrICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWlnbm9yZXNpemUiLCBGYWxzZSk6CisrICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfRElTS05PREVTCisrICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfRElTS1NQQUNFCisrCisgICAgICAgICBpZiBmb3JjZSBvciByZWluc3RhbGw6CisgICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfUkVQTEFDRVBLRworICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VPTERGSUxFUworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1NTU1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYWxyZWFkeS1pbnN0YWxsZWQtbWVzc2FnZS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIGE3NGE5YTllYjlkNzU5NjRhMGU5Nzg5NTBlOGIxOTFkN2ExOGQ3NjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IEZyaSwgNSBKdW4gMjAxNSAxNzowNzoxNiArMDEwMAorU3ViamVjdDogW1BBVENIXSBzbWFydDogY2hhbmdlICJpcyBhbHJlYWR5IGluc3RhbGxlZCIgbWVzc2FnZSBmcm9tIHdhcm5pbmcgdG8KKyBpbmZvCisKK1RoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGEgd2FybmluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weSAgICAgICAgICAgIHwgNCArKy0tCisgc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5IHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc21hcnQvY29tbWFuZHMvaW5zdGFsbC5weSBiL3NtYXJ0L2NvbW1hbmRzL2luc3RhbGwucHkKK2luZGV4IDZlZjk2ODIuLjgwZDQ1NmIgMTAwNjQ0CistLS0gYS9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5CisrKysgYi9zbWFydC9jb21tYW5kcy9pbnN0YWxsLnB5CitAQCAtMTUyLDcgKzE1Miw3IEBAIGRlZiBtYWluKGN0cmwsIG9wdHMpOgorICAgICAgICAgICAgIGZvciBvYmogaW4gcmVzdWx0czoKKyAgICAgICAgICAgICAgICAgZm9yIHBrZyBpbiBvYmoucGFja2FnZXM6CisgICAgICAgICAgICAgICAgICAgICBpZiBwa2cuaW5zdGFsbGVkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiJXMgKGZvciAlcykgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgKGZvciAlcykgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBhcmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbGxlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworQEAgLTE4NCw3ICsxODQsNyBAQCBkZWYgbWFpbihjdHJsLCBvcHRzKToKKyAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgIHBrZyA9IG5hbWVzW25hbWVdWzBdCisgICAgICAgICAgICAgaWYgcGtnLmluc3RhbGxlZDoKKy0gICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCIlcyBpcyBhbHJlYWR5IGluc3RhbGxlZCIpICUgcGtnKQorKyAgICAgICAgICAgICAgICBpZmFjZS5pbmZvKF8oIiVzIGlzIGFscmVhZHkgaW5zdGFsbGVkIikgJSBwa2cpCisgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgdHJhbnMuZW5xdWV1ZShwa2csIElOU1RBTEwpCisgCitkaWZmIC0tZ2l0IGEvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5IGIvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5CitpbmRleCA5ODY1NTg0Li4xOTA4NjdiIDEwMDY0NAorLS0tIGEvc21hcnQvaW50ZXJmYWNlcy90ZXh0L2ludGVyYWN0aXZlLnB5CisrKysgYi9zbWFydC9pbnRlcmZhY2VzL3RleHQvaW50ZXJhY3RpdmUucHkKK0BAIC0yNzgsNyArMjc4LDcgQEAgY2xhc3MgSW50ZXJwcmV0ZXIoQ21kKToKKyAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgcGtnID0gbmFtZXNbbmFtZV1bMF0KKyAgICAgICAgICAgICAgICAgaWYgcGtnLmluc3RhbGxlZDoKKy0gICAgICAgICAgICAgICAgICAgIGlmYWNlLndhcm5pbmcoXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKysgICAgICAgICAgICAgICAgICAgIGlmYWNlLmluZm8oXygiJXMgaXMgYWxyZWFkeSBpbnN0YWxsZWQiKSAlIHBrZykKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24uZW5xdWV1ZShwa2csIElOU1RBTEwpCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNjcyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQtZml4LnBhdGNoCkBAIC0wLDAgKzEsMTU4IEBACitTYWRseSwgc21hcnQgaXMgbm90IGRldGVybWluaXN0aWMgc28gdGhlIHNhbWUgYnVpbGQgY2FuIGdvIGRvd24gbXVsdGlwbGUgZGlmZmVyZW50CitwYXRod2F5cy4gV2UnZCBleHBlY3QgdG8gc2VlIHRoZSBzYW1lIHdhcm5pbmdzIGhvd2V2ZXIgZGVwZW5kaW5nIG9uIHRoZSBwYXRod2F5Cit0YWtlbiwgaXQgbWF5IG9yIG1heSBub3Qgd2FybiwgcGFydGljdWxhcmx5IHdpdGggUmVjb21tZW5kcyBzaW5jZSB0aGV5J3JlIG9wdGlvbmFsLgorCitGb3IgZXhhbXBsZSwgd2hlcmUgYSBSZWNvbW1lbmRlZCBwYWNrYWdlIGlzIGF2YWlsYWJsZSBidXQgaGFzIENvbmZsaWN0cywgd2UnZCBleHBlY3QKK3RvIHNlZSBhbiB3YXJuaW5nIHRoYXQgd2UgY291bGRuJ3QgaW5zdGFsbCBpdC4gU29tZSBjb2RlIHBhdGhzIHNpbGVudGx5IGhpZGUgdGhpcworKGl0cyBhIExPQ0tFRF9DT05GTElDVCkuIFdlIGFkZCBwcmludGluZyBvZiB3YXJuaW5ncyBmb3IgdGhpcyBjYXNlLgorCitBbHNvLCBpZiB0aGVyZSBhcmUgdHdvIGNvbXBhdGlibGUgZmVlZHMgYXZhaWxhYmxlIChlLmcuIGk1ODYgYW5kIGNvcmUyXzMyKSwgdGhpcyAKK2NoYW5nZXMgdGhlIGNvZGUgcGF0aCBmcm9tIGRpcmVjdCBfaW5zdGFsbCgpIHRvIF9wZW5kaW5nKCkgc2luY2UgdGhlcmUgYXJlIG11bHRpcGxlCitwcm92aWRlcnMuIFRoaXMgcGF0Y2ggYWRkcyB3YXJuaW5nIGhhbmRsaW5nIHRvIF9wZW5kaW5nKCkgc28gd2UgZG9uJ3QgaGl0IGhhcmQgCitmYWlsdXJlcyB0aGVyZS4gVGhpcyBpcyBhcyBzZWVuIHdpdGggdGhlIG15c3RlcmlvdXMgbGlic3BlZXhkc3AgZmFpbHVyZXMgZm9yIHg4Ni1sc2IKK29uIHRoZSBhdXRvYnVpbGRlci4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitSUAorMjAxNS83LzE2CisKK0luZGV4OiBnaXQvc21hcnQvdHJhbnNhY3Rpb24ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zbWFydC90cmFuc2FjdGlvbi5weQorKysrIGdpdC9zbWFydC90cmFuc2FjdGlvbi5weQorQEAgLTY1MSwxMyArNjUxLDE0IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgCisgICAgICAgICAgICAgaWYgbm90IHBydnBrZ3M6CisgICAgICAgICAgICAgICAgICMgTm8gcGFja2FnZXMgcHJvdmlkZSBpdCBhdCBhbGwuIEdpdmUgdXAuCisrCisrICAgICAgICAgICAgICAgIHJlYXNvbnMgPSBbXQorKyAgICAgICAgICAgICAgICBmb3IgcHJ2IGluIHJlcS5wcm92aWRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgZm9yIHBydnBrZyBpbiBwcnYucGFja2FnZXM6CisrICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkcmVzID0gbG9ja2VkcGtncy5nZXQocHJ2cGtnLCBOb25lKQorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxvY2tlZHJlczoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29ucy5hcHBlbmQobG9ja19yZWFzb24ocHJ2cGtnLCBsb2NrZWRyZXMpKQorICAgICAgICAgICAgICAgICBpZiByZXFyZXF1aXJlZDoKKy0gICAgICAgICAgICAgICAgICAgIHJlYXNvbnMgPSBbXQorLSAgICAgICAgICAgICAgICAgICAgZm9yIHBydiBpbiByZXEucHJvdmlkZWRieToKKy0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJ2cGtnIGluIHBydi5wYWNrYWdlczoKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkcmVzID0gbG9ja2VkcGtncy5nZXQocHJ2cGtnLCBOb25lKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsb2NrZWRyZXM6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb25zLmFwcGVuZChsb2NrX3JlYXNvbihwcnZwa2csIGxvY2tlZHJlcykpCisgICAgICAgICAgICAgICAgICAgICBpZiByZWFzb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogdW5hYmxlIHRvIGluc3RhbGwgcHJvdmlkZXIgZm9yICVzOlxuICAgICVzIikgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXEsICdcbiAgICAnLmpvaW4ocmVhc29ucykpCitAQCAtNjY1LDcgKzY2NiwxMSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSBwcm92aWRlcyAlcyIpICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxKQorICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgaWYgcmVhc29uczoKKysgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6IHVuYWJsZSB0byBpbnN0YWxsIHByb3ZpZGVyIGZvciAlczpcbiAgICAlcyIpICUgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxLCAnXG4gICAgJy5qb2luKHJlYXNvbnMpKSkKKysKKyAgICAgICAgICAgICAgICAgICAgICMgSXQncyBvbmx5IGEgcmVjb21tZW5kLCBza2lwCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorIAorICAgICAgICAgICAgIGlmIGxlbihwcnZwa2dzKSA9PSAxOgorQEAgLTg0Niw2ICs4NTIsMTQgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgIGlzaW5zdCA9IGNoYW5nZXNldC5pbnN0YWxsZWQKKyAgICAgICAgIGdldHdlaWdodCA9IHNlbGYuX3BvbGljeS5nZXRXZWlnaHQKKyAKKysgICAgICAgIGF0dGVtcHQgPSBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKQorKworKyAgICAgICAgZGVmIGhhbmRsZV9mYWlsdXJlKG1zZyk6CisrICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhtc2cpCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBtc2cKKysKKyAgICAgICAgIHVwZG93biA9IFtdCisgICAgICAgICB3aGlsZSBwZW5kaW5nOgorICAgICAgICAgICAgIGl0ZW0gPSBwZW5kaW5nLnBvcCgwKQorQEAgLTg3MCw4ICs4ODQsOSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorIAorICAgICAgICAgICAgICAgICBpZiBub3QgcHJ2cGtnczoKKyAgICAgICAgICAgICAgICAgICAgICMgTm8gcGFja2FnZXMgcHJvdmlkZSBpdCBhdCBhbGwuIEdpdmUgdXAuCistICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IG5vIHBhY2thZ2UgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlcyAlcyIpICUgKHBrZywgcmVxKQorKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2ZhaWx1cmUoXygiQ2FuJ3QgaW5zdGFsbCAlczogbm8gcGFja2FnZSAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3ZpZGVzICVzIikgJSAocGtnLCByZXEpKQorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgaWYgbGVuKHBydnBrZ3MpID4gMToKKyAgICAgICAgICAgICAgICAgICAgICMgTW9yZSB0aGFuIG9uZSBwYWNrYWdlIHByb3ZpZGUgaXQuIFdlIHVzZSBfcGVuZGluZyBoZXJlLAorQEAgLTg5NCw5ICs5MDksMTAgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcG9yZGVyLCBjcywgbGspKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZWVwb3JkZXIgKz0gMC4wMDAwMDEKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBhbHRlcm5hdGl2ZXM6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IGluc3RhbGwgJXM6IGFsbCBwYWNrYWdlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRpbmcgJXMgZmFpbGVkIHRvIGluc3RhbGw6XG4lcyIpXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCByZXEsICAiXG4iLmpvaW4oZmFpbHVyZXMpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCByZXEsICAiXG4iLmpvaW4oZmFpbHVyZXMpKSkKKysgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnNvcnQoKQorICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldFN0YXRlKGFsdGVybmF0aXZlc1swXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihhbHRlcm5hdGl2ZXMpID09IDE6CitAQCAtOTU0LDE4ICs5NzAsMjAgQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbG9ja2VkIGFuZCBpc2luc3QocmVxcGtnKToKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIkNhbid0IHJlbW92ZSAlczogcmVxdWlyaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYWNrYWdlICVzIGlzIGxvY2tlZCIpICUgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwa2csIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgZm9yIHJlcXBrZyBpbiByZXFwa2dzOgorICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgY2hlY2sgYWdhaW4sIHNpbmNlIG90aGVyIGFjdGlvbnMgbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZWQgdGhlaXIgc3RhdGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChyZXFwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXBrZyBpbiBsb2NrZWQ6CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgcmVtb3ZlICVzOiByZXF1aXJpbmcgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCByZW1vdmUgJXM6IHJlcXVpcmluZyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAlcyBpcyBsb2NrZWQiKSAlIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnLCByZXFwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBrZywgcmVxcGtnKSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUocmVxcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZywgZGVwdGgpCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorQEAgLTk3OCwxMiArOTk2LDE0IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXFwa2cgaW4gbG9ja2VkIGFuZCBpc2luc3QocmVxcGtnKToKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCIlcyBpcyBsb2NrZWQiKSAlIHJlcXBrZworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCIlcyBpcyBsb2NrZWQiKSAlIHJlcXBrZykKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIGZvciByZXFwa2cgaW4gcmVxcGtnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgY3MuaW5zdGFsbGVkKHJlcXBrZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxcGtnIGluIGxrOgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9mYWlsdXJlKF8oIiVzIGlzIGxvY2tlZCIpICUgcmVxcGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShyZXFwa2csIGNzLCBsaywgTm9uZSwgZGVwdGgpCisgICAgICAgICAgICAgICAgIGV4Y2VwdCBGYWlsZWQsIGU6CisgICAgICAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBlbmQodW5pY29kZShlKSkKK0BAIC05OTEsOSArMTAxMSwxMCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLmFwcGVuZCgoZ2V0d2VpZ2h0KGNzKSwgY3MsIGxrKSkKKyAKKyAgICAgICAgICAgICAgICAgaWYgbm90IGFsdGVybmF0aXZlczoKKy0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogYWxsIHBhY2thZ2VzIHByb3ZpZGluZyAiCisrICAgICAgICAgICAgICAgICAgICBoYW5kbGVfZmFpbHVyZShfKCJDYW4ndCBpbnN0YWxsICVzOiBhbGwgcGFja2FnZXMgcHJvdmlkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZmFpbGVkIHRvIGluc3RhbGw6XG4lcyIpIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBwcnYsICAiXG4iLmpvaW4oZmFpbHVyZXMpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIHBydiwgICJcbiIuam9pbihmYWlsdXJlcykpKQorKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAKKyAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnNvcnQoKQorICAgICAgICAgICAgICAgICBjaGFuZ2VzZXQuc2V0U3RhdGUoYWx0ZXJuYXRpdmVzWzBdWzFdKQorQEAgLTEyNDYsNiArMTI2Nyw3IEBAIGNsYXNzIFRyYW5zYWN0aW9uKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNldC5zZXRSZXF1ZXN0ZWQocGtnLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEZhaWxlZCwgZToKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzeXNjb25mLmhhcygiYXR0ZW1wdC1pbnN0YWxsIiwgc29mdD1UcnVlKToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2Uud2FybmluZyhfKCJDYW4ndCBpbnN0YWxsICVzOiAlcyIpICUgKHBrZywgc3RyKGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGtnIGluIGNoYW5nZXNldDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1hdHRlbXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOThlMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWF0dGVtcHQucGF0Y2gKQEAgLTAsMCArMSwxNzcgQEAKK0Zyb20gYjEwNWU3ZmU4MTJkYTNjY2FmNzE1NWMwZmUxNGM4NzI4YjBkMzlhNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMjAgSmFuIDIwMTQgMTQ6MzA6NTIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIG1lY2hhbmlzbSB0byBhdHRlbXB0IGluc3RhbGwgd2l0aG91dCBmYWlsaW5nCisKK0luIE9wZW5FbWJlZGRlZCwgZm9yIGNvbXBsZW1lbnRhcnkgYW5kICdhdHRlbXB0b25seScgcGFja2FnZSBwcm9jZXNzaW5nLAord2UgbmVlZCBhIHdheSB0byBpbnN0cnVjdCBzbWFydCB0byB0cnkgdG8gaW5zdGFsbCwgYnV0IGlnbm9yZSBhbnkKK2ZhaWx1cmVzICh1c3VhbGx5IGNvbmZsaWN0cykuCisKK1RoaXMgb3B0aW9uIG9ubHkgd29ya3MgZm9yIHRoZSBpbnN0YWxsIG9wZXJhdGlvbi4KKworSWYgYSBjb21wbGVtZW50YXJ5IGluc3RhbGwgZmFpbHMsIGFuIGFjdHVhbCBlcnJvciBvY2N1cnJlZCwgb25lIHRoYXQKK3dlIGNhbid0IGlnbm9yZSB3aXRob3V0IGxvc2luZyB0aGUgZW50aXJlIGF0dGVtcHRlZCB0cmFuc2FjdGlvbi4gIEtlZXAKK3RoaXMgYXMgYW4gZXJyb3Igc28gdGhhdCB3ZSBjYW4gY2F0Y2ggdGhlc2UgY2FzZXMgaW4gdGhlIGZ1dHJlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBiYWNrZW5kcy9ycG0vcG0ucHkgfCAgIDM1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgdHJhbnNhY3Rpb24ucHkgICAgIHwgICA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNzEgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkgYi9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKK2luZGV4IDliYmQ5NTIuLmJhNjQwNWEgMTAwNjQ0CistLS0gYS9zbWFydC9iYWNrZW5kcy9ycG0vcG0ucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorQEAgLTI0MSwxNSArMjQxLDQ4IEBAIGNsYXNzIFJQTVBhY2thZ2VNYW5hZ2VyKFBhY2thZ2VNYW5hZ2VyKToKKyAgICAgICAgIGNiID0gUlBNQ2FsbGJhY2socHJvZywgdXBncmFkZWRuYW1lcykKKyAgICAgICAgIGNiLmdyYWJPdXRwdXQoVHJ1ZSkKKyAgICAgICAgIHByb2JzID0gTm9uZQorKyAgICAgICAgcmV0cnkgPSAwCisgICAgICAgICB0cnk6CisgICAgICAgICAgICAgcHJvYnMgPSB0cy5ydW4oY2IsIE5vbmUpCisgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIGRlbCBnZXRUUy50cworICAgICAgICAgICAgIGNiLmdyYWJPdXRwdXQoRmFsc2UpCisrICAgICAgICAgICAgaWYgcHJvYnMgYW5kIHN5c2NvbmYuaGFzKCJhdHRlbXB0LWluc3RhbGwiLCBzb2Z0PVRydWUpOgorKyAgICAgICAgICAgICAgICBkZWYgcmVtb3ZlX2NvbmZsaWN0KHBrZ05FVlIpOgorKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBjaGFuZ2VzZXQua2V5cygpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBrZ05FVlIgPT0gc3RyKGtleSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRba2V5XQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWwgcGtncGF0aHNba2V5XQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKCJSZW1vdmluZyAlcyBkdWUgdG8gZmlsZSAlcyBjb25mbGljdGluZyB3aXRoICVzIiAlIChwa2dORVZSLCBmbmFtZSwgYWx0TkVWUikpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrCisrICAgICAgICAgICAgICAgIHJldHJ5ID0gMQorKyAgICAgICAgICAgICAgICBmb3IgcHJvYiBpbiBwcm9iczoKKysgICAgICAgICAgICAgICAgICAgIGlmIHByb2JbMV1bMF0gPT0gcnBtLlJQTVBST0JfTkVXX0ZJTEVfQ09ORkxJQ1Q6CisrICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gcHJvYlswXS5zcGxpdCgpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBtc2dbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gbXNnWzddCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IG1zZ1s5XQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBrZ05FVlIgPSBwa2dORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5FVlIgPSBhbHRORVZSLnJzcGxpdCgnLicsIDEpWzBdICsgJ0AnICsgYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVsxXQorKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV9jb25mbGljdChwa2dORVZSKQorKyAgICAgICAgICAgICAgICAgICAgZWxpZiBwcm9iWzFdWzBdID09IHJwbS5SUE1QUk9CX0ZJTEVfQ09ORkxJQ1Q6CisrICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gcHJvYlswXS5zcGxpdCgpCisrICAgICAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBtc2dbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gbXNnWzVdCisrICAgICAgICAgICAgICAgICAgICAgICAgYWx0TkVWUiA9IG1zZ1sxMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBwa2dORVZSID0gcGtnTkVWUi5yc3BsaXQoJy4nLCAxKVswXSArICdAJyArIHBrZ05FVlIucnNwbGl0KCcuJywgMSlbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICBhbHRORVZSID0gYWx0TkVWUi5yc3BsaXQoJy4nLCAxKVswXSArICdAJyArIGFsdE5FVlIucnNwbGl0KCcuJywgMSlbMV0KKysgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfY29uZmxpY3QocGtnTkVWUikKKysgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnkgPSAwCisrCisgICAgICAgICAgICAgcHJvZy5zZXREb25lKCkKKy0gICAgICAgICAgICBpZiBwcm9iczoKKysgICAgICAgICAgICBpZiBwcm9icyBhbmQgKG5vdCByZXRyeSk6CisgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCAiXG4iLmpvaW4oW3hbMF0gZm9yIHggaW4gcHJvYnNdKQorICAgICAgICAgICAgIHByb2cuc3RvcCgpCisrICAgICAgICAgICAgaWYgcmV0cnkgYW5kIGxlbihjaGFuZ2VzZXQpOgorKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChjaGFuZ2VzZXQsIHBrZ3BhdGhzKQorIAorIGNsYXNzIFJQTUNhbGxiYWNrOgorICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZywgdXBncmFkZWRuYW1lcyk6CitkaWZmIC0tZ2l0IGEvc21hcnQvdHJhbnNhY3Rpb24ucHkgYi9zbWFydC90cmFuc2FjdGlvbi5weQoraW5kZXggNGI5MGNiNy4uM2UwNDNlOSAxMDA2NDQKKy0tLSBhL3NtYXJ0L3RyYW5zYWN0aW9uLnB5CisrKysgYi9zbWFydC90cmFuc2FjdGlvbi5weQorQEAgLTU1NSw2ICs1NTUsOCBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgY2hhbmdlc2V0LnNldChwa2csIElOU1RBTEwpCisgICAgICAgICBpc2luc3QgPSBjaGFuZ2VzZXQuaW5zdGFsbGVkCisgCisrICAgICAgICBhdHRlbXB0ID0gc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSkKKysKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIGNvbmZsaWN0ZWQgYnkgdGhpcyBvbmUuCisgICAgICAgICBmb3IgY25mIGluIHBrZy5jb25mbGljdHM6CisgICAgICAgICAgICAgZm9yIHBydiBpbiBjbmYucHJvdmlkZWRieToKK0BAIC01NjQsMTEgKzU2NiwxNiBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdChwcnZwa2cpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZFtwcnZwa2ddID0gKExPQ0tFRF9DT05GTElDVF9CWSwgcGtnKQorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCistICAgICAgICAgICAgICAgICAgICBpZiBwcnZwa2cgaW4gbG9ja2VkOgorLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogY29uZmxpY3RlZCBwYWNrYWdlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGxvY2tlZCIpICUgKHBrZywgcHJ2cGtnKQorLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKHBydnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorLSAgICAgICAgICAgICAgICAgICAgcGVuZGluZy5hcHBlbmQoKFBFTkRJTkdfVVBET1dOLCBwcnZwa2cpKQorKyAgICAgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY2hhbmdlc2V0W3BrZ10KKysgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0IGNvbmZsaWN0cyB3aXRoIHBhY2thZ2UgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiKSAlIChwa2csIHBydnBrZykKKysgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJ2cGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBjb25mbGljdGVkIHBhY2thZ2UgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGlzIGxvY2tlZCIpICUgKHBrZywgcHJ2cGtnKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZShwcnZwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKysgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIHBydnBrZykpCisgCisgICAgICAgICAjIFJlbW92ZSBwYWNrYWdlcyBjb25mbGljdGluZyB3aXRoIHRoaXMgb25lLgorICAgICAgICAgZm9yIHBydiBpbiBwa2cucHJvdmlkZXM6CitAQCAtNTc5LDEyICs1ODYsMTggQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QoY25mcGtnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbY25mcGtnXSA9IChMT0NLRURfQ09ORkxJQ1QsIHBrZykKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLSAgICAgICAgICAgICAgICAgICAgaWYgY25mcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgIGlmIGF0dGVtcHQ6CisrICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGNoYW5nZXNldFtwa2ddCisgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGNvbmZsaWN0ZWQgYnkgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGxvY2tlZCBwYWNrYWdlICVzIikgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBjbmZwa2cpCistICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmUoY25mcGtnLCBjaGFuZ2VzZXQsIGxvY2tlZCwgcGVuZGluZywgZGVwdGgpCistICAgICAgICAgICAgICAgICAgICBwZW5kaW5nLmFwcGVuZCgoUEVORElOR19VUERPV04sIGNuZnBrZykpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgcGFja2FnZSAlcyIpIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwa2csIGNuZnBrZykKKysgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgaWYgY25mcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCdzIGNvbmZsaWN0ZWQgYnkgIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBsb2NrZWQgcGFja2FnZSAlcyIpIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGtnLCBjbmZwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKGNuZnBrZywgY2hhbmdlc2V0LCBsb2NrZWQsIHBlbmRpbmcsIGRlcHRoKQorKyAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmcuYXBwZW5kKChQRU5ESU5HX1VQRE9XTiwgY25mcGtnKSkKKyAKKyAgICAgICAgICMgUmVtb3ZlIHBhY2thZ2VzIHdpdGggdGhlIHNhbWUgbmFtZSB0aGF0IGNhbid0CisgICAgICAgICAjIGNvZXhpc3Qgd2l0aCB0aGlzIG9uZS4KK0BAIC01OTQsMTAgKzYwNywxNSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0KG5hbWVwa2cpOgorICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW25hbWVwa2ddID0gKExPQ0tFRF9OT19DT0VYSVNULCBwa2cpCisgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorLSAgICAgICAgICAgICAgICBpZiBuYW1lcGtnIGluIGxvY2tlZDoKKysgICAgICAgICAgICAgICAgaWYgYXR0ZW1wdDoKKysgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRmFpbGVkLCBfKCJDYW4ndCBpbnN0YWxsICVzOiBpdCBjYW4ndCBjb2V4aXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCAlcyIpICUgKHBrZywgbmFtZXBrZykKKy0gICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKG5hbWVwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGlmIG5hbWVwa2cgaW4gbG9ja2VkOgorKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQgY2FuJ3QgY29leGlzdCAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICVzIikgJSAocGtnLCBuYW1lcGtnKQorKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKG5hbWVwa2csIGNoYW5nZXNldCwgbG9ja2VkLCBwZW5kaW5nLCBkZXB0aCkKKyAKKyAgICAgICAgICMgSW5zdGFsbCBwYWNrYWdlcyByZXF1aXJlZCBieSB0aGlzIG9uZS4KKyAgICAgICAgIGZvciByZXEgaW4gcGtnLnJlcXVpcmVzICsgcGtnLnJlY29tbWVuZHM6CitAQCAtMTE3Niw2ICsxMTk0LDggQEAgY2xhc3MgVHJhbnNhY3Rpb24ob2JqZWN0KToKKyAKKyAgICAgICAgIHNlbGYuX3BvbGljeS5ydW5TdGFydGluZygpCisgCisrICAgICAgICBhdHRlbXB0ID0gc3lzY29uZi5oYXMoImF0dGVtcHQtaW5zdGFsbCIsIHNvZnQ9VHJ1ZSkKKysKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBjaGFuZ2VzZXQgPSBzZWxmLl9jaGFuZ2VzZXQuY29weSgpCisgICAgICAgICAgICAgaXNpbnN0ID0gY2hhbmdlc2V0Lmluc3RhbGxlZAorQEAgLTExOTAsNyArMTIxMCwxMSBAQCBjbGFzcyBUcmFuc2FjdGlvbihvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICAgbG9ja2VkW3BrZ10gPSAoTE9DS0VEX0tFRVAsIE5vbmUpCisgICAgICAgICAgICAgICAgIGVsaWYgb3AgaXMgSU5TVEFMTDoKKyAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3QocGtnKSBhbmQgcGtnIGluIGxvY2tlZDoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBGYWlsZWQsIF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgbG9ja2VkIikgJSBwa2cKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiBhdHRlbXB0OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmFjZS53YXJuaW5nKF8oIkNhbid0IGluc3RhbGwgJXM6IGl0J3MgbG9ja2VkIikgJSBwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjaGFuZ2VzZXRbcGtnXQorKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZhaWxlZCwgXygiQ2FuJ3QgaW5zdGFsbCAlczogaXQncyBsb2NrZWQiKSAlIHBrZworICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc2V0LnNldChwa2csIElOU1RBTEwpCisgICAgICAgICAgICAgICAgICAgICBsb2NrZWRbcGtnXSA9IChMT0NLRURfSU5TVEFMTCwgTm9uZSkKKyAgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBSRU1PVkU6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LWNoYW5uZWxzZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1jaGFubmVsc2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIxYjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1jaGFubmVsc2Rpci5wYXRjaApAQCAtMCwwICsxLDI0IEBACitNYWtlIENIQU5ORUxTRElSIGluIHNtYXJ0IGVtcHR5LCBzaW5jZSB0aGlzIGNhdXNlcyBob3N0IGNvbnRhbWluYXRpb24gaXNzdWVzCitvbiBzb21lIFJQTS1iYXNlZCBob3N0cyBvbiB3aGljaCBzbWFydCBpcyBhbHJlYWR5IGluc3RhbGxlZC4KKworW1lPQ1RPICMzODgxXQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitkaWZmIC0tZ2l0IGEvc21hcnQvcGx1Z2lucy9jaGFubmVsc3luYy5weSBiL3NtYXJ0L3BsdWdpbnMvY2hhbm5lbHN5bmMucHkKK2luZGV4IDNiYTk1ZmYuLjY0NmQ2OTYgMTAwNjQ0CistLS0gYS9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5CisrKysgYi9zbWFydC9wbHVnaW5zL2NoYW5uZWxzeW5jLnB5CitAQCAtMjMsNyArMjMsMTEgQEAgZnJvbSBzbWFydC5jaGFubmVsIGltcG9ydCAqCisgZnJvbSBzbWFydCBpbXBvcnQgKgorIGltcG9ydCBvcworIAorLUNIQU5ORUxTRElSID0gIi9ldGMvc21hcnQvY2hhbm5lbHMvIgorKyMgRm9yIG5vdywgd2UgbGVhdmUgdGhlIGRlZmluaXRpb24gb2YgQ0hBTk5FTFNESVIgZW1wdHkuIFRoaXMgcHJldmVudHMgc21hcnQKKysjIGZyb20gZXJyb25lb3VzbHkgY29uc2lkZXIgdGhlICBidWlsZCBob3N0J3MgY2hhbm5lbHMgd2hpbGUgc2V0dGluZyB1cCBpdHMKKysjIGNoYW5uZWxzIFtZT0NUTyAjMzg4MV0uIElmIHRoaXMgZmVhdHVyZSB3aWxsIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSwgQ0hBTk5FTFNESVIKKysjIHNob3VsZCBiZSBzZXQgdG8gYSBwcm9wZXIgdmFsdWUuCisrQ0hBTk5FTFNESVIgPSAiIgorIAorIGRlZiBzeW5jQ2hhbm5lbHMoY2hhbm5lbHNkaXIsIGZvcmNlPU5vbmUpOgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1pbXByb3ZlLWVycm9yLXJlcG9ydGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyMjY1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtaW1wcm92ZS1lcnJvci1yZXBvcnRpbmcucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gc21hcnQKKworQWRkIGNvZGUgdG8gY2hlY2sgcHJvcGVyIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZm9yIHZhcmlvdXMKK3NtYXJ0IGNvbW1hbmRzLiBFeGl0IHdpdGggZXJyb3IgaWYgZXJyb25lb3VzL2FkZGl0aW9uYWwgYXJndW1lbnRzCithcmUgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQgbGluZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zbWFydC91dGlsL29wdHBhcnNlLnB5IGIvc21hcnQvdXRpbC9vcHRwYXJzZS5weQoraW5kZXggNmZmZjFiYy4uZjQ0NWEzYiAxMDA2NDQKKy0tLSBhL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKKysrKyBiL3NtYXJ0L3V0aWwvb3B0cGFyc2UucHkKK0BAIC03MCw2ICs3MCw4IEBAIGltcG9ydCBzeXMsIG9zCisgaW1wb3J0IHR5cGVzCisgaW1wb3J0IHRleHR3cmFwCisgZnJvbSBnZXR0ZXh0IGltcG9ydCBnZXR0ZXh0IGFzIF8KKytmcm9tIHNtYXJ0IGltcG9ydCBFcnJvcgorK2ltcG9ydCByZQorIAorIGRlZiBfcmVwcihzZWxmKToKKyAgICAgcmV0dXJuICI8JXMgYXQgMHgleDogJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgaWQoc2VsZiksIHNlbGYpCitAQCAtNzEwLDYgKzcxMiwxMiBAQCBjbGFzcyBPcHRpb246CisgICAgICAgICAgICAgc2VsZi5hY3Rpb24sIHNlbGYuZGVzdCwgb3B0LCB2YWx1ZSwgdmFsdWVzLCBwYXJzZXIpCisgCisgICAgIGRlZiB0YWtlX2FjdGlvbihzZWxmLCBhY3Rpb24sIGRlc3QsIG9wdCwgdmFsdWUsIHZhbHVlcywgcGFyc2VyKToKKysgICAgICAgICMgS2VlcCBhbGwgdGhlIG9wdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGluZSBpbiB0aGUgJ19naXZlbl9vcHRzJyBhcnJheQorKyAgICAgICAgIyBUaGlzIHdpbGwgYmUgdXNlZCBsYXRlciB0byB2YWxpZGF0ZSB0aGUgY29tbWFuZCBsaW5lCisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihwYXJzZXIudmFsdWVzLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIHVzZXJfb3B0ID0gcmUuc3ViKHIiXlwtKiIsICIiLCBvcHQpLnJlcGxhY2UoIi0iLCAiXyIpCisrICAgICAgICBnaXZlbl9vcHRzLmFwcGVuZCh1c2VyX29wdCkKKysgICAgICAgIHNldGF0dHIocGFyc2VyLnZhbHVlcywgIl9naXZlbl9vcHRzIiwgZ2l2ZW5fb3B0cykKKyAgICAgICAgIGlmIGFjdGlvbiA9PSAic3RvcmUiOgorICAgICAgICAgICAgIHNldGF0dHIodmFsdWVzLCBkZXN0LCB2YWx1ZSkKKyAgICAgICAgIGVsaWYgYWN0aW9uID09ICJzdG9yZV9jb25zdCI6CitAQCAtODIxLDYgKzgyOSw1NCBAQCBjbGFzcyBWYWx1ZXM6CisgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCB2YWx1ZSkKKyAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIGF0dHIpCisgCisrICAgICMgQ2hlY2sgaWYgdGhlIGdpdmVuIG9wdGlvbiBoYXMgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgYXJndW1lbnRzCisrICAgICMgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG9wdGlvbiBoYXMgYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzCisrICAgICMgQSBuZWdhdGl2ZSBudW1iZXIgZm9yICduYXJncycgbWVhbnMgImF0IGxlYXN0IHxuYXJnc3wgYXJndW1lbnRzIGFyZSBuZWVkZWQiCisrICAgIGRlZiBjaGVja19hcmdzX29mX29wdGlvbihzZWxmLCBvcHQsIG5hcmdzLCBlcnI9Tm9uZSk6CisrICAgICAgICBnaXZlbl9vcHRzID0gZ2V0YXR0cihzZWxmLCAiX2dpdmVuX29wdHMiLCBbXSkKKysgICAgICAgIGlmIG5vdCBvcHQgaW4gZ2l2ZW5fb3B0czoKKysgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIHZhbHVlcyA9IGdldGF0dHIoc2VsZiwgb3B0LCBbXSkKKysgICAgICAgIGlmIHR5cGUodmFsdWVzKSAhPSB0eXBlKFtdKToKKysgICAgICAgICAgICByZXR1cm4KKysgICAgICAgIGlmIG5hcmdzIDwgMDoKKysgICAgICAgICAgICBuYXJncyA9IC1uYXJncworKyAgICAgICAgICAgIGlmIGxlbih2YWx1ZXMpID49IG5hcmdzOgorKyAgICAgICAgICAgICAgICByZXR1cm4KKysgICAgICAgICAgICBpZiBub3QgZXJyOgorKyAgICAgICAgICAgICAgICBpZiBuYXJncyA9PSAxOgorKyAgICAgICAgICAgICAgICAgICAgZXJyID0gXygiT3B0aW9uICclcycgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IikgJSBvcHQKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIGF0IGxlYXN0ICVkIGFyZ3VtZW50cyIpICUgKG9wdCwgbmFyZ3MpCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKyAgICAgICAgZWxpZiBuYXJncyA9PSAwOgorKyAgICAgICAgICAgIGlmIGxlbiggdmFsdWVzICkgPT0gMDoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIGVycgorKyAgICAgICAgZWxzZToKKysgICAgICAgICAgICBpZiBsZW4odmFsdWVzKSA9PSBuYXJnczoKKysgICAgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICAgICAgaWYgbm90IGVycjoKKysgICAgICAgICAgICAgICAgaWYgbmFyZ3MgPT0gMToKKysgICAgICAgICAgICAgICAgICAgIGVyciA9IF8oIk9wdGlvbiAnJXMnIHJlcXVpcmVzIG9uZSBhcmd1bWVudCIpICUgb3B0CisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICBlcnIgPSBfKCJPcHRpb24gJyVzJyByZXF1aXJlcyAlZCBhcmd1bWVudHMiKSAlIChvcHQsIG5hcmdzKQorKyAgICAgICAgICAgIHJhaXNlIEVycm9yLCBlcnIKKysKKysgICAgIyBDaGVjayB0aGF0IGF0IGxlYXN0IG9uZSBvZiB0aGUgb3B0aW9ucyBpbiAnYWN0bGlzdCcgd2FzIGdpdmVuIGFzIGFuIGFyZ3VtZW50CisrICAgICMgdG8gdGhlIGNvbW1hbmQgJ2NtZG5hbWUnCisrICAgIGRlZiBlbnN1cmVfYWN0aW9uKHNlbGYsIGNtZG5hbWUsIGFjdGxpc3QpOgorKyAgICAgICAgZ2l2ZW5fb3B0cyA9IGdldGF0dHIoc2VsZiwgIl9naXZlbl9vcHRzIiwgW10pCisrICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGxpc3Q6CisrICAgICAgICAgICAgaWYgYWN0aW9uIGluIGdpdmVuX29wdHM6CisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgcmFpc2UgRXJyb3IsIF8oIk5vIGFjdGlvbiBzcGVjaWZpZWQgZm9yIGNvbW1hbmQgJyVzJyIpICUgY21kbmFtZQorKworKyAgICAjIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJndW1lbnRzIGxlZnQgYWZ0ZXIgcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lIGFuZAorKyAgICAjIHJhaXNlIGFuIGVycm9yIGlmIHN1Y2ggYXJndW1lbnRzIGFyZSBmb3VuZAorKyAgICBkZWYgY2hlY2tfcmVtYWluaW5nX2FyZ3Moc2VsZik6CisrICAgICAgICBpZiBzZWxmLmFyZ3M6CisrICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oIkludmFsaWQgYXJndW1lbnQocykgJyVzJyIgJSBzdHIoc2VsZi5hcmdzKSkKKyAKKyBjbGFzcyBPcHRpb25Db250YWluZXI6CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJlY29tbWVuZHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJlY29tbWVuZHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwN2ZjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcmVjb21tZW5kcy5wYXRjaApAQCAtMCwwICsxLDM4MSBAQAorSGFuZGxlIHJlY29tbWVuZGVkIHBhY2thZ2VzIGluIGNvcmUgYW5kIHJwbSBiYWNrZW5kcworCitJZGVudGlmeSBhbmQgc3RvcmUgcmVjb21tZW5kZWQgcGFja2FnZXMgaW4gdGhlIGNhY2hlLCBhZGQgYSBxdWVyeSBvcHRpb24KK3RvIHJlYWQgdGhlbSBhbmQgaWdub3JlIHRoZW0gaWYgdGhleSBhcmUgbm90IHByZXNlbnQgd2hlbiBpbnN0YWxsaW5nLgorCitJbml0aWFsIGlkZW50aWZpY2F0aW9uIGNvZGUgZnJvbSBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weSBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitpbmRleCA5MzMyZWEwLi40ZmNmYmVlIDEwMDY0NAorLS0tIGEvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKysrKyBiL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtMjI1LDYgKzIyNSw1MiBAQCBjbGFzcyBSUE1QYWNrYWdlKFBhY2thZ2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysgICAgICAgIHNyZWNzID0gZmsoc2VsZi5yZWNvbW1lbmRzKQorKyAgICAgICAgb3JlY3MgPSBmayhvdGhlci5yZWNvbW1lbmRzKQorKyAgICAgICAgaWYgc3JlY3MgIT0gb3JlY3M6CisrICAgICAgICAgICAgZm9yIHNyZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIHNyZWMubmFtZVswXSA9PSAiLyIgb3Igc3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICBpZiBvcmVjLm5hbWVbMF0gPT0gIi8iIG9yIG9yZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGlmIChzcmVjLm5hbWUgPT0gb3JlYy5uYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucmVsYXRpb24gPT0gb3JlYy5yZWxhdGlvbiBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3ZlcihzcmVjLnZlcnNpb24sIG9yZWMudmVyc2lvbikpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKysgICAgICAgIHNyZWNzID0gZmsoc2VsZi5yZWNvbW1lbmRzKQorKyAgICAgICAgb3JlY3MgPSBmayhvdGhlci5yZWNvbW1lbmRzKQorKyAgICAgICAgaWYgc3JlY3MgIT0gb3JlY3M6CisrICAgICAgICAgICAgZm9yIHNyZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgIGlmIHNyZWMubmFtZVswXSA9PSAiLyIgb3Igc3JlYyBpbiBvcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisrICAgICAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyZWMubmFtZSA9PSBvcmVjLm5hbWUgYW5kCisrICAgICAgICAgICAgICAgICAgICAgICAgc3JlYy5yZWxhdGlvbiA9PSBvcmVjLnJlbGF0aW9uIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrdmVyKHNyZWMudmVyc2lvbiwgb3JlYy52ZXJzaW9uKSk6CisrICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKysgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorKyAgICAgICAgICAgIGZvciBvcmVjIGluIG9yZWNzOgorKyAgICAgICAgICAgICAgICBpZiBvcmVjLm5hbWVbMF0gPT0gIi8iIG9yIG9yZWMgaW4gc3JlY3M6CisrICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorKyAgICAgICAgICAgICAgICBmb3Igc3JlYyBpbiBzcmVjczoKKysgICAgICAgICAgICAgICAgICAgIGlmIChzcmVjLm5hbWUgPT0gb3JlYy5uYW1lIGFuZAorKyAgICAgICAgICAgICAgICAgICAgICAgIHNyZWMucmVsYXRpb24gPT0gb3JlYy5yZWxhdGlvbiBhbmQKKysgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3ZlcihzcmVjLnZlcnNpb24sIG9yZWMudmVyc2lvbikpOgorKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisrICAgICAgICAgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgIHJldHVybiBUcnVlCisgCisgICAgIGRlZiBjb2V4aXN0cyhzZWxmLCBvdGhlcik6CitkaWZmIC0tZ2l0IGEvc21hcnQvY2NhY2hlLmMgYi9zbWFydC9jY2FjaGUuYworaW5kZXggNzE5MzE4NS4uOGI2NjUxNSAxMDA2NDQKKy0tLSBhL3NtYXJ0L2NjYWNoZS5jCisrKysgYi9zbWFydC9jY2FjaGUuYworQEAgLTUwMCw2ICs1MDAsNDYgQEAgUGFja2FnZV9lcXVhbHMoUGFja2FnZU9iamVjdCAqc2VsZiwgUGFja2FnZU9iamVjdCAqb3RoZXIpCisgICAgICAgICB9CisgICAgIH0KKyAKKysgICAgaWxlbiA9IDA7CisrICAgIGpsZW4gPSAwOworKyAgICBmb3IgKGkgPSAwOyBpICE9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5yZWNvbW1lbmRzKTsgaSsrKSB7CisrICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShzZWxmLT5yZWNvbW1lbmRzLCBpKTsKKysgICAgICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZShpdGVtLCAoUHlPYmplY3QgKikmRGVwZW5kc19UeXBlKSkgeworKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJEZXBlbmRzIGluc3RhbmNlIGV4cGVjdGVkIik7CisrICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAoU1RSKCgoRGVwZW5kc09iamVjdCAqKWl0ZW0pLT5uYW1lKVswXSAhPSAnLycpCisrICAgICAgICAgICAgaWxlbiArPSAxOworKyAgICB9CisrICAgIGZvciAoaiA9IDA7IGogIT0gUHlMaXN0X0dFVF9TSVpFKG90aGVyLT5yZWNvbW1lbmRzKTsgaisrKSB7CisrICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShvdGhlci0+cmVjb21tZW5kcywgaik7CisrICAgICAgICBpZiAoIVB5T2JqZWN0X0lzSW5zdGFuY2UoaXRlbSwgKFB5T2JqZWN0ICopJkRlcGVuZHNfVHlwZSkpIHsKKysgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiRGVwZW5kcyBpbnN0YW5jZSBleHBlY3RlZCIpOworKyAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKFNUUigoKERlcGVuZHNPYmplY3QgKilpdGVtKS0+bmFtZSlbMF0gIT0gJy8nKQorKyAgICAgICAgICAgIGpsZW4gKz0gMTsKKysgICAgfQorKyAgICBpZiAoaWxlbiAhPSBqbGVuKSB7CisrICAgICAgICByZXQgPSBQeV9GYWxzZTsKKysgICAgICAgIGdvdG8gZXhpdDsKKysgICAgfQorKworKyAgICBpbGVuID0gUHlMaXN0X0dFVF9TSVpFKHNlbGYtPnJlY29tbWVuZHMpOworKyAgICBqbGVuID0gUHlMaXN0X0dFVF9TSVpFKG90aGVyLT5yZWNvbW1lbmRzKTsKKysgICAgZm9yIChpID0gMDsgaSAhPSBpbGVuOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKHNlbGYtPnJlY29tbWVuZHMsIGkpOworKyAgICAgICAgaWYgKFNUUigoKERlcGVuZHNPYmplY3QgKilpdGVtKS0+bmFtZSlbMF0gIT0gJy8nKSB7CisrICAgICAgICAgICAgZm9yIChqID0gMDsgaiAhPSBqbGVuOyBqKyspCisrICAgICAgICAgICAgICAgIGlmIChpdGVtID09IFB5TGlzdF9HRVRfSVRFTShvdGhlci0+cmVjb21tZW5kcywgaikpCisrICAgICAgICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgICAgICBpZiAoaiA9PSBqbGVuKSB7CisrICAgICAgICAgICAgICAgIHJldCA9IFB5X0ZhbHNlOworKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrCisgZXhpdDoKKyAgICAgUHlfSU5DUkVGKHJldCk7CisgICAgIHJldHVybiByZXQ7CitAQCAtMTgxMyw2ICsxODUzLDU5IEBAIExvYWRlcl9idWlsZFBhY2thZ2UoTG9hZGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgIH0KKyAgICAgfQorIAorKyAgICAvKiBpZiByZWNhcmdzOiAqLworKyAgICBpZiAocmVjYXJncykgeworKyAgICAgICAgaW50IGkgPSAwOworKyAgICAgICAgaW50IGxlbiA9IFB5TGlzdF9HRVRfU0laRShyZWNhcmdzKTsKKysgICAgICAgIC8qIHBrZy5yZWNvbW1lbmRzID0gW10gKi8KKysgICAgICAgIFB5X0RFQ1JFRihwa2dvYmotPnJlY29tbWVuZHMpOworKyAgICAgICAgcGtnb2JqLT5yZWNvbW1lbmRzID0gUHlMaXN0X05ldyhsZW4pOworKyAgICAgICAgLyogZm9yIGFyZ3MgaW4gcmVjYXJnczogKi8KKysgICAgICAgIGZvciAoOyBpICE9IGxlbjsgaSsrKSB7CisrICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MgPSBQeUxpc3RfR0VUX0lURU0ocmVjYXJncywgaSk7CisrICAgICAgICAgICAgRGVwZW5kc09iamVjdCAqcmVjb2JqOworKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZWM7CisrICAgICAgICAgICAgCisrICAgICAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CisrICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSXRlbSBpbiByZWNhcmdzIGlzIG5vdCBhIHR1cGxlIik7CisrICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICAvKiByZWMgPSBjYWNoZS5fb2JqbWFwLmdldChhcmdzKSAqLworKyAgICAgICAgICAgIHJlYyA9IFB5RGljdF9HZXRJdGVtKGNhY2hlLT5fb2JqbWFwLCBhcmdzKTsKKysgICAgICAgICAgICByZWNvYmogPSAoRGVwZW5kc09iamVjdCAqKXJlYzsKKysKKysgICAgICAgICAgICAvKiBpZiBub3QgcmVjOiAqLworKyAgICAgICAgICAgIGlmICghcmVjKSB7CisrICAgICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpIDwgMikgeworKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJbnZhbGlkIHJlY2FyZ3MgdHVwbGUiKTsKKysgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIC8qIHJlYyA9IGFyZ3NbMF0oKmFyZ3NbMTpdKSAqLworKyAgICAgICAgICAgICAgICBjYWxsYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgUHlUdXBsZV9HRVRfU0laRShhcmdzKSk7CisrICAgICAgICAgICAgICAgIHJlYyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKSwgY2FsbGFyZ3MpOworKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2FsbGFyZ3MpOworKyAgICAgICAgICAgICAgICBpZiAoIXJlYykgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgIHJlY29iaiA9IChEZXBlbmRzT2JqZWN0ICopcmVjOworKworKyAgICAgICAgICAgICAgICAvKiBjYWNoZS5fb2JqbWFwW2FyZ3NdID0gcmVjICovCisrICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKGNhY2hlLT5fb2JqbWFwLCBhcmdzLCByZWMpOworKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjKTsKKysKKysgICAgICAgICAgICAgICAgLyogY2FjaGUuX3JlY29tbWVuZHMuYXBwZW5kKHJlYykgKi8KKysgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChjYWNoZS0+X3JlY29tbWVuZHMsIHJlYyk7CisrICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgIC8qIHJlbHBrZ3MuYXBwZW5kKHJlYy5wYWNrYWdlcykgKi8KKysgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHJlbHBrZ3MsIHJlY29iai0+cGFja2FnZXMpOworKworKyAgICAgICAgICAgIC8qIHBrZy5yZWNvbW1lbmRzLmFwcGVuZChyZWMpICovCisrICAgICAgICAgICAgUHlfSU5DUkVGKHJlYyk7CisrICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHBrZ29iai0+cmVjb21tZW5kcywgaSwgcmVjKTsKKysgICAgICAgIH0KKysgICAgfQorKworICAgICAvKiBpZiB1cGdhcmdzOiAqLworICAgICBpZiAodXBnYXJncykgeworICAgICAgICAgaW50IGkgPSAwOworQEAgLTI1OTIsNiArMjY4NSwxNiBAQCBDYWNoZV9yZXNldChDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHJlcW9iai0+cHJvdmlkZWRieSkpCisgICAgICAgICAgICAgTElTVF9DTEVBUihyZXFvYmotPnByb3ZpZGVkYnkpOworICAgICB9CisrICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fcmVjb21tZW5kcyk7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgIERlcGVuZHNPYmplY3QgKnJlcW9iajsKKysgICAgICAgIFB5T2JqZWN0ICpyZXE7CisrICAgICAgICByZXEgPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+X3JlY29tbWVuZHMsIGkpOworKyAgICAgICAgcmVxb2JqID0gKERlcGVuZHNPYmplY3QgKilyZXE7CisrICAgICAgICBMSVNUX0NMRUFSKHJlcW9iai0+cGFja2FnZXMpOworKyAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhyZXFvYmotPnByb3ZpZGVkYnkpKQorKyAgICAgICAgICAgIExJU1RfQ0xFQVIocmVxb2JqLT5wcm92aWRlZGJ5KTsKKysgICAgfQorICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUoc2VsZi0+X3VwZ3JhZGVzKTsKKyAgICAgZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgeworICAgICAgICAgRGVwZW5kc09iamVjdCAqdXBnb2JqOworQEAgLTI4MzQsNiArMjkzNywzMCBAQCBDYWNoZV9fcmVsb2FkKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKyAgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgICAvKgorKyAgICAgICAgICAgICAgICAgICBmb3IgcmVjIGluIHBrZy5yZWNvbW1lbmRzOgorKyAgICAgICAgICAgICAgICAgICAgICAgcmVjLnBhY2thZ2VzLmFwcGVuZChwa2cpCisrICAgICAgICAgICAgICAgICAgICAgICBpZiByZWMgbm90IGluIHJlY29tbWVuZHM6CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb21tZW5kc1tyZWNdID0gVHJ1ZQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iam1hcFtyZWMuZ2V0SW5pdEFyZ3MoKV0gPSByZWMKKysgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhwa2ctPnJlY29tbWVuZHMpKSB7CisrICAgICAgICAgICAgICAgICAgICBrbGVuID0gUHlMaXN0X0dFVF9TSVpFKHBrZy0+cmVjb21tZW5kcyk7CisrICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrICE9IGtsZW47IGsrKykgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZWMgPSBQeUxpc3RfR0VUX0lURU0ocGtnLT5yZWNvbW1lbmRzLCBrKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKCgoRGVwZW5kc09iamVjdCAqKXJlYyktPnBhY2thZ2VzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopcGtnKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RGljdF9HZXRJdGVtKHJlY29tbWVuZHMsIHJlYykpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVjb21tZW5kcywgcmVjLCBQeV9UcnVlKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVjLCAiZ2V0SW5pdEFyZ3MiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSByZXR1cm4gTlVMTDsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ob2JqbWFwLCBhcmdzLCByZWMpOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisrICAgICAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICB9CisrCisrICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgIGZvciB1cGcgaW4gcGtnLnVwZ3JhZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgdXBnLnBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB1cGcgbm90IGluIHVwZ3JhZGVzOgorQEAgLTMwOTcsNiArMzIyNCw0NyBAQCBDYWNoZV9saW5rRGVwcyhDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgfQorIAorKyAgICAvKiByZWNuYW1lcyA9IHt9ICovCisrICAgIHJlY25hbWVzID0gUHlEaWN0X05ldygpOworKyAgICAvKiBmb3IgcmVjIGluIHNlbGYuX3JlY29tbWVuZHM6ICovCisrICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRShzZWxmLT5fcmVjb21tZW5kcyk7CisrICAgIGZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKysgICAgICAgIFB5T2JqZWN0ICpyZWMgPSBQeUxpc3RfR0VUX0lURU0oc2VsZi0+X3JlY29tbWVuZHMsIGkpOworKworKyAgICAgICAgLyogZm9yIG5hbWUgaW4gcmVjLmdldE1hdGNoTmFtZXMoKTogKi8KKysgICAgICAgIFB5T2JqZWN0ICpuYW1lcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QocmVjLCAiZ2V0TWF0Y2hOYW1lcyIsIE5VTEwpOworKyAgICAgICAgUHlPYmplY3QgKnNlcSA9IFB5U2VxdWVuY2VfRmFzdChuYW1lcywgImdldE1hdGNoTmFtZXMoKSByZXR1cm5lZCAiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXNlcXVlbmNlIG9iamVjdCIpOworKyAgICAgICAgaW50IG5hbWVzbGVuOworKyAgICAgICAgaWYgKCFzZXEpIHJldHVybiBOVUxMOworKyAgICAgICAgbmFtZXNsZW4gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsKKysgICAgICAgIGZvciAoaiA9IDA7IGogIT0gbmFtZXNsZW47IGorKykgeworKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaik7CisrICAgICAgICAgICAgCisrICAgICAgICAgICAgLyogbHN0ID0gcmVjbmFtZXMuZ2V0KG5hbWUpICovCisrICAgICAgICAgICAgbHN0ID0gUHlEaWN0X0dldEl0ZW0ocmVjbmFtZXMsIG5hbWUpOworKworKyAgICAgICAgICAgIC8qIAorKyAgICAgICAgICAgICAgIGlmIGxzdDoKKysgICAgICAgICAgICAgICAgICAgbHN0LmFwcGVuZChyZWMpCisrICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgcmVjbmFtZXNbbmFtZV0gPSBbcmVjXQorKyAgICAgICAgICAgICovCisrICAgICAgICAgICAgaWYgKGxzdCkgeworKyAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGxzdCwgcmVjKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBsc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYocmVjKTsKKysgICAgICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxzdCwgMCwgcmVjKTsKKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVjbmFtZXMsIG5hbWUsIGxzdCk7CisrICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysKKysgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7CisrICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKysgICAgfQorKworICAgICAvKiB1cGduYW1lcyA9IHt9ICovCisgICAgIHVwZ25hbWVzID0gUHlEaWN0X05ldygpOworICAgICAvKiBmb3IgdXBnIGluIHNlbGYuX3VwZ3JhZGVzOiAqLworQEAgLTMyODYsNiArMzQ1NCw1NiBAQCBDYWNoZV9saW5rRGVwcyhDYWNoZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisgICAgICAgICAgICAgfQorICAgICAgICAgfQorIAorKyAgICAgICAgLyogbHN0ID0gcmVjbmFtZXMuZ2V0KHBydi5uYW1lKSAqLworKyAgICAgICAgbHN0ID0gUHlEaWN0X0dldEl0ZW0ocmVjbmFtZXMsIHBydi0+bmFtZSk7CisrCisrICAgICAgICAvKiBpZiBsc3Q6ICovCisrICAgICAgICBpZiAobHN0KSB7CisrICAgICAgICAgICAgLyogZm9yIHJlYyBpbiBsc3Q6ICovCisrICAgICAgICAgICAgaW50IHJlY2xlbiA9IFB5TGlzdF9HRVRfU0laRShsc3QpOworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogIT0gcmVjbGVuOyBqKyspIHsKKysgICAgICAgICAgICAgICAgRGVwZW5kc09iamVjdCAqcmVjID0gKERlcGVuZHNPYmplY3QgKilQeUxpc3RfR0VUX0lURU0obHN0LCBqKTsKKysgICAgICAgICAgICAgICAgLyogaWYgcmVjLm1hdGNoZXMocHJ2KTogKi8KKysgICAgICAgICAgICAgICAgUHlPYmplY3QgKnJldCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKFB5T2JqZWN0ICopcmVjLCAibWF0Y2hlcyIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPIiwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgaWYgKCFyZXQpIHJldHVybiBOVUxMOworKyAgICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSXNUcnVlKHJldCkpIHsKKysgICAgICAgICAgICAgICAgICAgIC8qCisrICAgICAgICAgICAgICAgICAgICAgICBpZiByZWMucHJvdmlkZWRieToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMucHJvdmlkZWRieS5hcHBlbmQocHJ2KQorKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgICAgICAgICAgICByZWMucHJvdmlkZWRieSA9IFtwcnZdCisrICAgICAgICAgICAgICAgICAgICAqLworKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhyZWMtPnByb3ZpZGVkYnkpKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChyZWMtPnByb3ZpZGVkYnksIChQeU9iamVjdCAqKXBydik7CisrICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpfbHN0ID0gUHlMaXN0X05ldygxKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYocHJ2KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oX2xzdCwgMCwgKFB5T2JqZWN0ICopcHJ2KTsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVjLT5wcm92aWRlZGJ5KTsKKysgICAgICAgICAgICAgICAgICAgICAgICByZWMtPnByb3ZpZGVkYnkgPSBfbHN0OworKyAgICAgICAgICAgICAgICAgICAgfQorKworKyAgICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICAgICAgIGlmIHBydi5yZWNvbW1lbmRlZGJ5OgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydi5yZWNvbW1lbmRlZGJ5LmFwcGVuZChwcnYpCisrICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBydi5yZWNvbW1lbmRlZGJ5ID0gW3Bydl0KKysgICAgICAgICAgICAgICAgICAgICovCisrICAgICAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0NoZWNrKHBydi0+cmVjb21tZW5kZWRieSkpIHsKKysgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHBydi0+cmVjb21tZW5kZWRieSwgKFB5T2JqZWN0ICopcmVjKTsKKysgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKl9sc3QgPSBQeUxpc3RfTmV3KDEpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihyZWMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShfbHN0LCAwLCAoUHlPYmplY3QgKilyZWMpOworKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihwcnYtPnJlY29tbWVuZGVkYnkpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHBydi0+cmVjb21tZW5kZWRieSA9IF9sc3Q7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJldCk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKworICAgICAgICAgLyogbHN0ID0gdXBnbmFtZXMuZ2V0KHBydi5uYW1lKSAqLworICAgICAgICAgbHN0ID0gUHlEaWN0X0dldEl0ZW0odXBnbmFtZXMsIHBydi0+bmFtZSk7CisgCitAQCAtMzgyMSw2ICs0MDk0LDIxIEBAIENhY2hlX19zZXRzdGF0ZV9fKENhY2hlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCisgICAgICAgICB9CisgCisgICAgICAgICAvKgorKyAgICAgICAgICAgZm9yIHJlYyBpbiBwa2cucmVjb21tZW5kczoKKysgICAgICAgICAgICAgICByZWMucGFja2FnZXMuYXBwZW5kKHBrZykKKysgICAgICAgICAgICAgICByZWNvbW1lbmRzW3JlY10gPSBUcnVlCisrICAgICAgICAqLworKyAgICAgICAgaWYgKFB5TGlzdF9DaGVjayhwa2dvYmotPnJlY29tbWVuZHMpKSB7CisrICAgICAgICAgICAgamxlbiA9IFB5TGlzdF9HRVRfU0laRShwa2dvYmotPnJlY29tbWVuZHMpOworKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogIT0gamxlbjsgaisrKSB7CisrICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZWMgPSBQeUxpc3RfR0VUX0lURU0ocGtnb2JqLT5yZWNvbW1lbmRzLCBqKTsKKysgICAgICAgICAgICAgICAgRGVwZW5kc09iamVjdCAqcmVjb2JqID0gKERlcGVuZHNPYmplY3QgKilyZWM7CisrICAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQocmVjb2JqLT5wYWNrYWdlcywgcGtnKTsKKysgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVjb21tZW5kcywgcmVjLCBQeV9UcnVlKTsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrCisrICAgICAgICAvKgorICAgICAgICAgICAgZm9yIHVwZyBpbiBwa2cudXBncmFkZXM6CisgICAgICAgICAgICAgICAgdXBnLnBhY2thZ2VzLmFwcGVuZChwa2cpCisgICAgICAgICAgICAgICAgdXBncmFkZXNbdXBnXSA9IFRydWUKK2RpZmYgLS1naXQgYS9zbWFydC9jb21tYW5kcy9xdWVyeS5weSBiL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5CitpbmRleCA5MjY1Y2Q5Li5iNmY1Njk3IDEwMDY0NAorLS0tIGEvc21hcnQvY29tbWFuZHMvcXVlcnkucHkKKysrKyBiL3NtYXJ0L2NvbW1hbmRzL3F1ZXJ5LnB5CitAQCAtNzUwLDYgKzc1MCwyMiBAQCBjbGFzcyBUZXh0T3V0cHV0KE51bGxPdXRwdXQpOgorICAgICAgICAgICAgIG5hbWUgPSBzdHIocHJ2cGtnKQorICAgICAgICAgcHJpbnQgIiAgICAgICAiLCAiJXMgKCVzKSIgJSAobmFtZSwgcHJ2KQorIAorKyAgICBkZWYgc2hvd1JlY29tbWVuZHMoc2VsZiwgcGtnLCByZWMpOgorKyAgICAgICAgaWYgc2VsZi5fZmlyc3RyZWNvbW1lbmRzOgorKyAgICAgICAgICAgIHNlbGYuX2ZpcnN0cmVjb21tZW5kcyA9IEZhbHNlCisrICAgICAgICAgICAgcHJpbnQgIiAiLCBfKCJSZWNvbW1lbmRzOiIpCisrICAgICAgICBwcmludCAiICAgIiwgcmVjCisrCisrICAgIGRlZiBzaG93UmVjb21tZW5kc1Byb3ZpZGVkQnkoc2VsZiwgcGtnLCByZXEsIHBydiwgcHJ2cGtnKToKKysgICAgICAgIGlmIHNlbGYuX2ZpcnN0cmVjb21tZW5kc3Byb3ZpZGVkYnk6CisrICAgICAgICAgICAgc2VsZi5fZmlyc3RyZWNvbW1lbmRzcHJvdmlkZWRieSA9IEZhbHNlCisrICAgICAgICAgICAgcHJpbnQgIiAgICAgIiwgXygiUHJvdmlkZWQgQnk6IikKKysgICAgICAgIGlmIHNlbGYub3B0cy5oaWRlX3ZlcnNpb246CisrICAgICAgICAgICAgbmFtZSA9IHBydnBrZy5uYW1lCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIG5hbWUgPSBzdHIocHJ2cGtnKQorKyAgICAgICAgcHJpbnQgIiAgICAgICAiLCAiJXMgKCVzKSIgJSAobmFtZSwgcHJ2KQorKworICAgICBkZWYgc2hvd1VwZ3JhZGVzKHNlbGYsIHBrZywgdXBnKToKKyAgICAgICAgIGlmIHNlbGYuX2ZpcnN0dXBncmFkZXM6CisgICAgICAgICAgICAgc2VsZi5fZmlyc3R1cGdyYWRlcyA9IEZhbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0LXJwbTQtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZmZlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtcnBtNC1maXhlcy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACisKK1RoaXMgcGF0Y2ggY2hlY2tzIGZvciBycG01IHJlbGF0ZWQgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGFsbG93IHJwbTQgCit0byB3b3JrIGNvcnJlY3RseS4gQ3VycmVudGx5IHRoZSBycG00IGFyY2hzY29yZSBhbmQgZmlsdGVyIHdvcmsKK2RpZmZlcmVudGx5IGVub3VnaCB0aGF0IHRoZXkgbmVlZCB0byBiZSBjaGFuZ2VkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmUgU3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc21hcnQtMS40LjEub3JpZy9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorKysrIHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CitAQCAtMzM4LDEwICszMzgsMTQgQEAgY2xhc3MgUlBNT2Jzb2xldGVzKERlcGVuZHMpOgorIAorIF9TQ09SRU1BUCA9IHt9CisgZGVmIGdldEFyY2hTY29yZShhcmNoLCBfc209X1NDT1JFTUFQKToKKy0gICAgaWYgYXJjaCBub3QgaW4gX3NtOgorLSAgICAgICAgc2NvcmUgPSBycG0uYXJjaHNjb3JlKGFyY2gpCistICAgICAgICBfc21bYXJjaF0gPSBzY29yZQorLSAgICByZXR1cm4gX3NtLmdldChhcmNoLCAwKQorKyAgICB0cnk6CisrICAgICAgICBycG0ucGxhdGZvcm1zY29yZShhcmNoKQorKyAgICAgICAgaWYgYXJjaCBub3QgaW4gX3NtOgorKyAgICAgICAgICAgIHNjb3JlID0gcnBtLmFyY2hzY29yZShhcmNoKQorKyAgICAgICAgICAgIF9zbVthcmNoXSA9IHNjb3JlCisrICAgICAgICByZXR1cm4gX3NtLmdldChhcmNoLCAwKQorKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisrICAgICAgICByZXR1cm4gMQorIAorICMgVE9ETzogRW1iZWQgY29sb3IgaW50byBuYW1lcHJvdmlkZXMgYW5kIG9ic29sZXRlcyByZWxhdGlvbnMuCisgX0NPTE9STUFQID0geyJub2FyY2giOiAwLCAieDg2XzY0IjogMiwgInBwYzY0IjogMiwgInMzOTB4IjogMiwgInNwYXJjNjQiOiAyfQorSW5kZXg6IHNtYXJ0LTEuNC4xL3NtYXJ0L2JhY2tlbmRzL3JwbS9wbS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNtYXJ0LTEuNC4xLm9yaWcvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CisrKysgc21hcnQtMS40LjEvc21hcnQvYmFja2VuZHMvcnBtL3BtLnB5CitAQCAtMjM1LDYgKzIzNSwxMiBAQCBjbGFzcyBSUE1QYWNrYWdlTWFuYWdlcihQYWNrYWdlTWFuYWdlcik6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLW9yZGVyIik6CisgICAgICAgICAgICAgdHMub3JkZXIoKQorICAgICAgICAgcHJvYmZpbHRlciA9IHJwbS5SUE1QUk9CX0ZJTFRFUl9PTERQQUNLQUdFCisrICAgICAgICB0cnk6CisrICAgICAgICAgICAgIyBUZXN0IGZvciBSUE01IGZ1bmN0aW9uCisrICAgICAgICAgICAgcnBtLnBsYXRmb3Jtc2NvcmUoIiIpCisrICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisrICAgICAgICAgICAgcHJvYmZpbHRlciB8PSBycG0uUlBNUFJPQl9GSUxURVJfSUdOT1JFQVJDSAorKworICAgICAgICAgaWYgZm9yY2Ugb3IgcmVpbnN0YWxsOgorICAgICAgICAgICAgIHByb2JmaWx0ZXIgfD0gcnBtLlJQTVBST0JfRklMVEVSX1JFUExBQ0VQS0cKKyAgICAgICAgICAgICBwcm9iZmlsdGVyIHw9IHJwbS5SUE1QUk9CX0ZJTFRFUl9SRVBMQUNFT0xERklMRVMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnQtc2V0LW5vcHJvZ3Jlc3MtZm9yLXB5Y3VybC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODg1OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbS9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1NldCBOT1BST0dSRVNTIGZvciBweWN1cmwganVzdCBhcyBzYW1lIGFzIGRlZmF1bHQgb3BlcmF0aW9uIGluIHB5Y3VybCBtb2R1bGUgaXRzZWxmLgorSWYgc2V0IE5PUFJPR1JFU1Mgd2l0aCAwIGZvciBweWN1cmwsIGl0IGNhdXNlcyBkZWFkIGxvY2sgaXNzdWUgb2YgUHl0aG9uIEdJTCB3aGVuCitjYWxsIHNtYXJ0IGxpYnJhcnkgYnkgcHl0aG9uIGd1aSBqdXN0IGxpa2UgcHlndGsuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorZGlmZiAtdSBzbWFydC0xLjQuMS9zbWFydC5vcmlnL2ZldGNoZXIucHkgc21hcnQtMS40LjEvc21hcnQvZmV0Y2hlci5weQorLS0tIHNtYXJ0LTEuNC4xL3NtYXJ0Lm9yaWcvZmV0Y2hlci5weQkyMDE0LTA3LTE1IDE2OjQyOjE5LjI0MDQzNzA4MCArMDgwMAorKysrIHNtYXJ0LTEuNC4xL3NtYXJ0L2ZldGNoZXIucHkJMjAxNC0wNy0xNSAxNzowMjozNy44MTI0NzAyODkgKzA4MDAKK0BAIC0xNzIwLDcgKzE3MjAsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLk9QVF9GSUxFVElNRSwgMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5MT1dfU1BFRURfTElNSVQsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuTE9XX1NQRUVEX1RJTUUsIFNPQ0tFVFRJTUVPVVQpCistICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuTk9QUk9HUkVTUywgMCkKKysgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUuc2V0b3B0KHB5Y3VybC5OT1BST0dSRVNTLCAxKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLlBST0dSRVNTRlVOQ1RJT04sIHByb2dyZXNzKQorICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5zZXRvcHQocHljdXJsLldSSVRFREFUQSwgbG9jYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlLnNldG9wdChweWN1cmwuRk9MTE9XTE9DQVRJT04sIDEpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtYXJ0cG0vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZmIyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtL3NtYXJ0cG0tcnBtNS1ub2RpZy5wYXRjaApAQCAtMCwwICsxLDU5IEBACitSUE01IGhhcyByZW1vdmVkIHN1cHBvcnQgZm9yIFJQTVZTRl9OT1NJR05BVFVSRVMKKworUGF0Y2ggc21hcnQgdG8gbm8gbG9uZ2VyIHVzZSB0aGlzIGZsYWcKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5IGIvc21hcnQvYmFja2VuZHMvcnBtL2Jhc2UucHkKKy0tLSBhL3NtYXJ0L2JhY2tlbmRzL3JwbS9iYXNlLnB5CisrKysgYi9zbWFydC9iYWNrZW5kcy9ycG0vYmFzZS5weQorQEAgLTYzLDExICs2MywxMSBAQCBkZWYgZ2V0VFMobmV3PUZhbHNlKToKKyAgICAgICAgIGlmIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIik6CisgICAgICAgICAgICAgcnBtLmFkZE1hY3JvKCdfZGJwYXRoJywgIi8iICsgc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiKSkKKyAgICAgICAgIGdldFRTLnRzID0gcnBtLnRzKGdldFRTLnJvb3QpCistICAgICAgICBpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorLSAgICAgICAgICAgIGlmIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT1NJR05BVFVSRVMnKToKKy0gICAgICAgICAgICAgICAgZ2V0VFMudHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IsIF8oInJwbSByZXF1aXJlcyBjaGVja2luZyBzaWduYXR1cmVzIikKKysgICAgICAgICNpZiBub3Qgc3lzY29uZi5nZXQoInJwbS1jaGVjay1zaWduYXR1cmVzIiwgRmFsc2UpOgorKyAgICAgICAgIyAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CisrICAgICAgICAjICAgICAgICBnZXRUUy50cy5zZXRWU0ZsYWdzKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFUykKKysgICAgICAgICMgICAgZWxzZToKKysgICAgICAgICMgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisgICAgICAgICBycG1fZGJwYXRoID0gc3lzY29uZi5nZXQoInJwbS1kYnBhdGgiLCAidmFyL2xpYi9ycG0iKQorICAgICAgICAgZGJkaXIgPSBycG1fam9pbl9kYnBhdGgoZ2V0VFMucm9vdCwgcnBtX2RicGF0aCkKKyAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRiZGlyKToKK0BAIC04OSwxMSArODksMTEgQEAgZGVmIGdldFRTKG5ldz1GYWxzZSk6CisgICAgICAgICBpZiBzeXNjb25mLmdldCgicnBtLWRicGF0aCIpOgorICAgICAgICAgICAgIHJwbS5hZGRNYWNybygnX2RicGF0aCcsICIvIiArIHN5c2NvbmYuZ2V0KCJycG0tZGJwYXRoIikpCisgICAgICAgICB0cyA9IHJwbS50cyhnZXRUUy5yb290KQorLSAgICAgICAgaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKy0gICAgICAgICAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJyk6CistICAgICAgICAgICAgICAgIHRzLnNldFZTRmxhZ3MocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yLCBfKCJycG0gcmVxdWlyZXMgY2hlY2tpbmcgc2lnbmF0dXJlcyIpCisrICAgICAgICAjaWYgbm90IHN5c2NvbmYuZ2V0KCJycG0tY2hlY2stc2lnbmF0dXJlcyIsIEZhbHNlKToKKysgICAgICAgICMgICAgaWYgaGFzYXR0cihycG0sICdfUlBNVlNGX05PU0lHTkFUVVJFUycpOgorKyAgICAgICAgIyAgICAgICAgdHMuc2V0VlNGbGFncyhycG0uX1JQTVZTRl9OT1NJR05BVFVSRVMpCisrICAgICAgICAjICAgIGVsc2U6CisrICAgICAgICAjICAgICAgICByYWlzZSBFcnJvciwgXygicnBtIHJlcXVpcmVzIGNoZWNraW5nIHNpZ25hdHVyZXMiKQorICAgICAgICAgcmV0dXJuIHRzCisgICAgIGVsc2U6CisgICAgICAgICByZXR1cm4gZ2V0VFMudHMKK2RpZmYgLS1naXQgYS9zbWFydC9wbHVnaW5zL3l1bWNoYW5uZWxzeW5jLnB5IGIvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorLS0tIGEvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorKysrIGIvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weQorQEAgLTU2LDggKzU2LDggQEAgZGVmIF9nZXRyZWxlYXNldmVyKCk6CisgCisgICAgIHJwbXJvb3QgPSBzeXNjb25mLmdldCgicnBtLXJvb3QiLCAiLyIpCisgICAgIHRzID0gcnBtVXRpbHMudHJhbnNhY3Rpb24uaW5pdFJlYWRPbmx5VHJhbnNhY3Rpb24ocm9vdD1ycG1yb290KQorLSAgICBpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJykgYW5kIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT0RJR0VTVFMnKToKKy0gICAgICAgIHRzLnB1c2hWU0ZsYWdzKH4ocnBtLl9SUE1WU0ZfTk9TSUdOQVRVUkVTfHJwbS5fUlBNVlNGX05PRElHRVNUUykpCisrICAgICNpZiBoYXNhdHRyKHJwbSwgJ19SUE1WU0ZfTk9TSUdOQVRVUkVTJykgYW5kIGhhc2F0dHIocnBtLCAnX1JQTVZTRl9OT0RJR0VTVFMnKToKKysgICAgIyAgICB0cy5wdXNoVlNGbGFncyh+KHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uX1JQTVZTRl9OT0RJR0VTVFMpKQorICAgICByZWxlYXNldmVyID0gTm9uZQorICAgICAjIEhBQ0s6IHdlJ3JlIGhhcmQtY29kaW5nIHRoZSBtb3N0IHVzZWQgZGlzdHJvcywgd2lsbCBhZGQgbW9yZSBpZiBuZWVkZWQKKyAgICAgaWR4ID0gdHMuZGJNYXRjaCgncHJvdmlkZXMnLCAnZmVkb3JhLXJlbGVhc2UnKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi1zbWFydHBtX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yjk3NGIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21hcnRwbV9naXQuYmIKQEAgLTAsMCArMSwxMzkgQEAKK1NVTU1BUlkgPSAiVGhlIFNtYXJ0IFBhY2thZ2UgTWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBTbWFydCBQYWNrYWdlIE1hbmFnZXIgcHJvamVjdCBoYXMgdGhlIGFtYml0aW91cyBvYmplY3RpdmUgb2YgY3JlYXRpbmcgXAorc21hcnQgYW5kIHBvcnRhYmxlIGFsZ29yaXRobXMgZm9yIHNvbHZpbmcgYWRlcXVhdGVseSB0aGUgcHJvYmxlbSBvZiBtYW5hZ2luZyBzb2Z0d2FyZSBcCit1cGdyYWRlcyBhbmQgaW5zdGFsbGF0aW9uLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL2xhYml4Lm9yZy9zbWFydC8iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworREVQRU5EUyA9ICJweXRob24gcnBtIGdldHRleHQtbmF0aXZlIHB5dGhvbi1ycG0iCitTUkNOQU1FID0gInNtYXJ0IgorCitTUkNfVVJJID0gIlwKKyAgICAgICAgICBnaXQ6Ly9naXRodWIuY29tL3NtYXJ0cG0vc21hcnQuZ2l0IFwKKyAgICAgICAgICBmaWxlOi8vc21hcnRwbS1ycG01LW5vZGlnLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtcmVjb21tZW5kcy5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWltcHJvdmUtZXJyb3ItcmVwb3J0aW5nLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtY2hhbm5lbHNkaXIucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1hdHRlbXB0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYXR0ZW1wdC1maXgucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1ycG00LWZpeGVzLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vc21hcnQtYWRkLWZvci1ycG0taWdub3Jlc2l6ZS1jaGVjay5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL3NtYXJ0LWFscmVhZHktaW5zdGFsbGVkLW1lc3NhZ2UucGF0Y2ggXAorICAgICAgICAgIGZpbGU6Ly9zbWFydC1zZXQtbm9wcm9ncmVzcy1mb3ItcHljdXJsLnBhdGNoIFwKKyAgICAgICAgICIKKworU1JDUkVWID0gIjQwN2E3ZWNhNzY2NDMxMjU3ZGNkMWRhMTUxNzVjYzM2YTFiYjIyZDAiCitQViA9ICIxLjUrZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgT3B0aW9ucyAtIHJwbSwgcXQ0LCBndGsKK1BBQ0tBR0VDT05GSUcgPz89ICJycG0iCisKK1JQTV9SREVQID0gIiR7UE59LWJhY2tlbmQtcnBtIgorUVRfUkRFUCA9ICIke1BOfS1pbnRlcmZhY2UtcXQ0IgorR1RLX1JERVAgPSAiJHtQTn0taW50ZXJmYWNlLWd0ayIKKworUlBNX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKK1FUX1JERVBfY2xhc3MtbmF0aXZlID0gIiIKK0dUS19SREVQX2NsYXNzLW5hdGl2ZSA9ICIiCisKK1JQTV9SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitRVF9SREVQX2NsYXNzLW5hdGl2ZXNkayA9ICIiCitHVEtfUkRFUF9jbGFzcy1uYXRpdmVzZGsgPSAiIgorCitQQUNLQUdFQ09ORklHW3JwbV0gPSAiLCxycG0sJHtSUE1fUkRFUH0iCitQQUNLQUdFQ09ORklHW3F0NF0gPSAiLCxxdDQteDExLCR7UVRfUkRFUH0iCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLCxndGsrLCR7R1RLX1JERVB9IgorCitpbmhlcml0IGRpc3R1dGlscworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICMgV2UgZG9uJ3Qgc3VwcG9ydCB0aGUgZm9sbG93aW5nIGl0ZW1zCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvc2xhY2sKKyAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9hcmNoCisgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvaW50ZXJmYWNlcy9xdAorCisgICAjIFRlbXBvcmFyeSwgZGViaWFuIHN1cHBvcnQgaW4gT0UgaXMgbWlzc2luZyB0aGUgcHl0aG9uIG1vZHVsZQorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9hcHRjaGFubmVsc3luYy5weSoKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvZGViZGlyLnB5KgorICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL2RlYgorCisgICAjIERpc2FibGUgYXV0b21hdGljIGNoYW5uZWwgZGV0ZWN0aW9uCisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2RldGVjdHN5cy5weSoKKworICAgIyBEaXNhYmxlIGxhbmRzY2FwZSBzdXBwb3J0CisgICBybSAtZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9wbHVnaW5zL2xhbmRzY2FwZS5weSoKKworICAgIyBEaXNhYmxlIHVycG1pIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy91cnBtaWNoYW5uZWxzeW5jLnB5KgorCisgICAjIERpc2FibGUgeXVtIGNoYW5uZWwgc3VwcG9ydAorICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy95dW1jaGFubmVsc3luYy5weSoKKworICAgIyBEaXNhYmxlIHp5cHBlciBjaGFubmVsIHN1cHBvcnQKKyAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L3BsdWdpbnMvenlwcGNoYW5uZWxzeW5jLnB5KgorCisgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdycG0nLCAncnBtJywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvcGx1Z2lucy9ycG1kaXIucHkqCisgICAgICBybSAtcmYgJHtEfSR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvc21hcnQvYmFja2VuZHMvcnBtCisgICBmaQorCisgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdxdDQnLCAncXQ0JywgJycsIGQpfSIgXTsgdGhlbgorICAgICAgcm0gLXJmICR7RH0ke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQ0CisgICBmaQorCisgICBpZiBbIC16ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdndGsrJywgJ2d0aycsICcnLCBkKX0iIF07IHRoZW4KKyAgICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9pbnRlcmZhY2VzL2d0aworICAgZmkKK30KKworYWRkX25hdGl2ZV93cmFwcGVyKCkgeworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9zbWFydCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisgICAgICAgIHNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0vc21hcnQKKyAgICAgICAgYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKyAgICAgICAgYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK1BBQ0tBR0VTID0gIiR7UE59LWRldiAke1BOfS1kYmcgJHtQTn0tZG9jIHNtYXJ0cG0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncnBtJywgJyR7UE59LWJhY2tlbmQtcnBtJywgJycsIGQpfSBcCisgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdxdDQnLCAnJHtQTn0taW50ZXJmYWNlLXF0NCcsICcnLCBkKX0gXAorICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ3RrJywgJyR7UE59LWludGVyZmFjZS1ndGsnLCAnJywgZCl9IFwKKyAgICAgICAgICAgICR7UE59LWludGVyZmFjZS1pbWFnZXMgJHtQTn0iCisKK1JERVBFTkRTX3NtYXJ0cG0gPSAiJHtQTn0iCisKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1iYWNrZW5kLXJwbSBweXRob24tY29kZWNzIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLXhtbCBweXRob24tZmNudGwgXAorICAgICAgICAgICAgICAgICAgIHB5dGhvbi1waWNrbGUgcHl0aG9uLWNyeXB0IHB5dGhvbi1jb21wcmVzc2lvbiBweXRob24tc2hlbGwgXAorICAgICAgICAgICAgICAgICAgIHB5dGhvbi1yZXNvdXJjZSBweXRob24tbmV0Y2xpZW50IHB5dGhvbi10aHJlYWRpbmcgcHl0aG9uLXVuaXhhZG1pbiBweXRob24tcHByaW50IgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworUkRFUEVORFNfJHtQTn0tYmFja2VuZC1ycG0gPSAicHl0aG9uLXJwbSIKKworUkRFUEVORFNfJHtQTn0taW50ZXJmYWNlLXF0NCA9ICJxdDQteDExICR7UE59LWludGVyZmFjZS1pbWFnZXMiCitSREVQRU5EU18ke1BOfS1pbnRlcmZhY2UtZ3RrID0gImd0aysgJHtQTn0taW50ZXJmYWNlLWltYWdlcyIKKworRklMRVNfc21hcnRwbSA9ICIke2JpbmRpcn0vc21hcnQiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9zbWFydC9iYWNrZW5kcy9ycG0vLmRlYnVnIgorCitGSUxFU18ke1BOfS1iYWNrZW5kLXJwbSA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2JhY2tlbmRzL3JwbSIKKworRklMRVNfJHtQTn0taW50ZXJmYWNlLXF0NCA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvcXQ0IgorRklMRVNfJHtQTn0taW50ZXJmYWNlLWd0ayA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvZ3RrIgorRklMRVNfJHtQTn0taW50ZXJmYWNlLWltYWdlcyA9ICIke2RhdGFkaXJ9LyR7YmFzZWxpYn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3NtYXJ0L2ludGVyZmFjZXMvaW1hZ2VzIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24tc21tYXBfMC45LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY1OGJlOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLXNtbWFwXzAuOS4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGEgc2xpZGluZyB3aW5kb3cgbWVtb3J5IG1hcCBtYW5hZ2VyIgorREVTQ1JJUFRJT04gPSAiQSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHNsaWRpbmcgbWVtb3J5IG1hcCB0byBcCitoZWxwIHVuaWZ5aW5nIG1lbW9yeSBtYXBwZWQgYWNjZXNzIG9uIDMyIGFuZCA2NCBiaXQgc3lzdGVtcyBhbmQgdG8gaGVscCBcCittYW5hZ2luZyByZXNvdXJjZXMgbW9yZSBlZmZpY2llbnRseS4iCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0aHViLmNvbS9naXRweXRob24tZGV2ZWxvcGVycy9HaXRQeXRob24iCitTRUNUSU9OID0gImRldmVsL3B5dGhvbiIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUEtHLUlORk87YmVnaW5saW5lPTg7ZW5kbGluZT04O21kNT1lOTEwYjM1YjBlZjRlMWY2NjViOWE3NWQ2YWZiNzcwOSIKKworU1JDX1VSSSA9ICJodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9zL3NtbWFwL3NtbWFwLSR7UFZ9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNzkzMmQ1YWNlMjA2YmY0YWUxNTE5OGNmMzZmYjZhYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZTJiNjJiNDk3YmQ1ZjBhZmViYzAwMmVkYTRkOTBkZjlkMjA5YzMwZWYyNTdlODY3M2M5MGE2YjVjMTE5ZDYyIgorCitTID0gIiR7V09SS0RJUn0vc21tYXAtJHtQVn0iCisKK2luaGVyaXQgc2V0dXB0b29scworCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvZGVjcyBweXRob24tbW1hcCBweXRob24tbGFuZyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4YWI4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYwpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIlRoZSBQeXRob24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCitMSUNFTlNFID0gIlBTRnYyIgorU0VDVElPTiA9ICJkZXZlbC9weXRob24iCisjIGJ1bXAgdGhpcyBvbiBldmVyeSBjaGFuZ2UgaW4gY29udHJpYi9weXRob24vZ2VuZXJhdGUtbWFuaWZlc3QtMi43LnB5CitJTkNfUFIgPSAicjEiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRmZjNkMDBmMDQ5NTQ1ODYyOTkyZDJkMDk3ODMxYTEzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9mdHAvcHl0aG9uLyR7UFZ9L1B5dGhvbi0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzOGQ1MzBmN2VmYzM3M2Q2NGE4ZmIxNjM3ZTNiYWFhNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MGQyN2UxNGVhN2UwMzU3MDAyNjg1MGUyZTUwYmE3MWFkMjBiN2ViMzEwMzVhYWRhMWNmM2RlZjhmOGQ0OTE2IgorCitQWVRIT05fTUFKTUlOID0gIjIuNyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUFlUSE9OTFNCT1BUUyA9ICItLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucyIKK1BZVEhPTkxTQk9QVFNfbGludXhzdGRiYXNlID0gImFjX2N2X3NpemVvZl9vZmZfdD04IgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLXdpdGgtdGhyZWFkcyBcCisgIC0td2l0aC1weW1hbGxvYyBcCisgIC0td2l0aG91dC1jeHgtbWFpbiBcCisgIC0td2l0aC1zaWduYWwtbW9kdWxlIFwKKyAgLS1lbmFibGUtc2hhcmVkIFwKKyAgLS1lbmFibGUtaXB2Nj0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAneWVzJywgJ25vJywgZCl9IFwKKyAgYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD1ubyBhY19jdl9oZWFkZXJfYmx1ZXRvb3RoX2g9bm8gXAorICAke1BZVEhPTkxTQk9QVFN9IFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDEtdXNlLXByb3Blci10b29scy1mb3ItY3Jvc3MtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1N2NhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAxLXVzZS1wcm9wZXItdG9vbHMtZm9yLWNyb3NzLWJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK1dlIG5lZWQgdG8gZW5zdXJlIG91ciBob3N0IHRvb2xzIGdldCBydW4gZHVyaW5nIGJ1aWxkLCBub3QgdGhlIGZyZXNobHkKK2J1aWx0IGNyb3NzLXRvb2xzICh0aGlzIHdpbGwgbm90IHdvcmspLCBzbyB3ZSBpbnRyb2R1Y2UgSE9TVFBZVEhPTiBhbmQgSE9TVFBHRU4uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTIzNCw2ICsyMzQsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBQYXJzZXIKKyBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKKytIT1NUUEdFTj0JJChQR0VOKSQoRVhFKQorIAorIFBTUkNTPQkJXAorIAkJUGFyc2VyL2FjY2VsZXIuYyBcCitAQCAtNDQ1LDcgKzQ0Niw3IEBAICQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkEKKyAJCQkkKEJMRExJQlJBUlkpICQoTElCUykgJChNT0RMSUJTKSAkKFNZU0xJQlMpICQoTERMQVNUKQorIAorIHBsYXRmb3JtOiAkKEJVSUxEUFlUSE9OKSBweWJ1aWxkZGlyLnR4dAorLQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtYyAnaW1wb3J0IHN5cyA7IGZyb20gc3lzY29uZmlnIGltcG9ydCBnZXRfcGxhdGZvcm0gOyBwcmludCBnZXRfcGxhdGZvcm0oKSsiLSIrc3lzLnZlcnNpb25bMDozXScgPnBsYXRmb3JtCisrCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtIDsgcHJpbnQgZ2V0X3BsYXRmb3JtKCkrIi0iK3N5cy52ZXJzaW9uWzA6M10nID5wbGF0Zm9ybQorIAorICMgQ3JlYXRlIGJ1aWxkIGRpcmVjdG9yeSBhbmQgZ2VuZXJhdGUgdGhlIHN5c2NvbmZpZyBidWlsZC10aW1lIGRhdGEgdGhlcmUuCisgIyBweWJ1aWxkZGlyLnR4dCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVpbGQgZGlyIGFuZCBpcyB1c2VkIGZvcgorQEAgLTYxMSw3ICs2MTIsNyBAQCBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wCisgJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCisgCQkkKE1BS0UpICQoUEdFTikKKy0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisrCQkkKEhPU1RQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKyAkKEdSQU1NQVJfQyk6ICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisgCQkkKE1BS0UpICQoR1JBTU1BUl9IKQorIAkJdG91Y2ggJChHUkFNTUFSX0MpCitAQCAtMTA0MywyNyArMTA0NCwyNyBAQCBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMCisgCQkJJChERVNURElSKSQoTElCREVTVCkvZGlzdHV0aWxzL3Rlc3RzIDsgXAorIAlmaQorIAlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKSAtZiBcCisgCQkteCAnYmFkX2NvZGluZ3xiYWRzeW50YXh8c2l0ZS1wYWNrYWdlc3xsaWIydG8zL3Rlc3RzL2RhdGEnIFwKKyAJCSQoREVTVERJUikkKExJQkRFU1QpCisgCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10dCAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkgLWYgXAorIAkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCisgCQkkKERFU1RESVIpJChMSUJERVNUKQorIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLVdpIC10ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorKwkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCisgCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAtdCAtTyAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKysJCSQoSE9TVFBZVEhPTikgLVdpIC10dCAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKyAJCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCisgCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CisrCQkkKEhPU1RQWVRIT04pIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKy0JCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKysJCSQoSE9TVFBZVEhPTikgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9QYXR0ZXJuR3JhbW1hci50eHQKKyAKKyAjIENyZWF0ZSB0aGUgUExBVERJUiBzb3VyY2UgZGlyZWN0b3J5LCBpZiBvbmUgd2Fzbid0IGRpc3RyaWJ1dGVkLi4KKyAkKHNyY2RpcikvTGliLyQoUExBVERJUik6CitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC0zMzQsNiArMzM0LDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgIHNlbGYuZmFpbGVkLmFwcGVuZChleHQubmFtZSkKKyAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcqKiogV0FSTklORzogcmVuYW1pbmcgIiVzIiBzaW5jZSBpbXBvcnRpbmcgaXQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZhaWxlZDogJXMnICUgKGV4dC5uYW1lLCB3aHkpLCBsZXZlbD0zKQorKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5pbnBsYWNlCisgICAgICAgICAgICAgYmFzZW5hbWUsIHRhaWwgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4dF9maWxlbmFtZSkKKyAgICAgICAgICAgICBuZXduYW1lID0gYmFzZW5hbWUgKyAiX2ZhaWxlZCIgKyB0YWlsCitAQCAtNTU4LDYgKzU1OSw5IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgICAgICMgWFhYIE9taXR0ZWQgbW9kdWxlczogZ2wsIHB1cmUsIGRsLCBTR0ktc3BlY2lmaWMgbW9kdWxlcworIAorKyAgICAgICAgbGliX2RpcnMgPSBbIG9zLmdldGVudigiU1RBR0lOR19MSUJESVIiKSwgIG9zLmdldGVudigiU1RBR0lOR19CQVNFTElCRElSIikgXQorKyAgICAgICAgaW5jX2RpcnMgPSBbIG9zLmdldGVudigiU1RBR0lOR19JTkNESVIiKSBdCisrCisgICAgICAgICAjCisgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbW9kdWxlcyBhcmUgYWxsIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFuZCBjb21waWxlCisgICAgICAgICAjIG9uIHByZXR0eSBtdWNoIGFueSBQT1NJWGlzaCBwbGF0Zm9ybS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBjZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDMtZml4LXRraW50ZXItZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1dlIG5lZWQgdG8gc3VwcGx5IFNUQUdJTkdfSU5DRElSIGhlcmUsIG90aGVyd2lzZSB0aGUgVGsgaGVhZGVycword2lsbCBub3QgYmUgZm91bmQuCisKK1NpZ25lZC1vZmYtYnk6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLmRlPgorU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK1JlYmFzZWQgZm9yIHB5dGhvbi0yLjcuOQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggOGZlMWZiOC4uNjdlZGE3NCAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTE4OTIsNyArMTg5Miw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgZG90dmVyc2lvbiA9IGRvdHZlcnNpb25bOi0xXSArICcuJyArIGRvdHZlcnNpb25bLTFdCisgICAgICAgICAgICAgdGNsX2luY2x1ZGVfc3ViID0gW10KKyAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiA9IFtdCistICAgICAgICAgICAgZm9yIGRpciBpbiBpbmNfZGlyczoKKysgICAgICAgICAgICBmb3IgZGlyIGluIFtvcy5nZXRlbnYoIlNUQUdJTkdfSU5DRElSIildOgorICAgICAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0Y2wiICsgZG90dmVyc2lvbl0KKyAgICAgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gW2RpciArIG9zLnNlcCArICJ0ayIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViICs9IHRjbF9pbmNsdWRlX3N1YgorQEAgLTE5MTEsMjIgKzE5MTEsNiBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAgICAgaWYgZGlyIG5vdCBpbiBpbmNsdWRlX2RpcnM6CisgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoZGlyKQorIAorLSAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYyBkaXJlY3RvcmllcworLSAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnc3Vub3M1JzoKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjYvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYjY0JykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjUvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2xpYicpCistICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICMgQXNzdW1lIGRlZmF1bHQgbG9jYXRpb24gZm9yIFgxMQorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvbGliJykKKy0KKyAgICAgICAgICMgSWYgQ3lnd2luLCB0aGVuIHZlcmlmeSB0aGF0IFggaXMgaW5zdGFsbGVkIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICAgICAgIHgxMV9pbmMgPSBmaW5kX2ZpbGUoJ1gxMS9YbGliLmgnLCBbXSwgaW5jbHVkZV9kaXJzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDUtZW5hYmxlLWN0eXBlcy1jcm9zcy1idWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjODc0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLzA1LWVuYWJsZS1jdHlwZXMtY3Jvc3MtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorUmViYXNlZCBmb3IgcHl0aG9uIDIuNy45CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKyMgQ1R5cGVzIG5lZWQgdG8ga25vdyB0aGUgYWN0dWFsIGhvc3Qgd2UgYXJlIGJ1aWxkaW5nIG9uLgorIyBTaWduZWQtT2ZmOiBNaWNoYWVsIERpZXRyaWNoIDxtZHRAZW1kZXRlLmRlPgorCitJbmRleDogUHl0aG9uLTIuNy45L3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMi43Ljkvc2V0dXAucHkKK0BAIC0yMDI4LDEyICsyMDI4LDEyIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAKKyAgICAgICAgICAgICAgICAgIyBQYXNzIGVtcHR5IENGTEFHUyBiZWNhdXNlIHdlJ2xsIGp1c3QgYXBwZW5kIHRoZSByZXN1bHRpbmcKKyAgICAgICAgICAgICAgICAgIyBDRkxBR1MgdG8gUHl0aG9uJ3M7IC1nIG9yIC1PMiBpcyB0byBiZSBhdm9pZGVkLgorLSAgICAgICAgICAgICAgICBjbWQgPSAiY2QgJXMgJiYgZW52IENGTEFHUz0nJyAnJXMvY29uZmlndXJlJyAlcyIgXAorLSAgICAgICAgICAgICAgICAgICAgICAlIChmZmlfYnVpbGRkaXIsIGZmaV9zcmNkaXIsICIgIi5qb2luKGNvbmZpZ19hcmdzKSkKKysgICAgICAgICAgICAgICAgY21kID0gIihjZCAlcyAmJiBhdXRvY29uZiAtVyBjcm9zcykgJiYgKGNkICVzICYmIGVudiBDRkxBR1M9JycgJyVzL2NvbmZpZ3VyZScgJXMpIiBcCisrICAgICAgICAgICAgICAgICAgICAlIChmZmlfc3JjZGlyLCBmZmlfYnVpbGRkaXIsIGZmaV9zcmNkaXIsICIgIi5qb2luKGNvbmZpZ19hcmdzKSkKKyAKKyAgICAgICAgICAgICAgICAgcmVzID0gb3Muc3lzdGVtKGNtZCkKKyAgICAgICAgICAgICAgICAgaWYgcmVzIG9yIG5vdCBvcy5wYXRoLmV4aXN0cyhmZmlfY29uZmlnZmlsZSk6CistICAgICAgICAgICAgICAgICAgICBwcmludCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBfY3R5cGVzIG1vZHVsZSIKKysgICAgICAgICAgICAgICAgICAgIHByaW50ICJGYWlsZWQgdG8gY29uZmlndXJlIF9jdHlwZXMgbW9kdWxlIChyZXM9JWQpIG9yIG1pc3NpbmcgY29uZmZpbGU9JXMiICUgKCByZXMsIGZmaV9jb25maWdmaWxlICkKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorIAorICAgICAgICAgICAgIGZmaWNvbmZpZyA9IHt9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi8wNi1hdm9pZF91c3JfbGliX3Rlcm1jYXBfcGF0aF9pbl9saW5raW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUyY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhlIHBvaXNvbiBkaXJlY3RvcmllcyBwYXRjaCBoYXMgZGV0ZWN0ZWQgbGlicmFyeSBwYXRoIGlzc3VlIHdoaWxlIAorY29tcGlsaW5nIHRoZSBweXRob24gaW4gY3Jvc3MgZW52aXJvbm1lbnQsIGFzIHNlZW4gYmVsbG93LgorCit3YXJuaW5nOiBsaWJyYXJ5IHNlYXJjaCBwYXRoICIvdXNyL2xpYi90ZXJtY2FwIiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uCisKK1RoaXMgUGF0Y2ggZml4ZXMgdGhpcyBpc3N1ZSBpbiB0aGUgcHl0aG9uIGJ1aWxkIGVudmlyb25tZW50LgorMTEgT2N0IDIwMTAKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKKzIwMTEvMDkvMjkKK1JlYmFzZWQgZm9yIHB5dGhvbiAyLjcuMgorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zZXR1cC5weSBiL3NldHVwLnB5CitpbmRleCA2N2VkYTc0Li41OWM1MzdlIDEwMDY0NAorLS0tIGEvc2V0dXAucHkKKysrKyBiL3NldHVwLnB5CitAQCAtNzYxLDEyICs3NjEsMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICBwYXNzICMgSXNzdWUgNzM4NDogQWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMgb3IgdGluZm8uCisgICAgICAgICAgICAgZWxpZiBjdXJzZXNfbGlicmFyeToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCistICAgICAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnL3Vzci9saWIvdGVybWNhcCddLAorKyAgICAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CisgICAgICAgICAgICAgICAgIHJlYWRsaW5lX2xpYnMuYXBwZW5kKCd0ZXJtY2FwJykKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdyZWFkbGluZScsIFsncmVhZGxpbmUuYyddLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9saWIvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfbGlua19hcmdzPXJlYWRsaW5lX2V4dHJhX2xpbmtfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1yZWFkbGluZV9saWJzKSApCisgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYWRkLW1kNW1vZHVsZS1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZmVhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9Nb2R1bGVzL1NldHVwLmRpc3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9Nb2R1bGVzL1NldHVwLmRpc3QJMjAxMS0wNi0xMSAwODo0NjoyNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMi43LjIvTW9kdWxlcy9TZXR1cC5kaXN0CTIwMTEtMTItMjcgMTU6NTE6NDEuMjQ0NjIzMjE5IC0wODAwCitAQCAtMjQ4LDcgKzI0OCw3IEBACisgIyBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0sIGRlc2NyaWJlZCBpbiBSRkMgMTMyMS4gIFRoZSBuZWNlc3NhcnkgZmlsZXMKKyAjIG1kNS5jIGFuZCBtZDUuaCBhcmUgaW5jbHVkZWQgaGVyZS4KKyAKKy0jX21kNSBtZDVtb2R1bGUuYyBtZDUuYworK19tZDUgbWQ1bW9kdWxlLmMgbWQ1LmMKKyAKKyAKKyAjIFRoZSBfc2hhIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBTSEEgY2hlY2tzdW0gYWxnb3JpdGhtcy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3BhcmFsbGVsX21ha2VfcmFjZXNfb25fcGdlbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWJhZTMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfcGFyYWxsZWxfbWFrZV9yYWNlc19vbl9wZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdm9pZHMgcGFyYWxsZWwgbWFrZSByYWNlcyBsaW5raW5nIGVycm9ycyB3aGVuIG1ha2luZyBQYXJzZXIvUEdFTgorCistIEltcGxlbWVudHMgUmljaGFyZCBQdXJkaWUncyBpZGVhCisKK1NpZ25lZC1PZmYtQnk6IFJpY2hhcmQgUHVyZGllIDxyaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnPgorU2lnbmVkLU9mZi1CeTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMi43LjkvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorQEAgLTYxMSwxMiArNjExLDEwIEBAIE1vZHVsZXMvZ3JwbW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL2cKKyAKKyBNb2R1bGVzL3B3ZG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wd2Rtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCisgCistJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpCisrJChHUkFNTUFSX0gpOiAkKEdSQU1NQVJfSU5QVVQpICQoUEdFTlNSQ1MpICQoUEdFTikKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKy0JCSQoTUFLRSkgJChQR0VOKQorIAkJJChIT1NUUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCisgJChHUkFNTUFSX0MpOiAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorLQkJJChNQUtFKSAkKEdSQU1NQVJfSCkKKyAJCXRvdWNoICQoR1JBTU1BUl9DKQorIAorICQoUEdFTik6CSQoUEdFTk9CSlMpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4YzU3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaApAQCAtMCwwICsxLDI1IEBACitfdGtpbnRlciBtb2R1bGUgbmVlZHMgdGsgbW9kdWxlIGFsb25nIHdpdGggdGNsLiB0ayBpcyBub3QgeWV0IGludGVncmF0ZWQKK2luIHlvY3RvIHNvIHdlIHNraXAgdGhlIGNoZWNrIGZvciB0aGlzIG1vZHVsZS4KK0F2b2lkIGEgd2FybmluZyBieSBub3QgYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE4OjM4LjUwMDEzNjY0NyArMDMwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTA1IDIzOjE5OjM1Ljg4ODEzNDk2OSArMDMwMAorQEAgLTE2MzQsOCArMTYzNCwxMCBAQAorICAgICAgICAgIyBDYWxsIHRoZSBtZXRob2QgZm9yIGRldGVjdGluZyB3aGV0aGVyIF90a2ludGVyIGNhbiBiZSBjb21waWxlZAorICAgICAgICAgc2VsZi5kZXRlY3RfdGtpbnRlcihpbmNfZGlycywgbGliX2RpcnMpCisgCistICAgICAgICBpZiAnX3RraW50ZXInIG5vdCBpbiBbZS5uYW1lIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc106CistICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKysgICAgICAgICMgdGtpbnRlciBtb2R1bGUgd2lsbCBub3QgYmUgYXZhbGFpYmxlIGFzIHlvY3RvCisrICAgICAgICAjIGRvZXNuJ3QgaGF2ZSB0ayBpbnRlZ3JhdGVkICh5ZXQpCisrICAgICAgICAjaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorKyAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnX3RraW50ZXInKQorIAorICAgICAgICAgcmV0dXJuIG1pc3NpbmcKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzdlMGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYXZvaWRfd2FybmluZ19mb3Jfc3Vub3Nfc3BlY2lmaWNfbW9kdWxlLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK3N1bmF1ZGlvZGV2IG1vZHVsZSBpcyBzdW5vcyBzcGVjaWZpYyBzbyB3ZSBhdm9pZCBhIHdhcm5pbmcgYnkgbm90IAorYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTA1IDIyOjI5OjE4LjA0OTE5NjYwOCArMDMwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTA1IDIyOjI5OjU3LjUwNTE5NTQ1MyArMDMwMAorQEAgLTE1MjIsOCArMTUyMiw5IEBACisgICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnc3Vub3M1JzoKKyAgICAgICAgICAgICAjIFN1bk9TIHNwZWNpZmljIG1vZHVsZXMKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzdW5hdWRpb2RldicsIFsnc3VuYXVkaW9kZXYuYyddKSApCistICAgICAgICBlbHNlOgorLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdzdW5hdWRpb2RldicpCisrICAgICAgICAjIElmIHBsYXRmb3JtIGlzIG5vdCBzdW5vcyB3YXJuaW5nIGlzIHVzZWxlc3MKKysgICAgICAgICNlbHNlOgorKyAgICAgICAgIyAgICBtaXNzaW5nLmFwcGVuZCgnc3VuYXVkaW9kZXYnKQorIAorICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgIyBfc2Nwcm94eQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYnVpbGRkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9idWlsZGRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDYyOWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vYnVpbGRkaXIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorV2hlbiBjcm9zcyBjb21waWxpbmcgcHl0aG9uLCB3ZSB1c2VkIHRvIG5lZWQgdG8gaW5zdGFsbCB0aGUgTWFrZWZpbGUsIHB5Y29uZmlnLmggCithbmQgdGhlIHB5dGhvbiBsaWJyYXJ5IHRvIHRoZWlyIGZpbmFsIGxvY2F0aW9uIGJlZm9yZSBiZWluZyBhYmxlIHRvIGNvbXBpbGUgdGhlIAorcmVzdCBvZiBweXRob24uIFRoaXMgY2hhbmdlIGFsbG93cyB1cyB0byBwb2ludCBweXRob24gYXQgaXRzIG93biBzb3VyY2Ugd2hlbgorYnVpbGRpbmcsIGF2b2lkaW5nIGEgdmFyaWV0eSBvZiBzeXNyb290IHN0YWdpbmcgaXNzdWVzIGFuZCBzaW1wbGlmeWluZyB0aGUgbWFpbgorcHl0aG9uIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDEyLzExLzEzCisKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMi43LjkvTGliL3N5c2NvbmZpZy5weQorQEAgLTkzLDYgKzkzLDcgQEAgX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkKKyBfRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkKKyBfQ09ORklHX1ZBUlMgPSBOb25lCisgX1VTRVJfQkFTRSA9IE5vbmUKKytfUFlUSE9OQlVJTERESVIgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9OQlVJTERESVIiLCBOb25lKQorIAorIGRlZiBfc2FmZV9yZWFscGF0aChwYXRoKToKKyAgICAgdHJ5OgorQEAgLTEwMCw3ICsxMDEsOSBAQCBkZWYgX3NhZmVfcmVhbHBhdGgocGF0aCk6CisgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgcmV0dXJuIHBhdGgKKyAKKy1pZiBzeXMuZXhlY3V0YWJsZToKKytpZiBfUFlUSE9OQlVJTERESVI6CisrICAgIF9QUk9KRUNUX0JBU0UgPSBfUFlUSE9OQlVJTERESVIKKytlbGlmIHN5cy5leGVjdXRhYmxlOgorICAgICBfUFJPSkVDVF9CQVNFID0gb3MucGF0aC5kaXJuYW1lKF9zYWZlX3JlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyBlbHNlOgorICAgICAjIHN5cy5leGVjdXRhYmxlIGNhbiBiZSBlbXB0eSBpZiBhcmd2WzBdIGhhcyBiZWVuIGNoYW5nZWQgYW5kIFB5dGhvbiBpcworSW5kZXg6IFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtMjYsNiArMjYsOSBAQCBFWEVDX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWNfCisgIyBsaXZlIGluIHByb2plY3QvUENCdWlsZDkuICBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYW4geDY0IFdpbmRvd3MgYnVpbGQsCisgIyBpdCdsbCBsaXZlIGluIHByb2plY3QvUENidWlsZC9hbWQ2NC4KKyBwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKKytfUFlUSE9OQlVJTERESVIgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9OQlVJTERESVIiLCBOb25lKQorK2lmIF9QWVRIT05CVUlMRERJUjoKKysgICAgcHJvamVjdF9iYXNlID0gX1BZVEhPTkJVSUxERElSCisgaWYgb3MubmFtZSA9PSAibnQiIGFuZCAicGNidWlsZCIgaW4gcHJvamVjdF9iYXNlWy04Ol0ubG93ZXIoKToKKyAgICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwcm9qZWN0X2Jhc2UsIG9zLnBhdGgucGFyZGlyKSkKKyAjIFBDL1ZTNy4xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jZ2lfcHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jZ2lfcHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1MDRmOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NnaV9weS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitMaWIvY2dpLnB5OiBVcGRhdGUgdGhlIHNjcmlwdCBhcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5Lm9yaWcJMjAxMC0wOC0wMSAyMjoxNDoyNy4wMDAwMDAwMDAgLTA1MDAKKysrKyBQeXRob24tMi42LjYvTGliL2NnaS5weQkyMDExLTA5LTIxIDE1OjI4OjQwLjQ3ODIwODYzMSAtMDUwMAorQEAgLTEsMTMgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3B5dGhvbgorLQorLSMgTk9URTogdGhlIGFib3ZlICIvdXNyL2xvY2FsL2Jpbi9weXRob24iIGlzIE5PVCBhIG1pc3Rha2UuICBJdCBpcworLSMgaW50ZW50aW9uYWxseSBOT1QgIi91c3IvYmluL2VudiBweXRob24iLiAgT24gbWFueSBzeXN0ZW1zCistIyAoZS5nLiBTb2xhcmlzKSwgL3Vzci9sb2NhbC9iaW4gaXMgbm90IGluICRQQVRIIGFzIHBhc3NlZCB0byBDR0kKKy0jIHNjcmlwdHMsIGFuZCAvdXNyL2xvY2FsL2JpbiBpcyB0aGUgZGVmYXVsdCBkaXJlY3Rvcnkgd2hlcmUgUHl0aG9uIGlzCistIyBpbnN0YWxsZWQsIHNvIC91c3IvYmluL2VudiB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCBweXRob24uICBHcmFudGVkLAorLSMgYmluYXJ5IGluc3RhbGxhdGlvbnMgYnkgTGludXggdmVuZG9ycyBvZnRlbiBpbnN0YWxsIFB5dGhvbiBpbgorLSMgL3Vzci9iaW4uICBTbyBsZXQgdGhvc2UgdmVuZG9ycyBwYXRjaCBjZ2kucHkgdG8gbWF0Y2ggdGhlaXIgY2hvaWNlCistIyBvZiBpbnN0YWxsYXRpb24uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIAorICIiIlN1cHBvcnQgbW9kdWxlIGZvciBDR0kgKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0cy4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jaGVjay1pZi10YXJnZXQtaXMtNjRiLW5vdC1ob3N0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNjJkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9jaGVjay1pZi10YXJnZXQtaXMtNjRiLW5vdC1ob3N0LnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorRGF0ZTogICBTdW4gTWFyIDI1IDAyOjAyOjI3IDIwMTIgKzAyMDAKKworVGhpcyBwYXRjaCB3YXMgYWRkZWQgZm9yIDY0Yml0IGhvc3QgbWFjaGluZXMuIEluIHRoZSBjb21waWxlIHByb2Nlc3MgcHl0aG9uCitpcyBjaGVja2luZyBpZiBwbGF0Zm9ybSBpcyBhIDY0Yml0IHBsYXRmb3JtIHVzaW5nIHN5cy5tYXhpbnQgd2hpY2ggaXMgdGhlIGhvc3QncwordmFsdWUuIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGlzc3VlIHNvIHRoYXQgcHl0aG9uIHdvdWxkIGNoZWNrIGlmIFRBUkdFVCBtYWNoaW5lCitpcyA2NGJpdCBub3QgdGhlIEhPU1QgbWFjaGluZS4gSW4gdGhpcyB3YXkgd2lsbCBoYXZlICJkbCIgYW5kICJpbWFnZW9wIiBtb2R1bGVzCitidWlsdCBpZiBIT1NUIG1hY2hpbmUgaXMgNjRiaXQgYnV0IHRoZSB0YXJnZXQgbWFjaGluZSBpcyAzMmJpdC4KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTItMDMtMjUgMDE6MTA6NDEuNTQwMTYzMTg3ICswMjAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTItMDMtMjUgMDE6MjY6MDYuMDkyNTM5OTkwICswMjAwCitAQCAtMjMsNiArMjMsMjEgQEAKKyAjIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgdG8gaG9sZCB0aGUgbGlzdCBvZiBtb2R1bGVzIHRvIGJlIGRpc2FibGVkLgorIGRpc2FibGVkX21vZHVsZV9saXN0ID0gW10KKyAKKytkZWYgdGFyZ2V0X2lzXzY0Yml0X3BsYXRmb3JtICgpOgorKyAgICAiIiIKKysgICAgSW4gY2FzZSBvZiBjcm9zcy1jb21waWxlLCBzb21lIG1vZHVsZXMgYXJlIG5vdCBidWlsZCBhcyBzZXR1cCBjaGVja3MgaWYgSE9TVAorKyAgICBpcyA2NGJpdCBhbmQgbm90IFRBUkdFVC4KKysgICAgQXMgcHl0aG9uIHdhcyBidWlsdCBmb3IgVEFSR0VUIHdlIGNhbiBjaGVjayB0aGlzIGluIHB5Y29uZmlnLmggaW4gdGhpcyB3YXk6CisrCVNpemVvZiBMT05HIG9uIGEgMzIgYml0IHBsYXRmb3JtIGlzIDQgYnl0ZXMKKysJU2l6ZW9mIExPTkcgb24gYSA2NCBiaXQgcGxhdGZvcm0gaXMgOCBieXRlcworKyAgICAiIiIKKysgICAgcHljb25mID0gb3BlbigicHljb25maWcuaCIpLnJlYWQoKQorKyAgICBhdXggPSByZS5zZWFyY2gociIjcypkZWZpbmVccytTSVpFT0ZfTE9OR1xzKzhccyoiLCBweWNvbmYpCisrICAgIGlmIGF1eCBpcyBub3QgTm9uZToKKysJcmV0dXJuIFRydWUKKysgICAgZWxzZToKKysJcmV0dXJuIEZhbHNlCisrCisgZGVmIGFkZF9kaXJfdG9fbGlzdChkaXJsaXN0LCBkaXIpOgorICAgICAiIiJBZGQgdGhlIGRpcmVjdG9yeSAnZGlyJyB0byB0aGUgbGlzdCAnZGlybGlzdCcgKGF0IHRoZSBmcm9udCkgaWYKKyAgICAgMSkgJ2RpcicgaXMgbm90IGFscmVhZHkgaW4gJ2Rpcmxpc3QnCitAQCAtNjI4LDcgKzY0Myw3IEBACisgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdhdWRpb29wJywgWydhdWRpb29wLmMnXSkgKQorIAorICAgICAgICAgIyBEaXNhYmxlZCBvbiA2NC1iaXQgcGxhdGZvcm1zCistICAgICAgICBpZiBzeXMubWF4aW50ICE9IDkyMjMzNzIwMzY4NTQ3NzU4MDdMOgorKyAgICAgICAgaWYgbm90IHRhcmdldF9pc182NGJpdF9wbGF0Zm9ybSgpOgorICAgICAgICAgICAgICMgT3BlcmF0aW9ucyBvbiBpbWFnZXMKKyAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdpbWFnZW9wJywgWydpbWFnZW9wLmMnXSkgKQorICAgICAgICAgZWxzZToKK0BAIC0xNDE4LDcgKzE0MzMsNyBAQAorICAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX2NvZGVjc18lcycgJSBsb2MpCisgCisgICAgICAgICAjIER5bmFtaWMgbG9hZGluZyBtb2R1bGUKKy0gICAgICAgIGlmIHN5cy5tYXhpbnQgPT0gMHg3ZmZmZmZmZjoKKysgICAgICAgIGlmIG5vdCB0YXJnZXRfaXNfNjRiaXRfcGxhdGZvcm0oKToKKyAgICAgICAgICAgICAjIFRoaXMgcmVxdWlyZXMgc2l6ZW9mKGludCkgPT0gc2l6ZW9mKGxvbmcpID09IHNpemVvZihjaGFyKikKKyAgICAgICAgICAgICBkbF9pbmMgPSBmaW5kX2ZpbGUoJ2RsZmNuLmgnLCBbXSwgaW5jX2RpcnMpCisgICAgICAgICAgICAgaWYgKGRsX2luYyBpcyBub3QgTm9uZSkgYW5kIChwbGF0Zm9ybSBub3QgaW4gWydhdGhlb3MnXSk6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXgtbWFrZWZpbGUtZm9yLXB0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4LW1ha2VmaWxlLWZvci1wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkxMTJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4LW1ha2VmaWxlLWZvci1wdGVzdC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitBZGQgJ2J1aWxkLXRlc3QnIGFuZCAncnVudGVzdC1URVNUUycgdGFyZ2V0cyB0byBNYWtlZmlsZSwgdG8gYnVpbGQgYW5kIHJ1biB0ZXN0cworY3Jvc3MtY29tcGlsZWQuCisKK1NpZ25lZC1vZmYtYnk6IFR1ZG9yIEZsb3JlYSA8dHVkb3IuZmxvcmVhQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLXJ1TiBhL01ha2VmaWxlLnByZS5pbiBiL01ha2VmaWxlLnByZS5pbgorLS0tIGEvTWFrZWZpbGUucHJlLmluCTIwMTMtMDYtMjcgMTA6NDQ6MTEuMDMzODQwNTMyICswMjAwCisrKysgYi9NYWtlZmlsZS5wcmUuaW4JMjAxMy0wNi0yNyAxMDo0NDozOS41NzI2MzUyNzMgKzAyMDAKK0BAIC03MDksMTQgKzcwOSwxOSBAQAorICMgZ2VuZXJhdGVkIGJ5dGVjb2RlLiAgVGhpcyBpcyBzb21ldGltZXMgYSB2ZXJ5IHNoeSBidWcgbmVlZGluZyBhIGxvdCBvZgorICMgc2FtcGxlIGRhdGEuCisgCistVEVTVE9QVFM9CS1sICQoRVhUUkFURVNUT1BUUykKKytURVNUT1BUUz0JLWwgLXYgJChFWFRSQVRFU1RPUFRTKQorIFRFU1RQUk9HPQkkKHNyY2RpcikvTGliL3Rlc3QvcmVncnRlc3QucHkKKy1URVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtV2QgLTMgLUUgLXR0ICQoVEVTVFBZVEhPTk9QVFMpCistdGVzdDoJCWFsbCBwbGF0Zm9ybQorLQkJLWZpbmQgJChzcmNkaXIpL0xpYiAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCisrVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpICQoQlVJTERQWVRIT04pIC1XZCAtMyAtRSAtdHQgJChURVNUUFlUSE9OT1BUUykKKyt0ZXN0OgkJYnVpbGQtdGVzdAorKwkJJChNQUtFKSBydW50ZXN0LVRFU1RTCisrCisrcnVudGVzdC1URVNUUzoKKysJCS1maW5kICQoc3JjZGlyKSAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCisgCQktJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAkKFRFU1RPUFRTKQorIAkJJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAkKFRFU1RPUFRTKQorIAorK2J1aWxkLXRlc3Q6CWFsbCBwbGF0Zm9ybQorKworIHRlc3RhbGw6CWFsbCBwbGF0Zm9ybQorIAkJLWZpbmQgJChzcmNkaXIpL0xpYiAtbmFtZSAnKi5weVtjb10nIC1wcmludCB8IHhhcmdzIHJtIC1mCisgCQkkKFRFU1RQWVRIT04pICQoc3JjZGlyKS9MaWIvY29tcGlsZWFsbC5weQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjYyZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSw3NyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtFbWJlZGRlZCBzcGVjaWZpY10KKworVGhpcyBwYXRjaCBmaXhlcyBpc3N1aW5nIHdpdGggZGlmZmVyZW50IGxpYmRpciBsaWtlIGxpYjY0LgorVGhpcyBwYXRjaCBtYWtlcyB0aGUgbmF0aXZlIHB5dGhvbiBiaW5hcnkgbW9kdWxlcyBmaW5kYWJsZQoraW4gdGhlIGluc3RhbGwgcHJvY2VzcyBvZiB0aGUgaG9zdCBweXRob24uCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzAzLzE0CisKK1VwZGF0ZWQgZm9yIHB5dGhvbiAyLjcuMworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTIvMDUvMDEKKworUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKK0BAIC05LDcgKzksNyBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworICAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgICdwbGF0aW5jbHVkZSc6ICd7cGxhdGJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKK0BAIC02Nyw3ICs2Nyw3IEBAIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF91c2VyJzogeworICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDQ2LDI3ICsxMDQ2LDI3IEBAIGxpYmluc3RhbGw6CWJ1aWxkX2FsbCAkKHNyY2RpcikvTGliLyQoUEwKKyAJCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvTW9kdWxlcy94eG1vZHVsZS5jIFwKKyAJCQkkKERFU1RESVIpJChMSUJERVNUKS9kaXN0dXRpbHMvdGVzdHMgOyBcCisgCWZpCistCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCisrCVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKy0JUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorKwlQWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSQoUlVOU0hBUkVEKSBcCisgCQkkKEhPU1RQWVRIT04pIC1XaSAtdHQgJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCisgCQktZCAkKExJQkRFU1QpIC1mIFwKKyAJCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorIAkJJChERVNURElSKSQoTElCREVTVCkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtV2kgLXR0ICQoREVTVERJUikkKExJQkRFU1QpL2NvbXBpbGVhbGwucHkgXAorIAkJLWQgJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzIC1mIFwKKyAJCS14IGJhZHN5bnRheCAkKERFU1RESVIpJChMSUJERVNUKS9zaXRlLXBhY2thZ2VzCistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL0dyYW1tYXIudHh0CistCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpICQoUlVOU0hBUkVEKSBcCisrCS1QWVRIT05QQVRIPSQoREVTVERJUikkKExJQkRFU1QpOiR7Q1JPU1NQWVRIT05QQVRIfSAkKFJVTlNIQVJFRCkgXAorIAkJJChIT1NUUFlUSE9OKSAtbSBsaWIydG8zLnBnZW4yLmRyaXZlciAkKERFU1RESVIpJChMSUJERVNUKS9saWIydG8zL1BhdHRlcm5HcmFtbWFyLnR4dAorIAorICMgQ3JlYXRlIHRoZSBQTEFURElSIHNvdXJjZSBkaXJlY3RvcnksIGlmIG9uZSB3YXNuJ3QgZGlzdHJpYnV0ZWQuLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGFhZmIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAord2hlbiBidWlsZGluZyBweXRob24gZm9yIHFlbXV4ODYtNjQgb24gdWJ1bnR1IDExLjEwLzY0Yml0CitpdCBncm9wZXMgaW50byBob3N0IGluY2x1ZGVzIGFuZCB0aGVuIG1peGVzIHRoZW0gd2l0aCBjcm9zcworaW5jbHVkZXMgYW5kIGFzIGEgcmVzdWx0IHNvbWUgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUgYW5kIGxpbmsKK29uZSBvZiB0aGUgbW9kdWxlcyBpcyBweXRob24tZWxlbWVudHRyZWUgd2hpY2ggaXMgdGhlbiBub3QKK2ZvdW5kIGR1cmluZyBpbWFnZSBjcmVhdGlvbgorCitQcm9ibGUgaXMgdGhhdCBzZXR1cC5weSB0cmllcyB0byBhZGQgbmF0aXZlIGluY2x1ZGVzIHRoYXQgbmV3ZXIKK3VidW50dSBoYXMgaW50cm9kdWNlZCBmb3IgbXVsdGlhcmNoIHN1cHBvcnQuIEJ1dCB0aGF0IHNob3VsZAorb25seSBoYXBwZW4gZm9yIG5hdGl2ZSBidWlsZHMgYW5kIG5vdCBjcm9zcyBidWlsZGluZyBweXRob24KK3NvIHdlIGFkZCBhIGNoZWNrIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggYmEyZDI0Mi4uYmY4NTliZSAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTM5Myw2ICszOTMsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgCisgICAgICAgICBpZiBub3QgZmluZF9leGVjdXRhYmxlKCdkcGtnLWFyY2hpdGVjdHVyZScpOgorICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ0NST1NTX0NPTVBJTEUnKSBpcyBub3QgTm9uZToKKysgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIG9wdCA9ICcnCisgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgb3B0ID0gJy10JyArIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSE9TVF9HTlVfVFlQRScpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL211bHRpbGliLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmEwZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9tdWx0aWxpYi5wYXRjaApAQCAtMCwwICsxLDI5NiBAQAorUmViYXNlZCBmb3IgcHl0aG9uLTIuNy45CitTaWduZWQtT2ZmLUJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9jb25maWd1cmUuYWMKKysrKyBQeXRob24tMi43LjkvY29uZmlndXJlLmFjCitAQCAtNzM2LDYgKzczNiwxMCBAQCBTdW5PUyopCisgICAgIDs7CisgZXNhYworIAorK0FDX1NVQlNUKExJQikKKytBQ19NU0dfQ0hFQ0tJTkcoTElCKQorK0xJQj1gYmFzZW5hbWUgJHtsaWJkaXJ9YAorK0FDX01TR19SRVNVTFQoJExJQikKKyAKKyBBQ19TVUJTVChMSUJSQVJZKQorIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQorSW5kZXg6IFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0yLjcuOS9JbmNsdWRlL3B5dGhvbnJ1bi5oCitAQCAtMTA4LDYgKzEwOCw3IEBAIFB5QVBJX0ZVTkMoY2hhciAqKSBQeV9HZXRQYXRoKHZvaWQpOworIC8qIEluIHRoZWlyIG93biBmaWxlcyAqLworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRWZXJzaW9uKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRQbGF0Zm9ybSh2b2lkKTsKKytQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0TGliKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb3B5cmlnaHQodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvbXBpbGVyKHZvaWQpOworIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrKyBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKK0BAIC0yMiw2ICsyMiw4IEBAIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCisgZnJvbSBzaXRlIGltcG9ydCBVU0VSX1NJVEUKKyAKKyAKKytsaWJuYW1lID0gc3lzLmxpYgorKworIGlmIHN5cy52ZXJzaW9uIDwgIjIuMiI6CisgICAgIFdJTkRPV1NfU0NIRU1FID0geworICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAorQEAgLTQyLDcgKzQ0LDcgQEAgZWxzZToKKyBJTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICd1bml4X3ByZWZpeCc6IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvJytsaWJuYW1lKycvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAorICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTExOSw4ICsxMTksMTEgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgorICAgICAgICAgcHJlZml4ID0gcGxhdF9zcGVjaWZpYyBhbmQgRVhFQ19QUkVGSVggb3IgUFJFRklYCisgCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKy0gICAgICAgIGxpYnB5dGhvbiA9IG9zLnBhdGguam9pbihwcmVmaXgsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpYiIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisrICAgICAgICBpZiBwbGF0X3NwZWNpZmljIG9yIHN0YW5kYXJkX2xpYjoKKysgICAgICAgICAgICBsaWIgPSBzeXMubGliCisrICAgICAgICBlbHNlOgorKyAgICAgICAgICAgIGxpYiA9ICJsaWIiCisrICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LCBsaWIsICJweXRob24iICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkpCisgICAgICAgICBpZiBzdGFuZGFyZF9saWI6CisgICAgICAgICAgICAgcmV0dXJuIGxpYnB5dGhvbgorICAgICAgICAgZWxzZToKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3B5ZG9jLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9weWRvYy5weQorQEAgLTM4Myw3ICszODMsNyBAQCBjbGFzcyBEb2M6CisgCisgICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5IikKKy0gICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAibGliIiwKKysgICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIitzeXMudmVyc2lvblswOjNdKQorICAgICAgICAgaWYgKGlzaW5zdGFuY2Uob2JqZWN0LCB0eXBlKG9zKSkgYW5kCisgICAgICAgICAgICAgKG9iamVjdC5fX25hbWVfXyBpbiAoJ2Vycm5vJywgJ2V4Y2VwdGlvbnMnLCAnZ2MnLCAnaW1wJywKK0luZGV4OiBQeXRob24tMi43LjkvTGliL3NpdGUucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvc2l0ZS5weQorQEAgLTI4OCwxMyArMjg4LDE4IEBAIGRlZiBnZXRzaXRlcGFja2FnZXMoKToKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorICAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1weXRob24iKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKy0gICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcGFja2FnZXMiKSkKKyAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICAjIGZvciBmcmFtZXdvcmsgYnVpbGRzICpvbmx5KiB3ZSBhZGQgdGhlIHN0YW5kYXJkIEFwcGxlCisgICAgICAgICAgICAgIyBsb2NhdGlvbnMuCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi9zeXNjb25maWcucHkKK0BAIC03LDEwICs3LDEwIEBAIGZyb20gb3MucGF0aCBpbXBvcnQgcGFyZGlyLCByZWFscGF0aAorIAorIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKy0gICAgICAgICdwbGF0c3RkbGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdGluY2x1ZGUnOiAne3BsYXRiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vYmluJywKK0BAIC02NSwxMCArNjUsMTAgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICAgfSwKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CistICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43Ljkub3JpZy9MaWIvdGVzdC90ZXN0X2RsLnB5CisrKysgUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3RfZGwucHkKK0BAIC00LDEwICs0LDExIEBACisgaW1wb3J0IHVuaXR0ZXN0CisgZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZQorIGRsID0gaW1wb3J0X21vZHVsZSgnZGwnLCBkZXByZWNhdGVkPVRydWUpCisraW1wb3J0IHN5cworIAorIHNoYXJlZGxpYnMgPSBbCistICAgICgnL3Vzci9saWIvbGliYy5zbycsICdnZXRwaWQnKSwKKy0gICAgKCcvbGliL2xpYmMuc28uNicsICdnZXRwaWQnKSwKKysgICAgKCcvdXNyLycrc3lzLmxpYisnL2xpYmMuc28nLCAnZ2V0cGlkJyksCisrICAgICgnLycrc3lzLmxpYisnL2xpYmMuc28uNicsICdnZXRwaWQnKSwKKyAgICAgKCcvdXNyL2Jpbi9jeWd3aW4xLmRsbCcsICdnZXRwaWQnKSwKKyAgICAgKCcvdXNyL2xpYi9saWJjLmR5bGliJywgJ2dldHBpZCcpLAorICAgICBdCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKK0BAIC0yNDEsMTIgKzI0MSwxNiBAQCBjbGFzcyBIZWxwZXJGdW5jdGlvbnNUZXN0cyh1bml0dGVzdC5UZXN0CisgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzJdLCB3YW50ZWQpCisgICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6CisgICAgICAgICAgICAgIyBPUyBYIG5vbi1mcmFtd2V3b3JrIGJ1aWxkcywgTGludXgsIEZyZWVCU0QsIGV0YworLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAyKQorICAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAncHl0aG9uJyArIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQorKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YW50ZWQgaW4gZGlycykKKyAgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcHl0aG9uJykKKy0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMV0sIHdhbnRlZCkKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisrICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgc3lzLmxpYiwgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXRlLXBhY2thZ2VzJykKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisrICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgc3lzLmxpYiwgJ3NpdGUtcHl0aG9uJykKKysgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FudGVkIGluIGRpcnMpCisgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICMgb3RoZXIgcGxhdGZvcm1zCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCitJbmRleDogUHl0aG9uLTIuNy45L0xpYi90cmFjZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL0xpYi90cmFjZS5weQorKysrIFB5dGhvbi0yLjcuOS9MaWIvdHJhY2UucHkKK0BAIC03NTQsMTAgKzc1NCwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCisgCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRwcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMucHJlZml4LCAibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLnByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gcy5yZXBsYWNlKCIkZXhlY19wcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IG9zLnBhdGgubm9ybXBhdGgocykKKyAgICAgICAgICAgICAgICAgaWdub3JlX2RpcnMuYXBwZW5kKHMpCitJbmRleDogUHl0aG9uLTIuNy45L01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL01ha2VmaWxlLnByZS5pbgorKysrIFB5dGhvbi0yLjcuOS9NYWtlZmlsZS5wcmUuaW4KK0BAIC04Nyw2ICs4Nyw3IEBAIFBZX0NGTEFHUz0JJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoQ0ZMQUcKKyAKKyAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCisgTUFDSERFUD0JQE1BQ0hERVBACisrTElCPQkJQExJQkAKKyAKKyAjIE11bHRpYXJjaCBkaXJlY3RvcnkgKG1heSBiZSBlbXB0eSkKKyBNVUxUSUFSQ0g9CUBNVUxUSUFSQ0hACitAQCAtMTA2LDcgKzEwNyw3IEBAIExJQkRJUj0JCUBsaWJkaXJACisgTUFORElSPQkJQG1hbmRpckAKKyBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKKyBDT05GSU5DTFVERURJUj0JJChleGVjX3ByZWZpeCkvaW5jbHVkZQorLVNDUklQVERJUj0JJChwcmVmaXgpL2xpYgorK1NDUklQVERJUj0JJChwcmVmaXgpL0BMSUJACisgCisgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcworIEJJTkxJQkRFU1Q9CSQoTElCRElSKS9weXRob24kKFZFUlNJT04pCitAQCAtNTk4LDYgKzU5OSw3IEBAIE1vZHVsZXMvZ2V0cGF0aC5vOiAkKHNyY2RpcikvTW9kdWxlcy9nZXQKKyAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKKyAJCS1EVkVSU0lPTj0nIiQoVkVSU0lPTikiJyBcCisgCQktRFZQQVRIPSciJChWUEFUSCkiJyBcCisrCQktRExJQj0nIiQoTElCKSInIFwKKyAJCS1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL2dldHBhdGguYworIAorIE1vZHVsZXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCitAQCAtNjQwLDcgKzY0Miw3IEBAICQoQVNUX0MpOiAkKEFTVF9BU0RMKSAkKEFTRExHRU5fRklMRVMpCisgUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQorIAorIFB5dGhvbi9nZXRwbGF0Zm9ybS5vOiAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKy0JCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworKwkJJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUExBVEZPUk09JyIkKE1BQ0hERVApIicgLURMSUI9JyIkKExJQikiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKyAKKyBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCisgCQkkKENDKSAtYyAkKFBZX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCitJbmRleDogUHl0aG9uLTIuNy45L01vZHVsZXMvZ2V0cGF0aC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvTW9kdWxlcy9nZXRwYXRoLmMKKysrKyBQeXRob24tMi43LjkvTW9kdWxlcy9nZXRwYXRoLmMKK0BAIC0xMTYsOSArMTE2LDExIEBACisgI2RlZmluZSBFWEVDX1BSRUZJWCBQUkVGSVgKKyAjZW5kaWYKKyAKKysjZGVmaW5lIExJQl9QWVRIT04gTElCICIvcHl0aG9uIiBWRVJTSU9OCisrCisgI2lmbmRlZiBQWVRIT05QQVRICistI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiL2xpYi9weXRob24iIFZFUlNJT04gIjoiIFwKKy0gICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiL2xpYi1keW5sb2FkIgorKyNkZWZpbmUgUFlUSE9OUEFUSCBQUkVGSVggIi8iIExJQl9QWVRIT04gIjoiIFwKKysgICAgICAgICAgICAgIEVYRUNfUFJFRklYICIvIiBMSUJfUFlUSE9OICIvbGliLWR5bmxvYWQiCisgI2VuZGlmCisgCisgI2lmbmRlZiBMQU5ETUFSSworQEAgLTEyOSw3ICsxMzEsNyBAQCBzdGF0aWMgY2hhciBwcmVmaXhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgY2hhciBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Cisgc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Cistc3RhdGljIGNoYXIgbGliX3B5dGhvbltdID0gImxpYi9weXRob24iIFZFUlNJT047Cisrc3RhdGljIGNoYXIgbGliX3B5dGhvbltdID0gTElCX1BZVEhPTjsKKyAKKyBzdGF0aWMgdm9pZAorIHJlZHVjZShjaGFyICpkaXIpCitJbmRleDogUHl0aG9uLTIuNy45L1B5dGhvbi9nZXRwbGF0Zm9ybS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL2dldHBsYXRmb3JtLmMKKysrKyBQeXRob24tMi43LjkvUHl0aG9uL2dldHBsYXRmb3JtLmMKK0BAIC0xMCwzICsxMCwxMyBAQCBQeV9HZXRQbGF0Zm9ybSh2b2lkKQorIHsKKyAJcmV0dXJuIFBMQVRGT1JNOworIH0KKysKKysjaWZuZGVmIExJQgorKyNkZWZpbmUgTElCICJsaWIiCisrI2VuZGlmCisrCisrY29uc3QgY2hhciAqCisrUHlfR2V0TGliKHZvaWQpCisreworKwlyZXR1cm4gTElCOworK30KK0luZGV4OiBQeXRob24tMi43LjkvUHl0aG9uL3N5c21vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy45Lm9yaWcvUHl0aG9uL3N5c21vZHVsZS5jCisrKysgUHl0aG9uLTIuNy45L1B5dGhvbi9zeXNtb2R1bGUuYworQEAgLTE0MzcsNiArMTQzNyw4IEBAIF9QeVN5c19Jbml0KHZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRQbGF0Zm9ybSgpKSk7CisrICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJpbmdfRnJvbVN0cmluZyhQeV9HZXRMaWIoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nKFB5X0dldFByb2dyYW1GdWxsUGF0aCgpKSk7CisgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInByZWZpeCIsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9wYXJhbGxlbC1tYWtlaW5zdC1jcmVhdGUtYmluZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTFjYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaApAQCAtMCwwICsxLDE5IEBACitXaGVuIHVzaW5nIG1ha2UgLWogd2l0aCB0aGUgJ2luc3RhbGwnIHRhcmdldCwgaXQncyBwb3NzaWJsZSBmb3IgYWx0YmluaW5zdGFsbAorKHdoaWNoIG5vcm1hbGx5IGNyZWF0ZXMgQklORElSKSBhbmQgbGliYWluc3RhbGwgKHdoaWNoIGRvZXNuJ3QsIHRob3VnaCBpdAoraW5zdGFsbHMgcHl0aG9uLWNvbmZpZyB0aGVyZSkgdG8gcmFjZSwgcmVzdWx0aW5nIGluIGEgZmFpbHVyZSBkdWUgdG8KK2F0dGVtcHRpbmcgdG8gaW5zdGFsbCBweXRob24tY29uZmlnIGludG8gYSBub25leGlzdGVudCBCSU5ESVIuIEVuc3VyZSBpdCBhbHNvCitleGlzdHMgaW4gdGhlIGxpYmFpbnN0YWxsIHRhcmdldC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBQeXRob24tMi43LjMub3JpZy9NYWtlZmlsZS5wcmUuaW4KKysrKyBQeXRob24tMi43LjMvTWFrZWZpbGUucHJlLmluCitAQCAtMTAwOCw3ICsxMDA4LDcgQEAgTElCUEw9CQkkKExJQlApL2NvbmZpZworIExJQlBDPQkJJChMSUJESVIpL3BrZ2NvbmZpZworCisgbGliYWluc3RhbGw6CWFsbCBweXRob24tY29uZmlnCistCUBmb3IgaSBpbiAkKExJQkRJUikgJChMSUJQKSAkKExJQlBMKSAkKExJQlBDKTsgXAorKwlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUCkgJChMSUJQTCkgJChMSUJQQykgJChCSU5ESVIpOyBcCisJZG8gXAorCQlpZiB0ZXN0ICEgLWQgJChERVNURElSKSQkaTsgdGhlbiBcCisJCQllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJCRpIjsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vcHl0aG9uLTIuNy4zLXJlbW92ZS1ic2RiLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNmJlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworUmVtb3ZlIHRoZSBSUEFUSCB0byBhdm9pZCBRQSBpc3N1ZSB3YXJuaW5nLgorCitSUDogQWRkZWQgc2Vjb25kYXJ5IHVubmVjZXNzYXJ5IHJwYXRoIHRvIHRoZSBsaXN0IDIwMTIvOC83CitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCisKK0luZGV4OiBQeXRob24tMi43LjMvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjMub3JpZy9zZXR1cC5weQkyMDEyLTA4LTA3IDEwOjQxOjU4LjU2MDEzMjUyOSArMDAwMAorKysrIFB5dGhvbi0yLjcuMy9zZXR1cC5weQkyMDEyLTA4LTA3IDExOjA5OjQ3Ljg1MjA5NDUxNSArMDAwMAorQEAgLTEwNDIsNyArMTA0Miw2IEBACisgICAgICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdfYnNkZGInLCBbJ19ic2RkYi5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBbJ2JzZGRiLmgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPWRibGliX2RpciwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnM9ZGJfaW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzPWRibGlicykpCisgICAgICAgICBlbHNlOgorQEAgLTEyNTIsNyArMTI1MSw2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImJ1aWxkaW5nIGRibSB1c2luZyBiZGIiCisgICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKCdkYm0nLCBbJ2RibW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfZGlycz1kYmxpYl9kaXIsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWVfbGlicmFyeV9kaXJzPWRibGliX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzPWRiX2luY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdIQVZFX0JFUktEQl9IJywgTm9uZSksCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmOWVlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorIworI1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gcnVuIHB5dGhvbiB0ZXN0IHN1aXRlcworCittYWtlIC1mIExJQkRJUi9weXRob24vcHRlc3QvTWFrZWZpbGUgLWsgcnVudGVzdC1URVNUUyBzcmNkaXI9TElCRElSL3B5dGhvbjIuNyBURVNUUFJPRz1MSUJESVIvcHl0aG9uMi43L3Rlc3QvcmVncnRlc3QucHkgfCBzZWQgLWUgJy9cLlwuXC4gb2svIHMvXi9QQVNTOiAvZycgLWUgJy9cLlwuXC4gW0VSUk9SfEZBSUxdLyBzL14vRkFJTDogL2cnIC1lICcvXC5cLlwuIHNraXBwZWQvIHMvXi9TS0lQOiAvZycgLWUgJ3MvIFwuXC5cLiBvay8vZycgLWUgJ3MvIFwuXC5cLiBFUlJPUi8vZycgLWUgJ3MvIFwuXC5cLiBGQUlMLy9nJyAtZSAncy8gXC5cLlwuIHNraXBwZWQvL2cnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NlYXJjaF9kYl9oX2luX2luY19kaXJzX2FuZF9hdm9pZF93YXJuaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2I1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZWFyY2hfZGJfaF9pbl9pbmNfZGlyc19hbmRfYXZvaWRfd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitweXRob24gc2hvdWxkIHNlYXJjaCBmb3IgZGIuaCBpbiBpbmNfZGlycyBhbmQgbm90IGluIGEgaGFyZGNvZGVkIHBhdGguCitJZiBkYi5oIGlzIGZvdW5kIGJ1dCBIQVNIVkVSU0lPTiBpcyBub3QgMiB3ZSBhdm9pZCBhIHdhcm5pbmcgYnkgbm90IAorYWRkaW5nIHRoaXMgbW9kdWxlIHRvIG1pc3NpbmcgdmFyaWFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzdHJpYnV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CisKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGI4ODc4MDguLmFlNTE2MDcgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC0xMjM3LDYgKzEyMzcsOCBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIHRoZSBtb3JlIHJlY2VudCBiZXJrZWxleWRiJ3MgZGIuaCBmaWxlIGZpcnN0IGluIHRoZSBpbmNsdWRlIHBhdGgKKyAgICAgICAgICMgd2hlbiBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgYW5kIGl0IHdpbGwgZmFpbC4KKyAgICAgICAgIGYgPSAiL3Vzci9pbmNsdWRlL2RiLmgiCisrICAgICAgICBpZiBsZW4oaW5jX2RpcnMpICE9IDA6CisrICAgICAgICAgICAgZiA9IG9zLnBhdGguam9pbihpbmNfZGlyc1swXSwgImRiLmgiKQorIAorICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICBpZiBpc19tYWNvc3hfc2RrX3BhdGgoZik6CitAQCAtMTI1Nyw4ICsxMjU5LDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bGlicmFyaWVzKSkKKyAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignYnNkZGIxODUnLCBbJ2JzZGRibW9kdWxlLmMnXSkpCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKKysgICAgICAgICAgICAjIElmIGEgbmV3ZXIgdmVyc2lvbiBpcyBkZXRlY3RlZCBkb24ndCByZXBvcnQgYW4gdXNlbGVzcworKyAgICAgICAgICAgICMgd2FybmluZworKyAgICAgICAgICAgICNlbHNlOgorKyAgICAgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ2JzZGRiMTg1JykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXBfcHlfc2tpcF9jcm9zc19pbXBvcnRfY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjZGI5NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NldHVwX3B5X3NraXBfY3Jvc3NfaW1wb3J0X2NoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK1RoaXMgcGF0Y2ggc2tpcHMgb3ZlciB0aGUgJ2ltcG9ydCBjaGVjaycgc2V0dXAucHkgZG9lcyB3aGVuIGJ1aWxkaW5nCitleHRlbnNpb25zLiAgVGhpcyBnZW5lcmFsbHkgd29uJ3Qgd29yayB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZC1zcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0yLjcuMi9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuMi5vcmlnL3NldHVwLnB5CTIwMTEtMTEtMDQgMTY6NDY6MzQuNTUzNzk2NDEwIC0wNTAwCisrKysgUHl0aG9uLTIuNy4yL3NldHVwLnB5CTIwMTEtMTEtMDQgMTY6NTk6NDkuNjkyODAyMzEzIC0wNTAwCitAQCAtMjg3LDYgKzI4NywxNSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4dC5uYW1lLCBzeXMuZXhjX2luZm8oKVsxXSkpCisgICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQorICAgICAgICAgICAgIHJldHVybgorKworKyAgICAgICAgIyBJZiB3ZSdyZSBjcm9zcy1jb21waWxpbmcsIHdlIHdhbnQgdG8gc2tpcCB0aGUgaW1wb3J0IGNoZWNrCisrICAgICAgICAjIGkuZS4gd2Ugc2hvdWxkbid0IGJlIGR5bmFtaWNhbGx5IGxvYWRpbmcgdGFyZ2V0IHNoYXJlZCBsaWJzCisrICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnQ1JPU1NfQ09NUElMRScpIGlzIG5vdCBOb25lOgorKyAgICAgICAgICAgIHNlbGYuYW5ub3VuY2UoCisrICAgICAgICAgICAgICAgICdXQVJOSU5HOiBza2lwcGluZyBpbXBvcnQgY2hlY2sgZm9yIGNyb3NzLWNvbXBpbGVkICIlcyInICUKKysgICAgICAgICAgICAgICAgZXh0Lm5hbWUpCisrICAgICAgICAgICAgcmV0dXJuCisrCisgICAgICAgICAjIFdvcmthcm91bmQgZm9yIE1hYyBPUyBYOiBUaGUgQ2FyYm9uLWJhc2VkIG1vZHVsZXMgY2Fubm90IGJlCisgICAgICAgICAjIHJlbGlhYmx5IGltcG9ydGVkIGludG8gYSBjb21tYW5kLWxpbmUgUHl0aG9uCisgICAgICAgICBpZiAnQ2FyYm9uJyBpbiBleHQuZXh0cmFfbGlua19hcmdzOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXB0d2Vha3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zZXR1cHR3ZWFrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTkxYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vc2V0dXB0d2Vha3MucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorVGhpcyBwYXRjaCByZW1vdmVzIHZhcmlvdXMgd2F5cyBuYXRpdmUgc3lzdGVtIG9wdGlvbnMgY2FuIHBhc3MgaW50byB0aGUgcHl0aG9uIAorY29tcGlsYXRpb24gYW5kIHNvbWVob3cgYnJlYWsgQyBtb2R1bGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIFNwZWNpZmljXQorCitSUCAyMDEyLzA0LzIzCisKK0luZGV4OiBQeXRob24tMi43LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMi43LjIub3JpZy9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjQ3LjI5NTU4MjU1MyArMDAwMAorKysrIFB5dGhvbi0yLjcuMi9zZXR1cC5weQkyMDEyLTA0LTIzIDIwOjAzOjE1LjAwMDAwMDAwMCArMDAwMAorQEAgLTIzMSw3ICsyMzEsMTMgQEAKKyAgICAgICAgICMgY29tcGlsZXJzCisgICAgICAgICBpZiBjb21waWxlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKy0gICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArIGNmbGFncworKyAgICAgICAgICAgICMgTmVlZCB0byBmaWx0ZXIgb3V0IC1pc3lzcm9vdCBmcm9tIHRoZSBmbGFncy4gSWRlYWxseSBzaG91bGQgCisrICAgICAgICAgICAgIyBmaWd1cmUgb3V0IHRhcmdldCBmbGFncyBoZXJlLgorKyAgICAgICAgICAgIGZsYWdzID0gW10KKysgICAgICAgICAgICBmb3IgZiBpbiBjZmxhZ3Muc3BsaXQoKToKKysgICAgICAgICAgICAgICAgaWYgbm90IGYuc3RhcnRzd2l0aCgiLWlzeXN0ZW0iKToKKysgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFwcGVuZChmKQorKyAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgJyAnLmpvaW4oZmxhZ3MpCisgICAgICAgICBzZWxmLmNvbXBpbGVyLnNldF9leGVjdXRhYmxlcygqKmFyZ3MpCisgCisgICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9ucyhzZWxmKQorQEAgLTM5Myw3ICszOTksNiBAQAorICAgICAgICAgIyBpbnRvIGNvbmZpZ3VyZSBhbmQgc3RvcmVkIGluIHRoZSBNYWtlZmlsZSAoaXNzdWUgZm91bmQgb24gT1MgWCAxMC4zKS4KKyAgICAgICAgIGZvciBlbnZfdmFyLCBhcmdfbmFtZSwgZGlyX2xpc3QgaW4gKAorICAgICAgICAgICAgICAgICAoJ0xERkxBR1MnLCAnLVInLCBzZWxmLmNvbXBpbGVyLnJ1bnRpbWVfbGlicmFyeV9kaXJzKSwKKy0gICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1MJywgc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMpLAorICAgICAgICAgICAgICAgICAoJ0NQUEZMQUdTJywgJy1JJywgc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMpKToKKyAgICAgICAgICAgICBlbnZfdmFsID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKGVudl92YXIpCisgICAgICAgICAgICAgaWYgZW52X3ZhbDoKK0BAIC00MTksMTYgKzQyNCwxNiBAQAorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorLSAgICAgICAgICAgICAgICBhbmQgbm90IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJyk6CisrIyAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KSAhPSAnL3VzcicgXAorKyMgICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgorICAgICAgICAgICAgICMgYnVpbGRpbmcgYSBmcmFtZXdvcmsgd2l0aCBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyB0aGFuCisgICAgICAgICAgICAgIyB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZCAoaXNzdWUgIzc0NzMpCistICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJJTkNMVURFRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRElSIikpCisrIyAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmluY2x1ZGVfZGlycywKKysjICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorIAorICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIGhhdmVfdW5pY29kZSA9IHVuaWNvZGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3NpdGVjdXN0b21pemUucHkgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zaXRlY3VzdG9taXplLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MzkwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbi9zaXRlY3VzdG9taXplLnB5CkBAIC0wLDAgKzEsNDUgQEAKKyMgT3BlbkVtYmVkZGVkIHNpdGVjdXN0b21pemUucHkgKEMpIDIwMDItMjAwOCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgR1BMdjIgb3IgbGF0ZXIKKyMgVmVyc2lvbjogMjAwODExMjMKKyMgRmVhdHVyZXM6CisjICogc2V0IHByb3BlciBkZWZhdWx0IGVuY29kaW5nCisjICogZW5hYmxlIHJlYWRsaW5lIGNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyCisjICogbG9hZCBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBzdGFydHVwCisjICogc2F2ZSBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBleGl0IAorCitpbXBvcnQgb3MKKworZGVmIF9fZXhpdGhhbmRsZXIoKToKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKToKKyAgICBpbXBvcnQgYXRleGl0CisgICAgYXRleGl0LnJlZ2lzdGVyKCBfX2V4aXRoYW5kbGVyICkKKworZGVmIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCk6CisgICAgcmVhZGxpbmUuc2V0X2hpc3RvcnlfbGVuZ3RoKCAxMDAwICkKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCggInRhYjogY29tcGxldGUiICkKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworZGVmIF9fZW5hYmxlRGVmYXVsdEVuY29kaW5nKCk6CisgICAgaW1wb3J0IHN5cworICAgIHRyeToKKyAgICAgICAgc3lzLnNldGRlZmF1bHRlbmNvZGluZyggInV0ZjgiICkKKyAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgIHBhc3MKKworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCBybGNvbXBsZXRlciwgcmVhZGxpbmUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIF9fZW5hYmxlRGVmYXVsdEVuY29kaW5nKCkKKyAgICBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKQorICAgIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24vdXNlX3N5c3Jvb3RfbmN1cnNlc19pbnN0ZWFkX29mX2hvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM2NTc4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uL3VzZV9zeXNyb290X25jdXJzZXNfaW5zdGVhZF9vZl9ob3N0LnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1B5dGhvbiB0cmllcyB0byB1c2UgbmN1cnNlc3cgZnJvbSB0aGUgaG9zdCwKK2lmIGl0IGlzIG5vdCBmb3VuZCBjYXVzZXMgYW4gZXJyb3Igb24gY29uZmlndXJlLAord2Ugc2hvdWxkIHVzZSBuY3Vyc2VzdyBmcm9tIHN5c3Jvb3QgaW5zdGVhZAorCisKK1NpZ25lZC1vZmYtYnk6IEFsZWphbmRybyBIZXJuYW5kZXogPGFsZWphbmRyby5oZXJuYW5kZXpAbGludXguaW50ZWwuY29tPgorCitJbmRleDogUHl0aG9uLTIuNy45L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0yLjcuOS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0yLjcuOS9jb25maWd1cmUuYWMKK0BAIC00MzExLDcgKzQzMTEsNyBAQCBmaQorIAorICMgZmlyc3QgY3Vyc2VzIGNvbmZpZ3VyZSBjaGVjaworIGFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKKy1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorK0NQUEZMQUdTPSIkQ1BQRkxBR1MgLUk9L3Vzci9pbmNsdWRlL25jdXJzZXN3IgorIAorIEFDX0NIRUNLX0hFQURFUlMoY3Vyc2VzLmggbmN1cnNlcy5oKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLW5hdGl2ZV8zLjQuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy40LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0ZmYwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1uYXRpdmVfMy40LjMuYmIKQEAgLTAsMCArMSw3NiBAQAorcmVxdWlyZSByZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24uaW5jCisKK1BSID0gIiR7SU5DX1BSfS4wIgorUFlUSE9OX01BSk1JTiA9ICIzLjQiCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8ke1BWfS9QeXRob24tJHtQVn0udGFyLnh6IFwKK2ZpbGU6Ly8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggXAorZmlsZTovL3B5dGhvbi1jb25maWcucGF0Y2ggXAorZmlsZTovLzAwMC1jcm9zcy1jb21waWxlLnBhdGNoIFwKK2ZpbGU6Ly8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaCBcCitmaWxlOi8vMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaCBcCitmaWxlOi8vMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoIFwKK2ZpbGU6Ly8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoIFwKK2ZpbGU6Ly8xMTAtZW5hYmxlLXpsaWIucGF0Y2ggXAorZmlsZTovLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaCBcCitmaWxlOi8vMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggXAorZmlsZTovL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggXAorZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCitmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKK2ZpbGU6Ly9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2ggXAorZmlsZTovL3N5c3Jvb3QtaW5jbHVkZS1oZWFkZXJzLnBhdGNoIFwKK2ZpbGU6Ly91bml4Y2NvbXBpbGVyLnBhdGNoIFwKK2ZpbGU6Ly9tYWtlcmFjZS5wYXRjaCBcCiske0RJU1RST19TUkNfVVJJfSBcCitmaWxlOi8vc3lzY29uZmlnLnB5LWFkZC1fUFlUSE9OX1BST0pFQ1RfU1JDLnBhdGNoIFwKK2ZpbGU6Ly9zZXR1cC5weS1jaGVjay1jcm9zc19jb21waWxpbmctd2hlbi1nZXQtRkxBR1MucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjdkMDkyZDFiYmE2ZTE3ZjBkOWJkMjFiNDllNDQxZGQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1YjM5NjM1MzM3NjhkNWZjMzI1YTRkN2E2YmQ2ZjY2NjcyNjAwMmQ2OTZmMWQzOTllYzA2YjA0M2VhOTk2YjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitFWFRSQU5BVElWRVBBVEggKz0gImJ6aXAyLW5hdGl2ZSIKK0RFUEVORFMgPSAib3BlbnNzbC1uYXRpdmUgYnppcDItcmVwbGFjZW1lbnQtbmF0aXZlIHpsaWItbmF0aXZlIHJlYWRsaW5lLW5hdGl2ZSBzcWxpdGUzLW5hdGl2ZSIKKworaW5oZXJpdCBuYXRpdmUKKworUlBST1ZJREVTICs9ICJweXRob24zLWRpc3R1dGlscy1uYXRpdmUgcHl0aG9uMy1jb21wcmVzc2lvbi1uYXRpdmUgcHl0aG9uMy10ZXh0dXRpbHMtbmF0aXZlIHB5dGhvbjMtY29yZS1uYXRpdmUiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tYmluZGlyPSR7YmluZGlyfS8ke1BOfSAtLXdpdGhvdXQtZW5zdXJlcGlwIgorCitFWFRSQV9PRU1BS0UgPSAnXAorICBCVUlMRF9TWVM9IiIgXAorICBIT1NUX1NZUz0iIiBcCisgIExJQkM9IiIgXAorICBTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSX05BVElWRX0gXAorICBTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorICBMSUI9JHtiYXNlbGlifSBcCisgIEFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorJworCisjIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCitQWVRIT05MU0JPUFRTID0gIiIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlhdXRvcmVjb25mIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgaW5zdGFsbAorCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0vJHtQTn0KKwlpbnN0YWxsIC1tIDA3NTUgUGFyc2VyL3BnZW4gJHtEfSR7YmluZGlyfS8ke1BOfQorCisJIyBNYWtlIHN1cmUgd2UgdXNlIC91c3IvYmluL2VudiBweXRob24KKwlmb3IgUFlUSFNDUklQVCBpbiBgZ3JlcCAtcklsICR7YmluZGlyfS8ke1BOfS9weXRob24gJHtEfSR7YmluZGlyfS8ke1BOfWA7IGRvCisJCXNlZCAtaSAtZSAnMXN8XiMhLip8IyEvdXNyL2Jpbi9lbnYgcHl0aG9uM3wnICRQWVRIU0NSSVBUCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXBpcF82LjEuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1waXBfNi4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmYzMwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1waXBfNi4xLjEuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUaGUgUHlQQSByZWNvbW1lbmRlZCB0b29sIGZvciBpbnN0YWxsaW5nIFB5dGhvbiBwYWNrYWdlcyIKK3NIT01FUEFHRXNzcyA9ICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3BpcCIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NDU2NjViNTMwMzJjMDJiMzVlMjlkZGFiOGU2MWZhOTEiCisKK1NSQ05BTUUgPSAicGlwIgorREVQRU5EUyArPSAicHl0aG9uMyBweXRob24zLXNldHVwdG9vbHMtbmF0aXZlIgorCitTUkNfVVJJID0gIiBcCisgIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcGFja2FnZXMvc291cmNlL3AvJHtTUkNOQU1FfS8ke1NSQ05BTUV9LSR7UFZ9LnRhci5neiBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNmIxOWUwYTkzNGQ5ODJhNWE0Yjc5OGU5NTdjYjZkNDUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODlmM2I2MjZkMjI1ZTA4ZTdmMjBkODUwNDRhZmE0MGY2MTJlYjMyODQ0ODQxNjk4MTNkYzJkMDYzMWYyYTU1NiIKKworUyA9ICIke1dPUktESVJ9LyR7U1JDTkFNRX0tJHtQVn0iCisKK2luaGVyaXQgZGlzdHV0aWxzMworCitESVNUVVRJTFNfSU5TVEFMTF9BUkdTICs9ICItLWluc3RhbGwtbGliPSR7RH0ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCitkb19pbnN0YWxsX3ByZXBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMKK30KKworIyBVc2Ugc2V0dXB0b29scyBzaXRlLnB5IGluc3RlYWQsIGF2b2lkIHNoYXJlZCBzdGF0ZSBpc3N1ZQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgcm0gJHtEfS8ke2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzL3NpdGUucHkKKyAgICBybSAke0R9LyR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMvX19weWNhY2hlX18vc2l0ZS5jcHl0aG9uLTM0LnB5YworfQorCitSREVQRU5EU18ke1BOfSA9ICJcCisgIHB5dGhvbjMtY29tcGlsZSBcCisgIHB5dGhvbjMtaW8gXAorICBweXRob24zLWpzb24gXAorICBweXRob24zLW5ldHNlcnZlciBcCisgIHB5dGhvbjMtc2V0dXB0b29scyBcCisgIHB5dGhvbjMtdW5peGFkbWluIFwKKyAgcHl0aG9uMy14bWxycGMgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLXNldHVwdG9vbHNfMTguMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzE4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwYWM4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy1zZXR1cHRvb2xzXzE4LjIuYmIKQEAgLTAsMCArMSw1NSBAQAorU1VNTUFSWSA9ICJEb3dubG9hZCwgYnVpbGQsIGluc3RhbGwsIHVwZ3JhZGUsIGFuZCB1bmluc3RhbGwgUHl0aG9uIHBhY2thZ2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLnB5dGhvbi5vcmcvc2V0dXB0b29scyIKK1NFQ1RJT04gPSAiZGV2ZWwvcHl0aG9uIgorTElDRU5TRSA9ICJQU0YiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXR1cC5weTtiZWdpbmxpbmU9Nzg7ZW5kbGluZT03ODttZDU9OGEzMTQyNzBkZDdhOGRiY2E3NDE3NzU0MTVmMTcxNmUiCisKK1NSQ05BTUUgPSAic2V0dXB0b29scyIKK0RFUEVORFMgKz0gInB5dGhvbjMiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uMy1uYXRpdmUiCisKK1NSQ19VUkkgPSAiIFwKKyAgaHR0cDovL3B5cGkucHl0aG9uLm9yZy9wYWNrYWdlcy9zb3VyY2Uvcy8ke1NSQ05BTUV9LyR7U1JDTkFNRX0tJHtQVn0udGFyLmd6IFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmI0ZTQ4OTM5ZWYzMTFkNzIwNGY4ZmU5NDA3NjRmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwOTk0YTU4ZGYyN2VhNWRjNTIzNzgyYTYwMTM1N2EyMTk4Yjc0OTNkY2M5OWEzMGQ1MTgyN2EyMzU4NWI1YjFkIgorCitTID0gIiR7V09SS0RJUn0vJHtTUkNOQU1FfS0ke1BWfSIKKworaW5oZXJpdCBkaXN0dXRpbHMzCisKK0RJU1RVVElMU19JTlNUQUxMX0FSR1MgKz0gIi0taW5zdGFsbC1saWI9JHtEfSR7bGliZGlyfS8ke1BZVEhPTl9ESVJ9L3NpdGUtcGFja2FnZXMiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtsaWJkaXJ9LyR7UFlUSE9OX0RJUn0vc2l0ZS1wYWNrYWdlcworfQorIworIyAgVGhlIGluc3RhbGxlciBwdXRzIHRoZSB3cm9uZyBwYXRoIGluIHRoZSBzZXR1cHRvb2xzLnB0aCBmaWxlLiAgQ29ycmVjdCBpdC4KKyMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIHJtICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9zZXR1cHRvb2xzLnB0aAorICAgIG12ICR7RH0ke2JpbmRpcn0vZWFzeV9pbnN0YWxsICR7RH0ke2JpbmRpcn0vZWFzeTNfaW5zdGFsbAorICAgIGVjaG8gIi4vJHtTUkNOQU1FfS0ke1BWfS1weSR7UFlUSE9OX0JBU0VWRVJTSU9OfS5lZ2ciID4gJHtEfSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L3NldHVwdG9vbHMucHRoCit9CisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgcHl0aG9uMy1kaXN0dXRpbHMgXAorICBweXRob24zLWNvbXByZXNzaW9uIFwKKyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJcCisgIHB5dGhvbjMtY3R5cGVzIFwKKyAgcHl0aG9uMy1kaXN0dXRpbHMgXAorICBweXRob24zLWVtYWlsIFwKKyAgcHl0aG9uMy1pbXBvcnRsaWIgXAorICBweXRob24zLW51bWJlcnMgXAorICBweXRob24zLWNvbXByZXNzaW9uIFwKKyAgcHl0aG9uMy1zaGVsbCBcCisgIHB5dGhvbjMtc3VicHJvY2VzcyBcCisgIHB5dGhvbjMtdGV4dHV0aWxzIFwKKyAgcHl0aG9uMy1wa2d1dGlsIFwKKyAgcHl0aG9uMy10aHJlYWRpbmcgXAorICBweXRob24zLW1pc2MgXAorICBweXRob24zLXVuaXR0ZXN0IFwKKyAgcHl0aG9uMy14bWwgXAorIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDAwLWNyb3NzLWNvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwNmE1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaApAQCAtMCwwICsxLDgzIEBACitXZSBjcm9zcyBjb21waWxlIHB5dGhvbi4gVGhpcyBwYXRjaCB1c2VzIHRvb2xzIGZyb20gaG9zdC9uYXRpdmUKK3B5dGhvbiBpbnN0ZWFkIG9mIGluLXRyZWUgdG9vbHMKKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlW0NvbmZpZ3VyYXRpb24gU3BlY2lmaWNdCisKKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8ICAgMjUgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKysgYi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xOTMsNiArMTkzLDcgQEAgTElCT0JKUz0JQExJQk9CSlNACisgCisgUFlUSE9OPQkJcHl0aG9uJChFWEUpCisgQlVJTERQWVRIT049CXB5dGhvbiQoQlVJTERFWEUpCisrSE9TVFBZVEhPTj0JJChCVUlMRFBZVEhPTikKKyAKKyBQWVRIT05fRk9SX0JVSUxEPUBQWVRIT05fRk9SX0JVSUxEQAorIF9QWVRIT05fSE9TVF9QTEFURk9STT1AX1BZVEhPTl9IT1NUX1BMQVRGT1JNQAorQEAgLTIzOSw2ICsyNDAsNyBAQCBMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBQYXJzZXIKKyBQR0VOPQkJUGFyc2VyL3BnZW4kKEVYRSkKKytIT1NUUEdFTj0JJChQR0VOKSQoRVhFKQorIAorIFBTUkNTPQkJXAorIAkJUGFyc2VyL2FjY2VsZXIuYyBcCitAQCAtNDUxLDcgKzQ1Myw3IEBAIGJ1aWxkX2FsbF9nZW5lcmF0ZV9wcm9maWxlOgorIAorIHJ1bl9wcm9maWxlX3Rhc2s6CisgCTogIyBGSVhNRTogY2FuJ3QgcnVuIGZvciBhIGNyb3NzIGJ1aWxkCistCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoUFJPRklMRV9UQVNLKQorKwkkKFJVTlNIQVJFRCkgJChIT1NUUFlUSE9OKSAkKFBST0ZJTEVfVEFTSykKKyAKKyBidWlsZF9hbGxfdXNlX3Byb2ZpbGU6CisgCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1mcHJvZmlsZS11c2UgLWZwcm9maWxlLWNvcnJlY3Rpb24iCitAQCAtNjQwLDcgKzY0Miw3IEBAICQoSU9fT0JKUyk6ICQoSU9fSCkKKyAkKEdSQU1NQVJfSCk6ICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCUAkKE1LRElSX1ApIEluY2x1ZGUKKyAJCSQoTUFLRSkgJChQR0VOKQorLQkJJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpICQoR1JBTU1BUl9IKSAkKEdSQU1NQVJfQykKKysJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQorICQoR1JBTU1BUl9DKTogJChHUkFNTUFSX0gpICQoR1JBTU1BUl9JTlBVVCkgJChQR0VOU1JDUykKKyAJCSQoTUFLRSkgJChHUkFNTUFSX0gpCisgCQl0b3VjaCAkKEdSQU1NQVJfQykKK0BAIC04MjAsNyArODIyLDcgQEAgJChMSUJSQVJZX09CSlMpICQoTU9ET0JKUykgTW9kdWxlcy9weXRobworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyBURVNUT1BUUz0JJChFWFRSQVRFU1RPUFRTKQorLVRFU1RQWVRIT049CSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoVEVTVFBZVEhPTk9QVFMpCisrVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgJChURVNUUFlUSE9OT1BUUykKKyBURVNUUlVOTkVSPQkkKFRFU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3J1bl90ZXN0cy5weQorIFRFU1RUSU1FT1VUPQkzNjAwCisgCitAQCAtMTIyOSw3ICsxMjMxLDcgQEAgZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZToJJChMRExJQlJBUlkpCisgCQlmaTsgXAorIAlkb25lCisgCSQoTE4pIC1mc24gaW5jbHVkZS9weXRob24kKExEVkVSU0lPTikgJChERVNURElSKSQocHJlZml4KS9IZWFkZXJzCistCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CisrCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpICQoSE9TVFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CisgCSQoTE4pIC1mc24gJChWRVJTSU9OKSAkKERFU1RESVIpJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy9DdXJyZW50CisgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC8kKFBZVEhPTkZSQU1FV09SSykgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvJChQWVRIT05GUkFNRVdPUkspCisgCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC9IZWFkZXJzICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL0hlYWRlcnMKK0BAIC0xMjg4LDcgKzEyOTAsNyBAQCBjb25maWcuc3RhdHVzOgkkKHNyY2RpcikvY29uZmlndXJlCisgCisgIyBSdW4gcmVpbmRlbnQgb24gdGhlIGxpYnJhcnkKKyByZWluZGVudDoKKy0JLi8kKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSAtciAkKHNyY2RpcikvTGliCisrCSQoSE9TVFBZVEhPTikgJChzcmNkaXIpL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgLXIgJChzcmNkaXIpL0xpYgorIAorICMgUmVydW4gY29uZmlndXJlIHdpdGggdGhlIHNhbWUgb3B0aW9ucyBhcyBpdCB3YXMgcnVuIGxhc3QgdGltZSwKKyAjIHByb3ZpZGVkIHRoZSBjb25maWcuc3RhdHVzIHNjcmlwdCBleGlzdHMKK0BAIC0xNDE0LDcgKzE0MTYsNyBAQCBmdW5ueToKKyAKKyAjIFBlcmZvcm0gc29tZSB2ZXJpZmljYXRpb24gY2hlY2tzIG9uIGFueSBtb2RpZmllZCBmaWxlcy4KKyBwYXRjaGNoZWNrOgorLQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CisrCSQoUlVOU0hBUkVEKSAkKEhPU1RQWVRIT04pICQoc3JjZGlyKS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKKyAKKyAjIERlcGVuZGVuY2llcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAwMDEtaDJweS1GaXgtaXNzdWUtMTMwMzItd2hlcmUtaXQtZmFpbHMtd2l0aC1Vbmljb2RlRGVjby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ2YjI0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorRnJvbSAyZjVhNGM3MDhkOTBmYThkYjIxZjQ0NmFlODc5Y2ZmNzkzODc0NDhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjAgTWF5IDIwMTMgMjE6MDM6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gaDJweTogRml4IGlzc3VlIDEzMDMyIHdoZXJlIGl0IGZhaWxzIHdpdGggVW5pY29kZURlY29kZUVycm9yCisKK3VzZSB1dGYtOCB0byBvcGVuIHRoZSBmaWxlcworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIFRvb2xzL3NjcmlwdHMvaDJweS5weSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2gycHkucHkgYi9Ub29scy9zY3JpcHRzL2gycHkucHkKK2luZGV4IDRmODcxZDkuLmE1M2ZiZTAgMTAwNzU1CistLS0gYS9Ub29scy9zY3JpcHRzL2gycHkucHkKKysrKyBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQorQEAgLTY5LDEzICs2OSwxMyBAQCBkZWYgbWFpbigpOgorICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBzdGRpblxuJykKKyAgICAgICAgICAgICBwcm9jZXNzKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCkKKyAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicpCisrICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicsIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpCisgICAgICAgICAgICAgaSA9IG91dGZpbGUucmZpbmQoJy4nKQorICAgICAgICAgICAgIGlmIGkgPiAwOiBvdXRmaWxlID0gb3V0ZmlsZVs6aV0KKyAgICAgICAgICAgICBtb2RuYW1lID0gb3V0ZmlsZS51cHBlcigpCisgICAgICAgICAgICAgb3V0ZmlsZSA9IG1vZG5hbWUgKyAnLnB5JworLSAgICAgICAgICAgIG91dGZwID0gb3BlbihvdXRmaWxlLCAndycpCisrICAgICAgICAgICAgb3V0ZnAgPSBvcGVuKG91dGZpbGUsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgICBvdXRmcC53cml0ZSgnIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tICVzXG4nICUgZmlsZW5hbWUpCisgICAgICAgICAgICAgZmlsZWRpY3QgPSB7fQorICAgICAgICAgICAgIGZvciBkaXIgaW4gc2VhcmNoZGlyczoKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlZjI4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMjAtZG9udC1jb21waWxlLXB5dGhvbi1maWxlcy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitEb250IGNyb3NzIGNvbXBpbGUgc2l0ZSBwYWNrYWdlcworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGVbRW1iZWRkZWQtU3BlY2lmaWNdCisKKy0tLQorIE1ha2VmaWxlLnByZS5pbiB8ICAgMTYgLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKysgYi9NYWtlZmlsZS5wcmUuaW4KK0BAIC0xMDc4LDI0ICsxMDc4LDYgQEAgbGliaW5zdGFsbDoJYnVpbGRfYWxsICQoc3JjZGlyKS9MaWIvJChQTAorIAkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9Nb2R1bGVzL3h4bW9kdWxlLmMgXAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkgLWYgXAorLQkJLXggJ2JhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8bGliMnRvMy90ZXN0cy9kYXRhJyBcCistCQkkKERFU1RESVIpJChMSUJERVNUKQorLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpIC1mIFwKKy0JCS14ICdiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfGxpYjJ0bzMvdGVzdHMvZGF0YScgXAorLQkJJChERVNURElSKSQoTElCREVTVCkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgICQoUlVOU0hBUkVEKSBcCistCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1XaSAkKERFU1RESVIpJChMSUJERVNUKS9jb21waWxlYWxsLnB5IFwKKy0JCS1kICQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcyAtZiBcCistCQkteCBiYWRzeW50YXggJChERVNURElSKSQoTElCREVTVCkvc2l0ZS1wYWNrYWdlcworLQktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXAorLQkJJChQWVRIT05fRk9SX0JVSUxEKSAtV2kgLU8gJChERVNURElSKSQoTElCREVTVCkvY29tcGlsZWFsbC5weSBcCistCQktZCAkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMgLWYgXAorLQkJLXggYmFkc3ludGF4ICQoREVTVERJUikkKExJQkRFU1QpL3NpdGUtcGFja2FnZXMKKyAJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKyAJCSQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gbGliMnRvMy5wZ2VuMi5kcml2ZXIgJChERVNURElSKSQoTElCREVTVCkvbGliMnRvMy9HcmFtbWFyLnR4dAorIAktUFlUSE9OUEFUSD0kKERFU1RESVIpJChMSUJERVNUKSAkKFJVTlNIQVJFRCkgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRkZmQyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyBXZSBuZWVkIHRvIHN1cHBseSBTVEFHSU5HX0lOQ0RJUiBoZXJlLCBvdGhlcndpc2UgdGhlIFRrIGhlYWRlcnMKKyMgd2lsbCBub3QgYmUgZm91bmQuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLmRlPgorCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvc2V0dXAucHkJMjAxMi0wOS0yMCAxNToyNDoxNC4wMDkxMjQwMDMgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvc2V0dXAucHkJMjAxMi0wOS0yMCAxNToyNTowOC40NDkxMjQ5NjMgLTA3MDAKK0BAIC0xNjIwLDcgKzE2MjAsNyBAQAorICAgICAgICAgICAgICAgICBkb3R2ZXJzaW9uID0gZG90dmVyc2lvbls6LTFdICsgJy4nICsgZG90dmVyc2lvblstMV0KKyAgICAgICAgICAgICB0Y2xfaW5jbHVkZV9zdWIgPSBbXQorICAgICAgICAgICAgIHRrX2luY2x1ZGVfc3ViID0gW10KKy0gICAgICAgICAgICBmb3IgZGlyIGluIGluY19kaXJzOgorKyAgICAgICAgICAgIGZvciBkaXIgaW4gW29zLmdldGVudigiU1RBR0lOR19JTkNESVIiKV06CisgICAgICAgICAgICAgICAgIHRjbF9pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRjbCIgKyBkb3R2ZXJzaW9uXQorICAgICAgICAgICAgICAgICB0a19pbmNsdWRlX3N1YiArPSBbZGlyICsgb3Muc2VwICsgInRrIiArIGRvdHZlcnNpb25dCisgICAgICAgICAgICAgdGtfaW5jbHVkZV9zdWIgKz0gdGNsX2luY2x1ZGVfc3ViCitAQCAtMTYzOSwyMiArMTYzOSw2IEBACisgICAgICAgICAgICAgaWYgZGlyIG5vdCBpbiBpbmNsdWRlX2RpcnM6CisgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoZGlyKQorIAorLSAgICAgICAgIyBDaGVjayBmb3IgdmFyaW91cyBwbGF0Zm9ybS1zcGVjaWZpYyBkaXJlY3RvcmllcworLSAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnc3Vub3M1JzoKKy0gICAgICAgICAgICBpbmNsdWRlX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL29wZW53aW4vbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjYvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI2L2xpYjY0JykKKy0gICAgICAgICAgICBhZGRlZF9saWJfZGlycy5hcHBlbmQoJy91c3IvWDExUjYvbGliJykKKy0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoJy91c3IvWDExUjUvaW5jbHVkZScpOgorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExUjUvaW5jbHVkZScpCistICAgICAgICAgICAgYWRkZWRfbGliX2RpcnMuYXBwZW5kKCcvdXNyL1gxMVI1L2xpYicpCistICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICMgQXNzdW1lIGRlZmF1bHQgbG9jYXRpb24gZm9yIFgxMQorLSAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoJy91c3IvWDExL2luY2x1ZGUnKQorLSAgICAgICAgICAgIGFkZGVkX2xpYl9kaXJzLmFwcGVuZCgnL3Vzci9YMTEvbGliJykKKy0KKyAgICAgICAgICMgSWYgQ3lnd2luLCB0aGVuIHZlcmlmeSB0aGF0IFggaXMgaW5zdGFsbGVkIGJlZm9yZSBwcm9jZWVkaW5nCisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdjeWd3aW4nOgorICAgICAgICAgICAgIHgxMV9pbmMgPSBmaW5kX2ZpbGUoJ1gxMS9YbGliLmgnLCBbXSwgaW5jbHVkZV9kaXJzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDMwLWZpeHVwLWluY2x1ZGUtZGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmVhYzdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRG8gbm90IGhhcmRjb2RlIC91c3IgaW50byBpbmNsdWRlIHBhdGhzIHdoZW4gY3Jvc3MgY29tcGlsaW5nCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworIAorLS0tCisgc2V0dXAucHkgfCAgIDE1ICsrLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQorCitJbmRleDogUHl0aG9uLTMuMy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4yLm9yaWcvc2V0dXAucHkKKysrKyBQeXRob24tMy4zLjIvc2V0dXAucHkKK0BAIC00NDQsNyArNDQ0LDggQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCistICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorKyAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQorIAorICAgICAgICAgIyBBZGQgcGF0aHMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTERGTEFHUyBhbmQKKyAgICAgICAgICMgQ1BQRkxBR1MgZm9yIGhlYWRlciBhbmQgbGlicmFyeSBmaWxlcy4KK0BAIC00ODAsNyArNDgxLDcgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiByZXZlcnNlZChvcHRpb25zLmRpcnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChkaXJfbGlzdCwgZGlyZWN0b3J5KQorIAorLSAgICAgICAgaWYgb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9wcmVmaXgpICE9ICcvdXNyJyBcCisrICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nIGFuZCBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkgIT0gJy91c3InIFwKKyAgICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorICAgICAgICAgICAgICMgT1NYIG5vdGU6IERvbid0IGFkZCBMSUJESVIgYW5kIElOQ0xVREVESVIgdG8gYnVpbGRpbmcgYSBmcmFtZXdvcmsKKyAgICAgICAgICAgICAjIChQWVRIT05GUkFNRVdPUksgaXMgc2V0KSB0byBhdm9pZCAjIGxpbmtpbmcgcHJvYmxlbXMgd2hlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzA0LWRlZmF1bHQtaXMtb3B0aW1pemVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOGYyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworIyB3aGVuIGNvbXBpbGluZyBmb3IgYW4gZW1iZWRkZWQgc3lzdGVtLCB3ZSBuZWVkIGV2ZXJ5IGJpdCBvZgorIyBwZXJmb3JtYW5jZSB3ZSBjYW4gZ2V0LiBkZWZhdWx0IHRvIG9wdGltaXplZCB3aXRoIHRoZSBvcHRpb24KKyMgb2Ygb3B0LW91dC4KKyMgU2lnbmVkLU9mZjogTWljaGFlbCAnTWlja2V5JyBMYXVlciA8bWlja2V5QHZhbmlsbGUtbWVkaWEuZGU+CisKKworMjAxMi8wNS8wMQorU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKworUmViYXNlZCBmb3IgMy40LjIgMDIvMjAxNQorU2lnbmVkLW9mZi1ieTogQWxlamFuZHJvIEhlcm5hbmRleiA8YWxlamFuZHJvLmhlcm5hbmRlekBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBQeXRob24tMy40LjIvUHl0aG9uL2NvbXBpbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL1B5dGhvbi9jb21waWxlLmMKKysrKyBQeXRob24tMy40LjIvUHl0aG9uL2NvbXBpbGUuYworQEAgLTMwLDcgKzMwLDcgQEAKKyAjaW5jbHVkZSAic3ltdGFibGUuaCIKKyAjaW5jbHVkZSAib3Bjb2RlLmgiCisgCistaW50IFB5X09wdGltaXplRmxhZyA9IDA7CisraW50IFB5X09wdGltaXplRmxhZyA9IDE7CisgCisgI2RlZmluZSBERUZBVUxUX0JMT0NLX1NJWkUgMTYKKyAjZGVmaW5lIERFRkFVTFRfQkxPQ0tTIDgKK0luZGV4OiBQeXRob24tMy40LjIvTW9kdWxlcy9tYWluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9Nb2R1bGVzL21haW4uYworKysrIFB5dGhvbi0zLjQuMi9Nb2R1bGVzL21haW4uYworQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIHdjaGFyX3QgKipvcmlnX2FyZ3Y7Cisgc3RhdGljIGludCAgb3JpZ19hcmdjOworIAorIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCistI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUlKbTpPcVJzU3R1dlZXOnhYOj8iCisrI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUlKbTpOT3FSc1N0dXZWVzp4WDo/IgorIAorICNkZWZpbmUgUFJPR1JBTV9PUFRTIEJBU0VfT1BUUworIAorQEAgLTY0LDYgKzY0LDcgQEAgc3RhdGljIGNoYXIgKnVzYWdlXzIgPSAiXAorIC1tIG1vZCA6IHJ1biBsaWJyYXJ5IG1vZHVsZSBhcyBhIHNjcmlwdCAodGVybWluYXRlcyBvcHRpb24gbGlzdClcblwKKyAtTyAgICAgOiBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGUgc2xpZ2h0bHk7IGFsc28gUFlUSE9OT1BUSU1JWkU9eFxuXAorIC1PTyAgICA6IHJlbW92ZSBkb2Mtc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgLU8gb3B0aW1pemF0aW9uc1xuXAorKy1OICAgICA6IGRvIE5PVCBvcHRpbWl6ZSBnZW5lcmF0ZWQgYnl0ZWNvZGVcblwKKyAtcSAgICAgOiBkb24ndCBwcmludCB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgbWVzc2FnZXMgb24gaW50ZXJhY3RpdmUgc3RhcnR1cFxuXAorIC1zICAgICA6IGRvbid0IGFkZCB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoOyBhbHNvIFBZVEhPTk5PVVNFUlNJVEVcblwKKyAtUyAgICAgOiBkb24ndCBpbXBseSAnaW1wb3J0IHNpdGUnIG9uIGluaXRpYWxpemF0aW9uXG5cCitAQCAtNDE4LDggKzQxOSw4IEBAIFB5X01haW4oaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQorIAorICAgICAgICAgLyogY2FzZSAnSic6IHJlc2VydmVkIGZvciBKeXRob24gKi8KKyAKKy0gICAgICAgIGNhc2UgJ08nOgorLSAgICAgICAgICAgIFB5X09wdGltaXplRmxhZysrOworKyAgICAgICAgY2FzZSAnTic6CisrICAgICAgICAgICAgUHlfT3B0aW1pemVGbGFnPTA7CisgICAgICAgICAgICAgYnJlYWs7CisgCisgICAgICAgICBjYXNlICdCJzoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wNzAtZG9udC1jbGVhbi1pcGtnLWluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTkyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDcwLWRvbnQtY2xlYW4taXBrZy1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2NvbnNpZGVyIG9wa2cgZGlyZWN0b3JpZXMgd2hlbiBjbGVhbmluZyB1cAorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCistLS0KKyBNYWtlZmlsZS5wcmUuaW4gfCAgICA2ICsrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKy0tLSBhL01ha2VmaWxlLnByZS5pbgorKysrIGIvTWFrZWZpbGUucHJlLmluCitAQCAtMTMwNiw4ICsxMzA2LDggQEAgdG91Y2g6CisgIyBTYW5pdGF0aW9uIHRhcmdldHMgLS0gY2xlYW4gbGVhdmVzIGxpYnJhcmllcywgZXhlY3V0YWJsZXMgYW5kIHRhZ3MKKyAjIGZpbGVzLCB3aGljaCBjbG9iYmVyIHJlbW92ZXMgYXMgd2VsbAorIHB5Y3JlbW92YWw6CistCS1maW5kICQoc3JjZGlyKSAtZGVwdGggLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30gJzsnCistCS1maW5kICQoc3JjZGlyKSAtbmFtZSAnKi5weVtjb10nIC1leGVjIHJtIC1mIHt9ICc7JworKwktZmluZCAkKHNyY2RpcikgISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLWRlcHRoIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9ICc7JworKwktZmluZCAkKHNyY2RpcikgISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyoucHlbY29dJyAtZXhlYyBybSAtZiB7fSAnOycKKyAKKyBybXRlc3R0dXJkczoKKyAJLXJtIC1mICpCQUQgKkdPT0QgKlNLSVBQRUQKK0BAIC0xMzIxLDkgKzEzMjEsOSBAQCBkb2NjbGVhbjoKKyAJLXJtIC1yZiBEb2MvdG9vbHMvc3BoaW54IERvYy90b29scy9weWdtZW50cyBEb2MvdG9vbHMvZG9jdXRpbHMKKyAKKyBjbGVhbjogcHljcmVtb3ZhbAorLQlmaW5kIC4gLW5hbWUgJyouW29hXScgLWV4ZWMgcm0gLWYge30gJzsnCistCWZpbmQgLiAtbmFtZSAnKi5zW29sXScgLWV4ZWMgcm0gLWYge30gJzsnCistCWZpbmQgLiAtbmFtZSAnKi5zby5bMC05XSouWzAtOV0qJyAtZXhlYyBybSAtZiB7fSAnOycKKysJZmluZCAuICEgLXBhdGggJy4vaXBrZy1pbnN0YWxsLyonIC1uYW1lICcqLltvYV0nIC1leGVjIHJtIC1mIHt9ICc7JworKwlmaW5kIC4gISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyouc1tvbF0nIC1leGVjIHJtIC1mIHt9ICc7JworKwlmaW5kIC4gISAtcGF0aCAnLi9pcGtnLWluc3RhbGwvKicgLW5hbWUgJyouc28uWzAtOV0qLlswLTldKicgLWV4ZWMgcm0gLWYge30gJzsnCisgCWZpbmQgYnVpbGQgLW5hbWUgJ2ZmaWNvbmZpZy5oJyAtZXhlYyBybSAtZiB7fSAnOycgfHwgdHJ1ZQorIAlmaW5kIGJ1aWxkIC1uYW1lICdmZmljb25maWcucHknIC1leGVjIHJtIC1mIHt9ICc7JyB8fCB0cnVlCisgCS1ybSAtZiBMaWIvbGliMnRvMy8qR3JhbW1hcioucGlja2xlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8wODAtZGlzdHV0aWxzLWRvbnRfYWRqdXN0X2ZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NjQxOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaApAQCAtMCwwICsxLDkyIEBACitkbyBub3QgImFkanVzdCIgcHl0aG9uIGZpbGVzIGJlZm9yZSBjb3B5aW5nCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQtU3BlY2lmaWNdCisKKy0tLQorIExpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5IHwgICA0MyArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzOSBkZWxldGlvbnMoLSkKKworLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CitAQCAtNTEsMTAgKzUxLDcgQEAgY2xhc3MgYnVpbGRfc2NyaXB0cyhDb21tYW5kKToKKyAKKyAKKyAgICAgZGVmIGNvcHlfc2NyaXB0cyhzZWxmKToKKy0gICAgICAgICIiIkNvcHkgZWFjaCBzY3JpcHQgbGlzdGVkIGluICdzZWxmLnNjcmlwdHMnOyBpZiBpdCdzIG1hcmtlZCBhcyBhCistICAgICAgICBQeXRob24gc2NyaXB0IGluIHRoZSBVbml4IHdheSAoZmlyc3QgbGluZSBtYXRjaGVzICdmaXJzdF9saW5lX3JlJywKKy0gICAgICAgIGllLiBzdGFydHMgd2l0aCAiXCMhIiBhbmQgY29udGFpbnMgInB5dGhvbiIpLCB0aGVuIGFkanVzdCB0aGUgZmlyc3QKKy0gICAgICAgIGxpbmUgdG8gcmVmZXIgdG8gdGhlIGN1cnJlbnQgUHl0aG9uIGludGVycHJldGVyIGFzIHdlIGNvcHkuCisrICAgICAgICAiIiJDb3B5IGVhY2ggc2NyaXB0IGxpc3RlZCBpbiAnc2VsZi5zY3JpcHRzJworICAgICAgICAgIiIiCisgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2RpcikKKyAgICAgICAgIG91dGZpbGVzID0gW10KK0BAIC03OCw2NCArNzUsMTAgQEAgY2xhc3MgYnVpbGRfc2NyaXB0cyhDb21tYW5kKToKKyAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIGYgPSBOb25lCistICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgZW5jb2RpbmcsIGxpbmVzID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGYucmVhZGxpbmUpCistICAgICAgICAgICAgICAgIGYuc2VlaygwKQorLSAgICAgICAgICAgICAgICBmaXJzdF9saW5lID0gZi5yZWFkbGluZSgpCistICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdF9saW5lOgorLSAgICAgICAgICAgICAgICAgICAgc2VsZi53YXJuKCIlcyBpcyBhbiBlbXB0eSBmaWxlIChza2lwcGluZykiICUgc2NyaXB0KQorLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKKy0KKy0gICAgICAgICAgICAgICAgbWF0Y2ggPSBmaXJzdF9saW5lX3JlLm1hdGNoKGZpcnN0X2xpbmUpCistICAgICAgICAgICAgICAgIGlmIG1hdGNoOgorLSAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gVHJ1ZQorLSAgICAgICAgICAgICAgICAgICAgcG9zdF9pbnRlcnAgPSBtYXRjaC5ncm91cCgxKSBvciBiJycKKy0KKy0gICAgICAgICAgICBpZiBhZGp1c3Q6CistICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJjb3B5aW5nIGFuZCBhZGp1c3RpbmcgJXMgLT4gJXMiLCBzY3JpcHQsCistICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRfZGlyKQorLSAgICAgICAgICAgICAgICB1cGRhdGVkX2ZpbGVzLmFwcGVuZChvdXRmaWxlKQorLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kcnlfcnVuOgorLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN5c2NvbmZpZy5weXRob25fYnVpbGQ6CistICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHNlbGYuZXhlY3V0YWJsZQorLSAgICAgICAgICAgICAgICAgICAgZWxzZToKKy0gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gb3MucGF0aC5qb2luKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkJJTkRJUiIpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24lcyVzIiAlIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlZFUlNJT04iKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJFWEUiKSkpCistICAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gb3MuZnNlbmNvZGUoZXhlY3V0YWJsZSkKKy0gICAgICAgICAgICAgICAgICAgIHNoZWJhbmcgPSBiIiMhIiArIGV4ZWN1dGFibGUgKyBwb3N0X2ludGVycCArIGIiXG4iCistICAgICAgICAgICAgICAgICAgICAjIFB5dGhvbiBwYXJzZXIgc3RhcnRzIHRvIHJlYWQgYSBzY3JpcHQgdXNpbmcgVVRGLTggdW50aWwKKy0gICAgICAgICAgICAgICAgICAgICMgaXQgZ2V0cyBhICNjb2Rpbmc6eHh4IGNvb2tpZS4gVGhlIHNoZWJhbmcgaGFzIHRvIGJlIHRoZQorLSAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBsaW5lIG9mIGEgZmlsZSwgdGhlICNjb2Rpbmc6eHh4IGNvb2tpZSBjYW5ub3QgYmUKKy0gICAgICAgICAgICAgICAgICAgICMgd3JpdHRlbiBiZWZvcmUuIFNvIHRoZSBzaGViYW5nIGhhcyB0byBiZSBkZWNvZGFibGUgZnJvbQorLSAgICAgICAgICAgICAgICAgICAgIyBVVEYtOC4KKy0gICAgICAgICAgICAgICAgICAgIHRyeToKKy0gICAgICAgICAgICAgICAgICAgICAgICBzaGViYW5nLmRlY29kZSgndXRmLTgnKQorLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKy0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHNoZWJhbmcgKHshcn0pIGlzIG5vdCBkZWNvZGFibGUgIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSB1dGYtOCIuZm9ybWF0KHNoZWJhbmcpKQorLSAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGUgc2NyaXB0IGlzIGVuY29kZWQgdG8gYSBjdXN0b20gZW5jb2RpbmcgKHVzZSBhCistICAgICAgICAgICAgICAgICAgICAjICNjb2Rpbmc6eHh4IGNvb2tpZSksIHRoZSBzaGViYW5nIGhhcyB0byBiZSBkZWNvZGFibGUgZnJvbQorLSAgICAgICAgICAgICAgICAgICAgIyB0aGUgc2NyaXB0IGVuY29kaW5nIHRvby4KKy0gICAgICAgICAgICAgICAgICAgIHRyeToKKy0gICAgICAgICAgICAgICAgICAgICAgICBzaGViYW5nLmRlY29kZShlbmNvZGluZykKKy0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CistICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBzaGViYW5nICh7IXJ9KSBpcyBub3QgZGVjb2RhYmxlICIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyb20gdGhlIHNjcmlwdCBlbmNvZGluZyAoe30pIgorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNoZWJhbmcsIGVuY29kaW5nKSkKKy0gICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihvdXRmaWxlLCAid2IiKSBhcyBvdXRmOgorLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGYud3JpdGUoc2hlYmFuZykKKy0gICAgICAgICAgICAgICAgICAgICAgICBvdXRmLndyaXRlbGluZXMoZi5yZWFkbGluZXMoKSkKKy0gICAgICAgICAgICAgICAgaWYgZjoKKy0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorLSAgICAgICAgICAgIGVsc2U6CistICAgICAgICAgICAgICAgIGlmIGY6CisrICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorLSAgICAgICAgICAgICAgICB1cGRhdGVkX2ZpbGVzLmFwcGVuZChvdXRmaWxlKQorLSAgICAgICAgICAgICAgICBzZWxmLmNvcHlfZmlsZShzY3JpcHQsIG91dGZpbGUpCisrICAgICAgICAgICAgdXBkYXRlZF9maWxlcy5hcHBlbmQob3V0ZmlsZSkKKysgICAgICAgICAgICBzZWxmLmNvcHlfZmlsZShzY3JpcHQsIG91dGZpbGUpCisgCisgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICAgZm9yIGZpbGUgaW4gb3V0ZmlsZXM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTEwLWVuYWJsZS16bGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzExMC1lbmFibGUtemxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjkyYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzExMC1lbmFibGUtemxpYi5wYXRjaApAQCAtMCwwICsxLDIxIEBACitFbmFibGUgemxpYiBpbiBweXRob24KKworLUtoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworLS0tCisgTW9kdWxlcy9TZXR1cC5kaXN0IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCistLS0gYS9Nb2R1bGVzL1NldHVwLmRpc3QKKysrKyBiL01vZHVsZXMvU2V0dXAuZGlzdAorQEAgLTM1NCw3ICszNTQsNyBAQCBfc3ltdGFibGUgc3ltdGFibGVtb2R1bGUuYworICMgQW5kcmV3IEt1Y2hsaW5nJ3MgemxpYiBtb2R1bGUuCisgIyBUaGlzIHJlcXVpcmUgemxpYiAxLjEuMyAob3IgbGF0ZXIpLgorICMgU2VlIGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8KKy0jemxpYiB6bGlibW9kdWxlLmMgLUkkKHByZWZpeCkvaW5jbHVkZSAtTCQoZXhlY19wcmVmaXgpL2xpYiAtbHoKKyt6bGliIHpsaWJtb2R1bGUuYyAtbHoKKyAKKyAjIEludGVyZmFjZSB0byB0aGUgRXhwYXQgWE1MIHBhcnNlcgorICMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xMi1kaXN0dXRpbHMtcHJlZml4LWlzLWluc2lkZS1zdGFnaW5nLWFyZWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDJkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTItZGlzdHV0aWxzLXByZWZpeC1pcy1pbnNpZGUtc3RhZ2luZy1hcmVhLnBhdGNoCkBAIC0wLDAgKzEsODEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKzAyLzIwMTUgUmViYXNlZCBmb3IgUHl0aG9uIDMuNC4yCisKKyMgVGhlIHByb3BlciBwcmVmaXggaXMgaW5zaWRlIG91ciBzdGFnaW5nIGFyZWEuCisjIFNpZ25lZC1PZmY6IE1pY2hhZWwgJ01pY2tleScgTGF1ZXIgPG1pY2tleUB2YW5pbGxlLW1lZGlhLmRlPgorIyBTaWduZWQtb2ZmLWJ5OiBQaGlsIEJsdW5kZWxsIDxwaGlsYkBnbnUub3JnPgorIyBTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CitAQCAtMTYsMTAgKzE2LDExIEBAIGltcG9ydCBzeXMKKyBmcm9tIC5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc1BsYXRmb3JtRXJyb3IKKyAKKyAjIFRoZXNlIGFyZSBuZWVkZWQgaW4gYSBjb3VwbGUgb2Ygc3BvdHMsIHNvIGp1c3QgY29tcHV0ZSB0aGVtIG9uY2UuCistUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorLUVYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCistQkFTRV9QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5iYXNlX3ByZWZpeCkKKy1CQVNFX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuYmFzZV9leGVjX3ByZWZpeCkKKytQUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrRVhFQ19QUkVGSVggPSBvcy5wYXRoLm5vcm1wYXRoKHN5cy5leGVjX3ByZWZpeCkucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKytCQVNFX1BSRUZJWCA9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfcHJlZml4KS5yZXBsYWNlKCBvcy5nZXRlbnYoIkJVSUxEX1NZUyIpLCBvcy5nZXRlbnYoIkhPU1RfU1lTIikgKQorK0JBU0VfRVhFQ19QUkVGSVg9IG9zLnBhdGgubm9ybXBhdGgoc3lzLmJhc2VfZXhlY19wcmVmaXgpLnJlcGxhY2UoIG9zLmdldGVudigiQlVJTERfU1lTIiksIG9zLmdldGVudigiSE9TVF9TWVMiKSApCisrCisgCisgIyBQYXRoIHRvIHRoZSBiYXNlIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdC4gT24gV2luZG93cyB0aGUgYmluYXJ5IG1heQorICMgbGl2ZSBpbiBwcm9qZWN0L1BDQnVpbGQ5LiAgSWYgd2UncmUgZGVhbGluZyB3aXRoIGFuIHg2NCBXaW5kb3dzIGJ1aWxkLAorQEAgLTkzLDcgKzk0LDkgQEAgZGVmIGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCwgcHJlZgorICAgICBJZiAncHJlZml4JyBpcyBzdXBwbGllZCwgdXNlIGl0IGluc3RlYWQgb2Ygc3lzLmJhc2VfcHJlZml4IG9yCisgICAgIHN5cy5iYXNlX2V4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCisgICAgICIiIgorLSAgICBpZiBwcmVmaXggaXMgTm9uZToKKysgICAgaWYgcHJlZml4IGlzIE5vbmUgYW5kIG9zLmVudmlyb25bJ1NUQUdJTkdfSU5DRElSJ10gIT0gIiI6CisrICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0lOQ0RJUiddLnJzdHJpcCgnaW5jbHVkZScpCisrICAgIGVsaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICBwcmVmaXggPSBwbGF0X3NwZWNpZmljIGFuZCBCQVNFX0VYRUNfUFJFRklYIG9yIEJBU0VfUFJFRklYCisgICAgIGlmIG9zLm5hbWUgPT0gInBvc2l4IjoKKyAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKK0BAIC0xMzQsNiArMTM3LDEyIEBAIGRlZiBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW4KKyAgICAgSWYgJ3ByZWZpeCcgaXMgc3VwcGxpZWQsIHVzZSBpdCBpbnN0ZWFkIG9mIHN5cy5iYXNlX3ByZWZpeCBvcgorICAgICBzeXMuYmFzZV9leGVjX3ByZWZpeCAtLSBpLmUuLCBpZ25vcmUgJ3BsYXRfc3BlY2lmaWMnLgorICAgICAiIiIKKysgICAgaWYgcHJlZml4IGlzIE5vbmUgYW5kIG9zLmVudmlyb25bJ1NUQUdJTkdfTElCRElSJ10gIT0gIiI6CisrICAgICAgICBsaWJfYmFzZW5hbWUgPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnNwbGl0KCcvJylbLTFdCisrICAgICAgICBwcmVmaXggPSBvcy5lbnZpcm9uWydTVEFHSU5HX0xJQkRJUiddLnJzdHJpcChsaWJfYmFzZW5hbWUpCisrICAgIGVsc2U6CisrICAgICAgICBsaWJfYmFzZW5hbWUgPSBzeXMubGliCisrCisgICAgIGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgorICAgICAgICAgICAgIHByZWZpeCA9IHBsYXRfc3BlY2lmaWMgYW5kIEJBU0VfRVhFQ19QUkVGSVggb3IgQkFTRV9QUkVGSVgKK0BAIC0xNDIsNyArMTUxLDcgQEAgZGVmIGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbgorIAorICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICBsaWJweXRob24gPSBvcy5wYXRoLmpvaW4ocHJlZml4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWIiLCAicHl0aG9uIiArIGdldF9weXRob25fdmVyc2lvbigpKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9iYXNlbmFtZSwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKKyAgICAgICAgICAgICByZXR1cm4gbGlicHl0aG9uCisgICAgICAgICBlbHNlOgorQEAgLTI0Miw3ICsyNTEsNyBAQCBkZWYgZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCk6CisgICAgIGVsc2U6CisgICAgICAgICBpbmNfZGlyID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0xKQorIAorLSAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJykKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCAncHljb25maWcuaCcucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkpCisgCisgCisgZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgorQEAgLTI1MSw3ICsyNjAsNyBAQCBkZWYgZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCk6CisgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKF9zeXNfaG9tZSBvciBwcm9qZWN0X2Jhc2UsICJNYWtlZmlsZSIpCisgICAgIGxpYl9kaXIgPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTAsIHN0YW5kYXJkX2xpYj0xKQorICAgICBjb25maWdfZmlsZSA9ICdjb25maWcte317fScuZm9ybWF0KGdldF9weXRob25fdmVyc2lvbigpLCBidWlsZF9mbGFncykKKy0gICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCBjb25maWdfZmlsZSwgJ01ha2VmaWxlJykKKysgICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCBjb25maWdfZmlsZSwgJ01ha2VmaWxlJykucmVwbGFjZSggb3MuZ2V0ZW52KCJCVUlMRF9TWVMiKSwgb3MuZ2V0ZW52KCJIT1NUX1NZUyIpICkKKyAKKyAKKyBkZWYgcGFyc2VfY29uZmlnX2goZnAsIGc9Tm9uZSk6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTMwLXJlYWRsaW5lLXNldHVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA1NjUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zLzEzMC1yZWFkbGluZS1zZXR1cC5wYXRjaApAQCAtMCwwICsxLDU1IEBACitwYWNrYWdlIHB5dGhvbi1yZWFkbGluZQorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIFNwZWNpZmljXQorCistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC02NjYsNDUgKzY2Niw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICMgcmVhZGxpbmUKKyAgICAgICAgIGRvX3JlYWRsaW5lID0gc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ3JlYWRsaW5lJykKKyAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9ICIiCistICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICIiCistICAgICAgICAjIENhbm5vdCB1c2Ugb3MucG9wZW4gaGVyZSBpbiBweTNrLgorLSAgICAgICAgdG1wZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX3RlbXAsICdyZWFkbGluZV90ZXJtY2FwX2xpYicpCistICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5idWlsZF90ZW1wKToKKy0gICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmJ1aWxkX3RlbXApCistICAgICAgICAjIERldGVybWluZSBpZiByZWFkbGluZSBpcyBhbHJlYWR5IGxpbmtlZCBhZ2FpbnN0IGN1cnNlcyBvciB0aW5mby4KKy0gICAgICAgIGlmIGRvX3JlYWRsaW5lOgorLSAgICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKy0gICAgICAgICAgICAgICAgcmV0ID0gb3Muc3lzdGVtKCIlcyAtZCAlcyB8IGdyZXAgJyhORUVERUQpJyA+ICVzIiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1JFQURFTEYnKSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3JlYWRsaW5lLCB0bXBmaWxlKSkKKy0gICAgICAgICAgICBlbGlmIGZpbmRfZXhlY3V0YWJsZSgnbGRkJyk6CistICAgICAgICAgICAgICAgIHJldCA9IG9zLnN5c3RlbSgibGRkICVzID4gJXMiICUgKGRvX3JlYWRsaW5lLCB0bXBmaWxlKSkKKy0gICAgICAgICAgICBlbHNlOgorLSAgICAgICAgICAgICAgICByZXQgPSAyNTYKKy0gICAgICAgICAgICBpZiByZXQgPj4gOCA9PSAwOgorLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZSkgYXMgZnA6CistICAgICAgICAgICAgICAgICAgICBmb3IgbG4gaW4gZnA6CistICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2N1cnNlcycgaW4gbG46CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9IHJlLnN1YigKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInLipsaWIobj9jdXJzZXN3PylcLnNvLionLCByJ1wxJywgbG4KKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5yc3RyaXAoKQorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworLSAgICAgICAgICAgICAgICAgICAgICAgICMgdGVybWNhcCBpbnRlcmZhY2Ugc3BsaXQgb3V0IGZyb20gbmN1cnNlcworLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICd0aW5mbycgaW4gbG46CistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9ICd0aW5mbycKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKy0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh0bXBmaWxlKToKKy0gICAgICAgICAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCistICAgICAgICAjIElzc3VlIDczODQ6IElmIHJlYWRsaW5lIGlzIGFscmVhZHkgbGlua2VkIGFnYWluc3QgY3Vyc2VzLAorLSAgICAgICAgIyB1c2UgdGhlIHNhbWUgbGlicmFyeSBmb3IgdGhlIHJlYWRsaW5lIGFuZCBjdXJzZXMgbW9kdWxlcy4KKy0gICAgICAgIGlmICdjdXJzZXMnIGluIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9IHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeQorLSAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnbmN1cnNlc3cnKToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICduY3Vyc2VzdycKKy0gICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25jdXJzZXMnKToKKy0gICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9ICduY3Vyc2VzJworLSAgICAgICAgZWxpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnY3Vyc2VzJyk6CistICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnY3Vyc2VzJworKyAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAibmN1cnNlcyIKKyAKKyAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgb3NfcmVsZWFzZSA9IGludChvcy51bmFtZSgpWzJdLnNwbGl0KCcuJylbMF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvMTUwLWZpeC1zZXR1cHRlcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkN2M3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy8xNTAtZml4LXNldHVwdGVybS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitGaXggd2FybmluZyB3aXRoIG5ld2VyIGNvbXBpbGVyCisKKy1LaGVtCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworKysrIGIvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKK0BAIC0xMTYsNyArMTE2LDcgQEAgY2hhciAqUHlDdXJzZXNWZXJzaW9uID0gIjIuMiI7CisgICAgICNkZWZpbmVzIG1hbnkgY29tbW9uIHN5bWJvbHMgKHN1Y2ggYXMgImxpbmVzIikgd2hpY2ggYnJlYWtzIHRoZQorICAgICBjdXJzZXMgbW9kdWxlIGluIG90aGVyIHdheXMuICBTbyB0aGUgY29kZSB3aWxsIGp1c3Qgc3BlY2lmeQorICAgICBleHBsaWNpdCBwcm90b3R5cGVzIGhlcmUuICovCistZXh0ZXJuIGludCBzZXR1cHRlcm0oY2hhciAqLGludCxpbnQgKik7CisrLy9leHRlcm4gaW50IHNldHVwdGVybShjaGFyICosaW50LGludCAqKTsKKyAjaWZkZWYgX19zZ2kKKyAjaW5jbHVkZSA8dGVybS5oPgorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9hdm9pZC1uY3Vyc2Vzdy1pbmNsdWRlLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI5YWU1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9hdm9pZC1uY3Vyc2Vzdy1pbmNsdWRlLXBhdGgucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBzeXNyb290IGlzIHVzZWQgYnkgZ2NjIGluc3RlYWQgb2YgYXNzdW1pbmcKK2hhcmRjb2RlZCBsb2NhdGlvbnMgZm9yIGluY2x1ZGUgcGF0aHMKKworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKK0BAIC00NDM0LDcgKzQ0MzQsNyBAQCBmaQorIAorICMgZmlyc3QgY3Vyc2VzIGhlYWRlciBjaGVjaworIGFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKKy1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorK0NQUEZMQUdTPSIkQ1BQRkxBR1MgLUk9L3Vzci9pbmNsdWRlL25jdXJzZXN3IgorIAorIEFDX0NIRUNLX0hFQURFUlMoY3Vyc2VzLmggbmN1cnNlcy5oKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4YzU3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9hdm9pZF93YXJuaW5nX2Fib3V0X3RraW50ZXIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorX3RraW50ZXIgbW9kdWxlIG5lZWRzIHRrIG1vZHVsZSBhbG9uZyB3aXRoIHRjbC4gdGsgaXMgbm90IHlldCBpbnRlZ3JhdGVkCitpbiB5b2N0byBzbyB3ZSBza2lwIHRoZSBjaGVjayBmb3IgdGhpcyBtb2R1bGUuCitBdm9pZCBhIHdhcm5pbmcgYnkgbm90IGFkZGluZyB0aGlzIG1vZHVsZSB0byBtaXNzaW5nIHZhcmlhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc3RyaWJ1dGlvbl0KKworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxODozOC41MDAxMzY2NDcgKzAzMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0wNSAyMzoxOTozNS44ODgxMzQ5NjkgKzAzMDAKK0BAIC0xNjM0LDggKzE2MzQsMTAgQEAKKyAgICAgICAgICMgQ2FsbCB0aGUgbWV0aG9kIGZvciBkZXRlY3Rpbmcgd2hldGhlciBfdGtpbnRlciBjYW4gYmUgY29tcGlsZWQKKyAgICAgICAgIHNlbGYuZGV0ZWN0X3RraW50ZXIoaW5jX2RpcnMsIGxpYl9kaXJzKQorIAorLSAgICAgICAgaWYgJ190a2ludGVyJyBub3QgaW4gW2UubmFtZSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdOgorLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfdGtpbnRlcicpCisrICAgICAgICAjIHRraW50ZXIgbW9kdWxlIHdpbGwgbm90IGJlIGF2YWxhaWJsZSBhcyB5b2N0bworKyAgICAgICAgIyBkb2Vzbid0IGhhdmUgdGsgaW50ZWdyYXRlZCAoeWV0KQorKyAgICAgICAgI2lmICdfdGtpbnRlcicgbm90IGluIFtlLm5hbWUgZm9yIGUgaW4gc2VsZi5leHRlbnNpb25zXToKKysgICAgICAgICMgICAgbWlzc2luZy5hcHBlbmQoJ190a2ludGVyJykKKyAKKyAgICAgICAgIHJldHVybiBtaXNzaW5nCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvY2dpX3B5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2NnaV9weS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUwNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL2NnaV9weS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitMaWIvY2dpLnB5OiBVcGRhdGUgdGhlIHNjcmlwdCBhcyBtZW50aW9uZWQgaW4gdGhlIGNvbW1lbnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXN0cmlidXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworLS0tIFB5dGhvbi0yLjYuNi9MaWIvY2dpLnB5Lm9yaWcJMjAxMC0wOC0wMSAyMjoxNDoyNy4wMDAwMDAwMDAgLTA1MDAKKysrKyBQeXRob24tMi42LjYvTGliL2NnaS5weQkyMDExLTA5LTIxIDE1OjI4OjQwLjQ3ODIwODYzMSAtMDUwMAorQEAgLTEsMTMgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3B5dGhvbgorLQorLSMgTk9URTogdGhlIGFib3ZlICIvdXNyL2xvY2FsL2Jpbi9weXRob24iIGlzIE5PVCBhIG1pc3Rha2UuICBJdCBpcworLSMgaW50ZW50aW9uYWxseSBOT1QgIi91c3IvYmluL2VudiBweXRob24iLiAgT24gbWFueSBzeXN0ZW1zCistIyAoZS5nLiBTb2xhcmlzKSwgL3Vzci9sb2NhbC9iaW4gaXMgbm90IGluICRQQVRIIGFzIHBhc3NlZCB0byBDR0kKKy0jIHNjcmlwdHMsIGFuZCAvdXNyL2xvY2FsL2JpbiBpcyB0aGUgZGVmYXVsdCBkaXJlY3Rvcnkgd2hlcmUgUHl0aG9uIGlzCistIyBpbnN0YWxsZWQsIHNvIC91c3IvYmluL2VudiB3b3VsZCBiZSB1bmFibGUgdG8gZmluZCBweXRob24uICBHcmFudGVkLAorLSMgYmluYXJ5IGluc3RhbGxhdGlvbnMgYnkgTGludXggdmVuZG9ycyBvZnRlbiBpbnN0YWxsIFB5dGhvbiBpbgorLSMgL3Vzci9iaW4uICBTbyBsZXQgdGhvc2UgdmVuZG9ycyBwYXRjaCBjZ2kucHkgdG8gbWF0Y2ggdGhlaXIgY2hvaWNlCistIyBvZiBpbnN0YWxsYXRpb24uCisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIAorICIiIlN1cHBvcnQgbW9kdWxlIGZvciBDR0kgKENvbW1vbiBHYXRld2F5IEludGVyZmFjZSkgc2NyaXB0cy4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9maXhfZm9yX3VzaW5nX2RpZmZlcmVudF9saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMWE5NzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbRW1iZWRkZWQgc3BlY2lmaWNdCisKK1RoaXMgcGF0Y2ggZml4ZXMgaXNzdWluZyB3aXRoIGRpZmZlcmVudCBsaWJkaXIgbGlrZSBsaWI2NC4KK1RoaXMgcGF0Y2ggbWFrZXMgdGhlIG5hdGl2ZSBweXRob24gYmluYXJ5IG1vZHVsZXMgZmluZGFibGUKK2luIHRoZSBpbnN0YWxsIHByb2Nlc3Mgb2YgdGhlIGhvc3QgcHl0aG9uLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMi8wMy8xNAorCitVcGRhdGVkIGZvciBweXRob24gMi43LjMKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CitEYXRlOiAyMDEyLzA1LzAxCisKK0luZGV4OiBQeXRob24tMy4zLjByYzIvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL0xpYi9zeXNjb25maWcucHkJMjAxMi0wOS0yMCAyMjo1MDoxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvTGliL3N5c2NvbmZpZy5weQkyMDEyLTA5LTIwIDIyOjUzOjAxLjU2MTEyMzM5NiAtMDcwMAorQEAgLTIxLDkgKzIxLDkgQEAKKyAKKyBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAncG9zaXhfcHJlZml4JzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorLSAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ3BsYXRsaWInOiAne3BsYXRiYXNlfS8nK3N5cy5saWIrJy9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaW5jbHVkZSc6CisgICAgICAgICAgICAgJ3tpbnN0YWxsZWRfYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH17YWJpZmxhZ3N9JywKK0BAIC04Myw3ICs4Myw3IEBACisgICAgICdwb3NpeF91c2VyJzogeworICAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL01ha2VmaWxlLnByZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjMuMHJjMi5vcmlnL01ha2VmaWxlLnByZS5pbgkyMDEyLTA5LTIwIDIyOjUwOjExLjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMHJjMi9NYWtlZmlsZS5wcmUuaW4JMjAxMi0wOS0yMCAyMjo1MDo1NC4yNDUxMjM5OTcgLTA3MDAKK0BAIC0xMDgwLDkgKzEwODAsOSBAQAorIAkJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9Nb2R1bGVzL3h4bW9kdWxlLmMgXAorIAkJCSQoREVTVERJUikkKExJQkRFU1QpL2Rpc3R1dGlscy90ZXN0cyA7IFwKKyAJZmkKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvR3JhbW1hci50eHQKKy0JLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCkgJChSVU5TSEFSRUQpIFwKKysJLVBZVEhPTlBBVEg9JChERVNURElSKSQoTElCREVTVCk6JHtDUk9TU1BZVEhPTlBBVEh9ICQoUlVOU0hBUkVEKSBcCisgCQkkKFBZVEhPTl9GT1JfQlVJTEQpIC1tIGxpYjJ0bzMucGdlbjIuZHJpdmVyICQoREVTVERJUikkKExJQkRFU1QpL2xpYjJ0bzMvUGF0dGVybkdyYW1tYXIudHh0CisgCisgIyBDcmVhdGUgdGhlIFBMQVRESVIgc291cmNlIGRpcmVjdG9yeSwgaWYgb25lIHdhc24ndCBkaXN0cmlidXRlZC4uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMDU0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaApAQCAtMCwwICsxLDI4IEBACit3aGVuIGJ1aWxkaW5nIHB5dGhvbiBmb3IgcWVtdXg4Ni02NCBvbiB1YnVudHUgMTEuMTAvNjRiaXQKK2l0IGdyb3BlcyBpbnRvIGhvc3QgaW5jbHVkZXMgYW5kIHRoZW4gbWl4ZXMgdGhlbSB3aXRoIGNyb3NzCitpbmNsdWRlcyBhbmQgYXMgYSByZXN1bHQgc29tZSBtb2R1bGVzIGZhaWwgdG8gY29tcGlsZSBhbmQgbGluaworb25lIG9mIHRoZSBtb2R1bGVzIGlzIHB5dGhvbi1lbGVtZW50dHJlZSB3aGljaCBpcyB0aGVuIG5vdAorZm91bmQgZHVyaW5nIGltYWdlIGNyZWF0aW9uCisKK1Byb2JsZSBpcyB0aGF0IHNldHVwLnB5IHRyaWVzIHRvIGFkZCBuYXRpdmUgaW5jbHVkZXMgdGhhdCBuZXdlcgordWJ1bnR1IGhhcyBpbnRyb2R1Y2VkIGZvciBtdWx0aWFyY2ggc3VwcG9ydC4gQnV0IHRoYXQgc2hvdWxkCitvbmx5IGhhcHBlbiBmb3IgbmF0aXZlIGJ1aWxkcyBhbmQgbm90IGNyb3NzIGJ1aWxkaW5nIHB5dGhvbgorc28gd2UgYWRkIGEgY2hlY2sgaGVyZS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogUHl0aG9uLTMuMy4wcmMyL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4wcmMyLm9yaWcvc2V0dXAucHkJMjAxMi0wOS0yMCAyMTo1NDo1MC4wMDAwMDAwMDAgLTA3MDAKKysrKyBQeXRob24tMy4zLjByYzIvc2V0dXAucHkJMjAxMi0wOS0yMCAyMTo1NzozNS4wMjkxMjM4NTggLTA3MDAKK0BAIC00MDIsNiArNDAyLDkgQEAKKyAKKyAgICAgICAgIGlmIG5vdCBmaW5kX2V4ZWN1dGFibGUoJ2Rwa2ctYXJjaGl0ZWN0dXJlJyk6CisgICAgICAgICAgICAgcmV0dXJuCisrICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgcmV0dXJuCisrCisgICAgICAgICBvcHQgPSAnJworICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIG9wdCA9ICctdCcgKyBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0hPU1RfR05VX1RZUEUnKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL21ha2VyYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL21ha2VyYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTY4OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvbWFrZXJhY2UucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVGhlcmUgaXMgYSByYWNlIGR1ZSB0byB0aGUgZXhlY3V0aW9uIG9mIG1ha2UgaW5zaWRlIHRoZSBtYWtlZmlsZToKKworfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gT2JqZWN0cy9vYm1hbGxvYy5vIE9iamVjdHMvb2JtYWxsb2MuYworfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gUGFyc2VyL3BnZW4ubyBQYXJzZXIvcGdlbi5jfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gT2JqZWN0cy9vYm1hbGxvYy5vIE9iamVjdHMvb2JtYWxsb2MuYworfCBnY2MgIC1wdGhyZWFkIC1jIC1Xbm8tdW51c2VkLXJlc3VsdCAtRE5ERUJVRyAtZyAgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtTzIgLXBpcGUgICAtSS4gLUlJbmNsdWRlIC1JLi9JbmNsdWRlIC1pc3lzdGVtL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyLWRldi95b2N0by1zbGF2ZS9uaWdodGx5LXdvcmxkL2J1aWxkL2J1aWxkL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgLWlzeXN0ZW0vaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXItZGV2L3lvY3RvLXNsYXZlL25pZ2h0bHktd29ybGQvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvaW5jbHVkZSAtZlBJQyAtRFB5X0JVSUxEX0NPUkUgLW8gT2JqZWN0cy9vYm1hbGxvYy5vIE9iamVjdHMvb2JtYWxsb2MuYworfCBPYmplY3RzL29ibWFsbG9jLm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBtYWtlWzFdOiAqKiogW1BhcnNlci9wZ2VuXSBFcnJvciAxCisKK1RoZSBlYXNpZXN0IHdheSB0byBhdm9pZCB0aGlzIGlzIHRvIGxpc3QgdGhlIGRlcGVuZGVuY2llcyBleHBsaWN0bHkuCisKK1JQIDI4LzIvMjAxNAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IFB5dGhvbi0zLjMuMy9NYWtlZmlsZS5wcmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjMub3JpZy9NYWtlZmlsZS5wcmUuaW4JMjAxNC0wMi0yNyAxNDowNDozOC4yNjgzMzk1MzMgKzAwMDAKKysrKyBQeXRob24tMy4zLjMvTWFrZWZpbGUucHJlLmluCTIwMTQtMDItMjggMTA6NDA6NTkuMTY2MzYxMTI1ICswMDAwCitAQCAtNjc2LDcgKzY3Niw3IEBACisgCisgJChJT19PQkpTKTogJChJT19IKQorIAorLSQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKQorKyQoR1JBTU1BUl9IKTogJChHUkFNTUFSX0lOUFVUKSAkKFBHRU5TUkNTKSAkKFBHRU4pCisgCQlAJChNS0RJUl9QKSBJbmNsdWRlCisgCQkkKE1BS0UpICQoUEdFTikKKyAJCSQoSE9TVFBHRU4pICQoR1JBTU1BUl9JTlBVVCkgJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2U5ODYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi0zLjMtbXVsdGlsaWIucGF0Y2gKQEAgLTAsMCArMSwzMzggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitnZXQgdGhlIHN5cy5saWIgZnJvbSBweXRob24gaXRzZWxmIGFuZCBkbyBub3QgdXNlIGhhcmRjb2RlZCB2YWx1ZSBvZiAnbGliJworCiswMi8yMDE1IFJlYmFzZWQgZm9yIDMuNC4yCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBBbGVqYW5kcm8gSGVybmFuZGV6IDxhbGVqYW5kcm8uaGVybmFuZGV6QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMi9JbmNsdWRlL3B5dGhvbnJ1bi5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvSW5jbHVkZS9weXRob25ydW4uaAorKysrIFB5dGhvbi0zLjQuMi9JbmNsdWRlL3B5dGhvbnJ1bi5oCitAQCAtMjIwLDYgKzIyMCw4IEBAIGludCBfUHlfQ2hlY2tQeXRob24zKCk7CisgLyogSW4gdGhlaXIgb3duIGZpbGVzICovCisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFBsYXRmb3JtKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRBcmNoKHZvaWQpOworK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRMaWIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKKyBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfR2V0Q29tcGlsZXIodm9pZCk7CisgUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldEJ1aWxkSW5mbyh2b2lkKTsKK0luZGV4OiBQeXRob24tMy40LjIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorQEAgLTE5LDYgKzE5LDggQEAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKKyBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorIEhBU19VU0VSX1NJVEUgPSBUcnVlCisgCisrbGlibmFtZSA9IHN5cy5saWIKKysKKyBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCitAQCAtMzAsNyArMzIsNyBAQCBXSU5ET1dTX1NDSEVNRSA9IHsKKyBJTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICd1bml4X3ByZWZpeCc6IHsKKyAgICAgICAgICdwdXJlbGliJzogJyRiYXNlL2xpYi9weXRob24kcHlfdmVyc2lvbl9zaG9ydC9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJyRwbGF0YmFzZS9saWIvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvJytsaWJuYW1lKycvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0JGFiaWZsYWdzLyRkaXN0X25hbWUnLAorICAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvYmluJywKKyAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3B5ZG9jLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTGliL3B5ZG9jLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9weWRvYy5weQorQEAgLTM5NCw3ICszOTQsNyBAQCBjbGFzcyBEb2M6CisgCisgICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsIHNlbGYuUFlUSE9ORE9DUykKKyAKKy0gICAgICAgIGJhc2VkaXIgPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiVkLiVkIiAlICBzeXMudmVyc2lvbl9pbmZvWzoyXSkKKyAgICAgICAgIGlmIChpc2luc3RhbmNlKG9iamVjdCwgdHlwZShvcykpIGFuZAorICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCitJbmRleDogUHl0aG9uLTMuNC4yL0xpYi90cmFjZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi90cmFjZS5weQorKysrIFB5dGhvbi0zLjQuMi9MaWIvdHJhY2UucHkKK0BAIC03NTEsMTAgKzc1MSwxMCBAQCBkZWYgbWFpbihhcmd2PU5vbmUpOgorICAgICAgICAgICAgICAgICAjIHNob3VsZCBJIGFsc28gY2FsbCBleHBhbmR1c2VyPyAoYWZ0ZXIgYWxsLCBjb3VsZCB1c2UgJEhPTUUpCisgCisgICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoIiRwcmVmaXgiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdKSkKKyAgICAgICAgICAgICAgICAgcyA9IHMucmVwbGFjZSgiJGV4ZWNfcHJlZml4IiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfZXhlY19wcmVmaXgsICJsaWIiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihzeXMuYmFzZV9leGVjX3ByZWZpeCwgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10pKQorICAgICAgICAgICAgICAgICBzID0gb3MucGF0aC5ub3JtcGF0aChzKQorICAgICAgICAgICAgICAgICBpZ25vcmVfZGlycy5hcHBlbmQocykKK0luZGV4OiBQeXRob24tMy40LjIvTWFrZWZpbGUucHJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuNC4yLm9yaWcvTWFrZWZpbGUucHJlLmluCisrKysgUHl0aG9uLTMuNC4yL01ha2VmaWxlLnByZS5pbgorQEAgLTEwMSw2ICsxMDEsOCBAQCBQWV9DT1JFX0NGTEFHUz0JJChQWV9DRkxBR1MpICQoUFlfQ0ZMQUdTCisgCisgIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcworIE1BQ0hERVA9CUBNQUNIREVQQAorK0xJQj0JCUBMSUJACisrQVJDSD0JCUBBUkNIQAorIAorICMgTXVsdGlhcmNoIGRpcmVjdG9yeSAobWF5IGJlIGVtcHR5KQorIE1VTFRJQVJDSD0JQE1VTFRJQVJDSEAKK0BAIC0xMjAsNyArMTIyLDcgQEAgTElCRElSPQkJQGxpYmRpckAKKyBNQU5ESVI9CQlAbWFuZGlyQAorIElOQ0xVREVESVI9CUBpbmNsdWRlZGlyQAorIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCistU0NSSVBURElSPQkkKHByZWZpeCkvbGliCisrU0NSSVBURElSPQlAbGliZGlyQAorIEFCSUZMQUdTPQlAQUJJRkxBR1NACisgCisgIyBEZXRhaWxlZCBkZXN0aW5hdGlvbiBkaXJlY3RvcmllcworQEAgLTcxMiw2ICs3MTQsNyBAQCBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0CisgCQktREVYRUNfUFJFRklYPSciJChleGVjX3ByZWZpeCkiJyBcCisgCQktRFZFUlNJT049JyIkKFZFUlNJT04pIicgXAorIAkJLURWUEFUSD0nIiQoVlBBVEgpIicgXAorKwkJLURBUkNIPSciJChBUkNIKSInIC1ETElCPSciJChMSUIpIicgXAorIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCisgCisgTW9kdWxlcy9weXRob24ubzogJChzcmNkaXIpL01vZHVsZXMvcHl0aG9uLmMKK0BAIC03ODAsNyArNzgzLDcgQEAgJChBU1RfQyk6ICQoQVNUX0gpICQoQVNUX0FTREwpICQoQVNETEdFTgorIFB5dGhvbi9jb21waWxlLm8gUHl0aG9uL3N5bXRhYmxlLm8gUHl0aG9uL2FzdC5vOiAkKEdSQU1NQVJfSCkgJChBU1RfSCkKKyAKKyBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCistCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworKwkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLURQTEFURk9STT0nIiQoTUFDSERFUCkiJyAtREFSQ0g9JyIkKEFSQ0gpIicgLURMSUI9JyIkKExJQikiJyAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2dldHBsYXRmb3JtLmMKKyAKKyBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCisgCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKK0luZGV4OiBQeXRob24tMy40LjIvTW9kdWxlcy9nZXRwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9Nb2R1bGVzL2dldHBhdGguYworKysrIFB5dGhvbi0zLjQuMi9Nb2R1bGVzL2dldHBhdGguYworQEAgLTExNyw5ICsxMTcsMTEgQEAKKyAjZGVmaW5lIEVYRUNfUFJFRklYIFBSRUZJWAorICNlbmRpZgorIAorKyNkZWZpbmUgTElCX1BZVEhPTiBMSUIgIi9weXRob24iIFZFUlNJT04KKysKKyAjaWZuZGVmIFBZVEhPTlBBVEgKKy0jZGVmaW5lIFBZVEhPTlBBVEggUFJFRklYICIvbGliL3B5dGhvbiIgVkVSU0lPTiAiOiIgXAorLSAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi9saWIvcHl0aG9uIiBWRVJTSU9OICIvbGliLWR5bmxvYWQiCisrI2RlZmluZSBQWVRIT05QQVRIIFBSRUZJWCAiLyIgTElCX1BZVEhPTiAiOiIgXAorKyAgICAgICAgICAgICAgRVhFQ19QUkVGSVggIi8iIExJQl9QWVRIT04gIi9saWItZHlubG9hZCIKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIExBTkRNQVJLCitAQCAtMTMwLDYgKzEzMiw3IEBAIHN0YXRpYyB3Y2hhcl90IHByZWZpeFtNQVhQQVRITEVOKzFdOworIHN0YXRpYyB3Y2hhcl90IGV4ZWNfcHJlZml4W01BWFBBVEhMRU4rMV07Cisgc3RhdGljIHdjaGFyX3QgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKKyBzdGF0aWMgd2NoYXJfdCAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKKytzdGF0aWMgd2NoYXJfdCAqbGliX3B5dGhvbiA9IEwiIiBMSUJfUFlUSE9OOworIAorIHN0YXRpYyB2b2lkCisgcmVkdWNlKHdjaGFyX3QgKmRpcikKK0luZGV4OiBQeXRob24tMy40LjIvUHl0aG9uL2dldHBsYXRmb3JtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9QeXRob24vZ2V0cGxhdGZvcm0uYworKysrIFB5dGhvbi0zLjQuMi9QeXRob24vZ2V0cGxhdGZvcm0uYworQEAgLTEwLDMgKzEwLDIzIEBAIFB5X0dldFBsYXRmb3JtKHZvaWQpCisgeworIAlyZXR1cm4gUExBVEZPUk07CisgfQorKworKyNpZm5kZWYgQVJDSAorKyNkZWZpbmUgQVJDSCAidW5rbm93biIKKysjZW5kaWYKKysKKytjb25zdCBjaGFyICoKKytQeV9HZXRBcmNoKHZvaWQpCisreworKwlyZXR1cm4gQVJDSDsKKyt9CisrCisrI2lmbmRlZiBMSUIKKysjZGVmaW5lIExJQiAibGliIgorKyNlbmRpZgorKworK2NvbnN0IGNoYXIgKgorK1B5X0dldExpYih2b2lkKQorK3sKKysJcmV0dXJuIExJQjsKKyt9CitJbmRleDogUHl0aG9uLTMuNC4yL1B5dGhvbi9zeXNtb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL1B5dGhvbi9zeXNtb2R1bGUuYworKysrIFB5dGhvbi0zLjQuMi9QeXRob24vc3lzbW9kdWxlLmMKK0BAIC0xNjk3LDYgKzE2OTcsMTAgQEAgX1B5U3lzX0luaXQodm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRDb3B5cmlnaHQoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJwbGF0Zm9ybSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0UGxhdGZvcm0oKSkpOworKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJhcmNoIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRBcmNoKCkpKTsKKysgICAgU0VUX1NZU19GUk9NX1NUUklORygibGliIiwKKysgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeV9HZXRMaWIoKSkpOworICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJleGVjdXRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgoKSwgLTEpKTsKK0luZGV4OiBQeXRob24tMy40LjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy40LjIub3JpZy9zZXR1cC5weQorKysrIFB5dGhvbi0zLjQuMi9zZXR1cC5weQorQEAgLTQ1NCw3ICs0NTQsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIGRpcmVjdG9yaWVzIChpLmUuICcuJyBhbmQgJ0luY2x1ZGUnKSBtdXN0IGJlIGZpcnN0LiAgU2VlIGlzc3VlCisgICAgICAgICAjIDEwNTIwLgorICAgICAgICAgaWYgbm90IGNyb3NzX2NvbXBpbGluZzoKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsICcvdXNyL2xvY2FsL2xpYicpCisrICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCBvcy5wYXRoLmpvaW4oJy91c3IvbG9jYWwnLCBzeXMubGliKSkKKyAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorICAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQorICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorQEAgLTUxMiw4ICs1MTIsNyBAQCBjbGFzcyBQeUJ1aWxkRXh0KGJ1aWxkX2V4dCk6CisgICAgICAgICAjIGJlIGFzc3VtZWQgdGhhdCBubyBhZGRpdGlvbmFsIC1JLC1MIGRpcmVjdGl2ZXMgYXJlIG5lZWRlZC4KKyAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgbGliX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycyArIFsKKy0gICAgICAgICAgICAgICAgJy9saWI2NCcsICcvdXNyL2xpYjY0JywKKy0gICAgICAgICAgICAgICAgJy9saWInLCAnL3Vzci9saWInLAorKyAgICAgICAgICAgICAgICAnLycgKyBzeXMubGliLCAnL3Vzci8nICsgc3lzLmxpYiwKKyAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgIGluY19kaXJzID0gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMgKyBbJy91c3IvaW5jbHVkZSddCisgICAgICAgICBlbHNlOgorQEAgLTY5NiwxMSArNjk1LDExIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICBlbGlmIGN1cnNlc19saWJyYXJ5OgorICAgICAgICAgICAgICAgICByZWFkbGluZV9saWJzLmFwcGVuZChjdXJzZXNfbGlicmFyeSkKKyAgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvJytzeXMubGliKycvdGVybWNhcCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQorICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3JlYWRsaW5lJywgWydyZWFkbGluZS5jJ10sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyL2xpYi90ZXJtY2FwJ10sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9WycvdXNyLycrc3lzLmxpYisnL3Rlcm1jYXAnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1yZWFkbGluZV9leHRyYV9saW5rX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9cmVhZGxpbmVfbGlicykgKQorICAgICAgICAgZWxzZToKK0luZGV4OiBQeXRob24tMy40LjIvTGliL3N5c2NvbmZpZy5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9zeXNjb25maWcucHkKKysrKyBQeXRob24tMy40LjIvTGliL3N5c2NvbmZpZy5weQorQEAgLTIwLDEwICsyMCwxMCBAQCBfX2FsbF9fID0gWworIAorIF9JTlNUQUxMX1NDSEVNRVMgPSB7CisgICAgICdwb3NpeF9wcmVmaXgnOiB7CistICAgICAgICAnc3RkbGliJzogJ3tpbnN0YWxsZWRfYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7cGxhdGJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKy0gICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKysgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vJytzeXMubGliKycvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAgJ2luY2x1ZGUnOgorICAgICAgICAgICAgICd7aW5zdGFsbGVkX2Jhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9e2FiaWZsYWdzfScsCisgICAgICAgICAncGxhdGluY2x1ZGUnOgorQEAgLTMyLDEwICszMiwxMCBAQCBfSU5TVEFMTF9TQ0hFTUVTID0geworICAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKKyAgICAgICAgIH0sCisgICAgICdwb3NpeF9ob21lJzogeworLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9L2xpYi9weXRob24nLAorLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9Lycrc3lzLmxpYisnL3B5dGhvbicsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vJytzeXMubGliKycvcHl0aG9uJywKKyAgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKy0gICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKysgICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS8nK3N5cy5saWIrJy9weXRob24nLAorICAgICAgICAgJ2luY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbicsCisgICAgICAgICAncGxhdGluY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9pbmNsdWRlL3B5dGhvbicsCisgICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vYmluJywKK0BAIC02MSwxMCArNjEsMTAgQEAgX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAorICAgICAgICAgfSwKKyAgICAgJ3Bvc2l4X3VzZXInOiB7CistICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCistICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisrICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCistICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisrICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9Lycrc3lzLmxpYisnL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCitJbmRleDogUHl0aG9uLTMuNC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIFB5dGhvbi0zLjQuMi9jb25maWd1cmUuYWMKK0BAIC03OTEsNiArNzkxLDQxIEBAIGVzYWMKKyBNVUxUSUFSQ0g9JCgkQ0MgLS1wcmludC1tdWx0aWFyY2ggMj4vZGV2L251bGwpCisgQUNfU1VCU1QoTVVMVElBUkNIKQorIAorK0FDX1NVQlNUKEFSQ0gpCisrQUNfTVNHX0NIRUNLSU5HKEFSQ0gpCisrQVJDSD1gdW5hbWUgLW1gCisrY2FzZSAkQVJDSCBpbgorK2k/ODYpIEFSQ0g9aTM4Njs7CisrZXNhYworK0FDX01TR19SRVNVTFQoJEFSQ0gpCisrCisrQUNfU1VCU1QoTElCKQorK0FDX01TR19DSEVDS0lORyhMSUIpCisrY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorK0xpbnV4KikKKysgICMgVGVzdCBpZiB0aGUgY29tcGlsZXIgaXMgNjRiaXQKKysgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisrICBweXRob25fY3ZfY2NfNjRiaXRfb3V0cHV0PW5vCisrICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisrICAgICoiRUxGIDY0IiopCisrICAgICAgcHl0aG9uX2N2X2NjXzY0Yml0X291dHB1dD15ZXMKKysgICAgICA7OworKyAgICBlc2FjCisrICBmaQorKyAgcm0gLXJmIGNvbmZ0ZXN0KgorKyAgOzsKKytlc2FjCisrCisrY2FzZSAkQVJDSDokcHl0aG9uX2N2X2NjXzY0Yml0X291dHB1dCBpbgorK3BwYzY0OnllcyB8IHBvd2VycGM2NDp5ZXMgfCBzMzkweDp5ZXMgfCBzcGFyYzY0OnllcyB8IHg4Nl82NDp5ZXMpCisrICBMSUI9ImxpYjY0IgorKyAgOzsKKysqOiopCisrICBMSUI9ImxpYiIKKysgIDs7CisrZXNhYworK0FDX01TR19SRVNVTFQoJExJQikKKyAKKyBBQ19TVUJTVChMSUJSQVJZKQorIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQorSW5kZXg6IFB5dGhvbi0zLjQuMi9MaWIvc2l0ZS5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMi5vcmlnL0xpYi9zaXRlLnB5CisrKysgUHl0aG9uLTMuNC4yL0xpYi9zaXRlLnB5CitAQCAtMzA0LDEzICszMDQsMTkgQEAgZGVmIGdldHNpdGVwYWNrYWdlcyhwcmVmaXhlcz1Ob25lKToKKyAgICAgICAgIHNlZW4uYWRkKHByZWZpeCkKKyAKKyAgICAgICAgIGlmIG9zLnNlcCA9PSAnLyc6CistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorKyAgICAgICAgICAgIGlmIHN5cy5saWIgIT0gImxpYiI6CisrICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQorKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgc3lzLmxpYiwgInNpdGUtcHl0aG9uIikpCisrICAgICAgICAgICAgaWYgc3lzLmxpYiAhPSAibGliIjoKKysgICAgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCBzeXMubGliLCAic2l0ZS1weXRob24iKSkKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChwcmVmaXgpCistICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcGFja2FnZXMiKSkKKysgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsIHN5cy5saWIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgICAgICAgIyBmb3IgZnJhbWV3b3JrIGJ1aWxkcyAqb25seSogd2UgYWRkIHRoZSBzdGFuZGFyZCBBcHBsZQorICAgICAgICAgICAgICMgbG9jYXRpb25zLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi1jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjNiOGI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbi1jb25maWcucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorcHl0aG9uLWNvbmZpZzogUmV2ZXJ0IHRvIHVzaW5nIGRpc3R1dGlscy5zeXNjb25maWcKKworVGhlIG5ld2VyIHN5c2NvbmZpZyBtb2R1bGUgc2hhcmVzIHNvbWUgY29kZSB3aXRoIGRpc3R1dGlscy5zeXNjb25maWcsIGJ1dCB0aGUgc2FtZSBtb2RpZmljYXRpb25zIGFzIGluCisKKzEyLWRpc3R1dGlscy1wcmVmaXgtaXMtaW5zaWRlLXN0YWdpbmctYXJlYS5wYXRjaCBtYWtlcyBkaXN0dXRpbHMuc3lzY29uZmlnCisKK2FmZmVjdCB0aGUgbmF0aXZlIHJ1bnRpbWUgYXMgd2VsbCBhcyBjcm9zcyBidWlsZGluZy4gVXNlIHRoZSBvbGQsIHBhdGNoZWQKK2ltcGxlbWVudGF0aW9uIHdoaWNoIHJldHVybnMgcGF0aHMgaW4gdGhlIHN0YWdpbmcgZGlyZWN0b3J5IGFuZCBmb3IgdGhlIHRhcmdldCwKK2FzIGFwcHJvcHJpYXRlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW0VtYmVkZGVkIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBUeWxlciBIYWxsIDx0eWxlcndoYWxsQGdtYWlsLmNvbT4KKzoKK0luZGV4OiBQeXRob24tMy4zLjMvTWlzYy9weXRob24tY29uZmlnLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4zLm9yaWcvTWlzYy9weXRob24tY29uZmlnLmluCisrKysgUHl0aG9uLTMuMy4zL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorQEAgLTQsNyArNCw3IEBACisgaW1wb3J0IGdldG9wdAorIGltcG9ydCBvcworIGltcG9ydCBzeXMKKy1pbXBvcnQgc3lzY29uZmlnCisrZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworIAorIHZhbGlkX29wdHMgPSBbJ3ByZWZpeCcsICdleGVjLXByZWZpeCcsICdpbmNsdWRlcycsICdsaWJzJywgJ2NmbGFncycsCisgICAgICAgICAgICAgICAnbGRmbGFncycsICdleHRlbnNpb24tc3VmZml4JywgJ2hlbHAnLCAnYWJpZmxhZ3MnLCAnY29uZmlnZGlyJ10KK0BAIC0zMiwxNCArMzIsMTQgQEAgaWYgJy0taGVscCcgaW4gb3B0X2ZsYWdzOgorIAorIGZvciBvcHQgaW4gb3B0X2ZsYWdzOgorICAgICBpZiBvcHQgPT0gJy0tcHJlZml4JzoKKy0gICAgICAgIHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigncHJlZml4JykpCisrICAgICAgICBwcmludChzeXNjb25maWcuUFJFRklYKQorIAorICAgICBlbGlmIG9wdCA9PSAnLS1leGVjLXByZWZpeCc6CistICAgICAgICBwcmludChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ2V4ZWNfcHJlZml4JykpCisrICAgICAgICBwcmludChzeXNjb25maWcuRVhFQ19QUkVGSVgpCisgCisgICAgIGVsaWYgb3B0IGluICgnLS1pbmNsdWRlcycsICctLWNmbGFncycpOgorLSAgICAgICAgZmxhZ3MgPSBbJy1JJyArIHN5c2NvbmZpZy5nZXRfcGF0aCgnaW5jbHVkZScpLAorLSAgICAgICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnKV0KKysgICAgICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSwKKysgICAgICAgICAgICAgICAgICctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz1UcnVlKV0KKyAgICAgICAgIGlmIG9wdCA9PSAnLS1jZmxhZ3MnOgorICAgICAgICAgICAgIGZsYWdzLmV4dGVuZChnZXR2YXIoJ0NGTEFHUycpLnNwbGl0KCkpCisgICAgICAgICBwcmludCgnICcuam9pbihmbGFncykpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYzhiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy1zZXR1cC5weS1uby1ob3N0LWhlYWRlcnMtbGlicy5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDQzMjM4ZTFhYzEzZTMyOTg0ZDAxNWM5MmE1ODQxZjNkZTFmZTFkMTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAxOCBOb3YgMjAxNCAwMDowNzowNyAtMDUwMAorU3ViamVjdDogW1BBVENIXSBzZXR1cC5weTogbm8gaG9zdCBoZWFkZXJzIGxpYnMKKworV2hlbiB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLCBzZXR1cC5weSBzaG91bGQgbmV2ZXIgbG9vayBpbiAvdXNyCitvciAvdXNyL2xvY2FsIHRvIGZpbmQgaGVhZGVycyBvciBsaWJyYXJpZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbQ3Jvc3MgY29tcGlsZSBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIHNldHVwLnB5IHwgMyAtLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKK2luZGV4IGYwMjBiMjguLmU4MzM5Y2QgMTAwNjQ0CistLS0gYS9zZXR1cC5weQorKysrIGIvc2V0dXAucHkKK0BAIC00NDQsMTAgKzQ0NCw3IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgIGlmIG5vdCBjcm9zc19jb21waWxpbmc6CisgICAgICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCBvcy5wYXRoLmpvaW4oJy91c3IvbG9jYWwnLCBzeXMubGliKSkKKyAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQorLSAgICAgICAgIyBvbmx5IGNoYW5nZSB0aGlzIGZvciBjcm9zcyBidWlsZHMgZm9yIDMuMywgaXNzdWVzIG9uIE1hZ2VpYQorLSAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX2djY19wYXRocygpCistICAgICAgICBpZiBub3QgY3Jvc3NfY29tcGlsaW5nOgorICAgICAgICAgICAgIHNlbGYuYWRkX211bHRpYXJjaF9wYXRocygpCisgCisgICAgICAgICAjIEFkZCBwYXRocyBzcGVjaWZpZWQgaW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBMREZMQUdTIGFuZAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtdXNlLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQ5MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3B5dGhvbjMtdXNlLUNST1NTUFlUSE9OUEFUSC1mb3ItUFlUSE9OX0ZPUl9CVUlMRC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDUzZWQyMTZkN2JmNzBkZDJhOTI1NDMyYjY4MDVhNzAxZTVmYzNlMGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAwNjo0NDo0NyArMDAwMAorU3ViamVjdDogW1BBVENIXSBweXRob24zIHVzZSBDUk9TU1BZVEhPTlBBVEggZm9yIFBZVEhPTl9GT1JfQlVJTEQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDcm9zcyBjb21waWxlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ODliYWY5Li4yODkwYzk2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02Nyw3ICs2Nyw3IEBAIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgCSAgICBBQ19NU0dfRVJST1IoW3B5dGhvbiRQQUNLQUdFX1ZFUlNJT04gaW50ZXJwcmV0ZXIgbm90IGZvdW5kXSkKKyAJZmkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGludGVycCkKKy0JUFlUSE9OX0ZPUl9CVUlMRD0nX1BZVEhPTl9QUk9KRUNUX0JBU0U9JChhYnNfYnVpbGRkaXIpIF9QWVRIT05fSE9TVF9QTEFURk9STT0kKF9QWVRIT05fSE9TVF9QTEFURk9STSkgUFlUSE9OUEFUSD0kKHNoZWxsIHRlc3QgLWYgcHlidWlsZGRpci50eHQgJiYgZWNobyAkKGFic19idWlsZGRpcikvYGNhdCBweWJ1aWxkZGlyLnR4dGA6KSQoc3JjZGlyKS9MaWI6JChzcmNkaXIpL0xpYi8kKFBMQVRESVIpICckaW50ZXJwCisrCVBZVEhPTl9GT1JfQlVJTEQ9J19QWVRIT05fUFJPSkVDVF9CQVNFPSQoYWJzX2J1aWxkZGlyKSBfUFlUSE9OX0hPU1RfUExBVEZPUk09JChfUFlUSE9OX0hPU1RfUExBVEZPUk0pIFBZVEhPTlBBVEg9JChDUk9TU1BZVEhPTlBBVEgpICckaW50ZXJwCisgICAgIGZpCisgZWxpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisgICAgIEFDX01TR19FUlJPUihbQ3Jvc3MgY29tcGlsaW5nIHJlcXVpcmVkIC0taG9zdD1IT1NULVRVUExFIGFuZCAtLWJ1aWxkPUFSQ0hdKQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktY2hlY2stY3Jvc3NfY29tcGlsaW5nLXdoZW4tZ2V0LUZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzJlMTJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDhkYWQ4MTBmM2EzZDA3M2YwOWFkNzJlMWEzZWUwYTg5NWVhYjJjYTEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFN1biwgMTggSmFuIDIwMTUgMTk6MDU6MzYgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2V0dXAucHk6Y2hlY2sgY3Jvc3NfY29tcGlsaW5nIHdoZW4gZ2V0IEZMQUdTCisKK0ZpeGVkIHdoZW4gY29tcGlsZSB0YXJnZXQgcHl0aG5vbjM6CitnY2MgLWlzeXN0ZW0vcGF0aC90by9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2luY2x1ZGUgXAorICAgIC1MPS9wYXRoL3RvL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliCisKK1RoaXMgaXMgaW5jb3JyZWN0LCB0aGUgbmF0aXZlIHN5c3Jvb3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGJ5IHRhcmdldAorcHl0aG9uMy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc2V0dXAucHkgfCAgIDEwICsrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQoraW5kZXggZTgzMzljZC4uODNmZDMxZiAxMDA2NDQKKy0tLSBhL3NldHVwLnB5CisrKysgYi9zZXR1cC5weQorQEAgLTIzOCw3ICsyMzgsMTAgQEAgY2xhc3MgUHlCdWlsZEV4dChidWlsZF9leHQpOgorICAgICAgICAgIyB1bmZvcnR1bmF0ZWx5LCBkaXN0dXRpbHMgZG9lc24ndCBsZXQgdXMgcHJvdmlkZSBzZXBhcmF0ZSBDIGFuZCBDKysKKyAgICAgICAgICMgY29tcGlsZXJzCisgICAgICAgICBpZiBjb21waWxlciBpcyBub3QgTm9uZToKKy0gICAgICAgICAgICAoY2NzaGFyZWQsY2ZsYWdzKSA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0NDU0hBUkVEJywnQ0ZMQUdTJykKKysgICAgICAgICAgICBpZiBjcm9zc19jb21waWxpbmc6CisrICAgICAgICAgICAgICAgIChjY3NoYXJlZCxjZmxhZ3MpID0gKG9zLmVudmlyb24uZ2V0KCdDQ1NIQVJFRCcpIG9yICcnLCBvcy5lbnZpcm9uLmdldCgnQ0ZMQUdTJykgb3IgJycpCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCisgICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyBjZmxhZ3MKKyAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKKyAKK0BAIC00NTcsNyArNDYwLDEwIEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1SJywgc2VsZi5jb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlycyksCisgICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctTCcsIHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdDUFBGTEFHUycsICctSScsIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzKSk6CistICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorKyAgICAgICAgICAgIGlmIGNyb3NzX2NvbXBpbGluZzoKKysgICAgICAgICAgICAgICAgZW52X3ZhbCA9IG9zLmVudmlyb24uZ2V0KGVudl92YXIpCisrICAgICAgICAgICAgZWxzZToKKysgICAgICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorICAgICAgICAgICAgIGlmIGVudl92YWw6CisgICAgICAgICAgICAgICAgICMgVG8gcHJldmVudCBvcHRwYXJzZSBmcm9tIHJhaXNpbmcgYW4gZXhjZXB0aW9uIGFib3V0IGFueQorICAgICAgICAgICAgICAgICAjIG9wdGlvbnMgaW4gZW52X3ZhbCB0aGF0IGl0IGRvZXNuJ3Qga25vdyBhYm91dCB3ZSBzdHJpcCBvdXQKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwLnB5LWZpbmQtbGlicmFyaWVzLWluLXN0YWdpbmctZGlycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjZiZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwLnB5LWZpbmQtbGlicmFyaWVzLWluLXN0YWdpbmctZGlycy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitQYXRjaCBzZXR1cC5weSBzbyB0aGF0IHRoZSBkZXRlY3RfbW9kdWxlcygpIGZ1bmN0aW9uIGxvb2tzIGZvciByZXF1aXJlZAorbGlicmFyaWVzIGFuZCBoZWFkZXJzIGluIFNUQUdJTkdfTElCRElSIC8gU1RBR0lOR19JTkNESVIuCisKK1dpdGhvdXQgdGhpcyBwYXRjaCwgc2V2ZXJhbCBleHRlbnNpb24gbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBldmVuIHRob3VnaAordGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50IGluIHRoZSBjb21waWxlcidzIHNlYXJjaCBwYXRocy4KK1RoZSByZXN1bHQgaXMgdGhlIGZvbGxvd2luZyB3YXJuaW5nLCBhbmQgdWx0aW1hdGVseSBpbmNvbXBsZXRlIHBhY2thZ2VzOgorCit8IFRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBvcHRpb25hbCBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOgorfCBfYnoyICAgICAgICAgICAgICAgICAgX2N1cnNlc19wYW5lbCAgICAgICAgIF9kYm0KK3wgX2dkYm0gICAgICAgICAgICAgICAgIF9sem1hICAgICAgICAgICAgICAgICBfc3FsaXRlMworfCBuaXMgICAgICAgICAgICAgICAgICAgcmVhZGxpbmUgICAgICAgICAgICAgIHpsaWIKK3wgVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4gZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuCisKK1Vwc3RyZWFtLVN0YXR1czogIEluYXBwcm9wcmlhdGUgW0Nyb3NzIGNvbXBpbGUgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IERvbWluaWMgU2FjcsOpIDxkb21pbmljLnNhY3JlQGdteC5kZT4KKworSW5kZXg6IFB5dGhvbi0zLjQuMy9zZXR1cC5weQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFB5dGhvbi0zLjQuMy5vcmlnL3NldHVwLnB5CisrKysgUHl0aG9uLTMuNC4zL3NldHVwLnB5CitAQCAtNTIxLDYgKzUyMSw4IEBAIGNsYXNzIFB5QnVpbGRFeHQoYnVpbGRfZXh0KToKKyAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgbGliX2RpcnMgPSBzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlyc1s6XQorICAgICAgICAgICAgIGluY19kaXJzID0gc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnNbOl0KKysgICAgICAgICAgICBsaWJfZGlycy5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ1NUQUdJTkdfTElCRElSJykpCisrICAgICAgICAgICAgaW5jX2RpcnMuYXBwZW5kKG9zLmVudmlyb24uZ2V0KCdTVEFHSU5HX0lOQ0RJUicpKQorICAgICAgICAgZXh0cyA9IFtdCisgICAgICAgICBtaXNzaW5nID0gW10KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cHR3ZWFrcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zZXR1cHR3ZWFrcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTkxYjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NldHVwdHdlYWtzLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB2YXJpb3VzIHdheXMgbmF0aXZlIHN5c3RlbSBvcHRpb25zIGNhbiBwYXNzIGludG8gdGhlIHB5dGhvbiAKK2NvbXBpbGF0aW9uIGFuZCBzb21laG93IGJyZWFrIEMgbW9kdWxlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8wNC8yMworCitJbmRleDogUHl0aG9uLTIuNy4yL3NldHVwLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTIuNy4yLm9yaWcvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzo0Ny4yOTU1ODI1NTMgKzAwMDAKKysrKyBQeXRob24tMi43LjIvc2V0dXAucHkJMjAxMi0wNC0yMyAyMDowMzoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMzEsNyArMjMxLDEzIEBACisgICAgICAgICAjIGNvbXBpbGVycworICAgICAgICAgaWYgY29tcGlsZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgKGNjc2hhcmVkLGNmbGFncykgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzKCdDQ1NIQVJFRCcsJ0NGTEFHUycpCistICAgICAgICAgICAgYXJnc1snY29tcGlsZXJfc28nXSA9IGNvbXBpbGVyICsgJyAnICsgY2NzaGFyZWQgKyAnICcgKyBjZmxhZ3MKKysgICAgICAgICAgICAjIE5lZWQgdG8gZmlsdGVyIG91dCAtaXN5c3Jvb3QgZnJvbSB0aGUgZmxhZ3MuIElkZWFsbHkgc2hvdWxkIAorKyAgICAgICAgICAgICMgZmlndXJlIG91dCB0YXJnZXQgZmxhZ3MgaGVyZS4KKysgICAgICAgICAgICBmbGFncyA9IFtdCisrICAgICAgICAgICAgZm9yIGYgaW4gY2ZsYWdzLnNwbGl0KCk6CisrICAgICAgICAgICAgICAgIGlmIG5vdCBmLnN0YXJ0c3dpdGgoIi1pc3lzdGVtIik6CisrICAgICAgICAgICAgICAgICAgICBmbGFncy5hcHBlbmQoZikKKysgICAgICAgICAgICBhcmdzWydjb21waWxlcl9zbyddID0gY29tcGlsZXIgKyAnICcgKyBjY3NoYXJlZCArICcgJyArICcgJy5qb2luKGZsYWdzKQorICAgICAgICAgc2VsZi5jb21waWxlci5zZXRfZXhlY3V0YWJsZXMoKiphcmdzKQorIAorICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbnMoc2VsZikKK0BAIC0zOTMsNyArMzk5LDYgQEAKKyAgICAgICAgICMgaW50byBjb25maWd1cmUgYW5kIHN0b3JlZCBpbiB0aGUgTWFrZWZpbGUgKGlzc3VlIGZvdW5kIG9uIE9TIFggMTAuMykuCisgICAgICAgICBmb3IgZW52X3ZhciwgYXJnX25hbWUsIGRpcl9saXN0IGluICgKKyAgICAgICAgICAgICAgICAgKCdMREZMQUdTJywgJy1SJywgc2VsZi5jb21waWxlci5ydW50aW1lX2xpYnJhcnlfZGlycyksCistICAgICAgICAgICAgICAgICgnTERGTEFHUycsICctTCcsIHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzKSwKKyAgICAgICAgICAgICAgICAgKCdDUFBGTEFHUycsICctSScsIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzKSk6CisgICAgICAgICAgICAgZW52X3ZhbCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcihlbnZfdmFyKQorICAgICAgICAgICAgIGlmIGVudl92YWw6CitAQCAtNDE5LDE2ICs0MjQsMTYgQEAKKyAgICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gcmV2ZXJzZWQob3B0aW9ucy5kaXJzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3QoZGlyX2xpc3QsIGRpcmVjdG9yeSkKKyAKKy0gICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKy0gICAgICAgICAgICAgICAgYW5kIG5vdCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZVEhPTkZSQU1FV09SSycpOgorKyMgICAgICAgIGlmIG9zLnBhdGgubm9ybXBhdGgoc3lzLnByZWZpeCkgIT0gJy91c3InIFwKKysjICAgICAgICAgICAgICAgIGFuZCBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgICAjIE9TWCBub3RlOiBEb24ndCBhZGQgTElCRElSIGFuZCBJTkNMVURFRElSIHRvIGJ1aWxkaW5nIGEgZnJhbWV3b3JrCisgICAgICAgICAgICAgIyAoUFlUSE9ORlJBTUVXT1JLIGlzIHNldCkgdG8gYXZvaWQgIyBsaW5raW5nIHByb2JsZW1zIHdoZW4KKyAgICAgICAgICAgICAjIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgdGhhbgorICAgICAgICAgICAgICMgdGhlIG9uZSB0aGF0IGlzIGN1cnJlbnRseSBpbnN0YWxsZWQgKGlzc3VlICM3NDczKQorLSAgICAgICAgICAgIGFkZF9kaXJfdG9fbGlzdChzZWxmLmNvbXBpbGVyLmxpYnJhcnlfZGlycywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJMSUJESVIiKSkKKy0gICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiSU5DTFVERURJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5saWJyYXJ5X2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkRJUiIpKQorKyMgICAgICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsCisrIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIklOQ0xVREVESVIiKSkKKyAKKyAgICAgICAgIHRyeToKKyAgICAgICAgICAgICBoYXZlX3VuaWNvZGUgPSB1bmljb2RlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaHV0aWwtZm9sbG93LXN5bWxpbmstZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMmIxYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitzaHV0aWxzIHNob3VsZCBjb25zaWRlciBzeW1saW5rcworCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGEvTGliL3NodXRpbC5weQkyMDEzLTAxLTI5IDEyOjMxOjA2LjkyNjU1NTc3OSAtMDgwMAorKysrIGIvTGliL3NodXRpbC5weQkyMDEzLTAxLTI5IDE2OjMxOjM5LjA5NzU1NDE4MiAtMDgwMAorQEAgLTEzMiw3ICsxMzIsNyBAQCBkZWYgY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rCisgICAgIHN0ID0gc3RhdF9mdW5jKHNyYykKKyAgICAgY2htb2RfZnVuYyhkc3QsIHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSkKKyAKKy1pZiBoYXNhdHRyKG9zLCAnbGlzdHhhdHRyJyk6CisraWYgaGFzYXR0cihvcywgJ2xpc3R4YXR0cicpIGFuZCBvcy5saXN0eGF0dHIgaW4gb3Muc3VwcG9ydHNfZm9sbG93X3N5bWxpbmtzOgorICAgICBkZWYgX2NvcHl4YXR0cihzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpOgorICAgICAgICAgIiIiQ29weSBleHRlbmRlZCBmaWxlc3lzdGVtIGF0dHJpYnV0ZXMgZnJvbSBgc3JjYCB0byBgZHN0YC4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaXRlY3VzdG9taXplLnB5IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3NpdGVjdXN0b21pemUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4YjVlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zaXRlY3VzdG9taXplLnB5CkBAIC0wLDAgKzEsMzcgQEAKKyMgT3BlbkVtYmVkZGVkIHNpdGVjdXN0b21pemUucHkgKEMpIDIwMDItMjAwOCBNaWNoYWVsICdNaWNrZXknIExhdWVyIDxtbGF1ZXJAdmFuaWxsZS1tZWRpYS5kZT4KKyMgR1BMdjIgb3IgbGF0ZXIKKyMgVmVyc2lvbjogMjAwODExMjMKKyMgRmVhdHVyZXM6CisjICogc2V0IHByb3BlciBkZWZhdWx0IGVuY29kaW5nCisjICogZW5hYmxlIHJlYWRsaW5lIGNvbXBsZXRpb24gaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyCisjICogbG9hZCBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBzdGFydHVwCisjICogc2F2ZSBjb21tYW5kIGxpbmUgaGlzdG9yeSBvbiBleGl0IAorCitpbXBvcnQgb3MKKworZGVmIF9fZXhpdGhhbmRsZXIoKToKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZSggIiVzLy5weXRob24taGlzdG9yeSIgJSBvcy5nZXRlbnYoICJIT01FIiwgIi90bXAiICkgKQorICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBwYXNzCisKK2RlZiBfX3JlZ2lzdGVyRXhpdEhhbmRsZXIoKToKKyAgICBpbXBvcnQgYXRleGl0CisgICAgYXRleGl0LnJlZ2lzdGVyKCBfX2V4aXRoYW5kbGVyICkKKworZGVmIF9fZW5hYmxlUmVhZGxpbmVTdXBwb3J0KCk6CisgICAgcmVhZGxpbmUuc2V0X2hpc3RvcnlfbGVuZ3RoKCAxMDAwICkKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCggInRhYjogY29tcGxldGUiICkKKyAgICB0cnk6CisgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKCAiJXMvLnB5dGhvbi1oaXN0b3J5IiAlIG9zLmdldGVudiggIkhPTUUiLCAiL3RtcCIgKSApCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHBhc3MKKworaW1wb3J0IHN5cwordHJ5OgorICAgIGltcG9ydCBybGNvbXBsZXRlciwgcmVhZGxpbmUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIF9fcmVnaXN0ZXJFeGl0SGFuZGxlcigpCisgICAgX19lbmFibGVSZWFkbGluZVN1cHBvcnQoKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3N5c2NvbmZpZy5weS1hZGQtX1BZVEhPTl9QUk9KRUNUX1NSQy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUwNzY0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBmYzkzYjNjYzIzYjRmOTY5OGFlOTJhNDI5ODZkYmIwMmI2ZjE5NTg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTdW4sIDE4IEphbiAyMDE1IDA2OjI5OjUwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIHN5c2NvbmZpZy5weTogYWRkIF9QWVRIT05fUFJPSkVDVF9TUkMKKworcHl0aG9uMyBoYXMgaW50cm9kdWNlZCBfUFlUSE9OX1BST0pFQ1RfQkFTRSB3aGljaCBpcyB1c2VkIGZvciBzZXBhcmF0ZSBCCithbmQgUywgYnV0IGl0IGRvZXNuJ3Qgd29yayB3aGVuIGNvbXBpbGUgTW9kdWxlcywgdGhlIHRhcmdldCBweXRob24zIHJ1bnMKK3B5dGhvbjMtbmF0aXZlJ3Mgc3lzY29uZmlnIHRvIGdldCBzcmNkaXIgd2hpY2ggaXMgdGhlIG5hdGl2ZSdzLCB0aGVyZQord291bGQgYmUgZXJyb3JzIHdoZW4gbmF0aXZlJ3Mgc3JjZGlyIGhhcyBiZWVuIHJlbW92ZWQsIGFkZAorX1BZVEhPTl9QUk9KRUNUX1NSQyB0byBmaXggdGhlIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIExpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IHwgICAgNSArKysrLQorIExpYi9zeXNjb25maWcucHkgICAgICAgICAgIHwgICAgNSArKysrLQorIDIgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQoraW5kZXggYTU0NWFiOS4uNzQzMTdkMSAxMDA2NDQKKy0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKysgYi9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weQorQEAgLTU1NCw3ICs1NTQsMTAgQEAgZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CisgICAgICAgICBfY29uZmlnX3ZhcnNbJ2V4ZWNfcHJlZml4J10gPSBFWEVDX1BSRUZJWAorIAorICAgICAgICAgIyBBbHdheXMgY29udmVydCBzcmNkaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorLSAgICAgICAgc3JjZGlyID0gX2NvbmZpZ192YXJzLmdldCgnc3JjZGlyJywgcHJvamVjdF9iYXNlKQorKyAgICAgICAgaWYgIl9QWVRIT05fUFJPSkVDVF9TUkMiIGluIG9zLmVudmlyb246CisrICAgICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmVudmlyb25bIl9QWVRIT05fUFJPSkVDVF9TUkMiXSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgc3JjZGlyID0gX2NvbmZpZ192YXJzLmdldCgnc3JjZGlyJywgcHJvamVjdF9iYXNlKQorICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgIGlmIHB5dGhvbl9idWlsZDoKKyAgICAgICAgICAgICAgICAgIyBJZiBzcmNkaXIgaXMgYSByZWxhdGl2ZSBwYXRoICh0eXBpY2FsbHkgJy4nIG9yICcuLicpCitkaWZmIC0tZ2l0IGEvTGliL3N5c2NvbmZpZy5weSBiL0xpYi9zeXNjb25maWcucHkKK2luZGV4IDcyODdmMTEuLmNjOTI5OTggMTAwNjQ0CistLS0gYS9MaWIvc3lzY29uZmlnLnB5CisrKysgYi9MaWIvc3lzY29uZmlnLnB5CitAQCAtNTYyLDcgKzU2MiwxMCBAQCBkZWYgZ2V0X2NvbmZpZ192YXJzKCphcmdzKToKKyAgICAgICAgIF9DT05GSUdfVkFSU1sndXNlcmJhc2UnXSA9IF9nZXR1c2VyYmFzZSgpCisgCisgICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCistICAgICAgICBzcmNkaXIgPSBfQ09ORklHX1ZBUlMuZ2V0KCdzcmNkaXInLCBfUFJPSkVDVF9CQVNFKQorKyAgICAgICAgaWYgIl9QWVRIT05fUFJPSkVDVF9TUkMiIGluIG9zLmVudmlyb246CisrICAgICAgICAgICAgc3JjZGlyID0gb3MucGF0aC5hYnNwYXRoKG9zLmVudmlyb25bIl9QWVRIT05fUFJPSkVDVF9TUkMiXSkKKysgICAgICAgIGVsc2U6CisrICAgICAgICAgICAgc3JjZGlyID0gX0NPTkZJR19WQVJTLmdldCgnc3JjZGlyJywgX1BST0pFQ1RfQkFTRSkKKyAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgICBpZiBfUFlUSE9OX0JVSUxEOgorICAgICAgICAgICAgICAgICAjIElmIHNyY2RpciBpcyBhIHJlbGF0aXZlIHBhdGggKHR5cGljYWxseSAnLicgb3IgJy4uJykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg1YjU1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uMy9zeXNyb290LWluY2x1ZGUtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitEb250IHNlYXJjaCBoYXJkY29kZWQgcGF0aHMsIHdlIG1pZ2h0IGJlIGRvaW5nIGEgY3Jvc3MtYnVpbGQKK1VzZSAnPScgaW4tZnJvbnQgdG8gbGV0IGNvbXBpbGVyIGFwcGVuZCBzeXNyb290LCBpZiBpdCBjYW4KKworU2hvdWxkIGZpeCB0aGluZ3MgbGlrZQorCitjb25maWd1cmU6Njk3MjogYXJtLWFuZ3N0cm9tLWxpbnV4LWdudWVhYmktZ2NjICAtbWFyY2g9YXJtdjctYSAtbXRodW1iLWludGVyd29yayAtbWZsb2F0LWFiaT1oYXJkIC1tZnB1PW5lb24gLW10dW5lPWNvcnRleC1hOCAtRE5ERUJVRyAtZm5vLWlubGluZSAtRF9fU09GVEZQX18gLS1zeXNyb290PS9idWlsZC92MjAxMy4wNi9idWlsZC90bXAtYW5nc3Ryb21fdjIwMTNfMDYtZWdsaWJjL3N5c3Jvb3RzL2JlYWdsZWJvbmUgLWMgLU8yIC1waXBlIC1nIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3cgY29uZnRlc3QuYyA+JjUKK2NjMTogd2FybmluZzogaW5jbHVkZSBsb2NhdGlvbiAiL3Vzci9pbmNsdWRlL25jdXJzZXN3IiBpcyB1bnNhZmUgZm9yIGNyb3NzLWNvbXBpbGF0aW9uIFstV3BvaXNvbi1zeXN0ZW0tZGlyZWN0b3JpZXNdCisKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWoKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisKK0luZGV4OiBQeXRob24tMy4zLjIvc2V0dXAucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBQeXRob24tMy4zLjIub3JpZy9zZXR1cC5weQkyMDEzLTA3LTMwIDAxOjMwOjQ4LjAwMDAwMDAwMCAtMDcwMAorKysrIFB5dGhvbi0zLjMuMi9zZXR1cC5weQkyMDEzLTA3LTMwIDAxOjQxOjExLjY5Nzg2MjcyMyAtMDcwMAorQEAgLTEyMTAsNyArMTIxMCw3IEBACisgICAgICAgICBwYW5lbF9saWJyYXJ5ID0gJ3BhbmVsJworICAgICAgICAgaWYgY3Vyc2VzX2xpYnJhcnkgPT0gJ25jdXJzZXN3JzoKKyAgICAgICAgICAgICBjdXJzZXNfZGVmaW5lcy5hcHBlbmQoKCdIQVZFX05DVVJTRVNXJywgJzEnKSkKKy0gICAgICAgICAgICBjdXJzZXNfaW5jbHVkZXMuYXBwZW5kKCcvdXNyL2luY2x1ZGUvbmN1cnNlc3cnKQorKyAgICAgICAgICAgIGN1cnNlc19pbmNsdWRlcy5hcHBlbmQoJz0vdXNyL2luY2x1ZGUvbmN1cnNlc3cnKQorICAgICAgICAgICAgICMgQnVnIDE0NjQwNTY6IElmIF9jdXJzZXMuc28gbGlua3Mgd2l0aCBuY3Vyc2VzdywKKyAgICAgICAgICAgICAjIF9jdXJzZXNfcGFuZWwuc28gbXVzdCBsaW5rIHdpdGggcGFuZWx3LgorICAgICAgICAgICAgIHBhbmVsX2xpYnJhcnkgPSAncGFuZWx3JworQEAgLTE4MTksNyArMTgxOSw3IEBACisgICAgICAgICBpZiBob3N0X3BsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICMgT1MgWCAxMC41IGNvbWVzIHdpdGggbGliZmZpLmR5bGliOyB0aGUgaW5jbHVkZSBmaWxlcyBhcmUKKyAgICAgICAgICAgICAjIGluIC91c3IvaW5jbHVkZS9mZmkKKy0gICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQoJy91c3IvaW5jbHVkZS9mZmknKQorKyAgICAgICAgICAgIGluY19kaXJzLmFwcGVuZCgnPS91c3IvaW5jbHVkZS9mZmknKQorIAorICAgICAgICAgZmZpX2luYyA9IFtzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkxJQkZGSV9JTkNMVURFRElSIildCisgICAgICAgICBpZiBub3QgZmZpX2luYyBvciBmZmlfaW5jWzBdID09ICcnOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjMvdW5peGNjb21waWxlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjkwZjEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zL3VuaXhjY29tcGlsZXIucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZSBDQyB2YXJpYWJsZSxzb21ldGltZXMgbGlrZToieDg2XzY0LXBva3ktbGludXgtZ2NjICAgLW02NCAtLXN5c3Jvb3Q9LyR7VE1QRElSfS9zeXNyb290cy9xZW11eDg2LTY0IiwgY29udGFpbnMgb3B0aW9uIGluZm9ybWF0aW9uLiAKK1RoaXMgd2lsbCBsZWFkIHRvIHdyb25nIGNvbXBpbGVyIG5hbWUgInFlbXV4ODYtNjQiIHJhdGhlciB0aGFuICJ4ODZfNjQtcG9reS1saW51eC1nY2MiIHdoZW4gcHl0aG9uIGZpbmRpbmcgdGhlIGNvbXBpbGVyIG5hbWUuCisKK1NlY29uZGx5IGFkZCAtTD08cGF0aD4gdGhpcyB3YXkgbGlua2VyIHdpbGwgYmUgYWJsZSB0byByZXNvbHZlIC91c3IvbGliIHcuci50IHN5c3Jvb3QgYW5kIG5vdAordXNlIGhhcmRjb2RlZCAvdXNyL2xpYiB0byBsb29rIGZvciBsaWJzIHdoaWNoIGlzIHdyb25nIGluIGNyb3NzIGNvbXBpbGUgZW52aXJvbm1lbnQgYW5kIHRoaXMgd2lsbCB3b3JrCitvayBvbiBuYXRpdmUgc3lzdGVtcyB0b28gc2luY2Ugc3lzcm9vdCBmb3IgbmF0aXZlIGNvbXBpbGVycyBpcyAvCisKK1NpZ25lZC1vZmYtYnk6IE1laSBMZWkgPGxlaS5tZWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBQeXRob24tMy4zLjIvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gUHl0aG9uLTMuMy4yLm9yaWcvTGliL2Rpc3R1dGlscy91bml4Y2NvbXBpbGVyLnB5CTIwMTMtMDUtMTUgMDk6MzI6NTQuMDAwMDAwMDAwIC0wNzAwCisrKysgUHl0aG9uLTMuMy4yL0xpYi9kaXN0dXRpbHMvdW5peGNjb21waWxlci5weQkyMDEzLTA4LTAxIDAwOjU4OjE4LjYyOTA1NjI4NiAtMDcwMAorQEAgLTIwMiw3ICsyMDIsOSBAQAorICAgICAjIGNjb21waWxlci5weS4KKyAKKyAgICAgZGVmIGxpYnJhcnlfZGlyX29wdGlvbihzZWxmLCBkaXIpOgorLSAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKKysgICAgICAgIGlmIGRpci5zdGFydHN3aXRoKCIuIik6CisrICAgICAgICAgICAgcmV0dXJuICItTCIgKyBkaXIKKysgICAgICAgIHJldHVybiAiLUw9IiArIGRpcgorIAorICAgICBkZWYgX2lzX2djYyhzZWxmLCBjb21waWxlcl9uYW1lKToKKyAgICAgICAgIHJldHVybiAiZ2NjIiBpbiBjb21waWxlcl9uYW1lIG9yICJnKysiIGluIGNvbXBpbGVyX25hbWUKK0BAIC0yMjEsNyArMjIxLDcgQEAKKyAgICAgICAgICMgdGhpcyB0aW1lLCB0aGVyZSdzIG5vIHdheSB0byBkZXRlcm1pbmUgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCisgICAgICAgICAjIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgc3RvcmVkIGluIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uLCBzbworICAgICAgICAgIyB3ZSB1c2UgdGhpcyBoYWNrLgorLSAgICAgICAgY29tcGlsZXIgPSBvcy5wYXRoLmJhc2VuYW1lKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ0MiKSkKKysgICAgICAgIGNvbXBpbGVyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJDQyIpCisgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjZdID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgICMgTWFjT1NYJ3MgbGlua2VyIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgLVIgZmxhZyBhdCBhbGwKKyAgICAgICAgICAgICByZXR1cm4gIi1MIiArIGRpcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNC4zLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3B5dGhvbi9weXRob24zXzMuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MWQyNzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbjNfMy40LjMuYmIKQEAgLTAsMCArMSwyMjUgQEAKK3JlcXVpcmUgcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uLmluYworCitERVBFTkRTID0gInB5dGhvbjMtbmF0aXZlIGxpYmZmaSBiemlwMiBkYiBnZGJtIG9wZW5zc2wgcmVhZGxpbmUgc3FsaXRlMyB6bGliIHZpcnR1YWwvbGliaW50bCB4eiIKK1BSID0gIiR7SU5DX1BSfS4wIgorUFlUSE9OX01BSk1JTiA9ICIzLjQiCitQWVRIT05fQklOQUJJPSAiJHtQWVRIT05fTUFKTUlOfW0iCitESVNUUk9fU1JDX1VSSSA/PSAiZmlsZTovL3NpdGVjdXN0b21pemUucHkiCitESVNUUk9fU1JDX1VSSV9saW51eHN0ZGJhc2UgPSAiIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8ke1BWfS9QeXRob24tJHtQVn0udGFyLnh6IFwKK2ZpbGU6Ly9weXRob24tY29uZmlnLnBhdGNoIFwKK2ZpbGU6Ly8wMDAtY3Jvc3MtY29tcGlsZS5wYXRjaCBcCitmaWxlOi8vMDIwLWRvbnQtY29tcGlsZS1weXRob24tZmlsZXMucGF0Y2ggXAorZmlsZTovLzAzMC1maXh1cC1pbmNsdWRlLWRpcnMucGF0Y2ggXAorZmlsZTovLzA3MC1kb250LWNsZWFuLWlwa2ctaW5zdGFsbC5wYXRjaCBcCitmaWxlOi8vMDgwLWRpc3R1dGlscy1kb250X2FkanVzdF9maWxlcy5wYXRjaCBcCitmaWxlOi8vMTEwLWVuYWJsZS16bGliLnBhdGNoIFwKK2ZpbGU6Ly8xMzAtcmVhZGxpbmUtc2V0dXAucGF0Y2ggXAorZmlsZTovLzE1MC1maXgtc2V0dXB0ZXJtLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWgycHktRml4LWlzc3VlLTEzMDMyLXdoZXJlLWl0LWZhaWxzLXdpdGgtVW5pY29kZURlY28ucGF0Y2ggXAorZmlsZTovL21ha2VyYWNlLnBhdGNoIFwKKyR7RElTVFJPX1NSQ19VUkl9IFwKKyIKKworU1JDX1VSSSArPSAiXAorICAgICAgICAgICAgZmlsZTovLzAzLWZpeC10a2ludGVyLWRldGVjdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDQtZGVmYXVsdC1pcy1vcHRpbWl6ZWQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkX3dhcm5pbmdfYWJvdXRfdGtpbnRlci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vY2dpX3B5LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ob3N0X2luY2x1ZGVfY29udGFtaW5hdGlvbi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uLTMuMy1tdWx0aWxpYi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2h1dGlsLWZvbGxvdy1zeW1saW5rLWZpeC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzcm9vdC1pbmNsdWRlLWhlYWRlcnMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VuaXhjY29tcGlsZXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2F2b2lkLW5jdXJzZXN3LWluY2x1ZGUtcGF0aC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcHl0aG9uMy11c2UtQ1JPU1NQWVRIT05QQVRILWZvci1QWVRIT05fRk9SX0JVSUxELnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob24zLXNldHVwLnB5LW5vLWhvc3QtaGVhZGVycy1saWJzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zeXNjb25maWcucHktYWRkLV9QWVRIT05fUFJPSkVDVF9TUkMucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NldHVwLnB5LWNoZWNrLWNyb3NzX2NvbXBpbGluZy13aGVuLWdldC1GTEFHUy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc2V0dXAucHktZmluZC1saWJyYXJpZXMtaW4tc3RhZ2luZy1kaXJzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjdkMDkyZDFiYmE2ZTE3ZjBkOWJkMjFiNDllNDQxZGQ1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI1YjM5NjM1MzM3NjhkNWZjMzI1YTRkN2E2YmQ2ZjY2NjcyNjAwMmQ2OTZmMWQzOTllYzA2YjA0M2VhOTk2YjgiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWRkOThkMDFkNDcxZmFjOGQ4ZGJkZDk3NTIyOWRiYTAzIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uM25hdGl2ZSBwa2djb25maWcKKworQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgPSAiYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xjaGZsYWdzPW5vIFwKKyAgICAgICAgICAgICAgICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9eWVzIFwKKyAgICAgICAgICAgICAgICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubyBcCisgICAgICAgICAgICAgICAgYWNfY3ZfZmlsZV9fZGV2X3B0bXg9eWVzIFwKKyAgICAgICAgICAgICAgICBhY19jdl9maWxlX19kZXZfcHRjPW5vIFwKKyIKKyMgVGhlIDMgbGluZXMgYmVsb3cgYXJlIGNvcGllZCBmcm9tIHRoZSBsaWJmZmkgcmVjaXBlLCBjdHlwZXMgc2hpcHMgaXRzIG93biBjb3B5IG9mIHRoZSBsaWJmZmkgc291cmNlcworI1NvbWVob3cgZ2NjIGRvZXNuJ3Qgc2V0IF9fU09GVEZQX18gd2hlbiBwYXNzaW5nIC1tZmxvYXRhYmk9c29mdHAgOigKK1RBUkdFVF9DQ19BUkNIX2FwcGVuZF9hcm12NiA9ICIgLURfX1NPRlRGUF9fIgorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY3YSA9ICIgLURfX1NPRlRGUF9fIgorVEFSR0VUX0NDX0FSQ0ggKz0gIi1ETkRFQlVHIC1mbm8taW5saW5lIgorRVhUUkFfT0VNQUtFICs9ICJDUk9TU19DT01QSUxFPXllcyIKK0VYVFJBX09FQ09ORiArPSAiQ1JPU1NQWVRIT05QQVRIPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2xpYi1keW5sb2FkLyAtLXdpdGhvdXQtZW5zdXJlcGlwIgorCitleHBvcnQgQ1JPU1NfQ09NUElMRSA9ICIke1RBUkdFVF9QUkVGSVh9IgorZXhwb3J0IF9QWVRIT05fUFJPSkVDVF9CQVNFID0gIiR7Qn0iCitleHBvcnQgX1BZVEhPTl9QUk9KRUNUX1NSQyA9ICIke1N9IgorZXhwb3J0IENDU0hBUkVEID0gIi1mUElDIgorCisjIEZpeCBjdHlwZXMgY3Jvc3MgY29tcGlsYXRpb24KK2V4cG9ydCBDUk9TU1BZVEhPTlBBVEggPSAiJHtCfS9idWlsZC9saWIubGludXgtJHtUQVJHRVRfQVJDSH0tJHtQWVRIT05fTUFKTUlOfToke1N9L0xpYjoke1N9L0xpYi9wbGF0LWxpbnV4IgorCisjIE5vIGN0eXBlcyBvcHRpb24gZm9yIHB5dGhvbiAzCitQWVRIT05MU0JPUFRTID0gIiIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKKwlhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlIC0tZXhjbHVkZT1hdXRvcG9pbnQgLi4vUHl0aG9uLSR7UFZ9L01vZHVsZXMvX2N0eXBlcy9saWJmZmkKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgIyByZWdlbmVyYXRlIHBsYXRmb3JtIHNwZWNpZmljIGZpbGVzLCBiZWNhdXNlIHRoZXkgZGVwZW5kIG9uIHN5c3RlbSBoZWFkZXJzCisgICAgICAgIGNkICR7U30vTGliL3BsYXQtbGludXgqCisgICAgICAgIGluY2x1ZGU9JHtTVEFHSU5HX0lOQ0RJUn0gJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorICAgICAgICAgICAgICAgICR7U30vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2RsZmNuLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L2xpbnV4L2Nkcm9tLmggXAorICAgICAgICAgICAgICAgICR7U1RBR0lOR19JTkNESVJ9L25ldGluZXQvaW4uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vc3lzL3R5cGVzLmgKKyAgICAgICAgc2VkIC1lICdzLCR7U1RBR0lOR19ESVJfSE9TVH0sLGcnIC1pICoucHkKKyAgICAgICAgY2QgLQorCisKKwkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICisJc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCisKKwlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCisJZmkKKwlzZWQgLWkgLWUgJ3MsXkNPTkZJR1VSRV9MREZMQUdTPS4qLENPTkZJR1VSRV9MREZMQUdTPS1MLiAtTCR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCisJCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJTWFrZWZpbGUKKwkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCisJIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290CisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iIGxpYnB5dGhvbjMuc28KKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9weXRob24zIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJTElCPSR7YmFzZWxpYn0gXAorCQlBUkNIPSR7VEFSR0VUX0FSQ0h9IFwKKwkJT1BUPSIke0NGTEFHU30iCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKKwkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCisKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnCisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnCisKKwkjIHJlcnVuIHRoZSBidWlsZCBvbmNlIGFnYWluIHdpdGggb3JpZ2luYWwgbWFrZWZpbGUgdGhpcyB0aW1lCisJIyBydW4gaW5zdGFsbCBpbiBhIHNlcGFyYXRlIHN0ZXAgdG8gYXZvaWQgY29tcGlsZS9pbnN0YWxsIHJhY2UKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24zLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcHl0aG9uMyBcCisJCVNUQUdJTkdfTElCRElSPSR7U1RBR0lOR19MSUJESVJ9IFwKKwkJU1RBR0lOR19JTkNESVI9JHtTVEFHSU5HX0lOQ0RJUn0gXAorCQlTVEFHSU5HX0JBU0VMSUJESVI9JHtTVEFHSU5HX0JBU0VMSUJESVJ9IFwKKwkJQlVJTERfU1lTPSR7QlVJTERfU1lTfSBIT1NUX1NZUz0ke0hPU1RfU1lTfSBcCisJCUxJQj0ke2Jhc2VsaWJ9IFwKKwkJQVJDSD0ke1RBUkdFVF9BUkNIfSBcCisJCURFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9CisJCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uMy1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbjMtbmF0aXZlL3B5dGhvbjMgXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlMSUI9JHtiYXNlbGlifSBcCisJCUFSQ0g9JHtUQVJHRVRfQVJDSH0gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCisKKwkjIGF2b2lkIGNvbmZsaWN0IHdpdGggMnRvMyBmcm9tIFB5dGhvbiAyCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vMnRvMworCisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlLnN5c3Jvb3QgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCWlmIFsgLWUgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5IF07IHRoZW4KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2l0ZWN1c3RvbWl6ZS5weSAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59CisJZmkKKworCW9lX211bHRpbGliX2hlYWRlciBweXRob24ke1BZVEhPTl9CSU5BQkl9L3B5Y29uZmlnLmgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICgpIHsKKwljcmVhdGVfd3JhcHBlciAke0R9JHtiaW5kaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0gVEVSTUlORk9fRElSUz0nJHtzeXNjb25mZGlyfS90ZXJtaW5mbzovZXRjL3Rlcm1pbmZvOi91c3Ivc2hhcmUvdGVybWluZm86L3Vzci9zaGFyZS9taXNjL3Rlcm1pbmZvOi9saWIvdGVybWluZm8nCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJNYWtlZmlsZSIKK1BBQ0tBR0VfUFJFUFJPQ0VTU19GVU5DUyArPSAicHlfcGFja2FnZV9wcmVwcm9jZXNzIgorCitweV9wYWNrYWdlX3ByZXByb2Nlc3MgKCkgeworCSMgY29weSBiYWNrIHRoZSBvbGQgTWFrZWZpbGUgdG8gZml4IHRhcmdldCBwYWNrYWdlCisJaW5zdGFsbCAtbSAwNjQ0ICR7Qn0vTWFrZWZpbGUub3JpZyAke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Cit9CisKK3JlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCisKKyMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCitSUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCitSUkVDT01NRU5EU18ke1BOfS1jcnlwdCA9ICJvcGVuc3NsIgorUlJFQ09NTUVORFNfJHtQTn0tY3J5cHRfY2xhc3MtbmF0aXZlc2RrID0gIm5hdGl2ZXNkay1vcGVuc3NsIgorCitGSUxFU18ke1BOfS0ydG8zICs9ICIke2JpbmRpcn0vMnRvMy0ke1BZVEhPTl9NQUpNSU59IgorRklMRVNfJHtQTn0tcHlkb2MgKz0gIiR7YmluZGlyfS9weWRvYyR7UFlUSE9OX01BSk1JTn0gJHtiaW5kaXJ9L3B5ZG9jMyIKK0ZJTEVTXyR7UE59LWlkbGUgKz0gIiR7YmluZGlyfS9pZGxlMyAke2JpbmRpcn0vaWRsZSR7UFlUSE9OX01BSk1JTn0iCisKK1BBQ0tBR0VTID0rICIke1BOfS1weXZlbnYiCitGSUxFU18ke1BOfS1weXZlbnYgKz0gIiR7YmluZGlyfS9weXZlbnYtJHtQWVRIT05fTUFKTUlOfSAke2JpbmRpcn0vcHl2ZW52IgorCisjIHBhY2thZ2UgbGlicHl0aG9uMworUEFDS0FHRVMgPSsgImxpYnB5dGhvbjMgbGlicHl0aG9uMy1zdGF0aWNkZXYiCitGSUxFU19saWJweXRob24zID0gIiR7bGliZGlyfS9saWJweXRob24qLnNvLioiCitGSUxFU19saWJweXRob24zLXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vY29uZmlnLSR7UFlUSE9OX0JJTkFCSX0vbGlicHl0aG9uJHtQWVRIT05fQklOQUJJfS5hIgorCisjIGNhdGNoIGRlYnVnIGV4dGVuc2lvbnMgKGlzbid0IHRoYXQgYWxyZWFkeSBpbiBweXRob24tY29yZS1kYmc/KQorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8uZGVidWciCisKKyMgY2F0Y2ggYWxsIHRoZSByZXN0ICh1bnNvcnRlZCkKK1BBQ0tBR0VTICs9ICIke1BOfS1taXNjIgorUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiJHtQTn0tY29yZSIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuOS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9weXRob24vcHl0aG9uXzIuNy45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDU1NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcHl0aG9uL3B5dGhvbl8yLjcuOS5iYgpAQCAtMCwwICsxLDE4MCBAQAorcmVxdWlyZSBweXRob24uaW5jCitERVBFTkRTID0gInB5dGhvbi1uYXRpdmUgbGliZmZpIGJ6aXAyIGRiIGdkYm0gb3BlbnNzbCByZWFkbGluZSBzcWxpdGUzIHpsaWIiCitQUiA9ICIke0lOQ19QUn0iCisKK0RJU1RST19TUkNfVVJJID89ICJmaWxlOi8vc2l0ZWN1c3RvbWl6ZS5weSIKK0RJU1RST19TUkNfVVJJX2xpbnV4c3RkYmFzZSA9ICIiCitTUkNfVVJJICs9ICJcCisgIGZpbGU6Ly8wMS11c2UtcHJvcGVyLXRvb2xzLWZvci1jcm9zcy1idWlsZC5wYXRjaCBcCisgIGZpbGU6Ly8wMy1maXgtdGtpbnRlci1kZXRlY3Rpb24ucGF0Y2ggXAorICBmaWxlOi8vMDYtYXZvaWRfdXNyX2xpYl90ZXJtY2FwX3BhdGhfaW5fbGlua2luZy5wYXRjaCBcCisgICR7RElTVFJPX1NSQ19VUkl9IFwKKyAgZmlsZTovL211bHRpbGliLnBhdGNoIFwKKyAgZmlsZTovL2NnaV9weS5wYXRjaCBcCisgIGZpbGU6Ly9zZXR1cF9weV9za2lwX2Nyb3NzX2ltcG9ydF9jaGVjay5wYXRjaCBcCisgIGZpbGU6Ly9hZGQtbWQ1bW9kdWxlLXN1cHBvcnQucGF0Y2ggXAorICBmaWxlOi8vaG9zdF9pbmNsdWRlX2NvbnRhbWluYXRpb24ucGF0Y2ggXAorICBmaWxlOi8vZml4X2Zvcl91c2luZ19kaWZmZXJlbnRfbGliZGlyLnBhdGNoIFwKKyAgZmlsZTovL3NldHVwdHdlYWtzLnBhdGNoIFwKKyAgZmlsZTovL2NoZWNrLWlmLXRhcmdldC1pcy02NGItbm90LWhvc3QucGF0Y2ggXAorICBmaWxlOi8vc2VhcmNoX2RiX2hfaW5faW5jX2RpcnNfYW5kX2F2b2lkX3dhcm5pbmcucGF0Y2ggXAorICBmaWxlOi8vYXZvaWRfd2FybmluZ19hYm91dF90a2ludGVyLnBhdGNoIFwKKyAgZmlsZTovL2F2b2lkX3dhcm5pbmdfZm9yX3N1bm9zX3NwZWNpZmljX21vZHVsZS5wYXRjaCBcCisgIGZpbGU6Ly9weXRob24tMi43LjMtcmVtb3ZlLWJzZGItcnBhdGgucGF0Y2ggXAorICBmaWxlOi8vZml4LW1ha2VmaWxlLWZvci1wdGVzdC5wYXRjaCBcCisgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICBmaWxlOi8vcGFyYWxsZWwtbWFrZWluc3QtY3JlYXRlLWJpbmRpci5wYXRjaCBcCisgIGZpbGU6Ly91c2Vfc3lzcm9vdF9uY3Vyc2VzX2luc3RlYWRfb2ZfaG9zdC5wYXRjaCBcCisgIGZpbGU6Ly9hdm9pZF9wYXJhbGxlbF9tYWtlX3JhY2VzX29uX3BnZW4ucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vUHl0aG9uLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBtdWx0aWxpYl9oZWFkZXIgcHl0aG9uLWRpciBweXRob25uYXRpdmUKKworQ09ORklHVVJFT1BUUyArPSAiIC0td2l0aC1zeXN0ZW0tZmZpICIKKworIyBUaGUgMyBsaW5lcyBiZWxvdyBhcmUgY29waWVkIGZyb20gdGhlIGxpYmZmaSByZWNpcGUsIGN0eXBlcyBzaGlwcyBpdHMgb3duIGNvcHkgb2YgdGhlIGxpYmZmaSBzb3VyY2VzCisjU29tZWhvdyBnY2MgZG9lc24ndCBzZXQgX19TT0ZURlBfXyB3aGVuIHBhc3NpbmcgLW1mbG9hdGFiaT1zb2Z0cCA6KAorVEFSR0VUX0NDX0FSQ0hfYXBwZW5kX2FybXY2ID0gIiAtRF9fU09GVEZQX18iCitUQVJHRVRfQ0NfQVJDSF9hcHBlbmRfYXJtdjdhID0gIiAtRF9fU09GVEZQX18iCisKKyMgVGhlIGZvbGxvd2luZyBpcyBhIGhhY2sgdW50aWwgd2UgZHJvcCBhY19jdl9zaXplb2Zfb2ZmX3QgZnJvbSBzaXRlIGZpbGVzCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2FjX2N2X3NpemVvZl9vZmZfdD04JywgJycsIGQpfSBhY19jdl9maWxlX19kZXZfcHRteD15ZXMgYWNfY3ZfZmlsZV9fZGV2X3B0Yz1ubyIKKworZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlybSAtZiAke1N9L01ha2VmaWxlLm9yaWcKKyAgICAgICAgYXV0b3JlY29uZiAtV2Nyb3NzIC0tdmVyYm9zZSAtLWluc3RhbGwgLS1mb3JjZSAtLWV4Y2x1ZGU9YXV0b3BvaW50IC4uL1B5dGhvbi0ke1BWfS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpCit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgICAgICMgcmVnZW5lcmF0ZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWxlcywgYmVjYXVzZSB0aGV5IGRlcGVuZCBvbiBzeXN0ZW0gaGVhZGVycworICAgICAgICBjZCAke1N9L0xpYi9wbGF0LWxpbnV4MgorICAgICAgICBpbmNsdWRlPSR7U1RBR0lOR19JTkNESVJ9ICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisgICAgICAgICAgICAgICAgJHtTfS9Ub29scy9zY3JpcHRzL2gycHkucHkgLWkgJyh1X2xvbmcpJyBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vZGxmY24uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbGludXgvY2Ryb20uaCBcCisgICAgICAgICAgICAgICAgJHtTVEFHSU5HX0lOQ0RJUn0vbmV0aW5ldC9pbi5oIFwKKyAgICAgICAgICAgICAgICAke1NUQUdJTkdfSU5DRElSfS9zeXMvdHlwZXMuaAorICAgICAgICBzZWQgLWUgJ3MsJHtTVEFHSU5HX0RJUl9IT1NUfSwsZycgLWkgKi5weQorICAgICAgICBjZCAtCisKKwkjIHJlbW92ZSBhbnkgYm9ndXMgTERfTElCUkFSWV9QQVRICisJc2VkIC1pIC1lIHMsUlVOU0hBUkVEPS4qLFJVTlNIQVJFRD0sIE1ha2VmaWxlCisKKwlpZiBbICEgLWYgTWFrZWZpbGUub3JpZyBdOyB0aGVuCisJCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZSBNYWtlZmlsZS5vcmlnCisJZmkKKwlzZWQgLWkgLWUgJ3MjXkxERkxBR1M9LiojTERGTEFHUz0ke0xERkxBR1N9IC1MLiAtTCR7U1RBR0lOR19MSUJESVJ9I2cnIFwKKwkJLWUgJ3MsbGliZGlyPSR7bGliZGlyfSxsaWJkaXI9JHtTVEFHSU5HX0xJQkRJUn0sZycgXAorCQktZSAncyxsaWJleGVjZGlyPSR7bGliZXhlY2Rpcn0sbGliZXhlY2Rpcj0ke1NUQUdJTkdfRElSX0hPU1R9JHtsaWJleGVjZGlyfSxnJyBcCisJCS1lICdzLF5MSUJESVI9LiosTElCRElSPSR7U1RBR0lOR19MSUJESVJ9LGcnIFwKKwkJLWUgJ3MsaW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9LGluY2x1ZGVkaXI9JHtTVEFHSU5HX0lOQ0RJUn0sZycgXAorCQktZSAncyxeSU5DTFVERURJUj0uKixJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJLWUgJ3MsXkNPTkZJTkNMVURFRElSPS4qLENPTkZJTkNMVURFPSR7U1RBR0lOR19JTkNESVJ9LGcnIFwKKwkJTWFrZWZpbGUKKwkjIHNhdmUgY29weSBvZiBpdCBub3csIGJlY2F1c2UgaWYgd2UgZG8gaXQgaW4gZG9faW5zdGFsbCBhbmQgCisJIyB0aGVuIGNhbGwgZG9faW5zdGFsbCB0d2ljZSB3ZSBnZXQgTWFrZWZpbGUub3JpZyA9PSBNYWtlZmlsZS5zeXNyb290CisJaW5zdGFsbCAtbSAwNjQ0IE1ha2VmaWxlIE1ha2VmaWxlLnN5c3Jvb3QKKworCWV4cG9ydCBDUk9TU19DT01QSUxFPSIke1RBUkdFVF9QUkVGSVh9IgorCWV4cG9ydCBQWVRIT05CVUlMRERJUj0iJHtCfSIKKworCW9lX3J1bm1ha2UgSE9TVFBHRU49JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcGdlbiBcCisJCUhPU1RQWVRIT049JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3B5dGhvbi1uYXRpdmUvcHl0aG9uIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJT1BUPSIke0NGTEFHU30iCit9CisKK2RvX2luc3RhbGwoKSB7CisJIyBtYWtlIGluc3RhbGwgbmVlZHMgdGhlIG9yaWdpbmFsIE1ha2VmaWxlLCBvciBvdGhlcndpc2UgdGhlIGluY2x1ZXMgd291bGQKKwkjIGdvIHRvICR7RH0ke1NUQUdJTkcuLi59Ly4uLgorCWluc3RhbGwgLW0gMDY0NCBNYWtlZmlsZS5vcmlnIE1ha2VmaWxlCisKKwlleHBvcnQgQ1JPU1NfQ09NUElMRT0iJHtUQVJHRVRfUFJFRklYfSIKKwlleHBvcnQgUFlUSE9OQlVJTERESVI9IiR7Qn0iCisKKwkjIEFmdGVyIHN3aXp6bGluZyB0aGUgbWFrZWZpbGUsIHdlIG5lZWQgdG8gcnVuIHRoZSBidWlsZCBhZ2Fpbi4KKwkjIGluc3RhbGwgY2FuIHJhY2Ugd2l0aCB0aGUgYnVpbGQgc28gd2UgaGF2ZSB0byBydW4gdGhpcyBmaXJzdCwgdGhlbiBpbnN0YWxsCisJb2VfcnVubWFrZSBIT1NUUEdFTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9wZ2VuIFwKKwkJSE9TVFBZVEhPTj0ke1NUQUdJTkdfQklORElSX05BVElWRX0vcHl0aG9uLW5hdGl2ZS9weXRob24gXAorCQlDUk9TU1BZVEhPTlBBVEg9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvIFwKKwkJU1RBR0lOR19MSUJESVI9JHtTVEFHSU5HX0xJQkRJUn0gXAorCQlTVEFHSU5HX0lOQ0RJUj0ke1NUQUdJTkdfSU5DRElSfSBcCisJCVNUQUdJTkdfQkFTRUxJQkRJUj0ke1NUQUdJTkdfQkFTRUxJQkRJUn0gXAorCQlCVUlMRF9TWVM9JHtCVUlMRF9TWVN9IEhPU1RfU1lTPSR7SE9TVF9TWVN9IFwKKwkJREVTVERJUj0ke0R9IExJQkRJUj0ke2xpYmRpcn0KKwkKKwlvZV9ydW5tYWtlIEhPU1RQR0VOPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3BnZW4gXAorCQlIT1NUUFlUSE9OPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9weXRob24tbmF0aXZlL3B5dGhvbiBcCisJCUNST1NTUFlUSE9OUEFUSD0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9saWItZHlubG9hZC8gXAorCQlTVEFHSU5HX0xJQkRJUj0ke1NUQUdJTkdfTElCRElSfSBcCisJCVNUQUdJTkdfSU5DRElSPSR7U1RBR0lOR19JTkNESVJ9IFwKKwkJU1RBR0lOR19CQVNFTElCRElSPSR7U1RBR0lOR19CQVNFTElCRElSfSBcCisJCUJVSUxEX1NZUz0ke0JVSUxEX1NZU30gSE9TVF9TWVM9JHtIT1NUX1NZU30gXAorCQlERVNURElSPSR7RH0gTElCRElSPSR7bGliZGlyfSBpbnN0YWxsCisKKwlpbnN0YWxsIC1tIDA2NDQgTWFrZWZpbGUuc3lzcm9vdCAke0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L2NvbmZpZy9NYWtlZmlsZQorCisJaWYgWyAtZSAke1dPUktESVJ9L3NpdGVjdXN0b21pemUucHkgXTsgdGhlbgorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9zaXRlY3VzdG9taXplLnB5ICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0KKwlmaQorCisJb2VfbXVsdGlsaWJfaGVhZGVyIHB5dGhvbiR7UFlUSE9OX01BSk1JTn0vcHljb25maWcuaAorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vcHl0aG9uMi43IFRFUk1JTkZPX0RJUlM9JyR7c3lzY29uZmRpcn0vdGVybWluZm86L2V0Yy90ZXJtaW5mbzovdXNyL3NoYXJlL3Rlcm1pbmZvOi91c3Ivc2hhcmUvbWlzYy90ZXJtaW5mbzovbGliL3Rlcm1pbmZvJworfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiTWFrZWZpbGUiCitQQUNLQUdFX1BSRVBST0NFU1NfRlVOQ1MgKz0gInB5X3BhY2thZ2VfcHJlcHJvY2VzcyIKKworcHlfcGFja2FnZV9wcmVwcm9jZXNzICgpIHsKKwkjIGNvcHkgYmFjayB0aGUgb2xkIE1ha2VmaWxlIHRvIGZpeCB0YXJnZXQgcGFja2FnZQorCWluc3RhbGwgLW0gMDY0NCAke0J9L01ha2VmaWxlLm9yaWcgJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUKKworCSMgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYnVpbGRtYWNoaW5lIHBhdGhzIGluIHRhcmdldCBNYWtlZmlsZSBhbmQgX3N5c2NvbmZpZ2RhdGEKKwlzZWQgLWkgLWUgJ3M6LS1zeXNyb290PSR7U1RBR0lOR19ESVJfVEFSR0VUfTo6ZycgLWUgczonLS13aXRoLWxpYnRvb2wtc3lzcm9vdD0ke1NUQUdJTkdfRElSX1RBUkdFVH0nOjpnIFwKKwkJJHtQS0dEfS8ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fTUFKTUlOfS9jb25maWcvTWFrZWZpbGUgXAorCQkke1BLR0R9LyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9NQUpNSU59L19zeXNjb25maWdkYXRhLnB5Cit9CisKK3JlcXVpcmUgcHl0aG9uLSR7UFlUSE9OX01BSk1JTn0tbWFuaWZlc3QuaW5jCisKKyMgbWFudWFsIGRlcGVuZGVuY3kgYWRkaXRpb25zCitSUFJPVklERVNfJHtQTn0tY29yZSA9ICIke1BOfSIKK1JSRUNPTU1FTkRTXyR7UE59LWNvcmUgPSAiJHtQTn0tcmVhZGxpbmUiCitSUkVDT01NRU5EU18ke1BOfS1jb3JlX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiIG5hdGl2ZXNkay1weXRob24tbW9kdWxlcyIKK1JSRUNPTU1FTkRTXyR7UE59LWNyeXB0ID0gIm9wZW5zc2wiCisKKyMgcGFja2FnZSBsaWJweXRob24yCitQQUNLQUdFUyA9KyAibGliJHtCUE59MiIKK0ZJTEVTX2xpYiR7QlBOfTIgPSAiJHtsaWJkaXJ9L2xpYnB5dGhvbiouc28uKiIKKworIyBjYXRjaCBkZWJ1ZyBleHRlbnNpb25zIChpc24ndCB0aGF0IGFscmVhZHkgaW4gcHl0aG9uLWNvcmUtZGJnPykKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0vbGliLWR5bmxvYWQvLmRlYnVnIgorCisjIGNhdGNoIGFsbCB0aGUgcmVzdCAodW5zb3J0ZWQpCitQQUNLQUdFUyArPSAiJHtQTn0tbWlzYyIKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX01BSk1JTn0iCitSREVQRU5EU18ke1BOfS1wdGVzdCA9ICIke1BOfS1tb2R1bGVzICR7UE59LW1pc2MiCisjaW5oZXJpdCBwdGVzdCBhZnRlciAicmVxdWlyZSBweXRob24tJHtQWVRIT05fTUFKTUlOfS1tYW5pZmVzdC5pbmMiIHNvIFBBQ0tBR0VTIGRvZXNuJ3QgZ2V0IG92ZXJ3cml0dGVuCitpbmhlcml0IHB0ZXN0CisKKyMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgaW5oZXJpdCBwdGVzdCBmb3IgdGhlIG92ZXJyaWRlIHRvIHRha2UgZWZmZWN0Citkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKwlzZWQgLWUgczpMSUJESVIvcHl0aG9uL3B0ZXN0OiR7UFRFU1RfUEFUSH06ZyBcCisJIC1lIHM6TElCRElSOiR7bGliZGlyfTpnIFwKKwkgLWkgJHtEfSR7UFRFU1RfUEFUSH0vcnVuLXB0ZXN0Cit9CisKKyMgY2F0Y2ggbWFucGFnZQorUEFDS0FHRVMgKz0gIiR7UE59LW1hbiIKK0ZJTEVTXyR7UE59LW1hbiA9ICIke2RhdGFkaXJ9L21hbiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9uYXRpdmVzZGstcWVtdS1oZWxwZXJfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQxYzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvbmF0aXZlc2RrLXFlbXUtaGVscGVyXzEuMC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIlFlbXUgaGVscGVyIHNjcmlwdHMiCitMSUNFTlNFID0gIkdQTHYyIgorUkRFUEVORFNfJHtQTn0gPSAibmF0aXZlc2RrLXFlbXUiCitQUiA9ICJyOSIKKworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L3R1bmN0bC5jO2VuZGxpbmU9NDttZDU9ZmYzYTA5OTk2YmM1ZmZmNmJjNWQ0ZTBiNGMyOGY5OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11O2VuZGxpbmU9MTg7bWQ1PTc3ZmJlNDQyYTg4YjFiY2RjMjljM2JhNjc3MzNiMjFiIgorCisKK1NSQ19VUkkgPSAiZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdSBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtaW50ZXJuYWwgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWFkZHB0YWJsZTJpbWFnZSBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL3J1bnFlbXUtZ2VuLXRhcGRldnMgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmdXAgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWlmZG93biBcCisgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9zY3JpcHRzL29lLWZpbmQtbmF0aXZlLXN5c3Jvb3QgXAorICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11LWV4dHJhY3Qtc2RrIFwKKyAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L3NjcmlwdHMvcnVucWVtdS1leHBvcnQtcm9vdGZzIFwKKyAgICAgICAgICAgZmlsZTovL3R1bmN0bC5jIFwKKyAgICAgICAgICAgZmlsZTovL3JhdzJmbGFzaC5jIFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmVzZGsKKworZG9fY29tcGlsZSgpIHsKKwkke0NDfSB0dW5jdGwuYyAtbyB0dW5jdGwKKwkke0NDfSByYXcyZmxhc2guYyAtbyByYXcyZmxhc2guc3BpdHoKKwkke0NDfSByYXcyZmxhc2guYyAtbyBmbGFzaDJyYXcuc3BpdHogLURmbGFzaDJyYXcKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfSR7Q09SRUJBU0V9L3NjcmlwdHMvb2UtKiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9JHtDT1JFQkFTRX0vc2NyaXB0cy9ydW5xZW11KiAke0R9JHtiaW5kaXJ9LworCWluc3RhbGwgdHVuY3RsICR7RH0ke2JpbmRpcn0vCisJaW5zdGFsbCByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIGZsYXNoMnJhdy5zcGl0eiAke0R9JHtiaW5kaXJ9LworCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2guYWtpdGEKKwlsbiAtZnMgcmF3MmZsYXNoLnNwaXR6ICR7RH0ke2JpbmRpcn0vcmF3MmZsYXNoLmJvcnpvaQorCWxuIC1mcyByYXcyZmxhc2guc3BpdHogJHtEfSR7YmluZGlyfS9yYXcyZmxhc2gudGVycmllcgorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcuYWtpdGEKKwlsbiAtZnMgZmxhc2gycmF3LnNwaXR6ICR7RH0ke2JpbmRpcn0vZmxhc2gycmF3LmJvcnpvaQorCWxuIC1mcyBmbGFzaDJyYXcuc3BpdHogJHtEfSR7YmluZGlyfS9mbGFzaDJyYXcudGVycmllcgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS1oZWxwZXItbmF0aXZlXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyN2M0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyLW5hdGl2ZV8xLjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJIZWxwZXIgdXRpbGl0aWVzIG5lZWRlZCBieSB0aGUgcnVucWVtdSBzY3JpcHQiCitMSUNFTlNFID0gIkdQTHYyIgorUkRFUEVORFNfJHtQTn0gPSAicWVtdS1uYXRpdmUiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtXT1JLRElSfS90dW5jdGwuYztlbmRsaW5lPTQ7bWQ1PWZmM2EwOTk5NmJjNWZmZjZiYzVkNGUwYjRjMjhmOTk5IgorCitTUkNfVVJJID0gImZpbGU6Ly90dW5jdGwuYyIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19jb21waWxlKCkgeworCSR7Q0N9IHR1bmN0bC5jIC1vIHR1bmN0bAorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgdHVuY3RsICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3JhdzJmbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZmFmNjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci9yYXcyZmxhc2guYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcGVuZWRIYW5kIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgR05VIEdQTCB2Mi4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgVEZSKF8pCQlfCisjZGVmaW5lIFZFUkJPU0UKKyNkZWZpbmUgUEJBUl9MRU4JNDAKKworI2RlZmluZSBQQVJUSVRJT05fU1RBUlQJMHgwMDcwMDAwMAorCitzdGF0aWMgY29uc3QgaW50IGVjY19wb3M4W10gPSB7CisJMHgwLCAweDEsIDB4MiwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczE2W10gPSB7CisJMHgwLCAweDEsIDB4MiwgMHgzLCAweDYsIDB4NywKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZWNjX3BvczY0W10gPSB7CisJMHgyOCwgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwKKwkweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LAorCTB4MzgsIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsCit9OworCitzdGF0aWMgY29uc3QgaW50IGVjY19ha2l0YVtdID0geworCTB4MDUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDYsIDB4MDcsIDB4MTUsIDB4MTEsCisJMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKKwkweDI2LCAweDI3LCAweDM1LCAweDMxLCAweDMyLCAweDMzLCAweDM2LCAweDM3LAorfTsKKworc3RydWN0IGpmZnNfbWFya2VyX3MgeworCWludCBwb3M7CisJdWludDhfdCB2YWx1ZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczhbXSA9IHsKKwl7IDB4MDMsIDB4ZmYgfSwgeyAweDA0LCAweGZmIH0sIHsgMHgwNiwgMHg4NSB9LCB7IDB4MDcsIDB4MTkgfSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGpmZnNfbWFya2VyX3MgZnJlZV9wb3MxNltdID0geworCXsgMHgwOCwgMHg4NSB9LCB7IDB4MDksIDB4MTkgfSwgeyAweDBhLCAweDAzIH0sIHsgMHgwYiwgMHgyMCB9LAorCXsgMHgwYywgMHgwOCB9LCB7IDB4MGQsIDB4MDAgfSwgeyAweDBlLCAweDAwIH0sIHsgMHgwZiwgMHgwMCB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX3BvczY0W10gPSB7CisJeyAweDAyLCAweGZmIH0sIHsgMHgwMywgMHhmZiB9LCB7IDB4MDQsIDB4ZmYgfSwgeyAweDA1LCAweGZmIH0sCisJeyAweDA2LCAweGZmIH0sIHsgMHgwNywgMHhmZiB9LCB7IDB4MDgsIDB4ZmYgfSwgeyAweDA5LCAweGZmIH0sCisJeyAweDBhLCAweGZmIH0sIHsgMHgwYiwgMHhmZiB9LCB7IDB4MGMsIDB4ZmYgfSwgeyAweDBkLCAweGZmIH0sCisJeyAweDBlLCAweGZmIH0sIHsgMHgwZiwgMHhmZiB9LCB7IDB4MTAsIDB4ODUgfSwgeyAweDExLCAweDE5IH0sCisJeyAweDEyLCAweDAzIH0sIHsgMHgxMywgMHgyMCB9LCB7IDB4MTQsIDB4MDggfSwgeyAweDE1LCAweDAwIH0sCisJeyAweDE2LCAweDAwIH0sIHsgMHgxNywgMHgwMCB9LCB7IDB4MTgsIDB4ZmYgfSwgeyAweDE5LCAweGZmIH0sCisJeyAweDFhLCAweGZmIH0sIHsgMHgxYiwgMHhmZiB9LCB7IDB4MWMsIDB4ZmYgfSwgeyAweDFkLCAweGZmIH0sCisJeyAweDFlLCAweGZmIH0sIHsgMHgxZiwgMHhmZiB9LCB7IDB4MjAsIDB4ZmYgfSwgeyAweDIxLCAweGZmIH0sCisJeyAweDIyLCAweGZmIH0sIHsgMHgyMywgMHhmZiB9LCB7IDB4MjQsIDB4ZmYgfSwgeyAweDI1LCAweGZmIH0sCisJeyAweDI2LCAweGZmIH0sIHsgMHgyNywgMHhmZiB9LAorCXsgLTEgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyBmcmVlX2FraXRhW10gPSB7CisJeyAweDA4LCAweDg1IH0sIHsgMHgwOSwgMHgxOSB9LCB7IDB4MGEsIDB4MDMgfSwgeyAweDBiLCAweDIwIH0sCisJeyAweDBjLCAweDA4IH0sIHsgMHgwZCwgMHgwMCB9LCB7IDB4MGUsIDB4MDAgfSwgeyAweDBmLCAweDAwIH0sCisJeyAweDEwLCAweGZmIH0sCisJeyAtMSB9LAorfTsKKworI2RlZmluZSBMRU4oYXJyYXkpCShzaXplb2YoYXJyYXkpIC8gc2l6ZW9mKCphcnJheSkpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZWNjX3N0eWxlX3MgeworCWludCBwYWdlX3NpemU7CisJaW50IG9vYl9zaXplOworCWludCBlY2NieXRlczsKKwlpbnQgZWNjc2l6ZTsKKwljb25zdCBpbnQgKmVjY3BvczsKKwlpbnQgcm9tc2l6ZTsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqZnJlZXBvczsKK30gc3BpdHogPSB7CisJMHgyMDAsIDB4MTAsIDB4MTAwLCBMRU4oZWNjX3BvczE2KSwgZWNjX3BvczE2LCAweDAxMDAwMDAwLCBmcmVlX3BvczE2Cit9LCBha2l0YSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIGJvcnpvaSA9IHsKKwkweDgwMCwgMHg0MCwgMHgxMDAsIExFTihlY2NfYWtpdGEpLCBlY2NfYWtpdGEsIDB4MDgwMDAwMDAsIGZyZWVfYWtpdGEKK30sIHRlcnJpZXIgPSB7CisJMHg4MDAsIDB4NDAsIDB4MTAwLCBMRU4oZWNjX2FraXRhKSwgZWNjX2FraXRhLCAweDA4MDAwMDAwLCBmcmVlX2FraXRhCit9OworCitzdHJ1Y3QgZWNjX3N0YXRlX3MgeworCWludCBjb3VudDsKKwl1aW50OF90IGNwOworCXVpbnQ4X3QgbHBbMl07CisJY29uc3Qgc3RydWN0IGVjY19zdHlsZV9zICpzdHlsZTsKK307CisKKyNpZm5kZWYgZmxhc2gycmF3CisvKgorICogUHJlLWNhbGN1bGF0ZWQgMjU2LXdheSAxIGJ5dGUgY29sdW1uIHBhcml0eS4gIFRhYmxlIGJvcnJvd2VkIGZyb20gTGludXguCisgKi8KK3N0YXRpYyBjb25zdCB1aW50OF90IGVjY19wcmVjYWxjX3RhYmxlW10gPSB7CisJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorCTB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsIDB4M2MsIDB4NjksIDB4NmEsIDB4M2YsCisJMHgzZiwgMHg2YSwgMHg2OSwgMHgzYywgMHg2NiwgMHgzMywgMHgzMCwgMHg2NSwKKwkweDY2LCAweDMzLCAweDMwLCAweDY1LCAweDNmLCAweDZhLCAweDY5LCAweDNjLAorCTB4M2MsIDB4NjksIDB4NmEsIDB4M2YsIDB4NjUsIDB4MzAsIDB4MzMsIDB4NjYsCisJMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjksIDB4M2MsIDB4M2YsIDB4NmEsIDB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsCisJMHgzMywgMHg2NiwgMHg2NSwgMHgzMCwgMHg2YSwgMHgzZiwgMHgzYywgMHg2OSwKKwkweDBjLCAweDU5LCAweDVhLCAweDBmLCAweDU1LCAweDAwLCAweDAzLCAweDU2LAorCTB4NTYsIDB4MDMsIDB4MDAsIDB4NTUsIDB4MGYsIDB4NWEsIDB4NTksIDB4MGMsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4NmEsIDB4M2YsIDB4M2MsIDB4NjksIDB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsCisJMHgzMCwgMHg2NSwgMHg2NiwgMHgzMywgMHg2OSwgMHgzYywgMHgzZiwgMHg2YSwKKwkweDZhLCAweDNmLCAweDNjLCAweDY5LCAweDMzLCAweDY2LCAweDY1LCAweDMwLAorCTB4MzAsIDB4NjUsIDB4NjYsIDB4MzMsIDB4NjksIDB4M2MsIDB4M2YsIDB4NmEsCisJMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywgMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwKKwkweDU1LCAweDAwLCAweDAzLCAweDU2LCAweDBjLCAweDU5LCAweDVhLCAweDBmLAorCTB4MGMsIDB4NTksIDB4NWEsIDB4MGYsIDB4NTUsIDB4MDAsIDB4MDMsIDB4NTYsCisJMHg1NiwgMHgwMywgMHgwMCwgMHg1NSwgMHgwZiwgMHg1YSwgMHg1OSwgMHgwYywKKwkweDY5LCAweDNjLCAweDNmLCAweDZhLCAweDMwLCAweDY1LCAweDY2LCAweDMzLAorCTB4MzMsIDB4NjYsIDB4NjUsIDB4MzAsIDB4NmEsIDB4M2YsIDB4M2MsIDB4NjksCisJMHgwMywgMHg1NiwgMHg1NSwgMHgwMCwgMHg1YSwgMHgwZiwgMHgwYywgMHg1OSwKKwkweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDAwLCAweDU1LCAweDU2LCAweDAzLAorCTB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsIDB4M2YsIDB4NmEsIDB4NjksIDB4M2MsCisJMHgzYywgMHg2OSwgMHg2YSwgMHgzZiwgMHg2NSwgMHgzMCwgMHgzMywgMHg2NiwKKwkweDY1LCAweDMwLCAweDMzLCAweDY2LCAweDNjLCAweDY5LCAweDZhLCAweDNmLAorCTB4M2YsIDB4NmEsIDB4NjksIDB4M2MsIDB4NjYsIDB4MzMsIDB4MzAsIDB4NjUsCisJMHgwMCwgMHg1NSwgMHg1NiwgMHgwMywgMHg1OSwgMHgwYywgMHgwZiwgMHg1YSwKKwkweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwLAorfTsKKworLyogVXBkYXRlIEVDQyBwYXJpdHkgY291bnQgKi8KK3N0YXRpYyBpbmxpbmUgdWludDhfdCBlY2NfZGlnZXN0KHN0cnVjdCBlY2Nfc3RhdGVfcyAqcywgdWludDhfdCBzYW1wbGUpIHsKKwl1aW50OF90IGlkeCA9IGVjY19wcmVjYWxjX3RhYmxlW3NhbXBsZV07CisKKwlzLT5jcCBePSBpZHggJiAweDNmOworCWlmIChpZHggJiAweDQwKSB7CisJCXMtPmxwWzBdIF49IH4ocy0+Y291bnQgJiAweGZmKTsKKwkJcy0+bHBbMV0gXj0gcy0+Y291bnQgJiAweGZmOworCX0KKwlzLT5jb3VudCArKzsKKworCXJldHVybiBzYW1wbGU7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9kaWdlc3Qoc3RydWN0IGVjY19zdGF0ZV9zICplY2MsCisJCWNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb3V0KSB7CisJaW50IGksIGxwX2FbMl07CisKKwllY2MtPmxwWzBdID0gMHgwMDsKKwllY2MtPmxwWzFdID0gMHgwMDsKKwllY2MtPmNwID0gMHgwMDsKKwllY2MtPmNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7IGkgKyspCisJCWVjY19kaWdlc3QoZWNjLCBidWZbaV0pOworCisjIGRlZmluZSBCU0hSKGJ5dGUsIGZyb20sIHRvKQkoKGVjYy0+bHBbYnl0ZV0gPj4gKGZyb20gLSB0bykpICYgKDEgPDwgdG8pKQorCWxwX2FbMF0gPQorCQlCU0hSKDAsIDQsIDApIHwgQlNIUigwLCA1LCAyKSB8CisJCUJTSFIoMCwgNiwgNCkgfCBCU0hSKDAsIDcsIDYpIHwKKwkJQlNIUigxLCA0LCAxKSB8IEJTSFIoMSwgNSwgMykgfAorCQlCU0hSKDEsIDYsIDUpIHwgQlNIUigxLCA3LCA3KTsKKworIyBkZWZpbmUgQlNITChieXRlLCBmcm9tLCB0bykJKChlY2MtPmxwW2J5dGVdIDw8ICh0byAtIGZyb20pKSAmICgxIDw8IHRvKSkKKwlscF9hWzFdID0KKwkJQlNITCgwLCAwLCAwKSB8IEJTSEwoMCwgMSwgMikgfAorCQlCU0hMKDAsIDIsIDQpIHwgQlNITCgwLCAzLCA2KSB8CisJCUJTSEwoMSwgMCwgMSkgfCBCU0hMKDEsIDEsIDMpIHwKKwkJQlNITCgxLCAyLCA1KSB8IEJTSEwoMSwgMywgNyk7CisKKwlvdXRbMF0gPSB+bHBfYVsxXTsKKwlvdXRbMV0gPSB+bHBfYVswXTsKKwlvdXRbMl0gPSAofmVjYy0+Y3AgPDwgMikgfCAweDAzOworfQorCitzdGF0aWMgdm9pZCBqZmZzMl9mb3JtYXQoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3Qgb29iW10pIHsKKwljb25zdCBzdHJ1Y3QgamZmc19tYXJrZXJfcyAqYnl0ZTsKKwlmb3IgKGJ5dGUgPSBlY2MtPnN0eWxlLT5mcmVlcG9zOyBieXRlLT5wb3MgPj0gMDsgYnl0ZSArKykKKwkJb29iW2J5dGUtPnBvc10gPSBieXRlLT52YWx1ZTsKK30KKworc3RhdGljIHZvaWQgYnVmZmVyX2ZpbGwoY29uc3Qgc3RydWN0IGVjY19zdGF0ZV9zICplY2MsIHVpbnQ4X3QgYnVmZmVyW10sCisJCWludCAqbGVuLCBpbnQgKnBhcnRpdGlvbiwgaW50IGNvdW50LCB1aW50OF90IGpmZnNfYnVmZmVyW10pIHsKKwlpbnQgcmV0OworCisJc3dpdGNoICgqcGFydGl0aW9uKSB7CisJY2FzZSAwOgorCQlpZiAoY291bnQgPCBQQVJUSVRJT05fU1RBUlQpIHsKKwkJCW1lbWNweShidWZmZXIsIGpmZnNfYnVmZmVyICsgY291bnQsCisJCQkJCWVjYy0+c3R5bGUtPmVjY2J5dGVzKTsKKwkJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJCWJyZWFrOworCQl9CisJCSpwYXJ0aXRpb24gPSAxOworCWNhc2UgMToKKwkJaWYgKGNvdW50IC0gUEFSVElUSU9OX1NUQVJUIDwgUEFSVElUSU9OX1NUQVJUKSB7CisJCQltZW1jcHkoYnVmZmVyLCBqZmZzX2J1ZmZlciArIGNvdW50IC0gUEFSVElUSU9OX1NUQVJULAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCQkqbGVuID0gZWNjLT5zdHlsZS0+ZWNjYnl0ZXM7CisJCQlicmVhazsKKwkJfQorCisJCXdoaWxlICgqbGVuIDwgZWNjLT5zdHlsZS0+ZWNjYnl0ZXMpIHsKKwkJCXJldCA9IFRGUihyZWFkKDAsIGJ1ZmZlciArICpsZW4sIDB4ODAwIC0gKmxlbikpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCQkJKmxlbiArPSByZXQ7CisJCX0KKworCQlpZiAoKmxlbiA9PSAwKQorCQkJKnBhcnRpdGlvbiA9IDI7CisJCWVsc2UgaWYgKCpsZW4gPCBlY2MtPnN0eWxlLT5lY2NieXRlcykgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCAqbGVuKTsKKwkJCW1lbXNldChidWZmZXIgKyAqbGVuLCAweGZmLAorCQkJCQllY2MtPnN0eWxlLT5lY2NieXRlcyAtICpsZW4pOworCQkJKmxlbiA9IGVjYy0+c3R5bGUtPmVjY2J5dGVzOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJY2FzZSAyOgorCQltZW1zZXQoYnVmZmVyLCAweGZmLCBlY2MtPnN0eWxlLT5lY2NieXRlcyk7CisJCSpsZW4gPSBlY2MtPnN0eWxlLT5lY2NieXRlczsKKwkJYnJlYWs7CisJfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICplbnZwW10pIHsKKwlzdHJ1Y3QgZWNjX3N0YXRlX3MgZWNjOworCXVpbnQ4X3QgYnVmZmVyWzB4MTAwMF0sIGVjY19wYXlsb2FkWzB4NDBdLCByZWdzWzNdLCAqamZmczsKKwlpbnQgcmV0LCBsZW4sIGVjY2J5dGUsIGNvdW50LCBwYXJ0aXRpb247CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgInJhdzJmbGFzaC5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogU2tpcCBmaXJzdCAxMCBieXRlcyAqLworCVRGUihyZWFkKDAsIGJ1ZmZlciwgMHgxMCkpOworCisJbGVuID0gMDsKKwlqZmZzID0gKHVpbnQ4X3QgKikgbWFsbG9jKFBBUlRJVElPTl9TVEFSVCk7CisJd2hpbGUgKGxlbiA8IFBBUlRJVElPTl9TVEFSVCkgeworCQlyZXQgPSBURlIocmVhZCgwLCBqZmZzICsgbGVuLCBQQVJUSVRJT05fU1RBUlQgLSBsZW4pKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJYnJlYWs7CisJCWxlbiArPSByZXQ7CisJfQorCisJLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KKwlwYXJ0aXRpb24gPSBsZW4gPSBlY2NieXRlID0gY291bnQgPSAwOworCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJamZmczJfZm9ybWF0KCZlY2MsIGVjY19wYXlsb2FkKTsKKwl3aGlsZSAoY291bnQgPCBlY2Muc3R5bGUtPnJvbXNpemUpIHsKKwkJYnVmZmVyX2ZpbGwoJmVjYywgYnVmZmVyLCAmbGVuLCAmcGFydGl0aW9uLCBjb3VudCwgamZmcyk7CisJCWJ1ZmZlcl9kaWdlc3QoJmVjYywgYnVmZmVyLCByZWdzKTsKKworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzBdOworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzFdOworCQllY2NfcGF5bG9hZFtlY2Muc3R5bGUtPmVjY3Bvc1tlY2NieXRlICsrXV0gPSByZWdzWzJdOworCisJCVRGUih3cml0ZSgxLCBidWZmZXIsIGVjYy5zdHlsZS0+ZWNjYnl0ZXMpKTsKKwkJY291bnQgKz0gZWNjLnN0eWxlLT5lY2NieXRlczsKKwkJbGVuIC09IGVjYy5zdHlsZS0+ZWNjYnl0ZXM7CisJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlY2Muc3R5bGUtPmVjY2J5dGVzLCBsZW4pOworCisJCWlmIChlY2NieXRlID49IGVjYy5zdHlsZS0+ZWNjc2l6ZSkgeworCQkJVEZSKHdyaXRlKDEsIGVjY19wYXlsb2FkLCBlY2Muc3R5bGUtPm9vYl9zaXplKSk7CisJCQllY2NieXRlID0gMDsKKwkJCW1lbXNldChlY2NfcGF5bG9hZCwgMHhmZiwgZWNjLnN0eWxlLT5vb2Jfc2l6ZSk7CisJCQlpZiAocGFydGl0aW9uIDwgMikKKwkJCQlqZmZzMl9mb3JtYXQoJmVjYywgZWNjX3BheWxvYWQpOworCQl9CisKKyMgaWZkZWYgVkVSQk9TRQorCQlpZiAoY291bnQgKiBQQkFSX0xFTiAvIGVjYy5zdHlsZS0+cm9tc2l6ZSA+CisJCQkJKGNvdW50IC0gZWNjLnN0eWxlLT5lY2NieXRlcykgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCWZyZWUoamZmcyk7CisJcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgY2hhciAqZW52cFtdKSB7CisJc3RydWN0IGVjY19zdGF0ZV9zIGVjYzsKKwl1aW50OF90IGJ1ZmZlclsweDEwMDBdOworCWludCByZXQsIGxlbiwgY291bnQ7CisKKwkvKiBDaGVjayBpZiB3ZSdyZSBjYWxsZWQgYnkgImZsYXNoMnJhdy5zcGl0eiIgb3Igc2ltaWxhciAqLworCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwlpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDUsICJha2l0YSIpKQorCQllY2Muc3R5bGUgPSAmYWtpdGE7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndlswXSArIGxlbiAtIDYsICJib3J6b2kiKSkKKwkJZWNjLnN0eWxlID0gJmJvcnpvaTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2WzBdICsgbGVuIC0gNywgInRlcnJpZXIiKSkKKwkJZWNjLnN0eWxlID0gJnRlcnJpZXI7CisJZWxzZQorCQllY2Muc3R5bGUgPSAmc3BpdHo7CisKKyMgaWZkZWYgVkVSQk9TRQorCWZwcmludGYoc3RkZXJyLCAiWyIpOworIyBlbmRpZgorCisJLyogQ29udmVydCBkYXRhIGZyb20gc3RkaW4gKi8KKwljb3VudCA9IDA7CisJd2hpbGUgKGNvdW50IDwgZWNjLnN0eWxlLT5yb21zaXplKSB7CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJcmV0ID0gVEZSKHJlYWQoMCwgYnVmZmVyICsgbGVuLAorCQkJCQkJZWNjLnN0eWxlLT5wYWdlX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgeworCQkJZnByaW50ZihzdGRlcnIsICJcbldhcm5pbmc6ICVpIHN0cmF5IGJ5dGVzXG4iLCBsZW4pOworCQl9CisKKwkJVEZSKHdyaXRlKDEsIGJ1ZmZlciwgZWNjLnN0eWxlLT5wYWdlX3NpemUpKTsKKworCQljb3VudCArPSBsZW47CisJCWxlbiA9IDA7CisJCXdoaWxlIChsZW4gPCBlY2Muc3R5bGUtPm9vYl9zaXplKSB7CisJCQlyZXQgPSBURlIocmVhZCgwLCBidWZmZXIsIGVjYy5zdHlsZS0+b29iX3NpemUgLSBsZW4pKTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCQlicmVhazsKKwkJCWxlbiArPSByZXQ7CisJCX0KKworIyBpZmRlZiBWRVJCT1NFCisJCWlmIChjb3VudCAqIFBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplID4KKwkJCQkoY291bnQgLSBlY2Muc3R5bGUtPnBhZ2Vfc2l6ZSkgKgorCQkJCVBCQVJfTEVOIC8gZWNjLnN0eWxlLT5yb21zaXplKQorCQkJZnByaW50ZihzdGRlcnIsICIjIik7CisjIGVuZGlmCisJfQorCisjIGlmZGVmIFZFUkJPU0UKKwlmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOworIyBlbmRpZgorCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtaGVscGVyL3R1bmN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZTI0YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LWhlbHBlci90dW5jdGwuYwpAQCAtMCwwICsxLDE1NiBAQAorLyogQ29weXJpZ2h0IDIwMDIgSmVmZiBEaWtlCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPGdycC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorCisvKiBUVU5TRVRHUk9VUCBhcHBlYXJlZCBpbiAyLjYuMjMgKi8KKyNpZm5kZWYgVFVOU0VUR1JPVVAKKyNkZWZpbmUgVFVOU0VUR1JPVVAgICBfSU9XKCdUJywgMjA2LCBpbnQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgVXNhZ2UoY2hhciAqbmFtZSkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJDcmVhdGU6ICVzIFstYl0gWy11IG93bmVyXSBbLWcgZ3JvdXBdIFstdCBkZXZpY2UtbmFtZV0gIgorCSAgIlstZiB0dW4tY2xvbmUtZGV2aWNlXVxuIiwgbmFtZSk7CisgIGZwcmludGYoc3RkZXJyLCAiRGVsZXRlOiAlcyAtZCBkZXZpY2UtbmFtZSBbLWYgdHVuLWNsb25lLWRldmljZV1cblxuIiwKKwkgIG5hbWUpOworICBmcHJpbnRmKHN0ZGVyciwgIlRoZSBkZWZhdWx0IHR1biBjbG9uZSBkZXZpY2UgaXMgL2Rldi9uZXQvdHVuIC0gc29tZSBzeXN0ZW1zIgorCSAgIiB1c2Vcbi9kZXYvbWlzYy9uZXQvdHVuIGluc3RlYWRcblxuIik7CisgIGZwcmludGYoc3RkZXJyLCAiLWIgd2lsbCByZXN1bHQgaW4gYnJpZWYgb3V0cHV0IChqdXN0IHRoZSBkZXZpY2UgbmFtZSlcbiIpOworICBleGl0KDEpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgIHN0cnVjdCBpZnJlcSBpZnI7CisgIHN0cnVjdCBwYXNzd2QgKnB3OworICBzdHJ1Y3QgZ3JvdXAgKmdyOworICB1aWRfdCBvd25lciA9IC0xOworICBnaWRfdCBncm91cCA9IC0xOworICBpbnQgdGFwX2ZkLCBvcHQsIGRlbGV0ZSA9IDAsIGJyaWVmID0gMDsKKyAgY2hhciAqdHVuID0gIiIsICpmaWxlID0gIi9kZXYvbmV0L3R1biIsICpuYW1lID0gYXJndlswXSwgKmVuZDsKKworICB3aGlsZSgob3B0ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJiZDpmOnQ6dTpnOiIpKSA+IDApeworICAgIHN3aXRjaChvcHQpIHsKKyAgICAgIGNhc2UgJ2InOgorICAgICAgICBicmllZiA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZCc6CisgICAgICAgIGRlbGV0ZSA9IDE7CisJdHVuID0gb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgJ2YnOgorCWZpbGUgPSBvcHRhcmc7CisJYnJlYWs7CisgICAgICBjYXNlICd1JzoKKwlwdyA9IGdldHB3bmFtKG9wdGFyZyk7CisJaWYocHcgIT0gTlVMTCl7CisJICBvd25lciA9IHB3LT5wd191aWQ7CisJICBicmVhazsKKwl9CisgICAgICAgIG93bmVyID0gc3RydG9sKG9wdGFyZywgJmVuZCwgMCk7CisJaWYoKmVuZCAhPSAnXDAnKXsKKwkgIGZwcmludGYoc3RkZXJyLCAiJyVzJyBpcyBuZWl0aGVyIGEgdXNlcm5hbWUgbm9yIGEgbnVtZXJpYyB1aWQuXG4iLAorCQkgIG9wdGFyZyk7CisJICBVc2FnZShuYW1lKTsKKwl9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAnZyc6CisJZ3IgPSBnZXRncm5hbShvcHRhcmcpOworCWlmKGdyICE9IE5VTEwpeworCSAgZ3JvdXAgPSBnci0+Z3JfZ2lkOworCSAgYnJlYWs7CisJfQorICAgICAgICBncm91cCA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOworCWlmKCplbmQgIT0gJ1wwJyl7CisJICBmcHJpbnRmKHN0ZGVyciwgIiclcycgaXMgbmVpdGhlciBhIGdyb3VwbmFtZSBub3IgYSBudW1lcmljIGdyb3VwLlxuIiwKKwkJICBvcHRhcmcpOworCSAgVXNhZ2UobmFtZSk7CisJfQorICAgICAgICBicmVhazsKKworICAgICAgY2FzZSAndCc6CisgICAgICAgIHR1biA9IG9wdGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlICdoJzoKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVzYWdlKG5hbWUpOworICAgIH0KKyAgfQorCisgIGFyZ3YgKz0gb3B0aW5kOworICBhcmdjIC09IG9wdGluZDsKKworICBpZihhcmdjID4gMCkKKyAgICBVc2FnZShuYW1lKTsKKworICBpZigodGFwX2ZkID0gb3BlbihmaWxlLCBPX1JEV1IpKSA8IDApeworICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gJyVzJyA6ICIsIGZpbGUpOworICAgIHBlcnJvcigiIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisKKyAgaWZyLmlmcl9mbGFncyA9IElGRl9UQVAgfCBJRkZfTk9fUEk7CisgIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCB0dW4sIHNpemVvZihpZnIuaWZyX25hbWUpIC0gMSk7CisgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUSUZGLCAodm9pZCAqKSAmaWZyKSA8IDApeworICAgIHBlcnJvcigiVFVOU0VUSUZGIik7CisgICAgZXhpdCgxKTsKKyAgfQorCisgIGlmKGRlbGV0ZSl7CisgICAgaWYoaW9jdGwodGFwX2ZkLCBUVU5TRVRQRVJTSVNULCAwKSA8IDApeworICAgICAgcGVycm9yKCJkaXNhYmxpbmcgVFVOU0VUUEVSU0lTVCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgcHJpbnRmKCJTZXQgJyVzJyBub25wZXJzaXN0ZW50XG4iLCBpZnIuaWZyX25hbWUpOworICB9CisgIGVsc2UgeworICAgIC8qIGVtdWxhdGUgYmVoYXZpb3VyIHByaW9yIHRvIFRVTlNFVEdST1VQICovCisgICAgaWYob3duZXIgPT0gLTEgJiYgZ3JvdXAgPT0gLTEpIHsKKyAgICAgIG93bmVyID0gZ2V0ZXVpZCgpOworICAgIH0KKworICAgIGlmKG93bmVyICE9IC0xKSB7CisgICAgICBpZihpb2N0bCh0YXBfZmQsIFRVTlNFVE9XTkVSLCBvd25lcikgPCAwKXsKKyAgICAgIAlwZXJyb3IoIlRVTlNFVE9XTkVSIik7CisgICAgICAJZXhpdCgxKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYoZ3JvdXAgIT0gLTEpIHsKKyAgICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUR1JPVVAsIGdyb3VwKSA8IDApeworICAgICAgCXBlcnJvcigiVFVOU0VUR1JPVVAiKTsKKyAgICAgIAlleGl0KDEpOworICAgICAgfQorICAgIH0KKworICAgIGlmKGlvY3RsKHRhcF9mZCwgVFVOU0VUUEVSU0lTVCwgMSkgPCAwKXsKKyAgICAgIHBlcnJvcigiZW5hYmxpbmcgVFVOU0VUUEVSU0lTVCIpOworICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZihicmllZikKKyAgICAgIHByaW50ZigiJXNcbiIsIGlmci5pZnJfbmFtZSk7CisgICAgZWxzZSB7CisgICAgICBwcmludGYoIlNldCAnJXMnIHBlcnNpc3RlbnQgYW5kIG93bmVkIGJ5IiwgaWZyLmlmcl9uYW1lKTsKKyAgICAgIGlmKG93bmVyICE9IC0xKQorICAgICAgICAgIHByaW50ZigiIHVpZCAlZCIsIG93bmVyKTsKKyAgICAgIGlmKGdyb3VwICE9IC0xKQorICAgICAgICAgIHByaW50ZigiIGdpZCAlZCIsIGdyb3VwKTsKKyAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuKDApOworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS10YXJnZXRzLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtdGFyZ2V0cy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzNTY1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUtdGFyZ2V0cy5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBwb3NzaWJsZSBhcmNoIHZhbHVlcyBhcmUgYXJtIGFhcmNoNjQgbWlwcyBtaXBzZWwgbWlwczY0IG1pcHM2NGVsIHBwYyBwcGM2NCBwcGM2NGFiaTMyCisjIHBwY2VtYiBhcm1lYiBhbHBoYSBzcGFyYzMycGx1cyBpMzg2IHg4Nl82NCBjcmlzIG02OGsgbWljcm9ibGF6ZSBzcGFyYyBzcGFyYzMyCisjIHNwYXJjMzJwbHVzCisKK2RlZiBnZXRfcWVtdV90YXJnZXRfbGlzdChkKToKKyAgICBpbXBvcnQgYmIKKyAgICBhcmNocyA9IGQuZ2V0VmFyKCdRRU1VX1RBUkdFVFMnLCBUcnVlKS5zcGxpdCgpCisgICAgdG9zID0gZC5nZXRWYXIoJ0hPU1RfT1MnLCBUcnVlKQorICAgIHNvZnRtbXVvbmx5ID0gIiIKKyAgICBmb3IgYXJjaCBpbiBbJ21pcHM2NCcsICdtaXBzNjRlbCcsICdwcGNlbWInXToKKyAgICAgICAgaWYgYXJjaCBpbiBhcmNoczoKKyAgICAgICAgICAgIHNvZnRtbXVvbmx5ICs9IGFyY2ggKyAiLXNvZnRtbXUsIgorICAgICAgICAgICAgYXJjaHMucmVtb3ZlKGFyY2gpCisgICAgbGludXh1c2Vyb25seSA9ICIiCisgICAgZm9yIGFyY2ggaW4gWydhcm1lYicsICdhbHBoYScsICdwcGM2NGFiaTMyJywgJ3NwYXJjMzJwbHVzJ106CisgICAgICAgIGlmIGFyY2ggaW4gYXJjaHM6CisgICAgICAgICAgICBsaW51eHVzZXJvbmx5ICs9IGFyY2ggKyAiLWxpbnV4LXVzZXIsIgorICAgICAgICAgICAgYXJjaHMucmVtb3ZlKGFyY2gpCisgICAgaWYgJ2xpbnV4JyBub3QgaW4gdG9zOgorICAgICAgICByZXR1cm4gc29mdG1tdW9ubHkgKyAnJy5qb2luKFthcmNoICsgIi1zb2Z0bW11IiArICIsIiBmb3IgYXJjaCBpbiBhcmNoc10pLnJzdHJpcCgnLCcpCisgICAgcmV0dXJuIHNvZnRtbXVvbmx5ICsgbGludXh1c2Vyb25seSArICcnLmpvaW4oW2FyY2ggKyAiLWxpbnV4LXVzZXIiICsgIiwiICsgYXJjaCArICItc29mdG1tdSIgKyAiLCIgZm9yIGFyY2ggaW4gYXJjaHNdKS5yc3RyaXAoJywnKQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOGJmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11LmluYwpAQCAtMCwwICsxLDEzNyBAQAorU1VNTUFSWSA9ICJGYXN0IG9wZW4gc291cmNlIHByb2Nlc3NvciBlbXVsYXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly9xZW11Lm9yZyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIuMSIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgemxpYiBwaXhtYW4iCitSREVQRU5EU18ke1BOfV9jbGFzcy10YXJnZXQgKz0gImJhc2ggcHl0aG9uIgorUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiYmFzaCBtYWtlIgorCityZXF1aXJlIHFlbXUtdGFyZ2V0cy5pbmMKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1BSID0gInIxIgorCisjIFFFTVVfVEFSR0VUUyBpcyBvdmVycmlkYWJsZSB2YXJpYWJsZQorUUVNVV9UQVJHRVRTID89ICJhcm0gYWFyY2g2NCBpMzg2IG1pcHMgbWlwc2VsIG1pcHM2NCBtaXBzNjRlbCBwcGMgc2g0IHg4Nl82NCIKKworU1JDX1VSSSA9ICJcCisgICAgZmlsZTovL3Bvd2VycGNfcm9tLmJpbiBcCisgICAgZmlsZTovL2Rpc2FibGUtZ3JhYnMucGF0Y2ggXAorICAgIGZpbGU6Ly9leGNsdWRlLXNvbWUtYXJtLUVBQkktb2Jzb2xldGUtc3lzY2FsbHMucGF0Y2ggXAorICAgIGZpbGU6Ly93YWNvbS5wYXRjaCBcCisgICAgZmlsZTovL2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaCBcCisgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgZmlsZTovL2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2ggXAorICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIlwKKyAgICBmaWxlOi8vZml4LWxpYmNhcC1oZWFkZXItaXNzdWUtb24tc29tZS1kaXN0cm8ucGF0Y2ggXAorICAgIGZpbGU6Ly9jcHVzLmMtcWVtdV9jcHVfa2lja190aHJlYWRfZGVidWdnaW5nLnBhdGNoIFwKKyAgICAiCisKK0VYVFJBX09FQ09ORiArPSAiLS10YXJnZXQtbGlzdD0ke0BnZXRfcWVtdV90YXJnZXRfbGlzdChkKX0gLS1kaXNhYmxlLXdlcnJvciAgLS1kaXNhYmxlLWJsdWV6IC0tZGlzYWJsZS1saWJpc2NzaSAtLXdpdGgtc3lzdGVtLXBpeG1hbiAtLWV4dHJhLWNmbGFncz0nJHtDRkxBR1N9JyIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLWRlYnVnIC0tZW5hYmxlLWRlYnVnLWluZm8iCitJTkhJQklUX1NZU1JPT1RfU1RSSVAgPSAiMSIKKworRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXRhcmdldC1saXN0PSR7QGdldF9xZW11X3RhcmdldF9saXN0KGQpfSAtLWRpc2FibGUtd2Vycm9yIFwKKwkJCQkiCitleHBvcnQgTElCVE9PTD0iJHtIT1NUX1NZU30tbGlidG9vbCIKKworZG9fY29uZmlndXJlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworCSMgQXBwZW5kIGJ1aWxkIGhvc3QgcGtnLWNvbmZpZyBwYXRocyBmb3IgbmF0aXZlIHRhcmdldCBzaW5jZSB0aGUgaG9zdCBtYXkgcHJvdmlkZSBzZGwKKwlCSE9TVF9QS0dDT05GSUdfUEFUSD0kKFBBVEg9L3Vzci9iaW46L2JpbiBwa2ctY29uZmlnIC0tdmFyaWFibGUgcGNfcGF0aCBwa2ctY29uZmlnIHx8IGVjaG8gIiIpCisJaWYgWyAhIC16ICIkQkhPU1RfUEtHQ09ORklHX1BBVEgiIF07IHRoZW4KKwkJZXhwb3J0IFBLR19DT05GSUdfUEFUSD0kUEtHX0NPTkZJR19QQVRIOiRCSE9TVF9QS0dDT05GSUdfUEFUSAorCWZpCit9CisKK0tWTUVOQUJMRSA9ICItLWVuYWJsZS1rdm0iCitLVk1FTkFCTEVfZGFyd2luID0gIi0tZGlzYWJsZS1rdm0iCitLVk1FTkFCTEVfbWluZ3czMiA9ICItLWRpc2FibGUta3ZtIgorCitkb19jb25maWd1cmUoKSB7CisgICAgIyBIYW5kbGUgZGlzdHJvcyBzdWNoIGFzIENlbnRPUyA1IDMyLWJpdCB0aGF0IGRvIG5vdCBoYXZlIGt2bSBzdXBwb3J0CisgICAgS1ZNT1BUUz0iLS1kaXNhYmxlLWt2bSIKKyAgICBpZiBbICIke1BOfSIgIT0gInFlbXUtbmF0aXZlIiAtYSAiJHtQTn0iICE9ICJuYXRpdmVzZGstcWVtdSIgXSBcCisgICAgICAgfHwgWyAtZiAvdXNyL2luY2x1ZGUvbGludXgva3ZtLmggXSA7IHRoZW4KKyAgICAgICBLVk1PUFRTPSIke0tWTUVOQUJMRX0iCisgICAgZmkKKworICAgICR7U30vY29uZmlndXJlIC0tcHJlZml4PSR7cHJlZml4fSAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSAtLWxpYmV4ZWNkaXI9JHtsaWJleGVjZGlyfSAtLWxvY2Fsc3RhdGVkaXI9JHtsb2NhbHN0YXRlZGlyfSAtLWRpc2FibGUtc3RyaXAgJHtFWFRSQV9PRUNPTkZ9ICRLVk1PUFRTCisgICAgdGVzdCAhIC1lICR7U30vdGFyZ2V0LWkzODYvYmVnaW5lbmRfZnVuY3Muc2ggfHwgY2htb2QgYSt4ICR7U30vdGFyZ2V0LWkzODYvYmVnaW5lbmRfZnVuY3Muc2gKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwltYWtlIGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCWNwIC1yTCAke0J9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9CisJZmluZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cyAtdHlwZSBmIC1uYW1lICIqLltTc2hjb2RdIiB8IHhhcmdzIC1pIHJtIC1yZiB7fQorCisJY3AgJHtTfS90ZXN0cy9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworfQorCitkb19pbnN0YWxsICgpIHsKKwlleHBvcnQgU1RSSVA9InRydWUiCisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3FlbXUKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9wb3dlcnBjX3JvbS5iaW4gJHtEfSR7ZGF0YWRpcn0vcWVtdQorfQorCisjIFRoZSBmb2xsb3dpbmcgZnJhZ21lbnQgd2lsbCBjcmVhdGUgYSB3cmFwcGVyIGZvciBxZW11LW1pcHMgdXNlciBlbXVsYXRpb24KKyMgYmluYXJ5IGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIGEgc2VnbWVudGF0aW9uIGZhdWx0IGlzc3VlLiBCYXNpY2FsbHksIGJ5CisjIGRlZmF1bHQsIHRoZSByZXNlcnZlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgZm9yIDMyLW9uLTY0IGJpdCBpcyBzZXQgdG8gNEdCLgorIyBUaGlzIHdpbGwgdHJpZ2dlciBhIE1NVSBhY2Nlc3MgZmF1bHQgaW4gdGhlIHZpcnR1YWwgQ1BVLiBXaXRoIHRoaXMgY2hhbmdlLAorIyB0aGUgcWVtdS1taXBzIHdvcmtzIGZpbmUuCisjIElNUE9SVEFOVDogVGhpcyBwaWVjZSBuZWVkcyB0byBiZSByZW1vdmVkIG9uY2UgdGhlIHJvb3QgY2F1c2UgaXMgZml4ZWQhCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiBbIC1lICIke0R9LyR7YmluZGlyfS9xZW11LW1pcHMiIF07IHRoZW4KKwkJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcWVtdS1taXBzIFwKKwkJCVFFTVVfUkVTRVJWRURfVkE9MHgwCisJZmkKK30KKyMgRU5EIG9mIHFlbXUtbWlwcyB3b3JrYXJvdW5kCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorCWZkdCBzZGwgXAorCSR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4ZW4nLCAneGVuJywgJycsIGQpfSBcCisJIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmUgPz89ICJmZHQgYWxzYSB1dWlkIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPz89ICJmZHQgc2RsIgorTkFUSVZFREVQUyA9ICIiCitOQVRJVkVERVBTX2NsYXNzLW5hdGl2ZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJ4ZXh0LW5hdGl2ZScsICcnLGQpfSIKK1BBQ0tBR0VDT05GSUdbc2RsXSA9ICItLWVuYWJsZS1zZGwsLS1kaXNhYmxlLXNkbCxsaWJzZGwgJHtOQVRJVkVERVBTfSwiCitQQUNLQUdFQ09ORklHW3ZpcnRmc10gPSAiLS1lbmFibGUtdmlydGZzIC0tZW5hYmxlLWF0dHIsLS1kaXNhYmxlLXZpcnRmcyxsaWJjYXAgYXR0ciwiCitQQUNLQUdFQ09ORklHW2Fpb10gPSAiLS1lbmFibGUtbGludXgtYWlvLC0tZGlzYWJsZS1saW51eC1haW8sbGliYWlvLCIKK1BBQ0tBR0VDT05GSUdbeGZzXSA9ICItLWVuYWJsZS14ZnNjdGwsLS1kaXNhYmxlLXhmc2N0bCx4ZnNwcm9ncywiCitQQUNLQUdFQ09ORklHW3hlbl0gPSAiLS1lbmFibGUteGVuLC0tZGlzYWJsZS14ZW4seGVuLHhlbi1saWJ4ZW5zdG9yZSB4ZW4tbGlieGVuY3RybCB4ZW4tbGlieGVuZ3Vlc3QiCitQQUNLQUdFQ09ORklHW3ZuYy10bHNdID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtdGxzLC0tZGlzYWJsZS12bmMtdGxzLCBnbnV0bHMsIgorUEFDS0FHRUNPTkZJR1t2bmMtc2FzbF0gPSAiLS1lbmFibGUtdm5jIC0tZW5hYmxlLXZuYy1zYXNsLC0tZGlzYWJsZS12bmMtc2FzbCxjeXJ1cy1zYXNsLCIKK1BBQ0tBR0VDT05GSUdbdm5jLWpwZWddID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtanBlZywtLWRpc2FibGUtdm5jLWpwZWcsanBlZywiCitQQUNLQUdFQ09ORklHW3ZuYy1wbmddID0gIi0tZW5hYmxlLXZuYyAtLWVuYWJsZS12bmMtcG5nLC0tZGlzYWJsZS12bmMtcG5nLGxpYnBuZywiCitQQUNLQUdFQ09ORklHW2xpYmN1cmxdID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsbGliY3VybCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS1lbmFibGUtc21hcnRjYXJkLW5zcywtLWRpc2FibGUtc21hcnRjYXJkLW5zcyxuc3MsIgorUEFDS0FHRUNPTkZJR1t1dWlkXSA9ICItLWVuYWJsZS11dWlkLC0tZGlzYWJsZS11dWlkLHV0aWwtbGludXgsIgorUEFDS0FHRUNPTkZJR1tjdXJzZXNdID0gIi0tZW5hYmxlLWN1cnNlcywtLWRpc2FibGUtY3Vyc2VzLG5jdXJzZXMsIgorUEFDS0FHRUNPTkZJR1tndGsrXSA9ICItLWVuYWJsZS1ndGsgLS1lbmFibGUtdnRlLC0tZGlzYWJsZS1ndGsgLS1kaXNhYmxlLXZ0ZSxndGsrIGxpYnZ0ZSwiCitQQUNLQUdFQ09ORklHW2xpYmNhcC1uZ10gPSAiLS1lbmFibGUtY2FwLW5nLC0tZGlzYWJsZS1jYXAtbmcsbGliY2FwLW5nLCIKK1BBQ0tBR0VDT05GSUdbc3NoMl0gPSAiLS1lbmFibGUtbGlic3NoMiwtLWRpc2FibGUtbGlic3NoMixsaWJzc2gyLCIKK1BBQ0tBR0VDT05GSUdbbGlidXNiXSA9ICItLWVuYWJsZS1saWJ1c2IsLS1kaXNhYmxlLWxpYnVzYixsaWJ1c2IxIgorUEFDS0FHRUNPTkZJR1tmZHRdID0gIi0tZW5hYmxlLWZkdCwtLWRpc2FibGUtZmR0LGR0YyIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gPSAiLCxhbHNhLWxpYiIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCxtZXNhIgorUEFDS0FHRUNPTkZJR1tsem9dID0gIi0tZW5hYmxlLWx6bywtLWRpc2FibGUtbHpvLGx6byIKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS1lbmFibGUtbnVtYSwtLWRpc2FibGUtbnVtYSxudW1hY3RsIgorUEFDS0FHRUNPTkZJR1tnbnV0bHNdID0gIi0tZW5hYmxlLWdudXRscywtLWRpc2FibGUtZ251dGxzLGdudXRscyIKKworRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhbHNhJywgJy0tYXVkaW8tZHJ2LWxpc3Q9b3NzLGFsc2EnLCAnJywgZCl9IgorCisjIFFlbXUgdGFyZ2V0IHdpbGwgbm90IGJ1aWxkIGluIHdvcmxkIGJ1aWxkIGZvciBBUk0gb3IgTWlwcworQlJPS0VOX3FlbXVhcm0gPSAiMSIKK0JST0tFTl9xZW11bWlwczY0ID0gIjEiCitCUk9LRU5fcWVtdW1pcHMgPSAiMSIKKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiYXJjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9RZW11LUFybS12ZXJzYXRpbGVwYi1BZGQtbWVtb3J5LXNpemUtY2hlY2tpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE2Y2Y1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gODk2ZmEwMmMyNDM0N2U2ZTkyNTk4MTJjZmRhMTg3YjFkNmNhNjE5OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEppYW5nIEx1IDxsdS5qaWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMyBOb3YgMjAxMyAxMDozODowOCArMDgwMAorU3ViamVjdDogW1BBVENIXSBRZW11OkFybTp2ZXJzYXRpbGVwYjogQWRkIG1lbW9yeSBzaXplIGNoZWNraW5nCisKK1RoZSBtYWNoaW5lIGNhbiBub3Qgd29yayB3aXRoIG1lbW9yeSBvdmVyIDI1Nk0sIHNvIGFkZCBhIGNoZWNraW5nCithdCBzdGFydHVwLiBJZiB0aGUgbWVtb3J5IHNpemUgZXhjZWVkIDI1Nk0sIGp1c3Qgc3RvcCBlbXVsYXRpb24gdGhlbgordGhyb3cgb3V0IHdhcm5pbmcgYWJvdXQgbWVtb3J5IGxpbWl0YXRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKaWFuZyBMdSA8bHUuamlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlZCBpdCBvbiAyMDE0LTAxLTE1IGZvciByZWJhc2luZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBkYXRlIGl0IHdoZW4gdXBncmFkZSBxZW11IHRvIDIuMi4wCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGh3L2FybS92ZXJzYXRpbGVwYi5jIHwgNyArKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaHcvYXJtL3ZlcnNhdGlsZXBiLmMgYi9ody9hcm0vdmVyc2F0aWxlcGIuYworaW5kZXggNmM2OWY0ZS4uOTI3OGQ5MCAxMDA2NDQKKy0tLSBhL2h3L2FybS92ZXJzYXRpbGVwYi5jCisrKysgYi9ody9hcm0vdmVyc2F0aWxlcGIuYworQEAgLTIwNCw2ICsyMDQsMTMgQEAgc3RhdGljIHZvaWQgdmVyc2F0aWxlX2luaXQoTWFjaGluZVN0YXRlICptYWNoaW5lLCBpbnQgYm9hcmRfaWQpCisgICAgICAgICBleGl0KDEpOworICAgICB9CisKKysgICAgaWYgKG1hY2hpbmUtPnJhbV9zaXplID4gKDI1NiA8PCAyMCkpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLAorKyAgICAgICAgICAgICAgICAicWVtdTogVG9vIG11Y2ggbWVtb3J5IGZvciB0aGlzIG1hY2hpbmU6ICVkIE1CLCBtYXhpbXVtIDI1NiBNQlxuIiwKKysgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBpbnQpcmFtX3NpemUgLyAoMSA8PCAyMCkpKTsKKysgICAgICAgIGV4aXQoMSk7CisrICAgIH0KKysKKyAgICAgY3B1b2JqID0gb2JqZWN0X25ldyhvYmplY3RfY2xhc3NfZ2V0X25hbWUoY3B1X29jKSk7CisKKyAgICAgLyogQnkgZGVmYXVsdCBBUk0xMTc2IENQVXMgaGF2ZSBFTDMgZW5hYmxlZC4gIFRoaXMgYm9hcmQgZG9lcyBub3QKKy0tIAorMi4xLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2FkZC1wdGVzdC1pbi1tYWtlZmlsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTlmNzIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9hZGQtcHRlc3QtaW4tbWFrZWZpbGUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBzdWJwYWNrYWdlIC1wdGVzdCB3aGljaCBydW5zIGFsbCB1bml0IHRlc3QgY2FzZXMgZm9yIHFlbXUuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdHMvTWFrZWZpbGUgfCAgIDEwICsrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggODhmNzEwNS4uM2Y0MGI0YiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTQwNSwzICs0MDUsMTIgQEAgYWxsOiAkKFFFTVVfSU9URVNUU19IRUxQRVJTLXkpCisgCisgLWluY2x1ZGUgJCh3aWxkY2FyZCB0ZXN0cy8qLmQpCisgLWluY2x1ZGUgJCh3aWxkY2FyZCB0ZXN0cy9saWJxb3MvKi5kKQorKworK2J1aWxkdGVzdC1URVNUUzogJChjaGVjay11bml0LXkpCisrCisrcnVudGVzdC1URVNUUzoKKysJZm9yIGYgaW4gJChjaGVjay11bml0LXkpOyBkbyBcCisrCQluZj0kJChlY2hvICQkZiB8IHNlZCAncy90ZXN0c1wvL1wuXC8vZycpOyBcCisrCQkkJG5mOyBcCisrCWRvbmUKKysKKy0tCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY29uZmlndXJlLWZpeC1EYXJ3aW4tdGFyZ2V0LWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWNkYzFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jb25maWd1cmUtZml4LURhcndpbi10YXJnZXQtZGV0ZWN0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKworRnJvbSA5YWMwOTZkOGVjY2YyZDU2ZWNlNjQ2MzIwYzI4MmM4MzY5ZjgzMzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjkgSnVsIDIwMTQgMTg6MzU6NTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBmaXggRGFyd2luIHRhcmdldCBkZXRlY3Rpb24KKworZml4IERhcndpbiB0YXJnZXQgZGV0ZWN0aW9uIGZvciBxZW11Citjcm9zcy1jb21waWxhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gSW9yZ2EgPGNyaXN0aWFuLmlvcmdhQGludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDI4M2M3MWMuLjFjNjZhMTEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ0NCw2ICs0NDQsOCBAQCBlbGlmIGNoZWNrX2RlZmluZSBfX3N1bl9fIDsgdGhlbgorICAgdGFyZ2V0b3M9J1N1bk9TJworIGVsaWYgY2hlY2tfZGVmaW5lIF9fSEFJS1VfXyA7IHRoZW4KKyAgIHRhcmdldG9zPSdIYWlrdScKKytlbGlmIGNoZWNrX2RlZmluZSBfX0FQUExFX18gOyB0aGVuCisrICB0YXJnZXRvcz0nRGFyd2luJworIGVsc2UKKyAgIHRhcmdldG9zPWB1bmFtZSAtc2AKKyBmaQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X2NwdV9raWNrX3RocmVhZF9kZWJ1Z2dpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyMjEzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvY3B1cy5jLXFlbXVfY3B1X2tpY2tfdGhyZWFkX2RlYnVnZ2luZy5wYXRjaApAQCAtMCwwICsxLDc2IEBACitGcm9tIDY5N2E4MzRjMzVkMTk0NDdiN2RjZGI5ZTFkOTQzNGJjNmNlMTdjMjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/QW49QzM9QURiYWw9MjBMaW09QzM9QjNuPz0gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDE1OjExOjMwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNwdXMuYzogQWRkIGVycm9yIG1lc3NhZ2VzIHdoZW4gcWVtaV9jcHVfa2lja190aHJlYWQgZmFpbHMuCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0FkZCBjdXN0b21fZGVidWcuaCB3aXRoIGZ1bmN0aW9uIGZvciBwcmludCBiYWNrdHJhY2UgaW5mb3JtYXRpb24uCitXaGVuIHB0aHJlYWRfa2lsbCBmYWlscyBpbiBxZW11X2NwdV9raWNrX3RocmVhZCBkaXNwbGF5IGJhY2t0cmFjZSBhbmQKK2N1cnJlbnQgY3B1IGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorLS0tCisgY3B1cy5jICAgICAgICAgfCAgNSArKysrKworIGN1c3RvbV9kZWJ1Zy5oIHwgMjQgKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGN1c3RvbV9kZWJ1Zy5oCisKK2RpZmYgLS1naXQgYS9jcHVzLmMgYi9jcHVzLmMKK2luZGV4IGE4MjJjZTMuLjdlNDc4NmUgMTAwNjQ0CistLS0gYS9jcHVzLmMKKysrKyBiL2NwdXMuYworQEAgLTEwODAsNiArMTA4MCw4IEBAIHN0YXRpYyB2b2lkICpxZW11X3RjZ19jcHVfdGhyZWFkX2ZuKHZvaWQgKmFyZykKKyAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorKyNpbmNsdWRlICJjdXN0b21fZGVidWcuaCIKKysKKyBzdGF0aWMgdm9pZCBxZW11X2NwdV9raWNrX3RocmVhZChDUFVTdGF0ZSAqY3B1KQorIHsKKyAjaWZuZGVmIF9XSU4zMgorQEAgLTEwODgsNiArMTA5MCw5IEBAIHN0YXRpYyB2b2lkIHFlbXVfY3B1X2tpY2tfdGhyZWFkKENQVVN0YXRlICpjcHUpCisgICAgIGVyciA9IHB0aHJlYWRfa2lsbChjcHUtPnRocmVhZC0+dGhyZWFkLCBTSUdfSVBJKTsKKyAgICAgaWYgKGVycikgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiVzOiAlcyIsIF9fZnVuY19fLCBzdHJlcnJvcihlcnIpKTsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ1BVICMlZDpcbiIsIGNwdS0+Y3B1X2luZGV4KTsKKysgICAgICAgIGNwdV9kdW1wX3N0YXRlKGNwdSwgc3RkZXJyLCBmcHJpbnRmLCAwKTsKKysgICAgICAgIGJhY2t0cmFjZV9wcmludCgpOworICAgICAgICAgZXhpdCgxKTsKKyAgICAgfQorICNlbHNlIC8qIF9XSU4zMiAqLworZGlmZiAtLWdpdCBhL2N1c3RvbV9kZWJ1Zy5oIGIvY3VzdG9tX2RlYnVnLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5mMDI5ZTQ1CistLS0gL2Rldi9udWxsCisrKysgYi9jdXN0b21fZGVidWcuaAorQEAgLTAsMCArMSwyNCBAQAorKyNpbmNsdWRlIDxleGVjaW5mby5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKyNkZWZpbmUgQkFDS1RSQUNFX01BWCAxMjgKKytzdGF0aWMgdm9pZCBiYWNrdHJhY2VfcHJpbnQodm9pZCkKKyt7CisrCWludCBuZnVuY3MgPSAwOworKwl2b2lkICpidWZbQkFDS1RSQUNFX01BWF07CisrCWNoYXIgKipzeW1ib2xzOworKwlpbnQgaTsKKysKKysJbmZ1bmNzID0gYmFja3RyYWNlKGJ1ZiwgQkFDS1RSQUNFX01BWCk7CisrCisrCXN5bWJvbHMgPSBiYWNrdHJhY2Vfc3ltYm9scyhidWYsIG5mdW5jcyk7CisrCWlmIChzeW1ib2xzID09IE5VTEwpIHsKKysJCWZwcmludGYoc3RkZXJyLCAiYmFja3RyYWNlX3ByaW50IGZhaWxlZCB0byBnZXQgc3ltYm9scyIpOworKwkJcmV0dXJuOworKwl9CisrCisrCWZwcmludGYoc3RkZXJyLCAiQmFja3RyYWNlIC4uLlxuIik7CisrCWZvciAoaSA9IDA7IGkgPCBuZnVuY3M7IGkrKykKKysJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN5bWJvbHNbaV0pOworKworKwlmcmVlKHN5bWJvbHMpOworK30KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkLWZpeC1yYWNlLWNvbmRpdGlvbi1hLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9jcHVzLmMtcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkLWZpeC1yYWNlLWNvbmRpdGlvbi1hLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZGZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2NwdXMuYy1xZW11X211dGV4X2xvY2tfaW90aHJlYWQtZml4LXJhY2UtY29uZGl0aW9uLWEucGF0Y2gKQEAgLTAsMCArMSw0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworRnJvbSBmMzU0YjkzMzM0MDhkNDExODU0YWYwNThjYzQ0Y2NlZGE2MGI0NDczIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuPUMzPUFEYmFsPTIwTGltPUMzPUIzbj89IDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAzIFNlcCAyMDE1IDE0OjA3OjM0IC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNwdXMuYzogcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkIGZpeCByYWNlIGNvbmRpdGlvbiBhdCBjcHUKKyB0aHJlYWQgaW5pdAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitXaGVuIFFFTVUgc3RhcnRzIHRoZSBSQ1UgdGhyZWFkIGV4ZWN1dGVzIHFlbXVfbXV0ZXhfbG9ja190aHJlYWQKK2NhdXNpbmcgZXJyb3IgInFlbXU6cWVtdV9jcHVfa2lja190aHJlYWQ6IE5vIHN1Y2ggcHJvY2VzcyIgYW5kIGV4aXRzLgorCitUaGlzIGlzbid0IG9jY3VyIGZyZXF1ZW50bHkgYnV0IGluIGdsaWJjIHRoZSB0aHJlYWQgaWQgY2FuIGV4aXN0IGFuZAordGhpcyBub3QgZ3VhcmFudGVlIHRoYXQgdGhlIHRocmVhZCBpcyBvbiBhY3RpdmUvcnVubmluZyBzdGF0ZS4gSWYgaXMKK2luc2VydGVkIGEgc2xlZXAoMSkgYWZ0ZXIgbmV3dGhyZWFkIGFzc2lnbm1lbnQgWzFdIHRoZSBpc3N1ZSBhcHBlYXJzLgorCitTbyBub3QgbWFrZSBhc3N1bXB0aW9uIHRoYXQgdGhyZWFkIGV4aXN0IGlmIGZpcnN0X2NwdS0+dGhyZWFkIGlzIHNldAordGhlbiBjaGFuZ2UgdGhlIHZhbGlkYXRpb24gb2YgY3B1IHRvIGNyZWF0ZWQgdGhhdCBpcyBzZXQgaW50byBjcHUKK3RocmVhZHMgKGt2bSwgdGNnLCBkdW1teSkuCisKK1sxXSBodHRwczovL3NvdXJjZXdhcmUub3JnL2dpdC8/cD1nbGliYy5naXQ7YT1ibG9iO2Y9bnB0bC9wdGhyZWFkX2NyZWF0ZS5jO2g9ZDEwZjRlYTgwMDRlMWQ4ZjNhMjY4Yjk1Y2MwZjhkOTNiOGQ4OTg2NztoYj1IRUFEI2w2MjEKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjcHVzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jcHVzLmMgYi9jcHVzLmMKK2luZGV4IDdlNDc4NmUuLjA1ZTU0MDAgMTAwNjQ0CistLS0gYS9jcHVzLmMKKysrKyBiL2NwdXMuYworQEAgLTExNzEsNyArMTE3MSw3IEBAIHZvaWQgcWVtdV9tdXRleF9sb2NrX2lvdGhyZWFkKHZvaWQpCisgICAgICAqIFRDRyBjb2RlIGV4ZWN1dGlvbi4KKyAgICAgICovCisgICAgIGlmICghdGNnX2VuYWJsZWQoKSB8fCBxZW11X2luX3ZjcHVfdGhyZWFkKCkgfHwKKy0gICAgICAgICFmaXJzdF9jcHUgfHwgIWZpcnN0X2NwdS0+dGhyZWFkKSB7CisrICAgICAgICAhZmlyc3RfY3B1IHx8ICFmaXJzdF9jcHUtPmNyZWF0ZWQpIHsKKyAgICAgICAgIHFlbXVfbXV0ZXhfbG9jaygmcWVtdV9nbG9iYWxfbXV0ZXgpOworICAgICAgICAgYXRvbWljX2RlYygmaW90aHJlYWRfcmVxdWVzdGluZ19tdXRleCk7CisgICAgIH0gZWxzZSB7CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZGlzYWJsZS1ncmFicy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTcyNmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9kaXNhYmxlLWdyYWJzLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK1doZW4gdGhlIHBvaW50ZXIgZW50ZXJzIHRoZSBRZW11IHdpbmRvdyBpdCBjYWxscyBTRExfV01fR3JhYklucHV0LCB3aGljaCBjYWxscworWEdyYWJQb2ludGVyIGluIGEgYnVzeWxvb3AgdW50aWwgaXQgcmV0dXJucyBHcmFiU3VjY2Vzcy4gSG93ZXZlciBpZiB0aGVyZSdzIGFscmVhZHkKK2EgcG9pbnRlciBncmFiIChzY3JlZW4gaXMgbG9ja2VkLCBhIG1lbnUgaXMgb3BlbikgdGhlbiBxZW11IHdpbGwgaGFuZyB1bnRpbCB0aGUKK2dyYWIgY2FuIGJlIHRha2VuLiAgSW4gdGhlIHNwZWNpZmljIGNhc2Ugb2YgYSBoZWFkbGVzcyBYIHNlcnZlciBvbiBhbiBhdXRvYnVpbGRlciwgb25jZQordGhlIHNjcmVlbnNhdmVyIGhhcyBraWNrZWQgaW4gYW55IHFlbXUgaW5zdGFuY2UgdGhhdCBhcHBlYXJzIHVuZGVybmVhdGggdGhlCitwb2ludGVyIHdpbGwgaGFuZy4KKworSSdtIG5vdCBlbnRpcmVseSBzdXJlIHdoeSBwb2ludGVyIGdyYWJzIGFyZSByZXF1aXJlZCAodGhlIGRvY3VtZW50YXRpb24KK2V4cGxpY2l0bHkgc2F5cyBpdCBkb2Vzbid0IGRvIGdyYWJzIHdoZW4gdXNpbmcgYSB0YWJsZXQsIHdoaWNoIHdlIGFyZSkgc28gd3JhcAordGhlbSBpbiBhIGNvbmRpdGlvbmFsIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgYXV0b2J1aWxkZXIgZW52aXJvbm1lbnQsIHByZXNlcnZpbmcKK3RoZSBjdXJyZW50IGdyYWJiaW5nIGJlaGF2aW91ciBmb3IgZXZlcnlvbmUgZWxzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIDRiMTk4OGVjYjAxYTE3ODI2OWVjMDUxM2E3NWYyZWM2MjBjN2VmNmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxOCBTZXAgMjAxMyAxNDowNDo1NCArMDEwMAorU3ViamVjdDogW1BBVENIXSBzZGwuYzogYWxsb3cgdXNlciB0byBkaXNhYmxlIHBvaW50ZXIgZ3JhYnMKKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEVyaWMgQsOpbmFyZCA8ZXJpY0BldWtyZWEuY29tPgorLS0tCisgdWkvc2RsLmMgfCAxMiArKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VpL3NkbC5jIGIvdWkvc2RsLmMKK2luZGV4IDM5YTQyZDYuLjliOGFiZTUgMTAwNjQ0CistLS0gYS91aS9zZGwuYworKysrIGIvdWkvc2RsLmMKK0BAIC01OSw2ICs1OSwxMCBAQCBzdGF0aWMgU0RMX0N1cnNvciAqZ3Vlc3Rfc3ByaXRlID0gTlVMTDsKKyBzdGF0aWMgU0RMX1BpeGVsRm9ybWF0IGhvc3RfZm9ybWF0OworIHN0YXRpYyBpbnQgc2NhbGluZ19hY3RpdmUgPSAwOworIHN0YXRpYyBOb3RpZmllciBtb3VzZV9tb2RlX25vdGlmaWVyOworKyNpZm5kZWYgVHJ1ZQorKyNkZWZpbmUgVHJ1ZSAxCisrI2VuZGlmCisrc3RhdGljIGRvaW5nX2dyYWJzID0gVHJ1ZTsKKyAKKyBzdGF0aWMgdm9pZCBzZGxfdXBkYXRlKERpc3BsYXlDaGFuZ2VMaXN0ZW5lciAqZGNsLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCitAQCAtMzg0LDE0ICszODgsMTYgQEAgc3RhdGljIHZvaWQgc2RsX2dyYWJfc3RhcnQodm9pZCkKKyAgICAgICAgICAgICBTRExfV2FycE1vdXNlKGd1ZXN0X3gsIGd1ZXN0X3kpOworICAgICB9IGVsc2UKKyAgICAgICAgIHNkbF9oaWRlX2N1cnNvcigpOworLSAgICBTRExfV01fR3JhYklucHV0KFNETF9HUkFCX09OKTsKKysgICAgaWYgKGRvaW5nX2dyYWJzKQorKyAgICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT04pOworICAgICBndWlfZ3JhYiA9IDE7CisgICAgIHNkbF91cGRhdGVfY2FwdGlvbigpOworIH0KKyAKKyBzdGF0aWMgdm9pZCBzZGxfZ3JhYl9lbmQodm9pZCkKKyB7CistICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT0ZGKTsKKysgICAgaWYgKGRvaW5nX2dyYWJzKQorKyAgICAgIFNETF9XTV9HcmFiSW5wdXQoU0RMX0dSQUJfT0ZGKTsKKyAgICAgZ3VpX2dyYWIgPSAwOworICAgICBzZGxfc2hvd19jdXJzb3IoKTsKKyAgICAgc2RsX3VwZGF0ZV9jYXB0aW9uKCk7CitAQCAtOTA5LDYgKzkxNSw4IEBAIHZvaWQgc2RsX2Rpc3BsYXlfaW5pdChEaXNwbGF5U3RhdGUgKmRzLCBpbnQgZnVsbF9zY3JlZW4sIGludCBub19mcmFtZSkKKyAgICAgICogVGhpcyByZXF1aXJlcyBTREwgPj0gMS4yLjE0LiAqLworICAgICBzZXRlbnYoIlNETF9ESVNBQkxFX0xPQ0tfS0VZUyIsICIxIiwgMSk7CisgCisrICAgIGRvaW5nX2dyYWJzID0gKGdldGVudigiUUVNVV9ET05UX0dSQUIiKSA9PSBOVUxMKTsKKysKKyAgICAgZmxhZ3MgPSBTRExfSU5JVF9WSURFTyB8IFNETF9JTklUX05PUEFSQUNIVVRFOworICAgICBpZiAoU0RMX0luaXQgKGZsYWdzKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBTREwoJXMpIC0gZXhpdGluZ1xuIiwKKy0tIAorMS44LjMuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvZXhjbHVkZS1zb21lLWFybS1FQUJJLW9ic29sZXRlLXN5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWJkYTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2V4Y2x1ZGUtc29tZS1hcm0tRUFCSS1vYnNvbGV0ZS1zeXNjYWxscy5wYXRjaApAQCAtMCwwICsxLDkzIEBACitbUEFUQ0hdIGV4Y2x1ZGUgc29tZSBhcm0gRUFCSSBvYnNvbGV0ZSBzeXNjYWxscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworc29tZSBzeXNjYWxscyBhcmUgb2Jzb2xldGUgYW5kIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIEVBQkksIGV4Y2x1ZGUgdGhlbSB0bworZml4IHRoZSBiZWxvdyBlcnJvcjoKKwlJbiBmaWxlIGluY2x1ZGVkIGZyb20gcWVtdS1zZWNjb21wLmM6MTY6MDoKKwlxZW11LXNlY2NvbXAuYzoyODo3OiBlcnJvcjogJ19fTlJfc2VsZWN0JyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVMoc2VsZWN0KSwgMjUyIH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6MzY6NzogZXJyb3I6ICdfX05SX21tYXAnIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisJICAgICAgICBeCisJcWVtdS1zZWNjb21wLmM6NTc6NzogZXJyb3I6ICdfX05SX2dldHJsaW1pdCcgdW5kZWNsYXJlZCBoZXJlIChub3QgaW4gYSBmdW5jdGlvbikKKwkgICAgICB7IFNDTVBfU1lTKGdldHJsaW1pdCksIDI0NSB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjk2Ojc6IGVycm9yOiAnX19OUl90aW1lJyB1bmRlY2xhcmVkIGhlcmUgKG5vdCBpbiBhIGZ1bmN0aW9uKQorCSAgICAgIHsgU0NNUF9TWVModGltZSksIDI0NSB9LAorCSAgICAgICAgXgorCXFlbXUtc2VjY29tcC5jOjE4NTo3OiBlcnJvcjogJ19fTlJfYWxhcm0nIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisJICAgICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorCitwbGVhc2UgcmVmZXIgc291cmNlIGZpbGVzOgorCWFyY2gvYXJtL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKK29yIGtlcm5lbCBoZWFkZXI6CisJL3Vzci9pbmNsdWRlL2FzbS91bmlzdGQuaAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBxZW11LXNlY2NvbXAuYyB8IDE0ICsrKysrKysrLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3FlbXUtc2VjY29tcC5jIGIvcWVtdS1zZWNjb21wLmMKK2luZGV4IGNhYTkyNmUuLjVhNzg1MDIgMTAwNjQ0CistLS0gYS9xZW11LXNlY2NvbXAuYworKysrIGIvcWVtdS1zZWNjb21wLmMKK0BAIC0yNSwxNSArMjUsMjEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyh0aW1lcl9zZXR0aW1lKSwgMjU1IH0sCisgICAgIHsgU0NNUF9TWVModGltZXJfZ2V0dGltZSksIDI1NCB9LAorICAgICB7IFNDTVBfU1lTKGZ1dGV4KSwgMjUzIH0sCisrI2lmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKKyAgICAgeyBTQ01QX1NZUyhzZWxlY3QpLCAyNTIgfSwKKysgICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisrICAgIHsgU0NNUF9TWVMoYWxhcm0pLCAyNDEgfSwKKysgICAgeyBTQ01QX1NZUyhnZXRybGltaXQpLCAyNDUgfSwKKysgICAgeyBTQ01QX1NZUyhtbWFwKSwgMjQ3IH0sCisrICAgIHsgU0NNUF9TWVMoc29ja2V0Y2FsbCksIDI1MCB9LAorKyAgICB7IFNDTVBfU1lTKGlwYyksIDI0NSB9LAorKyNlbmRpZgorICAgICB7IFNDTVBfU1lTKHJlY3Zmcm9tKSwgMjUxIH0sCisgICAgIHsgU0NNUF9TWVMoc2VuZHRvKSwgMjUwIH0sCistICAgIHsgU0NNUF9TWVMoc29ja2V0Y2FsbCksIDI1MCB9LAorICAgICB7IFNDTVBfU1lTKHJlYWQpLCAyNDkgfSwKKyAgICAgeyBTQ01QX1NZUyhpb19zdWJtaXQpLCAyNDkgfSwKKyAgICAgeyBTQ01QX1NZUyhicmspLCAyNDggfSwKKyAgICAgeyBTQ01QX1NZUyhjbG9uZSksIDI0NyB9LAorLSAgICB7IFNDTVBfU1lTKG1tYXApLCAyNDcgfSwKKyAgICAgeyBTQ01QX1NZUyhtcHJvdGVjdCksIDI0NiB9LAorICAgICB7IFNDTVBfU1lTKGV4ZWN2ZSksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKG9wZW4pLCAyNDUgfSwKK0BAIC00OCwxMyArNTQsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyhiaW5kKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMobGlzdGVuKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2VtZ2V0KSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVMoaXBjKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoZ2V0dGltZW9mZGF5KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocmVhZGxpbmspLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhhY2Nlc3MpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhwcmN0bCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKHNpZ25hbGZkKSwgMjQ1IH0sCistICAgIHsgU0NNUF9TWVMoZ2V0cmxpbWl0KSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc2V0X3RpZF9hZGRyZXNzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoc3RhdGZzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVModW5saW5rKSwgMjQ1IH0sCitAQCAtOTMsNyArOTcsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IFFlbXVTZWNjb21wU3lzY2FsbCBzZWNjb21wX3doaXRlbGlzdFtdID0geworICAgICB7IFNDTVBfU1lTKHRpbWVzKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMoZXhpdCksIDI0NSB9LAorICAgICB7IFNDTVBfU1lTKGNsb2NrX2dldHRpbWUpLCAyNDUgfSwKKy0gICAgeyBTQ01QX1NZUyh0aW1lKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocmVzdGFydF9zeXNjYWxsKSwgMjQ1IH0sCisgICAgIHsgU0NNUF9TWVMocHdyaXRlNjQpLCAyNDUgfSwKKyAgICAgeyBTQ01QX1NZUyhuYW5vc2xlZXApLCAyNDUgfSwKK0BAIC0xODIsNyArMTg1LDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBRZW11U2VjY29tcFN5c2NhbGwgc2VjY29tcF93aGl0ZWxpc3RbXSA9IHsKKyAgICAgeyBTQ01QX1NZUyhsc3RhdDY0KSwgMjQxIH0sCisgICAgIHsgU0NNUF9TWVMoc2VuZGZpbGU2NCksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHVnZXRybGltaXQpLCAyNDEgfSwKKy0gICAgeyBTQ01QX1NZUyhhbGFybSksIDI0MSB9LAorICAgICB7IFNDTVBfU1lTKHJ0X3NpZ3N1c3BlbmQpLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF9zaWdxdWV1ZWluZm8pLCAyNDEgfSwKKyAgICAgeyBTQ01QX1NZUyhydF90Z3NpZ3F1ZXVlaW5mbyksIDI0MSB9LAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L2ZpeC1saWJjYXAtaGVhZGVyLWlzc3VlLW9uLXNvbWUtZGlzdHJvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2E2ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9maXgtbGliY2FwLWhlYWRlci1pc3N1ZS1vbi1zb21lLWRpc3Ryby5wYXRjaApAQCAtMCwwICsxLDg0IEBACitmaXggbGliY2FwIGhlYWRlciBpc3N1ZSBvbiBzb21lIGRpc3RybworCisxLCBXaGVuIGJ1aWxkIHFlbXUtbmF0aXZlIG9uIFNMRUQgMTEuMiwgdGhlcmUgaXMgYW4gZXJyb3I6CisuLi4KK3wgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaDoyOCwKK3wgIGZyb20gL3Vzci9pbmNsdWRlL3NpZ25hbC5oOjMzOSwKK3wgIGZyb20gL2J1aWxkYXJlYTIvdG1wL3dvcmsvaTY4Ni1saW51eC9xZW11LW5hdGl2ZS8xLjQuMC1yMC8KK3FlbXUtMS40LjAvaW5jbHVkZS9xZW11LWNvbW1vbi5oOjQyLAorfCAgZnJvbSBmc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmM6MjM6Cit8ICAvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaDoyODogZXJyb3I6IGV4cGVjdGVkIHNwZWNpZmllci0KK3F1YWxpZmllci1saXN0IGJlZm9yZSAnX191NjQnCit8ICAvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaDoxOTE6IGVycm9yOiBleHBlY3RlZCBzcGVjaWZpZXItCitxdWFsaWZpZXItbGlzdCBiZWZvcmUgJ19fdTY0JworLi4uCisKKzIsIFRoZSB2aXJ0ZnMtcHJveHktaGVscGVyLmMgaW5jbHVkZXMgPHN5cy9jYXBhYmlsaXR5Lmg+IGFuZAorcWVtdS1jb21tb24uaCBpbiBzZXF1ZW5jZS4gVGhlIGhlYWRlciBpbmNsdWRlIG1hcCBpczoKKyhgLS0+JyBwcmVzZW50cyBgaW5jbHVkZScpCisuLi4KKyJ2aXJ0ZnMtcHJveHktaGVscGVyLmMiIC0tPiA8c3lzL2NhcGFiaWxpdHkuaD4KKy4uLgorInZpcnRmcy1wcm94eS1oZWxwZXIuYyIgLS0+ICJxZW11LWNvbW1vbi5oIiAtLT4gPHNpZ25hbC5oPiAtLT4KKzxiaXRzL3NpZ2NvbnRleHQuaD4gLS0+IDxhc20vc2lnY29udGV4dC5oPiAtLT4gPGxpbnV4L3R5cGVzLmg+IC0tPgorPGFzbS90eXBlcy5oPiAtLT4gPGFzbS1nZW5lcmljL3R5cGVzLmg+IC0tPiA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4KKy4uLgorCiszLCBUaGUgYnVnIGlzIGZvdW5kIG9uIFNMRUQgMTEuMiB4ODYuIEluIGxpYmNhcCBoZWFkZXIgZmlsZQorL3Vzci9pbmNsdWRlL3N5cy9jYXBhYmlsaXR5LmgsIGl0IGRvZXMgZXZpbCBzdHVmZiBsaWtlIHRoaXM6CisuLi4KKyAgMjUgLyoKKyAgMjYgICogTWFrZSBzdXJlIHdlIGNhbiBiZSBpbmNsdWRlZCBmcm9tIHVzZXJsYW5kIGJ5IHByZXZlbnRpbmcKKyAgMjcgICogY2FwYWJpbGl0eS5oIGZyb20gaW5jbHVkaW5nIG90aGVyIGtlcm5lbCBoZWFkZXJzCisgIDI4ICAqLworICAyOSAjZGVmaW5lIF9MSU5VWF9UWVBFU19ICisgIDMwICNkZWZpbmUgX0xJTlVYX0ZTX0gKKyAgMzEgI2RlZmluZSBfX0xJTlVYX0NPTVBJTEVSX0gKKyAgMzIgI2RlZmluZSBfX3VzZXIKKyAgMzMKKyAgMzQgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7CisgIDM1IHR5cGVkZWYgX191MzIgX19sZTMyOworLi4uCitUaGlzIGNvbXBsZXRlbHkgcHJldmVudHMgaW5jbHVkaW5nIC91c3IvaW5jbHVkZS9saW51eC90eXBlcy5oLgorVGhlIGFib3ZlIGA8YXNtL3NpZ2NvbnRleHQuaD4gLS0+IDxsaW51eC90eXBlcy5oPicgaXMgcHJldmVudGVkLAorYW5kICdfX3U2NCcgaXMgZGVmaW5lZCBpbiA8YXNtLWdlbmVyaWMvaW50LWxsNjQuaD4uCisKKzQsIE1vZGlmeSB2aXJ0ZnMtcHJveHktaGVscGVyLmMgdG8gaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KK2xhc3QgdG8gd29ya2Fyb3VuZCB0aGUgaXNzdWUuCisKK2h0dHA6Ly93d3cubGludXh0di5vcmcvcGlwZXJtYWlsL3Zkci8yMDA5LUF1Z3VzdC8wMjExOTQuaHRtbAoraHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wYXRjaC8xMjc0OC8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBmc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMgfCAgICA3ICsrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jIGIvZnNkZXYvdmlydGZzLXByb3h5LWhlbHBlci5jCistLS0gYS9mc2Rldi92aXJ0ZnMtcHJveHktaGVscGVyLmMKKysrKyBiL2ZzZGV2L3ZpcnRmcy1wcm94eS1oZWxwZXIuYworQEAgLTEyLDcgKzEyLDYgQEAKKyAjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKy0jaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyAjaW5jbHVkZSA8c3lzL2ZzdWlkLmg+CisgI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CitAQCAtMjYsNyArMjUsMTEgQEAKKyAjaW5jbHVkZSAidmlydGlvLTlwLW1hcnNoYWwuaCIKKyAjaW5jbHVkZSAiaHcvOXBmcy92aXJ0aW8tOXAtcHJveHkuaCIKKyAjaW5jbHVkZSAiZnNkZXYvdmlydGlvLTlwLW1hcnNoYWwuaCIKKy0KKysvKgorKyAqIEluY2x1ZGUgdGhpcyBvbmUgbGFzdCBkdWUgdG8gc29tZSB2ZXJzaW9ucyBvZiBpdCBiZWluZyBidWdneToKKysgKiBodHRwOi8vd3d3LmxpbnV4dHYub3JnL3BpcGVybWFpbC92ZHIvMjAwOS1BdWd1c3QvMDIxMTk0Lmh0bWwKKysgKi8KKysjaW5jbHVkZSA8c3lzL2NhcGFiaWxpdHkuaD4KKyAjZGVmaW5lIFBST0dOQU1FICJ2aXJ0ZnMtcHJveHktaGVscGVyIgorIAorICNpZm5kZWYgWEZTX1NVUEVSX01BR0lDCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9wb3dlcnBjX3JvbS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwNDQyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcG93ZXJwY19yb20uYmluCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9xZW11LWVubGFyZ2UtZW52LWVudHJ5LXNpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0MjVhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcWVtdS1lbmxhcmdlLWVudi1lbnRyeS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK3FlbXU6IEFkZCBhZGRpdGlvbiBlbnZpcm9ubWVudCBzcGFjZSB0byBib290IGxvYWRlciBxZW11LXN5c3RlbS1taXBzIAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgLSBPRSB1c2VzIGRlZXAgcGF0aHMKKworSWYgeW91IGNyZWF0ZSBhIHByb2plY3Qgd2l0aCB2ZXJ5IGxvbmcgZGlyZWN0b3J5IG5hbWVzIGxpa2UgMTI4IGNoYXJhY3RlcnMKK2RlZXAgYW5kIHVzZSBORlMsIHRoZSBrZXJuZWwgYXJndW1lbnRzIHdpbGwgYmUgdHJ1bmNhdGVkLiBUaGUga2VybmVsIHdpbGwKK2FjY2VwdCBsb25nZXIgc3RyaW5ncyBzdWNoIGFzIDEwMjQgYnl0ZXMsIGJ1dCB0aGUgcWVtdSBib290IGxvYWRlciBkZWZhdWx0ZWQKK3RvIG9ubHkgMjU2IGJ5dGVzLiBUaGlzIHBhdGNoIGV4cGFuZHMgdGhlIGxpbWl0LgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgaHcvbWlwcy9taXBzX21hbHRhLmMgICAgfCAgICAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ody9taXBzL21pcHNfbWFsdGEuYyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCitpbmRleCA5ZDUyMWNjLi4xN2MwMzkxIDEwMDY0NAorLS0tIGEvaHcvbWlwcy9taXBzX21hbHRhLmMKKysrKyBiL2h3L21pcHMvbWlwc19tYWx0YS5jCitAQCAtNTMsNyArNTMsNyBAQAorIAorICNkZWZpbmUgRU5WUF9BRERSCQkweDgwMDAyMDAwbAorICNkZWZpbmUgRU5WUF9OQl9FTlRSSUVTCSAJMTYKKy0jZGVmaW5lIEVOVlBfRU5UUllfU0laRQkgCTI1NgorKyNkZWZpbmUgRU5WUF9FTlRSWV9TSVpFCSAJMTAyNAorIAorIC8qIEhhcmR3YXJlIGFkZHJlc3NlcyAqLworICNkZWZpbmUgRkxBU0hfQUREUkVTUyAweDFlMDAwMDAwVUxMCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRiOGU5NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisjCisjVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBydW4gcWVtdSB0ZXN0IHN1aXRlcworcHRlc3RkaXI9JChwd2QpCitjZCB0ZXN0cworCitleHBvcnQgU1JDX1BBVEg9JHB0ZXN0ZGlyCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMgfCBzZWQgJy86IE9LLyBzL14vUEFTUzogL2cnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3ZTc3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeC5wYXRjaApAQCAtMCwwICsxLDc0IEBACitUaGUgc21jOTFjMTExLmMgZHJpdmVyIGFwcGVhcnMgdG8gaGF2ZSBzZXZlcmFsIGlzc3Vlcy4gVGhlIGNhbl9yZWNlaXZlKCkKK2Z1bmN0aW9uIGNhbiByZXR1cm4gdGhhdCB0aGUgZHJpdmVyIGlzIHJlYWR5IHdoZW4gcnhfZmlmbyBoYXMgbm90IGJlZW4gCitmcmVlZCB5ZXQuIFRoZXJlIGlzIGFsc28gbm8gc2FuaXR5IGNoZWNrIG9mIHJ4X2ZpZm8oKSBpbiBfcmVjZWl2ZSgpIHdoaWNoCitjYW4gbGVhZCB0byBjb3JydXB0aW9uIG9mIHRoZSByeF9maWZvIGFycmF5LgorCityZWxlYXNlX3BhY2tldCgpIGNhbiBhbHNvIGNhbGwgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cygpIGJlZm9yZSByeF9maWZvIAoraGFzIGJlZW4gY2xlYW5lZCB1cCwgcmVzdWx0aW5nIGluIGNhc2VzIHdoZXJlIHBhY2tldHMgYXJlIHN1Ym1pdHRlZAorZm9yIHdoaWNoIHRoZXJlIGlzIG5vdCB5ZXQgYW55IHNwYWNlLgorCitUaGlzIHBhdGNoIHRoZXJlZm9yZToKKworKiBmaXhlcyB0aGUgbG9naWMgaW4gY2FuX3JlY2VpdmUoKQorKiBhZGRzIGxvZ2ljIHRvIHJlY2VpdmUoKSBhcyBhIHNhbml0eSBjaGVjaworKiBtb3ZlcyB0aGUgZmx1c2goKSBjYWxscyB0byB0aGUgY29ycmVjdCBwbGFjZXMgd2hlcmUgZGF0YSBpcyByZWFkeQorICB0byBiZSByZWNlaXZlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW2Rpc2N1c3Npb24gaW4gcHJvZ3Jlc3Mgb24gbWFpbGluZyBsaXN0XQorUlAgMjAxNS85LzcKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMTg1LDcgKzE4NSw2IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV9yZWxlYXNlX3BhY2tldChzbWMKKyAgICAgcy0+YWxsb2NhdGVkICY9IH4oMSA8PCBwYWNrZXQpOworICAgICBpZiAocy0+dHhfYWxsb2MgPT0gMHg4MCkKKyAgICAgICAgIHNtYzkxYzExMV90eF9hbGxvYyhzKTsKKy0gICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyB9CisgCisgLyogRmx1c2ggdGhlIFRYIEZJRk8uICAqLworQEAgLTIzNyw5ICsyMzYsMTEgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX2RvX3R4KHNtYzkxYzExMV9zdAorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAjZW5kaWYKKy0gICAgICAgIGlmIChzLT5jdHIgJiBDVFJfQVVUT19SRUxFQVNFKQorKyAgICAgICAgaWYgKHMtPmN0ciAmIENUUl9BVVRPX1JFTEVBU0UpIHsKKyAgICAgICAgICAgICAvKiBSYWNlPyAgKi8KKyAgICAgICAgICAgICBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQocywgcGFja2V0bnVtKTsKKysgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworKyAgICAgICAgfQorICAgICAgICAgZWxzZSBpZiAocy0+dHhfZmlmb19kb25lX2xlbiA8IE5VTV9QQUNLRVRTKQorICAgICAgICAgICAgIHMtPnR4X2ZpZm9fZG9uZVtzLT50eF9maWZvX2RvbmVfbGVuKytdID0gcGFja2V0bnVtOworICAgICAgICAgcWVtdV9zZW5kX3BhY2tldChxZW11X2dldF9xdWV1ZShzLT5uaWMpLCBwLCBsZW4pOworQEAgLTM3OSw5ICszODAsMTEgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3dyaXRlYih2b2lkICpvcGFxdQorICAgICAgICAgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHMtPnJ4X2ZpZm9bMF0pOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9wb3BfcnhfZmlmbyhzKTsKKysgICAgICAgICAgICAgICAgcWVtdV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhxZW11X2dldF9xdWV1ZShzLT5uaWMpKTsKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgY2FzZSA1OiAvKiBSZWxlYXNlLiAgKi8KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3JlbGVhc2VfcGFja2V0KHMsIHMtPnBhY2tldF9udW0pOworKyAgICAgICAgICAgICAgICBxZW11X2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHFlbXVfZ2V0X3F1ZXVlKHMtPm5pYykpOworICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIDY6IC8qIEFkZCB0byBUWCBGSUZPLiAgKi8KKyAgICAgICAgICAgICAgICAgc21jOTFjMTExX3F1ZXVlX3R4KHMsIHMtPnBhY2tldF9udW0pOworQEAgLTY0Miw3ICs2NDIsNyBAQCBzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShOZXRDbGllCisgCisgICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpCisgICAgICAgICByZXR1cm4gMTsKKy0gICAgaWYgKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKQorKyAgICBpZiAoKHMtPmFsbG9jYXRlZCA9PSAoMSA8PCBOVU1fUEFDS0VUUykgLSAxKSB8fCAocy0+cnhfZmlmb19sZW4gPT0gTlVNX1BBQ0tFVFMpKQorICAgICAgICAgcmV0dXJuIDA7CisgICAgIHJldHVybiAxOworIH0KK0BAIC02NzEsNiArNjcxLDggQEAgc3RhdGljIHNzaXplX3Qgc21jOTFjMTExX3JlY2VpdmUoTmV0Q2xpZQorICAgICAvKiBUT0RPOiBGbGFnIG92ZXJydW4gYW5kIHJlY2VpdmUgZXJyb3JzLiAgKi8KKyAgICAgaWYgKHBhY2tldHNpemUgPiAyMDQ4KQorICAgICAgICAgcmV0dXJuIC0xOworKyAgICBpZiAgKHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKQorKyAgICAgICAgcmV0dXJuIC0xOyAgICAKKyAgICAgcGFja2V0bnVtID0gc21jOTFjMTExX2FsbG9jYXRlX3BhY2tldChzKTsKKyAgICAgaWYgKHBhY2tldG51bSA9PSAweDgwKQorICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4MS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMjIzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDEucGF0Y2gKQEAgLTAsMCArMSw4NSBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorU3ViamVjdDogW1JGVCBQQVRDSCB2MSAxLzNdIG5ldDogc21jOTFjMTExOiBndWFyZCBmbHVzaF9xdWV1ZWRfcGFja2V0cygpIG9uCisgY2FuX3J4KCkKK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMjE6MjM6NDMgLTA3MDAKKworQ2hlY2sgdGhhdCB0aGUgY29yZSBjYW4gb25jZSBhZ2FpbiByZWNlaXZlIHBhY2tldHMgYmVmb3JlIGFza2luZyB0aGUKK25ldCBsYXllciB0byBkbyBhIGZsdXNoLiBUaGlzIHdpbGwgbWFrZSBpdCBtb3JlIGNvbnZlbmllbnQgdG8gZmx1c2gKK3BhY2tldHMgd2hlbiBhZGRpbmcgbmV3IGNvbmRpdGlvbnMgdG8gY2FuX3JlY2VpdmUuCisKK0FkZCBtaXNzaW5nIGlmIGJyYWNlcyB3aGlsZSBtb3ZpbmcgdGhlIGNhbl9yZWNlaXZlKCkgY29yZSBjb2RlLgorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCistLS0KKworIGh3L25ldC9zbWM5MWMxMTEuYyB8IDMwICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitJbmRleDogcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxZW11LTIuNC4wLm9yaWcvaHcvbmV0L3NtYzkxYzExMS5jCisrKysgcWVtdS0yLjQuMC9ody9uZXQvc21jOTFjMTExLmMKK0BAIC0xMjQsNiArMTI0LDI0IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV91cGRhdGUoc21jOTFjMTExX3MKKyAgICAgcWVtdV9zZXRfaXJxKHMtPmlycSwgbGV2ZWwpOworIH0KKyAKKytzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzbWM5MWMxMTFfc3RhdGUgKnMpCisreworKyAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKSB7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKyAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEpIHsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW5saW5lIHZvaWQgc21jOTFjMTExX2ZsdXNoX3F1ZXVlZF9wYWNrZXRzKHNtYzkxYzExMV9zdGF0ZSAqcykKKyt7CisrICAgIGlmIChzbWM5MWMxMTFfY2FuX3JlY2VpdmUocykpIHsKKysgICAgICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgIH0KKyt9CisrCisgLyogVHJ5IHRvIGFsbG9jYXRlIGEgcGFja2V0LiAgUmV0dXJucyAweDgwIG9uIGZhaWx1cmUuICAqLworIHN0YXRpYyBpbnQgc21jOTFjMTExX2FsbG9jYXRlX3BhY2tldChzbWM5MWMxMTFfc3RhdGUgKnMpCisgeworQEAgLTE4NSw3ICsyMDMsNyBAQCBzdGF0aWMgdm9pZCBzbWM5MWMxMTFfcmVsZWFzZV9wYWNrZXQoc21jCisgICAgIHMtPmFsbG9jYXRlZCAmPSB+KDEgPDwgcGFja2V0KTsKKyAgICAgaWYgKHMtPnR4X2FsbG9jID09IDB4ODApCisgICAgICAgICBzbWM5MWMxMTFfdHhfYWxsb2Mocyk7CistICAgIHFlbXVfZmx1c2hfcXVldWVkX3BhY2tldHMocWVtdV9nZXRfcXVldWUocy0+bmljKSk7CisrICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyB9CisgCisgLyogRmx1c2ggdGhlIFRYIEZJRk8uICAqLworQEAgLTYzNiwxNSArNjU0LDExIEBAIHN0YXRpYyB1aW50MzJfdCBzbWM5MWMxMTFfcmVhZGwodm9pZCAqb3AKKyAgICAgcmV0dXJuIHZhbDsKKyB9CisgCistc3RhdGljIGludCBzbWM5MWMxMTFfY2FuX3JlY2VpdmUoTmV0Q2xpZW50U3RhdGUgKm5jKQorK3N0YXRpYyBpbnQgc21jOTFjMTExX2Nhbl9yZWNlaXZlX25jKE5ldENsaWVudFN0YXRlICpuYykKKyB7CisgICAgIHNtYzkxYzExMV9zdGF0ZSAqcyA9IHFlbXVfZ2V0X25pY19vcGFxdWUobmMpOworIAorLSAgICBpZiAoKHMtPnJjciAmIFJDUl9SWEVOKSA9PSAwIHx8IChzLT5yY3IgJiBSQ1JfU09GVF9SU1QpKQorLSAgICAgICAgcmV0dXJuIDE7CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkKKy0gICAgICAgIHJldHVybiAwOworLSAgICByZXR1cm4gMTsKKysgICAgcmV0dXJuIHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzKTsKKyB9CisgCisgc3RhdGljIHNzaXplX3Qgc21jOTFjMTExX3JlY2VpdmUoTmV0Q2xpZW50U3RhdGUgKm5jLCBjb25zdCB1aW50OF90ICpidWYsIHNpemVfdCBzaXplKQorQEAgLTczOSw3ICs3NTMsNyBAQCBzdGF0aWMgY29uc3QgTWVtb3J5UmVnaW9uT3BzIHNtYzkxYzExMV9tCisgc3RhdGljIE5ldENsaWVudEluZm8gbmV0X3NtYzkxYzExMV9pbmZvID0geworICAgICAudHlwZSA9IE5FVF9DTElFTlRfT1BUSU9OU19LSU5EX05JQywKKyAgICAgLnNpemUgPSBzaXplb2YoTklDU3RhdGUpLAorLSAgICAuY2FuX3JlY2VpdmUgPSBzbWM5MWMxMTFfY2FuX3JlY2VpdmUsCisrICAgIC5jYW5fcmVjZWl2ZSA9IHNtYzkxYzExMV9jYW5fcmVjZWl2ZV9uYywKKyAgICAgLnJlY2VpdmUgPSBzbWM5MWMxMTFfcmVjZWl2ZSwKKyB9OworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4YWVkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvc21jOTFjMTExX2ZpeDIucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlcGV0ZXJAZ21haWwuY29tPgorWC1Hb29nbGUtT3JpZ2luYWwtRnJvbTogUGV0ZXIgQ3Jvc3Rod2FpdGUgPGNyb3N0aHdhaXRlLnBldGVyQGdtYWlsLmNvbT4KK1RvOiBxZW11LWRldmVsQG5vbmdudS5vcmcKK0NjOiBwZXRlci5tYXlkZWxsQGxpbmFyby5vcmcsIHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmcKK1N1YmplY3Q6IFtSRlQgUEFUQ0ggdjEgMi8zXSBuZXQ6IHNtYzkxYzExMTogZ2F0ZSBjYW5fcmVjZWl2ZSgpIG9uIHJ4IEZJRk8KKyBoYXZpbmcgYSBzbG90CitEYXRlOiBUaHUsIDEwIFNlcCAyMDE1IDIxOjIzOjU3IC0wNzAwCisKK1JldHVybiBmYWxzZSBmcm9tIGNhbl9yZWNlaXZlKCkgd2hlbiB0aGUgRklGTyBkb2Vzbid0IGhhdmUgYSBmcmVlIFJYCitzbG90LiBUaGlzIGZpeGVzIGEgYnVnIGluIHRoZSBjdXJyZW50IGNvZGUgd2hlcmUgdGhlIGFsbG9jYXRlZCBidWZmZXIKK2lzIGZyZWVkIGJlZm9yZSB0aGUgZmlmbyBwb3AsIHRyaWdnZXJpbmcgYSBwcmVtYXR1cmUgZmx1c2ggb2YgcXVldWVkIFJYCitwYWNrZXRzLiBJdCBhbHNvIHdpbGwgaGFuZGxlIGEgY29ybmVyIGNhc2UsIHdoZXJlIHRoZSBndWVzdCBtYW51YWxseQorZnJlZXMgdGhlIGFsbG9jYXRlZCBidWZmZXIgYmVmb3JlIHBvcHBpbmcgdGhlIHJ4IEZJRk8gKGhlbmNlIGl0IGlzIG5vdAorZW5vdWdoIHRvIGp1c3QgZGVsYXkgdGhlIGZsdXNoX3F1ZXVlZF9wYWNrZXRzKCkpLgorCitSZXBvcnRlZC1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi40LjAub3JpZy9ody9uZXQvc21jOTFjMTExLmMKKysrKyBxZW11LTIuNC4wL2h3L25ldC9zbWM5MWMxMTEuYworQEAgLTEyOSw3ICsxMjksOCBAQCBzdGF0aWMgaW50IHNtYzkxYzExMV9jYW5fcmVjZWl2ZShzbWM5MWMxCisgICAgIGlmICgocy0+cmNyICYgUkNSX1JYRU4pID09IDAgfHwgKHMtPnJjciAmIFJDUl9TT0ZUX1JTVCkpIHsKKyAgICAgICAgIHJldHVybiAxOworICAgICB9CistICAgIGlmIChzLT5hbGxvY2F0ZWQgPT0gKDEgPDwgTlVNX1BBQ0tFVFMpIC0gMSkgeworKyAgICBpZiAocy0+YWxsb2NhdGVkID09ICgxIDw8IE5VTV9QQUNLRVRTKSAtIDEgfHwKKysgICAgICAgIHMtPnJ4X2ZpZm9fbGVuID09IE5VTV9QQUNLRVRTKSB7CisgICAgICAgICByZXR1cm4gMDsKKyAgICAgfQorICAgICByZXR1cm4gMTsKK0BAIC0xODIsNiArMTgzLDcgQEAgc3RhdGljIHZvaWQgc21jOTFjMTExX3BvcF9yeF9maWZvKHNtYzkxYworICAgICB9IGVsc2UgeworICAgICAgICAgcy0+aW50X2xldmVsICY9IH5JTlRfUkNWOworICAgICB9CisrICAgIHNtYzkxYzExMV9mbHVzaF9xdWV1ZWRfcGFja2V0cyhzKTsKKyAgICAgc21jOTFjMTExX3VwZGF0ZShzKTsKKyB9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3NtYzkxYzExMV9maXgzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg2NWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdS9zbWM5MWMxMTFfZml4My5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tOiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGVwZXRlckBnbWFpbC5jb20+CitUbzogcWVtdS1kZXZlbEBub25nbnUub3JnCitDYzogcGV0ZXIubWF5ZGVsbEBsaW5hcm8ub3JnLCByaWNoYXJkLnB1cmRpZUBsaW51eGZvdW5kYXRpb24ub3JnCitTdWJqZWN0OiBbUkZUIFBBVENIIHYxIDMvM10gbmV0OiBzbWM5MWMxMTE6IGZsdXNoIHBhY2tldHMgb24gUkNSIHJlZ2lzdGVyCisgY2hhbmdlcworRGF0ZTogVGh1LCAxMCBTZXAgMjAxNSAyMToyNDoxMiAtMDcwMAorCitUaGUgU09GVF9SU1Qgb3IgUlhFTiBpbiB0aGUgY29udHJvbCByZWdpc3RlciBjYW4gYmUgdXNlZCBhcyBhIGNvbmRpdGlvbgordG8gdW5ibG9jayB0aGUgbmV0IGxheWVyIHZpYSBjYW5fcmVjZWl2ZSgpLiBTbyBjaGVjayBmb3IgcG9zc2libGUKK2ZsdXNoZXMgb24gUkNSIGNoYW5nZXMuIFRoaXMgd2lsbCBkcm9wIGFsbCBwZW5kaW5nIHBhY2tldHMgb24gc29mdAorcmVzZXQgb3IgZGlzYWJsZSB3aGljaCBpcyB0aGUgZnVuY3Rpb25hbCBpbnRlbnQgb2YgdGhlIGNhbl9yZWNlaXZlKCkKK2xvZ2ljLgorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBDcm9zdGh3YWl0ZSA8Y3Jvc3Rod2FpdGUucGV0ZXJAZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorLS0tCisKKyBody9uZXQvc21jOTFjMTExLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworSW5kZXg6IHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcWVtdS0yLjQuMC5vcmlnL2h3L25ldC9zbWM5MWMxMTEuYworKysrIHFlbXUtMi40LjAvaHcvbmV0L3NtYzkxYzExMS5jCitAQCAtMzMxLDYgKzMzMSw3IEBAIHN0YXRpYyB2b2lkIHNtYzkxYzExMV93cml0ZWIodm9pZCAqb3BhcXUKKyAgICAgICAgICAgICBpZiAocy0+cmNyICYgUkNSX1NPRlRfUlNUKSB7CisgICAgICAgICAgICAgICAgIHNtYzkxYzExMV9yZXNldChERVZJQ0UocykpOworICAgICAgICAgICAgIH0KKysgICAgICAgICAgICBzbWM5MWMxMTFfZmx1c2hfcXVldWVkX3BhY2tldHMocyk7CisgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgY2FzZSAxMDogY2FzZSAxMTogLyogUlBDUiAqLworICAgICAgICAgICAgIC8qIElnbm9yZWQgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXUvd2Fjb20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3dhY29tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMDZhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11L3dhY29tLnBhdGNoCkBAIC0wLDAgKzEsMTMwIEBACitUaGUgVVNCIHdhY29tIGRldmljZSBpcyBtaXNzaW5nIGEgSElEIGRlc2NyaXB0b3Igd2hpY2ggY2F1c2VzIGl0Cit0byBmYWlsIHRvIG9wZXJhdGUgd2l0aCByZWNlbnQga2VybmVscyAoZS5nLiAzLjE3KS4KKworVGhpcyBwYXRjaCBhZGRzIGEgSElEIGRlc3JpcHRvciB0byB0aGUgZGV2aWNlLCBiYXNlZCB1cG9uIG9uZSBmcm9tIAorcmVhbCB3Y29tIGRldmljZS4KKworU2lnbmVkLW9mZi1ieTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisyMDE0LzExLzI3CisKK0luZGV4OiBxZW11LTIuMS4wL2h3L3VzYi9kZXYtd2Fjb20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHFlbXUtMi4xLjAub3JpZy9ody91c2IvZGV2LXdhY29tLmMJMjAxNC0wOC0wMSAxNToxMjoxNy4wMDAwMDAwMDAgKzAxMDAKKysrKyBxZW11LTIuMS4wL2h3L3VzYi9kZXYtd2Fjb20uYwkyMDE0LTEwLTEyIDEyOjEzOjMwLjU0MDMwNjA0MiArMDEwMAorQEAgLTY4LDYgKzY4LDg5IEBACisgICAgIFtTVFJfU0VSSUFMTlVNQkVSXSAgICAgPSAiMSIsCisgfTsKKyAKKytzdGF0aWMgY29uc3QgdWludDhfdCBxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3JbXSA9IHsKKysgICAgMHgwNSwgMHgwMSwJCS8qIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgwMiwJCS8qIFVzYWdlIChNb3VzZSkgKi8KKysgICAgMHhhMSwgMHgwMSwJCS8qIENvbGxlY3Rpb24gKEFwcGxpY2F0aW9uKSAqLworKyAgICAweDg1LCAweDAxLAkJLyogICBSZXBvcnQgSUQgKDEpICovIAorKyAgICAweDA5LCAweDAxLAkJLyogICBVc2FnZSAoUG9pbnRlcikgKi8KKysgICAgMHhhMSwgMHgwMCwJCS8qICAgQ29sbGVjdGlvbiAoUGh5c2ljYWwpICovCisrICAgIDB4MDUsIDB4MDksCQkvKiAgICAgVXNhZ2UgUGFnZSAoQnV0dG9uKSAqLworKyAgICAweDE5LCAweDAxLAkJLyogICAgIFVzYWdlIE1pbmltdW0gKDEpICovCisrICAgIDB4MjksIDB4MDUsCQkvKiAgICAgVXNhZ2UgTWF4aW11bSAoNSkgKi8KKysgICAgMHgxNSwgMHgwMCwJCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjUsIDB4MDEsCQkvKiAgICAgTG9naWNhbCBNYXhpbXVtICgxKSAqLworKyAgICAweDk1LCAweDA1LAkJLyogICAgIFJlcG9ydCBDb3VudCAoNSkgKi8KKysgICAgMHg3NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgU2l6ZSAoMSkgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDk1LCAweDAxLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHg3NSwgMHgwMywJCS8qICAgICBSZXBvcnQgU2l6ZSAoMykgKi8KKysgICAgMHg4MSwgMHgwMSwJCS8qICAgICBJbnB1dCAoQ29uc3RhbnQpICovCisrICAgIDB4MDUsIDB4MDEsCQkvKiAgICAgVXNhZ2UgUGFnZSAoR2VuZXJpYyBEZXNrdG9wKSAqLworKyAgICAweDA5LCAweDMwLAkJLyogICAgIFVzYWdlIChYKSAqLworKyAgICAweDA5LCAweDMxLAkJLyogICAgIFVzYWdlIChZKSAqLworKyAgICAweDE1LCAweDgxLAkJLyogICAgIExvZ2ljYWwgTWluaW11bSAoLTEyNykgKi8KKysgICAgMHgyNSwgMHg3ZiwJCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDEyNykgKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwMiwJCS8qICAgICBSZXBvcnQgQ291bnQgKDIpICovCisrICAgIDB4ODEsIDB4MDYsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBSZWxhdGl2ZSkgKi8KKysgICAgMHhjMCwJCS8qICAgRW5kIENvbGxlY3Rpb24gKi8KKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDUsIDB4MGQsCQkvKiBVc2FnZSBQYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4MDksIDB4MDEsCQkvKiBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDIsCQkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4YTEsIDB4MDAsCQkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLCAgIC8qICAgVXNhZ2UgUGFnZSAoVmVuZG9yIDB4ZmYwMCkgKi8KKysgICAgMHgwOSwgMHgwMSwgCS8qICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgxNSwgMHgwMCwgCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsCS8qICAgICBMb2dpY2FsIE1heGltdW0gKDI1NSkgKi8KKysgICAgMHg3NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgU2l6ZSAoOCkgKi8KKysgICAgMHg5NSwgMHgwOCwJCS8qICAgICBSZXBvcnQgQ291bnQgKDgpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHhjMCwgCQkvKiAgIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDksIDB4MDEsCQkvKiAgIFVzYWdlIChEaWdpdGl6ZXIpICovCisrICAgIDB4ODUsIDB4MDIsIAkvKiAgIFJlcG9ydCBJRCAoMikgKi8gCisrICAgIDB4OTUsIDB4MDEsCQkvKiAgIFJlcG9ydCBDb3VudCAoMSkgKi8KKysgICAgMHhiMSwgMHgwMiwJCS8qICAgRkVBVFVSRSAoMikgKi8KKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrICAgIDB4MDYsIDB4MDAsIDB4ZmYsCS8qIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsCQkvKiBVc2FnZSAoRGlnaXRpemVyKSAqLworKyAgICAweGExLCAweDAxLAkJLyogQ29sbGVjdGlvbiAoQXBwbGljYXRpb24pICovCisrICAgIDB4ODUsIDB4MDIsICAgCS8qICAgUmVwb3J0IElEICgyKSAqLyAKKysgICAgMHgwNSwgMHgwZCwJCS8qICAgVXNhZ2UgUGFnZSAoRGlnaXRpemVyKSAgKi8KKysgICAgMHgwOSwgMHgyMiwgCS8qICAgVXNhZ2UgKEZpbmdlcikgKi8KKysgICAgMHhhMSwgMHgwMCwgIAkvKiAgIENvbGxlY3Rpb24gKFBoeXNpY2FsKSAqLworKyAgICAweDA2LCAweDAwLCAweGZmLAkvKiAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsCQkvKiAgICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgxNSwgMHgwMCwgCS8qICAgICBMb2dpY2FsIE1pbmltdW0gKDApICovCisrICAgIDB4MjYsIDB4ZmYsIDB4MDAsICAJLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDA4LAkJLyogICAgIFJlcG9ydCBTaXplICg4KSAqLworKyAgICAweDk1LCAweDAyLAkJLyogICAgIFJlcG9ydCBDb3VudCAoMikgKi8KKysgICAgMHg4MSwgMHgwMiwgCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweDA1LCAweDAxLAkJLyogICAgIFVzYWdlIFBhZ2UgKEdlbmVyaWMgRGVza3RvcCkgKi8KKysgICAgMHgwOSwgMHgzMCwJCS8qICAgICBVc2FnZSAoWCkgKi8KKysgICAgMHgzNSwgMHgwMCwgCS8qICAgICBQaHlzaWNhbCBNaW5pbXVtICovCisrICAgIDB4NDYsIDB4ZTAsIDB4MmUsCS8qICAgICBQaHlzaWNhbCBNYXhpbXVtICovCisrICAgIDB4MjYsIDB4ZTAsIDB4MDEsICAgLyogICAgIExvZ2ljYWwgTWF4aW11bSAqLworKyAgICAweDc1LCAweDEwLAkJLyogICAgIFJlcG9ydCBTaXplICgxNikgKi8KKysgICAgMHg5NSwgMHgwMSwJCS8qICAgICBSZXBvcnQgQ291bnQgKDEpICovCisrICAgIDB4ODEsIDB4MDIsCQkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwOSwgMHgzMSwJCS8qICAgICBVc2FnZSAoWSkgKi8KKysgICAgMHg0NiwgMHg0MCwgMHgxZiwgCS8qICAgICBQaHlzaWNhbCBNYXhpbXVtICovCisrICAgIDB4MjYsIDB4NDAsIDB4MDEsIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4ODEsIDB4MDIsIAkvKiAgICAgSW5wdXQgKERhdGEsIFZhcmlhYmxlLCBBYnNvbHV0ZSkgKi8KKysgICAgMHgwNiwgMHgwMCwgMHhmZiwJLyogICAgIFVzYWdlIFBhZ2UgKFZlbmRvciAweGZmMDApICovCisrICAgIDB4MDksIDB4MDEsIAkvKiAgICAgVXNhZ2UgKERpZ2l0aXplcikgKi8KKysgICAgMHgyNiwgMHhmZiwgMHgwMCwgIAkvKiAgICAgTG9naWNhbCBNYXhpbXVtICovCisrICAgIDB4NzUsIDB4MDgsCQkvKiAgICAgUmVwb3J0IFNpemUgKDgpICovCisrICAgIDB4OTUsIDB4MGQsCQkvKiAgICAgUmVwb3J0IENvdW50ICgxMykgKi8KKysgICAgMHg4MSwgMHgwMiwJCS8qICAgICBJbnB1dCAoRGF0YSwgVmFyaWFibGUsIEFic29sdXRlKSAqLworKyAgICAweGMwLAkJLyogICBFbmQgQ29sbGVjdGlvbiAqLyAKKysgICAgMHhjMCwJCS8qIEVuZCBDb2xsZWN0aW9uICovCisrfTsKKysKKysKKyBzdGF0aWMgY29uc3QgVVNCRGVzY0lmYWNlIGRlc2NfaWZhY2Vfd2Fjb20gPSB7CisgICAgIC5iSW50ZXJmYWNlTnVtYmVyICAgICAgICAgICAgICA9IDAsCisgICAgIC5iTnVtRW5kcG9pbnRzICAgICAgICAgICAgICAgICA9IDEsCitAQCAtODUsNyArMTY4LDcgQEAKKyAgICAgICAgICAgICAgICAgMHgwMCwgICAgICAgICAgLyogIHU4ICBjb3VudHJ5X2NvZGUgKi8KKyAgICAgICAgICAgICAgICAgMHgwMSwgICAgICAgICAgLyogIHU4ICBudW1fZGVzY3JpcHRvcnMgKi8KKyAgICAgICAgICAgICAgICAgMHgyMiwgICAgICAgICAgLyogIHU4ICB0eXBlOiBSZXBvcnQgKi8KKy0gICAgICAgICAgICAgICAgMHg2ZSwgMCwgICAgICAgLyogIHUxNiBsZW4gKi8KKysgICAgICAgICAgICAgICAgc2l6ZW9mKHFlbXVfdGFibGV0X2hpZF9yZXBvcnRfZGVzY3JpcHRvciksIDAsIC8qICB1MTYgbGVuICovCisgICAgICAgICAgICAgfSwKKyAgICAgICAgIH0sCisgICAgIH0sCitAQCAtMjY1LDYgKzM1MCwxNSBAQAorICAgICB9CisgCisgICAgIHN3aXRjaCAocmVxdWVzdCkgeworKyAgICBjYXNlIEludGVyZmFjZVJlcXVlc3QgfCBVU0JfUkVRX0dFVF9ERVNDUklQVE9SOgorKyAgICAgICAgc3dpdGNoICh2YWx1ZSA+PiA4KSB7CisrICAgICAgICBjYXNlIDB4MjI6CisrICAgICAgICAgICAgICAgIG1lbWNweShkYXRhLCBxZW11X3RhYmxldF9oaWRfcmVwb3J0X2Rlc2NyaXB0b3IsCisrICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKSk7CisrICAgICAgICAgICAgICAgIHAtPmFjdHVhbF9sZW5ndGggPSBzaXplb2YocWVtdV90YWJsZXRfaGlkX3JlcG9ydF9kZXNjcmlwdG9yKTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIGJyZWFrOworICAgICBjYXNlIFdBQ09NX1NFVF9SRVBPUlQ6CisgICAgICAgICBpZiAocy0+bW91c2VfZ3JhYmJlZCkgeworICAgICAgICAgICAgIHFlbXVfcmVtb3ZlX21vdXNlX2V2ZW50X2hhbmRsZXIocy0+ZWhfZW50cnkpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3FlbXUvcWVtdV8yLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi40LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTliMTc4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXVfMi40LjAuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSBxZW11LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00NDFjMjhkMmNmODZlMTVhMzdmYTQ3ZTE1YTcyZmJhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjtlbmRsaW5lPTI0O21kNT1jMDRkZWY3YWUzODg1MGU3ZDNlZjU0ODU4ODE1OTkxMyIKKworU1JDX1VSSSArPSAiZmlsZTovL2NvbmZpZ3VyZS1maXgtRGFyd2luLXRhcmdldC1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3FlbXUtZW5sYXJnZS1lbnYtZW50cnktc2l6ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vUWVtdS1Bcm0tdmVyc2F0aWxlcGItQWRkLW1lbW9yeS1zaXplLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9zbWM5MWMxMTFfZml4MS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc21jOTFjMTExX2ZpeDIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3NtYzkxYzExMV9maXgzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9wcmVwZW5kID0gImh0dHA6Ly93aWtpLnFlbXUtcHJvamVjdC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIxODZlZTgxOTQxNDBhNDg0YTQ1NWY4ZTNjNzQ1ODlmNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmIwYjk5MWJiY2M1NDA2NjNhMDE5ZTFlOGM0ZjcxNDA1M2I2OTFkZGEzMmM5YjllZTgwYjI1ZjM2N2U2NjIwIgorCitDT01QQVRJQkxFX0hPU1RfY2xhc3MtdGFyZ2V0X21pcHM2NCA9ICJudWxsIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAjIFByZXZlbnQgUUEgd2FybmluZ3MgYWJvdXQgaW5zdGFsbGVkICR7bG9jYWxzdGF0ZWRpcn0vcnVuCisgICAgaWYgWyAtZCAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW4gXTsgdGhlbiBybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9ydW47IGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcWVtdS9xZW11d3JhcHBlci1jcm9zc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y0YzZkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xZW11L3FlbXV3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtMCwwICsxLDUwIEBACitTVU1NQVJZID0gIlFFTVUgd3JhcHBlciBzY3JpcHQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK2luaGVyaXQgcWVtdQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCisJZWNobyAiIyEvYmluL3NoIiA+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCisJcWVtdV9iaW5hcnk9JHtAcWVtdV90YXJnZXRfYmluYXJ5KGQpfQorCXFlbXVfb3B0aW9ucz0nJHtRRU1VX09QVElPTlN9JworCWVjaG8gIiRxZW11X2JpbmFyeSAkcWVtdV9vcHRpb25zIFwiXCRAXCIiID4+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyCisJZmFsbGJhY2tfcWVtdV9iaW49CisJY2FzZSAkcWVtdV9iaW5hcnkgaW4KKwkJInFlbXUtaTM4NiIpCisJCQlmYWxsYmFja19xZW11X2Jpbj1xZW11LXg4Nl82NAorCQkJOzsKKwkJInFlbXUteDg2XzY0IikKKwkJCWZhbGxiYWNrX3FlbXVfYmluPXFlbXUtaTM4NgorCQkJOzsKKwkJKikKKwkJCTs7CisJZXNhYworCisJaWYgWyAtbiAiJGZhbGxiYWNrX3FlbXVfYmluIiBdOyB0aGVuCisKKwkJY2F0ID4+ICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9L3FlbXV3cmFwcGVyIDw8IEVPRgorcmM9XCQ/CitpZiBbIFwkcmMgPSAyNTUgXTsgdGhlbgorCSRmYWxsYmFja19xZW11X2JpbiAiXCRAIgorCXJjPVwkPworZmkKK2V4aXQgXCRyYworRU9GCisKKwlmaQorCisJY2htb2QgK3ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vcWVtdXdyYXBwZXIKK30KKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJxZW11d3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK3FlbXV3cmFwcGVyX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30gJHtTWVNST09UX0RFU1RESVJ9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorfQorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQtbmF0aXZlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzRiMGEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSwxOCBAQAorUkRFUEVORFNfJHtQTn0gPSAiZGlmZnN0YXQtbmF0aXZlIHBhdGNoLW5hdGl2ZSBiemlwMi1uYXRpdmUgdXRpbC1saW51eC1uYXRpdmUiCisKK0lOSElCSVRfQVVUT1RPT0xTX0RFUFMgPSAiMSIKKworaW5oZXJpdCBuYXRpdmUKKworUEFUQ0hUT09MID0gInBhdGNoIgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ubHMiCisKK2RvX2NvbmZpZ3VyZSAoKSB7CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBEdW1teSBxdWlsdHJjIGZpbGUgZm9yIHBhdGNoLmJiY2xhc3MKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L3F1aWx0cmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42NC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC1uYXRpdmVfMC42NC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmM3ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LW5hdGl2ZV8wLjY0LmJiCkBAIC0wLDAgKzEsMiBAQAorcmVxdWlyZSBxdWlsdC5pbmMKK3JlcXVpcmUgcXVpbHQtbmF0aXZlLmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0LmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3YjM2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC5pbmMKQEAgLTAsMCArMSw2MiBAQAorU1VNTUFSWSA9ICJUb29sIGZvciB3b3JraW5nIHdpdGggc2VyaWVzIG9mIHBhdGNoZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2F2YW5uYWgubm9uZ251Lm9yZy9wcm9qZWN0cy9xdWlsdC8iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitTUkNfVVJJID0gIiR7U0FWQU5OQUhfR05VX01JUlJPUn0vcXVpbHQvcXVpbHQtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgZmlsZTovL2luc3RhbGwucGF0Y2ggXAorICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgZmlsZTovL01ha2VmaWxlIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImZjMDMxMGRiNTg2OGEwODczZDYwMmQ0MzMyYTc2ZDQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM0YmZkMzI4MjIxNGEyODhlOGQzZTkyMWFlNGQ1MmU3M2UyNGM0ZmVhZDcyYjU0NDY3NTJhZGVlOTlhN2FmZmQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdAorCitFWFRSQV9PRUNPTkZfZGFyd2luICs9ICItLXdpdGhvdXQtZGF0ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtZ2V0b3B0IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICIKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworUEFDS0FHRVMgKz0gImd1YXJkcyBndWFyZHMtZG9jIgorRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke2RhdGFkaXJ9L3F1aWx0IFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9xdWlsdCAke2xpYmRpcn0vcXVpbHQiCitGSUxFU19ndWFyZHMgPSAiJHtiaW5kaXJ9L2d1YXJkcyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke21hbmRpcn0vbWFuMS9xdWlsdC4xICR7ZG9jZGlyfS8ke0JQTn0iCitGSUxFU19ndWFyZHMtZG9jID0gIiR7bWFuZGlyfS9tYW4xL2d1YXJkcy4xIgorCitSREVQRU5EU18ke1BOfSA9ICJiYXNoIgorCitFWFRSQV9PRV9NQUtFX0FSR1NfZGFyd2luID89ICIiCitFWFRSQV9PRV9NQUtFX0FSR1MgPz0gIkJVSUxEX1JPT1Q9JHtEfSIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X3BhdGhfQkFTSD0vYmluL2Jhc2giCisKKyMgcXVpbHQgaWdub3JlcyBERVNURElSCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICR7RVhUUkFfT0VfTUFLRV9BUkdTfSBpbnN0YWxsCisJIyBjbGVhbnVwIHVucGFja2FnZWQgZmlsZXMKKwlybSAtcmYgJHtEfS8ke2RhdGFkaXJ9L2VtYWNzCit9CisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBiaW4vcGF0Y2gtd3JhcHBlciB0ZXN0Ly5kZXBlbmQKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0YXIgLWNmIC0gYmluLyAtLWV4Y2x1ZGUgXCouaW4gfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJdGFyIC1jZiAtIGNvbXBhdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSBxdWlsdC8gLS1leGNsdWRlIFwqLmluIHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgbWFpbC50ZXN0IC0tZXhjbHVkZSBkZWxldGUudGVzdCB8ICggY2QgJHtEfSR7UFRFU1RfUEFUSH0gJiYgdGFyIC14ZiAtICkKKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gIm1ha2UgZmlsZSBzZWQgZ2F3ayBkaWZmdXRpbHMgZmluZHV0aWxzIGVkIHBlcmwgXAorICAgICAgICAgICAgICAgICAgICAgICAgcGVybC1tb2R1bGUtZmlsZWhhbmRsZSBwZXJsLW1vZHVsZS1nZXRvcHQtc3RkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcmwtbW9kdWxlLXBvc2l4IHBlcmwtbW9kdWxlLWZpbGUtdGVtcCBcCisgICAgICAgICAgICAgICAgICAgICAgICBwZXJsLW1vZHVsZS10ZXh0LXBhcnNld29yZHMgcGVybC1tb2R1bGUtb3ZlcmxvYWRpbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzaCB1dGlsLWxpbnV4LWdldG9wdCBcCisgICAgICAgICAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9NYWtlZmlsZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjNhYzhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKK1BBVEggOj0gICAgICAgICAkKENVUkRJUikvYmluOiQoQ1VSRElSKS9jb21wYXQ6JChQQVRIKQorUVVJTFRfRElSIDo9ICAgICQoQ1VSRElSKS9xdWlsdAorUVVJTFRSQyA6PSAgICAgICQoQ1VSRElSKS90ZXN0L3Rlc3QucXVpbHRyYworZXhwb3J0IFFVSUxUX0RJUiBRVUlMVFJDCitDSEVDS19FTlYgOj0gUD1wYXRjaGVzLzsgX1A9Li4vcGF0Y2hlcy87IGV4cG9ydCBQIF9QCistaW5jbHVkZSB0ZXN0Ly5kZXBlbmQKKworY2hlY2stJSA6IHRlc3QvJS50ZXN0CisJQExBTkc9QzsgTENfQUxMPUM7IFwKKwlleHBvcnQgTEFORyBMQ19BTEw7IFwKKwkkKENIRUNLX0VOVik7IFwKKwljZCAkKDxEKTsgXAorCS4vcnVuIC1xICQoPEYpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9hY2xvY2FsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjQ0MjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvYWNsb2NhbC5wYXRjaApAQCAtMCwwICsxLDEyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCB0aGUgYWNsb2NhbC5tNCBhcyBhY2luY2x1ZGUubTQKKworSW5kZXg6IHF1aWx0LTAuNDcvYWNpbmNsdWRlLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgcXVpbHQtMC40Ny9hY2luY2x1ZGUubTQJMjAwNi0xMC0xMCAxNzowNTo1Ni4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsMTE5IEBACisrZG5sIEFsbG93IGNvbmZpZ3VyZSB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgYmluYXJ5CisrZG5sIDE6IEVudmlyb25tZW50IHZhcmlhYmxlCisrZG5sIDI6IGJpbmFyeSBuYW1lCisrZG5sIDM6IG9wdGlvbmFsIGxpc3Qgb2YgYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWVzCisrZG5sIDQ6IG9wdGlvbmFsIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKytBQ19ERUZVTihbUVVJTFRfQ09NUEFUX1BST0dfUEFUSF0sWworKyAgbTRfZGVmaW5lKFtpbnRlcm5hbF8kMl9jbWRdLFtlc3lzY21kKGxzIGNvbXBhdC8kMi5pbiAyPi9kZXYvbnVsbCldKQorKworKyAgQUNfQVJHX1dJVEgoJDIsIEFDX0hFTFBfU1RSSU5HKAorKyAgICBbLS13aXRoLSQyXSwgW25hbWUgb2YgdGhlICQyIGV4ZWN1dGFibGUgdG8gdXNlXQorKyAgICAgICAgICAgICAgICAgbTRfaWYoaW50ZXJuYWxfJDJfY21kLFtdLFtdLFsgKHVzZSAtLXdpdGhvdXQtJDIKKysgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzZSBhbiBpbnRlcm5hbCBtZWNoYW5pc20pXSkpLAorKyAgWworKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiID0geG5vbmU7IHRoZW4KKysgICAgICBBQ19NU0dfRVJST1IoW0ludmFsaWQgY29uZmlndXJlIGFyZ3VtZW50LiAgdXNlIC0td2l0aG91dC0kMl0pCisrICAgIGZpCisrICAgIGlmIHRlc3QgeCIkd2l0aHZhbCIgIT0geG5vOyB0aGVuCisrICAgICAgQUNfTVNHX0NIRUNLSU5HKGZvciAkMikKKysgICAgICAkMT0iJHdpdGh2YWwiCisrICAgICAgaWYgdGVzdCAtZSAiJCQxIjsgdGhlbgorKwlpZiB0ZXN0ICEgLWYgIiQkMSIgLWEgISAtaCAiJCQxIiB8fCB0ZXN0ICEgLXggIiQkMSI7IHRoZW4KKysJICBBQ19NU0dfRVJST1IoWyQkMSBpcyBub3QgYW4gZXhlY3V0YWJsZSBmaWxlXSkKKysJZmkKKysgICAgICBmaQorKyAgICAgIEFDX01TR19SRVNVTFQoWyQkMV0pCisrICAgICAgaWYgdGVzdCAhIC1lICIkJDEiOyB0aGVuCisrICAgICAgICBBQ19NU0dfV0FSTihbJCQxIGRvZXMgbm90IGV4aXN0XSkKKysgICAgICBmaQorKyAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysgICAgZmkKKysgIF0sWworKyAgICBtNF9pZihbJDNdLFtdLFsKKysgICAgICBBQ19QQVRIX1BST0coJDEsJDIsLCRQQVRIOiQ0KQorKyAgICBdLFsKKysgICAgICBBQ19QQVRIX1BST0dTKCQxLCQzLCwkUEFUSDokNCkKKysgICAgICBpZiB0ZXN0IC1uICIkJDEiIC1hICJgZXhwciAiJCQxIiA6ICcuKi9cKFtbXi9dXSpcKSQnYCIgIT0gIiQyIjsgdGhlbgorKwlDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgbTRfaWYoWyQ0XSxbXSxbXSxbCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIjsgdGhlbgorKwlhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisrICAgICAgICBmb3IgZGlyIGluICIkNCI7IGRvCisrICAgICAgICAgIGlmIHRlc3QgImBkaXJuYW1lICQkMWAiID0gIiRkaXIiOyB0aGVuCisrICAgICAgICAgICAgQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKwkgICAgYnJlYWsKKysJICBmaQorKyAgICAgICAgZG9uZQorKwlJRlM9IiRhc19zYXZlX0lGUyIKKysgICAgICBmaQorKyAgICBdKQorKyAgXSkKKysgIGlmIHRlc3QgLXogIiQkMSI7IHRoZW4KKysgICAgbTRfaWYoaW50ZXJuYWxfJDJfY21kLFtdLFsKKysgICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSBzcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiAkMiB3aXRoIHRoZSBvcHRpb24gJy0td2l0aC0kMiddKQorKyAgICBdLFsKKysgICAgICBBQ19NU0dfV0FSTihbVXNpbmcgaW50ZXJuYWwgJDIgbWVjaGFuaXNtLiAgVXNlIG9wdGlvbiAnLS13aXRoLSQyJyB0byBvdmVycmlkZV0pCisrICAgICAgQ09NUEFUX1BST0dSQU1TPSIkQ09NUEFUX1BST0dSQU1TICQyIgorKyAgICAgICQxPSQyCisrICAgICAgSU5URVJOQUxfJDE9MQorKyAgICBdKQorKyAgZmkKKysgIEFDX1NVQlNUKCQxKQorK10pCisrCisrZG5sIEFsbG93IGNvbmZpZ3VyZSB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgYmluYXJ5CisrZG5sIFRoaXMgdmFyaWFudCBpcyBmb3Igb3B0aW9uYWwgYmluYXJpZXMuCisrZG5sIDE6IEVudmlyb25tZW50IHZhcmlhYmxlCisrZG5sIDI6IGJpbmFyeSBuYW1lCisrZG5sIDM6IG9wdGlvbmFsIGxpc3Qgb2YgYWx0ZXJuYXRpdmUgYmluYXJ5IG5hbWVzCisrZG5sIDQ6IG9wdGlvbmFsIGxpc3Qgb2YgYWRkaXRpb25hbCBzZWFyY2ggZGlyZWN0b3JpZXMKKytBQ19ERUZVTihbUVVJTFRfQ09NUEFUX1BST0dfUEFUSF9PUFRdLFsKKysgIEFDX0FSR19XSVRIKCQyLCBBQ19IRUxQX1NUUklORygKKysgICAgWy0td2l0aC0kMl0sIFtuYW1lIG9mIHRoZSAkMiBleGVjdXRhYmxlIHRvIHVzZV0pLAorKyAgWworKyAgICBpZiB0ZXN0IHgiJHdpdGh2YWwiICE9IHhubzsgdGhlbgorKyAgICAgIEFDX01TR19DSEVDS0lORyhmb3IgJDIpCisrICAgICAgJDE9IiR3aXRodmFsIgorKyAgICAgIGlmIHRlc3QgLWUgIiQkMSI7IHRoZW4KKysJaWYgdGVzdCAhIC1mICIkJDEiIC1hICEgLWggIiQkMSIgfHwgdGVzdCAhIC14ICIkJDEiOyB0aGVuCisrCSAgQUNfTVNHX0VSUk9SKFskJDEgaXMgbm90IGFuIGV4ZWN1dGFibGUgZmlsZV0pCisrCWZpCisrICAgICAgZmkKKysgICAgICBBQ19NU0dfUkVTVUxUKFskJDFdKQorKyAgICAgIGlmIHRlc3QgISAtZSAiJCQxIjsgdGhlbgorKyAgICAgICAgQUNfTVNHX1dBUk4oWyQkMSBkb2VzIG5vdCBleGlzdF0pCisrICAgICAgZmkKKysgICAgICBDT01QQVRfU1lNTElOS1M9IiRDT01QQVRfU1lNTElOS1MgJDIiCisrICAgIGZpCisrICBdLFsKKysgICAgbTRfaWYoWyQzXSxbXSxbCisrICAgICAgQUNfUEFUSF9QUk9HKCQxLCQyLCwkUEFUSDokNCkKKysgICAgXSxbCisrICAgICAgQUNfUEFUSF9QUk9HUygkMSwkMywsJFBBVEg6JDQpCisrICAgICAgaWYgdGVzdCAtbiAiJCQxIiAtYSAiYGV4cHIgIiQkMSIgOiAnLiovXChbW14vXV0qXCkkJ2AiICE9ICIkMiI7IHRoZW4KKysJQ09NUEFUX1NZTUxJTktTPSIkQ09NUEFUX1NZTUxJTktTICQyIgorKyAgICAgIGZpCisrICAgIF0pCisrICAgIG00X2lmKFskNF0sW10sW10sWworKyAgICAgIGlmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKysJYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorKyAgICAgICAgZm9yIGRpciBpbiAiJDQiOyBkbworKyAgICAgICAgICBpZiB0ZXN0ICJgZGlybmFtZSAkJDFgIiA9ICIkZGlyIjsgdGhlbgorKyAgICAgICAgICAgIENPTVBBVF9TWU1MSU5LUz0iJENPTVBBVF9TWU1MSU5LUyAkMiIKKysJICAgIGJyZWFrCisrCSAgZmkKKysgICAgICAgIGRvbmUKKysJSUZTPSIkYXNfc2F2ZV9JRlMiCisrICAgICAgZmkKKysgICAgXSkKKysgICAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICAgIEFDX01TR19XQVJOKFskMiBub3QgZm91bmQsIHNvbWUgb3B0aW9uYWwgZnVuY3Rpb25hbGl0aWVzIHdpbGwgYmUgbWlzc2luZ10pCisrICAgIGZpCisrICBdKQorKyAgaWYgdGVzdCAteiAiJCQxIjsgdGhlbgorKyAgICAkMT0kMgorKyAgZmkKKysgIEFDX1NVQlNUKCQxKQorK10pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9nbnVfcGF0Y2hfdGVzdF9maXhfdGFyZ2V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MjE1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvZ251X3BhdGNoX3Rlc3RfZml4X3RhcmdldC5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGhlIHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGNyb3NzIGNvbXBpbGluZy4KKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDAyNmEzNmMuLjhhZjU5MWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI0NSw2ICsyNDUsNyBAQCBmaQorIFFVSUxUX0NPTVBBVF9QUk9HX1BBVEgoRElGRiwgZGlmZikKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKFBBVENILCBwYXRjaCkKKyAKKytpZiB0ZXN0ICJ4JGNyb3NzX2NvbXBpbGluZyIgIT0gInh5ZXMiOyB0aGVuCisgIyBTdW4gZGlmZiBhbmQgb3RoZXJzIHdpbGwgbm90IHdvcmsgYmVjYXVzZSBHTlUgcGF0Y2ggb3B0aW9ucyBhcmUgdXNlZC4KKyBBQ19NU0dfQ0hFQ0tJTkcoW3RoZSB2ZXJzaW9uIG9mICRESUZGXSkKKyBpZiAkRElGRiAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsOyB0aGVuCitAQCAtMjkzLDYgKzI5NCw3IEBAIGN1cnJlbnQgdmVyc2lvbiBvZiBwYXRjaCBmcm9tIGZ0cC5nbnUub3JnLCBvciBpZiB5b3UgYWxyZWFkeSBoYXZlIEdOVSBwYXRjaAorIHRoZW4geW91IGNhbiBzdXBwbHkgaXRzIHBhdGggd2l0aCB0aGUgJy0td2l0aC1wYXRjaD0nIG9wdGlvbi4KKyBdKQorIGZpCisrZmkKKyAKKyBRVUlMVF9DT01QQVRfUFJPR19QQVRIKEZJTkQsIGZpbmQpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYTdhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvaW5zdGFsbC5wYXRjaApAQCAtMCwwICsxLDEzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHF1aWx0LTAuNDcvTWFrZWZpbGUuaW4JMjAwOC0xMi0zMSAxOTowOToxMy4wMDAwMDAwMDAgKzAwMDAKKysrKyBxdWlsdC0wLjQ3L01ha2VmaWxlLmluLm9yaWcJMjAwOC0wOC0yMSAxMzoyMTozMi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMyw3ICsxMyw3IEBACisgbWFuZGlyIDo9CUBtYW5kaXJACisgbG9jYWxlZGlyIDo9CSQoZGF0YWRpcikvbG9jYWxlCisgZW1hY3NkaXIgOj0JJChkYXRhZGlyKS9lbWFjcy9zaXRlLWxpc3AKKy1ldGNkaXIgOj0JJChzdWJzdCAvdXNyL2V0YywvZXRjLCQocHJlZml4KS9ldGMpCisrZXRjZGlyIDo9CUBzeXNjb25mZGlyQAorIAorIElOU1RBTEwgOj0JQElOU1RBTExACisgUE9EMk1BTiA6PQlAUE9EMk1BTkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1OGE5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcXVpbHQvcXVpbHQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK2xuIC1zZiAvYmluL2VkIC91c3IvYmluL2VkCitmb3IgaSBpbiBgbHMgdGVzdC8qLnRlc3QgfGF3ayAtRi4gJ3twcmludCAkMX0nIHxhd2sgLUYvICd7cHJpbnQgJDJ9J2A7IGRvIG1ha2UgY2hlY2stJGk7IGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvIFBBU1M6ICRpLnRlc3Q7IGVsc2UgZWNobyBGQUlMOiAkaS50ZXN0OyBmaTsgZG9uZQorcm0gLWYgL3Vzci9iaW4vZWQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3F1aWx0L3F1aWx0XzAuNjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBmOTAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9xdWlsdC9xdWlsdF8wLjY0LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgcXVpbHQuaW5jCitpbmhlcml0IGdldHRleHQKK1JERVBFTkRTXyR7UE59ICs9ICJwYXRjaCBkaWZmc3RhdCBiemlwMiB1dGlsLWxpbnV4IgorU1JDX1VSSSArPSAiZmlsZTovL2FjbG9jYWwucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dudV9wYXRjaF90ZXN0X2ZpeF90YXJnZXQucGF0Y2ggXAorICAgICAgICAgICAiCisKKyMgZml4IGJ1aWxkLWRpc3RybyBzcGVjaWZpYyBwZXJsIHBhdGggaW4gdGhlIHRhcmdldCBwZXJsIHNjcmlwdHMKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZvciBwZXJsc2NyaXB0IGluICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvcmVtb3ZlLXRyYWlsaW5nLXdzICR7RH0ke2RhdGFkaXJ9L3F1aWx0L3NjcmlwdHMvZGVwZW5kZW5jeS1ncmFwaCAke0R9JHtkYXRhZGlyfS9xdWlsdC9zY3JpcHRzL2VkbWFpbCAke0R9JHtiaW5kaXJ9L2d1YXJkcworCWRvCisJCWlmIFsgLWYgJHBlcmxzY3JpcHQgXTsgdGhlbgorCQkJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHBlcmxzY3JpcHQKKwkJZmkKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS5pbmMgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4ODlmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIk1ha2VmaWxlIGRlYnVnZ2VyIHdoaWNoIGlzIGdudW1ha2UgY29tcGF0aWJsZSIKK0RFU0NSSVBUSU9OID0gInJlbWFrZSBpcyBhIHBhdGNoZWQgYW5kIG1vZGVybml6ZWQgdmVyc2lvbiBvZiBHTlUgbWFrZSBcCit1dGlsaXR5IHRoYXQgYWRkcyBpbXByb3ZlZCBlcnJvciByZXBvcnRpbmcsIHRoZSBhYmlsaXR5IHRvIHRyYWNlIFwKK2V4ZWN1dGlvbiBpbiBhIGNvbXByZWhlbnNpYmxlIHdheSwgYW5kIGEgZGVidWdnZXIuIgorCitIT01FUEFHRSA9ICJodHRwOi8vYmFzaGRiLnNvdXJjZWZvcmdlLm5ldC9yZW1ha2UvIgorU0VDVElPTiA9ICJkZXZlbCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3JvY2t5L3JlbWFrZS5naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworQUxURVJOQVRJVkVfJHtQTn0gPSAibWFrZSIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttYWtlXSA9ICIke2JpbmRpcn0vbWFrZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFttYWtlXSA9ICIke2JpbmRpcn0vcmVtYWtlIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JlbWFrZS9yZW1ha2UvdmVyc2lvbi1yZW1ha2UudGV4aS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2MzI5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3ZlcnNpb24tcmVtYWtlLnRleGkgaXMgbm90IHRoZXJlIGJ1dCBpdCBpcyByZXF1aXJlZCBieSByZW1ha2UudGV4aSwKK2p1c3QgYWRkIGl0IGZvciBnZXR0aW5nIHRoZSAnbWFrZSByZW1ha2UuaW5mbycgd29ya3MuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC0tZ2l0IGEvZG9jL3ZlcnNpb24tcmVtYWtlLnRleGkgYi9kb2MvdmVyc2lvbi1yZW1ha2UudGV4aQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjJhM2I3MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2RvYy92ZXJzaW9uLXJlbWFrZS50ZXhpCitAQCAtMCwwICsxLDQgQEAKKytAc2V0IFVQREFURUQgMTAgSnVuZSAyMDEyCisrQHNldCBVUERBVEVELU1PTlRIIEp1bmUgMjAxMgorK0BzZXQgRURJVElPTiAzLjgyK2RiZy0wLjlnaXQKKytAc2V0IFZFUlNJT04gMy44MitkYmctMC45Z2l0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yZW1ha2UvcmVtYWtlXzQuMStkYmctMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTkxM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcmVtYWtlL3JlbWFrZV80LjErZGJnLTEuMS5iYgpAQCAtMCwwICsxLDI3IEBACitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ2xvYi9DT1BZSU5HLkxJQjttZDU9NGE3NzBiNjdlNmJlMGY2MGRhMjQ0YmViMmRlMGZjZTQiCityZXF1aXJlIHJlbWFrZS5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3ZlcnNpb24tcmVtYWtlLnRleGkucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNSRVYgPSAiY2Y1NDY0MWQ1MGEwMTY1YmIxNzYyMmIzZTk3NzBmNDI2Y2NiYzU2MSIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gInJlYWRsaW5lIGd1aWxlIgorIyBOZWVkIHRvIGFkZCAiZ2V0dGV4dC1uYXRpdmUiIGRlcGVuZGVuY3kgdG8gcmVtYWtlLW5hdGl2ZS4KKyMgQnkgZGVmYXVsdCBvbmx5ICJnZXR0ZXh0LW1pbmltYWwtbmF0aXZlIiBpcyBhZGRlZAorIyB3aGVuIGluaGVyaXQgZ2V0dGV4dC4KK0RFUEVORFNfY2xhc3MtbmF0aXZlICs9ICJnZXR0ZXh0LW5hdGl2ZSIKK1BST1ZJREVTICs9ICJtYWtlIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIHJlbW92ZSB0aGUgZGVmYXVsdCBMSU5HVUFTIHNpbmNlIHdlIGFyZSBub3QgZ29pbmcgdG8gZ2VuZXJhdGUgbGFuZ3VhZ2VzCisgICAgcm0gJHtTfS9wby9MSU5HVUFTCisgICAgdG91Y2ggJHtTfS9wby9MSU5HVUFTCisgICAgIyBjcmVhdGUgY29uZmlnLnJwYXRoIHdoaWNoIHJlcXVpcmVkIGJ5IGNvbmZpZ3VyZS5hYworICAgICggY2QgJHtTfTsgYXV0b3BvaW50IHx8IHRvdWNoIGNvbmZpZy5ycGF0aCApCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2FkZF9SUE1TRU5TRV9NSVNTSU5HT0tfdG9fcnBtbW9kdWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2FkZF9SUE1TRU5TRV9NSVNTSU5HT0tfdG9fcnBtbW9kdWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4Nzc4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvYWRkX1JQTVNFTlNFX01JU1NJTkdPS190b19ycG1tb2R1bGUucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+IAorCitkaWZmIC0tZ2l0IGEvcHl0aG9uL3JwbW1vZHVsZS5jIGIvcHl0aG9uL3JwbW1vZHVsZS5jCitpbmRleCBhNGZlMjE3Li43MjhjNjZjIDEwMDY0NAorLS0tIGEvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgYi9weXRob24vcnBtbW9kdWxlLmMKK0BAIC0zOTYsNiArMzk2LDEwIEBAIHN0YXRpYyBpbnQgaW5pdE1vZHVsZShQeU9iamVjdCAqbSkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TVFJPTkcpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0NPTkZJRyk7CisgCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9NSVNTSU5HT0spOworKyNlbmRpZgorKworICAgICBSRUdJU1RFUl9FTlVNKFJQTVRSQU5TX0ZMQUdfVEVTVCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19CVUlMRF9QUk9CUyk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNVFJBTlNfRkxBR19OT1NDUklQVFMpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZGlzYWJsZV9zaG9ydGNpcmN1aXRlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY0NmRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2J1aWxkL3BhY2suYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9idWlsZC9wYWNrLmMKKysrKyBycG0tNC4xMS4yL2J1aWxkL3BhY2suYworQEAgLTU3MSw5ICs1NzEsOSBAQCBycG1SQyBwYWNrYWdlQmluYXJpZXMocnBtU3BlYyBzcGVjLCBjb25zCisgCSAgICBoZWFkZXJQdXRCaW4ocGtnLT5oZWFkZXIsIFJQTVRBR19TT1VSQ0VQS0dJRCwgc3BlYy0+c291cmNlUGtnSWQsMTYpOworIAl9CisgCistCWlmIChjaGVhdGluZykgeworLQkgICAgKHZvaWQpIHJwbWxpYk5lZWRzRmVhdHVyZShwa2csICJTaG9ydENpcmN1aXRlZCIsICI0LjkuMC0xIik7CistCX0KKysvLwlpZiAoY2hlYXRpbmcpIHsKKysvLwkgICAgKHZvaWQpIHJwbWxpYk5lZWRzRmVhdHVyZShwa2csICJTaG9ydENpcmN1aXRlZCIsICI0LjkuMC0xIik7CisrLy8JfQorIAkKKyAJeyAgIGNoYXIgKmJpbkZvcm1hdCA9IHJwbUdldFBhdGgoIiV7X3JwbWZpbGVuYW1lfSIsIE5VTEwpOworIAkgICAgY2hhciAqYmluUnBtLCAqYmluRGlyOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvZml4X2xpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTA2MjZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL2ZpeF9saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBSb25hbiBMZSBNYXJ0cmV0IDxyb25hbi5sZW1hcnRyZXRAb3Blbi5ldXJvZ2ljaWVsLm9yZz4KKworCitkaWZmIC0tZ2l0IGEvaW5zdGFsbHBsYXRmb3JtIGIvaW5zdGFsbHBsYXRmb3JtCitpbmRleCA4YzNlYmEwLi5mYTE1ZTkxIDEwMDc1NQorLS0tIGEvaW5zdGFsbHBsYXRmb3JtCisrKysgYi9pbnN0YWxscGxhdGZvcm0KK0BAIC0xMTIsNyArMTEyLDcgQEAgZm9yIEFSQ0ggaW4gbm9hcmNoIGBncmVwIF5hcmNoX2Nhbm9uICRSUE1SQyB8IGN1dCAtZDogLWYyYDsgZG8KKyAgIFsgLXogIiRDQU5PTkFSQ0giIF0gJiYgY29udGludWUKKyAKKyAgIGlmIFsgIiRPUyIgPSAibGludXgiIF0gJiYgWyAiJENBTk9OQ09MT1IiID0gMyBdOyB0aGVuCistICAgICAgTElCPSR7TElCfTY0CisrICAgICAgTElCPSR7TElCfQorICAgZmkKKyAKKyAgIFBQRD0iJHtERVNURElSfS8ke3BsYXRmb3JtZGlyfS8ke0FSQ0h9LSR7T1N9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcHl0aG9uZGVwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODNiMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3B5dGhvbmRlcHMuc2gKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKK1sgJCMgLWdlIDEgXSB8fCB7CisgICAgY2F0ID4gL2Rldi9udWxsCisgICAgZXhpdCAwCit9CisKK2Nhc2UgJDEgaW4KKy1SfC0tcmVxdWlyZXMpCisgICAgc2hpZnQKKyAgICBncmVwICIvdXNyL1wobGliW14vXSpcfHNoYXJlXCkvcHl0aG9uW14vXSovIiA+L2Rldi9udWxsICYmIGVjaG8gInB5dGhvbiIKKyAgICBleGl0IDAKKyAgICA7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kYjMtZnJvbS1jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0MGU1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKKworRGlzYWJsZSBjb25maWd1cmluZyB0aGUgZGIzIGRpcmVjdG9yeSBzaW5jZSB3ZSB3aWxsIGJlIHVzaW5nIHRoZQorZXh0ZXJuYWwgREIgcHJvdmlkZWQgYXMgcGFydCBvZiBPRS1Db3JlIGFscmVhZHksIG5vIG5lZWQgdG8gaGF2ZQorZHVwbGljYXRlIGRhdGFiYXNlIGNvZGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtQ29yZSBTcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogcnBtLTQuMTEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTQuMTEuMi9jb25maWd1cmUuYWMKK0BAIC04MjUsOSArODI1LDkgQEAgQUNfU1VCU1QoUlBNQ09ORklHRElSKQorIAorIEFDX1NVQlNUKE9CSkRVTVApCisgCistaWYgdGVzdCAiJHdpdGhfZXh0ZXJuYWxfZGIiID0gbm87IHRoZW4KKy0gICAgQUNfQ09ORklHX1NVQkRJUlMoZGIzKQorLWZpCisrI2lmIHRlc3QgIiR3aXRoX2V4dGVybmFsX2RiIiA9IG5vOyB0aGVuCisrIyAgICBBQ19DT05GSUdfU1VCRElSUyhkYjMpCisrI2ZpCisgCisgQU1fQ09ORElUSU9OQUwoW1dJVEhfSU5URVJOQUxfREJdLFt0ZXN0ICIkd2l0aF9leHRlcm5hbF9kYiIgPSBub10pCisgQU1fQ09ORElUSU9OQUwoW0RPWFlHRU5dLFt0ZXN0ICIkRE9YWUdFTiIgIT0gbm9dKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvcmVtb3ZlLWRpci1jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWVjYWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JlbW92ZS1kaXItY2hlY2sucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2J1aWxkL2ZpbGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvYnVpbGQvZmlsZXMuYworKysrIHJwbS00LjExLjIvYnVpbGQvZmlsZXMuYworQEAgLTEzMjEsMTIgKzEzMjEsNiBAQCBzdGF0aWMgcnBtUkMgYWRkRmlsZShGaWxlTGlzdCBmbCwgY29uc3QKKyAJfQorICAgICB9CisgCistICAgIC8qIEVycm9yIG91dCB3aGVuIGEgbm9uLWRpcmVjdG9yeSBpcyBzcGVjaWZpZWQgYXMgb25lIGluIHNwZWMgKi8KKy0gICAgaWYgKGZsLT5jdXIuaXNEaXIgJiYgKHN0YXRwID09ICZzdGF0YnVmKSAmJiAhU19JU0RJUihzdGF0cC0+c3RfbW9kZSkpIHsKKy0JcnBtbG9nKFJQTUxPR19FUlIsIF8oIk5vdCBhIGRpcmVjdG9yeTogJXNcbiIpLCBkaXNrUGF0aCk7CistCWdvdG8gZXhpdDsKKy0gICAgfQorLQorICAgICAvKiBEb24ndCByZWN1cnNlIGludG8gZXhwbGljaXQgJWRpciwgZG9uJ3QgZG91YmxlLXJlY3Vyc2UgZnJvbSBmdHMgKi8KKyAgICAgaWYgKChmbC0+Y3VyLmlzRGlyICE9IDEpICYmIChzdGF0cCA9PSAmc3RhdGJ1ZikgJiYgU19JU0RJUihzdGF0cC0+c3RfbW9kZSkpIHsKKyAJcmV0dXJuIHJlY3Vyc2VEaXIoZmwsIGRpc2tQYXRoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9ycG0tc2NyaXB0ZXRleGVjaGVscC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9ycG0tc2NyaXB0ZXRleGVjaGVscC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzMzZGVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0tNC4xMS4yL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FLUNvcmVdCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFJvbmFuIExlIE1hcnRyZXQgPHJvbmFuLmxlbWFydHJldEBvcGVuLmV1cm9naWNpZWwub3JnPgorCisKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9wc20uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcHNtLmMKKysrKyBycG0tNC4xMS4yL2xpYi9wc20uYworQEAgLTQyMSw3ICs0MjEsOCBAQCBzdGF0aWMgcnBtUkMgcnVuU2NyaXB0KHJwbXBzbSBwc20sIEFSR1ZfCisgCisgICAgIHJwbXN3RW50ZXIocnBtdHNPcChwc20tPnRzLCBSUE1UU19PUF9TQ1JJUFRMRVRTKSwgMCk7CisgICAgIHJjID0gcnBtU2NyaXB0UnVuKHNjcmlwdCwgYXJnMSwgYXJnMiwgc2ZkLAorLQkJICAgICAgcHJlZml4ZXMsIHdhcm5fb25seSwgc2VsaW51eCk7CisrCQkgICAgICBwcmVmaXhlcywgd2Fybl9vbmx5LCBzZWxpbnV4LCBycG10c1Jvb3REaXIocHNtLT50cykgKTsKKysKKyAgICAgcnBtc3dFeGl0KHJwbXRzT3AocHNtLT50cywgUlBNVFNfT1BfU0NSSVBUTEVUUyksIDApOworIAorICAgICAvKiBNYXAgd2Fybi1vbmx5IGVycm9ycyB0byAibm90Zm91bmQiIGZvciBzY3JpcHQgc3RvcCBjYWxsYmFjayAqLworQEAgLTk1OCwxNSArOTU5LDQ5IEBAIHN0YXRpYyBycG1SQyBycG1wc21TdGFnZShycG1wc20gcHNtLCBwa2cKKyAgICAgY2FzZSBQU01fREVTVFJPWToKKyAJYnJlYWs7CisgICAgIGNhc2UgUFNNX1NDUklQVDoJLyogUnVuIGN1cnJlbnQgcGFja2FnZSBzY3JpcHRsZXRzLiAqLworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICB7CisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisrCisgCXJjID0gcnVuSW5zdFNjcmlwdChwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICh2b2lkKSBycG1DaHJvb3RJbigpOworKyAgICAgICAgfQorKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiBvdGhlciBwYWNrYWdlKHMpIHRoaXMgcGFja2FnZSBzZXRzIG9mZi4gKi8KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKyAgICAgICAgeworKyAgICAgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdE91dCgpOworKyNlbmRpZgorIAlyYyA9IHJ1blRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgKHZvaWQpIHJwbUNocm9vdEluKCk7CisrICAgICAgICB9CisrI2VuZGlmCisgCWJyZWFrOworICAgICBjYXNlIFBTTV9JTU1FRF9UUklHR0VSUzoKKyAJLyogUnVuIHRyaWdnZXJzIGluIHRoaXMgcGFja2FnZSBvdGhlciBwYWNrYWdlKHMpIHNldCBvZmYuICovCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJeworKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290T3V0KCk7CisrI2VuZGlmCisgCXJjID0gcnVuSW1tZWRUcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAodm9pZCkgcnBtQ2hyb290SW4oKTsKKysJfQorKyNlbmRpZgorIAlicmVhazsKKyAKKyAgICAgY2FzZSBQU01fUlBNREJfQUREOiB7CitJbmRleDogcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNC4xMS4yLm9yaWcvbGliL3JwbXNjcmlwdC5jCisrKysgcnBtLTQuMTEuMi9saWIvcnBtc2NyaXB0LmMKK0BAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBycG1SQyBydW5MdWFTY3JpcHQoaW50IHNlbGludXgsIEEKKyBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IFNDUklQVF9QQVRIID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3Vzci9YMTFSNi9iaW4iOworIAorIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVJHVl9jb25zdF90IGFyZ3YsIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywKKy0JCQlGRF90IHNjcmlwdEZkLCBGRF90IG91dCkKKysJCQlGRF90IHNjcmlwdEZkLCBGRF90IG91dCwgY2hhciAqIHJvb3REaXIgKQorIHsKKyAgICAgaW50IHBpcGVzWzJdOworICAgICBpbnQgZmxhZzsKK0BAIC0xNTgsMTMgKzE1OCwxMiBAQCBzdGF0aWMgdm9pZCBkb1NjcmlwdEV4ZWMoaW50IHNlbGludXgsIEFSCisgCSAgICBzZXRlbnYoIlJQTV9JTlNUQUxMX1BSRUZJWCIsICpwZiwgMSk7CisgCX0KKyAgICAgfQorLQkKKy0gICAgaWYgKGNoZGlyKCIvIikgPT0gMCkgeworKyAgICBpZiAoY2hkaXIocm9vdERpcikgPT0gMCkgeworIAkvKiBYWFggRG9uJ3QgbXRyYWNlIGludG8gY2hpbGRyZW4uICovCisgCXVuc2V0ZW52KCJNQUxMT0NfQ0hFQ0tfIik7CisgCisgCS8qIFBlcm1pdCBsaWJzZWxpbnV4IHRvIGRvIHRoZSBzY3JpcHRsZXQgZXhlYy4gKi8KKy0JaWYgKHNlbGludXggPT0gMSkgewkKKysJaWYgKHNlbGludXggPT0gMSkgeworIAkgICAgeHggPSBycG1fZXhlY2NvbigwLCBhcmd2WzBdLCBhcmd2LCBlbnZpcm9uKTsKKyAJfQorIAorQEAgLTE3NSwxMiArMTc0LDEyIEBAIHN0YXRpYyB2b2lkIGRvU2NyaXB0RXhlYyhpbnQgc2VsaW51eCwgQVIKKyAgICAgX2V4aXQoMTI3KTsgLyogZXhpdCAxMjcgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBiYXNoKDEpICovCisgfQorIAorLXN0YXRpYyBjaGFyICogd3JpdGVTY3JpcHQoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICpzY3JpcHQpCisrc3RhdGljIGNoYXIgKiB3cml0ZVNjcmlwdChjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKnNjcmlwdCwgY2hhciAqIHJvb3REaXIpCisgeworICAgICBjaGFyICpmbiA9IE5VTEw7CisgICAgIHNpemVfdCBzbGVuID0gc3RybGVuKHNjcmlwdCk7CisgICAgIGludCBvayA9IDA7CistICAgIEZEX3QgZmQgPSBycG1Na1RlbXBGaWxlKCIvIiwgJmZuKTsKKysgICAgRkRfdCBmZCA9IHJwbU1rVGVtcEZpbGUocm9vdERpciwgJmZuKTsKKyAKKyAgICAgaWYgKEZlcnJvcihmZCkpCisgCWdvdG8gZXhpdDsKK0BAIC0yMDQsNyArMjAzLDcgQEAgZXhpdDoKKyAgKi8KKyBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsCisgCQkgICBjb25zdCBjaGFyICpzbmFtZSwgcnBtbG9nTHZsIGx2bCwgRkRfdCBzY3JpcHRGZCwKKy0JCSAgIEFSR1ZfdCAqIGFyZ3ZwLCBjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMikKKysJCSAgIEFSR1ZfdCAqIGFyZ3ZwLCBjb25zdCBjaGFyICpzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMixjaGFyICogcm9vdERpcikKKyB7CisgICAgIEZEX3Qgb3V0ID0gTlVMTDsKKyAgICAgY2hhciAqIGZuID0gTlVMTDsKK0BAIC0yMTUsNyArMjE0LDcgQEAgc3RhdGljIHJwbVJDIHJ1bkV4dFNjcmlwdChpbnQgc2VsaW51eCwgQQorICAgICBycG1sb2coUlBNTE9HX0RFQlVHLCAiJXM6IHNjcmlwdGxldCBzdGFydFxuIiwgc25hbWUpOworIAorICAgICBpZiAoc2NyaXB0KSB7CistCWZuID0gd3JpdGVTY3JpcHQoKmFyZ3ZwWzBdLCBzY3JpcHQpOworKwlmbiA9IHdyaXRlU2NyaXB0KCphcmd2cFswXSwgc2NyaXB0LCByb290RGlyKTsKKyAJaWYgKGZuID09IE5VTEwpIHsKKyAJICAgIHJwbWxvZyhSUE1MT0dfRVJSLAorIAkJICAgXygiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlIGZvciAlczogJXNcbiIpLAorQEAgLTI1OCw3ICsyNTcsNyBAQCBzdGF0aWMgcnBtUkMgcnVuRXh0U2NyaXB0KGludCBzZWxpbnV4LCBBCisgICAgIH0gZWxzZSBpZiAocGlkID09IDApIHsvKiBDaGlsZCAqLworIAlycG1sb2coUlBNTE9HX0RFQlVHLCAiJXM6IGV4ZWN2KCVzKSBwaWQgJWRcbiIsCisgCSAgICAgICBzbmFtZSwgKmFyZ3ZwWzBdLCAodW5zaWduZWQpZ2V0cGlkKCkpOworLQlkb1NjcmlwdEV4ZWMoc2VsaW51eCwgKmFyZ3ZwLCBwcmVmaXhlcywgc2NyaXB0RmQsIG91dCk7CisrCWRvU2NyaXB0RXhlYyhzZWxpbnV4LCAqYXJndnAsIHByZWZpeGVzLCBzY3JpcHRGZCwgb3V0LCByb290RGlyKTsKKyAgICAgfQorIAorICAgICBkbyB7CitAQCAtMjk3LDEzICsyOTYsMjcgQEAgZXhpdDoKKyB9CisgCisgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMiwgRkRfdCBzY3JpcHRGZCwKKy0JCSAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgpCisrCQkgICBBUkdWX2NvbnN0X3QgcHJlZml4ZXMsIGludCB3YXJuX29ubHksIGludCBzZWxpbnV4LCBjaGFyICogcm9vdERpcikKKyB7CisgICAgIEFSR1ZfdCBhcmdzID0gTlVMTDsKKyAgICAgcnBtbG9nTHZsIGx2bCA9IHdhcm5fb25seSA/IFJQTUxPR19XQVJOSU5HIDogUlBNTE9HX0VSUjsKKyAgICAgcnBtUkMgcmM7CistCistICAgIGlmIChzY3JpcHQgPT0gTlVMTCkgcmV0dXJuIFJQTVJDX09LOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrI2VuZGlmCisrIAorKyAgICAgaWYgKHNjcmlwdCA9PSBOVUxMKSByZXR1cm4gUlBNUkNfT0s7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpIHsKKysgICAgICAgYXJndkFkZCgmYXJncywgc2NyaXB0bGV0V3JhcHBlcik7CisrCisrICAgICAgIGlmICggcm9vdERpciApIHsKKysgICAgICAgICBhcmd2QWRkKCZhcmdzLCByb290RGlyKTsKKysgICAgICAgfSBlbHNlIHsKKysgICAgICAgICBhcmd2QWRkKCZhcmdzLCAiLyIpOworKyAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgLyogY29uc3RydWN0IGEgbmV3IGFyZ3YgYXMgd2UgY2FuJ3QgbW9kaWZ5IHRoZSBvbmUgZnJvbSBoZWFkZXIgKi8KKyAgICAgaWYgKHNjcmlwdC0+YXJncykgeworQEAgLTMxNSw3ICszMjgsNyBAQCBycG1SQyBycG1TY3JpcHRSdW4ocnBtU2NyaXB0IHNjcmlwdCwgaW50CisgICAgIGlmIChyc3RyZXEoYXJnc1swXSwgIjxsdWE+IikpIHsKKyAJcmMgPSBydW5MdWFTY3JpcHQoc2VsaW51eCwgcHJlZml4ZXMsIHNjcmlwdC0+ZGVzY3IsIGx2bCwgc2NyaXB0RmQsICZhcmdzLCBzY3JpcHQtPmJvZHksIGFyZzEsIGFyZzIpOworICAgICB9IGVsc2UgeworLQlyYyA9IHJ1bkV4dFNjcmlwdChzZWxpbnV4LCBwcmVmaXhlcywgc2NyaXB0LT5kZXNjciwgbHZsLCBzY3JpcHRGZCwgJmFyZ3MsIHNjcmlwdC0+Ym9keSwgYXJnMSwgYXJnMik7CisrCXJjID0gcnVuRXh0U2NyaXB0KHNlbGludXgsIHByZWZpeGVzLCBzY3JpcHQtPmRlc2NyLCBsdmwsIHNjcmlwdEZkLCAmYXJncywgc2NyaXB0LT5ib2R5LCBhcmcxLCBhcmcyLCByb290RGlyKTsKKyAgICAgfQorICAgICBhcmd2RnJlZShhcmdzKTsKKyAKK0luZGV4OiBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS00LjExLjIub3JpZy9saWIvcnBtc2NyaXB0LmgKKysrKyBycG0tNC4xMS4yL2xpYi9ycG1zY3JpcHQuaAorQEAgLTI5LDcgKzI5LDcgQEAgcnBtU2NyaXB0IHJwbVNjcmlwdEZyZWUocnBtU2NyaXB0IHNjcmlwdAorIAorIFJQTV9HTlVDX0lOVEVSTkFMCisgcnBtUkMgcnBtU2NyaXB0UnVuKHJwbVNjcmlwdCBzY3JpcHQsIGludCBhcmcxLCBpbnQgYXJnMiwgRkRfdCBzY3JpcHRGZCwKKy0gICAgICAgICAgICAgICAgICAgQVJHVl9jb25zdF90IHByZWZpeGVzLCBpbnQgd2Fybl9vbmx5LCBpbnQgc2VsaW51eCk7CisrICAgICAgICAgICAgICAgICAgIEFSR1ZfY29uc3RfdCBwcmVmaXhlcywgaW50IHdhcm5fb25seSwgaW50IHNlbGludXgsIGNoYXIgKiByb290RGlyKTsKKyAKKyBSUE1fR05VQ19JTlRFUk5BTAorIHJwbVRhZ1ZhbCBycG1TY3JpcHRUYWcocnBtU2NyaXB0IHNjcmlwdCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RhNjA4NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi9zdXBwb3J0LXN1Z2dlc3RzLXRhZy5wYXRjaApAQCAtMCwwICsxLDM4NCBAQAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKK2RpZmYgLS1naXQgYS9idWlsZC9wYWNrLmMgYi9idWlsZC9wYWNrLmMKK2luZGV4IGI2YjJiZWEuLjVjM2Q4ZGYgMTAwNjQ0CistLS0gYS9idWlsZC9wYWNrLmMKKysrKyBiL2J1aWxkL3BhY2suYworQEAgLTI3Myw4ICsyNzMsMTAgQEAgc3RhdGljIHJwbVRhZ1ZhbCBkZXBldnJ0YWdzW10gPSB7CisgICAgIFJQTVRBR19DT05GTElDVFZFUlNJT04sCisgICAgIFJQTVRBR19PUkRFUlZFUlNJT04sCisgICAgIFJQTVRBR19UUklHR0VSVkVSU0lPTiwKKy0gICAgUlBNVEFHX1NVR0dFU1RTVkVSU0lPTiwKKy0gICAgUlBNVEFHX0VOSEFOQ0VTVkVSU0lPTiwKKysgICAgUlBNVEFHX1NVR0dFU1RWRVJTSU9OLAorKyAgICBSUE1UQUdfRU5IQU5DRVZFUlNJT04sCisrICAgIFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OLAorKyAgICBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT04sCisgICAgIDAKKyB9OworIAorZGlmZiAtLWdpdCBhL2J1aWxkL3BhcnNlUHJlYW1ibGUuYyBiL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworaW5kZXggNTc3MmJlZi4uY2JiYmVlMyAxMDA2NDQKKy0tLSBhL2J1aWxkL3BhcnNlUHJlYW1ibGUuYworKysrIGIvYnVpbGQvcGFyc2VQcmVhbWJsZS5jCitAQCAtODIxLDYgKzgyMSwxMCBAQCBzdGF0aWMgcnBtUkMgaGFuZGxlUHJlYW1ibGVUYWcocnBtU3BlYyBzcGVjLCBQYWNrYWdlIHBrZywgcnBtVGFnVmFsIHRhZywKKyAJfQorIAkvKiBmYWxsdGhyb3VnaCAqLworICAgICBjYXNlIFJQTVRBR19QUkVSRVE6CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVOREZMQUdTOgorKyAgICBjYXNlIFJQTVRBR19TVUdHRVNURkxBR1M6CisrICAgIGNhc2UgUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzoKKysgICAgY2FzZSBSUE1UQUdfRU5IQU5DRUZMQUdTOgorICAgICBjYXNlIFJQTVRBR19DT05GTElDVEZMQUdTOgorICAgICBjYXNlIFJQTVRBR19PQlNPTEVURUZMQUdTOgorICAgICBjYXNlIFJQTVRBR19QUk9WSURFRkxBR1M6CitAQCAtOTIyLDYgKzkyNiwxMCBAQCBzdGF0aWMgc3RydWN0IFByZWFtYmxlUmVjX3MgY29uc3QgcHJlYW1ibGVMaXN0W10gPSB7CisgICAgIHtSUE1UQUdfSUNPTiwJCTAsIDAsIExFTl9BTkRfU1RSKCJpY29uIil9LAorICAgICB7UlBNVEFHX1BST1ZJREVGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoInByb3ZpZGVzIil9LAorICAgICB7UlBNVEFHX1JFUVVJUkVGTEFHUywJMiwgMCwgTEVOX0FORF9TVFIoInJlcXVpcmVzIil9LAorKyAgICB7UlBNVEFHX1JFQ09NTUVOREZMQUdTLAkwLCAwLCBMRU5fQU5EX1NUUigicmVjb21tZW5kcyIpfSwKKysgICAge1JQTVRBR19TVUdHRVNURkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJzdWdnZXN0cyIpfSwKKysgICAge1JQTVRBR19TVVBQTEVNRU5URkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJzdXBwbGVtZW50cyIpfSwKKysgICAge1JQTVRBR19FTkhBTkNFRkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJlbmhhbmNlcyIpfSwKKyAgICAge1JQTVRBR19QUkVSRVEsCQkyLCAxLCBMRU5fQU5EX1NUUigicHJlcmVxIil9LAorICAgICB7UlBNVEFHX0NPTkZMSUNURkxBR1MsCTAsIDAsIExFTl9BTkRfU1RSKCJjb25mbGljdHMiKX0sCisgICAgIHtSUE1UQUdfT0JTT0xFVEVGTEFHUywJMCwgMCwgTEVOX0FORF9TVFIoIm9ic29sZXRlcyIpfSwKK2RpZmYgLS1naXQgYS9idWlsZC9wYXJzZVJlcXMuYyBiL2J1aWxkL3BhcnNlUmVxcy5jCitpbmRleCBiYTA4MGExLi4xNDI3MTExIDEwMDY0NAorLS0tIGEvYnVpbGQvcGFyc2VSZXFzLmMKKysrKyBiL2J1aWxkL3BhcnNlUmVxcy5jCitAQCAtNjEsNiArNjEsMTggQEAgcnBtUkMgcGFyc2VSQ1BPVChycG1TcGVjIHNwZWMsIFBhY2thZ2UgcGtnLCBjb25zdCBjaGFyICpmaWVsZCwgcnBtVGFnVmFsIHRhZ04sCisgCW5hbWV0YWcgPSBSUE1UQUdfUkVRVUlSRU5BTUU7CisgCXRhZ2ZsYWdzIHw9IFJQTVNFTlNFX0FOWTsKKyAJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX1JFQ09NTUVOREZMQUdTOgorKwluYW1ldGFnID0gUlBNVEFHX1JFQ09NTUVORE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVUdHRVNURkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfU1VHR0VTVE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVVBQTEVNRU5URkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfU1VQUExFTUVOVE5BTUU7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19FTkhBTkNFRkxBR1M6CisrCW5hbWV0YWcgPSBSUE1UQUdfRU5IQU5DRU5BTUU7CisrCWJyZWFrOworICAgICBjYXNlIFJQTVRBR19QUk9WSURFRkxBR1M6CisgCW5hbWV0YWcgPSBSUE1UQUdfUFJPVklERU5BTUU7CisgCWJyZWFrOworZGlmZiAtLWdpdCBhL2J1aWxkL3JlcXByb3YuYyBiL2J1aWxkL3JlcXByb3YuYworaW5kZXggYTM2OGY0Mi4uYzI3MGFmNiAxMDA2NDQKKy0tLSBhL2J1aWxkL3JlcXByb3YuYworKysrIGIvYnVpbGQvcmVxcHJvdi5jCitAQCAtODEsNiArODEsMzAgQEAgaW50IGFkZFJlcVByb3YoUGFja2FnZSBwa2csIHJwbVRhZ1ZhbCB0YWdOLAorIAlleHRyYSA9IEZsYWdzICYgUlBNU0VOU0VfVFJJR0dFUjsKKyAJZHNwID0gJnBrZy0+dHJpZ2dlcnM7CisgCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19SRUNPTU1FTkROQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX1JFQ09NTUVORFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfUkVDT01NRU5ERkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnJlY29tbWVuZHM7CisrCWJyZWFrOworKyAgICBjYXNlIFJQTVRBR19TVUdHRVNUTkFNRToKKysJdmVyc2lvbnRhZyA9IFJQTVRBR19TVUdHRVNUVkVSU0lPTjsKKysJZmxhZ3RhZyA9IFJQTVRBR19TVUdHRVNURkxBR1M7CisrCWV4dHJhID0gRmxhZ3MgJiBfQUxMX1JFUVVJUkVTX01BU0s7CisrCWRzcCA9ICZwa2ctPnN1Z2dlc3RzOworKwlicmVhazsKKysgICAgY2FzZSBSUE1UQUdfU1VQUExFTUVOVE5BTUU6CisrCXZlcnNpb250YWcgPSBSUE1UQUdfU1VQUExFTUVOVFZFUlNJT047CisrCWZsYWd0YWcgPSBSUE1UQUdfU1VQUExFTUVOVEZMQUdTOworKwlleHRyYSA9IEZsYWdzICYgX0FMTF9SRVFVSVJFU19NQVNLOworKwlkc3AgPSAmcGtnLT5zdXBwbGVtZW50czsKKysJYnJlYWs7CisrICAgIGNhc2UgUlBNVEFHX0VOSEFOQ0VOQU1FOgorKwl2ZXJzaW9udGFnID0gUlBNVEFHX0VOSEFOQ0VWRVJTSU9OOworKwlmbGFndGFnID0gUlBNVEFHX0VOSEFOQ0VGTEFHUzsKKysJZXh0cmEgPSBGbGFncyAmIF9BTExfUkVRVUlSRVNfTUFTSzsKKysJZHNwID0gJnBrZy0+ZW5oYW5jZXM7CisrCWJyZWFrOworICAgICBjYXNlIFJQTVRBR19SRVFVSVJFTkFNRToKKyAgICAgZGVmYXVsdDoKKyAJdGFnTiA9IFJQTVRBR19SRVFVSVJFTkFNRTsKK2RpZmYgLS1naXQgYS9idWlsZC9ycG1idWlsZF9pbnRlcm5hbC5oIGIvYnVpbGQvcnBtYnVpbGRfaW50ZXJuYWwuaAoraW5kZXggYTllNGM3Yy4uMGExOTc3ZiAxMDA2NDQKKy0tLSBhL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKKysrKyBiL2J1aWxkL3JwbWJ1aWxkX2ludGVybmFsLmgKK0BAIC05Myw2ICs5MywxMCBAQCBzdHJ1Y3QgUGFja2FnZV9zIHsKKyAgICAgcnBtZHMgZHM7CQkJLyohPCBSZXF1aXJlczogTiA9IEVWUiAqLworICAgICBycG1kcyByZXF1aXJlczsKKyAgICAgcnBtZHMgcHJvdmlkZXM7CisrICAgIHJwbWRzIHJlY29tbWVuZHM7CisrICAgIHJwbWRzIHN1Z2dlc3RzOworKyAgICBycG1kcyBzdXBwbGVtZW50czsKKysgICAgcnBtZHMgZW5oYW5jZXM7CisgICAgIHJwbWRzIGNvbmZsaWN0czsKKyAgICAgcnBtZHMgb2Jzb2xldGVzOworICAgICBycG1kcyB0cmlnZ2VyczsKK2RpZmYgLS1naXQgYS9idWlsZC9zcGVjLmMgYi9idWlsZC9zcGVjLmMKK2luZGV4IDcwM2VjNzguLjdhZTIxMjAgMTAwNjQ0CistLS0gYS9idWlsZC9zcGVjLmMKKysrKyBiL2J1aWxkL3NwZWMuYworQEAgLTEzOSw2ICsxMzksMTEgQEAgc3RhdGljIFBhY2thZ2UgZnJlZVBhY2thZ2UoUGFja2FnZSBwa2cpCisgICAgIHBrZy0+ZHMgPSBycG1kc0ZyZWUocGtnLT5kcyk7CisgICAgIHBrZy0+cmVxdWlyZXMgPSBycG1kc0ZyZWUocGtnLT5yZXF1aXJlcyk7CisgICAgIHBrZy0+cHJvdmlkZXMgPSBycG1kc0ZyZWUocGtnLT5wcm92aWRlcyk7CisrICAgIHBrZy0+cmVjb21tZW5kcyA9IHJwbWRzRnJlZShwa2ctPnJlY29tbWVuZHMpOworKyAgICBwa2ctPnN1Z2dlc3RzID0gcnBtZHNGcmVlKHBrZy0+c3VnZ2VzdHMpOworKyAgICBwa2ctPnN1cHBsZW1lbnRzID0gcnBtZHNGcmVlKHBrZy0+c3VwcGxlbWVudHMpOworKyAgICBwa2ctPmVuaGFuY2VzID0gcnBtZHNGcmVlKHBrZy0+ZW5oYW5jZXMpOworKworICAgICBwa2ctPmNvbmZsaWN0cyA9IHJwbWRzRnJlZShwa2ctPmNvbmZsaWN0cyk7CisgICAgIHBrZy0+b2Jzb2xldGVzID0gcnBtZHNGcmVlKHBrZy0+b2Jzb2xldGVzKTsKKyAgICAgcGtnLT50cmlnZ2VycyA9IHJwbWRzRnJlZShwa2ctPnRyaWdnZXJzKTsKK2RpZmYgLS1naXQgYS9saWIvcnBtZHMuYyBiL2xpYi9ycG1kcy5jCitpbmRleCA3YTUxMTY3Li4xZTVkZGEwIDEwMDY0NAorLS0tIGEvbGliL3JwbWRzLmMKKysrKyBiL2xpYi9ycG1kcy5jCitAQCAtNTIsNiArNTIsMjIgQEAgc3RhdGljIGludCBkc1R5cGUocnBtVGFnVmFsIHRhZywKKyAJdCA9ICJSZXF1aXJlcyI7CisgCWV2ciA9IFJQTVRBR19SRVFVSVJFVkVSU0lPTjsKKyAJZiA9IFJQTVRBR19SRVFVSVJFRkxBR1M7CisrICAgIH0gZWxzZSBpZiAodGFnID09IFJQTVRBR19TVVBQTEVNRU5UTkFNRSkgeworKwl0ID0gIlN1cHBsZW1lbnRzIjsKKysJZXZyID0gUlBNVEFHX1NVUFBMRU1FTlRWRVJTSU9OOworKwlmID0gUlBNVEFHX1NVUFBMRU1FTlRGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX0VOSEFOQ0VOQU1FKSB7CisrCXQgPSAiRW5oYW5jZXMiOworKwlldnIgPSBSUE1UQUdfRU5IQU5DRVZFUlNJT047CisrCWYgPSBSUE1UQUdfRU5IQU5DRUZMQUdTOworKyAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfUkVDT01NRU5ETkFNRSkgeworKwl0ID0gIlJlY29tbWVuZHMiOworKwlldnIgPSBSUE1UQUdfUkVDT01NRU5EVkVSU0lPTjsKKysJZiA9IFJQTVRBR19SRUNPTU1FTkRGTEFHUzsKKysgICAgfSBlbHNlIGlmICh0YWcgPT0gUlBNVEFHX1NVR0dFU1ROQU1FKSB7CisrCXQgPSAiU3VnZ2VzdHMiOworKwlldnIgPSBSUE1UQUdfU1VHR0VTVFZFUlNJT047CisrCWYgPSBSUE1UQUdfU1VHR0VTVEZMQUdTOworICAgICB9IGVsc2UgaWYgKHRhZyA9PSBSUE1UQUdfQ09ORkxJQ1ROQU1FKSB7CisgCXQgPSAiQ29uZmxpY3RzIjsKKyAJZXZyID0gUlBNVEFHX0NPTkZMSUNUVkVSU0lPTjsKK2RpZmYgLS1naXQgYS9saWIvcnBtdGFnLmggYi9saWIvcnBtdGFnLmgKK2luZGV4IDY0YjAzZjEuLmI5NDMyMjkgMTAwNjQ0CistLS0gYS9saWIvcnBtdGFnLmgKKysrKyBiL2xpYi9ycG10YWcuaAorQEAgLTIxNywxNCArMjE3LDE0IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19QUkVUUkFOU1BST0cJCT0gMTE1MywJLyogc1tdICovCisgICAgIFJQTVRBR19QT1NUVFJBTlNQUk9HCT0gMTE1NCwJLyogc1tdICovCisgICAgIFJQTVRBR19ESVNUVEFHCQk9IDExNTUsCS8qIHMgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTTkFNRQkJPSAxMTU2LAkvKiBzW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSNkZWZpbmUJUlBNVEFHX1NVR0dFU1RTIFJQTVRBR19TVUdHRVNUU05BTUUJLyogc1tdICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfU1VHR0VTVFNWRVJTSU9OCT0gMTE1NywJLyogc1tdIGV4dGVuc2lvbiAodW5pbXBsZW1lbnRlZCkgKi8KKy0gICAgUlBNVEFHX1NVR0dFU1RTRkxBR1MJPSAxMTU4LAkvKiBpW10gZXh0ZW5zaW9uICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNOQU1FCQk9IDExNTksCS8qIHNbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCistI2RlZmluZQlSUE1UQUdfRU5IQU5DRVMgUlBNVEFHX0VOSEFOQ0VTTkFNRQkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCistICAgIFJQTVRBR19FTkhBTkNFU1ZFUlNJT04JPSAxMTYwLAkvKiBzW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworLSAgICBSUE1UQUdfRU5IQU5DRVNGTEFHUwk9IDExNjEsCS8qIGlbXSBleHRlbnNpb24gcGxhY2Vob2xkZXIgKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU05BTUUJPSAxMTU2LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrI2RlZmluZQlSUE1UQUdfT0xEU1VHR0VTVFMgUlBNVEFHX09MRFNVR0dFU1RTTkFNRSAvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU1ZFUlNJT04JPSAxMTU3LAkvKiBzW10gKHVuaW1wbGVtZW50ZWQpICovCisrICAgIFJQTVRBR19PTERTVUdHRVNUU0ZMQUdTCT0gMTE1OCwJLyogaVtdICh1bmltcGxlbWVudGVkKSAqLworKyAgICBSUE1UQUdfT0xERU5IQU5DRVNOQU1FCQk9IDExNTksCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysjZGVmaW5lCVJQTVRBR19PTERFTkhBTkNFUyBSUE1UQUdfT0xERU5IQU5DRVNOQU1FIC8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTVkVSU0lPTgk9IDExNjAsCS8qIHNbXSAodW5pbXBsZW1lbnRlZCkgKi8KKysgICAgUlBNVEFHX09MREVOSEFOQ0VTRkxBR1MJPSAxMTYxLAkvKiBpW10gKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19QUklPUklUWQkJPSAxMTYyLCAvKiBpW10gZXh0ZW5zaW9uIHBsYWNlaG9sZGVyICh1bmltcGxlbWVudGVkKSAqLworICAgICBSUE1UQUdfQ1ZTSUQJCT0gMTE2MywgLyogcyAodW5pbXBsZW1lbnRlZCkgKi8KKyAjZGVmaW5lCVJQTVRBR19TVk5JRAlSUE1UQUdfQ1ZTSUQJLyogcyAodW5pbXBsZW1lbnRlZCkgKi8KK0BAIC0yNjEsNiArMjYxLDcgQEAgdHlwZWRlZiBlbnVtIHJwbVRhZ19lIHsKKyAgICAgUlBNVEFHX0JVSUxET0JTT0xFVEVTCT0gMTE5NCwgLyogaW50ZXJuYWwgKHVuaW1wbGVtZW50ZWQpICovCisgICAgIFJQTVRBR19EQklOU1RBTkNFCQk9IDExOTUsIC8qIGkgZXh0ZW5zaW9uICovCisgICAgIFJQTVRBR19OVlJBCQkJPSAxMTk2LCAvKiBzIGV4dGVuc2lvbiAqLworKworICAgICAvKiB0YWdzIDE5OTctNDk5OSByZXNlcnZlZCAqLworICAgICBSUE1UQUdfRklMRU5BTUVTCQk9IDUwMDAsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0ZJTEVQUk9WSURFCQk9IDUwMDEsIC8qIHNbXSBleHRlbnNpb24gKi8KK0BAIC0zMDcsNiArMzA4LDI2IEBAIHR5cGVkZWYgZW51bSBycG1UYWdfZSB7CisgICAgIFJQTVRBR19PQlNPTEVURU5FVlJTCT0gNTA0MywgLyogc1tdIGV4dGVuc2lvbiAqLworICAgICBSUE1UQUdfQ09ORkxJQ1RORVZSUwk9IDUwNDQsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAgICAgUlBNVEFHX0ZJTEVOTElOS1MJCT0gNTA0NSwJLyogaVtdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ETkFNRQk9IDUwNDYsCS8qIHNbXSAqLworKyNkZWZpbmUJUlBNVEFHX1JFQ09NTUVORFMgUlBNVEFHX1JFQ09NTUVORE5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRWRVJTSU9OCT0gNTA0NywJLyogc1tdICovCisrICAgIFJQTVRBR19SRUNPTU1FTkRGTEFHUwk9IDUwNDgsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfU1VHR0VTVE5BTUUJCT0gNTA0OSwJLyogc1tdICovCisrI2RlZmluZQlSUE1UQUdfU1VHR0VTVFMgUlBNVEFHX1NVR0dFU1ROQU1FCS8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VHR0VTVFZFUlNJT04JPSA1MDUwLAkvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVUdHRVNURkxBR1MJCT0gNTA1MSwJLyogaVtdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVE5BTUUJPSA1MDUyLAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19TVVBQTEVNRU5UUyBSUE1UQUdfU1VQUExFTUVOVE5BTUUgLyogc1tdICovCisrICAgIFJQTVRBR19TVVBQTEVNRU5UVkVSU0lPTgk9IDUwNTMsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVEZMQUdTCT0gNTA1NCwJLyogaVtdICovCisrICAgIFJQTVRBR19FTkhBTkNFTkFNRQkJPSA1MDU1LAkvKiBzW10gKi8KKysjZGVmaW5lCVJQTVRBR19FTkhBTkNFUyBSUE1UQUdfRU5IQU5DRU5BTUUJLyogc1tdICovCisrICAgIFJQTVRBR19FTkhBTkNFVkVSU0lPTgk9IDUwNTYsCS8qIHNbXSAqLworKyAgICBSUE1UQUdfRU5IQU5DRUZMQUdTCQk9IDUwNTcsCS8qIGlbXSAqLworKyAgICBSUE1UQUdfUkVDT01NRU5ETkVWUlMJPSA1MDU4LCAvKiBzW10gZXh0ZW5zaW9uICovCisrICAgIFJQTVRBR19TVUdHRVNUTkVWUlMJCT0gNTA1OSwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfU1VQUExFTUVOVE5FVlJTCT0gNTA2MCwgLyogc1tdIGV4dGVuc2lvbiAqLworKyAgICBSUE1UQUdfRU5IQU5DRU5FVlJTCQk9IDUwNjEsIC8qIHNbXSBleHRlbnNpb24gKi8KKyAKKyAgICAgUlBNVEFHX0ZJUlNURlJFRV9UQUcJLyohPCBpbnRlcm5hbCAqLworIH0gcnBtVGFnOworZGlmZiAtLWdpdCBhL2xpYi90YWdleHRzLmMgYi9saWIvdGFnZXh0cy5jCitpbmRleCAyOWIyYmFlLi5lOTQwMzEwIDEwMDY0NAorLS0tIGEvbGliL3RhZ2V4dHMuYworKysrIGIvbGliL3RhZ2V4dHMuYworQEAgLTc2MSw2ICs3NjEsMjYgQEAgc3RhdGljIGludCByZXF1aXJlbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorICAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19SRVFVSVJFTkFNRSk7CisgfQorIAorK3N0YXRpYyBpbnQgcmVjb21tZW5kbmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfUkVDT01NRU5ETkFNRSk7CisrfQorKworK3N0YXRpYyBpbnQgc3VnZ2VzdG5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyt7CisrICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1NVR0dFU1ROQU1FKTsKKyt9CisrCisrc3RhdGljIGludCBzdXBwbGVtZW50bmV2cnNUYWcoSGVhZGVyIGgsIHJwbXRkIHRkLCBoZWFkZXJHZXRGbGFncyBoZ2ZsYWdzKQorK3sKKysgICAgcmV0dXJuIGRlcG5ldnJzVGFnKGgsIHRkLCBoZ2ZsYWdzLCBSUE1UQUdfU1VQUExFTUVOVE5BTUUpOworK30KKysKKytzdGF0aWMgaW50IGVuaGFuY2VuZXZyc1RhZyhIZWFkZXIgaCwgcnBtdGQgdGQsIGhlYWRlckdldEZsYWdzIGhnZmxhZ3MpCisreworKyAgICByZXR1cm4gZGVwbmV2cnNUYWcoaCwgdGQsIGhnZmxhZ3MsIFJQTVRBR19FTkhBTkNFTkFNRSk7CisrfQorKworIHN0YXRpYyBpbnQgcHJvdmlkZW5ldnJzVGFnKEhlYWRlciBoLCBycG10ZCB0ZCwgaGVhZGVyR2V0RmxhZ3MgaGdmbGFncykKKyB7CisgICAgIHJldHVybiBkZXBuZXZyc1RhZyhoLCB0ZCwgaGdmbGFncywgUlBNVEFHX1BST1ZJREVOQU1FKTsKK0BAIC04MjMsNiArODQzLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyVGFnRnVuY19zIHJwbUhlYWRlclRhZ0V4dGVuc2lvbnNbXSA9IHsKKyAgICAgeyBSUE1UQUdfRVBPQ0hOVU0sCQllcG9jaG51bVRhZyB9LAorICAgICB7IFJQTVRBR19JTlNURklMRU5BTUVTLAlpbnN0ZmlsZW5hbWVzVGFnIH0sCisgICAgIHsgUlBNVEFHX1JFUVVJUkVORVZSUywJcmVxdWlyZW5ldnJzVGFnIH0sCisrICAgIHsgUlBNVEFHX1JFQ09NTUVORE5FVlJTLAlyZWNvbW1lbmRuZXZyc1RhZ30sCisrICAgIHsgUlBNVEFHX1NVR0dFU1RORVZSUywJc3VnZ2VzdG5ldnJzVGFnfSwKKysgICAgeyBSUE1UQUdfU1VQUExFTUVOVE5FVlJTLAlzdXBwbGVtZW50bmV2cnNUYWd9LAorKyAgICB7IFJQTVRBR19FTkhBTkNFTkVWUlMsCWVuaGFuY2VuZXZyc1RhZ30sCisgICAgIHsgUlBNVEFHX1BST1ZJREVORVZSUywJcHJvdmlkZW5ldnJzVGFnIH0sCisgICAgIHsgUlBNVEFHX09CU09MRVRFTkVWUlMsCW9ic29sZXRlbmV2cnNUYWcgfSwKKyAgICAgeyBSUE1UQUdfQ09ORkxJQ1RORVZSUywJY29uZmxpY3RuZXZyc1RhZyB9LAorZGlmZiAtLWdpdCBhL3JwbXBvcHQuaW4gYi9ycG1wb3B0LmluCitpbmRleCA4MDU1OTllLi4wMzZhYjRlIDEwMDY0NAorLS0tIGEvcnBtcG9wdC5pbgorKysrIGIvcnBtcG9wdC5pbgorQEAgLTY3LDYgKzY3LDE5IEBAIHJwbQlhbGlhcyAtLXJlcXVpcmVzCS0tcWYgXAorIAktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgcmVxdWlyZWQgYnkgcGFja2FnZShzKSIKKyBycG0JYWxpYXMgLVIgLS1yZXF1aXJlcworIAorK3JwbQlhbGlhcyAtLXJlY29tbWVuZHMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtSRUNPTU1FTkRGTEFHUzpkZXB0eXBlfTogfTp7fXwle1JFQ09NTUVORE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgcmVjb21tZW5kZWQgYnkgcGFja2FnZShzKSIKKytycG0JYWxpYXMgLS1zdWdnZXN0cwktLXFmIFwKKysgICJbJXxWRVJCT1NFP3sle1NVR0dFU1RGTEFHUzpkZXB0eXBlfTogfTp7fXwle1NVR0dFU1RORVZSU31cbl0iIFwKKysJLS1QT1BUZGVzYz0kImxpc3QgY2FwYWJpbGl0aWVzIHN1Z2dlc3RlZCBieSBwYWNrYWdlKHMpIgorK3JwbQlhbGlhcyAtLXN1cHBsZW1lbnRzCS0tcWYgXAorKyAgIlslfFZFUkJPU0U/eyV7U1VQUExFTUVOVEZMQUdTOmRlcHR5cGV9OiB9Ont9fCV7U1VQUExFTUVOVE5FVlJTfVxuXSIgXAorKwktLVBPUFRkZXNjPSQibGlzdCBjYXBhYmlsaXRpZXMgc3VwcGxlbWVudGVkIGJ5IHBhY2thZ2UocykiCisrcnBtCWFsaWFzIC0tZW5oYW5jZXMJLS1xZiBcCisrICAiWyV8VkVSQk9TRT97JXtFTkhBTkNFRkxBR1M6ZGVwdHlwZX06IH06e318JXtFTkhBTkNFTkVWUlN9XG5dIiBcCisrCS0tUE9QVGRlc2M9JCJsaXN0IGNhcGFiaWxpdGllcyBlbmhhbmNlZCBieSBwYWNrYWdlKHMpIgorKworIHJwbQlhbGlhcyAtLWluZm8gLS1xZiAnXAorIE5hbWUgICAgICAgIDogJXtOQU1FfVxuXAorICV8RVBPQ0g/e0Vwb2NoICAgICAgIDogJXtFUE9DSH1cbn18XAorZGlmZiAtLWdpdCBhL3Rlc3RzL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjIGIvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKK2luZGV4IGNiNGNiYmQuLjdjNDdmNmQgMTAwNjQ0CistLS0gYS90ZXN0cy9kYXRhL1NQRUNTL2RlcHRlc3Quc3BlYworKysrIGIvdGVzdHMvZGF0YS9TUEVDUy9kZXB0ZXN0LnNwZWMKK0BAIC0xMCw2ICsxMCwxMCBAQCBCdWlsZEFyY2g6CW5vYXJjaAorICV7P3Byb3ZzOlByb3ZpZGVzOiAle3Byb3ZzfX0KKyAlez9jZmxzOkNvbmZsaWN0czogJXtjZmxzfX0KKyAlez9vYnM6T2Jzb2xldGVzOiAle29ic319CisrJXs/cmVjczpSZWNvbW1lbmRzOiAle3JlY3N9fQorKyV7P3N1Z3M6U3VnZ2VzdHM6ICV7c3Vnc319CisrJXs/c3VwczpTdXBwbGVtZW50czogJXtzdXBzfX0KKyslez9lbnM6RW5oYW5jZXM6ICV7ZW5zfX0KKyAKKyAlZGVzY3JpcHRpb24KKyAle3N1bW1hcnl9CitkaWZmIC0tZ2l0IGEvdGVzdHMvcnBtYnVpbGQuYXQgYi90ZXN0cy9ycG1idWlsZC5hdAoraW5kZXggNjIzMDkwMy4uYzRjOTU0YyAxMDA2NDQKKy0tLSBhL3Rlc3RzL3JwbWJ1aWxkLmF0CisrKysgYi90ZXN0cy9ycG1idWlsZC5hdAorQEAgLTE4NSwzICsxODUsMjUgQEAgbHJ3eHJ3eHJ3eCAvb3B0L2dsb2J0ZXN0L2xpbmtnb29kCisgXSwKKyBbXSkKKyBBVF9DTEVBTlVQCisrCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrIGlmIHdlYWsgYW5kIHJldmVyc2UgcmVxdWlyZXMgY2FuIGJlIGJ1aWx0CisrQVRfU0VUVVAoW1dlYWsgYW5kIHJldmVyc2UgcmVxdWlyZXNdKQorK0FUX0tFWVdPUkRTKFtidWlsZF0pCisrQVRfQ0hFQ0soWworKworK3J1bnJvb3QgcnBtYnVpbGQgLWJiIC0tcXVpZXQgXAorKwktLWRlZmluZSAicGtnIHdlYWtkZXBzIiBcCisrCS0tZGVmaW5lICJyZWNzIGZvbyA+IDEuMi4zIiBcCisrCS0tZGVmaW5lICJzdWdzIGJhciA+PSAwLjEuMiIgXAorKwktLWRlZmluZSAic3VwcyBiYXoiIFwKKysJLS1kZWZpbmUgImVucyB6YXAgPSAzIiBcCisrCSAgL2RhdGEvU1BFQ1MvZGVwdGVzdC5zcGVjCisrCisrcnVucm9vdCBycG0gLXFwIC0tcWYgIlsle3N1cHBsZW1lbnRuYW1lfVxuXSIgL2J1aWxkL1JQTVMvbm9hcmNoL2RlcHRlc3Qtd2Vha2RlcHMtMS4wLTEubm9hcmNoLnJwbQorK10sCisrWzBdLAorK1tiYXoKKytdLAorK1tpZ25vcmVdKQorK0FUX0NMRUFOVVAKK2RpZmYgLS1naXQgYS90ZXN0cy9ycG1nZW5lcmFsLmF0IGIvdGVzdHMvcnBtZ2VuZXJhbC5hdAoraW5kZXggMTMxMzFlMi4uODBjY2E2MyAxMDA2NDQKKy0tLSBhL3Rlc3RzL3JwbWdlbmVyYWwuYXQKKysrKyBiL3Rlc3RzL3JwbWdlbmVyYWwuYXQKK0BAIC03OSw2ICs3OSwxMSBAQCBESVNUVEFHCisgRElTVFVSTAorIERTQUhFQURFUgorIEUKKytFTkhBTkNFRkxBR1MKKytFTkhBTkNFTkFNRQorK0VOSEFOQ0VORVZSUworK0VOSEFOQ0VTCisrRU5IQU5DRVZFUlNJT04KKyBFUE9DSAorIEVQT0NITlVNCisgRVZSCitAQCAtMTk5LDYgKzIwNCwxMSBAQCBQUk9WSURFUworIFBST1ZJREVWRVJTSU9OCisgUFVCS0VZUworIFIKKytSRUNPTU1FTkRGTEFHUworK1JFQ09NTUVORE5BTUUKKytSRUNPTU1FTkRORVZSUworK1JFQ09NTUVORFMKKytSRUNPTU1FTkRWRVJTSU9OCisgUkVDT05URVhUUworIFJFTEVBU0UKKyBSRU1PVkVUSUQKK0BAIC0yMTksNyArMjI5LDE3IEBAIFNPVVJDRQorIFNPVVJDRVBBQ0tBR0UKKyBTT1VSQ0VQS0dJRAorIFNPVVJDRVJQTQorK1NVR0dFU1RGTEFHUworK1NVR0dFU1ROQU1FCisrU1VHR0VTVE5FVlJTCisrU1VHR0VTVFMKKytTVUdHRVNUVkVSU0lPTgorIFNVTU1BUlkKKytTVVBQTEVNRU5URkxBR1MKKytTVVBQTEVNRU5UTkFNRQorK1NVUFBMRU1FTlRORVZSUworK1NVUFBMRU1FTlRTCisrU1VQUExFTUVOVFZFUlNJT04KKyBUUklHR0VSQ09ORFMKKyBUUklHR0VSRkxBR1MKKyBUUklHR0VSSU5ERVgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtLTQuMTEuMi91c2UtcGtnY29uZmlnLWZvci1weXRob24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODRjZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS00LjExLjIvdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKKworVXNlIHBrZ2NvbmZpZyB0byBnZXQgdGhlIGNvcnJlY3QgaW5jbHVkZSBwYXRocworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogUm9uYW4gTGUgTWFydHJldCA8cm9uYW4ubGVtYXJ0cmV0QG9wZW4uZXVyb2dpY2llbC5vcmc+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU5N2Y3MjcuLjgxNzlmNDQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU0MCwxMCArNTQwLDEwIEBAIGVzYWNdLAorIAorIEFTX0lGKFt0ZXN0ICIkZW5hYmxlX3B5dGhvbiIgPSB5ZXNdLFsKKyAgIEFNX1BBVEhfUFlUSE9OKFsyLjZdLFsKKy0gICAgV0lUSF9QWVRIT05fSU5DTFVERT1gJHtQWVRIT059IC1jICdmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0ICo7IGltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoZ2V0X3B5dGhvbl9pbmMoKSknYAorKyAgICBXSVRIX1BZVEhPTl9JTkNMVURFPSQoJHtQS0dfQ09ORklHfSAtLWNmbGFncy1vbmx5LUkgIHB5dGhvbikKKyAgICAgV0lUSF9QWVRIT05fU1VCUEFDS0FHRT0xCisgICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSSRXSVRIX1BZVEhPTl9JTkNMVURFIgorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRXSVRIX1BZVEhPTl9JTkNMVURFIgorICAgICBBQ19DSEVDS19IRUFERVIoW1B5dGhvbi5oXSxbXSwKKyAgICAgICBbQUNfTVNHX0VSUk9SKFttaXNzaW5nIFB5dGhvbi5oXSkKKyAgICAgICBdKQorZGlmZiAtLWdpdCBhL3B5dGhvbi9NYWtlZmlsZS5hbSBiL3B5dGhvbi9NYWtlZmlsZS5hbQoraW5kZXggZmZmNTFhZS4uZjM3Y2I5ZCAxMDA2NDQKKy0tLSBhL3B5dGhvbi9NYWtlZmlsZS5hbQorKysrIGIvcHl0aG9uL01ha2VmaWxlLmFtCitAQCAtNCw3ICs0LDcgQEAgRVhUUkFfRElTVCA9IHJwbS9fX2luaXRfXy5weSBycG0vdHJhbnNhY3Rpb24ucHkKKyAKKyBBTV9DUFBGTEFHUyA9IC1JJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvCisgQU1fQ1BQRkxBR1MgKz0gLUkkKHRvcF9zcmNkaXIpL3B5dGhvbgorLUFNX0NQUEZMQUdTICs9IC1JQFdJVEhfUFlUSE9OX0lOQ0xVREVACisrQU1fQ1BQRkxBR1MgKz0gQFdJVEhfUFlUSE9OX0lOQ0xVREVACisgCisgcGtncHlleGVjX0xUTElCUkFSSUVTID0gX3JwbW1vZHVsZS5sYSBfcnBtYm1vZHVsZS5sYSBfcnBtc21vZHVsZS5sYQorIHBrZ3B5ZXhlY19EQVRBID0gcnBtL19faW5pdF9fLnB5IHJwbS90cmFuc2FjdGlvbi5weQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vMDAwMS11c2luZy1wb3B0UGFyc2VBcmd2U3RyaW5nLXRvLXBhcnNlLXRoZS1fZ3BnX2NoZWNrX3BhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYmMzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSA2NDg1MWM2NjIyYWZmNjQ3ODdhOWZjZWEyNmNjY2RlMTgzYjdjNzQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIlJveS5MaSIgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDExIE5vdiAyMDE0IDE2OjI4OjIyICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHVzaW5nIHBvcHRQYXJzZUFyZ3ZTdHJpbmcgdG8gcGFyc2UgdGhlCisgX2dwZ19jaGVja19wYXNzd29yZF9jbWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0JvdGggX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kIGFuZCBfX2dwZ19zaWduX2NtZCBpbmNsdWRlICIle19ncGdfbmFtZX0iLCBidXQKK3N0cmFjZSBzaG93cyB0aGF0IGdwZ19uYW1lIGhhcyBhIHF1b3RlIHdoZW4gcnVuIF9ncGdfY2hlY2tfcGFzc3dvcmQsCitidXQgbm90IHdoZW4gcnVuIF9fZ3BnX3NpZ25fY21kOyBmb3IgZXhhbXBsZSwgaWYgZ3BnX25hbWUgaXMgInRlc3RlciIKKworICAgIGV4ZWN2ZSgiL3Vzci9iaW4vZ3BnIiwgWyJncGciLCAiLS1iYXRjaCIsICItLW5vLXZlcmJvc2UiLAorICAgICItLXBhc3NwaHJhc2UtZmQiLCAiMyIsICItdSIsICJcInRlc3RlclwiIiwgIi1zbyIsICItIl0sIFsvKiAyMCB2YXJzICovXSkgPSAwCisKKyAgICBleGVjdmUoIi91c3IvYmluL2dwZyIsIFsiZ3BnIiwgIi0tYmF0Y2giLCAiLS1uby12ZXJib3NlIiwgIi0tbm8tYXJtb3IiLAorICAgICItLXBhc3NwaHJhc2UtZmQiLCAiMyIsICItLW5vLXNlY21lbS13YXJuaW5nIiwgIi11IiwgInRlc3RlciIsICItc2JvIi4uLCkgPSAwCisKK2l0IGNhbiBiZSBmaXhlZCBieSByZW1vdmluZyB0aGUgcXVvdGUgYXJvdW5kICV7Z3BnX25hbWV9IHdoZW4gZGVmaW5lCitfX2dwZ19jaGVja19wYXNzd29yZF9jbWQgaW4gbWFjcm9zL21hY3JvcywgbGlrZSBiZWxvdywgYnV0IGlmIGdwZ19uYW1lIGluY2x1ZGVzCitzcGFjZSwgaXQgd2lsbCBub3Qgd29yay4KKworICAgICAlX19ncGdfY2hlY2tfcGFzc3dvcmRfY21kICAgICAgICV7X19ncGd9IFwKKyAgICAgICAgZ3BnIC0tYmF0Y2ggLS1uby12ZXJib3NlIC0tcGFzc3BocmFzZS1mZCAzIC11ICV7X2dwZ19uYW1lfSAtc28gLQorCitUaGUgcG9wdFBhcnNlQXJndlN0cmluZyBmdW5jdGlvbiBpcyB1c2VkIHRvIHBhcnNlIF9ncGdfc2lnbl9jbWQsIHNvIHVzaW5nCitwb3B0UGFyc2VBcmd2U3RyaW5nIHRvIHBhcnNlIF9fZ3BnX2NoZWNrX3Bhc3N3b3JkX2NtZCB0byBmaXggdGhpcyBpc3N1ZS4KKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgcnBtZGIvc2lnbmF0dXJlLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ycG1kYi9zaWduYXR1cmUuYyBiL3JwbWRiL3NpZ25hdHVyZS5jCitpbmRleCBjMzVlMGFiLi4wMTZlOGQxIDEwMDY0NAorLS0tIGEvcnBtZGIvc2lnbmF0dXJlLmMKKysrKyBiL3JwbWRiL3NpZ25hdHVyZS5jCitAQCAtNTI5LDcgKzUyOSw3IEBAIGludCBycG1DaGVja1Bhc3NQaHJhc2UoY29uc3QgY2hhciAqIHBhc3NQaHJhc2UpCisgICAJCSh2b2lkKSBzZXRlbnYoIkdOVVBHSE9NRSIsIGdwZ19wYXRoLCAxKTsKKyAKKyAJICAgIGNtZCA9IHJwbUV4cGFuZCgiJXs/X19ncGdfY2hlY2tfcGFzc3dvcmRfY21kfSIsIE5VTEwpOworLQkgICAgcmMgPSBhcmd2U3BsaXQoJmF2LCBjbWQsIE5VTEwpOworKwkgICAgcmMgPSBwb3B0UGFyc2VBcmd2U3RyaW5nKGNtZCwgTlVMTCwgKGNvbnN0IGNoYXIgKioqKSZhdik7CisgCSAgICBpZiAoIXJjKQorIAkJcmMgPSBleGVjdmUoYXZbMF0sIChjaGFyICpjb25zdCAqKWF2KzEsIGVudmlyb24pOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kYmNvbnZlcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kYmNvbnZlcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkYmYwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2RiY29udmVydC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworSGFjayB0byBwcmV2ZW50IHVubmVlZGVkIGRlbW8gYXBwIGZyb20gYnVpbGRpbmcgb24gb2xkZXIgbGliYword2hlcmUgaXQgd2lsbCBicmVhayB0aGUgYnVpbGQKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L3Rvb2xzL01ha2VmaWxlLmFtCitAQCAtMjksNyArMjksNyBAQCBFWFRSQV9QUk9HUkFNUyA9IG5peC1jb3B5LWNsb3N1cmUgbml4LWVuCisgCXhpdS1pbnN0YW50aWF0ZSB4aXUtc3RvcmUKKyBub2luc3RfUFJPR1JBTVMgPQorIAorLUVYVFJBX1BST0dSQU1TICs9IGF1Z3Rvb2wgY3VkZnRvb2wgZGJjb252ZXJ0IGRlYnVnZWRpdCBcCisrRVhUUkFfUFJPR1JBTVMgKz0gYXVndG9vbCBjdWRmdG9vbCBkZWJ1Z2VkaXQgXAorIAluaXgtYnVpbGQgbml4LWNoYW5uZWwgbml4LWNvbGxlY3QtZ2FyYmFnZSBcCisgCW5peC1sb2cyeG1sIG5peC1wcmVmZXRjaC11cmwgbml4LXB1bGwgbml4LXB1c2ggXAorIAl4aXUtZWNobyB4aXUtaGFzaCBcCitAQCAtNjQsNyArNjQsNyBAQCBwa2diaW5fUFJPR1JBTVMgPQlcCisgCXJwbWNhY2hlIHJwbWRpZ2VzdCBycG1yZXBvIHJwbXNwZWNkdW1wIFwKKyAJcnBtY21wIHJwbWRlcHMgcnBtZGVwcy1vZWNvcmUgc3FsaXRlMyBAV0lUSF9LRVlVVElMU19SUE1LRVlAIEBXSVRIX0xJQkVMRl9ERUJVR0VESVRACisgaWYgV0lUSF9EQgorLXBrZ2Jpbl9QUk9HUkFNUyArPQlkYmNvbnZlcnQKKytwa2diaW5fUFJPR1JBTVMgKz0JCisgZW5kaWYKKyBkaXN0X21hbl9NQU5TID0JCXJwbWdyZXAuMQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtc2Vndi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVmNWVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXNlZ3YucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorRHVyaW5nIHRoZSByZWNhbGN1bGF0aW9uIG9mIHRoZSBidWlsZGlkLCBpdCdzIG5lY2Vzc2FyeSB0byBjaGFuZ2UgdGhlIHdvcmQKK2JhY2sgdG8gdGhlIG9yaWdpbmFsIGVuZGlhbi4gIEhvd2V2ZXIsIGlmIHdlIGRvIHRoaXMgaW4tcGxhY2UsIHdlJ3ZlIGFsc28KK2FmZmVjdGVkIHRoZSBoZWFkZXJzIHRoYXQgd2UncmUgYWxzbyB3b3JraW5nIG9uLiAgVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMgaXMKK3dlIGNhbiBubyBsb25nZXIgcmVseSBvbiAnc2hfdHlwZScgYXMgaXQgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkLgorCitUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBhbnkgdGltZSB3ZSB0cmFuc2xhdGUgdGhlIGxvYWRlZCBkYXRhIHRvIHRoZSBtYWNoaW5lCitmb3JtYXQsIHdlIG9ubHkgZG8gaXQgaW4gYSBiYWNrdXAgY29weSBhbmQgbmV2ZXIgdGhlIG9yaWdpbmFsIGNvcHkuCisKK05vdGU6IGluIGFsbCBvdGhlciBwbGFjZXMgYSBiYWNrdXAgY29weSB3YXMgdXNlZCwganVzdCBub3QgYnVpbGRpZCBwcm9jZXNzaW5nLgorCitBbHNvIHRoZSBwcm9jZXNzICguLi4pIGZ1bmN0aW9uIHdhcyBtb2RpZmllZCB0byB2ZXJpZnkgdGhlIGRhdGEgaXMgbm90CitOVUxMIGFzIHdlbGwuICBUaGlzIGlzIGFuIGV4dHJhIGNoZWNrIGFuZCBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC90b29scy9kZWJ1Z2VkaXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9kZWJ1Z2VkaXQuYworKysrIHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKK0BAIC0xNDQ1LDIxICsxNDQ1LDI0IEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAgICAgYXV0byBpbmxpbmUgdm9pZCBwcm9jZXNzIChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICAgeworICAgICAgIG1lbWNodW5rIGNodW5rID0geyAuZGF0YSA9ICh2b2lkICopIGRhdGEsIC5zaXplID0gc2l6ZSB9OworLSAgICAgIGhhc2hGdW5jdGlvbkNvbnRleHRVcGRhdGVNQyAoJmN0eCwgJmNodW5rKTsKKysgICAgICBpZiAoZGF0YSAhPSBOVUxMICYmIHNpemUgIT0gMCkKKysgICAgICAgIGhhc2hGdW5jdGlvbkNvbnRleHRVcGRhdGVNQyAoJmN0eCwgJmNodW5rKTsKKyAgICAgfQorICAgICB1bmlvbgorICAgICB7CisgICAgICAgR0VsZl9FaGRyIGVoZHI7CisgICAgICAgR0VsZl9QaGRyIHBoZHI7CisgICAgICAgR0VsZl9TaGRyIHNoZHI7CistICAgIH0gdTsKKy0gICAgRWxmX0RhdGEgeCA9IHsgLmRfdmVyc2lvbiA9IEVWX0NVUlJFTlQsIC5kX2J1ZiA9ICZ1IH07CisrICAgIH0gdTEsIHUyOworKyAgICBFbGZfRGF0YSBzcmMgID0geyAuZF92ZXJzaW9uID0gRVZfQ1VSUkVOVCwgLmRfYnVmID0gJnUxIH07CisrICAgIEVsZl9EYXRhIGRlc3QgPSB7IC5kX3ZlcnNpb24gPSBFVl9DVVJSRU5ULCAuZF9idWYgPSAmdTIgfTsKKyAKKy0gICAgeC5kX3R5cGUgPSBFTEZfVF9FSERSOworLSAgICB4LmRfc2l6ZSA9IHNpemVvZiB1LmVoZHI7CistICAgIHUuZWhkciA9IGRzby0+ZWhkcjsKKy0gICAgdS5laGRyLmVfcGhvZmYgPSB1LmVoZHIuZV9zaG9mZiA9IDA7CistICAgIGlmIChlbGY2NF94bGF0ZXRvbSAoJngsICZ4LCBkc28tPmVoZHIuZV9pZGVudFtFSV9EQVRBXSkgPT0gTlVMTCkKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX0VIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEuZWhkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIuZWhkcjsKKysgICAgdTEuZWhkciA9IGRzby0+ZWhkcjsKKysgICAgdTEuZWhkci5lX3Bob2ZmID0gdTEuZWhkci5lX3Nob2ZmID0gMDsKKysgICAgaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgICAgICAgeworICAgICAgIGJhZDoKKyAJZnByaW50ZiAoc3RkZXJyLCAiRmFpbGVkIHRvIGNvbXB1dGUgaGVhZGVyIGNoZWNrc3VtOiAlc1xuIiwKK0BAIC0xNDY3LDI5ICsxNDcwLDMxIEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAJZXhpdCAoMSk7CisgICAgICAgfQorIAorLSAgICB4LmRfdHlwZSA9IEVMRl9UX1BIRFI7CistICAgIHguZF9zaXplID0gc2l6ZW9mIHUucGhkcjsKKysgICAgc3JjLmRfdHlwZSA9IEVMRl9UX1BIRFI7CisrICAgIHNyYy5kX3NpemUgPSBzaXplb2YgdTEucGhkcjsKKysgICAgZGVzdC5kX3NpemUgPSBzaXplb2YgdTIucGhkcjsKKyAgICAgZm9yIChpID0gMDsgaSA8IGRzby0+ZWhkci5lX3BobnVtOyArK2kpCisgICAgICAgeworLQlpZiAoZ2VsZl9nZXRwaGRyIChkc28tPmVsZiwgaSwgJnUucGhkcikgPT0gTlVMTCkKKysJaWYgKGdlbGZfZ2V0cGhkciAoZHNvLT5lbGYsIGksICZ1MS5waGRyKSA9PSBOVUxMKQorIAkgIGdvdG8gYmFkOworLQlpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrCWlmIChlbGY2NF94bGF0ZXRvbSAoJmRlc3QsICZzcmMsIGRzby0+ZWhkci5lX2lkZW50W0VJX0RBVEFdKSA9PSBOVUxMKQorIAkgIGdvdG8gYmFkOworLQlwcm9jZXNzICh4LmRfYnVmLCB4LmRfc2l6ZSk7CisrCXByb2Nlc3MgKGRlc3QuZF9idWYsIGRlc3QuZF9zaXplKTsKKyAgICAgICB9CisgCistICAgIHguZF90eXBlID0gRUxGX1RfU0hEUjsKKy0gICAgeC5kX3NpemUgPSBzaXplb2YgdS5zaGRyOworKyAgICBzcmMuZF90eXBlID0gRUxGX1RfU0hEUjsKKysgICAgc3JjLmRfc2l6ZSA9IHNpemVvZiB1MS5zaGRyOworKyAgICBkZXN0LmRfc2l6ZSA9IHNpemVvZiB1Mi5zaGRyOworICAgICBmb3IgKGkgPSAwOyBpIDwgZHNvLT5laGRyLmVfc2hudW07ICsraSkKKyAgICAgICBpZiAoZHNvLT5zY25baV0gIT0gTlVMTCkKKyAJeworLQkgIHUuc2hkciA9IGRzby0+c2hkcltpXTsKKy0JICB1LnNoZHIuc2hfb2Zmc2V0ID0gMDsKKy0JICBpZiAoZWxmNjRfeGxhdGV0b20gKCZ4LCAmeCwgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisrCSAgdTEuc2hkciA9IGRzby0+c2hkcltpXTsKKysJICB1MS5zaGRyLnNoX29mZnNldCA9IDA7CisrCSAgaWYgKGVsZjY0X3hsYXRldG9tICgmZGVzdCwgJnNyYywgZHNvLT5laGRyLmVfaWRlbnRbRUlfREFUQV0pID09IE5VTEwpCisgCSAgICBnb3RvIGJhZDsKKy0JICBwcm9jZXNzICh4LmRfYnVmLCB4LmRfc2l6ZSk7CisrCSAgcHJvY2VzcyAoZGVzdC5kX2J1ZiwgZGVzdC5kX3NpemUpOworIAorLQkgIGlmICh1LnNoZHIuc2hfdHlwZSAhPSBTSFRfTk9CSVRTKQorKwkgIGlmICh1MS5zaGRyLnNoX3R5cGUgIT0gU0hUX05PQklUUykKKyAJICAgIHsKKyAJICAgICAgRWxmX0RhdGEgKmQgPSBlbGZfcmF3ZGF0YSAoZHNvLT5zY25baV0sIE5VTEwpOworIAkgICAgICBpZiAoZCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2MzMTAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZGVidWdlZGl0LXZhbGlkLWZpbGUtdG8tZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKQEAgLTAsMCArMSw2NSBAQAorZGVidWdlZGl0OiBmaXggc2VnbWVudCBmYXVsdCB3aGlsZSBmaWxlJ3MgYnNzIG9mZnNldCBoYXZlIGEgbGFyZ2UgbnVtYmVyCisKK1doaWxlIEVMRl9DX1JEV1JfTU1BUCB3YXMgdXNlZCwgZWxmX2JlZ2luIGludm9rZWQgbW1hcCgpIHRvIG1hcCBmaWxlCitpbnRvIG1lbW9yeS4gV2hpbGUgdGhlIGZpbGUncyBic3MgT2Zmc2V0IGhhcyBhIGxhcmdlIG51bWJlciwgZWxmX3VwZGF0ZQorY2FjdWxhdGVkIGZpbGUgc2l6ZSBieSBfX2VsZjY0X3VwZGF0ZW51bGxfd3Jsb2NrIGFuZCB0aGUgc2l6ZSB3YXMKK2VubGFyZ2VkLgorCitJbiB0aGlzIHNpdHVhdGlvbiwgZWxmX3VwZGF0ZSBpbnZva2VkIGZ0cnVuY2F0ZSB0byBlbmxhcmdlIHRoZSBmaWxlLAorYW5kIG1lbW9yeSBzaXplIChlbGYtPm1heGltdW1fc2l6ZSkgYWxzbyB3YXMgaW5jb3JyZWN0bHkgdXBkYXRlZC4KK1RoZXJlIHdhcyBzZWdtZW50IGZhdWx0IGluIGVsZl9lbmQgd2hpY2ggaW52b2tlZCBtdW5tYXAgd2l0aCB0aGUKK2xlbmd0aCBpcyB0aGUgZW5sYXJnZWQgZmlsZSBzaXplLCBub3QgdGhlIG1tYXAncyBsZW5ndGguCisKK0JlZm9yZSB0aGUgYWJvdmUgb3BlcmF0aW9ucywgaW52b2tlIGVsZl9iZWdpbi9lbGZfdXBkYXRlL2VsZl9lbmQKK3dpdGggRUxGX0NfUkRXUiBhbmQgRUxGX0ZfTEFZT1VUIHNldCB0byBlbmxhcmdlIHRoZSBhYm92ZSBmaWxlLCBpdAorY291bGQgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHNhZmUgZm9yIHRoZSBmb2xsb3dpbmcgZWxmIG9wZXJhdGlvbnMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgdG9vbHMvZGVidWdlZGl0LmMgfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKKworSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvZGVidWdlZGl0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvdG9vbHMvZGVidWdlZGl0LmMKKysrKyBycG0tNS40LjE0L3Rvb2xzL2RlYnVnZWRpdC5jCitAQCAtMTUyNSw2ICsxNTI1LDI4IEBAIGhhbmRsZV9idWlsZF9pZCAoRFNPICpkc28sIEVsZl9EYXRhICpidWkKKyAgIH0KKyB9CisgCisrLyogSXQgYXZvaWRlZCB0aGUgc2VnbWVudCBmYXVsdCB3aGlsZSBmaWxlJ3MgYnNzIG9mZnNldCBoYXZlIGEgbGFyZ2UgbnVtYmVyLgorKyAgIFNlZSBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTEwMTk3MDcKKysgICAgICAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDIwODQyIGZvciBkZXRhaWwuICovCisrdm9pZCB2YWxpZF9maWxlKGludCBmZCkKKyt7CisrICBFbGYgKmVsZiA9IGVsZl9iZWdpbiAoZmQsIEVMRl9DX1JEV1IsIE5VTEwpOworKyAgaWYgKGVsZiA9PSBOVUxMKQorKyAgeworKyAgICBlcnJvciAoMSwgMCwgImVsZl9iZWdpbjogJXMiLCBlbGZfZXJybXNnICgtMSkpOworKyAgICByZXR1cm47CisrICB9CisrCisrICBlbGZfZmxhZ2VsZiAoZWxmLCBFTEZfQ19TRVQsIEVMRl9GX0xBWU9VVCk7CisrCisrICBpZiAoZWxmX3VwZGF0ZSAoZWxmLCBFTEZfQ19XUklURSkgPCAwKQorKyAgICBlcnJvciAoMSwgMCwgImVsZl91cGRhdGU6ICVzIiwgZWxmX2Vycm1zZyAoLTEpKTsKKysKKysgIGVsZl9lbmQgKGVsZik7CisrCisrICByZXR1cm47CisrfQorKworIGludAorIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworQEAgLTE2MjEsNiArMTY0Myw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCAoMSk7CisgICAgIH0KKyAKKysgIC8qIE1ha2Ugc3VyZSB0aGUgZmlsZSBpcyB2YWxpZC4gKi8KKysgIHZhbGlkX2ZpbGUoZmQpOworKworICAgZHNvID0gZmRvcGVuX2RzbyAoZmQsIGZpbGUpOworICAgaWYgKGRzbyA9PSBOVUxMKQorICAgICBleGl0ICgxKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vZnN0YWNrLXByb3RlY3Rvci1jb25maWd1cmUtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2YWY0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL2ZzdGFjay1wcm90ZWN0b3ItY29uZmlndXJlLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1NvbWUgb3B0aW9ucyBjaGVja2VkIGluIHRoaXMgbG9vcCBhcmUgbmVlZGluZyBsaW5raW5nIHRvIGZpbmQgb3V0CitpZiB0aGUgb3B0aW9uIGNhbiBiZSB1c2VkIG9yIG5vdCBlLmcuIC1mc3RhY2stcHJvdGVjdG9yIHdoaWNoIG5lZWRzCitsaWJzc3AgdG8gYmUgc3RhZ2VkIGFuZCBhdmFpbGFibGUgZm9yIGNvbXBpbGVyIHRvIGxpbmsgYWdhaW5zdAorVGhlcmVmb3JlIHdlIGNoYW5nZSB0aGUgY29tcGlsZSBvbmx5IGNoZWNrIHRvIGNvbXBpbGUgYW5kIGxpbmsgY2hlY2sKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtLTUuNC4xNC9jb25maWd1cmUuYWMKK0BAIC0yMDEsNyArMjAxLDcgQEAgZG5sICMgR05VIEdDQyAodXN1YWxseSAiZ2NjIikKKyAgbXlfc2F2ZV9jZmxhZ3M9IiRDRkxBR1MiCisgIENGTEFHUz0kYworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgR0NDIHN1cHBvcnRzICRjXSkKKy0gQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSldLAorKyBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdKV0sCisgICAgIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0KKyAgICAgW215X2NmbGFncz0kY10sCisgICAgIFtBQ19NU0dfUkVTVUxUKFtub10pXQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vaGVhZGVyLWluY2x1ZGUtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vaGVhZGVyLWluY2x1ZGUtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmIxODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9oZWFkZXItaW5jbHVkZS1maXgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtZGIuaAorKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuaAorQEAgLTksNiArOSw3IEBACisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxtaXJlLmg+CisrI2luY2x1ZGUgPGVycm5vLmg+CisgCisgI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisgI2luY2x1ZGUgPHJwbXRhZy5oPgkvKiBYWFggSGVhZGVyIHR5cGVkZWYgKi8KK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbXRhZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWRiL3JwbXRhZy5oCisrKysgcnBtLTUuNC4xNC9ycG1kYi9ycG10YWcuaAorQEAgLTcsNiArNyw3IEBACisgCisgI2luY2x1ZGUgPHJwbWlvdHlwZXMuaD4KKyAjaW5jbHVkZSA8cnBtc3cuaD4KKysjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgI2lmZGVmIF9fY3BsdXNwbHVzCisgZXh0ZXJuICJDIiB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhYjllYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL21ha2VmaWxlLWFtLWV4ZWMtaG9vay5wYXRjaApAQCAtMCwwICsxLDMzIEBACitycG06IFJlc29sdmUgcGFyYWxsZWwgaW5zdGFsbCBpc3N1ZSB3aGVuIGluc3RhbGxpbmcgbHVhCisKK1doZW4gbHVhIGlzIGJlaW5nIGluc3RhbGxlZCBvbiBzb21lIHN5c3RlbXMgdGhhdCBhcmUgYmVpbmcgcnVuIHdpdGggaGlnaCBsZXZlbHMKK29mIHBhcmFsbGVsaXphdGlvbiB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgaW5zdGFsbC1kYXRhLWFtIGFuZCBpbnN0YWxsLWV4ZWMtaG9vaworYXJlIHByb2Nlc3NlZCBhdCB0aGUgc2FtZSBvciBhIHZlcnkgc2hvcnQgdGltZSBhcGFydC4gVGhpcyBjYXVzZXMKK2luc3RhbGwtcGtnYmluUFJPR1JBTVMsIHdoaWNoIGlzIGEgZGVwZW5kZW5jeSBvZiBib3RoLCB0byBiZSBydW4gYXQgYXJvdW5kIHRoZQorc2FtZSB0aW1lIFRoaXMgc29tZXRpbWVzIGNhdXNlcyBmaWxlIGNvbnRlbnRpb24gYW5kIHdpbGwgc29tZXRpbWVzIGJlIGluIGEgc3RhdGUKK3doZXJlIGluc3RhbGwtZXhlYy1ob29rIGlzIGxvb2tpbmcgZm9yIGEgZmlsZSB0aGF0IGlzIGJlaW5nIGluc3RhbGxlZCBvciBib3RoCitpbnN0YWxsLXBrZ2JpblBST0dSQU1TIGJlaW5nIHJ1biBhcmUgaW5zdGFsbGluZyB0aGUgc2FtZSBmaWxlIGFuZCBmYWlsIGJlY2F1c2UKK2l0IGNhbm5vbiBjcmVhdGUgYSBuZXcgZmlsZS4KKworVGhpcyBwYXRjaCBhbGxvd3MgaW5zdGFsbC1leGVjLWhvb2sgdG8gYmUgY2FsbGVkIGJ5IGluc3RhbGwtZGF0YS1hbSBpbnN0ZWFkIG9mCitpbnN0YWxsLWV4ZWMtYW0uIEl0IGFsc28gcmVtb3ZlZCB0aGUgZGVwZW5kZW5jeSBpbiBpbnN0YWxsLWRhdGEtaG9vayBvbgoraW5zdGFsbC1wa2diaW5QUk9HUkFNUy4gVGhpcyBtZWFucyBpbnN0YWxsLXBrZ2JpblBST0dSQU1TIHdpbGwgb25seSBiZSBydW4gb25jZQorc28gdGhlcmUgd2hvdWxkIGJlIGFueSBmaWxlIGNvbnRlbnRpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNb3JnYW4gTGl0dGxlIDxtb3JnYW4ubGl0dGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorQEAgLTMyNiw3ICszMjYsNyBAQCBjbGVhbi1sb2NhbDoKKyAjIFhYWCBCdWlsZCAmIGluc3RhbGwgYXMgcnBtbHVhL3JwbWx1YWMgd2l0aCBoYXJkbGlua3MgdG8gbHVhL2x1YWMgcG9zdCBpbnN0YWxsLgorICMgWFhYIENWUyBoYXMgbHVhL2x1YWMgc3ViLWRpcmVjdG9yaWVzIGluIHRoZSBBdHRpYyB0aGF0IGNvbGxpZGUgd2l0aCB0aGUKKyAjIFhYWCBsdWEvbHVhYyBleGVjdXRhYmxlIG5hbWVzIHdoZW4gdXNpbmcgY3ZzIHVwZGF0ZS4KKy1pbnN0YWxsLWV4ZWMtaG9vazoJaW5zdGFsbC1wa2diaW5QUk9HUkFNUworK2luc3RhbGwtZGF0YS1ob29rOgkKKyAJbWtkaXIgLXAgJChERVNURElSKSQocGtnYmluZGlyKQorIAkkKF9fUk0pIC1mICQoREVTVERJUikkKHBrZ2JpbmRpcikvbHVhCisgCSQoX19MTikgJChERVNURElSKSQocGtnYmluZGlyKS9ycG1sdWEgJChERVNURElSKSQocGtnYmluZGlyKS9sdWEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vbm8tbGRmbGFncy1pbi1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEwNjIzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL25vLWxkZmxhZ3MtaW4tcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK0Rvbid0IHB1dCBMREZMQUdTIGludG8gdGhlIExpYnMucHJpdmF0ZSwgYWxsIGl0IGdlbmVyYWxseSBjb250YWlucyBpcyBhIGxpbmtlcgoraGFzaCBzZWxlY3Rpb24gKGhhcm1sZXNzKSBhbmQgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGxpYmRpciBpbiB0aGUgc3lzcm9vdAorKGFjdGl2ZWx5IGhhcm1mdWwpLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3JwbS5wYy5pbiBiL3NjcmlwdHMvcnBtLnBjLmluCitpbmRleCA4MjkzNDcxLi4yZWE0NjljIDEwMDY0NAorLS0tIGEvc2NyaXB0cy9ycG0ucGMuaW4KKysrKyBiL3NjcmlwdHMvcnBtLnBjLmluCitAQCAtMTcgKzE3IEBAIExpYnM6IC1MJHtsaWJkaXJ9IC1scnBtYnVpbGQke3N1ZmZpeH0gLWxycG0ke3N1ZmZpeH0gLWxycG1kYiR7c3VmZml4fSAtbHJwbWlvJHtzCistTGlicy5wcml2YXRlOiBATERGTEFHU0AgQExJQlNACisrTGlicy5wcml2YXRlOiBATElCU0AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3BlcmZpbGVfcnBtZGVwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzJjOWYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9iYXNoCisKKzogJHtSUE1ERVBTOj1ycG1kZXBzfQorCitwcm9jZXNzKCkgeworCXdoaWxlIHJlYWQgZmlsZV9uYW1lIDsgZG8KKwkJcHJpbnRmICIlc1x0IiAke2ZpbGVfbmFtZX0KKwkJaWYgWyAhIC1kICRmaWxlX25hbWUgXTsgdGhlbgorCQkJcHJpbnRmICIlcyAiICQoJFJQTURFUFMgJDEgJGZpbGVfbmFtZSB8IHNlZCAtZSAncyxycG1saWIoLiosLCcgLWUgJ3MsXChbPD5cPV1cKyBcK1teIF0qXCksKFwxKSxnJykKKwkJZmkKKwkJcHJpbnRmICJcbiIKKwlkb25lCit9CisKK3VzYWdlKCkgeworCWVjaG8gIiQwIHstUHwtLXByb3ZpZGVzfSB7LVJ8LS1yZXF1aXJlc30gRklMRSAuLi4iCit9CisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKyAgIGNhc2UgIiQxIiBpbgorCS0tcnBtZGVwcykKKwkJUlBNREVQUz0kMgorCQlzaGlmdAorCQlzaGlmdAorCQk7OworCS1SfC0tcmVxdWlyZXMpCisJCXByb2Nlc3NfdHlwZT0tLXJlcXVpcmVzCisJCXNoaWZ0CisJCTs7CisJLVB8LS1wcm92aWRlcykKKwkJcHJvY2Vzc190eXBlPS0tcHJvdmlkZXMKKwkJc2hpZnQKKwkJOzsKKwkqKQorCQlicmVhazsKKwkJOzsKKyAgIGVzYWMKK2RvbmUKKworaWYgWyAteiAiJHByb2Nlc3NfdHlwZSIgXTsgdGhlbgorCXVzYWdlCisJZXhpdCAxCitmaQorCitpZiBbICQjIC1ndCAwIF07IHRoZW4KKwlmaW5kICIkQCIgfCBwcm9jZXNzICRwcm9jZXNzX3R5cGUKKwlleGl0ICQ/CitmaQorCitwcm9jZXNzICRwcm9jZXNzX3R5cGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3B5dGhvbi1ycG0tcnBtc2Vuc2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzhhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK3JwbW1vZHVsZS5jOiBFeHBvcnQgYSBmZXcgYWRkaXRpb25hbCBSUE1TRU5TRSB2YWx1ZXMKKworV2Ugd2FudCB0byBzZWUgdGhlIFJQTVNFTlNFX1NDUklQVCB2YWx1ZXMgZm9yIHVzZSB3aXRoIFNNQVJULiAgV2UgYWxzbword2FudCB0byBzZWUgdGhlIE1JU1NJTkdPSyB2YWx1ZSBzbyB3ZSBjYW4gYXZvaWQgcmVjb21tZW5kZWQgcGFja2FnZXMgY2F1c2luZworZmFpbHVyZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9weXRob24vcnBtbW9kdWxlLmMKKysrKyBycG0tNS40LjE0L3B5dGhvbi9ycG1tb2R1bGUuYworQEAgLTQ5NCwxMiArNDk0LDE2IEBAIHZvaWQgaW5pdF9ycG0odm9pZCkKKyAgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9FUVVBTCk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfTk9URVFVQUwpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX0ZJTkRfUkVRVUlSRVMpOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1BSRVJFUSk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BSRSk7CisgICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1QpOworICAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX1NDUklQVF9QUkVVTik7CistICAgIFJFR0lTVEVSX0VOVU0oUlBNU0VOU0VfU0NSSVBUX1BPU1RVTikKKysgICAgUkVHSVNURVJfRU5VTShSUE1TRU5TRV9TQ1JJUFRfUE9TVFVOKTsKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyAgICBSRUdJU1RFUl9FTlVNKFJQTVNFTlNFX01JU1NJTkdPSyk7CisgI2VuZGlmCisgCisgICAgIFJFR0lTVEVSX0VOVU0oUlBNREVQU19GTEFHX05PVVBHUkFERSk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9weXRob25kZXBzLnNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uZGVwcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODNiMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcHl0aG9uZGVwcy5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworWyAkIyAtZ2UgMSBdIHx8IHsKKyAgICBjYXQgPiAvZGV2L251bGwKKyAgICBleGl0IDAKK30KKworY2FzZSAkMSBpbgorLVJ8LS1yZXF1aXJlcykKKyAgICBzaGlmdAorICAgIGdyZXAgIi91c3IvXChsaWJbXi9dKlx8c2hhcmVcKS9weXRob25bXi9dKi8iID4vZGV2L251bGwgJiYgZWNobyAicHl0aG9uIgorICAgIGV4aXQgMAorICAgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTMtNjQzNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTA3ZThmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2gKQEAgLTAsMCArMSwxMDkgQEAKK0Zyb20gMDgxMDVhY2RhMWRhNjNkMzJmYmIxODU5NmEzZDZjM2UwYWExMDZkMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDEwIEp1biAyMDE1IDE0OjM2OjU2ICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBycG06IENWRS0yMDEzLTY0MzUKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitSZWZlcmVuY2U6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPUNWRS0yMDEzLTY0MzUKKworRGVzY3JpcHRpb246CitJdCB3YXMgZm91bmQgdGhhdCBSUE0gd3JvdGUgZmlsZSBjb250ZW50cyB0byB0aGUgdGFyZ2V0IGluc3RhbGxhdGlvbgorZGlyZWN0b3J5IHVuZGVyIGEgdGVtcG9yYXJ5IG5hbWUsIGFuZCB2ZXJpZmllZCBpdHMgY3J5cHRvZ3JhcGhpYyBzaWduYXR1cmUKK29ubHkgYWZ0ZXIgdGhlIHRlbXBvcmFyeSBmaWxlIGhhcyBiZWVuIHdyaXR0ZW4gY29tcGxldGVseS4gVW5kZXIgY2VydGFpbgorY29uZGl0aW9ucywgdGhlIHN5c3RlbSBpbnRlcnByZXRzIHRoZSB1bnZlcmlmaWVkIHRlbXBvcmFyeSBmaWxlIGNvbnRlbnRzCithbmQgZXh0cmFjdHMgY29tbWFuZHMgZnJvbSBpdC4gVGhpcyBjb3VsZCBhbGxvdyBhbiBhdHRhY2tlciB0byBtb2RpZnkKK3NpZ25lZCBSUE0gZmlsZXMgaW4gc3VjaCBhIHdheSB0aGF0IHRoZXkgd291bGQgZXhlY3V0ZSBjb2RlIGNob3NlbgorYnkgdGhlIGF0dGFja2VyIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbi4KKworT3JpZ2luYWwgUGF0Y2g6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9OTU2MjA3CisKK1NpZ25lZC1vZmYtYnk6IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBsaWIvZnNtLmMgICAgIHwgIDIgKy0KKyBycG1pby9ycG1pby5jIHwgMTggKysrKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2ZzbS5jIGIvbGliL2ZzbS5jCitpbmRleCAxZWU3ZTY3Li4wOTRlYjFkIDEwMDY0NAorLS0tIGEvbGliL2ZzbS5jCisrKysgYi9saWIvZnNtLmMKK0BAIC03MjYsNyArNzI2LDcgQEAgc3RhdGljIGludCBleHBhbmRSZWd1bGFyKEZTTV90IGZzbSwgcnBtcHNtIHBzbSwgcnBtY3Bpb190IGFyY2hpdmUsIGludCBub2RpZ2VzdCkKKyB7CisgICAgIEZEX3Qgd2ZkID0gTlVMTDsKKyAgICAgY29uc3Qgc3RydWN0IHN0YXQgKiBzdCA9ICZmc20tPnNiOworLSAgICBycG1fbG9mZl90IGxlZnQgPSBzdC0+c3Rfc2l6ZTsKKysgICAgcnBtX2xvZmZfdCBsZWZ0ID0gcnBtZmlGU2l6ZUluZGV4KGZzbUdldEZpKGZzbSksIGZzbS0+aXgpOworICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICogZmlkaWdlc3QgPSBOVUxMOworICAgICBwZ3BIYXNoQWxnbyBkaWdlc3RhbGdvID0gMDsKKyAgICAgaW50IHJjID0gMDsKK2RpZmYgLS1naXQgYS9ycG1pby9ycG1pby5jIGIvcnBtaW8vcnBtaW8uYworaW5kZXggY2QyMjNlOC4uMGIxMmUzMSAxMDA2NDQKKy0tLSBhL3JwbWlvL3JwbWlvLmMKKysrKyBiL3JwbWlvL3JwbWlvLmMKK0BAIC0xMzA5LDE1ICsxMzA5LDE5IEBAIGludCBGY2xvc2UoRkRfdCBmZCkKKyAgKiAtIGJ6b3BlbjoJWzEtOV0gaXMgYmxvY2sgc2l6ZSAobW9kdWxvIDEwMEspCisgICogLSBiem9wZW46CSdzJyBpcyBzbWFsbG1vZGUKKyAgKiAtIEhBQ0s6CScuJyB0ZXJtaW5hdGVzLCByZXN0IGlzIHR5cGUgb2YgSS9PCisrICogLSAgICAgICAgICAgICdVJyBzZXRzICptb2RlIHRvIHplcm8gKG5vIHBlcm1pc3Npb25zKSBpbnN0ZWFkIG9mIDA2NjYKKyAgKi8KKyBzdGF0aWMgdm9pZCBjdnRmbW9kZSAoY29uc3QgY2hhciAqbSwKKyAJCQkJY2hhciAqc3RkaW8sIHNpemVfdCBuc3RkaW8sCisgCQkJCWNoYXIgKm90aGVyLCBzaXplX3Qgbm90aGVyLAorLQkJCQljb25zdCBjaGFyICoqZW5kLCBpbnQgKiBmKQorKwkJCQljb25zdCBjaGFyICoqZW5kLCBpbnQgKmYsIG1vZGVfdCAqbW9kZSkKKyB7CisgICAgIGludCBmbGFncyA9IDA7CisgICAgIGNoYXIgYzsKKyAKKysgICAgaWYgKG1vZGUpCisrICAgICptb2RlID0gMDY2NjsKKysKKyAgICAgc3dpdGNoICgqbSkgeworICAgICBjYXNlICdhJzoKKyAJZmxhZ3MgfD0gT19XUk9OTFkgfCBPX0NSRUFUIHwgT19BUFBFTkQ7CitAQCAtMTM1Nyw2ICsxMzYxLDEwIEBAIHN0YXRpYyB2b2lkIGN2dGZtb2RlIChjb25zdCBjaGFyICptLAorIAkgICAgaWYgKC0tbnN0ZGlvID4gMCkgKnN0ZGlvKysgPSBjOworIAkgICAgY29udGludWU7CisgCSAgICBicmVhazsKKysJY2FzZSAnVSc6CisrCSAgICBpZiAobW9kZSkKKysJCSptb2RlID0gMDsKKysJICAgIGJyZWFrOworIAlkZWZhdWx0OgorIAkgICAgaWYgKC0tbm90aGVyID4gMCkgKm90aGVyKysgPSBjOworIAkgICAgY29udGludWU7CitAQCAtMTM4NSw3ICsxMzkzLDggQEAgZnByaW50ZihzdGRlcnIsICIqKiogRmRvcGVuKCVwLCVzKSAlc1xuIiwgZmQsIGZtb2RlLCBmZGJnKGZkKSk7CisgICAgIGlmIChmZCA9PSBOVUxMIHx8IGZtb2RlID09IE5VTEwpCisgCXJldHVybiBOVUxMOworIAorLSAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCBOVUxMKTsKKysgICAgY3Z0Zm1vZGUoZm1vZGUsIHN0ZGlvLCBzaXplb2Yoc3RkaW8pLCBvdGhlciwgc2l6ZW9mKG90aGVyKSwgJmVuZCwgTlVMTCwKKysgICAgICAgIE5VTEwpOworICAgICBpZiAoc3RkaW9bMF0gPT0gJ1wwJykKKyAJcmV0dXJuIE5VTEw7CisgICAgIHpzdGRpb1swXSA9ICdcMCc7CitAQCAtMTQzNiw3ICsxNDQ1LDcgQEAgRkRfdCBGb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbW9kZSkKKyB7CisgICAgIGNoYXIgc3RkaW9bMjBdLCBvdGhlclsyMF07CisgICAgIGNvbnN0IGNoYXIgKmVuZCA9IE5VTEw7CistICAgIG1vZGVfdCBwZXJtcyA9IDA2NjY7CisrICAgIG1vZGVfdCBwZXJtczsKKyAgICAgaW50IGZsYWdzID0gMDsKKyAgICAgRkRfdCBmZDsKKyAKK0BAIC0xNDQ0LDcgKzE0NTMsOCBAQCBGRF90IEZvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmZtb2RlKQorIAlyZXR1cm4gTlVMTDsKKyAKKyAgICAgc3RkaW9bMF0gPSAnXDAnOworLSAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCAmZmxhZ3MpOworKyAgICBjdnRmbW9kZShmbW9kZSwgc3RkaW8sIHNpemVvZihzdGRpbyksIG90aGVyLCBzaXplb2Yob3RoZXIpLCAmZW5kLCAmZmxhZ3MsCisrICAgICAgICAmcGVybXMpOworICAgICBpZiAoc3RkaW9bMF0gPT0gJ1wwJykKKyAJcmV0dXJuIE5VTEw7CisgCistLSAKKzEuOC40LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjE3OTVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLUNWRS0yMDE0LTgxMTgucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorRnJvbSA3MWM4MTJlZGYxNDMxYTk5NjdiZDk5YmE2ZmZhNmFiODllYjdlYzdjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVvbmFyZG8gU2FuZG92YWwgPGxlb25hcmRvLnNhbmRvdmFsLmdvbnphbGV6QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMTAgSnVuIDIwMTUgMTI6NTY6NTUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHJwbTogQ1ZFLTIwMTQtODExOAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1JlZmVyZW5jZToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTE2ODcxNQorCitEZXNjcmlwdGlvbjoKK0l0IHdhcyBmb3VuZCB0aGF0IFJQTSBjb3VsZCBlbmNvdW50ZXIgYW4gaW50ZWdlciBvdmVyZmxvdywKK2xlYWRpbmcgdG8gYSBzdGFjay1iYXNlZCBvdmVyZmxvdywgd2hpbGUgcGFyc2luZyBhIGNyYWZ0ZWQKK0NQSU8gaGVhZGVyIGluIHRoZSBwYXlsb2FkIHNlY3Rpb24gb2YgYW4gUlBNIGZpbGUuICBUaGlzIGNvdWxkCithbGxvdyBhbiBhdHRhY2tlciB0byBtb2RpZnkgc2lnbmVkIFJQTSBmaWxlcyBpbiBzdWNoIGEgd2F5IHRoYXQKK3RoZXkgd291bGQgZXhlY3V0ZSBjb2RlIGNob3NlbiBieSB0aGUgYXR0YWNrZXIgZHVyaW5nIHBhY2thZ2UKK2luc3RhbGxhdGlvbi4KKworT3JpZ2luYWwgUGF0Y2g6CitodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vYXR0YWNobWVudC5jZ2k/aWQ9OTYyMTU5CisKK1NpZ25lZC1vZmYtYnk6IExlb25hcmRvIFNhbmRvdmFsIDxsZW9uYXJkby5zYW5kb3ZhbC5nb256YWxlekBsaW51eC5pbnRlbC5jb20+CistLS0KKyBsaWIvY3Bpby5jIHwgMyArKysKKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saWIvY3Bpby5jIGIvbGliL2NwaW8uYworaW5kZXggMzgyZWViNi4uNzRkZGQ5YyAxMDA2NDQKKy0tLSBhL2xpYi9jcGlvLmMKKysrKyBiL2xpYi9jcGlvLmMKK0BAIC0yOTYsNiArMjk2LDkgQEAgaW50IHJwbWNwaW9IZWFkZXJSZWFkKHJwbWNwaW9fdCBjcGlvLCBjaGFyICoqIHBhdGgsIHN0cnVjdCBzdGF0ICogc3QpCisgICAgIHN0LT5zdF9yZGV2ID0gbWFrZWRldihtYWpvciwgbWlub3IpOworIAorICAgICBHRVRfTlVNX0ZJRUxEKGhkci5uYW1lc2l6ZSwgbmFtZVNpemUpOworKyAgICBpZiAobmFtZVNpemUgPD0gMCB8fCBuYW1lU2l6ZSA+IDQwOTYpIHsKKysgICAgICAgIHJldHVybiBDUElPRVJSX0JBRF9IRUFERVI7CisrICAgIH0KKyAKKyAgICAgKnBhdGggPSB4bWFsbG9jKG5hbWVTaXplICsgMSk7CisgICAgIHJlYWQgPSBGcmVhZCgqcGF0aCwgbmFtZVNpemUsIDEsIGNwaW8tPmZkKTsKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1hdXRvZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NzEyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tYXV0b2dlbi5wYXRjaApAQCAtMCwwICsxLDI1IEBACitSZW1vdmUgdGhlIHNhbml0eSBjaGVja2luZyBmcm9tIHRoZSBycG0gYXV0b2dlbi5zaC4gIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZQord2UgbWF5IGhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50LCBidXQgeWV0IGNvbXBhdGlibGUgdmVyc2lvbnMuICBJZiB3ZSBkbyBlbmQKK3VwIGJyZWFraW5nIHRoaW5ncywgd2UnbGwgZGVhbCB3aXRoIGl0IGF0IHRoYXQgdGltZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3N5Y2svYXV0b2dlbi5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9zeWNrL2F1dG9nZW4uc2gKKysrKyBycG0tNS40LjE0L3N5Y2svYXV0b2dlbi5zaAorQEAgLTM0LDEyICszNCw2IEBAIGxpYnRvb2xpemUgKCkgeworICAgICBldmFsICRfbGlidG9vbGl6ZSAkX2xpYnRvb2xpemVfYXJncworIH0KKyAKKy0jICAgcmVxdWlyZW1lbnRzIHNhbml0eSBjaGVjaworLVsgImBhdXRvbWFrZSAgIC0tdmVyc2lvbiB8IGhlYWQgLTFgIiAhPSAiJEFNViIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistWyAiYGF1dG9jb25mICAgLS12ZXJzaW9uIHwgaGVhZCAtMWAiICE9ICIkQUNWIiBdICYmIGVjaG8gIiRVU0FHRSIgIyAmJiBleGl0IDEKKy1bICJgbGlidG9vbGl6ZSAtLXZlcnNpb24gfCBoZWFkIC0xYCIgIT0gIiRMVFYiIF0gJiYgZWNobyAiJFVTQUdFIiAjICYmIGV4aXQgMQorLVsgImBnZXR0ZXh0aXplIC0tdmVyc2lvbiB8IGhlYWQgLTEgfCBzZWQgLWUgJ3M7Xi4qL1xcKGdldHRleHRpemVcXCk7XFwxOydgIiAhPSAiJEdUVCIgXSAmJiBlY2hvICIkVVNBR0UiICMgJiYgZXhpdCAxCistCisgZWNobyAiLS0tPiBnZW5lcmF0ZSBmaWxlcyB2aWEgR05VIGxpYnRvb2wgKGxpYnRvb2xpemUpIgorIGxpYnRvb2xpemUgLS1xdWlldCAtLWNvcHkgLS1mb3JjZSAtLWluc3RhbGwKKyBlY2hvICItLS0+IGdlbmVyYXRlIGZpbGVzIHZpYSBHTlUgYXV0b2NvbmYgKGFjbG9jYWwsIGF1dG9oZWFkZXIpIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNhbm9uYXJjaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jYW5vbmFyY2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhYjQ5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jYW5vbmFyY2gucGF0Y2gKQEAgLTAsMCArMSwxMzYgQEAKK2xpYi9ycG1yYy5jOiBVcGRhdGUgLS10YXJnZXQgcHJvY2Vzc2luZyB0byBzdXBwb3J0IGZ1bGwgR05VIGNhbm9uaWNhbCBhcmNoCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHdoZW4gdXNpbmcgLS10YXJnZXQsIFJQTSBzdXBwb3J0ZWQgdGhlIGZvcm1hdDoKKyAgPGFyY2g+CisgIDxhcmNoPi08b3M+CisgIDxhcmNoPi08b3M+LWdudQorICA8YXJjaD4tPGFyYml0cmFyeSBpdGVtcz4tPG9zPgorICA8YXJjaD4tPGFyYml0cmFyeSBpdGVtcz4tPG9zPi1nbnUKKworVGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBpdGVtcyB0bzoKKyAgPGFyY2g+CisgIDxhcmNoPi08b3M+CisgIDxhcmNoPi08b3M+LWdudQorICA8YXJjaD4tPHZlbmRvcj4tPG9zPgorICA8YXJjaD4tPHZlbmRvcj4tPG9zPi08ZXh0ZW5zaW9uPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC05MjUsOCArOTI1LDggQEAgc3RhdGljIHZvaWQgZ2V0TWFjaGluZUluZm8oaW50IHR5cGUsIC8qQAorIAorIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGNoYXIgKiogdGFyZ2V0LCBjb25zdCBjaGFyICoqIGNhbm9udGFyZ2V0KQorIHsKKy0KKy0gICAgY2hhciAqY2EgPSBOVUxMLCAqY28gPSBOVUxMLCAqY3QgPSBOVUxMOworKyAgICAvKiBjYSA9IGFyY2gsIGN2ID0gdmVuZG9yLCBjbyA9IG9zLCBjZSA9IGV4dGVuc2lvbiwgY3QgPSBjYW5vbiB0YXJnZXQgKi8KKysgICAgY2hhciAqY2EgPSBOVUxMLCAqY3YgPSBOVUxMLCAqY28gPSBOVUxMLCAqY2UgPSBOVUxMLCAqY3QgPSBOVUxMOworICAgICBpbnQgeDsKKyAKKyAgICAgLyogUmVidWlsZCB0aGUgY29tcGF0IHRhYmxlIHRvIHJlY2FsY3VsYXRlIHRoZSBjdXJyZW50IHRhcmdldCBhcmNoLiAgKi8KK0BAIC05MzYsMjMgKzkzNiw2MCBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgICAgIHJwbVNldFRhYmxlcyhSUE1fTUFDSFRBQkxFX0JVSUxEQVJDSCwgUlBNX01BQ0hUQUJMRV9CVUlMRE9TKTsKKyAKKyAgICAgaWYgKHRhcmdldCAmJiAqdGFyZ2V0KSB7CisrCS8qIEdOVSBjYW5vbmljYWwgZm9ybWF0IGlzOgorKwkgKiAgPGFyY2g+LTx2ZW5kb3I+LTxvcz5bLWV4dGVuc2lvbl0KKysJICoKKysJICogV2Ugc3VwcG9ydCB0aGUgYm90aCB0aGUgR05VIGNhbm9uaWNhbCBmb3JtYXQKKysJICogYXMgd2VsbCBhcyB0aGUgdHJhZGl0aW9uYWwgUlBNIGZvcm1hdHM6IAorKwkgKiAgPGFyY2g+CisrCSAqICA8YXJjaD4tPG9zPlstZ251XQorKwkgKi8KKyAJY2hhciAqYzsKKyAJLyogU2V0IGFyY2ggYW5kIG9zIGZyb20gc3BlY2lmaWVkIGJ1aWxkIHRhcmdldCAqLworIAljYSA9IHhzdHJkdXAoKnRhcmdldCk7CistCWlmICgoYyA9IHN0cmNocihjYSwgJy0nKSkgIT0gTlVMTCkgeworKwlpZiAoKGMgPSBzdHJjaHIoY2EsICctJykpID09IE5VTEwpIHsKKysJICAgIC8qIEZvcm1hdCBpcyA8YXJjaD4gKi8KKysJICAgIDsKKysJfSBlbHNlIHsKKyAJICAgICpjKysgPSAnXDAnOworLQkgICAgCistCSAgICBpZiAoKGNvID0gc3RycmNocihjLCAnLScpKSA9PSBOVUxMKSB7CistCQljbyA9IGM7CisrCSAgICBjdiA9IGM7CisrCisrCSAgICBpZiAoKGMgPSBzdHJjaHIoYywgJy0nKSkgPT0gTlVMTCkgeworKwkJLyogRm9ybWF0IGlzIDxhcmNoPi08b3M+ICovCisrCQljbyA9IGN2OworKwkJY3YgPSBOVUxMOworIAkgICAgfSBlbHNlIHsKKy0JCWlmICgheHN0cmNhc2VjbXAoY28sICItZ251IikpCistCQkgICAgKmNvID0gJ1wwJzsKKy0JCWlmICgoY28gPSBzdHJyY2hyKGMsICctJykpID09IE5VTEwpCistCQkgICAgY28gPSBjOworLQkJZWxzZQorLQkJICAgIGNvKys7CisrCQkqYysrID0gJ1wwJzsKKysJCWNvID0gYzsKKysKKysJCWlmICgoYyA9IHN0cmNocihjLCAnLScpKSA9PSBOVUxMKSB7CisrCQkgICAgLyogTWlnaHQgYmU6CisrCQkgICAgICogIDxhcmNoPi08dmVuZG9yPi08b3M+CisrCQkgICAgICogIDxhcmNoPi08b3M+LWdudQorKwkJICAgICAqLworKwkJICAgIGlmICgheHN0cmNhc2VjbXAoY28sICJnbnUiKSkgeworKwkJCS8qIEZvcm1hdCB3YXMgPGFyY2g+LTxvcz4tZ251ICovCisrCQkJY2UgPSBjbzsKKysJCQljbyA9IGN2OworKwkJCWN2ID0gTlVMTDsKKysJCSAgICB9CisrCQl9IGVsc2UgeworKwkJICAgIC8qIEZvcm1hdCB3YXMgPGFyY2g+LTx2ZW5kb3I+LTxvcz4tPGV4dGVuc2lvbj4gKi8KKysJCSAgICAqYysrID0gJ1wwJzsKKysJCSAgICBjZSA9IGM7CisrCQl9CisgCSAgICB9CisrCSAgICBpZiAoY3YgIT0gTlVMTCkgY3YgPSB4c3RyZHVwKGN2KTsKKyAJICAgIGlmIChjbyAhPSBOVUxMKSBjbyA9IHhzdHJkdXAoY28pOworKwkgICAgaWYgKGNlICE9IE5VTEwpIHsKKysJCS8qIFdlIG5lZWQgdG8gcHJlZml4IGl0IHdpdGggYSAiLSIgKi8KKysJCWNoYXIgKiBsY2UgPSBOVUxMOworKworKwkJbGNlID0geG1hbGxvYyhzdHJsZW4oY2UpICsgc2l6ZW9mKCItIikpOworKwkJc3ByaW50ZihsY2UsICItJXMiLCBjZSk7CisrCisrCQljZSA9IGxjZTsKKysJICAgIH0KKyAJfQorICAgICB9IGVsc2UgeworIAljb25zdCBjaGFyICphID0gTlVMTDsKK0BAIC05OTUsOCArMTAzMiwxNiBAQCBzdGF0aWMgdm9pZCBycG1SZWJ1aWxkVGFyZ2V0VmFycyhjb25zdCBjCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0IiwgTlVMTCwgY3QsIFJNSUxfUlBNUkMpOworICAgICBkZWxNYWNybyhOVUxMLCAiX3RhcmdldF9jcHUiKTsKKyAgICAgYWRkTWFjcm8oTlVMTCwgIl90YXJnZXRfY3B1IiwgTlVMTCwgY2EsIFJNSUxfUlBNUkMpOworKyAgICBpZiAoY3YpIHsKKysJZGVsTWFjcm8oTlVMTCwgIl90YXJnZXRfdmVuZG9yIik7CisrCWFkZE1hY3JvKE5VTEwsICJfdGFyZ2V0X3ZlbmRvciIsIE5VTEwsIGN2LCBSTUlMX1JQTVJDKTsKKysgICAgfQorICAgICBkZWxNYWNybyhOVUxMLCAiX3RhcmdldF9vcyIpOworICAgICBhZGRNYWNybyhOVUxMLCAiX3RhcmdldF9vcyIsIE5VTEwsIGNvLCBSTUlMX1JQTVJDKTsKKysgICAgaWYgKGNlKSB7CisrCWRlbE1hY3JvKE5VTEwsICJfZ251Iik7CisrCWFkZE1hY3JvKE5VTEwsICJfZ251IiwgTlVMTCwgY2UsIFJNSUxfUlBNUkMpOworKyAgICB9CisgCisgICAgIGlmIChjYW5vbnRhcmdldCkKKyAJKmNhbm9udGFyZ2V0ID0gY3Q7CitAQCAtMTAwNCw4ICsxMDQ5LDEyIEBAIHN0YXRpYyB2b2lkIHJwbVJlYnVpbGRUYXJnZXRWYXJzKGNvbnN0IGMKKyAJY3QgPSBfZnJlZShjdCk7CisgICAgIGNhID0gX2ZyZWUoY2EpOworICAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKysgICAgY3YgPSBfZnJlZShjdik7CisrICAgIC8qQC11c2VyZWxlYXNlZEAqLworICAgICBjbyA9IF9mcmVlKGNvKTsKKyAgICAgLypAPXVzZXJlbGVhc2VkQCovCisrICAgIGNlID0gX2ZyZWUoY2UpOworKyAgICAvKkAtdXNlcmVsZWFzZWRAKi8KKyB9CisgCisgdm9pZCBycG1GcmVlUnBtcmModm9pZCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1jaGVjay1yb290cGF0aC1yZWFzb25hYmxlbmVzcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTg2MDMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK3JwbTogY2hlY2sgaWYgdGhlIGFyZ3VtZW50KHJvb3RwYXRoKSBleGlzdHMgb3IgYmUgd3JpdGFibGUKKworV2hlbiB1c2VyIGV4ZWN1dGUgdGhlIGNvbW1hbmQgInJwbSAtcWFpIC0tcm9vdD0kZGlyIixpZiAkZGlyIGRvZXNuJ3QKK2V4aXN0IG9yIGlzIHVud3JpdGFibGUgYXMgcmVzdWx0IG9mIG1ha2luZyBhIHR5cG8gaW4gcm9vdHBhdGgsdGhlbgoraXQgd2lsbCBjcmVhdGUgZGlyZW50ICRkaXIgYW5kIHN1YmRpcmVjdG9yeS4KK1NvIHdlIHNob3VsZCBhZGQgdGhlIGNoZWNrIGZ1bmN0aW9uIHRvIGZpeCBpdCBiZWZvcmUgY3JlYXRpbmcgcmVsYXRpb25hbAorc3ViZGlyZWN0b3J5LGFuZCB3YXJuIHRoZSBpbmNvcnJlY3Qgcm9vdHBhdGggdG8gdXNlci4gSXQganVzdCBjaGVja3MgdGhlCityb290cGF0aCByZWFzb25hYmxlbmVzcyB3aGVuIHRoZSB1c2VyIGlucHV0IHRoZSBhcmd1bWVudCgtLXJvb3Q9Ly1yPSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBaaGl4aW9uZyBDaGkgPHpjaGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIHJwbXF2LmMgfCA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvcnBtcXYuYyBiL3JwbXF2LmMKK2luZGV4IDQwYzQyYmQuLjg4ZDg1YWIgMTAwNjQ0CistLS0gYS9ycG1xdi5jCisrKysgYi9ycG1xdi5jCitAQCAtMjA2LDYgKzIwNiw4IEBAIHN0YXRpYyBzdHJ1Y3QgcG9wdE9wdGlvbiBvcHRpb25zVGFibGVbXSA9IHsKKyAgICBQT1BUX1RBQkxFRU5ECisgfTsKKyAKKytzdGF0aWMgaW50IF9ycG1xdl9yb290cGF0aF9zdGF0ZSA9IDA7CisrCisgI2lmZGVmIF9fTUlOVF9fCisgLyogTWlOVCBjYW5ub3QgZHluYW1pY2FsbHkgaW5jcmVhc2UgdGhlIHN0YWNrLiAgKi8KKyBsb25nIF9zdGtzaXplID0gNjQgKiAxMDI0TDsKK0BAIC00MjcsNiArNDI5LDQxIEBAIHN0YXRpYyB2b2lkIGludGVncml0eV9jaGVjayhjb25zdCBjaGFyICpwcm9nbmFtZSwgZW51bSBtb2RlcyBwcm9nbW9kZV9udW0pCisgfQorICNlbmRpZgorIAorKy8qY2hlY2sgaWYgdGhlIHJvb3RkaXIgaXMgd3JpdGFibGUgb3IgZXhpc3RzICovCisraW50IGFjY2Vzc19maWxlKGNvbnN0IGNoYXIgKnJvb3RkaXIpCisreworKyAgICBpbnQgcmV0LHJvb3RkaXJfbGVuOworKworKyAgICBpZihyb290ZGlyID09IE5VTEwpIHsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKworKyAgICByb290ZGlyX2xlbiA9IHN0cmxlbihyb290ZGlyKTsKKysgICAgLyptYWtlIHN1cmUgdGhhdCBkaXJlbnQgYXJndW1lbnQgdHJhaWxpbmcgaXMgIi8iICovCisrICAgIGlmKCEocm9vdGRpcl9sZW4gJiYgcm9vdGRpcltyb290ZGlyX2xlbiAtIDFdID09ICcvJykpeworKyAgICAgICAgY2hhciAqdCA9IChjaGFyICopbWFsbG9jKHJvb3RkaXJfbGVuICsgMik7CisrICAgICAgICAqdCA9ICdcMCc7CisrICAgICAgICAodm9pZClzdHBjcHkoc3RwY3B5KHQscm9vdGRpciksIi8iKTsKKysgICAgICAgIHJldCA9IGFjY2Vzcyh0LEZfT0t8V19PSyk7CisrICAgICAgICBmcmVlKHQpOworKyAgICB9ZWxzZXsKKysgICAgICAgIHJldCA9IGFjY2Vzcyhyb290ZGlyLEZfT0t8V19PSyk7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrLypjaGVjayBpZiBpbnB1dCB0aGUgYXJndW1lbnQgIi0tcm9vdC8tciIgICovCisrdm9pZCBjaGVja19hcmd1bWVudF9yb290KGludCBhcmdjLGNoYXIgKiBjb25zdCBhcmd2W10pCisreworKyAgICBpbnQgaTsKKysgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworKyAgICAgICAgaWYoc3RybmNtcChhcmd2W2ldLCItLXJvb3Q9Iiw3KSA9PSAwIHx8IHN0cm5jbXAoYXJndltpXSwiLXI9IiwzKSA9PSAwKSB7CisrICAgICAgICAgICAgX3JwbXF2X3Jvb3RwYXRoX3N0YXRlID0gMTsKKysgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorK30KKysKKyAvKkAtYm91bmRzQCovIC8qIExDTDogc2VnZmF1bHQgKi8KKyAvKkAtbW9kc0AqLyAvKiBGSVg6IHNocnVnICovCisgI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19MQ0xJTlRfXykKK0BAIC00NzYsNiArNTEzLDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndikKKyAgICAgaW50IHh4OworICNlbmRpZgorIAkKKysgICAgY2hlY2tfYXJndW1lbnRfcm9vdChhcmdjLChjaGFyICpjb25zdCAqKWFyZ3YpOworKworICNpZiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fTENMSU5UX18pCisgICAgIGVudmlyb24gPSBlbnZwOworICNlbHNlCitAQCAtNzE1LDYgKzc1NCwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQorIAkJYXJnZXJyb3IoXygiYXJndW1lbnRzIHRvIC0tcm9vdCAoLXIpIG11c3QgYmVnaW4gd2l0aCBhIC8iKSk7CisgCSAgICBicmVhazsKKyAJfQorKyAgICAgICAgaWYgKF9ycG1xdl9yb290cGF0aF9zdGF0ZSkgeworKyAgICAgICAgICAgIGlmIChhY2Nlc3NfZmlsZShycG1pb1Jvb3REaXIpKSB7CisrICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCBfKCJJbnZhbGlkIGRpcmVjdG9yeTolcywgZW5zdXJlIGl0IGV4aXN0cyBvciBiZSB3cml0YWJsZVxuIikscnBtaW9Sb290RGlyKTsKKysgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKyAgICAgfQorIAorICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogaW50ZWdyaXR5LWNoZWNraW5nICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kYi1yZWR1Y2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGItcmVkdWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjkzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGItcmVkdWNlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworQ2hhbmdlIGNhY2hlIHNpemUgdG8gcmVkdWNlIHRoZSB1c2FnZSBvZiBkaXNrIHNwYWNlIGZyb20gNjJNQiB0byAyNk1CLiAKKworU2lnbmVkLW9mZi1ieTogTWVpIExlaSA8bGVpLm1laUBpbnRlbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9EQl9DT05GSUcuaW4KKysrKyBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorQEAgLTI5LDcgKzI5LDcgQEAgc2V0X3RocmVhZF9jb3VudCA2NAorIAorICMgPT09PT09PT09PT09PT09PSBNZW1vcnkgUG9vbAorICNYWFggaW5pdGlhbGl6aW5nIGRiZW52IHdpdGggc2V0X2NhY2hlc2l6ZSBoYXMgdW5pbXBsZW1lbnRlZCBwcmVyZXF1c2l0ZXMKKy0jc2V0X2NhY2hlc2l6ZSAwIDEwNDg1NzYgMCAKKytzZXRfY2FjaGVzaXplIDAgMTA0ODU3NiAwIAorIHNldF9tcF9tbWFwc2l6ZSAyNjg0MzU0NTYKKyAKKyAjID09PT09PT09PT09PT09PT0gTG9ja2luZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGI1LW9yLWRiNi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzAyMGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiNS1vci1kYjYucGF0Y2gKQEAgLTAsMCArMSwxNjIgQEAKK1N1cHBvcnQgYm90aCBkYjUgYW5kIGRiNi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLm9yaWcvY29uZmlndXJlLmFjCisrKysgcnBtL2NvbmZpZ3VyZS5hYworQEAgLTU0Nyw4ICs1NDcsNiBAQCBlbHNlCisgICAgIE1ZUEFUSD0kUEFUSAorIGZpCisgCistREJYWT1kYjYwCistCisgQUNfUEFUSF9QUk9HKF9fQkFTSCwgYmFzaCwgJXtfYmluZGlyfS9iYXNoLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0JaSVAyLCBiemlwMiwgJXtfYmluZGlyfS9iemlwMiwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DQVQsIGNhdCwgL2Jpbi9jYXQsICRNWVBBVEgpCitAQCAtNTYwLDIyICs1NTgsNiBAQCBBQ19QQVRIX1BST0coX19DTUFLRSwgY21ha2UsICV7X2JpbmRpcn0vCisgQUNfUEFUSF9QUk9HKF9fQ1BJTywgY3BpbywgL2Jpbi9jcGlvLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0NVUkwsIGN1cmwsICV7X2JpbmRpcn0vY3VybCwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19DVlMsIGN2cywgJXtfYmluZGlyfS9jdnMsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfQVJDSElWRSwgJHtEQlhZfV9hcmNoaXZlLCAle19iaW5kaXJ9LyR7REJYWX1fYXJjaGl2ZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9DSEVDS1BPSU5ULCAke0RCWFl9X2NoZWNrcG9pbnQsICV7X2JpbmRpcn0vJHtEQlhZfV9jaGVja3BvaW50LCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0RFQURMT0NLLCAke0RCWFl9X2RlYWRsb2NrLCAle19iaW5kaXJ9LyR7REJYWX1fZGVhZGxvY2ssICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfRFVNUCwgJHtEQlhZfV9kdW1wLCAle19iaW5kaXJ9LyR7REJYWX1fZHVtcCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9IT1RCQUNLVVAsICR7REJYWX1faG90YmFja3VwLCAle19iaW5kaXJ9LyR7REJYWX1faG90YmFja3VwLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX0xPQUQsICR7REJYWX1fbG9hZCwgJXtfYmluZGlyfS8ke0RCWFl9X2xvYWQsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfTE9HX1ZFUklGWSwgJHtEQlhZfV9sb2dfdmVyaWZ5LCAle19iaW5kaXJ9LyR7REJYWX1fbG9nX3ZlcmlmeSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9QUklOVExPRywgJHtEQlhZfV9wcmludGxvZywgJXtfYmluZGlyfS8ke0RCWFl9X3ByaW50bG9nLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1JFQ09WRVIsICR7REJYWX1fcmVjb3ZlciwgJXtfYmluZGlyfS8ke0RCWFl9X3JlY292ZXIsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfUkVQTElDQVRFLCAke0RCWFl9X3JlcGxpY2F0ZSwgJXtfYmluZGlyfS8ke0RCWFl9X3JlcGxpY2F0ZSwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQlNRTCwgJHtEQlhZfXNxbCwgJXtfYmluZGlyfS8ke0RCWFl9c3FsLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1NRTF9DT0RFR0VOLCAke0RCWFl9X3NxbF9jb2RlZ2VuLCAle19iaW5kaXJ9LyR7REJYWX1fc3FsX2NvZGVnZW4sICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfU1RBVCwgJHtEQlhZfV9zdGF0LCAle19iaW5kaXJ9LyR7REJYWX1fc3RhdCwgJE1ZUEFUSCkKKy1BQ19QQVRIX1BST0coX19EQl9UVU5FUiwgJHtEQlhZfV90dW5lciwgJXtfYmluZGlyfS8ke0RCWFl9X3R1bmVyLCAkTVlQQVRIKQorLUFDX1BBVEhfUFJPRyhfX0RCX1VQR1JBREUsICR7REJYWX1fdXBncmFkZSwgJXtfYmluZGlyfS8ke0RCWFl9X3VwZ3JhZGUsICRNWVBBVEgpCistQUNfUEFUSF9QUk9HKF9fREJfVkVSSUZZLCAke0RCWFl9X3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X3ZlcmlmeSwgJE1ZUEFUSCkKKyBBQ19QQVRIX1BST0coX19ESUZGLCBkaWZmLCAvYmluL2RpZmYsICRNWVBBVEgpCisgQUNfUEFUSF9QUk9HKF9fRElUVE8sIGRpdHRvLCAle19iaW5kaXJ9L2RpdHRvLCAkTVlQQVRIKQorIEFDX1BBVEhfUFJPRyhfX0ZJTEUsIGZpbGUsICV7X2JpbmRpcn0vZmlsZSwgJE1ZUEFUSCkKK0BAIC0xNjA0LDEzICsxNTg2LDE4IEBAIFJQTV9DSEVDS19MSUIoCisgCisgZG5sICMgQmVya2VsZXktREIgJiBTUUxpdGUKKyBEQkxJQlNSQ1M9IiIKKytEQlhZPWRiCisrCisgIyBYWFggd29uJ3QgaGFuZGxlIC0taW5jbHVkZWRpciBvdmVycmlkZQorLUNQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR7cHJlZml4fS9pbmNsdWRlLyR7REJYWX0iCisrQ1BQRkxBR1Nfc2F2ZT0iJHtDUFBGTEFHU30iCisrQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0gLUkke3ByZWZpeH0vaW5jbHVkZS9kYi02LjAiCisrd2l0aF9kYl9zYXZlPSIke3dpdGhfZGJ9IgorIFJQTV9DSEVDS19MSUIoCisgICAgIFtCZXJrZWxleS1EQl0sIFtkYl0sCisgICAgIFtkYi02LjBdLCBbZGJfY3JlYXRlXSwgW2RiLmhdLAorLSAgICBbeWVzLGV4dGVybmFsXSwgW2RiM10sCisrICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI2XSwKKyAgICAgWyBEQkxJQlNSQ1M9IiREQkxJQlNSQ1MgZGIzLmMiCisrICAgICAgREJYWT1kYjYwCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQiwgWyB0cnVlIF0pCisgICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQl9JTlRFUk5BTCwgWyB0ZXN0ICIuJFJQTV9DSEVDS19MSUJfTE9DQVRJT04iID0gLmludGVybmFsIF0pCisgICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorQEAgLTE2MTksMTAgKzE2MDYsMzIgQEAgUlBNX0NIRUNLX0xJQigKKyAgICAgICAgICAgV0lUSF9EQl9TVUJESVI9IiIKKyAgICAgICBmaQorICAgICBdLAorLSAgICBbIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgZmFsc2UgXSkKKy0gICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIGZhbHNlIF0pCisrICAgIFsgIyBSZXNldCBhIGZldyB2YXJpYWJsZXMgdG8gZnJlc2gKKysgICAgICB3aXRoX2RiPSIke3dpdGhfZGJfc2F2ZX0iCisrICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1Nfc2F2ZX0gLUkke3ByZWZpeH0vaW5jbHVkZS9kYi01LjMiCisrICAgICAgUlBNX0NIRUNLX0xJQigKKysgICAgICAgIFtCZXJrZWxleS1EQl0sIFtkYl0sCisrICAgICAgICBbZGItNS4zXSwgW2RiX2NyZWF0ZV0sIFtkYi5oXSwKKysgICAgICAgIFt5ZXMsZXh0ZXJuYWxdLCBbZGI1M10sCisrICAgICAgICBbIERCTElCU1JDUz0iJERCTElCU1JDUyBkYjMuYyIKKysgICAgICAgICAgREJYWT1kYjUzCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREIsIFsgdHJ1ZSBdKQorKyAgICAgICAgICBBTV9DT05ESVRJT05BTChXSVRIX0RCX0lOVEVSTkFMLCBbIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWwgXSkKKysgICAgICAgICAgaWYgdGVzdCAiLiRSUE1fQ0hFQ0tfTElCX0xPQ0FUSU9OIiA9IC5pbnRlcm5hbDsgdGhlbgorKyAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfREJfSCwgMSwgW0hhdmUgPGRiLmg+IGhlYWRlcl0pCisrICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIFdJVEhfREJfU1VCRElSPSIiCisrICAgICAgICAgIGZpCisrICAgICAgICBdLAorKyAgICAgICAgWyBBTV9DT05ESVRJT05BTChXSVRIX0RCLCBbIGZhbHNlIF0pCisrICAgICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJfSU5URVJOQUwsIFsgZmFsc2UgXSkKKysgICAgICAgIF0pCisgICAgIF0pCisgCisraWYgdGVzdCAiLiRhY19jdl9saWJfZGJfNl8wX2RiX2NyZWF0ZSIgIT0gLnllcyAtYSAiLiRhY19jdl9saWJfZGJfNV8zX2RiX2NyZWF0ZSIgIT0gLnllczsgdGhlbgorKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU19zYXZlfSIKKytmaQorKworIGRubCAjIFNxbGl0ZSBleHRlcm5hbAorIFJQTV9DSEVDS19MSUIoCisgICAgIFtTUUxpdGVdLCBbc3FsaXRlXSwKK0BAIC0xNjMzLDEwICsxNjQyLDExIEBAIFJQTV9DSEVDS19MSUIoCisgCisgZG5sICMgU3FsaXRlIDMuNy4wLjEgZnJvbSBkYi01LjEuMTkKKyBkbmwgWFhYIGVycm9yOiBgZGIzJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBBQ19DT05GSUdfU1VCRElSUy4KKytpZiB0ZXN0ICIuJGFjX2N2X2xpYl9kYl82XzBfZGJfY3JlYXRlIiA9IC55ZXM7IHRoZW4KKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbQmVya2VsZXktREIgKCtTUUxpdGUzKV0sIFtkYnNxbF0sCisgICAgIFtkYl9zcWwtNi4wXSwgW3NxbGl0ZTNfb3Blbl0sIFtkYnNxbC5oXSwKKy0gICAgW3llcyxleHRlcm5hbF0sIFtkYjMvc3FsXSwKKysgICAgW3llcyxleHRlcm5hbF0sIFtkYjYvc3FsXSwKKyAgICAgWworICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgdHJ1ZSBdKQorICAgICAgIEFDX0RFRklORShXSVRIX1NRTElURSwgMSwgW0RlZmluZSBhcyAxIGlmIGJ1aWxkaW5nIHdpdGggU1FMaXRlIGxpYnJhcnldKQorQEAgLTE2NTAsMTIgKzE2NjAsNTAgQEAgUlBNX0NIRUNLX0xJQigKKyAgICAgXSwgWworICAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgZmFsc2UgXSkKKyAgICAgXSkKKytlbGlmIHRlc3QgIi4kYWNfY3ZfbGliX2RiXzVfM19kYl9jcmVhdGUiID0gLnllczsgdGhlbgorK1JQTV9DSEVDS19MSUIoCisrICAgIFtCZXJrZWxleS1EQiAoK1NRTGl0ZTMpXSwgW2Ric3FsXSwKKysgICAgW2RiX3NxbC01LjNdLCBbc3FsaXRlM19vcGVuXSwgW2Ric3FsLmhdLAorKyAgICBbeWVzLGV4dGVybmFsXSwgW2RiNTMvc3FsXSwKKysgICAgWworKyAgICAgIEFNX0NPTkRJVElPTkFMKFdJVEhfREJTUUwsIFsgdHJ1ZSBdKQorKyAgICAgIEFDX0RFRklORShXSVRIX1NRTElURSwgMSwgW0RlZmluZSBhcyAxIGlmIGJ1aWxkaW5nIHdpdGggU1FMaXRlIGxpYnJhcnldKQorKyAgICAgIGlmIHRlc3QgIi4kUlBNX0NIRUNLX0xJQl9MT0NBVElPTiIgPSAuaW50ZXJuYWw7IHRoZW4KKysgICAgICAgIFdJVEhfREJfQ1BQRkxBR1M9IiR7V0lUSF9EQl9DUFBGTEFHU30gLUlcJCh0b3Bfc3JjZGlyKS9kYi9zcWwvZ2VuZXJhdGVkIgorKyAgICAgICAgV0lUSF9EQl9MSUJTPSIke1dJVEhfREJTUUxfTElCU30iCisrICAgICAgICBEQkxJQlNSQ1M9IiREQkxJQlNSQ1Mgc3FsaXRlLmMiCisrICAgICAgZWxzZQorKyAgICAgICAgV0lUSF9EQlNRTF9TVUJESVI9IiIKKysgICAgICBmaQorKyAgICBdLCBbCisrICAgICAgQU1fQ09ORElUSU9OQUwoV0lUSF9EQlNRTCwgWyBmYWxzZSBdKQorKyAgICBdKQorK2Vsc2UKKytBTV9DT05ESVRJT05BTChXSVRIX0RCU1FMLCBbIGZhbHNlIF0pCisrZmkKKyAKKyBEQkxJQk9CSlM9YGVjaG8gJERCTElCU1JDUyB8IHNlZCAtZSAicy9cLmMvXC5sby9nImAKKyAKKyBBQ19TVUJTVChEQkxJQlNSQ1MpCisgQUNfU1VCU1QoREJMSUJPQkpTKQorIAorK0FDX1BBVEhfUFJPRyhfX0RCX0FSQ0hJVkUsICR7REJYWX1fYXJjaGl2ZSwgJXtfYmluZGlyfS8ke0RCWFl9X2FyY2hpdmUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfQ0hFQ0tQT0lOVCwgJHtEQlhZfV9jaGVja3BvaW50LCAle19iaW5kaXJ9LyR7REJYWX1fY2hlY2twb2ludCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9ERUFETE9DSywgJHtEQlhZfV9kZWFkbG9jaywgJXtfYmluZGlyfS8ke0RCWFl9X2RlYWRsb2NrLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0RVTVAsICR7REJYWX1fZHVtcCwgJXtfYmluZGlyfS8ke0RCWFl9X2R1bXAsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfSE9UQkFDS1VQLCAke0RCWFl9X2hvdGJhY2t1cCwgJXtfYmluZGlyfS8ke0RCWFl9X2hvdGJhY2t1cCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9MT0FELCAke0RCWFl9X2xvYWQsICV7X2JpbmRpcn0vJHtEQlhZfV9sb2FkLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX0xPR19WRVJJRlksICR7REJYWX1fbG9nX3ZlcmlmeSwgJXtfYmluZGlyfS8ke0RCWFl9X2xvZ192ZXJpZnksICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfUFJJTlRMT0csICR7REJYWX1fcHJpbnRsb2csICV7X2JpbmRpcn0vJHtEQlhZfV9wcmludGxvZywgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9SRUNPVkVSLCAke0RCWFl9X3JlY292ZXIsICV7X2JpbmRpcn0vJHtEQlhZfV9yZWNvdmVyLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1JFUExJQ0FURSwgJHtEQlhZfV9yZXBsaWNhdGUsICV7X2JpbmRpcn0vJHtEQlhZfV9yZXBsaWNhdGUsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJTUUwsICR7REJYWX1zcWwsICV7X2JpbmRpcn0vJHtEQlhZfXNxbCwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9TUUxfQ09ERUdFTiwgJHtEQlhZfV9zcWxfY29kZWdlbiwgJXtfYmluZGlyfS8ke0RCWFl9X3NxbF9jb2RlZ2VuLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1NUQVQsICR7REJYWX1fc3RhdCwgJXtfYmluZGlyfS8ke0RCWFl9X3N0YXQsICRNWVBBVEgpCisrQUNfUEFUSF9QUk9HKF9fREJfVFVORVIsICR7REJYWX1fdHVuZXIsICV7X2JpbmRpcn0vJHtEQlhZfV90dW5lciwgJE1ZUEFUSCkKKytBQ19QQVRIX1BST0coX19EQl9VUEdSQURFLCAke0RCWFl9X3VwZ3JhZGUsICV7X2JpbmRpcn0vJHtEQlhZfV91cGdyYWRlLCAkTVlQQVRIKQorK0FDX1BBVEhfUFJPRyhfX0RCX1ZFUklGWSwgJHtEQlhZfV92ZXJpZnksICV7X2JpbmRpcn0vJHtEQlhZfV92ZXJpZnksICRNWVBBVEgpCisrCisgQUNfQVJHX1dJVEgoZGItbGFyZ2VmaWxlLCBBU19IRUxQX1NUUklORyhbLS13aXRoLWRiLWxhcmdlZmlsZV0sIFtidWlsZCBCZXJrZWxleS1EQiB3aXRoIExBUkdFRklMRSBzdXBwb3J0XSkpCisgQUNfQVJHX1dJVEgoZGItbXV0ZXgsICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRiLW11dGV4PUFSR10sIFtidWlsZCBCZXJrZWxleS1EQiB3aXRoIE1VVEVYIHR5cGUgQVJHXSkpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmI4ZTMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRiX2J1ZmZlcl9zbWFsbC5wYXRjaApAQCAtMCwwICsxLDc3IEBACitJbiBjZXJ0YWluIGNhc2VzIHdpdGggQmVya2xleURCIDUuMy54IHdlIGFyZSBnZXR0aW5nIHRoZSBlcnJvcjoKKworZGIzLmM6MTQ0MzogZGJjdXJzb3ItPnBnZXQoLTMwOTk5KTogQkRCMDA2MyBEQl9CVUZGRVJfU01BTEw6IFVzZXIgbWVtb3J5IHRvbyBzbWFsbCBmb3IgcmV0dXJuIHZhbHVlCisKK1NlZSBodHRwczovL2J1Z3MubGF1bmNocGFkLm5ldC9ycG0vK2J1Zy85MzQ0MjAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0l0IGFwcGVhcnMgdG8gYmUgc29tZSB0eXBlIG9mIGEgYnVnIGluIHRoZSBCZXJrbGV5REIgNS4zLnguICBJbiBhbiBhdHRlbXB0Cit0byB3b3JrYXJvdW5kIHRoZSBwcm9ibGVtLCB3aGVuIHdlIGVuY291bnRlciB0aGlzIHNpdHVhdGlvbiB3ZSBhdHRlbXB0Cit0byBhZGp1c3QgdGhlIHNpemUgb2YgdGhlIG1tYXAgYnVmZmVyIHVudGlsIHRoZSBjYWxsIHdvcmtzLCBvciB3ZQorZW5kIHVwIHRyeWluZyAxMCB0aW1lcy4gIFRoZSBuZXcgc2l6ZSBpcyBlaXRoZXIgdGhlIHVwZGF0ZWQgdnAtPnNpemUKK2Zyb20gdGhlIGZhaWxlZCBwZ2V0IGNhbGwsIG9yIHRoZSBwcmV2aW91cyBzaXplICsgMTAyNC4KKworSWYgREJJIGRlYnVnZ2luZyBpcyBlbmFibGVkLCBhZGRpdGlvbmFsIGRpYWdub3N0aWNzIGFyZSBwcmludGVkLCBvdGhlcndpc2UKK2EgYmFzaWMgcmV0cnkgYW5kIHN1Y2Nlc3MgbWVzc2FnZSBpcyBhZGRlZCB0byBzaG93IHRoYXQgdGhlIGZhaWx1cmUgd2FzCityZXNvbHZlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlICh3b3JrYXJvdW5kKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL3JwbWRiLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvcnBtZGIuYworKysrIHJwbS01LjQuMTQvcnBtZGIvcnBtZGIuYworQEAgLTIyMTIsOCArMjIxMiwxMiBAQCBzdGF0aWMgaW50IHJwbW1pR2V0KGRiaUluZGV4IGRiaSwgREJDICoKKyAJdnAtPmZsYWdzIHw9IERCX0RCVF9VU0VSTUVNOworIAlyYyA9IGRiaUdldChkYmksIGRiY3Vyc29yLCBrcCwgdnAsIGZsYWdzKTsKKyAJaWYgKHJjID09IERCX0JVRkZFUl9TTUFMTCkgeworKwkgICAgaW50IHJldHJ5ID0gMDsKKysJICAgIHNpemVfdCBvcmlnbGVuID0gdnAtPnNpemU7CisgCSAgICBzaXplX3QgdWhsZW4gPSB2cC0+c2l6ZTsKKy0JICAgIHZvaWQgKiB1aCA9IG1tYXAoTlVMTCwgdWhsZW4sIF9wcm90LCBfZmxhZ3MsIF9mZG5vLCBfb2ZmKTsKKysJICAgIHZvaWQgKiB1aDsKKytyZXRyeV9nZXQ6CisrCSAgICB1aCA9IG1tYXAoTlVMTCwgdWhsZW4sIF9wcm90LCBfZmxhZ3MsIF9mZG5vLCBfb2ZmKTsKKyAJICAgIGlmICh1aCA9PSBOVUxMIHx8IHVoID09ICh2b2lkICopLTEpCisgCQlmcHJpbnRmKHN0ZGVyciwKKyAJCSAgICAiPT0+IG1tYXAoJXBbJXVdLCAweCV4LCAweCV4LCAlZCwgMHgleCkgZXJyb3IoJWQpOiAlc1xuIiwKK0BAIC0yMjM1LDYgKzIyMzksMjUgQEAgc3RhdGljIGludCBycG1taUdldChkYmlJbmRleCBkYmksIERCQyAqCisgCQlpZiAobXVubWFwKHVoLCB1aGxlbikgIT0gMCkKKyAJCSAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiBtdW5tYXAoJXBbJXVdKSBlcnJvciglZCk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAJdWgsICh1bnNpZ25lZCl1aGxlbiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisrCSAgICAgICAgLyogV2Ugd2FudCB0byBiZSBzdXJlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMgdG8gYXZvaWQgYSBsb29wISAqLworKwkgICAgICAgIGlmIChyYyA9PSBEQl9CVUZGRVJfU01BTEwgJiYgcmV0cnkgPCAxMCkgeworKwkJICAgLyogSWYgd2UgZ290IGEgbGFyZ3IgdnAtc2l6ZSBiYWNrLCB1c2UgdGhhdCwgb3RoZXJ3aXNlIGluY3JlbWVudCB0aGUgc2l6ZSBieSAxayAqLworKwkgICAgICAgICAgIHVobGVuID0gdnAtPnNpemUgPiB1aGxlbiA/IHZwLT5zaXplIDogdWhsZW4gKyAxMDI0OworKwkJICAgcmV0cnkrKzsKKysJICAgICAgICAgICBpZiAoKGRiaSktPmRiaV9kZWJ1ZykKKysJICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gREJfQlVGRkVSX1NNQUxMIG9yaWcgcmVxdWVzdGVkICglZCksIGNvbmZpZ3VyZWQgKCVkKSwgZm9yY2luZyBsYXJnZXIgYnVmZmVyICglZCksIG5ldyBzaXplICglZClcbiIsCisrCSAgICAgICAgICAgICAgICAgICAgb3JpZ2xlbiwgdnAtPnVsZW4sIHVobGVuLCB2cC0+c2l6ZSk7CisrCSAgICAgICAgICAgZWxzZQorKwkgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIj09PiByZXRyeSAoJWQpIGRiM2NwZ2V0ICglZClcbiIsIHJldHJ5LCB1aGxlbik7CisrCSAgICAgICAgICAgZ290byByZXRyeV9nZXQ7CisrCSAgICAgICAgfQorKwkgICAgfQorKwkgICAgaWYgKHJldHJ5KSB7CisrCSAgICAgICAgaWYgKChkYmkpLT5kYmlfZGVidWcpCisrCSAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gc3VjY2VzcyBvcmlnIHJlcXVlc3RlZCAoJWQpLCBjb25maWd1cmVkIGJ1ZmZlciAoJWQpLCBidWZmZXIgKCVkKSwgc2l6ZSBhZnRlciBkYmlHZXQgKCVkKVxuIiwKKysJCQlvcmlnbGVuLCB2cC0+dWxlbiwgdWhsZW4sIHZwLT5zaXplKTsKKysJICAgICAgICBlbHNlCisrCSAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI9PT4gc3VjY2Vzc1xuIik7CisgCSAgICB9CisgCX0KKyAgICAgfSBlbHNlCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi9kYjMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9kYjMuYworKysrIHJwbS01LjQuMTQvcnBtZGIvZGIzLmMKK0BAIC0xNTA5LDcgKzE1MDksNyBAQCBhc3NlcnQoZGIgIT0gTlVMTCk7CisgI2VuZGlmCisgICAgIH0KKyAKKy1EQklERUJVRyhkYmksIChzdGRlcnIsICI8LS0gJXMoJXAsJXAsJXAsJXAsJXAsMHgleCkgcmMgJWQgJXMlc1xuIiwgX19GVU5DVElPTl9fLCBkYmksIGRiY3Vyc29yLCBrZXksIHBrZXksIGRhdGEsIGZsYWdzLCByYywgX0RCQ0ZMQUdTKGZsYWdzKSwgX0tFWURBVEEoa2V5LCBwa2V5LCBkYXRhLCBOVUxMKSkpOworK0RCSURFQlVHKGRiaSwgKHN0ZGVyciwgIjwtLSAlcyglcCwlcCwlcCwlcCwlcCwweCV4KSByYyAlZCAlcyVzXG4iLCBfX0ZVTkNUSU9OX18sIGRiaSwgZGJjdXJzb3IsIGtleSwgcGtleSwgZGF0YSwgZmxhZ3MsIHJjLCBfREJDRkxBR1MoZmxhZ3MpLCBfS0VZREFUQShrZXksIHBrZXksIHJjID09IERCX0JVRkZFUl9TTUFMTCA/IE5VTEwgOiBkYXRhLCBOVUxMKSkpOworICAgICByZXR1cm4gcmM7CisgfQorIC8qQD1tdXN0bW9kQCovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNmUwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaApAQCAtMCwwICsxLDY1IEBACitEZWJ1ZyB0aGUgcGxhdGZvcm0gc2NvcmUgZ2VuZXJhdGlvbi4uLgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC00NjUsNiArNDY1LDggQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAorICAgICByYyA9IChycG1SQykgcnBtaW9iU2x1cnAocGxhdGZvcm0sICZpb2IpOworIAorKyAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtIGZpbGUgJXNcbiIsIHBsYXRmb3JtKTsKKysKKyAgICAgaWYgKHJjIHx8IGlvYiA9PSBOVUxMKSB7CisgCXJjID0gUlBNUkNfRkFJTDsKKyAJZ290byBleGl0OworQEAgLTQ4Niw2ICs0ODgsNyBAQCBzdGF0aWMgcnBtUkMgcnBtUGxhdGZvcm0oY29uc3QgY2hhciAqIHBsCisgCSAgICB3aGlsZSAoLS10ID4gcCAmJiB4aXNzcGFjZSgqdCkpCisgCQkqdCA9ICdcMCc7CisgCSAgICBpZiAodCA+IHApIHsKKysJCWZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gbWlyZUFwcGVuZCBSRUdFWCAlc1xuIiwgcCk7CisgCQl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9SRUdFWCwgMCwgcCwgTlVMTCwgJm1pX3JlLCAmbWlfbnJlKTsKKyAJICAgIH0KKyAJICAgIGNvbnRpbnVlOworQEAgLTUwMyw2ICs1MDYsMTEgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorIAkJX2dudSA9IHJwbUV4cGFuZCgiLSIsIGN2b2ctPmdudSwgTlVMTCk7CisgCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2dudSIsIE5VTEwsIChfZ251ID8gX2dudSA6ICIiKSwgLTEpOworKwkgICAgZnByaW50ZihzdGRlcnIsICJEOiBycG1QbGF0Zm9ybSBhZGRNYWNybyAlcy0lcy0lcyglcylcbiIsCisrCSAgICAJcnBtRXhwYW5kKCIle19wbGF0Zm9ybV9jcHV9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX3ZlbmRvcn0iLCBOVUxMKSwKKysJCXJwbUV4cGFuZCgiJXtfcGxhdGZvcm1fb3N9IiwgTlVMTCksCisrCQlycG1FeHBhbmQoIiV7X3BsYXRmb3JtX2dudX0iLCBOVUxMKSk7CisgI2Vsc2UKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9jcHUiLCBOVUxMLCBjdm9nLT5jcHUsIC0xKTsKKyAJICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCBjdm9nLT52ZW5kb3IsIC0xKTsKK0BAIC01MTAsNiArNTE4LDcgQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl9CisgCisrCWZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm0gbWlyZUFwcGVuZCBTVFJDTVAgJXMgLS0gIiwgcCk7CisgI2lmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpIC8qIFNraXAgdGhlIGV4cGxpY2l0LXBsYXRmb3JtICovCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworIAkvKiBkbyBub3QgdXNlIHZlbmRvciBhbmQgR05VIGF0dHJpYnV0aW9uICovCitAQCAtNTE5LDYgKzUyOCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJCShjdm9nICYmICpjdm9nLT5nbnUgPyAiLSIgOiBOVUxMKSwKKyAJCShjdm9nID8gY3ZvZy0+Z251IDogTlVMTCksIE5VTEwpOworICNlbmRpZgorKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBwKTsKKyAJeHggPSBtaXJlQXBwZW5kKFJQTU1JUkVfU1RSQ01QLCAwLCBwLCBOVUxMLCAmbWlfcmUsICZtaV9ucmUpOworIAlwID0gX2ZyZWUocCk7CisgI2VuZGlmCitAQCAtNjg4LDkgKzY5OCwxMiBAQCBpbnQgcnBtUGxhdGZvcm1TY29yZShjb25zdCBjaGFyICogcGxhdGZvCisgCisgICAgIGlmICgobWlyZSA9IChtaVJFKSBtaV9yZSkgIT0gTlVMTCkKKyAgICAgZm9yIChpID0gMDsgaSA8IG1pX25yZTsgaSsrKSB7CistCWlmIChtaXJlUmVnZXhlYyhtaXJlICsgaSwgcGxhdGZvcm0sIDApID49IDApCisrCWlmIChtaXJlUmVnZXhlYyhtaXJlICsgaSwgcGxhdGZvcm0sIDApID49IDApIHsKKysJICAgIGZwcmludGYoc3RkZXJyLCAiRDogcnBtUGxhdGZvcm1TY29yZSAlcyAoJWQpXG4iLCBwbGF0Zm9ybSwgaSArIDEpOworIAkgICAgcmV0dXJuIChpICsgMSk7CisrCX0KKyAgICAgfQorKyAgICBmcHJpbnRmKHN0ZGVyciwgIkQ6IHJwbVBsYXRmb3JtU2NvcmUgJXMgKCVkKVxuIiwgcGxhdGZvcm0sIDApOworICAgICByZXR1cm4gMDsKKyB9CisgLypAPW9ubHl0cmFuc0AqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZGlzYWJsZS1Xbm8tb3ZlcnJpZGUtaW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjVmOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA3MGQ4ODE4NzNiNDQzYzliYWQ1MDJkYjk2NjU1OTU0NTVkNGYwYWM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDggSnVsIDIwMTQgMDc6NDE6MTAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBkaXNhYmxlIC1Xbm8tb3ZlcnJpZGUtaW5pdAorCitGaXhlZCBycG0tbmF0aXZlLmRvX2NvbmZpZ3VyZSBlcnJvciBvbiBDZW50T1MgNS54OgorCitjYzE6IGVycm9yOiB1bnJlY29nbml6ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiAiLVduby1vdmVycmlkZS1pbml0IgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGFkZWZmZTAuLjY3NDZiNGMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE2Myw3ICsxNjMsNyBAQCBBQ19BUkdfRU5BQkxFKGJ1aWxkLXdhcm5pbmdzLAorICMgWFhYIGdjYy00LjIgb24gTWFjIE9TIFggaGFzbid0CisgIyAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV25vLXVudXNlZC1idXQtc2V0LXZhcmlhYmxlIgorICMgWFhYIHJwbWlvL3NldC5jIG5lZWRzIHRoaXMKKy0gICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1vdmVycmlkZS1pbml0IgorKyMgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVduby1vdmVycmlkZS1pbml0IgorICAgICAgICAgZWxpZiB0ZXN0ICIuYCRDQyAtViAyPiYxIHwgZ3JlcCAnU3VuIEMnYCIgIT0gLjsgdGhlbgorICAgICAgICAgICAgIGRubCAjIFN1biBTdHVkaW8gKHVzdWFsbHkgImNjIikKKyAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXYiCistLQorMS44LjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZmlsZWNsYXNzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpbGVjbGFzcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWRiNmZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpbGVjbGFzcy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitycG1mYy5jOiAgQWx3YXlzIGdlbmVyYXRlIHBlci1maWxlIGluZm9ybWF0aW9uCisKK0V2ZW4gd2hlbiB0aGUgcGVyLWZpbGUgZGVwZW5kZW5jeSBnZW5lcmF0ZSBpcyBkaXNhYmxlZCwgd2Ugd2FudCB0byBnZW5lcmF0ZQorcGVyIGZpbGUgY2xhc3NpZmljYXRpb24gYW5kIG90aGVyIGFzc29jaWF0ZWQgZGF0YS4KKworTm90ZTogdGhpcyBpcyBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLiAgRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQgdG8gaGF2ZSBhIHdheQordG8gc2VlZCBwZXItZmlsZSBkZXBlbmRlbmN5IGFuZCBvdGhlciBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBnZW5lcmF0ZSBhCitwYWNrYWdlIGZyb20gcHJldmlvdXNseSBkZXRlcm1pbmVkIGluZm9ybWF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtZmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtZmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbWZjLmMKK0BAIC0xNzM0LDcgKzE3MzQsNiBAQCBycG1SQyBycG1mY0dlbmVyYXRlRGVwZW5kcyh2b2lkICogX3NwZWMsCisgCS8qIC4uLiB0aGVuIGdlbmVyYXRlIGRlcGVuZGVuY2llcyB1c2luZyAle19fZmluZF9yZXF1aXJlc30gZXQgYWwuICovCisgCXJjID0gcnBtZmNHZW5lcmF0ZURlcGVuZHNIZWxwZXIoc3BlYywgcGtnLCBmaSk7CisgCXByaW50RGVwcyhwa2ctPmhlYWRlcik7CistCXJldHVybiByYzsKKyAgICAgfQorIAorICAgICAvKiBHZW5lcmF0ZSBzY3JpcHRsZXQgRGVwZW5kZW5jaWVzLiAqLworQEAgLTE3NjIsOCArMTc2MSw4IEBAIHJwbVJDIHJwbWZjR2VuZXJhdGVEZXBlbmRzKHZvaWQgKiBfc3BlYywKKyAgICAgYXZbYWNdID0gTlVMTDsKKyAKKyAgICAgZmMgPSBycG1mY05ldygpOworLSAgICBmYy0+c2tpcFByb3YgPSAhcGtnLT5hdXRvUHJvdjsKKy0gICAgZmMtPnNraXBSZXEgPSAhcGtnLT5hdXRvUmVxOworKyAgICBmYy0+c2tpcFByb3YgPSAhcGtnLT5hdXRvUHJvdiB8fCAhaW50ZXJuYWxkZXBzOworKyAgICBmYy0+c2tpcFJlcSA9ICFwa2ctPmF1dG9SZXEgfHwgIWludGVybmFsZGVwczsKKyAgICAgZmMtPnRyYWNrZWQgPSAwOworIAorICAgICB7CWNvbnN0IGNoYXIgKiBidWlsZFJvb3RVUkw7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpeC1sb2dpby1jcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2EwYThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWZpeC1sb2dpby1jcC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitPY2Nhc2lvbmFsbHkgdGhlIGNwIC1wIGZhaWxzIHdpdGggYSBub24temVybyByZXR1cm4gY29kZS4gIFRoaXMgd2lsbCBjYXVzZQordGhlIHN5c3RlbSBhYm9ydCB0aGUgYnVpbGQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0vcnBtZGIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0ub3JpZy9ycG1kYi9NYWtlZmlsZS5hbQorKysrIHJwbS9ycG1kYi9NYWtlZmlsZS5hbQorQEAgLTIzNCwxMSArMjM0LDE0IEBAIGxjb3YtcmVwb3J0OgorICNsY292LXVwbG9hZDogbGNvdgorICMJcnN5bmMgLXJ2eiAtZSBzc2ggLS1kZWxldGUgbGNvdi8qID8/PworIAorKyQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGU6ICQoc3JjZGlyKS9sb2dpb19yZWNvdmVyX3RlbXBsYXRlCisrCUBpZiB0ZXN0ICIuJChidWlsZGRpcikiICE9ICIuJChzcmNkaXIpIjsgdGhlbiBcCisrCQljcCAtZnAgJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgXAorKwkJICAgICAgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZSA7IFwKKysJIGZpCisrCisgbG9naW9fQlVJTFQgPSBsb2dpb19hdXRvLmMgbG9naW9fYXV0b3AuYyBsb2dpb19hdXRvLmggbG9naW9fdGVtcGxhdGUKKy0kKGxvZ2lvX0JVSUxUKToJbG9naW8uYXdrIGxvZ2lvLnNyYyBsb2dpb19yZWNvdmVyX3RlbXBsYXRlCistCUB0ZXN0IC1lICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgfHwgXAorLQkJY3AgLXAgJChzcmNkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUgXAorLQkJICAgICAgJChidWlsZGRpcikvbG9naW9fcmVjb3Zlcl90ZW1wbGF0ZQorKyQobG9naW9fQlVJTFQpOglsb2dpby5hd2sgbG9naW8uc3JjICQoYnVpbGRkaXIpL2xvZ2lvX3JlY292ZXJfdGVtcGxhdGUKKyAJQHJtIC1mICQobG9naW9fQlVJTFQpCisgCUAkKEFXSykgLWYgJChzcmNkaXIpL2xvZ2lvLmF3ayBcCisgCQktdiBoZWFkZXJfZmlsZT1sb2dpb19hdXRvLmggXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlYjIzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorV2UgbmVlZCB0byBzYW5pdHkgY2hlY2sgdGhhdCB0aGUgbmxpbmsgc2l6ZSBhbmQgb3VyIGxpbmtzTGVmdCBjb3VudGVyCitkbyBtYXRjaC4gSWYgYW4gcnBtIGlzIGJhZGx5IGNvbnN0cnVjdGVkIHdpdGggaWRlbnRpY2FsIGlub2RlIHZhbHVlcworZm9yIG11bHRpcGxlIGhhcmRsaW5rZWQgZmlsZXMsIHN1Y2ggYW4gcnBtIHdpbGwgb3RoZXJ3aXNlIGFjY2VzcyBtZW1vcnkKK291dCBvZiBhcnJheSBib3VuZHMgYW5kIGNhdXNlIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBjcmFzaGVzLgorCitUaGUgZml4IGlzIHRvIGFkZCBpbiB0aGUgc2FuaXR5IGNoZWNrIGFuZCBleGl0IGlmIGJhZCBjaXJjdW1zdGFuY2VzCithcmUgZm91bmQuIFdlIG5lZWQgdG8gZml4IHRoZSBjYWxsZXIgdG8gY2hlY2sgdGhlIHJldHVybiBjb2RlIHRvby4KKworUlAgMjAxNC82LzEwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogcnBtLTUuNC4xNC9saWIvZnNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2ZzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvZnNtLmMKK0BAIC00OTUsNiArNDk1LDExIEBAIHN0YXRpYyBpbnQgc2F2ZUhhcmRMaW5rKC8qQHNwZWNpYWxAKi8gLyoKKyAgICAgfQorIAorICAgICBpZiAoZnNtLT5nb2FsID09IElPU01fUEtHQlVJTEQpIC0tZnNtLT5saS0+bGlua3NMZWZ0OworKyAgICBpZiAoZnNtLT5saS0+bGlua3NMZWZ0ID4gc3QtPnN0X25saW5rKSB7CisrCXJwbWxvZyhSUE1MT0dfRVJSLCBfKCJDb3JydXB0ZWQgaGFyZGxpbmtzIGZvdW5kIChjb3VudCAlZCBkb2VzIG5vdCBtYXRjaCAlZCksIGV4aXRpbmcuXG4iKSwgZnNtLT5saS0+bGlua3NMZWZ0LCBzdC0+c3RfbmxpbmspOworKwlyZXR1cm4gLTE7CisrICAgIH0KKysKKyAgICAgZnNtLT5saS0+ZmlsZXhbZnNtLT5saS0+bGlua3NMZWZ0XSA9IGZzbS0+aXg7CisgICAgIC8qQC1vYnNlcnZlcnRyYW5zIC1kZXBlbmRlbnR0cmFuc0AqLworICAgICBmc20tPmxpLT5uc3VmZml4W2ZzbS0+bGktPmxpbmtzTGVmdF0gPSBmc20tPm5zdWZmaXg7CitAQCAtMTg3OCw4ICsxODgzLDEzIEBAIGlmICghKGZzbUdldEZpKGZzbSktPm1hcGZsYWdzICYgSU9TTV9QQVkKKyAJZnNtLT5wb3N0cG9uZSA9IGlvc21GaWxlQWN0aW9uU2tpcHBlZChmc20tPmFjdGlvbik7CisgCWlmIChmc20tPmdvYWwgPT0gSU9TTV9QS0dJTlNUQUxMIHx8IGZzbS0+Z29hbCA9PSBJT1NNX1BLR0JVSUxEKSB7CisgCSAgICAvKkAtZXZhbG9yZGVyQCovIC8qIEZJWDogc2F2ZUhhcmRMaW5rIGNhbiBtb2RpZnkgZnNtICovCistCSAgICBpZiAoU19JU1JFRyhzdC0+c3RfbW9kZSkgJiYgc3QtPnN0X25saW5rID4gMSkKKysJICAgIGlmIChTX0lTUkVHKHN0LT5zdF9tb2RlKSAmJiBzdC0+c3RfbmxpbmsgPiAxKSB7CisgCQlmc20tPnBvc3Rwb25lID0gc2F2ZUhhcmRMaW5rKGZzbSk7CisrCQlpZiAoZnNtLT5wb3N0cG9uZSA8IDApIHsKKysJCSAgICByYyA9IFJQTVJDX0ZBSUw7CisrCQkgICAgYnJlYWs7CisrCQl9CisrCSAgICB9CisgCSAgICAvKkA9ZXZhbG9yZGVyQCovCisgCX0KKyBpZiAoZnNtR2V0RmkoZnNtKS0+bWFwZmxhZ3MgJiBJT1NNX1BBWUxPQURfTElTVCkgZnNtLT5wb3N0cG9uZSA9IDE7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1saWJzcWwtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MmU0MTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbGlic3FsLWZpeC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitEdXJpbmcgaW5zdGFsbGF0aW9uLCB0aGUgbGlidG9vbCByZWxpbmsgYXR0ZW1wdHMgdG8gbGluayB0byAtbHJwbS4uLgorVGhlIHByb2JsZW0gaXMgdGhhdCBpdCBoYXNuJ3QgYmVlbiBpbnN0YWxsZWQgeWV0ISAgU28gc21hbGwgY2hhbmdlIGNhdXNlcwordGhlIGxpYnRvb2wgdG8gaW5zdGVhZCB1c2UgdGhlIGJ1aWxkIHZlcnNpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMCw2ICsxMjAsOSBAQCBsaWJycG0ubGE6ICQobGlicnBtX2xhX09CSkVDVFMpICQobGlicnBtCisgI2xpYnNxbF9sYV9TT1VSQ0VTCT0gbGlic3FsLmMKKyAjbGlic3FsX2xhX0xJQkFERAk9IGxpYnJwbS5sYSAkKFJQTURCX0xEQUREX0NPTU1PTikKKyAKKysjIHBrZ2xpYiBsaWJyYXJpZXMgbmVlZHMgdG8gaGF2ZSB1c3JsaWIgbGlicmFyaWVzIGFscmVhZHkgaW5zdGFsbGVkIQorK2luc3RhbGwtcGtnbGliTFRMSUJSQVJJRVM6IGluc3RhbGwtdXNybGliTFRMSUJSQVJJRVMKKysKKyBpbnN0YWxsLWRhdGEtaG9vazoKKyBpZiAhRU5BQkxFX0JVSUxEX0xBRklMRVMKKyAJLWZvciBsIGluICQodXNybGliX0xUTElCUkFSSUVTKTsgZG8gXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxvZy1hdXRvLXJtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxvZy1hdXRvLXJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTNmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbG9nLWF1dG8tcm0ucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1kYi9EQl9DT05GSUcuaW4KKysrKyBycG0tNS40LjE0L3JwbWRiL0RCX0NPTkZJRy5pbgorQEAgLTQsNiArNCw3IEBAIHNldF9kYXRhX2RpciAuCisgc2V0X2NyZWF0ZV9kaXIgLgorIHNldF9sZ19kaXIgLi9sb2cKKyBzZXRfdG1wX2RpciAuL3RtcAorK3NldF9mbGFncyBkYl9sb2dfYXV0b3JlbW92ZSBvbgorIAorICMgLS0gdGhyZWFkX2NvdW50IG11c3QgYmUgPj0gOAorIHNldF90aHJlYWRfY291bnQgNjQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBhNjYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWxzYi1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0VuYWJsZSBwbGF0Zm9ybSB0YWcgbWF0Y2hpbmcgd29ya2Fyb3VuZCBpbiBPRS4KKworV2hlbiBpbnN0YWxsaW5nIHNvbWUgTFNCIHBhY2thZ2VzIHRoZSAncGxhdGZvcm0nIGZpZWxkIGluIHRoZSBwYWNrYWdlCithcHBlYXJzIHRvIGJlIGludmFsaWQuICBJbnN0ZWFkIG9mIHJlbHlpbmcgc29sZWx5IG9uIHRoZSBwbGF0Zm9ybSBjb21wYXJpc29uCit3ZSBhbHNvIHdhbnQgdG8gZ2VuZXJhdGUgYSBwZXJjZWl2ZWQgcGxhdGZvcm0gYmFzZWQgb24gdGhlIHZhbGlkIHJwbSBjb250ZW50cworb2YgYXJjaCBhbmQgb3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2RlcGVuZHMuYworKysrIHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworQEAgLTU5NSw3ICs1OTUsNyBAQCBpbnQgcnBtdHNBZGRJbnN0YWxsRWxlbWVudChycG10cyB0cywgSGVhCisgCSAgICBwbGF0Zm9ybSA9IHJwbUV4cGFuZChhcmNoLCAiLXVua25vd24tIiwgb3MsIE5VTEwpOworIAorIAlyYyA9IHJwbVBsYXRmb3JtU2NvcmUocGxhdGZvcm0sIHBsYXRwYXQsIG5wbGF0cGF0KTsKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX01BTkRSSVZBKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKyAJLyoKKyAJICogSWYgbm8gbWF0Y2ggb24gcGxhdGZvcm0gdGFnLCB3ZSdsbCB0cnkgYWdhaW4gd2l0aCBhcmNoIHRhZworIAkgKiBpbiBjYXNlIHBsYXRmb3JtIHRhZyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBpdCwgd2hpY2ggaXMgdGhlIGNhc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLWx1YS1maXgtcHJpbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiNDllOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEtZml4LXByaW50LnBhdGNoCkBAIC0wLDAgKzEsMTA0IEBACitMdWEgJ3ByaW50JyBzdGF0ZW1lbnQgaXMgbm90IHdvcmtpbmcgcHJvcGVybHkgaW5zaWRlIG9mIFJQTSA1CisKK1RoZSBwcmludCBzdGF0ZW1lbnQgc2hvdWxkIGNhcHR1cmUgdGhlIG91dHB1dCBhbmQgc2VuZCBpdCB0byB0aGUgc2NyaXB0Citwcm9jZXNzaW5nIGVuZ2luZSwgYW5kIG5vdCBkaXNwbGF5IGl0IGRpcmVjdGx5IHRvIHRoZSBzY3JlZW4uCisKK1RoaXMgcGF0Y2ggaXMgZnJvbTogaHR0cDovL3JwbTUub3JnL2N2cy9wYXRjaHNldD9jbj0xNzY3MQorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0IChwYXRjaHNldCAxNzY3MSBmcm9tIHJwbTUub3JnKQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L0NIQU5HRVMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvQ0hBTkdFUworKysrIHJwbS01LjQuMTQvQ0hBTkdFUworQEAgLTEsMyArMSw0IEBACisrICAgIC0gamJqOiBsdWE6IGZpeDogcmVzdXJyZWN0IG91dHB1dCBjYXB0dXJlIHdpdGggbHVhLTUuMi4KKyAgICAgLSBqYmo6IHZlcmlmeTogZml4OiBicm9rZW4gbG9naWMgZm9yICVnaG9zdCBhdm9pZGFuY2UgKE1hcmsgSGF0bGUpLgorIAorIDUuNC4xMyAtPiA1LjQuMTQ6CitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG1sdWEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9ycG1pby9ycG1sdWEuYworKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtbHVhLmMKK0BAIC0xNzUsNyArMTc1LDcgQEAgcnBtbHVhIHJwbWx1YU5ldyh2b2lkKQorICAgICB9OworICAgICAvKkA9cmVhZG9ubHl0cmFucyA9bnVsbGFzc2lnbiBAKi8KKyAgICAgLypAb2JzZXJ2ZXJAKi8gLypAdW5jaGVja2VkQCovCistICAgIGNvbnN0IGx1YUxfUmVnICpsaWIgPSBsdWFsaWJzOworKyAgICBjb25zdCBsdWFMX1JlZyAqbGliOworICAgICBjaGFyICpwYXRoX2J1ZjsKKyAgICAgY2hhciAqcGF0aF9uZXh0OworICAgICBjaGFyICpwYXRoOworQEAgLTE5MCwzMSArMTkwLDM0IEBAIHJwbWx1YSBycG1sdWFOZXcodm9pZCkKKyAKKyAgICAgbHVhTF9vcGVubGlicyhMKTsKKyAKKy0gICAgZm9yICg7IGxpYi0+bmFtZTsgbGliKyspIHsKKysgICAgZm9yIChsaWIgPSBsdWFsaWJzOyBsaWItPm5hbWU7IGxpYisrKSB7CisgCWx1YUxfcmVxdWlyZWYoTCwgbGliLT5uYW1lLCBsaWItPmZ1bmMsIDEpOworKwlsdWFfcG9wKEwsIDEpOworICAgICB9CisgCisgICAgIHsJY29uc3QgY2hhciAqIF9sdWFfcGF0aCA9IHJwbUdldFBhdGgocnBtbHVhUGF0aCwgTlVMTCk7CisgIAlpZiAoX2x1YV9wYXRoICE9IE5VTEwpIHsKKysjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorIAkgICAgbHVhX3B1c2hsaXRlcmFsKEwsICJMVUFfUEFUSCIpOworIAkgICAgbHVhX3B1c2hzdHJpbmcoTCwgX2x1YV9wYXRoKTsKKysJICAgIGx1YV9yYXdzZXQoTCwgTFVBX0dMT0JBTFNJTkRFWCk7CisrI2Vsc2UKKysJICAgIGx1YV9wdXNoc3RyaW5nKEwsIF9sdWFfcGF0aCk7CisrCSAgICBsdWFfc2V0Z2xvYmFsKEwsICJMVUFfUEFUSCIpOworKyNlbmRpZgorIAkgICAgX2x1YV9wYXRoID0gX2ZyZWUoX2x1YV9wYXRoKTsKKyAJfQorICAgICB9CisgCisgI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKy0gICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKy0jZWxzZQorLSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworLSNlbmRpZgorICAgICBsdWFfcHVzaGxpdGVyYWwoTCwgInByaW50Iik7CisgICAgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsIHJwbV9wcmludCk7CistCistI2lmIGRlZmluZWQoTFVBX0dMT0JBTFNJTkRFWCkKKyAgICAgbHVhX3Jhd3NldChMLCBMVUFfR0xPQkFMU0lOREVYKTsKKyAjZWxzZQorLSAgICBsdWFfcHVzaGdsb2JhbHRhYmxlKEwpOworKyAgICBsdWFfcHVzaGNmdW5jdGlvbihMLCBycG1fcHJpbnQpOworKyAgICBsdWFfc2V0Z2xvYmFsKEwsICJwcmludCIpOworICNlbmRpZgorKworICAgICBycG1sdWFTZXREYXRhKGx1YSwgImx1YSIsIGx1YSk7CisgCisgICAgIC8qIGxvYWQgYWxsIHN0YW5kYXJkIFJQTSBMdWEgc2NyaXB0IGZpbGVzICovCitAQCAtMzUxLDYgKzM1NCw5IEBAIHZvaWQgcnBtbHVhU2V0VmFyKHJwbWx1YSBfbHVhLCBycG1sdWF2IHYKKyAjaWYgZGVmaW5lZChMVUFfR0xPQkFMU0lOREVYKQorIAlpZiAobHVhLT5wdXNoc2l6ZSA9PSAwKQorIAkgICAgbHVhX3B1c2h2YWx1ZShMLCBMVUFfR0xPQkFMU0lOREVYKTsKKysjZWxzZQorKwlpZiAobHVhLT5wdXNoc2l6ZSA9PSAwKQorKwkgICAgbHVhX3B1c2hnbG9iYWx0YWJsZShMKTsKKyAjZW5kaWYKKyAJaWYgKHB1c2h2YXIoTCwgdmFyLT5rZXlUeXBlLCAmdmFyLT5rZXkpICE9IC0xKSB7CisgCSAgICBpZiAocHVzaHZhcihMLCB2YXItPnZhbHVlVHlwZSwgJnZhci0+dmFsdWUpICE9IC0xKQorQEAgLTEwMzksMTQgKzEwNDUsMTUgQEAgc3RhdGljIGludCBycG1fcHJpbnQgKGx1YV9TdGF0ZSAqTCkKKyAgICAgbHVhX2dldGdsb2JhbChMLCAidG9zdHJpbmciKTsKKyAgICAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKyAJY29uc3QgY2hhciAqczsKKysJc2l6ZV90IGw7CisgCWx1YV9wdXNodmFsdWUoTCwgLTEpOyAgLyogZnVuY3Rpb24gdG8gYmUgY2FsbGVkICovCisgCWx1YV9wdXNodmFsdWUoTCwgaSk7ICAgLyogdmFsdWUgdG8gcHJpbnQgKi8KKyAJbHVhX2NhbGwoTCwgMSwgMSk7CistCXMgPSBsdWFfdG9zdHJpbmcoTCwgLTEpOyAgLyogZ2V0IHJlc3VsdCAqLworKwlzID0gbHVhX3RvbHN0cmluZyhMLCAtMSwgJmwpOyAgLyogZ2V0IHJlc3VsdCAqLworIAlpZiAocyA9PSBOVUxMKQorIAkgICAgcmV0dXJuIGx1YUxfZXJyb3IoTCwgImB0b3N0cmluZycgbXVzdCByZXR1cm4gYSBzdHJpbmcgdG8gYHByaW50JyIpOworIAlpZiAobHVhLT5zdG9yZXByaW50KSB7CistCSAgICBzaXplX3Qgc2wgPSBsdWFfcmF3bGVuKEwsIC0xKTsKKysJICAgIHNpemVfdCBzbCA9IGw7CisgCSAgICBpZiAoKHNpemVfdCkobHVhLT5wcmludGJ1ZnVzZWQrc2wrMSkgPiBsdWEtPnByaW50YnVmc2l6ZSkgeworIAkJbHVhLT5wcmludGJ1ZnNpemUgKz0gc2wrNTEyOworIAkJbHVhLT5wcmludGJ1ZiA9IChjaGFyICopIHhyZWFsbG9jKGx1YS0+cHJpbnRidWYsIGx1YS0+cHJpbnRidWZzaXplKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1sdWEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OTMwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbHVhLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0FkZCBzdXBwb3J0IGZvciBjcm9zcyBjb21waWxpbmcgbHVhCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTEyMSw2ICsxMjEsOSBAQCBBQ19QUk9HX1lBQ0MKKyAKKyBBQ19QQVRIX1BST0coQVMsIGFzLCBhcykKKyAKKytDQ19GT1JfQlVJTEQ9JHtDQ19GT1JfQlVJTEQtXCQoQ0MpfQorK0FDX1NVQlNUKENDX0ZPUl9CVUlMRCkKKysKKyBkbmwgIyBHQ0Mgc3BlY2lmaWNzCisgQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKyBBQ19BUkdfRU5BQkxFKGJ1aWxkLXBpYywKK0luZGV4OiBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9sdWEvTWFrZWZpbGUuYW0KKysrKyBycG0tNS40LjE0L2x1YS9NYWtlZmlsZS5hbQorQEAgLTQxLDcgKzQxLDcgQEAgcnBtbHVhY19MREFERCA9IGxpYmx1YS5sYQorIAorICMgLS0tIGJpbjJjIGRvZXNuJ3QgbmVlZCBhbnl0aGluZyBidXQgYSBjb21waWxlcgorIGJpbjJjJChFWEVFWFQpOiAgYmluMmMuYworLQkkKENDKSAtbyAkQCAkPAorKwkkKENDX0ZPUl9CVUlMRCkgLW8gJEAgJDwKKyAKKyBsaWJsdWFfbGFfU09VUkNFUyA9CisgbGlibHVhX2xhX0NGTEFHUyA9IEBXSVRIX0xVQV9TVUJESVJfREVGQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbWFjcm9zLmluLWRpc2FibGUtZXh0ZXJuYWwta2V5LXNlcnZlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2EwY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlzYWJsZSBleHRlcm5hbCBrZXkgc2VydmVyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXaGVuIFJQTSBleHBlcmllbmNlcyBhIHNpZ25lZCBwYWNrYWdlLCB3aXRoIGEgc2lnbmF0dXJlIHRoYXQgaXQgZG9lcyBOT1Qga25vdy4KK0J5IGRlZmF1bHQgaXQgd2lsbCBzZW5kIHRoZSAtZmluZ2VycHJpbnQtIChhbmQgb25seSB0aGUgMTYgZGlnaXQgZmluZ2VycHJpbnQpIHRvCithbiBleHRlcm5hbCBIS1Agc2VydmVyLCB0cnlpbmcgdG8gZ2V0IHRoZSBrZXkgZG93bi4KKworVGhpcyBpcyBwcm9iYWJseSBub3QgYSByZWFzb25hYmxlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoZSBzeXN0ZW0gdG8gZG8sIGluc3RlYWQKK2l0IHNob3VsZCBzaW1wbHkgZmFpbCB0aGUga2V5IGxvb2t1cC4gIElmIHNvbWVvbmUgd2FudHMgdG8gZW5hYmxlIHRoZSBIS1Agc2VydmVyCitpdCdzIGVhc3kgZW5vdWdoIHRvIGRvIGJ5IGVuYWJsaW5nIHRoZSBuZWNlc3NhcnkgbWFjcm9zLgorCitTaWduZWQtb2ZmLWJ5OiB5emh1MSA8eWFuanVuLnpodUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorLS0tIGEvbWFjcm9zL21hY3Jvcy5pbgorKysrIGIvbWFjcm9zL21hY3Jvcy5pbgorQEAgLTU0Niw4ICs1NDYsOCBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAjIEhvcm93aXR6IEtleSBQcm90b2NvbCBzZXJ2ZXIgY29uZmlndXJhdGlvbgorICMKKyAjJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8va2V5cy5uM25wcS5uZXQKKy0lX2hrcF9rZXlzZXJ2ZXIgICAgICAgICBoa3A6Ly9wb29sLnNrcy1rZXlzZXJ2ZXJzLm5ldAorLSVfaGtwX2tleXNlcnZlcl9xdWVyeSAgICV7X2hrcF9rZXlzZXJ2ZXJ9L3Brcy9sb29rdXA/b3A9Z2V0JnNlYXJjaD0KKysjJV9oa3Bfa2V5c2VydmVyICAgICAgICAgaGtwOi8vcG9vbC5za3Mta2V5c2VydmVycy5uZXQKKysjJV9oa3Bfa2V5c2VydmVyX3F1ZXJ5ICAgJXtfaGtwX2tleXNlcnZlcn0vcGtzL2xvb2t1cD9vcD1nZXQmc2VhcmNoPQorIAorIAorICVfbnNzZGJfcGF0aAkvZXRjL3BraS9uc3NkYgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW1hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhYjJkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorbWFjcm9zL21hY3Jvcy5pbjogUmV2ZXJ0IHNldHRpbmdzIHRvIHRoZSBzYW1lIGFzIFJQTSA1LjQuMAorCitFbmFibGUgYSByZWFzb25hYmxlIHNldCBvZiBycG1kZXBzIGRlcGVuZGVuY3kgaGVscGVyIG1hY3Jvcy4gIFRoZXNlIHNldHMKK3dlcmUgdXNlZCBieSBSUE0gNS40LjAuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC0xMDIyLDcgKzEwMjIsNyBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIHJwbWJ1aWxkIG1hY3Jvcy4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5ycG1idWlsZH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MucnBtYnVpbGR9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgY21ha2UoLi4uKSBjb25maWd1cmF0aW9uCitAQCAtMTAzOCwxNSArMTAzOCwxNSBAQCAkX2FyYml0cmFyeV90YWdzX3Rlc3RzCUZvbzpCYXIKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBwZXJsKC4uLikgY29uZmlndXJhdGlvbgorLSMlJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGVybH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wZXJsfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHB5dGhvbiguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9weXRob259CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcHl0aG9ufQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHBocCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9waHB9CisrJXtsb2FkOiV7X3VzcmxpYnJwbX0vbWFjcm9zLmQvcGhwfQorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGphdmEoLi4uKSBjb25maWd1cmF0aW9uLgorQEAgLTEwNTQsMTEgKzEwNTQsMTEgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgbGlidG9vbCguLi4pIGNvbmZpZ3VyYXRpb24uCistIyUle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9saWJ0b29sfQorKyV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL2xpYnRvb2x9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgcGtnY29uZmlnKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3BrZ2NvbmZpZ30KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC9wa2djb25maWd9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgbW9ubyguLi4pIGNvbmZpZ3VyYXRpb24uCitAQCAtMTA3MCw3ICsxMDcwLDcgQEAgJF9hcmJpdHJhcnlfdGFnc190ZXN0cwlGb286QmFyCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdGNsKC4uLikgY29uZmlndXJhdGlvbi4KKy0jJSV7bG9hZDole191c3JsaWJycG19L21hY3Jvcy5kL3RjbH0KKysle2xvYWQ6JXtfdXNybGlicnBtfS9tYWNyb3MuZC90Y2x9CisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdHlwZWxpYiguLi4pIGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1sb29wbXNnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNmVkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tbm8tbG9vcG1zZy5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWIvb3JkZXIuYzogTWFrZSB0aGUgZGVwZW5kZW5jeSBsb29wIG1lc3NhZ2VzIGludG8gZGVidWcgbXNncworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvb3JkZXIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvb3JkZXIuYworKysrIHJwbS01LjQuMTQvbGliL29yZGVyLmMKK0BAIC0yMTc1LDcgKzIxNzUsNyBAQCByZXNjYW46CisgCQljb25zdCBjaGFyICogZHA7CisgCQlycG1sb2dMdmwgbXNnbHZsID0gKGFuYWNvbmRhIHx8IChycG10c0RGbGFncyh0cykgJiBSUE1ERVBTX0ZMQUdfREVQTE9PUFMpKQorIAkJCT8gUlBNTE9HX1dBUk5JTkcgOiBSUE1MT0dfRVJSOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfTUFORFJJVkEpIC8qIGxvb3AtZGV0ZWN0aW9uLW9wdGlvbmFsLWxvZ2xldmVsICovCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9NQU5EUklWQSkgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBsb29wLWRldGVjdGlvbi1vcHRpb25hbC1sb2dsZXZlbCAqLworIAkJLy8gUmVwb3J0IGxvb3BzIGFzIGRlYnVnLWxldmVsIG1lc3NhZ2UgYnkgZGVmYXVsdCAoNyA9IFJQTUxPR19ERUJVRyksIG92ZXJyaWRhYmxlCisgCQltc2dsdmwgPSBycG1FeHBhbmROdW1lcmljKCIlez9fbG9vcF9kZXRlY3Rpb25fbG9nbGV2ZWx9JXs/IV9sb29wX2RldGVjdGlvbl9sb2dsZXZlbDo3fSIpOworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1wZXJsLXVycG0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxODIyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1uby1wZXJsLXVycG0ucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRGlzYWJsZSBwZXJsLVVSUE0gc3VwcG9ydAorCitUaGlzIGNhdXNlcyBhIGNvbmZpZ3VyZSBmYWlsdXJlIHdoZW4gcGVybC1VUlBNIGlzIG5vdCB1c2VkLgorCit8IGNvbmZpZ3VyZS5hYzoxMTU5OiByZXF1aXJlZCBmaWxlIGBwZXJsLVVSUE0vTWFrZWZpbGUuUEwuaW4nIG5vdCBmb3VuZAorfCBjb25maWd1cmUuYWM6MTE1OTogcmVxdWlyZWQgZmlsZSBgcGVybC1VUlBNL01ha2VmaWxlLmluJyBub3QgZm91bmQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTE4NiwzMCArMTE4NiwxMCBAQCBBQ19TVUJTVChXSVRIX1BFUkxfU1VCRElSKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9TVUJQQUNLQUdFKQorIEFDX1NVQlNUKFdJVEhfUEVSTF9MSUJTKQorIAorLWRubCAjIG9wdGlvbmFsIFBlcmwtVVJQTSBsYW5ndWFnZSBiaW5kaW5ncworK2RubCAjIGRpc2FibGUgUGVybC1VUlBNIGxhbmd1YWdlIGJpbmRpbmdzCisgV0lUSF9QRVJMX1VSUE1fU1VCRElSPSIiCisgV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRT0wCisgV0lUSF9QRVJMX1VSUE1fTElCUz0iIgorLWlmIHRlc3QgIi4kV0lUSF9QVEhSRUFEUyIgPSAueWVzOyB0aGVuCistICAgIFdJVEhfUEVSTF9VUlBNX0xJQlM9IiRMSUJTIgorLWZpCistQUNfQVJHX1dJVEgocGVybC11cnBtLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBlcmwtdXJwbV0sIFtidWlsZCB3aXRoIFBlcmwgVVJQTSBsYW5ndWFnZSBiaW5kaW5nc10pLCBbCistICAgIGlmIHRlc3QgIi4kd2l0aHZhbCIgIT0gLm5vOyB0aGVuCistCVBFUkxfVVJQTV9JTlNUQUxMRElSUz0iIgorLQkgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPT0gInZlbmRvciI7IHRoZW4KKy0JCSAgICBQRVJMX1VSUE1fSU5TVEFMTERJUlM9IidJTlNUQUxMRElSUycJPT4gJ3ZlbmRvcicsIgorLQkgICAgZmkKKy0JICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9PSAic2l0ZSI7IHRoZW4KKy0JCSAgICBQRVJMX1VSUE1fSU5TVEFMTERJUlM9IidJTlNUQUxMRElSUycgICAgID0+ICdzaXRlJywiCistCSAgICBmaQorLQkgICAgQUNfREVGSU5FX1VOUVVPVEVEKFtQRVJMX1VSUE1fSU5TVEFMTERJUlNdLCBbJFBFUkxfVVJQTV9JTlNUQUxMRElSU10sIFtQZXJsIGluc3RhbGwgZGlyZWN0b3J5ICh2ZW5kb3Ivc2l0ZSldKQorLQkgICAgQUNfU1VCU1QoUEVSTF9VUlBNX0lOU1RBTExESVJTKQorLSAgICAgICAgV0lUSF9QRVJMX1VSUE1fU1VCRElSPXBlcmwtVVJQTQorLSAgICAgICAgV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRT0xCistICAgICAgICBBQ19DT05GSUdfRklMRVMoW3BlcmwtVVJQTS9NYWtlZmlsZS5QTF0pCistICAgICAgICBBQ19DT05GSUdfRklMRVMoW3BlcmwtVVJQTS9NYWtlZmlsZV0pCistICAgIGZpCistXSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9TVUJESVIpCisgQUNfU1VCU1QoV0lUSF9QRVJMX1VSUE1fU1VCUEFDS0FHRSkKKyBBQ19TVUJTVChXSVRIX1BFUkxfVVJQTV9MSUJTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q1ODZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9wZW5kYi1iZWZvcmUtdmVyaWZ5c2NyaXB0LXRvLWF2b2lkLW51bGwtcG9pbnQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorcnBtOiBvcGVuZGIgYmVmb3JlIHJwbXZlcmlmeXNjcmlwdCB0byBhdm9pZCBudWxsIHBvaW50IGlucHV0CisKK0lmIHRoZSBjb21tYW5kIGlzICJycG0gLVYiIGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIChoZWFkZXJJc0VudHJ5KGgsIFJQTVRBR19WRVJJRllTQ1JJUFQpIAorfHwgaGVhZGVySXNFbnRyeShoLCBSUE1UQUdfU0FOSVRZQ0hFQ0spKSBsb2NhdGVkIGluIC9saWIvdmVyaWZ5LmMgaXMgdHJ1ZSwgaXQgd2lsbCBjYWxsCitycG1wc21TdGFnZSBmdW5jdGlvbihycG1WZXJpZnlTY3JpcHQtPnJwbXBzbVNjcmlwdFN0YWdlLT5ycG1wc21TdGFnZSkgYW5kIG9jY3VyIHNlZ21lbnQKK2ZhdWx0IGJlY2F1c2Ugb2YgbnVsbCBwb2ludChycG10c0dldFJkYih0cykgPT0gTlVMTCBhbmQgcnBtdHNHZXRSZGIodHMpLT5kYl90eG4pLgorU28gd2Ugb3BlbiBycG1kYiB0byBhdm9pZCBiYWQgaW5wdXQgd2hlbiBmaW5kIGhlYWRlcklzRW50cnkgdHJ1ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFpoaXhpb25nIENoaSA8emhpeGlvbmcuY2hpQHdpbmRyaXZlci5jb20+CitJbmRleDogcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3ZlcmlmeS5jCTIwMTUtMDctMjIgMjI6MDk6NTkuOTkyODk1MzU1ICswODAwCisrKysgcnBtLTUuNC4xNC9saWIvdmVyaWZ5LmMJMjAxNS0wOC0xMyAxMDoyMDozMy43NTIxNzc5MDYgKzA4MDAKK0BAIC02MTMsNiArNjEzLDggQEAKKyAJeworIAkgICAgRkRfdCBmZG8gPSBmZER1cChTVERPVVRfRklMRU5PKTsKKyAKKysJICAgIHJwbXRzT3BlbkRCKHRzLCBPX1JET05MWSk7ICAgICAgICAgICAgLypPcGVuIHRoZSBEQiB0byBhdm9pZCBudWxsIHBvaW50IGlucHV0IGluIGZ1bmN0aW9uIHJwbXBzbVN0YWdlKCkqLworKworIAkgICAgcmMgPSBycG1maVNldEhlYWRlcihmaSwgaCk7CisgCSAgICBpZiAoKHJjID0gcnBtVmVyaWZ5U2NyaXB0KHF2YSwgdHMsIGZpLCBmZG8pKSAhPSAwKQorIAkJZWMgKz0gcmM7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tb3NzcC11dWlkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9zc3AtdXVpZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTFhYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLW9zc3AtdXVpZC5wYXRjaApAQCAtMCwwICsxLDIzIEBACitGaXggaW50ZWdyYXRpb24gb2Ygb3NzcC11dWlkCisKK1dlIG5lZWQgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZSB1dGlsLWxpbnV4IHV1aWQgbGlicmFyeSwgaW5zdGVhZAord2UgbmVlZCBvc3NwLXV1aWQuICBUaGVyZSBpcyBhIHJlbGF0ZWQgaGFjayBpbiBkb19jb25maWd1cmUgdG8KK21ha2Ugc3VyZSB0aGF0IHdlIHVzZSB0aGUgcmlnaHQgLnBjIGZpbGUgYXMgd2VsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHJwbS01LjQuMTQvY29uZmlndXJlLmFjCitAQCAtMTk1MSw3ICsxOTUxLDcgQEAgZ3JlcCAtdiAnZGVmaW5lIEhBVkVfVU5JU1REX0gnIGNvbmZkZWZzLgorIGVzYWMKKyBSUE1fQ0hFQ0tfTElCKAorICAgICBbT1NTUCB1dWlkXSwgW3V1aWRdLAorLSAgICBbb3NzcC11dWlkIHV1aWRdLCBbdXVpZF9pbXBvcnRdLCBbdXVpZC5oXSwKKysgICAgW29zc3AtdXVpZF0sIFt1dWlkX2ltcG9ydF0sIFt1dWlkLmhdLAorICAgICBbbm8sZXh0ZXJuYWw6bm9uZV0sIFtdLAorICAgICBbIGRubCAjIGVuYWJsZSBPU1NQIHV1aWQgbmF0aXZlIEFQSSBzdXBwb3J0IGZvciBlbWJlZGRlZCBMdWEKKyAgICAgICBpZiB0ZXN0ICIuJFdJVEhfTFVBIiA9IC55ZXM7IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBhY2thZ2VvcmlnaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1ZTEyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCB0aGUgYWJpbGl0eSB0byBxdWVyeSB0aGUgcGFja2FnZW9yaWdpbgorCitXcml0dGVuIGJ5IGpiaiBhdCBycG01Lm9yZworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhdXRob3JdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcnBtZGIvaGRyZm10LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvaGRyZm10LmMKKysrKyBycG0tNS40LjE0L3JwbWRiL2hkcmZtdC5jCitAQCAtMjQwOSw4ICsyNDA5LDEwIEBAIHN0YXRpYyBpbnQgcGtnb3JpZ2luVGFnKEhlYWRlciBoLCBIRV90IGgKKyAgICAgaW50IHJjID0gMTsKKyAKKyAgICAgaGUtPnRhZyA9IFJQTVRBR19QQUNLQUdFT1JJR0lOOworLSAgICBpZiAoIWhlYWRlckdldChoLCBoZSwgSEVBREVSR0VUX05PRVhURU5TSU9OKQorLSAgICAgJiYgKG9yaWdpbiA9IGhlYWRlckdldE9yaWdpbihoKSkgIT0gTlVMTCkKKysgICAgLyogWFhYIHR3byBzb3VyY2VzIGZvciB0YWcgZGF0YTogd2hhdCBzZWFyY2ggcHJlY2VkZW5jZT8gKi8KKysgICAgaWYgKGhlYWRlckdldChoLCBoZSwgSEVBREVSR0VUX05PRVhURU5TSU9OKSkKKysJcmMgPSAwOworKyAgICBlbHNlIGlmICgob3JpZ2luID0gaGVhZGVyR2V0T3JpZ2luKGgpKSAhPSBOVUxMKQorICAgICB7CisgCWhlLT50ID0gUlBNX1NUUklOR19UWVBFOworIAloZS0+cC5zdHIgPSB4c3RyZHVwKG9yaWdpbik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2QwMmEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBheWxvYWQtdXNlLWhhc2hlZC1pbm9kZS5wYXRjaApAQCAtMCwwICsxLDE0NiBAQAorSWYgd2UgcnVuIGJ1aWxkcyBvbiBhIGZpbGVzeXN0ZW0gd2l0aCA2NCBiaXQgaW5vZGVzIGxpa2UgWEZTLCB3ZSBuZWVkIHRvCittYXAgdGhlIGlub2RlIG51bWJlcnMgdG8gc29tZXRoaW5nIDMyIGJpdCBzaW5jZSB0aGUgY3BpbyBoZWFkZXIgb25seSBhbGxvd3MKK2ZvciAzMiBiaXQgaW5vZGUgdmFsdWVzLiBJZiB3ZSBkb24ndCBkbyB0aGlzOgorCisjZGVmaW5lIFNFVF9OVU1fRklFTEQocGh5cywgdmFsLCBzcGFjZSkgXAorICAgICAgICBzcHJpbnRmKHNwYWNlLCAiJTguOGx4IiwgKHVuc2lnbmVkIGxvbmcpICh2YWwpKTsgXAorICAgICAgICBtZW1jcHkocGh5cywgc3BhY2UsIDgpCisKK2Zyb20gY3Bpby5jIHdpbGwgcHJpbnQgbGFyZ2VyIHRoYXQgOCBjaGFyYWN0ZXIgdmFsdWVzIGFuZCB0aGVuIHRydW5jYXRlIHRoZSAKK0xTQnMuIFRoaXMgZ2VuZXJhdGVzIGNwaW8gZmlsZXMgd2hlcmUgaGFyZGxpbmtlZCBmaWxlcyBtYXkgaGF2ZSB0aGUgc2FtZQoraW5vZGUgbnVtYmVyLiBUaGUgcmVzdWx0aW5nIHJwbXMgYXJlIHRoZW4gY29ycnVwdGVkLgorCitUaGVyZSBpcyBhIHNlcGFyYXRlIHBhdGNoIGZvciB0aGUgY3Jhc2ggdGhlIGlkZW50aWNhbCBpbm9kZSBudW1iZXJzIGNhdXNlcword2hlbiBleHRyYWN0aW5nIHRoZSBycG0uCisKK1BhdGNoIHRha2VuIGZyb20gaHR0cDovL2dpdC5wbGQtbGludXgub3JnLz9wPXBhY2thZ2VzL3JwbS5naXQ7YT1jb21taXRkaWZmO2g9MTA1MjZjMjNhYWM2MGI3YjYzNmU0YzkzODYyODg3ZGJlZjhlOGYxNQorCitSUCAyMDE0LzYvMTAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycG0tNS40LjE0L2J1aWxkL2ZpbGVzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvYnVpbGQvZmlsZXMuYworKysrIHJwbS01LjQuMTQvYnVpbGQvZmlsZXMuYworQEAgLTEzMjgsNiArMTMyOCwyNiBAQCBzdGF0aWMgcnBtdWludDMyX3QgZ2V0RGlnZXN0QWxnbyhIZWFkZXIKKyAgICAgcmV0dXJuIGRhbGdvOworIH0KKyAKKytzdGF0aWMgaW50IGlzSGFyZExpbmsoRmlsZUxpc3RSZWMgZmxwLCBGaWxlTGlzdFJlYyB0bHApCisreworKyAgICByZXR1cm4gKChTX0lTUkVHKGZscC0+ZmxfbW9kZSkgJiYgU19JU1JFRyh0bHAtPmZsX21vZGUpKSAmJgorKyAgICAgICAgICAgICgoZmxwLT5mbF9ubGluayA+IDEpICYmIChmbHAtPmZsX25saW5rID09IHRscC0+ZmxfbmxpbmspKSAmJgorKyAgICAgICAgICAgIChmbHAtPmZsX2lubyA9PSB0bHAtPmZsX2lubykgJiYKKysgICAgICAgICAgICAoZmxwLT5mbF9kZXYgPT0gdGxwLT5mbF9kZXYpKTsKKyt9CisrCisrc3RhdGljIGludCBzZWVuSGFyZExpbmsoRmlsZUxpc3QgZmwsIEZpbGVMaXN0UmVjIGZscCwgaW5vX3QgKmZpbGVpZCkKKyt7CisrICAgIEZpbGVMaXN0UmVjIGlscDsKKysgICAgZm9yIChpbHAgPSBmbC0+ZmlsZUxpc3Q7IGlscCA8IGZscDsgaWxwKyspIHsKKysgICAgICAgIGlmIChpc0hhcmRMaW5rKGZscCwgaWxwKSkgeworKyAgICAgICAgICAgICpmaWxlaWQgPSBpbHAgLSBmbC0+ZmlsZUxpc3Q7CisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDA7CisrfQorKworIC8qKgorICAqIEFkZCBmaWxlIGVudHJpZXMgdG8gaGVhZGVyLgorICAqIEB0b2RvIFNob3VsZCBkaXJlY3RvcmllcyBoYXZlICVkb2MvJWNvbmZpZyBhdHRyaWJ1dGVzPyAoIzE0NTMxKQorQEAgLTEzNzQsNiArMTM5NCw3IEBAIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsJLyogWFhYIHZhbGcKKyAKKyAgICAgZm9yIChpID0gMCwgZmxwID0gZmwtPmZpbGVMaXN0OyBpIDwgZmwtPmZpbGVMaXN0UmVjc1VzZWQ7IGkrKywgZmxwKyspIHsKKyAJY29uc3QgY2hhciAqczsKKysJaW5vX3QgZmlsZWlkID0gZmxwIC0gZmwtPmZpbGVMaXN0OworIAorICAJLyogTWVyZ2UgZHVwbGljYXRlIGVudHJpZXMuICovCisgCXdoaWxlIChpIDwgKGZsLT5maWxlTGlzdFJlY3NVc2VkIC0gMSkgJiYKK0BAIC0xNDM2LDYgKzE0NTcsMTMgQEAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwkvKiBYWFggdmFsZworIAkvKiBMZWF2ZSByb29tIGZvciBib3RoIGRpcm5hbWUgYW5kIGJhc2VuYW1lIE5VTCdzICovCisgCWRwYXRobGVuICs9IChzdHJsZW4oZmxwLT5kaXNrVVJMKSArIDIpOworIAorKwkvKiBFeGNsdWRlcyBhbmQgZHVwZXMgaGF2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSBub3cuICovCisrCWlmIChTX0lTUkVHKGZscC0+ZmxfbW9kZSkpIHsKKysJICAgIGlmIChmbHAtPmZsX25saW5rID09IDEgfHwgIXNlZW5IYXJkTGluayhmbCwgZmxwLCAmZmlsZWlkKSkgeworKwkJZmwtPnRvdGFsRmlsZVNpemUgKz0gZmxwLT5mbF9zaXplOworKwkgICAgfQorKwl9CisrCisgCS8qCisgCSAqIE1ha2UgdGhlIGhlYWRlciwgdGhlIE9MREZJTEVOQU1FUyB3aWxsIGdldCBjb252ZXJ0ZWQgdG8gYSAKKyAJICogY29tcHJlc3NlZCBmaWxlIGxpc3Qgd3JpdGUgYmVmb3JlIHdlIHdyaXRlIHRoZSBhY3R1YWwgcGFja2FnZSB0bworQEAgLTE1MTgsNyArMTU0NiwxMSBAQCBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CS8qIFhYWCB2YWxnCisgCisgCS8qIFhYWCBIYXNoIGluc3RlYWQgb2YgNjRiLT4zMmIgdHJ1bmNhdGUgdG8gcHJldmVudCBhbGlhc2luZy4gKi8KKyAJeyAgIGlub190IF9pbm8gPSBmbHAtPmZsX2lubzsKKysJLyogZG9uJ3QgdXNlIGhhc2ggaGVyZSwgYXMgaGFzaCBjb2xsaXNpb25zIHdoaWNoIGhhcHBlbiBvbiBsYXJnZSBwYWNrYWdlcworKwkgICBjYXVzZSBidXMgZXJyb3JzIGluIHJwbWJ1aWxkCisgCSAgICB1aTMyID0gaGFzaEZ1bmN0aW9uU3RyaW5nKDAsICZfaW5vLCBzaXplb2YoX2lubykpOworKwkqLworKwkgICAgdWkzMiA9IGZpbGVpZCArIDE7CisgCX0KKyAJaGUtPnRhZyA9IFJQTVRBR19GSUxFSU5PREVTOworIAloZS0+dCA9IFJQTV9VSU5UMzJfVFlQRTsKK0BAIC0xNzUxLDM5ICsxNzgzLDYgQEAgaWYgKF9ycG1idWlsZEZsYWdzICYgNCkgeworIAkJSU9TTV9NQVBfVFlQRSB8IElPU01fTUFQX01PREUgfCBJT1NNX01BUF9VSUQgfCBJT1NNX01BUF9HSUQ7CisgCWlmIChpc1NyYykKKyAJICAgIGZpLT5mbWFwZmxhZ3NbaV0gfD0gSU9TTV9GT0xMT1dfU1lNTElOS1M7CistCistCWlmIChTX0lTUkVHKGZscC0+ZmxfbW9kZSkpIHsKKy0JICAgIGludCBiaW5nbyA9IDE7CistCSAgICAvKiBIYXJkIGxpbmtzIG5lZWQgYmUgdGFsbGllZCBvbmx5IG9uY2UuICovCistCSAgICBpZiAoZmxwLT5mbF9ubGluayA+IDEpIHsKKy0JCUZpbGVMaXN0UmVjIGpscCA9IGZscCArIDE7CistCQlpbnQgaiA9IGkgKyAxOworLQkJZm9yICg7ICh1bnNpZ25lZClqIDwgZmktPmZjOyBqKyssIGpscCsrKSB7CistCQkgICAgLyogZm9sbG93IG91dGVyIGxvb3AgbG9naWMgKi8KKy0JCSAgICB3aGlsZSAoKChqbHAgLSBmbC0+ZmlsZUxpc3QpIDwgKGZsLT5maWxlTGlzdFJlY3NVc2VkIC0gMSkpICYmCistCQkJICAgICFzdHJjbXAoamxwLT5maWxlVVJMLCBqbHBbMV0uZmlsZVVSTCkpCistCQkJamxwKys7CistCQkgICAgaWYgKGpscC0+ZmxhZ3MgJiBSUE1GSUxFX0VYQ0xVREUpIHsKKy0JCQlqLS07CistCQkJLypAaW5uZXJjb250aW51ZUAqLyBjb250aW51ZTsKKy0JCSAgICB9CistCQkgICAgaWYgKGpscC0+ZmxhZ3MgJiBSUE1GSUxFX0dIT1NUKQorLQkJICAgICAgICAvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmICghU19JU1JFRyhqbHAtPmZsX21vZGUpKQorLQkJCS8qQGlubmVyY29udGludWVAKi8gY29udGludWU7CistCQkgICAgaWYgKGZscC0+ZmxfbmxpbmsgIT0gamxwLT5mbF9ubGluaykKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX2lubyAhPSBqbHAtPmZsX2lubykKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGlmIChmbHAtPmZsX2RldiAhPSBqbHAtPmZsX2RldikKKy0JCQkvKkBpbm5lcmNvbnRpbnVlQCovIGNvbnRpbnVlOworLQkJICAgIGJpbmdvID0gMDsJLyogZG9uJ3QgdGFsbHkgaGFyZGxpbmsgeWV0LiAqLworLQkJICAgIC8qQGlubmVyYnJlYWtAKi8gYnJlYWs7CistCQl9CistCSAgICB9CistCSAgICBpZiAoYmluZ28pCistCQlmbC0+dG90YWxGaWxlU2l6ZSArPSBmbHAtPmZsX3NpemU7CistCX0KKyAgICAgfQorIAorICAgICB1aTMyID0gZmwtPnRvdGFsRmlsZVNpemU7CitJbmRleDogcnBtLTUuNC4xNC9saWIvZnNtLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2ZzbS5jCisrKysgcnBtLTUuNC4xNC9saWIvZnNtLmMKK0BAIC05MDQsNiArOTA0LDcgQEAgaW50IGZzbU1hcEF0dHJzKElPU01fdCBmc20pCisgCisgICAgIGlmIChmaSAmJiBpID49IDAgJiYgaSA8IChpbnQpIGZpLT5mYykgeworIAltb2RlX3QgcGVybXMgPSAoU19JU0RJUihzdC0+c3RfbW9kZSkgPyBmaS0+ZHBlcm1zIDogZmktPmZwZXJtcyk7CisrCWlub190IGZpbmFsSW5vZGUgPSAoZmktPmZpbm9kZXMgPyAoaW5vX3QpZmktPmZpbm9kZXNbaV0gOiAwKTsKKyAJbW9kZV90IGZpbmFsTW9kZSA9IChmaS0+Zm1vZGVzID8gKG1vZGVfdClmaS0+Zm1vZGVzW2ldIDogcGVybXMpOworIAlkZXZfdCBmaW5hbFJkZXYgPSAoZGV2X3QpKGZpLT5mcmRldnMgPyBmaS0+ZnJkZXZzW2ldIDogMCk7CisgCXJwbXVpbnQzMl90IGZpbmFsTXRpbWUgPSAoZmktPmZtdGltZXMgPyBmaS0+Zm10aW1lc1tpXSA6IDApOworQEAgLTk0Myw2ICs5NDQsNyBAQCBpbnQgZnNtTWFwQXR0cnMoSU9TTV90IGZzbSkKKyAJICAgIGlmICgoU19JU0NIUihzdC0+c3RfbW9kZSkgfHwgU19JU0JMSyhzdC0+c3RfbW9kZSkpCisgCSAgICAmJiBzdC0+c3RfbmxpbmsgPT0gMCkKKyAJCXN0LT5zdF9ubGluayA9IDE7CisrCSAgICBzdC0+c3RfaW5vID0gZmluYWxJbm9kZTsKKyAJICAgIHN0LT5zdF9yZGV2ID0gZmluYWxSZGV2OworIAkgICAgc3QtPnN0X210aW1lID0gZmluYWxNdGltZTsKKyAJfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGtnY29uZmlnZGVwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDE4MmFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorcGtnY29uZmlnZGVwcy5zaDogQ2hhbmdlIHRvIHJlc3RyaWN0aW5nIHBrZ2NvbmZpZyB0byB0aGUgbG9jYWwgZGlyZWN0b3J5CisKK1VzaW5nIFBLR19DT05GSUdfUEFUSCB3aWxsIGFsbG93IHBrZy1jb25maWcgdG8gZmFsbCBiYWNrIHRvIHRoZSBzeXN0ZW0gcGF0aHMsCit3ZSBkb24ndCB3YW50IHRoaXMgYXMgaXQgbWF5IGxlYWQgdG8gaW5hY2N1cmF0ZSByZXN1bHRzIGluIHNvbWUgY29ybmVyIGNhc2VzLgorCitQS0dfQ09ORklHX0xJQkRJUiB3aWxsIGVuc3VyZSBwa2ctY29uZmlnIHN0YXlzIHdpdGhpbiB0aGUgaW5zdGFsbCBkaXJlY3RvcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc2NyaXB0cy9wa2djb25maWdkZXBzLnNoCisrKysgcnBtLTUuNC4xNC9zY3JpcHRzL3BrZ2NvbmZpZ2RlcHMuc2gKK0BAIC0xOCw4ICsxOCw4IEBAIGNhc2UgJDEgaW4KKyAgICAgKi5wYykKKyAJIyBRdWVyeSB0aGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBwYWNrYWdlLgorIAlESVI9YGRpcm5hbWUgJHtmaWxlbmFtZX1gCistCVBLR19DT05GSUdfUEFUSD0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKy0JZXhwb3J0IFBLR19DT05GSUdfUEFUSAorKwlQS0dfQ09ORklHX0xJQkRJUj0iJERJUjokRElSLy4uLy4uL3NoYXJlL3BrZ2NvbmZpZyIKKysJZXhwb3J0IFBLR19DT05GSUdfTElCRElSCisgCSRwa2djb25maWcgLS1wcmludC1wcm92aWRlcyAiJGZpbGVuYW1lIiAyPiAvZGV2L251bGwgfCB3aGlsZSByZWFkIG4gciB2IDsgZG8KKyAJICAgIFsgLW4gIiRuIiBdIHx8IGNvbnRpbnVlCisgCSAgICAjIFdlIGhhdmUgYSBkZXBlbmRlbmN5LiAgTWFrZSBhIG5vdGUgdGhhdCB3ZSBuZWVkIHRoZSBwa2djb25maWcKK0BAIC00Miw4ICs0Miw4IEBAIGNhc2UgJDEgaW4KKyAJWyAtbiAiJG9uZXNob3QiIF0gJiYgZWNobyAiJG9uZXNob3QiOyBvbmVzaG90PSIiCisgCSMgUXVlcnkgdGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZS4KKyAJRElSPWBkaXJuYW1lICR7ZmlsZW5hbWV9YAorLQlQS0dfQ09ORklHX1BBVEg9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCistCWV4cG9ydCBQS0dfQ09ORklHX1BBVEgKKysJUEtHX0NPTkZJR19MSUJESVI9IiRESVI6JERJUi8uLi8uLi9zaGFyZS9wa2djb25maWciCisrCWV4cG9ydCBQS0dfQ09ORklHX0xJQkRJUgorIAkkcGtnY29uZmlnIC0tcHJpbnQtcmVxdWlyZXMgIiRmaWxlbmFtZSIgMj4gL2Rldi9udWxsIHwgd2hpbGUgcmVhZCBuIHIgdiA7IGRvCisgCSAgICBbIC1uICIkbiIgXSB8fCBjb250aW51ZQorIAkgICAgaWYgIFsgLW4gIiRyIiBdICYmIFsgLW4gIiR2IiBdOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcGxhdGZvcm0tZmlsZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI2YTZlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitEb24ndCBhZGQgdGhlIGZpcnN0IGxpbmUgb2YgL2V0Yy9ycG0vcGxhdGZvcm0gdG8gdGhlIGxpc3Qgb2YgcGF0dGVybnMKK3RvIG1hdGNoIHdoZW4gY29tcHV0aW5nIGFuIGFyY2ggc2NvcmUsIHVzZSBpdCBqdXN0IGZvciBnZXR0aW5nCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGxhdGZvcm0gKGNwdS92ZW5kb3Ivb3MpLiBGaXhlcyAjMzg2NC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbXJjLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbXJjLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1yYy5jCitAQCAtNTEwLDYgKzUxMCw3IEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAjZW5kaWYKKyAJfQorIAorKyNpZiAhZGVmaW5lZChSUE1fVkVORE9SX09FKSAvKiBTa2lwIHRoZSBleHBsaWNpdC1wbGF0Zm9ybSAqLworICNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfT1BFTlBLRykgLyogZXhwbGljaXQtcGxhdGZvcm0gKi8KKyAJLyogZG8gbm90IHVzZSB2ZW5kb3IgYW5kIEdOVSBhdHRyaWJ1dGlvbiAqLworIAlwID0gcnBtRXhwYW5kKCIle19ob3N0X2NwdX0tJXtfaG9zdF9vc30iLCBOVUxMKTsKK0BAIC01MjAsNyArNTIxLDggQEAgc3RhdGljIHJwbVJDIHJwbVBsYXRmb3JtKGNvbnN0IGNoYXIgKiBwbAorICNlbmRpZgorIAl4eCA9IG1pcmVBcHBlbmQoUlBNTUlSRV9TVFJDTVAsIDAsIHAsIE5VTEwsICZtaV9yZSwgJm1pX25yZSk7CisgCXAgPSBfZnJlZShwKTsKKy0JCisrI2VuZGlmCisrCisgCWluaXRfcGxhdGZvcm0rKzsKKyAgICAgfQorICAgICByYyA9IChpbml0X3BsYXRmb3JtID8gUlBNUkNfT0sgOiBSUE1SQ19GQUlMKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWZkMDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtLnBhdGNoCkBAIC0wLDAgKzEsMTM3IEBACitGaXggdXAgcGxhdGZvcm0gYW5kIHJlbGF0ZWQgc3lzaW5mbyBmaWxlIGxvYWRpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIGVuc3VyZXMgdGhhdCBSUE0ga25vd3MgdGhlIGNvbXBhdGlibGUgc2V0IG9mIHBhY2thZ2UgdHlwZXMgYXQgYWxsIHRpbWVzLgorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9kZXBlbmRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2RlcGVuZHMuYworKysrIHJwbS01LjQuMTQvbGliL2RlcGVuZHMuYworQEAgLTI1MCw3ICsyNTAsNyBAQCBzdGF0aWMgaW50IHJwbXRzQWRkVXBncmFkZXMocnBtdHMgdHMsIHJwCisgCSAgICBoZS0+cC5wdHIgPSBfZnJlZShoZS0+cC5wdHIpOworIAl9CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgCS8qCisgCSAqIElmIHdlJ3JlIGNhcGFibGUgb2YgaW5zdGFsbGluZyBtdWx0aXBsZSBjb2xvcnMKKyAJICogYnV0IGF0IGxlYXN0IG9uZSBvZiB0aGUgcGFja2FnZXMgYXJlIHdoaXRlICgwKSwgd2UKK0BAIC01MDcsNyArNTA3LDcgQEAgYXNzZXJ0KGxhc3R4ID49IDAgJiYgbGFzdHggPCB0cy0+b3JkZXJDbworICAgICByZXR1cm4gMDsKKyB9CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpICYmICFkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgLyogSXMgImNvbXBhdCIgY29tcGF0aWJsZSB3LyBhcmNoPyAqLworIGludCBfaXNDb21wYXRpYmxlQXJjaChjb25zdCBjaGFyICogYXJjaCwgY29uc3QgY2hhciAqIGNvbXBhdCkKKyB7CitAQCAtNjYzLDcgKzY2Myw3IEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCisgCSAgICBpZiAoYXJjaCA9PSBOVUxMIHx8IChwYXJjaCA9IHJwbXRlQShwKSkgPT0gTlVMTCkKKyAJCWNvbnRpbnVlOworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSAmJiAhZGVmaW5lZChSUE1fVkVORE9SX09FKQorIAkgICAgLyogWFhYIGhhY2tlcnkgZm9yIGFsaWFzIG1hdGNoaW5nLiAqLworIAkgICAgaWYgKCFfaXNDb21wYXRpYmxlQXJjaChhcmNoLCBwYXJjaCkpCisgCQljb250aW51ZTsKK0BAIC04MjksNiArODI5LDEyIEBAIGludCBycG10c0FkZEVyYXNlRWxlbWVudChycG10cyB0cywgSGVhZGUKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKKysjaWYgZGVmaW5lZChSUE1fVkVORE9SX1dJTkRSSVZFUikgfHwgZGVmaW5lZChSUE1fVkVORE9SX09FKQorKyNkZWZpbmUgX0VUQ19SUE1fU1lTSU5GTyAgICAgICAgIiV7X2V0Y3JwbX0vc3lzaW5mbyIKKysjZWxzZQorKyNkZWZpbmUgX0VUQ19SUE1fU1lTSU5GTyAgICAgICAgU1lTQ09ORklHRElSICIvc3lzaW5mbyIKKysjZW5kaWYKKysKKyAvKkBvbmx5QCovIC8qQG51bGxAKi8gLypAdW5jaGVja2VkQCovCisgc3RhdGljIGNoYXIgKnN5c2luZm9fcGF0aCA9IE5VTEw7CisgCitAQCAtMTMxMSw3ICsxMzE3LDcgQEAgcmV0cnk6CisgCXN5c2luZm9fcGF0aCA9IHJwbUV4cGFuZCgiJXs/X3JwbWRzX3N5c2luZm9fcGF0aH0iLCBOVUxMKTsKKyAJaWYgKCEoc3lzaW5mb19wYXRoICE9IE5VTEwgJiYgKnN5c2luZm9fcGF0aCA9PSAnLycpKSB7CisgCSAgICBzeXNpbmZvX3BhdGggPSBfZnJlZShzeXNpbmZvX3BhdGgpOworLQkgICAgc3lzaW5mb19wYXRoID0geHN0cmR1cChTWVNDT05GSUdESVIgIi9zeXNpbmZvIik7CisrCSAgICBzeXNpbmZvX3BhdGggPSBycG1FeHBhbmQoX0VUQ19SUE1fU1lTSU5GTywgTlVMTCk7CisgCX0KKyAgICAgfQorIAorSW5kZXg6IHJwbS01LjQuMTQvbGliL3JwbWRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL3JwbWRzLmMKKysrKyBycG0tNS40LjE0L2xpYi9ycG1kcy5jCitAQCAtMTc1OSw3ICsxNzU5LDcgQEAgaW50IHJwbWRzU3lzaW5mbyhycG1QUkNPIFBSQ08sIGNvbnN0IGNoYQorIC8qQC1vYnNlcnZlcnRyYW5zIEAqLworIAkgICAgX3N5c2luZm9fcGF0aCA9IF9mcmVlKF9zeXNpbmZvX3BhdGgpOworIC8qQD1vYnNlcnZlcnRyYW5zIEAqLworLQkgICAgX3N5c2luZm9fcGF0aCA9IHhzdHJkdXAoX0VUQ19SUE1fU1lTSU5GTyk7CisrCSAgICBfc3lzaW5mb19wYXRoID0gcnBtRXhwYW5kKF9FVENfUlBNX1NZU0lORk8sIE5VTEwpOworIAl9CisgICAgIH0KKyAvKkA9bW9kb2JzZXJ2ZXJAKi8KK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG1yYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG1yYy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtcmMuYworQEAgLTM4LDcgKzM4LDEzIEBACisgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25maWdUYXJnZXQgPSBOVUxMOworIAorIC8qQG9ic2VydmVyQCovIC8qQHVuY2hlY2tlZEAqLworLXN0YXRpYyBjb25zdCBjaGFyICogcGxhdGZvcm0gPSBTWVNDT05GSUdESVIgIi9wbGF0Zm9ybSI7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCisrI2RlZmluZSBfRVRDX1JQTV9QTEFURk9STSAgICAgICAgIiV7X2V0Y3JwbX0vcGxhdGZvcm0iCisrI2Vsc2UKKysjZGVmaW5lIF9FVENfUlBNX1BMQVRGT1JNICAgICAgICBTWVNDT05GSUdESVIgIi9wbGF0Zm9ybSIKKysjZW5kaWYKKysKKytzdGF0aWMgY29uc3QgY2hhciAqIF9wbGF0Zm9ybSA9IE5VTEw7CisgCisgLypAb25seUAqLyAvKkByZWxudWxsQCovIC8qQHVuY2hlY2tlZEAqLworIHZvaWQgKiBwbGF0cGF0ID0gTlVMTDsKK0BAIC02OTQsMTYgKzcwMCwxNyBAQCBzdGF0aWMgdm9pZCBkZWZhdWx0TWFjaGluZSgvKkBvdXRAKi8gY29uCisgICAgIGludCByYzsKKyAKKyAgICAgd2hpbGUgKCFnb3REZWZhdWx0cykgeworLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorLQljb25zdCBjaGFyICogX3BsYXRmb3JtID0gcnBtR2V0UGF0aChfX2V0Y3JwbSwgIi9wbGF0Zm9ybSIsIE5VTEwpOworLSNlbHNlCistCWNvbnN0IGNoYXIgKiBfcGxhdGZvcm0gPSBwbGF0Zm9ybTsKKy0jZW5kaWYKKysJaWYgKF9wbGF0Zm9ybSA9PSBOVUxMKSB7CisrCSAgICBfcGxhdGZvcm0gPSBycG1FeHBhbmQoIiV7P19ycG1yY19wbGF0Zm9ybV9wYXRofSIsIE5VTEwpOworKwkgICAgLyogWFhYIG1heSBuZWVkIHRvIHZhbGlkYXRlIHBhdGggZXhpc3RlbmNlIHNvbWV3aGVuLiAqLworKwkgICAgaWYgKCEoX3BsYXRmb3JtICE9IE5VTEwgJiYgKl9wbGF0Zm9ybSA9PSAnLycpKSB7CisrCQlfcGxhdGZvcm0gPSBfZnJlZShfcGxhdGZvcm0pOworKwkJX3BsYXRmb3JtID0gcnBtRXhwYW5kKF9FVENfUlBNX1BMQVRGT1JNLCBOVUxMKTsKKysJICAgIH0KKysJfQorIAlDVk9HX3QgY3ZvZyA9IE5VTEw7CisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBsYXJnZXItdXRzbmFtZSAqLworIAljb25zdCBjaGFyICpjcDsKKy0jZW5kaWYKKy0jaWYgZGVmaW5lZChSUE1fVkVORE9SX09QRU5QS0cpIC8qIGxhcmdlci11dHNuYW1lICovCisgCS8qIHV0c25hbWUgZmllbGRzIG9uIHNvbWUgcGxhdGZvcm1zIChsaWtlIEhQLVVYKSBhcmUgdmVyeSBzbWFsbAorIAkgICAoanVzdCBhYm91dCA4IGNoYXJhY3RlcnMpLiBUaGlzIGlzIHRvbyBzbWFsbCBmb3IgT3BlblBLRywgc28gY2hlYXQhICovCisgCXJjID0gdW5hbWUoJnVuX3JlYWwpOworQEAgLTc4MCw5ICs3ODcsNyBAQCBzdGF0aWMgdm9pZCBkZWZhdWx0TWFjaGluZSgvKkBvdXRAKi8gY29uCisgCWlmIChjcCAhPSBOVUxMICYmIGNwICE9IF9wbGF0Zm9ybSkKKyAJICAgIGNwID0gX2ZyZWUoY3ApOworICNlbmRpZgorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorIAlfcGxhdGZvcm0gPSBfZnJlZShfcGxhdGZvcm0pOworLSNlbmRpZgorIAorIAlpZiAoY29uZmlnVGFyZ2V0ICYmICFwYXJzZUNWT0coY29uZmlnVGFyZ2V0LCAmY3ZvZykgJiYgY3ZvZyAhPSBOVUxMKSB7CisgCSAgICBnb3REZWZhdWx0cyA9IDE7CitAQCAtMTEwMSw2ICsxMTA2LDggQEAgaW50IHJwbVJlYWRDb25maWdGaWxlcygvKkB1bnVzZWRAKi8gY29ucworIAorICNpZmRlZiBQUkVNQUNST0ZJTEVTCisgICAgIGlmIChycG1SZWFkUkMoUFJFTUFDUk9GSUxFUykpIHJldHVybiAtMTsKKysjZWxzZQorKyAgICBpZiAocnBtUmVhZFJDKE5VTEwpKSByZXR1cm4gLTE7CisgI2VuZGlmCisgCisgICAgIC8qIFJlc2V0IHVtYXNrIHRvIGl0cyBkZWZhdWx0IHVtYXNrKDIpIHZhbHVlLiAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXBsYXRmb3JtMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkNTRlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1wbGF0Zm9ybTIucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK0ZpeCB1cCBwbGF0Zm9ybSBhbmQgcmVsYXRlZCBzeXNpbmZvIGZpbGUgbG9hZGluZyAocGFydCAyKS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1dlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2Ugc2V0IHRoZSBfZ251IGZsYWcgc29tZWhvdy4gIFdlIGRvIHRoaXMgYnkgcmVhZGluZworZnJvbSB0aGUgcGxhdGZvcm0gZmlsZSwgYW5kIHNldHRpbmcgYSBuZXcgX3BsYXRmb3JtX2dudSBhbmQgcmVsYXRlZCB2YXJzLgorCitUaGUgZGVmYXVsdCB2YWx1ZXMgb2YgX2hvc3RfY3B1LCBfaG9zdF92ZW5kb3IgYW5kIF9ob3N0X29zIGFyZSBjaGFuZ2VkIHRvCityZWZlcmVuY2UgZWl0aGVyIHRoZSBhdXRvbWF0aWNhbGx5IGRldGVybWluZWQgX3RhcmdldF8uLi4gb3IgX3BsYXRmb3JtXy4uLgordmFsdWVzLiAgVGhlIG1hY3JvcyBmaWxlIHVzZXMgdGhlIGNvbmZpZ3VyZSB0aW1lIGRlZmF1bHRzIGluIF9wbGF0Zm9ybV8uLi4KK3ZlcnNpb25zIGhhdmUgbm90IGJlZW4gZGVmaW5lZC4gIFRoaXMgcHJlc2VydmVzIGV4aXN0aW5nIGJlaGF2aW9yLCBidXQKK2Vuc3VyZXMgcmVhc29uYWJsZSBkZWZhdWx0cyBhcmUgYWx3YXlzIGF2YWlsYWJsZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0zMjgsMTAgKzMyOCwxNSBAQCBzdGF0aWMgdm9pZCBzZXREZWZhdWx0cyh2b2lkKQorIAkvKkBtb2RpZmllcyBycG1HbG9iYWxNYWNyb0NvbnRleHQsIGludGVybmFsU3RhdGUgQCovCisgeworIAorLSNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKQorKyNpZiBkZWZpbmVkKFJQTV9WRU5ET1JfV0lORFJJVkVSKSB8fCBkZWZpbmVkKFJQTV9WRU5ET1JfT0UpCisgICAgIGFkZE1hY3JvKE5VTEwsICJfdXNybGlicnBtIiwgTlVMTCwgX191c3JsaWJycG0sIFJNSUxfREVGQVVMVCk7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfZXRjcnBtIiwgTlVMTCwgX19ldGNycG0sIFJNSUxfREVGQVVMVCk7CisgICAgIGFkZE1hY3JvKE5VTEwsICJfdmVuZG9yIiwgTlVMTCwgIiV7P19ob3N0X3ZlbmRvcn0leyE/X2hvc3RfdmVuZG9yOndyc30iLCBSTUlMX0RFRkFVTFQpOworKworKyAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9jcHV9JXshP19wbGF0Zm9ybV9jcHU6JXs/X3RhcmdldF9jcHV9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF92ZW5kb3IiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX3ZlbmRvcn0leyE/X3BsYXRmb3JtX2NwdTolez9fdGFyZ2V0X3ZlbmRvcn19IiwgUk1JTF9ERUZBVUxUKTsKKysgICAgYWRkTWFjcm8oTlVMTCwgIl9ob3N0X29zIiwgTlVMTCwgIiV7P19wbGF0Zm9ybV9vc30leyE/X3BsYXRmb3JtX29zOiV7P190YXJnZXRfb3N9fSIsIFJNSUxfREVGQVVMVCk7CisrICAgIGFkZE1hY3JvKE5VTEwsICJfaG9zdF9nbnUiLCBOVUxMLCAiJXs/X3BsYXRmb3JtX2dudX0leyE/X3BsYXRmb3JtX2dudTolez9fZ251fX0iLCBSTUlMX0RFRkFVTFQpOworICNlbmRpZgorIAorICAgICBhZGRNYWNybyhOVUxMLCAiX3VzciIsIE5VTEwsIFVTUlBSRUZJWCwgUk1JTF9ERUZBVUxUKTsKK0BAIC00ODcsOSArNDkyLDIyIEBAIHN0YXRpYyBycG1SQyBycG1QbGF0Zm9ybShjb25zdCBjaGFyICogcGwKKyAJfQorIAorIAlpZiAoIXBhcnNlQ1ZPRyhwLCAmY3ZvZykgJiYgY3ZvZyAhPSBOVUxMKSB7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysJICAgIGNoYXIgKiBfZ251ID0gTlVMTDsKKysKKysJICAgIGFkZE1hY3JvKE5VTEwsICJfcGxhdGZvcm1fY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX3ZlbmRvciIsIE5VTEwsIGN2b2ctPnZlbmRvciwgLTEpOworKwkgICAgYWRkTWFjcm8oTlVMTCwgIl9wbGF0Zm9ybV9vcyIsIE5VTEwsIGN2b2ctPm9zLCAtMSk7CisrCisrCSAgICBpZiAoY3ZvZy0+Z251ICYmIGN2b2ctPmdudVswXSAhPSAnXDAnKQorKwkJX2dudSA9IHJwbUV4cGFuZCgiLSIsIGN2b2ctPmdudSwgTlVMTCk7CisrCisrCSAgICBhZGRNYWNybyhOVUxMLCAiX3BsYXRmb3JtX2dudSIsIE5VTEwsIChfZ251ID8gX2dudSA6ICIiKSwgLTEpOworKyNlbHNlCisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfY3B1IiwgTlVMTCwgY3ZvZy0+Y3B1LCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3RfdmVuZG9yIiwgTlVMTCwgY3ZvZy0+dmVuZG9yLCAtMSk7CisgCSAgICBhZGRNYWNybyhOVUxMLCAiX2hvc3Rfb3MiLCBOVUxMLCBjdm9nLT5vcywgLTEpOworKyNlbmRpZgorIAl9CisgCisgI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9PUEVOUEtHKSAvKiBleHBsaWNpdC1wbGF0Zm9ybSAqLworSW5kZXg6IHJwbS01LjQuMTQvbWFjcm9zL21hY3Jvcy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9tYWNyb3MvbWFjcm9zLmluCisrKysgcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCitAQCAtOTAwLDkgKzkwMCw5IEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICVfb3MJCQlAUlBNQ0FOT05PU0AKKyAlX2dudQkJCUBSUE1DQU5PTkdOVUAKKyAKKy0lX2hvc3RfcGxhdGZvcm0JCSV7X2hvc3RfY3B1fS0le19ob3N0X3ZlbmRvcn0tJXtfaG9zdF9vc30lez9fZ251fQorLSVfYnVpbGRfcGxhdGZvcm0JJXtfYnVpbGRfY3B1fS0le19idWlsZF92ZW5kb3J9LSV7X2J1aWxkX29zfSV7P19nbnV9CistJV90YXJnZXRfcGxhdGZvcm0JJXtfdGFyZ2V0X2NwdX0tJXtfdGFyZ2V0X3ZlbmRvcn0tJXtfdGFyZ2V0X29zfSV7P19nbnV9CisrJV9ob3N0X3BsYXRmb3JtCQkle19ob3N0X2NwdX0tJXtfaG9zdF92ZW5kb3J9LSV7X2hvc3Rfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisrJV9idWlsZF9wbGF0Zm9ybQkle19idWlsZF9jcHV9LSV7X2J1aWxkX3ZlbmRvcn0tJXtfYnVpbGRfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19CisrJV90YXJnZXRfcGxhdGZvcm0JJXtfdGFyZ2V0X2NwdX0tJXtfdGFyZ2V0X3ZlbmRvcn0tJXtfdGFyZ2V0X29zfSV7P19ob3N0X2dudX0leyE/X2hvc3RfZ251OiV7P19nbnV9fQorIAorICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAjIC0tLS0gY29uZmlndXJlIG1hY3Jvcy4KK0BAIC05NDUsOSArOTQ1LDEwIEBAICRfYXJiaXRyYXJ5X3RhZ3NfdGVzdHMJRm9vOkJhcgorICVfYnVpbGRfb3MJCSV7X2hvc3Rfb3N9CisgJV9ob3N0CQkJQGhvc3RACisgJV9ob3N0X2FsaWFzCQlAaG9zdF9hbGlhc0Ale25pbH0KKy0lX2hvc3RfY3B1CQlAaG9zdF9jcHVACistJV9ob3N0X3ZlbmRvcgkJQGhvc3RfdmVuZG9yQAorLSVfaG9zdF9vcwkJQGhvc3Rfb3NACisrJV9ob3N0X2NwdQkJJXs/X3BsYXRmb3JtX2NwdX0leyE/X3BsYXRmb3JtX2NwdTole19hcmNofX0KKyslX2hvc3RfdmVuZG9yCQklez9fcGxhdGZvcm1fdmVuZG9yfSV7IT9fcGxhdGZvcm1fdmVuZG9yOiV7X3ZlbmRvcn19CisrJV9ob3N0X29zCQklez9fcGxhdGZvcm1fb3N9JXshP19wbGF0Zm9ybV9vczole19vc319CisrJV9ob3N0X2dudQkJJXs/X3BsYXRmb3JtX2dudX0leyE/X3BsYXRmb3JtX2dudTole19nbnV9fQorICVfdGFyZ2V0CQkle19ob3N0fQorICVfdGFyZ2V0X2FsaWFzCQkle19ob3N0X2FsaWFzfQorICVfdGFyZ2V0X2NwdQkJJXtfaG9zdF9jcHV9CitJbmRleDogcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcHl0aG9uL3JwbW1vZHVsZS5jCisrKysgcnBtLTUuNC4xNC9weXRob24vcnBtbW9kdWxlLmMKK0BAIC02NSw4ICs2NSw4IEBAIHN0YXRpYyBQeU9iamVjdCAqIGFyY2hTY29yZShQeU9iamVjdCAqIHMKKyAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInMiLCBrd2xpc3QsICZhcmNoKSkKKyAJcmV0dXJuIE5VTEw7CisgCistI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpCistICAgIHBsYXRmb3JtID0gcnBtRXhwYW5kKGFyY2gsICItJXtfaG9zdF92ZW5kb3J9IiwgIi0le19ob3N0X29zfSV7P19nbnV9IiwgTlVMTCk7CisrI2lmIGRlZmluZWQoUlBNX1ZFTkRPUl9XSU5EUklWRVIpIHx8IGRlZmluZWQoUlBNX1ZFTkRPUl9PRSkKKysgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0le19ob3N0X3ZlbmRvcn0iLCAiLSV7X2hvc3Rfb3N9JXs/X2hvc3RfZ251fSV7IT9faG9zdF9nbnU6JXs/X2dudX19IiwgTlVMTCk7CisgI2Vsc2UKKyAgICAgcGxhdGZvcm0gPSBycG1FeHBhbmQoYXJjaCwgIi0iLCAiJXtfdmVuZG9yfSIsICItIiwgIiV7X29zfSIsIE5VTEwpOworICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcHktaW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q0MDdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXB5LWluaXQucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorcHl0aG9uL3JwbW1vZHVsZXMuYzogQ2hhbmdlIHRoZSB3YXkgdGhlIHB5dGhvbiBtb2R1bGUgbG9hZHMgdGhlIFJQTSBjb25maWcKKworSW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgUlBNX1ZFTkRPUl9XSU5EUklWRVIgZW5oYW5jZW1lbnQgb2YgZHluYW1pYworcnVudGltZSByZWxvY2F0aW9uIHBhdGhzLCB3ZSBuZWVkIHRvIGNhbGwgcnBtY2xpSW5pdCBpbnN0ZWFkIG9mIAorcnBtUmVhZENvbmZpZ0ZpbGVzLiAgVGhlIHJwbWNsaUluaXQgd2lsbCBlbmQgdXAgY2FsbGluZyBycG1SZWFkQ29uZmlnRmlsZXMKK2FmdGVyIHRoZSBuZWNlc3NhcnkgcmVsb2NhdGlvbiBwcm9jZXNzaW5nIChpZiBlbmFibGVkKS4KKworQ29kZSBkZXJpdmVkIGZyb20gY2hhbmdlcyBzdWdnZXN0ZWQgYnkgUGF1bCBFZ2dsZXRvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3B5dGhvbi9ycG1tb2R1bGUuYworKysrIHJwbS01LjQuMTQvcHl0aG9uL3JwbW1vZHVsZS5jCitAQCAtMzkyLDcgKzM5Miw4IEBAIHZvaWQgaW5pdF9ycG0odm9pZCkKKyAgICAgaWYgKFB5X0F0RXhpdChycG1fZXhpdGhvb2spID09IC0xKQorIAlyZXR1cm47CisgCistICAgIHJwbVJlYWRDb25maWdGaWxlcyhOVUxMLCBOVUxMKTsKKysgICAgY29uc3QgY2hhciAqYXJndlsxXSA9IHsicnBtbW9kdWxlIiwgMH07CisrICAgIHJwbWNsaUluaXQoMSwgYXJndiwgTlVMTCk7CisgCisgICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlYWxwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlYWxwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MTAxMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVhbHBhdGgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorY2hyb290OiByZWFscGF0aCBpcyByZXF1aXJlZCBiZWZvcmUgZXhwYW5kaW5nIF9kYnBhdGgKKworX3VzciB0dXJuZWQgb3V0IHRvIGJlIGEgcmVsYXRpdmUgcGF0aCB0byBzdXBwb3J0IGR5YW5taWMgY29uZmlnLCBidXQgaXQncworYmVpbmcgdXNlZCBzb21ld2hlcmUgYXMgYSBpbmRpY2F0b3IgdG8gbG9jYXRlIHN1YnN0cmluZ3MsIHNvIHdlIG11c3QgZ2V0Cit0aGUgcmVhbCBwYXRoIG9mIGl0IGluIGFkdmFuY2UuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSAoT3BlbkVtYmVkZGVkIHNwZWNpZmljKQorCitTaWduZWQtb2ZmLWJ5OiBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtdXJwTiBhL3JwbWlvL3JwbXJwYy5jIGIvcnBtaW8vcnBtcnBjLmMKKy0tLSBhL3JwbWlvL3JwbXJwYy5jCisrKysgYi9ycG1pby9ycG1ycGMuYworQEAgLTI1Nyw3ICsyNTcsOSBAQCBpbnQgT3Blbihjb25zdCBjaGFyICogcGF0aCwgaW50IGZsYWdzLCBtCisgICAgIC8qIFhYWCBpZiB0aGUgb3BlbigyKSBmYWlscywgdHJ5IHRvIHN0cmlwIGEgcG9zc2libGUgY2hyb290KDIpIHByZWZpeC4gKi8KKyAgICAgaWYgKGZkbm8gPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworIAljb25zdCBjaGFyICpkYnBhdGggPSBycG1FeHBhbmQoIiV7P19kYnBhdGh9LyIsIE5VTEwpOworLQljb25zdCBjaGFyICogZm4gPSBzdHJzdHIocGF0aCArIDEsIGRicGF0aCk7CisrCWNoYXIgcmVzb2x2ZWRfZGJwYXRoW1BBVEhfTUFYXTsKKysJcmVhbHBhdGgoZGJwYXRoLCByZXNvbHZlZF9kYnBhdGgpOworKwljb25zdCBjaGFyICogZm4gPSBzdHJzdHIocGF0aCArIDEsIHJlc29sdmVkX2RicGF0aCk7CisgCWlmIChmbikKKyAJICAgIGZkbm8gPSBvcGVuKGZuLCBmbGFncywgbW9kZSk7CisgCWRicGF0aCA9IF9mcmVlKGRicGF0aCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tcmVsb2MtbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWZlNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACittYWNyb3M6IFVzZSBkeWFubWljIGNvbmZpZyB2cyBoYXJkIGNvZGVkIHNldHRpbmdzCisKK1doZW4gdGhlIGR5bmFtaWMsIHJ1bnRpbWUgcmVsb2NhdGlvbiBpcyBlbmFibGVzIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIAorUlBNIG1hY3JvIGZpbGUgZG9lcyBub3Qgb3ZlcnJpZGUgdGhlIGR5bmFtaWMgc2V0dGluZ3MuICBGaXggdGhpcyBieSBmb3JjaW5nIHRoZQorZHluYW1pYyB2ZXJzaW9uIHRvIGJlIHVzZWQgaW4gYWxsIGNhc2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKE9wZW5FbWJlZGRlZCBzcGVjaWZpYykKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9tYWNyb3MvbWFjcm9zLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL21hY3Jvcy9tYWNyb3MuaW4KKysrKyBycG0tNS40LjE0L21hY3Jvcy9tYWNyb3MuaW4KK0BAIC0yNywxMSArMjcsMTIgQEAKKyAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIyAtLS0tIGZpbGVzeXN0ZW0gbWFjcm9zLgorICMKKy0lX3VzcgkJCUB1c3JwcmVmaXhACisrJV91c3IJCQkle191c3JsaWJycG19Ly4uLy4uCisgJV91c3JzcmMJCSV7X3Vzcn0vc3JjCistJV92YXIJCQlAdmFycHJlZml4QAorLSVfdXNybGlicnBtCQlAVVNSTElCUlBNQAorLSVfZXRjcnBtCQlAU1lTQ09ORklHRElSQAorKyVfdmFyCQkJJXtfdXNyfS8uLi92YXIKKysjIFRoZSBkeW5hbWljIHJlbG9jYXRpb24gY29kZSBzZXRzIHRoZSBmb2xsb3dpbmcgdHdvIGl0ZW1zCisrIyVfdXNybGlicnBtCQlAVVNSTElCUlBNQAorKyMlX2V0Y3JwbQkJQFNZU0NPTkZJR0RJUkAKKyAKKyAlX19vYmpleHQJCUBvYmpleHRACisgJV9fbGliZXh0CQlAbGliZXh0QApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlbW92ZS1zeWtjcGFyc2UtZGVjbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZW1vdmUtc3lrY3BhcnNlLWRlY2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY5MDE2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZW1vdmUtc3lrY3BhcnNlLWRlY2wucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorSW5kZXg6IHJwbS01LjQuMTQvc3ljay9saWIvc3ljay5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5Y2svbGliL3N5Y2suaAorKysrIHJwbS01LjQuMTQvc3ljay9saWIvc3ljay5oCitAQCAtNjIxLDkgKzYyMSw2IEBAIGxvbmcgc3lja19zZXFfY291bnQoIFN5Y2tOb2RlICpzZXEgKQorICAqLworIHZvaWQgc3lja2Vycm9yKCBjaGFyICptc2cgKQorIAkvKkAqLzsKKy1pbnQgc3lja3BhcnNlKCB2b2lkICogKQorLQkvKkBnbG9iYWxzIGZpbGVTeXN0ZW0gQCovCistCS8qQG1vZGlmaWVzIGZpbGVTeXN0ZW0gQCovOworIC8qIFhYWCB1bmlvbiBZWVNUWVBFICpzeWNrbHZhbCBoYXMgaXNzdWVzIG9uIE1hYyBPUyBYLiAqLworIGludCBzeWNrbGV4KCB2b2lkICpfc3lja2x2YWwsIFN5Y2tQYXJzZXIgKnBhcnNlciApCisgCS8qQG1vZGlmaWVzIF9zeWNrbHZhbCwgcGFyc2VyIEAqLzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJlc29sdmVkZXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhMjQzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1yZXNvbHZlZGVwLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2xpYi9ycG10cy5jOiBFbnN1cmUgdGhhdCB3ZSBjaGVjayBib3RoIHByb3ZpZGVuYW1lIGFuZCBmaWxlcGF0aHMKKworV2hlbiBsb29raW5nIHVwIGEgbWlzc2luZyBkZXBlbmRlbmNpZXMsIHN1Y2ggYXMgL2Jpbi9zaCwgd2UgbmVlZCB0byBsb29rdXAKK2luIGJvdGggdGhlIHByb3ZpZGVuYW1lIGFuZCBmaWxlcGF0aHMgREIsIG5vdCBqdXN0IHRoZSBmaWxlcGF0aHMgREIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2xpYi9ycG10cy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9ycG10cy5jCisrKysgcnBtLTUuNC4xNC9saWIvcnBtdHMuYworQEAgLTQxMCw4ICs0MTAsOCBAQCBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fCisgCWlmIChzZGIgPT0gTlVMTCkKKyAJICAgIGNvbnRpbnVlOworIAorLQkvKiBMb29rIGZvciBhIG1hdGNoaW5nIFByb3ZpZGVzOiBpbiBzdWdnZXN0ZWQgdW5pdmVyc2UuICovCistCXJwbXRhZyA9ICgqa2V5cCA9PSAnLycgPyBSUE1UQUdfRklMRVBBVEhTIDogUlBNVEFHX1BST1ZJREVOQU1FKTsKKysJcnBtdGFnID0gUlBNVEFHX1BST1ZJREVOQU1FOworKyAgICAgICBkbyB7CisgCW1pID0gcnBtbWlJbml0KHNkYiwgcnBtdGFnLCBrZXlwLCBrZXlsZW4pOworIAl3aGlsZSAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgCSAgICBzaXplX3QgaG5hbWVsZW47CitAQCAtNDQ2LDYgKzQ0NiwxNSBAQCBmcHJpbnRmKHN0ZGVyciwgIi0tPiAlcyglcCwlcCwlcClcbiIsIF9fCisgCSAgICBiaG5hbWVsZW4gPSBobmFtZWxlbjsKKyAJfQorIAltaSA9IHJwbW1pRnJlZShtaSk7CisrCisrCWlmIChiaCA9PSBOVUxMICYmICprZXlwID09ICcvJyAmJiBycG10YWcgPT0gUlBNVEFHX1BST1ZJREVOQU1FKSB7CisrCSAgIHJwbXRhZyA9IFJQTVRBR19GSUxFUEFUSFM7CisrCSAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKworKyAgICAgICAgYnJlYWs7CisrICAgICAgfSB3aGlsZSAoMSk7CisrCisgICAgIH0KKyAKKyAgICAgLyogSXMgdGhlcmUgYSBzdWdnZXN0ZWQgcmVzb2x1dGlvbj8gKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXJwbXBncC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmZWVkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1ycG1wZ3AtZml4LnBhdGNoCkBAIC0wLDAgKzEsNjcgQEAKK3JwbXBncC5jOiBBZGQgbWlzc2luZyBpZiBkZWZzIGFyb3VuZCBjcnlwdG8gaW1wbGVtZW50YXRpb25zCisKK1dpdGhvdXQgdGhlc2UsIHRoZSBzeXN0ZW0gd2lsbCBlcnJvciB0cnlpbmcgdG8gZmluZCB0aGUgY29ycmVjdCBjcnlwdG8gCitsaWJyYXJ5IHRvIHVzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS9ycG1pby9ycG1wZ3AuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS5vcmlnL3JwbWlvL3JwbXBncC5jCisrKysgcnBtL3JwbWlvL3JwbXBncC5jCitAQCAtMTMzOSwxNiArMTMzOSwyNiBAQCBpbnQgcGdwRXhwb3J0UHVia2V5KHBncERpZyBkaWcpCisgeworICAgICBpbnQgcmMgPSAwOwkJLyogYXNzdW1lIGZhaWx1cmUgKi8KKyAKKysjaWYgZGVmaW5lZChXSVRIX0JFRUNSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWJjSW1wbFZlY3MpCisgCXJjID0gcnBtYmNFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX1NTTCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1zc2xJbXBsVmVjcykKKyAJcmMgPSBycG1zc2xFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX05TUykKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1uc3NJbXBsVmVjcykKKyAJcmMgPSBycG1uc3NFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX0dDUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1nY0ltcGxWZWNzKQorIAlyYyA9IHJwbWdjRXhwb3J0UHVia2V5KGRpZyk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9UT01DUllQVCkKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1sdGNJbXBsVmVjcykKKyAJcmMgPSBycG1sdGNFeHBvcnRQdWJrZXkoZGlnKTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKK0BAIC0xMzU2LDE2ICsxMzY2LDI2IEBAIGludCBwZ3BFeHBvcnRTaWduYXR1cmUocGdwRGlnIGRpZywgRElHRVMKKyB7CisgICAgIGludCByYyA9IDA7CQkvKiBhc3N1bWUgZmFpbHVyZSAqLworIAorKyNpZiBkZWZpbmVkKFdJVEhfQkVFQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtYmNJbXBsVmVjcykKKyAJcmMgPSBycG1iY0V4cG9ydFNpZ25hdHVyZShkaWcsIGN0eCk7CisrI2VuZGlmCisrI2lmIGRlZmluZWQoV0lUSF9TU0wpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtc3NsSW1wbFZlY3MpCisgCXJjID0gcnBtc3NsRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKysjaWYgZGVmaW5lZChXSVRIX05TUykKKyAgICAgaWYgKHBncEltcGxWZWNzID09ICZycG1uc3NJbXBsVmVjcykKKyAJcmMgPSBycG1uc3NFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfR0NSWVBUKQorICAgICBpZiAocGdwSW1wbFZlY3MgPT0gJnJwbWdjSW1wbFZlY3MpCisgCXJjID0gcnBtZ2NFeHBvcnRTaWduYXR1cmUoZGlnLCBjdHgpOworKyNlbmRpZgorKyNpZiBkZWZpbmVkKFdJVEhfVE9NQ1JZUFQpCisgICAgIGlmIChwZ3BJbXBsVmVjcyA9PSAmcnBtbHRjSW1wbFZlY3MpCisgCXJjID0gcnBtbHRjRXhwb3J0U2lnbmF0dXJlKGRpZywgY3R4KTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIHJjOworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNjcmlwdGxldGV4ZWNoZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgyNTM3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS1zY3JpcHRsZXRleGVjaGVscGVyLnBhdGNoCkBAIC0wLDAgKzEsMTYwIEBACitFbmFibGUgYSBjcm9zcy1pbnN0YWxsIHNjcmlwdGxldCBoZWxwZXIuCisKK1RoZSBoZWxwZXIgaXMgY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgY2hyb290IHdpdGggdGhlIGFyZ3VtZW50czoKKworPHJvb3Q+IDxwcm9nPiA8c2NyaXB0PiA8YXJnMT4gWzxhcmcyPiAuLi4gPGFyZ04+XQorCitUaGUgaGVscGVyIHNjcmlwdCBpcyB1c2VkIGJ5IG9lLWNvcmUgdG8gZmFjaWxpdGF0ZSBzaGVsbCBzY3JpcHQgYWN0aW9ucyB0aGF0CitjYW4gbm90IGJlIHJ1biBmcm9tIHdpdGhpbiBhIGNocm9vdCBvbiBhIGZvcmVpZ24gdGFyZ2V0IHN5c3RlbSBkdXJpbmcgYQorY3Jvc3MgaW5zdGFsbC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHJwbS01LjQuMTQvbGliL3BzbS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi9wc20uYworKysrIHJwbS01LjQuMTQvbGliL3BzbS5jCitAQCAtODA2LDYgKzgwNiwxMCBAQCBzdGF0aWMgcnBtUkMgcnVuU2NyaXB0KHJwbXBzbSBwc20sIEhlYWRlCisgICAgIGludCB4eDsKKyAgICAgaW50IGk7CisgCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgY29uc3QgY2hhciAqIHNjcmlwdGxldFdyYXBwZXIgPSBycG1FeHBhbmQoIiV7P19jcm9zc19zY3JpcHRsZXRfd3JhcHBlcn0iLCBOVUxMKTsKKysjZW5kaWYKKysgICAgCisgICAgIGlmIChwc20tPnNzdGF0ZXMgIT0gTlVMTCAmJiBpeCA+PSAwICYmIGl4IDwgUlBNU0NSSVBUX01BWCkKKyAJc3NwID0gcHNtLT5zc3RhdGVzICsgaXg7CisgICAgIGlmIChzc3AgIT0gTlVMTCkKK0BAIC04NzIsMTQgKzg3NiwyOSBAQCBhc3NlcnQoaGUtPnAuc3RyICE9IE5VTEwpOworIAkJKEZfSVNTRVQocHNtLCBVTk9SREVSRUQpID8gImEiIDogIiIpKTsKKyAKKyAgICAgaWYgKFBoZS0+cC5hcmd2ID09IE5VTEwpIHsKKy0JYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoNSAqIHNpemVvZigqYXJndikpOworLQlhcmd2WzBdID0gIi9iaW4vc2giOworLQlhcmdjID0gMTsKKysJYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoNyAqIHNpemVvZigqYXJndikpOworKwlhcmdjID0gMDsKKysgICAgfSBlbHNlIHsKKysJYXJndiA9IChjb25zdCBjaGFyICoqKSBhbGxvY2EoKFBoZS0+YyArIDYpICogc2l6ZW9mKCphcmd2KSk7CisrCWFyZ2MgPSAwOworKyAgICB9CisrCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpIHsKKysJYXJndlthcmdjKytdID0gc2NyaXB0bGV0V3JhcHBlcjsKKysJYXJndlthcmdjXSA9IHJwbXRzUm9vdERpcih0cyk7CisrCWlmICghYXJndlthcmdjXSB8fCAhKmFyZ3ZbYXJnY10pCisrCSAgIGFyZ3ZbYXJnY10gPSAiLyI7CisrCWFyZ2MrKzsKKysgICAgfQorKyNlbmRpZgorKworKyAgICBpZiAoUGhlLT5wLmFyZ3YgPT0gTlVMTCkgeworKwlhcmd2W2FyZ2MrK10gPSAiL2Jpbi9zaCI7CisgCWxkY29uZmlnX2RvbmUgPSAwOworICAgICB9IGVsc2UgeworLQlhcmd2ID0gKGNvbnN0IGNoYXIgKiopIGFsbG9jYSgoUGhlLT5jICsgNCkgKiBzaXplb2YoKmFyZ3YpKTsKKy0JbWVtY3B5KGFyZ3YsIFBoZS0+cC5hcmd2LCBQaGUtPmMgKiBzaXplb2YoKmFyZ3YpKTsKKy0JYXJnYyA9IFBoZS0+YzsKKysJbWVtY3B5KChhcmd2ICsgYXJnYyksIFBoZS0+cC5hcmd2LCBQaGUtPmMgKiBzaXplb2YoKmFyZ3YpKTsKKysJYXJnYyArPSBQaGUtPmM7CisgCWxkY29uZmlnX2RvbmUgPSAobGRjb25maWdfcGF0aCAmJiAhc3RyY21wKGFyZ3ZbMF0sIGxkY29uZmlnX3BhdGgpCisgCQk/IDEgOiAwKTsKKyAgICAgfQorQEAgLTkzMCw3ICs5NDksMTIgQEAgYXNzZXJ0KGhlLT5wLnN0ciAhPSBOVUxMKTsKKyAJICAgIGdvdG8gZXhpdDsKKyAKKyAJaWYgKHJwbUlzRGVidWcoKSAmJgorLQkgICAgKCFzdHJjbXAoYXJndlswXSwgIi9iaW4vc2giKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICIvYmluL2Jhc2giKSkpCisrCSAgICAoIXN0cmNtcChhcmd2WzBdLCAiL2Jpbi9zaCIpIHx8ICFzdHJjbXAoYXJndlswXSwgIi9iaW4vYmFzaCIpKQorKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCSAgICB8fCAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlciAmJiAhc3RyY21wKGFyZ3ZbMV0sICIvYmluL3NoIikpCisrCSAgICB8fCAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlciAmJiAhc3RyY21wKGFyZ3ZbMV0sICIvYmluL2Jhc2giKSkKKysjZW5kaWYKKysJICAgKQorIAl7CisgCSAgICBzdGF0aWMgY29uc3QgY2hhciBzZXRfeFtdID0gInNldCAteFxuIjsKKyAJICAgIG53ID0gRndyaXRlKHNldF94LCBzaXplb2Yoc2V0X3hbMF0pLCBzaXplb2Yoc2V0X3gpLTEsIGZkKTsKK0BAIC0xMDY1LDEyICsxMDg5LDIyIEBAIGFzc2VydChoZS0+cC5zdHIgIT0gTlVMTCk7CisgCisgCXsgICBjb25zdCBjaGFyICogcm9vdERpciA9IHJwbXRzUm9vdERpcih0cyk7CisgCSAgICBpZiAoIXJwbXRzQ2hyb290RG9uZSh0cykgJiYgcm9vdERpciAhPSBOVUxMICYmCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJCSEoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikgJiYKKysjZW5kaWYKKyAJCSEocm9vdERpclswXSA9PSAnLycgJiYgcm9vdERpclsxXSA9PSAnXDAnKSkKKyAJICAgIHsKKyAJCS8qQC1tb2RvYnNlcnZlckAqLworIAkJeHggPSBDaHJvb3Qocm9vdERpcik7CisgCQkvKkA9bW9kb2JzZXJ2ZXJAKi8KKyAJICAgIH0KKysjaWZkZWYgUlBNX1ZFTkRPUl9PRQorKwkgICAgaWYgKCFycG10c0Nocm9vdERvbmUodHMpICYmIHJvb3REaXIgIT0gTlVMTCAmJgorKwkJKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpICYmCisrCQkhKHJvb3REaXJbMF0gPT0gJy8nICYmIHJvb3REaXJbMV0gPT0gJ1wwJykpCisrCQl4eCA9IENoZGlyKHJvb3REaXIpOworKwkgICAgZWxzZSAKKysjZW5kaWYKKyAJICAgIHh4ID0gQ2hkaXIoIi8iKTsKKyAJICAgIHJwbWxvZyhSUE1MT0dfREVCVUcsIERfKCIlczogJXMoJXMpXHRleGVjdiglcykgcGlkICVkXG4iKSwKKyAJCQlwc20tPnN0ZXBOYW1lLCBzbG4sIE5WUkEsCitAQCAtMjk4NSw2ICszMDE5LDEzIEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworICAgICBjYXNlIFBTTV9TQ1JJUFQ6CS8qIFJ1biBjdXJyZW50IHBhY2thZ2Ugc2NyaXB0bGV0cy4gKi8KKyAJLyogWFhYIHJ1bm5pbmcgJXZlcmlmeXNjcmlwdC8lc2FuaXR5Y2hlY2sgZG9lc24ndCBoYXZlIHBzbS0+dGUgKi8KKyAgICAgewlycG10eG4gX3BhcmVudCA9IChwc20gJiYgcHNtLT50ZSA/IHBzbS0+dGUtPnR4biA6IE5VTEwpOworKworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrICAgICAgICBjb25zdCBjaGFyICogc2NyaXB0bGV0V3JhcHBlciA9IHJwbUV4cGFuZCgiJXs/X2Nyb3NzX3NjcmlwdGxldF93cmFwcGVyfSIsIE5VTEwpOworKwlpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX09VVCk7CisrI2VuZGlmCisrCisgCXh4ID0gcnBtdHhuQmVnaW4ocnBtdHNHZXRSZGIodHMpLCBfcGFyZW50LCBOVUxMKTsKKyAJcmMgPSBydW5JbnN0U2NyaXB0KHBzbSk7CisgCWlmIChyYykKK0BAIC0yOTkyLDExICszMDMzLDI0IEBAIGFzc2VydChwc20tPnRlICE9IE5VTEwpOworIAllbHNlCisgCSAgICAgeHggPSBycG10eG5Db21taXQocnBtdHNHZXRSZGIodHMpLT5kYl90eG4pOworIAlycG10c0dldFJkYih0cyktPmRiX3R4biA9IE5VTEw7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJaWYgKHNjcmlwdGxldFdyYXBwZXIgJiYgKnNjcmlwdGxldFdyYXBwZXIpCisrCSAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9JTik7CisrI2VuZGlmCisgICAgIH0JYnJlYWs7CisgICAgIGNhc2UgUFNNX1RSSUdHRVJTOgorIAkvKiBSdW4gdHJpZ2dlcnMgaW4gb3RoZXIgcGFja2FnZShzKSB0aGlzIHBhY2thZ2Ugc2V0cyBvZmYuICovCisgCWlmIChycG10c0ZsYWdzKHRzKSAmIFJQTVRSQU5TX0ZMQUdfVEVTVCkJYnJlYWs7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfT1VUKTsKKysjZW5kaWYKKyAJcmMgPSBydW5UcmlnZ2Vycyhwc20pOworKyNpZmRlZiBSUE1fVkVORE9SX09FCisrCWlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgIHJjID0gcnBtcHNtTmV4dChwc20sIFBTTV9DSFJPT1RfSU4pOworKyNlbmRpZgorIAlicmVhazsKKyAgICAgY2FzZSBQU01fSU1NRURfVFJJR0dFUlM6CisgCS8qIFJ1biB0cmlnZ2VycyBpbiB0aGlzIHBhY2thZ2Ugb3RoZXIgcGFja2FnZShzKSBzZXQgb2ZmLiAqLworQEAgLTMwMDYsNyArMzA2MCwxOCBAQCBhc3NlcnQocHNtLT50ZSAhPSBOVUxMKTsKKyAJICAgIEZfU0VUKHBzbSwgR09UVFJJR0dFUlMpOworIAl9CisgCWlmIChwc20tPnRyaWdnZXJzICE9IE5VTEwpCisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJeworKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBzY3JpcHRsZXRXcmFwcGVyID0gcnBtRXhwYW5kKCIlez9fY3Jvc3Nfc2NyaXB0bGV0X3dyYXBwZXJ9IiwgTlVMTCk7CisrCSAgICBpZiAoc2NyaXB0bGV0V3JhcHBlciAmJiAqc2NyaXB0bGV0V3JhcHBlcikKKysJICAgICAgICAgcmMgPSBycG1wc21OZXh0KHBzbSwgUFNNX0NIUk9PVF9PVVQpOworKyNlbmRpZgorIAkgICAgcmMgPSBydW5JbW1lZFRyaWdnZXJzKHBzbSk7CisrI2lmZGVmIFJQTV9WRU5ET1JfT0UKKysJICAgIGlmIChzY3JpcHRsZXRXcmFwcGVyICYmICpzY3JpcHRsZXRXcmFwcGVyKQorKwkgICAgICAgICByYyA9IHJwbXBzbU5leHQocHNtLCBQU01fQ0hST09UX0lOKTsKKysJfQorKyNlbmRpZgorIAlicmVhazsKKyAKKyAgICAgY2FzZSBQU01fUlBNSU9fRkxBR1M6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tc2hvd3JjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNob3dyYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzM4Yjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXNob3dyYy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitXb3JrYXJvdW5kIGZvciBhIG1lbW9yeSBsZWFrIGluIC0tc2hvd3JjLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitJbmRleDogcnBtLTUuNC4xNC9saWIvcnBtcmMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9saWIvcnBtcmMuYworKysrIHJwbS01LjQuMTQvbGliL3JwbXJjLmMKK0BAIC0xMjI4LDExICsxMjI4LDE1IEBAIGludCBycG1TaG93UkMoRklMRSAqIGZwKQorIAkJaWYgKERORVZSICE9IE5VTEwpCisgCQkgICAgZnByaW50ZihmcCwgIiAgICAlc1xuIiwgRE5FVlIrMik7CisgCSAgICB9CisrI2lmIDAKKyAJICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisgCSAgICBkcyA9IE5VTEw7CisrI2VuZGlmCisgCSAgICBmcHJpbnRmKGZwLCAiXG4iKTsKKyAJfQorKyNpZiAwCisgCVBSQ08gPSBycG1kc0ZyZWVQUkNPKFBSQ08pOworKyNlbmRpZgorICAgICB9CisgCisgICAgIGlmIChycG1Jc1ZlcmJvc2UoKSkgewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0tdGFnLWdlbmVyYXRlLWVuZGlhbi1jb252ZXJzaW9uLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMyNzVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRhZy1nZW5lcmF0ZS1lbmRpYW4tY29udmVyc2lvbi1maXgucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorZml4IGEgZW5kaWFuIGluY29tcGF0aWJsZSBlcnJvciBpbiBnZW5lcmF0aW5nIHJwbSB0YWcKKworQSBmbGF3IHdhcyBmb3VuZCBpbiB0aGUgd2F5IHJwbSBnZW5lcmF0aW5nIGFyYml0cmFyeSB0YWdzLCB3aGljaCBsZWFkcyB0byBhCitpbmNvcnJlY3QgcXVlcnkgcmVzdWx0LCB0aGlzIGlzc3VlIGlzIGludHJvZHVjZWQgYnkgYSBpbmNvbXBhdGlibGUgZW5kaWFuZXNzCit3aGVuIHRoZSBnZW5lcmF0aW5nIHByb2Nlc3MgaXMgZXhlY3V0ZWQgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuCisKK1RoaXMgcGF0Y2ggcmVzb2x2ZXMgaXQgYnkgdGFraW5nIHRoZSBieXRlIG9yZGVyIHRoYXQgaG9zdCB1c2VzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyB0YWduYW1lLmMgfCAgIDE2ICsrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcnBtLTUuNC4xNC9ycG1kYi90YWduYW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtZGIvdGFnbmFtZS5jCisrKysgcnBtLTUuNC4xNC9ycG1kYi90YWduYW1lLmMKK0BAIC0zLDYgKzMsMTkgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSAic3lzdGVtLmgiCisrI2luY2x1ZGUgPGVuZGlhbi5oPgorKworKy8qIERvbid0IHJlZGVmaW5lIHRoaXMgbWFjcm8gaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KKysjaWZuZGVmIGxlMzJ0b2gKKysjaWZkZWYgX19VU0VfQlNECisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisrI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKysjZGVmaW5lIGxlMzJ0b2goeCkgKHgpCisrI2Vsc2UKKysjZGVmaW5lIGxlMzJ0b2goeCkgX19ic3dhcF8zMih4KQorKyNlbmRpZgorKyNlbmRpZiAvKiBfX1VTRV9CU0QgKi8KKysjZW5kaWYgLyogbGUzMnRvaCAqLworIAorICNpbmNsdWRlIDxycG1pb19pbnRlcm5hbC5oPgkvKiBYWFggRElHRVNUX0NUWCwgeHRvbG93ZXIsIHhzdHJjYXNlY21wICovCisgI2luY2x1ZGUgPHJwbW1hY3JvLmg+CitAQCAtMTUyLDcgKzE2NSwxMCBAQCBzdGF0aWMgcnBtVGFnIF90YWdHZW5lcmF0ZShjb25zdCBjaGFyICpzCisgICAgIHh4ID0gcnBtRGlnZXN0VXBkYXRlKGN0eCwgcywgbmIpOworICAgICB4eCA9IHJwbURpZ2VzdEZpbmFsKGN0eCwgJmRpZ2VzdCwgJmRpZ2VzdGxlbiwgMCk7CisgICAgIGlmIChkaWdlc3QgJiYgZGlnZXN0bGVuID4gNCkgeworKwkvKiBUaGUgdGFnIGlzIHN0b3JlZCBpbiBhIHVuaWZvcm0gYnl0ZSBvcmRlciBmb3IgY3Jvc3MtZW5kaWFuIGNvbXBhdGliaWxpdHkuCisrCSAgIFN3YXAgdG8gdGhlIGhvc3QgdXNlcy4gKi8KKyAJbWVtY3B5KCZ0YWcsIGRpZ2VzdCArIChkaWdlc3RsZW4gLSA0KSwgNCk7CisrCXRhZyA9IGxlMzJ0b2godGFnKTsKKyAJdGFnID0gKHJwbVRhZykgKHRhZyAmIDB4M2ZmZmZmZmYpOworIAl0YWcgPSAocnBtVGFnKSAodGFnIHwgMHg0MDAwMDAwMCk7CisgICAgIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXRvb2xzLW10cmVlLUxERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4NWJlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS10b29scy1tdHJlZS1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1NvdXJjZTogTm9uZQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiAyMDExLTAzLTAzCitEZXNjcmlwdGlvbjoKK1RoaXMgcGF0Y2ggZml4ZXMgYnVpbGQgaXNzdWUgZm91bmQgd2hlbiBjb21waWxpbmcgcnBtLW5hdGl2ZSBvbiB1YnVudHUKKzExLjA0LWFscGhhLiBQcm9ibGVtIGlzIHRoYXQgbGlua2VyIGRvZXMgbm90IGdldCBjb3JyZWN0IHNldCBvZiBkZXBlbmRlbnQKK2xpYnJhcmllcyB3aGVuIGxpbmtpbmcgbXRyZWUgYmluYXJ5IHdoaWNoIHJlc3VsdHMgaW4gdW5kZWZpbmVkIHN5bWJvbHMKK2luIGxpYnJwbWlvLnNvLiBUaGlzIHBhdGNoIGFkZHMgY29ycmVjdCBmbGFncyB0byBtdHJlZV9MREFERCB0byBhY2NvdW50Citmb3IgcnBtaW8gZGVwcworCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC0xODYsNyArMTg2LDcgQEAgZ3JlcF9MREFERCA9CQkkKFJQTUlPX0xEQUREX0NPTU1PTikKKyAKKyBtdHJlZV9TT1VSQ0VTID0JCXJwbW10cmVlLmMKKyBtdHJlZV9MREZMQUdTID0JCUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorLW10cmVlX0xEQUREID0JCSQoUlBNX0xEQUREX0NPTU1PTikKKyttdHJlZV9MREFERCA9CQkkKFJQTUlPX0xEQUREX0NPTU1PTikKKyAKKyBycG1yZXBvX1NPVVJDRVMgPQlycG1yZXBvLmMKKyBycG1yZXBvX0NQUEZMQUdTID0JJChBTV9DUFBGTEFHUykgLUkkKHRvcF9zcmNkaXIpL3NjcmlwdHMgLUkkKHRvcF9idWlsZGRpcikvc2NyaXB0cyAkKENQUEZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtLXV1aWQtaW5jbHVkZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS11dWlkLWluY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzZjg0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbS11dWlkLWluY2x1ZGUucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorQSBwYXRjaCB0byBmaXggYSBwcm9ibGVtIHdoZW4gY29tcGlsaW5nIHdpdGggdXVpZC4KKworV2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHdpdGggdXVpZCBhbmQgYWxsIHRlc3RzIGNvbXBpbGluZyB3aWxsIGVycm9yIGJlY2F1c2UKK3V1aWQuaCBkb2Vzbid0IGV4aXN0IGluIHRoZSBycG0gdGFyYmFsbC4gRml4IHRoaXMgYnkgY2hhbmdpbmcgdGhlIGluY2x1ZGUgdG8KK3VzZSB0aGUgb25lIGluIG9zc3Agd2hpY2ggc29sdmVzIHRoZSBpc3N1ZS4gCisKK1RoZSByZWNpcGUgYWxyZWFkeSBkZXBlbmRzIG9uIG9zc3Agc28gb3NzcC91dWlkLmggd2lsbCBiZSB0aGVyZSB3aGVuIHJwbS1uYXRpdmUKK2lzIGJ1aWx0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTW9yZ2FuIExpdHRsZSA8bW9yZ2FuLmxpdHRsZUB3aW5kcml2ZXIuY29tPgorCisKK0luZGV4OiBycG0tNS40LjE0L2x1YS9sb2NhbC9sdXVpZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2x1YS9sb2NhbC9sdXVpZC5jCisrKysgcnBtLTUuNC4xNC9sdWEvbG9jYWwvbHV1aWQuYworQEAgLTIxLDcgKzIxLDcgQEAKKyAKKyAjaWZkZWYgTFVBX1VTRV9VVUlECisgCistI2luY2x1ZGUgInV1aWQuaCIKKysjaW5jbHVkZSA8b3NzcC91dWlkLmg+CisgCisgLyogIEx1YSBtZXRob2Q6IDx1dWlkPiA9IHV1aWQuZ2VuZXJhdGUoPHZlcnNpb24+WywgPHV1aWQtbmFtZXNwYWNlPiwgPGRhdGE+XSkgICovCisgc3RhdGljIGludCBsdXVpZF9nZW5lcmF0ZShsdWFfU3RhdGUgKkwpCitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9ycG11dWlkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtdXVpZC5jCisrKysgcnBtLTUuNC4xNC9ycG1pby9ycG11dWlkLmMKK0BAIC0xNiw3ICsxNiw3IEBACisgI2luY2x1ZGUgInJwbWxvZy5oIgorICNpbmNsdWRlICJycG11dWlkLmgiCisgI2lmZGVmIFdJVEhfVVVJRAorLSNpbmNsdWRlICJ1dWlkLmgiCisrI2luY2x1ZGUgPG9zc3AvdXVpZC5oPgorICNlbmRpZgorICNpbmNsdWRlICJkZWJ1Zy5oIgorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG0yY3BpbwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YmNlZjZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtMmNwaW8KQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKKyMgUHJldmVudCBnYXdrID49IDQuMC54IGZyb20gZ2V0dGluZyBmdW5ueSBpZGVhcyB3cnQgVVRGIGluIHByaW50ZigpCitMQU5HPUMKKworcGtnPSQxCitpZiBbICIkcGtnIiA9ICIiIC1vICEgLWUgIiRwa2ciIF07IHRoZW4KKyAgICBlY2hvICJubyBwYWNrYWdlIHN1cHBsaWVkIiAxPiYyCisgICBleGl0IDEKK2ZpCisKK2xlYWRzaXplPTk2CitvPWBleHByICRsZWFkc2l6ZSArIDhgCitzZXQgYG9kIC1qICRvIC1OIDggLXQgdTEgJHBrZ2AKK2lsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQyICsgJDMgXCkgKyAkNCBcKSArICQ1YAorZGw9YGV4cHIgMjU2IFwqIFwoIDI1NiBcKiBcKCAyNTYgXCogJDYgKyAkNyBcKSArICQ4IFwpICsgJDlgCisjIGVjaG8gInNpZyBpbDogJGlsIGRsOiAkZGwiCisKK3NpZ3NpemU9YGV4cHIgOCArIDE2IFwqICRpbCArICRkbGAKK289YGV4cHIgJG8gKyAkc2lnc2l6ZSArIFwoIDggLSBcKCAkc2lnc2l6ZSBcJSA4IFwpIFwpIFwlIDggKyA4YAorc2V0IGBvZCAtaiAkbyAtTiA4IC10IHUxICRwa2dgCitpbD1gZXhwciAyNTYgXCogXCggMjU2IFwqIFwoIDI1NiBcKiAkMiArICQzIFwpICsgJDQgXCkgKyAkNWAKK2RsPWBleHByIDI1NiBcKiBcKCAyNTYgXCogXCggMjU2IFwqICQ2ICsgJDcgXCkgKyAkOCBcKSArICQ5YAorIyBlY2hvICJoZHIgaWw6ICRpbCBkbDogJGRsIgorCitoZHJzaXplPWBleHByIDggKyAxNiBcKiAkaWwgKyAkZGxgCitvPWBleHByICRvICsgJGhkcnNpemVgCitjb21wPWBkZCBpZj0kcGtnIGlicz0kbyBza2lwPTEgY291bnQ9MSAyPi9kZXYvbnVsbCB8IGRkIGJzPTMgY291bnQ9MSAyPiAvZGV2L251bGxgCisKK2d6PSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWMlYyIsIDB4MWYsIDB4OGIpOyB9J2AiCitsem1hPSJgZWNobyAuIHwgYXdrICd7IHByaW50ZigiJWNMWiIsIDB4ZmYpOyB9J2AiCit4ej0iYGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVjN3oiLCAweGZkKTsgfSdgIgorY2FzZSAiJGNvbXAiIGluCisgICAgQlpoKSAgICAgIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgYnVuemlwMiA7OworICAgICIkZ3oiKikgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IGd1bnppcCA7OworICAgICIkeHoiKikgICBkZCBpZj0iJHBrZyIgaWJzPSRvIHNraXA9MSAyPi9kZXYvbnVsbCB8IHh6Y2F0IDs7CisgICAgIiRsem1hIiopIGRkIGlmPSIkcGtnIiBpYnM9JG8gc2tpcD0xIDI+L2Rldi9udWxsIHwgdW5sem1hIDs7CisgICAgKikgICAgICAgIGVjaG8gIlVucmVjb2duaXplZCBycG0gZmlsZTogJHBrZyI7IGV4aXQgMSA7OworZXNhYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtYXRjaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWF0Y2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBkMTNhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWF0Y2gucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorQWRkIGNvbmZpZ3VyZSBjaGVjayBmb3IgcnBtYXRjaCgpIGFuZCAKK2NyZWF0ZXMgYSBjb21wYXRhYmxlIG1hY3JvIGlmIGl0IGlzIG5vdCBwcm92aWRlZCBieSB0aGUgQyBsaWJyYXJ5LgorCitUaGlzIGlzIG5lZWRlZCBmb3IgdWNsaWJjIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgdGhlIGFib3ZlIGZ1bmN0aW9uCitpbXBsZW1lbnRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy9jb25maWd1cmUuYWMKKysrKyBycG0tNS40LjE0L2NvbmZpZ3VyZS5hYworQEAgLTk0Myw3ICs5NDMsNyBAQCBBQ19DSEVDS19GVU5DUyhbZG5sCisgICAgIGZ0b2sgZ2V0YWRkcmluZm8gZ2V0YXR0cmxpc3QgZ2V0Y3dkIGdldGRlbGltIGdldGxpbmUgZ2V0bW9kZSBnZXRuYW1laW5mbyBkbmwKKyAgICAgZ2V0cGFzc3BocmFzZSBnZXR4YXR0ciBnZXR3ZCBpY29udiBpbmV0X2F0b24gbGNoZmxhZ3MgbGNobW9kIGxjaG93biBkbmwKKyAgICAgbGdldHhhdHRyIGxzZXR4YXR0ciBsdXRpbWVzIG1hZHZpc2UgbWVtcGNweSBta2R0ZW1wIG1rc3RlbXAgbXRyYWNlIGRubAorLSAgICBwb3NpeF9mYWR2aXNlIHBvc2l4X2ZhbGxvY2F0ZSBwdXRlbnYgcmVhbHBhdGggcmVnY29tcCBzZWN1cmVfZ2V0ZW52IF9fc2VjdXJlX2dldGVudiBkbmwKKysgICAgcG9zaXhfZmFkdmlzZSBwb3NpeF9mYWxsb2NhdGUgcHV0ZW52IHJlYWxwYXRoIHJlZ2NvbXAgcnBtYXRjaCBzZWN1cmVfZ2V0ZW52IF9fc2VjdXJlX2dldGVudiBkbmwKKyAgICAgc2V0YXR0cmxpc3Qgc2V0ZW52IHNldGxvY2FsZSBzZXRtb2RlIHNldHhhdHRyIGRubAorICAgICBzaWdhZGRzZXQgc2lnZGVsc2V0IHNpZ2VtcHR5c2V0IHNpZ2hvbGQgc2lncmVsc2Ugc2lncGF1c2UgZG5sCisgICAgIHNpZ3Byb2NtYXNrIHNpZ3N1c3BlbmQgc2lnYWN0aW9uIGRubAorSW5kZXg6IHJwbS01LjQuMTQvc3lzdGVtLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvc3lzdGVtLmgKKysrKyBycG0tNS40LjE0L3N5c3RlbS5oCitAQCAtMzUzLDYgKzM1MywxNCBAQCBleHRlcm4gaW50IF90b2xvd2VyKGludCkgX19USFJPVwkvKkAqLzsKKyAjaW5jbHVkZSA8bGliZ2VuLmg+CisgI2VuZGlmCisgCisrI2lmbmRlZiBIQVZFX1JQTUFUQ0gKKysjZGVmaW5lIHJwbWF0Y2gobGluZSkgXAorKwkoIChsaW5lID09IE5VTEwpPyAtMSA6IFwKKysJICAoKmxpbmUgPT0gJ3knIHx8ICpsaW5lID09ICdZJyk/IDEgOiBcCisrCSAgKCpsaW5lID09ICduJyB8fCAqbGluZSA9PSAnTicpPyAwIDogXAorKwkgIC0xICkKKysjZW5kaWYKKysKKyAvKiAtLSBSZXRyb2ZpdCBnbGliYyBfX3Byb2duYW1lICovCisgI2lmIGRlZmluZWQgX19HTElCQ19fICYmIF9fR0xJQkNfXyA+PSAyCisgI2lmIF9fR0xJQkNfTUlOT1JfXyA+PSAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3JwbWRlcHMtb2Vjb3JlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGQxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1kZXBzLW9lY29yZS5wYXRjaApAQCAtMCwwICsxLDE5NCBAQAorQWRkIGFuICJycG1kZXBzLW9lY29yZSIgYmluYXJ5IHdoaWNoIGFsbG93cyBiYXRjaCBwcm9jZXNzaW5nIG9mIGluZGl2aWR1YWwgZmlsZQorZGVwZW5kZW5jaWVzIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gcnBtZGVwcyAtLXByb3ZpZGVzIC0tcmVxdWlyZXMgLXYsIHByZWZpeGluZworZWFjaCBsaW5lIG9mIG91dHB1dCB3aXRoIHRoZSBmaWxlbmFtZSB0aGF0IGhhcyB0aGUgZGVwZW5kZW5jeS4KKworVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGluZGl2aWR1YWxseSBjYWxsaW5nIHJwbWRlcHMgb24gZWFjaCBmaWxlLgorCitUaGlzIGJpbmFyeSBpcyB1c2VkIGJ5IHBhY2thZ2UuYmJjbGFzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBTcGVjaWZpY10KKworUlAgMjAxMi8yLzcKKworLS0tCisgdG9vbHMvTWFrZWZpbGUuYW0gICAgICB8ICAgIDYgKystCisgdG9vbHMvcnBtZGVwcy1vZWNvcmUuYyB8ICAxNDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworCitJbmRleDogcnBtLTUuNC4xNC90b29scy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHJwbS01LjQuMTQub3JpZy90b29scy9NYWtlZmlsZS5hbQorKysrIHJwbS01LjQuMTQvdG9vbHMvTWFrZWZpbGUuYW0KK0BAIC02Miw3ICs2Miw3IEBAIHBrZ2Jpbl9QUk9HUkFNUyA9CVwKKyAJQFdJVEhfQVVHRUFTX0FVR1RPT0xAIGNocm9vdCBjcCBAV0lUSF9DVURGX0NVREZUT09MQCBmaW5kIG10cmVlIFwKKyAJQFdJVEhfU0VNQU5BR0VfU0VNT0RVTEVAIHdnZXQgXAorIAlycG1jYWNoZSBycG1kaWdlc3QgcnBtcmVwbyBycG1zcGVjZHVtcCBcCistCXJwbWNtcCBycG1kZXBzIHNxbGl0ZTMgQFdJVEhfS0VZVVRJTFNfUlBNS0VZQCBAV0lUSF9MSUJFTEZfREVCVUdFRElUQAorKwlycG1jbXAgcnBtZGVwcyBycG1kZXBzLW9lY29yZSBzcWxpdGUzIEBXSVRIX0tFWVVUSUxTX1JQTUtFWUAgQFdJVEhfTElCRUxGX0RFQlVHRURJVEAKKyBpZiBXSVRIX0RCCisgcGtnYmluX1BST0dSQU1TICs9CWRiY29udmVydAorIGVuZGlmCitAQCAtMTcyLDYgKzE3MiwxMCBAQCBycG1kZXBzX1NPVVJDRVMgPQlycG1kZXBzLmMKKyBycG1kZXBzX0xERkxBR1MgPQlATERGTEFHU19TVEFUSUNAICQoTERGTEFHUykKKyBycG1kZXBzX0xEQUREID0JCSQoUlBNX0xEQUREX0NPTU1PTikKKyAKKytycG1kZXBzX29lY29yZV9TT1VSQ0VTID0gIHJwbWRlcHMtb2Vjb3JlLmMKKytycG1kZXBzX29lY29yZV9MREZMQUdTID0gIEBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorK3JwbWRlcHNfb2Vjb3JlX0xEQUREID0gICAgJChSUE1fTERBRERfQ09NTU9OKQorKworIHJwbWRpZ2VzdF9TT1VSQ0VTID0JcnBtZGlnZXN0LmMKKyBycG1kaWdlc3RfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWRpZ2VzdF9MREFERCA9CSQoUlBNSU9fTERBRERfQ09NTU9OKQorSW5kZXg6IHJwbS01LjQuMTQvdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIHJwbS01LjQuMTQvdG9vbHMvcnBtZGVwcy1vZWNvcmUuYworQEAgLTAsMCArMSwxNDcgQEAKKysjaW5jbHVkZSAic3lzdGVtLmgiCisrY29uc3QgY2hhciAqX19wcm9nbmFtZTsKKysKKysjaW5jbHVkZSA8cnBtaW8uaD4KKysjaW5jbHVkZSA8cnBtaW90eXBlcy5oPgorKyNpbmNsdWRlIDxycG1jYi5oPgorKyNpbmNsdWRlIDxhcmd2Lmg+CisrI2luY2x1ZGUgPHJwbXR5cGVzLmg+CisrI2luY2x1ZGUgPHJwbXRhZy5oPgorKworKyNpbmNsdWRlIDxycG1kcy5oPgorKyNkZWZpbmUgICBfUlBNRkNfSU5URVJOQUwgICAgIC8qIFhYWCBmb3IgZGVidWdnaW5nICovCisrI2luY2x1ZGUgPHJwbWZjLmg+CisrCisrI2luY2x1ZGUgPHJwbWNsaS5oPgorKworKyNpbmNsdWRlICJkZWJ1Zy5oIgorKworKy8qQHVuY2hlY2tlZEAqLworK2NoYXIgKnByb2duYW1lOworKworKyNkZWZpbmUgICBSUE1ERVBfUlBNRkMgICAgICAgIDEKKysKKytzdGF0aWMgaW50IHJwbWRlcFByaW50KGNoYXIgKmZpbGVuYW1lLCBycG1kcyBkcywgRklMRSAqIGZwKQorK3sKKysgICAgaWYgKGZwID09IE5VTEwpIGZwID0gc3RkZXJyOworKworKyAgICBkcyA9IHJwbWRzSW5pdChkcyk7CisrICAgIHdoaWxlIChycG1kc05leHQoZHMpID49IDApIHsKKysgIGZwcmludGYoZnAsICIlcyAlczogJXNcbiIsIGZpbGVuYW1lLCBycG1kc1R5cGUoZHMpLCBycG1kc0RORVZSKGRzKSsyKTsKKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCBwb3B0T3B0aW9uIG9wdGlvbnNUYWJsZVtdID0geworKworKyB7IE5VTEwsICdcMCcsIFBPUFRfQVJHX0lOQ0xVREVfVEFCTEUsIHJwbWNsaUFsbFBvcHRUYWJsZSwgMCwKKysgIE5fKCJDb21tb24gb3B0aW9uczoiKSwKKysgIE5VTEwgfSwgCisrCisrICAgUE9QVF9BVVRPQUxJQVMKKysgICBQT1BUX0FVVE9IRUxQCisrICAgUE9QVF9UQUJMRUVORAorK307CisrCisrCisraW50CisrbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcG9wdENvbnRleHQgb3B0Q29uOworKyAgICBBUkdWX3QgYXYgPSBOVUxMOworKyAgICBycG1mYyBmYyA9IE5VTEw7CisrICAgIEZJTEUgKiBmcCA9IE5VTEw7CisrICAgIGludCBmbGFncyA9IDA7CisrICAgIGludCBhYyA9IDA7CisrICAgIGludCBlYyA9IDE7CisrICAgIGludCB4eDsKKysgICAgaW50IGk7CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrICAgIGludCBuZGRpY3Q7CisrICAgIGNvbnN0IGNoYXIgKiBzOworKyAgICBjaGFyICogc2U7CisrICAgIGNvbnN0IGNoYXIgKiBmbjsKKysgICAgY29uc3QgY2hhciAqIE47CisrICAgIGNvbnN0IGNoYXIgKiBFVlI7CisrICAgIGV2ckZsYWdzIEZsYWdzOworKyAgICB1bnNpZ25lZCBjaGFyIGRlcHR5cGU7CisrICAgIGludCBpeDsKKysgICAgcnBtZHMgZHM7CisrCisrLypALW1vZG9ic2VydmVyQCovCisrICAgIGlmICgocHJvZ25hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpICE9IE5VTEwpCisrICBwcm9nbmFtZSsrOworKyAgICBlbHNlCisrICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisrLypAPW1vZG9ic2VydmVyQCovCisrCisrICAgIG9wdENvbiA9IHJwbWNsaUluaXQoYXJnYywgYXJndiwgb3B0aW9uc1RhYmxlKTsKKysgICAgaWYgKG9wdENvbiA9PSBOVUxMKQorKyAgZ290byBleGl0OworKworKyAgICBhdiA9IHBvcHRHZXRBcmdzKG9wdENvbik7CisrICAgIGFjID0gYXJndkNvdW50KGF2KTsKKysKKysgICAgaWYgKGFjID09IDApIHsKKysgIGF2ID0gTlVMTDsKKysgIHh4ID0gYXJndkZnZXRzKCZhdiwgTlVMTCk7CisrICBhYyA9IGFyZ3ZDb3VudChhdik7CisrICAgIH0KKysKKysgICAgLyogTWFrZSBzdXJlIGZpbGUgbmFtZXMgYXJlIHNvcnRlZC4gKi8KKysgICAgeHggPSBhcmd2U29ydChhdiwgTlVMTCk7CisrCisrICAgIC8qIEJ1aWxkIGZpbGUgY2xhc3MgZGljdGlvbmFyeS4gKi8KKysgICAgZmMgPSBycG1mY05ldygpOworKyAgICB4eCA9IHJwbWZjQ2xhc3NpZnkoZmMsIGF2LCBOVUxMKTsKKysKKysgICAgLyogQnVpbGQgZmlsZS9wYWNrYWdlIGRlcGVuZGVuY3kgZGljdGlvbmFyeS4gKi8KKysgICAgeHggPSBycG1mY0FwcGx5KGZjKTsKKysKKysgICAgLyogR2VuZXJhdGUgcGVyLWZpbGUgaW5kaWNlcyBpbnRvIHBhY2thZ2UgZGVwZW5kZW5jaWVzLiAqLworKyAgICBuZGRpY3QgPSBhcmd2Q291bnQoZmMtPmRkaWN0KTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IG5kZGljdDsgaSsrKSB7CisrICBzID0gZmMtPmRkaWN0W2ldOworKworKyAgLyogUGFyc2Ugb3V0IChmaWxlIyxkZXB0eXBlLE4sRVZSLEZsYWdzKSAqLworKyAgaXggPSBzdHJ0b2wocywgJnNlLCAxMCk7CisrICBhc3NlcnQoc2UgIT0gTlVMTCk7CisrICBkZXB0eXBlID0gKnNlKys7CisrICBzZSsrOworKyAgTiA9IHNlOworKyAgd2hpbGUgKCpzZSAmJiAqc2UgIT0gJyAnKQorKyAgICAgIHNlKys7CisrICAqc2UrKyA9ICdcMCc7CisrICBFVlIgPSBzZTsKKysgIHdoaWxlICgqc2UgJiYgKnNlICE9ICcgJykKKysgICAgICBzZSsrOworKyAgKnNlKysgPSAnXDAnOworKyAgRmxhZ3MgPSBzdHJ0b2woc2UsIE5VTEwsIDE2KTsKKysKKysgIHN3aXRjaCAoZGVwdHlwZSkgeworKyAgZGVmYXVsdDoKKysgICAgICAvKkBzd2l0Y2hicmVha0AqLyBicmVhazsKKysgIGNhc2UgJ1AnOiAgIAorKyAgICAgIGRzID0gcnBtZHNTaW5nbGUoUlBNVEFHX1BST1ZJREVOQU1FLCBOLCBFVlIsIEZsYWdzKTsKKysgICAgICBycG1kZXBQcmludCgoY2hhciAqKWZjLT5mbltpeF0sIGRzLCBzdGRvdXQpOworKyAgICAgICh2b2lkKXJwbWRzRnJlZShkcyk7CisrICAgICAgZHMgPSBOVUxMOworKyAgICAgIC8qQHN3aXRjaGJyZWFrQCovIGJyZWFrOworKyAgY2FzZSAnUic6CisrICAgICAgZHMgPSBycG1kc1NpbmdsZShSUE1UQUdfUkVRVUlSRU5BTUUsIE4sIEVWUiwgRmxhZ3MpOworKyAgICAgIHJwbWRlcFByaW50KChjaGFyICopZmMtPmZuW2l4XSwgZHMsIHN0ZG91dCk7CisrICAgICAgKHZvaWQpcnBtZHNGcmVlKGRzKTsKKysgICAgICBkcyA9IE5VTEw7CisrICAgICAgLypAc3dpdGNoYnJlYWtAKi8gYnJlYWs7CisrICB9CisrICAgIH0KKysKKysgICAgZmMgPSBycG1mY0ZyZWUoZmMpOworKworKyAgICBlYyA9IDA7CisrCisrZXhpdDoKKysgICAgb3B0Q29uID0gcnBtY2xpRmluaShvcHRDb24pOworKyAgICByZXR1cm4gZWM7CisrfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtcXZfY2NfYl9nb25lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vcnBtcXZfY2NfYl9nb25lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwOGJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS9ycG1xdl9jY19iX2dvbmUucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorcnBtOiBjb21waWxlIHJwbXF2LmMgaW5zdGVhZCBvZiBycG1xdi5jYworCitTb21lIHZlcnNpb25zIG9mIGdjYywgNC40LjUgZm9yIGV4YW1wbGUsIHdpbGwgcHV0IGEgcmVmZXJlbmNlIHRvIF9fZ3h4X3BlcnNvbmFsaXR5X3YwCitpbnRvIHJwbS5vIGFuZCBycG1idWlsZC5vLiAgVGhpcyBtZWFucyB3ZSBtdXN0IGxpbmsgd2l0aCBnKyssIGFuZCB0aGUgTWFrZWZpbGUgd2UKK2dlbmVyYXRlIGRvZXMgbm90LgorCitTbywgZ28gYmFjayB0byB1c2luZyBycG1xdi5jICh3aGljaCBpcyBjdXJyZW50bHkgaWRlbnRpY2FsIHRvIHJwbXF2LmNjKS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKworICAgV2hlbiBsaW5raW5nIHdpdGggZysrIGlzIHJlYWxseSBuZWNlc3NhcnksIHRoZSB1cHN0cmVhbSBwYWNrYWdlIHdpbGwgZG8gdGhhdC4KKworU2lnbmVkLW9mZi1ieTogSm9lIFNsYXRlciA8am9lLnNsYXRlckB3aW5kcml2ZXIuY29tPgorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMjcsMTMgKzEyNywxMyBAQCBycG1fU09VUkNFUyA9CQlidWlsZC5jCisgcnBtX0xERkxBR1MgPQkJQExERkxBR1NfU1RBVElDQCAkKExERkxBR1MpCisgcnBtX0xEQUREID0JCXJwbS5vICQobXlMREFERCkKKyBycG0ubzoJJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCistCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLURJQU1fUlBNREIgLURJQU1fUlBNRUlVIC1ESUFNX1JQTUsgLURJQU1fUlBNUVYgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jYworKwkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1ESUFNX1JQTURCIC1ESUFNX1JQTUVJVSAtRElBTV9SUE1LIC1ESUFNX1JQTVFWIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuYworIAorIHJwbWJ1aWxkX1NPVVJDRVMgPQlidWlsZC5jCisgcnBtYnVpbGRfTERGTEFHUyA9CUBMREZMQUdTX1NUQVRJQ0AgJChMREZMQUdTKQorIHJwbWJ1aWxkX0xEQUREID0JcnBtYnVpbGQubyAkKG15TERBREQpCisgcnBtYnVpbGQubzogJCh0b3Bfc3JjZGlyKS9ycG1xdi5jCistCSQoQ09NUElMRSkgLURJQU1fUlBNQlQgLW8gJEAgLWMgJCh0b3Bfc3JjZGlyKS9ycG1xdi5jYworKwkkKENPTVBJTEUpIC1ESUFNX1JQTUJUIC1vICRAIC1jICQodG9wX3NyY2RpcikvcnBtcXYuYworIAorIC5QSE9OWToJc3BsaW50Cisgc3BsaW50OgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbS91Y2xpYmMtc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODcwYWRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdWNsaWJjLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRGVmaW5lIHRoZSB4KiB3cmFwcGVycyBmb3IgdWNsaWJjIGFzIHdlbGwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBycG0tNS40LjE0L3JwbWlvL3JwbWlvLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvcnBtaW8vcnBtaW8uaAorKysrIHJwbS01LjQuMTQvcnBtaW8vcnBtaW8uaAorQEAgLTIzLDcgKzIzLDggQEAKKyAgKi8KKyAvKkB7Ki8KKyAjaWYgIWRlZmluZWQoX19MQ0xJTlRfXykgJiYgIWRlZmluZWQoX19VQ0xJQkNfXykgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmIFwKKy0JKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSkKKysJKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyKSkgJiYgXAorKwkhZGVmaW5lZChfX1VDTElCQ19fKQorICNkZWZpbmUgVVNFX0NPT0tJRV9TRUVLX1BPSU5URVIgMQorIHR5cGVkZWYgX0lPX29mZjY0X3QgCV9saWJpb19vZmZfdDsKKyB0eXBlZGVmIF9saWJpb19vZmZfdCAqCV9saWJpb19wb3NfdDsKK0luZGV4OiBycG0tNS40LjE0L3N5c3RlbS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3N5c3RlbS5oCisrKysgcnBtLTUuNC4xNC9zeXN0ZW0uaAorQEAgLTQ4MSw3ICs0ODEsNyBAQCBleHRlcm4gdm9pZCBtdW50cmFjZSAodm9pZCkKKyAjZW5kaWYgLyogZGVmaW5lZChfX0xDTElOVF9fKSAqLworIAorIC8qIE1lbW9yeSBhbGxvY2F0aW9uIHZpYSBtYWNybyBkZWZzIHRvIGdldCBtZWFuaW5nZnVsIGxvY2F0aW9ucyBmcm9tIG10cmFjZSgpICovCistI2lmIGRlZmluZWQoX19HTlVDX18pCisrI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19VQ0xJQkNfXykKKyAjZGVmaW5lCXhtYWxsb2MoX3NpemUpIAkJKG1hbGxvYyhfc2l6ZSkgPyA6IHZtZWZhaWwoX3NpemUpKQorICNkZWZpbmUJeGNhbGxvYyhfbm1lbWIsIF9zaXplKQkoY2FsbG9jKChfbm1lbWIpLCAoX3NpemUpKSA/IDogdm1lZmFpbChfc2l6ZSkpCisgI2RlZmluZQl4cmVhbGxvYyhfcHRyLCBfc2l6ZSkJKHJlYWxsb2MoKF9wdHIpLCAoX3NpemUpKSA/IDogdm1lZmFpbChfc2l6ZSkpCitJbmRleDogcnBtLTUuNC4xNC9saWIvbGlicnBtLnZlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycG0tNS40LjE0Lm9yaWcvbGliL2xpYnJwbS52ZXJzCisrKysgcnBtLTUuNC4xNC9saWIvbGlicnBtLnZlcnMKK0BAIC00MDUsNiArNDA1LDEwIEBAIExJQlJQTV8wCisgICAgIHNwZWNlZGl0OworICAgICBzdHJpY3RfZXJhc3VyZXM7CisgICAgIFhycG10c2lJbml0OworKyAgICB4bWFsbG9jOworKyAgICB4cmVhbGxvYzsKKysgICAgeGNhbGxvYzsKKysgICAgeHN0cmR1cDsKKyAgIGxvY2FsOgorICAgICAqOworIH07CitJbmRleDogcnBtLTUuNC4xNC9ycG1pby9saWJycG1pby52ZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL3JwbWlvL2xpYnJwbWlvLnZlcnMKKysrKyBycG0tNS40LjE0L3JwbWlvL2xpYnJwbWlvLnZlcnMKK0BAIC0xMDU2LDYgKzEwNTYsMTAgQEAgTElCUlBNSU9fMAorICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF9tb2RlOworICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF93OworICAgICBtb25nb193cml0ZV9jb25jZXJuX3NldF93dGltZW91dDsKKysgICAgeG1hbGxvYzsKKysgICAgeHJlYWxsb2M7CisrICAgIHhjYWxsb2M7CisrICAgIHhzdHJkdXA7CisgICBsb2NhbDoKKyAgICAgKjsKKyB9OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG0vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwNDVhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtL3ZlcmlmeS1maXgtYnJva2VuLWxvZ2ljLWZvci1naG9zdC1hdm9pZGFuY2UtTWFyay1IYXQucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSA5ZTdiNzJlZTBjOTk0NjA5OTc1OTgxZTEzNWZjMThkMDM4N2FlZmI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogamJqIDxqYmo+CitEYXRlOiBXZWQsIDE0IE1heSAyMDE0IDIxOjE5OjQxICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIC0gdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyaworIEhhdGxlKS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CistLS0KKyBDSEFOR0VTICAgICAgfCAxICsKKyBsaWIvdmVyaWZ5LmMgfCAzICstLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitJbmRleDogcnBtLTUuNC4xNC9DSEFOR0VTCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL0NIQU5HRVMKKysrKyBycG0tNS40LjE0L0NIQU5HRVMKK0BAIC0xLDMgKzEsNSBAQAorKyAgICAtIGpiajogdmVyaWZ5OiBmaXg6IGJyb2tlbiBsb2dpYyBmb3IgJWdob3N0IGF2b2lkYW5jZSAoTWFyayBIYXRsZSkuCisrCisgNS40LjEzIC0+IDUuNC4xNDoKKyAgICAgLSBtb29uZXk6IHVzZSBfX3N1biBpbnN0ZWFkIG9mIF9fc3VuX18gaW4gI2RlZmluZSAobHAjMTI0MzQ3MikuCisgICAgIC0gbW9vbmV5OiBycG1jb25zdGFudDogZW5zdXJlIGxpbmthZ2UgdyBPcmFjbGUgU3R1ZGlvIDEyLjMgKGxwIzEyNDM0NjkpLgorSW5kZXg6IHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBtLTUuNC4xNC5vcmlnL2xpYi92ZXJpZnkuYworKysrIHJwbS01LjQuMTQvbGliL3ZlcmlmeS5jCitAQCAtNTg4LDggKzU4OCw3IEBAIHVpbnQzMl90IGZjID0gcnBtZmlGQyhmaSk7CisgCSAgICBjb250aW51ZTsKKyAKKyAJLyogSWYgbm90IHZlcmlmeWluZyAlZ2hvc3QsIHNraXAgZ2hvc3QgZmlsZXMuICovCistCS8qIFhYWCB0aGUgYnJva2VuISEhIGxvZ2ljIGRpc2FibGVzICVnaG9zdCBxdWVyaWVzIGFsd2F5cy4gKi8KKy0JaWYgKCEoRkZfSVNTRVQocXZhLT5xdmFfZmZsYWdzLCBHSE9TVCkgJiYgRkZfSVNTRVQoZmZsYWdzLCBHSE9TVCkpKQorKwlpZiAoIUZGX0lTU0VUKHF2YS0+cXZhX2ZmbGFncywgR0hPU1QpICYmIEZGX0lTU0VUKGZmbGFncywgR0hPU1QpKQorIAkgICAgY29udGludWU7CisgCisgCS8qIEdhdGhlciBwZXItZmlsZSBkYXRhIGludG8gYSBjYXJyaWVyLiAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNC4xMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNC4xMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGM5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV80LjExLjIuYmIKQEAgLTAsMCArMSwxMzcgQEAKK1NVTU1BUlkgPSAiVGhlIFJQTSBwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgKFJQTSkgaXMgYSBwb3dlcmZ1bCBjb21tYW5kIGxpbmUgZHJpdmVuIFwKK3BhY2thZ2UgbWFuYWdlbWVudCBzeXN0ZW0gY2FwYWJsZSBvZiBpbnN0YWxsaW5nLCB1bmluc3RhbGxpbmcsIFwKK3ZlcmlmeWluZywgcXVlcnlpbmcsIGFuZCB1cGRhdGluZyBzb2Z0d2FyZSBwYWNrYWdlcy4gRWFjaCBzb2Z0d2FyZSBcCitwYWNrYWdlIGNvbnNpc3RzIG9mIGFuIGFyY2hpdmUgb2YgZmlsZXMgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBcCit0aGUgcGFja2FnZSBsaWtlIGl0cyB2ZXJzaW9uLCBhIGRlc2NyaXB0aW9uLCBldGMuIgorCitTVU1NQVJZXyR7UE59LWRldiA9ICJEZXZlbG9wbWVudCBmaWxlcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWRldiA9ICJUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIFJQTSBDIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcy4gVGhlc2UgXAorZGV2ZWxvcG1lbnQgZmlsZXMgd2lsbCBzaW1wbGlmeSB0aGUgcHJvY2VzcyBvZiB3cml0aW5nIHByb2dyYW1zIHRoYXQgXAorbWFuaXB1bGF0ZSBSUE0gcGFja2FnZXMgYW5kIGRhdGFiYXNlcy4gVGhlc2UgZmlsZXMgYXJlIGludGVuZGVkIHRvIFwKK3NpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGdyYXBoaWNhbCBwYWNrYWdlIG1hbmFnZXJzIG9yIGFueSBcCitvdGhlciB0b29scyB0aGF0IG5lZWQgYW4gaW50aW1hdGUga25vd2xlZGdlIG9mIFJQTSBwYWNrYWdlcyBpbiBvcmRlciBcCit0byBmdW5jdGlvbi4iCisKK1NVTU1BUllfcHl0aG9uLXJwbSA9ICJQeXRob24gYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW51cHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3B5dGhvbi1ycG0gPSAiVGhlIHJwbS1weXRob24gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSB0byB1c2UgdGhlIGludGVyZmFjZSBcCitzdXBwbGllZCBieSB0aGUgUlBNIFBhY2thZ2UgTWFuYWdlciBsaWJyYXJpZXMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnJwbS5vcmciCitMSUNFTlNFID0gIkdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA/Pz0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK0RFUEVORFMgPSAiZGIgbGlieG1sMiB4eiBmaW5kdXRpbHMgZmlsZSBwb3B0IG5zcyBiemlwMiBlbGZ1dGlscyBwYXRjaCBhdHRyIHpsaWIgYWNsIGd6aXAgbWFrZSBiaW51dGlscyBweXRob24iCisKK1NSQ19VUkkgKz0gImh0dHA6Ly9ycG0ub3JnL3JlbGVhc2VzL3JwbS00LjExLngvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgICBmaWxlOi8vdXNlLXBrZ2NvbmZpZy1mb3ItcHl0aG9uLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtZGIzLWZyb20tY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9hZGRfUlBNU0VOU0VfTUlTU0lOR09LX3RvX3JwbW1vZHVsZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3VwcG9ydC1zdWdnZXN0cy10YWcucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JlbW92ZS1kaXItY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfc2hvcnRjaXJjdWl0ZWQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2ZpeF9saWJkaXIucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JwbS1zY3JpcHRldGV4ZWNoZWxwLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9weXRob25kZXBzLnNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9ycG0tQ1ZFLTIwMTQtODExOC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnBtLUNWRS0yMDEzLTY0MzUucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NzZhYzk5NDhhODgzNjcwNTRmOGRkYjVjMGU4NzE3MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MDNmOGRlNjMyYjMzODQ2Y2U1NzQ2ZjQyOWMyMWE2MGY0MGRmZjlkY2I1NmYxYjQxMThmMzdhMDY1MmE0OGQ0IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgcHl0aG9ubmF0aXZlCitpbmhlcml0IHBrZ2NvbmZpZworaW5oZXJpdCBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiArPSAiLS1ob3N0PSR7SE9TVF9TWVN9IFwKKyAgICAgICAgICAgICAgICAgLS1wcm9ncmFtLXByZWZpeD0gXAorICAgICAgICAgICAgICAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgICAtLWV4ZWMtcHJlZml4PSR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgIC0tYmluZGlyPSR7cHJlZml4fS9iaW4gXAorICAgICAgICAgICAgICAgICAtLXNiaW5kaXI9JHtwcmVmaXh9L3NiaW4gXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tZGF0YWRpcj0ke3ByZWZpeH0vc2hhcmUgXAorICAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtwcmVmaXh9L2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAtLWxpYmRpcj0ke3ByZWZpeH0vbGliIFwKKyAgICAgICAgICAgICAgICAgLS1saWJleGVjZGlyPSR7cHJlZml4fS9saWJleGVjIFwKKyAgICAgICAgICAgICAgICAgLS1sb2NhbHN0YXRlZGlyPSR7bG9jYWxzdGF0ZWRpcn0gXAorICAgICAgICAgICAgICAgICAtLXNoYXJlZHN0YXRlZGlyPSR7cHJlZml4fS9jb20gXAorICAgICAgICAgICAgICAgICAtLW1hbmRpcj0ke21hbmRpcn0gXAorICAgICAgICAgICAgICAgICAtLWluZm9kaXI9JHtpbmZvZGlyfSBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWFjbCBcCisgICAgICAgICAgICAgICAgIC0td2l0aG91dC1sdWEgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtY2FwIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtcHl0aG9uIFwKKyAgICAgICAgICAgICAgICAgLS13aXRoLWV4dGVybmFsLWRiIFwKKyAgICAgICAgICAgICAgICAiCisKK0NQUEZMQUdTX2FwcGVuZCA9ICIgYHBrZy1jb25maWcgLS1jZmxhZ3MgbnNzYCIKK0xERkxBR1NfYXBwZW5kID0gIiAtV2wsLUJzeW1ib2xpYy1mdW5jdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyIKK0NDRkxBR1NfYXBwZW5kID0gIiAtZlBJQyAiCitDWFhGTEFHU19hcHBlbmQgPSAiIC1mUElDICIKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgcm0gLXJmIHNxbGl0ZQorICAgIHJtIC1mIG00L2xpYnRvb2wubTQKKyAgICBybSAtZiBtNC9sdCoubTQKKyAgICBybSAtcmYgZGIzL2NvbmZpZ3VyZSoKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgbXYgJHtEfS8ke2Jhc2VfYmluZGlyfS9ycG0gJHtEfS8ke2JpbmRpcn0vCisgICAgcm1kaXIgJHtEfS8ke2Jhc2VfYmluZGlyfQorICAgIHJtIC1mICR7RH0ke3ByZWZpeH0vbGliLyoubGEKKyAgICBybSAtZiAke0R9JHtwcmVmaXh9L2xpYi9ycG0tcGx1Z2lucy8qLmxhCisgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoue2EsbGF9CisgICAgcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLnthLGxhfQorICAgIHJtIC1mciAke0R9L3ZhcgorICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9saWIvcnBtL2JpbgorICAgIGxuIC1zIC4uL2RlYnVnZWRpdCAke0R9JHtwcmVmaXh9L2xpYi9ycG0vYmluL2RlYnVnZWRpdAorICAgIGxuIC1zIC4uL3JwbWRlcHMgJHtEfSR7cHJlZml4fS9saWIvcnBtL2Jpbi9ycG1kZXBzLW9lY29yZQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B5dGhvbmRlcHMuc2ggJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmRlcHMuc2gKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59KCkgeworCisgICAgWyAieFwkRCIgPT0gIngiIF0gJiYgbGRjb25maWcKKyAgICB0ZXN0IC1mICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9QYWNrYWdlcyB8fCBycG0gLS1pbml0ZGIKKyAgICBybSAtZiAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vRmlsZW1kNXMgXAorICAgICAgICAgICR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbS9GaWxlZGlnZXN0cyBcCisgICAgICAgICAgJHtsb2NhbHN0YXRlZGlyfS9saWIvcnBtL1JlcXVpcmV2ZXJzaW9uIFwKKyAgICAgICAgICAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9ycG0vUHJvdmlkZXZlcnNpb24KKworfQorCitwa2dfcG9zdHJtXyR7UE59KCkgeworICAgIFsgInhcJEQiID09ICJ4IiBdICYmIGxkY29uZmlnCisKK30KKworUEFDS0FHRVMgKz0gInB5dGhvbi0ke1BOfSIKK1BST1ZJREVTICs9ICJweXRob24tcnBtIgorCitGSUxFU18ke1BOfSArPSAgIiR7bGliZGlyfS9ycG0gXAorICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcnBtLXBsdWdpbnMvZXhlYy5zbyBcCisgICAgICAgICAgICAgICAgIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcnBtLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3JwbS1wbHVnaW5zLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbjIuNy9zaXRlLXBhY2thZ2VzL3JwbS8uZGVidWcvKiBcCisgICAgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vKi5sYSIKKworRklMRVNfcHl0aG9uLSR7UE59ID0gIiR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy9ycG0vKiIKK1JERVBFTkRTX3B5dGhvbi0ke1BOfSA9ICIke1BOfSBweXRob24iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40K2N2cy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNCtjdnMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkwM2YzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbV81LjQrY3ZzLmJiCkBAIC0wLDAgKzEsNTI4IEBACitTVU1NQVJZID0gIlRoZSBSUE0gcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIGlzIGEgcG93ZXJmdWwgY29tbWFuZCBsaW5lIGRyaXZlbiBcCitwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIGNhcGFibGUgb2YgaW5zdGFsbGluZywgdW5pbnN0YWxsaW5nLCBcCit2ZXJpZnlpbmcsIHF1ZXJ5aW5nLCBhbmQgdXBkYXRpbmcgc29mdHdhcmUgcGFja2FnZXMuIEVhY2ggc29mdHdhcmUgXAorcGFja2FnZSBjb25zaXN0cyBvZiBhbiBhcmNoaXZlIG9mIGZpbGVzIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgXAordGhlIHBhY2thZ2UgbGlrZSBpdHMgdmVyc2lvbiwgYSBkZXNjcmlwdGlvbiwgZXRjLiIKKworU1VNTUFSWV8ke1BOfS1saWJzID0gIkxpYnJhcmllcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWxpYnMgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gc2hhcmVkIGxpYnJhcmllcy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCitkZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCittYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAorc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKK290aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKK3RvIGZ1bmN0aW9uLiIKKworU1VNTUFSWV8ke1BOfS1jb21tb24gPSAiQ29tbW9uIFJQTSBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiIKK0RFU0NSSVBUSU9OXyR7UE59LWNvbW1vbiA9ICJUaGUgcnBtLWNvbW1vbiBwYWNrYWdlIGNvbnRhaW5zIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIFwKK2FuZCBjb25maWd1cmF0aW9uIGNvbW1vbiBiZXR3ZWVuIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgorCitTVU1NQVJZXyR7UE59LWJ1aWxkID0gIlNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgdXNlZCB0byBidWlsZCBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWJ1aWxkID0gIlRoZSBycG0tYnVpbGQgcGFja2FnZWMgb250YWlucyB0aGUgc2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyBcCit0aGF0IGFyZSB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIHVzaW5nIHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtID0gIlBlcmwgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3BlcmwtbW9kdWxlcy1ycG0gPSAiVGhlIHBlcmwtbW9kdWxlcy1ycG0gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFBlcmwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworU1VNTUFSWV9wZXJsLW1vZHVsZS1ycG0tZGV2ID0gIkRldmVsb3BtZW50IGNvbXBvbmVudHMgZm9yIHBlcmwgYmluZGluZ3MiCitERVNDUklQVElPTl9wZXJsLW1vZHVsZXMtcnBtLWRldiA9ICJEZXZlbG9wbWVudCBpdGVtcyBzdWNoIGFzIG1hbiBwYWdlcyBmb3IgdXNlIHdpdGggdGhlIFBlcmwgXAorbGFuZ3VhZ2UgYmluZGluZ3MuIgorCitIT01FUEFHRSA9ICJodHRwOi8vcnBtNS5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworREVQRU5EUyA9ICJsaWJwY3JlIGF0dHIgYWNsIHBvcHQgb3NzcC11dWlkIGZpbGUgYnlhY2MtbmF0aXZlIgorCitTID0gIiR7V09SS0RJUn0vcnBtIgorCisjIEFwcGx5IHZhcmlvdXMgZml4dXBzIHRoYXQgYXJlIHVuaXF1ZSB0byB0aGUgQ1ZTIGVudmlyb25tZW50Citkb19maXh1cF91bnBhY2sgKCkgeworCWxuIC1zZiAuLi9zeWNrICR7U30vc3ljayB8fCA6CisJbG4gLXNmIC4uL2x1YSAke1N9L2x1YSB8fCA6CisJbG4gJHtTfS9ycG1xdi5jICR7U30vcnBtcXYuY2MgfHwgOgorfQorCithZGR0YXNrIGZpeHVwX3VucGFjayBhZnRlciBkb191bnBhY2sgYmVmb3JlIGRvX3BhdGNoCisKKyMgVGhpcyByZWNpcGUgaXMgcmVhbGx5IGRlc2lnbmVkIGZvciBkZXZlbG9wbWVudC4uLiB0byBUcnkgb3V0IHRoZSBsYXRlc3QKKyMgY29tbXVuaXR5IHdvcmsgaW4gcHJvZ3Jlc3MuCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKKyMgcnBtMmNwaW8gaXMgYSBzaGVsbCBzY3JpcHQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJwbSBzcmMucnBtLiAgSXQgaXMgbmVlZGVkCisjIGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGRpc3RyaWJ1dGlvbiBTUlBNIGludG8gYSBmb3JtYXQgd2UgY2FuIGV4dHJhY3QuLi4KK1NSQ19VUkkgPSAiY3ZzOi8vYW5vbnltb3VzQHJwbTUub3JnL2N2czt0YWc9cnBtLTVfNDttb2R1bGU9cnBtIFwKKwkgICBjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1zeWNrIFwKKwkgICBjdnM6Ly9hbm9ueW1vdXNAcnBtNS5vcmcvY3ZzO3RhZz1ycG0tNV80O21vZHVsZT1sdWEgXAorCSAgIGZpbGU6Ly9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGItcmVkdWNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtLWF1dG9nZW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbGlic3FsLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1zaG93cmMucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maWxlY2xhc3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tY2Fub25hcmNoLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLWxvb3Btc2cucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaCBcCisJICAgZmlsZTovL3B5dGhvbmRlcHMuc2ggXAorCSAgIGZpbGU6Ly9ycG1kZXBzLW9lY29yZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZXNvbHZlZGVwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9zc3AtdXVpZC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2ggXAorCSAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbWF0Y2gucGF0Y2ggXAorCSAgIGZpbGU6Ly9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaCBcCisJICAgZmlsZTovL2RiY29udmVydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS11dWlkLWluY2x1ZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXB5LWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybTIucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXNlZ3YucGF0Y2ggXAorCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWhhcmRsaW5rLXNlZ2ZhdWx0LWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYXlsb2FkLXVzZS1oYXNoZWQtaW5vZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZml4LWxvZ2lvLWNwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRiNS1vci1kYjYucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcnBtcGdwLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kaXNhYmxlLVduby1vdmVycmlkZS1pbml0LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlYWxwYXRoLnBhdGNoIFwKKwkgICIKKworIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZSBwbGF0Zm9ybSBzY29yZSBkZWJ1Z2dpbmcKKyMgVGhpcyBpcyB1c2VmdWwgd2hlbiBpZGVudGlmeWluZyBpc3N1ZXMgd2l0aCBTbWFydCBiZWluZyB1bmFibGUKKyMgdG8gcHJvY2VzcyBjZXJ0YWluIHBhY2thZ2UgZmVlZHMuCisjU1JDX1VSSSArPSAiZmlsZTovL3JwbS1kZWJ1Zy1wbGF0Zm9ybS5wYXRjaCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dAorCithY3BhdGhzID0gIi1JICR7U30vZGIvZGlzdC9hY2xvY2FsIC1JICR7U30vZGIvZGlzdC9hY2xvY2FsX2phdmEiCisKKyMgU3BlY2lmeSB0aGUgZGVmYXVsdCBycG0gbWFjcm9zIGluIHRlcm1zIG9mIGFkanVzdGFibGUgdmFyaWFibGVzCitycG1fbWFjcm9zID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOiV7X2V0Y3JwbX0vbWFjcm9zLio6JXtfZXRjcnBtfS9tYWNyb3M6JXtfZXRjcnBtfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vcG9reS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5LyV7X3RhcmdldH0vbWFjcm9zOn4vLm9lcnBtbWFjcm9zIgorcnBtX21hY3Jvc19jbGFzcy1uYXRpdmVzZGsgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS9wb2t5L21hY3Jvczole191c3JsaWJycG19L3Bva3kvJXtfdGFyZ2V0fS9tYWNyb3M6fi8ub2VycG1tYWNyb3MiCisKKyMgc3FsaXRlIGx1YSB0Y2wgYXVnZWFzIG5zcyBnY3J5cHQgbmVvbiB4eiB4YXIga2V5dXRpbHMgcGVybCBzZWxpbnV4CisKKyMgTm90ZTogcGVybCBhbmQgc3FsaXRlIHcvbyBkYiBzcGVjaWZpZWQgZG9lcyBub3QgY3VycmVudGx5IHdvcmsuCisjICAgICAgIHRjbCwgYXVnZWFzLCBuc3MsIGdjcnlwdCwgeGFyIGFuZCBrZXl1dGlscyBzdXBwb3J0IGlzIHVudGVzdGVkLgorUEFDS0FHRUNPTkZJRyA/Pz0gImRiIGJ6aXAyIHpsaWIgYmVlY3J5cHQgb3BlbnNzbCBsaWJlbGYgcHl0aG9uIgorCitQQUNLQUdFQ09ORklHW2J6aXAyXSA9ICItLXdpdGgtYnppcDIsLS13aXRob3V0LWJ6aXAyLGJ6aXAyLCIKK1BBQ0tBR0VDT05GSUdbeHpdID0gIi0td2l0aC14eiwtLXdpdGhvdXQteHoseHosIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbeGFyXSA9ICItLXdpdGgteGFyLC0td2l0aG91dC14YXIseGFyLCIKKworV0lUSF9QWVRIT04gPSAiIC0td2l0aC1weXRob249JHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1pbmMtZGlyPSR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSBcCisJCS0td2l0aC1weXRob24tbGliLWRpcj0ke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMgXAorCQktLXdpdGhvdXQtcHl0aG9uZW1iZWQiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiJHtXSVRIX1BZVEhPTn0sLS13aXRob3V0LXB5dGhvbixweXRob24sIgorCisjIFBlcmwgbW9kdWxlcyBhcmUgbm90IGJ1aWx0LCBidXQgdGhleSBjb3VsZCBiZSBlbmFibGVkIGZhaXJseSBlYXNpbHkKKyMgdGhlIHBlcmwgbW9kdWxlIGNyZWF0aW9uIGFuZCBpbnN0YWxsYXRpb24gd291bGQgbmVlZCB0byBiZSBwYXRjaGVkLgorIyAoY3VycmVudGx5IGhhcyBob3N0IHBlcmwgY29udGFtaW5hdGlvbiBpc3N1ZXMpCitXSVRIX1BFUkwgPSAiLS13aXRoLXBlcmwgLS13aXRob3V0LXBlcmxlbWJlZCAtLXdpdGhvdXQtcGVybC11cnBtIgorV0lUSE9VVF9QRVJMID0gIi0td2l0aG91dC1wZXJsIC0td2l0aG91dC1wZXJsLXVycG0iCitQQUNLQUdFQ09ORklHW3BlcmxdID0gIiR7V0lUSF9QRVJMfSwke1dJVEhPVVRfUEVSTH0scGVybCwiCisKKyMgVGhlIC0td2l0aC1kYnNxbCB3aWxsIG9ubHkgdGVsbCBSUE0gdG8gY2hlY2sgZm9yIHN1cHBvcnQsIGRiCisjIG1heSBvciBtYXkgbm90IGJlIGJ1aWx0IHcvIHRoZSBkYnNxbCBzdXBwb3J0LgorV0lUSF9EQiA9ICItLXdpdGgtZGIgLS13aXRoLWRic3FsIC0td2l0aG91dC1kYi10b29scy1pbnRlZ3JhdGVkIgorUEFDS0FHRUNPTkZJR1tkYl0gPSAiJHtXSVRIX0RCfSwtLXdpdGhvdXQtZGIsZGIsIgorCitQQUNLQUdFQ09ORklHW3NxbGl0ZV0gPSAiLS13aXRoLXNxbGl0ZSwtLXdpdGhvdXQtc3FsaXRlLHNxbGl0ZTMsIgorCitQQUNLQUdFQ09ORklHW2JlZWNyeXB0XSA9ICItLXdpdGgtYmVlY3J5cHQ9ZXh0ZXJuYWwsLS13aXRob3V0LWJlZWNyeXB0LGJlZWNyeXB0LCIKK1BBQ0tBR0VDT05GSUdbb3BlbnNzbF0gPSAiLS13aXRoLW9wZW5zc2wsLS13aXRob3V0LW9wZW5zc2wsb3BlbnNzbCwiCitQQUNLQUdFQ09ORklHW25zc10gPSAiLS13aXRoLW5zcywtLXdpdGhvdXQtbnNzLG5zcywiCitQQUNLQUdFQ09ORklHW2djcnlwdF0gPSAiLS13aXRoLWdjcnlwdCwtLXdpdGhvdXQtZ2NyeXB0LGdjcnlwdCwiCitQQUNLQUdFQ09ORklHW2tleXV0aWxzXSA9ICItLXdpdGgta2V5dXRpbHMsLS13aXRob3V0LWtleXV0aWxzLGtleXV0aWxzLCIKK1BBQ0tBR0VDT05GSUdbbGliZWxmXSA9ICItLXdpdGgtbGliZWxmLC0td2l0aG91dC1saWJlbGYsZWxmdXRpbHMsIgorCitXSVRIX1NFTElOVVggPSAiLS13aXRoLXNlbGludXggLS13aXRoLXNlcG9sIC0td2l0aC1zZW1hbmFnZSIKK1dJVEhPVVRfU0VMSU5VWCA9ICItLXdpdGhvdXQtc2VsaW51eCAtLXdpdGhvdXQtc2Vwb2wgLS13aXRob3V0LXNlbWFuYWdlIgorUEFDS0FHRUNPTkZJR1tzZWxpbnV4XSA9ICIke1dJVEhfU0VMSU5VWH0sJHtXSVRIT1VUX1NFTElOVVh9LGxpYnNlbGludXgsIgorCitXSVRIX05FT04gPSAiLS13aXRoLW5lb24gLS13aXRoLWxpYnByb3h5IC0td2l0aC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorV0lUSE9VVF9ORU9OID0gIi0td2l0aG91dC1uZW9uIC0td2l0aG91dC1saWJwcm94eSAtLXdpdGhvdXQtZXhwYXQgLS13aXRob3V0LWdzc2FwaSIKK1BBQ0tBR0VDT05GSUdbbmVvbl0gPSAiJHtXSVRIX05FT059LCR7V0lUSE9VVF9ORU9OfSxuZW9uIGV4cGF0LCIKKworUEFDS0FHRUNPTkZJR1tsdWFdID0gIi0td2l0aC1sdWEsLS13aXRob3V0LWx1YSxleHBhdCwiCitQQUNLQUdFQ09ORklHW3RjbF0gPSAiLS13aXRoLXRjbCwtLXdpdGhvdXQtdGNsLHRjbCwiCisKK1BBQ0tBR0VDT05GSUdbYXVnZWFzXSA9ICItLXdpdGgtYXVnZWFzLC0td2l0aG91dC1hdWdlYXMsYXVnZWFzLCIKKworRVhUUkFfT0VDT05GICs9ICItLXZlcmJvc2UgXAorCQktLXN5c2NvbmZkaXI9JHtzeXNjb25mZGlyfSBcCisJCS0td2l0aC1maWxlIFwKKwkJLS13aXRoLXBhdGgtbWFnaWM9JXtfdXNybGlicnBtfS8uLi8uLi9zaGFyZS9taXNjL21hZ2ljLm1nYyBcCisJCS0td2l0aC1zeWNrPWludGVybmFsIFwKKwkJLS13aXRob3V0LXJlYWRsaW5lIFwKKwkJLS13aXRob3V0LWxpYnRhc24xIFwKKwkJLS13aXRob3V0LXBha2Nob2lzIFwKKwkJLS13aXRob3V0LWdudXRscyBcCisJCS0td2l0aC1wY3JlIFwKKwkJLS1lbmFibGUtdXRmOCBcCisJCS0td2l0aC11dWlkIFwKKwkJLS13aXRoLWF0dHIgXAorCQktLXdpdGgtYWNsIFwKKwkJLS13aXRoLXBvcHQ9ZXh0ZXJuYWwgXAorCQktLXdpdGgtcHRocmVhZHMgXAorCQktLXdpdGhvdXQtY3VkZiBcCisJCS0td2l0aG91dC1maWNsIFwKKwkJLS13aXRob3V0LWF0ZXJtIFwKKwkJLS13aXRob3V0LW5peCBcCisJCS0td2l0aG91dC1iYXNoIFwKKwkJLS13aXRob3V0LXJjIFwKKwkJLS13aXRob3V0LWpzIFwKKwkJLS13aXRob3V0LWdwc2VlIFwKKwkJLS13aXRob3V0LXJ1YnkgXAorCQktLXdpdGhvdXQtc3F1aXJyZWwgXAorCQktLXdpdGgtYnVpbGQtZXh0bGliZGVwIFwKKwkJLS13aXRoLWJ1aWxkLW1heGV4dGxpYmRlcCBcCisJCS0td2l0aG91dC12YWxncmluZCBcCisJCS0tZGlzYWJsZS1vcGVubXAgXAorCQktLWVuYWJsZS1idWlsZC1waWMgXAorCQktLWVuYWJsZS1idWlsZC12ZXJzaW9uc2NyaXB0IFwKKwkJLS1lbmFibGUtYnVpbGQtd2FybmluZ3MgXAorCQktLWVuYWJsZS1idWlsZC1kZWJ1ZyBcCisJCS0tZW5hYmxlLW1haW50YWluZXItbW9kZSBcCisJCS0td2l0aC1wYXRoLW1hY3Jvcz0ke3JwbV9tYWNyb3N9IFwKKwkJLS13aXRoLXBhdGgtbGliPSR7bGliZGlyfS9ycG0gXAorCQktLXdpdGgtYnVncmVwb3J0PWh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnIFwKKwkJLS1wcm9ncmFtLXByZWZpeD0gXAorCQlZQUNDPWJ5YWNjIgorCitDRkxBR1NfYXBwZW5kID0gIiAtRFJQTV9WRU5ET1JfV0lORFJJVkVSIC1EUlBNX1ZFTkRPUl9QT0tZIC1EUlBNX1ZFTkRPUl9PRSIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiLWxydCAtbHB0aHJlYWQiCisKK1BBQ0tBR0VTID0gIiR7UE59LWRiZyAke1BOfSAke1BOfS1kb2MgJHtQTn0tbGlicyAke1BOfS1kZXYgJHtQTn0tc3RhdGljZGV2ICR7UE59LWNvbW1vbiAke1BOfS1idWlsZCBweXRob24tcnBtLWRiZyBweXRob24tcnBtLXN0YXRpY2RldiBweXRob24tcnBtLWRldiBweXRob24tcnBtIHBlcmwtbW9kdWxlLXJwbSBwZXJsLW1vZHVsZS1ycG0tZGV2ICR7UE59LWxvY2FsZSIKKworU09MSUJTID0gIjUuNC5zbyIKKworIyBCYXNlZCBvbiAlZmlsZXMgc2VjdGlvbiBpbiB0aGUgcnBtLnNwZWMKKworRklMRVNfJHtQTn0gPSAgIiR7YmluZGlyfS9ycG0gXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQkke2xpYmRpcn0vcnBtL3JwbS4qIFwKKwkJJHtsaWJkaXJ9L3JwbS90Z3BnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MgXAorCQkke2xpYmRpcn0vcnBtL3JwbXBvcHQgXAorCQkke2xpYmRpcn0vcnBtL3JwbTJjcGlvIFwKKwkJJHtsaWJkaXJ9L3JwbS92Y2hlY2sgXAorCQkke2xpYmRpcn0vcnBtL2hlbHBlcnMgXAorCQkke2xpYmRpcn0vcnBtL3FmIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcHVpbmZvLnlhbWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9tdHJlZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWtleSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8gXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi93Z2V0IFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS93ZGogXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYiBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3dkaiBcCisJCSR7YmluZGlyfS9ycG0ucmVhbCBcCisJCSR7YmluZGlyfS9ycG1jb25zdGFudC5yZWFsIFwKKwkJJHtiaW5kaXJ9L3JwbTJjcGlvLnJlYWwgXAorCQkiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3JwbS8uZGVidWcgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi8uZGVidWcgXAorCQkiCisKK0ZJTEVTXyR7UE59LWNvbW1vbiA9ICIke2JpbmRpcn0vcnBtMmNwaW8gXAorCQkke2JpbmRpcn0vZ2VuZGlmZiBcCisJCSR7c3lzY29uZmRpcn0vcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9yZXBhY2thZ2UgXAorCQkiCisKK0ZJTEVTXyR7UE59LWxpYnMgPSAiJHtsaWJkaXJ9L2xpYnJwbS0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGItKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MtKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC0qLnNvIFwKKwkJIgorCitGSUxFU18ke1BOfS1idWlsZCA9ICIke3ByZWZpeH0vc3JjL3JwbSBcCisJCSR7YmluZGlyfS9ycG1idWlsZCBcCisJCSR7YmluZGlyfS9ycG1idWlsZC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9icnAtKiBcCisJCSR7bGliZGlyfS9ycG0vY2hlY2stZmlsZXMgXAorCQkke2xpYmRpcn0vcnBtL2Nyb3NzLWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLWRlYnVnaW5mby5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1sYW5nLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3YucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdmlkZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1yZXEucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxdWlyZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZ2V0cG8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2h0dHAucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9qYXZhZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXByb3ZpZGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcmVxdWlyZXMgXAorCQkke2xpYmRpcn0vcnBtL2V4ZWN1dGFibGVkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWJ0b29sZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vb3NnaWRlcHMucGwgXAorCQkke2xpYmRpcn0vcnBtL3BlcmxkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BlcmwucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9waHAucHJvdiBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGtnY29uZmlnZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0LnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9hYmktY29tcGxpYW5jZS1jaGVja2VyLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1hdXRvdGVzdC5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Nocm9vdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2NwIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGJzcWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9maW5kIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vaW5zdGFsbC1zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ta2luc3RhbGxkaXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhYyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3NxbGl0ZTMgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2NtYWtlIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9qYXZhIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9saWJ0b29sIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tYW5kcml2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbW9ubyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGVybCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGhwIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wa2djb25maWcgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3B5dGhvbiBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcnVieSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvc2VsaW51eCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvdGNsIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MucnBtYnVpbGQgXAorCQkke2xpYmRpcn0vcnBtL3VfcGtnLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzMi5zaCBcCisJCSR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkJIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1idWlsZCA9ICJmaWxlIGJhc2ggcGVybCIKKworUkRFUEVORFNfcHl0aG9uLXJwbSA9ICIke1BOfSIKKworRklMRVNfcHl0aG9uLXJwbS1kYmcgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vLmRlYnVnL18qIgorRklMRVNfcHl0aG9uLXJwbS1kZXYgPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0vKi5sYSIKK0ZJTEVTX3B5dGhvbi1ycG0tc3RhdGljZGV2ID0gIiR7bGliZGlyfS9weXRob24qL3NpdGUtcGFja2FnZXMvcnBtLyouYSIKK0ZJTEVTX3B5dGhvbi1ycG0gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy9ycG0iCisKK0ZJTEVTX3BlcmwtbW9kdWxlLXJwbSA9ICIke2xpYmRpcn0vcGVybC8qLyogXAorCQkiCisKK0ZJTEVTX3BlcmwtbW9kdWxlLXJwbS1kZXYgPSAiJHtwcmVmaXh9L3NoYXJlL21hbi9tYW4zL1JQTSogXAorCQkiCisKK1JERVBFTkRTXyR7UE59LWRldiArPSAiYmFzaCIKKworRklMRVNfJHtQTn0tZGV2ID0gIiR7aW5jbHVkZWRpcn0vcnBtIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5sYSBcCisJCSR7bGliZGlyfS9saWJycG0uc28gXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQubGEgXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGIubGEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuc28gXAorCQkke2xpYmRpcn0vbGlicnBtaW8ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtaW8uc28gXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5sYSBcCisJCSR7bGliZGlyfS9saWJycG1taXNjLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLnNvIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmxhIFwKKwkJJHtsaWJkaXJ9L3BrZ2NvbmZpZy9ycG0ucGMgXAorCQkke2xpYmRpcn0vcnBtL3JwbWRiX2xvYWRjdnQgXAorCQkiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIgXAorCQkke2xpYmRpcn0vbGlicnBtLmEgXAorCQkke2xpYmRpcn0vbGlicnBtY29uc3RhbnQuYSBcCisJCSR7bGliZGlyfS9saWJycG1kYi5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWJ1aWxkLmEgXAorCQkke2xpYmRpcn0vcnBtL2xpYi9saWJsdWEuYSBcCisJCSIKKworZG9fY29uZmlndXJlKCkgeworCSMgRGlzYWJsZSB0ZXN0cyEKKwllY2hvICJhbGw6IiA+ICR7U30vdGVzdHMvTWFrZWZpbGUuYW0KKwlzZWQgLWUgJ3MvQF9fTUtESVJfUEAvJXtfX21rZGlyfSAtcC8nIC1pICR7U30vbWFjcm9zL21hY3Jvcy5pbgorCisJKCBjZCAke1N9OyAke1N9L2F1dG9nZW4uc2ggKQorCisJIyBOQVNUWSBoYWNrIHRvIG1ha2Ugc3VyZSBjb25maWd1cmUgZmlsZXMgdGhlIHJpZ2h0IHBrZy1jb25maWcgZmlsZS4uLgorCXNlZCAtZSAncy9wa2ctY29uZmlnIC0tZXhpc3RzIHV1aWQvcGtnLWNvbmZpZyAtLWV4aXN0cyBvc3NwLXV1aWQvZycgXAorCSAgICAtZSAncy9wa2ctY29uZmlnIHV1aWQvcGtnLWNvbmZpZyBvc3NwLXV1aWQvZycgLWkgJHtTfS9jb25maWd1cmUKKworCSggY2QgJHtTfS9zeWNrIDsgc2V0ICtlIDsgcm0gLS0gLWwqIDsgbWFrZSBkaXN0Y2xlYW4gKSB8fCA6CisKKwlleHBvcnQgdmFycHJlZml4PSR7bG9jYWxzdGF0ZWRpcn0KKwlvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAtZSAncywlX19zY3JpcHRsZXRfcmVxdWlyZXMsIyUlX19zY3JpcHRsZXRfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisJc2VkIC1pIC1lICdzLCVfX3BlcmxfcHJvdmlkZXMsIyUlX19wZXJsX3Byb3ZpZGVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQvKgorCXNlZCAtaSAtZSAncywlX19wZXJsX3JlcXVpcmVzLCMlJV9fcGVybF9yZXF1aXJlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9yZXBhY2thZ2VfYWxsX2VyYXN1cmVzW15fXS4qLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlcyAwLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncyxeIyVfb3BlbmFsbF9iZWZvcmVfY2hyb290LiosJV9vcGVuYWxsX2JlZm9yZV9jaHJvb3RcdDEsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisKKwkjIEVuYWJsZSBEZWJpYW4gc3R5bGUgYXJiaXRyYXJ5IHRhZ3MuLi4KKwlzZWQgLWkgLWUgJ3MsJV9hcmJpdHJhcnlfdGFnc1teX10uKiwlX2FyYml0cmFyeV90YWdzICV7X2FyYml0cmFyeV90YWdzX2RlYmlhbn0sJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zCisKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9weXRob25kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25kZXBzLnNoCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcGVyZmlsZV9ycG1kZXBzLnNoICR7RH0vJHtsaWJkaXJ9L3JwbS9wZXJmaWxlX3JwbWRlcHMuc2gKKworCSMgUmVtb3ZlIHVucGFja2FnZWQgZmlsZXMgKGJhc2VkIG9uIGxpc3QgaW4gcnBtLnNwZWMpCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3tTcGVjZmlsZS5wbSxjcGFuZmx1dGUsY3BhbmZsdXRlMixycG1kaWZmLHJwbWRpZmYuY2dpLHNxbC5wcm92LHNxbC5yZXEsdGNsLnJlcSx0cnBtfQorCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuOC9ycG1jYWNoZS44KgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtZ3JhcGguOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS8qL21hbjgvcnBtZ3JhcGguOCoKKwlybSAtcmYgJHtEfS8ke21hbmRpcn0ve2ZyLGtvfQorCisJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L3BvcHQuaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnBvcHQuKgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9wb3B0LnBjCisJcm0gLWYgJHtEfS8ke2RhdGFkaXJ9L2xvY2FsZS8qL0xDX01FU1NBR0VTL3BvcHQubW8KKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW4zL3BvcHQuMworCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS94YXIuMSoKKwlybSAtZiAke0R9LyR7YmluZGlyfS94YXIKKwlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L3hhcgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L2xpYnhhcioKKworCXJtIC1mICR7RH0vJHtiaW5kaXJ9L2x6KgorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VubHptYQorCXJtIC1mICR7RH0vJHtiaW5kaXJ9L3VueHoKKwlybSAtZiAke0R9LyR7YmluZGlyfS94eioKKwlybSAtcmYgJHtEfS8ke2luY2x1ZGVkaXJ9L2x6bWEqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMS9seiouMQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy9saWJsem1hKgorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzLyoue2EsbGF9CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcHl0aG9uJXt3aXRoX3B5dGhvbl92ZXJzaW9ufS9zaXRlLXBhY2thZ2VzL3JwbS8qLnthLGxhfQorCisJI2ZpbmQgJHtEfS8ke2xpYmRpcn0vcGVybDUgLXR5cGUgZiAtYSBcKCAtbmFtZSBwZXJsbG9jYWwucG9kIC1vIC1uYW1lIC5wYWNrbGlzdCBcCisJIwktbyBcKCAtbmFtZSAnKi5icycgLWEgLWVtcHR5IFwpIFwpIC1leGVjIHJtIC1mIHt9ICc7JworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGQgLWRlcHRoIC1leGVjIHJtZGlyIHt9IDI+L2Rldi9udWxsICc7JworCisJIyBXZSBkb24ndCB3YW50IHRoZSBkZWZhdWx0IG1hY3JvIHNldAorCXJtIC1yZiAke0R9LyR7bGliZGlyfS9ycG0ve2lbMzQ1Nl04NiosYXRobG9uKixwZW50aXVtKix4ODZfNjQqLGFscGhhKixzcGFyYyosaWE2NCoscHBjKixzMzkwKixhcm12WzM0XVtsYl0qLGFybXZbMzQ1XSosbWlwcyosbm9hcmNoKn0KKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9kYmNvbnZlcnQuc2gKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9saWJzcWxkYi4qCisKKwkjIFdlIGRvbid0IHdhbnQsIG5vciBuZWVkIHRoZSBNYW5kcml2YSBtdWx0aWFyY2ggaXRlbXMKKwlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2gKKwlybSAtZiAke0R9LyR7YmluZGlyfS9tdWx0aWFyY2gtcGxhdGZvcm0KKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vY2hlY2stbXVsdGlhcmNoLWZpbGVzCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21rbXVsdGlhcmNoCisJcm0gLWYgJHtEfS8ke2luY2x1ZGVkaXJ9L211bHRpYXJjaC1kaXNwYXRjaC5oCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZ3N0cmVhbWVyLnNoCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dlbV9oZWxwZXIucmIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vcnVieWdlbXMucmIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0va21vZC1kZXBzLnNoCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3B5dGhvbmVnZ3MucHkKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zLmQva2VybmVsCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2dzdHJlYW1lcgorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vbWdvCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kYmNvbnZlcnQKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3BvbTJzcGVjCisKKwlybSAtcmYgJHtEfS92YXIvbGliL3dkaiAke0R9L3Zhci9jYWNoZS93ZGoKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL2FwaS1zYW5pdHktY2hlY2tlci5wbAorCit9CisKK2FkZF9uYXRpdmVfd3JhcHBlcigpIHsKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtMmNwaW8gXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1idWlsZCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbWNvbnN0YW50IFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKwlmb3IgcnBtX2JpbmFyeSBpbiAke0R9LyR7bGliZGlyfS9ycG0vYmluL3JwbSogJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9kZWJ1Z2VkaXQ7IGRvCisgICAgICAgIAljcmVhdGVfd3JhcHBlciAkcnBtX2JpbmFyeSBcCisJCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCWRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisJYWRkX25hdGl2ZV93cmFwcGVyCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ycG0vcnBtXzUuNC4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjlhNGJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1fNS40LjE0LmJiCkBAIC0wLDAgKzEsNTE2IEBACitTVU1NQVJZID0gIlRoZSBSUE0gcGFja2FnZSBtYW5hZ2VtZW50IHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIChSUE0pIGlzIGEgcG93ZXJmdWwgY29tbWFuZCBsaW5lIGRyaXZlbiBcCitwYWNrYWdlIG1hbmFnZW1lbnQgc3lzdGVtIGNhcGFibGUgb2YgaW5zdGFsbGluZywgdW5pbnN0YWxsaW5nLCBcCit2ZXJpZnlpbmcsIHF1ZXJ5aW5nLCBhbmQgdXBkYXRpbmcgc29mdHdhcmUgcGFja2FnZXMuIEVhY2ggc29mdHdhcmUgXAorcGFja2FnZSBjb25zaXN0cyBvZiBhbiBhcmNoaXZlIG9mIGZpbGVzIGFsb25nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgXAordGhlIHBhY2thZ2UgbGlrZSBpdHMgdmVyc2lvbiwgYSBkZXNjcmlwdGlvbiwgZXRjLiIKKworUkVDSVBFX05PX1VQREFURV9SRUFTT04gPSAiNS40LjE1IGhhcyBhIHBhY2thZ2UgZGF0YWJhc2UgaXNzdWU6IGh0dHA6Ly9saXN0cy5vcGVuZW1iZWRkZWQub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDE1LUF1Z3VzdC8xMDkxODcuaHRtbCIKKworU1VNTUFSWV8ke1BOfS1saWJzID0gIkxpYnJhcmllcyBmb3IgbWFuaXB1bGF0aW5nIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWxpYnMgPSAiVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSBSUE0gc2hhcmVkIGxpYnJhcmllcy4iCisKK1NVTU1BUllfJHtQTn0tZGV2ID0gIkRldmVsb3BtZW50IGZpbGVzIGZvciBtYW5pcHVsYXRpbmcgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fJHtQTn0tZGV2ID0gIlRoaXMgcGFja2FnZSBjb250YWlucyB0aGUgUlBNIEMgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzLiBUaGVzZSBcCitkZXZlbG9wbWVudCBmaWxlcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHdyaXRpbmcgcHJvZ3JhbXMgdGhhdCBcCittYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyBhbmQgZGF0YWJhc2VzLiBUaGVzZSBmaWxlcyBhcmUgaW50ZW5kZWQgdG8gXAorc2ltcGxpZnkgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgZ3JhcGhpY2FsIHBhY2thZ2UgbWFuYWdlcnMgb3IgYW55IFwKK290aGVyIHRvb2xzIHRoYXQgbmVlZCBhbiBpbnRpbWF0ZSBrbm93bGVkZ2Ugb2YgUlBNIHBhY2thZ2VzIGluIG9yZGVyIFwKK3RvIGZ1bmN0aW9uLiIKKworU1VNTUFSWV8ke1BOfS1jb21tb24gPSAiQ29tbW9uIFJQTSBwYXRocywgc2NyaXB0cywgZG9jdW1lbnRhdGlvbiBhbmQgY29uZmlndXJhdGlvbiIKK0RFU0NSSVBUSU9OXyR7UE59LWNvbW1vbiA9ICJUaGUgcnBtLWNvbW1vbiBwYWNrYWdlIGNvbnRhaW5zIHBhdGhzLCBzY3JpcHRzLCBkb2N1bWVudGF0aW9uIFwKK2FuZCBjb25maWd1cmF0aW9uIGNvbW1vbiBiZXR3ZWVuIFJQTSBQYWNrYWdlIE1hbmFnZXIuIgorCitTVU1NQVJZXyR7UE59LWJ1aWxkID0gIlNjcmlwdHMgYW5kIGV4ZWN1dGFibGUgcHJvZ3JhbXMgdXNlZCB0byBidWlsZCBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OXyR7UE59LWJ1aWxkID0gIlRoZSBycG0tYnVpbGQgcGFja2FnZWMgb250YWlucyB0aGUgc2NyaXB0cyBhbmQgZXhlY3V0YWJsZSBwcm9ncmFtcyBcCit0aGF0IGFyZSB1c2VkIHRvIGJ1aWxkIHBhY2thZ2VzIHVzaW5nIHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyLiIKKworU1VNTUFSWV9weXRob24tcnBtID0gIlB5dGhvbiBiaW5kaW5ncyBmb3IgYXBwcyB3aGljaCB3aWxsIG1hbnVwdWxhdGUgUlBNIHBhY2thZ2VzIgorREVTQ1JJUFRJT05fcHl0aG9uLXJwbSA9ICJUaGUgcnBtLXB5dGhvbiBwYWNrYWdlIGNvbnRhaW5zIGEgbW9kdWxlIHRoYXQgcGVybWl0cyBhcHBsaWNhdGlvbnMgXAord3JpdHRlbiBpbiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIHVzZSB0aGUgaW50ZXJmYWNlIFwKK3N1cHBsaWVkIGJ5IHRoZSBSUE0gUGFja2FnZSBNYW5hZ2VyIGxpYnJhcmllcy4iCisKK1NVTU1BUllfcGVybC1tb2R1bGUtcnBtID0gIlBlcmwgYmluZGluZ3MgZm9yIGFwcHMgd2hpY2ggd2lsbCBtYW5pcHVsYXRlIFJQTSBwYWNrYWdlcyIKK0RFU0NSSVBUSU9OX3BlcmwtbW9kdWxlcy1ycG0gPSAiVGhlIHBlcmwtbW9kdWxlcy1ycG0gcGFja2FnZSBjb250YWlucyBhIG1vZHVsZSB0aGF0IHBlcm1pdHMgYXBwbGljYXRpb25zIFwKK3dyaXR0ZW4gaW4gdGhlIFBlcmwgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gdXNlIHRoZSBpbnRlcmZhY2UgXAorc3VwcGxpZWQgYnkgdGhlIFJQTSBQYWNrYWdlIE1hbmFnZXIgbGlicmFyaWVzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3JwbTUub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEiCisKK0RFUEVORFMgPSAibGlicGNyZSBhdHRyIGFjbCBwb3B0IG9zc3AtdXVpZCBmaWxlIGJ5YWNjLW5hdGl2ZSIKKworIyBycG0yY3BpbyBpcyBhIHNoZWxsIHNjcmlwdCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgcnBtIHNyYy5ycG0uICBJdCBpcyBuZWVkZWQKKyMgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgZGlzdHJpYnV0aW9uIFNSUE0gaW50byBhIGZvcm1hdCB3ZSBjYW4gZXh0cmFjdC4uLgorU1JDX1VSSSA9ICJodHRwOi8vd3d3LnJwbTUub3JnL2ZpbGVzL3JwbS9ycG0tNS40L3JwbS01LjQuMTQtMC4yMDEzMTAyNC5zcmMucnBtO2V4dHJhY3Q9cnBtLTUuNC4xNC50YXIuZ3ogXAorCSAgIGZpbGU6Ly9ycG0tbG9nLWF1dG8tcm0ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGItcmVkdWNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkgICBmaWxlOi8vcnBtLWF1dG9nZW4ucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbGlic3FsLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL2hlYWRlci1pbmNsdWRlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1zaG93cmMucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tdG9vbHMtbXRyZWUtTERGTEFHUy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1maWxlY2xhc3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tY2Fub25hcmNoLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLWxvb3Btc2cucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tc2NyaXB0bGV0ZXhlY2hlbHBlci5wYXRjaCBcCisJICAgZmlsZTovL3B5dGhvbmRlcHMuc2ggXAorCSAgIGZpbGU6Ly9ycG1kZXBzLW9lY29yZS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1yZXNvbHZlZGVwLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW5vLXBlcmwtdXJwbS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1tYWNyb3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tbHVhLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW9zc3AtdXVpZC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wYWNrYWdlb3JpZ2luLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXBrZ2NvbmZpZ2RlcHMucGF0Y2ggXAorCSAgIGZpbGU6Ly91Y2xpYmMtc3VwcG9ydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbWF0Y2gucGF0Y2ggXAorCSAgIGZpbGU6Ly9mc3RhY2stcHJvdGVjdG9yLWNvbmZpZ3VyZS1jaGVjay5wYXRjaCBcCisJICAgZmlsZTovL2RiY29udmVydC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS11dWlkLWluY2x1ZGUucGF0Y2ggXAorCSAgIGZpbGU6Ly9tYWtlZmlsZS1hbS1leGVjLWhvb2sucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tZGJfYnVmZmVyX3NtYWxsLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXB5LWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9weXRob24tcnBtLXJwbXNlbnNlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLXJlbG9jLW1hY3Jvcy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybTIucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVtb3ZlLXN5a2NwYXJzZS1kZWNsLnBhdGNoIFwKKwkgICBmaWxlOi8vZGVidWdlZGl0LXNlZ3YucGF0Y2ggXAorCSAgIGZpbGU6Ly9kZWJ1Z2VkaXQtdmFsaWQtZmlsZS10by1maXgtc2VnbWVudC1mYXVsdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1wbGF0Zm9ybS1maWxlLWZpeC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sc2ItY29tcGF0aWJpbGl0eS5wYXRjaCBcCisJICAgZmlsZTovL3JwbS10YWctZ2VuZXJhdGUtZW5kaWFuLWNvbnZlcnNpb24tZml4LnBhdGNoIFwKKwkgICBmaWxlOi8vdmVyaWZ5LWZpeC1icm9rZW4tbG9naWMtZm9yLWdob3N0LWF2b2lkYW5jZS1NYXJrLUhhdC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1oYXJkbGluay1zZWdmYXVsdC1maXgucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcGF5bG9hZC11c2UtaGFzaGVkLWlub2RlLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWZpeC1sb2dpby1jcC5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1kYjUtb3ItZGI2LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWRpc2FibGUtV25vLW92ZXJyaWRlLWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG1xdl9jY19iX2dvbmUucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tcmVhbHBhdGgucGF0Y2ggXAorCSAgIGZpbGU6Ly8wMDAxLXVzaW5nLXBvcHRQYXJzZUFyZ3ZTdHJpbmctdG8tcGFyc2UtdGhlLV9ncGdfY2hlY2tfcGEucGF0Y2ggXAorCSAgIGZpbGU6Ly9uby1sZGZsYWdzLWluLXBrZ2NvbmZpZy5wYXRjaCBcCisJICAgZmlsZTovL3JwbS1sdWEtZml4LXByaW50LnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLWNoZWNrLXJvb3RwYXRoLXJlYXNvbmFibGVuZXNzLnBhdGNoIFwKKwkgICBmaWxlOi8vcnBtLW1hY3Jvcy5pbi1kaXNhYmxlLWV4dGVybmFsLWtleS1zZXJ2ZXIucGF0Y2ggXAorCSAgIGZpbGU6Ly9ycG0tb3BlbmRiLWJlZm9yZS12ZXJpZnlzY3JpcHQtdG8tYXZvaWQtbnVsbC1wb2ludC5wYXRjaCBcCisJICAiCisKKyMgVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUgcGxhdGZvcm0gc2NvcmUgZGVidWdnaW5nCisjIFRoaXMgaXMgdXNlZnVsIHdoZW4gaWRlbnRpZnlpbmcgaXNzdWVzIHdpdGggU21hcnQgYmVpbmcgdW5hYmxlCisjIHRvIHByb2Nlc3MgY2VydGFpbiBwYWNrYWdlIGZlZWRzLgorI1NSQ19VUkkgKz0gImZpbGU6Ly9ycG0tZGVidWctcGxhdGZvcm0ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNTA5M2QzOTlhMGI1ZDEzNDJkMjQ5MDBhOTFiMzQ3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2NzZlM2FiNDFmNzJlM2I1MDRlMDQxMDljZmI1NjVhMzAwNzQyZjU2YTdkYTA4NGYyMDIwMTNiMzBlZWFlNDY3IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK2FjcGF0aHMgPSAiLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWwgLUkgJHtTfS9kYi9kaXN0L2FjbG9jYWxfamF2YSIKKworIyBTcGVjaWZ5IHRoZSBkZWZhdWx0IHJwbSBtYWNyb3MgaW4gdGVybXMgb2YgYWRqdXN0YWJsZSB2YXJpYWJsZXMKK3JwbV9tYWNyb3MgPSAiJXtfdXNybGlicnBtfS9tYWNyb3M6JXtfdXNybGlicnBtfS8ke0RJU1RST30vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99LyV7X3RhcmdldH0vbWFjcm9zOiV7X2V0Y3JwbX0vbWFjcm9zLio6JXtfZXRjcnBtfS9tYWNyb3M6JXtfZXRjcnBtfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKK3JwbV9tYWNyb3NfY2xhc3MtbmF0aXZlc2RrID0gIiV7X3VzcmxpYnJwbX0vbWFjcm9zOiV7X3VzcmxpYnJwbX0vJHtESVNUUk99L21hY3Jvczole191c3JsaWJycG19LyR7RElTVFJPfS8le190YXJnZXR9L21hY3Jvczp+Ly5vZXJwbW1hY3JvcyIKKworIyBzcWxpdGUgbHVhIHRjbCBhdWdlYXMgbnNzIGdjcnlwdCBuZW9uIHh6IHhhciBrZXl1dGlscyBwZXJsIHNlbGludXgKKworIyBOb3RlOiBwZXJsIGFuZCBzcWxpdGUgdy9vIGRiIHNwZWNpZmllZCBkb2VzIG5vdCBjdXJyZW50bHkgd29yay4KKyMgICAgICAgdGNsLCBhdWdlYXMsIG5zcywgZ2NyeXB0LCB4YXIgYW5kIGtleXV0aWxzIHN1cHBvcnQgaXMgdW50ZXN0ZWQuCitQQUNLQUdFQ09ORklHID8/PSAiZGIgYnppcDIgemxpYiBiZWVjcnlwdCBvcGVuc3NsIGxpYmVsZiBweXRob24iCisKK1BBQ0tBR0VDT05GSUdbYnppcDJdID0gIi0td2l0aC1iemlwMiwtLXdpdGhvdXQtYnppcDIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLXh6LC0td2l0aG91dC14eix4eiwiCitQQUNLQUdFQ09ORklHW3psaWJdID0gIi0td2l0aC16bGliLC0td2l0aG91dC16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1t4YXJdID0gIi0td2l0aC14YXIsLS13aXRob3V0LXhhcix4YXIsIgorCitXSVRIX1BZVEhPTiA9ICIgLS13aXRoLXB5dGhvbj0ke1BZVEhPTl9CQVNFVkVSU0lPTn0gXAorCQktLXdpdGgtcHl0aG9uLWluYy1kaXI9JHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IFwKKwkJLS13aXRoLXB5dGhvbi1saWItZGlyPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcyBcCisJCS0td2l0aG91dC1weXRob25lbWJlZCIKK1BBQ0tBR0VDT05GSUdbcHl0aG9uXSA9ICIke1dJVEhfUFlUSE9OfSwtLXdpdGhvdXQtcHl0aG9uLHB5dGhvbiwiCisKKyMgUGVybCBtb2R1bGVzIGFyZSBub3QgYnVpbHQsIGJ1dCB0aGV5IGNvdWxkIGJlIGVuYWJsZWQgZmFpcmx5IGVhc2lseQorIyB0aGUgcGVybCBtb2R1bGUgY3JlYXRpb24gYW5kIGluc3RhbGxhdGlvbiB3b3VsZCBuZWVkIHRvIGJlIHBhdGNoZWQuCisjIChjdXJyZW50bHkgaGFzIGhvc3QgcGVybCBjb250YW1pbmF0aW9uIGlzc3VlcykKK1dJVEhfUEVSTCA9ICItLXdpdGgtcGVybCAtLXdpdGhvdXQtcGVybGVtYmVkIC0td2l0aG91dC1wZXJsLXVycG0iCitXSVRIT1VUX1BFUkwgPSAiLS13aXRob3V0LXBlcmwgLS13aXRob3V0LXBlcmwtdXJwbSIKK1BBQ0tBR0VDT05GSUdbcGVybF0gPSAiJHtXSVRIX1BFUkx9LCR7V0lUSE9VVF9QRVJMfSxwZXJsLCIKKworIyBUaGUgLS13aXRoLWRic3FsIHdpbGwgb25seSB0ZWxsIFJQTSB0byBjaGVjayBmb3Igc3VwcG9ydCwgZGIKKyMgbWF5IG9yIG1heSBub3QgYmUgYnVpbHQgdy8gdGhlIGRic3FsIHN1cHBvcnQuCitXSVRIX0RCID0gIi0td2l0aC1kYiAtLXdpdGgtZGJzcWwgLS13aXRob3V0LWRiLXRvb2xzLWludGVncmF0ZWQiCitQQUNLQUdFQ09ORklHW2RiXSA9ICIke1dJVEhfREJ9LC0td2l0aG91dC1kYixkYiwiCisKK1BBQ0tBR0VDT05GSUdbc3FsaXRlXSA9ICItLXdpdGgtc3FsaXRlLC0td2l0aG91dC1zcWxpdGUsc3FsaXRlMywiCisKK1BBQ0tBR0VDT05GSUdbYmVlY3J5cHRdID0gIi0td2l0aC1iZWVjcnlwdD1leHRlcm5hbCwtLXdpdGhvdXQtYmVlY3J5cHQsYmVlY3J5cHQsIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbnNzXSA9ICItLXdpdGgtbnNzLC0td2l0aG91dC1uc3MsbnNzLCIKK1BBQ0tBR0VDT05GSUdbZ2NyeXB0XSA9ICItLXdpdGgtZ2NyeXB0LC0td2l0aG91dC1nY3J5cHQsZ2NyeXB0LCIKK1BBQ0tBR0VDT05GSUdba2V5dXRpbHNdID0gIi0td2l0aC1rZXl1dGlscywtLXdpdGhvdXQta2V5dXRpbHMsa2V5dXRpbHMsIgorUEFDS0FHRUNPTkZJR1tsaWJlbGZdID0gIi0td2l0aC1saWJlbGYsLS13aXRob3V0LWxpYmVsZixlbGZ1dGlscywiCisKK1dJVEhfU0VMSU5VWCA9ICItLXdpdGgtc2VsaW51eCAtLXdpdGgtc2Vwb2wgLS13aXRoLXNlbWFuYWdlIgorV0lUSE9VVF9TRUxJTlVYID0gIi0td2l0aG91dC1zZWxpbnV4IC0td2l0aG91dC1zZXBvbCAtLXdpdGhvdXQtc2VtYW5hZ2UiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiR7V0lUSF9TRUxJTlVYfSwke1dJVEhPVVRfU0VMSU5VWH0sbGlic2VsaW51eCwiCisKK1dJVEhfTkVPTiA9ICItLXdpdGgtbmVvbiAtLXdpdGgtbGlicHJveHkgLS13aXRoLWV4cGF0IC0td2l0aG91dC1nc3NhcGkiCitXSVRIT1VUX05FT04gPSAiLS13aXRob3V0LW5lb24gLS13aXRob3V0LWxpYnByb3h5IC0td2l0aG91dC1leHBhdCAtLXdpdGhvdXQtZ3NzYXBpIgorUEFDS0FHRUNPTkZJR1tuZW9uXSA9ICIke1dJVEhfTkVPTn0sJHtXSVRIT1VUX05FT059LG5lb24gZXhwYXQsIgorCitQQUNLQUdFQ09ORklHW2x1YV0gPSAiLS13aXRoLWx1YSwtLXdpdGhvdXQtbHVhLGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbdGNsXSA9ICItLXdpdGgtdGNsLC0td2l0aG91dC10Y2wsdGNsLCIKKworUEFDS0FHRUNPTkZJR1thdWdlYXNdID0gIi0td2l0aC1hdWdlYXMsLS13aXRob3V0LWF1Z2VhcyxhdWdlYXMsIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tdmVyYm9zZSBcCisJCS0tc3lzY29uZmRpcj0ke3N5c2NvbmZkaXJ9IFwKKwkJLS13aXRoLWZpbGUgXAorCQktLXdpdGgtcGF0aC1tYWdpYz0le191c3JsaWJycG19Ly4uLy4uL3NoYXJlL21pc2MvbWFnaWMubWdjIFwKKwkJLS13aXRoLXN5Y2s9aW50ZXJuYWwgXAorCQktLXdpdGhvdXQtcmVhZGxpbmUgXAorCQktLXdpdGhvdXQtbGlidGFzbjEgXAorCQktLXdpdGhvdXQtcGFrY2hvaXMgXAorCQktLXdpdGhvdXQtZ251dGxzIFwKKwkJLS13aXRoLXBjcmUgXAorCQktLWVuYWJsZS11dGY4IFwKKwkJLS13aXRoLXV1aWQgXAorCQktLXdpdGgtYXR0ciBcCisJCS0td2l0aC1hY2wgXAorCQktLXdpdGgtcG9wdD1leHRlcm5hbCBcCisJCS0td2l0aC1wdGhyZWFkcyBcCisJCS0td2l0aG91dC1jdWRmIFwKKwkJLS13aXRob3V0LWZpY2wgXAorCQktLXdpdGhvdXQtYXRlcm0gXAorCQktLXdpdGhvdXQtbml4IFwKKwkJLS13aXRob3V0LWJhc2ggXAorCQktLXdpdGhvdXQtcmMgXAorCQktLXdpdGhvdXQtanMgXAorCQktLXdpdGhvdXQtZ3BzZWUgXAorCQktLXdpdGhvdXQtcnVieSBcCisJCS0td2l0aG91dC1zcXVpcnJlbCBcCisJCS0td2l0aC1idWlsZC1leHRsaWJkZXAgXAorCQktLXdpdGgtYnVpbGQtbWF4ZXh0bGliZGVwIFwKKwkJLS13aXRob3V0LXZhbGdyaW5kIFwKKwkJLS1kaXNhYmxlLW9wZW5tcCBcCisJCS0tZW5hYmxlLWJ1aWxkLXBpYyBcCisJCS0tZW5hYmxlLWJ1aWxkLXZlcnNpb25zY3JpcHQgXAorCQktLWVuYWJsZS1idWlsZC13YXJuaW5ncyBcCisJCS0tZW5hYmxlLWJ1aWxkLWRlYnVnIFwKKwkJLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIFwKKwkJLS13aXRoLXBhdGgtbWFjcm9zPSR7cnBtX21hY3Jvc30gXAorCQktLXdpdGgtcGF0aC1saWI9JHtsaWJkaXJ9L3JwbSBcCisJCS0td2l0aC1idWdyZXBvcnQ9aHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcgXAorCQktLXByb2dyYW0tcHJlZml4PSBcCisJCVlBQ0M9YnlhY2MiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EUlBNX1ZFTkRPUl9XSU5EUklWRVIgLURSUE1fVkVORE9SX1BPS1kgLURSUE1fVkVORE9SX09FIgorCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICItbHJ0IC1scHRocmVhZCIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7UE59ICR7UE59LWRvYyAke1BOfS1saWJzICR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYgJHtQTn0tY29tbW9uICR7UE59LWJ1aWxkIHB5dGhvbi1ycG0gcGVybC1tb2R1bGUtcnBtICR7UE59LWxvY2FsZSIKKworU09MSUJTID0gIjUuNC5zbyIKKworIyBCYXNlZCBvbiAlZmlsZXMgc2VjdGlvbiBpbiB0aGUgcnBtLnNwZWMKKworRklMRVNfJHtQTn0gPSAgIiR7YmluZGlyfS9ycG0gXAorCQkke2JpbmRpcn0vcnBtY29uc3RhbnQgXAorCQkke2xpYmRpcn0vcnBtL3JwbS4qIFwKKwkJJHtsaWJkaXJ9L3JwbS90Z3BnIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MgXAorCQkke2xpYmRpcn0vcnBtL3JwbXBvcHQgXAorCQkke2xpYmRpcn0vcnBtL3JwbTJjcGlvIFwKKwkJJHtsaWJkaXJ9L3JwbS92Y2hlY2sgXAorCQkke2xpYmRpcn0vcnBtL2hlbHBlcnMgXAorCQkke2xpYmRpcn0vcnBtL3FmIFwKKwkJJHtsaWJkaXJ9L3JwbS9jcHVpbmZvLnlhbWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9tdHJlZSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbWtleSBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXJlcG8gXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1yZXBvLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1zcGVjZHVtcCBcCisJCSR7bGliZGlyfS9ycG0vYmluL3JwbXNwZWNkdW1wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi93Z2V0IFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9jYWNoZS93ZGogXAorCQkke2xvY2Fsc3RhdGVkaXJ9L2xpYiBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3JwbSBcCisJCSR7bG9jYWxzdGF0ZWRpcn0vbGliL3dkaiBcCisJCSR7YmluZGlyfS9ycG0ucmVhbCBcCisJCSR7YmluZGlyfS9ycG1jb25zdGFudC5yZWFsIFwKKwkJJHtiaW5kaXJ9L3JwbTJjcGlvLnJlYWwgXAorCQkiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3JwbS8uZGVidWcgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi8uZGVidWcgXAorCQkke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8uZGVidWcvXyogXAorCQkiCisKK0ZJTEVTXyR7UE59LWNvbW1vbiA9ICIke2JpbmRpcn0vcnBtMmNwaW8gXAorCQkke2JpbmRpcn0vZ2VuZGlmZiBcCisJCSR7c3lzY29uZmRpcn0vcnBtIFwKKwkJJHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9yZXBhY2thZ2UgXAorCQkiCisKK0ZJTEVTXyR7UE59LWxpYnMgPSAiJHtsaWJkaXJ9L2xpYnJwbS0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LSouc28gXAorCQkke2xpYmRpcn0vbGlicnBtZGItKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1pby0qLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MtKi5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC0qLnNvIFwKKwkJIgorCitGSUxFU18ke1BOfS1idWlsZCA9ICIke3ByZWZpeH0vc3JjL3JwbSBcCisJCSR7YmluZGlyfS9ycG1idWlsZCBcCisJCSR7YmluZGlyfS9ycG1idWlsZC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9icnAtKiBcCisJCSR7bGliZGlyfS9ycG0vY2hlY2stZmlsZXMgXAorCQkke2xpYmRpcn0vcnBtL2Nyb3NzLWJ1aWxkIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLWRlYnVnaW5mby5zaCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1sYW5nLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9maW5kLXByb3YucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcHJvdmlkZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZmluZC1yZXEucGwgXAorCQkke2xpYmRpcn0vcnBtL2ZpbmQtcmVxdWlyZXMucGVybCBcCisJCSR7bGliZGlyfS9ycG0vZ2V0cG8uc2ggXAorCQkke2xpYmRpcn0vcnBtL2h0dHAucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9qYXZhZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vbW9uby1maW5kLXByb3ZpZGVzIFwKKwkJJHtsaWJkaXJ9L3JwbS9tb25vLWZpbmQtcmVxdWlyZXMgXAorCQkke2xpYmRpcn0vcnBtL2V4ZWN1dGFibGVkZXBzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWJ0b29sZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vb3NnaWRlcHMucGwgXAorCQkke2xpYmRpcn0vcnBtL3BlcmxkZXBzLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9wZXJsLnByb3YgXAorCQkke2xpYmRpcn0vcnBtL3BlcmwucmVxIFwKKwkJJHtsaWJkaXJ9L3JwbS9waHAucHJvdiBcCisJCSR7bGliZGlyfS9ycG0vcGhwLnJlcSBcCisJCSR7bGliZGlyfS9ycG0vcGtnY29uZmlnZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2RlYnVnZWRpdC5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY2FjaGUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1jYWNoZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtY21wLnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGVwcy1vZWNvcmUgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ycG1kZXBzLW9lY29yZS5yZWFsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0IFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtZGlnZXN0LnJlYWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9hYmktY29tcGxpYW5jZS1jaGVja2VyLnBsIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vYXBpLXNhbml0eS1hdXRvdGVzdC5wbCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2Nocm9vdCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2NwIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vZGJzcWwgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9maW5kIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vaW5zdGFsbC1zaCBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YSBcCisJCSR7bGliZGlyfS9ycG0vYmluL2x1YWMgXAorCQkke2xpYmRpcn0vcnBtL2Jpbi9ta2luc3RhbGxkaXJzIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhIFwKKwkJJHtsaWJkaXJ9L3JwbS9iaW4vcnBtbHVhYyBcCisJCSR7bGliZGlyfS9ycG0vYmluL3NxbGl0ZTMgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2NtYWtlIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9qYXZhIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9saWJ0b29sIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9tYW5kcml2YSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvbW9ubyBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGVybCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcGhwIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9wa2djb25maWcgXAorCQkke2xpYmRpcn0vcnBtL21hY3Jvcy5kL3B5dGhvbiBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvcnVieSBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvc2VsaW51eCBcCisJCSR7bGliZGlyfS9ycG0vbWFjcm9zLmQvdGNsIFwKKwkJJHtsaWJkaXJ9L3JwbS9tYWNyb3MucnBtYnVpbGQgXAorCQkke2xpYmRpcn0vcnBtL3VfcGtnLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzLnNoIFwKKwkJJHtsaWJkaXJ9L3JwbS92cGtnLXByb3ZpZGVzMi5zaCBcCisJCSR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoIFwKKwkJIgorUkRFUEVORFNfJHtQTn0gPSAiYmFzZS1maWxlcyBydW4tcG9zdGluc3RzIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1idWlsZCA9ICJmaWxlIGJhc2ggcGVybCIKKworUkRFUEVORFNfcHl0aG9uLXJwbSA9ICIke1BOfSIKKworRklMRVNfcHl0aG9uLXJwbSA9ICIke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbSIKK1BST1ZJREVTICs9ICJweXRob24tcnBtIgorCitGSUxFU19wZXJsLW1vZHVsZS1ycG0gPSAiJHtsaWJkaXJ9L3BlcmwvKi8qIFwKKwkJIgorCitSREVQRU5EU18ke1BOfS1kZXYgKz0gImJhc2giCisKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9L3JwbSBcCisJCSR7bGliZGlyfS9saWJycG0ubGEgXAorCQkke2xpYmRpcn0vbGlicnBtLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWRiLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLmxhIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWlvLnNvIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MubGEgXAorCQkke2xpYmRpcn0vbGlicnBtbWlzYy5zbyBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5sYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5zbyBcCisJCSR7bGliZGlyfS9ycG0vbGliL2xpYmx1YS5sYSBcCisJCSR7bGliZGlyfS9wa2djb25maWcvcnBtLnBjIFwKKwkJJHtsaWJkaXJ9L3JwbS9ycG1kYl9sb2FkY3Z0IFwKKwkJIgorCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgPSAiIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbS5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbWNvbnN0YW50LmEgXAorCQkke2xpYmRpcn0vbGlicnBtZGIuYSBcCisJCSR7bGliZGlyfS9saWJycG1pby5hIFwKKwkJJHtsaWJkaXJ9L2xpYnJwbW1pc2MuYSBcCisJCSR7bGliZGlyfS9saWJycG1idWlsZC5hIFwKKwkJJHtsaWJkaXJ9L3JwbS9saWIvbGlibHVhLmEgXAorCQkke2xpYmRpcn0vcHl0aG9uKi9zaXRlLXBhY2thZ2VzL3JwbS8qLmEgXAorCQkiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIERpc2FibGUgdGVzdHMhCisJZWNobyAiYWxsOiIgPiAke1N9L3Rlc3RzL01ha2VmaWxlLmFtCisJc2VkIC1lICdzL0BfX01LRElSX1BALyV7X19ta2Rpcn0gLXAvJyAtaSAke1N9L21hY3Jvcy9tYWNyb3MuaW4KKworCSggY2QgJHtTfTsgJHtTfS9hdXRvZ2VuLnNoICkKKworCSMgTkFTVFkgaGFjayB0byBtYWtlIHN1cmUgY29uZmlndXJlIGZpbGVzIHRoZSByaWdodCBwa2ctY29uZmlnIGZpbGUuLi4KKwlzZWQgLWUgJ3MvcGtnLWNvbmZpZyAtLWV4aXN0cyB1dWlkL3BrZy1jb25maWcgLS1leGlzdHMgb3NzcC11dWlkL2cnIFwKKwkgICAgLWUgJ3MvcGtnLWNvbmZpZyB1dWlkL3BrZy1jb25maWcgb3NzcC11dWlkL2cnIC1pICR7U30vY29uZmlndXJlCisKKwkoIGNkICR7U30vc3ljayA7IHNldCArZSA7IHJtIC0tIC1sKiA7IG1ha2UgZGlzdGNsZWFuICkgfHwgOgorCisJZXhwb3J0IHZhcnByZWZpeD0ke2xvY2Fsc3RhdGVkaXJ9CisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3MsJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCMlJV9fc2NyaXB0bGV0X3JlcXVpcmVzLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCXNlZCAtaSAtZSAncywlX19wZXJsX3Byb3ZpZGVzLCMlJV9fcGVybF9wcm92aWRlcywnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kLyoKKwlzZWQgLWkgLWUgJ3MsJV9fcGVybF9yZXF1aXJlcywjJSVfX3BlcmxfcmVxdWlyZXMsJyAke0R9LyR7bGliZGlyfS9ycG0vbWFjcm9zICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC8qCisJc2VkIC1pIC1lICdzLCVfcmVwYWNrYWdlX2FsbF9lcmFzdXJlc1teX10uKiwlX3JlcGFja2FnZV9hbGxfZXJhc3VyZXMgMCwnICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MKKwlzZWQgLWkgLWUgJ3MsXiMlX29wZW5hbGxfYmVmb3JlX2Nocm9vdC4qLCVfb3BlbmFsbF9iZWZvcmVfY2hyb290XHQxLCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJIyBFbmFibGUgRGViaWFuIHN0eWxlIGFyYml0cmFyeSB0YWdzLi4uCisJc2VkIC1pIC1lICdzLCVfYXJiaXRyYXJ5X3RhZ3NbXl9dLiosJV9hcmJpdHJhcnlfdGFncyAle19hcmJpdHJhcnlfdGFnc19kZWJpYW59LCcgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3JvcworCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcHl0aG9uZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcHl0aG9uZGVwcy5zaAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3BlcmZpbGVfcnBtZGVwcy5zaCAke0R9LyR7bGliZGlyfS9ycG0vcGVyZmlsZV9ycG1kZXBzLnNoCisKKwkjIFJlbW92ZSB1bnBhY2thZ2VkIGZpbGVzIChiYXNlZCBvbiBsaXN0IGluIHJwbS5zcGVjKQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS97U3BlY2ZpbGUucG0sY3BhbmZsdXRlLGNwYW5mbHV0ZTIscnBtZGlmZixycG1kaWZmLmNnaSxzcWwucHJvdixzcWwucmVxLHRjbC5yZXEsdHJwbX0KKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjgvcnBtY2FjaGUuOCoKKwlybSAtZiAke0R9LyR7bWFuZGlyfS9tYW44L3JwbWdyYXBoLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWNhY2hlLjgqCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vKi9tYW44L3JwbWdyYXBoLjgqCisJcm0gLXJmICR7RH0vJHttYW5kaXJ9L3tmcixrb30KKworCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9wb3B0LmgKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJwb3B0LioKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvcG9wdC5wYworCXJtIC1mICR7RH0vJHtkYXRhZGlyfS9sb2NhbGUvKi9MQ19NRVNTQUdFUy9wb3B0Lm1vCisJcm0gLWYgJHtEfS8ke21hbmRpcn0vbWFuMy9wb3B0LjMKKworCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEveGFyLjEqCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veGFyCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS94YXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9saWJ4YXIqCisKKwlybSAtZiAke0R9LyR7YmluZGlyfS9seioKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bmx6bWEKKwlybSAtZiAke0R9LyR7YmluZGlyfS91bnh6CisJcm0gLWYgJHtEfS8ke2JpbmRpcn0veHoqCisJcm0gLXJmICR7RH0vJHtpbmNsdWRlZGlyfS9sem1hKgorCXJtIC1mICR7RH0vJHttYW5kaXJ9L21hbjEvbHoqLjEKKwlybSAtZiAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlibHptYSoKKworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy8qLnthLGxhfQorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3B5dGhvbiV7d2l0aF9weXRob25fdmVyc2lvbn0vc2l0ZS1wYWNrYWdlcy9ycG0vKi57YSxsYX0KKworCSNmaW5kICR7RH0vJHtsaWJkaXJ9L3Blcmw1IC10eXBlIGYgLWEgXCggLW5hbWUgcGVybGxvY2FsLnBvZCAtbyAtbmFtZSAucGFja2xpc3QgXAorCSMJLW8gXCggLW5hbWUgJyouYnMnIC1hIC1lbXB0eSBcKSBcKSAtZXhlYyBybSAtZiB7fSAnOycKKwkjZmluZCAke0R9LyR7bGliZGlyfS9wZXJsNSAtdHlwZSBkIC1kZXB0aCAtZXhlYyBybWRpciB7fSAyPi9kZXYvbnVsbCAnOycKKworCSMgV2UgZG9uJ3Qgd2FudCB0aGUgZGVmYXVsdCBtYWNybyBzZXQKKwlybSAtcmYgJHtEfS8ke2xpYmRpcn0vcnBtL3tpWzM0NTZdODYqLGF0aGxvbioscGVudGl1bSoseDg2XzY0KixhbHBoYSosc3BhcmMqLGlhNjQqLHBwYyosczM5MCosYXJtdlszNF1bbGJdKixhcm12WzM0NV0qLG1pcHMqLG5vYXJjaCp9CisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vZGJjb252ZXJ0LnNoCisKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vbGlic3FsZGIuKgorCisJIyBXZSBkb24ndCB3YW50LCBub3IgbmVlZCB0aGUgTWFuZHJpdmEgbXVsdGlhcmNoIGl0ZW1zCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLWRpc3BhdGNoCisJcm0gLWYgJHtEfS8ke2JpbmRpcn0vbXVsdGlhcmNoLXBsYXRmb3JtCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2NoZWNrLW11bHRpYXJjaC1maWxlcworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9ta211bHRpYXJjaAorCXJtIC1mICR7RH0vJHtpbmNsdWRlZGlyfS9tdWx0aWFyY2gtZGlzcGF0Y2guaAorCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2dzdHJlYW1lci5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9nZW1faGVscGVyLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL3J1YnlnZW1zLnJiCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2ttb2QtZGVwcy5zaAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9weXRob25lZ2dzLnB5CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL21hY3Jvcy5kL2tlcm5lbAorCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9tYWNyb3MuZC9nc3RyZWFtZXIKKwlybSAtZiAke0R9LyR7bGliZGlyfS9ycG0vYmluL21nbworCXJtIC1mICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGJjb252ZXJ0CisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9wb20yc3BlYworCisJcm0gLXJmICR7RH0vdmFyL2xpYi93ZGogJHtEfS92YXIvY2FjaGUvd2RqCisJcm0gLWYgJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9hcGktc2FuaXR5LWNoZWNrZXIucGwKKworfQorCithZGRfbmF0aXZlX3dyYXBwZXIoKSB7CisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbSBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisgICAgICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3JwbTJjcGlvIFwKKwkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQlSUE1fRVRDUlBNPSckJ3tSUE1fRVRDUlBNLSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignc3lzY29uZmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG19IFwKKwkJUlBNX0xPQ0FMRURJUlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2RhdGFkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vbG9jYWxlCisKKyAgICAgICAgY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtYnVpbGQgXAorCQlSUE1fVVNSTElCUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignbGliZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbSBcCisJCVJQTV9FVENSUE09JyQne1JQTV9FVENSUE0tJ2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdzeXNjb25mZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L3JwbX0gXAorCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKworICAgICAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ycG1jb25zdGFudCBcCisJCVJQTV9VU1JMSUJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtIFwKKwkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCVJQTV9MT0NBTEVESVJSUE09J2BkaXJuYW1lICQnJ3JlYWxwYXRoYCcvJHtAb3MucGF0aC5yZWxwYXRoKGQuZ2V0VmFyKCdkYXRhZGlyJywgVHJ1ZSksIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSl9L2xvY2FsZQorCisJZm9yIHJwbV9iaW5hcnkgaW4gJHtEfS8ke2xpYmRpcn0vcnBtL2Jpbi9ycG0qICR7RH0vJHtsaWJkaXJ9L3JwbS9iaW4vZGVidWdlZGl0OyBkbworICAgICAgICAJY3JlYXRlX3dyYXBwZXIgJHJwbV9iaW5hcnkgXAorCQkJUlBNX1VTUkxJQlJQTT0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0nJCd7UlBNX0VUQ1JQTS0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bvcy5wYXRoLnJlbHBhdGgoZC5nZXRWYXIoJ3N5c2NvbmZkaXInLCBUcnVlKSwgZC5nZXRWYXIoJ2JpbmRpcicsIFRydWUpKX0vcnBtfSBcCisJCQlSUE1fTE9DQUxFRElSUlBNPSdgZGlybmFtZSAkJydyZWFscGF0aGAnLyR7QG9zLnBhdGgucmVscGF0aChkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCBkLmdldFZhcignYmluZGlyJywgVHJ1ZSkpfS9sb2NhbGUKKwlkb25lCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlhZGRfbmF0aXZlX3dyYXBwZXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCWFkZF9uYXRpdmVfd3JhcHBlcgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmUvcnBtcmVzb2x2ZS5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjYWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlL3JwbXJlc29sdmUuYwpAQCAtMCwwICsxLDQyNCBAQAorLyogT3BlbkVtYmVkZGVkIFJQTSByZXNvbHZlciB1dGlsaXR5CisKKyAgV3JpdHRlbiBieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CisKKyAgQ29weXJpZ2h0IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8cnBtZGIuaD4KKyNpbmNsdWRlIDxycG10eXBlcy5oPgorI2luY2x1ZGUgPHJwbXRhZy5oPgorI2luY2x1ZGUgPHJwbXRzLmg+CisjaW5jbHVkZSA8cnBtbWFjcm8uaD4KKyNpbmNsdWRlIDxycG1jYi5oPgorI2luY2x1ZGUgPHJwbWxvZy5oPgorI2luY2x1ZGUgPGFyZ3YuaD4KKyNpbmNsdWRlIDxtaXJlLmg+CisKK2ludCBkZWJ1Z21vZGU7CitGSUxFICpvdXRmOworCitpbnQgZ2V0UGFja2FnZVN0cihycG10cyB0cywgY29uc3QgY2hhciAqTlZSQSwgcnBtVGFnIHRhZywgY2hhciAqKnZhbHVlKQoreworICAgIGludCByYyA9IC0xOworICAgIHJwbW1pIG1pID0gcnBtdHNJbml0SXRlcmF0b3IodHMsIFJQTVRBR19OVlJBLCBOVlJBLCAwKTsKKyAgICBIZWFkZXIgaDsKKyAgICBpZiAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgICAgICAgIEhFX3QgaGUgPSAoSEVfdCkgbWVtc2V0KGFsbG9jYShzaXplb2YoKmhlKSksIDAsIHNpemVvZigqaGUpKTsKKyAgICAgICAgaGUtPnRhZyA9IHRhZzsKKyAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgaWYocmM9PTApCisgICAgICAgICAgICAqdmFsdWUgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgIH0KKyAgICAodm9pZClycG1taUZyZWUobWkpOworICAgIHJldHVybiByYzsKK30KKworaW50IGxvYWRUcyhycG10cyAqKnRzLCBpbnQgKnRzY3QsIGNvbnN0IGNoYXIgKmRibGlzdGZuKQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgaW50IHN6ID0gNTsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBsaXN0ZmlsZSA9IDE7CisgICAgc3RydWN0IHN0YXQgc3RfYnVmOworCisgICAgcmMgPSBzdGF0KGRibGlzdGZuLCAmc3RfYnVmKTsKKyAgICBpZihyYyAhPSAwKSB7CisgICAgICAgIHBlcnJvcigic3RhdCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYoU19JU0RJUihzdF9idWYuc3RfbW9kZSkpCisgICAgICAgIGxpc3RmaWxlID0gMDsKKworICAgIGlmKGxpc3RmaWxlKSB7CisgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiREVCVUc6IHJlYWRpbmcgZGF0YWJhc2UgbGlzdCBmaWxlICclcydcbiIsIGRibGlzdGZuKTsKKyAgICAgICAgKnRzID0gbWFsbG9jKHN6ICogc2l6ZW9mKHJwbXRzKSk7CisgICAgICAgIEZJTEUgKmYgPSBmb3BlbihkYmxpc3RmbiwgInIiICk7CisgICAgICAgIGlmKGYpIHsKKyAgICAgICAgICAgIGNoYXIgbGluZVsyMDQ4XTsKKyAgICAgICAgICAgIHdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGxpbmUpIC0gMTsKKyAgICAgICAgICAgICAgICBpZihsZW4gPiAwKQorICAgICAgICAgICAgICAgICAgICAvLyBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUobGVuID4gMCAmJiBpc3NwYWNlKGxpbmVbbGVuXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lW2xlbi0tXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBpZihsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBhcnJheSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYoY291bnQgPT0gc3opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN6ICs9IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHMgPSAocnBtdHMgKilyZWFsbG9jKCp0cywgc3opOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoZGVidWdtb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJERUJVRzogb3BlbmluZyBkYXRhYmFzZSAnJXMnXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqZGJwYXRobSA9IG1hbGxvYyhzdHJsZW4obGluZSkgKyAxMCk7CisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZGJwYXRobSwgIl9kYnBhdGggJXMiLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgcnBtRGVmaW5lTWFjcm8oTlVMTCwgZGJwYXRobSwgUk1JTF9DTURMSU5FKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShkYnBhdGhtKTsKKworICAgICAgICAgICAgICAgICAgICBycG10cyB0c2kgPSBycG10c0NyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAoKnRzKVtjb3VudF0gPSB0c2k7CisgICAgICAgICAgICAgICAgICAgIHJjID0gcnBtdHNPcGVuREIodHNpLCBPX1JET05MWSk7CisgICAgICAgICAgICAgICAgICAgIGlmKCByYyApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gZGF0YWJhc2UgJXNcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmY2xvc2UoZik7CisgICAgICAgICAgICAqdHNjdCA9IGNvdW50OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGVycm9yKGRibGlzdGZuKTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiREVCVUc6IG9wZW5pbmcgZGF0YWJhc2UgJyVzJ1xuIiwgZGJsaXN0Zm4pOworICAgICAgICAvLyBMb2FkIGZyb20gc2luZ2xlIGRhdGFiYXNlCisgICAgICAgICp0cyA9IG1hbGxvYyhzaXplb2YocnBtdHMpKTsKKyAgICAgICAgY2hhciAqZGJwYXRobSA9IG1hbGxvYyhzdHJsZW4oZGJsaXN0Zm4pICsgMTApOworICAgICAgICBzcHJpbnRmKGRicGF0aG0sICJfZGJwYXRoICVzIiwgZGJsaXN0Zm4pOworICAgICAgICBycG1EZWZpbmVNYWNybyhOVUxMLCBkYnBhdGhtLCBSTUlMX0NNRExJTkUpOworICAgICAgICBmcmVlKGRicGF0aG0pOworCisgICAgICAgIHJwbXRzIHRzaSA9IHJwbXRzQ3JlYXRlKCk7CisgICAgICAgICgqdHMpWzBdID0gdHNpOworICAgICAgICByYyA9IHJwbXRzT3BlbkRCKHRzaSwgT19SRE9OTFkpOworICAgICAgICBpZiggcmMgKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuIGRhdGFiYXNlICVzXG4iLCBkYmxpc3Rmbik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICB9CisgICAgICAgICp0c2N0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwcm9jZXNzUGFja2FnZXMocnBtdHMgKnRzLCBpbnQgdHNjb3VudCwgY29uc3QgY2hhciAqcGFja2FnZWxpc3RmbiwgaW50IGlnbm9yZW1pc3NpbmcpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBzeiA9IDEwMDsKKyAgICBpbnQgaSA9IDA7CisgICAgaW50IG1pc3NpbmcgPSAwOworCisgICAgRklMRSAqZiA9IGZvcGVuKHBhY2thZ2VsaXN0Zm4sICJyIiApOworICAgIGlmKGYpIHsKKyAgICAgICAgY2hhciBsaW5lWzI1NV07CisgICAgICAgIHdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKyAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4obGluZSkgLSAxOworICAgICAgICAgICAgaWYobGVuID4gMCkKKyAgICAgICAgICAgICAgICAvLyBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgICAgICAgICAgICAgICB3aGlsZShsZW4gPiAwICYmIGlzc3BhY2UobGluZVtsZW5dKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZVtsZW4tLV0gPSAnXDAnOworCisgICAgICAgICAgICBpZihsZW4gPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IGZvdW5kID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPHRzY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBBUkdWX3Qga2V5cyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHJwbWRiIGRiID0gcnBtdHNHZXRSZGIodHNbaV0pOworICAgICAgICAgICAgICAgICAgICByYyA9IHJwbWRiTWlyZUFwcGx5KGRiLCBSUE1UQUdfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlBNTUlSRV9TVFJDTVAsIGxpbmUsICZrZXlzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBua2V5cyA9IGFyZ3ZDb3VudChrZXlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBua2V5cyA9PSAxICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnZhbHVlID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyA9IGdldFBhY2thZ2VTdHIodHNbaV0sIGtleXNbMF0sIFJQTVRBR19QQUNLQUdFT1JJR0lOLCAmdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJjID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYob3V0ZiwgIiVzXG4iLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBnZXQgcGFja2FnZSBvcmlnaW4gZm9yICVzXG4iLCBsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCBua2V5cyA+IDEgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtleWluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk11bHRpcGxlIG1hdGNoZXMgZm9yICVzOlxuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBrZXlpbmRleD0wOyBrZXlpbmRleDxua2V5czsga2V5aW5kZXgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gZ2V0UGFja2FnZVN0cih0c1tpXSwga2V5c1trZXlpbmRleF0sIFJQTVRBR19QQUNLQUdFT1JJR0lOLCAmdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyYyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICVzXG4iLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAoJXMpXG4iLCBrZXlzW2tleWluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKGZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYoICFmb3VuZCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIGlnbm9yZW1pc3NpbmcgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byByZXNvbHZlIHBhY2thZ2UgJXMgLSBpZ25vcmluZ1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byByZXNvbHZlIHBhY2thZ2UgJXNcbiIsIGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZyA9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgIGZjbG9zZShmKTsKKworICAgICAgICBpZiggbWlzc2luZyApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1I6IHNvbWUgcGFja2FnZXMgd2VyZSBtaXNzaW5nXG4iKTsKKyAgICAgICAgICAgIHJjID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcGVycm9yKHBhY2thZ2VsaXN0Zm4pOworICAgICAgICByYyA9IC0xOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworaW50IGxvb2t1cFByb3ZpZGVyKHJwbXRzIHRzLCBjb25zdCBjaGFyICpyZXEsIGNoYXIgKipwcm92aWRlcikKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIHJwbW1pIHByb3ZtaSA9IHJwbXRzSW5pdEl0ZXJhdG9yKHRzLCBSUE1UQUdfUFJPVklERU5BTUUsIHJlcSwgMCk7CisgICAgaWYocHJvdm1pKSB7CisgICAgICAgIEhlYWRlciBoOworICAgICAgICBpZiAoKGggPSBycG1taU5leHQocHJvdm1pKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgSEVfdCBoZSA9IChIRV90KSBtZW1zZXQoYWxsb2NhKHNpemVvZigqaGUpKSwgMCwgc2l6ZW9mKCpoZSkpOworICAgICAgICAgICAgaGUtPnRhZyA9IFJQTVRBR19OQU1FOworICAgICAgICAgICAgcmMgPSAoaGVhZGVyR2V0KGgsIGhlLCAwKSAhPSAxKTsKKyAgICAgICAgICAgIGlmKHJjPT0wKQorICAgICAgICAgICAgICAgICpwcm92aWRlciA9IHN0cmR1cCgoY2hhciAqKWhlLT5wLnB0cik7CisgICAgICAgIH0KKyAgICAgICAgKHZvaWQpcnBtbWlGcmVlKHByb3ZtaSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByYyA9IC0xOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBwcmludERlcExpc3QocnBtdHMgKnRzLCBpbnQgdHNjb3VudCkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgaWYoIHRzY291bnQgPiAxICkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICI+MSBkYXRhYmFzZSBzcGVjaWZpZWQgd2l0aCBkZXBlbmRlbmN5IGxpc3QsIHVzaW5nIGZpcnN0IG9ubHlcbiIpOworCisgICAgLyogR2V0IGxpc3Qgb2YgbmFtZXMgKi8KKyAgICBycG1kYiBkYiA9IHJwbXRzR2V0UmRiKHRzWzBdKTsKKyAgICBBUkdWX3QgbmFtZXMgPSBOVUxMOworICAgIHJjID0gcnBtZGJNaXJlQXBwbHkoZGIsIFJQTVRBR19OQU1FLAorICAgICAgICAgICAgICAgIFJQTU1JUkVfU1RSQ01QLCBOVUxMLCAmbmFtZXMpOworICAgIGludCBubmFtZXMgPSBhcmd2Q291bnQobmFtZXMpOworCisgICAgLyogR2V0IGxpc3Qgb2YgTlZSQXMgKi8KKyAgICBBUkdWX3Qga2V5cyA9IE5VTEw7CisgICAgcmMgPSBycG1kYk1pcmVBcHBseShkYiwgUlBNVEFHX05WUkEsCisgICAgICAgICAgICAgICAgUlBNTUlSRV9TVFJDTVAsIE5VTEwsICZrZXlzKTsKKyAgICBpZiAoa2V5cykgeworICAgICAgICBpbnQgaSwgajsKKyAgICAgICAgSEVfdCBoZSA9IChIRV90KSBtZW1zZXQoYWxsb2NhKHNpemVvZigqaGUpKSwgMCwgc2l6ZW9mKCpoZSkpOworICAgICAgICBpbnQgbmtleXMgPSBhcmd2Q291bnQoa2V5cyk7CisgICAgICAgIGZvcihpPTA7IGk8bmtleXM7IGkrKykgeworICAgICAgICAgICAgcnBtbWkgbWkgPSBycG10c0luaXRJdGVyYXRvcih0c1swXSwgUlBNVEFHX05WUkEsIGtleXNbaV0sIDApOworICAgICAgICAgICAgSGVhZGVyIGg7CisgICAgICAgICAgICBpZiAoKGggPSBycG1taU5leHQobWkpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyogR2V0IG5hbWUgb2YgcGFja2FnZSAqLworICAgICAgICAgICAgICAgIGhlLT50YWcgPSBSUE1UQUdfTkFNRTsKKyAgICAgICAgICAgICAgICByYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpOworICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUgPSBzdHJkdXAoKGNoYXIgKiloZS0+cC5wdHIpOworICAgICAgICAgICAgICAgIC8qIEdldCBpdHMgcmVxdWlyZXMgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX1JFUVVJUkVOQU1FOworICAgICAgICAgICAgICAgIGlmIChyYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Z21vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiREVCVUc6ICVzIHJlcXVpcmVzIG51bGxcbiIsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFSR1ZfdCByZXFzID0gKEFSR1ZfdCloZS0+cC5wdHI7CisgICAgICAgICAgICAgICAgLyogR2V0IGl0cyByZXF1aXJlZmxhZ3MgKi8KKyAgICAgICAgICAgICAgICBoZS0+dGFnID0gUlBNVEFHX1JFUVVJUkVGTEFHUzsKKyAgICAgICAgICAgICAgICByYyA9IChoZWFkZXJHZXQoaCwgaGUsIDApICE9IDEpOworICAgICAgICAgICAgICAgIHJwbXVpbnQzMl90ICpyZXFmbGFncyA9IChycG11aW50MzJfdCAqKWhlLT5wLnVpMzJwOworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8aGUtPmM7IGorKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgazsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqcHJvdiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGZvcihrPTA7IGs8bm5hbWVzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0cmNtcChuYW1lc1trXSwgcmVxc1tqXSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3YgPSBuYW1lc1trXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihwcm92KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZigoaW50KXJlcWZsYWdzW2pdICYgMHg4MDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlcyBbUkVDXVxuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihvdXRmLCAiJXN8JXNcbiIsIG5hbWUsIHByb3YpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBsb29rdXBQcm92aWRlcih0c1swXSwgcmVxc1tqXSwgJnByb3YpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYocmM9PTAgJiYgcHJvdikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChpbnQpcmVxZmxhZ3Nbal0gJiAweDgwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlcyBbUkVDXVxuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKG91dGYsICIlc3wlc1xuIiwgbmFtZSwgcHJvdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShwcm92KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKHZvaWQpcnBtbWlGcmVlKG1pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByYzsKK30KKwordm9pZCB1c2FnZSgpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJPcGVuRW1iZWRkZWQgcnBtIHJlc29sdmVyIHV0aWxpdHlcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAic3ludGF4OiBycG1yZXNvbHZlIFstaV0gWy1kXSBbLXRdIDxkYmxpc3RmaWxlPiA8cGFja2FnZWxpc3RmaWxlPlxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBycG10cyAqdHMgPSBOVUxMOworICAgIGludCB0c2NvdW50ID0gMDsKKyAgICBpbnQgcmMgPSAwOworICAgIGludCBpOworICAgIGludCBjOworICAgIGludCBpZ25vcmVtaXNzaW5nID0gMDsKKyAgICBpbnQgZGVwbGlzdG1vZGUgPSAwOworICAgIGNoYXIgKm91dGZpbGUgPSBOVUxMOworCisgICAgZGVidWdtb2RlID0gMDsKKyAgICBvdXRmID0gc3Rkb3V0OworCisgICAgb3B0ZXJyID0gMDsKKyAgICB3aGlsZSAoKGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJpdGRvOiIpKSAhPSAtMSkgeworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIGlnbm9yZW1pc3NpbmcgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAndCc6CisgICAgICAgICAgICAgICAgZGVwbGlzdG1vZGUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgZGVidWdtb2RlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ28nOgorICAgICAgICAgICAgICAgIG91dGZpbGUgPSBzdHJkdXAob3B0YXJnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgICAgIGlmKGlzcHJpbnQob3B0b3B0KSkKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbiBgLSVjJy5cbiIsIG9wdG9wdCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gb3B0aW9uIGNoYXJhY3RlciBgXFx4JXgnLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdG9wdCk7CisgICAgICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCBhcmdjIC0gb3B0aW5kIDwgMSApIHsKKyAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYoIG91dGZpbGUgKSB7CisgICAgICAgIGlmKGRlYnVnbW9kZSkKKyAgICAgICAgICAgIHByaW50ZigiREVCVUc6IFVzaW5nIG91dHB1dCBmaWxlICVzXG4iLCBvdXRmaWxlKTsKKyAgICAgICAgb3V0ZiA9IGZvcGVuKG91dGZpbGUsICJ3Iik7CisgICAgfQorCisgICAgY29uc3QgY2hhciAqZGJsaXN0Zm4gPSBhcmd2W29wdGluZF07CisKKyAgICBycG1jbGlJbml0KGFyZ2MsIGFyZ3YsIE5VTEwpOworCisgICAgaWYoZGVidWdtb2RlKQorICAgICAgICBycG1TZXRWZXJib3NpdHkoUlBNTE9HX0RFQlVHKTsKKworICAgIHJwbURlZmluZU1hY3JvKE5VTEwsICJfX2RiaV90eG4gY3JlYXRlIG5vZnN5bmMiLCBSTUlMX0NNRExJTkUpOworCisgICAgcmMgPSBsb2FkVHMoJnRzLCAmdHNjb3VudCwgZGJsaXN0Zm4pOworICAgIGlmKCByYyApCisgICAgICAgIHJldHVybiAxOworICAgIGlmKCB0c2NvdW50ID09IDAgKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgZGF0YWJhc2UgbGlzdCBmaWxlIG9yIGRhdGFiYXNlIGxvY2F0aW9uXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYoZGVwbGlzdG1vZGUpIHsKKyAgICAgICAgcmMgPSBwcmludERlcExpc3QodHMsIHRzY291bnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYoIGFyZ2MgLSBvcHRpbmQgPCAyICkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJQbGVhc2Ugc3BlY2lmeSBwYWNrYWdlIGxpc3QgZmlsZVxuIik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwa2dsaXN0Zm4gPSBhcmd2W29wdGluZCsxXTsKKyAgICAgICAgICAgIHJjID0gcHJvY2Vzc1BhY2thZ2VzKHRzLCB0c2NvdW50LCBwa2dsaXN0Zm4sIGlnbm9yZW1pc3NpbmcpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yKGk9MDsgaTx0c2NvdW50OyBpKyspCisgICAgICAgICh2b2lkKSBycG10c0Nsb3NlREIodHNbaV0pOworICAgIGZyZWUodHMpOworCisgICAgaWYoIG91dGZpbGUgKSB7CisgICAgICAgIGZjbG9zZShvdXRmKTsKKyAgICAgICAgZnJlZShvdXRmaWxlKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnBtL3JwbXJlc29sdmVfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1NWZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JwbS9ycG1yZXNvbHZlXzEuMC5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIk9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIk9wZW5FbWJlZGRlZCBSUE0gcmVzb2x2ZXIgLSBwZXJmb3JtcyBSUE0gZGF0YWJhc2UgbG9va3VwcyBpbiBiYXRjaGVzIHRvIGF2b2lkIFwKKyByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZiBycG0gb24gdGhlIGNvbW1hbmQgbGluZS4iCitERVBFTkRTID0gInJwbSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJmaWxlOi8vcnBtcmVzb2x2ZS5jIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUoKSB7CisJJHtDQ30gJHtDRkxBR1N9IC1nZ2RiIC1JJHtTVEFHSU5HX0lOQ0RJUn0vcnBtICR7TERGTEFHU30gcnBtcmVzb2x2ZS5jIC1vIHJwbXJlc29sdmUgLWxycG1idWlsZCAtbHJwbSAtbHJwbWlvIC1scnBtZGIgLWxwb3B0Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1IHJwbXJlc29sdmUgJHtEfSR7YmluZGlyfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vcnBtcmVzb2x2ZSBcCisJCQlSUE1fVVNSTElCUlBNPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0ke1NUQUdJTkdfRVRDRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9MT0NBTEVESVJSUE09JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9sb2NhbGUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL2FjaW5jbHVkZS5tNCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1YjQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw5NSBAQAorZG5sIHZlcmJhdGltIHJlbmFtZWQgZnJvbSBhY2xvY2FsLm00IGluIHJzeW5jXzMuMC43CitkbmwgMDcvMDYvMjAxMCAtIHFoZQorCitkbmwgQUNfVkFMSURBVEVfQ0FDSEVfU1lTVEVNX1RZUEVbKGNtZCldCitkbmwgaWYgdGhlIGNhY2hlIGZpbGUgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIGN1cnJlbnQgaG9zdCwKK2RubCB0YXJnZXQgYW5kIGJ1aWxkIHN5c3RlbSB0eXBlcywgZXhlY3V0ZSBDTUQgb3IgcHJpbnQgYSBkZWZhdWx0CitkbmwgZXJyb3IgbWVzc2FnZS4KK0FDX0RFRlVOKEFDX1ZBTElEQVRFX0NBQ0hFX1NZU1RFTV9UWVBFLCBbCisgICAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX1NZU1RFTV0pCisgICAgQUNfTVNHX0NIRUNLSU5HKFtjb25maWcuY2FjaGUgc3lzdGVtIHR5cGVdKQorICAgIGlmIHsgdGVzdCB4IiR7YWNfY3ZfaG9zdF9zeXN0ZW1fdHlwZStzZXR9IiA9IHgic2V0IiAmJgorICAgICAgICAgdGVzdCB4IiRhY19jdl9ob3N0X3N5c3RlbV90eXBlIiAhPSB4IiRob3N0IjsgfSB8fAorICAgICAgIHsgdGVzdCB4IiR7YWNfY3ZfYnVpbGRfc3lzdGVtX3R5cGUrc2V0fSIgPSB4InNldCIgJiYKKyAgICAgICAgIHRlc3QgeCIkYWNfY3ZfYnVpbGRfc3lzdGVtX3R5cGUiICE9IHgiJGJ1aWxkIjsgfSB8fAorICAgICAgIHsgdGVzdCB4IiR7YWNfY3ZfdGFyZ2V0X3N5c3RlbV90eXBlK3NldH0iID0geCJzZXQiICYmCisgICAgICAgICB0ZXN0IHgiJGFjX2N2X3RhcmdldF9zeXN0ZW1fdHlwZSIgIT0geCIkdGFyZ2V0IjsgfTsgdGhlbgorCUFDX01TR19SRVNVTFQoW2RpZmZlcmVudF0pCisJaWZlbHNlKCQjLCAxLCBbJDFdLAorCQlbQUNfTVNHX0VSUk9SKFsieW91IG11c3QgcmVtb3ZlIGNvbmZpZy5jYWNoZSBhbmQgcmVzdGFydCBjb25maWd1cmUiXSldKQorICAgIGVsc2UKKwlBQ19NU0dfUkVTVUxUKFtzYW1lXSkKKyAgICBmaQorICAgIGFjX2N2X2hvc3Rfc3lzdGVtX3R5cGU9IiRob3N0IgorICAgIGFjX2N2X2J1aWxkX3N5c3RlbV90eXBlPSIkYnVpbGQiCisgICAgYWNfY3ZfdGFyZ2V0X3N5c3RlbV90eXBlPSIkdGFyZ2V0IgorXSkKKworZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KKworZG5sIFRoaXMgaXMgbm8gZ29vZCwgYmVjYXVzZSBwYXNzaW5nIHRoZSB3cm9uZyBwb2ludGVyIG9uIEMgY29tcGlsZXJzIGlzCitkbmwgbGlrZWx5IHRvIG9ubHkgZ2VuZXJhdGUgYSB3YXJuaW5nLCBub3QgYW4gZXJyb3IuICBXZSBkb24ndCBjYWxsIHRoaXMgYXQKK2RubCB0aGUgbW9tZW50LgorCitBQ19ERUZVTihbVFlQRV9TT0NLTEVOX1RdLAorWworICAgQUNfQ0hFQ0tfVFlQRShbc29ja2xlbl90XSwgLFsKKyAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHNvY2tsZW5fdCBlcXVpdmFsZW50XSkKKyAgICAgIEFDX0NBQ0hFX1ZBTChbcnN5bmNfY3Zfc29ja2xlbl90X2VxdWl2XSwKKyAgICAgIFsKKyAgICAgICAgICMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisgICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKyAgICAgICAgIHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdj0KKyAgICAgICAgIGZvciBhcmcyIGluICJzdHJ1Y3Qgc29ja2FkZHIiIHZvaWQ7IGRvCisgICAgICAgICAgICBmb3IgdCBpbiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmcgInVuc2lnbmVkIGxvbmciOyBkbworICAgICAgICAgICAgICAgQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworICAgICAgICAgICAgICAgICAgaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAkdCBsZW47CisgICAgICAgICAgICAgICAgICBnZXRwZWVybmFtZSgwLDAsJmxlbik7CisgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgIHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgIGRvbmUKKworICAgICAgICAgaWYgdGVzdCAieCRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYiID0geDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdF0pCisgICAgICAgICBmaQorICAgICAgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJHJzeW5jX2N2X3NvY2tsZW5fdF9lcXVpdikKKyAgICAgIEFDX0RFRklORV9VTlFVT1RFRChzb2NrbGVuX3QsICRyc3luY19jdl9zb2NrbGVuX3RfZXF1aXYsCisJCQlbdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IGlmIG5vdCBkZWZpbmVkXSldLAorICAgICAgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSkKK10pCisKK2RubCBBQ19IQVZFX1RZUEUoVFlQRSxJTkNMVURFUykKK0FDX0RFRlVOKFtBQ19IQVZFX1RZUEVdLCBbCitBQ19SRVFVSVJFKFtBQ19IRUFERVJfU1REQ10pCitjdj1gZWNobyAiJDEiIHwgc2VkICd5JS4vKy0gJV9fcF9fJSdgCitBQ19NU0dfQ0hFQ0tJTkcoZm9yICQxKQorQUNfQ0FDSEVfVkFMKFthY19jdl90eXBlXyRjdl0sCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCitBQ19JTkNMVURFU19ERUZBVUxUCiskMl1dLAorW1skMSBmb287XV0pXSwKK1tldmFsICJhY19jdl90eXBlXyRjdj15ZXMiXSwKK1tldmFsICJhY19jdl90eXBlXyRjdj1ubyJdKSlkbmwKK2FjX2Zvbz1gZXZhbCBlY2hvIFxcJGFjX2N2X3R5cGVfJGN2YAorQUNfTVNHX1JFU1VMVCgkYWNfZm9vKQoraWYgdGVzdCAiJGFjX2ZvbyIgPSB5ZXM7IHRoZW4KKyAgYWNfdHJfaGRyPUhBVkVfYGVjaG8gJDEgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0gJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXyUnYAoraWYgZmFsc2U7IHRoZW4KKwlBQ19DSEVDS19UWVBFUygkMSkKK2ZpCisgIEFDX0RFRklORV9VTlFVT1RFRCgkYWNfdHJfaGRyLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgYCQxJ10pCitmaQorXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9maWxlcy9yc3luY2QuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDVmNWIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL2ZpbGVzL3JzeW5jZC5jb25mCkBAIC0wLDAgKzEsMTUgQEAKKyMgL2V0Yy9yc3luY2QuY29uZgorCisjIE1pbmltYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciByc3luYyBkYWVtb24KKyMgU2VlIHJzeW5jKDEpIGFuZCByc3luY2QuY29uZig1KSBtYW4gcGFnZXMgZm9yIGhlbHAKKworIyBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgYnkgcnN5bmMgLS1kYWVtb24KK3BpZCBmaWxlID0gL3Zhci9ydW4vcnN5bmNkLnBpZAordXNlIGNocm9vdCA9IHllcworcmVhZCBvbmx5ID0geWVzCisKKyMgU2ltcGxlIGV4YW1wbGUgZm9yIGVuYWJsaW5nIHlvdXIgb3duIGxvY2FsIHJzeW5jIHNlcnZlcgorI1tldmVyeXRoaW5nXQorIwlwYXRoID0gLworIwljb21tZW50ID0gRXZlcnl0aGluZyBleGNlcHQgL2V0YyBleHBvc2VkCisjCWV4Y2x1ZGUgPSAvZXRjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDU0NDUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jLTIuNi45LWZuYW1lLW9iby5wYXRjaApAQCAtMCwwICsxLDcwIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsgVGhlIHBhdGNoIGlzIHJzeW5jLTIuNi45IHNwZWNpZmljIF0KKworVGhlIHBhdGNoIGlzIGZyb20gaHR0cHM6Ly9pc3N1ZXMucnBhdGguY29tL2Jyb3dzZS9SUEwtMTY0NyBhbmQgaXMgdXNlZCB0bworYWRkcmVzcyBodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAwNy00MDkxCisKK0RhdGU6ICAgVHVlIE1heSAxMCAxMDowNzozNiAyMDExICswODAwCitEZXh1YW4gQ3VpIDxkZXh1YW4uY3VpQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3NlbmRlci5jIGIvc2VuZGVyLmMKK2luZGV4IDZmY2FhNjUuLjA1M2E4ZjEgMTAwNjQ0CistLS0gYS9zZW5kZXIuYworKysrIGIvc2VuZGVyLmMKK0BAIC0xMjMsNiArMTIzLDcgQEAgdm9pZCBzdWNjZXNzZnVsX3NlbmQoaW50IG5keCkKKyAJY2hhciBmbmFtZVtNQVhQQVRITEVOXTsKKyAJc3RydWN0IGZpbGVfc3RydWN0ICpmaWxlOworIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OworKwlzaXplX3QgbCA9IDA7CisgCisgCWlmIChuZHggPCAwIHx8IG5keCA+PSB0aGVfZmlsZV9saXN0LT5jb3VudCkKKyAJCXJldHVybjsKK0BAIC0xMzMsNiArMTM0LDIwIEBAIHZvaWQgc3VjY2Vzc2Z1bF9zZW5kKGludCBuZHgpCisgCQkJCSAgICBmaWxlLT5kaXIucm9vdCwgIi8iLCBOVUxMKTsKKyAJfSBlbHNlCisgCQlvZmZzZXQgPSAwOworKworKwlsID0gb2Zmc2V0ICsgMTsKKysJaWYgKGZpbGUpIHsKKysJCWlmIChmaWxlLT5kaXJuYW1lKQorKwkJCWwgKz0gc3RybGVuKGZpbGUtPmRpcm5hbWUpOworKwkJaWYgKGZpbGUtPmJhc2VuYW1lKQorKwkJCWwgKz0gc3RybGVuKGZpbGUtPmJhc2VuYW1lKTsKKysJfQorKworKwlpZiAobCA+PSBzaXplb2YoZm5hbWUpKSB7CisrCQlycHJpbnRmKEZFUlJPUiwgIk92ZXJsb25nIHBhdGhuYW1lXG4iKTsKKysJCWV4aXRfY2xlYW51cChSRVJSX0ZJTEVTRUxFQ1QpOworKwl9CisrCisgCWZfbmFtZShmaWxlLCBmbmFtZSArIG9mZnNldCk7CisgCWlmIChyZW1vdmVfc291cmNlX2ZpbGVzKSB7CisgCQlpZiAoZG9fdW5saW5rKGZuYW1lKSA9PSAwKSB7CitAQCAtMjI0LDYgKzIzOSw3IEBAIHZvaWQgc2VuZF9maWxlcyhzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgaW50IGZfb3V0LCBpbnQgZl9pbikKKyAJZW51bSBsb2djb2RlIGxvZ19jb2RlID0gbG9nX2JlZm9yZV90cmFuc2ZlciA/IEZMT0cgOiBGSU5GTzsKKyAJaW50IGZfeGZlciA9IHdyaXRlX2JhdGNoIDwgMCA/IGJhdGNoX2ZkIDogZl9vdXQ7CisgCWludCBpLCBqOworKwlzaXplX3QgbCA9IDA7CisgCisgCWlmICh2ZXJib3NlID4gMikKKyAJCXJwcmludGYoRklORk8sICJzZW5kX2ZpbGVzIHN0YXJ0aW5nXG4iKTsKK0BAIC0yNTksNiArMjc1LDIwIEBAIHZvaWQgc2VuZF9maWxlcyhzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgaW50IGZfb3V0LCBpbnQgZl9pbikKKyAJCQkJZm5hbWVbb2Zmc2V0KytdID0gJy8nOworIAkJfSBlbHNlCisgCQkJb2Zmc2V0ID0gMDsKKysKKysJCWwgPSBvZmZzZXQgKyAxOworKwkJaWYgKGZpbGUpIHsKKysJCQlpZiAoZmlsZS0+ZGlybmFtZSkKKysJCQkJbCArPSBzdHJsZW4oZmlsZS0+ZGlybmFtZSk7CisrCQkJaWYgKGZpbGUtPmJhc2VuYW1lKQorKwkJCQlsICs9IHN0cmxlbihmaWxlLT5iYXNlbmFtZSk7CisrCQl9CisrCisrCQlpZiAobCA+PSBzaXplb2YoZm5hbWUpKSB7CisrCQkJcnByaW50ZihGRVJST1IsICJPdmVybG9uZyBwYXRobmFtZVxuIik7CisrCQkJZXhpdF9jbGVhbnVwKFJFUlJfRklMRVNFTEVDVCk7CisrCQl9CisrCisgCQlmbmFtZTIgPSBmX25hbWUoZmlsZSwgZm5hbWUgKyBvZmZzZXQpOworIAorIAkJaWYgKHZlcmJvc2UgPiAyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTIuNi45L3JzeW5jZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NWY1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMi42LjkvcnN5bmNkLmNvbmYKQEAgLTAsMCArMSwxNSBAQAorIyAvZXRjL3JzeW5jZC5jb25mCisKKyMgTWluaW1hbCBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHJzeW5jIGRhZW1vbgorIyBTZWUgcnN5bmMoMSkgYW5kIHJzeW5jZC5jb25mKDUpIG1hbiBwYWdlcyBmb3IgaGVscAorCisjIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSByc3luYyAtLWRhZW1vbgorcGlkIGZpbGUgPSAvdmFyL3J1bi9yc3luY2QucGlkCit1c2UgY2hyb290ID0geWVzCityZWFkIG9ubHkgPSB5ZXMKKworIyBTaW1wbGUgZXhhbXBsZSBmb3IgZW5hYmxpbmcgeW91ciBvd24gbG9jYWwgcnN5bmMgc2VydmVyCisjW2V2ZXJ5dGhpbmddCisjCXBhdGggPSAvCisjCWNvbW1lbnQgPSBFdmVyeXRoaW5nIGV4Y2VwdCAvZXRjIGV4cG9zZWQKKyMJZXhjbHVkZSA9IC9ldGMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy0zLjEuMS8wMDAxLUNvbXBsYWluLWlmLWFuLWluYy1yZWN1cnNpdmUtcGF0aC1pcy1ub3QtcmlnaHQtZm9yLWkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2U1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvMDAwMS1Db21wbGFpbi1pZi1hbi1pbmMtcmVjdXJzaXZlLXBhdGgtaXMtbm90LXJpZ2h0LWZvci1pLnBhdGNoCkBAIC0wLDAgKzEsMTM1IEBACitGcm9tIDk2MmY4YjkwMDQ1YWIzMzFmYzA0YzllNjVmODBmMWE1M2U2ODI0M2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXYXluZSBEYXZpc29uIDx3YXluZWRAc2FtYmEub3JnPgorRGF0ZTogV2VkLCAzMSBEZWMgMjAxNCAxMjo0MTowMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBDb21wbGFpbiBpZiBhbiBpbmMtcmVjdXJzaXZlIHBhdGggaXMgbm90IHJpZ2h0IGZvciBpdHMgZGlyLgorIFRoaXMgZW5zdXJlcyB0aGF0IGEgbWFsaWNpb3VzIHNlbmRlciBjYW4ndCB1c2UgYSBqdXN0LXNlbnQgc3ltbGluayBhcyBhCisgdHJhc25mZXIgcGF0aC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrUG9ydAorCitGaXggdGhlIENWRS0yMDE0LTk1MTIsIHJzeW5jIDMuMS4xIGFsbG93cyByZW1vdGUgYXR0YWNrZXJzIHRvIHdyaXRlIHRvIGFyYml0cmFyeQorZmlsZXMgdmlhIGEgc3ltbGluayBhdHRhY2sgb24gYSBmaWxlIGluIHRoZSBzeW5jaHJvbml6YXRpb24gcGF0aC4KKworQmFja1BvcnQgYW5kIGZpeCB0aGlzIHBhdGNoIHRvIG1ha2UgaXQgYWJsZSB0byBhcHBseSB0byBzb3VyY2UgY29kZQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBmbGlzdC5jIHwgMjIgKysrKysrKysrKysrKysrKysrKystLQorIGlvLmMgICAgfCAgMiArLQorIG1haW4uYyAgfCAgNCArKy0tCisgcnN5bmMuYyB8ICAyICstCisgcHJvdG8uaCB8IDIgKy0KKyA2IGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mbGlzdC5jIGIvZmxpc3QuYworaW5kZXggYzI0NjcyZS4uOTJlNGI2NSAxMDA2NDQKKy0tLSBhL2ZsaXN0LmMKKysrKyBiL2ZsaXN0LmMKK0BAIC0yNDM1LDggKzI0MzUsOSBAQCBzdHJ1Y3QgZmlsZV9saXN0ICpzZW5kX2ZpbGVfbGlzdChpbnQgZiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAJcmV0dXJuIGZsaXN0OworIH0KKyAKKy1zdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZikKKytzdHJ1Y3QgZmlsZV9saXN0ICpyZWN2X2ZpbGVfbGlzdChpbnQgZiwgaW50IGRpcl9uZHgpCisgeworKwljb25zdCBjaGFyICpnb29kX2Rpcm5hbWUgPSBOVUxMOworIAlzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdDsKKyAJaW50IGRzdGFydCwgZmxhZ3M7CisgCWludDY0IHN0YXJ0X3JlYWQ7CitAQCAtMjQ5Miw2ICsyNDkzLDIzIEBAIHN0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmKQorIAkJZmxpc3RfZXhwYW5kKGZsaXN0LCAxKTsKKyAJCWZpbGUgPSByZWN2X2ZpbGVfZW50cnkoZiwgZmxpc3QsIGZsYWdzKTsKKyAKKysJCWlmIChpbmNfcmVjdXJzZSkgeworKwkJCXN0YXRpYyBjb25zdCBjaGFyIGVtcHR5X2RpcltdID0gIlwwIjsKKysJCQljb25zdCBjaGFyICpjdXJfZGlyID0gZmlsZS0+ZGlybmFtZSA/IGZpbGUtPmRpcm5hbWUgOiBlbXB0eV9kaXI7CisrCQkJaWYgKHJlbGF0aXZlX3BhdGhzICYmICpjdXJfZGlyID09ICcvJykKKysJCQkJY3VyX2RpcisrOworKwkJCWlmIChjdXJfZGlyICE9IGdvb2RfZGlybmFtZSkgeworKwkJCQljb25zdCBjaGFyICpkID0gZGlyX25keCA+PSAwID8gZl9uYW1lKGRpcl9mbGlzdC0+ZmlsZXNbZGlyX25keF0sIE5VTEwpIDogZW1wdHlfZGlyOworKwkJCQlpZiAoc3RyY21wKGN1cl9kaXIsIGQpICE9IDApIHsKKysJCQkJCXJwcmludGYoRkVSUk9SLAorKwkJCQkJCSJBQk9SVElORyBkdWUgdG8gaW52YWxpZCBkaXIgcHJlZml4IGZyb20gc2VuZGVyOiAlcyAoc2hvdWxkIGJlOiAlcylcbiIsCisrCQkJCQkJY3VyX2RpciwgZCk7CisrCQkJCQlleGl0X2NsZWFudXAoUkVSUl9QUk9UT0NPTCk7CisrCQkJCX0KKysJCQkJZ29vZF9kaXJuYW1lID0gY3VyX2RpcjsKKysJCQl9CisrCQl9CisrCisgCQlpZiAoU19JU1JFRyhmaWxlLT5tb2RlKSkgeworIAkJCS8qIEFscmVhZHkgY291bnRlZCAqLworIAkJfSBlbHNlIGlmIChTX0lTRElSKGZpbGUtPm1vZGUpKSB7CitAQCAtMjYxNSw3ICsyNjMzLDcgQEAgdm9pZCByZWN2X2FkZGl0aW9uYWxfZmlsZV9saXN0KGludCBmKQorIAkJCXJwcmludGYoRklORk8sICJbJXNdIHJlY2VpdmluZyBmbGlzdCBmb3IgZGlyICVkXG4iLAorIAkJCQl3aG9fYW1faSgpLCBuZHgpOworIAkJfQorLQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmKTsKKysJCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZiwgbmR4KTsKKyAJCWZsaXN0LT5wYXJlbnRfbmR4ID0gbmR4OworIAl9CisgfQorZGlmZiAtLWdpdCBhL2lvLmMgYi9pby5jCitpbmRleCBiOWE5YmQwLi5hODY4ZmE5IDEwMDY0NAorLS0tIGEvaW8uYworKysrIGIvaW8uYworQEAgLTE2ODUsNyArMTY4NSw3IEBAIHZvaWQgd2FpdF9mb3JfcmVjZWl2ZXIodm9pZCkKKyAJCQkJcnByaW50ZihGSU5GTywgIlslc10gcmVjZWl2aW5nIGZsaXN0IGZvciBkaXIgJWRcbiIsCisgCQkJCQl3aG9fYW1faSgpLCBuZHgpOworIAkJCX0KKy0JCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGlvYnVmLmluX2ZkKTsKKysJCQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGlvYnVmLmluX2ZkLCBuZHgpOworIAkJCWZsaXN0LT5wYXJlbnRfbmR4ID0gbmR4OworICNpZmRlZiBTVVBQT1JUX0hBUkRfTElOS1MKKyAJCQlpZiAocHJlc2VydmVfaGFyZF9saW5rcykKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKK2luZGV4IGU3YTEzZjcuLjcxM2I4MTggMTAwNjQ0CistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwMDksNyArMTAwOSw3IEBAIHN0YXRpYyB2b2lkIGRvX3NlcnZlcl9yZWN2KGludCBmX2luLCBpbnQgZl9vdXQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQlmaWxlc2Zyb21fZmQgPSAtMTsKKyAJfQorIAorLQlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4pOworKwlmbGlzdCA9IHJlY3ZfZmlsZV9saXN0KGZfaW4sIC0xKTsKKyAJaWYgKCFmbGlzdCkgeworIAkJcnByaW50ZihGRVJST1IsInNlcnZlcl9yZWN2OiByZWN2X2ZpbGVfbGlzdCBlcnJvclxuIik7CisgCQlleGl0X2NsZWFudXAoUkVSUl9GSUxFU0VMRUNUKTsKK0BAIC0xMTgzLDcgKzExODMsNyBAQCBpbnQgY2xpZW50X3J1bihpbnQgZl9pbiwgaW50IGZfb3V0LCBwaWRfdCBwaWQsIGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgCWlmICh3cml0ZV9iYXRjaCAmJiAhYW1fc2VydmVyKQorIAkJc3RhcnRfd3JpdGVfYmF0Y2goZl9pbik7CistCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbik7CisrCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbiwgLTEpOworIAlpZiAoaW5jX3JlY3Vyc2UgJiYgZmlsZV90b3RhbCA9PSAxKQorIAkJcmVjdl9hZGRpdGlvbmFsX2ZpbGVfbGlzdChmX2luKTsKKyAKK2RpZmYgLS1naXQgYS9yc3luYy5jIGIvcnN5bmMuYworaW5kZXggNjhmZjZiMS4uYzNlY2M1MSAxMDA2NDQKKy0tLSBhL3JzeW5jLmMKKysrKyBiL3JzeW5jLmMKK0BAIC0zNjQsNyArMzY0LDcgQEAgaW50IHJlYWRfbmR4X2FuZF9hdHRycyhpbnQgZl9pbiwgaW50IGZfb3V0LCBpbnQgKmlmbGFnX3B0ciwgdWNoYXIgKnR5cGVfcHRyLAorIAkJfQorIAkJLyogU2VuZCBhbGwgdGhlIGRhdGEgd2UgcmVhZCBmb3IgdGhpcyBmbGlzdCB0byB0aGUgZ2VuZXJhdG9yLiAqLworIAkJc3RhcnRfZmxpc3RfZm9yd2FyZChuZHgpOworLQkJZmxpc3QgPSByZWN2X2ZpbGVfbGlzdChmX2luKTsKKysJCWZsaXN0ID0gcmVjdl9maWxlX2xpc3QoZl9pbiwgbmR4KTsKKyAJCWZsaXN0LT5wYXJlbnRfbmR4ID0gbmR4OworIAkJc3RvcF9mbGlzdF9mb3J3YXJkKCk7CisgCX0KK2RpZmYgLS1naXQgYS9wcm90by5oIGIvcHJvdG8uaAoraW5kZXggMjJmYzUzOS4uMjQ3YzU1OCAxMDA2NDQKKy0tLSBhL3Byb3RvLmgKKysrKyBiL3Byb3RvLmgKK0BAIC04OSw3ICs4OSw3IEBAIHN0cnVjdCBmaWxlX3N0cnVjdCAqbWFrZV9maWxlKGNvbnN0IGNoYXIgKmZuYW1lLCBzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwKKyB2b2lkIHVubWFrZV9maWxlKHN0cnVjdCBmaWxlX3N0cnVjdCAqZmlsZSk7Cisgdm9pZCBzZW5kX2V4dHJhX2ZpbGVfbGlzdChpbnQgZiwgaW50IGF0X2xlYXN0KTsKKyBzdHJ1Y3QgZmlsZV9saXN0ICpzZW5kX2ZpbGVfbGlzdChpbnQgZiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cistc3RydWN0IGZpbGVfbGlzdCAqcmVjdl9maWxlX2xpc3QoaW50IGYpOworK3N0cnVjdCBmaWxlX2xpc3QgKnJlY3ZfZmlsZV9saXN0KGludCBmLCBpbnQgZGlyX25keCk7Cisgdm9pZCByZWN2X2FkZGl0aW9uYWxfZmlsZV9saXN0KGludCBmKTsKKyBpbnQgZmxpc3RfZmluZChzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgc3RydWN0IGZpbGVfc3RydWN0ICpmKTsKKyBpbnQgZmxpc3RfZmluZF9pZ25vcmVfZGlybmVzcyhzdHJ1Y3QgZmlsZV9saXN0ICpmbGlzdCwgc3RydWN0IGZpbGVfc3RydWN0ICpmKTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmMtMy4xLjEvcnN5bmMuZ2l0LWVhYzg1ODA4NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmNhYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLTMuMS4xL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2gKQEAgLTAsMCArMSwxMDEgQEAKK0Zyb20gZWFjODU4MDg1ZTNhYzk0ZWMwYWI1MDYxZDExZjUyNjUyYzkwYTg2OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdheW5lIERhdmlzb24gPHdheW5lZEBzYW1iYS5vcmc+CitEYXRlOiBNb24sIDExIE1heSAyMDE1IDEyOjM2OjIwIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBBZGQgY29tcGF0IGZsYWcgdG8gYWxsb3cgcHJvcGVyIHNlZWQgY2hlY2tzdW0gb3JkZXIuCisgRml4ZXMgdGhlIGVxdWl2YWxlbnQgb2YgbGlicnN5bmMncyBDVkUtMjAxNC04MjQyIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNoZWNrc3VtLmMgfCAxNyArKysrKysrKysrKysrLS0tLQorIGNvbXBhdC5jICAgfCAgNSArKysrKworIG9wdGlvbnMuYyAgfCAgMSArCisgMyBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY2hlY2tzdW0uYyBiL2NoZWNrc3VtLmMKK2luZGV4IGExYzJhYTIuLjkzM2I1MTQgMTAwNjQ0CistLS0gYS9jaGVja3N1bS5jCisrKysgYi9jaGVja3N1bS5jCitAQCAtMjMsNiArMjMsNyBAQAorIAorIGV4dGVybiBpbnQgY2hlY2tzdW1fc2VlZDsKKyBleHRlcm4gaW50IHByb3RvY29sX3ZlcnNpb247CisrZXh0ZXJuIGludCBwcm9wZXJfc2VlZF9vcmRlcjsKKyAKKyAvKgorICAgYSBzaW1wbGUgMzIgYml0IGNoZWNrc3VtIHRoYXQgY2FuIGJlIHVwYWR0ZWQgZnJvbSBlaXRoZXIgZW5kCitAQCAtNTQsMTAgKzU1LDE4IEBAIHZvaWQgZ2V0X2NoZWNrc3VtMihjaGFyICpidWYsIGludDMyIGxlbiwgY2hhciAqc3VtKQorIAlpZiAocHJvdG9jb2xfdmVyc2lvbiA+PSAzMCkgeworIAkJdWNoYXIgc2VlZGJ1Zls0XTsKKyAJCW1kNV9iZWdpbigmbSk7CistCQltZDVfdXBkYXRlKCZtLCAodWNoYXIgKilidWYsIGxlbik7CistCQlpZiAoY2hlY2tzdW1fc2VlZCkgeworLQkJCVNJVkFMdShzZWVkYnVmLCAwLCBjaGVja3N1bV9zZWVkKTsKKy0JCQltZDVfdXBkYXRlKCZtLCBzZWVkYnVmLCA0KTsKKysJCWlmIChwcm9wZXJfc2VlZF9vcmRlcikgeworKwkJCWlmIChjaGVja3N1bV9zZWVkKSB7CisrCQkJCVNJVkFMdShzZWVkYnVmLCAwLCBjaGVja3N1bV9zZWVkKTsKKysJCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQkJfQorKwkJCW1kNV91cGRhdGUoJm0sICh1Y2hhciAqKWJ1ZiwgbGVuKTsKKysJCX0gZWxzZSB7CisrCQkJbWQ1X3VwZGF0ZSgmbSwgKHVjaGFyICopYnVmLCBsZW4pOworKwkJCWlmIChjaGVja3N1bV9zZWVkKSB7CisrCQkJCVNJVkFMdShzZWVkYnVmLCAwLCBjaGVja3N1bV9zZWVkKTsKKysJCQkJbWQ1X3VwZGF0ZSgmbSwgc2VlZGJ1ZiwgNCk7CisrCQkJfQorIAkJfQorIAkJbWQ1X3Jlc3VsdCgmbSwgKHVjaGFyICopc3VtKTsKKyAJfSBlbHNlIHsKK2RpZmYgLS1naXQgYS9jb21wYXQuYyBiL2NvbXBhdC5jCitpbmRleCAyNDU0OTM3Li5mODlkNDY2IDEwMDY0NAorLS0tIGEvY29tcGF0LmMKKysrKyBiL2NvbXBhdC5jCitAQCAtMjcsNiArMjcsNyBAQCBpbnQgaW5jX3JlY3Vyc2UgPSAwOworIGludCBjb21wYXRfZmxhZ3MgPSAwOworIGludCB1c2Vfc2FmZV9pbmNfZmxpc3QgPSAwOworIGludCB3YW50X3hhdHRyX29wdGltID0gMDsKKytpbnQgcHJvcGVyX3NlZWRfb3JkZXIgPSAwOworIAorIGV4dGVybiBpbnQgYW1fc2VydmVyOworIGV4dGVybiBpbnQgYW1fc2VuZGVyOworQEAgLTc4LDYgKzc5LDcgQEAgaW50IGZpbGVzZnJvbV9jb252ZXJ0ID0gMDsKKyAjZGVmaW5lIENGX1NZTUxJTktfSUNPTlYgKDE8PDIpCisgI2RlZmluZSBDRl9TQUZFX0ZMSVNUCSAoMTw8MykKKyAjZGVmaW5lIENGX0FWT0lEX1hBVFRSX09QVElNICgxPDw0KQorKyNkZWZpbmUgQ0ZfQ0hLU1VNX1NFRURfRklYICgxPDw1KQorIAorIHN0YXRpYyBjb25zdCBjaGFyICpjbGllbnRfaW5mbzsKKyAKK0BAIC0yNzEsMTIgKzI3MywxNSBAQCB2b2lkIHNldHVwX3Byb3RvY29sKGludCBmX291dCxpbnQgZl9pbikKKyAJCQkJY29tcGF0X2ZsYWdzIHw9IENGX1NBRkVfRkxJU1Q7CisgCQkJaWYgKGxvY2FsX3NlcnZlciB8fCBzdHJjaHIoY2xpZW50X2luZm8sICd4JykgIT0gTlVMTCkKKyAJCQkJY29tcGF0X2ZsYWdzIHw9IENGX0FWT0lEX1hBVFRSX09QVElNOworKwkJCWlmIChsb2NhbF9zZXJ2ZXIgfHwgc3RyY2hyKGNsaWVudF9pbmZvLCAnQycpICE9IE5VTEwpCisrCQkJCWNvbXBhdF9mbGFncyB8PSBDRl9DSEtTVU1fU0VFRF9GSVg7CisgCQkJd3JpdGVfYnl0ZShmX291dCwgY29tcGF0X2ZsYWdzKTsKKyAJCX0gZWxzZQorIAkJCWNvbXBhdF9mbGFncyA9IHJlYWRfYnl0ZShmX2luKTsKKyAJCS8qIFRoZSBpbmNfcmVjdXJzZSB2YXIgTVVTVCBiZSBzZXQgdG8gMCBvciAxLiAqLworIAkJaW5jX3JlY3Vyc2UgPSBjb21wYXRfZmxhZ3MgJiBDRl9JTkNfUkVDVVJTRSA/IDEgOiAwOworIAkJd2FudF94YXR0cl9vcHRpbSA9IHByb3RvY29sX3ZlcnNpb24gPj0gMzEgJiYgIShjb21wYXRfZmxhZ3MgJiBDRl9BVk9JRF9YQVRUUl9PUFRJTSk7CisrCQlwcm9wZXJfc2VlZF9vcmRlciA9IGNvbXBhdF9mbGFncyAmIENGX0NIS1NVTV9TRUVEX0ZJWCA/IDEgOiAwOworIAkJaWYgKGFtX3NlbmRlcikgeworIAkJCXJlY2VpdmVyX3N5bWxpbmtfdGltZXMgPSBhbV9zZXJ2ZXIKKyAJCQkgICAgPyBzdHJjaHIoY2xpZW50X2luZm8sICdMJykgIT0gTlVMTAorZGlmZiAtLWdpdCBhL29wdGlvbnMuYyBiL29wdGlvbnMuYworaW5kZXggMTljMmI3ZC4uNDEyOGI1OSAxMDA2NDQKKy0tLSBhL29wdGlvbnMuYworKysrIGIvb3B0aW9ucy5jCitAQCAtMjUwMyw2ICsyNTAzLDcgQEAgdm9pZCBzZXJ2ZXJfb3B0aW9ucyhjaGFyICoqYXJncywgaW50ICphcmdjX3ApCisgI2VuZGlmCisgCQlhcmdzdHJbeCsrXSA9ICdmJzsgLyogZmxpc3QgSS9PLWVycm9yIHNhZmV0eSBzdXBwb3J0ICovCisgCQlhcmdzdHJbeCsrXSA9ICd4JzsgLyogeGF0dHIgaGFyZGxpbmsgb3B0aW1pemF0aW9uIG5vdCBkZXNpcmVkICovCisrCQlhcmdzdHJbeCsrXSA9ICdDJzsgLyogc3VwcG9ydCBjaGVja3N1bSBzZWVkIG9yZGVyIGZpeCAqLworIAl9CisgCisgCWlmICh4ID49IChpbnQpc2l6ZW9mIGFyZ3N0cikgeyAvKiBOb3QgcG9zc2libGUuLi4gKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1ZjI3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luYy5pbmMKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJGaWxlIHN5bmNocm9uaXphdGlvbiB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvYnVnemlsbGEuaHRtbCIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCisjIEdQTHYyKyAoPDwgMy4wLjApLCBHUEx2MysgKD49IDMuMC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworIyBuZWVkcyB0byBhZGQgYWNsIGFuZCBhdHRyCitERVBFTkRTID0gInBvcHQiCisKK1NSQ19VUkkgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9mdHAvcnN5bmMvc3JjL3JzeW5jLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yc3luY2QuY29uZiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JzeW5jZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9Cit9CisKK0VYVFJBX09FTUFLRT0nU1RSSVA9IiInCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMi42LjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1NGM3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9yc3luYy9yc3luY18yLjYuOS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkZpbGUgc3luY2hyb25pemF0aW9uIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vcnN5bmMuc2FtYmEub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3JzeW5jLnNhbWJhLm9yZy9idWd6aWxsYS5odG1sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKKyMgbmVlZHMgdG8gYWRkIGFjbCBhbmQgYXR0cgorREVQRU5EUyA9ICJwb3B0IgorCitTUkNfVVJJID0gImh0dHA6Ly9yc3luYy5zYW1iYS5vcmcvZnRwL3JzeW5jL3NyYy9yc3luYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnN5bmMtMi42LjktZm5hbWUtb2JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JzeW5jZC5jb25mIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTk2ZDhkODgzMWRiY2ExNzkxMDA5NGU1NmRjYjU5NDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2E0MzczMDFiZWNkODkwZTczMzAwYmM2OWEzOTE4OWZmMTU2NGJhYTc2MTk0OGZmMTQ5YjNkZDdiZGU2MzNmOSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JzeW5jZC5jb25mICR7RH0ke3N5c2NvbmZkaXJ9Cit9CisKK0VYVFJBX09FTUFLRT0nU1RSSVA9IiInCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmQ1YTlkNGM0ZDNhZjI1Y2Q2OGZkODNlOGE4Y2IwOWMiCisKK1BSID0gInI0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3JzeW5jL3JzeW5jXzMuMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnN5bmMvcnN5bmNfMy4xLjEuYmIKQEAgLTAsMCArMSwzMCBAQAorcmVxdWlyZSByc3luYy5pbmMKKworCitTUkNfVVJJICs9ICJmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLUNvbXBsYWluLWlmLWFuLWluYy1yZWN1cnNpdmUtcGF0aC1pcy1ub3QtcmlnaHQtZm9yLWkucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3JzeW5jLmdpdC1lYWM4NTgwODUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNiZDY2NzZmMGI0MDQzMjZlZWUyZDYzYmUzY2RjZmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RlNDM2NGZjZjVmZTQyZjNiZGI1MTQ0MTdmMWM0MGQxMGJiY2E4OTZhYmU3ZTdmMmM1ODFjNmVhMDhhMjYyMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImFjbCBhdHRyIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0tZW5hYmxlLWFjbC1zdXBwb3J0LC0tZGlzYWJsZS1hY2wtc3VwcG9ydCxhY2wsIgorUEFDS0FHRUNPTkZJR1thdHRyXSA9ICItLWVuYWJsZS14YXR0ci1zdXBwb3J0LC0tZGlzYWJsZS14YXR0ci1zdXBwb3J0LGF0dHIsIgorCisjIHJzeW5jIDMuMCB1c2VzIGNvbmZpZ3VyZS5zaCBpbnN0ZWFkIG9mIGNvbmZpZ3VyZSwgYW5kCisjIG1ha2VmaWxlIGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGNvbmZpZ3VyZS5zaAorZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vY29uZmlndXJlICR7U30vY29uZmlndXJlLnNoCisJY3AgLWYgJHtXT1JLRElSfS9hY2luY2x1ZGUubTQgJHtTfS8KKworCSMgQnkgZGVmYXVsdCwgaWYgY3Jvc3Njb21waWxpbmcsIHJzeW5jIGRpc2FibGVzIGEgbnVtYmVyIG9mCisJIyBjYXBhYmlsaXRpZXMsIGhhcmRsaW5raW5nIHN5bWxpbmtzIGFuZCBzcGVjaWFsIGZpbGVzIChpLmUuIGRldmljZXMpCisJZXhwb3J0IHJzeW5jX2N2X2Nhbl9oYXJkbGlua19zcGVjaWFsPXllcworCWV4cG9ydCByc3luY19jdl9jYW5faGFyZGxpbmtfc3ltbGluaz15ZXMKK30KKworZG9fY29uZmlndXJlX2FwcGVuZCAoKSB7CisJY3AgLWYgJHtTfS9jb25maWd1cmUgJHtTfS9jb25maWd1cmUuc2gKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhYTc4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkuaW5jCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiQW4gaW50ZXJwcmV0ZXIgb2Ygb2JqZWN0LW9yaWVudGVkIHNjcmlwdGluZyBsYW5ndWFnZSIKK0RFU0NSSVBUSU9OID0gIlJ1YnkgaXMgYW4gaW50ZXJwcmV0ZWQgc2NyaXB0aW5nIGxhbmd1YWdlIGZvciBxdWljayBcCithbmQgZWFzeSBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcuIEl0IGhhcyBtYW55IGZlYXR1cmVzIHRvIHByb2Nlc3MgXAordGV4dCBmaWxlcyBhbmQgdG8gZG8gc3lzdGVtIG1hbmFnZW1lbnQgdGFza3MgKGFzIGluIFBlcmwpLiBcCitJdCBpcyBzaW1wbGUsIHN0cmFpZ2h0LWZvcndhcmQsIGFuZCBleHRlbnNpYmxlLiBcCisiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnJ1YnktbGFuZy5vcmcvIgorU0VDVElPTiA9ICJkZXZlbC9ydWJ5IgorTElDRU5TRSA9ICJSdWJ5IHwgQlNEIHwgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9ODM3YjMyNTkzNTE3YWU0OGI5YzNiNWM4N2E1ZDI4OGMgXAorICAgIGZpbGU6Ly9CU0RMO21kNT0xOWFhZjY1Yzg4YTQwYjUwOGQxN2FlNGJlNTM5YzRiNVwKKyAgICBmaWxlOi8vR1BMO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2M1wKKyAgICBmaWxlOi8vTEVHQUw7bWQ1PWM0NDBhZGI1NzViYTRlNmUyMzQ0YzI2MzBiNmE1NTg0XAorIgorCitERVBFTkRTID0gInJ1YnktbmF0aXZlIHpsaWIgb3BlbnNzbCB0Y2wgbGlieWFtbCBkYiBnZGJtIHJlYWRsaW5lIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieWFtbC1uYXRpdmUiCisKK1NIUlRfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gImh0dHA6Ly9jYWNoZS5ydWJ5LWxhbmcub3JnL3B1Yi9ydWJ5LyR7U0hSVF9WRVJ9L3J1YnktJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2V4dG1rLnBhdGNoIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworCisjIFRoaXMgc25pcHBldCBsZXRzIGNvbXBpbGVkIGV4dGVuc2lvbnMgd2hpY2ggcmVseSBvbiBleHRlcm5hbCBsaWJyYXJpZXMsCisjIHN1Y2ggYXMgemxpYiwgY29tcGlsZSBwcm9wZXJseS4gIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gd2hlbiBleHRtay5yYgorIyBydW5zLCBpdCB1c2VzIHRoZSBuYXRpdmUgbGlicmFyaWVzIGluc3RlYWQgb2YgdGhlIHRhcmdldCBsaWJyYXJpZXMsIGFuZCBzbworIyBub25lIG9mIHRoZSBsaW5raW5nIG9wZXJhdGlvbnMgc3VjY2VlZCAtLSB3aGljaCBtYWtlcyBleHRjb25mLnJiIHRoaW5rCisjIHRoYXQgdGhlIGxpYnJhcmllcyBhcmVuJ3QgYXZhaWxhYmxlIGFuZCBoZW5jZSB0aGF0IHRoZSBleHRlbnNpb24gY2FuJ3QgYmUKKyMgYnVpbHQuCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAicyMlJVRBUkdFVF9DRkxBR1MlJSMkVEFSR0VUX0NGTEFHUyM7IHMjJSVUQVJHRVRfTERGTEFHUyUlIyRUQVJHRVRfTERGTEFHUyMiICR7U30vY29tbW9uLm1rCisgICAgcm0gLXJmICR7U30vcnVieS8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnkvZXh0bWsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjg0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVieS9ydWJ5L2V4dG1rLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLXJ1IHJ1YnktMS44LjctcDI0OC5vcmlnL2V4dC9leHRtay5yYiBydWJ5LTEuOC43LXAyNDgvZXh0L2V4dG1rLnJiCistLS0gcnVieS0xLjguNy1wMjQ4Lm9yaWcvZXh0L2V4dG1rLnJiCTIwMDktMTItMjQgMDM6MDE6NTguMDAwMDAwMDAwIC0wNjAwCisrKysgcnVieS0xLjguNy1wMjQ4L2V4dC9leHRtay5yYgkyMDEwLTAyLTEyIDE1OjU1OjI3LjM3MDA2MTU1OCAtMDYwMAorQEAgLTM1NCw4ICszNTQsOCBAQAorICAgJHJ1YnkgPSAnJCh0b3BkaXIpL21pbmlydWJ5JyArIEVYRUVYVAorIGVuZAorICRydWJ5IDw8ICIgLUknJCh0b3BkaXIpJyIKKyskcnVieSA8PCAiIC1JJyQodG9wX3NyY2RpcikvbGliJyIKKyB1bmxlc3MgQ1JPU1NfQ09NUElMSU5HCistICAkcnVieSA8PCAiIC1JJyQodG9wX3NyY2RpcikvbGliJyIKKyAgICRydWJ5IDw8ICIgLUknJChleHRvdXQpLyQoYXJjaCknIC1JJyQoZXh0b3V0KS9jb21tb24nIiBpZiAkZXh0b3V0CisgICAkcnVieSA8PCAiIC1JLi8tIC1JJyQodG9wX3NyY2RpcikvZXh0JyAtcnB1cmVsaWIucmIiCisgICBFTlZbIlJVQllMSUIiXSA9ICItIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1YnkvcnVieV8yLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjOTQzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydWJ5L3J1YnlfMi4yLjIuYmIKQEAgLTAsMCArMSw0MiBAQAorcmVxdWlyZSBydWJ5LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiMzI2ZTk5ZGRjNzUzODFjN2I1MGM4NWY3MDg5ZjMyNjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZmYzBmMzE3ZTQyOWU2YjI5ZDRhOThhYzUyMWMzY2U2NTQ4MWJmZDIyYThjZjg0NWZhMDJhN2IxMTNkOWI0NCIKKworIyBpdCdzIHVua25vd24gdG8gY29uZmlndXJlIHNjcmlwdCwgYnV0IHRoZW4gcGFzc2VkIHRvIGV4dGNvbmYucmIKKyMgbWF5YmUgaXQncyBub3QgcmVhbGx5IG5lZWRlZCBhcyB3ZSdyZSBoYXJkY29kaW5nIHRoZSByZXN1bHQgd2l0aAorIyAwMDAxLXNvY2tldC1leHRjb25mLWhhcmRjb2RlLXdpZGUtZ2V0YWRkci1pbmZvLXRlc3Qtb3V0Y28ucGF0Y2gKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUcgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnaXB2NicsICdpcHY2JywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS13aXRoLXZhbGdyaW5kPXllcywgLS13aXRoLXZhbGdyaW5kPW5vLCB2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbZ3BtXSA9ICItLXdpdGgtZ21wPXllcywgLS13aXRoLWdtcD1ubywgZ21wIgorUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICIsLS1lbmFibGUtd2lkZS1nZXRhZGRyaW5mbywiCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgLS1kaXNhYmxlLXZlcnNpb25lZC1wYXRocyBcCisgICAgLS1kaXNhYmxlLXJwYXRoIFwKKyAgICAtLWRpc2FibGUtZHRyYWNlIFwKKyAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgIC0tZW5hYmxlLWxvYWQtcmVsYXRpdmUgXAorIgorCitFWFRSQV9PRU1BS0UgPSAiIFwKKyAgICBMSUJSVUJZQVJHPSctbHJ1Ynktc3RhdGljJyBcCisiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3J1YnlnZW1zIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3JpIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9ydWJ5LyovLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3J1YnkvKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ydWJ5LyovKi8qLyovLmRlYnVnIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2E4ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgMjAwNyBPcGVuZWRoYW5kIEx0ZC4KKyMKKyMgQXV0aG9yOiBSaWNoYXJkIFB1cmRpZSA8cnB1cmRpZUBvcGVuZWRoYW5kLmNvbT4KKyMKKworIyBUaGUgZm9sbG93aW5nIHNjcmlwdCB3aWxsIHJ1biBhbGwgdGhlIHNjcmlwdGxldHMgZm91bmQgaW4gI1NZU0NPTkZESVIjL2RlYi1wb3N0aW5zdHMsCisjICNTWVNDT05GRElSIy9pcGstcG9zdGluc3RzIG9yICNTWVNDT05GRElSIy9ycG0tcG9zaW5zdHMuCisKKyMgdGhlIG9yZGVyIG9mIHRoaXMgbGlzdCBpcyBpbXBvcnRhbnQsIGRvIG5vdCBjaGFuZ2UhCitiYWNrZW5kX2xpc3Q9InJwbSBkZWIgaXBrIgorCitwbV9pbnN0YWxsZWQ9ZmFsc2UKKworZm9yIHBtIGluICRiYWNrZW5kX2xpc3Q7IGRvCisJcGlfZGlyPSIjU1lTQ09ORkRJUiMvJHBtLXBvc3RpbnN0cyIKKworCVsgLWQgJHBpX2RpciBdICYmIGJyZWFrCisKKwljYXNlICRwbSBpbgorCQkiZGViIikKKwkJCWlmIFsgLXMgIiNMT0NBTFNUQVRFRElSIy9saWIvZHBrZy9zdGF0dXMiIF07IHRoZW4KKwkJCQlwbV9pbnN0YWxsZWQ9dHJ1ZQorCQkJCWJyZWFrCisJCQlmaQorCQkJOzsKKworCQkiaXBrIikKKwkJCWlmIFsgLXMgIi92YXIvbGliL29wa2cvc3RhdHVzIiBdOyB0aGVuCisJCQkJcG1faW5zdGFsbGVkPXRydWUKKwkJCQlicmVhaworCQkJZmkKKwkJCTs7CisJZXNhYworZG9uZQorCityZW1vdmVfcmNzZF9saW5rICgpIHsKKwlpZiBbIC1uICJgd2hpY2ggdXBkYXRlLXJjLmRgIiBdOyB0aGVuCisJCXVwZGF0ZS1yYy5kIC1mIHJ1bi1wb3N0aW5zdHMgcmVtb3ZlCisJZmkKK30KKworaWYgWyAteiAiJHBpX2RpciIgXTsgdGhlbgorCXJlbW92ZV9yY3NkX2xpbmsKKwlleGl0IDAKK2ZpCisKK1sgLWUgI1NZU0NPTkZESVIjL2RlZmF1bHQvcG9zdGluc3QgXSAmJiAuICNTWVNDT05GRElSIy9kZWZhdWx0L3Bvc3RpbnN0CisKK2lmIFsgIiRQT1NUSU5TVF9MT0dHSU5HIiA9ICIxIiBdOyB0aGVuCisJcm0gLWYgJExPR0ZJTEUKKwlhcHBlbmRfbG9nPSI+PiRMT0dGSUxFIDI+JjEiCitmaQorCitleGVjX3Bvc3RpbnN0X3NjcmlwdGxldHMoKSB7CisJZm9yIGkgaW4gYGxzICRwaV9kaXJgOyBkbworCQlpPSRwaV9kaXIvJGkKKwkJZWNobyAiUnVubmluZyBwb3N0aW5zdCAkaS4uLiIKKwkJWyAiJFBPU1RJTlNUX0xPR0dJTkciID0gIjEiIF0gJiYgZXZhbCBlY2hvICJSdW5uaW5nIHBvc3RpbnN0ICRpLi4uIiAkYXBwZW5kX2xvZworCQlpZiBbIC14ICRpIF07IHRoZW4KKwkJCWV2YWwgc2ggLWMgJGkgJGFwcGVuZF9sb2cKKwkJCXJtICRpCisJCWVsc2UKKwkJCWVjaG8gIkVSUk9SOiBwb3N0aW5zdCAkaSBmYWlsZWQuIgorCQkJWyAiJFBPU1RJTlNUX0xPR0dJTkciID0gIjEiIF0gJiYgZXZhbCBlY2hvICJFUlJPUjogcG9zdGluc3QgJGkgZmFpbGVkLiIgJGFwcGVuZF9sb2cKKwkJCXJlbW92ZV9waV9kaXI9MAorCQlmaQorCWRvbmUKK30KKworcmVtb3ZlX3BpX2Rpcj0xCitpZiAkcG1faW5zdGFsbGVkOyB0aGVuCisJY2FzZSAkcG0gaW4KKwkJImlwayIpCisJCQlldmFsIG9wa2cgY29uZmlndXJlICRhcHBlbmRfbG9nCisJCQk7OworCisJCSJkZWIiKQorCQkJZXZhbCBkcGtnIC0tY29uZmlndXJlIC1hICRhcHBlbmRfbG9nCisJCQk7OworCWVzYWMKK2Vsc2UKKwlleGVjX3Bvc3RpbnN0X3NjcmlwdGxldHMKK2ZpCisKKyMgc2luY2UgYWxsIHBvc3RpbnN0YWxscyBleGVjdXRlZCBzdWNjZXNzZnVsbHksIHJlbW92ZSB0aGUgcG9zdGluc3RhbGxzIGRpcmVjdG9yeQorIyBhbmQgdGhlIHJjUy5kIGxpbmsKK2lmIFsgJHJlbW92ZV9waV9kaXIgPSAxIF07IHRoZW4KKwlybSAtcmYgJHBpX2RpcgorCXJlbW92ZV9yY3NkX2xpbmsKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3M2ExZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuaW5pdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCitydW4tcG9zdGluc3RzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZSBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTA0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzL3J1bi1wb3N0aW5zdHMuc2VydmljZQpAQCAtMCwwICsxLDE2IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJ1biBwZW5kaW5nIHBvc3RpbnN0cworRGVmYXVsdERlcGVuZGVuY2llcz1ubworQWZ0ZXI9c3lzdGVtZC1yZW1vdW50LWZzLnNlcnZpY2Ugc3lzdGVtZC10bXBmaWxlcy1zZXR1cC5zZXJ2aWNlIHRtcC5tb3VudAorQmVmb3JlPXN5c2luaXQudGFyZ2V0CitDb25kaXRpb25QYXRoRXhpc3RzR2xvYj0jU1lTQ09ORkRJUiMvKi1wb3N0aW5zdHMKKworW1NlcnZpY2VdCitUeXBlPW9uZXNob3QKK0V4ZWNTdGFydD0jU0JJTkRJUiMvcnVuLXBvc3RpbnN0cworRXhlY1N0YXJ0UG9zdD0jQkFTRV9CSU5ESVIjL3N5c3RlbWN0bCBkaXNhYmxlIHJ1bi1wb3N0aW5zdHMuc2VydmljZQorUmVtYWluQWZ0ZXJFeGl0PU5vCitUaW1lb3V0U2VjPTAKKworW0luc3RhbGxdCitXYW50ZWRCeT1zeXNpbml0LnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvcnVuLXBvc3RpbnN0cy9ydW4tcG9zdGluc3RzXzEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWM5NGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3J1bi1wb3N0aW5zdHMvcnVuLXBvc3RpbnN0c18xLjAuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJSdW5zIHBvc3RpbnN0YWxsIHNjcmlwdHMgb24gZmlyc3QgYm9vdCBvZiB0aGUgdGFyZ2V0IGRldmljZSIKK1NFQ1RJT04gPSAiZGV2ZWwiCitQUiA9ICJyOSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3J1bi1wb3N0aW5zdHMgXAorICAgICAgICAgICBmaWxlOi8vcnVuLXBvc3RpbnN0cy5pbml0IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wb3N0aW5zdHMuc2VydmljZSIKKworUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2ggc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAicnVuLXBvc3RpbnN0cyIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IFMgLiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gInJ1bi1wb3N0aW5zdHMuc2VydmljZSIKKworZG9fY29uZmlndXJlKCkgeworCToKK30KKworZG9fY29tcGlsZSAoKSB7CisJOgorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9ydW4tcG9zdGluc3RzICR7RH0ke3NiaW5kaXJ9LworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnVuLXBvc3RpbnN0cy5pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9ydW4tcG9zdGluc3RzCisKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3J1bi1wb3N0aW5zdHMuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8KKworCXNlZCAtaSAtZSAnczojU1lTQ09ORkRJUiM6JHtzeXNjb25mZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojU0JJTkRJUiM6JHtzYmluZGlyfTpnJyBcCisgICAgICAgICAgICAgICAtZSAnczojQkFTRV9CSU5ESVIjOiR7YmFzZV9iaW5kaXJ9OmcnIFwKKyAgICAgICAgICAgICAgIC1lICdzOiNMT0NBTFNUQVRFRElSIzoke2xvY2Fsc3RhdGVkaXJ9OmcnIFwKKyAgICAgICAgICAgICAgICR7RH0ke3NiaW5kaXJ9L3J1bi1wb3N0aW5zdHMgXAorICAgICAgICAgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcnVuLXBvc3RpbnN0cy5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvYXV0b2hlbGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzOWIwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9hdXRvaGVsbC5wYXRjaApAQCAtMCwwICsxLDYxIEBACitQYXRjaCBvYnRhaW5lZCBmcm9tIE9wZW5FbWJlZGRlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gc2dtbC1jb21tb24tMC42LjMvYmluL01ha2VmaWxlLmFtfmF1dG9oZWxsLnBhdGNoCTIwMDEtMDEtMzAgMTU6NDI6MjEuMDAwMDAwMDAwICswMTAwCisrKysgc2dtbC1jb21tb24tMC42LjMvYmluL01ha2VmaWxlLmFtCTIwMDQtMDYtMTcgMTE6NTE6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMSw2ICsxLDUgQEAKKyBwcmltaXRpdmVfc2NyaXB0cyA9IHNnbWx3aGljaAorIAorLWJpbmRpciA9ICQocHJlZml4KS9iaW4KKyBiaW5fU0NSSVBUUyA9IGluc3RhbGwtY2F0YWxvZyAkKHByaW1pdGl2ZV9zY3JpcHRzKQorIAorIEVYVFJBX0RJU1QgPSAgaW5zdGFsbC1jYXRhbG9nLmluICQocHJpbWl0aXZlX3NjcmlwdHMpCistLS0gL2Rldi9udWxsCTIwMDMtMDktMjMgMTk6NTk6MjIuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvYmluL3NnbWx3aGljaC5pbgkyMDA0LTA2LTE3IDExOjUxOjExLjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3IEBACisrIyEvYmluL3NoCisrIyBMb2NhdGlvbiBvZiB0aGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgZm9yIGNvbnNpc3RlbmN5IHdpdGggbm9uLUxTQiBwbGF0Zm9ybXMKKysjIFNlbmQgYW55IGNvbW1lbnRzIHRvIEVyaWMgQmlzY2hvZmYgPGVyaWNAY2FsZGVyYS5kZT4KKysjIFRoaXMgcHJvZ3JhbSBpcyB1bmRlciBHUEwgbGljZW5zZS4gU2VlIExJQ0VOU0UgZmlsZSBmb3IgZGV0YWlscy4KKysKKytlY2hvICJAc3lzY29uZmRpckAvc2dtbC9zZ21sLmNvbmYiCisrIyBTaW1wbGUsIGlzbid0IGl0PyA7LSkKKy0tLSAvZGV2L251bGwJMjAwMy0wOS0yMyAxOTo1OToyMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9jb25maWcvc2dtbC5jb25mLmluCTIwMDQtMDYtMTcgMTE6NTE6MTEuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDIgQEAKKytTR01MX0JBU0VfRElSPUBkYXRhZGlyQC9zZ21sCisrU0dNTF9DQVRBTE9HU19ESVI9QHN5c2NvbmZkaXJAL3NnbWwKKy0tLSBzZ21sLWNvbW1vbi0wLjYuMy9jb25maWd1cmUuaW5+YXV0b2hlbGwucGF0Y2gJMjAwMS0wNS0yNSAxODo0MDo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBzZ21sLWNvbW1vbi0wLjYuMy9jb25maWd1cmUuaW4JMjAwNC0wNi0xNyAxMTo1MzoyMi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zLDExICszLDYgQEAKKyAKKyBBTV9JTklUX0FVVE9NQUtFKHNnbWwtY29tbW9uLCAwLjYuMykKKyAKKy1kb2NkaXI9JyQocHJlZml4KS9kb2MnCistQUNfU1VCU1QoZG9jZGlyKQorLQorLWRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorLQorIGRubCBDaGVja3MgZm9yIGxpYnJhcmllcy4KKyAKKyBkbmwgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitAQCAtMTgsNiArMTMsNSBAQAorIAorIEFDX09VVFBVVChNYWtlZmlsZSBcCisgICAgICAgICAgIGJpbi9NYWtlZmlsZSBiaW4vaW5zdGFsbC1jYXRhbG9nIFwKKy0gICAgICAgICAgY29uZmlnL01ha2VmaWxlIFwKKy0gICAgICAgICAgZG9jL01ha2VmaWxlIGRvYy9IVE1ML01ha2VmaWxlIGRvYy9tYW4vTWFrZWZpbGUgZG9jL3JlZmVudHJ5L01ha2VmaWxlIFwKKysgICAgICAgICAgY29uZmlnL01ha2VmaWxlIGNvbmZpZy9zZ21sLmNvbmYgYmluL3NnbWx3aGljaCBcCisgICAgICAgICAgIHNnbWwtaXNvLWVudGl0aWVzL01ha2VmaWxlIHhtbC1pc28tZW50aXRpZXMvTWFrZWZpbGUpCisKKy0tLSBzZ21sLWNvbW1vbi0wLjYuMy9NYWtlZmlsZS5hbX5uby1kb2NzCTIwMDEtMDUtMjUgMTg6MjI6MDEuMDAwMDAwMDAwICswMjAwCisrKysgc2dtbC1jb21tb24tMC42LjMvTWFrZWZpbGUuYW0JMjAwNC0wNi0xNyAxMTo0OTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xLDQgKzEsNCBAQAorLVNVQkRJUlMgPSBiaW4gY29uZmlnIGRvYyBzZ21sLWlzby1lbnRpdGllcyB4bWwtaXNvLWVudGl0aWVzCisrU1VCRElSUyA9IGJpbiBjb25maWcgc2dtbC1pc28tZW50aXRpZXMgeG1sLWlzby1lbnRpdGllcworIAorIHNnbWxjb2RpciA9ICQocHJlZml4KS9zaGFyZS9zZ21sCisgc2dtbGNvX0RBVEEgPSB4bWwuZGNsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi0wLjYuMy9saWNlbnNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjNmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbC1jb21tb24vc2dtbC1jb21tb24tMC42LjMvbGljZW5zZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitUaGUgQ09QWUlORyBmaWxlIHNnbWwtY29tbW9uIHNoaXBzIHdpdGggaXMganVzdCBhIHN5bWxpbmsgdG8KKy91c3Ivc2hhcmUvYXV0b21ha2UvQ09QWUlORywgd2hpY2ggbWVhbnMgd2UgY2FuJ3QgdmVyaWZ5IGl0Cit1c2luZyBvdXIgbm9ybWFsIG1lYW5zLiBXZSB3b3JrYXJvdW5kIHRoaXMgYnkgdXNpbmcgdGhpcyBwYXRjaAordG8gY3JlYXRlIG91ciBvd24gbGljZW5zZSBmaWxlLiAKKworVXBzdHJlYW0gd2FzIG5vdGlmaWVkIGFib3V0IHRoaXMgb24gMjAxMS0wMS0yNC4gV2hlbiB1cGdyYWRpbmcKK3RoaXMgcmVjaXBlLCB0aGlzIHNob3VsZCBiZSBmaXhlZCBhbmQgeW91IHNob3VsZCByZW1vdmUgdGhpcworcGF0Y2guCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNnbWwtY29tbW9uLTAuNi4zLm9yaWcvTElDRU5TRS1HUEx2MiBzZ21sLWNvbW1vbi0wLjYuMy9MSUNFTlNFLUdQTHYyCistLS0gc2dtbC1jb21tb24tMC42LjMub3JpZy9MSUNFTlNFLUdQTHYyCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKysgc2dtbC1jb21tb24tMC42LjMvTElDRU5TRS1HUEx2MgkyMDExLTAxLTI4IDE3OjA1OjE3LjI5OTUyODAwMSAtMDgwMAorQEAgLTAsMCArMSwxMiBAQAorK0NvcHlyaWdodCAoQykgMTk5NyBDaHJpc3RpYW4gU2Nod2FyeiA8c2Nod2FyekBkZWJpYW4ub3JnPi4KKytDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBBcmRvIHZhbiBSYW5nZWxyb29paiA8YXJkb0BkZWJpYW4ub3JnPgorKworK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgorK3RoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKKyt2ZXJzaW9uLgorKworK1RoaXMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IHdpdGhvdXQKKythbnkgd2FycmFudHk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBtZXJjaGFudGFiaWxpdHkgb3IKKytmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKytmb3IgbW9yZSBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uLW5hdGl2ZV8wLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk3NTM2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbi1uYXRpdmVfMC42LjMuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJCYXNlIHV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIFNHTUwgYW5kIFhNTCIKK0RFU0NSSVBUSU9OID0gIlRoZSBzZ21sLWNvbW1vbiBwYWNrYWdlIGdhdGhlcnMgdmVyeSBiYXNpYyBcCitzdHVmZiBuZWNlc3NhcnkgdG8gd29yayB3aXRoIFNHTUwgYW5kIFhNTCwgc3VjaCBhcyB4bWwuZGNsLCBcCithIFNHTUwgZGVjbGFyYXRpb24gb2YgWE1MOyBpc28tZW50aXRpZXMsIGEgbGlzdCBvZiB0aGUgYmFzaWMgXAorU0dNTCBJU08gZW50aXRpZXM7IGFuZCBpbnN0YWxsLWNhdGFsb2csIGEgc2NyaXB0IHVzZWQgdG8gXAorYWRkIGVudHJpZXMgdG8gKG9yIHJlbW92ZSBlbnRyaWVzIGZyb20pIGNlbnRyYWxpemVkIGNhdGFsb2dzIFwKK3dob3NlIGVudHJpZXMgYXJlIHBvaW50ZXJzIHRvIFNHTUwgb3BlbiBjYXRhbG9ncywgXAorYXMgZGVmaW5lZCBieSBPQVNJUy4iCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2RvY2Jvb2stdG9vbHMvIgorTElDRU5TRSA9ICJHUEx2MisiCisjIFNlZSB0aGUgY29tbWVudHMgaW4gbGljZW5zZS5wYXRjaCB3aGVuIHVwZ3JhZGluZyB0aGlzIHJlY2lwZS4KKyMgVGhpcyBpcyBpbnRlZGVkIHRvIGJlIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLUdQTHYyO21kNT1hYjhhNTBhYmU4NmRmYzg1OWUxNDhiYWFlMDQzYzg5YiIKK1NFQ1RJT04gPSAiYmFzZSIKKworUFIgPSAicjEiCisKK3JlcXVpcmUgc2dtbC1jb21tb25fJHtQVn0uYmIKK2luaGVyaXQgbmF0aXZlCisKK1MgPSAiJHtXT1JLRElSfS9zZ21sLWNvbW1vbi0ke1BWfSIKKworU1lTUk9PVF9QUkVQUk9DRVNTX0ZVTkNTICs9ICJzZ21sX2NvbW1vbl9uYXRpdmVfbWFuZ2xlIgorU1NUQVRFUE9TVElOU1RGVU5DUyArPSAic2dtbF9jb21tb25fc3N0YXRlX3Bvc3RpbnN0IgorQ0xFQU5GVU5DUyArPSAic2dtbF9jb21tb25fc3N0YXRlX2NsZWFuIgorCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgaW5zdGFsbC1jYXRhbG9nIHNjcmlwdCBjb250YWlucyBoYXJkLWNvZGVkIHJlZmVyZW5jZXMgdG8KKwkjIHtzeXNjb25mZGlyfS4gQ2hhbmdlIGl0IHRvICR7RH0ke3N5c2NvbmZkaXJ9LgorCXNlZCAtaSAtZSAic3wke3N5c2NvbmZkaXJ9L3NnbWx8JHtEfSR7c3lzY29uZmRpcn0vc2dtbHxnIiAke0R9JHtiaW5kaXJ9L2luc3RhbGwtY2F0YWxvZworCisJJHtEfSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgXAorCQktLWFkZCAke0R9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCBcCisJCSR7RH0ke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCSMgVGhlIHNnbWwtZG9jYm9vay5jYXQgd2lsbCBiZSByZWdlbmVyYXRlZCBieSBzc3RhdGVfcG9zdGluc3QKKwlybSAtZiAke0R9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQKK30KKworc2dtbF9jb21tb25fbmF0aXZlX21hbmdsZSAoKSB7CisJIyBSZXZlcnQgYmFjayB0byAke3N5c2NvbmZkaXJ9IHBhdGggaW4gaW5zdGFsbC1jYXRhbG9nCisJc2VkIC1pIC1lICJzfCR7RH0ke3N5c2NvbmZkaXJ9L3NnbWx8JHtzeXNjb25mZGlyfS9zZ21sfGciICR7U1lTUk9PVF9ERVNURElSfSR7U1RBR0lOR19CSU5ESVJ9L2luc3RhbGwtY2F0YWxvZworCSMgQ2hhbmdlIHBhdGggZnJvbSAke0R9JHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nIHRvICR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZyBpbiBzZ21sLWVudC5jYXQKKwlzZWQgLWkgLWUgInN8JHtEfSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZ3wke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2d8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorCSMgUmVtb3ZlICR7RH0gcGF0aCBmcm9tIGNhdGFsb2cgZmlsZSBjcmVhdGVkIGJ5IGluc3RhbGwtY2F0YWxvZyBzY3JpcHQKKwlzZWQgLWkgLWUgInN8JHtEfXx8ZyIgJHtTWVNST09UX0RFU1RESVJ9JHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2cKK30KKworc2dtbF9jb21tb25fc3N0YXRlX3Bvc3RpbnN0KCkgeworCWlmIFsgIiR7QkJfQ1VSUkVOVFRBU0t9IiA9ICJwb3B1bGF0ZV9zeXNyb290IiAtbyAiJHtCQl9DVVJSRU5UVEFTS30iID0gInBvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUiIF0KKwl0aGVuCisJCSR7YmluZGlyfS9pbnN0YWxsLWNhdGFsb2cgLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorCQlpZiBbIC1lICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrIF07IHRoZW4KKwkJCWZvciBjYXRhbG9nIGluIGBhd2sgJ3twcmludCAkMn0nICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suYmFrYDsgZG8KKwkJCQlpZiBbICEgYGdyZXAgJGNhdGFsb2cgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgMT4gL2Rldi9udWxsIDI+JjFgIF07IHRoZW4KKwkJCQkJJHtiaW5kaXJ9L2luc3RhbGwtY2F0YWxvZyBcCisJCQkJCQktLWFkZCAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCAkY2F0YWxvZworCQkJCWZpCisJCQlkb25lCisJCWZpCisJZmkKK30KKworc2dtbF9jb21tb25fc3N0YXRlX2NsZWFuICgpIHsKKwkjIEVuc3VyZSB0aGF0IHRoZSBjYXRhbG9nIGZpbGUgc2dtbC1kb2Nib29rLmNhdCBpcyBwcm9wZXJseQorCSMgdXBkYXRlZCB3aGVuIHRoZSBwYWNrYWdlIGlzIHJlbW92ZWQgZnJvbSBzc3RhdGUgY2FjaGUuCisJaWYgWyAtZiAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1kb2Nib29rLmNhdCBdOyB0aGVuCisJCXNlZCAtaSAnL1wvc2dtbFwvc2dtbC1lbnQuY2F0L2QnICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0CisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zZ21sLWNvbW1vbi9zZ21sLWNvbW1vbl8wLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk4NjczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWwtY29tbW9uL3NnbWwtY29tbW9uXzAuNi4zLmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiQmFzZSB1dGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBTR01MIGFuZCBYTUwiCitERVNDUklQVElPTiA9ICJUaGUgc2dtbC1jb21tb24gcGFja2FnZSBnYXRoZXJzIHZlcnkgYmFzaWMgXAorc3R1ZmYgbmVjZXNzYXJ5IHRvIHdvcmsgd2l0aCBTR01MIGFuZCBYTUwsIHN1Y2ggYXMgeG1sLmRjbCwgXAorYSBTR01MIGRlY2xhcmF0aW9uIG9mIFhNTDsgaXNvLWVudGl0aWVzLCBhIGxpc3Qgb2YgdGhlIGJhc2ljIFwKK1NHTUwgSVNPIGVudGl0aWVzOyBhbmQgaW5zdGFsbC1jYXRhbG9nLCBhIHNjcmlwdCB1c2VkIHRvIFwKK2FkZCBlbnRyaWVzIHRvIChvciByZW1vdmUgZW50cmllcyBmcm9tKSBjZW50cmFsaXplZCBjYXRhbG9ncyBcCit3aG9zZSBlbnRyaWVzIGFyZSBwb2ludGVycyB0byBTR01MIG9wZW4gY2F0YWxvZ3MsIFwKK2FzIGRlZmluZWQgYnkgT0FTSVMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9kb2Nib29rLXRvb2xzLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorIyBTZWUgdGhlIGNvbW1lbnRzIGluIGxpY2Vuc2UucGF0Y2ggd2hlbiB1cGdyYWRpbmcgdGhpcyByZWNpcGUuCisjIFRoaXMgaXMgaW50ZWRlZCB0byBiZSBhIHRlbXBvcmFyeSB3b3JrYXJvdW5kLgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS1HUEx2MjttZDU9YWI4YTUwYWJlODZkZmM4NTllMTQ4YmFhZTA0M2M4OWIiCitTRUNUSU9OID0gImJhc2UiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImZ0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9wdWIvZG9jYm9vay10b29scy9uZXctdHJpYWxzL1NPVVJDRVMvc2dtbC1jb21tb24tJHtQVn0udGd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9oZWxsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpY2Vuc2UucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMDNjOTgyOGYyNDgyMGRmODZlNTVlNzg2MmUyODk3NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3ZGM0MThjMWQzNjExMjNmZmM1ZTQ1ZDYxZjFiOTcyNTc5NDBhOGViMzVkMGJmYmJjNDkzMzgxY2M1YjFmOTU5IgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwkjIGluc3RhbGwtY2F0YWxvZyBzY3JpcHQgY29udGFpbnMgaGFyZGNvZGVkIHJlZmVyZW5jZXMgdG8gL2V0Yy9zZ21sCisJc2VkIC1pIC1lICdzfFwoWyAiXVwrXCkvZXRjL3NnbWx8XDEke3N5c2NvbmZkaXJ9L3NnbWx8ZycgYmluL2luc3RhbGwtY2F0YWxvZworfQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9zZ21sIgorCitwa2dfcG9zdGluc3RfJHtQTn0oKSB7CisgICAgaWYgWyAieCREIiA9ICJ4IiBdOyB0aGVuCisJaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdCBcCisJCSR7ZGF0YWRpcn0vc2dtbC9zZ21sLWlzby1lbnRpdGllcy04ODc5LjE5ODYvY2F0YWxvZworCisJaW5zdGFsbC1jYXRhbG9nIFwKKwkJLS1hZGQgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgXAorCQkke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0CisgICAgZWxzZQorCWlmICEgZ3JlcCAtcSAke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cgJEQke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0OyB0aGVuCisJICAgIGVjaG8gIkNBVEFMT0cgJHtkYXRhZGlyfS9zZ21sL3NnbWwtaXNvLWVudGl0aWVzLTg4NzkuMTk4Ni9jYXRhbG9nIiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQKKwlmaQorCWlmICEgZ3JlcCAtcSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL2NhdGFsb2c7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCisJZmkKKworCWlmICEgZ3JlcCAtcSAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0ICREJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQ7IHRoZW4KKwkgICAgZWNobyAiQ0FUQUxPRyAke3N5c2NvbmZkaXJ9L3NnbWwvc2dtbC1lbnQuY2F0IiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0CisJZmkKKwlpZiAhIGdyZXAgLXEgJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZG9jYm9vay5jYXQgJEQke3N5c2NvbmZkaXJ9L3NnbWwvY2F0YWxvZzsgdGhlbgorCSAgICBlY2hvICJDQVRBTE9HICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IiA+PiAkRCR7c3lzY29uZmRpcn0vc2dtbC9jYXRhbG9nCisJZmkKKyAgICBmaQorfQorCitwa2dfcG9zdHJtXyR7UE59KCkgeworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tcmVtb3ZlICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWVudC5jYXQgXAorCQkke2RhdGFkaXJ9L3NnbWwvc2dtbC1pc28tZW50aXRpZXMtODg3OS4xOTg2L2NhdGFsb2cKKworCWluc3RhbGwtY2F0YWxvZyBcCisJCS0tcmVtb3ZlICR7c3lzY29uZmRpcn0vc2dtbC9zZ21sLWRvY2Jvb2suY2F0IFwKKwkJJHtzeXNjb25mZGlyfS9zZ21sL3NnbWwtZW50LmNhdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NnbWxzcGwvc2dtbHNwbC1uYXRpdmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzQ2MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc2dtbHNwbC9zZ21sc3BsLW5hdGl2ZV9naXQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJBIHNpbXBsZSBwb3N0LXByb2Nlc3NvciBmb3IgU0dNTFMgYW5kIE5TR01MUyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9naXRwYW4vU0dNTFNwbSIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTg4MTA2NjlmMTNiODczNDg0NTllNjExZDMxYWI3NjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9naXRwYW4vU0dNTFNwbSBcCisgICAgICAgICAgIgorCitTUkNSRVYgPSAiNzE1OTViOWI1ZTM2YmZjMDAwNDY5OTVlMDU4OTI2YmQyNzc5M2ZlZiIKKworUFYgPSAiMS4xK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IG5hdGl2ZSBjcGFuCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGxuIC1zIHNnbWxzcGwucGwgJHtEfSR7YmluZGlyfS9zZ21sc3BsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3F1YXNoZnMtdG9vbHMvc3F1YXNoZnMtdG9vbHNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTdiMjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3NxdWFzaGZzLXRvb2xzL3NxdWFzaGZzLXRvb2xzX2dpdC5iYgpAQCAtMCwwICsxLDM3IEBACisjIE5vdGUsIHdlIGNhbiBwcm9iYWJseSByZW1vdmUgdGhlIGx6bWEgb3B0aW9uIGFzIGl0IGhhcyBiZSByZXBsYWNlZCB3aXRoIHh6LAorIyBhbmQgSSBkb24ndCB0aGluayB0aGUga2VybmVsIHN1cHBvcnRzIGl0IGFueSBtb3JlLgorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuaXB1bGF0aW5nIFNxdWFzaEZTIGZpbGVzeXN0ZW1zIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEwtMiAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vLi4vLi4vN3pDLnR4dDtiZWdpbmxpbmU9MTI7ZW5kbGluZT0xNjttZDU9MjA1NmNkNmQ5MTllYmMzODA3NjAyMTQzYzc0NDlhN2MgXAorIgorREVQRU5EUyA9ICJhdHRyIHpsaWIgeHogbHpvIGx6NCIKKworUFYgPSAiNC4zK2dpdHIke1NSQ1BWfSIKK1NSQ1JFViA9ICI5YzFkYjZkMTNhNTFhMmUwMDlmMDAyN2VmMzM2Y2UwMzYyNGVhYzBkIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3Bsb3VnaGVyL3NxdWFzaGZzLXRvb2xzLmdpdDtwcm90b2NvbD1odHRwcyBcCisgICAgICAgICAgIGh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3NldmVuemlwL2x6bWE0NjUudGFyLmJ6MjtuYW1lPWx6bWEgXAorIgorU1JDX1VSSVtsem1hLm1kNXN1bV0gPSAiMjlkNWZmZDAzYTVhM2U1MWFlZjZhNzRlOWVhZmI3NTkiCitTUkNfVVJJW2x6bWEuc2hhMjU2c3VtXSA9ICJjOTM1ZmQwNGRkOGUwZThjNjg4YTMwNzhmMzY3NWQ2OTk2NzlhOTBiZTgxYzEyNjg2ODM3ZTA4ODBhYTBmYTFlIgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3NxdWFzaGZzLXRvb2xzIgorCisjIEVYVFJBX09FTUFLRSBpcyB0eXBpY2FsbHk6IC1lIE1BS0VGTEFHUz0KKyMgdGhlIC1lIGNhdXNlcyBwcm9ibGVtcyBhcyBDRkxBR1MgaXMgbW9kaWZpZWQgaW4gdGhlIE1ha2VmaWxlLCBzbworIyB3ZSByZWRlZmluZSBFWFRSQV9PRU1BS0UgaGVyZQorRVhUUkFfT0VNQUtFID0gIk1BS0VGTEFHUz0gTFpNQV9TVVBQT1JUPTEgTFpNQV9ESVI9Li4vLi4gWFpfU1VQUE9SVD0xIExaT19TVVBQT1JUPTEgTFo0X1NVUFBPUlQ9MSIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIG1rc3F1YXNoZnMgdW5zcXVhc2hmcworfQorZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBta3NxdWFzaGZzICR7RH0ke3NiaW5kaXJ9LworCWluc3RhbGwgLW0gMDc1NSB1bnNxdWFzaGZzICR7RH0ke3NiaW5kaXJ9LworfQorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvMDAwMS1BZGQtbGludXgtYWFyY2g2NC1hcmNoX3JlZ3MuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1Mzk1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorRnJvbSBmODU4NTQxMzFjODI2NWYyZWI1OWM3MTRkY2VhNWM0YjNkYzA5YmVkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK0RhdGU6IFdlZCwgMTUgQXByIDIwMTUgMTQ6Mjk6MzcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIGxpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKKworSXQgaXMgbWlzc2luZyBmcm9tIHRoZSB0YXJiYWxsLCBidXQgaXQgaXMgcHJlc2VudCBpbiBnaXQgZm9yIHY0LjEwCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbi5rb29pQGxpbmFyby5vcmc+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGxpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaW51eC9hYXJjaDY0L2FyY2hfcmVncy5oCisKK2RpZmYgLS1naXQgYS9saW51eC9hYXJjaDY0L2FyY2hfcmVncy5oIGIvbGludXgvYWFyY2g2NC9hcmNoX3JlZ3MuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjlhNWUzM2UKKy0tLSAvZGV2L251bGwKKysrKyBiL2xpbnV4L2FhcmNoNjQvYXJjaF9yZWdzLmgKK0BAIC0wLDAgKzEsMiBAQAorK2V4dGVybiB1aW50NjRfdCAqY29uc3QgYWFyY2g2NF9zcF9wdHI7CisrZXh0ZXJuIHVpbnQzMl90ICpjb25zdCBhcm1fc3BfcHRyOworLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtbGludXgtaW9jdGwuaC1mb3ItX0lPQ18tbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzQ2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3N0cmFjZS9jb2RlL2NpLzM0NjBkYzQ4NmQzMzMyMzE5OThkZTBmMTk5MTgyMDRhYWNlZTlhZTMKKworRXhwZWN0ZWQgdG8gYmUgcmVsZWFzZWQgb2ZmaWNpYWxseSBhcyBwYXJ0IG9mIHN0cmFjZSA0LjExCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CisKK0Zyb20gMzQ2MGRjNDg2ZDMzMzIzMTk5OGRlMGYxOTkxODIwNGFhY2VlOWFlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitEYXRlOiBTYXQsIDI4IE1hciAyMDE1IDE4OjQwOjEzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+IGZvciBfSU9DXyogbWFjcm9zCisKK0ZpeCBhIGNvbXBpbGF0aW9uIGZhaWx1cmUgd2l0aCBtdXNsIGxpYmMuCisKKyogZXZkZXYuYzogSW5jbHVkZSA8bGludXgvaW9jdGwuaD4uCisqIGlvY3RsLmM6IEluY2x1ZGUgPGxpbnV4L2lvY3RsLmg+IGluc3RlYWQgb2YgPGFzbS9pb2N0bC5oPi4KKyogaW9jdGxzb3J0LmM6IExpa2V3aXNlLgorCitSZXBvcnRlZC1ieTogRGltYSBLcmFzbmVyIDxkaW1hQGRpbWFrcmFzbmVyLmNvbT4KK0Fja2VkLWJ5OiBNaWtlIEZyeXNpbmdlciA8dmFwaWVyQGdlbnRvby5vcmc+CistLS0KKyBldmRldi5jICAgICB8IDIgKysKKyBpb2N0bC5jICAgICB8IDIgKy0KKyBpb2N0bHNvcnQuYyB8IDIgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V2ZGV2LmMgYi9ldmRldi5jCitpbmRleCA5YTc0MzBkLi5lMDZmOWMxIDEwMDY0NAorLS0tIGEvZXZkZXYuYworKysrIGIvZXZkZXYuYworQEAgLTI4LDYgKzI4LDggQEAKKyAKKyAjaW5jbHVkZSAiZGVmcy5oIgorIAorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorKworICNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKKyAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyAjaW5jbHVkZSAieGxhdC9ldmRldl9hYnMuaCIKK2RpZmYgLS1naXQgYS9pb2N0bC5jIGIvaW9jdGwuYworaW5kZXggNDZmODMzNC4uYzY3ZDA0OCAxMDA2NDQKKy0tLSBhL2lvY3RsLmMKKysrKyBiL2lvY3RsLmMKK0BAIC0yOSw3ICsyOSw3IEBACisgICovCisgCisgI2luY2x1ZGUgImRlZnMuaCIKKy0jaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisrI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisgI2luY2x1ZGUgInhsYXQvaW9jdGxfZGlycy5oIgorIAorICNpZmRlZiBIQVZFX0xJTlVYX0lOUFVUX0gKK2RpZmYgLS1naXQgYS9pb2N0bHNvcnQuYyBiL2lvY3Rsc29ydC5jCitpbmRleCAzMzM1NTZjLi45YzMxNjkxIDEwMDY0NAorLS0tIGEvaW9jdGxzb3J0LmMKKysrKyBiL2lvY3Rsc29ydC5jCitAQCAtMzMsNyArMzMsNyBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CistI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgorKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorIAorIHN0cnVjdCBpb2N0bGVudCB7CisgCWNvbnN0IGNoYXIgKmluZm87CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjA3MmZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvSW5jbHVkZS1zeXMtc3RhdC5oLWZvci1TX0ktbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Avc3RyYWNlL2NvZGUvY2kvZDM0ZTAwYjI5Mzk0MmIxMDEyZGRjNDllZDNhYjM3OWEzMjMzNzYxMQorCitFeHBlY3RlZCB0byBiZSByZWxlYXNlZCBvZmZpY2lhbGx5IGFzIHBhcnQgb2Ygc3RyYWNlIDQuMTEKKworU2lnbmVkLW9mZi1ieTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KKworRnJvbSBkMzRlMDBiMjkzOTQyYjEwMTJkZGM0OWVkM2FiMzc5YTMyMzM3NjExIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmVsaXggSmFuZGEgPGZlbGl4LmphbmRhQHBvc3Rlby5kZT4KK0RhdGU6IFNhdCwgMjggTWFyIDIwMTUgMTg6MjE6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSA8c3lzL3N0YXQuaD4gZm9yIFNfSSogbWFjcm9zCisKK0ZpeCBhIGNvbXBpbGF0aW9uIGZhaWx1cmUgd2l0aCBtdXNsIGxpYmMuCisKKyogbWtub2QuYzogSW5jbHVkZSA8c3lzL3N0YXQuaD4uCisqIHByaW50bW9kZS5jOiBMaWtld2lzZS4KKworUmVwb3J0ZWQtYnk6IERpbWEgS3Jhc25lciA8ZGltYUBkaW1ha3Jhc25lci5jb20+CitBY2tlZC1ieTogTWlrZSBGcnlzaW5nZXIgPHZhcGllckBnZW50b28ub3JnPgorLS0tCisgbWtub2QuYyAgICAgfCAxICsKKyBwcmludG1vZGUuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9ta25vZC5jIGIvbWtub2QuYworaW5kZXggMDdlOWE0NS4uMTQ2MzIzMiAxMDA2NDQKKy0tLSBhL21rbm9kLmMKKysrKyBiL21rbm9kLmMKK0BAIC0xLDYgKzEsNyBAQAorICNpbmNsdWRlICJkZWZzLmgiCisgCisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2lmZGVmIE1BSk9SX0lOX1NZU01BQ1JPUworICMgaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorZGlmZiAtLWdpdCBhL3ByaW50bW9kZS5jIGIvcHJpbnRtb2RlLmMKK2luZGV4IDRkZjFiOWYuLmE3MjE5MzYgMTAwNjQ0CistLS0gYS9wcmludG1vZGUuYworKysrIGIvcHJpbnRtb2RlLmMKK0BAIC0xLDYgKzEsNyBAQAorICNpbmNsdWRlICJkZWZzLmgiCisgCisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgCisgI2luY2x1ZGUgInhsYXQvbW9kZXR5cGVzLmgiCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvTWFrZWZpbGUtcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MDMwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL01ha2VmaWxlLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK3N0cmFjZTogQWRkIHB0ZXN0CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBHYWJyaWVsIEJhcmJ1IDxnYWJyaWVsLmJhcmJ1QGVuZWEuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICB8ICAyICstCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAxOCArKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZTczOTU4Yy4uNWYwZGZlZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNiw3ICs2LDcgQEAgQUNfSU5JVChbc3RyYWNlXSwKKyBBQ19DT05GSUdfU1JDRElSKFtzdHJhY2UuY10pCisgQUNfQ09ORklHX0FVWF9ESVIoWy5dKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCistQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LXh6IG5vLWRpc3QtZ3ppcCBzaWxlbnQtcnVsZXMgcGFyYWxsZWwtdGVzdHNdKQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC14eiBuby1kaXN0LWd6aXAgc2lsZW50LXJ1bGVzIHNlcmlhbC10ZXN0c10pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgQUNfQ0FOT05JQ0FMX0hPU1QKKyAKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBmZjVlMTM2Li45ODRiZGI2IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTAxLDMgKzEwMSwyMSBAQCBFWFRSQV9ESVNUID0gaW5pdC5zaCBydW4uc2ggXAorIAkgICAgICQoVEVTVFMpCisgCisgQ0xFQU5GSUxFUyA9ICQoVEVTVFM6PS50bXApCisrCisrYnVpbGR0ZXN0LVRFU1RTOiAkKGNoZWNrX1BST0dSQU1TKSAkKFRFU1RTKQorKworK2luc3RhbGwtcHRlc3Q6CisrCWluc3RhbGwgJChCVUlMRERJUikvc3RyYWNlICQoREVTVERJUikKKysJaW5zdGFsbCAiJChzcmNkaXIpLy4uIi9zdHJhY2UtbG9nLW1lcmdlICQoREVTVERJUikKKysJaW5zdGFsbCAtZCAkKERFU1RESVIpLyQoVEVTVERJUikKKysJY3AgJChCVUlMRERJUikvJChURVNURElSKS9NYWtlZmlsZSAkKERFU1RESVIpLyQoVEVTVERJUikKKysJc2VkIC1pIC1lICdzL15NYWtlZmlsZTovX01ha2VmaWxlOi8nICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlzZWQgLWkgLWUgJ3MvYmFzaC9zaC8nICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlmb3IgZmlsZSBpbiAkKGNoZWNrX1BST0dSQU1TKTsgZG8gXAorKwkJaW5zdGFsbCAkKEJVSUxERElSKS8kKFRFU1RESVIpLyQkZmlsZSAkKERFU1RESVIpLyQoVEVTVERJUik7IFwKKysJZG9uZQorKwlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpOyBkbyBcCisrCQlpbnN0YWxsICQoc3JjZGlyKS8kJGZpbGUgJChERVNURElSKS8kKFRFU1RESVIpOyBcCisrCQlzZWQgLWkgLWUgJ3MvJCR7c3JjZGlyPS59Ly4vZycgJChERVNURElSKS8kKFRFU1RESVIpLyQkZmlsZTsgXAorKwlkb25lCisrCWZvciBpIGluIG5ldCBuZXQtZmQgc2NtX3JpZ2h0cy1mZCBzaWdhY3Rpb247IGRvIHNlZCAtaSAtZSAncy8kJHNyY2Rpci8uL2cnICQoREVTVERJUikvJChURVNURElSKS8kJGkudGVzdDsgZG9uZQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4gYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9naXQtdmVyc2lvbi1nZW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGZlZTc0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL2dpdC12ZXJzaW9uLWdlbgpAQCAtMCwwICsxLDIyNSBAQAorIyEvYmluL3NoCisjIFByaW50IGEgdmVyc2lvbiBzdHJpbmcuCitzY3JpcHR2ZXJzaW9uPTIwMTItMTItMzEuMjM7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgc2NyaXB0IGlzIGRlcml2ZWQgZnJvbSBHSVQtVkVSU0lPTi1HRU4gZnJvbSBHSVQ6IGh0dHA6Ly9naXQub3IuY3ovLgorIyBJdCBtYXkgYmUgcnVuIHR3byB3YXlzOgorIyAtIGZyb20gYSBnaXQgcmVwb3NpdG9yeSBpbiB3aGljaCB0aGUgImdpdCBkZXNjcmliZSIgY29tbWFuZCBiZWxvdworIyAgIHByb2R1Y2VzIHVzZWZ1bCBvdXRwdXQgKHRodXMgcmVxdWlyaW5nIGF0IGxlYXN0IG9uZSBzaWduZWQgdGFnKQorIyAtIGZyb20gYSBub24tZ2l0LXJlcG8gZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSAudGFyYmFsbC12ZXJzaW9uIGZpbGUsIHdoaWNoCisjICAgcHJlc3VtZXMgdGhpcyBzY3JpcHQgaXMgaW52b2tlZCBsaWtlICIuL2dpdC12ZXJzaW9uLWdlbiAudGFyYmFsbC12ZXJzaW9uIi4KKworIyBJbiBvcmRlciB0byB1c2UgaW50cmEtdmVyc2lvbiBzdHJpbmdzIGluIHlvdXIgcHJvamVjdCwgeW91IHdpbGwgbmVlZCB0d28KKyMgc2VwYXJhdGUgZ2VuZXJhdGVkIHZlcnNpb24gc3RyaW5nIGZpbGVzOgorIworIyAudGFyYmFsbC12ZXJzaW9uIC0gcHJlc2VudCBvbmx5IGluIGEgZGlzdHJpYnV0aW9uIHRhcmJhbGwsIGFuZCBub3QgaW4KKyMgICBhIGNoZWNrZWQtb3V0IHJlcG9zaXRvcnkuICBDcmVhdGVkIHdpdGggY29udGVudHMgdGhhdCB3ZXJlIGxlYXJuZWQgYXQKKyMgICB0aGUgbGFzdCB0aW1lIGF1dG9jb25mIHdhcyBydW4sIGFuZCB1c2VkIGJ5IGdpdC12ZXJzaW9uLWdlbi4gIE11c3Qgbm90CisjICAgYmUgcHJlc2VudCBpbiBlaXRoZXIgJChzcmNkaXIpIG9yICQoYnVpbGRkaXIpIGZvciBnaXQtdmVyc2lvbi1nZW4gdG8KKyMgICBnaXZlIGFjY3VyYXRlIGFuc3dlcnMgZHVyaW5nIG5vcm1hbCBkZXZlbG9wbWVudCB3aXRoIGEgY2hlY2tlZCBvdXQgdHJlZSwKKyMgICBidXQgbXVzdCBiZSBwcmVzZW50IGluIGEgdGFyYmFsbCB3aGVuIHRoZXJlIGlzIG5vIHZlcnNpb24gY29udHJvbCBzeXN0ZW0uCisjICAgVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdXNlZCBpbiBhbnkgZGVwZW5kZW5jaWVzLiAgR05VbWFrZWZpbGUgaGFzCisjICAgaG9va3MgdG8gZm9yY2UgYSByZWNvbmZpZ3VyZSBhdCBkaXN0cmlidXRpb24gdGltZSB0byBnZXQgdGhlIHZhbHVlCisjICAgY29ycmVjdCwgd2l0aG91dCBwZW5hbGl6aW5nIG5vcm1hbCBkZXZlbG9wbWVudCB3aXRoIGV4dHJhIHJlY29uZmlndXJlcy4KKyMKKyMgLnZlcnNpb24gLSBwcmVzZW50IGluIGEgY2hlY2tlZC1vdXQgcmVwb3NpdG9yeSBhbmQgaW4gYSBkaXN0cmlidXRpb24KKyMgICB0YXJiYWxsLiAgVXNhYmxlIGluIGRlcGVuZGVuY2llcywgcGFydGljdWxhcmx5IGZvciBmaWxlcyB0aGF0IGRvbid0CisjICAgd2FudCB0byBkZXBlbmQgb24gY29uZmlnLmggYnV0IGRvIHdhbnQgdG8gdHJhY2sgdmVyc2lvbiBjaGFuZ2VzLgorIyAgIERlbGV0ZSB0aGlzIGZpbGUgcHJpb3IgdG8gYW55IGF1dG9jb25mIHJ1biB3aGVyZSB5b3Ugd2FudCB0byByZWJ1aWxkCisjICAgZmlsZXMgdG8gcGljayB1cCBhIHZlcnNpb24gc3RyaW5nIGNoYW5nZTsgYW5kIGxlYXZlIGl0IHN0YWxlIHRvCisjICAgbWluaW1pemUgcmVidWlsZCB0aW1lIGFmdGVyIHVucmVsYXRlZCBjaGFuZ2VzIHRvIGNvbmZpZ3VyZSBzb3VyY2VzLgorIworIyBBcyB3aXRoIGFueSBnZW5lcmF0ZWQgZmlsZSBpbiBhIFZDJ2QgZGlyZWN0b3J5LCB5b3Ugc2hvdWxkIGFkZAorIyAvLnZlcnNpb24gdG8gLmdpdGlnbm9yZSwgc28gdGhhdCB5b3UgZG9uJ3QgYWNjaWRlbnRhbGx5IGNvbW1pdCBpdC4KKyMgLnRhcmJhbGwtdmVyc2lvbiBpcyBuZXZlciBnZW5lcmF0ZWQgaW4gYSBWQydkIGRpcmVjdG9yeSwgc28gbmVlZG4ndAorIyBiZSBsaXN0ZWQgdGhlcmUuCisjCisjIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4geW91ciBjb25maWd1cmUuYWMsIHNvIHRoYXQgJChWRVJTSU9OKSB3aWxsCisjIGF1dG9tYXRpY2FsbHkgYmUgdXAtdG8tZGF0ZSBlYWNoIHRpbWUgY29uZmlndXJlIGlzIHJ1biAoYW5kIG5vdGUgdGhhdAorIyBzaW5jZSBjb25maWd1cmUuYWMgbm8gbG9uZ2VyIGluY2x1ZGVzIGEgdmVyc2lvbiBzdHJpbmcsIE1ha2VmaWxlIHJ1bGVzCisjIHNob3VsZCBub3QgZGVwZW5kIG9uIGNvbmZpZ3VyZS5hYyBmb3IgdmVyc2lvbiB1cGRhdGVzKS4KKyMKKyMgQUNfSU5JVChbR05VIHByb2plY3RdLAorIyAgICAgICAgIG00X2VzeXNjbWQoW2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4gLnRhcmJhbGwtdmVyc2lvbl0pLAorIyAgICAgICAgIFtidWctcHJvamVjdEBleGFtcGxlXSkKKyMKKyMgVGhlbiB1c2UgdGhlIGZvbGxvd2luZyBsaW5lcyBpbiB5b3VyIE1ha2VmaWxlLmFtLCBzbyB0aGF0IC52ZXJzaW9uCisjIHdpbGwgYmUgcHJlc2VudCBmb3IgZGVwZW5kZW5jaWVzLCBhbmQgc28gdGhhdCAudmVyc2lvbiBhbmQKKyMgLnRhcmJhbGwtdmVyc2lvbiB3aWxsIGV4aXN0IGluIGRpc3RyaWJ1dGlvbiB0YXJiYWxscy4KKyMKKyMgRVhUUkFfRElTVCA9ICQodG9wX3NyY2RpcikvLnZlcnNpb24KKyMgQlVJTFRfU09VUkNFUyA9ICQodG9wX3NyY2RpcikvLnZlcnNpb24KKyMgJCh0b3Bfc3JjZGlyKS8udmVyc2lvbjoKKyMJZWNobyAkKFZFUlNJT04pID4gJEAtdCAmJiBtdiAkQC10ICRACisjIGRpc3QtaG9vazoKKyMJZWNobyAkKFZFUlNJT04pID4gJChkaXN0ZGlyKS8udGFyYmFsbC12ZXJzaW9uCisKKworbWU9JDAKKwordmVyc2lvbj0iZ2l0LXZlcnNpb24tZ2VuICRzY3JpcHR2ZXJzaW9uCisKK0NvcHlyaWdodCAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhlcmUgaXMgTk8gd2FycmFudHkuICBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCit1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgbWF0dGVycywgc2VlIHRoZSBmaWxlcyBuYW1lZCBDT1BZSU5HLiIKKwordXNhZ2U9IlwKK1VzYWdlOiAkbWUgW09QVElPTl0uLi4gXCRzcmNkaXIvLnRhcmJhbGwtdmVyc2lvbiBbVEFHLU5PUk1BTElaQVRJT04tU0VELVNDUklQVF0KK1ByaW50IGEgdmVyc2lvbiBzdHJpbmcuCisKK09wdGlvbnM6CisKKyAgIC0tcHJlZml4ICAgICAgICAgICBwcmVmaXggb2YgZ2l0IHRhZ3MgKGRlZmF1bHQgJ3YnKQorICAgLS1mYWxsYmFjayAgICAgICAgIGZhbGxiYWNrIHZlcnNpb24gdG8gdXNlIGlmIFwiZ2l0IC0tdmVyc2lvblwiIGZhaWxzCisKKyAgIC0taGVscCAgICAgICAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAgLS12ZXJzaW9uICAgICAgICAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisKK1J1bm5pbmcgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBzdWZmaWNlIGluIG1vc3QgY2FzZXMuIgorCitwcmVmaXg9dgorZmFsbGJhY2s9CisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgMDs7CisgICAgLS12ZXJzaW9uKSBlY2hvICIkdmVyc2lvbiI7IGV4aXQgMDs7CisgICAgLS1wcmVmaXgpIHNoaWZ0OyBwcmVmaXg9IiQxIjs7CisgICAgLS1mYWxsYmFjaykgc2hpZnQ7IGZhbGxiYWNrPSIkMSI7OworICAgIC0qKQorICAgICAgZWNobyAiJDA6IFVua25vd24gb3B0aW9uICckMScuIiA+JjIKKyAgICAgIGVjaG8gIiQwOiBUcnkgJy0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjIKKyAgICAgIGV4aXQgMTs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIngkdGFyYmFsbF92ZXJzaW9uX2ZpbGUiID0geDsgdGhlbgorICAgICAgICB0YXJiYWxsX3ZlcnNpb25fZmlsZT0iJDEiCisgICAgICBlbGlmIHRlc3QgIngkdGFnX3NlZF9zY3JpcHQiID0geDsgdGhlbgorICAgICAgICB0YWdfc2VkX3NjcmlwdD0iJDEiCisgICAgICBlbHNlCisgICAgICAgIGVjaG8gIiQwOiBleHRyYSBub24tb3B0aW9uIGFyZ3VtZW50ICckMScuIiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaTs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAieCR0YXJiYWxsX3ZlcnNpb25fZmlsZSIgPSB4OyB0aGVuCisgICAgZWNobyAiJHVzYWdlIgorICAgIGV4aXQgMQorZmkKKwordGFnX3NlZF9zY3JpcHQ9IiR7dGFnX3NlZF9zY3JpcHQ6LXMveC94L30iCisKK25sPScKKycKKworIyBBdm9pZCBtZWRkbGluZyBieSBlbnZpcm9ubWVudCB2YXJpYWJsZSBvZiB0aGUgc2FtZSBuYW1lLgordj0KK3ZfZnJvbV9naXQ9CisKKyMgRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGEgdGFyYmFsbC1vbmx5IHZlcnNpb24gZmlsZS4KKyMgdGhlbiB0cnkgImdpdCBkZXNjcmliZSIsIHRoZW4gZGVmYXVsdC4KK2lmIHRlc3QgLWYgJHRhcmJhbGxfdmVyc2lvbl9maWxlCit0aGVuCisgICAgdj1gY2F0ICR0YXJiYWxsX3ZlcnNpb25fZmlsZWAgfHwgdj0KKyAgICBjYXNlICR2IGluCisgICAgICAgICokbmwqKSB2PSA7OyAjIHJlamVjdCBtdWx0aS1saW5lIG91dHB1dAorICAgICAgICBbMC05XSopIDs7CisgICAgICAgICopIHY9IDs7CisgICAgZXNhYworICAgIHRlc3QgIngkdiIgPSB4IFwKKyAgICAgICAgJiYgZWNobyAiJDA6IFdBUk5JTkc6ICR0YXJiYWxsX3ZlcnNpb25fZmlsZSBpcyBtaXNzaW5nIG9yIGRhbWFnZWQiIDE+JjIKK2ZpCisKK2lmIHRlc3QgIngkdiIgIT0geAordGhlbgorICAgIDogIyB1c2UgJHYKKyMgT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZ2l0IGNvbW1pdCBpbnZvbHZpbmcgdGhlIHdvcmtpbmcKKyMgZGlyZWN0b3J5LCBhbmQgImdpdCBkZXNjcmliZSIgb3V0cHV0IGxvb2tzIHNlbnNpYmxlLCB1c2UgdGhhdCB0bworIyBkZXJpdmUgYSB2ZXJzaW9uIHN0cmluZy4KK2VsaWYgdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OnggLiAyPiYxYCIgPSB4IFwKKyAgICAmJiB2PWBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9NCAtLW1hdGNoPSIkcHJlZml4KiIgSEVBRCAyPi9kZXYvbnVsbCBcCisgICAgICAgICAgfHwgZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbGAgXAorICAgICYmIHY9YHByaW50ZiAnJXNcbicgIiR2IiB8IHNlZCAiJHRhZ19zZWRfc2NyaXB0ImAgXAorICAgICYmIGNhc2UgJHYgaW4KKyAgICAgICAgICRwcmVmaXhbMC05XSopIDs7CisgICAgICAgICAqKSAoZXhpdCAxKSA7OworICAgICAgIGVzYWMKK3RoZW4KKyAgICAjIElzIHRoaXMgYSBuZXcgZ2l0IHRoYXQgbGlzdHMgbnVtYmVyIG9mIGNvbW1pdHMgc2luY2UgdGhlIGxhc3QKKyAgICAjIHRhZyBvciB0aGUgcHJldmlvdXMgb2xkZXIgdmVyc2lvbiB0aGF0IGRpZCBub3Q/CisgICAgIyAgIE5ld2VyOiB2Ni4xMC03Ny1nMGY4ZmFlYgorICAgICMgICBPbGRlcjogdjYuMTAtZzBmOGZhZWIKKyAgICBjYXNlICR2IGluCisgICAgICAgICotKi0qKSA6IGdpdCBkZXNjcmliZSBpcyBva2F5IHRocmVlIHBhcnQgZmxhdm9yIDs7CisgICAgICAgICotKikKKyAgICAgICAgICAgIDogZ2l0IGRlc2NyaWJlIGlzIG9sZGVyIHR3byBwYXJ0IGZsYXZvcgorICAgICAgICAgICAgIyBSZWNyZWF0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgYW5kIHJld3JpdGUgc3VjaCB0aGF0IHRoZQorICAgICAgICAgICAgIyByZXN1bHQgaXMgdGhlIHNhbWUgYXMgaWYgd2Ugd2VyZSB1c2luZyB0aGUgbmV3ZXIgdmVyc2lvbgorICAgICAgICAgICAgIyBvZiBnaXQgZGVzY3JpYmUuCisgICAgICAgICAgICB2dGFnPWBlY2hvICIkdiIgfCBzZWQgJ3MvLS4qLy8nYAorICAgICAgICAgICAgY29tbWl0X2xpc3Q9YGdpdCByZXYtbGlzdCAiJHZ0YWciLi5IRUFEIDI+L2Rldi9udWxsYCBcCisgICAgICAgICAgICAgICAgfHwgeyBjb21taXRfbGlzdD1mYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgICBlY2hvICIkMDogV0FSTklORzogZ2l0IHJldi1saXN0IGZhaWxlZCIgMT4mMjsgfQorICAgICAgICAgICAgbnVtY29tbWl0cz1gZWNobyAiJGNvbW1pdF9saXN0IiB8IHdjIC1sYAorICAgICAgICAgICAgdj1gZWNobyAiJHYiIHwgc2VkICJzL1woLipcKS1cKC4qXCkvXDEtJG51bWNvbW1pdHMtXDIvImA7CisgICAgICAgICAgICB0ZXN0ICIkY29tbWl0X2xpc3QiID0gZmFpbGVkICYmIHY9VU5LTk9XTgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIENoYW5nZSB0aGUgZmlyc3QgJy0nIHRvIGEgJy4nLCBzbyB2ZXJzaW9uLWNvbXBhcmluZyB0b29scyB3b3JrIHByb3Blcmx5LgorICAgICMgUmVtb3ZlIHRoZSAiZyIgaW4gZ2l0IGRlc2NyaWJlJ3Mgb3V0cHV0IHN0cmluZywgdG8gc2F2ZSBhIGJ5dGUuCisgICAgdj1gZWNobyAiJHYiIHwgc2VkICdzLy0vLjAuLztzL1woLipcKS1nL1wxLS8nYDsKKyAgICB2X2Zyb21fZ2l0PTEKK2VsaWYgdGVzdCAieCRmYWxsYmFjayIgPSB4IHx8IGdpdCAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgdj1VTktOT1dOCitlbHNlCisgICAgdj0kZmFsbGJhY2sKK2ZpCisKK3Y9YGVjaG8gIiR2IiB8c2VkICJzL14kcHJlZml4Ly8iYAorCisjIFRlc3Qgd2hldGhlciB0byBhcHBlbmQgdGhlICItZGlydHkiIHN1ZmZpeCBvbmx5IGlmIHRoZSB2ZXJzaW9uCisjIHN0cmluZyB3ZSdyZSB1c2luZyBjYW1lIGZyb20gZ2l0LiAgSS5lLiwgc2tpcCB0aGUgdGVzdCBpZiBpdCdzICJVTktOT1dOIgorIyBvciBpZiBpdCBjYW1lIGZyb20gLnRhcmJhbGwtdmVyc2lvbi4KK2lmIHRlc3QgIngkdl9mcm9tX2dpdCIgIT0geDsgdGhlbgorICAjIERvbid0IGRlY2xhcmUgYSB2ZXJzaW9uICJkaXJ0eSIgbWVyZWx5IGJlY2F1c2UgYSB0aW1lIHN0YW1wIGhhcyBjaGFuZ2VkLgorICBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCA+IC9kZXYvbnVsbCAyPiYxCisKKyAgZGlydHk9YGV4ZWMgMj4vZGV2L251bGw7Z2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRGAgfHwgZGlydHk9CisgIGNhc2UgIiRkaXJ0eSIgaW4KKyAgICAgICcnKSA7OworICAgICAgKikgIyBBcHBlbmQgdGhlIHN1ZmZpeCBvbmx5IGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LgorICAgICAgICAgIGNhc2UgJHYgaW4KKyAgICAgICAgICAgICotZGlydHkpIDs7CisgICAgICAgICAgICAqKSB2PSIkdi1kaXJ0eSIgOzsKKyAgICAgICAgICBlc2FjIDs7CisgIGVzYWMKK2ZpCisKKyMgT21pdCB0aGUgdHJhaWxpbmcgbmV3bGluZSwgc28gdGhhdCBtNF9lc3lzY21kIGNhbiB1c2UgdGhlIHJlc3VsdCBkaXJlY3RseS4KK2VjaG8gIiR2IiB8IHRyIC1kICIkbmwiCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMzNjZjkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2UvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1DIHRlc3RzIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlL3N0cmFjZS1hZGQtY29uZmlndXJlLW9wdGlvbnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGU0YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3RyYWNlL3N0cmFjZS9zdHJhY2UtYWRkLWNvbmZpZ3VyZS1vcHRpb25zLnBhdGNoCkBAIC0wLDAgKzEsNTcgQEAKK0FkZCBvcHRpb25zICJhaW8iIGFuZCAiYWNsIiB0byBlbmFibGUvZGlzYWJsZSBsaWJhaW8gYW5kIGFjbCBzdXBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgMjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBlNzM5NThjLi45MDk5MzcwIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNzAsNiArMjcwLDE4IEBAIEFDX0NIRUNLX0hFQURFUlMobTRfbm9ybWFsaXplKFsKKyAJc3lzL3Zmcy5oCisgCXN5cy94YXR0ci5oCisgXSkpCisrCisrQUNfQVJHX0VOQUJMRShbYWNsXSwKKysJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hY2xdLCBbdHVybiBvbiBhY2wgc3VwcG9ydF0pXSwKKysJW2Nhc2UgJGVuYWJsZXZhbCBpbgorKwl5ZXMpCisrCQlBQ19DSEVDS19IRUFERVJTKFtzeXMvYWNsLmhdKQorKwkJOzsKKysJbm8pICA7OworKwkqKSAgIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICRlbmFibGV2YWwgZm9yIGFpbyBvcHRpb25dKSA7OworKwllc2FjXQorKykKKysKKyBBQ19DSEVDS19IRUFERVJTKFtsaW51eC9pY21wLmggbGludXgvaW42LmggbGludXgvbmV0bGluay5oIGxpbnV4L2lmX3BhY2tldC5oXSwKKyAgICAgICAgICAgICAgICAgIFtdLCBbXSwgWyNpbmNsdWRlIDxzdGRkZWYuaD4KKyAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorQEAgLTc0NSw2ICs3NTcsMjAgQEAgaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxhZGRyIiA9IHh5ZXM7IHRoZW4KKyBmaQorIEFDX1NVQlNUKGRsX0xJQlMpCisgCisrQUNfQVJHX0VOQUJMRShbYWlvXSwKKysJW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1haW9dLCBbdHVybiBvbiBsaWJhaW8gc3VwcG9ydF0pXSwKKysJW2Nhc2UgJGVuYWJsZXZhbCBpbgorKwl5ZXMpCisrCUFDX0NIRUNLX0hFQURFUlMoW2xpYmFpby5oXSwgWworKwkJQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlvY2IudS5jLmZsYWdzXSwsLCBbI2luY2x1ZGUgPGxpYmFpby5oPl0pCisrCQlBQ19DSEVDS19ERUNMUyhbSU9fQ01EX1BXUklURSwgSU9fQ01EX1BXUklURVZdLCwsIFsjaW5jbHVkZSA8bGliYWlvLmg+XSkKKysJXSkKKysJOzsKKysJbm8pICA7OworKwkqKSAgIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICRlbmFibGV2YWwgZm9yIGFpbyBvcHRpb25dKSA7OworKwllc2FjXQorKykKKysKKyBBQ19QQVRIX1BST0coW1BFUkxdLCBbcGVybF0pCisgCisgZG5sIHN0YWNrIHRyYWNlIHdpdGggbGlidW53aW5kCistLQorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N0cmFjZS9zdHJhY2VfNC4xMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiN2UzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdHJhY2Uvc3RyYWNlXzQuMTAuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJTeXN0ZW0gY2FsbCB0cmFjaW5nIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vc3RyYWNlLnNvdXJjZWZvcmdlLm5ldCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTI0NTAwYzIxZTg1NmYwOTEyZGYyOTI5NWJhMTA0YzciCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3N0cmFjZS9zdHJhY2UtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtQWRkLWxpbnV4LWFhcmNoNjQtYXJjaF9yZWdzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2l0LXZlcnNpb24tZ2VuIFwKKyAgICAgICAgICAgZmlsZTovL3N0cmFjZS1hZGQtY29uZmlndXJlLW9wdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL0luY2x1ZGUtc3lzLXN0YXQuaC1mb3ItU19JLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9JbmNsdWRlLWxpbnV4LWlvY3RsLmgtZm9yLV9JT0NfLW1hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTA3YTViZTQ1NTQ5Mzg2MTE4OWU5YjU3YTNhNTE5MTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTYxODBkODY2ZWY5ZTc2NTg2Yjk2ZTJlY2UyYmZlZWIzYWEyM2Y1Y2M4ODE1M2Y3NmU5Y2FlZGQ2NWU0MGVlMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmx1ZXRvb3RoCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBjb3JldXRpbHMgZ3JlcCBnYXdrIgorCitQQUNLQUdFQ09ORklHX2NsYXNzLXRhcmdldCA/Pz0gIlwKKyAgICBsaWJhaW8gJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhY2wnLCAnYWNsJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnYmx1ZXonLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1tsaWJhaW9dID0gIi0tZW5hYmxlLWFpbywtLWRpc2FibGUtYWlvLGxpYmFpbyIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wiCitQQUNLQUdFQ09ORklHW2xpYnVud2luZF0gPSAiLS13aXRoLWxpYnVud2luZCwgLS13aXRob3V0LWxpYnVud2luZCwgbGlidW53aW5kIgorUEFDS0FHRUNPTkZJR1tibHVlel0gPSAiYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD15ZXMsYWNfY3ZfaGVhZGVyX2JsdWV0b290aF9ibHVldG9vdGhfaD1ubywke0JMVUVafSIKKworVEVTVERJUiA9ICJ0ZXN0cyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY3AgJHtXT1JLRElSfS9naXQtdmVyc2lvbi1nZW4gJHtTfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFdlIGRvbid0IHNoaXAgc3RyYWNlLWdyYXBoIGhlcmUgYmVjYXVzZSBpdCBuZWVkcyBwZXJsCisJcm0gJHtEfSR7YmluZGlyfS9zdHJhY2UtZ3JhcGgKK30KKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIC1DICR7VEVTVERJUn0gYnVpbGR0ZXN0LVRFU1RTIE9TPWxpbnV4IEFSQ0g9IiR7VEFSR0VUX0FSQ0h9IgorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBpbnN0YWxsLXB0ZXN0IEJVSUxERElSPSR7Qn0gREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBURVNURElSPSR7VEVTVERJUn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9kaXNhYmxlX21hY29zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNiZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvZGlzYWJsZV9tYWNvcy5wYXRjaApAQCAtMCwwICsxLDY4IEBACitUaGVzZSB0ZXN0cyBkb24ndCB3b3JrIGluIGNyb3NzIGNvbXBpbGluZywganVzdCBkaXNhYmxlIHRoZW0gZm9yIG5vdywgd2UgZG9uJ3QKK2J1aWxkIHN1YnZlcnNpb24gb24gT1MtWCBhdCB0aGlzIHRpbWUuCisKK1JQIDEwMTQvNy8xNgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcgW25lZWRzIGEgcmV3cml0ZSB0byBzdXBwb3J0IGEgY2FjaGUgdmFsdWVdCisKK0luZGV4OiBzdWJ2ZXJzaW9uLTEuOC45L2J1aWxkL2FjLW1hY3Jvcy9tYWNvc3gubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzdWJ2ZXJzaW9uLTEuOC45Lm9yaWcvYnVpbGQvYWMtbWFjcm9zL21hY29zeC5tNAkyMDEyLTExLTI2IDAzOjA0OjI3LjAwMDAwMDAwMCArMDAwMAorKysrIHN1YnZlcnNpb24tMS44LjkvYnVpbGQvYWMtbWFjcm9zL21hY29zeC5tNAkyMDE0LTA3LTE2IDEyOjI4OjU4LjM1NzMwMDQwMyArMDAwMAorQEAgLTI0LDIxICsyNCw3IEBACisgQUNfREVGVU4oU1ZOX0xJQl9NQUNIT19JVEVSQVRFLAorIFsKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIE1hY2gtTyBkeW5hbWljIG1vZHVsZSBpdGVyYXRpb24gZnVuY3Rpb25zXSkKKy0gIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworLSAgICAjaW5jbHVkZSA8bWFjaC1vL2R5bGQuaD4KKy0gICAgI2luY2x1ZGUgPG1hY2gtby9sb2FkZXIuaD4KKy0gIF1dLFtbCistICAgIGNvbnN0IHN0cnVjdCBtYWNoX2hlYWRlciAqaGVhZGVyID0gX2R5bGRfZ2V0X2ltYWdlX2hlYWRlcigwKTsKKy0gICAgY29uc3QgY2hhciAqbmFtZSA9IF9keWxkX2dldF9pbWFnZV9uYW1lKDApOworLSAgICBpZiAobmFtZSAmJiBoZWFkZXIpIHJldHVybiAwOworLSAgICByZXR1cm4gMTsKKy0gIF1dKV0sWworLSAgICBBQ19ERUZJTkUoW1NWTl9IQVZFX01BQ0hPX0lURVJBVEVdLCBbMV0sCistICAgICAgICAgICAgICBbSXMgTWFjaC1PIGxvdy1sZXZlbCBfZHlsZCBBUEkgYXZhaWxhYmxlP10pCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICBdLFsKKyAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorLSAgXSkKKyBdKQorIAorIGRubCBTVk5fTElCX01BQ09TX1BMSVNUCitAQCAtNDYsMzQgKzMyLDcgQEAKKyBBQ19ERUZVTihTVk5fTElCX01BQ09TX1BMSVNULAorIFsKKyAgIEFDX01TR19DSEVDS0lORyhbZm9yIE1hYyBPUyBwcm9wZXJ0eSBsaXN0IHV0aWxpdGllc10pCistCistICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCistICAgICNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KKy0gICAgI2lmICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQpIFwKKy0gICAgIHx8ICFkZWZpbmVkKE1BQ19PU19YX1ZFUlNJT05fMTBfMCkgXAorLSAgICAgfHwgKE1BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPD0gTUFDX09TX1hfVkVSU0lPTl8xMF8wKQorLSAgICAjZXJyb3IgUHJvcGVyeUxpc3QgQVBJIHVuYXZhaWxhYmxlLgorLSAgICAjZW5kaWYKKy0gIF1dLFtbXV0pXSxbCistICAgIGRubCAjIyMgSGFjay4gIFdlIHNob3VsZCBvbmx5IG5lZWQgdG8gcGFzcyB0aGUgLWZyYW1ld29yayBvcHRpb25zIHdoZW4KKy0gICAgZG5sIGxpbmtpbmcgbGlic3ZuX3N1YnIsIHNpbmNlIGl0IGlzIHRoZSBvbmx5IGxpYnJhcnkgdGhhdCB1c2VzIEtleWNoYWluLgorLSAgICBkbmwKKy0gICAgZG5sIFVuZm9ydHVuYXRlbHksIGxpYnRvb2wgMS41LnggZG9lc24ndCB0cmFjayB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBmb3IKKy0gICAgZG5sIE9TIFggZnJhbWV3b3JrcyBsaWtlIGl0IGRvZXMgZm9yIG5vcm1hbCBsaWJyYXJpZXMsIHNvIHdlIG5lZWQgdG8KKy0gICAgZG5sIGV4cGxpY2l0bHkgcGFzcyB0aGUgb3B0aW9uIHRvIGFsbCB0aGUgdXNlcnMgb2YgbGlic3ZuX3N1YnIgdG8gYWxsb3cKKy0gICAgZG5sIHN0YXRpYyBidWlsZHMgdG8gbGluayBzdWNjZXNzZnVsbHkuCistICAgIGRubAorLSAgICBkbmwgVGhpcyBkb2VzIG1lYW4gdGhhdCBhbGwgZXhlY3V0YWJsZXMgd2UgbGluayB3aWxsIGJlIGxpbmtlZCBkaXJlY3RseQorLSAgICBkbmwgdG8gdGhlc2UgZnJhbWV3b3JrcyAtIGV2ZW4gd2hlbiBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzIC0gYnV0IHRoYXQKKy0gICAgZG5sIHNob3VsZG4ndCBjYXVzZSBhbnkgcHJvYmxlbXMuCistCistICAgIExJQlM9IiRMSUJTIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCistICAgIEFDX0RFRklORShbU1ZOX0hBVkVfTUFDT1NfUExJU1RdLCBbMV0sCistICAgICAgICAgICAgICBbSXMgTWFjIE9TIHByb3BlcnR5IGxpc3QgQVBJIGF2YWlsYWJsZT9dKQorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorLSAgXSxbCisgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKy0gIF0pCisgXSkKKyAKKyBkbmwgU1ZOX0xJQl9NQUNPU19LRVlDSEFJTgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9saWJ0b29sMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q1NzJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvbGlidG9vbDIucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworLS0tIGEvY29uZmlndXJlLmFjCTIwMTEtMTAtMjAgMjE6NTY6MDIuMjMwNjYzOTg3ICswMjAwCisrKysgYi9jb25maWd1cmUuYWMJMjAxMS0wOC0xNyAxNTowMTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMjcsOCArMjI3LDggQEAKKyAgIExJQlRPT0w9IiRzaF9saWJ0b29sIgorICAgU1ZOX0xJQlRPT0w9IiRzaF9saWJ0b29sIgorIGVsc2UKKy0gIHNoX2xpYnRvb2w9IiRhYnNfYnVpbGRkaXIvbGlidG9vbCIKKy0gIFNWTl9MSUJUT09MPSJcJChTSEVMTCkgJHNoX2xpYnRvb2wiCisrICBzaF9saWJ0b29sPSIkYWJzX2J1aWxkZGlyLyRob3N0X2FsaWFzLWxpYnRvb2wiCisrICBTVk5fTElCVE9PTD0iXCQoU0hFTEwpIFwkKGFic19idWlsZGRpcikvJGhvc3RfYWxpYXMtbGlidG9vbCIKKyBmaQorIEFDX1NVQlNUKFNWTl9MSUJUT09MKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N1YnZlcnNpb24vc3VidmVyc2lvbi0xLjguMTMvc2VyZi5tNC1SZWdleC1tb2RpZmllZC10by1hbGxvdy1ELWluLXBhdGhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MGU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uLTEuOC4xMy9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSBmMWI2ZTQ5ZjEyYTE4ZWFiZTg4ZWI3MzJiNTc4YTE2MjgxZDA5NDk5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSm9zZSBMYW1lZ28gPGpvc2UuYS5sYW1lZ29AbGludXguaW50ZWwuY29tPgorRGF0ZTogVGh1LCAyIEp1bCAyMDE1IDExOjM3OjQzICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlcmYubTQ6IFJlZ2V4IG1vZGlmaWVkIHRvIGFsbG93ICctRCcgaW4gcGF0aHMKKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZAorCitUaGUgcGF0Y2ggaXMgbWVyZ2VkIGJ5IHN1YnZlcnNpb24gdXBzdHJlYW0gd2l0aCByZXBsYWNpbmcgJ1tbOnNwYWNlOl1dJyB3aXRoICcgJy4KKworaHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9zdWJ2ZXJzaW9uL3RydW5rL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00P3IxPTE1OTQxNTYmcjI9MTY4OTgyNCAgCisKK1NpZ25lZC1vZmYtYnk6IEpvc2UgTGFtZWdvIDxqb3NlLmEubGFtZWdvQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGJ1aWxkL2FjLW1hY3Jvcy9zZXJmLm00IHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYnVpbGQvYWMtbWFjcm9zL3NlcmYubTQgYi9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAoraW5kZXggYWUxMWU3NS4uZmY4Y2JhZSAxMDA2NDQKKy0tLSBhL2J1aWxkL2FjLW1hY3Jvcy9zZXJmLm00CisrKysgYi9idWlsZC9hYy1tYWNyb3Mvc2VyZi5tNAorQEAgLTE0Myw3ICsxNDMsNyBAQCBBQ19ERUZVTihTVk5fU0VSRl9QS0dfQ09ORklHLAorICAgICAgICAgaWYgJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1hdGxlYXN0LXZlcnNpb249JHNlcmZfY2hlY2tfdmVyc2lvbjsgdGhlbgorICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgICAgICBzZXJmX2ZvdW5kPXllcworLSAgICAgICAgICBTVk5fU0VSRl9JTkNMVURFUz1bYCRQS0dfQ09ORklHICRzZXJmX21ham9yIC0tY2ZsYWdzIHwgJFNFRCAtZSAncy8tRFteIF0qLy9nJ2BdCisrICAgICAgICAgIFNWTl9TRVJGX0lOQ0xVREVTPVtgJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1jZmxhZ3MgfCAkU0VEIC1lICdzL1tbOnNwYWNlOl1dLURbXiBdKi8vZycgLWUgJ3MvXi1EW14gXSovL2cnYF0KKyAgICAgICAgICAgU1ZOX1NFUkZfTElCUz1gJFBLR19DT05GSUcgJHNlcmZfbWFqb3IgLS1saWJzYCAKKyAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIGVsc2UKKy0tIAorMS44LjQuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zdWJ2ZXJzaW9uL3N1YnZlcnNpb25fMS44LjEzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NDNiOTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3VidmVyc2lvbi9zdWJ2ZXJzaW9uXzEuOC4xMy5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlN1YnZlcnNpb24gKHN2bikgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBjbGllbnQiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0RFUEVORFMgPSAiYXByLXV0aWwgc2VyZiBzcWxpdGUzIGZpbGUiCitSREVQRU5EU18ke1BOfSA9ICJzZXJmIgorTElDRU5TRSA9ICJBcGFjaGUtMiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGdldHRleHQgcHl0aG9ubmF0aXZlCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZV9tYWNvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXJmLm00LVJlZ2V4LW1vZGlmaWVkLXRvLWFsbG93LUQtaW4tcGF0aHMucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjQ0MTM0MTdiNTI5ZDdiZGY4MmY3NGU1MGRmMDJlODhiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjEwOTljYzY4ODQwNzUzYjQ4YWVkYjNhMjdlYmQxZTJhZmJjYzg0ZGRiODcxNDEyZTVkNTAwZTg0M2Q2MDc1NzkiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTFjMmYwMTE5ZTQ3ODcwMGI1NDI4ZTI2Mzg2Y2ZmOTIzIgorCitQQUNLQUdFQ09ORklHW3Nhc2xdID0gIi0td2l0aC1zYXNsLC0td2l0aG91dC1zYXNsLGN5cnVzLXNhc2wiCitQQUNLQUdFQ09ORklHW2dub21lLWtleXJpbmddID0gIi0td2l0aC1nbm9tZS1rZXlyaW5nLC0td2l0aG91dC1nbm9tZS1rZXlyaW5nLGdsaWItMi4wIGdub21lLWtleXJpbmciCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1iZXJrZWxleS1kYiAtLXdpdGhvdXQtYXB4cyBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LXN3aWcgLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfSBcCisgICAgICAgICAgICAgICAgLS13aXRoLWFwci11dGlsPSR7U1RBR0lOR19CSU5ESVJfQ1JPU1N9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUta2V5Y2hhaW4gXAorICAgICAgICAgICAgICAgIGFjX2N2X3BhdGhfUlVCWT1ub25lIgorCitpbmhlcml0IGF1dG90b29scworCitleHBvcnQgTERGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gIgorQ1BQRkxBR1MgKz0gIi1QIgorQlVJTERfQ1BQRkxBR1MgKz0gIi1QIgorCithY3BhdGhzID0gIi1JIGJ1aWxkLyAtSSBidWlsZC9hYy1tYWNyb3MvIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9saWJ0b29sCisJcm0gLWYgJHtTfS9idWlsZC9saWJ0b29sLm00ICR7U30vYnVpbGQvbHRtYWluLnNoICR7U30vYnVpbGQvbHRvcHRpb25zLm00ICR7U30vYnVpbGQvbHRzdWdhci5tNCAke1N9L2J1aWxkL2x0dmVyc2lvbi5tNCAke1N9L2J1aWxkL2x0fm9ic29sZXRlLm00CisJcm0gLWYgJHtTfS9hY2xvY2FsLm00CisJc2VkIC1pIC1lICdzOndpdGhfc2FzbD0iL3Vzci9sb2NhbCI6d2l0aF9zYXNsPSIke1NUQUdJTkdfRElSfSI6JyAke1N9L2J1aWxkL2FjLW1hY3Jvcy9zYXNsLm00Cit9CisKKyN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfbG9jYWwvbGlic3ZuX3JhX2xvY2FsLTEubGEnIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliJ3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9idWlsZC9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCAvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxzdm5fZGVsdGEtMXwgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXN8IHg4Nl82NC1saW51eC1saWJ0b29sOiBpbnN0YWxsOiB3YXJuaW5nOiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvd29yay94ODZfNjQtbGludXgvc3VidmVyc2lvbi1uYXRpdmUvMS44LjktcjAvYnVpbGQvc3VidmVyc2lvbi9saWJzdm5fcmFfc3ZuL2xpYnN2bl9yYV9zdm4tMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogd2FybmluZzogYC9ob21lL3Bva3lidWlsZC95b2N0by1hdXRvYnVpbGRlci95b2N0by13b3JrZXIvbmlnaHRseS1xYS1sb2dyb3RhdGUvYnVpbGQvYnVpbGQvdG1wL3dvcmsveDg2XzY0LWxpbnV4L3N1YnZlcnNpb24tbmF0aXZlLzEuOC45LXIwL2J1aWxkL3N1YnZlcnNpb24vbGlic3ZuX3JhX3NlcmYvbGlic3ZuX3JhX3NlcmYtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCisjfCB4ODZfNjQtbGludXgtbGlidG9vbDogaW5zdGFsbDogZXJyb3I6IHJlbGluayBgbGlic3ZuX3JhX3NlcmYtMS5sYScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdAorI3wgeDg2XzY0LWxpbnV4LWxpYnRvb2w6IGluc3RhbGw6IHdhcm5pbmc6IGAuLi8uLi9zdWJ2ZXJzaW9uL2xpYnN2bl9yZXBvcy9saWJzdm5fcmVwb3MtMS5sYScgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBgL2hvbWUvcG9reWJ1aWxkL3lvY3RvLWF1dG9idWlsZGVyL3lvY3RvLXdvcmtlci9uaWdodGx5LXFhLWxvZ3JvdGF0ZS9idWlsZC9idWlsZC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWInCisjfCAvaG9tZS9wb2t5YnVpbGQveW9jdG8tYXV0b2J1aWxkZXIveW9jdG8td29ya2VyL25pZ2h0bHktcWEtbG9ncm90YXRlL2J1aWxkL2J1aWxkL3RtcC93b3JrL3g4Nl82NC1saW51eC9zdWJ2ZXJzaW9uLW5hdGl2ZS8xLjguOS1yMC9zdWJ2ZXJzaW9uLTEuOC45L2J1aWxkLW91dHB1dHMubWs6MTA5MDogcmVjaXBlIGZvciB0YXJnZXQgJ2luc3RhbGwtc2VyZi1saWInIGZhaWxlZAorI3wgbWFrZTogKioqIFtpbnN0YWxsLXNlcmYtbGliXSBFcnJvciAxCitQQVJBTExFTF9NQUtFSU5TVCA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dhYmJlci9zd2FiYmVyLW5hdGl2ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMTNiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2FiYmVyL3N3YWJiZXItbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlRvb2wgdG8gbW9uaXRvciBhbmQgcmVwb3J0IG9uIGhvc3Qgc3lzdGVtIGZpbGUgdXNhZ2UiCitIT01FUEFHRSA9ICJodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS9zd2FiYmVyIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTM5M2E1Y2E0NDVmNjk2NTg3M2VjYTAyNTlhMTdmODMzIgorCitTUkNSRVYgPSAiMmQxZmUzNmZiMGE0ZmRhYWU4ODIzYTk4MThhNjc4NTE4MmQ3NWU2NiIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9zd2FiYmVyIgorCitpbmhlcml0IG5hdGl2ZQorCitkb19jb25maWd1cmUgKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKyAgb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjFmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLmluYwpAQCAtMCwwICsxLDYzIEBACitERVNDUklQVElPTiA9ICJTV0lHIC0gU2ltcGxpZmllZCBXcmFwcGVyIGFuZCBJbnRlcmZhY2UgR2VuZXJhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3N3aWcuc291cmNlZm9yZ2UubmV0LyIKK0xJQ0VOU0UgPSAiQlNEICYgR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1lNzgwN2E2MjgyNzg0YTdkZGU0Yzg0NjYyNmIwOGZjNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLUdQTDttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS1VTklWRVJTSVRJRVM7bWQ1PThjZTlkY2M4ZjdjOTk0ZGU0YTQwOGIyMDVjNzJiYTA4IgorCitTRUNUSU9OID0gImRldmVsIgorCitERVBFTkRTID0gImxpYnBjcmUgcHl0aG9uIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUE59LSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHl0aG9ubmF0aXZlCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0td2l0aC1weXRob249JHtQWVRIT059IFwKKyAgICAtLXdpdGhvdXQtYWxsZWdyb2NsIFwKKyAgICAtLXdpdGhvdXQtYW5kcm9pZCBcCisgICAgLS13aXRob3V0LWJvb3N0IFwKKyAgICAtLXdpdGhvdXQtY2hpY2tlbiBcCisgICAgLS13aXRob3V0LWNsaXNwIFwKKyAgICAtLXdpdGhvdXQtY3NoYXJwIFwKKyAgICAtLXdpdGhvdXQtZCBcCisgICAgLS13aXRob3V0LWdjaiBcCisgICAgLS13aXRob3V0LWdvIFwKKyAgICAtLXdpdGhvdXQtZ3VpbGUgXAorICAgIC0td2l0aG91dC1qYXZhIFwKKyAgICAtLXdpdGhvdXQtbHVhIFwKKyAgICAtLXdpdGhvdXQtbXpzY2hlbWUgXAorICAgIC0td2l0aG91dC1vY2FtbCBcCisgICAgLS13aXRob3V0LW9jdGF2ZSBcCisgICAgLS13aXRob3V0LXBlcmw1IFwKKyAgICAtLXdpdGhvdXQtcGlrZSBcCisgICAgLS13aXRob3V0LXBocCBcCisgICAgLS13aXRob3V0LXB5dGhvbjMgXAorICAgIC0td2l0aG91dC1yIFwKKyAgICAtLXdpdGhvdXQtcnVieSBcCisgICAgLS13aXRob3V0LXRjbCBcCisiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9fY29uZmlndXJlKCkgeworICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLmd1ZXNzICR7U30vVG9vbHMvY29uZmlnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuc3ViICR7U30vVG9vbHMvY29uZmlnCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9CisgICAgb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgY2QgJHtEfSR7YmluZGlyfQorICAgIGxuIC1zIHN3aWcgc3dpZzIuMAorfQorCitkZWYgc3dpZ2xpYl9yZWxwYXRoKGQpOgorICAgIHN3aWdsaWIgPSBkLmdldFZhcignZGF0YWRpcicsIFRydWUpICsgIi8iICsgZC5nZXRWYXIoJ0JQTicsIFRydWUpICsgIi8iICsgZC5nZXRWYXIoJ1BWJywgVHJ1ZSkKKyAgICByZXR1cm4gb3MucGF0aC5yZWxwYXRoKHN3aWdsaWIsIGQuZ2V0VmFyKCdiaW5kaXInLCBUcnVlKSkKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgIGNyZWF0ZV93cmFwcGVyICR7RH0ke2JpbmRpcn0vc3dpZyBTV0lHX0xJQj0nYGRpcm5hbWUgJCcncmVhbHBhdGhgJy8ke0Bzd2lnbGliX3JlbHBhdGgoZCl9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zd2lnL3N3aWcvMDAwMS1Vc2UtcHJvYy1zZWxmLWV4ZS1mb3Itc3dpZy1zd2lnbGliLW9uLW5vbi1XaW4zMi1wbGF0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZGYzZTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtVXNlLXByb2Mtc2VsZi1leGUtZm9yLXN3aWctc3dpZ2xpYi1vbi1ub24tV2luMzItcGxhdC5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIGE0YTA0NDBhNjQ0YzZjNWU1ZGEwOTZlZmUzY2YwNWJhMzA5YTI4NGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiAiTk9EQSwgS2FpIiA8bm9kYWthaUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDIyIEFwciAyMDEyIDE3OjAxOjAyICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIFVzZSAvcHJvYy9zZWxmL2V4ZSBmb3IgInN3aWcgLXN3aWdsaWIiIG9uIG5vbi1XaW4zMgorIHBsYXRmb3Jtcy4KKworSWYgaXQgd2Fzbid0IGZvdW5kLCB0aGVuIGZhbGwgYmFjayB0byBhIGZpeGVkIHN0cmluZyBqdXN0IGFzIGJlZm9yZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvbWVzc2FnZS5waHA/bXNnX2lkPTI5MTc5NzMzCisKKy0tLQorIFNvdXJjZS9Nb2R1bGVzL21haW4uY3h4IHwgICAyNCArKysrKysrKysrKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1NvdXJjZS9Nb2R1bGVzL21haW4uY3h4IGIvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKK2luZGV4IGQyZjVkM2IuLmNiYjBhMTIgMTAwNjQ0CistLS0gYS9Tb3VyY2UvTW9kdWxlcy9tYWluLmN4eAorKysrIGIvU291cmNlL01vZHVsZXMvbWFpbi5jeHgKK0BAIC0yNiw2ICsyNiwxMSBAQCBjaGFyIGN2c3Jvb3RfbWFpbl9jeHhbXSA9ICIkSWQkIjsKKyAjaW5jbHVkZSAiY3BhcnNlLmgiCisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGxpbWl0cy5oPgkJLy8gZm9yIElOVF9NQVgKKysjaWZuZGVmIF9XSU4zMgorKyNpbmNsdWRlIDxjc3RkZGVmPgorKyNpbmNsdWRlIDx1bmlzdGQuaD4JCS8vIGZvciByZWFkbGluaworKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgkJLy8gZm9yIHN0YXQKKysjZW5kaWYKKyAKKyAvLyBHbG9iYWwgdmFyaWFibGVzCisgCitAQCAtOTAyLDkgKzkwNyw5IEBAIGludCBTV0lHX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgTGFuZ3VhZ2UgKmwpIHsKKyAKKyAgIC8vIENoZWNrIGZvciBTV0lHX0xJQiBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgaWYgKChjID0gZ2V0ZW52KCJTV0lHX0xJQiIpKSA9PSAoY2hhciAqKSAwKSB7CisrICAgIGNoYXIgKnA7CisgI2lmIGRlZmluZWQoX1dJTjMyKQorICAgICBjaGFyIGJ1ZltNQVhfUEFUSF07CistICAgIGNoYXIgKnA7CisgICAgIGlmICghKEdldE1vZHVsZUZpbGVOYW1lKDAsIGJ1ZiwgTUFYX1BBVEgpID09IDAgfHwgKHAgPSBzdHJyY2hyKGJ1ZiwgJ1xcJykpID09IDApKSB7CisgICAgICAgKihwICsgMSkgPSAnXDAnOworICAgICAgIFN3aWdMaWIgPSBOZXdTdHJpbmdmKCIlc0xpYiIsIGJ1Zik7IC8vIE5hdGl2ZSB3aW5kb3dzIGluc3RhbGxhdGlvbiBwYXRoCitAQCAtOTE0LDcgKzkxOSwyMiBAQCBpbnQgU1dJR19tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sIExhbmd1YWdlICpsKSB7CisgICAgIGlmIChMZW4oU1dJR19MSUJfV0lOX1VOSVgpID4gMCkKKyAgICAgICBTd2lnTGliV2luVW5peCA9IE5ld1N0cmluZyhTV0lHX0xJQl9XSU5fVU5JWCk7IC8vIFVuaXggaW5zdGFsbGF0aW9uIHBhdGggdXNpbmcgYSBkcml2ZSBsZXR0ZXIgKGZvciBtc3lzL21pbmd3KQorICNlbHNlCistICAgIFN3aWdMaWIgPSBOZXdTdHJpbmcoU1dJR19MSUIpOworKyAgICBjaGFyIGJ1ZltQQVRIX01BWF07CisrICAgIGlmICgwIDwgOjpyZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBidWYsIHNpemVvZihidWYpKSAmJgorKyAgICAgICAgKHAgPSA6OnN0cnN0cihidWYsICIvYmluL3N3aWciKSkpIHsKKysgICAgICAgIGludCBtYWpvciwgbWlub3IsIHBhdGNoOworKyAgICAgICAgY29uc3QgaW50IHJldCA9IDo6c3NjYW5mKFZFUlNJT04sICIlZC4lZC4lZCIsICZtYWpvciwgJm1pbm9yLCAmcGF0Y2gpOworKyAgICAgICAgaWYgKDMgPT0gcmV0KSB7CisrICAgICAgICAgICAgY29uc3QgOjpwdHJkaWZmX3QgZGlyX3BhcnRfbGVuID0gcCAtIGJ1ZjsKKysgICAgICAgICAgICA6OnNucHJpbnRmKHAsIFBBVEhfTUFYIC0gZGlyX3BhcnRfbGVuLCAiL3NoYXJlL3N3aWcvJWQuJWQuJWQiLCBtYWpvciwgbWlub3IsIHBhdGNoKTsKKysgICAgICAgICAgICBzdHJ1Y3QgOjpzdGF0IHN0YXRfcmVzOworKyAgICAgICAgICAgIGlmICgwID09IDo6c3RhdChidWYsICZzdGF0X3JlcykgJiYgU19JU0RJUihzdGF0X3Jlcy5zdF9tb2RlKSkgeworKyAgICAgICAgICAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nKGJ1Zik7CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrICAgIGlmIChOVUxMID09IFN3aWdMaWIpCisrICAgICAgICBTd2lnTGliID0gTmV3U3RyaW5nKFNXSUdfTElCKTsKKyAjZW5kaWYKKyAgIH0gZWxzZSB7CisgICAgIFN3aWdMaWIgPSBOZXdTdHJpbmcoYyk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnLzAwMDEtY29uZmlndXJlLXVzZS1wa2ctY29uZmlnLWZvci1wY3JlLWRldGVjdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjExMjhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZy8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA1YzRkNmQ4NTM4OTk0ZDVmZTliM2I0NmJmYWZhZjBhNjA1ZTNiZGE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK0RhdGU6IFR1ZSwgMTcgSnVuIDIwMTQgMDg6MTg6MTcgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiB1c2UgcGtnLWNvbmZpZyBmb3IgcGNyZSBkZXRlY3Rpb24KKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuLmtvb2lAbGluYXJvLm9yZz4KK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworLS0tCisgY29uZmlndXJlLmFjIHwgMzggKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMGM5ODRiNy4uNmVkY2VjMSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzAsMzggKzcwLDE0IEBAIEFDX01TR19SRVNVTFQoWyR3aXRoX3BjcmVdKQorIAorIGRubCBUbyBtYWtlIGNvbmZpZ3VyaW5nIGVhc2llciwgY2hlY2sgZm9yIGEgbG9jYWxseSBidWlsdCBQQ1JFIHVzaW5nIHRoZSBUb29scy9wY3JlLWJ1aWxkLnNoIHNjcmlwdAorIGlmIHRlc3QgeCIke3dpdGhfcGNyZX0iID0geHllcyA7IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgbG9jYWwgUENSRV0pCistICBsb2NhbF9wY3JlX2NvbmZpZz1ubworLSAgaWYgdGVzdCAteiAkUENSRV9DT05GSUc7IHRoZW4KKy0gICAgaWYgdGVzdCAtZiBgcHdkYC9wY3JlL3BjcmUtc3dpZy1pbnN0YWxsL2Jpbi9wY3JlLWNvbmZpZzsgdGhlbgorLSAgICAgIFBDUkVfQ09ORklHPWBwd2RgL3BjcmUvcGNyZS1zd2lnLWluc3RhbGwvYmluL3BjcmUtY29uZmlnCistICAgICAgbG9jYWxfcGNyZV9jb25maWc9JFBDUkVfQ09ORklHCistICAgIGZpCistICBmaQorLSAgQUNfTVNHX1JFU1VMVChbJGxvY2FsX3BjcmVfY29uZmlnXSkKKy1maQorLUFTX0lGKFt0ZXN0ICJ4JHdpdGhfcGNyZSIgIT0geG5vXSwKKy0gIFtBWF9QQVRIX0dFTkVSSUMoW3BjcmVdLAorLSAgICBbXSwgZG5sIE1pbmltYWwgdmVyc2lvbiBvZiBQQ1JFIHdlIG5lZWQgLS0gYWNjZXB0IGFueQorLSAgICBbXSwgZG5sIGN1c3RvbSBzZWQgc2NyaXB0IGZvciB2ZXJzaW9uIHBhcnNpbmcgaXMgbm90IG5lZWRlZAorLSAgICBbQUNfREVGSU5FKFtIQVZFX1BDUkVdLCBbMV0sIFtEZWZpbmUgaWYgeW91IGhhdmUgUENSRSBsaWJyYXJ5XSkKKy0gICAgIExJQlM9IiRMSUJTICRQQ1JFX0xJQlMiCistICAgICBDUFBGTEFHUz0iJENQUEZMQUdTICRQQ1JFX0NGTEFHUyIKKy0gICAgXSwKKy0gICAgW0FDX01TR19GQUlMVVJFKFsKKy0gICAgICAgIENhbm5vdCBmaW5kIHBjcmUtY29uZmlnIHNjcmlwdCBmcm9tIFBDUkUgKFBlcmwgQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zKQorLSAgICAgICAgbGlicmFyeSBwYWNrYWdlLiBUaGlzIGRlcGVuZGVuY3kgaXMgbmVlZGVkIGZvciBjb25maWd1cmUgdG8gY29tcGxldGUsCistICAgICAgICBFaXRoZXI6CistICAgICAgICAtIEluc3RhbGwgdGhlIFBDUkUgZGV2ZWxvcGVyIHBhY2thZ2Ugb24geW91ciBzeXN0ZW0gKHByZWZlcnJlZCBhcHByb2FjaCkuCistICAgICAgICAtIERvd25sb2FkIHRoZSBQQ1JFIHNvdXJjZSB0YXJiYWxsLCBidWlsZCBhbmQgaW5zdGFsbCBvbiB5b3VyIHN5c3RlbQorLSAgICAgICAgICBhcyB5b3Ugd291bGQgZm9yIGFueSBwYWNrYWdlIGJ1aWx0IGZyb20gc291cmNlIGRpc3RyaWJ1dGlvbi4KKy0gICAgICAgIC0gVXNlIHRoZSBUb29scy9wY3JlLWJ1aWxkLnNoIHNjcmlwdCB0byBidWlsZCBQQ1JFIGp1c3QgZm9yIFNXSUcgdG8gc3RhdGljYWxseQorLSAgICAgICAgICBsaW5rIGFnYWluc3QuIFJ1biAnVG9vbHMvcGNyZS1idWlsZC5zaCAtLWhlbHAnIGZvciBpbnN0cnVjdGlvbnMuCistICAgICAgICAgIChxdWl0ZSBlYXN5IGFuZCBkb2VzIG5vdCByZXF1aXJlIHByaXZpbGVnZXMgdG8gaW5zdGFsbCBQQ1JFIG9uIHlvdXIgc3lzdGVtKQorLSAgICAgICAgLSBVc2UgY29uZmlndXJlIC0td2l0aG91dC1wY3JlIHRvIGRpc2FibGUgcmVndWxhciBleHByZXNzaW9ucyBzdXBwb3J0IGluIFNXSUcKKy0gICAgICAgICAgKG5vdCByZWNvbW1lbmRlZCkuXSkKKy0gICAgXSkKKysgIFBLR19DSEVDS19NT0RVTEVTKFtQQ1JFXSwgW2xpYnBjcmVdLCBbCisrICAgIEFDX0RFRklORShbSEFWRV9QQ1JFXSwgWzFdLCBbRGVmaW5lIGlmIHlvdSBoYXZlIFBDUkUgbGlicmFyeV0pCisrICAgIExJQlM9IiRMSUJTICRQQ1JFX0xJQlMiCisrICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFBDUkVfQ0ZMQUdTIgorKyAgXSwgWworKyAgICBBQ19NU0dfV0FSTihbJFBDUkVfUEtHX0VSUk9SU10pCisgICBdKQorK2ZpCisgCisgCisgZG5sIENDYWNoZQorLS0gCisxLjkuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3dpZy9zd2lnXzMuMC42LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTA5MTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N3aWcvc3dpZ18zLjAuNi5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1Vc2UtcHJvYy1zZWxmLWV4ZS1mb3Itc3dpZy1zd2lnbGliLW9uLW5vbi1XaW4zMi1wbGF0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS11c2UtcGtnLWNvbmZpZy1mb3ItcGNyZS1kZXRlY3Rpb24ucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZGY0M2FlMjcxNjQyYmNmYTYxYzFlNTlmOTcwZjk5NjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzY3ZjYzZWExMTk1NjEwNmU0Y2RhNjY0MTZkNTAyMDMzMGRjNGNlMmVlNDUwNTdkMzlhOTQ5NGNlMzNlY2EwNSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMS1saW51eC1zeXNsaW51eC1zdXBwb3J0LWV4dDItMy00LWRldmljZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWI3ODc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDEtbGludXgtc3lzbGludXgtc3VwcG9ydC1leHQyLTMtNC1kZXZpY2UucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorRnJvbSA2MGYzODMzYWIyYjU4OTk3NzFiNGVhYjY1NGU4OGY5ODg4Yjk5NTAxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjAxOjU1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMS85XSBsaW51eC9zeXNsaW51eDogc3VwcG9ydCBleHQyLzMvNCBkZXZpY2UKKworKiBTdXBwb3J0IGV4dDIvMy80IGRlaXZjZS4KKyogVGhlIG9wZW5fZXh0Ml9mcygpIGNoZWNrcyB3aGV0aGVyIGl0IGlzIGFuIGV4dDIvMy80IGRldmljZSwKKyAgZG8gdGhlIGV4dDIvMy80IGluc3RhbGxhdGlvbiAoaW5zdGFsbF90b19leHQyKCkpIGlmIHllcywgb3RoZXJ3aXNlIGdvCisgIG9uIHRvIHRoZSBmYXQvbnRmcy4KKyogVGhlIGV4dDIvMy80IHN1cHBvcnQgZG9lc24ndCByZXF1aXJlIHJvb3QgcHJpdmlsZWdlcyBzaW5jZSBpdCBkb2Vzbid0IG5lZWQKKyAgbW91bnQgKGJ1dCB3cml0ZSBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkKS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggOTEyZGU3MS4uMzZmYzIwMiAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0yNTYsNiArMjU2LDIzIEBAIGludCBkb19vcGVuX2ZpbGUoY2hhciAqbmFtZSkKKyAgICAgcmV0dXJuIGZkOworIH0KKyAKKysvKgorKyAqIENoZWNrIHdoZXRoZXIgdGhlIGRldmljZSBjb250YWlucyBhbiBleHQyLCBleHQzIG9yIGV4dDQgZnMgYW5kIG9wZW4gaXQgaWYKKysgKiB0cnVlLgorKyAqIHJldHVybiB2YWx1ZToKKysgKiAwOiBFdmVyeXRoaW5nIGlzIE9LCisrICogMTogTm90IGFuIGV4dDIsIGV4dDMgb3IgZXh0NAorKyAqIC0xOiB1bmV4cGVjdGVkIGVycm9yCisrICovCisrc3RhdGljIGludCBvcGVuX2V4dDJfZnMoY29uc3QgY2hhciAqZGV2aWNlLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworK30KKysKKysvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCisrc3RhdGljIGludCBpbnN0YWxsX3RvX2V4dDIoY29uc3QgY2hhciAqZGV2aWNlLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisreworK30KKysKKyBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2VjdGJ1ZltTRUNUT1JfU0laRV07CitAQCAtMzEzLDYgKzMzMCwyNCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAlkaWUoImNhbid0IGNvbWJpbmUgYW4gb2Zmc2V0IHdpdGggYSBibG9jayBkZXZpY2UiKTsKKyAgICAgfQorIAorKyAgICAvKgorKyAgICAgKiBDaGVjayBpZiBpdCBpcyBhbiBleHQyLCBleHQzIG9yIGV4dDQKKysgICAgICovCisrICAgIHJ2ID0gb3Blbl9leHQyX2ZzKG9wdC5kZXZpY2UsIHN1YmRpcik7CisrICAgIGlmIChydiA9PSAwKSB7CisrICAgICAgICBpZiAoaW5zdGFsbF90b19leHQyKG9wdC5kZXZpY2UsIGRldl9mZCwgc3ViZGlyKSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGluc3RhbGxhdGlvbiBmYWlsZWRcbiIsIG9wdC5kZXZpY2UpOworKyAgICAgICAgICAgIGV4aXQoMSk7CisrICAgICAgICB9CisrICAgICAgICByZXR1cm4gMDsKKysgICAgLyogVW5leHBlY3RlZCBlcnJvcnMgKi8KKysgICAgfSBlbHNlIGlmIChydiA9PSAtMSkgeworKyAgICAgICAgZXhpdCgxKTsKKysgICAgfQorKworKyAgICAvKiBSZXNldCBydiAqLworKyAgICBydiA9IDA7CisrCisgICAgIHhwcmVhZChkZXZfZmQsIHNlY3RidWYsIFNFQ1RPUl9TSVpFLCBvcHQub2Zmc2V0KTsKKyAgICAgZnN5bmMoZGV2X2ZkKTsKKyAKK0BAIC0zMjIsNiArMzU3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgICAgICovCisgICAgIGlmICgoZXJybXNnID0gc3lzbGludXhfY2hlY2tfYm9vdHNlY3Qoc2VjdGJ1ZiwgJmZzX3R5cGUpKSkgeworIAlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgb3B0LmRldmljZSwgZXJybXNnKTsKKysJZnByaW50ZihzdGRlcnIsICIlczogc3VwcG9ydGVkIGZzOiBmYXQvbnRmcy9leHQyL2V4My9leHQ0XG4iLCBwcm9ncmFtKTsKKyAJZXhpdCgxKTsKKyAgICAgfQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtb3Blbl9leHQyX2ZzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2NmMDYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDItbGludXgtc3lzbGludXgtaW1wbGVtZW50LW9wZW5fZXh0Ml9mcy5wYXRjaApAQCAtMCwwICsxLDE0MSBAQAorRnJvbSAwN2ZiNzM3ZmI2MGMwOGVhYWE0MTk4OWQ1MzFmYzIzMDA5NTIzNTQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjA5OjE4ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IG9wZW5fZXh0Ml9mcygpCisKK1RoZSBvcGVuX2V4dDJfZnMoKSBjaGVja3Mgd2hldGhlciBpdCBpcyBhbiBleHQyL2V4dDMvZXh0NCBkZXZpY2UsIGFuZAorcmV0dXJuOgorMDogSXQgaXMgYW4gZXh0MiwgZXh0MyBvciBleHQ0LgorMTogTm90IGFuIGV4dDIsIGV4dDMgb3IgZXh0NC4KKy0xOiB1bmV4cGVjdGVkIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK1Rlc3RlZC1ieTogRHUgRG9scGhlciA8ZG9scGhlci5kdUBpbnRlbC5jb20+CistLS0KKyBsaW51eC9NYWtlZmlsZSAgIHwgIDIgKy0KKyBsaW51eC9zeXNsaW51eC5jIHwgODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDgxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpbnV4L01ha2VmaWxlIGIvbGludXgvTWFrZWZpbGUKK2luZGV4IDExNjY3ZTEuLmFjMWFjNTggMTAwNjQ0CistLS0gYS9saW51eC9NYWtlZmlsZQorKysrIGIvbGludXgvTWFrZWZpbGUKK0BAIC01MSw3ICs1MSw3IEBAIHNwb3RsZXNzOiBjbGVhbgorIGluc3RhbGxlcjogc3lzbGludXggc3lzbGludXgtbm9tdG9vbHMKKyAKKyBzeXNsaW51eDogJChPQkpTKQorLQkkKENDKSAkKExERkxBR1MpIC1vICRAICReCisrCSQoQ0MpICQoTERGTEFHUykgLW8gJEAgJF4gLWxleHQyZnMKKyAKKyBzeXNsaW51eC1ub210b29sczogc3lzbGludXgKKyAJbG4gLWYgJDwgJEAKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggMzZmYzIwMi4uY2M0ZTdkYSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC03Miw2ICs3Miw3IEBACisgI2luY2x1ZGUgInN5c2x4ZnMuaCIKKyAjaW5jbHVkZSAic2V0YWR2LmgiCisgI2luY2x1ZGUgInN5c2x4b3B0LmgiIC8qIHVuaWZpZWQgb3B0aW9ucyAqLworKyNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisgCisgZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW07CS8qIE5hbWUgb2YgcHJvZ3JhbSAqLworIAorQEAgLTgyLDYgKzgzLDkgQEAgY2hhciAqbW50cGF0aCA9IE5VTEw7CQkvKiBQYXRoIG9uIHdoaWNoIHRvIG1vdW50ICovCisgaW50IGxvb3BfZmQgPSAtMTsJCS8qIExvb3AgZGV2aWNlICovCisgI2VuZGlmCisgCisrZXh0Ml9maWxzeXMgICAgIGUyZnMgPSBOVUxMOyAgICAvKiBFeHQyLzMvNCBmaWxlc3lzdGVtICovCisrZXh0Ml9pbm9fdCAgICAgIHJvb3QsIGN3ZDsgICAgICAvKiBUaGUgcm9vdCBhbmQgY3dkIG9mIGUyZnMgKi8KKysKKyB2b2lkIF9fYXR0cmlidXRlX18gKChub3JldHVybikpIGRpZShjb25zdCBjaGFyICptc2cpCisgeworICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgcHJvZ3JhbSwgbXNnKTsKK0BAIC0yNjYsNiArMjcwLDgyIEBAIGludCBkb19vcGVuX2ZpbGUoY2hhciAqbmFtZSkKKyAgKi8KKyBzdGF0aWMgaW50IG9wZW5fZXh0Ml9mcyhjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyB7CisrICAgIGludCAgICAgICAgIHJldHZhbDsKKysgICAgaW50ICAgICAgICAgb3Blbl9mbGFnID0gRVhUMl9GTEFHX1JXLCBtb3VudF9mbGFnczsKKysgICAgZXh0Ml9pbm9fdCAgZGlyaW5vOworKyAgICBjaGFyICAgICAgICBvcHRfc3RyaW5nWzQwXTsKKysKKysgICAgaWYgKG9wdC5vZmZzZXQpIHsKKysgICAgICAgIHNwcmludGYob3B0X3N0cmluZywgIm9mZnNldD0lbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZylvcHQub2Zmc2V0KTsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19vcGVuMihkZXZpY2UsIG9wdF9zdHJpbmcsIG9wZW5fZmxhZywgMCwgMCwgdW5peF9pb19tYW5hZ2VyLCAmZTJmcyk7CisrICAgIH0gZWxzZQorKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX29wZW4oZGV2aWNlLCBvcGVuX2ZsYWcsIDAsIDAsIHVuaXhfaW9fbWFuYWdlciwgJmUyZnMpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAvKiBJdCBtaWdodCBub3QgYmUgYW4gZXh0TiBmcywgc28gd2UgbmVlZCBjaGVjayBtYWdpYyBmaXJzdGx5ICovCisrICAgICAgICBpZiAocmV0dmFsID09IEVYVDJfRVRfQkFEX01BR0lDKSB7CisrICAgICAgICAgICAgLyogRG8gbm90aGluZywgcmV0dXJuIHNpbGVudGx5ICovCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHRyeWluZyB0byBvcGVuOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLyogU3RvcCBpZiBpdCBpcyBtb3VudGVkICovCisrICAgIHJldHZhbCA9IGV4dDJmc19jaGVja19pZl9tb3VudGVkKGRldmljZSwgJm1vdW50X2ZsYWdzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXh0MmZzX2NoZWNrX2lmX21vdW50KCkgZXJyb3Igb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICBnb3RvIGZhaWw7CisrICAgIH0KKysKKysgICAgaWYgKG1vdW50X2ZsYWdzICYgRVhUMl9NRl9NT1VOVEVEKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyBpcyBtb3VudGVkXG4iLCBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIGUyZnMtPmRlZmF1bHRfYml0bWFwX3R5cGUgPSBFWFQyRlNfQk1BUDY0X1JCVFJFRTsKKysKKysgICAgLyogUmVhZCB0aGUgaW5vZGUgbWFwICovCisrICAgIHJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlX2JpdG1hcChlMmZzKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogd2hpbGUgcmVhZGluZyBpbm9kZSBiaXRtYXA6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBkZXZpY2UpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFJlYWQgdGhlIGJsb2NrIG1hcCAqLworKyAgICByZXR2YWwgPSBleHQyZnNfcmVhZF9ibG9ja19iaXRtYXAoZTJmcyk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdoaWxlIHJlYWRpbmcgYmxvY2sgYml0bWFwOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZGV2aWNlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICByb290ID0gY3dkID0gRVhUMl9ST09UX0lOTzsKKysgICAgLyogQ2hlY2sgdGhlIHN1YmRpciAqLworKyAgICBpZiAoc3RyY21wKHN1YmRpciwgIi8iKSkgeworKwlyZXR2YWwgPSBleHQyZnNfbmFtZWkoZTJmcywgcm9vdCwgY3dkLCBzdWJkaXIsICZkaXJpbm8pOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGZhaWxlZCB0byBmaW5kIGRpciAlcyBvbiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgc3ViZGlyLCBkZXZpY2UpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19jaGVja19kaXJlY3RvcnkoZTJmcywgZGlyaW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gY2QgdG86ICVzXG4iLCBwcm9ncmFtLCBzdWJkaXIpOworKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgICAgICBjd2QgPSBkaXJpbm87CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKysgICAgcmV0dXJuIC0xOworIH0KKyAKKyAvKiBUaGUgaW5zdGFsbCBmdW5jIGZvciBleHQyLCBleHQzIGFuZCBleHQ0ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDAzLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX3RvX2V4dDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YmExMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoCkBAIC0wLDAgKzEsMTE2IEBACitGcm9tIDY0ZDg1NmIyNDM4MTI5MDcwNjg3NzZiMjA0YTAwM2EzYThmYTEyMmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTY6MTc6NDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCAzLzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgaW5zdGFsbF90b19leHQyKCkKKworKiBUaGUgaGFuZGxlX2Fkdl9vbl9leHQoKSBjaGVja3Mgd2hldGhlciB3ZSBvbmx5IG5lZWQgdXBkYXRlIGFkdi4KKyogVGhlIHdyaXRlX3RvX2V4dCgpIGluc3RhbGxzIGZpbGVzIChsZGxpbnV4LnN5cyBvciBsZGxpbnV4LmMzMikgdG8gdGhlCisgIGRldmljZS4KKyogVGhlIGluc3RhbGxfYm9vdGJsb2NrKCkgaW5zdGFsbHMgdGhlIGJvb3QgYmxvY2suCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA3OSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggY2M0ZTdkYS4uNDVmMDgwZCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC0zNDYsMTEgKzM0Niw5MCBAQCBzdGF0aWMgaW50IG9wZW5fZXh0Ml9mcyhjb25zdCBjaGFyICpkZXZpY2UsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyBmYWlsOgorICAgICAodm9pZCkgZXh0MmZzX2Nsb3NlKGUyZnMpOworICAgICByZXR1cm4gLTE7CisrCisrfQorKworKy8qCisrICogSW5zdGFsbCB0aGUgYm9vdCBibG9jayBvbiB0aGUgc3BlY2lmaWVkIGRldmljZS4KKysgKiBNdXN0IGJlIHJ1biBBRlRFUiBmaWxlIGluc3RhbGxlZC4KKysgKi8KKytpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisreworK30KKysKKytzdGF0aWMgaW50IGhhbmRsZV9hZHZfb25fZXh0KHZvaWQpCisreworK30KKysKKysvKiBXcml0ZSBmaWxlcywgYWR2LCBib290IHNlY3RvciAqLworK3N0YXRpYyBpbnQgd3JpdGVfdG9fZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlfZmxhZ3MsIGludCBkZXZfZmQsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyt7CisgfQorIAorIC8qIFRoZSBpbnN0YWxsIGZ1bmMgZm9yIGV4dDIsIGV4dDMgYW5kIGV4dDQgKi8KKyBzdGF0aWMgaW50IGluc3RhbGxfdG9fZXh0Mihjb25zdCBjaGFyICpkZXZpY2UsIGludCBkZXZfZmQsIGNvbnN0IGNoYXIgKnN1YmRpcikKKyB7CisrICAgIGludCAgICAgICAgIHJldHZhbDsKKysgICAgZXh0Ml9pbm9fdCAgb2xkaW5vOworKworKyAgICBjb25zdCBjaGFyICpmaWxlID0gImxkbGludXguc3lzIjsKKysgICAgY29uc3QgY2hhciAqb2xkZmlsZSA9ICJleHRsaW51eC5zeXMiOworKyAgICBjb25zdCBjaGFyICpjMzJmaWxlID0gImxkbGludXguYzMyIjsKKysKKysgICAgLyogSGFuZGxlIHRoZSBhZHYgKi8KKysgICAgaWYgKGhhbmRsZV9hZHZfb25fZXh0KCkgPCAwKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSBoYW5kbGluZyBBRFYgb24gJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGRldmljZSk7CisrICAgICAgICByZXR2YWwgPSAxOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFJldHVybiBpZiBvbmx5IG5lZWQgdXBkYXRlIHRoZSBhZHYgKi8KKysgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSkgeworKyAgICAgICAgcmV0dXJuIGV4dDJmc19jbG9zZShlMmZzKTsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBsZGxpbnV4LnN5cywgYWR2LCBib290IHNlY3RvciAqLworKyAgICByZXR2YWwgPSB3cml0ZV90b19leHQoZmlsZSwgKGNvbnN0IGNoYXIgX2ZvcmNlICopYm9vdF9pbWFnZSwKKysgICAgICAgICAgICAgICAgYm9vdF9pbWFnZV9sZW4sIEVYVDJfSU1NVVRBQkxFX0ZMLCBkZXZfZmQsIHN1YmRpcik7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiB3aGlsZSB3cml0aW5nOiAlcy5cbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGUpOworKyAgICAgICAgZ290byBmYWlsOworKyAgICB9CisrCisrICAgIC8qIFdyaXRlIGxkbGludXguYzMyICovCisrICAgIHJldHZhbCA9IHdyaXRlX3RvX2V4dChjMzJmaWxlLAorKyAgICAgICAgICAgICAgICAoY29uc3QgY2hhciBfZm9yY2UgKilzeXNsaW51eF9sZGxpbnV4YzMyLAorKyAgICAgICAgICAgICAgICBzeXNsaW51eF9sZGxpbnV4YzMyX2xlbiwgMCwgZGV2X2ZkLCBzdWJkaXIpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdGluZzogJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBjMzJmaWxlKTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBMb29rIGlmIHdlIGhhdmUgdGhlIGV4dGxpbnV4LnN5cyBhbmQgcmVtb3ZlIGl0Ki8KKysgICAgcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgb2xkZmlsZSwgJm9sZGlubyk7CisrICAgIGlmIChyZXR2YWwgPT0gMCkgeworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX3VubGluayhlMmZzLCBjd2QsIG9sZGZpbGUsIG9sZGlubywgMCk7CisrICAgICAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byB1bmxpbms6ICVzXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBvbGRmaWxlKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgICByZXR2YWwgPSAwOworKyAgICB9CisrCisrICAgIHN5bmMoKTsKKysgICAgcmV0dmFsID0gaW5zdGFsbF9ib290YmxvY2soZGV2X2ZkLCBkZXZpY2UpOworKyAgICBjbG9zZShkZXZfZmQpOworKyAgICBzeW5jKCk7CisrCisrZmFpbDoKKysgICAgKHZvaWQpIGV4dDJmc19jbG9zZShlMmZzKTsKKysgICAgcmV0dXJuIHJldHZhbDsKKyB9CisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YjU2ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNC1saW51eC1zeXNsaW51eC1hZGQtZXh0X2ZpbGVfcmVhZC1hbmQtZXh0X2ZpbGVfd3JpdGUucGF0Y2gKQEAgLTAsMCArMSw5MSBAQAorRnJvbSAzNWQzODQyY2M0YjkzMGM1MTAyZWVkMjkyMWUwMTg5YjdmNGZkMDY5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjQzOjM3ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNC85XSBsaW51eC9zeXNsaW51eDogYWRkIGV4dF9maWxlX3JlYWQoKSBhbmQgZXh0X2ZpbGVfd3JpdGUoKQorCitXaWxsIHVzZSB0aGVtIHRvIHJlYWQgYW5kIHdyaXRlIG9uIHRoZSBleHRYIGRldmljZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgbGludXgvc3lzbGludXguYyB8IDYyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCA0NWYwODBkLi4yNDdjODZhIDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTM0OSw2ICszNDksNjggQEAgZmFpbDoKKyAKKyB9CisgCisrLyogUmVhZCBmcm9tIGFuIGV4dDJfZmlsZSAqLworK3N0YXRpYyBpbnQgZXh0X2ZpbGVfcmVhZChleHQyX2ZpbGVfdCBlMl9maWxlLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKysgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmZzZXQsIGNvbnN0IGNoYXIgKm1zZykKKyt7CisrICAgIGludCAgICAgICAgICAgICAgICAgcmV0dmFsOworKyAgICBjaGFyICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKSBidWY7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgZ290ID0gMDsKKysgICAgc2l6ZV90ICAgICAgICAgICAgICBkb25lID0gMDsKKysKKysgICAgLyogQWx3YXlzIGxzZWVrIHNpbmNlIGUyX2ZpbGUgaXMgdW5jb250cm9sbGVkIGJ5IHRoaXMgZnVuYyAqLworKyAgICBpZiAoZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgb2Zmc2V0LCBFWFQyX1NFRUtfU0VULCBOVUxMKSkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXh0MmZzX2ZpbGVfbHNlZWsoKSBmYWlsZWQuXG4iLAorKyAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHdoaWxlICgxKSB7CisrICAgICAgICByZXR2YWwgPSBleHQyZnNfZmlsZV9yZWFkKGUyX2ZpbGUsIHB0ciwgY291bnQsICZnb3QpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIHJlYWRpbmcgJXNcbiIsCisrICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBtc2cpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgICAgIGNvdW50IC09IGdvdDsKKysgICAgICAgIHB0ciArPSBnb3Q7CisrICAgICAgICBkb25lICs9IGdvdDsKKysgICAgICAgIGlmIChnb3QgPT0gMCB8fCBjb3VudCA9PSAwKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIHJldHVybiBkb25lOworK30KKysKKysvKiBXcml0ZSB0byBhbiBleHQyX2ZpbGUgKi8KKytzdGF0aWMgaW50IGV4dF9maWxlX3dyaXRlKGV4dDJfZmlsZV90IGUyX2ZpbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LAorKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCkKKyt7CisrICAgIGNvbnN0IGNoYXIgICAgICAgICAgKnB0ciA9IChjb25zdCBjaGFyICopIGJ1ZjsKKysgICAgdW5zaWduZWQgaW50ICAgICAgICB3cml0dGVuID0gMDsKKysgICAgc2l6ZV90ICAgICAgICAgICAgICBkb25lID0gMDsKKysKKysgICAgLyogQWx3YXlzIGxzZWVrIHNpbmNlIGUyX2ZpbGUgaXMgdW5jb250cm9sbGVkIGJ5IHRoaXMgZnVuYyAqLworKyAgICBpZiAoZXh0MmZzX2ZpbGVfbHNlZWsoZTJfZmlsZSwgb2Zmc2V0LCBFWFQyX1NFRUtfU0VULCBOVUxMKSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGV4dDJmc19maWxlX2xzZWVrKCkgZmFpbGVkLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHdoaWxlIChjb3VudCA+IDApIHsKKysgICAgICAgIGlmIChleHQyZnNfZmlsZV93cml0ZShlMl9maWxlLCBwdHIsIGNvdW50LCAmd3JpdHRlbikpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gd3JpdGUgc3lzbGludXggYWR2LlxuIiwKKysgICAgICAgICAgICAgICAgICAgIHByb2dyYW0pOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgICAgIGNvdW50IC09IHdyaXR0ZW47CisrICAgICAgICBwdHIgKz0gd3JpdHRlbjsKKysgICAgICAgIGRvbmUgKz0gd3JpdHRlbjsKKysgICAgfQorKworKyAgICByZXR1cm4gZG9uZTsKKyt9CisrCisgLyoKKyAgKiBJbnN0YWxsIHRoZSBib290IGJsb2NrIG9uIHRoZSBzcGVjaWZpZWQgZGV2aWNlLgorICAqIE11c3QgYmUgcnVuIEFGVEVSIGZpbGUgaW5zdGFsbGVkLgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNS1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaGFuZGxlX2Fkdl9vbl9leHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5ZTdjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA1LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1oYW5kbGVfYWR2X29uX2V4dC5wYXRjaApAQCAtMCwwICsxLDEyNyBAQAorRnJvbSBjZGI5ODBiMzdmNDBkYzJjNDE4OTE0MzRjNzczNmU0OWRhNTM3NTZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDMxIERlYyAyMDE0IDE2OjQ3OjUyICswODAwCitTdWJqZWN0OiBbUEFUQ0ggNS85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGhhbmRsZV9hZHZfb25fZXh0KCkKKworSXQgcmVhZHMgYWR2IGlmIGZvdW5kIG9uIHRoZSBkZXZpY2UsIG9yIHJlc2V0cyBzeXNsaW51eF9hZHYsIG9yIHVwZGF0ZQordGhlIGFkdiBpZiB1cGRhdGUgYWR2IG9ubHkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA5NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggMjQ3Yzg2YS4uZGU1ZDI3MiAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00MjEsNiArNDIxLDEwMyBAQCBpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisgCisgc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorIHsKKysgICAgaW50ICAgICAgICAgICAgICAgICBpLCByZXR2YWwsIGZvdW5kX2ZpbGU7CisrICAgIGludCAgICAgICAgICAgICAgICAgbmVlZF9jbG9zZSA9IDI7IC8qIDIgbWVhbnMgbm8gbmVlZCBleHRyYSBjbG9zZSAqLworKyAgICBjaGFyICAgICAgICAgICAgICAgICpmaWxlbmFtZXNbMl0gPSB7ImxkbGludXguc3lzIiwgImV4dGxpbnV4LnN5cyJ9OworKyAgICBjaGFyICAgICAgICAgICAgICAgICpmaWxlbmFtZTsKKysgICAgZXh0Ml9pbm9fdCAgICAgICAgICBuZXdpbm87CisrICAgIGV4dDJfZmlsZV90ICAgICAgICAgZTJfZmlsZTsKKysgICAgc3RydWN0IGV4dDJfaW5vZGUgICBpbm9kZTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZXNbaV07CisrICAgICAgICBmb3VuZF9maWxlID0gMDsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19uYW1laShlMmZzLCByb290LCBjd2QsIGZpbGVuYW1lLCAmbmV3aW5vKTsKKysgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworKyAgICAgICAgICAgIGZvdW5kX2ZpbGUgPSAxOworKyAgICAgICAgfSBlbHNlCisrICAgICAgICAgICAgY29udGludWU7CisrCisrICAgICAgICBuZWVkX2Nsb3NlID0gaTsKKysKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19maWxlX29wZW4oZTJmcywgbmV3aW5vLCBFWFQyX0ZMQUdfUlcsICZlMl9maWxlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19yZWFkX2lub2RlKGUyZnMsIG5ld2lubywgJmlub2RlKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3aGlsZSByZWFkaW5nIGlub2RlOiAldSwgZmlsZTogJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIG5ld2lubywgZmlsZW5hbWUpOworKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIENoZWNrIHRoZSBzaXplIHRvIHNlZSBpZiB0b28gc21hbGwgdG8gcmVhZCAqLworKyAgICAgICAgaWYgKGlub2RlLmlfc2l6ZSA8IDIgKiBBRFZfU0laRSkgeworKyAgICAgICAgICAgIGlmIChvcHQudXBkYXRlX29ubHkgPT0gLTEpIHsKKysgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmFpbGVkIHRvIHdyaXRlIGF1eGlsbGlhcnkgZGF0YVxuXAorKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzaXplIG9mICVzIGlzIHRvbyBzbWFsbCAobmVlZCAtLXVwZGF0ZSk/XG4iLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICAgICAgcmV0dmFsID0gLTE7CisrICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgICAgICAgICB9CisrICAgICAgICAgICAgc3lzbGludXhfcmVzZXRfYWR2KHN5c2xpbnV4X2Fkdik7CisrICAgICAgICAgICAgZm91bmRfZmlsZSA9IDA7CisrICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrCisrICAgICAgICAvKiBSZWFkIHRoZSBhZHYgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dF9maWxlX3JlYWQoZTJfZmlsZSwgc3lzbGludXhfYWR2LCAyICogQURWX1NJWkUsCisrICAgICAgICAgICAgICAgICAgICAgICAgaW5vZGUuaV9zaXplIC0gMiAqIEFEVl9TSVpFLCAiQURWIik7CisrICAgICAgICBpZiAocmV0dmFsID09IC0xKQorKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICBpZiAocmV0dmFsID09IDIgKiBBRFZfU0laRSkgeworKyAgICAgICAgICAgIHJldHZhbCA9IHN5c2xpbnV4X3ZhbGlkYXRlX2FkdihzeXNsaW51eF9hZHYpOworKyAgICAgICAgICAgIC8qIFJlYWQgdGhlIGFkdiBzdWNjZXNzZnVsbHkgKi8KKysgICAgICAgICAgICBpZiAocmV0dmFsID09IDApCisrICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgLyogQ2xvc2UgdGhlIGZpbGUgaWYgcmVhY2hlcyBoZXJlLCBvdGhlcndpc2Ugd2UgbGVhdmUgdGhlIGZpbGUKKysgICAgICAgICAqIG9wZW4gaW4gY2FzZSB3ZSBuZWVkIHdyaXRlIGl0ICovCisrICAgICAgICBuZWVkX2Nsb3NlID0gMjsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc19maWxlX2Nsb3NlKGUyX2ZpbGUpOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGVycm9yIHdoaWxlIGNsb3NpbmcgJXNcbiIsCisrICAgICAgICAgICAgICAgIHByb2dyYW0sIGZpbGVuYW1lKTsKKysgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworKyAgICAgICAgfQorKyAgICB9CisrCisrICAgIGlmICghZm91bmRfZmlsZSkgeworKyAgICAgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG5vIGxkbGludXguc3lzIG9yIGV4dGxpbnV4LnN5cyBmb3VuZCBvbiB0aGUgZGV2aWNlXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrICAgICAgICBzeXNsaW51eF9yZXNldF9hZHYoc3lzbGludXhfYWR2KTsKKysgICAgfQorKworKyAgICAvKiBUaGUgbW9kaWZ5X2FkdiB3aWxsIHJlc2V0IHRoZSBhZHYgaWYgb3B0LnJlc2V0X2FkdiAqLworKyAgICBpZiAobW9kaWZ5X2FkdigpIDwgMCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZXJyb3Igd2hpbGUgbW9kaWZ5aW5nIGFkdlxuIiwgcHJvZ3JhbSk7CisrICAgICAgICByZXR2YWwgPSAtMTsKKysgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSBhZHYgaWYgdXBkYXRlX29ubHkgPT0gLTEgYW5kIGZvdW5kIGZpbGUgKi8KKysgICAgaWYgKG9wdC51cGRhdGVfb25seSA9PSAtMSAmJiBmb3VuZF9maWxlKSB7CisrICAgICAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3lzbGludXhfYWR2LCAyICogQURWX1NJWkUgLAorKyAgICAgICAgICAgICAgICAgICAgICAgIGlub2RlLmlfc2l6ZSAtIDIgKiBBRFZfU0laRSkgPT0gLTEpCisrICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKysgICAgfQorKworK2ZhaWw6CisrICAgIGlmIChuZWVkX2Nsb3NlICE9IDIpCisrICAgICAgICAodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIC8qIFdyaXRlIGZpbGVzLCBhZHYsIGJvb3Qgc2VjdG9yICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA2LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC13cml0ZV90b19leHQtYW5kLWFkZC1zeXNsaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTg3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvMDAwNi1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtd3JpdGVfdG9fZXh0LWFuZC1hZGQtc3lzbGluLnBhdGNoCkBAIC0wLDAgKzEsMjE1IEBACitGcm9tIDkyMmU1NmMxMGUzNmQ4NzY3Nzc1ODBjODRkYWVmOWE2NmJlYTY1MjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMzEgRGVjIDIwMTQgMTc6MjA6NDMgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA2LzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgd3JpdGVfdG9fZXh0KCkgYW5kIGFkZAorIHN5c2xpbnV4ZXh0LmMKKworKiBUaGUgd3JpdGVfdG9fZXh0KCkgd3JpdGUgZmlsZSB0byB0aGUgZXh0WCBkZXZpY2UsIGFuZCBoYW5kbGUgdGhlIGJvb3QKKyAgc2VjdG9yLgorKiBUaGUgc3lzbGludXhleHQuYyBpcyB1c2VkIGZvciBwbGFjaW5nIHRoZSBjb2RlIHdoaWNoIGFyZSB1c2VkIGJ5CisgIGV4dGxpbnV4IGFuZCBzeXNsaW51eCAod2hpY2ggaXMgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoKSkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIHwgICA3ICsrKworIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oIHwgICA1ICsrCisgbGludXgvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDMgKy0KKyBsaW51eC9zeXNsaW51eC5jICAgICAgICAgICB8IDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDEzMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oCisKK2RpZmYgLS1naXQgYS9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYyBiL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYmI1NGNlZgorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKK0BAIC0wLDAgKzEsNyBAQAorKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysvKiBQYXRjaCBzeXNsaW51eF9ib290c2VjdCAqLworK3ZvaWQgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoaW50IGRldl9mZCkKKyt7CisrfQorKworZGlmZiAtLWdpdCBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5oIGIvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi44YWJkOGI5CistLS0gL2Rldi9udWxsCisrKysgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuaAorQEAgLTAsMCArMSw1IEBACisrI2lmbmRlZiBFWFQyX1NVUEVSX09GRlNFVAorKyNkZWZpbmUgRVhUMl9TVVBFUl9PRkZTRVQgMTAyNAorKyNlbmRpZgorKworK3ZvaWQgc3lzbGludXhfcGF0Y2hfYm9vdHNlY3QoaW50IGRldl9mZCk7CitkaWZmIC0tZ2l0IGEvbGludXgvTWFrZWZpbGUgYi9saW51eC9NYWtlZmlsZQoraW5kZXggYWMxYWM1OC4uM2IyMzg2NyAxMDA2NDQKKy0tLSBhL2xpbnV4L01ha2VmaWxlCisrKysgYi9saW51eC9NYWtlZmlsZQorQEAgLTMwLDcgKzMwLDggQEAgU1JDUyAgICAgPSBzeXNsaW51eC5jIFwKKyAgICAgICAgICAgIC4uL2xpYmluc3RhbGxlci9zeXNseG1vZC5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2Jvb3RzZWN0X2Jpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2xkbGludXhjMzJfYmluLmMgXAorLQkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYworKwkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eF9iaW4uYyBcCisrCSAgIC4uL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisgT0JKUwkgPSAkKHBhdHN1YnN0ICUuYywlLm8sJChub3RkaXIgJChTUkNTKSkpCisgCisgLlNVRkZJWEVTOiAuYyAubyAuaSAucyAuUworZGlmZiAtLWdpdCBhL2xpbnV4L3N5c2xpbnV4LmMgYi9saW51eC9zeXNsaW51eC5jCitpbmRleCBkZTVkMjcyLi5mMGM5N2E4IDEwMDc1NQorLS0tIGEvbGludXgvc3lzbGludXguYworKysrIGIvbGludXgvc3lzbGludXguYworQEAgLTQ2LDYgKzQ2LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisgI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorKyNpbmNsdWRlIDx0aW1lLmg+CisgCisgI2luY2x1ZGUgImxpbnV4aW9jdGwuaCIKKyAKK0BAIC03Miw2ICs3Myw3IEBACisgI2luY2x1ZGUgInN5c2x4ZnMuaCIKKyAjaW5jbHVkZSAic2V0YWR2LmgiCisgI2luY2x1ZGUgInN5c2x4b3B0LmgiIC8qIHVuaWZpZWQgb3B0aW9ucyAqLworKyNpbmNsdWRlICJzeXNsaW51eGV4dC5oIgorICNpbmNsdWRlIDxleHQyZnMvZXh0MmZzLmg+CisgCisgZXh0ZXJuIGNvbnN0IGNoYXIgKnByb2dyYW07CS8qIE5hbWUgb2YgcHJvZ3JhbSAqLworQEAgLTQxOSw2ICs0MjEsMTIgQEAgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKyB9CisgCisrLyogQ29uc3RydWN0IHRoZSBib290IGZpbGUgbWFwICovCisraW50IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcyhleHQyX2ZpbHN5cyBmcywgZXh0Ml9pbm9fdCBuZXdpbm8sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3JfdCAqc2VjdG9ycywgaW50IG5zZWN0KQorK3sKKyt9CisrCisgc3RhdGljIGludCBoYW5kbGVfYWR2X29uX2V4dCh2b2lkKQorIHsKKyAgICAgaW50ICAgICAgICAgICAgICAgICBpLCByZXR2YWwsIGZvdW5kX2ZpbGU7CitAQCAtNTI0LDYgKzUzMiwxMTYgQEAgZmFpbDoKKyBzdGF0aWMgaW50IHdyaXRlX3RvX2V4dChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpX2ZsYWdzLCBpbnQgZGV2X2ZkLCBjb25zdCBjaGFyICpzdWJkaXIpCisgeworKyAgICBleHQyX2lub190ICAgICAgICAgIG5ld2lubzsKKysgICAgc3RydWN0IGV4dDJfaW5vZGUgICBpbm9kZTsKKysgICAgaW50ICAgICAgICAgICAgICAgICByZXR2YWwsIGksIG1vZGJ5dGVzLCBuc2VjdDsKKysgICAgZXh0Ml9maWxlX3QgICAgICAgICBlMl9maWxlOworKyAgICBzZWN0b3JfdCAgICAgICAgICAgICpzZWN0b3JzOworKworKyAgICAvKiBSZW1vdmUgaXQgaWYgaXQgaXMgYWxyZWFkeSBleGlzdHMgKi8KKysgICAgcmV0dmFsID0gZXh0MmZzX25hbWVpKGUyZnMsIHJvb3QsIGN3ZCwgZmlsZW5hbWUsICZuZXdpbm8pOworKyAgICBpZiAocmV0dmFsID09IDApIHsKKysgICAgICAgIHJldHZhbCA9IGV4dDJmc191bmxpbmsoZTJmcywgY3dkLCBmaWxlbmFtZSwgbmV3aW5vLCAwKTsKKysgICAgICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmYWlsZWQgdG8gdW5saW5rOiAlc1xuIiwgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLyogQ3JlYXRlIG5ldyBpbm9kZSAqLworKyAgICByZXR2YWwgPSBleHQyZnNfbmV3X2lub2RlKGUyZnMsIGN3ZCwgMDEwNzU1LCAwLCAmbmV3aW5vKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGZhaWxlZCB0byBjcmVhdGUgaW5vZGUgZm9yOiAlc1xuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKworKyAgICAvKiBMaW5rIHRoZSBpbm9kZSBhbmQgdGhlIGZpbGVuYW1lICovCisrICAgIHJldHZhbCA9IGV4dDJmc19saW5rKGUyZnMsIGN3ZCwgZmlsZW5hbWUsIG5ld2lubywgRVhUMl9GVF9SRUdfRklMRSk7CisrICAgIGlmIChyZXR2YWwpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBmYWlsZWQgdG8gbGluayBpbm9kZSBmb3I6ICVzLlxuIiwKKysgICAgICAgICAgICAgICAgcHJvZ3JhbSwgZmlsZW5hbWUpOworKyAgICAgICAgcmV0dXJuIHJldHZhbDsKKysgICAgfQorKworKyAgICBpZiAoZXh0MmZzX3Rlc3RfaW5vZGVfYml0bWFwMihlMmZzLT5pbm9kZV9tYXAsIG5ld2lubykpCisrICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHdhcm5pbmc6IGlub2RlIGFscmVhZHkgc2V0ICVzLlxuIiwKKysgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrCisrICAgICAgICBleHQyZnNfaW5vZGVfYWxsb2Nfc3RhdHMyKGUyZnMsIG5ld2lubywgKzEsIDApOworKyAgICAgICAgbWVtc2V0KCZpbm9kZSwgMCwgc2l6ZW9mKGlub2RlKSk7CisrCWlub2RlLmlfbW9kZSA9IExJTlVYX1NfSUZSRUcgfCBMSU5VWF9TX0lSVVNSIHwgTElOVVhfU19JUkdSUAorKyAgICAgICAgICAgICAgICAgICAgICAgIHwgTElOVVhfU19JUk9USDsKKysJaW5vZGUuaV9mbGFncyB8PSBpX2ZsYWdzOworKyAgICAgICAgaW5vZGUuaV9hdGltZSA9IGlub2RlLmlfY3RpbWUgPSBpbm9kZS5pX210aW1lID0KKysgICAgICAgICAgICBlMmZzLT5ub3cgPyBlMmZzLT5ub3cgOiB0aW1lKDApOworKyAgICAgICAgaW5vZGUuaV9saW5rc19jb3VudCA9IDE7CisrICAgICAgICBpZiAoZTJmcy0+c3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmCisrICAgICAgICAgICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0VYVEVOVFMpIHsKKysgICAgICAgICAgICBzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICplaDsKKysKKysgICAgICAgICAgICBlaCA9IChzdHJ1Y3QgZXh0M19leHRlbnRfaGVhZGVyICopICZpbm9kZS5pX2Jsb2NrWzBdOworKyAgICAgICAgICAgIGVoLT5laF9kZXB0aCA9IDA7CisrICAgICAgICAgICAgZWgtPmVoX2VudHJpZXMgPSAwOworKyAgICAgICAgICAgIGVoLT5laF9tYWdpYyA9IGV4dDJmc19jcHVfdG9fbGUxNihFWFQzX0VYVF9NQUdJQyk7CisrICAgICAgICAgICAgaSA9IChzaXplb2YoaW5vZGUuaV9ibG9jaykgLSBzaXplb2YoKmVoKSkgLworKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGV4dDNfZXh0ZW50KTsKKysgICAgICAgICAgICBlaC0+ZWhfbWF4ID0gZXh0MmZzX2NwdV90b19sZTE2KGkpOworKyAgICAgICAgICAgIGlub2RlLmlfZmxhZ3MgfD0gRVhUNF9FWFRFTlRTX0ZMOworKyAgICB9CisrCisrICAgIHJldHZhbCA9IGV4dDJmc193cml0ZV9uZXdfaW5vZGUoZTJmcywgbmV3aW5vLCAmaW5vZGUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogd2hpbGUgd3JpdHRpbmcgaW5vZGUgJWQuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBuZXdpbm8pOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysgICAgcmV0dmFsID0gZXh0MmZzX2ZpbGVfb3BlbihlMmZzLCBuZXdpbm8sIEVYVDJfRklMRV9XUklURSwgJmUyX2ZpbGUpOworKyAgICBpZiAocmV0dmFsKSB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIG9wZW4gJXMuXG4iLAorKyAgICAgICAgICAgICAgICBwcm9ncmFtLCBmaWxlbmFtZSk7CisrICAgICAgICByZXR1cm4gMTsKKysgICAgfQorKworKyAgICAvKiBXcml0ZSB0byBmaWxlICovCisrICAgIGlmIChleHRfZmlsZV93cml0ZShlMl9maWxlLCBzdHIsIGxlbmd0aCwgMCkgPT0gLTEpCisrICAgICAgICBnb3RvIGZhaWw7CisrCisrICAgIGlmIChzdHJjbXAoZmlsZW5hbWUsICJsZGxpbnV4LnN5cyIpID09IDApIHsKKysgICAgICAgIC8qIFdyaXRlIEFEViAqLworKyAgICAgICAgaWYgKGV4dF9maWxlX3dyaXRlKGUyX2ZpbGUsIHN5c2xpbnV4X2FkdiwgMiAqIEFEVl9TSVpFLAorKyAgICAgICAgICAgICAgICBib290X2ltYWdlX2xlbikgPT0gLTEpCisrICAgICAgICAgICAgZ290byBmYWlsOworKworKyAgICAgICAgLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKysgICAgICAgIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGRldl9mZCk7CisrCisrICAgICAgICAvKiBQYXRjaCBsZGxpbnV4LnN5cyAqLworKyAgICAgICAgbnNlY3QgPSAoYm9vdF9pbWFnZV9sZW4gKyBTRUNUT1JfU0laRSAtIDEpID4+IFNFQ1RPUl9TSElGVDsKKysgICAgICAgIG5zZWN0ICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogVHdvIHNlY3RvcnMgZm9yIHRoZSBBRFYgKi8KKysgICAgICAgIHNlY3RvcnMgPSBhbGxvY2Eoc2l6ZW9mKHNlY3Rvcl90KSAqIG5zZWN0KTsKKysgICAgICAgIG1lbXNldChzZWN0b3JzLCAwLCBuc2VjdCAqIHNpemVvZiAqc2VjdG9ycyk7CisrICAgICAgICAvKiBUaGUgc2VjdG9ycyB3aWxsIGJlIG1vZGlmaWVkIGFuZCB1c2VkIGJ5IHN5c2xpbnV4X3BhdGNoKCkgKi8KKysgICAgICAgIHJldHZhbCA9IGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcyhlMmZzLCBuZXdpbm8sIHNlY3RvcnMsIG5zZWN0KTsKKysgICAgICAgIGlmIChyZXR2YWwpCisrICAgICAgICAgICAgZ290byBmYWlsOworKworKyAgICAgICAgLyogQ3JlYXRlIHRoZSBtb2RpZmllZCBpbWFnZSBpbiBtZW1vcnkgKi8KKysgICAgICAgIG1vZGJ5dGVzID0gc3lzbGludXhfcGF0Y2goc2VjdG9ycywgbnNlY3QsIG9wdC5zdHVwaWRfbW9kZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0LnJhaWRfbW9kZSwgc3ViZGlyLCBOVUxMKTsKKysKKysgICAgICAgIC8qIFJld3JpdGUgdGhlIGZpcnN0IG1vZGJ5dGVzIG9mIGxkbGludXguc3lzICovCisrICAgICAgICBpZiAoZXh0X2ZpbGVfd3JpdGUoZTJfZmlsZSwgc3RyLCBtb2RieXRlcywgMCkgPT0gLTEpIHsKKysgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBFUlJPUjogZmFpbGVkIHRvIHBhdGNoICVzLlxuIiwgcHJvZ3JhbSwKKysgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKKysgICAgICAgICAgICBnb3RvIGZhaWw7CisrICAgICAgICB9CisrICAgIH0KKysKKytmYWlsOgorKyAgICAodm9pZCkgZXh0MmZzX2ZpbGVfY2xvc2UoZTJfZmlsZSk7CisrICAgIHJldHVybiByZXR2YWw7CisgfQorIAorIC8qIFRoZSBpbnN0YWxsIGZ1bmMgZm9yIGV4dDIsIGV4dDMgYW5kIGV4dDQgKi8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDctbGludXgtc3lzbGludXgtaW1wbGVtZW50LWV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxMzgxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2gKQEAgLTAsMCArMSw4NCBAQAorRnJvbSBhOTViODMxZTE4ZGQxMjNmODU5YmM1ZTZjNGNlY2RjYzAxODRlZTM3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBGcmksIDIgSmFuIDIwMTUgMTI6MTg6MDIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA3LzldIGxpbnV4L3N5c2xpbnV4OiBpbXBsZW1lbnQgZXh0X2NvbnN0cnVjdF9zZWN0bWFwX2ZzKCkKKworVGhlIGV4dF9jb25zdHJ1Y3Rfc2VjdG1hcF9mcygpIGNvbnN0dWN0cyB0aGUgc2VjdG9yIGFjY29yZGluZyB0byB0aGUKK2JtYXAuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggZjBjOTdhOC4uYzc0MTc1MCAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00MjEsMTAgKzQyMSw2MCBAQCBpbnQgaW5zdGFsbF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkZXZpY2UpCisgeworIH0KKyAKKysvKiBUaGUgZmlsZSdzIGJsb2NrIGNvdW50ICovCisraW50IGJsb2NrX2NvdW50ID0gMDsKKytzdGF0aWMgaW50IGdldF9ibG9ja19jb3VudChleHQyX2ZpbHN5cyBmcyBFWFQyRlNfQVRUUigodW51c2VkKSksCisrCQkJICAgICBibGs2NF90ICpibG9ja25yIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGUyX2Jsa2NudF90IGJsb2NrY250IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGJsazY0X3QgcmVmX2Jsb2NrIEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIGludCByZWZfb2Zmc2V0IEVYVDJGU19BVFRSKCh1bnVzZWQpKSwKKysJCQkgICAgIHZvaWQgKnByaXZhdGUgRVhUMkZTX0FUVFIoKHVudXNlZCkpKQorK3sKKysgICAgYmxvY2tfY291bnQrKzsKKysgICAgcmV0dXJuIDA7CisrfQorKworIC8qIENvbnN0cnVjdCB0aGUgYm9vdCBmaWxlIG1hcCAqLworIGludCBleHRfY29uc3RydWN0X3NlY3RtYXBfZnMoZXh0Ml9maWxzeXMgZnMsIGV4dDJfaW5vX3QgbmV3aW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdG9yX3QgKnNlY3RvcnMsIGludCBuc2VjdCkKKyB7CisrICAgIGJsazY0X3QgICAgICAgICAgICAgcGJsaywgYmxrc2l6ZSwgYmxrID0gMDsKKysgICAgc2VjdG9yX3QgICAgICAgICAgICBzZWM7CisrICAgIHVuc2lnbmVkIGludCAgICAgICAgaTsKKysgICAgaW50ICAgICAgICAgICAgICAgICByZXR2YWw7CisrCisrICAgIGJsa3NpemUgPSBmcy0+YmxvY2tzaXplOworKyAgICBibGtzaXplID4+PSBTRUNUT1JfU0hJRlQ7CisrCisrICAgIC8qIEdldCB0aGUgdG90YWwgYmxvY2tzIG5vLiAqLworKyAgICByZXR2YWwgPSBleHQyZnNfYmxvY2tfaXRlcmF0ZTMoZnMsIG5ld2lubywgQkxPQ0tfRkxBR19SRUFEX09OTFksCisrICAgICAgICAgICAgTlVMTCwgZ2V0X2Jsb2NrX2NvdW50LCBOVUxMKTsKKysgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogRVJST1I6IGV4dDJmc19ibG9ja19pdGVyYXRlMygpIGZhaWxlZC5cbiIsIHByb2dyYW0pOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIHdoaWxlIChuc2VjdCkgeworKyAgICAgICAgaWYgKGJsb2NrX2NvdW50LS0gPT0gMCkKKysgICAgICAgICAgICBicmVhazsKKysKKysgICAgICAgIC8qIEdldCB0aGUgcGh5c2ljYWwgYmxvY2sgbm8uIChibWFwKSAqLworKyAgICAgICAgcmV0dmFsID0gZXh0MmZzX2JtYXAyKGZzLCBuZXdpbm8sIDAsIDAsIDAsIGJsaywgMCwgJnBibGspOworKyAgICAgICAgaWYgKHJldHZhbCkgeworKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEVSUk9SOiBleHQyZnNfYm1hcDIoKSBmYWlsZWQuXG4iLCBwcm9ncmFtKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrCisrICAgICAgICBibGsrKzsKKysgICAgICAgIHNlYyA9IChzZWN0b3JfdClwYmxrICogYmxrc2l6ZTsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBibGtzaXplOyBpKyspIHsKKysgICAgICAgICAgICAqc2VjdG9ycysrID0gc2VjKys7CisrICAgICAgICAgICAgaWYgKCEgLS1uc2VjdCkKKysgICAgICAgICAgICAgICAgYnJlYWs7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisgfQorIAorIHN0YXRpYyBpbnQgaGFuZGxlX2Fkdl9vbl9leHQodm9pZCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDgtbGliaW5zdGFsbGVyLXN5c2xpbnV4ZXh0LWltcGxlbWVudC1zeXNsaW51eF9wYXRjaF9iby5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMGM5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA4LWxpYmluc3RhbGxlci1zeXNsaW51eGV4dC1pbXBsZW1lbnQtc3lzbGludXhfcGF0Y2hfYm8ucGF0Y2gKQEAgLTAsMCArMSw0MjcgQEAKK0Zyb20gNzhkNzZiODdhNGI4NTVlNmI2NjFhZTQ1NzI4M2E2M2YzODVjMDRjOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjI2OjQ2ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggOC85XSBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQ6IGltcGxlbWVudAorIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KCkKKworTW92ZSB0aGUgcmVsYXRlZCBmcm9tIGV4dGxpbnV4L21haW4uYyB0byBsaWJpbnN0YWxsZXIvc3lzbGludXhleHQuYywgdGhlCitzeXNsaW51eF9wYXRjaF9ib290c2VjdCgpIGFyZSB1c2VkIGJ5IGJvdGggZXh0bGludXgvbWFpbi5jIGFuZAorbGludXgvc3lzbGludXguYy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitUZXN0ZWQtYnk6IER1IERvbHBoZXIgPGRvbHBoZXIuZHVAaW50ZWwuY29tPgorLS0tCisgZXh0bGludXgvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKy0KKyBleHRsaW51eC9tYWluLmMgICAgICAgICAgICB8IDE2NyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGxpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jIHwgMTcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyksIDE2NSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2V4dGxpbnV4L01ha2VmaWxlIGIvZXh0bGludXgvTWFrZWZpbGUKK2luZGV4IDAyZDFkYjUuLjkwZGQ5MmYgMTAwNjQ0CistLS0gYS9leHRsaW51eC9NYWtlZmlsZQorKysrIGIvZXh0bGludXgvTWFrZWZpbGUKK0BAIC0zMSw3ICszMSw4IEBAIFNSQ1MgICAgID0gbWFpbi5jIFwKKyAJICAgLi4vbGliaW5zdGFsbGVyL2FkdmlvLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvYm9vdHNlY3RfYmluLmMgXAorIAkgICAuLi9saWJpbnN0YWxsZXIvbGRsaW51eGMzMl9iaW4uYyBcCistCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4X2Jpbi5jCisrCSAgIC4uL2xpYmluc3RhbGxlci9sZGxpbnV4X2Jpbi5jIFwKKysJICAgLi4vbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMKKyBPQkpTCSA9ICQocGF0c3Vic3QgJS5jLCUubywkKG5vdGRpciAkKFNSQ1MpKSkKKyAKKyAuU1VGRklYRVM6IC5jIC5vIC5pIC5zIC5TCitkaWZmIC0tZ2l0IGEvZXh0bGludXgvbWFpbi5jIGIvZXh0bGludXgvbWFpbi5jCitpbmRleCAwOTc0MGJkLi42ZmUwMjZlIDEwMDY0NAorLS0tIGEvZXh0bGludXgvbWFpbi5jCisrKysgYi9leHRsaW51eC9tYWluLmMKK0BAIC02MCw2ICs2MCw3IEBACisgI2luY2x1ZGUgInNldGFkdi5oIgorICNpbmNsdWRlICJzeXNseG9wdC5oIiAvKiB1bmlmaWVkIG9wdGlvbnMgKi8KKyAjaW5jbHVkZSAibW91bnRpbmZvLmgiCisrI2luY2x1ZGUgInN5c2xpbnV4ZXh0LmgiCisgCisgI2lmZGVmIERFQlVHCisgIyBkZWZpbmUgZHByaW50ZiBwcmludGYKK0BAIC02NywxMCArNjgsNiBAQAorICMgZGVmaW5lIGRwcmludGYoLi4uKSAoKHZvaWQpMCkKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIEVYVDJfU1VQRVJfT0ZGU0VUCistI2RlZmluZSBFWFQyX1NVUEVSX09GRlNFVCAxMDI0CistI2VuZGlmCistCisgLyogU2luY2Ugd2UgaGF2ZSB1bnVzZWQgMjA0OCBieXRlcyBpbiB0aGUgcHJpbWFyeSBBRyBvZiBhbiBYRlMgcGFydGl0aW9uLAorICAqIHdlIHdpbGwgdXNlIHRoZSBmaXJzdCAwfjUxMiBieXRlcyBzdGFydGluZyBmcm9tIDIwNDggZm9yIHRoZSBTeXNsaW51eAorICAqIGJvb3Qgc2VjdG9yLgorQEAgLTkyLDEzNiArODksNiBAQCBzdGF0aWMgY2hhciBzdWJ2b2xbQlRSRlNfU1VCVk9MX01BWF07CisgCQkJICAtIDIqQURWX1NJWkUpCisgCisgLyoKKy0gKiBHZXQgdGhlIHNpemUgb2YgYSBibG9jayBkZXZpY2UKKy0gKi8KKy1zdGF0aWMgdWludDY0X3QgZ2V0X3NpemUoaW50IGRldmZkKQorLXsKKy0gICAgdWludDY0X3QgYnl0ZXM7CistICAgIHVpbnQzMl90IHNlY3RzOworLSAgICBzdHJ1Y3Qgc3RhdCBzdDsKKy0KKy0jaWZkZWYgQkxLR0VUU0laRTY0CistICAgIGlmICghaW9jdGwoZGV2ZmQsIEJMS0dFVFNJWkU2NCwgJmJ5dGVzKSkKKy0JcmV0dXJuIGJ5dGVzOworLSNlbmRpZgorLSAgICBpZiAoIWlvY3RsKGRldmZkLCBCTEtHRVRTSVpFLCAmc2VjdHMpKQorLQlyZXR1cm4gKHVpbnQ2NF90KSBzZWN0cyA8PCA5OworLSAgICBlbHNlIGlmICghZnN0YXQoZGV2ZmQsICZzdCkgJiYgc3Quc3Rfc2l6ZSkKKy0JcmV0dXJuIHN0LnN0X3NpemU7CistICAgIGVsc2UKKy0JcmV0dXJuIDA7CistfQorLQorLS8qCistICogR2V0IGRldmljZSBnZW9tZXRyeSBhbmQgcGFydGl0aW9uIG9mZnNldAorLSAqLworLXN0cnVjdCBnZW9tZXRyeV90YWJsZSB7CistICAgIHVpbnQ2NF90IGJ5dGVzOworLSAgICBzdHJ1Y3QgaGRfZ2VvbWV0cnkgZzsKKy19OworLQorLXN0YXRpYyBpbnQgc3lzZnNfZ2V0X29mZnNldChpbnQgZGV2ZmQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0KQorLXsKKy0gICAgc3RydWN0IHN0YXQgc3Q7CistICAgIGNoYXIgc3lzZnNfbmFtZVsxMjhdOworLSAgICBGSUxFICpmOworLSAgICBpbnQgcnY7CistCistICAgIGlmIChmc3RhdChkZXZmZCwgJnN0KSkKKy0JcmV0dXJuIC0xOworLQorLSAgICBpZiAoKHNpemVfdClzbnByaW50ZihzeXNmc19uYW1lLCBzaXplb2Ygc3lzZnNfbmFtZSwKKy0JCQkgIi9zeXMvZGV2L2Jsb2NrLyV1OiV1L3N0YXJ0IiwKKy0JCQkgbWFqb3Ioc3Quc3RfcmRldiksIG1pbm9yKHN0LnN0X3JkZXYpKQorLQk+PSBzaXplb2Ygc3lzZnNfbmFtZSkKKy0JcmV0dXJuIC0xOworLQorLSAgICBmID0gZm9wZW4oc3lzZnNfbmFtZSwgInIiKTsKKy0gICAgaWYgKCFmKQorLQlyZXR1cm4gLTE7CistCistICAgIHJ2ID0gZnNjYW5mKGYsICIlbHUiLCBzdGFydCk7CistICAgIGZjbG9zZShmKTsKKy0KKy0gICAgcmV0dXJuIChydiA9PSAxKSA/IDAgOiAtMTsKKy19CistCistLyogU3RhbmRhcmQgZmxvcHB5IGRpc2sgZ2VvbWV0cmllcywgcGx1cyBMUy0xMjAuICBaaXBkaXNrIGdlb21ldHJ5CistICAgKHgvNjQvMzIpIGlzIHRoZSBmaW5hbCBmYWxsYmFjay4gIEkgZG9uJ3Qga25vdyB3aGF0IExTLTI0MCBoYXMKKy0gICBhcyBpdHMgZ2VvbWV0cnksIHNpbmNlIEkgZG9uJ3QgaGF2ZSBvbmUgYW5kIGRvbid0IGtub3cgYW55b25lIHRoYXQgZG9lcywKKy0gICBhbmQgR29vZ2xlIHdhc24ndCBoZWxwZnVsLi4uICovCistc3RhdGljIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSBzdGFuZGFyZF9nZW9tZXRyaWVzW10gPSB7CistICAgIHszNjAgKiAxMDI0LCB7MiwgOSwgNDAsIDB9fSwKKy0gICAgezcyMCAqIDEwMjQsIHsyLCA5LCA4MCwgMH19LAorLSAgICB7MTIwMCAqIDEwMjQsIHsyLCAxNSwgODAsIDB9fSwKKy0gICAgezE0NDAgKiAxMDI0LCB7MiwgMTgsIDgwLCAwfX0sCistICAgIHsxNjgwICogMTAyNCwgezIsIDIxLCA4MCwgMH19LAorLSAgICB7MTcyMiAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKy0gICAgezI4ODAgKiAxMDI0LCB7MiwgMzYsIDgwLCAwfX0sCistICAgIHszODQwICogMTAyNCwgezIsIDQ4LCA4MCwgMH19LAorLSAgICB7MTIzMjY0ICogMTAyNCwgezgsIDMyLCA5NjMsIDB9fSwJLyogTFMxMjAgKi8KKy0gICAgezAsIHswLCAwLCAwLCAwfX0KKy19OworLQorLWludCBnZXRfZ2VvbWV0cnkoaW50IGRldmZkLCB1aW50NjRfdCB0b3RhbGJ5dGVzLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKKy17CistICAgIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZkX3N0cjsKKy0gICAgc3RydWN0IGxvb3BfaW5mbyBsaTsKKy0gICAgc3RydWN0IGxvb3BfaW5mbzY0IGxpNjQ7CistICAgIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSAqZ3A7CistICAgIGludCBydiA9IDA7CistCistICAgIG1lbXNldChnZW8sIDAsIHNpemVvZiAqZ2VvKTsKKy0KKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgSERJT19HRVRHRU8sIGdlbykpIHsKKy0JZ290byBvazsKKy0gICAgfSBlbHNlIGlmICghaW9jdGwoZGV2ZmQsIEZER0VUUFJNLCAmZmRfc3RyKSkgeworLQlnZW8tPmhlYWRzID0gZmRfc3RyLmhlYWQ7CistCWdlby0+c2VjdG9ycyA9IGZkX3N0ci5zZWN0OworLQlnZW8tPmN5bGluZGVycyA9IGZkX3N0ci50cmFjazsKKy0JZ2VvLT5zdGFydCA9IDA7CistCWdvdG8gb2s7CistICAgIH0KKy0KKy0gICAgLyogRGlkbid0IHdvcmsuICBMZXQncyBzZWUgaWYgdGhpcyBpcyBvbmUgb2YgdGhlIHN0YW5kYXJkIGdlb21ldHJpZXMgKi8KKy0gICAgZm9yIChncCA9IHN0YW5kYXJkX2dlb21ldHJpZXM7IGdwLT5ieXRlczsgZ3ArKykgeworLQlpZiAoZ3AtPmJ5dGVzID09IHRvdGFsYnl0ZXMpIHsKKy0JICAgIG1lbWNweShnZW8sICZncC0+Zywgc2l6ZW9mICpnZW8pOworLQkgICAgZ290byBvazsKKy0JfQorLSAgICB9CistCistICAgIC8qIERpZG4ndCB3b3JrIGVpdGhlci4uLiBhc3NpZ24gYSBnZW9tZXRyeSBvZiA2NCBoZWFkcywgMzIgc2VjdG9yczsgdGhpcyBpcworLSAgICAgICB3aGF0IHppcGRpc2tzIHVzZSwgc28gdGhpcyB3b3VsZCBoZWxwIGlmIHNvbWVvbmUgaGFzIGEgVVNCIGtleSB0aGF0CistICAgICAgIHRoZXkncmUgYm9vdGluZyBpbiBVU0ItWklQIG1vZGUuICovCistCistICAgIGdlby0+aGVhZHMgPSBvcHQuaGVhZHMgPyA6IDY0OworLSAgICBnZW8tPnNlY3RvcnMgPSBvcHQuc2VjdG9ycyA/IDogMzI7CistICAgIGdlby0+Y3lsaW5kZXJzID0gdG90YWxieXRlcyAvIChnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzIDw8IFNFQ1RPUl9TSElGVCk7CistICAgIGdlby0+c3RhcnQgPSAwOworLQorLSAgICBpZiAoIW9wdC5zZWN0b3JzICYmICFvcHQuaGVhZHMpIHsKKy0JZnByaW50ZihzdGRlcnIsCistCQkiV2FybmluZzogdW5hYmxlIHRvIG9idGFpbiBkZXZpY2UgZ2VvbWV0cnkgKGRlZmF1bHRpbmcgdG8gJWQgaGVhZHMsICVkIHNlY3RvcnMpXG4iCistCQkiICAgICAgICAgKG9uIGhhcmQgZGlza3MsIHRoaXMgaXMgdXN1YWxseSBoYXJtbGVzcy4pXG4iLAorLQkJZ2VvLT5oZWFkcywgZ2VvLT5zZWN0b3JzKTsKKy0JcnYgPSAxOwkJCS8qIFN1Ym9wdGltYWwgcmVzdWx0ICovCistICAgIH0KKy0KKy1vazoKKy0gICAgLyogSWYgdGhpcyBpcyBhIGxvb3BiYWNrIGRldmljZSwgdHJ5IHRvIHNldCB0aGUgc3RhcnQgKi8KKy0gICAgaWYgKCFpb2N0bChkZXZmZCwgTE9PUF9HRVRfU1RBVFVTNjQsICZsaTY0KSkKKy0JZ2VvLT5zdGFydCA9IGxpNjQubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKy0gICAgZWxzZSBpZiAoIWlvY3RsKGRldmZkLCBMT09QX0dFVF9TVEFUVVMsICZsaSkpCistCWdlby0+c3RhcnQgPSAodW5zaWduZWQgaW50KWxpLmxvX29mZnNldCA+PiBTRUNUT1JfU0hJRlQ7CistICAgIGVsc2UgaWYgKCFzeXNmc19nZXRfb2Zmc2V0KGRldmZkLCAmZ2VvLT5zdGFydCkpIHsKKy0JLyogT0sgKi8KKy0gICAgfQorLQorLSAgICByZXR1cm4gcnY7CistfQorLQorLS8qCisgICogUXVlcnkgdGhlIGRldmljZSBnZW9tZXRyeSBhbmQgcHV0IGl0IGludG8gdGhlIGJvb3Qgc2VjdG9yLgorICAqIE1hcCB0aGUgZmlsZSBhbmQgcHV0IHRoZSBtYXAgaW4gdGhlIGJvb3Qgc2VjdG9yIGFuZCBmaWxlLgorICAqIFN0aWNrIHRoZSAiY3VycmVudCBkaXJlY3RvcnkiIGlub2RlIG51bWJlciBpbnRvIHRoZSBmaWxlLgorQEAgLTIzMSwxMSArOTgsOCBAQCBvazoKKyBzdGF0aWMgaW50IHBhdGNoX2ZpbGVfYW5kX2Jvb3RibG9jayhpbnQgZmQsIGNvbnN0IGNoYXIgKmRpciwgaW50IGRldmZkKQorIHsKKyAgICAgc3RydWN0IHN0YXQgZGlyc3QsIHhkc3Q7CistICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnZW87CisgICAgIHNlY3Rvcl90ICpzZWN0cDsKKy0gICAgdWludDY0X3QgdG90YWxieXRlcywgdG90YWxzZWN0b3JzOworICAgICBpbnQgbnNlY3Q7CistICAgIHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKnNiczsKKyAgICAgY2hhciAqZGlycGF0aCwgKnN1YnBhdGgsICp4ZGlycGF0aDsKKyAgICAgaW50IHJ2OworIAorQEAgLTI3OSwzMyArMTQzLDggQEAgc3RhdGljIGludCBwYXRjaF9maWxlX2FuZF9ib290YmxvY2soaW50IGZkLCBjb25zdCBjaGFyICpkaXIsIGludCBkZXZmZCkKKyAgICAgLyogTm93IHN1YnBhdGggc2hvdWxkIGNvbnRhaW4gdGhlIHBhdGggcmVsYXRpdmUgdG8gdGhlIGZzIGJhc2UgKi8KKyAgICAgZHByaW50Zigic3VicGF0aCA9ICVzXG4iLCBzdWJwYXRoKTsKKyAKKy0gICAgdG90YWxieXRlcyA9IGdldF9zaXplKGRldmZkKTsKKy0gICAgZ2V0X2dlb21ldHJ5KGRldmZkLCB0b3RhbGJ5dGVzLCAmZ2VvKTsKKy0KKy0gICAgaWYgKG9wdC5oZWFkcykKKy0JZ2VvLmhlYWRzID0gb3B0LmhlYWRzOworLSAgICBpZiAob3B0LnNlY3RvcnMpCistCWdlby5zZWN0b3JzID0gb3B0LnNlY3RvcnM7CistCistICAgIC8qIFBhdGNoIHRoaXMgaW50byBhIGZha2UgRkFUIHN1cGVyYmxvY2suICBUaGlzIGlzbid0IGJlY2F1c2UKKy0gICAgICAgRkFUIGlzIGEgZ29vZCBmb3JtYXQgaW4gYW55IHdheSwgaXQncyBiZWNhdXNlIGl0IGxldHMgdGhlCistICAgICAgIGVhcmx5IGJvb3RzdHJhcCBzaGFyZSBjb2RlIHdpdGggdGhlIEZBVCB2ZXJzaW9uLiAqLworLSAgICBkcHJpbnRmKCJoZWFkcyA9ICV1LCBzZWN0ID0gJXVcbiIsIGdlby5oZWFkcywgZ2VvLnNlY3RvcnMpOworLQorLSAgICBzYnMgPSAoc3RydWN0IGZhdF9ib290X3NlY3RvciAqKXN5c2xpbnV4X2Jvb3RzZWN0OworLQorLSAgICB0b3RhbHNlY3RvcnMgPSB0b3RhbGJ5dGVzID4+IFNFQ1RPUl9TSElGVDsKKy0gICAgaWYgKHRvdGFsc2VjdG9ycyA+PSA2NTUzNikgeworLQlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCAwKTsKKy0gICAgfSBlbHNlIHsKKy0Jc2V0XzE2KCZzYnMtPmJzU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKy0gICAgfQorLSAgICBzZXRfMzIoJnNicy0+YnNIdWdlU2VjdG9ycywgdG90YWxzZWN0b3JzKTsKKy0KKy0gICAgc2V0XzE2KCZzYnMtPmJzQnl0ZXNQZXJTZWMsIFNFQ1RPUl9TSVpFKTsKKy0gICAgc2V0XzE2KCZzYnMtPmJzU2VjUGVyVHJhY2ssIGdlby5zZWN0b3JzKTsKKy0gICAgc2V0XzE2KCZzYnMtPmJzSGVhZHMsIGdlby5oZWFkcyk7CistICAgIHNldF8zMigmc2JzLT5ic0hpZGRlblNlY3MsIGdlby5zdGFydCk7CisrICAgIC8qIFBhdGNoIHN5c2xpbnV4X2Jvb3RzZWN0ICovCisrICAgIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGRldmZkKTsKKyAKKyAgICAgLyogQ29uc3RydWN0IHRoZSBib290IGZpbGUgbWFwICovCisgCitkaWZmIC0tZ2l0IGEvbGliaW5zdGFsbGVyL3N5c2xpbnV4ZXh0LmMgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworaW5kZXggYmI1NGNlZi4uNWE0NDIzYiAxMDA2NDQKKy0tLSBhL2xpYmluc3RhbGxlci9zeXNsaW51eGV4dC5jCisrKysgYi9saWJpbnN0YWxsZXIvc3lzbGludXhleHQuYworQEAgLTEsNyArMSwxNzcgQEAKKyAjZGVmaW5lIF9HTlVfU09VUkNFCisgCisrI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxnZXRvcHQuaD4KKysjaW5jbHVkZSA8ZXh0MmZzL2V4dDJmcy5oPgorKworKyNpbmNsdWRlICJsaW51eGlvY3RsLmgiCisrI2luY2x1ZGUgInN5c2xpbnV4LmgiCisrI2luY2x1ZGUgInN5c2x4aW50LmgiCisrI2luY2x1ZGUgInN5c2x4b3B0LmgiCisrCisrLyoKKysgKiBHZXQgdGhlIHNpemUgb2YgYSBibG9jayBkZXZpY2UKKysgKi8KKytzdGF0aWMgdWludDY0X3QgZ2V0X3NpemUoaW50IGRldl9mZCkKKyt7CisrICAgIHVpbnQ2NF90IGJ5dGVzOworKyAgICB1aW50MzJfdCBzZWN0czsKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrCisrI2lmZGVmIEJMS0dFVFNJWkU2NAorKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgQkxLR0VUU0laRTY0LCAmYnl0ZXMpKQorKwlyZXR1cm4gYnl0ZXM7CisrI2VuZGlmCisrICAgIGlmICghaW9jdGwoZGV2X2ZkLCBCTEtHRVRTSVpFLCAmc2VjdHMpKQorKwlyZXR1cm4gKHVpbnQ2NF90KSBzZWN0cyA8PCA5OworKyAgICBlbHNlIGlmICghZnN0YXQoZGV2X2ZkLCAmc3QpICYmIHN0LnN0X3NpemUpCisrCXJldHVybiBzdC5zdF9zaXplOworKyAgICBlbHNlCisrCXJldHVybiAwOworK30KKysKKysvKgorKyAqIEdldCBkZXZpY2UgZ2VvbWV0cnkgYW5kIHBhcnRpdGlvbiBvZmZzZXQKKysgKi8KKytzdGF0aWMgc3RydWN0IGdlb21ldHJ5X3RhYmxlIHsKKysgICAgdWludDY0X3QgYnl0ZXM7CisrICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnOworK307CisrCisrc3RhdGljIGludCBzeXNmc19nZXRfb2Zmc2V0KGludCBkZXZfZmQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0KQorK3sKKysgICAgc3RydWN0IHN0YXQgc3Q7CisrICAgIGNoYXIgc3lzZnNfbmFtZVsxMjhdOworKyAgICBGSUxFICpmOworKyAgICBpbnQgcnY7CisrCisrICAgIGlmIChmc3RhdChkZXZfZmQsICZzdCkpCisrCXJldHVybiAtMTsKKysKKysgICAgaWYgKChzaXplX3Qpc25wcmludGYoc3lzZnNfbmFtZSwgc2l6ZW9mIHN5c2ZzX25hbWUsCisrCQkJICIvc3lzL2Rldi9ibG9jay8ldToldS9zdGFydCIsCisrCQkJIG1ham9yKHN0LnN0X3JkZXYpLCBtaW5vcihzdC5zdF9yZGV2KSkKKysJPj0gc2l6ZW9mIHN5c2ZzX25hbWUpCisrCXJldHVybiAtMTsKKysKKysgICAgZiA9IGZvcGVuKHN5c2ZzX25hbWUsICJyIik7CisrICAgIGlmICghZikKKysJcmV0dXJuIC0xOworKworKyAgICBydiA9IGZzY2FuZihmLCAiJWx1Iiwgc3RhcnQpOworKyAgICBmY2xvc2UoZik7CisrCisrICAgIHJldHVybiAocnYgPT0gMSkgPyAwIDogLTE7CisrfQorKworKy8qIFN0YW5kYXJkIGZsb3BweSBkaXNrIGdlb21ldHJpZXMsIHBsdXMgTFMtMTIwLiAgWmlwZGlzayBnZW9tZXRyeQorKyAgICh4LzY0LzMyKSBpcyB0aGUgZmluYWwgZmFsbGJhY2suICBJIGRvbid0IGtub3cgd2hhdCBMUy0yNDAgaGFzCisrICAgYXMgaXRzIGdlb21ldHJ5LCBzaW5jZSBJIGRvbid0IGhhdmUgb25lIGFuZCBkb24ndCBrbm93IGFueW9uZSB0aGF0IGRvZXMsCisrICAgYW5kIEdvb2dsZSB3YXNuJ3QgaGVscGZ1bC4uLiAqLworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VvbWV0cnlfdGFibGUgc3RhbmRhcmRfZ2VvbWV0cmllc1tdID0geworKyAgICB7MzYwICogMTAyNCwgezIsIDksIDQwLCAwfX0sCisrICAgIHs3MjAgKiAxMDI0LCB7MiwgOSwgODAsIDB9fSwKKysgICAgezEyMDAgKiAxMDI0LCB7MiwgMTUsIDgwLCAwfX0sCisrICAgIHsxNDQwICogMTAyNCwgezIsIDE4LCA4MCwgMH19LAorKyAgICB7MTY4MCAqIDEwMjQsIHsyLCAyMSwgODAsIDB9fSwKKysgICAgezE3MjIgKiAxMDI0LCB7MiwgMjEsIDgwLCAwfX0sCisrICAgIHsyODgwICogMTAyNCwgezIsIDM2LCA4MCwgMH19LAorKyAgICB7Mzg0MCAqIDEwMjQsIHsyLCA0OCwgODAsIDB9fSwKKysgICAgezEyMzI2NCAqIDEwMjQsIHs4LCAzMiwgOTYzLCAwfX0sCS8qIExTMTIwICovCisrICAgIHswLCB7MCwgMCwgMCwgMH19CisrfTsKKysKKytzdGF0aWMgaW50IGdldF9nZW9tZXRyeShpbnQgZGV2X2ZkLCB1aW50NjRfdCB0b3RhbGJ5dGVzLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKKyt7CisrICAgIHN0cnVjdCBmbG9wcHlfc3RydWN0IGZkX3N0cjsKKysgICAgc3RydWN0IGxvb3BfaW5mbyBsaTsKKysgICAgc3RydWN0IGxvb3BfaW5mbzY0IGxpNjQ7CisrICAgIGNvbnN0IHN0cnVjdCBnZW9tZXRyeV90YWJsZSAqZ3A7CisrICAgIGludCBydiA9IDA7CisrCisrICAgIG1lbXNldChnZW8sIDAsIHNpemVvZiAqZ2VvKTsKKysKKysgICAgaWYgKCFpb2N0bChkZXZfZmQsIEhESU9fR0VUR0VPLCBnZW8pKSB7CisrCWdvdG8gb2s7CisrICAgIH0gZWxzZSBpZiAoIWlvY3RsKGRldl9mZCwgRkRHRVRQUk0sICZmZF9zdHIpKSB7CisrCWdlby0+aGVhZHMgPSBmZF9zdHIuaGVhZDsKKysJZ2VvLT5zZWN0b3JzID0gZmRfc3RyLnNlY3Q7CisrCWdlby0+Y3lsaW5kZXJzID0gZmRfc3RyLnRyYWNrOworKwlnZW8tPnN0YXJ0ID0gMDsKKysJZ290byBvazsKKysgICAgfQorKworKyAgICAvKiBEaWRuJ3Qgd29yay4gIExldCdzIHNlZSBpZiB0aGlzIGlzIG9uZSBvZiB0aGUgc3RhbmRhcmQgZ2VvbWV0cmllcyAqLworKyAgICBmb3IgKGdwID0gc3RhbmRhcmRfZ2VvbWV0cmllczsgZ3AtPmJ5dGVzOyBncCsrKSB7CisrCWlmIChncC0+Ynl0ZXMgPT0gdG90YWxieXRlcykgeworKwkgICAgbWVtY3B5KGdlbywgJmdwLT5nLCBzaXplb2YgKmdlbyk7CisrCSAgICBnb3RvIG9rOworKwl9CisrICAgIH0KKysKKysgICAgLyogRGlkbid0IHdvcmsgZWl0aGVyLi4uIGFzc2lnbiBhIGdlb21ldHJ5IG9mIDY0IGhlYWRzLCAzMiBzZWN0b3JzOyB0aGlzIGlzCisrICAgICAgIHdoYXQgemlwZGlza3MgdXNlLCBzbyB0aGlzIHdvdWxkIGhlbHAgaWYgc29tZW9uZSBoYXMgYSBVU0Iga2V5IHRoYXQKKysgICAgICAgdGhleSdyZSBib290aW5nIGluIFVTQi1aSVAgbW9kZS4gKi8KKysKKysgICAgZ2VvLT5oZWFkcyA9IG9wdC5oZWFkcyA/IDogNjQ7CisrICAgIGdlby0+c2VjdG9ycyA9IG9wdC5zZWN0b3JzID8gOiAzMjsKKysgICAgZ2VvLT5jeWxpbmRlcnMgPSB0b3RhbGJ5dGVzIC8gKGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgPDwgU0VDVE9SX1NISUZUKTsKKysgICAgZ2VvLT5zdGFydCA9IDA7CisrCisrICAgIGlmICghb3B0LnNlY3RvcnMgJiYgIW9wdC5oZWFkcykgeworKwlmcHJpbnRmKHN0ZGVyciwKKysJCSJXYXJuaW5nOiB1bmFibGUgdG8gb2J0YWluIGRldmljZSBnZW9tZXRyeSAoZGVmYXVsdGluZyB0byAlZCBoZWFkcywgJWQgc2VjdG9ycylcbiIKKysJCSIgICAgICAgICAob24gaGFyZCBkaXNrcywgdGhpcyBpcyB1c3VhbGx5IGhhcm1sZXNzLilcbiIsCisrCQlnZW8tPmhlYWRzLCBnZW8tPnNlY3RvcnMpOworKwlydiA9IDE7CQkJLyogU3Vib3B0aW1hbCByZXN1bHQgKi8KKysgICAgfQorKworK29rOgorKyAgICAvKiBJZiB0aGlzIGlzIGEgbG9vcGJhY2sgZGV2aWNlLCB0cnkgdG8gc2V0IHRoZSBzdGFydCAqLworKyAgICBpZiAoIWlvY3RsKGRldl9mZCwgTE9PUF9HRVRfU1RBVFVTNjQsICZsaTY0KSkKKysJZ2VvLT5zdGFydCA9IGxpNjQubG9fb2Zmc2V0ID4+IFNFQ1RPUl9TSElGVDsKKysgICAgZWxzZSBpZiAoIWlvY3RsKGRldl9mZCwgTE9PUF9HRVRfU1RBVFVTLCAmbGkpKQorKwlnZW8tPnN0YXJ0ID0gKHVuc2lnbmVkIGludClsaS5sb19vZmZzZXQgPj4gU0VDVE9SX1NISUZUOworKyAgICBlbHNlIGlmICghc3lzZnNfZ2V0X29mZnNldChkZXZfZmQsICZnZW8tPnN0YXJ0KSkgeworKwkvKiBPSyAqLworKyAgICB9CisrCisrICAgIHJldHVybiBydjsKKyt9CisrCisrCisgLyogUGF0Y2ggc3lzbGludXhfYm9vdHNlY3QgKi8KKyB2b2lkIHN5c2xpbnV4X3BhdGNoX2Jvb3RzZWN0KGludCBkZXZfZmQpCisgeworKyAgICB1aW50NjRfdCB0b3RhbGJ5dGVzLCB0b3RhbHNlY3RvcnM7CisrICAgIHN0cnVjdCBoZF9nZW9tZXRyeSBnZW87CisrICAgIHN0cnVjdCBmYXRfYm9vdF9zZWN0b3IgKnNiczsKKysKKysgICAgdG90YWxieXRlcyA9IGdldF9zaXplKGRldl9mZCk7CisrICAgIGdldF9nZW9tZXRyeShkZXZfZmQsIHRvdGFsYnl0ZXMsICZnZW8pOworKworKyAgICBpZiAob3B0LmhlYWRzKQorKwlnZW8uaGVhZHMgPSBvcHQuaGVhZHM7CisrICAgIGlmIChvcHQuc2VjdG9ycykKKysJZ2VvLnNlY3RvcnMgPSBvcHQuc2VjdG9yczsKKysKKysgICAgLyogUGF0Y2ggdGhpcyBpbnRvIGEgZmFrZSBGQVQgc3VwZXJibG9jay4gIFRoaXMgaXNuJ3QgYmVjYXVzZQorKyAgICAgICBGQVQgaXMgYSBnb29kIGZvcm1hdCBpbiBhbnkgd2F5LCBpdCdzIGJlY2F1c2UgaXQgbGV0cyB0aGUKKysgICAgICAgZWFybHkgYm9vdHN0cmFwIHNoYXJlIGNvZGUgd2l0aCB0aGUgRkFUIHZlcnNpb24uICovCisrICAgIHNicyA9IChzdHJ1Y3QgZmF0X2Jvb3Rfc2VjdG9yICopc3lzbGludXhfYm9vdHNlY3Q7CisrCisrICAgIHRvdGFsc2VjdG9ycyA9IHRvdGFsYnl0ZXMgPj4gU0VDVE9SX1NISUZUOworKyAgICBpZiAodG90YWxzZWN0b3JzID49IDY1NTM2KSB7CisrCXNldF8xNigmc2JzLT5ic1NlY3RvcnMsIDApOworKyAgICB9IGVsc2UgeworKwlzZXRfMTYoJnNicy0+YnNTZWN0b3JzLCB0b3RhbHNlY3RvcnMpOworKyAgICB9CisrICAgIHNldF8zMigmc2JzLT5ic0h1Z2VTZWN0b3JzLCB0b3RhbHNlY3RvcnMpOworKworKyAgICBzZXRfMTYoJnNicy0+YnNCeXRlc1BlclNlYywgU0VDVE9SX1NJWkUpOworKyAgICBzZXRfMTYoJnNicy0+YnNTZWNQZXJUcmFjaywgZ2VvLnNlY3RvcnMpOworKyAgICBzZXRfMTYoJnNicy0+YnNIZWFkcywgZ2VvLmhlYWRzKTsKKysgICAgc2V0XzMyKCZzYnMtPmJzSGlkZGVuU2VjcywgZ2VvLnN0YXJ0KTsKKyB9CisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC8wMDA5LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1pbnN0YWxsX2Jvb3RibG9jay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDg5ZDkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4LzAwMDktbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfYm9vdGJsb2NrLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gNzZjNDY1ZTg3MzEyZGJjNmNmZmQwNTQyN2YxZjRkMmViZGVlNGYxMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAyIEphbiAyMDE1IDEyOjI4OjM1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggOS85XSBsaW51eC9zeXNsaW51eDogaW1wbGVtZW50IGluc3RhbGxfYm9vdGJsb2NrKCkKKworUmVmZXIgdG8gdGhlIGluc3RhbGxfYm9vdGJsb2NrKCkgaW4gZXh0bGludXgvbWFpbi5jIHRvIG1ha2UKK2xpbnV4L3N5c2xpbnV4LmMncyBpbnN0YWxsX2Jvb3RibG9jaygpIHdoaWNoIG9ubHkgc3VwcG9ydHMgZXh0Mi8zLzQuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorVGVzdGVkLWJ5OiBEdSBEb2xwaGVyIDxkb2xwaGVyLmR1QGludGVsLmNvbT4KKy0tLQorIGxpbnV4L3N5c2xpbnV4LmMgfCAyMCArKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9saW51eC9zeXNsaW51eC5jIGIvbGludXgvc3lzbGludXguYworaW5kZXggYzc0MTc1MC4uOTE3ZjgzYSAxMDA3NTUKKy0tLSBhL2xpbnV4L3N5c2xpbnV4LmMKKysrKyBiL2xpbnV4L3N5c2xpbnV4LmMKK0BAIC00MTksNiArNDE5LDI2IEBAIHN0YXRpYyBpbnQgZXh0X2ZpbGVfd3JpdGUoZXh0Ml9maWxlX3QgZTJfZmlsZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisgICovCisgaW50IGluc3RhbGxfYm9vdGJsb2NrKGludCBmZCwgY29uc3QgY2hhciAqZGV2aWNlKQorIHsKKysgICAgc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgc2I7CisrCisrICAgIGlmICh4cHJlYWQoZmQsICZzYiwgc2l6ZW9mIHNiLCBFWFQyX1NVUEVSX09GRlNFVCArIG9wdC5vZmZzZXQpICE9IHNpemVvZiBzYikgeworKyAgICAgICAgcGVycm9yKCJyZWFkaW5nIHN1cGVyYmxvY2siKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIGlmIChzYi5zX21hZ2ljICE9IEVYVDJfU1VQRVJfTUFHSUMpIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLAorKyAgICAgICAgICAgICAgICAibm8gZXh0Mi8zLzQgc3VwZXJibG9jayBmb3VuZCBvbiAlc1xuIiwgZGV2aWNlKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIGlmICh4cHdyaXRlKGZkLCBzeXNsaW51eF9ib290c2VjdCwgc3lzbGludXhfYm9vdHNlY3RfbGVuLCAwKQorKyAgICAgICAgIT0gKHNpZ25lZClzeXNsaW51eF9ib290c2VjdF9sZW4pIHsKKysgICAgICAgIHBlcnJvcigid3JpdGluZyBib290YmxvY2siKTsKKysgICAgICAgIHJldHVybiAxOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworIH0KKyAKKyAvKiBUaGUgZmlsZSdzIGJsb2NrIGNvdW50ICovCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1maXgtcGFyYWxsZWwtYnVpbGRpbmctaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmIxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK3N5c2xpbnV4LW5hdGl2ZTogZml4IHBhcmFsbGVsIGJ1aWxkaW5nIGlzc3VlCisKK1RoZXJlIG1pZ2h0IGJlIGFuIGVycm9yIHdoZW4gcGFyYWxsZWwgYnVpbGQ6CisKK1tzbmlwXQorY3A6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGB0bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS8KK3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvZ3BsaW5jbHVkZSc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK21ha2VbNF06ICoqKiBbaW5zdGFsbF0gRXJyb3IgMQorbWFrZVszXTogKioqIFtncGxsaWJdIEVycm9yIDIKK1tzbmlwXQorCitUaGlzIGlzIGEgcG90ZW50aWFsIGlzc3VlLiBJbiAke1N9L2NvbTMyL2dwbGxpYi9NYWtlZmlsZSBmaWxlLAoraW5zdGFsbCB0YXJnZXQgd2FudHMgdG8gY29weSAkKFNSQykvLi4vZ3BsaW5jbHVkZSB0bworJChJTlNUQUxMUk9PVCkkKENPTTMyRElSKS9pbmNsdWRlLyBkaXJlY3RvcnksIGJ1dCBpbiAke1N9L2NvbTMyL2xpYi9NYWtlZmlsZQorZmlsZSwgdGhlIGluc3RhbGwgdGFyZ2V0IHdpbGwgcmVtb3ZlICQoSU5TVEFMTFJPT1QpJChDT00zMkRJUikvaW5jbHVkZQorZGlyZWN0b3J5LiBXZSBuZWVkIHRvIGRvIGNvbTMyL2xpYiBmaXJzdC4KKworVGhlIHBhdGNoIG1ha2UgY29tMzIvZ3BsbGliIGRlcGVuZHMgb24gY29tMzIvbGliIHRvIGZpeCB0aGlzIGlzc3VlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBjb20zMi9NYWtlZmlsZSB8ICAgIDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitJbmRleDogc3lzbGludXgtNi4wMy9jb20zMi9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2xpbnV4LTYuMDMub3JpZy9jb20zMi9NYWtlZmlsZQorKysrIHN5c2xpbnV4LTYuMDMvY29tMzIvTWFrZWZpbGUKK0BAIC0yMSwzICsyMSw0IEBAIHJvc2g6IGxpYiBsaWJ1dGlsCisgc2FtcGxlczogbGlidXRpbCBlbGZsaW5rL2xkbGludXgKKyBzeXNkdW1wOiBsaWIgbGlidXRpbCBsaWJ1cGxvYWQgZ3BsbGliCisgbHVhL3NyYzogY21lbnUgbW9kdWxlcworK2dwbGxpYjogbGliCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtbGlidXBsb2FkLWRlcGVuZC1saWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA3MTRiNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1saWJ1cGxvYWQtZGVwZW5kLWxpYi5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIDQ5MGZjM2JiZDY1YzJjMjUyYzFmZGYzZGEwZmFjOTg5OGFhOWVlYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMTUgQXVnIDIwMTQgMjE6MDk6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29tMzIvTWFrZWZpbGU6IGZpeCBwYXJhbGxlbCBpc3N1ZQorCitGaXhlZDoKK2NwIC1yIHN5c2xpbnV4LTYuMDEvY29tMzIvbGlidXBsb2FkLyouaCBpbWFnZS91c3Ivc2hhcmUvc3lzbGludXgvY29tMzIvaW5jbHVkZS8KK1tzbmlwXQorcm0gLXJmIGltYWdlL3Vzci9zaGFyZS9zeXNsaW51eC9jb20zMi9pbmNsdWRlCitbc25pcF0KK2NwOiBjYW5ub3QgY3JlYXRlIHJlZ3VsYXIgZmlsZSBgaW1hZ2UvdXNyL3NoYXJlL3N5c2xpbnV4L2NvbTMyL2luY2x1ZGUvc2VyaWFsLmgnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1RoZSBjcCBpcyBoYXBwZW5lZCBpbiB0aGUgImxpYnVwbG9hZCIgZGlyLCB3aGlsZSAicm0gLWZyIiBpcyBoYXBwZW5kIGluCisibGliIiBkaXIsIGxldCAibGlidXBsb2FkIiBkZXBlbmQgImxpYiIgd2lsbCBmaXggdGhlIHByb2JsZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbTMyL01ha2VmaWxlIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jb20zMi9NYWtlZmlsZSBiL2NvbTMyL01ha2VmaWxlCitpbmRleCA5YTE3MjFiLi5mMTcyZGIyIDEwMDY0NAorLS0tIGEvY29tMzIvTWFrZWZpbGUKKysrKyBiL2NvbTMyL01ha2VmaWxlCitAQCAtMjEsMyArMjEsNCBAQCByb3NoOiBsaWIgbGlidXRpbAorIHNhbXBsZXM6IGxpYnV0aWwgZWxmbGluay9sZGxpbnV4Cisgc3lzZHVtcDogbGlidXBsb2FkIGdwbGxpYgorIGdwbGxpYjogbGliCisrbGlidXBsb2FkOiBsaWIKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eC9zeXNsaW51eC1yZW1vdmUtY2xlYW4tc2NyaXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMDAzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvc3lzbGludXgvc3lzbGludXgvc3lzbGludXgtcmVtb3ZlLWNsZWFuLXNjcmlwdC5wYXRjaApAQCAtMCwwICsxLDE3IEBACitUaGlzIHNjcmlwdCB0cnkgdG8gY2FsbCBnaXQgc3VibW9kdWxlLCBzaW5jZSB3ZSBhcmUgZG93bmxvYWRpbmcKK3RoZSB0YXJiYWxsIGl0IHNlZW1zIGluLWNvcnJlY3QgdG8gZG8gdGhpcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBzeXNsaW51eC02LjAzL2VmaS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHN5c2xpbnV4LTYuMDMub3JpZy9lZmkvTWFrZWZpbGUKKysrKyBzeXNsaW51eC02LjAzL2VmaS9NYWtlZmlsZQorQEAgLTEwMSw3ICsxMDEsNiBAQCB0aWR5IGRpc3Q6CisgCXJtIC1mICouc28gKi5vIHdyYXBwZXIKKyAJZmluZCAuIFwoIC1uYW1lIFwqLm8gLW8gLW5hbWUgXCouYSAtbyAtbmFtZSAuXCouZCAtbyAtbmFtZSBcKi50bXAgXCkgLXByaW50MCB8IFwKKyAJCXhhcmdzIC0wciBybSAtZgorLQkkKHRvcGRpcikvZWZpL2NsZWFuLWdudS1lZmkuc2ggJChFRklfU1VCQVJDSCkgJChvYmpkaXIpCisgCisgY2xlYW46IHRpZHkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3N5c2xpbnV4L3N5c2xpbnV4XzYuMDMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5YWUyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy9zeXNsaW51eC9zeXNsaW51eF82LjAzLmJiCkBAIC0wLDAgKzEsODkgQEAKK1NVTU1BUlkgPSAiTXVsdGktcHVycG9zZSBsaW51eCBib290bG9hZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3N5c2xpbnV4Lnp5dG9yLmNvbS8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MzU7ZW5kbGluZT00MTttZDU9NTU4ZjJjNzFjYjFmYjliYTUxMWNjZDQ4NThlNDhlOGEiCisKKyMgSWYgeW91IHJlYWxseSB3YW50IHRvIHJ1biBzeXNsaW51eCwgeW91IG5lZWQgbXRvb2xzLiAgV2UganVzdCB3YW50IHRoZQorIyBsZGxpbnV4Liogc3R1ZmYgZm9yIG5vdywgc28gc2tpcCBtdG9vbHMtbmF0aXZlCitERVBFTkRTID0gIm5hc20tbmF0aXZlIHV0aWwtbGludXggZTJmc3Byb2dzIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvdXRpbHMvYm9vdC9zeXNsaW51eC9zeXNsaW51eC0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vc3lzbGludXgtZml4LXBhcmFsbGVsLWJ1aWxkaW5nLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LWxpYnVwbG9hZC1kZXBlbmQtbGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2xpbnV4LXJlbW92ZS1jbGVhbi1zY3JpcHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1saW51eC1zeXNsaW51eC1zdXBwb3J0LWV4dDItMy00LWRldmljZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1vcGVuX2V4dDJfZnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy1saW51eC1zeXNsaW51eC1pbXBsZW1lbnQtaW5zdGFsbF90b19leHQyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtbGludXgtc3lzbGludXgtYWRkLWV4dF9maWxlX3JlYWQtYW5kLWV4dF9maWxlX3dyaXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDUtbGludXgtc3lzbGludXgtaW1wbGVtZW50LWhhbmRsZV9hZHZfb25fZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtbGludXgtc3lzbGludXgtaW1wbGVtZW50LXdyaXRlX3RvX2V4dC1hbmQtYWRkLXN5c2xpbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWxpbnV4LXN5c2xpbnV4LWltcGxlbWVudC1leHRfY29uc3RydWN0X3NlY3RtYXBfZnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1saWJpbnN0YWxsZXItc3lzbGludXhleHQtaW1wbGVtZW50LXN5c2xpbnV4X3BhdGNoX2JvLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDktbGludXgtc3lzbGludXgtaW1wbGVtZW50LWluc3RhbGxfYm9vdGJsb2NrLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTJhMjUzZGY5MjExZTljMjAxNzI3OTZlY2YzODhmMTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjZkMzk4NmQyYmVhMTA5ZDVkYzBlNGY4YzQ4MjJhNDU5Mjc2Y2YwMjExMjVlOGM5ZjIzYzNjY2E1ZDhjODUwZSIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44NikuKi0obGludXh8ZnJlZWJzZC4qKScKKyMgRG9uJ3QgbGV0IHRoZSBzYW5pdHkgY2hlY2tlciB0cmlwIG9uIHRoZSAzMiBiaXQgcmVhbCBtb2RlIEJJT1MgYmluYXJpZXMKK0lOU0FORV9TS0lQXyR7UE59LW1pc2MgPSAiYXJjaCIKK0lOU0FORV9TS0lQXyR7UE59LWNoYWluID0gImFyY2giCisKK0VYVFJBX09FTUFLRSA9ICIgXAorCUJJTkRJUj0ke2JpbmRpcn0gU0JJTkRJUj0ke3NiaW5kaXJ9IExJQkRJUj0ke2xpYmRpcn0gXAorCURBVEFESVI9JHtkYXRhZGlyfSBNQU5ESVI9JHttYW5kaXJ9IElOQ0RJUj0ke2luY2x1ZGVkaXJ9IFwKKyIKKyMgc3lzbGludXggdXNlcyAkTEQgZm9yIGxpbmtpbmcsIHN0cmlwIGAtV2wsJyBzbyBpdCBjYW4gd29yaworZXhwb3J0IExERkxBR1MgPSAiYGVjaG8gJExERkxBR1MgfCBzZWQgJ3MvLVdsLC8vZydgIgorCitkb19jb25maWd1cmUoKSB7CisJIyBkcm9wIHdpbjMyIHRhcmdldHMgb3IgYnVpbGQgZmFpbHMKKwlzZWQgLWUgJ3Msd2luMzIvXFMqLCxnJyAtaSBNYWtlZmlsZQorCisJIyBjbGVhbiBpbnN0YWxsZXIgZXhlY3V0YWJsZXMgaW5jbHVkZWQgaW4gc291cmNlIHRhcmJhbGwKKwlvZV9ydW5tYWtlIGNsZWFuIGZpcm13YXJlPSJlZmkzMiIgRUZJSU5DPSIke2luY2x1ZGVkaXJ9IgorCSMgTk9URTogVGhlcmUgaXMgYSB0ZW1wb3Jhcnkgd29yayBhcm91bmQgYWJvdmUgdG8gc3BlY2lmeQorCSMJdGhlIGVmaTMyIGFzIHRoZSBmaXJtd2FyZSBlbHNlIHRoZSBwcmUtYnVpbHQgYmlvcworCSMJZmlsZXMgZ2V0IGVyYXNlZCBjb250cmFyeSB0byB0aGUgZG9jL2Rpc3RpYi50eHQKKwkjCUluIHRoZSBmdXR1cmUgdGhpcyBzaG91bGQgYmUgImJpb3MiIGFuZCBub3QgImVmaTMyIi4KK30KKworZG9fY29tcGlsZSgpIHsKKwkjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LLgorCSMgVGhvdWdoIHRoZSAke0J9IHNob3VsZCBhbHdheXMgZXhpc3QsIHN0aWxsIGNoZWNrIGl0IGJlZm9yZSBmaW5kIGFuZCBybS4KKwlbIC1kICIke0J9IiBdICYmIGZpbmQgJHtCfSAtbmFtZSAnLiouZCcgLXR5cGUgZiAtZXhlYyBybSAtZiB7fSBcOworCisJIyBSZWJ1aWxkIG9ubHkgdGhlIGluc3RhbGxlcjsga2VlcCBwcmVjb21waWxlZCBib290bG9hZGVycworCSMgYXMgcGVyIGF1dGhvcidzIHJlcXVlc3QgKGRvYy9kaXN0cmliLnR4dCkKKwlvZV9ydW5tYWtlIENDPSIke0NDfSAke0NGTEFHU30iIExERkxBR1M9IiR7TERGTEFHU30iIGZpcm13YXJlPSJiaW9zIiBpbnN0YWxsZXIKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIENDPSIke0NDfSAke0NGTEFHU30iIGluc3RhbGwgSU5TVEFMTFJPT1Q9IiR7RH0iIGZpcm13YXJlPSJiaW9zIgorCisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9zeXNsaW51eC8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2Jpb3MvY29yZS9sZGxpbnV4LnN5cyAke0R9JHtkYXRhZGlyfS9zeXNsaW51eC8KKwlpbnN0YWxsIC1tIDY0NCAke1N9L2Jpb3MvY29yZS9sZGxpbnV4LmJzcyAke0R9JHtkYXRhZGlyfS9zeXNsaW51eC8KKwlpbnN0YWxsIC1tIDc1NSAke1N9L2Jpb3MvbGludXgvc3lzbGludXgtbm9tdG9vbHMgJHtEfSR7YmluZGlyfS8KK30KKworUEFDS0FHRVMgKz0gIiR7UE59LW5vbXRvb2xzICR7UE59LWV4dGxpbnV4ICR7UE59LW1iciAke1BOfS1jaGFpbiAke1BOfS1weGVsaW51eCAke1BOfS1pc29saW51eCAke1BOfS1taXNjIgorCitSREVQRU5EU18ke1BOfSArPSAibXRvb2xzIgorUkRFUEVORFNfJHtQTn0tbm9tdG9vbHMgKz0gImxpYmV4dDJmcyIKK1JERVBFTkRTXyR7UE59LW1pc2MgKz0gInBlcmwiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9zeXNsaW51eCIKK0ZJTEVTXyR7UE59LW5vbXRvb2xzID0gIiR7YmluZGlyfS9zeXNsaW51eC1ub210b29scyIKK0ZJTEVTXyR7UE59LWV4dGxpbnV4ID0gIiR7c2JpbmRpcn0vZXh0bGludXgiCitGSUxFU18ke1BOfS1tYnIgPSAiJHtkYXRhZGlyfS8ke0JQTn0vbWJyLmJpbiIKK0ZJTEVTXyR7UE59LWNoYWluID0gIiR7ZGF0YWRpcn0vJHtCUE59L2NoYWluLmMzMiIKK0ZJTEVTXyR7UE59LWlzb2xpbnV4ID0gIiR7ZGF0YWRpcn0vJHtCUE59L2lzb2xpbnV4LmJpbiIKK0ZJTEVTXyR7UE59LXB4ZWxpbnV4ID0gIiR7ZGF0YWRpcn0vJHtCUE59L3B4ZWxpbnV4LjAiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vJHtCUE59L2NvbTMyL2xpYioke1NPTElCU30gJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvaW5jbHVkZSAke2RhdGFkaXJ9LyR7QlBOfS9jb20zMi9jb20zMi5sZCIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtkYXRhZGlyfS8ke0JQTn0vY29tMzIvbGliKi5hICR7bGliZGlyfS8ke0JQTn0vY29tMzIvbGliKi5hIgorRklMRVNfJHtQTn0tbWlzYyA9ICIke2RhdGFkaXJ9LyR7QlBOfS8qICR7bGliZGlyfS8ke0JQTn0vKiAke2JpbmRpcn0vKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvZml4X3JhbmxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3MDQ1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L2ZpeF9yYW5saWIucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtwb2t5LXNwZWNpZmljIGZpeF0KKworLS0tIGEvTWFrZWZpbGUuaW5jCisrKysgYi9NYWtlZmlsZS5pbmMKK0BAIC01Nyw2ICs1Nyw5IEBACisgICBpZmVxICgkKE5PX1VVSUQpLCkKKyAgICAgTElCUyArPSAtbHV1aWQKKyAgIGVuZGlmCisrICBpZm5lcSAoJChSQU5MSUIpLCkKKysgICAgUkFOTElCICs9ICRACisrICBlbmRpZgorIGVuZGlmCisgCisgaWZuZXEgKCQoT1BTWVMpLFdpbmRvd3MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYzMDMyODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudC90Y2YtYWdlbnQuaW5pdApAQCAtMCwwICsxLDc1IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIHRjZi1hZ2VudAorIyBEZWZhdWx0LVN0YXJ0OiAgICAgMyA1CisjIERlZmF1bHQtU3RvcDogICAgICAwIDEgMiA2CisjIFNob3J0LURlc2NyaXB0aW9uOiBUYXJnZXQgQ29tbXVuaWNhdGlvbiBGcmFtZXdvcmsgYWdlbnQKKyMjIyBFTkQgSU5JVCBJTkZPCisKK0RBRU1PTl9QQVRIPS91c3Ivc2Jpbi90Y2YtYWdlbnQKK0RBRU1PTl9OQU1FPWBiYXNlbmFtZSAkREFFTU9OX1BBVEhgCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK3Rlc3QgLXggJERBRU1PTl9QQVRIIHx8IGV4aXQgMAorCitQQVRIPS9zYmluOi91c3Ivc2JpbjovYmluOi91c3IvYmluCitleHBvcnQgUEFUSAorCitSRVRWQUw9MAorCitjYXNlICIkMSIgaW4KKyAgICBzdGFydCkKKyAgICAgICAgZWNobyAtbiAiU3RhcnRpbmcgJERBRU1PTl9OQU1FOiAiCisgICAgICAgICREQUVNT05fUEFUSCAtZCAtTC0gLWwwCisgICAgICAgIFJFVFZBTD0kPworICAgICAgICBpZiBbICRSRVRWQUwgLWVxIDAgXSA7IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIk9LIgorICAgICAgICAgICAgdG91Y2ggL3Zhci9sb2NrL3N1YnN5cy8kREFFTU9OX05BTUUKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiRkFJTCIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgIHN0b3ApCisgICAgICAgIGVjaG8gLW4gIlN0b3BwaW5nICREQUVNT05fTkFNRTogIgorICAgICAgICBjb3VudD0wCisgICAgICAgIHdoaWxlIFsgLW4gImAvYmluL3BpZG9mICREQUVNT05fUEFUSGAiIC1hICRjb3VudCAtbHQgMTAgXSA7IGRvCisgICAgICAgICAgICBraWxscHJvYyAkREFFTU9OX1BBVEggPiYgL2Rldi9udWxsCisgICAgICAgICAgICBzbGVlcCAxCisgICAgICAgICAgICBSRVRWQUw9JD8KKyAgICAgICAgICAgIGlmIFsgJFJFVFZBTCAhPSAwIC1vIC1uICJgL2Jpbi9waWRvZiAkREFFTU9OX1BBVEhgIiBdIDsgdGhlbgorICAgICAgICAgICAgICAgIHNsZWVwIDMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjb3VudD1gZXhwciAkY291bnQgKyAxYAorICAgICAgICBkb25lCisgICAgICAgIHJtIC1mIC92YXIvbG9jay9zdWJzeXMvJERBRU1PTl9OQU1FCisgICAgICAgIGlmIFsgLW4gImAvYmluL3BpZG9mICREQUVNT05fUEFUSGAiIF0gOyB0aGVuCisgICAgICAgICAgICBlY2hvICJGQUlMIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICJPSyIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgIHJlc3RhcnQpCisgICAgICAgICQwIHN0b3AKKyAgICAgICAgc2xlZXAgMQorICAgICAgICAkMCBzdGFydAorICAgICAgICA7OworCisgICAgc3RhdHVzKQorICAgICAgICBzdGF0dXMgJERBRU1PTl9OQU1FCisgICAgICAgIFJFVFZBTD0kPworICAgICAgICA7OworCisgICAgY29uZHJlc3RhcnQpCisgICAgICAgIFsgLWYgL3Zhci9sb2NrL3N1YnN5cy8kREFFTU9OX05BTUUgXSAmJiAkMCByZXN0YXJ0CisgICAgICAgIDs7CisKKyAgICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCBzdGF0dXMgfCByZXN0YXJ0IHwgY29uZHJlc3RhcnQgfCBzdGF0dXMgfSIKKyAgICAgICAgOzsKK2VzYWMKKworZXhpdCAkUkVUVkFMCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjZi1hZ2VudC90Y2YtYWdlbnQvdGNmLWFnZW50LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5YTZjNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50L3RjZi1hZ2VudC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTAgQEAKK1tVbml0XQorRGVzY3JpcHRpb249VGFyZ2V0IENvbW11bmljYXRpb24gRnJhbWV3b3JrIGFnZW50CitBZnRlcj1uZXR3b3JrLnRhcmdldAorCitbU2VydmljZV0KK1R5cGU9Zm9ya2luZworRXhlY1N0YXJ0PUBTQklORElSQC90Y2YtYWdlbnQgLWQgLUwtIC1sMAorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNmLWFnZW50L3RjZi1hZ2VudF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmZDM5MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2YtYWdlbnQvdGNmLWFnZW50X2dpdC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIlRhcmdldCBDb21tdW5pY2F0aW9uIEZyYW1ld29yayBmb3IgdGhlIEVjbGlwc2UgSURFIgorSE9NRVBBR0UgPSAiaHR0cDovL3dpa2kuZWNsaXBzZS5vcmcvVENGIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy8iCisKK0xJQ0VOU0UgPSAiRVBMLTEuMCB8IEVETC0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9lZGwtdjEwLmh0bWw7bWQ1PTUyMmEzOTBhODNkYzE4NjUxM2YwNTAwNTQzYWQzNjc5IgorCitTUkNSRVYgPSAiYjlhNzM1ZTljN2NmODJmODBkNDEyYjdhYjE1ZDA4Yjg5ZDVhNGNjYyIKK1BWID0gIjEuMy4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5lY2xpcHNlLm9yZy9naXRyb290L3RjZi9vcmcuZWNsaXBzZS50Y2YuYWdlbnQuZ2l0O2JyYW5jaD0xLjNfbWFyc19idWdmaXggXAorICAgICAgICAgICBmaWxlOi8vZml4X3JhbmxpYi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2YtYWdlbnQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2YtYWdlbnQuc2VydmljZSBcCisgICAgICAgICAgIgorCitERVBFTkRTID0gInV0aWwtbGludXggb3BlbnNzbCIKK1JERVBFTkRTXyR7UE59ID0gImJhc2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQvYWdlbnQiCisKK2luaGVyaXQgdXBkYXRlLXJjLmQgc3lzdGVtZAorCitTWVNURU1EX1NFUlZJQ0VfJHtQTn0gPSAidGNmLWFnZW50LnNlcnZpY2UiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ0Y2YtYWdlbnQiCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSAzIDUgLiBzdG9wIDIwIDAgMSAyIDYgLiIKKworIyBtYW5nbGluZyBuZWVkZWQgZm9yIG1ha2UKK01BS0VfQVJDSCA9ICJgZWNobyAke1RBUkdFVF9BUkNIfSB8IHNlZCBzLGkuODYsaTY4NixgIgorTUFLRV9PUyA9ICJgZWNobyAke1RBUkdFVF9PU30gfCBzZWQgcyxebGludXguKixHTlUvTGludXgsYCIKKworRVhUUkFfT0VNQUtFID0gIk1BQ0hJTkU9JHtNQUtFX0FSQ0h9IE9QU1lTPSR7TUFLRV9PU30gJ0NDPSR7Q0N9JyAnQVI9JHtBUn0nIgorCisjIFRoZXkgZG9uJ3QgYnVpbGQgb24gQVJNIGFuZCB3ZSBkb24ndCBuZWVkIHRoZW0gYWN0dWFsbHkuCitDRkxBR1MgKz0gIi1EU0VSVklDRV9SdW5Db250cm9sPTAgLURTRVJWSUNFX0JyZWFrcG9pbnRzPTAgXAorICAgIC1EU0VSVklDRV9NZW1vcnk9MCAtRFNFUlZJQ0VfUmVnaXN0ZXJzPTAgLURTRVJWSUNFX01lbW9yeU1hcD0wIFwKKyAgICAtRFNFUlZJQ0VfU3RhY2tUcmFjZT0wIC1EU0VSVklDRV9TeW1ib2xzPTAgLURTRVJWSUNFX0xpbmVOdW1iZXJzPTAgXAorICAgIC1EU0VSVklDRV9FeHByZXNzaW9ucz0wIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBJTlNUQUxMUk9PVD0ke0R9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdGNmLWFnZW50LmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3RjZi1hZ2VudAorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90Y2YtYWdlbnQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS90Y2YtYWdlbnQuc2VydmljZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsL2FsdGVyLWluY2x1ZGVkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MzBlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvYWx0ZXItaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDc2IEBACitMZXRzIGluc3RhbGwgdGhlIGluY2x1ZGUgaGVhZGVyIGFuZCBwcml2YXRlIGhlYWRlciBmaWxlcyBpbnRvIAordXNyL2luY2x1ZGUvdGNsOC42IHdoZW4gdmVyc2lvbiBvZiB0Y2wgaXMgOC42LngKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDb25maWd1cmF0aW9uIFNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haS5jb20+CisKK0ZpeGVkIHRoZSBUQ0xfSU5DTFVERV9TUEVDCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gIHwgICAgMiArLQorIGNvbmZpZ3VyZSAgICB8ICAgIDQgKystLQorIGNvbmZpZ3VyZS5pbiB8ICAgIDQgKystLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggOTdiOTgzYi4uZGMyYTRkZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTUzLDcgKzUzLDcgQEAgRExMX0lOU1RBTExfRElSCQk9IEBETExfSU5TVEFMTF9ESVJACisgU0NSSVBUX0lOU1RBTExfRElSCT0gJChJTlNUQUxMX1JPT1QpJChUQ0xfTElCUkFSWSkKKyAKKyAjIERpcmVjdG9yeSBpbiB3aGljaCB0byBpbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGUgdGNsLmg6CistSU5DTFVERV9JTlNUQUxMX0RJUgk9ICQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikKKytJTkNMVURFX0lOU1RBTExfRElSCT0gJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKS90Y2wkKFZFUlNJT04pCisgCisgIyBQYXRoIHRvIHRoZSBwcml2YXRlIHRjbCBoZWFkZXIgZGlyOgorIFBSSVZBVEVfSU5DTFVERV9ESVIJPSBAUFJJVkFURV9JTkNMVURFX0RJUkAKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDNlNzhiNDkuLjI0YjNmOTIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTE5MTM0LDcgKzE5MTM0LDcgQEAgZXZhbCAiVENMX0xJQl9GSUxFPWxpYnRjbCR7TElCX1NVRkZJWH0iCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKyBUQ0xfTElCUkFSWT0nJChsaWJkaXIpL3RjbCQoVkVSU0lPTiknCistUFJJVkFURV9JTkNMVURFX0RJUj0nJChpbmNsdWRlZGlyKScKKytQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpL3RjbCQoVkVSU0lPTiknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKKyAjIE5vdGU6ICBpbiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlLCBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGFic29sdXRlCitAQCAtMTkyOTMsNyArMTkyOTMsNyBAQCBUQ0xfQlVJTERfU1RVQl9MSUJfUEFUSD0iYHB3ZGAvJHtUQ0xfU1RVQl9MSUJfRklMRX0iCisgVENMX1NUVUJfTElCX1BBVEg9IiR7VENMX1NUVUJfTElCX0RJUn0vJHtUQ0xfU1RVQl9MSUJfRklMRX0iCisgCisgIyBJbnN0YWxsIHRpbWUgaGVhZGVyIGRpciBjYW4gYmUgc2V0IHZpYSAtLWluY2x1ZGVkaXIKKy1ldmFsICJUQ0xfSU5DTFVERV9TUEVDPVwiLUkke2luY2x1ZGVkaXJ9XCIiCisrZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfS90Y2wke1ZFUlNJT059XCIiCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgdGNsQ29uZmlnLnNoIHJlZmVycyB0byB0aGlzIGJ5IGEgZGlmZmVyZW50IG5hbWUKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDBlMjhiMTQuLjYyZDliNDEgMTAwNzU1CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTc5MSw3ICs3OTEsNyBAQCBldmFsICJUQ0xfTElCX0ZJTEU9bGlidGNsJHtMSUJfU1VGRklYfSIKKyBldmFsICJUQ0xfTElCX0ZJTEU9JHtUQ0xfTElCX0ZJTEV9IgorIAorIFRDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKy1QUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworK1BSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpcikvdGNsJChWRVJTSU9OKScKKyBIVE1MX0RJUj0nJChESVNURElSKS9odG1sJworIAorICMgTm90ZTogIGluIHRoZSBmb2xsb3dpbmcgdmFyaWFibGUsIGl0J3MgaW1wb3J0YW50IHRvIHVzZSB0aGUgYWJzb2x1dGUKK0BAIC05MTIsNyArOTEyLDcgQEAgVENMX0JVSUxEX1NUVUJfTElCX1BBVEg9ImBwd2RgLyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIFRDTF9TVFVCX0xJQl9QQVRIPSIke1RDTF9TVFVCX0xJQl9ESVJ9LyR7VENMX1NUVUJfTElCX0ZJTEV9IgorIAorICMgSW5zdGFsbCB0aW1lIGhlYWRlciBkaXIgY2FuIGJlIHNldCB2aWEgLS1pbmNsdWRlZGlyCistZXZhbCAiVENMX0lOQ0xVREVfU1BFQz1cIi1JJHtpbmNsdWRlZGlyfVwiIgorK2V2YWwgIlRDTF9JTkNMVURFX1NQRUM9XCItSSR7aW5jbHVkZWRpcn0vdGNsJHtWRVJTSU9OfVwiIgorIAorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIHRjbENvbmZpZy5zaCByZWZlcnMgdG8gdGhpcyBieSBhIGRpZmZlcmVudCBuYW1lCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4LWNvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjkyYTBlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXgtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogdW5peC90Y2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y2w4LjQuMTEvdW5peC5vcmlnL3RjbC5tNAorKysrIHRjbDguNC4xMS91bml4L3RjbC5tNAorQEAgLTg0NSw3ICs4NDUsNyBAQCBBQ19ERUZVTihTQ19DT05GSUdfQ0ZMQUdTLCBbCisgCSAgICAjIHJlc3VsdHMsIGFuZCB0aGUgdmVyc2lvbiBpcyBrZXB0IGluIHNwZWNpYWwgZmlsZSkuCisgCQorIAkgICAgaWYgdGVzdCAtciAvZXRjLy5yZWxpZCAtYSAiWGB1bmFtZSAtbmAiID0gIlhgdW5hbWUgLXNgIiA7IHRoZW4KKy0JCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgJDN9JyAvZXRjLy5yZWxpZGAKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgorIAkJc3lzdGVtPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKK0BAIC0yMjUwLDcgKzIyNTAsNyBAQCBBQ19ERUZVTihTQ19CTE9DS0lOR19TVFlMRSwgWworIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCAkM30nIC9ldGMvLnJlbGlkJ2AKKysJCXN5c3RlbT1NUC1SQVMtYGF3ayAne3ByaW50ICQzfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y2w4LjQuMTEvdW5peC5vcmlnL2NvbmZpZ3VyZQorKysrIHRjbDguNC4xMS91bml4L2NvbmZpZ3VyZQorQEAgLTIxMzAsNyArMjEzMCw3IEBAIGVjaG8gImNvbmZpZ3VyZToyMTIxOiBjaGVja2luZyBzeXN0ZW0gdmUKKyAJICAgICMgcmVzdWx0cywgYW5kIHRoZSB2ZXJzaW9uIGlzIGtlcHQgaW4gc3BlY2lhbCBmaWxlKS4KKyAJCisgCSAgICBpZiB0ZXN0IC1yIC9ldGMvLnJlbGlkIC1hICJYYHVuYW1lIC1uYCIgPSAiWGB1bmFtZSAtc2AiIDsgdGhlbgorLQkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWQnYAorKwkJc3lzdGVtPU1QLVJBUy1gYXdrICd7cHJpbnQgfScgL2V0Yy8ucmVsaWRgCisgCSAgICBmaQorIAkgICAgaWYgdGVzdCAiYHVuYW1lIC1zYCIgPSAiQUlYIiA7IHRoZW4KKyAJCXN5c3RlbT1BSVgtYHVuYW1lIC12YC5gdW5hbWUgLXJgCitAQCAtNzYwOCw3ICs3NjA4LDcgQEAgZWNobyAiY29uZmlndXJlOjc2MDA6IGNoZWNraW5nIEZJT05CSU8gdgorIAkgICAgIyByZXN1bHRzLCBhbmQgdGhlIHZlcnNpb24gaXMga2VwdCBpbiBzcGVjaWFsIGZpbGUpLgorIAkKKyAJICAgIGlmIHRlc3QgLXIgL2V0Yy8ucmVsaWQgLWEgIlhgdW5hbWUgLW5gIiA9ICJYYHVuYW1lIC1zYCIgOyB0aGVuCistCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCB9JyAvZXRjLy5yZWxpZCdgCisrCQlzeXN0ZW09TVAtUkFTLWBhd2sgJ3twcmludCB9JyAvZXRjLy5yZWxpZGAKKyAJICAgIGZpCisgCSAgICBpZiB0ZXN0ICJgdW5hbWUgLXNgIiA9ICJBSVgiIDsgdGhlbgorIAkJc3lzdGVtPUFJWC1gdW5hbWUgLXZgLmB1bmFtZSAtcmAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI3MzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfaXNzdWVfd2l0aF9vbGRfZGlzdHJvX2dsaWJjLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0ZpeGVzIHRjbCB0YXJnZXQgcmVjaXBlIGJ1aWxkIG9uIG9sZCBkaXN0cm9zIHdoaWNoIGhhdmUgZ2xpYmMgb2xkZXIgdGhhbiAyLjE0CisKK3wgKyBlY2hvICdOT1RFOiBtYWtlICBERVNURElSPS9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZSBpbnN0YWxsJworfCBOT1RFOiBtYWtlICBERVNURElSPS9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZSBpbnN0YWxsCit8ICsgbWFrZSAgREVTVERJUj0vc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC93b3JrL3g4Nl82NC1wb2t5LWxpbnV4L3RjbC04LjUuMTEtcjUvaW1hZ2UgaW5zdGFsbAorfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3IvbGliCit8IEluc3RhbGxpbmcgbWVzc2FnZSBjYXRhbG9ncworfCBNYWtpbmcgZGlyZWN0b3J5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS9pbWFnZS91c3Ivc2hhcmUvbWFuCit8IHRjbHNoOiAvbGliNjQvbGliYy5zby42OiB2ZXJzaW9uIGBHTElCQ18yLjE0JyBub3QgZm91bmQgKHJlcXVpcmVkIGJ5IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3dvcmsveDg2XzY0LXBva3ktbGludXgvdGNsLTguNS4xMS1yNS90Y2w4LjUuMTEvdW5peC9saWJ0Y2w4LjUuc28pCit8IE1ha2luZyBkaXJlY3RvcnkgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay94ODZfNjQtcG9reS1saW51eC90Y2wtOC41LjExLXI1L2ltYWdlL3Vzci9iaW4KK3wgbWFrZTogKioqIFtpbnN0YWxsLW1zZ3NdIEVycm9yIDEKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDQvMjYKKworSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0xMS0xMCAyMzozODowMS43ODc0MjU2MjggLTA4MDAKKysrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzc6NTkuODA3NDI1NTc4IC0wODAwCitAQCAtNjg2LDcgKzY4Niw3IEBACisgIyB0Y2x0ZXN0IGV4ZWN1dGFibGUgZ2V0cyB0aGUgYnVpbGQgZGlyZWN0b3J5IGJ1cm5lZCBpbnRvIGl0cyBsZCBzZWFyY2ggcGF0aC4KKyAjIFRoaXMga2VlcHMgdGNsdGVzdCBmcm9tIHBpY2tpbmcgdXAgYW4gYWxyZWFkeSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgVGNsCisgIyBsaWJyYXJ5LgorLVNIRUxMX0VOViA9CUBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDoke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0gXAorK1NIRUxMX0VOViA9CUBMRF9MSUJSQVJZX1BBVEhfVkFSQD0ke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0gXAorIAkJVENMTElCUEFUSD0iQGFic19idWlsZGRpckAvcGtncyIgXAorIAkJVENMX0xJQlJBUlk9IiR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIKKyAKK0BAIC03MTIsNyArNzEyLDcgQEAKKyAJJChTSEVMTF9FTlYpICR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAkKFRFU1RGTEFHUykKKyAKKyBnZGItdGVzdDogJHtUQ0xURVNUX0VYRX0KKy0JQGVjaG8gInNldCBlbnYgQExEX0xJQlJBUllfUEFUSF9WQVJAPWBwd2RgOiQke0BMRF9MSUJSQVJZX1BBVEhfVkFSQH0iID4gZ2RiLnJ1bgorKwlAZWNobyAic2V0IGVudiBATERfTElCUkFSWV9QQVRIX1ZBUkA9JCR7QExEX0xJQlJBUllfUEFUSF9WQVJAfSIgPiBnZGIucnVuCisgCUBlY2hvICJzZXQgZW52IFRDTF9MSUJSQVJZPSR7VENMX0JVSUxEVElNRV9MSUJSQVJZfSIgPj4gZ2RiLnJ1bgorIAlAZWNobyAic2V0IGFyZ3MgJChUT1BfRElSKS90ZXN0cy9hbGwudGNsICQoVEVTVEZMQUdTKSAtc2luZ2xlcHJvYyAxIiA+PiBnZGIucnVuCisgCSQoR0RCKSAke1RDTFRFU1RfRVhFfSAtLWNvbW1hbmQ9Z2RiLnJ1bgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9maXhfbm9uX25hdGl2ZV9idWlsZF9pc3N1ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwZWI3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzc6MzQuMjQzNDI0OTM0IC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM3OjM0LjI0MzQyNDkzNCAtMDgwMAorQEAgLTcwOSwyMyArNzA5LDIzIEBACisgdGVzdDogdGVzdC10Y2wgdGVzdC1wYWNrYWdlcworIAorIHRlc3QtdGNsOiAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisrCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCisgCisgZ2RiLXRlc3Q6ICR7VENMVEVTVF9FWEV9CisgCUBlY2hvICJzZXQgZW52IEBMRF9MSUJSQVJZX1BBVEhfVkFSQD1gcHdkYDokJHtATERfTElCUkFSWV9QQVRIX1ZBUkB9IiA+IGdkYi5ydW4KKyAJQGVjaG8gInNldCBlbnYgVENMX0xJQlJBUlk9JHtUQ0xfQlVJTERUSU1FX0xJQlJBUll9IiA+PiBnZGIucnVuCisgCUBlY2hvICJzZXQgYXJncyAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpIC1zaW5nbGVwcm9jIDEiID4+IGdkYi5ydW4KKy0JJChHREIpIC4vJHtUQ0xURVNUX0VYRX0gLS1jb21tYW5kPWdkYi5ydW4KKysJJChHREIpICR7VENMVEVTVF9FWEV9IC0tY29tbWFuZD1nZGIucnVuCisgCXJtIGdkYi5ydW4KKyAKKyAjIFVzZWZ1bCB0YXJnZXQgdG8gbGF1bmNoIGEgYnVpbHQgdGNsdGVzdCB3aXRoIHRoZSBwcm9wZXIgcGF0aCwuLi4KKyBydW50ZXN0OiAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgLi8ke1RDTFRFU1RfRVhFfQorKwkkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0KKyAKKyAjIFVzZWZ1bCB0YXJnZXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3Qgc3VpdGUgd2l0aCBhbiB1bndyaXRhYmxlIGN1cnJlbnQKKyAjIGRpcmVjdG9yeS4uLgorIHJvLXRlc3Q6ICR7VENMVEVTVF9FWEV9CistCWVjaG8gJ2V4ZWMgY2htb2QgLXcgLjtwYWNrYWdlIHJlcXVpcmUgdGNsdGVzdDt0Y2x0ZXN0Ojp0ZW1wb3JhcnlEaXJlY3RvcnkgL3RtcDtzb3VyY2UgLi4vdGVzdHMvYWxsLnRjbDtleGVjIGNobW9kICt3IC4nIHwgJChTSEVMTF9FTlYpIC4vJHtUQ0xURVNUX0VYRX0KKysJZWNobyAnZXhlYyBjaG1vZCAtdyAuO3BhY2thZ2UgcmVxdWlyZSB0Y2x0ZXN0O3RjbHRlc3Q6OnRlbXBvcmFyeURpcmVjdG9yeSAvdG1wO3NvdXJjZSAuLi90ZXN0cy9hbGwudGNsO2V4ZWMgY2htb2QgK3cgLicgfCAkKFNIRUxMX0VOVikgJHtUQ0xURVNUX0VYRX0KKyAKKyAjIFRoZSBmb2xsb3dpbmcgdGFyZ2V0IGdlbmVyYXRlcyB0aGUgc2hhcmVkIGxpYnJhcmllcyBpbiBkbHRlc3QvIHRoYXQgYXJlIHVzZWQKKyAjIGZvciB0ZXN0aW5nOyB0aGV5IGFyZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSAidGNsdGVzdCIgdGFyZ2V0ICh2aWEgdGhlCitAQCAtNzQzLDIzICs3NDMsMjMgQEAKKyAjIFRoaXMgdGFyZ2V0IGNhbiBiZSB1c2VkIHRvIHJ1biB0Y2xzaCBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyAjIHZpYSBgbWFrZSBzaGVsbCBTQ1JJUFQ9L3RtcC9mb28udGNsYAorIHNoZWxsOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAuLyR7VENMX0VYRX0gJChTQ1JJUFQpCisrCSQoU0hFTExfRU5WKSAke1RDTF9FWEV9ICQoU0NSSVBUKQorIAorICMgVGhpcyB0YXJnZXQgY2FuIGJlIHVzZWQgdG8gcnVuIHRjbHNoIGluc2lkZSBlaXRoZXIgZ2RiIG9yIGluc2lnaHQKKyBnZGI6ICR7VENMX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoR0RCKSAuLyR7VENMX0VYRX0KKysJJChTSEVMTF9FTlYpICQoR0RCKSAke1RDTF9FWEV9CisgCisgdmFsZ3JpbmQ6ICR7VENMX0VYRX0gJHtUQ0xURVNUX0VYRX0KKy0JJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAuLyR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAtc2luZ2xlcHJvYyAxIC1jb25zdHJhaW50cyB2YWxncmluZCAkKFRFU1RGTEFHUykKKysJJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAtY29uc3RyYWludHMgdmFsZ3JpbmQgJChURVNURkxBR1MpCisgCisgdmFsZ3JpbmRzaGVsbDogJHtUQ0xfRVhFfQorLQkkKFNIRUxMX0VOVikgJChWQUxHUklORCkgJChWQUxHUklOREFSR1MpIC4vJHtUQ0xfRVhFfSAkKFNDUklQVCkKKysJJChTSEVMTF9FTlYpICQoVkFMR1JJTkQpICQoVkFMR1JJTkRBUkdTKSAke1RDTF9FWEV9ICQoU0NSSVBUKQorIAorIHRyYWNlLXNoZWxsOiAke1RDTF9FWEV9CistCSQoU0hFTExfRU5WKSAke1RSQUNFfSAkKFRSQUNFX09QVFMpIC4vJHtUQ0xfRVhFfSAkKFNDUklQVCkKKysJJChTSEVMTF9FTlYpICR7VFJBQ0V9ICQoVFJBQ0VfT1BUUykgJHtUQ0xfRVhFfSAkKFNDUklQVCkKKyAKKyB0cmFjZS10ZXN0OiAke1RDTFRFU1RfRVhFfQorLQkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAuLyR7VENMVEVTVF9FWEV9ICQoVE9QX0RJUikvdGVzdHMvYWxsLnRjbCAtc2luZ2xlcHJvYyAxICQoVEVTVEZMQUdTKQorKwkkKFNIRUxMX0VOVikgJHtUUkFDRX0gJChUUkFDRV9PUFRTKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgLXNpbmdsZXByb2MgMSAkKFRFU1RGTEFHUykKKyAKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEluc3RhbGxhdGlvbiBydWxlcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ub19wYWNrYWdlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2Y2M0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvbm9fcGFja2FnZXMucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAordGNsIDguNi4wIGJ1aWxkcyBieSBkZWZhdWx0IGEgbnVtYmVyIG9mIHBhY2thZ2VzIHRoYXQgYXJlIG5vdCBuZWVkZWQgaW4gWW9jdG8uCitUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIG1ha2VmaWxlIHNvIHRoYXQgdGhlc2UgcGFja2FnZXMgYXJlIG5vdCBidWlsdCBieSBkZWZhdWx0LgorCitVcHN0cmVhbS1TdGF0dXM6SW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IEJvZ2RhbiBNYXJpbmVzY3UgPGJvZ2Rhbi5hLm1hcmluZXNjdUBpbnRlbC5jb20+CisKK0luZGV4OiB1bml4L01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW5peC5vcmlnL01ha2VmaWxlLmluCTIwMTMtMTEtMTAgMjM6Mzg6MTIuMjM1NDI1ODkxIC0wODAwCisrKysgdW5peC9NYWtlZmlsZS5pbgkyMDEzLTExLTEwIDIzOjM4OjEyLjIzMTQyNTg5MSAtMDgwMAorQEAgLTYxMSw3ICs2MTEsNyBAQAorICMgU3RhcnQgb2YgcnVsZXMKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKy1hbGw6IGJpbmFyaWVzIGxpYnJhcmllcyBkb2MgcGFja2FnZXMKKythbGw6IGJpbmFyaWVzIGxpYnJhcmllcyBkb2MKKyAKKyBiaW5hcmllczogJHtMSUJfRklMRX0gJChTVFVCX0xJQl9GSUxFKSAke1RDTF9FWEV9CisgCitAQCAtNjUzLDEyICs2NTMsMTIgQEAKKyAjdGNsQ29uZmlnLmg6ICQoVU5JWF9ESVIpL3RjbENvbmZpZy5oLmluCisgIwkkKFNIRUxMKSBjb25maWcuc3RhdHVzCisgCistY2xlYW46IGNsZWFuLXBhY2thZ2VzCisrY2xlYW46CisgCXJtIC1mICouYSAqLm8gbGlidGNsKiBjb3JlIGVycnMgKn4gXCMqIFRBR1MgKi5FIGEub3V0IFwKKyAJCWVycm9ycyAke1RDTF9FWEV9ICR7VENMVEVTVF9FWEV9IGxpYi5leHAgVGNsIEBEVFJBQ0VfSERSQAorIAljZCBkbHRlc3QgOyAkKE1BS0UpIGNsZWFuCisgCistZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcGFja2FnZXMgY2xlYW4KKytkaXN0Y2xlYW46IGNsZWFuCisgCXJtIC1yZiBNYWtlZmlsZSBjb25maWcuc3RhdHVzIGNvbmZpZy5jYWNoZSBjb25maWcubG9nIHRjbENvbmZpZy5zaCBcCisgCQl0Y2xDb25maWcuaCAqLnBsaXN0IFRjbC5mcmFtZXdvcmsgdGNsLnBjCisgCWNkIGRsdGVzdCA7ICQoTUFLRSkgZGlzdGNsZWFuCitAQCAtNzA2LDcgKzcwNiw3IEBACisgIyB0Y2x0ZXN0LCBpZToKKyAjCSUgbWFrZSB0ZXN0IFRFU1RGTEFHUz0iLXZlcmJvc2UgYnBzIC1maWxlIGZpbGVOYW1lLnRlc3QiCisgCistdGVzdDogdGVzdC10Y2wgdGVzdC1wYWNrYWdlcworK3Rlc3Q6IHRlc3QtdGNsCisgCisgdGVzdC10Y2w6ICR7VENMVEVTVF9FWEV9CisgCSQoU0hFTExfRU5WKSAke1RDTFRFU1RfRVhFfSAkKFRPUF9ESVIpL3Rlc3RzL2FsbC50Y2wgJChURVNURkxBR1MpCitAQCAtNzcxLDcgKzc3MSw3IEBACisgSU5TVEFMTF9ERVZfVEFSR0VUUyA9IGluc3RhbGwtaGVhZGVycworIElOU1RBTExfRVhUUkFfVEFSR0VUUyA9IEBFWFRSQV9JTlNUQUxMQAorIElOU1RBTExfVEFSR0VUUyA9ICQoSU5TVEFMTF9CQVNFX1RBUkdFVFMpICQoSU5TVEFMTF9ET0NfVEFSR0VUUykgJChJTlNUQUxMX0RFVl9UQVJHRVRTKSBcCistCQkgICQoSU5TVEFMTF9QQUNLQUdFX1RBUkdFVFMpICQoSU5TVEFMTF9FWFRSQV9UQVJHRVRTKQorKwkJICAkKElOU1RBTExfRVhUUkFfVEFSR0VUUykKKyAKKyBpbnN0YWxsOiAkKElOU1RBTExfVEFSR0VUUykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkYmE2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKK2ZvciBpIGluIGBscyB0ZXN0cy8qLnRlc3QgfGF3ayAtRi8gJ3twcmludCAkMn0nYDsgXAorICAgIGRvIFRDTF9MSUJSQVJZPWxpYnJhcnkgLi90Y2x0ZXN0IHRlc3RzL2FsbC50Y2wgLWZpbGUgJGkgPiRpLnRtcCAyPiYxOyBcCisgICAgZ3JlcCAtcSAiXkZpbGVzIHdpdGggZmFpbGluZyB0ZXN0czoiICRpLnRtcDsgXAorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbiBlY2hvICJGQUlMOiAkaSI7IFwKKyAgICBlbHNlIGVjaG8gIlBBU1M6ICRpIjsgcm0gLWYgJGkudG1wOyBmaTsgXAorZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtYWRkLXNvbmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNzZlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLWFkZC1zb25hbWUucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB1bml4L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuaXgub3JpZy9jb25maWd1cmUJMjAxMy0wOS0xOSAxMzoxNzoxMy4wMDAwMDAwMDAgLTA3MDAKKysrKyB1bml4L2NvbmZpZ3VyZQkyMDEzLTExLTExIDAwOjIwOjUxLjUxOTQ5MDM0MiAtMDgwMAorQEAgLTc1OTksNiArNzU5OSw5IEBACisgCSAgICAjIGdldCByaWQgb2YgdGhlIHdhcm5pbmdzLgorIAkgICAgI0NGTEFHU19PUFRJTUlaRT0iJHtDRkxBR1NfT1BUSU1JWkV9IC1EX19OT19TVFJJTkdfSU5MSU5FUyAtRF9fTk9fTUFUSF9JTkxJTkVTIgorIAorKwkgICAgIyBmb2xsb3dpbmcgbGluZSBhZGRlZCBieSBDVyBmb3IgRGViaWFuIEdOVS9MaW51eAorKwkgICAgVENMX1NITElCX0xEX0VYVFJBUz0iLVdsLC1zb25hbWUsXCR7VENMX0xJQl9GSUxFfS4wIgorKworIAkgICAgU0hMSUJfTEQ9JyR7Q0N9IC1zaGFyZWQgJHtDRkxBR1N9ICR7TERGTEFHU30nCisgCSAgICBETF9PQkpTPSJ0Y2xMb2FkRGwubyIKKyAJICAgIERMX0xJQlM9Ii1sZGwiCitJbmRleDogdW5peC90Y2wubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvdGNsLm00CTIwMTMtMDktMTkgMTM6MTc6MTMuMDAwMDAwMDAwIC0wNzAwCisrKysgdW5peC90Y2wubTQJMjAxMy0xMS0xMSAwMDoxNzoyNC4yNjM0ODUxMjMgLTA4MDAKK0BAIC0xNDE1LDYgKzE0MTUsOSBAQAorIAkgICAgIyBnZXQgcmlkIG9mIHRoZSB3YXJuaW5ncy4KKyAJICAgICNDRkxBR1NfT1BUSU1JWkU9IiR7Q0ZMQUdTX09QVElNSVpFfSAtRF9fTk9fU1RSSU5HX0lOTElORVMgLURfX05PX01BVEhfSU5MSU5FUyIKKyAKKysJICAgICMgZm9sbG93aW5nIGxpbmUgYWRkZWQgYnkgQ1cgZm9yIERlYmlhbiBHTlUvTGludXgKKysJICAgIFRDTF9TSExJQl9MRF9FWFRSQVM9Ii1XbCwtc29uYW1lLFwke1RDTF9MSUJfRklMRX0uMCIKKysKKyAJICAgIFNITElCX0xEPScke0NDfSAtc2hhcmVkICR7Q0ZMQUdTfSAke0xERkxBR1N9JworIAkgICAgRExfT0JKUz0idGNsTG9hZERsLm8iCisgCSAgICBETF9MSUJTPSItbGRsIgorSW5kZXg6IHVuaXgvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMy0wOS0xOSAxMzoxNzoxMy4wMDAwMDAwMDAgLTA3MDAKKysrKyB1bml4L01ha2VmaWxlLmluCTIwMTMtMTEtMTEgMDA6MjA6MzIuNDIzNDg5ODYxIC0wODAwCitAQCAtNzk2LDcgKzc5NiwxMCBAQAorIAkgICAgZG9uZTsKKyAJQGVjaG8gIkluc3RhbGxpbmcgJChMSUJfRklMRSkgdG8gJChETExfSU5TVEFMTF9ESVIpLyIKKyAJQEBJTlNUQUxMX0xJQkAKKy0JQGNobW9kIDU1NSAiJChETExfSU5TVEFMTF9ESVIpLyQoTElCX0ZJTEUpIgorKwltdiAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKSAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKS4wCisrCWxuIC1zZiAkKExJQl9GSUxFKS4wICIkKERMTF9JTlNUQUxMX0RJUikiLyQoTElCX0ZJTEUpCisrCWxuIC1zZiAiJChETExfSU5TVEFMTF9ESVIpIi8kKExJQl9GSUxFKS4wIC4vCisrCUBjaG1vZCA1NTUgIiQoRExMX0lOU1RBTExfRElSKSIvJChMSUJfRklMRSkuMAorIAlAZWNobyAiSW5zdGFsbGluZyAke1RDTF9FWEV9IGFzICQoQklOX0lOU1RBTExfRElSKS90Y2xzaCQoVkVSU0lPTikke0VYRV9TVUZGSVh9IgorIAlAJChJTlNUQUxMX1BST0dSQU0pICR7VENMX0VYRX0gIiQoQklOX0lOU1RBTExfRElSKS90Y2xzaCQoVkVSU0lPTikke0VYRV9TVUZGSVh9IgorIAlAZWNobyAiSW5zdGFsbGluZyB0Y2xDb25maWcuc2ggdG8gJChDT05GSUdfSU5TVEFMTF9ESVIpLyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3RjbHRrL3RjbC90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZmN2M4MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2wvdGNsLXJlbW92ZS1oYXJkY29kZWQtaW5zdGFsbC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gNmVmYzk4Nzc0NjgxNzk1NzEyMDczYzJiOTFlNWU5ZDE3NjMyMzliOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJTb25nLkxpIiA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxIEF1ZyAyMDEyIDE5OjA1OjUxICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHRjbDppbnN0YWxsIHRjbCB0byBsaWI2NCBpbnN0ZWFkIG9mIGxpYiBvbiA2NGJpdCB0YXJnZXQKKworUmVtb3ZlIGhhcmRjb2RlZCBsaWJyYXJ5IGluc3RhbGwgcGF0aC4gQ2hhbmdlICQocHJlZml4KS9saWIvIHRvICR7bGliZGlyfS4KKworW1lPQ1RPICMyODc2XQorCitUaGlzIGlzIG5vdCBhIGJ1ZywgYnV0IGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkIGludG8gZGlyZWN0b3J5IC4uLi9saWIvLgorT24gNjRiaXQgdGFyZ2V0IHRoYXQgc2hvdWxkIGJlIGxpYjY0Ly4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nLkxpIDxTb25nLkxpQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgY29uZmlndXJlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogdW5peC9jb25maWd1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlCTIwMTMtMTEtMTAgMjM6Mzg6MzMuNjQzNDI2NDMwIC0wODAwCisrKysgdW5peC9jb25maWd1cmUJMjAxMy0xMS0xMCAyMzozOTo1MS4zNDc0MjgzODcgLTA4MDAKK0BAIC0xOTEzNCw3ICsxOTEzNCw3IEBACisgCisgZXZhbCAiVENMX0xJQl9GSUxFPSR7VENMX0xJQl9GSUxFfSIKKyAKKy1UQ0xfTElCUkFSWT0nJChwcmVmaXgpL2xpYi90Y2wkKFZFUlNJT04pJworK1RDTF9MSUJSQVJZPSckKGxpYmRpcikvdGNsJChWRVJTSU9OKScKKyBQUklWQVRFX0lOQ0xVREVfRElSPSckKGluY2x1ZGVkaXIpJworIEhUTUxfRElSPSckKERJU1RESVIpL2h0bWwnCisgCitJbmRleDogdW5peC9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB1bml4Lm9yaWcvY29uZmlndXJlLmluCTIwMTMtMTEtMTAgMjM6MjA6NTAuMDAwMDAwMDAwIC0wODAwCisrKysgdW5peC9jb25maWd1cmUuaW4JMjAxMy0xMS0xMCAyMzozOTo0MS4xOTk0MjgxMzEgLTA4MDAKK0BAIC03OTAsNyArNzkwLDcgQEAKKyAKKyBldmFsICJUQ0xfTElCX0ZJTEU9JHtUQ0xfTElCX0ZJTEV9IgorIAorLVRDTF9MSUJSQVJZPSckKHByZWZpeCkvbGliL3RjbCQoVkVSU0lPTiknCisrVENMX0xJQlJBUlk9JyQobGliZGlyKS90Y2wkKFZFUlNJT04pJworIFBSSVZBVEVfSU5DTFVERV9ESVI9JyQoaW5jbHVkZWRpciknCisgSFRNTF9ESVI9JyQoRElTVERJUikvaHRtbCcKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy90Y2x0ay90Y2xfOC42LjQuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOTJiM2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdGNsdGsvdGNsXzguNi40LmJiCkBAIC0wLDAgKzEsMTAyIEBACitTVU1NQVJZID0gIlRvb2wgQ29tbWFuZCBMYW5ndWFnZSIKK0hPTUVQQUdFID0gImh0dHA6Ly90Y2wuc291cmNlZm9yZ2UubmV0IgorU0VDVElPTiA9ICJkZXZlbC90Y2x0ayIKKworIyBodHRwOi8vd3d3LnRjbC50ay9zb2Z0d2FyZS90Y2x0ay9saWNlbnNlLmh0bWwKK0xJQ0VOU0UgPSAidGNsICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9jb21wYXQvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi9saWJyYXJ5L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vbWFjb3N4L2xpY2Vuc2UudGVybXM7bWQ1PTA1OGY2MjI5Nzk4MjgxYmJjYWM0MjM5Yzc4OGNmYTM4IFwKKyAgICBmaWxlOi8vLi4vdGVzdHMvbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorICAgIGZpbGU6Ly8uLi93aW4vbGljZW5zZS50ZXJtczttZDU9MDU4ZjYyMjk3OTgyODFiYmNhYzQyMzljNzg4Y2ZhMzggXAorIgorCitERVBFTkRTID0gInRjbC1uYXRpdmUgemxpYiIKKworQkFTRV9TUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS90Y2wvJHtCUE59JHtQVn0tc3JjLnRhci5neiBcCisgICAgICAgICAgICAgICAgZmlsZTovL3RjbC1hZGQtc29uYW1lLnBhdGNoIgorU1JDX1VSSSA9ICIke0JBU0VfU1JDX1VSSX0gXAorICAgICAgICAgICBmaWxlOi8vZml4X25vbl9uYXRpdmVfYnVpbGRfaXNzdWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2lzc3VlX3dpdGhfb2xkX2Rpc3Ryb19nbGliYy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ub19wYWNrYWdlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y2wtcmVtb3ZlLWhhcmRjb2RlZC1pbnN0YWxsLXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWx0ZXItaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorU1JDX1VSSVttZDVzdW1dID0gImQ3Y2JiOTFmMWRlZDE5MTkzNzBhMzBlZGQxNTM0MzA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllNmVkOTRjOTgxYzFkMGM1ZjVmZWZiODExMmQwNmM2YmY0ZDA1MGE3MzI3ZTk1ZTcxZDQxN2M0MTY1MTljOGQiCisKK1NSQ19VUklfY2xhc3MtbmF0aXZlID0gIiR7QkFTRV9TUkNfVVJJfSIKKworUyA9ICIke1dPUktESVJ9LyR7QlBOfSR7UFZ9L3VuaXgiCisKK1ZFUiA9ICIke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QgYmluY29uZmlnCisKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtdGhyZWFkcyAtLWRpc2FibGUtcnBhdGggLS1saWJkaXI9JHtsaWJkaXJ9IgorCitkb19jb25maWd1cmUoKSB7CisJY2QgJHtTfQorCWdudS1jb25maWdpemUKKwljZCAke0J9CisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJZWNobyA+ICR7U30vLi4vY29tcGF0L2ZpeHN0cnRvZC5jCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwgaW5zdGFsbC1wcml2YXRlLWhlYWRlcnMKKwlsbiAtc2YgLi90Y2xzaCR7VkVSfSAke0R9JHtiaW5kaXJ9L3RjbHNoCisJbG4gLXNmIHRjbHNoOC42ICR7RH0ke2JpbmRpcn0vdGNsc2gke1ZFUn0KKwlzZWQgLWkgInMrLUwke0J9Ky1MJHtTVEFHSU5HX0xJQkRJUn0rZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzKyR7V09SS0RJUn0rJHtTVEFHSU5HX0lOQ0RJUn0rZyIgdGNsQ29uZmlnLnNoCisJc2VkIC1pICJzLC1MJHtsaWJkaXJ9LC1MPSR7bGliZGlyfSxnIiB0Y2xDb25maWcuc2gKKwlzZWQgLWkgInMsLUkke2luY2x1ZGVkaXJ9LC1JPSR7aW5jbHVkZWRpcn0sZyIgdGNsQ29uZmlnLnNoCisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfQorCWluc3RhbGwgLW0gMDc1NSB0Y2xDb25maWcuc2ggJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KKwlpbnN0YWxsIC1tIDA3NTUgdGNsQ29uZmlnLnNoICR7RH0ke2xpYmRpcn0KKwljZCAuLgorCWZvciBkaXIgaW4gY29tcGF0IGdlbmVyaWMgdW5peDsgZG8KKwkJaW5zdGFsbCAtZCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpcgorCQlpbnN0YWxsIC1tIDA2NDQgJHtTfS8uLi8kZGlyLyouaCAke0R9JHtpbmNsdWRlZGlyfS8ke0JQTn0ke1ZFUn0vJGRpci8KKwlkb25lCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAidGNsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK3RjbF9zeXNyb290X3ByZXByb2Nlc3MgKCkgeworCXN5c3Jvb3Rfc3RhZ2VfZGlyICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9ICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30KK30KKworUEFDS0FHRVMgPSsgInRjbC1saWIiCitGSUxFU190Y2wtbGliID0gIiR7bGliZGlyfS9saWJ0Y2w4LjYuc28uKiIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdGNsJHtWRVJ9ICR7bGliZGlyfS90Y2w4LjYgJHtsaWJkaXJ9L3RjbDgiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS90Y2xDb25maWcuc2ggJHtsaWJkaXJ9L3RjbG9vQ29uZmlnLnNoIgorCisjIGlzbid0IGdldHRpbmcgcGlja2VkIHVwIGJ5IHNobGlicyBjb2RlCitSREVQRU5EU18ke1BOfSArPSAidGNsLWxpYiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibGliZ2NjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHRjbHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAke0J9L3RjbHRlc3QgJHtEfSR7UFRFU1RfUEFUSH0KKwljcCAtciAke1N9Ly4uL2xpYnJhcnkgJHtEfSR7UFRFU1RfUEFUSH0KKwljcCAtciAke1N9Ly4uL3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9Cit9CisKKyMgRml4IHNvbWUgcGF0aHMgdGhhdCBtaWdodCBiZSB1c2VkIGJ5IFRjbCBleHRlbnNpb25zCitCSU5DT05GSUdfR0xPQiA9ICIqQ29uZmlnLnNoIgorCisjIEZpeCB0aGUgcGF0aCBpbiBzc3RhdGUKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICIqQ29uZmlnLnNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvYWx0ZXJuYXRlX3JwY19wb3J0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc0NWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2FsdGVybmF0ZV9ycGNfcG9ydHMucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0FkZCBhYmlsaXR5IHRvIHNwZWNpZnkgcmNwIHBvcnQgbnVtYmVycworCitJbiBvcmRlciB0byBydW4gbW9yZSB0aGFuIG9uZSB1bmZzIHNlcnZlciBvbiBhIGhvc3Qgc3lzdGVtLCB5b3UgbXVzdAorYmUgYWJsZSB0byBzcGVjaWZ5IGFsdGVybmF0ZSBycGMgcG9ydCBudW1iZXJzLgorCitKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KKyBtb3VudC5jICB8ICAgIDQgKystLQorIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTc4LDYgKzc4LDggQEAgaW50IG9wdF90ZXN0Y29uZmlnID0gRkFMU0U7Cisgc3RydWN0IGluX2FkZHIgb3B0X2JpbmRfYWRkcjsKKyBpbnQgb3B0X3JlYWRhYmxlX2V4ZWN1dGFibGVzID0gRkFMU0U7CisgY2hhciAqb3B0X3BpZF9maWxlID0gTlVMTDsKKytpbnQgbmZzX3Byb2cgPSBORlMzX1BST0dSQU07CisraW50IG1vdW50X3Byb2cgPSBNT1VOVFBST0c7CisgCisgLyogUmVnaXN0ZXIgd2l0aCBwb3J0bWFwcGVyPyAqLworIGludCBvcHRfcG9ydG1hcHBlciA9IFRSVUU7CitAQCAtMjA2LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyB7CisgCisgICAgIGludCBvcHQgPSAwOworLSAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06bjpwcnN0VHV3aToiOworKyAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06bjpwcnN0VHV3aTp4Onk6IjsKKyAKKyAgICAgd2hpbGUgKG9wdCAhPSAtMSkgeworIAlvcHQgPSBnZXRvcHQoYXJnYywgYXJndiwgb3B0c3RyaW5nKTsKK0BAIC0yNjEsOCArMjYzLDI0IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyAJCXByaW50ZgorIAkJICAgICgiXHQtciAgICAgICAgICByZXBvcnQgdW5yZWFkYWJsZSBleGVjdXRhYmxlcyBhcyByZWFkYWJsZVxuIik7CisgCQlwcmludGYoIlx0LVQgICAgICAgICAgdGVzdCBleHBvcnRzIGZpbGUgYW5kIGV4aXRcbiIpOworKwkJcHJpbnRmKCJcdC14IDxwb3J0PiAgIGFsdGVybmF0ZSBORlMgUlBDIHBvcnRcbiIpOworKwkJcHJpbnRmKCJcdC15IDxwb3J0PiAgIGFsdGVybmF0ZSBNT1VOVEQgUlBDIHBvcnRcbiIpOworIAkJZXhpdCgwKTsKKyAJCWJyZWFrOworKwkgICAgY2FzZSAneCc6CisrCQluZnNfcHJvZyA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKysJCWlmIChuZnNfcHJvZyA9PSAwKSB7CisrCQkgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIE5GUyBSUEMgcG9ydFxuIik7CisrCQkgICAgZXhpdCgxKTsKKysJCX0KKysJCWJyZWFrOworKwkgICAgY2FzZSAneSc6CisrCQltb3VudF9wcm9nID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworKwkJaWYgKG1vdW50X3Byb2cgPT0gMCkgeworKwkJICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBNT1VOVEQgUlBDIHBvcnRcbiIpOworKwkJICAgIGV4aXQoMSk7CisrCQl9CisrCQlicmVhazsKKyAJICAgIGNhc2UgJ2wnOgorIAkJb3B0X2JpbmRfYWRkci5zX2FkZHIgPSBpbmV0X2FkZHIob3B0YXJnKTsKKyAJCWlmIChvcHRfYmluZF9hZGRyLnNfYWRkciA9PSAodW5zaWduZWQpIC0xKSB7CitAQCAtMzQ3LDEyICszNjUsMTIgQEAgdm9pZCBkYWVtb25fZXhpdChpbnQgZXJyb3IpCisgI2VuZGlmCQkJCSAgICAgICAvKiBXSU4zMiAqLworIAorICAgICBpZiAob3B0X3BvcnRtYXBwZXIpIHsKKy0Jc3ZjX3VucmVnaXN0ZXIoTU9VTlRQUk9HLCBNT1VOVFZFUlMxKTsKKy0Jc3ZjX3VucmVnaXN0ZXIoTU9VTlRQUk9HLCBNT1VOVFZFUlMzKTsKKysJc3ZjX3VucmVnaXN0ZXIobW91bnRfcHJvZywgTU9VTlRWRVJTMSk7CisrCXN2Y191bnJlZ2lzdGVyKG1vdW50X3Byb2csIE1PVU5UVkVSUzMpOworICAgICB9CisgCisgICAgIGlmIChvcHRfcG9ydG1hcHBlcikgeworLQlzdmNfdW5yZWdpc3RlcihORlMzX1BST0dSQU0sIE5GU19WMyk7CisrCXN2Y191bnJlZ2lzdGVyKG5mc19wcm9nLCBORlNfVjMpOworICAgICB9CisgCisgICAgIGlmIChlcnJvciA9PSBTSUdTRUdWKQorQEAgLTY1NywxMyArNjc1LDEzIEBAIHN0YXRpYyB2b2lkIG1vdW50cHJvZ18zKHN0cnVjdCBzdmNfcmVxICoKKyBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUICogdWRwdHJhbnNwLCBTVkNYUFJUICogdGNwdHJhbnNwKQorIHsKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXBtYXBfdW5zZXQoTkZTM19QUk9HUkFNLCBORlNfVjMpOworKwlwbWFwX3Vuc2V0KG5mc19wcm9nLCBORlNfVjMpOworICAgICB9CisgCisgICAgIGlmICh1ZHB0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBORlMgc2VydmljZSBmb3IgVURQICovCisgCWlmICghc3ZjX3JlZ2lzdGVyCistCSAgICAodWRwdHJhbnNwLCBORlMzX1BST0dSQU0sIE5GU19WMywgbmZzM19wcm9ncmFtXzMsCisrCSAgICAodWRwdHJhbnNwLCBuZnNfcHJvZywgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTkZTM19QUk9HUkFNLCBORlNfVjMsIHVkcCkuIik7CitAQCAtNjc0LDcgKzY5Miw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX25mc19zZXJ2aWNlKFNWQ1hQUlQKKyAgICAgaWYgKHRjcHRyYW5zcCAhPSBOVUxMKSB7CisgCS8qIFJlZ2lzdGVyIE5GUyBzZXJ2aWNlIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE5GUzNfUFJPR1JBTSwgTkZTX1YzLCBuZnMzX3Byb2dyYW1fMywKKysJICAgICh0Y3B0cmFuc3AsIG5mc19wcm9nLCBORlNfVjMsIG5mczNfcHJvZ3JhbV8zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19UQ1AgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChORlMzX1BST0dSQU0sIE5GU19WMywgdGNwKS4iKTsKK0BAIC02ODYsMTQgKzcwNCwxNCBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9uZnNfc2VydmljZShTVkNYUFJUCisgc3RhdGljIHZvaWQgcmVnaXN0ZXJfbW91bnRfc2VydmljZShTVkNYUFJUICogdWRwdHJhbnNwLCBTVkNYUFJUICogdGNwdHJhbnNwKQorIHsKKyAgICAgaWYgKG9wdF9wb3J0bWFwcGVyKSB7CistCXBtYXBfdW5zZXQoTU9VTlRQUk9HLCBNT1VOVFZFUlMxKTsKKy0JcG1hcF91bnNldChNT1VOVFBST0csIE1PVU5UVkVSUzMpOworKwlwbWFwX3Vuc2V0KG1vdW50X3Byb2csIE1PVU5UVkVSUzEpOworKwlwbWFwX3Vuc2V0KG1vdW50X3Byb2csIE1PVU5UVkVSUzMpOworICAgICB9CisgCisgICAgIGlmICh1ZHB0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBNT1VOVCBzZXJ2aWNlICh2MSkgZm9yIFVEUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHVkcHRyYW5zcCwgTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKysJICAgICh1ZHB0cmFuc3AsIG1vdW50X3Byb2csIE1PVU5UVkVSUzEsIG1vdW50cHJvZ18zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19VRFAgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChNT1VOVFBST0csIE1PVU5UVkVSUzEsIHVkcCkuIik7CitAQCAtNzAyLDcgKzcyMCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFAKKyAKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjMpIGZvciBVRFAgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh1ZHB0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisrCSAgICAodWRwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMzLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVURQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMzLCB1ZHApLiIpOworQEAgLTcxMyw3ICs3MzEsNyBAQCBzdGF0aWMgdm9pZCByZWdpc3Rlcl9tb3VudF9zZXJ2aWNlKFNWQ1hQCisgICAgIGlmICh0Y3B0cmFuc3AgIT0gTlVMTCkgeworIAkvKiBSZWdpc3RlciBNT1VOVCBzZXJ2aWNlICh2MSkgZm9yIFRDUCAqLworIAlpZiAoIXN2Y19yZWdpc3RlcgorLQkgICAgKHRjcHRyYW5zcCwgTU9VTlRQUk9HLCBNT1VOVFZFUlMxLCBtb3VudHByb2dfMywKKysJICAgICh0Y3B0cmFuc3AsIG1vdW50X3Byb2csIE1PVU5UVkVSUzEsIG1vdW50cHJvZ18zLAorIAkgICAgIG9wdF9wb3J0bWFwcGVyID8gSVBQUk9UT19UQ1AgOiAwKSkgeworIAkgICAgZnByaW50ZihzdGRlcnIsICIlc1xuIiwKKyAJCSAgICAidW5hYmxlIHRvIHJlZ2lzdGVyIChNT1VOVFBST0csIE1PVU5UVkVSUzEsIHRjcCkuIik7CitAQCAtNzIyLDcgKzc0MCw3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX21vdW50X3NlcnZpY2UoU1ZDWFAKKyAKKyAJLyogUmVnaXN0ZXIgTU9VTlQgc2VydmljZSAodjMpIGZvciBUQ1AgKi8KKyAJaWYgKCFzdmNfcmVnaXN0ZXIKKy0JICAgICh0Y3B0cmFuc3AsIE1PVU5UUFJPRywgTU9VTlRWRVJTMywgbW91bnRwcm9nXzMsCisrCSAgICAodGNwdHJhbnNwLCBtb3VudF9wcm9nLCBNT1VOVFZFUlMzLCBtb3VudHByb2dfMywKKyAJICAgICBvcHRfcG9ydG1hcHBlciA/IElQUFJPVE9fVENQIDogMCkpIHsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsCisgCQkgICAgInVuYWJsZSB0byByZWdpc3RlciAoTU9VTlRQUk9HLCBNT1VOVFZFUlMzLCB0Y3ApLiIpOworLS0tIGEvbW91bnQuYworKysrIGIvbW91bnQuYworQEAgLTE1NSw4ICsxNTUsOCBAQCBtb3VudHJlczMgKm1vdW50cHJvY19tbnRfM19zdmMoZGlycGF0aCAqCisgICAgIC8qIGVycm9yIG91dCBpZiBub3QgdmVyc2lvbiAzICovCisgICAgIGlmIChycXN0cC0+cnFfdmVycyAhPSAzKSB7CisgCWxvZ21zZyhMT0dfSU5GTywKKy0JICAgICAgICIlcyBhdHRlbXB0ZWQgbW91bnQgd2l0aCB1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uIiwKKy0JICAgICAgIGluZXRfbnRvYShnZXRfcmVtb3RlKHJxc3RwKSkpOworKwkgICAgICAgIiVzIGF0dGVtcHRlZCBtb3VudCB3aXRoIHVuc3VwcG9ydGVkIHByb3RvY29sIHZlcnNpb246ICVpIiwKKysJICAgICAgIGluZXRfbnRvYShnZXRfcmVtb3RlKHJxc3RwKSksIHJxc3RwLT5ycV92ZXJzKTsKKyAJcmVzdWx0LmZoc19zdGF0dXMgPSBNTlQzRVJSX0lOVkFMOworIAlyZXR1cm4gJnJlc3VsdDsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X2NvbXBpbGVfd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRhMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF9jb21waWxlX3dhcm5pbmcucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorZGFlbW9uLmM6IENoZWNrIGV4aXQgY29kZSBvZiBjaGRpcigpCisKK1N0b3AgdGhlIGNvbXBpbGUgd2FybmluZyBhbmQgZml4IHRoZSBjb2RlIHRvIGFjdCBvbiBhIGNoZGlyKCkgZmFpbHVyZS4KK0lmIHRoaXMgb25lIGRvZXMgZmFpbCBzb21ldGhpbmcgaXMgdmVyeSwgdmVyeSB3cm9uZy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgZGFlbW9uLmMgfCAgICAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworLS0tIGEvZGFlbW9uLmMKKysrKyBiL2RhZW1vbi5jCitAQCAtOTY0LDcgKzk2NCw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJc2lnYWN0aW9uKFNJR0FMUk0sICZhY3QsIE5VTEwpOworIAorIAkvKiBkb24ndCBtYWtlIGRpcmVjdG9yeSB3ZSBzdGFydGVkIGluIGJ1c3kgKi8KKy0JY2hkaXIoIi8iKTsKKysJaWYoY2hkaXIoIi8iKSA8IDApCisrCSAgICBkYWVtb25fZXhpdCgwKTsKKyAKKyAJLyogZGV0YWNoIGZyb20gdGVybWluYWwgKi8KKyAJaWYgKG9wdF9kZXRhY2gpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfcGlkX3JhY2VfcGFyZW50X3dyaXRlc19jaGlsZF9waWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjE4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvZml4X3BpZF9yYWNlX3BhcmVudF93cml0ZXNfY2hpbGRfcGlkLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2RhZW1vbi5jOiBGaXggcmFjZSB3aW5kb3cgZm9yIHdyaXRpbmcgb2YgdGhlIHBpZCBmaWxlCisKK1RoZSBwYXJlbnQgcHJvY2VzcyBzaG91bGQgd3JpdGUgdGhlIHBpZCBmaWxlIHN1Y2ggdGhhdCB0aGUgcGlkIGZpbGUKK3dpbGwgY2FuIGJlIGNoZWNrZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGV4aXQgb2YgdGhlIGZvcmsgZnJvbSB0aGUKK3BhcmVudC4KKworVGhpcyBhbGxvd3MgZXh0ZXJuYWwgbW9uaXRvcmluZyBhcHBsaWNhdGlvbnMgdG8gd2F0Y2ggdGhlIGRhZW1vbgord2l0aG91dCBoYXZpbmcgdG8gYWRkIHNsZWVwIGNhbGxzIHRvIHdhaXQgZm9yIHRoZSBwaWQgZmlsZSBiZSB3cml0dGVuCitvbiBhIGJ1c3kgc3lzdGVtLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBkYWVtb24uYyB8ICAgMTIgKysrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworLS0tIGEvZGFlbW9uLmMKKysrKyBiL2RhZW1vbi5jCitAQCAtMTUzLDcgKzE1Myw3IEBAIGludCBnZXRfc29ja2V0X3R5cGUoc3RydWN0IHN2Y19yZXEgKnJxc3QKKyAvKgorICAqIHdyaXRlIGN1cnJlbnQgcGlkIHRvIGEgZmlsZQorICAqLworLXN0YXRpYyB2b2lkIGNyZWF0ZV9waWRfZmlsZSh2b2lkKQorK3N0YXRpYyB2b2lkIGNyZWF0ZV9waWRfZmlsZShpbnQgcGlkKQorIHsKKyAgICAgY2hhciBidWZbMTZdOworICAgICBpbnQgZmQsIHJlcywgbGVuOworQEAgLTE3NSw3ICsxNzUsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfcGlkX2ZpbGUodm9pZCkKKyAgICAgfQorICNlbmRpZgorIAorLSAgICBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBiYWNrZW5kX2dldHBpZCgpKTsKKysgICAgc3ByaW50ZihidWYsICIlaVxuIiwgcGlkKTsKKyAgICAgbGVuID0gc3RybGVuKGJ1Zik7CisgCisgICAgIHJlcyA9IGJhY2tlbmRfcHdyaXRlKGZkLCBidWYsIGxlbiwgMCk7CitAQCAtOTcwLDYgKzk3MCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBmb3JrIGludG8gYmFja2dyb3VuZFxuIik7CisgCSAgICBkYWVtb25fZXhpdCgwKTsKKyAJfQorKwlpZiAocGlkKQorKwkgICAgY3JlYXRlX3BpZF9maWxlKHBpZCk7CisrICAgIH0gZWxzZSB7CisrCWNyZWF0ZV9waWRfZmlsZShiYWNrZW5kX2dldHBpZCgpKTsKKyAgICAgfQorICNlbmRpZgkJCQkgICAgICAgLyogV0lOMzIgKi8KKyAKK0BAIC0xMDA2LDggKzEwMTAsMTAgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkvKiBubyB1bWFzayB0byBub3Qgc2NyZXcgdXAgY3JlYXRlIG1vZGVzICovCisgCXVtYXNrKDApOworIAorKyNpZmRlZiBXSU4zMgorIAkvKiBjcmVhdGUgcGlkIGZpbGUgaWYgd2FudGVkICovCistCWNyZWF0ZV9waWRfZmlsZSgpOworKwljcmVhdGVfcGlkX2ZpbGUoYmFja2VuZF9nZXRwaWQoKSk7CisrI2VuZGlmCisgCisgCS8qIGluaXRpYWxpemUgaW50ZXJuYWwgc3R1ZmYgKi8KKyAJZmhfY2FjaGVfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL2ZpeF93YXJuaW5ncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhODY1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9maXhfd2FybmluZ3MucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorZXhwb3J0cy4qOiBmaXggd2FybmluZ3MuCisKK0ZpeCB0aGVzZSB3YXJuaW5nczoKK2xleC55eS5jOjEyMDc6IHdhcm5pbmc6ICd5eXVucHV0JyBkZWZpbmVkIGJ1dCBub3QgdXNlZAorbGV4Lnl5LmM6MTI0ODogd2FybmluZzogJ2lucHV0JyBkZWZpbmVkIGJ1dCBub3QgdXNlZAorZXhwb3J0cy55OiBJbiBmdW5jdGlvbiAnc2V0X2hvc3RuYW1lJzoKK2V4cG9ydHMueTozMzQ6IHdhcm5pbmc6IGxhcmdlIGludGVnZXIgaW1wbGljaXRseSB0cnVuY2F0ZWQgdG8gdW5zaWduZWQgdHlwZQorZXhwb3J0cy55OiBJbiBmdW5jdGlvbiAnc2V0X2lwYWRkcic6CitleHBvcnRzLnk6MzUwOiB3YXJuaW5nOiBsYXJnZSBpbnRlZ2VyIGltcGxpY2l0bHkgdHJ1bmNhdGVkIHRvIHVuc2lnbmVkIHR5cGUKKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgQ29uZmlnL2V4cG9ydHMubCB8ICAgIDMgKysrCisgQ29uZmlnL2V4cG9ydHMueSB8ICAgIDYgKysrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL0NvbmZpZy9leHBvcnRzLmwKKysrKyBiL0NvbmZpZy9leHBvcnRzLmwKK0BAIC00OCw2ICs0OCw5IEBAIE5FVENPTVAgWzAtOV17MSwyfQorIE5FVCB7SVB9Ii8ie05FVENPTVB9CisgT0xETkVUIHtJUH0iLyJ7SVB9CisgCisrJW9wdGlvbiBub3VucHV0CisrJW9wdGlvbiBub2lucHV0CisrCisgJSUKKyAKKyBee1dISVRFfSpcbgkJeyAvKiBlYXQgZW1wdHkgbGluZSAqLyB9CistLS0gYS9Db25maWcvZXhwb3J0cy55CisrKysgYi9Db25maWcvZXhwb3J0cy55CitAQCAtMzMxLDcgKzMzMSw4IEBAIHN0YXRpYyB2b2lkIHNldF9ob3N0bmFtZShjb25zdCBjaGFyICpuYW0KKyAJaWYgKGVudCkgeworIAkJbWVtY3B5KCZjdXJfaG9zdC5hZGRyLCBlbnQtPmhfYWRkcl9saXN0WzBdLAorIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworLQkJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+MFVMOworKwkJY3VyX2hvc3QubWFzay5zX2FkZHIgPSAwOworKwkJY3VyX2hvc3QubWFzay5zX2FkZHIgPSB+Y3VyX2hvc3QubWFzay5zX2FkZHI7CisgCX0gZWxzZSB7CisgCQlsb2dtc2coTE9HX0NSSVQsICJjb3VsZCBub3QgcmVzb2x2ZSBob3N0bmFtZSAnJXMnIiwgbmFtZSk7CisgCQllX2Vycm9yID0gVFJVRTsKK0BAIC0zNDcsNyArMzQ4LDggQEAgc3RhdGljIHZvaWQgc2V0X2lwYWRkcihjb25zdCBjaGFyICphZGRyKQorIAkKKyAJaWYgKCFpbmV0X2F0b24oYWRkciwgJmN1cl9ob3N0LmFkZHIpKQorIAkJZV9lcnJvciA9IFRSVUU7CistCWN1cl9ob3N0Lm1hc2suc19hZGRyID0gfjBVTDsKKysJY3VyX2hvc3QubWFzay5zX2FkZHIgPSAwOworKwljdXJfaG9zdC5tYXNrLnNfYWRkciA9IH5jdXJfaG9zdC5tYXNrLnNfYWRkcjsKKyB9CisgCisgLyoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbGF0aXZlX21heF9zb2NrZXRfcGF0aF9sZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5ZGQzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy9yZWxhdGl2ZV9tYXhfc29ja2V0X3BhdGhfbGVuLnBhdGNoCkBAIC0wLDAgKzEsNzQgQEAKK25mcy5jOiBBbGxvdyBtYXggc2Euc3VuX3BhdGggZm9yIGEgbG9jYWxkb21haW4gc29ja2V0IHdpdGggdGhlIHVzZXIgbmZzLXNlcnZlcgorCitUaGVyZSBpcyBhIGhhcmQgbGltaXQgZm9yIHRoZSBrZXJuZWwgb2YgMTA4IGNoYXJhY3RlcnMgZm9yIGEKK2xvY2FsZG9tYWluIHNvY2tldCBuYW1lLiAgVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgdXNlciBuZnMKK3NlcnZlciBpdCBzaG91bGQgbWF4aW1pemUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ5IHVzaW5nCithIHJlbGF0aXZlIHBhdGggb24gdGhlIHNlcnZlciBzaWRlLgorCitQcmV2aW91c2x5IHRoZSBuZnMtc2VydmVyIHVzZWQgdGhlIGFic29sdXRlIHBhdGggbmFtZSBwYXNzZWQgdG8KK3RoZSBzYS5zdW5wYXRoIGFyZyBmb3IgYmluZGluZyB0aGUgc29ja2V0IGFuZCB0aGlzIGhhcyBjYXVzZWQKK3Byb2JsZW1zIGZvciBib3RoIHRoZSBYIHNlcnZlciBhbmQgVVNUIGJpbmFyaWVzIHdoaWNoIG1ha2UKK2hlYXZ5IHVzZSBvZiBuYW1lZCBzb2NrZXRzIHdpdGggbG9uZyBuYW1lcy4KKworU2lnbmVkLW9mZi1ieTogSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgbmZzLmMgfCAgIDI5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKKy0tLSBhL25mcy5jCisrKysgYi9uZnMuYworQEAgLTY3Miw2ICs2NzIsNyBAQCBTWU1MSU5LM3JlcyAqbmZzcHJvYzNfc3ltbGlua18zX3N2YyhTWU1MCisgfQorIAorICNpZm5kZWYgV0lOMzIKKytzdGF0aWMgY2hhciBwYXRoYnVmX3RtcFtORlNfTUFYUEFUSExFTiArIE5GU19NQVhOQU1MRU4gKyAxXTsKKyAKKyAvKgorICAqIGNyZWF0ZSBVbml4IHNvY2tldAorQEAgLTY4MCwxNyArNjgxLDQxIEBAIHN0YXRpYyBpbnQgbWtzb2NrZXQoY29uc3QgY2hhciAqcGF0aCwgbW8KKyB7CisgICAgIGludCByZXMsIHNvY2s7CisgICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworKyAgICB1bnNpZ25lZCBpbnQgbGVuID0gc3RybGVuKHBhdGgpOworIAorICAgICBzb2NrID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKy0gICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKy0gICAgc3RyY3B5KGFkZHIuc3VuX3BhdGgsIHBhdGgpOworICAgICByZXMgPSBzb2NrOworICAgICBpZiAocmVzICE9IC0xKSB7CisrCWFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisrCWlmIChsZW4gPCBzaXplb2YoYWRkci5zdW5fcGF0aCkgLTEpIHsKKysJICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwYXRoKTsKKysJfSBlbHNlIHsKKysJICAgIGNoYXIgKnB0cjsKKysJICAgIHJlcyA9IC0xOworKwkgICAgaWYgKGxlbiA+PSBzaXplb2YocGF0aCkpCisrCQlnb3RvIG91dDsKKysJICAgIHN0cmNweShwYXRoYnVmX3RtcCwgcGF0aCk7CisrCSAgICBwdHIgPSBzdHJyY2hyKHBhdGhidWZfdG1wLCcvJyk7CisrCSAgICBpZiAocHRyKSB7CisrCQkqcHRyID0gJ1wwJzsKKysJCXB0cisrOworKwkJaWYgKGNoZGlyKHBhdGhidWZfdG1wKSkKKysJCSAgICBnb3RvIG91dDsKKysJICAgIH0gZWxzZSB7CisrCQlwdHIgPSBwYXRoYnVmX3RtcDsKKysJICAgIH0KKysJICAgIGlmIChzdHJsZW4ocHRyKSA+PSBzaXplb2YoYWRkci5zdW5fcGF0aCkpCisrCQlnb3RvIG91dDsKKysJICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBwdHIpOworKwl9CisgCXVtYXNrKH5tb2RlKTsKKyAJcmVzID0KKyAJICAgIGJpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwKKyAJCSBzaXplb2YoYWRkci5zdW5fZmFtaWx5KSArIHN0cmxlbihhZGRyLnN1bl9wYXRoKSk7CisgCXVtYXNrKDApOworK291dDoKKysJaWYgKGNoZGlyKCIvIikpCisrCSAgICBmcHJpbnRmKHN0ZGVyciwgIkludGVybmFsIGZhaWx1cmUgdG8gY2hkaXIgL1xuIik7CisgCWNsb3NlKHNvY2spOworICAgICB9CisgICAgIHJldHVybiByZXM7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvcmVuYW1lX2ZoX2NhY2hlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmQ4OTUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3JlbmFtZV9maF9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tOiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorRGF0ZTogU2F0LCAyMyBGZWIgMjAxMyAwODo0OTowOCAtMDYwMAorU3ViamVjdDogW1BBVENIXSBmaF9jYWNoZTogZml4IHN0YXRsZSBuZnMgaGFuZGxlIG9uIHJlbmFtZSBwcm9ibGVtCisKK1RoZSBmb2xsb3dpbmcgdGVzdCBjYXNlIGZhaWxzIHdpdGggbW9kZXJuIGxpbnVueCBrZXJuZWxzIHdoaWNoIGNhY2hlCit0aGUgcmVuYW1lZCBpbm9kZS4KKworICAlIG1rZGlyIGE7bWtkaXIgYjttdiBiIGEvO2xzIC1sIGEKKyAgbHM6IGEvYjogU3RhbGUgTkZTIGZpbGUgaGFuZGxlCisKK1RoZSBpc3N1ZSBpcyB0aGF0IG5mc2VydmVyIHdhcyBub3QgdXBkYXRpbmcgdGhlIGZoX2NhY2hlIHdpdGggdGhlIG5ldworbG9jYXRpb24gb2YgdGhlIGlub2RlLCB3aGVuIGl0IG1vdmVzIGRpcmVjdG9yaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvdW5mczMvYnVncy81LworCistLS0KKyBmaF9jYWNoZS5jIHwgICAxMiArKysrKysrKysrKysKKyBmaF9jYWNoZS5oIHwgICAgMSArCisgbmZzLmMgICAgICB8ICAgIDIgKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKKworLS0tIGEvZmhfY2FjaGUuYworKysrIGIvZmhfY2FjaGUuYworQEAgLTE5OSw2ICsxOTksMTggQEAgc3RhdGljIGNoYXIgKmZoX2NhY2hlX2xvb2t1cCh1aW50MzIgZGV2LAorIH0KKyAKKyAvKgorKyAqIHVwZGF0ZSBhIGZoIGlub2RlIGNhY2hlIGZvciBhbiBvcGVyYXRpb24gbGlrZSByZW5hbWUKKysgKi8KKyt2b2lkIGZoX2NhY2hlX3VwZGF0ZShuZnNfZmgzIGZoLCBjaGFyICpwYXRoKQorK3sKKysgICAgdW5mczNfZmhfdCAqb2JqID0gKHZvaWQgKikgZmguZGF0YS5kYXRhX3ZhbDsKKysgICAgYmFja2VuZF9zdGF0c3RydWN0IGJ1ZjsKKysKKysgICAgaWYgKGJhY2tlbmRfbHN0YXQocGF0aCwgJmJ1ZikgIT0gLTEpIHsKKysJZmhfY2FjaGVfYWRkKG9iai0+ZGV2LCBidWYuc3RfaW5vLCBwYXRoKTsKKysgICAgfQorK30KKysvKgorICAqIHJlc29sdmUgYSBmaWxlbmFtZSBpbnRvIGEgcGF0aAorICAqIGNhY2hlLXVzaW5nIHdyYXBwZXIgZm9yIGZoX2RlY29tcF9yYXcKKyAgKi8KKy0tLSBhL2ZoX2NhY2hlLmgKKysrKyBiL2ZoX2NhY2hlLmgKK0BAIC0xOSw1ICsxOSw2IEBAIHVuZnMzX2ZoX3QgZmhfY29tcChjb25zdCBjaGFyICpwYXRoLCBzdHIKKyB1bmZzM19maF90ICpmaF9jb21wX3B0cihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3ZjX3JlcSAqcnFzdHAsIGludCBuZWVkX2Rpcik7CisgCisgY2hhciAqZmhfY2FjaGVfYWRkKHVpbnQzMiBkZXYsIHVpbnQ2NCBpbm8sIGNvbnN0IGNoYXIgKnBhdGgpOworK3ZvaWQgZmhfY2FjaGVfdXBkYXRlKG5mc19maDMgZmgsIGNoYXIgKnBhdGgpOworIAorICNlbmRpZgorLS0tIGEvbmZzLmMKKysrKyBiL25mcy5jCitAQCAtODc2LDYgKzg3Niw4IEBAIFJFTkFNRTNyZXMgKm5mc3Byb2MzX3JlbmFtZV8zX3N2YyhSRU5BTUUKKyAJICAgIHJlcyA9IGJhY2tlbmRfcmVuYW1lKGZyb21fb2JqLCB0b19vYmopOworIAkgICAgaWYgKHJlcyA9PSAtMSkKKyAJCXJlc3VsdC5zdGF0dXMgPSByZW5hbWVfZXJyKCk7CisrCSAgICAvKiBVcGRhdGUgdGhlIGZoX2NhY2hlIHdpdGggbW92ZWQgaW5vZGUgdmFsdWUgKi8KKysJICAgIGZoX2NhY2hlX3VwZGF0ZShhcmdwLT50by5kaXIsIHRvX29iaik7CisgCX0KKyAgICAgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuZnMzL3VuZnMzL3RjcF9ub19kZWxheS5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1MjFjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy90Y3Bfbm9fZGVsYXkucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorZGFlbW9uLmM6IEFkZCBvcHRpb24gZm9yIHRjcCBubyBkZWxheQorCitBbGxvdyB0aGUgTkZTIHRjcCBzb2NrZXRzIHRvIGNvbmRpdGlvbmFsbHkgdXNlIFRDUF9OT0RFTEFZCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC91bmZzMy9idWdzLzUvCisKKy0tLQorIGRhZW1vbi5jIHwgICAgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL2RhZW1vbi5jCisrKysgYi9kYWVtb24uYworQEAgLTE3LDYgKzE3LDcgQEAKKyAjaWZuZGVmIFdJTjMyCisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyAjaW5jbHVkZSA8c3lzbG9nLmg+CisgI2Vsc2UJCQkJICAgICAgIC8qIFdJTjMyICovCitAQCAtNzUsNiArNzYsNyBAQCB1bnNpZ25lZCBpbnQgb3B0X21vdW50X3BvcnQgPSBORlNfUE9SVDsKKyBpbnQgb3B0X3NpbmdsZXVzZXIgPSBGQUxTRTsKKyBpbnQgb3B0X2JydXRlX2ZvcmNlID0gRkFMU0U7CisgaW50IG9wdF90ZXN0Y29uZmlnID0gRkFMU0U7CisraW50IG9wdF90Y3Bfbm9kZWxheSA9IEZBTFNFOworIHN0cnVjdCBpbl9hZGRyIG9wdF9iaW5kX2FkZHI7CisgaW50IG9wdF9yZWFkYWJsZV9leGVjdXRhYmxlcyA9IEZBTFNFOworIGNoYXIgKm9wdF9waWRfZmlsZSA9IE5VTEw7CitAQCAtMjA4LDcgKzIxMCw3IEBAIHN0YXRpYyB2b2lkIHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIKKyB7CisgCisgICAgIGludCBvcHQgPSAwOworLSAgICBjaGFyICpvcHRzdHJpbmcgPSAiYmNDOmRlOmhsOm06bjpwcnN0VHV3aTp4Onk6IjsKKysgICAgY2hhciAqb3B0c3RyaW5nID0gImJjQzpkZTpobDptOk5uOnByc3RUdXdpOng6eToiOworIAorICAgICB3aGlsZSAob3B0ICE9IC0xKSB7CisgCW9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCBvcHRzdHJpbmcpOworQEAgLTI5NSw2ICsyOTcsOSBAQCBzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjaGFyCisgCQkgICAgZXhpdCgxKTsKKyAJCX0KKyAJCWJyZWFrOworKwkgICAgY2FzZSAnTic6CisrCQlvcHRfdGNwX25vZGVsYXkgPSBUUlVFOworKwkJYnJlYWs7CisgCSAgICBjYXNlICduJzoKKyAJCW9wdF9uZnNfcG9ydCA9IHN0cnRvbChvcHRhcmcsIE5VTEwsIDEwKTsKKyAJCWlmIChvcHRfbmZzX3BvcnQgPT0gMCkgeworQEAgLTgwMiw2ICs4MDcsOCBAQCBzdGF0aWMgU1ZDWFBSVCAqY3JlYXRlX3RjcF90cmFuc3BvcnQodW5zCisgCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBvcHRfYmluZF9hZGRyLnNfYWRkcjsKKyAJc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAoY29uc3QgY2hhciAqKSAmb24sIHNpemVvZihvbikpOworKwlpZiAob3B0X3RjcF9ub2RlbGF5KQorKwkgICAgc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICZvbiwgc2l6ZW9mKG9uKSk7CisgCWlmIChiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKSB7CisgCSAgICBwZXJyb3IoImJpbmQiKTsKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgYmluZCB0byB0Y3AgcG9ydCAlZFxuIiwgcG9ydCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczMvdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY2NGRkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzMy91bmZzM19wYXJhbGxlbF9idWlsZC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGaXggcGFyYWxsZWwgYnVpbGQgZGVwZW5kZW5jeSBpc3N1ZQorCitJZiBidWlsZGluZyB3aXRoIG1ha2UgLWoyIHRoZSBsaWIuYSB3aWxsIG5vdCBnZXQgYnVpbHQgaW4gdGltZS4KKworSmFzb24gV2Vzc2VsIDxqYXNvbi53ZXNzZWxAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL3VuZnMzL2J1Z3MvNS8KKworLS0tCisgQ29uZmlnL01ha2VmaWxlLmluIHwgICAgMyArKysKKyBNYWtlZmlsZS5pbiAgICAgICAgfCAgICAzICsrLQorIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTI5LDcgKzI5LDggQEAgREVTVERJUiA9CisgCisgVlBBVEggPSAkKHNyY2RpcikKKyAKKy1hbGw6IHN1YmRpcnMgdW5mc2QkKEVYRUVYVCkKKythbGw6IHN1YmRpcnMKKysJJChNQUtFKSB1bmZzZCQoRVhFRVhUKQorIAorIHVuZnNkJChFWEVFWFQpOiAkKE9CSlMpICQoQ09ORk9CSikgJChFWFRSQU9CSikKKyAJJChDQykgLW8gJEAgJChPQkpTKSAkKENPTkZPQkopICQoRVhUUkFPQkopICQoTERGTEFHUykKKy0tLSBhL0NvbmZpZy9NYWtlZmlsZS5pbgorKysrIGIvQ29uZmlnL01ha2VmaWxlLmluCitAQCAtMTYsNiArMTYsOSBAQCBsaWIuYTogJChPQkpTKQorIAkkKEFSKSBjcnMgbGliLmEgJChPQkpTKQorIAorIHkudGFiLmggeS50YWIuYzogJChzcmNkaXIpL2V4cG9ydHMueQorK3kudGFiLmg6IHkudGFiLmMKKysKKyt5LnRhYi5jOiAkKHNyY2RpcikvZXhwb3J0cy55CisgCSQoWUFDQykgLWQgJChzcmNkaXIpL2V4cG9ydHMueQorIAorIHkudGFiLm86IHkudGFiLmMgJChzcmNkaXIpL2V4cG9ydHMuaCAkKHRvcF9zcmNkaXIpL25mcy5oICQodG9wX3NyY2RpcikvbW91bnQuaCAkKHRvcF9zcmNkaXIpL2RhZW1vbi5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdW5mczMvdW5mczNfMC45LjIyLnI0OTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZjU0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmZzMy91bmZzM18wLjkuMjIucjQ5MC5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBORlMgc2VydmVyIHYzIHByb3RvY29sIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gInVuZnMzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9OTQ3NTg4NTI5NGUxN2MwY2MwMDY3ODIwZDA0Mjc5MmUiCisKKyMgU1ZOIHN1cHBvcnQgZm9yIHVwc3RyZWFtIHZlcnNpb24gY2hlY2sgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0CitSRUNJUEVfVVBTVFJFQU1fVkVSU0lPTiA9ICIwLjkuMjIucjQ5NSIKK1JFQ0lQRV9VUFNUUkVBTV9EQVRFID0gIkZlYiAwNSwgMjAxNSIKK0NIRUNLX0RBVEUgPSAiSnVuIDEwLCAyMDE1IgorCitERVBFTkRTID0gImZsZXgtbmF0aXZlIGJpc29uLW5hdGl2ZSBmbGV4IgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlc2RrICs9ICJmbGV4LW5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjM2ODdhY2M0ZWU5OTJlNTM2NDcyMzY1ZGQ5OTcxMmE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3NGI0M2FkYTljNmVlYTFkYTI2ZWI3MDEwZDcyODg5YzUyNzg5ODRiYTBiNTBkZmY0ZTA5MzA1N2Q0ZDY0ZjgiCisKK01PRF9QViA9ICI0OTAiCitTID0gIiR7V09SS0RJUn0vdHJ1bmsiCitTUkNfVVJJID0gInN2bjovL3N2bi5jb2RlLnNmLm5ldC9wL3VuZnMzL2NvZGU7bW9kdWxlPXRydW5rO3Jldj0ke01PRF9QVn0gXAorICAgICAgICAgICBmaWxlOi8vdW5mczNfcGFyYWxsZWxfYnVpbGQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWx0ZXJuYXRlX3JwY19wb3J0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcGlkX3JhY2VfcGFyZW50X3dyaXRlc19jaGlsZF9waWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2NvbXBpbGVfd2FybmluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW5hbWVfZmhfY2FjaGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVsYXRpdmVfbWF4X3NvY2tldF9wYXRoX2xlbi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfd2FybmluZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdGNwX25vX2RlbGF5LnBhdGNoIFwKKyAgICAgICAgICAiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgVHVybiBvZmYgdGhlc2UgaGVhZGVyIGRldGVjdHMgZWxzZSB0aGUgaW5vZGUgc2VhcmNoCisjIHdpbGwgd2FsayBlbnRpcmUgZmlsZSBzeXN0ZW1zIGFuZCB0aGlzIGlzIGEgcmVhbCBwcm9ibGVtCisjIGlmIHlvdSBoYXZlIDIgVEIgb2YgZmlsZXMgdG8gd2FsayBpbiB5b3VyIGZpbGUgc3lzdGVtCitDQUNIRURfQ09ORklHVVJFVkFSUyA9ICJhY19jdl9oZWFkZXJfbW50ZW50X2g9bm8gYWNfY3ZfaGVhZGVyX3N5c19tbnR0YWJfaD1ubyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy91bmlmZGVmL3VuaWZkZWZfMi4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGEwMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3VuaWZkZWYvdW5pZmRlZl8yLjEwLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiU2VsZWN0aXZlbHkgcmVtb3ZlICNpZmRlZiBzdGF0ZW1lbnRzIGZyb20gc291cmNlcyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkJTRC0yLUNsYXVzZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdW5pZmRlZi5jO2VuZGxpbmU9MzI7bWQ1PTJjYzIzZjAzODJhNmY1NjBmNmE5ZWNmNGUwNDBjMGRhIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3RhdC5hdC9wcm9nLyR7QlBOfS8ke0JQfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYmI1ZDg5NWU1ZWJiYmE1YzVjYzBjMjc3MWNmOTdlYmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2I5YjJiNmIxOTUyZTliOWMxYjlmNzM0ZWRlYzI3MDY4OWEzNWJkYmYzM2FlNjZiNTBlMTliMmVkMGQyZGYwNiIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IHByZWZpeD0ke3ByZWZpeH0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGEuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMDU2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkMjLWxpa2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgZm9yIGVhc2luZyBHT2JqZWN0IHByb2dyYW1taW5nIgorREVTQ1JJUFRJT04gPSAiVmFsYSBpcyBhIEMjLWxpa2UgbGFuZ3VhZ2UgZGVkaWNhdGVkIHRvIGVhc2UgR09iamVjdCBwcm9ncmFtbWluZy4gXAorVmFsYSBjb21waWxlcyB0byBwbGFpbiBDIGFuZCBoYXMgbm8gcnVudGltZSBlbnZpcm9ubWVudCBub3IgcGVuYWxpdGllcyB3aGF0c29ldmVyLiIKK1NFQ1RJT04gPSAiZGV2ZWwiCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSBsaWJ4c2x0LW5hdGl2ZSBnbGliLTIuMCIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorSE9NRVBBR0UgPSAiaHR0cDovL3ZhbGEtcHJvamVjdC5vcmciCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQiCisKK1NIUlRfVkVSID0gIiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVswXX0uJHtAZC5nZXRWYXIoJ1BWJywxKS5zcGxpdCgnLicpWzFdfSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy8ke0JQTn0vJHtTSFJUX1ZFUn0vJHtCUH0udGFyLnh6IgoraW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9LyR7QlBOfS0ke1NIUlRfVkVSfS92YXBpICR7bGliZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L2RldmhlbHAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke0JQTn0tJHtTSFJUX1ZFUn0vLmRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzlkYzhjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGEvdmFsYS8wMDAxLWdpdC12ZXJzaW9uLWdlbi1kb24tdC1hcHBlbmQtZGlydHktaWYtd2UtcmUtbm90LWluLWcucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorRnJvbSAyNDYwZDdiNzlmN2U5MGRjZmVlYmRlNWU5YzUzZDliNjc5OGExZjNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVHVlLCAyMSBGZWIgMjAxMiAxNzoxMjo1MCArMDEwMAorU3ViamVjdDogW1BBVENIXSBnaXQtdmVyc2lvbi1nZW46IGRvbid0IGFwcGVuZCAtZGlydHkgaWYgd2UncmUgbm90IGluIGdpdAorIHJlcG8KKworKiBmb3IgZXhhbXBsZSBpZiB3ZSBoYXZlIHNvbWUgZGlydHkgZGlyZWN0b3J5IGFuZCB3ZSB1bnBhY2sgY2xlYW4gdmFsYSB0YXJiYWxsIGluIGl0LCB0aGVuIGl0IHdpbGwgYXBwZW5kIC1kaXJ0eQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UtU3BlY2lmaWNdCistLS0KKyBidWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuIHwgICAyNSArKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9naXQtdmVyc2lvbi1nZW4gYi9idWlsZC1hdXgvZ2l0LXZlcnNpb24tZ2VuCitpbmRleCAwZmE2ZmFhLi4xZDFmOWQyIDEwMDc1NQorLS0tIGEvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorKysrIGIvYnVpbGQtYXV4L2dpdC12ZXJzaW9uLWdlbgorQEAgLTEyNiwxOCArMTI2LDIxIEBAIGZpCisgCisgdj1gZWNobyAiJHYiIHxzZWQgJ3MvXnYvLydgCisgCistIyBEb24ndCBkZWNsYXJlIGEgdmVyc2lvbiAiZGlydHkiIG1lcmVseSBiZWNhdXNlIGEgdGltZSBzdGFtcCBoYXMgY2hhbmdlZC4KKy1naXQgc3RhdHVzID4gL2Rldi9udWxsIDI+JjEKKytpZiB0ZXN0IC1kIC5naXQKKyt0aGVuCisrCSMgRG9uJ3QgZGVjbGFyZSBhIHZlcnNpb24gImRpcnR5IiBtZXJlbHkgYmVjYXVzZSBhIHRpbWUgc3RhbXAgaGFzIGNoYW5nZWQuCisrCWdpdCBzdGF0dXMgPiAvZGV2L251bGwgMj4mMQorIAorLWRpcnR5PWBzaCAtYyAnZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCcgMj4vZGV2L251bGxgIHx8IGRpcnR5PQorLWNhc2UgIiRkaXJ0eSIgaW4KKy0gICAgJycpIDs7CistICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKy0JY2FzZSAkdiBpbgorLQkgICotZGlydHkpIDs7CistCSAgKikgdj0iJHYtZGlydHkiIDs7CistCWVzYWMgOzsKKy1lc2FjCisrCWRpcnR5PWBzaCAtYyAnZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCcgMj4vZGV2L251bGxgIHx8IGRpcnR5PQorKwljYXNlICIkZGlydHkiIGluCisrCSAgICAnJykgOzsKKysJICAgICopICMgQXBwZW5kIHRoZSBzdWZmaXggb25seSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeS4KKysJCWNhc2UgJHYgaW4KKysJCSAgKi1kaXJ0eSkgOzsKKysJCSAgKikgdj0iJHYtZGlydHkiIDs7CisrCQllc2FjIDs7CisrCWVzYWMKKytmaQorIAorICMgT21pdCB0aGUgdHJhaWxpbmcgbmV3bGluZSwgc28gdGhhdCBtNF9lc3lzY21kIGNhbiB1c2UgdGhlIHJlc3VsdCBkaXJlY3RseS4KKyBlY2hvICIkdiIgfCB0ciAtZCAnXDAxMicKKy0tIAorMS43LjguNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYiBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxhL3ZhbGFfMC4yOC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMDkwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsYS92YWxhXzAuMjguMC5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitTUkNfVVJJICs9ICIgZmlsZTovLzAwMDEtZ2l0LXZlcnNpb24tZ2VuLWRvbi10LWFwcGVuZC1kaXJ0eS1pZi13ZS1yZS1ub3QtaW4tZy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjhkNGNlYWMzNDUxYTBkNTQ5N2U3YmUzOGU1ZTRjMmFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkOWUzYmQzZjgyMTQ1NjY0ODc1ZjdjMjliMmY1NDRiYTkyZDI4MTRmNzU0MTI5NDhmNzc0YzA3MjdmYzk3N2YiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvMDAwMS12YWxncmluZC1FbmFibGUtcnRfc2lncGVuZGluZy1zeXNjYWxsLW9uLXBwYzY0LWxpbnV4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmJiNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kLzAwMDEtdmFsZ3JpbmQtRW5hYmxlLXJ0X3NpZ3BlbmRpbmctc3lzY2FsbC1vbi1wcGM2NC1saW51eC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDFhODAwNmY1NjM0MmRhZTlmNzEwMGEzYzMzZDgwODczNjc2ZTA0MDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDI0IEF1ZyAyMDE1IDAzOjU1OjE4IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIHZhbGdyaW5kOiBFbmFibGUgcnRfc2lncGVuZGluZyBzeXNjYWxsIG9uIHBwYzY0IGxpbnV4CisKK05ldyBSZXZpc2lvbjogMTUxMzMKK0VuYWJsZSBydF9zaWdwZW5kaW5nIHN5c2NhbGwgb24gcHBjNjQgbGludXguCitQYXRjaCBmcm9tIFRob21hcyBIdXRoIDx0aHV0aEByZWRoYXQuY29tPgorCitHZXQgdGhlIHBhdGNoIGZyb20gdmFsZ3JpbmQgdXBzdHJlYW06CitodHRwOi8vdmFsZ3JpbmQuMTA5MDgubjcubmFiYmxlLmNvbS9WYWxncmluZC1yMTUxMzMtaW4tdHJ1bmstTkVXUy1jb3JlZ3JpbmQtbS1zeXN3cmFwLXN5c3dyYXAtcHBjNjQtbGludXgtYy10ZDU0NTg5Lmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBiYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBMaSBaaG91IDxsaS56aG91QHdpbmRyaXZlci5jb20+CistLS0KKyBjb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvcmVncmluZC9tX3N5c3dyYXAvc3lzd3JhcC1wcGM2NC1saW51eC5jIGIvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKK2luZGV4IDU5NDZlZTEuLjhhYWExZDcgMTAwNjQ0CistLS0gYS9jb3JlZ3JpbmQvbV9zeXN3cmFwL3N5c3dyYXAtcHBjNjQtbGludXguYworKysrIGIvY29yZWdyaW5kL21fc3lzd3JhcC9zeXN3cmFwLXBwYzY0LWxpbnV4LmMKK0BAIC04ODcsNyArODg3LDcgQEAgc3RhdGljIFN5c2NhbGxUYWJsZUVudHJ5IHN5c2NhbGxfdGFibGVbXSA9IHsKKyAgICBMSU5YWShfX05SX3J0X3NpZ2FjdGlvbiwgICAgICBzeXNfcnRfc2lnYWN0aW9uKSwgICAgICAgLy8gMTczCisgICAgTElOWFkoX19OUl9ydF9zaWdwcm9jbWFzaywgICAgc3lzX3J0X3NpZ3Byb2NtYXNrKSwgICAgIC8vIDE3NAorIAorLS8vIF9fX19fKF9fTlJfcnRfc2lncGVuZGluZywgICAgIHN5c19ydF9zaWdwZW5kaW5nKSwgICAgICAvLyAxNzUKKysgICBMSU5YWShfX05SX3J0X3NpZ3BlbmRpbmcsICAgICBzeXNfcnRfc2lncGVuZGluZyksICAgICAgLy8gMTc1CisgICAgTElOWFkoX19OUl9ydF9zaWd0aW1lZHdhaXQsICAgc3lzX3J0X3NpZ3RpbWVkd2FpdCksICAgIC8vIDE3NgorICAgIExJTlhZKF9fTlJfcnRfc2lncXVldWVpbmZvLCAgIHN5c19ydF9zaWdxdWV1ZWluZm8pLCAgICAvLyAxNzcKKyAgICBMSU5YXyhfX05SX3J0X3NpZ3N1c3BlbmQsICAgICBzeXNfcnRfc2lnc3VzcGVuZCksICAgICAgLy8gMTc4CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Nzc0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvQWRkZWQtc3VwcG9ydC1mb3ItUFBDLWluc3RydWN0aW9ucy1tZmF0YnUtbWZhdGJsLnBhdGNoCkBAIC0wLDAgKzEsOTYgQEAKK0Zyb20gMGJmNGIwYWMxOGQxZWE0MWIzMmFkNzgxZDIxNGIyOTVjYTE5OThmMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IE1vbiwgMjEgTm92IDIwMTEgMTc6MzE6MzkgKzA1MzAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkZWQgc3VwcG9ydCBmb3IgUFBDIGluc3RydWN0aW9ucyBtZmF0YnUsIG1mYXRibC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFuZWVzaCBCYW5zYWwgPGFuZWVzaC5iYW5zYWxAZnJlZXNjYWxlLmNvbT4KKy0tLQorQ3VycmVudGx5IFZhbGdyaW5kIDMuNy4wIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgUFBDIGluc3RydWN0aW9ucyBtZmF0YnUgYW5kIG1mYXRibC4gV2hlbiB3ZSBydW4gYSBVU0RQQUEgYXBwbGljYXRpb24gd2l0aCBWQUxHUklORCwgdGhlIGZvbGxvd2luZyBlcnJvciBpcyBnaXZlbiBieSB2YWxncmluZCA6CitkaXNfcHJvY19jdGwocHBjKShtZnNwcixTUFIpKDB4MjBGKQorZGlzSW5zdHIocHBjKTogdW5oYW5kbGVkIGluc3RydWN0aW9uOiAweDdDMEY4MkE2CisKKworIFZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmggICAgfCAgICAyICsrCisgVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYyB8ICAgMTggKysrKysrKysrKysrKysrKysrCisgVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYyAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrKysrKworIDMgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL1ZFWC9wcml2L2d1ZXN0X3BwY19kZWZzLmggYi9WRVgvcHJpdi9ndWVzdF9wcGNfZGVmcy5oCitpbmRleCBkZDNjNjJlLi4xMWEzNGFhIDEwMDY0NAorLS0tIGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAorKysrIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2RlZnMuaAorQEAgLTE0Niw2ICsxNDYsOCBAQCBleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfMjY4XzI2OSAoIFVJbnQgKTsKKyAKKyBleHRlcm4gVUludCBwcGMzMmdfZGlydHloZWxwZXJfTUZTUFJfMjg3ICggdm9pZCApOworIAorK2V4dGVybiBVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3ICggVUludCApOworKworIGV4dGVybiB2b2lkIHBwYzMyZ19kaXJ0eWhlbHBlcl9MVlMgKCBWZXhHdWVzdFBQQzMyU3RhdGUqIGdzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUludCB2RF9pZHgsIFVJbnQgc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJbnQgc2hpZnRfcmlnaHQgKTsKK2RpZmYgLS1naXQgYS9WRVgvcHJpdi9ndWVzdF9wcGNfaGVscGVycy5jIGIvVkVYL3ByaXYvZ3Vlc3RfcHBjX2hlbHBlcnMuYworaW5kZXggMTFhYTQyOC4uYjQ5ZWEzZiAxMDA2NDQKKy0tLSBhL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKKysrKyBiL1ZFWC9wcml2L2d1ZXN0X3BwY19oZWxwZXJzLmMKK0BAIC0xMTksNiArMTE5LDI0IEBAIFVJbnQgcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzI4NyAoIHZvaWQgKQorICMgIGVuZGlmCisgfQorIAorKy8qIENBTExFRCBGUk9NIEdFTkVSQVRFRCBDT0RFICovCisrLyogRElSVFkgSEVMUEVSIChub24tcmVmZXJlbnRpYWxseSB0cmFuc3BhcmVudCkgKi8KKytVSW50IHBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3ICggVUludCByNTI3ICkKKyt7CisrIyAgaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfQUlYKQorKyAgIFVJbnQgc3ByOworKyAgIGlmIChyNTI3KSB7CisrICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1mc3ByICUwLDUyNyIgOiAiPWIiKHNwcikpOworKyAgIH0gZWxzZSB7CisrICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIm1mc3ByICUwLDUyNiIgOiAiPWIiKHNwcikpOworKyAgIH0KKysgICByZXR1cm4gc3ByOworKyMgIGVsc2UKKysgICByZXR1cm4gMDsKKysjICBlbmRpZgorK30KKysKKysKKyAKKyAvKiBDQUxMRUQgRlJPTSBHRU5FUkFURUQgQ09ERSAqLworIC8qIERJUlRZIEhFTFBFUiAocmVhZHMgZ3Vlc3Qgc3RhdGUsIHdyaXRlcyBndWVzdCBtZW0pICovCitkaWZmIC0tZ2l0IGEvVkVYL3ByaXYvZ3Vlc3RfcHBjX3RvSVIuYyBiL1ZFWC9wcml2L2d1ZXN0X3BwY190b0lSLmMKK2luZGV4IGY4ZDIyMGQuLjM3Yzg5NzQgMTAwNjQ0CistLS0gYS9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCisrKysgYi9WRVgvcHJpdi9ndWVzdF9wcGNfdG9JUi5jCitAQCAtNTY1Nyw2ICs1NjU3LDI4IEBAIHN0YXRpYyBCb29sIGRpc19wcm9jX2N0bCAoIFZleEFiaUluZm8qIHZiaSwgVUludCB0aGVJbnN0ciApCisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorIAorKworKyAgICAgIGNhc2UgNTI2IC8qIDB4MjBFICovOgorKyAgICAgIGNhc2UgNTI3IC8qIDB4MjBGICovOiB7CisrICAgICAgICAgVUludCAgICAgYXJnICA9IFNQUj09NTI2ID8gMCA6IDE7CisrICAgICAgICAgSVJUZW1wICAgdmFsICA9IG5ld1RlbXAoSXR5X0kzMik7CisrICAgICAgICAgSVJFeHByKiogYXJncyA9IG1rSVJFeHByVmVjXzEoIG1rVTMyKGFyZykgKTsKKysgICAgICAgICBJUkRpcnR5KiBkICAgID0gdW5zYWZlSVJEaXJ0eV8xX04oCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC8qcmVncGFybXMqLywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBwYzMyZ19kaXJ0eWhlbHBlcl9NRlNQUl81MjZfNTI3IiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5wdHJfdG9fZm5lbnRyeQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmJpLCAmcHBjMzJnX2RpcnR5aGVscGVyX01GU1BSXzUyNl81MjcpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzCisrICAgICAgICAgICAgICAgICAgICAgICAgICk7CisrICAgICAgICAgLyogZXhlY3V0ZSB0aGUgZGlydHkgY2FsbCwgZHVtcGluZyB0aGUgcmVzdWx0IGluIHZhbC4gKi8KKysgICAgICAgICBzdG10KCBJUlN0bXRfRGlydHkoZCkgKTsKKysgICAgICAgICBwdXRJUmVnKCByRF9hZGRyLAorKyAgICAgICAgICAgICAgICAgIG1rV2lkZW5Gcm9tMzIodHksIG1rZXhwcih2YWwpLCBGYWxzZS8qdW5zaWduZWQqLykgKTsKKysgICAgICAgICBESVAoIm1mc3ByIHIldSwldSIsIHJEX2FkZHIsIChVSW50KVNQUik7CisrICAgICAgICAgYnJlYWs7CisrICAgICAgfQorKworICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgdmV4X3ByaW50ZigiZGlzX3Byb2NfY3RsKHBwYykobWZzcHIsU1BSKSgweCV4KVxuIiwgU1BSKTsKKyAgICAgICAgICByZXR1cm4gRmFsc2U7CistLSAKKzEuNy4wLjQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9hZGQtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWY4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvYWRkLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMjQzIEBACitNb2RpZnkgdmdfdGVzdCB3cmFwcGVyIHRvIHN1cHBvcnQgUFRFU1QgZm9ybWF0cworCitDaGFuZ2UgdGhlIHZhbGdyaW5kIHJlZ3Jlc3Npb24gdGVzdCBzY3JpcHQgdmdfcmVndGVzdCB0bworc3VwcG9ydCB0aGUgeW9jdG8gcHRlc3Qgc3Rkb3V0IHJlcG9ydGluZyBmb3JtYXQuICBUaGUgY29tbWl0IGFkZHMKKyctLXlvY3RvLXB0ZXN0JyBhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0byB2Z19yZWd0ZXN0LCB3aGljaCBhbHRlcnMKK3RoZSBvdXRwdXQgdG8gdXNlIHRoZSBwdGVzdCBpbmZyYXN0cnVjdHVyZSByZXBvcnRpbmcgZm9ybWF0OgorICAgICJbUEFTU3xTS0lQfEZBSUxdOiB0ZXN0bmFtZSIKK2luc3RlYWQgb2YgdmFsZ3JpbmQncyBpbnRlcm5hbCB0ZXN0IHJlcG9ydGluZyBmb3JtYXQuICBXaXRob3V0IHRoZSBhZGRlZAorb3B0aW9uLCAtLXlvY3RvLXB0ZXN0LCB0aGUgdmFsZ3JpbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpcyB1bmNoYW5nZWQuCisKK0VuZm9yY2UgMzAgc2Vjb25kcyBsaW1pdCBmb3IgdGhlIHRlc3QuCitUaGlzIHJlc3VtZSBleGVjdXRpb24gb2YgdGhlIHJlbWFpbmluZyB0ZXN0cyB3aGVuIHZhbGdyaW5kIGhhbmdzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGF2ZSBMZXJuZXIgPGRhdmUubGVybmVyQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBUdWRvciBGbG9yZWEgPHR1ZG9yLmZsb3JlYUBlbmVhLmNvbT4KKworZGlmZiAtLWdpdCBhL3Rlc3RzL3ZnX3JlZ3Rlc3QuaW4gYi90ZXN0cy92Z19yZWd0ZXN0LmluCitpbmRleCAyMjQzODVmLi4zZTAzODNiIDEwMDc1NQorLS0tIGEvdGVzdHMvdmdfcmVndGVzdC5pbgorKysrIGIvdGVzdHMvdmdfcmVndGVzdC5pbgorQEAgLTM5LDExICszOSwxMSBAQAorICMgICAgICAgICAgICAgICAtLXZhbGdyaW5kLikKKyAjICAgLS1rZWVwLXVuZmlsdGVyZWQ6IGtlZXAgYSBjb3B5IG9mIHRoZSB1bmZpbHRlcmVkIG91dHB1dC9lcnJvciBvdXRwdXQKKyAjICAgICBvZiBlYWNoIHRlc3QgYnkgYWRkaW5nIGFuIGV4dGVuc2lvbiAudW5maWx0ZXJlZC5vdXQKKy0jCisgIyAgIC0tb3V0ZXItdmFsZ3JpbmQ6IHJ1biB0aGlzIHZhbGdyaW5kIHVuZGVyIHRoZSBnaXZlbiBvdXRlciB2YWxncmluZC4KKyAjICAgICBUaGlzIHZhbGdyaW5kIG11c3QgYmUgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLWlubmVyLgorICMgICAtLW91dGVyLXRvb2w6IHRvb2wgdG8gdXNlIGJ5IHRoZSBvdXRlciB2YWxncmluZCAoZGVmYXVsdCBtZW1jaGVjaykuCisgIyAgIC0tb3V0ZXItYXJnczogdXNlIHRoaXMgYXMgb3V0ZXIgdG9vbCBhcmdzLgorKyMgICAtLXlvY3RvLXB0ZXN0OiBvdXRwdXQgaW4geW9jdG8gcHRlc3QgZm9ybWF0CisgIworICMgVGhlIGVhc2llc3Qgd2F5IGlzIHRvIHJ1biBhbGwgdGVzdHMgaW4gdmFsZ3JpbmQvIHdpdGggKGFzc3VtaW5nIHlvdSBpbnN0YWxsZWQKKyAjIGluICRQUkVGSVgpOgorQEAgLTEyNiw3ICsxMjYsNyBAQCB1c2Ugc3RyaWN0OworIG15ICR1c2FnZT0iXG4iCisgICAgICAuICJVc2FnZTpcbiIKKyAgICAgIC4gIiAgIHZnX3JlZ3Rlc3QgWy0tYWxsLCAtLXZhbGdyaW5kLCAtLXZhbGdyaW5kLWxpYiwgLS1rZWVwLXVuZmlsdGVyZWRcbiIKKy0gICAgIC4gIiAgICAgICAgICAgICAgICAgLS1vdXRlci12YWxncmluZCwgLS1vdXRlci10b29sLCAtLW91dGVyLWFyZ3NdXG4iCisrICAgICAuICIgICAgICAgICAgICAgICAgIC0tb3V0ZXItdmFsZ3JpbmQsIC0tb3V0ZXItdG9vbCwgLS1vdXRlci1hcmdzLCAtLXlvY3RvLXB0ZXN0XVxuIgorICAgICAgLiAiICAgVXNlIEVYVFJBX1JFR1RFU1RfT1BUUyB0byBzdXBwbHkgZXh0cmEgYXJncyBmb3IgYWxsIHRlc3RzXG4iCisgICAgICAuICJcbiI7CisgCitAQCAtMTcwLDYgKzE3MCw3IEBAIG15ICRvdXRlcl9hcmdzOworIAorIG15ICR2YWxncmluZF9saWIgPSAiJHRlc3RzX2Rpci8uaW5fcGxhY2UiOworIG15ICRrZWVwdW5maWx0ZXJlZCA9IDA7CisrbXkgJHlvY3RvcHRlc3QgPSAwOworIAorICMgZGVmYXVsdCBmaWx0ZXIgaXMgdGhlIG9uZSBuYW1lZCAiZmlsdGVyX3N0ZGVyciIgaW4gdGhlIHRlc3QncyBkaXJlY3RvcnkKKyBteSAkZGVmYXVsdF9zdGRlcnJfZmlsdGVyID0gImZpbHRlcl9zdGRlcnIiOworQEAgLTIyNiw2ICsyMjcsOCBAQCBzdWIgcHJvY2Vzc19jb21tYW5kX2xpbmUoKQorICAgICAgICAgICAgICAgICAkdmFsZ3JpbmRfbGliID0gJDE7CisgICAgICAgICAgICAgfSBlbHNpZiAoJGFyZyA9fiAvXi0ta2VlcC11bmZpbHRlcmVkJC8pIHsKKyAgICAgICAgICAgICAgICAgJGtlZXB1bmZpbHRlcmVkID0gMTsKKysgICAgICAgICAgICB9IGVsc2lmICgkYXJnID1+IC9eLS15b2N0by1wdGVzdCQvKSB7CisrICAgICAgICAgICAgICAgICR5b2N0b3B0ZXN0ID0gMTsKKyAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICBkaWUgJHVzYWdlOworICAgICAgICAgICAgIH0KK0BAIC0zNDAsMTMgKzM0MywyOCBAQCBzdWIgcmVhZF92Z3Rlc3RfZmlsZSgkKQorICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIyBTaW5jZSBtb3N0IG9mIHRoZSBwcm9ncmFtIHRpbWUgaXMgc3BlbnQgaW4gc3lzdGVtKCkgY2FsbHMsIG5lZWQgdGhpcyB0bworICMgcHJvcGFnYXRlIGEgQ3RybC1DIGVuYWJsaW5nIHVzIHRvIHF1aXQuCistc3ViIG15c3lzdGVtKCQpIAorKyMgRW5mb3JjZSAzMCBzZWNvbmRzIGxpbWl0IGZvciB0aGUgdGVzdC4KKysjIFRoaXMgcmVzdW1lIGV4ZWN1dGlvbiBvZiB0aGUgcmVtYWluaW5nIHRlc3RzIGlmIHZhbGdyaW5kIGhhbmdzLgorK3N1YiBteXN5c3RlbSgkKQorIHsKKy0gICAgbXkgJGV4aXRfY29kZSA9IHN5c3RlbSgkX1swXSk7CistICAgICgkZXhpdF9jb2RlID09IDIpIGFuZCBleGl0IDE7ICAgICAgIyAyIGlzIFNJR0lOVAorLSAgICByZXR1cm4gJGV4aXRfY29kZTsKKysgICAgbXkgJGV4aXRfY29kZT0wOworKyAgICBldmFsIHsKKysgICAgICAgIGxvY2FsICRTSUd7J0FMUk0nfSA9IHN1YiB7IGRpZSAidGltZWQgb3V0XG4iIH07CisrICAgICAgICBhbGFybSgzMCk7CisrICAgICAgICAkZXhpdF9jb2RlID0gc3lzdGVtKCRfWzBdKTsKKysgICAgICAgIGFsYXJtICgwKTsKKysgICAgICAgICgkZXhpdF9jb2RlID09IDIpIGFuZCBkaWUgIlNJR0lOVFxuIjsgICAjIDIgaXMgU0lHSU5UCisrICAgIH07CisrICAgIGlmICgkQCkgeworKyAgICAgICAgaWYgKCRAIGVxICJ0aW1lZCBvdXRcbiIpIHsKKysgICAgICAgICAgICBwcmludCAidGltZWQgb3V0XG4iOworKyAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKyAgICAgICAgaWYgKCRAIGVxICJTSUdJTlRcbiIpIHsKKysgICAgICAgICAgICBleGl0IDE7CisrICAgICAgICB9CisrICAgIH0KKyB9CistCisgIyBpZiAka2VlcHVuZmlsdGVyZWQsIGNvcGllcyAkMSB0byAkMS51bmZpbHRlcmVkLm91dAorICMgcmVuYW1lcyAkMCB0cCAkMQorIHN1YiBmaWx0ZXJlZF9yZW5hbWUoJCQpIAorQEAgLTM5NCwxOSArNDEyLDIxIEBAIHN1YiBkb19kaWZmcygkJCQkKQorICAgICAgICAgICAgICAgICAjIEEgbWF0Y2g7ICByZW1vdmUgLm91dCBhbmQgYW55IHByZXZpb3VzbHkgY3JlYXRlZCAuZGlmZiBmaWxlcy4KKyAgICAgICAgICAgICAgICAgdW5saW5rKCIkbmFtZS4kbWlkLm91dCIpOworICAgICAgICAgICAgICAgICB1bmxpbmsoPCRuYW1lLiRtaWQuZGlmZio+KTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyAgICAgIyBJZiB3ZSByZWFjaCBoZXJlLCBub25lIG9mIHRoZSAuZXhwIGZpbGVzIG1hdGNoZWQuCistICAgIHByaW50ICIqKiogJG5hbWUgZmFpbGVkICgkbWlkKSAqKipcbiI7CisrICAgIHByaW50ICIqKiogJG5hbWUgZmFpbGVkICgkbWlkKSAqKipcbiIgaWYgKCR5b2N0b3B0ZXN0ID09IDApIDsKKyAgICAgcHVzaChAZmFpbHVyZXMsIHNwcmludGYoIiUtNDBzICgkbWlkKSIsICIkZnVsbG5hbWUiKSk7CisgICAgICRudW1fZmFpbHVyZXN7JG1pZH0rKzsKKysgICAgcmV0dXJuIDE7CisgfQorIAorIHN1YiBkb19vbmVfdGVzdCgkJCkgCisgeworICAgICBteSAoJGRpciwgJHZndGVzdCkgPSBAXzsKKysgICAgbXkgJGRpZmZTdGF0dXMgPSAwOworICAgICAkdmd0ZXN0ID1+IC9eKC4qKVwudmd0ZXN0LzsKKyAgICAgbXkgJG5hbWUgPSAkMTsKKyAgICAgbXkgJGZ1bGxuYW1lID0gIiRkaXIvJG5hbWUiOyAKK0BAIC00MjUsNyArNDQ1LDExIEBAIHN1YiBkb19vbmVfdGVzdCgkJCkKKyAgICAgICAgIH0gZWxzaWYgKDI1NiA9PSAkcHJlcmVxX3JlcykgeworICAgICAgICAgICAgICMgTmI6IHdlaXJkIFBlcmwtaXNtIC0tIGV4aXQgY29kZSBvZiAnMScgaXMgc2VlbiBieSBQZXJsIGFzIDI1Ni4uLgorICAgICAgICAgICAgICMgUHJlcmVxIGZhaWxlZCwgc2tpcC4KKy0gICAgICAgICAgICBwcmludGYoIiUtMTZzIChza2lwcGluZywgcHJlcmVxIGZhaWxlZDogJHByZXJlcSlcbiIsICIkbmFtZToiKTsKKysgICAgICAgICAgICBpZiAoJHlvY3RvcHRlc3QgPT0gMCkgeworKyAgICAgICAgICAgICAgICBwcmludGYoIiUtMTZzIChza2lwcGluZywgcHJlcmVxIGZhaWxlZDogJHByZXJlcSlcbiIsICIkbmFtZToiKTsKKysgICAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgICAgICBwcmludGYoIlNLSVA6ICRmdWxsbmFtZVxuIik7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIyBCYWQgcHJlcmVxOyBhYm9ydC4KK0BAIC00MzgsNyArNDYyLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICBpZiAoZGVmaW5lZCAkcHJvZ0IpIHsKKyAgICAgICAgICMgSWYgdGhlcmUgaXMgYSBwcm9nQiwgbGV0J3Mgc3RhcnQgaXQgaW4gYmFja2dyb3VuZDoKKyAgICAgICAgIHByaW50ZigiJS0xNnMgdmFsZ3JpbmQgJGV4dHJhb3B0cyAkdmdvcHRzICRwcm9nICRhcmdzIChwcm9nQjogJHByb2dCICRhcmdzQilcbiIsCistICAgICAgICAgICAgICAgIiRuYW1lOiIpOworKyAgICAgICAgICAgICAgICIkbmFtZToiKSBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgICAgICAjIHByb2dCLmRvbmUgdXNlZCB0byBkZXRlY3QgY2hpbGQgaGFzIGZpbmlzaGVkLiBTZWUgYmVsb3cuCisgICAgICAgICAjIE5vdGU6IHJlZGlyZWN0aW9uIG9mIHN0ZG91dCBhbmQgc3RkZXJyIGlzIGJlZm9yZSAkcHJvZ0IgdG8gYWxsb3cgYXJnc0IKKyAgICAgICAgICMgdG8gZS5nLiByZWRpcmVjdCBzdGRvdXRCIHRvIHN0ZGVyckIKK0BAIC00NTIsNyArNDc2LDggQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgICAgICAgICAgICAgIC4gInRvdWNoIHByb2dCLmRvbmUpICAmIik7CisgICAgICAgICB9CisgICAgIH0gZWxzZSB7CistICAgICAgICBwcmludGYoIiUtMTZzIHZhbGdyaW5kICRleHRyYW9wdHMgJHZnb3B0cyAkcHJvZyAkYXJnc1xuIiwgIiRuYW1lOiIpOworKyAgICAgICAgcHJpbnRmKCIlLTE2cyB2YWxncmluZCAkZXh0cmFvcHRzICR2Z29wdHMgJHByb2cgJGFyZ3NcbiIsICIkbmFtZToiKQorKyAgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorICAKKyAgICAgIyBQYXNzIHRoZSBhcHByb3ByaWF0ZSAtLXRvb2wgb3B0aW9uIGZvciB0aGUgZGlyZWN0b3J5IChjYW4gYmUgb3ZlcnJpZGRlbgorQEAgLTQ4Nyw3ICs1MTIsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICMgRmluZCBhbGwgdGhlIC5zdGRvdXQuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAgICAgbXkgQHN0ZG91dF9leHBzID0gPCRuYW1lLnN0ZG91dC5leHAqPjsKKyAgICAgQHN0ZG91dF9leHBzID0gKCAiL2Rldi9udWxsIiApIGlmICgwID09IHNjYWxhciBAc3Rkb3V0X2V4cHMpOworLSAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0IiwgXEBzdGRvdXRfZXhwcyk7IAorKyAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0IiwgXEBzdGRvdXRfZXhwcyk7CisgCisgICAgICMgRmlsdGVyIHN0ZGVycgorICAgICAkc3RkZXJyX2ZpbHRlcl9hcmdzID0gJG5hbWUgaWYgKCEgZGVmaW5lZCAkc3RkZXJyX2ZpbHRlcl9hcmdzKTsKK0BAIC00OTYsNyArNTIxLDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAjIEZpbmQgYWxsIHRoZSAuc3RkZXJyLmV4cCBmaWxlcy4gIEF0IGxlYXN0IG9uZSBtdXN0IGV4aXN0LgorICAgICBteSBAc3RkZXJyX2V4cHMgPSA8JG5hbWUuc3RkZXJyLmV4cCo+OworICAgICAoMCAhPSBzY2FsYXIgQHN0ZGVycl9leHBzKSBvciBkaWUgIkNvdWxkIG5vdCBmaW5kIGAkbmFtZS5zdGRlcnIuZXhwKidcbiI7CistICAgIGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnIiLCBcQHN0ZGVycl9leHBzKTsgCisrICAgICRkaWZmU3RhdHVzIHw9IGRvX2RpZmZzKCRmdWxsbmFtZSwgJG5hbWUsICJzdGRlcnIiLCBcQHN0ZGVycl9leHBzKTsKKyAKKyAgICAgaWYgKGRlZmluZWQgJHByb2dCKSB7CisgICAgICAgICAjIHdhaXQgZm9yIHRoZSBjaGlsZCB0byBiZSBmaW5pc2hlZAorQEAgLTUyMCw3ICs1NDUsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICAjIEZpbmQgYWxsIHRoZSAuc3Rkb3V0Qi5leHAgZmlsZXMuICBJZiBub25lLCB1c2UgL2Rldi9udWxsLgorICAgICAgICAgbXkgQHN0ZG91dEJfZXhwcyA9IDwkbmFtZS5zdGRvdXRCLmV4cCo+OworICAgICAgICAgQHN0ZG91dEJfZXhwcyA9ICggIi9kZXYvbnVsbCIgKSBpZiAoMCA9PSBzY2FsYXIgQHN0ZG91dEJfZXhwcyk7CistICAgICAgICBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0QiIsIFxAc3Rkb3V0Ql9leHBzKTsgCisrICAgICAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAic3Rkb3V0QiIsIFxAc3Rkb3V0Ql9leHBzKTsKKyAgICAgICAgIAorICAgICAgICAgIyBGaWx0ZXIgc3RkZXJyCisgICAgICAgICAkc3RkZXJyQl9maWx0ZXJfYXJncyA9ICRuYW1lIGlmICghIGRlZmluZWQgJHN0ZGVyckJfZmlsdGVyX2FyZ3MpOworQEAgLTUyOSw3ICs1NTQsNyBAQCBzdWIgZG9fb25lX3Rlc3QoJCQpCisgICAgICAgICAjIEZpbmQgYWxsIHRoZSAuc3RkZXJyQi5leHAgZmlsZXMuICBBdCBsZWFzdCBvbmUgbXVzdCBleGlzdC4KKyAgICAgICAgIG15IEBzdGRlcnJCX2V4cHMgPSA8JG5hbWUuc3RkZXJyQi5leHAqPjsKKyAgICAgICAgICgwICE9IHNjYWxhciBAc3RkZXJyQl9leHBzKSBvciBkaWUgIkNvdWxkIG5vdCBmaW5kIGAkbmFtZS5zdGRlcnJCLmV4cConXG4iOworLSAgICAgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZGVyckIiLCBcQHN0ZGVyckJfZXhwcyk7IAorKyAgICAgICAgJGRpZmZTdGF0dXMgfD0gZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInN0ZGVyckIiLCBcQHN0ZGVyckJfZXhwcyk7CisgICAgIH0KKyAKKyAgICAgIyBNYXliZSBkbyBwb3N0LXRlc3QgY2hlY2sKK0BAIC01NDEsNyArNTY2LDcgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorIAkgICAgIyBGaW5kIGFsbCB0aGUgLnBvc3QuZXhwIGZpbGVzLiAgSWYgbm9uZSwgdXNlIC9kZXYvbnVsbC4KKyAJICAgIG15IEBwb3N0X2V4cHMgPSA8JG5hbWUucG9zdC5leHAqPjsKKyAJICAgIEBwb3N0X2V4cHMgPSAoICIvZGV2L251bGwiICkgaWYgKDAgPT0gc2NhbGFyIEBwb3N0X2V4cHMpOworLQkgICAgZG9fZGlmZnMoJGZ1bGxuYW1lLCAkbmFtZSwgInBvc3QiLCBcQHBvc3RfZXhwcyk7CisrCSAgICAkZGlmZlN0YXR1cyB8PSBkb19kaWZmcygkZnVsbG5hbWUsICRuYW1lLCAicG9zdCIsIFxAcG9zdF9leHBzKTsKKyAJfQorICAgICB9CisgIAorQEAgLTU1MCw2ICs1NzUsMTMgQEAgc3ViIGRvX29uZV90ZXN0KCQkKQorICAgICAgICAgICAgIHByaW50KCIoY2xlYW51cCBvcGVyYXRpb24gZmFpbGVkOiAkY2xlYW51cClcbiIpOworICAgICB9CisgCisrICAgIGlmICgkeW9jdG9wdGVzdCA9PSAxKSB7CisrICAgICAgICBpZiAoJGRpZmZTdGF0dXMgPT0gMCkgeworKyAgICAgICAgICAgIHByaW50KCJQQVNTOiAkZnVsbG5hbWVcbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludCgiRkFJTDogJGZ1bGxuYW1lXG4iKTsKKysgICAgICAgIH0KKysgICAgfQorICAgICAkbnVtX3Rlc3RzX2RvbmUrKzsKKyB9CisgCitAQCAtNTg5LDcgKzYyMSw3IEBAIHN1YiB0ZXN0X29uZV9kaXIoJCQpCisgICAgIG15ICRmb3VuZF90ZXN0cyA9ICgwICE9IChncmVwIHsgJF8gPX4gL1wudmd0ZXN0JC8gfSBAZnMpKTsKKyAKKyAgICAgaWYgKCRmb3VuZF90ZXN0cykgeworLSAgICAgICAgcHJpbnQgIi0tIFJ1bm5pbmcgIHRlc3RzIGluICRmdWxsX2RpciAkZGFzaGVzXG4iOworKyAgICAgICAgcHJpbnQgIi0tIFJ1bm5pbmcgIHRlc3RzIGluICRmdWxsX2RpciAkZGFzaGVzXG4iIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorICAgICBmb3JlYWNoIG15ICRmIChAZnMpIHsKKyAgICAgICAgIGlmICgtZCAkZikgeworQEAgLTU5OSw3ICs2MzEsNyBAQCBzdWIgdGVzdF9vbmVfZGlyKCQkKQorICAgICAgICAgfQorICAgICB9CisgICAgIGlmICgkZm91bmRfdGVzdHMpIHsKKy0gICAgICAgIHByaW50ICItLSBGaW5pc2hlZCB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIjsKKysgICAgICAgIHByaW50ICItLSBGaW5pc2hlZCB0ZXN0cyBpbiAkZnVsbF9kaXIgJGRhc2hlc1xuIiBpZiAoJHlvY3RvcHRlc3QgPT0gMCk7CisgICAgIH0KKyAKKyAgICAgY2hkaXIoIi4uIik7CitAQCAtNjI1LDEwICs2NTcsMTIgQEAgc3ViIHN1bW1hcmlzZV9yZXN1bHRzCisgICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJzdGRvdXQifSwgICBwbHVyYWwoJG51bV9mYWlsdXJlc3sic3Rkb3V0In0pLAorICAgICAgICAgICAgJG51bV9mYWlsdXJlc3sic3RkZXJyQiJ9LCAgcGx1cmFsKCRudW1fZmFpbHVyZXN7InN0ZGVyckIifSksCisgICAgICAgICAgICAkbnVtX2ZhaWx1cmVzeyJzdGRvdXRCIn0sICBwbHVyYWwoJG51bV9mYWlsdXJlc3sic3Rkb3V0QiJ9KSwKKy0gICAgICAgICAgICRudW1fZmFpbHVyZXN7InBvc3QifSwgICAgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJwb3N0In0pKTsKKysgICAgICAgICAgICRudW1fZmFpbHVyZXN7InBvc3QifSwgICAgIHBsdXJhbCgkbnVtX2ZhaWx1cmVzeyJwb3N0In0pKQorKyAgICAgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAKKyAgICAgZm9yZWFjaCBteSAkZmFpbHVyZSAoQGZhaWx1cmVzKSB7CistICAgICAgICBwcmludCAiJGZhaWx1cmVcbiI7CisrICAgICAgICBwcmludCAiJGZhaWx1cmVcbiIKKysgICAgICAgICAgIGlmICgkeW9jdG9wdGVzdCA9PSAwKTsKKyAgICAgfQorICAgICBwcmludCAiXG4iOworIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDBmMmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2VuYWJsZS5idWlsZGluZy5vbi40Lngua2VybmVsLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0VuYWJsZSBidWlsZGluZyB2YWxncmluZCBvbiBob3N0IHdpdGggNC54IGtlcm5lbC4KKworRm9yIE9wZW5FbWJlZGRlZCBidWlsZHMgd2Ugc2hvdWxkIGJlIGNoZWNraW5nIHNvbWV0aGluZyBsaWtlCitPTERFU1RfS0VSTkVMIGluc3RlYWQgb2YgYHVuYW1lIC1yYCwgYnV0IHRoaXMgaXMgZ29vZCBlbm91Z2ggZm9yIG5vdy4KKworQnVpbGRpbmcgb24gNC54KiBjdXJyZW50bHkgZmFpbHMgd2l0aDoKKyAgY29uZmlndXJlOjU1NTY6IGNoZWNraW5nIGZvciB0aGUga2VybmVsIHZlcnNpb24KKyAgY29uZmlndXJlOjU1Nzk6IHJlc3VsdDogdW5zdXBwb3J0ZWQgKDQuMC4wLXJjMy0wMDExMS1nYWZmYjgxNykKKyAgY29uZmlndXJlOjU1ODE6IGVycm9yOiBWYWxncmluZCB3b3JrcyBvbiBrZXJuZWxzIDIuNCwgMi42CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjLm9yaWcJMjAxNS0wMy0xMyAxOToxNzowMS4yNDczMTA4NjggKzAxMDAKKysrKyB2YWxncmluZC0zLjkuMC9jb25maWd1cmUuYWMJMjAxNS0wMy0xMyAxOToxOToyNy4zODgzMTYxMDggKzAxMDAKK0BAIC0yNzYsOSArMjc2LDkgQEAKKyAgICAgICAgIGtlcm5lbD1gdW5hbWUgLXJgCisgCisgICAgICAgICBjYXNlICIke2tlcm5lbH0iIGluCistICAgICAgICAgICAgIDIuNi4qfDMuKikgCistICAgICAgICAJICAgIEFDX01TR19SRVNVTFQoWzIuNi54LzMueCBmYW1pbHkgKCR7a2VybmVsfSldKQorLSAgICAgICAgCSAgICBBQ19ERUZJTkUoW0tFUk5FTF8yXzZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIExpbnV4IDIuNi54IG9yIExpbnV4IDMueF0pCisrICAgICAgICAgICAgIDIuNi4qfDMuKnw0LiopIAorKyAgICAgICAgCSAgICBBQ19NU0dfUkVTVUxUKFsyLjYueC8zLngvNC54IGZhbWlseSAoJHtrZXJuZWx9KV0pCisrICAgICAgICAJICAgIEFDX0RFRklORShbS0VSTkVMXzJfNl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgTGludXggMi42Lnggb3IgTGludXggMy54IG9yIExpbnV4IDQueF0pCisgICAgICAgICAJICAgIDs7CisgCisgICAgICAgICAgICAgIDIuNC4qKSAKK0BAIC0yODgsNyArMjg4LDcgQEAKKyAKKyAgICAgICAgICAgICAgKikgCisgICAgICAgICAJICAgIEFDX01TR19SRVNVTFQoW3Vuc3VwcG9ydGVkICgke2tlcm5lbH0pXSkKKy0gICAgICAgIAkgICAgQUNfTVNHX0VSUk9SKFtWYWxncmluZCB3b3JrcyBvbiBrZXJuZWxzIDIuNCwgMi42XSkKKysgICAgICAgIAkgICAgQUNfTVNHX0VSUk9SKFtWYWxncmluZCB3b3JrcyBvbiBrZXJuZWxzIDIuNCwgMi42LCAzLngsIDQueF0pCisgICAgICAgICAJICAgIDs7CisgICAgICAgICBlc2FjCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZml4ZWQtcGVybC1wYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDU0ZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaApAQCAtMCwwICsxLDUzIEBACit0aGlzIGlzIGEgdGVtcG9yYXJ5IHBhdGNoIHRvIHdvcmthcm91bmQgY3Jvc3MgY29tcGlsYXRpb24uCitvdGhlcndpc2UgQFBFUkxAIHdpbGwgYmUgcmVwbGFjZWQgdG8gcGVybC1uYXRpdmUgYmluYXJ5LAordGhpcyBjcmVhdGVzIHVudXNhYmxlIHNjcmlwdHMgYW5kIGZhaWxzIEZJTEVSREVQRU5EUyBtZWNoYW5pc20KKyhlc3AuIHJwbSkKKworYSBiZXR0ZXIgZml4IHdvdWxkIG5lZWQ6CisgMS4gY29uZmlndXJlLmFjIHNob3VsZCBkaWZmZXJlbnRpYXRlIFBFUkwgYW5kIEhPU1RQRVJMCisgMi4gb3B0aW9uYWxseSByZW1vdmUgJHtTVEFHSU5HX0RJUn0gaW4gIyEgbGluZSBiZWZvcmUgZG9faW5zdGFsbAorCis4LzMxLzIwMTAgLSBjcmVhdGVkIGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLS1naXQgYS9jYWNoZWdyaW5kL2NnX2Fubm90YXRlLmluIGIvY2FjaGVncmluZC9jZ19hbm5vdGF0ZS5pbgoraW5kZXggOWRjOTU2NS4uY2M0ZWYwNSAxMDA2NDQKKy0tLSBhL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KKysrKyBiL2NhY2hlZ3JpbmQvY2dfYW5ub3RhdGUuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBDYWNoZWdyaW5kJ3MgYW5ub3RhdG9yLiAgICAgICAgICAgICAgICAgICAgICAgY2dfYW5ub3RhdGUuaW4gLS0tIyMKK2RpZmYgLS1naXQgYS9jYWNoZWdyaW5kL2NnX2RpZmYuaW4gYi9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KK2luZGV4IDk1MTA2NmUuLjg0YzJkZGUgMTAwNjQ0CistLS0gYS9jYWNoZWdyaW5kL2NnX2RpZmYuaW4KKysrKyBiL2NhY2hlZ3JpbmQvY2dfZGlmZi5pbgorQEAgLTEsNCArMSw0IEBACistIyEgQFBFUkxACisrIyEgL3Vzci9iaW4vcGVybAorIAorICMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworICMjLS0tIENhY2hlZ3JpbmQncyBkaWZmZXJlbmNlci4gICAgICAgICAgICAgICAgICAgICAgICAgY2dfZGlmZi5pbiAtLS0jIworZGlmZiAtLWdpdCBhL21hc3NpZi9tc19wcmludC5pbiBiL21hc3NpZi9tc19wcmludC5pbgoraW5kZXggZTZmZmRiZi4uZmI0NTkwNiAxMDA3NTUKKy0tLSBhL21hc3NpZi9tc19wcmludC5pbgorKysrIGIvbWFzc2lmL21zX3ByaW50LmluCitAQCAtMSw0ICsxLDQgQEAKKy0jISBAUEVSTEAKKysjISAvdXNyL2Jpbi9wZXJsCisgCisgIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisgIyMtLS0gTWFzc2lmJ3MgcmVzdWx0cyBwcmludGVyICAgICAgICAgICAgICAgICAgICAgICAgIG1zX3ByaW50LmluIC0tLSMjCitkaWZmIC0tZ2l0IGEvcGVyZi92Z19wZXJmLmluIGIvcGVyZi92Z19wZXJmLmluCitpbmRleCAyMTg4YTMxLi44M2FkMDI0IDEwMDY0NAorLS0tIGEvcGVyZi92Z19wZXJmLmluCisrKysgYi9wZXJmL3ZnX3BlcmYuaW4KK0BAIC0xLDQgKzEsNCBAQAorLSMhIEBQRVJMQAorKyMhIC91c3IvYmluL3BlcmwKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyAjIy0tLSBWYWxncmluZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHNjcmlwdCAgICAgICAgICAgICAgICAgIHZnX3BlcmYgLS0tIyMKKyAjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2ZvcmNlLW5vc3RhYnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZGZjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9mb3JjZS1ub3N0YWJzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1N1cHByZXNzIGJ1aWxkaW5nIHB0ZXN0IGFwcHMgd2l0aCB0aGUgLWdzdGFicyBvcHRpb24KKworRm9yY2UgdGhlIGNvbmZpZ3VyZSB0ZXN0cyBmb3IgLWdzdGFicyBjb21waWxlciBzdXBwb3J0IHRvIGZhaWwgc28gdGhhdAordGhlIHJlZ3Jlc3Npb24gdGVzdHMgZG9uJ3QgdHJ5IHRvIGJ1aWxkIHdpdGggdGhlIC1nc3RhYnMgb3B0aW9uLgorT3RoZXJ3aXNlLCB0aGUgdmFsZ3JpbmQgYnVpbGQgd2hlbiBwdGVzdCBpcyBlbmFibGVkIGZhaWxzIHdpdGggdGhlCitlcnJvcjoKKyAgICBTdGFicyBkZWJ1Z2luZm8gbm90IHN1cHBvcnRlZDoKKyAgICAuLi9wYWNrYWdlL3Vzci9saWIvdmFsZ3JpbmQvcHRlc3QvbWVtY2hlY2svdGVzdHMvZGVlcF90ZW1wbGF0ZXMKKyAgICBFUlJPUjogRnVuY3Rpb24gZmFpbGVkOiBzcGxpdF9hbmRfc3RyaXBfZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtnc3RhYnMgc3VwcG9ydCBpcyBhcHByb3ByaWF0ZSB1cHN0cmVhbSwKKyAgICAgICAgYnV0IG5vdCBmb3IgdGhpcyBkaXN0cm9dCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA3NTVkZmI5Li5jYzhiNWUxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNzQzLDIyICsxNzQzLDcgQEAgQU1fQ09ORElUSU9OQUwoRFdBUkY0LCB0ZXN0IHgkYWNfaGF2ZV9kd2FyZjQgPSB4eWVzKQorIENGTEFHUz0kc2FmZV9DRkxBR1MKKyAKKyAKKy0jIGRvZXMgdGhpcyBjb21waWxlciBzdXBwb3J0IC1nc3RhYnMgPworLQorLUFDX01TR19DSEVDS0lORyhbaWYgZ2NjIGFjY2VwdHMgLWdzdGFic10pCistCistc2FmZV9DRkxBR1M9JENGTEFHUworLUNGTEFHUz0iLWdzdGFicyIKKy1BQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbCistICByZXR1cm4gMDsKKy1dXSldLCBbCistYWNfaGF2ZV9nc3RhYnM9eWVzCistQUNfTVNHX1JFU1VMVChbeWVzXSkKKy1dLCBbCisgYWNfaGF2ZV9nc3RhYnM9bm8KKy1BQ19NU0dfUkVTVUxUKFtub10pCistXSkKKy1DRkxBR1M9JHNhZmVfQ0ZMQUdTCisgQU1fQ09ORElUSU9OQUwoW0hBVkVfR1NUQUJTXSwgW3Rlc3QgeCRhY19oYXZlX2dzdGFicyA9IHh5ZXNdKQorIAorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL2dsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MzQ5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvZ2xpYmMucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorQmFja3BvcnQgb2YgZ2xpYmMgMi4xOSBhbmQgMi4yMCBhbmQgMi4yMSBzdXBwb3J0LgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMS5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHZhbGdyaW5kLTMuMTAuMS9jb25maWd1cmUuYWMKK0BAIC0xMDE4LDYgKzEwMTgsMzQgQEAgY2FzZSAiJHtHTElCQ19WRVJTSU9OfSIgaW4KKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKysgICAgIDIuMTkpCisrCUFDX01TR19SRVNVTFQoMi4xOSBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8xOV0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xOS54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworKyAgICAgMi4yMCkKKysJQUNfTVNHX1JFU1VMVCgyLjIwIGZhbWlseSkKKysJQUNfREVGSU5FKFtHTElCQ18yXzIwXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIwLnhdKQorKwlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCTs7CisrICAgICAyLjIxKQorKwlBQ19NU0dfUkVTVUxUKDIuMjEgZmFtaWx5KQorKwlBQ19ERUZJTkUoW0dMSUJDXzJfMjFdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMjEueF0pCisrCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJOzsKKysgICAgIDIuMjIpCisrCUFDX01TR19SRVNVTFQoMi4yMiBmYW1pbHkpCisrCUFDX0RFRklORShbR0xJQkNfMl8yMl0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4yMi54XSkKKysJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwk7OworICAgICAgZGFyd2luKQorIAlBQ19NU0dfUkVTVUxUKERhcndpbikKKyAJQUNfREVGSU5FKFtEQVJXSU5fTElCQ10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgRGFyd2luXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3Bhc3MtbWFsdGl2ZWMtb25seS1pZi1pdC1zdXBwb3J0ZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxNjdjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9wYXNzLW1hbHRpdmVjLW9ubHktaWYtaXQtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNjggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworcjE0NTY2IHwgZmxvcmlhbiB8IDIwMTQtMDktMjQgMTc6MDI6NTQgLTA1MDAgKFdlZCwgMjQgU2VwIDIwMTQpIHwgNCBsaW5lcworCitUaGUgdGVzdGJ1Y2tldHMgbm9uZS90ZXN0cy9wcGN7MzIsNjR9IGRpZCBub3QgYnVpbGQgaW4gY2FzZSB0aGUKK3Rvb2xjaGFpbiBkaWQgbm90IHN1cHBvcnQgLW1hbHRpdmVjIC1tYWJpPWFsdGl2ZWMuCitUaGlzIHNob3VsZCB3b3JrIG5vdy4gRml4ZXMgQlogIzMzODczMQorCitJbmRleDogbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjUpCisrKysgYi9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCShyZXZpc2lvbiAxNDU2NikKK0BAIC03Miw4ICs3MiwxMiBAQAorIGFsbGV4ZWNfQ0ZMQUdTCQk9ICQoQU1fQ0ZMQUdTKSBARkxBR19XX05PX05PTk5VTExACisgCisgaWYgSEFTX0FMVElWRUMKKytCVUlMRF9GTEFHX0FMVElWRUMgPSAtbWFsdGl2ZWMKKytCVUlMRF9GTEFHX0FCSV9BTFRJVkVDID0gLW1hYmk9YWx0aXZlYworIEFMVElWRUNfRkxBRyA9IC1ESEFTX0FMVElWRUMKKyBlbHNlCisrQlVJTERfRkxBR19BTFRJVkVDID0KKytCVUlMRF9GTEFHX0FCSV9BTFRJVkVDID0KKyBBTFRJVkVDX0ZMQUcgPQorIGVuZGlmCisgCitAQCAtMTAxLDExICsxMDUsMTIgQEAKKyBJU0FfMl8wN19GTEFHID0KKyBlbmRpZgorIAorLWptX2luc25zX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzIC1tYWx0aXZlYyBcCistCQkJQEZMQUdfTTMyQCAkKEFMVElWRUNfRkxBRykKKytqbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyBcCisrCQkJQEZMQUdfTTMyQCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX0FMVElWRUMpCisgCistdGVzdFZNWF9DRkxBR1MgID0gJChBTV9DRkxBR1MpIC1PIC1nIC1XYWxsIC1tYWx0aXZlYyAtbWFiaT1hbHRpdmVjIC1EQUxUSVZFQyBcCistCQkJLURHQ0NfQ09NUElMRVIgQEZMQUdfTTMyQAorK3Rlc3RWTVhfQ0ZMQUdTICA9ICQoQU1fQ0ZMQUdTKSAtTyAtZyAtV2FsbCAtREFMVElWRUMgXAorKwkJCS1ER0NDX0NPTVBJTEVSIEBGTEFHX00zMkAgICQoQlVJTERfRkxBR19BTFRJVkVDKSBcCisrCQkJJChCVUlMRF9GTEFHX0FCSV9BTFRJVkVDKQorIAorIHRlc3RfaXNhXzJfMDZfcGFydDFfQ0ZMQUdTID0gJChBTV9DRkxBR1MpIC1XaW5saW5lIC1XYWxsIC1PIC1nIC1tcmVnbmFtZXMgJChWU1hfRkxBRykgXAorIAkJCUBGTEFHX00zMkAgJChBTFRJVkVDX0ZMQUcpICQoQlVJTERfRkxBR19WU1gpCitJbmRleDogbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvbm9uZS90ZXN0cy9wcGM2NC9NYWtlZmlsZS5hbQkocmV2aXNpb24gMTQ1NjUpCisrKysgYi9ub25lL3Rlc3RzL3BwYzY0L01ha2VmaWxlLmFtCShyZXZpc2lvbiAxNDU2NikKK0BAIC01MCw4ICs1MCwxMCBAQAorIGFsbGV4ZWNfQ0ZMQUdTCQk9ICQoQU1fQ0ZMQUdTKSBARkxBR19XX05PX05PTk5VTExACisgCisgaWYgSEFTX0FMVElWRUMKKytCVUlMRF9GTEFHX0FMVElWRUMgPSAtbWFsdGl2ZWMKKyBBTFRJVkVDX0ZMQUcgPSAtREhBU19BTFRJVkVDCisgZWxzZQorK0JVSUxEX0ZMQUdfQUxUSVZFQyA9CisgQUxUSVZFQ19GTEFHID0KKyBlbmRpZgorIAorQEAgLTg4LDggKzkwLDggQEAKKyB0ZXN0X2lzYV8yXzA2X3BhcnQzX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoVlNYX0ZMQUcpIFwKKyAJCQlARkxBR19NNjRAICQoQUxUSVZFQ19GTEFHKSAkKEJVSUxEX0ZMQUdfVlNYKQorIAorLWptX2luc25zX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzIC1tYWx0aXZlYyBcCistCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykKKytqbV9pbnNuc19DRkxBR1MgPSAkKEFNX0NGTEFHUykgLVdpbmxpbmUgLVdhbGwgLU8gLWcgLW1yZWduYW1lcyBcCisrCQkJQEZMQUdfTTY0QCAkKEFMVElWRUNfRkxBRykgJChCVUlMRF9GTEFHX0FMVElWRUMpCisgCisgdGVzdF9kZnAxX0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAtV2lubGluZSAtV2FsbCAtTyAtZyAtbXJlZ25hbWVzICQoREZQX0ZMQUcpIFwKKyAJCQlARkxBR19NNjRAICQoQlVJTERfRkxBR1NfREZQKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1hcm0tdmFyaWFudC1zcGVjaWZpYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxOWFiOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorUmVtb3ZlIGFybSB0ZXN0cyB0aGF0IGRvbid0IGNvbXBpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0NvcnJlY3RzIHRoZSBvcmlnaW5hbCBjb21taXQgZm9yIHRoZSBwYXRjaCB0aGF0IHJlbW92ZWQgQVJNIHB0ZXN0IENGTEFHUworc2V0dGluZ3MuIFNpbmNlIHRoZSBmbGFncyBjb3VsZCBiZSBzZXQgYnkgYSB1c2VyLCB0aGUgZmxhZ3Mgc2hvdWxkCitiZSBrZXB0IGluIHBsYWNlIGR1cmluZyBjb21waWxhdGlvbi4gIEJ5IGtlZXBpbmcgdGhlIG9yaWdpbmFsIHVwLXN0cmVhbQorQ0ZMQUdTIGZvciB0aGUgdGVzdHMsIHRoZW4gYWRkaXRpb25hbCB0ZXN0cyBzdWNjZXNzZnVsbHkgY29tcGlsZQorZm9yIGFsbCB0ZXN0ZWQgQVJNIHR1bmluZ3MuCisKK0hvd2V2ZXIsIHRoZXJlIHdlcmUgc3RpbGwgdHdvIHRlc3RzIGxpc3RlZCBiZWxvdyB0aGF0IGRpZCBub3QgY29tcGlsZQorZm9yIGFueSBiZWFnbGVib25lIHR1bmluZyB0aGF0IGlzIHZhbGlkIGZvciB2YWxncmluZC4gV2l0aCB0aGUgdXBkYXRlZAorcGF0Y2gsIHRoZSBzZXQgb2YgZXhjbHVkZWQgQVJNIHB0ZXN0cyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBidWlsZAorZmFpbHVyZXMgYXJlOgorICBpbnRkaXYgLSBmYWlscyBmb3IgYWxsIGJlYWdsZWJvbmUgdHVuaW5ncyB3aXRoIDIgZXJyb3JzOgorICB7c3RhbmRhcmQgaW5wdXR9Oig0MCBvciA0MSk6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3QKKyAgICAgICBzdXBwb3J0IFRodW1iIG1vZGUgYHVkaXYgcjMscjkscjEwJworICB7c3RhbmRhcmQgaW5wdXR9Oig3MiBvciA3Myk6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3QKKyAgICAgICBzdXBwb3J0IFRodW1iIG1vZGUgYHNkaXYgcjMscjkscjEwJworCisgIHZjdnRfZml4ZWRfZmxvYXRfVkZQIC0gZmFpbHMgZm9yIGFsbCBiZWFnbGVib25lIHR1bmluZ3MgaW4gb25lIG9mCisgIHR3byB3YXlzOgorICAgIHdpdGggbmVvbiB0dW5pbmcgKC1tZnB1PW5lb24pIGZhaWxzIHdpdGggSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IKKyAgICB3aXRob3V0IG5lb24gdHVuaW5nIGZhaWxzIHdpdGggMyBlcnJvcnM6CisgICAge3N0YW5kYXJkIGlucHV0fTozMzogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIuczMyIHMxNSxzMTUsIzEnCisgICAge3N0YW5kYXJkIGlucHV0fTo1ODogRXJyb3I6IHNlbGVjdGVkIEZQVSBkb2VzIG5vdCBzdXBwb3J0CisgICAgICBpbnN0cnVjdGlvbiAtLSBgdmN2dC5mMzIuczMyIHMxNSxzMTUsIzMyJworICAgIHtzdGFuZGFyZCBpbnB1dH06MTM2OiBFcnJvcjogc2VsZWN0ZWQgRlBVIGRvZXMgbm90IHN1cHBvcnQKKyAgICAgIGluc3RydWN0aW9uIC0tIGB2Y3Z0LmYzMi51MzIgczE1LHMxNSwjMScKKworQWZ0ZXIgYXBwbHlpbmcgdGhpcyBjb21taXQsIHRoZSB2YWxncmluZCBBUk0gcHRlc3RzIGNvbXBpbGUgd2l0aG91dAorZXJyb3JzIGZvciB0dW5pbmdzOgorICBhcm12N1t0XVtoZl1bYl1bLW5lb25dIGNvcnRleGE4W3RdW2hmXVstbmVvbl0KK3doZXJlIHRoZSB0dW5pbmcgW29wdGlvbl0gd2FzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgYm90aCB3aXRoCithbmQgd2l0aG91dCB0aGUgJ29wdGlvbicsIGFuZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFsbCBvdGhlciBvcHRpb25zLgorCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IHZhbGdyaW5kLTMuMTAuMS9ub25lL3Rlc3RzL2FybS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMS5vcmlnL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCTIwMTUtMDUtMTkgMTU6MTE6NTkuMjI0ODQyOTI3IC0wNTAwCisrKysgdmFsZ3JpbmQtMy4xMC4xL25vbmUvdGVzdHMvYXJtL01ha2VmaWxlLmFtCTIwMTUtMDUtMTkgMTU6MTQ6MjAuODA4ODQ3MDI4IC0wNTAwCitAQCAtMTcsOSArMTcsMTMgQEAKKyAJdmZwLnN0ZG91dC5leHAgdmZwLnN0ZGVyci5leHAgdmZwLnZndGVzdCBcCisgCXZmcHY0X2ZtYS5zdGRvdXQuZXhwIHZmcHY0X2ZtYS5zdGRlcnIuZXhwIHZmcHY0X2ZtYS52Z3Rlc3QKKyAKKysjIFJlbW92ZSB0aGUgZm9sbG93aW5nIHRlc3RzIHdoaWNoIGNhdXNlIGNvbXBpbGVyIGVycm9ycyBmb3IgYWxsIHR1bmluZ3MKKysjICBhdmFpbGFibGUgZm9yIGJlYWdsZSBib25lIChzZWUgcmVtb3ZlLWFybS12YXJpYW50LXNwZWNpZmljLnBhdGNoKToKKysjCWludGRpdgorKyMJdmN2dF9maXhlZF9mbG9hdF9WRlAKKysKKyBjaGVja19QUk9HUkFNUyA9IFwKKyAJYWxsZXhlYyBcCistCWludGRpdiBcCisgCWxkcnQgXAorIAlsZHJ0X2FybSBcCisgCW5lb24xMjggXAorQEAgLTI3LDcgKzMxLDYgQEAKKyAJdjZpbnRBUk0gXAorIAl2NmludFRodW1iIFwKKyAJdjZtZWRpYSBcCistCXZjdnRfZml4ZWRfZmxvYXRfVkZQIFwKKyAJdmZwIFwKKyAJdmZwdjRfZm1hCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcmVtb3ZlLXBwYy10ZXN0cy1mYWlsaW5nLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzY0MGZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3JlbW92ZS1wcGMtdGVzdHMtZmFpbGluZy1idWlsZC5wYXRjaApAQCAtMCwwICsxLDc1IEBACitSZW1vdmUgdGVzdCBhcHBzIG5vdCBidWlsZGluZyB3aXRoIHBwYyBhbmQgUFRFU1QKKworRm9yIG1wYzgzMTYtcmRiIGluIG5vbmUvdGVzdHMvcHBjMzIsIHRoZSBvZSBjb21waWxlciBvcHRpb25zIGFyZQoraW5jb25zaXN0ZW50IHdpdGggdGhlIGltcG9zZWQgdGVzdCBjb21waWxlciBvcHRpb25zIGdlbmVyYXRpbmcgZXJyb3JzCithcyBmb2xsb3dzOgordGVzdF9pc2FfMl8wN19wYXJ0MQordGVzdF9pc2FfMl8wN19wYXJ0MgordGVzdF90bQordGVzdF90b3VjaF90bQorICAgIDogdW5yZWNvZ25pemVkIGNvbW1hbmQgbGluZSBvcHRpb24gJy1taHRtJworCitqbS1pbnNucwordGVzdFZNWAorICAgIDogQWx0aVZlYyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdGFyZ2V0CisKK0ZvciB0aGUgZm9sbG93aW5nIHRlc3RzLCB0aGVpciBpbmxpbmUgYXNzZW1ibGVyIGlzIGluY29uc2lzdGVudCB3aXRoCit0aGUgcHBjZTMwMGMzIHZhcmlhbnQ6Cityb3VuZC5jOjM5MworcG93ZXI1K19yb3VuZC5jOjk4CisgICAgOiBpbXBvc3NpYmxlIGNvbnN0cmFpbnQgaW4gJ2FzbScKKworRm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMsIHdpdGggYm90aCBtcGM4MzE2LXJkYiBhbmQgd2l0aCBxZW11cHBjIGJzcCwKK3RoZSBpbmxpbmUgYXNzZW1iZXIgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIG9lIGNvbXBpbGVyIG1hY2hpbmUKK3R1bmluZzoKK0luIG1lbWNoZWNrL3Rlc3RzL3BwYzMyCisgcG93ZXJfSVNBMl8wNS5jOjU2CitJbiBub25lL3Rlc3RzL3BwYzMyCisgdGVzdF9kZnAxLmM6ODUKKyB0ZXN0X2RmcDIuYzoxNjAKKyB0ZXN0X2RmcDMuYzoxNTcKKyB0ZXN0X2RmcDQuYzo3MworIHRlc3RfZGZwNS5jOjczCisgICAgOiBpbXBvc3NpYmxlIGNvbnN0cmFpbnQgaW4gJ2FzbScKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitJbmRleDogdmFsZ3JpbmQtMy4xMC4wL21lbWNoZWNrL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4wLm9yaWcvbWVtY2hlY2svdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbWVtY2hlY2svdGVzdHMvcHBjMzIvTWFrZWZpbGUuYW0KK0BAIC03LDggKzcsNyBAQCBFWFRSQV9ESVNUID0gJChub2luc3RfU0NSSVBUUykgXAorIAlwb3dlcl9JU0EyXzA1LnN0ZGVyci5leHAgcG93ZXJfSVNBMl8wNS5zdGRvdXQuZXhwIHBvd2VyX0lTQTJfMDUudmd0ZXN0IFwKKyAJcG93ZXJfSVNBMl8wNS5zdGRvdXQuZXhwX1dpdGhvdXRfRlBQTworIAorLWNoZWNrX1BST0dSQU1TID0gXAorLQlwb3dlcl9JU0EyXzA1CisrY2hlY2tfUFJPR1JBTVMgPSAKKyAKKyBwb3dlcl9JU0EyXzA1X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKFdFUlJPUikgLVdpbmxpbmUgLVdhbGwgLVdzaGFkb3cgLWcgXAorIAkJLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgQEZMQUdfTTMyQAorSW5kZXg6IHZhbGdyaW5kLTMuMTAuMC9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdmFsZ3JpbmQtMy4xMC4wLm9yaWcvbm9uZS90ZXN0cy9wcGMzMi9NYWtlZmlsZS5hbQorKysrIHZhbGdyaW5kLTMuMTAuMC9ub25lL3Rlc3RzL3BwYzMyL01ha2VmaWxlLmFtCitAQCAtNTIsMTYgKzUyLDggQEAgY2hlY2tfUFJPR1JBTVMgPSBcCisgCWFsbGV4ZWMgXAorIAlidWcxMjkzOTAtcHBjMzIgXAorIAlidWcxMzkwNTAtcHBjMzIgXAorLQlsZHN0cmV2IGxzdyBqbS1pbnNucyBtZnRvY3JmIG1jcmZzIHJvdW5kIHRlc3RfZnggdGVzdF9neCBcCistCXRlc3RWTVggdHdpIHR3IHhsY19kYmxfdTMyIHBvd2VyNStfcm91bmQgcG93ZXI2X2JjbXAgXAorLQl0ZXN0X2lzYV8yXzA2X3BhcnQxIFwKKy0JdGVzdF9pc2FfMl8wNl9wYXJ0MiBcCistCXRlc3RfaXNhXzJfMDZfcGFydDMgXAorLQl0ZXN0X2RmcDEgdGVzdF9kZnAyIHRlc3RfZGZwMyB0ZXN0X2RmcDQgdGVzdF9kZnA1IFwKKy0JdGVzdF9pc2FfMl8wN19wYXJ0MSBcCistCXRlc3RfaXNhXzJfMDdfcGFydDIgXAorLQl0ZXN0X3RtIFwKKy0JdGVzdF90b3VjaF90bSBcCisrCWxkc3RyZXYgbHN3IG1mdG9jcmYgbWNyZnMgdGVzdF9meCB0ZXN0X2d4IFwKKysJdHdpIHR3IHhsY19kYmxfdTMyIHBvd2VyNl9iY21wIFwKKyAJbGRzdF9tdWx0aXBsZSBcCisgCWRhdGEtY2FjaGUtaW5zdHJ1Y3Rpb25zCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOWE3MmVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3J1bi1wdGVzdApAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKworIyBydW4tcHRlc3QgLSAncHRlc3QnIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2hlbGwgc2NyaXB0IHRoYXQKKyMgICB3cmFwcyB0aGUgdmFsZ3JpbmQgcmVncmVzc2lvbiBzY3JpcHQgdmdfcmVndGVzdC4gCisjICAgTXVzdCBiZSBydW4gaW4gdGhlIC91c3IvbGliL3ZhbGdyaW5kL3B0ZXN0IGRpcmVjdG9yeS4gCisjCisjIERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitWQUxHUklORExJQj1AbGliZGlyQC92YWxncmluZAordGVzdHMvdmdfcmVndGVzdCAtLWFsbCBcCisgICAgLS12YWxncmluZD0vdXNyL2Jpbi92YWxncmluZCAtLXZhbGdyaW5kLWxpYj0kVkFMR1JJTkRMSUIgXAorCS0teW9jdG8tcHRlc3QKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC9zZXBidWlsZGZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGIwZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ZhbGdyaW5kL3ZhbGdyaW5kL3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMjM1IEBACitGaXggb3V0IG9mIHRyZWUgYnVpbGRzLiBUaGUgcGF0aHMgdG8gdGhlc2UgZmlsZXMgbmVlZCB0byBiZSBmdWxseSBzcGVjaWZpZWQgaW4KK3RoZSBvdXQgb2YgdHJlZSBidWlsZCBjYXNlLiBnbGliYy0yLlguc3VwcCBpcyBhIGdlbmVyYXRlZCBmaWxlIHNvIHRoZSBmdWxsIHBhdGgKK2lzIGRlbGliZXJhdGVseSBub3Qgc3BlY2lmaWVkIGluIHRoYXQgY2FzZS4KKworUlAgMjAxMy8wMy8yMworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHZhbGdyaW5kLTMuOS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuOS4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgdmFsZ3JpbmQtMy45LjAvY29uZmlndXJlLmFjCitAQCAtMzI1LDI2ICszMjUsMjYgQEAgY2FzZSAiJHtob3N0X29zfSIgaW4KKyAJICAgICA5LiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiA5LnggKCR7a2VybmVsfSkgLyBNYWMgT1MgWCAxMC41IExlb3BhcmRdKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzUsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW45LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjktZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luOS5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjktZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworIAkgICAgIDEwLiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiAxMC54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuNiBTbm93IExlb3BhcmRdKQorIAkJICBBQ19ERUZJTkUoW0RBUldJTl9WRVJTXSwgREFSV0lOXzEwXzYsIFtEYXJ3aW4gLyBNYWMgT1MgWCB2ZXJzaW9uXSkKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JCSAgREVGQVVMVF9TVVBQPSJkYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJCSAgOzsKKyAJICAgICAxMS4qKQorIAkJICBBQ19NU0dfUkVTVUxUKFtEYXJ3aW4gMTEueCAoJHtrZXJuZWx9KSAvIE1hYyBPUyBYIDEwLjcgTGlvbl0pCisgCQkgIEFDX0RFRklORShbREFSV0lOX1ZFUlNdLCBEQVJXSU5fMTBfNywgW0RhcndpbiAvIE1hYyBPUyBYIHZlcnNpb25dKQorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjExLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQkJICBERUZBVUxUX1NVUFA9ImRhcndpbjEwLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJCSAgREVGQVVMVF9TVVBQPSIkc3JjZGlyL2RhcndpbjExLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAkJICA7OworIAkgICAgIDEyLiopCisgCQkgIEFDX01TR19SRVNVTFQoW0RhcndpbiAxMi54ICgke2tlcm5lbH0pIC8gTWFjIE9TIFggMTAuOCBNb3VudGFpbiBMaW9uXSkKKyAJCSAgQUNfREVGSU5FKFtEQVJXSU5fVkVSU10sIERBUldJTl8xMF84LCBbRGFyd2luIC8gTWFjIE9TIFggdmVyc2lvbl0pCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCQkgIERFRkFVTFRfU1VQUD0iZGFyd2luMTAtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwkJICBERUZBVUxUX1NVUFA9IiRzcmNkaXIvZGFyd2luMTIuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCQkgIERFRkFVTFRfU1VQUD0iJHNyY2Rpci9kYXJ3aW4xMC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCQkgIDs7CisgICAgICAgICAgICAgICopIAorIAkJICBBQ19NU0dfUkVTVUxUKFt1bnN1cHBvcnRlZCAoJHtrZXJuZWx9KV0pCitAQCAtNzk5LDEyNCArNzk5LDEyNCBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorICAgICAgMi4yKQorIAlBQ19NU0dfUkVTVUxUKDIuMiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8yXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjIueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4yLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMi1MaW51eFRocmVhZHMtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMi5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMi1MaW51eFRocmVhZHMtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworIAorICAgICAgMi4zKQorIAlBQ19NU0dfUkVTVUxUKDIuMyBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8zXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjMueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAKKyAgICAgIDIuNCkKKyAJQUNfTVNHX1JFU1VMVCgyLjQgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfNF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi40LnhdKQorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAyLjUpCisgCUFDX01TR19SRVNVTFQoMi41IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzVdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuNS54XSkKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjUuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjUuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi42KQorIAlBQ19NU0dfUkVTVUxUKDIuNiBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl82XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjYueF0pCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi42LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi42LnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuNykKKyAJQUNfTVNHX1JFU1VMVCgyLjcgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfN10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi43LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjgpCisgCUFDX01TR19SRVNVTFQoMi44IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzhdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuOC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi45KQorIAlBQ19NU0dfUkVTVUxUKDIuOSBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl85XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjkueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTApCisgCUFDX01TR19SRVNVTFQoMi4xMCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xMF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xMC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xMSkKKyAJQUNfTVNHX1JFU1VMVCgyLjExIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzExXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjExLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgICAgICAgICA7OworICAgICAgMi4xMikKKyAJQUNfTVNHX1JFU1VMVCgyLjEyIGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzEyXSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjEyLnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjEzKQorIAlBQ19NU0dfUkVTVUxUKDIuMTMgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTNdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTMueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTQpCisgCUFDX01TR19SRVNVTFQoMi4xNCBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xNF0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNC54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xNSkKKyAJQUNfTVNHX1JFU1VMVCgyLjE1IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE1XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE1LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICAyLjE2KQorIAlBQ19NU0dfUkVTVUxUKDIuMTYgZmFtaWx5KQorIAlBQ19ERUZJTkUoW0dMSUJDXzJfMTZdLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91J3JlIHVzaW5nIGdsaWJjIDIuMTYueF0pCisgCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorKwlERUZBVUxUX1NVUFA9IiRzcmNkaXIvZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKyAJOzsKKyAgICAgIDIuMTcpCisgCUFDX01TR19SRVNVTFQoMi4xNyBmYW1pbHkpCisgCUFDX0RFRklORShbR0xJQkNfMl8xN10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgZ2xpYmMgMi4xNy54XSkKKyAJREVGQVVMVF9TVVBQPSJnbGliYy0yLlguc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi4zNDU2Ny1OUFRMLWhlbGdyaW5kLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorLQlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9nbGliYy0yLlgtZHJkLnN1cHAgJHtERUZBVUxUX1NVUFB9IgorIAk7OworICAgICAgMi4xOCkKKyAJQUNfTVNHX1JFU1VMVCgyLjE4IGZhbWlseSkKKyAJQUNfREVGSU5FKFtHTElCQ18yXzE4XSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSdyZSB1c2luZyBnbGliYyAyLjE4LnhdKQorIAlERUZBVUxUX1NVUFA9ImdsaWJjLTIuWC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy0JREVGQVVMVF9TVVBQPSJnbGliYy0yLjM0NTY3LU5QVEwtaGVsZ3JpbmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCistCURFRkFVTFRfU1VQUD0iZ2xpYmMtMi5YLWRyZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuMzQ1NjctTlBUTC1oZWxncmluZC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKysJREVGQVVMVF9TVVBQPSIkc3JjZGlyL2dsaWJjLTIuWC1kcmQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgICAgICBkYXJ3aW4pCisgCUFDX01TR19SRVNVTFQoRGFyd2luKQorQEAgLTkyNiw3ICs5MjYsNyBAQCBjYXNlICIke0dMSUJDX1ZFUlNJT059IiBpbgorICAgICAgYmlvbmljKQorIAlBQ19NU0dfUkVTVUxUKEJpb25pYykKKyAJQUNfREVGSU5FKFtCSU9OSUNfTElCQ10sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UncmUgdXNpbmcgQmlvbmljXSkKKy0JREVGQVVMVF9TVVBQPSJiaW9uaWMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrCURFRkFVTFRfU1VQUD0iJHNyY2Rpci9iaW9uaWMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCTs7CisgCisgICAgICAqKQorQEAgLTk0MywxMSArOTQzLDExIEBAIEFDX1NVQlNUKEdMSUJDX1ZFUlNJT04pCisgIyBhdHRlbXB0IHRvIGRldGVjdCB3aGV0aGVyIHN1Y2ggbGlicmFyaWVzIGFyZSBpbnN0YWxsZWQgb24gdGhlCisgIyBidWlsZCBtYWNoaW5lIChvciBldmVuIGlmIGFueSBYIGZhY2lsaXRpZXMgYXJlIHByZXNlbnQpOyBqdXN0CisgIyBhZGQgdGhlIHN1cHByZXNzaW9ucyBhbnRpZGlzaXJyZWdhcmRsZXNzLgorLURFRkFVTFRfU1VQUD0ieGZyZWUtNC5zdXBwICR7REVGQVVMVF9TVVBQfSIKKy1ERUZBVUxUX1NVUFA9InhmcmVlLTMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL3hmcmVlLTQuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisrREVGQVVMVF9TVVBQPSIkc3JjZGlyL3hmcmVlLTMuc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCisgIyBBZGQgZ2xpYmMgYW5kIFgxMSBzdXBwcmVzc2lvbnMgZm9yIGV4cC1zZ2NoZWNrCistREVGQVVMVF9TVVBQPSJleHAtc2djaGVjay5zdXBwICR7REVGQVVMVF9TVVBQfSIKKytERUZBVUxUX1NVUFA9IiRzcmNkaXIvZXhwLXNnY2hlY2suc3VwcCAke0RFRkFVTFRfU1VQUH0iCisgCisgCisgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZC92YWxncmluZC1yZW1vdmUtcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MmU5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmQvdmFsZ3JpbmQtcmVtb3ZlLXJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBjb25maWddCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHZhbGdyaW5kLTMuMTAuMC5vcmlnL25vbmUvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyB2YWxncmluZC0zLjEwLjAvbm9uZS90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTI4MCw3ICsyODAsNiBAQCB0aHJlYWRlZF9mb3JrX0xEQURECT0gLWxwdGhyZWFkCisgdGhyZWFkZWRlcnJub19MREFERAk9IC1scHRocmVhZAorIHRsc19TT1VSQ0VTCQk9IHRscy5jIHRsczIuYworIHRsc19ERVBFTkRFTkNJRVMJPSB0bHMuc28gdGxzMi5zbworLXRsc19MREZMQUdTCQk9IC1XbCwtcnBhdGgsJChhYnNfdG9wX2J1aWxkZGlyKS9ub25lL3Rlc3RzCisgdGxzX0xEQURECQk9IHRscy5zbyB0bHMyLnNvIC1scHRocmVhZAorIHRsc19zb19TT1VSQ0VTCQk9IHRsc19zby5jCisgdGxzX3NvX0RFUEVOREVOQ0lFUwk9IHRsczIuc28KK0BAIC0yODgsNyArMjg3LDcgQEAgaWYgVkdDT05GX09TX0lTX0RBUldJTgorICB0bHNfc29fTERGTEFHUwkJPSAtZHluYW1pYyAtZHluYW1pY2xpYiAtYWxsX2xvYWQgLWZwaWMKKyAgdGxzX3NvX0xEQURECQk9IGBwd2RgL3RsczIuc28KKyBlbHNlCistIHRsc19zb19MREZMQUdTCQk9IC1XbCwtcnBhdGgsJChhYnNfdG9wX2J1aWxkZGlyKS9ub25lL3Rlc3RzIC1zaGFyZWQgLWZQSUMKKysgdGxzX3NvX0xERkxBR1MJCT0gLXNoYXJlZCAtZlBJQworICB0bHNfc29fTERBREQJCT0gdGxzMi5zbworIGVuZGlmCisgdGxzX3NvX0NGTEFHUwkJPSAkKEFNX0NGTEFHUykgLWZQSUMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy92YWxncmluZC92YWxncmluZF8zLjEwLjEuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YmE5NzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvdmFsZ3JpbmQvdmFsZ3JpbmRfMy4xMC4xLmJiCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIlZhbGdyaW5kIG1lbW9yeSBkZWJ1Z2dlciBhbmQgaW5zdHJ1bWVudGF0aW9uIGZyYW1ld29yayIKK0hPTUVQQUdFID0gImh0dHA6Ly92YWxncmluZC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vdmFsZ3JpbmQub3JnL3N1cHBvcnQvYnVnX3JlcG9ydHMuaHRtbCIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3B1Yl90b29sX2Jhc2ljcy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjk7bWQ1PWU3MDcxOTI5YTUwZDRiMGZjMjdhMzAxNGIzMTViMGY3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvdmFsZ3JpbmQuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTU2O21kNT05MmRmOGExYmRlNTZmZTJhZjcwOTMxZmY1NWY2NjIyZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkRPQ1M7bWQ1PThmZGViNWFiZGIyMzVhMDhlNzY4MzVmOGYzMjYwMjE1IgorCitYMTFERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgorREVQRU5EUyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICcke1gxMURFUEVORFN9JywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHRlc3QnLCAnYm9vc3QnLCAnJywgZCl9IFwKKyAgICAgICAgIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudmFsZ3JpbmQub3JnL2Rvd25sb2Fkcy92YWxncmluZC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeGVkLXBlcmwtcGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGRlZC1zdXBwb3J0LWZvci1QUEMtaW5zdHJ1Y3Rpb25zLW1mYXRidS1tZmF0YmwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VwYnVpbGRmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ2xpYmMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZm9yY2Utbm9zdGFicy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtYXJtLXZhcmlhbnQtc3BlY2lmaWMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXBwYy10ZXN0cy1mYWlsaW5nLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3ZhbGdyaW5kLXJlbW92ZS1ycGF0aC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9lbmFibGUuYnVpbGRpbmcub24uNC54Lmtlcm5lbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hZGQtcHRlc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcGFzcy1tYWx0aXZlYy1vbmx5LWlmLWl0LXN1cHBvcnRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS12YWxncmluZC1FbmFibGUtcnRfc2lncGVuZGluZy1zeXNjYWxsLW9uLXBwYzY0LWxpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2MGRkYWU5NjJiYzc5ZTdjOTVjZmM0NjY3MjQ1NzA3ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYTI1M2RjMjZkZGI2NjFiNjI2OWRmNTgxNDRlZmY2MDdlYTNmNzZhOWJjZmU1NzRiMGM3NzI2ZTFkZmNiOTk3IgorCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0fG1pcHN8cG93ZXJwY3xwb3dlcnBjNjQpLiotbGludXgnCitDT01QQVRJQkxFX0hPU1RfYXJtdjdhID0gJ2FybS4qLWxpbnV4JworCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIi0tZW5hYmxlLXRscyAtLXdpdGhvdXQtbXBpY2MiCitFWFRSQV9PRUNPTkZfYXJtdjdhID0gIi0tZW5hYmxlLXRscyAtaG9zdD1hcm12Ny1ub25lLWxpbnV4LWdudWVhYmkgLS13aXRob3V0LW1waWNjIgorRVhUUkFfT0VDT05GICs9ICIke0BbJy0tZW5hYmxlLW9ubHkzMmJpdCcsJy0tZW5hYmxlLW9ubHk2NGJpdCddW2QuZ2V0VmFyKCdTSVRFSU5GT19CSVRTJywgVHJ1ZSkgIT0gJzMyJ119IgorRVhUUkFfT0VNQUtFID0gIi13IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgaW5zdGFsbCAtbSA2NDQgJHtCfS9kZWZhdWx0LnN1cHAgJHtEfS8ke2xpYmRpcn0vdmFsZ3JpbmQvCit9CisKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS8ke1BOfS8qLy5kZWJ1Zy8qIgorCisjIHZhbGdyaW5kIG5lZWRzIGRlYnVnIGluZm9ybWF0aW9uIGZvciBsZC5zbyBhdCBydW50aW1lIGluIG9yZGVyIHRvCisjIHJlZGlyZWN0IGZ1bmN0aW9ucyBsaWtlIHN0cmxlbi4KK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1RDTElCQ30tZGJnIgorCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAiIHNlZCBwZXJsIGdsaWJjLXV0aWxzIHBlcmwtbW9kdWxlLWZpbGUtZ2xvYiIKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKyAgICBvZV9ydW5tYWtlIGNoZWNrIENGTEFHUz0iJHtDRkxBR1N9IC1PMCIgQ1hYRkxBR1M9IiR7Q1hYRkxBR1N9IC1PMCIKK30KKworCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgIGNobW9kICt4ICR7Qn0vdGVzdHMvdmdfcmVndGVzdAorCisgICAgIyBUaGUgdGVzdCBhcHBsaWNhdGlvbiBiaW5hcmllcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkLgorICAgICMgR3JhYiB0aGVtIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgICAjCisgICAgIyBUaGUgcmVncmVzc2lvbiB0ZXN0cyByZXF1aXJlIHNjcmlwdHMgYW5kIGRhdGEgZmlsZXMgdGhhdCBhcmUgbm90CisgICAgIyBjb3BpZWQgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gIFRoZXkgbXVzdCBiZSBjb3BpZWQgZnJvbSB0aGUKKyAgICAjIHNvdXJjZSBkaXJlY3RvcnkuIAorICAgIHNhdmVkX2Rpcj0kUFdECisgICAgZm9yIHBhcmVudF9kaXIgaW4gJHtTfSAke0J9IDsgZG8KKyAgICAgICAgY2QgJHBhcmVudF9kaXIKKworICAgICAgICAjIGV4Y2x1ZGUgc2hlbGwgb3IgdGhlIHBhY2thZ2Ugd29uJ3QgaW5zdGFsbAorICAgICAgICBybSAtcmYgbm9uZS90ZXN0cy9zaGVsbCogMj4vZGV2L251bGwKKworICAgICAgICBzdWJkaXJzPSJ0ZXN0cyBjYWNoZWdyaW5kL3Rlc3RzIGNhbGxncmluZC90ZXN0cyBkcmQvdGVzdHMgaGVsZ3JpbmQvdGVzdHMgbWFzc2lmL3Rlc3RzIG1lbWNoZWNrL3Rlc3RzIG5vbmUvdGVzdHMiCisKKyAgICAgICAgIyBHZXQgdGhlIHZnIHRlc3Qgc2NyaXB0cywgZmlsdGVycywgYW5kIGV4cGVjdGVkIGZpbGVzCisgICAgICAgIGZvciBkaXIgaW4gJHN1YmRpcnMgOyBkbworICAgICAgICAgICAgZmluZCAkZGlyIHwgY3BpbyAtcHZkdSAke0R9JHtQVEVTVF9QQVRIfQorICAgICAgICBkb25lCisgICAgICAgIGNkICRzYXZlZF9kaXIKKyAgICBkb25lCisKKyAgICAjIGNsZWFuIG91dCBidWlsZCBhcnRpZmFjdHMgYmVmb3JlIGJ1aWxkaW5nIHRoZSBycG0KKyAgICBmaW5kICR7RH0ke1BURVNUX1BBVEh9IFwKKyAgICAgICAgIFwoIC1uYW1lICJNYWtlZmlsZSoiIFwKKyAgICAgICAgLW8gLW5hbWUgIioubyIgXAorICAgICAgICAtbyAtbmFtZSAiKi5jIiBcCisgICAgICAgIC1vIC1uYW1lICIqLlMiIFwKKyAgICAgICAgLW8gLW5hbWUgIiouaCIgXCkgXAorICAgICAgICAtZXhlYyBybSB7fSBcOworCisgICAgIyBuZWVkZWQgYnkgbWFzc2lmIHRlc3RzCisgICAgY3AgJHtCfS9tYXNzaWYvbXNfcHJpbnQgJHtEfSR7UFRFU1RfUEFUSH0vbWFzc2lmL21zX3ByaW50CisKKyAgICAjIGhhbmRsZSBtdWx0aWxpYgorICAgIHNlZCAtaSBzOkBsaWJkaXJAOiR7bGliZGlyfTpnICR7RH0ke1BURVNUX1BBVEh9L3J1bi1wdGVzdAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8vZmlsZXMvY2F0YWxvZy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI4ODMzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by9maWxlcy9jYXRhbG9nLnhtbApAQCAtMCwwICsxLDE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBjYXRhbG9nIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgorPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgorPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLm9yZy94bWwvIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9FTEVNRU5UUyBEb2NCb29rIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBYTUwgRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5OTAzMTUiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgQ0FMUyBUYWJsZSBNb2RlbCBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTEVNRU5UUyBEb2NCayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQm9vayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2siIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9FTlRJVElFUyBEb2NCayBYTUwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vTm9ybWFuIFdhbHNoLy9EVEQgRG9jQmsgWE1MIiBjYXRhbG9nPSIuL2RvY2Jvb2steG1sLnhtbCIvPgorPGRlbGVnYXRlUHVibGljIHB1YmxpY0lkU3RhcnRTdHJpbmc9Ii0vL05vcm1hbCBXYWxzaC8vRXhjaGFuZ2UgVGFibGUgTW9kZWwgMTk5NjA0MzAiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iLS8vT0FTSVMvL0RURCBEb2NCb29rIENBTFMgVGFibGUgTW9kZWwiIGNhdGFsb2c9Ii4vZG9jYm9vay14bWwueG1sIi8+Cis8ZGVsZWdhdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC8iIGNhdGFsb2c9Ii4vZG9jYm9vay14c2wueG1sIi8+Cis8ZGVsZWdhdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsLyIgY2F0YWxvZz0iLi9kb2Nib29rLXhzbC54bWwiLz4KKzwvY2F0YWxvZz4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0by0wLjAuMjYvY29uZmlndXJlLmluLWRyb3AtdGhlLXRlc3Qtb2YteG1sbGludC1hbmQteHNsdHByb2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTQ3YTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG8tMC4wLjI2L2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2NvbmZpZ3VyZS5pbjogZHJvcCB0aGUgdGVzdCBvZiB4bWxsaW50IGFuZCB4c2x0cHJvYworCitUaGUgdGVzdCBpcyB1bm5lY2Vzc2FyeSwgdGhlIHhtbGxpbnQgYW5kIHhzbHRwcm9jIHdlcmUgZXhwbGljaXRseQorYWRkZWQgdG8gUkRFUEVORFMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmluIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC00MiwxMCArNDIsMTAgQEAgQUNfQVJHX1ZBUihbTE9DQUxFXSwgW05hbWUgYW5kIHBhdGggb2YgdGhlIGBsb2NhbGUnIHByb2dyYW0uXSkKKyBBQ19QQVRIX1BST0coW0xPQ0FMRV0sIFtsb2NhbGVdLCBbbG9jYWxlXSkKKyAKKyBBQ19BUkdfVkFSKFtYTUxMSU5UXSwgW05hbWUgYW5kIHBhdGggb2YgdGhlIGB4bWxsaW50JyBwcm9ncmFtLl0pCistQUNfUEFUSF9QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisrZG5sIEFDX1BBVEhfUFJPRyhbWE1MTElOVF0sIFt4bWxsaW50XSwgW3htbGxpbnRdKQorIAorIEFDX0FSR19WQVIoW1hTTFRQUk9DXSwgW05hbWUgYW5kIHBhdGggb2YgdGhlIGB4c2x0cHJvYycgcHJvZ3JhbS5dKQorLUFDX1BBVEhfUFJPRyhbWFNMVFBST0NdLCBbeHNsdHByb2NdLCBbeHNsdHByb2NdKQorK2RubCBBQ19QQVRIX1BST0coW1hTTFRQUk9DXSwgW3hzbHRwcm9jXSwgW3hzbHRwcm9jXSkKKyAKKyBkbmwKKyBkbmwgdG9vbGNoYWlucworLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1kZXZ0b29scy94bWx0by94bWx0b18wLjAuMjYuYmIgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTAxODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveG1sdG8veG1sdG9fMC4wLjI2LmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiQSBzaGVsbC1zY3JpcHQgdG9vbCBmb3IgY29udmVydGluZyBYTUwgZmlsZXMgdG8gdmFyaW91cyBmb3JtYXRzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3htbHRvLyIKK1NFQ1RJT04gPSAiZG9jcy94bWx0byIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy94L20veG1sdG8veG1sdG8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5pbi1kcm9wLXRoZS10ZXN0LW9mLXhtbGxpbnQtYW5kLXhzbHRwcm9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NhdGFsb2cueG1sIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2NhOGJlNzg3YmEwMWUwMGM2MThjYjM5MGM5ODhiOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZmQ4ZDJhMjYwNzdiZTFkNTU2NmRmZTIyZGQ2NjA5OWFlNGY0NjAwZGVhOTdkNmUxMTNhMmNjNWI4NzA4OTc3IgorCitpbmhlcml0IGF1dG90b29scworCisjIHhtbHRvIG5lZWRzIGdldG9wdC94bWxsaW50L3hzbHRwcm9jL2Jhc2ggYXQgcnVudGltZQorUkRFUEVORFNfJHtQTn0gPSAiZG9jYm9vay14bWwtZHRkNCBcCisgICAgICAgICAgICAgICAgICBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cyBcCisgICAgICAgICAgICAgICAgICB1dGlsLWxpbnV4IFwKKyAgICAgICAgICAgICAgICAgIGxpYnhtbDIgXAorICAgICAgICAgICAgICAgICAgYmFzaCBcCisiCitSREVQRU5EU18ke1BOfV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBcCisgICAgICAgICAgICAgICAgICBsaWJ4c2x0LWJpbiBcCisiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiBYTUxMSU5UPXhtbGxpbnQgWFNMVFBST0M9eHNsdHByb2MiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0veG1sLworICAgIGluc3RhbGwgLW0gNzU1ICAke1dPUktESVJ9L2NhdGFsb2cueG1sICR7RH0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorICAgIGNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L3htbHRvIFhNTF9DQVRBTE9HX0ZJTEVTPSR7c3lzY29uZmRpcn0veG1sL2NhdGFsb2cueG1sCit9CisKK2RvX3BvcHVsYXRlX3N5c3Jvb3RbcmRlcHRhc2tdID0gImRvX3BvcHVsYXRlX3N5c3Jvb3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZGV2dG9vbHMveWFzbS95YXNtXzEuMy4wLmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODcwMmVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3lhc20veWFzbV8xLjMuMC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIng4NiAoU1NFKSBhc3NlbWJsZXIgc3VwcG9ydGluZyBOQVNNIGFuZCBHQVMtc3ludGF4ZXMiCitMSUNFTlNFID0gIkJTRCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudG9ydGFsbC5uZXQvcHJvamVjdHMveWFzbS8iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWExMmQ4OTAzNTA4ZmI2YmZkNDlkOGQ4MmM2MTcwZGQ5IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cudG9ydGFsbC5uZXQvcHJvamVjdHMveWFzbS9yZWxlYXNlcy8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzllNTg2NzUxZmY3ODliMzRiMWYyMWQ1NzJkOTZhZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzZGNlNjYwMWI0OTVmNWIzZDQ1YjU5ZjdkMjQ5MmEzNDBlZTdlODRiNWJlY2ExN2U0OGY4NjI1MDJiZDU2MDNmIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiIGIvbWV0YS9yZWNpcGVzLWRldnRvb2xzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtbmF0aXZlXzEuMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMWMwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZGV2dG9vbHMvemlzb2ZzLXRvb2xzL3ppc29mcy10b29scy1uYXRpdmVfMS4wLjguYmIKQEAgLTAsMCArMSwyMCBAQAorIyB6aXNvZnMtdG9vbHMtbmF0aXZlIE9FIGJ1aWxkIGZpbGUKKyMgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIGNyZWF0aW5nIGNvbXByZXNzZWQgQ0QtUk9NIGZpbGVzeXN0ZW1zIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVjb2RlLmNvbS9wcm9qZWN0cy96aXNvZnMtdG9vbHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiemxpYi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL3ppc29mcy10b29scy96aXNvZnMtdG9vbHMtJHtQVn0udGFyLmJ6Mi8yZDBlZDhjOWExZjYwYjQ1Zjk0OWIxMzZmOWJlMWY2Yy96aXNvZnMtdG9vbHMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gIjJkMGVkOGM5YTFmNjBiNDVmOTQ5YjEzNmY5YmUxZjZjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFlNGU1M2U0OTE0OTM0ZDQxNjYwMjQ4ZmI1OWQzYzg3NjFmMWYxZmQxODBkNWVjOTkzYzE3ZGRiM2FmZDA0ZjMiCisKK2luaGVyaXQgbmF0aXZlCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExST09UPSR7RH0gYmluZGlyPSR7YmluZGlyfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvMDAwMS1yZW1vdmUtZ2xpYmMtYXNzdW1wdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FlMjhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0LzAwMDEtcmVtb3ZlLWdsaWJjLWFzc3VtcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3ZjgxMWQ5YzRlYmM5NDQ0ZTYxM2UyNTFjMzFkNmJmNTM3YTI0ZGMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTY6MzU6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIGdsaWJjIGFzc3VtcHRpb24KKworZ2xpYmMgdGltZS5oIGhlYWRlciBoYXMgYW4gdW5kb2N1bWVudGVkIF9faXNsZWFwIG1hY3JvCit0aGF0IHdlIGFyZSB1c2luZyBhbmYgbXVzbCBpcyBtaXNzaW5nIGl0LgorU2luY2UgaXQgaXMgdW5kb2N1bWVudGVkICYgZG9lcyBub3QgYXBwZWFyCitvbiBhbnkgb3RoZXIgbGliYywgc3RvcCB1c2luZyBpdCBhbmQganVzdCBkZWZpbmUgdGhlIG1hY3JvIGluCitsb2NhbGx5ICBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIHBhcnNldGltZS55IHwgMTEgKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcGFyc2V0aW1lLnkgYi9wYXJzZXRpbWUueQoraW5kZXggNzAwNWU4OC4uMzI0ZTZkMyAxMDA2NDQKKy0tLSBhL3BhcnNldGltZS55CisrKysgYi9wYXJzZXRpbWUueQorQEAgLTgsNiArOCw5IEBACisgCisgI2RlZmluZSBZWURFQlVHIDEKKyAKKysjZGVmaW5lIGlzX2xlYXBfeWVhcih5KSBcCisrICAgICgoeSkgJSA0ID09IDAgJiYgKCh5KSAlIDEwMCAhPSAwIHx8ICh5KSAlIDQwMCA9PSAwKSkKKysKKyBzdHJ1Y3QgdG0gZXhlY3RtOworIHN0YXRpYyBpbnQgaXNnbXQ7Cisgc3RhdGljIGludCB5ZWFyc3BlYzsKK0BAIC0yMTcsOCArMjIwLDggQEAgZGF0ZSAgICAgICAgICAgIDogbW9udGhfbmFtZSBkYXlfbnVtYmVyCisgCQkJCSBtbnVtID09IDEyKSAmJiBkbnVtID4gMzEpCisgCQkJICAgIHx8ICgobW51bSA9PSAgNCB8fCBtbnVtID09ICA2IHx8IG1udW0gPT0gIDkgfHwKKyAJCQkgICAgICAgICBtbnVtID09IDExKSAmJiBkbnVtID4gMzApCistCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgX19pc2xlYXAoeW51bSsxOTAwKSkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI4ICYmICFfX2lzbGVhcCh5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjkgJiYgIGlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorKwkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIWlzX2xlYXBfeWVhcih5bnVtKzE5MDApKQorIAkJCSAgICkKKyAJCQl7CisgCQkJICAgIHl5ZXJyb3IoIkVycm9yIGluIGRheSBvZiBtb250aCIpOworQEAgLTI2MSw4ICsyNjQsOCBAQCBkYXRlICAgICAgICAgICAgOiBtb250aF9uYW1lIGRheV9udW1iZXIKKyAJCQkJIG1udW0gPT0gMTIpICYmIGRudW0gPiAzMSkKKyAJCQkgICAgfHwgKChtbnVtID09ICA0IHx8IG1udW0gPT0gIDYgfHwgbW51bSA9PSAgOSB8fAorIAkJCSAgICAgICAgIG1udW0gPT0gMTEpICYmIGRudW0gPiAzMCkKKy0JCQkgICAgfHwgKG1udW0gPT0gIDIgJiYgZG51bSA+IDI5ICYmICBfX2lzbGVhcCh5bnVtKzE5MDApKQorLQkJCSAgICB8fCAobW51bSA9PSAgMiAmJiBkbnVtID4gMjggJiYgIV9faXNsZWFwKHludW0rMTkwMCkpCisrCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOSAmJiAgaXNfbGVhcF95ZWFyKHludW0rMTkwMCkpCisrCQkJICAgIHx8IChtbnVtID09ICAyICYmIGRudW0gPiAyOCAmJiAhaXNfbGVhcF95ZWFyKHludW0rMTkwMCkpCisgCQkJICAgKQorIAkJCXsKKyAJCQkgICAgeXllcnJvcigiRXJyb3IgaW4gZGF5IG9mIG1vbnRoIik7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9hdGQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2EzNzliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5pbml0CkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorIworIyBTdGFydHMgYXQgZGFlbW9uCisjCisKK3VtYXNrIDA3NworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworc3RhcnQoKSB7CisJZWNobyAtbiAiU3RhcnRpbmcgYXRkOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi9hdGQucGlkIC0tYmFja2dyb3VuZCAtLWV4ZWMgL3Vzci9zYmluL2F0ZCAtLSAtZgorCWVjaG8gIk9LIgorfQorc3RvcCgpIHsKKwllY2hvIC1uICJTdG9wcGluZyBhdGQ6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vYXRkLnBpZAorCWVjaG8gIk9LIgorfQorcmVzdGFydCgpIHsKKwlzdG9wCisJc3RhcnQKK30KKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCXN0YXJ0CisJOzsKKyAgc3RvcCkKKwlzdG9wCisJOzsKKyAgcmVzdGFydHxyZWxvYWQpCisJcmVzdGFydAorCTs7CisgIHN0YXR1cykKKwlzdGF0dXMgL3Vzci9zYmluL2F0ZAorCTs7CisgICopCisJZWNobyAkIlVzYWdlOiAkMCB7c3RhcnR8c3RvcHxyZXN0YXJ0fHN0YXR1c30iCisJZXhpdCAxCitlc2FjCisKK2V4aXQgJD8KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzg0NDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2F0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsOSBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1Kb2Igc3Bvb2xpbmcgdG9vbHMKK0FmdGVyPXN5c2xvZy50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2F0ZCAtZgorCitbSW5zdGFsbF0KK1dhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTVlZmVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2NvbmZpZ3VyZS1hZGQtZW5hYmxlLXBhbS5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGF0LTMuMS4xMi9jb25maWd1cmUuYWMJMjAxMS0wNi0yMyAxNDo1MTowMy42NTM1NzI5NDUgKzA4MDAKKysrKyBhdC0zLjEuMTIvY29uZmlndXJlLmFjLm5ldwkyMDExLTA2LTI3IDE2OjEyOjE0LjkwMzU3Mjk0NSArMDgwMAorQEAgLTgxLDEwICs4MSwxOCBAQAorIEFDX0ZVTkNfVlBSSU5URgorIEFDX0ZVTkNfR0VUTE9BREFWRworIEFDX0NIRUNLX0ZVTkNTKGdldGN3ZCBta3RpbWUgc3RyZnRpbWUgc2V0cmV1aWQgc2V0cmVzdWlkIHNpZ2FjdGlvbiB3YWl0cGlkKQorKworK0FDX0FSR19XSVRIKFtwYW1dLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtcGFtXSwgW3dpdGhvdXQgUEFNIHN1cHBvcnRdKV0pCisrCisraWYgdGVzdCAieCR3aXRoX3BhbSIgIT0geG5vOyB0aGVuCisgQUNfQ0hFQ0tfSEVBREVSUyhzZWN1cml0eS9wYW1fYXBwbC5oLCBbCisgICBQQU1MSUI9Ii1scGFtIgorLSAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSkKKy1dKQorKyAgQUNfREVGSU5FKEhBVkVfUEFNLCAxLCBbRGVmaW5lIHRvIDEgZm9yIFBBTSBzdXBwb3J0XSldLAorKyAgIFtpZiB0ZXN0ICJ4JHdpdGhfcGFtIiA9IHh5ZXM7IHRoZW4KKysgICBBQ19NU0dfRVJST1IoW1BBTSBzZWxlY3RlZCBidXQgc2VjdXJpdHkvcGFtX21pc2MuaCBub3QgZm91bmRdKQorKyAgIGZpXSkKKytmaQorCisgZG5sIENoZWNraW5nIGZvciBwcm9ncmFtcworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvZmlsZV9yZXBsYWNlbWVudF93aXRoX2dwbHYyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWVmMDAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpbGVfcmVwbGFjZW1lbnRfd2l0aF9ncGx2Mi5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworcG9zaXh0bS5bY2hdIGZpbGVzIGFyZSByZXBsYWNlZCB3aXRoIGdwbHYyIHZlcnNpb24gZnJvbSB0aGVzZSBsb2NhdGlvbnM6CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5jO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Z251bGliLmdpdDthPWJsb2I7Zj1saWIvcG9zaXh0bS5oO2hiPTU2NjFhYjlkNDk1MTJiNGNmM2MxOWNhYTExYmI1ODFkOGNlNTYxYmEgCisKK3VwZGF0ZSB0aGUgQ29weXJpZ2h0IGZpbGUgaW5mb3JtYXRpb24gdG8gcmVmbGVjdCB0aGUgcmVwbGFjZWQgZmlsZXMuCisKK0RhdGU6IDIwMTAvMDgvMzEKK05pdGluIEEgS2FtYmxlIG5pdGluLmEua2FtYmxlQGludGVsLmNvbQorCitJbmRleDogYXQtMy4xLjEyL0NvcHlyaWdodAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL0NvcHlyaWdodAorKysrIGF0LTMuMS4xMi9Db3B5cmlnaHQKK0BAIC0zMSwxMCArMzEsMTAgQEAgVGhlIGZpbGVzIHBvc2l4dG0uYyBhbmQgcG9zaXh0bS5oIGhhdmUgdAorICAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSwgMTk5OCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyAgICAyMDA1LCAyMDA2LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisgCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKysgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L2ZpeF9wYXJhbGxlbF9idWlsZF9lcnJvci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZmZjNlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorbWFrZSAtaiB3YXMgZmFpbGluZyBzb21ldGltZXNhIGxpa2UgdGhpcworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2hvbWUvbml0aW4vYnVpbGQvYnVpbGQwL3RtcC9zeXNyb290cy9pNTg2LXBva3ktbGludXggLUkuIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgLW8gYXRkIGF0ZC5vIGRhZW1vbi5vICAtbGZsICAtbHBhbSAtV2wsLU8xIC1XbCwtLWFzLW5lZWRlZAorfCBwYXJzZXRpbWUubDo1OjE5OiBmYXRhbCBlcnJvcjogeS50YWIuaDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBjb21waWxhdGlvbiB0ZXJtaW5hdGVkLgorfCBtYWtlOiAqKiogW2xleC55eS5vXSBFcnJvciAxCit8IG1ha2U6ICoqKiBXYWl0aW5nIGZvciB1bmZpbmlzaGVkIGpvYnMuLi4uCisKK0ZpeGVkIHRoZSBpc3N1ZSBieSBhZGRpbmcgYSBkZXBlbmRlbmN5IGluIHRoZSBtYWtlZmlsZS4KK05pdGluIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEwLzA5LzAyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IGF0LTMuMS4xMi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xMi5vcmlnL01ha2VmaWxlLmluCisrKysgYXQtMy4xLjEyL01ha2VmaWxlLmluCitAQCAtODMsNiArODMsOCBAQCB5LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisgbGV4Lnl5LmM6IHBhcnNldGltZS5sCisgCSQoTEVYKSAtaSBwYXJzZXRpbWUubAorIAorK3BhcnNldGltZS5sOiB5LnRhYi5oCisrCisgYXRydW46IGF0cnVuLmluCisgCWNvbmZpZ3VyZQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L21ha2VmaWxlLWZpeC1wYXJhbGxlbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMyYTRjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSAxNTBiNjNhOTM2YWY3MWI5OTJhM2E3YjBmYzJkMjQ5N2U1MWZjODAwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDI4IEphbiAyMDE1IDIzOjUyOjAwIC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBmaXggZm9yIHBhcmFsbGVsIGJ1aWxkCisKK0ZpeGVkOgoreS50YWIuYzoxMDAxOjA6IGVycm9yOiB1bnRlcm1pbmF0ZWQgI2lmCisKK0xldCAiJChZQUNDKSAtZCBwYXJzZXRpbWUueSIgb25seSBydW4gb25jZSB3aWxsIGZpeCB0aGUgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAyYTliOTE4Li5hYTdjMDRhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNzUsNyArNzUsOSBAQCBhdDogJChBVE9CSkVDVFMpCisgYXRkOiAkKFJVTk9CSkVDVFMpCisgCSQoQ0MpICQoTERGTEFHUykgLW8gYXRkICQoUlVOT0JKRUNUUykgJChMSUJTKSAkKFBBTUxJQikKKyAKKy15LnRhYi5jIHkudGFiLmg6IHBhcnNldGltZS55CisreS50YWIuaDogeS50YWIuYworKworK3kudGFiLmM6IHBhcnNldGltZS55CisgCSQoWUFDQykgLWQgcGFyc2V0aW1lLnkKKyAKKyBsZXgueXkuYzogcGFyc2V0aW1lLmwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcGFtLmNvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVjZWI5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wYW0uY29uZi5wYXRjaApAQCAtMCwwICsxLDI3IEBACitvZSBkb2Vzbid0IHN1cHBvcnQgIkBpbmNsdWRlIiwgdXNlIHRoZSBjb25jcmV0ZSBkaXJlY3RpdmUgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorSW5kZXg6IGF0LTMuMS4xNS9wYW0uY29uZgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGF0LTMuMS4xNS5vcmlnL3BhbS5jb25mCisrKysgYXQtMy4xLjE1L3BhbS5jb25mCitAQCAtMSwxMCArMSwxMSBAQAorICMKKyAjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgYXQgZGFlbW9uCisgIworKyAKKythdXRoICAgIHJlcXVpcmVkICAgIHBhbV9lbnYuc28KKythdXRoICAgIGluY2x1ZGUgICAgIGNvbW1vbi1hdXRoCisrYWNjb3VudCBpbmNsdWRlICAgICBjb21tb24tYWNjb3VudAorK3Nlc3Npb24gaW5jbHVkZSAgICAgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9saW1pdHMuc28KKytzZXNzaW9uIHJlcXVpcmVkICAgIHBhbV9sb2dpbnVpZC5zbworIAorLWF1dGgJcmVxdWlyZWQJcGFtX2Vudi5zbworLUBpbmNsdWRlIGNvbW1vbi1hdXRoCistQGluY2x1ZGUgY29tbW9uLWFjY291bnQKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xvZ2ludWlkLnNvCistQGluY2x1ZGUgY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKKy1zZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxNGJhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdC9hdC9wb3NpeHRtLmMKQEAgLTAsMCArMSwzMjggQEAKKy8qIFBhcnNlIGRhdGVzIGZvciB0b3VjaCBhbmQgZGF0ZS4KKworICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkwLCAxOTkxLCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAorICAgMjAwNSwgMjAwNiwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlICJwb3NpeHRtLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWYgVVNFX1VOTE9DS0VEX0lPCisjIGluY2x1ZGUgInVubG9ja2VkLWlvLmgiCisjZW5kaWYKKworLyogSVNESUdJVCBkaWZmZXJzIGZyb20gaXNkaWdpdCwgYXMgZm9sbG93czoKKyAgIC0gSXRzIGFyZyBtYXkgYmUgYW55IGludCBvciB1bnNpZ25lZCBpbnQ7IGl0IG5lZWQgbm90IGJlIGFuIHVuc2lnbmVkIGNoYXIKKyAgICAgb3IgRU9GLgorICAgLSBJdCdzIHR5cGljYWxseSBmYXN0ZXIuCisgICBQT1NJWCBzYXlzIHRoYXQgb25seSAnMCcgdGhyb3VnaCAnOScgYXJlIGRpZ2l0cy4gIFByZWZlciBJU0RJR0lUIHRvCisgICBpc2RpZ2l0IHVubGVzcyBpdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGxvY2FsZSdzIGRlZmluaXRpb24KKyAgIG9mIGBkaWdpdCcgZXZlbiB3aGVuIHRoZSBob3N0IGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVguICAqLworI2RlZmluZSBJU0RJR0lUKGMpICgodW5zaWduZWQgaW50KSAoYykgLSAnMCcgPD0gOSkKKwordGltZV90IG1rdGltZSAoKTsKKworLyoKKyAgUE9TSVggcmVxdWlyZXM6CisKKyAgdG91Y2ggLXQgW1tDQ11ZWV1tbWRkaGhtbVsuc3NdIEZJTEUuLi4KKyAgICA4LCAxMCwgb3IgMTIgZGlnaXRzLCBmb2xsb3dlZCBieSBvcHRpb25hbCAuc3MKKyAgICAoUERTX0xFQURJTkdfWUVBUiB8IFBEU19DRU5UVVJZIHwgUERTX1NFQ09ORFMpCisKKyAgdG91Y2ggbW1kZGhobW1bWVldIEZJTEUuLi4gKG9ic29sZXRlZCBieSBQT1NJWCAxMDAzLjEtMjAwMSkKKyAgICA4IG9yIDEwIGRpZ2l0cywgWVkgKGlmIHByZXNlbnQpIG11c3QgYmUgaW4gdGhlIHJhbmdlIDY5LTk5CisgICAgKFBEU19UUkFJTElOR19ZRUFSIHwgUERTX1BSRV8yMDAwKQorCisgIGRhdGUgbW1kZGhobW1bW0NDXVlZXQorICAgIDgsIDEwLCBvciAxMiBkaWdpdHMKKyAgICAoUERTX1RSQUlMSU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSkKKworKi8KKworc3RhdGljIGludAoreWVhciAoc3RydWN0IHRtICp0bSwgY29uc3QgaW50ICpkaWdpdF9wYWlyLCBzaXplX3QgbiwgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKQoreworICBzd2l0Y2ggKG4pCisgICAgeworICAgIGNhc2UgMToKKyAgICAgIHRtLT50bV95ZWFyID0gKmRpZ2l0X3BhaXI7CisgICAgICAvKiBEZWR1Y2UgdGhlIGNlbnR1cnkgYmFzZWQgb24gdGhlIHllYXIuCisJIFBPU0lYIHJlcXVpcmVzIHRoYXQgMDAtNjggYmUgaW50ZXJwcmV0ZWQgYXMgMjAwMC0yMDY4LAorCSBhbmQgdGhhdCA2OS05OSBiZSBpbnRlcnByZXRlZCBhcyAxOTY5LTE5OTkuICAqLworICAgICAgaWYgKGRpZ2l0X3BhaXJbMF0gPD0gNjgpCisJeworCSAgaWYgKHN5bnRheF9iaXRzICYgUERTX1BSRV8yMDAwKQorCSAgICByZXR1cm4gMTsKKwkgIHRtLT50bV95ZWFyICs9IDEwMDsKKwl9CisgICAgICBicmVhazsKKworICAgIGNhc2UgMjoKKyAgICAgIGlmICghIChzeW50YXhfYml0cyAmIFBEU19DRU5UVVJZKSkKKwlyZXR1cm4gMTsKKyAgICAgIHRtLT50bV95ZWFyID0gZGlnaXRfcGFpclswXSAqIDEwMCArIGRpZ2l0X3BhaXJbMV0gLSAxOTAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDA6CisgICAgICB7CisJdGltZV90IG5vdzsKKwlzdHJ1Y3QgdG0gKnRtcDsKKworCS8qIFVzZSBjdXJyZW50IHllYXIuICAqLworCXRpbWUgKCZub3cpOworCXRtcCA9IGxvY2FsdGltZSAoJm5vdyk7CisJaWYgKCEgdG1wKQorCSAgcmV0dXJuIDE7CisJdG0tPnRtX3llYXIgPSB0bXAtPnRtX3llYXI7CisgICAgICB9CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBhYm9ydCAoKTsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3Bvc2l4X3RpbWVfcGFyc2UgKHN0cnVjdCB0bSAqdG0sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgY29uc3QgY2hhciAqZG90ID0gTlVMTDsKKyAgaW50IHBhaXJbNl07CisgIGludCAqcDsKKyAgc2l6ZV90IGk7CisKKyAgc2l6ZV90IHNfbGVuID0gc3RybGVuIChzKTsKKyAgc2l6ZV90IGxlbiA9ICgoKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpICYmIChkb3QgPSBzdHJjaHIgKHMsICcuJykpKQorCQk/IChzaXplX3QpIChkb3QgLSBzKQorCQk6IHNfbGVuKTsKKworICBpZiAobGVuICE9IDggJiYgbGVuICE9IDEwICYmIGxlbiAhPSAxMikKKyAgICByZXR1cm4gMTsKKworICBpZiAoZG90KQorICAgIHsKKyAgICAgIGlmICghKHN5bnRheF9iaXRzICYgUERTX1NFQ09ORFMpKQorCXJldHVybiAxOworCisgICAgICBpZiAoc19sZW4gLSBsZW4gIT0gMykKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIGlmICghSVNESUdJVCAoc1tpXSkpCisgICAgICByZXR1cm4gMTsKKworICBsZW4gLz0gMjsKKyAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgIHBhaXJbaV0gPSAxMCAqIChzWzIqaV0gLSAnMCcpICsgc1syKmkgKyAxXSAtICcwJzsKKworICBwID0gcGFpcjsKKyAgaWYgKHN5bnRheF9iaXRzICYgUERTX0xFQURJTkdfWUVBUikKKyAgICB7CisgICAgICBpZiAoeWVhciAodG0sIHAsIGxlbiAtIDQsIHN5bnRheF9iaXRzKSkKKwlyZXR1cm4gMTsKKyAgICAgIHAgKz0gbGVuIC0gNDsKKyAgICAgIGxlbiA9IDQ7CisgICAgfQorCisgIC8qIEhhbmRsZSA4IGRpZ2l0cyB3b3J0aCBvZiBgTU1ERGhobW0nLiAgKi8KKyAgdG0tPnRtX21vbiA9ICpwKysgLSAxOworICB0bS0+dG1fbWRheSA9ICpwKys7CisgIHRtLT50bV9ob3VyID0gKnArKzsKKyAgdG0tPnRtX21pbiA9ICpwKys7CisgIGxlbiAtPSA0OworCisgIC8qIEhhbmRsZSBhbnkgdHJhaWxpbmcgeWVhci4gICovCisgIGlmIChzeW50YXhfYml0cyAmIFBEU19UUkFJTElOR19ZRUFSKQorICAgIHsKKyAgICAgIGlmICh5ZWFyICh0bSwgcCwgbGVuLCBzeW50YXhfYml0cykpCisJcmV0dXJuIDE7CisgICAgfQorCisgIC8qIEhhbmRsZSBzZWNvbmRzLiAgKi8KKyAgaWYgKCFkb3QpCisgICAgeworICAgICAgdG0tPnRtX3NlYyA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgaW50IHNlY29uZHM7CisKKyAgICAgICsrZG90OworICAgICAgaWYgKCFJU0RJR0lUIChkb3RbMF0pIHx8ICFJU0RJR0lUIChkb3RbMV0pKQorCXJldHVybiAxOworICAgICAgc2Vjb25kcyA9IDEwICogKGRvdFswXSAtICcwJykgKyBkb3RbMV0gLSAnMCc7CisKKyAgICAgIHRtLT50bV9zZWMgPSBzZWNvbmRzOworICAgIH0KKworICByZXR1cm4gMDsKK30KKworLyogUGFyc2UgYSBQT1NJWC1zdHlsZSBkYXRlLCByZXR1cm5pbmcgdHJ1ZSBpZiBzdWNjZXNzZnVsLiAgKi8KKworYm9vbAorcG9zaXh0aW1lICh0aW1lX3QgKnAsIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBzeW50YXhfYml0cykKK3sKKyAgc3RydWN0IHRtIHRtMAorI2lmZGVmIGxpbnQKKyAgLyogUGxhY2F0ZSBnY2MtNCdzIC1XdW5pbml0aWFsaXplZC4KKyAgICAgcG9zaXhfdGltZV9wYXJzZSBmYWlscyB0byBzZXQgYWxsIG9mIHRtMCBvbmx5IHdoZW4gaXQgcmV0dXJucworICAgICBub256ZXJvIChkdWUgdG8geWVhcigpIHJldHVybmluZyBub256ZXJvKSwgYW5kIGluIHRoYXQgY2FzZSwKKyAgICAgdGhpcyBjb2RlIGRvZXNuJ3QgdXNlIHRoZSB0bTAgYXQgYWxsLiAgKi8KKyAgICA9IHsgMCwgfQorI2VuZGlmCisgICAgOworICBzdHJ1Y3QgdG0gdG0xOworICBzdHJ1Y3QgdG0gY29uc3QgKnRtOworICB0aW1lX3QgdDsKKworICBpZiAocG9zaXhfdGltZV9wYXJzZSAoJnRtMCwgcywgc3ludGF4X2JpdHMpKQorICAgIHJldHVybiBmYWxzZTsKKworICB0bTEgPSB0bTA7CisgIHRtMS50bV9pc2RzdCA9IC0xOworICB0ID0gbWt0aW1lICgmdG0xKTsKKworICBpZiAodCAhPSAodGltZV90KSAtMSkKKyAgICB0bSA9ICZ0bTE7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBta3RpbWUgcmV0dXJucyAtMSBmb3IgZXJyb3JzLCBidXQgLTEgaXMgYWxzbyBhIHZhbGlkIHRpbWVfdAorCSB2YWx1ZS4gIENoZWNrIHdoZXRoZXIgYW4gZXJyb3IgcmVhbGx5IG9jY3VycmVkLiAgKi8KKyAgICAgIHRtID0gbG9jYWx0aW1lICgmdCk7CisgICAgICBpZiAoISB0bSkKKwlyZXR1cm4gZmFsc2U7CisgICAgfQorCisgIC8qIFJlamVjdCBkYXRlcyBsaWtlICJTZXB0ZW1iZXIgMzEiIGFuZCB0aW1lcyBsaWtlICIyNTo2MSIuICAqLworICBpZiAoKHRtMC50bV95ZWFyIF4gdG0tPnRtX3llYXIpCisgICAgICB8ICh0bTAudG1fbW9uIF4gdG0tPnRtX21vbikKKyAgICAgIHwgKHRtMC50bV9tZGF5IF4gdG0tPnRtX21kYXkpCisgICAgICB8ICh0bTAudG1faG91ciBeIHRtLT50bV9ob3VyKQorICAgICAgfCAodG0wLnRtX21pbiBeIHRtLT50bV9taW4pCisgICAgICB8ICh0bTAudG1fc2VjIF4gdG0tPnRtX3NlYykpCisgICAgcmV0dXJuIGZhbHNlOworCisgICpwID0gdDsKKyAgcmV0dXJuIHRydWU7Cit9CisKKyNpZmRlZiBURVNUX1BPU0lYVElNRQorLyoKKyAgICBUZXN0IG1haW5seSB3aXRoIHN5bnRheF9iaXRzID09IDEzCisgICAgKGFrYTogKFBEU19MRUFESU5HX1lFQVIgfCBQRFNfQ0VOVFVSWSB8IFBEU19TRUNPTkRTKSkKKworICAgIFRoaXMgdGVzdCBkYXRhIGFzc3VtZXMgVW5pdmVyc2FsIFRpbWUsIGUuZy4sIFRaPSJVVEMwIi4KKworICAgIFRoaXMgdGVzdCBkYXRhIGFsc28gYXNzdW1lcyB0aGF0IHRpbWVfdCBpcyBzaWduZWQgYW5kIGlzIGF0IGxlYXN0CisgICAgMzkgYml0cyB3aWRlLCBzbyB0aGF0IGl0IGNhbiByZXByZXNlbnQgYWxsIHllYXJzIGZyb20gMDAwMCB0aHJvdWdoCisgICAgOTk5OS4gIEEgaG9zdCB3aXRoIDMyLWJpdCBzaWduZWQgdGltZV90IGNhbiByZXByZXNlbnQgb25seSB0aW1lCisgICAgc3RhbXBzIGluIHRoZSByYW5nZSAxOTAxLTEyLTEzIDIwOjQ1OjUyIHRocm91Z2ggMjAzOC0wMS0xOAorICAgIDAzOjE0OjA3IFVUQywgYXNzdW1pbmcgUE9TSVggdGltZV90IHdpdGggbm8gbGVhcCBzZWNvbmRzLCBzbyB0ZXN0CisgICAgY2FzZXMgb3V0c2lkZSB0aGlzIHJhbmdlIHdpbGwgbm90IHdvcmsgb24gc3VjaCBhIGhvc3QuCisKKyAgICBBbHNvLCB0aGUgZmlyc3QgdHdvIGxpbmVzIG9mIHRlc3QgZGF0YSBhc3N1bWUgdGhhdCB0aGUgY3VycmVudAorICAgIHllYXIgaXMgMjAwMi4KKworQkVHSU4tREFUQQorMTIxMzE0MTUuMTYgICAgIDEzICAgMTAzOTc4ODkxNiBGcmkgRGVjIDEzIDE0OjE1OjE2IDIwMDIKKzEyMTMxNDE1LjE2ICAgICAxMyAgIDEwMzk3ODg5MTYgRnJpIERlYyAxMyAxNDoxNToxNiAyMDAyCiswMDAwMDEwMTAwMDAuMDAgMTMgLTYyMTY3MTMyODAwIFN1biBKYW4gIDEgMDA6MDA6MDAgMDAwMAorMTkwMTEyMTMyMDQ1LjUyIDEzICAtMjE0NzQ4MzY0OCBGcmkgRGVjIDEzIDIwOjQ1OjUyIDE5MDEKKzE5MDExMjEzMjA0NS41MyAxMyAgLTIxNDc0ODM2NDcgRnJpIERlYyAxMyAyMDo0NTo1MyAxOTAxCisxOTAxMTIxMzIwNDYuNTIgMTMgIC0yMTQ3NDgzNTg4IEZyaSBEZWMgMTMgMjA6NDY6NTIgMTkwMQorMTkwMTEyMTMyMTQ1LjUyIDEzICAtMjE0NzQ4MDA0OCBGcmkgRGVjIDEzIDIxOjQ1OjUyIDE5MDEKKzE5MDExMjE0MjA0NS41MiAxMyAgLTIxNDczOTcyNDggU2F0IERlYyAxNCAyMDo0NTo1MiAxOTAxCisxOTAyMDExMzIwNDUuNTIgMTMgIC0yMTQ0ODA1MjQ4IE1vbiBKYW4gMTMgMjA6NDU6NTIgMTkwMgorMTk2OTEyMzEyMzU5LjU5IDEzICAgICAgICAgICAtMSBXZWQgRGVjIDMxIDIzOjU5OjU5IDE5NjkKKzE5NzAwMTAxMDAwMC4wMCAxMyAgICAgICAgICAgIDAgVGh1IEphbiAgMSAwMDowMDowMCAxOTcwCisxOTcwMDEwMTAwMDAuMDEgMTMgICAgICAgICAgICAxIFRodSBKYW4gIDEgMDA6MDA6MDEgMTk3MAorMTk3MDAxMDEwMDAxLjAwIDEzICAgICAgICAgICA2MCBUaHUgSmFuICAxIDAwOjAxOjAwIDE5NzAKKzE5NzAwMTAxMDEwMC4wMCAxMyAgICAgICAgIDM2MDAgVGh1IEphbiAgMSAwMTowMDowMCAxOTcwCisxOTcwMDEwMjAwMDAuMDAgMTMgICAgICAgIDg2NDAwIEZyaSBKYW4gIDIgMDA6MDA6MDAgMTk3MAorMTk3MDAyMDEwMDAwLjAwIDEzICAgICAgMjY3ODQwMCBTdW4gRmViICAxIDAwOjAwOjAwIDE5NzAKKzE5NzEwMTAxMDAwMC4wMCAxMyAgICAgMzE1MzYwMDAgRnJpIEphbiAgMSAwMDowMDowMCAxOTcxCisxOTcwMDEwMDAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMDAxMDAwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMDEwMDAwLjYwIDEzICAgICAgICAgICAgKiAqCisxOTcwMDEwMTAwNjAuMDAgMTMgICAgICAgICAgICAqICoKKzE5NzAwMTAxMjQwMC4wMCAxMyAgICAgICAgICAgICogKgorMTk3MDAxMzIwMDAwLjAwIDEzICAgICAgICAgICAgKiAqCisxOTcwMTMwMTAwMDAuMDAgMTMgICAgICAgICAgICAqICoKKzIwMzgwMTE5MDMxNC4wNiAxMyAgIDIxNDc0ODM2NDYgVHVlIEphbiAxOSAwMzoxNDowNiAyMDM4CisyMDM4MDExOTAzMTQuMDcgMTMgICAyMTQ3NDgzNjQ3IFR1ZSBKYW4gMTkgMDM6MTQ6MDcgMjAzOAorMjAzODAxMTkwMzE0LjA4IDEzICAgMjE0NzQ4MzY0OCBUdWUgSmFuIDE5IDAzOjE0OjA4IDIwMzgKKzk5OTkxMjMxMjM1OS41OSAxMyAyNTM0MDIzMDA3OTkgRnJpIERlYyAzMSAyMzo1OTo1OSA5OTk5CisxMTEyMTMxNDE1ICAgICAgMTMgICAxMzIzNzg1NzAwIFR1ZSBEZWMgMTMgMTQ6MTU6MDAgMjAxMQorMTExMjEzMTQxNS4xNiAgIDEzICAgMTMyMzc4NTcxNiBUdWUgRGVjIDEzIDE0OjE1OjE2IDIwMTEKKzIwMTExMjEzMTQxNS4xNiAxMyAgIDEzMjM3ODU3MTYgVHVlIERlYyAxMyAxNDoxNToxNiAyMDExCisxOTExMTIxMzE0MTUuMTYgMTMgIC0xODMxOTc0Mjg0IFdlZCBEZWMgMTMgMTQ6MTU6MTYgMTkxMQorMjAzNzEyMTMxNDE1LjE2IDEzICAgMjE0NDMyNjUxNiBTdW4gRGVjIDEzIDE0OjE1OjE2IDIwMzcKKzM3MTIxMzE0MTUuMTYgICAxMyAgIDIxNDQzMjY1MTYgU3VuIERlYyAxMyAxNDoxNToxNiAyMDM3Cis2ODEyMTMxNDE1LjE2ICAgMTMgICAzMTIyNjMzNzE2IFRodSBEZWMgMTMgMTQ6MTU6MTYgMjA2OAorNjkxMjEzMTQxNS4xNiAgIDEzICAgICAtMTU5MDI4NCBTYXQgRGVjIDEzIDE0OjE1OjE2IDE5NjkKKzcwMTIxMzE0MTUuMTYgICAxMyAgICAgMjk5NDU3MTYgU3VuIERlYyAxMyAxNDoxNToxNiAxOTcwCisxMjEzMTQxNTk5ICAgICAgIDIgICAgOTQ1MDk0NTAwIE1vbiBEZWMgMTMgMTQ6MTU6MDAgMTk5OQorMTIxMzE0MTUwMCAgICAgICAyICAgIDk3NjcxNjkwMCBXZWQgRGVjIDEzIDE0OjE1OjAwIDIwMDAKK0VORC1EQVRBCisKKyovCisKKyMgZGVmaW5lIE1BWF9CVUZGX0xFTiAxMDI0CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgY2hhciBidWZmW01BWF9CVUZGX0xFTiArIDFdOworCisgIGJ1ZmZbTUFYX0JVRkZfTEVOXSA9IDA7CisgIHdoaWxlIChmZ2V0cyAoYnVmZiwgTUFYX0JVRkZfTEVOLCBzdGRpbikgJiYgYnVmZlswXSkKKyAgICB7CisgICAgICBjaGFyIHRpbWVfc3RyW01BWF9CVUZGX0xFTl07CisgICAgICB1bnNpZ25lZCBpbnQgc3ludGF4X2JpdHM7CisgICAgICB0aW1lX3QgdDsKKyAgICAgIGlmIChzc2NhbmYgKGJ1ZmYsICIlcyAldSIsIHRpbWVfc3RyLCAmc3ludGF4X2JpdHMpICE9IDIpCisJcHJpbnRmICgiKlxuIik7CisgICAgICBlbHNlCisJeworCSAgcHJpbnRmICgiJS0xNXMgJTJ1ICIsIHRpbWVfc3RyLCBzeW50YXhfYml0cyk7CisJICBpZiAocG9zaXh0aW1lICgmdCwgdGltZV9zdHIsIHN5bnRheF9iaXRzKSkKKwkgICAgcHJpbnRmICgiJTEybGQgJXMiLCAobG9uZyBpbnQpIHQsIGN0aW1lICgmdCkpOworCSAgZWxzZQorCSAgICBwcmludGYgKCIlMTJzICVzIiwgIioiLCAiKlxuIik7CisJfQorICAgIH0KKyAgZXhpdCAoMCk7CisKK30KKyNlbmRpZgorDAorLyoKK0xvY2FsIFZhcmlhYmxlczoKK2NvbXBpbGUtY29tbWFuZDogImdjYyAtRFRFU1RfUE9TSVhUSU1FIC1nIC1PIC1XYWxsIC1XIHBvc2l4dG0uYyIKK0VuZDoKKyovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXQvcG9zaXh0bS5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTE3NDlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0L3Bvc2l4dG0uaApAQCAtMCwwICsxLDM3IEBACisvKiBQYXJzZSBkYXRlcyBmb3IgdG91Y2ggYW5kIGRhdGUuCisKKyAgIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMywgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogWWFjYy1iYXNlZCB2ZXJzaW9uIHdyaXR0ZW4gYnkgSmltIEtpbmdkb24gYW5kIERhdmlkIE1hY0tlbnppZS4KKyAgIFJld3JpdHRlbiBieSBKaW0gTWV5ZXJpbmcuICAqLworCisjaWZuZGVmIFBPU0lYVE1fSF8KKyMgZGVmaW5lIFBPU0lYVE1fSF8KKworIyBpbmNsdWRlIDxzdGRib29sLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKworLyogUE9TSVggRGF0ZSBTeW50YXggZmxhZ3MuICAqLworIyBkZWZpbmUgUERTX0xFQURJTkdfWUVBUiAxCisjIGRlZmluZSBQRFNfVFJBSUxJTkdfWUVBUiAyCisjIGRlZmluZSBQRFNfQ0VOVFVSWSA0CisjIGRlZmluZSBQRFNfU0VDT05EUyA4CisjIGRlZmluZSBQRFNfUFJFXzIwMDAgMTYKKworYm9vbCBwb3NpeHRpbWUgKHRpbWVfdCAqcCwgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IHN5bnRheF9iaXRzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXQvYXRfMy4xLjE2LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEyYmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F0L2F0XzMuMS4xNi5iYgpAQCAtMCwwICsxLDY5IEBACitTVU1NQVJZID0gIkRlbGF5ZWQgam9iIGV4ZWN1dGlvbiBhbmQgYmF0Y2ggcHJvY2Vzc2luZyIKK0RFU0NSSVBUSU9OID0gIkF0IGFsbG93cyBmb3IgY29tbWFuZHMgdG8gYmUgcnVuIGF0IGEgcGFydGljdWxhciB0aW1lLiAgQmF0Y2ggd2lsbCBleGVjdXRlIGNvbW1hbmRzIHdoZW4gXAordGhlIHN5c3RlbSBsb2FkIGxldmVscyBkcm9wIHRvIGEgcGFydGljdWxhciBsZXZlbC4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTQzMjVhZmQzOTZmZWJjYjY1OWMzNmI0OTUzMzEzNWQ0IgorREVQRU5EUyA9ICJmbGV4IGZsZXgtbmF0aXZlIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnbGlicGFtJywgJycsIGQpfSIKKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fREVQU30nLCAnJywgZCl9IFwKKyIKKworUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tZW52IHBhbS1wbHVnaW4tbGltaXRzIgorCitSQ09ORkxJQ1RTXyR7UE59ID0gImF0ZCIKK1JSRVBMQUNFU18ke1BOfSA9ICJhdGQiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2EvYXQvYXRfJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgIGZpbGU6Ly9maXhfcGFyYWxsZWxfYnVpbGRfZXJyb3IucGF0Y2ggXAorICAgIGZpbGU6Ly9wb3NpeHRtLmMgXAorICAgIGZpbGU6Ly9wb3NpeHRtLmggXAorICAgIGZpbGU6Ly9maWxlX3JlcGxhY2VtZW50X3dpdGhfZ3BsdjIucGF0Y2ggXAorICAgIGZpbGU6Ly9hdGQuaW5pdCBcCisgICAgZmlsZTovL2F0ZC5zZXJ2aWNlIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0gXAorICAgIGZpbGU6Ly9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLXJlbW92ZS1nbGliYy1hc3N1bXB0aW9uLnBhdGNoIFwKKyAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9wYW0uY29uZi5wYXRjaCBcCisgICAgICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFkZC1lbmFibGUtcGFtLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDA1ZGE3NWQ5Yjc1ZDkzOTE3ZmZiMTZhYjQ4YjFlMTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2I5YWY1OWM2YTU0ZWRjZTk1MzZiYTYyOTg0MTA1NTQwOWQxZjg5ZDhhZTI2NDk0NzI3YTk3MTQxZmI0ZDVjMSIKKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1NFTkRNQUlMPS9iaW4vdHJ1ZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fdXNlcm5hbWU9cm9vdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1kYWVtb25fZ3JvdXBuYW1lPXJvb3QgXAorICAgICAgICAgICAgICAgICAtLXdpdGgtam9iZGlyPS92YXIvc3Bvb2wvYXQvam9icyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1hdHNwb29sPS92YXIvc3Bvb2wvYXQvc3Bvb2wgXAorICAgICAgICAgICAgICAgICBhY19jdl9oZWFkZXJfc2VjdXJpdHlfcGFtX2FwcGxfaD0ke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICd5ZXMnLCAnbm8nLCBkKX0gIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgc3lzdGVtZCB1cGRhdGUtcmMuZAorCitJTklUU0NSSVBUX05BTUUgPSAiYXRkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJhdGQuc2VydmljZSIKKworCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWNwIC1mICR7V09SS0RJUn0vcG9zaXh0bS5bY2hdICR7U30KK30KKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAiSVJPT1Q9JHtEfSIgaW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgICAgJHtXT1JLRElSfS9hdGQuaW5pdAkJJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2F0ZAorCisJIyBpbnN0YWxsIHN5c3RlbWQgdW5pdCBmaWxlcworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9hdGQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS9hdGQuc2VydmljZQorCisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIgPSAicGFtIiBdOyB0aGVuCisJCWluc3RhbGwgLUQgLW0gMDY0NCAke1dPUktESVJ9LyR7QlB9L3BhbS5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kL2F0ZAorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkMTJjYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkF1Z2VhcyBjb25maWd1cmF0aW9uIEFQSSIKK0hPTUVQQUdFID0gImh0dHA6Ly9hdWdlYXMubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2F1Z2Vhcy9yZXBvcnQvMSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQuYXVnZWFzLm5ldC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkLW1pc3NpbmctYXJnei1jb25kaXRpb25hbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zZXBidWlsZGZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgPSAicmVhZGxpbmUgbGlieG1sMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0rICIke1BOfS1sZW5zZXMgbGliJHtCUE59IgorCitGSUxFU18ke1BOfS1sZW5zZXMgPSAiJHtkYXRhZGlyfS9hdWdlYXMvbGVuc2VzIgorRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitSREVQRU5EU19saWIke0JQTn0gKz0gIiR7UE59LWxlbnNlcyIKK1JSRUNPTU1FTkRTX2xpYiR7QlBOfSArPSAiJHtQTn0iCisKK0xFQURfU09OQU1FID0gImxpYmF1Z2Vhcy5zbyIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLWZyICR7RH0ke2RhdGFkaXJ9L3ZpbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExOTg3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4yLjAub3JpZy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgYXVnZWFzLTEuMi4wL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC00NjMsNyArNDYzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL2FkZC1taXNzaW5nLWFyZ3otY29uZGl0aW9uYWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYmRiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhcy9hZGQtbWlzc2luZy1hcmd6LWNvbmRpdGlvbmFsLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK0FkZCBtaXNzaW5nIEdMX0dFTkVSQVRFX0FSR1pfSCBjb25kaXRpb25hbAorCistIEdMX0dFTkVSQVRFX0FSR1pfSCBpcyB1c2VkIGluIGdudWxpYi9saWIvTWFrZWZpbGUuYW0KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXVnZWFzLTEuMC4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgYXVnZWFzLTEuMC4wL2NvbmZpZ3VyZS5hYworQEAgLTU1LDYgKzU1LDggQEAgQUNfQVJHX1dJVEgoW2ZhaWxtYWxsb2NdLAorIAorIEFNX0NPTkRJVElPTkFMKFtXSVRIX0ZBSUxNQUxMT0NdLCBbdGVzdCB4JHdpdGhfZmFpbG1hbGxvYyAhPSB4bm9dKQorIAorK0FNX0NPTkRJVElPTkFMKFtHTF9HRU5FUkFURV9BUkdaX0hdLCBbdGVzdCAtbiAiJEFSR1pfSCJdKQorKworIGRubCAtLWVuYWJsZS1kZWJ1Zz0oeWVzfG5vKQorIEFDX0FSR19FTkFCTEUoW2RlYnVnXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGVidWc9bm8veWVzXSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2F1Z2Vhcy9hdWdlYXMvc2VwYnVpbGRmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgyYTNlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzL3NlcGJ1aWxkZml4LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK0Vuc3VyZSB0aGF0IGJ1aWxkcyBpbiBzZXBhcmF0ZSBidWlsZGRpcnMgKCR7Qn0gIT0gJHtTfSkgY29ycmVjdGx5IGluc3RhbGwgdGhlIAorbGVuc2VzIGZpbGVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy80LzE3CisKK0luZGV4OiBhdWdlYXMtMS4wLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhdWdlYXMtMS4wLjAub3JpZy9NYWtlZmlsZS5hbQkyMDEyLTExLTAyIDE1OjIwOjExLjAwMDAwMDAwMCArMDAwMAorKysrIGF1Z2Vhcy0xLjAuMC9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDEwOjM2OjI0LjAzMzQwMDEyNSArMDAwMAorQEAgLTUsOCArNSw4IEBACisgbGVuc2Rpcj0kKGRhdGFkaXIpL2F1Z2Vhcy9sZW5zZXMvZGlzdAorIGxlbnN0ZXN0ZGlyPSQoZGF0YWRpcikvYXVnZWFzL2xlbnNlcy9kaXN0L3Rlc3RzCisgCistZGlzdF9sZW5zX0RBVEE9JCh3aWxkY2FyZCBsZW5zZXMvKi5hdWcpCistZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgbGVuc2VzL3Rlc3RzLyouYXVnKQorK2Rpc3RfbGVuc19EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKS9sZW5zZXMvKi5hdWcpCisrZGlzdF9sZW5zdGVzdF9EQVRBPSQod2lsZGNhcmQgJCh0b3Bfc3JjZGlyKWxlbnNlcy90ZXN0cy8qLmF1ZykKKyAKKyBFWFRSQV9ESVNUPWF1Z2Vhcy5zcGVjIGJ1aWxkL2F1eC9tb3ZlLWlmLWNoYW5nZSBNYWtlZmlsZS5hbSBIQUNLSU5HCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9hdWdlYXMvYXVnZWFzXzEuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNjRhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYXVnZWFzL2F1Z2Vhc18xLjQuMC5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgYXVnZWFzLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiYTI1MzZhOWMzZDc0NGRjMDlkMjM0MjI4ZmU0YjBjOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjU5ZmFlN2FjMjI5MDI5ZTYwYTg2OWEzYjg4YzYxNmNmZDUxY2YyZmJhMjg2Y2RmZTNhZjNhMDUyY2IzNWIzMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvYnVpbGQtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEzNDFlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRlcnMgUm94ZWxsIDxhbmRlcnMucm94ZWxsQGVuZWEuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KK2RpZmYgLWROYXVyIGJhc2gtMy4yLjQ4L01ha2VmaWxlLmluLm9yaWcgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4KKy0tLSBiYXNoLTMuMi40OC9NYWtlZmlsZS5pbi5vcmlnCTIwMDYtMDgtMTcgMjM6MDM6MzUuMDAwMDAwMDAwICswNTAwCisrKysgYmFzaC0zLjIuNDgvTWFrZWZpbGUuaW4JMjAxMy0wNy0wMiAyMDoyMDowNy41MTI3MDkzMjcgKzA1MDAKK0BAIC04MDMsMTcgKzgwMywzMSBAQAorIAlmaQorIAorIHJlY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQylyZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylyZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCisgemVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXplY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAtbyAkQCAkKFNVUFBPUlRfU1JDKXplY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpIC1vICRAICQ8CisgCistdGVzdCB0ZXN0cyBjaGVjazoJZm9yY2UgJChQcm9ncmFtKSAkKFRFU1RTX1NVUFBPUlQpCisrdGVzdCB0ZXN0cyBjaGVjazoKKysJQCQoTUFLRSkgaW5zdGFsbC10ZXN0CisrCUAkKE1BS0UpIHJ1bnRlc3QKKysKKytpbnN0YWxsLXRlc3Q6IGJ1aWxkdGVzdAorK2lmZXEgKCQob3JpZ2luIElOU1RBTExfVEVTVF9ESVIpLCB1bmRlZmluZWQpCisgCUAtdGVzdCAtZCB0ZXN0cyB8fCBta2RpciB0ZXN0cworIAlAY3AgJChURVNUU19TVVBQT1JUKSB0ZXN0cworK2Vsc2UKKysJQC10ZXN0IC1kICQoSU5TVEFMTF9URVNUX0RJUikgfHwgbWtkaXIgLXAgJChJTlNUQUxMX1RFU1RfRElSKQorKwlAY3AgLXIgJChzcmNkaXIpL3Rlc3RzLyogJChJTlNUQUxMX1RFU1RfRElSKS8KKysJQGNwICQoVEVTVFNfU1VQUE9SVCkgJChJTlNUQUxMX1RFU1RfRElSKQorK2VuZGlmCisrCisrYnVpbGR0ZXN0OiBmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKysKKytydW50ZXN0OgorIAlAKCBjZCAkKHNyY2RpcikvdGVzdHMgJiYgXAorIAkJUEFUSD0kKEJVSUxEX0RJUikvdGVzdHM6JCRQQVRIIFRISVNfU0g9JChUSElTX1NIKSAkKFNIRUxMKSAke1RFU1RTQ1JJUFR9ICkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L2RvbnQtaW5jbHVkZS10YXJnZXQtQ0ZMQUdTLWluLWhvc3QtTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTc1NmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gOTMzYmQ4ODZhZjQ5NjY3ZTg4ZTIzODU0MDk0NDlhYjU5ODgxM2RhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFuZHJlIE1jQ3VyZHkgPGFybWNjdXJkeUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDAwOjU0OjMzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGRvbnQgaW5jbHVkZSB0YXJnZXQgQ0ZMQUdTIGluIGhvc3QgTERGTEFHUworCitCdWlsZGluZyB0aGUgaG9zdCB0b29sICdta2J1aWx0aW5zJyB3aWxsIGZhaWwgaWYgdGhlIHRhcmdldCBDRkxBR1MKK2NvbnRhaW5zIGFuIG9wdGlvbiB3aGljaCBpc24ndCBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QncyBnY2MuIFRvIHByZXZlbnQKK3RoZSBpc3N1ZSwgZGVmaW5lIExERkxBR1NfRk9SX0JVSUxEIGJhc2VkIG9uIENGTEFHU19GT1JfQlVJTEQgaW5zdGVhZAorb2YgQ0ZMQUdTLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3JlcXVpcmVkIGZvciBiYXNoIDMuMi41NyAoR1BMdjIpIHJlY2lwZSBvbmx5XQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgYnVpbHRpbnMvTWFrZWZpbGUuaW4gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGlucy9NYWtlZmlsZS5pbiBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitpbmRleCBlMDI3ZjdhLi5lYmZkZGYzIDEwMDY0NAorLS0tIGEvYnVpbHRpbnMvTWFrZWZpbGUuaW4KKysrKyBiL2J1aWx0aW5zL01ha2VmaWxlLmluCitAQCAtNjMsNyArNjMsNyBAQCBMT0NBTF9ERUZTID0gQExPQ0FMX0RFRlNACisgCisgTElCUyA9IEBMSUJTQAorIExERkxBR1MgPSBATERGTEFHU0AgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHUykKKy1MREZMQUdTX0ZPUl9CVUlMRCA9ICQoTERGTEFHUykKKytMREZMQUdTX0ZPUl9CVUlMRCA9IEBMREZMQUdTX0ZPUl9CVUlMREAgJChMT0NBTF9MREZMQUdTKSAkKENGTEFHU19GT1JfQlVJTEQpCisgTE9DQUxfTERGTEFHUyA9IEBMT0NBTF9MREZMQUdTQAorICNMSUJTX0ZPUl9CVUlMRCA9IEBMSUJTX0ZPUl9CVUlMREAKKyBMSUJTX0ZPUl9CVUlMRCA9ICQoTElCUykKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyMjlhNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gtMy4yLjQ4L21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorT24gaG9zdHMgd2l0aCBGT1JUSUZZX1NPVVJDRVMsIHN0cmluZ2l6ZSBzdXBwb3J0IGlzIHJlcXVpcmVkLCBhcyBpdCdzIHVzZWQgYnkKK3RoZSBtYWNyb3MgdG8gd3JhcCBmdW5jdGlvbnMgKGUuZy4gcmVhZCBhbmQgb3BlbiBpbiB1bmlzdGQuaCkuIFRob3NlIHdyYXBwZXJzCit1c2UgdGhlIFNUUklORygpIG1hY3JvIGZyb20gdW5pc3RkLmguIEEgaGVhZGVyIGluIHRoZSBiYXNoIHNvdXJjZXMgb3ZlcnJpZGVzCit0aGUgdW5pc3RkLmggbWFjcm8gdG8gJ3gnIHdoZW4gSEFWRV9TVFJJTkdJWkUgaXMgbm90IGRlZmluZWQsIGNhdXNpbmcgdGhlCit3cmFwcGVycyB0byBnZW5lcmF0ZSBjYWxscyB0byAneHJlYWQnIGFuZCAneG9wZW4nLCB3aGljaCBkbyBub3QgZXhpc3QsCityZXN1bHRpbmcgaW4gYSBmYWlsdXJlIHRvIGxpbmsuCisKK0Fzc3VtZSB3ZSBoYXZlIHN0cmluZ2l6ZSBzdXBwb3J0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLCB3aGljaCB3b3JrcyBhcm91bmQgdGhlCitpc3N1ZS4KKworSXQgbWF5IGJlIGJlc3QgZm9yIHVwc3RyZWFtIHRvIGVpdGhlciBnaXZlIHVwIG9uIHN1cHBvcnRpbmcgY29tcGlsZXJzIHdpdGhvdXQKK3N0cmluZ2l6ZSBzdXBwb3J0LCBvciB0byBub3QgZGVmaW5lIFNUUklORygpIGF0IGFsbCB3aGVuIEZPUlRJRllfU09VUkNFUyBpcworZGVmaW5lZCwgbGV0dGluZyB0aGUgdW5pc3RkLmggb25lIGJlIHVzZWQsIGluc3RlYWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCistLS0gYmFzaC00LjIub3JpZy9idWlsdGlucy9ta2J1aWx0aW5zLmMKKysrKyBiYXNoLTQuMi9idWlsdGlucy9ta2J1aWx0aW5zLmMKK0BAIC0yOCw2ICsyOCw3IEBACisgIyAgZGVmaW5lIEhBVkVfU1RETElCX0gKKworICMgIGRlZmluZSBIQVZFX1JFTkFNRQorKyMgIGRlZmluZSBIQVZFX1NUUklOR0laRQorICNlbmRpZiAvKiBDUk9TU19DT01QSUxJTkcgKi8KKworICNpZiBkZWZpbmVkIChIQVZFX1VOSVNURF9IKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZDNiOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgVEhJU19TSD0vYmluL2Jhc2ggQlVJTERfRElSPS4gcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoLTMuMi40OC90ZXN0LW91dHB1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjA5YjdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC0zLjIuNDgvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2ZjE1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2guaW5jCkBAIC0wLDAgKzEsNjAgQEAKK1NVTU1BUlkgPSAiQW4gc2gtY29tcGF0aWJsZSBjb21tYW5kIGxhbmd1YWdlIGludGVycHJldGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9iYXNoL2Jhc2h0b3AuaHRtbCIKK1NFQ1RJT04gPSAiYmFzZS9zaGVsbCIKKworREVQRU5EUyA9ICJuY3Vyc2VzIGJpc29uLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtam9iLWNvbnRyb2wiCisKKyMgSWYgTk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyBpcyBkZWZpbmVkLCBhbGwgbG9naW4gc2hlbGxzIHJlYWQgdGhlCisjIHN0YXJ0dXAgZmlsZXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IGludGVyYWN0aXZlLgorIyBUaGlzIGlzIHdoYXQgb3RoZXIgbWFqb3IgZGlzdHJvcyBkby4gQW5kIHRoaXMgaXMgd2hhdCB3ZSB3YW50ZWQuIFNlZSBidWcjNTM1OSBhbmQgYnVnIzcxMzcuCitDRkxBR1MgKz0gIi1ETk9OX0lOVEVSQUNUSVZFX0xPR0lOX1NIRUxMUyIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic2giCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2hdID0gIiR7YmFzZV9iaW5kaXJ9L3NoIgorQUxURVJOQVRJVkVfVEFSR0VUW3NoXSA9ICIke2Jhc2VfYmluZGlyfS9iYXNoIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitSREVQRU5EU18ke1BOfSArPSAiYmFzZS1maWxlcyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCWlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisJCWNhdCAke1N9L2FjbG9jYWwubTQgPiAke1N9L2FjaW5jbHVkZS5tNAorCWZpCit9CisKK2RvX2NvbXBpbGVfcHRlc3QgKCkgeworCW9lX3J1bm1ha2UgYnVpbGR0ZXN0Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIE1vdmUgL3Vzci9iaW4vYmFzaCB0byAvYmluL2Jhc2gsIGlmIG5lZWQKKwlpZiBbICIke2Jhc2VfYmluZGlyfSIgIT0gIiR7YmluZGlyfSIgXTsgdGhlbgorCQlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwkJbXYgJHtEfSR7YmluZGlyfS9iYXNoICR7RH0ke2Jhc2VfYmluZGlyfQorCWZpCit9Citkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQgKCkgeworCSMgQ2xlYW4gaG9zdCBwYXRoIGluIGJhc2hidWcKKwlzZWQgLWkgLWUgInMsJHtTVEFHSU5HX0RJUl9UQVJHRVR9LCxnIiAke0R9JHtiaW5kaXJ9L2Jhc2hidWcKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJbWFrZSBJTlNUQUxMX1RFU1RfRElSPSR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzIGluc3RhbGwtdGVzdAorCWNwICR7Qn0vTWFrZWZpbGUgJHtEfSR7UFRFU1RfUEFUSH0KKyAgICAgICAgc2VkIC1pICdzL15NYWtlZmlsZS9fTWFrZWZpbGUvJyAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2Jhc2VfYmluZGlyfS9iYXNoJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmFzZV9iaW5kaXJ9L2Jhc2ggPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmFzZV9iaW5kaXJ9L2Jhc2gkIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvYnVpbGQtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczYTgxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2J1aWxkLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0FkZCAncHRlc3QnIHRhcmdldCB0byBNYWtlZmlsZSwgdG8gcnVuIHRlc3RzIHdpdGhvdXQgY2hlY2tpbmcgZGVwZW5kZW5jaWVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEFuZGVycyBSb3hlbGwgPGFuZGVycy5yb3hlbGxAZW5lYS5jb20+CitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDI0ICsrKysrKysrKysrKysrKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtODQ4LDIwICs4NDgsMzQgQEAgbWF5YmUtY2xlYW46CisgCWZpCisgCisgcmVjaG8kKEVYRUVYVCk6CQkkKFNVUFBPUlRfU1JDKXJlY2hvLmMKKy0JQCQoQ0NfRk9SX0JVSUxEKSAkKENDRkxBR1NfRk9SX0JVSUxEKSAke0xERkxBR1NfRk9SX0JVSUxEfSAtbyAkQCAkKFNVUFBPUlRfU1JDKXJlY2hvLmMgJHtMSUJTX0ZPUl9CVUlMRH0KKysJQCQoQ0MpICQoQ0NGTEFHUykgJHtMREZMQUdTfSAtbyAkQCAkPAorIAorIHplY2hvJChFWEVFWFQpOgkJJChTVVBQT1JUX1NSQyl6ZWNoby5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl6ZWNoby5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyBwcmludGVudiQoRVhFRVhUKToJJChTVVBQT1JUX1NSQylwcmludGVudi5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQylwcmludGVudi5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKyB4Y2FzZSQoRVhFRVhUKToJJChTVVBQT1JUX1NSQyl4Y2FzZS5jCistCUAkKENDX0ZPUl9CVUlMRCkgJChDQ0ZMQUdTX0ZPUl9CVUlMRCkgJHtMREZMQUdTX0ZPUl9CVUlMRH0gLW8gJEAgJChTVVBQT1JUX1NSQyl4Y2FzZS5jICR7TElCU19GT1JfQlVJTER9CisrCUAkKENDKSAkKENDRkxBR1MpICR7TERGTEFHU30gLW8gJEAgJDwKKyAKKy10ZXN0IHRlc3RzIGNoZWNrOglmb3JjZSAkKFByb2dyYW0pICQoVEVTVFNfU1VQUE9SVCkKKyt0ZXN0IHRlc3RzIGNoZWNrOgorKwlAJChNQUtFKSBpbnN0YWxsLXRlc3QKKysJQCQoTUFLRSkgcnVudGVzdAorKworK2luc3RhbGwtdGVzdDogYnVpbGR0ZXN0CisraWZlcSAoJChvcmlnaW4gSU5TVEFMTF9URVNUX0RJUiksIHVuZGVmaW5lZCkKKyAJQC10ZXN0IC1kIHRlc3RzIHx8IG1rZGlyIHRlc3RzCisgCUBjcCAkKFRFU1RTX1NVUFBPUlQpIHRlc3RzCisrZWxzZQorKwlALXRlc3QgLWQgJChJTlNUQUxMX1RFU1RfRElSKSB8fCBta2RpciAtcCAkKElOU1RBTExfVEVTVF9ESVIpCisrCUBjcCAtciAkKHNyY2RpcikvdGVzdHMvKiAkKElOU1RBTExfVEVTVF9ESVIpLworKwlAY3AgJChURVNUU19TVVBQT1JUKSAkKElOU1RBTExfVEVTVF9ESVIpCisrZW5kaWYKKysKKytidWlsZHRlc3Q6IGZvcmNlICQoUHJvZ3JhbSkgJChURVNUU19TVVBQT1JUKQorKworK3J1bnRlc3Q6CisgCUAoIGNkICQoc3JjZGlyKS90ZXN0cyAmJiBcCisgCQlQQVRIPSQoQlVJTERfRElSKS90ZXN0czokJFBBVEggVEhJU19TSD0kKFRISVNfU0gpICQoU0hFTEwpICR7VEVTVFNDUklQVH0gKQorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvZXhlY3V0ZV9jbWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjhmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL2V4ZWN1dGVfY21kLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKKy0tLSBleGVjdXRlX2NtZC5jLm9yaWcJRnJpIEp1biAgMyAxMzozNDo0MiAyMDExCisrKysgZXhlY3V0ZV9jbWQuYwlGcmkgSnVuICAzIDEzOjM2OjQxIDIwMTEKK0BAIC0yMjAyLDcgKzIyMDIsMTEgQEAKKyAgIC8qIElmIHRoZSBgbGFzdHBpcGUnIG9wdGlvbiBpcyBzZXQgd2l0aCBzaG9wdCwgYW5kIGpvYiBjb250cm9sIGlzIG5vdAorICAgICAgZW5hYmxlZCwgZXhlY3V0ZSB0aGUgbGFzdCBlbGVtZW50IG9mIG5vbi1hc3luYyBwaXBlbGluZXMgaW4gdGhlCisgICAgICBjdXJyZW50IHNoZWxsIGVudmlyb25tZW50LiAqLworLSAgaWYgKGxhc3RwaXBlX29wdCAmJiBqb2JfY29udHJvbCA9PSAwICYmIGFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisrICBpZiAobGFzdHBpcGVfb3B0ICYmIAorKyNpZiBkZWZpbmVkKEpPQl9DT05UUk9MKQorKwkJam9iX2NvbnRyb2wgPT0gMCAmJiAKKysjZW5kaWYKKysJCWFzeW5jaHJvbm91cyA9PSAwICYmIHBpcGVfb3V0ID09IE5PX1BJUEUgJiYgcHJldiA+IDApCisgICAgIHsKKyAgICAgICBsc3RkaW4gPSBtb3ZlX3RvX2hpZ2hfZmQgKDAsIDAsIDI1NSk7CisgICAgICAgaWYgKGxzdGRpbiA+IDApCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL21rYnVpbHRpbnNfaGF2ZV9zdHJpbmdpemUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzOTFkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaApAQCAtMCwwICsxLDI2IEBACitPbiBob3N0cyB3aXRoIEZPUlRJRllfU09VUkNFUywgc3RyaW5naXplIHN1cHBvcnQgaXMgcmVxdWlyZWQsIGFzIGl0J3MgdXNlZCBieQordGhlIG1hY3JvcyB0byB3cmFwIGZ1bmN0aW9ucyAoZS5nLiByZWFkIGFuZCBvcGVuIGluIHVuaXN0ZC5oKS4gVGhvc2Ugd3JhcHBlcnMKK3VzZSB0aGUgU1RSSU5HKCkgbWFjcm8gZnJvbSB1bmlzdGQuaC4gQSBoZWFkZXIgaW4gdGhlIGJhc2ggc291cmNlcyBvdmVycmlkZXMKK3RoZSB1bmlzdGQuaCBtYWNybyB0byAneCcgd2hlbiBIQVZFX1NUUklOR0laRSBpcyBub3QgZGVmaW5lZCwgY2F1c2luZyB0aGUKK3dyYXBwZXJzIHRvIGdlbmVyYXRlIGNhbGxzIHRvICd4cmVhZCcgYW5kICd4b3BlbicsIHdoaWNoIGRvIG5vdCBleGlzdCwKK3Jlc3VsdGluZyBpbiBhIGZhaWx1cmUgdG8gbGluay4KKworQXNzdW1lIHdlIGhhdmUgc3RyaW5naXplIHN1cHBvcnQgd2hlbiBjcm9zcy1jb21waWxpbmcsIHdoaWNoIHdvcmtzIGFyb3VuZCB0aGUKK2lzc3VlLgorCitJdCBtYXkgYmUgYmVzdCBmb3IgdXBzdHJlYW0gdG8gZWl0aGVyIGdpdmUgdXAgb24gc3VwcG9ydGluZyBjb21waWxlcnMgd2l0aG91dAorc3RyaW5naXplIHN1cHBvcnQsIG9yIHRvIG5vdCBkZWZpbmUgU1RSSU5HKCkgYXQgYWxsIHdoZW4gRk9SVElGWV9TT1VSQ0VTIGlzCitkZWZpbmVkLCBsZXR0aW5nIHRoZSB1bmlzdGQuaCBvbmUgYmUgdXNlZCwgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBiYXNoLTQuMi5vcmlnL2J1aWx0aW5zL21rYnVpbHRpbnMuYworKysrIGJhc2gtNC4yL2J1aWx0aW5zL21rYnVpbHRpbnMuYworQEAgLTI4LDYgKzI4LDcgQEAKKyAjICBkZWZpbmUgSEFWRV9TVERMSUJfSAorCisgIyAgZGVmaW5lIEhBVkVfUkVOQU1FCisrIyAgZGVmaW5lIEhBVkVfU1RSSU5HSVpFCisgI2VuZGlmIC8qIENST1NTX0NPTVBJTElORyAqLworCisgI2lmIGRlZmluZWQgKEhBVkVfVU5JU1REX0gpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzZjgxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoL3J1bi1wdGVzdApAQCAtMCwwICsxLDIgQEAKKyMhL2Jpbi9zaAorbWFrZSAtayBUSElTX1NIPS9iaW4vYmFzaCBCVUlMRF9ESVI9LiBzcmNkaXI9LiAgcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaC90ZXN0LW91dHB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwOWI3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2gvdGVzdC1vdXRwdXQucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorQWRkIEZBSUwvUEFTUyBvdXRwdXQgdG8gdGVzdCBvdXRwdXQuCisKK1NpZ25lZC1vZmYtYnk6IEJqw7ZybiBTdGVuYmVyZyA8YmpzdEBlbmVhLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCitkaWZmIC11TnIgYS90ZXN0cy9ydW4tYWxsIGIvdGVzdHMvcnVuLWFsbAorLS0tIGEvdGVzdHMvcnVuLWFsbAkxOTk5LTEwLTA4IDE3OjA3OjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGIvdGVzdHMvcnVuLWFsbAkyMDEyLTEwLTI3IDIxOjA0OjE4LjY2MzMzMTg4NyArMDIwMAorQEAgLTIyLDcgKzIyLDE1IEBACisgCWNhc2UgJHggaW4KKyAJJDB8cnVuLW1pbmltYWx8cnVuLWdwcm9mKQk7OworIAkqLm9yaWd8Kn4pIDs7CistCSopCWVjaG8gJHggOyBzaCAkeCA7OworKyAgICAqKSAgZWNobyAkeAorKyAgICAgICAgIG91dHB1dD1gc2ggJHhgCisrICAgICAgICAgaWYgWyAtbiAiJG91dHB1dCIgXTsgdGhlbgorKyAgICAgICAgICAgICBlY2hvICIkb3V0cHV0IgorKyAgICAgICAgICAgICBlY2hvICJGQUlMOiAkeCIKKysgICAgICAgICBlbHNlCisrICAgICAgICAgICAgIGVjaG8gIlBBU1M6ICR4IgorKyAgICAgICAgIGZpCisrICAgICAgICAgOzsKKyAJZXNhYworIGRvbmUKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jhc2gvYmFzaF8zLjIuNDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQyYjI5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfMy4yLjQ4LmJiCkBAIC0wLDAgKzEsNDYgQEAKK3JlcXVpcmUgYmFzaC5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZDVkOWJjYWJkOGVkNWE1NGEwMWNlOGQxODNkNTkyYSIKKworUFIgPSAicjExIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmFzaC9iYXNoLSR7UFZ9LnRhci5nejtuYW1lPXRhcmJhbGwgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDQ5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA0OSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTA7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUwIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1MTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTEgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDUyO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1MiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTM7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDUzIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NDthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTQgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC0zLjItcGF0Y2hlcy9iYXNoMzItMDU1O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDA1NSBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTMuMi1wYXRjaGVzL2Jhc2gzMi0wNTY7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDU2IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtMy4yLXBhdGNoZXMvYmFzaDMyLTA1NzthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwNTcgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZG9udC1pbmNsdWRlLXRhcmdldC1DRkxBR1MtaW4taG9zdC1MREZMQUdTLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gIjMzOGRjZjk3NWE5MzY0MGJiM2VhYTg0M2NhNDJlM2Y4IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMTI4ZDI4MWJkNTY4MmJhNWY2OTUzMTIyOTE1ZGE3MTk3NjM1N2Q3YTc2NDkwZDI2NmM5MTczYjFkMDQyNjM0OCIKK1NSQ19VUklbcGF0Y2gwNDkubWQ1c3VtXSA9ICJhZjU3MWEyZDE2NGQ1YWJkY2FlNDQ5OWU5NGU4ODkyYyIKK1NSQ19VUklbcGF0Y2gwNDkuc2hhMjU2c3VtXSA9ICJiMTIxN2VkOTRiZGI5NWRjODc4ZmE1Y2FiYmY4YTE2NDQzNWViMGQ5ZGEyM2EzOTIxOThmNDg1NjZlZTM0YTJmIgorU1JDX1VSSVtwYXRjaDA1MC5tZDVzdW1dID0gIjg0NDNkNDM4NWQ3M2VjODM1YWJlNDAxZDkwNTkxMzc3IgorU1JDX1VSSVtwYXRjaDA1MC5zaGEyNTZzdW1dID0gIjA4MWJiMDNjNTgwZWNlZTYzYmEwM2I0MGJlYjNjYWY1MDllY2EyOTUxNWIyZThkZDNjMDc4NTAzNjA5YTE2NDIiCitTUkNfVVJJW3BhdGNoMDUxLm1kNXN1bV0gPSAiMTVjNjY1MzA0MmU5ODE0YWE4NzEyMDA5OGZjN2E4NDkiCitTUkNfVVJJW3BhdGNoMDUxLnNoYTI1NnN1bV0gPSAiMzU0ODg2MDk3Y2Q5NWI0ZGVmNzcwMjhmMzJlZTAxZTJlMDg4ZDU4YTk4MTg0ZmVkZTlkM2NlOTMyMGUyMThlZiIKK1NSQ19VUklbcGF0Y2gwNTIubWQ1c3VtXSA9ICI2OTEwMjNhOTQ0YmJiOTAwM2NjOTJhZDQ2MmQ5MWZhMSIKK1NSQ19VUklbcGF0Y2gwNTIuc2hhMjU2c3VtXSA9ICJhMGVjY2Y5Y2VkYTUwODcxZGIxMGQyMWVmZGQ3NGI5OWUzNWVmYmQ1NWM5NzBjNDAwZWVhZGUwMTI4MTZiYjYxIgorU1JDX1VSSVtwYXRjaDA1My5tZDVzdW1dID0gImViOTdkMWM5MjMwYTU1MjgzZDlkYWM2OWQzZGUyZTQ2IgorU1JDX1VSSVtwYXRjaDA1My5zaGEyNTZzdW1dID0gImZlNmYwZTk2ZTBiOTY2ZWFlZDlmYjVlOTMwY2ExMjg5MWY0MzgwZjMwZjllMGE3NzNkMjAwZmYyMDYzYTg2NGUiCitTUkNfVVJJW3BhdGNoMDU0Lm1kNXN1bV0gPSAiMTEwNzc0NDA1OGM0M2IyNDdmNTk3NTg0Yjg4YmEwYTYiCitTUkNfVVJJW3BhdGNoMDU0LnNoYTI1NnN1bV0gPSAiYzZkYWI5MTFlODU2ODhjNTQyY2U3NWFmYzE3NWRiYjRlNTAxMWRlNTEwMjc1OGUxOWE0YTgwZGFjMWU3OTM1OSIKK1NSQ19VUklbcGF0Y2gwNTUubWQ1c3VtXSA9ICIwNWQyMDExNzZkMzQ5OWUyZGZhNGE3M2QwOWQ0MmYwNSIKK1NSQ19VUklbcGF0Y2gwNTUuc2hhMjU2c3VtXSA9ICJjMGU4MTY3MDA4Mzc5NDJlZDU0OGRhNzRlNTkxN2Y3NGI3MGNiYmJiMTBjOWYyY2FmNzNlOGUwNmEwNzEzZDBhIgorU1JDX1VSSVtwYXRjaDA1Ni5tZDVzdW1dID0gIjIyMmVhYTNhMmMyNmY1NGExNWFhNWUwODgxN2E1MzRhIgorU1JDX1VSSVtwYXRjaDA1Ni5zaGEyNTZzdW1dID0gIjA2M2E4ZDhkNzRlNDQwN2JmMDdhMzJiOTY1YjhlZjZkMjEzYTY2YWJkYjZhZjI2Y2MzNTg0YTQzN2E1NmJiYjQiCitTUkNfVVJJW3BhdGNoMDU3Lm1kNXN1bV0gPSAiNDdkOThlM2UwNDI4OTI0OTVjNWVmZTU0ZWM2ZTU5MTMiCitTUkNfVVJJW3BhdGNoMDU3LnNoYTI1NnN1bV0gPSAiNWZjNjg5Mzk0ZDUxNTk5MGY1ZWE3NGUyZGY3NjVmYzZlNWU0MmNhNDRiNDU5MWIyYzZmOWJlNGIwY2FkZjBmMCIKKworUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYXNoL2Jhc2hfNC4zLjMwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWU2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmFzaC9iYXNoXzQuMy4zMC5iYgpAQCAtMCwwICsxLDQ2IEBACityZXF1aXJlIGJhc2guaW5jCisKKyMgR1BMdjIrICg8IDQuMCksIEdQTHYzKyAoPj0gNC4wKQorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2Jhc2gvJHtCUH0udGFyLmd6O25hbWU9dGFyYmFsbCBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzE7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDMxIFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzMjthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzIgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDMzO2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzMyBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzQ7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM0IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzNTthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzUgXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM2O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzNiBcCisgICAgICAgICAgICR7R05VX01JUlJPUn0vYmFzaC9iYXNoLTQuMy1wYXRjaGVzL2Jhc2g0My0wMzc7YXBwbHk9eWVzO3N0cmlwbGV2ZWw9MDtuYW1lPXBhdGNoMDM3IFwKKyAgICAgICAgICAgJHtHTlVfTUlSUk9SfS9iYXNoL2Jhc2gtNC4zLXBhdGNoZXMvYmFzaDQzLTAzODthcHBseT15ZXM7c3RyaXBsZXZlbD0wO25hbWU9cGF0Y2gwMzggXAorICAgICAgICAgICAke0dOVV9NSVJST1J9L2Jhc2gvYmFzaC00LjMtcGF0Y2hlcy9iYXNoNDMtMDM5O2FwcGx5PXllcztzdHJpcGxldmVsPTA7bmFtZT1wYXRjaDAzOSBcCisgICAgICAgICAgIGZpbGU6Ly9leGVjdXRlX2NtZC5wYXRjaDtzdHJpcGxldmVsPTAgXAorICAgICAgICAgICBmaWxlOi8vbWtidWlsdGluc19oYXZlX3N0cmluZ2l6ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZC10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90ZXN0LW91dHB1dC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbdGFyYmFsbC5tZDVzdW1dID0gImEyN2IzZWU5YmU4M2JkM2JhNDQ4YzBmZjUyYjI4NDQ3IgorU1JDX1VSSVt0YXJiYWxsLnNoYTI1NnN1bV0gPSAiMzE3ODgxMDE5YmJmMjI2MmZiODE0YjdkZDhlNDA2MzJkMTNjMzYwOGQyZjIzNzgwMGE4ODI4ZmJiOGE2NDBkZCIKKworU1JDX1VSSVtwYXRjaDAzMS5tZDVzdW1dID0gIjIzNmRmMWFjMTEzMGEwMzNlZDBkYmUyZDIxMTVmMjhmIgorU1JDX1VSSVtwYXRjaDAzMS5zaGEyNTZzdW1dID0gImNkNTI5ZjU5ZGQwZjJmZGQ0OWQ2MTlmZTM0NjkxZGE2ZjBhZmZlZGY4N2NjMzdjZDQ2MGE5ZjNmZTgxMmE2MWQiCitTUkNfVVJJW3BhdGNoMDMyLm1kNXN1bV0gPSAiMjM2MGY3ZTc5Y2ZiMjg1MjZmODAwMjEwMjVlYTU5MDkiCitTUkNfVVJJW3BhdGNoMDMyLnNoYTI1NnN1bV0gPSAiODg5MzU3ZDI5YTYwMDViMmMzMzA4Y2E1YjYyODZjYjIyM2I1ZTljMDgzMjE5ZTVkYjMxNTYyODJkZDU1NGY0YSIKK1NSQ19VUklbcGF0Y2gwMzMubWQ1c3VtXSA9ICJiNTUxYzRlZTdiODcxMzc1OWU0MTQzNDk5ZDBiYmQ0OCIKK1NSQ19VUklbcGF0Y2gwMzMuc2hhMjU2c3VtXSA9ICJmYjJhNzc4N2ExM2ZiZTAyN2E3MzM1YWNhNmViM2MyMWNkYmQ4MTNlOWVkYzIyMTI3NGI2YTlkODY5MmVhYTE2IgorU1JDX1VSSVtwYXRjaDAzNC5tZDVzdW1dID0gImM5YTU2ZmJlMDM0OGUwNWE4ODZkZmY5N2YyODcyYjc0IgorU1JDX1VSSVtwYXRjaDAzNC5zaGEyNTZzdW1dID0gImYxNjk0ZjA0ZjExMGRlZmUxMzMwYTg1MWNjMjc2OGU3ZTU3ZGRkMmRmZGIwZTNlMzUwY2EwZTNjMjE0ZmY4ODkiCitTUkNfVVJJW3BhdGNoMDM1Lm1kNXN1bV0gPSAiZTU2NGU4YWI0NGVkMWNhM2E0ZTMxNWE5ZjZjYWJkYzkiCitTUkNfVVJJW3BhdGNoMDM1LnNoYTI1NnN1bV0gPSAiMzcwZDg1ZTUxNzgwMDM2ZjIzODZkYzE4YzVlZmU5OTZlYmE4ZTY1MmZjMTk3M2YwZjRmMmFiNTVhOTkzYzFlMyIKK1NSQ19VUklbcGF0Y2gwMzYubWQ1c3VtXSA9ICJiMDBmZjY2YzQxYTdjMGYwNmUxOTEyMDA5ODE5ODBiMCIKK1NSQ19VUklbcGF0Y2gwMzYuc2hhMjU2c3VtXSA9ICJhYzVmODI0NDViMzZlZmRiNTQzZGJmYWU2NGFmZWQ2M2Y1ODZkNzU3NGI4MzNlOWFhOWNkNTE3MGJjNWZkMjdjIgorU1JDX1VSSVtwYXRjaDAzNy5tZDVzdW1dID0gImJlMmE3YjA1ZjZhZTU2MDMxM2YzYzlkNWY3MTI3YmRhIgorU1JDX1VSSVtwYXRjaDAzNy5zaGEyNTZzdW1dID0gIjMzZjE3MGRkNzQwMGFiMzQxOGQ3NDljNTVjNjM5MWIxZDE2MWVmMmRlN2FjZWQxODczNDUxYjNhM2ZjYTU4MTMiCitTUkNfVVJJW3BhdGNoMDM4Lm1kNXN1bV0gPSAiNjFlMDUyMjgzMGIyNGZiZThjMGQxYjAxMGYxMzI0NzAiCitTUkNfVVJJW3BhdGNoMDM4LnNoYTI1NnN1bV0gPSAiYWRiZWFhNTAwY2E3YTgyNTM1ZjBlODhkNjczNjYxOTYzZjhhNWZjZGM3YWQ2MzQ0NWU2OGJmNWI0OTc4NjM2NyIKK1NSQ19VUklbcGF0Y2gwMzkubWQ1c3VtXSA9ICJhNDc3NTQ4N2FiZTk1ODUzNjc1MWM4Y2U1M2NkZjZmOSIKK1NSQ19VUklbcGF0Y2gwMzkuc2hhMjU2c3VtXSA9ICJhYjk0ZGNlZDIyMTU1NDEwOTc2OTFmNjBjM2ViMzIzY2MyOGVmMjU0OTQ2M2U2YTUzMzRiYmNjMWU2MWU3NGVjIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2JjL2JjXzEuMDYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjOGE4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9iY18xLjA2LmJiCkBAIC0wLDAgKzEsMjYgQEAKK1NVTU1BUlkgPSAiQXJiaXRyYXJ5IHByZWNpc2lvbiBjYWxjdWxhdG9yIGxhbmd1YWdlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2JjL2JjLmh0bWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZDgwNDVmM2I4ZjkyOWMxY2IyOWExZTNmZDczN2I0OTkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmMvYmNkZWZzLmg7ZW5kbGluZT0zMTttZDU9NDZkZmZkYWYxMGE5OTcyOGRkOGNlMzU4ZTQ1ZDQ2ZDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZGMvZGMuaDtlbmRsaW5lPTI1O21kNT0yZjljNTU4Y2RkODBlMzFiNGQ5MDRlNDhjMjM3NDMyOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvbnVtYmVyLmM7ZW5kbGluZT0zMTttZDU9OTk0MzRhMDg5OGFiY2E3Nzg0YWNmZDM2YjgxOTExOTkiCisKK1NFQ1RJT04gPSAiYmFzZSIKK0RFUEVORFMgPSAiZmxleCIKK1BSID0gInIzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYmMvYmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1zZWdtZW50LWZhdWx0LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0NGI1ZGRkZWJkOGE3YTczMDlhZWE2YzM2ZmRhMTE3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRlZjZkOWYxN2MzYzBkOTJkODc5OGUzNTY2NjE3NWVjZDNkOGVmYWM0MDA5ZDY0NTdiNWM5OWNlYTcyYzBlMzMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJkYyIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmMvZmlsZXMvZml4LXNlZ21lbnQtZmF1bHQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMGRhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iYy9maWxlcy9maXgtc2VnbWVudC1mYXVsdC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKword2hlbiBydW4gY29tbWFuZCBzdWNoIGFzICdlY2hvICJhID0gMTMiIHwgYmMgLWwnLCBpdCBzZWdtZW50YXRpb24gZmF1bHRzLgorVGhpcyBwYXRjaCBpcyBmcm9tIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9ibGZzLXN1cHBvcnRAbGludXhmcm9tc2NyYXRjaC5vcmcvbXNnMDQ2MDIuaHRtbC4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKKy0tLSBiYy0xLjA2L2xpYi9udW1iZXIuYy5vcmlnCTIwMDMtMDktMjYgMjE6MTQ6MDIuMDAwMDAwMDAwICswMDAwCisrKysgYmMtMS4wNi9saWIvbnVtYmVyLmMJMjAwMy0wOS0yNiAyMToxNDoyNi4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zNCw2ICszNCw3IEBACisgI2luY2x1ZGUgPG51bWJlci5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxjdHlwZS5oPi8qIFByb3RvdHlwZXMgbmVlZGVkIGZvciBleHRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLiAqLworIAorICNkZWZpbmUgYmNfcnRfd2FybiBydF93YXJuCistLS0gYmMtMS4wNi9iYy9sb2FkLmMub3JpZwkyMDAzLTA5LTI2IDIxOjE0OjE0LjAwMDAwMDAwMCArMDAwMAorKysrIGJjLTEuMDYvYmMvbG9hZC5jCTIwMDMtMDktMjYgMjE6MTQ6MjYuMDAwMDAwMDAwICswMDAwCitAQCAtMTU2LDcgKzE1Niw3IEBACisgICBsb25nICBsYWJlbF9ubzsKKyAgIGxvbmcgIHZhZl9uYW1lOwkvKiB2YXJpYWJsZSwgYXJyYXkgb3IgZnVuY3Rpb24gbnVtYmVyLiAqLworICAgbG9uZyAgZnVuYzsKKy0gIHByb2dyYW1fY291bnRlciBzYXZlX2FkcjsKKysgIHN0YXRpYyBwcm9ncmFtX2NvdW50ZXIgc2F2ZV9hZHI7CisgCisgICAvKiBJbml0aWFsaXplLiAqLworICAgc3RyID0gY29kZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMS1maXgtdHlwb3MtaW4tbWFucGFnZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWUzNjhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAxLWZpeC10eXBvcy1pbi1tYW5wYWdlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gOWNiMTY2N2Y5ZDNhOWJjZmMzYjgzNDY2Y2Q4ZDNiNzlmMDU1NGZmMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgOCBKdWwgMjAxNSAwMTozNzowOSArMDMwMAorU3ViamVjdDogW1BBVENIIDEvM10gZml4IHR5cG9zIGluIG1hbnBhZ2UKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQtNy5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4YW5kZXIua2FuYXZpbkBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGJsa3Rvb2wuOCB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLjggYi9ibGt0b29sLjgKK2luZGV4IGExZjVjOTYuLjQ1Yjc3MjQgMTAwNjQ0CistLS0gYS9ibGt0b29sLjgKKysrKyBiL2Jsa3Rvb2wuOAorQEAgLTE5MSw3ICsxOTEsNyBAQCBRdWVyeSBvciBzZXQgZGV2aWNlIGJ1cyBzdGF0ZSAoMCBvZmYsIDEgb24sIDIgdHJpc3RhdGUpCisgUXVlcnkgdGhlIGRldGVjdGVkIChvciBvdmVycmlkZGVuLCB2aWEgLXQpIGRldmljZSBjbGFzcy4KKyBUeXBpY2FsbHkgdGhpcyB3aWxsIHJlc3VsdCBpbiAnQVRBJyBvciAnU0NTSScgZm9yIG1vc3QgZGV2aWNlcy4KKyBEZXRlY3Rpb24gaXMgYmFzZWQgb24gZGV2aWNlIG1ham9yOyB0aHVzIHlvdXIgU0FUQSBkZXZpY2UgbWF5IGFwcGVhciBhcworLSdTQ1NJJy4KKytcJidTQ1NJJy4KKyAKKyAuVFAKKyAuQiBjZC1zcGVlZAorQEAgLTIzNyw3ICsyMzcsNyBAQCBPbWl0dGluZyB0aGUgb24vb2ZmIGFyZ3VtZW50IHdpbGwgcHJpbnQgdGhlIGN1cnJlbnQgc3RhdGUuCisgCisgLlRQCisgLkIgbWVkaWEKKy1Mb2NrIGluIChvciB1bmxvY2spIGEgcmVtb3ZlYWJsZSBkZXZpY2UuCisrTG9jayBpbiAob3IgdW5sb2NrKSBhIHJlbW92YWJsZSBkZXZpY2UuCisgCisgLlRQCisgLkIgbXVsdGlwbGUtY291bnQKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sLzAwMDItZml4LXN0cmluZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhhYmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAyLWZpeC1zdHJpbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkZGIxMDcxZGEyYzc4ZDgxNTVhYWI2MmU5ZjBkNDZmNjk1MDAyMDBmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXphdCBLaHV6aGluIDxhM2F0Lm1haWxAZ21haWwuY29tPgorRGF0ZTogV2VkLCA4IEp1bCAyMDE1IDAxOjQyOjI0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBmaXggc3RyaW5nIGVycm9yCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyB1dGlsLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS91dGlsLmMgYi91dGlsLmMKK2luZGV4IDFmM2E5Y2EuLjJjY2Y1NmEgMTAwNjQ0CistLS0gYS91dGlsLmMKKysrKyBiL3V0aWwuYworQEAgLTI4LDcgKzI4LDcgQEAgdm9pZCBwZGllKGNvbnN0IGNoYXIgKm1zZywgaW50IHBlcnIpCisgCWlmIChwZXJyKQorIAkJcGVycm9yKG1zZyk7CisgCWVsc2UKKy0JCWZwcmludGYoc3RkZXJyLCBtc2cpOworKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIG1zZyk7CisgCWlmIChibGtkZXYgPj0gMCkKKyAJCWNsb3NlKGJsa2Rldik7CisgCWV4aXQoMSk7CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ibGt0b29sL2Jsa3Rvb2wvMDAwMy1GaXgtMy1kLWFyZ3VtZW50LWZvci1CTEtST1NFVC1pdC1tdXN0LWJlLWNvbnN0LWludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2VkMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbC8wMDAzLUZpeC0zLWQtYXJndW1lbnQtZm9yLUJMS1JPU0VULWl0LW11c3QtYmUtY29uc3QtaW50LnBhdGNoCkBAIC0wLDAgKzEsNzggQEAKK0Zyb20gNjhmYWE2M2FhYWQ4MWY0YTI4OWU0YTAzMTczYWI0Y2Y3OThkZWI1MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEF6YXQgS2h1emhpbiA8YTNhdC5tYWlsQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMSBOb3YgMjAxNCAyMjoyNDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gRml4IDMtZCBhcmd1bWVudCBmb3IgQkxLUk9TRVQgaXQgbXVzdCBiZSAnY29uc3QgaW50IConCisKK01vc3Qgb2YgKlNFVCBpb2N0bHMgaGF2ZSBpbnQgdHlwZSBmb3IgMy1kIGFyZ3VtZW50LCBleGNlcHQgQkxLUk9TRVQuCitTbyBhZGQgYmNfYXJnX3R5cGUgZW51bSwgYnVpbGQgaXQgaW50byBib29sX2NvbWFuZCBhbmQgaW5zdGFsbCBhcmdfdHlwZQordG8gYmNfYXJnX2ludF9wdHIgZm9yIEJMS1JPU0VUIG9ubHkuCisKK0RlYmlhbi1idWctaWQ6IDY0MTE2NAorTGluazogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNjQxMTY0CisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9iL2Jsa3Rvb2wvYmxrdG9vbF80LTcuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCitTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleGFuZGVyLmthbmF2aW5AbGludXguaW50ZWwuY29tPgorCistLS0KKyBibGt0b29sLmMgfCAxMSArKysrKysrKystLQorIGJsa3Rvb2wuaCB8ICA3ICsrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ibGt0b29sLmMgYi9ibGt0b29sLmMKK2luZGV4IGZiZWZlY2QuLjIyMWExOTUgMTAwNjQ0CistLS0gYS9ibGt0b29sLmMKKysrKyBiL2Jsa3Rvb2wuYworQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIHN0cnVjdCBib29sX2NvbW1hbmQgYm9vbF9jbWRfdGJsW10gPSB7CisgCXsgeyBERUZfQk9PTCgicGlvLWRhdGEiKSwgZGNfYXRhLCBERUZfSERJTygzMkJJVCkgfSwKKyAJICAiMTYtYml0IiwgIjMyLWJpdCIgfSwKKyAJeyB7IERFRl9CT09MKCJyZWFkb25seSIpLCBkY19hbnksIElPQ05BTUUoQkxLUk9HRVQpLCBJT0NOQU1FKEJMS1JPU0VUKSB9LAorLQkgIERFRl9CT09MU1RSIH0sCisrCSAgREVGX0JPT0xTVFIsIGJjX2FyZ19pbnRfcHRyIH0sCisgCXsgeyBERUZfQk9PTCgidW5tYXNrLWlycSIpLCBkY19hdGEsIERFRl9IRElPKFVOTUFTS0lOVFIpIH0sCisgCSAgREVGX0JPT0xTVFIgfSwKKyAJeyB7ICJ3Y2FjaGUiLCBjdF9ib29sLCBoYW5kbGVfd2NhY2hlLCBkY19hbnksCitAQCAtMTcxLDcgKzE3MSwxNCBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfYm9vbChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIHN0cnVjdCBjb21tYW5kICpjbWQpCisgCisgCX0gZWxzZSBpZiAoKGFyZ2MgPT0gNCkgJiYgKGNtZC0+d3JpdGVfaW9jdGxfbmFtZSAhPSBOVUxMKSkgeworIAkJZG9fMzIgPSBwYXJzZV9ib29sKGFyZ2MsIGFyZ3YsIGJjbSk7CistCQlpZiAoaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMikpCisrCQkKKysJCWludCByZXQ7CisrCQlpZiAoYmNtLT5hcmdfdHlwZSA9PSBiY19hcmdfaW50X3B0cikgeworKwkJCXJldCA9IGlvY3RsKGJsa2RldiwgY21kLT53cml0ZV9pb2N0bCwgJmRvXzMyKTsKKysJCX0gZWxzZSB7CisrCQkJcmV0ID0gaW9jdGwoYmxrZGV2LCBjbWQtPndyaXRlX2lvY3RsLCBkb18zMik7CisrCQl9CisrCQlpZiAocmV0KQorIAkJCXBkaWUoY21kLT53cml0ZV9pb2N0bF9uYW1lLCAxKTsKKyAJfQorIAllbHNlIHsKK2RpZmYgLS1naXQgYS9ibGt0b29sLmggYi9ibGt0b29sLmgKK2luZGV4IGZjZTQzODcuLjg1YWRkODMgMTAwNjQ0CistLS0gYS9ibGt0b29sLmgKKysrKyBiL2Jsa3Rvb2wuaAorQEAgLTg1LDExICs4NSwxOCBAQCBzdHJ1Y3QgY29tbWFuZCB7CisgCWNvbnN0IGNoYXIJCSp3cml0ZV9pb2N0bF9uYW1lOworIH07CisgCisrZW51bSBiY19hcmdfdHlwZSB7CisrCWJjX2FyZ19pbnQsCisrCWJjX2FyZ19pbnRfcHRyLAorK307CisrCisgc3RydWN0IGJvb2xfY29tbWFuZCB7CisgCXN0cnVjdCBjb21tYW5kCQljbWQ7CisgCisgCWNvbnN0IGNoYXIJCSpzdHJfZmFsc2U7CisgCWNvbnN0IGNoYXIJCSpzdHJfdHJ1ZTsKKysKKysJZW51bSBiY19hcmdfdHlwZSBhcmdfdHlwZTsKKyB9OworIAorIHN0cnVjdCBjbGFzc19vcGVyYXRpb25zIHsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYmxrdG9vbC9ibGt0b29sXzQtNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzkxOTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Jsa3Rvb2wvYmxrdG9vbF80LTcuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJUdW5lIGxvdy1sZXZlbCBibG9jayBkZXZpY2UgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImJsa3Rvb2wgaXMgdXNlZCBmb3IgcXVlcnlpbmcgYW5kL29yIGNoYW5naW5nIHNldHRpbmdzIFwKK29mIGEgYmxvY2sgZGV2aWNlLiBJdCBpcyBsaWtlIGhkcGFybSBidXQgYSBtb3JlIGdlbmVyYWwgdG9vbCwgYXMgaXQgXAord29ya3Mgb24gU0NTSSwgSURFIGFuZCBTQVRBIGRldmljZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3BhY2thZ2VzLmRlYmlhbi5vcmcvdW5zdGFibGUvYWRtaW4vYmxrdG9vbCIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmxrdG9vbC5jO2JlZ2lubGluZT03O2VuZGxpbmU9ODttZDU9YTVlNzk4ZWE5OGZkNTA5NzIwODg5NjhhMTVlNWYzNzMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2IvYmxrdG9vbC9ibGt0b29sXzQub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LXR5cG9zLWluLW1hbnBhZ2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1maXgtc3RyaW5nLWVycm9yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDMtRml4LTMtZC1hcmd1bWVudC1mb3ItQkxLUk9TRVQtaXQtbXVzdC1iZS1jb25zdC1pbnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiNjJlZGMwOWM5OTA4MTA3ZTY5MzkxYzg3ZjRmM2ZkNDAiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJiMWU2ZDU5MTI1NDZkMmE0YjcwNGVjNjVjMmI5NjY0YWEzYjQ2NjNlN2Q4MDBlMDY4MDMzMzAzMzVhMmNiNzY0IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59LTQub3JpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWY4ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjLmluYwpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkJlcmtlbGV5IExBTFIgWWFjYyBwYXJzZXIgZ2VuZXJhdG9yIgorREVTQ1JJUFRJT04gPSAiQSBwYXJzZXIgZ2VuZXJhdG9yIHV0aWxpdHkgdGhhdCByZWFkcyBhIGdyYW1tYXIgc3BlY2lmaWNhdGlvbiBmcm9tIGEgZmlsZSBhbmQgZ2VuZXJhdGVzIGFuIExSKDEpIFwKK3BhcnNlciBmb3IgaXQuICBUaGUgcGFyc2VycyBjb25zaXN0IG9mIGEgc2V0IG9mIExBTFIoMSkgcGFyc2luZyB0YWJsZXMgYW5kIGEgZHJpdmVyIHJvdXRpbmUgd3JpdHRlbiBpbiB0aGUgQyBcCitwcm9ncmFtbWluZyBsYW5ndWFnZS4iCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJQRCIKKworU1JDX1VSSSA9ICJmdHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9ieWFjYy9ieWFjYy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYnlhY2Mtb3Blbi5wYXRjaCIKKworRVhUUkFfT0VDT05GICs9ICItLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9J3MsXixiLCciCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmUoKSB7CisJaW5zdGFsbCAtbSAwNzU1ICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ251LWNvbmZpZy9jb25maWcuZ3Vlc3MgJHtTfQorCWluc3RhbGwgLW0gMDc1NSAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2dudS1jb25maWcvY29uZmlnLnN1YiAke1N9CisJb2VfcnVuY29uZgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnlhY2MvYnlhY2MvYnlhY2Mtb3Blbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTYwNTQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjL2J5YWNjLW9wZW4ucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworaW5kZXggNjIwY2UzZi4uODIwNzFhNCAxMDA2NDQKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtNTI2LDcgKzUyNiw3IEBAIG15X21rc3RlbXAoY2hhciAqdGVtcCkKKyAgICAgfQorICAgICBpZiAoKG5hbWUgPSB0ZW1wbmFtKGRuYW1lLCBmbmFtZSkpICE9IDApCisgICAgIHsKKy0JZmQgPSBvcGVuKG5hbWUsIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IpOworKyAgICAgIGZkID0gb3BlbihuYW1lLCBPX0NSRUFUIHwgT19FWENMIHwgT19SRFdSLCAwNjY2KTsKKyAJc3RyY3B5KHRlbXAsIG5hbWUpOworICAgICB9CisgICAgIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ieWFjYy9ieWFjY18yMDE1MDcxMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI1NDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J5YWNjL2J5YWNjXzIwMTUwNzExLmJiCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2lnaC4gVGhpcyBpcyBvbmUgb2YgdGhvc2UgcGxhY2VzIHdoZXJlIGV2ZXJ5b25lIGxpY2Vuc2VzIGl0IGRpZmZlcmVudGx5LiBTb21lb25lCisjIGV2ZW4gYXBwbHkgVUNCIHRvIGl0IChGcmVlL05ldC9PcGVuQlNEKS4gVGhlIG1haW50YWluZXIgc3RhdGVzIHRoYXQ6CisjICJJJ3ZlIGZvdW5kIG5vIHJlbGlhYmxlIHNvdXJjZSB3aGljaCBzdGF0ZXMgdGhhdCBieWFjYyBtdXN0IGJlYXIgYSBVQ0IgY29weXJpZ2h0LiIKKyMgU2V0dGluZyB0byBQRCBhcyB0aGlzIGlzIHdoYXQgdGhlIHVwc3RyZWFtIGhhcyBpdCBhcy4KKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BhY2thZ2UvZGViaWFuL2NvcHlyaWdodDttZDU9YzUyZmIyZDFiM2Y3NWIzYjc1MzQ5Mjc4MDdhMWI3MTQiCityZXF1aXJlIGJ5YWNjLmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiMjcwMDQwMTAzMDU4M2M0ZTkxNjlhYzdlYTdkMDhkZTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzM1NGU0ZWUxNGM0YTFiZjExZTU1ZGRlOTI3NTAxMWQxNDg4N2VmMDY2NDA2YTA4OGI2ZmE1NmNhZjAzOTI0OCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDE2M2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNzEgQEAKKworbGliX0xUTElCUkFSSUVTID0gbGliYnoyLmxhCisKK2xpYmJ6Ml9sYV9TT1VSQ0VTID0gYmxvY2tzb3J0LmMgIFwKKyAgICAgICAgICAgICAgICAgICAgaHVmZm1hbi5jICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY3JjdGFibGUuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgcmFuZHRhYmxlLmMgIFwKKyAgICAgICAgICAgICAgICAgICAgY29tcHJlc3MuYyAgIFwKKyAgICAgICAgICAgICAgICAgICAgZGVjb21wcmVzcy5jIFwKKyAgICAgICAgICAgICAgICAgICAgYnpsaWIuYworCitiaW5fUFJPR1JBTVMgPSBiemlwMiBiemlwMnJlY292ZXIKKworYnppcDJfU09VUkNFUyA9IGJ6aXAyLmMKK2J6aXAyX0xEQUREID0gbGliYnoyLmxhCitiemlwMl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworaW5jbHVkZV9IRUFERVJTID0gYnpsaWIuaAorCitiemlwMnJlY292ZXJfU09VUkNFUyA9IGJ6aXAycmVjb3Zlci5jCitiemlwMnJlY292ZXJfTERBREQgPSBsaWJiejIubGEKK2J6aXAycmVjb3Zlcl9ERVBFTkRFTkNJRVMgPSBsaWJiejIubGEKKworYmluX1NDUklQVFMgPSBiemdyZXAgYnptb3JlIGJ6ZGlmZgorCittYW5fTUFOUyA9IGJ6aXAyLjEgYnpncmVwLjEgYnptb3JlLjEgYnpkaWZmLjEKK0VYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKQorCitydW50ZXN0OgorCS4vYnppcDIgLTEgIDwgc2FtcGxlMS5yZWYgPiBzYW1wbGUxLnJiMgorCS4vYnppcDIgLTIgIDwgc2FtcGxlMi5yZWYgPiBzYW1wbGUyLnJiMgorCS4vYnppcDIgLTMgIDwgc2FtcGxlMy5yZWYgPiBzYW1wbGUzLnJiMgorCS4vYnppcDIgLWQgIDwgc2FtcGxlMS5iejIgPiBzYW1wbGUxLnRzdAorCS4vYnppcDIgLWQgIDwgc2FtcGxlMi5iejIgPiBzYW1wbGUyLnRzdAorCS4vYnppcDIgLWRzIDwgc2FtcGxlMy5iejIgPiBzYW1wbGUzLnRzdAorCUBpZiBjbXAgc2FtcGxlMS5iejIgc2FtcGxlMS5yYjI7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBjb21wcmVzcyI7XAorCWVsc2UgZWNobyAiRkFJTDogc2FtcGxlMSBjb21wcmVzcyI7IGZpCisJQGlmIGNtcCBzYW1wbGUyLmJ6MiBzYW1wbGUyLnJiMjsgdGhlbiBlY2hvICJQQVNTOiBzYW1wbGUyIGNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGNvbXByZXNzIjsgZmkKKwlAaWYgY21wIHNhbXBsZTMuYnoyIHNhbXBsZTMucmIyOyB0aGVuIGVjaG8gIlBBU1M6IHNhbXBsZTMgY29tcHJlc3MiO1wKKwllbHNlIGVjaG8gIkZBSUw6IHNhbXBsZTMgY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMS50c3Qgc2FtcGxlMS5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMSBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUxIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMi50c3Qgc2FtcGxlMi5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMiBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUyIGRlY29tcHJlc3MiOyBmaQorCUBpZiBjbXAgc2FtcGxlMy50c3Qgc2FtcGxlMy5yZWY7IHRoZW4gZWNobyAiUEFTUzogc2FtcGxlMyBkZWNvbXByZXNzIjtcCisJZWxzZSBlY2hvICJGQUlMOiBzYW1wbGUzIGRlY29tcHJlc3MiOyBmaQorCitpbnN0YWxsLXB0ZXN0OgorCWNwICQoc3JjZGlyKS9NYWtlZmlsZQkJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5yZWYJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMS5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMi5iejIJJChERVNURElSKS8KKwljcCAkKHNyY2Rpcikvc2FtcGxlMy5iejIJJChERVNURElSKS8KKwlsbiAtcyAkKGJpbmRpcikvYnppcDIJCSQoREVTVERJUikvYnppcDIKKworaW5zdGFsbC1leGVjLWhvb2s6CisJbG4gLXMgJChiaW5kaXIpL2J6aXAyJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnVuemlwMiQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iemlwMiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6Y2F0JChFWEVFWFQpCisJbG4gLXMgJChiaW5kaXIpL2J6Z3JlcCQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpL2J6ZWdyZXAkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpncmVwJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpmZ3JlcCQoRVhFRVhUKQorCWxuIC1zICQoYmluZGlyKS9iem1vcmUkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKS9iemxlc3MkKEVYRUVYVCkKKwlsbiAtcyAkKGJpbmRpcikvYnpkaWZmJChFWEVFWFQpICQoREVTVERJUikkKGJpbmRpcikvYnpjbXAkKEVYRUVYVCkKKworaW5zdGFsbC1kYXRhLWhvb2s6CisJZWNobyAiLnNvIG1hbjEvYnpncmVwLjEiID4gJChERVNURElSKSQobWFuZGlyKS9tYW4xL2J6ZWdyZXAuMQorCWVjaG8gIi5zbyBtYW4xL2J6Z3JlcC4xIiA+ICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9iemZncmVwLjEKKwllY2hvICIuc28gbWFuMS9iem1vcmUuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpsZXNzLjEKKwllY2hvICIuc28gbWFuMS9iemRpZmYuMSIgPiAkKERFU1RESVIpJChtYW5kaXIpL21hbjEvYnpjbXAuMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L2NvbmZpZ3VyZS5hYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZTU3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxNCBAQAorQUNfUFJFUkVRKFsyLjU3XSkKKworQUNfSU5JVChiemlwMiwgMi4wLjUsICwgbGliWHJlbmRlcikKK0FNX0lOSVRfQVVUT01BS0UoZm9yZWlnbikKK0FNX01BSU5UQUlORVJfTU9ERQorCisjQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKworIyBDaGVjayBmb3IgcHJvZ3MKK0FDX1BST0dfQ0MKK0FDX1BST0dfTElCVE9PTAorCitBQ19PVVRQVVQoW01ha2VmaWxlXSkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyLTEuMC42L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyMGZjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9iemlwMi9iemlwMi0xLjAuNi9ydW4tcHRlc3QKQEAgLTAsMCArMSwyIEBACisjIS9iaW4vc2gKK21ha2UgLWsgcnVudGVzdApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2J6aXAyL2J6aXAyXzEuMC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzM2ZlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvYnppcDIvYnppcDJfMS4wLjYuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJWZXJ5IGhpZ2gtcXVhbGl0eSBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJiemlwMiBjb21wcmVzc2VzIGZpbGVzIHVzaW5nIHRoZSBCdXJyb3dzLVdoZWVsZXIgYmxvY2stc29ydGluZyB0ZXh0IGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIFwKK0h1ZmZtYW4gY29kaW5nLiBDb21wcmVzc2lvbiBpcyBnZW5lcmFsbHkgY29uc2lkZXJhYmx5IGJldHRlciB0aGFuIHRoYXQgYWNoaWV2ZWQgYnkgbW9yZSBjb252ZW50aW9uYWwgXAorTFo3Ny9MWjc4LWJhc2VkIGNvbXByZXNzb3JzLCBhbmQgYXBwcm9hY2hlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIFBQTSBmYW1pbHkgb2Ygc3RhdGlzdGljYWwgY29tcHJlc3NvcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5iemlwLm9yZy8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gImJ6aXAyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTtiZWdpbmxpbmU9ODtlbmRsaW5lPTM3O21kNT00MGQ5ZDFlYjA1NzM2ZDFiZmM4NmNmZGQ5MTA2ZTZiMiIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuYnppcC5vcmcvJHtQVn0vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5hYztzdWJkaXI9JHtCUH0gXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUuYW07c3ViZGlyPSR7QlB9IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwYjUxNmY0NzA0ZDRhN2NiNTBhMWQ5N2U2ZThlMTViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyODQ4ZjM0ZmNkNWQ2Y2Y0N2RlZjAwNDYxZmNiNTI4YTA0ODRkOGVkZWY4MjA4ZDZkMmUyOTA5ZGM2MWQ5Y2QiCisKK1BBQ0tBR0VTID0rICJsaWJiejIiCisKK0NGTEFHU19hcHBlbmQgPSAiIC1mUElDIC1mcGljIC1XaW5saW5lIC1mbm8tc3RyZW5ndGgtcmVkdWNlIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMgcHRlc3QKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYnVuemlwMiBiemNhdCIKKworI2luc3RhbGwgYmluYXJpZXMgdG8gYnppcDItbmF0aXZlIHVuZGVyIHN5c3Jvb3QgZm9yIHJlcGxhY2VtZW50LW5hdGl2ZQorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tYmluZGlyPSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS8ke1BOfSIKKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisJY3AgLWYgJHtCfS9NYWtlZmlsZSAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorCXNlZCAtaSAtZSAic3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8IiAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQorCitGSUxFU19saWJiejIgPSAiJHtsaWJkaXJ9L2xpYioke1NPTElCU30iCisKK1BST1ZJREVTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIGJ6aXAyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXMtbmF0aXZlXzEuMy41OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmQzNGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWctYWx0ZXJuYXRpdmVzLW5hdGl2ZV8xLjMuNTkuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSByZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCisKK1NVTU1BUlkgPSAiJHtTVU1NQVJZX2Noa2NvbmZpZy1hbHRlcm5hdGl2ZXN9IgorREVTQ1JJUFRJT04gPSAiJHtERVNDUklQVElPTl9jaGtjb25maWctYWx0ZXJuYXRpdmVzfSIKK0RFUEVORFMgPSAiIgorUFJPVklERVMgKz0gInZpcnR1YWwvdXBkYXRlLWFsdGVybmF0aXZlcy1uYXRpdmUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworIyBUaGUgc3lzcm9vdCBicmFuY2ggaXMgMS4zLjU5ICsgc29tZSBnaXQgY29tbWl0cyBmcm9tIG1hc3RlciArIC0tc3lzcm9vdAorIyBzdXBwb3J0IGZvciBhbHRlcm5hdGl2ZXMuCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20va2VyZ290aC9jaGtjb25maWc7YnJhbmNoPXN5c3Jvb3QiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiY2Q0MzdlY2JkODk4NmM4OTQ0NDJmOGZjZTFlMDA2MWUyMGYwNGRlZSIKK1BWID0gIjEuMy41OSske1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworIyBXZSB3YW50IG91ciBuYXRpdmUgcmVjaXBlcyB0byBidWlsZCB1c2luZyB0aGUgdGFyZ2V0IHBhdGhzIHJhdGhlciB0aGFuIHBhdGhzCisjIGludG8gdGhlIHN5c3Jvb3QsIGFzIHdlIG1heSB1c2UgdGhlbSB0byBjb25zdHJ1Y3QgdGhlIHJvb3Rmcy4gQXMgc3VjaCwgd2UKKyMgb25seSBhZGp1c3QgdGhlIHBhdGhzIHRvIG1hdGNoIHRoZSBtZXRhZGF0YSBmb3IgdGhlIHRhcmdldCwgbm90IG5hdGl2ZS4KK29iZXlfdmFyaWFibGVzICgpIHsKKwlzZWQgLWkgJ3MsQUxURVJOQVRJVkVTX1JPT1QsT1BLR19PRkZMSU5FX1JPT1QsJyBhbHRlcm5hdGl2ZXMuYworfQorCitkb19jb21waWxlICgpIHsKKwlvZV9ydW5tYWtlIGFsdGVybmF0aXZlcworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcyBcCisJICAgICAgICAgICAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzCisKKwlpbnN0YWxsIC1EIC1tIDA3NTUgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vYWx0ZXJuYXRpdmVzCisJaW5zdGFsbCAtRCAtbSAwNjQ0IGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOAorCisJbG4gLXMgYWx0ZXJuYXRpdmVzICR7RH0ke2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcworCWxuIC1zIGFsdGVybmF0aXZlcy44ICR7RH0ke21hbmRpcn0vbWFuOC91cGRhdGUtYWx0ZXJuYXRpdmVzLjgKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2xzYgorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Noa2NvbmZpZy9jaGtjb25maWdfMS4zLjU4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ODg0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY2hrY29uZmlnL2Noa2NvbmZpZ18xLjMuNTguYmIKQEAgLTAsMCArMSw2NSBAQAorU1VNTUFSWSA9ICJBIHN5c3RlbSB0b29sIGZvciBtYWludGFpbmluZyB0aGUgL2V0Yy9yYyouZCBoaWVyYXJjaHkiCitERVNDUklQVElPTiA9ICJDaGtjb25maWcgaXMgYSBiYXNpYyBzeXN0ZW0gdXRpbGl0eS4gIEl0IHVwZGF0ZXMgYW5kIHF1ZXJpZXMgcnVubGV2ZWwgXAoraW5mb3JtYXRpb24gZm9yIHN5c3RlbSBzZXJ2aWNlcy4gIENoa2NvbmZpZyBtYW5pcHVsYXRlcyB0aGUgbnVtZXJvdXMgXAorc3ltYm9saWMgbGlua3MgaW4gL2V0Yy9yYy5kLCB0byByZWxpZXZlIHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBvZiBzb21lIFwKK29mIHRoZSBkcnVkZ2VyeSBvZiBtYW51YWxseSBlZGl0aW5nIHRoZSBzeW1ib2xpYyBsaW5rcy4iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb24gMS41IHJlcXVpcmVzIHNlbGludXgiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2MvaC9jaGtjb25maWciCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NTc0YzY5NjVhZTVmNTgzZTU1ODgwZTM5N2ZiYjAxOCIKKworREVQRU5EUyA9ICJsaWJuZXd0IHBvcHQiCitQUk9WSURFUyArPSAidmlydHVhbC91cGRhdGUtYWx0ZXJuYXRpdmVzIgorCitQUiA9ICJyNyIKKworU1JDX1VSSSA9ICJodHRwOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL2gvY2hrY29uZmlnLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzIwMzljYTY3ZjI3NDlmZTBjMDZlZjdjNmY4ZWUyNDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMThiNDk3ZDI1YjJjYWRhOTU1YzcyODEwZTQ1ZmNhZDgyODBkMTA1ZjE3Y2Y0NWUyOTcwZjE4MjcxMjExZGU2OCIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgTWFrZWZpbGUgdXNlcyBSUE1fT1BUX0ZMQUdTIHRvIGNvbnN0cnVjdCBDRkxBR1MKKyMKK0VYVFJBX09FTUFLRSA9ICJcCisgICAgJ1JQTV9PUFRfRkxBR1M9JHtDRkxBR1N9JyBcCisgICAgJ0xERkxBR1M9JHtMREZMQUdTfScgXAorICAgICdCSU5ESVI9JHtiYXNlX3NiaW5kaXJ9JyBcCisgICAgJ1NCSU5ESVI9JHtzYmluZGlyfScgXAorICAgICdNQU5ESVI9JHttYW5kaXJ9JyBcCisgICAgJ0FMVERJUj0ke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMnIFwKKyAgICAnQUxUREFUQURJUj0ke3N5c2NvbmZkaXJ9L2FsdGVybmF0aXZlcycgXAorIgorCitkb191bnBhY2tbcG9zdGZ1bmNzXSArPSAib2JleV92YXJpYWJsZXMiCitkb191bnBhY2tbdmFyZGVwc10gKz0gIm9iZXlfdmFyaWFibGVzIgorb2JleV92YXJpYWJsZXMgKCkgeworCXNlZCAtaSAtZSAncywvZXRjLCR7c3lzY29uZmRpcn0sOyBzLC9saWIvc3lzdGVtZCwke2Jhc2VfbGliZGlyfS9zeXN0ZW1kLCcgJHtTfS9sZXZlbGRiLmgKKwlzZWQgLWkgLWUgJ3MsL2V0Yy9hbHRlcm5hdGl2ZXMsJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC92YXIvbGliL2FsdGVybmF0aXZlcywke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHRlcm5hdGl2ZXMsJyBcCisJICAgICAgIC1lICdzLC91c3Ivc2hhcmUvbG9jYWxlLCR7ZGF0YWRpcn0vbG9jYWxlLCcgJHtTfS9hbHRlcm5hdGl2ZXMuYworfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgJ0RFU1RESVI9JHtEfScgJ0lOU1RBTExOTFNESVI9JHtEfSR7ZGF0YWRpcn0vbG9jYWxlJyBcCisJCSdCSU5ESVI9JHtzYmluZGlyfScgaW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vY2hrY29uZmlnLmQKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWFsdGVybmF0aXZlcyAke1BOfS1hbHRlcm5hdGl2ZXMtZG9jIgorU1VNTUFSWV8ke1BOfS1hbHRlcm5hdGl2ZXMgPSAiTWFpbnRhaW4gc3ltYm9saWMgbGlua3MgZGV0ZXJtaW5pbmcgZGVmYXVsdCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlcyA9ICJhbHRlcm5hdGl2ZXMgY3JlYXRlcywgcmVtb3ZlcywgbWFpbnRhaW5zIGFuZCBkaXNwbGF5cyBcCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ltYm9saWMgbGlua3MgY29tcHJpc2luZyB0aGUgYWx0ZXJuYXRpdmVzIHN5c3RlbS4iCitTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlcy1kb2MgPSAiJHtTVU1NQVJZXyR7UE59LWFsdGVybmF0aXZlc30gLSBEb2N1bWVudGF0aW9uIGZpbGVzIgorREVTQ1JJUFRJT05fJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke0RFU0NSSVBUSU9OXyR7UE59LWFsdGVybmF0aXZlc30gIFwKK1RoaXMgcGFja2FnZSBjb250YWlucyBkb2N1bWVudGF0aW9uLiIKK1JQUk9WSURFU18ke1BOfS1hbHRlcm5hdGl2ZXMgKz0gInVwZGF0ZS1hbHRlcm5hdGl2ZXMiCitSQ09ORkxJQ1RTXyR7UE59LWFsdGVybmF0aXZlcyA9ICJ1cGRhdGUtYWx0ZXJuYXRpdmVzLW9wa2cgdXBkYXRlLWFsdGVybmF0aXZlcy1kcGtnIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzID0gIiR7c2JpbmRpcn0vYWx0ZXJuYXRpdmVzICR7c2JpbmRpcn0vdXBkYXRlLWFsdGVybmF0aXZlcyBcCisJCQkgICAgJHtzeXNjb25mZGlyfS9hbHRlcm5hdGl2ZXMgJHtsb2NhbHN0YXRlZGlyfS9saWIvYWx0ZXJuYXRpdmVzIgorRklMRVNfJHtQTn0tYWx0ZXJuYXRpdmVzLWRvYyA9ICIke21hbmRpcn0vbWFuOC9hbHRlcm5hdGl2ZXMuOCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW44L3VwZGF0ZS1hbHRlcm5hdGl2ZXMuOCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMjEzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IGNwaW8tMi4xMS9nbnUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcGlvLTIuMTEub3JpZy9nbnUvTWFrZWZpbGUuYW0KKysrKyBjcGlvLTIuMTEvZ251L01ha2VmaWxlLmFtCitAQCAtNzM0LDcgKzczNCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRhZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2NwaW8tQ1ZFLTIwMTUtMTE5Ny5wYXRjaApAQCAtMCwwICsxLDE1NCBAQAorRGVzY3JpcHRpb246IENWRS0yMDE1LTExOTcKKyBBcHBseSBwYXRjaCBieSBWaXRlenNsYXYgQ2l6ZWsgb2YgU3VTRSB0byBmaXggQ1ZFLTIwMTUtMTE5Ny4KKyBVcHN0cmVhbSBpcyBkb3JtYW50IG9yIG5vIGxvbmdlciBleGlzdGluZy4gVG8gcmVzdG9yZSB0aGUgb2xkCisgYmVoYXZpb3VyIHVzZSAtLWV4dHJhY3Qtb3Zlci1zeW1saW5rcyAoQ2xvc2VzOiAjNzc0NjY5KQorIFRoaXMgaXNzdWUgaGFzIGJlZW4gZGlzY292ZXJlZCBieSBBbGV4YW5kZXIgQ2hlcmVwYW5vdi4KK0F1dGhvcjogVml0ZXpzbGF2IENpemVrIDx2Y2l6ZWtAc3VzZS5jej4KK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc3NDY2OQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gY3Bpby0yLjExK2Rmc2cub3JpZy9kb2MvY3Bpby4xCisrKysgY3Bpby0yLjExK2Rmc2cvZG9jL2NwaW8uMQorQEAgLTIyLDYgKzIyLDcgQEAgY3BpbyBcLSBjb3B5IGZpbGVzIHRvIGFuZCBmcm9tIGFyY2hpdmVzCisgW1wtXC1vd25lcj1bdXNlcl1bOi5dW2dyb3VwXV0gW1wtXC1uby1wcmVzZXJ2ZS1vd25lcl0gW1wtXC1tZXNzYWdlPW1lc3NhZ2VdCisgW1wtXC1mb3JjZVwtbG9jYWxdIFtcLVwtbm9cLWFic29sdXRlXC1maWxlbmFtZXNdIFtcLVwtc3BhcnNlXQorIFtcLVwtb25seVwtdmVyaWZ5XC1jcmNdIFtcLVwtdG9cLXN0ZG91dF0gW1wtXC1xdWlldF0gW1wtXC1yc2gtY29tbWFuZD1jb21tYW5kXQorK1tcLVwtZXh0cmFjdFwtb3Zlclwtc3ltbGlua3NdCisgW1wtXC1oZWxwXSBbXC1cLXZlcnNpb25dIFtwYXR0ZXJuLi4uXSBbPCBhcmNoaXZlXQorIAorIC5CIGNwaW8KKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9jb3B5aW4uYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9jb3B5aW4uYworQEAgLTcwMCw2ICs3MDAsNTEgQEAgY29weWluX2xpbmsgKHN0cnVjdCBjcGlvX2ZpbGVfc3RhdCAqZmlsZQorICAgZnJlZSAobGlua19uYW1lKTsKKyB9CisgDAorKworK3N0YXRpYyBpbnQKKytwYXRoX2NvbnRhaW5zX3N5bWxpbmsoY2hhciAqcGF0aCkKKyt7CisrICBzdHJ1Y3Qgc3RhdCBzdDsKKysgIGNoYXIgKnNsYXNoOworKyAgY2hhciAqbmV4dHNsYXNoOworKworKyAgLyogd2UgZ290IE5VTEwgcG9pbnRlciBvciBlbXB0eSBzdHJpbmcgKi8KKysgIGlmICghcGF0aCB8fCAhKnBhdGgpIHsKKysgICAgcmV0dXJuIGZhbHNlOworKyAgfQorKworKyAgc2xhc2ggPSBwYXRoOworKworKyAgd2hpbGUgKChuZXh0c2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSAhPSBOVUxMKSB7CisrICAgIHNsYXNoID0gbmV4dHNsYXNoOworKyAgICAqc2xhc2ggPSAnXDAnOworKworKyAgICBpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKSB7CisrICAgICAgaWYgKGVycm5vID09IEVMT09QKSB7CisrICAgICAgICAvKiBFTE9PUCAtIHRvbyBtYW55IHN5bWxpbmtzICovCisrICAgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgICByZXR1cm4gdHJ1ZTsKKysgICAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT01FTSkgeworKyAgICAgICAgLyogTm8gbWVtb3J5IGZvciBsc3RhdCAtIHRlcm1pbmF0ZSAqLworKyAgICAgICAgeGFsbG9jX2RpZSgpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICAvKiBjYW5ub3QgbHN0YXQgcGF0aCAtIGdpdmUgdXAgKi8KKysgICAgICAgICpzbGFzaCA9ICcvJzsKKysgICAgICAgIHJldHVybiBmYWxzZTsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKFNfSVNMTksoc3Quc3RfbW9kZSkpIHsKKysgICAgICAqc2xhc2ggPSAnLyc7CisrICAgICAgcmV0dXJuIHRydWU7CisrICAgIH0KKysKKysgICAgKnNsYXNoID0gJy8nOworKyAgfQorKworKyAgcmV0dXJuIGZhbHNlOworK30KKysKKyBzdGF0aWMgdm9pZAorIGNvcHlpbl9maWxlIChzdHJ1Y3QgY3Bpb19maWxlX3N0YXQgKmZpbGVfaGRyLCBpbnQgaW5fZmlsZV9kZXMpCisgeworQEAgLTE0NzEsNiArMTUxNiwyMyBAQCBwcm9jZXNzX2NvcHlfaW4gKCkKKyAJeworIAkgIC8qIENvcHkgdGhlIGlucHV0IGZpbGUgaW50byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZS4gICovCisgCisrICAgICAgICAgIC8qIENhbiB3ZSB3cml0ZSBmaWxlcyBvdmVyIHN5bWxpbmtzPyAqLworKyAgICAgICAgICBpZiAoIWV4dHJhY3Rfb3Zlcl9zeW1saW5rcykKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICBpZiAocGF0aF9jb250YWluc19zeW1saW5rKGZpbGVfaGRyLmNfbmFtZSkpCisrICAgICAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgICAvKiBza2lwIHRoZSBmaWxlICovCisrICAgICAgICAgICAgICAgICAgLyoKKysgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IHdyaXRlIG92ZXIgc3ltbGlua3MuIFNraXBwaW5nICVzXG4iLCBmaWxlX2hkci5jX25hbWUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfdG9zc19pbnB1dCAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLmNfZmlsZXNpemUpOworKyAgICAgICAgICAgICAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHIuY19maWxlc2l6ZSk7CisrICAgICAgICAgICAgICAgICAgY29udGludWU7CisrICAgICAgICAgICAgICAgICAgKi8KKysgICAgICAgICAgICAgICAgICAvKiB0ZXJtaW5hdGUgKi8KKysJICAgICAgICAgIGVycm9yICgxLCAwLCBfKCJDYW4ndCB3cml0ZSBvdmVyIHN5bWxpbmtzOiAlc1xuIiksIGZpbGVfaGRyLmNfbmFtZSk7CisrICAgICAgICAgICAgICAgIH0KKysgICAgICAgICAgICB9CisrCisgCSAgLyogRG8gd2UgbmVlZCB0byByZW5hbWUgdGhlIGZpbGU/ICovCisgCSAgaWYgKHJlbmFtZV9mbGFnIHx8IHJlbmFtZV9iYXRjaF9maWxlKQorIAkgICAgeworLS0tIGNwaW8tMi4xMStkZnNnLm9yaWcvc3JjL2V4dGVybi5oCisrKysgY3Bpby0yLjExK2Rmc2cvc3JjL2V4dGVybi5oCitAQCAtOTUsNiArOTUsNyBAQCBleHRlcm4gY2hhciBpbnB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zcGVjaWFsOworIGV4dGVybiBjaGFyIGlucHV0X2lzX3NlZWthYmxlOworIGV4dGVybiBjaGFyIG91dHB1dF9pc19zZWVrYWJsZTsKKytleHRlcm4gYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisgZXh0ZXJuIGludCAoKnhzdGF0KSAoKTsKKyBleHRlcm4gdm9pZCAoKmNvcHlfZnVuY3Rpb24pICgpOworIAwKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9nbG9iYWwuYworKysrIGNwaW8tMi4xMStkZnNnL3NyYy9nbG9iYWwuYworQEAgLTE4Nyw2ICsxODcsOSBAQCBib29sIHRvX3N0ZG91dF9vcHRpb24gPSBmYWxzZTsKKyAvKiBUaGUgbmFtZSB0aGlzIHByb2dyYW0gd2FzIHJ1biB3aXRoLiAgKi8KKyBjaGFyICpwcm9ncmFtX25hbWU7CisgCisrLyogRXh0cmFjdCBmaWxlcyBvdmVyIHN5bWJvbGljIGxpbmtzICovCisrYm9vbCBleHRyYWN0X292ZXJfc3ltbGlua3M7CisrCisgLyogQSBwb2ludGVyIHRvIGVpdGhlciBsc3RhdCBvciBzdGF0LCBkZXBlbmRpbmcgb24gd2hldGhlcgorICAgIGRlcmVmZXJlbmNpbmcgb2Ygc3ltbGlua3MgaXMgZG9uZSBmb3IgaW5wdXQgZmlsZXMuICAqLworIGludCAoKnhzdGF0KSAoKTsKKy0tLSBjcGlvLTIuMTErZGZzZy5vcmlnL3NyYy9tYWluLmMKKysrKyBjcGlvLTIuMTErZGZzZy9zcmMvbWFpbi5jCitAQCAtNTcsNyArNTcsOCBAQCBlbnVtIGNwaW9fb3B0aW9ucyB7CisgICBGT1JDRV9MT0NBTF9PUFRJT04sICAgICAgICAgICAgCisgICBERUJVR19PUFRJT04sICAgICAgICAgICAgICAgICAgCisgICBCTE9DS19TSVpFX09QVElPTiwgICAgICAgICAgICAgCistICBUT19TVERPVVRfT1BUSU9OCisrICBUT19TVERPVVRfT1BUSU9OLAorKyAgRVhUUkFDVF9PVkVSX1NZTUxJTktTCisgfTsKKyAKKyBjb25zdCBjaGFyICpwcm9ncmFtX2F1dGhvcnNbXSA9CitAQCAtMjIyLDYgKzIyMyw4IEBAIHN0YXRpYyBzdHJ1Y3QgYXJncF9vcHRpb24gb3B0aW9uc1tdID0geworICAgIE5fKCJDcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyB3aGVyZSBuZWVkZWQiKSwgR1JJRCsxIH0sCisgICB7Im5vLXByZXNlcnZlLW93bmVyIiwgTk9fUFJFU0VSVkVfT1dORVJfT1BUSU9OLCAwLCAwLAorICAgIE5fKCJEbyBub3QgY2hhbmdlIHRoZSBvd25lcnNoaXAgb2YgdGhlIGZpbGVzIiksIEdSSUQrMSB9LAorKyAgeyJleHRyYWN0LW92ZXItc3ltbGlua3MiLCBFWFRSQUNUX09WRVJfU1lNTElOS1MsIDAsIDAsCisrICAgTl8oIkZvcmNlIHdyaXRpbmcgb3ZlciBzeW1ib2xpYyBsaW5rcyIpLCBHUklEKzEgfSwKKyAgIHsidW5jb25kaXRpb25hbCIsICd1JywgTlVMTCwgMCwKKyAgICBOXygiUmVwbGFjZSBhbGwgZmlsZXMgdW5jb25kaXRpb25hbGx5IiksIEdSSUQrMSB9LAorICAgeyJzcGFyc2UiLCBTUEFSU0VfT1BUSU9OLCBOVUxMLCAwLAorQEAgLTQxMiw2ICs0MTUsMTAgQEAgY3JjIG5ld2Mgb2RjIGJpbiB1c3RhciB0YXIgKGFsbC1jYXBzIGFscworICAgICAgIG5vX2Nob3duX2ZsYWcgPSB0cnVlOworICAgICAgIGJyZWFrOworIAorKyAgICBjYXNlIEVYVFJBQ1RfT1ZFUl9TWU1MSU5LUzoJCSAgICAgICAgLyogLS1leHRyYWN0LW92ZXItc3ltbGlua3MgKi8KKysgICAgICBleHRyYWN0X292ZXJfc3ltbGlua3MgPSB0cnVlOworKyAgICAgIGJyZWFrOworKworICAgICBjYXNlICdvJzoJCS8qIENvcHktb3V0IG1vZGUuICAqLworICAgICAgIGlmIChjb3B5X2Z1bmN0aW9uICE9IDApCisgCWVycm9yIChQQVhFWElUX0ZBSUxVUkUsIDAsIF8oIk1vZGUgYWxyZWFkeSBkZWZpbmVkIikpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjExL2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZDNjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKQEAgLTAsMCArMSwyMjAgQEAKK2NwaW86IEZpeCBtZW1vcnkgb3ZlcnJ1biBvbiByZWFkaW5nIGltcHJvcGVybHkgY3JlYXRlZCBsaW5rIHJlY29yZHMKKworU2lnbmVkLW9mZi1ieTogQmlhbiBOYWltZW5nIDxiaWFubm1AY24uZnVqaXRzdS5jb20+CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L2NwaW8uZ2l0L2NvbW1pdC8/aWQ9NzQ2ZjNmZjY3MGRjZmNkZDI4ZmNjOTkwZTc5Y2Q2ZmNjYzdhZTQ4ZAorCisgICogc3JjL2NvcHlpbi5jIChnZXRfbGlua19uYW1lKTogTmV3IGZ1bmN0aW9uLgorICAobGlzdF9maWxlLCBjb3B5aW5fbGluayk6IHVzZSBnZXRfbGlua19uYW1lCisKKyAgKiB0ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQ6IE5ldyBmaWxlLgorICAqIHRlc3RzL3N5bWxpbmstbG9uZy5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvTWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMuCisgICogdGVzdHMvdGVzdHN1aXRlLmF0OiBMaWtld2lzZS4KKworICBTZWUgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1jcGlvLzIwMTQtMTEvbXNnMDAwMDcuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFNlcmdleSBQb3pueWFrb2ZmIDxncmF5QGdudS5vcmcudWE+CisKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvc3JjL2NvcHlpbi5jIGNwaW8tMi4xMS9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuMTEub3JpZy9zcmMvY29weWluLmMJMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvc3JjL2NvcHlpbi5jCTIwMTQtMTItMDggMTM6MTQ6MDQuMzU1NTQ3NTA4ICswODAwCitAQCAtMTI2LDYgKzEyNiwyOCBAQCB0YXBlX3NraXBfcGFkZGluZyAoaW50IGluX2ZpbGVfZGVzLCBvZmZfCisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTY1MCwxMCArNjY3LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0gY3Bpby0yLjExL3Rlc3RzL01ha2VmaWxlLmFtCistLS0gY3Bpby0yLjExLm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMC0wMi0xNSAxODowMjoyMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuMTEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxNC0xMi0wOCAxMzoxNDo0OS45MzE1NDU3MjcgKzA4MDAKK0BAIC01Miw2ICs1Miw4IEBAIFRFU1RTVUlURV9BVCA9IFwKKyAgc2V0c3RhdDA0LmF0XAorICBzZXRzdGF0MDUuYXRcCisgIHN5bWxpbmsuYXRcCisrIHN5bWxpbmstYmFkLWxlbmd0aC5hdFwKKysgc3ltbGluay1sb25nLmF0XAorICB2ZXJzaW9uLmF0CisgCisgVEVTVFNVSVRFID0gJChzcmNkaXIpL3Rlc3RzdWl0ZQorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMzoxNzo0NS45Nzk1Mzg4NDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy9zeW1saW5rLWxvbmcuYXQgY3Bpby0yLjExL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy9zeW1saW5rLWxvbmcuYXQJMjAxNC0xMi0wOCAxMzoxNzo1Ny4yMTk1Mzg0MDggKzA4MDAKK0BAIC0wLDAgKzEsNDYgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEuOTAgY2hhbmdlZCB0aGUgd2F5IHN5bWxpbmsgbmFtZSBpcyByZWFkIGZyb20gYXJjaGl2ZS4KKysjIFJlZmVyZW5jZXM6CisrIyBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisrCisrQVRfU0VUVVAoW3N5bWxpbmstbG9uZ10pCisrQVRfS0VZV09SRFMoW3N5bWxpbmstbG9uZyBjb3B5b3V0XSkKKysKKytBVF9DSEVDSyhbCisrCisrIyBsZW4oZGlybmFtZSkgPiBSRUFEQlVGU0laRQorK2Rpcm5hbWU9CisrZm9yIGkgaW4gezEuLjUyfTsgZG8KKysgICAgZGlybmFtZT0ieHh4eHh4eHh4LyRkaXJuYW1lIgorKyAgICBta2RpciAiJGRpcm5hbWUiCisrZG9uZQorK2xuIC1zICIkZGlybmFtZSIgeCB8fCBBVF9TS0lQX1RFU1QKKysKKytlY2hvIHggfCBjcGlvIC1vID4gYXIKKytsaXN0PWBjcGlvIC10diA8IGFyIHwgc2VkICdzfC4qLT4gfHwnYAorK3Rlc3QgIiRsaXN0IiA9ICIkZGlybmFtZSIgJiYgZWNobyBzdWNjZXNzIHx8IGVjaG8gZmFpbAorK10sCisrWzBdLAorK1tzdWNjZXNzCisrXSxbMiBibG9ja3MKKysyIGJsb2NrcworK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuMTEub3JpZy90ZXN0cy90ZXN0c3VpdGUuYXQgY3Bpby0yLjExL3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi4xMS5vcmlnL3Rlc3RzL3Rlc3RzdWl0ZS5hdAkyMDEwLTAyLTE1IDE4OjAyOjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi4xMS90ZXN0cy90ZXN0c3VpdGUuYXQJMjAxNC0xMi0wOCAxMzoxNToxMy41MTU1NDQ4MDUgKzA4MDAKK0BAIC0zMSw2ICszMSw4IEBAIG00X2luY2x1ZGUoW3ZlcnNpb24uYXRdKQorIAorIG00X2luY2x1ZGUoW2lub3V0LmF0XSkKKyBtNF9pbmNsdWRlKFtzeW1saW5rLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWJhZC1sZW5ndGguYXRdKQorK200X2luY2x1ZGUoW3N5bWxpbmstbG9uZy5hdF0pCisgbTRfaW5jbHVkZShbaW50ZXJkaXIuYXRdKQorIAorIG00X2luY2x1ZGUoW3NldHN0YXQwMS5hdF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvcmVtb3ZlLWdldHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMTEzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9yZW1vdmUtZ2V0cy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitJU08gQzExIHJlbW92ZXMgdGhlIHNwZWNpZmljYXRpb24gb2YgZ2V0cygpIGZyb20gdGhlIEMgbGFuZ3VhZ2UsIGVnbGliYyAyLjE2KyByZW1vdmVkIGl0CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGNwaW8tMi4xMS9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNwaW8tMi4xMS5vcmlnL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTM6NDMuMTMzMDY2MjQ3IC0wNzAwCisrKysgY3Bpby0yLjExL2dudS9zdGRpby5pbi5oCTIwMTItMDctMDQgMTI6MTQ6MTAuMTg5MDY3NTY0IC0wNzAwCitAQCAtMTM4LDggKzEzOCwxMCBAQAorIC8qIEl0IGlzIHZlcnkgcmFyZSB0aGF0IHRoZSBkZXZlbG9wZXIgZXZlciBoYXMgZnVsbCBjb250cm9sIG9mIHN0ZGluLAorICAgIHNvIGFueSB1c2Ugb2YgZ2V0cyB3YXJyYW50cyBhbiB1bmNvbmRpdGlvbmFsIHdhcm5pbmcuICBBc3N1bWUgaXQgaXMKKyAgICBhbHdheXMgZGVjbGFyZWQsIHNpbmNlIGl0IGlzIHJlcXVpcmVkIGJ5IEM4OS4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgX0dMX1dBUk5fT05fVVNFIChnZXRzLCAiZ2V0cyBpcyBhIHNlY3VyaXR5IGhvbGUgLSB1c2UgZmdldHMgaW5zdGVhZCIpOworKyNlbmRpZgorIAorICNpZiBAR05VTElCX0ZPUEVOQAorICMgaWYgQFJFUExBQ0VfRk9QRU5ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi4xMS9zdGF0ZGVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjhlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuMTEvc3RhdGRlZi5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBdm9pZCBtdWx0aXBsZSBzdGF0IGRlZmluaXRpb25zCitQYXRjaCB0YWtlbiBmcm9tIGNwaW8gbWFpbGluZyBsaXN0IHBvc3RpbmcgMjAxMC0wMy0xOQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK2RpZmYgLXVyTiBjcGlvLTIuMTEub3JpZy9zcmMvZmlsZXR5cGVzLmggY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAorLS0tIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaAkyMDEwLTAyLTEyIDAyOjE5OjIzLjAwMDAwMDAwMCAtMDgwMAorKysrIGNwaW8tMi4xMS9zcmMvZmlsZXR5cGVzLmgJMjAxMC0wNy0yMyAxMzoxNzoyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC04Miw0ICs4Miw2IEBACisgI2RlZmluZSBsc3RhdCBzdGF0CisgI2VuZGlmCisgaW50IGxzdGF0ICgpOworKyNpZm5kZWYgc3RhdAorIGludCBzdGF0ICgpOworKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvYXZvaWRfaGVhcF9vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhN2NmNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCit0aGUgR1BMdjIgdGFyIHJlY2lwZSBwYXRjaCBpcyBhbHNvIGFwcGxpY2FibGUgdG8gdGhpcyBHUEx2MiBjcGlvIAorcmVjaXBlLCBhcyB0aGV5IHNoYXJlIGNvZGUuCisKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMDQvMjUKKworSW5kZXg6IHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdGFyLTEuMTcub3JpZy9saWIvcnRhcGVsaWIuYworKysrIHRhci0xLjE3L2xpYi9ydGFwZWxpYi5jCitAQCAtNTcwLDcgKzU3MCw3IEBAIHJtdF9yZWFkX18gKGludCBoYW5kbGUsIGNoYXIgKmJ1ZmZlciwgc2kKKyAKKyAgIHNwcmludGYgKGNvbW1hbmRfYnVmZmVyLCAiUiVsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCk7CisgICBpZiAoZG9fY29tbWFuZCAoaGFuZGxlLCBjb21tYW5kX2J1ZmZlcikgPT0gLTEKKy0gICAgICB8fCAoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKQorKyAgICAgIHx8ICgoc3RhdHVzID0gZ2V0X3N0YXR1cyAoaGFuZGxlKSkgPT0gU0FGRV9SRUFEX0VSUk9SKSB8fCAoc3RhdHVzID4gbGVuZ3RoKSkKKyAgICAgcmV0dXJuIFNBRkVfUkVBRF9FUlJPUjsKKyAKKyAgIGZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBzdGF0dXM7IGNvdW50ZXIgKz0gcmxlbiwgYnVmZmVyICs9IHJsZW4pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0OGU3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L2ZpeC1tZW1vcnktb3ZlcnJ1bi5wYXRjaApAQCAtMCwwICsxLDIxNyBAQAorY3BpbzogRml4IG1lbW9yeSBvdmVycnVuIG9uIHJlYWRpbmcgaW1wcm9wZXJseSBjcmVhdGVkIGxpbmsgcmVjb3JkcworCitTaWduZWQtb2ZmLWJ5OiBCaWFuIE5haW1lbmcgPGJpYW5ubUBjbi5mdWppdHN1LmNvbT4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvY3Bpby5naXQvY29tbWl0Lz9pZD03NDZmM2ZmNjcwZGNmY2RkMjhmY2M5OTBlNzljZDZmY2NjN2FlNDhkCisKKyAgKiBzcmMvY29weWluLmMgKGdldF9saW5rX25hbWUpOiBOZXcgZnVuY3Rpb24uCisgIChsaXN0X2ZpbGUsIGNvcHlpbl9saW5rKTogdXNlIGdldF9saW5rX25hbWUKKworICAqIHRlc3RzL3N5bWxpbmstYmFkLWxlbmd0aC5hdDogTmV3IGZpbGUuCisgICogdGVzdHMvc3ltbGluay1sb25nLmF0OiBOZXcgZmlsZS4KKyAgKiB0ZXN0cy9NYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcy4KKyAgKiB0ZXN0cy90ZXN0c3VpdGUuYXQ6IExpa2V3aXNlLgorCisgIFNlZSBodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYnVnLWNwaW8vMjAxNC0xMS9tc2cwMDAwNy5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogU2VyZ2V5IFBvem55YWtvZmYgPGdyYXlAZ251Lm9yZy51YT4KKworZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYyBjcGlvLTIuOC9zcmMvY29weWluLmMKKy0tLSBjcGlvLTIuOC5vcmlnL3NyYy9jb3B5aW4uYwkyMDA3LTA2LTA3IDE5OjU4OjAzLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3NyYy9jb3B5aW4uYwkyMDE0LTEyLTA4IDExOjMwOjAxLjE1OTc5MTQ4NCArMDgwMAorQEAgLTEyNiw2ICsxMjYsMjggQEAgdGFwZV9za2lwX3BhZGRpbmcgKGludCBpbl9maWxlX2RlcywgaW50CisgfQorIAorIAwKKytzdGF0aWMgY2hhciAqCisrZ2V0X2xpbmtfbmFtZSAoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorK3sKKysgIG9mZl90IG4gPSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDE7CisrICBjaGFyICpsaW5rX25hbWU7CisrCisrICBpZiAobiA9PSAwIHx8IG4gPiBTSVpFX01BWCkKKysgICAgeworKyAgICAgIGVycm9yICgwLCAwLCBfKCIlczogc3RvcmVkIGZpbGVuYW1lIGxlbmd0aCB0b28gYmlnIiksIGZpbGVfaGRyLT5jX25hbWUpOworKyAgICAgIGxpbmtfbmFtZSA9IE5VTEw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgIGxpbmtfbmFtZSA9IHhtYWxsb2MgKG4pOworKyAgICAgIHRhcGVfYnVmZmVyZWRfcmVhZCAobGlua19uYW1lLCBpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICAgIGxpbmtfbmFtZVtmaWxlX2hkci0+Y19maWxlc2l6ZV0gPSAnXDAnOworKyAgICAgIHRhcGVfc2tpcF9wYWRkaW5nIChpbl9maWxlX2RlcywgZmlsZV9oZHItPmNfZmlsZXNpemUpOworKyAgICB9CisrICByZXR1cm4gbGlua19uYW1lOworK30KKysKKysMCisgc3RhdGljIHZvaWQKKyBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkciwgaW50IGluX2ZpbGVfZGVzKQorIHsKK0BAIC0xMzYsMjEgKzE1OCwxNiBAQCBsaXN0X2ZpbGUoc3RydWN0IGNwaW9fZmlsZV9zdGF0KiBmaWxlX2hkCisgCXsKKyAJICBpZiAoYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3RhciAmJiBhcmNoaXZlX2Zvcm1hdCAhPSBhcmZfdXN0YXIpCisgCSAgICB7CistCSAgICAgIGNoYXIgKmxpbmtfbmFtZSA9IE5VTEw7CS8qIE5hbWUgb2YgaGFyZCBhbmQgc3ltYm9saWMgbGlua3MuICAqLworLQorLQkgICAgICBsaW5rX25hbWUgPSAoY2hhciAqKSB4bWFsbG9jICgodW5zaWduZWQgaW50KSBmaWxlX2hkci0+Y19maWxlc2l6ZSArIDEpOworLQkgICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0JICAgICAgdGFwZV9idWZmZXJlZF9yZWFkIChsaW5rX25hbWUsIGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIGxvbmdfZm9ybWF0IChmaWxlX2hkciwgbGlua19uYW1lKTsKKy0JICAgICAgZnJlZSAobGlua19uYW1lKTsKKy0JICAgICAgdGFwZV9za2lwX3BhZGRpbmcgKGluX2ZpbGVfZGVzLCBmaWxlX2hkci0+Y19maWxlc2l6ZSk7CistCSAgICAgIHJldHVybjsKKysJICAgICAgY2hhciAqbGlua19uYW1lID0gZ2V0X2xpbmtfbmFtZSAoZmlsZV9oZHIsIGluX2ZpbGVfZGVzKTsKKysJICAgICAgaWYgKGxpbmtfbmFtZSkKKysJCXsKKysJCSAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBsaW5rX25hbWUpOworKwkJICBmcmVlIChsaW5rX25hbWUpOworKwkJfQorIAkgICAgfQorIAkgIGVsc2UKKy0JICAgIHsKKyAJICAgICAgbG9uZ19mb3JtYXQgKGZpbGVfaGRyLCBmaWxlX2hkci0+Y190YXJfbGlua25hbWUpOworLQkgICAgICByZXR1cm47CistCSAgICB9CisrCSAgcmV0dXJuOworIAl9CisgICAgICAgZWxzZQorICNlbmRpZgorQEAgLTczMiwxMCArNzQ5LDcgQEAgY29weWluX2xpbmsoc3RydWN0IGNwaW9fZmlsZV9zdGF0ICpmaWxlXworIAorICAgaWYgKGFyY2hpdmVfZm9ybWF0ICE9IGFyZl90YXIgJiYgYXJjaGl2ZV9mb3JtYXQgIT0gYXJmX3VzdGFyKQorICAgICB7CistICAgICAgbGlua19uYW1lID0gKGNoYXIgKikgeG1hbGxvYyAoKHVuc2lnbmVkIGludCkgZmlsZV9oZHItPmNfZmlsZXNpemUgKyAxKTsKKy0gICAgICBsaW5rX25hbWVbZmlsZV9oZHItPmNfZmlsZXNpemVdID0gJ1wwJzsKKy0gICAgICB0YXBlX2J1ZmZlcmVkX3JlYWQgKGxpbmtfbmFtZSwgaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKy0gICAgICB0YXBlX3NraXBfcGFkZGluZyAoaW5fZmlsZV9kZXMsIGZpbGVfaGRyLT5jX2ZpbGVzaXplKTsKKysgICAgICBsaW5rX25hbWUgPSBnZXRfbGlua19uYW1lIChmaWxlX2hkciwgaW5fZmlsZV9kZXMpOworICAgICB9CisgICBlbHNlCisgICAgIHsKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9NYWtlZmlsZS5hbSBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvTWFrZWZpbGUuYW0JMjAwNi0xMC0yNCAxODozMjoxMy4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9NYWtlZmlsZS5hbQkyMDE0LTEyLTA4IDExOjMwOjUyLjM4Nzc4OTQ4MiArMDgwMAorQEAgLTQ1LDYgKzQ1LDggQEAgVEVTVFNVSVRFX0FUID0gXAorICB0ZXN0c3VpdGUuYXRcCisgIGlub3V0LmF0XAorICBzeW1saW5rLmF0XAorKyBzeW1saW5rLWJhZC1sZW5ndGguYXRcCisrIHN5bWxpbmstbG9uZy5hdFwKKyAgdmVyc2lvbi5hdAorIAorIFRFU1RTVUlURSA9ICQoc3JjZGlyKS90ZXN0c3VpdGUKK2RpZmYgLU51cnAgY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQgY3Bpby0yLjgvdGVzdHMvc3ltbGluay1iYWQtbGVuZ3RoLmF0CistLS0gY3Bpby0yLjgub3JpZy90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMTk3MC0wMS0wMSAwODowMDowMC4wMDAwMDAwMDAgKzA4MDAKKysrKyBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWJhZC1sZW5ndGguYXQJMjAxNC0xMi0wOCAxMTozMzoyNS4yODM3ODM1MDcgKzA4MDAKK0BAIC0wLDAgKzEsNDkgQEAKKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b200dGUgdG8gY3JlYXRlIHRlc3RzdWl0ZS4gIC0qLSBBdXRvdGVzdCAtKi0KKysjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorKyMgYW55IGxhdGVyIHZlcnNpb24uCisrCisrIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisrIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisrIyAwMjExMC0xMzAxIFVTQS4KKysKKysjIENwaW8gdjIuMTEgZGlkIHNlZ2ZhdWx0IHdpdGggYmFkbHkgc2V0IHN5bWxpbmsgbGVuZ3RoLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1iYWQtbGVuZ3RoXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0RBVEEoW0FSQ0hJVkUuYmFzZTY0XSwKKytbeDNFakFJQkF0SUV0Snk4bkFRQUFBSFJVWVcwRkFBQUFEUUJHU1V4RkFBQnpiMjFsSUdOdmJuUmxiblFLQU1keEl3QmdRLytoTFNjdgorK0p3RUFBQUIwVkVodUJRRC8vLy8vVEVsT1N3QUFSa2xNUmNkeEFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUN3QUFBQUFBVkZKQlNVeEYKKytVaUVoSVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCisrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorK0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKKytBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUE9CisrXSkKKysKKytBVF9DSEVDSyhbCisrYmFzZTY0IC1kIEFSQ0hJVkUuYmFzZTY0ID4gQVJDSElWRSB8fCBBVF9TS0lQX1RFU1QKKytjcGlvIC1udHYgPCBBUkNISVZFCisrdGVzdCAkPyAtZXEgMgorK10sCisrWzBdLAorK1stcnctcnctci0tICAgMSAxMDAyOSAgICAxMDAzMSAgICAgICAgICAxMyBOb3YgMjUgMTM6NTIgRklMRQorK10sW2NwaW86IExJTks6IHN0b3JlZCBmaWxlbmFtZSBsZW5ndGggdG9vIGJpZworK2NwaW86IHByZW1hdHVyZSBlbmQgb2YgZmlsZQorK10pCisrCisrQVRfQ0xFQU5VUAorZGlmZiAtTnVycCBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdCBjcGlvLTIuOC90ZXN0cy9zeW1saW5rLWxvbmcuYXQKKy0tLSBjcGlvLTIuOC5vcmlnL3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGNwaW8tMi44L3Rlc3RzL3N5bWxpbmstbG9uZy5hdAkyMDE0LTEyLTA4IDExOjM0OjI4LjgwNzc4MTAyNCArMDgwMAorQEAgLTAsMCArMSw0NiBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbTR0ZSB0byBjcmVhdGUgdGVzdHN1aXRlLiAgLSotIEF1dG90ZXN0IC0qLQorKyMgQ29weXJpZ2h0IChDKSAyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisrIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKysjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKysjIDAyMTEwLTEzMDEgVVNBLgorKworKyMgQ3BpbyB2Mi4xMS45MCBjaGFuZ2VkIHRoZSB3YXkgc3ltbGluayBuYW1lIGlzIHJlYWQgZnJvbSBhcmNoaXZlLgorKyMgUmVmZXJlbmNlczoKKysjIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY3Bpby8yMDE0LTExL21zZzAwMDA3Lmh0bWwKKysKKytBVF9TRVRVUChbc3ltbGluay1sb25nXSkKKytBVF9LRVlXT1JEUyhbc3ltbGluay1sb25nIGNvcHlvdXRdKQorKworK0FUX0NIRUNLKFsKKysKKysjIGxlbihkaXJuYW1lKSA+IFJFQURCVUZTSVpFCisrZGlybmFtZT0KKytmb3IgaSBpbiB7MS4uNTJ9OyBkbworKyAgICBkaXJuYW1lPSJ4eHh4eHh4eHgvJGRpcm5hbWUiCisrICAgIG1rZGlyICIkZGlybmFtZSIKKytkb25lCisrbG4gLXMgIiRkaXJuYW1lIiB4IHx8IEFUX1NLSVBfVEVTVAorKworK2VjaG8geCB8IGNwaW8gLW8gPiBhcgorK2xpc3Q9YGNwaW8gLXR2IDwgYXIgfCBzZWQgJ3N8LiotPiB8fCdgCisrdGVzdCAiJGxpc3QiID0gIiRkaXJuYW1lIiAmJiBlY2hvIHN1Y2Nlc3MgfHwgZWNobyBmYWlsCisrXSwKKytbMF0sCisrW3N1Y2Nlc3MKKytdLFsyIGJsb2NrcworKzIgYmxvY2tzCisrXSkKKysKKytBVF9DTEVBTlVQCitkaWZmIC1OdXJwIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0IGNwaW8tMi44L3Rlc3RzL3Rlc3RzdWl0ZS5hdAorLS0tIGNwaW8tMi44Lm9yaWcvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMDYtMTAtMjQgMTg6MzI6MTMuMDAwMDAwMDAwICswODAwCisrKysgY3Bpby0yLjgvdGVzdHMvdGVzdHN1aXRlLmF0CTIwMTQtMTItMDggMTE6MzQ6NTYuNTE1Nzc5OTQyICswODAwCitAQCAtMzEsMyArMzEsNSBAQCBtNF9pbmNsdWRlKFt2ZXJzaW9uLmF0XSkKKyAKKyBtNF9pbmNsdWRlKFtpbm91dC5hdF0pCisgbTRfaW5jbHVkZShbc3ltbGluay5hdF0pCisrbTRfaW5jbHVkZShbc3ltbGluay1iYWQtbGVuZ3RoLmF0XSkKKyttNF9pbmNsdWRlKFtzeW1saW5rLWxvbmcuYXRdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpby0yLjgvbTRleHRlbnNpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjU4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9tNGV4dGVuc2lvbnMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRGVmaW5lIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBvbmx5IGlmIGl0IHdhcyBwcmV2aW91c2x5IHVuZGVmaW5lZC4KKyMgVGhpcyBpcyBuZWVkZWQgdG8gY29uZmlndXJlIGNvcnJlY3RseSB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGF1dG9jb25mLgorCitkaWZmIC11ck4gY3Bpby0yLjgub3JpZy9tNC9leHRlbnNpb25zLm00IGNwaW8tMi44L200L2V4dGVuc2lvbnMubTQKKy0tLSBjcGlvLTIuOC5vcmlnL200L2V4dGVuc2lvbnMubTQJMjAwNi0xMC0xMiAwNDozNDo0NS4wMDAwMDAwMDAgLTA3MDAKKysrKyBjcGlvLTIuOC9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjMgMTQ6Mzc6MzYuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW8tMi44L3N0YXRkZWYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDc5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvLTIuOC9zdGF0ZGVmLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEF2b2lkIG11bHRpcGxlIHN0YXQgZGVmaW5pdGlvbnMKKyMgUGF0Y2ggdGFrZW4gZnJvbSBjcGlvIG1haWxpbmcgbGlzdCBwb3N0aW5nIDIwMTAtMDMtMTkKKworZGlmZiAtdXJOIGNwaW8tMi4xMS5vcmlnL3NyYy9maWxldHlwZXMuaCBjcGlvLTIuMTEvc3JjL2ZpbGV0eXBlcy5oCistLS0gY3Bpby0yLjExLm9yaWcvc3JjL2ZpbGV0eXBlcy5oCTIwMTAtMDItMTIgMDI6MTk6MjMuMDAwMDAwMDAwIC0wODAwCisrKysgY3Bpby0yLjExL3NyYy9maWxldHlwZXMuaAkyMDEwLTA3LTIzIDEzOjE3OjI1LjAwMDAwMDAwMCAtMDcwMAorQEAgLTgyLDQgKzgyLDYgQEAKKyAjZGVmaW5lIGxzdGF0IHN0YXQKKyAjZW5kaWYKKyBpbnQgbHN0YXQgKCk7CisrI2lmbmRlZiBzdGF0CisgaW50IHN0YXQgKCk7CisrI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkOTJiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcGlvL2NwaW9fMi4xMS5iYgpAQCAtMCwwICsxLDE1IEBACitpbmNsdWRlIGNwaW9fdjIuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSIKKworUFIgPSAicjUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9yZW1vdmUtZ2V0cy5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtbWVtb3J5LW92ZXJydW4ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vY3Bpby1DVkUtMjAxNS0xMTk3LnBhdGNoIFwKKyAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxMTEyYmI2YzQ1ODYzNDY4YjU0OTZiYTEyODc5MmY2YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDFiMWQ3NzRjZDZlNGNkMzk0MTYyMDNjOTFlYzU5ZGJkNjVkZDI3ZDc5ZDc1ZTFhOWI4OTQ5N2VhNjQzOTc4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvXzIuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjk3ZGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb18yLjguYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBjcGlvX3YyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjdmNzcyZWEzYTI0ODkyMzFjYjQ4NzI2NTZjYWMzNGIiCisKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKwkgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorCSAgICBmaWxlOi8vZml4LW1lbW9yeS1vdmVycnVuLnBhdGNoIFwKKwkgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2FhMzU2ZTY5ZTE0OWZiNDliNzZiYWNjNjQ2MTVhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYjIwMzI0ODg3NGMzYjVhNzI4YjM1MWYwNjUxM2U1MjgyZjczZTAxNzBiN2YyMDdmYmY4YzM5ZjI4ZjZiNGFkIgorCisjIFJlcXVpcmVkIHRvIGJ1aWxkIHdpdGggZ2NjIDQuMyBhbmQgbGF0ZXI6CitDRkxBR1MgKz0gIi1mZ251ODktaW5saW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Bpby9jcGlvX3YyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2RlNGJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NwaW8vY3Bpb192Mi5pbmMKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJHTlUgY3BpbyBpcyBhIHByb2dyYW0gdG8gbWFuYWdlIGFyY2hpdmVzIG9mIGZpbGVzIgorREVTQ1JJUFRJT04gPSAiR05VIGNwaW8gaXMgYSB0b29sIGZvciBjcmVhdGluZyBhbmQgZXh0cmFjdGluZyBhcmNoaXZlcywgb3IgY29weWluZyBmaWxlcyBmcm9tIG9uZSBwbGFjZSB0byBcCithbm90aGVyLiBJdCBoYW5kbGVzIGEgbnVtYmVyIG9mIGNwaW8gZm9ybWF0cyBhcyB3ZWxsIGFzIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyIGZpbGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jcGlvLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyA9ICJ0ZXhpbmZvLW5hdGl2ZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2NwaW8vY3Bpby0ke1BWfS50YXIuZ3ogXAorICAgIGZpbGU6Ly9zdGF0ZGVmLnBhdGNoIFwKKyAgICAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbworCitTID0gIiR7V09SS0RJUn0vY3Bpby0ke1BWfSIKKworRVhUUkFfT0VDT05GICs9ICJERUZBVUxUX1JNVF9ESVI9JHtiYXNlX3NiaW5kaXJ9IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9LworICAgIG12ICIke0R9JHtiaW5kaXJ9L2NwaW8iICIke0R9JHtiYXNlX2JpbmRpcn0vY3BpbyIKKyAgICBybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitQQUNLQUdFUyA9KyAiJHtQTn0tcm10IgorCitGSUxFU18ke1BOfS1ybXQgPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCoiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImNwaW8iCitBTFRFUk5BVElWRV8ke1BOfS1ybXQgPSAicm10IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbY3Bpb10gPSAiJHtiYXNlX2JpbmRpcn0vY3BpbyIKKworQUxURVJOQVRJVkVfUFJJT1JJVFlbcm10XSA9ICI1MCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtybXRdID0gIiR7YmFzZV9zYmluZGlyfS9ybXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMS1wYWNrbGliLmMtc3VwcG9ydC1kaWN0aW9uYXJ5LWJ5dGUtb3JkZXItZGVwZW5kZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGJlN2RmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaApAQCAtMCwwICsxLDMzOSBAQAorRnJvbSA4YTZlNDM3MjZhZDBhZTQxYmQxY2MyYzI0OGQ5MWRlYjMxNDU5MzU3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDExOjExOjQ4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIHBhY2tsaWIuYzogc3VwcG9ydCBkaWN0aW9uYXJ5IGJ5dGUgb3JkZXIgZGVwZW5kZW50CisKK1RoZSBwcmV2aW91cyBkaWN0IGZpbGVzIGFyZSBOT1QgYnl0ZS1vcmRlciBpbmRlcGVuZGVudCwgaW4gZmFjdCB0aGV5IGFyZQorcHJvYmFibHkgQVJDSElURUNUVVJFIFNQRUNJRklDLgorQ3JlYXRlIHRoZSBkaWN0IGZpbGVzIGluIGJpZyBlbmRpYW4sIGFuZCBjb252ZXJ0IHRvIGhvc3QgZW5kaWFuIHdoaWxlCitsb2FkIHRoZW0uIFRoaXMgY291bGQgZml4IHRoZSBlbmRpYW4gaXNzdWUgb24gbXVsdGlwbGUgcGxhdGZvcm0uCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitXZSBjYW4ndCB1c2UgdGhlIGVuZGlhbi5oLCBodG9iZSogYW5kIGJlKnRvaCBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5IGFyZQorbm90IGF2YWlsYWJsZSBvbiBvbGRlciB2ZXJzaW9ucyBvZiBnbGliYywgc3VjaCBhcyB0aGF0IGZvdW5kIGluIFJIRUwKKzUuOS4KKworQ2hhbmdlIHRvIGNoZWNraW5nIGVuZGlhbiBhbmQgZGlyZWN0bHkgY2FsbGluZyBic3dhcF8qIGFzIGRlZmluZWQgaW4KK2J5dGVzd2FwLmguCisKK1NpZ25lZC1vZmYtYnk6IE1hcmsgSGF0bGUgPG1hcmsuaGF0bGVAd2luZHJpdmVyLmNvbT4KKworU2lnbmVkLW9mZi1ieTogTGVpIE1hb2h1aSA8bGVpbWFvaHVpQGNuLmZ1aml0c3UuY29tPgorLS0tCisgbGliL3BhY2tsaWIuYyB8IDIxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIxMCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL3BhY2tsaWIuYyBiL2xpYi9wYWNrbGliLmMKK2luZGV4IGY4NTE0MjQuLjNhYWM4MDUgMTAwNjQ0CistLS0gYS9saWIvcGFja2xpYi5jCisrKysgYi9saWIvcGFja2xpYi5jCitAQCAtMTYsNiArMTYsMTIgQEAKKyAjaWZkZWYgSEFWRV9TVERJTlRfSAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAjZW5kaWYKKysKKysjaWZuZGVmIF9CU0RfU09VUkNFCisrI2RlZmluZSBfQlNEX1NPVVJDRSAgICAgICAgICAgICAvKiBTZWUgZmVhdHVyZV90ZXN0X21hY3Jvcyg3KSAqLworKyNlbmRpZgorKyNpbmNsdWRlIDxlbmRpYW4uaD4KKysjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KKyAjaW5jbHVkZSAicGFja2VyLmgiCisgCisgc3RhdGljIGNvbnN0IGNoYXIgdmVyc19pZFtdID0gInBhY2tsaWIuYyA6IHYyLjNwMiBBbGVjIE11ZmZldHQgMTggTWF5IDE5OTMiOworQEAgLTQ1LDYgKzUxLDE4NSBAQCB0eXBlZGVmIHN0cnVjdAorICAgICBjaGFyIGRhdGFfZ2V0W05VTVdPUkRTXVtNQVhXT1JETEVOXTsKKyB9IFBXRElDVDY0OworIAorK2VudW17CisrICAgIGVuX2lzMzIsCisrICAgIGVuX2lzNjQKKyt9OworKworK3N0YXRpYyBpbnQKKytJaGVhZGVySG9zdFRvQmlnRW5kaWFuKGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljLCBwSGVhZGVyMzItPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjMyLT5waWhfYmxvY2tsZW4sIHBIZWFkZXIzMi0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAoX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWl0aGVyIDMyIG9yIDY0OiAlZFxuIiwgbkJpdFR5cGUpOworKyAgICAgICAgcmV0dXJuICgtMSk7CisrICAgIH0KKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBIZWFkZXIsIGludCBuQml0VHlwZSkKKyt7CisrICAgIGlmIChuQml0VHlwZSA9PSBlbl9pczY0ICYmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIHN0cnVjdCBwaV9oZWFkZXI2NCAqcEhlYWRlcjY0ID0gKHN0cnVjdCBwaV9oZWFkZXI2NCopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljID0gYnN3YXBfNjQocEhlYWRlcjY0LT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjY0LT5waWhfbnVtd29yZHMgPSBic3dhcF82NChwSGVhZGVyNjQtPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyNjQtPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXI2NC0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXI2NC0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjY0OiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgIHBIZWFkZXI2NC0+cGloX21hZ2ljLCBwSGVhZGVyNjQtPnBpaF9udW13b3JkcywKKysgICAgICAgICAgcEhlYWRlcjY0LT5waWhfYmxvY2tsZW4sIHBIZWFkZXI2NC0+cGloX3BhZCk7CisrI2VuZGlmCisrICAgIH0KKysgICAgZWxzZSBpZiAobkJpdFR5cGUgPT0gZW5faXMzMiAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBzdHJ1Y3QgcGlfaGVhZGVyICpwSGVhZGVyMzIgPSAoc3RydWN0IHBpX2hlYWRlciopcEhlYWRlcjsKKysKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX21hZ2ljID0gYnN3YXBfMzIocEhlYWRlcjMyLT5waWhfbWFnaWMpOworKyAgICAgICAgcEhlYWRlcjMyLT5waWhfbnVtd29yZHMgPSBic3dhcF8zMihwSGVhZGVyMzItPnBpaF9udW13b3Jkcyk7CisrICAgICAgICBwSGVhZGVyMzItPnBpaF9ibG9ja2xlbiA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuKTsKKysgICAgICAgIHBIZWFkZXIzMi0+cGloX3BhZCA9IGJzd2FwXzE2KHBIZWFkZXIzMi0+cGloX3BhZCk7CisrCisrI2lmIERFQlVHCisrICAgICAgICBwcmludGYoIkhlYWRlcjMyOiBtYWdpYyAleCwgbnVtd29yZHMgJXgsIGJsb2NrbGVuICV4LCBwYWQgJXhcbiIsCisrICAgICAgICAgICAgcEhlYWRlcjMyLT5waWhfbWFnaWMsIHBIZWFkZXIzMi0+cGloX251bXdvcmRzLAorKyAgICAgICAgICAgIHBIZWFkZXIzMi0+cGloX2Jsb2NrbGVuLCBwSGVhZGVyMzItPnBpaF9wYWQpOworKyNlbmRpZgorKyAgICB9CisrICAgIGVsc2UgaWYgKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pCisrICAgIHsKKysgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVpdGhlciAzMiBvciA2NDogJWRcbiIsIG5CaXRUeXBlKTsKKysgICAgICAgIHJldHVybiAoLTEpOworKyAgICB9CisrCisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50CisrSHdtc0hvc3RUb0JpZ0VuZGlhbihjaGFyICpwSHdtcywgaW50IG5MZW4saW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCA9IGJzd2FwXzY0KCpwSHdtczY0KTsKKysgICAgICAgICAgICAqcEh3bXM2NCsrOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbnQKKytId21zQmlnRW5kaWFuVG9Ib3N0KGNoYXIgKnBId21zLCBpbnQgbkxlbiwgaW50IG5CaXRUeXBlKQorK3sKKysgICAgaW50IGkgPSAwOworKworKyAgICBpZiAobkJpdFR5cGUgPT0gZW5faXM2NCAmJiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICB1aW50NjRfdCAqcEh3bXM2NCA9ICh1aW50NjRfdCopcEh3bXM7CisrCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbiAvIHNpemVvZih1aW50NjRfdCk7IGkrKykKKysgICAgICAgIHsKKysgICAgICAgICAgICAqcEh3bXM2NCsrID0gYnN3YXBfNjQoKnBId21zNjQpOworKyAgICAgICAgfQorKworKyAgICB9CisrICAgIGVsc2UgaWYgKG5CaXRUeXBlID09IGVuX2lzMzIgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTikKKysgICAgeworKyAgICAgICAgdWludDMyX3QgKnBId21zMzIgPSAodWludDMyX3QqKXBId21zOworKworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5MZW4gLyBzaXplb2YodWludDMyX3QpOyBpKyspCisrICAgICAgICB7CisrICAgICAgICAgICAgKnBId21zMzIgPSBic3dhcF8zMigqcEh3bXMzMik7CisrICAgICAgICAgICAgKnBId21zMzIrKzsKKysgICAgICAgIH0KKysKKysgICAgfQorKyAgICBlbHNlIGlmIChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKQorKyAgICB7CisrICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5laXRoZXIgMzIgb3IgNjQ6ICVkXG4iLCBuQml0VHlwZSk7CisrICAgICAgICByZXR1cm4gKC0xKTsKKysgICAgfQorKworKyNpZiBERUJVRworKyAgICBmb3IgKGkgPSAwOyBpIDwgbkxlbjsgaSs9OCkKKysgICAgeworKyAgICAgICAgcHJpbnRmKCJod21zJXM6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWFxuIiwKKysgICAgICAgICAgICBuQml0VHlwZT09ZW5faXM2ND8iNjQiOiIzMiIsIHBId21zW2krMF0mMHhGRiwgcEh3bXNbaSsxXSYweEZGLAorKyAgICAgICAgICAgIHBId21zW2krMl0mMHhGRiwgcEh3bXNbaSszXSYweEZGLCBwSHdtc1tpKzRdJjB4RkYsCisrICAgICAgICAgICAgcEh3bXNbaSs1XSYweEZGLCBwSHdtc1tpKzZdJjB4RkYsIHBId21zW2krN10mMHhGRik7CisrICAgIH0KKysjZW5kaWYKKysKKysgICAgcmV0dXJuIDA7CisrfQorIAorIHN0YXRpYyBpbnQKKyBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKK0BAIC01Nyw2ICsyNDIsNyBAQCBfUFdJc0Jyb2tlbjY0KEZJTEUgKmlmcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAKKysgICAgSWhlYWRlckJpZ0VuZGlhblRvSG9zdCgoY2hhciAqKSAmcGRlc2M2NC5oZWFkZXIsIGVuX2lzNjQpOworICAgICByZXR1cm4gKHBkZXNjNjQuaGVhZGVyLnBpaF9tYWdpYyA9PSBQSUhfTUFHSUMpOworIH0KKyAKK0BAIC0xNDksNyArMzM1LDExIEBAIFBXT3BlbihwcmVmaXgsIG1vZGUpCisgCXBkZXNjLmhlYWRlci5waWhfYmxvY2tsZW4gPSBOVU1XT1JEUzsKKyAJcGRlc2MuaGVhZGVyLnBpaF9udW13b3JkcyA9IDA7CisgCistCWZ3cml0ZSgoY2hhciAqKSAmcGRlc2MuaGVhZGVyLCBzaXplb2YocGRlc2MuaGVhZGVyKSwgMSwgaWZwKTsKKysJc3RydWN0IHBpX2hlYWRlciB0bXBoZWFkZXIzMjsKKysKKysJbWVtY3B5KCZ0bXBoZWFkZXIzMiwgICZwZGVzYy5oZWFkZXIsIHNpemVvZihwZGVzYy5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlmd3JpdGUoKGNoYXIgKikgJnRtcGhlYWRlcjMyLCBzaXplb2YodG1waGVhZGVyMzIpLCAxLCBpZnApOworICAgICB9IGVsc2UKKyAgICAgeworIAlwZGVzYy5mbGFncyAmPSB+UEZPUl9XUklURTsKK0BAIC0xNzMsNiArMzYzLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJICAgIHJldHVybiBOVUxMOworIAl9CisgCisrICAgICAgICBJaGVhZGVyQmlnRW5kaWFuVG9Ib3N0KChjaGFyICopICZwZGVzYy5oZWFkZXIsIGVuX2lzMzIpOworICAgICAgICAgaWYgKChwZGVzYy5oZWFkZXIucGloX21hZ2ljID09IDApIHx8IChwZGVzYy5oZWFkZXIucGloX251bXdvcmRzID09IDApKQorICAgICAgICAgeworICAgICAgICAgICAgIC8qIHVoLW9oLiBlaXRoZXIgYSBicm9rZW4gIjY0LWJpdCIgZmlsZSBvciBhIGdhcmJhZ2UgZmlsZS4gKi8KK0BAIC0xOTUsNiArMzg2LDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAJCX0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgfQorKyAgICAgICAgICAgIEloZWFkZXJCaWdFbmRpYW5Ub0hvc3QoKGNoYXIgKikgJnBkZXNjNjQuaGVhZGVyLCBlbl9pczY0KTsKKyAgICAgICAgICAgICBpZiAocGRlc2M2NC5oZWFkZXIucGloX21hZ2ljICE9IFBJSF9NQUdJQykKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIC8qIG5vcGUsIG5vdCAiNjQtYml0IiBhZnRlciBhbGwgKi8KK0BAIC0yOTAsNiArNDgyLDcgQEAgUFdPcGVuKHByZWZpeCwgbW9kZSkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBId21zQmlnRW5kaWFuVG9Ib3N0KChjaGFyKilwZGVzYzY0Lmh3bXMsIHNpemVvZihwZGVzYzY0Lmh3bXMpLCBlbl9pczY0KTsKKyAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihwZGVzYy5od21zKSAvIHNpemVvZihwZGVzYy5od21zWzBdKTsgaSsrKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICBwZGVzYy5od21zW2ldID0gcGRlc2M2NC5od21zW2ldOworQEAgLTI5OSw2ICs0OTIsNyBAQCBQV09wZW4ocHJlZml4LCBtb2RlKQorIAkgICAgeworIAkJcGRlc2MuZmxhZ3MgJj0gflBGT1JfVVNFSFdNUzsKKyAJICAgIH0KKysJICAgIEh3bXNCaWdFbmRpYW5Ub0hvc3QoKGNoYXIqKXBkZXNjLmh3bXMsIHNpemVvZihwZGVzYy5od21zKSwgZW5faXMzMik7CisgI2lmIERFQlVHCisgICAgICAgICAgICAgZm9yIChpPTE7IGk8PTB4ZmY7IGkrKykKKyAgICAgICAgICAgICB7CitAQCAtMzMyLDcgKzUyNiwxMSBAQCBQV0Nsb3NlKHB3cCkKKyAJICAgIHJldHVybiAoLTEpOworIAl9CisgCistCWlmICghZndyaXRlKChjaGFyICopICZwd3AtPmhlYWRlciwgc2l6ZW9mKHB3cC0+aGVhZGVyKSwgMSwgcHdwLT5pZnApKQorKwlzdHJ1Y3QgcGlfaGVhZGVyIHRtcGhlYWRlcjMyOworKworKwltZW1jcHkoJnRtcGhlYWRlcjMyLCAgJnB3cC0+aGVhZGVyLCBzaXplb2YocHdwLT5oZWFkZXIpKTsKKysJSWhlYWRlckhvc3RUb0JpZ0VuZGlhbigoY2hhciAqKSAmdG1waGVhZGVyMzIsIGVuX2lzMzIpOworKwlpZiAoIWZ3cml0ZSgoY2hhciAqKSAmdG1waGVhZGVyMzIsIHNpemVvZih0bXBoZWFkZXIzMiksIDEsIHB3cC0+aWZwKSkKKyAJeworIAkgICAgZnByaW50ZihzdGRlcnIsICJpbmRleCBtYWdpYyBmd3JpdGUgZmFpbGVkXG4iKTsKKyAJICAgIHJldHVybiAoLTEpOworQEAgLTM1MSw3ICs1NDksMTIgQEAgUFdDbG9zZShwd3ApCisgCSAgICAJcHJpbnRmKCJod21bJTAyeF0gPSAlZFxuIiwgaSwgcHdwLT5od21zW2ldKTsKKyAjZW5kaWYKKyAJICAgIH0KKy0JICAgIGZ3cml0ZShwd3AtPmh3bXMsIDEsIHNpemVvZihwd3AtPmh3bXMpLCBwd3AtPndmcCk7CisrCisrCSAgICBQV0RJQ1QgdG1wX3B3cDsKKysKKysJICAgIG1lbWNweSgmdG1wX3B3cCwgcHdwLCBzaXplb2YoUFdESUNUKSk7CisrCSAgICBId21zSG9zdFRvQmlnRW5kaWFuKHRtcF9wd3AuaHdtcywgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIGVuX2lzMzIpOworKwkgICAgZndyaXRlKHRtcF9wd3AuaHdtcywgMSwgc2l6ZW9mKHRtcF9wd3AuaHdtcyksIHB3cC0+d2ZwKTsKKyAJfQorICAgICB9CisgCitAQCAtNDA1LDcgKzYwOCw4IEBAIFB1dFBXKHB3cCwgc3RyaW5nKQorIAorIAlkYXR1bSA9ICh1aW50MzJfdCkgZnRlbGwocHdwLT5kZnApOworIAorLQlmd3JpdGUoKGNoYXIgKikgJmRhdHVtLCBzaXplb2YoZGF0dW0pLCAxLCBwd3AtPmlmcCk7CisrCXVpbnQzMl90IHRtcGRhdHVtID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfMzIoZGF0dW0pIDogZGF0dW07CisrCWZ3cml0ZSgoY2hhciAqKSAmdG1wZGF0dW0sIHNpemVvZih0bXBkYXR1bSksIDEsIHB3cC0+aWZwKTsKKyAKKyAJZnB1dHMocHdwLT5kYXRhX3B1dFswXSwgcHdwLT5kZnApOworIAlwdXRjKDAsIHB3cC0+ZGZwKTsKK0BAIC00NjQsNiArNjY4LDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bTY0ID0gKF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4pID8gYnN3YXBfNjQoZGF0dW02NCkgOiBkYXR1bTY0OworICAgICAgICBkYXR1bSA9IGRhdHVtNjQ7CisgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmc2Vlayhwd3AtPmlmcCwgc2l6ZW9mKHN0cnVjdCBwaV9oZWFkZXIpICsgKHRoaXNibG9jayAqIHNpemVvZih1aW50MzJfdCkpLCAwKSkKK0BAIC00NzcsNiArNjgyLDcgQEAgR2V0UFcocHdwLCBudW1iZXIpCisgICAgICAgICAgICBwZXJyb3IoIihpbmRleCBmcmVhZCBmYWlsZWQpIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorKyAgICAgICBkYXR1bSA9IChfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOKSA/IGJzd2FwXzMyKGRhdHVtKSA6IGRhdHVtOworICAgICB9CisgCisgCWludCByID0gMTsKKy0tIAorMS44LjQuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcmFja2xpYi9jcmFja2xpYi8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMTBlODIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWIvMDAwMi1jcmFrbGliLWZpeC10ZXN0bnVtLWFuZC10ZXN0c3RyLWZhaWxlZC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitGcm9tIDA2ZjlhODhiNWRkNTU5N2Y5MTk4ZWEwY2IzNGY1ZTk2ZjE4MGU2ZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDI3IEFwciAyMDEzIDE2OjAyOjMwICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGNyYWtsaWI6Zml4IHRlc3RudW0gYW5kIHRlc3RzdHIgZmFpbGVkCisKK0Vycm9yIGxvZzoKKy4uLgorJCAuL3Rlc3RudW0KKyhudWxsKS5wd2QuZ3o6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK1BXT3BlbjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCiskIC4vdXRpbC90ZXN0c3RyCisobnVsbCkucHdkLmd6OiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQV09wZW46IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy4uLgorU2V0IERFRkFVTFRfQ1JBQ0tMSUJfRElDVCBhcyB0aGUgcGF0aCBvZiAgUFdPcGVuCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgdXRpbC90ZXN0bnVtLmMgfCAgICAyICstCisgdXRpbC90ZXN0c3RyLmMgfCAgICAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RudW0uYyBiL3V0aWwvdGVzdG51bS5jCitpbmRleCBhZTIyNDZkLi5jYTIxMGZmIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0bnVtLmMKKysrKyBiL3V0aWwvdGVzdG51bS5jCitAQCAtMjAsNyArMjAsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKK2RpZmYgLS1naXQgYS91dGlsL3Rlc3RzdHIuYyBiL3V0aWwvdGVzdHN0ci5jCitpbmRleCAyYTMxZmE0Li45ZmI5Y2RhIDEwMDY0NAorLS0tIGEvdXRpbC90ZXN0c3RyLmMKKysrKyBiL3V0aWwvdGVzdHN0ci5jCitAQCAtMTUsNyArMTUsNyBAQCBtYWluICgpCisgICAgIFBXRElDVCAqcHdwOworICAgICBjaGFyIGJ1ZmZlcltTVFJJTkdTSVpFXTsKKyAKKy0gICAgaWYgKCEocHdwID0gUFdPcGVuIChOVUxMLCAiciIpKSkKKysgICAgaWYgKCEocHdwID0gUFdPcGVuIChERUZBVUxUX0NSQUNLTElCX0RJQ1QsICJyIikpKQorICAgICB7CisgCXBlcnJvciAoIlBXT3BlbiIpOworIAlyZXR1cm4gKC0xKTsKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2NyYWNrbGliL2NyYWNrbGliXzIuOS41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZmZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JhY2tsaWIvY3JhY2tsaWJfMi45LjUuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJQYXNzd29yZCBzdHJlbmd0aCBjaGVja2VyIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2NyYWNrbGliIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1lM2VkYTAxZDk4MTVmOGQyNGFhZTJkYmQ4OWI2OGIwNiIKKworREVQRU5EUyA9ICJjcmFja2xpYi1uYXRpdmUgemxpYiBweXRob24iCitSREVQRU5EXyR7UE59LXB5dGhvbiArPSAicHl0aG9uIgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXB5dGhvbiAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY3JhY2tsaWIvY3JhY2tsaWItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFja2xpYi5jLXN1cHBvcnQtZGljdGlvbmFyeS1ieXRlLW9yZGVyLWRlcGVuZGVudC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNyYWtsaWItZml4LXRlc3RudW0tYW5kLXRlc3RzdHItZmFpbGVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzc2NzkwYTk1YzFmYjY0NWU1OWU2ZTk4MDNjNzg1ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTlhYjAxMzhiYzhjZjkwY2NjYjg1MDliNjk2OWEwMjRkNWU1OGQyZDAyYmNiZGNjYmI5YmE5Yjg4YmUzZmEzMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBweXRob25uYXRpdmUgcHl0aG9uLWRpcgorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy10YXJnZXQoKSB7CisJY3JlYXRlLWNyYWNrbGliLWRpY3QgLW8gJHtEfSR7ZGF0YWRpcn0vY3JhY2tsaWIvcHdfZGljdCAke0R9JHtkYXRhZGlyfS9jcmFja2xpYi9jcmFja2xpYi1zbWFsbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlzcmNfZGlyPSIke0R9JHtiYXNlX2xpYmRpcn0vJHtQWVRIT05fRElSfS9zaXRlLXBhY2thZ2VzIgorCXJtIC1mICRzcmNfZGlyLyoucHlvCisJcm0gLWYgJHNyY19kaXIvdGVzdF9jcmFja2xpYi5weQorCSMgTW92ZSBweXRob24gZmlsZXMgZnJvbSAke2Jhc2VfbGliZGlyfSB0byAke2xpYmRpcn0gc2luY2UgdXNlZCAtLWxpYmRpcj0ke2Jhc2VfbGliZGlyfQorCWluc3RhbGwgLWQgLW0gMDc1NSAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJbXYgJHNyY19kaXIvKiAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0KKwlybSAtZnIgJHtEfSR7YmFzZV9saWJkaXJ9LyR7UFlUSE9OX0RJUn0KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vY3JhY2tsaWIucHkgXAorCSR7UFlUSE9OX1NJVEVQQUNLQUdFU19ESVJ9L19jcmFja2xpYi5zbyBcCisgICAgIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvX2NyYWNrbGliLnNvIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS9fY3JhY2tsaWIuYSBcCisJJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vX2NyYWNrbGliLmxhIFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5pbml0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2I4NTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuaW5pdApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IGNyb25kIGNyb250YWIKKyMgRGVmYXVsdC1TdGFydDogIDIzNDUKKyMgRGVmYXVsdC1TdG9wOiAgIDAxNgorIyBTaG9ydC1EZXNjcmlwdGlvbjogcnVuIGNyb24gZGFlbW9uCisjIERlc2NyaXB0aW9uOiBjcm9uIGlzIGEgc3RhbmRhcmQgVU5JWCBwcm9ncmFtIHRoYXQgcnVucyB1c2VyLXNwZWNpZmllZAorIyAgICAgICAgICAgICAgcHJvZ3JhbXMgYXQgcGVyaW9kaWMgc2NoZWR1bGVkIHRpbWVzLiB2aXhpZSBjcm9uIGFkZHMgYQorIyAgICAgICAgICAgICAgbnVtYmVyIG9mIGZlYXR1cmVzIHRvIHRoZSBiYXNpYyBVTklYIGNyb24sIGluY2x1ZGluZyBiZXR0ZXIKKyMgICAgICAgICAgICAgIHNlY3VyaXR5IGFuZCBtb3JlIHBvd2VyZnVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0NST05EPS91c3Ivc2Jpbi9jcm9uZAorQ09ORklHPS9ldGMvc3lzY29uZmlnL2Nyb25kCisKK1sgLWYgJENPTkZJRyBdIHx8IGV4aXQgMQorWyAteCAkQ1JPTkQgXSB8fCBleGl0IDEKKworLiAkQ09ORklHCisKKyMgU291cmNlIGZ1bmN0aW9uIGxpYnJhcnkuCisuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZWNobyAtbiAiU3RhcnRpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1leGVjICRDUk9ORCAtLSAkQ1JPTkRBUkdTCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0b3ApCisgICAgZWNobyAtbiAiU3RvcHBpbmcgY3JvbmQ6ICIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXBpZGZpbGUgL3Zhci9ydW4vY3JvbmQucGlkCisgICAgUkVUVkFMPSQ/CisgICAgaWYgWyAkUkVUVkFMIC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIk9LIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiRkFJTCIKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgY3JvbmQKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICAkMCBzdG9wICYmIHNsZWVwIDEgJiYgJDAgc3RhcnQKKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC9jcm9uZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVzdGFydH0iCisgICAgZXhpdCAxCitlc2FjCisKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDM1YTZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbmQuc2VydmljZQpAQCAtMCwwICsxLDExIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVBlcmlvZGljIENvbW1hbmQgU2NoZWR1bGVyCisKK1tTZXJ2aWNlXQorRW52aXJvbm1lbnRGaWxlPS9ldGMvc3lzY29uZmlnL2Nyb25kCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2Nyb25kIC1uICRDUk9OREFSR1MKK0V4ZWNSZWxvYWQ9QEJBU0VfQklORElSQC9raWxsIC1IVVAgJE1BSU5QSUQKK1Jlc3RhcnQ9YWx3YXlzCisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jcm9uaWUvY3JvbmllL2Nyb25kX3BhbV9jb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTg3MmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9uZF9wYW1fY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3Bhc3N3b3JkLWF1dGggaXMgdGhlIEZlZG9yYSdzIGNvbW1vbiBwYW0gY29uZmlndXJlIGZpbGUsIHVzZSBvZSBjb21tb24gcGFtCitjb25maWd1cmUgZmlsZXMgaW5zdGVhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQub3JpZwkyMDEwLTEyLTE2IDE2OjU5OjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGNyb25pZS0xLjQuNy9wYW0vY3JvbmQJMjAxMS0wNy0yMCAwOTo0NzoxNi4wODA4MTkyMDMgKzA4MDAKK0BAIC00LDcgKzQsNyBAQAorICMKKyAjIE5vIFBBTSBhdXRoZW50aWNhdGlvbiBjYWxsZWQsIGF1dGggbW9kdWxlcyBub3QgbmVlZGVkCisgYWNjb3VudCAgICByZXF1aXJlZCAgIHBhbV9hY2Nlc3Muc28KKy1hY2NvdW50ICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorK2FjY291bnQgICAgaW5jbHVkZSAgICBjb21tb24tYWNjb3VudAorIHNlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbG9naW51aWQuc28KKy1zZXNzaW9uICAgIGluY2x1ZGUgICAgcGFzc3dvcmQtYXV0aAorLWF1dGggICAgICAgaW5jbHVkZSAgICBwYXNzd29yZC1hdXRoCisrc2Vzc2lvbiAgICBpbmNsdWRlICAgIGNvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlCisrYXV0aCAgICAgICBpbmNsdWRlICAgIGNvbW1vbi1hdXRoCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZS9jcm9udGFiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmM0ZmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWUvY3JvbnRhYgpAQCAtMCwwICsxLDE0IEBACisjIC9ldGMvY3JvbnRhYjogc3lzdGVtLXdpZGUgY3JvbnRhYgorIyBVbmxpa2UgYW55IG90aGVyIGNyb250YWIgeW91IGRvbid0IGhhdmUgdG8gcnVuIHRoZSBgY3JvbnRhYicKKyMgY29tbWFuZCB0byBpbnN0YWxsIHRoZSBuZXcgdmVyc2lvbiB3aGVuIHlvdSBlZGl0IHRoaXMgZmlsZQorIyBhbmQgZmlsZXMgaW4gL2V0Yy9jcm9uLmQuIFRoZXNlIGZpbGVzIGFsc28gaGF2ZSB1c2VybmFtZSBmaWVsZHMsCisjIHRoYXQgbm9uZSBvZiB0aGUgb3RoZXIgY3JvbnRhYnMgZG8uCisKK1NIRUxMPS9iaW4vc2gKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgIG0gIGggIGRvbSBtb24gZG93IHVzZXIJY29tbWFuZAorIyAgMSAgKiAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmhvdXJseQorIyAzMCAgNyAgICAgKiAqICogICAgcm9vdCAgICAgICAgY2QgLyAmJiBydW4tcGFydHMgL2V0Yy9jcm9uLmRhaWx5CisjIDQyICA3ICAgICAqICogNyAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ud2Vla2x5CisjIDU1ICA3ICAgICAxICogKiAgICByb290ICAgICAgICBjZCAvICYmIHJ1bi1wYXJ0cyAvZXRjL2Nyb24ubW9udGhseQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3JvbmllL2Nyb25pZV8xLjUuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGJkNTkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Nyb25pZS9jcm9uaWVfMS41LjAuYmIKQEAgLTAsMCArMSw4MSBAQAorU1VNTUFSWSA9ICJDcm9uIGRhZW1vbiBmb3IgZXhlY3V0aW5nIHByb2dyYW1zIGF0IHNldCB0aW1lcyIKK0RFU0NSSVBUSU9OID0gIkNyb25pZSBjb250YWlucyB0aGUgc3RhbmRhcmQgVU5JWCBkYWVtb24gY3JvbmQgdGhhdCBydW5zIFwKK3NwZWNpZmllZCBwcm9ncmFtcyBhdCBzY2hlZHVsZWQgdGltZXMgYW5kIHJlbGF0ZWQgdG9vbHMuIEl0IGlzIGJhc2VkIG9uIHRoZSBcCitvcmlnaW5hbCBjcm9uIGFuZCBoYXMgc2VjdXJpdHkgYW5kIGNvbmZpZ3VyYXRpb24gZW5oYW5jZW1lbnRzIGxpa2UgdGhlIFwKK2FiaWxpdHkgdG8gdXNlIHBhbSBhbmQgU0VMaW51eC4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvY3JvbmllLyIKK0JVR1RSQUNLRVIgPSAibW1hc2xhbm9AcmVkaGF0LmNvbSIKKworIyBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0gTGljZW5zZQorTElDRU5TRSA9ICJJU0MgJiBCU0QtMy1DbGF1c2UgJiBCU0QtMi1DbGF1c2UgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZDJhNTkyMTcwNzYwZTEzODZjNzY5ZTEwNDNiMzcyMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvY3Jvbi5jO2VuZGxpbmU9MjA7bWQ1PWI0MjVjMzM0MjY1MDI2MTc3MTI4MzUzYTE0MjYzM2I0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wb3Blbi5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MzE7bWQ1PWVkZDUwNzQyZDhkZWY3MTJlOTQ3MmRiYTM1MzY2OGE5IgorCitTRUNUSU9OID0gInV0aWxzIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9jL3IvY3JvbmllL2Nyb25pZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY3JvbmQuaW5pdCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9udGFiIFwKKyAgICAgICAgICAgZmlsZTovL2Nyb25kLnNlcnZpY2UgXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICcke1BBTV9TUkNfVVJJfScsICcnLCBkKX0iCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9jcm9uZF9wYW1fY29uZmlnLnBhdGNoIgorUEFNX0RFUFMgPSAibGlicGFtIGxpYnBhbS1ydW50aW1lIHBhbS1wbHVnaW4tYWNjZXNzIHBhbS1wbHVnaW4tbG9naW51aWQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5ZGI3NWUxODg0ZDgzYTQ1ZTAwMmQxNDVjNmM1NGQ0NSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5Y2YwZTNmNGY1MDQyYTljMDk0MTNkNjJjOGUwYzA1NWUxMjQwMWY3MGIxMTI0NjVmMGY4MWYyYzg0ZWJmYjNmIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCB1c2VyYWRkIHN5c3RlbWQKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS13aXRoLWF1ZGl0LC0td2l0aG91dC1hdWRpdCxhdWRpdCwiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS13aXRoLXBhbSwtLXdpdGhvdXQtcGFtLGxpYnBhbSwke1BBTV9ERVBTfSIKKworSU5JVFNDUklQVF9OQU1FID0gImNyb25kIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOTAgMiAzIDQgNSAuIHN0b3AgNjAgMCAxIDYgLiIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIGNyb250YWIiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJjcm9uZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9zeXNjb25maWcvCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vY3JvbmQuc3lzY29uZmlnICR7RH0ke3N5c2NvbmZkaXJ9L3N5c2NvbmZpZy9jcm9uZAorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2Nyb25kLmluaXQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Nyb25kCisKKwkjIGluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2Nyb25kLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vY3JvbmQuc2VydmljZQorCisJIyBiZWxvdyBhcmUgbmVjZXNzYXJ5IGZvciBhIGNvbXBsZXRlIGNyb24gZW52aXJvbm1lbnQKKwlpbnN0YWxsIC1kICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9jcm9udGFiICR7RH0ke3N5c2NvbmZkaXJ9LworCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZAorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uaG91cmx5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kYWlseQorCW1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24ud2Vla2x5CisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5tb250aGx5CisJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vY3Jvbi5kZW55CisKKwkjIGJlbG93IHNldHRpbmcgaXMgbmVjZXNzYXJ5IHRvIGFsbG93IG5vcm1hbCB1c2VyIHVzaW5nIGNyb250YWIKKworCSMgc2V0Z2lkIGZvciBjcm9udGFiIGJpbmFyeQorCWNob3duIHJvb3Q6Y3JvbnRhYiAke0R9JHtiaW5kaXJ9L2Nyb250YWIKKwljaG1vZCAyNzU1ICR7RH0ke2JpbmRpcn0vY3JvbnRhYgorCisJIyBhbGxvdyAnY3JvbnRhYicgZ3JvdXAgd3JpdGUgdG8gL3Zhci9zcG9vbC9jcm9uCisJY2hvd24gcm9vdDpjcm9udGFiICR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3Nwb29sL2Nyb24KKwljaG1vZCA3NzAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvY3JvbgorCisJY2htb2QgNjAwICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb250YWIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbioiCitDT05GRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vY3JvbnRhYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdjZGYyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMuaW5jCkBAIC0wLDAgKzEsMTIzIEBACitTVU1NQVJZID0gIkFuIEludGVybmV0IHByaW50aW5nIHN5c3RlbSBmb3IgVW5peCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIiCitERVBFTkRTID0gImdudXRscyBsaWJwbmcganBlZyBkYnVzIGRidXMtZ2xpYiB6bGliIGxpYnVzYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmN1cHMub3JnL3NvZnR3YXJlLyR7UFZ9LyR7QlB9LXNvdXJjZS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWRvbi10LXRyeS10by1ydW4tZ2VuZXJhdGVkLWJpbmFyaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHNfc2VydmVyYmluLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMuc29ja2V0IFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMucGF0aCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXBzLnNlcnZpY2UgXAorCSAgIgorCitMRUFEX1NPTkFNRSA9ICJsaWJjdXBzZHJpdmVyLnNvIgorCitDTEVBTkJST0tFTiA9ICIxIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgYmluY29uZmlnIHVzZXJhZGQgc3lzdGVtZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAiLS1zeXN0ZW0gbHBhZG1pbiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gImN1cHMuc29ja2V0IGN1cHMucGF0aCBjdXBzLnNlcnZpY2UiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLWVuYWJsZS1hY2wsLS1kaXNhYmxlLWFjbCxhY2wiCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLCAtLWRpc2FibGUtcGFtLCBsaWJwYW0iCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtZ251dGxzIFwKKyAgICAgICAgICAgICAgIC0tZW5hYmxlLWRidXMgXAorICAgICAgICAgICAgICAgLS1lbmFibGUtYnJvd3NpbmcgXAorICAgICAgICAgICAgICAgLS1kaXNhYmxlLWdzc2FwaSBcCisgICAgICAgICAgICAgICAtLWVuYWJsZS1kZWJ1ZyBcCisgICAgICAgICAgICAgICAtLWRpc2FibGUtcmVscm8gXAorICAgICAgICAgICAgICAgLS1lbmFibGUtbGlidXNiIFwKKyAgICAgICAgICAgICAgIC0td2l0aG91dC1waHAgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXBlcmwgXAorICAgICAgICAgICAgICAgLS13aXRob3V0LXB5dGhvbiBcCisgICAgICAgICAgICAgICAtLXdpdGhvdXQtamF2YSBcCisgICAgICAgICAgICAgICAiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb21waWxlICgpIHsKKwllY2hvICJhbGw6IiAgICA+ICBtYW4vTWFrZWZpbGUKKwllY2hvICJsaWJzOiIgPj4gbWFuL01ha2VmaWxlCisJZWNobyAiaW5zdGFsbDoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZGF0YToiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtZXhlYzoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtaGVhZGVyczoiID4+IG1hbi9NYWtlZmlsZQorCWVjaG8gImluc3RhbGwtbGliczoiID4+IG1hbi9NYWtlZmlsZQorCisJb2VfcnVubWFrZQorfQorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlICJEU1RST09UPSR7RH0iIGluc3RhbGwKKworCSMgUmVtb3ZlIC92YXIvcnVuIGZyb20gcGFja2FnZSBhcyBjdXBzZCB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKKwlybSAtZnIgJHtEfS8ke2xvY2Fsc3RhdGVkaXJ9L3J1bgorCXJtZGlyICR7RH0vJHtsaWJkaXJ9LyR7QlBOfS9kcml2ZXIKKworCSMgUmVtb3ZlIHN5c2luaXQgc2NyaXB0IGFuZCBzeW1saW5rcyBpZiBzeXN2aW5pdCBpcyBub3QgaW4gRElTVFJPX0ZFQVRVUkVTCisJaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3Zpbml0JywnZmFsc2UnLCd0cnVlJyxkKX07IHRoZW4KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwkgICAgcm0gLXJmICR7RH0ke3N5c2NvbmZkaXJ9L3JjKgorCWZpCisKKwkjIEluc3RhbGwgc3lzdGVtZCB1bml0IGZpbGVzCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2N1cHMuc29ja2V0ICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5wYXRoICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vY3Vwcy5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL2N1cHMuc2VydmljZQorfQorCitweXRob24gZG9fcGFja2FnZV9hcHBlbmQoKSB7CisgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAjIENoYW5nZSBwZXJtaXNzaW9ucyBiYWNrIHRoZSB3YXkgdGhleSB3ZXJlLCB0aGV5IHByb2JhYmx5IGhhZCBhIHJlYXNvbi4uLgorICAgIHdvcmtkaXIgPSBkLmdldFZhcignV09SS0RJUicsIFRydWUpCisgICAgc3VicHJvY2Vzcy5jYWxsKCdjaG1vZCAwNTExICVzL2luc3RhbGwvY3Vwcy92YXIvcnVuL2N1cHMvY2VydHMnICUgd29ya2Rpciwgc2hlbGw9VHJ1ZSkKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LWxpYiAke1BOfS1saWJpbWFnZSIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdmluaXQnLCAncHJvY3BzJywgJycsIGQpfSIKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kIFwKKwkJJHtsaWJkaXJ9L2N1cHMvY2dpLWJpbiBcCisJCSR7bGliZGlyfS9jdXBzL2ZpbHRlciBcCisJCSR7bGliZGlyfS9jdXBzL21vbml0b3IgXAorCQkke2xpYmRpcn0vY3Vwcy9ub3RpZmllciBcCisJCSR7bGliZGlyfS9jdXBzL2RhZW1vbiBcCisJICAgICAgICIKKworRklMRVNfJHtQTn0tbGliID0gIiR7bGliZGlyfS9saWJjdXBzLnNvLioiCisKK0ZJTEVTXyR7UE59LWxpYmltYWdlID0gIiR7bGliZGlyfS9saWJjdXBzaW1hZ2Uuc28uKiIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vY3Vwcy9iYWNrZW5kLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL2NnaS1iaW4vLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZmlsdGVyLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9jdXBzL21vbml0b3IvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvbm90aWZpZXIvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2N1cHMvZGFlbW9uLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgIgorCisjcGFja2FnZSB0aGUgaHRtbCBmb3IgdGhlIHdlYmd1aSBpbnNpZGUgdGhlIG1haW4gcGFja2FnZXMgKH4xTUIgdW5jb21wcmVzc2VkKQorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kb2MvY3Vwcy9pbWFnZXMgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKmh0bWwgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vZG9jL2N1cHMvKi5jc3MgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaWNvbnMvIFwKKyAgICAgICAgICAgICAgICIKK0NPTkZGSUxFU18ke1BOfSArPSAiJHtzeXNjb25mZGlyfS9jdXBzL2N1cHNkLmNvbmYiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiY3Vwc19zeXNyb290X3ByZXByb2Nlc3MiCitjdXBzX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc2VkIC1pICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vY3Vwcy1jb25maWcgLWUgJ3M6Y3Vwc19kYXRhZGlyPS4qOmN1cHNfZGF0YWRpcj0ke2RhdGFkaXJ9L2N1cHM6JyAtZSAnczpjdXBzX3NlcnZlcmJpbj0uKjpjdXBzX3NlcnZlcmJpbj0ke2xpYmRpcn0vY3VwczonCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzLzAwMDEtZG9uLXQtdHJ5LXRvLXJ1bi1nZW5lcmF0ZWQtYmluYXJpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3OWViNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvMDAwMS1kb24tdC10cnktdG8tcnVuLWdlbmVyYXRlZC1iaW5hcmllcy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitGcm9tIDkwMDY5NTg2MTY3YjkzMGJlZmNlNzMwM2FlYTU3MDc4ZjA0YjRlZDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogU3VuLCAzMCBKYW4gMjAxMSAxNjozNzoyNyArMDEwMAorU3ViamVjdDogW1BBVENIXSBkb24ndCB0cnkgdG8gcnVuIGdlbmVyYXRlZCBiaW5hcmllcworCitTaWduZWQtb2ZmLWJ5OiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorLS0tCisgcHBkYy9NYWtlZmlsZSB8ICAgMzAgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGN1cHMtMi4wLjAvcHBkYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMi4wLjAub3JpZy9wcGRjL01ha2VmaWxlCisrKysgY3Vwcy0yLjAuMC9wcGRjL01ha2VmaWxlCitAQCAtMjQyLDggKzI0Miw4IEBAIGdlbnN0cmluZ3M6CQlnZW5zdHJpbmdzLm8gbGliY3Vwc3BwZGMuYQorIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gZ2Vuc3RyaW5ncyBnZW5zdHJpbmdzLm8gXAorIAkJbGliY3Vwc3BwZGMuYSAuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgXAorIAkJJChETlNTRExJQlMpICQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIEdlbmVyYXRpbmcgbG9jYWxpemF0aW9uIHN0cmluZ3MuLi4KKy0JLi9nZW5zdHJpbmdzID5zYW1wbGUuYworKyMJZWNobyBHZW5lcmF0aW5nIGxvY2FsaXphdGlvbiBzdHJpbmdzLi4uCisrIwkuL2dlbnN0cmluZ3MgPnNhbXBsZS5jCisgCisgCisgIworQEAgLTI2MCw5ICsyNjAsOSBAQCBwcGRjLXN0YXRpYzoJCXBwZGMubyBsaWJjdXBzcHBkYy5hIC4uL2N1CisgCSQoQ1hYKSAkKEFSQ0hGTEFHUykgJChMREZMQUdTKSAtbyBwcGRjLXN0YXRpYyBwcGRjLm8gbGliY3Vwc3BwZGMuYSBcCisgCQkuLi9jdXBzLyQoTElCQ1VQU1NUQVRJQykgJChMSUJHU1NBUEkpICQoU1NMTElCUykgJChETlNTRExJQlMpIFwKKyAJCSQoQ09NTU9OTElCUykgJChMSUJaKQorLQllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLUkgLi4vZGF0YSBmb28uZHJ2CistCS4vcHBkYy1zdGF0aWMgLWwgZW4sZnIgLXogLUkgLi4vZGF0YSBmb28uZHJ2CisrIwllY2hvIFRlc3RpbmcgUFBEIGNvbXBpbGVyLi4uCisrIwkuL3BwZGMtc3RhdGljIC1sIGVuLGZyIC1JIC4uL2RhdGEgZm9vLmRydgorKyMJLi9wcGRjLXN0YXRpYyAtbCBlbixmciAteiAtSSAuLi9kYXRhIGZvby5kcnYKKyAKKyAKKyAjCitAQCAtMjg4LDE3ICsyODgsMTcgQEAgcHBkaS1zdGF0aWM6CQlwcGRjLXN0YXRpYyBwcGRpLm8gbGliY3VwcworIAkkKENYWCkgJChBUkNIRkxBR1MpICQoTERGTEFHUykgLW8gcHBkaS1zdGF0aWMgcHBkaS5vIGxpYmN1cHNwcGRjLmEgXAorIAkJLi4vY3Vwcy8kKExJQkNVUFNTVEFUSUMpICQoTElCR1NTQVBJKSAkKFNTTExJQlMpICQoRE5TU0RMSUJTKSBcCisgCQkkKENPTU1PTkxJQlMpICQoTElCWikKKy0JZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorLQkkKFJNKSAtciBwcGQgcHBkMiBzYW1wbGUtaW1wb3J0LmRydgorLQkuL3BwZGMtc3RhdGljIC1sIGVuIC1JIC4uL2RhdGEgc2FtcGxlLmRydgorLQkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKy0JLi9wcGRjLXN0YXRpYyAtbCBlbiAtSSAuLi9kYXRhIC1kIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKy0JaWYgZGlmZiAtciBwcGQgcHBkMiA+L2Rldi9udWxsOyB0aGVuIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorLQllbHNlIFwKKy0JCWVjaG8gUFBEIGltcG9ydCBGQUlMRUQ7IFwKKy0JCWV4aXQgMTsgXAorLQlmaQorKyMJZWNobyBUZXN0aW5nIFBQRCBpbXBvcnRlci4uLgorKyMJJChSTSkgLXIgcHBkIHBwZDIgc2FtcGxlLWltcG9ydC5kcnYKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSBzYW1wbGUuZHJ2CisrIwkuL3BwZGktc3RhdGljIC1JIC4uL2RhdGEgLW8gc2FtcGxlLWltcG9ydC5kcnYgcHBkLyoKKysjCS4vcHBkYy1zdGF0aWMgLWwgZW4gLUkgLi4vZGF0YSAtZCBwcGQyIHNhbXBsZS1pbXBvcnQuZHJ2CisrIwlpZiBkaWZmIC1yIHBwZCBwcGQyID4vZGV2L251bGw7IHRoZW4gXAorKyMJCWVjaG8gUFBEIGltcG9ydCBPSzsgXAorKyMJZWxzZSBcCisrIwkJZWNobyBQUEQgaW1wb3J0IEZBSUxFRDsgXAorKyMJCWV4aXQgMTsgXAorKyMJZmkKKyAKKyAKKyAjCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5wYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlOGNjNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMucGF0aApAQCAtMCwwICsxLDggQEAKK1tVbml0XQorRGVzY3JpcHRpb249Q1VQUyBQcmludGVyIFNlcnZpY2UgU3Bvb2wKKworW1BhdGhdCitQYXRoRXhpc3RzR2xvYj0vdmFyL3Nwb29sL2N1cHMvZCoKKworW0luc3RhbGxdCitXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc2VydmljZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDNlODM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy9jdXBzLnNlcnZpY2UKQEAgLTAsMCArMSwxMCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UKKworW1NlcnZpY2VdCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2N1cHNkIC1mCitQcml2YXRlVG1wPXRydWUKKworW0luc3RhbGxdCitBbHNvPWN1cHMuc29ja2V0IGN1cHMucGF0aAorV2FudGVkQnk9cHJpbnRlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwcy5zb2NrZXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTQ4NzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHMuc29ja2V0CkBAIC0wLDAgKzEsOCBAQAorW1VuaXRdCitEZXNjcmlwdGlvbj1DVVBTIFByaW50aW5nIFNlcnZpY2UgU29ja2V0cworCitbU29ja2V0XQorTGlzdGVuU3RyZWFtPS92YXIvcnVuL2N1cHMvY3Vwcy5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHMvY3Vwc19zZXJ2ZXJiaW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjQ0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL2N1cHNfc2VydmVyYmluLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK01ha2UgQ1VQU19TRVJWRVJCSU4gcmVsYXRpdmUgdG8gbGliZGlyIG90aGVyd2lzZSBvbiA2NGJpdCBhcmNoZXMKK2UuZy4gcHBjNjQgd2hlcmUgYmFzZSBsaWJkaXIgaXMgbGliNjQgdGhpcyBkb2VzIG5vdCBnbyB3ZWxsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIGNvbmZpZyBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS40LjYvY29uZmlnLXNjcmlwdHMvY3Vwcy1kaXJlY3Rvcmllcy5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMDktMDQtMTIgMTY6MDQ6NTEuMDAwMDAwMDAwIC0wNzAwCisrKysgY3Vwcy0xLjQuNi9jb25maWctc2NyaXB0cy9jdXBzLWRpcmVjdG9yaWVzLm00CTIwMTItMDctMjEgMTI6MTI6MDUuODk2NDA1OTIzIC0wNzAwCitAQCAtMzk3LDcgKzM5Nyw3IEBACisgCSopCisgCQkjIEFsbCBvdGhlcnMKKyAJCUlOU1RBTExfU1lTVj0iaW5zdGFsbC1zeXN2IgorLQkJQ1VQU19TRVJWRVJCSU49IiRleGVjX3ByZWZpeC9saWIvY3VwcyIKKysJCUNVUFNfU0VSVkVSQklOPSIkbGliZGlyL2N1cHMiCisgCQk7OworIGVzYWMKKyAKK0luZGV4OiBjdXBzLTEuNC42L2NvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGN1cHMtMS40LjYub3JpZy9jb25maWd1cmUJMjAxMi0wNy0yMSAxMjoxMzozNC41MTI0MDU5NTAgLTA3MDAKKysrKyBjdXBzLTEuNC42L2NvbmZpZ3VyZQkyMDEyLTA3LTIxIDEyOjE0OjA1LjcyNDQwNjAxNyAtMDcwMAorQEAgLTExMTgxLDcgKzExMTgxLDcgQEAKKyAJKikKKyAJCSMgQWxsIG90aGVycworIAkJSU5TVEFMTF9TWVNWPSJpbnN0YWxsLXN5c3YiCistCQlDVVBTX1NFUlZFUkJJTj0iJGV4ZWNfcHJlZml4L2xpYi9jdXBzIgorKwkJQ1VQU19TRVJWRVJCSU49IiRsaWJkaXIvY3VwcyIKKyAJCTs7CisgZXNhYworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzL3VzZV9lY2hvX29ubHlfaW5faW5pdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZmMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N1cHMvY3Vwcy91c2VfZWNob19vbmx5X2luX2luaXQucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworSW5kZXg6IGN1cHMtMS42LjEvc2NoZWR1bGVyL2N1cHMuc2guaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjdXBzLTEuNi4xLm9yaWcvc2NoZWR1bGVyL2N1cHMuc2guaW4KKysrKyBjdXBzLTEuNi4xL3NjaGVkdWxlci9jdXBzLnNoLmluCitAQCAtNjcsNyArNjcsNyBAQCBjYXNlICJgdW5hbWVgIiBpbgorIAkJRUNIT19FUlJPUj06CisgCQk7OworIAorLQlMaW51eCopCisrCURpc2FibGVMaW51eCopCisgCQlJU19PTj0vYmluL3RydWUKKyAJCWlmIHRlc3QgLWYgL2V0Yy9pbml0LmQvZnVuY3Rpb25zOyB0aGVuCisgCQkJLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9jdXBzL2N1cHNfMi4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDczYjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3Vwcy9jdXBzXzIuMC40LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBjdXBzLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9NmM1YTM1MDU5NmZiYTAyNzU0YmQ5NmViNmRmM2FmZDAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNWM4NDdkOWE0ZmFjNmM0YzY2ZmIwNTI2YTdhZmFhZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMWQ1ZTY4ZDlmMjRmYWNhMzE3YWVhZWJjMTY0YzM0MTAyODEzYmMwZjFkNjljMDBiM2E1OWI0OWM0OWY0YWJkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvY3dhdXRvbWFjcm9zL2N3YXV0b21hY3Jvc18yMDExMDIwMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2VhM2NlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2N3YXV0b21hY3Jvcy9jd2F1dG9tYWNyb3NfMjAxMTAyMDEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJDb2xsZWN0aW9uIG9mIGF1dG9jb25mIG00IG1hY3JvcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvY3dhdXRvbWFjcm9zLmJlcmxpb3MvIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0uYmVybGlvcy8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjA3NGFmY2I1MGQwYThiZmYxMDc4NmEyOTU0YjJiMDJkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMxMTU2MDNiODkxZjNhMTYzYzBiYmI1ZmVhMmYzNzQyMTEzYTE4M2ZhNjc0NWVlNWU4OWU1ZjZkMGU5ZjYxMjEiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBDV0FVVE9NQUNST1NQUkVGSVg9JHtEfSR7cHJlZml4fSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMi44LjEvZGlmZnV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwNWQxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTIuOC4xL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmFjOjkwOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYWNsb2NhbC0xLjEyL3Byb3Rvcy5tNDoxMjogQU1fQ19QUk9UT1RZUEVTIGlzIGV4cGFuZGVkIGZyb20uLi4KK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvd29yay9pNTg2LXBva3ktbGludXgvZGlmZnV0aWxzLTIuOC4xLXI0L2RpZmZ1dGlscy0yLjguMS9tNC9wcmVyZXEubTQ6MTEwOiBqbV9QUkVSRVFfUVVPVEVBUkcgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6OTA6IHRoZSB0b3AgbGV2ZWwKK3wgYXV0b200dGU6IG00IGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBkaWZmdXRpbHMtMi44LjEvbTQvcHJlcmVxLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZGlmZnV0aWxzLTIuOC4xLm9yaWcvbTQvcHJlcmVxLm00CisrKysgZGlmZnV0aWxzLTIuOC4xL200L3ByZXJlcS5tNAorQEAgLTExNSw3ICsxMTUsNiBAQCBBQ19ERUZVTihbam1fUFJFUkVRX1FVT1RFQVJHXSwKKyAgIEFDX0hFQURFUl9TVERDCisgICBBQ19DX0JBQ0tTTEFTSF9BCisgICBBQ19NQlNUQVRFX1QKKy0gIEFNX0NfUFJPVE9UWVBFUworIF0pCisgCisgQUNfREVGVU4oW2ptX1BSRVJFUV9SRUdFWF0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLTMuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy0zLjMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVjNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHMtMy4zL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIC1DIHRlc3RzIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzMzQxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzLmluYwpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkRpZmZ1dGlscyBjb250YWlucyB0b29scyB1c2VkIGZvciBmaW5kaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gZmlsZXMiCitERVNDUklQVElPTiA9ICJEaWZmdXRpbHMgY29udGFpbnMgdGhlIEdOVSBkaWZmLCBkaWZmMywgXAorc2RpZmYsIGFuZCBjbXAgdXRpbGl0aWVzLiBUaGVzZSBwcm9ncmFtcyBhcmUgdXN1YWxseSBcCit1c2VkIGZvciBjcmVhdGluZyBwYXRjaCBmaWxlcy4iCitTRUNUSU9OID0gImJhc2UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKKyMgZGlmZnV0aWxzIGFzc3VtZXMgbm9uLWdsaWJjIGNvbXBpbGF0aW9uIHdpdGggdWNsaWJjIGFuZAorIyB0aGlzIGNhdXNlcyBpdCB0byBnZW5lcmF0ZSBpdHMgb3duIGltcGxlbWVudGF0aW9ucyBvZgorIyBzdGFuZGFyZCBmdW5jdGlvbmFsaXR5LiAgcmVnZXguYyBhY3R1YWxseSBicmVha3MgY29tcGlsYXRpb24KKyMgYmVjYXVzZSBpdCB1c2VzIF9fbWVtcGNweSwgdGhlcmUgYXJlIG90aGVyIHRoaW5ncyAoVEJEOgorIyBzZWUgZGlmZnV0aWxzLm1rIGluIGJ1aWxkcm9vdCkKK0VYVFJBX09FQ09ORl9saWJjLXVjbGliYyA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImRpZmYgY21wIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzIuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNDI1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZGlmZnV0aWxzL2RpZmZ1dGlsc18yLjguMS5iYgpAQCAtMCwwICsxLDE2IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCityZXF1aXJlIGRpZmZ1dGlscy5pbmMKKworUFIgPSAicjcuMCIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2RpZmZ1dGlscy9kaWZmdXRpbHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2RpZmZ1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MWY5YzVhZTE5YjYwNjA4ZjZjN2YxNjJkYTg2YTQyOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNTAwMTc0OGIwNjkyMjRkZDk4YmYxYmI5ZWU4NzczMjFjN2RlOGIzMzJjOGFhZDVhZjNlMmE3MzcyZDIzZjVhIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJY2htb2QgdSt3ICR7U30vcG8vTWFrZWZpbGUuaW4uaW4KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9kaWZmdXRpbHMvZGlmZnV0aWxzXzMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDA4NjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2RpZmZ1dGlscy9kaWZmdXRpbHNfMy4zLmJiCkBAIC0wLDAgKzEsMzcgQEAKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCisKK3JlcXVpcmUgZGlmZnV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZGlmZnV0aWxzL2RpZmZ1dGlscy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJzaWdzZWd2LXByZWZpeCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgTmVlZCB0byByZW1vdmUgZ2V0dGV4dCBtYWNyb3Mgd2l0aCB3ZWlyZCBtaXggb2YgdmVyc2lvbnMKKwlmb3IgaSBpbiBjb2Rlc2V0Lm00IGdldHRleHRfZ2wubTQgaW50bG1hY29zeC5tNCBpbnR0eXBlcy1wcmkubTQgbGliLWxkX2dsLm00IGxpYi1wcmVmaXhfZ2wubTQgcG9fZ2wubTQgc3NpemVfdC5tNCB3Y2hhcl90Lm00IHdpbnRfdC5tNDsgZG8KKwkJcm0gLWYgJHtTfS9tNC8kaQorCWRvbmUKK30KKworU1JDX1VSSVttZDVzdW1dID0gIjk5MTgwMjA4ZWMyYTgyY2U3MWY1NWIwZDczODlmMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImEyNWU4OWE4YWI2NWZkZWQxNzMxZTQxODZiZTFiYjI1Y2RhOTY3ODM0YjZkZjk3MzU5OWNkY2Q1YWJkZmMxOWMiCisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJaW5zdGFsbCAtRCAke1N9L2J1aWxkLWF1eC90ZXN0LWRyaXZlciAkdC9idWlsZC1hdXgvdGVzdC1kcml2ZXIKKwljcCAtciAke1N9L3Rlc3RzICR0LworCWluc3RhbGwgJHtCfS90ZXN0cy9NYWtlZmlsZSAkdC90ZXN0cy8KKwlzZWQgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgXAorCSAgICAtZSAnc3xiYXNofHNofCcgXAorCSAgICAtZSAnc3xedG9wX3NyY2RpciA9IFwoLipcKXx0b3Bfc3JjZGlyID0gLi5cL3wnIFwKKwkgICAgLWUgJ3N8XnNyY2RpciA9IFwoLipcKXxzcmNkaXIgPSAufCcgXAorCSAgICAtZSAnc3wiYCQoYnVpbHRfcHJvZ3JhbXMpYCJ8ZGlmZnwnIFwKKwkgICAgLWUgJ3N8Z2F3a3xhd2t8ZycgXAorCSAgICAtaSAkdC90ZXN0cy9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzAuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZTYzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8wLjUuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NmRkZDUzMzVlZjk2ZmI4NThhMTM4MjMwYWY3NzM3MTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PTM2ZDRiODVlNWFlOTAyOGU5MThkMWNjNzc1YzI0NzVlIgorCitQUiA9ICJyMiIKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9lZC9lZC0ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMjFlOWRjYzliNWI2MDEyYzIzMDM4NzM0ZTE2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWRlZjJiYmRlMGZiZjBkODgyMzI3ODJhMGVkZWQzMjNmNDgzYTA1MTlkNmZkZTlhM2IxODA5MDU2ZmQzNWYzZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkYgPSAiJ0NDPSR7Q0N9JyAnQ1hYPSR7Q1hYfScgJ0NGTEFHUz0ke0NGTEFHU30nICdDWFhGTEFHUz0ke0NYWEZMQUdTfScgJ0NQUEZMQUdTPSR7Q1BQRkxBR1N9JyAnTERGTEFHUz0ke0xERkxBR1N9JyIKKworQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsICcgJyl9IgorQ09ORklHVVJFT1BUUyA6PSAiJHtAZC5nZXRWYXIoJ0NPTkZJR1VSRU9QVFMnLCBUcnVlKS5yZXBsYWNlKCctLWRpc2FibGUtc2lsZW50LXJ1bGVzJywgJyAnKX0iCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2VkL2VkXzEuOS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NGVlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9lZC9lZF8xLjkuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJMaW5lLW9yaWVudGVkIHRleHQgZWRpdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VkLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9lZC5oO2VuZGxpbmU9MjA7bWQ1PTM3NWEyMGNjMjU0NWFjMTExNWVlYjdiMzIzYzYwYWUzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTE3O21kNT0xNGRiYjMyNWMxZjJkNGRhZjUwZTBhYTVjNTAzOGU5NiIKKworU0VDVElPTiA9ICJiYXNlIgorCisjIExTQiBzdGF0ZXMgdGhhdCBlZCBzaG91bGQgYmUgaW4gL2Jpbi8KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2VkL2VkLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjU2NWI2ZDFkNWE5YTg4MTZiOWIzMDRmYzRlZDk0MDVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ1YjM3MmNmYWRmMDczMDAxODIzNzcyMjcyZmNlYWMyY2ZhODc1NTJjNWNkNWE4ZWZjMWM4YWFlNjFmNDVhODgiCisKK2luaGVyaXQgdGV4aW5mbworCitkb19jb25maWd1cmUoKSB7CisJJHtTfS9jb25maWd1cmUKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2NjI2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorcHRlc3QgbmVlZHMgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMuCitzZXJpYWwtdGVzdHMgaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhvc2UgdGFyZ2V0cy4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhkZWZhdWx0IGF1dG9tYWtlIGJlaGF2aW9yIGluY29tcGF0aWJsZSB3aXRoIHB0ZXN0KQorCitkaWZmIC1ydU4gYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYwkyMDE0LTA1LTI4IDE4OjE5OjEzLjUxMzk4MDk3NyArMDIwMAorKysrIGIvY29uZmlndXJlLmFjCTIwMTQtMDUtMjggMTg6MTk6MjEuMTI5NjYwMjE1ICswMjAwCitAQCAtMiw3ICsyLDcgQEAKKyBBQ19JTklUKGV0aHRvb2wsIDMuMTQsIG5ldGRldkB2Z2VyLmtlcm5lbC5vcmcpCisgQUNfUFJFUkVRKDIuNTIpCisgQUNfQ09ORklHX1NSQ0RJUihbZXRodG9vbC5jXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtnbnVdKQorK0FNX0lOSVRfQVVUT01BS0UoW2dudSBzZXJpYWwtdGVzdHNdKQorIEFDX0NPTkZJR19IRUFERVJTKFtldGh0b29sLWNvbmZpZy5oXSkKKyAKKyBBTV9NQUlOVEFJTkVSX01PREUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUyNDVkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCittYWtlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2V0aHRvb2wvZXRodG9vbF80LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNmMmIxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ldGh0b29sL2V0aHRvb2xfNC4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiRGlzcGxheSBvciBjaGFuZ2UgZXRoZXJuZXQgY2FyZCBzZXR0aW5ncyIKK0RFU0NSSVBUSU9OID0gIkEgc21hbGwgdXRpbGl0eSBmb3IgZXhhbWluaW5nIGFuZCB0dW5pbmcgdGhlIHNldHRpbmdzIG9mIHlvdXIgZXRoZXJuZXQtYmFzZWQgbmV0d29yayBpbnRlcmZhY2VzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvbmV0d29yay9ldGh0b29sLyIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ldGh0b29sLmM7YmVnaW5saW5lPTQ7ZW5kbGluZT0xNzttZDU9YzE5YjMwNTQ4YzU4MjU3N2ZjNmI0NDM2MjZmYzEyMTYiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9zb2Z0d2FyZS9uZXR3b3JrL2V0aHRvb2wvZXRodG9vbC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGExYzc4Nzg3YzdkY2YwNzcwMTZlZDg2MzcyYTQ3MmYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTIwMDUxNjcyN2NjOTU4M2U4YjYzZmQ2ZTcyZjY2N2Y5ZWQ0MWJiNGYwNTc3ZmY0ODAzYjYwYzY0Y2ZkMWRiYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgb2VfcnVubWFrZSBidWlsZHRlc3QtVEVTVFMKK30KKworZG9faW5zdGFsbF9wdGVzdCAoKSB7CisgICBjcCAke0J9L01ha2VmaWxlICAgICAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfQorICAgaW5zdGFsbCAke0J9L3Rlc3QtY21kbGluZSAgICAgICAgJHtEfSR7UFRFU1RfUEFUSH0KKyAgIGluc3RhbGwgJHtCfS90ZXN0LWZlYXR1cmVzICAgICAgICR7RH0ke1BURVNUX1BBVEh9CisgICBpbnN0YWxsICR7Qn0vZXRodG9vbCAgICAgICAgICAgICAke0R9JHtQVEVTVF9QQVRIfS9ldGh0b29sCisgICBzZWQgLWkgJ3MvXk1ha2VmaWxlL19NYWtlZmlsZS8nICAke0R9JHtQVEVTVF9QQVRIfS9NYWtlZmlsZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlscy1maXgtZG9jLWJ1aWxkLWVycm9yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNzZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorRnJvbSAzM2NiYTI0Y2JhN2IwOTczYTcwMmU5NjI3YmQ1YjkzOTYyOTQ4YWU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgU2VwIDIwMTMgMTY6MTE6MTYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZmluZHV0aWxzOiBmaXggZG9jIGJ1aWxkIGVycm9yCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9maW5kLnRleGkgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2ZpbmQudGV4aSBiL2RvYy9maW5kLnRleGkKK2luZGV4IDViNWYwY2YuLmIzZDljNmIgMTAwNjQ0CistLS0gYS9kb2MvZmluZC50ZXhpCisrKysgYi9kb2MvZmluZC50ZXhpCitAQCAtNjMsNyArNjMsNyBAQCB0cmFuc2xhdGlvbiBhcHByb3ZlZCBieSB0aGUgRm91bmRhdGlvbi4KKworIEBwYWdlCisgQHZza2lwIDBwdCBwbHVzIDFmaWxsbAorLUBpbnNlcnRjb3B5aW5ne30KKytAaW5zZXJ0Y29weWluZworIEBlbmQgdGl0bGVwYWdlCisKKyBAY29udGVudHMKK0BAIC0xNDY2LDYgKzE0NjYsNyBAQCBubyBvdXRwdXQgaXMgZXZlciBzZW50IHRvIGl0LgorICogRXNjYXBlczo6CisgKiBGb3JtYXQgRGlyZWN0aXZlczo6CisgKiBUaW1lIEZvcm1hdHM6OgorKyogRm9ybWF0dGluZyBGbGFnczo6CisgQGVuZCBtZW51CisKKyBAbm9kZSBFc2NhcGVzCitAQCAtMTUzNCw3ICsxNTM1LDYgQEAgZnJvbSB0aGUgbm92ZWwgeW91IGFyZSByZWFkaW5nLgorICogU2l6ZSBEaXJlY3RpdmVzOjoKKyAqIExvY2F0aW9uIERpcmVjdGl2ZXM6OgorICogVGltZSBEaXJlY3RpdmVzOjoKKy0qIEZvcm1hdHRpbmcgRmxhZ3M6OgorIEBlbmQgbWVudQorCisgQG5vZGUgTmFtZSBEaXJlY3RpdmVzCitAQCAtMTc4MCw3ICsxNzgwLDcgQEAgc2V0dGluZyB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUpLiAgVGhpcyBpcyBhIEdOVSBleHRlbnNpb24uCisgQGVuZCB0YWJsZQorCisgQG5vZGUgRm9ybWF0dGluZyBGbGFncworLUBzdWJzdWJzZWN0aW9uIEZvcm1hdHRpbmcgRmxhZ3MKKytAc3Vic2VjdGlvbiBGb3JtYXR0aW5nIEZsYWdzCisKKyBUaGUgQHNhbXB7JW19IGFuZCBAc2FtcHslZH0gZGlyZWN0aXZlcyBzdXBwb3J0IHRoZSBAc2FtcHsjfSwgQHNhbXB7MH0KKyBhbmQgQHNhbXB7K30gZmxhZ3MsIGJ1dCB0aGUgb3RoZXIgZGlyZWN0aXZlcyBkbyBub3QsIGV2ZW4gaWYgdGhleQorLS0KKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZmluZHV0aWxzX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDBkZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMtNC4yLjMxL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjc1OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjIuMzEub3JpZy9jb25maWd1cmUuaW4KKysrKyBmaW5kdXRpbHMtNC4yLjMxL2NvbmZpZ3VyZS5pbgorQEAgLTcyLDcgKzcyLDYgQEAgZG5sIGdsX0VBUkxZIGNhbGxzIEFDX0dOVV9TT1VSQ0UgYW55d2F5LgorIAorIAorIEFDX0lTQ19QT1NJWAorLUFNX0NfUFJPVE9UWVBFUworIAorIEFDX1BST0dfSU5TVEFMTAorIEFDX1BST0dfUkFOTElCCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLTQuMi4zMS9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YmQ2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy00LjIuMzEvZ251bGliLWV4dGVuc2lvbi5wYXRjaApAQCAtMCwwICsxLDU2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xlZ2FjeSB2ZXJzaW9uXQorCit0aGUgb2xkIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB3b24ndCB3b3JrIHdpdGggQUNfR05VX1NPVVJDRQorCithZ2FpbnN0IDQuMi4zMQorMDcvMDgvMjAxMCAtIHFoZQorCitkaWZmIC0tZ2l0IGEvZ251bGliL200L2V4dGVuc2lvbnMubTQgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAoraW5kZXggMTQzYTllNS4uMGYyN2NlYiAxMDA2NDQKKy0tLSBhL2dudWxpYi9tNC9leHRlbnNpb25zLm00CisrKysgYi9nbnVsaWIvbTQvZXh0ZW5zaW9ucy5tNAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2M4NGNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMuaW5jCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiZmluZCwgbG9jYXRlLCBhbmQgeGFyZ3MgYmluYXJpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIEZpbmQgVXRpbGl0aWVzIGFyZSB0aGUgYmFzaWMgZGlyZWN0b3J5IHNlYXJjaGluZyB1dGlsaXRpZXMgb2YgdGhlIEdOVSBvcGVyYXRpbmcgc3lzdGVtLiBcCitUaGVzZSBwcm9ncmFtcyBhcmUgdHlwaWNhbGx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvdGhlciBwcm9ncmFtcyB0byBwcm92aWRlIG1vZHVsYXIgYW5kIHBvd2VyZnVsIGRpcmVjdG9yeSBcCitzZWFyY2ggYW5kIGZpbGUgbG9jYXRpbmcgY2FwYWJpbGl0aWVzIHRvIG90aGVyIGNvbW1hbmRzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9maW5kdXRpbHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc2F2YW5uYWguZ251Lm9yZy9idWdzLz9ncm91cD1maW5kdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9hbHBoYS5nbnUub3JnL2dudS8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmaW5kIHhhcmdzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCisjIGRpZmZ1dGlscyBhc3N1bWVzIG5vbi1nbGliYyBjb21waWxhdGlvbiB3aXRoIHVjbGliYyBhbmQKKyMgdGhpcyBjYXVzZXMgaXQgdG8gZ2VuZXJhdGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbnMgb2YKKyMgc3RhbmRhcmQgZnVuY3Rpb25hbGl0eS4gIHJlZ2V4LmMgYWN0dWFsbHkgYnJlYWtzIGNvbXBpbGF0aW9uCisjIGJlY2F1c2UgaXQgdXNlcyBfX21lbXBjcHksIHRoZXJlIGFyZSBvdGhlciB0aGluZ3MgKFRCRDoKKyMgc2VlIGRpZmZ1dGlscy5tayBpbiBidWlsZHJvb3QpCitFWFRSQV9PRUNPTkZfbGliYy11Y2xpYmMgPSAiLS13aXRob3V0LWluY2x1ZGVkLXJlZ2V4IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlscy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI5ZTFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZpbmR1dGlscy00LjUuMTQub3JpZy9nbC9saWIvTWFrZWZpbGUuYW0KKysrKyBmaW5kdXRpbHMtNC41LjE0L2dsL2xpYi9NYWtlZmlsZS5hbQorQEAgLTEyMjAsNyArMTIyMCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjIuMzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlZTAxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9maW5kdXRpbHMvZmluZHV0aWxzXzQuMi4zMS5iYgpAQCAtMCwwICsxLDE0IEBACitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorUFIgPSAicjQiCisKK3JlcXVpcmUgZmluZHV0aWxzLmluYworCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9nbnVsaWItZXh0ZW5zaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpbmR1dGlsc19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZmluZHV0aWxzLWZpeC1kb2MtYnVpbGQtZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMGUzMWEwZjE4YTQ5NzA5YmY1YTQ0OTg2N2M4MDQ5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMGQzNGI4ZmFjYTBiM2NjYTA3MDNmNmM2YjQ5OGFmYmU3MmYwYmExNmMzNTk4MGMxMGVjOWVmNzcyNGQ2MjA0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ZpbmR1dGlscy9maW5kdXRpbHNfNC41LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGE4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZmluZHV0aWxzL2ZpbmR1dGlsc180LjUuMTQuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBmaW5kdXRpbHMuaW5jCisKKyMgR1BMdjIrICg8PCA0LjIuMzIpLCBHUEx2MysgKD49IDQuMi4zMikKK0xJQ0VOU0UgPSAiR1BMdjMrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjI3ZGVmZTFlOTZjMmUxZWNkNGUwYzliZTg5Njc5NDkiCisgCitERVBFTkRTID0gImJpc29uLW5hdGl2ZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhOGE4MTc2MjgyZmQyOGU4ZDEyMzRjODRkODQ3ZmE2NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZGUzY2Y2MjVhNWM5ZjE1NGVlZTMxNzFlMDcyNTE1ZmZkZGU0MDUyNDRkZDAwNTAyYWY2MTdhYzU3YjczYWUyIgorCisjIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzI3Mjk5CitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXBvc2l4LWNsYW5nLXdjaGFyJywgJ2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz15ZXMnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gImFjX2N2X3BhdGhfU09SVD0ke2JpbmRpcn0vc29ydCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9mb29tYXRpYy9mb29tYXRpYy1maWx0ZXJzXzQuMC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTBjOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2Zvb21hdGljL2Zvb21hdGljLWZpbHRlcnNfNC4wLjE3LmJiCkBAIC0wLDAgKzEsMzcgQEAKK1NVTU1BUlkgPSAiT3BlblByaW50aW5nIHByaW50ZXIgc3VwcG9ydCAtIGZpbHRlcnMiCitERVNDUklQVElPTiA9ICJGb29tYXRpYyBpcyBhIHByaW50ZXIgZGF0YWJhc2UgZGVzaWduZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc2V0IHVwIFwKK2NvbW1vbiBwcmludGVycyBmb3IgdXNlIHdpdGggVU5JWC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zLlwKK0l0IHByb3ZpZGVzIHRoZSAiZ2x1ZSIgYmV0d2VlbiBhIHByaW50IHNwb29sZXIgKGxpa2UgQ1VQUyBvciBscHIpIGFuZCBcCit0aGUgcHJpbnRlciwgYnkgcHJvY2Vzc2luZyBmaWxlcyBzZW50IHRvIHRoZSBwcmludGVyLiBcCisgXAorVGhpcyBwYWNrYWdlIGNvbnNpc3RzIG9mIGZpbHRlcnMgdXNlZCBieSB0aGUgcHJpbnRlciBzcG9vbGVycyBcCit0byBjb252ZXJ0IHRoZSBpbmNvbWluZyBQb3N0U2NyaXB0IGRhdGEgaW50byB0aGUgcHJpbnRlcidzIG5hdGl2ZSBcCitmb3JtYXQgdXNpbmcgYSBwcmludGVyLXNwZWNpZmljLCBidXQgc3Bvb2xlci1pbmRlcGVuZGVudCBQUEQgZmlsZS4gXAorIgorCitERVBFTkRTICs9ICJjdXBzIHBlcmwgbGlieG1sMiIKK1BSID0gInIxIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vZm9vbWF0aWMtZmlsdGVycy0ke1BWfS9DT1BZSU5HO21kNT0zOTNhNWNhNDQ1ZjY5NjU4NzNlY2EwMjU5YTE3ZjgzMyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm9wZW5wcmludGluZy5vcmcvZG93bmxvYWQvZm9vbWF0aWMvZm9vbWF0aWMtZmlsdGVycy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDVmNWRjYmZlMzU5ZjE5OGVlZjNkZjViMjgzZDg5NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMmUyZTUzZTUwMjU3MWU4OGVlYjkwMTBjNDVhMGQ1NDY3MWYxNTcwN2VlMTA0ZjVjOWMyMmI1OWVhN2EzM2UzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtZmlsZS1jb252ZXJ0ZXItY2hlY2sgLS13aXRoLWZpbGUtY29udmVydGVyPXRleHR0b3BzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICBleHBvcnQgUEVSTD0iJHtiaW5kaXJ9L2VudiBwZXJsIgorICAgIGV4cG9ydCBDVVBTX1NFUlZFUkJJTj0ke2V4ZWNfcHJlZml4fS9saWIvY3VwcyAgICAgICAjIC91c3IvbGliIE5PVCBsaWJkaXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfbGludXhzdGRiYXNlKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzL2ZpbHRlcgorICAgIGxuIC1zZiAke2JpbmRpcn0vZm9vbWF0aWMtcmlwICR7RH0ke2V4ZWNfcHJlZml4fS9saWIvY3Vwcy9maWx0ZXIKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzLyAke2V4ZWNfcHJlZml4fS9saWIvcHByLyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stMy4xLjUvZ2F3ay0zLjEuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTc5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrLTMuMS41L2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5hYzoxMjc6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hY2xvY2FsLTEuMTIvcHJvdG9zLm00OjEyOiBBTV9DX1BST1RPVFlQRVMgaXMgZXhwYW5kZWQgZnJvbS4uLgorfCBjb25maWd1cmUuYWM6MTI3OiB0aGUgdG9wIGxldmVsCit8IGF1dG9tNHRlOiBtNCBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorLi4uCit8IE1ha2VmaWxlLmFtOjI3OiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA1LzA0CisKK0luZGV4OiBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9jb25maWd1cmUuYWMKKysrKyBnYXdrLTMuMS41L2NvbmZpZ3VyZS5hYworQEAgLTEyNCw3ICsxMjQsNiBAQCBmaQorIAorIGRubCBjaGVjayBmb3IgQyBjb21waWxlciBmb3IgYXV0b21ha2UKKyBBTV9QUk9HX0NDX1NUREMKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBkbmwgQ3lnd2luIGRvZXNuJ3QgbGlrZSB0byBnZXQgbGlicyB3aXRoIGZ1bGwgcGF0aHMKKyBkbmwgc2luY2UgdGhhdCBvdmVycmlkZXMgbGlua2luZyBhZ2FpbnN0IERMTHMuCitJbmRleDogZ2F3ay0zLjEuNS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdhd2stMy4xLjUub3JpZy9NYWtlZmlsZS5hbQorKysrIGdhd2stMy4xLjUvTWFrZWZpbGUuYW0KK0BAIC0yNCw3ICsyNCw3IEBACisgIyMgcHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBBdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBpZiBuZWVkZWQsIG1ha2UgLmJ6MiBmaWxlcyBhbHNvLgorLUFVVE9NQUtFX09QVElPTlMgPSBhbnNpMmtuciBkaXN0LWJ6aXAyCisrQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIKKyAKKyAjIFRoaXMgdW5kb2N1bWVudGVkIHZhcmlhYmxlIGluc3VyZXMgdGhhdCBhY2xvY2FsIHJ1bnMKKyAjIGNvcnJlY3RseSBhZnRlciBjaGFuZ2luZyBjb25maWd1cmUuYWMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3ay00LjEuMy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzZjBiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2stNC4xLjMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0Citmb3IgaSBpbiBgZ3JlcCAtdkUgIkB8XiR8I3xHdC1kdW1teSIgTWFrZXRlc3RzIHxhd2sgLUY6ICd7cHJpbnQgJDF9J2A7IFwKKyAgZG8gTENfQUxMPSR7R0FXS0xPQ0FMRTotQ30gTEFORz0ke0dBV0tMT0NBTEU6LUN9IHNyY2Rpcj1gcHdkYCBBV0s9Z2F3ayBDTVA9Y21wIFwKKyAgbWFrZSAtZiBNYWtldGVzdHMgJGkgPiRpLnRtcCAyPiYxOyBcCisgIGdyZXAgLXEgIkVycm9yIiAkaS50bXA7IFwKKyAgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIkZBSUw6ICRpIjsgXAorICBlbHNlIGVjaG8gIlBBU1M6ICRpIjsgcm0gLWYgJGkudG1wOyBmaTsgXAorZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dhd2svZ2F3a18zLjEuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhZjRhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfMy4xLjUuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgYXdrIHRleHQgcHJvY2Vzc2luZyB1dGlsaXR5IgorREVTQ1JJUFRJT04gPSAiVGhlIEdOVSB2ZXJzaW9uIG9mIGF3aywgYSB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eS4gXAorQXdrIGludGVycHJldHMgYSBzcGVjaWFsLXB1cnBvc2UgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgdG8gZG8gXAorcXVpY2sgYW5kIGVhc3kgdGV4dCBwYXR0ZXJuIG1hdGNoaW5nIGFuZCByZWZvcm1hdHRpbmcgam9icy4iCitIT01FUEFHRSA9ICJ3d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrIgorQlVHVFJBQ0tFUiAgPSAiYnVnLWdhd2tAZ251Lm9yZyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworIyBnYXdrIDw9IDMuMS41OiBHUEx2MgorIyBnYXdrID49IDMuMS42OiBHUEx2MworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIgorCitSREVQRU5EU19nYXdrICs9ICJnYXdrLWNvbW1vbiIKK1JERVBFTkRTX3BnYXdrICs9ICJnYXdrLWNvbW1vbiIKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ2F3ay9nYXdrLSR7UFZ9LnRhci5neiBcCisJZmlsZTovL2dhd2stMy4xLjVfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDc2MDMyNTQ4OTQ3OWNhYzE3ZmUwMTE0YjhmNjJmMzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDYzZGNiOWQwY2EzOThiMWQ0ZjVhMzMyZjZjZDljZWM1NjQ0MTI2NWZjYTYxNmYyZWExYjQ0ZDQ1OWU5ZjBmOCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUEFDS0FHRVMgKz0gImdhd2stY29tbW9uIHBnYXdrIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2F3ayogJHtiaW5kaXJ9L2lnYXdrIgorRklMRVNfZ2F3ay1jb21tb24gKz0gIiR7ZGF0YWRpcn0vYXdrLyogJHtsaWJkaXJ9L2dhd2svYXdrLyoiCitGSUxFU19wZ2F3ayA9ICIke2JpbmRpcn0vcGdhd2sqIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ2F3ay9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQ0ZMQUdTICs9ICItRCBQUk9UT1RZUEVTIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHJlbW92ZSB0aGUgbGluayBzaW5jZSB3ZSBkb24ndCBwYWNrYWdlIGl0CisJcm0gJHtEfSR7YmluZGlyfS9hd2sKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nYXdrL2dhd2tfNC4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTg4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2F3ay9nYXdrXzQuMS4zLmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiR05VIGF3ayB0ZXh0IHByb2Nlc3NpbmcgdXRpbGl0eSIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTlUgdmVyc2lvbiBvZiBhd2ssIGEgdGV4dCBwcm9jZXNzaW5nIHV0aWxpdHkuIFwKK0F3ayBpbnRlcnByZXRzIGEgc3BlY2lhbC1wdXJwb3NlIHByb2dyYW1taW5nIGxhbmd1YWdlIHRvIGRvIFwKK3F1aWNrIGFuZCBlYXN5IHRleHQgcGF0dGVybiBtYXRjaGluZyBhbmQgcmVmb3JtYXR0aW5nIGpvYnMuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nYXdrLyIKK0JVR1RSQUNLRVIgID0gImJ1Zy1nYXdrQGdudS5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgZ2F3ayA8PSAzLjEuNTogR1BMdjIKKyMgZ2F3ayA+PSAzLjEuNjogR1BMdjMKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworREVQRU5EUyArPSAicmVhZGxpbmUiCisKK1BBQ0tBR0VDT05GSUdbbXBmcl0gPSAiLS13aXRoLW1wZnIsLS13aXRob3V0LW1wZnIsIG1wZnIiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nYXdrL2dhd2stJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1NWQzN2Y0MDY5NTAyNjc3ZjI1ZDEzNDBkZjhlZWM5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MjRlZmZhNWI5ZWNkNGVkOTQwZjI1ODFjNWQzYzFkZjRlNGJkN2U2Zjc2OGFhMDMzYzE5MTZmNDdkZmM2ZTI5IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9hd2siCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9hd2svLmRlYnVnIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJhd2siCitBTFRFUk5BVElWRV9UQVJHRVRbYXdrXSA9ICIke2JpbmRpcn0vZ2F3ayIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyByZW1vdmUgdGhlIGxpbmsgc2luY2Ugd2UgZG9uJ3QgcGFja2FnZSBpdAorCXJtICR7RH0ke2JpbmRpcn0vYXdrCit9CisKK2luaGVyaXQgcHRlc3QKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGkgaW4gYGdyZXAgLXZFICJAfF4kfCN8R3QtZHVtbXkiICR7U30vdGVzdC9NYWtldGVzdHMgfGF3ayAtRjogJ3twcmludCAkMX0nYCBNYWtldGVzdHM7IFwKKwkgIGRvIGNwICR7U30vdGVzdC8kaSogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hYXJjaDY0L29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FhcmNoNjQvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgOAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAzCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgOAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2FybS9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3NzJjZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm0vb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAwCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9hcm1lYi9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OTA5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvYXJtZWIvb2JqYXJjaC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qIFBhcmFtZXRlcnMgZGVyaXZlZCBmcm9tIG1hY2hpbmUgYW5kIGNvbXBpbGVyIGFyY2hpdGVjdHVyZS4gKi8KKy8qIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgbWVjaGFuaWNhbGx5IGJ5IGdlbmFyY2guYy4gKi8KKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIFNjYWxhciBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0FMSUdOX1NIT1JUX01PRCAyCisjZGVmaW5lIEFSQ0hfQUxJR05fSU5UX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fTE9OR19NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX1BUUl9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0ZMT0FUX01PRCA0CisjZGVmaW5lIEFSQ0hfQUxJR05fRE9VQkxFX01PRCA4CisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgc2l6ZXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfQ0hBUiAwCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfU0hPUlQgMQorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0lOVCAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9ORyAyCisjZGVmaW5lIEFSQ0hfTE9HMl9TSVpFT0ZfTE9OR19MT05HIDMKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfR1hfQ09MT1JfSU5ERVggOAorI2RlZmluZSBBUkNIX1NJWkVPRl9QVFIgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9GTE9BVCA0CisjZGVmaW5lIEFSQ0hfU0laRU9GX0RPVUJMRSA4CisjZGVmaW5lIEFSQ0hfRkxPQVRfTUFOVElTU0FfQklUUyAyNAorI2RlZmluZSBBUkNIX0RPVUJMRV9NQU5USVNTQV9CSVRTIDUzCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBVbnNpZ25lZCBtYXggdmFsdWVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX01BWF9VQ0hBUiAoKHVuc2lnbmVkIGNoYXIpMHhmZiArICh1bnNpZ25lZCBjaGFyKTApCisjZGVmaW5lIEFSQ0hfTUFYX1VTSE9SVCAoKHVuc2lnbmVkIHNob3J0KTB4ZmZmZiArICh1bnNpZ25lZCBzaG9ydCkwKQorI2RlZmluZSBBUkNIX01BWF9VSU5UICgodW5zaWduZWQgaW50KX4wICsgKHVuc2lnbmVkIGludCkwKQorI2RlZmluZSBBUkNIX01BWF9VTE9ORyAoKHVuc2lnbmVkIGxvbmcpfjBMICsgKHVuc2lnbmVkIGxvbmcpMCkKKworCSAvKiAtLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEFSQ0hfSVNfQklHX0VORElBTiAxCisjZGVmaW5lIEFSQ0hfUFRSU19BUkVfU0lHTkVEIDAKKyNkZWZpbmUgQVJDSF9GTE9BVFNfQVJFX0lFRUUgMQorI2RlZmluZSBBUkNIX0FSSVRIX1JTSElGVCAyCisjZGVmaW5lIEFSQ0hfRElWX05FR19QT1NfVFJVTkNBVEVTIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2Jhc2UtZ2VuaHQuYy1hZGQtYS1wcmVwcm9jZXNzb3ItZGVmaW5lLXRvLWFsbG93LWZvcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk3ZDRlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9iYXNlLWdlbmh0LmMtYWRkLWEtcHJlcHJvY2Vzc29yLWRlZmluZS10by1hbGxvdy1mb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK2Jhc2UvZ2VuaHQuYzogYWRkIGEgcHJlcHJvY2Vzc29yIGRlZmluZSB0byBhbGxvdyBmb3BlbiBjYWxsaW5nCisKK1RoZSBjb21taXQgaW4gdXBzdHJlYW06CitodHRwOi8vZ2l0Lmdob3N0c2NyaXB0LmNvbS8/cD1naG9zdHBkbC5naXQ7YT1jb21taXRkaWZmO2g9NzczYzY5ZTQ2ZTcwYmRkNTQ4MjY3NjQzN2RhZmQyY2E4MzM5NzY0MworCitSZXBsYWNlIGFsbCBmb3BlbiBjYWxscyB3aXRoIGdwX2ZvcGVuIGFuZCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHNvCit0aGF0IGFueSB1bmludGVudGlhbCBjYWxscyBkaXJlY3RseSB0byBmb3BlbiB3aWxsIGNhdXNlIGFuIGVycm9yLgorCitPbmx5IGV4Y2VwdGlvbnMgYXJlIHRob3NlIGluIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlLCBhbmQgbWtyb21mcy5jLgorVGhpcyBwYXRjaCBhZGQgYSBwcmVwcm9jZXNzb3IgZGVmaW5lIHRvIGFsbG93IGZvcGVuIGNhbGxpbmcgaW4gYmFzZS9nZW5odC5jLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgYmFzZS9nZW5odC5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYmFzZS9nZW5odC5jIGIvYmFzZS9nZW5odC5jCitpbmRleCA0YjA0MDg1Li5jYzgyZmZmIDEwMDY0NAorLS0tIGEvYmFzZS9nZW5odC5jCisrKysgYi9iYXNlL2dlbmh0LmMKK0BAIC0xNiw2ICsxNiwxMCBAQAorIAorIC8qIEdlbmVyYXRlIEMgY29kZSBmb3IgY29tcGlsaW5nIGhhbGZ0b25lcyBpbnRvIFJPTS4gKi8KKyAjaW5jbHVkZSAibWFsbG9jXy5oIgorKworKy8qIHByZXZlbnQgZ3AuaCBmcm9tIGRlZmluaW5nIGZvcGVuICovCisrI2RlZmluZSBmb3BlbiBmb3BlbgorKworICNpbmNsdWRlICJzdGRpb18uaCIKKyAjaW5jbHVkZSAic3RyaW5nXy5oIgorICNpbmNsdWRlICJnc2NkZWZzLmgiCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2N1cHMtbm8tZ2NyeXB0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzkzNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvY3Vwcy1uby1nY3J5cHQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorU3ViamVjdDogW1BBVENIXSBEb24ndCBidWlsZC1kZXBlbmQgb24gbGliZ2NyeXB0LCBhcyBub3RoaW5nIGlzIHVzZWQgZnJvbSBpdAorCitCYWNrcG9ydGVkIGZyb20gaHR0cDovL3d3dy5jdXBzLm9yZy9zdHJmaWxlcy5waHAvMzMwOC9jdXBzLW5vLWdjcnlwdC5wYXRjaAorCitUaGlzIGFkZHJlc3NlcyB0aGUgY3J5dG8gZGVwZW5kZW5jeSBzZWVuIGR1cmluZyBidWlsZC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorCitSZWJhc2UgdGhlIHBhdGNoIHRvIGdob3N0c2NyaXB0LTkuMTUKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KKy0tLQorIGN1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2N1cHMvbGlicy9jdXBzL2h0dHAtcHJpdmF0ZS5oIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK2luZGV4IDk5YTg1YzMuLmE2NzQ4NTIgMTAwNjQ0CistLS0gYS9jdXBzL2xpYnMvY3Vwcy9odHRwLXByaXZhdGUuaAorKysrIGIvY3Vwcy9saWJzL2N1cHMvaHR0cC1wcml2YXRlLmgKK0BAIC04MCw3ICs4MCw2IEBAIHR5cGVkZWYgaW50IHNvY2tsZW5fdDsKKyAjICBlbGlmIGRlZmluZWQgSEFWRV9HTlVUTFMKKyAjICAgIGluY2x1ZGUgPGdudXRscy9nbnV0bHMuaD4KKyAjICAgIGluY2x1ZGUgPGdudXRscy94NTA5Lmg+CistIyAgICBpbmNsdWRlIDxnY3J5cHQuaD4KKyAjICBlbGlmIGRlZmluZWQoSEFWRV9DRFNBU1NMKQorICMgICAgaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyAjICAgIGluY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOGE5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4wMi1nZW5hcmNoLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0ltcG9ydCBwYXRjaCBmcm9tIHdpbmRyaXZlciBsaW51eCBmb3IgY3Jvc3MgY29tcGlsYXRpb24sIGFuZCBzcGxpdCBwYXRjaGVzCitpbnRvIG9lIHdheSB1bmRlciBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgc3VjaCBhcyBpNTg2LCBwb3dlcnBjIGV0YyBhY2NvcmRpbmcgCit0byBSaWNoYXJkJ3Mgb3Bpbmlvbi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEthbmcgS2FpIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CisKKyMgQXV0aG9yOiBDaGkgWHUgPGNoaS54dUB3aW5kcml2ZXIuY29tPgorIyBEYXRlOiBGZWIgMjYgMjAxMAorIyBTdW1tYXJ5OiBHZW5lcmF0ZSBhcmNoLmggZm9yIHBwYzMyCisjCisKK2RpZmYgLU5ydSBnaG9zdHNjcmlwdC04LjY0Lm9yaWcvYmFzZS9saWIubWFrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCistLS0gZ2hvc3RzY3JpcHQtOC42NC5vcmlnL2Jhc2UvbGliLm1hawkyMDEwLTAyLTEwIDEwOjMwOjAyLjAwMDAwMDAwMCArMDgwMAorKysrIGdob3N0c2NyaXB0LTguNjQvYmFzZS9saWIubWFrCTIwMTAtMDItMTAgMTA6NTY6MjEuMDAwMDAwMDAwICswODAwCitAQCAtNjcsOCArNjcsOCBAQAorIHN0ZHByZV9oPSQoR0xTUkMpc3RkcHJlLmggJChzdGRwbl9oKQorIHN0ZGludF9faD0kKEdMU1JDKXN0ZGludF8uaCAkKHN0ZF9oKQorIAorLSQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorLQkkKEVYUCkkKEdFTkFSQ0hfWEUpICQoR0xHRU4pYXJjaC5oICQoVEFSR0VUX0FSQ0hfRklMRSkKKysjIyQoR0xHRU4pYXJjaC5oIDogJChHRU5BUkNIX1hFKQorKyMjCSQoRVhQKSQoR0VOQVJDSF9YRSkgJChHTEdFTilhcmNoLmggJChUQVJHRVRfQVJDSF9GSUxFKQorIAorICMgUGxhdGZvcm0gaW50ZXJmYWNlcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyOWJlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjAyLXByZXZlbnRfcmVjb21waWxpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDAgQEAKK3VzdCB1c2UgY29tbWFuZHMgcHJvdmlkZWQgYnkgZ2hvc3RzY3JpcHQtbmF0aXZlLCBwcmV2ZW50aW5nIHJlY29tcGlsZSB0aGVtIHdoZW4KK2NvbXBpbGUgZ2hvc3RzY3JpcHQuCitXYXkgdG8gZW5hYmxlIGNyb3NzIGNvbXBpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvYmFzZS91bml4LWF1eC5tYWsgYi9iYXNlL3VuaXgtYXV4Lm1haworaW5kZXggYTkxZmIyNi4uYzk5MWQxMSAxMDA2NDQKKy0tLSBhL2Jhc2UvdW5peC1hdXgubWFrCisrKysgYi9iYXNlL3VuaXgtYXV4Lm1haworQEAgLTY5LDQ2ICs2OSw0NiBAQCAkKEdMT0JKKWdwX3N5c3YuJChPQkopOiAkKEdMU1JDKWdwX3N5c3YuYyAkKHN0ZGlvX19oKSAkKHRpbWVfX2gpICQoQUspXAorICAkKE1BS0VESVJTKQorIAkkKEdMQ0MpICQoR0xPXylncF9zeXN2LiQoT0JKKSAkKENfKSAkKEdMU1JDKWdwX3N5c3YuYworIAorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXV4aWxpYXJ5IHByb2dyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCistCistJChFQ0hPR1NfWEUpOiAkKEdMU1JDKWVjaG9ncy5jICQoQUspICQoc3RkcHJlX2gpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEVDSE9HU19YRSkgJChHTFNSQyllY2hvZ3MuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIE9uIHRoZSBSUy82MDAwIChhdCBsZWFzdCksIGNvbXBpbGluZyBnZW5hcmNoLmMgd2l0aCBnY2Mgd2l0aCAtTworLSMgcHJvZHVjZXMgYSBidWdneSBleGVjdXRhYmxlLgorLSQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5BUkNIX1hFKSAkKEdMU1JDKWdlbmFyY2guYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQ09ORl9YRSkgJChHTFNSQylnZW5jb25mLmMgJChBVVhFWFRSQUxJQlMpCistCistJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCistCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkRFVl9YRSkgJChHTFNSQylnZW5kZXYuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0kKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKy0JJChDQ0FVWF8pICQoR0VOSFRfQ0ZMQUdTKSAkKE9fKSQoR0VOSFRfWEUpICQoR0xTUkMpZ2VuaHQuYyAkKEFVWEVYVFJBTElCUykKKy0KKy0jIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CistIyB3aGljaCBtZWFucyB0aGF0IHRoZSBta3JvbWZzIGJ1aWxkIGNhbid0IGZpbmQgdGhlIHpsaWIgc291cmNlIGl0IG5lZWRzLgorLSMgU28gaXQncyBzcGxpdCBpbnRvIHR3byB0YXJnZXRzLCBvbmUgdXNpbmcgdGhlIHpsaWIgc291cmNlIGRpcmVjdGx5Li4uLi4KKy1NS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdzY2RlZnMuJChPQkopICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKSAkKEFVWCltZW1lbnRvLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMDogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18wKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8wICQoTUtST01GU19PQkpTXzApICQoQVVYRVhUUkFMSUJTKQorLQorLSMgLi4uLiBhbmQgb25lIHVzaW5nIHRoZSB6bGliIGxpYnJhcnkgbGlua2VkIHZpYSB0aGUgY29tbWFuZCBsaW5lCistTUtST01GU19PQkpTXzE9JChBVVgpZ3NjZGVmcy4kKE9CSikgXAorLSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCistICQoQVVYKWdwX3VuaXguJChPQkopICQoQVVYKWdwX3VuaWZzLiQoT0JKKSAkKEFVWClncF91bmlmbi4kKE9CSikgXAorLSAkKEFVWClncF9zdGRpYS4kKE9CSikgJChBVVgpZ3N1dGlsLiQoT0JKKQorLQorLSQoTUtST01GU19YRSlfMTogJChHTFNSQylta3JvbWZzLmMgJChNS1JPTUZTX0NPTU1PTl9ERVBTKSAkKE1LUk9NRlNfT0JKU18xKSAkKE1BS0VESVJTKQorLQkkKENDQVVYXykgJChHRU5PUFQpICQoQ0ZMQUdTKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChJXykkKEdMT0JKKSQoX0kpICQoSV8pJChaU1JDRElSKSQoX0kpICQoR0xTUkMpbWtyb21mcy5jICQoT18pJChNS1JPTUZTX1hFKV8xICQoTUtST01GU19PQkpTXzEpICQoQVVYRVhUUkFMSUJTKQorLQorLSQoTUtST01GU19YRSk6ICQoTUtST01GU19YRSlfJChTSEFSRV9aTElCKSAkKE1BS0VESVJTKQorLQkkKENQXykgJChNS1JPTUZTX1hFKV8kKFNIQVJFX1pMSUIpICQoTUtST01GU19YRSkKKysjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnkgcHJvZ3JhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKKysjCisrIyQoRUNIT0dTX1hFKTogJChHTFNSQyllY2hvZ3MuYyAkKEFLKSAkKHN0ZHByZV9oKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoRUNIT0dTX1hFKSAkKEdMU1JDKWVjaG9ncy5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjIyBPbiB0aGUgUlMvNjAwMCAoYXQgbGVhc3QpLCBjb21waWxpbmcgZ2VuYXJjaC5jIHdpdGggZ2NjIHdpdGggLU8KKysjIyBwcm9kdWNlcyBhIGJ1Z2d5IGV4ZWN1dGFibGUuCisrIyQoR0VOQVJDSF9YRSk6ICQoR0xTUkMpZ2VuYXJjaC5jICQoQUspICQoR0VOQVJDSF9ERVBTKSAkKE1BS0VESVJTKQorKyMJJChDQ0FVWF8pICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKE9fKSQoR0VOQVJDSF9YRSkgJChHTFNSQylnZW5hcmNoLmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkNPTkZfWEUpOiAkKEdMU1JDKWdlbmNvbmYuYyAkKEFLKSAkKEdFTkNPTkZfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKElfKSQoR0xTUkNESVIpJChfSSkgJChPXykkKEdFTkNPTkZfWEUpICQoR0xTUkMpZ2VuY29uZi5jICQoQVVYRVhUUkFMSUJTKQorKyMKKysjJChHRU5ERVZfWEUpOiAkKEdMU1JDKWdlbmRldi5jICQoQUspICQoR0VOREVWX0RFUFMpICQoTUFLRURJUlMpCisrIwkkKENDQVVYXykgJChJXykkKEdMU1JDRElSKSQoX0kpICQoT18pJChHRU5ERVZfWEUpICQoR0xTUkMpZ2VuZGV2LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKEdFTkhUX1hFKTogJChHTFNSQylnZW5odC5jICQoQUspICQoR0VOSFRfREVQUykgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTkhUX0NGTEFHUykgJChPXykkKEdFTkhUX1hFKSAkKEdMU1JDKWdlbmh0LmMgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIFRvIGdldCBHUyB0byB1c2UgdGhlIHN5c3RlbSB6bGliLCB5b3UgcmVtb3ZlL2hpZGUgdGhlIGdzL3psaWIgZGlyZWN0b3J5CisrIyMgd2hpY2ggbWVhbnMgdGhhdCB0aGUgbWtyb21mcyBidWlsZCBjYW4ndCBmaW5kIHRoZSB6bGliIHNvdXJjZSBpdCBuZWVkcy4KKysjIyBTbyBpdCdzIHNwbGl0IGludG8gdHdvIHRhcmdldHMsIG9uZSB1c2luZyB0aGUgemxpYiBzb3VyY2UgZGlyZWN0bHkuLi4uLgorKyNNS1JPTUZTX09CSlNfMD0kKE1LUk9NRlNfWkxJQl9PQkpTKSAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClnc2NkZWZzLiQoT0JKKSAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopICQoQVVYKW1lbWVudG8uJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzA6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMCkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzAgJChNS1JPTUZTX09CSlNfMCkgJChBVVhFWFRSQUxJQlMpCisrIworKyMjIC4uLi4gYW5kIG9uZSB1c2luZyB0aGUgemxpYiBsaWJyYXJ5IGxpbmtlZCB2aWEgdGhlIGNvbW1hbmQgbGluZQorKyNNS1JPTUZTX09CSlNfMT0kKEFVWClnc2NkZWZzLiQoT0JKKSBcCisrIyAkKEFVWClncG1pc2MuJChPQkopICQoQVVYKWdwX2dldG52LiQoT0JKKSBcCisrIyAkKEFVWClncF91bml4LiQoT0JKKSAkKEFVWClncF91bmlmcy4kKE9CSikgJChBVVgpZ3BfdW5pZm4uJChPQkopIFwKKysjICQoQVVYKWdwX3N0ZGlhLiQoT0JKKSAkKEFVWClnc3V0aWwuJChPQkopCisrIworKyMkKE1LUk9NRlNfWEUpXzE6ICQoR0xTUkMpbWtyb21mcy5jICQoTUtST01GU19DT01NT05fREVQUykgJChNS1JPTUZTX09CSlNfMSkgJChNQUtFRElSUykKKysjCSQoQ0NBVVhfKSAkKEdFTk9QVCkgJChDRkxBR1MpICQoSV8pJChHTFNSQ0RJUikkKF9JKSAkKElfKSQoR0xPQkopJChfSSkgJChJXykkKFpTUkNESVIpJChfSSkgJChHTFNSQylta3JvbWZzLmMgJChPXykkKE1LUk9NRlNfWEUpXzEgJChNS1JPTUZTX09CSlNfMSkgJChBVVhFWFRSQUxJQlMpCisrIworKyMkKE1LUk9NRlNfWEUpOiAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNQUtFRElSUykKKysjCSQoQ1BfKSAkKE1LUk9NRlNfWEUpXyQoU0hBUkVfWkxJQikgJChNS1JPTUZTX1hFKQorIAorICMgUXVlcnkgdGhlIGVudmlyb25tZW50IHRvIGNvbnN0cnVjdCBnY29uZmlnXy5oLgorICMgVGhlc2UgYXJlIGFsbCBkZWZpbmVkIGNvbmRpdGlvbmFsbHkgKGV4Y2VwdCB0aGUgSmFzUEVSIG9uZSksIHNvIHRoYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5N2I4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtOS4xNS1wYXJhbGxlbC1tYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0Zyb20gYmUxZTFiMzMxOTFhZmRjZmUzYzJlY2M0ZmYzZTM2MWE1ODU5ZTljNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAzMCBKYW4gMjAxNSAwMDo0MDoyMiAtMDgwMAorU3ViamVjdDogW1BBVENIXSBjb250cmliLm1hazogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK3JtOiBjYW5ub3QgcmVtb3ZlIGAvdXNyL3NoYXJlL2dob3N0c2NyaXB0LzkuMTUvbGliJzogSXMgYSBkaXJlY3RvcnkKKworQ3JlYXRlIGxpYiBiZWZvcmUgaW5zdGFsbCB0byBmaXggdGhlIHJhY2UgaXNzdWUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbnRyaWIvY29udHJpYi5tYWsgfCAgICAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250cmliLm1hayBiL2NvbnRyaWIvY29udHJpYi5tYWsKK2luZGV4IDA4YTgwZDEuLmRlMmUyMGQgMTAwNjQ0CistLS0gYS9jb250cmliL2NvbnRyaWIubWFrCisrKysgYi9jb250cmliL2NvbnRyaWIubWFrCitAQCAtOTQ3LDYgKzk0Nyw3IEBAICQoREVWT0JKKWR2aXBybGliLiQoT0JKKSA6ICQoSkFQU1JDKWR2aXBybGliLmMgJChKQVBTUkMpZHZpcHJsaWIuaAorIAkkKERFVkNDKSAkKE9fKSRAICQoQ18pICQoSkFQU1JDKWR2aXBybGliLmMKKyAKKyBleHRyYS1kbXBydC1pbnN0YWxsOgorKwlta2RpciAtcCAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYgorIAkkKElOU1RBTExfREFUQSkgJChKQVBTUkMpZG1wX2luaXQucHMgJChERVNURElSKSQoZ3NkYXRhZGlyKSQoRClsaWIgfHwgZXhpdCAxCisgCSQoSU5TVEFMTF9EQVRBKSAkKEpBUFNSQylkbXBfc2l0ZS5wcyAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDEKKyAJJChJTlNUQUxMX0RBVEEpICQoSkFQU1JDKWVzY3BfMjQuc3JjICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliIHx8IGV4aXQgMQorQEAgLTEwODgsNiArMTA4OSw3IEBAICQoREVWT0JKKWdkZXZhbHBzLiQoT0JKKSA6ICQoSkFQU1JDKWdkZXZhbHBzLmMgJChQREVWSCkKKyAjIyMgLS0tLS0tLS0tLS0tLS0tLS0gQWRkaXRpb25hbCAudXBwIGZpbGVzIC0tLS0tLS0tLS0tLS0tLS0gIyMjCisgCisgZXh0cmEtdXBwLWluc3RhbGw6CisrCW1rZGlyIC1wICQoREVTVERJUikkKGdzZGF0YWRpcikkKEQpbGliCisgCWZvciBmIGluICQoQ09OVFJJQlNSQyl1bmlwcmludCQoRCkqLnVwcDsgZG8gXAorIAkgICAgJChJTlNUQUxMX0RBVEEpICQkZiAkKERFU1RESVIpJChnc2RhdGFkaXIpJChEKWxpYiB8fCBleGl0IDE7IFwKKyAJZG9uZQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg2NDgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2dob3N0c2NyaXB0LTkuMTYtV2Vycm9yLXJldHVybi10eXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gNWQ1YzgzYzg5YmUwY2ZmMjlkZGUyMjY3ZmExNjhlNmY3MTQ2YmU4YyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogTW9uLCA0IE1heSAyMDE1IDIyOjMxOjQ4IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGJhc2UvZ2VuZGV2LmM6IGZpeCBmb3IgLVdlcnJvcj1yZXR1cm4tdHlwZQorCitGaXhlZDoKK2Jhc2UvZ2VuZGV2LmM6ODA6MTogZXJyb3I6IHJldHVybiB0eXBlIGRlZmF1bHRzIHRvICdpbnQnIFstV2Vycm9yPXJldHVybi10eXBlXQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBiYXNlL2dlbmRldi5jIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9iYXNlL2dlbmRldi5jIGIvYmFzZS9nZW5kZXYuYworaW5kZXggNjhhNzQ1Zi4uODA1OGI1YSAxMDA2NDQKKy0tLSBhL2Jhc2UvZ2VuZGV2LmMKKysrKyBiL2Jhc2UvZ2VuZGV2LmMKK0BAIC03Nyw2ICs3Nyw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICppbmRlbnRfaXRlbSA9ICIiOworIC8qIEZvcndhcmQgZGVmaW5pdGlvbnMgKi8KKyB2b2lkIGFkZF9lbnRyeShjb25maWcgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJvb2wpOworIAorK2ludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgIGNvbmZpZyBjb25mOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC1uYXRpdmUtZml4LWRpc2FibGUtc3lzdGVtLWxpYnRpZmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTgxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQtbmF0aXZlLWZpeC1kaXNhYmxlLXN5c3RlbS1saWJ0aWZmLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2dob3N0c2NyaXB0LW5hdGl2ZTpmaXggZGlzYWJsZS1zeXN0ZW0tbGlidGlmZgorCitNb2RpZnkgY29uZmlndXJlIHRvIGFkZCB0aGUgY2hlY2sgdG8gbWFrZSBzdXJlCitnaG9zdHNjcmlwIGNvdWxkIHdvcmsgd2hpbGUgc3lzdGVtLWxpYnRpZmYgaXMKK2Rpc2FibGVkLgorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA1NSw2ICsxMDU1LDcgQEAgRGlzYWJsaW5nIHRpZmYgb3V0cHV0IGRldmljZXMuXSkKKyBlc2FjCisgCisgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorKyAgICBpZiB0ZXN0IC1lICRMSUJUSUZGRElSL2NvbmZpZ3VyZTsgdGhlbgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJSdW5uaW5nIGxpYnRpZmYgY29uZmlndXJlIHNjcmlwdC4uLiIKKyAgICAgICBvbGRkaXI9YHB3ZGAKK0BAIC0xMDY5LDYgKzEwNzAsMTAgQEAgaWYgdGVzdCAkU0hBUkVfTElCVElGRiAtZXEgMDsgdGhlbgorICAgICAgIGNkICIkb2xkZGlyIgorICAgICAgIGVjaG8KKyAgICAgICBlY2hvICJDb250aW51aW5nIHdpdGggR2hvc3RzY3JpcHQgY29uZmlndXJhdGlvbi4uLiIKKysgICAgZWxzZQorKyAgICAgIEFDX01TR19OT1RJQ0UoW0NvdWxkIG5vdCBmaW5kIGxvY2FsIGNvcHkgb2YgbGlidGlmZi4KKytEaXNhYmxpbmcgdGlmZiBvdXRwdXQgZGV2aWNlcy5dKQorKyAgICBmaQorIGZpCisgCisgQUNfU1VCU1QoU0hBUkVfTElCVElGRikKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvaTU4Ni9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgxN2I3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNTg2L29iamFyY2guaApAQCAtMCwwICsxLDQxIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L2k2ODYKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uODdhYWNhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9pNjg2CkBAIC0wLDAgKzEgQEAKK2k1ODYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzMjMyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWViL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taWNyb2JsYXplZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYzgxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWljcm9ibGF6ZWVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgNAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwcy9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiNjM3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWwvb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0ZWxuMzIvb2JqYXJjaC5oIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDVkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dob3N0c2NyaXB0L2dob3N0c2NyaXB0L21pcHM2NGVsbjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzNjRuMzIvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwczY0bjMyL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9taXBzZWwvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZjkwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvbWlwc2VsL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYy9vYmphcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjL29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDQKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDQKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC9wb3dlcnBjNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMGExNmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQvcG93ZXJwYzY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMQorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdC94ODYtNjQvb2JqYXJjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHQveDg2LTY0L29iamFyY2guaApAQCAtMCwwICsxLDQwIEBACisvKiBQYXJhbWV0ZXJzIGRlcml2ZWQgZnJvbSBtYWNoaW5lIGFuZCBjb21waWxlciBhcmNoaXRlY3R1cmUuICovCisvKiBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIG1lY2hhbmljYWxseSBieSBnZW5hcmNoLmMuICovCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBTY2FsYXIgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9BTElHTl9TSE9SVF9NT0QgMgorI2RlZmluZSBBUkNIX0FMSUdOX0lOVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0xPTkdfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9QVFJfTU9EIDgKKyNkZWZpbmUgQVJDSF9BTElHTl9GTE9BVF9NT0QgNAorI2RlZmluZSBBUkNIX0FMSUdOX0RPVUJMRV9NT0QgOAorCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gU2NhbGFyIHNpemVzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0NIQVIgMAorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX1NIT1JUIDEKKyNkZWZpbmUgQVJDSF9MT0cyX1NJWkVPRl9JTlQgMgorI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkcgMworI2RlZmluZSBBUkNIX0xPRzJfU0laRU9GX0xPTkdfTE9ORyAzCisjZGVmaW5lIEFSQ0hfU0laRU9GX0dYX0NPTE9SX0lOREVYIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfUFRSIDgKKyNkZWZpbmUgQVJDSF9TSVpFT0ZfRkxPQVQgNAorI2RlZmluZSBBUkNIX1NJWkVPRl9ET1VCTEUgOAorI2RlZmluZSBBUkNIX0ZMT0FUX01BTlRJU1NBX0JJVFMgMjQKKyNkZWZpbmUgQVJDSF9ET1VCTEVfTUFOVElTU0FfQklUUyA1MworCisJIC8qIC0tLS0tLS0tLS0tLS0tLS0gVW5zaWduZWQgbWF4IHZhbHVlcyAtLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQVJDSF9NQVhfVUNIQVIgKCh1bnNpZ25lZCBjaGFyKTB4ZmYgKyAodW5zaWduZWQgY2hhcikwKQorI2RlZmluZSBBUkNIX01BWF9VU0hPUlQgKCh1bnNpZ25lZCBzaG9ydCkweGZmZmYgKyAodW5zaWduZWQgc2hvcnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUlOVCAoKHVuc2lnbmVkIGludCl+MCArICh1bnNpZ25lZCBpbnQpMCkKKyNkZWZpbmUgQVJDSF9NQVhfVUxPTkcgKCh1bnNpZ25lZCBsb25nKX4wTCArICh1bnNpZ25lZCBsb25nKTApCisKKwkgLyogLS0tLS0tLS0tLS0tLS0tLSBNaXNjZWxsYW5lb3VzIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBUkNIX0lTX0JJR19FTkRJQU4gMAorI2RlZmluZSBBUkNIX1BUUlNfQVJFX1NJR05FRCAwCisjZGVmaW5lIEFSQ0hfRkxPQVRTX0FSRV9JRUVFIDEKKyNkZWZpbmUgQVJDSF9BUklUSF9SU0hJRlQgMgorI2RlZmluZSBBUkNIX0RJVl9ORUdfUE9TX1RSVU5DQVRFUyAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9naG9zdHNjcmlwdC9naG9zdHNjcmlwdF85LjE2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGFjYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ2hvc3RzY3JpcHQvZ2hvc3RzY3JpcHRfOS4xNi5iYgpAQCAtMCwwICsxLDEwMyBAQAorU1VNTUFSWSA9ICJUaGUgR1BMIEdob3N0c2NyaXB0IFBvc3RTY3JpcHQvUERGIGludGVycHJldGVyIgorREVTQ1JJUFRJT04gPSAiR2hvc3RzY3JpcHQgaXMgdXNlZCBmb3IgUG9zdFNjcmlwdC9QREYgcHJldmlldyBhbmQgcHJpbnRpbmcuICBVc3VhbGx5IGFzIFwKK2EgYmFjay1lbmQgdG8gYSBwcm9ncmFtIHN1Y2ggYXMgZ2hvc3R2aWV3LCBpdCBjYW4gZGlzcGxheSBQb3N0U2NyaXB0IGFuZCBQREYgXAorZG9jdW1lbnRzIGluIGFuIFgxMSBlbnZpcm9ubWVudC4gXAorXAorRnVydGhlcm1vcmUsIGl0IGNhbiByZW5kZXIgUG9zdFNjcmlwdCBhbmQgUERGIGZpbGVzIGFzIGdyYXBoaWNzIHRvIGJlIHByaW50ZWQgXAorb24gbm9uLVBvc3RTY3JpcHQgcHJpbnRlcnMuIFN1cHBvcnRlZCBwcmludGVycyBpbmNsdWRlIGNvbW1vbiBcCitkb3QtbWF0cml4LCBpbmtqZXQgYW5kIGxhc2VyIG1vZGVscy4gXAorIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5naG9zdHNjcmlwdC5jb20iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1iMTdjZWE1NDc0MzQzNWFiMmE1ODFjMjM3YmVhMjk0YSIKKworREVQRU5EUyA9ICJnaG9zdHNjcmlwdC1uYXRpdmUgdGlmZiBqcGVnIGZvbnRjb25maWcgY3VwcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSV9CQVNFID0gImh0dHA6Ly9kb3dubG9hZHMuZ2hvc3RzY3JpcHQuY29tL3B1YmxpYy9naG9zdHNjcmlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE1LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjE2LVdlcnJvci1yZXR1cm4tdHlwZS5wYXRjaCBcCisiCisKK1NSQ19VUkkgPSAiJHtTUkNfVVJJX0JBU0V9IFwKKyAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LTkuMDItcHJldmVudF9yZWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9naG9zdHNjcmlwdC05LjAyLWdlbmFyY2gucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2JqYXJjaC5oIFwKKyAgICAgICAgICAgZmlsZTovL2N1cHMtbm8tZ2NyeXB0LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2NsYXNzLW5hdGl2ZSA9ICIke1NSQ19VUklfQkFTRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dob3N0c2NyaXB0LW5hdGl2ZS1maXgtZGlzYWJsZS1zeXN0ZW0tbGlidGlmZi5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYmFzZS1nZW5odC5jLWFkZC1hLXByZXByb2Nlc3Nvci1kZWZpbmUtdG8tYWxsb3ctZm9wZS5wYXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4MjkzMTkzMjViYmRiODNmNWM4MTM3OWE4Zjg2ZjM4ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NDZkNzcyODBjY2E4YWZkZDNkNGMyYzEzODllMzMyZWQ5YjA2MDViZDEwN2JjYWFlMWQ3NjFiMDYxZDFhNjhkIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXggLS13aXRoLXN5c3RlbS1saWJ0aWZmIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgLS13aXRoLWZvbnRwYXRoPSR7ZGF0YWRpcn0vZm9udHMgXAorICAgICAgICAgICAgICAgIC0td2l0aG91dC1saWJpZG4gLS13aXRoLWN1cHMtc2VydmVyYmluPSR7ZXhlY19wcmVmaXh9L2xpYi9jdXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY3Vwcy1kYXRhZGlyPSR7ZGF0YWRpcn0vY3VwcyBcCisgICAgICAgICAgICAgICAgJHtAYmFzZV9jb25kaXRpb25hbCgnU0lURUlORk9fRU5ESUFOTkVTUycsICdsZScsICctLWVuYWJsZS1saXR0bGUtZW5kaWFuJywgJy0tZW5hYmxlLWJpZy1lbmRpYW4nLCBkKX0gXAorICAgICAgICAgICAgICAgICIKKworRVhUUkFfT0VDT05GX2FwcGVuZF9taXBzID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbWlwc2VsID0gIiAtLXdpdGgtbGFyZ2VfY29sb3JfaW5kZXg9MCIKKworIyBFeHBsaWNpdHkgZGlzYWJsZSBsaWJ0aWZmLCBmb250Y29uZmlnLAorIyBmcmVldHlwZSwgY3VwcyBmb3IgZ2hvc3RzY3JpcHQtbmF0aXZlCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0td2l0aG91dC14IC0td2l0aC1zeXN0ZW0tbGlidGlmZj1ubyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1qYmlnMmRlYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1mb250cGF0aD0ke2RhdGFkaXJ9L2ZvbnRzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmlkbiAtLWRpc2FibGUtZm9udGNvbmZpZyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1mcmVldHlwZSAtLWRpc2FibGUtY3VwcyIKKworIyBUaGlzIGhhcyBiZWVuIGZpeGVkIHVwc3RyZWFtIGJ1dCBmb3Igbm93IHdlIG5lZWQgdG8gc3VidmVydCB0aGUgY2hlY2sgZm9yIHRpbWUuaAorIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQ0MworIyBodHRwOi8vYnVncy5naG9zdHNjcmlwdC5jb20vc2hvd19idWcuY2dpP2lkPTY5MjQyNgorQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorQlVJTERfQ0ZMQUdTICs9ICItREhBVkVfU1lTX1RJTUVfSD0xIgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJbWtkaXIgLXAgb2JqCisJbWtkaXIgLXAgc29vYmoKKwlpZiBbIC1lICR7V09SS0RJUn0vb2JqYXJjaC5oIF07IHRoZW4KKwkJY3AgJHtXT1JLRElSfS9vYmphcmNoLmggb2JqL2FyY2guaAorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQgKCkgeworCSMgY29weSB0b29scyBmcm9tIHRoZSBuYXRpdmUgZ2hvc3RzY3JpcHQgYnVpbGQKKwlpZiBbICIke1BOfSIgIT0gImdob3N0c2NyaXB0LW5hdGl2ZSIgXTsgdGhlbgorCQlta2RpciAtcCBvYmovYXV4IHNvb2JqCisJCWZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisJCQljcCAke1NUQUdJTkdfQklORElSX05BVElWRX0vZ2hvc3RzY3JpcHQtJHtQVn0vJGkgb2JqL2F1eC8kaQorCQlkb25lCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIG1rZGlyIC1wICR7RH0ke2RhdGFkaXJ9L2dob3N0c2NyaXB0LyR7UFZ9LworICAgIGNwIC1yICR7U30vUmVzb3VyY2UgJHtEfSR7ZGF0YWRpcn0vZ2hvc3RzY3JpcHQvJHtQVn0vCisgICAgY3AgLXIgJHtTfS9pY2Nwcm9maWxlcyAke0R9JHtkYXRhZGlyfS9naG9zdHNjcmlwdC8ke1BWfS8KK30KKworZG9fY29tcGlsZV9jbGFzcy1uYXRpdmUgKCkgeworICAgIG1rZGlyIC1wIG9iagorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIG9lX3J1bm1ha2Ugb2JqL2F1eC8kaQorICAgIGRvbmUKK30KKworZG9faW5zdGFsbF9jbGFzcy1uYXRpdmUgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfQorICAgIGZvciBpIGluIGdlbmFyY2ggZ2VuY29uZiBta3JvbWZzIGVjaG9ncyBnZW5kZXYgZ2VuaHQ7IGRvCisgICAgICAgIGluc3RhbGwgLW0gNzU1IG9iai9hdXgvJGkgJHtEfSR7YmluZGlyfS9naG9zdHNjcmlwdC0ke1BWfS8kaQorICAgIGRvbmUKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmYuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGNlMjMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmLmluYwpAQCAtMCwwICsxLDIyIEBACitERVNDUklQVElPTiA9ICJHTlUgZ3BlcmYgaXMgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZ2VuZXJhdG9yIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dwZXJmIgorU1VNTUFSWSAgPSAiR2VuZXJhdGUgYSBwZXJmZWN0IGhhc2ggZnVuY3Rpb24gZnJvbSBhIHNldCBvZiBrZXl3b3JkcyIKK0xJQ0VOU0UgID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmNjO2JlZ2lubGluZT04O2VuZGxpbmU9MTk7bWQ1PWRlYzhmNjExODQ1ZDA0NzM4N2VkNTZiNWI4NWZhOTliIgorCitTUkNfVVJJICA9ICIke0dOVV9NSVJST1J9L2dwZXJmL2dwZXJmLSR7UFZ9LnRhci5neiIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBhdXRvcmVjb25mIGNvdWxkbid0IGZpbmQgYWNpbmNsdWRlLm00IHdoZW4gc3RlcHBpbmcgaW50byBzdWJkaXJlY3RvcnkuIEluc3RlYWQgb2YKKyMgZHVwbGljYXRpbmcgYWNpbmNsdWRlLm00IGluIGV2ZXJ5IHN1YmRpcmVjdG9yeSwgdXNlIGFic29sdXRlIGluY2x1ZGUgcGF0aCB0byBhY2xvY2FsCitFWFRSQV9BVVRPUkVDT05GICs9ICIgLUkgJHtTfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgIGlmIFsgISAtZSAke1N9L2FjaW5jbHVkZS5tNCBdOyB0aGVuCisgICAgICAgICAgICAgICAgY2F0ICR7U30vYWNsb2NhbC5tNCA+ICR7U30vYWNpbmNsdWRlLm00CisgICAgICAgIGZpCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3Mjg4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3BlcmYvZ3BlcmZfMy4wLjMuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworTElDRU5TRSAgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTVmODRhYmIwMDcwYWRmOGEwOTI1ZDdkNTM0YjZlMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21haW4uY2M7YmVnaW5saW5lPTg7ZW5kbGluZT0xOTttZDU9NzJhMzAzNGExOWU3MmYwOGVlNDhlZjgyNDRhMTIxZmQiCisKK1BSID0gInIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2MyMGU1ODk3NWEzODA3NTQ0MDQyM2M4ZmI4NWZkMDAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMyODc1MjdjOGQ5ZTI3ZTgwMWNmMDgwNDQzNmYzNDk0YmQ1NjlkYjA1ZDQ5ZGNkZDJhOTQyYWU3MmZhOTA1NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncGVyZi9ncGVyZl8zLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAwM2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dwZXJmL2dwZXJmXzMuMC40LmJiCkBAIC0wLDAgKzEsNSBAQAorcmVxdWlyZSBncGVyZi5pbmMKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYzFmMWRiMzJmYjY1OThkNmE5M2U2ZTg4Nzk2YTg2MzIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzY3MTEyYTIwNDQwN2U2MmRiYzMxMDY2NDdjZjgzOWVkNTQ0ZjNjZjVkMGYwNTIzYWFhMjUwODYyM2FhZDYzZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwOWY1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQxNDljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZml4LWZvci10ZXhpbmZvLTUuMS5wYXRjaApAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1Bva3kgU3BlY2lmaWMgdGhpcyBpcyBncGx2MiB2ZXJzaW9uXQorCitTaWduZWQtb2ZmLWJ5IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdyZXAtMi41LjFhL2RvYy9ncmVwLnRleGkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2RvYy9ncmVwLnRleGkKKysrKyBncmVwLTIuNS4xYS9kb2MvZ3JlcC50ZXhpCitAQCAtMjg4LDcgKzI4OCw3IEBAIFRoaXMgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGkKKyBQcmludCBhIHVzYWdlIG1lc3NhZ2UgYnJpZWZseSBzdW1tYXJpemluZyB0aGVzZSBjb21tYW5kLWxpbmUgb3B0aW9ucworIGFuZCB0aGUgYnVnLXJlcG9ydGluZyBhZGRyZXNzLCB0aGVuIGV4aXQuCisgCistQGl0ZW14IC0tYmluYXJ5LWZpbGVzPUB2YXJ7dHlwZX0KKytAaXRlbSAtLWJpbmFyeS1maWxlcz1AdmFye3R5cGV9CisgQG9waW5kZXggLS1iaW5hcnktZmlsZXMKKyBAY2luZGV4IGJpbmFyeSBmaWxlcworIElmIHRoZSBmaXJzdCBmZXcgYnl0ZXMgb2YgYSBmaWxlIGluZGljYXRlIHRoYXQgdGhlIGZpbGUgY29udGFpbnMgYmluYXJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiOTE1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9maXg2NC1pbnQtdG8tcG9pbnRlci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitBbHdheXMgdXNlIGxvY2FsZS5oIGFzIEhBVkVfTE9DQUxFX0ggaXMgbm8gbG9uZ2VyIGhhbmRsZWQgYnkgLi9jb25maWd1cmUKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIG9sZCB2ZXJzaW9uIHRoYXQgd2lsbCBub3QgYmUgbWFpbnRhaW5lZCBdCitTaWduZWQtb2ZmLWJ5OiBBbGV4IERBTUlBTiA8YWxleGFuZHJ1LmRhbWlhbkBpbnRlbC5jb20+CisKK2RpZmYgLS1yZWN1cnNpdmUgLS11bmlmaWVkIGdyZXAtMi41LjFhLW9yaWcvbGliL2hhcmQtbG9jYWxlLmMgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMKKy0tLSBncmVwLTIuNS4xYS1vcmlnL2xpYi9oYXJkLWxvY2FsZS5jCTIwMDEtMDMtMDQgMDc6MzM6MTIuMDAwMDAwMDAwICswMjAwCisrKysgZ3JlcC0yLjUuMWEvbGliL2hhcmQtbG9jYWxlLmMJMjAxMy0wMy0xMSAxNzowNTo1Mi4wODY0NDQ4OTEgKzAyMDAKK0BAIC0zOCw5ICszOCw3IEBACisgIyBlbmRpZgorICNlbmRpZgorIAorLSNpZiBIQVZFX0xPQ0FMRV9ICisgIyBpbmNsdWRlIDxsb2NhbGUuaD4KKy0jZW5kaWYKKyAKKyAjaWYgSEFWRV9TVFJJTkdfSAorICMgaW5jbHVkZSA8c3RyaW5nLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9nZXR0ZXh0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ2MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ2V0dGV4dC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitFbmFibGUgb3BlcmF0aW9uIHdpdGggbGF0ZXIgdmVyc2lvbnMgb2YgZ2V0dGV4dC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitSUCAyMDEyLzEwLzE5CisKK0luZGV4OiBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU3OjUxLjY0Njk3MDIwNCArMDAwMAorKysrIGdyZXAtMi41LjFhL2NvbmZpZ3VyZS5pbgkyMDEyLTEwLTE5IDEyOjU5OjQ5Ljk0Njk2ODgwMyArMDAwMAorQEAgLTE0MCw0ICsxNDAsNCBAQAorIAlBQ19DSEVDS19MSUIocGNyZSwgcGNyZV9leGVjKQorIGZpCisgCistQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtzZWQgLWUgIi9QT1RGSUxFUyA9L3IgcG8vUE9URklMRVMiIHBvL01ha2VmaWxlLmluID4gcG8vTWFrZWZpbGU7IGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaF0pCisrQUNfT1VUUFVUKE1ha2VmaWxlIGxpYi9NYWtlZmlsZSBsaWIvcG9zaXgvTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlIHBvL01ha2VmaWxlLmluIGludGwvTWFrZWZpbGUgZG9jL01ha2VmaWxlIG00L01ha2VmaWxlIHZtcy9NYWtlZmlsZSBib290c3RyYXAvTWFrZWZpbGUsIFtlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWhdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1DVkUtMjAxMi01NjY3LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWQwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLUNWRS0yMDEyLTU2NjcucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVGhlIHBhdGNoIHRvIGZpeCBDVkUtMjAxMi01NjY3CitSZWZlcmVuY2U6IGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD02ODY2MDUmYWN0aW9uPWRpZmYKKworTXVsdGlwbGUgaW50ZWdlciBvdmVyZmxvd3MgaW4gR05VIEdyZXAgYmVmb3JlIDIuMTEgbWlnaHQgYWxsb3cKK2NvbnRleHQtZGVwZW5kZW50IGF0dGFja2VycyB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIHZpYSB2ZWN0b3JzCitpbnZvbHZpbmcgYSBsb25nIGlucHV0IGxpbmUgdGhhdCB0cmlnZ2VycyBhIGhlYXAtYmFzZWQgYnVmZmVyIG92ZXJmbG93LgorCitodHRwOi8vd2ViLm52ZC5uaXN0Lmdvdi92aWV3L3Z1bG4vZGV0YWlsP3Z1bG5JZD1DVkUtMjAxMi01NjY3CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3RoZXJdCitUaGlzIHZlcnNpb24gb2YgR05VIEdyZXAgaGFzIGJlZW4gYWJhbmRvbmVkIHVwc3RyZWFtIGFuZCB0aGV5IGFyZSBubyBsb25nZXIKK2FjY2VwdGluZyBwYXRjaGVzLiAgVGhpcyBpcyBub3QgYSBiYWNrcG9ydC4KKworU2lnbmVkLW9mZi1ieSBNaW5nIExpdSA8bWluZy5saXVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGdyZXAuYyB8ICAgIDcgKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzozOTozMy4zNTkxOTE3NjkgKzA4MDAKKysrKyBhL3NyYy9ncmVwLmMJMjAxMy0wNS0xNSAxMzo1MDoyMi42MDkxOTE4ODIgKzA4MDAKK0BAIC0zMDYsNiArMzA2LDExIEBAIGZpbGxidWYgKHNpemVfdCBzYXZlLCBzdHJ1Y3Qgc3RhdHMgY29uc3QKKyAgIGludCBjYyA9IDE7CisgICBjaGFyICpyZWFkYnVmOworICAgc2l6ZV90IHJlYWRzaXplOworKyAgY29uc3Qgc2l6ZV90IG1heF9zYXZlID0gSU5UX01BWCAvIDI7CisrCisrICAvKiBMaW1pdCB0aGUgYW1vdW50IG9mIHNhdmVkIGRhdGEgdG8gSU5UX01BWCB0byBmaXggQ1ZFLTIwMTItNTY2NyAqLworKyAgaWYgKHNhdmUgPiBtYXhfc2F2ZSkKKysgICAgIGVycm9yICgyLCAwLCBfKCJsaW5lIHRvbyBsb25nIikpOworIAorICAgLyogT2Zmc2V0IGZyb20gc3RhcnQgb2YgYnVmZmVyIHRvIHN0YXJ0IG9mIG9sZCBzdHVmZgorICAgICAgdGhhdCB3ZSB3YW50IHRvIHNhdmUuICAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcC1lZ3JlcC1mZ3JlcC1GaXgtTFNCLU5HLWNhc2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyN2VlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS9ncmVwLWVncmVwLWZncmVwLUZpeC1MU0ItTkctY2FzZXMucGF0Y2gKQEAgLTAsMCArMSwxMzQyIEBACitGcm9tIGM4ODRkZDEyZWMwNjI1NjkzMzU3MDI4NDhmYzVmMjlmNDM2YzI4ZmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBNb24sIDI1IE1heSAyMDE1IDEwOjE1OjU3ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGdyZXAgZWdyZXAgZmdyZXA6IEZpeCBMU0IgTkcgY2FzZXMuCisKK1RoZSBMU0IgY29yZSB0ZXN0IHJlcXVpcmVzIGdyZXAgZWdyZXAgYW5kIGZncmVwIGNhbgorcGVyZm9ybSBwYXR0ZXJuIG1hdGNoaW5nIGluIHNlYXJjaGVzIHdpdGhvdXQgcmVnYXJkCit0byBjYXNlIGlmIC1pIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQuCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKy0tLQorIGxpYi9wb3NpeC9yZWdleC5oIHwgICA0ICsKKyBzcmMvZGZhLmMgICAgICAgICB8ICAyMiArLQorIHNyYy9ncmVwLmMgICAgICAgIHwgIDk2ICsrKystLS0KKyBzcmMvc2VhcmNoLmMgICAgICB8IDgzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyA0IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRpb25zKCspLCAxODcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWIvcG9zaXgvcmVnZXguaCBiL2xpYi9wb3NpeC9yZWdleC5oCitpbmRleCA2M2MyZmVmLi43YmIyYjBlIDEwMDY0NAorLS0tIGEvbGliL3Bvc2l4L3JlZ2V4LmgKKysrKyBiL2xpYi9wb3NpeC9yZWdleC5oCitAQCAtMTA5LDYgKzEwOSwxMCBAQCB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHJlZ19zeW50YXhfdDsKKyAgICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisgI2RlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorIAorKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisrI2RlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKKysKKyAvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICssID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgIElmIG5vdCBzZXQsIHRoZXkgYXJlLiAgKi8KKyAjZGVmaW5lIFJFX0xJTUlURURfT1BTIChSRV9JTlRFUlZBTFMgPDwgMSkKK2RpZmYgLS1naXQgYS9zcmMvZGZhLmMgYi9zcmMvZGZhLmMKK2luZGV4IDU5MGJmYTcuLjI3Yzg3NmEgMTAwNjQ0CistLS0gYS9zcmMvZGZhLmMKKysrKyBiL3NyYy9kZmEuYworQEAgLTQxNCw3ICs0MTQsNyBAQCB1cGRhdGVfbWJfbGVuX2luZGV4ICh1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBpbnQgbGVuKQorIAorIC8qIFRoaXMgZnVuY3Rpb24gZmV0Y2ggYSB3aWRlIGNoYXJhY3RlciwgYW5kIHVwZGF0ZSBjdXJfbWJfbGVuLAorICAgIHVzZWQgb25seSBpZiB0aGUgY3VycmVudCBsb2NhbGUgaXMgYSBtdWx0aWJ5dGUgZW52aXJvbm1lbnQuICAqLworLXN0YXRpYyB3Y2hhcl90Cisrc3RhdGljIHdpbnRfdAorIGZldGNoX3djIChjaGFyIGNvbnN0ICplb2ZlcnIpCisgeworICAgd2NoYXJfdCB3YzsKK0BAIC00MjMsNyArNDIzLDcgQEAgZmV0Y2hfd2MgKGNoYXIgY29uc3QgKmVvZmVycikKKyAgICAgICBpZiAoZW9mZXJyICE9IDApCisgCWRmYWVycm9yIChlb2ZlcnIpOworICAgICAgIGVsc2UKKy0JcmV0dXJuIC0xOworKwlyZXR1cm4gV0VPRjsKKyAgICAgfQorIAorICAgY3VyX21iX2xlbiA9IG1icnRvd2MoJndjLCBsZXhwdHIsIGxleGxlZnQsICZtYnMpOworQEAgLTQ1OSw3ICs0NTksNyBAQCBmZXRjaF93YyAoY2hhciBjb25zdCAqZW9mZXJyKQorIHN0YXRpYyB2b2lkCisgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyB7CistICB3Y2hhcl90IHdjLCB3YzEsIHdjMjsKKysgIHdpbnRfdCB3Yywgd2MxLCB3YzI7CisgCisgICAvKiBXb3JrIGFyZWEgdG8gYnVpbGQgYSBtYl9jaGFyX2NsYXNzZXMuICAqLworICAgc3RydWN0IG1iX2NoYXJfY2xhc3NlcyAqd29ya19tYmM7CitAQCAtNDk2LDcgKzQ5Niw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgICAgIHdvcmtfbWJjLT5pbnZlcnQgPSAwOworICAgZG8KKyAgICAgeworLSAgICAgIHdjMSA9IC0xOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKysgICAgICB3YzEgPSBXRU9GOyAvKiBtYXJrIHdjMSBpcyBub3QgaW5pdGlhbGl6ZWQiLiAgKi8KKyAKKyAgICAgICAvKiBOb3RlIHRoYXQgaWYgd2UncmUgbG9va2luZyBhdCBzb21lIG90aGVyIFs6Li4uOl0gY29uc3RydWN0LAorIAkgd2UganVzdCB0cmVhdCBpdCBhcyBhIGJ1bmNoIG9mIG9yZGluYXJ5IGNoYXJhY3RlcnMuICBXZSBjYW4gZG8KK0BAIC01ODYsNyArNTg2LDcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJCSAgICAgIHdvcmtfbWJjLT5jb2xsX2VsZW1zW3dvcmtfbWJjLT5uY29sbF9lbGVtcysrXSA9IGVsZW07CisgCQkgICAgfQorICAJCX0KKy0JICAgICAgd2MgPSAtMTsKKysJICAgICAgd2MxID0gd2MgPSBXRU9GOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIC8qIFdlIHRyZWF0ICdbJyBhcyBhIG5vcm1hbCBjaGFyYWN0ZXIgaGVyZS4gICovCitAQCAtNjAwLDcgKzYwMCw3IEBAIHBhcnNlX2JyYWNrZXRfZXhwX21iICgpCisgCSAgICB3YyA9IGZldGNoX3djKCgiVW5iYWxhbmNlZCBbIikpOworIAl9CisgCistICAgICAgaWYgKHdjMSA9PSAtMSkKKysgICAgICBpZiAod2MxID09IFdFT0YpCisgCXdjMSA9IGZldGNoX3djKF8oIlVuYmFsYW5jZWQgWyIpKTsKKyAKKyAgICAgICBpZiAod2MxID09IEwnLScpCitAQCAtNjMwLDE3ICs2MzAsMTcgQEAgcGFyc2VfYnJhY2tldF9leHBfbWIgKCkKKyAJICAgIH0KKyAJICBSRUFMTE9DX0lGX05FQ0VTU0FSWSh3b3JrX21iYy0+cmFuZ2Vfc3RzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9zdHNfYWwsIHdvcmtfbWJjLT5ucmFuZ2VzICsgMSk7CistCSAgd29ya19tYmMtPnJhbmdlX3N0c1t3b3JrX21iYy0+bnJhbmdlc10gPSB3YzsKKysJICB3b3JrX21iYy0+cmFuZ2Vfc3RzW3dvcmtfbWJjLT5ucmFuZ2VzXSA9ICh3Y2hhcl90KXdjOworIAkgIFJFQUxMT0NfSUZfTkVDRVNTQVJZKHdvcmtfbWJjLT5yYW5nZV9lbmRzLCB3Y2hhcl90LAorIAkJCSAgICAgICByYW5nZV9lbmRzX2FsLCB3b3JrX21iYy0+bnJhbmdlcyArIDEpOworLQkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gd2MyOworKwkgIHdvcmtfbWJjLT5yYW5nZV9lbmRzW3dvcmtfbWJjLT5ucmFuZ2VzKytdID0gKHdjaGFyX3Qpd2MyOworIAl9CistICAgICAgZWxzZSBpZiAod2MgIT0gLTEpCisrICAgICAgZWxzZSBpZiAod2MgIT0gV0VPRikKKyAJLyogYnVpbGQgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworIAl7CisgCSAgUkVBTExPQ19JRl9ORUNFU1NBUlkod29ya19tYmMtPmNoYXJzLCB3Y2hhcl90LCBjaGFyc19hbCwKKyAJCQkgICAgICAgd29ya19tYmMtPm5jaGFycyArIDEpOworLQkgIHdvcmtfbWJjLT5jaGFyc1t3b3JrX21iYy0+bmNoYXJzKytdID0gd2M7CisrCSAgd29ya19tYmMtPmNoYXJzW3dvcmtfbWJjLT5uY2hhcnMrK10gPSAod2NoYXJfdCl3YzsKKyAJfQorICAgICB9CisgICB3aGlsZSAoKHdjID0gd2MxKSAhPSBMJ10nKTsKK0BAIC0yNTUyLDYgKzI1NTIsOCBAQCBtYXRjaF9tYl9jaGFyc2V0IChzdHJ1Y3QgZGZhICpkLCBpbnQgcywgcG9zaXRpb24gcG9zLCBpbnQgaW5kZXgpCisgICAgIH0KKyAKKyAgIC8qIG1hdGNoIHdpdGggYSBjaGFyYWN0ZXI/ICAqLworKyAgaWYgKGNhc2VfZm9sZCkKKysgICAgd2MgPSB0b3dsb3dlciAod2MpOworICAgZm9yIChpID0gMDsgaTx3b3JrX21iYy0+bmNoYXJzOyBpKyspCisgICAgIHsKKyAgICAgICBpZiAod2MgPT0gd29ya19tYmMtPmNoYXJzW2ldKQorZGlmZiAtLWdpdCBhL3NyYy9ncmVwLmMgYi9zcmMvZ3JlcC5jCitpbmRleCAyZmIyZmFjLi4zZmQ0YjQ3IDEwMDY0NAorLS0tIGEvc3JjL2dyZXAuYworKysrIGIvc3JjL2dyZXAuYworQEAgLTMwLDYgKzMwLDEyIEBACisgIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorICMgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgI2VuZGlmCisrI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworKy8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCisrIyBkZWZpbmUgTUJTX1NVUFBPUlQKKysjIGluY2x1ZGUgPHdjaGFyLmg+CisrIyBpbmNsdWRlIDx3Y3R5cGUuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAic3lzdGVtLmgiCisgI2luY2x1ZGUgImdldG9wdC5oIgorQEAgLTI1NSwxOSArMjYxLDYgQEAgcmVzZXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZSwgc3RydWN0IHN0YXRzICpzdGF0cykKKyAgIGJ1ZmJlZ1stMV0gPSBlb2xieXRlOworICAgYnVmZGVzYyA9IGZkOworIAorLSAgaWYgKGZzdGF0IChmZCwgJnN0YXRzLT5zdGF0KSAhPSAwKQorLSAgICB7CistICAgICAgZXJyb3IgKDAsIGVycm5vLCAiZnN0YXQiKTsKKy0gICAgICByZXR1cm4gMDsKKy0gICAgfQorLSAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCistICAgIHJldHVybiAwOworLSNpZm5kZWYgREpHUFAKKy0gIGlmIChkZXZpY2VzID09IFNLSVBfREVWSUNFUyAmJiAoU19JU0NIUihzdGF0cy0+c3RhdC5zdF9tb2RlKSB8fCBTX0lTQkxLKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0YXRzLT5zdGF0LnN0X21vZGUpKSkKKy0jZWxzZQorLSAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorLSNlbmRpZgorLSAgICByZXR1cm4gMDsKKyAgIGlmIChTX0lTUkVHIChzdGF0cy0+c3RhdC5zdF9tb2RlKSkKKyAgICAgeworICAgICAgIGlmIChmaWxlKQorQEAgLTU1OCwzMyArNTUxLDYgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAgICAgeworICAgICAgIHNpemVfdCBtYXRjaF9zaXplOworICAgICAgIHNpemVfdCBtYXRjaF9vZmZzZXQ7CistICAgICAgaWYobWF0Y2hfaWNhc2UpCistICAgICAgICB7CistCSAgLyogWXVjaywgdGhpcyBpcyB0cmlja3kgKi8KKy0gICAgICAgICAgY2hhciAqYnVmID0gKGNoYXIqKSB4bWFsbG9jIChsaW0gLSBiZWcpOworLQkgIGNoYXIgKmliZWcgPSBidWY7CistCSAgY2hhciAqaWxpbSA9IGliZWcgKyAobGltIC0gYmVnKTsKKy0JICBpbnQgaTsKKy0JICBmb3IgKGkgPSAwOyBpIDwgbGltIC0gYmVnOyBpKyspCistCSAgICBpYmVnW2ldID0gdG9sb3dlciAoYmVnW2ldKTsKKy0JICB3aGlsZSAoKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGliZWcsIGlsaW0taWJlZywgJm1hdGNoX3NpemUsIDEpKQorLQkJICE9IChzaXplX3QpIC0xKQorLQkgICAgeworLQkgICAgICBjaGFyIGNvbnN0ICpiID0gYmVnICsgbWF0Y2hfb2Zmc2V0OworLQkgICAgICBpZiAoYiA9PSBsaW0pCistCQlicmVhazsKKy0JICAgICAgZndyaXRlIChiZWcsIHNpemVvZiAoY2hhciksIG1hdGNoX29mZnNldCwgc3Rkb3V0KTsKKy0JICAgICAgcHJpbnRmICgiXDMzWyVzbSIsIGdyZXBfY29sb3IpOworLQkgICAgICBmd3JpdGUgKGIsIHNpemVvZiAoY2hhciksIG1hdGNoX3NpemUsIHN0ZG91dCk7CistCSAgICAgIGZwdXRzICgiXDMzWzAwbSIsIHN0ZG91dCk7CistCSAgICAgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworLQkgICAgICBpYmVnID0gaWJlZyArIG1hdGNoX29mZnNldCArIG1hdGNoX3NpemU7CistCSAgICB9CistCSAgZndyaXRlIChiZWcsIDEsIGxpbSAtIGJlZywgc3Rkb3V0KTsKKy0JICBmcmVlIChidWYpOworLQkgIGxhc3RvdXQgPSBsaW07CistCSAgcmV0dXJuOworLQl9CisgICAgICAgd2hpbGUgKGxpbS1iZWcgJiYgKG1hdGNoX29mZnNldCA9ICgqZXhlY3V0ZSkgKGJlZywgbGltIC0gYmVnLCAmbWF0Y2hfc2l6ZSwgMSkpCisgCSAgICAgIT0gKHNpemVfdCkgLTEpCisgCXsKK0BAIC02MDEsNiArNTY3LDcgQEAgcHJsaW5lIChjaGFyIGNvbnN0ICpiZWcsIGNoYXIgY29uc3QgKmxpbSwgaW50IHNlcCkKKyAJICBmcHV0cyAoIlwzM1swMG0iLCBzdGRvdXQpOworIAkgIGJlZyA9IGIgKyBtYXRjaF9zaXplOworIAl9CisrICAgICAgZnB1dHMgKCJcMzNbSyIsIHN0ZG91dCk7CisgICAgIH0KKyAgIGZ3cml0ZSAoYmVnLCAxLCBsaW0gLSBiZWcsIHN0ZG91dCk7CisgICBpZiAoZmVycm9yIChzdGRvdXQpKQorQEAgLTYyMyw3ICs1OTAsNyBAQCBwcnBlbmRpbmcgKGNoYXIgY29uc3QgKmxpbSkKKyAgICAgICBzaXplX3QgbWF0Y2hfc2l6ZTsKKyAgICAgICAtLXBlbmRpbmc7CisgICAgICAgaWYgKG91dGxlZnQKKy0JICB8fCAoKCgqZXhlY3V0ZSkgKGxhc3RvdXQsIG5sIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorKwkgIHx8ICgoKCpleGVjdXRlKSAobGFzdG91dCwgbmwgKyAxIC0gbGFzdG91dCwgJm1hdGNoX3NpemUsIDApID09IChzaXplX3QpIC0xKQorIAkgICAgICA9PSAhb3V0X2ludmVydCkpCisgCXBybGluZSAobGFzdG91dCwgbmwgKyAxLCAnLScpOworICAgICAgIGVsc2UKK0BAIC04OTUsNiArODYyLDE5IEBAIGdyZXBmaWxlIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3Qgc3RhdHMgKnN0YXRzKQorICAgICB9CisgICBlbHNlCisgICAgIHsKKysgICAgICBpZiAoc3RhdCAoZmlsZSwgJnN0YXRzLT5zdGF0KSAhPSAwKQorKyAgICAgICAgeworKyAgICAgICAgICBzdXBwcmVzc2libGVfZXJyb3IgKGZpbGUsIGVycm5vKTsKKysgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICB9CisrICAgICAgaWYgKGRpcmVjdG9yaWVzID09IFNLSVBfRElSRUNUT1JJRVMgJiYgU19JU0RJUiAoc3RhdHMtPnN0YXQuc3RfbW9kZSkpCisrICAgICAgICByZXR1cm4gMTsKKysjaWZuZGVmIERKR1BQCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU1NPQ0soc3RhdHMtPnN0YXQuc3RfbW9kZSkgfHwgU19JU0ZJRk8oc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbHNlCisrICAgICAgaWYgKGRldmljZXMgPT0gU0tJUF9ERVZJQ0VTICYmIChTX0lTQ0hSKHN0YXRzLT5zdGF0LnN0X21vZGUpIHx8IFNfSVNCTEsoc3RhdHMtPnN0YXQuc3RfbW9kZSkpKQorKyNlbmRpZgorKyAgICAgICAgcmV0dXJuIDE7CisgICAgICAgd2hpbGUgKChkZXNjID0gb3BlbiAoZmlsZSwgT19SRE9OTFkpKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpCisgCWNvbnRpbnVlOworIAorQEAgLTE2ODEsOSArMTY2MSw2IEBAIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLlxuIikpCisgCSAgb3V0X2ludmVydCBePSAxOworIAkgIG1hdGNoX2xpbmVzID0gbWF0Y2hfd29yZHMgPSAwOworIAl9CistICAgICAgZWxzZQorLQkvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworLSAgICAgICAgLS1rZXljYzsKKyAgICAgfQorICAgZWxzZQorICAgICBpZiAob3B0aW5kIDwgYXJnYykKK0BAIC0xNjk3LDYgKzE2NzQsMzcgQEAgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuXG4iKSkKKyAgIGlmICghaW5zdGFsbF9tYXRjaGVyIChtYXRjaGVyKSAmJiAhaW5zdGFsbF9tYXRjaGVyICgiZGVmYXVsdCIpKQorICAgICBhYm9ydCAoKTsKKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysgIGlmIChNQl9DVVJfTUFYICE9IDEgJiYgbWF0Y2hfaWNhc2UpCisrICAgIHsKKysgICAgICB3Y2hhcl90IHdjOworKyAgICAgIG1ic3RhdGVfdCBjdXJfc3RhdGUsIHByZXZfc3RhdGU7CisrICAgICAgaW50IGksIGxlbiA9IHN0cmxlbihrZXlzKTsKKysKKysgICAgICBtZW1zZXQoJmN1cl9zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworKyAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuIDspCisrCXsKKysJICBzaXplX3QgbWJjbGVuOworKwkgIG1iY2xlbiA9IG1icnRvd2MoJndjLCBrZXlzICsgaSwgbGVuIC0gaSwgJmN1cl9zdGF0ZSk7CisrCSAgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gKHNpemVfdCkgLTIgfHwgbWJjbGVuID09IDApCisrCSAgICB7CisrCSAgICAgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisrCQkgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCisrCSAgICAgIG1iY2xlbiA9IDE7CisrCSAgICB9CisrCSAgZWxzZQorKwkgICAgeworKwkgICAgICBpZiAoaXN3dXBwZXIoKHdpbnRfdCl3YykpCisrCQl7CisrCQkgIHdjID0gdG93bG93ZXIoKHdpbnRfdCl3Yyk7CisrCQkgIHdjcnRvbWIoa2V5cyArIGksIHdjLCAmY3VyX3N0YXRlKTsKKysJCX0KKysJICAgIH0KKysJICBpICs9IG1iY2xlbjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisgICAoKmNvbXBpbGUpKGtleXMsIGtleWNjKTsKKyAKKyAgIGlmICgoYXJnYyAtIG9wdGluZCA+IDEgJiYgIW5vX2ZpbGVuYW1lcykgfHwgd2l0aF9maWxlbmFtZXMpCitkaWZmIC0tZ2l0IGEvc3JjL3NlYXJjaC5jIGIvc3JjL3NlYXJjaC5jCitpbmRleCA3YmQyMzNmLi4zYzZhNDg1IDEwMDY0NAorLS0tIGEvc3JjL3NlYXJjaC5jCisrKysgYi9zcmMvc2VhcmNoLmMKK0BAIC0xOCw5ICsxOCwxMyBAQAorIAorIC8qIFdyaXR0ZW4gQXVndXN0IDE5OTIgYnkgTWlrZSBIYWVydGVsLiAqLworIAorKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKysjIGRlZmluZSBfR05VX1NPVVJDRSAxCisrI2VuZGlmCisgI2lmZGVmIEhBVkVfQ09ORklHX0gKKyAjIGluY2x1ZGUgPGNvbmZpZy5oPgorICNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCAmJiBkZWZpbmVkIEhBVkVfV0NIQVJfSCAmJiBkZWZpbmVkIEhBVkVfTUJSVE9XQworIC8qIFdlIGNhbiBoYW5kbGUgbXVsdGlieXRlIHN0cmluZy4gICovCitAQCAtMzEsNyArMzUsNyBAQAorIAorICNpbmNsdWRlICJzeXN0ZW0uaCIKKyAjaW5jbHVkZSAiZ3JlcC5oIgorLSNpbmNsdWRlICJyZWdleC5oIgorKyNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlICJkZmEuaCIKKyAjaW5jbHVkZSAia3dzZXQuaCIKKyAjaW5jbHVkZSAiZXJyb3IuaCIKK0BAIC0zOSw2ICs0Myw5IEBACisgI2lmZGVmIEhBVkVfTElCUENSRQorICMgaW5jbHVkZSA8cGNyZS5oPgorICNlbmRpZgorKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysjIGluY2x1ZGUgPGxhbmdpbmZvLmg+CisrI2VuZGlmCisgCisgI2RlZmluZSBOQ0hBUiAoVUNIQVJfTUFYICsgMSkKKyAKK0BAIC03MCw5ICs3NywxMCBAQCBzdGF0aWMga3dzZXRfdCBrd3NldDsKKyAgICBjYWxsIHRoZSByZWdleHAgbWF0Y2hlciBhdCBhbGwuICovCisgc3RhdGljIGludCBrd3NldF9leGFjdF9tYXRjaGVzOworIAorLSNpZiBkZWZpbmVkKE1CU19TVVBQT1JUKQorLXN0YXRpYyBjaGFyKiBjaGVja19tdWx0aWJ5dGVfc3RyaW5nIFBBUkFNUyAoKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpKTsKKy0jZW5kaWYKKysvKiBVVEYtOCBlbmNvZGluZyBhbGxvd3Mgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgd2UgY2FuJ3Qgb3RoZXJ3aXNlCisrICAgYXNzdW1lIGluIGEgbXVsdGlieXRlIGVuY29kaW5nLiAqLworK3N0YXRpYyBpbnQgdXNpbmdfdXRmODsKKysKKyBzdGF0aWMgdm9pZCBrd3Npbml0IFBBUkFNUyAoKHZvaWQpKTsKKyBzdGF0aWMgdm9pZCBrd3NtdXN0cyBQQVJBTVMgKCh2b2lkKSk7Cisgc3RhdGljIHZvaWQgR2NvbXBpbGUgUEFSQU1TICgoY2hhciBjb25zdCAqLCBzaXplX3QpKTsKK0BAIC04NCw2ICs5MiwxNSBAQCBzdGF0aWMgdm9pZCBQY29tcGlsZSBQQVJBTVMgKChjaGFyIGNvbnN0ICosIHNpemVfdCApKTsKKyBzdGF0aWMgc2l6ZV90IFBleGVjdXRlIFBBUkFNUyAoKGNoYXIgY29uc3QgKiwgc2l6ZV90LCBzaXplX3QgKiwgaW50KSk7CisgCisgdm9pZAorK2NoZWNrX3V0ZjggKHZvaWQpCisreworKyNpZmRlZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQKKysgIGlmIChzdHJjbXAgKG5sX2xhbmdpbmZvIChDT0RFU0VUKSwgIlVURi04IikgPT0gMCkKKysgICAgdXNpbmdfdXRmOCA9IDE7CisrI2VuZGlmCisrfQorKworK3ZvaWQKKyBkZmFlcnJvciAoY2hhciBjb25zdCAqbWVzZykKKyB7CisgICBlcnJvciAoMiwgMCwgbWVzZyk7CitAQCAtMTQxLDM4ICsxNTgsNiBAQCBrd3NtdXN0cyAodm9pZCkKKyAgICAgfQorIH0KKyAKKy0jaWZkZWYgTUJTX1NVUFBPUlQKKy0vKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBhcnJheSB3aGljaCBjb3JyZXNwb25kIHRvICJidWYiLgorLSAgIFRoZW4gdGhpcyBjaGVjayBtdWx0aWJ5dGUgc3RyaW5nIGFuZCBtYXJrIG9uIHRoZSBwb3NpdGlvbnMgd2hpY2gKKy0gICBhcmUgbm90IHNpbmdsZWJ5dGUgY2hhcmFjdGVyIG5vciB0aGUgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZQorLSAgIGNoYXJhY3Rlci4gIENhbGxlciBtdXN0IGZyZWUgdGhlIGFycmF5LiAgKi8KKy1zdGF0aWMgY2hhcioKKy1jaGVja19tdWx0aWJ5dGVfc3RyaW5nKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUpCisteworLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IG1hbGxvYyhzaXplKTsKKy0gIG1ic3RhdGVfdCBjdXJfc3RhdGU7CistICBpbnQgaTsKKy0gIG1lbXNldCgmY3VyX3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CistICBtZW1zZXQobWJfcHJvcGVydGllcywgMCwgc2l6ZW9mKGNoYXIpKnNpemUpOworLSAgZm9yIChpID0gMDsgaSA8IHNpemUgOykKKy0gICAgeworLSAgICAgIHNpemVfdCBtYmNsZW47CistICAgICAgbWJjbGVuID0gbWJybGVuKGJ1ZiArIGksIHNpemUgLSBpLCAmY3VyX3N0YXRlKTsKKy0KKy0gICAgICBpZiAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAoc2l6ZV90KSAtMiB8fCBtYmNsZW4gPT0gMCkKKy0JeworLQkgIC8qIEFuIGludmFsaWQgc2VxdWVuY2UsIG9yIGEgdHJ1bmNhdGVkIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCistCSAgICAgV2UgdHJlYXQgaXQgYXMgYSBzaW5nbGVieXRlIGNoYXJhY3Rlci4gICovCistCSAgbWJjbGVuID0gMTsKKy0JfQorLSAgICAgIG1iX3Byb3BlcnRpZXNbaV0gPSBtYmNsZW47CistICAgICAgaSArPSBtYmNsZW47CistICAgIH0KKy0KKy0gIHJldHVybiBtYl9wcm9wZXJ0aWVzOworLX0KKy0jZW5kaWYKKy0KKyBzdGF0aWMgdm9pZAorIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CitAQCAtMTgxLDcgKzE2Niw4IEBAIEdjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCistICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSk7CisrICBjaGVja191dGY4ICgpOworKyAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgfCAobWF0Y2hfaWNhc2UgPyBSRV9JQ0FTRSA6IDApKTsKKyAgIGRmYXN5bnRheCAoUkVfU1lOVEFYX0dSRVAgfCBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAKKyAgIC8qIEZvciBHTlUgcmVnZXggY29tcGlsZXIgd2UgaGF2ZSB0byBwYXNzIHRoZSBwYXR0ZXJucyBzZXBhcmF0ZWx5IHRvIGRldGVjdAorQEAgLTIxOCw2ICsyMDQsMTAgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0yMzMsNyArMjIzLDcgQEAgR2NvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiXFwpJCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9iZWdbXSA9ICJcXCheXFx8W15bOmFsbnVtOl1fXVxcKVxcKCI7CisgICAgICAgc3RhdGljIGNoYXIgY29uc3Qgd29yZF9lbmRbXSA9ICJcXClcXChbXls6YWxudW06XV9dXFx8JFxcKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4gKG4pOworQEAgLTI1NywxNCArMjQ3LDE1IEBAIEVjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyAgIHNpemVfdCB0b3RhbCA9IHNpemU7CisgICBjaGFyIGNvbnN0ICptb3RpZiA9IHBhdHRlcm47CisgCisrICBjaGVja191dGY4ICgpOworICAgaWYgKHN0cmNtcCAobWF0Y2hlciwgImF3ayIpID09IDApCisgICAgIHsKKy0gICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLKTsKKysgICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfQVdLIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfQVdLLCBtYXRjaF9pY2FzZSwgZW9sYnl0ZSk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9QT1NJWF9FR1JFUCk7CisrICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0VHUkVQIHwgKG1hdGNoX2ljYXNlID8gUkVfSUNBU0UgOiAwKSk7CisgICAgICAgZGZhc3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAsIG1hdGNoX2ljYXNlLCBlb2xieXRlKTsKKyAgICAgfQorIAorQEAgLTMwMSw2ICsyOTIsMTAgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIG1vdGlmID0gc2VwOworICAgICB9IHdoaWxlIChzZXAgJiYgdG90YWwgIT0gMCk7CisgCisrICAvKiBTdHJpcCB0cmFpbGluZyBuZXdsaW5lLiAqLworKyAgaWYgKHNpemUgJiYgcGF0dGVybltzaXplIC0gMV0gPT0gJ1xuJykKKysgICAgc2l6ZS0tOworKworICAgLyogSW4gdGhlIG1hdGNoX3dvcmRzIGFuZCBtYXRjaF9saW5lcyBjYXNlcywgd2UgdXNlIGEgZGlmZmVyZW50IHBhdHRlcm4KKyAgICAgIGZvciB0aGUgREZBIG1hdGNoZXIgdGhhdCB3aWxsIHF1aWNrbHkgdGhyb3cgb3V0IGNhc2VzIHRoYXQgd29uJ3Qgd29yay4KKyAgICAgIFRoZW4gaWYgREZBIHN1Y2NlZWRzIHdlIGRvIHNvbWUgaGFpcnkgc3R1ZmYgdXNpbmcgdGhlIHJlZ2V4IG1hdGNoZXIKK0BAIC0zMTYsNyArMzExLDcgQEAgRWNvbXBpbGUgKGNoYXIgY29uc3QgKnBhdHRlcm4sIHNpemVfdCBzaXplKQorICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGxpbmVfZW5kW10gPSAiKSQiOworICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHdvcmRfYmVnW10gPSAiKF58W15bOmFsbnVtOl1fXSkoIjsKKyAgICAgICBzdGF0aWMgY2hhciBjb25zdCB3b3JkX2VuZFtdID0gIikoW15bOmFsbnVtOl1fXXwkKSI7CistICAgICAgY2hhciAqbiA9IG1hbGxvYyAoc2l6ZW9mIHdvcmRfYmVnIC0gMSArIHNpemUgKyBzaXplb2Ygd29yZF9lbmQpOworKyAgICAgIGNoYXIgKm4gPSB4bWFsbG9jIChzaXplb2Ygd29yZF9iZWcgLSAxICsgc2l6ZSArIHNpemVvZiB3b3JkX2VuZCk7CisgICAgICAgc2l6ZV90IGk7CisgICAgICAgc3RyY3B5IChuLCBtYXRjaF9saW5lcyA/IGxpbmVfYmVnIDogd29yZF9iZWcpOworICAgICAgIGkgPSBzdHJsZW4obik7CitAQCAtMzM5LDE1ICszMzQsMzQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgIGludCBiYWNrcmVmLCBzdGFydCwgbGVuOworICAgc3RydWN0IGt3c21hdGNoIGt3c207CistICBzaXplX3QgaTsKKysgIHNpemVfdCBpLCByZXRfdmFsOworKyAgc3RhdGljIGludCB1c2VfZGZhOworKyAgc3RhdGljIGludCB1c2VfZGZhX2NoZWNrZWQgPSAwOworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgY2hhciAqbWJfcHJvcGVydGllcyA9IE5VTEw7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisrICBtYnN0YXRlX3QgbWJzOworKyAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorKyAgaWYgKCF1c2VfZGZhX2NoZWNrZWQpCisrICAgIHsKKysgICAgICBjaGFyICpncmVwX3VzZV9kZmEgPSBnZXRlbnYgKCJHUkVQX1VTRV9ERkEiKTsKKysgICAgICBpZiAoIWdyZXBfdXNlX2RmYSkKKysJeworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIGt3c2V0KQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyhidWYsIHNpemUpOworKwkgIC8qIFR1cm4gb2ZmIERGQSB3aGVuIHByb2Nlc3NpbmcgbXVsdGlieXRlIGlucHV0LiAqLworKwkgIHVzZV9kZmEgPSAoTUJfQ1VSX01BWCA9PSAxKTsKKysjZWxzZQorKwkgIHVzZV9kZmEgPSAxOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgdXNlX2RmYSA9IGF0b2kgKGdyZXBfdXNlX2RmYSk7CisrCX0KKysKKysgICAgICB1c2VfZGZhX2NoZWNrZWQgPSAxOworKyAgICB9CisgCisgICBidWZsaW0gPSBidWYgKyBzaXplOworIAorQEAgLTM1OCw0NyArMzcyLDEyMCBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkgIGlmIChrd3NldCkKKyAJICAgIHsKKyAJICAgICAgLyogRmluZCBhIHBvc3NpYmxlIG1hdGNoIHVzaW5nIHRoZSBLV3NldCBtYXRjaGVyLiAqLworLQkgICAgICBzaXplX3Qgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmbGltIC0gYmVnLCAma3dzbSk7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldDsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgLyoga3dzZXhlYyBkb2Vzbid0IHdvcmsgd2l0aCBtYXRjaF9pY2FzZSBhbmQgbXVsdGlieXRlIGlucHV0LiAqLworKwkgICAgICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrCQkvKiBBdm9pZCBrd3NldCAqLworKwkJb2Zmc2V0ID0gMDsKKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkgICAgICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWZsaW0gLSBiZWcsICZrd3NtKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKy0JCXsKKysJICAgICAgICBnb3RvIGZhaWx1cmU7CisgI2lmZGVmIE1CU19TVVBQT1JUCistCQkgIGlmIChNQl9DVVJfTUFYID4gMSkKKy0JCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZgorLQkJICByZXR1cm4gKHNpemVfdCktMTsKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKyAJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSBjb250YWluaW5nIHRoZSBjYW5kaWRhdGUsIGFuZAorIAkJIHJ1biBpdCB0aHJvdWdoIERGQS4gKi8KKyAJICAgICAgZW5kID0gbWVtY2hyKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbYmVnIC0gYnVmXSA9PSAwKQorKwkgICAgICBpZiAobWJfY3VyX21heCA+IDEgJiYgYnl0ZXNfbGVmdCkKKyAJCWNvbnRpbnVlOworLSNlbmRpZgorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICB3aGlsZSAoYmVnID4gYnVmICYmIGJlZ1stMV0gIT0gZW9sKQorIAkJLS1iZWc7CistCSAgICAgIGlmIChrd3NtLmluZGV4IDwga3dzZXRfZXhhY3RfbWF0Y2hlcykKKy0JCWdvdG8gc3VjY2VzczsKKy0JICAgICAgaWYgKGRmYWV4ZWMgKCZkZmEsIGJlZywgZW5kIC0gYmVnLCAmYmFja3JlZikgPT0gKHNpemVfdCkgLTEpCisrCSAgICAgIGlmICgKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJCSAgIShtYXRjaF9pY2FzZSAmJiBtYl9jdXJfbWF4ID4gMSkgJiYKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCSAgKGt3c20uaW5kZXggPCBrd3NldF9leGFjdF9tYXRjaGVzKSkKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKysJICAgICAgaWYgKHVzZV9kZmEgJiYKKysJCSAgZGZhZXhlYyAoJmRmYSwgYmVnLCBlbmQgLSBiZWcsICZiYWNrcmVmKSA9PSAoc2l6ZV90KSAtMSkKKyAJCWNvbnRpbnVlOworIAkgICAgfQorIAkgIGVsc2UKKyAJICAgIHsKKyAJICAgICAgLyogTm8gZ29vZCBmaXhlZCBzdHJpbmdzOyBzdGFydCB3aXRoIERGQS4gKi8KKy0JICAgICAgc2l6ZV90IG9mZnNldCA9IGRmYWV4ZWMgKCZkZmEsIGJlZywgYnVmbGltIC0gYmVnLCAmYmFja3JlZik7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCSAgICAgIHNpemVfdCBieXRlc19sZWZ0ID0gMDsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisrCSAgICAgIGlmICh1c2VfZGZhKQorKwkJb2Zmc2V0ID0gZGZhZXhlYyAoJmRmYSwgYmVnLCBidWZsaW0gLSBiZWcsICZiYWNrcmVmKTsKKyAJICAgICAgaWYgKG9mZnNldCA9PSAoc2l6ZV90KSAtMSkKKyAJCWJyZWFrOworIAkgICAgICAvKiBOYXJyb3cgZG93biB0byB0aGUgbGluZSB3ZSd2ZSBmb3VuZC4gKi8KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwkJeworKwkJICBieXRlc19sZWZ0ID0gb2Zmc2V0OworKwkJICB3aGlsZSAoYnl0ZXNfbGVmdCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgbWxlbiA9IG1icmxlbiAoYmVnLCBieXRlc19sZWZ0LCAmbWJzKTsKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCQl7CisrCQkJICAvKiBJbmNvbXBsZXRlIGNoYXJhY3RlcjogdHJlYXQgYXMgc2luZ2xlLWJ5dGUuICovCisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBiZWcrKzsKKysJCQkgIGJ5dGVzX2xlZnQtLTsKKysJCQkgIGNvbnRpbnVlOworKwkJCX0KKysKKysJCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6CisrCQkJICogbm8gZ29vZC4gKi8KKysJCQlicmVhazsKKysKKysJCSAgICAgIGJlZyArPSBtbGVuOworKwkJICAgICAgYnl0ZXNfbGVmdCAtPSBtbGVuOworKwkJICAgIH0KKysJCX0KKysJICAgICAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAkgICAgICBiZWcgKz0gb2Zmc2V0OworIAkgICAgICBlbmQgPSBtZW1jaHIgKGJlZywgZW9sLCBidWZsaW0gLSBiZWcpOworIAkgICAgICBlbmQrKzsKKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmIGJ5dGVzX2xlZnQpCisrCQljb250aW51ZTsKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKyAJICAgICAgd2hpbGUgKGJlZyA+IGJ1ZiAmJiBiZWdbLTFdICE9IGVvbCkKKyAJCS0tYmVnOworIAkgICAgfQorIAkgIC8qIFN1Y2Nlc3NmdWwsIG5vIGJhY2tyZWZlcmVuY2VzIGVuY291bnRlcmVkISAqLworLQkgIGlmICghYmFja3JlZikKKy0JICAgIGdvdG8gc3VjY2VzczsKKysJICBpZiAodXNlX2RmYSAmJiAhYmFja3JlZikKKysJICAgIGdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJfQorICAgICAgIGVsc2UKKyAJZW5kID0gYmVnICsgc2l6ZTsKK0BAIC00MTMsMTQgKzUwMCwxMSBAQCBFR2V4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorIAkJCQkgICAgICAgZW5kIC0gYmVnIC0gMSwgJihwYXR0ZXJuc1tpXS5yZWdzKSkpKQorIAkgICAgeworIAkgICAgICBsZW4gPSBwYXR0ZXJuc1tpXS5yZWdzLmVuZFswXSAtIHN0YXJ0OworLQkgICAgICBpZiAoZXhhY3QpCistCQl7CistCQkgICptYXRjaF9zaXplID0gbGVuOworLQkJICByZXR1cm4gc3RhcnQ7CistCQl9CisrCSAgICAgIGlmIChleGFjdCAmJiAhbWF0Y2hfd29yZHMpCisrCSAgICAgICAgZ290byBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW47CisgCSAgICAgIGlmICgoIW1hdGNoX2xpbmVzICYmICFtYXRjaF93b3JkcykKKyAJCSAgfHwgKG1hdGNoX2xpbmVzICYmIGxlbiA9PSBlbmQgLSBiZWcgLSAxKSkKKy0JCWdvdG8gc3VjY2VzczsKKysJCWdvdG8gc3VjY2Vzc19pbl9iZWdfYW5kX2VuZDsKKyAJICAgICAgLyogSWYgLXcsIGNoZWNrIGlmIHRoZSBtYXRjaCBhbGlnbnMgd2l0aCB3b3JkIGJvdW5kYXJpZXMuCisgCQkgV2UgZG8gdGhpcyBpdGVyYXRpdmVseSBiZWNhdXNlOgorIAkJIChhKSB0aGUgbGluZSBtYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIG9jY3VyZW5jZSBvZiB0aGUKK0BAIC00MzEsMTAgKzUxNSwxMTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgICAgaWYgKG1hdGNoX3dvcmRzKQorIAkJd2hpbGUgKHN0YXJ0ID49IDApCisgCQkgIHsKKy0JCSAgICBpZiAoKHN0YXJ0ID09IDAgfHwgIVdDSEFSICgodW5zaWduZWQgY2hhcikgYmVnW3N0YXJ0IC0gMV0pKQorLQkJCSYmIChsZW4gPT0gZW5kIC0gYmVnIC0gMQorLQkJCSAgICB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkpCistCQkgICAgICBnb3RvIHN1Y2Nlc3M7CisrCQkgICAgaW50IGx3b3JkX21hdGNoID0gMDsKKysJCSAgICBpZiAoc3RhcnQgPT0gMCkKKysJCSAgICAgIGx3b3JkX21hdGNoID0gMTsKKysJCSAgICBlbHNlCisrCQkgICAgICB7CisrCQkJYXNzZXJ0IChzdGFydCA+IDApOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCWlmIChtYl9jdXJfbWF4ID4gMSkKKysJCQkgIHsKKysJCQkgICAgY29uc3QgY2hhciAqczsKKysJCQkgICAgc2l6ZV90IG1yOworKwkJCSAgICB3Y2hhcl90IHB3YzsKKysKKysJCQkgICAgLyogTG9jYXRlIHRoZSBzdGFydCBvZiB0aGUgbXVsdGlieXRlIGNoYXJhY3RlcgorKwkJCSAgICAgICBiZWZvcmUgdGhlIG1hdGNoIHBvc2l0aW9uICg9PSBiZWcgKyBzdGFydCkuICovCisrCQkJICAgIGlmICh1c2luZ191dGY4KQorKwkJCSAgICAgIHsKKysJCQkJLyogVVRGLTggaXMgYSBzcGVjaWFsIGNhc2U6IHNjYW4gYmFja3dhcmRzCisrCQkJCSAgIHVudGlsIHdlIGZpbmQgYSA3LWJpdCBjaGFyYWN0ZXIgb3IgYQorKwkJCQkgICBsZWFkIGJ5dGUuICovCisrCQkJCXMgPSBiZWcgKyBzdGFydCAtIDE7CisrCQkJCXdoaWxlIChzID4gYnVmCisrCQkJCSAgICAgICAmJiAodW5zaWduZWQgY2hhcikgKnMgPj0gMHg4MAorKwkJCQkgICAgICAgJiYgKHVuc2lnbmVkIGNoYXIpICpzIDw9IDB4YmYpCisrCQkJCSAgLS1zOworKwkJCSAgICAgIH0KKysJCQkgICAgZWxzZQorKwkJCSAgICAgIHsKKysJCQkJLyogU2NhbiBmb3J3YXJkcyB0byBmaW5kIHRoZSBzdGFydCBvZiB0aGUKKysJCQkJICAgbGFzdCBjb21wbGV0ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZQorKwkJCQkgICBtYXRjaCBwb3NpdGlvbi4gICovCisrCQkJCXNpemVfdCBieXRlc19sZWZ0ID0gc3RhcnQgLSAxOworKwkJCQlzID0gYmVnOworKwkJCQl3aGlsZSAoYnl0ZXNfbGVmdCA+IDApCisrCQkJCSAgeworKwkJCQkgICAgbXIgPSBtYnJsZW4gKHMsIGJ5dGVzX2xlZnQsICZtYnMpOworKwkJCQkgICAgaWYgKG1yID09IChzaXplX3QpIC0xIHx8IG1yID09IDApCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCXMrKzsKKysJCQkJCWJ5dGVzX2xlZnQtLTsKKysJCQkJCWNvbnRpbnVlOworKwkJCQkgICAgICB9CisrCQkJCSAgICBpZiAobXIgPT0gKHNpemVfdCkgLTIpCisrCQkJCSAgICAgIHsKKysJCQkJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysJCQkJCWJyZWFrOworKwkJCQkgICAgICB9CisrCQkJCSAgICBzICs9IG1yOworKwkJCQkgICAgYnl0ZXNfbGVmdCAtPSBtcjsKKysJCQkJICB9CisrCQkJICAgICAgfQorKwkJCSAgICBtciA9IG1icnRvd2MgKCZwd2MsIHMsIGJlZyArIHN0YXJ0IC0gcywgJm1icyk7CisrCQkJICAgIGlmIChtciA9PSAoc2l6ZV90KSAtMiB8fCBtciA9PSAoc2l6ZV90KSAtMSB8fAorKwkJCQltciA9PSAwKQorKwkJCSAgICAgIHsKKysJCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJCQlsd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlIGlmICghKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCQkgICAgICYmIG1yID09IGJlZyArIHN0YXJ0IC0gcykKKysJCQkgICAgICBsd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCQkJZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJCWlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgLSAxXSkpCisrCQkJICBsd29yZF9tYXRjaCA9IDE7CisrCQkgICAgICB9CisrCisrCQkgICAgaWYgKGx3b3JkX21hdGNoKQorKwkJICAgICAgeworKwkJCWludCByd29yZF9tYXRjaCA9IDA7CisrCQkJaWYgKHN0YXJ0ICsgbGVuID09IGVuZCAtIGJlZyAtIDEpCisrCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJZWxzZQorKwkJCSAgeworKyNpZmRlZiBNQlNfU1VQUE9SVAorKwkJCSAgICBpZiAobWJfY3VyX21heCA+IDEpCisrCQkJICAgICAgeworKwkJCQl3Y2hhcl90IG53YzsKKysJCQkJaW50IG1yOworKworKwkJCQltciA9IG1idG93YyAoJm53YywgYmVnICsgc3RhcnQgKyBsZW4sCisrCQkJCQkgICAgIGVuZCAtIGJlZyAtIHN0YXJ0IC0gbGVuIC0gMSk7CisrCQkJCWlmIChtciA8PSAwKQorKwkJCQkgIHsKKysJCQkJICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkJICAgIHJ3b3JkX21hdGNoID0gMTsKKysJCQkJICB9CisrCQkJCWVsc2UgaWYgKCFpc3dhbG51bSAobndjKSAmJiBud2MgIT0gTCdfJykKKysJCQkJICByd29yZF9tYXRjaCA9IDE7CisrCQkJICAgICAgfQorKwkJCSAgICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkJICAgIGlmICghV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbc3RhcnQgKyBsZW5dKSkKKysJCQkgICAgICByd29yZF9tYXRjaCA9IDE7CisrCQkJICB9CisrCisrCQkJaWYgKHJ3b3JkX21hdGNoKQorKwkJCSAgeworKwkJCSAgICBpZiAoIWV4YWN0KQorKwkJCSAgICAgIC8qIFJldHVybnMgdGhlIHdob2xlIGxpbmUuICovCisrCQkJICAgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOworKwkJCSAgICBlbHNlCisrCQkJICAgICAgLyogUmV0dXJucyBqdXN0IHRoaXMgd29yZCBtYXRjaC4gKi8KKysJCQkgICAgICBnb3RvIHN1Y2Nlc3NfaW5fc3RhcnRfYW5kX2xlbjsKKysJCQkgIH0KKysJCSAgICAgIH0KKyAJCSAgICBpZiAobGVuID4gMCkKKyAJCSAgICAgIHsKKyAJCQkvKiBUcnkgYSBzaG9ydGVyIGxlbmd0aCBhbmNob3JlZCBhdCB0aGUgc2FtZSBwbGFjZS4gKi8KK0BAIC00NjEsMjYgKzY0OSwxNTQgQEAgRUdleGVjdXRlIChjaGFyIGNvbnN0ICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgKm1hdGNoX3NpemUsIGludCBleGFjdCkKKyAJICAgIH0KKyAJfSAvKiBmb3IgUmVnZXggcGF0dGVybnMuICAqLworICAgICB9IC8qIGZvciAoYmVnID0gZW5kIC4uKSAqLworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworKyBmYWlsdXJlOgorICAgcmV0dXJuIChzaXplX3QpIC0xOworIAorLSBzdWNjZXNzOgorLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXMpCistICAgIGZyZWUgKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLSAgKm1hdGNoX3NpemUgPSBlbmQgLSBiZWc7CistICByZXR1cm4gYmVnIC0gYnVmOworKyBzdWNjZXNzX2luX2JlZ19hbmRfZW5kOgorKyAgbGVuID0gZW5kIC0gYmVnOworKyAgc3RhcnQgPSBiZWcgLSBidWY7CisrICAvKiBGQUxMVEhST1VHSCAqLworKworKyBzdWNjZXNzX2luX3N0YXJ0X2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKysgIHJldHVybiBzdGFydDsKKyB9CisgCisrI2lmZGVmIE1CU19TVVBQT1JUCisrc3RhdGljIGludCBmX2lfbXVsdGlieXRlOyAvKiB3aGV0aGVyIHdlJ3JlIHVzaW5nIHRoZSBuZXcgLUZpIE1CIG1ldGhvZCAqLworK3N0YXRpYyBzdHJ1Y3QKKyt7CisrICB3Y2hhcl90ICoqcGF0dGVybnM7CisrICBzaXplX3QgY291bnQsIG1heGxlbjsKKysgIHVuc2lnbmVkIGNoYXIgKm1hdGNoOworK30gRmltYjsKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIEZjb21waWxlIChjaGFyIGNvbnN0ICpwYXR0ZXJuLCBzaXplX3Qgc2l6ZSkKKyB7CisrICBpbnQgbWJfY3VyX21heCA9IE1CX0NVUl9NQVg7CisgICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICplcnI7CisgCisrICBjaGVja191dGY4ICgpOworKyNpZmRlZiBNQlNfU1VQUE9SVAorKyAgLyogU3VwcG9ydCAtRiAtaSBmb3IgVVRGLTggaW5wdXQuICovCisrICBpZiAobWF0Y2hfaWNhc2UgJiYgbWJfY3VyX21heCA+IDEpCisrICAgIHsKKysgICAgICBtYnN0YXRlX3QgbWJzOworKyAgICAgIHdjaGFyX3QgKndjcGF0dGVybiA9IHhtYWxsb2MgKChzaXplICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKysgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuZW5kID0gcGF0dGVybjsKKysgICAgICBzaXplX3Qgd2NzaXplOworKyAgICAgIGt3c2V0X3QgZmltYl9rd3NldCA9IE5VTEw7CisrICAgICAgY2hhciAqc3RhcnRzID0gTlVMTDsKKysgICAgICB3Y2hhcl90ICp3Y2JlZywgKndjbGltOworKyAgICAgIHNpemVfdCBhbGxvY2F0ZWQgPSAwOworKworKyAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysjIGlmZGVmIF9fR05VX0xJQlJBUllfXworKyAgICAgIHdjc2l6ZSA9IG1ic25ydG93Y3MgKHdjcGF0dGVybiwgJnBhdHRlcm5lbmQsIHNpemUsIHNpemUsICZtYnMpOworKyAgICAgIGlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm4gKyBzaXplKQorKwl3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysjIGVsc2UKKysgICAgICB7CisrCWNoYXIgKnBhdHRlcm5jb3B5ID0geG1hbGxvYyAoc2l6ZSArIDEpOworKworKwltZW1jcHkgKHBhdHRlcm5jb3B5LCBwYXR0ZXJuLCBzaXplKTsKKysJcGF0dGVybmNvcHlbc2l6ZV0gPSAnXDAnOworKwlwYXR0ZXJuZW5kID0gcGF0dGVybmNvcHk7CisrCXdjc2l6ZSA9IG1ic3J0b3djcyAod2NwYXR0ZXJuLCAmcGF0dGVybmVuZCwgc2l6ZSwgJm1icyk7CisrCWlmIChwYXR0ZXJuZW5kICE9IHBhdHRlcm5jb3B5ICsgc2l6ZSkKKysJICB3Y3NpemUgPSAoc2l6ZV90KSAtMTsKKysJZnJlZSAocGF0dGVybmNvcHkpOworKyAgICAgIH0KKysjIGVuZGlmCisrICAgICAgaWYgKHdjc2l6ZSArIDIgPD0gMikKKysJeworK2ZpbWJfZmFpbDoKKysJICBmcmVlICh3Y3BhdHRlcm4pOworKwkgIGZyZWUgKHN0YXJ0cyk7CisrCSAgaWYgKGZpbWJfa3dzZXQpCisrCSAgICBrd3NmcmVlIChmaW1iX2t3c2V0KTsKKysJICBmcmVlIChGaW1iLnBhdHRlcm5zKTsKKysJICBGaW1iLnBhdHRlcm5zID0gTlVMTDsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmICghKGZpbWJfa3dzZXQgPSBrd3NhbGxvYyAoTlVMTCkpKQorKwkgICAgZXJyb3IgKDIsIDAsIF8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisrCisrCSAgc3RhcnRzID0geG1hbGxvYyAobWJfY3VyX21heCAqIDMpOworKwkgIHdjYmVnID0gd2NwYXR0ZXJuOworKwkgIGRvCisrCSAgICB7CisrCSAgICAgIGludCBpOworKwkgICAgICBzaXplX3Qgd2NsZW47CisrCisrCSAgICAgIGlmIChGaW1iLmNvdW50ID49IGFsbG9jYXRlZCkKKysJCXsKKysJCSAgaWYgKGFsbG9jYXRlZCA9PSAwKQorKwkJICAgIGFsbG9jYXRlZCA9IDEyODsKKysJCSAgZWxzZQorKwkJICAgIGFsbG9jYXRlZCAqPSAyOworKwkJICBGaW1iLnBhdHRlcm5zID0geHJlYWxsb2MgKEZpbWIucGF0dGVybnMsCisrCQkJCQkgICAgc2l6ZW9mICh3Y2hhcl90ICopICogYWxsb2NhdGVkKTsKKysJCX0KKysJICAgICAgRmltYi5wYXR0ZXJuc1tGaW1iLmNvdW50KytdID0gd2NiZWc7CisrCSAgICAgIGZvciAod2NsaW0gPSB3Y2JlZzsKKysJCSAgIHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplICYmICp3Y2xpbSAhPSBMJ1xuJzsgKyt3Y2xpbSkKKysJCSp3Y2xpbSA9IHRvd2xvd2VyICgqd2NsaW0pOworKwkgICAgICAqd2NsaW0gPSBMJ1wwJzsKKysJICAgICAgd2NsZW4gPSB3Y2xpbSAtIHdjYmVnOworKwkgICAgICBpZiAod2NsZW4gPiBGaW1iLm1heGxlbikKKysJCUZpbWIubWF4bGVuID0gd2NsZW47CisrCSAgICAgIGlmICh3Y2xlbiA+IDMpCisrCQl3Y2xlbiA9IDM7CisrCSAgICAgIGlmICh3Y2xlbiA9PSAwKQorKwkJeworKwkJICBpZiAoKGVyciA9IGt3c2luY3IgKGZpbWJfa3dzZXQsICIiLCAwKSkgIT0gMCkKKysJCSAgICBlcnJvciAoMiwgMCwgZXJyKTsKKysJCX0KKysJICAgICAgZWxzZQorKwkJZm9yIChpID0gMDsgaSA8ICgxIDw8IHdjbGVuKTsgaSsrKQorKwkJICB7CisrCQkgICAgY2hhciAqcCA9IHN0YXJ0czsKKysJCSAgICBpbnQgaiwgazsKKysKKysJCSAgICBmb3IgKGogPSAwOyBqIDwgd2NsZW47ICsraikKKysJCSAgICAgIHsKKysJCQl3Y2hhcl90IHdjID0gd2NiZWdbal07CisrCQkJaWYgKGkgJiAoMSA8PCBqKSkKKysJCQkgIHsKKysJCQkgICAgd2MgPSB0b3d1cHBlciAod2MpOworKwkJCSAgICBpZiAod2MgPT0gd2NiZWdbal0pCisrCQkJICAgICAgY29udGludWU7CisrCQkJICB9CisrCQkJayA9IHdjdG9tYiAocCwgd2MpOworKwkJCWlmIChrIDw9IDApCisrCQkJICBnb3RvIGZpbWJfZmFpbDsKKysJCQlwICs9IGs7CisrCQkgICAgICB9CisrCQkgICAgaWYgKChlcnIgPSBrd3NpbmNyIChmaW1iX2t3c2V0LCBzdGFydHMsIHAgLSBzdGFydHMpKSAhPSAwKQorKwkJICAgICAgZXJyb3IgKDIsIDAsIGVycik7CisrCQkgIH0KKysJICAgICAgaWYgKHdjbGltIDwgd2NwYXR0ZXJuICsgd2NzaXplKQorKwkJKyt3Y2xpbTsKKysJICAgICAgd2NiZWcgPSB3Y2xpbTsKKysJICAgIH0KKysJICB3aGlsZSAod2NiZWcgPCB3Y3BhdHRlcm4gKyB3Y3NpemUpOworKwkgIGZfaV9tdWx0aWJ5dGUgPSAxOworKwkgIGt3c2V0ID0gZmltYl9rd3NldDsKKysJICBmcmVlIChzdGFydHMpOworKwkgIEZpbWIubWF0Y2ggPSB4bWFsbG9jIChGaW1iLmNvdW50KTsKKysJICBpZiAoKGVyciA9IGt3c3ByZXAgKGt3c2V0KSkgIT0gMCkKKysJICAgIGVycm9yICgyLCAwLCBlcnIpOworKwkgIHJldHVybjsKKysJfQorKyAgICB9CisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCisrCisgICBrd3Npbml0ICgpOworICAgYmVnID0gcGF0dGVybjsKKyAgIGRvCitAQCAtNDk5LDYgKzgxNSw3NiBAQCBGY29tcGlsZSAoY2hhciBjb25zdCAqcGF0dGVybiwgc2l6ZV90IHNpemUpCisgICAgIGVycm9yICgyLCAwLCBlcnIpOworIH0KKyAKKysjaWZkZWYgTUJTX1NVUFBPUlQKKytzdGF0aWMgaW50CisrRmltYmV4ZWMgKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqcGxlbiwgaW50IGV4YWN0KQorK3sKKysgIHNpemVfdCBsZW4sIGxldHRlciwgaTsKKysgIGludCByZXQgPSAtMTsKKysgIG1ic3RhdGVfdCBtYnM7CisrICB3Y2hhcl90IHdjOworKyAgaW50IHBhdHRlcm5zX2xlZnQ7CisrCisrICBhc3NlcnQgKG1hdGNoX2ljYXNlICYmIGZfaV9tdWx0aWJ5dGUgPT0gMSk7CisrICBhc3NlcnQgKE1CX0NVUl9NQVggPiAxKTsKKysKKysgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnMpKTsKKysgIG1lbXNldCAoRmltYi5tYXRjaCwgJ1wxJywgRmltYi5jb3VudCk7CisrICBsZXR0ZXIgPSBsZW4gPSAwOworKyAgcGF0dGVybnNfbGVmdCA9IDE7CisrICB3aGlsZSAocGF0dGVybnNfbGVmdCAmJiBsZW4gPD0gc2l6ZSkKKysgICAgeworKyAgICAgIHNpemVfdCBjOworKworKyAgICAgIHBhdHRlcm5zX2xlZnQgPSAwOworKyAgICAgIGlmIChsZW4gPCBzaXplKQorKwl7CisrCSAgYyA9IG1icnRvd2MgKCZ3YywgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmbWJzKTsKKysJICBpZiAoYyArIDIgPD0gMikKKysJICAgIHJldHVybiByZXQ7CisrCisrCSAgd2MgPSB0b3dsb3dlciAod2MpOworKwl9CisrICAgICAgZWxzZQorKwl7CisrCSAgYyA9IDE7CisrCSAgd2MgPSBMJ1wwJzsKKysJfQorKworKyAgICAgIGZvciAoaSA9IDA7IGkgPCBGaW1iLmNvdW50OyBpKyspCisrCXsKKysJICBpZiAoRmltYi5tYXRjaFtpXSkKKysJICAgIHsKKysJICAgICAgaWYgKEZpbWIucGF0dGVybnNbaV1bbGV0dGVyXSA9PSBMJ1wwJykKKysJCXsKKysJCSAgLyogRm91bmQgYSBtYXRjaC4gKi8KKysJCSAgKnBsZW4gPSBsZW47CisrCQkgIGlmICghZXhhY3QgJiYgIW1hdGNoX3dvcmRzKQorKwkJICAgIHJldHVybiAwOworKwkJICBlbHNlCisrCQkgICAgeworKwkJICAgICAgLyogRm9yIC13IG9yIGV4YWN0IGxvb2sgZm9yIGxvbmdlc3QgbWF0Y2guICAqLworKwkJICAgICAgcmV0ID0gMDsKKysJCSAgICAgIEZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkJICAgICAgY29udGludWU7CisrCQkgICAgfQorKwkJfQorKworKwkgICAgICBpZiAoRmltYi5wYXR0ZXJuc1tpXVtsZXR0ZXJdID09IHdjKQorKwkJcGF0dGVybnNfbGVmdCA9IDE7CisrCSAgICAgIGVsc2UKKysJCUZpbWIubWF0Y2hbaV0gPSAnXDAnOworKwkgICAgfQorKwl9CisrCisrICAgICAgbGVuICs9IGM7CisrICAgICAgbGV0dGVyKys7CisrICAgIH0KKysKKysgIHJldHVybiByZXQ7CisrfQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKworIHN0YXRpYyBzaXplX3QKKyBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgeworQEAgLTUwNiw4OCArODkyLDI2OCBAQCBGZXhlY3V0ZSAoY2hhciBjb25zdCAqYnVmLCBzaXplX3Qgc2l6ZSwgc2l6ZV90ICptYXRjaF9zaXplLCBpbnQgZXhhY3QpCisgICByZWdpc3RlciBzaXplX3QgbGVuOworICAgY2hhciBlb2wgPSBlb2xieXRlOworICAgc3RydWN0IGt3c21hdGNoIGt3c21hdGNoOworKyAgc2l6ZV90IHJldF92YWw7CisgI2lmZGVmIE1CU19TVVBQT1JUCistICBjaGFyICptYl9wcm9wZXJ0aWVzOworLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBtYl9wcm9wZXJ0aWVzID0gY2hlY2tfbXVsdGlieXRlX3N0cmluZyAoYnVmLCBzaXplKTsKKysgIGludCBtYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKysgIG1ic3RhdGVfdCBtYnM7CisrICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrICBjb25zdCBjaGFyICpsYXN0X2NoYXIgPSBOVUxMOworICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworIAorLSAgZm9yIChiZWcgPSBidWY7IGJlZyA8PSBidWYgKyBzaXplOyArK2JlZykKKysgIGZvciAoYmVnID0gYnVmOyBiZWcgPCBidWYgKyBzaXplOyArK2JlZykKKyAgICAgeworLSAgICAgIHNpemVfdCBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBidWYgKyBzaXplIC0gYmVnLCAma3dzbWF0Y2gpOworKyAgICAgIHNpemVfdCBvZmZzZXQ7CisrICAgICAgb2Zmc2V0ID0ga3dzZXhlYyAoa3dzZXQsIGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoKTsKKysKKyAgICAgICBpZiAob2Zmc2V0ID09IChzaXplX3QpIC0xKQorLQl7CisrCWdvdG8gZmFpbHVyZTsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlKG1iX3Byb3BlcnRpZXMpOworLSNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworLQkgIHJldHVybiBvZmZzZXQ7CisrICAgICAgaWYgKG1iX2N1cl9tYXggPiAxICYmICF1c2luZ191dGY4KQorKwl7CisrCSAgc2l6ZV90IGJ5dGVzX2xlZnQgPSBvZmZzZXQ7CisrCSAgd2hpbGUgKGJ5dGVzX2xlZnQpCisrCSAgICB7CisrCSAgICAgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkgICAgICBsYXN0X2NoYXIgPSBiZWc7CisrCSAgICAgIGlmIChtbGVuID09IChzaXplX3QpIC0xIHx8IG1sZW4gPT0gMCkKKysJCXsKKysJCSAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkgIGJlZysrOworKwkJICBieXRlc19sZWZ0LS07CisrCQkgIGNvbnRpbnVlOworKwkJfQorKworKwkgICAgICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMikKKysJCS8qIE9mZnNldCBwb2ludHMgaW5zaWRlIG11bHRpYnl0ZSBjaGFyYWN0ZXI6IG5vIGdvb2QuICovCisrCQlicmVhazsKKysKKysJICAgICAgYmVnICs9IG1sZW47CisrCSAgICAgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJICAgIH0KKysKKysJICBpZiAoYnl0ZXNfbGVmdCkKKysJICAgIGNvbnRpbnVlOworIAl9CistI2lmZGVmIE1CU19TVVBQT1JUCistICAgICAgaWYgKE1CX0NVUl9NQVggPiAxICYmIG1iX3Byb3BlcnRpZXNbb2Zmc2V0K2JlZy1idWZdID09IDApCistCWNvbnRpbnVlOyAvKiBJdCBpcyBhIHBhcnQgb2YgbXVsdGlieXRlIGNoYXJhY3Rlci4gICovCisrICAgICAgZWxzZQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgICAgIGJlZyArPSBvZmZzZXQ7CistICAgICAgbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0gICAgICBpZiAoZXhhY3QpCistCXsKKy0JICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBGb3IgZl9pX211bHRpYnl0ZSwgdGhlIHN0cmluZyBhdCBiZWcgbm93IG1hdGNoZXMgZmlyc3QgMyBjaGFycyBvZgorKwkgb25lIG9mIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2ggc3RyaW5ncykuCisrCSBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKyAgICAgIGlmIChmX2lfbXVsdGlieXRlCisrCSAgJiYgRmltYmV4ZWMgKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJmt3c21hdGNoLnNpemVbMF0sIGV4YWN0KSkKKysJZ290byBuZXh0X2NoYXI7CisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCSAgcmV0dXJuIGJlZyAtIGJ1ZjsKKy0JfQorKyAgICAgIGxlbiA9IGt3c21hdGNoLnNpemVbMF07CisrICAgICAgaWYgKGV4YWN0ICYmICFtYXRjaF93b3JkcykKKysJZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworICAgICAgIGlmIChtYXRjaF9saW5lcykKKyAJeworIAkgIGlmIChiZWcgPiBidWYgJiYgYmVnWy0xXSAhPSBlb2wpCistCSAgICBjb250aW51ZTsKKysJICAgIGdvdG8gbmV4dF9jaGFyOworIAkgIGlmIChiZWcgKyBsZW4gPCBidWYgKyBzaXplICYmIGJlZ1tsZW5dICE9IGVvbCkKKy0JICAgIGNvbnRpbnVlOworKwkgICAgZ290byBuZXh0X2NoYXI7CisgCSAgZ290byBzdWNjZXNzOworIAl9CisgICAgICAgZWxzZSBpZiAobWF0Y2hfd29yZHMpCistCWZvciAodHJ5ID0gYmVnOyBsZW47ICkKKy0JICB7CistCSAgICBpZiAodHJ5ID4gYnVmICYmIFdDSEFSKCh1bnNpZ25lZCBjaGFyKSB0cnlbLTFdKSkKKy0JICAgICAgYnJlYWs7CistCSAgICBpZiAodHJ5ICsgbGVuIDwgYnVmICsgc2l6ZSAmJiBXQ0hBUigodW5zaWduZWQgY2hhcikgdHJ5W2xlbl0pKQorLQkgICAgICB7CistCQlvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCAtLWxlbiwgJmt3c21hdGNoKTsKKy0JCWlmIChvZmZzZXQgPT0gKHNpemVfdCkgLTEpCistCQkgIHsKKysJeworKwkgIHdoaWxlIChsZW4pCisrCSAgICB7CisrCSAgICAgIGludCB3b3JkX21hdGNoID0gMDsKKysJICAgICAgaWYgKGJlZyA+IGJ1ZikKKysJCXsKKyAjaWZkZWYgTUJTX1NVUFBPUlQKKy0JCSAgICBpZiAoTUJfQ1VSX01BWCA+IDEpCistCQkgICAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysJCSAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJICAgIHsKKysJCSAgICAgIGNvbnN0IGNoYXIgKnM7CisrCQkgICAgICBpbnQgbXI7CisrCQkgICAgICB3Y2hhcl90IHB3YzsKKysKKysJCSAgICAgIGlmICh1c2luZ191dGY4KQorKwkJCXsKKysJCQkgIHMgPSBiZWcgLSAxOworKwkJCSAgd2hpbGUgKHMgPiBidWYKKysJCQkJICYmICh1bnNpZ25lZCBjaGFyKSAqcyA+PSAweDgwCisrCQkJCSAmJiAodW5zaWduZWQgY2hhcikgKnMgPD0gMHhiZikKKysJCQkgICAgLS1zOworKwkJCX0KKysJCSAgICAgIGVsc2UKKysJCQlzID0gbGFzdF9jaGFyOworKwkJICAgICAgbXIgPSBtYnRvd2MgKCZwd2MsIHMsIGJlZyAtIHMpOworKwkJICAgICAgaWYgKG1yIDw9IDApCisrCQkJbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgZWxzZSBpZiAoKGlzd2FsbnVtIChwd2MpIHx8IHB3YyA9PSBMJ18nKQorKwkJCSAgICAgICAmJiBtciA9PSAoaW50KSAoYmVnIC0gcykpCisrCQkJZ290byBuZXh0X2NoYXI7CisrCQkgICAgfQorKwkJICBlbHNlCisgI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCistCQkgICAgcmV0dXJuIG9mZnNldDsKKy0JCSAgfQorLQkJdHJ5ID0gYmVnICsgb2Zmc2V0OworLQkJbGVuID0ga3dzbWF0Y2guc2l6ZVswXTsKKy0JICAgICAgfQorLQkgICAgZWxzZQorLQkgICAgICBnb3RvIHN1Y2Nlc3M7CistCSAgfQorKwkJICBpZiAoV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbLTFdKSkKKysJCSAgICBnb3RvIG5leHRfY2hhcjsKKysJCX0KKysjaWZkZWYgTUJTX1NVUFBPUlQKKysJICAgICAgaWYgKG1iX2N1cl9tYXggPiAxKQorKwkJeworKwkJICB3Y2hhcl90IG53YzsKKysJCSAgaW50IG1yOworKworKwkJICBtciA9IG1idG93YyAoJm53YywgYmVnICsgbGVuLCBidWYgKyBzaXplIC0gYmVnIC0gbGVuKTsKKysJCSAgaWYgKG1yIDw9IDApCisrCQkgICAgeworKwkJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkJICAgICAgd29yZF9tYXRjaCA9IDE7CisrCQkgICAgfQorKwkJICBlbHNlIGlmICghaXN3YWxudW0gKG53YykgJiYgbndjICE9IEwnXycpCisrCQkgICAgd29yZF9tYXRjaCA9IDE7CisrCQl9CisrCSAgICAgIGVsc2UKKysjZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysJCWlmIChiZWcgKyBsZW4gPj0gYnVmICsgc2l6ZSB8fCAhV0NIQVIgKCh1bnNpZ25lZCBjaGFyKSBiZWdbbGVuXSkpCisrCQkgIHdvcmRfbWF0Y2ggPSAxOworKwkgICAgICBpZiAod29yZF9tYXRjaCkKKysJCXsKKysJCSAgaWYgKCFleGFjdCkKKysJCSAgICAvKiBSZXR1cm5zIHRoZSB3aG9sZSBsaW5lIG5vdyB3ZSBrbm93IHRoZXJlJ3MgYSB3b3JkIG1hdGNoLiAqLworKwkJICAgIGdvdG8gc3VjY2VzczsKKysJCSAgZWxzZQorKwkJICAgIC8qIFJldHVybnMganVzdCB0aGlzIHdvcmQgbWF0Y2guICovCisrCQkgICAgZ290byBzdWNjZXNzX2luX2JlZ19hbmRfbGVuOworKwkJfQorKwkgICAgICBpZiAobGVuID4gMCkKKysJCXsKKysJCSAgLyogVHJ5IGEgc2hvcnRlciBsZW5ndGggYW5jaG9yZWQgYXQgdGhlIHNhbWUgcGxhY2UuICovCisrCQkgIC0tbGVuOworKwkJICBvZmZzZXQgPSBrd3NleGVjIChrd3NldCwgYmVnLCBsZW4sICZrd3NtYXRjaCk7CisrCisrCQkgIGlmIChvZmZzZXQgPT0gLTEpCisrCQkgICAgZ290byBuZXh0X2NoYXI7IC8qIFRyeSBhIGRpZmZlcmVudCBhbmNob3IuICovCisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIGlmIChtYl9jdXJfbWF4ID4gMSAmJiAhdXNpbmdfdXRmOCkKKysJCSAgICB7CisrCQkgICAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IG9mZnNldDsKKysJCSAgICAgIHdoaWxlIChieXRlc19sZWZ0KQorKwkJCXsKKysJCQkgIHNpemVfdCBtbGVuID0gbWJybGVuIChiZWcsIGJ5dGVzX2xlZnQsICZtYnMpOworKworKwkJCSAgbGFzdF9jaGFyID0gYmVnOworKwkJCSAgaWYgKG1sZW4gPT0gKHNpemVfdCkgLTEgfHwgbWxlbiA9PSAwKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXI6IHRyZWF0IGFzIHNpbmdsZS1ieXRlLiAqLworKwkJCSAgICAgIG1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJCQkgICAgICBiZWcrKzsKKysJCQkgICAgICBieXRlc19sZWZ0LS07CisrCQkJICAgICAgY29udGludWU7CisrCQkJICAgIH0KKysKKysJCQkgIGlmIChtbGVuID09IChzaXplX3QpIC0yKQorKwkJCSAgICB7CisrCQkJICAgICAgLyogT2Zmc2V0IHBvaW50cyBpbnNpZGUgbXVsdGlieXRlIGNoYXJhY3RlcjoKKysJCQkgICAgICAgKiBubyBnb29kLiAqLworKwkJCSAgICAgIGJyZWFrOworKwkJCSAgICB9CisrCisrCQkJICBiZWcgKz0gbWxlbjsKKysJCQkgIGJ5dGVzX2xlZnQgLT0gbWxlbjsKKysJCQl9CisrCisrCQkgICAgICBpZiAoYnl0ZXNfbGVmdCkKKysJCQl7CisrCQkJICBtZW1zZXQgKCZtYnMsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisrCQkJICBnb3RvIG5leHRfY2hhcjsgLyogVHJ5IGEgZGlmZmVyZW50IGFuY2hvci4gKi8KKysJCQl9CisrCQkgICAgfQorKwkJICBlbHNlCisrI2VuZGlmIC8qIE1CU19TVVBQT1JUICovCisrCQkgIGJlZyArPSBvZmZzZXQ7CisrI2lmZGVmIE1CU19TVVBQT1JUCisrCQkgIC8qIFRoZSBzdHJpbmcgYXQgYmVnIG5vdyBtYXRjaGVzIGZpcnN0IDMgY2hhcnMgb2Ygb25lIG9mCisrCQkgICAgIHRoZSBzZWFyY2ggc3RyaW5ncyAobGVzcyBpZiB0aGVyZSBhcmUgc2hvcnRlciBzZWFyY2gKKysJCSAgICAgc3RyaW5ncykuICBTZWUgaWYgdGhpcyBpcyBhIHJlYWwgbWF0Y2guICAqLworKwkJICBpZiAoZl9pX211bHRpYnl0ZQorKwkJICAgICAgJiYgRmltYmV4ZWMgKGJlZywgbGVuIC0gb2Zmc2V0LCAma3dzbWF0Y2guc2l6ZVswXSwKKysJCQkJICAgZXhhY3QpKQorKwkJICAgIGdvdG8gbmV4dF9jaGFyOworKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKwkJICBsZW4gPSBrd3NtYXRjaC5zaXplWzBdOworKwkJfQorKwkgICAgfQorKwl9CisgICAgICAgZWxzZQorIAlnb3RvIHN1Y2Nlc3M7CistICAgIH0KKy0KKytuZXh0X2NoYXI6OworICNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKysgICAgICAvKiBBZHZhbmNlIHRvIG5leHQgY2hhcmFjdGVyLiAgRm9yIE1CX0NVUl9NQVggPT0gMSBjYXNlIHRoaXMgaXMgaGFuZGxlZAorKwkgYnkgKytiZWcgYWJvdmUuICAqLworKyAgICAgIGlmIChtYl9jdXJfbWF4ID4gMSkKKysJeworKwkgIGlmICh1c2luZ191dGY4KQorKwkgICAgeworKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqYmVnOworKwkgICAgICBpZiAoYyA+PSAweGMyKQorKwkJeworKwkJICBpZiAoYyA8IDB4ZTApCisrCQkgICAgKytiZWc7CisrCQkgIGVsc2UgaWYgKGMgPCAweGYwKQorKwkJICAgIGJlZyArPSAyOworKwkJICBlbHNlIGlmIChjIDwgMHhmOCkKKysJCSAgICBiZWcgKz0gMzsKKysJCSAgZWxzZSBpZiAoYyA8IDB4ZmMpCisrCQkgICAgYmVnICs9IDQ7CisrCQkgIGVsc2UgaWYgKGMgPCAweGZlKQorKwkJICAgIGJlZyArPSA1OworKwkJfQorKwkgICAgfQorKwkgIGVsc2UKKysJICAgIHsKKysJICAgICAgc2l6ZV90IGwgPSBtYnJsZW4gKGJlZywgYnVmICsgc2l6ZSAtIGJlZywgJm1icyk7CisrCisrCSAgICAgIGxhc3RfY2hhciA9IGJlZzsKKysJICAgICAgaWYgKGwgKyAyID49IDIpCisrCQliZWcgKz0gbCAtIDE7CisrCSAgICAgIGVsc2UKKysJCW1lbXNldCAoJm1icywgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsKKysJICAgIH0KKysJfQorICNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworKyAgICB9CisrCisrIGZhaWx1cmU6CisgICByZXR1cm4gLTE7CisgCisgIHN1Y2Nlc3M6CisrI2lmZGVmIE1CU19TVVBQT1JUCisrICBpZiAobWJfY3VyX21heCA+IDEgJiYgIXVzaW5nX3V0ZjgpCisrICAgIHsKKysgICAgICBlbmQgPSBiZWcgKyBsZW47CisrICAgICAgd2hpbGUgKGVuZCA8IGJ1ZiArIHNpemUpCisrCXsKKysJICBzaXplX3QgbWxlbiA9IG1icmxlbiAoZW5kLCBidWYgKyBzaXplIC0gZW5kLCAmbWJzKTsKKysJICBpZiAobWxlbiA9PSAoc2l6ZV90KSAtMSB8fCBtbGVuID09IChzaXplX3QpIC0yIHx8IG1sZW4gPT0gMCkKKysJICAgIHsKKysJICAgICAgbWVtc2V0ICgmbWJzLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworKwkgICAgICBtbGVuID0gMTsKKysJICAgIH0KKysJICBpZiAobWxlbiA9PSAxICYmICplbmQgPT0gZW9sKQorKwkgICAgYnJlYWs7CisrCisrCSAgZW5kICs9IG1sZW47CisrCX0KKysgICAgfQorKyAgZWxzZQorKyNlbmRpZiAvKiBNQlNfU1VQUE9SVCAqLworICAgZW5kID0gbWVtY2hyIChiZWcgKyBsZW4sIGVvbCwgKGJ1ZiArIHNpemUpIC0gKGJlZyArIGxlbikpOworKworICAgZW5kKys7CisgICB3aGlsZSAoYnVmIDwgYmVnICYmIGJlZ1stMV0gIT0gZW9sKQorICAgICAtLWJlZzsKKy0gICptYXRjaF9zaXplID0gZW5kIC0gYmVnOworLSNpZmRlZiBNQlNfU1VQUE9SVAorLSAgaWYgKE1CX0NVUl9NQVggPiAxKQorLSAgICBmcmVlIChtYl9wcm9wZXJ0aWVzKTsKKy0jZW5kaWYgLyogTUJTX1NVUFBPUlQgKi8KKysgIGxlbiA9IGVuZCAtIGJlZzsKKysgIC8qIEZBTExUSFJPVUdIICovCisrCisrIHN1Y2Nlc3NfaW5fYmVnX2FuZF9sZW46CisrICAqbWF0Y2hfc2l6ZSA9IGxlbjsKKyAgIHJldHVybiBiZWcgLSBidWY7CisgfQorIAorQEAgLTcwMSw4ICsxMjY3LDkgQEAgUGV4ZWN1dGUgKGNoYXIgY29uc3QgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCAqbWF0Y2hfc2l6ZSwgaW50IGV4YWN0KQorICAgICAgIGNoYXIgZW9sID0gZW9sYnl0ZTsKKyAgICAgICBpZiAoIWV4YWN0KQorIAl7CistCSAgZW5kID0gbWVtY2hyIChlbmQsIGVvbCwgYnVmbGltIC0gZW5kKTsKKy0JICBlbmQrKzsKKysJICB3aGlsZSAoZW5kIDwgYnVmbGltKQorKwkgICAgaWYgKCplbmQrKyA9PSBlb2wpCisrCSAgICAgIGJyZWFrOworIAkgIHdoaWxlIChidWYgPCBiZWcgJiYgYmVnWy0xXSAhPSBlb2wpCisgCSAgICAtLWJlZzsKKyAJfQorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC0yLjUuMWEvZ3JlcF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NjY2U1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL2dyZXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZSAxLjEyIGhhcyBkZXByaWNhdGVkIGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQKKwordGhpcyBwYXRjaCBhdm9pZHMgdGhlc2Uga2luZHMgb2YgZXJyb3JzOgorCit8IGNvbmZpZ3VyZS5pbjozMzogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2FjbG9jYWwtMS4xMi9wcm90b3MubTQ6MTI6IEFNX0NfUFJPVE9UWVBFUyBpcyBleHBhbmRlZCBmcm9tLi4uCit8IGNvbmZpZ3VyZS5pbjozMzogdGhlIHRvcCBsZXZlbAorfCBhdXRvbTR0ZTogbTQgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXM6IDEKKy4uLgorfCBsaWIvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBzcmMvTWFrZWZpbGUuYW06MjogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorfCBhdXRvcmVjb25mOiBhdXRvbWFrZSBmYWlsZWQgd2l0aCBleGl0IHN0YXR1czogMQorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wNAorCitJbmRleDogZ3JlcC0yLjUuMWEvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3JlcC0yLjUuMWEub3JpZy9jb25maWd1cmUuaW4KKysrKyBncmVwLTIuNS4xYS9jb25maWd1cmUuaW4KK0BAIC0zMCw3ICszMCw2IEBAIEFDX1BST0dfUkFOTElCCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfU1lTX0xBUkdFRklMRQorLUFNX0NfUFJPVE9UWVBFUworIEFDX1RZUEVfU0laRV9UCisgQUNfQ0hFQ0tfVFlQRShzc2l6ZV90LCBpbnQpCisgQUNfQ19DT05TVAorSW5kZXg6IGdyZXAtMi41LjFhL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjFhLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgZ3JlcC0yLjUuMWEvbGliL01ha2VmaWxlLmFtCitAQCAtMSw1ICsxLDUgQEAKKyAjCistQVVUT01BS0VfT1BUSU9OUyA9IC4uL3NyYy9hbnNpMmtucgorK0FVVE9NQUtFX09QVElPTlMgPSAKKyAKKyBTVUJESVJTID0gcG9zaXgKKyAKK0luZGV4OiBncmVwLTIuNS4xYS9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xYS5vcmlnL3NyYy9NYWtlZmlsZS5hbQorKysrIGdyZXAtMi41LjFhL3NyYy9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSw1IEBACisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKy1BVVRPTUFLRV9PUFRJT05TID0gYW5zaTJrbnIgbm8tZGVwZW5kZW5jaWVzCisrQVVUT01BS0VfT1BUSU9OUyA9IG5vLWRlcGVuZGVuY2llcworIAorIExOID0gbG4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAtMi41LjFhL3VjbGliYy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMDU0ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwLTIuNS4xYS91Y2xpYmMtZml4LnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCisjIEZpeCB0byB1c2UgbWVtcGNweSBpbnN0ZWFkIG9mIF9fbWVtcGNweS4gVGhpcyBpcyBuZWVkZWQgZm9yIHVjbGliYyB3aGljaAorIyBkb2Vzbid0IGRlZmluZSBfX21lbXBjcHksIG9ubHkgbWVtcGNweS4gU2luY2UgYm90aCB1Y2xpYmMgYW5kIGdsaWJjIGhhdmUKKyMgbWVtcGNweSwgd2UnbGwganVzdCB1c2UgdGhhdCBpbnN0ZWFkLgorIyBQYXRjaCBzb3VyY2U6IE9wZW5FbWJlZGRlZAorCitJbmRleDogZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvaW50bC9sb2NhbGVhbGlhcy5jCTIwMDItMDMtMTQgMDA6Mzk6MDYuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9pbnRsL2xvY2FsZWFsaWFzLmMJMjAwNy0wNS0xNyAxMzo1Mzo1OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC02NSw3ICs2NSw3IEBACisgIyBkZWZpbmUgc3RyY2FzZWNtcCBfX3N0cmNhc2VjbXAKKyAKKyAjIGlmbmRlZiBtZW1wY3B5CistIyAgZGVmaW5lIG1lbXBjcHkgX19tZW1wY3B5CisrIyAgZXJyb3IgIm1lbXBjcHkgbm90IGRldGVjdGVkIgorICMgZW5kaWYKKyAjIGRlZmluZSBIQVZFX01FTVBDUFkJMQorICMgZGVmaW5lIEhBVkVfX19GU0VUTE9DS0lORwkxCitJbmRleDogZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncmVwLTIuNS4xLm9yaWcvbGliL2dldG9wdC5jCTIwMDEtMDMtMDQgMTY6MzM6MTIuMDAwMDAwMDAwICsxMTAwCisrKysgZ3JlcC0yLjUuMS9saWIvZ2V0b3B0LmMJMjAwNy0wNS0xNyAxMzo1MTo0NC4wMDAwMDAwMDAgKzEwMDAKK0BAIC0zMjYsNyArMzI2LDcgQEAKKyAJbm9ub3B0aW9uX2ZsYWdzX2xlbiA9IG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gMDsKKyAgICAgICBlbHNlCisgCXsKKy0JICBtZW1zZXQgKF9fbWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorKwkgIG1lbXNldCAobWVtcGNweSAobmV3X3N0ciwgX19nZXRvcHRfbm9ub3B0aW9uX2ZsYWdzLAorIAkJCSAgICAgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pLAorIAkJICAnXDAnLCB0b3AgKyAxIC0gbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4pOworIAkgIG5vbm9wdGlvbl9mbGFnc19tYXhfbGVuID0gdG9wICsgMTsKK0BAIC00MzcsNyArNDM3LDcgQEAKKyAJICAgICAgaWYgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncyA9PSBOVUxMKQorIAkJbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gPSAtMTsKKyAJICAgICAgZWxzZQorLQkJbWVtc2V0IChfX21lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisrCQltZW1zZXQgKG1lbXBjcHkgKF9fZ2V0b3B0X25vbm9wdGlvbl9mbGFncywgb3JpZ19zdHIsIGxlbiksCisgCQkJJ1wwJywgbm9ub3B0aW9uX2ZsYWdzX21heF9sZW4gLSBsZW4pOworIAkgICAgfQorIAl9CitJbmRleDogZ3JlcC0yLjUuMS9saWIvcmVnZXguYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyZXAtMi41LjEub3JpZy9saWIvcmVnZXguYwkyMDAxLTA0LTAzIDA0OjA0OjQ1LjAwMDAwMDAwMCArMTAwMAorKysrIGdyZXAtMi41LjEvbGliL3JlZ2V4LmMJMjAwNy0wNS0xNyAxMzo1MTo0OC4wMDAwMDAwMDAgKzEwMDAKK0BAIC03ODQyLDcgKzc4NDIsNyBAQAorICAgICAgIGlmIChtc2dfc2l6ZSA+IGVycmJ1Zl9zaXplKQorICAgICAgICAgeworICNpZiBkZWZpbmVkIEhBVkVfTUVNUENQWSB8fCBkZWZpbmVkIF9MSUJDCistCSAgKigoY2hhciAqKSBfX21lbXBjcHkgKGVycmJ1ZiwgbXNnLCBlcnJidWZfc2l6ZSAtIDEpKSA9ICdcMCc7CisrCSAgKigoY2hhciAqKSBtZW1wY3B5IChlcnJidWYsIG1zZywgZXJyYnVmX3NpemUgLSAxKSkgPSAnXDAnOworICNlbHNlCisgICAgICAgICAgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisgICAgICAgICAgIGVycmJ1ZltlcnJidWZfc2l6ZSAtIDFdID0gMDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTFhNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXAvZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhhOTg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcC9ncmVwLWZpeC1DVkUtMjAxNS0xMzQ1LnBhdGNoCkBAIC0wLDAgKzEsMTU0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBDVkUtMjAxNS0xMzQ1LgoraHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvZ3JlcC5naXQvY29tbWl0Lz9pZD04M2E5NWJkCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDgzYTk1YmQ4Yzg1NjE4NzViOTQ4Y2FkZDQxN2M2NTNkYmU3ZWYyZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBZdWxpeSBQaXNldHNreSA8eXBpc2V0c2t5QGZiLmNvbT4KK0RhdGU6IFRodSwgMSBKYW4gMjAxNSAxNTozNjo1NSAtMDgwMAorU3ViamVjdDogW1BBVENIXSBncmVwIC1GOiBmaXggYSBoZWFwIGJ1ZmZlciAocmVhZCkgb3ZlcnJ1bgorCitncmVwJ3MgcmVhZCBidWZmZXIgaXMgb2Z0ZW4gZmlsbGVkIHRvIGl0cyBmdWxsIHNpemUsIGV4Y2VwdCB3aGVuCityZWFkaW5nIHRoZSBmaW5hbCBidWZmZXIgb2YgYSBmaWxlLiAgSW4gdGhhdCBjYXNlLCB0aGUgbnVtYmVyIG9mCitieXRlcyByZWFkIG1heSBiZSBmYXIgbGVzcyB0aGFuIHRoZSBzaXplIG9mIHRoZSBidWZmZXIuICBIb3dldmVyLCBmb3IKK2NlcnRhaW4gdW51c3VhbCBwYXR0ZXJuL3RleHQgY29tYmluYXRpb25zLCBncmVwIC1GIHdvdWxkIG1pc3Rha2VubHkKK2V4YW1pbmUgYnl0ZXMgaW4gdGhhdCB1bmluaXRpYWxpemVkIHJlZ2lvbiBvZiBtZW1vcnkgd2hlbiBzZWFyY2hpbmcKK2ZvciBhIG1hdGNoLiAgV2l0aCBjYXJlZnVsbHkgY2hvc2VuIGlucHV0cywgb25lIGNhbiBjYXVzZSBncmVwIC1GIHRvCityZWFkIGJleW9uZCB0aGUgZW5kIG9mIHRoYXQgYnVmZmVyIGFsdG9nZXRoZXIuICBUaGlzIHByb2JsZW0gYXJvc2UgdmlhCitjb21taXQgdjIuMTgtOTAtZzczODkzZmYgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbW9yZSBlZmZpY2llbnQKK2hldXJpc3RpYyB1c2luZyB3aGF0IGlzIG5vdyB0aGUgbWVtY2hyX2t3c2V0IGZ1bmN0aW9uLiBUaGUgdXNlIG9mCit0aGF0IGZ1bmN0aW9uIGluIGJtZXhlY190cmFucyBjb3VsZCBsZWF2ZSBUUCBtdWNoIGxhcmdlciB0aGFuIEVQLAorYW5kIHRoZSBzdWJzZXF1ZW50IGNhbGwgdG8gYm1fZGVsdGEyX3NlYXJjaCB3b3VsZCBtaXN0YWtlbmx5IGFjY2VzcworYmV5b25kIGVuZCBvZiB0aGUgbWFpbiBpbnB1dCByZWFkIGJ1ZmZlci4KKworKiBzcmMva3dzZXQuYyAoYm1leGVjX3RyYW5zKTogV2hlbiBUUCByZWFjaGVzIG9yIGV4Y2VlZHMgRVAsCitkbyBub3QgY2FsbCBibV9kZWx0YTJfc2VhcmNoLgorKiB0ZXN0cy9rd3NldC1hYnVzZTogTmV3IGZpbGUuCisqIHRlc3RzL01ha2VmaWxlLmFtIChURVNUUyk6IEFkZCBpdC4KKyogVEhBTktTLmluOiBVcGRhdGUuCisqIE5FV1MgKEJ1ZyBmaXhlcyk6IE1lbnRpb24gaXQuCisKK1ByaW9yIHRvIHRoaXMgcGF0Y2gsIHRoaXMgY29tbWFuZCB3b3VsZCB0cmlnZ2VyIGEgVU1SOgorCisgIHByaW50ZiAlMDM2MGRiIDAgfCB2YWxncmluZCBzcmMvZ3JlcCAtRiAkKHByaW50ZiAlMDE5ZFhiIDApCisKKyAgVXNlIG9mIHVuaW5pdGlhbGlzZWQgdmFsdWUgb2Ygc2l6ZSA4CisgICAgIGF0IDB4NDE0MkJFOiBibWV4ZWNfdHJhbnMgKGt3c2V0LmM6NjU3KQorICAgICBieSAweDQxNDNDQTogYm1leGVjIChrd3NldC5jOjY3OCkKKyAgICAgYnkgMHg0MTQ5NzM6IGt3c2V4ZWMgKGt3c2V0LmM6ODQ4KQorICAgICBieSAweDQxNERDNDogRmV4ZWN1dGUgKGt3c2VhcmNoLmM6MTI4KQorICAgICBieSAweDQwNEUyRTogZ3JlcGJ1ZiAoZ3JlcC5jOjEyMzgpCisgICAgIGJ5IDB4NDA1NEJGOiBncmVwIChncmVwLmM6MTQxNykKKyAgICAgYnkgMHg0MDVDRUI6IGdyZXBkZXNjIChncmVwLmM6MTY0NSkKKyAgICAgYnkgMHg0MDVFQzE6IGdyZXBfY29tbWFuZF9saW5lX2FyZyAoZ3JlcC5jOjE2OTIpCisgICAgIGJ5IDB4NDA3N0Q0OiBtYWluIChncmVwLmM6MjU3MCkKKworU2VlIHRoZSBhY2NvbXBhbnlpbmcgdGVzdCBmb3IgaG93IHRvIHRyaWdnZXIgdGhlIGhlYXAgYnVmZmVyIG92ZXJydW4uCisKK1RoYW5rcyB0byBOaW1hIEFnaGRhaWkgZm9yIHRlc3RpbmcgYW5kIGZpbmRpbmcgbnVtZXJvdXMKK3dheXMgdG8gYnJlYWsgZWFybHkgaXRlcmF0aW9ucyBvZiB0aGlzIHBhdGNoLgorLS0tCisgTkVXUyAgICAgICAgICAgICAgfCAgNSArKysrKworIFRIQU5LUy5pbiAgICAgICAgIHwgIDEgKworIHNyYy9rd3NldC5jICAgICAgIHwgIDIgKysKKyB0ZXN0cy9NYWtlZmlsZS5hbSB8ICAxICsKKyB0ZXN0cy9rd3NldC1hYnVzZSB8IDMyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgNSBmaWxlcyBjaGFuZ2VkLCA0MSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RzL2t3c2V0LWFidXNlCisKK2RpZmYgLS1naXQgYS9ORVdTIGIvTkVXUworaW5kZXggOTc1NDQwZC4uMzgzNWQ4ZCAxMDA2NDQKKy0tLSBhL05FV1MKKysrKyBiL05FV1MKK0BAIC0yLDYgKzIsMTEgQEAgR05VIGdyZXAgTkVXUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBvdXRsaW5lIC0qLQorIAorICogTm90ZXdvcnRoeSBjaGFuZ2VzIGluIHJlbGVhc2UgPy4/ICg/Pz8/LT8/LT8/KSBbP10KKyAKKysqKiBCdWcgZml4ZXMKKysKKysgIGdyZXAgbm8gbG9uZ2VyIHJlYWRzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgZnJvbSBiZXlvbmQgdGhlIGVuZAorKyAgb2YgdGhlIGhlYXAtYWxsb2NhdGVkIGlucHV0IGJ1ZmZlci4KKysKKyAKKyAqIE5vdGV3b3J0aHkgY2hhbmdlcyBpbiByZWxlYXNlIDIuMjEgKDIwMTQtMTEtMjMpIFtzdGFibGVdCisgCitkaWZmIC0tZ2l0IGEvVEhBTktTLmluIGIvVEhBTktTLmluCitpbmRleCBhZWFmNTE2Li42MjQ0NzhkIDEwMDY0NAorLS0tIGEvVEhBTktTLmluCisrKysgYi9USEFOS1MuaW4KK0BAIC02Miw2ICs2Miw3IEBAIE1pY2hhZWwgQWljaGxtYXlyICAgICAgICAgICAgICAgICAgIG1pa2xhQG54LmNvbQorIE1pbGVzIEJhZGVyICAgICAgICAgICAgICAgICAgICAgICAgIG1pbGVzQGNjcy5tdC5uZWMuY28uanAKKyBNaXJyYXogTWlycmF6ICAgICAgICAgICAgICAgICAgICAgICBtaXJyYXoxQHJhbWJsZXIucnUKKyBOZWxzb24gSC4gRi4gQmVlYmUgICAgICAgICAgICAgICAgICBiZWViZUBtYXRoLnV0YWguZWR1CisrTmltYSBBZ2hkYWlpICAgICAgICAgICAgICAgICAgICAgICAgbmFnaGRhaWlAZmIuY29tCisgT2xhZiBLaXJjaCAgICAgICAgICAgICAgICAgICAgICAgICAgb2tpckBucy5sc3QuZGUKKyBQYXVsIEtpbW90byAgICAgICAgICAgICAgICAgICAgICAgICBraW1vdG9Ac3BhY2VuZXQudG4uY29ybmVsbC5lZHUKKyBQw6l0ZXIgUmFkaWNzICAgICAgICAgICAgICAgICAgICAgICAgbWl0Y2hudWxsQGdtYWlsLmNvbQorZGlmZiAtLWdpdCBhL3NyYy9rd3NldC5jIGIvc3JjL2t3c2V0LmMKK2luZGV4IDQwMDNjOGQuLjM3NmY3YzMgMTAwNjQ0CistLS0gYS9zcmMva3dzZXQuYworKysrIGIvc3JjL2t3c2V0LmMKK0BAIC02NDMsNiArNjQzLDggQEAgYm1leGVjX3RyYW5zIChrd3NldF90IGt3c2V0LCBjaGFyIGNvbnN0ICp0ZXh0LCBzaXplX3Qgc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgIGlmICghIHRwKQorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICB0cCsrOworKyAgICAgICAgICAgICAgICAgICAgaWYgKGVwIDw9IHRwKQorKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAyY2JhMmNkLi4wNTA4Y2QyIDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtNzUsNiArNzUsNyBAQCBURVNUUyA9CQkJCQkJXAorICAgaW5jb25zaXN0ZW50LXJhbmdlCQkJCVwKKyAgIGludmFsaWQtbXVsdGlieXRlLWluZmxvb3AJCQlcCisgICBraGFkYWZ5CQkJCQlcCisrICBrd3NldC1hYnVzZQkJCQkJXAorICAgbG9uZy1saW5lLXZzLTJHaUItcmVhZAkJCVwKKyAgIG1hdGNoLWxpbmVzCQkJCQlcCisgICBtYXgtY291bnQtb3ZlcnJlYWQJCQkJXAorZGlmZiAtLWdpdCBhL3Rlc3RzL2t3c2V0LWFidXNlIGIvdGVzdHMva3dzZXQtYWJ1c2UKK25ldyBmaWxlIG1vZGUgMTAwNzU1CitpbmRleCAwMDAwMDAwLi42ZDhlYzBjCistLS0gL2Rldi9udWxsCisrKysgYi90ZXN0cy9rd3NldC1hYnVzZQorQEAgLTAsMCArMSwzMiBAQAorKyMhIC9iaW4vc2gKKysjIEV2b2tlIGEgc2VnZmF1bHQgaW4gYSBoYXJkLXRvLXJlYWNoIGNvZGUgcGF0aCBvZiBrd3NldC5jLgorKyMgVGhpcyBidWcgYWZmZWN0ZWQgZ3JlcCB2ZXJzaW9ucyAyLjE5IHRocm91Z2ggMi4yMS4KKysjCisrIyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrCisrLiAiJHtzcmNkaXI9Ln0vaW5pdC5zaCI7IHBhdGhfcHJlcGVuZF8gLi4vc3JjCisrCisrZmFpbD0wCisrCisrIyBUaGlzIHRlc3QgY2FzZSBjaG9vc2VzIGEgaGF5c3RhY2sgb2Ygc2l6ZSAyNjAsMDAwLCBzaW5jZSBwcm9kZGluZworKyMgd2l0aCBnZGIgc2hvd2VkIGEgcmVhbGxvY2F0aW9uIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoYXQgaW4gZmlsbGJ1Zi4KKysjIFRvIHJlYWNoIHRoZSBidWdneSBjb2RlLCB0aGUgbmVlZGxlIG11c3QgaGF2ZSBsZW5ndGggPCAxLzExIHRoYXQgb2YKKysjIHRoZSBoYXlzdGFjaywgYW5kIDEwLDAwMCBpcyBhIG5pY2Ugcm91bmQgbnVtYmVyIHRoYXQgZml0cyB0aGUgYmlsbC4KKytwcmludGYgJyUwMjYwMDAwZFh5XG4nIDAgfCBncmVwIC1GICQocHJpbnRmICUwMTAwMDBkeSAwKQorKworK3Rlc3QgJD8gPSAxIHx8IGZhaWw9MQorKworK0V4aXQgJGZhaWwKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NjEwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JlcC9ncmVwXzIuMjEuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJHTlUgZ3JlcCB1dGlsaXR5IgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvZ3JlcC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvP2dyb3VwPWdyZXAiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODAwNmQ5YzgxNDI3N2MxYmZjNGNhMjJhZjk0YjU5ZWUiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9ncmVwL2dyZXAtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3JlcC1maXgtQ1ZFLTIwMTUtMTM0NS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDNjNDgwNjRkNjQwOTg2MmI4YTg1MGRiODNjODAzOGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTI0NGExMWMwMGRlZThlN2U1ZTcxNGI5YWFhMDUzYWM2Y2JmYTI3ZTEwNGFiZWUyMGQzYzc3OGU0YmIwZTVkZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcGVybC1yZWdleHAiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2luaXQubTQKK30KKworZG9faW5zdGFsbCAoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZ3JlcAorCW12ICR7RH0ke2JpbmRpcn0vZWdyZXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2VncmVwCisJbXYgJHtEfSR7YmluZGlyfS9mZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZmdyZXAKKwlybWRpciAke0R9JHtiaW5kaXJ9LworfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJncmVwIGVncmVwIGZncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2dyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZWdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2VncmVwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2ZncmVwXSA9ICIke2Jhc2VfYmluZGlyfS9mZ3JlcCIKKworZXhwb3J0IENPTkZJR19TSEVMTD0iL2Jpbi9zaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyZXAvZ3JlcF8yLjUuMWEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEyZGEyOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncmVwL2dyZXBfMi41LjFhLmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiUGF0dGVybiBtYXRjaGluZyB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJUaGUgR05VIHZlcnNpb25zIG9mIGNvbW1vbmx5IHVzZWQgZ3JlcCB1dGlsaXRpZXMuICBUaGUgZ3JlcCBjb21tYW5kIHNlYXJjaGVzIG9uZSBvciBtb3JlIGlucHV0IFwKK2ZpbGVzIGZvciBsaW5lcyBjb250YWluaW5nIGEgbWF0Y2ggdG8gYSBzcGVjaWZpZWQgcGF0dGVybi4iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDYzNmU3M2ZmMDIxNWU4ZDY3MmRjNGMzMmMzMTdiYjMiCisKK1BSID0gInIyIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JlcC9ncmVwLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vdWNsaWJjLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ncmVwX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nZXR0ZXh0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeDY0LWludC10by1wb2ludGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL01ha2V2YXJzIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtQ1ZFLTIwMTItNTY2Ny5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZm9yLXRleGluZm8tNS4xLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dyZXAtZWdyZXAtZmdyZXAtRml4LUxTQi1ORy1jYXNlcy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTIyMDJmZTQ2Mjc3MGZhNmJlMWJiNjY3YmQ2Y2YzMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzhjOGEyYmI5MjIzZDFmYjFiMTBiZGQ2MDdjZjQ0ODMwYWZjOTJmZDQ1MWFjNGNkMDc2MTliZjkyYmRkMzEzMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORl9JTkNMVURFRF9SRUdFWCA9ICItLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXgiCitFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVhfbGliYy1tdXNsID0gIi0td2l0aC1pbmNsdWRlZC1yZWdleCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1wZXJsLXJlZ2V4cCBcCisgICAgICAgICAgICAgICAgJHtFWFRSQV9PRUNPTkZfSU5DTFVERURfUkVHRVh9IgorCitDRkxBR1MgKz0gIi1EIFBST1RPVFlQRVMiCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJcm0gLWYgJHtTfS9tNC9pbml0Lm00CisJY3AgLWYgJHtXT1JLRElSfS9NYWtldmFycyAke1N9L3BvLworfQorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisJbXYgJHtEfSR7YmluZGlyfS9ncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9ncmVwCisJbXYgJHtEfSR7YmluZGlyfS9lZ3JlcCAke0R9JHtiYXNlX2JpbmRpcn0vZWdyZXAKKwltdiAke0R9JHtiaW5kaXJ9L2ZncmVwICR7RH0ke2Jhc2VfYmluZGlyfS9mZ3JlcAorCXJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImdyZXAgZWdyZXAgZmdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3JlcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtlZ3JlcF0gPSAiJHtiYXNlX2JpbmRpcn0vZWdyZXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZmdyZXBdID0gIiR7YmFzZV9iaW5kaXJ9L2ZncmVwIgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtZml4LWJpbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTlhZTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZF0KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5zdWIgfCAgIDEwICsrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQorCistLS0gYS9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCisrKysgYi9jb250cmliL2dyb2ZmZXIvTWFrZWZpbGUuc3ViCitAQCAtMzgsMTYgKzM4LDE2IEBAIGdyb2ZmZXI6IGdyb2ZmZXIuc2ggZ3JvZmZlcjIuc2ggdmVyc2lvbi4KKyAJJChSTSkgJEA7CisgCXNlZCBcCisgICAgICAgICAgICAgLWUgInN8QGdAfCQoZyl8ZyIgXAorLQkgICAgLWUgInN8QEJJTkRJUkB8JChERVNURElSKSQoYmluZGlyKXxnIiBcCisrCSAgICAtZSAic3xAQklORElSQHwkKGJpbmRpcil8ZyIgXAorIAkgICAgLWUgInN8QGxpYmRpckB8JChERVNURElSKSQobGliZGlyKXxnIiBcCisgCSAgICAtZSAic3xAVkVSU0lPTkB8JCh2ZXJzaW9uKSQocmV2aXNpb24pfGciIFwKKyAJICAgICQoc3JjZGlyKS9ncm9mZmVyLnNoID4kQDsKKyAJY2htb2QgK3ggJEAKKyAKKyBpbnN0YWxsX2RhdGE6IGdyb2ZmZXIKKy0JLXRlc3QgLWQgJChERVNURElSKSQoYmluZGlyKSB8fCAkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGJpbmRpcikKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorLQkkKElOU1RBTExfU0NSSVBUKSBncm9mZmVyICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktdGVzdCAtZCAkKGJpbmRpcikgfHwgJChta2luc3RhbGxkaXJzKSAkKGJpbmRpcikKKysJLSQoUk0pICQoYmluZGlyKS9ncm9mZmVyCisrCSQoSU5TVEFMTF9TQ1JJUFQpIGdyb2ZmZXIgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLXRlc3QgLWQgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyIHx8IFwKKyAgICAgICAgICAgJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChsaWJkaXIpL2dyb2ZmL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorQEAgLTU4LDcgKzU4LDcgQEAgaW5zdGFsbF9kYXRhOiBncm9mZmVyCisgCSQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci92ZXJzaW9uLnNoCisgCisgdW5pbnN0YWxsX3N1YjoKKy0JLSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvZ3JvZmZlcgorKwktJChSTSkgJChiaW5kaXIpL2dyb2ZmZXIKKyAJLSQoUk0pICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlci9ncm9mZmVyMi5zaAorIAktJChSTSkgJChERVNURElSKSQobGliZGlyKS9ncm9mZi9ncm9mZmVyL3ZlcnNpb24uc2gKKyAJLXJtZGlyICQoREVTVERJUikkKGxpYmRpcikvZ3JvZmYvZ3JvZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvZ3JvZmYtMS4xOC4xLjQtcmVtb3ZlLW1vbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjRlZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CistLS0KKyBncm9mZi0xLjE4LjEuNC9NYWtlZmlsZS5pbiB8ICAgIDcgKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgNiBkZWxldGlvbnMoLSkKKworLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNDYwLDI3ICs0NjAsMjIgQEAgT1RIRVJESVJTPVwKKyAgIHNyYy9yb2ZmL2dyb2cgXAorICAgc3JjL3JvZmYvbnJvZmYgXAorICAgY29udHJpYi9tbSBcCisgICBjb250cmliL3BpYzJncmFwaCBcCisgICBjb250cmliL2VxbjJncmFwaCBcCistICBjb250cmliL2dyb2ZmZXIgXAorLSAgY29udHJpYi9tb20gXAorLSAgZG9jCisrICBjb250cmliL2dyb2ZmZXIKKyBBTExESVJTPSQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSBcCisgICAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSAkKFRUWURFVkRJUlMpICQoT1RIRVJESVJTKQorIEVYVFJBRElSUz1cCisgICBmb250L2RldnBzL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2ZHZpL2dlbmVyYXRlIFwKKyAgIGZvbnQvZGV2bGo0L2dlbmVyYXRlIFwKKy0gIHNyYy94ZGl0dmlldyBcCisgICBkb2MKKyBOT01BS0VESVJTPVwKKyAgIGFyY2gvZGpncHAgXAorICAgY29udHJpYi9tbS9leGFtcGxlcyBcCisgICBjb250cmliL21tL21tIFwKKy0gIGNvbnRyaWIvbW9tL2V4YW1wbGVzIFwKKy0gIGNvbnRyaWIvbW9tL21vbWRvYyBcCisgICBzcmMvbGlicy9zbnByaW50ZgorIERJU1RESVJTPVwKKyAgICQoSU5DRElSUykgJChMSUJESVJTKSAkKFBST0dESVJTKSAkKERFVkRJUlMpICQoT1RIRVJERVZESVJTKSBcCisgICAkKEFMTFRUWURFVkRJUlMpICQoT1RIRVJESVJTKSAkKEVYVFJBRElSUykgJChOT01BS0VESVJTKQorIFRBUkdFVFM9YWxsIGluc3RhbGwgaW5zdGFsbF9iaW4gaW5zdGFsbF9kYXRhIGNsZWFuIGRpc3RjbGVhbiBtb3N0bHljbGVhbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWFuLWxvY2FsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2YxYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21hbi1sb2NhbC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdyb2ZmLTEuMTguMS40Lm9yaWcvdG1hYy9tYW4ubG9jYWwJMjAwMC0xMC0yNiAyMjoxNToxNy4wMDAwMDAwMDAgKzA4MDAKKysrKyBncm9mZi0xLjE4LjEuNC90bWFjL21hbi5sb2NhbAkyMDEwLTA4LTI0IDE0OjE3OjUyLjA3MDAwNjY2NCArMDgwMAorQEAgLTEsMiArMSwyNyBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGFuLW9sZC50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gYW4tb2xkLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4xOC4xLjQvbWRvYy1sb2NhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDljMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMTguMS40L21kb2MtbG9jYWwucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBncm9mZi0xLjE4LjEuNC90bWFjL21kb2MubG9jYWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjE4LjEuNC5vcmlnL3RtYWMvbWRvYy5sb2NhbAkyMDAxLTAzLTIzIDA4OjE3OjUxLjAwMDAwMDAwMCArMDgwMAorKysrIGdyb2ZmLTEuMTguMS40L3RtYWMvbWRvYy5sb2NhbAkyMDEwLTA4LTI0IDE0OjIwOjIyLjAxNDAwNjg0NiArMDgwMAorQEAgLTEsMiArMSwyNiBAQAorIC5cIiBUaGlzIGZpbGUgaXMgbG9hZGVkIGFmdGVyIGRvYy50bWFjLgorIC5cIiBQdXQgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgdG8gZG9jLnRtYWMgaGVyZS4KKysuCisrLmlmIG4gXHtcCisrLiAgXCIgRGViaWFuOiBNYXAgXChvcSB0byAnIHJhdGhlciB0aGFuIGAgaW4gbnJvZmYgbW9kZSBmb3IgZGV2aWNlcyBvdGhlcgorKy4gIFwiIHRoYW4gdXRmOC4KKysuICBpZiAhJ1wqWy5UXSd1dGY4JyBcCisrLiAgICB0ciBcW29xXScKKysuCisrLiAgXCIgRGViaWFuOiBEaXNhYmxlIHRoZSB1c2Ugb2YgU0dSIChBTlNJIGNvbG91cikgZXNjYXBlIHNlcXVlbmNlcyBieQorKy4gIFwiIGdyb3R0eS4KKysuICBpZiAnXFZbR1JPRkZfU0dSXScnIFwKKysuICAgIG91dHB1dCB4IFggdHR5OiBzZ3IgMAorKy4KKysuICBcIiBEZWJpYW46IE1hcCBcLSB0byB0aGUgVW5pY29kZSBIWVBIRU4tTUlOVVMgY2hhcmFjdGVyLCB0byBtYWtlCisrLiAgXCIgc2VhcmNoaW5nIGluIG1hbiBwYWdlcyBlYXNpZXIuCisrLiAgaWYgJ1wqWy5UXSd1dGY4JyBcCisrLiAgICBjaGFyIFwtIFxOJzQ1JworKy4KKysuICBcIiBEZWJpYW46IE1hbnkgVVRGLTggbWFuIHBhZ2VzIHVzZSAiLSIgaW5zdGVhZCBvZiAiXC0iIGZvciBkYXNoZXMgc3VjaAorKy4gIFwiIGFzIHRob3NlIGluIGNvbW1hbmQtbGluZSBvcHRpb25zLiBUaGlzIGlzIGEgYnVnIGluIHRob3NlIHBhZ2VzLCBidXQKKysuICBcIiB0b28gbWFueSBmb250cyBhcmUgbWlzc2luZyB0aGUgVW5pY29kZSBIWVBIRU4gY2hhcmFjdGVyLCBzbyB3ZSByZW5kZXIKKysuICBcIiB0aGlzIGFzIHRoZSBBU0NJSS1jb21wYXRpYmxlIEhZUEhFTi1NSU5VUyBpbnN0ZWFkLgorKy4gIGlmICdcKlsuVF0ndXRmOCcgXAorKy4gICAgY2hhciAtIFxOJzQ1JworKy5cfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWI0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmYtMS4yMi4zLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBiOTU2NWRjMmZlMGM0ZjdkYWFlYzkxYjdlODNiYzczMTNkZWUyZjRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTMgQXByIDIwMTUgMTc6MDI6MTMgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gVW5zZXQgbmVlZF9jaGFyc2V0X2FsaWFzIHdoZW4gYnVpbGRpbmcgZm9yIG11c2wKKworbG9jYWxjaGFyc2V0IHVzZXMgYWNfY3ZfZ251X2xpYnJhcnlfMl8xIGZyb20gZ2xpYmMyMS5tNAord2hpY2ggYWN0dWFsbHkgc2hvdWRsIGJlIGZpeGVkIGluIGdudWxpYiBhbmQgdGhlbiBhbGwgZG93bnN0cmVhbQorcHJvamVjdHMgd2lsbCBnZXQgaXQgZXZlbnR1YWxseS4gRm9yIG5vdyB3ZSBhcHBseSB0aGUgZml4IHRvCitjb3JldXRpbHMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWIvZ251bGliLm1rIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDogZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBncm9mZi0xLjIyLjMub3JpZy9zcmMvbGlicy9nbnVsaWIvbGliL01ha2VmaWxlLmFtCisrKysgZ3JvZmYtMS4yMi4zL3NyYy9saWJzL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KK0BAIC0xMTMsNyArMTEzLDcgQEAgaW5zdGFsbC1leGVjLWxvY2FsY2hhcnNldDogYWxsLWxvY2FsCisgCSAgY2FzZSAnJChob3N0X29zKScgaW4gXAorIAkgICAgZGFyd2luWzU2XSopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLQkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikgXAorKwkgICAgZGFyd2luKiB8IGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKiB8IGxpbnV4LW11c2wqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz1mYWxzZSA7OyBcCisgCSAgICAqKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZi0xLjIyLjMvZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzMzMjhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmLTEuMjIuMy9ncm9mZi0xLjIyLjItY29ycmVjdC1tYW4ubG9jYWwtaW5zdGFsbC1wYXRoLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0NvcnJlY3QgdGhlIGluc3RhbGwgcGF0aCBvZiBtYW4ubG9jYWwgdG8gZml4IGZvbGxvd2luZyBlcnJvcjoKKyAgICAveW9jdG8vYnVpbGQvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvZ3JvZmYvMS4yMi4yL3RtYWMvYW4tb2xkLnRtYWM6NjkwOiB3YXJuaW5nOiBjYW4ndCBmaW5kIG1hY3JvIGZpbGUgYG1hbi5sb2NhbCcKKworU2lnbmVkLW9mZi1ieTogWmhlbmh1YSBMdW8gPHpoZW5odWEubHVvQGZyZWVzY2FsZS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtLWdpdCBhL3RtYWMvTWFrZWZpbGUuc3ViIGIvdG1hYy9NYWtlZmlsZS5zdWIKK2luZGV4IDE1MDYyMzIuLmYxNDY4YzUgMTAwNjQ0CistLS0gYS90bWFjL01ha2VmaWxlLnN1YgorKysrIGIvdG1hYy9NYWtlZmlsZS5zdWIKK0BAIC0xMjEsOSArMTIxLDkgQEAgaW5zdGFsbF9kYXRhOiAkKE5PUk1BTEZJTEVTKSAkKFNQRUNJQUxGSUxFUykgbWFuLmxvY2FsIFwKKyAJICAkKFJNKSAkKERFU1RESVIpJChtZG9jZGlyKS8kJGY7IFwKKyAJICAkKElOU1RBTExfREFUQSkgJCRmLXMgJChERVNURElSKSQobWRvY2RpcikvJCRmOyBcCisgCWRvbmUKKy0JLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tYW4ubG9jYWwgXAorKwktdGVzdCAtZiAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgIHx8ICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbWFuLmxvY2FsIFwKKy0JICAgICAgICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsCisrCSAgICAgICAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwKKyAJLXRlc3QgLWYgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICB8fCAkKElOU1RBTExfREFUQSkgbWRvYy5sb2NhbC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWRvYy5sb2NhbAorIAorQEAgLTE2NCw5ICsxNjQsOSBAQCB1bmluc3RhbGxfc3ViOgorIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS8kKHRtYWNfc19wcmVmaXgpcy50bWFjCisgCSQoUk0pICQoREVTVERJUikkKHRtYWNkaXIpLyQodG1hY19hbl9wcmVmaXgpYW4udG1hYworIAkkKFJNKSAkKERFU1RESVIpJCh0bWFjZGlyKS93d3cudG1hYworLQktaWYgY21wIC1zICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsIFwKKysJLWlmIGNtcCAtcyAkKERFU1RESVIpJCh0bWFjZGlyKS9tYW4ubG9jYWwgXAorIAkgICAgICAgICAgICQoc3JjZGlyKS9tYW4ubG9jYWw7IHRoZW4gXAorLQkgICQoUk0pICQoREVTVERJUikkKGxvY2FsdG1hY2RpcikvbWFuLmxvY2FsOyBcCisrCSAgJChSTSkgJChERVNURElSKSQodG1hY2RpcikvbWFuLmxvY2FsOyBcCisgCWZpCisgCS1pZiBjbXAgLXMgJChERVNURElSKSQobG9jYWx0bWFjZGlyKS9tZG9jLmxvY2FsIFwKKyAJICAgICAgICAgICAkKHNyY2RpcikvbWRvYy5sb2NhbDsgdGhlbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4xOC4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3ODZhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ncm9mZi9ncm9mZl8xLjE4LjEuNC5iYgpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitQUiA9ICJyMSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTQzZmMxNmZjY2Q4NTE5ZmJhNDA1ZjBhMGZmNmU4YTMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS8ke0JQTn0vb2xkLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LXJlbW92ZS1tb20ucGF0Y2g7c3RyaXBsZXZlbD0xIFwKKyAgICAgICAgICBmaWxlOi8vbWFuLWxvY2FsLnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vbWRvYy1sb2NhbC5wYXRjaCBcCisgICAgICAgICAgZmlsZTovL2dyb2ZmLTEuMTguMS40LWZpeC1iaW5kaXIucGF0Y2ggXAorIiAKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbworCitFWFRSQV9PRUNPTkY9Ii0td2l0aG91dC14IC0tcHJlZml4PSR7RH0gLS1leGVjLXByZWZpeD0ke0R9IC0tYmluZGlyPSR7RH0ke2JpbmRpcn0gLS1kYXRhZGlyPSR7RH0ke2RhdGFkaXJ9IC0tbWFuZGlyPSR7RH0ke2RhdGFkaXJ9L21hbiAtLWluZm9kaXI9JHtEfSR7ZGF0YWRpcn1pbmZvIC0td2l0aC1hcHByZXNkaXI9JHtEfSR7ZGF0YWRpcn0iCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjZWVjYjgxNTMzOTM2ZDI1MWVkMDE1ZjQwZTVmNzI4NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjNjN2MzYjZjYWU1ZThjYzUwNjJhMTQ0ZGU1ZWZmMDAyMmU4ZTk3MGUxNzc0NTI5Y2MyZDVkZGU0NmNlNTBkIgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZSAoKXsKKyAgICBvZV9ydW5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgU29tZSBkaXN0cm9zIGhhdmUgYm90aCAvYmluL3BlcmwgYW5kIC91c3IvYmluL3BlcmwsIGJ1dCB3ZSBzZXQgcGVybCBsb2NhdGlvbgorCSMgZm9yIHRhcmdldCBhcyAvdXNyL2Jpbi9wZXJsLCBzbyBmaXggaXQgdG8gL3Vzci9iaW4vcGVybC4KKwlmb3IgaSBpbiBhZm10b2RpdCBtbXJvZmY7IGRvCisJCWlmIFsgLWYgJHtEfSR7YmluZGlyfS8kaSBdOyB0aGVuCisJCQlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhICR7VVNSQklOUEFUSH0vZW52IHBlcmwsJyAke0R9JHtiaW5kaXJ9LyRpCisJCWZpCisJZG9uZQorCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYKKwljcCAtcmYgJHtEfSR7ZGF0YWRpcn0vZ3JvZmYvc2l0ZS10bWFjLyogJHtEfSR7c3lzY29uZmRpcn0vZ3JvZmYvCisJY3AgLXJmICR7RH0ke2RhdGFkaXJ9L2dyb2ZmL3NpdGUtdG1hYy8qICR7RH0ke2RhdGFkaXJ9L2dyb2ZmLyR7UFZ9L3RtYWMvCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSgpIHsKKwlsbiAtcyB0YmwgJEQke2JpbmRpcn0vZ3RibAorCWVjaG8gImV4cG9ydCBHUk9GRl9GT05UX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS9mb250IiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorCWVjaG8gImV4cG9ydCBHUk9GRl9UTUFDX1BBVEg9L3Vzci9zaGFyZS9ncm9mZi8ke1BWfS90bWFjIiA+PiAkRCR7c3lzY29uZmRpcn0vcHJvZmlsZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3JvZmYvZ3JvZmZfMS4yMi4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZmYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2dyb2ZmL2dyb2ZmXzEuMjIuMy5iYgpAQCAtMCwwICsxLDcwIEBACitTVU1NQVJZID0gIkdOVSBUcm9mZiBzb2Z0d2FyZSIKK0RFU0NSSVBUSU9OID0gIlRoZSBncm9mZiAoR05VIHRyb2ZmKSBzb2Z0d2FyZSBpcyBhIHR5cGVzZXR0aW5nIHBhY2thZ2Ugd2hpY2ggcmVhZHMgcGxhaW4gdGV4dCBtaXhlZCB3aXRoIFwKK2Zvcm1hdHRpbmcgY29tbWFuZHMgYW5kIHByb2R1Y2VzIGZvcm1hdHRlZCBvdXRwdXQuIgorU0VDVElPTiA9ICJiYXNlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dyb2ZmLyIKK0xJQ0VOU0UgPSAiR1BMdjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3JvZmYvZ3JvZmYtJHtQVn0udGFyLmd6IFwKKwlmaWxlOi8vZ3JvZmYtMS4yMi4yLWNvcnJlY3QtbWFuLmxvY2FsLWluc3RhbGwtcGF0aC5wYXRjaCBcCisJZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2M4MjVmYTY0YmM3MzA2YTg4NWYyZmIyMjY4ZDNlYzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2E0OGE5ZDZjOTc3NTBiZmJkNTM1ZmVlYjViZTAxMTFkYjY0MDZkZGI3YmI3OWZjNjgwODA5Y2RhNmQ4MjhhNSIKKworREVQRU5EUyA9ICJncm9mZi1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCitSREVQRU5EU18ke1BOfSArPSAicGVybCBzZWQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC14IgorUEFSQUxMRUxfTUFLRSA9ICIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWlmIFsgIiR7QlVJTERfU1lTfSIgIT0gIiR7SE9TVF9TWVN9IiBdOyB0aGVuCisJCXNlZCAtaSBcCisJCSAgICAtZSAnL15HUk9GRkJJTj0vczo9Lio6PSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9ncm9mZjonIFwKKwkJICAgIC1lICcvXlRST0ZGQklOPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3Ryb2ZmOicgXAorCQkgICAgLWUgJy9eR1JPRkZfQklOX1BBVEg9L3M6PS4qOj0ke1NUQUdJTkdfQklORElSX05BVElWRX06JyBcCisJCSAgICAtZSAnL15HUk9GRl9CSU5fRElSPS9zOj0uKjo9JHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9OicgXAorCQkgICAgJHtTfS9jb250cmliLyovTWFrZWZpbGUuc3ViIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLmluIFwKKwkJICAgICR7U30vZG9jL01ha2VmaWxlLnN1YgorCWZpCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisgICAgIyBnZW5lcmF0ZSBnbnVsaWIgY29uZmlndXJlIHNjcmlwdAorICAgIG9sZGRpcj1gcHdkYAorICAgIGNkICR7U30vc3JjL2xpYnMvZ251bGliLworICAgIEFDTE9DQUw9IiRBQ0xPQ0FMIiBhdXRvcmVjb25mIC1XY3Jvc3MgLS12ZXJib3NlIC0taW5zdGFsbCAtLWZvcmNlICR7RVhUUkFfQVVUT1JFQ09ORn0gJGFjcGF0aHMgfHwgZGllICJhdXRvcmVjb25mIGV4ZWN1dGlvbiBmYWlsZWQuIgorICAgIGNkICR7b2xkZGlyfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIFNvbWUgZGlzdHJvcyBoYXZlIGJvdGggL2Jpbi9wZXJsIGFuZCAvdXNyL2Jpbi9wZXJsLCBidXQgd2Ugc2V0IHBlcmwgbG9jYXRpb24KKwkjIGZvciB0YXJnZXQgYXMgL3Vzci9iaW4vcGVybCwgc28gZml4IGl0IHRvIC91c3IvYmluL3BlcmwuCisJZm9yIGkgaW4gYWZtdG9kaXQgbW1yb2ZmIGdyb3BkZiBwZGZtb20gZ3JvZzsgZG8KKwkJaWYgWyAtZiAke0R9JHtiaW5kaXJ9LyRpIF07IHRoZW4KKwkJCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vJGkKKwkJZmkKKwlkb25lCisJaWYgWyAtZSAke0R9JHtsaWJkaXJ9L2NoYXJzZXQuYWxpYXMgXTsgdGhlbgorCQlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV9jbWRsaW5lX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ3JvZmYgXAorCQktRiR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L2ZvbnQgXAorCQktTSR7U1RBR0lOR19ESVJfTkFUSVZFfSR7ZGF0YWRpcl9uYXRpdmV9L2dyb2ZmLyR7UFZ9L3RtYWMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vc2l0ZS10bWFjIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vJHtCUE59L2dyb2ZmZXIvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvZHVwLWRlZi1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllOGQyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS4zLjEyL2R1cC1kZWYtZml4LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2d6aXAgdXNlcyBnbnVsaWIsIHdob3NlIGhlYWRlciBjb25mbGljdCB3aXRoIGdsaWJjLiBUaGlzIHBhdGNoIHJlbmFtZSBzb21lIGZ1bmN0aW9uIHRvIGF2b2lkIGNvbmZsaWN0LgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9nemlwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjM4LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2d6aXAuYwkyMDEwLTA4LTEzIDEwOjI5OjQ0LjAwMDAwMDAwMCArMDgwMAorQEAgLTE2MzcsNyArMTYzNyw3IEBACisgCX0KKyAgICAgICB9CisgCistICAgIGlmIChmdXRpbWVucyAob2ZkLCBvZm5hbWUsIHRpbWVzcGVjKSAhPSAwKQorKyAgICBpZiAoZnV0aW1lbnNfZ251bGliIChvZmQsIG9mbmFtZSwgdGltZXNwZWMpICE9IDApCisgICAgICAgeworIAlpbnQgZSA9IGVycm5vOworIAlXQVJOICgoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSkpOworSW5kZXg6IGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnemlwLTEuMy4xMi5vcmlnL2xpYi91dGltZW5zLmMJMjAxMC0wOC0xMyAxMDozMzo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBnemlwLTEuMy4xMi9saWIvdXRpbWVucy5jCTIwMTAtMDgtMTMgMTA6MzQ6MDIuMDAwMDAwMDAwICswODAwCitAQCAtNzUsNyArNzUsNyBAQAorICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIChzZXR0aW5nIGVycm5vKSBvbiBmYWlsdXJlLiAgKi8KKyAKKyBpbnQKKy1mdXRpbWVucyAoaW50IGZkIEFUVFJJQlVURV9VTlVTRUQsCisrZnV0aW1lbnNfZ251bGliIChpbnQgZmQgQVRUUklCVVRFX1VOVVNFRCwKKyAJICBjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworICAgLyogU29tZSBMaW51eC1iYXNlZCBORlMgY2xpZW50cyBhcmUgYnVnZ3ksIGFuZCBtaXNoYW5kbGUgdGltZSBzdGFtcHMKK0BAIC0xODUsNSArMTg1LDUgQEAKKyBpbnQKKyB1dGltZW5zIChjaGFyIGNvbnN0ICpmaWxlLCBzdHJ1Y3QgdGltZXNwZWMgY29uc3QgdGltZXNwZWNbMl0pCisgeworLSAgcmV0dXJuIGZ1dGltZW5zICgtMSwgZmlsZSwgdGltZXNwZWMpOworKyAgcmV0dXJuIGZ1dGltZW5zX2dudWxpYiAoLTEsIGZpbGUsIHRpbWVzcGVjKTsKKyB9CitJbmRleDogZ3ppcC0xLjMuMTIvbGliL3V0aW1lbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd6aXAtMS4zLjEyLm9yaWcvbGliL3V0aW1lbnMuaAkyMDEwLTA4LTEzIDEwOjE0OjU3LjAwMDAwMDAwMCArMDgwMAorKysrIGd6aXAtMS4zLjEyL2xpYi91dGltZW5zLmgJMjAxMC0wOC0xMyAxMDoyMTo0NS4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xLDMgKzEsMyBAQAorICNpbmNsdWRlIDx0aW1lLmg+CistaW50IGZ1dGltZW5zIChpbnQsIGNoYXIgY29uc3QgKiwgc3RydWN0IHRpbWVzcGVjIGNvbnN0IFsyXSk7CisraW50IGZ1dGltZW5zX2dudWxpYiAoaW50LCBjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOworIGludCB1dGltZW5zIChjaGFyIGNvbnN0ICosIHN0cnVjdCB0aW1lc3BlYyBjb25zdCBbMl0pOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLTEuMy4xMi9tNC1leHRlbnNpb25zLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjJmNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjMuMTIvbTQtZXh0ZW5zaW9ucy1maXgucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorcmVtb3ZlIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyB0byBmaXggdGhlIGF1dG9jb25mIGVycm9yICJBQ19SRVFVSVJFOiBjaXJjdWxhcgorZGVwZW5kZW5jeSBvZiBBQ19HTlVfU09VUkNFIgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK0luZGV4OiBnemlwLTEuMy4xMi9tNC9leHRlbnNpb25zLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ3ppcC0xLjMuMTIub3JpZy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDgtMTYgMTQ6MTg6MTYuMDAwMDAwMDAwICswODAwCisrKysgZ3ppcC0xLjMuMTIvbTQvZXh0ZW5zaW9ucy5tNAkyMDEwLTA4LTE2IDE0OjIxOjU0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEyLDQ0ICsxMiw2IEBACisgIyBlbm91Z2ggaW4gdGhpcyBhcmVhIGl0J3MgbGlrZWx5IHdlJ2xsIG5lZWQgdG8gcmVkZWZpbmUKKyAjIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmb3IgcXVpdGUgc29tZSB0aW1lLgorIAorLSMgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCistIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0jIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCistIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCistQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCistWworLSAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCistICBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKQorLQorLSAgQUNfUkVRVUlSRShbQUNfR05VX1NPVVJDRV0pCistICBBQ19SRVFVSVJFKFtBQ19BSVhdKQorLSAgQUNfUkVRVUlSRShbQUNfTUlOSVhdKQorLQorLSAgQUhfVkVSQkFUSU0oW19fRVhURU5TSU9OU19fXSwKKy1bLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCistI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworLSMgdW5kZWYgX19FWFRFTlNJT05TX18KKy0jZW5kaWYKKy0jaWZuZGVmIF9QT1NJWF9QVEhSRUFEX1NFTUFOVElDUworLSMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCistI2VuZGlmCistI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorLSMgdW5kZWYgX1RBTkRFTV9TT1VSQ0UKKy0jZW5kaWZdKQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgaXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX19dLAorLSAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX19dLAorLSAgICBbQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworLSMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorLQkgIEFDX0lOQ0xVREVTX0RFRkFVTFRdKV0sCistICAgICAgIFthY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz15ZXNdLAorLSAgICAgICBbYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX189bm9dKV0pCistICB0ZXN0ICRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyA9IHllcyAmJgorLSAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKy0gIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKy0gIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCistCisgIyBnbF9VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC0xLjYvd3JvbmctcGF0aC1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NjNkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXAtMS42L3dyb25nLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK2ZpeCBNYWtlTWFrZXIgaXNzdWVzIHdpdGggdXNpbmcgd3JvbmcgU0hFTEwvR1JFUAorCitBIHNldCBvZiBzdWJzdGl0dXRpb24gaXMgYmVpbmcgcHJvY2Vzc2VkIHRvIGFsbCB0YXJnZXQgc2NyaXB0cyB3aXRoIHNlZCBieQorcmVwbGFjaW5nIHNvbWUga2V5IHdvcmRzIHdpdGggdGhlIGRldGVjdGVkIHZhbHVlcyBhdCBjb25maWd1cmUgdGltZSwgdGhpcworaXMgZXhhY3RseSBub3QgY29tcGxpYW50IHdpdGggY3Jvc3MgY29tcGxpbmcsIGFuZCB3aWxsIGNhdXNlIG1pc3NpbmcgcGF0aAorZXJyb3JzIGF0IHJ1biB0aW1lIGxpa2U6CisiL3Vzci9iaW4vemdyZXA6IGxpbmUgMjMwOiAvdXNyL2Jpbi9ncmVwOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorCitGaXhlZCBieSByZW1vdmluZyB1bm5lZWRlZCBzdWJzdGl0dXRpb24gYW5kIHVzaW5nIHJlYWwgcnVudGltZSBwYXRocworaW5zdGVhZC4KKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ3ppcC0xLjMuMTIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2RpZmYgLXVycE4gYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDEzLTExLTMwIDEwOjA2OjA5LjQwMjIzNDg3MSArMDgwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0xMS0zMCAxMDoxMzo0Mi45NTIyMzYwMjUgKzA4MDAKK0BAIC04MSw5ICs4MSw4IEBAIGd6aXAuZG9jLmd6OiBnemlwLmRvYyAkKGJpbl9QUk9HUkFNUykKKyBTVUZGSVhFUyA9IC5pbgorIC5pbjoKKyAJJChBTV9WX0dFTilzZWQgXAorLQkJLWUgJ3N8L2Jpbi9zaHwkKFNIRUxMKXxnJyBcCisgCQktZSAnc3xbQF1iaW5kaXJAfCdcJyckKGJpbmRpciknXCcnfGcnIFwKKy0JCS1lICdzfFtAXUdSRVBAfCQoR1JFUCl8ZycgXAorKwkJLWUgJ3N8W0BdR1JFUEB8JChiYXNlX2JpbmRpcikvZ3JlcHxnJyBcCisgCQktZSAnc3xbQF1WRVJTSU9OQHwkKFZFUlNJT04pfGcnIFwKKyAJCSQoc3JjZGlyKS8kQC5pbiA+JEAtdCBcCisgCSAgJiYgY2htb2QgYSt4ICRALXQgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDQ4MGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcC5pbmMKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJTdGFuZGFyZCBHTlUgY29tcHJlc3NvciIKK0RFU0NSSVBUSU9OID0gIkdOVSBHemlwIGlzIGEgcG9wdWxhciBkYXRhIGNvbXByZXNzaW9uIHByb2dyYW0gb3JpZ2luYWxseSB3cml0dGVuIGJ5IEplYW4tbG91cCBHYWlsbHkgZm9yIHRoZSBHTlUgXAorcHJvamVjdC4gTWFyayBBZGxlciB3cm90ZSB0aGUgZGVjb21wcmVzc2lvbiBwYXJ0IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2d6aXAvIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorIyBjaGFuZ2UgdG8gR1BMdjMrIGluIDIwMDcvMDcuIFByZXZpb3VzIEdQTHYyIHZlcnNpb24gaXMgMS4zLjEyCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRVhUUkFfT0VNQUtFX2NsYXNzLXRhcmdldCA9ICJHUkVQPSR7YmFzZV9iaW5kaXJ9L2dyZXAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwkjIFJlbmFtZSBhbmQgbW92ZSBmaWxlcyBpbnRvIC9iaW4gKEZIUyksIHdoaWNoIGlzIHR5cGljYWwgcGxhY2UgZm9yIGd6aXAKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCW12ICR7RH0ke2JpbmRpcn0vZ3VuemlwICR7RH0ke2Jhc2VfYmluZGlyfS9ndW56aXAKKwltdiAke0R9JHtiaW5kaXJ9L2d6aXAgJHtEfSR7YmFzZV9iaW5kaXJ9L2d6aXAKKwltdiAke0R9JHtiaW5kaXJ9L3pjYXQgJHtEfSR7YmFzZV9iaW5kaXJ9L3pjYXQKKwltdiAke0R9JHtiaW5kaXJ9L3VuY29tcHJlc3MgJHtEfSR7YmFzZV9iaW5kaXJ9L3VuY29tcHJlc3MKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3VuemlwXSA9ICIke2Jhc2VfYmluZGlyfS9ndW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3ppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3ppcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVt6Y2F0XSA9ICIke2Jhc2VfYmluZGlyfS96Y2F0IgorCitleHBvcnQgQ09ORklHX1NIRUxMPSIvYmluL3NoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuMy4xMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDA2MjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2d6aXAvZ3ppcF8xLjMuMTIuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBnemlwLmluYworCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d6aXAuaDtlbmRsaW5lPTIyO21kNT1jMDkzNGFkMTkwMGQ5MjdmODY1NTYxNTNkNGM3NmQyMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9sencuaDtlbmRsaW5lPTE5O21kNT1jMjczZTA5YTAyZWRkOTgwMWNjNzRkMzk2ODMwNDllOSAiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nemlwL2d6aXAtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL200LWV4dGVuc2lvbnMtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2R1cC1kZWYtZml4LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjViYWMyZDIxODQwYWUwNzdlMDIxN2JjNWU0ODQ1YjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2Y1NjViZTA1ZjdmM2QxYWZmMTE3YzAzMGViN2M3MzgzMDA1MTBiN2QwOThjZWRlYTc5NmNhOGU0Y2Q1ODdhZiIKKworUFIgPSAicjIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9nemlwL2d6aXBfMS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDdmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvZ3ppcC9nemlwXzEuNi5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIGd6aXAuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMrIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vZ3ppcC8ke0JQfS50YXIuZ3oiCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIGZpbGU6Ly93cm9uZy1wYXRoLWZpeC5wYXRjaCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3ppcC5oO2JlZ2lubGluZT04O2VuZGxpbmU9MjA7bWQ1PTZlNDdjYWFhNjMwZTBjOGJmOWYxYmM4ZDk0YThlZDBlIgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBnemlwLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzODYwM2NiMjg0M2JmNTY4MWZmNDFhYWIzYmNkNmEyMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5N2ViODNiNzYzZDllNWFkMzVmMzUxZmU1NTE3ZTZiNzE1MjFkN2FhYzdhY2YzZTNjYWNkYjZiMTQ5NmQ4ZjdlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2hkcGFybS9oZHBhcm1fOS40OC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2N2ZkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9oZHBhcm0vaGRwYXJtXzkuNDguYmIKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJVdGlsaXR5IGZvciB2aWV3aW5nL21hbmlwdWxhdGluZyBJREUgZGlzayBkcml2ZS9kcml2ZXIgcGFyYW1ldGVycyIKK0RFU0NSSVBUSU9OID0gImhkcGFybSBpcyBhIExpbnV4IHNoZWxsIHV0aWxpdHkgZm9yIHZpZXdpbmcgXAorYW5kIG1hbmlwdWxhdGluZyB2YXJpb3VzIElERSBkcml2ZSBhbmQgZHJpdmVyIHBhcmFtZXRlcnMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QiCitMSUNFTlNFX3dpcGVyID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5UWFQ7bWQ1PTkxMGE4YTQyYzk2MmQyMzg2MTljNzVmZGI3OGJkYjI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PWE4MmQ3YmEzYWRlOWU4ZWM5MDI3NDlkYjk4YzU5MmYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3dpcGVyL0dQTHYyLnR4dDttZDU9ZmNiMDJkYzU1MmEwNDFkZWUyN2U0Yjg1YzczOTYwNjcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd2lwZXIvd2lwZXIuc2g7YmVnaW5saW5lPTc7ZW5kbGluZT0zMTttZDU9YjdiYzY0MmFkZGMxNTJlYTMwNzUwNWJmMWEyOTZmMDkiCisKKworUEFDS0FHRVMgPSsgIndpcGVyIgorCitGSUxFU193aXBlciA9ICIke2JpbmRpcn0vd2lwZXIuc2giCisKK1JERVBFTkRTX3dpcGVyID0gImJhc2ggZ2F3ayBzdGF0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9oZHBhcm0vJHtCUH0udGFyLmd6ICIKKworU1JDX1VSSVttZDVzdW1dID0gIjIxM2VmZGJlNzQ3MWZhZDM0MDgxOTg5MThlMTY0MzU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlOTdiNGE3MWNiMDQxNDZmNTRjZjZmNjk3ODdlN2Y5N2RkZmRhOTgzNmRjODAzYjQ1OWQzYjNkZjNhNGZiZWUiCisKK0VYVFJBX09FTUFLRSArPSAnU1RSSVA9ImVjaG8iJworCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiaGRwYXJtIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2hkcGFybV0gPSAiJHtiYXNlX3NiaW5kaXJ9L2hkcGFybSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmFzZV9zYmluZGlyfSAke0R9LyR7bWFuZGlyfS9tYW44ICR7RH0vJHtiaW5kaXJ9CisJb2VfcnVubWFrZSAnREVTVERJUj0ke0R9JyAnc2JpbmRpcj0ke2Jhc2Vfc2JpbmRpcn0nIGluc3RhbGwKKwljcCAke1N9L3dpcGVyL3dpcGVyLnNoICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtZnVsbC1jbWRsaW5lLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDY5MDczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWZ1bGwtY21kbGluZS5iYgpAQCAtMCwwICsxLDEyIEBACitERVNDUklQVElPTiA9ICJBIGNvbnNvbGUtb25seSBpbWFnZSB3aXRoIG1vcmUgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0gXAorZnVuY3Rpb25hbGl0eSBpbnN0YWxsZWQuIgorCitJTUFHRV9GRUFUVVJFUyArPSAic3BsYXNoIHNzaC1zZXJ2ZXItb3BlbnNzaCIKKworSU1BR0VfSU5TVEFMTCA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtYm9vdCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICAke0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTH0gXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1rZXJuZWwtZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNjM2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2Uta2VybmVsLWRldi5iYgpAQCAtMCwwICsxLDIwIEBACitERVNDUklQVElPTiA9ICJBIGRldmVsb3BtZW50IGltYWdlIHRoYXQgYnVpbGRzIHRoZSBrZXJuZWwgYW5kIHBhY2thZ2VzIHRoYXQgYXJlIFwKK3NlbnNpdGl2ZSB0byBrZXJuZWwgdXBkYXRlcyBhbmQgdmVyc2lvbiBjaGFuZ2VzIgorCisjIENvdWxkIGFsc28gYmUgY29yZS1pbWFnZS1iYXNpYywgYnV0IHdlJ2xsIGtlZXAgdGhpcyBzbWFsbCBmb3Igbm93CityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0tFUk5FTF9ERVZfVVRJTFMgPz0gImRyb3BiZWFyIGNvbm5tYW4iCitLRVJORUxfREVWX1RPT0xTID89ICJwYWNrYWdlZ3JvdXAtY29yZS10b29scy1wcm9maWxlIHBhY2thZ2Vncm91cC1jb3JlLWJ1aWxkZXNzZW50aWFsIGtlcm5lbC1kZXZzcmMiCitLRVJORUxfREVWX01PRFVMRSA/PSAia2VybmVsLW1vZHVsZXMiCisKK0NPUkVfSU1BR0VfRVhUUkFfSU5TVEFMTCArPSAiJHtLRVJORUxfREVWX01PRFVMRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0tFUk5FTF9ERVZfVVRJTFN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtLRVJORUxfREVWX1RPT0xTfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorCisjIFdlIG5lZWQgZXh0cmEgc3BhY2UgZm9yIHRoaW5ncyBsaWtlIGtlcm5lbCBidWlsZHMsIGV0Yy4KK0lNQUdFX1JPT1RGU19FWFRSQV9TUEFDRV9hcHBlbmQgKz0gIisgMzAwMDAwMCIKKworIyBMZXQncyBkZWZpbmUgb3VyIG93biBzdWJzZXQgdG8gdGVzdCwgd2UgY2FuIGxhdGVyIGFkZCBhIG9uLXRhcmdldCBrZXJuZWwgYnVpbGQgZXZlbiEKK0RFRkFVTFRfVEVTVF9TVUlURVMgPSAicGluZyBzc2ggZGYgY29ubm1hbiBzeXNsb2cgc2NwIGRhdGUgZG1lc2cgcGFyc2Vsb2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLWRldi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmRjOWUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1kZXYuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCB3b3JrLiBJdCBcCitjYW4gYmUgdXNlZCBmb3IgY3VzdG9taXphdGlvbiBhbmQgaW1wbGVtZW50YXRpb25zIHRoYXQgY29uZm9ybSB0byBMaW51eCBcCitTdGFuZGFyZCBCYXNlIChMU0IpLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2I2ZTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLWxzYi1zZGsuYmIKQEAgLTAsMCArMSw5IEBACityZXF1aXJlIGNvcmUtaW1hZ2UtbHNiLmJiCisKK0RFU0NSSVBUSU9OID0gIkJhc2ljIGltYWdlIHdpdGhvdXQgWCBzdXBwb3J0IHN1aXRhYmxlIGZvciBMaW51eCBTdGFuZGFyZCBCYXNlIFwKKyhMU0IpIGltcGxlbWVudGF0aW9ucy4gSXQgaW5jbHVkZXMgdGhlIGZ1bGwgbWV0YS10b29sY2hhaW4sIHBsdXMgZGV2ZWxvcG1lbnQgXAoraGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIGZvcm0gYSBzdGFuZGFsb25lIFNESy4iCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJ0b29scy1zZGsgZGV2LXBrZ3MgdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyIKKworSU1BR0VfSU5TVEFMTCArPSAia2VybmVsLWRldnNyYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pbWFnZXMvY29yZS1pbWFnZS1sc2IuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjFjNmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtbHNiLmJiCkBAIC0wLDAgKzEsMTQgQEAKK0RFU0NSSVBUSU9OID0gIkFuIGltYWdlIGNvbnRhaW5pbmcgcGFja2FnZXMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gY29uZm9ybSBcCit0byB0aGUgTGludXggU3RhbmRhcmQgQmFzZSAoTFNCKSBzcGVjaWZpY2F0aW9uLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBzc2gtc2VydmVyLW9wZW5zc2ggaHdjb2RlY3MgcGFja2FnZS1tYW5hZ2VtZW50IgorCitJTUFHRV9JTlNUQUxMID0gIlwKKyAgICAke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAicGFtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzI2MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMuYmIKQEAgLTAsMCArMSwxOSBAQAorREVTQ1JJUFRJT04gPSAiU21hbGwgaW1hZ2UgY2FwYWJsZSBvZiBib290aW5nIGEgZGV2aWNlIHdpdGggY3VzdG9tIGluc3RhbGwgc2NyaXB0cywgXAorYWRkaW5nIGEgc2Vjb25kIHJvb3RmcywgdXNlZCBmb3IgdGVzdGluZy4iCisKKyMgdXNlIC10ZXN0ZnMgbGl2ZS1pbnN0YWxsIHNjcmlwdHMKK1BBQ0tBR0VfSU5TVEFMTCA9ICJpbml0cmFtZnMtbGl2ZS1ib290IGluaXRyYW1mcy1saXZlLWluc3RhbGwtdGVzdGZzIGluaXRyYW1mcy1saXZlLWluc3RhbGwtZWZpLXRlc3RmcyBidXN5Ym94IHVkZXYgYmFzZS1wYXNzd2QgJHtST09URlNfQk9PVFNUUkFQX0lOU1RBTEx9IgorCisjIERvIG5vdCBwb2xsdXRlIHRoZSBpbml0cmQgaW1hZ2Ugd2l0aCByb290ZnMgZmVhdHVyZXMKK0lNQUdFX0ZFQVRVUkVTID0gIiIKKworZXhwb3J0IElNQUdFX0JBU0VOQU1FID0gImNvcmUtaW1hZ2UtdGVzdG1hc3Rlci1pbml0cmFtZnMiCitJTUFHRV9MSU5HVUFTID0gIiIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0ZTVFlQRVMgPSAiJHtJTklUUkFNRlNfRlNUWVBFU30iCitpbmhlcml0IGNvcmUtaW1hZ2UKKworSU1BR0VfUk9PVEZTX1NJWkUgPSAiODE5MiIKK0JBRF9SRUNPTU1FTkRBVElPTlMgKz0gImJ1c3lib3gtc3lzbG9nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL2NvcmUtaW1hZ2UtdGVzdG1hc3Rlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODI5NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy9jb3JlLWltYWdlLXRlc3RtYXN0ZXIuYmIKQEAgLTAsMCArMSwxOCBAQAorREVTQ1JJUFRJT04gPSAiQSBtYXN0ZXIgaW1hZ2UgdG8gYmUgZGVwbG95ZWQgb24gYSB0YXJnZXQgdXNlZnVsIGZvciB0ZXN0aW5nIG90aGVyIGltYWdlcyIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNzaC1zZXJ2ZXItb3BlbnNzaCBwYWNrYWdlLW1hbmFnZW1lbnQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCisjIHRoZSBkZXBsb3kgY29kZSByZXF1aXJlcyBiYXNoIGFuZAorIyBub3JtYWwgbGludXggdXRpbGl0aWVzIG5vdCBidXN5Ym94IG9uZXMKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKyAgICBiYXNoIGNvcmV1dGlscyB1dGlsLWxpbnV4IHRhciBnemlwIGJ6aXAyIGttb2QgXAorICAgIHB5dGhvbi1tb2R1bGVzIHB5dGhvbi1taXNjIFwKKyAgICBlMmZzcHJvZ3MgZTJmc3Byb2dzLW1rZTJmcyBwYXJ0ZWQgXAorICAgICIKKyMgd2UgbmVlZCBhIHBhcnRpY3VsYXIgaW5pdHJhbWZzIGZvciBsaXZlIGltYWdlcworIyB0aGF0IHB1bGxzIGN1c3RvbSBpbnN0YWxsIHNjcmlwdHMgd2hpY2ggdGFrZQorIyBjYXJlIG9mIHBhcnRpdGlvbmluZyBmb3IgdXMKK0lOSVRSRF9JTUFHRSA9ICJjb3JlLWltYWdlLXRlc3RtYXN0ZXItaW5pdHJhbWZzIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNjNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkFuIGV4YW1wbGUgb2YgcGFydGl0aW9uZWQgaW1hZ2UuIgorCitJTUFHRV9JTlNUQUxMID0gInBhY2thZ2Vncm91cC1jb3JlLWJvb3QgJHtST09URlNfUEtHTUFOQUdFX0JPT1RTVFJBUH0iCisKK0lNQUdFX0ZTVFlQRVMgPSAid2ljLmJ6MiIKK1JNX09MRF9JTUFHRSA9ICIxIgorCisjIGNvcmUtaW1hZ2UtbWluaW1hbCBpcyByZWZlcmVuY2VkIGluIC53a3MsIHNvIHdlIG5lZWQgaXRzIHJvb3RmcworIyB0byBiZSByZWFkeSBiZWZvcmUgb3VyIHJvb3RmcworZG9fcm9vdGZzW2RlcGVuZHNdICs9ICJjb3JlLWltYWdlLW1pbmltYWw6ZG9fcm9vdGZzIgorCitJTUFHRV9ST09URlNfRVhUUkFfU1BBQ0UgPSAiMjAwMCIKKworaW5oZXJpdCBpbWFnZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaW1hZ2VzL3dpYy1pbWFnZS1taW5pbWFsLndrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNkOGYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2ltYWdlcy93aWMtaW1hZ2UtbWluaW1hbC53a3MKQEAgLTAsMCArMSwxMCBAQAorIyBzaG9ydC1kZXNjcmlwdGlvbjogRXhhbXBsZSBvZiBwYXJ0aXRpb25lZCBpbWFnZSB3aXRoIGNvbXBsZXggbGF5b3V0CisjIGxvbmctZGVzY3JpcHRpb246IFRoaXMgaW1hZ2UgY29udGFpbnMgYm9vdCBwYXJ0aXRpb24gYW5kIDMgcm9vdGZzIHBhcnRpdGlvbnMKKyMgY3JlYXRlZCBmcm9tIGNvcmUtaW1hZ2UtbWluaW1hbCBhbmQgd2ljLWltYWdlLW1pbmltYWwgaW1hZ2UgcmVjaXBlcy4KKworcGFydCAvYm9vdCAtLXNvdXJjZSBib290aW1nLXBjYmlvcyAtLW9uZGlzayBzZGEgLS1sYWJlbCBib290IC0tYWN0aXZlIC0tYWxpZ24gMTAyNAorcGFydCAvIC0tc291cmNlIHJvb3RmcyAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIHBsYXRmb3JtIC0tYWxpZ24gMTAyNAorcGFydCAvY29yZSAtLXNvdXJjZSByb290ZnMgLS1yb290ZnMtZGlyPWNvcmUtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGNvcmUgLS1hbGlnbiAxMDI0CitwYXJ0IC9iYWNrdXAgLS1zb3VyY2Ugcm9vdGZzIC0tcm9vdGZzLWRpcj13aWMtaW1hZ2UtbWluaW1hbCAtLW9uZGlzayBzZGEgLS1mc3R5cGU9ZXh0MiAtLWxhYmVsIGJhY2t1cCAtLWFsaWduIDEwMjQKKworYm9vdGxvYWRlciAgLS10aW1lb3V0PTAgIC0tYXBwZW5kPSJyb290d2FpdCBjb25zb2xlPXR0eTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvMDAwMS1jb25maWd1cmUtQWRkLW9wdGlvbi10by1lbmFibGUtZGlzYWJsZS1saWJuZm5ldGxpbmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI2MDllMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIDVjNDdjZjUwNjFiODUyYzAyMTc4ZjAxZTIzNjkwYmZlMzhhOTlkOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNyBNYXIgMjAxMyAxMToyMTozNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBjb25maWd1cmU6IEFkZCBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgbGlibmZuZXRsaW5rCisKK1RoaXMgY2hhbmdlcyB0aGUgY29uZmlndXJlIGJlaGF2aW91ciBmcm9tIGF1dG9kZXRlY3RpbmcKK2ZvciBsaWJuZm5ldGxpbmsgdG8gaGF2aW5nIGFuIG9wdGlvbiB0byBkaXNhYmxlIGl0IGV4cGxpY2l0bHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDExICsrKysrKysrLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYmE2MTZhYi4uY2UyZDMxNSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNTMsNiArNTMsOSBAQCBBQ19BUkdfRU5BQkxFKFtsaWJpcHFdLAorIEFDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLCBBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcj1QQVRIXSwKKyAJW1BhdGggdG8gdGhlIHBrZ2NvbmZpZyBkaXJlY3RvcnkgW1tMSUJESVIvcGtnY29uZmlnXV1dKSwKKyAJW3BrZ2NvbmZpZ2Rpcj0iJHdpdGh2YWwiXSwgW3BrZ2NvbmZpZ2Rpcj0nJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKQorK0FDX0FSR19FTkFCTEUoW2xpYm5mbmV0bGlua10sCisrCUFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlibmZuZXRsaW5rXSwgW0RvIG5vdCB1c2UgbmV0ZmlsdGVyIG5ldGxpbmsgbGlicmFyeV0pLAorKwlbZW5hYmxlX2xpYm5mbmV0bGluaz0iJGVuYWJsZXZhbCJdLCBbZW5hYmxlX2xpYm5mbmV0bGluaz0ieWVzIl0pCisgCisgbGliaXB0Y19MREZMQUdTMj0iIjsKKyBBWF9DSEVDS19MSU5LRVJfRkxBR1MoWy1XbCwtLW5vLWFzLW5lZWRlZF0sCitAQCAtODksOSArOTIsMTEgQEAgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MQVJHRUZJTEVdLCBbdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiID0gInllcyJdKQorIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREVWRUxdLCBbdGVzdCAiJGVuYWJsZV9kZXZlbCIgPSAieWVzIl0pCisgQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9MSUJJUFFdLCBbdGVzdCAiJGVuYWJsZV9saWJpcHEiID0gInllcyJdKQorIAorLVBLR19DSEVDS19NT0RVTEVTKFtsaWJuZm5ldGxpbmtdLCBbbGlibmZuZXRsaW5rID49IDEuMF0sCistCVtuZm5ldGxpbms9MV0sIFtuZm5ldGxpbms9MF0pCistQU1fQ09ORElUSU9OQUwoW0hBVkVfTElCTkZORVRMSU5LXSwgW3Rlc3QgIiRuZm5ldGxpbmsiID0gMV0pCisrQVNfSUYoW3Rlc3QgIngkZW5hYmxlX2xpYm5mbmV0bGluayIgPSAieHllcyJdLCBbCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhbbGlibmZuZXRsaW5rXSwgW2xpYm5mbmV0bGluayA+PSAxLjBdKQorKyAgXSkKKysKKytBTV9DT05ESVRJT05BTChbSEFWRV9MSUJORk5FVExJTktdLCBbdGVzdCAieCRlbmFibGVfbGlibmZuZXRsaW5rIiA9ICJ4eWVzIl0pCisgCisgcmVndWxhcl9DRkxBR1M9Ii1XYWxsIC1XYWdncmVnYXRlLXJldHVybiAtV21pc3NpbmctZGVjbGFyYXRpb25zIFwKKyAJLVdtaXNzaW5nLXByb3RvdHlwZXMgLVdyZWR1bmRhbnQtZGVjbHMgLVdzaGFkb3cgLVdzdHJpY3QtcHJvdG90eXBlcyBcCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwMDNkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlcy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKQEAgLTAsMCArMSw4OSBAQAorRnJvbSA3YzA3YjdmZDRmZGQ3ODQ0ZGQwMzJhZjgyMjMwNmYwOGU0NDIyYzM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo0NzoyOSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBmaXggYnVpbGQgd2l0aCBtdXNsCisKK0FkZCBuZWVkZWQgaGVhZGVycyB0aGV5IGFyZSBqdXN0IG5vdCBuZWVkZWQgZm9yIGdsaWJjNisgYnV0IGFsc28KK2ZvciBtdXNsCitEZWZpbmUgYWRkaXRpb25hbCBUQ09QVFMgaWYgbm90IHRoZXJlCisKK3VfaW5pdFggdHlwZXMgYXJlIGluIHN5cy90eXBlcy5oIGJlIGV4cGxpY2l0IGFib3V0IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgZXh0ZW5zaW9ucy9saWJ4dF9UQ1BPUFRTVFJJUC5jICAgICAgICAgICB8IDE1ICsrKysrKysrKysrKysrKworIGluY2x1ZGUvbGliaXB0Yy9pcHRfa2VybmVsX2hlYWRlcnMuaCAgICAgfCAxMiAtLS0tLS0tLS0tLS0KKyBpbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oIHwgIDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMgYi9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKK2luZGV4IDY4OTc4NTcuLjhhMTcwYjIgMTAwNjQ0CistLS0gYS9leHRlbnNpb25zL2xpYnh0X1RDUE9QVFNUUklQLmMKKysrKyBiL2V4dGVuc2lvbnMvbGlieHRfVENQT1BUU1RSSVAuYworQEAgLTEyLDYgKzEyLDIxIEBACisgI2lmbmRlZiBUQ1BPUFRfTUQ1U0lHCisgIwlkZWZpbmUgVENQT1BUX01ENVNJRyAxOQorICNlbmRpZgorKyNpZm5kZWYgVENQT1BUX01BWFNFRworKyMJZGVmaW5lIFRDUE9QVF9NQVhTRUcgMgorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1dJTkRPVworKyMJZGVmaW5lIFRDUE9QVF9XSU5ET1cgMworKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1NBQ0tfUEVSTUlUVEVECisrIwlkZWZpbmUgVENQT1BUX1NBQ0tfUEVSTUlUVEVEIDQKKysjZW5kaWYKKysjaWZuZGVmIFRDUE9QVF9TQUNLCisrIwlkZWZpbmUgVENQT1BUX1NBQ0sgNQorKyNlbmRpZgorKyNpZm5kZWYgVENQT1BUX1RJTUVTVEFNUAorKyMJZGVmaW5lIFRDUE9QVF9USU1FU1RBTVAgOAorKyNlbmRpZgorIAorIGVudW0geworIAlPX1NUUklQX09QVElPTiA9IDAsCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oIGIvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCitpbmRleCAxODg2MWZlLi5hNTk2M2U5IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9saWJpcHRjL2lwdF9rZXJuZWxfaGVhZGVycy5oCisrKysgYi9pbmNsdWRlL2xpYmlwdGMvaXB0X2tlcm5lbF9oZWFkZXJzLmgKK0BAIC01LDcgKzUsNiBAQAorIAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKy0jaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA9PSAyCisgI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KK0BAIC0xMywxNSArMTIsNCBAQAorICNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2Vsc2UgLyogbGliYzUgKi8KKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSNpbmNsdWRlIDxsaW51eC9pcC5oPgorLSNpbmNsdWRlIDxsaW51eC9pbi5oPgorLSNpbmNsdWRlIDxsaW51eC9pZi5oPgorLSNpbmNsdWRlIDxsaW51eC9pY21wLmg+CistI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorLSNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKy0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy0jaW5jbHVkZSA8bGludXgvaW42Lmg+CistI2VuZGlmCisgI2VuZGlmCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKK2luZGV4IDU3ZmQ4MmEuLjQ4MDcyNDYgMTAwNjQ0CistLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCitAQCAtMTUsNiArMTUsNyBAQAorICNpZm5kZWYgX0lQVEFCTEVTX0gKKyAjZGVmaW5lIF9JUFRBQkxFU19ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorIAorICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB0YWJsZXMvaXB0YWJsZXMvdHlwZXMuaC1hZGQtZGVmaW5lcy10aGF0LWFyZS1yZXF1aXJlZC1mb3ItaWZfcGFja2V0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVlMjllCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitGcm9tIDE5NTkzNDkxZjQzYjcwYzFhNzFjM2I5YjhmNGZmNGZkMTQ1MDAwMTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjMgTWFyIDIwMTIgMTQ6Mjc6MjAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gdHlwZXMuaDogYWRkIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIGlmX3BhY2tldC5oCisKK1RoZSBpcHRhYmxlcyBsb2NhbCBsaW51eC90eXBlcy5oIG92ZXJyaWRlcyB0aGUga2VybmVsL3N5c3Jvb3QKK3R5cGVzLmguIEFzIHN1Y2gsIHdlIG5lZWQgdG8gcHJvdmlkZSBzb21lIGRlZmluZXMgdGhhdCBhcmUgcmVxdWlyZWQKK3RvIGJ1aWxkIGFnYWluc3QgMy4yKyBrZXJuZWwgaGVhZGVycy4KKworaWZuZGVmIHByb3RlY3Rpb24gaXMgcHJvdmlkZWQgZm9yIHRoZSBkZWZpbmVzIHRvIGVuc3VyZSB0aGF0Citjb25maWd1cmF0aW9uIHRoYXQgYWxyZWFkeSBoYXZlIHRoZXNlIGRlZmluZXMgYXJlIHN0aWxsIGJ1aWxkYWJsZS4KKworVGhpcyBjb21taXQgaXMgdGVtcG9yYXJ5IHVudGlsIGEgbmV3IHZlcnNpb24gb2YgaXB0YWJsZXMgY2FuIGJlCit1c2VkIHRoYXQgY29udGFpbnMgdGhlIGRlZmluZXMuCisKK1RoaXMgaXMgc2ltaWxhciB0byB0aGUgY29tbWl0IGluIHRoZSBpcHRhYmxlcyBnaXQgcmVwb3NpdG9yeToKKworICBodHRwczovL2dpdC5uZXRmaWx0ZXIub3JnL2NnaS1iaW4vZ2l0d2ViLmNnaT9wPWlwdGFibGVzLmdpdDthPWNvbW1pdDtoPWRiZTc3Y2M5NzRjZWU2NTZlYWUzN2U3NTAzOWRkMWE0MTBhNDUzNWIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCcnVjZSBBc2hmaWVsZCA8YnJ1Y2UuYXNoZmllbGRAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGUvbGludXgvdHlwZXMuaCB8ICAgMTAgKysrKysrKysrKworIDEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAoraW5kZXggOGI0ODNjOC4uZWJmNjQzMiAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCitAQCAtMzQsNSArMzQsMTUgQEAgdHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19iZTY0OworIHR5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fc3VtMTY7CisgdHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX193c3VtOworIAorKyNpZm5kZWYgX19hbGlnbmVkX3U2NAorKyNkZWZpbmUgX19hbGlnbmVkX3U2NCBfX3U2NCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkKKysjZW5kaWYKKysjaWZuZGVmIF9fYWxpZ25lZF9iZTY0CisrI2RlZmluZSBfX2FsaWduZWRfYmU2NCBfX2JlNjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisrI2VuZGlmCisrI2lmbmRlZiBfX2FsaWduZWRfbGU2NAorKyNkZWZpbmUgX19hbGlnbmVkX2xlNjQgX19sZTY0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorKyNlbmRpZgorKworICNlbmRpZiAvKiAgX19BU1NFTUJMWV9fICovCisgI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCistLSAKKzEuNy4wLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdGFibGVzL2lwdGFibGVzXzEuNC4yMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjMDE3YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHRhYmxlcy9pcHRhYmxlc18xLjQuMjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcga2VybmVsIHBhY2tldCBmaWx0ZXJpbmcgY2FwYWJpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiaXB0YWJsZXMgaXMgdGhlIHVzZXJzcGFjZSBjb21tYW5kIGxpbmUgcHJvZ3JhbSB1c2VkIHRvIGNvbmZpZ3VyZSBhbmQgY29udHJvbCBuZXR3b3JrIHBhY2tldCBcCitmaWx0ZXJpbmcgY29kZSBpbiBMaW51eC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm5ldGZpbHRlci5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubmV0ZmlsdGVyLm9yZy8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaXB0YWJsZXMvaXB0YWJsZXMuYztiZWdpbmxpbmU9MTM7ZW5kbGluZT0yNTttZDU9YzVjZmZkMDk5NzQ1NThjZjI3ZDBmNzYzZGYyYTEyZGMiCisKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUteC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcC10YWJsZXMgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1pcHRhYmxlLWZpbHRlciBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdGFibGUtbmF0IFwKKyAgICAgICAgICAgICAgICAgICAgIGtlcm5lbC1tb2R1bGUtbmYtZGVmcmFnLWlwdjQgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2sgXAorICAgICAgICAgICAgICAgICAgICAga2VybmVsLW1vZHVsZS1uZi1jb25udHJhY2staXB2NCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLW5mLW5hdCBcCisgICAgICAgICAgICAgICAgICAgICBrZXJuZWwtbW9kdWxlLWlwdC1tYXNxdWVyYWRlIgorRklMRVNfJHtQTn0gPSsgIiR7bGliZGlyfS94dGFibGVzLyAke2RhdGFkaXJ9L3h0YWJsZXMiCitGSUxFU18ke1BOfS1kYmcgPSsgIiR7bGliZGlyfS94dGFibGVzLy5kZWJ1ZyIKKworU1JDX1VSSSA9ICJodHRwOi8vbmV0ZmlsdGVyLm9yZy9wcm9qZWN0cy9pcHRhYmxlcy9maWxlcy9pcHRhYmxlcy0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3R5cGVzLmgtYWRkLWRlZmluZXMtdGhhdC1hcmUtcmVxdWlyZWQtZm9yLWlmX3BhY2tldC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWNvbmZpZ3VyZS1BZGQtb3B0aW9uLXRvLWVuYWJsZS1kaXNhYmxlLWxpYm5mbmV0bGluay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUzNmQwNDhjOGU4ZWVlYmNkOTc1N2QwODYzZWJiMGMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUyMDA0YzY4MDIxZGE5YTU5OWZlZWQyN2Y2NWRlZmNmYjIyMTI4ZjdkYTJjMDUzMWMwZjc1ZGUwZjQ3OWQzZTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfSU5DRElSfSBcCisgICAgICAgICAgICAgICAiCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2lwdjYnLCAnaXB2NicsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAiCisKK1BBQ0tBR0VDT05GSUdbaXB2Nl0gPSAiLS1lbmFibGUtaXB2NiwtLWRpc2FibGUtaXB2NiwiCisKKyMgbGlibmZuZXRsaW5rIHJlY2lwZSBpcyBpbiBtZXRhLW5ldHdvcmtpbmcgbGF5ZXIKK1BBQ0tBR0VDT05GSUdbbGlibmZuZXRsaW5rXSA9ICItLWVuYWJsZS1saWJuZm5ldGxpbmssLS1kaXNhYmxlLWxpYm5mbmV0bGluayxsaWJuZm5ldGxpbmsiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCSMgUmVtb3ZlIHNvbWUgbGlidG9vbCBtNCBmaWxlcworCSMgS2VlcCBheF9jaGVja19saW5rZXJfZmxhZ3MubTQgd2hpY2ggYmVsb25ncyB0byBhdXRvY29uZi1hcmNoaXZlLgorCXJtIC1mIGxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9kZWJpYW4vdGFyZ2V0cy5kaWZmIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I1NTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3RhcmdldHMuZGlmZgpAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworSW5kZXg6IGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9NYWtlZmlsZQorKysrIGlwdXRpbHMtczIwMTIxMjIxL01ha2VmaWxlCitAQCAtMTA2LDcgKzEwNiw3IEBAIGVuZGlmCisgZW5kaWYKKyAKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1JUFY0X1RBUkdFVFM9dHJhY2VwYXRoIHBpbmcgY2xvY2tkaWZmIHJkaXNjIGFycGluZyB0ZnRwZCByYXJwZAorK0lQVjRfVEFSR0VUUz10cmFjZXBhdGggcGluZyBjbG9ja2RpZmYgYXJwaW5nCisgSVBWNl9UQVJHRVRTPXRyYWNlcGF0aDYgdHJhY2Vyb3V0ZTYgcGluZzYKKyBUQVJHRVRTPSQoSVBWNF9UQVJHRVRTKSAkKElQVjZfVEFSR0VUUykKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL2RlYmlhbi91c2VfZ2V0aG9zdGJ5bmFtZTIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2IxODg2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEyMTIyMS5vcmlnL3RyYWNlcGF0aC5jCisrKysgaXB1dGlscy1zMjAxMjEyMjEvdHJhY2VwYXRoLmMKK0BAIC0zNzAsOSArMzcwLDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCX0KKyAjZW5kaWYKKyAKKy0JaGUgPSBnZXRob3N0YnluYW1lKHApOworKwloZSA9IGdldGhvc3RieW5hbWUyKGFyZ3ZbMF0sIEFGX0lORVQpOworIAlpZiAoaGUgPT0gTlVMTCkgeworLQkJaGVycm9yKCJnZXRob3N0YnluYW1lIik7CisrCQloZXJyb3IoImdldGhvc3RieW5hbWUyIik7CisgCQlleGl0KDEpOworIAl9CisgCitJbmRleDogaXB1dGlscy1zMjAxMjEyMjEvcGluZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaXB1dGlscy1zMjAxMjEyMjEub3JpZy9waW5nLmMKKysrKyBpcHV0aWxzLXMyMDEyMTIyMS9waW5nLmMKK0BAIC0yNzksNyArMjc5LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2Vsc2UKKyAJCQlpZG4gPSB0YXJnZXQ7CisgI2VuZGlmCistCQkJaHAgPSBnZXRob3N0YnluYW1lKGlkbik7CisrCQkJaHAgPSBnZXRob3N0YnluYW1lMihpZG4sIEFGX0lORVQpOworIAkJCWlmICghaHApIHsKKyAJCQkJZnByaW50ZihzdGRlcnIsICJwaW5nOiB1bmtub3duIGhvc3QgJXNcbiIsIHRhcmdldCk7CisgCQkJCWV4aXQoMik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9maWxlcy9maXgtYnVpbGQtY29tbWFuZC1saW5lLWFyZ3VtZW50LXdpdGgtZ251dGxzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWNkODJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvZml4LWJ1aWxkLWNvbW1hbmQtbGluZS1hcmd1bWVudC13aXRoLWdudXRscy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0Zyb20gNTY4ZTk5MGQzMGZjN2U5NDE2ZTBhNmY4Yzc0ZWE1MDEzOTIxZWFlYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFyamFuIHZhbiBkZSBWZW4gPGFyamFudmFuZGV2ZW5AZ21haWwuY29tPgorRGF0ZTogV2VkLCAxNiBKYW4gMjAxMyAwMzoxMjoxNSArMDkwMAorU3ViamVjdDogW1BBVENIXSBwaW5nNjogRml4IGJ1aWxkIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3aXRoIGdudXRscy4KKworVGhlIHBpbmc2IGNvbW1hbmQgY2FuIHVzZSBlaXRoZXIgb3BlbnNzbCBvciBnbnV0bHMuLi4KK2FuZCB0aGUgTWFrZWZpbGUgaGFzIGEgYnVuY2ggb2Ygc2V0dXAgZm9yIGRlZmluaW5nIHdoaWNoIG9mIHRoZSB0d28gdG8gdXNlLgorCitVbmZvcnR1bmF0ZWx5LCB0aGUgZmluYWwgLUQgZGVmaW5lIG9uIHRoZSBjb21tYW5kbGluZSB0byBlbmFibGUgZ251dGxzCitpbnNpZGUgdGhlIHBpbmc2LmMgZmlsZSBkaWRuJ3QgYWN0dWFsbHkgbWFrZSBpdCBvbnRvIHRoZSBnY2MKK2NvbW1hbmRsaW5lLgorVGhpcyBwYXRjaCBhZGRzIHRoZSAkKERFRl9DUllQVE8pIE1ha2VmaWxlIHZhcmlhYmxlIHRvIGZpeCB0aGlzIGdhcC4KKworU2lnbmVkLW9mZi1ieTogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW52YW5kZXZlbkBnbWFpbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CistLS0KKyBNYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGM2MmQ5ZGYuLjg5MjQ5ZjUgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0xNDksNyArMTQ5LDcgQEAgTElCX2Nsb2NrZGlmZiA9ICQoTElCX0NBUCkKKyBERUZfcGluZ19jb21tb24gPSAkKERFRl9DQVApICQoREVGX0lETikKKyBERUZfcGluZyAgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKQorIExJQl9waW5nICA9ICQoTElCX0NBUCkgJChMSUJfSUROKQorLURFRl9waW5nNiA9ICQoREVGX0NBUCkgJChERUZfSUROKSAkKERFRl9XSVRIT1VUX0lGQUREUlMpICQoREVGX0VOQUJMRV9QSU5HNl9SVEhEUikKKytERUZfcGluZzYgPSAkKERFRl9DQVApICQoREVGX0lETikgJChERUZfV0lUSE9VVF9JRkFERFJTKSAkKERFRl9FTkFCTEVfUElORzZfUlRIRFIpICQoREVGX0NSWVBUTykKKyBMSUJfcGluZzYgPSAkKExJQl9DQVApICQoTElCX0lETikgJChMSUJfUkVTT0xWKSAkKExJQl9DUllQVE8pCisgCisgcGluZzogcGluZ19jb21tb24ubworLS0gCisxLjcuMi41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9pcHV0aWxzL2ZpbGVzL25zZ21scy1wYXRoLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmJmOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvZmlsZXMvbnNnbWxzLXBhdGgtZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0ZpeCBuc2dtbHMgcGF0aCBpc3N1ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK0luZGV4OiBpcHV0aWxzLXMyMDEwMTAwNi9kb2MvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBpcHV0aWxzLXMyMDEwMTAwNi5vcmlnL2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIwOjQyOjI3LjAwMDAwMDAwMCArMDgwMAorKysrIGlwdXRpbHMtczIwMTAxMDA2L2RvYy9NYWtlZmlsZQkyMDExLTA5LTEzIDIxOjAxOjUyLjAwMDAwMDAwMCArMDgwMAorQEAgLTI3LDEwICsyNywxNSBAQAorICMgZG9jYm9vazJtYW4gcHJvZHVjZXMgdXR0ZXJseSB1Z2x5IG91dHB1dCBhbmQgSSBkaWQgbm90IGZpbmQKKyAjIGFueSB3YXkgdG8gY3VzdG9taXplIHRoaXMgYnV0IGhhY2tpbmcgYmFja2VuZCBwZXJsIHNjcmlwdCBhIGxpdHRsZS4KKyAjIFdlbGwsIGhlbmNlLi4uCisrIyBuc2dtbHMgc2VlbXMgYXBwZW5kIHBhdGggdG8gc2VhcmNoIGRpcmVjdG9yeSBhY2NvcmRpbmcgdG8gdGhlIHN5c2lkIHBhdGguCisrIyBlLmcuIGlmIGlucHV0IC4uL2luZGV4LmRiLCBpdCB3b3VsZCBzZWFyY2ggJHNlYXJjaF9kaXJlY3RvcnkvLi4vIHJhdGhlciB0aGFuCisrIyAkc2VhcmNoX2RpcmVjdG9yeSwgd2hpY2ggbGVhZHMgc2VhcmNoaW5nIGZhaWx1cmUuIEZpeGluZyBuc2dtbHMgcHJvYmFibHkKKysjIGludHJvZHVjZSBzb21lIHNpZGUgZWZmZWN0cywgc28gdXNlIHRoaXMgdWdseSBoYWNrOiBydW5uaW5nIG5zZ21scyBpbiBjdXJyZW50CisrIyBkaXJlY3RvcnksIGFuZCBydW5uaW5nIGRvY2Jvb2sybWFuIGluIHRtcCBkaXJlY3RvcnkuCisgCisgJChNQU5GSUxFUyk6IGluZGV4LmRiCisgCUAtbWtkaXIgdG1wLmRiMm1hbgorLQlAc2V0IC1lOyBjZCB0bXAuZGIybWFuOyBuc2dtbHMgLi4vJDwgfCBzZ21sc3BsIC4uL2RvY2Jvb2sybWFuLXNwZWMucGwgOwltdiAkQCAuLgorKwlAc2V0IC1lOyBuc2dtbHMgJDwgPnRtcC5kYjJtYW4vb3V0cHV0OyBjZCB0bXAuZGIybWFuOyBjYXQgb3V0cHV0IHwgc2dtbHNwbCAuLi9kb2Nib29rMm1hbi1zcGVjLnBsIDsJbXYgJEAgLi4KKyAJQC1ybSAtcmYgdG1wLmRiMm1hbgorIAorIGNsZWFuOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvaXB1dGlscy9pcHV0aWxzX3MyMDEyMTIyMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdhMzJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2lwdXRpbHMvaXB1dGlsc19zMjAxMjEyMjEuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJOZXR3b3JrIG1vbml0b3JpbmcgdG9vbHMiCitERVNDUklQVElPTiA9ICJVdGlsaXRpZXMgZm9yIHRoZSBJUCBwcm90b2NvbCwgaW5jbHVkaW5nIHRyYWNlcm91dGU2LCBcCit0cmFjZXBhdGgsIHRyYWNlcGF0aDYsIHBpbmcsIHBpbmc2IGFuZCBhcnBpbmcuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKKworTElDRU5TRSA9ICJCU0QgJiBHUEx2MisiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTM1O21kNT1mOWNlYjIwMTczM2U5YTZjZjhmMDA3NjZkZDI3OGQ4MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZXBhdGguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTEwO21kNT0wZWNlYTJiZjYwYmZmMmYzZDg0MDA5NmQ4NzY0N2YzZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcnBpbmcuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1mZTg0MzAxYjVjMjY1NWM5NTBmOGI5MmEwNTdmYWZhNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZnRwZC5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzI7bWQ1PTI4ODM0YmY4YTkxYTViOGE5Mjc1NWRiZWU3MDllZjk2ICIKKworREVQRU5EUyA9ICJnbnV0bHMgZG9jYm9vay11dGlscy1uYXRpdmUgc2dtbHNwbC1uYXRpdmUgbGliY2FwIgorCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5za2J1ZmYubmV0L2lwdXRpbHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZGViaWFuL3VzZV9nZXRob3N0YnluYW1lMi5kaWZmIFwKKyAgICAgICAgICAgZmlsZTovL2RlYmlhbi90YXJnZXRzLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vbnNnbWxzLXBhdGgtZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1idWlsZC1jb21tYW5kLWxpbmUtYXJndW1lbnQtd2l0aC1nbnV0bHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYwNzJhZWY2NDIwNTcyMGRkMTg5M2IzNzVlMTg0MTcxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ1MGY1NDlmYzViNjIwYzIzYzU5MjlhYTZkNTRiN2RkZmM3ZWUxY2IxZThlZmRjNWU4YmIyMWQ4ZDBjNTMxOWYiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9IC1EX0dOVV9TT1VSQ0UnIFZQQVRIPSIke1NUQUdJTkdfTElCRElSfToke1NUQUdJTkdfRElSX0hPU1R9LyR7YmFzZV9saWJkaXJ9IiBhbGwgbWFuCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLW0gMDc1NSAtZCAke0R9JHtiYXNlX2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJIyBTVUlEIHJvb3QgcHJvZ3JhbXMKKwlpbnN0YWxsIC1tIDQ1NTUgcGluZyAke0R9JHtiYXNlX2JpbmRpcn0vcGluZworCWluc3RhbGwgLW0gNDU1NSBwaW5nNiAke0R9JHtiYXNlX2JpbmRpcn0vcGluZzYKKwlpbnN0YWxsIC1tIDQ1NTUgdHJhY2Vyb3V0ZTYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCWluc3RhbGwgLW0gNDU1NSBjbG9ja2RpZmYgJHtEfSR7YmFzZV9iaW5kaXJ9LworCSMgT3RoZXIgcHJvZ3JhbWdzCisJZm9yIGkgaW4gYXJwaW5nIHRyYWNlcGF0aCB0cmFjZXBhdGg2OyBkbworCSAgaW5zdGFsbCAtbSAwNzU1ICRpICR7RH0ke2Jhc2VfYmluZGlyfS8KKwlkb25lCisJIyBNYW51YWwgcGFnZXMgZm9yIHRoaW5ncyB3ZSBidWlsZCBwYWNrYWdlcyBmb3IKKwlmb3IgaSBpbiB0cmFjZXBhdGguOCB0cmFjZXJvdXRlNi44IHBpbmcuOCBhcnBpbmcuODsgZG8KKwkgIGluc3RhbGwgLW0gMDY0NCBkb2MvJGkgJHtEfSR7bWFuZGlyfS9tYW44LyB8fCB0cnVlCisJZG9uZQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfS1waW5nID0gInBpbmciCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZ10gPSAiJHtiYXNlX2JpbmRpcn0vcGluZyIKKworQUxURVJOQVRJVkVfJHtQTn0tcGluZzYgPSAicGluZzYiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGluZzZdID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcGluZyAke1BOfS1waW5nNiAke1BOfS1hcnBpbmcgJHtQTn0tdHJhY2VwYXRoICR7UE59LXRyYWNlcGF0aDYgJHtQTn0tdHJhY2Vyb3V0ZTYgJHtQTn0tY2xvY2tkaWZmIgorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXBpbmcgJHtQTn0tcGluZzYgJHtQTn0tYXJwaW5nICR7UE59LXRyYWNlcGF0aCAke1BOfS10cmFjZXBhdGg2ICR7UE59LXRyYWNlcm91dGU2ICR7UE59LWNsb2NrZGlmZiIKKworRklMRVNfJHtQTn0JPSAiIgorRklMRVNfJHtQTn0tcGluZyA9ICIke2Jhc2VfYmluZGlyfS9waW5nLiR7QlBOfSIKK0ZJTEVTXyR7UE59LXBpbmc2ID0gIiR7YmFzZV9iaW5kaXJ9L3Bpbmc2LiR7QlBOfSIKK0ZJTEVTXyR7UE59LWFycGluZyA9ICIke2Jhc2VfYmluZGlyfS9hcnBpbmciCitGSUxFU18ke1BOfS10cmFjZXBhdGggPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2VwYXRoIgorRklMRVNfJHtQTn0tdHJhY2VwYXRoNiA9ICIke2Jhc2VfYmluZGlyfS90cmFjZXBhdGg2IgorRklMRVNfJHtQTn0tdHJhY2Vyb3V0ZTYJPSAiJHtiYXNlX2JpbmRpcn0vdHJhY2Vyb3V0ZTYiCitGSUxFU18ke1BOfS1jbG9ja2RpZmYgPSAiJHtiYXNlX2JpbmRpcn0vY2xvY2tkaWZmIgorRklMRVNfJHtQTn0tZG9jCT0gIiR7bWFuZGlyfS9tYW44IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGVzcy9sZXNzXzQ3OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTg5NTRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xlc3MvbGVzc180NzkuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJUZXh0IGZpbGUgdmlld2VyIHNpbWlsYXIgdG8gbW9yZSIKK0RFU0NSSVBUSU9OID0gIkxlc3MgaXMgYSBwcm9ncmFtIHNpbWlsYXIgdG8gbW9yZSwgaS5lLiBhIHRlcm1pbmFsIFwKK2Jhc2VkIHByb2dyYW0gZm9yIHZpZXdpbmcgdGV4dCBmaWxlcyBhbmQgdGhlIG91dHB1dCBmcm9tIG90aGVyIFwKK3Byb2dyYW1zLiBMZXNzIG9mZmVycyBtYW55IGZlYXR1cmVzIGJleW9uZCB0aG9zZSB0aGF0IG1vcmUgZG9lcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdyZWVud29vZHNvZnR3YXJlLmNvbS8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKKyMgKEdQTHYyKyAoPDwgNDE4KSwgR1BMdjMrICg+PSA0MTgpKSB8IGxlc3MKKyMgSW5jbHVkaW5nIGVtYWlsIGF1dGhvciBnaXZpbmcgcGVybWlzc2luZyB0byB1c2UgQlNECisjCisjIEZyb206IE1hcmsgTnVkZWxtYW4gPG1hcmtuQGdyZWVud29vZHNvZnR3YXJlLmNvbT4KKyMgVG86IEVsaXphYmV0aCBGbGFuYWdhbiA8ZWxpemFiZXRoLmZsYW5hZ2FuQGludGVsLmNvbQorIyBEYXRlOiAxMi8xOS8xMQorIworIyBIaSBFbGl6YWJldGgsCisjIFVzaW5nIGEgZ2VuZXJpYyBCU0QgbGljZW5zZSBmb3IgbGVzcyBpcyBmaW5lIHdpdGggbWUuCisjIFRoYW5rcywKKyMKKyMgLS1NYXJrCisjCisKK0xJQ0VOU0UgPSAiR1BMdjMrIHwgQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRTttZDU9NDhjMjZhMzA3ZjkxYWY3MDBlMWYwMDU4NWYyMTVhYWYiCitERVBFTkRTID0gIm5jdXJzZXMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5ncmVlbndvb2Rzb2Z0d2FyZS5jb20vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDQ5ZjUxY2NmZTI2ODYwMDljNmNlOTQzZWViNGJiYWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWJmMDZjYjMwZWUyYTJiZDFmNzlmMzlhYTkxZTQ2NDQ0ZTdjYjE5YjQ4Yzk1YzQ5OTJmYTYzY2ZlNDUyN2E4MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAnYmluZGlyPSR7RH0ke2JpbmRpcn0nICdtYW5kaXI9JHtEfSR7bWFuZGlyfScgaW5zdGFsbAorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJsZXNzIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vMDBfYXJjaGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNjQ0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby8wMF9hcmNoZXMucGF0Y2gKQEAgLTAsMCArMSw2MDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLW02OGsuaAorQEAgLTAsMCArMSw3OCBAQAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJMjQxCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCTI0MgorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjQ0CisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJMjQ1CisrCisrI2RlZmluZSBpb19zeXNjYWxsMSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLGJ0eXBlIGIpIFwKKyt7IFwKKytyZWdpc3RlciBsb25nIF9fcmVzIF9fYXNtX18gKCIlZDAiKSA9IF9fTlJfIyNzbmFtZTsgXAorK3JlZ2lzdGVyIGxvbmcgX19hIF9fYXNtX18gKCIlZDEiKSA9IChsb25nKShhKTsgXAorK3JlZ2lzdGVyIGxvbmcgX19iIF9fYXNtX18gKCIlZDIiKSA9IChsb25nKShiKTsgXAorK19fYXNtX18gX192b2xhdGlsZV9fICgidHJhcCAgIzAiIFwKKysJCSAgICAgIDogIitkIiAoX19yZXMpIFwKKysJCSAgICAgIDogImQiIChfX2EpLCAiZCIgKF9fYikgXAorKwkJICAgICApOyBcCisrcmV0dXJuICh0eXBlKSBfX3JlczsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQpIFwKKyt0eXBlIGZuYW1lIChhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrcmVnaXN0ZXIgbG9uZyBfX3JlcyBfX2FzbV9fICgiJWQwIikgPSBfX05SXyMjc25hbWU7IFwKKytyZWdpc3RlciBsb25nIF9fYSBfX2FzbV9fICgiJWQxIikgPSAobG9uZykoYSk7IFwKKytyZWdpc3RlciBsb25nIF9fYiBfX2FzbV9fICgiJWQyIikgPSAobG9uZykoYik7IFwKKytyZWdpc3RlciBsb25nIF9fYyBfX2FzbV9fICgiJWQzIikgPSAobG9uZykoYyk7IFwKKytyZWdpc3RlciBsb25nIF9fZCBfX2FzbV9fICgiJWQ0IikgPSAobG9uZykoZCk7IFwKKytfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRyYXAgICMwIiBcCisrCQkgICAgICA6ICIrZCIgKF9fcmVzKSBcCisrCQkgICAgICA6ICJkIiAoX19hKSwgImQiIChfX2IpLCBcCisrCQkJImQiIChfX2MpLCAiZCIgKF9fZCkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUgKGF0eXBlIGEsYnR5cGUgYixjdHlwZSBjLGR0eXBlIGQsZXR5cGUgZSkgXAorK3sgXAorK3JlZ2lzdGVyIGxvbmcgX19yZXMgX19hc21fXyAoIiVkMCIpID0gX19OUl8jI3NuYW1lOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2EgX19hc21fXyAoIiVkMSIpID0gKGxvbmcpKGEpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2IgX19hc21fXyAoIiVkMiIpID0gKGxvbmcpKGIpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2MgX19hc21fXyAoIiVkMyIpID0gKGxvbmcpKGMpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2QgX19hc21fXyAoIiVkNCIpID0gKGxvbmcpKGQpOyBcCisrcmVnaXN0ZXIgbG9uZyBfX2UgX19hc21fXyAoIiVkNSIpID0gKGxvbmcpKGUpOyBcCisrX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ0cmFwICAjMCIgXAorKwkJICAgICAgOiAiK2QiIChfX3JlcykgXAorKwkJICAgICAgOiAiZCIgKF9fYSksICJkIiAoX19iKSwgXAorKwkJCSJkIiAoX19jKSwgImQiIChfX2QpLCAiZCIgKF9fZSkgIFwKKysJCSAgICAgKTsgXAorK3JldHVybiAodHlwZSkgX19yZXM7IFwKKyt9CisrCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTEwLm9yaWcvc3JjL3N5c2NhbGwuaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLmgKK0BAIC0yOCw2ICsyOCwxMiBAQAorICNpbmNsdWRlICJzeXNjYWxsLXNwYXJjLmgiCisgI2VsaWYgZGVmaW5lZChfX2FhcmNoNjRfXykKKyAjaW5jbHVkZSAic3lzY2FsbC1hcm02NC5oIgorKyNlbGlmIGRlZmluZWQoX19tNjhrX18pCisrI2luY2x1ZGUgInN5c2NhbGwtbTY4ay5oIgorKyNlbGlmIGRlZmluZWQoX19ocHBhX18pCisrI2luY2x1ZGUgInN5c2NhbGwtcGFyaXNjLmgiCisrI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKysjaW5jbHVkZSAic3lzY2FsbC1taXBzLmgiCisgI2Vsc2UKKyAjd2FybmluZyAidXNpbmcgZ2VuZXJpYyBzeXNjYWxsIG1ldGhvZCIKKyAjaW5jbHVkZSAic3lzY2FsbC1nZW5lcmljLmgiCitJbmRleDogbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliYWlvLTAuMy4xMTAvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtMCwwICsxLDIyMyBAQAorKy8qCisrICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisrICogZm9yIG1vcmUgZGV0YWlscy4KKysgKgorKyAqIENvcHlyaWdodCAoQykgMTk5NSwgOTYsIDk3LCA5OCwgOTksIDIwMDAgYnkgUmFsZiBCYWVjaGxlCisrICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KKysgKgorKyAqIENoYW5nZWQgc3lzdGVtIGNhbGxzIG1hY3JvcyBfc3lzY2FsbDUgLSBfc3lzY2FsbDcgdG8gcHVzaCBhcmdzIDUgdG8gNyBvbnRvCisrICogdGhlIHN0YWNrLiBSb2JpbiBGYXJpbmUgZm9yIEFDTiBTLkEsIENvcHlyaWdodCAoQykgMTk5NiBieSBBQ04gUy5BCisrICovCisrCisrI2lmbmRlZiBfTUlQU19TSU1fQUJJMzIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkkzMgkJCTEKKysjZGVmaW5lIF9NSVBTX1NJTV9OQUJJMzIJCTIKKysjZGVmaW5lIF9NSVBTX1NJTV9BQkk2NAkJCTMKKysjZW5kaWYKKysKKysjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgorKworKy8qCisrICogTGludXggbzMyIHN0eWxlIHN5c2NhbGxzIGFyZSBpbiB0aGUgcmFuZ2UgZnJvbSA0MDAwIHRvIDQ5OTkuCisrICovCisrI2RlZmluZSBfX05SX0xpbnV4CQkJNDAwMAorKyNkZWZpbmUgX19OUl9pb19zZXR1cAkJCShfX05SX0xpbnV4ICsgMjQxKQorKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkJKF9fTlJfTGludXggKyAyNDIpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfTGludXggKyAyNDMpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJCShfX05SX0xpbnV4ICsgMjQ0KQorKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCQkoX19OUl9MaW51eCArIDI0NSkKKysKKysjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLworKworKyNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0CisrCisrLyoKKysgKiBMaW51eCA2NC1iaXQgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDUwMDAgdG8gNTk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk1MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCisrCisrI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCisrCisrLyoKKysgKiBMaW51eCBOMzIgc3lzY2FsbHMgYXJlIGluIHRoZSByYW5nZSBmcm9tIDYwMDAgdG8gNjk5OS4KKysgKi8KKysjZGVmaW5lIF9fTlJfTGludXgJCQk2MDAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfTGludXggKyAyMDApCisrI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kJCQkoX19OUl9MaW51eCArIDIwMSkKKysjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzCQkoX19OUl9MaW51eCArIDIwMikKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfTGludXggKyAyMDMpCisrI2RlZmluZSBfX05SX2lvX2NhbmNlbAkJCShfX05SX0xpbnV4ICsgMjA0KQorKyNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMiAqLworKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpOyBcCisrCXVuc2lnbmVkIGxvbmcgX192MDsgXAorKwlcCisrCV9fYXNtX18gdm9sYXRpbGUgKCBcCisrCSIuc2V0XHRub3Jlb3JkZXJcblx0IiBcCisrCSJsaVx0JDIsICUzXHRcdFx0IyAiICNmbmFtZSAiXG5cdCIgXAorKwkic3lzY2FsbFxuXHQiIFwKKysJIm1vdmVcdCUwLCAkMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICI9ciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiaSIgKF9fTlJfIyNzbmFtZSkgXAorKwk6ICIkMiIsICIkOCIsICIkOSIsICIkMTAiLCAiJDExIiwgIiQxMiIsICIkMTMiLCAiJDE0IiwgIiQxNSIsICIkMjQiLCBcCisrCSAgIm1lbW9yeSIpOyBcCisrCVwKKysJaWYgKF9fYTMgPT0gMCkgXAorKwkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCisrCXJldHVybiAodHlwZSkgLTE7IFwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYikgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3Iik7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTRcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIj1yIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGwzKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMpIFwKKyt0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyt7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EwIGFzbSgiJDQiKSA9ICh1bnNpZ25lZCBsb25nKSBhOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMSBhc20oIiQ1IikgPSAodW5zaWduZWQgbG9uZykgYjsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTIgYXNtKCIkNiIpID0gKHVuc2lnbmVkIGxvbmcpIGM7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EzIGFzbSgiJDciKTsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiPXIiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDQodHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYyxkdHlwZSxkKSBcCisrdHlwZSBmbmFtZShhdHlwZSBhLCBidHlwZSBiLCBjdHlwZSBjLCBkdHlwZSBkKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwl1bnNpZ25lZCBsb25nIF9fdjA7IFwKKysJXAorKwlfX2FzbV9fIHZvbGF0aWxlICggXAorKwkiLnNldFx0bm9yZW9yZGVyXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSIuc2V0XHRyZW9yZGVyIiBcCisrCTogIj0mciIgKF9fdjApLCAiK3IiIChfX2EzKSBcCisrCTogInIiIChfX2EwKSwgInIiIChfX2ExKSwgInIiIChfX2EyKSwgImkiIChfX05SXyMjc25hbWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNpZiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikKKysKKysvKgorKyAqIFVzaW5nIHRob3NlIG1lYW5zIHlvdXIgYnJhaW4gbmVlZHMgbW9yZSB0aGFuIGFuIG9pbCBjaGFuZ2UgOy0pCisrICovCisrCisrI2RlZmluZSBpb19zeXNjYWxsNSh0eXBlLGZuYW1lLHNuYW1lLGF0eXBlLGEsYnR5cGUsYixjdHlwZSxjLGR0eXBlLGQsZXR5cGUsZSkgXAorK3R5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYiwgY3R5cGUgYywgZHR5cGUgZCwgZXR5cGUgZSkgXAorK3sgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTAgYXNtKCIkNCIpID0gKHVuc2lnbmVkIGxvbmcpIGE7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ExIGFzbSgiJDUiKSA9ICh1bnNpZ25lZCBsb25nKSBiOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMiBhc20oIiQ2IikgPSAodW5zaWduZWQgbG9uZykgYzsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTMgYXNtKCIkNyIpID0gKHVuc2lnbmVkIGxvbmcpIGQ7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImx3XHQkMiwgJTZcblx0IiBcCisrCSJzdWJ1XHQkMjksIDMyXG5cdCIgXAorKwkic3dcdCQyLCAxNigkMjkpXG5cdCIgXAorKwkibGlcdCQyLCAlNVx0XHRcdCMgIiAjZm5hbWUgIlxuXHQiIFwKKysJInN5c2NhbGxcblx0IiBcCisrCSJtb3ZlXHQlMCwgJDJcblx0IiBcCisrCSJhZGRpdVx0JDI5LCAzMlxuXHQiIFwKKysJIi5zZXRcdHJlb3JkZXIiIFwKKysJOiAiPSZyIiAoX192MCksICIrciIgKF9fYTMpIFwKKysJOiAiciIgKF9fYTApLCAiciIgKF9fYTEpLCAiciIgKF9fYTIpLCAiaSIgKF9fTlJfIyNzbmFtZSksIFwKKysJICAibSIgKCh1bnNpZ25lZCBsb25nKWUpIFwKKysJOiAiJDIiLCAiJDgiLCAiJDkiLCAiJDEwIiwgIiQxMSIsICIkMTIiLCAiJDEzIiwgIiQxNCIsICIkMTUiLCAiJDI0IiwgXAorKwkgICJtZW1vcnkiKTsgXAorKwlcCisrCWlmIChfX2EzID09IDApIFwKKysJCXJldHVybiAodHlwZSkgX192MDsgXAorKwlyZXR1cm4gKHR5cGUpIC0xOyBcCisrfQorKworKyNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMikgKi8KKysKKysjaWYgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkKKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCxldHlwZSxlKSBcCisrdHlwZSBmbmFtZSAoYXR5cGUgYSxidHlwZSBiLGN0eXBlIGMsZHR5cGUgZCxldHlwZSBlKSBcCisreyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMCBhc20oIiQ0IikgPSAodW5zaWduZWQgbG9uZykgYTsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTEgYXNtKCIkNSIpID0gKHVuc2lnbmVkIGxvbmcpIGI7IFwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2EyIGFzbSgiJDYiKSA9ICh1bnNpZ25lZCBsb25nKSBjOyBcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19hMyBhc20oIiQ3IikgPSAodW5zaWduZWQgbG9uZykgZDsgXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fYTQgYXNtKCIkOCIpID0gKHVuc2lnbmVkIGxvbmcpIGU7IFwKKysJdW5zaWduZWQgbG9uZyBfX3YwOyBcCisrCVwKKysJX19hc21fXyB2b2xhdGlsZSAoIFwKKysJIi5zZXRcdG5vcmVvcmRlclxuXHQiIFwKKysJImxpXHQkMiwgJTZcdFx0XHQjICIgI2ZuYW1lICJcblx0IiBcCisrCSJzeXNjYWxsXG5cdCIgXAorKwkibW92ZVx0JTAsICQyXG5cdCIgXAorKwkiLnNldFx0cmVvcmRlciIgXAorKwk6ICI9JnIiIChfX3YwKSwgIityIiAoX19hMykgXAorKwk6ICJyIiAoX19hMCksICJyIiAoX19hMSksICJyIiAoX19hMiksICJyIiAoX19hNCksICJpIiAoX19OUl8jI3NuYW1lKSBcCisrCTogIiQyIiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwgIiQxMyIsICIkMTQiLCAiJDE1IiwgIiQyNCIsIFwKKysJICAibWVtb3J5Iik7IFwKKysJXAorKwlpZiAoX19hMyA9PSAwKSBcCisrCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKysJcmV0dXJuICh0eXBlKSAtMTsgXAorK30KKysKKysjZW5kaWYgLyogKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyKSB8fCAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCkgKi8KKysKK0luZGV4OiBsaWJhaW8tMC4zLjExMC9zcmMvc3lzY2FsbC1wYXJpc2MuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLXBhcmlzYy5oCitAQCAtMCwwICsxLDE0NiBAQAorKy8qCisrICogTGludXggc3lzdGVtIGNhbGwgbnVtYmVycy4KKysgKgorKyAqIENhcnkgQ291dGFudCBzYXlzIHRoYXQgd2Ugc2hvdWxkIGp1c3QgdXNlIGFub3RoZXIgc3lzY2FsbCBnYXRld2F5CisrICogcGFnZSB0byBhdm9pZCBjbGFzaGluZyB3aXRoIHRoZSBIUFVYIHNwYWNlLCBhbmQgSSB0aGluayBoZSdzIHJpZ2h0OgorKyAqIGl0IHdpbGwgd291bGQga2VlcCBhIGJyYW5jaCBvdXQgb2Ygb3VyIHN5c2NhbGwgZW50cnkgcGF0aCwgYXQgdGhlCisrICogdmVyeSBsZWFzdC4gIElmIHdlIGRlY2lkZSB0byBjaGFuZ2UgaXQgbGF0ZXIsIHdlIGNhbiBgYGp1c3QnJyB0d2VhaworKyAqIHRoZSBMSU5VWF9HQVRFV0FZX0FERFIgZGVmaW5lIGF0IHRoZSBib3R0b20gYW5kIG1ha2UgX19OUl9MaW51eCBiZQorKyAqIDEwMjQgb3Igc29tZXRoaW5nLiAgT2gsIGFuZCByZWNvbXBpbGUgbGliYy4gPSkKKysgKgorKyAqIDY0LWJpdCBIUFVYIGJpbmFyaWVzIGdldCB0aGUgc3lzY2FsbCBnYXRld2F5IGFkZHJlc3MgcGFzc2VkIGluIGEgcmVnaXN0ZXIKKysgKiBmcm9tIHRoZSBrZXJuZWwgYXQgc3RhcnR1cCwgd2hpY2ggc2VlbXMgYSBzYW5lIHN0cmF0ZWd5LgorKyAqLworKworKyNkZWZpbmUgX19OUl9MaW51eCAgICAgICAgICAgICAgICAwCisrI2RlZmluZSBfX05SX2lvX3NldHVwICAgICAgICAgICAoX19OUl9MaW51eCArIDIxNSkKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAgICAgICAgIChfX05SX0xpbnV4ICsgMjE2KQorKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgICAgICAgKF9fTlJfTGludXggKyAyMTcpCisrI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAgICAgICAgICAoX19OUl9MaW51eCArIDIxOCkKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsICAgICAgICAgIChfX05SX0xpbnV4ICsgMjE5KQorKworKyNkZWZpbmUgU1lTX2lmeShzeXNjYWxsX25hbWUpICAgX19OUl8jI3N5c2NhbGxfbmFtZQorKworKy8qIEFzc3VtZSBhbGwgc3lzY2FsbHMgYXJlIGRvbmUgZnJvbSBQSUMgY29kZSBqdXN0IHRvIGJlCisrICogc2FmZS4gVGhlIHdvcnN0IGNhc2Ugc2NlbmFyaW8gaXMgdGhhdCB5b3UgbG9zZSBhIHJlZ2lzdGVyCisrICogYW5kIHNhdmUvcmVzdG9yZSByMTkgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKyNkZWZpbmUgUElDCisrCisrLyogRGVmaW5pdGlvbiB0YWtlbiBmcm9tIGdsaWJjIDIuMy4zCisrICogc3lzZGVwcy91bml4L3N5c3YvbGludXgvaHBwYS9zeXNkZXAuaAorKyAqLworKworKyNpZmRlZiBQSUMKKysvKiBXQVJOSU5HOiBDQU5OT1QgQkUgVVNFRCBJTiBBIE5PUCEgKi8KKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgICAgICAgY29weSAlJXIxOSwgJSVyNFxuIgorKyMgZGVmaW5lIEtfTERXX0FTTV9QSUMJIiAgICAgICBjb3B5ICUlcjQsICUlcjE5XG4iCisrIyBkZWZpbmUgS19VU0lOR19HUjQJIiVyNCIsCisrI2Vsc2UKKysjIGRlZmluZSBLX1NUV19BU01fUElDCSIgXG4iCisrIyBkZWZpbmUgS19MRFdfQVNNX1BJQwkiIFxuIgorKyMgZGVmaW5lIEtfVVNJTkdfR1I0CisrI2VuZGlmCisrCisrLyogR0NDIGhhcyB0byBiZSB3YXJuZWQgdGhhdCBhIHN5c2NhbGwgbWF5IGNsb2JiZXIgYWxsIHRoZSBBQkkKKysgICByZWdpc3RlcnMgbGlzdGVkIGFzICJjYWxsZXItc2F2ZXMiLCBzZWUgcGFnZSA4LCBUYWJsZSAyCisrICAgaW4gc2VjdGlvbiAyLjIuNiBvZiB0aGUgUEEtUklTQyBSVU4tVElNRSBhcmNoaXRlY3R1cmUKKysgICBkb2N1bWVudC4gSG93ZXZlciEgcjI4IGlzIHRoZSByZXN1bHQgYW5kIHdpbGwgY29uZmxpY3Qgd2l0aAorKyAgIHRoZSBjbG9iYmVyIGxpc3Qgc28gaXQgaXMgbGVmdCBvdXQuIEFsc28gdGhlIGlucHV0IGFyZ3VtZW50cworKyAgIHJlZ2lzdGVycyByMjAgLT4gcjI2IHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgbGlzdCBzbyB0aGV5CisrICAgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5LiBBbHRob3VnaCByMTkgaXMgY2xvYmJlcmVkIGJ5IHRoZSBzeXNjYWxsCisrICAgd2UgY2Fubm90IHNheSB0aGlzIGJlY2F1c2UgaXQgd291bGQgdmlvbGF0ZSBBQkksIHRodXMgd2Ugc2F5CisrICAgcjQgaXMgY2xvYmJlcmVkIGFuZCB1c2UgdGhhdCByZWdpc3RlciB0byBzYXZlL3Jlc3RvcmUgcjE5CisrICAgYWNyb3NzIHRoZSBzeXNjYWxsLiAqLworKworKyNkZWZpbmUgS19DQUxMX0NMT0JfUkVHUyAiJXIxIiwgIiVyMiIsIEtfVVNJTkdfR1I0IFwKKysJCQkgIiVyMjAiLCAiJXIyOSIsICIlcjMxIgorKworKyN1bmRlZiBLX0lOTElORV9TWVNDQUxMCisrI2RlZmluZSBLX0lOTElORV9TWVNDQUxMKG5hbWUsIG5yLCBhcmdzLi4uKQkoewkJCVwKKysJbG9uZyBfX3N5c19yZXM7CQkJCQkJCVwKKysJewkJCQkJCQkJXAorKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3JlcyBfX2FzbV9fKCJyMjgiKTsJCVwKKysJCUtfTE9BRF9BUkdTXyMjbnIoYXJncykJCQkJCVwKKysJCS8qIEZJWE1FOiBIQUNLIHN0dy9sZHcgcjE5IGFyb3VuZCBzeXNjYWxsICovCQlcCisrCQlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJXAorKwkJCUtfU1RXX0FTTV9QSUMJCQkJCVwKKysJCQkiCWJsZSAgMHgxMDAoJSVzcjIsICUlcjApXG4iCQlcCisrCQkJIglsZGkgJTEsICUlcjIwXG4iCQkJXAorKwkJCUtfTERXX0FTTV9QSUMJCQkJCVwKKysJCQk6ICI9ciIgKF9fcmVzKQkJCQkJXAorKwkJCTogImkiIChTWVNfaWZ5KG5hbWUpKSBLX0FTTV9BUkdTXyMjbnIJCVwKKysJCQk6ICJtZW1vcnkiLCBLX0NBTExfQ0xPQl9SRUdTIEtfQ0xPQl9BUkdTXyMjbnIJXAorKwkJKTsJCQkJCQkJXAorKwkJX19zeXNfcmVzID0gKGxvbmcpX19yZXM7CQkJCVwKKysJfQkJCQkJCQkJXAorKwlfX3N5c19yZXM7CQkJCQkJCVwKKyt9KQorKworKyNkZWZpbmUgS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18xKHIyNikJCQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyNiBfX2FzbV9fKCJyMjYiKSA9ICh1bnNpZ25lZCBsb25nKShyMjYpOyAgIFwKKysJS19MT0FEX0FSR1NfMCgpCisrI2RlZmluZSBLX0xPQURfQVJHU18yKHIyNixyMjUpCQkJCQlcCisrCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yMjUgX19hc21fXygicjI1IikgPSAodW5zaWduZWQgbG9uZykocjI1KTsgICBcCisrCUtfTE9BRF9BUkdTXzEocjI2KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfMyhyMjYscjI1LHIyNCkJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjI0IF9fYXNtX18oInIyNCIpID0gKHVuc2lnbmVkIGxvbmcpKHIyNCk7ICAgXAorKwlLX0xPQURfQVJHU18yKHIyNixyMjUpCisrI2RlZmluZSBLX0xPQURfQVJHU180KHIyNixyMjUscjI0LHIyMykJCQkJXAorKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcjIzIF9fYXNtX18oInIyMyIpID0gKHVuc2lnbmVkIGxvbmcpKHIyMyk7ICAgXAorKwlLX0xPQURfQVJHU18zKHIyNixyMjUscjI0KQorKyNkZWZpbmUgS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMiBfX2FzbV9fKCJyMjIiKSA9ICh1bnNpZ25lZCBsb25nKShyMjIpOyAgIFwKKysJS19MT0FEX0FSR1NfNChyMjYscjI1LHIyNCxyMjMpCisrI2RlZmluZSBLX0xPQURfQVJHU182KHIyNixyMjUscjI0LHIyMyxyMjIscjIxKQkJCVwKKysJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3IyMSBfX2FzbV9fKCJyMjEiKSA9ICh1bnNpZ25lZCBsb25nKShyMjEpOyAgIFwKKysJS19MT0FEX0FSR1NfNShyMjYscjI1LHIyNCxyMjMscjIyKQorKworKy8qIEV2ZW4gd2l0aCB6ZXJvIGFyZ3Mgd2UgdXNlIHIyMCBmb3IgdGhlIHN5c2NhbGwgbnVtYmVyICovCisrI2RlZmluZSBLX0FTTV9BUkdTXzAKKysjZGVmaW5lIEtfQVNNX0FSR1NfMSBLX0FTTV9BUkdTXzAsICJyIiAoX19yMjYpCisrI2RlZmluZSBLX0FTTV9BUkdTXzIgS19BU01fQVJHU18xLCAiciIgKF9fcjI1KQorKyNkZWZpbmUgS19BU01fQVJHU18zIEtfQVNNX0FSR1NfMiwgInIiIChfX3IyNCkKKysjZGVmaW5lIEtfQVNNX0FSR1NfNCBLX0FTTV9BUkdTXzMsICJyIiAoX19yMjMpCisrI2RlZmluZSBLX0FTTV9BUkdTXzUgS19BU01fQVJHU180LCAiciIgKF9fcjIyKQorKyNkZWZpbmUgS19BU01fQVJHU182IEtfQVNNX0FSR1NfNSwgInIiIChfX3IyMSkKKysKKysvKiBUaGUgcmVnaXN0ZXJzIG5vdCBsaXN0ZWQgYXMgaW5wdXRzIGJ1dCBjbG9iYmVyZWQgKi8KKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzYKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzUgS19DTE9CX0FSR1NfNiwgIiVyMjEiCisrI2RlZmluZSBLX0NMT0JfQVJHU180IEtfQ0xPQl9BUkdTXzUsICIlcjIyIgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMyBLX0NMT0JfQVJHU180LCAiJXIyMyIKKysjZGVmaW5lIEtfQ0xPQl9BUkdTXzIgS19DTE9CX0FSR1NfMywgIiVyMjQiCisrI2RlZmluZSBLX0NMT0JfQVJHU18xIEtfQ0xPQl9BUkdTXzIsICIlcjI1IgorKyNkZWZpbmUgS19DTE9CX0FSR1NfMCBLX0NMT0JfQVJHU18xLCAiJXIyNiIKKysKKysjZGVmaW5lIGlvX3N5c2NhbGwxKHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSkJCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxKQkJCQkJCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDEsIGFyZzEpOwkJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDIodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyKQkJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAyLCBhcmcxLCBhcmcyKTsJCQlcCisrfQorKworKyNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAorK3R5cGUgZm5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMykJCQkJXAorK3sJCQkJCQkJCQlcCisrICAgIHJldHVybiBLX0lOTElORV9TWVNDQUxMKHNuYW1lLCAzLCBhcmcxLCBhcmcyLCBhcmczKTsJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsNCh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQpIFwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpCQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KSBcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KQlcCisrewkJCQkJCQkJCVwKKysgICAgcmV0dXJuIEtfSU5MSU5FX1NZU0NBTEwoc25hbWUsIDUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpOwlcCisrfQorKworSW5kZXg6IGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMTAub3JpZy9zcmMvc3lzY2FsbC1hcm0uaAorKysrIGxpYmFpby0wLjMuMTEwL3NyYy9zeXNjYWxsLWFybS5oCitAQCAtMTE0LDMgKzExNCwxMTkgQEAgdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMworICAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisgfQorIAorKy8qCisrICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKyAqCisrICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IFJ1c3NlbGwgS2luZworKyAqCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKyAqCisrICogUGxlYXNlIGZvcndhcmQgX2FsbF8gY2hhbmdlcyB0byB0aGlzIGZpbGUgdG8gcm1rQGFybS5saW51eC5vcmcudWssCisrICogbm8gbWF0dGVyIHdoYXQgdGhlIGNoYW5nZSBpcy4gIFRoYW5rcyEKKysgKi8KKysKKysjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UJMHg5MDAwMDAKKysKKysjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorKyNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJMAorKyNlbHNlCisrI2RlZmluZSBfX05SX1NZU0NBTExfQkFTRQlfX05SX09BQklfU1lTQ0FMTF9CQVNFCisrI2VuZGlmCisrCisrI2RlZmluZSBfX05SX2lvX3NldHVwCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MykKKysjZGVmaW5lIF9fTlJfaW9fZGVzdHJveQkJCShfX05SX1NZU0NBTExfQkFTRSsyNDQpCisrI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NSkKKysjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKysjZGVmaW5lIF9fTlJfaW9fY2FuY2VsCQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NykKKysKKysjZGVmaW5lIF9fc3lzMih4KSAjeAorKyNkZWZpbmUgX19zeXMxKHgpIF9fc3lzMih4KQorKworKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCisrI2RlZmluZSBfX1NZU19SRUcobmFtZSkgcmVnaXN0ZXIgbG9uZyBfX3N5c3JlZyBfX2FzbV9fKCJyNyIpID0gX19OUl8jI25hbWU7CisrI2RlZmluZSBfX1NZU19SRUdfTElTVChyZWdzLi4uKSAiciIgKF9fc3lzcmVnKSAsICMjcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdDAiCisrI2Vsc2UKKysjZGVmaW5lIF9fU1lTX1JFRyhuYW1lKQorKyNkZWZpbmUgX19TWVNfUkVHX0xJU1QocmVncy4uLikgcmVncworKyNkZWZpbmUgX19zeXNjYWxsKG5hbWUpICJzd2lcdCIgX19zeXMxKF9fTlJfIyNuYW1lKSAiIgorKyNlbmRpZgorKworKyNkZWZpbmUgaW9fc3lzY2FsbDEodHlwZSxmbmFtZSxzbmFtZSx0eXBlMSxhcmcxKQkJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEpIHsJCQkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApICkJCQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMih0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJCVwKKyt0eXBlIGZuYW1lKHR5cGUxIGFyZzEsdHlwZTIgYXJnMikgewkJCQkJXAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSkgKQkJCVwKKysJOiAibWVtb3J5IiApOwkJCQkJCQlcCisrICByZXR1cm4gKHR5cGUpIF9fcmVzX3IwOwkJCQkJCVwKKyt9CisrCisrI2RlZmluZSBpb19zeXNjYWxsMyh0eXBlLGZuYW1lLHNuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczKQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLHR5cGUyIGFyZzIsdHlwZTMgYXJnMykgewkJCQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMikgKQkJXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNClcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KSB7CQlcCisrICBfX1NZU19SRUcoc25hbWUpCQkJCQkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMCBfX2FzbV9fKCJyMCIpID0gKGxvbmcpYXJnMTsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjEgX19hc21fXygicjEiKSA9IChsb25nKWFyZzI7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IyIF9fYXNtX18oInIyIikgPSAobG9uZylhcmczOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMyBfX2FzbV9fKCJyMyIpID0gKGxvbmcpYXJnNDsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcmVzX3IwIF9fYXNtX18oInIwIik7CQkJCQlcCisrICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorKyAgX19zeXNjYWxsKHNuYW1lKQkJCQkJCQlcCisrCTogIj1yIiAoX19yZXNfcjApCQkJCQkJXAorKwk6IF9fU1lTX1JFR19MSVNUKCAiMCIgKF9fcjApLCAiciIgKF9fcjEpLCAiciIgKF9fcjIpLCAiciIgKF9fcjMpICkgXAorKwk6ICJtZW1vcnkiICk7CQkJCQkJCVwKKysgIHJldHVybiAodHlwZSkgX19yZXNfcjA7CQkJCQkJXAorK30KKysKKysjZGVmaW5lIGlvX3N5c2NhbGw1KHR5cGUsZm5hbWUsc25hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsdHlwZTQsYXJnNCx0eXBlNSxhcmc1KQlcCisrdHlwZSBmbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LCB0eXBlNSBhcmc1KSB7XAorKyAgX19TWVNfUkVHKHNuYW1lKQkJCQkJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjAgX19hc21fXygicjAiKSA9IChsb25nKWFyZzE7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3IxIF9fYXNtX18oInIxIikgPSAobG9uZylhcmcyOwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yMiBfX2FzbV9fKCJyMiIpID0gKGxvbmcpYXJnMzsJCQlcCisrICByZWdpc3RlciBsb25nIF9fcjMgX19hc21fXygicjMiKSA9IChsb25nKWFyZzQ7CQkJXAorKyAgcmVnaXN0ZXIgbG9uZyBfX3I0IF9fYXNtX18oInI0IikgPSAobG9uZylhcmc1OwkJCVwKKysgIHJlZ2lzdGVyIGxvbmcgX19yZXNfcjAgX19hc21fXygicjAiKTsJCQkJCVwKKysgIF9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisrICBfX3N5c2NhbGwoc25hbWUpCQkJCQkJCVwKKysJOiAiPXIiIChfX3Jlc19yMCkJCQkJCQlcCisrCTogX19TWVNfUkVHX0xJU1QoICIwIiAoX19yMCksICJyIiAoX19yMSksICJyIiAoX19yMiksCQlcCisrCQkJICAiciIgKF9fcjMpLCAiciIgKF9fcjQpICkJCQlcCisrCTogIm1lbW9yeSIgKTsJCQkJCQkJXAorKyAgcmV0dXJuICh0eXBlKSBfX3Jlc19yMDsJCQkJCQlcCisrfQorKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW8vZGVzdGRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkOTYwMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2Rlc3RkaXIucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2Zyb20gb3BlbmVtYmVkZGVkLCBhZGRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYWlvLTAuMy4xMDYub3JpZy9NYWtlZmlsZQkyMDA0LTAyLTI2IDA3OjI1OjEwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmFpby0wLjMuMTA2L01ha2VmaWxlCTIwMDYtMTAtMTQgMDk6MTk6MDcuMDAwMDAwMDAwIC0wNzAwCitAQCAtMTUsNyArMTUsNyBAQAorIAlAJChNQUtFKSAtQyBzcmMKKyAKKyBpbnN0YWxsOgorLQlAJChNQUtFKSAtQyBzcmMgaW5zdGFsbCBwcmVmaXg9JChwcmVmaXgpIGluY2x1ZGVkaXI9JChpbmNsdWRlZGlyKSBsaWJkaXI9JChsaWJkaXIpCisrCUAkKE1BS0UpIC1DIHNyYyBpbnN0YWxsIHByZWZpeD0kKERFU1RESVIpJChwcmVmaXgpIGluY2x1ZGVkaXI9JChERVNURElSKSQoaW5jbHVkZWRpcikgbGliZGlyPSQoREVTVERJUikkKGxpYmRpcikKKyAKKyAKKyBjbGVhbjoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9nZW5lcmljLWFyY2gtZGVjdGVjdGlvbi1mb3ItcGFkZGluZy1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsNjUgQEAKK0Zyb206IE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CitEYXRlOiBUdWUsIDI3IEphbiAyMDE1IDE0OjU5OjM1ICsxMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEdlbmVyaWMgYXJjaCBkZWN0ZWN0aW9uIGZvciBwYWRkaW5nIGRlZmluZXMKKworV2hlbiBhdmFpbGFibGUgdXNlIHRoZSBHTlUgQyBkZWZpbmVzIGZvciBlbmRpYW4gYW5kIGJpdHdpZHRoIHRvCitkZXRlcm1pbmUgdGhlIHBhZGRpbmcgcmVxdWlyZWQuIFRoaXMgcmVkdWNlcyB0aGUgbmVlZCB0byBkZWZpbmUgdGhlCitwYWRkaW5nIHNlbGVjdGlvbiBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlLgorCitTaWduZWQtb2ZmLWJ5OiBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorU2lnbmVkLW9mZi1ieTogSmVmZiBNb3llciA8am1veWVyQHJlZGhhdC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CistLS0KKyBzcmMvbGliYWlvLmggfCAxNiArKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvbGliYWlvLmggYi9zcmMvbGliYWlvLmgKK2luZGV4IDEyMjMxNDYuLjRhNGUwZjUgMTAwNjQ0CistLS0gYS9zcmMvbGliYWlvLmgKKysrKyBiL3NyYy9saWJhaW8uaAorQEAgLTUyLDE0ICs1MiwxOCBAQCB0eXBlZGVmIGVudW0gaW9faW9jYl9jbWQgeworIC8qIGxpdHRsZSBlbmRpYW4sIDMyIGJpdHMgKi8KKyAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19BUk1FQl9fKSkgfHwgXAorICAgICBkZWZpbmVkKF9fc2hfXykgfHwgZGVmaW5lZChfX2JmaW5fXykgfHwgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBcCistICAgIGRlZmluZWQoX19jcmlzX18pCisrICAgIGRlZmluZWQoX19jcmlzX18pIHx8IFwKKysgICAgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19CWVRFX09SREVSX18pICYmIFwKKysgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0xJVFRMRV9FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl4OyB1bnNpZ25lZCB5CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJeDsgdW5zaWduZWQgeQorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgbG9uZyB4OyB1bnNpZ25lZCB5CisgCisgLyogbGl0dGxlIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFTF9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgIF9fQllURV9PUkRFUl9fID09IF9fT1JERVJfTElUVExFX0VORElBTl9fICYmIF9fU0laRU9GX0xPTkdfXyA9PSA4KQorICNkZWZpbmUgUEFEREVEKHgsIHkpCXgsIHkKKyAjZGVmaW5lIFBBRERFRHB0cih4LCB5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC02Nyw3ICs3MSw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgLyogYmlnIGVuZGlhbiwgNjQgYml0cyAqLworICNlbGlmIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IFwKKyAgICAgICAoZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpIHx8IFwKKy0gICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkKKysgICAgICAoZGVmaW5lZChfX2FhcmNoNjRfXykgJiYgZGVmaW5lZChfX0FBUkNINjRFQl9fKSkgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gOCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCx5KQl4CisgI2RlZmluZSBQQURERUR1bCh4LCB5KQl1bnNpZ25lZCBsb25nIHgKK0BAIC03Niw3ICs4Miw5IEBAIHR5cGVkZWYgZW51bSBpb19pb2NiX2NtZCB7CisgI2VsaWYgZGVmaW5lZChfX1BQQ19fKSB8fCBkZWZpbmVkKF9fczM5MF9fKSB8fCBcCisgICAgICAgKGRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX0FSTUVCX18pKSB8fCBcCisgICAgICAgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX202OGtfXykgfHwgXAorLSAgICAgIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19mcnZfXykgfHwgZGVmaW5lZChfX2F2cjMyX18pCisrICAgICAgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX2Zydl9fKSB8fCBkZWZpbmVkKF9fYXZyMzJfXykgfHwgXAorKyAgICAgIChkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAmJiBcCisrICAgICAgICAgICBfX0JZVEVfT1JERVJfXyA9PSBfX09SREVSX0JJR19FTkRJQU5fXyAmJiBfX1NJWkVPRl9MT05HX18gPT0gNCkKKyAjZGVmaW5lIFBBRERFRCh4LCB5KQl1bnNpZ25lZCB5OyB4CisgI2RlZmluZSBQQURERURwdHIoeCwgeSkJdW5zaWduZWQgeTsgeAorICNkZWZpbmUgUEFEREVEdWwoeCwgeSkJdW5zaWduZWQgeTsgdW5zaWduZWQgbG9uZyB4CistLSAKKzIuMS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjg1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl9taXBzX3N5c2NhbGxzLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IFBoaWwgU3RhdWIgPFBoaWwuU3RhdWJAd2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLW1pcHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFpby0wLjMuMTA5Lm9yaWcvc3JjL3N5c2NhbGwtbWlwcy5oCisrKysgbGliYWlvLTAuMy4xMDkvc3JjL3N5c2NhbGwtbWlwcy5oCitAQCAtNzYsNyArNzYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGwyKHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiKSBcCitAQCAtMTAwLDcgKzEwMCw3IEBAIHR5cGUgZm5hbWUoYXR5cGUgYSwgYnR5cGUgYikgXAorIAlcCisgCWlmIChfX2EzID09IDApIFwKKyAJCXJldHVybiAodHlwZSkgX192MDsgXAorLQlyZXR1cm4gKHR5cGUpIC0xOyBcCisrCXJldHVybiAodHlwZSkgKC0oX192MCkpOyBcCisgfQorIAorICNkZWZpbmUgaW9fc3lzY2FsbDModHlwZSxmbmFtZSxzbmFtZSxhdHlwZSxhLGJ0eXBlLGIsY3R5cGUsYykgXAorQEAgLTEyNSw3ICsxMjUsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMpIFwKKyAJXAorIAlpZiAoX19hMyA9PSAwKSBcCisgCQlyZXR1cm4gKHR5cGUpIF9fdjA7IFwKKy0JcmV0dXJuICh0eXBlKSAtMTsgXAorKwlyZXR1cm4gKHR5cGUpICgtKF9fdjApKTsgXAorIH0KKyAKKyAjZGVmaW5lIGlvX3N5c2NhbGw0KHR5cGUsZm5hbWUsc25hbWUsYXR5cGUsYSxidHlwZSxiLGN0eXBlLGMsZHR5cGUsZCkgXAorQEAgLTE1MCw3ICsxNTAsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2lmIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKQorQEAgLTE4Niw3ICsxODYsNyBAQCB0eXBlIGZuYW1lKGF0eXBlIGEsIGJ0eXBlIGIsIGN0eXBlIGMsIGR0CisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyKSAqLworQEAgLTIxNiw3ICsyMTYsNyBAQCB0eXBlIGZuYW1lIChhdHlwZSBhLGJ0eXBlIGIsY3R5cGUgYyxkdHlwCisgCVwKKyAJaWYgKF9fYTMgPT0gMCkgXAorIAkJcmV0dXJuICh0eXBlKSBfX3YwOyBcCistCXJldHVybiAodHlwZSkgLTE7IFwKKysJcmV0dXJuICh0eXBlKSAoLShfX3YwKSk7IFwKKyB9CisgCisgI2VuZGlmIC8qIChfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMikgfHwgKF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQpICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYWlvL2xpYmFpby9saWJhaW9fZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4ZjVhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvL2xpYmFpb19maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDYxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUHJvcGVybHkgbG9hZCBhcmd1bWVudHMgNSBhbiA2IGZvciB4ODYtNjQgc3lzY2FsbAorVXNlIGFzbSAoInIxMCIpIGFuZCBhc20gKCJyOCIpIHRvIGxvYWQgYXJndW1lbnRzIDUgYW4gNiBmb3IgeDg2LTY0CitzeXNjYWxsIHNvIHRoYXQgaXQgd29ya3Mgd2l0aCBib3RoIHgzMiBhbmQgeDg2LTY0LgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTEvMTIvMDIKKworLS0tIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oLngzMgkyMDA5LTEwLTA5IDExOjE3OjAyLjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmFpby0wLjMuMTA5L3NyYy9zeXNjYWxsLXg4Nl82NC5oCTIwMTEtMTItMDIgMDk6MDk6MDcuNTM3NjAzMjI0IC0wODAwCitAQCAtMSw4ICsxLDE4IEBACisrI2lmbmRlZiBfX05SX2lvX3NldHVwCisgI2RlZmluZSBfX05SX2lvX3NldHVwCQkyMDYKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZGVzdHJveQorICNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyMDcKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fZ2V0ZXZlbnRzCisgI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cwkyMDgKKysjZW5kaWYKKysjaWZuZGVmIF9fTlJfaW9fc3VibWl0CisgI2RlZmluZSBfX05SX2lvX3N1Ym1pdAkJMjA5CisrI2VuZGlmCisrI2lmbmRlZiBfX05SX2lvX2NhbmNlbAorICNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTIxMAorKyNlbmRpZgorIAorICNkZWZpbmUgX19zeXNjYWxsX2Nsb2JiZXIgInIxMSIsInJjeCIsIm1lbW9yeSIgCisgI2RlZmluZSBfX3N5c2NhbGwgInN5c2NhbGwiCitAQCAtNDIsMTAgKzUyLDExIEBAIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB0eXBlIGZuYW1lICh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0KQkJXAorIHsJCQkJCQkJCQlcCisgbG9uZyBfX3JlczsJCQkJCQkJCVwKKy1fX2FzbV9fIHZvbGF0aWxlICgibW92cSAlNSwlJXIxMCA7IiBfX3N5c2NhbGwJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNCBhc20gKCJyMTAiKSA9IChsb25nKSBhcmc0OwkJCQlcCisrX19hc21fXyB2b2xhdGlsZSAoX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpIDogX19zeXNjYWxsX2Nsb2JiZXIsInIxMCIgKTsgXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpKTsgXAorIHJldHVybiBfX3JlczsJCQkJCQkJCVwKKyB9IAorIAorQEAgLTU0LDEwICs2NSwxMSBAQCByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgdHlwZSBmbmFtZSAodHlwZTEgYXJnMSx0eXBlMiBhcmcyLHR5cGUzIGFyZzMsdHlwZTQgYXJnNCx0eXBlNSBhcmc1KQlcCisgewkJCQkJCQkJCVwKKyBsb25nIF9fcmVzOwkJCQkJCQkJXAorLV9fYXNtX18gdm9sYXRpbGUgKCJtb3ZxICU1LCUlcjEwIDsgbW92cSAlNiwlJXI4IDsgIiBfX3N5c2NhbGwJCVwKKytyZWdpc3RlciBsb25nIF9fYTQgYXNtICgicjEwIikgPSAobG9uZykgYXJnNDsJCQkJXAorK3JlZ2lzdGVyIGxvbmcgX19hNSBhc20gKCJyOCIpID0gKGxvbmcpIGFyZzU7CQkJCVwKKytfX2FzbV9fIHZvbGF0aWxlICggX19zeXNjYWxsCQkJCQkJXAorIAk6ICI9YSIgKF9fcmVzKQkJCQkJCQlcCisgCTogIjAiIChfX05SXyMjc25hbWUpLCJEIiAoKGxvbmcpKGFyZzEpKSwiUyIgKChsb25nKShhcmcyKSksCVwKKy0JICAiZCIgKChsb25nKShhcmczKSksImciICgobG9uZykoYXJnNCkpLCJnIiAoKGxvbmcpKGFyZzUpKSA6CVwKKy0JX19zeXNjYWxsX2Nsb2JiZXIsInI4IiwicjEwIiApOwkJCQkJXAorKwkgICJkIiAoKGxvbmcpKGFyZzMpKSwiciIgKF9fYTQpLCJyIiAoX19hNSkpOwkJCVwKKyByZXR1cm4gX19yZXM7CQkJCQkJCQlcCisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFpby9saWJhaW9fMC4zLjExMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JlMjljZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhaW8vbGliYWlvXzAuMy4xMTAuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJBc3luY2hyb25vdXMgSS9PIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJBc3luY2hyb25vdXMgaW5wdXQvb3V0cHV0IGxpYnJhcnkgdGhhdCB1c2VzIHRoZSBrZXJuZWxzIG5hdGl2ZSBpbnRlcmZhY2UiCitIT01FUEFHRSA9ICJodHRwOi8vbHNlLnNvdXJjZWZvcmdlLm5ldC9pby9haW8uaHRtbCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kODA0NWYzYjhmOTI5YzFjYjI5YTFlM2ZkNzM3YjQ5OSIKKworU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vbGliYS9saWJhaW8vbGliYWlvXyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2dlbmVyaWMtYXJjaC1kZWN0ZWN0aW9uLWZvci1wYWRkaW5nLWRlZmluZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDBfYXJjaGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rlc3RkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGliYWlvX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmFpb19maXhfZm9yX21pcHNfc3lzY2FsbHMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmEzNTYwMmU0Mzc3ODM4M2UyZjQ5MDdhNGNhMzlhYjgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTAxOTAyOGU2MzE3MjU3MjkzNzYyNTBlMzJiNDczMDEyZjdjYjY4ZTFmNzI3NWJmYzFiYmNkZDBmODc0NWY3ZSIKKworRVhUUkFfT0VNQUtFID0rICJwcmVmaXg9JHtwcmVmaXh9IGluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfSBsaWJkaXI9JHtsaWJkaXJ9IgorIyBOZWVkIGxpYmMgZm9yIHN0YWNrLXByb3RlY3RvcidzIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKSBib3VuY2UgZnVuY3Rpb24KK0xERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWxjIgorCitkb19jb25maWd1cmUgKCkgeworICAgIHNlZCAtaSAncyNMSU5LX0ZMQUdTPS4qI0xJTktfRkxBR1M9JChMREZMQUdTKSMnIHNyYy9NYWtlZmlsZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvMDAwMS1BZGQtQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTc3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlLzAwMDEtQWRkLUFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDE1MSBAQAorRnJvbSA1OTM1NzE1NzcwNmQ0N2MzNjViMjIyNzczOWUxN2RhYmEzNjA3NTI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxlc3NhbmRybyBHaGVkaW5pIDxhbGVzc2FuZHJvQGdoZWRpbmkubWU+CitEYXRlOiBTdW4sIDEgTWFyIDIwMTUgMTI6MDc6NDUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTIG9wdGlvbgorCitUaGlzIGZpeGVzIGEgZGlyZWN0b3J5IHRyYXZlcnNhbCBpbiB0aGUgY3BpbyB0b29sLgorCisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgY3Bpby9ic2RjcGlvLjEgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDMgKystCisgY3Bpby9jcGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKysKKyBsaWJhcmNoaXZlL2FyY2hpdmUuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMgICAgICAgICAgfCAgICAzICsrKworIGxpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgICAgfCAgIDE0ICsrKysrKysrKysrLS0tCisgbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYyB8ICAgMjMgKysrKysrKysrKysrKysrKysrKysrKysKKyA2IGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jcGlvL2JzZGNwaW8uMSBiL2NwaW8vYnNkY3Bpby4xCitpbmRleCBmOTY2YWEwLi5lNTI1NDZlIDEwMDY0NAorLS0tIGEvY3Bpby9ic2RjcGlvLjEKKysrKyBiL2NwaW8vYnNkY3Bpby4xCitAQCAtMTU2LDcgKzE1Niw4IEBAIFNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24uCisgLkl0IEZsIEZsIGluc2VjdXJlCisgKGkgYW5kIHAgbW9kZSBvbmx5KQorIERpc2FibGUgc2VjdXJpdHkgY2hlY2tzIGR1cmluZyBleHRyYWN0aW9uIG9yIGNvcHlpbmcuCistVGhpcyBhbGxvd3MgZXh0cmFjdGlvbiB2aWEgc3ltYm9saWMgbGlua3MgYW5kIHBhdGggbmFtZXMgY29udGFpbmluZworK1RoaXMgYWxsb3dzIGV4dHJhY3Rpb24gdmlhIHN5bWJvbGljIGxpbmtzLCBhYnNvbHV0ZSBwYXRocywKKythbmQgcGF0aCBuYW1lcyBjb250YWluaW5nCisgLlNxIC4uCisgaW4gdGhlIG5hbWUuCisgLkl0IEZsIEogLCBGbCBGbCB4egorZGlmZiAtLWdpdCBhL2NwaW8vY3Bpby5jIGIvY3Bpby9jcGlvLmMKK2luZGV4IDBhY2RlMTEuLmIyNjdlOWIgMTAwNjQ0CistLS0gYS9jcGlvL2NwaW8uYworKysrIGIvY3Bpby9jcGlvLmMKK0BAIC0xNzEsNiArMTcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9OT19PVkVSV1JJVEVfTkVXRVI7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJY3Bpby0+ZXh0cmFjdF9mbGFncyB8PSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9QRVJNOworIAljcGlvLT5leHRyYWN0X2ZsYWdzIHw9IEFSQ0hJVkVfRVhUUkFDVF9GRkxBR1M7CisgCWNwaW8tPmV4dHJhY3RfZmxhZ3MgfD0gQVJDSElWRV9FWFRSQUNUX0FDTDsKK0BAIC0yNTYsNiArMjU3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJY2FzZSBPUFRJT05fSU5TRUNVUkU6CisgCQkJY3Bpby0+ZXh0cmFjdF9mbGFncyAmPSB+QVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9TWU1MSU5LUzsKKyAJCQljcGlvLT5leHRyYWN0X2ZsYWdzICY9IH5BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PRE9URE9UOworKwkJCWNwaW8tPmV4dHJhY3RfZmxhZ3MgJj0gfkFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTOworIAkJCWJyZWFrOworIAkJY2FzZSAnTCc6IC8qIEdOVSBjcGlvICovCisgCQkJY3Bpby0+b3B0aW9uX2ZvbGxvd19saW5rcyA9IDE7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlLmggYi9saWJhcmNoaXZlL2FyY2hpdmUuaAoraW5kZXggMWYwZmMzOC4uZWY2MzVhYyAxMDA2NDQKKy0tLSBhL2xpYmFyY2hpdmUvYXJjaGl2ZS5oCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmUuaAorQEAgLTY0OSw2ICs2NDksOCBAQCBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9zZXRfcGFzc3BocmFzZV9jYWxsYmFjayhzdHJ1Y3QgYXJjaGl2ZSAqLAorIC8qIERlZmF1bHQ6IERvIG5vdCB1c2UgSEZTKyBjb21wcmVzc2lvbiBpZiBpdCB3YXMgbm90IGNvbXByZXNzZWQuICovCisgLyogVGhpcyBoYXMgbm8gZWZmZWN0IGV4Y2VwdCBvbiBNYWMgT1MgdjEwLjYgb3IgbGF0ZXIuICovCisgI2RlZmluZQlBUkNISVZFX0VYVFJBQ1RfSEZTX0NPTVBSRVNTSU9OX0ZPUkNFRAkoMHg4MDAwKQorKy8qIERlZmF1bHQ6IERvIG5vdCByZWplY3QgZW50cmllcyB3aXRoIGFic29sdXRlIHBhdGhzICovCisrI2RlZmluZSBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyAoMHgxMDAwMCkKKyAKKyBfX0xBX0RFQ0wgaW50IGFyY2hpdmVfcmVhZF9leHRyYWN0KHN0cnVjdCBhcmNoaXZlICosIHN0cnVjdCBhcmNoaXZlX2VudHJ5ICosCisgCQkgICAgIGludCBmbGFncyk7CitkaWZmIC0tZ2l0IGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2suMyBiL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrLjMKK2luZGV4IGZhOTI1Y2MuLmEyZTdhZmEgMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCisrKysgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlzay4zCitAQCAtMTc3LDYgKzE3Nyw5IEBAIFRoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyBOb3RlIHRoYXQgcGF0aHMgZW5kaW5nIGluCisgLlBhIC4uCisgYWx3YXlzIGNhdXNlIGFuIGVycm9yLCByZWdhcmRsZXNzIG9mIHRoaXMgZmxhZy4KKysuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NFQ1VSRV9OT0FCU09MVVRFUEFUSFMKKytSZWZ1c2UgdG8gZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorK1RoZSBkZWZhdWx0IGlzIHRvIG5vdCByZWZ1c2Ugc3VjaCBwYXRocy4KKyAuSXQgQ20gQVJDSElWRV9FWFRSQUNUX1NQQVJTRQorIFNjYW4gZGF0YSBmb3IgYmxvY2tzIG9mIE5VTCBieXRlcyBhbmQgdHJ5IHRvIHJlY3JlYXRlIHRoZW0gd2l0aCBob2xlcy4KKyBUaGlzIHJlc3VsdHMgaW4gc3BhcnNlIGZpbGVzLCBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSBhcmNoaXZlIGZvcm1hdAorZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZV9kaXNrX3Bvc2l4LmMgYi9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGVfZGlza19wb3NpeC5jCitpbmRleCBhYjNiZGFjLi5jMTI5MGViIDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlX2Rpc2tfcG9zaXguYworQEAgLTI1MDksOCArMjUwOSw5IEBAIGNsZWFudXBfcGF0aG5hbWVfd2luKHN0cnVjdCBhcmNoaXZlX3dyaXRlX2Rpc2sgKmEpCisgLyoKKyAgKiBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lLiAgSW4gcGFydGljdWxhciwgdGhpcyBzdHJpcHMgZHVwbGljYXRlCisgICogJy8nIGNoYXJhY3RlcnMsICcuJyBlbGVtZW50cywgYW5kIHRyYWlsaW5nICcvJy4gIEl0IGFsc28gcmFpc2VzIGFuCistICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJyBvciAoaWYgX1NFQ1VSRV9OT0RPVERPVCBpcworLSAqIHNldCkgYW55ICcuLicgaW4gdGhlIHBhdGguCisrICogZXJyb3IgZm9yIGFuIGVtcHR5IHBhdGgsIGEgdHJhaWxpbmcgJy4uJywgKGlmIF9TRUNVUkVfTk9ET1RET1QgaXMKKysgKiBzZXQpIGFueSAnLi4nIGluIHRoZSBwYXRoIG9yIChpZiBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUworKyAqIGlzIHNldCkgaWYgdGhlIHBhdGggaXMgYWJzb2x1dGUuCisgICovCisgc3RhdGljIGludAorIGNsZWFudXBfcGF0aG5hbWUoc3RydWN0IGFyY2hpdmVfd3JpdGVfZGlzayAqYSkKK0BAIC0yNTI5LDggKzI1MzAsMTUgQEAgY2xlYW51cF9wYXRobmFtZShzdHJ1Y3QgYXJjaGl2ZV93cml0ZV9kaXNrICphKQorIAljbGVhbnVwX3BhdGhuYW1lX3dpbihhKTsKKyAjZW5kaWYKKyAJLyogU2tpcCBsZWFkaW5nICcvJy4gKi8KKy0JaWYgKCpzcmMgPT0gJy8nKQorKwlpZiAoKnNyYyA9PSAnLycpIHsKKysJCWlmIChhLT5mbGFncyAmIEFSQ0hJVkVfRVhUUkFDVF9TRUNVUkVfTk9BQlNPTFVURVBBVEhTKSB7CisrCQkJYXJjaGl2ZV9zZXRfZXJyb3IoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfRVJSTk9fTUlTQywKKysJCQkgICAgICAgICAgICAgICAgICAiUGF0aCBpcyBhYnNvbHV0ZSIpOworKwkJCXJldHVybiAoQVJDSElWRV9GQUlMRUQpOworKwkJfQorKworIAkJc2VwYXJhdG9yID0gKnNyYysrOworKwl9CisgCisgCS8qIFNjYW4gdGhlIHBhdGhuYW1lIG9uZSBlbGVtZW50IGF0IGEgdGltZS4gKi8KKyAJZm9yICg7OykgeworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvdGVzdC90ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLmMgYi9saWJhcmNoaXZlL3Rlc3QvdGVzdF93cml0ZV9kaXNrX3NlY3VyZS5jCitpbmRleCAzMWM1YmZkLi4yYzk0MjA2IDEwMDY0NAorLS0tIGEvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworKysrIGIvbGliYXJjaGl2ZS90ZXN0L3Rlc3Rfd3JpdGVfZGlza19zZWN1cmUuYworQEAgLTE3OCw2ICsxNzgsMjkgQEAgREVGSU5FX1RFU1QodGVzdF93cml0ZV9kaXNrX3NlY3VyZSkKKyAJYXNzZXJ0KFNfSVNESVIoc3Quc3RfbW9kZSkpOworIAlhcmNoaXZlX2VudHJ5X2ZyZWUoYWUpOworIAorKwkvKgorKwkgKiBXaXRob3V0IHNlY3VyaXR5IGNoZWNrcywgd2Ugc2hvdWxkIGJlIGFibGUgdG8KKysJICogZXh0cmFjdCBhbiBhYnNvbHV0ZSBwYXRoLgorKwkgKi8KKysJYXNzZXJ0KChhZSA9IGFyY2hpdmVfZW50cnlfbmV3KCkpICE9IE5VTEwpOworKwlhcmNoaXZlX2VudHJ5X2NvcHlfcGF0aG5hbWUoYWUsICIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFyY2hpdmVfZW50cnlfc2V0X21vZGUoYWUsIFNfSUZSRUcgfCAwNzc3KTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlRXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCWFzc2VydCgwID09IHVubGluaygiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpKTsKKysKKysJLyogQnV0IHdpdGggc2VjdXJpdHkgY2hlY2tzIGVuYWJsZWQsIHRoaXMgc2hvdWxkIGZhaWwuICovCisrCWFzc2VydChhcmNoaXZlX2VudHJ5X2NsZWFyKGFlKSAhPSBOVUxMKTsKKysJYXJjaGl2ZV9lbnRyeV9jb3B5X3BhdGhuYW1lKGFlLCAiL3RtcC9saWJhcmNoaXZlX3Rlc3QtdGVzdF93cml0ZV9kaXNrX3NlY3VyZS1hYnNvbHV0ZV9wYXRoLnRtcCIpOworKwlhcmNoaXZlX2VudHJ5X3NldF9tb2RlKGFlLCBTX0lGUkVHIHwgMDc3Nyk7CisrCWFyY2hpdmVfd3JpdGVfZGlza19zZXRfb3B0aW9ucyhhLCBBUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUyk7CisrCWZhaWx1cmUoIkV4dHJhY3RpbmcgYW4gYWJzb2x1dGUgcGF0aCBzaG91bGQgZmFpbCBoZXJlLiIpOworKwlhc3NlcnRFcXVhbEludChBUkNISVZFX0ZBSUxFRCwgYXJjaGl2ZV93cml0ZV9oZWFkZXIoYSwgYWUpKTsKKysJYXJjaGl2ZV9lbnRyeV9mcmVlKGFlKTsKKysJYXNzZXJ0KDAgPT0gYXJjaGl2ZV93cml0ZV9maW5pc2hfZW50cnkoYSkpOworKwlhc3NlcnRGaWxlTm90RXhpc3RzKCIvdG1wL2xpYmFyY2hpdmVfdGVzdC10ZXN0X3dyaXRlX2Rpc2tfc2VjdXJlLWFic29sdXRlX3BhdGgudG1wIik7CisrCisgCWFzc2VydEVxdWFsSW50KEFSQ0hJVkVfT0ssIGFyY2hpdmVfd3JpdGVfZnJlZShhKSk7CisgCisgCS8qIFRlc3QgdGhlIGVudHJpZXMgb24gZGlzay4gKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNmY4MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL2xpYmFyY2hpdmUtQ1ZFLTIwMTMtMDIxMS5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIDJmNTVkNmJkMzA4ZWE2MTk3NTU1OGMyNDY5YWUzNDlkYmEyOTdlODkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFNhdCwgMjIgRmViIDIwMTQgMTQ6MzU6NTkgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IENWRS0yMDEzLTAyMTEKKworVGhpcyBwYXRjaCBjb21lcyBmcm9tOmh0dHBzOi8vZ2l0aHViLmNvbS9saWJhcmNoaXZlL2xpYmFyY2hpdmUvY29tbWl0LzIyNTMxNTQ1NTE0MDQzZTA0NjMzZTFjMDE1Yzc1NDBiOWRlOWRiZTQKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBCYW9nZW4gc2hhbmcgPGJhb2dlbi5zaGFuZ0B3aW5kcml2ZXIuY29tPgorCitVcGRhdGUgdGhlIHBhdGNoIGJlY2F1c2Ugb2YgdXByZXYgb24gMjAxNDAyMjIKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmFyY2hpdmUvYXJjaGl2ZV93cml0ZS5jIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK2luZGV4IGEzZDFhMzMuLmEzMjM1ODggMTAwNjQ0CistLS0gYS9saWJhcmNoaXZlL2FyY2hpdmVfd3JpdGUuYworKysrIGIvbGliYXJjaGl2ZS9hcmNoaXZlX3dyaXRlLmMKK0BAIC02NzEsOCArNjcxLDEyIEBAIHN0YXRpYyBzc2l6ZV90CisgX2FyY2hpdmVfd3JpdGVfZGF0YShzdHJ1Y3QgYXJjaGl2ZSAqX2EsIGNvbnN0IHZvaWQgKmJ1ZmYsIHNpemVfdCBzKQorIHsKKyAJc3RydWN0IGFyY2hpdmVfd3JpdGUgKmEgPSAoc3RydWN0IGFyY2hpdmVfd3JpdGUgKilfYTsKKysJY29uc3Qgc2l6ZV90IG1heF93cml0ZSA9IElOVF9NQVg7CisgCWFyY2hpdmVfY2hlY2tfbWFnaWMoJmEtPmFyY2hpdmUsIEFSQ0hJVkVfV1JJVEVfTUFHSUMsCisgCSAgICBBUkNISVZFX1NUQVRFX0RBVEEsICJhcmNoaXZlX3dyaXRlX2RhdGEiKTsKKysJLyogSW4gcGFydGljdWxhciwgdGhpcyBjYXRjaGVzIGF0dGVtcHRzIHRvIHBhc3MgbmVnYXRpdmUgdmFsdWVzLiAqLworKwlpZiAocyA+IG1heF93cml0ZSkKKysJCXMgPSBtYXhfd3JpdGU7CisgCWFyY2hpdmVfY2xlYXJfZXJyb3IoJmEtPmFyY2hpdmUpOworIAlyZXR1cm4gKChhLT5mb3JtYXRfd3JpdGVfZGF0YSkoYSwgYnVmZiwgcykpOworIH0KKy0tIAorMS44LjIuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL21rZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDlhMjk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9ta2Rpci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitBZGQgbWlzc2luZyBta2RpciBjYWxscyBzbyB0aGF0IG91dC1vZi10cmVlIGJ1aWxkcyB3b3JrLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9naXRodWIuY29tL2xpYmFyY2hpdmUvbGliYXJjaGl2ZS9wdWxsLzUzNCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCAzZmEyZDIyLi41ZWNjYTUyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNTA4LDYgKzUwOCw3IEBAIGxpYmFyY2hpdmVfdGVzdF9MREFERD0gJChMVExJQklDT05WKQorICMgQnVpbGRpbmcgaXQgYXV0b21hdGljYWxseSBwcm92aWRlcyBhIHNhbml0eS1jaGVjayBvbiBsaWJhcmNoaXZlX3Rlc3RfU09VUkNFUworICMgYWJvdmUuCisgbGliYXJjaGl2ZS90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBsaWJhcmNoaXZlL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvbGliYXJjaGl2ZS90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGxpYmFyY2hpdmUvdGVzdC9saXN0LmgKKyAKKyBsaWJhcmNoaXZlX1RFU1RTX0VOVklST05NRU5UPSBMSUJBUkNISVZFX1RFU1RfRklMRVM9YGNkICQodG9wX3NyY2Rpcik7L2Jpbi9wd2RgL2xpYmFyY2hpdmUvdGVzdCBMUlpJUD1OT0NPTkZJRworQEAgLTgzNSw2ICs4MzYsNyBAQCBic2R0YXJfdGVzdF9DUFBGTEFHUz1cCisgCSQoUExBVEZPUk1DUFBGTEFHUykKKyAKKyB0YXIvdGVzdC9saXN0Lmg6IE1ha2VmaWxlCisrCSQoTUtESVJfUCkgdGFyL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvdGFyL3Rlc3QvdGVzdF8qLmMgfCBncmVwIERFRklORV9URVNUID4gdGFyL3Rlc3QvbGlzdC5oCisgCisgaWYgQlVJTERfQlNEVEFSCitAQCAtOTc1LDYgKzk3Nyw3IEBAIGJzZGNwaW9fdGVzdF9DUFBGTEFHUz0gXAorIGJzZGNwaW9fdGVzdF9MREFERD1saWJhcmNoaXZlX2ZlLmxhCisgCisgY3Bpby90ZXN0L2xpc3QuaDogTWFrZWZpbGUKKysJJChNS0RJUl9QKSBjcGlvL3Rlc3QKKyAJY2F0ICQodG9wX3NyY2RpcikvY3Bpby90ZXN0L3Rlc3RfKi5jIHwgZ3JlcCBERUZJTkVfVEVTVCA+IGNwaW8vdGVzdC9saXN0LmgKKyAKKyBpZiBCVUlMRF9CU0RDUElPCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAzOGJkMjk5Li43YmRiMDBjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDIsNiArMTAyLDcgQEAgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyBBQ19QUk9HX0xJQlRPT0wKKyBBQ19DSEVDS19UT09MKFtTVFJJUF0sW3N0cmlwXSkKKytBQ19QUk9HX01LRElSX1AKKyAKKyAjCisgIyBPcHRpb25zIGZvciBidWlsZGluZyBic2R0YXIuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmFmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliYXJjaGl2ZS9saWJhcmNoaXZlL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDI1IEBACitVc2UgcGtnLWNvbmZpZyBmb3IgdGhlIGxpYnhtbDIgZGVwZW5kZW5jeSwgbm90IHRoZSAtY29uZmlnIHNjcmlwdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhcmNoaXZlLTMuMS4yLm9yaWcvY29uZmlndXJlLmFjCTIwMTMtMDItMDkgMTc6MjM6MDMuMDAwMDAwMDAwICswMDAwCisrKysgbGliYXJjaGl2ZS0zLjEuMi9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAxNToyNjo0NS40NDY0OTkxMDggKzAwMDAKK0BAIC0zMjksMTAgKzMyOSwxMCBAQAorICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1leHBhdF0sIFtEb24ndCBidWlsZCBzdXBwb3J0IGZvciB4YXIgdGhyb3VnaCBleHBhdF0pKQorIAorIGlmIHRlc3QgIngkd2l0aF94bWwyIiAhPSAieG5vIjsgdGhlbgorLSAgQUNfUEFUSF9QUk9HKFtYTUwyX0NPTkZJR10sIFt4bWwyLWNvbmZpZ10sLCBbJHtQQVRIfV0pCistICBpZiB0ZXN0ICJ4JFhNTDJfQ09ORklHIiAhPSAieCI7IHRoZW4KKy0gICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IGAke1hNTDJfQ09ORklHfSAtLWNmbGFnc2AiCistICAgIExJQlM9IiR7TElCU30gYCR7WE1MMl9DT05GSUd9IC0tbGlic2AiCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhQS0dfWE1MMiwgW2xpYnhtbC0yLjBdLCwpCisrICBpZiB0ZXN0ICJ4JFBLR19YTUwyX0NGTEFHUyIgIT0gIngiOyB0aGVuCisrICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAke1BLR19YTUwyX0NGTEFHU30iCisrICAgIExJQlM9IiR7TElCU30gJHtQS0dfWE1MMl9MSUJTfSIKKyAgICAgQUNfQ0hFQ0tfTElCKHhtbDIseG1sSW5pdFBhcnNlcixbdHJ1ZV0sQUNfTVNHX0ZBSUxVUkUoTWlzc2luZyB4bWwyIGxpYnJhcnkpKQorICAgZWxzZQorICAgICBBQ19DSEVDS19MSUIoeG1sMix4bWxJbml0UGFyc2VyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmFyY2hpdmUvbGliYXJjaGl2ZV8zLjEuMi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhMzI1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJhcmNoaXZlL2xpYmFyY2hpdmVfMy4xLjIuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJTdXBwb3J0IGZvciByZWFkaW5nIHZhcmlvdXMgYXJjaGl2ZSBmb3JtYXRzIgorREVTQ1JJUFRJT04gPSAiQyBsaWJyYXJ5IGFuZCBjb21tYW5kLWxpbmUgdG9vbHMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGFyLCBjcGlvLCB6aXAsIElTTywgYW5kIG90aGVyIGFyY2hpdmUgZm9ybWF0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGliYXJjaGl2ZS5vcmcvIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRlM2ZmZDYwN2Q2Njg2YzZjYjJmNjMzOTQzNzA4NDEiCisKK0RFUEVORFMgPSAiZTJmc3Byb2dzLW5hdGl2ZSIKKworUEFDS0FHRUNPTkZJRyA/PSAibGlieG1sMiB6bGliIGJ6MiIKKworUEFDS0FHRUNPTkZJR19hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKwkke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3hhdHRyJywgJ3hhdHRyJywgJycsIGQpfSBcCisJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsYXJnZWZpbGUnLCAnbGFyZ2VmaWxlJywgJycsIGQpfSBcCisiCisKK1BBQ0tBR0VDT05GSUdfYXBwZW5kX2NsYXNzLW5hdGl2ZXNkayA9ICIgbGFyZ2VmaWxlIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLS1lbmFibGUtYWNsLC0tZGlzYWJsZS1hY2wsYWNsLCIKK1BBQ0tBR0VDT05GSUdbeGF0dHJdID0gIi0tZW5hYmxlLXhhdHRyLC0tZGlzYWJsZS14YXR0cixhdHRyLCIKK1BBQ0tBR0VDT05GSUdbbGFyZ2VmaWxlXSA9ICItLWVuYWJsZS1sYXJnZWZpbGUsLS1kaXNhYmxlLWxhcmdlZmlsZSwsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYiwtLXdpdGhvdXQtemxpYix6bGliLCIKK1BBQ0tBR0VDT05GSUdbYnoyXSA9ICItLXdpdGgtYnoybGliLC0td2l0aG91dC1iejJsaWIsYnppcDIsIgorUEFDS0FHRUNPTkZJR1t4el0gPSAiLS13aXRoLWx6bWFkZWMgLS13aXRoLWx6bWEsLS13aXRob3V0LWx6bWFkZWMgLS13aXRob3V0LWx6bWEseHosIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLXdpdGgtb3BlbnNzbCwtLXdpdGhvdXQtb3BlbnNzbCxvcGVuc3NsLCIKK1BBQ0tBR0VDT05GSUdbbGlieG1sMl0gPSAiLS13aXRoLXhtbDIsLS13aXRob3V0LXhtbDIsbGlieG1sMiwiCitQQUNLQUdFQ09ORklHW2V4cGF0XSA9ICItLXdpdGgtZXhwYXQsLS13aXRob3V0LWV4cGF0LGV4cGF0LCIKK1BBQ0tBR0VDT05GSUdbbHpvXSA9ICItLXdpdGgtbHpvMiwtLXdpdGhvdXQtbHpvMixsem8sIgorUEFDS0FHRUNPTkZJR1tuZXR0bGVdID0gIi0td2l0aC1uZXR0bGUsLS13aXRob3V0LW5ldHRsZSxuZXR0bGUsIgorCitTUkNfVVJJID0gImh0dHA6Ly9saWJhcmNoaXZlLm9yZy9kb3dubG9hZHMvbGliYXJjaGl2ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGliYXJjaGl2ZS1DVkUtMjAxMy0wMjExLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUFkZC1BUkNISVZFX0VYVFJBQ1RfU0VDVVJFX05PQUJTT0xVVEVQQVRIUy1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWtkaXIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmFkNWE1MDNmNjYzMjliYjlkMmY0MzA4YjVkZTk4YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlYjg3ZWFjZDhmZTQ5ZThkOTBjOGZkYzE4OTgxMzAyM2NjYzMxOWM1ZTc1MmIwMWZiNmFkMGNjN2IyYzUzZDVlIgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZSBwa2djb25maWcKKworQ1BQRkxBR1MgKz0gIi1JJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcyIKKworZG9fY29uZmlndXJlW2NsZWFuZGlyc10gKz0gIiR7V09SS0RJUn0vZXh0cmEtaW5jbHVkZXMiCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIFdlIGp1c3QgbmVlZCB0aGUgaGVhZGVycyBmb3Igc29tZSB0eXBlIGNvbnN0YW50cywgc28gbm8gbmVlZCB0bworCSMgYnVpbGQgYWxsIG9mIGUyZnNwcm9ncyBmb3IgdGhlIHRhcmdldAorCWNwIC1SICR7U1RBR0lOR19JTkNESVJfTkFUSVZFfS9leHQyZnMgJHtXT1JLRElSfS9leHRyYS1pbmNsdWRlcy8KK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NzZiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9hdm9pZF9BTV9QUk9HX01LRElSX1Bfd2FybmluZ19lcnJvcl93aXRoX2F1dG9tYWtlXzEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIAorCithdXRvbWFrZSAxLjEyLnggaGFzIGRlcHJlY2F0ZWQgQU1fUFJPR19NS0RJUl9QICwgYW5kIHRocm93cyBhIHdhcm5pbmcgZm9yIHRoYXQsCithbmQgdGhlIHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycyBiZWNhdXNlIG9mIHRoZSAtV2Vycm9yIHBhcmFtZXRlci4KKworVGhlc2UgQU1fUFJPR19NS0RJUl9QIGFyZSBjb21pbmcgZnJvbSBnZXR0ZXh0LCBhbmQgdGhlIGxhdGVzdCBnZXR0ZXh0IGNvZGUgaGFzIG5vdCAKK2VsaW1pbmF0ZWQgdGhlc2UgZGVwcmVjYXRlZCBtYWNyb3MgeWV0LiBTbyBkaXNhYmxlIHRoZSB0cmVhdG1lbnQgb2Ygd2FybmluZ3MKK2FzIGVycm9ycyB1bnRpbCBnZXR0ZXh0IGlzIHVwZGF0ZWQgdG8gcmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1hY3Jvcy4KKworU2lnbmVkLU9mZi1ieTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDcvMTAKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT1BZUklHSFQoW0NvcHlyaWdodCAoYykgMjAwMi0yMDExIFNpCisgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLWF1eF0pCisgQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIEFDX0NPTkZJR19IRUFERVJTKGNvbmZpZy5oKQorLUFNX0lOSVRfQVVUT01BS0UoWzEuMTAgLVdhbGwgLVdlcnJvciAtV25vLW92ZXJyaWRlXSkKKytBTV9JTklUX0FVVE9NQUtFKFsxLjEwIC1XYWxsIC1Xbm8tb3ZlcnJpZGVdKQorIEFNX1NJTEVOVF9SVUxFUyhbeWVzXSkKKyAKKyAjIExpYnJhcnkgY29kZSBtb2RpZmllZDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVZJU0lPTisrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NjM1MzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmRkIGxpYmlkbi0xLjI2L2RvYy9NYWtlZmlsZS5hbSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0KKy0tLSBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wOS0xOCAxMToyNTo0NS4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJpZG4tMS4yNi9kb2MvTWFrZWZpbGUuYW0JMjAxMy0wMi0wOCAwNzo0MToyNC41OTE0MzE0NjIgKzAyMDAKK0BAIC00OSwxNSArNDksOSBAQAorCisgIyBNYW4gcGFnZXMuCisKKy1kaXN0X21hbl9NQU5TID0gaWRuLjEgJChnZG9jX01BTlMpCisrZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKQorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChkaXN0X21hbl9NQU5TKQorCistaWRuLjE6ICQodG9wX3NyY2Rpcikvc3JjL2lkbi5jICQodG9wX3NyY2Rpcikvc3JjL2lkbi5nZ28gXAorLQkJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKKy0JJChIRUxQMk1BTikgXAorLQkJLS1uYW1lPSJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgY29tbWFuZCBsaW5lIHRvb2wiIFwKKy0JCS0tb3V0cHV0PSRAICQodG9wX2J1aWxkZGlyKS9zcmMvaWRuJChFWEVFWFQpCistCisgIyBHRE9DCisKKyBHRE9DX0JJTiA9ICQoc3JjZGlyKS9nZG9jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbi9saWJpZG5fZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGFmZDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG4vbGliaWRuX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApAQCAtMCwwICsxLDI2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworVGhpcyBwYXRjaCBmaXhlcyBmb2xsb3dpbmcgaXNzdWUgd2l0aCBhdXRvbWFrZSAxLjEyCisKK3wgYXV0b21ha2U6IHdhcm5pbmdzIGFyZSB0cmVhdGVkIGFzIGVycm9ycworfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiB3YXJuaW5nOiAnbGliaWRuLmxhJzogbGlua2luZyBsaWJ0b29sIGxpYnJhcmllcyB1c2luZyBhIG5vbi1QT1NJWAorfCAvc3J2L2hvbWUvbml0aW4vYnVpbGRzL2J1aWxkLWdjYzQ3L3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL3NoYXJlL2F1dG9tYWtlLTEuMTIvYW0vbHRsaWJyYXJ5LmFtOiBhcmNoaXZlciByZXF1aXJlcyAnQU1fUFJPR19BUicgaW4gJ2NvbmZpZ3VyZS5hYycKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDMKKworSW5kZXg6IGxpYmlkbi0xLjI0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkbi0xLjI0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWRuLTEuMjQvY29uZmlndXJlLmFjCitAQCAtMzQsNiArMzQsMTAgQEAgQUNfU1VCU1QoTFRfQ1VSUkVOVCwgMTcpCisgQUNfU1VCU1QoTFRfUkVWSVNJT04sIDcpCisgQUNfU1VCU1QoTFRfQUdFLCA2KQorIAorKyMgYXV0b21ha2UgMS4xMiBzZWVtcyB0byByZXF1aXJlIHRoaXMsIGJ1dCBhdXRvbWFrZSAxLjExIGRvZXNuJ3QgcmVjb2duaXplIGl0CisrbTRfcGF0dGVybl9hbGxvdyhbQU1fUFJPR19BUl0pCisrQU1fUFJPR19BUgorKworIEFDX1BST0dfQ0MKKyBnbF9FQVJMWQorIGxnbF9FQVJMWQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMC42LjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZjFkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGliaWRuL2xpYmlkbl8wLjYuMTQuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi9pZG5hLmg7YmVnaW5saW5lPTY7ZW5kbGluZT0xODttZDU9MTMzNmU4NDhjYTdiOGUyNTc2N2MzYzdlOGZhMzhhODkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2lkbi5jO2JlZ2lubGluZT02O2VuZGxpbmU9MTg7bWQ1PTU2Yzg5ZTM1OTY1MmE3MWNkYTEyOGQ3NWYwZmZkYWM0IgorUFIgPSAicjEiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICJodHRwOi8vYWxwaGEuZ251Lm9yZy9nbnUvbGliaWRuLyR7QlBOfS0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwNDBmMDEyYTQ1ZmViNTYxNjg4NTM5OThiYjg3YWQ0ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODkxMGMyYWQ2NjRiZGY0ZWVkMmMyZmZmODhlMjRmODg4MjYzNmVjOWQyNjY2OTM2NmZmMDNiNDY5YzA1YWUzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIHRoaXMgdmVyc2lvbiBvZiBsaWJpZG4gY29waWVzIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUyBmcm9tIAorCSMgYXV0b2NvbmYgQ1ZTIGJlY2F1c2UgYXRtIHRoZSBhdXRvY29uZiBpdCB1c2VzIGlzIGEgYml0IG9sZAorCSMgbm93IHdpdGggY3Jvc3MgYXV0b3Rvb2wsIHRoYXQgbWFjcm8gaXMgYWxyZWFkeSB0aGVyZSBhbmQgdGhpcworCSMgbG9jYWwgZGVmaW5pdGlvbiBjYXVzZXMgY2lyY3VsYXIgZGVwZW5kZW5jeS4gQWN0dWFsbHkgQUNfR05VX1NPVVJDRQorCSMgaXMgaWRlbnRpY2FsIHRvIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUy4gU28gcmVtb3ZlIGFsbCBsb2NhbAorCSMgcmVmZXJlbmNlcyB0byB0aGUgbGF0dGVyIGhlcmUuCisJc2VkIC1pIC1lICIvQUNfUkVRVUlSRShcW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OUy9kIiAke1N9L2xpYi9nbC9tNC9nbnVsaWItY29tcC5tNAorCXJtIC1mICR7U30vbGliL2dsL200L2V4dGVuc2lvbnMubTQKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vTGliaWRuLmRsbAorCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYmlkbi9saWJpZG5fMS4zMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzNDc0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJpZG4vbGliaWRuXzEuMzAuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZSBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3RyaW5ncHJlcCwgUHVueWNvZGUgYW5kIElETkEgc3BlY2lmaWNhdGlvbnMgZGVmaW5lZCBieSB0aGUgSUVURiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgKElETikgd29ya2luZyBncm91cC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGliaWRuLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiKExHUEx2Mi4xKyB8IExHUEx2MykgJiBHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZjRiZTQ3OTQwYTkxZWU2OTU1NmY1ZjcxZWVkNGFlYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYyO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxFU1NFUnYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkd2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2lkbmEuaDtlbmRsaW5lPTIxO21kNT03YzBiMzgyOGQxYjE1MzY2M2JlOWEwNGFkNGY3OTc1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvaWRuLmM7ZW5kbGluZT0yMDttZDU9ZjQyMzVmMmEyY2IyYjY1Nzg2YjI5NzlmYjNjZjdmYmYiCisKK2luaGVyaXQgcGtnY29uZmlnIGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYmlkbi8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYmlkbl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfQU1fUFJPR19NS0RJUl9QX3dhcm5pbmdfZXJyb3Jfd2l0aF9hdXRvbWFrZV8xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImIxN2VkYzg1NTFjZDMxY2M1ZjE0YzgyYTlkYWJmNThlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM5YjlmYzk0ZDc0MDgxYzE4NTc1N2IxMmUwODkxY2U1YTIyZGI1NTI2OGU3ZDFiYjI0NTMzZmY0NDMyZWIwNTMiCisKKyMgY29tbWFuZCB0b29sIGlzIHVuZGVyIEdQTHYzKywgd2hpbGUgbGliaWRuIGl0c2VsZiBpcyB1bmRlciBMR1BMdjIuMSsgb3IgTEdQTHYzCisjIHNvIHBhY2thZ2UgY29tbWFuZCBpbnRvIGEgc2VwYXJhdGUgcGFja2FnZQorUEFDS0FHRVMgPSsgImlkbiIKK0ZJTEVTX2lkbiA9ICIke2JpbmRpcn0vKiIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jc2hhcnAiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtIC1yZiAke0R9JHtkYXRhZGlyfS9lbWFjcworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvbGlidGlycGMtMC4yLjEtZm9ydGlmeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc4NWQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL2xpYnRpcnBjLTAuMi4xLWZvcnRpZnkucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorRml4IGEgcG9zc2libGUgb3ZlcmZsb3cgKHJlcG9ydGVkIGJ5IF9GT1JUSUZZX1NPVVJDRT0yKQorCitQb3J0ZWQgZnJvbSBHZW50b28KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJ0aXJwYy0wLjIuMS9zcmMvZ2V0cnBjcG9ydC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlidGlycGMtMC4yLjEub3JpZy9zcmMvZ2V0cnBjcG9ydC5jCisrKysgbGlidGlycGMtMC4yLjEvc3JjL2dldHJwY3BvcnQuYworQEAgLTU0LDExICs1NCwxMSBAQCBnZXRycGNwb3J0KGhvc3QsIHByb2dudW0sIHZlcnNudW0sIHByb3RvCisgCisgCWlmICgoaHAgPSBnZXRob3N0YnluYW1lKGhvc3QpKSA9PSBOVUxMKQorIAkJcmV0dXJuICgwKTsKKysJaWYgKGhwLT5oX2xlbmd0aCAhPSBzaXplb2YoYWRkci5zaW5fYWRkci5zX2FkZHIpKQorKwkJcmV0dXJuICgwKTsKKyAJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworIAlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworIAlhZGRyLnNpbl9wb3J0ID0gIDA7CistCWlmIChocC0+aF9sZW5ndGggPiBzaXplb2YoYWRkcikpCistCSAgaHAtPmhfbGVuZ3RoID0gc2l6ZW9mKGFkZHIpOworIAltZW1jcHkoJmFkZHIuc2luX2FkZHIuc19hZGRyLCBocC0+aF9hZGRyLCAoc2l6ZV90KWhwLT5oX2xlbmd0aCk7CisgCS8qIEluY29uc2lzdGVudCBpbnRlcmZhY2VzIG5lZWQgY2FzdHMhIDotKCAqLworIAlyZXR1cm4gKHBtYXBfZ2V0cG9ydCgmYWRkciwgKHVfbG9uZylwcm9nbnVtLCAodV9sb25nKXZlcnNudW0sIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjL3JlbW92ZS1kZXMtdWNsaWJjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDMzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidGlycGMvbGlidGlycGMvcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAordWNsaWJjIGRvZXMgbm90IHByb3ZpZGUgZGVzIGZ1bmN0aW9uYWxpdHkgdW5saWtlIGVnbGliYyBzbyBsZXRzIGRpc2FibGUgc3NsIHN1cHBvcnQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1Y2xpYmMgc3BlY2lmaWNdCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGlidGlycGMtMC4yLjMvc3JjL3JwY19zb2MuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL3JwY19zb2MuYwkyMDEzLTAzLTEwIDE2OjAwOjUxLjM1NTI4MjE1MyAtMDcwMAorKysrIGxpYnRpcnBjLTAuMi4zL3NyYy9ycGNfc29jLmMJMjAxMy0wMy0xMCAxNjowMDo1MS43MDMyODIxNDggLTA3MDAKK0BAIC01MjAsNiArNTIwLDcgQEAKKyAJICAgIChyZXN1bHRwcm9jX3QpIHJwY193cmFwX2JjYXN0LCAidWRwIik7CisgfQorIAorKyNpZiAwCisgLyoKKyAgKiBDcmVhdGUgdGhlIGNsaWVudCBkZXMgYXV0aGVudGljYXRpb24gb2JqZWN0LiBPYnNvbGV0ZWQgYnkKKyAgKiBhdXRoZGVzX3NlY2NyZWF0ZSgpLgorQEAgLTU1MSw2ICs1NTIsNyBAQAorIAlkdW1teSA9IGF1dGhkZXNfc2VjY3JlYXRlKHNlcnZlcm5hbWUsIHdpbmRvdywgTlVMTCwgY2tleSk7CisgCXJldHVybiAoZHVtbXkpOworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIENyZWF0ZSBhIGNsaWVudCBoYW5kbGUgZm9yIGEgdW5peCBjb25uZWN0aW9uLiBPYnNvbGV0ZWQgYnkgY2xudF92Y19jcmVhdGUoKQorSW5kZXg6IGxpYnRpcnBjLTAuMi4zL3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnRpcnBjLTAuMi4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuMzU1MjgyMTUzIC0wNzAwCisrKysgbGlidGlycGMtMC4yLjMvc3JjL01ha2VmaWxlLmFtCTIwMTMtMDMtMTAgMTY6MDA6NTEuNzAzMjgyMTQ4IC0wNzAwCitAQCAtNTAsNyArNTAsNyBAQAorICAgICAgICAgcnBjX2NhbGxtc2cuYyBycGNfZ2VuZXJpYy5jIHJwY19zb2MuYyBycGNiX2NsbnQuYyBycGNiX3Byb3QuYyBcCisgICAgICAgICBycGNiX3N0X3hkci5jIHN2Yy5jIHN2Y19hdXRoLmMgc3ZjX2RnLmMgc3ZjX2F1dGhfdW5peC5jIHN2Y19hdXRoX25vbmUuYyBcCisgICAgICAgICBzdmNfZ2VuZXJpYy5jIHN2Y19yYXcuYyBzdmNfcnVuLmMgc3ZjX3NpbXBsZS5jIHN2Y192Yy5jIGdldHBlZXJlaWQuYyBcCistICAgICAgICBhdXRoX3RpbWUuYyBhdXRoX2Rlcy5jIGF1dGhkZXNfcHJvdC5jCisrICAgICAgICBhdXRoX3RpbWUuYworIAorICMjIFhEUgorIGxpYnRpcnBjX2xhX1NPVVJDRVMgKz0geGRyLmMgeGRyX3JlYy5jIHhkcl9hcnJheS5jIHhkcl9mbG9hdC5jIHhkcl9tZW0uYyB4ZHJfcmVmZXJlbmNlLmMgeGRyX3N0ZGlvLmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWJ0aXJwYy9saWJ0aXJwY18wLjIuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWRmMDAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnRpcnBjL2xpYnRpcnBjXzAuMi41LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiTGlidGlycGMgaXMgYSBwb3J0IG9mIFN1bnMgVHJhbnNwb3J0LUluZGVwZW5kZW50IFJQQyBsaWJyYXJ5IHRvIExpbnV4IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnRpcnBjLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xODMwNzUmYXRpZD05MDM3ODQiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWY4MzVjY2U4ODUyNDgxZTRiMmJiYmRkMjNiNWU0N2YzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9uZXRuYW1lLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSIKK1BST1ZJREVTID0gInZpcnR1YWwvbGlicnBjIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS8ke0JQTn0vJHtCUH0udGFyLmJ6MjtuYW1lPWxpYnRpcnBjIFwKKyAgICAgICAgICAgJHtHRU5UT09fTUlSUk9SfS8ke0JQTn0tZ2xpYmMtbmZzLnRhci54ejtuYW1lPWdsaWJjLW5mcyBcCisgICAgICAgICAgIGZpbGU6Ly9saWJ0aXJwYy0wLjIuMS1mb3J0aWZ5LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiBmaWxlOi8vcmVtb3ZlLWRlcy11Y2xpYmMucGF0Y2giCisKK1NSQ19VUklbbGlidGlycGMubWQ1c3VtXSA9ICI4Y2Q0MWE1ZWY1YTliNTBkMGZiNmFiYjk4YWYxNTM2OCIKK1NSQ19VUklbbGlidGlycGMuc2hhMjU2c3VtXSA9ICI2MmY5ZGU3YzJjODY4NmM1Njg3NTc3MzBlMWZlZjY2NTAyYTBlMDBkNmNhY2YzMzU0NmQwMjY3OTg0ZTAwMmRiIgorU1JDX1VSSVtnbGliYy1uZnMubWQ1c3VtXSA9ICI1YWU1MDBiOWQwYjZiNzJjYjg3NWJjMDQ5NDRiOTQ0NSIKK1NSQ19VUklbZ2xpYmMtbmZzLnNoYTI1NnN1bV0gPSAiMjY3N2NmZWRmNjI2ZjNmNWE4ZjZlNTA3YWVkNWJiOGY3OWE3NDUzYjU4OWQ2ODRkYmJjMDg2ZTc1NTE3MGQ4MyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZ3NzYXBpIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgICAgIGNwIC1yICR7U30vLi4vdGlycGMgJHtTfQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgICAgICAgY2hvd24gcm9vdDpyb290ICR7RH0ke3N5c2NvbmZkaXJ9L25ldGNvbmZpZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpYnVzZXIvbGlidXNlcl8wLjYyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZWQ0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlidXNlci9saWJ1c2VyXzAuNjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJ1c2VyIGFuZCBncm91cCBhY2NvdW50IGFkbWluaXN0cmF0aW9uIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgbGlidXNlciBsaWJyYXJ5IGltcGxlbWVudHMgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBtYW5pcHVsYXRpbmcgYW5kIGFkbWluaXN0ZXJpbmcgdXNlciBcCithbmQgZ3JvdXAgYWNjb3VudHMiCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGlidXNlci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saWJ1c2VyL25ld3RpY2tldCIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXNlci5oO2VuZGxpbmU9MTk7bWQ1PTc2YjMwMWY2M2MzOWZhOTkyMDYyMzk1ZWZiZGM5NTU4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NhbXBsZXMvdGVzdHVzZXIuYztlbmRsaW5lPTE5O21kNT0zYjg3ZmE2NjBmYTNmNGE2YmIzMWQ2MjRhZmUzMGJhMSIKKworU0VDVElPTiA9ICJiYXNlIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL2kvbGlidXNlci9saWJ1c2VyLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjYzZTVlNWM1NTFlOTlkYzUzMDJiNDBiODBiZDZkNGYyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1OGZmNGZhYmIwMWEyNTA0M2IxNDIxODVhMzNlZWVhOTYxMTA5ZGQ2MGQ0YjQwYjZhOWRmNGZhM2NhY2UyMGIiCisKK0RFUEVORFMgPSAicG9wdCBsaWJwYW0gZ2xpYi0yLjAgeHotbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIGxpbnV4ZG9jLXRvb2xzLW5hdGl2ZSBweXRob24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIgcGtnY29uZmlnCisKK0VYVFJBX09FTUFLRSA9ICJQWVRIT05fQ1BQRkxBR1M9LUkke1NUQUdJTkdfSU5DRElSfS8ke1BZVEhPTl9ESVJ9IgorCitQQUNLQUdFUyArPSAiJHtQTn0tcHl0aG9uICIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWciCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC8wMDAxLW1vZF9jZ2ktYnVmZmVycy1kYXRhLXdpdGhvdXQtYm91bmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZGYxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoCkBAIC0wLDAgKzEsMzg3IEBACitGcm9tIGU2Y2NiYWI1ZDQyYjExMGFjNGY2Y2UxZjcyY2IxZTljY2JlNDQwMGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBUdWUsIDE2IEp1biAyMDE1IDE5OjAyOjM4ICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIG1vZF9jZ2kgYnVmZmVycyBkYXRhIHdpdGhvdXQgYm91bmQgc28gZml4IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvaXNzdWVzLzEyNjRdCisKK1NpZ25lZC1vZmYtYnk6IExpIFhpbiA8bGl4aW4uZm5zdEBjbi5mdWppdHN1LmNvbT4KKworVXBkYXRlIGNvbnRleHQgZm9yIDEuNC4zNi4KKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBkb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYgfCAgIDggKysKKyBzcmMvbW9kX2NnaS5jICAgICAgICAgICAgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mIGIvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCitpbmRleCA2MGIwYWUxLi45YzEwMWE3IDEwMDY0NAorLS0tIGEvZG9jL2NvbmZpZy9saWdodHRwZC5jb25mCisrKysgYi9kb2MvY29uZmlnL2xpZ2h0dHBkLmNvbmYKK0BAIC0zNzUsNiArMzc1LDE0IEBAIHNlcnZlci51cGxvYWQtZGlycyA9ICggIi92YXIvdG1wIiApCisgIyMKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIAorKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrIyMKKysjIworKyMjIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmhpZ2gtd2F0ZXJsZXZlbCAgICAgICAgPSAxMDI0MAorKyMjIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmIFtLQnl0ZV0KKysjIyAgY2dpLmxvdy13YXRlcmxldmVsICAgICAgICAgPSA1MTIwCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMjCitkaWZmIC0tZ2l0IGEvc3JjL21vZF9jZ2kuYyBiL3NyYy9tb2RfY2dpLmMKK2luZGV4IDAxYjE4NzcuLjdjNjdlYjUgMTAwNjQ0CistLS0gYS9zcmMvbW9kX2NnaS5jCisrKysgYi9zcmMvbW9kX2NnaS5jCitAQCAtMzgsNiArMzgsMTAgQEAKKyAKKyAjaW5jbHVkZSAidmVyc2lvbi5oIgorIAorKy8qIGZvciBvdXRwdXQgbG9ncyAqLworK2NoYXIgbXNnYnVmWzIwNDhdOworKworKworIGVudW0ge0VPTF9VTlNFVCwgRU9MX04sIEVPTF9STn07CisgCisgdHlwZWRlZiBzdHJ1Y3QgeworQEAgLTUzLDkgKzU3LDE5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJc2l6ZV90IHNpemU7CisgfSBidWZmZXJfcGlkX3Q7CisgCisrc3RydWN0IGhhbmRsZXJfY3R4OworKworK3R5cGVkZWYgc3RydWN0IHsKKysJc3RydWN0IGhhbmRsZXJfY3R4ICoqaGN0eDsKKysJc2l6ZV90IHVzZWQ7CisrCXNpemVfdCBzaXplOworK30gYnVmZmVyX2N0eF90OworKworIHR5cGVkZWYgc3RydWN0IHsKKyAJYXJyYXkgKmNnaTsKKyAJdW5zaWduZWQgc2hvcnQgZXhlY3V0ZV94X29ubHk7CisrCXVuc2lnbmVkIGludCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCXVuc2lnbmVkIGludCBsb3dfd2F0ZXJsZXZlbDsgIC8qIG1pbmltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgdG8gZGlzYWJsZSBiYWNrb2ZmICovCisgfSBwbHVnaW5fY29uZmlnOworIAorIHR5cGVkZWYgc3RydWN0IHsKK0BAIC02OCw5ICs4MiwxMSBAQCB0eXBlZGVmIHN0cnVjdCB7CisgCXBsdWdpbl9jb25maWcgKipjb25maWdfc3RvcmFnZTsKKyAKKyAJcGx1Z2luX2NvbmZpZyBjb25mOworKworKwlidWZmZXJfY3R4X3QgY2dpX2N0eDsKKyB9IHBsdWdpbl9kYXRhOworIAorLXR5cGVkZWYgc3RydWN0IHsKKyt0eXBlZGVmIHN0cnVjdCBoYW5kbGVyX2N0eCB7CisgCXBpZF90IHBpZDsKKyAJaW50IGZkOworIAlpbnQgZmRlX25keDsgLyogaW5kZXggaW50byB0aGUgZmQtZXZlbnQgYnVmZmVyICovCitAQCAtNzgsMTEgKzk0LDE2IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAJY29ubmVjdGlvbiAqcmVtb3RlX2Nvbm47ICAvKiBkdW1iIHBvaW50ZXIgKi8KKyAJcGx1Z2luX2RhdGEgKnBsdWdpbl9kYXRhOyAvKiBkdW1iIHBvaW50ZXIgKi8KKyAKKysJaW50IHRocm90dGxpbmc7ICAgICAgICAvKiAxPXdhaXRpbmcgZm9yIHNlbmRfcmF3IGJ1ZmZlciB0byBkcmFpbiAqLworKwlvZmZfdCBoaWdoX3dhdGVybGV2ZWw7IC8qIG1heGltdW0gYnl0ZXMgaW4gc2VuZF9yYXcgYmVmb3JlIGJhY2tpbmcgb2ZmICovCisrCW9mZl90IGxvd193YXRlcmxldmVsOyAgLyogbWluaW11bSBieXRlcyBpbiBzZW5kX3JhdyB0byBkaXNhYmxlIGJhY2tvZmYgKi8KKysJb2ZmX3QgYnl0ZXNfaW5fYnVmZmVyOworKworIAlidWZmZXIgKnJlc3BvbnNlOworIAlidWZmZXIgKnJlc3BvbnNlX2hlYWRlcjsKKyB9IGhhbmRsZXJfY3R4OworIAorLXN0YXRpYyBoYW5kbGVyX2N0eCAqIGNnaV9oYW5kbGVyX2N0eF9pbml0KHZvaWQpIHsKKytzdGF0aWMgaGFuZGxlcl9jdHggKiBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwbHVnaW5fZGF0YSAqcCkgeworIAloYW5kbGVyX2N0eCAqaGN0eCA9IGNhbGxvYygxLCBzaXplb2YoKmhjdHgpKTsKKyAKKyAJZm9yY2VfYXNzZXJ0KGhjdHgpOworQEAgLTkwLDEzICsxMTEsMjYgQEAgc3RhdGljIGhhbmRsZXJfY3R4ICogY2dpX2hhbmRsZXJfY3R4X2luaXQodm9pZCkgeworIAloY3R4LT5yZXNwb25zZSA9IGJ1ZmZlcl9pbml0KCk7CisgCWhjdHgtPnJlc3BvbnNlX2hlYWRlciA9IGJ1ZmZlcl9pbml0KCk7CisgCisrCWhjdHgtPnRocm90dGxpbmcgPSAwOworKwloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPSAob2ZmX3QpcC0+Y29uZi5oaWdoX3dhdGVybGV2ZWwgKiAxMDI0OworKwloY3R4LT5sb3dfd2F0ZXJsZXZlbCAgPSAob2ZmX3QpcC0+Y29uZi5sb3dfd2F0ZXJsZXZlbCAgKiAxMDI0OworKwlpZiAoaGN0eC0+bG93X3dhdGVybGV2ZWwgPj0gaGN0eC0+aGlnaF93YXRlcmxldmVsKSB7CisrCSAgICBoY3R4LT5sb3dfd2F0ZXJsZXZlbCA9IGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCAqIDMgLyA0OyAvKiA3NSUgKi8KKysJfQorKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSAwOworKworIAlyZXR1cm4gaGN0eDsKKyB9CisgCistc3RhdGljIHZvaWQgY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGFuZGxlcl9jdHggKmhjdHgpIHsKKytzdGF0aWMgdm9pZCBjZ2lfaGFuZGxlcl9jdHhfZnJlZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJYnVmZmVyX2ZyZWUoaGN0eC0+cmVzcG9uc2UpOworIAlidWZmZXJfZnJlZShoY3R4LT5yZXNwb25zZV9oZWFkZXIpOworIAorKwkvKiB0byBhdm9pZCBjb25mdXNpb24gKi8KKysJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJICAgIGxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCAidW50aHJvdHRsZWQiKTsKKysJfQorKworIAlmcmVlKGhjdHgpOworIH0KKyAKK0BAIC0xNTQsNiArMTg4LDggQEAgU0VUREVGQVVMVFNfRlVOQyhtb2RfZmFzdGNnaV9zZXRfZGVmYXVsdHMpIHsKKyAJY29uZmlnX3ZhbHVlc190IGN2W10gPSB7CisgCQl7ICJjZ2kuYXNzaWduIiwgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19BUlJBWSwgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAwICovCisgCQl7ICJjZ2kuZXhlY3V0ZS14LW9ubHkiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19CT09MRUFOLCBUX0NPTkZJR19TQ09QRV9DT05ORUNUSU9OIH0sICAgICAvKiAxICovCisrCQl7ICJjZ2kuaGlnaC13YXRlcmxldmVsIiwgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAyICovCisrCQl7ICJjZ2kubG93LXdhdGVybGV2ZWwiLCAgICAgICAgICBOVUxMLCBUX0NPTkZJR19JTlQsICAgVF9DT05GSUdfU0NPUEVfQ09OTkVDVElPTiB9LCAgICAgICAvKiAzICovCisgCQl7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBUX0NPTkZJR19VTlNFVCwgVF9DT05GSUdfU0NPUEVfVU5TRVR9CisgCX07CisgCitAQCAtMTY5LDkgKzIwNSwxMyBAQCBTRVRERUZBVUxUU19GVU5DKG1vZF9mYXN0Y2dpX3NldF9kZWZhdWx0cykgeworIAorIAkJcy0+Y2dpICAgID0gYXJyYXlfaW5pdCgpOworIAkJcy0+ZXhlY3V0ZV94X29ubHkgPSAwOworKwkJcy0+aGlnaF93YXRlcmxldmVsID0gMDsgLyogMCA9PSBkaXNhYmxlZCAqLworKwkJcy0+bG93X3dhdGVybGV2ZWwgID0gMDsKKyAKKyAJCWN2WzBdLmRlc3RpbmF0aW9uID0gcy0+Y2dpOworIAkJY3ZbMV0uZGVzdGluYXRpb24gPSAmKHMtPmV4ZWN1dGVfeF9vbmx5KTsKKysJCWN2WzJdLmRlc3RpbmF0aW9uID0gJihzLT5oaWdoX3dhdGVybGV2ZWwpOworKwkJY3ZbM10uZGVzdGluYXRpb24gPSAmKHMtPmxvd193YXRlcmxldmVsKTsKKyAKKyAJCXAtPmNvbmZpZ19zdG9yYWdlW2ldID0gczsKKyAKK0BAIC0xODQsNiArMjI0LDUxIEBAIFNFVERFRkFVTFRTX0ZVTkMobW9kX2Zhc3RjZ2lfc2V0X2RlZmF1bHRzKSB7CisgfQorIAorIAorK3N0YXRpYyB2b2lkIGNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNodW5rcXVldWUgKmNxID0gaGN0eC0+cmVtb3RlX2Nvbm4tPndyaXRlX3F1ZXVlOworKwloY3R4LT5ieXRlc19pbl9idWZmZXIgPSBjaHVua3F1ZXVlX2xlbmd0aChjcSkgLSBjaHVua3F1ZXVlX3dyaXR0ZW4oY3EpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBjZ2lfdGhyb3R0bGluZ19jb250cm9sKHNlcnZlciAqc3J2LCBoYW5kbGVyX2N0eCAqaGN0eCkKKyt7CisrCWNnaV9yZWNvdW50X2J5dGVzX2luX2J1ZmZlcihoY3R4KTsKKysKKysjaWZkZWYgREVCVUcKKysJc3ByaW50Zihtc2didWYsICJ0aHJvdHRsaW5nPSVkLCBjaGFycz0lbGx1LCBoaWdoPSVsbHUsIGxvdz0lbGx1IiwKKysJCWhjdHgtPnRocm90dGxpbmcsIGhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCWhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCwgaGN0eC0+bG93X3dhdGVybGV2ZWwpOworKwlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJIihkZWJ1ZykgdGhyb3R0bGluZyBjb250cm9sLCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCisrCWlmIChoY3R4LT50aHJvdHRsaW5nKSB7CisrCQlzcHJpbnRmKG1zZ2J1ZiwgInRocm90dGxpbmc7IGNoYXJzIGluIHF1ZXVlPSVsbHUsIgorKwkJCSIgbG93LXdhdGVybGV2ZWw9JWxsdSwgaGlnaC13YXRlcmxldmVsPSVsbHUiLAorKwkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQloY3R4LT5sb3dfd2F0ZXJsZXZlbCwgaGN0eC0+aGlnaF93YXRlcmxldmVsKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInMiLCBtc2didWYpOworKwkJaWYgKGhjdHgtPmJ5dGVzX2luX2J1ZmZlciA8PSBoY3R4LT5sb3dfd2F0ZXJsZXZlbCkgeworKwkJCWZkZXZlbnRfZXZlbnRfc2V0KHNydi0+ZXYsICYoaGN0eC0+ZmRlX25keCksIGhjdHgtPmZkLCBGREVWRU5UX0lOKTsKKysJCQloY3R4LT50aHJvdHRsaW5nID0gMDsKKysJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzIiwgInVudGhyb3R0bGVkIik7CisrCQl9CisrCX0gZWxzZSB7CisrCQlpZiAoaGN0eC0+aGlnaF93YXRlcmxldmVsICE9IDAgJiYKKysJCQloY3R4LT5oaWdoX3dhdGVybGV2ZWwgPD0gaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisrCQkJZmRldmVudF9ldmVudF9kZWwoc3J2LT5ldiwgJihoY3R4LT5mZGVfbmR4KSwgaGN0eC0+ZmQpOworKwkJCWhjdHgtPnRocm90dGxpbmcgPSAxOworKwkJCXNwcmludGYobXNnYnVmLCAidGhyb3R0bGVkOyBjaGFycyBpbiBxdWV1ZT0lbGx1LCIKKysJCQkJIiBsb3ctd2F0ZXJsZXZlbD0lbGx1LCBoaWdoLXdhdGVybGV2ZWw9JWxsdSIsCisrCQkJCWhjdHgtPmJ5dGVzX2luX2J1ZmZlciwKKysJCQkJaGN0eC0+bG93X3dhdGVybGV2ZWwsIGhjdHgtPmhpZ2hfd2F0ZXJsZXZlbCk7CisrCQkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAicyIsIG1zZ2J1Zik7CisrCQl9CisrCX0KKyt9CisrCisrCisgc3RhdGljIGludCBjZ2lfcGlkX2FkZChzZXJ2ZXIgKnNydiwgcGx1Z2luX2RhdGEgKnAsIHBpZF90IHBpZCkgeworIAlpbnQgbSA9IC0xOworIAlzaXplX3QgaTsKK0BAIC0yMzAsNiArMzE1LDM5IEBAIHN0YXRpYyBpbnQgY2dpX3BpZF9kZWwoc2VydmVyICpzcnYsIHBsdWdpbl9kYXRhICpwLCBwaWRfdCBwaWQpIHsKKyAJcmV0dXJuIDA7CisgfQorIAorKworK3N0YXRpYyB2b2lkIGNnaV9jdHhfYWRkKHBsdWdpbl9kYXRhICpwLCBoYW5kbGVyX2N0eCAqaGN0eCkgeworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlpZiAoci0+c2l6ZSA9PSAwKSB7CisrCQlyLT5zaXplID0gMTY7CisrCQlyLT5oY3R4ID0gbWFsbG9jKHNpemVvZigqci0+aGN0eCkgKiByLT5zaXplKTsKKysJfSBlbHNlIGlmIChyLT51c2VkID09IHItPnNpemUpIHsKKysJCXItPnNpemUgKz0gMTY7CisrCQlyLT5oY3R4ID0gcmVhbGxvYyhyLT5oY3R4LCBzaXplb2YoKnItPmhjdHgpICogci0+c2l6ZSk7CisrCX0KKysKKysJci0+aGN0eFtyLT51c2VkKytdID0gaGN0eDsKKyt9CisrCisrc3RhdGljIHZvaWQgY2dpX2N0eF9kZWwocGx1Z2luX2RhdGEgKnAsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisrCXNpemVfdCBpOworKwlidWZmZXJfY3R4X3QgKnIgPSAmKHAtPmNnaV9jdHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgci0+dXNlZDsgaSsrKSB7CisrCQlpZiAoci0+aGN0eFtpXSA9PSBoY3R4KSBicmVhazsKKysJfQorKworKwlpZiAoaSAhPSByLT51c2VkKSB7CisrCQkvKiBmb3VuZCAqLworKworKwkJaWYgKGkgIT0gci0+dXNlZCAtIDEpIHsKKysJCQlyLT5oY3R4W2ldID0gci0+aGN0eFtyLT51c2VkIC0gMV07CisrCQl9CisrCQlyLT51c2VkLS07CisrCX0KKyt9CisrCisgc3RhdGljIGludCBjZ2lfcmVzcG9uc2VfcGFyc2Uoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqaW4pIHsKKyAJY2hhciAqbnM7CisgCWNvbnN0IGNoYXIgKnM7CitAQCAtMzgwLDYgKzQ5OCwxNCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAKKyAJCWJ1ZmZlcl9jb21taXQoaGN0eC0+cmVzcG9uc2UsIG4pOworIAorKyNpZmRlZiBERUJVRworKwkJc3ByaW50Zihtc2didWYsICJuPSVkLCBieXRlc19vdXQ9JWxsdSwgYnl0ZXNfaW49JWxsdSIsIG4sCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19vdXQsCisrCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbik7CisrCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzcyIsCisrCQkJCSIoZGVidWcpIHJlYWQsIiwgbXNnYnVmKTsKKysjZW5kaWYKKysKKyAJCS8qIHNwbGl0IGhlYWRlciBmcm9tIGJvZHkgKi8KKyAKKyAJCWlmIChjb24tPmZpbGVfc3RhcnRlZCA9PSAwKSB7CitAQCAtNTAzLDcgKzYyOSwyMCBAQCBzdGF0aWMgaW50IGNnaV9kZW11eF9yZXNwb25zZShzZXJ2ZXIgKnNydiwgaGFuZGxlcl9jdHggKmhjdHgpIHsKKyAJCQl9CisgCQl9IGVsc2UgeworIAkJCWh0dHBfY2h1bmtfYXBwZW5kX2J1ZmZlcihzcnYsIGNvbiwgaGN0eC0+cmVzcG9uc2UpOworKyNpZmRlZiBERUJVRworKwkJCXNwcmludGYobXNnYnVmLCAibj0lZCwgYnl0ZXNfb3V0PSVsbHUsIGJ5dGVzX2luPSVsbHUsIGxpbWl0PSVsbHUiLCBuLAorKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWNvbi0+d3JpdGVfcXVldWUtPmJ5dGVzX291dCwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb24tPndyaXRlX3F1ZXVlLT5ieXRlc19pbiwKKysJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloY3R4LT5oaWdoX3dhdGVybGV2ZWwpOworKwkJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywKKysJCQkJCSJzcyIsICIoZGVidWcpIGFwcGVuZCwiLCBtc2didWYpOworKyNlbmRpZgorIAkJCWpvYmxpc3RfYXBwZW5kKHNydiwgY29uKTsKKysKKysJCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCQkJaWYgKGhjdHgtPnRocm90dGxpbmcpIHsKKysJCQkJcmV0dXJuIEZERVZFTlRfSEFORExFRF9OT1RfRklOSVNIRUQ7CisrCQkJfQorIAkJfQorIAorICNpZiAwCitAQCAtNTUzLDggKzY5Miw5IEBAIHN0YXRpYyBoYW5kbGVyX3QgY2dpX2Nvbm5lY3Rpb25fY2xvc2Uoc2VydmVyICpzcnYsIGhhbmRsZXJfY3R4ICpoY3R4KSB7CisgCWNvbi0+cGx1Z2luX2N0eFtwLT5pZF0gPSBOVUxMOworIAorIAkvKiBpcyB0aGlzIGEgZ29vZCBpZGVhID8gKi8KKy0JY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CistCisrCWNnaV9jdHhfZGVsKHAsIGhjdHgpOworKwljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworKwkKKyAJLyogaWYgd2FpdHBpZCBoYXNuJ3QgYmVlbiBjYWxsZWQgYnkgcmVzcG9uc2UuYyB5ZXQsIGRvIGl0IGhlcmUgKi8KKyAJaWYgKHBpZCkgeworIAkJLyogY2hlY2sgaWYgdGhlIENHSS1zY3JpcHQgaXMgYWxyZWFkeSBnb25lICovCitAQCAtMTEwNSw3ICsxMjQ1LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAJCWNvbi0+bW9kZSA9IHAtPmlkOworIAkJYnVmZmVyX3Jlc2V0KGNvbi0+cGh5c2ljYWwucGF0aCk7CisgCistCQloY3R4ID0gY2dpX2hhbmRsZXJfY3R4X2luaXQoKTsKKysJCWhjdHggPSBjZ2lfaGFuZGxlcl9jdHhfaW5pdChwKTsKKysJCWNnaV9jdHhfYWRkKHAsIGhjdHgpOworIAorIAkJaGN0eC0+cmVtb3RlX2Nvbm4gPSBjb247CisgCQloY3R4LT5wbHVnaW5fZGF0YSA9IHA7CitAQCAtMTExNCw2ICsxMjU1LDExIEBAIHN0YXRpYyBpbnQgY2dpX2NyZWF0ZV9lbnYoc2VydmVyICpzcnYsIGNvbm5lY3Rpb24gKmNvbiwgcGx1Z2luX2RhdGEgKnAsIGJ1ZmZlciAqCisgCQloY3R4LT5mZGVfbmR4ID0gLTE7CisgCisgCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gaGN0eDsKKysjaWZkZWYgREVCVUcKKysJCXNwcmludGYobXNnYnVmLCAiaGN0eD0lcCwgY29uPSVwIiwgKHZvaWQqKWhjdHgsICh2b2lkKiljb24pOworKwkJbG9nX2Vycm9yX3dyaXRlKHNydiwgX19GSUxFX18sIF9fTElORV9fLCAic3MiLAorKwkJCQkiKGRlYnVnKSBoY3R4IGdlbmVyYXRlZCwgIiwgbXNnYnVmKTsKKysjZW5kaWYKKyAKKyAJCWZkZXZlbnRfcmVnaXN0ZXIoc3J2LT5ldiwgaGN0eC0+ZmQsIGNnaV9oYW5kbGVfZmRldmVudCwgaGN0eCk7CisgCQlmZGV2ZW50X2V2ZW50X3NldChzcnYtPmV2LCAmKGhjdHgtPmZkZV9uZHgpLCBoY3R4LT5mZCwgRkRFVkVOVF9JTik7CitAQCAtMTEyOCw3ICsxMjc0LDggQEAgc3RhdGljIGludCBjZ2lfY3JlYXRlX2VudihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcCwgYnVmZmVyICoKKyAKKyAJCQljbG9zZShoY3R4LT5mZCk7CisgCistCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoaGN0eCk7CisrCQkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQkJY2dpX2hhbmRsZXJfY3R4X2ZyZWUoc3J2LCBoY3R4KTsKKyAKKyAJCQljb24tPnBsdWdpbl9jdHhbcC0+aWRdID0gTlVMTDsKKyAKK0BAIC0xMTUzLDYgKzEzMDAsOCBAQCBzdGF0aWMgaW50IG1vZF9jZ2lfcGF0Y2hfY29ubmVjdGlvbihzZXJ2ZXIgKnNydiwgY29ubmVjdGlvbiAqY29uLCBwbHVnaW5fZGF0YSAqcAorIAorIAlQQVRDSChjZ2kpOworIAlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCVBBVENIKGhpZ2hfd2F0ZXJsZXZlbCk7CisrCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAKKyAJLyogc2tpcCB0aGUgZmlyc3QsIHRoZSBnbG9iYWwgY29udGV4dCAqLworIAlmb3IgKGkgPSAxOyBpIDwgc3J2LT5jb25maWdfY29udGV4dC0+dXNlZDsgaSsrKSB7CitAQCAtMTE3MCw2ICsxMzE5LDEwIEBAIHN0YXRpYyBpbnQgbW9kX2NnaV9wYXRjaF9jb25uZWN0aW9uKHNlcnZlciAqc3J2LCBjb25uZWN0aW9uICpjb24sIHBsdWdpbl9kYXRhICpwCisgCQkJCVBBVENIKGNnaSk7CisgCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5leGVjdXRlLXgtb25seSIpKSkgeworIAkJCQlQQVRDSChleGVjdXRlX3hfb25seSk7CisrCQkJfSBlbHNlIGlmIChidWZmZXJfaXNfZXF1YWxfc3RyaW5nKGR1LT5rZXksIENPTlNUX1NUUl9MRU4oImNnaS5oaWdoLXdhdGVybGV2ZWwiKSkpIHsKKysJCQkJUEFUQ0goaGlnaF93YXRlcmxldmVsKTsKKysJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9pc19lcXVhbF9zdHJpbmcoZHUtPmtleSwgQ09OU1RfU1RSX0xFTigiY2dpLmxvdy13YXRlcmxldmVsIikpKSB7CisrCQkJCVBBVENIKGxvd193YXRlcmxldmVsKTsKKyAJCQl9CisgCQl9CisgCX0KK0BAIC0xMjIyLDYgKzEzNzUsMjEgQEAgVVJJSEFORExFUl9GVU5DKGNnaV9pc19oYW5kbGVkKSB7CisgVFJJR0dFUl9GVU5DKGNnaV90cmlnZ2VyKSB7CisgCXBsdWdpbl9kYXRhICpwID0gcF9kOworIAlzaXplX3QgbmR4OworKworKwlmb3IgKG5keCA9IDA7IG5keCA8IHAtPmNnaV9jdHgudXNlZDsgbmR4KyspIHsKKysJCWhhbmRsZXJfY3R4ICpoY3R4ID0gcC0+Y2dpX2N0eC5oY3R4W25keF07CisrI2lmZGVmIERFQlVHCisrCQljb25uZWN0aW9uICpjb24gPSBoY3R4LT5yZW1vdGVfY29ubjsKKysJCisrCQlzcHJpbnRmKG1zZ2J1ZiwgImhjdHg9JXAsIGNvbj0lcCwgYnl0ZXNfaW5fYnVmZmVyPSVsbHUiLAorKwkJCSh2b2lkKiloY3R4LCAodm9pZCopY29uLAorKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaGN0eC0+Ynl0ZXNfaW5fYnVmZmVyKTsKKysJCWxvZ19lcnJvcl93cml0ZShzcnYsIF9fRklMRV9fLCBfX0xJTkVfXywgInNzIiwKKysJCQkJIihkZWJ1ZykgZm91bmQgdXNpbmcgY3R4LCIsIG1zZ2J1Zik7CisrI2VuZGlmCisrCQljZ2lfdGhyb3R0bGluZ19jb250cm9sKHNydiwgaGN0eCk7CisrCX0KKysKKyAJLyogdGhlIHRyaWdnZXIgaGFuZGxlIG9ubHkgY2FyZXMgYWJvdXQgbG9uZWx5IFBJRCB3aGljaCB3ZSBoYXZlIHRvIHdhaXQgZm9yICovCisgI2lmbmRlZiBfX1dJTjMyCisgCitAQCAtMTMzMCw3ICsxNDk4LDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCitAQCAtMTM2Miw3ICsxNTMxLDggQEAgU1VCUkVRVUVTVF9GVU5DKG1vZF9jZ2lfaGFuZGxlX3N1YnJlcXVlc3QpIHsKKyAJCQlsb2dfZXJyb3Jfd3JpdGUoc3J2LCBfX0ZJTEVfXywgX19MSU5FX18sICJzZHMiLCAiY2dpIGNsb3NlIGZhaWxlZCAiLCBoY3R4LT5mZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAJCX0KKyAKKy0JCWNnaV9oYW5kbGVyX2N0eF9mcmVlKGhjdHgpOworKwkJY2dpX2N0eF9kZWwocCwgaGN0eCk7CisrCQljZ2lfaGFuZGxlcl9jdHhfZnJlZShzcnYsIGhjdHgpOworIAorIAkJY29uLT5wbHVnaW5fY3R4W3AtPmlkXSA9IE5VTEw7CisgCQlyZXR1cm4gSEFORExFUl9GSU5JU0hFRDsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2luZGV4Lmh0bWwubGlnaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmMWMzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9pbmRleC5odG1sLmxpZ2h0dHBkCkBAIC0wLDAgKzEgQEAKKzxodG1sPjxib2R5PjxoMT5JdCB3b3JrcyE8L2gxPjwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4OWE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbgorREFFTU9OPS91c3Ivc2Jpbi9saWdodHRwZAorTkFNRT1saWdodHRwZAorREVTQz0iTGlnaHR0cGQgV2ViIFNlcnZlciIKK09QVFM9Ii1mIC9ldGMvbGlnaHR0cGQuY29uZiIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAteCAiJERBRU1PTiIKKwlzbGVlcCAxCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAteCAiJERBRU1PTiIgLS0gJE9QVFMKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODQwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbGlnaHR0cGQvbGlnaHR0cGQvbGlnaHR0cGQuY29uZgpAQCAtMCwwICsxLDMzMSBAQAorIyBsaWdodHRwZCBjb25maWd1cmF0aW9uIGZpbGUKKyMKKyMgdXNlIGl0IGFzIGEgYmFzZSBmb3IgbGlnaHR0cGQgMS4wLjAgYW5kIGFib3ZlCisjCisjICRJZDogbGlnaHR0cGQuY29uZix2IDEuNyAyMDA0LzExLzAzIDIyOjI2OjA1IHdlaWdvbiBFeHAgJAorCisjIyMjIyMjIyMjIyMgT3B0aW9ucyB5b3UgcmVhbGx5IGhhdmUgdG8gdGFrZSBjYXJlIG9mICMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjIG1vZHVsZXMgdG8gbG9hZAorIyBhdCBsZWFzdCBtb2RfYWNjZXNzIGFuZCBtb2RfYWNjZXNzbG9nIHNob3VsZCBiZSBsb2FkZWQKKyMgYWxsIG90aGVyIG1vZHVsZSBzaG91bGQgb25seSBiZSBsb2FkZWQgaWYgcmVhbGx5IG5lY2Nlc2FyeQorIyAtIHNhdmVzIHNvbWUgdGltZQorIyAtIHNhdmVzIG1lbW9yeQorc2VydmVyLm1vZHVsZXMgICAgICAgICAgICAgID0gKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3Jld3JpdGUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3JlZGlyZWN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9hbGlhcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfYWNjZXNzIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9jbWwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3RyaWdnZXJfYjRfZGwiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2F1dGgiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3N0YXR1cyIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2V0ZW52IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9mYXN0Y2dpIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9wcm94eSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2Rfc2ltcGxlX3Zob3N0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ldmhvc3QiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3VzZXJkaXIiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2NnaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfY29tcHJlc3MiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NzaSIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2RfdXNlcnRyYWNrIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9leHBpcmUiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX3NlY2Rvd25sb2FkIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZF9ycmR0b29sIiwKKyMJCQkJIm1vZF93ZWJkYXYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kX2FjY2Vzc2xvZyIgKQorCisjIyBhIHN0YXRpYyBkb2N1bWVudC1yb290LCBmb3IgdmlydHVhbC1ob3N0aW5nIHRha2UgbG9vayBhdCB0aGUKKyMjIHNlcnZlci52aXJ0dWFsLSogb3B0aW9ucworc2VydmVyLmRvY3VtZW50LXJvb3QgICAgICAgID0gIi93d3cvcGFnZXMvIgorCisjIyB3aGVyZSB0byBzZW5kIGVycm9yLW1lc3NhZ2VzIHRvCitzZXJ2ZXIuZXJyb3Jsb2cgICAgICAgICAgICAgPSAiL3d3dy9sb2dzL2xpZ2h0dHBkLmVycm9yLmxvZyIKKworIyBmaWxlcyB0byBjaGVjayBmb3IgaWYgLi4uLyBpcyByZXF1ZXN0ZWQKK2luZGV4LWZpbGUubmFtZXMgICAgICAgICAgICA9ICggImluZGV4LnBocCIsICJpbmRleC5odG1sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4Lmh0bSIsICJkZWZhdWx0Lmh0bSIgKQorCisjIyBzZXQgdGhlIGV2ZW50LWhhbmRsZXIgKHJlYWQgdGhlIHBlcmZvcm1hbmNlIHNlY3Rpb24gaW4gdGhlIG1hbnVhbCkKKyMgc2VydmVyLmV2ZW50LWhhbmRsZXIgPSAiZnJlZWJzZC1rcXVldWUiICMgbmVlZGVkIG9uIE9TIFgKKworIyBtaW1ldHlwZSBtYXBwaW5nCittaW1ldHlwZS5hc3NpZ24gICAgICAgICAgICAgPSAoCisgICIucGRmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wZGYiLAorICAiLnNpZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZSIsCisgICIuc3BsIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giLAorICAiLmNsYXNzIiAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIiwKKyAgIi5wcyIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3Bvc3RzY3JpcHQiLAorICAiLnRvcnJlbnQiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IiwKKyAgIi5kdmkiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZHZpIiwKKyAgIi5neiIgICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtZ3ppcCIsCisgICIucGFjIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorICAiLnN3ZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLAorICAiLnRhci5neiIgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRneiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorICAiLnRhciIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10YXIiLAorICAiLnppcCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vemlwIiwKKyAgIi5tcDMiICAgICAgICAgID0+ICAgICAgImF1ZGlvL21wZWciLAorICAiLm0zdSIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC1tcGVndXJsIiwKKyAgIi53bWEiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd21hIiwKKyAgIi53YXgiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd2F4IiwKKyAgIi5vZ2ciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29nZyIsCisgICIud2F2IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LXdhdiIsCisgICIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAorICAiLmpwZyIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIuanBlZyIgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKyAgIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCisgICIueGJtIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXhiaXRtYXAiLAorICAiLnhwbSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14cGl4bWFwIiwKKyAgIi54d2QiICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHdpbmRvd2R1bXAiLAorICAiLmNzcyIgICAgICAgICAgPT4gICAgICAidGV4dC9jc3MiLAorICAiLmh0bWwiICAgICAgICAgPT4gICAgICAidGV4dC9odG1sIiwKKyAgIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuanMiICAgICAgICAgICA9PiAgICAgICJ0ZXh0L2phdmFzY3JpcHQiLAorICAiLmFzYyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuYyIgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5jcHAiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmxvZyIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50ZXh0IiAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLnR4dCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIueG1sIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisgICIubXBlZyIgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tcGciICAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorICAiLm1vdiIgICAgICAgICAgPT4gICAgICAidmlkZW8vcXVpY2t0aW1lIiwKKyAgIi5xdCIgICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIuYXZpIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zdmlkZW8iLAorICAiLmFzZiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLmFzeCIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy1hc2YiLAorICAiLndtdiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy13bXYiLAorICAiLmJ6MiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwIiwKKyAgIi50YnoiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisgICIudGFyLmJ6MiIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiCisgKQorCisjIFVzZSB0aGUgIkNvbnRlbnQtVHlwZSIgZXh0ZW5kZWQgYXR0cmlidXRlIHRvIG9idGFpbiBtaW1lIHR5cGUgaWYgcG9zc2libGUKKyNtaW1ldHlwZS51c2UteGF0dHIgICAgICAgID0gImVuYWJsZSIKKworCisjIyBzZW5kIGEgZGlmZmVyZW50IFNlcnZlcjogaGVhZGVyCisjIyBiZSBuaWNlIGFuZCBrZWVwIGl0IGF0IGxpZ2h0dHBkCisjIHNlcnZlci50YWcgICAgICAgICAgICAgICAgID0gImxpZ2h0dHBkIgorCisjIyMjIGFjY2Vzc2xvZyBtb2R1bGUKK2FjY2Vzc2xvZy5maWxlbmFtZSAgICAgICAgICA9ICIvd3d3L2xvZ3MvYWNjZXNzLmxvZyIKK2RlYnVnLmxvZy1yZXF1ZXN0LWhhbmRsaW5nID0gImVuYWJsZSIKKworCisKKworIyMgZGVueSBhY2Nlc3MgdGhlIGZpbGUtZXh0ZW5zaW9ucworIworIyB+ICAgIGlzIGZvciBiYWNrdXBmaWxlcyBmcm9tIHZpLCBlbWFjcywgam9lLCAuLi4KKyMgLmluYyBpcyBvZnRlbiB1c2VkIGZvciBjb2RlIGluY2x1ZGVzIHdoaWNoIHNob3VsZCBpbiBnZW5lcmFsIG5vdCBiZSBwYXJ0CisjICAgICAgb2YgdGhlIGRvY3VtZW50LXJvb3QKK3VybC5hY2Nlc3MtZGVueSAgICAgICAgICAgICA9ICggIn4iLCAiLmluYyIgKQorCiskSFRUUFsidXJsIl0gPX4gIlwucGRmJCIgeworICBzZXJ2ZXIucmFuZ2UtcmVxdWVzdHMgPSAiZGlzYWJsZSIKK30KKworIyMKKyMgd2hpY2ggZXh0ZW5zaW9ucyBzaG91bGQgbm90IGJlIGhhbmRsZSB2aWEgc3RhdGljLWZpbGUgdHJhbnNmZXIKKyMKKyMgLnBocCwgLnBsLCAuZmNnaSBhcmUgbW9zdCBvZnRlbiBoYW5kbGVkIGJ5IG1vZF9mYXN0Y2dpIG9yIG1vZF9jZ2kKK3N0YXRpYy1maWxlLmV4Y2x1ZGUtZXh0ZW5zaW9ucyA9ICggIi5waHAiLCAiLnBsIiwgIi5mY2dpIiApCisKKyMjIyMjIyMjIyBPcHRpb25zIHRoYXQgYXJlIGdvb2QgdG8gYmUgYnV0IG5vdCBuZWNjZXNhcnkgdG8gYmUgY2hhbmdlZCAjIyMjIyMjCisKKyMjIGJpbmQgdG8gcG9ydCAoZGVmYXVsdDogODApCisjc2VydmVyLnBvcnQgICAgICAgICAgICAgICAgPSA4MQorCisjIyBiaW5kIHRvIGxvY2FsaG9zdCAoZGVmYXVsdDogYWxsIGludGVyZmFjZXMpCisjc2VydmVyLmJpbmQgICAgICAgICAgICAgICAgPSAiZ3Jpc3UuaG9tZS5rbmVzY2hrZS5kZSIKKworIyMgZXJyb3ItaGFuZGxlciBmb3Igc3RhdHVzIDQwNAorI3NlcnZlci5lcnJvci1oYW5kbGVyLTQwNCAgID0gIi9lcnJvci1oYW5kbGVyLmh0bWwiCisjc2VydmVyLmVycm9yLWhhbmRsZXItNDA0ICAgPSAiL2Vycm9yLWhhbmRsZXIucGhwIgorCisjIyB0byBoZWxwIHRoZSByYy5zY3JpcHRzCisjc2VydmVyLnBpZC1maWxlICAgICAgICAgICAgPSAiL3Zhci9ydW4vbGlnaHR0cGQucGlkIgorCisKKyMjIyMjIyB2aXJ0dWFsIGhvc3RzCisjIworIyMgIElmIHlvdSB3YW50IG5hbWUtYmFzZWQgdmlydHVhbCBob3N0aW5nIGFkZCB0aGUgbmV4dCB0aHJlZSBzZXR0aW5ncyBhbmQgbG9hZAorIyMgIG1vZF9zaW1wbGVfdmhvc3QKKyMjCisjIyBkb2N1bWVudC1yb290ID0KKyMjICAgdmlydHVhbC1zZXJ2ZXItcm9vdCArIHZpcnR1YWwtc2VydmVyLWRlZmF1bHQtaG9zdCArIHZpcnR1YWwtc2VydmVyLWRvY3Jvb3QKKyMjIG9yCisjIyAgIHZpcnR1YWwtc2VydmVyLXJvb3QgKyBodHRwLWhvc3QgKyB2aXJ0dWFsLXNlcnZlci1kb2Nyb290CisjIworI3NpbXBsZS12aG9zdC5zZXJ2ZXItcm9vdCAgID0gIi9ob21lL3dlaWdvbi93d3dyb290L3NlcnZlcnMvIgorI3NpbXBsZS12aG9zdC5kZWZhdWx0LWhvc3QgID0gImdyaXN1LmhvbWUua25lc2Noa2UuZGUiCisjc2ltcGxlLXZob3N0LmRvY3VtZW50LXJvb3QgPSAiL3BhZ2VzLyIKKworCisjIworIyMgRm9ybWF0OiA8ZXJyb3JmaWxlLXByZWZpeD48c3RhdHVzLWNvZGU+Lmh0bWwKKyMjIC0+IC4uLi4vc3RhdHVzLTQwNC5odG1sIGZvciAnRmlsZSBub3QgZm91bmQnCisjc2VydmVyLmVycm9yZmlsZS1wcmVmaXggICAgPSAiL2hvbWUvd2VpZ29uL3Byb2plY3RzL2xpZ2h0dHBkL2RvYy9zdGF0dXMtIgorCisjIyB2aXJ0dWFsIGRpcmVjdG9yeSBsaXN0aW5ncworI2Rpci1saXN0aW5nLmFjdGl2YXRlICAgICAgID0gImVuYWJsZSIKKworIyMgZW5hYmxlIGRlYnVnZ2luZworI2RlYnVnLmxvZy1yZXF1ZXN0LWhlYWRlciAgID0gImVuYWJsZSIKKyNkZWJ1Zy5sb2ctcmVzcG9uc2UtaGVhZGVyICA9ICJlbmFibGUiCisjZGVidWcubG9nLXJlcXVlc3QtaGFuZGxpbmcgPSAiZW5hYmxlIgorI2RlYnVnLmxvZy1maWxlLW5vdC1mb3VuZCAgID0gImVuYWJsZSIKKworIyMjIG9ubHkgcm9vdCBjYW4gdXNlIHRoZXNlIG9wdGlvbnMKKyMKKyMgY2hyb290KCkgdG8gZGlyZWN0b3J5IChkZWZhdWx0OiBubyBjaHJvb3QoKSApCisjc2VydmVyLmNocm9vdCAgICAgICAgICAgICAgPSAiLyIKKworIyMgY2hhbmdlIHVpZCB0byA8dWlkPiAoZGVmYXVsdDogZG9uJ3QgY2FyZSkKKyNzZXJ2ZXIudXNlcm5hbWUgICAgICAgICAgICA9ICJ3d3dydW4iCisKKyMjIGNoYW5nZSB1aWQgdG8gPHVpZD4gKGRlZmF1bHQ6IGRvbid0IGNhcmUpCisjc2VydmVyLmdyb3VwbmFtZSAgICAgICAgICAgPSAid3d3cnVuIgorCisjIyMjIGNvbXByZXNzIG1vZHVsZQorI2NvbXByZXNzLmNhY2hlLWRpciAgICAgICAgID0gIi90bXAvbGlnaHR0cGQvY2FjaGUvY29tcHJlc3MvIgorI2NvbXByZXNzLmZpbGV0eXBlICAgICAgICAgID0gKCJ0ZXh0L3BsYWluIiwgInRleHQvaHRtbCIpCisKKyMjIyMgcHJveHkgbW9kdWxlCisjIyByZWFkIHByb3h5LnR4dCBmb3IgbW9yZSBpbmZvCisjcHJveHkuc2VydmVyICAgICAgICAgICAgICAgPSAoICIucGhwIiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoICJsb2NhbGhvc3QiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3QiID0+ICIxOTIuMTY4LjAuMTAxIiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3J0IiA9PiA4MAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisjIyMjIGZhc3RjZ2kgbW9kdWxlCisjIyByZWFkIGZhc3RjZ2kudHh0IGZvciBtb3JlIGluZm8KKyMjIGZvciBQSFAgZG9uJ3QgZm9yZ2V0IHRvIHNldCBjZ2kuZml4X3BhdGhpbmZvID0gMSBpbiB0aGUgcGhwLmluaQorI2Zhc3RjZ2kuc2VydmVyICAgICAgICAgICAgID0gKCAiLnBocCIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCAibG9jYWxob3N0IiA9PgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQiID0+ICIvdG1wL3BocC1mYXN0Y2dpLnNvY2tldCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmluLXBhdGgiID0+ICIvdXNyL2xvY2FsL2Jpbi9waHAiCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworIyMjIyBDR0kgbW9kdWxlCisjY2dpLmFzc2lnbiAgICAgICAgICAgICAgICAgPSAoICIucGwiICA9PiAiL3Vzci9iaW4vcGVybCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuY2dpIiA9PiAiL3Vzci9iaW4vcGVybCIgKQorIworCisjIyMjIFNTTCBlbmdpbmUKKyNzc2wuZW5naW5lICAgICAgICAgICAgICAgICA9ICJlbmFibGUiCisjc3NsLnBlbWZpbGUgICAgICAgICAgICAgICAgPSAic2VydmVyLnBlbSIKKworIyMjIyBzdGF0dXMgbW9kdWxlCisjc3RhdHVzLnN0YXR1cy11cmwgICAgICAgICAgPSAiL3NlcnZlci1zdGF0dXMiCisjc3RhdHVzLmNvbmZpZy11cmwgICAgICAgICAgPSAiL3NlcnZlci1jb25maWciCisKKyMjIyMgYXV0aCBtb2R1bGUKKyMjIHJlYWQgYXV0aGVudGljYXRpb24udHh0IGZvciBtb3JlIGluZm8KKyNhdXRoLmJhY2tlbmQgICAgICAgICAgICAgICA9ICJwbGFpbiIKKyNhdXRoLmJhY2tlbmQucGxhaW4udXNlcmZpbGUgPSAibGlnaHR0cGQudXNlciIKKyNhdXRoLmJhY2tlbmQucGxhaW4uZ3JvdXBmaWxlID0gImxpZ2h0dHBkLmdyb3VwIgorCisjYXV0aC5iYWNrZW5kLmxkYXAuaG9zdG5hbWUgPSAibG9jYWxob3N0IgorI2F1dGguYmFja2VuZC5sZGFwLmJhc2UtZG4gID0gImRjPW15LWRvbWFpbixkYz1jb20iCisjYXV0aC5iYWNrZW5kLmxkYXAuZmlsdGVyICAgPSAiKHVpZD0kKSIKKworI2F1dGgucmVxdWlyZSAgICAgICAgICAgICAgID0gKCAiL3NlcnZlci1zdGF0dXMiID0+CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kIiAgPT4gImRpZ2VzdCIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWxtIiAgID0+ICJkb3dubG9hZCBhcmNoaXYiLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlIiA9PiAidXNlcj1qYW4iCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvc2VydmVyLWNvbmZpZyIgPT4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXRob2QiICA9PiAiZGlnZXN0IiwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhbG0iICAgPT4gImRvd25sb2FkIGFyY2hpdiIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmUiID0+ICJ2YWxpZC11c2VyIgorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyMjIyMgdXJsIGhhbmRsaW5nIG1vZHVsZXMgKHJld3JpdGUsIHJlZGlyZWN0LCBhY2Nlc3MpCisjdXJsLnJld3JpdGUgICAgICAgICAgICAgICAgPSAoICJeLyQiICAgICAgICAgICAgID0+ICIvc2VydmVyLXN0YXR1cyIgKQorI3VybC5yZWRpcmVjdCAgICAgICAgICAgICAgID0gKCAiXi93aXNobGlzdC8oLispIiA9PiAiaHR0cDovL3d3dy4xMjMub3JnLyQxIiApCisKKyMjIyMgYm90aCByZXdyaXRlL3JlZGlyZWN0IHN1cHBvcnQgYmFjayByZWZlcmVuY2UgdG8gcmVnZXggY29uZGl0aW9uYWwgdXNpbmcgJW4KKyMkSFRUUFsiaG9zdCJdID1+ICJed3d3XC4oLiopIiB7CisjICB1cmwucmVkaXJlY3QgICAgICAgICAgICA9ICggIl4vKC4qKSIgPT4gImh0dHA6Ly8lMS8kMSIgKQorI30KKworIworIyBkZWZpbmUgYSBwYXR0ZXJuIGZvciB0aGUgaG9zdCB1cmwgZmluZGluZworIyAlJSA9PiAlIHNpZ24KKyMgJTAgPT4gZG9tYWluIG5hbWUgKyB0bGQKKyMgJTEgPT4gdGxkCisjICUyID0+IGRvbWFpbiBuYW1lIHdpdGhvdXQgdGxkCisjICUzID0+IHN1YmRvbWFpbiAxIG5hbWUKKyMgJTQgPT4gc3ViZG9tYWluIDIgbmFtZQorIworI2V2aG9zdC5wYXRoLXBhdHRlcm4gICAgICAgID0gIi9ob21lL3N0b3JhZ2UvZGV2L3d3dy8lMy9odGRvY3MvIgorCisjIyMjIGV4cGlyZSBtb2R1bGUKKyNleHBpcmUudXJsICAgICAgICAgICAgICAgICA9ICggIi9idWdneS8iID0+ICJhY2Nlc3MgMiBob3VycyIsICIvYXNkaGFzLyIgPT4gImFjY2VzcyBwbHVzIDEgc2Vjb25kcyAyIG1pbnV0ZXMiKQorCisjIyMjIHNzaQorI3NzaS5leHRlbnNpb24gICAgICAgICAgICAgID0gKCAiLnNodG1sIiApCisKKyMjIyMgcnJkdG9vbAorI3JyZHRvb2wuYmluYXJ5ICAgICAgICAgICAgID0gIi91c3IvYmluL3JyZHRvb2wiCisjcnJkdG9vbC5kYi1uYW1lICAgICAgICAgICAgPSAiL3Zhci93d3cvbGlnaHR0cGQucnJkIgorCisjIyMjIHNldGVudgorI3NldGVudi5hZGQtcmVxdWVzdC1oZWFkZXIgID0gKCAiVFJBVl9FTlYiID0+ICJteXNxbDovL3VzZXJAaG9zdC9kYiIgKQorI3NldGVudi5hZGQtcmVzcG9uc2UtaGVhZGVyID0gKCAiWC1TZWNyZXQtTWVzc2FnZSIgPT4gIjQyIiApCisKKyMjIGZvciBtb2RfdHJpZ2dlcl9iNF9kbAorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5nZGJtLWZpbGVuYW1lID0gIi9ob21lL3dlaWdvbi90ZXN0YmFzZS90cmlnZ2VyLmRiIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5tZW1jYWNoZS1ob3N0cyA9ICggIjEyNy4wLjAuMToxMTIxMSIgKQorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC50cmlnZ2VyLXVybCA9ICJeL3RyaWdnZXIvIgorIyB0cmlnZ2VyLWJlZm9yZS1kb3dubG9hZC5kb3dubG9hZC11cmwgPSAiXi9kb3dubG9hZC8iCisjIHRyaWdnZXItYmVmb3JlLWRvd25sb2FkLmRlbnktdXJsID0gImh0dHA6Ly8xMjcuMC4wLjEvaW5kZXguaHRtbCIKKyMgdHJpZ2dlci1iZWZvcmUtZG93bmxvYWQudHJpZ2dlci10aW1lb3V0ID0gMTAKKworIyMgZm9yIG1vZF9jbWwKKyMjIGRvbid0IGZvcmdldCB0byBhZGQgaW5kZXguY21sIHRvIHNlcnZlci5pbmRleGZpbGVzCisjIGNtbC5leHRlbnNpb24gICAgICAgICAgICAgICA9ICIuY21sIgorIyBjbWwubWVtY2FjaGUtaG9zdHMgICAgICAgICAgPSAoICIxMjcuMC4wLjE6MTEyMTEiICkKKworIyMjIyB2YXJpYWJsZSB1c2FnZToKKyMjIHZhcmlhYmxlIG5hbWUgd2l0aG91dCAiLiIgaXMgYXV0byBwcmVmaXhlZCBieSAidmFyLiIgYW5kIGJlY29tZXMgInZhci5iYXIiCisjYmFyID0gMQorI3Zhci5teXN0cmluZyA9ICJmb28iCisKKyMjIGludGVnZXIgYWRkCisjYmFyICs9IDEKKyMjIHN0cmluZyBjb25jYXQsIHdpdGggaW50ZWdlciBjYXN0IGFzIHN0cmluZywgcmVzdWx0OiAid3d3LmZvbzEuY29tIgorI3NlcnZlci5uYW1lID0gInd3dy4iICsgbXlzdHJpbmcgKyB2YXIuYmFyICsgIi5jb20iCisjIyBhcnJheSBtZXJnZQorI2luZGV4LWZpbGUubmFtZXMgPSAoZm9vICsgIi5waHAiKSArIGluZGV4LWZpbGUubmFtZXMKKyNpbmRleC1maWxlLm5hbWVzICs9IChmb28gKyAiLnBocCIpCisKKyMjIyMgaW5jbHVkZQorI2luY2x1ZGUgL2V0Yy9saWdodHRwZC9saWdodHRwZC1pbmMuY29uZgorIyMgc2FtZSBhcyBhYm92ZSBpZiB5b3UgcnVuOiAibGlnaHR0cGQgLWYgL2V0Yy9saWdodHRwZC9saWdodHRwZC5jb25mIgorI2luY2x1ZGUgImxpZ2h0dHBkLWluYy5jb25mIgorCisjIyMjIGluY2x1ZGVfc2hlbGwKKyNpbmNsdWRlX3NoZWxsICJlY2hvIHZhci5hPTEiCisjIyB0aGUgYWJvdmUgaXMgc2FtZSBhczoKKyN2YXIuYT0xCisKKyMgaW5jbHVkZSBvdGhlciBjb25maWcgZmlsZSBmcmFnbWVudHMgZnJvbSBsaWdodHRwZC5kIHN1YmRpcgoraW5jbHVkZV9zaGVsbCAiZmluZCAvZXRjL2xpZ2h0dHBkLmQgLW1heGRlcHRoIDEgLW5hbWUgJyouY29uZicgLWV4ZWMgY2F0IHt9IFw7IiAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL2xpZ2h0dHBkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZhOTA3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9saWdodHRwZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249TGlnaHRuaW5nIEZhc3QgV2Vic2VydmVyIFdpdGggTGlnaHQgU3lzdGVtIFJlcXVpcmVtZW50cworQWZ0ZXI9bmV0d29yay50YXJnZXQKKworW1NlcnZpY2VdCitFeGVjU3RhcnRQcmU9QFNCSU5ESVJAL2xpZ2h0dHBkIC10IC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjU3RhcnQ9QFNCSU5ESVJAL2xpZ2h0dHBkIC1EIC1mIEBTWVNDT05GRElSQC9saWdodHRwZC5jb25mCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkL3BrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM5NWY5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZC9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXNlIHBrZy1jb25maWcgZm9yIHBjcmUgZGVwZW5kZW5jeSBpbnN0ZWFkIG9mIC1jb25maWcgc2NyaXB0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxNC81LzIyCisKKworSW5kZXg6IGxpZ2h0dHBkLTEuNC4zNS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWdodHRwZC0xLjQuMzUub3JpZy9jb25maWd1cmUuYWMJMjAxNC0wMy0wNiAxNDowODowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWdodHRwZC0xLjQuMzUvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMTY6NTg6MzAuNzU4NDcxMTY5ICswMDAwCitAQCAtMzA5LDE2ICszMDksMTQgQEAKKyBBQ19NU0dfUkVTVUxUKFskV0lUSF9QQ1JFXSkKKyAKKyBpZiB0ZXN0ICIkV0lUSF9QQ1JFIiAhPSAibm8iOyB0aGVuCistICBBQ19QQVRIX1BST0coUENSRUNPTkZJRywgcGNyZS1jb25maWcpCistCistICBpZiB0ZXN0IHgiJFBDUkVDT05GSUciICE9IHg7IHRoZW4KKy0gICAgUENSRV9MSUI9YCRQQ1JFQ09ORklHIC0tbGlic2AKKy0gICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJFBDUkVDT05GSUcgLS1jZmxhZ3NgIgorKyAgUEtHX0NIRUNLX01PRFVMRVMoUENSRVBLRywgW2xpYnBjcmVdLCBbCisrICAgIFBDUkVfTElCPSR7UENSRVBLR19MSUJTfQorKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTICR7UENSRVBLR19DRkxBR1N9IgorICAgICBBQ19ERUZJTkUoW0hBVkVfTElCUENSRV0sIFsxXSwgW2xpYnBjcmVdKQorICAgICBBQ19ERUZJTkUoW0hBVkVfUENSRV9IXSwgWzFdLCBbcGNyZS5oXSkKKy0gIGVsc2UKKysgIF0sIFsKKyAgICAgIEFDX01TR19FUlJPUihbcGNyZS1jb25maWcgbm90IGZvdW5kLCBpbnN0YWxsIHRoZSBwY3JlLWRldmVsIHBhY2thZ2Ugb3IgYnVpbGQgd2l0aCAtLXdpdGhvdXQtcGNyZV0pCistICBmaQorKyAgXSkKKyBmaQorIAorIEFDX1NVQlNUKFBDUkVfTElCKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xpZ2h0dHBkL2xpZ2h0dHBkXzEuNC4zNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiNmUzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9saWdodHRwZC9saWdodHRwZF8xLjQuMzYuYmIKQEAgLTAsMCArMSw3NyBAQAorU1VNTUFSWSA9ICJMaWdodHdlaWdodCBoaWdoLXBlcmZvcm1hbmNlIHdlYiBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpZ2h0dHBkLm5ldC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC9wcm9qZWN0cy9saWdodHRwZC9pc3N1ZXMiCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTRkYWM1YzZhYjE2OWFhMjEyZmViNTAyODg1M2E1NzkiCisKK1NFQ1RJT04gPSAibmV0IgorREVQRU5EUyA9ICJ6bGliIGxpYnBjcmUiCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1hY2Nlc3MgXAorICAgICAgICAgICAgICAgbGlnaHR0cGQtbW9kdWxlLWFjY2Vzc2xvZyBcCisgICAgICAgICAgICAgICBsaWdodHRwZC1tb2R1bGUtaW5kZXhmaWxlIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1kaXJsaXN0aW5nIFwKKyAgICAgICAgICAgICAgIGxpZ2h0dHBkLW1vZHVsZS1zdGF0aWNmaWxlIFwKKyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQubGlnaHR0cGQubmV0L2xpZ2h0dHBkL3JlbGVhc2VzLTEuNC54L2xpZ2h0dHBkLSR7UFZ9LnRhci54eiBcCisgICAgICAgIGZpbGU6Ly9pbmRleC5odG1sLmxpZ2h0dHBkIFwKKyAgICAgICAgZmlsZTovL2xpZ2h0dHBkLmNvbmYgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQgXAorICAgICAgICBmaWxlOi8vbGlnaHR0cGQuc2VydmljZSBcCisgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICBmaWxlOi8vMDAwMS1tb2RfY2dpLWJ1ZmZlcnMtZGF0YS13aXRob3V0LWJvdW5kLnBhdGNoIFwKKyAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTg0M2RhZmZjYjAxOGFhNTI4ZjZkMTVkNDM1NDQ2NTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk3YWI2YjFjYzdiZDUxNjcxZjhhZjc1OWU3ODQ2MjQ1ZmJiY2EwNjg1YzMwMDE3ZTkzYTU4ODJhOWFjMWE1MyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm9wZW5zc2wiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0td2l0aC1vcGVuc3NsLCAtLXdpdGhvdXQtb3BlbnNzbCwgb3BlbnNzbCIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgICAgICAgICAgLS13aXRob3V0LWJ6aXAyIFwKKyAgICAgICAgICAgICAtLXdpdGhvdXQtbGRhcCBcCisgICAgICAgICAgICAgLS13aXRob3V0LWx1YSBcCisgICAgICAgICAgICAgLS13aXRob3V0LW1lbWNhY2hlIFwKKyAgICAgICAgICAgICAtLXdpdGgtcGNyZSBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1wcm9wcyBcCisgICAgICAgICAgICAgLS13aXRob3V0LXdlYmRhdi1sb2NrcyBcCisgICAgICAgICAgICAgLS1kaXNhYmxlLXN0YXRpYyBcCisiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1cGRhdGUtcmMuZCBnZXR0ZXh0IHN5c3RlbWQKKworSU5JVFNDUklQVF9OQU1FID0gImxpZ2h0dHBkIgorSU5JVFNDUklQVF9QQVJBTVMgPSAiZGVmYXVsdHMgNzAiCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJsaWdodHRwZC5zZXJ2aWNlIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZCAke0R9JHtzeXNjb25mZGlyfS9saWdodHRwZC5kICR7RH0vd3d3L3BhZ2VzL2RhdgorCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L2xpZ2h0dHBkICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L2xpZ2h0dHBkLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9pbmRleC5odG1sLmxpZ2h0dHBkICR7RH0vd3d3L3BhZ2VzL2luZGV4Lmh0bWwKKworCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9saWdodHRwZC5zZXJ2aWNlICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJc2VkIC1pIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkJLWUgJ3MsQFNZU0NPTkZESVJALCR7c3lzY29uZmRpcn0sZycgXAorCQktZSAncyxAQkFTRV9CSU5ESVJALCR7YmFzZV9iaW5kaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vbGlnaHR0cGQuc2VydmljZQorCSNGb3IgRkhTIGNvbXBsaWFuY2UsIGNyZWF0ZSBzeW1ib2xpYyBsaW5rcyB0byAvdmFyL2xvZyBhbmQgL3Zhci90bXAgZm9yIGxvZ3MgYW5kIHRlbXBvcmFyeSBkYXRhCisJbG4gLXNmICR7bG9jYWxzdGF0ZWRpcn0vbG9nICR7RH0vd3d3L2xvZ3MKKwlsbiAtc2YgJHtsb2NhbHN0YXRlZGlyfS90bXAgJHtEfS93d3cvdmFyCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9IC93d3ciCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L2xpZ2h0dHBkLmNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5saWdodHRwZC1tb2R1bGUtLioiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBsaWdodHRwZF9saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9JykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBsaWdodHRwZF9saWJkaXIsICdebW9kXyguKilcLnNvJCcsICdsaWdodHRwZC1tb2R1bGUtJXMnLCAnTGlnaHR0cGQgbW9kdWxlIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9hY3QtYXMtbXYtd2hlbi1yb3RhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU5MzFhMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL2FjdC1hcy1tdi13aGVuLXJvdGF0ZS5wYXRjaApAQCAtMCwwICsxLDE0NyBAQAorRnJvbSA2OGYyOWFiNDkwY2Y5ODdhYTM0YjVmNGNhZjE3ODRiNThhMDIxMzA4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDE3IEZlYiAyMDE1IDIxOjA4OjA3IC0wODAwCitTdWJqZWN0OiBbUEFUQ0hdIEFjdCBhcyB0aGUgIm12IiBjb21tYW5kIHdoZW4gcm90YXRlIGxvZworCitBY3QgYXMgdGhlICJtdiIgY29tbWFuZCB3aGVuIHJvdGF0ZSBsb2csIGZpcnN0IHJlbmFtZSwgaWYgZmFpbGVkLCB0aGVuCityZWFkIGFuZCB3cml0ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLmMgfCAgIDcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLmMgYi9sb2dyb3RhdGUuYworaW5kZXggZDNkZWI2YS4uY2Y4YmYyYyAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS5jCisrKysgYi9sb2dyb3RhdGUuYworQEAgLTExNTcsNiArMTE1Nyw1MyBAQCBpbnQgZmluZE5lZWRSb3RhdGluZyhzdHJ1Y3QgbG9nSW5mbyAqbG9nLCBpbnQgbG9nTnVtLCBpbnQgZm9yY2UpCisgICAgIHJldHVybiAwOworIH0KKyAKKysvKiBBY3QgYXMgdGhlICJtdiIgY29tbWFuZCwgaWYgcmVuYW1lIGZhaWxlZCwgdGhlbiByZWFkIHRoZSBvbGQgZmlsZSBhbmQKKysgKiB3cml0ZSB0byBuZXcgZmlsZS4gVGhlIGZ1bmN0aW9uIHdoaWNoIGludm9rZXMgdGhlIG12RmlsZSB3aWxsIHVzZQorKyAqIHRoZSBzdHJlcnJvcihlcnJvcm5vKSB0byBoYW5kbGUgdGhlIGVycm9yIG1lc3NhZ2UsIHNvIHdlIGRvbid0IGhhdmUKKysgKiB0byBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBoZXJlICovCisrCisraW50IG12RmlsZSAoY2hhciAqb2xkTmFtZSwgY2hhciAqbmV3TmFtZSwgc3RydWN0IGxvZ0luZm8gKmxvZywgYWNsX3R5cGUgYWNsKQorK3sKKysgICAgc3RydWN0IHN0YXQgc2JwcmV2OworKyAgICBpbnQgZmRfb2xkLCBmZF9uZXcsIG47CisrICAgIGNoYXIgYnVmW0JVRlNJWl07CisrCisrICAgIC8qIERvIHRoZSByZW5hbWUgZmlyc3QgKi8KKysgICAgaWYgKCFyZW5hbWUob2xkTmFtZSwgbmV3TmFtZSkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgLyogSWYgdGhlIGVycm5vIGlzIEVYREVWLCB0aGVuIHJlYWQgb2xkIGZpbGUsIHdyaXRlIG5ld2ZpbGUgYW5kCisrICAgICAqIHJlbW92ZSB0aGUgb2xkZmlsZSAqLworKyAgICBpZiAoZXJybm8gPT0gRVhERVYpIHsKKysgICAgICAgIC8qIE9wZW4gdGhlIG9sZCBmaWxlIHRvIHJlYWQgKi8KKysgICAgICAgIGlmICgoZmRfb2xkID0gb3BlbihvbGROYW1lLCBPX1JET05MWSkpIDwgMCkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIC8qIENyZWF0ZSB0aGUgZmlsZSB0byB3cml0ZSwga2VlcCB0aGUgc2FtZSBhdHRyaWJ1dGUgYXMgdGhlIG9sZCBmaWxlICovCisrICAgICAgICBpZiAoc3RhdChvbGROYW1lLCAmc2JwcmV2KSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGlmICgoZmRfbmV3ID0gY3JlYXRlT3V0cHV0RmlsZShuZXdOYW1lLAorKyAgICAgICAgICAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAmc2JwcmV2LCBhY2wsIDApKSA8IDAgKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0KKysKKysgICAgICAgIC8qIFJlYWQgYW5kIHdyaXRlICovCisrICAgICAgICB3aGlsZSAoKG4gPSByZWFkKGZkX29sZCwgYnVmLCBCVUZTSVopKSA+IDApCisrICAgICAgICAgICAgaWYgKHdyaXRlKGZkX25ldywgYnVmLCBuKSAhPSBuKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIGlmICgoY2xvc2UoZmRfb2xkKSA8IDApIHx8CisrICAgICAgICAgICAgcmVtb3ZlTG9nRmlsZShvbGROYW1lLCBsb2cpIHx8CisrICAgICAgICAgICAgKGNsb3NlKGZkX25ldykgPCAwKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKyBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQkgICAgICAgc3RydWN0IGxvZ05hbWVzICpyb3ROYW1lcykKKyB7CitAQCAtMTUyMywxNSArMTU3MCwxNSBAQCBpbnQgcHJlcm90YXRlU2luZ2xlTG9nKHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBsb2dOdW0sIHN0cnVjdCBsb2dTdGF0ZSAqc3RhdGUsCisgCQl9CisgCisgCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsCistCQkgICAgInJlbmFtaW5nICVzIHRvICVzIChyb3RhdGVjb3VudCAlZCwgbG9nc3RhcnQgJWQsIGkgJWQpLCBcbiIsCisrCQkgICAgIm1vdmluZyAlcyB0byAlcyAocm90YXRlY291bnQgJWQsIGxvZ3N0YXJ0ICVkLCBpICVkKSwgXG4iLAorIAkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHJvdGF0ZUNvdW50LCBsb2dTdGFydCwgaSk7CisgCistCSAgICBpZiAoIWRlYnVnICYmIHJlbmFtZShvbGROYW1lLCBuZXdOYW1lKSkgeworKwkgICAgaWYgKCFkZWJ1ZyAmJiBtdkZpbGUob2xkTmFtZSwgbmV3TmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKyAJCSAgICBtZXNzYWdlKE1FU1NfREVCVUcsICJvbGQgbG9nICVzIGRvZXMgbm90IGV4aXN0XG4iLAorIAkJCSAgICBvbGROYW1lKTsKKyAJCX0gZWxzZSB7CistCQkgICAgbWVzc2FnZShNRVNTX0VSUk9SLCAiZXJyb3IgcmVuYW1pbmcgJXMgdG8gJXM6ICVzXG4iLAorKwkJICAgIG1lc3NhZ2UoTUVTU19FUlJPUiwgImVycm9yIG1vdmluZyAlcyB0byAlczogJXNcbiIsCisgCQkJICAgIG9sZE5hbWUsIG5ld05hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgCQkgICAgaGFzRXJyb3JzID0gMTsKKyAJCX0KK0BAIC0xNjY5LDIxICsxNzE2LDIxIEBAIGludCByb3RhdGVTaW5nbGVMb2coc3RydWN0IGxvZ0luZm8gKmxvZywgaW50IGxvZ051bSwgc3RydWN0IGxvZ1N0YXRlICpzdGF0ZSwKKyAJCQkJcmV0dXJuIDE7CisgCQkJfQorIAorLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXRtcEZpbGVuYW1lKTsKKy0JCQlpZiAoIWRlYnVnICYmICFoYXNFcnJvcnMgJiYgcmVuYW1lKGxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUpKSB7CistCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIHJlbmFtZSAlcyB0byAlczogJXNcbiIsCisrCQkJaWYgKCFkZWJ1ZyAmJiAhaGFzRXJyb3JzICYmIG12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJbWVzc2FnZShNRVNTX0VSUk9SLCAiZmFpbGVkIHRvIG1vdmUgJXMgdG8gJXM6ICVzXG4iLAorIAkJCQlsb2ctPmZpbGVzW2xvZ051bV0sIHRtcEZpbGVuYW1lLAorIAkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQloYXNFcnJvcnMgPSAxOworIAkJCX0KKyAJCX0KKyAJCWVsc2UgeworLQkJCW1lc3NhZ2UoTUVTU19ERUJVRywgInJlbmFtaW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisrCQkJbWVzc2FnZShNRVNTX0RFQlVHLCAibW92aW5nICVzIHRvICVzXG4iLCBsb2ctPmZpbGVzW2xvZ051bV0sCisgCQkJCXJvdE5hbWVzLT5maW5hbE5hbWUpOworIAkJCWlmICghZGVidWcgJiYgIWhhc0Vycm9ycyAmJgorLQkJCXJlbmFtZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUpKSB7CistCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byByZW5hbWUgJXMgdG8gJXM6ICVzXG4iLAorKwkJCW12RmlsZShsb2ctPmZpbGVzW2xvZ051bV0sIHJvdE5hbWVzLT5maW5hbE5hbWUsIGxvZywgcHJldl9hY2wpKSB7CisrCQkJCW1lc3NhZ2UoTUVTU19FUlJPUiwgImZhaWxlZCB0byBtb3ZlICVzIHRvICVzOiAlc1xuIiwKKyAJCQkJCWxvZy0+ZmlsZXNbbG9nTnVtXSwgdG1wRmlsZW5hbWUsCisgCQkJCQlzdHJlcnJvcihlcnJubykpOworIAkJCQkJaGFzRXJyb3JzID0gMTsKK0BAIC0yMDYzLDcgKzIxMTAsNyBAQCBpbnQgcm90YXRlTG9nU2V0KHN0cnVjdCBsb2dJbmZvICpsb2csIGludCBmb3JjZSkKKyAgICAgcmV0dXJuIGhhc0Vycm9yczsKKyB9CisgCistc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisrc3RhdGljIGludCB3cml0ZVN0YXRlKHN0cnVjdCBsb2dJbmZvICpsb2csIGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgeworIAlzdHJ1Y3QgbG9nU3RhdGUgKnA7CisgCUZJTEUgKmY7CitAQCAtMjIyNyw3ICsyMjc0LDcgQEAgc3RhdGljIGludCB3cml0ZVN0YXRlKGNoYXIgKnN0YXRlRmlsZW5hbWUpCisgCQlmY2xvc2UoZik7CisgCisgCWlmIChlcnJvciA9PSAwKSB7CistCQlpZiAocmVuYW1lKHRtcEZpbGVuYW1lLCBzdGF0ZUZpbGVuYW1lKSkgeworKwkJaWYgKG12RmlsZSh0bXBGaWxlbmFtZSwgc3RhdGVGaWxlbmFtZSwgbG9nLCBwcmV2X2FjbCkpIHsKKyAJCQl1bmxpbmsodG1wRmlsZW5hbWUpOworIAkJCWVycm9yID0gMTsKKyAJCQltZXNzYWdlKE1FU1NfRVJST1IsICJlcnJvciByZW5hbWluZyB0ZW1wIHN0YXRlIGZpbGUgJXNcbiIsCitAQCAtMjUyNSw3ICsyNTcyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorIAkJcmMgfD0gcm90YXRlTG9nU2V0KGxvZywgZm9yY2UpOworIAorIAlpZiAoIWRlYnVnKQorLQkJcmMgfD0gd3JpdGVTdGF0ZShzdGF0ZUZpbGUpOworKwkJcmMgfD0gd3JpdGVTdGF0ZShsb2csIHN0YXRlRmlsZSk7CisgCisgCXJldHVybiAocmMgIT0gMCk7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS9kaXNhYmxlLWNoZWNrLWRpZmZlcmVudC1maWxlc3lzdGVtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNkNzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGUvZGlzYWJsZS1jaGVjay1kaWZmZXJlbnQtZmlsZXN5c3RlbXMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRGlzYWJsZSB0aGUgY2hlY2sgZm9yIGRpZmZlcmVudCBmaWxlc3lzdGVtcworCitUaGUgbG9ncm90YXRlIHN1cHBvcnRzIHJvdGF0ZSBsb2cgYWNyb3NzIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBub3csIHNvCitkaXNhYmxlIHRoZSBjaGVjayBmb3IgZGlmZmVyZW50IGZpbGVzeXN0ZW1zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWcuYyB8ICAgIDkgLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWcuYyBiL2NvbmZpZy5jCitpbmRleCBkYmJmNTYzLi42NGU2NmY2IDEwMDY0NAorLS0tIGEvY29uZmlnLmMKKysrKyBiL2NvbmZpZy5jCitAQCAtMTQ5MywxNSArMTQ5Myw2IEBAIHN0YXRpYyBpbnQgcmVhZENvbmZpZ0ZpbGUoY29uc3QgY2hhciAqY29uZmlnRmlsZSwgc3RydWN0IGxvZ0luZm8gKmRlZkNvbmZpZykKKyAJCQkJCQkJZ290byBlcnJvcjsKKyAJCQkJCQl9CisgCQkJCQl9CistCistCQkJCQlpZiAoc2Iuc3RfZGV2ICE9IHNiMi5zdF9kZXYKKy0JCQkJCQkmJiAhKG5ld2xvZy0+ZmxhZ3MgJiAoTE9HX0ZMQUdfQ09QWVRSVU5DQVRFIHwgTE9HX0ZMQUdfQ09QWSB8IExPR19GTEFHX1RNUEZJTEVOQU1FKSkpIHsKKy0JCQkJCQltZXNzYWdlKE1FU1NfRVJST1IsCistCQkJCQkJCSIlczolZCBvbGRkaXIgJXMgYW5kIGxvZyBmaWxlICVzICIKKy0JCQkJCQkJImFyZSBvbiBkaWZmZXJlbnQgZGV2aWNlc1xuIiwgY29uZmlnRmlsZSwKKy0JCQkJCQkJbGluZU51bSwgbmV3bG9nLT5vbGREaXIsIG5ld2xvZy0+ZmlsZXNbaV0pOworLQkJCQkJCWdvdG8gZXJyb3I7CistCQkJCQl9CisgCQkJCX0KKyAJCQl9CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sb2dyb3RhdGUvbG9ncm90YXRlL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDAzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZS91cGRhdGUtdGhlLW1hbnVhbC5wYXRjaApAQCAtMCwwICsxLDM4IEBACitGcm9tIGUwYjBmZTMwZTljNDkyMzQ5OTRhMjBhODZhYWNmYWY4MGU2OTAwODcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTcgRmViIDIwMTUgMjE6MTQ6MzcgLTA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gVXBkYXRlIHRoZSBtYW51YWwKKworVXBkYXRlIHRoZSBtYW51YWwgZm9yIHJvdGF0aW5nIG9uIGRpZmZlcmVudCBmaWxlc3lzdGVtcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbG9ncm90YXRlLjggfCAgIDEwICsrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbG9ncm90YXRlLjggYi9sb2dyb3RhdGUuOAoraW5kZXggZTRlNWY0OC4uODQ0MDdkMCAxMDA2NDQKKy0tLSBhL2xvZ3JvdGF0ZS44CisrKysgYi9sb2dyb3RhdGUuOAorQEAgLTQwNSwxMiArNDA1LDEwIEBAIERvIG5vdCByb3RhdGUgdGhlIGxvZyBpZiBpdCBpcyBlbXB0eSAodGhpcyBvdmVycmlkZXMgdGhlIFxmQmlmZW1wdHlcZlIgb3B0aW9uKS4KKyAKKyAuVFAKKyBcZkJvbGRkaXIgXGZJZGlyZWN0b3J5XGZSCistTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSIG11c3QgYmUKKy1vbiB0aGUgc2FtZSBwaHlzaWNhbCBkZXZpY2UgYXMgdGhlIGxvZyBmaWxlIGJlaW5nIHJvdGF0ZWQsIHVubGVzcyBcZkJjb3B5XGZSLAorLVxmQmNvcHl0cnVuY2F0ZVxmUiBvciBcZkJyZW5hbWVjb3B5XGZSIG9wdGlvbiBpcyB1c2VkLiBUaGUgXGZJZGlyZWN0b3J5XGZSCistaXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlCistdW5sZXNzIGFuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwKKy1vbGQgdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiAgVGhpcyBvcHRpb24gbWF5IGJlCisrTG9ncyBhcmUgbW92ZWQgaW50byBcZklkaXJlY3RvcnlcZlIgZm9yIHJvdGF0aW9uLiBUaGUgXGZJZGlyZWN0b3J5XGZSCisraXMgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGxvZyBmaWxlIHVubGVzcworK2FuIGFic29sdXRlIHBhdGggbmFtZSBpcyBzcGVjaWZpZWQuIFdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCBhbGwgb2xkCisrdmVyc2lvbnMgb2YgdGhlIGxvZyBlbmQgdXAgaW4gXGZJZGlyZWN0b3J5XGZSLiBUaGlzIG9wdGlvbiBtYXkgYmUKKyBvdmVycmlkZGVuIGJ5IHRoZSBcZkJub29sZGRpclxmUiBvcHRpb24uCisgCisgLlRQCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbG9ncm90YXRlL2xvZ3JvdGF0ZV8zLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBhMTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xvZ3JvdGF0ZS9sb2dyb3RhdGVfMy45LjEuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJSb3RhdGVzLCBjb21wcmVzc2VzLCByZW1vdmVzIGFuZCBtYWlscyBzeXN0ZW0gbG9nIGZpbGVzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL2xvZ3JvdGF0ZS8iCitMSUNFTlNFID0gIkdQTHYyIgorCisjIFRPRE86IGxvZ3JvdGF0ZSAzLjguOCBhZGRzIGF1dG90b29scy9hdXRvbWFrZSBzdXBwb3J0LCB1cGRhdGUgcmVjaXBlIHRvIHVzZSBpdC4KKyMgVE9ETzogRG9jdW1lbnQgY29yZXV0aWxzIGRlcGVuZGVuY3kuIFdoeSBub3QgUkRFUEVORFM/IFdoeSBub3QgYnVzeWJveD8KKworREVQRU5EUz0iY29yZXV0aWxzIHBvcHQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitTUkNfVVJJID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9yZWxlYXNlcy9sL28vbG9ncm90YXRlL2xvZ3JvdGF0ZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWN0LWFzLW12LXdoZW4tcm90YXRlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VwZGF0ZS10aGUtbWFudWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtY2hlY2stZGlmZmVyZW50LWZpbGVzeXN0ZW1zLnBhdGNoIFwKKyAgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ0OTJiMTQ1YjZkNTQyZTRhMmY0MWU3N2ZhMTk5YWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAyMjc2OWUzMjg4YzgwOTgxNTU5YTg0MjE3MDNjODhlODQzOGI0NDcyMzVlMzZkZDNjOGU5N2NkOTRjNTI1NDUiCisKK1BBQ0tBR0VDT05GSUcgPz0gIlwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2FjbCcsICdhY2wnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3NlbGludXgnLCAnc2VsaW51eCcsICcnLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW2FjbF0gPSAiLCxhY2wiCitQQUNLQUdFQ09ORklHW3NlbGludXhdID0gIiwsbGlic2VsaW51eCIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke2xvY2Fsc3RhdGVkaXJ9L2xpYi9sb2dyb3RhdGUuc3RhdHVzIFwKKwkJICAgICR7c3lzY29uZmRpcn0vbG9ncm90YXRlLmNvbmYiCisKKyMgSWYgUlBNX09QVF9GTEFHUyBpcyB1bnNldCwgaXQgYWRkcyAtZyBpdHNlbGYgcmF0aGVyIHRoYW4gb2JleWluZyBvdXIKKyMgb3B0aW1pemF0aW9uIHZhcmlhYmxlcywgc28gdXNlIGl0IHJhdGhlciB0aGFuIEVYVFJBX0NGTEFHUy4KK0VYVFJBX09FTUFLRSA9ICJcCisgICAgTEZTPSBcCisgICAgT1NfTkFNRT0nJHtPU19OQU1FfScgXAorICAgICdDQz0ke0NDfScgXAorICAgICdSUE1fT1BUX0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdFWFRSQV9MREZMQUdTPSR7TERGTEFHU30nIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhY2wnLCAnV0lUSF9BQ0w9eWVzJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnc2VsaW51eCcsICdXSVRIX1NFTElOVVg9eWVzJywgJycsIGQpfSBcCisiCisKKyMgT1NfTkFNRSBpbiB0aGUgbWFrZWZpbGUgZGVmYXVsdHMgdG8gYHVuYW1lIC1zYC4gVGhlIGJlaGF2aW9yIGZvcgorIyBmcmVlYnNkL25ldGJzZCBpcyBxdWVzdGlvbmFibGUsIHNvIGxlYXZlIGl0IGFzIExpbnV4LCB3aGljaCBvbmx5IHNldHMKKyMgSU5TVEFMTD1pbnN0YWxsIGFuZCBCQVNFRElSPS91c3IuCitPU19OQU1FID0gIkxpbnV4IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitkb19pbnN0YWxsKCl7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSBQUkVGSVg9JHtEfSBNQU5ESVI9JHttYW5kaXJ9IEJJTkRJUj0ke2JpbmRpcn0KKyAgICBta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuZAorICAgIG1rZGlyIC1wICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkKKyAgICBta2RpciAtcCAke0R9JHtsb2NhbHN0YXRlZGlyfS9saWIKKyAgICBpbnN0YWxsIC1wIC1tIDY0NCBleGFtcGxlcy9sb2dyb3RhdGUtZGVmYXVsdCAke0R9JHtzeXNjb25mZGlyfS9sb2dyb3RhdGUuY29uZgorICAgIGluc3RhbGwgLXAgLW0gNzU1IGV4YW1wbGVzL2xvZ3JvdGF0ZS5jcm9uICR7RH0ke3N5c2NvbmZkaXJ9L2Nyb24uZGFpbHkvbG9ncm90YXRlCisgICAgdG91Y2ggJHtEfSR7bG9jYWxzdGF0ZWRpcn0vbGliL2xvZ3JvdGF0ZS5zdGF0dXMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvaW5pdC1mdW5jdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MxZGNlMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2luaXQtZnVuY3Rpb25zCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorCisjIExTQiBpbml0c2NyaXB0IGZ1bmN0aW9ucywgYXMgZGVmaW5lZCBpbiB0aGUgTFNCIFNwZWMgMS4xLjAKKyMKKyMgTGF3cmVuY2UgTGltIDxsbGltQGNvcmUuY29tPiAtIFR1ZSwgMjYgSnVuZSAyMDA3CisjIFVwZGF0ZWQgdG8gdGhlIGxhdGVzdCBMU0IgMy4xIHNwZWMKKyMgaHR0cDovL3JlZnNwZWNzLmZyZWVzdGFuZGFyZHMub3JnL0xTQl8zLjEuMC9MU0ItQ29yZS1nZW5lcmljL0xTQi1Db3JlLWdlbmVyaWNfbGluZXMudHh0CisKK3N0YXJ0X2RhZW1vbiAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2Jfc3RhcnRfZGFlbW9uICIkQCIKK30KKwora2lsbHByb2MgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2tpbGxwcm9jICIkQCIKK30KKworcGlkb2Zwcm9jICgpIHsKKwkvZXRjL2NvcmUtbHNiL2xzYl9waWRvZnByb2MgIiRAIgorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHN1Y2Nlc3MgIiRAIgorfQorCitsb2dfZmFpbHVyZV9tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIGZhaWx1cmUgIiRAIgorfQorCitsb2dfd2FybmluZ19tc2cgKCkgeworCS9ldGMvY29yZS1sc2IvbHNiX2xvZ19tZXNzYWdlIHdhcm5pbmcgIiRAIgorfQorCisjIGludCBsb2dfYmVnaW5fbWVzc2FnZSAoY2hhciAqbWVzc2FnZSkKK2xvZ19iZWdpbl9tc2cgKCkgeworCWlmIFsgLXogIiQxIiBdOyB0aGVuCisJCXJldHVybiAxCisJZmkKKwllY2hvICIgKiAkQCIKK30KKworCitsb2dfZW5kX21zZyAoKSB7CisJL2V0Yy9jb3JlLWxzYi9sc2JfbG9nX21lc3NhZ2UgZW5kICIkQCIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9raWxscHJvYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NjZjMWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX2tpbGxwcm9jCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK0xTQj1MU0ItMS4xIGtpbGxwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2JfbG9nX21lc3NhZ2UKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTAzNDNiMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9sb2dfbWVzc2FnZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworQUNUSU9OPSQxCitzaGlmdAorCitjYXNlICIkQUNUSU9OIiBpbgorICBzdWNjZXNzKQorICAJZWNobyAtbiAkKgorCXN1Y2Nlc3MgIiQqIgorCWVjaG8KKwk7OworICBmYWlsdXJlKQorICAJZWNobyAtbiAkKgorCWZhaWx1cmUgIiQqIgorCWVjaG8KKwk7OworICB3YXJuaW5nKQorICAJZWNobyAtbiAkKgorCXdhcm5pbmcgIiQqIgorCWVjaG8KKwk7OworICAqKQorICAJOzsKK2VzYWMKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3BpZG9mcHJvYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQxZmQwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiL2xzYl9waWRvZnByb2MKQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworcGlkb2Zwcm9jICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYi9sc2Jfc3RhcnRfZGFlbW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTYyYzIzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2IvbHNiX3N0YXJ0X2RhZW1vbgpAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKworLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworbmljZT0KK2ZvcmNlPQorcGlkZmlsZT0KK3VzZXI9CitjaGVjaz0KK1JFVFZBTD0KK3doaWxlIFsgIiQxIiAhPSAiJHsxIyNbLStdfSIgXTsgZG8KKwljYXNlICQxIGluCisJICAgICAtZikKKwkgICAgIAlmb3JjZT0iLS1mb3JjZSIKKwkJc2hpZnQKKwkJOzsKKwkgICAgIC1uKQorCSAgICAgCW5pY2U9JDIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXApCisJCXBpZGZpbGU9Ii0tcGlkZmlsZSAkMiIKKwkJc2hpZnQgMgorCQk7OworCSAgICAgLXUpCisJICAgICAgICB1c2VyPSItLXVzZXIgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgIC1jKQorCSAgICAgICAgY2hlY2s9Ii0tY2hlY2sgJDIiCisJCXNoaWZ0IDIKKwkJOzsKKwkgICAgICAqKSAgICAgCisgCQllY2hvICJVbmtub3duIE9wdGlvbiAkMSIKKyAJCWVjaG8gIk9wdGlvbnMgYXJlOiIKKyAJCWVjaG8gIi1mIiAKKwkJZWNobyAiLXAge3BpZGZpbGV9IgorCQllY2hvICItbiBbKy8tbmljZWxldmVsXSIKKwkJZWNobyAiLXUge3VzZXJ9IgorCQllY2hvICItYyB7YmFzZX0iCisJICAgICAgICBleGl0IDE7OwkKKwllc2FjCitkb25lCitMU0I9TFNCLTEuMSBkYWVtb24gJHtmb3JjZTotfSAke25pY2U6LX0gJHtwaWRmaWxlOi19ICR7dXNlcjotfSAke2NoZWNrOi19ICQqCitleGl0ICQ/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYl80LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNWI2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiXzQuMS5iYgpAQCAtMCwwICsxLDEyNyBAQAorU1VNTUFSWSA9ICJMU0Igc3VwcG9ydCBmb3IgT3BlbkVtYmVkZGVkIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9sc2IiCitMSUNFTlNFID0gIkdQTHYyKyIKK1BSID0gInIyIgorCitMU0JfQ09SRSA9ICJsc2ItY29yZS0ke1RBUkdFVF9BUkNIfSIKK0xTQl9DT1JFX3g4NiA9ICJsc2ItY29yZS1pYTMyIgorTFNCX0NPUkVfeDg2LTY0ID0gImxzYi1jb3JlLWFtZDY0IgorUlBST1ZJREVTXyR7UE59ICs9ICIke0xTQl9DT1JFfSIKKworIyBsc2JfcmVsZWFzZSBuZWVkcyBnZXRvcHQKK1JERVBFTkRTXyR7UE59ICs9ICIke1ZJUlRVQUwtUlVOVElNRV9nZXRvcHR9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9SRUFETUU7bWQ1PTEyZGE1NDRiMWEzYTVhMTc5NWEyMTE2MGI0OTQ3MWNmIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wcm9qZWN0L2xzYi9sc2JfcmVsZWFzZS8xLjQvbHNiLXJlbGVhc2UtMS40LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0LWZ1bmN0aW9ucyBcCisgICAgICAgICAgIGZpbGU6Ly9sc2Jfa2lsbHByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX2xvZ19tZXNzYWdlIFwKKyAgICAgICAgICAgZmlsZTovL2xzYl9waWRvZnByb2MgXAorICAgICAgICAgICBmaWxlOi8vbHNiX3N0YXJ0X2RhZW1vbiBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTM3ZWY1YTAxZTBjYTk0YjdiOGViNmEzNmJiMWU0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk5MzIxMjg4ZjhkNjJlN2ExZDQ4NWI3YzZiZGNjZjA2NzY2ZmI4Y2E2MDNjNjE5NTgwNmU0NDU3ZmRmMTcxNzIiCitTID0gIiR7V09SS0RJUn0vbHNiLXJlbGVhc2UtMS40IgorCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19pbnN0YWxsKCl7CisJb2VfcnVubWFrZSBpbnN0YWxsIHByZWZpeD0ke0R9ICBtYW5kaXI9JHtEfS8ke2RhdGFkaXJ9L21hbi8gREVTVERJUj0ke0R9CisKKwkjIHRoaXMgMiBkaXJzIGFyZSBuZWVkZWQgYnkgcGFja2FnZSBsc2ItZGlzdC1jaGVja2VyCisJbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vb3B0CisJbWtkaXIgLXAgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vb3B0CisKKwlta2RpciAtcCAke0R9JHtiYXNlX2JpbmRpcn0KKwlta2RpciAtcCAke0R9LyR7YmFzZWxpYn0KKwlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJcHJpbnRmICJMU0JfVkVSU0lPTj1cImNvcmUtNC4xLW5vYXJjaDoiID4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKworCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNTg2IiBdIHx8IFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJpNjg2IiBdO3RoZW4KKwkJcHJpbnRmICJjb3JlLTQuMS1pYTMyIiA+PiAgJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwllbHNlCisJCXByaW50ZiAiY29yZS00LjEtJHtUQVJHRVRfQVJDSH0iID4+ICAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWZpCisJZWNobyAiXCIiID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9JRD0ke0RJU1RST30iID4+ICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlCisJZWNobyAiRElTVFJJQl9SRUxFQVNFPSR7RElTVFJPX1ZFUlNJT059IiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCWlmIFsgLW4gIiR7RElTVFJPX0NPREVOQU1FfSIgXTsgdGhlbgorCQllY2hvICJESVNUUklCX0NPREVOQU1FPSR7RElTVFJPX0NPREVOQU1FfSIgPj4gJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UKKwlmaQorCWVjaG8gIkRJU1RSSUJfREVTQ1JJUFRJT049XCIke0RJU1RST19OQU1FfSAke0RJU1RST19WRVJTSU9OfVwiIiA+PiAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZQorCisJaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk1ODYiIF0gfHwgWyAiJHtUQVJHRVRfQVJDSH0iID0gImk2ODYiIF07dGhlbgorCQlta2RpciAtcCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZ3JhcGhpY3MtJHtQVn0tbm9hcmNoCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1pYTMyCisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1pYTMyCisJZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1hbWQ2NAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tYW1kNjQKKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1ub2FyY2gKKwkJdG91Y2ggJHtEfSR7c3lzY29uZmRpcn0vbHNiLXJlbGVhc2UuZC9ncmFwaGljcy0ke1BWfS1wcGMzMgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2Rlc2t0b3AtJHtQVn0tcHBjMzIKKwllbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LW5vYXJjaAorCQl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9sc2ItcmVsZWFzZS5kL2dyYXBoaWNzLSR7UFZ9LXBwYzY0CisJCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2xzYi1yZWxlYXNlLmQvZGVza3RvcC0ke1BWfS1wcGM2NAorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGZvciBpIGluIGxzYl9raWxscHJvYyBsc2JfbG9nX21lc3NhZ2UgbHNiX3BpZG9mcHJvYyBsc2Jfc3RhcnRfZGFlbW9uCisgICAgICAgZG8KKyAgICAgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vJHtpfSAke0R9JHtzeXNjb25mZGlyfS9jb3JlLWxzYgorICAgICAgIGRvbmUKKworICAgICAgIGluc3RhbGwgLWQgJHtEfS9saWIvbHNiCisgICAgICAgaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vaW5pdC1mdW5jdGlvbnMgJHtEfS9saWIvbHNiCisKKyAgICAgICAjIGNyZWF0IGxpbmtzIGZvciBMU0IgdGVzdAorICAgICAgIGluc3RhbGwgLWQgJHtEfS91c3IvbGliL2xzYgorICAgICAgIGxuIC1zZiAke3NiaW5kaXJ9L2Noa2NvbmZpZyAke0R9L3Vzci9saWIvbHNiL2luc3RhbGxfaW5pdGQKKyAgICAgICBsbiAtc2YgJHtzYmluZGlyfS9jaGtjb25maWcgJHtEfS91c3IvbGliL2xzYi9yZW1vdmVfaW5pdGQKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCSAgICAgICBjZCAke0R9CisgICAgICAgICAgICAgICBpZiBbICIke2Jhc2VsaWJ9IiAhPSAibGliNjQiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICBsbiAtc2YgJHtiYXNlbGlifSBsaWI2NAorICAgICAgICAgICAgICAgZmkKKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4yCisgICAgICAgICAgICAgICBsbiAtc2YgbGQtbGludXgteDg2LTY0LnNvLjIgbGQtbHNiLXg4Ni02NC5zby4zCisgICAgICAgZmkKKyAgICAgICBpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJICAgICAgIGNkICR7RH0vJHtiYXNlbGlifQorICAgICAgICAgICAgICAgbG4gLXNmIGxkLWxpbnV4LnNvLjIgbGQtbHNiLnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZC1saW51eC5zby4yIGxkLWxzYi5zby4zCisgICAgICAgZmkKKworICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorICAgICAgICAgICAgICAgY2QgJHtEfQorICAgICAgICAgICAgICAgaWYgWyAiJHtiYXNlbGlifSIgIT0gImxpYjY0IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgbG4gLXNmICR7YmFzZWxpYn0gbGliNjQKKyAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICBjZCAke0R9LyR7YmFzZWxpYn0KKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjIKKyAgICAgICAgICAgICAgIGxuIC1zZiBsZDY0LnNvLjEgbGQtbHNiLXBwYzY0LnNvLjMKKyAgICAgICBmaQorICAgICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdO3RoZW4KKwkgICAgICAgY2QgJHtEfS8ke2Jhc2VsaWJ9CisgICAgICAgICAgICAgICBsbiAtc2YgbGQuc28uMSBsZC1sc2ItcHBjMzIuc28uMgorICAgICAgICAgICAgICAgbG4gLXNmIGxkLnNvLjEgbGQtbHNiLXBwYzMyLnNvLjMKKyAgICAgICBmaQorfQorRklMRVNfJHtQTn0gKz0gIi9saWI2NCBcCisgICAgICAgICAgICAgICAgL3Vzci9saWIvbHNiIFwKKyAgICAgICAgICAgICAgICAke2Jhc2VfbGliZGlyfS9sc2IvKiBcCisgICAgICAgICAgICAgICAgL2xpYi9sc2IvKiBcCisgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvMDAwMS1mdW5jdGlvbnMtYXZvaWQtZXhpdC0xLXdoaWNoLWNhdXNlcy1pbml0LXNjcmlwdHMtdG8tLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MDljOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU3ViamVjdDogZnVuY3Rpb25zOiBhdm9pZCBleGl0IDEgd2hpY2ggY2F1c2VzIGluaXQgc2NyaXB0cyB0byBmYWlsCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHJjLmQvaW5pdC5kL2Z1bmN0aW9ucyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyBiL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworaW5kZXggNjg1MDA0Ni4uMTEyMjNmNyAxMDA2NDQKKy0tLSBhL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGIvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtNTk3LDUgKzU5Nyw1IEBAIGlmIFsgIiRfdXNlX3N5c3RlbWN0bCIgPSAiMSIgXTsgdGhlbgorIAlmaQorIGZpCisgCistc3Ryc3RyICIkKGNhdCAvcHJvYy9jbWRsaW5lKSIgInJjLmRlYnVnIiAmJiBzZXQgLXgKKytzdHJzdHIgIiQoY2F0IC9wcm9jL2NtZGxpbmUpIiAicmMuZGVidWciICYmIHNldCAteCB8fCB0cnVlCisgCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2Jpbml0c2NyaXB0cy9mdW5jdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1NmQwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHMvZnVuY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gaW5pdHNjcmlwdHMtOS40My5vcmlnL3JjLmQvaW5pdC5kL2Z1bmN0aW9ucworKysrIGluaXRzY3JpcHRzLTkuNDMvcmMuZC9pbml0LmQvZnVuY3Rpb25zCitAQCAtMTMsNiArMTMsNyBAQCB1bWFzayAwMjIKKyBQQVRIPSIvc2JpbjovdXNyL3NiaW46L2JpbjovdXNyL2JpbiIKKyBleHBvcnQgUEFUSAorIAorKworIGlmIFsgJFBQSUQgLW5lIDEgLWEgLXogIiRTWVNURU1DVExfU0tJUF9SRURJUkVDVCIgXSAmJiBcCisgCQkoIC9iaW4vbW91bnRwb2ludCAtcSAvY2dyb3VwL3N5c3RlbWQgfHwgL2Jpbi9tb3VudHBvaW50IC1xIC9zeXMvZnMvY2dyb3VwL3N5c3RlbWQgKSA7IHRoZW4KKyAgICAgICAgIGNhc2UgIiQwIiBpbgorQEAgLTU0LDcgKzU1LDcgQEAgc3lzdGVtY3RsX3JlZGlyZWN0ICgpIHsKKyBbIC16ICIke0NPTFVNTlM6LX0iIF0gJiYgQ09MVU1OUz04MAorIAorIGlmIFsgLXogIiR7Q09OU09MRVRZUEU6LX0iIF07IHRoZW4KKy0gIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIF07IHRoZW4KKysgIGlmIFsgLWMgIi9kZXYvc3RkZXJyIiAtYSAtciAiL2Rldi9zdGRlcnIiIC1hIC1lIC9zYmluL2NvbnNvbGV0eXBlIF07IHRoZW4KKyAgICAgQ09OU09MRVRZUEU9IiQoL3NiaW4vY29uc29sZXR5cGUgPCAvZGV2L3N0ZGVyciAyPi9kZXYvbnVsbCkiCisgICBlbHNlCisgICAgIENPTlNPTEVUWVBFPSJzZXJpYWwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYmluaXRzY3JpcHRzXzkuNjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiNjY3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNiaW5pdHNjcmlwdHNfOS42NC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlN5c1YgaW5pdCBzY3JpcHRzIHdoaWNoIGFyZSBvbmx5IHVzZWQgaW4gYW4gTFNCIGltYWdlIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0RFUEVORFMgPSAicG9wdCBnbGliLTIuMCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWJmNGU4YjQ5NzgwYWIxODdkNTFiZDI2YWFhMDIyYzYiCisKK1M9IiR7V09SS0RJUn0vaW5pdHNjcmlwdHMtJHtQVn0iCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy9pbml0c2NyaXB0cy9pbml0c2NyaXB0cy0ke1BWfS50YXIuYnoyLzljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlL2luaXRzY3JpcHRzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vZnVuY3Rpb25zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZnVuY3Rpb25zLWF2b2lkLWV4aXQtMS13aGljaC1jYXVzZXMtaW5pdC1zY3JpcHRzLXRvLS5wYXRjaCBcCisgICAgICAgICAgIiAKKworU1JDX1VSSVttZDVzdW1dID0gIjljY2UyYWUxMDA5NzUwZTg0YmUzN2MwOWEwMjg3NTdlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ4YjU5Y2U4MTU3Y2ZjNThiYmQ0YjFkZmE1OGFkMTA4NzI0NTc2MWFlMTFjMjAzM2I2NmFlMzg2NGVhN2UxY2YiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCitBTFRFUk5BVElWRV8ke1BOfSA9ICJmdW5jdGlvbnMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZnVuY3Rpb25zXSA9ICIke3N5c2NvbmZkaXJ9L2luaXQuZC9mdW5jdGlvbnMiCisKKyMgU2luY2Ugd2UgYXJlIG9ubHkgdGFraW5nIHRoZSBwYXRjaGVkIHZlcnNpb24gb2YgZnVuY3Rpb25zLCBubyBuZWVkIHRvCisjIGNvbmZpZ3VyZSBvciBjb21waWxlIGFueXRoaW5nIHNvIGRvIG5vdCBleGVjdXRlIHRoZXNlCitkb19jb25maWd1cmVbbm9leGVjXSA9ICIxIiAKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIiAKKworZG9faW5zdGFsbCgpeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDY0NCAke1N9L3JjLmQvaW5pdC5kL2Z1bmN0aW9ucyAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvZnVuY3Rpb25zCisJc2VkIC1pICdzLCR7YmFzZV9iaW5kaXJ9L21vdW50cG9pbnQsJHtiaW5kaXJ9L21vdW50cG9pbnQsZycgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL2Z1bmN0aW9ucworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L0xTQl9UZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTcxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvTFNCX1Rlc3Quc2gKQEAgLTAsMCArMSw1MjYgQEAKKyMhL2Jpbi9zaAorCisjIENvcHlyaWdodCAoQykgMjAxMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisjIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworCitXT1JLX0RJUj0iL29wdC9sc2ItdGVzdCIKKworaWYgWyBgaWQgLXVgIC1uZSAwIF0KK3RoZW4KKwljYXQgPDwgRU9GCisJSW4gb3JkZXIgdG8gaW5zdGFsbCBhbmQgcnVuIExTQiB0ZXN0c3VpdGUsIHlvdSBuZWVkIGFkbWluaXN0cmF0b3IgcHJpdmlsZWdlcy4KKwlZb3UgYXJlIGN1cnJlbnRseSBydW5uaW5nIHRoaXMgc2NyaXB0IGFzIGFuIHVucHJpdmlsZWdlZCB1c2VyLgorCitFT0YKKwlleGl0IDEKK2ZpCisKK0FSQ0g9YHVuYW1lIC1tYAoraWYgWyAke0FSQ0h9ICE9ICJpNjg2IiBdICYmIFsgJHtBUkNIfSAhPSAieDg2XzY0IiBdICYmIFsgJHtBUkNIfSAhPSAicHBjIiBdICYmIFsgJHtBUkNIfSAhPSAicHBjNjQiIF0KK3RoZW4KKwllY2hvICJFcnJvcjogVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlIgorCWV4aXQgMQorZmkKKword2hpY2ggcnBtCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwllY2hvICJObyBycG0gY29tbWFuZCBmb3VuZCIKKwlleGl0IDEKK2ZpCisKK1JFVD0wCisKK2NkICR7V09SS19ESVJ9IHx8IGV4aXQgMQorIyBTdGVwIDE6IERvd25sb2FkIHRoZSBMU0IgUGFja2FnZXMKK2VjaG8gIiIKK2VjaG8gIkRvd25sb2FkIExTQiBwYWNrYWdlcy4uLiIKK2VjaG8gIiIKKworaWYgWyAhIC1lIC4vcGFja2FnZXNfbGlzdCBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHBhY2thZ2VzIGxpc3QiID4mMgorCWV4aXQgMQorZmkKKworLiAuL3BhY2thZ2VzX2xpc3QKKworUEFDS0FHRVNfRElSPSIvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3BhY2thZ2VzL2Z0cC5saW51eGZvdW5kYXRpb24ub3JnL3B1Yi9sc2IiCisKK0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYmFzZS8ke0xTQl9SRUxFQVNFfS9iaW5hcnkiCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vdGVzdF9zdWl0ZXMvcmVsZWFzZWQtYWxsL2JpbmFyeS9ydW50aW1lIgorUlVOVElNRV9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK0FQUF9QQUNLQUdFU19ESVI9IiR7UEFDS0FHRVNfRElSfS9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK0FQUF9URVNURklMRVNfRElSPSIke1BBQ0tBR0VTX0RJUn0vYXBwLWJhdHRlcnkvdGVzdHMiCitTTkFQU0hPVFNfVEVTVEZJTEVTX0RJUj0iJHtQQUNLQUdFU19ESVJ9L3NuYXBzaG90cy9hcHBiYXQvdGVzdHMiCisKK2lmIFsgISAtZCAke1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0JBU0VfUEFDS0FHRVNfRElSfQorZmkKKworaWYgWyAhIC1kICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke1JVTlRJTUVfUEFDS0FHRVNfRElSfSBdCit0aGVuCisJbWtkaXIgLXAgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZpCisKK2lmIFsgISAtZCAke0FQUF9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke0FQUF9QQUNLQUdFU19ESVJ9CitmaQorCitpZiBbICEgLWQgJHtBUFBfVEVTVEZJTEVTX0RJUn0gXQordGhlbgorCW1rZGlyIC1wICR7QVBQX1RFU1RGSUxFU19ESVJ9CitmaQorCisjIE9mZmljaWFsIGRvd25sb2FkIHNlcnZlciBsaXN0LiBZb3UgY2FuIHJlcGxhY2UgdGhlbSB3aXRoIHlvdXIgb3duIHNlcnZlci4KK1NFUlZFUl9JUEFERFI9IjE0MC4yMTEuMTY5LjIzIgorU0VSVkVSX05BTUU9ImZ0cC5saW51eGZvdW5kYXRpb24ub3JnIgorCitpZiAhIGBncmVwIC1GIC1xICIke1NFUlZFUl9OQU1FfSIgL2V0Yy9ob3N0c2A7IHRoZW4KKwllY2hvICIke1NFUlZFUl9JUEFERFJ9CSR7U0VSVkVSX05BTUV9CSR7U0VSVkVSX05BTUV9IiA+PiAvZXRjL2hvc3RzCitmaQorCisjcGluZyAtYyA1ICR7U0VSVkVSX05BTUV9CisjaWYgWyAkPyAtbmUgMCBdCisjdGhlbgorIwllY2hvICJUaGUgc2VydmVyOiAke1NFUlZFUl9OQU1FfSBpcyB1bnJlYWNoYWJsZSIKKyMJZXhpdCAxCisjZmkKKworU0VSVkVSMT0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL2Jhc2UvJHtMU0JfUkVMRUFTRX0vYmluYXJ5IgorU0VSVkVSMj0iXAorCWh0dHA6Ly8ke1NFUlZFUl9OQU1FfS9wdWIvbHNiL3Rlc3Rfc3VpdGVzL3JlbGVhc2VkLWFsbC9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjM9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi90ZXN0X3N1aXRlcy8ke0xTQl9SRUxFQVNFfS9iaW5hcnkvcnVudGltZSIKK1NFUlZFUjQ9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS8ke0xTQl9SRUxFQVNFfS8ke0xTQl9BUkNIfSIKK1NFUlZFUjU9IlwKKwlodHRwOi8vJHtTRVJWRVJfTkFNRX0vcHViL2xzYi9hcHAtYmF0dGVyeS90ZXN0cyIKKworIyBXZSB1c2luZyAiY3VybCIgYXMgYSBkb3dubG9hZCB0b29sLCAid2dldCIgaXMgYW4gYWx0ZXJuYXRpdmUuCitDVVJMPWB3aGljaCBjdXJsYAorV0dFVD1gd2hpY2ggd2dldGAKK2lmIFsgISAteiAke0NVUkx9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7Q1VSTH0gLVIgLUwgLWYgLS1yZXRyeSAzIC0tcmV0cnktZGVsYXkgNCAtLWNvbm5lY3QtdGltZW91dCAxODAgLS1jb21wcmVzc2VkIC1DIC0gLW8iCitlbGlmIFsgISAteiAke1dHRVR9IF0KK3RoZW4KKwlET1dOTE9BRF9DTUQ9IiR7V0dFVH0gLWMgLXQgNSAtTyIKK2Vsc2UKKwllY2hvICJDYW4gbm90IGZpbmQgYSBkb3dubG9hZCB0b29sLCBwbGVhc2UgaW5zdGFsbCBjdXJsIG9yIHdnZXQuIgorCWV4aXQgMQorZmkKKworY2QgJHtCQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjF9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7UlVOVElNRV9CQVNFX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSMn0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtSVU5USU1FX1BBQ0tBR0VTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjN9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2NkICR7QVBQX1BBQ0tBR0VTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfUEFDS0FHRVNfTElTVH07IGRvCisJaWYgWyAhIC1mICR7cGtnfSBdCisJdGhlbgorCQkjJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9ID4gL2Rldi9udWxsIDI+JjEKKwkJJHtET1dOTE9BRF9DTUR9ICR7cGtnfSIuI3BhcnQiICR7U0VSVkVSNH0vJHtwa2d9CisJCWlmIFsgJD8gLWVxIDAgXQorCQl0aGVuCisJCQltdiAtZiAke3BrZ30iLiNwYXJ0IiAke3BrZ30KKwkJCWVjaG8gIkRvd25sb2FkICR7cGtnfSBzdWNjZXNzZnVsbHkuIgorCQllbHNlCisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gZmFpbGVkLiIKKwkJCVJFVD0xCisJCWZpCisJZmkKK2RvbmUKKworY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KK2ZvciBwa2cgaW4gJHtBUFBfVEVTVEZJTEVTX0xJU1R9OyBkbworCWlmIFsgISAtZiAke3BrZ30gXQorCXRoZW4KKwkJIyR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfSA+IC9kZXYvbnVsbCAyPiYxCisJCSR7RE9XTkxPQURfQ01EfSAke3BrZ30iLiNwYXJ0IiAke1NFUlZFUjV9LyR7cGtnfQorCQlpZiBbICQ/IC1lcSAwIF0KKwkJdGhlbgorCQkJbXYgLWYgJHtwa2d9Ii4jcGFydCIgJHtwa2d9CisJCQllY2hvICJEb3dubG9hZCAke3BrZ30gc3VjY2Vzc2Z1bGx5LiIKKwkJZWxzZQorCQkJZWNobyAiRG93bmxvYWQgJHtwa2d9IGZhaWxlZC4iCisJCQlSRVQ9MQorCQlmaQorCWZpCitkb25lCisKK2lmIFsgJHtSRVR9IC1uZSAwIF0KK3RoZW4KKwllY2hvICJEb3dubG9hZCBzb21lIHBhY2thZ2VzIGZhaWxlZC4gUGxlYXNlIGRvd25sb2FkIHRoZW0gYWdhaW4uIgorCWV4aXQgMQorZmkKKworIyBTdGVwIDI6IEluc3RhbGwgdGhlIExTQiBQYWNrYWdlcworZWNobyAiIgorZWNobyAiSW5zdGFsbCBMU0IgcGFja2FnZXMuLi4iCitlY2hvICIiCisKKyMgS2lsbCBsaWdodHRwZAorcHMgYXV4IHwgZ3JlcCAibGlnaHR0cGQiIHwgZ3JlcCAtdiAtcSAiZ3JlcCIKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWtpbGxhbGwgbGlnaHR0cGQgPi9kZXYvbnVsbCAyPiYxCitmaQorCisjIFN0YXJ0IGF2YWhpLWRhZW1vbgorcHMgYXV4IHwgZ3JlcCAiYXZhaGktZGFlbW9uIiB8IGdyZXAgLXYgLXEgImdyZXAiCitpZiBbICQ/IC1uZSAwIF0KK3RoZW4KKwkvZXRjL2luaXQuZC9hdmFoaS1kYWVtb24gc3RhcnQgPi9kZXYvbnVsbCAyPiYxCitmaQorCitMU0JfU1RBUlRfQ01EPSIvb3B0L2xzYi90ZXN0L21hbmFnZXIvYmluL2Rpc3QtY2hlY2tlci1zdGFydC5wbCIKK0xTQl9TVE9QX0NNRD0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL2Jpbi9kaXN0LWNoZWNrZXItc3RvcC5wbCIKKworUExBVEZPUk1fRklMRT0iL2V0Yy9ycG0vcGxhdGZvcm0iCisKK1JQTV9JTlNUQUxMX0NNRD0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2lnbmF0dXJlIC1pIgorUlBNX0lOU1RBTExfQ01EX05PU0NSSVBUUz0icnBtIC0tcXVpZXQgLS1ub2RlcHMgLS1yZXBsYWNlcGtncyAtLW5vc2NyaXB0cyAtLW5vc2lnbmF0dXJlIC1pIgorCisjIElmIHRoZSBsc2IgaGFzIGJlZW4gc3RhcnRlZCwgc3RvcCBpdCBmaXJzdC4KK2lmIFsgLXggJHtMU0JfU1RPUF9DTUR9IF0KK3RoZW4KKwkke0xTQl9TVE9QX0NNRH0KK2ZpCisKK2lmIFsgISAtZCAvZXRjL3JwbSBdCit0aGVuCisJbWtkaXIgLXAgL2V0Yy9ycG0KK2ZpCisKK2lmIFsgISAtZiAke1BMQVRGT1JNX0ZJTEV9IF0KK3RoZW4KKwl0b3VjaCAke1BMQVRGT1JNX0ZJTEV9CitmaQorCitpZiAhIGBncmVwIC1GIC1xICJub2FyY2gtc3VzZSIgJHtQTEFURk9STV9GSUxFfWA7IHRoZW4KKwlpZiBbICR7QVJDSH0gPSBpNjg2IF07dGhlbgorCQllY2hvICJpNDg2LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWVsaWYgWyAke0FSQ0h9ID0geDg2XzY0IF07IHRoZW4KKwkJZWNobyAiaTQ4Ni1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtbm9hcmNoIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gImk0ODYtcGMiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiaTQ4Ni0uKi1saW51eC4qIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIm5vYXJjaC1zdXNlIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJCWVjaG8gIiR7QVJDSH0tc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LW5vYXJjaCIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICIke0FSQ0h9LXBjIiA+PiAke1BMQVRGT1JNX0ZJTEV9CisJZWxzZQorCQllY2hvICIke0FSQ0h9LXN1c2UiID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1ub2FyY2giID4+ICR7UExBVEZPUk1fRklMRX0KKwkJZWNobyAiJHtBUkNIfS1wYyIgPj4gJHtQTEFURk9STV9GSUxFfQorCQllY2hvICJub2FyY2gtc3VzZSIgPj4gJHtQTEFURk9STV9GSUxFfQorCWZpCitmaQorCitpZiBbIC1kICR7QkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke0JBU0VfUEFDS0FHRVNfRElSfQorCWZvciBwa2cgaW4gJHtCQVNFX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKwkJCSRSUE1fSU5TVEFMTF9DTUQgJHtwa2d9CisJCWZpCisJZG9uZQorZmkKKworaWYgWyAtZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9IF0KK3RoZW4KKwljZCAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfQkFTRV9QQUNLQUdFU19MSVNUfQorCWRvCisJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkkUlBNX0lOU1RBTExfQ01EICR7cGtnfQorCQlmaQorCWRvbmUKK2ZpCisKK2lmIFsgLWQgJHtSVU5USU1FX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7UlVOVElNRV9QQUNLQUdFU19ESVJ9CisJZm9yIHBrZyBpbiAke1JVTlRJTUVfUEFDS0FHRVNfTElTVH0KKwlkbworCQlycG0gLS1xdWlldCAtcSAke3BrZyVcLip9CisJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJZmkKKwlkb25lCitmaQorCitpZiBbIC1kICR7QVBQX1BBQ0tBR0VTX0RJUn0gXQordGhlbgorCWNkICR7QVBQX1BBQ0tBR0VTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1BBQ0tBR0VTX0xJU1R9CisJZG8KKwkJZWNobyAiJHtwa2d9IiB8IGdyZXAgLXEgImFwYWNoZVx8eHBkZiIKKwkJaWYgWyAkPyAtZXEgMCBdCisJCXRoZW4KKwkJCXJwbSAtLXF1aWV0IC1xICR7cGtnJVwuKn0KKwkJCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQkJCSRSUE1fSU5TVEFMTF9DTURfTk9TQ1JJUFRTICR7cGtnfQorCQkJZmkKKwkJZWxzZQorCQkJcnBtIC0tcXVpZXQgLXEgJHtwa2clXC4qfQorCQkJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJCQkJJFJQTV9JTlNUQUxMX0NNRCAke3BrZ30KKwkJCWZpCisJCWZpCisJZG9uZQorZmkKKworaWYgWyAhIC1kICR7U05BUFNIT1RTX1RFU1RGSUxFU19ESVJ9IF0KK3RoZW4KKwlta2RpciAtcCAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorZmkKKworaWYgWyAtZCAke0FQUF9URVNURklMRVNfRElSfSBdCit0aGVuCisJY2QgJHtBUFBfVEVTVEZJTEVTX0RJUn0KKwlmb3IgcGtnIGluICR7QVBQX1RFU1RGSUxFU19MSVNUfQorCWRvCisJCWNwIC1mICR7cGtnfSAke1NOQVBTSE9UU19URVNURklMRVNfRElSfQorCWRvbmUKK2ZpCisKK2NkICR7V09SS19ESVJ9CisKKyMgU3RlcCAzOiBTZXQgZW52aXJvbm1lbnQKK2VjaG8gIiIKK2VjaG8gIlNldCBlbnZpcm9ubWVudC4uLiIKK2VjaG8gIiIKKworY2hlY2sgKCkKK3sKKwlpZiBbICQ/IC1lcSAwIF0KKwl0aGVuCisJCWVjaG8gIlBBU1MiCisJZWxzZSAKKwkJZWNobyAiRkFJTCIKKwkJZXhpdCAxCisJZmkKK30KKworZWNobyAiIgorZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiQ3JlYXRlIHRoZSBEaXJuYW1lcyBvbiB0YXJnZXQiCisKK2lmIFsgISAtZCAvZXRjL3JwbS9zeXNpbmZvIF0KK3RoZW4KKwlta2RpciAtcCAvZXRjL3JwbS9zeXNpbmZvCitmaQorCitjYXQgPiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIDw8IEVPRgorL2V0Yy9vcHQvbHNiCisvaG9tZS90ZXQvTFNCLnRvb2xzCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL2tzaAorL29wdC9sc2ItdGV0My1saXRlL2xpYi9wZXJsCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3Bvc2l4X3NoCisvb3B0L2xzYi10ZXQzLWxpdGUvbGliL3RldDMKKy9vcHQvbHNiLXRldDMtbGl0ZS9saWIveHBnM3NoCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsCisvb3B0L2xzYi9hcHBiYXQvbGliL3B5dGhvbjIuNC9zaXRlLXBhY2thZ2VzL3FtL2V4dGVybmFsL0RvY3VtZW50VGVtcGxhdGUKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdAorL29wdC9sc2IvYXBwYmF0L2xpYi9weXRob24yLjQvc2l0ZS1wYWNrYWdlcy9xbS90ZXN0L2NsYXNzZXMKKy9vcHQvbHNiL2FwcGJhdC9saWIvcHl0aG9uMi40L3NpdGUtcGFja2FnZXMvcW0vdGVzdC93ZWIKKy9vcHQvbHNiL3Rlc3QvZG9jCisvb3B0L2xzYi90ZXN0L2xpYgorL29wdC9sc2IvdGVzdC9xbS9kaWFnbm9zdGljcworL29wdC9sc2IvdGVzdC9xbS9kb2MKKy9vcHQvbHNiL3Rlc3QvcW0vZG9jL3Rlc3QvaHRtbAorL29wdC9sc2IvdGVzdC9xbS9kb2MvdGVzdC9wcmludAorL29wdC9sc2IvdGVzdC9xbS9kdG1sCisvb3B0L2xzYi90ZXN0L3FtL2R0bWwvdGVzdAorL29wdC9sc2IvdGVzdC9xbS9tZXNzYWdlcy90ZXN0Cisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiCisvb3B0L2xzYi90ZXN0L3FtL3R1dG9yaWFsL3Rlc3QvdGRiL1FNVGVzdAorL29wdC9sc2IvdGVzdC9xbS93ZWIKKy9vcHQvbHNiL3Rlc3QvcW0vd2ViL2ltYWdlcworL29wdC9sc2IvdGVzdC9xbS93ZWIvc3R5bGVzaGVldHMKKy9vcHQvbHNiL3Rlc3QvcW0veG1sCisvb3B0L2xzYi90ZXN0L3NoYXJlCisvdXNyL3NoYXJlL2RvYy9sc2ItcnVudGltZS10ZXN0CisvdmFyL29wdC9sc2IKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2ZvbnRjb25maWcKKy9vcHQvbHNiL3Rlc3QvZGVza3RvcC9mcmVldHlwZQorL29wdC9sc2IvdGVzdC9kZXNrdG9wL2d0a3Z0cworL29wdC9sc2IvdGVzdC9kZXNrdG9wL2xpYnBuZworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3F0MworL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hmdAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3htbAorL29wdC9sc2IvdGVzdC9kZXNrdG9wL3hyZW5kZXIKKworCitFT0YKKworaWYgWyAtZiAvZXRjL3JwbS9zeXNpbmZvL0Rpcm5hbWVzIF0KK3RoZW4KKwllY2hvICJTdWNjZXNzIHRvIGNyZWF0IERpcm5hbWVzIGZpbGUiCitlbHNlIAorCWVjaG8gIkZhaWwgdG8gY3JlYXQgRGlybmFtZXMgZmlsZSIKK2ZpCisKK1sgLXggL3NiaW4vbGRjb25maWcgXSAmJiB7CitlY2hvICIiCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitlY2hvICJVcGRhdGUgY2FjaGUiCisvc2Jpbi9sZGNvbmZpZworY2hlY2s7Cit9CisKKyMgQ2hlY2sgbG9vcCBkZXZpY2UKK2lmIFsgISAtYiAvZGV2L2xvb3AwIF0KK3RoZW4KKwlpbnNtb2QgL2xpYi9tb2R1bGVzL2B1bmFtZSAtcmAva2VybmVsL2RyaXZlcnMvYmxvY2svbG9vcC5rbworCWlmIFsgJD8gIT0gMCBdO3RoZW4KKwkJZWNobyAiSW5zbW9kIGxvb3Aua28gZmFpbGVkLiIKKwlmaQorZmkKKworIyBSZXNvbHZlIGxvY2FsaG9zdAorTE9DQUxIT1NUPWBob3N0bmFtZWAKK2lmICEgYGdyZXAgLUYgLXEgIiRMT0NBTEhPU1QiIC9ldGMvaG9zdHNgOyB0aGVuCisJZWNobyAiMTI3LjAuMC4xCSRMT0NBTEhPU1QiID4+IC9ldGMvaG9zdHMKK2ZpCisKKyMgV29ya2Fyb3VuZCB0byBhZGQgcGFydCBvZiBsb2NhbGVzIGZvciBMU0IgdGVzdAorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIElTTy04ODU5LTEgZGVfREUKK2xvY2FsZWRlZiAtaSBkZV9ERSAtZiBJU08tODg1OS0xNSBkZV9ERS5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGRlX0RFIC1mIFVURi04IGRlX0RFLlVURi04Citsb2NhbGVkZWYgLWkgZGVfREVAZXVybyAtZiBJU08tODg1OS0xNSBkZV9ERUBldXJvCitsb2NhbGVkZWYgLWkgZW5fSEsgLWYgSVNPLTg4NTktMSBlbl9ISworbG9jYWxlZGVmIC1pIGVuX1BIIC1mIElTTy04ODU5LTEgZW5fUEgKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBJU08tODg1OS0xNSBlbl9VUy5JU08tODg1OS0xNQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPLTg4NTktMQorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMKK2xvY2FsZWRlZiAtaSBlbl9VUyAtZiBVVEYtOCBlbl9VUy5VVEYtOAorbG9jYWxlZGVmIC1pIGVuX1VTIC1mIElTTy04ODU5LTEgZW5fVVMuSVNPODg1OS0xCitsb2NhbGVkZWYgLWkgZXNfTVggLWYgSVNPLTg4NTktMSBlc19NWAorbG9jYWxlZGVmIC1pIGZyX0ZSIC1mIElTTy04ODU5LTEgZnJfRlIKK2xvY2FsZWRlZiAtaSBpdF9JVCAtZiBJU08tODg1OS0xIGl0X0lUCitsb2NhbGVkZWYgLWkgamFfSlAgLWYgRVVDLUpQIGphX0pQLmV1Y2pwCitsb2NhbGVkZWYgLWkgc2VfTk8gLWYgVVRGLTggc2VfTk8uVVRGLTgKK2xvY2FsZWRlZiAtaSB0YV9JTiAtZiBVVEYtOCB0YV9JTgorbG9jYWxlZGVmIC1pIGVzX0VTIC1mIElTTy04ODU5LTEgZXNfRVMKK2xvY2FsZWRlZiAtaSBmcl9GUkBldXJvIC1mIElTTy04ODU5LTEgZnJfRlJAZXVybworbG9jYWxlZGVmIC1pIGlzX0lTIC1mIFVURi04IGlzX0lTLlVURi04Citsb2NhbGVkZWYgLWkgemhfVFcgLWYgQklHNSB6aF9UVy5CSUc1Citsb2NhbGVkZWYgLWkgZW5fVVMgLWYgSVNPLTg4NTktMTUgZW5fVVMuSVNPLTg4NTktMTUKKworZWNobyAiIgorZWNobyAiSW5zdGFsbGF0aW9uIGRvbmUhIgorZWNobyAiIgorCisjIFN0ZXAgNDogU3RhcnQgTFNCIHRlc3QKK2lmIFsgLXggJHtMU0JfU1RBUlRfQ01EfSBdCit0aGVuCisJJHtMU0JfU1RBUlRfQ01EfQorZmkKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorZWNobyAiUnVuIGFsbCB0aGUgY2VydGlmaWNhdGlvbiB2ZXJzaW9uIG9mIExTQiBUZXN0cyIKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKworTFNCX0RJU1RfQ0hFQ0tFUj0iL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3V0aWxzL2Rpc3QtY2hlY2tlci5wbCIKK1NFU1NJT049IiR7V09SS19ESVJ9L3Nlc3Npb24iCitpZiBbICEgLWUgJHtTRVNTSU9OfSBdCit0aGVuCisJZWNobyAiRXJyb3I6IENvdWxkIG5vdCBmaW5kIHNlc3Npb24gZmlsZS4iCisJZWNobyAiWW91IG11c3QgcnVuIExTQiB0ZXN0IGZyb20gd2ViYnJvd2VyLiIKKwlleGl0IDEKK2ZpCisKK2lmIFsgLXggJHtMU0JfRElTVF9DSEVDS0VSfSBdCit0aGVuCisJJHtMU0JfRElTVF9DSEVDS0VSfSAtdjIgLWYgJHtTRVNTSU9OfQorCWNoZWNrCitmaQorCitlY2hvICIiCitlY2hvICJMU0IgdGVzdCBjb21wbGV0ZS4gUGxlYXNlIGNoZWNrIHRoZSBsb2cgZmlsZSBpbiAvdmFyL29wdC9sc2IvdGVzdC9tYW5hZ2VyL3Jlc3VsdHMvIgorZWNobyAiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9wYWNrYWdlc19saXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZDgzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3QvcGFja2FnZXNfbGlzdApAQCAtMCwwICsxLDUwIEBACitMU0JfUkVMRUFTRT0icmVsZWFzZWQtNC4xLjAiCitMU0JfQVJDSD0ibHNiYXJjaCIKKworQkFTRV9QQUNLQUdFU19MSVNUPSJsc2Itc2V0dXAtNC4xLjAtMS5ub2FyY2gucnBtIgorCitSVU5USU1FX0JBU0VfUEFDS0FHRVNfTElTVD0ibHNiLWRpc3QtY2hlY2tlci01LjAuMC4xLTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXQzLWxpdGUtZGV2ZWwtMy43LTI3LmxzYjUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14dmZiLTEuMi4wLTIyLnRhcmdldGFyY2gucnBtIFwKKwkiCisKK1JVTlRJTUVfUEFDS0FHRVNfTElTVD0ibHNiLWNtZGNoay00LjEuNC01LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItbGliY2hrLTQuMS40LTUudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1xbS0yLjItMTIubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRhc2stZGlzdC10ZXN0a2l0LTQuMS45LTEubm9hcmNoLnJwbSBcCisJbHNiLXRlc3QtY29yZS00LjEuMTUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtY3BwLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1kZXNrdG9wLTQuMS45LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWRlc2t0b3AtdDJjLTQuMS4zLTMudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LWxpYnN0ZGNwcC00LjEuMC0xOC5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1vbHZlci1jb3JlLTQuMS40LTEudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi10ZXN0LXBlcmwtNC4xLjgtMS5ub2FyY2gucnBtIFwKKwlsc2ItdGVzdC1wcmludGluZy00LjEuMi0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1weXRob24tNC4xLjUtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQzLWF6b3YtNC4xLjEtMy50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QtcXQ0LWF6b3YtNC4xLjMtMS50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRlc3QteHRzNS01LjEuNS00NS5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1hbHNhLXQyYy00LjEuMC0xLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC1jb3JlLXQyYy00LjEuMi0zLnRhcmdldGFyY2gucnBtIFwKKwlsc2ItdGVzdC14bWwyLWF6b3YtNC4xLjAtMS50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfUEFDS0FHRVNfTElTVD0ibHNiLXB5dGhvbi0yLjQuNi03LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1hcGFjaGUtMi4yLjE0LTgubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXRjbC04LjUuNy04LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1leHBlY3QtNS40My4wLTEzLmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi1ncm9mZi0xLjIwLjEtNy5sc2I0LnRhcmdldGFyY2gucnBtIFwKKwlsc2ItcmFwdG9yLTEuNC4xOS01LmxzYjQudGFyZ2V0YXJjaC5ycG0gXAorCWxzYi14cGRmLTEuMDEtMTQubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXNhbWJhLTMuNC4zLTkubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJbHNiLXJzeW5jLTMuMC42LTYubHNiNC50YXJnZXRhcmNoLnJwbSBcCisJIgorCitBUFBfVEVTVEZJTEVTX0xJU1Q9ImV4cGVjdC10ZXN0cy50YXIgXAorCXRjbC10ZXN0cy50YXIgXAorCXJhcHRvci10ZXN0cy50YXIgXAorCXRlc3QxLnBkZiBcCisJdGVzdDIucGRmIFwKKwkiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzYi9sc2J0ZXN0L3Nlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVjYTJlZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdC9zZXNzaW9uCkBAIC0wLDAgKzEsMTk0IEBACitbR0VORVJBTF0KK1ZFUkJPU0VfTEVWRUw6ICAgMQorQVJDSElURUNUVVJFOiAgICB0YXJnZXRhcmNoCitVU0VfSU5URVJORVQ6ICAgIDEKK1NURF9WRVJTSU9OOiAgICAgTFNCIDQuMQorU1REX1BST0ZJTEU6ICAgICBubworW2NtZGNoa10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbbGliY2hrXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1thbHNhLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbYWxzYS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2Fsc2EtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvYWxzYS10MmMvcmVzdWx0cworCitbY29yZV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZXxsb2NhbHwqXQorQVVUT1JFUExZX1BST1ZJREVTX0JBU0g6IG4KK0FVVE9SRVBMWV9URVNUUlVOX1BBVEg6IC9ob21lL3RldC90ZXN0X3NldHMKK0FVVE9SRVBMWV9QRVJTT046IEF1dG9tYXRlZAorQVVUT1JFUExZX0tFUk5FTF9OQU1FOiB2bWxpbnV6CitBVVRPUkVQTFlfSU5TVEFMTF9MU0JQQU1fQ09ORjogeQorQVVUT1JFUExZX1BST1ZJREVTX0NfU0hFTEw6IG4KK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX1NFVF9QQVNTX01JTl9EQVlTOiB5CitBVVRPUkVQTFlfUFJPVklERVNfU1lTVl9JTklUOiAKK0FVVE9SRVBMWV9JU05UQUxMX0RFVlM6IHkKK0FVVE9SRVBMWV9TVVBQT1JUU19GSUxFX0NNRDogeQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS90ZXQvdGVzdF9zZXRzCitBVVRPUkVQTFlfU1VQUE9SVFNfTkxTOiBuCitBVVRPUkVQTFlfU1VQUE9SVFNfUFJPQ0VTU19BQ0NPVU5USU5HOiBuCitBVVRPUkVQTFlfUEFUSF9UT19SQy5EOiAKK0FVVE9SRVBMWV9BTExPV1NfTUFLRURFVjogbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUvdGV0L3Rlc3Rfc2V0cy9yZXN1bHRzCisKK1tjb3JlLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY29yZS10MmN8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L2NvcmUtdDJjCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvY29yZS10MmMvcmVzdWx0cworCitbY3BwLXQyY10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbY3BwLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvY3BwLXQyYworQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L2NwcC10MmMvcmVzdWx0cworCitbZGVza3RvcF0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbZGVza3RvcHxsb2NhbHwqXQorQVVUT1JFUExZX0RFU0tUT1BfRU5WSVJPTk1FTlQ6IFtkZWZhdWx0XQorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcAorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1NIT1dfU1VNTUFSWV9SRVBPUlQ6IAorQVVUT1JFUExZX09SR0FOSVNBVElPTjogTi9BCitBVVRPUkVQTFlfWFZGQl9ESVNQTEFZOiBbZGVmYXVsdF0KKworW2Rlc2t0b3AtdDJjXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tkZXNrdG9wLXQyY3xsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QvZGVza3RvcC10MmMKK0FVVE9SRVBMWV9SRVNVTFRTX0RJUjogL29wdC9sc2IvdGVzdC9kZXNrdG9wLXQyYy9yZXN1bHRzCisKK1tsaWJzdGRjcHBdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2xpYnN0ZGNwcHxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RfU1lTVEVNOiBEaXN0cmlidXRpb24gQ2hlY2tlcgorQVVUT1JFUExZX1BFUlNPTjogQXV0b21hdGVkCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9saWJzdGRjcHBfNC4xLjAKK0FVVE9SRVBMWV9PUkdBTklTQVRJT046IE4vQQorQVVUT1JFUExZX0dOVV9UUklQTEVUOiAKKworW29sdmVyXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tvbHZlcnxsb2NhbHwqXQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3Qvb2x2ZXItY29yZQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvdmFyL29wdC9sc2IvdGVzdC9vbHZlci1jb3JlCisKK1twZXJsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1twZXJsfGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9wZXJsCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcGVybC9yZXN1bHRzCisKK1twcmludGluZ10KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcHJpbnRpbmd8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3ByaW50aW5nCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcHJpbnRpbmcvcmVzdWx0cworCitbcHl0aG9uXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tweXRob258bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbgorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3B5dGhvbi9yZXN1bHRzCisKK1txdDMtYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbcXQzLWF6b3Z8bG9jYWx8Kl0KK0FVVE9SRVBMWV9URVNUU1VJVEVfRElSOiAvb3B0L2xzYi90ZXN0L3F0My1hem92CitBVVRPUkVQTFlfWDExX0ZPTlRfUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QvcXQzLWF6b3YvcmVzdWx0cworCitbcXQ0LWF6b3ZdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3F0NC1hem92fGxvY2FsfCpdCitBVVRPUkVQTFlfVEVTVFNVSVRFX0RJUjogL29wdC9sc2IvdGVzdC9xdDQtYXpvdgorQVVUT1JFUExZX1gxMV9GT05UX1BBVEg6IFtkZWZhdWx0XQorQVVUT1JFUExZX1JFU1VMVFNfRElSOiAvb3B0L2xzYi90ZXN0L3F0NC1hem92L3Jlc3VsdHMKKworW3htbDItYXpvdl0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbeHRzNXxsb2NhbHwqXQorQVVUT1JFUExZX1hUX0ZPTlRQQVRIX0dPT0Q6IFtkZWZhdWx0XQorQVVUT1JFUExZX1RFU1RTVUlURV9ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNQorQVVUT1JFUExZX1hWRkJfRElTUExBWTogW2RlZmF1bHRdCitBVVRPUkVQTFlfUkVTVUxUU19ESVI6IC9vcHQvbHNiL3Rlc3QveHRzNS94dHM1L3Jlc3VsdHMKK0FVVE9SRVBMWV9YVF9GT05UUEFUSDogW2RlZmF1bHRdCitBVVRPUkVQTFlfWF9DTElFTlRfSE9TVE5BTUU6IAorCitbYXBhY2hlXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tleHBlY3RdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW2dyb2ZmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tyYXB0b3JdCitSVU46IDEKK1ZFUlNJT046IGxvY2FsfCoKKworW3JzeW5jXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1tzYW1iYV0KK1JVTjogMQorVkVSU0lPTjogbG9jYWx8KgorCitbdGNsXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKK1t4cGRmXQorUlVOOiAxCitWRVJTSU9OOiBsb2NhbHwqCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc2IvbHNidGVzdF8xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMTI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHNiL2xzYnRlc3RfMS4wLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiQXV0b21hdGVzIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgdGVzdHMiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyIgorUFIgPSAicjMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xTQl9UZXN0LnNoO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTcwNjNiYjU0YjA0NzE5ZGYwNzE2YjUxMzQ0N2Y0ZmMwIgorCitTUkNfVVJJID0gImZpbGU6Ly9MU0JfVGVzdC5zaCBcCisJCSAgIGZpbGU6Ly9wYWNrYWdlc19saXN0IFwKKwkJICAgZmlsZTovL3Nlc3Npb24gXAorCQkgICAiCitSREVQRU5EU18ke1BOfSA9ICJycG0iCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9MU0JfVGVzdC5zaCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtZCAgJHtEfS9vcHQvbHNiLXRlc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9wYWNrYWdlc19saXN0ICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9zZXNzaW9uICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTU4NiIgXSB8fCBbICIke1RBUkdFVF9BUkNIfSIgPSAiaTY4NiIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL2lhMzIvZycgLWUgJ3MvdGFyZ2V0YXJjaC9pNDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gveDg2L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwlmaQorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJ4ODZfNjQiIF07dGhlbgorCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9hbWQ2NC9nJyAtZSAncy90YXJnZXRhcmNoL3g4Nl82NC9nJyAke0R9L29wdC9sc2ItdGVzdC9wYWNrYWdlc19saXN0CisJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL3g4Ni02NC9nJyAke0R9L29wdC9sc2ItdGVzdC9zZXNzaW9uCisJZmkKKwlpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYyIgXTt0aGVuCisJCXNlZCAtaSAtZSAncy9sc2JhcmNoL3BwYzMyL2cnIC1lICdzL3RhcmdldGFyY2gvcHBjL2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJc2VkIC1pIC1lICdzL3RhcmdldGFyY2gvUFBDMzIvZycgJHtEfS9vcHQvbHNiLXRlc3Qvc2Vzc2lvbgorCWZpCisKKwkjIEZvciBhIHBwYzY0IHRhcmdldC4gdGhlIGRlZmF1bHQgdXNlcnNwYWNlIGlzIDMyYi4KKwkjIFRoZXJlZm9yZSwgb25seSBjaGFuZ2UgdGhlIGxzYmFyY2ggYW5kIHRhcmdldGFyY2gKKwkjIGluIHRoZSBwYWNrYWdlX2xpc3Qgd2hlbiBNTElCPWxpYjY0IGlzIGJlaW5nIHVzZWQuCisJIyBPdGhlcndpc2UsIGJ5IGRlZmF1bHQsIHRoZSBwcGMzMiBMU0IgcGFja2FnZXMKKwkjIHdpbGwgYmUgZG93bmxvYWRlZCBieSBMU0JfVGVzdC5zaAorCWlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07dGhlbgorCQlpZiBbICIke1BOfSIgIT0gIiR7QlBOfSIgXTt0aGVuCisJCQlzZWQgLWkgLWUgJ3MvbHNiYXJjaC9wcGM2NC9nJyAtZSAncy90YXJnZXRhcmNoL3BwYzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3BhY2thZ2VzX2xpc3QKKwkJCXNlZCAtaSAtZSAncy90YXJnZXRhcmNoL1BQQzY0L2cnICR7RH0vb3B0L2xzYi10ZXN0L3Nlc3Npb24KKwkJZmkKKwlmaQorfQorCitGSUxFU18ke1BOfSArPSAiL29wdC9sc2ItdGVzdC8qIFwKKyAgICAgICAgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sc29mL2xzb2ZfNC44OS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdkZTlhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2xzb2YvbHNvZl80Ljg5LmJiCkBAIC0wLDAgKzEsNTcgQEAKK1NVTU1BUlkgPSAiTGlTdCBPcGVuIEZpbGVzIHRvb2wiCitERVNDUklQVElPTiA9ICJMc29mIGlzIGEgVW5peC1zcGVjaWZpYyBkaWFnbm9zdGljIHRvb2wuIFwKK0l0cyBuYW1lIHN0YW5kcyBmb3IgTGlTdCBPcGVuIEZpbGVzLCBhbmQgaXQgZG9lcyBqdXN0IHRoYXQuIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiQlNEIgorCitTUkNfVVJJID0gImZ0cDovL2xzb2YuaXRhcC5wdXJkdWUuZWR1L3B1Yi90b29scy91bml4L2xzb2YvbHNvZl8ke1BWfS50YXIuYnoyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI5Y2QzNGYzZmI4Njg1NmExMjVhYmJmMmJlM2EzODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFhYzJmYzVmZGM5NDQ3OTNiYWY0MWExNDAwMmI2ZGViNWEyOTA5NmIzODc3NDRlMjhmOGMzMGEzNjBhMzcxOCIKKworTE9DQUxTUkMgPSAiZmlsZTovLyR7V09SS0RJUn0vbHNvZl8ke1BWfS9sc29mXyR7UFZ9X3NyYy50YXIiCitTID0gIiR7V09SS0RJUn0vbHNvZl8ke1BWfV9zcmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7U30vMDBSRUFETUU7YmVnaW5saW5lPTY0NTtlbmRsaW5lPTY3OTttZDU9OTY0ZGYyNzVkMjY0MjliYTNiMzlkYmI5ZjIwNTE3MmEiCisKK3B5dGhvbiBkb191bnBhY2sgKCkgeworICAgICMgdGVtcG9yYXJpbHkgY2hhbmdlIFMgZm9yIHVucGFjaworICAgICMgb2YgbHNvZl8ke1BWfQorICAgIHMgPSBkLmdldFZhcignUycsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTJywgJyR7V09SS0RJUn0vbHNvZl8ke1BWfScpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgIyB0ZW1wb3JhcmlseSBjaGFuZ2UgU1JDX1VSSSBmb3IgdW5wYWNrCisgICAgIyBvZiBsc29mXyR7UFZ9X3NyYworICAgIHNyY191cmkgPSBkLmdldFZhcignU1JDX1VSSScsIEZhbHNlKQorICAgIGQuc2V0VmFyKCdTUkNfVVJJJywgJyR7TE9DQUxTUkN9JykKKyAgICBkLnNldFZhcignUycsIHMpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdiYXNlX2RvX3VucGFjaycsIGQpCisgICAgZC5zZXRWYXIoJ1NSQ19VUkknLCBzcmNfdXJpKQorfQorCitleHBvcnQgTFNPRl9JTkNMVURFID0gIiR7U1RBR0lOR19JTkNESVJ9IgorCitkb19jb25maWd1cmUgKCkgeworCWV4cG9ydCBMU09GX0FSPSIke0FSfSBjciIKKwlleHBvcnQgTFNPRl9SQU5MSUI9IiR7UkFOTElCfSIKKyAgICAgICAgaWYgWyAieCR7R0xJQkNWRVJTSU9OfSIgIT0gIngiIF07dGhlbgorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9YGVjaG8gJHtHTElCQ1ZFUlNJT059IHxzZWQgLWUgJ3MsXC4sLGcnYAorICAgICAgICAgICAgICAgIExJTlVYX0NMSUI9Ii1ER0xJQkNWPSR7TElOVVhfQ0xJQn0iCisgICAgICAgICAgICAgICAgZXhwb3J0IExJTlVYX0NMSUIKKyAgICAgICAgZmkKKwl5ZXMgfCAuL0NvbmZpZ3VyZSBsaW51eAorfQorCitleHBvcnQgSSA9ICIke1NUQUdJTkdfSU5DRElSfSIKK2V4cG9ydCBMID0gIiR7U1RBR0lOR19JTkNESVJ9IgorZXhwb3J0IEVYVFJBX09FTUFLRSA9ICIiCisKK2RvX2NvbXBpbGUgKCkgeworCW9lX3J1bm1ha2UgJ0NDPSR7Q0N9JyAnQ0ZHTD0ke0xERkxBR1N9IC1MLi9saWIgLWxsc29mJyAnREVCVUc9JyAnSU5DTD0ke0NGTEFHU30nCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0gJHtEfSR7bWFuZGlyfS9tYW44CisJaW5zdGFsbCAtbSA0NzU1IGxzb2YgJHtEfSR7c2JpbmRpcn0vbHNvZgorCWluc3RhbGwgLW0gMDY0NCBsc29mLjggJHtEfSR7bWFuZGlyfS9tYW44L2xzb2YuOAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC8wMDAxLVJlbmFtZS1ydW50ZXN0c19ub2x0cC5zaC1zY3JpcHQtc28taGF2ZS11bmlxdWUtbmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjRkMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2gKQEAgLTAsMCArMSwyMDIgQEAKK0Zyb20gOTc1MWE2NTI2Y2ZmY2RmNGUzZGMyY2IzMzY0MTI1OWE3YmUwMGUxOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgNyBEZWMgMjAxMyAxODoyNDozMiArMDEwMAorU3ViamVjdDogW1BBVENIXSBSZW5hbWUgcnVudGVzdHNfbm9sdHAuc2ggc2NyaXB0IHNvIGhhdmUgdW5pcXVlIG5hbWUKKworKiB0aGV5IGFyZSBpbnN0YWxsZWQgaW4gdGhlIHNhbWUgdGFyZ2V0IHBhdGgKKyAgL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaAorICBhbmQgb3ZlcndyaXRlIGVhY2ggb3RoZXIgaW4gbm9uLWRldGVybWluaXN0aWMgd2F5CisgIHdoZW4gbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSB1c2VkIGluICJtYWtlIGluc3RhbGwiCisKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKyAgLi90ZW1wL2xvZy5kb19pbnN0YWxsOmluc3RhbGwgLW0gMDA3NzUKKyAgICAibHRwLzIwMTIwOTAzLXIyL2x0cC0yMDEyMDkwMy90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW50ZXN0c19ub2x0cC5zaCIKKyAgICAibHRwLzIwMTIwOTAzLXIyL2ltYWdlL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi9ydW50ZXN0c19ub2x0cC5zaCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoIHwgMzEgKysrKysrKysrKysrKysrKworIC4uLi9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgMzEgLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoICAgIHwgNDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC4uLi9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKworIDQgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwgNzIgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNjQ0IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoCisgZGVsZXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoCisgY3JlYXRlIG1vZGUgMTAwNzU1IHRlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvc3lzdmlwYy9ydW5pcGN0ZXN0c19ub2x0cC5zaCBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bmlwY3Rlc3RzX25vbHRwLnNoCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODRmMzk4ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVuaXBjdGVzdHNfbm9sdHAuc2gKK0BAIC0wLDAgKzEsMzEgQEAKKysjIS9iaW4vc2gKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCisrIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKysjIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworKyMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworKyMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCisrIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKysjIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKysjIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworKyMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisrCisrZXhpdF9jb2RlPTAKKytlY2hvICJzeXN2aXBjIHRlc3RzIgorK2ZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKysgICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCisrICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKysgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysgICAgICAgICAgICAgIGV4aXRfY29kZT0kPworKyAgICAgIGZpCisrZG9uZQorK2V4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy9zeXN2aXBjL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODRmMzk4Zi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3N5c3ZpcGMvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDMxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistZXhpdF9jb2RlPTAKKy1lY2hvICJzeXN2aXBjIHRlc3RzIgorLWZvciB0eXBlIGluIG5vbmUgY2xvbmUgdW5zaGFyZTsgZG8KKy0gICAgICBlY2hvICIqKnN5c3ZpcGMgJHR5cGUiCistICAgICAgLi9zaG1uc3Rlc3Rfbm9sdHAgJHR5cGUKKy0gICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0gICAgICAgICAgICAgIGV4aXRfY29kZT0kPworLSAgICAgIGZpCistZG9uZQorLWV4aXQgJGV4aXRfY29kZQorZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnRlc3RzX25vbHRwLnNoIGIvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggNDNjYjdlMi4uMDAwMDAwMAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudGVzdHNfbm9sdHAuc2gKKysrKyAvZGV2L251bGwKK0BAIC0xLDQxICswLDAgQEAKKy0jIS9iaW4vc2gKKy0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNyAgICAgICAgICAgICAgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kI29yIG1vZGlmeSAgICAgICMjCistIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAgICAgIyMKKy0jIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgICAgICAjIworLSMjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKy0jIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0ICAgICAgICAjIworLSMjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZICMjCistIyMgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgIyMKKy0jIyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCistIyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAgICAgIyMKKy0jIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgIGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAgICAjIworLSMjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EgICAgIyMKKy0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCistCistb2xkaG9zdG5hbWU9YGhvc3RuYW1lYAorLWV4aXRfY29kZT0wCistZWNobyAidW5zaGFyZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKHVuc2hhcmUpIgorLQkuL3V0c3Rlc3Rfbm9sdHAgdW5zaGFyZSAkaQorLQlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKy0JCWV4aXRfY29kZT0kPworLQlmaQorLWRvbmUKKy1lY2hvICJjbG9uZSB0ZXN0cyIKKy1mb3IgaSBpbiBgc2VxIDEgNWA7IGRvCistCWVjaG8gInRlc3QgJGkgKGNsb25lKSIKKy0JLi91dHN0ZXN0X25vbHRwIGNsb25lICRpCistCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorLQkJZXhpdF9jb2RlPSQ/CistCWZpCistZG9uZQorLWhvc3RuYW1lICIkb2xkaG9zdG5hbWUiCistZXhpdCAkZXhpdF9jb2RlCitkaWZmIC0tZ2l0IGEvdGVzdGNhc2VzL2tlcm5lbC9jb250YWluZXJzL3V0c25hbWUvcnVudXRzdGVzdHNfbm9sdHAuc2ggYi90ZXN0Y2FzZXMva2VybmVsL2NvbnRhaW5lcnMvdXRzbmFtZS9ydW51dHN0ZXN0c19ub2x0cC5zaAorbmV3IGZpbGUgbW9kZSAxMDA3NTUKK2luZGV4IDAwMDAwMDAuLjQzY2I3ZTIKKy0tLSAvZGV2L251bGwKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvY29udGFpbmVycy91dHNuYW1lL3J1bnV0c3Rlc3RzX25vbHRwLnNoCitAQCAtMCwwICsxLDQxIEBACisrIyEvYmluL3NoCisrIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcgICAgICAgICAgICAgICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgIHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZCNvciBtb2RpZnkgICAgICAjIworKyMjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAgICAgICMjCisrIyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAgICAgIyMKKysjIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCisrIyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCAgICAgICAgIyMKKysjIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSAjIworKyMjIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICMjCisrIyMgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIworKyMjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICMjCisrIyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07ICBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlICAgICAgICAgICAgICAgIyMKKysjIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBICAgICMjCisrIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKKysjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworKworK29sZGhvc3RuYW1lPWBob3N0bmFtZWAKKytleGl0X2NvZGU9MAorK2VjaG8gInVuc2hhcmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpICh1bnNoYXJlKSIKKysJLi91dHN0ZXN0X25vbHRwIHVuc2hhcmUgJGkKKysJaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisrCQlleGl0X2NvZGU9JD8KKysJZmkKKytkb25lCisrZWNobyAiY2xvbmUgdGVzdHMiCisrZm9yIGkgaW4gYHNlcSAxIDVgOyBkbworKwllY2hvICJ0ZXN0ICRpIChjbG9uZSkiCisrCS4vdXRzdGVzdF9ub2x0cCBjbG9uZSAkaQorKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4KKysJCWV4aXRfY29kZT0kPworKwlmaQorK2RvbmUKKytob3N0bmFtZSAiJG9sZGhvc3RuYW1lIgorK2V4aXQgJGV4aXRfY29kZQorLS0gCisxLjguNC4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwLzAwMDEtbHRwLXZtYTAzLWZpeC10aGUtYWxnaW5tZW50LW9mLXBhZ2Utc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVlYWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvMDAwMS1sdHAtdm1hMDMtZml4LXRoZS1hbGdpbm1lbnQtb2YtcGFnZS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMjQzODgxZDcxZDJkNDkwMjdjM2RjMTVmZTI3ZWJlN2Y0ZWU2ODcwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBKdW4gMjAxNSAwOTo1MTowOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBsdHA6IHZtYTAzIGZpeCB0aGUgYWxnaW5tZW50IG9mIHBhZ2Ugc2l6ZQorCit0aGUgb2Zmc2V0IHRoZSBwYXJhbSBvZiBtbWFwMigpIGRvZXNuJ3QgYWxpZ24gdGhlIHBhZ2Ugc2l6ZSwgYnV0LAordGhpcyBwYXJhbSBhbGxvdyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSBhcyByZXR1cm5lZAorYnkgc3lzY29uZihfU0NfUEFHRV9TSVpFKS5tZWFud2hpbGUgb2Zmc2V0ICogNDA5NiBtdXN0IGJlIGEKK211bHRpcGxlIG9mIHRoZSBzeXN0ZW0gcGFnZSBzaXplLCBzbyBtb2RpZnkgdGhlIGlucHV0IHBhcmFtIG9mIG9mZnNldAorcGdvZmYgPSAoVUxPTkdfTUFYIC0gMSkmKH4oKHBnc3otMSk+PjEyKSk7CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IENodWFuZyBEb25nIDxDaHVhbmcuRG9uZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0Y2FzZXMva2VybmVsL21lbS92bWEvdm1hMDMuYyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitpbmRleCA2YWY5OTYwLi5iODZkN2NlIDEwMDY0NAorLS0tIGEvdGVzdGNhc2VzL2tlcm5lbC9tZW0vdm1hL3ZtYTAzLmMKKysrKyBiL3Rlc3RjYXNlcy9rZXJuZWwvbWVtL3ZtYS92bWEwMy5jCitAQCAtODksNyArODksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAkJaWYgKGZkID09IC0xKQorIAkJCXRzdF9icmttKFRCUk9LIHwgVEVSUk5PLCBOVUxMLCAib3BlbiAlcyIsIFRFU1RGSUxFKTsKKyAKKy0JCXBnb2ZmID0gVUxPTkdfTUFYIC0gMTsKKysJCXBnb2ZmID0gKFVMT05HX01BWCAtIDEpJih+KChwZ3N6LTEpPj4xMikpOworIAkJbWFwID0gbW1hcDIoTlVMTCwgcGdzeiwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCisgCQkJICAgIGZkLCBwZ29mZik7CisgCQlpZiAobWFwID09IE1BUF9GQUlMRUQpCistLSAKKzEuOC41LjIuMjMzLmc5MzJmN2U0CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLW51bWEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0ZjAwYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2FkZC1rbm9iLWZvci1udW1hLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1tQQVRDSF0gYWRkIGtub2IgdG8gY29udHJvbCB3aGV0aGVyIG51bWEgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworb3RoZXJ3aXNlIHRoZSByYW5kb20gZGVwZW5kZW5jeSB3aWxsIGJlIGdlbmVyYXRlZAorCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTAgKy0KK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDlmMzk3ZTcuLjEzNTcyNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE0Miw2ICsxNDIsMTIgQEAgZWxzZQorICAgICBBQ19TVUJTVChbV0lUSF9SRUFMVElNRV9URVNUU1VJVEVdLFsibm8iXSkKKyBmaQorIAorK0FDX0FSR19XSVRIKFtudW1hXSwKKysgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtbnVtYV0sCisrICAgIFt3aXRob3V0IHRoZSBudW1hIHN1cHBvcnRdKSwKKysgIFtdLFt3aXRoX251bWE9eWVzXSwKKyspCisrCisgQUNfQ09ORklHX1NVQkRJUlMoW3V0aWxzL2Zmc2ItNi4wLXJjMl0pCisgCisgIyBFTkQgdGVzdHN1aXRlcyBrbm9icworQEAgLTE1OSw3ICsxNjUsOSBAQCBMVFBfQ0hFQ0tfU0lHTkFMCisgTFRQX0NIRUNLX1NZU0NBTExfRVZFTlRGRAorIExUUF9DSEVDS19TWVNDQUxMX0tFWUNUTAorIExUUF9DSEVDS19TWVNDQUxMX01PRElGWV9MRFQKKytpZiB0ZXN0ICJ4JHdpdGhfbnVtYSIgPSB4eWVzOyB0aGVuCisgTFRQX0NIRUNLX1NZU0NBTExfTlVNQQorK2ZpCisgTFRQX0NIRUNLX1NZU0NBTExfUVVPVEFDVEwKKyBMVFBfQ0hFQ0tfU1lTQ0FMTF9TSUdOQUxGRAorIExUUF9DSEVDS19TWVNDQUxMX1VOU0hBUkUKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvYWRkLWtub2ItZm9yLXRpcnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZmY0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9hZGQta25vYi1mb3ItdGlycGMucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorW1BBVENIXSBhZGQga25vYiB0byBjb250cm9sIHdoZXRoZXIgdGlycGMgc3VwcG9ydCBzaG91bGQgYmUgY2hlY2tlZAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKwordGlycGMgc3VwcG9ydCBpcyBicm9rZW4gdXBzdHJlYW0uIGluIHRoZSBtZWFudGltZSwgYWxsb3cgdG8gZGlzYWJsZSB0aXJwYy4KKworU2lnbmVkLW9mZi1ieTogRmF0aGkgQm91ZHJhIDxmYXRoaS5ib3VkcmFAbGluYXJvLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDkgKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTk4LDYgKzk4LDEzIEBAIGlmIHRlc3QgIngkd2l0aF9weXRob24iID0geHllczsgdGhlbgorIGVsc2UKKyAgICAgQUNfU1VCU1QoW1dJVEhfUFlUSE9OXSxbIm5vIl0pCisgZmkKKysKKysjIFRJIFJQQworK0FDX0FSR19XSVRIKFt0aXJwY10sCisrICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXRpcnBjXSwKKysgICAgW3dpdGhvdXQgbGlidGlycGMgc3VwcG9ydF0pLAorKyAgW10sW3dpdGhfdGlycGM9eWVzXSwKKyspCisgIyBFTkQgdG9vbHMga25vYnMKKyAKKyAjIFRlc3RzdWl0ZXMga25vYnMKK0BAIC0xODIsNyArMTg5LDkgQEAgTFRQX0NIRUNLX1JFTkFNRUFUCisgTFRQX0NIRUNLX0ZBTExPQ0FURQorIExUUF9DSEVDS19TWVNDQUxMX0ZDTlRMCisgTFRQX0NIRUNLX1NZU0NBTExfUEVSRl9FVkVOVF9PUEVOCisraWYgdGVzdCAieCR3aXRoX3RpcnBjIiA9IHh5ZXM7IHRoZW4KKyBMVFBfQ0hFQ0tfVElSUEMKKytmaQorIExUUF9DSEVDS19URUUKKyBMVFBfQ0hFQ0tfU1BMSUNFCisgTFRQX0NIRUNLX1ZNU1BMSUNFCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL2x0cC1Eby1ub3QtbGluay1hZ2FpbnN0LWxpYmZsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZmQ0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cC9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDViZGE5YzBhZjU2ODY5YzZmZjJjMjVkMzhlYTA4NzE3OWM5NDZiYzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTEgTWFyIDIwMTQgMTQ6NDc6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gbHRwOiBEb24ndCBsaW5rIGFnYWluc3QgbGliZmwKKworV2UgaGF2ZSBhbHJlYWR5IGRlZmluZWQgeXl3cmFwIGZ1bmN0aW9uIGluIHNjYW4ubCBmaWxlLiBBZnRlciB0aGlzLCB3ZSBubyBsb25nZXIgbmVlZCB0bworbGluayBhZ2FpbnN0IGxpYmZsIGFuZCBzbyBubyBsb25nZXIgZ2V0IGVycm9ycyBhYm91dCB1bmRlZmluZWQgcmVmZXJlbmNlcyB0byB5eWxleC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENob25nIEx1IDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorLS0tCisgcGFuL01ha2VmaWxlIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcGFuL01ha2VmaWxlIGIvcGFuL01ha2VmaWxlCitpbmRleCA0Y2M2NDY2Li5hNGI1NzViIDEwMDY0NAorLS0tIGEvcGFuL01ha2VmaWxlCisrKysgYi9wYW4vTWFrZWZpbGUKK0BAIC0zMSw3ICszMSw3IEBAIENQUEZMQUdTCQkrPSAtV25vLWVycm9yCisgCisgQ1BQRkxBR1MJCSs9IC1JJChhYnNfc3JjZGlyKQorIAorLUxETElCUwkJCSs9IC1sbSAkKExFWExJQikKKytMRExJQlMJCQkrPSAtbG0KKyAKKyBMRkxBR1MJCQkrPSAtbAorIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHAvbWFrZS1zZXRyZWdpZDAyLXdvcmsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzNjAxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9sdHAvbHRwL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1tQQVRDSF0gbWFrZSBzZXRyZWdpZDAyIHdvcmsKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCit0aGVyZSBpcyBubyAibm9ib2R5IiBncm91cCBpbiBvZS1jb3JlLCB0aGUgdXNlciAibm9ib2R5IiBiZWxvbmdzIHRvCisibm9ncm91cCIgZ3JvdXAsIHNvIHJlcGxhY2Ugbm9ib2R5IHdpdGggbm9ncm91cCB0byBtYWtlIHRoZSB0ZXN0IHBhc3MKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMgfCAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RjYXNlcy9rZXJuZWwvc3lzY2FsbHMvc2V0cmVnaWQvc2V0cmVnaWQwMi5jIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK2luZGV4IDgwNTg2MjcuLjg2NmJlZTQgMTAwNjQ0CistLS0gYS90ZXN0Y2FzZXMva2VybmVsL3N5c2NhbGxzL3NldHJlZ2lkL3NldHJlZ2lkMDIuYworKysrIGIvdGVzdGNhc2VzL2tlcm5lbC9zeXNjYWxscy9zZXRyZWdpZC9zZXRyZWdpZDAyLmMKK0BAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBnaWRfdCBuZWdfb25lID0gLTE7CisgCisgc3RhdGljIHN0cnVjdCBwYXNzd2QgKmx0cHVzZXI7CisgCistc3RhdGljIHN0cnVjdCBncm91cCBub2JvZHksIHJvb3QsIGJpbjsKKytzdGF0aWMgc3RydWN0IGdyb3VwIG5vZ3JvdXAsIHJvb3QsIGJpbjsKKyAKKyAvKgorICAqIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCB0ZXN0IGRhdGEuICBFYWNoIHN0cnVjdHVyZSBpbiB0aGUgYXJyYXkKK0BAIC01NywxNyArNTcsMTcgQEAgc3RydWN0IHRlc3RfZGF0YV90IHsKKyAJY2hhciAqdGVzdF9tc2c7CisgfSB0ZXN0X2RhdGFbXSA9IHsKKyAJeworLQkmbmVnX29uZSwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJm5lZ19vbmUsICZyb290LmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIHJvb3QpLCJ9LCB7CistCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2JvZHksICZub2JvZHksCisrCSZuZWdfb25lLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQoLTEsIGJpbikifSwgeworLQkmcm9vdC5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmbmVnX29uZSwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwtMSksIn0sIHsKKy0JJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJmJpbi5ncl9naWQsICZuZWdfb25lLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIC0xKSwifSwgeworLQkmcm9vdC5ncl9naWQsICZiaW4uZ3JfZ2lkLCBFUEVSTSwgJm5vYm9keSwgJm5vYm9keSwKKysJJnJvb3QuZ3JfZ2lkLCAmYmluLmdyX2dpZCwgRVBFUk0sICZub2dyb3VwLCAmbm9ncm91cCwKKyAJCSAgICAiQWZ0ZXIgc2V0cmVnaWQocm9vdCwgYmluKSJ9LCB7CistCSZiaW4uZ3JfZ2lkLCAmcm9vdC5ncl9naWQsIEVQRVJNLCAmbm9ib2R5LCAmbm9ib2R5LAorKwkmYmluLmdyX2dpZCwgJnJvb3QuZ3JfZ2lkLCBFUEVSTSwgJm5vZ3JvdXAsICZub2dyb3VwLAorIAkJICAgICJBZnRlciBzZXRyZWdpZChiaW4sIHJvb3QpLCJ9CisgfTsKKyAKK0BAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHZvaWQgc2V0dXAodm9pZCkKKyB9IHdoaWxlICgwKQorIAorIAlHRVRfR0lEKHJvb3QpOworLQlHRVRfR0lEKG5vYm9keSk7CisrCUdFVF9HSUQobm9ncm91cCk7CisgCUdFVF9HSUQoYmluKTsKKyAKKyAJVEVTVF9QQVVTRTsKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbHRwL2x0cF8yMDE1MDQyMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDhlYmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL2x0cC9sdHBfMjAxNTA0MjAuYmIKQEAgLTAsMCArMSw4NiBAQAorU1VNTUFSWSA9ICJMaW51eCBUZXN0IFByb2plY3QiCitERVNDUklQVElPTiA9ICJUaGUgTGludXggVGVzdCBQcm9qZWN0IGlzIGEgam9pbnQgcHJvamVjdCB3aXRoIFNHSSwgSUJNLCBPU0RMLCBhbmQgQnVsbCB3aXRoIGEgZ29hbCB0byBkZWxpdmVyIHRlc3Qgc3VpdGVzIHRvIHRoZSBvcGVuIHNvdXJjZSBjb21tdW5pdHkgdGhhdCB2YWxpZGF0ZSB0aGUgcmVsaWFiaWxpdHksIHJvYnVzdG5lc3MsIGFuZCBzdGFiaWxpdHkgb2YgTGludXguIFRoZSBMaW51eCBUZXN0IFByb2plY3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRvb2xzIGZvciB0ZXN0aW5nIHRoZSBMaW51eCBrZXJuZWwgYW5kIHJlbGF0ZWQgZmVhdHVyZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL2x0cC5zb3VyY2Vmb3JnZS5uZXQiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRC0yLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiXAorICAgIGZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvY29udHJvbGxlcnMvZnJlZXplci9ydW5fZnJlZXplci5zaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTE3O21kNT04NmE2MWQyYzA0MmQ1OTgzNmZmYjM1M2EyMTQ1NjQ5OCBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9tZW1vcnlfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9rZXJuZWwvaG90cGx1Zy9jcHVfaG90cGx1Zy9DT1BZSU5HO21kNT1lMDRhMmU1NDJiMmI4NjI5YmY5Y2QyYmEyOWIwZmU0MSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9DT1BZSU5HO21kNT0yMTZlNDNiNzJlZmJlNGVkOTAxN2NjMTljNGM2OGIwMSBcCisgICAgZmlsZTovL3Rlc3RjYXNlcy9yZWFsdGltZS9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgZmlsZTovL3Rvb2xzL25ldHBpcGUtMi40L0NPUFlJTkc7bWQ1PTllMzc4MWJiNWZlNzg3YWE4MGUxZjUxZjUwMDZiNmZhIFwKKyAgICBmaWxlOi8vdG9vbHMvbmV0cGlwZS0yLjQtaXB2Ni9DT1BZSU5HO21kNT05ZTM3ODFiYjVmZTc4N2FhODBlMWY1MWY1MDA2YjZmYSBcCisgICAgZmlsZTovL3Rvb2xzL3RvcC1MVFAvcHJvYy9DT1BZSU5HO21kNT1hZWZjODhlYjhhNDE2NzJmYmZjZmU2YjY5YWI4YzQ5YyBcCisgICAgZmlsZTovL3Rvb2xzL3BvdW5kZXIyMS9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2JlbmNobWFyay9rZXJuYmVuY2gtMC40Mi9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgZmlsZTovL3V0aWxzL2Zmc2ItNi4wLXJjMi9DT1BZSU5HO21kNT1jNDYwODIxNjdhMzE0ZDc4NWQwMTJhMjQ0NzQ4ZDgwMyBcCisiCisKK0RFUEVORFMgPSAiYXR0ciBsaWJhaW8gbGliY2FwIGFjbCBvcGVuc3NsIHppcC1uYXRpdmUiCitTUkNSRVYgPSAiNzdkMGI3ZmQwMTQ4Y2U2NTdjNWEyNTA2MDY2N2U5NzhjMDc2NjJhMCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2xpbnV4LXRlc3QtcHJvamVjdC9sdHAuZ2l0IFwKKyAgICBmaWxlOi8vMDAwMS1SZW5hbWUtcnVudGVzdHNfbm9sdHAuc2gtc2NyaXB0LXNvLWhhdmUtdW5pcXVlLW5hbWUucGF0Y2ggXAorICAgIGZpbGU6Ly9sdHAtRG8tbm90LWxpbmstYWdhaW5zdC1saWJmbC5wYXRjaCBcCisgICAgZmlsZTovL21ha2Utc2V0cmVnaWQwMi13b3JrLnBhdGNoIFwKKyAgICBmaWxlOi8vYWRkLWtub2ItZm9yLW51bWEucGF0Y2ggXAorICAgIGZpbGU6Ly9hZGQta25vYi1mb3ItdGlycGMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWx0cC12bWEwMy1maXgtdGhlLWFsZ2lubWVudC1vZi1wYWdlLXNpemUucGF0Y2ggXAorIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK2V4cG9ydCBwcmVmaXggPSAiL29wdC9sdHAiCitleHBvcnQgZXhlY19wcmVmaXggPSAiL29wdC9sdHAiCisKK1BBQ0tBR0VDT05GSUdbbnVtYV0gPSAiLS13aXRoLW51bWEsIC0td2l0aG91dC1udW1hLCBudW1hY3RsLCIKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi1JICR7U30vdGVzdGNhc2VzL3JlYWx0aW1lL200IgorRVhUUkFfT0VDT05GID0gIiAtLXdpdGgtcG93ZXItbWFuYWdlbWVudC10ZXN0c3VpdGUgLS13aXRoLXJlYWx0aW1lLXRlc3RzdWl0ZSAiCisjIGx0cCBuZXR3b3JrL3JwYyB0ZXN0IGNhc2VzIGZ0YmZzIHdoZW4gbGlidGlycGMgaXMgZm91bmQKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC10aXJwYyAiCisKKyMgVGhlIG1ha2VmaWxlcyBtYWtlIGV4Y2Vzc2l2ZSB1c2Ugb2YgbWFrZSAtQyBhbmQgc2V2ZXJhbCBpbmNsdWRlIHRlc3RjYXNlcy5taworIyB3aGljaCB0cmlnZ2VycyBhIGJ1aWxkIG9mIHRoZSBzeXNjYWxsIGhlYWRlci4gVG8gcmVwcm9kdWNlLCBidWlsZCBsdHAsCisjIHRoZW4gZGVsZXRlIHRoZSBoZWFkZXIsIHRoZW4gIm1ha2UgLWogWFgiIGFuZCB3YXRjaCByZWdlbi5zaCBydW4gbXVsdGlwbGUKKyMgdGltZXMuIEl0cyBlYXNpZXIgdG8gZ2VuZXJhdGUgdGhpcyBvbmNlIGhlcmUgaW5zdGVhZC4KK2RvX2NvbXBpbGVfcHJlcGVuZCAoKSB7CisJKCBtYWtlIC1DICR7Qn0vdGVzdGNhc2VzL2tlcm5lbCBpbmNsdWRlL2xpbnV4X3N5c2NhbGxfbnVtYmVycy5oICkKK30KKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfS9vcHQvbHRwLworICAgIG9lX3J1bm1ha2UgREVTVERJUj0ke0R9IFNLSVBfSURDSEVDSz0xIGluc3RhbGwKKworICAgICMgQ29weSBQT1NJWCB0ZXN0IHN1aXRlIGludG8gJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcyBieSBtYW51YWwKKyAgICBjcCAtciB0ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUgJHtEfS9vcHQvbHRwL3Rlc3RjYXNlcworfQorCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIGUyZnNwcm9ncy1ta2UyZnMgcHl0aG9uLWNvcmUgbGliYWlvIGJhc2ggZ2F3ayBleHBlY3QiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAgIC9vcHQvbHRwL3J1bnRlc3QvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RjYXNlcy8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0Y2FzZXMvKi8qLyovLmRlYnVnIFwKKyAgICAvb3B0L2x0cC9zY2VuYXJpb19ncm91cHMvLmRlYnVnIFwKKyAgICAvb3B0L2x0cC90ZXN0c2NyaXB0cy8uZGVidWcgXAorICAgIC9vcHQvbHRwL3Rlc3RzY3JpcHRzL29wZW5fcG9zaXhfdGVzdHN1aXRlLy5kZWJ1ZyBcCisiCisKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiL29wdC9sdHAvbGliL2xpYm1lbS5hIgorCitGSUxFU18ke1BOfSArPSAiL29wdC9sdHAvKiAvb3B0L2x0cC9ydW50ZXN0LyogL29wdC9sdHAvc2NlbmFyaW9fZ3JvdXBzLyogL29wdC9sdHAvdGVzdGNhc2VzL2Jpbi8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9iaW4vKi9iaW4vKiAvb3B0L2x0cC90ZXN0c2NyaXB0cy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9jb25mb3JtYW5jZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9Eb2N1bWVudGF0aW9uLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL2Z1bmN0aW9uYWwvKiAvb3B0L2x0cC90ZXN0Y2FzZXMvb3Blbl9wb3NpeF90ZXN0c3VpdGUvaW5jbHVkZS8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS9zY3JpcHRzLyogL29wdC9sdHAvdGVzdGNhc2VzL29wZW5fcG9zaXhfdGVzdHN1aXRlL3N0cmVzcy8qIC9vcHQvbHRwL3Rlc3RjYXNlcy9vcGVuX3Bvc2l4X3Rlc3RzdWl0ZS90b29scy8qIgorCisjIEF2b2lkIGdlbmVyYXRlZCBiaW5hcmllcyBzdHJpcHBpbmcuIE90aGVyd2lzZSBzb21lIG9mIHRoZSBsdHAgdGVzdHMgc3VjaCBhcyBsZGQwMSAmIG5tMDEgZmFpbHMKK0lOSElCSVRfUEFDS0FHRV9TVFJJUCA9ICIxIgorSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUID0gIjEiCisjIEhvd2V2ZXIsIHRlc3RfYXJjaF9zdHJpcHBlZCBpcyBhbHJlYWR5IHN0cmlwcGVkLCBzby4uLgorSU5TQU5FX1NLSVBfJHtQTn0gKz0gImFscmVhZHktc3RyaXBwZWQiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAxLURvbi10LXJldXNlLXdlYWstc3ltYm9sLW9wdG9wdC10by1maXgtRlRCRlMtb24tbWlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2RhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK0Zyb206IEx1ayBDbGFlcyA8bHVrQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDQgSnVsIDIwMDkgMTA6NTQ6NTMgKzAyMDAKK1N1YmplY3Q6IERvbid0IHJldXNlIHdlYWsgc3ltYm9sIG9wdG9wdCB0byBmaXggRlRCRlMgb24gbWlwcyoKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tIAorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGdldG9wdC5jIHwgICAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dldG9wdC5jIGIvZ2V0b3B0LmMKK2luZGV4IDgzY2U2MjguLjgyZTk4M2MgMTAwNjQ0CistLS0gYS9nZXRvcHQuYworKysrIGIvZ2V0b3B0LmMKK0BAIC00Myw3ICs0Myw3IEBAIHR5cGVkZWYJaW50CXNzaXplX3Q7CisgY2hhcgkqb3B0YXJnOworIGludAlvcHRpbmQgPSAxOworIGludAlvcHRlcnIgPSAxOworLWludAlvcHRvcHQ7CisraW50CW9wdG9wdGM7CisgCisgc3RhdGljIHZvaWQKKyBlcnJvcihjb25zdCBjaGFyICpzLCBpbnQgYykKK0BAIC02OSw3ICs2OSw3IEBAIGVycm9yKGNvbnN0IGNoYXIgKnMsIGludCBjKQorIAkJKmJwKysgPSAqcysrOworIAl3aGlsZSAoKm1zZykKKyAJCSpicCsrID0gKm1zZysrOworLQkqYnArKyA9IG9wdG9wdDsKKysJKmJwKysgPSBvcHRvcHRjOworIAkqYnArKyA9ICdcbic7CisgCXdyaXRlKDIsIGJ1ZiwgYnAgLSBidWYpOworIAlhY19mcmVlKGJ1Zik7CitAQCAtMTAxLDEzICsxMDEsMTMgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCX0KKyAJCWN1cnAgPSAmYXJndltvcHRpbmRdWzFdOworIAl9CistCW9wdG9wdCA9IGN1cnBbMF0gJiAwMzc3OworKwlvcHRvcHRjID0gY3VycFswXSAmIDAzNzc7CisgCXdoaWxlIChvcHRzdHJpbmdbMF0pIHsKKyAJCWlmIChvcHRzdHJpbmdbMF0gPT0gJzonKSB7CisgCQkJb3B0c3RyaW5nKys7CisgCQkJY29udGludWU7CisgCQl9CistCQlpZiAoKG9wdHN0cmluZ1swXSAmIDAzNzcpID09IG9wdG9wdCkgeworKwkJaWYgKChvcHRzdHJpbmdbMF0gJiAwMzc3KSA9PSBvcHRvcHRjKSB7CisgCQkJaWYgKG9wdHN0cmluZ1sxXSA9PSAnOicpIHsKKyAJCQkJaWYgKGN1cnBbMV0gIT0gJ1wwJykgeworIAkJCQkJb3B0YXJnID0gKGNoYXIgKikmY3VycFsxXTsKK0BAIC0xMjcsNyArMTI3LDcgQEAgZ2V0b3B0KGludCBhcmdjLCBjaGFyICpjb25zdCBhcmd2W10sIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKKyAJCQkJCW9wdGluZCsrOworIAkJCQlvcHRhcmcgPSAwOworIAkJCX0KKy0JCQlyZXR1cm4gb3B0b3B0OworKwkJCXJldHVybiBvcHRvcHRjOworIAkJfQorIAkJb3B0c3RyaW5nKys7CisgCX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAyLVBhdGNoZWQtb3V0LVNTTDItc3VwcG9ydC1zaW5jZS1pdC1pcy1uby1sb25nZXItc3VwcG8ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYWQ0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMi1QYXRjaGVkLW91dC1TU0wyLXN1cHBvcnQtc2luY2UtaXQtaXMtbm8tbG9uZ2VyLXN1cHBvLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI3IEFwciAyMDExIDAwOjE4OjQyICswMjAwCitTdWJqZWN0OiBQYXRjaGVkIG91dCBTU0wyIHN1cHBvcnQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBPcGVuU1NMLgorCitUaGlzIHBhdGNoIGlzIHRha2VuIGZyb20KK2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9wb29sL21haW4vaC9oZWlybG9vbS1tYWlseC9oZWlybG9vbS1tYWlseF8xMi41LTUuZGViaWFuLnRhci54egorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIGlzIGRlYWRdCistLS0KKyBtYWlseC4xICAgfCAgICAyICstCisgb3BlbnNzbC5jIHwgICAgNCArLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tYWlseC4xIGIvbWFpbHguMQoraW5kZXggNDE3ZWEwNC4uYTAyZTQzMCAxMDA2NDQKKy0tLSBhL21haWx4LjEKKysrKyBiL21haWx4LjEKK0BAIC0zNTc1LDcgKzM1NzUsNyBAQCBPbmx5IGFwcGxpY2FibGUgaWYgU1NML1RMUyBzdXBwb3J0IGlzIGJ1aWx0IHVzaW5nIE9wZW5TU0wuCisgLlRQCisgLkIgc3NsLW1ldGhvZAorIFNlbGVjdHMgYSBTU0wvVExTIHByb3RvY29sIHZlcnNpb247CistdmFsaWQgdmFsdWVzIGFyZSBgc3NsMicsIGBzc2wzJywgYW5kIGB0bHMxJy4KKyt2YWxpZCB2YWx1ZXMgYXJlIGBzc2wzJywgYW5kIGB0bHMxJy4KKyBJZiB1bnNldCwgdGhlIG1ldGhvZCBpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LAorIGlmIHBvc3NpYmxlLgorIC5UUAorZGlmZiAtLWdpdCBhL29wZW5zc2wuYyBiL29wZW5zc2wuYworaW5kZXggYjRlMzNmYy4uNDRmZTRlNSAxMDA2NDQKKy0tLSBhL29wZW5zc2wuYworKysrIGIvb3BlbnNzbC5jCitAQCAtMjE2LDkgKzIxNiw3IEBAIHNzbF9zZWxlY3RfbWV0aG9kKGNvbnN0IGNoYXIgKnVocCkKKyAKKyAJY3AgPSBzc2xfbWV0aG9kX3N0cmluZyh1aHApOworIAlpZiAoY3AgIT0gTlVMTCkgeworLQkJaWYgKGVxdWFsKGNwLCAic3NsMiIpKQorLQkJCW1ldGhvZCA9IFNTTHYyX2NsaWVudF9tZXRob2QoKTsKKy0JCWVsc2UgaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorKwkJaWYgKGVxdWFsKGNwLCAic3NsMyIpKQorIAkJCW1ldGhvZCA9IFNTTHYzX2NsaWVudF9tZXRob2QoKTsKKyAJCWVsc2UgaWYgKGVxdWFsKGNwLCAidGxzMSIpKQorIAkJCW1ldGhvZCA9IFRMU3YxX2NsaWVudF9tZXRob2QoKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjczYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAwMy1GaXhlZC1MaW50aWFuLXdhcm5pbmctd2FybmluZy1tYWNyby1OLW5vdC1kZWZpbmVkLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0Zyb206IEhpbGtvIEJlbmdlbiA8YmVuZ2VuQGRlYmlhbi5vcmc+CitEYXRlOiBTYXQsIDE0IEFwciAyMDEyIDIwOjIyOjQzICswMjAwCitTdWJqZWN0OiBGaXhlZCBMaW50aWFuIHdhcm5pbmcgKHdhcm5pbmc6IG1hY3JvIGBOJyBub3QgZGVmaW5lZCkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL21haWx4LjEgYi9tYWlseC4xCitpbmRleCBhMDJlNDMwLi5iMDcyM2JkIDEwMDY0NAorLS0tIGEvbWFpbHguMQorKysrIGIvbWFpbHguMQorQEAgLTM3ODEsNyArMzc4MSw3IEBAIHlvdSBjb3VsZCBleGFtaW5lIHRoZSBmaXJzdCBtZXNzYWdlIGJ5IGdpdmluZyB0aGUgY29tbWFuZDoKKyAuc3AKKyAuZmkKKyB3aGljaCBtaWdodCBjYXVzZQorLS5OIG1haWx4CisrLkkgbWFpbHgKKyB0byByZXNwb25kIHdpdGgsIGZvciBleGFtcGxlOgorIC5uZgorIC5zcApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTEtb3V0b2YtSW50cm9kdWNlLWV4cGFuZGFkZHItZmxhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ2MTY0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDExLW91dG9mLUludHJvZHVjZS1leHBhbmRhZGRyLWZsYWcucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA5OTg0YWU1Y2IwZWEwZDYxZGYxNjEyYjA2OTUyYTYxMzIzYzA4M2Q5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTM6MzggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzRdIG91dG9mOiBJbnRyb2R1Y2UgZXhwYW5kYWRkciBmbGFnCisKK0RvY3VtZW50IHRoYXQgYWRkcmVzcyBleHBhbnNpb24gaXMgZGlzYWJsZWQgdW5sZXNzIHRoZSBleHBhbmRhZGRyCitiaW5hcnkgb3B0aW9uIGlzIHNldC4KKworVGhpcyBoYXMgYmVlbiBhc3NpZ25lZCBDVkUtMjAxNC03ODQ0IGZvciBCU0QgbWFpbHgsIGJ1dCBpdCBpcyBub3QKK2EgdnVsbmVyYWJpbGl0eSBpbiBIZWlybG9vbSBtYWlseCBiZWNhdXNlIHRoaXMgZmVhdHVyZSB3YXMgZG9jdW1lbnRlZC4KKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgbWFpbHguMSB8IDE0ICsrKysrKysrKysrKysrCisgbmFtZXMuYyB8ICAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbWFpbHguMSBiL21haWx4LjEKK2luZGV4IDcwYTc4NTkuLjIyYTE3MWIgMTAwNjQ0CistLS0gYS9tYWlseC4xCisrKysgYi9tYWlseC4xCitAQCAtNjU2LDYgKzY1NiwxNCBAQCBidXQgYW55IHJlcGx5IHJldHVybmVkIHRvIHRoZSBtYWNoaW5lCisgd2lsbCBoYXZlIHRoZSBzeXN0ZW0gd2lkZSBhbGlhcyBleHBhbmRlZAorIGFzIGFsbCBtYWlsIGdvZXMgdGhyb3VnaCBzZW5kbWFpbC4KKyAuU1MgIlJlY2lwaWVudCBhZGRyZXNzIHNwZWNpZmljYXRpb25zIgorK0lmIHRoZQorKy5JIGV4cGFuZGFkZHIKKytvcHRpb24gaXMgbm90IHNldCAodGhlIGRlZmF1bHQpLCByZWNpcGllbnQgYWRkcmVzc2VzIG11c3QgYmUgbmFtZXMgb2YKKytsb2NhbCBtYWlsYm94ZXMgb3IgSW50ZXJuZXQgbWFpbCBhZGRyZXNzZXMuCisrLlBQCisrSWYgdGhlCisrLkkgZXhwYW5kYWRkcgorK29wdGlvbiBpcyBzZXQsIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHk6CisgV2hlbiBhbiBhZGRyZXNzIGlzIHVzZWQgdG8gbmFtZSBhIHJlY2lwaWVudAorIChpbiBhbnkgb2YgVG8sIENjLCBvciBCY2MpLAorIG5hbWVzIG9mIGxvY2FsIG1haWwgZm9sZGVycworQEAgLTIzOTEsNiArMjM5OSwxMiBAQCBhbmQgZXhpdHMgaW1tZWRpYXRlbHkuCisgSWYgdGhpcyBvcHRpb24gaXMgc2V0LAorIFxmSW1haWx4XGZSIHN0YXJ0cyBldmVuIHdpdGggYW4gZW1wdHkgbWFpbGJveC4KKyAuVFAKKysuQiBleHBhbmRhZGRyCisrQ2F1c2VzCisrLkkgbWFpbHgKKyt0byBleHBhbmQgbWVzc2FnZSByZWNpcGllbnQgYWRkcmVzc2VzLCBhcyBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24sCisrUmVjaXBpZW50IGFkZHJlc3Mgc3BlY2lmaWNhdGlvbnMuCisrLlRQCisgLkIgZmxpcHIKKyBFeGNoYW5nZXMgdGhlCisgLkkgUmVzcG9uZAorZGlmZiAtLWdpdCBhL25hbWVzLmMgYi9uYW1lcy5jCitpbmRleCA2NmU5NzZiLi5jNjk1NjBmIDEwMDY0NAorLS0tIGEvbmFtZXMuYworKysrIGIvbmFtZXMuYworQEAgLTI2OCw2ICsyNjgsOSBAQCBvdXRvZihzdHJ1Y3QgbmFtZSAqbmFtZXMsIEZJTEUgKmZvLCBzdHJ1Y3QgaGVhZGVyICpocCkKKyAJRklMRSAqZm91dCwgKmZpbjsKKyAJaW50IGlzcGlwZTsKKyAKKysJaWYgKHZhbHVlKCJleHBhbmRhZGRyIikgPT0gTlVMTCkKKysJCXJldHVybiBuYW1lczsKKysKKyAJdG9wID0gbmFtZXM7CisgCW5wID0gbmFtZXM7CisgCXRpbWUoJm5vdyk7CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkYmZkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEyLXVucGFjay1EaXNhYmxlLW9wdGlvbi1wcm9jZXNzaW5nLWZvci1lbWFpbC1hZGRyZXNzZXMucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorRnJvbSBlMzRlMmFjNjdiODA0OTcwODBlYmVjY2NlYzQwYzNiNjE0NTYxNjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTE6MTQ6MDYgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIHVucGFjazogRGlzYWJsZSBvcHRpb24gcHJvY2Vzc2luZyBmb3IgZW1haWwgYWRkcmVzc2VzCisgd2hlbiBjYWxsaW5nIHNlbmRtYWlsCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbQorZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuL3Bvb2wvbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUtNS5kZWJpYW4udGFyLnh6CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbdXBzdHJlYW0gaXMgZGVhZF0KKy0tLQorIGV4dGVybi5oICB8IDIgKy0KKyBuYW1lcy5jICAgfCA4ICsrKysrKy0tCisgc2VuZG91dC5jIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZXh0ZXJuLmggYi9leHRlcm4uaAoraW5kZXggNmI4NWJhMC4uODg3M2ZlOCAxMDA2NDQKKy0tLSBhL2V4dGVybi5oCisrKysgYi9leHRlcm4uaAorQEAgLTM5Niw3ICszOTYsNyBAQCBzdHJ1Y3QgbmFtZSAqb3V0b2Yoc3RydWN0IG5hbWUgKm5hbWVzLCBGSUxFICpmbywgc3RydWN0IGhlYWRlciAqaHApOworIGludCBpc19maWxlYWRkcihjaGFyICpuYW1lKTsKKyBzdHJ1Y3QgbmFtZSAqdXNlcm1hcChzdHJ1Y3QgbmFtZSAqbmFtZXMpOworIHN0cnVjdCBuYW1lICpjYXQoc3RydWN0IG5hbWUgKm4xLCBzdHJ1Y3QgbmFtZSAqbjIpOworLWNoYXIgKip1bnBhY2soc3RydWN0IG5hbWUgKm5wKTsKKytjaGFyICoqdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmVsaWRlKHN0cnVjdCBuYW1lICpuYW1lcyk7CisgaW50IGNvdW50KHN0cnVjdCBuYW1lICpucCk7Cisgc3RydWN0IG5hbWUgKmRlbGV0ZV9hbHRlcm5hdGVzKHN0cnVjdCBuYW1lICpucCk7CitkaWZmIC0tZ2l0IGEvbmFtZXMuYyBiL25hbWVzLmMKK2luZGV4IGM2OTU2MGYuLjQ1YmJhZWQgMTAwNjQ0CistLS0gYS9uYW1lcy5jCisrKysgYi9uYW1lcy5jCitAQCAtNTQ5LDcgKzU0OSw3IEBAIGNhdChzdHJ1Y3QgbmFtZSAqbjEsIHN0cnVjdCBuYW1lICpuMikKKyAgKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIG5hbWUgbGlzdCB3b24ndCBmaXQuCisgICovCisgY2hhciAqKgorLXVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisrdW5wYWNrKHN0cnVjdCBuYW1lICpzbW9wdHMsIHN0cnVjdCBuYW1lICpucCkKKyB7CisgCWNoYXIgKiphcCwgKip0b3A7CisgCXN0cnVjdCBuYW1lICpuOworQEAgLTU2NCw3ICs1NjQsNyBAQCB1bnBhY2soc3RydWN0IG5hbWUgKm5wKQorIAkgKiB0aGUgdGVybWluYXRpbmcgMCBwb2ludGVyLiAgQWRkaXRpb25hbCBzcG90cyBtYXkgYmUgbmVlZGVkCisgCSAqIHRvIHBhc3MgYWxvbmcgLWYgdG8gdGhlIGhvc3QgbWFpbGVyLgorIAkgKi8KKy0JZXh0cmEgPSAyOworKwlleHRyYSA9IDMgKyBjb3VudChzbW9wdHMpOworIAlleHRyYSsrOworIAltZXRvbyA9IHZhbHVlKCJtZXRvbyIpICE9IE5VTEw7CisgCWlmIChtZXRvbykKK0BAIC01ODEsNiArNTgxLDEwIEBAIHVucGFjayhzdHJ1Y3QgbmFtZSAqbnApCisgCQkqYXArKyA9ICItbSI7CisgCWlmICh2ZXJib3NlKQorIAkJKmFwKysgPSAiLXYiOworKwlmb3IgKDsgc21vcHRzICE9IE5VTEw7IHNtb3B0cyA9IHNtb3B0cy0+bl9mbGluaykKKysJCWlmICgoc21vcHRzLT5uX3R5cGUgJiBHREVMKSA9PSAwKQorKwkJCSphcCsrID0gc21vcHRzLT5uX25hbWU7CisrCSphcCsrID0gIi0tIjsKKyAJZm9yICg7IG4gIT0gTlVMTDsgbiA9IG4tPm5fZmxpbmspCisgCQlpZiAoKG4tPm5fdHlwZSAmIEdERUwpID09IDApCisgCQkJKmFwKysgPSBuLT5uX25hbWU7CitkaWZmIC0tZ2l0IGEvc2VuZG91dC5jIGIvc2VuZG91dC5jCitpbmRleCA3YjdmMmViLi5jNTJmMTVkIDEwMDY0NAorLS0tIGEvc2VuZG91dC5jCisrKysgYi9zZW5kb3V0LmMKK0BAIC04MzUsNyArODM1LDcgQEAgc3RhcnRfbXRhKHN0cnVjdCBuYW1lICp0bywgc3RydWN0IG5hbWUgKm1haWxhcmdzLCBGSUxFICppbnB1dCwKKyAjZW5kaWYJLyogSEFWRV9TT0NLRVRTICovCisgCisgCWlmICgoc210cCA9IHZhbHVlKCJzbXRwIikpID09IE5VTEwpIHsKKy0JCWFyZ3MgPSB1bnBhY2soY2F0KG1haWxhcmdzLCB0bykpOworKwkJYXJncyA9IHVucGFjayhtYWlsYXJncywgdG8pOworIAkJaWYgKGRlYnVnIHx8IHZhbHVlKCJkZWJ1ZyIpKSB7CisgCQkJcHJpbnRmKGNhdGdldHMoY2F0ZCwgQ0FUU0VULCAxODEsCisgCQkJCQkiU2VuZG1haWwgYXJndW1lbnRzOiIpKTsKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxMy1maW8uYy1VbmNvbmRpdGlvbmFsbHktcmVxdWlyZS13b3JkZXhwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU1OGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorRnJvbSAyYmFlOGVjZjA0ZWMyYmE2YmI5ZjBhZjViODA0ODVkZDBlZGI0MjdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmxvcmlhbiBXZWltZXIgPGZ3ZWltZXJAcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTcgTm92IDIwMTQgMTI6NDg6MjUgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzRdIGZpby5jOiBVbmNvbmRpdGlvbmFsbHkgcmVxdWlyZSB3b3JkZXhwIHN1cHBvcnQKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCA2NyArKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCA2NWU4ZjEwLi4xNTI5MjM2IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDMsMTIgKzQzLDE1IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylmaW8uYwkyLjc2IChncml0dGVyKSA5LzE2LzA5IjsKKyAjZW5kaWYgLyogbm90IGxpbnQgKi8KKyAKKyAjaW5jbHVkZSAicmN2LmgiCisrCisrI2lmbmRlZiBIQVZFX1dPUkRFWFAKKysjZXJyb3Igd29yZGV4cCBzdXBwb3J0IGlzIHJlcXVpcmVkCisrI2VuZGlmCisrCisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CisgI2luY2x1ZGUgPHN5cy93YWl0Lmg+CistI2lmZGVmCUhBVkVfV09SREVYUAorICNpbmNsdWRlIDx3b3JkZXhwLmg+CistI2VuZGlmCS8qIEhBVkVfV09SREVYUCAqLworICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjaWYgZGVmaW5lZCAoVVNFX05TUykKK0BAIC00ODEsNyArNDg0LDYgQEAgbmV4dDoKKyBzdGF0aWMgY2hhciAqCisgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyB7CistI2lmZGVmCUhBVkVfV09SREVYUAorIAl3b3JkZXhwX3Qgd2U7CisgCWNoYXIgKmNwOworIAlzaWdzZXRfdCBuc2V0OworQEAgLTUyNyw2NSArNTI5LDYgQEAgZ2xvYm5hbWUoY2hhciAqbmFtZSkKKyAJfQorIAl3b3JkZnJlZSgmd2UpOworIAlyZXR1cm4gY3A7CistI2Vsc2UJLyogIUhBVkVfV09SREVYUCAqLworLQljaGFyIHhuYW1lW1BBVEhTSVpFXTsKKy0JY2hhciBjbWRidWZbUEFUSFNJWkVdOwkJLyogYWxzbyB1c2VkIGZvciBmaWxlIG5hbWVzICovCistCWludCBwaWQsIGw7CistCWNoYXIgKmNwLCAqc2hlbGw7CistCWludCBwaXZlY1syXTsKKy0JZXh0ZXJuIGludCB3YWl0X3N0YXR1czsKKy0Jc3RydWN0IHN0YXQgc2J1ZjsKKy0KKy0JaWYgKHBpcGUocGl2ZWMpIDwgMCkgeworLQkJcGVycm9yKCJwaXBlIik7CistCQlyZXR1cm4gbmFtZTsKKy0JfQorLQlzbnByaW50ZihjbWRidWYsIHNpemVvZiBjbWRidWYsICJlY2hvICVzIiwgbmFtZSk7CistCWlmICgoc2hlbGwgPSB2YWx1ZSgiU0hFTEwiKSkgPT0gTlVMTCkKKy0JCXNoZWxsID0gU0hFTEw7CistCXBpZCA9IHN0YXJ0X2NvbW1hbmQoc2hlbGwsIDAsIC0xLCBwaXZlY1sxXSwgIi1jIiwgY21kYnVmLCBOVUxMKTsKKy0JaWYgKHBpZCA8IDApIHsKKy0JCWNsb3NlKHBpdmVjWzBdKTsKKy0JCWNsb3NlKHBpdmVjWzFdKTsKKy0JCXJldHVybiBOVUxMOworLQl9CistCWNsb3NlKHBpdmVjWzFdKTsKKy1hZ2FpbjoKKy0JbCA9IHJlYWQocGl2ZWNbMF0sIHhuYW1lLCBzaXplb2YgeG5hbWUpOworLQlpZiAobCA8IDApIHsKKy0JCWlmIChlcnJubyA9PSBFSU5UUikKKy0JCQlnb3RvIGFnYWluOworLQkJcGVycm9yKCJyZWFkIik7CistCQljbG9zZShwaXZlY1swXSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQljbG9zZShwaXZlY1swXSk7CistCWlmICh3YWl0X2NoaWxkKHBpZCkgPCAwICYmIFdURVJNU0lHKHdhaXRfc3RhdHVzKSAhPSBTSUdQSVBFKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgxLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gZmFpbGVkLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gMCkgeworLQkJZnByaW50ZihzdGRlcnIsIGNhdGdldHMoY2F0ZCwgQ0FUU0VULCA4MiwKKy0JCQkJCSJcIiVzXCI6IE5vIG1hdGNoLlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JaWYgKGwgPT0gc2l6ZW9mIHhuYW1lKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDgzLAorLQkJCQkiXCIlc1wiOiBFeHBhbnNpb24gYnVmZmVyIG92ZXJmbG93LlxuIiksIG5hbWUpOworLQkJcmV0dXJuIE5VTEw7CistCX0KKy0JeG5hbWVbbF0gPSAwOworLQlmb3IgKGNwID0gJnhuYW1lW2wtMV07ICpjcCA9PSAnXG4nICYmIGNwID4geG5hbWU7IGNwLS0pCistCQk7CistCWNwWzFdID0gJ1wwJzsKKy0JaWYgKHN0cmNocih4bmFtZSwgJyAnKSAmJiBzdGF0KHhuYW1lLCAmc2J1ZikgPCAwKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgY2F0Z2V0cyhjYXRkLCBDQVRTRVQsIDg0LAorLQkJCQkiXCIlc1wiOiBBbWJpZ3VvdXMuXG4iKSwgbmFtZSk7CistCQlyZXR1cm4gTlVMTDsKKy0JfQorLQlyZXR1cm4gc2F2ZXN0cih4bmFtZSk7CistI2VuZGlmCS8qICFIQVZFX1dPUkRFWFAgKi8KKyB9CisgCisgLyoKKy0tIAorMS45LjMKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNC1nbG9ibmFtZS1JbnZva2Utd29yZGV4cC13aXRoLVdSREVfTk9DTUQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1Y2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDczZmVmYTBjMWFjNzAwNDNlYzg0ZjJkOGI4ZjlmNjgzMjEzZjE2OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGbG9yaWFuIFdlaW1lciA8ZndlaW1lckByZWRoYXQuY29tPgorRGF0ZTogTW9uLCAxNyBOb3YgMjAxNCAxMzoxMTozMiArMDEwMAorU3ViamVjdDogW1BBVENIIDQvNF0gZ2xvYm5hbWU6IEludm9rZSB3b3JkZXhwIHdpdGggV1JERV9OT0NNRCAoQ1ZFLTIwMDQtMjc3MSkKKworVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorLS0tCisgZmlvLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9maW8uYyBiL2Zpby5jCitpbmRleCAxNTI5MjM2Li43NzRhMjA0IDEwMDY0NAorLS0tIGEvZmlvLmMKKysrKyBiL2Zpby5jCitAQCAtNDk3LDcgKzQ5Nyw3IEBAIGdsb2JuYW1lKGNoYXIgKm5hbWUpCisgCXNpZ2VtcHR5c2V0KCZuc2V0KTsKKyAJc2lnYWRkc2V0KCZuc2V0LCBTSUdDSExEKTsKKyAJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbnNldCwgTlVMTCk7CistCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgMCk7CisrCWkgPSB3b3JkZXhwKG5hbWUsICZ3ZSwgV1JERV9OT0NNRCk7CisgCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmbnNldCwgTlVMTCk7CisgCXN3aXRjaCAoaSkgeworIAljYXNlIDA6CistLSAKKzEuOS4zCisKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvMDAxNS11c3Itc2Jpbi1zZW5kbWFpbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjU5OTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21haWx4L2ZpbGVzLzAwMTUtdXNyLXNiaW4tc2VuZG1haWwucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRGVzY3JpcHRpb246IFNlbmRtYWlsIGlzIGF0IC91c3Ivc2Jpbi9zZW5kbWFpbAorIEFzIHBlciBEZWJpYW4gUG9saWN5IMKnMTEuNgorQXV0aG9yOiBSeWFuIEthdmFuYWdoIDxyYWtAZGViaWFuLm9yZz4KK09yaWdpbjogRGViaWFuCitGb3J3YXJkZWQ6IG5vCistLS0KK1RoaXMgcGF0Y2ggaGVhZGVyIGZvbGxvd3MgREVQLTM6IGh0dHA6Ly9kZXAuZGViaWFuLm5ldC9kZXBzL2RlcDMvCitJbmRleDogaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBwYXRjaCBpcyB0YWtlbiBmcm9tCitmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vcG9vbC9tYWluL2gvaGVpcmxvb20tbWFpbHgvaGVpcmxvb20tbWFpbHhfMTIuNS01LmRlYmlhbi50YXIueHoKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt1cHN0cmVhbSBpcyBkZWFkXQorCistLS0gaGVpcmxvb20tbWFpbHgtMTIuNS5vcmlnL01ha2VmaWxlCTIwMTEtMDQtMjYgMTc6MjM6MjIuMDAwMDAwMDAwIC0wNDAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9NYWtlZmlsZQkyMDE1LTAxLTI3IDEzOjIwOjA0LjczMzU0MjgwMSAtMDUwMAorQEAgLTEzLDcgKzEzLDcgQEAKKyAKKyBNQUlMUkMJCT0gJChTWVNDT05GRElSKS9uYWlsLnJjCisgTUFJTFNQT09MCT0gL3Zhci9tYWlsCistU0VORE1BSUwJPSAvdXNyL2xpYi9zZW5kbWFpbAorK1NFTkRNQUlMCT0gL3Vzci9zYmluL3NlbmRtYWlsCisgCisgREVTVERJUgkJPQorIAorSW5kZXg6IGhlaXJsb29tLW1haWx4LTEyLjUvbWFpbHguMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGhlaXJsb29tLW1haWx4LTEyLjUub3JpZy9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MTg6NDkuMDAwMDAwMDAwIC0wNTAwCisrKysgaGVpcmxvb20tbWFpbHgtMTIuNS9tYWlseC4xCTIwMTUtMDEtMjcgMTM6MjA6MzIuMzgyMzM2ODY3IC0wNTAwCitAQCAtNDkyMiw3ICs0OTIyLDcgQEAKKyB3aGljaCBqdXN0IGFjdHMgYXMgYSBwcm94eS4KKyAuUFAKKyBcZklNYWlseFxmUiBpbW1lZGlhdGVseSBjb250YWN0cyB0aGUgU01UUCBzZXJ2ZXIgKG9yCistLklSIFwlL3Vzci9saWIvc2VuZG1haWwgKQorKy5JUiBcJS91c3Ivc2Jpbi9zZW5kbWFpbCApCisgZXZlbiB3aGVuIG9wZXJhdGluZyBpbgorIC5JIGRpc2Nvbm5lY3RlZAorIG1vZGUuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9maWxlcy9leHBsaWNpdGx5LmRpc2FibGUua3JiNS5zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3NGZkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvZmlsZXMvZXhwbGljaXRseS5kaXNhYmxlLmtyYjUuc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitrcmI1IHN1cHBvcnQgaXMgYXV0b2RldGVjdGVkIGZyb20gc3lzcm9vdCBtYWtpbmcgYnVpbGRzIHVuZGV0ZXJtaW5pc3RpYworZmVlbCBmcmVlIHRvIGltcHJvdmUgdGhpcyB0byBzdXBwb3J0IGV4cGxpY2l0bHkgZW5hYmxpbmcvZGlzYWJsaW5nIGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBhL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNjoxMS4xNzc3OTIzMzQgKzAyMDAKKysrKyBiL21ha2Vjb25maWcJMjAxMy0wNy0yMSAxNTowNzoyMC4wMjg3OTM5OTQgKzAyMDAKK0BAIC00MjQsMzYgKzQyNCw2IEBACisgfQorICEKKyAKKy08JHRtcDIuYyBsaW5rX2NoZWNrIGdzc2FwaSAnZm9yIEdTU0FQSSBpbiBsaWJnc3MnIFwKKy0JCScjZGVmaW5lIFVTRV9HU1NBUEknICctbGdzcycgfHwKKy0JPCR0bXAyLmMgbGlua19jaGVjayBnc3NhcGkgJ2ZvciBHU1NBUEkgaW4gbGliZ3NzYXBpX2tyYjUnIFwKKy0JCQknI2RlZmluZSBVU0VfR1NTQVBJJyAnLWxnc3NhcGlfa3JiNScgfHwKKy0JCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaV9rcmI1LCBvbGQtc3R5bGUnIFwKKy0JCQkJJyNkZWZpbmUgVVNFX0dTU0FQSQorLSNkZWZpbmUgR1NTQVBJX09MRF9TVFlMRScgJy1sZ3NzYXBpX2tyYjUnIDw8XCEgfHwgXAorLQkJCWxpbmtfY2hlY2sgZ3NzYXBpICdmb3IgR1NTQVBJIGluIGxpYmdzc2FwaScgXAorLQkJCQknI2RlZmluZSBVU0VfR1NTQVBJCistI2RlZmluZQlHU1NBUElfUkVHX0lOQ0xVREUnICctbGdzc2FwaScgPDxcJQorLSNpbmNsdWRlIDxnc3NhcGkvZ3NzYXBpLmg+CistI2luY2x1ZGUgPGdzc2FwaS9nc3NhcGlfZ2VuZXJpYy5oPgorLQorLWludCBtYWluKHZvaWQpCisteworLQlnc3NfaW1wb3J0X25hbWUoMCwgMCwgZ3NzX250X3NlcnZpY2VfbmFtZSwgMCk7CistCWdzc19pbml0X3NlY19jb250ZXh0KDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDApOworLQlyZXR1cm4gMDsKKy19CistIQorLSNpbmNsdWRlIDxnc3NhcGkuaD4KKy0KKy1pbnQgbWFpbih2b2lkKQorLXsKKy0JZ3NzX2ltcG9ydF9uYW1lKDAsIDAsIEdTU19DX05UX0hPU1RCQVNFRF9TRVJWSUNFLCAwKTsKKy0JZ3NzX2luaXRfc2VjX2NvbnRleHQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCk7CistCXJldHVybiAwOworLX0KKy0lCistCisgY2F0ID4kdG1wMi5jIDw8XCEKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2lmZGVmIEhBVkVfTkxfTEFOR0lORk8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYWlseC9tYWlseF8xMi41LTUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYTkwNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFpbHgvbWFpbHhfMTIuNS01LmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAibWFpbHggaXMgdGhlIHRyYWRpdGlvbmFsIGNvbW1hbmQtbGluZS1tb2RlIG1haWwgdXNlciBhZ2VudCIKKworREVTQ1JJUFRJT04gPSAiTWFpbHggaXMgZGVyaXZlZCBmcm9tIEJlcmtlbGV5IE1haWwgYW5kIGlzIGludGVuZGVkIHByb3ZpZGUgdGhlIFwKK2Z1bmN0aW9uYWxpdHkgb2YgdGhlIFBPU0lYIG1haWx4IGNvbW1hbmQgd2l0aCBhZGRpdGlvbmFsIHN1cHBvcnQgXAorZm9yIE1JTUUsIElNQVAsIFBPUDMsIFNNVFAsIGFuZCBTL01JTUUuIgorCitIT01FUEFHRSA9ICJodHRwOi8vaGVpcmxvb20uc291cmNlZm9yZ2UubmV0L21haWx4Lmh0bWwiCitTRUNUSU9OID0gImNvbnNvbGUvbmV0d29yayIKK0xJQ0VOU0UgPSAiQlNEICYgTVBMLTEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00MjAyYTBhNjI5MTBjZjk0ZjdhZjhhMzQzNmEyYTJkZCIKKworREVQRU5EUyA9ICJvcGVuc3NsIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9oL2hlaXJsb29tLW1haWx4L2hlaXJsb29tLW1haWx4XzEyLjUub3JpZy50YXIuZ3o7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRG9uLXQtcmV1c2Utd2Vhay1zeW1ib2wtb3B0b3B0LXRvLWZpeC1GVEJGUy1vbi1taXBzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDItUGF0Y2hlZC1vdXQtU1NMMi1zdXBwb3J0LXNpbmNlLWl0LWlzLW5vLWxvbmdlci1zdXBwby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAzLUZpeGVkLUxpbnRpYW4td2FybmluZy13YXJuaW5nLW1hY3JvLU4tbm90LWRlZmluZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMS1vdXRvZi1JbnRyb2R1Y2UtZXhwYW5kYWRkci1mbGFnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTItdW5wYWNrLURpc2FibGUtb3B0aW9uLXByb2Nlc3NpbmctZm9yLWVtYWlsLWFkZHJlc3Nlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEzLWZpby5jLVVuY29uZGl0aW9uYWxseS1yZXF1aXJlLXdvcmRleHAtc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE0LWdsb2JuYW1lLUludm9rZS13b3JkZXhwLXdpdGgtV1JERV9OT0NNRC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE1LXVzci1zYmluLXNlbmRtYWlsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4cGxpY2l0bHkuZGlzYWJsZS5rcmI1LnN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjlhNjAzM2VmMTQxMjgyNGQwMmViOWQ5MjEzY2IxZjIiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIwMTViYTQyMDkxMzU4NjdmMzdhMDI0NWQyMjIzNWEzOTJiOGJiZWQ5NTY5MTMyODZiODg3YzJlMmE5YTQyMWFkIgorCitTID0gIiR7V09SS0RJUn0vaGVpcmxvb20tbWFpbHgtMTIuNSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EX0JTRF9TT1VSQ0UgLURERUJJQU4gLUkke1N9L0VYVCIKKworIyAiU1RSSVA9dHJ1ZSIgbWVhbnMgdGhhdCAndHJ1ZScgY29tbWFuZCB3aWxsIGJlIHVzZWQgdG8gJ3N0cmlwJyBmaWxlcyB3aGljaCB3aWxsIGFjaGlldmUgdGhlIGVmZmVjdCBvZiBub3Qgc3RyaXBwaW5nIHRoZW0KKyMgbWFpbHgncyBNYWtlZmlsZSBkb2Vzbid0IGFsbG93IGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5IHRvIGF2b2lkIHN0cmlwcGluZworRVhUUkFfT0VNQUtFID0gIlNFTkRNQUlMPSR7c2JpbmRpcn0vc2VuZG1haWwgSVB2Nj0tREhBVkVfSVB2Nl9GVU5DUyBQUkVGSVg9L3VzciBVQ0JJTlNUQUxMPS91c3IvYmluL2luc3RhbGwgU1RSSVA9dHJ1ZSIKKworIyBUaGUgbWFrZWNvbmZpZyBjYW4ndCBydW4gcGFyYWxsZWxseSwgb3RoZXJ3aXNlIHRoZSBjaGVja2luZyByZXN1bHRzCisjIG1pZ2h0IGJlIGluY29ycmVjdCBhbmQgbGVhZCB0byBlcnJvcnM6CisjIGZpby5jOjU2OjE3OiBmYXRhbCBlcnJvcjogc3NsLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyMgI2luY2x1ZGUgPHNzbC5oPgorUEFSQUxMRUxfTUFLRSA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuLXBhZ2VzL21hbi1wYWdlc180LjAyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjkwYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi1wYWdlcy9tYW4tcGFnZXNfNC4wMi5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkxpbnV4IG1hbi1wYWdlcyIKK0RFU0NSSVBUSU9OID0gIlRoZSBMaW51eCBtYW4tcGFnZXMgcHJvamVjdCBkb2N1bWVudHMgdGhlIExpbnV4IGtlcm5lbCBhbmQgQyBsaWJyYXJ5IGludGVyZmFjZXMgdGhhdCBhcmUgZW1wbG95ZWQgYnkgdXNlciBwcm9ncmFtcyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvZG9jcy9tYW4tcGFnZXMiCitMSUNFTlNFID0gIkdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO21kNT04ZjJhM2Q0MzA1N2Q0NThlNTA2NjcxNDk4MDU2N2E2MCIKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9kb2NzLyR7QlBOfS9BcmNoaXZlLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGYzMjc5Nzk4YTMzNDViYjJjNzA5NTg0YzgzNjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQyMzI0ZjllZDQ3Yzg5YTQzY2IzN2I2YmIwZDVmYmNhZDQ0ODM4ZWVlNDVjZDM5NGUxODFjOThkMDM4YzQ5ZmYiCisKK1JERVBFTkRTXyR7UE59ID0gIm1hbiIKKworZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9Cit9CisKKyMgT25seSBkZWxpdmVyZXMgbWFuLXBhZ2VzIHNvIEZJTEVTXyR7UE59IGdldHMgZXZlcnl0aGluZworRklMRVNfJHtQTn0tZG9jID0gIiIKK0ZJTEVTXyR7UE59ID0gIiR7bWFuZGlyfS8qIgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAicGFzc3dkLjUgZ2V0c3BuYW0uMyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwYXNzd2QuNV0gPSAiJHttYW5kaXJ9L21hbjUvcGFzc3dkLjUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0c3BuYW0uM10gPSAiJHttYW5kaXJ9L21hbjMvZ2V0c3BuYW0uMyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL2NvbmZpZ3VyZV9zZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OWU2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9jb25maWd1cmVfc2VkLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK21hbjogcmVwbGFjZSAnLCcgd2l0aCAnIycKKworU29tZXRpbWVzLCB0aGUgcGFyYW1ldGVycyBvZiBDQy9CVUlMRF9DQyBjb250YWlucyB0aGUgJywnLCB3aGljaAorY2F1c2UgdGhlIHNlZCBjb21tYW5kIGZhaWxlZCwgc28gcmVwbGFjZSB0aGUgJywnIHdpdGggJyMnCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBZdWUgVGFvIDxZdWUuVGFvQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZSB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDlmNjJjZjkuLjlhNTY1YWUgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTEzMjEsOSArMTMyMSw5IEBAIGRvCisgICBlY2hvICJDcmVhdGluZyAkaW5maWxlIGZyb20gJGluZmlsZS5pbiIKKyAgIHNlZCAtZSAnCisgcyxAdmVyc2lvbkAsJHZlcnNpb24sCistcyxAQ0NALCRDQywKKytzI0BDQ0AjJENDIworIHMsQEVYRUVYVEAsJEVYRUVYVCwKKy1zLEBCVUlMRF9DQ0AsJEJVSUxEX0NDLAorK3MjQEJVSUxEX0NDQCMkQlVJTERfQ0MjCisgcyxASU5TVEFMTEAsJElOU1RBTEwsCisgcyxAREVGU0AsJERFRlMsCisgcyxATElCU0AsJExJQlMsCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjgzNGJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWctbm9ucm9vdGJ1aWxkLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtdSAtciBtYW4tMS41Zy5vbGQvY29uZmlndXJlIG1hbi0xLjVnL2NvbmZpZ3VyZQorLS0tIG1hbi0xLjVnLm9sZC9jb25maWd1cmUJV2VkIEFwciAgNyAwNDoxNjowNSAxOTk5CisrKysgbWFuLTEuNWcvY29uZmlndXJlCU1vbiBNYXkgMTUgMTU6MjI6NDQgMjAwMAorQEAgLTc5MSw3ICs3OTEsNyBAQAorICAgICByZWFkIG1vZGUKKyAgICAgaWYgdGVzdCAiJG1vZGUiICE9ICIiOyB0aGVuIG1hbl9tb2RlPSRtb2RlOyBmaQorICAgZmkKKy0gIG1hbl9pbnN0YWxsX2ZsYWdzPSItbSAkbWFuX21vZGUgLW8gJG1hbl91c2VyIC1nICRtYW5fZ3JvdXAiCisrICBtYW5faW5zdGFsbF9mbGFncz0iIgorIGZpCisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtZ2VuY2F0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRiMTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLWdlbmNhdC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBnZW5jYXQvZ2VubGliLmMJMjAwNi0wOC0wMiAyMDoxMTo0NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBnZW5jYXQvZ2VubGliLmMub2RlbgkyMDA4LTEyLTIxIDE5OjE4OjUwLjAwMDAwMDAwMCArMDEwMAorQEAgLTQ3LDYgKzQ3LDcgQEAgdXAtdG8tZGF0ZS4gIE1hbnkgdGhhbmtzLgorIDAxLzE0LzkxICAgNCBuYXpndWwJT2ZmIGJ5IG9uZSBvbiBudW1iZXIgc3BlY2lmaWVkIGVudHJpZXMKKyAqLworIAorKyN1bmRlZiBfR05VX1NPVVJDRQorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaWZkZWYgU1lTVgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aDEtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjMxZWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWgxLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluLm1pa2UJRnJpIEFwciAgOSAxMzozNTo1NCAxOTk5CisrKysgbWFuLTEuNWcvbWFuL01ha2VmaWxlLmluCUZyaSBBcHIgIDkgMTM6MzY6NDUgMTk5OQorQEAgLTEsOCArMSw4IEBACisgIyBvbmx5IGV4ZWN1dGVkIGZyb20gYSBzdWJkaXIKKyBNQU4xID0gbWFuIHdoYXRpcyBhcHJvcG9zCistTUFONSA9IG1hbi5jb25mCisrTUFONSA9IG1hbi5jb25maWcKKyBNQU44ID0gbWFrZXdoYXRpcworLUFMTCA9IG1hbi4xIHdoYXRpcy4xIGFwcm9wb3MuMSBtYW4uY29uZi41CisrQUxMID0gbWFuLjEgd2hhdGlzLjEgYXByb3Bvcy4xIG1hbi5jb25maWcuNQorIE1BWUJFOCA9IG1ha2V3aGF0aXMKKyAKKyAuU1VGRklYRVM6IC5tYW4gLjEgLjUgLjgKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLWluaXRpYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1NmMwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaC5pbml0aWFsCVR1ZSBKdWwgIDMgMTU6Mzg6MzkgMjAwMQorKysrIG1hbi0xLjVpMi9zcmMvbWFrZXdoYXRpcy5zaAlUdWUgSnVsICAzIDE1OjM5OjM5IDIwMDEKK0BAIC04MSw4ICs4MSwxMCBAQAorIAljb250aW51ZTs7CisgICAgIC1zKSBzZXRzZWN0aW9ucz0xCisgCWNvbnRpbnVlOzsKKy0gICAgLXUpIGZpbmRhcmc9Ii1uZXdlciAvdmFyL2NhY2hlL21hbi93aGF0aXMiCistCXVwZGF0ZT0xCisrICAgIC11KSBpZiBbIC1lIC92YXIvY2FjaGUvbWFuL3doYXRpcyBdOyB0aGVuCisrCSAgZmluZGFyZz0iLW5ld2VyIC92YXIvY2FjaGUvbWFuL3doYXRpcyIKKysJICB1cGRhdGU9MQorKwlmaQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKKyAJY29udGludWU7OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41aTItbmV3bGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTFkZjVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW5ld2xpbmUucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gc3JjL21hbi5jCTIwMDgtMTItMjEgMTk6MTc6MzEuMDAwMDAwMDAwICswMTAwCisrKysgc3JjL21hbi5jLm9kZW4JMjAwOC0xMi0yMSAxOToxNzozOC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0zOTEsNyArMzkxLDcgQEAgYWdhaW46CisgCSAgYmVnKys7CisgCisgICAgICBlbmQgPSBiZWc7CistICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcpCisrICAgICB3aGlsZSAoKmVuZCAhPSAnICcgJiYgKmVuZCAhPSAnXHQnICYmICplbmQgIT0gJ1xuJyAmJiAqZW5kICE9ICdcMCcgJiYgKGVuZC1idWYpPEJVRlNJWkUpCisgCSAgZW5kKys7CQkvKiBub3RlIHRoYXQgYnVmIGlzIE5VTC10ZXJtaW5hdGVkICovCisgICAgICAqZW5kID0gJ1wwJzsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQyODgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWkyLW92ZXJmbG93LnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVpMi9zcmMvbWFuLmMub3ZlcmZsb3cJTW9uIEp1biAyNSAwMDowMTo0NSAyMDAxCisrKysgbWFuLTEuNWkyL3NyYy9tYW4uYwlNb24gSnVuIDI1IDAwOjAxOjQ1IDIwMDEKK0BAIC0zODEsNiArMzgxLDkgQEAKKyAJICBzdHJjYXQobmFtZSwgIi8iKTsKKyAJICBzdHJjYXQobmFtZSwgYmVnKTsKKyAgICAgIH0KKysgICAgIC8qIElmIHRoaXMgaXMgdG9vIGxvbmcsIGJhZCB0aGluZ3MgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiAqCisrICAgICAgKiB3ZSBzaG91bGQgcXVpdCBJTU1FRElBVEVMWS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKysgICAgIGlmKHN0cmxlbihuYW1lKT5zaXplb2YodWx0bmFtZSkpIF9leGl0KDEpOworIAorICAgICAgZ290byBhZ2FpbjsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1pMThuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWUwOWMwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotaTE4bi5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9tc2dzL2luc3Quc2guaTE4bglXZWQgQXByIDI1IDEwOjQwOjUwIDIwMDEKKysrKyBtYW4tMS41ai9tc2dzL2luc3Quc2gJV2VkIEFwciAyNSAxMDo0MToxNyAyMDAxCitAQCAtMjcsOCArMjcsNyBAQAorIGZvciBqIGluICRNOyBkbworICAgaWYgWyAtZiAkaiBdOyB0aGVuCisgICAgIGk9YGVjaG8gJGogfCBzZWQgLWUgJ3MvbWVzcy4vLzsgcy8uY2F0Ly8nYAorLSAgICBkZXN0PWBlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorLSAgICBkZXN0PSR7UFJFRklYfSRkZXN0CisrICAgIGRlc3Q9JHtQUkVGSVh9L2BlY2hvICRsb2NkaXIgfCBzZWQgLWUgInMvJU4vbWFuLzsgcy8lTC8kaS8iYAorICAgICBlY2hvICJta2RpciAtcCBgZGlybmFtZSAkZGVzdGAiCisgICAgIG1rZGlyIC1wIGBkaXJuYW1lICRkZXN0YDsKKyAgICAgZWNobyAiaW5zdGFsbCAtYyAtbSA2NDQgJGogJGRlc3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTFkZGRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWotbm9jYWNoZS5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4ubm9jYWNoZQlUaHUgTm92IDIyIDE1OjA3OjEyIDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmNvbmYuaW4JVGh1IE5vdiAyMiAxNTowNzoxMiAyMDAxCitAQCAtODEsNiArODEsOSBAQAorICMgCisgI05PQ0FDSEUKKyAjCisrIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzCisrTk9DQUNIRQorKyMKKyAjIFVzZWZ1bCBwYXRocyAtIG5vdGUgdGhhdCBDT0wgc2hvdWxkIG5vdCBiZSBkZWZpbmVkIHdoZW4KKyAjIE5ST0ZGIGlzIGRlZmluZWQgYXMgImdyb2ZmIC1UYXNjaWkiIG9yICJncm9mZiAtVGxhdGluMSI7CisgIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVqLXV0ZjgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZDNlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ai11dGY4LnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL2NvbmZpZ3VyZS51dGY4CVRodSBOb3YgMjIgMTU6MDI6MzUgMjAwMQorKysrIG1hbi0xLjVqL2NvbmZpZ3VyZQlUaHUgTm92IDIyIDE1OjAzOjE1IDIwMDEKK0BAIC00MDgsOSArNDA4LDkgQEAKKyAgIEZnYXdrPS9iaW4vZ2F3aworICAgRmF3az0vYmluL2dhd2sKKyAgIEZtYXdrPW1pc3NpbmcKKy0gIHRyb2ZmPSIiCistICBucm9mZj0iIgorLSAgam5yb2ZmPSIiCisrICB0cm9mZj0vdXNyL2Jpbi90cm9mZgorKyAgbnJvZmY9L3Vzci9iaW4vbnJvZmYKKysgIGpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgZXFuPSIiCisgICBuZXFuPSIiCisgICBqbmVxbj0iIgorQEAgLTQ1Myw2ICs0NTMsOCBAQAorICAgICBkb25lCisgICBkb25lCisgICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZucm9mZj0vdXNyL2Jpbi9ucm9mZgorKyAgRmpucm9mZj0vdXNyL2Jpbi9ucm9mZgorICAgRmdlcW49L3Vzci9iaW4vZ2VxbgorICAgRmd0Ymw9L3Vzci9iaW4vZ3RibAorICAgRmNvbD0vdXNyL2Jpbi9jb2wKK0BAIC00ODUsMjUgKzQ4NywyNSBAQAorICAgdGhlbgorICAgICBpZiB0ZXN0ICRGbnJvZmYgPSAibWlzc2luZyIKKyAgICAgdGhlbgorLSAgICAgIG5yb2ZmPSJucm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSJucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZWxzZQorLSAgICAgIG5yb2ZmPSIkRm5yb2ZmIC1UbGF0aW4xIC1tYW5kb2MiCisrICAgICAgbnJvZmY9IiRGbnJvZmYgLVR1dGY4IC1tYW5kb2MiCisgICAgIGZpCisgICAgIHRyb2ZmPSJ0cm9mZiAtbWFuZG9jIgorICAgICBlY2hvICJXYXJuaW5nOiBjb3VsZCBub3QgZmluZCBncm9mZiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAkRm5yb2ZmID0gIm1pc3NpbmciCisgICAgIHRoZW4KKy0gICAgICBucm9mZj0iJEZncm9mZiAtVGxhdGluMSAtbWFuZG9jIgorKyAgICAgIG5yb2ZmPSIkRmdyb2ZmIC1UdXRmOCAtbWFuZG9jIgorICAgICBlbHNlCistICAgICAgbnJvZmY9IiRGbnJvZmYgLVRsYXRpbjEgLW1hbmRvYyIKKysgICAgICBucm9mZj0iJEZucm9mZiAtVHV0ZjggLW1hbmRvYyIKKyAgICAgZmkKKyAgICAgdHJvZmY9IiRGZ3JvZmYgLVRwcyAtbWFuZG9jIgorLSAgICBqbnJvZmY9IiRGZ3JvZmYgLVRuaXBwb24gLW1hbmRvY2oiCisrICAgIGpucm9mZj0iJEZqbnJvZmYgLVR1dGY4IC1tYW5kb2NqIgorICAgZmkKKyAgIGVxbj0iJEZnZXFuIC1UcHMiCistICBuZXFuPSIkRmdlcW4gLVRsYXRpbjEiCistICBqbmVxbj0iJEZnZXFuIC1UbmlwcG9uIgorKyAgbmVxbj0iJEZnZXFuIC1UdXRmOCIKKysgIGpuZXFuPSIkRmdlcW4gLVR1dGY4IgorICAgdGJsPSIkRmd0YmwiCisgICBjb2w9IiRGY29sIgorICAgdmdyaW5kPSIkRnZncmluZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstY29uZnBhdGgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3NDZjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLWNvbmZwYXRoLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIGNvbmZpZ3VyZQkyMDA2LTA1LTAxIDE5OjU2OjE0LjAwMDAwMDAwMCArMDIwMAorKysrIGNvbmZpZ3VyZS5vZGVuCTIwMDgtMTItMjEgMTk6MTY6NTAuMDAwMDAwMDAwICswMTAwCitAQCAtMTk4LDcgKzE5OCw3IEBACisgICAgIGNvbmZkaXI9IiR7Y29uZnByZWZpeH0vc2hhcmUvbWlzYyIKKyAgIGZpCisgZmkKKy1jb25mZmlsZW5hbWU9Im1hbi5jb25mIgorK2NvbmZmaWxlbmFtZT0ibWFuLmNvbmZpZyIKKyAKKyBpZiB0ZXN0ICIkUkFORE9NIiA9ICIkUkFORE9NIjsgdGhlbgorICAgIyBQbGFpbiBvbGQgQm91cm5lIHNoZWxsLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41ay1ub25hc2NpaS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYyZDliCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstbm9uYXNjaWkucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCistLS0gLi9zcmMvYXByb3Bvcy5zaC5ub25hc2NpaQkyMDAxLTExLTIzIDAwOjMwOjQyLjAwMDAwMDAwMCArMDEwMAorKysrIC4vc3JjL2Fwcm9wb3Muc2gJMjAwMi0wOC0xMyAxNTo0NDo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xOCw5ICsxOCw5IEBACisgCisgIyBXaGVuIG1hbiBwYWdlcyBpbiB5b3VyIGZhdm9yaXRlIGxvY2FsZSBsb29rIHRvIGdyZXAgbGlrZSBiaW5hcnkgZmlsZXMKKyAjIChhbmQgeW91IHVzZSBHTlUgZ3JlcCkgeW91IG1heSB3YW50IHRvIGFkZCB0aGUgJ2EnIG9wdGlvbiB0byAqZ3JlcG9wdDEuCistYXByb3Bvc2dyZXBvcHQxPSdpJworK2Fwcm9wb3NncmVwb3B0MT0naWEnCisgYXByb3Bvc2dyZXBvcHQyPScnCistd2hhdGlzZ3JlcG9wdDE9J2l3JworK3doYXRpc2dyZXBvcHQxPSdpd2EnCisgd2hhdGlzZ3JlcG9wdDI9J14nCisgZ3JlcG9wdDE9JCVhcHJvcG9zX29yX3doYXRpcyVncmVwb3B0MQorIGdyZXBvcHQyPSQlYXByb3Bvc19vcl93aGF0aXMlZ3JlcG9wdDIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNWstc29maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBiOTI1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVrLXNvZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVqL3NyYy9tYW4uYy5zb2ZpeAlUaHUgTm92IDIyIDE0OjUxOjQ0IDIwMDEKKysrKyBtYW4tMS41ai9zcmMvbWFuLmMJVGh1IE5vdiAyMiAxNDo1Mjo0NCAyMDAxCitAQCAtMzAwLDcgKzMwMCw3IEBACisgCisgICAgICBpZiAoc3RybGVuKG5hbWUwKSA+PSBzaXplb2YodWx0bmFtZSkpCisgCSAgICAgcmV0dXJuIG5hbWUwOworLSAgICAgc3RyY3B5KHVsdG5hbWUsIG5hbWUwKTsKKysgICAgIHN0cm5jcHkodWx0bmFtZSwgbmFtZTAsIEJVRlNJWkUtMzIpOworICAgICAgbmFtZSA9IHVsdG5hbWU7CisgCisgYWdhaW46CitAQCAtMzMyLDcgKzMzMiw3IEBACisgCSAgICogLnNvIGZpbGVzIC0gd2UgY291bGQgZ2xvYiBmb3IgYWxsIHBvc3NpYmxlIGV4dGVuc2lvbnMsCisgCSAgICogZm9yIG5vdzogb25seSB0cnkgLmd6CisgCSAgICovCistCSAgZWxzZSBpZiAoZnAgPT0gTlVMTCAmJiBnZXRfZXhwYW5kZXIoIi5neiIpICYmCisrCSAgaWYgKGZwID09IE5VTEwgJiYgZ2V0X2V4cGFuZGVyKCIuZ3oiKSAmJgorIAkJICAgc3RybGVuKG5hbWUpK3N0cmxlbigiLmd6IikgPCBCVUZTSVpFKSB7CisgCSAgICAgICBzdHJjYXQobmFtZSwgIi5neiIpOworIAkgICAgICAgZnAgPSBmb3BlbiAobmFtZSwgInIiKTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWcxMTYyMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTEyOTk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmFkCTIwMDMtMTItMTEgMTk6MTc6MTAuMDAwMDAwMDAwICswMTAwCisrKysgLi9jb25maWd1cmUJMjAwMy0xMi0xMSAxOToxNzoyNy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNiw3ICsyNiw3IEBACisgIyAoSW5kZWVkLCAtciBtYXkgY2F1c2UgdGhlIHRlcm1pbmFsIHRvIGdldCBpbnRvIGZ1bm55IHN0YXRlcy4KKyAjIFZlcnkgaW5jb252ZW5pZW50LiBGb3Igdmlld2luZyBwYWdlcyBpbiBzdHJhbmdlIGxvY2FsZXMsIHNldCBMQ18qLikKKyAjCistREVGQVVMVExFU1NPUFQ9Ii1pcyIKKytERUZBVUxUTEVTU09QVD0iLWlzciIKKyAjCisgIyBOb3RlIHRoYXQgbm90IGNyZWF0aW5nIGFueSBjYXQgZGlyZWN0b3JpZXMgKC92YXIvY2FjaGUvbWFuIG9yIHNvKQorICMgYW5kIG5vdCBtYWtpbmcgbWFuIHN1aWQgb3Igc2dpZCBpcyByZWNvbW1lbmRlZC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjOTdmNTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItYnVpbGRyb290LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIC4vY29uZmlndXJlLmxlc3MJMjAwMy0xMi0xMSAxOToxODoxNS4wMDAwMDAwMDAgKzAxMDAKKysrKyAuL2NvbmZpZ3VyZQkyMDAzLTEyLTExIDE5OjIwOjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTQwMSwxOCArNDAxLDEzIEBACisgCisgaWYgdGVzdCAiJGFucyIgPSAiZmFsc2UiCisgdGhlbgorLSAgZm9yIGkgaW4gbW9yZSBsZXNzIGNtcCBjYXQgYXdrIGdhd2sgbWF3aworLSAgZG8KKy0gICAgZXZhbCBGJGk9Im1pc3NpbmciCistICAgIGZvciBqIGluICRERUZQQVRICistICAgIGRvCistICAgICAgaWYgdGVzdCAtZiAkai8kaQorLSAgICAgIHRoZW4KKy0JZXZhbCBGJGk9JGovJGkKKy0JYnJlYWsKKy0gICAgICBmaQorLSAgICBkb25lCistICBkb25lCisrICBGbW9yZT0vYmluL21vcmUKKysgIEZsZXNzPS91c3IvYmluL2xlc3MKKysgIEZjbXA9L3Vzci9iaW4vY21wCisrICBGY2F0PS9iaW4vY2F0CisrICBGZ2F3az0vYmluL2dhd2sKKysgIEZhd2s9L2Jpbi9nYXdrCisrICBGbWF3az1taXNzaW5nCisgICB0cm9mZj0iIgorICAgbnJvZmY9IiIKKyAgIGpucm9mZj0iIgorQEAgLTQ1Nyw2ICs0NTIsMTkgQEAKKyAgICAgICBmaQorICAgICBkb25lCisgICBkb25lCisrICBGZ3JvZmY9L3Vzci9iaW4vZ3JvZmYKKysgIEZnZXFuPS91c3IvYmluL2dlcW4KKysgIEZndGJsPS91c3IvYmluL2d0YmwKKysgIEZjb2w9L3Vzci9iaW4vY29sCisrICBGZ3JlZmVyPS91c3IvYmluL2dyZWZlcgorKyAgRmdwaWM9L3Vzci9iaW4vZ3BpYworKyAgRm1vcmU9L2Jpbi9tb3JlCisrICBGbGVzcz0vdXNyL2Jpbi9sZXNzCisrICBGY21wPS91c3IvYmluL2NtcAorKyAgRmNhdD0vYmluL2NhdAorKyAgRmdhd2s9L2Jpbi9nYXdrCisrCisrCisgICBmb3IgaSBpbiBlcW4gdGJsIHJlZmVyIHBpYworICAgZG8KKyAgICAgaWYgdGVzdCBgZXZhbCBlY2hvIFxcJEZnJGlgID0gIm1pc3NpbmciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItbm8tY29sb3ItZm9yLXByaW50aW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODVmZjFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4tMS41bTIvY29uZmlndXJlLmNvbG9yCTIwMDYtMDktMTYgMTg6Mjc6MzcuMDAwMDAwMDAwICswMjAwCisrKysgbWFuLTEuNW0yL2NvbmZpZ3VyZQkyMDA2LTA5LTE2IDE4OjI4OjQ0LjAwMDAwMDAwMCArMDIwMAorQEAgLTUzOSw2ICs1MzksOCBAQAorICAgICB0cm9mZj0iJHRyb2ZmIC1jIgorICAgICBucm9mZj0iJG5yb2ZmIC1jIgorICAgICBqbnJvZmY9IiRqbnJvZmYgLWMiCisrZWxzZQorKyAgICB0cm9mZj0iJHRyb2ZmIC1jIgorIGZpCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXNpZ3BpcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNzhlYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi1zaWdwaXBlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjVtMi9zcmMvdXRpbC5jX3NpZ3BpcGUJMjAwNi0xMi0wOSAxMzo0MzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4tMS41bTIvc3JjL3V0aWwuYwkyMDA2LTEyLTA5IDEzOjUzOjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTExNiwxMSArMTE2LDE0IEBACisgc3RhdGljIGludAorIHN5c3RlbTEgKGNvbnN0IGNoYXIgKmNvbW1hbmQpIHsKKyAJdm9pZCAoKnByZXZfaGFuZGxlcikoaW50KSA9IHNpZ25hbCAoU0lHSU5ULGNhdGNoX2ludCk7CisrCXNpZ25hbCAoU0lHUElQRSxTSUdfSUdOKTsKKyAJaW50IHJldCA9IHN5c3RlbShjb21tYW5kKTsKKyAKKyAJLyogY2hpbGQgdGVybWluYXRlZCB3aXRoIHNpZ25hbD8gKi8KKyAJaWYgKFdJRlNJR05BTEVEKHJldCkgJiYKKy0JICAgIChXVEVSTVNJRyhyZXQpID09IFNJR0lOVCB8fCBXVEVSTVNJRyhyZXQpID09IFNJR1FVSVQpKQorKwkgICAgKFdURVJNU0lHKHJldCkgPT0gU0lHSU5UIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdQSVBFIHx8CisrCQkgV1RFUk1TSUcocmV0KSA9PSBTSUdRVUlUKSkKKyAJCWV4aXQoMSk7CisgCisgCS8qIG9yIHdlIGNhdWdodCBhbiBpbnRlcnJ1cHQ/ICovCitAQCAtMTI4LDYgKzEzMSw3IEBACisgCQlleGl0KDEpOworIAorIAlzaWduYWwoU0lHSU5ULHByZXZfaGFuZGxlcik7CisrCXNpZ25hbChTSUdQSVBFLFNJR19ERkwpOworIAlyZXR1cm4gcmV0OworIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjVtMi10dl9maHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS41bTItdHZfZmhzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNjZkNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNW0yLXR2X2Zocy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKKy0tLSBtYW4vTWFrZWZpbGUuaW4JMjAwOC0xMi0yMSAxOToxOTozMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBtYW4vTWFrZWZpbGUuaW4ub2RlbgkyMDA4LTEyLTIxIDE5OjE5OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDYgKzM0LDE1IEBACisgCWZvciBpIGluICQoTUFOOCk7IFwKKyAJCWRvIGlmIHRlc3QgLWYgJCRpLjg7IHRoZW4gJChJTlNUQUxMKSAkJGkuOCAkKG1hbmRpcikvbWFuOC8kJGkuQG1hbjhleHRAOyBmaTsgZG9uZQorIAorK2luc3RhbGwtbDEwbjogJChBTEwpCisrCW1rZGlyIC1wICQobWFuZGlyKS8kKFNMQU5HKS9tYW4xICQobWFuZGlyKS8kKFNMQU5HKS9tYW41ICQobWFuZGlyKS8kKFNMQU5HKS9tYW44CisrCWZvciBpIGluICQoTUFOMSk7IFwKKysJCWRvICQoSU5TVEFMTCkgJCRpLjEgJChtYW5kaXIpLyQoU0xBTkcpL21hbjEvJCRpLkBtYW4xZXh0QDsgZG9uZQorKwlmb3IgaSBpbiAkKE1BTjUpOyBcCisrCQlkbyAkKElOU1RBTEwpICQkaS41ICQobWFuZGlyKS8kKFNMQU5HKS9tYW41LyQkaS5AbWFuNWV4dEA7IGRvbmUKKysJZm9yIGkgaW4gJChNQU44KTsgXAorKwkJZG8gaWYgdGVzdCAtZiAkJGkuODsgdGhlbiAkKElOU1RBTEwpICQkaS44ICQobWFuZGlyKS8kKFNMQU5HKS9tYW44LyQkaS5AbWFuOGV4dEA7IGZpOyBkb25lCisrCisgY2xlYW46CisgCXJtIC1mIGNvcmUgKi5pbiAqLkBtYW4xZXh0QCAqLkBtYW41ZXh0QCAqLkBtYW44ZXh0QCAqfgorIAorQEAgLTQ5LDcgKzU4LDcgQEAKKyAJQGZvciBpIGluIEBsYW5ndWFnZXNAOyBkbyBpZiB0ZXN0IC1kICQkaTsgdGhlbiBlY2hvOyBcCisgCQllY2hvICI9PT09IEluc3RhbGxpbmcgdGhlIGBjYXQgJCRpLnR4dGAgbWFuIHBhZ2VzLiA9PT09IjsgXAorIAkJY2QgJCRpOyBTTEFORz0vJCRpOyBpZiB0ZXN0ICQkU0xBTkcgPSAvZW47IHRoZW4gU0xBTkc9IDsgZmk7IFwKKy0JCWV4cG9ydCBTTEFORzsgbWFrZSAtZiAuLi9NYWtlZmlsZSBpbnN0YWxsOyBjZCAuLjsgXAorKwkJZXhwb3J0IFNMQU5HOyBtYWtlIC1mIC4uL01ha2VmaWxlIGluc3RhbGwtbDEwbjsgY2QgLi47IFwKKyAJCWVsc2UgZWNobyAiPT09PSBObyAkJGkgbWFuIHBhZ2VzIGZvdW5kLiA9PT09IjsgZmk7IGRvbmUKKyAKKyBjbGVhbnN1YmRpcnM6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLWkxOG5fd2hhdGlzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMjEzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaApAQCAtMCwwICsxLDE0NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL2Fwcm9wb3Muc2ggbWFuLTEuNmUvc3JjL2Fwcm9wb3Muc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9hcHJvcG9zLnNoCTIwMDctMDUtMTggMTM6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL2Fwcm9wb3Muc2gJMjAwNy0wNS0xOCAxNDoyNDozMy4wMDAwMDAwMDAgLTAzMDAKK0BAIC02MCwxNiArNjAsNTYgQEAKKyAgICAgZXNhYworIGRvbmUKKyAKKysjIGxpc3Qgb2YgbGFuZ3VhZ2VzIHRvIGxvb2sgZm9yCisrTEFOR19MSVNUPWBlY2hvICRMQU5HVUFHRTokTENfQUxMOiRMQ19NRVNTQUdFUzokTEFORyB8IHRyICc6JyAnICdgCisrRElSX0xJU1Q9IiIKKytmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAkbWFucGF0aCAvdXNyL2xpYgorK2RvCisrICAgIGZvciBsIGluICRMQU5HX0xJU1QKKysgICAgZG8KKysgICAgICAgIGlmIFsgLWQgJGQvJGwgXQorKyAgICAgICAgdGhlbgorKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgcGF0aCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgbGlzdAorKyAgICAgICAgICAgIGlmICEgZWNobyAiJERJUl9MSVNUIiB8IGdyZXAgIiAkZC8kbFxiIiA+IC9kZXYvbnVsbAorKyAgICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAgICAgRElSX0xJU1Q9IiRESVJfTElTVCAkZC8kbCIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysgICAgZG9uZQorKyAgICBESVJfTElTVD0iJERJUl9MSVNUICRkIgorKyAgICAjIGNoZWNrIHRoYXQgdGhlIHBhdGggaXMgbm90IGFscmVhZHkgaW4gdGhlIGxpc3QKKysgICAgaWYgISBlY2hvICIkRElSX0xJU1QiIHwgZ3JlcCAiICRkXGIiID4gL2Rldi9udWxsCisrICAgIHRoZW4KKysgICAgICAgIERJUl9MSVNUPSIkRElSX0xJU1QgJGQvJGwiCisrICAgIGZpCisrZG9uZQorKworIHdoaWxlIFsgIiQxIiAhPSAiIiBdCisgZG8KKyAgICAgZm91bmQ9MAorLSAgICBmb3IgZCBpbiAvdmFyL2NhY2hlL21hbiAkbWFucGF0aCAvdXNyL2xpYgorKyAgICAjIGluIG9yZGVyIG5vdCB0byBkaXNwbGF5IGxpbmVzIGluIG1vcmUgdGhhbiBvbmUgbGFuZ3VhZ2UgZm9yCisrICAgICMgYSBzYW1lIG1hbiBwYWdlOyB3ZSBjaGVjayB0aGF0IGEgZ2l2ZW4gbWFuIHBhZ2UgbmFtZQorKyAgICAjIGhhc24ndCBhbHJlYWR5IGJlZW4gZGlzcGxheWVkCisrICAgIEJBWj0iIgorKyAgICBmb3IgZCBpbiAkRElSX0xJU1QKKyAgICAgZG8KKyAgICAgICAgIGlmIFsgLWYgJGQvd2hhdGlzIF0KKyAgICAgICAgIHRoZW4KKy0gICAgICAgICAgICBpZiBncmVwIC0iJGdyZXBvcHQxIiAiJGdyZXBvcHQyIiIkMSIgJGQvd2hhdGlzCisrICAgICAgICAgICAgaWYgRk9PPWBncmVwIC0iJGdyZXBvcHQxIiAiJGdyZXBvcHQyIiIkMSIgJGQvd2hhdGlzYAorICAgICAgICAgICAgIHRoZW4KKy0gICAgICAgICAgICAgICAgZm91bmQ9MQorKyAgICAgICAgICAgICAgICAjIHRoZSBMQ19BTEw9QyBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgdGV4dCBpcworKyAgICAgICAgICAgICAgICAjIGluIGEgZGlmZmVyZW50IGVuY29kaW5nIHRoYW4gdGhlIGxvY2FsZQorKyAgICAgICAgICAgICAgICBCQVI9YGVjaG8gLWUgIiRGT08iIHwgTENfQUxMPUMgc2VkICdzLyAtIC4qJC8vJyB8IHRyICcgW10nICdfJyB8IHNvcnQgLXVgCisrICAgICAgICAgICAgICAgIGZvciBpIGluICRCQVIKKysgICAgICAgICAgICAgICAgZG8KKysgICAgICAgICAgICAgICAgICAgIGlmICEgZWNobyAiJEJBWiIgfCBncmVwICIkaSIgPiAvZGV2L251bGwKKysgICAgICAgICAgICAgICAgICAgIHRoZW4KKysgICAgICAgICAgICAgICAgICAgICAgICBCQVo9IiRCQVogJGkiCisrICAgICAgICAgICAgICAgICAgICAgICAgaT0iXmBlY2hvICRpIHwgc2VkICdzOl9cKzpcXFwoXFtfIFxdXFxcfFxcXFtcXFx8XFxcXVxcXClcXFwrOmcnYCIKKysgICAgICAgICAgICAgICAgICAgICAgICBlY2hvIC1lICIkRk9PIiB8IGdyZXAgIiRpIgorKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kPTEKKysgICAgICAgICAgICAgICAgICAgIGZpCisrICAgICAgICAgICAgICAgIGRvbmUKKyAjIFNvbWUgcGVvcGxlIGFyZSBzYXRpc2ZpZWQgd2l0aCBhIHNpbmdsZSBvY2N1cnJlbmNlCisgIyBCdXQgaXQgaXMgYmV0dGVyIHRvIGdpdmUgYWxsCisgIyAgICAgICAgICAgICAgIGJyZWFrCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21ha2V3aGF0aXMuc2ggbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gKKy0tLSBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTM6NDk6MzEuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21ha2V3aGF0aXMuc2gJMjAwNy0wNS0xOCAxMzo1MDowNy4wMDAwMDAwMDAgLTAzMDAKK0BAIC00MSwxMiArNDEsMzIgQEAKKyAKKyBwcm9ncmFtPWBiYXNlbmFtZSAkMGAKKyAKKysjIHRoaXMgYWxsb3dzIHRvIGRlZmluZSBsYW5ndWFnZSBzcGVjaWZpYyB2YWx1ZXMgZnJvIE5BTUUsIERFU0NSSVBUSU9OCisrIyBpZiBub3QgZGVmaW5lZCwgdXNpbmcgdGhvc2UgZGVmYXVsdCB2YWx1ZXMKKytpZiBbIC16ICIkTUFOX05BTUUiIF0KKyt0aGVuCisrCU1BTl9OQU1FPSLQmNCc0JV8Tk9NfEpNw4lOT3xOQVZOfM6fzp3On86czpF8Tk9NQlJFfE5JTUV8SVpFTkF8TklNSXxJTUV8XAorK07DiVZ8Tk9NRXzlkI3liY187J2066aEfE5BQU18TkFaV0F8TlVNRXzQmNCc0K98TUVOT3zQndCQ0JfQktCQfOWQjeensHzlkI3nqLEiCisrZmkKKytpZiBbIC16ICIkTUFOX0RFU0NSSVBUSU9OIiBdCisrdGhlbgorKwlNQU5fREVTQ1JJUFRJT049ItCe0J/QmNCh0JDQndCY0JV8REVTQ1JJUENJw5N8UE9QSVN8QkVTS1JJVkVMU0V8QkVTQ0hSRUlCVU5HfFwKKyvOoM6VzqHOmc6TzqHOkc6mzpd8REVTQ1JJUENJw5NOfEtJUkpFTERVU3xBWkFMUEVOQXxLVVZBVVN8T1BJU3xMRcONUsOBU3xERVNDUklaSU9ORXxcCisr6Kqs5piOfOyEpOuqhXxCRVNDSFJJSlZJTkd8REVTQ1JJw4fDg098REVTQ1JJRVJFfNCe0J/QmNChfOaPj+i/sCIKKytmaQorKyMgbWFrZSB0aGVtIGludG8gYXdrIHJlZ2V4cAorK01BTl9OQU1FPSJeKCR7TUFOX05BTUV9KSI7CisrTUFOX0RFU0NSSVBUSU9OPSJeKCR7TUFOX0RFU0NSSVBUSU9OfSkiOworKworICMgSW4gY2FzZSBib3RoIC91c3IvbWFuIGFuZCAvdXNyL3NoYXJlL21hbiBleGlzdCwgdGhlIGZvcm1lciBpcyBsb2NhbAorICMgYW5kIHNob3VsZCBiZSBmaXJzdC4KKyAjIEl0IGlzIGEgYnVnIHRvIGFkZCAvdmFyL2NhY2hlL21hbiB0byBERUZDQVRQQVRILgorIGRtPQorIGZvciBkIGluIC91c3Ivc2hhcmUvbWFuIC91c3IvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisgZG8KKysgICAgaWYgWyAtbiAiJExBTkciIC1hIC1kICIkZC8kTEFORyIgXTsgdGhlbgorKwlpZiBbIHgkZG0gPSB4IF07IHRoZW4gZG09IiRkLyRMQU5HIjsgZWxzZSBkbT0kZG06IiRkLyRMQU5HIjsgZmkKKysgICAgZmkKKyAgICAgaWYgWyAtZCAkZCBdOyB0aGVuCisgCWlmIFsgeCRkbSA9IHggXTsgdGhlbiBkbT0kZDsgZWxzZSBkbT0kZG06JGQ7IGZpCisgICAgIGZpCitAQCAtNTUsNiArNzUsOSBAQAorIGRjPQorIGZvciBkIGluIC92YXIvY2FjaGUvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4KKyBkbworKyAgICBpZiBbIC1uICIkTEFORyIgLWEgLWQgIiRkLyRMQU5HIiBdOyB0aGVuCisrCWlmIFsgeCRkYyA9IHggXTsgdGhlbiBkbT0iJGQvJExBTkciOyBlbHNlIGRtPSRkYzoiJGQvJExBTkciOyBmaQorKyAgICBmaQorICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRjPSRkOyBlbHNlIGRjPSRkYzokZDsgZmkKKyAgICAgZmkKK0BAIC0xOTQsNyArMjE3LDcgQEAKKyAJICAgIHNlY3Rpb249JGkKKyAJICAgIGN1cmRpcj0kbWFuZGlyLyR7cGFnZXN9JGkKKyAJICAgIGV4cG9ydCBzZWN0aW9uIHZlcmJvc2UgY3VyZGlyCistCSAgICBmaW5kICRtYW5kaXIvJHtwYWdlc30kaS8uIC1uYW1lICcqJyAkZmluZGFyZzAgJGZpbmRhcmcgLXByaW50IHwgJEFXSyAnCisrCSAgICBmaW5kICRtYW5kaXIvJHtwYWdlc30kaS8uIC1uYW1lICcqJyAkZmluZGFyZzAgJGZpbmRhcmcgLXByaW50IHwgTENfQUxMPUMgJEFXSyAtdiBNQU5fTkFNRT0iJE1BTl9OQU1FIiAtdiBNQU5fREVTQ1JJUFRJT049IiRNQU5fREVTQ1JJUFRJT04iICcKKyAKKyAJICAgIGZ1bmN0aW9uIHJlYWRsaW5lKCkgeworIAkgICAgICBpZiAodXNlX3pjYXQgfHwgdXNlX2J6Y2F0KSB7CitAQCAtMjYxLDEzICsyODQsNyBAQAorIAkJZ3N1YigvLlxiLywgIiIpOworIAkJaWYgKCgkMSB+IC9eXC5bU3NdW0hoXS8gJiYKKyAJCSAgKCQyIH4gL1tObl1bQWFdW01tXVtFZV0vIHx8CistCQkgICAkMiB+IC9eSk3JTk8vIHx8ICQyIH4gL15OQVZOLyB8fCAkMiB+IC9eTlVNRS8gfHwKKy0JCSAgICQyIH4gL15CRVpFSUNITlVORy8gfHwgJDIgfiAvXk5PTUJSRS8gfHwKKy0JCSAgICQyIH4gL15OSU1JLyB8fCAkMiB+IC9eTk9NLyB8fCAkMiB+IC9eSU1FLyB8fAorLQkJICAgJDIgfiAvXk5byUVdVi8gfHwgJDIgfiAvXk5BTUEvIHx8ICQyIH4gL17MvsGwLyB8fAorLQkJICAgJDIgfiAvXsy+vs4vIHx8ICQyIH4gL17AzLinLyB8fCAkMiB+IC9eTkFaV0EvIHx8CistCQkgICAkMiB+IC9e7uH69+Hu6eUvIHx8ICQyIH4gL17D+7PGLyB8fCAkMiB+IC9eple62S8gfHwKKy0JCSAgICQyIH4gL15OT01FLyB8fCAkMiB+IC9eTkFBTS8gfHwgJDIgfiAvXsjMxS8pKSB8fAorKwkJICAgJDIgfiBNQU5fTkFNRSApKSB8fAorIAkJICAocGFnZXMgPT0gImNhdCIgJiYgJDEgfiAvXk5BTUUvKSkgeworIAkJICAgIGlmICghaW5zaCkgeworIAkJICAgICAgaW5zaCA9IDE7CitAQCAtMjc4LDYgKzI5NSw3IEBACisgCQkgIGlmICgkMSB+IC9eXC5bU3NdW0hoWVNdLyB8fAorIAkJICAgIChwYWdlcyA9PSAiY2F0IiAmJgorIAkJICAgICgkMSB+IC9eU1t5WWVFXS8gfHwgJDEgfiAvXkRFU0NSSVBUSU9OLyB8fAorKwkJICAgICAkMSB+IE1BTl9ERVNDUklQVElPTiB8fAorIAkJICAgICAkMSB+IC9eQ09NTUFORC8gfHwgJDEgfiAvXk9WRVJWSUVXLyB8fAorIAkJICAgICAkMSB+IC9eU1RSVUNUVVJFUy8gfHwgJDEgfiAvXklOVFJPRFVDVElPTi8gfHwKKyAJCSAgICAgJDAgfiAvXlteIF0vKSkpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDAwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS1tYW5kaXJzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jb25mLmluCTIwMDUtMDgtMjAgMjA6MjY6MDYuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbi5jb25mLmluCTIwMDctMDUtMTggMTA6MzA6MjkuMDAwMDAwMDAwIC0wMzAwCitAQCAtMzYsMTEgKzM2LDEyIEBACisgIworICMgRXZlcnkgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgTUFOUEFUSCBpbmNsdWRlcyB0aGVzZSBmaWVsZHMKKyAjCistTUFOUEFUSAkvdXNyL21hbgorIE1BTlBBVEgJL3Vzci9zaGFyZS9tYW4KKytNQU5QQVRICS91c3IvWDExUjYvbWFuCisgTUFOUEFUSAkvdXNyL2xvY2FsL21hbgorIE1BTlBBVEgJL3Vzci9sb2NhbC9zaGFyZS9tYW4KKy1NQU5QQVRICS91c3IvWDExUjYvbWFuCisrTUFOUEFUSAkvdXNyL2tlcmJlcm9zL21hbgorK01BTlBBVEgJL3Vzci9tYW4KKyAjCisgIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBvbmUgb2YgdGhlc2UgYnkgZGVmYXVsdAorICMKK0BAIC02Nyw2ICs2OCw5IEBACisgTUFOUEFUSF9NQVAJL3Vzci9YMTFSNi9iaW4JCS91c3IvWDExUjYvbWFuCisgTUFOUEFUSF9NQVAJL3Vzci9iaW4vWDExCQkvdXNyL1gxMVI2L21hbgorIE1BTlBBVEhfTUFQCS91c3IvYmluL21oCQkvdXNyL3NoYXJlL21hbgorK01BTlBBVEhfTUFQCS91c3Iva2VyYmVyb3MvYmluCQkvdXNyL2tlcmJlcm9zL21hbgorK01BTlBBVEhfTUFQCS91c3Iva2VyYmVyb3Mvc2JpbgkJL3Vzci9rZXJiZXJvcy9tYW4KKysKKyAjCisgIyBOT0FVVE9QQVRIIGtlZXBzIG1hbiBmcm9tIGF1dG9tYXRpY2FsbHkgYWRkaW5nIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlCisgIyBtYW51YWwgcGFnZSBkaXJlY3RvcmllcyB0byB0aGUgcGF0aC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLW5ld19zZWN0aW9ucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjk3NzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtbmV3X3NlY3Rpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworLS0tIG1hbi0xLjZlLm9yaWcvY29uZmlndXJlCTIwMDYtMDUtMDEgMTQ6NTY6MTQuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvY29uZmlndXJlCTIwMDctMDUtMTggMTQ6MzU6NDMuMDAwMDAwMDAwIC0wMzAwCitAQCAtOTYwLDcgKzk2MCw3IEBACisgCisgIyBXaGF0IHNlY3Rpb25zIGRvIHdlIGFudGljaXBhdGU/CisgCistdG1wc2VjdGlvbnM9IjEgMXAgOCAyIDMgM3AgNCA1IDYgNyA5IDBwIHRjbCBuIGwgcCBvIgorK3RtcHNlY3Rpb25zPSIxIDFwIDggMiAzIDNwIDNwbSA0IDUgNiA3IDkgMHAgdGNsIG4gbCBwIG8iCisgCisgaWYgWyB4JGRlZmF1bHQgPSB4IF07IHRoZW4KKyAgIGVjaG8gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXJvX3Vzci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDFjYjBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtcm9fdXNyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFuLTEuNmYub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjQyOjM0LjAwMDAwMDAwMCAtMDgwMAorKysrIG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NDI6MzUuNjY3NDI4MzQ3IC0wODAwCitAQCAtMTI0LDcgKzEyNCw3IEBACisgCWNvbnRpbnVlOzsKKyAgICAgLXMpIHNldHNlY3Rpb25zPTEKKyAJY29udGludWU7OworLSAgICAtdSkgZmluZGFyZz0iLWN0aW1lIDAiCisrICAgIC11KSBmaW5kYXJnPSItbmV3ZXIgL3Zhci9jYWNoZS9tYW4vd2hhdGlzIgorIAl1cGRhdGU9MQorIAljb250aW51ZTs7CisgICAgIC12KSB2ZXJib3NlPTEKK0BAIC0xNjUsMTQgKzE2NSw3IEBACisgIyBmaXJzdCB0cnVuY2F0ZSBhbGwgdGhlIHdoYXRpcyBmaWxlcyB0aGF0IHdpbGwgYmUgY3JlYXRlZCBuZXcsCisgIyB0aGVuIG9ubHkgdXBkYXRlIC0gd2UgbWlnaHQgdmlzaXQgdGhlIHNhbWUgZGlyZWN0b3J5IHR3aWNlCisgaWYgWyB4JHVwZGF0ZSA9IHggXTsgdGhlbgorLSAgIGZvciBwYWdlcyBpbiBtYW4gY2F0CistICAgZG8KKy0gICAgICBldmFsIHBhdGg9IlwkJHBhZ2VzInBhdGgKKy0gICAgICBmb3IgbWFuZGlyIGluICRwYXRoCistICAgICAgZG8KKy0JIGNwIC9kZXYvbnVsbCAkbWFuZGlyL3doYXRpcworLSAgICAgIGRvbmUKKy0gICBkb25lCisrICAgY3AgL2Rldi9udWxsIC92YXIvY2FjaGUvbWFuL3doYXRpcworIGZpCisgCisgZm9yIHBhZ2VzIGluIG1hbiBjYXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtc2VjdXJpdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyYTg4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmUub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDA2LTA3LTE5IDAxOjU4OjA4LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYWtld2hhdGlzLnNoCTIwMDctMDUtMTggMTA6MTg6MzEuMDAwMDAwMDAwIC0wMzAwCitAQCAtNDUsNyArNDUsNyBAQAorICMgYW5kIHNob3VsZCBiZSBmaXJzdC4KKyAjIEl0IGlzIGEgYnVnIHRvIGFkZCAvdmFyL2NhY2hlL21hbiB0byBERUZDQVRQQVRILgorIGRtPQorLWZvciBkIGluIC91c3IvbWFuIC91c3Ivc2hhcmUvbWFuIC91c3IvWDExUjYvbWFuIC91c3IvbG9jYWwvbWFuCisrZm9yIGQgaW4gL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4gL3Vzci9YMTFSNi9tYW4gL3Vzci9sb2NhbC9tYW4KKyBkbworICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRtID0geCBdOyB0aGVuIGRtPSRkOyBlbHNlIGRtPSRkbTokZDsgZmkKK0BAIC01Myw3ICs1Myw3IEBACisgZG9uZQorIERFRk1BTlBBVEg9JGRtCisgZGM9CistZm9yIGQgaW4gL3Vzci9tYW4vcHJlZm9ybWF0IC91c3IvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL3NoYXJlL21hbgorK2ZvciBkIGluIC92YXIvY2FjaGUvbWFuIC91c3Ivc2hhcmUvbWFuL3ByZWZvcm1hdCAvdXNyL21hbi9wcmVmb3JtYXQgL3Vzci9zaGFyZS9tYW4gL3Vzci9tYW4KKyBkbworICAgICBpZiBbIC1kICRkIF07IHRoZW4KKyAJaWYgWyB4JGRjID0geCBdOyB0aGVuIGRjPSRkOyBlbHNlIGRjPSRkYzokZDsgZmkKK0BAIC03NiwxMiArNzYsMTIgQEAKKyAjIFdlIHRyeSBoZXJlIHRvIGJlIGNhcmVmdWwgKGFuZCBhdm9pZCBwcmVjb25zdHJ1Y3RlZCBzeW1saW5rcykKKyAjIGluIGNhc2UgbWFrZXdoYXRpcyBpcyBydW4gYXMgcm9vdCwgYnkgY3JlYXRpbmcgYSBzdWJkaXJlY3Rvcnkgb2YgL3RtcC4KKyAKKy1UTVBGSUxFRElSPS90bXAvd2hhdGlzLnRtcC5kaXIuJCQKKy1ybSAtcmYgJFRNUEZJTEVESVIKKy1pZiAhIG1rZGlyIC1tIDA3MDAgJFRNUEZJTEVESVI7IHRoZW4KKy0gICAgZWNobyBDb3VsZCBub3QgY3JlYXRlICRUTVBGSUxFRElSCistICAgIGV4aXQgMTsKKytUTVBGSUxFRElSPWBta3RlbXAgLWQgL3RtcC9tYWtld2hhdGlzWFhYWFhYYAorK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorKyAgIGVjaG8gIiQwOiBDYW4ndCBjcmVhdGUgdGVtcCBmaWxlLCBleGl0aW5nLi4uIgorKyAgIGV4aXQgMQorIGZpCisrY2htb2QgMDcwMCAkVE1QRklMRURJUgorIFRNUEZJTEU9JFRNUEZJTEVESVIvdworIAorICMgbWFrZSBzdXJlIFRNUEZJTEVESVIgaXMgZGVsZXRlZCBpZiBwcm9ncmFtIGlzIGtpbGxlZCBvciB0ZXJtaW5hdGVzCitkaWZmIC1OYXVyIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jIG1hbi0xLjZlL3NyYy9tYW4uYworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbi5jCTIwMDYtMDUtMDEgMTc6MzQ6MjIuMDAwMDAwMDAwIC0wMzAwCisrKysgbWFuLTEuNmUvc3JjL21hbi5jCTIwMDctMDUtMTggMTA6MTE6MzMuMDAwMDAwMDAwIC0wMzAwCitAQCAtMTIzNCw3ICsxMjM0LDYgQEAKKyAjZW5kaWYKKyAKKyAKKy0jaWYgMAorICAgICAgeworIAkvKiBUaGVyZSBhcmUgbm8ga25vd24gY2FzZXMgb2YgYnVmZmVyIG92ZXJmbG93IGNhdXNlZCBieQorIAkgICBleGNlc3NpdmVseSBsb25nIGVudmlyb25tZW50IHZhcmlhYmxlcy4gSW4gY2FzZSB5b3UgZmluZCBvbmUsCitAQCAtMTI1Nyw3ICsxMjU2LDYgQEAKKyAJICAgTUFOX0lDT05WX1BBVEgsIE1BTl9JQ09OVl9PUFQsIE1BTl9JQ09OVl9JTlBVVF9DSEFSU0VULAorIAkgICBNQU5fSUNPTlZfT1VUUFVUX0NIQVJTRVQsIE5MU1BBVEgsIFBBVEggKi8KKyAgICAgIH0KKy0jZW5kaWYKKyAKKyAKKyAjaWZuZGVmIF9fRnJlZUJTRF9fIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS11c2VfaTE4bl92YXJzX2luX2Ffc3RkX3dheS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhmNzQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2gKQEAgLTAsMCArMSwxNjAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL2NhdG9wZW4vY2F0b3Blbi5jIG1hbi0xLjZlL2NhdG9wZW4vY2F0b3Blbi5jCistLS0gbWFuLTEuNmUub3JpZy9jYXRvcGVuL2NhdG9wZW4uYwkyMDA1LTA4LTIwIDIwOjI2OjA2LjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL2NhdG9wZW4vY2F0b3Blbi5jCTIwMDctMDUtMTggMTE6MzE6MDUuMDAwMDAwMDAwIC0wMzAwCitAQCAtOSwyMiArOSw2MyBAQAorIGV4dGVybiBjaGFyICppbmRleCAoY29uc3QgY2hhciAqLCBpbnQpOyAgICAgICAgIC8qIG5vdCBhbHdheXMgaW4gPHN0cmluZy5oPiAqLworIGV4dGVybiBjaGFyICpteV9tYWxsb2MoaW50KTsJLyogaW4gdXRpbC5jICovCisgCisrLyogaWYgdGhlIHByb2dyYW0gaGFzIHNnaWQvc3VpZCBwcml2aWxlZ2VzIHRoZW4gZ2V0ZW52IGRvZXNuJ3QgcmV0dXJuCisrICogTkxTUEFUSDsgc28gd2Ugc2V0IGhlcmUgYSBnb29kIGRlZmF1bHQgdmFsdWUuCisrICovCisgI2lmbmRlZiBERUZBVUxUX05MU1BBVEgKKyAjIGlmIF9fR0xJQkNfXyA+PSAyCistIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9zaGFyZS9sb2NhbGUvJUwvJU4iCisrIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9zaGFyZS9sb2NhbGUvJUwvJU46L3Vzci9zaGFyZS9sb2NhbGUvJWxfJXQvJU46L3Vzci9zaGFyZS9sb2NhbGUvJWwvJU4iCisgIyBlbHNlCisgIyAgZGVmaW5lIERFRkFVTFRfTkxTUEFUSCAiL3Vzci9saWIvbG9jYWxlLyVOLyVMIgorICMgZW5kaWYKKyAjZW5kaWYKKyAKKy1zdGF0aWMgbmxfY2F0ZCBteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpwYXRoKTsKKytzdGF0aWMgbmxfY2F0ZCBteV9jYXRvcGVucGF0aChjaGFyICpuYW1lLCBjaGFyICpwYXRoLCBjaGFyICpsYW5nKTsKKyAKKyBzdGF0aWMJCQkJLyogdGhpcyBzb3VyY2UgaW5jbHVkZWQgaW4gZ3JpcGVzLmMgKi8KKyBubF9jYXRkCisgbXlfY2F0b3BlbihjaGFyICpuYW1lLCBpbnQgb2ZsYWcpIHsKKy0gIG5sX2NhdGQgZmQ7CisrICBubF9jYXRkIGZkID0gKG5sX2NhdGQpIC0xOworKworKyAgLyogdXNpbmcgZmlyc3QgdGhlIG15X2NhdG9wZW5wYXRoLCB3aGljaCBsb29rcyB3aXRoIExBTkdVQUdFCisrICAgKiBhbmQgb25seSBpZiBpdCBmYWlscyByZXNzb3J0IHRvIGNhdG9wZW4sIGl0IGdpdmVzIGJldHRlciBpMThuCisrICAgKi8KKysgIHsKKysgICAgY2hhciAqbmxzcGF0aCwgKmxhbmcsICpzOworIAorLSAgZmQgPSBjYXRvcGVuKG5hbWUsIG9mbGFnKTsKKysgICAgLyoKKysgICAgICogIklmIE5MU1BBVEggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudmlyb25tZW50LCBvciBpZiBhCisrICAgICAqIG1lc3NhZ2UgY2F0YWxvZyBjYW5ub3QgYmUgb3BlbmVkIGluIGFueSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkCisrICAgICAqIGJ5IE5MU1BBVEgsIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBkZWZhdWx0IHBhdGggaXMgdXNlZCIKKysgICAgICovCisrICAgIG5sc3BhdGggPSBnZXRlbnYoIk5MU1BBVEgiKTsKKysgICAgaWYgKCFubHNwYXRoKQorKyAgICAgIG5sc3BhdGggPSBERUZBVUxUX05MU1BBVEg7CisrIAorKyAgICBsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTENfQUxMIik7CisrICAgIGlmICghbGFuZykKKysgICAgICBsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9IGdldGVudigiTEFORyIpOworKyAgICBpZiAoIWxhbmcpCisrICAgICAgbGFuZyA9ICIiOworKyAKKysgICAgd2hpbGUoKmxhbmcgJiYgKGZkID09IChubF9jYXRkKSAtMSkpIHsKKysgICAgICBzID0gaW5kZXgobGFuZywgJzonKTsKKysgICAgICBpZiAocykgKnMgPSAwOworKyAgICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoLCBsYW5nKTsKKysgICAgICBpZiAocykgbGFuZz1zKzE7CisrICAgICAgZWxzZSBsYW5nID0gIiI7CisrICAgIH0KKysgICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKysgICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIG5sc3BhdGgsICJlbiIpOworKyAgfQorKworKyAgLyogc3RpbGwgbm90IGZvdW5kLCB1c2UgdGhlIHN5c3RlbSBjYXRvcGVuICovCisrICBpZiAoZmQgPT0gKG5sX2NhdGQpIC0xKQorKyAgICBmZCA9IGNhdG9wZW4obmFtZSwgb2ZsYWcpOworIAorICAgaWYgKGZkID09IChubF9jYXRkKSAtMSAmJiBvZmxhZykgeworICAgICBvZmxhZyA9IDA7CitAQCAtMzIsOCArNzMsNiBAQAorICAgfQorIAorICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkgeworLSAgICBjaGFyICpubHNwYXRoOworLQorICAgICAvKiBUaGUgbGliYyBjYXRvcGVuIGZhaWxzIC0gbGV0IHVzIHNlZSBpZiB3ZSBjYW4gZG8gYmV0dGVyICovCisgICAgIC8qIFRoZSBxdW90ZXMgYmVsb3cgYXJlIGZyb20gWC9PcGVuLCBYUEcgMTk4NywgVm9sLiAzLiAqLworIAorQEAgLTU4LDE3ICs5Nyw2IEBACisgI2VuZGlmCisgICAgIH0KKyAKKy0gICAgLyoKKy0gICAgICogIklmIE5MU1BBVEggZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudmlyb25tZW50LCBvciBpZiBhCistICAgICAqIG1lc3NhZ2UgY2F0YWxvZyBjYW5ub3QgYmUgb3BlbmVkIGluIGFueSBvZiB0aGUgcGF0aHMgc3BlY2lmaWVkCistICAgICAqIGJ5IE5MU1BBVEgsIHRoZW4gYW4gaW1wbGVtZW50YXRpb24gZGVmaW5lZCBkZWZhdWx0IHBhdGggaXMgdXNlZCIKKy0gICAgICovCistCistICAgIG5sc3BhdGggPSBnZXRlbnYoIk5MU1BBVEgiKTsKKy0gICAgaWYgKG5sc3BhdGgpCistICAgICAgZmQgPSBteV9jYXRvcGVucGF0aChuYW1lLCBubHNwYXRoKTsKKy0gICAgaWYgKGZkID09IChubF9jYXRkKSAtMSkKKy0gICAgICBmZCA9IG15X2NhdG9wZW5wYXRoKG5hbWUsIERFRkFVTFRfTkxTUEFUSCk7CisgICB9CisgICByZXR1cm4gZmQ7CisgfQorQEAgLTkwLDE1ICsxMTgsMTMgQEAKKyAgKgorICAqLworIHN0YXRpYyBubF9jYXRkCistbXlfY2F0b3BlbnBhdGgoY2hhciAqbmFtZSwgY2hhciAqbmxzcGF0aCkgeworLSAgaW50IGZkOworK215X2NhdG9wZW5wYXRoKGNoYXIgKm5hbWUsIGNoYXIgKm5sc3BhdGgsIGNoYXIgKmxhbmcpIHsKKyAgIG5sX2NhdGQgY2ZkID0gKG5sX2NhdGQpIC0xOworLSAgY2hhciAqcGF0aDAsICpwYXRoLCAqcywgKmZpbGUsICpsYW5nLCAqbGFuZ19sLCAqbGFuZ190LCAqbGFuZ19jOworKyAgY2hhciAqcGF0aDAsICpwYXRoLCAqcywgKmZpbGUsICpsYW5nX2wsICpsYW5nX3QsICpsYW5nX2M7CisgICBpbnQgbGFuZ3N6LCBuYW1lc3osIHN6LCBsYW5nX2xfc3osIGxhbmdfdF9zeiwgbGFuZ19jX3N6OworIAorICAgbmFtZXN6ID0gc3RybGVuKG5hbWUpOworIAorLSAgbGFuZyA9IGdldGVudigiTEFORyIpOworICAgaWYgKCFsYW5nKQorICAgICBsYW5nID0gIiI7CisgICBsYW5nc3ogPSBzdHJsZW4obGFuZyk7CitAQCAtMTk0LDE0ICsyMjAsOSBAQAorICAgICAgIHBhdGggPSBzKzE7CisgICAgIH0gZWxzZQorICAgICAgIHBhdGggPSAwOworLSAgICBmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworLSAgICBpZiAoZmQgIT0gLTEpIHsKKy0gICAgICAvKiB3ZSBmb3VuZCB0aGUgcmlnaHQgY2F0YWxvZyAtIGJ1dCB3ZSBkb24ndCBrbm93IHRoZQorLQkgdHlwZSBvZiBubF9jYXRkLCBzbyBjbG9zZSBpdCBhZ2FpbiBhbmQgYXNrIGxpYmMgKi8KKy0gICAgICBjbG9zZShmZCk7CistICAgICAgY2ZkID0gY2F0b3BlbihmaWxlLCAwKTsKKy0gICAgICBicmVhazsKKy0gICAgfQorKwljZmQgPSBjYXRvcGVuKGZpbGUsIDApOworKwlpZiAoY2ZkICE9IChubF9jYXRkKSAtMSkKKysJCQlicmVhazsKKyAgIH0KKyAKKyAgIGZyZWUocGF0aDApOworZGlmZiAtTmF1ciBtYW4tMS42ZS5vcmlnL3NyYy9tYW5wYXRoLmMgbWFuLTEuNmUvc3JjL21hbnBhdGguYworLS0tIG1hbi0xLjZlLm9yaWcvc3JjL21hbnBhdGguYwkyMDA2LTA4LTAzIDE4OjE4OjMzLjAwMDAwMDAwMCAtMDMwMAorKysrIG1hbi0xLjZlL3NyYy9tYW5wYXRoLmMJMjAwNy0wNS0xOCAxMTowMjo0OC4wMDAwMDAwMDAgLTAzMDAKK0BAIC0yODIsMTMgKzI4MiwxNCBAQAorIAkJLyogV2UgY2Fubm90IHVzZSAibGFuZyA9IHNldGxvY2FsZShMQ19NRVNTQUdFUywgTlVMTCkiIG9yIHNvOgorIAkJICAgdGhlIHJldHVybiB2YWx1ZSBvZiBzZXRsb2NhbGUgaXMgYW4gb3BhcXVlIHN0cmluZy4gKi8KKyAJCS8qIFBPU0lYIHByZXNjcmliZXMgdGhlIG9yZGVyOiBMQ19BTEwsIExDX01FU1NBR0VTLCBMQU5HICovCistCQlpZigobGFuZyA9IGdldGVudigiTENfQUxMIikpICE9IE5VTEwpCisrCSAgICAgICAgLyogTEFOR1VBR0UgaXMgR05VL0xpbnV4IGFuZCBvdmVycnVsZXMgYWxsICovCisrCQlpZigobGFuZyA9IGdldGVudigiTEFOR1VBR0UiKSkgIT0gTlVMTCkKKyAJCQlzcGxpdDIoZGlyLCBsYW5nLCBhZGRfdG9fbWFuZGlybGlzdF94LCBwZXJycyk7CistCQlpZigobGFuZyA9IGdldGVudigiTENfTUVTU0FHRVMiKSkgIT0gTlVMTCkKKysJCWVsc2UgaWYoKGxhbmcgPSBnZXRlbnYoIkxDX0FMTCIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HIikpICE9IE5VTEwpCisrCQllbHNlIGlmKChsYW5nID0gZ2V0ZW52KCJMQ19NRVNTQUdFUyIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKy0JCWlmKChsYW5nID0gZ2V0ZW52KCJMQU5HVUFHRSIpKSAhPSBOVUxMKQorKwkJZWxzZSBpZigobGFuZyA9IGdldGVudigiTEFORyIpKSAhPSBOVUxMKQorIAkJCXNwbGl0MihkaXIsIGxhbmcsIGFkZF90b19tYW5kaXJsaXN0X3gsIHBlcnJzKTsKKyAJCWFkZF90b19tYW5kaXJsaXN0X3goZGlyLCAwLCBwZXJycyk7CisgCX0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS13aGF0aXMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNGVkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4tMS42ZS13aGF0aXMyLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWFuLTEuNmYub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDEwLTEyLTI5IDEzOjUxOjQ1LjAwMDAwMDAwMCAtMDgwMAorKysrIG1hbi0xLjZmL3NyYy9tYWtld2hhdGlzLnNoCTIwMTAtMTItMjkgMTM6NTk6MzUuMzk5Nzk5NDEyIC0wODAwCitAQCAtMTY0LDEwICsxNjQsMTUgQEAKKyBmaQorIGNhdHBhdGg9YGVjaG8gJHtjYXRwYXRofSB8IHRyIDogJyAnYAorIAorKyNXSEFUSVNfRElSPSRERVNURElSL3Zhci9jYWNoZS9tYW4vYGVjaG8gJGhlcmV8c2VkIC1lICdzIS4qL21hbi8hIWcnYAorK1dIQVRJU19ESVI9JERFU1RESVIvdmFyL2NhY2hlL21hbi8kTEFORworK1tbIC1kICRXSEFUSVNfRElSIF1dIHx8IG1rZGlyIC1wICRXSEFUSVNfRElSLworKworICMgZmlyc3QgdHJ1bmNhdGUgYWxsIHRoZSB3aGF0aXMgZmlsZXMgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgbmV3LAorICMgdGhlbiBvbmx5IHVwZGF0ZSAtIHdlIG1pZ2h0IHZpc2l0IHRoZSBzYW1lIGRpcmVjdG9yeSB0d2ljZQorIGlmIFsgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0gICBjcCAvZGV2L251bGwgL3Zhci9jYWNoZS9tYW4vd2hhdGlzCisrICAgbWtkaXIgLXAgJFdIQVRJU19ESVIvCisrICAgL2Jpbi9lY2hvIC1uID4gJFdIQVRJU19ESVIvd2hhdGlzCisgZmkKKyAKKyBmb3IgcGFnZXMgaW4gbWFuIGNhdAorQEAgLTE4MCwxMyArMTg1LDcgQEAKKyAJZWNobyAiYWJvdXQgdG8gZW50ZXIgJG1hbmRpciIgPiAvZGV2L3N0ZGVycgorICAgICAgZmkKKyAKKy0gICAgICMga2x1ZGdlIGZvciBTbGFja3dhcmUncyAvdXNyL21hbi9wcmVmb3JtYXQKKy0gICAgIGlmIFsgJG1hbmRpciA9IC91c3IvbWFuL3ByZWZvcm1hdCBdCistICAgICB0aGVuCistCW1hbmRpcjE9L3Vzci9tYW4KKy0gICAgIGVsc2UKKy0JbWFuZGlyMT0kbWFuZGlyCistICAgICBmaQorKyAgICAgbWFuZGlyMT0kV0hBVElTX0RJUgorIAorICAgICAgIyBpZiAkbWFuZGlyIGlzIG9uIGEgcmVhZG9ubHkgcGFydGl0aW9uLCBhbmQgdGhlIHdoYXRpcyBmaWxlCisgICAgICAjIGlzIG5vdCBhIHN5bWxpbmssIHRoZW4gbGV0J3Mgc2tpcCB0cnlpbmcgdG8gdXBkYXRlIGl0CitAQCAtMjA3LDExICsyMDYsNiBAQAorIAlmaQorICAgICAgZmkKKyAKKy0gICAgIGlmIFsgLXMgJHttYW5kaXJ9L3doYXRpcyAtYSAkcGFnZXMgPSBtYW4gLWEgeCR1cGRhdGUgPSB4IF07IHRoZW4KKy0JaWYgWyB4JHZlcmJvc2UgIT0geCBdOyB0aGVuCistCSAgIGVjaG8gc2tpcHBpbmcgJG1hbmRpciAtIHdlIGRpZCBpdCBhbHJlYWR5ID4gL2Rldi9zdGRlcnIKKy0JZmkKKy0gICAgIGVsc2UgICAgICAKKyAgICAgICAgaGVyZT1gcHdkYAorICAgICAgICBjZCAkbWFuZGlyCisgICAgICAgIGZvciBpIGluICRzZWN0aW9ucworQEAgLTQ0Nyw3ICs0NDcsNiBAQAorCisgICAgICAgIGNobW9kIDY0NCAke21hbmRpcjF9L3doYXRpcworICAgICAgICBybSAkVE1QRklMRQorLSAgICAgZmkKKyAgICBkb25lCisgZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLTEuNmctd2hhdGlzMy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZnLXdoYXRpczMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzNDQ1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuL21hbi0xLjZnLXdoYXRpczMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorRG8gbm90IHVzZSBhYnNvbHV0ZSBwYXRoIGZvciBhd2sgd2hpbGUgZ2V0dGluZyB0aGUgcGF0aCBvZiBhd2sKK3doZW4gcnVubmluZyBtYWtld2hhdGlzLgorVGhpcyBjYW4gYXZvaWQgZXJyb3JzIGlmIHBhdGggb2YgYXdrIGNoYW5nZXMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFttYW4tMS42Z10KKworU2lnbmVkLW9mZi1ieTogSmlhbiBMaXUgPGppYW4ubGl1QHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51ciBtYW4tMS42Zy5vcmlnL3NyYy9tYWtld2hhdGlzLnNoIG1hbi0xLjZnL3NyYy9tYWtld2hhdGlzLnNoCistLS0gbWFuLTEuNmcub3JpZy9zcmMvbWFrZXdoYXRpcy5zaAkyMDE1LTAyLTI1IDE2OjEzOjEyLjY1NzYxMTQxOSArMDgwMAorKysrIG1hbi0xLjZnL3NyYy9tYWtld2hhdGlzLnNoCTIwMTUtMDItMjUgMTY6MTQ6NDkuMzM0Njk0ODE1ICswODAwCitAQCAtNjcsNyArNjcsNyBAQAorICMgYnV0IHRoYXQgbGVhZHMgdG8gcHJvYmxlbXMgYW5kIGJ1Z3MuCisKKyAjIEFXSz0vdXNyL2Jpbi9nYXdrCistQVdLPUBhd2tACisrQVdLPWB3aGljaCBhd2tgCisKKyAjIEZpbmQgYSBwbGFjZSBmb3Igb3VyIHRlbXBvcmFyeSBmaWxlcy4gSWYgc2VjdXJpdHkgaXMgbm90IGEgY29uY2VybiwgdXNlCisgIwlUTVBGSUxFPS90bXAvd2hhdGlzJCQ7IFRNUEZJTEVESVI9bm9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3ogYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uMS5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY4MDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjEuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3ogYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uNy5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVhZjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLjcuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW4uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzEwYmUyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFuLmNvbmYKQEAgLTAsMCArMSwxNDEgQEAKKyMKKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSBtYW4uY29uZi5pbiBieSB0aGUKKyMgY29uZmlndXJlIHNjcmlwdC4KKyMKKyMgbWFuLmNvbmYgZnJvbSBtYW4tMS41cAorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUsIHNlZSB0aGUgbWFuIHBhZ2VzIG1hbigxKQorIyBhbmQgbWFuLmNvbmYoNSkuCisjCisjIFRoaXMgZmlsZSBpcyByZWFkIGJ5IG1hbiB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgbWFucGF0aCAoYWxzbyB1c2VkCisjIHdoZW4gTUFOUEFUSCBjb250YWlucyBhbiBlbXB0eSBzdWJzdHJpbmcpLCB0byBmaW5kIG91dCB3aGVyZSB0aGUgY2F0CisjIHBhZ2VzIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gbWFuIHBhZ2VzIHNob3VsZCBiZSBzdG9yZWQsCisjIGFuZCB0byBtYXAgZWFjaCBQQVRIIGVsZW1lbnQgdG8gYSBtYW5wYXRoIGVsZW1lbnQuCisjIEl0IG1heSBhbHNvIHJlY29yZCB0aGUgcGF0aG5hbWUgb2YgdGhlIG1hbiBiaW5hcnkuIFtUaGlzIGlzIHVudXNlZC5dCisjIFRoZSBmb3JtYXQgaXM6CisjCisjIE1BTkJJTgkJcGF0aG5hbWUKKyMgTUFOUEFUSAkJbWFucGF0aF9lbGVtZW50CVtjb3JyZXNwb25kaW5nX2NhdGRpcl0KKyMgTUFOUEFUSF9NQVAJCXBhdGhfZWxlbWVudAltYW5wYXRoX2VsZW1lbnQKKyMKKyMgSWYgbm8gY2F0ZGlyIGlzIGdpdmVuLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGVxdWFsIHRvIHRoZSBtYW5kaXIKKyMgKHNvIHRoYXQgdGhpcyBkaXIgaGFzIGJvdGggbWFuMSBldGMuIGFuZCBjYXQxIGV0Yy4gc3ViZGlycykuCisjIFRoaXMgaXMgdGhlIHRyYWRpdGlvbmFsIFVuaXggc2V0dXAuCisjIENlcnRhaW4gdmVyc2lvbnMgb2YgdGhlIEZTU1RORCByZWNvbW1lbmQgcHV0dGluZyBmb3JtYXR0ZWQgdmVyc2lvbnMKKyMgb2YgL3Vzci8uLi4vbWFuL21hbngvcGFnZS54IGludG8gL3Zhci9jYXRtYW4vLi4uL2NhdHgvcGFnZS54LgorIyBUaGUga2V5d29yZCBGU1NUTkQgd2lsbCBjYXVzZSB0aGlzIGJlaGF2aW91ci4KKyMgQ2VydGFpbiB2ZXJzaW9ucyBvZiB0aGUgRkhTIHJlY29tbWVuZCBwdXR0aW5nIGZvcm1hdHRlZCB2ZXJzaW9ucyBvZgorIyAvdXNyLy4uLi9zaGFyZS9tYW4vW2xvY2FsZS9dbWFueC9wYWdlLnggaW50bworIyAvdmFyL2NhY2hlL21hbi8uLi4vW2xvY2FsZS9dY2F0eC9wYWdlLnguCisjIFRoZSBrZXl3b3JkIEZIUyB3aWxsIGNhdXNlIHRoaXMgYmVoYXZpb3VyIChhbmQgb3ZlcnJpZGVzIEZTU1RORCkuCisjIEV4cGxpY2l0bHkgZ2l2ZW4gY2F0ZGlycyBvdmVycmlkZS4KKyMKKyMgRlNTVE5ECitGSFMKKyMKKyMgVGhpcyBmaWxlIGlzIGFsc28gcmVhZCBieSBtYW4gaW4gb3JkZXIgdG8gZmluZCBob3cgdG8gY2FsbCBucm9mZiwgbGVzcywgZXRjLiwKKyMgYW5kIHRvIGRldGVybWluZSB0aGUgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBleHRlbnNpb25zIGFuZCBkZWNvbXByZXNzb3JzLgorIworIyBNQU5CSU4JCS91c3IvbG9jYWwvYmluL21hbgorIworIyBFdmVyeSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBNQU5QQVRIIGluY2x1ZGVzIHRoZXNlIGZpZWxkcworIworTUFOUEFUSAkvdXNyL21hbgorTUFOUEFUSAkvdXNyL3NoYXJlL21hbgorTUFOUEFUSAkvdXNyL2xvY2FsL21hbgorTUFOUEFUSAkvdXNyL2xvY2FsL3NoYXJlL21hbgorTUFOUEFUSAkvdXNyL1gxMVI2L21hbgorIworIyBVbmNvbW1lbnQgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSBvbmUgb2YgdGhlc2UgYnkgZGVmYXVsdAorIworIyBNQU5QQVRICS9vcHQvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL2xpYi8qL21hbgorIyBNQU5QQVRICS91c3Ivc2hhcmUvKi9tYW4KKyMgTUFOUEFUSAkvdXNyL2tlcmJlcm9zL21hbgorIworIyBTZXQgdXAgUEFUSCB0byBNQU5QQVRIIG1hcHBpbmcKKyMKKyMgSWYgcGVvcGxlIGFzayBmb3IgIm1hbiBmb28iIGFuZCBoYXZlICIvZGlyL2Jpbi9mb28iIGluIHRoZWlyIFBBVEgKKyMgYW5kIHRoZSBkb2NzIGFyZSBmb3VuZCBpbiAiL2Rpci9tYW4iLCB0aGVuIG5vIG1hcHBpbmcgaXMgcmVxdWlyZWQuCisjCisjIFRoZSBiZWxvdyBtYXBwaW5ncyBhcmUgc3VwZXJmbHVvdXMgd2hlbiB0aGUgcmlnaHQgaGFuZCBzaWRlIGlzCisjIGluIHRoZSBtYW5kYXRvcnkgbWFucGF0aCBhbHJlYWR5LCBidXQgd2lsbCBrZWVwIG1hbiBmcm9tIHN0YXR0aW5nCisjIGxvdHMgb2Ygb3RoZXIgbmVhcmJ5IGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKyMKK01BTlBBVEhfTUFQCS9iaW4JCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3NiaW4JCQkvdXNyL3NoYXJlL21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4JCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL3NiaW4JCS91c3Ivc2hhcmUvbWFuCitNQU5QQVRIX01BUAkvdXNyL2xvY2FsL2JpbgkJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvbG9jYWwvc2JpbgkJL3Vzci9sb2NhbC9zaGFyZS9tYW4KK01BTlBBVEhfTUFQCS91c3IvWDExUjYvYmluCQkvdXNyL1gxMVI2L21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4vWDExCQkvdXNyL1gxMVI2L21hbgorTUFOUEFUSF9NQVAJL3Vzci9iaW4vbWgJCS91c3Ivc2hhcmUvbWFuCisjCisjIE5PQVVUT1BBVEgga2VlcHMgbWFuIGZyb20gYXV0b21hdGljYWxseSBhZGRpbmcgZGlyZWN0b3JpZXMgdGhhdCBsb29rIGxpa2UKKyMgbWFudWFsIHBhZ2UgZGlyZWN0b3JpZXMgdG8gdGhlIHBhdGguCisjCisjTk9BVVRPUEFUSAorIworIyBOT0NBQ0hFIGtlZXBzIG1hbiBmcm9tIGNyZWF0aW5nIGNhY2hlIHBhZ2VzICgiY2F0IHBhZ2VzIikKKyMgKGdlbmVyYWxseSBvbmUgZW5hYmxlcy9kaXNhYmxlIGNhdCBwYWdlIGNyZWF0aW9uIGJ5IGNyZWF0aW5nL2RlbGV0aW5nCisjIHRoZSBkaXJlY3RvcnkgdGhleSB3b3VsZCBsaXZlIGluIC0gbWFuIG5ldmVyIGRvZXMgbWtkaXIpCisjIAorI05PQ0FDSEUKKyMKKyMgVXNlZnVsIHBhdGhzIC0gbm90ZSB0aGF0IENPTCBzaG91bGQgbm90IGJlIGRlZmluZWQgd2hlbgorIyBOUk9GRiBpcyBkZWZpbmVkIGFzICJncm9mZiAtVGFzY2lpIiBvciAiZ3JvZmYgLVRsYXRpbjEiOworIyBub3Qgb25seSBpcyBpdCBzdXBlcmZsdW91cywgYnV0IGl0IGFjdHVhbGx5IGRhbWFnZXMgdGhlIG91dHB1dC4KKyMgRm9yIHVzZSB3aXRoIHV0Zi04LCBOUk9GRiBzaG91bGQgYmUgIm5yb2ZmIC1tYW5kb2MiIHdpdGhvdXQgLVQgb3B0aW9uLgorIyAoTWF5YmUgLSBidXQgdG9kYXkgSSBuZWVkIC1UbGF0aW4xIHRvIHByZXZlbnQgZG91YmxlIGNvbnZlcnNpb24gdG8gdXRmOC4pCisjCisjIElmIHlvdSBoYXZlIGEgbmV3IHRyb2ZmICh2ZXJzaW9uIDEuMTguMT8pIGFuZCBpdHMgY29sb3JlZCBvdXRwdXQKKyMgY2F1c2VzIHByb2JsZW1zLCBhZGQgdGhlIC1jIG9wdGlvbiB0byBUUk9GRiwgTlJPRkYsIEpOUk9GRi4KKyMKK1RST0ZGCQkvdXNyL2Jpbi9ncm9mZiAtVHBzIC1tYW5kb2MKK05ST0ZGCQkvdXNyL2Jpbi9ucm9mZiAtVGxhdGluMSAtbWFuZG9jCitKTlJPRkYJCS91c3IvYmluL2dyb2ZmIC1UbmlwcG9uIC1tYW5kb2NqCitFUU4JCS91c3IvYmluL2VxbiAtVHBzCitORVFOCQkvdXNyL2Jpbi9lcW4gLVRsYXRpbjEKK0pORVFOCQkvdXNyL2Jpbi9lcW4gLVRuaXBwb24KK1RCTAkJL3Vzci9iaW4vdGJsCisjIENPTAkJL3Vzci9iaW4vY29sCitSRUZFUgkJL3Vzci9iaW4vcmVmZXIKK1BJQwkJL3Vzci9iaW4vcGljCitWR1JJTkQJCQorR1JBUAkJCitQQUdFUgkJL3Vzci9iaW4vbGVzcyAtaXNSCitDQVQJCS9iaW4vY2F0CisjCisjIFRoZSBjb21tYW5kICJtYW4gLWEgeHl6enkiIHdpbGwgc2hvdyBhbGwgbWFuIHBhZ2VzIGZvciB4eXp6eS4KKyMgV2hlbiBDTVAgaXMgZGVmaW5lZCBtYW4gd2lsbCB0cnkgdG8gYXZvaWQgc2hvd2luZyB0aGUgc2FtZQorIyB0ZXh0IHR3aWNlLiAoQnV0IGNvbXByZXNzZWQgcGFnZXMgY29tcGFyZSB1bmVxdWFsLikKKyMKK0NNUAkJL3Vzci9iaW4vY21wIC1zCisjCisjIENvbXByZXNzIGNhdCBwYWdlcworIworQ09NUFJFU1MJL2Jpbi9iemlwMgorQ09NUFJFU1NfRVhUCS5iejIKKyMKKyMgRGVmYXVsdCBtYW51YWwgc2VjdGlvbnMgKGFuZCBvcmRlcikgdG8gc2VhcmNoIGlmIC1TIGlzIG5vdCBzcGVjaWZpZWQKKyMgYW5kIHRoZSBNQU5TRUNUIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuCisjCitNQU5TRUNUCQkxOjFwOjg6MjozOjNwOjQ6NTo2Ojc6OTowcDp0Y2w6bjpsOnA6bworIworIyBEZWZhdWx0IG9wdGlvbnMgdG8gdXNlIHdoZW4gbWFuIGlzIGludm9rZWQgd2l0aG91dCBvcHRpb25zCisjIFRoaXMgaXMgbWFpbmx5IGZvciB0aGUgYmVuZWZpdCBvZiB0aG9zZSB0aGF0IHRoaW5rIC1hIHNob3VsZCBiZSB0aGUgZGVmYXVsdAorIyBOb3RlIHRoYXQgc29tZSBzeXN0ZW1zIGhhdmUgL3Vzci9tYW4vYWxsbWFuLCBjYXVzaW5nIHBhZ2VzIHRvIGJlIHNob3duIHR3aWNlLgorIworI01BTkRFRk9QVElPTlMJLWEKKyMKKyMgRGVjb21wcmVzcyB3aXRoIGdpdmVuIGRlY29tcHJlc3NvciB3aGVuIGlucHV0IGZpbGUgaGFzIGdpdmVuIGV4dGVuc2lvbgorIyBUaGUgY29tbWFuZCBnaXZlbiBtdXN0IGFjdCBhcyBhIGZpbHRlci4KKyMKKy5negkJL2Jpbi9ndW56aXAgLWMKKy5iejIJCS91c3IvYmluL2J1bnppcDIgLWMKKy54egkJL3Vzci9iaW4vdW54eiAtYworLnoJCQorLloJCS9iaW4vemNhdAorLkYJCQorLlkJCQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW4vbWFucGF0aC41Lmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMTJmZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWFuL21hbi9tYW5wYXRoLjUuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21hbi9tYW5fMS42Zy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuXzEuNmcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0NzM2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYW4vbWFuXzEuNmcuYmIKQEAgLTAsMCArMSw4NCBAQAorU1VNTUFSWSA9ICJPbmxpbmUgZG9jdW1lbnRhdGlvbiB0b29scyIKK0RFU0NSSVBUSU9OID0gIkEgc2V0IG9mIGRvY3VtZW50YXRpb24gdG9vbHM6IG1hbiwgYXByb3BvcyBhbmQgd2hhdGlzIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorSE9NRVBBR0UgPSAiaHR0cDovL3ByaW1hdGVzLnhpbWlhbi5jb20vfmZsdWNpZnJlZGkvbWFuIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitQUiA9ICJyMSIKKworREVQRU5EUyA9ICJncm9mZiBsZXNzIgorCitkZWYgY29tcHJlc3NfcGtnKGQpOgorICAgIGlmICJjb21wcmVzc19kb2MiIGluIChkLmdldFZhcigiSU5IRVJJVCIsIFRydWUpIG9yICIiKS5zcGxpdCgpOgorICAgICAgICAgY29tcHJlc3MgPSBkLmdldFZhcigiRE9DX0NPTVBSRVNTIiwgVHJ1ZSkKKyAgICAgICAgIGlmIGNvbXByZXNzID09ICJneiI6CisgICAgICAgICAgICAgcmV0dXJuICJnemlwIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAiYnoyIjoKKyAgICAgICAgICAgICByZXR1cm4gImJ6aXAyIgorICAgICAgICAgZWxpZiBjb21wcmVzcyA9PSAieHoiOgorICAgICAgICAgICAgIHJldHVybiAieHoiCisgICAgcmV0dXJuICIiCisKK1JERVBFTkRTXyR7UE59ICs9ICIke0Bjb21wcmVzc19wa2coZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL2xvb2thc2lkZS9wa2dzL21hbjJodG1sLyR7QlB9LnRhci5nei9iYTE1NGQ1Nzk2OTI4Yjg0MWM5YzY5ZjBhZTM3NjY2MC8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNWstY29uZnBhdGgucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVoMS1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLW5vbmFzY2lpLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXNlY3VyaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLW1hbmRpcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLWJ1ZzExNjIxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVrLXNvZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVtMi1idWlsZHJvb3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtcm9fdXNyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1uZXdsaW5lLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai11dGY4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1vdmVyZmxvdy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai1ub2NhY2hlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVpMi1pbml0aWFsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVoMS1nZW5jYXQucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjVnLW5vbnJvb3RidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItdHZfZmhzLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41ai1pMThuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZlLXdoYXRpczIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNmUtdXNlX2kxOG5fdmFyc19pbl9hX3N0ZF93YXkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLTEuNW0yLW5vLWNvbG9yLWZvci1wcmludGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS41bTItc2lncGlwZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1pMThuX3doYXRpcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4tMS42ZS1uZXdfc2VjdGlvbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuLjEuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi43Lmd6O3VucGFjaz1mYWxzZSBcCisgICAgICAgICAgIGZpbGU6Ly9tYW4uY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9tYW5wYXRoLjUuZ3o7dW5wYWNrPWZhbHNlIFwKKyAgICAgICAgICAgZmlsZTovL21hbi0xLjZnLXdoYXRpczMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX3NlZC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYTE1NGQ1Nzk2OTI4Yjg0MWM5YzY5ZjBhZTM3NjY2MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjY2RjYjhjM2Y0ZTAwODA5MjNkN2U4MThmMGU0YTIwMmRiMjZjNDY0MTVlYWVmMzYxMzg3YzIwOTk1Yjg5NTlmIgorCitDRkxBR1MgKz0gIi1EU1lTViIKKworZG9fY29uZmlndXJlICgpIHsKKyAgICAgICAgJHtTfS9jb25maWd1cmUgLWRlZmF1bHQgLWNvbmZkaXIgL2V0YyArc2dpZCArZmhzICtsYW5nIGFsbAorfQorCisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbCBERVNURElSPSR7RH0KK30KKworZG9faW5zdGFsbF9hcHBlbmQoKXsKKwlta2RpciAtcCAgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjUKKyAgICAgICAgbWtkaXIgLXAgJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjcKKwljcCAke1dPUktESVJ9L21hbi5jb25mICR7RH0ke3N5c2NvbmZkaXJ9L21hbi5jb25maWcKKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW4uMS5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuMS8KKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW4uNy5neiAke0R9JHtkYXRhZGlyfS9tYW4vbWFuNy8KKyAgICAgICAgY3AgJHtXT1JLRElSfS9tYW5wYXRoLjUuZ3ogJHtEfSR7ZGF0YWRpcn0vbWFuL21hbjUvCit9CisKKworUkRFUEVORFNfJHtQTn0gPSAibGVzcyBncm9mZiIKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2xvY2FsZSAke3N5c2NvbmZkaXJ9L21hbi5jb25maWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tYy9tYy1DVFJMLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNGJhOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWMvbWMvbWMtQ1RSTC5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGaXggYnVpbGQgd2l0aCBtdXNsIGJ5IGVuc3VyaW5nIENUUkwgaXMgZGVmaW5lZC4KKworbXVzbCBkb2VzIG5vdCBkZWZpbmUgQ1RSTCBpbiA8dGVybWlvcy5oPiwgd2UgY291bGQgaW5jbHVkZSA8c3lzL3R0eWRlZmF1bHRzLmg+CitleHBsaWNpdGx5IGJ1dCBpdCdzIGVhc2llciBqdXN0IHRvIGVuc3VyZSBDVFJMIGlzIGRlZmluZWQuCisKK1RoaXMgcGF0Y2ggaXMgdGFrZW4gZnJvbSBTYWJvdGFnZSBMaW51eCwgdGhlIGxpY2Vuc2Ugc3RhdGVtZW50IGZvciBwYXRjaGVzIGFuZAorYnVpbGQgc2NyaXB0cyBpbiBTYWJvdGFnZSBMaW51eCBzYXlzOgorCisgICAgVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIENocmlzdGlhbiBOZXVraXJjaGVuIGhhcyB3YWl2ZWQKKyAgICBhbGwgY29weXJpZ2h0IGFuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGlzIHdvcmsuCisKKyAgICBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisKK1RoZXJlZm9yZSB0aGlzIHNob3VsZCBiZSBnb29kIHRvIGluY2x1ZGUgaW4gT3BlbkVtYmVkZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEJhcmtlciA8cGF1bEBwYXVsYmFya2VyLm1lLnVrPgorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkIChzaG91bGQgYmUgaW5jbHVkZWQgaW4gdjQuOC4xNCkKKworZGlmZiAtdSBtYy00LjguMS43Lm9yZy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMgbWMtNC44LjEuNy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKKy0tLSBtYy00LjguMS43Lm9yZy9saWIvdHR5L3R0eS1uY3Vyc2VzLmMKKysrKyBtYy00LjguMS43L2xpYi90dHkvdHR5LW5jdXJzZXMuYworQEAgLTY1LDcgKzY1LDcgQEAKKyAKKyAvKioqIGZpbGUgc2NvcGUgbWFjcm8gZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAKKy0jaWYgZGVmaW5lZChfQUlYKSAmJiAhZGVmaW5lZChDVFJMKQorKyNpZiAhZGVmaW5lZChDVFJMKQorICNkZWZpbmUgQ1RSTCh4KSAoKHgpICYgMHgxZikKKyAjZW5kaWYKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuNy41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZWIwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjcuNS4yLmJiCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIGlzIGFuIG5jdXJzZXMgYmFzZWQgZmlsZSBtYW5hZ2VyIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5taWRuaWdodC1jb21tYW5kZXIub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0RFUEVORFMgPSAibmN1cnNlcyBnbGliLTIuMCIKK1JERVBFTkRTXyR7UE59ID0gIm5jdXJzZXMtdGVybWluZm8iCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbWMtQ1RSTC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImJkYWU5NjYyNDQ0OTZjZDRmNmQyODJkODBjOWNmM2M2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE2ODMzODg2MmJiMzAwMTdlYjY1ZWQ1NjlhNThlODBhYjY2YWU4Y2VmMTFjODg2NDQwYzllOWY0ZDFlZmM2YWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCAtLXdpdGhvdXQtc2FtYmEiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9tYy8uZGVidWcvIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISR7YmluZGlyfS9lbnYgcGVybCwnICR7RH0ke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKgorCXNlZCAtaSAtZSAnMXMsIyEuKnB5dGhvbiwjISR7YmluZGlyfS9lbnYgcHl0aG9uLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCit9CisKK1BBQ0tBR0VTID0rICIke0JQTn0taGVscGVycy1wZXJsICR7QlBOfS1oZWxwZXJzLXB5dGhvbiAke0JQTn0taGVscGVycyAke0JQTn0tZmlzaCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1wZXJsID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQZXJsLWJhc2VkIGhlbHBlciBzY3JpcHRzIgorRklMRVNfJHtCUE59LWhlbHBlcnMtcGVybCA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYSsgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2FwdCsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWJhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmQgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2Rwa2crIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL21haWxmcyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcGF0Y2hmcyBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvcnBtcysgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3VsaWIgXCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3V6aXAiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1wZXJsID0gInBlcmwiCisKK1NVTU1BUllfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gIk1pZG5pZ2h0IENvbW1hbmRlciBQeXRob24tYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1weXRob24gPSAiJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL3MzKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWMxNTQxIgorUkRFUEVORFNfJHtCUE59LWhlbHBlcnMtcHl0aG9uID0gInB5dGhvbiIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycyA9ICJNaWRuaWdodCBDb21tYW5kZXIgc2hlbGwgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycyA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvKiAke2xpYmV4ZWNkaXJ9L21jL2V4dC5kLyoiCisKK1NVTU1BUllfJHtCUE59LWZpc2ggPSAiTWlkbmlnaHQgQ29tbWFuZGVyIEZpc2ggc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1maXNoID0gIiR7bGliZXhlY2Rpcn0vbWMvZmlzaCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21jL21jXzQuOC4xNC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YzJmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tYy9tY180LjguMTQuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNaWRuaWdodCBDb21tYW5kZXIgaXMgYW4gbmN1cnNlcyBiYXNlZCBmaWxlIG1hbmFnZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1pZG5pZ2h0LWNvbW1hbmRlci5vcmcvIgorTElDRU5TRSA9ICJHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3MGJiYWZlMzYwZTczZjk4NDBiZDc5ODE2MjFmOWMyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorREVQRU5EUyA9ICJuY3Vyc2VzIGdsaWItMi4wIHV0aWwtbGludXgiCitSREVQRU5EU18ke1BOfSA9ICJuY3Vyc2VzLXRlcm1pbmZvIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubWlkbmlnaHQtY29tbWFuZGVyLm9yZy9kb3dubG9hZHMvJHtCUE59LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTFjYjc1NjQzYzJiZDRkZjY0YmJjZjJkYWI3NjkwNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MWZkMGZkMjI4MGMzZDA5ZDdlMGFlYzhhYjAwMWZjODlkYWQ4ZTRmZDk5NDFmMzg2NDE0NjY3YjU1MTUyZWM1IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjCisjIEJvdGggU2FtYmEgKHNtYikgYW5kIHNmdHAgcmVxdWlyZSBwYWNrYWdlIGRlbGl2ZXJlZCBmcm9tIG1ldGEtb3BlbmVtYmVkZGVkCisjCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXZmcy1zbWIsLS1kaXNhYmxlLXZmcy1zbWIsc2FtYmEsIgorUEFDS0FHRUNPTkZJR1tzZnRwXSA9ICItLWVuYWJsZS12ZnMtc2Z0cCwtLWRpc2FibGUtdmZzLXNmdHAsbGlic3NoMiwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc2NyZWVuPW5jdXJzZXMgLS13aXRob3V0LWdwbS1tb3VzZSAtLXdpdGhvdXQteCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L21jLy5kZWJ1Zy8iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlzZWQgLWkgLWUgJzFzLCMhLipwZXJsLCMhJHtiaW5kaXJ9L2VudiBwZXJsLCcgJHtEfSR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qCisJc2VkIC1pIC1lICcxcywjIS4qcHl0aG9uLCMhJHtiaW5kaXJ9L2VudiBweXRob24sJyAke0R9JHtsaWJleGVjZGlyfS9tYy9leHRmcy5kLyoKK30KKworUEFDS0FHRVMgPSsgIiR7QlBOfS1oZWxwZXJzLXBlcmwgJHtCUE59LWhlbHBlcnMtcHl0aG9uICR7QlBOfS1oZWxwZXJzICR7QlBOfS1maXNoIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFBlcmwtYmFzZWQgaGVscGVyIHNjcmlwdHMiCitGSUxFU18ke0JQTn0taGVscGVycy1wZXJsID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9hKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvYXB0KyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9kZWIgJHtsaWJleGVjZGlyfS9tYy9leHRmcy5kL2RlYmEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZGViZCAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvZHBrZysgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvbWFpbGZzICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9wYXRjaGZzIFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC9ycG1zKyAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdWxpYiBcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvdXppcCIKK1JERVBFTkRTXyR7QlBOfS1oZWxwZXJzLXBlcmwgPSAicGVybCIKKworU1VNTUFSWV8ke0JQTn0taGVscGVycy1weXRob24gPSAiTWlkbmlnaHQgQ29tbWFuZGVyIFB5dGhvbi1iYXNlZCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzLXB5dGhvbiA9ICIke2xpYmV4ZWNkaXJ9L21jL2V4dGZzLmQvczMrICR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC91YzE1NDEiCitSREVQRU5EU18ke0JQTn0taGVscGVycy1weXRob24gPSAicHl0aG9uIgorCitTVU1NQVJZXyR7QlBOfS1oZWxwZXJzID0gIk1pZG5pZ2h0IENvbW1hbmRlciBzaGVsbCBoZWxwZXIgc2NyaXB0cyIKK0ZJTEVTXyR7QlBOfS1oZWxwZXJzID0gIiR7bGliZXhlY2Rpcn0vbWMvZXh0ZnMuZC8qICR7bGliZXhlY2Rpcn0vbWMvZXh0LmQvKiIKKworU1VNTUFSWV8ke0JQTn0tZmlzaCA9ICJNaWRuaWdodCBDb21tYW5kZXIgRmlzaCBzY3JpcHRzIgorRklMRVNfJHtCUE59LWZpc2ggPSAiJHtsaWJleGVjZGlyfS9tYy9maXNoIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvMDAwMS1GaXgtdHlwby1pbi1jb21wYXJpc2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcwYjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2gKQEAgLTAsMCArMSw4NiBAQAorRnJvbSAxOGQzNjBkNzQyNzFhMDY2YTg0OWJjMWZiYTRmMTBkYmIyM2VkMjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgOCBTZXAgMjAxNSAwODoxNzo0MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggdHlwbyBpbiBjb21wYXJpc2lvbgorCitlcnJvcjogY29tcGFyaXNvbiBvZiBhcnJheSAnZGV2bm0nIGVxdWFsIHRvIGEgbnVsbCBwb2ludGVyIGlzIGFsd2F5cyBmYWxzZQorCitVc2VyIGJpdHdpc2UgJyYnIG9wZXJhdG9yIGFzIGl0IGlzIGEgbWFzaworCitGaXhlcworZXJyb3I6IHVzZSBvZiBsb2dpY2FsICcmJicgd2l0aCBjb25zdGFudCBvcGVyYW5kCisKK1JlbW92ZSBleHRyYW5lb3VzIHBhcmVucworCitlcnJvcjogZXF1YWxpdHkgY29tcGFyaXNvbiB3aXRoIGV4dHJhbmVvdXMgcGFyZW50aGVzZXMKKworUmVtb3ZlIGRlYWQgY29kZQorCityZXN0cmlwZS5jOjQ2NToyMTogZXJyb3I6IGV4cGxpY2l0bHkgYXNzaWduaW5nIHZhbHVlIG9mIHZhcmlhYmxlIG9mIHR5cGUgJ2ludCcgdG8gaXRzZWxmCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgbWRtb24uaCAgICAgICB8IDIgKy0KKyBtZG9wZW4uYyAgICAgIHwgMiArLQorIHJlc3RyaXBlLmMgICAgfCAzIC0tLQorIHN1cGVyLWludGVsLmMgfCAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tZG1vbi5oIGIvbWRtb24uaAoraW5kZXggYWE3NTBjNi4uMGIwOGMzZCAxMDA2NDQKKy0tLSBhL21kbW9uLmgKKysrKyBiL21kbW9uLmgKK0BAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGlubGluZSBpbnQgaXNfcmVzeW5jX2NvbXBsZXRlKHN0cnVjdCBtZGluZm8gKmFycmF5KQorIAkJYnJlYWs7CisgCWNhc2UgMTA6CisgCQlsID0gYXJyYXktPmFycmF5LmxheW91dDsKKy0JCW5jb3BpZXMgPSAobCAmIDB4ZmYpICogKChsID4+IDgpICYmIDB4ZmYpOworKwkJbmNvcGllcyA9IChsICYgMHhmZikgKiAoKGwgPj4gOCkgJiAweGZmKTsKKyAJCXN5bmNfc2l6ZSA9IGFycmF5LT5jb21wb25lbnRfc2l6ZSAqIGFycmF5LT5hcnJheS5yYWlkX2Rpc2tzOworIAkJc3luY19zaXplIC89IG5jb3BpZXM7CisgCQlicmVhazsKK2RpZmYgLS1naXQgYS9tZG9wZW4uYyBiL21kb3Blbi5jCitpbmRleCAyODQxMGY0Li5jNWVlMmE2IDEwMDY0NAorLS0tIGEvbWRvcGVuLmMKKysrKyBiL21kb3Blbi5jCitAQCAtMzE4LDcgKzMxOCw3IEBAIGludCBjcmVhdGVfbWRkZXYoY2hhciAqZGV2LCBjaGFyICpuYW1lLCBpbnQgYXV0b2YsIGludCB0cnVzdHdvcnRoeSwKKyAJZWxzZSBpZiAobnVtIDwgMCkgeworIAkJLyogbmVlZCB0byBjaG9vc2UgYSBmcmVlIG51bWJlci4gKi8KKyAJCWNoYXIgKl9kZXZubSA9IGZpbmRfZnJlZV9kZXZubSh1c2VfbWRwKTsKKy0JCWlmIChkZXZubSA9PSBOVUxMKSB7CisrCQlpZiAoX2Rldm5tID09IE5VTEwpIHsKKyAJCQlwcl9lcnIoIk5vIGF2YWlsIG1kIGRldmljZXMgLSBhYm9ydGluZ1xuIik7CisgCQkJcmV0dXJuIC0xOworIAkJfQorZGlmZiAtLWdpdCBhL3Jlc3RyaXBlLmMgYi9yZXN0cmlwZS5jCitpbmRleCA0ZDkyMTkwLi5jZmU5NjY2IDEwMDY0NAorLS0tIGEvcmVzdHJpcGUuYworKysrIGIvcmVzdHJpcGUuYworQEAgLTQ2MSw5ICs0NjEsNiBAQCBpbnQgcmFpZDZfY2hlY2tfZGlza3MoaW50IGRhdGFfZGlza3MsIGludCBzdGFydCwgaW50IGNodW5rX3NpemUsCisgCQkJY3Vycl9icm9rZW5fZGlzayA9IGRpc2tEOworIAkJfQorIAorLQkJaWYoKFB4ID09IDApICYmIChReCA9PSAwKSkKKy0JCQljdXJyX2Jyb2tlbl9kaXNrID0gY3Vycl9icm9rZW5fZGlzazsKKy0KKyAJCWlmKGN1cnJfYnJva2VuX2Rpc2sgPj0gZGF0YV9kaXNrcyArIDIpCisgCQkJYnJva2VuX3N0YXR1cyA9IDI7CisgCitkaWZmIC0tZ2l0IGEvc3VwZXItaW50ZWwuYyBiL3N1cGVyLWludGVsLmMKK2luZGV4IDNmODEyZDYuLjE4MzgwMTIgMTAwNjQ0CistLS0gYS9zdXBlci1pbnRlbC5jCisrKysgYi9zdXBlci1pbnRlbC5jCitAQCAtMTAwMjcsNyArMTAwMjcsNyBAQCBlbnVtIGltc21fcmVzaGFwZV90eXBlIGltc21fYW5hbHl6ZV9jaGFuZ2Uoc3RydWN0IHN1cGVydHlwZSAqc3QsCisgCQkJCWdlby0+c2l6ZSA9IG1heF9zaXplOworIAkJfQorIAorLQkJaWYgKChkaXJlY3Rpb24gPT0gUk9MTEJBQ0tfTUVUQURBVEFfQ0hBTkdFUykpIHsKKysJCWlmIChkaXJlY3Rpb24gPT0gUk9MTEJBQ0tfTUVUQURBVEFfQ0hBTkdFUykgeworIAkJCS8qIGFjY2VwdCBzaXplIGZvciByb2xsYmFjayBvbmx5CisgCQkJKi8KKyAJCX0gZWxzZSB7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL2djYy00LjkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiZjFkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9nY2MtNC45LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK3N1cGVyLWludGVsLmM6NTA2MzoyOiBlcnJvcjogcmlnaHQtaGFuZCBvcGVyYW5kIG9mIGNvbW1hIGV4cHJlc3Npb24gaGFzIG5vIGVmZmVjdCBbLVdlcnJvcj11bnVzZWQtdmFsdWVdCisgIHNucHJpbnRmKChjaGFyICopIHNwYXJlLT5zaWcsIE1BWF9TSUdOQVRVUkVfTEVOR1RILAorICBeCitjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworbWFrZTogKioqIFtzdXBlci1pbnRlbC5vXSBFcnJvciAxCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IG1kYWRtLTMuMy9zdXBlci1pbnRlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLm9yaWcvc3VwZXItaW50ZWwuYwkyMDE0LTA1LTAyIDE1OjA4OjIxLjE1NDMxOTY1MSAtMDcwMAorKysrIG1kYWRtLTMuMy9zdXBlci1pbnRlbC5jCTIwMTQtMDUtMDIgMTU6MDk6MzEuNDcwOTg1Nzk0IC0wNzAwCitAQCAtNTA2MCw3ICs1MDYwLDcgQEAKKyAJc3BhcmUtPmNhY2hlX3NpemUgPSBtcGItPmNhY2hlX3NpemUsCisgCXNwYXJlLT5wd3JfY3ljbGVfY291bnQgPSBfX2NwdV90b19sZTMyKDEpLAorIAorLQlzbnByaW50ZigoY2hhciAqKSBzcGFyZS0+c2lnLCBNQVhfU0lHTkFUVVJFX0xFTkdUSCwKKysJKHZvaWQpc25wcmludGYoKGNoYXIgKikgc3BhcmUtPnNpZywgTUFYX1NJR05BVFVSRV9MRU5HVEgsCisgCQkgTVBCX1NJR05BVFVSRSBNUEJfVkVSU0lPTl9SQUlEMCk7CisgCisgCWZvciAoZCA9IHN1cGVyLT5kaXNrczsgZDsgZCA9IGQtPm5leHQpIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjNkYjBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL21kYWRtLTMuMi4yX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitCeSBoYXJkY29kaW5nIENDJ3MgZGVmaW5pdGlvbiBpbiB0aGUgTWFrZWZpbGUsIGFsbCB0aGUgZ2NjIHBhcmFtZXRlcnMgCitzZXQgYnkgdHVuZSBzZXR0aW5ncyBhcmUgbG9zdC4gQ2F1c2luZyBjb21waWxlIGZhaWx1cmUgd2l0aCB4MzIgdG9vbGNoYWluCisKK0FzIHRoZSBiaXRiYWtlIGRlZmluZWQgQ0MgaXMgZ29vZCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZWRmaW5lIENDIGluIHRoZSAKK21ha2UgZmlsZSwgaGVuY2UgbWFraW5nIHRoZSBDQyBkZWZpbml0aW9uIGluIHRoZSBNYWtlZmlsZSBjb25kaXRpb25hbC4KKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8xMi8wNworCitJbmRleDogbWRhZG0tMy4zL01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbWRhZG0tMy4zLm9yaWcvTWFrZWZpbGUJMjAxMy0wOS0wMyAwNzo0Nzo0Ny4wMDAwMDAwMDAgKzAzMDAKKysrKyBtZGFkbS0zLjMvTWFrZWZpbGUJMjAxMy0xMC0xNiAxNjo0NDoyMy41NDIyOTU0ODcgKzAzMDAKK0BAIC00MSw3ICs0MSw3IEBACisgCisgS0xJQkNfR0NDID0gZ2NjIC1ub3N0ZGluYyAtaXdpdGhwcmVmaXggaW5jbHVkZSAtSSQoS0xJQkMpL2tsaWJjL2luY2x1ZGUgLUkkKEtMSUJDKS9saW51eC9pbmNsdWRlIC1JJChLTElCQykva2xpYmMvYXJjaC9pMzg2L2luY2x1ZGUgLUkkKEtMSUJDKS9rbGliYy9pbmNsdWRlL2JpdHMzMgorIAorLUNDID0gJChDUk9TU19DT01QSUxFKWdjYworK0NDID89ICQoQ1JPU1NfQ09NUElMRSlnY2MKKyBDWEZMQUdTID89IC1nZ2RiCisgQ1dGTEFHUyA9IC1XYWxsIC1XZXJyb3IgLVdzdHJpY3QtcHJvdG90eXBlcyAtV2V4dHJhIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgorIGlmZGVmIFdBUk5fVU5VU0VECmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vZmlsZXMvbWRhZG0tMy4zLjJfeDMyX2FiaV90aW1lX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1NmQwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9tZGFkbS0zLjMuMl94MzJfYWJpX3RpbWVfdC5wYXRjaApAQCAtMCwwICsxLDI1IEBACitXaGVuIHRyeSB0byBwcmludCB0aW1lX3QgdmFsdWVzIGFzIGEgbG9uZyBpbnQgaXQgY2F1c2VzIGFuIGVycm9yIGJlY2F1c2UgdGltZV90CitkYXRhIHR5cGUgaW4geDMyIEFCSSBpcyBsb25nIGxvbmcgaW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBtZGFkbS0zLjMuNC9tb25pdG9yLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBtZGFkbS0zLjMuNC5vcmlnL21vbml0b3IuYworKysrIG1kYWRtLTMuMy40L21vbml0b3IuYworQEAgLTI1Nyw5ICsyNTcsMTIgQEAgc3RhdGljIGludCByZWFkX2FuZF9hY3Qoc3RydWN0IGFjdGl2ZV9hcgorIAkJCW1kaS0+Y3Vycl9zdGF0ZSA9IHJlYWRfZGV2X3N0YXRlKG1kaS0+c3RhdGVfZmQpOworIAkJfQorIAl9CistCisgCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pICYmIGRlZmluZWQoX19JTFAzMl9fKQorKwlkcHJpbnRmKCIoJWQpOiAlbGxkLiUwNmxsZCBzdGF0ZTolcyBwcmV2OiVzIGFjdGlvbjolcyBwcmV2OiAlcyBzdGFydDolbGx1XG4iLAorKyNlbHNlCisgCWRwcmludGYoIiglZCk6ICVsZC4lMDZsZCBzdGF0ZTolcyBwcmV2OiVzIGFjdGlvbjolcyBwcmV2OiAlcyBzdGFydDolbGx1XG4iLAorKyNlbmRpZgorIAkJYS0+aW5mby5jb250YWluZXJfbWVtYmVyLAorIAkJdHYudHZfc2VjLCB0di50dl91c2VjLAorIAkJYXJyYXlfc3RhdGVzW2EtPmN1cnJfc3RhdGVdLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyNzYwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9tZGFkbS9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKKy4vdGVzdCAmPi4vdGVzdC5sb2cKK2lmIFsgJD8gLWVxIDAgXQordGhlbgorCWVjaG8gIlBBU1M6IG1kYWRtIgorCXJtIHRlc3QubG9nCitlbHNlCisJZWNobyAiRkFJTDogbWRhZG0iCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21kYWRtL21kYWRtXzMuMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOTgxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWRhZG0vbWRhZG1fMy4zLjQuYmIKQEAgLTAsMCArMSw3MSBAQAorU1VNTUFSWSA9ICJUb29sIGZvciBtYW5hZ2luZyBzb2Z0d2FyZSBSQUlEIHVuZGVyIExpbnV4IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9yYWlkL21kYWRtLyIKKworIyBTb21lIGZpbGVzIGFyZSBHUEx2Misgd2hpbGUgb3RoZXJzIGFyZSBHUEx2Mi4KK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9tZG1vbi5jO2JlZ2lubGluZT00O2VuZGxpbmU9MTg7bWQ1PWFmN2Q4NDQ0ZDljNGQzZTVjN2NhYWMwZDlkMzQwMzlkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21kYWRtLmg7YmVnbGlubG5lPTQ7ZW5kbGluZT0yMjttZDU9NDYyYmM5OTM2YWMwZDNkYTExMDE5MWEzZjk5OTQxNjEiCisKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL3JhaWQvbWRhZG0vJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9tZGFkbS0zLjIuMl9maXhfZm9yX3gzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nY2MtNC45LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21kYWRtLTMuMy4yX3gzMl9hYmlfdGltZV90LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LXR5cG8taW4tY29tcGFyaXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKwkgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Y2E4YjExNDcxMGY5OGY1M2YyMGM1Nzg3YjY3NGEwOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YWU1ZjQ1MzA2Yjg3MzE5MGU5MWY0MTA3MDliMDBlNTE5OTdiNjMzYzA3MmIzM2Y4ZWZkOWY3ZGYwMjJjYTY4IgorCitDRkxBR1MgKz0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworRVhUUkFfT0VNQUtFID0gIkNIRUNLX1JVTl9ESVI9MCIKKyMgUFBDNjQgYW5kIE1JUFM2NCB1c2VzIGxvbmcgbG9uZyBmb3IgdTY0IGluIHRoZSBrZXJuZWwsIGJ1dCBwb3dlcnBjJ3MgYXNtL3R5cGVzLmgKKyMgcHJldmVudHMgNjQtYml0IHVzZXJsYW5kIGZyb20gc2VlaW5nIHRoaXMgZGVmaW5pdGlvbiwgaW5zdGVhZCBkZWZhdWx0aW5nCisjIHRvIHU2NCA9PSBsb25nIGluIHVzZXJzcGFjZS4gRGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXyB0byBnZXQKKyMgaW50LWxsNjQuaCBpbmNsdWRlZAorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAnIENGTEFHUz0tRF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfXycKK0VYVFJBX09FTUFLRV9hcHBlbmRfbWlwczY0ID0gJyBDRkxBR1M9LURfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18nCitFWFRSQV9PRU1BS0VfYXBwZW5kX21pcHM2NG4zMiA9ICcgQ0ZMQUdTPS1EX19TQU5FX1VTRVJTUEFDRV9UWVBFU19fJworCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlleHBvcnQgU1RSSVA9IiIKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtiYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyoucnVsZXMiCisKK2luaGVyaXQgcHRlc3QKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwlvZV9ydW5tYWtlIHRlc3QKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwljcCAtYSAke1N9L3Rlc3RzICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzCisJY3AgJHtTfS90ZXN0ICR7RH0ke1BURVNUX1BBVEh9CisJc2VkIC1lICdzIXNsZWVwIDAuKiFzbGVlcCAxIWc7IHMhL3Zhci90bXAhLyFnJyAtaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbG4gLXMgL3NiaW4vbWRhZG0gJHtEfSR7UFRFU1RfUEFUSH0vbWRhZG0KKwlmb3IgcHJnIGluIHRlc3Rfc3RyaXBlIHN3YXBfc3VwZXIgcmFpZDZjaGVjaworCWRvCisJCWluc3RhbGwgLUQgLW0gNzU1ICRwcmcgJHtEfSR7UFRFU1RfUEFUSH0vCisJZG9uZQorfQorUkRFUEVORFNfJHtQTn0tcHRlc3QgKz0gImJhc2giCitSUkVDT01NRU5EU18ke1BOfS1wdGVzdCArPSAiIFwKKyAgICBjb3JldXRpbHMgXAorICAgIHV0aWwtbGludXggXAorICAgIGtlcm5lbC1tb2R1bGUtbG9vcCBcCisgICAga2VybmVsLW1vZHVsZS1saW5lYXIgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDAgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDEgXAorICAgIGtlcm5lbC1tb2R1bGUtcmFpZDEwIFwKKyAgICBrZXJuZWwtbW9kdWxlLXJhaWQ0NTYgXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluZ2V0dHkvbWluZ2V0dHlfMS4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzE2MjI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmdldHR5L21pbmdldHR5XzEuMDguYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJDb21wYWN0IGdldHR5IHRlcm1pbmFsIGhhbmRsZXIgZm9yIHZpcnR1YWwgY29uc29sZXMgb25seSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWluZ2V0dHkvIgorTElDRU5TRSA9ICJHUEx2MiIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wYzU2ZGIwMTQzZjRmODBjMzY5ZWUzYWY3NDI1YWY2ZSIKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyYTc1YWQ2NDg3ZmYyNzE0MjRmZmMwMGE2NDQyMDk5MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwZjU1YzkwYmE0ZmFhOTEzZDkxZWY5OWNiZjVjYjJlYjRkYmUyNzgwMzE0YzNiYjE3OTUzZjg0OWM4Y2RkZDE3IgorCisjIHN1YnN0aXR1dGUgb3VyIENGTEFHUyBmb3IgIi1PMiAtV2FsbCAtVyAtcGlwZSIKKyMKK0VYVFJBX09FTUFLRSA9ICJDQz0nJHtDQ30nIFwKKyAgICAgICAgICAgICAgICBDRkxBR1M9JyR7Q0ZMQUdTfSAtRF9HTlVfU09VUkNFJyIKKworZG9faW5zdGFsbCgpeworICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44ICR7RH0vJHtiYXNlX3NiaW5kaXJ9CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAiZ2V0dHkiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ2V0dHldID0gIiR7YmFzZV9zYmluZGlyfS9nZXR0eSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtnZXR0eV0gPSAiJHtiYXNlX3NiaW5kaXJ9L21pbmdldHR5IgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWM2N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLUZpeC1idWlsZC1pc3N1cy1zdXJmYWNlZC1kdWUtdG8tbXVzbC5wYXRjaApAQCAtMCwwICsxLDQ3IEBACitGcm9tIGQ2MmE1ODYyZTI2ZWQzZmM1OGQ3ODllZmU5YzQwY2E2YzkxMWQzNmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAyMjozNTozMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggYnVpbGQgaXNzdXMgc3VyZmFjZWQgZHVlIHRvIG11c2wKKworc3JjL2dldHNkaXIuaDoyODoxNDogZXJyb3I6ICdNQVhOQU1MRU4nIHVuZGVjbGFyZWQgaGVyZSAobm90IGluIGEgZnVuY3Rpb24pCisgICBjaGFyIGZuYW1lW01BWE5BTUxFTiArIDFdOyAgLyogZmlsZW5hbWUgKyB0ZXJtaW5hdGluZyBudWxsICovCisKK3NyYy9kaWFsLmM6MzUyOjIyOiBlcnJvcjogJ0tJT0NTT1VORCcgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8ICAgICAgaW9jdGwoY29uc29sZWZkLCBLSU9DU09VTkQsIGspOworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIHNyYy9kaWFsLmMgICAgfCAyICstCisgc3JjL2dldHNkaXIuYyB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZGlhbC5jIGIvc3JjL2RpYWwuYworaW5kZXggYTkwYzFkMi4uYmYwMjU3NCAxMDA2NDQKKy0tLSBhL3NyYy9kaWFsLmMKKysrKyBiL3NyYy9kaWFsLmMKK0BAIC0zOSw3ICszOSw3IEBACisgI2luY2x1ZGUgImludGwuaCIKKyAKKyAjaWZkZWYgVkNfTVVTSUMKKy0jICBpZiBkZWZpbmVkKF9fR0xJQkNfXykKKysjICBpZiBkZWZpbmVkKF9fR0xJQkNfXykgfHwgZGVmaW5lZChfX2xpbnV4X18pCisgIyAgICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyAjICAgIGluY2x1ZGUgPHN5cy9rZC5oPgorICMgICAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KK2RpZmYgLS1naXQgYS9zcmMvZ2V0c2Rpci5jIGIvc3JjL2dldHNkaXIuYworaW5kZXggMjE5NWIyNy4uYjYxYTM2MSAxMDA2NDQKKy0tLSBhL3NyYy9nZXRzZGlyLmMKKysrKyBiL3NyYy9nZXRzZGlyLmMKK0BAIC0zMCw2ICszMCw3IEBACisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCisgI2luY2x1ZGUgImdldHNkaXIuaCIKKy0tIAorMi41LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tLzAwMDEtZml4LW1pbmljb20taC12LXJldHVybi12YWx1ZS1pcy1ub3QtMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDgyNjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS8wMDAxLWZpeC1taW5pY29tLWgtdi1yZXR1cm4tdmFsdWUtaXMtbm90LTAucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorU3ViamVjdDogW1BBVENIXSBmaXggbWluaWNvbSAtaC8tdiByZXR1cm4gdmFsdWUgaXMgbm90IDAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEx1IENob25nIDxDaG9uZy5MdUB3aW5kcml2ZXIuY29tPgorCistLS0KKyBzcmMvbWluaWNvbS5jIHwgICAgNiArKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pbmljb20uYyBiL3NyYy9taW5pY29tLmMKK2luZGV4IGUxYTU1N2IuLjczMGRhN2MgMTAwNjQ0CistLS0gYS9zcmMvbWluaWNvbS5jCisrKysgYi9zcmMvbWluaWNvbS5jCitAQCAtMTE2NiwxNSArMTE2NiwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCSAgICAgICAgICJtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuIgorICAgICAgICAgICAgICAgICAgImFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvblxuIgorICAgICAgICAgICAgICAgICAgIjIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbiIpOworLSAgICAgICAgICBleGl0KDEpOworLSAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGNhc2UgJ3MnOiAvKiBzZXR1cCBtb2RlICovCisgICAgICAgICAgIGRvc2V0dXAgPSAxOworICAgICAgICAgICBicmVhazsKKyAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICBoZWxwdGhlbSgpOworLSAgICAgICAgICBleGl0KDEpOworLSAgICAgICAgICBicmVhazsKKysgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgIGNhc2UgJ3AnOiAvKiBQc2V1ZG8gdGVybWluYWwgdG8gdXNlLiAqLworICAgICAgICAgICBpZiAoc3RybmNtcChvcHRhcmcsICIvZGV2LyIsIDUpID09IDApCisgICAgICAgICAgICAgb3B0YXJnICs9IDU7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tL2FsbG93LnRvLmRpc2FibGUubG9ja2Rldi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWMwODg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21pbmljb20vbWluaWNvbS9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworLS0tIGEvY29uZmlndXJlLmluCTIwMTMtMDItMDYgMTg6MTg6MTMuMDAwMDAwMDAwICswMTAwCisrKysgYi9jb25maWd1cmUuaW4JMjAxMy0wNy0yMSAxNTozMToyNy42MTQ4Mjg4OTQgKzAyMDAKK0BAIC00MCw3ICs0MCwxMyBAQAorIGZpCisgCisgUEtHX1BST0dfUEtHX0NPTkZJRworLWlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorKworK0FDX0FSR19FTkFCTEUoW2xvY2tkZXZdLAorKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxvY2tkZXZdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW0VuYWJsZSBsb2NrZGV2IHN1cHBvcnQgKGRlZjogZW5hYmxlZCldKSwKKysgICAgICAgIFtdLCBbZW5hYmxlX2xvY2tkZXY9InllcyJdKQorKworK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiB0ZXN0ICJ4JGVuYWJsZV9sb2NrZGV2IiA9IHh5ZXM7IHRoZW4KKyAJUEtHX0NIRUNLX01PRFVMRVMoW0xPQ0tERVZdLCBbbG9ja2Rldl0sIEFDX0RFRklORShbSEFWRV9MT0NLREVWXSxbMV0sW0RlZmluZSBpZiB5b3UgaGF2ZSBsb2NrZGV2XSksWzpdKQorIGZpCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9taW5pY29tL21pbmljb21fMi43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzVjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWluaWNvbS9taW5pY29tXzIuNy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlRleHQtYmFzZWQgbW9kZW0gY29udHJvbCBhbmQgdGVybWluYWwgZW11bGF0aW9uIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJNaW5pY29tIGlzIGEgdGV4dC1iYXNlZCBtb2RlbSBjb250cm9sIGFuZCB0ZXJtaW5hbCBlbXVsYXRpb24gcHJvZ3JhbSBmb3IgVW5peC1saWtlIG9wZXJhdGluZyBzeXN0ZW1zIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpY29udiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDIwNDc3YWJjNTY3NDA0ZGViY2EwYTJhMWNiNmI2NDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21pbmljb20uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTEyO21kNT1hNTg4MzhjYjcwOWYwZGI1MTdmNGU0MjczMGM0OWU4MSIKKworU1JDX1VSSSA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL2Zycy9kb3dubG9hZC5waHAvbGF0ZXN0ZmlsZS8zLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hbGxvdy50by5kaXNhYmxlLmxvY2tkZXYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1maXgtbWluaWNvbS1oLXYtcmV0dXJuLXZhbHVlLWlzLW5vdC0wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWJ1aWxkLWlzc3VzLXN1cmZhY2VkLWR1ZS10by1tdXNsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MDQ0Y2EzZTI5MTI2OGMzMzI5NGYxNzFkNDI2ZGMyZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5YWMzYTY2M2I4MmY0ZjVkZjY0MTE0YjQ3OTJiOTkyNmI1MzZjODVmNTlkZTBmMmQyYjMyMWM3NjI2YTkwNGY0IgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsb2NrZGV2XSA9ICItLWVuYWJsZS1sb2NrZGV2LC0tZGlzYWJsZS1sb2NrZGV2LGxvY2tkZXYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK2RvX2luc3RhbGwoKSB7CisJZm9yIGQgaW4gZG9jIGV4dHJhcyBtYW4gbGliIHNyYzsgZG8gbWFrZSAtQyAkZCBERVNURElSPSR7RH0gaW5zdGFsbDsgZG9uZQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2Rpc2FibGUtc3RyaXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA2ODY5ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ta3RlbXAvZmlsZXMvZGlzYWJsZS1zdHJpcC5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCAzN2IzY2M5Li5mMTAyNmYzIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtOTUsNyArOTUsNyBAQCBpbnN0YWxsLWRpcnM6CisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAKKyBpbnN0YWxsLWJpbmFyaWVzOiAkKFBST0cpCistCSQoSU5TVEFMTCkgLW0gMDU1NSAtcyAkKFBST0cpICQoREVTVERJUikkKGJpbmRpcikvJChQUk9HKQorKwkkKElOU1RBTEwpIC1tIDA1NTUgJChQUk9HKSAkKERFU1RESVIpJChiaW5kaXIpLyQoUFJPRykKKyAKKyBpbnN0YWxsLW1hbjoKKyAJJChJTlNUQUxMKSAtbSAwNDQ0ICQoc3JjZGlyKS9ta3RlbXAuJChtYW50eXBlKSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL2ZpbGVzL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2I2ZGNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9maWxlcy9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDI0IEBACitUaGlzIGZpeGVzIHRoZSBwYXJhbGxlbCBtYWtlIGluc3RhbGwgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IEFjY2VwdGVkCitodHRwOi8vd3d3LmdyYXRpc29mdC51cy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTI4CisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG1rdGVtcC0xLjcvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBta3RlbXAtMS43Lm9yaWcvTWFrZWZpbGUuaW4KKysrKyBta3RlbXAtMS43L01ha2VmaWxlLmluCitAQCAtOTQsMTAgKzk0LDEwIEBAIGluc3RhbGwtZGlyczoKKyAJJChTSEVMTCkgJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmluZGlyKSBcCisgCSAgICAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAKKy1pbnN0YWxsLWJpbmFyaWVzOiAkKFBST0cpCisraW5zdGFsbC1iaW5hcmllczogaW5zdGFsbC1kaXJzICQoUFJPRykKKyAJJChJTlNUQUxMKSAtbSAwNTU1ICQoUFJPRykgJChERVNURElSKSQoYmluZGlyKS8kKFBST0cpCisgCistaW5zdGFsbC1tYW46CisraW5zdGFsbC1tYW46IGluc3RhbGwtZGlycworIAkkKElOU1RBTEwpIC1tIDA0NDQgJChzcmNkaXIpL21rdGVtcC4kKG1hbnR5cGUpIFwKKyAJICAgICQoREVTVERJUikkKG1hbmRpcikvbWFuMS9ta3RlbXAuMQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21rdGVtcC9ta3RlbXBfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMjM4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbWt0ZW1wL21rdGVtcF8xLjcuYmIKQEAgLTAsMCArMSwzNCBAQAorU1VNTUFSWSA9ICJFbmFibGVzIHNhZmUgdGVtcG9yYXJ5IGZpbGUgY3JlYXRpb24gZnJvbSBzaGVsbCBzY3JpcHRzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ta3RlbXAub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5ta3RlbXAub3JnL2J1Z3MiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIklTQyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQzMDY4MGY2MzIyYTFlYjg3MTk5YjVlMDFhODJjMGQ0IgorCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAubWt0ZW1wLm9yZy9wdWIvbWt0ZW1wLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICBmaWxlOi8vZGlzYWJsZS1zdHJpcC5wYXRjaCBcCisgICAgICAgIGZpbGU6Ly9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBcCisgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjc4N2JiZWQ5ZmEyZWU4ZTc2NDU3MzNjMGU4ZTY1MTcyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhlOTRiOWUxZWRmODY2YjI2MDk1NDVkYTY1YjYyNzk5NmFjNWQxNThmZGEwNzFlNDkyYmRkYjJmNGE0ODI2NzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1saWJjIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwltdiAke0R9JHtiaW5kaXJ9L21rdGVtcCAke0R9JHtiYXNlX2JpbmRpcn0vbWt0ZW1wCisJcm1kaXIgJHtEfSR7YmluZGlyfQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJta3RlbXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wXSA9ICIke2Jhc2VfYmluZGlyfS9ta3RlbXAiCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59LWRvYyA9ICJta3RlbXAuMSIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZXyR7UE59LWRvYyA9ICIzMDAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbWt0ZW1wLjFdID0gIiR7bWFuZGlyfS9tYW4xL21rdGVtcC4xIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL21zbXRwL21zbXRwXzEuNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YmY1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbXNtdHAvbXNtdHBfMS42LjIuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJtc210cCBpcyBhbiBTTVRQIGNsaWVudCIKK0RFU0NSSVBUSU9OID0gIkEgc2VuZG1haWwgcmVwbGFjZW1lbnQgZm9yIHVzZSBpbiBNVEFzIGxpa2UgbXV0dCIKK0hPTUVQQUdFID0gImh0dHA6Ly9tc210cC5zb3VyY2Vmb3JnZS5uZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitERVBFTkRTID0gInpsaWIgZ251dGxzIgorCisjQ09QWUlORyBvciBMaWNlbmNlCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21zbXRwL2ZpbGVzL21zbXRwLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjNiYWNhOTNjN2U1ZjFhYTlkMzZhMmU1YjM4NzM5YWI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJmNmVjZDdjYmZhZGY1NDhmZDU1MjA1YmQyNGNiNjNiODRiY2JiMTE4NWVmZWQ5MTdkZDc4MDA1OTVhNDg3ODkiCisKK2luaGVyaXQgZ2V0dGV4dCBhdXRvdG9vbHMgdXBkYXRlLWFsdGVybmF0aXZlcyBwa2djb25maWcKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtbGlic2VjcmV0IC0td2l0aG91dC1saWJnc2FzbCAtLXdpdGhvdXQtbGliaWRuIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzZW5kbWFpbCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtzZW5kbWFpbF0gPSAiJHtiaW5kaXJ9L21zbXRwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3NlbmRtYWlsXSA9ICIke3NiaW5kaXJ9L3NlbmRtYWlsIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitwa2dfcG9zdGluc3RfJHtQTn1fbGludXhzdGRiYXNlICgpIHsKKwkjIC91c3IvbGliL3NlbmRtaWFsIGlzIHJlcXVpcmVkIGJ5IExTQiBjb3JlIHRlc3QKKwlbICEgLUwgJEQvdXNyL2xpYi9zZW5kbWFpbCBdICYmIGxuIC1zZiAke3NiaW5kaXJ9L3NlbmRtYWlsICREL3Vzci9saWIvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmY4MTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ldC10b29scy9uZXQtdG9vbHMvaWZjb25maWctaW50ZXJmYWNlLTAtZGVsLUlQLXdpbGwtcmVtb3ZlLXRoZS1hbGlhc2VkLS5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDgxODE0ZGMyYjE0ODQzMDA5MTkzZWZkMzA3ZDgxNGMyNmJhYTYxZjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaXJpIFBvcGVsa2EgPGpwb3BlbGthQHJlZGhhdC5jb20+CitEYXRlOiBXZWQsIDcgRGVjIDIwMTEgMTk6MTQ6MDkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gaWZjb25maWcgaW50ZXJmYWNlOjAgZGVsIDxJUD4gd2lsbCByZW1vdmUgdGhlIGFsaWFzZWQgSVAgb24gSUE2NAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2NvbW1pdCA4MTgxNGRjMmIxNDg0MzAwOTE5M2VmZDMwN2Q4MTRjMjZiYWE2MWYwIGZyb20KK2dpdDovL2dpdC5jb2RlLnNmLm5ldC9wL25ldC10b29scy9jb2RlCisKKy0tLQorIGlmY29uZmlnLmMgfCAgICA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9pZmNvbmZpZy5jIGIvaWZjb25maWcuYworaW5kZXggYmM0MDVjNi4uZGFlODkyMiAxMDA2NDQKKy0tLSBhL2lmY29uZmlnLmMKKysrKyBiL2lmY29uZmlnLmMKK0BAIC04OTAsNyArODkwLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgIGNvbnRpbnVlOworIAkJfQorIAkJCistCQltZW1jcHkoJmlwLCAmc2luLnNpbl9hZGRyLnNfYWRkciwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKysJCS8qIENsZWFyICJpcCIgaW4gY2FzZSBzaXplb2YodW5zaWduZWQgbG9uZykgPiBzaXplb2Yoc2luLnNpbl9hZGRyLnNfYWRkcikgKi8KKysJCWlwID0gMDsKKysJCW1lbWNweSgmaXAsICZzaW4uc2luX2FkZHIuc19hZGRyLCBzaXplb2Yoc2luLnNpbl9hZGRyLnNfYWRkcikpOworIAkJCisgCQlpZiAoZ2V0X25tYmNfcGFyZW50KGlmci5pZnJfbmFtZSwgJm5tLCAmYmMpIDwgMCkgeworIAkJICAgIGZwcmludGYoc3RkZXJyLCBfKCJJbnRlcmZhY2UgJXMgbm90IGluaXRpYWxpemVkXG4iKSwKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzOWMyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcuaApAQCAtMCwwICsxLDc1IEBACisvKgorKiBjb25maWcuaAlBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBjb25maWd1cmF0aW9uIGluY2x1ZGVmaWxlCisqCisqIE5FVC1UT09MUwlBIGNvbGxlY3Rpb24gb2YgcHJvZ3JhbXMgdGhhdCBmb3JtIHRoZSBiYXNlIHNldCBvZiB0aGUKKyoJCU5FVC0zIE5ldHdvcmtpbmcgRGlzdHJpYnV0aW9uIGZvciB0aGUgTElOVVggb3BlcmF0aW5nCisqCQlzeXN0ZW0uCisqCisqCQlETyAgTk9UICBFRElUICBESVJFQ1RMWQorKgorKi8KKworLyogCisgKiAKKyAqIEludGVybmF0aW9uYWxpemF0aW9uCisgKiAKKyAqIFRoZSBuZXQtdG9vbHMgcGFja2FnZSBoYXMgY3VycmVudGx5IGJlZW4gdHJhbnNsYXRlZCB0byBGcmVuY2gsCisgKiBHZXJtYW4gYW5kIEJyYXppbGlhbiBQb3J0dWdlc2UuICBPdGhlciB0cmFuc2xhdGlvbnMgYXJlLCBvZgorICogY291cnNlLCB3ZWxjb21lLiAgQW5zd2VyIGBuJyBoZXJlIGlmIHlvdSBoYXZlIG5vIHN1cHBvcnQgZm9yCisgKiBpbnRlcm5hdGlvbmFsaXphdGlvbiBvbiB5b3VyIHN5c3RlbS4KKyAqIAorICovCisjZGVmaW5lIEkxOE4gMQorCisvKiAKKyAqIAorICogUHJvdG9jb2wgRmFtaWxpZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0FGVU5JWCAxCisjZGVmaW5lIEhBVkVfQUZJTkVUIDEKKyNkZWZpbmUgSEFWRV9BRklORVQ2IDEKKyNkZWZpbmUgSEFWRV9BRklQWCAwCisjZGVmaW5lIEhBVkVfQUZBVEFMSyAwCisjZGVmaW5lIEhBVkVfQUZBWDI1IDAKKyNkZWZpbmUgSEFWRV9BRk5FVFJPTSAxCisjZGVmaW5lIEhBVkVfQUZST1NFIDAKKyNkZWZpbmUgSEFWRV9BRlgyNSAwCisjZGVmaW5lIEhBVkVfQUZFQ09ORVQgMAorI2RlZmluZSBIQVZFX0FGREVDbmV0IDAKKyNkZWZpbmUgSEFWRV9BRkFTSCAwCisKKy8qIAorICogCisgKiBEZXZpY2UgSGFyZHdhcmUgdHlwZXMuCisgKiAKKyAqLworI2RlZmluZSBIQVZFX0hXRVRIRVIgMQorI2RlZmluZSBIQVZFX0hXQVJDIDEKKyNkZWZpbmUgSEFWRV9IV1NMSVAgMQorI2RlZmluZSBIQVZFX0hXUFBQIDEKKyNkZWZpbmUgSEFWRV9IV1RVTk5FTCAxCisjZGVmaW5lIEhBVkVfSFdTVFJJUCAwCisjZGVmaW5lIEhBVkVfSFdUUiAwCisjZGVmaW5lIEhBVkVfSFdBWDI1IDAKKyNkZWZpbmUgSEFWRV9IV1JPU0UgMAorI2RlZmluZSBIQVZFX0hXTkVUUk9NIDEKKyNkZWZpbmUgSEFWRV9IV1gyNSAwCisjZGVmaW5lIEhBVkVfSFdGUiAxCisjZGVmaW5lIEhBVkVfSFdTSVQgMAorI2RlZmluZSBIQVZFX0hXRkRESSAwCisjZGVmaW5lIEhBVkVfSFdISVBQSSAwCisjZGVmaW5lIEhBVkVfSFdBU0ggMAorI2RlZmluZSBIQVZFX0hXSERMQ0xBUEIgMAorI2RlZmluZSBIQVZFX0hXSVJEQSAxCisjZGVmaW5lIEhBVkVfSFdFQyAwCisjZGVmaW5lIEhBVkVfSFdJQiAwCisKKy8qIAorICogCisgKiBPdGhlciBGZWF0dXJlcy4KKyAqIAorICovCisjZGVmaW5lIEhBVkVfRldfTUFTUVVFUkFERSAxCisjZGVmaW5lIEhBVkVfSVBfVE9PTFMgMQorI2RlZmluZSBIQVZFX01JSSAxCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29scy9uZXQtdG9vbHMtY29uZmlnLm1ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1MTZmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzL25ldC10b29scy1jb25maWcubWFrZQpAQCAtMCwwICsxLDM2IEBACitJMThOPTEKK0hBVkVfQUZVTklYPTEKK0hBVkVfQUZJTkVUPTEKK0hBVkVfQUZJTkVUNj0xCisjIEhBVkVfQUZJUFg9MAorIyBIQVZFX0FGQVRBTEs9MAorIyBIQVZFX0FGQVgyNT0wCitIQVZFX0FGTkVUUk9NPTEKKyMgSEFWRV9BRlJPU0U9MAorIyBIQVZFX0FGWDI1PTAKKyMgSEFWRV9BRkVDT05FVD0wCisjIEhBVkVfQUZERUNuZXQ9MAorIyBIQVZFX0FGQVNIPTAKK0hBVkVfSFdFVEhFUj0xCitIQVZFX0hXQVJDPTEKK0hBVkVfSFdTTElQPTEKK0hBVkVfSFdQUFA9MQorSEFWRV9IV1RVTk5FTD0xCitIQVZFX0hXU1RSSVA9MQorSEFWRV9IV1RSPTEKKyMgSEFWRV9IV0FYMjU9MAorIyBIQVZFX0hXUk9TRT0wCitIQVZFX0hXTkVUUk9NPTEKKyMgSEFWRV9IV1gyNT0wCitIQVZFX0hXRlI9MQorIyBIQVZFX0hXU0lUPTAKKyMgSEFWRV9IV0ZEREk9MAorIyBIQVZFX0hXSElQUEk9MAorIyBIQVZFX0hXQVNIPTAKKyMgSEFWRV9IV0hETENMQVBCPTAKK0hBVkVfSFdJUkRBPTEKKyMgSEFWRV9IV0VDPTAKKyMgSEFWRV9IV0lCPTAKK0hBVkVfRldfTUFTUVVFUkFERT0xCitIQVZFX0lQX1RPT0xTPTEKK0hBVkVfTUlJPTEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXQtdG9vbHMvbmV0LXRvb2xzXzEuNjAtMjYuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZmMxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV0LXRvb2xzL25ldC10b29sc18xLjYwLTI2LmJiCkBAIC0wLDAgKzEsODkgQEAKK1NVTU1BUlkgPSAiQmFzaWMgbmV0d29ya2luZyB0b29scyIKK0RFU0NSSVBUSU9OID0gIkEgY29sbGVjdGlvbiBvZiBwcm9ncmFtcyB0aGF0IGZvcm0gdGhlIGJhc2Ugc2V0IG9mIHRoZSBORVQtMyBuZXR3b3JraW5nIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW0iCitIT01FUEFHRSA9ICJodHRwOi8vbmV0LXRvb2xzLmJlcmxpb3MuZGUvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5kZWJpYW4ub3JnL25ldC10b29scyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaWZjb25maWcuYztiZWdpbmxpbmU9MTE7ZW5kbGluZT0xNTttZDU9ZDFjYTM3MjA4MGFkNTQwMWUyM2NhMGFmYzM1Y2Y5YmEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vMjAwNTAzMTJUMDAwMDAwWi9wb29sL21haW4vbi8ke0JQTn0vJHtCUE59XzEuNjAub3JpZy50YXIuZ3o7bmFtZT10YXJiYWxsIFwKKyAgICAgICAgICAgaHR0cDovL3NuYXBzaG90LmRlYmlhbi5vcmcvYXJjaGl2ZS9kZWJpYW4vLzIwMTUwODMxVDA5MzM0MlovcG9vbC9tYWluL24vJHtCUE59LyR7QlBOfV8ke1BWfS5kaWZmLmd6O2FwcGx5PW5vO25hbWU9cGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbmV0LXRvb2xzLWNvbmZpZy5oIFwKKyAgICAgICAgICAgZmlsZTovL25ldC10b29scy1jb25maWcubWFrZSBcCisgICAgICAgICAgIGZpbGU6Ly9pZmNvbmZpZy1pbnRlcmZhY2UtMC1kZWwtSVAtd2lsbC1yZW1vdmUtdGhlLWFsaWFzZWQtLnBhdGNoIFwKKwkgICAiCisKK1MgPSAiJHtXT1JLRElSfS9uZXQtdG9vbHMtMS42MCIKKworU1JDX1VSSVt0YXJiYWxsLm1kNXN1bV0gPSAiZWNhZjM3YWNiNWI1ZGFmZjRiZGRhNzc3ODVmZDkxNmQiCitTUkNfVVJJW3RhcmJhbGwuc2hhMjU2c3VtXSA9ICJlYzY3OTY3Y2Y3YjFhM2EzODI4YTg0NzYyZmJjMDEzYWM1MGVlNWRjOWFhMzA5NWQ1YzU5MWYzMDJjMmRlMGY1IgorCitTUkNfVVJJW3BhdGNoLm1kNXN1bV0gPSAiZWEzNTkyZjQ5YWM4MzgwOTYyYmM0ZDliNjZjN2U3ZTkiCitTUkNfVVJJW3BhdGNoLnNoYTI1NnN1bV0gPSAiYWVlZWFmYWZmNjg4NjZhNDQ2ZjAxYmI2MzlkNGUwMTQ2YTYwYWYzNGRjZDIwZTMxYTNlNDY1ODUwMjJmYzc2YyIKKworaW5oZXJpdCBnZXR0ZXh0CisKKyMgVGhlIE1ha2VmaWxlIGlzIGxhbWUsIG5vIHBhcmFsbGVsIGJ1aWxkCitQQVJBTExFTF9NQUtFID0gIiIKKworIyBVbmxpa2Ugb3RoZXIgRGViaWFuIHBhY2thZ2VzLCBuZXQtdG9vbHMgKi5kaWZmLmd6IGNvbnRhaW5zIGFub3RoZXIgc2VyaWVzIG9mCisjIHBhdGNoZXMgbWFpbnRhaW5lZCBieSBxdWlsdC4gU28gbWFudWFsbHkgYXBwbHkgdGhlbSBiZWZvcmUgYXBwbHlpbmcgb3RoZXIgbG9jYWwKKyMgcGF0Y2hlcy4gQWxzbyByZW1vdmUgYWxsIHRlbXAgZmlsZXMgYmVmb3JlIGxlYXZpbmcsIGJlY2F1c2UgZG9fcGF0Y2goKSB3aWxsIHBvcCAKKyMgdXAgYWxsIHByZXZpb3VzbHkgYXBwbGllZCBwYXRjaGVzIGluIHRoZSBzdGFydAorbmV0dG9vbHNfZG9fcGF0Y2goKSB7CisJY2QgJHtTfQorCXF1aWx0IHBvcCAtYSB8fCB0cnVlCisJaWYgWyAtZCAke1N9Ly5wYy1uZXR0b29scyBdOyB0aGVuCisJCXJtIC1yZiAke1N9Ly5wYworCQltdiAke1N9Ly5wYy1uZXR0b29scyAke1N9Ly5wYworCQlRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcG9wIC1hCisJCXJtIC1yZiAke1N9Ly5wYyAke1N9L2RlYmlhbgorCWZpCisJcGF0Y2ggLXAxIDwgJHtXT1JLRElSfS8ke0JQTn1fJHtQVn0uZGlmZgkKKwlRVUlMVF9QQVRDSEVTPSR7U30vZGViaWFuL3BhdGNoZXMgcXVpbHQgcHVzaCAtYQorCW12ICR7U30vLnBjICR7U30vLnBjLW5ldHRvb2xzCit9CisKK2RvX3VucGFja1tjbGVhbmRpcnNdICs9ICIke1N9IgorCisjIFdlIGludm9rZSBiYXNlIGRvX3BhdGNoIGF0IGVuZCwgdG8gaW5jb3Jwb3JhdGUgYW55IGxvY2FsIHBhdGNoCitweXRob24gZG9fcGF0Y2goKSB7CisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCduZXR0b29sc19kb19wYXRjaCcsIGQpCisgICAgYmIuYnVpbGQuZXhlY19mdW5jKCdwYXRjaF9kb19wYXRjaCcsIGQpCit9CisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIG5ldC10b29scyBoYXMgaXRzIG93biBjb25maWcgbWVjaGFuaXNtIHJlcXVpcmluZyAibWFrZSBjb25maWciCisJIyB3ZSBwcmUtZ2VuZXJhdGUgZGVzaXJlZCBvcHRpb25zIGFuZCBjb3B5IHRvIHNvdXJjZSBkaXJlY3RvcnkgaW5zdGVhZAorCWNwICR7V09SS0RJUn0vbmV0LXRvb2xzLWNvbmZpZy5oICAgICR7U30vY29uZmlnLmgKKwljcCAke1dPUktESVJ9L25ldC10b29scy1jb25maWcubWFrZSAke1N9L2NvbmZpZy5tYWtlCit9CisKK2RvX2NvbXBpbGUoKSB7CisJIyBuZXQtdG9vbHMgdXNlIENPUFRTL0xPUFRTIHRvIGFsbG93IGFkZGluZyBjdXN0b20gb3B0aW9ucworCWV4cG9ydCBDT1BUUz0iJENGTEFHUyIKKwlleHBvcnQgTE9QVFM9IiRMREZMQUdTIgorCXVuc2V0IENGTEFHUworCXVuc2V0IExERkxBR1MKKworCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlICdCQVNFRElSPSR7RH0nIGluc3RhbGwKK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2Jhc2Vfc2JpbmRpcl9wcm9ncyA9ICJhcnAgaWZjb25maWcgaXBtYWRkciBpcHR1bm5lbCBtaWktdG9vbCBuYW1laWYgcGxpcGNvbmZpZyByYXJwIHJvdXRlIHNsYXR0YWNoIgorYmFzZV9iaW5kaXJfcHJvZ3MgID0gImRuc2RvbWFpbm5hbWUgZG9tYWlubmFtZSBob3N0bmFtZSBuZXRzdGF0IG5pc2RvbWFpbm5hbWUgeXBkb21haW5uYW1lIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2Jhc2Vfc2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30iCitweXRob24gX19hbm9ueW1vdXMoKSB7CisJZm9yIHByb2cgaW4gZC5nZXRWYXIoJ2Jhc2Vfc2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9zYmluZGlyJywgVHJ1ZSksIHByb2cpKQorCWZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisJCWQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvY3Jvc3NfYXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMDdhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2Nyb3NzX2FyLnBhdGNoCkBAIC0wLDAgKzEsNTggQEAKK0ZpeCBjcm9zcyBsaW5rIHVzaW5nIGF1dG9jb25mIGRldGVjdGVkIEFSCisKK0lmIGJ1aWxkaW5nIG9uIDMyYml0IGhvc3QgYW5kIGNyZWF0aW5nIDY0Yml0IGxpYnJhcmllcywgdGhlIHRhcmdldAorcGFja2FnZSBidWlsZHMgc2hvdWxkIG5vdCBpbnZva2UgdGhlIDMyYml0IGhvc3RzJ3MgYXIuICBTcGVjaWZpY2FsbHkKK3lvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlIGxpa2U6CisKK3g4Nl82NC1saW51eC1nY2MgICAgLW02NCAtLXN5c3Jvb3Q9L29wdC9xZW11eDg2LTY0L3RtcC9zeXNyb290cy9xZW11eDg2LTY0IC1nIC1vIHRlc3QgdGVzdC5vIGxpYm5ld3QuYSAtV2wsLU8xIC1XbCwtLWhhc2gtc3R5bGU9Z251IC1XbCwtLWFzLW5lZWRlZCAtbHNsYW5nCitsaWJuZXd0LmE6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEFyY2hpdmUgaGFzIG5vIGluZGV4OyBydW4gcmFubGliIHRvIGFkZCBvbmUKK2NvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitTaWduZWQtb2ZmLWJ5OiBKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gIHwgMyArKy0KKyBjb25maWd1cmUuYWMgfCA0ICsrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtNyw2ICs3LDcgQEAgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACisgQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIEBDUFBGTEFHU0AgCisgR05VX0xEID0gQEdOVV9MREAKKytBUiA9IEBBUkAKKyAKKyBWRVJTSU9OID0gQFZFUlNJT05ACisgVEFHID0gciQoc3Vic3QgLiwtLCQoVkVSU0lPTikpCitAQCAtMTA5LDcgKzExMCw3IEBAIHdoaXB0Y2wuJChTT0VYVCk6ICQoV0hJUFRDTE9CSlMpICQoTElCTkVXVFNIKQorIAkkKENDKSAtc2hhcmVkICQoU0hDRkxBR1MpICQoTERGTEFHUykgLW8gd2hpcHRjbC4kKFNPRVhUKSAkKFdISVBUQ0xPQkpTKSAtTC4gLWxuZXd0ICAkKExJQlRDTCkgLWxwb3B0ICQoTElCUykKKyAKKyAkKExJQk5FV1QpOiAkKExJQk9CSlMpCistCWFyIHJ2ICRAICReCisrCSQoQVIpIHJ2ICRAICReCisgCisgbmV3dC5vICQoU0hBUkVERElSKS9uZXd0Lm86IG5ld3QuYyBNYWtlZmlsZQorIAorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOTJlNmRhOC4uY2Q4M2Q1NyAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTUsNiArMTUsMTAgQEAgQUNfUFJPR19JTlNUQUxMCisgQUNfUFJPR19MTl9TCisgQUNfUFJPR19HUkVQCisgQUNfU1lTX0xBUkdFRklMRQorK0FOX01BS0VWQVIoW0FSXSwgW0FDX1BST0dfQVJdKQorK0FOX1BST0dSQU0oW2FyXSwgW0FDX1BST0dfQVJdKQorK0FDX0RFRlVOKFtBQ19QUk9HX0FSXSwgW0FDX0NIRUNLX1RPT0woQVIsIGFyLCA6KV0pCisrQUNfUFJPR19BUgorIAorICMgQXJlIHdlIHVzaW5nIEdOVSBsZD8KKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL2ZpeF9TSEFSRURESVIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9maXhfU0hBUkVERElSLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTFlOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9maWxlcy9maXhfU0hBUkVERElSLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitBdXRob3I6IGRleHVhbi5jdWlAaW50ZWwuY29tCitEYXRlOiBGcmkgQXByIDE1IDE2OjE3OjM5IENTVCAyMDExCisKK1RoZSBwYXRjaCBmaXhlcyBhIHBhcmFsbGVsLW1ha2UgaXNzdWU6IHdoZW4gZ2VuZXJhdGluZyAkKFNIQVJFRERJUikvJS5vLCB3ZSBzaG91bGQKK2Vuc3VyZSB0aGUgZGlyZWN0b3J5ICR7U0hBUkVERElSfSBleGlzdHMuCisKK1dlIG5lZWQgdG8gcHVzaCB0aGUgcGF0Y2ggdG8gdXBzdHJlYW0uCisKK1NpZ25lZC1vZmYtYnk6IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMTI4LDEyICsxMjgsMTIgQEAgJChTSEFSRURESVIpOgorIAorIHNoYXJlZGxpYjogJChMSUJORVdUU0gpCisgCistJChMSUJORVdUU0gpOiAkKFNIQVJFRERJUikgJChTSEFSRURPQkpTKQorKyQoTElCTkVXVFNIKTogJChTSEFSRURPQkpTKQorIAkkKENDKSAtc2hhcmVkIC1vICQoTElCTkVXVFNIKSAkKFNITElCRkxBR1MpICQoU0hBUkVET0JKUykgJChMREZMQUdTKSAkKExJQlMpCisgCWxuIC1mcyAkKExJQk5FV1RTT05BTUUpIGxpYm5ld3QuJChTT0VYVCkKKyAJbG4gLWZzICQoTElCTkVXVFNIKSAkKExJQk5FV1RTT05BTUUpCisgCistJChTSEFSRURESVIpLyUubyA6ICUuYworKyQoU0hBUkVERElSKS8lLm8gOiAlLmMgJChTSEFSRURESVIpCisgCSQoQ0MpICQoU0hDRkxBR1MpIC1jICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAtbyAkQCAkPAorIAorIGluc3RhbGw6ICQoTElCTkVXVCkgaW5zdGFsbC1zaCB3aGlwdGFpbAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvZmlsZXMvcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2MzRlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2ZpbGVzL3JlbW92ZV9zbGFuZ19pbmNsdWRlLnBhdGNoCkBAIC0wLDAgKzEsMTYgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9NYWtlZmlsZS5pbgorKysrIGdpdC9NYWtlZmlsZS5pbgorQEAgLTUsNyArNSw3IEBAIENDID0gQENDQAorIENQUCA9IEBDUFBACisgQ0ZMQUdTID0gQENGTEFHU0AKKyBMREZMQUdTID0gQExERkxBR1NACistQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL3NsYW5nIEBDUFBGTEFHU0AgCisrQ1BQRkxBR1MgPSAtRF9HTlVfU09VUkNFIEBDUFBGTEFHU0AgCisgR05VX0xEID0gQEdOVV9MREAKKyAKKyBWRVJTSU9OID0gQFZFUlNJT05ACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0LXB5dGhvbl8wLjUyLjE4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGE0MWEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dC1weXRob25fMC41Mi4xOC5iYgpAQCAtMCwwICsxLDI5IEBACityZXF1aXJlIHJlY2lwZXMtZXh0ZW5kZWQvbmV3dC9saWJuZXd0XyR7UFZ9LmJiCisKK1NVTU1BUlkgLj0gIiAtIHB5dGhvbiIKK0RFUEVORFMgPSAibGlibmV3dCBweXRob24iCitSREVQRU5EU18ke1BOfSArPSAicHl0aG9uLWNvcmUiCisKK2luaGVyaXQgcHl0aG9ubmF0aXZlIHB5dGhvbi1kaXIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtcHl0aG9uIgorRVhUUkFfT0VNQUtFICs9ICJQWVRIT05WRVJTPSR7UFlUSE9OX0RJUn0iCisKKworZG9fY29tcGlsZSAoKSB7CisJVkVSU0lPTj0iJChzZWQgLW4gJ3MvXlZFUlNJT04gPSAvL3AnIE1ha2VmaWxlKSIKKwlvZV9ydW5tYWtlIF9zbmFjay5zbworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfQorCWluc3RhbGwgLW0gMDc1NSAke1BZVEhPTl9ESVJ9L19zbmFjay5zbyAke0R9JHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vCisJaW5zdGFsbCAtbSAwNjQ0IHNuYWNrLnB5ICR7RH0ke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8KK30KKworUEFDS0FHRVNfcmVtb3ZlID0gIndoaXB0YWlsIgorCitGSUxFU18ke1BOfSA9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke1BZVEhPTl9TSVRFUEFDS0FHRVNfRElSfS8uZGVidWcvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9uZXd0L2xpYm5ld3RfMC41Mi4xOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDJlNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL25ld3QvbGlibmV3dF8wLjUyLjE4LmJiCkBAIC0wLDAgKzEsNTYgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzIgorCitERVNDUklQVElPTiA9ICJOZXd0IGlzIGEgcHJvZ3JhbW1pbmcgbGlicmFyeSBmb3IgY29sb3IgdGV4dCBtb2RlLCB3aWRnZXQgYmFzZWQgdXNlciBcCitpbnRlcmZhY2VzLiAgTmV3dCBjYW4gYmUgdXNlZCB0byBhZGQgc3RhY2tlZCB3aW5kb3dzLCBlbnRyeSB3aWRnZXRzLCBcCitjaGVja2JveGVzLCByYWRpbyBidXR0b25zLCBsYWJlbHMsIHBsYWluIHRleHQgZmllbGRzLCBzY3JvbGxiYXJzLCBcCitldGMuLCB0byB0ZXh0IG1vZGUgdXNlciBpbnRlcmZhY2VzLiAgVGhpcyBwYWNrYWdlIGFsc28gY29udGFpbnMgdGhlIFwKK3NoYXJlZCBsaWJyYXJ5IG5lZWRlZCBieSBwcm9ncmFtcyBidWlsdCB3aXRoIG5ld3QsIGFzIHdlbGwgYXMgYSBcCisvdXNyL2Jpbi9kaWFsb2cgcmVwbGFjZW1lbnQgY2FsbGVkIHdoaXB0YWlsLiAgTmV3dCBpcyBiYXNlZCBvbiB0aGUgXAorc2xhbmcgbGlicmFyeS4iCisKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9uZXd0LyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZjMwZjA3MTZkZmRkMGQ5MWViNDM5ZWJlYzUyMmVjMiIKKworIyBzbGFuZyBuZWVkcyB0byBiZSA+PSAyLjIKK0RFUEVORFMgPSAic2xhbmcgcG9wdCIKKworU1JDX1VSSSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvcmVsZWFzZXMvbi9lL25ld3QvbmV3dC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlX3NsYW5nX2luY2x1ZGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X1NIQVJFRERJUi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jcm9zc19hci5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODU3MjFiZWUxYTMxODU3MDcwNGIxOWRjZjMxZDI2OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NzFiMGU2MzRlZGU1NmFlNmE2YWNkOTEwNzI4YmI1ODMyYWMxM2RkYjBkMWQyNzkxOWQyNDk4ZGFiNzBjOTFlIgorCitTID0gIiR7V09SS0RJUn0vbmV3dC0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC10Y2wgLS13aXRob3V0LXB5dGhvbiIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK2V4cG9ydCBTVEFHSU5HX0lOQ0RJUgorZXhwb3J0IFNUQUdJTkdfTElCRElSCisKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworCitQQUNLQUdFU19wcmVwZW5kID0gIndoaXB0YWlsICIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgc2ggYXV0b2dlbi5zaAorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLmRlcGVuZAorfQorCitGSUxFU193aGlwdGFpbCA9ICIke2JpbmRpcn0vd2hpcHRhaWwiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkN2U2MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUuYmIKQEAgLTAsMCArMSwxNjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uCisjCisKK1NVTU1BUlkgPSAiU3RhbmRhcmQgZnVsbC1mZWF0dXJlZCBMaW51eCBzeXN0ZW0iCitERVNDUklQVElPTiA9ICJQYWNrYWdlIGdyb3VwIGJyaW5naW5nIGluIHBhY2thZ2VzIG5lZWRlZCBmb3IgYSBtb3JlIHRyYWRpdGlvbmFsIGZ1bGwtZmVhdHVyZWQgTGludXggc3lzdGVtIgorUFIgPSAicjYiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRVMgPSAiXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZSBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWxpYnMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS11dGlscyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZGV2LXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMgXAorICAgICIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICAjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciByZW5hbWUKKyAgICBuYW1lbWFwID0ge30KKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1iYXNpYyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWJhc2ljLWxpYnMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtdXRpbHMiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWV4dGVuZGVkIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtYmFzaWMtZXh0ZW5kZWQiCisgICAgbmFtZW1hcFsicGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWRldi11dGlscyIKKyAgICBuYW1lbWFwWyJwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbXVsdGl1c2VyIl0gPSAicGFja2FnZWdyb3VwLWNvcmUtbXVsdGl1c2VyIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyJdID0gInBhY2thZ2Vncm91cC1jb3JlLWluaXRzY3JpcHRzIgorICAgIG5hbWVtYXBbInBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1zeXMtc2VydmljZXMiXSA9ICJwYWNrYWdlZ3JvdXAtY29yZS1zeXMtc2VydmljZXMiCisKKyAgICBwYWNrYWdlcyA9IGQuZ2V0VmFyKCJQQUNLQUdFUyIsIFRydWUpLnNwbGl0KCkKKyAgICBmb3IgcGtnIGluIHBhY2thZ2VzOgorICAgICAgICBpZiBwa2cuZW5kc3dpdGgoJy1kZXYnKToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZ1s6LTRdLCBOb25lKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZCArPSAnLWRldicKKyAgICAgICAgZWxpZiBwa2cuZW5kc3dpdGgoJy1kYmcnKToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZ1s6LTRdLCBOb25lKQorICAgICAgICAgICAgaWYgbWFwcGVkOgorICAgICAgICAgICAgICAgIG1hcHBlZCArPSAnLWRiZycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hcHBlZCA9IG5hbWVtYXAuZ2V0KHBrZywgTm9uZSkKKworICAgICAgICBpZiBtYXBwZWQ6CisgICAgICAgICAgICBvbGR0YXNrbmFtZSA9IG1hcHBlZC5yZXBsYWNlKCJwYWNrYWdlZ3JvdXAtY29yZSIsICJ0YXNrLWNvcmUiKQorICAgICAgICAgICAgbWFwc3RyID0gIiAlcyAlcyIgJSAobWFwcGVkLCBvbGR0YXNrbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfJXMiICUgcGtnLCBtYXBzdHIpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgbWFwc3RyKQorICAgICAgICAgICAgZC5hcHBlbmRWYXIoIlJDT05GTElDVFNfJXMiICUgcGtnLCBtYXBzdHIpCit9CisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1kZXYtdXRpbHMgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1tdWx0aXVzZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWZ1bGwtY21kbGluZS1pbml0c2NyaXB0cyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtbGlicyA9ICJcCisgICAgZ2xpYi0yLjAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXV0aWxzID0gIlwKKyAgICBiYXNoIFwKKyAgICBhY2wgXAorICAgIGF0dHIgXAorICAgIGJjIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwaW8gXAorICAgIGUyZnNwcm9ncyBcCisgICAgZWQgXAorICAgIGZpbGUgXAorICAgIGZpbmR1dGlscyBcCisgICAgZ2F3ayBcCisgICAgZ21wIFwKKyAgICBncmVwIFwKKyAgICBtYWtlZGV2cyBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIG1rdGVtcCBcCisgICAgbmN1cnNlcyBcCisgICAgbmV0LXRvb2xzIFwKKyAgICBwYXggXAorICAgIHBvcHQgXAorICAgIHByb2NwcyBcCisgICAgcHNtaXNjIFwKKyAgICBzZWQgXAorICAgIHRhciBcCisgICAgdGltZSBcCisgICAgdXRpbC1saW51eCBcCisgICAgemxpYiBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtZXh0ZW5kZWQgPSAiXAorICAgIGlwcm91dGUyIFwKKyAgICBpcHV0aWxzIFwKKyAgICBpcHRhYmxlcyBcCisgICAgbW9kdWxlLWluaXQtdG9vbHMgXAorICAgIG9wZW5zc2wgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLWRldi11dGlscyA9ICJcCisgICAgYnlhY2MgXAorICAgIGRpZmZ1dGlscyBcCisgICAgbTQgXAorICAgIG1ha2UgXAorICAgIHBhdGNoIFwKKyAgICAiCisKK1ZJUlRVQUwtUlVOVElNRV9pbml0c2NyaXB0cyA/PSAiaW5pdHNjcmlwdHMiCitWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyID89ICJzeXN2aW5pdCIKK1ZJUlRVQUwtUlVOVElNRV9sb2dpbl9tYW5hZ2VyID89ICJidXN5Ym94IgorVklSVFVBTC1SVU5USU1FX3N5c2xvZyA/PSAic3lza2xvZ2QiCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1mdWxsLWNtZGxpbmUtaW5pdHNjcmlwdHMgPSAiXAorICAgICR7VklSVFVBTC1SVU5USU1FX2luaXRzY3JpcHRzfSBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfaW5pdF9tYW5hZ2VyfSBcCisgICAgZXRodG9vbCBcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfbG9naW5fbWFuYWdlcn0gXAorICAgICR7VklSVFVBTC1SVU5USU1FX3N5c2xvZ30gXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLW11bHRpdXNlciA9ICJcCisgICAgY3JhY2tsaWIgXAorICAgIGd6aXAgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnVzZXInLCAnJywgZCl9IFwKKyAgICBzaGFkb3cgXAorICAgIHN1ZG8gXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lLXN5cy1zZXJ2aWNlcyA9ICJcCisgICAgYXQgXAorICAgIGJ6aXAyIFwKKyAgICBjcm9uaWUgXAorICAgIGRidXMgXAorICAgIGRidXMtZ2xpYiBcCisgICAgcHl0aG9uLWRidXMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBnemlwIFwKKyAgICBsZXNzIFwKKyAgICBsaWJjYXAgXAorICAgIGxpYmV2ZW50IFwKKyAgICBsb2dyb3RhdGUgXAorICAgIG5mcy11dGlscyBcCisgICAgcGNpdXRpbHMgXAorICAgIGxpYnBjcmUgXAorICAgIHJwY2JpbmQgXAorICAgIHN5c2ZzdXRpbHMgXAorICAgIHRjcC13cmFwcGVycyBcCisgICAgdHpkYXRhIFwKKyAgICAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWxzYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTgyMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtbHNiLmJiCkBAIC0wLDAgKzEsMjc4IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitTVU1NQVJZID0gIkxpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikiCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzYXRpc2Z5IHRoZSBMaW51eCBTdGFuZGFyZCBCYXNlIChMU0IpIHNwZWNpZmljYXRpb24iCitQUiA9ICJyMTAiCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh0LCBsaWJ4dHN0IGFuZCBvdGhlcnMgcmVxdWlyZSB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjCisjIFdlIHdpbGwgc2tpcCBwYXJzaW5nIHRoaXMgcGFja2FnZWdlb3VwIGZvciBub24tZ2xpYmMgc3lzdGVtcworIworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBpZiBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkgIT0gImdsaWJjIjoKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoImluY29tcGF0aWJsZSB3aXRoICVzIEMgbGlicmFyeSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmdldFZhcignVENMSUJDJywgVHJ1ZSkpCit9CisKK1BBQ0tBR0VTID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2IgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtZGIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXBlcmwgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtdGNsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItZGVza3RvcCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkIFwKKyAgICAiCisKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiID0gIlwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1zeXMtZXh0ZW5kZWQgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWRiIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1wZXJsIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1weXRob24gXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXRjbCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLW1pc2MgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1jb3JlIFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1sc2ItcGVybCBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiBcCisgICAgcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLWxzYi1ydW50aW1lLWFkZCBcCisgICAgIgorCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXN5cy1leHRlbmRlZCA9ICJcCisgICAgY3VybCBcCisgICAgZGhjcC1jbGllbnQgXAorICAgIGhkcGFybSBcCisgICAgbGlnaHR0cGQgXAorICAgIGxpYmFpbyBcCisgICAgbHJ6c3ogXAorICAgIGx6byBcCisgICAgbWMgXAorICAgIG1jLWZpc2ggXAorICAgIG1jLWhlbHBlcnMgXAorICAgIG1jLWhlbHBlcnMtcGVybCBcCisgICAgbWMtaGVscGVycy1weXRob24gXAorICAgIG1kYWRtIFwKKyAgICBtaW5pY29tIFwKKyAgICBuZW9uIFwKKyAgICBwYXJ0ZWQgXAorICAgICR7UFRIfSBcCisgICAgcXVvdGEgXAorICAgIHNjcmVlbiBcCisgICAgc2V0c2VyaWFsIFwKKyAgICBzeXNzdGF0IFwKKyAgICB1ZGV2LWV4dHJhY29uZiBcCisgICAgdW56aXAgXAorICAgIHdhdGNoZG9nIFwKKyAgICB3Z2V0IFwKKyAgICB3aGljaCBcCisgICAgeGluZXRkIFwKKyAgICB6aXAgXAorICAgICIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtZGIgPSAiXAorICAgIGRiIFwKKyAgICBzcWxpdGUzIFwKKyAgICAiCisKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLXBlcmwgPSAiXAorICAgIGdkYm0gXAorICAgIHBlcmwgXAorICAgIHpsaWIgXAorICAgICIKKworCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1weXRob24gPSAiXAorICAgIGV4cGF0IFwKKyAgICBnZGJtIFwKKyAgICBnbXAgXAorICAgIG5jdXJzZXMgXAorICAgIG9wZW5zc2wgXAorICAgIHB5dGhvbiBcCisgICAgcmVhZGxpbmUgXAorICAgIHppcCBcCisgICAgIgorCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS10Y2wgPSAiXAorICAgIHRjbCBcCisgICAgIgorCisjIE1pc2NlbGxhbmVvdXMgcGFja2FnZXMgcmVxdWlyZWQgYnkgTFNCIChvciBMU0IgdGVzdHMpCitSREVQRU5EU19wYWNrYWdlZ3JvdXAtY29yZS1sc2ItbWlzYyA9ICJcCisgICAgY2hrY29uZmlnIFwKKyAgICBnZXR0ZXh0IFwKKyAgICBnZXR0ZXh0LXJ1bnRpbWUgXAorICAgIGdyb2ZmIFwKKyAgICBsc2Jpbml0c2NyaXB0cyBcCisgICAgbHNidGVzdCBcCisgICAgbHNvZiBcCisgICAgc3RyYWNlIFwKKyAgICBsaWJ1c2IxIFwKKyAgICB1c2J1dGlscyBcCisgICAgcnBtIFwKKyAgICAiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiTFNCIENvcmUiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItY29yZSA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzdXBwb3J0IGNvbW1hbmRzL2xpYnJhcmllcyBcCisgICAgc3BlY2lmaWVkIGluIHRoZSBMU0IgQ29yZSBzcGVjaWZpY2F0aW9uIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLWNvcmUgPSAiXAorICAgIGF0IFwKKyAgICBiYXNoIFwKKyAgICBiYyBcCisgICAgYmludXRpbHMgXAorICAgIGJpbnV0aWxzLXN5bWxpbmtzIFwKKyAgICBjb3JldXRpbHMgXAorICAgIGNwaW8gXAorICAgIGNyb25pZSBcCisgICAgY3VwcyBcCisgICAgZGlmZnV0aWxzIFwKKyAgICBlZCBcCisgICAgZ2xpYmMtdXRpbHMgXAorICAgIGVsZnV0aWxzIFwKKyAgICBmaWxlIFwKKyAgICBmaW5kdXRpbHMgXAorICAgIGZvbnRjb25maWctdXRpbHMgXAorICAgIGZvb21hdGljLWZpbHRlcnMgXAorICAgIGdhd2sgXAorICAgIGdob3N0c2NyaXB0IFwKKyAgICBncmVwIFwKKyAgICBnemlwIFwKKyAgICBsb2NhbGVkZWYgXAorICAgIGxzYiBcCisgICAgbTQgXAorICAgIG1haWx4IFwKKyAgICBtYWtlIFwKKyAgICBtYW4gXAorICAgIG1hbi1wYWdlcyBcCisgICAgbWt0ZW1wIFwKKyAgICBtc210cCBcCisgICAgcGF0Y2ggXAorICAgIHBheCBcCisgICAgcHJvY3BzIFwKKyAgICBwc21pc2MgXAorICAgIHNlZCBcCisgICAgc2hhZG93IFwKKyAgICB0YXIgXAorICAgIHRpbWUgXAorICAgIHV0aWwtbGludXggXAorICAgIHhkZy11dGlscyBcCisgICAgXAorICAgIGdsaWJjIFwKKyAgICBsaWJnY2MgXAorICAgIGxpYnBhbSBcCisgICAgbGlieG1sMiBcCisgICAgbmN1cnNlcyBcCisgICAgemxpYiBcCisgICAgbnNwciBcCisgICAgbGlicG5nMTIgXAorICAgIG5zcyBcCisiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXBlcmwgPSAiTFNCIFJ1bnRpbWUgTGFuZ3VhZ2VzIChQZXJsKSIKK0RFU0NSSVBUSU9OX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBSdW50aW1lIGxhbmd1YWdlcyBzcGVjaWZpY2F0aW9uIChQZXJsIHBhcnRzKSIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1wZXJsID0gIlwKKyAgICBwZXJsIFwKKyAgICBwZXJsLW1vZHVsZXMgXAorICAgIHBlcmwtbWlzYyBcCisgICAgcGVybC1wb2QgXAorICAgIHBlcmwtZGV2IFwKKyAgICBwZXJsLWRvYyBcCisiCisKK1NVTU1BUllfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJMU0IgUnVudGltZSBMYW5ndWFnZXMgKFB5dGhvbikiCitERVNDUklQVElPTl9wYWNrYWdlZ3JvdXAtY29yZS1sc2ItcHl0aG9uID0gIlBhY2thZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgbGlicmFyaWVzIFwKKyAgICBzcGVjaWZpZWQgaW4gdGhlIExTQiBSdW50aW1lIGxhbmd1YWdlcyBzcGVjaWZpY2F0aW9uIChQeXRob24gcGFydHMpIgorUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXB5dGhvbiA9ICJcCisgICAgcHl0aG9uIFwKKyAgICBweXRob24tbW9kdWxlcyBcCisgICAgcHl0aG9uLW1pc2MgXAorIgorCitkZWYgZ2V0X2xpYnF0MyhkKToKKyAgICBpZiAnbGludXhzdGRiYXNlJyBpbiBkLmdldFZhcignRElTVFJPT1ZFUlJJREVTJywgRmFsc2UpIG9yICIiOgorICAgICAgICBpZiAncXQzJyBpbiBkLmdldFZhcignQkJGSUxFX0NPTExFQ1RJT05TJywgRmFsc2UpIG9yICIiOgorICAgICAgICAgICAgcmV0dXJuICdsaWJxdC1tdDMnCisKKyAgICAgICAgYmIud2FybignVGhlIG1ldGEtcXQzIGxheWVyIHNob3VsZCBiZSBhZGRlZCwgdGhpcyBsYXllciBwcm92aWRlcyBRdCAzLngnIFwKKyAgICAgICAgICAgICAgICAnbGlicmFyaWVzLiBJdHMgaW50ZW5kZWQgdXNlIGlzIGZvciBwYXNzaW5nIExTQiB0ZXN0cyBhcyBRdDMgaXMnIFwKKyAgICAgICAgICAgICAgICAnYSByZXF1aXJlbWVudCBmb3IgTFNCLicpCisgICAgcmV0dXJuICcnCisKK1FUNFBLR1MgPSAiIFwKKyAgICBsaWJxdGNvcmU0IFwKKyAgICBsaWJxdGd1aTQgXAorICAgIGxpYnF0c3FsNCBcCisgICAgbGlicXRzdmc0IFwKKyAgICBsaWJxdHhtbDQgXAorICAgIGxpYnF0bmV0d29yazQgXAorICAgIHF0NC1wbHVnaW4tc3FsZHJpdmVyLXNxbGl0ZSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJvcGVuZ2wiLCAibGlicXRvcGVuZ2w0IiwgIiIsIGQpfSBcCisgICAgIgorUVQ0UEtHU19taXBzNjQgPSAiIgorUVQ0UEtHU19taXBzNjRuMzIgPSAiIgorCitTVU1NQVJZX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIkxTQiBEZXNrdG9wIgorREVTQ1JJUFRJT05fcGFja2FnZWdyb3VwLWNvcmUtbHNiLWRlc2t0b3AgPSAiUGFja2FnZXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBsaWJyYXJpZXMgXAorICAgIHNwZWNpZmllZCBpbiB0aGUgTFNCIERlc2t0b3Agc3BlY2lmaWNhdGlvbiIKK1JERVBFTkRTX3BhY2thZ2Vncm91cC1jb3JlLWxzYi1kZXNrdG9wID0gIlwKKyAgICBsaWJ4dCBcCisgICAgbGlieHhmODZ2bSBcCisgICAgbGliZHJtIFwKKyAgICBsaWJnbHUgXAorICAgIGxpYnhpIFwKKyAgICBsaWJ4dHN0IFwKKyAgICBsaWJ4MTEtbG9jYWxlIFwKKyAgICB4b3JnLW1pbmltYWwtZm9udHMgXAorICAgIGdkay1waXhidWYtbG9hZGVyLWljbyBcCisgICAgZ2RrLXBpeGJ1Zi1sb2FkZXItYm1wIFwKKyAgICBnZGstcGl4YnVmLWxvYWRlci1hbmkgXAorICAgIGdkay1waXhidWYteGxpYiBcCisgICAgbGliZXJhdGlvbi1mb250cyBcCisgICAgZ3RrKyBcCisgICAgYXRrIFwKKyAgICBsaWJhc291bmQgXAorICAgICR7UVQ0UEtHU30gXAorICAgICR7QGdldF9saWJxdDMoZCl9IFwKKyIKKworUkRFUEVORFNfcGFja2FnZWdyb3VwLWNvcmUtbHNiLXJ1bnRpbWUtYWRkID0gIlwKKyAgICBsZGQgXAorICAgIHBhbS1wbHVnaW4td2hlZWwgXAorICAgIGUyZnNwcm9ncy1ta2UyZnMgXAorICAgIG1rZm9udGRpciBcCisgICAgbGlidXJpLXBlcmwgXAorICAgIGxpYnhtbC1wYXJzZXItcGVybCBcCisgICAgbGlieG1sLXBlcmwgXAorICAgIGxpYnhtbC1zYXgtcGVybCBcCisgICAgZ2xpYmMtbG9jYWxlZGF0YXMgXAorICAgIGdsaWJjLWdjb252cyBcCisgICAgZ2xpYmMtY2hhcm1hcHMgXAorICAgIGdsaWJjLWJpbmFyaWVzIFwKKyAgICBnbGliYy1sb2NhbGVkYXRhLXBvc2l4IFwKKyAgICBnbGliYy1leHRyYS1uc3MgXAorICAgIGdsaWJjLXBjcHJvZmlsZSBcCisgICAgbGliY2xhc3MtaXNhLXBlcmwgXAorICAgIGxpYmVudi1wZXJsIFwKKyAgICBsaWJkdW1wdmFsdWUtcGVybCBcCisgICAgbGliZmlsZS1jaGVja3RyZWUtcGVybCBcCisgICAgbGliaTE4bi1jb2xsYXRlLXBlcmwgXAorICAgIGxpYnBvZC1wbGFpbmVyLXBlcmwgXAorIgorCitQVEggPSAicHRoIgorUFRIX2xpYmMtdWNsaWJjID0gIiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vOTlfcGFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZTk5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS85OV9wYW0KQEAgLTAsMCArMSBAQAorZCByb290IHJvb3QgMDc1NSAvdmFyL3J1bi9zZXBlcm1pdCBub25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9jcnlwdF9jb25maWd1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjODJhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitUaGlzIHBhdGNoIGZpeGVzIGEgY2FzZSB3aGVyZSBpdCBmaW5kIGNyeXB0IGRlZmluZWQgaW4gbGliYyAobXVzbCkgYnV0Citub3QgaW4gc3BlY2lmaWVkIGxpYnJhcmllcyB0aGVuIGl0IGVuZHMgdXAgYXNzaWduaW5nCisKK0xJQkNSWVBUPSItbCIgd2hpY2ggdGhlbiBnb2VzIGludG8gbWFrZWZpbGUgY2F1c2UgYWxsIHNvcnQgb2YgcHJvYmxlbXMKK2UuZy4KKworbGQ6IGNhbm5vdCBmaW5kIC1sLW0zMgorfCBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKworVGhlIHJlYXNvbiBpcyB0aGF0IC1sIGFwcGVhcnMgb24gY29tbWFuZGxpbmUgd2l0aCBvdXQgYW55IGxpYnJhcnkgYW5kCitjb21waWxlciB0cmVhdHMgdGhlIG5leHQgYXJndW1lbnQgYXMgbGlicmFyeSBuYW1lIHdoYXRldmVyIGl0IGlzLgorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IExpbnV4LVBBTS0xLjEuNi9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjYub3JnL2NvbmZpZ3VyZS5hYworKysrIExpbnV4LVBBTS0xLjEuNi9jb25maWd1cmUuYWMKK0BAIC00MDAsNyArNDAwLDkgQEAgQVNfSUYoW3Rlc3QgIngkYWNfY3ZfaGVhZGVyX3hjcnlwdF9oIiA9CisgICBbY3J5cHRfbGlicz0iY3J5cHQiXSkKKyAKKyBCQUNLVVBfTElCUz0kTElCUworLUFDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwgTElCQ1JZUFQ9Ii1sJGFjX2xpYiIsIExJQkNSWVBUPSIiKQorK0FDX1NFQVJDSF9MSUJTKFtjcnlwdF0sWyRjcnlwdF9saWJzXSwKKysJICAgICAgIFt0ZXN0ICIkYWNfY3Zfc2VhcmNoX2NyeXB0IiA9ICJub25lIHJlcXVpcmVkIiB8fAorKwkJTElCQ1JZUFQ9IiRhY19jdl9zZWFyY2hfY3J5cHQiXSkKKyBBQ19DSEVDS19GVU5DUyhjcnlwdF9yIGNyeXB0X2dlbnNhbHRfcikKKyBMSUJTPSRCQUNLVVBfTElCUworIEFDX1NVQlNUKExJQkNSWVBUKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9maXhzZXBidWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTljM2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vZml4c2VwYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorRml4IHRoZSBidWlsZCBlcnJvciB3aGVuIGEgc2VwYXJhdGUgYnVpbGQgZGlyZWN0b3J5IGlzIHVzZWQ6CisKK01ha2luZyBpbnN0YWxsIGluIHh0ZXN0c21ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkMS90bXAvd29yay9pNTg2LXBva3ktbGludXgvbGlicGFtLzEuMS42LXIyL2J1aWxkL3h0ZXN0cycvdXNyL2Jpbi9pbnN0YWxsIC1jIC1kIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9pbWFnZS91c3Ivc2hhcmUvTGludXgtUEFNL3h0ZXN0c2ZvciBmaWxlIGluIHJ1bi14dGVzdHMuc2ggdHN0LXBhbV9kaXNwYXRjaDEucGFtZCB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gzLnBhbWQgdHN0LXBhbV9kaXNwYXRjaDQucGFtZCB0c3QtcGFtX2Rpc3BhdGNoNS5wYW1kIHRzdC1wYW1fY3JhY2tsaWIxLnBhbWQgdHN0LXBhbV9jcmFja2xpYjIucGFtZCB0c3QtcGFtX3VuaXgxLnBhbWQgdHN0LXBhbV91bml4Mi5wYW1kIHRzdC1wYW1fdW5peDMucGFtZCB0c3QtcGFtX3VuaXg0LnBhbWQgdHN0LXBhbV91bml4MS5zaCB0c3QtcGFtX3VuaXgyLnNoIHRzdC1wYW1fdW5peDMuc2ggdHN0LXBhbV91bml4NC5zaCBhY2Nlc3MuY29uZiB0c3QtcGFtX2FjY2VzczEucGFtZCB0c3QtcGFtX2FjY2VzczEuc2ggdHN0LXBhbV9hY2Nlc3MyLnBhbWQgdHN0LXBhbV9hY2Nlc3MyLnNoIHRzdC1wYW1fYWNjZXNzMy5wYW1kIHRzdC1wYW1fYWNjZXNzMy5zaCB0c3QtcGFtX2FjY2VzczQucGFtZCB0c3QtcGFtX2FjY2VzczQuc2ggbGltaXRzLmNvbmYgdHN0LXBhbV9saW1pdHMxLnBhbWQgdHN0LXBhbV9saW1pdHMxLnNoIHRzdC1wYW1fc3VjY2VlZF9pZjEucGFtZCB0c3QtcGFtX3N1Y2NlZWRfaWYxLnNoIGdyb3VwLmNvbmYgdHN0LXBhbV9ncm91cDEucGFtZCB0c3QtcGFtX2dyb3VwMS5zaCB0c3QtcGFtX2F1dGhmYWlsLnBhbWQgdHN0LXBhbV9hdXRoc3VjY2VlZC5wYW1kIHRzdC1wYW1fc3Vic3RhY2sxLnBhbWQgdHN0LXBhbV9zdWJzdGFjazFhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazEuc2ggdHN0LXBhbV9zdWJzdGFjazIucGFtZCB0c3QtcGFtX3N1YnN0YWNrMmEucGFtZCB0c3QtcGFtX3N1YnN0YWNrMi5zaCB0c3QtcGFtX3N1YnN0YWNrMy5wYW1kIHRzdC1wYW1fc3Vic3RhY2szYS5wYW1kIHRzdC1wYW1fc3Vic3RhY2szLnNoIHRzdC1wYW1fc3Vic3RhY2s0LnBhbWQgdHN0LXBhbV9zdWJzdGFjazRhLnBhbWQgdHN0LXBhbV9zdWJzdGFjazQuc2ggdHN0LXBhbV9zdWJzdGFjazUucGFtZCB0c3QtcGFtX3N1YnN0YWNrNWEucGFtZCB0c3QtcGFtX3N1YnN0YWNrNS5zaCB0c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnBhbWQgdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaCB0c3QtcGFtX3B3aGlzdG9yeTEucGFtZCB0c3QtcGFtX3B3aGlzdG9yeTEuc2ggdHN0LXBhbV90aW1lMS5wYW1kIHRpbWUuY29uZiA7IGRvIFwvdXNyL2Jpbi9pbnN0YWxsIC1jICRmaWxlIC9tZWRpYS9idWlsZDEvcG9reS9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2xpYnBhbS8xLjEuNi1yMi9pbWFnZS91c3Ivc2hhcmUvTGludXgtUEFNL3h0ZXN0cyA7IFwJZG9uZQorL3Vzci9iaW4vaW5zdGFsbDogY2Fubm90IHN0YXQgYHJ1bi14dGVzdHMuc2gnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisvdXNyL2Jpbi9pbnN0YWxsOiBjYW5ub3Qgc3RhdCBgdHN0LXBhbV9kaXNwYXRjaDEucGFtZCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKy91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB0c3QtcGFtX2Rpc3BhdGNoMi5wYW1kJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworUlAgMjAxMy8wMy8yMQorCitJbmRleDogTGludXgtUEFNLTEuMS42L3h0ZXN0cy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIExpbnV4LVBBTS0xLjEuNi5vcmlnL3h0ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTAzLTA4IDEyOjI2OjMwLjM2MDI2NjAwMCArMDAwMAorKysrIExpbnV4LVBBTS0xLjEuNi94dGVzdHMvTWFrZWZpbGUuYW0JMjAxMy0wMy0yMSAxMTozOTo1OC41NTcxNjY2NTAgKzAwMDAKK0BAIC01OSw3ICs1OSw3IEBACisgaW5zdGFsbF94dGVzdHM6CisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzCisgCWZvciBmaWxlIGluICQoRVhUUkFfRElTVCkgOyBkbyBcCistCQkkKElOU1RBTEwpICQkZmlsZSAkKERFU1RESVIpJChwa2dkYXRhZGlyKS94dGVzdHMgOyBcCisrCQkkKElOU1RBTEwpICQoc3JjZGlyKS8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorIAlkb25lCisgCWZvciBmaWxlIGluICQoWFRFU1RTKTsgZG8gXAorIAkJJChJTlNUQUxMKSAubGlicy8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDAyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLXJlbW92ZS1iYXNoLWRlcGVuZGVuY3kucGF0Y2gKQEAgLTAsMCArMSwyMjYgQEAKK0Zyb20gNTU1NDA3ZmY2ZTJmNzQyZGY2NGFlOTM4NTlmMTRhMGZjMTM5NzgyOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAwNTozNTowNSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBsaWJwYW0veHRlc3RzOiByZW1vdmUgYmFzaCBkZXBlbmRlbmN5CisKK1RoZXJlJ3Mgbm90IGJhc2ggc3BlY2lmaWMgc3ludGF4IGluIHRoZSB4dGVzdCBzY3JpcHRzOgorCisgICMgYWZ0ZXIgYmVsb3cgcGF0Y2hlcyBhcHBsaWVkOgorICAkIGNkIExpbnV4LVBBTS0xLjEuNi94dGVzdHMKKyAgJCBjaGVja2Jhc2hpc21zICouc2gKKyAgTm8gb3V0cHV0CisKK0p1c3QgcmVtb3ZlIHRoZSBydW50aW1lIGRlcGVuZGVuY3kgdG8gYmFzaC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgeHRlc3RzL3J1bi14dGVzdHMuc2ggICAgICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2ggfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaCAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaCAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2szLnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2ggICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDEuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDIuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDMuc2ggICAgICAgICAgfCAgICAyICstCisgeHRlc3RzL3RzdC1wYW1fdW5peDQuc2ggICAgICAgICAgfCAgICAyICstCisgMTkgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94dGVzdHMvcnVuLXh0ZXN0cy5zaCBiL3h0ZXN0cy9ydW4teHRlc3RzLnNoCitpbmRleCAzYTg5MDU3Li4xY2Y4Njg0IDEwMDc1NQorLS0tIGEveHRlc3RzL3J1bi14dGVzdHMuc2gKKysrKyBiL3h0ZXN0cy9ydW4teHRlc3RzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIFNSQ0RJUj0kMQorIHNoaWZ0IDEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MxLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMS5zaAoraW5kZXggMTgwZDI1Ni4uNzA1MjFkMiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWFjY2VzcworIC91c3Ivc2Jpbi91c2VyYWRkIC1HIHRzdHBhbWFjY2VzcyAtcCAnISEnIHRzdHBhbWFjY2VzczEKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9hY2Nlc3MyLnNoIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMi5zaAoraW5kZXggMGEzMDI3NS4uN2UzZTYwZiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2FjY2VzczIuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL2dyb3VwYWRkIHRzdHBhbWFjY2VzcworIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtYWNjZXNzMgorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczMuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3MzLnNoCitpbmRleCAzNDhlMGMzLi4zNjMwZTJlIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzMy5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczMKKyAuL3RzdC1wYW1fYWNjZXNzMworZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2FjY2VzczQuc2ggYi94dGVzdHMvdHN0LXBhbV9hY2Nlc3M0LnNoCitpbmRleCA2MWU3YjQ0Li40NTM4ZGY0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYWNjZXNzNC5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCAtcCAnISEnIHRzdHBhbWFjY2VzczQKKyAuL3RzdC1wYW1fYWNjZXNzNAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2Fzc2VtYmxlX2xpbmUxLnNoIGIveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKK2luZGV4IDI0OGQ0N2UuLmRjMmE2NzUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9hc3NlbWJsZV9saW5lMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fYXNzZW1ibGVfbGluZTEuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9hc3NlbWJsZV9saW5lMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaCBiL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAoraW5kZXggYjc2Mzc3Zi4uNDRmYWNhOSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2dyb3VwMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fZ3JvdXAxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi9ncm91cGFkZCB0c3RwYW1ncnBnCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1ncnAKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9saW1pdHMxLnNoIGIveHRlc3RzL3RzdC1wYW1fbGltaXRzMS5zaAoraW5kZXggNGZhYTgyMi4uMzJjMDIxZCAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX2xpbWl0czEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW1saW1pdHMKKyAuL3RzdC1wYW1fbGltaXRzMQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3B3aGlzdG9yeTEuc2ggYi94dGVzdHMvdHN0LXBhbV9wd2hpc3RvcnkxLnNoCitpbmRleCBkZGIzYjhiLi4wZjIxMmUyIDEwMDY0NAorLS0tIGEveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fcHdoaXN0b3J5MS5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAvdXNyL3NiaW4vdXNlcmFkZCB0c3RwYW1wd2hpc3RvcnkKKyAuL3RzdC1wYW1fcHdoaXN0b3J5MQorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAoraW5kZXggNTI2MDE3NS4uZjFiNzJhNyAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2sxLnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhmYWlsIHRzdC1wYW1fc3Vic3RhY2sxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCitpbmRleCBjMDJmNTk3Li4zODA0ZmE3IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2syLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazIuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aHN1Y2NlZWQgdHN0LXBhbV9zdWJzdGFjazIKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2ggYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKK2luZGV4IDBlNTcyYWEuLmFhNDhlOGUgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrMy5zaAorQEAgLTEsMyArMSwzIEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyBleGVjIC4vdHN0LXBhbV9hdXRoc3VjY2VlZCB0c3QtcGFtX3N1YnN0YWNrMworZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAoraW5kZXggYTNlZjA4YS4uOTU4YTA3YSAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3N1YnN0YWNrNC5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s0LnNoCitAQCAtMSwzICsxLDMgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIGV4ZWMgLi90c3QtcGFtX2F1dGhzdWNjZWVkIHRzdC1wYW1fc3Vic3RhY2s0CitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoIGIveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCitpbmRleCBlMjcxNGZkLi43ZTBkYTc0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3Vic3RhY2s1LnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV9zdWJzdGFjazUuc2gKK0BAIC0xLDMgKzEsMyBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgZXhlYyAuL3RzdC1wYW1fYXV0aGZhaWwgdHN0LXBhbV9zdWJzdGFjazUKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV9zdWNjZWVkX2lmMS5zaCBiL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCitpbmRleCBhNjQzYjJlLi41OGU1N2I0IDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fc3VjY2VlZF9pZjEuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3N1Y2NlZWRfaWYxLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgdHN0cGFtdGVzdAorIC91c3Ivc2Jpbi91c2VyYWRkIC1wICchIScgcGFtdGVzdAorZGlmZiAtLWdpdCBhL3h0ZXN0cy90c3QtcGFtX3VuaXgxLnNoIGIveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKK2luZGV4IGY3NWJkODQuLjcyZGVhYzAgMTAwNzU1CistLS0gYS94dGVzdHMvdHN0LXBhbV91bml4MS5zaAorKysrIGIveHRlc3RzL3RzdC1wYW1fdW5peDEuc2gKK0BAIC0xLDQgKzEsNCBAQAorLSMhL2Jpbi9iYXNoCisrIyEvYmluL3NoCisgCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgJyEhJyB0c3RwYW11bml4CisgLi90c3QtcGFtX3VuaXgxCitkaWZmIC0tZ2l0IGEveHRlc3RzL3RzdC1wYW1fdW5peDIuc2ggYi94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAoraW5kZXggNzA5MzE1NS4uYzA0ZDZlNiAxMDA3NTUKKy0tLSBhL3h0ZXN0cy90c3QtcGFtX3VuaXgyLnNoCisrKysgYi94dGVzdHMvdHN0LXBhbV91bml4Mi5zaAorQEAgLTEsNCArMSw0IEBACistIyEvYmluL2Jhc2gKKysjIS9iaW4vc2gKKyAKKyAjIHBhbXVuaXgwID0gMGFYS1p6dEEuZDFLWQorIC91c3Ivc2Jpbi91c2VyYWRkIC1wIDBhWEtaenRBLmQxS1kgIHRzdHBhbXVuaXgKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4My5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCitpbmRleCBlZjRhMDdjLi5iNTJkYjJiIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDMuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXgzLnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAxID0gMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVIHRzdHBhbXVuaXgKK2RpZmYgLS1naXQgYS94dGVzdHMvdHN0LXBhbV91bml4NC5zaCBiL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCitpbmRleCA3ODdjMmY5Li5lNzk3NmZkIDEwMDc1NQorLS0tIGEveHRlc3RzL3RzdC1wYW1fdW5peDQuc2gKKysrKyBiL3h0ZXN0cy90c3QtcGFtX3VuaXg0LnNoCitAQCAtMSw0ICsxLDQgQEAKKy0jIS9iaW4vYmFzaAorKyMhL2Jpbi9zaAorIAorICMgcGFtdW5peDAxID0gMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVCisgL3Vzci9zYmluL3VzZXJhZGQgLXAgMGFYS1p6dEEuZDFLWUl1RlhBcm1kMmpVIHRzdHBhbXVuaXgKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9saWJwYW0teHRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTY4NzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vbGlicGFtLXh0ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM1IEBACitUaGlzIHBhdGNoIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHN1YiBwYWNrYWdlIGxpYnBhbS14dGVzdHMgdG8gZG8gbW9yZSBjaGVja3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYW5nIEthaSA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLSBMaW51eC1QQU0tMS4xLjQveHRlc3RzL01ha2VmaWxlLmFtLm9yaWcJMjAxMS0wNy0xOSAxNzowMDowOS42MTk5ODAwMDEgKzA4MDAKKysrKyBMaW51eC1QQU0tMS4xLjQveHRlc3RzL01ha2VmaWxlLmFtCTIwMTEtMDctMTkgMTY6NTQ6MDAuMjI5OTc5OTk4ICswODAwCitAQCAtNyw3ICs3LDcgQEAKKyBBTV9MREZMQUdTID0gLUwkKHRvcF9idWlsZGRpcikvbGlicGFtIC1scGFtIFwKKyAJLUwkKHRvcF9idWlsZGRpcikvbGlicGFtX21pc2MgLWxwYW1fbWlzYworIAorLUNMRUFORklMRVMgPSAqfiAkKFhURVNUUykKKytDTEVBTkZJTEVTID0gKn4KKyAKKyBFWFRSQV9ESVNUID0gcnVuLXh0ZXN0cy5zaCB0c3QtcGFtX2Rpc3BhdGNoMS5wYW1kIHRzdC1wYW1fZGlzcGF0Y2gyLnBhbWQgXAorIAl0c3QtcGFtX2Rpc3BhdGNoMy5wYW1kIHRzdC1wYW1fZGlzcGF0Y2g0LnBhbWQgXAorQEAgLTUxLDMgKzUxLDE4IEBACisgCisgeHRlc3RzOiAkKFhURVNUUykgcnVuLXh0ZXN0cy5zaAorIAkiJChzcmNkaXIpIi9ydW4teHRlc3RzLnNoICIkKHNyY2RpcikiICR7WFRFU1RTfSAke05PU1JDVEVTVFN9CisrCisrYWxsOiAkKFhURVNUUykKKysKKytpbnN0YWxsOiBpbnN0YWxsX3h0ZXN0cworKworK2luc3RhbGxfeHRlc3RzOgorKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKHBrZ2RhdGFkaXIpL3h0ZXN0cworKwlmb3IgZmlsZSBpbiAkKEVYVFJBX0RJU1QpIDsgZG8gXAorKwkJJChJTlNUQUxMKSAkJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwlkb25lCisrCWZvciBmaWxlIGluICQoWFRFU1RTKTsgZG8gXAorKwkJJChJTlNUQUxMKSAubGlicy8kJGZpbGUgJChERVNURElSKSQocGtnZGF0YWRpcikveHRlc3RzIDsgXAorKwlkb25lCisrCisrLlBIT05ZOiBhbGwgaW5zdGFsbF94dGVzdHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLW5vLWlubmV0Z3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU1NTFhYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS1uby1pbm5ldGdyLnBhdGNoCkBAIC0wLDAgKzEsOTcgQEAKK2lubmV0Z3IgbWF5IG5vdCBiZSB0aGVyZSBzbyBtYWtlIHN1cmUgdGhhdCB3aGVuIGlubmV0Z3IgaXMgbm90IHByZXNlbnQKK3RoZW4gd2UgaW5mb3JtIGFib3V0IGl0IGFuZCBub3QgdXNlIGl0LgorCistS2hlbQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CisKK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fZ3JvdXAvcGFtX2dyb3VwLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworKysrIExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV9ncm91cC9wYW1fZ3JvdXAuYworQEAgLTY1OSw3ICs2NTksMTEgQEAgc3RhdGljIGludCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcAorIAl9CisgCS8qIElmIGJ1ZmZlciBzdGFydHMgd2l0aCBALCB3ZSBhcmUgdXNpbmcgbmV0Z3JvdXBzICovCisgCWlmIChidWZmZXJbMF0gPT0gJ0AnKQorLQkgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorKyAgICAgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjZWxzZQorKyAgICAgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV9ncm91cCBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKyAJLyogb3RoZXJ3aXNlLCBpZiB0aGUgYnVmZmVyIHN0YXJ0cyB3aXRoICUsIGl0J3MgYSBVTklYIGdyb3VwICovCisgCWVsc2UgaWYgKGJ1ZmZlclswXSA9PSAnJScpCisgICAgICAgICAgIGdvb2QgJj0gcGFtX21vZHV0aWxfdXNlcl9pbl9ncm91cF9uYW1fbmFtKHBhbWgsIHVzZXIsICZidWZmZXJbMV0pOworSW5kZXg6IExpbnV4LVBBTS0xLjEuMy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBMaW51eC1QQU0tMS4xLjMub3JpZy9tb2R1bGVzL3BhbV90aW1lL3BhbV90aW1lLmMKKysrKyBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fdGltZS9wYW1fdGltZS5jCitAQCAtNTU1LDkgKzU1NSwxMyBAQCBjaGVja19hY2NvdW50KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QKKyAJICB9CisgCSAgLyogSWYgYnVmZmVyIHN0YXJ0cyB3aXRoIEAsIHdlIGFyZSB1c2luZyBuZXRncm91cHMgKi8KKyAJICBpZiAoYnVmZmVyWzBdID09ICdAJykKKy0JICAgIGdvb2QgJj0gaW5uZXRnciAoJmJ1ZmZlclsxXSwgTlVMTCwgdXNlciwgTlVMTCk7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorKwkgICAgICAgZ29vZCAmPSBpbm5ldGdyICgmYnVmZmVyWzFdLCBOVUxMLCB1c2VyLCBOVUxMKTsKKysjZWxzZQorKwkgICAgICAgcGFtX3N5c2xvZyAocGFtaCwgTE9HX0VSUiwgInBhbV90aW1lIGRvZXMgbm90IGhhdmUgbmV0Z3JvdXAgc3VwcG9ydCIpOworKyNlbmRpZgorIAkgIGVsc2UKKy0JICAgIGdvb2QgJj0gbG9naWNfZmllbGQocGFtaCwgdXNlciwgYnVmZmVyLCBjb3VudCwgaXNfc2FtZSk7CisrCSAgICAgICBnb29kICY9IGxvZ2ljX2ZpZWxkKHBhbWgsIHVzZXIsIGJ1ZmZlciwgY291bnQsIGlzX3NhbWUpOworIAkgIEQoKCJ3aXRoIHVzZXI6ICVzIiwgZ29vZCA/ICJwYXNzZXMiOiJmYWlscyIgKSk7CisgCisgCSAgLyogaGVyZSB3ZSBnZXQgdGhlIHRpbWUgZmllbGQgKi8KK0luZGV4OiBMaW51eC1QQU0tMS4xLjMvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gTGludXgtUEFNLTEuMS4zLm9yaWcvbW9kdWxlcy9wYW1fc3VjY2VlZF9pZi9wYW1fc3VjY2VlZF9pZi5jCisrKysgTGludXgtUEFNLTEuMS4zL21vZHVsZXMvcGFtX3N1Y2NlZWRfaWYvcGFtX3N1Y2NlZWRfaWYuYworQEAgLTIzMSwxOCArMjMxLDI3IEBAIGV2YWx1YXRlX25vdGluZ3JvdXAocGFtX2hhbmRsZV90ICpwYW1oLAorIH0KKyAvKiBSZXR1cm4gUEFNX1NVQ0NFU1MgaWYgdGhlIChob3N0LHVzZXIpIGlzIGluIHRoZSBuZXRncm91cC4gKi8KKyBzdGF0aWMgaW50CistZXZhbHVhdGVfaW5uZXRncihjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKytldmFsdWF0ZV9pbm5ldGdyKGNvbnN0IHBhbV9oYW5kbGVfdCogcGFtaCwgY29uc3QgY2hhciAqaG9zdCwgY29uc3QgY2hhciAqdXNlciwgY29uc3QgY2hhciAqZ3JvdXApCisgeworKyNpZmRlZiBIQVZFX0lOTkVUR1IKKyAJaWYgKGlubmV0Z3IoZ3JvdXAsIGhvc3QsIHVzZXIsIE5VTEwpID09IDEpCisgCQlyZXR1cm4gUEFNX1NVQ0NFU1M7CisrI2Vsc2UKKysgICAgICAgIHBhbV9zeXNsb2cgKHBhbWgsIExPR19FUlIsICJwYW1fc3VjY2VlZF9pZiBkb2VzIG5vdCBoYXZlIG5ldGdyb3VwIHN1cHBvcnQiKTsKKysjZW5kaWYKKysKKyAJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKyB9CisgLyogUmV0dXJuIFBBTV9TVUNDRVNTIGlmIHRoZSAoaG9zdCx1c2VyKSBpcyBOT1QgaW4gdGhlIG5ldGdyb3VwLiAqLworIHN0YXRpYyBpbnQKKy1ldmFsdWF0ZV9ub3Rpbm5ldGdyKGNvbnN0IGNoYXIgKmhvc3QsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKmdyb3VwKQorK2V2YWx1YXRlX25vdGlubmV0Z3IoY29uc3QgcGFtX2hhbmRsZV90KiBwYW1oLCBjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICp1c2VyLCBjb25zdCBjaGFyICpncm91cCkKKyB7CisrI2lmZGVmIEhBVkVfSU5ORVRHUgorIAlpZiAoaW5uZXRncihncm91cCwgaG9zdCwgdXNlciwgTlVMTCkgPT0gMCkKKyAJCXJldHVybiBQQU1fU1VDQ0VTUzsKKysjZWxzZQorKwlwYW1fc3lzbG9nIChwYW1oLCBMT0dfRVJSLCAicGFtX3N1Y2NlZWRfaWYgZG9lcyBub3QgaGF2ZSBuZXRncm91cCBzdXBwb3J0Iik7CisrI2VuZGlmCisgCXJldHVybiBQQU1fQVVUSF9FUlI7CisgfQorIAorQEAgLTM2MSwxNCArMzcwLDE0IEBAIGV2YWx1YXRlKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGRlYnVnLAorIAkJY29uc3Qgdm9pZCAqcmhvc3Q7CisgCQlpZiAocGFtX2dldF9pdGVtKHBhbWgsIFBBTV9SSE9TVCwgJnJob3N0KSAhPSBQQU1fU1VDQ0VTUykKKyAJCQlyaG9zdCA9IE5VTEw7CistCQlyZXR1cm4gZXZhbHVhdGVfaW5uZXRncihyaG9zdCwgdXNlciwgcmlnaHQpOworKwkJcmV0dXJuIGV2YWx1YXRlX2lubmV0Z3IocGFtaCwgcmhvc3QsIHVzZXIsIHJpZ2h0KTsKKyAJfQorIAkvKiAoUmhvc3QsIHVzZXIpIGlzIG5vdCBpbiB0aGlzIGdyb3VwLiAqLworIAlpZiAoc3RyY2FzZWNtcChxdWFsLCAibm90aW5uZXRnciIpID09IDApIHsKKyAJCWNvbnN0IHZvaWQgKnJob3N0OworIAkJaWYgKHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fUkhPU1QsICZyaG9zdCkgIT0gUEFNX1NVQ0NFU1MpCisgCQkJcmhvc3QgPSBOVUxMOworLQkJcmV0dXJuIGV2YWx1YXRlX25vdGlubmV0Z3Iocmhvc3QsIHVzZXIsIHJpZ2h0KTsKKysJCXJldHVybiBldmFsdWF0ZV9ub3Rpbm5ldGdyKHBhbWgsIHJob3N0LCB1c2VyLCByaWdodCk7CisgCX0KKyAJLyogRmFpbCBjbG9zZWQuICovCisgCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTgzNGY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXNlY3VyaXR5LWFic3RyYWN0LXNlY3VyZXR0eS1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDIwMCBAQAorRGVzY3JpcHRpb246IGV4dHJhY3QgdGhlIHNlY3VyZXR0eSBsb2dpYyBmb3IgdXNlIHdpdGggdGhlICJudWxsb2tfc2VjdXJlIiBvcHRpb24KKyBpbnRyb2R1Y2VkIGluIHRoZSAiMDU1X3BhbV91bml4X251bGxva19zZWN1cmUiIHBhdGNoLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWluZyBMaXUgPG1pbmcubGl1QHdpbmRyaXZlci5jb20+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L01ha2VmaWxlLmFtCistLS0gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvTWFrZWZpbGUuYW0JMjAxMy0wNy0wNSAxMTowODoyMy4yMjQ0ODMyMzcgKzA4MDAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS9NYWtlZmlsZS5hbQkyMDEzLTA3LTA1IDExOjE1OjIxLjMwNDQ4NjQ1NiArMDgwMAorQEAgLTI0LDYgKzI0LDEwIEBAIGVuZGlmCisgc2VjdXJlbGliX0xUTElCUkFSSUVTID0gcGFtX3NlY3VyZXR0eS5sYQorIHBhbV9zZWN1cmV0dHlfbGFfTElCQUREID0gLUwkKHRvcF9idWlsZGRpcikvbGlicGFtIC1scGFtCisgCisrcGFtX3NlY3VyZXR0eV9sYV9TT1VSQ0VTID0JXAorKwlwYW1fc2VjdXJldHR5LmMJCVwKKysJdHR5X3NlY3VyZS5jCisrCisgaWYgRU5BQkxFX1JFR0VORVJBVEVfTUFOCisgbm9pbnN0X0RBVEEgPSBSRUFETUUKKyBSRUFETUU6IHBhbV9zZWN1cmV0dHkuOC54bWwKK2RpZmYgLXVycE4gYS9tb2R1bGVzL3BhbV9zZWN1cmV0dHkvcGFtX3NlY3VyZXR0eS5jIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYworLS0tIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYwkyMDEzLTA3LTA1IDExOjA3OjUwLjA2NDQ4MzU2OCArMDgwMAorKysrIGIvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3BhbV9zZWN1cmV0dHkuYwkyMDEzLTA3LTA1IDExOjEyOjIzLjk5NDQ4MzM0NCArMDgwMAorQEAgLTEsNyArMSw1IEBACisgLyogcGFtX3NlY3VyZXR0eSBtb2R1bGUgKi8KKyAKKy0jZGVmaW5lIFNFQ1VSRVRUWV9GSUxFICIvZXRjL3NlY3VyZXR0eSIKKy0jZGVmaW5lIFRUWV9QUkVGSVggICAgICIvZGV2LyIKKyAjZGVmaW5lIENNRExJTkVfRklMRSAgICIvcHJvYy9jbWRsaW5lIgorICNkZWZpbmUgQ09OU09MRUFDVElWRV9GSUxFCSIvc3lzL2NsYXNzL3R0eS9jb25zb2xlL2FjdGl2ZSIKKyAKK0BAIC00MCw2ICszOCw5IEBACisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9tb2R1dGlsLmg+CisgI2luY2x1ZGUgPHNlY3VyaXR5L3BhbV9leHQuaD4KKyAKKytleHRlcm4gaW50IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUoY29uc3QgcGFtX2hhbmRsZV90ICpwYW1oLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1dHR5bmFtZSk7CisrCisgI2RlZmluZSBQQU1fREVCVUdfQVJHICAgICAgIDB4MDAwMQorICNkZWZpbmUgUEFNX05PQ09OU09MRV9BUkcgICAweDAwMDIKKyAKK0BAIC03MywxMSArNzQsNyBAQCBzZWN1cmV0dHlfcGVyZm9ybV9jaGVjayAocGFtX2hhbmRsZV90ICpwCisgICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lOworICAgICBjb25zdCBjaGFyICp1dHR5bmFtZTsKKyAgICAgY29uc3Qgdm9pZCAqdm9pZF91dHR5bmFtZTsKKy0gICAgY2hhciB0dHlmaWxlbGluZVsyNTZdOworLSAgICBjaGFyIHB0bmFtZVsyNTZdOworLSAgICBzdHJ1Y3Qgc3RhdCB0dHlmaWxlaW5mbzsKKyAgICAgc3RydWN0IHBhc3N3ZCAqdXNlcl9wd2Q7CistICAgIEZJTEUgKnR0eWZpbGU7CisgCisgICAgIC8qIGxvZyBhIHRyYWlsIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICAgaWYgKGN0cmwgJiBQQU1fREVCVUdfQVJHKSB7CitAQCAtMTA1LDUwICsxMDIsNyBAQCBzZWN1cmV0dHlfcGVyZm9ybV9jaGVjayAocGFtX2hhbmRsZV90ICpwCisgCXJldHVybiBQQU1fU0VSVklDRV9FUlI7CisgICAgIH0KKyAKKy0gICAgLyogVGhlIFBBTV9UVFkgaXRlbSBtYXkgYmUgcHJlZml4ZWQgd2l0aCAiL2Rldi8iIC0gc2tpcCB0aGF0ICovCistICAgIGlmIChzdHJuY21wKFRUWV9QUkVGSVgsIHV0dHluYW1lLCBzaXplb2YoVFRZX1BSRUZJWCktMSkgPT0gMCkgeworLQl1dHR5bmFtZSArPSBzaXplb2YoVFRZX1BSRUZJWCktMTsKKy0gICAgfQorLQorLSAgICBpZiAoc3RhdChTRUNVUkVUVFlfRklMRSwgJnR0eWZpbGVpbmZvKSkgeworLQlwYW1fc3lzbG9nKHBhbWgsIExPR19OT1RJQ0UsICJDb3VsZG4ndCBvcGVuICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKy0JcmV0dXJuIFBBTV9TVUNDRVNTOyAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZWN1cmV0dHkgaGFuZGxpbmcsCistCQkJICAgICAgIHRoaXMgbmVlZHMgdG8gc3VjY2VlZC4gIEJ1dCB3ZSBzdGlsbCBsb2cgdGhlCistCQkJICAgICAgIGVycm9yLiAqLworLSAgICB9CistCistICAgIGlmICgodHR5ZmlsZWluZm8uc3RfbW9kZSAmIFNfSVdPVEgpIHx8ICFTX0lTUkVHKHR0eWZpbGVpbmZvLnN0X21vZGUpKSB7CistCS8qIElmIHRoZSBmaWxlIGlzIHdvcmxkIHdyaXRhYmxlIG9yIGlzIG5vdCBhCistCSAgIG5vcm1hbCBmaWxlLCByZXR1cm4gZXJyb3IgKi8KKy0JcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLAorLQkJICAgIiVzIGlzIGVpdGhlciB3b3JsZCB3cml0YWJsZSBvciBub3QgYSBub3JtYWwgZmlsZSIsCistCQkgICBTRUNVUkVUVFlfRklMRSk7CistCXJldHVybiBQQU1fQVVUSF9FUlI7CistICAgIH0KKy0KKy0gICAgdHR5ZmlsZSA9IGZvcGVuKFNFQ1VSRVRUWV9GSUxFLCJyIik7CistICAgIGlmICh0dHlmaWxlID09IE5VTEwpIHsgLyogQ2hlY2sgdGhhdCB3ZSBvcGVuZWQgaXQgc3VjY2Vzc2Z1bGx5ICovCistCXBhbV9zeXNsb2cocGFtaCwgTE9HX0VSUiwgIkVycm9yIG9wZW5pbmcgJXM6ICVtIiwgU0VDVVJFVFRZX0ZJTEUpOworLQlyZXR1cm4gUEFNX1NFUlZJQ0VfRVJSOworLSAgICB9CistCistICAgIGlmIChpc2RpZ2l0KHV0dHluYW1lWzBdKSkgeworLQlzbnByaW50ZihwdG5hbWUsIHNpemVvZihwdG5hbWUpLCAicHRzLyVzIiwgdXR0eW5hbWUpOworLSAgICB9IGVsc2UgeworLQlwdG5hbWVbMF0gPSAnXDAnOworLSAgICB9CistCistICAgIHJldHZhbCA9IDE7CistCistICAgIHdoaWxlICgoZmdldHModHR5ZmlsZWxpbmUsIHNpemVvZih0dHlmaWxlbGluZSktMSwgdHR5ZmlsZSkgIT0gTlVMTCkKKy0JICAgJiYgcmV0dmFsKSB7CistCWlmICh0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPT0gJ1xuJykKKy0JICAgIHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9ICdcMCc7CistCistCXJldHZhbCA9ICggc3RyY21wKHR0eWZpbGVsaW5lLCB1dHR5bmFtZSkKKy0JCSAgICYmICghcHRuYW1lWzBdIHx8IHN0cmNtcChwdG5hbWUsIHV0dHluYW1lKSkgKTsKKy0gICAgfQorLSAgICBmY2xvc2UodHR5ZmlsZSk7CisrICAgIHJldHZhbCA9IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgdXR0eW5hbWUpOworIAorICAgICBpZiAocmV0dmFsICYmICEoY3RybCAmIFBBTV9OT0NPTlNPTEVfQVJHKSkgeworICAgICAgICAgRklMRSAqY21kbGluZWZpbGU7CitkaWZmIC11cnBOIGEvbW9kdWxlcy9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUuYyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMKKy0tLSBhL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMJMTk3MC0wMS0wMSAwODozMDowMC4wMDAwMDAwMDAgKzA4MzAKKysrKyBiL21vZHVsZXMvcGFtX3NlY3VyZXR0eS90dHlfc2VjdXJlLmMJMjAxMy0wNy0wNSAxMToxNDoyMS41MzQ0ODI5MDAgKzA4MDAKK0BAIC0wLDAgKzEsOTAgQEAKKysvKgorKyAqIEEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgcGFydGljdWxhciBsaW5lIGlzIGluIC9ldGMvc2VjdXJldHR5CisrICovCisrCisrCisrI2RlZmluZSBTRUNVUkVUVFlfRklMRSAiL2V0Yy9zZWN1cmV0dHkiCisrI2RlZmluZSBUVFlfUFJFRklYICAgICAiL2Rldi8iCisrCisrLyogVGhpcyBmdW5jdGlvbiB0YWtlbiBvdXQgb2YgcGFtX3NlY3VyZXR0eSBieSBTYW0gSGFydG1hbgorKyAqIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiovCisrLyoKKysgKiBieSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+LCBSZWQgSGF0IFNvZnR3YXJlLgorKyAqIEp1bHkgMjUsIDE5OTYuCisrICogU2xpZ2h0IG1vZGlmaWNhdGlvbnMgQUdNLiAxOTk2LzEyLzMKKysgKi8KKysKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdWxlcy5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysjaW5jbHVkZSA8c3lzbG9nLmg+CisrI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4KKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fbW9kdXRpbC5oPgorKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fZXh0Lmg+CisrCisrZXh0ZXJuIGludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworKworK2ludCBfcGFtbW9kdXRpbF90dHlfc2VjdXJlKGNvbnN0IHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqdXR0eW5hbWUpCisreworKyAgICBpbnQgcmV0dmFsID0gUEFNX0FVVEhfRVJSOworKyAgICBjaGFyIHR0eWZpbGVsaW5lWzI1Nl07CisrICAgIGNoYXIgcHRuYW1lWzI1Nl07CisrICAgIHN0cnVjdCBzdGF0IHR0eWZpbGVpbmZvOworKyAgICBGSUxFICp0dHlmaWxlOworKyAgICAvKiBUaGUgUEFNX1RUWSBpdGVtIG1heSBiZSBwcmVmaXhlZCB3aXRoICIvZGV2LyIgLSBza2lwIHRoYXQgKi8KKysgICAgaWYgKHN0cm5jbXAoVFRZX1BSRUZJWCwgdXR0eW5hbWUsIHNpemVvZihUVFlfUFJFRklYKS0xKSA9PSAwKQorKwl1dHR5bmFtZSArPSBzaXplb2YoVFRZX1BSRUZJWCktMTsKKysKKysgICAgaWYgKHN0YXQoU0VDVVJFVFRZX0ZJTEUsICZ0dHlmaWxlaW5mbykpIHsKKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfTk9USUNFLCAiQ291bGRuJ3Qgb3BlbiAlczogJW0iLAorKwkgICAgICAgICAgIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9TVUNDRVNTOyAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBzZWN1cmV0dHkgaGFuZGxpbmcsCisrCQkJICAgICAgIHRoaXMgbmVlZHMgdG8gc3VjY2VlZC4gIEJ1dCB3ZSBzdGlsbCBsb2cgdGhlCisrCQkJICAgICAgIGVycm9yLiAqLworKyAgICB9CisrCisrICAgIGlmICgodHR5ZmlsZWluZm8uc3RfbW9kZSAmIFNfSVdPVEgpIHx8ICFTX0lTUkVHKHR0eWZpbGVpbmZvLnN0X21vZGUpKSB7CisrCS8qIElmIHRoZSBmaWxlIGlzIHdvcmxkIHdyaXRhYmxlIG9yIGlzIG5vdCBhCisrCSAgIG5vcm1hbCBmaWxlLCByZXR1cm4gZXJyb3IgKi8KKysJcGFtX3N5c2xvZyhwYW1oLCBMT0dfRVJSLAorKwkgICAgICAgICAgICIlcyBpcyBlaXRoZXIgd29ybGQgd3JpdGFibGUgb3Igbm90IGEgbm9ybWFsIGZpbGUiLAorKwkgICAgICAgICAgIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9BVVRIX0VSUjsKKysgICAgfQorKworKyAgICB0dHlmaWxlID0gZm9wZW4oU0VDVVJFVFRZX0ZJTEUsInIiKTsKKysgICAgaWYodHR5ZmlsZSA9PSBOVUxMKSB7IC8qIENoZWNrIHRoYXQgd2Ugb3BlbmVkIGl0IHN1Y2Nlc3NmdWxseSAqLworKwlwYW1fc3lzbG9nKHBhbWgsIExPR19FUlIsICJFcnJvciBvcGVuaW5nICVzOiAlbSIsIFNFQ1VSRVRUWV9GSUxFKTsKKysJcmV0dXJuIFBBTV9TRVJWSUNFX0VSUjsKKysgICAgfQorKworKyAgICBpZiAoaXNkaWdpdCh1dHR5bmFtZVswXSkpIHsKKysJc25wcmludGYocHRuYW1lLCBzaXplb2YocHRuYW1lKSwgInB0cy8lcyIsIHV0dHluYW1lKTsKKysgICAgfSBlbHNlIHsKKysJcHRuYW1lWzBdID0gJ1wwJzsKKysgICAgfQorKworKyAgICByZXR2YWwgPSAxOworKworKyAgICB3aGlsZSAoKGZnZXRzKHR0eWZpbGVsaW5lLHNpemVvZih0dHlmaWxlbGluZSktMSwgdHR5ZmlsZSkgIT0gTlVMTCkgCisrCSAgICYmIHJldHZhbCkgeworKwlpZih0dHlmaWxlbGluZVtzdHJsZW4odHR5ZmlsZWxpbmUpIC0gMV0gPT0gJ1xuJykKKysJICAgIHR0eWZpbGVsaW5lW3N0cmxlbih0dHlmaWxlbGluZSkgLSAxXSA9ICdcMCc7CisrCXJldHZhbCA9ICggc3RyY21wKHR0eWZpbGVsaW5lLHV0dHluYW1lKQorKwkgICAgICAgICAgICYmICghcHRuYW1lWzBdIHx8IHN0cmNtcChwdG5hbWUsIHV0dHluYW1lKSkgKTsKKysgICAgfQorKyAgICBmY2xvc2UodHR5ZmlsZSk7CisrCisrICAgIGlmKHJldHZhbCkgeworKwlyZXR2YWwgPSBQQU1fQVVUSF9FUlI7CisrICAgIH0KKysKKysgICAgcmV0dXJuIHJldHZhbDsKKyt9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0tdW5peC1udWxsb2stc2VjdXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQxZTgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLXVuaXgtbnVsbG9rLXNlY3VyZS5wYXRjaApAQCAtMCwwICsxLDI0MCBAQAorRnJvbSA5YmRjMTk3NDc0Nzk1ZjJkMDAwYzJiYzA0ZjU4ZjdjZWY4ODk4ZjIxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW1hcm5hdGggVmFsbHVyaSA8YW1hcm5hdGgudmFsbHVyaUBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDE1IEp1bCAyMDE1IDEzOjA3OjIwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIERlYmlhbiBwYXRjaCB0byBhZGQgYSBuZXcgJ251bGxva19zZWN1cmUnIG9wdGlvbiB0byBwYW1fdW5peCwKKyB3aGljaCBhY2NlcHRzIHVzZXJzIHdpdGggbnVsbCBwYXNzd29yZHMgb25seSB3aGVuIHRoZSBhcHBsaWNhbnQgaXMgY29ubmVjdGVkCisgZnJvbSBhIHR0eSBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkuCisKK0F1dGhvcnM6IFNhbSBIYXJ0bWFuIDxoYXJ0bWFuc0BkZWJpYW4ub3JnPiwKKyAgICAgICAgIFN0ZXZlIExhbmdhc2VrIDx2b3Jsb25AZGViaWFuLm9yZz4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pbmcgTGl1IDxtaW5nLmxpdUB3aW5kcml2ZXIuY29tPgorCit2MjoKKwktIEZvcndhcmQgcG9ydGVkIGZyb20gdjEuMS42IHRvIHYxLjIuMQorCitTaWduZWQtb2ZmLWJ5OiBBbWFybmF0aCBWYWxsdXJpIDxhbWFybmF0aC52YWxsdXJpQGludGVsLmNvbT4KKy0tLQorIG1vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0gICAgfCAgMyArKy0KKyBtb2R1bGVzL3BhbV91bml4L1JFQURNRSAgICAgICAgIHwgMTEgKysrKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggICAgIHwgIDkgKysrKysrKystCisgbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbCB8IDE5ICsrKysrKysrKysrKysrKysrKy0KKyBtb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYyAgICAgIHwgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQorIG1vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oICAgICAgfCAgOCArKysrKystLQorIDYgZmlsZXMgY2hhbmdlZCwgNzkgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L01ha2VmaWxlLmFtIGIvbW9kdWxlcy9wYW1fdW5peC9NYWtlZmlsZS5hbQoraW5kZXggNTZlZDU5MS4uOWEzNzJhYyAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvTWFrZWZpbGUuYW0KK0BAIC0zMCw3ICszMCw4IEBAIGlmIEhBVkVfVkVSU0lPTklORworICAgcGFtX3VuaXhfbGFfTERGTEFHUyArPSAtV2wsLS12ZXJzaW9uLXNjcmlwdD0kKHNyY2RpcikvLi4vbW9kdWxlcy5tYXAKKyBlbmRpZgorIHBhbV91bml4X2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJwYW0vbGlicGFtLmxhIFwKKy0JQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykKKysJQExJQkNSWVBUQCBATElCU0VMSU5VWEAgJChOSVNfTElCUykgXAorKwkuLi9wYW1fc2VjdXJldHR5L3R0eV9zZWN1cmUubG8KKyAKKyBzZWN1cmVsaWJfTFRMSUJSQVJJRVMgPSBwYW1fdW5peC5sYQorIAorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvUkVBRE1FIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKK2luZGV4IDM5MzVkYmEuLjc4ODBkOTEgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L1JFQURNRQorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9SRUFETUUKK0BAIC02Nyw3ICs2NywxNiBAQCBudWxsb2sKKyAKKyAgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKKyAgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxvayBhcmd1bWVudCBvdmVycmlkZXMKKy0gICAgdGhpcyBkZWZhdWx0LgorKyAgICB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZQorKyAgICBzZXJ2aWNlLgorKworK251bGxva19zZWN1cmUKKysKKysgICAgVGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoaXMgbW9kdWxlIGlzIHRvIG5vdCBwZXJtaXQgdGhlIHVzZXIgYWNjZXNzIHRvIGEKKysgICAgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4gVGhlIG51bGxva19zZWN1cmUgYXJndW1lbnQKKysgICAgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKKysgICAgdGhlIHNlcnZpY2UgYXMgbG9uZyBhcyB0aGUgdmFsdWUgb2YgUEFNX1RUWSBpcyBzZXQgdG8gb25lIG9mIHRoZSB2YWx1ZXMKKysgICAgZm91bmQgaW4gL2V0Yy9zZWN1cmV0dHkuCisgCisgdHJ5X2ZpcnN0X3Bhc3MKKyAKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjggYi9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKK2luZGV4IDMzOTE3OGIuLmE0YmQ5MDYgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOAorQEAgLTkyLDcgKzkyLDE0IEBAIFR1cm5zIG9mZiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIG5hbWVseSBtZXNzYWdlcyBhYm91dCBzZXNzaW9uIG9wZW4gYW5kIGNsb3NlIHZpCisgLlJTIDQKKyBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdG8gbm90IHBlcm1pdCB0aGUgdXNlciBhY2Nlc3MgdG8gYSBzZXJ2aWNlIGlmIHRoZWlyIG9mZmljaWFsIHBhc3N3b3JkIGlzIGJsYW5rXCYuIFRoZQorIFxmQm51bGxva1xmUgorLWFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHRcJi4KKythcmd1bWVudCBvdmVycmlkZXMgdGhpcyBkZWZhdWx0IGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUgc2VydmljZVwmLgorKy5SRQorKy5QUAorK1xmQm51bGxva19zZWN1cmVcZlIKKysuUlMgNAorK1RoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZSB1c2VyIGFjY2VzcyB0byBhIHNlcnZpY2UgaWYgdGhlaXIgb2ZmaWNpYWwgcGFzc3dvcmQgaXMgYmxhbmtcJi4gVGhlCisrXGZCbnVsbG9rX3NlY3VyZVxmUgorK2FyZ3VtZW50IG92ZXJyaWRlcyB0aGlzIGRlZmF1bHQgYW5kIGFsbG93cyBhbnkgdXNlciB3aXRoIGEgYmxhbmsgcGFzc3dvcmQgdG8gYWNjZXNzIHRoZSBzZXJ2aWNlIGFzIGxvbmcgYXMgdGhlIHZhbHVlIG9mIFBBTV9UVFkgaXMgc2V0IHRvIG9uZSBvZiB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5XCYuCisgLlJFCisgLlBQCisgXGZCdHJ5X2ZpcnN0X3Bhc3NcZlIKK2RpZmYgLS1naXQgYS9tb2R1bGVzL3BhbV91bml4L3BhbV91bml4LjgueG1sIGIvbW9kdWxlcy9wYW1fdW5peC9wYW1fdW5peC44LnhtbAoraW5kZXggYThiNjRiYi4uMWNlZDZmNCAxMDA2NDQKKy0tLSBhL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKKysrKyBiL21vZHVsZXMvcGFtX3VuaXgvcGFtX3VuaXguOC54bWwKK0BAIC0xNTksNyArMTU5LDI0IEBACisgICAgICAgICAgIDxwYXJhPgorICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZQorICAgICAgICAgICAgIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4KKy0gICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2s8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdC4KKysgICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2s8L29wdGlvbj4gYXJndW1lbnQgb3ZlcnJpZGVzIHRoaXMgZGVmYXVsdAorKyAgICAgICAgICAgIGFuZCBhbGxvd3MgYW55IHVzZXIgd2l0aCBhIGJsYW5rIHBhc3N3b3JkIHRvIGFjY2VzcyB0aGUKKysgICAgICAgICAgICBzZXJ2aWNlLgorKyAgICAgICAgICA8L3BhcmE+CisrICAgICAgICA8L2xpc3RpdGVtPgorKyAgICAgIDwvdmFybGlzdGVudHJ5PgorKyAgICAgIDx2YXJsaXN0ZW50cnk+CisrICAgICAgICA8dGVybT4KKysgICAgICAgICAgPG9wdGlvbj5udWxsb2tfc2VjdXJlPC9vcHRpb24+CisrICAgICAgICA8L3Rlcm0+CisrICAgICAgICA8bGlzdGl0ZW0+CisrICAgICAgICAgIDxwYXJhPgorKyAgICAgICAgICAgIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGlzIG1vZHVsZSBpcyB0byBub3QgcGVybWl0IHRoZQorKyAgICAgICAgICAgIHVzZXIgYWNjZXNzIHRvIGEgc2VydmljZSBpZiB0aGVpciBvZmZpY2lhbCBwYXNzd29yZCBpcyBibGFuay4KKysgICAgICAgICAgICBUaGUgPG9wdGlvbj5udWxsb2tfc2VjdXJlPC9vcHRpb24+IGFyZ3VtZW50IG92ZXJyaWRlcyB0aGlzCisrICAgICAgICAgICAgZGVmYXVsdCBhbmQgYWxsb3dzIGFueSB1c2VyIHdpdGggYSBibGFuayBwYXNzd29yZCB0byBhY2Nlc3MKKysgICAgICAgICAgICB0aGUgc2VydmljZSBhcyBsb25nIGFzIHRoZSB2YWx1ZSBvZiBQQU1fVFRZIGlzIHNldCB0byBvbmUgb2YKKysgICAgICAgICAgICB0aGUgdmFsdWVzIGZvdW5kIGluIC9ldGMvc2VjdXJldHR5LgorICAgICAgICAgICA8L3BhcmE+CisgICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5jIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKK2luZGV4IGFiY2NkODIuLjIzNjE5NTcgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuYworKysrIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmMKK0BAIC0xODksMTMgKzE4OSwyMiBAQCBpbnQgX3NldF9jdHJsKHBhbV9oYW5kbGVfdCAqcGFtaCwgaW50IGZsYWdzLCBpbnQgKnJlbWVtYmVyLCBpbnQgKnJvdW5kcywKKyAJLyogbm93IHBhcnNlIHRoZSBhcmd1bWVudHMgdG8gdGhpcyBtb2R1bGUgKi8KKyAKKyAJZm9yICg7IGFyZ2MtLSA+IDA7ICsrYXJndikgeworKwkJaW50IHNsOworIAorIAkJRCgoInBhbV91bml4IGFyZzogJXMiLCAqYXJndikpOworIAorIAkJZm9yIChqID0gMDsgaiA8IFVOSVhfQ1RSTFNfOyArK2opIHsKKy0JCQlpZiAodW5peF9hcmdzW2pdLnRva2VuCistCQkJICAgICYmICFzdHJuY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4sIHN0cmxlbih1bml4X2FyZ3Nbal0udG9rZW4pKSkgeworLQkJCQlicmVhazsKKysJCQlpZiAodW5peF9hcmdzW2pdLnRva2VuKSB7CisrCQkJCXNsID0gc3RybGVuKHVuaXhfYXJnc1tqXS50b2tlbik7CisrCQkJCWlmICh1bml4X2FyZ3Nbal0udG9rZW5bc2wtMV0gPT0gJz0nKSB7CisrCQkJCQkvKiBleGNsdWRlIGFyZ3VtZW50IGZyb20gY29tcGFyaXNvbiAqLworKwkJCQkJaWYgKCFzdHJuY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4sIHNsKSkKKysJCQkJCQlicmVhazsKKysJCQkJfSBlbHNlIHsKKysJCQkJLyogY29tcGFyZSBmdWxsIHN0cmluZ3MgKi8KKysJCQkJCWlmICghc3RyY21wKCphcmd2LCB1bml4X2FyZ3Nbal0udG9rZW4pKQorKwkJCQkJCWJyZWFrOworKwkJCQl9CisgCQkJfQorIAkJfQorIAorQEAgLTU2Niw2ICs1NzUsNyBAQCBzdGF0aWMgaW50IF91bml4X3J1bl9oZWxwZXJfYmluYXJ5KHBhbV9oYW5kbGVfdCAqcGFtaCwgY29uc3QgY2hhciAqcGFzc3dkLAorICAgICBpZiAoY2hpbGQgPT0gMCkgeworIAlzdGF0aWMgY2hhciAqZW52cFtdID0geyBOVUxMIH07CisgCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9OworKwlpbnQgbnVsbG9rID0gb2ZmKFVOSVhfX05PTlVMTCwgY3RybCk7CisgCisgCS8qIFhYWCAtIHNob3VsZCByZWFsbHkgdGlkeSB1cCBQQU0gaGVyZSB0b28gKi8KKyAKK0BAIC01OTMsNyArNjAzLDE2IEBAIHN0YXRpYyBpbnQgX3VuaXhfcnVuX2hlbHBlcl9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLCBjb25zdCBjaGFyICpwYXNzd2QsCisgCS8qIGV4ZWMgYmluYXJ5IGhlbHBlciAqLworIAlhcmdzWzBdID0gQ0hLUFdEX0hFTFBFUjsKKyAJYXJnc1sxXSA9IHVzZXI7CistCWlmIChvZmYoVU5JWF9fTk9OVUxMLCBjdHJsKSkgewkvKiB0aGlzIG1lYW5zIHdlJ3ZlIHN1Y2NlZWRlZCAqLworKwlpZiAob24oVU5JWF9OVUxMT0tfU0VDVVJFLCBjdHJsKSkgeworKwkJY29uc3Qgdm9pZCAqdXR0eW5hbWU7CisrCQlyZXR2YWwgPSBwYW1fZ2V0X2l0ZW0ocGFtaCwgUEFNX1RUWSwgJnV0dHluYW1lKTsKKysJCWlmIChyZXR2YWwgIT0gUEFNX1NVQ0NFU1MgfHwgdXR0eW5hbWUgPT0gTlVMTAorKwkJCXx8IF9wYW1tb2R1dGlsX3R0eV9zZWN1cmUocGFtaCwgKGNvbnN0IGNoYXIgKil1dHR5bmFtZSkgIT0gUEFNX1NVQ0NFU1MpIHsKKysJCQludWxsb2sgPSAwOworKwkJfQorKwl9CisrCisrCWlmIChudWxsb2spIHsKKyAJICBhcmdzWzJdPSJudWxsb2siOworIAl9IGVsc2UgeworIAkgIGFyZ3NbMl09Im5vbnVsbCI7CitAQCAtNjc4LDYgKzY5NywxNyBAQCBfdW5peF9ibGFua3Bhc3N3ZCAocGFtX2hhbmRsZV90ICpwYW1oLCB1bnNpZ25lZCBpbnQgY3RybCwgY29uc3QgY2hhciAqbmFtZSkKKyAJaWYgKG9uKFVOSVhfX05PTlVMTCwgY3RybCkpCisgCQlyZXR1cm4gMDsJLyogd2lsbCBmYWlsIGJ1dCBkb24ndCBsZXQgb24geWV0ICovCisgCisrCWlmIChvbihVTklYX05VTExPS19TRUNVUkUsIGN0cmwpKSB7CisrCQlpbnQgcmV0dmFsMjsKKysJCWNvbnN0IHZvaWQgKnV0dHluYW1lOworKwkJcmV0dmFsMiA9IHBhbV9nZXRfaXRlbShwYW1oLCBQQU1fVFRZLCAmdXR0eW5hbWUpOworKwkJaWYgKHJldHZhbDIgIT0gUEFNX1NVQ0NFU1MgfHwgdXR0eW5hbWUgPT0gTlVMTCkKKysJCQlyZXR1cm4gMDsKKysKKysJCWlmIChfcGFtbW9kdXRpbF90dHlfc2VjdXJlKHBhbWgsIChjb25zdCBjaGFyICopdXR0eW5hbWUpICE9IFBBTV9TVUNDRVNTKQorKwkJCXJldHVybiAwOworKwl9CisrCisgCS8qIFVOSVggcGFzc3dvcmRzIGFyZWEgKi8KKyAKKyAJcmV0dmFsID0gZ2V0X3B3ZF9oYXNoKHBhbWgsIG5hbWUsICZwd2QsICZzYWx0KTsKK0BAIC03NjQsNyArNzk0LDcgQEAgaW50IF91bml4X3ZlcmlmeV9wYXNzd29yZChwYW1faGFuZGxlX3QgKiBwYW1oLCBjb25zdCBjaGFyICpuYW1lCisgCQkJfQorIAkJfQorIAl9IGVsc2UgeworLQkJcmV0dmFsID0gdmVyaWZ5X3B3ZF9oYXNoKHAsIHNhbHQsIG9mZihVTklYX19OT05VTEwsIGN0cmwpKTsKKysJCXJldHZhbCA9IHZlcmlmeV9wd2RfaGFzaChwLCBzYWx0LCBfdW5peF9ibGFua3Bhc3N3ZChwYW1oLCBjdHJsLCBuYW1lKSk7CisgCX0KKyAKKyAJaWYgKHJldHZhbCA9PSBQQU1fU1VDQ0VTUykgeworZGlmZiAtLWdpdCBhL21vZHVsZXMvcGFtX3VuaXgvc3VwcG9ydC5oIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKK2luZGV4IDM3MjljZTAuLjQzY2RiZWEgMTAwNjQ0CistLS0gYS9tb2R1bGVzL3BhbV91bml4L3N1cHBvcnQuaAorKysrIGIvbW9kdWxlcy9wYW1fdW5peC9zdXBwb3J0LmgKK0BAIC05OSw4ICs5OSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKKyAjZGVmaW5lIFVOSVhfTUlOX1BBU1NfTEVOICAgICAgICAyNwkvKiBtaW4gbGVuZ3RoIGZvciBwYXNzd29yZCAqLworICNkZWZpbmUgVU5JWF9RVUlFVAkJIDI4CS8qIERvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKi8KKyAjZGVmaW5lIFVOSVhfREVTICAgICAgICAgICAgICAgICAyOSAgICAgLyogREVTLCBkZWZhdWx0ICovCisrI2RlZmluZSBVTklYX05VTExPS19TRUNVUkUgICAgICAgMzAgICAgIC8qIE5VTEwgcGFzc3dvcmRzIGFsbG93ZWQgb25seSBvbiBzZWN1cmUgdHR5cyAqLworIC8qIC0tLS0tLS0tLS0tLS0tICovCistI2RlZmluZSBVTklYX0NUUkxTXyAgICAgICAgICAgICAgMzAJLyogbnVtYmVyIG9mIGN0cmwgYXJndW1lbnRzIGRlZmluZWQgKi8KKysjZGVmaW5lIFVOSVhfQ1RSTFNfICAgICAgICAgICAgICAzMQkvKiBudW1iZXIgb2YgY3RybCBhcmd1bWVudHMgZGVmaW5lZCAqLworIAorICNkZWZpbmUgVU5JWF9ERVNfQ1JZUFQoY3RybCkJKG9mZihVTklYX01ENV9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CSUdDUllQVCxjdHJsKSYmb2ZmKFVOSVhfU0hBMjU2X1BBU1MsY3RybCkmJm9mZihVTklYX1NIQTUxMl9QQVNTLGN0cmwpJiZvZmYoVU5JWF9CTE9XRklTSF9QQVNTLGN0cmwpKQorIAorQEAgLTExOCw3ICsxMTksNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX05PVF9TRVRfUEFTUyAqLyAgICB7Im5vdF9zZXRfcGFzcyIsICAgIF9BTExfT05fLCAgICAgICAgICAgICAgICAwMTAwLCAwfSwKKyAvKiBVTklYX19QUkVMSU0gKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwMjAwLCAwfSwKKyAvKiBVTklYX19VUERBVEUgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwNjAwKSwgICAgICAgICAwNDAwLCAwfSwKKy0vKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fLCAgICAgICAgICAgICAgIDAxMDAwLCAwfSwKKysvKiBVTklYX19OT05VTEwgKi8gICAgICAgICB7TlVMTCwgICAgICAgICAgICAgIF9BTExfT05fXigwMjAwMDAwMDAwMCksICAgMDEwMDAsIDB9LAorIC8qIFVOSVhfX1FVSUVUICovICAgICAgICAgIHtOVUxMLCAgICAgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDIwMDAsIDB9LAorIC8qIFVOSVhfVVNFX0FVVEhUT0sgKi8gICAgIHsidXNlX2F1dGh0b2siLCAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAgMDQwMDAsIDB9LAorIC8qIFVOSVhfU0hBRE9XICovICAgICAgICAgIHsic2hhZG93IiwgICAgICAgICAgX0FMTF9PTl8sICAgICAgICAgICAgICAwMTAwMDAsIDB9LAorQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgY29uc3QgVU5JWF9DdHJscyB1bml4X2FyZ3NbVU5JWF9DVFJMU19dID0KKyAvKiBVTklYX01JTl9QQVNTX0xFTiAqLyAgICB7Im1pbmxlbj0iLAkJX0FMTF9PTl8sICAgICAgICAgMDQwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9RVUlFVCAqLyAgICAgICAgICAgeyJxdWlldCIsICAgICAgICAgICBfQUxMX09OXywgICAgICAgICAwMTAwMDAwMDAwMCwgMH0sCisgLyogVU5JWF9ERVMgKi8gICAgICAgICAgICAgeyJkZXMiLCAgICAgICAgICAgICBfQUxMX09OX14oMDI2MDQyMDAwMCksICAgICAgMCwgMX0sCisrLyogVU5JWF9OVUxMT0tfU0VDVVJFICovICAgeyJudWxsb2tfc2VjdXJlIiwgICBfQUxMX09OX14oMDEwMDApLCAgMDIwMDAwMDAwMDAsIDB9LAorIH07CisgCisgI2RlZmluZSBVTklYX0RFRkFVTFRTICAodW5peF9hcmdzW1VOSVhfX05PTlVMTF0uZmxhZykKK0BAIC0xNzEsNiArMTczLDggQEAgZXh0ZXJuIGludCBfdW5peF9yZWFkX3Bhc3N3b3JkKHBhbV9oYW5kbGVfdCAqIHBhbWgKKyAJCQksY29uc3QgY2hhciAqcHJvbXB0MgorIAkJCSxjb25zdCBjaGFyICpkYXRhX25hbWUKKyAJCQksY29uc3Qgdm9pZCAqKnBhc3MpOworK2V4dGVybiBpbnQgX3BhbW1vZHV0aWxfdHR5X3NlY3VyZShjb25zdCBwYW1faGFuZGxlX3QgKnBhbWgsCisrICAgICAgICAgY29uc3QgY2hhciAqdXR0eW5hbWUpOworIAorIGV4dGVybiBpbnQgX3VuaXhfcnVuX3ZlcmlmeV9iaW5hcnkocGFtX2hhbmRsZV90ICpwYW1oLAorIAkJCXVuc2lnbmVkIGludCBjdHJsLCBjb25zdCBjaGFyICp1c2VyLCBpbnQgKmRheXNsZWZ0KTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYWNjb3VudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTZiMTczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWFjY291bnQKQEAgLTAsMCArMSwyNSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1hY2NvdW50IC0gYXV0aG9yaXphdGlvbiBzZXR0aW5ncyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiB0aGUgYXV0aG9yaXphdGlvbiBtb2R1bGVzIHRoYXQgZGVmaW5lCisjIHRoZSBjZW50cmFsIGFjY2VzcyBwb2xpY3kgZm9yIHVzZSBvbiB0aGUgc3lzdGVtLiAgVGhlIGRlZmF1bHQgaXMgdG8KKyMgb25seSBkZW55IHNlcnZpY2UgdG8gdXNlcnMgd2hvc2UgYWNjb3VudHMgYXJlIGV4cGlyZWQgaW4gL2V0Yy9zaGFkb3cuCisjCisjIEFzIG9mIHBhbSAxLjAuMS02LCB0aGlzIGZpbGUgaXMgbWFuYWdlZCBieSBwYW0tYXV0aC11cGRhdGUgYnkgZGVmYXVsdC4KKyMgVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29uZmlndXJlIGFueQorIyBsb2NhbCBtb2R1bGVzIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGRlZmF1bHQgYmxvY2ssIGFuZCB1c2UKKyMgcGFtLWF1dGgtdXBkYXRlIHRvIG1hbmFnZSBzZWxlY3Rpb24gb2Ygb3RoZXIgbW9kdWxlcy4gIFNlZQorIyBwYW0tYXV0aC11cGRhdGUoOCkgZm9yIGRldGFpbHMuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCithY2NvdW50CVtzdWNjZXNzPTEgbmV3X2F1dGh0b2tfcmVxZD1kb25lIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyAKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK2FjY291bnQJcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCithY2NvdW50CXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorIyBlbmQgb2YgcGFtLWF1dGgtdXBkYXRlIGNvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tYXV0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBiNjlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLWF1dGgKQEAgLTAsMCArMSwxOCBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1hdXRoIC0gYXV0aGVudGljYXRpb24gc2V0dGluZ3MgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMgdGhhdCBkZWZpbmUKKyMgdGhlIGNlbnRyYWwgYXV0aGVudGljYXRpb24gc2NoZW1lIGZvciB1c2Ugb24gdGhlIHN5c3RlbQorIyAoZS5nLiwgL2V0Yy9zaGFkb3csIExEQVAsIEtlcmJlcm9zLCBldGMuKS4gIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUKKyMgdHJhZGl0aW9uYWwgVW5peCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zLgorCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorYXV0aAlbc3VjY2Vzcz0xIGRlZmF1bHQ9aWdub3JlXQlwYW1fdW5peC5zbyBudWxsb2tfc2VjdXJlCisjIGhlcmUncyB0aGUgZmFsbGJhY2sgaWYgbm8gbW9kdWxlIHN1Y2NlZWRzCithdXRoCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorYXV0aAlyZXF1aXJlZAkJCXBhbV9wZXJtaXQuc28KKyMgYW5kIGhlcmUgYXJlIG1vcmUgcGVyLXBhY2thZ2UgbW9kdWxlcyAodGhlICJBZGRpdGlvbmFsIiBibG9jaykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1wYXNzd29yZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODk2MDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXBhc3N3b3JkCkBAIC0wLDAgKzEsMjYgQEAKKyMKKyMgL2V0Yy9wYW0uZC9jb21tb24tcGFzc3dvcmQgLSBwYXNzd29yZC1yZWxhdGVkIG1vZHVsZXMgY29tbW9uIHRvIGFsbCBzZXJ2aWNlcworIworIyBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgZnJvbSBvdGhlciBzZXJ2aWNlLXNwZWNpZmljIFBBTSBjb25maWcgZmlsZXMsCisjIGFuZCBzaG91bGQgY29udGFpbiBhIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IGRlZmluZSB0aGUgc2VydmljZXMgdG8gYmUKKyMgdXNlZCB0byBjaGFuZ2UgdXNlciBwYXNzd29yZHMuICBUaGUgZGVmYXVsdCBpcyBwYW1fdW5peC4KKworIyBFeHBsYW5hdGlvbiBvZiBwYW1fdW5peCBvcHRpb25zOgorIworIyBUaGUgInNoYTUxMiIgb3B0aW9uIGVuYWJsZXMgc2FsdGVkIFNIQTUxMiBwYXNzd29yZHMuICBXaXRob3V0IHRoaXMgb3B0aW9uLAorIyB0aGUgZGVmYXVsdCBpcyBVbml4IGNyeXB0LiAgUHJpb3IgcmVsZWFzZXMgdXNlZCB0aGUgb3B0aW9uICJtZDUiLgorIworIyBUaGUgIm9ic2N1cmUiIG9wdGlvbiByZXBsYWNlcyB0aGUgb2xkIGBPQlNDVVJFX0NIRUNLU19FTkFCJyBvcHRpb24gaW4KKyMgbG9naW4uZGVmcy4KKyMKKyMgU2VlIHRoZSBwYW1fdW5peCBtYW5wYWdlIGZvciBvdGhlciBvcHRpb25zLgorCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorcGFzc3dvcmQJW3N1Y2Nlc3M9MSBkZWZhdWx0PWlnbm9yZV0JcGFtX3VuaXguc28gb2JzY3VyZSBzaGE1MTIKKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Bhc3N3b3JkCXJlcXVpc2l0ZQkJCXBhbV9kZW55LnNvCisjIHByaW1lIHRoZSBzdGFjayB3aXRoIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGlmIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5OworIyB0aGlzIGF2b2lkcyB1cyByZXR1cm5pbmcgYW4gZXJyb3IganVzdCBiZWNhdXNlIG5vdGhpbmcgc2V0cyBhIHN1Y2Nlc3MgY29kZQorIyBzaW5jZSB0aGUgbW9kdWxlcyBhYm92ZSB3aWxsIGVhY2gganVzdCBqdW1wIGFyb3VuZAorcGFzc3dvcmQJcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYW0vbGlicGFtL3BhbS5kL2NvbW1vbi1zZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTU1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbgpAQCAtMCwwICsxLDE5IEBACisjCisjIC9ldGMvcGFtLmQvY29tbW9uLXNlc3Npb24gLSBzZXNzaW9uLXJlbGF0ZWQgbW9kdWxlcyBjb21tb24gdG8gYWxsIHNlcnZpY2VzCisjCisjIFRoaXMgZmlsZSBpcyBpbmNsdWRlZCBmcm9tIG90aGVyIHNlcnZpY2Utc3BlY2lmaWMgUEFNIGNvbmZpZyBmaWxlcywKKyMgYW5kIHNob3VsZCBjb250YWluIGEgbGlzdCBvZiBtb2R1bGVzIHRoYXQgZGVmaW5lIHRhc2tzIHRvIGJlIHBlcmZvcm1lZAorIyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBzZXNzaW9ucyBvZiAqYW55KiBraW5kIChib3RoIGludGVyYWN0aXZlIGFuZAorIyBub24taW50ZXJhY3RpdmUpLgorIworCisjIGhlcmUgYXJlIHRoZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIlByaW1hcnkiIGJsb2NrKQorc2Vzc2lvbglbZGVmYXVsdD0xXQkJCXBhbV9wZXJtaXQuc28KKyMgaGVyZSdzIHRoZSBmYWxsYmFjayBpZiBubyBtb2R1bGUgc3VjY2VlZHMKK3Nlc3Npb24JcmVxdWlzaXRlCQkJcGFtX2Rlbnkuc28KKyMgcHJpbWUgdGhlIHN0YWNrIHdpdGggYSBwb3NpdGl2ZSByZXR1cm4gdmFsdWUgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHk7CisjIHRoaXMgYXZvaWRzIHVzIHJldHVybmluZyBhbiBlcnJvciBqdXN0IGJlY2F1c2Ugbm90aGluZyBzZXRzIGEgc3VjY2VzcyBjb2RlCisjIHNpbmNlIHRoZSBtb2R1bGVzIGFib3ZlIHdpbGwgZWFjaCBqdXN0IGp1bXAgYXJvdW5kCitzZXNzaW9uCXJlcXVpcmVkCQkJcGFtX3Blcm1pdC5zbworIyBhbmQgaGVyZSBhcmUgbW9yZSBwZXItcGFja2FnZSBtb2R1bGVzICh0aGUgIkFkZGl0aW9uYWwiIGJsb2NrKQorc2Vzc2lvbglyZXF1aXJlZAlwYW1fdW5peC5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9jb21tb24tc2Vzc2lvbi1ub25pbnRlcmFjdGl2ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTEwYmIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUKQEAgLTAsMCArMSwxOSBAQAorIworIyAvZXRjL3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIC0gc2Vzc2lvbi1yZWxhdGVkIG1vZHVsZXMKKyMgY29tbW9uIHRvIGFsbCBub24taW50ZXJhY3RpdmUgc2VydmljZXMKKyMKKyMgVGhpcyBmaWxlIGlzIGluY2x1ZGVkIGZyb20gb3RoZXIgc2VydmljZS1zcGVjaWZpYyBQQU0gY29uZmlnIGZpbGVzLAorIyBhbmQgc2hvdWxkIGNvbnRhaW4gYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBkZWZpbmUgdGFza3MgdG8gYmUgcGVyZm9ybWVkCisjIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGFsbCBub24taW50ZXJhY3RpdmUgc2Vzc2lvbnMuCisjCisKKyMgaGVyZSBhcmUgdGhlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiUHJpbWFyeSIgYmxvY2spCitzZXNzaW9uCVtkZWZhdWx0PTFdCQkJcGFtX3Blcm1pdC5zbworIyBoZXJlJ3MgdGhlIGZhbGxiYWNrIGlmIG5vIG1vZHVsZSBzdWNjZWVkcworc2Vzc2lvbglyZXF1aXNpdGUJCQlwYW1fZGVueS5zbworIyBwcmltZSB0aGUgc3RhY2sgd2l0aCBhIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBpZiB0aGVyZSBpc24ndCBvbmUgYWxyZWFkeTsKKyMgdGhpcyBhdm9pZHMgdXMgcmV0dXJuaW5nIGFuIGVycm9yIGp1c3QgYmVjYXVzZSBub3RoaW5nIHNldHMgYSBzdWNjZXNzIGNvZGUKKyMgc2luY2UgdGhlIG1vZHVsZXMgYWJvdmUgd2lsbCBlYWNoIGp1c3QganVtcCBhcm91bmQKK3Nlc3Npb24JcmVxdWlyZWQJCQlwYW1fcGVybWl0LnNvCisjIGFuZCBoZXJlIGFyZSBtb3JlIHBlci1wYWNrYWdlIG1vZHVsZXMgKHRoZSAiQWRkaXRpb25hbCIgYmxvY2spCitzZXNzaW9uCXJlcXVpcmVkCXBhbV91bml4LnNvIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbS9wYW0uZC9vdGhlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzk3MGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW0vcGFtLmQvb3RoZXIKQEAgLTAsMCArMSwyNCBAQAorIworIyAvZXRjL3BhbS5kL290aGVyIC0gc3BlY2lmeSB0aGUgUEFNIGZhbGxiYWNrIGJlaGF2aW91cgorIworIyBOb3RlIHRoYXQgdGhpcyBmaWxlIGlzIHVzZWQgZm9yIGFueSB1bnNwZWNpZmllZCBzZXJ2aWNlOyBmb3IgZXhhbXBsZQorI2lmIC9ldGMvcGFtLmQvY3JvbiAgc3BlY2lmaWVzIG5vIHNlc3Npb24gbW9kdWxlcyBidXQgY3JvbiBjYWxscworI3BhbV9vcGVuX3Nlc3Npb24sIHRoZSBzZXNzaW9uIG1vZHVsZSBvdXQgb2YgL2V0Yy9wYW0uZC9vdGhlciBpcworI3VzZWQuICAKKworIyBXZSB1c2UgcGFtX3dhcm4uc28gdG8gZ2VuZXJhdGUgc3lzbG9nIG5vdGVzIHRoYXQgdGhlICdvdGhlcicKKyNmYWxsYmFjayBydWxlcyBhcmUgYmVpbmcgdXNlZCAoYXMgYSBoaW50IHRvIHN1Z2dlc3QgeW91IHNob3VsZCBzZXR1cAorI3NwZWNpZmljIFBBTSBydWxlcyBmb3IgdGhlIHNlcnZpY2UgYW5kIGFpZCB0byBkZWJ1Z2dpbmcpLiBUaGVuIHRvIGJlCisjc2VjdXJlLCBkZW55IGFjY2VzcyB0byBhbGwgc2VydmljZXMgYnkgZGVmYXVsdC4gCisKK2F1dGggICAgICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCithdXRoICAgICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbworCithY2NvdW50ICAgIHJlcXVpcmVkICAgICBwYW1fd2Fybi5zbworYWNjb3VudCAgICByZXF1aXJlZCAgICAgcGFtX2Rlbnkuc28KKworcGFzc3dvcmQgICByZXF1aXJlZCAgICAgcGFtX3dhcm4uc28KK3Bhc3N3b3JkICAgcmVxdWlyZWQgICAgIHBhbV9kZW55LnNvCisKK3Nlc3Npb24gICAgcmVxdWlyZWQgICAgIHBhbV93YXJuLnNvCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fZGVueS5zbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFtL2xpYnBhbV8xLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzMwOTdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhbS9saWJwYW1fMS4yLjEuYmIKQEAgLTAsMCArMSwxNjkgQEAKK1NVTU1BUlkgPSAiTGludXgtUEFNIChQbHVnZ2FibGUgQXV0aGVudGljYXRpb24gTW9kdWxlcykiCitERVNDUklQVElPTiA9ICJMaW51eC1QQU0gKFBsdWdnYWJsZSBBdXRoZW50aWNhdGlvbiBNb2R1bGVzIGZvciBMaW51eCksIGEgZmxleGlibGUgbWVjaGFuaXNtIGZvciBhdXRoZW50aWNhdGluZyB1c2VycyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZmVkb3JhaG9zdGVkLm9yZy9saW51eC1wYW0vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGludXgtcGFtL25ld3RpY2tldCIKK1NFQ1RJT04gPSAiYmFzZSIKKyMgUEFNIGlzIGR1YWwgbGljZW5zZWQgdW5kZXIgR1BMIGFuZCBCU0QuCisjIC9ldGMvcGFtLmQgY29tZXMgZnJvbSBEZWJpYW4gbGlicGFtLXJ1bnRpbWUgaW4gMjAwOS0xMSAoYXQgdGhhdCB0aW1lCisjIGxpYnBhbS1ydW50aW1lLTEuMC4xIGlzIEdQTHYyKyksIGJ5IG9wZW5lbWJlZGRlZAorTElDRU5TRSA9ICJHUEx2MisgfCBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZWI1YzFiZjg1NGU4ODgxMDA1ZDY3MzU5OWVlNzRkMyIKKworU1JDX1VSSSA9ICJodHRwOi8vbGludXgtcGFtLm9yZy9saWJyYXJ5L0xpbnV4LVBBTS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzk5X3BhbSBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYWNjb3VudCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tYXV0aCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jb21tb24tcGFzc3dvcmQgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24gXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvY29tbW9uLXNlc3Npb24tbm9uaW50ZXJhY3RpdmUgXAorICAgICAgICAgICBmaWxlOi8vcGFtLmQvb3RoZXIgXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXhzZXBidWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYW0tc2VjdXJpdHktYWJzdHJhY3Qtc2VjdXJldHR5LWhhbmRsaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhbS11bml4LW51bGxvay1zZWN1cmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlicGFtLXh0ZXN0cy1yZW1vdmUtYmFzaC1kZXBlbmRlbmN5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyeXB0X2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWRjNTMwNjc1NTZkMmRkNTY3ODA4ZmQ1MDk1MTlkZDYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzQyYjEyMTFjMGQzYjIwM2E3ZGYyNTQwYTViMDNhNDI4YTA4N2JkOGE0OGMxN2U0OWFlMjY4Zjk5MmIzMzRkOSIKKworU1JDX1VSSV9hcHBlbmRfbGliYy11Y2xpYmMgPSAiIGZpbGU6Ly9wYW0tbm8taW5uZXRnci5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL3BhbS1uby1pbm5ldGdyLnBhdGNoIgorCitERVBFTkRTID0gImJpc29uIGZsZXggZmxleC1uYXRpdmUgY3JhY2tsaWIiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZGItdW5pcXVlbmFtZT1fcGFtIFwKKyAgICAgICAgICAgICAgICAtLWluY2x1ZGVkaXI9JHtpbmNsdWRlZGlyfS9zZWN1cml0eSBcCisgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtiYXNlX2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1uaXMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1yZWdlbmVyYXRlLWRvY3UgXAorCQktLWRpc2FibGUtcHJlbHVkZSIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLWZQSUMgIgorCitQUiA9ICJyNSIKKworUyA9ICIke1dPUktESVJ9L0xpbnV4LVBBTS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworUEFDS0FHRUNPTkZJR1thdWRpdF0gPSAiLS1lbmFibGUtYXVkaXQsLS1kaXNhYmxlLWF1ZGl0LGF1ZGl0LCIKKworUEFDS0FHRVMgKz0gIiR7UE59LXJ1bnRpbWUgJHtQTn0teHRlc3RzIgorRklMRVNfJHtQTn0gPSAiJHtiYXNlX2xpYmRpcn0vbGliKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlci8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L0xpbnV4LVBBTS94dGVzdHMvLmRlYnVnIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmFzZV9saWJkaXJ9L3NlY3VyaXR5LyoubGEgJHtiYXNlX2xpYmRpcn0vKi5sYSAke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tcnVudGltZSA9ICIke3N5c2NvbmZkaXJ9IgorRklMRVNfJHtQTn0teHRlc3RzID0gIiR7ZGF0YWRpcn0vTGludXgtUEFNL3h0ZXN0cyIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXiR7TUxQUkVGSVh9cGFtLXBsdWdpbi0uKiIKKworZGVmIGdldF9tdWx0aWxpYl9iaXQoZCk6CisgICAgYmFzZWxpYiA9IGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkgb3IgJycKKyAgICByZXR1cm4gYmFzZWxpYi5yZXBsYWNlKCdsaWInLCAnJykKKworbGlicGFtX3N1ZmZpeCA9ICJzdWZmaXgke0BnZXRfbXVsdGlsaWJfYml0KGQpfSIKKworUlBST1ZJREVTXyR7UE59ICs9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IgorUlBST1ZJREVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7UE59LXJ1bnRpbWUtJHtsaWJwYW1fc3VmZml4fSIKKworUkRFUEVORFNfJHtQTn0tcnVudGltZSA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tZGVueS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tcGVybWl0LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi13YXJuLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi11bml4LSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICIKK1JERVBFTkRTXyR7UE59LXh0ZXN0cyA9ICIke1BOfS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tYWNjZXNzLSR7bGlicGFtX3N1ZmZpeH0gXAorICAgICR7TUxQUkVGSVh9cGFtLXBsdWdpbi1kZWJ1Zy0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tY3JhY2tsaWItJHtsaWJwYW1fc3VmZml4fSBcCisgICAgJHtNTFBSRUZJWH1wYW0tcGx1Z2luLXB3aGlzdG9yeS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tc3VjY2VlZC1pZi0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICAke01MUFJFRklYfXBhbS1wbHVnaW4tdGltZS0ke2xpYnBhbV9zdWZmaXh9IFwKKyAgICBjb3JldXRpbHMiCisKKyMgRklYTUU6IE5hdGl2ZSBzdWZmaXggYnJlYWtzIGhlcmUsIGRpc2FibGUgaXQgZm9yIG5vdworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtQTn0tcnVudGltZS0ke2xpYnBhbV9zdWZmaXh9IgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGRlZiBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKHBuLCBkaXIsIGZpbGUpOgorICAgICAgICBuZiA9IG9zLnBhdGguam9pbihkaXIsIGZpbGUpCisgICAgICAgIG9mID0gZC5nZXRWYXIoJ0ZJTEVTXycgKyBwbiwgVHJ1ZSkKKyAgICAgICAgaWYgb2Y6CisgICAgICAgICAgICBuZiA9IG9mICsgIiAiICsgbmYKKyAgICAgICAgZC5zZXRWYXIoJ0ZJTEVTXycgKyBwbiwgbmYpCisKKyAgICBkZWYgcGFtX3BsdWdpbl9ob29rKGZpbGUsIHBrZywgcGF0dGVybiwgZm9ybWF0LCBiYXNlbmFtZSk6CisgICAgICAgIHBuID0gZC5nZXRWYXIoJ1BOJywgVHJ1ZSkKKyAgICAgICAgbGlicGFtX3N1ZmZpeCA9IGQuZ2V0VmFyKCdsaWJwYW1fc3VmZml4JywgVHJ1ZSkKKworICAgICAgICByZGVwcyA9IGQuZ2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCBUcnVlKQorICAgICAgICBpZiByZGVwczoKKyAgICAgICAgICAgIHJkZXBzID0gcmRlcHMgKyAiICIgKyBwbiArICItIiArIGxpYnBhbV9zdWZmaXgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJkZXBzID0gcG4gKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSREVQRU5EU18nICsgcGtnLCByZGVwcykKKworICAgICAgICBwcm92aWRlcyA9IGQuZ2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgVHJ1ZSkKKyAgICAgICAgaWYgcHJvdmlkZXM6CisgICAgICAgICAgICBwcm92aWRlcyA9IHByb3ZpZGVzICsgIiAiICsgcGtnICsgIi0iICsgbGlicGFtX3N1ZmZpeAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvdmlkZXMgPSBwa2cgKyAiLSIgKyBsaWJwYW1fc3VmZml4CisgICAgICAgIGQuc2V0VmFyKCdSUFJPVklERVNfJyArIHBrZywgcHJvdmlkZXMpCisKKyAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgZHZhciA9IGJiLmRhdGEuZXhwYW5kKCcke1dPUktESVJ9L3BhY2thZ2UnLCBkLCBUcnVlKQorICAgIHBhbV9saWJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHknKQorICAgIHBhbV9zYmluZGlyID0gZC5leHBhbmQoJyR7c2JpbmRpcn0nKQorICAgIHBhbV9maWx0ZXJkaXIgPSBkLmV4cGFuZCgnJHtiYXNlX2xpYmRpcn0vc2VjdXJpdHkvcGFtX2ZpbHRlcicpCisgICAgcGFtX3BrZ25hbWUgPSBtbHByZWZpeCArICdwYW0tcGx1Z2luJXMnCisKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwYW1fbGliZGlyLCAnXnBhbSguKilcLnNvJCcsIHBhbV9wa2duYW1lLAorICAgICAgICAgICAgICAgICAgICAgICdQQU0gcGx1Z2luIGZvciAlcycsIGhvb2s9cGFtX3BsdWdpbl9ob29rLCBleHRyYV9kZXBlbmRzPScnKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi11bml4JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3VuaXhfY2hrcHdkJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdW5peCcgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICd1bml4X3VwZGF0ZScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5JyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90YWxseScpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLXRhbGx5MicgJSBtbHByZWZpeCwgcGFtX3NiaW5kaXIsICdwYW1fdGFsbHkyJykKKyAgICBwYW1fcGx1Z2luX2FwcGVuZF9maWxlKCclc3BhbS1wbHVnaW4tdGltZXN0YW1wJyAlIG1scHJlZml4LCBwYW1fc2JpbmRpciwgJ3BhbV90aW1lc3RhbXBfY2hlY2snKQorICAgIHBhbV9wbHVnaW5fYXBwZW5kX2ZpbGUoJyVzcGFtLXBsdWdpbi1ta2hvbWVkaXInICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAnbWtob21lZGlyX2hlbHBlcicpCisgICAgcGFtX3BsdWdpbl9hcHBlbmRfZmlsZSgnJXNwYW0tcGx1Z2luLWNvbnNvbGUnICUgbWxwcmVmaXgsIHBhbV9zYmluZGlyLCAncGFtX2NvbnNvbGVfYXBwbHknKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBhbV9maWx0ZXJkaXIsICdeKC4qKSQnLCAncGFtLWZpbHRlci0lcycsICdQQU0gZmlsdGVyIGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycpCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL3J1biB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisJcm0gLXJmICR7RH0ke2xvY2Fsc3RhdGVkaXJ9CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9Lzk5X3BhbSAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9wYW0uZC8qICR7RH0ke3N5c2NvbmZkaXJ9L3BhbS5kLworCisJIyBUaGUgbHNiIHJlcXVpcmVzIHVuaXhfY2hrcHdkIGhhcyBzZXR1aWQgcGVybWlzc2lvbgorCWNobW9kIDQ3NTUgJHtEfSR7c2JpbmRpcn0vdW5peF9jaGtwd2QKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKwkJZWNobyAic2Vzc2lvbiBvcHRpb25hbCBwYW1fc3lzdGVtZC5zbyIgPj4gJHtEfSR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24KKwlmaQorfQorCitweXRob24gZG9fcGFtX3Nhbml0eSAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgVHJ1ZSwgRmFsc2UsIGQpOgorICAgICAgICBiYi53YXJuKCJCdWlsZGluZyBsaWJwYW0gYnV0ICdwYW0nIGlzbid0IGluIERJU1RST19GRUFUVVJFUywgUEFNIHdvbid0IHdvcmsgY29ycmVjdGx5IikKK30KK2FkZHRhc2sgcGFtX3Nhbml0eSBiZWZvcmUgZG9fY29uZmlndXJlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIG5hdGl2ZSIKKworQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLXNlc3Npb24iCitDT05GRklMRVNfJHtQTn0tcnVudGltZSArPSAiJHtzeXNjb25mZGlyfS9wYW0uZC9jb21tb24tYXV0aCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1wYXNzd29yZCIKK0NPTkZGSUxFU18ke1BOfS1ydW50aW1lICs9ICIke3N5c2NvbmZkaXJ9L3BhbS5kL2NvbW1vbi1zZXNzaW9uLW5vbmludGVyYWN0aXZlIgorQ09ORkZJTEVTXyR7UE59LXJ1bnRpbWUgKz0gIiR7c3lzY29uZmRpcn0vcGFtLmQvY29tbW9uLWFjY291bnQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1JbmNsdWRlLWZjbnRsLmgtaW4tcGxhdGZvcm1fZGVmcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMzc2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtSW5jbHVkZS1mY250bC5oLWluLXBsYXRmb3JtX2RlZnMuaC5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGQ3OGRkMDg3YzRlYzQ3MTVhYWI1ZmUxMTU2NjhlNzI2MDQ2ZWNkNzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxODoxNjowNSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBJbmNsdWRlIGZjbnRsLmggaW4gL3BsYXRmb3JtX2RlZnMuaAorCitleHBvc2VkIHdoZW4gY29tcGlsaW5nIHVzaW5nIG11c2wKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaCB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvbGlicGFydGVkL2ZzL3hmcy9wbGF0Zm9ybV9kZWZzLmggYi9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAoraW5kZXggMmI1NTc1Mi4uMzJiZDNkMyAxMDA2NDQKKy0tLSBhL2xpYnBhcnRlZC9mcy94ZnMvcGxhdGZvcm1fZGVmcy5oCisrKysgYi9saWJwYXJ0ZWQvZnMveGZzL3BsYXRmb3JtX2RlZnMuaAorQEAgLTQyLDYgKzQyLDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmExYTRiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWIvZ251bGliLm1rIGIvbGliL2dudWxpYi5taworaW5kZXggZTFkNzRkYi4uYzBlOTJkZCAxMDA2NDQKKy0tLSBhL2xpYi9nbnVsaWIubWsKKysrKyBiL2xpYi9nbnVsaWIubWsKK0BAIC0xODgyLDcgKzE4ODIsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL01ha2VmaWxlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTkwYmUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDI4NSBAQAorYW1fX3R0eV9jb2xvcnNfZHVtbXkgPSBcCisgIG1nbj0gcmVkPSBncm49IGxnbj0gYmx1PSBicmc9IHN0ZD07IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPW5vCisKK2FtX190dHlfY29sb3JzID0gXAorJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKK3Rlc3QgIlgkKEFNX0NPTE9SX1RFU1RTKSIgIT0gWG5vIFwKKyYmIHRlc3QgIlgkJFRFUk0iICE9IFhkdW1iIFwKKyYmIHsgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXMgfHwgdGVzdCAtdCAxIDI+L2Rldi9udWxsOyB9IFwKKyYmIHsgXAorICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIHJlZD0nG1swOzMxbSc7IFwKKyAgZ3JuPScbWzA7MzJtJzsgXAorICBsZ249JxtbMTszMm0nOyBcCisgIGJsdT0nG1sxOzM0bSc7IFwKKyAgbWduPScbWzA7MzVtJzsgXAorICBicmc9JxtbMW0nOyBcCisgIHN0ZD0nG1ttJzsgXAorfQorCithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19yc3RfdGl0bGUgPSB7IHNlZCAncy8uKi8gICAmICAgLztoO3MvLi89L2c7cDt4O3MvICokJC8vO3A7ZycgJiYgZWNobzsgfQorYW1fX3JzdF9zZWN0aW9uID0geyBzZWQgJ3A7cy8uLz0vZzsnICYmIGVjaG87IH0KK2FtX19zaF9lX3NldHVwID0gY2FzZSAkJC0gaW4gKmUqKSBzZXQgK2U7OyBlc2FjCisKK2FtX19jb21tb25fZHJpdmVyX2ZsYWdzID0gXAorICAtLWNvbG9yLXRlc3RzICIkJGFtX19jb2xvcl90ZXN0cyIgXAorICAtLWVuYWJsZS1oYXJkLWVycm9ycyAiJCRhbV9fZW5hYmxlX2hhcmRfZXJyb3JzIiBcCisgIC0tZXhwZWN0LWZhaWx1cmUgIiQkYW1fX2V4cGVjdF9mYWlsdXJlIgorYW1fX2NoZWNrX3ByZSA9IFwKKyQoYW1fX3NoX2Vfc2V0dXApOwkJCQkJXAorJChhbV9fdnBhdGhfYWRqX3NldHVwKSAkKGFtX192cGF0aF9hZGopCQkJXAorJChhbV9fdHR5X2NvbG9ycyk7CQkJCQlcCitzcmNkaXI9JChzcmNkaXIpOyBleHBvcnQgc3JjZGlyOwkJCVwKK2FtX19vZGlyPWBlY2hvICIuLyRAIiB8IHNlZCAnc3wvW14vXSokJHx8J2A7CQlcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4LiB8fCAkKE1LRElSX1ApICIkJGFtX19vZGlyIiB8fCBleGl0ICQkPzsJXAoraWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKK2lmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCitlbHNlCQkJCQkJCVwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCitmaTsgCQkJCQkJCVwKKyQoQU1fVEVTVFNfRU5WSVJPTk1FTlQpICQoVEVTVFNfRU5WSVJPTk1FTlQpCisKK2FtX19zZXRfVEVTVFNfYmFzZXMgPSBcCisgIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCisgIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICBiYXNlcz1gZWNobyAkJGJhc2VzYAorCitSRUNIRUNLX0xPR1MgPSAkKFRFU1RfTE9HUykKK1RFU1RfU1VJVEVfTE9HID0gdGVzdC1zdWl0ZS5sb2cKK2FtX190ZXN0X2xvZ3MxID0gJChURVNUUzo9LmxvZykKK2FtX190ZXN0X2xvZ3MyID0gJChhbV9fdGVzdF9sb2dzMToubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi5zaC5sb2c9LmxvZykKK1NIX0xPR19EUklWRVIgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC90ZXN0LWRyaXZlcgorU0hfTE9HX0NPTVBJTEUgPSAkKFNIX0xPR19DT01QSUxFUikKKworYW1fX3NldF9iID0gXAorICBjYXNlICckQCcgaW4gXAorICAgICovKikgXAorICAgICAgY2FzZSAnJConIGluIFwKKyAgICAgICAgKi8qKSBiPSckKic7OyBcCisgICAgICAgICAgKikgYj1gZWNobyAnJEAnIHwgc2VkICdzL1wubG9nJCQvLydgOyBcCisgICAgICAgZXNhYzs7IFwKKyAgICAqKSBcCisgICAgICBiPSckKic7OyBcCisgIGVzYWMKKworTUtESVJfUCA9IC9iaW4vbWtkaXIgLXAKK1NIRUxMID0gL2Jpbi9iYXNoCitWRVJTSU9OID0gMy4xCitQQUNLQUdFX1NUUklORyA9IEdOVSBwYXJ0ZWQgMy4xCitQQUNLQUdFX0JVR1JFUE9SVCA9IGJ1Zy1wYXJ0ZWRAZ251Lm9yZworYWJzX3NyY2RpciA9ICQoUFdEKQorYWJzX3RvcF9idWlsZGRpciA9ICQoUFdEKS8uLgorYWJzX3RvcF9zcmNkaXIgPSAkKFBXRCkvLi4KK3NyY2RpciA9IC4KK3RvcF9zcmNkaXIgPSAuLgorc3ViZGlyID0gdGVzdHMKK1NIX0xPR19DT01QSUxFUiA9ICQoU0hFTEwpCisKK1RFU1RTID0gXAorICBoZWxwLXZlcnNpb24uc2ggXAorICB0MDAwMC1iYXNpYy5zaCBcCisgIHQwMDAxLXRpbnkuc2ggXAorICB0MDAxMC1zY3JpcHQtbm8tY3RybC1jaGFycy5zaCBcCisgIHQwMTAwLXByaW50LnNoIFwKKyAgdDAxMDEtcHJpbnQtZW1wdHkuc2ggXAorICB0MDIwMC1ncHQuc2ggXAorICB0MDIwMS1ncHQuc2ggXAorICB0MDIwMi1ncHQtcG1ici5zaCBcCisgIHQwMjAzLWdwdC10aW55LWRldmljZS1hYm9ydC5zaCBcCisgIHQwMjAzLWdwdC1zaG9ydGVuZWQtZGV2aWNlLXByaW1hcnktdmFsaWQuc2ggXAorICB0MDIwNS1ncHQtbGlzdC1jbG9iYmVycy1wbWJyLnNoIFwKKyAgdDAyMDYtZ3B0LXByaW50LXdpdGgtY29ycnVwdC1wcmltYXJ5LWNsb2JiZXJzLXBtYnIuc2ggXAorICB0MDIwNy1JRUMtYmluYXJ5LW5vdGF0aW9uLnNoIFwKKyAgdDAyMDgtbWtwYXJ0LWVuZC1pbi1JRUMuc2ggXAorICB0MDIwOS1ncHQtcG1icl9ib290LnNoIFwKKyAgdDAyMTAtZ3B0LXJlc2l6ZWQtcGFydGl0aW9uLWVudHJ5LWFycmF5LnNoIFwKKyAgdDAyMTEtZ3B0LXJld3JpdGUtaGVhZGVyLnNoIFwKKyAgdDAyMTItZ3B0LW1hbnktcGFydGl0aW9ucy5zaCBcCisgIHQwMjIwLWdwdC1tc2Z0cmVzLnNoIFwKKyAgdDAyNTAtZ3B0LnNoIFwKKyAgdDAyODAtZ3B0LWNvcnJ1cHQuc2ggXAorICB0MDMwMC1kb3Mtb24tZ3B0LnNoIFwKKyAgdDA0MDAtbG9vcC1jbG9iYmVyLWluZmxvb3Auc2ggXAorICB0MDUwMC1kdXAtY2xvYmJlci5zaCBcCisgIHQwNTAxLWR1cGxpY2F0ZS5zaCBcCisgIHQxMTAwLWJ1c3ktbGFiZWwuc2ggXAorICB0MTEwMS1idXN5LXBhcnRpdGlvbi5zaCBcCisgIHQxNzAwLXByb2JlLWZzLnNoIFwKKyAgdDIyMDAtZG9zLWxhYmVsLXJlY29nLnNoIFwKKyAgdDIyMDEtcGM5OC1sYWJlbC1yZWNvZy5zaCBcCisgIHQyMzAwLWRvcy1sYWJlbC1leHRlbmRlZC1ib290Y29kZS5zaCBcCisgIHQyMzEwLWRvcy1leHRlbmRlZC0yLXNlY3Rvci1taW4tb2Zmc2V0LnNoIFwKKyAgdDI0MDAtZG9zLWhmcy1wYXJ0aXRpb24tdHlwZS5zaCBcCisgIHQyNTAwLXByb2JlLWNvcnJ1cHQtaGZzLnNoIFwKKyAgdDMwMDAtcmVzaXplLWZzLnNoIFwKKyAgdDMyMDAtdHlwZS1jaGFuZ2Uuc2ggXAorICB0MzMwMC1wYWxvLXByZXAuc2ggXAorICB0MzMxMC1mbGFncy5zaCBcCisgIHQzNDAwLXdob2xlLWRpc2stRkFULXBhcnRpdGlvbi5zaCBcCisgIHQ0MDAwLXN1bi1yYWlkLXR5cGUuc2ggXAorICB0NDAwMS1zdW4tdnRvYy5zaCBcCisgIHQ0MTAwLW1zZG9zLXBhcnRpdGlvbi1saW1pdHMuc2ggXAorICB0NDEwMC1kdmgtcGFydGl0aW9uLWxpbWl0cy5zaCBcCisgIHQ0MTAwLW1zZG9zLXN0YXJ0aW5nLXNlY3Rvci5zaCBcCisgIHQ0MjAwLXBhcnRwcm9iZS5zaCBcCisgIHQ0MzAwLW5pbGZzMi10aW55LnNoIFwKKyAgdDUwMDAtdGFncy5zaCBcCisgIHQ2MDAwLWRtLnNoIFwKKyAgdDYwMDEtcHNlcC5zaCBcCisgIHQ2MTAwLW1kcmFpZC1wYXJ0aXRpb25zLnNoIFwKKyAgdDcwMDAtc2NyaXB0aW5nLnNoIFwKKyAgdDgwMDAtbG9vcC5zaCBcCisgIHQ4MDAxLWxvb3AtYmxrcGcuc2ggXAorICB0OTAxMC1iaWctc2VjdG9yLnNoIFwKKyAgdDkwMjAtYWxpZ25tZW50LnNoIFwKKyAgdDkwMjEtbWF4aW1hLnNoIFwKKyAgdDkwMjItb25lLXVuaXQtc25hcC5zaCBcCisgIHQ5MDIzLXZhbHVlLWx0LW9uZS5zaCBcCisgIHQ5MDMwLWFsaWduLWNoZWNrLnNoIFwKKyAgdDkwNDAtbWFueS1wYXJ0aXRpb25zLnNoIFwKKyAgdDkwNDEtdW5kZXRlY3RlZC1pbi11c2UtMTZ0aC1wYXJ0aXRpb24uc2ggXAorICB0OTA0Mi1kb3MtcGFydGl0aW9uLWxpbWl0LnNoIFwKKyAgdDkwNTAtcGFydGl0aW9uLXRhYmxlLXR5cGVzLnNoCisKK1RFU1RTX0VOVklST05NRU5UID0gXAorICBleHBvcnQJCQkJCVwKKyAgYWJzX3RvcF9idWlsZGRpcj0nJChhYnNfdG9wX2J1aWxkZGlyKScJXAorICBhYnNfdG9wX3NyY2Rpcj0nJChhYnNfdG9wX3NyY2RpciknCQlcCisgIGFic19zcmNkaXI9JyQoYWJzX3NyY2RpciknCQkJXAorICBidWlsdF9wcm9ncmFtcz1wYXJ0ZWQJCQkJXAorICBzcmNkaXI9JyQoc3JjZGlyKScJCQkJXAorICB0b3Bfc3JjZGlyPSckKHRvcF9zcmNkaXIpJwkJCVwKKyAgVkVSU0lPTj0kKFZFUlNJT04pCQkJCVwKKyAgOyA5PiYyCisKKy5TVUZGSVhFUzogLmxvZworCiskKFRFU1RfU1VJVEVfTE9HKTogJChURVNUX0xPR1MpCisJQCQoYW1fX3NoX2Vfc2V0dXApOyAkKGFtX190dHlfY29sb3JzKTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCXdzPSdbIAldJzsgXAorCXJlc3VsdHM9YGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiLnRyczsgZG9uZWA7IFwKKwl0ZXN0IC1uICIkJHJlc3VsdHMiIHx8IHJlc3VsdHM9L2Rldi9udWxsOyBcCisJYWxsPWAgIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDoiICAgICAgICAgICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlwYXNzPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqUEFTUyIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWZhaWw9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypGQUlMIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJc2tpcD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlNLSVAiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4ZmFpbD1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWEZBSUwiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhwYXNzPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYUEFTUyIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZXJyb3I9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkVSUk9SIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlpZiB0ZXN0IGBleHByICQkZmFpbCArICQkeHBhc3MgKyAkJGVycm9yYCAtZXEgMDsgdGhlbiBcCisJICBzdWNjZXNzPXRydWU7IFwKKwllbHNlIFwKKwkgIHN1Y2Nlc3M9ZmFsc2U7IFwKKwlmaTsgXAorCWJyPSc9PT09PT09PT09PT09PT09PT09JzsgYnI9JCRiciQkYnIkJGJyJCRicjsgXAorCXJlc3VsdF9jb3VudCAoKSBcCisJeyBcCisJICAgIGlmIHRlc3QgeCIkJDEiID0geCItLW1heWJlLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9eWVzOyBcCisJICAgIGVsaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbm8tY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT1ubzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICIkQDogaW52YWxpZCAncmVzdWx0X2NvdW50JyB1c2FnZSIgPiYyOyBleGl0IDQ7IFwKKwkgICAgZmk7IFwKKwkgICAgc2hpZnQ7IFwKKwkgICAgZGVzYz0kJDEgY291bnQ9JCQyOyBcCisJICAgIGlmIHRlc3QgJCRtYXliZV9jb2xvcml6ZSA9IHllcyAmJiB0ZXN0ICQkY291bnQgLWd0IDA7IHRoZW4gXAorCSAgICAgIGNvbG9yX3N0YXJ0PSQkMyBjb2xvcl9lbmQ9JCRzdGQ7IFwKKwkgICAgZWxzZSBcCisJICAgICAgY29sb3Jfc3RhcnQ9IGNvbG9yX2VuZD07IFwKKwkgICAgZmk7IFwKKwkgICAgZWNobyAiJCR7Y29sb3Jfc3RhcnR9IyAkJGRlc2MgJCRjb3VudCQke2NvbG9yX2VuZH0iOyBcCisJfTsgXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0ICgpIFwKKwl7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlRPVEFMOiIgJCRhbGwgICAiJCRicmciOyBcCisJICByZXN1bHRfY291bnQgJCQxICJQQVNTOiAiICQkcGFzcyAgIiQkZ3JuIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiU0tJUDogIiAkJHNraXAgICIkJGJsdSI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhGQUlMOiIgJCR4ZmFpbCAiJCRsZ24iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJGQUlMOiAiICQkZmFpbCAgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWFBBU1M6IiAkJHhwYXNzICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkVSUk9SOiIgJCRlcnJvciAiJCRtZ24iOyBcCisJfTsgXAorCXsJCQkJCQkJCVwKKwkgIGVjaG8gIiQoUEFDS0FHRV9TVFJJTkcpOiAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykiIHwJXAorCSAgICAkKGFtX19yc3RfdGl0bGUpOwkJCQkJCVwKKwkgIGNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbm8tY29sb3I7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBlY2hvICIuLiBjb250ZW50czo6IDpkZXB0aDogMiI7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBmb3IgaSBpbiAkJGJhc2VzOyBkbwkJCQkJCVwKKwkgICAgaWYgZ3JlcCAiXiQkd3MqOmNvcHktaW4tZ2xvYmFsLWxvZzokJHdzKm5vJCR3cyokJCIgJCRpLnRycyBcCisJICAgICAgICAgPi9kZXYvbnVsbDsgdGhlbiBjb250aW51ZTsgXAorCSAgICBmaTsgXAorCSAgICBnbG9iX3Jlcz1gc2VkIC1uIC1lICJzLyQkd3MqJCQvLyIgXAorCSAgICAgICAgICAgICAgICAgICAgIC1lICJzL14kJHdzKjpnbG9iYWwtdGVzdC1yZXN1bHQ6JCR3cyovL3AiIFwKKwkJICAgICAgICAkJGkudHJzYDsgXAorCSAgICB0ZXN0IC1uICIkJGdsb2JfcmVzIiB8fCBnbG9iX3Jlcz1SVU47IFwKKwkgICAgZWNobyAiJCRnbG9iX3JlczogJCRpIiB8ICQoYW1fX3JzdF9zZWN0aW9uKTsgXAorCSAgICBpZiB0ZXN0ICEgLXIgJCRpLmxvZzsgdGhlbiBcCisJICAgICAgZWNobyAiZmF0YWw6IG1ha2luZyAkQDogJCRpLmxvZyBpcyB1bnJlYWRhYmxlIiA+JjI7IFwKKwkgICAgICBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY2F0ICQkaS5sb2c7IGVjaG87IFwKKwkgIGRvbmU7CVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXA7CQkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGlmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbgkJCVwKKwkgICAgZWNobyAiJCR7Y29sfVBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkkJHtzdGR9IjsJXAorCSAgZmk7CQkJCQkJCQlcCisJICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCisJZmk7CQkJCQkJCQlcCisJJCRzdWNjZXNzIHx8IGV4aXQgMQorCitjaGVjay1URVNUUzoKKwlAaWYgdGVzdCAkQCAhPSByZWNoZWNrOyB0aGVuIFwKKwkgICBsaXN0PSckKFJFQ0hFQ0tfTE9HUyknOyBcCisJICAgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3Q7IFwKKwkgZmkKKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQHdzPSdbIAldJzsgXAorCWxvZ19saXN0PScnIHRyc19saXN0PScnOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJZm9yIGkgaW4gJCRiYXNlczsgZG8gXAorCSAgaWYgdGVzdCAteiAiJCRsb2dfbGlzdCI7IHRoZW4gXAorCSAgICBsb2dfbGlzdD0iJCRpLmxvZyI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2dfbGlzdD0iJCRsb2dfbGlzdCAkJGkubG9nIjsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLXogIiQkdHJzX2xpc3QiOyB0aGVuIFwKKwkgICAgdHJzX2xpc3Q9IiQkaS50cnMiOyBcCisJICBlbHNlIFwKKwkgICAgdHJzX2xpc3Q9IiQkdHJzX2xpc3QgJCRpLnRycyI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCIKKworLnNoLmxvZzoKKwlAcD0nJDwnOyBcCisJJChhbV9fc2V0X2IpOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKFNIX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAkKFNIX0xPR19DT01QSUxFKSAiJCR0c3QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1jb21waWxlLWZhaWx1cmUtd2hpbGUtZGlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGFiNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDA2MGU3NDM1NDc3NGQzNmQyYzExZWYwOGUzZTdlYTliOWI2ZTIzZmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CitEYXRlOiBUaHUsIDEzIE5vdiAyMDE0IDExOjI5OjMzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmM6IGZpeCBjb21waWxlIGZhaWx1cmUgd2hpbGUKKyAtLWRpc2FibGUtZGV2aWNlLW1hcHBlcgorCitXaGlsZSAtLWRpc2FibGUtZGV2aWNlLW1hcHBlciwgdGhlIE1BQ1JPIEVOQUJMRV9ERVZJQ0VfTUFQUEVSIGlzCit1bmRlZiwgYnV0IGl0IG1pc3NlZCB0byBzY29wZSBzb21lIGRldmljZSBtYXBwZXIgZnVuY3Rpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicGFydGVkL2FyY2gvbGludXguYyB8IDggKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGlicGFydGVkL2FyY2gvbGludXguYyBiL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKK2luZGV4IDZmZDczYzUuLjJhZmE0NzkgMTAwNjQ0CistLS0gYS9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCisrKysgYi9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCitAQCAtMjMyMCw2ICsyMzIwLDcgQEAgemFzcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyBzdGF0aWMgY2hhciAqCisgZG1fY2Fub25pY2FsX3BhdGggKFBlZERldmljZSBjb25zdCAqZGV2KQorIHsKKysjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgIExpbnV4U3BlY2lmaWMgY29uc3QgKmFyY2hfc3BlY2lmaWMgPSBMSU5VWF9TUEVDSUZJQyAoZGV2KTsKKyAKKyAgICAgICAgIC8qIEdldCBtYXAgbmFtZSBmcm9tIGRldmljZW1hcHBlciAqLworQEAgLTIzMzcsNiArMjMzOCw3IEBAIGRtX2Nhbm9uaWNhbF9wYXRoIChQZWREZXZpY2UgY29uc3QgKmRldikKKyAgICAgICAgIGRtX3Rhc2tfZGVzdHJveSAodGFzayk7CisgICAgICAgICByZXR1cm4gZGV2X25hbWU7CisgZXJyOgorKyNlbmRpZgorICAgICAgICAgcmV0dXJuIE5VTEw7CisgfQorIAorQEAgLTI5NTcsMTMgKzI5NTksMTUgQEAgX2Rpc2tfc3luY19wYXJ0X3RhYmxlIChQZWREaXNrKiBkaXNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqbGVuZ3RoKTsKKyAKKy0KKysjaWZkZWYgRU5BQkxFX0RFVklDRV9NQVBQRVIKKyAgICAgICAgIGlmIChkaXNrLT5kZXYtPnR5cGUgPT0gUEVEX0RFVklDRV9ETSkgeworICAgICAgICAgICAgICAgICBhZGRfcGFydGl0aW9uID0gX2RtX2FkZF9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlbW92ZV9wYXJ0aXRpb24gPSBfZG1fcmVtb3ZlX3BhcnRpdGlvbjsKKyAgICAgICAgICAgICAgICAgcmVzaXplX3BhcnRpdGlvbiA9IF9kbV9yZXNpemVfcGFydGl0aW9uOworICAgICAgICAgICAgICAgICBnZXRfcGFydGl0aW9uX3N0YXJ0X2FuZF9sZW5ndGggPSBfZG1fZ2V0X3BhcnRpdGlvbl9zdGFydF9hbmRfbGVuZ3RoOworLSAgICAgICAgfSBlbHNlIHsKKysgICAgICAgIH0gZWxzZQorKyNlbmRpZgorKyAgICAgICAgeworICAgICAgICAgICAgICAgICBhZGRfcGFydGl0aW9uID0gX2Jsa3BnX2FkZF9wYXJ0aXRpb247CisgICAgICAgICAgICAgICAgIHJlbW92ZV9wYXJ0aXRpb24gPSBfYmxrcGdfcmVtb3ZlX3BhcnRpdGlvbjsKKyAjaWZkZWYgQkxLUEdfUkVTSVpFX1BBUlRJVElPTgorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL2ZpeC1kb2MtbWFuZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtZG9jLW1hbmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzExZDRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9maXgtZG9jLW1hbmRpci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbYnVnLXBhcnRlZEBnbnUub3JnXQorCit8IGZvciBwbyBpbiBgbHMgLTEgLi8qLnB0X0JSLnBvIDI+L2Rldi9udWxsYDsgZG8gXAorfCAJCW1ha2UgJChiYXNlbmFtZSAke3BvJS5wdF9CUi5wb30pOyBcCit8IAlkb25lCit8IE1ha2VmaWxlOjkwNDogKioqIFJlY3Vyc2l2ZSB2YXJpYWJsZSBgbWFuZGlyJyByZWZlcmVuY2VzIGl0c2VsZiAoZXZlbnR1YWxseSkuICBTdG9wLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorCistLS0gcGFydGVkLTMuMS9kb2MvcG80YS5tay5vcmlnCTIwMTItMDMtMTUgMTQ6MDk6MTEuNTU1ODMxODcyICswMTAwCisrKysgcGFydGVkLTMuMS9kb2MvcG80YS5tawkyMDEyLTAzLTE1IDE0OjEwOjQ0LjI0MzgzMDk4NSArMDEwMAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjIHRocmVzaG9sZCBpcyA4MCUpLCBpdCB3b24ndCBiZSBkaXN0cmlidXRlZCwgYW5kIHRoZSBidWlsZCB3b24ndCBmYWlsLgorICMKKyAKKy1tYW5kaXIgPSAkKG1hbmRpcikvJChsYW5nKQorK21hbmRpciA6PSAkKG1hbmRpcikvJChsYW5nKQorIAorICMgSW5mb3JtIGF1dG9tYWtlIHRoYXQgd2Ugd2FudCB0byBpbnN0YWxsIHNvbWUgbWFuIHBhZ2VzIGluIHNlY3Rpb24gMSwgNQorICMgYW5kIDguCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL25vX2NoZWNrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ub19jaGVjay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ4ZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ub19jaGVjay5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0lmIGNoZWNrIGlzIGRldGVjdGVkLCBpdCBtYWtlcyB0aGUgYnVpbGRzIG5vbi1kZXRlcm1pbnN0aWMgc28ganVzdCBmb3JjZQoraXQgdG8gYmUgZGlzYWJsZWQuCisKK1JQIC0gNC8xMS8wOAorCitJbmRleDogcGFydGVkLTEuOS4wL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBhcnRlZC0xLjkuMC5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA5LTA3LTIzIDE4OjUyOjA4LjAwMDAwMDAwMCArMDEwMAorKysrIHBhcnRlZC0xLjkuMC9jb25maWd1cmUuYWMJMjAxMC0wMi0wMiAxNDoxMzo1Ni4wMTM5MDUwOTMgKzAwMDAKK0BAIC00NzcsNyArNDc3LDcgQEAKKyBBTV9DT05ESVRJT05BTChbQlVJTERfTElOVVhdLCBbdGVzdCAiJE9TIiA9IGxpbnV4XSkKKyAKKyBkbmwgY2hlY2sgZm9yICJjaGVjayIsIHVuaXQgdGVzdGluZyBsaWJyYXJ5L2hlYWRlcgorLVBLR19DSEVDS19NT0RVTEVTKFtDSEVDS10sIFtjaGVjayA+PSAwLjkuM10sIGhhdmVfY2hlY2s9eWVzLCBoYXZlX2NoZWNrPW5vKQorK2hhdmVfY2hlY2s9bm8KKyBpZiB0ZXN0ICIkaGF2ZV9jaGVjayIgIT0gInllcyI7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVChbVW5hYmxlIHRvIGxvY2F0ZSBjaGVjayB2ZXJzaW9uIDAuOS4zIG9yIGhpZ2hlcjogbm90IGJ1aWxkaW5nXSkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTVjNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBjaGVjay1URVNUUwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9maWxlcy9zeXNjYWxscy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvc3lzY2FsbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliYmU5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXJ0ZWQvZmlsZXMvc3lzY2FsbHMucGF0Y2gKQEAgLTAsMCArMSw1NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLQorIGxpYnBhcnRlZC9hcmNoL2xpbnV4LmMgfCAgIDEzICsrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQorCitJbmRleDogcGFydGVkLTEuOS4wL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXJ0ZWQtMS45LjAub3JpZy9saWJwYXJ0ZWQvYXJjaC9saW51eC5jCTIwMDktMDctMjMgMTg6NTI6MDguMDAwMDAwMDAwICswMTAwCisrKysgcGFydGVkLTEuOS4wL2xpYnBhcnRlZC9hcmNoL2xpbnV4LmMJMjAxMC0wMi0wMiAxNDoxNDoxNi41MjM5MDQ3NjggKzAwMDAKK0BAIC0xNyw2ICsxNyw4IEBACisgCisgI2RlZmluZSBQUk9DX0RFVklDRVNfQlVGU0laIDE2Mzg0CisgCisrI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKysKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPGFyY2gvbGludXguaD4KKyAKK0BAIC0xNDc3LDEyICsxNDc5LDE0IEBACisgCisgI2lmIFNJWkVPRl9PRkZfVCA8IDgKKyAKKysjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQorIHN0YXRpYyBfc3lzY2FsbDUoaW50LF9sbHNlZWssCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQsIGZkLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgb2Zmc2V0X2hpZ2gsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LAorICAgICAgICAgICAgICAgICAgbG9mZl90KiwgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCBvcmlnaW4pCisrI2VuZGlmCisgCisgbG9mZl90CisgbGxzZWVrICh1bnNpZ25lZCBpbnQgZmQsIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGludCB3aGVuY2UpCitAQCAtMTQ5MCwxMSArMTQ5NCwyMCBAQAorICAgICAgICAgbG9mZl90IHJlc3VsdDsKKyAgICAgICAgIGludCByZXR2YWw7CisgCisrI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKKyAgICAgICAgIHJldHZhbCA9IF9sbHNlZWsoZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuY2UpOworKyNlbHNlCisrIAlyZXR2YWwgPSBzeXNjYWxsKF9fTlJfX2xsc2VlaywgZmQsCisrCQkJICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgPj4gMzIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCkgJiAweGZmZmZmZmZmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKKysJCQkgd2hlbmNlKTsKKysjZW5kaWYKKysKKyAgICAgICAgIHJldHVybiAocmV0dmFsPT0tMSA/IChsb2ZmX3QpIHJldHZhbCA6IHJlc3VsdCk7CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BhcnRlZC9wYXJ0ZWRfMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGFlMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGFydGVkL3BhcnRlZF8zLjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJEaXNrIHBhcnRpdGlvbiBlZGl0aW5nL3Jlc2l6aW5nIHV0aWxpdHkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcGFydGVkL3BhcnRlZC5odG1sIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZjMxYjI2NmQzNDQwZGQ3ZWU1MGY5MmNmNjdkOGU2YyIKK1NFQ1RJT04gPSAiY29uc29sZS90b29scyIKK0RFUEVORFMgPSAibmN1cnNlcyByZWFkbGluZSB1dGlsLWxpbnV4IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9wYXJ0ZWQvcGFydGVkLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9ub19jaGVjay5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zeXNjYWxscy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZG9jLW1hbmRpci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29tcGlsZS1mYWlsdXJlLXdoaWxlLWRpcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUluY2x1ZGUtZmNudGwuaC1pbi1wbGF0Zm9ybV9kZWZzLmgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDI0N2I2YTdiMzE0ZjhlZGViNjE4MTU5ZmE5NWY5Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODU4YjU4OWMyMjI5N2NhY2RmNDM3ZjNiYWZmNmYwNGIzMzMwODc1MjFhYjI3NGY3YWI2NzdjYjhjNmJiNzhlNCIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kZXZpY2UtbWFwcGVyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCB0ZXhpbmZvIHB0ZXN0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitkb19jb21waWxlX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgdGVzdHMgcHJpbnQtYWxpZ24gcHJpbnQtbWF4IGR1cC1jbG9iYmVyIGR1cGxpY2F0ZSBmcy1yZXNpemUKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJbWtkaXIgJHQvYnVpbGQtYXV4CisJY3AgJHtTfS9idWlsZC1hdXgvdGVzdC1kcml2ZXIgJHQvYnVpbGQtYXV4LworCWNwIC1yICR7U30vdGVzdHMgJHQKKwljcCAke1dPUktESVJ9L01ha2VmaWxlICR0L3Rlc3RzLworCXNlZCAtaSAic3xeVkVSU0lPTi4qfFZFUlNJT04gPSAke1BWfXxnIiAkdC90ZXN0cy9NYWtlZmlsZQorCWZvciBpIGluIHByaW50LWFsaWduIHByaW50LW1heCBkdXAtY2xvYmJlciBkdXBsaWNhdGUgZnMtcmVzaXplOyBcCisJICBkbyBjcCAke0J9L3Rlc3RzLy5saWJzLyRpICR0L3Rlc3RzLzsgXAorCWRvbmUKKwlzZWQgLWUgJ3N8IC4uL3BhcnRlZHx8JyAtaSAkdC90ZXN0cy8qLnNoCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImJhc2ggY29yZXV0aWxzIHBlcmwgdXRpbC1saW51eC1sb3NldHVwIHB5dGhvbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYXgvcGF4L2ZpeF9mb3JfY29tcGlsZV93aXRoX2djYy00LjYuMC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODc3OWMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHRoaXMgY29tcGlsZXIgZXJyb3Igd2l0aCBnY2MgNC42LjAKKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4gMjAxMS8wNS8wOAorCit8IGZ0cy5jOiBJbiBmdW5jdGlvbiAncGF4X2Z0c19zZXQnOgorfCBmdHMuYzo0Njk6NzogZXJyb3I6IHBhcmFtZXRlciAnc3AnIHNldCBidXQgbm90IHVzZWQgWy1XZXJyb3I9dW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyXQorfCBjYzE6IGFsbCB3YXJuaW5ncyBiZWluZyB0cmVhdGVkIGFzIGVycm9ycworfCAKK3wgbWFrZVsyXTogKioqIFtmdHMub10gRXJyb3IgMQorCitJbmRleDogcGF4LTMuNC9saWIvZnRzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvbGliL2Z0cy5jCisrKysgcGF4LTMuNC9saWIvZnRzLmMKK0BAIC00NjYsNyArNDY2LDcgQEAgbmFtZToJCXQgPSBzcC0+ZnRzX3BhdGggKyBOQVBQRU5EKHAtPmZ0cworIC8qIEFSR1NVU0VEICovCisgaW50CisgZnRzX3NldChzcCwgcCwgaW5zdHIpCistCUZUUyAqc3A7CisrCUZUUyBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkgKnNwOworIAlGVFNFTlQgKnA7CisgCWludCBpbnN0cjsKKyB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheC9wYXgtMy40X2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDg3OGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXgvcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDE4NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0F1dGhvcjogSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIERlYyA2IDEwOjM0OjUzIDIwMTEgLTA4MDAKKworICAgIEZpeCBwYXgtMy40IGJ1aWxkIGZvciB4MzIKKyAgICAKKyAgICBvZmZfdCBpcyA4Ynl0ZSBmb3IgeDMyLiAgV2UgbmVlZCB0byBjaGVjayBib3RoIF9GSUxFX09GRlNFVF9CSVRTIGFuZAorICAgIHNpemUgb2Ygb2ZmX3QgdG8gc2VlIGlmIGZpbGUgb2Zmc2V0IGlzIDY0Yml0LiAgVGhpcyBwYXRjaCBhZGRzCisgICAgQUNfQ0hFQ0tfU0laRU9GKG9mZl90KSBhbmQgY2hlY2tzIFNJWkVPRl9PRkZfVCA9PSA4LgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzA2CisKK0luZGV4OiBwYXgtMy40L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9jb25maWd1cmUuaW4KKysrKyBwYXgtMy40L2NvbmZpZ3VyZS5pbgorQEAgLTMzLDQgKzMzLDcgQEAgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIGRubCBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorIEFDX0NfQ09OU1QKKyAKKytBQ19DSEVDS19TSVpFT0Yob2ZmX3QpCisrQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisrCisgQUNfT1VUUFVUKFtNYWtlZmlsZSBsaWIvTWFrZWZpbGUgc3JjL01ha2VmaWxlXSkKK0luZGV4OiBwYXgtMy40L3NyYy9hcl9pby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9hcl9pby5jCisrKysgcGF4LTMuNC9zcmMvYXJfaW8uYworQEAgLTM3OCw3ICszNzgsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAkgKiBjb3VsZCBoYXZlIHdyaXR0ZW4gYW55dGhpbmcgeWV0LgorIAkgKi8KKyAJaWYgKGZybXQgPT0gTlVMTCkgeworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgCQkodm9pZClmcHJpbnRmKGxpc3RmLCAiJXM6IHVua25vd24gZm9ybWF0LCAlcXUgYnl0ZXMgc2tpcHBlZC5cbiIsCisgI2Vsc2UKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsICIlczogdW5rbm93biBmb3JtYXQsICVsdSBieXRlcyBza2lwcGVkLlxuIiwKK0BAIC0zOTEsNyArMzkyLDggQEAgYXJfY2xvc2Uodm9pZCkKKyAKKyAJaWYgKHN0cmNtcChOTV9DUElPLCBhcmd2MCkgPT0gMCkKKyAJCSh2b2lkKWZwcmludGYobGlzdGYsCistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCSAgICAiJXF1IGJsb2Nrc1xuIiwKKyAjZWxzZQorIAkJICAgICIlbHUgYmxvY2tzXG4iLAorQEAgLTM5OSw3ICs0MDEsOCBAQCBhcl9jbG9zZSh2b2lkKQorIAkJCShyZGNudCA/IHJkY250IDogd3JjbnQpIC8gNTEyMCk7CisgCWVsc2UgaWYgKHN0cmNtcChOTV9UQVIsIGFyZ3YwKSAhPSAwKQorIAkJKHZvaWQpZnByaW50ZihsaXN0ZiwKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIAkJICAgICIlczogJXMgdm9sICVkLCAlbHUgZmlsZXMsICVxdSBieXRlcyByZWFkLCAlcXUgYnl0ZXMgd3JpdHRlbi5cbiIsCisgI2Vsc2UKKyAJCSAgICAiJXM6ICVzIHZvbCAlZCwgJWx1IGZpbGVzLCAlbHUgYnl0ZXMgcmVhZCwgJWx1IGJ5dGVzIHdyaXR0ZW4uXG4iLAorSW5kZXg6IHBheC0zLjQvc3JjL2NwaW8uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBheC0zLjQub3JpZy9zcmMvY3Bpby5jCisrKysgcGF4LTMuNC9zcmMvY3Bpby5jCitAQCAtMjE4LDcgKzIxOCw4IEBAIHJkX2xuX25tIChBUkNIRCAqYXJjbikKKyAJICovCisgCWlmICgoYXJjbi0+c2Iuc3Rfc2l6ZSA9PSAwKSB8fAorIAkgICAgKGFyY24tPnNiLnN0X3NpemUgPj0gKG9mZl90KSBzaXplb2YoYXJjbi0+bG5fbmFtZSkpKSB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAJCXBheHdhcm4gKDEsICJDcGlvIGxpbmsgbmFtZSBsZW5ndGggaXMgaW52YWxpZDogJXF1IiwKKyAJCQkgYXJjbi0+c2Iuc3Rfc2l6ZSk7CisgI2Vsc2UKK0luZGV4OiBwYXgtMy40L3NyYy9nZW5fc3Vicy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcGF4LTMuNC5vcmlnL3NyYy9nZW5fc3Vicy5jCisrKysgcGF4LTMuNC9zcmMvZ2VuX3N1YnMuYworQEAgLTEzMyw3ICsxMzMsOCBAQCBsc19saXN0IChBUkNIRCAqYXJjbiwgdGltZV90IG5vdywgRklMRSAqCisgICAgKiBwcmludCBkZXZpY2UgaWQncyBmb3IgZGV2aWNlcywgb3Igc2l6ZXMgZm9yIG90aGVyIG5vZGVzCisgICAgKi8KKyAgIGlmICgoYXJjbi0+dHlwZSA9PSBQQVhfQ0hSKSB8fCAoYXJjbi0+dHlwZSA9PSBQQVhfQkxLKSkKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlNGx1LCU0bHUgIiwgKHVuc2lnbmVkIGxvbmcpIE1BSk9SIChzYnAtPnN0X3JkZXYpLAorIAkJICAgICh1bnNpZ25lZCBsb25nKSBNSU5PUiAoc2JwLT5zdF9yZGV2KSk7CisgI2Vsc2UKK0BAIC0xNDIsNyArMTQzLDggQEAgbHNfbGlzdCAoQVJDSEQgKmFyY24sIHRpbWVfdCBub3csIEZJTEUgKgorICNlbmRpZgorICAgZWxzZQorICAgICB7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlOXF1ICIsIHNicC0+c3Rfc2l6ZSk7CisgI2Vsc2UKKyAgICAgICAodm9pZCkgZnByaW50ZiAoZnAsICIlOWx1ICIsIHNicC0+c3Rfc2l6ZSk7CitAQCAtMzM0LDcgKzMzNiw4IEBAIHVsX2FzYyAodV9sb25nIHZhbCwgY2hhciAqc3RyLCBpbnQgbGVuLCAKKyAgIHJldHVybiAoMCk7CisgfQorIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgLyoKKyAgKiBhc2NfdXFkKCkKKyAgKgljb252ZXJ0IGhleC9vY3RhbCBjaGFyYWN0ZXIgc3RyaW5nIGludG8gYSB1X3F1YWRfdC4gV2UgZG8gbm90IGhhdmUgdG8KK0luZGV4OiBwYXgtMy40L3NyYy9vcHRpb25zLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL29wdGlvbnMuYworKysrIHBheC0zLjQvc3JjL29wdGlvbnMuYworQEAgLTE1NDUsNyArMTU0NSw4IEBAIHN0cl9vZmZ0IChjaGFyICp2YWwpCisgICBjaGFyICpleHByOworICAgb2ZmX3QgbnVtLCB0OworIAorLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBudW0gPSBzdHJ0b3EgKHZhbCwgJmV4cHIsIDApOworICAgaWYgKChudW0gPT0gTE9OR19MT05HX01BWCkgfHwgKG51bSA8PSAwKSB8fCAoZXhwciA9PSB2YWwpKQorICNlbHNlCitJbmRleDogcGF4LTMuNC9zcmMvdGFyLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBwYXgtMy40Lm9yaWcvc3JjL3Rhci5jCisrKysgcGF4LTMuNC9zcmMvdGFyLmMKK0BAIC01OCw3ICs1OCw4IEBACisgc3RhdGljIHVuc2lnbmVkIGxvbmcgdGFyX2Noa3NtIChjaGFyICosIGludCk7Cisgc3RhdGljIGNoYXIgKm5hbWVfc3BsaXQgKGNoYXIgKiwgaW50KTsKKyBzdGF0aWMgaW50IHVsX29jdCAodV9sb25nLCBjaGFyICosIGludCwgaW50KTsKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIHN0YXRpYyBpbnQgdXFkX29jdCAodV9xdWFkX3QsIGNoYXIgKiwgaW50LCBpbnQpOworICNlbmRpZgorIAorQEAgLTE5Niw3ICsxOTcsOCBAQCB1bF9vY3QgKHVfbG9uZyB2YWwsIHJlZ2lzdGVyIGNoYXIgKnN0ciwgCisgICByZXR1cm4gKDApOworIH0KKyAKKy0jaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQKKysjaWYgKFNJWkVPRl9MT05HID09IDQgJiYgU0laRU9GX09GRl9UID09IDgpIFwKKysgICAgfHwgKGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0KQorIC8qCisgICogdXFkX29jdCgpCisgICoJY29udmVydCBhbiB1X3F1YWRfdCB0byBhbiBvY3RhbCBzdHJpbmcuIG9uZSBvZiBtYW55IG9kZGJhbGwgZmllbGQKK0BAIC00MjcsNyArNDI5LDggQEAgdGFyX3JkIChBUkNIRCAqYXJjbiwgY2hhciAqYnVmKQorIAkJCSAgICAgICAweGZmZik7CisgICBhcmNuLT5zYi5zdF91aWQgPSAodWlkX3QpIGFzY191bCAoaGQtPnVpZCwgc2l6ZW9mIChoZC0+dWlkKSwgT0NUKTsKKyAgIGFyY24tPnNiLnN0X2dpZCA9IChnaWRfdCkgYXNjX3VsIChoZC0+Z2lkLCBzaXplb2YgKGhkLT5naWQpLCBPQ1QpOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICBhcmNuLT5zYi5zdF9zaXplID0gKG9mZl90KSBhc2NfdXFkIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CisgI2Vsc2UKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191bCAoaGQtPnNpemUsIHNpemVvZiAoaGQtPnNpemUpLCBPQ1QpOworQEAgLTY1OSw3ICs2NjIsOCBAQCB0YXJfd3IgKHJlZ2lzdGVyIEFSQ0hEICogYXJjbikKKyAgICAgICAgKiBkYXRhIGZvbGxvd3MgdGhpcyBmaWxlLCBzbyBzZXQgdGhlIHBhZAorICAgICAgICAqLworICAgICAgIGhkLT5saW5rZmxhZyA9IEFSRUdUWVBFOworLSNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NAorKyNpZiAoU0laRU9GX0xPTkcgPT0gNCAmJiBTSVpFT0ZfT0ZGX1QgPT0gOCkgXAorKyAgICB8fCAoZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQpCisgICAgICAgaWYgKHVxZF9vY3QgKCh1X3F1YWRfdCkgYXJjbi0+c2Iuc3Rfc2l6ZSwgaGQtPnNpemUsCisgCQkgICBzaXplb2YgKGhkLT5zaXplKSwgMSkpCisgI2Vsc2UKK0BAIC04MzQsNyArODM4LDggQEAgdXN0YXJfcmQgKEFSQ0hEICphcmNuLCBjaGFyICpidWYpCisgICAgKi8KKyAgIGFyY24tPnNiLnN0X21vZGUgPSAobW9kZV90KSAoYXNjX3VsIChoZC0+bW9kZSwgc2l6ZW9mIChoZC0+bW9kZSksIE9DVCkgJgorIAkJCSAgICAgICAweGZmZik7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgIGFyY24tPnNiLnN0X3NpemUgPSAob2ZmX3QpIGFzY191cWQgKGhkLT5zaXplLCBzaXplb2YgKGhkLT5zaXplKSwgT0NUKTsKKyAjZWxzZQorICAgYXJjbi0+c2Iuc3Rfc2l6ZSA9IChvZmZfdCkgYXNjX3VsIChoZC0+c2l6ZSwgc2l6ZW9mIChoZC0+c2l6ZSksIE9DVCk7CitAQCAtMTA4MSw3ICsxMDg2LDggQEAgdXN0YXJfd3IgKHJlZ2lzdGVyIEFSQ0hEICogYXJjbikKKyAgICAgICBlbHNlCisgCWhkLT50eXBlZmxhZyA9IFJFR1RZUEU7CisgICAgICAgYXJjbi0+cGFkID0gVEFSX1BBRCAoYXJjbi0+c2Iuc3Rfc2l6ZSk7CistI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTID09IDY0CisrI2lmIChTSVpFT0ZfTE9ORyA9PSA0ICYmIFNJWkVPRl9PRkZfVCA9PSA4KSBcCisrICAgIHx8IChkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUyA9PSA2NCkKKyAgICAgICBpZiAodXFkX29jdCAoKHVfcXVhZF90KSBhcmNuLT5zYi5zdF9zaXplLCBoZC0+c2l6ZSwKKyAJCSAgIHNpemVvZiAoaGQtPnNpemUpLCAzKSkKKyAJewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BheC9wYXhfMy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDQ4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGF4L3BheF8zLjQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJQb3J0YWJsZSBBcmNoaXZlIGVYY2hhbmdlIgorREVTQ1JJUFRJT04gPSAicGF4IChQb3J0YWJsZSBBcmNoaXZlIGVYY2hhbmdlKSBpcyB0aGUgUE9TSVggc3RhbmRhcmQgYXJjaGl2ZSB0b29sIgorSE9NRVBBR0UgPSAiaHR0cDovL2N2c3dlYi5vcGVuYnNkLm9yZy9jZ2ktYmluL2N2c3dlYi9zcmMvYmluL3BheC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly93d3cub3BlbmJzZC5vcmcvcXVlcnktcHIuaHRtbCIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00YjBiNjc0ZGZkYzU2ZGFhMzgzMmQ0MDY5YjgyMGVhMCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGF4Lmg7ZW5kbGluZT00MDttZDU9MzA5ZDNlMjQxYzFkODIwNjkyMjhlNWE1MWU5YjhkNjAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NwaW8uaDtlbmRsaW5lPTQwO21kNT1jM2I0YmJmZjYxMzNhODMzODc5Njg2MTdiYmFlOGFjNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdmlzLmg7ZW5kbGluZT00MDttZDU9YjI4M2Y3NTlhYmQ0YTVhZDdlMDE0YjgwZjUxZmMwNTMiCisKK1NFQ1RJT04gPSAiYmFzZSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL3JlcG8vcGtncy8ke0JQTn0vJHtCUH0udGFyLmJ6Mi9mYmQ5MDIzYjU5MGI0NWFjM2FkZTk1ODcwNzAyYTBkNi8ke0JQfS50YXIuYnoyIFwKKwlmaWxlOi8vZml4X2Zvcl9jb21waWxlX3dpdGhfZ2NjLTQuNi4wLnBhdGNoIFwKKwlmaWxlOi8vcGF4LTMuNF9maXhfZm9yX3gzMi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImZiZDkwMjNiNTkwYjQ1YWMzYWRlOTU4NzA3MDJhMGQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjM2MwNjA0OGUwMjgyODA3N2NmNzc1N2QzZDE0MjI0MTQyOTIzODg5M2I5MWQ1MjlhZjI5YTJlOGNjNTYyM2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGJ6aXAyL3BiemlwMl8xLjEuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzMDk4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wYnppcDIvcGJ6aXAyXzEuMS4xMi5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlBCWklQMiBpcyBhIHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGJ6aXAyIgorREVTQ1JJUFRJT04gPSAiUEJaSVAyIGlzIGEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ6aXAyIGJsb2NrLXNvcnRpbmcgXAorZmlsZSBjb21wcmVzc29yIHRoYXQgdXNlcyBwdGhyZWFkcyBhbmQgYWNoaWV2ZXMgbmVhci1saW5lYXIgc3BlZWR1cCBvbiBTTVAgXAorbWFjaGluZXMuIFRoZSBvdXRwdXQgb2YgdGhpcyB2ZXJzaW9uIGlzIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBiemlwMiB2MS4wLjIgb3IgXAorbmV3ZXIgKGllOiBhbnl0aGluZyBjb21wcmVzc2VkIHdpdGggcGJ6aXAyIGNhbiBiZSBkZWNvbXByZXNzZWQgd2l0aCBiemlwMikuIgorSE9NRVBBR0UgPSAiaHR0cDovL2NvbXByZXNzaW9uLmNhL3BiemlwMi8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRjNGYyZWRlYzk2NzlkNWFiZWYzNTE0YTgxNmI1NGE0IgorCitERVBFTkRTID0gImJ6aXAyIgorREVQRU5EU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiBiemlwMi1yZXBsYWNlbWVudC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9sYXVuY2hwYWQubmV0LyR7QlBOfS8xLjEvJHtQVn0vK2Rvd25sb2FkLyR7QlB9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjkxYTQ5MTFiMTMzMDU4NTA0MjM4NDBlYjBmYTZmNGY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU3M2JiMzU4YTVhN2QzYmY1ZjQyZjg4MWFmMzI0Y2VkZjk2MGM3ODZlOGQ2NmRkMDNkNDQ4ZGRkOGEwMTY2ZWUiCisKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCisKK0VYVFJBX09FTUFLRSA9ICJDWFg9JyR7Q1hYfSAke0NYWEZMQUdTfScgTERGTEFHUz0nJHtMREZMQUdTfSciCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1IHBiemlwMiAke0R9JHtiaW5kaXJ9LworfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYmNvbnZlcnQtYXNuMS1wZXJsXzAuMjcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJjb252ZXJ0LWFzbjEtcGVybF8wLjI3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MGU3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJjb252ZXJ0LWFzbjEtcGVybF8wLjI3LmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiQ29udmVydDo6QVNOMSAtIFBlcmwgQVNOLjEgRW5jb2RlL0RlY29kZSBsaWJyYXJ5IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5tZDtiZWdpbmxpbmU9OTE7ZW5kbGluZT05NzttZDU9Y2VmZjdmZDI4NmViNmQ4ZThlMGQzZDIzZTA5NmE2M2YiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HQi9HQkFSUi9Db252ZXJ0LUFTTjEtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjg3MjNlOTZiZTBiMjU4YTllMjA0ODAyNzZlOGE2MmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzRhNGE3OGFlMGM1ZTk3MzEwMGFjMGE4ZjIwM2ExMTBmNzZmYjA0N2I3OWRhZTRmYzFmZDdkNjgxNGQzZDU4YSIKKworUyA9ICIke1dPUktESVJ9L0NvbnZlcnQtQVNOMS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0VYVFJBX1BFUkxGTEFHUyA9ICItSSAke1BFUkxIT1NUTElCfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ0aW1lZGF0ZS1wZXJsXzIuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmY2RlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnRpbWVkYXRlLXBlcmxfMi4zMC5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlBlcmwgbW9kdWxlcyB1c2VmdWwgZm9yIG1hbmlwdWxhdGluZyBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uIgorU0VDVElPTiA9ICJsaWJzIgorIyBZb3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFBlcmwgaXRzZWxmLgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRTtiZWdpbmxpbmU9MjE7bWQ1PTU3NmI3Y2I0MWU1ZTgyMTUwMWEwMWVkNjZmMGY5ZDllIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0cvR0IvR0JBUlIvVGltZURhdGUtJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vVGltZURhdGUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1jYXJwIHBlcmwtbW9kdWxlLWV4cG9ydGVyIHBlcmwtbW9kdWxlLXN0cmljdCBwZXJsLW1vZHVsZS10aW1lLWxvY2FsIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjFkOTExNTNhYzk3MTM0N2FlZTg0MjkyZWQ4ODZjMWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzViZDI1NDg3MWNiNTg1M2E2YWEwNDAzYWMwYmUyNzBjZGQ3NWM5ZDFiNjYzOWYxOGVjYmE2M2MxNTI5OGU4NiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1uYW1lc3BhY2VzdXBwb3J0LXBlcmxfMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTllNzEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLW5hbWVzcGFjZXN1cHBvcnQtcGVybF8xLjExLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHN1cHBvcnRpbmcgc2ltcGxlIGdlbmVyaWMgbmFtZXNwYWNlcyIKK0RFU0NSSVBUSU9OID0gIlhNTDo6TmFtZXNwYWNlU3VwcG9ydCBvZmZlcnMgYSBzaW1wbGUgd2F5IHRvIHByb2Nlc3MgbmFtZXNwYWNlLWJhc2VkIFhNTCBuYW1lcy4gXAorICAgICAgICAgICAgICAgIEl0IGFsc28gaGVscHMgbWFpbnRhaW4gYSBwcmVmaXgtdG8tbmFtZXNwYWNlIFVSSSBtYXAsIGFuZCBwcm92aWRlcyBhIG51bWJlciBvZiBcCisgICAgICAgICAgICAgICAgYmFzaWMgY2hlY2tzLiAiCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitQUiA9ICJyMyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTUVUQS55bWw7YmVnaW5saW5lPTIyO2VuZGxpbmU9MjI7bWQ1PTNiMmI1NjRkYWU4YjlhZjllODg5NmU4NWMwN2RjYmU1IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1AvUEUvUEVSSUdSSU4vWE1MLU5hbWVzcGFjZVN1cHBvcnQtJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjIyMmNjYTc2MTYxY2Q5NTZkNzI0Mjg2ZDM2YjYwN2RhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjZkODE1MWYwYTNmMTAyMzEzZDc2YjY0YmZkMWMyZDllZDQ2YmZlNjNhMTZmMDM4ZTdkODYwZmRhMjg3Yjc0ZWEiCisKKworUyA9ICIke1dPUktESVJ9L1hNTC1OYW1lc3BhY2VTdXBwb3J0LSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORD0ibmF0aXZlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGVybC9saWJ4bWwtc2F4LWJhc2UtcGVybF8xLjA4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1iYXNlLXBlcmxfMS4wOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGEzMzcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1iYXNlLXBlcmxfMS4wOC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIkJhc2UgY2xhc3MgU0FYIERyaXZlcnMgYW5kIEZpbHRlcnMiCitERVNDUklQVElPTiA9ICJUaGlzIG1vZHVsZSBoYXMgYSB2ZXJ5IHNpbXBsZSB0YXNrIC0gdG8gYmUgYSBiYXNlIGNsYXNzIGZvciBcCitQZXJsU0FYIGRyaXZlcnMgYW5kIGZpbHRlcnMuIEl0J3MgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gcGFzcyBcCit0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIG91dHB1dCB1bmNoYW5nZWQuIEl0IGNhbiBiZSB1c2VmdWwgdG8gXAordXNlIHRoaXMgbW9kdWxlIGFzIGEgYmFzZSBjbGFzcyBzbyB5b3UgZG9uJ3QgaGF2ZSB0bywgZm9yIGV4YW1wbGUsIFwKK2ltcGxlbWVudCB0aGUgY2hhcmFjdGVycygpIGNhbGxiYWNrLiIKKworU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKK1JERVBFTkRTXyR7UE59ICs9ICJwZXJsLW1vZHVsZS1leHR1dGlscy1tYWtlbWFrZXIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2Rpc3QuaW5pO2VuZGxpbmU9NTttZDU9OGY5YzlhNTUzNDBhZWZhZWU2ZTk3MDRjODg0NjY0NDYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvRy9HUi9HUkFOVE0vWE1MLVNBWC1CYXNlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjM4YzhjMzI0N2RmZDA4MDcxMjU5NjExOGQ3MGRiZTMyIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NjI3MDMxOGIxNWY4OGI4NDI3ZTU4NTE5OGFiYmMxOWJjMmU2Y2NiMzZkYzRjMGE0ZjJkOTgwNzMzMDIxOWUiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU0FYLUJhc2UtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BlcmwvbGlieG1sLXNheC1wZXJsXzAuOTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkMzk2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wZXJsL2xpYnhtbC1zYXgtcGVybF8wLjk5LmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHVzaW5nIGFuZCBidWlsZGluZyBQZXJsIFNBWDIgWE1MIHByb2Nlc3NvcnMiCitERVNDUklQVElPTiA9ICJYTUw6OlNBWCBjb25zaXN0cyBvZiBzZXZlcmFsIGZyYW1ld29yayBjbGFzc2VzIGZvciB1c2luZyBhbmQgXAorYnVpbGRpbmcgUGVybCBTQVgyIFhNTCBwYXJzZXJzLCBmaWx0ZXJzLCBhbmQgZHJpdmVycy4gIEl0IGlzIGRlc2lnbmVkIFwgCithcm91bmQgdGhlIG5lZWQgdG8gYmUgYWJsZSB0byAicGx1ZyBpbiIgZGlmZmVyZW50IFNBWCBwYXJzZXJzIHRvIGFuIFwKK2FwcGxpY2F0aW9uIHdpdGhvdXQgcmVxdWlyaW5nIHByb2dyYW1tZXIgaW50ZXJ2ZW50aW9uLiAgVGhvc2Ugb2YgeW91IFwKK2ZhbWlsaWFyIHdpdGggdGhlIERCSSB3aWxsIGJlIHJpZ2h0IGF0IGhvbWUuICBTb21lIG9mIHRoZSBkZXNpZ25zIFwKK2NvbWUgZnJvbSB0aGUgSmF2YSBKQVhQIHNwZWNpZmljYXRpb24gKFNBWCBwYXJ0KSwgb25seSB3aXRob3V0IHRoZSBcCitqYXZhbmVzcy4iCisKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCitERVBFTkRTICs9ICJsaWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59ICs9ICJsaWJ4bWwtbmFtZXNwYWNlc3VwcG9ydC1wZXJsIGxpYnhtbC1zYXgtYmFzZS1wZXJsIHBlcmwtbW9kdWxlLWZpbGUtdGVtcCIKK1BSID0gInIyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02NWM0Y2Q4ZjM5YzI0YzcxMzVlZDcwZGFjYmNiMDllMyIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9HL0dSL0dSQU5UTS9YTUwtU0FYLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5MGY1Mzc1YWU4N2ZkZWJmZGI1YmMzODU0MDE5ZjI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMyYjA0YjhlMzZiNmNjNGNmYzQ4NmRlMmQ4NTlkODdhZjUzODZkZDkzMGYyMzgzYzQ5MzQ3MDUwZDZmNWFkODQiCisKK1MgPSAiJHtXT1JLRElSfS9YTUwtU0FYLSR7UFZ9IgorCitpbmhlcml0IGNwYW4KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9waWd6L3BpZ3ouaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiODk5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6LmluYwpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkEgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCIKK0RFU0NSSVBUSU9OID0gInBpZ3osIHdoaWNoIHN0YW5kcyBmb3IgcGFyYWxsZWwgaW1wbGVtZW50YXRpb24gb2YgZ3ppcCwgaXMgYSBcCitmdWxseSBmdW5jdGlvbmFsIHJlcGxhY2VtZW50IGZvciBnemlwIHRoYXQgZXhwbG9pdHMgbXVsdGlwbGUgcHJvY2Vzc29ycyBhbmQgXAorbXVsdGlwbGUgY29yZXMgdG8gdGhlIGhpbHQgd2hlbiBjb21wcmVzc2luZyBkYXRhLiBwaWd6IHdhcyB3cml0dGVuIGJ5IE1hcmsgXAorQWRsZXIsIGFuZCB1c2VzIHRoZSB6bGliIGFuZCBwdGhyZWFkIGxpYnJhcmllcy4iCitIT01FUEFHRSA9ICJodHRwOi8vemxpYi5uZXQvcGlnei8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIlpsaWIgJiBBcGFjaGUtMi4wIgorCitTUkNfVVJJID0gImh0dHA6Ly96bGliLm5ldC8ke0JQTn0vJHtCUH0udGFyLmd6IgorCitQUk9WSURFU19jbGFzcy1uYXRpdmUgKz0gImd6aXAtbmF0aXZlIgorCitERVBFTkRTID0gInpsaWIiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19pbnN0YWxsX2NsYXNzLXRhcmdldCgpIHsKKwkjIEluc3RhbGwgZmlsZXMgaW50byAvYmluIChGSFMpLCB3aGljaCBpcyB0eXBpY2FsIHBsYWNlIGZvciBnemlwCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpbnN0YWxsICR7Qn0vcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vcGlnegorCWxuIC1uc2YgcGlneiAke0R9JHtiYXNlX2JpbmRpcn0vdW5waWd6CisJbG4gLW5zZiBwaWd6ICR7RH0ke2Jhc2VfYmluZGlyfS9waWd6Y2F0Cit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAke0J9L3BpZ3ogJHtEfSR7YmluZGlyfS9nemlwCisJbG4gLW5zZiBnemlwICR7RH0ke2JpbmRpcn0vZ3VuemlwCisJbG4gLW5zZiBnemlwICR7RH0ke2JpbmRpcn0vemNhdAorfQorCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI4MCIKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd1bnppcCBnemlwIHpjYXQiCitBTFRFUk5BVElWRV8ke1BOfV9jbGFzcy1uYXRpdmVzZGsgPSAiIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d1bnppcF0gPSAiJHtiYXNlX2JpbmRpcn0vZ3VuemlwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2d6aXBdID0gIiR7YmFzZV9iaW5kaXJ9L2d6aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbemNhdF0gPSAiJHtiYXNlX2JpbmRpcn0vemNhdCIKK0FMVEVSTkFUSVZFX1RBUkdFVCA9ICIke2Jhc2VfYmluZGlyfS9waWd6IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnei9saW5rLW9yZGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWNjMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6L2xpbmstb3JkZXIucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorVGhpcyBwYXRjaCBhdm9pZHMgdW5kZXJsaW5raW5nIGlzc3VlcyBzaW5jZSB3ZSBwYXNzIC1seiB2aWEgTERGTEFHUyBidXQgaXQgYXBwZWFycworYmVmb3JlIHBpZ3oubyB3aGljaCBuZWVkcyBzeW1ib2xzIGZyb20gbGlieiBob3dldmVyIGR1ZSB0byBvcmRlciBsaW5rZXIgaGFwcGlseSBkaXNjYXJkcyBsaWJ6CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcGlnei0yLjMuMy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBpZ3otMi4zLjMub3JpZy9NYWtlZmlsZQkyMDE1LTAxLTE5IDIwOjEyOjMxLjAwMDAwMDAwMCAtMDgwMAorKysrIHBpZ3otMi4zLjMvTWFrZWZpbGUJMjAxNS0wMS0yOCAwOToxMTo1MC4yNjY2NjkxODQgLTA4MDAKK0BAIC01LDcgKzUsNyBAQAorICMgdXNlIGdjYyBhbmQgZ21ha2Ugb24gU29sYXJpcworIAorIHBpZ3o6IHBpZ3oubyB5YXJuLm8gdHJ5Lm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlneiAkXiAtbHB0aHJlYWQgLWxtCisrCSQoQ0MpIC1vIHBpZ3ogJF4gJChMREZMQUdTKSAtbHogLWxwdGhyZWFkIC1sbQorIAlsbiAtZiBwaWd6IHVucGlnegorIAorIHBpZ3oubzogcGlnei5jIHlhcm4uaCB0cnkuaCAke1pPUEZMSX1kZWZsYXRlLmggJHtaT1BGTEl9dXRpbC5oCitAQCAtMzUsNyArMzUsNyBAQAorIGRldjogcGlneiBwaWd6dCBwaWd6bgorIAorIHBpZ3p0OiBwaWd6dC5vIHlhcm50Lm8gdHJ5Lm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlnenQgJF4gLWxwdGhyZWFkIC1sbQorKwkkKENDKSAtbyBwaWd6dCAkXiAkKExERkxBR1MpIC1seiAtbHB0aHJlYWQgLWxtCisgCisgcGlnenQubzogcGlnei5jIHlhcm4uaCB0cnkuaAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtZyAtYyAtbyBwaWd6dC5vIHBpZ3ouYworQEAgLTQ0LDcgKzQ0LDcgQEAKKyAJJChDQykgJChDRkxBR1MpIC1EREVCVUcgLWcgLWMgLW8geWFybnQubyB5YXJuLmMKKyAKKyBwaWd6bjogcGlnem4ubyB0cnluLm8gJHtaT1BGTEl9ZGVmbGF0ZS5vICR7Wk9QRkxJfWJsb2Nrc3BsaXR0ZXIubyAke1pPUEZMSX10cmVlLm8gJHtaT1BGTEl9bHo3Ny5vICR7Wk9QRkxJfWNhY2hlLm8gJHtaT1BGTEl9aGFzaC5vICR7Wk9QRkxJfXV0aWwubyAke1pPUEZMSX1zcXVlZXplLm8gJHtaT1BGTEl9a2F0YWphaW5lbi5vCistCSQoQ0MpICQoTERGTEFHUykgLW8gcGlnem4gJF4gLWxtCisrCSQoQ0MpIC1vIHBpZ3puICReICQoTERGTEFHUykgLWx6IC1sbQorIAorIHBpZ3puLm86IHBpZ3ouYyB0cnkuaAorIAkkKENDKSAkKENGTEFHUykgLURERUJVRyAtRE5PVEhSRUFEIC1nIC1jIC1vIHBpZ3puLm8gcGlnei5jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcGlnei9waWd6XzIuMy4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnel8yLjMuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODBiZTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BpZ3ovcGlnel8yLjMuMy5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHBpZ3ouaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9waWd6LmM7YmVnaW5saW5lPTc7ZW5kbGluZT0yMTttZDU9YTIxZDQwNzVjYjAwYWI0Y2ExN2ZjZTVlNzUzNGNhOTUiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9saW5rLW9yZGVyLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDFkN2ExNmNjZTc3OTI5Y2MxYTc4YWExYmRmYjY4Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNGU4YjY3YjQzMmNlNzkwNzU3NWE1NDlmM2UxY2FjNDcwOTc4MWJhMGY2YjQ4YWZlYTlmNTkzNjk4NDZiNTA5YyIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzL2ZpeC1jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9maXgtY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNGFlODAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9maXgtY29uZmlndXJlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKKworZXhlY19wcmVmaXggaXMgL3VzciBkZWZhdWx0IGluIE9FLUNvcmUKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorSW5kZXg6IHByb2Nwcy1uZy0zLjMuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcHJvY3BzLW5nLTMuMy4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHByb2Nwcy1uZy0zLjMuMTAvY29uZmlndXJlLmFjCitAQCAtNzAsNyArNzAsNyBAQCBBQ19GVU5DX01NQVAKKyBBQ19GVU5DX1JFQUxMT0MKKyBBQ19GVU5DX1NUUlRPRAorIAorLXVzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS91c3IvYmluJworK3VzcmJpbl9leGVjZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nCisgQUNfU1VCU1QoW3VzcmJpbl9leGVjZGlyXSkKKyAKKyBBTV9HTlVfR0VUVEVYVF9WRVJTSU9OKFswLjE0LjFdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHJvY3BzL3Byb2Nwcy9zeXNjdGwuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGU3NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHMvc3lzY3RsLmNvbmYKQEAgLTAsMCArMSw2NCBAQAorIyBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB0YWtlbiBmcm9tIERlYmlhbi4KKyMKKyMgL2V0Yy9zeXNjdGwuY29uZiAtIENvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc2V0dGluZyBzeXN0ZW0gdmFyaWFibGVzCisjIFNlZSBzeXNjdGwuY29uZiAoNSkgZm9yIGluZm9ybWF0aW9uLgorIworCisja2VybmVsLmRvbWFpbm5hbWUgPSBleGFtcGxlLmNvbQorCisjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIHRvIHN0b3AgbG93LWxldmVsIG1lc3NhZ2VzIG9uIGNvbnNvbGUKKyNrZXJuZWwucHJpbnRrID0gNCA0IDEgNworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIzMKKyMgRnVuY3Rpb25zIHByZXZpb3VzbHkgZm91bmQgaW4gbmV0YmFzZQorIworCisjIFVuY29tbWVudCB0aGUgbmV4dCB0d28gbGluZXMgdG8gZW5hYmxlIFNwb29mIHByb3RlY3Rpb24gKHJldmVyc2UtcGF0aCBmaWx0ZXIpCisjIFR1cm4gb24gU291cmNlIEFkZHJlc3MgVmVyaWZpY2F0aW9uIGluIGFsbCBpbnRlcmZhY2VzIHRvCisjIHByZXZlbnQgc29tZSBzcG9vZmluZyBhdHRhY2tzCituZXQuaXB2NC5jb25mLmRlZmF1bHQucnBfZmlsdGVyPTEKK25ldC5pcHY0LmNvbmYuYWxsLnJwX2ZpbHRlcj0xCisKKyMgVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gZW5hYmxlIFRDUC9JUCBTWU4gY29va2llcworI25ldC5pcHY0LnRjcF9zeW5jb29raWVzPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgcGFja2V0IGZvcndhcmRpbmcgZm9yIElQdjQKKyNuZXQuaXB2NC5pcF9mb3J3YXJkPTEKKworIyBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSB0byBlbmFibGUgcGFja2V0IGZvcndhcmRpbmcgZm9yIElQdjYKKyNuZXQuaXB2Ni5jb25mLmFsbC5mb3J3YXJkaW5nPTEKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEFkZGl0aW9uYWwgc2V0dGluZ3MgLSB0aGVzZSBzZXR0aW5ncyBjYW4gaW1wcm92ZSB0aGUgbmV0d29yaworIyBzZWN1cml0eSBvZiB0aGUgaG9zdCBhbmQgcHJldmVudCBhZ2FpbnN0IHNvbWUgbmV0d29yayBhdHRhY2tzCisjIGluY2x1ZGluZyBzcG9vZmluZyBhdHRhY2tzIGFuZCBtYW4gaW4gdGhlIG1pZGRsZSBhdHRhY2tzIHRocm91Z2gKKyMgcmVkaXJlY3Rpb24uIFNvbWUgbmV0d29yayBlbnZpcm9ubWVudHMsIGhvd2V2ZXIsIHJlcXVpcmUgdGhhdCB0aGVzZQorIyBzZXR0aW5ncyBhcmUgZGlzYWJsZWQgc28gcmV2aWV3IGFuZCBlbmFibGUgdGhlbSBhcyBuZWVkZWQuCisjCisjIElnbm9yZSBJQ01QIGJyb2FkY2FzdHMKKyNuZXQuaXB2NC5pY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMgPSAxCisjCisjIElnbm9yZSBib2d1cyBJQ01QIGVycm9ycworI25ldC5pcHY0LmljbXBfaWdub3JlX2JvZ3VzX2Vycm9yX3Jlc3BvbnNlcyA9IDEKKyMKKyMgRG8gbm90IGFjY2VwdCBJQ01QIHJlZGlyZWN0cyAocHJldmVudCBNSVRNIGF0dGFja3MpCisjbmV0LmlwdjQuY29uZi5hbGwuYWNjZXB0X3JlZGlyZWN0cyA9IDAKKyNuZXQuaXB2Ni5jb25mLmFsbC5hY2NlcHRfcmVkaXJlY3RzID0gMAorIyBfb3JfCisjIEFjY2VwdCBJQ01QIHJlZGlyZWN0cyBvbmx5IGZvciBnYXRld2F5cyBsaXN0ZWQgaW4gb3VyIGRlZmF1bHQKKyMgZ2F0ZXdheSBsaXN0IChlbmFibGVkIGJ5IGRlZmF1bHQpCisjIG5ldC5pcHY0LmNvbmYuYWxsLnNlY3VyZV9yZWRpcmVjdHMgPSAxCisjCisjIERvIG5vdCBzZW5kIElDTVAgcmVkaXJlY3RzICh3ZSBhcmUgbm90IGEgcm91dGVyKQorI25ldC5pcHY0LmNvbmYuYWxsLnNlbmRfcmVkaXJlY3RzID0gMAorIworIyBEbyBub3QgYWNjZXB0IElQIHNvdXJjZSByb3V0ZSBwYWNrZXRzICh3ZSBhcmUgbm90IGEgcm91dGVyKQorI25ldC5pcHY0LmNvbmYuYWxsLmFjY2VwdF9zb3VyY2Vfcm91dGUgPSAwCisjbmV0LmlwdjYuY29uZi5hbGwuYWNjZXB0X3NvdXJjZV9yb3V0ZSA9IDAKKyMKKyMgTG9nIE1hcnRpYW4gUGFja2V0cworI25ldC5pcHY0LmNvbmYuYWxsLmxvZ19tYXJ0aWFucyA9IDEKKyMKKworI2tlcm5lbC5zaG1tYXggPSAxNDE3NjI1NjAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wcm9jcHMvcHJvY3BzXzMuMy4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZhYmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Byb2Nwcy9wcm9jcHNfMy4zLjEwLmJiCkBAIC0wLDAgKzEsNjcgQEAKK1NVTU1BUlkgPSAiU3lzdGVtIGFuZCBwcm9jZXNzIG1vbml0b3JpbmcgdXRpbGl0aWVzIgorREVTQ1JJUFRJT04gPSAiUHJvY3BzIGNvbnRhaW5zIGEgc2V0IG9mIHN5c3RlbSB1dGlsaXRpZXMgdGhhdCBwcm92aWRlIHN5c3RlbSBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZXMgdXNpbmcgXAordGhlIC9wcm9jIGZpbGVzeXN0ZW0uIFRoZSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBwcm9ncmFtcyBwcywgdG9wLCB2bXN0YXQsIHcsIGtpbGwsIGFuZCBza2lsbC4iCitIT01FUEFHRSA9ICJodHRwczovL2dpdG9yaW91cy5vcmcvcHJvY3BzIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTT0iZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NGNmNjZhNDk4NDEyMDAwN2M5ODgxY2M4NzFjZjQ5ZGIgXAorICAgICAgICAgICAgICAgICAiCisKK0RFUEVORFMgPSAibmN1cnNlcyIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcgdXBkYXRlLWFsdGVybmF0aXZlcworCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L3Byb2plY3QvcHJvY3BzLW5nL1Byb2R1Y3Rpb24vcHJvY3BzLW5nLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29uZmlndXJlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c2N0bC5jb25mIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZmI3ZjNmNmJmOTJjZTZjNWM5ZWQ5OTQ5YWU4NThmZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMDJlNmY5ODk3NGRmY2VhYjc5ODg0ZGY5MDJjYTNkZjMwYjBlOWJhZDZkNzZhZWUwZmI1ZGNlMTdmMjY3ZjA0IgorCitTID0gIiR7V09SS0RJUn0vcHJvY3BzLW5nLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2tpbGwgLS1kaXNhYmxlLW1vZGVybi10b3AiCisKK0NQUEZMQUdTICs9ICItSSR7U30iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfQorCVsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdICYmIGZvciBpIGluICR7YmFzZV9iaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtiaW5kaXJ9LyRpICR7RH0ke2Jhc2VfYmluZGlyfS8kaTsgZG9uZQorCWluc3RhbGwgLWQgJHtEfSR7YmFzZV9zYmluZGlyfQorCVsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF0gJiYgZm9yIGkgaW4gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9OyBkbyBtdiAke0R9JHtzYmluZGlyfS8kaSAke0R9JHtiYXNlX3NiaW5kaXJ9LyRpOyBkb25lCisgICAgICAgIGlmIFsgIiR7YmFzZV9zYmluZGlyfSIgIT0gIiR7c2JpbmRpcn0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICBybWRpciAke0R9JHtzYmluZGlyfQorICAgICAgICBmaQorCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYKKyAgICAgICAgaWYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsJ3N5c3RlbWQnLCd0cnVlJywnZmFsc2UnLGQpfTsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQKKyAgICAgICAgICAgICAgICBsbiAtc2YgLi4vc3lzY3RsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzY3RsLmQvOTktc3lzY3RsLmNvbmYKKyAgICAgICAgZmkKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vc3lzY3RsLmNvbmYiCisKK2JpbmRpcl9wcm9ncyA9ICJmcmVlIHBraWxsIHBtYXAgcGdyZXAgcHdkeCBza2lsbCBzbmljZSB0b3AgdXB0aW1lIgorYmFzZV9iaW5kaXJfcHJvZ3MgKz0gImtpbGwgcGlkb2YgcHMgd2F0Y2giCitiYXNlX3NiaW5kaXJfcHJvZ3MgKz0gInN5c2N0bCIKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICIke2JpbmRpcl9wcm9nc30gJHtiYXNlX2JpbmRpcl9wcm9nc30gJHtiYXNlX3NiaW5kaXJfcHJvZ3N9IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAia2lsbC4xIHVwdGltZS4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tpbGwuMV0gPSAiJHttYW5kaXJ9L21hbjEva2lsbC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3VwdGltZS4xXSA9ICIke21hbmRpcn0vbWFuMS91cHRpbWUuMSIKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGZvciBwcm9nIGluIGQuZ2V0VmFyKCdiYXNlX2JpbmRpcl9wcm9ncycsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGQuc2V0VmFyRmxhZygnQUxURVJOQVRJVkVfTElOS19OQU1FJywgcHJvZywgJyVzLyVzJyAlIChkLmdldFZhcignYmFzZV9iaW5kaXInLCBUcnVlKSwgcHJvZykpCisKKyAgICBmb3IgcHJvZyBpbiBkLmdldFZhcignYmFzZV9zYmluZGlyX3Byb2dzJywgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgZC5zZXRWYXJGbGFnKCdBTFRFUk5BVElWRV9MSU5LX05BTUUnLCBwcm9nLCAnJXMvJXMnICUgKGQuZ2V0VmFyKCdiYXNlX3NiaW5kaXInLCBUcnVlKSwgcHJvZykpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ZDYwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvZmlsZXMvMDAwMS1UeXBvLWluLWZ1c2VyLW1ha2VzLU0tb24tYWxsLXRoZS10aW1lLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gMzYzOGNjNTViNGQwODg1MWZhYmE0NjYzNWQ3MzdiMjRkMDE2NjY1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEJyYWQgSm9yc2NoIDxhbm9taWVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogRnJpLCAyOCBGZWIgMjAxNCAyMTo1NTowMiArMTEwMAorU3ViamVjdDogW1BBVENIXSBUeXBvIGluIGZ1c2VyIG1ha2VzIC1NIG9uIGFsbCB0aGUgdGltZQorCitCcmFkIGZvdW5kIHRoYXQgZnVzZXIgaGFkIHRoZSAtTSBvcHRpb24gb24gYWxsIHRoZSB0aW1lLgorQSBzaW1wbGUgYnV0IHNpZ25pZmljYW50IHR5cG8gY2F1c2VkIHRoaXMsIHRoYW5rcyB0aGUgdGhlIHBhdGNoLgorCitCdWctRGViaWFuOiBodHRwOi8vYnVncy5kZWJpYW4ub3JnLzc0MDI3NQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IENyYWlnIFNtYWxsIDxjc21hbGxAZW5jLmNvbS5hdT4KKy0tLQorIENoYW5nZUxvZyAgIHwgNCArKysrCisgc3JjL2Z1c2VyLmMgfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZworaW5kZXggZmQxY2NjZi4uZTVmNzg0YyAxMDA2NDQKKy0tLSBhL0NoYW5nZUxvZworKysrIGIvQ2hhbmdlTG9nCitAQCAtMSwzICsxLDcgQEAKKytDaGFuZ2VzIGluIDIyLjIyCisrPT09PT09PT09PT09PT09PQorKwkqIEZpeGVkIHR5cG8gaW4gZnVzZXIgd2hpY2ggaGFzIC1NIG9uIERlYmlhbiAjNzQwMjc1CisrCisgQ2hhbmdlcyBpbiAyMi4yMQorID09PT09PT09PT09PT09PT0KKyAJKiBNaXNzaW5nIGNvbW1hIGluIGZ1c2VyKDEpIGFkZGVkIERlYmlhbiAjNzAyMzkxCitkaWZmIC0tZ2l0IGEvc3JjL2Z1c2VyLmMgYi9zcmMvZnVzZXIuYworaW5kZXggYjQ4NWY2NS4uMzg5YjMwMiAxMDA2NDQKKy0tLSBhL3NyYy9mdXNlci5jCisrKysgYi9zcmMvZnVzZXIuYworQEAgLTExNzQsNyArMTE3NCw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQl1c2FnZShfKCJObyBwcm9jZXNzIHNwZWNpZmljYXRpb24gZ2l2ZW4iKSk7CisgCisgCS8qIENoZWNrIGlmIC1NIGZsYWcgd2FzIHVzZWQgYW5kIGlmIHNvIGNoZWNrIG1vdW50cyAqLworLQlpZiAob3B0cyAqIE9QVF9JU01PVU5UUE9JTlQpIHsKKysJaWYgKG9wdHMgJiBPUFRfSVNNT1VOVFBPSU5UKSB7CisgCSAgICBjaGVja19tb3VudHBvaW50cygmbW91bnRzLCAmbmFtZXNfaGVhZCwgJm5hbWVzX3RhaWwpOworIAl9CisgCistLSAKKzEuOC40LjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9maWxlcy8wMDAyLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YWZjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL2ZpbGVzLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorRnJvbSBhYTY2YWZlY2Q4YmE5Y2M0MTM5ZjI1YWIxNWVjMzE1MTczNDEzYTdkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBCYXJrZXIgPHBhdWxAcGF1bGJhcmtlci5tZS51az4KK0RhdGU6IFdlZCwgMjAgQXVnIDIwMTQgMTA6MzE6MzcgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gSW5jbHVkZSA8bGltaXRzLmg+IGZvciBQQVRIX01BWAorCitXaGVuIGJ1aWxkaW5nIGFnYWluc3QgbXVzbCBsaWJjLCBQQVRIX01BWCBpcyBkZWZpbmVkIGluIDxsaW1pdHMuaD4uCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgQmFya2VyIDxwYXVsQHBhdWxiYXJrZXIubWUudWs+CisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQgKFNob3VsZCBiZSBpbiBuZXh0IHJlbGVhc2UgYWZ0ZXIgMjIuMjEpCistLS0KKyBzcmMvcHN0cmVlLmMgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3NyYy9wc3RyZWUuYyBiL3NyYy9wc3RyZWUuYworaW5kZXggMDcxZTZjNC4uMGQyODI2MCAxMDA2NDQKKy0tLSBhL3NyYy9wc3RyZWUuYworKysrIGIvc3JjL3BzdHJlZS5jCitAQCAtNDEsNiArNDEsNyBAQAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorIAorICNpbmNsdWRlICJpMThuLmgiCisgI2luY2x1ZGUgImNvbW0uaCIKKy0tIAorMi4wLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3BzbWlzYy9wc21pc2MuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZTA2NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzYy5pbmMKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJVdGlsaXRpZXMgZm9yIG1hbmFnaW5nIHByb2Nlc3NlcyBvbiB5b3VyIHN5c3RlbSIKK0RFU0NSSVBUSU9OID0gIlRoZSBwc21pc2MgcGFja2FnZSBjb250YWlucyB1dGlsaXRpZXMgZm9yIG1hbmFnaW5nIHByb2Nlc3NlcyBvbiB5b3VyIFwKK3N5c3RlbTogcHN0cmVlLCBraWxsYWxsIGFuZCBmdXNlci4gIFRoZSBwc3RyZWUgY29tbWFuZCBkaXNwbGF5cyBhIHRyZWUgXAorc3RydWN0dXJlIG9mIGFsbCBvZiB0aGUgcnVubmluZyBwcm9jZXNzZXMgb24geW91ciBzeXN0ZW0uICBUaGUga2lsbGFsbCBcCitjb21tYW5kIHNlbmRzIGEgc3BlY2lmaWVkIHNpZ25hbCAoU0lHVEVSTSBpZiBub3RoaW5nIGlzIHNwZWNpZmllZCkgdG8gXAorcHJvY2Vzc2VzIGlkZW50aWZpZWQgYnkgbmFtZS4gIFRoZSBmdXNlciBjb21tYW5kIGlkZW50aWZpZXMgdGhlIFBJRHMgXAorb2YgcHJvY2Vzc2VzIHRoYXQgYXJlIHVzaW5nIHNwZWNpZmllZCBmaWxlcyBvciBmaWxlc3lzdGVtcy4iCitTRUNUSU9OID0gImJhc2UiCitERVBFTkRTID0gIm5jdXJzZXMgdmlydHVhbC9saWJpbnRsIgorTElDRU5TRSA9ICJHUEx2MiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHNtaXNjL3BzbWlzYy0ke1BWfS50YXIuZ3oiCisKK1MgPSAiJHtXT1JLRElSfS9wc21pc2MtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworUEFDS0FHRVMgPSsgImZ1c2VyIGZ1c2VyLWRvYyBraWxsYWxsIGtpbGxhbGwtZG9jIHBzdHJlZSBwc3RyZWUtZG9jIgorUEFDS0FHRVMgKz0gInBzbWlzYy1leHRyYXMiCisKK0ZJTEVTXyR7UE59ID0gIiIKK1JERVBFTkRTXyR7UE59ID0gImZ1c2VyIGtpbGxhbGwgcHN0cmVlIgorCitGSUxFU19mdXNlciA9ICIke2JpbmRpcn0vZnVzZXIuJHtCUE59IgorRklMRVNfZnVzZXItZG9jID0gIiR7bWFuZGlyfS9tYW4xL2Z1c2VyKiIKKworRklMRVNfa2lsbGFsbCA9ICIke2JpbmRpcn0va2lsbGFsbC4ke0JQTn0iCitGSUxFU19raWxsYWxsLWRvYyA9ICIke21hbmRpcn0vbWFuMS9raWxsYWxsKiIKKworRklMRVNfcHN0cmVlID0gIiR7YmluZGlyfS9wc3RyZWUiCitGSUxFU19wc3RyZWUtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BzdHJlZSoiCisKK0ZJTEVTX3BzbWlzYy1leHRyYXMgPSAiJHtiaW5kaXJ9IgorRklMRVNfcHNtaXNjLWV4dHJhcy1kb2MgPSAiJHttYW5kaXJ9IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiOTAiCisKK0FMVEVSTkFUSVZFX2tpbGxhbGwgPSAia2lsbGFsbCIKKworQUxURVJOQVRJVkVfZnVzZXIgPSAiZnVzZXIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9wc21pc2MvcHNtaXNjXzIyLjIxLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWJhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcHNtaXNjL3BzbWlzY18yMi4yMS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHBzbWlzYy5pbmMKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wNjM2ZTczZmYwMjE1ZThkNjcyZGM0YzMyYzMxN2JiMyIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzNWMwZmQ2ZWIyMDgyODgyNjJiMzg1ZmE2NTZmMWJmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3MzIzY2FkNjE5MjEwODQ1YjY5NmQ3ZDcyMmMzODM4NTJiMmFjYjVjNDliNWIwODUyYzRmMjljNzdhODE0NWEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLVR5cG8taW4tZnVzZXItbWFrZXMtTS1vbi1hbGwtdGhlLXRpbWUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDItSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggXAorICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL2NvbmZpZy10Y3B3cmFwcGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9jb25maWctdGNwd3JhcHBlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0N2ZiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9jb25maWctdGNwd3JhcHBlcnMucGF0Y2gKQEAgLTAsMCArMSw3NSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKy0tLSBxdW90YS10b29scy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIHF1b3RhLXRvb2xzL2NvbmZpZ3VyZS5pbgorQEAgLTE1MSwzMyArMTUxLDQ2IEBAIEFDX1NVQlNUKFFVT1RBX05FVExJTktfUFJPRykKKyBBQ19TVUJTVChORVRMSU5LTElCUykKKworIEFDX1NFQVJDSF9MSUJTKGdldGhvc3RieW5hbWUsIG5zbCkKKy1BQ19NU0dfQ0hFQ0tJTkcoZm9yIGhvc3RfYWNjZXNzIGluIC1sd3JhcCkKKy1BQ19DQUNIRV9WQUwoYWNfY3ZfbGliX3dyYXBfbWFpbiwKKy0Jc2F2ZWRfTElCUz0iJExJQlMiCistCUxJQlM9IiRMSUJTIC1sd3JhcCIKKy0JW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKy0JI2luY2x1ZGUgPHN0ZGlvLmg+CistCSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0JI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0JI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKy0JI2luY2x1ZGUgPHRjcGQuaD4KKy0Jc3RydWN0IHJlcXVlc3RfaW5mbyByZXF1ZXN0OworLQlpbnQgZGVueV9zZXZlcml0eSwgYWxsb3dfc2V2ZXJpdHk7XV0sW1tob3N0c19hY2Nlc3MoJnJlcXVlc3QpO11dKV0sCistCWRubCBXZSBhbHdheXMgcmVzdG9yZSBMSUJTIGFzIHdlIGFkZCAtbHdyYXAgaW4gdGhlIG5leHQgY2hlY2sKKy0JW2FjX2N2X2xpYl93cmFwX21haW49eWVzOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQoeWVzKV0sCistCVthY19jdl9saWJfd3JhcF9tYWluPW5vOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQobm8pXSkKKy0JXSkKKworLWlmIHRlc3QgJHthY19jdl9saWJfd3JhcF9tYWlufSA9IHllczsgdGhlbgorLQlBQ19DSEVDS19IRUFERVIodGNwZC5oLCwgWworLQkJZWNobyAnRVJST1I6IGNvdWxkIG5vdCBmaW5kIHRjcGQuaCAtIG1pc3NpbmcgVENQIHdyYXBwZXJzIHBhY2thZ2UnCistCQlleGl0IDEKKy0JXSkKKy0JTElCUz0iJExJQlMgLWx3cmFwIgorLQlBQ19ERUZJTkUoW0hPU1RTX0FDQ0VTU10sIDEsIFtVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhZF0pCistCUNPTVBJTEVfT1BUUz0iJENPTVBJTEVfT1BUUyBIT1NUU19BQ0NFU1MiCisrQUNfQVJHX1dJVEgodGNwd3JhcHBlcnMsCisrCVsgIC0td2l0aC10Y3B3cmFwcGVycz1beWVzL25vL3RyeV0gICBVc2UgaG9zdHMuYWxsb3cgYW5kIGhvc3RzLmRlbnkgZm9yIGFjY2VzcyBjaGVja2luZyBvZiBycGMucnF1b3RhIFtkZWZhdWx0PXllcywgaWYgYXZhaWxhYmxlLl1dLAorKwksCisrCXdpdGhfdGNwd3JhcHBlcnM9InRyeSIpCisrCisraWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4bm87IHRoZW4KKysJQUNfTVNHX0NIRUNLSU5HKGZvciBob3N0X2FjY2VzcyBpbiAtbHdyYXApCisrCUFDX0NBQ0hFX1ZBTChhY19jdl9saWJfd3JhcF9tYWluLAorKwkJc2F2ZWRfTElCUz0iJExJQlMiCisrCQlMSUJTPSIkTElCUyAtbHdyYXAiCisrCQlbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworKwkJI2luY2x1ZGUgPHN0ZGlvLmg+CisrCQkjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCQkjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKwkJI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKysJCSNpbmNsdWRlIDx0Y3BkLmg+CisrCQlzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CisrCQlpbnQgZGVueV9zZXZlcml0eSwgYWxsb3dfc2V2ZXJpdHk7XV0sW1tob3N0c19hY2Nlc3MoJnJlcXVlc3QpO11dKV0sCisrCQlkbmwgV2UgYWx3YXlzIHJlc3RvcmUgTElCUyBhcyB3ZSBhZGQgLWx3cmFwIGluIHRoZSBuZXh0IHRyeQorKwkJW2FjX2N2X2xpYl93cmFwX21haW49eWVzOyBMSUJTPSIkc2F2ZWRfTElCUyI7IEFDX01TR19SRVNVTFQoeWVzKV0sCisrCQlbYWNfY3ZfbGliX3dyYXBfbWFpbj1ubzsgTElCUz0iJHNhdmVkX0xJQlMiOyBBQ19NU0dfUkVTVUxUKG5vKV0pCisrCQldKQorKworKwlpZiB0ZXN0ICJ4JGFjX2N2X2xpYl93cmFwX21haW4iID0geHllczsgdGhlbgorKwkJQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwsIFsKKysJCQlpZiB0ZXN0ICJ4JHdpdGhfdGNwd3JhcHBlcnMiICE9IHh0cnk7IHRoZW4KKysJCQkJQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgZmluZCB0Y3BkLmggLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlXSkKKysJCQlmaQorKwkJXSkKKysKKysJCUxJQlM9IiRMSUJTIC1sd3JhcCIKKysJCUFDX0RFRklORShbSE9TVFNfQUNDRVNTXSwgMSwgW1VzZSBob3N0cy5hbGxvdyBhbmQgaG9zdHMuZGVueSBmb3IgYWNjZXNzIGNoZWNraW5nIG9mIHJwYy5ycXVvdGFkXSkKKysJCUNPTVBJTEVfT1BUUz0iJENPTVBJTEVfT1BUUyBIT1NUU19BQ0NFU1MiCisrCWVsaWYgdGVzdCAieCR3aXRoX3RjcHdyYXBwZXJzIiAhPSB4dHJ5OyB0aGVuCisrCQlBQ19NU0dfRVJST1IoW2NvdWxkIG5vdCBmaW5kIGxpYndyYXAgLSBtaXNzaW5nIFRDUCB3cmFwcGVycyBwYWNrYWdlXSkKKysJZmkKKyBmaQorCisrCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorIEFDX0NfSU5MSU5FCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvZmNudGwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdlNjBmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9mY250bC5wYXRjaApAQCAtMCwwICsxLDExMyBAQAorSW5jbHVkZSBmY250bC5oIHRvIHBhY2lmeSBjb21waWxlciBlcnJvcnMgb24gbXVzbAorbGlrZQorCitlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2xvZmZfdCcKK0NvdmVyIHJwYyBoZWFkZXJzIHVuZGVyIHByb3BlciBjb25kaXRpb25hbAorRG9udCB1c2UgX19QIGl0cyB1bmRlZmluZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK25kZXg6IHF1b3RhLXRvb2xzL3F1b3RhLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0luZGV4OiBxdW90YS10b29scy9xdW90YS5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90YS5oCisrKysgcXVvdGEtdG9vbHMvcXVvdGEuaAorQEAgLTE2NSw2ICsxNjUsNiBAQCBlbnVtIHsKKyAJI2VuZGlmCisgI2VuZGlmCisgCistbG9uZyBxdW90YWN0bCBfX1AoKGludCwgY29uc3QgY2hhciAqLCBxaWRfdCwgY2FkZHJfdCkpOworK2xvbmcgcXVvdGFjdGwgKGludCwgY29uc3QgY2hhciAqLCBxaWRfdCwgY2FkZHJfdCk7CisgCisgI2VuZGlmIC8qIF9RVU9UQV8gKi8KK0luZGV4OiBxdW90YS10b29scy9xdW90YWNoZWNrLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhY2hlY2suYworKysrIHF1b3RhLXRvb2xzL3F1b3RhY2hlY2suYworQEAgLTE5LDYgKzE5LDcgQEAKKyAjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorKyNpbmNsdWRlIDxmY250bC5oPgorIAorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0luZGV4OiBxdW90YS10b29scy9xdW90YWlvLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3RhaW8uYworKysrIHF1b3RhLXRvb2xzL3F1b3RhaW8uYworQEAgLTEyLDYgKzEyLDcgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitJbmRleDogcXVvdGEtdG9vbHMvZHFibGtfdjIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvZHFibGtfdjIuaAorKysrIHF1b3RhLXRvb2xzL2RxYmxrX3YyLmgKK0BAIC03LDYgKzcsNyBAQAorICNpZm5kZWYgR1VBUkRfRFFCTEtfVjJfSAorICNkZWZpbmUgR1VBUkRfRFFCTEtfVjJfSAorIAorKyNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSAicXVvdGFfdHJlZS5oIgorIAorSW5kZXg6IHF1b3RhLXRvb2xzL3F1b3Rhb3BzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBxdW90YS10b29scy5vcmlnL3F1b3Rhb3BzLmMKKysrKyBxdW90YS10b29scy9xdW90YW9wcy5jCitAQCAtMzQsNyArMzQsOSBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWYgZGVmaW5lZChSUEMpCisgI2luY2x1ZGUgPHJwYy9ycGMuaD4KKysjZW5kaWYKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPHN5cy9maWxlLmg+CitJbmRleDogcXVvdGEtdG9vbHMvcnF1b3RhX2NsaWVudC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9ycXVvdGFfY2xpZW50LmMKKysrKyBxdW90YS10b29scy9ycXVvdGFfY2xpZW50LmMKK0BAIC0xOSw3ICsxOSw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CitAQCAtMzUsNyArMzcsOSBAQAorICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAibW50b3B0LmgiCisrI2lmIGRlZmluZWQoUlBDKQorICNpbmNsdWRlICJycXVvdGEuaCIKKysjZW5kaWYKKyAjaW5jbHVkZSAiY29tbW9uLmgiCisgI2luY2x1ZGUgInF1b3RhaW8uaCIKKyAjaW5jbHVkZSAicXVvdGFzeXMuaCIKK0luZGV4OiBxdW90YS10b29scy9zZXRxdW90YS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9zZXRxdW90YS5jCisrKysgcXVvdGEtdG9vbHMvc2V0cXVvdGEuYworQEAgLTcsNyArNyw5IEBACisgCisgI2luY2x1ZGUgImNvbmZpZy5oIgorIAorKyNpZiBkZWZpbmVkKFJQQykKKyAjaW5jbHVkZSA8cnBjL3JwYy5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ0MmQ5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YS9yZW1vdmVfbm9uX3Bvc2l4X3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMTg1IEBACitVc2UgcHJvcGVyIEM5OSBpbnRlZ2VyIHR5cGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcXVvdGEtdG9vbHMvYnlsYWJlbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9ieWxhYmVsLmMKKysrKyBxdW90YS10b29scy9ieWxhYmVsLmMKK0BAIC0yMCw2ICsyMCw3IEBACisgI2luY2x1ZGUgPGN0eXBlLmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAiYnlsYWJlbC5oIgorICNpbmNsdWRlICJjb21tb24uaCIKK0BAIC0zNywzMiArMzgsMzIgQEAgc3RhdGljIHN0cnVjdCB1dWlkQ2FjaGVfcyB7CisgCisgI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDCTB4RUY1MworIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfZHVtbXkxWzU2XTsKKy0JdV9jaGFyIHNfbWFnaWNbMl07CistCXVfY2hhciBzX2R1bW15Mls0Nl07CistCXVfY2hhciBzX3V1aWRbMTZdOworLQl1X2NoYXIgc192b2x1bWVfbmFtZVsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTFbNTZdOworKwl1aW50OF90IHNfbWFnaWNbMl07CisrCXVpbnQ4X3Qgc19kdW1teTJbNDZdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc192b2x1bWVfbmFtZVsxNl07CisgfTsKKyAKKy0jZGVmaW5lIGV4dDJtYWdpYyhzKQkoKHVpbnQpIHMuc19tYWdpY1swXSArICgoKHVpbnQpIHMuc19tYWdpY1sxXSkgPDwgOCkpCisrI2RlZmluZSBleHQybWFnaWMocykJKCh1aW50MzJfdCkgcy5zX21hZ2ljWzBdICsgKCgodWludDMyX3QpIHMuc19tYWdpY1sxXSkgPDwgOCkpCisgCisgI2RlZmluZSBYRlNfU1VQRVJfTUFHSUMgIlhGU0IiCisgI2RlZmluZSBYRlNfU1VQRVJfTUFHSUMyICJCU0ZYIgorIHN0cnVjdCB4ZnNfc3VwZXJfYmxvY2sgeworLQl1X2NoYXIgc19tYWdpY1s0XTsKKy0JdV9jaGFyIHNfZHVtbXlbMjhdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfZHVtbXkyWzYwXTsKKy0JdV9jaGFyIHNfZnNuYW1lWzEyXTsKKysJdWludDhfdCBzX21hZ2ljWzRdOworKwl1aW50OF90IHNfZHVtbXlbMjhdOworKwl1aW50OF90IHNfdXVpZFsxNl07CisrCXVpbnQ4X3Qgc19kdW1teTJbNjBdOworKwl1aW50OF90IHNfZnNuYW1lWzEyXTsKKyB9OworIAorICNkZWZpbmUgUkVJU0VSX1NVUEVSX01BR0lDCSJSZUlzRXIyRnMiCisgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrIHsKKy0JdV9jaGFyIHNfZHVtbXkxWzUyXTsKKy0JdV9jaGFyIHNfbWFnaWNbMTBdOworLQl1X2NoYXIgc19kdW1teTJbMjJdOworLQl1X2NoYXIgc191dWlkWzE2XTsKKy0JdV9jaGFyIHNfdm9sdW1lX25hbWVbMTZdOworKwl1aW50OF90IHNfZHVtbXkxWzUyXTsKKysJdWludDhfdCBzX21hZ2ljWzEwXTsKKysJdWludDhfdCBzX2R1bW15MlsyMl07CisrCXVpbnQ4X3Qgc191dWlkWzE2XTsKKysJdWludDhfdCBzX3ZvbHVtZV9uYW1lWzE2XTsKKyB9OworIAorIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3dhcHBlZCh1bnNpZ25lZCBzaG9ydCBhKQorQEAgLTIyMiw3ICsyMjMsNyBAQCBzdGF0aWMgY2hhciAqZ2V0X3NwZWNfYnlfeChpbnQgbiwgY29uc3QKKyAJcmV0dXJuIE5VTEw7CisgfQorIAorLXN0YXRpYyB1X2NoYXIgZnJvbWhleChjaGFyIGMpCisrc3RhdGljIHVpbnQ4X3QgZnJvbWhleChjaGFyIGMpCisgeworIAlpZiAoaXNkaWdpdChjKSkKKyAJCXJldHVybiAoYyAtICcwJyk7CitAQCAtMjM0LDcgKzIzNSw3IEBAIHN0YXRpYyB1X2NoYXIgZnJvbWhleChjaGFyIGMpCisgCisgc3RhdGljIGNoYXIgKmdldF9zcGVjX2J5X3V1aWQoY29uc3QgY2hhciAqcykKKyB7CistCXVfY2hhciB1dWlkWzE2XTsKKysJdWludDhfdCB1dWlkWzE2XTsKKyAJaW50IGk7CisgCisgCWlmIChzdHJsZW4ocykgIT0gMzYgfHwgc1s4XSAhPSAnLScgfHwgc1sxM10gIT0gJy0nIHx8IHNbMThdICE9ICctJyB8fCBzWzIzXSAhPSAnLScpCitJbmRleDogcXVvdGEtdG9vbHMvcXVvdC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90LmMKKysrKyBxdW90YS10b29scy9xdW90LmMKK0BAIC00Nyw2ICs0Nyw3IEBACisgI2luY2x1ZGUgPHV0bXAuaD4KKyAjaW5jbHVkZSA8cHdkLmg+CisgI2luY2x1ZGUgPGdycC5oPgorKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyAKKyAjaW5jbHVkZSAicG90LmgiCisgI2luY2x1ZGUgInF1b3QuaCIKK0BAIC01Niw4ICs1Nyw4IEBACisgI2luY2x1ZGUgInF1b3Rhc3lzLmgiCisgCisgI2RlZmluZQlUU0laRQk1MDAKKy1zdGF0aWMgX191aW50NjRfdCBzaXplc1tUU0laRV07Cistc3RhdGljIF9fdWludDY0X3Qgb3ZlcmZsb3c7Cisrc3RhdGljIHVpbnQ2NF90IHNpemVzW1RTSVpFXTsKKytzdGF0aWMgdWludDY0X3Qgb3ZlcmZsb3c7CisgCisgc3RhdGljIGludCBhZmxhZzsKKyBzdGF0aWMgaW50IGNmbGFnOworQEAgLTcyLDcgKzczLDcgQEAgc3RhdGljIHRpbWVfdCBub3c7CisgY2hhciAqcHJvZ25hbWU7CisgCisgc3RhdGljIHZvaWQgbW91bnR0YWJsZSh2b2lkKTsKKy1zdGF0aWMgY2hhciAqaWRuYW1lKF9fdWludDMyX3QsIGludCk7Cisrc3RhdGljIGNoYXIgKmlkbmFtZSh1aW50MzJfdCwgaW50KTsKKyBzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7Cisgc3RhdGljIHZvaWQgY3JlcG9ydChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgCitAQCAtMTczLDcgKzE3NCw3IEBAIHN0YXRpYyBpbnQgcWNtcChkdV90ICogcDEsIGR1X3QgKiBwMikKKyBzdGF0aWMgdm9pZCBjcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbnN0IGNoYXIgKmZzZGlyKQorIHsKKyAJaW50IGk7CistCV9fdWludDY0X3QgdCA9IDA7CisrCXVpbnQ2NF90IHQgPSAwOworIAorIAlwcmludGYoXygiJXMgKCVzKTpcbiIpLCBmaWxlLCBmc2Rpcik7CisgCWZvciAoaSA9IDA7IGkgPCBUU0laRSAtIDE7IGkrKykKK0BAIC0yMTksNyArMjIwLDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKmZpbGUsIGNvbgorIAl9CisgfQorIAorLXN0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIF9fdWludDMyX3QgaWQsIGludCBieWlkKQorK3N0YXRpYyBpZGNhY2hlX3QgKmdldG5leHRlbnQoaW50IHR5cGUsIHVpbnQzMl90IGlkLCBpbnQgYnlpZCkKKyB7CisgCXN0cnVjdCBwYXNzd2QgKnB3OworIAlzdHJ1Y3QgZ3JvdXAgICpncjsKK0BAIC0yNDAsNyArMjQxLDcgQEAgc3RhdGljIGlkY2FjaGVfdCAqZ2V0bmV4dGVudChpbnQgdHlwZSwgXworIAlyZXR1cm4gJmlkYzsKKyB9CisgCistc3RhdGljIGNoYXIgKmlkbmFtZShfX3VpbnQzMl90IGlkLCBpbnQgdHlwZSkKKytzdGF0aWMgY2hhciAqaWRuYW1lKHVpbnQzMl90IGlkLCBpbnQgdHlwZSkKKyB7CisgCWlkY2FjaGVfdCAqbmNwLCAqaWRwOworIAlzdGF0aWMgaWRjYWNoZV90IG5jWzJdW05JRF07CitAQCAtMjg2LDggKzI4Nyw4IEBAIHN0YXRpYyB2b2lkIGFjY3RYRlMoeGZzX2JzdGF0X3QgKnApCisgeworIAlyZWdpc3RlciBkdV90ICpkcDsKKyAJZHVfdCAqKmhwOworLQlfX3VpbnQ2NF90IHNpemU7CistCV9fdWludDMyX3QgaSwgaWQ7CisrCXVpbnQ2NF90IHNpemU7CisrCXVpbnQzMl90IGksIGlkOworIAorIAlpZiAoKHAtPmJzX21vZGUgJiBTX0lGTVQpID09IDApCisgCQlyZXR1cm47CitJbmRleDogcXVvdGEtdG9vbHMvcXVvdC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcXVvdGEtdG9vbHMub3JpZy9xdW90LmgKKysrKyBxdW90YS10b29scy9xdW90LmgKK0BAIC0zNSwxOCArMzUsMTggQEAKKyAjZGVmaW5lCVNFQzI0SFIJKDYwKjYwKjI0KQkvKiBzZWNvbmRzIHBlciBkYXkgKi8KKyAKKyB0eXBlZGVmIHN0cnVjdCB7CistCV9fdWludDMyX3QgaWQ7CisrCXVpbnQzMl90IGlkOworIAljaGFyIG5hbWVbVVRfTkFNRVNJWkUgKyAxXTsKKyB9IGlkY2FjaGVfdDsKKyAKKyB0eXBlZGVmIHN0cnVjdCBkdSB7CisgCXN0cnVjdCBkdSAqbmV4dDsKKy0JX191aW50NjRfdCBibG9ja3M7CistCV9fdWludDY0X3QgYmxvY2tzMzA7CistCV9fdWludDY0X3QgYmxvY2tzNjA7CistCV9fdWludDY0X3QgYmxvY2tzOTA7CistCV9fdWludDY0X3QgbmZpbGVzOworLQlfX3VpbnQzMl90IGlkOworKwl1aW50NjRfdCBibG9ja3M7CisrCXVpbnQ2NF90IGJsb2NrczMwOworKwl1aW50NjRfdCBibG9ja3M2MDsKKysJdWludDY0X3QgYmxvY2tzOTA7CisrCXVpbnQ2NF90IG5maWxlczsKKysJdWludDMyX3QgaWQ7CisgfSBkdV90OworIAorICNkZWZpbmUJTkRVCTYwMDAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcXVvdGEvcXVvdGEvcmVwbGFjZV9nZXRycGNieW51bWJlcl9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2EyZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitSZXBsYWNlIGdldHJwY2J5bnVtYmVyX3Igd2l0aCBnZXRycGNieW51bWJlcgorbXVzbCBhbmQgdWNsaWJjIGRvbnQgaW1wbGVtZW50IGl0CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorSW5kZXg6IHF1b3RhLXRvb2xzL3N2Y19zb2NrZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHF1b3RhLXRvb2xzLm9yaWcvc3ZjX3NvY2tldC5jCisrKysgcXVvdGEtdG9vbHMvc3ZjX3NvY2tldC5jCitAQCAtNTUsNyArNTUsOCBAQCBzdGF0aWMgaW50IHN2Y19zb2NrZXQgKHVfbG9uZyBudW1iZXIsIGluCisgCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgCisgCWlmICghcG9ydCkgeworLQkJcmV0ID0gZ2V0cnBjYnludW1iZXJfcihudW1iZXIsICZycGNidWYsIHJwY2RhdGEsIHNpemVvZihycGNkYXRhKSwgJnJwY3ApOworKwkJcnBjcCA9IGdldHJwY2J5bnVtYmVyKG51bWJlcik7CisrCQlyZXQgPSAwOworIAkJaWYgKHJldCA9PSAwICYmIHJwY3AgIT0gTlVMTCkgeworIAkJCS8qIEZpcnN0IHRyeSBuYW1lICovCisgCQkJcmV0ID0gZ2V0c2VydmJ5bmFtZV9yKHJwY3AtPnJfbmFtZSwgcHJvdG8sICZzZXJ2YnVmLCBzZXJ2ZGF0YSwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3F1b3RhL3F1b3RhXzQuMDIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0YjBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9xdW90YS9xdW90YV80LjAyLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiVG9vbHMgZm9yIG1vbml0b3JpbmcgJiBsaW1pdGluZyB1c2VyIGRpc2sgdXNhZ2UgcGVyIGZpbGVzeXN0ZW0iCitTRUNUSU9OID0gImJhc2UiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpbnV4cXVvdGEvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTE4MTM2JmF0aWQ9MTE4MTM2IgorTElDRU5TRSA9ICJCU0QgJiBHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9xdW90YS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzM7bWQ1PTMzMWM3ZDc3NzQ0YmZlMGFkMjQwMjdmMDY1MTAyOGVjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JxdW90YV9zZXJ2ZXIuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1mZTdlMGQ3ZTExYzZmODIwZjhmYTYyYTVhZjcxMjMwZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zdmNfc29ja2V0LmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9MjRkNWE4NzkyZGE0NTkxMDc4NmVlYWM3NTBiZThjZWIiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGludXhxdW90YS9xdW90YS10b29scy8ke1BWfS9xdW90YS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlnLXRjcHdyYXBwZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZjbnRsLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9ub25fcG9zaXhfdHlwZXMucGF0Y2ggXAorCSAgICIKK1NSQ19VUklfYXBwZW5kX2xpYmMtbXVzbCA9ICIgZmlsZTovL3JlcGxhY2VfZ2V0cnBjYnludW1iZXJfci5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImE4YTVkZjI2MjI2MWU2NTk3MTZjY2FkMmE1ZDZkZjBkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY0YzJmNDhhYmY5NGJiZGMzOTZkZjMzZDI3NmYyZTlkMTlhZjU4YzIzMmNiODVlZWY5YzE3NGE3NDdjMzM3OTUiCisKK1MgPSAiJHtXT1JLRElSfS9xdW90YS10b29scyIKKworREVQRU5EUyA9ICJnZXR0ZXh0LW5hdGl2ZSBlMmZzcHJvZ3MiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBnZXR0ZXh0IHBrZ2NvbmZpZworCitDRkxBR1MgKz0gIi1JPSR7aW5jbHVkZWRpcn0vdGlycGMiCitMREZMQUdTICs9ICItbHRpcnBjIgorQVNORUVERUQgPSAiIgorRVhUUkFfT0VNQUtFICs9ICdTVFJJUD0iIicKKworUEFDS0FHRUNPTkZJRyA/Pz0gInRjcC13cmFwcGVycyBycGMgYnNkIgorUEFDS0FHRUNPTkZJR19saWJjLW11c2wgPSAidGNwLXdyYXBwZXJzIHJwYyIKKworUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0td2l0aC10Y3B3cmFwcGVycywtLXdpdGhvdXQtdGNwd3JhcHBlcnMsdGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1tycGNdID0gIi0tZW5hYmxlLXJwYz15ZXMsLS1lbmFibGUtcnBjPW5vLGxpYnRpcnBjIgorUEFDS0FHRUNPTkZJR1tic2RdID0gIi0tZW5hYmxlLWJzZF9iZWhhdmlvdXI9eWVzLC0tZW5hYmxlLWJzZF9iZWhhdmlvdXI9bm8sIgorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgUk9PVERJUj0ke0R9IGluc3RhbGwKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlZjlmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvMDAwMS1Bdm9pZC11c2Utb2YtZ2xpYmMtc3lzLWNkZWZzLmgtaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMjIxIEBACitGcm9tIDJhNDRkODYyMjMzZjIxMjY1ODFlMjkwZDU2OGUxYzhiOGYyZWI5ZjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsbyBMYW5kbWV0ZXIgPGNsYW5kbWV0ZXJAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxOSBGZWIgMjAxNSAxNToyODo0NSArMDAwMAorU3ViamVjdDogW1BBVENIXSBBdm9pZCB1c2Ugb2YgZ2xpYmMgc3lzL2NkZWZzLmggaGVhZGVyCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgc3JjL2NoZWNrX2JvdW5kLmMgIHwgICAgMiArLQorIHNyYy9wbWFwX3N2Yy5jICAgICB8ICAgMTAgKysrKystLS0tLQorIHNyYy9ycGNiX3N2Yy5jICAgICB8ICAgMTAgKysrKystLS0tLQorIHNyYy9ycGNiX3N2Y180LmMgICB8ICAgMTQgKysrKysrKy0tLS0tLS0KKyBzcmMvcnBjYl9zdmNfY29tLmMgfCAgIDQ2ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBzcmMvcnBjYmluZC5jICAgICAgfCAgIDEyICsrKysrKy0tLS0tLQorIHNyYy91dGlsLmMgICAgICAgICB8ICAgIDIgKy0KKyBzcmMvd2FybXN0YXJ0LmMgICAgfCAgICA0ICsrLS0KKyA4IGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2NoZWNrX2JvdW5kLmMgYi9zcmMvY2hlY2tfYm91bmQuYworaW5kZXggYzcwYjg0NS4uNWQyMTczMCAxMDA2NDQKKy0tLSBhL3NyYy9jaGVja19ib3VuZC5jCisrKysgYi9zcmMvY2hlY2tfYm91bmQuYworQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBmZGxpc3QgKmZkaGVhZDsJLyogTGluayBsaXN0IG9mIHRoZSBjaGVjayBmZCdzICovCisgc3RhdGljIHN0cnVjdCBmZGxpc3QgKmZkdGFpbDsKKyBzdGF0aWMgY2hhciAqbnVsbHN0cmluZyA9ICIiOworIAorLXN0YXRpYyBib29sX3QgY2hlY2tfYm91bmQgX19QKChzdHJ1Y3QgZmRsaXN0ICosIGNoYXIgKnVhZGRyKSk7Cisrc3RhdGljIGJvb2xfdCBjaGVja19ib3VuZCAoc3RydWN0IGZkbGlzdCAqLCBjaGFyICp1YWRkcik7CisgCisgLyoKKyAgKiBSZXR1cm5zIDEgaWYgdGhlIGdpdmVuIGFkZHJlc3MgaXMgYm91bmQgZm9yIHRoZSBnaXZlbiBhZGRyICYgdHJhbnNwb3J0CitkaWZmIC0tZ2l0IGEvc3JjL3BtYXBfc3ZjLmMgYi9zcmMvcG1hcF9zdmMuYworaW5kZXggYWQyOGI5My4uOWM3ZDQwOSAxMDA2NDQKKy0tLSBhL3NyYy9wbWFwX3N2Yy5jCisrKysgYi9zcmMvcG1hcF9zdmMuYworQEAgLTYwLDExICs2MCwxMSBAQCBzdGF0aWMJY2hhciBzY2NzaWRbXSA9ICJAKCMpcG1hcF9zdmMuYyAxLjIzIDg5LzA0LzA1IENvcHlyIDE5ODQgU3VuIE1pY3JvIjsKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorICNpbmNsdWRlICJ4bG9nLmgiCisgI2luY2x1ZGUgPHJwYy9zdmNfc29jLmg+IC8qIHN2Y19nZXRjYWxsZXIgcm91dGluZSBkZWZpbml0aW9uICovCistc3RhdGljIHN0cnVjdCBwbWFwbGlzdCAqZmluZF9zZXJ2aWNlX3BtYXAgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwKKy0JCQkJCSAgICAgICBycGNwcm90X3QpKTsKKy1zdGF0aWMgYm9vbF90IHBtYXBwcm9jX2NoYW5nZSBfX1AoKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgdV9sb25nKSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19nZXRwb3J0IF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKSk7Cistc3RhdGljIGJvb2xfdCBwbWFwcHJvY19kdW1wIF9fUCgoc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqKSk7Cisrc3RhdGljIHN0cnVjdCBwbWFwbGlzdCAqZmluZF9zZXJ2aWNlX3BtYXAgKHJwY3Byb2dfdCwgcnBjdmVyc190LAorKwkJCQkJICAgICAgIHJwY3Byb3RfdCk7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19jaGFuZ2UgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgdV9sb25nKTsKKytzdGF0aWMgYm9vbF90IHBtYXBwcm9jX2dldHBvcnQgKHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKik7Cisrc3RhdGljIGJvb2xfdCBwbWFwcHJvY19kdW1wIChzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICopOworIAorIC8qCisgICogQ2FsbGVkIGZvciBhbGwgdGhlIHZlcnNpb24gMiBpbnF1aXJpZXMuCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjLmMgYi9zcmMvcnBjYl9zdmMuYworaW5kZXggYmQ5MjIwMS4uNmM3ZjdmZSAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiX3N2Yy5jCisrKysgYi9zcmMvcnBjYl9zdmMuYworQEAgLTUzLDEwICs1MywxMCBAQAorICNpbmNsdWRlICJycGNiaW5kLmgiCisgI2luY2x1ZGUgInhsb2cuaCIKKyAKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl8zX2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCQkgICBycGN2ZXJzX3QpKTsKKy1zdGF0aWMgdm9pZCAqcnBjYnByb2NfZHVtcF8zX2xvY2FsIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCistCQkJCQlycGN2ZXJzX3QpKTsKKytzdGF0aWMgdm9pZCAqcnBjYnByb2NfZ2V0YWRkcl8zX2xvY2FsICh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKysJCQkJCSAgIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfM19sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCQlycGN2ZXJzX3QpOworIAorIC8qCisgICogQ2FsbGVkIGJ5IHN2Y19nZXRyZXFzZXQuIFRoZXJlIGlzIGEgc2VwYXJhdGUgc2VydmVyIGhhbmRsZSBmb3IKK0BAIC03NSw3ICs3NSw3IEBAIHJwY2Jfc2VydmljZV8zKHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFBSVCAqdHJhbnNwKQorIAl9IGFyZ3VtZW50OworIAljaGFyICpyZXN1bHQ7CisgCXhkcnByb2NfdCB4ZHJfYXJndW1lbnQsIHhkcl9yZXN1bHQ7CistCXZvaWQgKigqbG9jYWwpIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwl2b2lkICooKmxvY2FsKSAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCXJwY3Byb2dfdCBzZXRwcm9nID0gMDsKKyAKKyAJcnBjYnNfcHJvY2luZm8oUlBDQlZFUlNfM19TVEFULCBycXN0cC0+cnFfcHJvYyk7CitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjXzQuYyBiL3NyYy9ycGNiX3N2Y180LmMKK2luZGV4IGI2NzM0NTIuLjY3NjRjMGEgMTAwNjQ0CistLS0gYS9zcmMvcnBjYl9zdmNfNC5jCisrKysgYi9zcmMvcnBjYl9zdmNfNC5jCitAQCAtNTQsMTMgKzU0LDEzIEBACisgI2luY2x1ZGUgInJwY2JpbmQuaCIKKyAjaW5jbHVkZSAieGxvZy5oIgorIAorLXN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRyXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwKKy0JCQkJICAgICAgcnBjdmVyc190KSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldHZlcnNhZGRyXzRfbG9jYWwgX19QKCh2b2lkICosIHN0cnVjdCBzdmNfcmVxICosIFNWQ1hQUlQgKiwgcnBjdmVyc190KSk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldGFkZHJfNF9sb2NhbCAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosCisrCQkJCSAgICAgIHJwY3ZlcnNfdCk7Cisrc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2dldHZlcnNhZGRyXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIHN0YXRpYyB2b2lkICpycGNicHJvY19nZXRhZGRybGlzdF80X2xvY2FsCistCV9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworLXN0YXRpYyB2b2lkIGZyZWVfcnBjYl9lbnRyeV9saXN0IF9fUCgocnBjYl9lbnRyeV9saXN0X3B0ciAqKSk7Cistc3RhdGljIHZvaWQgKnJwY2Jwcm9jX2R1bXBfNF9sb2NhbCBfX1AoKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpKTsKKysJKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworK3N0YXRpYyB2b2lkIGZyZWVfcnBjYl9lbnRyeV9saXN0IChycGNiX2VudHJ5X2xpc3RfcHRyICopOworK3N0YXRpYyB2b2lkICpycGNicHJvY19kdW1wXzRfbG9jYWwgKHZvaWQgKiwgc3RydWN0IHN2Y19yZXEgKiwgU1ZDWFBSVCAqLCBycGN2ZXJzX3QpOworIAorIC8qCisgICogQ2FsbGVkIGJ5IHN2Y19nZXRyZXFzZXQuIFRoZXJlIGlzIGEgc2VwYXJhdGUgc2VydmVyIGhhbmRsZSBmb3IKK0BAIC03OCw3ICs3OCw3IEBAIHJwY2Jfc2VydmljZV80KHN0cnVjdCBzdmNfcmVxICpycXN0cCwgU1ZDWFBSVCAqdHJhbnNwKQorIAl9IGFyZ3VtZW50OworIAljaGFyICpyZXN1bHQ7CisgCXhkcnByb2NfdCB4ZHJfYXJndW1lbnQsIHhkcl9yZXN1bHQ7CistCXZvaWQgKigqbG9jYWwpIF9fUCgodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCkpOworKwl2b2lkICooKmxvY2FsKSAodm9pZCAqLCBzdHJ1Y3Qgc3ZjX3JlcSAqLCBTVkNYUFJUICosIHJwY3ZlcnNfdCk7CisgCXJwY3Byb2dfdCBzZXRwcm9nID0gMDsKKyAKKyAJcnBjYnNfcHJvY2luZm8oUlBDQlZFUlNfNF9TVEFULCBycXN0cC0+cnFfcHJvYyk7CitkaWZmIC0tZ2l0IGEvc3JjL3JwY2Jfc3ZjX2NvbS5jIGIvc3JjL3JwY2Jfc3ZjX2NvbS5jCitpbmRleCBmZjljZTZiLi44YWVmOWU1IDEwMDY0NAorLS0tIGEvc3JjL3JwY2Jfc3ZjX2NvbS5jCisrKysgYi9zcmMvcnBjYl9zdmNfY29tLmMKK0BAIC0xMDAsMjkgKzEwMCwyOSBAQCBzdHJ1Y3QgZmluZm8geworIHN0YXRpYyBzdHJ1Y3QgZmluZm8gICAgIEZJTkZPW05GT1JXQVJEXTsKKyAKKyAKKy1zdGF0aWMgYm9vbF90IHhkcl9lbmNhcF9wYXJtcyBfX1AoKFhEUiAqLCBzdHJ1Y3QgZW5jYXBfcGFybXMgKikpOworLXN0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfYXJncyBfX1AoKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKikpOworLXN0YXRpYyBib29sX3QgeGRyX3JtdGNhbGxfcmVzdWx0IF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGJvb2xfdCB4ZHJfb3BhcXVlX3Bhcm1zIF9fUCgoWERSICosIHN0cnVjdCByX3JtdGNhbGxfYXJncyAqKSk7Cistc3RhdGljIGludCBmaW5kX3JtdGNhbGxmZF9ieV9uZXRpZCBfX1AoKGNoYXIgKikpOworLXN0YXRpYyBTVkNYUFJUICpmaW5kX3JtdGNhbGx4cHJ0X2J5X2ZkIF9fUCgoaW50KSk7Cistc3RhdGljIGludCBmb3J3YXJkX3JlZ2lzdGVyIF9fUCgodV9pbnQzMl90LCBzdHJ1Y3QgbmV0YnVmICosIGludCwgY2hhciAqLAorLSAgICBycGNwcm9jX3QsIHJwY3ZlcnNfdCwgdV9pbnQzMl90ICopKTsKKy1zdGF0aWMgc3RydWN0IGZpbmZvICpmb3J3YXJkX2ZpbmQgX19QKCh1X2ludDMyX3QpKTsKKy1zdGF0aWMgaW50IGZyZWVfc2xvdF9ieV94aWQgX19QKCh1X2ludDMyX3QpKTsKKy1zdGF0aWMgaW50IGZyZWVfc2xvdF9ieV9pbmRleCBfX1AoKGludCkpOworLXN0YXRpYyBpbnQgbmV0YnVmY21wIF9fUCgoc3RydWN0IG5ldGJ1ZiAqLCBzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgc3RydWN0IG5ldGJ1ZiAqbmV0YnVmZHVwIF9fUCgoc3RydWN0IG5ldGJ1ZiAqKSk7Cistc3RhdGljIHZvaWQgbmV0YnVmZnJlZSBfX1AoKHN0cnVjdCBuZXRidWYgKikpOworLXN0YXRpYyBpbnQgY2hlY2tfcm10Y2FsbHMgX19QKChzdHJ1Y3QgcG9sbGZkICosIGludCkpOworLXN0YXRpYyB2b2lkIHhwcnRfc2V0X2NhbGxlciBfX1AoKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopKTsKKy1zdGF0aWMgdm9pZCBzZW5kX3N2Y3N5c2VyciBfX1AoKFNWQ1hQUlQgKiwgc3RydWN0IGZpbmZvICopKTsKKy1zdGF0aWMgdm9pZCBoYW5kbGVfcmVwbHkgX19QKChpbnQsIFNWQ1hQUlQgKikpOworLXN0YXRpYyB2b2lkIGZpbmRfdmVyc2lvbnMgX19QKChycGNwcm9nX3QsIGNoYXIgKiwgcnBjdmVyc190ICosIHJwY3ZlcnNfdCAqKSk7Cistc3RhdGljIHJwY2JsaXN0X3B0ciBmaW5kX3NlcnZpY2UgX19QKChycGNwcm9nX3QsIHJwY3ZlcnNfdCwgY2hhciAqKSk7Cistc3RhdGljIGNoYXIgKmdldG93bmVyIF9fUCgoU1ZDWFBSVCAqLCBjaGFyICosIHNpemVfdCkpOworLXN0YXRpYyBpbnQgYWRkX3BtYXBsaXN0IF9fUCgoUlBDQiAqKSk7Cistc3RhdGljIGludCBkZWxfcG1hcGxpc3QgX19QKChSUENCICopKTsKKytzdGF0aWMgYm9vbF90IHhkcl9lbmNhcF9wYXJtcyAoWERSICosIHN0cnVjdCBlbmNhcF9wYXJtcyAqKTsKKytzdGF0aWMgYm9vbF90IHhkcl9ybXRjYWxsX2FyZ3MgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfcm10Y2FsbF9yZXN1bHQgKFhEUiAqLCBzdHJ1Y3Qgcl9ybXRjYWxsX2FyZ3MgKik7Cisrc3RhdGljIGJvb2xfdCB4ZHJfb3BhcXVlX3Bhcm1zIChYRFIgKiwgc3RydWN0IHJfcm10Y2FsbF9hcmdzICopOworK3N0YXRpYyBpbnQgZmluZF9ybXRjYWxsZmRfYnlfbmV0aWQgKGNoYXIgKik7Cisrc3RhdGljIFNWQ1hQUlQgKmZpbmRfcm10Y2FsbHhwcnRfYnlfZmQgKGludCk7Cisrc3RhdGljIGludCBmb3J3YXJkX3JlZ2lzdGVyICh1X2ludDMyX3QsIHN0cnVjdCBuZXRidWYgKiwgaW50LCBjaGFyICosCisrICAgIHJwY3Byb2NfdCwgcnBjdmVyc190LCB1X2ludDMyX3QgKik7Cisrc3RhdGljIHN0cnVjdCBmaW5mbyAqZm9yd2FyZF9maW5kICh1X2ludDMyX3QpOworK3N0YXRpYyBpbnQgZnJlZV9zbG90X2J5X3hpZCAodV9pbnQzMl90KTsKKytzdGF0aWMgaW50IGZyZWVfc2xvdF9ieV9pbmRleCAoaW50KTsKKytzdGF0aWMgaW50IG5ldGJ1ZmNtcCAoc3RydWN0IG5ldGJ1ZiAqLCBzdHJ1Y3QgbmV0YnVmICopOworK3N0YXRpYyBzdHJ1Y3QgbmV0YnVmICpuZXRidWZkdXAgKHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHZvaWQgbmV0YnVmZnJlZSAoc3RydWN0IG5ldGJ1ZiAqKTsKKytzdGF0aWMgaW50IGNoZWNrX3JtdGNhbGxzIChzdHJ1Y3QgcG9sbGZkICosIGludCk7Cisrc3RhdGljIHZvaWQgeHBydF9zZXRfY2FsbGVyIChTVkNYUFJUICosIHN0cnVjdCBmaW5mbyAqKTsKKytzdGF0aWMgdm9pZCBzZW5kX3N2Y3N5c2VyciAoU1ZDWFBSVCAqLCBzdHJ1Y3QgZmluZm8gKik7Cisrc3RhdGljIHZvaWQgaGFuZGxlX3JlcGx5IChpbnQsIFNWQ1hQUlQgKik7Cisrc3RhdGljIHZvaWQgZmluZF92ZXJzaW9ucyAocnBjcHJvZ190LCBjaGFyICosIHJwY3ZlcnNfdCAqLCBycGN2ZXJzX3QgKik7Cisrc3RhdGljIHJwY2JsaXN0X3B0ciBmaW5kX3NlcnZpY2UgKHJwY3Byb2dfdCwgcnBjdmVyc190LCBjaGFyICopOworK3N0YXRpYyBjaGFyICpnZXRvd25lciAoU1ZDWFBSVCAqLCBjaGFyICosIHNpemVfdCk7Cisrc3RhdGljIGludCBhZGRfcG1hcGxpc3QgKFJQQ0IgKik7Cisrc3RhdGljIGludCBkZWxfcG1hcGxpc3QgKFJQQ0IgKik7CisgCisgLyoKKyAgKiBTZXQgYSBtYXBwaW5nIG9mIHByb2dyYW0sIHZlcnNpb24sIG5ldGlkCitkaWZmIC0tZ2l0IGEvc3JjL3JwY2JpbmQuYyBiL3NyYy9ycGNiaW5kLmMKK2luZGV4IDA0NWRhYTEuLjEzNzAxMWIgMTAwNjQ0CistLS0gYS9zcmMvcnBjYmluZC5jCisrKysgYi9zcmMvcnBjYmluZC5jCitAQCAtMTM1LDEzICsxMzUsMTMgQEAgY2hhciAqdGNwX3VhZGRyOwkvKiBVbml2ZXJzYWwgVENQIGFkZHJlc3MgKi8KKyBzdGF0aWMgY2hhciBzZXJ2bmFtZVtdID0gInJwY2JpbmQiOworIHN0YXRpYyBjaGFyIHN1cGVydXNlcltdID0gInN1cGVydXNlciI7CisgCistaW50IG1haW4gX19QKChpbnQsIGNoYXIgKltdKSk7CisraW50IG1haW4gKGludCwgY2hhciAqW10pOworIAorLXN0YXRpYyBpbnQgaW5pdF90cmFuc3BvcnQgX19QKChzdHJ1Y3QgbmV0Y29uZmlnICopKTsKKy1zdGF0aWMgdm9pZCByYmxsaXN0X2FkZCBfX1AoKHJwY3Byb2dfdCwgcnBjdmVyc190LCBzdHJ1Y3QgbmV0Y29uZmlnICosCistCQkJICAgICBzdHJ1Y3QgbmV0YnVmICopKTsKKy1zdGF0aWMgdm9pZCB0ZXJtaW5hdGUgX19QKChpbnQpKTsKKy1zdGF0aWMgdm9pZCBwYXJzZWFyZ3MgX19QKChpbnQsIGNoYXIgKltdKSk7Cisrc3RhdGljIGludCBpbml0X3RyYW5zcG9ydCAoc3RydWN0IG5ldGNvbmZpZyAqKTsKKytzdGF0aWMgdm9pZCByYmxsaXN0X2FkZCAocnBjcHJvZ190LCBycGN2ZXJzX3QsIHN0cnVjdCBuZXRjb25maWcgKiwKKysJCQkgICAgIHN0cnVjdCBuZXRidWYgKik7Cisrc3RhdGljIHZvaWQgdGVybWluYXRlIChpbnQpOworK3N0YXRpYyB2b2lkIHBhcnNlYXJncyAoaW50LCBjaGFyICpbXSk7CisgCisgaW50CisgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorZGlmZiAtLWdpdCBhL3NyYy91dGlsLmMgYi9zcmMvdXRpbC5jCitpbmRleCBhNmM4MzViLi4zM2I5ZTRmIDEwMDY0NAorLS0tIGEvc3JjL3V0aWwuYworKysrIGIvc3JjL3V0aWwuYworQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiAqbG9jYWxfaW40OworIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpsb2NhbF9pbjY7CisgI2VuZGlmCisgCistc3RhdGljIGludCBiaXRtYXNrY21wIF9fUCgodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgaW50KSk7Cisrc3RhdGljIGludCBiaXRtYXNrY21wICh2b2lkICosIHZvaWQgKiwgdm9pZCAqLCBpbnQpOworIAorIC8qCisgICogRm9yIGFsbCBiaXRzIHNldCBpbiAibWFzayIsIGNvbXBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbgorZGlmZiAtLWdpdCBhL3NyYy93YXJtc3RhcnQuYyBiL3NyYy93YXJtc3RhcnQuYworaW5kZXggYjZlYjczZS4uNDJkZDNhZiAxMDA2NDQKKy0tLSBhL3NyYy93YXJtc3RhcnQuYworKysrIGIvc3JjL3dhcm1zdGFydC5jCitAQCAtNTgsOCArNTgsOCBAQAorICNkZWZpbmUJUE1BUEZJTEUJUlBDQklORF9TVEFURURJUiAiL3BvcnRtYXAueGRyIgorICNlbmRpZgorIAorLXN0YXRpYyBib29sX3Qgd3JpdGVfc3RydWN0IF9fUCgoY2hhciAqLCB4ZHJwcm9jX3QsIHZvaWQgKikpOworLXN0YXRpYyBib29sX3QgcmVhZF9zdHJ1Y3QgX19QKChjaGFyICosIHhkcnByb2NfdCwgdm9pZCAqKSk7Cisrc3RhdGljIGJvb2xfdCB3cml0ZV9zdHJ1Y3QgKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopOworK3N0YXRpYyBib29sX3QgcmVhZF9zdHJ1Y3QgKGNoYXIgKiwgeGRycHJvY190LCB2b2lkICopOworIAorIHN0YXRpYyBib29sX3QKKyB3cml0ZV9zdHJ1Y3QoY2hhciAqZmlsZW5hbWUsIHhkcnByb2NfdCBzdHJ1Y3Rwcm9jLCB2b2lkICpsaXN0KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kLzAwMDEtdWNsaWJjLW5zcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE1NWYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC8wMDAxLXVjbGliYy1uc3MucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gYjhmMGQ3YjczMThiYTM0NGMyNTc4NWQ2ZjVjZjNmOGRlOTgwMTJkNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGFuYWVsIENvcGEgPG5jb3BhQGFscGluZWxpbnV4Lm9yZz4KK0RhdGU6IFR1ZSwgMiBGZWIgMjAxMCAwOTozNjowMyArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gdWNsaWJjLW5zcworCistLS0KKyBzcmMvcnBjYmluZC5jIHwgICAgNCArKysrCisgMSBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvcnBjYmluZC5jIGIvc3JjL3JwY2JpbmQuYworaW5kZXggNTI1ZmZiYS4uMWZlMWE2MCAxMDA2NDQKKy0tLSBhL3NyYy9ycGNiaW5kLmMKKysrKyBiL3NyYy9ycGNiaW5kLmMKK0BAIC02Nyw3ICs2NywxMSBAQAorICNpbmNsdWRlIDxwd2QuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisrI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKysjZGVmaW5lIF9fbnNzX2NvbmZpZ3VyZV9sb29rdXAoeCx5KQorKyNlbHNlCisgI2luY2x1ZGUgPG5zcy5oPgorKyNlbmRpZgorICNpbmNsdWRlICJjb25maWcuaCIKKyAjaW5jbHVkZSAicnBjYmluZC5oIgorIAorLS0gCisxLjYuNi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9pbml0LmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0OTlhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvaW5pdC5kCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIHJwY2JpbmQgZGFlbW9uLgorCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBycGNiaW5kCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAkbmV0d29yaworIyBSZXF1aXJlZC1TdG9wOiAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgIFMgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IFJQQyBwb3J0bWFwcGVyIHJlcGxhY2VtZW50CisjIERlc2NyaXB0aW9uOiAgICAgICBycGNiaW5kIGlzIGEgc2VydmVyIHRoYXQgY29udmVydHMgUlBDIChSZW1vdGUKKyMgICAgICAgICAgICAgICAgICAgIFByb2NlZHVyZSBDYWxsKSBwcm9ncmFtIG51bWJlcnMgaW50byBEQVJQQQorIyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgcG9ydCBudW1iZXJzLiBJdCBtdXN0IGJlIHJ1bm5pbmcgaW4KKyMgICAgICAgICAgICAgICAgICAgIG9yZGVyIHRvIG1ha2UgUlBDIGNhbGxzLiBTZXJ2aWNlcyB0aGF0IHVzZQorIyAgICAgICAgICAgICAgICAgICAgUlBDIGluY2x1ZGUgTkZTIGFuZCBOSVMuCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKwordGVzdCAtZiAvc2Jpbi9ycGNiaW5kIHx8IGV4aXQgMAorCitPUFRJT05TPSIiCitpZiBbIC1mIC9ldGMvZGVmYXVsdC9ycGNiaW5kIF0KK3RoZW4KKyAgICAuIC9ldGMvZGVmYXVsdC9ycGNiaW5kCitlbGlmIFsgLWYgL2V0Yy9ycGNiaW5kLmNvbmYgXQordGhlbgorICAgIC4gL2V0Yy9ycGNiaW5kLmNvbmYKK2ZpCisKK3N0YXJ0ICgpCit7CisgICAgZWNobyAtbiAiU3RhcnRpbmcgcnBjYmluZCBkYWVtb24uLi4iCisgICAgaWYgcGlkb2YgL3NiaW4vcnBjYmluZCA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVjaG8gImFscmVhZHkgcnVubmluZy4iCisgICAgICAgIGV4aXQgMAorICAgIGZpCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tZXhlYyAvc2Jpbi9ycGNiaW5kIC0tICIkQCIKKyAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKyAgICAgICAgZWNobyAiZG9uZS4iCisgICAgZWxzZQorICAgICAgICBlY2hvICJmYWlsZWQuIgorICAgIGZpCit9CisKK3N0b3AgKCkKK3sKKyAgICBlY2hvICJTdG9wcGluZyBycGNiaW5kIGRhZW1vbi4uLiIKKyAgICBpZiAhIHBpZG9mIC9zYmluL3JwY2JpbmQgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICBlY2hvICJub3QgcnVubmluZy4iCisgICAgICAgIHJldHVybiAwCisgICAgZmkKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLWV4ZWMgL3NiaW4vcnBjYmluZAorICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorICAgICAgICBlY2hvICJkb25lLiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gImZhaWxlZC4iCisgICAgZmkKK30KKworY2FzZSAiJDEiIGluCisgICAgc3RhcnQpCisgICAgICAgIHN0YXJ0ICRPUFRJT05TCisgICAgICAgIDs7CisgICAgc3RvcCkKKyAgICAgICAgc3RvcAorICAgICAgICA7OworICAgIGZvcmNlLXJlbG9hZCkKKyAgICAgICAgc3RvcAorICAgICAgICBzdGFydCAkT1BUSU9OUworICAgICAgICA7OworICAgIHJlc3RhcnQpCisgICAgICAgIHN0b3AKKyAgICAgICAgc3RhcnQgJE9QVElPTlMKKyAgICAgICAgOzsKKyAgICBzdGF0dXMpCisgICAgICAgIHN0YXR1cyAvc2Jpbi9ycGNiaW5kCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3JwY2JpbmQge3N0YXJ0fHN0b3B8Zm9yY2UtcmVsb2FkfHJlc3RhcnR8c3RhdHVzfSIKKyAgICAgICAgZXhpdCAxCisgICAgICAgIDs7Citlc2FjCisKK2V4aXQgJD8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvbXVzbC1zdW5ycGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL211c2wtc3VucnBjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzJhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL211c2wtc3VucnBjLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1RoZSBtdXNsIGltcGxlbWVudGF0aW9uIG9mIGdldGFkZHJpbmZvIGFuZCBnZXRzZXJ2YnluYW1lIGRvZXMgbm90CithbGlhc2VzLiBBcyBhIHdvcmthcm91bmQgd2UgdXNlICJzdW5wcmMiIGluc3RlYWQgb2YgInBvcnRtYXBwZXIiCisKK3BvcnRlZCBmcm9tIGFscGluZSBsaW51eAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogcnBjYmluZC0wLjIuMi9zcmMvcnBjYmluZC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gcnBjYmluZC0wLjIuMi5vcmlnL3NyYy9ycGNiaW5kLmMKKysrKyBycGNiaW5kLTAuMi4yL3NyYy9ycGNiaW5kLmMKK0BAIC00OTEsNyArNDkxLDcgQEAgaW5pdF90cmFuc3BvcnQoc3RydWN0IG5ldGNvbmZpZyAqbmNvbmYpCisgCQkJaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhob3N0c1tuaG9zdHNiYWtdLAorIAkJCSAgICBzZXJ2bmFtZSwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgeworIAkJCSAgaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhob3N0c1tuaG9zdHNiYWtdLAorLQkJCQkJCSAgICAicG9ydG1hcHBlciIsICZoaW50cywgJnJlcykpICE9IDApIHsKKysJCQkJCQkgICAgInN1bnJwYyIsICZoaW50cywgJnJlcykpICE9IDApIHsKKyAJCQkJc3lzbG9nKExPR19FUlIsCisgCQkJCSAgICAiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLAorIAkJCQkgICAgbmNvbmYtPm5jX25ldGlkLCBnYWlfc3RyZXJyb3IoYWljb2RlKSk7CitAQCAtNTY0LDcgKzU2NCw3IEBAIGluaXRfdHJhbnNwb3J0KHN0cnVjdCBuZXRjb25maWcgKm5jb25mKQorIAkJaWYgKChzdHJjbXAobmNvbmYtPm5jX25ldGlkLCAibG9jYWwiKSAhPSAwKSAmJgorIAkJICAgIChzdHJjbXAobmNvbmYtPm5jX25ldGlkLCAidW5peCIpICE9IDApKSB7CisgCQkJaWYgKChhaWNvZGUgPSBnZXRhZGRyaW5mbyhOVUxMLCBzZXJ2bmFtZSwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CistCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsICJwb3J0bWFwcGVyIiwgJmhpbnRzLCAmcmVzKSkhPSAwKSB7CisrCQkJICBpZiAoKGFpY29kZSA9IGdldGFkZHJpbmZvKE5VTEwsICJzdW5ycGMiLCAmaGludHMsICZyZXMpKSE9IDApIHsKKyAJCQkgIHByaW50ZigiY2Fubm90IGdldCBsb2NhbCBhZGRyZXNzIGZvciAlczogJXMiLCAgbmNvbmYtPm5jX25ldGlkLCBnYWlfc3RyZXJyb3IoYWljb2RlKSk7CisgCQkJICBzeXNsb2coTE9HX0VSUiwKKyAJCQkJICAgICJjYW5ub3QgZ2V0IGxvY2FsIGFkZHJlc3MgZm9yICVzOiAlcyIsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JlbW92ZS1zeXMtcXVldWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRmYzk3NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACittdXNsIGRvZXMgbm90IHByb3ZpZGUgdGhpcyBoZWFkZXIgYW5kIGhlcmUgaXMgcmVhc29uaW5nCitodHRwOi8vd2lraS5tdXNsLWxpYmMub3JnL3dpa2kvRkFRI1E6X3doeV9pc19zeXMuMkZxdWV1ZS5oX25vdF9pbmNsdWRlZF8uM0YKKworU28gaW5jbHVkZSBpdCBvbmx5IHdoZW4gX19HTElCQ19fIGlzIGRlZmluZWQgd2hpY2ggaXMgdHJ1ZSBmb3IgdWNsaWJjIGFuZCBnbGliYworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBycGNiaW5kLTAuMi4yL3NyYy91dGlsLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBycGNiaW5kLTAuMi4yLm9yaWcvc3JjL3V0aWwuYworKysrIHJwY2JpbmQtMC4yLjIvc3JjL3V0aWwuYworQEAgLTQxLDcgKzQxLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaWZkZWYgX19HTElCQ19fCisgI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXQvaWYuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxpZmFkZHJzLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNGRmYmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuY29uZgpAQCAtMCwwICsxLDMgQEAKKyMgT3B0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byBycGNiaW5kLgorIworUlBDQklORF9PUFRTPSIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWUyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kL3JwY2JpbmQuc2VydmljZQpAQCAtMCwwICsxLDEyIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJQQyBCaW5kIFNlcnZpY2UKK1JlcXVpcmVzPXJwY2JpbmQuc29ja2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitFbnZpcm9ubWVudEZpbGU9LUBTWVNDT05GRElSQC9ycGNiaW5kLmNvbmYKK0V4ZWNTdGFydD1AU0JJTkRJUkAvcnBjYmluZCAtdyAkUlBDQklORF9PUFRTCitTdWNjZXNzRXhpdFN0YXR1cz0yCisKK1tJbnN0YWxsXQorQWxzbz1ycGNiaW5kLnNvY2tldApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3JwY2JpbmQvcnBjYmluZC9ycGNiaW5kLnNvY2tldCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zb2NrZXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzYzFkOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmQvcnBjYmluZC5zb2NrZXQKQEAgLTAsMCArMSw4IEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVJQQ2JpbmQgU2VydmVyIEFjdGl2YXRpb24gU29ja2V0CisKK1tTb2NrZXRdCitMaXN0ZW5TdHJlYW09L3Zhci9ydW4vcnBjYmluZC5zb2NrCisKK1tJbnN0YWxsXQorV2FudGVkQnk9c29ja2V0cy50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9ycGNiaW5kL3JwY2JpbmRfMC4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzYwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvcnBjYmluZC9ycGNiaW5kXzAuMi4zLmJiCkBAIC0wLDAgKzEsNzMgQEAKK1NVTU1BUlkgPSAiVW5pdmVyc2FsIEFkZHJlc3NlcyB0byBSUEMgUHJvZ3JhbSBOdW1iZXIgTWFwcGVyIgorREVTQ1JJUFRJT04gPSAiVGhlIHJwY2JpbmQgdXRpbGl0eSBpcyBhIHNlcnZlciB0aGF0IGNvbnZlcnRzIFJQQyBcCisgICAgICAgICAgICAgICBwcm9ncmFtIG51bWJlcnMgaW50byB1bml2ZXJzYWwgYWRkcmVzc2VzLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorSE9NRVBBR0UgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ycGNiaW5kLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0yMDEyMzcmYXRpZD05NzY3NTEiCitERVBFTkRTID0gImxpYnRpcnBjIHF1b3RhIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI0NjQ4NmU0YzRhNDE2NjAyNjkzYTcxMWJiNWJmYTM5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ycGNpbmZvLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yNzttZDU9ZjhhOGNkMmNiMjVhYzVhYTE2NzY3MzY0ZmIwZTNjMjQiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3JwY2JpbmQvcnBjYmluZC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luaXQuZCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUF2b2lkLXVzZS1vZi1nbGliYy1zeXMtY2RlZnMuaC1oZWFkZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXN5cy1xdWV1ZS5wYXRjaCBcCisgICAgICAgICAgICR7VUNMSUJDUEFUQ0hFU30gXAorICAgICAgICAgICAke01VU0xQQVRDSEVTfSBcCisgICAgICAgICAgIGZpbGU6Ly9ycGNiaW5kLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5zb2NrZXQgXAorICAgICAgICAgICBmaWxlOi8vcnBjYmluZC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCitNVVNMUEFUQ0hFU19saWJjLW11c2wgPSAiZmlsZTovL211c2wtc3VucnBjLnBhdGNoIgorCitVQ0xJQkNQQVRDSEVTX2xpYmMtdWNsaWJjID0gImZpbGU6Ly8wMDAxLXVjbGliYy1uc3MucGF0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKK1VDTElCQ1BBVENIRVMgPz0gIiIKK01VU0xQQVRDSEVTID89ICIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjODg3NTI0NmIyNjg4YTFhZGZiZDZhZDQzNDgwMjc4ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ODk3ODIzYTlkODIwZWEwMTFkOWVhMDIwNTRkNWFiOTk0NjliOWNhNTM0NjI2NWZlZTM4MDcxM2M4ZmVkMjdiIgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAidGNwLXdyYXBwZXJzIgorUEFDS0FHRUNPTkZJR1t0Y3Atd3JhcHBlcnNdID0gIi0tZW5hYmxlLWxpYndyYXAsLS1kaXNhYmxlLWxpYndyYXAsdGNwLXdyYXBwZXJzIgorCitJTklUU0NSSVBUX05BTUUgPSAicnBjYmluZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDEyIDIgMyA0IDUgLiBzdG9wIDYwIDAgMSA2IC4iCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJycGNiaW5kLnNlcnZpY2UiCisKK2luaGVyaXQgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLW5vLWNyZWF0ZS1ob21lIC0taG9tZS1kaXIgLyBcCisgICAgICAgICAgICAgICAgICAgICAgIC0tc2hlbGwgL2Jpbi9mYWxzZSAtLXVzZXItZ3JvdXAgcnBjIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tzeXN0ZW1kXSA9ICItLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS8sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LXN5c3RlbWRzeXN0ZW11bml0ZGlyLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbWQgXAorIgorCitFWFRSQV9PRUNPTkYgKz0gIiAtLWVuYWJsZS13YXJtc3RhcnRzIC0td2l0aC1ycGN1c2VyPXJwYyIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCW12ICR7RH0ke2JpbmRpcn0gJHtEfSR7c2JpbmRpcn0KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kCisJc2VkIC1lICdzLC9ldGMvLCR7c3lzY29uZmRpcn0vLGcnIFwKKwkJLWUgJ3MsL3NiaW4vLCR7c2JpbmRpcn0vLGcnIFwKKwkJJHtXT1JLRElSfS9pbml0LmQgPiAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvcnBjYmluZAorCWNobW9kIDA3NTUgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3JwY2JpbmQKKworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3JwY2JpbmQuY29uZiAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLWQgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ycGNiaW5kLnNvY2tldCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3JwY2JpbmQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyxAU0JJTkRJUkAsJHtzYmluZGlyfSxnJyBcCisJCS1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vcnBjYmluZC5zZXJ2aWNlCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAxLWZpeC1mb3ItbXVsdGlqb2ItYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlY2VmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaApAQCAtMCwwICsxLDU4IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IHBhdGNoIHRvIGZpeCBwYXJhbGxlbCBidWlsZCBmYWlsdXJlIGFuZCB1cGRhdGUgY29udGV4dCB0byBtYWtlIHBhdGNoCitjb3VsZGUgYmUgYXBwbGllZC4KKworaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2NnaXQvc2NyZWVuLmdpdC9jb21taXQ/aWQ9YzBkZTZkZAorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorRnJvbSBjMGRlNmRkNzk3MGIyYzdiNDI2YTVjMzlkY2JjMzFjMmJlZjg3MjMyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FtYWRldXN6PTIwUz1DNT04MmF3aT1DNT04NHNraT89IDxhbWFkZUBhc21ibHIubmV0PgorRGF0ZTogVGh1LCAyIEphbiAyMDE0IDE4OjE4OjA2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGZpeCBmb3IgbXVsdGlqb2IgYnVpbGQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworbWFrZSBzdXJlIHRoYXQgY29tbS5zaCBzY3JpcHQgZ2VuZXJhdGVzIGNvbW0uaCBoZWFkZXIgYmVmb3JlIGRvaW5nCithbnl0aGluZyBlbHNlCisKK1NpZ25lZC1vZmYtYnk6IEFtYWRldXN6IFPFgmF3acWEc2tpIDxhbWFkZUBhc21ibHIubmV0PgorLS0tCisgTWFrZWZpbGUuaW4gfCAxMCArKysrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IGNlODZjYmMuLmRlYTE2ZDggMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC0yOTgsNyArMjk4LDcgQEAgc2VhcmNoLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggc2VhcmNoLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIG1hcmsuaCBleHRlcm4uaAorIHR0eS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHR0eS5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIGNvbW0uaCBcCisgIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oCistdGVybS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIHRlcm0uYyB0ZXJtLmgKKyt0ZXJtLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdGVybS5jIHRlcm0uaCBjb21tLmgKKyB3aW5kb3cubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCB3aW5kb3cuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBsb2dmaWxlLmgKKyB1dG1wLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdXRtcC5jIGNvbmZpZy5oIHNjcmVlbi5oIG9zLmggb3NkZWYuaCBhbnNpLmggYWNscy5oIFwKK0BAIC0zMjQsNyArMzI0LDcgQEAgY2FudmFzLm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggY2FudmFzLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGEKKyAgY29tbS5oIGxheWVyLmggdGVybS5oIGltYWdlLmggZGlzcGxheS5oIHdpbmRvdy5oIGV4dGVybi5oIFwKKyAgYnJhaWxsZS5oCisgY29tbS5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGNvbW0uYyBjb25maWcuaCBhY2xzLmggY29tbS5oCista21hcGRlZi5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGttYXBkZWYuYyBjb25maWcuaAorK2ttYXBkZWYubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBrbWFwZGVmLmMgY29uZmlnLmggY29tbS5oCisgYWNscy5vOiBsYXlvdXQuaCB2aWV3cG9ydC5oIGNhbnZhcy5oIGFjbHMuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBjb21tLmggXAorICBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaAorIGJyYWlsbGUubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBicmFpbGxlLmMgY29uZmlnLmggc2NyZWVuLmggb3MuaCBvc2RlZi5oIGFuc2kuaCBhY2xzLmggXAorQEAgLTM1MCw3ICszNTAsNyBAQCBsYXlvdXQubzogbGF5b3V0Lmggdmlld3BvcnQuaCBjYW52YXMuaCBsYXlvdXQuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYQorIHZpZXdwb3J0Lm86IGxheW91dC5oIHZpZXdwb3J0LmggY2FudmFzLmggdmlld3BvcnQuYyBjb25maWcuaCBzY3JlZW4uaCBvcy5oIG9zZGVmLmggYW5zaS5oIGFjbHMuaCBcCisgIGNvbW0uaCBsYXllci5oIHRlcm0uaCBpbWFnZS5oIGRpc3BsYXkuaCB3aW5kb3cuaCBleHRlcm4uaCBcCisgIGJyYWlsbGUuaAorLWxpc3RfZ2VuZXJpYy5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2dlbmVyaWMuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKy1saXN0X2Rpc3BsYXkubzogbGlzdF9nZW5lcmljLmggbGlzdF9kaXNwbGF5LmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oCistbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmgKKytsaXN0X2dlbmVyaWMubzogbGlzdF9nZW5lcmljLmggbGlzdF9nZW5lcmljLmMgbGF5ZXIuaCBzY3JlZW4uaCBvc2RlZi5oIGNvbW0uaAorK2xpc3RfZGlzcGxheS5vOiBsaXN0X2dlbmVyaWMuaCBsaXN0X2Rpc3BsYXkuYyBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisrbGlzdF93aW5kb3cubzogbGlzdF9nZW5lcmljLmggbGlzdF93aW5kb3cuYyB3aW5kb3cuaCBsYXllci5oIHNjcmVlbi5oIG9zZGVmLmggY29tbS5oCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVkNzFjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuLzAwMDItY29tbS5oLW5vdy1kZXBlbmRzLW9uLXRlcm0uaC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0JhY2twb3J0IGZyb206CisKK2h0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9jZ2l0L3NjcmVlbi5naXQvY29tbWl0Lz9pZD0zOWM1ZjFjCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCitGcm9tIDM5YzVmMWM3NmYxZmNlZjRiNTk1OGJmODI4YTYzZjUzNDI2YjY5ODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWtlIEdlcndpdHogPG1pa2VAbWlrZWdlcndpdHouY29tPgorRGF0ZTogVHVlLCAyNCBEZWMgMjAxMyAyMjoxNjozMSAtMDUwMAorU3ViamVjdDogW1BBVENIXSBjb21tLmggbm93IGRlcGVuZHMgb24gdGVybS5oCisKKy0tLQorIHNyYy9NYWtlZmlsZS5pbiB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5pbiBiL3NyYy9NYWtlZmlsZS5pbgoraW5kZXggZTc5MWU3OS4uZDRmN2MwYiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTExMyw3ICsxMTMsNyBAQCB0ZXJtLmg6IHRlcm0uYyB0ZXJtLnNoCisgCisga21hcGRlZi5jOiB0ZXJtLmgKKyAKKy1jb21tLmg6IGNvbW0uYyBjb21tLnNoIGNvbmZpZy5oCisrY29tbS5oOiBjb21tLmMgY29tbS5zaCBjb25maWcuaCB0ZXJtLmgKKyAJQVdLPSQoQVdLKSBDQz0iJChDQykgJChDRkxBR1MpIiBzcmNkaXI9JHtzcmNkaXJ9IHNoICQoc3JjZGlyKS9jb21tLnNoCisgCisgZG9jczoKKy0tIAorMi40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vQXZvaWQtbWlzLWlkZW50aWZ5aW5nLXN5c3RlbXMtYXMtU1ZSNC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4NGFhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL0F2b2lkLW1pcy1pZGVudGlmeWluZy1zeXN0ZW1zLWFzLVNWUjQucGF0Y2gKQEAgLTAsMCArMSw1NyBAQAorRnJvbSA3OWFmYjY3NjkwNDY1MzQwMzE0NWZkYTllMWE2YTlkM2VhMWNiMjJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMToxMDozMiArMDMwMAorU3ViamVjdDogW1BBVENIIDQvNF0gQXZvaWQgbWlzLWlkZW50aWZ5aW5nIHN5c3RlbXMgYXMgU1ZSNAorCitMaW51eCBjYW4gYmUgbWlzZGV0ZWN0ZWQgYXMgU1ZSNCBiZWNhdXNlIGl0IGhhcworbGliZWxmIGluc3RhbGxlZC4gVGhpcyBsZWFkcyB0byBsaW5raW5nIHdpdGggbGliZWxmLCBldmVuIHRob3VnaCBubworc3ltYm9scyBmcm9tIHRoYXQgbGlicmFyeSB3ZXJlIGFjdHVhbGx5IHVzZWQsIGFuZCB0byBhIHdvcmthcm91bmQgZm9yCithIGJ1Z2d5IGdldGxvZ2luKCkgYmVpbmcgZW5hYmxlZC4KKworSXQgaXMgbm90IGRvY3VtZW50ZWQgd2hpY2ggZXhhY3QgU1ZSNCBzeXN0ZW0gaGFkIHRoZSBidWcgdGhhdCB0aGUKK3dvcmthcm91bmQgd2FzIGFkZGVkIGZvciwgc28gYWxsIEkgY291bGQgZG8gaXMgbWFrZSBhbiBlZHVjYXRlZCBndWVzcworYXQgdGhlICNkZWZpbmVzIGl0cyBjb21waWxlciB3b3VsZCBiZSBsaWtlbHkgdG8gc2V0LgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTQgKysrKysrKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZGM5MjhhZS4uNjU0MzljZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTc5LDE0ICsxNzksMjQgQEAgQUNfRUdSRVBfQ1BQKHllcywKKyAjZW5kaWYKKyBdLCBMSUJTPSIkTElCUyAtbHNvY2tldCAtbGluZXQiO3NlcXB0eD0xKQorIAorK0FDX0NIRUNLSU5HKFNWUjQpCisrQUNfRUdSRVBfQ1BQKHllcywKKytbbWFpbiAoKSB7CisrI2lmIGRlZmluZWQoU1ZSNCkgfHwgZGVmaW5lZChfX1NWUjQpCisrICB5ZXM7CisrI2VuZGlmCisrXSwgQUNfTk9URSgtIHlvdSBoYXZlIGEgU1ZSNCBzeXN0ZW0pIEFDX0RFRklORShTVlI0KSBzdnI0PTEpCisraWYgdGVzdCAtbiAiJHN2cjQiIDsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sZWxmIgorIEFDX0NIRUNLSU5HKFNWUjQpCisgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDx1dG1weC5oPgorIF0sLAorLVtBQ19DSEVDS19IRUFERVIoZHdhcmYuaCwgQUNfREVGSU5FKFNWUjQpIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSwKKy1bQUNfQ0hFQ0tfSEVBREVSKGVsZi5oLCBBQ19ERUZJTkUoU1ZSNCkgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pKV0pXQorK1tBQ19DSEVDS19IRUFERVIoZHdhcmYuaCwgQUNfREVGSU5FKEJVR0dZR0VUTE9HSU4pLAorK1tBQ19DSEVDS19IRUFERVIoZWxmLmgsIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSldKV0KKyAsTElCUz0iJG9sZGxpYnMiKQorK2ZpCisrCisgQUNfQ0hFQ0tfSEVBREVSUyhbc3Ryb3B0cy5oIHN0cmluZy5oIHN0cmluZ3MuaF0pCisgCisgQUNfQ0hFQ0tJTkcoZm9yIFNvbGFyaXMgMi54KQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Qcm92aWRlLWNyb3NzLWNvbXBpbGUtYWx0ZXJuYXRpdmVzLWZvci1BQ19UUllfUlVOLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDhiZjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vUHJvdmlkZS1jcm9zcy1jb21waWxlLWFsdGVybmF0aXZlcy1mb3ItQUNfVFJZX1JVTi5wYXRjaApAQCAtMCwwICsxLDEzNyBAQAorRnJvbSBjZDBmN2YxMGEzZmZmYmM2MGZlNTVlYjIwMDQ3NGQxM2ZlMWRhNjViIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMDozNDoyOSArMDMwMAorU3ViamVjdDogW1BBVENIIDIvNF0gUHJvdmlkZSBjcm9zcyBjb21waWxlIGFsdGVybmF0aXZlcyBmb3IgQUNfVFJZX1JVTgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDI3NjkwYTYuLmNlODlmNTYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTM0OCw3ICszNDgsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIGZpZm9zIGFyZSB1c2FibGUpIGZpZm89MSwKKy1BQ19OT1RFKC0geW91ciBmaWZvcyBhcmUgbm90IHVzYWJsZSkpCisrQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIG5vdCB1c2FibGUpLAorK0FDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIGZpZm9zIGFyZSB1c2FibGUpIGZpZm89MSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIAorIGlmIHRlc3QgLW4gIiRmaWZvIjsgdGhlbgorQEAgLTM5Niw3ICszOTcsOCBAQCBtYWluKCkKKyAgIGV4aXQoMCk7CisgfQorIF0sIEFDX05PVEUoLSB5b3VyIGltcGxlbWVudGF0aW9uIGlzIG9rKSwgCistQUNfTk9URSgtIHlvdSBoYXZlIGEgYnJva2VuIGltcGxlbWVudGF0aW9uKSBBQ19ERUZJTkUoQlJPS0VOX1BJUEUpIGZpZm9icj0xKQorK0FDX05PVEUoLSB5b3UgaGF2ZSBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbikgQUNfREVGSU5FKEJST0tFTl9QSVBFKSBmaWZvYnI9MSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBmaWZvIGltcGxlbWVudGF0aW9uIGlzIG9rKSkKKyBybSAtZiAvdG1wL2NvbmZ0ZXN0KgorIGZpCisgCitAQCAtNDU4LDcgKzQ2MCw4IEBAIG1haW4oKQorICAgZXhpdCgwKTsKKyB9CisgXSwgQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgdXNhYmxlKSBzb2NrPTEsCistQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSkpCisrQUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc29ja2V0cyBhcmUgdXNhYmxlKSBzb2NrPTEpCisgcm0gLWYgL3RtcC9jb25mdGVzdCoKKyAKKyBpZiB0ZXN0IC1uICIkc29jayI7IHRoZW4KK0BAIC00OTcsNyArNTAwLDggQEAgbWFpbigpCisgfQorIF0sQUNfTk9URSgtIHlvdSBhcmUgbm9ybWFsKSwKKyBBQ19OT1RFKC0gdW5peCBkb21haW4gc29ja2V0cyBhcmUgbm90IGtlcHQgaW4gdGhlIGZpbGVzeXN0ZW0pCistQUNfREVGSU5FKFNPQ0tfTk9UX0lOX0ZTKSBzb2Nrbm9mcz0xKQorK0FDX0RFRklORShTT0NLX05PVF9JTl9GUykgc29ja25vZnM9MSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBzb2NrZXRzIGFyZSBub3JtYWwpKQorIHJtIC1mIC90bXAvY29uZnRlc3QqCisgZmkKKyAKK0BAIC02MjQsNyArNjI4LDggQEAgbWFpbigpCisgICBleGl0KDApOworIH0KKyBdLEFDX05PVEUoLSBzZWxlY3QgaXMgb2spLAorLUFDX05PVEUoLSBzZWxlY3QgY2FuJ3QgY291bnQpIEFDX0RFRklORShTRUxFQ1RfQlJPS0VOKSkKKytBQ19OT1RFKC0gc2VsZWN0IGNhbid0IGNvdW50KSBBQ19ERUZJTkUoU0VMRUNUX0JST0tFTiksCisrQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc2VsZWN0IGlzIG9rKSkKKyAKKyBkbmwKKyBkbmwgICAgKioqKiAgdGVybWNhcCBvciB0ZXJtaW5mbyAgKioqKgorQEAgLTY2Niw3ICs2NzEsOCBAQCBtYWluKCkKKyB7CisgIGV4aXQoc3RyY21wKHRnb3RvKCIlcDElZCIsIDAsIDEpLCAiMSIpID8gMCA6IDEpOworIH1dLCBBQ19OT1RFKC0geW91IHVzZSB0aGUgdGVybWNhcCBkYXRhYmFzZSksCistQUNfTk9URSgtIHlvdSB1c2UgdGhlIHRlcm1pbmZvIGRhdGFiYXNlKSBBQ19ERUZJTkUoVEVSTUlORk8pKQorK0FDX05PVEUoLSB5b3UgdXNlIHRoZSB0ZXJtaW5mbyBkYXRhYmFzZSkgQUNfREVGSU5FKFRFUk1JTkZPKSwKKytBQ19OT1RFKC0gc2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyB0ZXJtaW5mbyBkYXRhYmFzZSBpcyB1c2VkKSBBQ19ERUZJTkUoVEVSTUlORk8pKQorIEFDX0NIRUNLSU5HKG9zcGVlZCkKKyBBQ19UUllfTElOSyhleHRlcm4gc2hvcnQgb3NwZWVkOyxvc3BlZWQ9NTssLEFDX0RFRklORShORUVEX09TUEVFRCkpCisgCitAQCAtODAxLDcgKzgwNyw4IEBAIG1haW4oKQorICAgICBlbHNlCisgICAgICAgQUNfTk9URSgtIGNhbid0IGRldGVybWluZSAtIGFzc3VtZSBwdHlzIGFyZSB3b3JsZCBhY2Nlc3NhYmxlKQorICAgICBmaQorLSAgXQorKyAgXSwKKysgIEFDX05PVEUoLSBza2lwcGluZyBjaGVjayBiZWNhdXNlIHdlIGFyZSBjcm9zcyBjb21waWxpbmc7IGFzc3VtaW5nIHB0eXMgYXJlIHdvcmxkIGFjY2Vzc2FibGUpCisgKQorIHJtIC1mIGNvbmZ0ZXN0X2dycAorIGZpCitAQCAtODg1LDcgKzg5Miw3IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgbG9hZD0xKQorIGZpCistaWYgdGVzdCAteiAiJGxvYWQiIDsgdGhlbgorK2lmIHRlc3QgLXogIiRsb2FkIiAmJiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsgdGhlbgorIEFDX0NIRUNLSU5HKGZvciBrZXJuZWxmaWxlKQorIGZvciBjb3JlIGluIC91bml4IC92bXVuaXggL2R5bml4IC9ocC11eCAveGVsb3MgL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC91bmljb3MgL21hY2ggL25ldGJzZCAvMzg2YnNkIC9kZ3V4IC9ic2QgL3N0YW5kL3ZtdW5peDsgZG8KKyAgIGlmIHRlc3QgLWYgJGNvcmUgfHwgdGVzdCAtYyAkY29yZTsgdGhlbgorQEAgLTEwNzgsNyArMTA4NSw3IEBAIG1haW4oKQorICNlbmRpZgorICAgZXhpdCgwKTsKKyB9CistXSwsQUNfREVGSU5FKFNZU1ZTSUdTKSkKKytdLCxBQ19ERUZJTkUoU1lTVlNJR1MpLDopCisgCisgZmkKKyAKK0BAIC0xMTU4LDcgKzExNjUsNyBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFQkNPUFkpKQorK31dLCBBQ19ERUZJTkUoVVNFQkNPUFkpLCw6KQorIAorIEFDX1RSWV9SVU4oWworICNkZWZpbmUgYmNvcHkocyxkLGwpIG1lbW1vdmUoZCxzLGwpCitAQCAtMTE3Myw3ICsxMTgwLDggQEAgbWFpbigpIHsKKyAgIGlmIChzdHJuY21wKGJ1ZiwgImNkZWRlZiIsIDYpKQorICAgICBleGl0KDEpOworICAgZXhpdCgwKTsgLyogbGliYyB2ZXJzaW9uIHdvcmtzIHByb3Blcmx5LiAgKi8KKy19XSwgQUNfREVGSU5FKFVTRU1FTU1PVkUpKQorK31dLCBBQ19ERUZJTkUoVVNFTUVNTU9WRSksLAorKyAgQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgdXNlIG1lbW1vdmUpIEFDX0RFRklORShVU0VNRU1NT1ZFKSkKKyAKKyAKKyBBQ19UUllfUlVOKFsKK0BAIC0xMTg5LDcgKzExOTcsNyBAQCBtYWluKCkgeworICAgaWYgKHN0cm5jbXAoYnVmLCAiY2RlZGVmIiwgNikpCisgICAgIGV4aXQoMSk7CisgICBleGl0KDApOyAvKiBsaWJjIHZlcnNpb24gd29ya3MgcHJvcGVybHkuICAqLworLX1dLCBBQ19ERUZJTkUoVVNFTUVNQ1BZKSkKKyt9XSwgQUNfREVGSU5FKFVTRU1FTUNQWSksLDopCisgCisgQUNfU1lTX0xPTkdfRklMRV9OQU1FUworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9SZW1vdmUtcmVkdW5kYW50LWNvbXBpbGVyLXNhbml0eS1jaGVja3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2MmMxMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL1JlbW92ZS1yZWR1bmRhbnQtY29tcGlsZXItc2FuaXR5LWNoZWNrcy5wYXRjaApAQCAtMCwwICsxLDY1IEBACitGcm9tIDczYjcyNmMyNWY5NGMxYjE1NTE0ZWQ5MjQ5YjkyN2FmZGZiYmZiOTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogRnJpLCA3IEF1ZyAyMDE1IDEwOjMwOjQwICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS80XSBSZW1vdmUgcmVkdW5kYW50IGNvbXBpbGVyIHNhbml0eSBjaGVja3MKKworQUNfUFJPR19DQyBhbHJlYWR5IHBlcmZvcm1zIHNhbml0eSBjaGVja3MuIEFuZCB1bmxpa2UgdGhlIHJlbW92ZWQKK2NoZWNrcywgaXQgZG9lcyBzbyBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIGNyb3NzIGNvbXBpbGF0aW9uLgorCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBmZmUyZTM3Li4yNzY5MGE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC00OCwzMSArNDgsNiBAQCBBQ19QUk9HX0dDQ19UUkFESVRJT05BTAorIEFDX0lTQ19QT1NJWAorIEFDX1VTRV9TWVNURU1fRVhURU5TSU9OUworIAorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsWworLWlmIHRlc3QgJENDICE9IGNjIDsgdGhlbgorLUFDX05PVEUoWW91ciAkQ0MgZmFpbGVkIC0gcmVzdGFydGluZyB3aXRoIENDPWNjKQorLUFDX05PVEUoKQorLUNDPWNjCistZXhwb3J0IENDCistZXhlYyAkMCAkY29uZmlndXJlX2FyZ3MKKy1maQorLV0pCistCistQUNfVFJZX1JVTihtYWluKCl7ZXhpdCgwKTt9LCwKKy1leGVjIDU+JjIKKy1ldmFsICRhY19saW5rCistQUNfTk9URShDQz0kQ0M7IENGTEFHUz0kQ0ZMQUdTOyBMSUJTPSRMSUJTOykKKy1BQ19OT1RFKCRhY19jb21waWxlKQorLUFDX01TR19FUlJPUihDYW4ndCBydW4gdGhlIGNvbXBpbGVyIC0gc29ycnkpKQorLQorLUFDX1RSWV9SVU4oWworLW1haW4oKQorLXsKKy0gIGludCBfX3NvbWV0aGluZ19zdHJhbmdlXygpOworLSAgX19zb21ldGhpbmdfc3RyYW5nZV8oMCk7CistfQorLV0sQUNfTVNHX0VSUk9SKFlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc2V0IHRoZSBleGl0IHN0YXR1cyAtIHNvcnJ5KSkKKy0KKyBBQ19QUk9HX0FXSworIAorIEFDX1BST0dfSU5TVEFMTAorQEAgLTEzMDAsOCArMTI3NSw2IEBAIGZpCisgZG5sIFB0eCBidWcgd29ya2Fyb3VuZCAtLSBpbnNlcnQgLWxjIGFmdGVyIC1sdGVybWNhcAorIHRlc3QgLW4gIiRzZXFwdHgiICYmIExJQlM9Ii1sdGVybWNhcCAtbGMgLWxzb2NrZXQgLWxpbmV0IC1sbnNsIC1sc2VjIC1sc2VxIgorIAorLUFDX1RSWV9SVU4obWFpbigpe2V4aXQoMCk7fSwsQUNfTVNHX0VSUk9SKENhbid0IHJ1biB0aGUgY29tcGlsZXIgLSBpbnRlcm5hbCBlcnJvci4gU29ycnkuKSkKKy0KKyBFVENTQ1JFRU5SQz0KKyBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRoZSBnbG9iYWwgc2NyZWVucmMgZmlsZSkKKyBBQ19BUkdfV0lUSChzeXMtc2NyZWVucmMsIFsgIC0td2l0aC1zeXMtc2NyZWVucmM9cGF0aCB0byB0aGUgZ2xvYmFsIHNjcmVlbnJjIGZpbGVdLCBbIEVUQ1NDUkVFTlJDPSIke3dpdGh2YWx9IiBdKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9Ta2lwLWhvc3QtZmlsZS1zeXN0ZW0tY2hlY2tzLXdoZW4tY3Jvc3MtY29tcGlsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2U1NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW4vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaApAQCAtMCwwICsxLDEzNSBAQAorRnJvbSBkMGIyMGU0Y2FjYzYwYWQ2MmEyMTUwY2UwNzM4OGNiNWEyNWMyMDQwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgNyBBdWcgMjAxNSAxMTowOTowMSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvNF0gU2tpcCBob3N0IGZpbGUgc3lzdGVtIGNoZWNrcyB3aGVuIGNyb3NzLWNvbXBpbGluZworCitNb2RpZmllZCBmcm9tIHBhdGNoIGJ5IE1hYXJ0ZW4gdGVyIEh1dXJuZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2J1Z3MvPzQzMjIzXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjMgKysrKysrKysrKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggY2U4OWY1Ni4uZGM5MjhhZSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtODUsNyArODUsNyBAQCBBQ19BUkdfRU5BQkxFKHNvY2tldC1kaXIsCisgZG5sCisgZG5sICAgICoqKiogIHNwZWNpYWwgdW5peCB2YXJpYW50cyAgKioqKgorIGRubAorLWlmIHRlc3QgLW4gIiRJU0MiOyB0aGVuCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyAmJiB0ZXN0IC1uICIkSVNDIiA7IHRoZW4KKyAgIEFDX0RFRklORShJU0MpIExJQlM9IiRMSUJTIC1saW5ldCIKKyBmaQorIAorQEAgLTk2LDEwICs5NiwxMSBAQCBkbmwgQUNfREVGSU5FKE9TRjEpCSMgdGhpcyBkaXNhYmxlcyBNSVBTIGFnYWluLi4uLgorIGRubCBmaQorIGRubCBmaQorIAorLWlmIHRlc3QgLWYgL3N5c1Y2OCA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3N5c1Y2OCA7IHRoZW4KKyBBQ19ERUZJTkUoc3lzVjY4KQorIGZpCisgCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgTUlQUykKKyBpZiB0ZXN0IC1mIC9saWIvbGlibWxkLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJtbGQuYSB8fCB0ZXN0IC1mIC91c3IvbGliL2NtcGxycy9jYy9saWJtbGQuYTsgdGhlbgorIG9sZGxpYnM9IiRMSUJTIgorQEAgLTEyMyw2ICsxMjQsNyBAQCBBQ19ERUZJTkUoVVNFX1dBSVQyKSBMSUJTPSIkTElCUyAtbGJzZCIgOyBDQz0iJENDIC1JL3Vzci9pbmNsdWRlL2JzZCIKKyApKQorIGZpCisgZmkKKytmaQorIAorIAorIEFDX0NIRUNLSU5HKGZvciBVbHRyaXgpCitAQCAtMTMyLDcgKzEzNCw3IEBAIEFDX0VHUkVQX0NQUCh5ZXMsCisgI2VuZGlmCisgXSwgVUxUUklYPTEpCisgCistaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJweXIuYSA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3Vzci9saWIvbGlicHlyLmEgOyB0aGVuCisgb2xkbGlicz0iJExJQlMiCisgTElCUz0iJExJQlMgLWxweXIiCisgQUNfQ0hFQ0tJTkcoUHlyYW1pZCBPU1gpCitAQCAtNjc5LDE3ICs2ODEsMjEgQEAgQUNfVFJZX0xJTksoZXh0ZXJuIHNob3J0IG9zcGVlZDssb3NwZWVkPTU7LCxBQ19ERUZJTkUoTkVFRF9PU1BFRUQpKQorIGRubAorIGRubCAgICAqKioqICBQVFkgc3BlY2lmaWMgdGhpbmdzICAqKioqCisgZG5sCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyBBQ19DSEVDS0lORyhmb3IgL2Rldi9wdGMpCisgaWYgdGVzdCAtciAvZGV2L3B0YzsgdGhlbgorIEFDX0RFRklORShIQVZFX0RFVl9QVEMpCisgZmkKKytmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIFNWUjQgcHR5cykKKyBzeXN2cjRwdHlzPQorIGlmIHRlc3QgLWMgL2Rldi9wdG14IDsgdGhlbgorIEFDX1RSWV9MSU5LKFtdLFtwdHNuYW1lKDApO2dyYW50cHQoMCk7dW5sb2NrcHQoMCk7XSxbQUNfREVGSU5FKEhBVkVfU1ZSNF9QVFlTKQorIHN5c3ZyNHB0eXM9MV0pCisgZmkKKytmaQorIAorIEFDX0NIRUNLX0ZVTkNTKGdldHB0KQorIAorQEAgLTY5OSw2ICs3MDUsNyBAQCBBQ19DSEVDS19GVU5DUyhvcGVucHR5LCwKKyBbQUNfQ0hFQ0tfTElCKHV0aWwsb3BlbnB0eSwgW0FDX0RFRklORShIQVZFX09QRU5QVFkpXSBbTElCUz0iJExJQlMgLWx1dGlsIl0pXSkKKyBmaQorIAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIHB0eXJhbmdlcykKKyBpZiB0ZXN0IC1kIC9kZXYvcHR5bSA7IHRoZW4KKyBwZGlyPScvZGV2L3B0eW0nCitAQCAtNzIyLDYgKzcyOSw3IEBAIHAxPWBlY2hvICRwdHlzIHwgdHIgJyAnICdcMDEyJyB8IHNlZCAtZSAncy9eLipcKC5cKSQvXDEvZycgIHwgc29ydCAtdSB8IHRyIC1kICdcCisgQUNfREVGSU5FX1VOUVVPVEVEKFBUWVJBTkdFMCwiJHAwIikKKyBBQ19ERUZJTkVfVU5RVU9URUQoUFRZUkFOR0UxLCIkcDEiKQorIGZpCisrZmkKKyAKKyBkbmwgICAgKioqKiAgcHR5IG1vZGUvZ3JvdXAgaGFuZGxpbmcgKioqKgorIGRubAorQEAgLTg2OSwxNCArODc3LDE2IEBAIGZpCisgZG5sCisgZG5sICAgICoqKiogIGxvYWRhdiAgKioqKgorIGRubAorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgQUNfQ0hFQ0tJTkcoZm9yIGxpYnV0aWwocykpCisgdGVzdCAtZiAvdXNyL2xpYi9saWJ1dGlscy5hICYmIExJQlM9IiRMSUJTIC1sdXRpbHMiCisgdGVzdCAtZiAvdXNyL2xpYi9saWJ1dGlsLmEgJiYgTElCUz0iJExJQlMgLWx1dGlsIgorK2ZpCisgCisgQUNfQ0hFQ0tJTkcoZ2V0bG9hZGF2ZykKKyBBQ19UUllfTElOSygsW2dldGxvYWRhdmcoKGRvdWJsZSAqKTAsIDApO10sCisgQUNfREVGSU5FKExPQURBVl9HRVRMT0FEQVZHKSBsb2FkPTEsCistaWYgdGVzdCAtZiAvdXNyL2xpYi9saWJrdm0uYSA7IHRoZW4KKytpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vICYmIHRlc3QgLWYgL3Vzci9saWIvbGlia3ZtLmEgOyB0aGVuCisgb2xpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sa3ZtIgorIEFDX0NIRUNLSU5HKGdldGxvYWRhdmcgd2l0aCAtbGt2bSkKK0BAIC0xMDk0LDEzICsxMTA0LDE4IEBAIGRubCAgICAqKioqICBsaWJyYXJpZXMgICoqKioKKyBkbmwKKyAKKyBBQ19DSEVDS0lORyhmb3IgY3J5cHQgYW5kIHNlYyBsaWJyYXJpZXMpCisraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KKyB0ZXN0IC1mIC9saWIvbGliY3J5cHRfZC5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGliY3J5cHRfZC5hICYmIExJQlM9IiRMSUJTIC1sY3J5cHRfZCIKKytmaQorIG9sZGxpYnM9IiRMSUJTIgorIExJQlM9IiRMSUJTIC1sY3J5cHQiCisgQUNfQ0hFQ0tJTkcoY3J5cHQpCisgQUNfVFJZX0xJTksoLCwsTElCUz0iJG9sZGxpYnMiKQorK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm8gOyB0aGVuCisgdGVzdCAtZiAvbGliL2xpYnNlYy5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlic2VjLmEgJiYgTElCUz0iJExJQlMgLWxzZWMiCisgdGVzdCAtZiAvbGliL2xpYnNoYWRvdy5hIHx8IHRlc3QgLWYgL3Vzci9saWIvbGlic2hhZG93LmEgJiYgTElCUz0iJExJQlMgLWxzaGFkb3ciCisrZmkKKysKKyBvbGRsaWJzPSIkTElCUyIKKyBMSUJTPSIkTElCUyAtbHN1biIKKyBBQ19DSEVDS0lORyhJUklYIHN1biBsaWJyYXJ5KQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL2ZpeC1wYXJhbGxlbC1tYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2FmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9maXgtcGFyYWxsZWwtbWFrZS5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGlzIGZpeGVzIHRoZSBwYXJhbGxlbCBtYWtlIGluc3RhbGwgZmFpbHVyZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogc2NyZWVuLTQuMC4zL01ha2VmaWxlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2NyZWVuLTQuMC4zLm9yaWcvTWFrZWZpbGUuaW4KKysrKyBzY3JlZW4tNC4wLjMvTWFrZWZpbGUuaW4KK0BAIC03MCw3ICs3MCw3IEBAIHNjcmVlbjogJChPRklMRVMpCisgLmMubzoKKyAJJChDQykgLWMgLUkuIC1JJChzcmNkaXIpICQoTV9DRkxBR1MpICQoREVGUykgJChPUFRJT05TKSAkKENGTEFHUykgJDwKKyAKKy1pbnN0YWxsX2JpbjogLnZlcnNpb24gc2NyZWVuCisraW5zdGFsbF9iaW46IC52ZXJzaW9uIHNjcmVlbiBpbnN0YWxsZGlycworIAktaWYgWyAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKSBdICYmIFsgISAtZiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKS5vbGQgXTsgXAorIAkJdGhlbiBtdiAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKSAkKERFU1RESVIpJChiaW5kaXIpLyQoU0NSRUVOKS5vbGQ7IGZpCisgCSQoSU5TVEFMTF9QUk9HUkFNKSBzY3JlZW4gJChERVNURElSKSQoYmluZGlyKS8kKFNDUkVFTikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zY3JlZW4vc2NyZWVuL3NjcmVlbi5wYW0gYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9zY3JlZW4ucGFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjU3ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbi9zY3JlZW4ucGFtCkBAIC0wLDAgKzEsMiBAQAorIyVQQU0tMS4wCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2NyZWVuL3NjcmVlbl80LjMuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQ1N2FmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NjcmVlbi9zY3JlZW5fNC4zLjEuYmIKQEAgLTAsMCArMSw1MiBAQAorU1VNTUFSWSA9ICJNdWx0aXBsZXhpbmcgdGVybWluYWwgbWFuYWdlciIKK0RFU0NSSVBUSU9OID0gIlNjcmVlbiBpcyBhIGZ1bGwtc2NyZWVuIHdpbmRvdyBtYW5hZ2VyIFwKK3RoYXQgbXVsdGlwbGV4ZXMgYSBwaHlzaWNhbCB0ZXJtaW5hbCBiZXR3ZWVuIHNldmVyYWwgXAorcHJvY2Vzc2VzLCB0eXBpY2FsbHkgaW50ZXJhY3RpdmUgc2hlbGxzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zY3JlZW4vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvYnVncy8/ZnVuYz1hZGRpdGVtJmdyb3VwPXNjcmVlbiIKKworU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbi5oO2VuZGxpbmU9MjY7bWQ1PTM5NzExNDI5ODkyODlhODE5OGE1NDQyMjA3MDNjMmJmIgorCitERVBFTkRTID0gIm5jdXJzZXMgXAorICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xpYnBhbScsICcnLCBkKX0iCitSREVQRU5EU18ke1BOfSA9ICJiYXNlLWZpbGVzIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vc2NyZWVuL3NjcmVlbi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLW1ha2UucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdmaWxlOi8vc2NyZWVuLnBhbScsICcnLCBkKX0gXAorICAgICAgICAgICBmaWxlOi8vUmVtb3ZlLXJlZHVuZGFudC1jb21waWxlci1zYW5pdHktY2hlY2tzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL1Byb3ZpZGUtY3Jvc3MtY29tcGlsZS1hbHRlcm5hdGl2ZXMtZm9yLUFDX1RSWV9SVU4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vU2tpcC1ob3N0LWZpbGUtc3lzdGVtLWNoZWNrcy13aGVuLWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9Bdm9pZC1taXMtaWRlbnRpZnlpbmctc3lzdGVtcy1hcy1TVlI0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWZvci1tdWx0aWpvYi1idWlsZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLWNvbW0uaC1ub3ctZGVwZW5kcy1vbi10ZXJtLmgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjViYjNiMGZmMjY3NGUyOTM3OGMzMWFkMzQxMTE3MGFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZhNDA0OWY4YWVlMjgzZGU2MmUyODNkNDI3ZjJjZmQzNWQ2YzM2OWI0MGY3ZjQ1Zjk0N2RiZmQ5MTU2OTlkNjMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbdXRlbXB0ZXJdID0gImFjX2N2X2hlYWRlcl91dGVtcHRlcl9oPXllcyxhY19jdl9oZWFkZXJfdXRlbXB0ZXJfaD1ubyxsaWJ1dGVtcHRlciwiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtcHR5LW1vZGU9MDYyMCAtLXdpdGgtcHR5LWdyb3VwPTUgXAorICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnLS1lbmFibGUtcGFtJywgJy0tZGlzYWJsZS1wYW0nLCBkKX0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NDQgJHtXT1JLRElSfS9zY3JlZW4ucGFtICR7RH0vJHtzeXNjb25mZGlyfS9wYW0uZC9zY3JlZW4KKwlmaQorfQorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWdyZXAgLXEgIl4ke2JpbmRpcn0vc2NyZWVuJCIgJEQke3N5c2NvbmZkaXJ9L3NoZWxscyB8fCBlY2hvICR7YmluZGlyfS9zY3JlZW4gPj4gJEQke3N5c2NvbmZkaXJ9L3NoZWxscworfQorCitwa2dfcG9zdHJtXyR7UE59ICgpIHsKKwlwcmludGYgIiQoZ3JlcCAtdiAiXiR7YmluZGlyfS9zY3JlZW4kIiAkRCR7c3lzY29uZmRpcn0vc2hlbGxzKVxuIiA+ICREJHtzeXNjb25mZGlyfS9zaGVsbHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4xLjIvTWFrZXZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwOWY1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL01ha2V2YXJzCkBAIC0wLDAgKzEsMjUgQEAKKyMgTWFrZWZpbGUgdmFyaWFibGVzIGZvciBQTyBkaXJlY3RvcnkgaW4gYW55IHBhY2thZ2UgdXNpbmcgR05VIGdldHRleHQuCisKKyMgVXN1YWxseSB0aGUgbWVzc2FnZSBkb21haW4gaXMgdGhlIHNhbWUgYXMgdGhlIHBhY2thZ2UgbmFtZS4KK0RPTUFJTiA9ICQoUEFDS0FHRSkKKworIyBUaGVzZSB0d28gdmFyaWFibGVzIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhpcyBkaXJlY3RvcnkuCitzdWJkaXIgPSBwbwordG9wX2J1aWxkZGlyID0gLi4KKworIyBUaGVzZSBvcHRpb25zIGdldCBwYXNzZWQgdG8geGdldHRleHQuCitYR0VUVEVYVF9PUFRJT05TID0gLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fCisKKyMgVGhpcyBpcyB0aGUgY29weXJpZ2h0IGhvbGRlciB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byB0aGUgaGVhZGVyIG9mIHRoZQorIyAkKERPTUFJTikucG90IGZpbGUuICBTZXQgdGhpcyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgc3Vycm91bmRpbmcKKyMgcGFja2FnZS4gIChOb3RlIHRoYXQgdGhlIG1zZ3N0ciBzdHJpbmdzLCBleHRyYWN0ZWQgZnJvbSB0aGUgcGFja2FnZSdzCisjIHNvdXJjZXMsIGJlbG9uZyB0byB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgcGFja2FnZS4pICBUcmFuc2xhdG9ycyBhcmUKKyMgZXhwZWN0ZWQgdG8gdHJhbnNmZXIgdGhlIGNvcHlyaWdodCBmb3IgdGhlaXIgdHJhbnNsYXRpb25zIHRvIHRoaXMgcGVyc29uCisjIG9yIGVudGl0eSwgb3IgdG8gZGlzY2xhaW0gdGhlaXIgY29weXJpZ2h0LiAgVGhlIGVtcHR5IHN0cmluZyBzdGFuZHMgZm9yCisjIHRoZSBwdWJsaWMgZG9tYWluOyBpbiB0aGlzIGNhc2UgdGhlIHRyYW5zbGF0b3JzIGFyZSBleHBlY3RlZCB0byBkaXNjbGFpbQorIyB0aGVpciBjb3B5cmlnaHQuCitDT1BZUklHSFRfSE9MREVSID0gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBpcyB0aGUgbGlzdCBvZiBsb2NhbGUgY2F0ZWdvcmllcywgYmV5b25kIExDX01FU1NBR0VTLCBmb3Igd2hpY2ggdGhlCisjIG1lc3NhZ2UgY2F0YWxvZ3Mgc2hhbGwgYmUgdXNlZC4gIEl0IGlzIHVzdWFsbHkgZW1wdHkuCitFWFRSQV9MT0NBTEVfQ0FURUdPUklFUyA9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9maXhfcmV0dXJuX3R5cGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2NTUxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL2ZpeF9yZXR1cm5fdHlwZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQ2hhbmdlIHRoZSBnZXRsaW5lIHJldHVybiB0eXBlIHRvIG1hdGNoIGl0cyBkZWNsYXJhdGlvbi4KKworU2lnbmVkLW9mZi1ieTogRG9uZ3hpYW8gWHUgPGRvbmd4aWFvLnh1QGludGVsLmNvbT4KKworZGlmZiAtdXJOIHNlZC00LjEuMi1vcmlnL2xpYi9nZXRsaW5lLmMgc2VkLTQuMS4yL2xpYi9nZXRsaW5lLmMKKy0tLSBzZWQtNC4xLjItb3JpZy9saWIvZ2V0bGluZS5jCTIwMTAtMDgtMzEgMDg6NDc6NTAuMDcwMDk0MDI0ICswODAwCisrKysgc2VkLTQuMS4yL2xpYi9nZXRsaW5lLmMJMjAxMC0wOC0zMSAwODo0ODo1MC45ODIxNzgxNzIgKzA4MDAKK0BAIC0zMCw3ICszMCw3IEBACisgICAgbmVjZXNzYXJ5LiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCAobm90IGluY2x1ZGluZyB0aGUKKyAgICBudWxsIHRlcm1pbmF0b3IpLCBvciAtMSBvbiBlcnJvciBvciBFT0YuICAqLworIAorLXNpemVfdAorK3NzaXplX3QKKyBnZXRsaW5lIChsaW5lcHRyLCBuLCBzdHJlYW0pCisgICAgICBjaGFyICoqbGluZXB0cjsKKyAgICAgIHNpemVfdCAqbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMS4yL3NlZC00LjEuMl9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTk0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjEuMi9zZWQtNC4xLjJfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCithdXRvbWFrZS0xLjEyLnggaGFzIGRlcHJlY2F0ZWQgdXNlIG9mIEBta2Rpcl9wQCwgZml4IHRoZSBpc3N1ZSBieSB1c2luZyBATUtESVJfUEAgaW5zdGVhZC4KKworQXZvaWQgdGhpcyBidWlsZCBpc3N1ZToKK3wgbWFrZVsxXTogbWtkaXJfcEA6IENvbW1hbmQgbm90IGZvdW5kCit8IG1ha2VbMV06ICoqKiBbaW5zdGFsbC1kYXRhLXllc10gRXJyb3IgMTI3CisKK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEzCisKK0luZGV4OiBzZWQtNC4xLjIvaW50bC9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlZC00LjEuMi5vcmlnL2ludGwvTWFrZWZpbGUuaW4KKysrKyBzZWQtNC4xLjIvaW50bC9NYWtlZmlsZS5pbgorQEAgLTQwLDcgKzQwLDcgQEAgc3ViZGlyID0gaW50bAorIElOU1RBTEwgPSBASU5TVEFMTEAKKyBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorIG1raW5zdGFsbGRpcnMgPSAkKG1rZGlyX3ApCistbWtkaXJfcCA9IEBta2Rpcl9wQAorK21rZGlyX3AgPSBATUtESVJfUEAKKyAKKyBsID0gQElOVExfTElCVE9PTF9TVUZGSVhfUFJFRklYQAorIAorSW5kZXg6IHNlZC00LjEuMi9wby9NYWtlZmlsZS5pbi5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlZC00LjEuMi5vcmlnL3BvL01ha2VmaWxlLmluLmluCisrKysgc2VkLTQuMS4yL3BvL01ha2VmaWxlLmluLmluCitAQCAtMjksNyArMjksNyBAQCBnZXR0ZXh0c3JjZGlyID0gJChkYXRhZGlyKS9nZXR0ZXh0L3BvCisgSU5TVEFMTCA9IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMyL2J1aWxkMC90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9iaW4vaW5zdGFsbCAtYworIElOU1RBTExfREFUQSA9ICR7SU5TVEFMTH0gLW0gNjQ0CisgbWtpbnN0YWxsZGlycyA9ICQobWtkaXJfcCkKKy1ta2Rpcl9wID0gQG1rZGlyX3BACisrbWtkaXJfcCA9IEBNS0RJUl9QQAorIAorIENDID0gaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vc3J2L2hvbWUvbml0aW4vYnVpbGRzMi9idWlsZDAvdG1wL3N5c3Jvb3RzL3FlbXV4ODYKKyBHTVNHRk1UID0gL3Nydi9ob21lL25pdGluL2J1aWxkczIvYnVpbGQwL3RtcC9zeXNyb290cy94ODZfNjQtbGludXgvdXNyL2Jpbi9tc2dmbXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMWE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9nbnVsaWIubWsgYi9saWIvZ251bGliLm1rCitpbmRleCBlMWQ3NGRiLi5jMGU5MmRkIDEwMDY0NAorLS0tIGEvbGliL2dudWxpYi5taworKysrIGIvbGliL2dudWxpYi5taworQEAgLTE4ODIsNyArMTg4Miw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzBmNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWQtNC4yLjIvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdHN1aXRlIC1rIHJ1bnRlc3QtVEVTVFMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkLTQuMi4yL3NlZC1hZGQtcHRlc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWU4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZC00LjIuMi9zZWQtYWRkLXB0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK3NlZDogYWRkIHB0ZXN0CisKK3B0ZXN0IG5lZWRzIGJ1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzLgorc2VyaWFsLXRlc3RzIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRob3NlIHRhcmdldHMuCisKK0FuZCBmaXggZm9sbG93aW5nIGVycm9yIGFmdGVyIGFkZCBzZXJpYWwtdGVzdHMuCisKK1tzbmlwXQoraGVscDJtYW46IGNhbid0IGdldCBgLS1oZWxwJyBpbmZvIGZyb20gLi4vc2VkL3NlZAorbWFrZVsyXTogKioqIFtzZWQuMV0gRXJyb3IgMgorW3NuaXBdCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8ICAgIDIgKy0KKyBkb2MvTWFrZWZpbGUuYW0gICAgICAgfCAgICAyICstCisgdGVzdHN1aXRlL01ha2VmaWxlLmFtIHwgICAgNiArKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOWQzM2VjOS4uNGYwYzUzMiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNCw3ICs0LDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQtYXV4KQorIEFDX0NPTkZJR19TUkNESVIoW3NlZC9zZWQuY10pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaDpjb25maWdfaC5pbikKKyBBQ19QUkVSRVEoMi42MCkKKy1BTV9JTklUX0FVVE9NQUtFCisrQU1fSU5JVF9BVVRPTUFLRShbc2VyaWFsLXRlc3RzXSkKKyAKKyBTRURfRkVBVFVSRV9WRVJTSU9OPTQuMi4yCisgQUNfREVGSU5FX1VOUVVPVEVEKFNFRF9GRUFUVVJFX1ZFUlNJT04sICIkU0VEX0ZFQVRVUkVfVkVSU0lPTiIsCitkaWZmIC0tZ2l0IGEvZG9jL01ha2VmaWxlLmFtIGIvZG9jL01ha2VmaWxlLmFtCitpbmRleCBhZjY5NzVjLi42ZmQ4YzlhIDEwMDY0NAorLS0tIGEvZG9jL01ha2VmaWxlLmFtCisrKysgYi9kb2MvTWFrZWZpbGUuYW0KK0BAIC0yNSw3ICsyNSw3IEBAICQoc3JjZGlyKS9zLXRleGk6IHNlZC1pbi50ZXhpICQoc3JjZGlyKS9ncm91cGlmeS5zZWQKKyAJZmkKKyAJZWNobyBzdGFtcCA+ICQoc3JjZGlyKS9zLXRleGkKKyAKKy1zZWQuMTogJCh0b3Bfc3JjZGlyKS9zZWQvc2VkLmMgJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMgJChzcmNkaXIpL3NlZC54CisrX3NlZC4xOiAkKHRvcF9zcmNkaXIpL3NlZC9zZWQuYyAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYyAkKHNyY2Rpcikvc2VkLngKKyAJJChIRUxQMk1BTikgLS1uYW1lICJzdHJlYW0gZWRpdG9yIGZvciBmaWx0ZXJpbmcgYW5kIHRyYW5zZm9ybWluZyB0ZXh0IiBcCisgCSAgLXAgc2VkIC0taW5jbHVkZSAkKHNyY2Rpcikvc2VkLnggLW8gJChzcmNkaXIpL3NlZC4xICQoU0VEKSAKKyAKK2RpZmYgLS1naXQgYS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0gYi90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KK2luZGV4IGQ4MGU3MmMuLmIwNWYwMWUgMTAwNjQ0CistLS0gYS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQorQEAgLTk5LDUgKzk5LDExIEBAIEVYVFJBX0RJU1QgPSBcCisgIyBhdXRvbWFrZSBtYWtlcyBgY2hlY2snIGRlcGVuZCBvbiAkKFRFU1RTKS4gIERlY2xhcmUKKyAjIGR1bW15IHRhcmdldHMgZm9yICQoVEVTVFMpIHNvIHRoYXQgbWFrZSBkb2VzIG5vdCBjb21wbGFpbi4KKyAKKytpbnN0YWxsLXB0ZXN0OgorKwljZCAkKEJVSUxERElSKTsgdGFyIC1jZiAtICQoVEVTVERJUikgLS1leGNsdWRlICoubyB8ICggY2QgJChERVNURElSKSAmJiB0YXIgLXhmIC0gKQorKwlmb3IgaSBpbiAkKEVYVFJBX0RJU1QpIHRzdC1yZWdleDIuYzsgZG8gaW5zdGFsbCAkKHNyY2RpcikvJCRpICQoREVTVERJUikvJChURVNURElSKTsgZG9uZQorKwlzZWQgLWUgJ3MvXk1ha2VmaWxlOi9fTWFrZWZpbGU6LycgLWUgJ3MvXnNyY2RpciA9IFwoLipcKS9zcmNkaXIgPSAuLycgLWUgJ3MvYmFzaC9zaC8nIC1pICQoREVTVERJUikvJChURVNURElSKS9NYWtlZmlsZQorKwlmb3IgaSBpbiBgZ3JlcCAtcmwgIi4uL3NlZC9zZWQiICQoREVTVERJUikvJChURVNURElSKWA7IGRvIHNlZCAtZSAncy8uLlwvc2VkXC9zZWQvc2VkLycgLWkgJCRpOyBkb25lCisrCisgLlBIT05ZOiAkKFNFRFRFU1RTKQorICQoU0VEVEVTVFMpOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBlM2E1MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zZWQvc2VkXzQuMS4yLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiU3RyZWFtIEVEaXRvciAodGV4dCBmaWx0ZXJpbmcgdXRpbGl0eSkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc2VkLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VkL3NlZC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTc7bWQ1PWUwMGZmZDE4MzdmMjk4NDM5YTIxNGZkMTk3ZjZhNDA3IgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorUFIgPSAicjciCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zZWQvc2VkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfcmV0dXJuX3R5cGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2VkLTQuMS4yX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtldmFycyIKKworU1JDX1VSSVttZDVzdW1dID0gIjkyOGYwZTA2NDIyZjQxNDA5MTkxNzQwMWYxYTgzNGQwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzOGU4MzdiYTc2NWQ1ZGEwYTMwYzk4YjU3YzI5NTNjZWNlYTk2ODI3ODgyZjU5NDYxMmFjYWNlOTNjZWVlYWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcyBnZXR0ZXh0CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L01ha2V2YXJzICR7U30vcG8vCit9CisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpZiBbICEgJHtEfSR7YmluZGlyfSAtZWYgJHtEfSR7YmFzZV9iaW5kaXJ9IF07IHRoZW4KKwkgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorCSAgICBybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZWRdID0gIiR7YmFzZV9iaW5kaXJ9L3NlZCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2VkL3NlZF80LjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE3ZDhhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NlZC9zZWRfNC4yLjIuYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJTdHJlYW0gRURpdG9yICh0ZXh0IGZpbHRlcmluZyB1dGlsaXR5KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zZWQvIgorTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZWQvc2VkLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9NzY3YWIzYTA2ZDc1ODRmNmZkMDQ2OWFiYWVjNDQxMmYiCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9zZWQvc2VkLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9zZWQtYWRkLXB0ZXN0LnBhdGNoIFwKKwkgICBmaWxlOi8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDExMWRlNGZhYTNiOTg0OGEwNjg2YjJmMjYwYzUwNTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmVhMGE5NGQ0YjYwNTg5NGYzZTJkNTU3MmUzZjk2ZTQ0MTNiY2FkM2EwODVhYWU3MzY3YzJjZjA3OTA4YjJmZiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGdldHRleHQgcHRlc3QKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJtYWtlICR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0tcHRlc3RfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGxvY2FsZS1iYXNlLXJ1LXJ1IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWFjbCBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BURVNUX0VOQUJMRUQnLCAnMScsICctLWVuYWJsZS1yZWdleC10ZXN0cycsICcnLCBkKX0iCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2JpbmRpcn0KKwlpZiBbICEgJHtEfSR7YmluZGlyfSAtZWYgJHtEfSR7YmFzZV9iaW5kaXJ9IF07IHRoZW4KKwkgICAgbXYgJHtEfSR7YmluZGlyfS9zZWQgJHtEfSR7YmFzZV9iaW5kaXJ9L3NlZAorCSAgICBybWRpciAke0R9JHtiaW5kaXJ9LworCWZpCit9CisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInNlZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzZWRdID0gIiR7YmFzZV9iaW5kaXJ9L3NlZCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworVEVTVERJUiA9ICJ0ZXN0c3VpdGUiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSAtQyAke1RFU1RESVJ9IGJ1aWxkdGVzdC1URVNUUworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCW9lX3J1bm1ha2UgLUMgJHtURVNURElSfSBpbnN0YWxsLXB0ZXN0IEJVSUxERElSPSR7Qn0gREVTVERJUj0ke0R9JHtQVEVTVF9QQVRIfSBURVNURElSPSR7VEVTVERJUn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4Yjk1YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS1Eby1ub3QtcmVhZC1sb2dpbi5kZWZzLWJlZm9yZS1kb2luZy1jaHJvb3QucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSAxNzBjMjVjOGUwYjVjM2RjMjYxNWQxZGI5NGM4ZDI0YTEzZmY5OWJmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGV0ZXIgS2plbGxlcnN0ZWR0IDxwa2pAYXhpcy5jb20+CitEYXRlOiBUaHUsIDExIFNlcCAyMDE0IDE1OjExOjIzICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERvIG5vdCByZWFkIGxvZ2luLmRlZnMgYmVmb3JlIGRvaW5nIGNocm9vdCgpCisKK0lmICJ1c2VyYWRkIC0tcm9vdCA8cm9vdD4gLi4uIiB3YXMgdXNlZCwgdGhlIGxvZ2luLmRlZnMgZmlsZSB3b3VsZCBzdGlsbAorYmUgcmVhZCBmcm9tIC9ldGMvbG9naW4uZGVmcyBpbnN0ZWFkIG9mIDxyb290Pi9ldGMvbG9naW4uZGVmcy4gVGhpcyB3YXMKK2R1ZSB0byBnZXRkZWZfdWxvbmcoKSBiZWluZyBjYWxsZWQgYmVmb3JlIHByb2Nlc3Nfcm9vdF9mbGFnKCkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vbGlzdHMuYWxpb3RoLmRlYmlhbi5vcmcvcGlwZXJtYWlsL3BrZy1zaGFkb3ctZGV2ZWwvMjAxNC1TZXB0ZW1iZXIvMDEwNDQ2Lmh0bWxdCisKK1NpZ25lZC1vZmYtYnk6IFBldGVyIEtqZWxsZXJzdGVkdCA8cGV0ZXIua2plbGxlcnN0ZWR0QGF4aXMuY29tPgorLS0tCisgc3JjL3VzZXJhZGQuYyB8IDggKysrKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IGE4YTFmNzYuLmUxZWJmNTAgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtMTk5Myw5ICsxOTkzLDExIEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgI2VuZGlmCQkJCS8qIFVTRV9QQU0gKi8KKyAjZW5kaWYJCQkJLyogQUNDVF9UT09MU19TRVRVSUQgKi8KKyAKKysjaWZkZWYgRU5BQkxFX1NVQklEUworIAkvKiBOZWVkZWQgZm9yIHVzZXJucyBjaGVjayAqLworLQl1aWRfdCB1aWRfbWluID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUlOIiwgMTAwMFVMKTsKKy0JdWlkX3QgdWlkX21heCA9ICh1aWRfdCkgZ2V0ZGVmX3Vsb25nICgiVUlEX01BWCIsIDYwMDAwVUwpOworKwl1aWRfdCB1aWRfbWluOworKwl1aWRfdCB1aWRfbWF4OworKyNlbmRpZgorIAorIAkvKgorIAkgKiBHZXQgbXkgbmFtZSBzbyB0aGF0IEkgY2FuIHVzZSBpdCB0byByZXBvcnQgZXJyb3JzLgorQEAgLTIwMjYsNiArMjAyOCw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCWlzX3NoYWRvd19ncnAgPSBzZ3JfZmlsZV9wcmVzZW50ICgpOworICNlbmRpZgorICNpZmRlZiBFTkFCTEVfU1VCSURTCisrCXVpZF9taW4gPSAodWlkX3QpIGdldGRlZl91bG9uZyAoIlVJRF9NSU4iLCAxMDAwVUwpOworKwl1aWRfbWF4ID0gKHVpZF90KSBnZXRkZWZfdWxvbmcgKCJVSURfTUFYIiwgNjAwMDBVTCk7CisgCWlzX3N1Yl91aWQgPSBzdWJfdWlkX2ZpbGVfcHJlc2VudCAoKSAmJiAhcmZsZyAmJgorIAkgICAgKCF1c2VyX2lkIHx8ICh1c2VyX2lkIDw9IHVpZF9tYXggJiYgdXNlcl9pZCA+PSB1aWRfbWluKSk7CisgCWlzX3N1Yl9naWQgPSBzdWJfZ2lkX2ZpbGVfcHJlc2VudCAoKSAmJiAhcmZsZyAmJgorLS0gCisxLjkuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzLzAwMDEtdXNlcmFkZC5jLWNyZWF0ZS1wYXJlbnQtZGlyZWN0b3JpZXMtd2hlbi1uZWNlc3NhcnkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkZGU4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvMDAwMS11c2VyYWRkLmMtY3JlYXRlLXBhcmVudC1kaXJlY3Rvcmllcy13aGVuLW5lY2Vzc2FyeS5wYXRjaApAQCAtMCwwICsxLDEwOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRSBzcGVjaWZpY10KKworU3ViamVjdDogdXNlcmFkZC5jOiBjcmVhdGUgcGFyZW50IGRpcmVjdG9yaWVzIHdoZW4gbmVjZXNzYXJ5CisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy91c2VyYWRkLmMgfCAgIDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0OSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VyYWRkLmMgYi9zcmMvdXNlcmFkZC5jCitpbmRleCA0YmQ5NjlkLi5jYjVkZDZjIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJhZGQuYworKysrIGIvc3JjL3VzZXJhZGQuYworQEAgLTE4OTMsNiArMTg5MywzNSBAQCBzdGF0aWMgdm9pZCB1c3JfdXBkYXRlICh2b2lkKQorIH0KKyAKKyAvKgorKyAqIG1rZGlyX3AgLSBjcmVhdGUgZGlyZWN0b3JpZXMsIGluY2x1ZGluZyBwYXJlbnQgZGlyZWN0b3JpZXMgd2hlbiBuZWVkZWQKKysgKgorKyAqIHNpbWlsYXIgdG8gYG1rZGlyIC1wJworKyAqLworK3ZvaWQgbWtkaXJfcChjb25zdCBjaGFyICpwYXRoKSB7CisrCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisrCWNoYXIgbmV3ZGlyW2xlbiArIDFdOworKwltb2RlX3QgbW9kZSA9IDA3NTU7CisrCWludCBpID0gMDsKKysKKysJaWYgKHBhdGhbaV0gPT0gJ1wwJykgeworKwkJcmV0dXJuOworKwl9CisrCisrCS8qIHNraXAgdGhlIGxlYWRpbmcgJy8nICovCisrCWkrKzsKKysKKysJd2hpbGUocGF0aFtpXSAhPSAnXDAnKSB7CisrCQlpZiAocGF0aFtpXSA9PSAnLycpIHsKKysJCQlzdHJuY3B5KG5ld2RpciwgcGF0aCwgaSk7CisrCQkJbmV3ZGlyW2ldID0gJ1wwJzsKKysJCQlta2RpcihuZXdkaXIsIG1vZGUpOworKwkJfQorKwkJaSsrOworKwl9CisrCW1rZGlyKHBhdGgsIG1vZGUpOworK30KKysKKysvKgorICAqIGNyZWF0ZV9ob21lIC0gY3JlYXRlIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkKKyAgKgorICAqCWNyZWF0ZV9ob21lKCkgY3JlYXRlcyB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90CitAQCAtMTkwNywzNiArMTkzNiwzMyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfaG9tZSAodm9pZCkKKyAJCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisgCQl9CisgI2VuZGlmCistCQkvKiBYWFggLSBjcmVhdGUgbWlzc2luZyBwYXJlbnQgZGlyZWN0b3JpZXMuICAtLW1hcmVrbSAqLworLQkJaWYgKG1rZGlyICh1c2VyX2hvbWUsIDApICE9IDApIHsKKy0JCQlmcHJpbnRmIChzdGRlcnIsCistCQkJICAgICAgICAgXygiJXM6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICVzXG4iKSwKKy0JCQkgICAgICAgICBQcm9nLCB1c2VyX2hvbWUpOworLSNpZmRlZiBXSVRIX0FVRElUCistCQkJYXVkaXRfbG9nZ2VyIChBVURJVF9BRERfVVNFUiwgUHJvZywKKy0JCQkgICAgICAgICAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorLQkJCSAgICAgICAgICAgICAgdXNlcl9uYW1lLCAodW5zaWduZWQgaW50KSB1c2VyX2lkLAorLQkJCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX0ZBSUxVUkUpOworLSNlbmRpZgorLQkJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKy0JCX0KKy0JCWNob3duICh1c2VyX2hvbWUsIHVzZXJfaWQsIHVzZXJfZ2lkKTsKKy0JCWNobW9kICh1c2VyX2hvbWUsCistCQkgICAgICAgMDc3NyAmIH5nZXRkZWZfbnVtICgiVU1BU0siLCBHRVRERUZfREVGQVVMVF9VTUFTSykpOworLQkJaG9tZV9hZGRlZCA9IHRydWU7CisrCQlta2Rpcl9wKHVzZXJfaG9tZSk7CisrCX0KKysJaWYgKGFjY2VzcyAodXNlcl9ob21lLCBGX09LKSAhPSAwKSB7CisgI2lmZGVmIFdJVEhfQVVESVQKKyAJCWF1ZGl0X2xvZ2dlciAoQVVESVRfQUREX1VTRVIsIFByb2csCisgCQkgICAgICAgICAgICAgICJhZGRpbmcgaG9tZSBkaXJlY3RvcnkiLAorIAkJICAgICAgICAgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCistCQkgICAgICAgICAgICAgIFNIQURPV19BVURJVF9TVUNDRVNTKTsKKysJCSAgICAgICAgICAgICAgU0hBRE9XX0FVRElUX0ZBSUxVUkUpOworICNlbmRpZgorLSNpZmRlZiBXSVRIX1NFTElOVVgKKy0JCS8qIFJlc2V0IFNFTGludXggdG8gY3JlYXRlIGZpbGVzIHdpdGggZGVmYXVsdCBjb250ZXh0cyAqLworLQkJaWYgKHJlc2V0X3NlbGludXhfZmlsZV9jb250ZXh0ICgpICE9IDApIHsKKy0JCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CistCQl9CisrCQlmYWlsX2V4aXQgKEVfSE9NRURJUik7CisrCX0KKysJY2hvd24gKHVzZXJfaG9tZSwgdXNlcl9pZCwgdXNlcl9naWQpOworKwljaG1vZCAodXNlcl9ob21lLAorKwkgICAgICAgMDc3NyAmIH5nZXRkZWZfbnVtICgiVU1BU0siLCBHRVRERUZfREVGQVVMVF9VTUFTSykpOworKwlob21lX2FkZGVkID0gdHJ1ZTsKKysjaWZkZWYgV0lUSF9BVURJVAorKwlhdWRpdF9sb2dnZXIgKEFVRElUX0FERF9VU0VSLCBQcm9nLAorKwkJICAgICAgImFkZGluZyBob21lIGRpcmVjdG9yeSIsCisrCQkgICAgICB1c2VyX25hbWUsICh1bnNpZ25lZCBpbnQpIHVzZXJfaWQsCisrCQkgICAgICBTSEFET1dfQVVESVRfU1VDQ0VTUyk7CisgI2VuZGlmCisrI2lmZGVmIFdJVEhfU0VMSU5VWAorKwkvKiBSZXNldCBTRUxpbnV4IHRvIGNyZWF0ZSBmaWxlcyB3aXRoIGRlZmF1bHQgY29udGV4dHMgKi8KKysJaWYgKHJlc2V0X3NlbGludXhfZmlsZV9jb250ZXh0ICgpICE9IDApIHsKKysJCWZhaWxfZXhpdCAoRV9IT01FRElSKTsKKyAJfQorKyNlbmRpZgorIH0KKyAKKyAvKgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvYWxsb3ctZm9yLXNldHRpbmctcGFzc3dvcmQtaW4tY2xlYXItdGV4dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRhMjVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9hbGxvdy1mb3Itc2V0dGluZy1wYXNzd29yZC1pbi1jbGVhci10ZXh0LnBhdGNoCkBAIC0wLDAgKzEsMjAxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitBbGxvdyBmb3Igc2V0dGluZyBwYXNzd29yZCBpbiBjbGVhciB0ZXh0LgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAgICA4ICsrKystLS0tCisgc3JjL2dyb3VwYWRkLmMgIHwgICAgOCArKysrKysrLQorIHNyYy9ncm91cG1vZC5jICB8ICAgIDggKysrKysrKy0KKyBzcmMvdXNlcmFkZC5jICAgfCAgICA5ICsrKysrKystLQorIHNyYy91c2VybW9kLmMgICB8ICAgIDggKysrKysrKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9zcmMvTWFrZWZpbGUuYW0KK2luZGV4IDI1ZTI4OGQuLjg1NmIwODcgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9NYWtlZmlsZS5hbQorQEAgLTg4LDEwICs4OCwxMCBAQCBjaGdwYXNzd2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgY2hzaF9MREFERCAgICAgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUX05PUEFNKSAkKExJQlNLRVkpICQoTElCTUQpCisgY2hwYXNzd2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTSkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdwYXNzd2RfTERBREQgID0gJChMREFERCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorLWdyb3VwYWRkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorK2dyb3VwYWRkX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQkNSWVBUKQorIGdyb3VwZGVsX0xEQUREID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKQorIGdyb3VwbWVtc19MREFERCA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQlNFTElOVVgpCistZ3JvdXBtb2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpCisrZ3JvdXBtb2RfTERBREQgPSAkKExEQUREKSAkKExJQlBBTV9TVUlEKSAkKExJQkFVRElUKSAkKExJQlNFTElOVVgpICQoTElCQ1JZUFQpCisgZ3JwY2tfTERBREQgICAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgZ3JwY29udl9MREFERCAgPSAkKExEQUREKSAkKExJQlNFTElOVVgpCisgZ3JwdW5jb252X0xEQUREID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorQEAgLTExMSw5ICsxMTEsOSBAQCBzdV9TT1VSQ0VTICAgICA9IFwKKyAJc3VhdXRoLmMKKyBzdV9MREFERCAgICAgICA9ICQoTERBREQpICQoTElCUEFNKSAkKExJQkNSWVBUX05PUEFNKSAkKExJQlNLRVkpICQoTElCTUQpCisgc3Vsb2dpbl9MREFERCAgPSAkKExEQUREKSAkKExJQkNSWVBUKQorLXVzZXJhZGRfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKQorK3VzZXJhZGRfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKSAkKExJQkNSWVBUKQorIHVzZXJkZWxfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKQorLXVzZXJtb2RfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKQorK3VzZXJtb2RfTERBREQgID0gJChMREFERCkgJChMSUJQQU1fU1VJRCkgJChMSUJBVURJVCkgJChMSUJTRUxJTlVYKSAkKExJQlNFTUFOQUdFKSAkKExJQkFDTCkgJChMSUJBVFRSKSAkKExJQkNSWVBUKQorIHZpcHdfTERBREQgICAgID0gJChMREFERCkgJChMSUJTRUxJTlVYKQorIAorIGluc3RhbGwtYW06IGFsbC1hbQorZGlmZiAtLWdpdCBhL3NyYy9ncm91cGFkZC5jIGIvc3JjL2dyb3VwYWRkLmMKK2luZGV4IGY3MTZmNTcuLjRlMjhjMjYgMTAwNjQ0CistLS0gYS9zcmMvZ3JvdXBhZGQuYworKysrIGIvc3JjL2dyb3VwYWRkLmMKK0BAIC0xMjQsNiArMTI0LDcgQEAgc3RhdGljIC8qQG5vcmV0dXJuQCovdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1vLCAtLW5vbi11bmlxdWUgICAgICAgICAgICAgIGFsbG93IHRvIGNyZWF0ZSBncm91cHMgd2l0aCBkdXBsaWNhdGVcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub24tdW5pcXVlKSBHSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICB1c2UgdGhpcyBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgZ3JvdXBcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCB1c2UgdGhpcyBjbGVhciBwYXNzd29yZCBmb3IgdGhlIG5ldyBncm91cFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1yLCAtLXN5c3RlbSAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKCJcbiIsIHVzYWdlb3V0KTsKK0BAIC0zODcsMTIgKzM4OCwxMyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl7ImtleSIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0snfSwKKyAJCXsibm9uLXVuaXF1ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJeyJwYXNzd29yZCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQl7InN5c3RlbSIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ3InfSwKKyAJCXsicm9vdCIsICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LAorIAkJe05VTEwsIDAsIE5VTEwsICdcMCd9CisgCX07CisgCistCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LCAiZmc6aEs6b3A6clI6IiwKKysJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJmZzpoSzpvcDpQOnJSOiIsCisgCQkgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2YnOgorQEAgLTQ0NCw2ICs0NDYsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCXBmbGcgPSB0cnVlOworIAkJCWdyb3VwX3Bhc3N3ZCA9IG9wdGFyZzsKKyAJCQlicmVhazsKKysJCWNhc2UgJ1AnOgorKwkJCXBmbGcgPSB0cnVlOworKwkJCWdyb3VwX3Bhc3N3ZCA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJYnJlYWs7CisgCQljYXNlICdyJzoKKyAJCQlyZmxnID0gdHJ1ZTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvZ3JvdXBtb2QuYyBiL3NyYy9ncm91cG1vZC5jCitpbmRleCBkOWQzODA3Li42OGY0OWQxIDEwMDY0NAorLS0tIGEvc3JjL2dyb3VwbW9kLmMKKysrKyBiL3NyYy9ncm91cG1vZC5jCitAQCAtMTI3LDYgKzEyNyw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gdXNlIGEgZHVwbGljYXRlIChub24tdW5pcXVlKSBHSURcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcCwgLS1wYXNzd29yZCBQQVNTV09SRCAgICAgICBjaGFuZ2UgdGhlIHBhc3N3b3JkIHRvIHRoaXMgKGVuY3J5cHRlZClcbiIKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NXT1JEXG4iKSwgdXNhZ2VvdXQpOworKwkodm9pZCkgZnB1dHMgKF8oIiAgLVAsIC0tY2xlYXItcGFzc3dvcmQgUEFTU1dPUkQgY2hhbmdlIHRoZSBwYXNzd29yZCB0byB0aGlzIGNsZWFyIFBBU1NXT1JEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKCJcbiIsIHVzYWdlb3V0KTsKKyAJZXhpdCAoc3RhdHVzKTsKK0BAIC0zNzUsMTAgKzM3NiwxMSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl7Im5ldy1uYW1lIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ24nfSwKKyAJCXsibm9uLXVuaXF1ZSIsIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJeyJwYXNzd29yZCIsICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQl7InJvb3QiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCXtOVUxMLCAwLCBOVUxMLCAnXDAnfQorIAl9OworLQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImc6aG46b3A6UjoiLAorKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgImc6aG46b3A6UDpSOiIsCisgCQkgICAgICAgICAgICAgICAgIGxvbmdfb3B0aW9ucywgTlVMTCkpICE9IC0xKSB7CisgCQlzd2l0Y2ggKGMpIHsKKyAJCWNhc2UgJ2cnOgorQEAgLTQwNSw2ICs0MDcsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJCWdyb3VwX3Bhc3N3ZCA9IG9wdGFyZzsKKyAJCQlwZmxnID0gdHJ1ZTsKKyAJCQlicmVhazsKKysJCWNhc2UgJ1AnOgorKwkJCWdyb3VwX3Bhc3N3ZCA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJcGZsZyA9IHRydWU7CisrCQkJYnJlYWs7CisgCQljYXNlICdSJzogLyogbm8tb3AsIGhhbmRsZWQgaW4gcHJvY2Vzc19yb290X2ZsYWcgKCkgKi8KKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CitkaWZmIC0tZ2l0IGEvc3JjL3VzZXJhZGQuYyBiL3NyYy91c2VyYWRkLmMKK2luZGV4IGIzYmQ0NTEuLjQ0MTZmOTAgMTAwNjQ0CistLS0gYS9zcmMvdXNlcmFkZC5jCisrKysgYi9zcmMvdXNlcmFkZC5jCitAQCAtNzczLDYgKzc3Myw3IEBAIHN0YXRpYyB2b2lkIHVzYWdlIChpbnQgc3RhdHVzKQorIAkodm9pZCkgZnB1dHMgKF8oIiAgLW8sIC0tbm9uLXVuaXF1ZSAgICAgICAgICAgICAgYWxsb3cgdG8gY3JlYXRlIHVzZXJzIHdpdGggZHVwbGljYXRlXG4iCisgCSAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uLXVuaXF1ZSkgVUlEXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXAsIC0tcGFzc3dvcmQgUEFTU1dPUkQgICAgICAgZW5jcnlwdGVkIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKysJKHZvaWQpIGZwdXRzIChfKCIgIC1QLCAtLWNsZWFyLXBhc3N3b3JkIFBBU1NXT1JEIGNsZWFyIHBhc3N3b3JkIG9mIHRoZSBuZXcgYWNjb3VudFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1yLCAtLXN5c3RlbSAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHN5c3RlbSBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLVIsIC0tcm9vdCBDSFJPT1RfRElSICAgICAgICAgZGlyZWN0b3J5IHRvIGNocm9vdCBpbnRvXG4iKSwgdXNhZ2VvdXQpOworIAkodm9pZCkgZnB1dHMgKF8oIiAgLXMsIC0tc2hlbGwgU0hFTEwgICAgICAgICAgICAgbG9naW4gc2hlbGwgb2YgdGhlIG5ldyBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworQEAgLTEwNDcsNiArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7Im5vLXVzZXItZ3JvdXAiLCAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsICdOJ30sCisgCQkJeyJub24tdW5pcXVlIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJCXsicGFzc3dvcmQiLCAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3AnfSwKKysJCQl7ImNsZWFyLXBhc3N3b3JkIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sCisgCQkJeyJzeXN0ZW0iLCAgICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAncid9LAorIAkJCXsicm9vdCIsICAgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1InfSwKKyAJCQl7InNoZWxsIiwgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdzJ30sCitAQCAtMTA1OSw5ICsxMDYxLDkgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJfTsKKyAJCXdoaWxlICgoYyA9IGdldG9wdF9sb25nIChhcmdjLCBhcmd2LAorICNpZmRlZiBXSVRIX1NFTElOVVgKKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYjpjOmQ6RGU6ZjpnOkc6aGs6SzpsbU1Ob3A6clI6czp1OlVaOiIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOlA6clI6czp1OlVaOiIsCisgI2Vsc2UJCQkJLyogIVdJVEhfU0VMSU5VWCAqLworLQkJICAgICAgICAgICAgICAgICAgICAgICAgICJiOmM6ZDpEZTpmOmc6RzpoazpLOmxtTU5vcDpyUjpzOnU6VSIsCisrCQkgICAgICAgICAgICAgICAgICAgICAgICAgImI6YzpkOkRlOmY6ZzpHOmhrOks6bG1NTm9wOlA6clI6czp1OlUiLAorICNlbmRpZgkJCQkvKiAhV0lUSF9TRUxJTlVYICovCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19vcHRpb25zLCBOVUxMKSkgIT0gLTEpIHsKKyAJCQlzd2l0Y2ggKGMpIHsKK0BAIC0xMjI3LDYgKzEyMjksOSBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJCX0KKyAJCQkJdXNlcl9wYXNzID0gb3B0YXJnOworIAkJCQlicmVhazsKKysJCQljYXNlICdQJzogLyogc2V0IGNsZWFyIHRleHQgcGFzc3dvcmQgKi8KKysJCQkJdXNlcl9wYXNzID0gcHdfZW5jcnlwdCAob3B0YXJnLCBjcnlwdF9tYWtlX3NhbHQgKE5VTEwsIE5VTEwpKTsKKysJCQkJYnJlYWs7CisgCQkJY2FzZSAncic6CisgCQkJCXJmbGcgPSB0cnVlOworIAkJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvdXNlcm1vZC5jIGIvc3JjL3VzZXJtb2QuYworaW5kZXggZTdkNDM1MS4uYjc5ZjdhMyAxMDA2NDQKKy0tLSBhL3NyYy91c2VybW9kLmMKKysrKyBiL3NyYy91c2VybW9kLmMKK0BAIC00MTksNiArNDE5LDcgQEAgc3RhdGljIC8qQG5vcmV0dXJuQCovdm9pZCB1c2FnZSAoaW50IHN0YXR1cykKKyAJICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBsb2NhdGlvbiAodXNlIG9ubHkgd2l0aCAtZClcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtbywgLS1ub24tdW5pcXVlICAgICAgICAgICAgICBhbGxvdyB1c2luZyBkdXBsaWNhdGUgKG5vbi11bmlxdWUpIFVJRFxuIiksIHVzYWdlb3V0KTsKKyAJKHZvaWQpIGZwdXRzIChfKCIgIC1wLCAtLXBhc3N3b3JkIFBBU1NXT1JEICAgICAgIHVzZSBlbmNyeXB0ZWQgcGFzc3dvcmQgZm9yIHRoZSBuZXcgcGFzc3dvcmRcbiIpLCB1c2FnZW91dCk7CisrCSh2b2lkKSBmcHV0cyAoXygiICAtUCwgLS1jbGVhci1wYXNzd29yZCBQQVNTV09SRCB1c2UgY2xlYXIgcGFzc3dvcmQgZm9yIHRoZSBuZXcgcGFzc3dvcmRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtUiwgLS1yb290IENIUk9PVF9ESVIgICAgICAgICBkaXJlY3RvcnkgdG8gY2hyb290IGludG9cbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtcywgLS1zaGVsbCBTSEVMTCAgICAgICAgICAgICBuZXcgbG9naW4gc2hlbGwgZm9yIHRoZSB1c2VyIGFjY291bnRcbiIpLCB1c2FnZW91dCk7CisgCSh2b2lkKSBmcHV0cyAoXygiICAtdSwgLS11aWQgVUlEICAgICAgICAgICAgICAgICBuZXcgVUlEIGZvciB0aGUgdXNlciBhY2NvdW50XG4iKSwgdXNhZ2VvdXQpOworQEAgLTk5Niw2ICs5OTcsNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2ZsYWdzIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQkJeyJtb3ZlLWhvbWUiLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgJ20nfSwKKyAJCQl7Im5vbi11bmlxdWUiLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCAnbyd9LAorIAkJCXsicGFzc3dvcmQiLCAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sCisrCQkJeyJjbGVhci1wYXNzd29yZCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUCd9LAorIAkJCXsicm9vdCIsICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sCisgCQkJeyJzaGVsbCIsICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ3MnfSwKKyAJCQl7InVpZCIsICAgICAgICAgIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAndSd9LAorQEAgLTEwMTIsNyArMTAxNCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQl7TlVMTCwgMCwgTlVMTCwgJ1wwJ30KKyAJCX07CisgCQl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwKKy0JCSAgICAgICAgICAgICAgICAgICAgICAgICAiYWM6ZDplOmY6ZzpHOmhsOkxtb3A6UjpzOnU6VSIKKysJCSAgICAgICAgICAgICAgICAgICAgICAgICAiYWM6ZDplOmY6ZzpHOmhsOkxtb3A6UDpSOnM6dTpVIgorICNpZmRlZiBFTkFCTEVfU1VCSURTCisgCQkgICAgICAgICAgICAgICAgICAgICAgICAgInY6dzpWOlc6IgorICNlbmRpZgkJCQkvKiBFTkFCTEVfU1VCSURTICovCitAQCAtMTExMiw2ICsxMTE0LDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQkJdXNlcl9wYXNzID0gb3B0YXJnOworIAkJCQlwZmxnID0gdHJ1ZTsKKyAJCQkJYnJlYWs7CisrCQkJY2FzZSAnUCc6CisrCQkJCXVzZXJfcGFzcyA9IHB3X2VuY3J5cHQgKG9wdGFyZywgY3J5cHRfbWFrZV9zYWx0IChOVUxMLCBOVUxMKSk7CisrCQkJCXBmbGcgPSB0cnVlOworKwkJCQlicmVhazsKKyAJCQljYXNlICdSJzogLyogbm8tb3AsIGhhbmRsZWQgaW4gcHJvY2Vzc19yb290X2ZsYWcgKCkgKi8KKyAJCQkJYnJlYWs7CisgCQkJY2FzZSAncyc6CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NoZWNrX3NpemVfb2ZfdWlkX3RfYW5kX2dpZF90X3VzaW5nX0FDX0NIRUNLX1NJWkVPRi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODU1OTBjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAyY2I1NDE1OGI4MGNkYmQ5N2NhM2IzNmRmODNmOTI1NWU5MjNhZTNmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFtZXMgTGUgQ3Vpcm90IDxjaGV3aUBhdXJhLW9ubGluZS5jby51az4KK0RhdGU6IFNhdCwgMjMgQXVnIDIwMTQgMDk6NDY6MzkgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgc2l6ZSBvZiB1aWRfdCBhbmQgZ2lkX3QgdXNpbmcgQUNfQ0hFQ0tfU0laRU9GCisKK1RoaXMgYnVpbHQtaW4gY2hlY2sgaXMgc2ltcGxlciB0aGFuIHRoZSBwcmV2aW91cyBtZXRob2QgYW5kLCBtb3N0CitpbXBvcnRhbnRseSwgd29ya3Mgd2hlbiBjcm9zcy1jb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogQWNjZXB0ZWQKK1todHRwczovL2dpdGh1Yi5jb20vc2hhZG93LW1haW50L3NoYWRvdy9jb21taXQvMmNiNTQxNThiODBjZGJkOTdjYTNiMzZkZjgzZjkyNTVlOTIzYWUzZl0KKworU2lnbmVkLW9mZi1ieTogU2VyZ2UgSGFsbHluIDxzZXJnZS5oYWxseW5AdWJ1bnR1LmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5pbiB8IDE0ICsrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KK2luZGV4IDFhM2Y4NDEuLjRhNGQ2ZDAgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuaW4KKysrKyBiL2NvbmZpZ3VyZS5pbgorQEAgLTMzNSwxNiArMzM1LDEwIEBAIGlmIHRlc3QgIiRlbmFibGVfc3ViaWRzIiAhPSAibm8iOyB0aGVuCisgCWRubAorIAlkbmwgRklYTUU6IGNoZWNrIGlmIDMyIGJpdCBVSURzL0dJRHMgYXJlIHN1cHBvcnRlZCBieSBsaWJjCisgCWRubAorLQlBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLWludCBtYWluKHZvaWQpIHsKKy0JdWlkX3QgdTsKKy0JZ2lkX3QgZzsKKy0JcmV0dXJuIChzaXplb2YgdSA8IDQpIHx8IChzaXplb2YgZyA8IDQpOworLX0KKy0JXSldLCBbaWQzMmJpdD0ieWVzIl0sIFtpZDMyYml0PSJubyJdKQorLQorLQlpZiB0ZXN0ICJ4JGlkMzJiaXQiID0gInh5ZXMiOyB0aGVuCisrCUFDX0NIRUNLX1NJWkVPRihbdWlkX3RdLCwgWyNpbmNsdWRlICJzeXMvdHlwZXMuaCJdKQorKwlBQ19DSEVDS19TSVpFT0YoW2dpZF90XSwsIFsjaW5jbHVkZSAic3lzL3R5cGVzLmgiXSkKKysKKysJaWYgdGVzdCAiJGFjX2N2X3NpemVvZl91aWRfdCIgLWdlIDQgJiYgdGVzdCAiJGFjX2N2X3NpemVvZl9naWRfdCIgLWdlIDQ7IHRoZW4KKyAJCUFDX0RFRklORShFTkFCTEVfU1VCSURTLCAxLCBbRGVmaW5lIHRvIHN1cHBvcnQgdGhlIHN1Ym9yZGluYXRlIElEcy5dKQorIAkJZW5hYmxlX3N1Ymlkcz0ieWVzIgorIAllbHNlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2NvbW1vbmlvLmMtZml4LXVuZXhwZWN0ZWQtb3Blbi1mYWlsdXJlLWluLWNocm9vdC1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhM2QxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitjb21tb25pby5jOiBmaXggdW5leHBlY3RlZCBvcGVuIGZhaWx1cmUgaW4gY2hyb290IGVudmlyb25tZW50CisKK1doZW4gdXNpbmcgY29tbWFuZHMgd2l0aCAnLVIgPG5ld3Jvb3Q+JyBvcHRpb24gaW4gb3VyIHBzZXVkbyBlbnZpcm9ubWVudCwKK3dlIHdvdWxkIHVzdWFsbHkgZ2V0IHRoZSAnUGVtaXNzaW9uIERlbmllZCcgZXJyb3IuIFRoaXMgcGF0Y2ggc2VydmVzIGFzCithIHdvcmthcm91bmQgdG8gdGhpcyBwcm9ibGVtLgorCitOb3RlIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5nZSB0aGUgbG9naWMgaW4gdGhlIGNvZGUsIGl0IGp1c3QgZXhwYW5kcwordGhlIGNvZGVzLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBsaWIvY29tbW9uaW8uYyB8ICAgMTYgKysrKysrKysrKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliL2NvbW1vbmlvLmMgYi9saWIvY29tbW9uaW8uYworaW5kZXggY2M1MzZiZi4uNTFjYWZkOSAxMDA2NDQKKy0tLSBhL2xpYi9jb21tb25pby5jCisrKysgYi9saWIvY29tbW9uaW8uYworQEAgLTYxMywxMCArNjEzLDE4IEBAIGludCBjb21tb25pb19vcGVuIChzdHJ1Y3QgY29tbW9uaW9fZGIgKmRiLCBpbnQgbW9kZSkKKyAJZGItPmN1cnNvciA9IE5VTEw7CisgCWRiLT5jaGFuZ2VkID0gZmFsc2U7CisgCistCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorLQkgICAgICAgICAgICAgKGRiLT5yZWFkb25seSA/IE9fUkRPTkxZIDogT19SRFdSKQorLQkgICAgICAgICAgIHwgT19OT0NUVFkgfCBPX05PTkJMT0NLIHwgT19OT0ZPTExPVyk7CistCXNhdmVkX2Vycm5vID0gZXJybm87CisrCWlmIChkYi0+cmVhZG9ubHkpIHsKKysJCWZkID0gb3BlbiAoZGItPmZpbGVuYW1lLAorKwkJCSAgICh0cnVlID8gT19SRE9OTFkgOiBPX1JEV1IpCisrCQkJICAgfCBPX05PQ1RUWSB8IE9fTk9OQkxPQ0sgfCBPX05PRk9MTE9XKTsKKysJCXNhdmVkX2Vycm5vID0gZXJybm87CisrCX0gZWxzZSB7CisrCQlmZCA9IG9wZW4gKGRiLT5maWxlbmFtZSwKKysJCQkgICAoZmFsc2UgPyBPX1JET05MWSA6IE9fUkRXUikKKysJCQkgICB8IE9fTk9DVFRZIHwgT19OT05CTE9DSyB8IE9fTk9GT0xMT1cpOworKwkJc2F2ZWRfZXJybm8gPSBlcnJubzsKKysJfQorKworIAlkYi0+ZnAgPSBOVUxMOworIAlpZiAoZmQgPj0gMCkgeworICNpZmRlZiBXSVRIX1RDQgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvZGlzYWJsZS1zeXNsb2cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2Rpc2FibGUtc3lzbG9nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NDNmZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2Rpc2FibGUtc3lzbG9nLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Rpc2FibGUgdXNlIG9mIHN5c2xvZyB0byBwcmV2ZW50IHN5c3Jvb3QgdXNlciBhbmQgZ3JvdXAgYWRkaXRpb25zIGZyb20KK3dyaXRpbmcgZW50cmllcyB0byB0aGUgaG9zdCdzIHN5c2xvZy4gVGhpcyBwYXRjaCBzaG91bGQgb25seSBiZSB1c2VkCit3aXRoIHRoZSBzaGFkb3ctbmF0aXZlIHJlY2lwZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitkaWZmIC11ck4gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL2dyb3VwYWRkLmMgc2hhZG93LTQuMS40LjMvc3JjL2dyb3VwYWRkLmMKKy0tLSBzaGFkb3ctNC4xLjQuMy5vcmlnLy9zcmMvZ3JvdXBhZGQuYwkyMDExLTAyLTEzIDA5OjU4OjE2LjAwMDAwMDAwMCAtMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL3NyYy9ncm91cGFkZC5jCTIwMTItMDQtMDUgMTA6MDU6NTkuNDQwMDAxNzU4IC0wNzAwCitAQCAtMzQsNiArMzQsOSBAQAorIAorICNpZGVudCAiJElkOiBncm91cGFkZC5jIDMwMTUgMjAwOS0wNi0wNSAyMjoxNjo1NlogbmVrcmFsLWd1ZXN0ICQiCisgCisrLyogRGlzYWJsZSB1c2Ugb2Ygc3lzbG9nIHNpbmNlIHdlJ3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kIGFnYWluc3QgYSBzeXNyb290ICovCisrI3VuZGVmIFVTRV9TWVNMT0cKKysKKyAjaW5jbHVkZSA8Y3R5cGUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8Z2V0b3B0Lmg+CitkaWZmIC11ck4gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL3VzZXJhZGQuYyBzaGFkb3ctNC4xLjQuMy9zcmMvdXNlcmFkZC5jCistLS0gc2hhZG93LTQuMS40LjMub3JpZy8vc3JjL3VzZXJhZGQuYwkyMDExLTAyLTEzIDA5OjU4OjE2LjAwMDAwMDAwMCAtMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL3NyYy91c2VyYWRkLmMJMjAxMi0wNC0wNSAxMDowNjoyNS4wNzYwMDEzMTUgLTA3MDAKK0BAIC0zNCw2ICszNCw5IEBACisgCisgI2lkZW50ICIkSWQ6IHVzZXJhZGQuYyAzMDE1IDIwMDktMDYtMDUgMjI6MTY6NTZaIG5la3JhbC1ndWVzdCAkIgorIAorKy8qIERpc2FibGUgdXNlIG9mIHN5c2xvZyBzaW5jZSB3ZSdyZSBydW5uaW5nIHRoaXMgY29tbWFuZCBhZ2FpbnN0IGEgc3lzcm9vdCAqLworKyN1bmRlZiBVU0VfU1lTTE9HCisrCisgI2luY2x1ZGUgPGFzc2VydC5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxlcnJuby5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNiOTFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9maXgtaW5zdGFsbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1N1YmplY3Q6IGZpeCBpbnN0YWxsYXRpb24gZmFpbHVyZSB3aXRoIHN1YmlkcyBkaXNhYmxlZAorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvTWFrZWZpbGUuYW0gfCAgICA1ICsrKystCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlLmFtIGIvc3JjL01ha2VmaWxlLmFtCitpbmRleCAyNWUyODhkLi4wNzZmOGVmIDEwMDY0NAorLS0tIGEvc3JjL01ha2VmaWxlLmFtCisrKysgYi9zcmMvTWFrZWZpbGUuYW0KK0BAIC01Miw3ICs1MiwxMCBAQCB1c2Jpbl9QUk9HUkFNUyA9IFwKKyBub2luc3RfUFJPR1JBTVMgPSBpZCBzdWxvZ2luCisgCisgc3VpZGJpbnMgICAgICAgPSBzdQorLXN1aWR1YmlucyAgICAgID0gY2hhZ2UgY2hmbiBjaHNoIGV4cGlyeSBncGFzc3dkIG5ld2dycCBwYXNzd2QgbmV3dWlkbWFwIG5ld2dpZG1hcAorK3N1aWR1YmlucyAgICAgID0gY2hhZ2UgY2hmbiBjaHNoIGV4cGlyeSBncGFzc3dkIG5ld2dycCBwYXNzd2QKKytpZiBFTkFCTEVfU1VCSURTCisrc3VpZHViaW5zICs9IG5ld2dpZG1hcCBuZXd1aWRtYXAKKytlbmRpZgorIGlmIEFDQ1RfVE9PTFNfU0VUVUlECisgCXN1aWR1YmlucyArPSBjaGFnZSBjaGdwYXNzd2QgY2hwYXNzd2QgZ3JvdXBhZGQgZ3JvdXBkZWwgZ3JvdXBtb2QgbmV3dXNlcnMgdXNlcmFkZCB1c2VyZGVsIHVzZXJtb2QKKyBlbmRpZgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTY4ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290CkBAIC0wLDAgKzEsMzg2IEBACisjCisjIC9ldGMvbG9naW4uZGVmcyAtIENvbmZpZ3VyYXRpb24gY29udHJvbCBkZWZpbml0aW9ucyBmb3IgdGhlIHNoYWRvdyBwYWNrYWdlLgorIworIwkkSWQ6IGxvZ2luLmRlZnMgMzAzOCAyMDA5LTA3LTIzIDIwOjQxOjM1WiBuZWtyYWwtZ3Vlc3QgJAorIworCisjCisjIERlbGF5IGluIHNlY29uZHMgYmVmb3JlIGJlaW5nIGFsbG93ZWQgYW5vdGhlciBhdHRlbXB0IGFmdGVyIGEgbG9naW4gZmFpbHVyZQorIyBOb3RlOiBXaGVuIFBBTSBpcyB1c2VkLCBzb21lIG1vZHVsZXMgbWF5IGVuZm9yZSBhIG1pbmltYWwgZGVsYXkgKGUuZy4KKyMgICAgICAgcGFtX3VuaXggZW5mb3JjZXMgYSAycyBkZWxheSkKKyMKK0ZBSUxfREVMQVkJCTMKKworIworIyBFbmFibGUgbG9nZ2luZyBhbmQgZGlzcGxheSBvZiAvdmFyL2xvZy9mYWlsbG9nIGxvZ2luIGZhaWx1cmUgaW5mby4KKyMKKyNGQUlMTE9HX0VOQUIJCXllcworCisjCisjIEVuYWJsZSBkaXNwbGF5IG9mIHVua25vd24gdXNlcm5hbWVzIHdoZW4gbG9naW4gZmFpbHVyZXMgYXJlIHJlY29yZGVkLgorIworTE9HX1VOS0ZBSUxfRU5BQglubworCisjCisjIEVuYWJsZSBsb2dnaW5nIG9mIHN1Y2Nlc3NmdWwgbG9naW5zCisjCitMT0dfT0tfTE9HSU5TCQlubworCisjCisjIEVuYWJsZSBsb2dnaW5nIGFuZCBkaXNwbGF5IG9mIC92YXIvbG9nL2xhc3Rsb2cgbG9naW4gdGltZSBpbmZvLgorIworI0xBU1RMT0dfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlIGNoZWNraW5nIGFuZCBkaXNwbGF5IG9mIG1haWxib3ggc3RhdHVzIHVwb24gbG9naW4uCisjCisjIERpc2FibGUgaWYgdGhlIHNoZWxsIHN0YXJ0dXAgZmlsZXMgYWxyZWFkeSBjaGVjayBmb3IgbWFpbAorIyAoIm1haWx4IC1lIiBvciBlcXVpdmFsZW50KS4KKyMKKyMjTUFJTF9DSEVDS19FTkFCCQl5ZXMKKworIworIyBFbmFibGUgYWRkaXRpb25hbCBjaGVja3MgdXBvbiBwYXNzd29yZCBjaGFuZ2VzLgorIworI09CU0NVUkVfQ0hFQ0tTX0VOQUIJeWVzCisKKyMKKyMgRW5hYmxlIGNoZWNraW5nIG9mIHRpbWUgcmVzdHJpY3Rpb25zIHNwZWNpZmllZCBpbiAvZXRjL3BvcnR0aW1lLgorIworI1BPUlRUSU1FX0NIRUNLU19FTkFCCXllcworCisjCisjIEVuYWJsZSBzZXR0aW5nIG9mIHVsaW1pdCwgdW1hc2ssIGFuZCBuaWNlbmVzcyBmcm9tIHBhc3N3ZCBnZWNvcyBmaWVsZC4KKyMKKyNRVU9UQVNfRU5BQgkJeWVzCisKKyMKKyMgRW5hYmxlICJzeXNsb2ciIGxvZ2dpbmcgb2Ygc3UgYWN0aXZpdHkgLSBpbiBhZGRpdGlvbiB0byBzdWxvZyBmaWxlIGxvZ2dpbmcuCisjIFNZU0xPR19TR19FTkFCIGRvZXMgdGhlIHNhbWUgZm9yIG5ld2dycCBhbmQgc2cuCisjCitTWVNMT0dfU1VfRU5BQgkJeWVzCitTWVNMT0dfU0dfRU5BQgkJeWVzCisKKyMKKyMgSWYgZGVmaW5lZCwgZWl0aGVyIGZ1bGwgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgZGV2aWNlIG5hbWVzIG9yCisjIGEgIjoiIGRlbGltaXRlZCBsaXN0IG9mIGRldmljZSBuYW1lcy4gIFJvb3QgbG9naW5zIHdpbGwgYmUgYWxsb3dlZCBvbmx5CisjIHVwb24gdGhlc2UgZGV2aWNlcy4KKyMKK0NPTlNPTEUJCS9ldGMvc2VjdXJldHR5CisjQ09OU09MRQljb25zb2xlOnR0eTAxOnR0eTAyOnR0eTAzOnR0eTA0CisKKyMKKyMgSWYgZGVmaW5lZCwgYWxsIHN1IGFjdGl2aXR5IGlzIGxvZ2dlZCB0byB0aGlzIGZpbGUuCisjCisjU1VMT0dfRklMRQkvdmFyL2xvZy9zdWxvZworCisjCisjIElmIGRlZmluZWQsICI6IiBkZWxpbWl0ZWQgbGlzdCBvZiAibWVzc2FnZSBvZiB0aGUgZGF5IiBmaWxlcyB0bworIyBiZSBkaXNwbGF5ZWQgdXBvbiBsb2dpbi4KKyMKKyNNT1REX0ZJTEUJL2V0Yy9tb3RkCisjTU9URF9GSUxFCS9ldGMvbW90ZDovdXNyL2xpYi9uZXdzL25ld3MtbW90ZAorCisjCisjIElmIGRlZmluZWQsIHRoaXMgZmlsZSB3aWxsIGJlIG91dHB1dCBiZWZvcmUgZWFjaCBsb2dpbiBwcm9tcHQuCisjCisjSVNTVUVfRklMRQkvZXRjL2lzc3VlCisKKyMKKyMgSWYgZGVmaW5lZCwgZmlsZSB3aGljaCBtYXBzIHR0eSBsaW5lIHRvIFRFUk0gZW52aXJvbm1lbnQgcGFyYW1ldGVyLgorIyBFYWNoIGxpbmUgb2YgdGhlIGZpbGUgaXMgaW4gYSBmb3JtYXQgc29tZXRoaW5nIGxpa2UgInZ0MTAwICB0dHkwMSIuCisjCisjVFRZVFlQRV9GSUxFCS9ldGMvdHR5dHlwZQorCisjCisjIElmIGRlZmluZWQsIGxvZ2luIGZhaWx1cmVzIHdpbGwgYmUgbG9nZ2VkIGhlcmUgaW4gYSB1dG1wIGZvcm1hdC4KKyMgbGFzdCwgd2hlbiBpbnZva2VkIGFzIGxhc3RiLCB3aWxsIHJlYWQgL3Zhci9sb2cvYnRtcCwgc28uLi4KKyMKKyNGVE1QX0ZJTEUJL3Zhci9sb2cvYnRtcAorCisjCisjIElmIGRlZmluZWQsIG5hbWUgb2YgZmlsZSB3aG9zZSBwcmVzZW5jZSB3aGljaCB3aWxsIGluaGliaXQgbm9uLXJvb3QKKyMgbG9naW5zLiAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBzaG91bGQgYmUgYSBtZXNzYWdlIGluZGljYXRpbmcKKyMgd2h5IGxvZ2lucyBhcmUgaW5oaWJpdGVkLgorIworI05PTE9HSU5TX0ZJTEUJL2V0Yy9ub2xvZ2luCisKKyMKKyMgSWYgZGVmaW5lZCwgdGhlIGNvbW1hbmQgbmFtZSB0byBkaXNwbGF5IHdoZW4gcnVubmluZyAic3UgLSIuICBGb3IKKyMgZXhhbXBsZSwgaWYgdGhpcyBpcyBkZWZpbmVkIGFzICJzdSIgdGhlbiBhICJwcyIgd2lsbCBkaXNwbGF5IHRoZQorIyBjb21tYW5kIGlzICItc3UiLiAgSWYgbm90IGRlZmluZWQsIHRoZW4gInBzIiB3b3VsZCBkaXNwbGF5IHRoZQorIyBuYW1lIG9mIHRoZSBzaGVsbCBhY3R1YWxseSBiZWluZyBydW4sIGUuZy4gc29tZXRoaW5nIGxpa2UgIi1zaCIuCisjCitTVV9OQU1FCQlzdQorCisjCisjICpSRVFVSVJFRCoKKyMgICBEaXJlY3Rvcnkgd2hlcmUgbWFpbGJveGVzIHJlc2lkZSwgX29yXyBuYW1lIG9mIGZpbGUsIHJlbGF0aXZlIHRvIHRoZQorIyAgIGhvbWUgZGlyZWN0b3J5LiAgSWYgeW91IF9kb18gZGVmaW5lIGJvdGgsICNNQUlMX0RJUiB0YWtlcyBwcmVjZWRlbmNlLgorIworI01BSUxfRElSCS92YXIvc3Bvb2wvbWFpbAorTUFJTF9GSUxFCS5tYWlsCisKKyMKKyMgSWYgZGVmaW5lZCwgZmlsZSB3aGljaCBpbmhpYml0cyBhbGwgdGhlIHVzdWFsIGNoYXR0ZXIgZHVyaW5nIHRoZSBsb2dpbgorIyBzZXF1ZW5jZS4gIElmIGEgZnVsbCBwYXRobmFtZSwgdGhlbiBodXNoZWQgbW9kZSB3aWxsIGJlIGVuYWJsZWQgaWYgdGhlCisjIHVzZXIncyBuYW1lIG9yIHNoZWxsIGFyZSBmb3VuZCBpbiB0aGUgZmlsZS4gIElmIG5vdCBhIGZ1bGwgcGF0aG5hbWUsIHRoZW4KKyMgaHVzaGVkIG1vZGUgd2lsbCBiZSBlbmFibGVkIGlmIHRoZSBmaWxlIGV4aXN0cyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorIworSFVTSExPR0lOX0ZJTEUJLmh1c2hsb2dpbgorI0hVU0hMT0dJTl9GSUxFCS9ldGMvaHVzaGxvZ2lucworCisjCisjIElmIGRlZmluZWQsIGVpdGhlciBhIFRaIGVudmlyb25tZW50IHBhcmFtZXRlciBzcGVjIG9yIHRoZQorIyBmdWxseS1yb290ZWQgcGF0aG5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcgc3VjaCBhIHNwZWMuCisjCisjRU5WX1RaCQlUWj1DU1Q2Q0RUCisjRU5WX1RaCQkvZXRjL3R6bmFtZQorCisjCisjIElmIGRlZmluZWQsIGFuIEhaIGVudmlyb25tZW50IHBhcmFtZXRlciBzcGVjLgorIworIyBmb3IgTGludXgveDg2CisjRU5WX0haCQlIWj0xMDAKKyMgRm9yIExpbnV4L0FscGhhLi4uCisjRU5WX0haCQlIWj0xMDI0CisKKyMKKyMgKlJFUVVJUkVEKiAgVGhlIGRlZmF1bHQgUEFUSCBzZXR0aW5ncywgZm9yIHN1cGVydXNlciBhbmQgbm9ybWFsIHVzZXJzLgorIworIyAodGhleSBhcmUgbWluaW1hbCwgYWRkIHRoZSByZXN0IGluIHRoZSBzaGVsbCBzdGFydHVwIGZpbGVzKQorRU5WX1NVUEFUSAlQQVRIPS9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCitFTlZfUEFUSAlQQVRIPS9iaW46L3Vzci9iaW4KKworIworIyBUZXJtaW5hbCBwZXJtaXNzaW9ucworIworIwlUVFlHUk9VUAlMb2dpbiB0dHkgd2lsbCBiZSBhc3NpZ25lZCB0aGlzIGdyb3VwIG93bmVyc2hpcC4KKyMJVFRZUEVSTQkJTG9naW4gdHR5IHdpbGwgYmUgc2V0IHRvIHRoaXMgcGVybWlzc2lvbi4KKyMKKyMgSWYgeW91IGhhdmUgYSAid3JpdGUiIHByb2dyYW0gd2hpY2ggaXMgInNldGdpZCIgdG8gYSBzcGVjaWFsIGdyb3VwCisjIHdoaWNoIG93bnMgdGhlIHRlcm1pbmFscywgZGVmaW5lIFRUWUdST1VQIHRvIHRoZSBncm91cCBudW1iZXIgYW5kCisjIFRUWVBFUk0gdG8gMDYyMC4gIE90aGVyd2lzZSBsZWF2ZSBUVFlHUk9VUCBjb21tZW50ZWQgb3V0IGFuZCBhc3NpZ24KKyMgVFRZUEVSTSB0byBlaXRoZXIgNjIyIG9yIDYwMC4KKyMKK1RUWUdST1VQCXR0eQorVFRZUEVSTQkJMDYwMAorCisjCisjIExvZ2luIGNvbmZpZ3VyYXRpb24gaW5pdGlhbGl6YXRpb25zOgorIworIwlFUkFTRUNIQVIJVGVybWluYWwgRVJBU0UgY2hhcmFjdGVyICgnXDAxMCcgPSBiYWNrc3BhY2UpLgorIwlLSUxMQ0hBUglUZXJtaW5hbCBLSUxMIGNoYXJhY3RlciAoJ1wwMjUnID0gQ1RSTC9VKS4KKyMJVUxJTUlUCQlEZWZhdWx0ICJ1bGltaXQiIHZhbHVlLgorIworIyBUaGUgRVJBU0VDSEFSIGFuZCBLSUxMQ0hBUiBhcmUgdXNlZCBvbmx5IG9uIFN5c3RlbSBWIG1hY2hpbmVzLgorIyBUaGUgVUxJTUlUIGlzIHVzZWQgb25seSBpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0LgorIyAobm93IGl0IHdvcmtzIHdpdGggc2V0cmxpbWl0IHRvbzsgdWxpbWl0IGlzIGluIDUxMi1ieXRlIHVuaXRzKQorIworIyBQcmVmaXggdGhlc2UgdmFsdWVzIHdpdGggIjAiIHRvIGdldCBvY3RhbCwgIjB4IiB0byBnZXQgaGV4YWRlY2ltYWwuCisjCitFUkFTRUNIQVIJMDE3NworS0lMTENIQVIJMDI1CisjVUxJTUlUCQkyMDk3MTUyCisKKyMgRGVmYXVsdCBpbml0aWFsICJ1bWFzayIgdmFsdWUgZm9yIG5vbi1QQU0gZW5hYmxlZCBzeXN0ZW1zLgorIyBVTUFTSyBpcyBhbHNvIHVzZWQgYnkgdXNlcmFkZCBhbmQgbmV3dXNlcnMgdG8gc2V0IHRoZSBtb2RlIG9mIG5ldyBob21lCisjIGRpcmVjdG9yaWVzLgorIyAwMjIgaXMgdGhlIGRlZmF1bHQgdmFsdWUsIGJ1dCAwMjcsIG9yIGV2ZW4gMDc3LCBjb3VsZCBiZSBjb25zaWRlcmVkCisjIGJldHRlciBmb3IgcHJpdmFjeS4gVGhlcmUgaXMgbm8gT25lIFRydWUgQW5zd2VyIGhlcmU6IGVhY2ggc3lzYWRtaW4KKyMgbXVzdCBtYWtlIHVwIGhlciBtaW5kLgorVU1BU0sJCTAyMgorCisjCisjIFBhc3N3b3JkIGFnaW5nIGNvbnRyb2xzOgorIworIwlQQVNTX01BWF9EQVlTCU1heGltdW0gbnVtYmVyIG9mIGRheXMgYSBwYXNzd29yZCBtYXkgYmUgdXNlZC4KKyMJUEFTU19NSU5fREFZUwlNaW5pbXVtIG51bWJlciBvZiBkYXlzIGFsbG93ZWQgYmV0d2VlbiBwYXNzd29yZCBjaGFuZ2VzLgorIwlQQVNTX01JTl9MRU4JTWluaW11bSBhY2NlcHRhYmxlIHBhc3N3b3JkIGxlbmd0aC4KKyMJUEFTU19XQVJOX0FHRQlOdW1iZXIgb2YgZGF5cyB3YXJuaW5nIGdpdmVuIGJlZm9yZSBhIHBhc3N3b3JkIGV4cGlyZXMuCisjCitQQVNTX01BWF9EQVlTCTk5OTk5CitQQVNTX01JTl9EQVlTCTAKKyNQQVNTX01JTl9MRU4JNQorUEFTU19XQVJOX0FHRQk3CisKKyMKKyMgSWYgInllcyIsIHRoZSB1c2VyIG11c3QgYmUgbGlzdGVkIGFzIGEgbWVtYmVyIG9mIHRoZSBmaXJzdCBnaWQgMCBncm91cAorIyBpbiAvZXRjL2dyb3VwIChjYWxsZWQgInJvb3QiIG9uIG1vc3QgTGludXggc3lzdGVtcykgdG8gYmUgYWJsZSB0byAic3UiCisjIHRvIHVpZCAwIGFjY291bnRzLiAgSWYgdGhlIGdyb3VwIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgZW1wdHksIG5vIG9uZQorIyB3aWxsIGJlIGFibGUgdG8gInN1IiB0byB1aWQgMC4KKyMKKyNTVV9XSEVFTF9PTkxZCW5vCisKKyMKKyMgSWYgY29tcGlsZWQgd2l0aCBjcmFja2xpYiBzdXBwb3J0LCB3aGVyZSBhcmUgdGhlIGRpY3Rpb25hcmllcworIworI0NSQUNLTElCX0RJQ1RQQVRICS92YXIvY2FjaGUvY3JhY2tsaWIvY3JhY2tsaWJfZGljdAorCisjCisjIE1pbi9tYXggdmFsdWVzIGZvciBhdXRvbWF0aWMgdWlkIHNlbGVjdGlvbiBpbiB1c2VyYWRkCisjCitVSURfTUlOCQkJIDEwMDAKK1VJRF9NQVgJCQk2MDAwMAorIyBTeXN0ZW0gYWNjb3VudHMKK1NZU19VSURfTUlOCQkgIDEwMQorU1lTX1VJRF9NQVgJCSAgOTk5CisKKyMKKyMgTWluL21heCB2YWx1ZXMgZm9yIGF1dG9tYXRpYyBnaWQgc2VsZWN0aW9uIGluIGdyb3VwYWRkCisjCitHSURfTUlOCQkJIDEwMDAKK0dJRF9NQVgJCQk2MDAwMAorIyBTeXN0ZW0gYWNjb3VudHMKK1NZU19HSURfTUlOCQkgIDEwMQorU1lTX0dJRF9NQVgJCSAgOTk5CisKKyMKKyMgTWF4IG51bWJlciBvZiBsb2dpbiByZXRyaWVzIGlmIHBhc3N3b3JkIGlzIGJhZAorIworTE9HSU5fUkVUUklFUwkJNQorCisjCisjIE1heCB0aW1lIGluIHNlY29uZHMgZm9yIGxvZ2luCisjCitMT0dJTl9USU1FT1VUCQk2MAorCisjCisjIE1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGNoYW5nZSBwYXNzd29yZCBpZiByZWplY3RlZCAodG9vIGVhc3kpCisjCisjUEFTU19DSEFOR0VfVFJJRVMJNQorCisjCisjIFdhcm4gYWJvdXQgd2VhayBwYXNzd29yZHMgKGJ1dCBzdGlsbCBhbGxvdyB0aGVtKSBpZiB5b3UgYXJlIHJvb3QuCisjCisjUEFTU19BTFdBWVNfV0FSTgl5ZXMKKworIworIyBOdW1iZXIgb2Ygc2lnbmlmaWNhbnQgY2hhcmFjdGVycyBpbiB0aGUgcGFzc3dvcmQgZm9yIGNyeXB0KCkuCisjIERlZmF1bHQgaXMgOCwgZG9uJ3QgY2hhbmdlIHVubGVzcyB5b3VyIGNyeXB0KCkgaXMgYmV0dGVyLgorIyBJZ25vcmVkIGlmIE1ENV9DUllQVF9FTkFCIHNldCB0byAieWVzIi4KKyMKKyNQQVNTX01BWF9MRU4JCTgKKworIworIyBSZXF1aXJlIHBhc3N3b3JkIGJlZm9yZSBjaGZuL2Noc2ggY2FuIG1ha2UgYW55IGNoYW5nZXMuCisjCisjQ0hGTl9BVVRICQl5ZXMKKworIworIyBXaGljaCBmaWVsZHMgbWF5IGJlIGNoYW5nZWQgYnkgcmVndWxhciB1c2VycyB1c2luZyBjaGZuIC0gdXNlCisjIGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzICJmcndoIiAoZnVsbCBuYW1lLCByb29tIG51bWJlciwgd29yaworIyBwaG9uZSwgaG9tZSBwaG9uZSkuICBJZiBub3QgZGVmaW5lZCwgbm8gY2hhbmdlcyBhcmUgYWxsb3dlZC4KKyMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksICJ5ZXMiID0gInJ3aCIgYW5kICJubyIgPSAiZnJ3aCIuCisjIAorQ0hGTl9SRVNUUklDVAkJcndoCisKKyMKKyMgUGFzc3dvcmQgcHJvbXB0ICglcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHVzZXIgbmFtZSkuCisjCisjIFhYWCAtIGl0IGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgeWV0LCBmb3Igbm93IGxlYXZlIGl0IGNvbW1lbnRlZCBvdXQKKyMgdG8gdXNlIHRoZSBkZWZhdWx0IHdoaWNoIGlzIGp1c3QgIlBhc3N3b3JkOiAiLgorI0xPR0lOX1NUUklORwkJIiVzJ3MgUGFzc3dvcmQ6ICIKKworIworIyBPbmx5IHdvcmtzIGlmIGNvbXBpbGVkIHdpdGggTUQ1X0NSWVBUIGRlZmluZWQ6CisjIElmIHNldCB0byAieWVzIiwgbmV3IHBhc3N3b3JkcyB3aWxsIGJlIGVuY3J5cHRlZCB1c2luZyB0aGUgTUQ1LWJhc2VkCisjIGFsZ29yaXRobSBjb21wYXRpYmxlIHdpdGggdGhlIG9uZSB1c2VkIGJ5IHJlY2VudCByZWxlYXNlcyBvZiBGcmVlQlNELgorIyBJdCBzdXBwb3J0cyBwYXNzd29yZHMgb2YgdW5saW1pdGVkIGxlbmd0aCBhbmQgbG9uZ2VyIHNhbHQgc3RyaW5ncy4KKyMgU2V0IHRvICJubyIgaWYgeW91IG5lZWQgdG8gY29weSBlbmNyeXB0ZWQgcGFzc3dvcmRzIHRvIG90aGVyIHN5c3RlbXMKKyMgd2hpY2ggZG9uJ3QgdW5kZXJzdGFuZCB0aGUgbmV3IGFsZ29yaXRobS4gIERlZmF1bHQgaXMgIm5vIi4KKyMKKyMgTm90ZTogSWYgeW91IHVzZSBQQU0sIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBhIHZhbHVlIGNvbnNpc3RlbnQgd2l0aAorIyB0aGUgUEFNIG1vZHVsZXMgY29uZmlndXJhdGlvbi4KKyMKKyMgVGhpcyB2YXJpYWJsZSBpcyBkZXByZWNhdGVkLiBZb3Ugc2hvdWxkIHVzZSBFTkNSWVBUX01FVEhPRC4KKyMKKyNNRDVfQ1JZUFRfRU5BQglubworCisjCisjIE9ubHkgd29ya3MgaWYgY29tcGlsZWQgd2l0aCBFTkNSWVBUTUVUSE9EX1NFTEVDVCBkZWZpbmVkOgorIyBJZiBzZXQgdG8gTUQ1ICwgTUQ1LWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIFNIQTI1NiwgU0hBMjU2LWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIFNIQTUxMiwgU0hBNTEyLWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQKKyMgSWYgc2V0IHRvIERFUywgREVTLWJhc2VkIGFsZ29yaXRobSB3aWxsIGJlIHVzZWQgZm9yIGVuY3J5cHRpbmcgcGFzc3dvcmQgKGRlZmF1bHQpCisjIE92ZXJyaWRlcyB0aGUgTUQ1X0NSWVBUX0VOQUIgb3B0aW9uCisjCisjIE5vdGU6IElmIHlvdSB1c2UgUEFNLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYSB2YWx1ZSBjb25zaXN0ZW50IHdpdGgKKyMgdGhlIFBBTSBtb2R1bGVzIGNvbmZpZ3VyYXRpb24uCisjCisjRU5DUllQVF9NRVRIT0QgREVTCisKKyMKKyMgT25seSB3b3JrcyBpZiBFTkNSWVBUX01FVEhPRCBpcyBzZXQgdG8gU0hBMjU2IG9yIFNIQTUxMi4KKyMKKyMgRGVmaW5lIHRoZSBudW1iZXIgb2YgU0hBIHJvdW5kcy4KKyMgV2l0aCBhIGxvdCBvZiByb3VuZHMsIGl0IGlzIG1vcmUgZGlmZmljdWx0IHRvIGJydXRlIGZvcmNpbmcgdGhlIHBhc3N3b3JkLgorIyBCdXQgbm90ZSBhbHNvIHRoYXQgaXQgbW9yZSBDUFUgcmVzb3VyY2VzIHdpbGwgYmUgbmVlZGVkIHRvIGF1dGhlbnRpY2F0ZQorIyB1c2Vycy4KKyMKKyMgSWYgbm90IHNwZWNpZmllZCwgdGhlIGxpYmMgd2lsbCBjaG9vc2UgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvdW5kcyAoNTAwMCkuCisjIFRoZSB2YWx1ZXMgbXVzdCBiZSBpbnNpZGUgdGhlIDEwMDAtOTk5OTk5OTk5IHJhbmdlLgorIyBJZiBvbmx5IG9uZSBvZiB0aGUgTUlOIG9yIE1BWCB2YWx1ZXMgaXMgc2V0LCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSB1c2VkLgorIyBJZiBNSU4gPiBNQVgsIHRoZSBoaWdoZXN0IHZhbHVlIHdpbGwgYmUgdXNlZC4KKyMKKyMgU0hBX0NSWVBUX01JTl9ST1VORFMgNTAwMAorIyBTSEFfQ1JZUFRfTUFYX1JPVU5EUyA1MDAwCisKKyMKKyMgTGlzdCBvZiBncm91cHMgdG8gYWRkIHRvIHRoZSB1c2VyJ3Mgc3VwcGxlbWVudGFyeSBncm91cCBzZXQKKyMgd2hlbiBsb2dnaW5nIGluIG9uIHRoZSBjb25zb2xlIChhcyBkZXRlcm1pbmVkIGJ5IHRoZSBDT05TT0xFCisjIHNldHRpbmcpLiAgRGVmYXVsdCBpcyBub25lLgorIworIyBVc2Ugd2l0aCBjYXV0aW9uIC0gaXQgaXMgcG9zc2libGUgZm9yIHVzZXJzIHRvIGdhaW4gcGVybWFuZW50CisjIGFjY2VzcyB0byB0aGVzZSBncm91cHMsIGV2ZW4gd2hlbiBub3QgbG9nZ2VkIGluIG9uIHRoZSBjb25zb2xlLgorIyBIb3cgdG8gZG8gaXQgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4uLgorIworI0NPTlNPTEVfR1JPVVBTCQlmbG9wcHk6YXVkaW86Y2Ryb20KKworIworIyBTaG91bGQgbG9naW4gYmUgYWxsb3dlZCBpZiB3ZSBjYW4ndCBjZCB0byB0aGUgaG9tZSBkaXJlY3Rvcnk/CisjIERlZmF1bHQgaW4gbm8uCisjCitERUZBVUxUX0hPTUUJeWVzCisKKyMKKyMgSWYgdGhpcyBmaWxlIGV4aXN0cyBhbmQgaXMgcmVhZGFibGUsIGxvZ2luIGVudmlyb25tZW50IHdpbGwgYmUKKyMgcmVhZCBmcm9tIGl0LiAgRXZlcnkgbGluZSBzaG91bGQgYmUgaW4gdGhlIGZvcm0gbmFtZT12YWx1ZS4KKyMKKyNFTlZJUk9OX0ZJTEUJL2V0Yy9lbnZpcm9ubWVudAorCisjCisjIElmIGRlZmluZWQsIHRoaXMgY29tbWFuZCBpcyBydW4gd2hlbiByZW1vdmluZyBhIHVzZXIuCisjIEl0IHNob3VsZCByZW1vdmUgYW55IGF0L2Nyb24vcHJpbnQgam9icyBldGMuIG93bmVkIGJ5CisjIHRoZSB1c2VyIHRvIGJlIHJlbW92ZWQgKHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQpLgorIworI1VTRVJERUxfQ01ECS91c3Ivc2Jpbi91c2VyZGVsX2xvY2FsCisKKyMKKyMgRW5hYmxlIHNldHRpbmcgb2YgdGhlIHVtYXNrIGdyb3VwIGJpdHMgdG8gYmUgdGhlIHNhbWUgYXMgb3duZXIgYml0cworIyAoZXhhbXBsZXM6IDAyMiAtPiAwMDIsIDA3NyAtPiAwMDcpIGZvciBub24tcm9vdCB1c2VycywgaWYgdGhlIHVpZCBpcworIyB0aGUgc2FtZSBhcyBnaWQsIGFuZCB1c2VybmFtZSBpcyB0aGUgc2FtZSBhcyB0aGUgcHJpbWFyeSBncm91cCBuYW1lLgorIworIyBUaGlzIGFsc28gZW5hYmxlcyB1c2VyZGVsIHRvIHJlbW92ZSB1c2VyIGdyb3VwcyBpZiBubyBtZW1iZXJzIGV4aXN0LgorIworVVNFUkdST1VQU19FTkFCIHllcworCisjCisjIElmIHNldCB0byBhIG5vbi1udWwgbnVtYmVyLCB0aGUgc2hhZG93IHV0aWxpdGllcyB3aWxsIG1ha2Ugc3VyZSB0aGF0CisjIGdyb3VwcyBuZXZlciBoYXZlIG1vcmUgdGhhbiB0aGlzIG51bWJlciBvZiB1c2VycyBvbiBvbmUgbGluZS4KKyMgVGhpcyBwZXJtaXQgdG8gc3VwcG9ydCBzcGxpdCBncm91cHMgKGdyb3VwcyBzcGxpdCBpbnRvIG11bHRpcGxlIGxpbmVzLAorIyB3aXRoIHRoZSBzYW1lIGdyb3VwIElELCB0byBhdm9pZCBsaW1pdGF0aW9uIG9mIHRoZSBsaW5lIGxlbmd0aCBpbiB0aGUKKyMgZ3JvdXAgZmlsZSkuCisjCisjIDAgaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIGRpc2FibGVzIHRoaXMgZmVhdHVyZS4KKyMKKyNNQVhfTUVNQkVSU19QRVJfR1JPVVAJMAorCisjCisjIElmIHVzZXJhZGQgc2hvdWxkIGNyZWF0ZSBob21lIGRpcmVjdG9yaWVzIGZvciB1c2VycyBieSBkZWZhdWx0IChub24KKyMgc3lzdGVtIHVzZXJzIG9ubHkpCisjIFRoaXMgb3B0aW9uIGlzIG92ZXJyaWRkZW4gd2l0aCB0aGUgLU0gb3IgLW0gZmxhZ3Mgb24gdGhlIHVzZXJhZGQgY29tbWFuZAorIyBsaW5lLgorIworQ1JFQVRFX0hPTUUgICAgIHllcworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvbG9naW5fZGVmc19wYW0uc2VkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWYzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL2xvZ2luX2RlZnNfcGFtLnNlZApAQCAtMCwwICsxLDMyIEBACisvXkZBSUxMT0dfRU5BQi9iIGNvbW1lbnQKKy9eTEFTVExPR19FTkFCL2IgY29tbWVudAorL15NQUlMX0NIRUNLX0VOQUIvYiBjb21tZW50CisvXk9CU0NVUkVfQ0hFQ0tTX0VOQUIvYiBjb21tZW50CisvXlBPUlRUSU1FX0NIRUNLU19FTkFCL2IgY29tbWVudAorL15RVU9UQVNfRU5BQi9iIGNvbW1lbnQKKy9eTU9URF9GSUxFL2IgY29tbWVudAorL15GVE1QX0ZJTEUvYiBjb21tZW50CisvXk5PTE9HSU5TX0ZJTEUvYiBjb21tZW50CisvXkVOVl9IWi9iIGNvbW1lbnQKKy9eRU5WX1RaL2IgY29tbWVudAorL15QQVNTX01JTl9MRU4vYiBjb21tZW50CisvXlNVX1dIRUVMX09OTFkvYiBjb21tZW50CisvXkNSQUNLTElCX0RJQ1RQQVRIL2IgY29tbWVudAorL15QQVNTX0NIQU5HRV9UUklFUy9iIGNvbW1lbnQKKy9eUEFTU19BTFdBWVNfV0FSTi9iIGNvbW1lbnQKKy9eUEFTU19NQVhfTEVOL2IgY29tbWVudAorL15QQVNTX01JTl9MRU4vYiBjb21tZW50CisvXkNIRk5fQVVUSC9iIGNvbW1lbnQKKy9eQ0hTSF9BVVRIL2IgY29tbWVudAorL15JU1NVRV9GSUxFL2IgY29tbWVudAorL15MT0dJTl9TVFJJTkcvYiBjb21tZW50CisvXlVMSU1JVC9iIGNvbW1lbnQKKy9eRU5WSVJPTl9GSUxFL2IgY29tbWVudAorCitiIGV4aXQKKworOiBjb21tZW50CisgIHM6XjojOgorCis6IGV4aXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaGZuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZjc2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL2NoZm4KQEAgLTAsMCArMSwxNCBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgY2hmbicgc2VydmljZQorIworCisjIFRoaXMgYWxsb3dzIHJvb3QgdG8gY2hhbmdlIHVzZXIgaW5mb21hdGlvbiB3aXRob3V0IGJlaW5nCisjIHByb21wdGVkIGZvciBhIHBhc3N3b3JkCithdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHBhc3N3ZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hwYXNzd2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzZWZhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hwYXNzd2QKQEAgLTAsMCArMSw0IEBACisjIFRoZSBQQU0gY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgU2hhZG93ICdjaHBhc3N3ZCcgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvY2hzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIxNjlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9jaHNoCkBAIC0wLDAgKzEsMTkgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYGNoc2gnIHNlcnZpY2UKKyMKKworIyBUaGlzIHdpbGwgbm90IGFsbG93IGEgdXNlciB0byBjaGFuZ2UgdGhlaXIgc2hlbGwgdW5sZXNzCisjIHRoZWlyIGN1cnJlbnQgb25lIGlzIGxpc3RlZCBpbiAvZXRjL3NoZWxscy4gVGhpcyBrZWVwcworIyBhY2NvdW50cyB3aXRoIHNwZWNpYWwgc2hlbGxzIGZyb20gY2hhbmdpbmcgdGhlbS4KK2F1dGggICAgICAgcmVxdWlyZWQgICBwYW1fc2hlbGxzLnNvCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBjaGFuZ2UgdXNlciBzaGVsbCB3aXRob3V0IGJlaW5nCisjIHByb21wdGVkIGZvciBhIHBhc3N3b3JkCithdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKworIyBUaGUgc3RhbmRhcmQgVW5peCBhdXRoZW50aWNhdGlvbiBtb2R1bGVzLCB1c2VkIHdpdGgKKyMgTklTIChtYW4gbnNzd2l0Y2gpIGFzIHdlbGwgYXMgbm9ybWFsIC9ldGMvcGFzc3dkIGFuZAorIyAvZXRjL3NoYWRvdyBlbnRyaWVzLgorYXV0aCAgICAgICBpbmNsdWRlICAgICAgY29tbW9uLWF1dGgKK2FjY291bnQgICAgaW5jbHVkZSAgICAgIGNvbW1vbi1hY2NvdW50CitzZXNzaW9uICAgIGluY2x1ZGUgICAgICBjb21tb24tc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9wYW0uZC9sb2dpbiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbG9naW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM0MDA1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbG9naW4KQEAgLTAsMCArMSw4MSBAQAorIworIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyBgbG9naW4nIHNlcnZpY2UKKyMKKworIyBFbmZvcmNlIGEgbWluaW1hbCBkZWxheSBpbiBjYXNlIG9mIGZhaWx1cmUgKGluIG1pY3Jvc2Vjb25kcykuCisjIChSZXBsYWNlcyB0aGUgYEZBSUxfREVMQVknIHNldHRpbmcgZnJvbSBsb2dpbi5kZWZzKQorIyBOb3RlIHRoYXQgb3RoZXIgbW9kdWxlcyBtYXkgcmVxdWlyZSBhbm90aGVyIG1pbmltYWwgZGVsYXkuIChmb3IgZXhhbXBsZSwKKyMgdG8gZGlzYWJsZSBhbnkgZGVsYXksIHlvdSBzaG91bGQgYWRkIHRoZSBub2RlbGF5IG9wdGlvbiB0byBwYW1fdW5peCkKK2F1dGggICAgICAgb3B0aW9uYWwgICBwYW1fZmFpbGRlbGF5LnNvICBkZWxheT0zMDAwMDAwCisKKyMgT3V0cHV0cyBhbiBpc3N1ZSBmaWxlIHByaW9yIHRvIGVhY2ggbG9naW4gcHJvbXB0IChSZXBsYWNlcyB0aGUKKyMgSVNTVUVfRklMRSBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKS4gVW5jb21tZW50IGZvciB1c2UKKyMgYXV0aCAgICAgICByZXF1aXJlZCAgIHBhbV9pc3N1ZS5zbyBpc3N1ZT0vZXRjL2lzc3VlCisKKyMgRGlzYWxsb3dzIHJvb3QgbG9naW5zIGV4Y2VwdCBvbiB0dHkncyBsaXN0ZWQgaW4gL2V0Yy9zZWN1cmV0dHkKKyMgKFJlcGxhY2VzIHRoZSBgQ09OU09MRScgc2V0dGluZyBmcm9tIGxvZ2luLmRlZnMpCisjIE5vdGUgdGhhdCBpdCBpcyBpbmNsdWRlZCBhcyBhICJyZXF1aXNpdGUiIG1vZHVsZS4gTm8gcGFzc3dvcmQgcHJvbXB0cyB3aWxsCisjIGJlIGRpc3BsYXllZCBpZiB0aGlzIG1vZHVsZSBmYWlscyB0byBhdm9pZCBoYXZpbmcgdGhlIHJvb3QgcGFzc3dvcmQKKyMgdHJhbnNtaXR0ZWQgb24gdW5zZWN1cmUgdHR5cy4KKyMgWW91IGNhbiBjaGFuZ2UgaXQgdG8gYSAicmVxdWlyZWQiIG1vZHVsZSBpZiB5b3UgdGhpbmsgaXQgcGVybWl0cyB0bworIyBndWVzcyB2YWxpZCB1c2VyIG5hbWVzIG9mIHlvdXIgc3lzdGVtIChpbnZhbGlkIHVzZXIgbmFtZXMgYXJlIGNvbnNpZGVyZWQKKyMgYXMgcG9zc2libHkgYmVpbmcgcm9vdCkuCithdXRoICAgICAgIFtzdWNjZXNzPW9rIGlnbm9yZT1pZ25vcmUgdXNlcl91bmtub3duPWlnbm9yZSBkZWZhdWx0PWRpZV0gIHBhbV9zZWN1cmV0dHkuc28KKworIyBEaXNhbGxvd3Mgb3RoZXIgdGhhbiByb290IGxvZ2lucyB3aGVuIC9ldGMvbm9sb2dpbiBleGlzdHMKKyMgKFJlcGxhY2VzIHRoZSBgTk9MT0dJTlNfRklMRScgb3B0aW9uIGZyb20gbG9naW4uZGVmcykKK2F1dGggICAgICAgcmVxdWlzaXRlICBwYW1fbm9sb2dpbi5zbworCisjIFRoaXMgbW9kdWxlIHBhcnNlcyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUocykKKyMgYW5kIGFsc28gYWxsb3dzIHlvdSB0byB1c2UgYW4gZXh0ZW5kZWQgY29uZmlnCisjIGZpbGUgL2V0Yy9zZWN1cml0eS9wYW1fZW52LmNvbmYuCisjIAorIyBwYXJzaW5nIC9ldGMvZW52aXJvbm1lbnQgbmVlZHMgInJlYWRlbnY9MSIKK3Nlc3Npb24gICAgICAgcmVxdWlyZWQgICBwYW1fZW52LnNvIHJlYWRlbnY9MQorCisjIFN0YW5kYXJkIFVuKnggYXV0aGVudGljYXRpb24uCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorCisjIFRoaXMgYWxsb3dzIGNlcnRhaW4gZXh0cmEgZ3JvdXBzIHRvIGJlIGdyYW50ZWQgdG8gYSB1c2VyCisjIGJhc2VkIG9uIHRoaW5ncyBsaWtlIHRpbWUgb2YgZGF5LCB0dHksIHNlcnZpY2UsIGFuZCB1c2VyLgorIyBQbGVhc2UgZWRpdCAvZXRjL3NlY3VyaXR5L2dyb3VwLmNvbmYgdG8gZml0IHlvdXIgbmVlZHMKKyMgKFJlcGxhY2VzIHRoZSBgQ09OU09MRV9HUk9VUFMnIG9wdGlvbiBpbiBsb2dpbi5kZWZzKQorYXV0aCAgICAgICBvcHRpb25hbCAgIHBhbV9ncm91cC5zbworCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L3RpbWUuY29uZiBpZiB5b3UgbmVlZCB0byBzZXQKKyMgdGltZSByZXN0cmFpbnN0IG9uIGxvZ2lucy4KKyMgKFJlcGxhY2VzIHRoZSBgUE9SVFRJTUVfQ0hFQ0tTX0VOQUInIG9wdGlvbiBmcm9tIGxvZ2luLmRlZnMKKyMgYXMgd2VsbCBhcyAvZXRjL3BvcnR0aW1lKQorIyBhY2NvdW50ICAgIHJlcXVpc2l0ZSAgcGFtX3RpbWUuc28KKworIyBVbmNvbW1lbnQgYW5kIGVkaXQgL2V0Yy9zZWN1cml0eS9hY2Nlc3MuY29uZiBpZiB5b3UgbmVlZCB0bworIyBzZXQgYWNjZXNzIGxpbWl0cy4KKyMgKFJlcGxhY2VzIC9ldGMvbG9naW4uYWNjZXNzIGZpbGUpCisjIGFjY291bnQgIHJlcXVpcmVkICAgICAgIHBhbV9hY2Nlc3Muc28KKworIyBTZXRzIHVwIHVzZXIgbGltaXRzIGFjY29yZGluZyB0byAvZXRjL3NlY3VyaXR5L2xpbWl0cy5jb25mCisjIChSZXBsYWNlcyB0aGUgdXNlIG9mIC9ldGMvbGltaXRzIGluIG9sZCBsb2dpbikKK3Nlc3Npb24gICAgcmVxdWlyZWQgICBwYW1fbGltaXRzLnNvCisKKyMgUHJpbnRzIHRoZSBsYXN0IGxvZ2luIGluZm8gdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTEFTVExPR19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorc2Vzc2lvbiAgICBvcHRpb25hbCAgIHBhbV9sYXN0bG9nLnNvCisKKyMgUHJpbnRzIHRoZSBtb3RkIHVwb24gc3VjY2VzZnVsIGxvZ2luCisjIChSZXBsYWNlcyB0aGUgYE1PVERfRklMRScgb3B0aW9uIGluIGxvZ2luLmRlZnMpCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21vdGQuc28KKworIyBQcmludHMgdGhlIHN0YXR1cyBvZiB0aGUgdXNlcidzIG1haWxib3ggdXBvbiBzdWNjZXNmdWwgbG9naW4KKyMgKFJlcGxhY2VzIHRoZSBgTUFJTF9DSEVDS19FTkFCJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKS4gCisjCisjIFRoaXMgYWxzbyBkZWZpbmVzIHRoZSBNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlCisjIEhvd2V2ZXIsIHVzZXJkZWwgYWxzbyBuZWVkcyBNQUlMX0RJUiBhbmQgTUFJTF9GSUxFIHZhcmlhYmxlcworIyBpbiAvZXRjL2xvZ2luLmRlZnMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3ZpbmcgYSB1c2VyIAorIyBhbHNvIHJlbW92ZXMgdGhlIHVzZXIncyBtYWlsIHNwb29sIGZpbGUuCisjIFNlZSBjb21tZW50cyBpbiAvZXRjL2xvZ2luLmRlZnMKK3Nlc3Npb24gICAgb3B0aW9uYWwgICBwYW1fbWFpbC5zbyBzdGFuZGFyZAorCisjIFN0YW5kYXJkIFVuKnggYWNjb3VudCBhbmQgc2Vzc2lvbgorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICBpbmNsdWRlICAgICAgY29tbW9uLXNlc3Npb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvbmV3dXNlcnMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL25ld3VzZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTNkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL25ld3VzZXJzCkBAIC0wLDAgKzEsNCBAQAorIyBUaGUgUEFNIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIFNoYWRvdyAnbmV3dXNlcnMnIHNlcnZpY2UKKyMKKworcGFzc3dvcmQgICBpbmNsdWRlICAgICAgY29tbW9uLXBhc3N3b3JkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvcGFzc3dkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzQ5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3Bhc3N3ZApAQCAtMCwwICsxLDUgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYHBhc3N3ZCcgc2VydmljZQorIworCitwYXNzd29yZCAgIGluY2x1ZGUgICAgICBjb21tb24tcGFzc3dvcmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvcGFtLmQvc3UgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3N1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNTkwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3BhbS5kL3N1CkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgVGhlIFBBTSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBTaGFkb3cgYHN1JyBzZXJ2aWNlCisjCisKKyMgVGhpcyBhbGxvd3Mgcm9vdCB0byBzdSB3aXRob3V0IHBhc3N3b3JkcyAobm9ybWFsIG9wZXJhdGlvbikKK2F1dGggICAgICAgc3VmZmljaWVudCBwYW1fcm9vdG9rLnNvCisKKyMgVW5jb21tZW50IHRoaXMgdG8gZm9yY2UgdXNlcnMgdG8gYmUgYSBtZW1iZXIgb2YgZ3JvdXAgcm9vdAorIyBiZWZvcmUgdGhleSBjYW4gdXNlIGBzdScuIFlvdSBjYW4gYWxzbyBhZGQgImdyb3VwPWZvbyIKKyMgdG8gdGhlIGVuZCBvZiB0aGlzIGxpbmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgZ3JvdXAgb3RoZXIKKyMgdGhhbiB0aGUgZGVmYXVsdCAicm9vdCIgKGJ1dCB0aGlzIG1heSBoYXZlIHNpZGUgZWZmZWN0IG9mCisjIGRlbnlpbmcgInJvb3QiIHVzZXIsIHVubGVzcyBzaGUncyBhIG1lbWJlciBvZiAiZm9vIiBvciBleHBsaWNpdGx5CisjIHBlcm1pdHRlZCBlYXJsaWVyIGJ5IGUuZy4gInN1ZmZpY2llbnQgcGFtX3Jvb3Rvay5zbyIpLgorIyAoUmVwbGFjZXMgdGhlIGBTVV9XSEVFTF9PTkxZJyBvcHRpb24gZnJvbSBsb2dpbi5kZWZzKQorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3doZWVsLnNvCisKKyMgVW5jb21tZW50IHRoaXMgaWYgeW91IHdhbnQgd2hlZWwgbWVtYmVycyB0byBiZSBhYmxlIHRvCisjIHN1IHdpdGhvdXQgYSBwYXNzd29yZC4KKyMgYXV0aCAgICAgICBzdWZmaWNpZW50IHBhbV93aGVlbC5zbyB0cnVzdAorCisjIFVuY29tbWVudCB0aGlzIGlmIHlvdSB3YW50IG1lbWJlcnMgb2YgYSBzcGVjaWZpYyBncm91cCB0byBub3QKKyMgYmUgYWxsb3dlZCB0byB1c2Ugc3UgYXQgYWxsLgorIyBhdXRoICAgICAgIHJlcXVpcmVkICAgcGFtX3doZWVsLnNvIGRlbnkgZ3JvdXA9bm9zdQorCisjIFVuY29tbWVudCBhbmQgZWRpdCAvZXRjL3NlY3VyaXR5L3RpbWUuY29uZiBpZiB5b3UgbmVlZCB0byBzZXQKKyMgdGltZSByZXN0cmFpbnN0IG9uIHN1IHVzYWdlLgorIyAoUmVwbGFjZXMgdGhlIGBQT1JUVElNRV9DSEVDS1NfRU5BQicgb3B0aW9uIGZyb20gbG9naW4uZGVmcworIyBhcyB3ZWxsIGFzIC9ldGMvcG9ydHRpbWUpCisjIGFjY291bnQgICAgcmVxdWlzaXRlICBwYW1fdGltZS5zbworCisjIFRoaXMgbW9kdWxlIHBhcnNlcyBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uIGZpbGUocykKKyMgYW5kIGFsc28gYWxsb3dzIHlvdSB0byB1c2UgYW4gZXh0ZW5kZWQgY29uZmlnCisjIGZpbGUgL2V0Yy9zZWN1cml0eS9wYW1fZW52LmNvbmYuCisjIAorIyBwYXJzaW5nIC9ldGMvZW52aXJvbm1lbnQgbmVlZHMgInJlYWRlbnY9MSIKK3Nlc3Npb24gICAgICAgcmVxdWlyZWQgICBwYW1fZW52LnNvIHJlYWRlbnY9MQorCisjIERlZmluZXMgdGhlIE1BSUwgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgSG93ZXZlciwgdXNlcmRlbCBhbHNvIG5lZWRzIE1BSUxfRElSIGFuZCBNQUlMX0ZJTEUgdmFyaWFibGVzCisjIGluIC9ldGMvbG9naW4uZGVmcyB0byBtYWtlIHN1cmUgdGhhdCByZW1vdmluZyBhIHVzZXIgCisjIGFsc28gcmVtb3ZlcyB0aGUgdXNlcidzIG1haWwgc3Bvb2wgZmlsZS4KKyMgU2VlIGNvbW1lbnRzIGluIC9ldGMvbG9naW4uZGVmcworIworIyAibm9wZW4iIHN0YW5kcyB0byBhdm9pZCByZXBvcnRpbmcgbmV3IG1haWwgd2hlbiBzdSdpbmcgdG8gYW5vdGhlciB1c2VyCitzZXNzaW9uICAgIG9wdGlvbmFsICAgcGFtX21haWwuc28gbm9wZW4KKworIyBTZXRzIHVwIHVzZXIgbGltaXRzLCBwbGVhc2UgdW5jb21tZW50IGFuZCByZWFkIC9ldGMvc2VjdXJpdHkvbGltaXRzLmNvbmYKKyMgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyMgKFJlcGxhY2VzIHRoZSB1c2Ugb2YgL2V0Yy9saW1pdHMgaW4gb2xkIGxvZ2luKQorIyBzZXNzaW9uICAgIHJlcXVpcmVkICAgcGFtX2xpbWl0cy5zbworCisjIFRoZSBzdGFuZGFyZCBVbml4IGF1dGhlbnRpY2F0aW9uIG1vZHVsZXMsIHVzZWQgd2l0aAorIyBOSVMgKG1hbiBuc3N3aXRjaCkgYXMgd2VsbCBhcyBub3JtYWwgL2V0Yy9wYXNzd2QgYW5kCisjIC9ldGMvc2hhZG93IGVudHJpZXMuCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Nlc3Npb24gICAgaW5jbHVkZSAgICAgIGNvbW1vbi1zZXNzaW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eSBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2VjdXJldHR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTM0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3NlY3VyZXR0eQpAQCAtMCwwICsxLDIzOCBAQAorIyAvZXRjL3NlY3VyZXR0eTogbGlzdCBvZiB0ZXJtaW5hbHMgb24gd2hpY2ggcm9vdCBpcyBhbGxvd2VkIHRvIGxvZ2luLgorIyBTZWUgc2VjdXJldHR5KDUpIGFuZCBsb2dpbigxKS4KK2NvbnNvbGUKKworIyBTdGFuZGFyZCBzZXJpYWwgcG9ydHMKK3R0eVMwCit0dHlTMQordHR5UzIKK3R0eVMzCisKKyMgQVJNIEFNQkEgU29DcwordHR5QU0wCit0dHlBTTEKK3R0eUFNMgordHR5QU0zCit0dHlBTUEwCit0dHlBTUExCit0dHlBTUEyCit0dHlBTUEzCisKKyMgUUNPTSBTb2NzCit0dHlIU0wwCit0dHlIU0wxCit0dHlIU0wyCit0dHlIU0wzCit0dHlNU00wCit0dHlNU00xCit0dHlNU00yCisKKyMgU2Ftc3VuZyBBUk0gU29DcwordHR5U0FDMAordHR5U0FDMQordHR5U0FDMgordHR5U0FDMworCisjIFNUTSBTb0NzCit0dHlBUzAKK3R0eUFTMQordHR5QVMyCit0dHlBUzMKKworIyBUSSBPTUFQIFNvQ3MKK3R0eU8wCit0dHlPMQordHR5TzIKK3R0eU8zCisKKyMgWGlsaW54IFp5bnEgU29DCit0dHlQUzAKK3R0eVBTMQorCisjIFVTQiBkb25nbGVzCit0dHlVU0IwCit0dHlVU0IxCit0dHlVU0IyCisKKyMgVVNCIHNlcmlhbCBnYWRnZXQKK3R0eUdTMAorCisjIFBvd2VyTWFjCit0dHlQWjAKK3R0eVBaMQordHR5UFoyCit0dHlQWjMKKworIyBFbWJlZGRlZCBNUEMgcGxhdGZvcm1zCit0dHlQU0MwCit0dHlQU0MxCit0dHlQU0MyCit0dHlQU0MzCit0dHlQU0M0Cit0dHlQU0M1CisKKyMgUEEtUklTQyBtdXggcG9ydHMKK3R0eUIwCit0dHlCMQorCisjIFN0YW5kYXJkIGh5cGVydmlzb3IgdmlydHVhbCBjb25zb2xlCitodmMwCisKKyMgT2xkc3R5bGUgWGVuIGNvbnNvbGUKK3h2YzAKKworIyBTdGFuZGFyZCBjb25zb2xlcwordHR5MQordHR5MgordHR5MwordHR5NAordHR5NQordHR5NgordHR5NwordHR5OAordHR5OQordHR5MTAKK3R0eTExCit0dHkxMgordHR5MTMKK3R0eTE0Cit0dHkxNQordHR5MTYKK3R0eTE3Cit0dHkxOAordHR5MTkKK3R0eTIwCit0dHkyMQordHR5MjIKK3R0eTIzCit0dHkyNAordHR5MjUKK3R0eTI2Cit0dHkyNwordHR5MjgKK3R0eTI5Cit0dHkzMAordHR5MzEKK3R0eTMyCit0dHkzMwordHR5MzQKK3R0eTM1Cit0dHkzNgordHR5MzcKK3R0eTM4Cit0dHkzOQordHR5NDAKK3R0eTQxCit0dHk0MgordHR5NDMKK3R0eTQ0Cit0dHk0NQordHR5NDYKK3R0eTQ3Cit0dHk0OAordHR5NDkKK3R0eTUwCit0dHk1MQordHR5NTIKK3R0eTUzCit0dHk1NAordHR5NTUKK3R0eTU2Cit0dHk1NwordHR5NTgKK3R0eTU5Cit0dHk2MAordHR5NjEKK3R0eTYyCit0dHk2MworCisjIExvY2FsIFggZGlzcGxheXMgKGFsbG93cyBlbXB0eSBwYXNzd29yZHMgd2l0aCBwYW1fdW5peCdzIG51bGxva19zZWN1cmUpCitwdHMvMAorcHRzLzEKK3B0cy8yCitwdHMvMworCisjIEVtYmVkZGVkIEZyZWVzY2FsZSBpLk1YIHBvcnRzCit0dHlteGMwCit0dHlteGMxCit0dHlteGMyCit0dHlteGMzCit0dHlteGM0Cit0dHlteGM1CisKKyMgRnJlZXNjYWxlIGxwdWFydCBwb3J0cwordHR5TFAwCit0dHlMUDEKK3R0eUxQMgordHR5TFAzCit0dHlMUDQKK3R0eUxQNQorCisjIFN0YW5kYXJkIHNlcmlhbCBwb3J0cywgd2l0aCBkZXZmcwordHRzLzAKK3R0cy8xCisKKyMgU3RhbmRhcmQgY29uc29sZXMsIHdpdGggZGV2ZnMKK3ZjLzEKK3ZjLzIKK3ZjLzMKK3ZjLzQKK3ZjLzUKK3ZjLzYKK3ZjLzcKK3ZjLzgKK3ZjLzkKK3ZjLzEwCit2Yy8xMQordmMvMTIKK3ZjLzEzCit2Yy8xNAordmMvMTUKK3ZjLzE2Cit2Yy8xNwordmMvMTgKK3ZjLzE5Cit2Yy8yMAordmMvMjEKK3ZjLzIyCit2Yy8yMwordmMvMjQKK3ZjLzI1Cit2Yy8yNgordmMvMjcKK3ZjLzI4Cit2Yy8yOQordmMvMzAKK3ZjLzMxCit2Yy8zMgordmMvMzMKK3ZjLzM0Cit2Yy8zNQordmMvMzYKK3ZjLzM3Cit2Yy8zOAordmMvMzkKK3ZjLzQwCit2Yy80MQordmMvNDIKK3ZjLzQzCit2Yy80NAordmMvNDUKK3ZjLzQ2Cit2Yy80NwordmMvNDgKK3ZjLzQ5Cit2Yy81MAordmMvNTEKK3ZjLzUyCit2Yy81MwordmMvNTQKK3ZjLzU1Cit2Yy81NgordmMvNTcKK3ZjLzU4Cit2Yy81OQordmMvNjAKK3ZjLzYxCit2Yy82MgordmMvNjMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctNC4xLjMtZG90cy1pbi11c2VybmFtZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiYjBhOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LTQuMS4zLWRvdHMtaW4tdXNlcm5hbWVzLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKKyMgY29tbWl0IG1lc3NhZ2UgY29waWVkIGZyb20gb3BlbmVtYmVkZGVkOgorIyAgICBjb21taXQgMjQ2YzgwNjM3YjEzNWYzYTExM2QzMTliMTYzNDIyZjk4MTc0ZWU2YworIyAgICBBdXRob3I6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjICAgIERhdGU6ICAgV2VkIEp1biA5IDEzOjM3OjAzIDIwMTAgLTA3MDAKKyMKKyMgICAgc2hhZG93LTQuMS40LjI6IEFkZCBwYXRjaGVzIHRvIHN1cHBvcnQgZG90cyBpbiBsb2dpbiBpZC4KKyMgICAgCisjICAgIFNpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjCisjIGNvbW1lbnQgYWRkZWQgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTExCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTY290dCBHYXJtYW4gPHNjb3R0LmEuZ2FybWFuQGludGVsLmNvbT4KKworSW5kZXg6IHNoYWRvdy00LjEuNC4yL2xpYm1pc2MvY2hrbmFtZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2hhZG93LTQuMS40LjIub3JpZy9saWJtaXNjL2Noa25hbWUuYwkyMDA5LTA0LTI4IDEyOjE0OjA0LjAwMDAwMDAwMCAtMDcwMAorKysrIHNoYWRvdy00LjEuNC4yL2xpYm1pc2MvY2hrbmFtZS5jCTIwMTAtMDYtMDMgMTc6NDM6MjAuNjM4OTczODU3IC0wNzAwCitAQCAtNjEsNiArNjEsNyBAQCBzdGF0aWMgYm9vbCBpc192YWxpZF9uYW1lIChjb25zdCBjaGFyICpuCisgCQkgICAgICAoICgnMCcgPD0gKm5hbWUpICYmICgnOScgPj0gKm5hbWUpICkgfHwKKyAJCSAgICAgICgnXycgPT0gKm5hbWUpIHx8CisgCQkgICAgICAoJy0nID09ICpuYW1lKSB8fAorKwkJICAgICAgKCcuJyA9PSAqbmFtZSkgfHwKKyAJCSAgICAgICggKCckJyA9PSAqbmFtZSkgJiYgKCdcMCcgPT0gKihuYW1lICsgMSkpICkKKyAJCSAgICAgKSkgeworIAkJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvZmlsZXMvc2hhZG93LXVwZGF0ZS1wYW0tY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWY4MDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoCkBAIC0wLDAgKzEsOTEgQEAKK1RoZSBzeXN0ZW0tYXV0aCBpbiB0aGUgY29uZmlndXJlIGZpbGVzIGlzIGZyb20gRmVkb3JhIHdoaWNoIHB1dCBhbGwgdGhlIDQgcGFtIHR5cGUgcnVsZXMKK2luIG9uZSBmaWxlLgorSW4geW9jdG8gaXQgb2JleSB0aGUgd2F5IHdpdGggRGViaWFuL1VidW50dSwgYW5kIHRoZSBuYW1lcyBhcmUgY29tbW9uLWF1dGgsIGNvbW1vbi1hY2NvdW50LAorY29tbW9uLXBhc3N3b3JkIGFuZCBjb21tb24tc2Vzc2lvbi4KK1NvIHVwZGF0ZSB0aGVtIHdpdGggb2Ugd2F5LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FuZyBLYWkgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGFnZSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hhZ2UKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGFnZQkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGFnZQkyMDExLTA3LTIwIDE5OjAzOjA4Ljk2NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvY2hncGFzc3dkIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9jaGdwYXNzd2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9jaGdwYXNzd2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvY2hncGFzc3dkCTIwMTEtMDctMjAgMTk6MDM6MjYuNTQ0ODQ0OTU4ICswODAwCitAQCAtMSw0ICsxLDQgQEAKKyAjJVBBTS0xLjAKKyBhdXRoCQlzdWZmaWNpZW50CXBhbV9yb290b2suc28KKyBhY2NvdW50CQlyZXF1aXJlZAlwYW1fcGVybWl0LnNvCistcGFzc3dvcmQJaW5jbHVkZQkJc3lzdGVtLWF1dGgKKytwYXNzd29yZAlpbmNsdWRlCQljb21tb24tcGFzc3dvcmQKK2RpZmYgLU51ciBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGFkZCBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBhZGQKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy9ncm91cGFkZAkyMDExLTA3LTIwIDE5OjAyOjI3LjM4NDg0NDk1OCArMDgwMAorKysrIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC9ncm91cGFkZAkyMDExLTA3LTIwIDE5OjA0OjA4LjEyNDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBkZWwgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwZGVsCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBkZWwJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBkZWwJMjAxMS0wNy0yMCAxOTowNDoyNi4xMTQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL2dyb3VwbWVtcyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtZW1zCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtZW1zCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbWVtcwkyMDExLTA3LTIwIDE5OjA0OjM1LjA3NDg0NDk1OCArMDgwMAorQEAgLTEsNCArMSw0IEBACisgIyVQQU0tMS4wCisgYXV0aAkJc3VmZmljaWVudAlwYW1fcm9vdG9rLnNvCisgYWNjb3VudAkJcmVxdWlyZWQJcGFtX3Blcm1pdC5zbworLXBhc3N3b3JkCWluY2x1ZGUJCXN5c3RlbS1hdXRoCisrcGFzc3dvcmQJaW5jbHVkZQkJY29tbW9uLXBhc3N3b3JkCitkaWZmIC1OdXIgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtb2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL2dyb3VwbW9kCistLS0gc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kLm9yaWcvZ3JvdXBtb2QJMjAxMS0wNy0yMCAxOTowMjoyNy4zODQ4NDQ5NTggKzA4MDAKKysrKyBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQvZ3JvdXBtb2QJMjAxMS0wNy0yMCAxOTowNDo0NC44NjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJhZGQgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJhZGQKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyYWRkCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJhZGQJMjAxMS0wNy0yMCAxOTowNzoyNi4yNDQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJkZWwgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJkZWwKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VyZGVsCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJkZWwJMjAxMS0wNy0yMCAxOTowNzozNS43MzQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZAorZGlmZiAtTnVyIHNoYWRvdy00LjEuNC4zL2V0Yy9wYW0uZC5vcmlnL3VzZXJtb2Qgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJtb2QKKy0tLSBzaGFkb3ctNC4xLjQuMy9ldGMvcGFtLmQub3JpZy91c2VybW9kCTIwMTEtMDctMjAgMTk6MDI6MjcuMzg0ODQ0OTU4ICswODAwCisrKysgc2hhZG93LTQuMS40LjMvZXRjL3BhbS5kL3VzZXJtb2QJMjAxMS0wNy0yMCAxOTowNzo0Mi4wMjQ4NDQ5NTggKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorICMlUEFNLTEuMAorIGF1dGgJCXN1ZmZpY2llbnQJcGFtX3Jvb3Rvay5zbworIGFjY291bnQJCXJlcXVpcmVkCXBhbV9wZXJtaXQuc28KKy1wYXNzd29yZAlpbmNsdWRlCQlzeXN0ZW0tYXV0aAorK3Bhc3N3b3JkCWluY2x1ZGUJCWNvbW1vbi1wYXNzd29yZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9maWxlcy91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGMxNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L2ZpbGVzL3VzZXJtb2QtZml4LWNvbXBpbGF0aW9uLWZhaWx1cmUtd2l0aC1zdWJpZHMtZGlzYWJsZWQucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VzZXJtb2Q6IGZpeCBjb21waWxhdGlvbiBmYWlsdXJlIHdpdGggc3ViaWRzIGRpc2FibGVkCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy91c2VybW9kLmMgfCAgICAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy91c2VybW9kLmMgYi9zcmMvdXNlcm1vZC5jCitpbmRleCBlN2Q0MzUxLi42ODViNTBhIDEwMDY0NAorLS0tIGEvc3JjL3VzZXJtb2QuYworKysrIGIvc3JjL3VzZXJtb2QuYworQEAgLTEzNjAsNyArMTM2MCw3IEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NfZmxhZ3MgKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCSAgICAgICAgIFByb2csICh1bnNpZ25lZCBsb25nKSB1c2VyX25ld2lkKTsKKyAJCWV4aXQgKEVfVUlEX0lOX1VTRSk7CisgCX0KKy0KKysjaWZkZWYgRU5BQkxFX1NVQklEUworIAlpZiAoICAgKHZmbGcgfHwgVmZsZykKKyAJICAgICYmICFpc19zdWJfdWlkKSB7CisgCQlmcHJpbnRmIChzdGRlcnIsCitAQCAtMTM3Niw2ICsxMzc2LDcgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19mbGFncyAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJICAgICAgICAgUHJvZywgc3ViX2dpZF9kYm5hbWUgKCksICItdyIsICItVyIpOworIAkJZXhpdCAoRV9VU0FHRSk7CisgCX0KKysjZW5kaWYKKyB9CisgCisgLyoKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zZWN1cmV0dHlfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4Zjg4OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LXNlY3VyZXR0eV80LjIuMS5iYgpAQCAtMCwwICsxLDM4IEBACitTVU1NQVJZID0gIlByb3ZpZGVyIG9mIHRoZSBtYWNoaW5lIHNwZWNpZmljIHNlY3VyZXR0eSBmaWxlIgorU0VDVElPTiA9ICJiYXNlIHV0aWxzIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU5ISUJJVF9ERUZBVUxUX0RFUFMgPSAiMSIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NlY3VyZXR0eSIKKworUyA9ICIke1dPUktESVJ9IgorCisjIFNpbmNlIFNFUklBTF9DT05TT0xFUyBpcyBsaWtlbHkgdG8gYmUgc2V0IGZyb20gdGhlIG1hY2hpbmUgY29uZmlndXJhdGlvbgorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworZG9faW5zdGFsbCAoKSB7CisJIyBFbnN1cmUgd2UgYWRkIGEgc3VpdGFibGUgc2VjdXJldHR5IGZpbGUgdG8gdGhlIHBhY2thZ2UgdGhhdCBoYXMKKwkjIG1vc3QgY29tbW9uIGVtYmVkZGVkIFRUWXMgZGVmaW5lZC4KKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtbSAwNDAwICR7V09SS0RJUn0vc2VjdXJldHR5ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eQorCWlmIFsgISAteiAiJHtTRVJJQUxfQ09OU09MRVN9IiBdOyB0aGVuCisJCSMgT3VyIFNFUklBTF9DT05TT0xFUyBjb250YWlucyBhIGJhdWQgcmF0ZSBhbmQgc29tZXRpbWVzIGV4dHJhCisJCSMgb3B0aW9ucyBhcyB3ZWxsLiBUaGUgZm9sbG93aW5nIHBlYXJsIDopIHRha2VzIHRoYXQgYW5kIGNvbnZlcnRzCisJCSMgaXQgaW50byBuZXdsaW5lLXNlcGFyYXRlZCB0dHkncyBhbmQgYXBwZW5kcyB0aGVtIGludG8KKwkJIyBzZWN1cmV0dHkuIFNvIGlmIGEgbWFjaGluZSBoYXMgYSB3ZWlyZCBsb29raW5nIGNvbnNvbGUgZGV2aWNlCisJCSMgbm9kZSAoZS5nLiB0dHlBTUEwKSB0aGF0IHNlY3VyZXR0eSBkb2VzIG5vdCBrbm93LCBpdCB3aWxsIGdldAorCQkjIGFwcGVuZGVkIHRvIHNlY3VyZXR0eSBhbmQgcm9vdCBsb2dpbnMgd2lsbCBiZSBhbGxvd2VkIG9uIHRoYXQKKwkJIyBjb25zb2xlLgorCQl0bXA9IiR7U0VSSUFMX0NPTlNPTEVTfSIKKwkJZm9yIGVudHJ5IGluICR0bXAgOyBkbworCQkJdHR5ZGV2PWBlY2hvICIkZW50cnkiIHwgc2VkIC1lICdzL15bMC05XSpcOy8vJyAtZSAncy9cOy4qLy8nYAorCQkJaWYgISBncmVwIC1xICR0dHlkZXYgJHtEfSR7c3lzY29uZmRpcn0vc2VjdXJldHR5OyB0aGVuCisJCQkJZWNobyAkdHR5ZGV2ID4+ICR7RH0ke3N5c2NvbmZkaXJ9L3NlY3VyZXR0eQorCQkJZmkKKwkJZG9uZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvdy1zeXNyb290XzQuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTc1NjljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3ctc3lzcm9vdF80LjIuMS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlNoYWRvdyB1dGlscyByZXF1aXJlbWVudHMgZm9yIHVzZXJhZGQuYmJjbGFzcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2dyb3VwX2lkPTMwNTgwIgorU0VDVElPTiA9ICJiYXNlIHV0aWxzIgorTElDRU5TRSA9ICJCU0QgfCBBcnRpc3RpYy0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290O21kNT0yNWUyZjJkZTRkZmM4Zjk2NmFjNWNkZmNlNDVjZDdkNSIKKworREVQRU5EUyA9ICJiYXNlLXBhc3N3ZCIKKworUFIgPSAicjMiCisKKyMgVGhlIHNvbGUgcHVycG9zZSBvZiB0aGlzIHJlY2lwZSBpcyB0byBwcm92aWRlIHRoZSAvZXRjL2xvZ2luLmRlZnMKKyMgZmlsZSBmb3IgdGhlIHRhcmdldCBzeXNyb290IC0gbmVlZGVkIHNvIHRoZSBzaGFkb3ctbmF0aXZlIHV0aWxpdGllcworIyBjYW4gYWRkIGN1c3RvbSB1c2Vycy9ncm91cHMgZm9yIHJlY2lwZXMgdGhhdCB1c2UgaW5oZXJpdCB1c2VyYWRkLgorU1JDX1VSSSA9ICJmaWxlOi8vbG9naW4uZGVmc19zaGFkb3ctc3lzcm9vdCIKKworU1JDX1VSSVttZDVzdW1dID0gImI4NjA4ZDgyOTRhYzg4OTc0ZjI3YjIwZjk5MWMwZTc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYzM2Y1YmI0ZWEwYzg4YzU1ZjM2NDJjOTdmOWQyNWNiZWY3NGY4MmUwYjRjZjhkNTRlN2FkNmY5ZjljYWE3NzgiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9CisJaW5zdGFsbCAtcCAtbSA3NTUgJHtTfS9sb2dpbi5kZWZzX3NoYWRvdy1zeXNyb290ICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKK30KKworc3lzcm9vdF9zdGFnZV9hbGwoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSAke1NZU1JPT1RfREVTVERJUn0KK30KKworIyBkb24ndCBjcmVhdGUgYW55IHBhY2thZ2VzCisjIG90aGVyd2lzZTogZGJ1cy1kZXYgZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdC1kZXYgd2hpY2ggZGVwZW5kcyBvbiBzaGFkb3ctc3lzcm9vdCAKKyMgYW5kIHRoaXMgaGFzIGFub3RoZXIgY29weSBvZiAvZXRjL2xvZ2luLmRlZnMgYWxyZWFkeSBwcm92aWRlZCBieSBzaGFkb3cKK1BBQ0tBR0VTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zaGFkb3cvc2hhZG93LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzEzZmZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3cuaW5jCkBAIC0wLDAgKzEsMTk2IEBACitTVU1NQVJZID0gIlRvb2xzIHRvIGNoYW5nZSBhbmQgYWRtaW5pc3RlciBwYXNzd29yZCBhbmQgZ3JvdXAgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly9wa2ctc2hhZG93LmFsaW90aC5kZWJpYW4ub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2FsaW90aC5kZWJpYW4ub3JnL3RyYWNrZXIvP2dyb3VwX2lkPTMwNTgwIgorU0VDVElPTiA9ICJiYXNlL3V0aWxzIgorTElDRU5TRSA9ICJCU0QgfCBBcnRpc3RpYy0xLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZDgwZmYxYzJiNDA4NDNjZjU3NjhlNTIyOWNmMTZlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGFzc3dkLmM7YmVnaW5saW5lPTg7ZW5kbGluZT0zMDttZDU9ZDgzODg4ZWExNGFlNjE5NTE5ODJkNzcxMjU5NDc2NjEiCisKK0RFUEVORFMgPSAic2hhZG93LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vcGtnLXNoYWRvdy5hbGlvdGguZGViaWFuLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3NoYWRvdy00LjEuMy1kb3RzLWluLXVzZXJuYW1lcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly91c2VybW9kLWZpeC1jb21waWxhdGlvbi1mYWlsdXJlLXdpdGgtc3ViaWRzLWRpc2FibGVkLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1pbnN0YWxsYXRpb24tZmFpbHVyZS13aXRoLXN1Ymlkcy1kaXNhYmxlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLURvLW5vdC1yZWFkLWxvZ2luLmRlZnMtYmVmb3JlLWRvaW5nLWNocm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jaGVja19zaXplX29mX3VpZF90X2FuZF9naWRfdF91c2luZ19BQ19DSEVDS19TSVpFT0YucGF0Y2ggXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2xvZ2luX2RlZnNfcGFtLnNlZCBcCisgICAgICAgICAgIGZpbGU6Ly9zaGFkb3ctdXBkYXRlLXBhbS1jb25mLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtc3lzbG9nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FsbG93LWZvci1zZXR0aW5nLXBhc3N3b3JkLWluLWNsZWFyLXRleHQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29tbW9uaW8uYy1maXgtdW5leHBlY3RlZC1vcGVuLWZhaWx1cmUtaW4tY2hyb290LWVudi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZXJhZGQuYy1jcmVhdGUtcGFyZW50LWRpcmVjdG9yaWVzLXdoZW4tbmVjZXNzYXJ5LnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrID0gIiBcCisgICAgICAgICAgIGZpbGU6Ly9kaXNhYmxlLXN5c2xvZy5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjJiZmFmZTdkNDk2MjY4MmQzMWI1ZWJhNjVkYmE0ZmM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNiMDg5M2QxNDc2NzY2ODY4Y2Q4ODkyMGY0ZjEyMzFjNDc5NTY1MmFhNDA3NTY5ZmFmZjgwMmJjZGEwZjNkNDEiCisKKyMgQWRkaXRpb25hbCBQb2xpY3kgZmlsZXMgZm9yIFBBTQorUEFNX1NSQ19VUkkgPSAiZmlsZTovL3BhbS5kL2NoZm4gXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL2NocGFzc3dkIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9jaHNoIFwKKyAgICAgICAgICAgICAgIGZpbGU6Ly9wYW0uZC9sb2dpbiBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvbmV3dXNlcnMgXAorICAgICAgICAgICAgICAgZmlsZTovL3BhbS5kL3Bhc3N3ZCBcCisgICAgICAgICAgICAgICBmaWxlOi8vcGFtLmQvc3UiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGhvdXQtYXVkaXQgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtbGliY3JhY2sgXAorICAgICAgICAgICAgICAgICAtLXdpdGhvdXQtc2VsaW51eCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1ncm91cC1uYW1lLW1heC1sZW5ndGg9MjQgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1zdWJvcmRpbmF0ZS1pZHM9eWVzIFwKKyAgICAgICAgICAgICAgICAgJHtOU0NET1BUfSIKKworTlNDRE9QVCA9ICIiCitOU0NET1BUX2NsYXNzLW5hdGl2ZSA9ICItLXdpdGhvdXQtbnNjZCIKK05TQ0RPUFRfY2xhc3MtbmF0aXZlc2RrID0gIi0td2l0aG91dC1uc2NkIgorTlNDRE9QVF9saWJjLXVjbGliYyA9ICIgLS13aXRob3V0LW5zY2QiCitOU0NET1BUX2xpYmMtZ2xpYmMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLXNwYXduJywgJy0td2l0aC1uc2NkJywgJy0td2l0aG91dC1uc2NkJywgZCl9IgorICAgICAgICAgIAorUEFNX1BMVUdJTlMgPSAibGlicGFtLXJ1bnRpbWUgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1mYWlsZGVsYXkgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1zZWN1cmV0dHkgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1ub2xvZ2luIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZW52IFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tZ3JvdXAgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1saW1pdHMgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1sYXN0bG9nIFwKKyAgICAgICAgICAgICAgIHBhbS1wbHVnaW4tbW90ZCBcCisgICAgICAgICAgICAgICBwYW0tcGx1Z2luLW1haWwgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1zaGVsbHMgXAorICAgICAgICAgICAgICAgcGFtLXBsdWdpbi1yb290b2siCisKK1BBQ0tBR0VDT05GSUcgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlc2RrID0gIiIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICItLXdpdGgtbGlicGFtLC0td2l0aG91dC1saWJwYW0sbGlicGFtLCR7UEFNX1BMVUdJTlN9IgorUEFDS0FHRUNPTkZJR1thdHRyXSA9ICItLXdpdGgtYXR0ciwtLXdpdGhvdXQtYXR0cixhdHRyIgorUEFDS0FHRUNPTkZJR1thY2xdID0gIi0td2l0aC1hY2wsLS13aXRob3V0LWFjbCxhY2wiCisKK1JERVBFTkRTXyR7UE59ID0gInNoYWRvdy1zZWN1cmV0dHkgXAorICAgICAgICAgICAgICAgICAgYmFzZS1wYXNzd2QgXAorICAgICAgICAgICAgICAgICAgdXRpbC1saW51eC1zdWxvZ2luIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBERVNURElSPSIke0R9IiBzYmluZGlyPSIke2Jhc2Vfc2JpbmRpcn0iIHVzYmluZGlyPSIke3NiaW5kaXJ9IiBpbnN0YWxsCisKKwkjIEluZm8gZGlyIGxpc3RpbmcgaXNuJ3QgaW50ZXJlc3RpbmcgYXQgdGhpcyBwb2ludCBzbyByZW1vdmUgaXQgaWYgaXQgZXhpc3RzLgorCWlmIFsgLWUgIiR7RH0ke2luZm9kaXJ9L2RpciIgXTsgdGhlbgorCQlybSAtZiAke0R9JHtpbmZvZGlyfS9kaXIKKwlmaQorCisJIyBFbmFibGUgQ1JFQVRFX0hPTUUgYnkgZGVmYXVsdC4KKwlzZWQgLWkgJ3MvI0NSRUFURV9IT01FL0NSRUFURV9IT01FL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKworCSMgQXMgd2UgYXJlIG9uIGFuIGVtYmVkZGVkIHN5c3RlbSwgZW5zdXJlIHRoZSB1c2VycyBtYWlsYm94IGlzIGluCisJIyB+LyBub3QgL3Zhci9zcG9vbC9tYWlsIGJ5IGRlZmF1bHQsIGFzIHdobyBrbm93cyB3aGVyZSBvciBob3cgYmlnCisJIyAvdmFyIGlzLiBUaGUgc3lzdGVtIE1EQSB3aWxsIHNldCB0aGlzIGxhdGVyIGFueXdheS4KKwlzZWQgLWkgJ3MvTUFJTF9ESVIvI01BSUxfRElSL2cnICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlzZWQgLWkgJ3MvI01BSUxfRklMRS9NQUlMX0ZJTEUvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBEaXNhYmxlIGNoZWNraW5nIGVtYWlscy4KKwlzZWQgLWkgJ3MvTUFJTF9DSEVDS19FTkFCLyNNQUlMX0NIRUNLX0VOQUIvZycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBDb21tZW50IG91dCBTVV9OQU1FIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggYnVzeWJveAorCSMgU2VlIEJ1ZyM1MzU5IGFuZCBCdWcjNzE3MworCXNlZCAtaSAnczpeU1VfTkFNRTojU1VfTkFNRTpnJyAke0R9JHtzeXNjb25mZGlyfS9sb2dpbi5kZWZzCisKKwkjIFVzZSBwcm9wZXIgZW5jcnlwdGlvbiBmb3IgcGFzc3dvcmRzCisJc2VkIC1pICdzL14jRU5DUllQVF9NRVRIT0QuKiQvRU5DUllQVF9NRVRIT0QgU0hBNTEyLycgJHtEfSR7c3lzY29uZmRpcn0vbG9naW4uZGVmcworCisJIyBOb3cgd2UgZG9uJ3QgaGF2ZSBhIG1haWwgc3lzdGVtLiBEaXNhYmxlIG1haWwgY3JlYXRpb24gZm9yIG5vdy4KKwlzZWQgLWkgJ3M6L2Jpbi9iYXNoOi9iaW4vc2g6ZycgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCisJc2VkIC1pICcvXkNSRUFURV9NQUlMX1NQT09MLyBzOl46IzonICR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQvdXNlcmFkZAorCisJIyBVc2UgdXNlcnMgZ3JvdXAgYnkgZGVmYXVsdAorCXNlZCAtaSAncyxeR1JPVVA9MTAwMCxHUk9VUD0xMDAsZycgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC91c2VyYWRkCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgRW5zdXJlIHRoYXQgdGhlIGltYWdlIGhhcyBhcyBhIC92YXIvc3Bvb2wvbWFpbCBkaXIgc28gc2hhZG93IGNhbgorCSMgcHV0IG1haWxib3hlcyB0aGVyZSBpZiB0aGUgdXNlciByZWNvbmZpZ3VyZXMgc2hhZG93IHRvIGl0cworCSMgZGVmYXVsdHMgKHNlZSBzZWQgYmVsb3cpLgorCWluc3RhbGwgLWQgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vc3Bvb2wvbWFpbAorCisJaWYgWyAtZSAke1dPUktESVJ9L3BhbS5kIF07IHRoZW4KKwkJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwkJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vcGFtLmQvKiAke0R9JHtzeXNjb25mZGlyfS9wYW0uZC8KKwkJIyBSZW1vdmUgZGVmYXVsdHMgdGhhdCBhcmUgbm90IHVzZWQgd2hlbiBzdXBwb3J0aW5nIFBBTS4KKwkJc2VkIC1pIC1mICR7V09SS0RJUn0vbG9naW5fZGVmc19wYW0uc2VkICR7RH0ke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMKKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfSAke0R9JHtiYXNlX3NiaW5kaXJ9ICR7RH0ke2Jhc2VfYmluZGlyfSAKKworCSMgTW92ZSBiaW5hcmllcyB0byB0aGUgbG9jYXRpb25zIHdlIHdhbnQKKwlybSAke0R9JHtzYmluZGlyfS92aWdyCisJbG4gLXNmIHZpcHcuJHtCUE59ICR7RH0ke2Jhc2Vfc2JpbmRpcn0vdmlncgorCWlmIFsgIiR7c2JpbmRpcn0iICE9ICIke2Jhc2Vfc2JpbmRpcn0iIF07IHRoZW4KKwkJbXYgJHtEfSR7c2JpbmRpcn0vdmlwdyAke0R9JHtiYXNlX3NiaW5kaXJ9L3ZpcHcKKwlmaQorCWlmIFsgIiR7YmluZGlyfSIgIT0gIiR7YmFzZV9iaW5kaXJ9IiBdOyB0aGVuCisJCW12ICR7RH0ke2JpbmRpcn0vbG9naW4gJHtEfSR7YmFzZV9iaW5kaXJ9L2xvZ2luCisJCW12ICR7RH0ke2JpbmRpcn0vc3UgJHtEfSR7YmFzZV9iaW5kaXJ9L3N1CisJZmkKKworCSMgSGFuZGxlIGxpbmsgcHJvcGVybHkgYWZ0ZXIgcmVuYW1lLCBvdGhlcndpc2UgbWlzc2luZyBmaWxlcyB3b3VsZAorCSMgbGVhZCBycG0gZmFpbGVkIGRlcGVuZGVuY2llcy4KKwlsbiAtc2YgbmV3Z3JwLiR7QlBOfSAke0R9JHtiaW5kaXJ9L3NnCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1iYXNlIgorRklMRVNfJHtQTn0tYmFzZSA9ICJcCisgICAgJHtiYXNlX2JpbmRpcn0vbG9naW4uc2hhZG93IFwKKyAgICAke2Jhc2VfYmluZGlyfS9zdS5zaGFkb3cgXAorICAgICR7YmluZGlyfS9zZyBcCisgICAgJHtiaW5kaXJ9L25ld2dycC5zaGFkb3cgXAorICAgICR7YmluZGlyfS9ncm91cHMuc2hhZG93IFwKKyAgICAke3N5c2NvbmZkaXJ9L3BhbS5kL2xvZ2luIFwKKyAgICAke3N5c2NvbmZkaXJ9L3BhbS5kL3N1IFwKKyAgICAke3N5c2NvbmZkaXJ9L2xvZ2luLmRlZnMgXAorIgorUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LWJhc2UiCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIyMDAiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gInBhc3N3ZCBjaGZuIGNoc2ggY2hwYXNzd2QgdmlwdyB2aWdyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2NocGFzc3dkXSA9ICIke3NiaW5kaXJ9L2NocGFzc3dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3ZpcHddID0gIiR7YmFzZV9zYmluZGlyfS92aXB3IgorQUxURVJOQVRJVkVfTElOS19OQU1FW3ZpZ3JdID0gIiR7YmFzZV9zYmluZGlyfS92aWdyIgorCitBTFRFUk5BVElWRV8ke1BOfS1iYXNlID0gIm5ld2dycCBncm91cHMgbG9naW4gc3UiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbG9naW5dID0gIiR7YmFzZV9iaW5kaXJ9L2xvZ2luIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N1XSA9ICIke2Jhc2VfYmluZGlyfS9zdSIKKworQUxURVJOQVRJVkVfJHtQTn0tZG9jID0gInBhc3N3ZC41IGdldHNwbmFtLjMgZ3JvdXBzLjEiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcGFzc3dkLjVdID0gIiR7bWFuZGlyfS9tYW41L3Bhc3N3ZC41IgorQUxURVJOQVRJVkVfTElOS19OQU1FW2dldHNwbmFtLjNdID0gIiR7bWFuZGlyfS9tYW4zL2dldHNwbmFtLjMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZ3JvdXBzLjFdID0gIiR7bWFuZGlyfS9tYW4xL2dyb3Vwcy4xIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCWlmIFsgIngkRCIgIT0gIngiIF07IHRoZW4KKwkgIHJvb3Rhcmc9Ii0tcm9vdCAkRCIKKwllbHNlCisJICByb290YXJnPSIiCisJZmkKKworCXB3Y29udiAkcm9vdGFyZyB8fCBleGl0IDEKKwlncnBjb252ICRyb290YXJnIHx8IGV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2hhZG93L3NoYWRvd180LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc1Y2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NoYWRvdy9zaGFkb3dfNC4yLjEuYmIKQEAgLTAsMCArMSwxMCBAQAorcmVxdWlyZSBzaGFkb3cuaW5jCisKKyMgQnVpbGQgZmFsc2VseSBhc3N1bWVzIHRoYXQgaWYgLS1lbmFibGUtbGlicGFtIGlzIHNldCwgd2UgZG9uJ3QgbmVlZCB0byBsaW5rIGFnYWluc3QKKyMgbGliY3J5cHQuIFRoaXMgYnJlYWtzIGNoc2guCitCVUlMRF9MREZMQUdTX2FwcGVuZF9jbGFzcy10YXJnZXQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdsaWJjLWNyeXB0JywgICctbGNyeXB0JywgJycsIGQpLCAnJywgZCl9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvMDAwMS1GaXgtZXJyb3ItY29uZmxpY3RpbmctdHlwZXMtZm9yLXBvc2l4X2Nsb3NlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2ViZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitGcm9tIDk2ZWI3ZTI5ODIyMTUxODIzYTY2YTFlYjU5ZjFmYTRhZWFkNWFlMDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAzMSBBdWcgMjAxNSAwNjozMzoyMSArMDAwMAorU3ViamVjdDogW1BBVENIXSBGaXggIGVycm9yOiBjb25mbGljdGluZyB0eXBlcyBmb3IgJ3Bvc2l4X2Nsb3NlJworCitFeHBvc2VkIHdoaWxlIGNvbXBpbGluZyBvbiBtdXNsCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL3NscG9zaW8uYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2xwb3Npby5jIGIvc3JjL3NscG9zaW8uYworaW5kZXggOWNlOTY5Ny4uOWZmOWJmZSAxMDA2NDQKKy0tLSBhL3NyYy9zbHBvc2lvLmMKKysrKyBiL3NyYy9zbHBvc2lvLmMKK0BAIC0zNjMsNyArMzYzLDcgQEAgc3RhdGljIGludCBwb3NpeF9jbG9zZV9mZCAoaW50ICpmZCkKKyAgICByZXR1cm4gMDsKKyB9CisgCistc3RhdGljIGludCBwb3NpeF9jbG9zZSAoU0xGaWxlX0ZEX1R5cGUgKmYpCisrc3RhdGljIGludCBwb3NpeF9jbG9zZXggKFNMRmlsZV9GRF9UeXBlICpmKQorIHsKKyAgICBpbnQgc3RhdHVzID0gZG9fY2xvc2UgKGYpOworIAorQEAgLTEwMDEsNyArMTAwMSw3IEBAIHN0YXRpYyBTTGFuZ19JbnRyaW5fRnVuX1R5cGUgRmRfTmFtZV9UYWJsZSBbXSA9CisgICAgTUFLRV9JTlRSSU5TSUNfMigid3JpdGUiLCBwb3NpeF93cml0ZSwgViwgRiwgQiksCisgICAgTUFLRV9JTlRSSU5TSUNfMSgiZHVwX2ZkIiwgcG9zaXhfZHVwLCBWLCBGKSwKKyAgICBNQUtFX0lOVFJJTlNJQ18yKCJkdXAyX2ZkIiwgcG9zaXhfZHVwMiwgSSwgRiwgSSksCistICAgTUFLRV9JTlRSSU5TSUNfMSgiY2xvc2UiLCBwb3NpeF9jbG9zZSwgSSwgRiksCisrICAgTUFLRV9JTlRSSU5TSUNfMSgiY2xvc2UiLCBwb3NpeF9jbG9zZXgsIEksIEYpLAorICAgIE1BS0VfSU5UUklOU0lDXzEoIl9jbG9zZSIsIHBvc2l4X2Nsb3NlX2ZkLCBJLCBJKSwKKyAjaWYgZGVmaW5lZChUVFlOQU1FX1IpCisgICAgTUFLRV9JTlRSSU5TSUNfMCgidHR5bmFtZSIsIHBvc2l4X3R0eW5hbWUsIFYpLAorLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhMWZmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9jaGFuZ2UtY2hhci10eXBlLXRvLXNpZ25lZC1jaGFyLWluLW1hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDIxOCBAQAorc2xhbmc6IGNoYW5nZSBjaGFyIHR5cGUgdG8gc2lnbmVkIGNoYXIgaW4gbWFjcm9zCisKK0MgbGFuZ3VhZ2UgaGFzIDMgZGlzdGluY3QgY2hhciB0eXBlczoKKyAgICAgICAgIGNoYXIKKyAgICAgICAgIHVuc2lnbmVkIGNoYXIKKyAgICAgICAgIHNpZ25lZCBjaGFyCitBIGNoYXIgaGFzIHRoZSBzYW1lIHJhbmdlIG9mIHZhbHVlcyBhcyBzaWduZWQgY2hhciBvbiBYODYsCitidXQgc2FtZSBhcyB1bnNpZ25lZCBjaGFyIG9uIEFSTSB3aGljaCBtYWRlIFNsYW5nJ3MgdHlwZWNhc3QoKQorYW5kIGFycmF5X3NvcnQoKSB1bmFibGUgdG8gd29yayBmb3IgY2hhciB2YWx1ZSBvbiBBUk0sIHNpbmNlCitTbGFuZyBpcyBhc3N1bWluZyAiY2hhciIgYXMgInNpZ25lZCBjaGFyIi4KKworTm93IHdlIGNoYW5nZSAiY2hhciIgYXMgInNpZ25lZCBjaGFyIiBleHBsaWNpdGx5IGluCit1dGlsL21rc2xhcml0aDIuc2wsIGFuZCB1c2UgaXQgdG8gcmVnZW5lcmF0ZSBzcmMvc2xhcml0aDIuaW5jCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCitTaWduZWQtb2ZmLWJ5OiBSb3kuTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBzcmMvc2xhcml0aDIuaW5jICAgICAgIHwgICA3MiArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCB8ICAgIDIgLQorIDIgZmlsZXMgY2hhbmdlZCwgMzcgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCisKKy0tLSBhL3NyYy91dGlsL21rc2xhcml0aDIuc2wKKysrKyBiL3NyYy91dGlsL21rc2xhcml0aDIuc2wKK0BAIC0xLDcgKzEsNyBAQAorICMhL3Vzci9iaW4vZW52IHNsc2gKKyAKKyBwcml2YXRlIHZhcmlhYmxlIENUeXBlcyA9CistICBbImNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKKysgIFsic2lnbmVkIGNoYXIiLCAidW5zaWduZWQgY2hhciIsICJzaG9ydCIsICJ1bnNpZ25lZCBzaG9ydCIsICJpbnQiLCAidW5zaWduZWQgaW50IiwKKyAgICAibG9uZyIsICJ1bnNpZ25lZCBsb25nIiwgImxvbmcgbG9uZyIsICJ1bnNpZ25lZCBsb25nIGxvbmciLAorICAgICJmbG9hdCIsICJkb3VibGUiLCAibG9uZyBkb3VibGUiXTsKKyBwcml2YXRlIHZhcmlhYmxlIElzX0ludF9UeXBlID0KKy0tLSBhL3NyYy9zbGFyaXRoMi5pbmMKKysrKyBiL3NyYy9zbGFyaXRoMi5pbmMKK0BAIC0xLDQzICsxLDQzIEBACisgLyogRE8gTk9UIEVESVQgLS0gdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgc3JjL3V0aWwvbWtzbGFyaXRoMi5zbCAqLworLS8qIC0tLS0tLS0tLS0tLSBjaGFyIC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfY2hhcl90b19jaGFyLGNoYXIsY2hhcikKKysvKiAtLS0tLS0tLS0tLS0gc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLworK0RFRlVOXzEoY29weV9jaGFyX3RvX2NoYXIsc2lnbmVkIGNoYXIsc2lnbmVkIGNoYXIpCisgI2RlZmluZSBjaGFyX3RvX2NoYXIJTlVMTAorICNkZWZpbmUgY29weV9jaGFyX3RvX3VjaGFyCWNvcHlfY2hhcl90b19jaGFyCisgI2RlZmluZSBjaGFyX3RvX3VjaGFyCU5VTEwKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19zaG9ydCxjaGFyLHNob3J0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX3Nob3J0LHNpZ25lZCBjaGFyLHNob3J0KQorICNkZWZpbmUgY2hhcl90b19zaG9ydAlOVUxMCistREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LGNoYXIsdW5zaWduZWQgc2hvcnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdXNob3J0LHNpZ25lZCBjaGFyLHVuc2lnbmVkIHNob3J0KQorICNkZWZpbmUgY2hhcl90b191c2hvcnQJTlVMTAorLURFRlVOXzEoY29weV9jaGFyX3RvX2ludCxjaGFyLGludCkKKy1ERUZVTl8yKGNoYXJfdG9faW50LGNoYXIsaW50LGNvcHlfY2hhcl90b19pbnQpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCkKKy1ERUZVTl8yKGNoYXJfdG9fdWludCxjaGFyLHVuc2lnbmVkIGludCxjb3B5X2NoYXJfdG9fdWludCkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sb25nLGNoYXIsbG9uZykKKy1ERUZVTl8yKGNoYXJfdG9fbG9uZyxjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsY2hhcix1bnNpZ25lZCBsb25nKQorLURFRlVOXzIoY2hhcl90b191bG9uZyxjaGFyLHVuc2lnbmVkIGxvbmcsY29weV9jaGFyX3RvX3Vsb25nKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQpCisrREVGVU5fMihjaGFyX3RvX2ludCxzaWduZWQgY2hhcixpbnQsY29weV9jaGFyX3RvX2ludCkKKytERUZVTl8xKGNvcHlfY2hhcl90b191aW50LHNpZ25lZCBjaGFyLHVuc2lnbmVkIGludCkKKytERUZVTl8yKGNoYXJfdG9fdWludCxzaWduZWQgY2hhcix1bnNpZ25lZCBpbnQsY29weV9jaGFyX3RvX3VpbnQpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fbG9uZyxzaWduZWQgY2hhcixsb25nKQorK0RFRlVOXzIoY2hhcl90b19sb25nLHNpZ25lZCBjaGFyLGxvbmcsY29weV9jaGFyX3RvX2xvbmcpCisrREVGVU5fMShjb3B5X2NoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZykKKytERUZVTl8yKGNoYXJfdG9fdWxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyxjb3B5X2NoYXJfdG9fdWxvbmcpCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fbGxvbmcsY2hhcixsb25nIGxvbmcpCistREVGVU5fMihjaGFyX3RvX2xsb25nLGNoYXIsbG9uZyBsb25nLGNvcHlfY2hhcl90b19sbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b19sbG9uZyxzaWduZWQgY2hhcixsb25nIGxvbmcpCisrREVGVU5fMihjaGFyX3RvX2xsb25nLHNpZ25lZCBjaGFyLGxvbmcgbG9uZyxjb3B5X2NoYXJfdG9fbGxvbmcpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCistREVGVU5fMShjb3B5X2NoYXJfdG9fdWxsb25nLGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQorLURFRlVOXzIoY2hhcl90b191bGxvbmcsY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY29weV9jaGFyX3RvX3VsbG9uZykKKytERUZVTl8xKGNvcHlfY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nKQorK0RFRlVOXzIoY2hhcl90b191bGxvbmcsc2lnbmVkIGNoYXIsdW5zaWduZWQgbG9uZyBsb25nLGNvcHlfY2hhcl90b191bGxvbmcpCisgI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQpCistREVGVU5fMihjaGFyX3RvX2Zsb2F0LGNoYXIsZmxvYXQsY29weV9jaGFyX3RvX2Zsb2F0KQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2Zsb2F0LHNpZ25lZCBjaGFyLGZsb2F0KQorK0RFRlVOXzIoY2hhcl90b19mbG9hdCxzaWduZWQgY2hhcixmbG9hdCxjb3B5X2NoYXJfdG9fZmxvYXQpCisgI2VuZGlmIC8qIFNMQU5HX0hBU19GTE9BVCAqLworICNpZiBTTEFOR19IQVNfRkxPQVQKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19kb3VibGUsY2hhcixkb3VibGUpCistREVGVU5fMihjaGFyX3RvX2RvdWJsZSxjaGFyLGRvdWJsZSxjb3B5X2NoYXJfdG9fZG91YmxlKQorK0RFRlVOXzEoY29weV9jaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUpCisrREVGVU5fMihjaGFyX3RvX2RvdWJsZSxzaWduZWQgY2hhcixkb3VibGUsY29weV9jaGFyX3RvX2RvdWJsZSkKKyAjZW5kaWYgLyogU0xBTkdfSEFTX0ZMT0FUICovCisgI2lmIGRlZmluZWQoSEFWRV9MT05HX0RPVUJMRSkKKy1ERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLGNoYXIsbG9uZyBkb3VibGUpCistREVGVU5fMihjaGFyX3RvX2xkb3VibGUsY2hhcixsb25nIGRvdWJsZSxjb3B5X2NoYXJfdG9fbGRvdWJsZSkKKytERUZVTl8xKGNvcHlfY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlKQorK0RFRlVOXzIoY2hhcl90b19sZG91YmxlLHNpZ25lZCBjaGFyLGxvbmcgZG91YmxlLGNvcHlfY2hhcl90b19sZG91YmxlKQorICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfTE9OR19ET1VCTEUpICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLVRPX0RPVUJMRV9GVU4oY2hhcl90b19vbmVfZG91YmxlLGNoYXIpCisrVE9fRE9VQkxFX0ZVTihjaGFyX3RvX29uZV9kb3VibGUsc2lnbmVkIGNoYXIpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGNoYXIgLS0tLS0tLS0tLSAqLworQEAgLTgyLDcgKzgyLDcgQEAgVE9fRE9VQkxFX0ZVTih1Y2hhcl90b19vbmVfZG91YmxlLHVuc2lnbgorICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBzaG9ydCAtLS0tLS0tLS0tICovCistREVGVU5fMShjb3B5X3Nob3J0X3RvX2NoYXIsc2hvcnQsY2hhcikKKytERUZVTl8xKGNvcHlfc2hvcnRfdG9fY2hhcixzaG9ydCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIHNob3J0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9zaG9ydF90b191Y2hhcixzaG9ydCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgc2hvcnRfdG9fdWNoYXIJTlVMTAorQEAgLTEyMyw3ICsxMjMsNyBAQCBUT19ET1VCTEVfRlVOKHNob3J0X3RvX29uZV9kb3VibGUsc2hvcnQpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIHNob3J0IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsY2hhcikKKytERUZVTl8xKGNvcHlfdXNob3J0X3RvX2NoYXIsdW5zaWduZWQgc2hvcnQsc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1c2hvcnRfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3VzaG9ydF90b191Y2hhcix1bnNpZ25lZCBzaG9ydCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgdXNob3J0X3RvX3VjaGFyCU5VTEwKK0BAIC0xNjQsNyArMTY0LDcgQEAgVE9fRE9VQkxFX0ZVTih1c2hvcnRfdG9fb25lX2RvdWJsZSx1bnNpZworICNlbmRpZgorIAorIC8qIC0tLS0tLS0tLS0tLSBpbnQgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9pbnRfdG9fY2hhcixpbnQsY2hhcikKKytERUZVTl8xKGNvcHlfaW50X3RvX2NoYXIsaW50LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgaW50X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9pbnRfdG9fdWNoYXIsaW50LHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBpbnRfdG9fdWNoYXIJTlVMTAorQEAgLTIwNSw3ICsyMDUsNyBAQCBUT19ET1VCTEVfRlVOKGludF90b19vbmVfZG91YmxlLGludCkKKyAjZW5kaWYKKyAKKyAvKiAtLS0tLS0tLS0tLS0gdW5zaWduZWQgaW50IC0tLS0tLS0tLS0gKi8KKy1ERUZVTl8xKGNvcHlfdWludF90b19jaGFyLHVuc2lnbmVkIGludCxjaGFyKQorK0RFRlVOXzEoY29weV91aW50X3RvX2NoYXIsdW5zaWduZWQgaW50LHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWludF90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfdWludF90b191Y2hhcix1bnNpZ25lZCBpbnQsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVpbnRfdG9fdWNoYXIJTlVMTAorQEAgLTI0Niw3ICsyNDYsNyBAQCBUT19ET1VCTEVfRlVOKHVpbnRfdG9fb25lX2RvdWJsZSx1bnNpZ25lCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV9sb25nX3RvX2NoYXIsbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X2xvbmdfdG9fdWNoYXIsbG9uZyx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbG9uZ190b191Y2hhcglOVUxMCitAQCAtMjg3LDcgKzI4Nyw3IEBAIFRPX0RPVUJMRV9GVU4obG9uZ190b19vbmVfZG91YmxlLGxvbmcpCisgI2VuZGlmCisgCisgLyogLS0tLS0tLS0tLS0tIHVuc2lnbmVkIGxvbmcgLS0tLS0tLS0tLSAqLworLURFRlVOXzEoY29weV91bG9uZ190b19jaGFyLHVuc2lnbmVkIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfdWxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxvbmdfdG9fY2hhcglOVUxMCisgREVGVU5fMShjb3B5X3Vsb25nX3RvX3VjaGFyLHVuc2lnbmVkIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIHVsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0zMjksNyArMzI5LDcgQEAgVE9fRE9VQkxFX0ZVTih1bG9uZ190b19vbmVfZG91YmxlLHVuc2lnbgorIAorIC8qIC0tLS0tLS0tLS0tLSBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxjaGFyKQorK0RFRlVOXzEoY29weV9sbG9uZ190b19jaGFyLGxvbmcgbG9uZyxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGxsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9sbG9uZ190b191Y2hhcixsb25nIGxvbmcsdW5zaWduZWQgY2hhcikKKyAjZGVmaW5lIGxsb25nX3RvX3VjaGFyCU5VTEwKK0BAIC0zNzIsNyArMzcyLDcgQEAgVE9fRE9VQkxFX0ZVTihsbG9uZ190b19vbmVfZG91YmxlLGxvbmcgbAorIAorIC8qIC0tLS0tLS0tLS0tLSB1bnNpZ25lZCBsb25nIGxvbmcgLS0tLS0tLS0tLSAqLworICNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorLURFRlVOXzEoY29weV91bGxvbmdfdG9fY2hhcix1bnNpZ25lZCBsb25nIGxvbmcsY2hhcikKKytERUZVTl8xKGNvcHlfdWxsb25nX3RvX2NoYXIsdW5zaWduZWQgbG9uZyBsb25nLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgdWxsb25nX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV91bGxvbmdfdG9fdWNoYXIsdW5zaWduZWQgbG9uZyBsb25nLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSB1bGxvbmdfdG9fdWNoYXIJTlVMTAorQEAgLTQxNSw3ICs0MTUsNyBAQCBUT19ET1VCTEVfRlVOKHVsbG9uZ190b19vbmVfZG91YmxlLHVuc2lnCisgCisgLyogLS0tLS0tLS0tLS0tIGZsb2F0IC0tLS0tLS0tLS0gKi8KKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCistREVGVU5fMShjb3B5X2Zsb2F0X3RvX2NoYXIsZmxvYXQsY2hhcikKKytERUZVTl8xKGNvcHlfZmxvYXRfdG9fY2hhcixmbG9hdCxzaWduZWQgY2hhcikKKyAjZGVmaW5lIGZsb2F0X3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9mbG9hdF90b191Y2hhcixmbG9hdCx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgZmxvYXRfdG9fdWNoYXIJTlVMTAorQEAgLTQ1OCw3ICs0NTgsNyBAQCBUT19ET1VCTEVfRlVOKGZsb2F0X3RvX29uZV9kb3VibGUsZmxvYXQpCisgCisgLyogLS0tLS0tLS0tLS0tIGRvdWJsZSAtLS0tLS0tLS0tICovCisgI2lmIFNMQU5HX0hBU19GTE9BVAorLURFRlVOXzEoY29weV9kb3VibGVfdG9fY2hhcixkb3VibGUsY2hhcikKKytERUZVTl8xKGNvcHlfZG91YmxlX3RvX2NoYXIsZG91YmxlLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgZG91YmxlX3RvX2NoYXIJTlVMTAorIERFRlVOXzEoY29weV9kb3VibGVfdG9fdWNoYXIsZG91YmxlLHVuc2lnbmVkIGNoYXIpCisgI2RlZmluZSBkb3VibGVfdG9fdWNoYXIJTlVMTAorQEAgLTUwMSw3ICs1MDEsNyBAQCBUT19ET1VCTEVfRlVOKGRvdWJsZV90b19vbmVfZG91YmxlLGRvdWJsCisgCisgLyogLS0tLS0tLS0tLS0tIGxvbmcgZG91YmxlIC0tLS0tLS0tLS0gKi8KKyAjaWYgZGVmaW5lZChIQVZFX0xPTkdfRE9VQkxFKQorLURFRlVOXzEoY29weV9sZG91YmxlX3RvX2NoYXIsbG9uZyBkb3VibGUsY2hhcikKKytERUZVTl8xKGNvcHlfbGRvdWJsZV90b19jaGFyLGxvbmcgZG91YmxlLHNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGRvdWJsZV90b19jaGFyCU5VTEwKKyBERUZVTl8xKGNvcHlfbGRvdWJsZV90b191Y2hhcixsb25nIGRvdWJsZSx1bnNpZ25lZCBjaGFyKQorICNkZWZpbmUgbGRvdWJsZV90b191Y2hhcglOVUxMCitAQCAtNTQ1LDcgKzU0NSw3IEBAIFRPX0RPVUJMRV9GVU4obGRvdWJsZV90b19vbmVfZG91YmxlLGxvbmcKKyAjaWYgU0xBTkdfSEFTX0ZMT0FUCisgc3RhdGljIFRvX0RvdWJsZV9GdW5fVGFibGVfVHlwZSBUb19Eb3VibGVfRnVuX1RhYmxlIFtNQVhfQVJJVEhNRVRJQ19UWVBFU10gPQorIHsKKy0gICB7c2l6ZW9mKGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAorKyAgIHtzaXplb2Yoc2lnbmVkIGNoYXIpLCBjaGFyX3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2YodW5zaWduZWQgY2hhciksIHVjaGFyX3RvX29uZV9kb3VibGV9LAorICAgIHtzaXplb2Yoc2hvcnQpLCBzaG9ydF90b19vbmVfZG91YmxlfSwKKyAgICB7c2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgdXNob3J0X3RvX29uZV9kb3VibGV9LAorQEAgLTU4Myw3ICs1ODMsNyBAQCBzdGF0aWMgVG9fRG91YmxlX0Z1bl9UYWJsZV9UeXBlIFRvX0RvdWJsCisgCisgc3RhdGljIEJpbmFyeV9NYXRyaXhfVHlwZSBCaW5hcnlfTWF0cml4IFtNQVhfQVJJVEhNRVRJQ19UWVBFU11bTUFYX0FSSVRITUVUSUNfVFlQRVNdID0KKyB7CistICAgLyogY2hhciAqLworKyAgIC8qIHNpZ25lZCBjaGFyICovCisgICAgeworICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b19jaGFyLCBjaGFyX3RvX2NoYXJ9LAorICAgICAgeyhGVk9JRF9TVEFSKWNvcHlfY2hhcl90b191Y2hhciwgY2hhcl90b191Y2hhcn0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvZml4LWNoZWNrLXBjcmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxNTUzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9maXgtY2hlY2stcGNyZS5wYXRjaApAQCAtMCwwICsxLDEwOCBAQAorZml4IHRoZSBwY3JlIGV4aXN0ZW5jZSBjaGVja2luZworCit3aGVuIGNoZWNrIGlmIHRoZXJlIGlzIHBjcmUsIHRoZSBjb25maWd1cmUgZmlsZSBhbHdheXMgY2hlY2sKK3RoZSBob3N0IGRpci4gbm93IHdlIG1ha2UgaXQgd29yayBieSBhZGRpbmcgY29ycmVjdCBwcmVmaXggZm9yCitjcm9zcy1jb21waWxlIGVudmlyb25tZW50LgorCitXaGVuIGVuYWJsZSBwY3JlLW1vZHVsZSwgd2Ugc2VlIGEgUUEgd2FybmluZyBiZWNhdXNlIHJwYXRocworaGFyZGNvZGVkIGludG8gdGhlIGJ1aWxkLCBycGF0aHMgYXJlIG5vdCBuZWVkZWQsIHNvIGxldHMgdHVybgordGhpcyBvZmYuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgICA2MCArKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGVzIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGYxNTg2YzMuLmQyMjgxNGYgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY5OTEsNiArNjk5MSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgCSAvdXNyL2luY2x1ZGUvcGNyZSwvdXNyL2xpYiBcCisgCSAvdXNyL3BjcmUvaW5jbHVkZSwvdXNyL3BjcmUvbGliIFwKKyAJIC91c3IvaW5jbHVkZSwvdXNyL2xpYiBcCisrCSAvdXNyL2luY2x1ZGUsL3Vzci9saWI2NCBcCisgCSAvb3B0L2luY2x1ZGUvcGNyZSwvb3B0L2xpYiBcCisgCSAvb3B0L3BjcmUvaW5jbHVkZSwvb3B0L3BjcmUvbGliIFwKKyAJIC9vcHQvaW5jbHVkZSwvb3B0L2xpYiIKK0BAIC03MDIxLDE0ICs3MDIyLDE0IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgcGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXIgZmlsZXMgLi4uICIgPiY2OyB9CisgICAgICAgICB4aW5jZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDF9J2AKKyAJeGxpYmRpcj1gZWNobyAkaW5jbHVkZV9hbmRfbGliIHwgdHIgJywnICcgJyB8IGF3ayAne3ByaW50ICQyfSdgCisgCWZvdW5kPTAKKy0JaWYgdGVzdCAtciAkeGluY2Rpci8keGluY2ZpbGUKKysJaWYgdGVzdCAtciAkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2Rpci8keGluY2ZpbGUKKyAJdGhlbgorIAkgIGZvciBFIGluICRleHRzCisgCSAgZG8KKy0JICAgIGlmIHRlc3QgLXIgIiR4bGliZGlyLyR4bGliZmlsZS4kRSIKKysJICAgIGlmIHRlc3QgLXIgIiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4bGliZGlyLyR4bGliZmlsZS4kRSIKKyAJICAgIHRoZW4KKy0JICAgICAgamRfcGNyZV9pbmNsdWRlX2Rpcj0iJHhpbmNkaXIiCistCSAgICAgIGpkX3BjcmVfbGlicmFyeV9kaXI9IiR4bGliZGlyIgorKwkgICAgICBqZF9wY3JlX2luY2x1ZGVfZGlyPSIkUEtHX0NPTkZJR19TWVNST09UX0RJUi8keGluY2RpciIKKysJICAgICAgamRfcGNyZV9saWJyYXJ5X2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIiCisgCSAgICAgIGpkX3dpdGhfcGNyZV9saWJyYXJ5PSJ5ZXMiCisgCSAgICAgIGZvdW5kPTEKKyAJICAgICAgYnJlYWsKK0BAIC03MDU0LDU2ICs3MDU1LDcgQEAgJGFzX2VjaG8gInllczogJGpkX3BjcmVfbGlicmFyeV9kaXIgYW5kICRqZF9wY3JlX2luY2x1ZGVfZGlyIiA+JjY7IH0KKyAgICAgdGhlbgorICAgICAgIFBDUkVfTElCPSIiCisgICAgIGVsc2UKKy0KKy1pZiB0ZXN0ICJYJGpkX3BjcmVfbGlicmFyeV9kaXIiICE9ICJYIgorLXRoZW4KKy0gIGlmIHRlc3QgIlgkUlBBVEgiID0gIlgiCistICB0aGVuCistCistY2FzZSAiJGhvc3Rfb3MiIGluCistICAqbGludXgqfCpzb2xhcmlzKiApCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIGlmIHRlc3QgIlgkYWNfUl9ub3NwYWNlIiA9ICJYbm8iCistICAgICAgdGhlbgorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiwiCistICAgICAgZWxzZQorLSAgICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVIgIgorLSAgICAgIGVsc2UKKy0JUlBBVEg9Ii1SIgorLSAgICAgIGZpCistICAgIGZpCistICA7OworLSAgKm9zZip8Km9wZW5ic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1ycGF0aCwiCistICAgIGVsc2UKKy0gICAgICBSUEFUSD0iLXJwYXRoICIKKy0gICAgZmkKKy0gIDs7CistICAqbmV0YnNkKikKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgUlBBVEg9Ii1XbCwtUiIKKy0gICAgZmkKKy0gIDs7CistZXNhYworLQorLSAgICBpZiB0ZXN0ICJYJFJQQVRIIiAhPSAiWCIKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSIkUlBBVEgkamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokamRfcGNyZV9saWJyYXJ5X2RpciIKKy0gIGZpCistZmkKKy0KKysgICAgICBSUEFUSD0iIgorICAgICBmaQorIAorICAgICBQQ1JFX0lOQz0tSSRqZF9wY3JlX2luY2x1ZGVfZGlyCistLSAKKzEuNy40LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3JwYXRoZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwY2FjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvcnBhdGhmaXgucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorV2l0aG91dCB0aGlzIHBhdGNoIHdlIHNlZSBycGF0aHMgaGFyZGNvZGVkIGludG8gdGhlIGJ1aWxkIHdoaWNoIHJlc3VsdHMgaW4gUUEKK3dhcm5pbmdzLiBUaGVzZSBycGF0aHMgYXJlIG5vdCBuZWVkZWQgc28gbGV0cyB0dXJuIHRoaXMgb2ZmLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKyhidXQgY291bGQgYmUgdHVybmVkIGludG8gYSBwcm9wZXIgY29uZmlndXJlIG9wdGlvbikKKworUlAgMjAxMi8wMy8xNAorCitJbmRleDogc2xhbmctMi4yLjQvY29uZmlndXJlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc2xhbmctMi4yLjQub3JpZy9jb25maWd1cmUJMjAxMi0wMy0xNCAyMzo0MDowMS4yODM1NjA2NzkgKzAwMDAKKysrKyBzbGFuZy0yLjIuNC9jb25maWd1cmUJMjAxMi0wMy0xNCAyMzo0MToxOC4wMjM1NTg5MDAgKzAwMDAKK0BAIC02MDgxLDU2ICs2MDgxLDcgQEAKKyBFTEZfQ0ZMQUdTPSIkRUxGX0NGTEFHUyAkSUVFRV9DRkxBR1MiCisgQ0ZMQUdTPSIkQ0ZMQUdTICRJRUVFX0NGTEFHUyIKKyAKKy0KKy1pZiB0ZXN0ICJYJGxpYmRpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRsaWJkaXIiCistICAgIGZpCistICBlbHNlCistICAgIFJQQVRIPSIkUlBBVEg6JGxpYmRpciIKKy0gIGZpCistZmkKKy0KKytSUEFUSD0iIgorIAorICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGZlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmcvc2xhbmctZml4LXRoZS1pY29udi1leGlzdGVuY2UtY2hlY2tpbmcucGF0Y2gKQEAgLTAsMCArMSwxMTYgQEAKK0Zyb20gNDU4OGY0YTAyODc3ODc3ODhlYjg2ZmIxNmYzMjZjYmFhNzQ1NGUxZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorRGF0ZTogTW9uLCAxNiBKdW4gMjAxNCAxMjo1MToyNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBzbGFuZzogZml4IHRoZSBpY29udiBleGlzdGVuY2UgY2hlY2tpbmcKKworV2hlbiBjaGVja2luZyB3aGV0aGVyIHRoZXJlIGlzIGljb252LCB0aGUgY29uZmlndXJlIGZpbGUgYWx3YXlzIGNoZWNrIAordGhlIGhvc3QgZW52LgorCitOb3cgd2UgbWFrZSBpdCB3b3JraW5nIHByb3Blcmx5IGJ5IGFkZGluZyBjb3JyZWN0IHByZWZpeCBmb3IgY3Jvc3MtCitjb21waWxpbmcgZW52aXJvbm1lbnQuCisKK1doZW4gZW5hYmxpbmcgaWNvbnYtbW9kdWxlLCB3ZSBzZWUgYSBRQSB3YXJuaW5nIGJlY2F1c2UgcnBhdGhzIGhhcmRjb2RlZAoraW50byB0aGUgYnVpbGQuIEFuZCBycGF0aHMgYXJlIG5vdCBuZWVkZWQsIHNvIGxldCdzIHR1cm4gdGhpcyBvZmYuCisKK1RoaXMgcGF0Y2ggaXMgZ2VuZXJhdGVkIGJ5IHJlZmVyZW5jaW5nIHRoZSBleGlzdGluZyAiZml4LWNoZWNrLXBjcmUiCitwYXRjaC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFpoZW5nIEp1bmxpbmcgPHpoZW5nanVubGluZ0BodWF3ZWkuY29tPgorLS0tCisgY29uZmlndXJlIHwgNjAgKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgNTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDdhOTYyNTYuLjkxNjMyZjMgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTc5MDksNiArNzkwOSw3IEBAICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0aGUgaWNvbnYgbGlicmFyeSBhbmQgaGVhZGVyIGZpbGVzIC4uLiAiID4mNjsgfQorIAkgL3Vzci9pbmNsdWRlL2ljb252LC91c3IvbGliIFwKKyAJIC91c3IvaWNvbnYvaW5jbHVkZSwvdXNyL2ljb252L2xpYiBcCisgCSAvdXNyL2luY2x1ZGUsL3Vzci9saWIgXAorKwkgL3Vzci9pbmNsdWRlLC91c3IvbGliNjQgXAorIAkgL29wdC9pbmNsdWRlL2ljb252LC9vcHQvbGliIFwKKyAJIC9vcHQvaWNvbnYvaW5jbHVkZSwvb3B0L2ljb252L2xpYiBcCisgCSAvb3B0L2luY2x1ZGUsL29wdC9saWIiCitAQCAtNzkzOSwxNCArNzk0MCwxNCBAQCAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdGhlIGljb252IGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyAuLi4gIiA+JjY7IH0KKyAgICAgICAgIHhpbmNkaXI9YGVjaG8gJGluY2x1ZGVfYW5kX2xpYiB8IHRyICcsJyAnICcgfCBhd2sgJ3twcmludCAkMX0nYAorIAl4bGliZGlyPWBlY2hvICRpbmNsdWRlX2FuZF9saWIgfCB0ciAnLCcgJyAnIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAJZm91bmQ9MAorLQlpZiB0ZXN0IC1yICR4aW5jZGlyLyR4aW5jZmlsZQorKwlpZiB0ZXN0IC1yICRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyLyR4aW5jZmlsZQorIAl0aGVuCisgCSAgZm9yIEUgaW4gJGV4dHMKKyAJICBkbworLQkgICAgaWYgdGVzdCAtciAiJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorKwkgICAgaWYgdGVzdCAtciAiJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIvJHhsaWJmaWxlLiRFIgorIAkgICAgdGhlbgorLQkgICAgICBqZF9pY29udl9pbmNsdWRlX2Rpcj0iJHhpbmNkaXIiCistCSAgICAgIGpkX2ljb252X2xpYnJhcnlfZGlyPSIkeGxpYmRpciIKKysJICAgICAgamRfaWNvbnZfaW5jbHVkZV9kaXI9IiRQS0dfQ09ORklHX1NZU1JPT1RfRElSLyR4aW5jZGlyIgorKwkgICAgICBqZF9pY29udl9saWJyYXJ5X2Rpcj0iJFBLR19DT05GSUdfU1lTUk9PVF9ESVIvJHhsaWJkaXIiCisgCSAgICAgIGpkX3dpdGhfaWNvbnZfbGlicmFyeT0ieWVzIgorIAkgICAgICBmb3VuZD0xCisgCSAgICAgIGJyZWFrCitAQCAtNzk3Miw1NiArNzk3Myw3IEBAICRhc19lY2hvICJ5ZXM6ICRqZF9pY29udl9saWJyYXJ5X2RpciBhbmQgJGpkX2ljb252X2luY2x1ZGVfZGlyIiA+JjY7IH0KKyAgICAgdGhlbgorICAgICAgIElDT05WX0xJQj0iIgorICAgICBlbHNlCistCistaWYgdGVzdCAiWCRqZF9pY29udl9saWJyYXJ5X2RpciIgIT0gIlgiCistdGhlbgorLSAgaWYgdGVzdCAiWCRSUEFUSCIgPSAiWCIKKy0gIHRoZW4KKy0KKy1jYXNlICIkaG9zdF9vcyIgaW4KKy0gICpsaW51eCp8KnNvbGFyaXMqICkKKy0gICAgaWYgdGVzdCAiWCRHQ0MiID0gWHllcworLSAgICB0aGVuCistICAgICAgaWYgdGVzdCAiWCRhY19SX25vc3BhY2UiID0gIlhubyIKKy0gICAgICB0aGVuCistICAgICAgICBSUEFUSD0iLVdsLC1SLCIKKy0gICAgICBlbHNlCistICAgICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICAgIGZpCistICAgIGVsc2UKKy0gICAgICBpZiB0ZXN0ICJYJGFjX1Jfbm9zcGFjZSIgPSAiWG5vIgorLSAgICAgIHRoZW4KKy0gICAgICAgIFJQQVRIPSItUiAiCistICAgICAgZWxzZQorLQlSUEFUSD0iLVIiCistICAgICAgZmkKKy0gICAgZmkKKy0gIDs7CistICAqb3NmKnwqb3BlbmJzZCopCistICAgIGlmIHRlc3QgIlgkR0NDIiA9IFh5ZXMKKy0gICAgdGhlbgorLSAgICAgIFJQQVRIPSItV2wsLXJwYXRoLCIKKy0gICAgZWxzZQorLSAgICAgIFJQQVRIPSItcnBhdGggIgorLSAgICBmaQorLSAgOzsKKy0gICpuZXRic2QqKQorLSAgICBpZiB0ZXN0ICJYJEdDQyIgPSBYeWVzCistICAgIHRoZW4KKy0gICAgICBSUEFUSD0iLVdsLC1SIgorLSAgICBmaQorLSAgOzsKKy1lc2FjCistCistICAgIGlmIHRlc3QgIlgkUlBBVEgiICE9ICJYIgorLSAgICB0aGVuCistICAgICAgUlBBVEg9IiRSUEFUSCRqZF9pY29udl9saWJyYXJ5X2RpciIKKy0gICAgZmkKKy0gIGVsc2UKKy0gICAgUlBBVEg9IiRSUEFUSDokamRfaWNvbnZfbGlicmFyeV9kaXIiCistICBmaQorLWZpCistCisrICAgICAgUlBBVEg9IiIKKyAgICAgZmkKKyAKKyAgICAgSUNPTlZfSU5DPS1JJGpkX2ljb252X2luY2x1ZGVfZGlyCistLSAKKzEuOC4zLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nL3NwcmludGYtYnVnLWNvbmNlcm5pbmctOC1iaXQtY2hhcmFjdGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIwMDAxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zbGFuZy9zbGFuZy9zcHJpbnRmLWJ1Zy1jb25jZXJuaW5nLTgtYml0LWNoYXJhY3RlcnMucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitGcm9tIDNhMDVkMWE5MjAxNDBlOWYyYzcyNzkxYzEyZjY2NDIxM2ZlYjQ2ZGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYW5mcmVkIEhhbmtlIDxNYW5mcmVkLkhhbmtlQHRuZ3RlY2guY29tPgorRGF0ZTogVGh1LCAyMCBKdW4gMjAxMyAxMDoyNDoxMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBzcHJpbnRmIGJ1ZyAoY29uY2VybmluZyAlYyBmb3IgOC1iaXQgY2hhcmFjdGVyIGluIG5vbi1VVEY4CisgbW9kZSkgZml4ZWQKKworY2hhciAqc3RyIHBvaW50cyB0byBTTHVjaGFyX1R5cGUgdXRmOF9idWZbXSwgd2hpY2ggaGFkIHRvbyBzbWFsbCBzY29wZQorCitzcmMvdGVzdC9zdHJvcHMuc2wgZmFpbGVkIGluIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQ6CisgLSBjb21waWxlcjogIGdjYyAoRGViaWFuIDQuNy4yLTUpIDQuNy4yCisgLSBDRkxBR1M6ICAgIC1nIC1PMgorIC0gbGliYzogICAgICBHTlUgQyBMaWJyYXJ5IChEZWJpYW4gRUdMSUJDIDIuMTMtMzgpIHN0YWJsZSByZWxlYXNlIHZlcnNpb24gMi4xMworIC0ga2VybmVsOiAgICAzLjIuMC00LTY4Ni1wYWUgIzEgU01QIERlYmlhbiAzLjIuMzktMiBpNjg2IEdOVS9MaW51eAorLS0tCisgc3JjL3Nsc3Ryb3BzLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvc2xzdHJvcHMuYyBiL3NyYy9zbHN0cm9wcy5jCitpbmRleCBjZTZhY2IwLi5jYmJiYjAxIDEwMDY0NAorLS0tIGEvc3JjL3Nsc3Ryb3BzLmMKKysrKyBiL3NyYy9zbHN0cm9wcy5jCitAQCAtMTg4NCw2ICsxODg0LDcgQEAgc3RhdGljIGNoYXIgKlNMZG9fc3ByaW50ZiAoY2hhciAqZm10KSAvKnt7eyovCisgI2VuZGlmCisgICAgdW5zaWduZWQgY2hhciB1Y2g7CisgICAgaW50IHVzZV9sb25nID0gMCwgdXNlX2FsdF9mb3JtYXQgPSAwOworKyAgIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltTTFVURjhfTUFYX01CTEVOKzFdOworIAorICAgIHdoaWxlICgxKQorICAgICAgeworQEAgLTIwNzEsNyArMjA3Miw2IEBAIHN0YXRpYyBjaGFyICpTTGRvX3NwcmludGYgKGNoYXIgKmZtdCkgLyp7e3sqLworICNlbmRpZgorIAkgICAgICAgeworIAkJICBTTHdjaGFyX1R5cGUgd2M7CistCQkgIFNMdWNoYXJfVHlwZSB1dGY4X2J1ZltTTFVURjhfTUFYX01CTEVOKzFdOworIAorIAkJICBpZiAoLTEgPT0gU0xhbmdfcG9wX3djaGFyICgmd2MpKQorIAkJICAgIHJldHVybiBvdXQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3NsYW5nL3NsYW5nXzIuMi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjJmNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc2xhbmcvc2xhbmdfMi4yLjQuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJUaGUgc2hhcmVkIGxpYnJhcnkgZm9yIHRoZSBTLUxhbmcgZXh0ZW5zaW9uIGxhbmd1YWdlIgorCitERVNDUklQVElPTiA9ICJTLUxhbmcgaXMgYW4gaW50ZXJwcmV0ZWQgbGFuZ3VhZ2UgYW5kIGEgcHJvZ3JhbW1pbmcgbGlicmFyeS4gIFRoZSBcCitTLUxhbmcgbGFuZ3VhZ2Ugd2FzIGRlc2lnbmVkIHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseSBlbWJlZGRlZCBpbnRvIFwKK2EgcHJvZ3JhbSB0byBwcm92aWRlIHRoZSBwcm9ncmFtIHdpdGggYSBwb3dlcmZ1bCBleHRlbnNpb24gbGFuZ3VhZ2UuIFwKK1RoZSBTLUxhbmcgbGlicmFyeSwgcHJvdmlkZWQgaW4gdGhpcyBwYWNrYWdlLCBwcm92aWRlcyB0aGUgUy1MYW5nIFwKK2V4dGVuc2lvbiBsYW5ndWFnZS4gIFMtTGFuZydzIHN5bnRheCByZXNlbWJsZXMgQywgd2hpY2ggbWFrZXMgaXQgZWFzeSBcCit0byByZWNvZGUgUy1MYW5nIHByb2NlZHVyZXMgaW4gQyBpZiB5b3UgbmVlZCB0by4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuamVkc29mdC5vcmcvc2xhbmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJwY3JlIgorUFIgPSAicjEyIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTUyYTE4YTQ3MmQ0ZjdlNDU0NzliMDY1NjM3MTdjMDIiCisKKworU1JDX1VSSSA9ICJmdHA6Ly9zcGFjZS5taXQuZWR1L3B1Yi9kYXZpcy9zbGFuZy92Mi4yL3NsYW5nLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vcnBhdGhmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWNoZWNrLXBjcmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2hhbmdlLWNoYXItdHlwZS10by1zaWduZWQtY2hhci1pbi1tYWNyb3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3ByaW50Zi1idWctY29uY2VybmluZy04LWJpdC1jaGFyYWN0ZXJzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NsYW5nLWZpeC10aGUtaWNvbnYtZXhpc3RlbmNlLWNoZWNraW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWVycm9yLWNvbmZsaWN0aW5nLXR5cGVzLWZvci1wb3NpeF9jbG9zZS5wYXRjaCBcCisgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdmY2ZkNDQ3ZTM3OGYwN2RkMGMwYmFlNjcxZmU2NDg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhODI1N2E5YTJhNTUwOTlhZjg1OGIxMzMzOGRjOGYzYTA2ZGQyMDY5ZjQ2ZjBkZjJjOWMzYmI4NGEwMWQ1ZGIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0td2l0aG91dC16IC0td2l0aG91dC1wbmcgLS13aXRob3V0LW9uaWcgLS14LWluY2x1ZGVzPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2luY2x1ZGUvWDExIC0teC1saWJyYXJpZXM9JHtTVEFHSU5HX0RJUl9IT1NUfS91c3IvbGliIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAjIHNsYW5nIGtlZXBzIGNvbmZpZ3VyZS5hYyBhbmQgcmVzdCBvZiBhdXRvY29uZiBmaWxlcyBpbiBhdXRvY29uZi8gZGlyZWN0b3J5CisgICAgIyB3ZSBoYXZlIHRvIGdvIHRoZXJlIHRvIGJlIGFibGUgdG8gcnVuIGdudS1jb25maWdpemUgY2F1c2UgaXQgZXhwZWN0cyBjb25maWd1cmUue2luLGFjfQorICAgICMgdG8gYmUgcHJlc2VudC4gUmVzdWx0aW5nIGZpbGVzIGxhbmQgaW4gYXV0b2NvbmYvYXV0b2NvbmYvIHNvIHdlIG5lZWQgdG8gbW92ZSB0aGVtLgorICAgIGNkICR7U30vYXV0b2NvbmYgJiYgZ251LWNvbmZpZ2l6ZSAtLWZvcmNlICYmIG12IGF1dG9jb25mL2NvbmZpZy4qIC4KKyAgICBjZCAke0J9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfSAtZSAnSU5TVF9MSUJfRElSPSR7U1RBR0lOR19ESVJfSE9TVH0vdXNyL2xpYicKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vdjIvbW9kdWxlcy8gJHtkYXRhZGlyfS9zbHNoLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS92Mi9tb2R1bGVzLy5kZWJ1ZyIKKworUEFSQUxMRUxfTUFLRSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0YXQvc3RhdC0zLjMvZml4LWVycm9yLXJldHVybi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXQtMy4zL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyOTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXQtMy4zL2ZpeC1lcnJvci1yZXR1cm4ucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorVGhpcyBwYXRjaCBmaXhpZXMgdGhlIHdyb25nIHJldHVybiBjb2RlIG9mIHN0YXQgLWguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogWmhhbmdsZSBZYW5nIDx6aGFuZ2xlLnlhbmdAd2luZHJpdmVyLmNvbT4KKworLS0tIHN0YXQtMy4zL3N0YXQuYy5vcmlnCTIwMTMtMDgtMjIgMTA6NDk6NDUuMDAwMDAwMDAwICswODAwCisrKysgc3RhdC0zLjMvc3RhdC5jCTIwMTMtMDgtMjIgMTA6NTA6MzEuMDAwMDAwMDAwICswODAwCitAQCAtODQ1LDcgKzg0NSw3IEBACisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlUyAtIFNlY3VyaXR5IElEIGluIFNFLUxpbnV4XG4iKTsKKyAgICAgZnByaW50ZihzdGRlcnIsICJcdFx0JSVDIC0gU2VjdXJpdHkgY29udGV4dCBpbiBTRS1MaW51eFxuIik7CisgICAgIGZwcmludGYoc3RkZXJyLCAiXHRcdCUlZCAtIEZyZWUgZmlsZSBub2RlcyBpbiBmaWxlIHN5c3RlbVxuIik7CistICAgIGV4aXQoMSk7CisrICAgIGV4aXQoMCk7CisgfQorICAgCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdGF0L3N0YXRfMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTgzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RhdC9zdGF0XzMuMy5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIkNvbW1hbmQgbGluZSBmaWxlIHN0YXR1cyBkaXNwbGF5IHV0aWxpdHkiCitERVNDUklQVElPTiA9ICJEaXNwbGF5cyBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlIHRoYXQgdGhlIHN0YXQoKSBjYWxsIHByb3ZpZGVzIGFuZCBhbGwgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlc3lzdGVtIHRoYXQgc3RhdGZzKCkgcHJvdmlkZXMuIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVDttZDU9Mzk4ODZiMDc3ZmQwNzJlODc2ZTVjNGMxNjMxMGI2MzEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmliaWJsaW8ub3JnL3B1Yi9MaW51eC91dGlscy9maWxlLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtZXJyb3ItcmV0dXJuLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzdlMjQ3ZThlNDAwYWQ5MjA1ZjFiMDUwMGI3MjhmZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzA3MWYwMzg0YTQyM2E5MzhkZDU0MmMxZjA4NTQ3YTAyODI0ZjYzNTlhY2QzZWYzZjk0NGIyYzRjMmQxZWUwOSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2Jhc2VfYmluZGlyfSAke0R9JHttYW5kaXJ9L21hbjEKKwlpbnN0YWxsIC1tIDc1NSBzdGF0ICR7RH0ke2Jhc2VfYmluZGlyfS9zdGF0LnN0YXQKKwlpbnN0YWxsIC1tIDY0NCBzdGF0LjEgJHtEfSR7bWFuZGlyfS9tYW4xCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJzdGF0IgorQUxURVJOQVRJVkVfUFJJT1JJVFlbc3RhdF0gPSAiMjAwIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXRdID0gIiR7YmFzZV9iaW5kaXJ9L3N0YXQiCitBTFRFUk5BVElWRV9UQVJHRVRbc3RhdF0gPSAiJHtiYXNlX2JpbmRpcn0vc3RhdC5zdGF0IgorCitBTFRFUk5BVElWRV8ke1BOfS1kb2MgPSAic3RhdC4xIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3N0YXQuMV0gPSAiJHttYW5kaXJ9L21hbjEvc3RhdC4xIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9maWxlcy90ZXhpbmZvLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhYzU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL2ZpbGVzL3RleGluZm8ucGF0Y2gKQEAgLTAsMCArMSw3OSBAQAorLS0tIGEvZG9jL3N0cmVzcy50ZXhpCisrKysgYi9kb2Mvc3RyZXNzLnRleGkKK0BAIC02Miw0NyArNjIsNDcgQEAKKyAKKyBAdGFibGUgQHNhbXAKKyBAaXRlbSAtPworLUBpdGVteCAtLWhlbHAKKytAaXRlbSAtLWhlbHAKKyBTaG93IGhlbHAgaW5mb3JtYXRpb24uCisgCistQGl0ZW14IC0tdmVyc2lvbgorK0BpdGVtIC0tdmVyc2lvbgorIFNob3cgdmVyc2lvbiBpbmZvcm1hdGlvbi4KKyAKKyBAaXRlbSAtdgorLUBpdGVteCAtLXZlcmJvc2UKKytAaXRlbSAtLXZlcmJvc2UKKyBUdXJuIHVwIHZlcmJvc2l0eS4KKyAKKyBAaXRlbSAtcQorLUBpdGVteCAtLXF1aWV0CisrQGl0ZW0gLS1xdWlldAorIFR1cm4gZG93biB2ZXJib3NpdHkuCisgCisgQGl0ZW0gLW4KKy1AaXRlbXggLS1kcnktcnVuCisrQGl0ZW0gLS1kcnktcnVuCisgU2hvdyB3aGF0IHdvdWxkIGhhdmUgYmVlbiBkb25lLgorIAorIEBpdGVtIC10IEB2YXJ7c2Vjc30KKy1AaXRlbXggLS10aW1lb3V0IEB2YXJ7c2Vjc30KKytAaXRlbSAtLXRpbWVvdXQgQHZhcntzZWNzfQorIFRpbWUgb3V0IGFmdGVyIEB2YXJ7c2Vjc30gc2Vjb25kcy4KKyAKKy1AaXRlbXggLS1iYWNrb2ZmIEB2YXJ7dXNlY3N9CisrQGl0ZW0gLS1iYWNrb2ZmIEB2YXJ7dXNlY3N9CisgV2FpdCBmb3IgZmFjdG9yIG9mIEB2YXJ7dXNlY3N9IG1pY3Jvc2Vjb25kcyBiZWZvcmUgc3RhcnRpbmcgd29yay4KKyAKKyBAaXRlbSAtYyBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWNwdSBAdmFye2ZvcmtzfQorK0BpdGVtIC0tY3B1IEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7c3FydCgpfS4KKyAKKyBAaXRlbSAtaSBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWlvIEB2YXJ7Zm9ya3N9CisrQGl0ZW0gLS1pbyBAdmFye2ZvcmtzfQorIFNwYXduIEB2YXJ7Zm9ya3N9IHByb2Nlc3NlcyBlYWNoIHNwaW5uaW5nIG9uIEBzYW1we3N5bmMoKX0uCisgCisgQGl0ZW0gLW0gQHZhcntmb3Jrc30KKy1AaXRlbXggLS12bSBAdmFye2ZvcmtzfQorK0BpdGVtIC0tdm0gQHZhcntmb3Jrc30KKyBTcGF3biBAdmFye2ZvcmtzfSBwcm9jZXNzZXMgZWFjaCBzcGlubmluZyBvbiBAc2FtcHttYWxsb2MoKX0uCisgCistQGl0ZW14IC0tdm0tYnl0ZXMgQHZhcntieXRlc30KKytAaXRlbSAtLXZtLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisgQWxsb2NhdGUgQHZhcntieXRlc30gbnVtYmVyIG9mIGJ5dGVzLiAgVGhlIGRlZmF1bHQgaXMgMS4KKyAKKy1AaXRlbXggLS12bS1oYW5nCisrQGl0ZW0gLS12bS1oYW5nCisgSW5zdHJ1Y3QgZWFjaCB2bSBob2cgcHJvY2VzcyB0byBnbyB0byBzbGVlcCBhZnRlciBhbGxvY2F0aW5nIG1lbW9yeS4gIFRoaXMKKyBjb250cmFzdHMgd2l0aCB0aGVpciBub3JtYWwgYmVoYXZpb3IsIHdoaWNoIGlzIHRvIGZyZWUgdGhlIG1lbW9yeSBhbmQKKyByZWFsbG9jYXRlIEBlbXBoe2FkIGluZmluaXR1bX0uICBUaGlzIGlzIHVzZWZ1bCBmb3Igc2ltdWxhdGluZyBsb3cgbWVtb3J5CitAQCAtMTE0LDEzICsxMTQsMTMgQEAKKyBAZW5kIGV4YW1wbGUKKyAKKyBAaXRlbSAtZCBAdmFye2ZvcmtzfQorLUBpdGVteCAtLWhkZCBAdmFye2ZvcmtzfQorK0BpdGVtIC0taGRkIEB2YXJ7Zm9ya3N9CisgU3Bhd24gQHZhcntmb3Jrc30gcHJvY2Vzc2VzIGVhY2ggc3Bpbm5pbmcgb24gQHNhbXB7d3JpdGUoKX0uCisgCistQGl0ZW14IC0taGRkLWJ5dGVzIEB2YXJ7Ynl0ZXN9CisrQGl0ZW0gLS1oZGQtYnl0ZXMgQHZhcntieXRlc30KKyBXcml0ZSBAdmFye2J5dGVzfSBudW1iZXIgb2YgYnl0ZXMuICBUaGUgZGVmYXVsdCBpcyAxR0IuCisgCistQGl0ZW14IC0taGRkLW5vY2xlYW4KKytAaXRlbSAtLWhkZC1ub2NsZWFuCisgRG8gbm90IHVubGluayBmaWxlKHMpIHRvIHdoaWNoIHJhbmRvbSBBU0NJSSBkYXRhIGlzIHdyaXR0ZW4uCisgCisgQGVuZCB0YWJsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3RyZXNzL3N0cmVzc18xLjAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjdlNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N0cmVzcy9zdHJlc3NfMS4wLjQuYmIKQEAgLTAsMCArMSwxNCBAQAorREVTQ1JJUFRJT04gPSAiRGVsaWJlcmF0ZWx5IHNpbXBsZSB3b3JrbG9hZCBnZW5lcmF0b3IgZm9yIFBPU0lYIHN5c3RlbXMuIEl0IFwKK2ltcG9zZXMgYSBjb25maWd1cmFibGUgYW1vdW50IG9mIENQVSwgbWVtb3J5LCBJL08sIGFuZCBkaXNrIHN0cmVzcyBvbiB0aGUgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wZW9wbGUuc2Vhcy5oYXJ2YXJkLmVkdS9+YXB3L3N0cmVzcy8iCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Blb3BsZS5zZWFzLmhhcnZhcmQuZWR1L35hcHcvJHtCUE59LyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly90ZXhpbmZvLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODkwYTQyMzZkZDE2NTY3OTJmM2VmOWExOTBjZjk5ZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDU3ZTRmYzJhNzcwNjQxMWUxMDE0YmYxNzJlNGY5NGI2M2ExMmYxODQxMjM3OGZjYTg2ODRjYTkyNDA4ODI1YiIKKworaW5oZXJpdCBhdXRvdG9vbHMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vZmlsZXMvc3Vkby5wYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjMjZlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL2ZpbGVzL3N1ZG8ucGFtCkBAIC0wLDAgKzEsNiBAQAorIyVQQU0tMS4wCithdXRoICAgICAgIGluY2x1ZGUgICAgICBjb21tb24tYXV0aAorYWNjb3VudCAgICBpbmNsdWRlICAgICAgY29tbW9uLWFjY291bnQKK3Bhc3N3b3JkICAgaW5jbHVkZSAgICAgIGNvbW1vbi1wYXNzd29yZAorc2Vzc2lvbiAgICByZXF1aXJlZCAgICAgcGFtX2tleWluaXQuc28gcmV2b2tlCitzZXNzaW9uICAgIHJlcXVpcmVkICAgICBwYW1fbGltaXRzLnNvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNTg3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLmluYwpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIlByb3ZpZGUgbGltaXRlZCBzdXBlciB1c2VyIHByaXZpbGVnZXMgdG8gc3BlY2lmaWMgdXNlcnMiCitERVNDUklQVElPTiA9ICJTdWRvIChzdXBlcnVzZXIgZG8pIGFsbG93cyBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHRvIGdpdmUgY2VydGFpbiB1c2VycyAob3IgZ3JvdXBzIG9mIHVzZXJzKSB0aGUgYWJpbGl0eSB0byBydW4gc29tZSAob3IgYWxsKSBjb21tYW5kcyBhcyByb290IHdoaWxlIGxvZ2dpbmcgYWxsIGNvbW1hbmRzIGFuZCBhcmd1bWVudHMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zdWRvLndzIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LnN1ZG8ud3MvYnVncy8iCitTRUNUSU9OID0gImFkbWluIgorTElDRU5TRSA9ICJJU0MgJiBCU0QgJiBabGliIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZG9jL0xJQ0VOU0U7bWQ1PWMxNmU1NDI0MDhhYmRhMDEzZDY3MmJlOGViODhkMTc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BsdWdpbnMvc3Vkb2Vycy9yZWRibGFjay5jO2JlZ2lubGluZT0xO2VuZGxpbmU9NDE7bWQ1PWNmZTQxMTEyZjk2YzE5YTA3NDkzNGQxMjhmNDVjNjkzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL3JlYWxsb2NhcnJheS5jO2JlZ2lubGluZT0zO2VuZGxpbmU9MTY7bWQ1PTg1YjA5MDViNzk1ZDRkNThiZjJlMDA2MzU2NDllZWM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYi91dGlsL2ZubWF0Y2guYztiZWdpbmxpbmU9MztlbmRsaW5lPTI3O21kNT02N2Y4M2VlOWJkNDU2NTU3Mzk3MDgyZjhmMWJlMGVmZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9nZXRjd2QuYztiZWdpbmxpbmU9NTtlbmRsaW5lPTI3O21kNT00NDlhZjRjYzU3ZmM3ZDQ2ZjQyMDkwNjA4YmEzZTY4MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9nbG9iLmM7YmVnaW5saW5lPTY7ZW5kbGluZT0zMTttZDU9NTg3MjczMzE0NmI5ZWIwZGViNzllMWY2NjQ4MTViODUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL3V0aWwvc25wcmludGYuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTM0O21kNT1jODJjMWIzYTVjMzJlMDg1NDVjOWVjNWQ3MWU0MWU1MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3N1ZG9fcXVldWUuaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTI3O21kNT00NDlhZjRjYzU3ZmM3ZDQ2ZjQyMDkwNjA4YmEzZTY4MSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWIvdXRpbC9pbmV0X3B0b24uYztiZWdpbmxpbmU9MztlbmRsaW5lPTE3O21kNT0zOTcwYWIwNTE4YWI3OWNiZDBiYWZiNjk3ZjEwYjMzYSIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS1lbmFibGUtemxpYiwtLWRpc2FibGUtemxpYix6bGliIgorCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zdWRvZXJzIgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWVkaXRvcj0vYmluL3ZpIC0td2l0aC1lbnYtZWRpdG9yIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtbXVzbCA9ICIgLS1kaXNhYmxlLWhhcmRlbmluZyAiCisKKyMgbWtzaWduYW1lL21rc2lnbGlzdCBhcmUgdXNlZCBvbiBidWlsZCBob3N0IHRvIGdlbmVyYXRlIHNvdXJjZSBmaWxlcworZG9fY29tcGlsZV9wcmVwZW5kICgpIHsKKwlvZV9ydW5tYWtlIFNTUF9DRkxBR1M9IiIgU1NQX0xERkxBR1M9IiIgQ0M9IiRCVUlMRF9DQyIgQ0ZMQUdTPSIkQlVJTERfQ0ZMQUdTIiBDUFBGTEFHUz0iJEJVSUxEX0NQUEZMQUdTIC1JJHtTfS9pbmNsdWRlIC1JJHtTfSAtSSR7Qn0iICAtQyBsaWIvdXRpbCBta3NpZ25hbWUgbWtzaWdsaXN0Cit9CisKKyMgRXhwbGljaXRseSBjcmVhdGUgJHtsb2NhbHN0YXRlZGlyfS9saWIgYmVmb3JlIGRvX2luc3RhbGwgdG8gZW5zdXJlCisjIHRoZSBkaXJlY3RvcnkgaXMgYWNjZXNzaWJsZSBieSBhbGwgdXNlcnMuIE90aGVyd2lzZSB0aGUgbWtpbnN0YWxsZGlycworIyBzY3JpcHQgKGZyb20gc3Vkbykgd2lsbCByZWN1cnNpdmVseSBjcmVhdGUgJHtsb2NhbHN0YXRlZGlyfS9saWIvc3VkbworIyBhbmQgdGhlbiBjaG1vZCBlYWNoIGRpcmVjdG9yeSB3aXRoIDA3MDAgcGVybWlzc2lvbnMsIHdoaWNoIGlzbid0IHdoYXQKKyMgd2Ugd2FudCAoaS5lLCB1c2VycyB3b3VsZCBub3QgYmUgYWJsZSB0byBhY2Nlc3MgL3Zhci9saWIpLgorZG9faW5zdGFsbF9wcmVwZW5kICgpeworCW1rZGlyIC1wICR7RH0vJHtsb2NhbHN0YXRlZGlyfS9saWIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMzZjZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvLzAwMDEtSW5jbHVkZS1zeXMtdHlwZXMuaC1mb3ItaWRfdC1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK0Zyb20gMzg2ZTJjMmZhMmFiMmUwMmVmNzFjMjY4YTU3MjA1MTM5YmUzMjlhYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDMxIEF1ZyAyMDE1IDA3OjA3OjQ5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEluY2x1ZGUgc3lzL3R5cGVzLmggZm9yIGlkX3QgZGVmaW5pdGlvbgorCisvc3Vkb191dGlsLmg6MjE5OjE0OiBlcnJvcjogdW5rbm93biB0eXBlIG5hbWUgJ2lkX3QnCisgX19kc29fcHVibGljIGlkX3Qgc3Vkb19zdHJ0b2lkX3YxKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc2VwLAorIGNoYXIgKiplbmRwLCBjb25zdCBjaGFyICoqZXJyc3RyKTsKKyAgICAgICAgICAgICAgIF4KKwkgICAgICAgbWFrZVsxXTogKioqIFtwcmVzZXJ2ZV9mZHMub10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGluY2x1ZGUvc3Vkb191dGlsLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdWRvX3V0aWwuaCBiL2luY2x1ZGUvc3Vkb191dGlsLmgKK2luZGV4IDg5YzlmODkuLmFjMDg1NWEgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3N1ZG9fdXRpbC5oCisrKysgYi9pbmNsdWRlL3N1ZG9fdXRpbC5oCitAQCAtMTcsNiArMTcsOCBAQAorICNpZm5kZWYgU1VET19VVElMX0gKKyAjZGVmaW5lIFNVRE9fVVRJTF9ICisgCisrI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKworICNpZmRlZiBIQVZFX1NUREJPT0xfSAorICMgaW5jbHVkZSA8c3RkYm9vbC5oPgorICNlbHNlCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG8vMDAwMS1Vc2UtY29ycmVjdC1wYXRoLXRvLWluaXQuZC1hbmQtdG1wZmlsZXMuZC1maWxlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDE4Njg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N1ZG8vc3Vkby8wMDAxLVVzZS1jb3JyZWN0LXBhdGgtdG8taW5pdC5kLWFuZC10bXBmaWxlcy5kLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK1RoZSBtYWtlZmlsZSB1c2VzIHRvcF9zcmNkaXIgdG8gZmluZCBmaWxlcyB0aGF0IHdlcmUgY3JlYXRlZCBieSBjb25maWd1cmUsIHdoZW4KK2l0IHNob3VsZCB1c2UgdG9wX2J1aWxkZGlyLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cDovL2J1Z3ppbGxhLnN1ZG8ud3Mvc2hvd19idWcuY2dpP2lkPTcwOCkKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLQorIHNyYy9NYWtlZmlsZS5pbiB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuaW4gYi9zcmMvTWFrZWZpbGUuaW4KK2luZGV4IGYwMDllMTAuLjdhY2ZiMmQgMTAwNjQ0CistLS0gYS9zcmMvTWFrZWZpbGUuaW4KKysrKyBiL3NyYy9NYWtlZmlsZS5pbgorQEAgLTE2NSwxMSArMTY1LDExIEBAIGluc3RhbGwtZGlyczoKKyAKKyBpbnN0YWxsLXJjOiBpbnN0YWxsLWRpcnMKKyAJaWYgWyAtbiAiJChJTklUX1NDUklQVCkiIF07IHRoZW4gXAorLQkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA3NTUgJCh0b3Bfc3JjZGlyKS9pbml0LmQvJChJTklUX1NDUklQVCkgJChERVNURElSKSQoSU5JVF9ESVIpL3N1ZG87IFwKKysJICAgICQoSU5TVEFMTCkgJChJTlNUQUxMX09XTkVSKSAtbSAwNzU1ICQodG9wX2J1aWxkZGlyKS9pbml0LmQvJChJTklUX1NDUklQVCkgJChERVNURElSKSQoSU5JVF9ESVIpL3N1ZG87IFwKKyAJICAgIHJtIC1mICQoREVTVERJUikkKFJDX0xJTkspOyBcCisgCSAgICBsbiAtcyAkKElOSVRfRElSKS9zdWRvICQoREVTVERJUikkKFJDX0xJTkspOyBcCisgCWVsaWYgdGVzdCAtbiAiJCh0bXBmaWxlc19kKSI7IHRoZW4gXAorLQkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA2NDQgJCh0b3Bfc3JjZGlyKS9pbml0LmQvc3Vkby5jb25mICQoREVTVERJUikkKHRtcGZpbGVzX2QpL3N1ZG8uY29uZjsgXAorKwkgICAgJChJTlNUQUxMKSAkKElOU1RBTExfT1dORVIpIC1tIDA2NDQgJCh0b3BfYnVpbGRkaXIpL2luaXQuZC9zdWRvLmNvbmYgJChERVNURElSKSQodG1wZmlsZXNfZCkvc3Vkby5jb25mOyBcCisgCWZpCisgCisgaW5zdGFsbC1iaW5hcmllczogaW5zdGFsbC1kaXJzICQoUFJPR1MpCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zdWRvL3N1ZG9fMS44LjE0cDMuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNHAzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiM2NkNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3Vkby9zdWRvXzEuOC4xNHAzLmJiCkBAIC0wLDAgKzEsMzYgQEAKK3JlcXVpcmUgc3Vkby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnRwLnN1ZG8ud3Mvc3Vkby9kaXN0L3N1ZG8tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAnJHtQQU1fU1JDX1VSSX0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWNvcnJlY3QtcGF0aC10by1pbml0LmQtYW5kLXRtcGZpbGVzLmQtZmlsZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLXN5cy10eXBlcy5oLWZvci1pZF90LWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1BBTV9TUkNfVVJJID0gImZpbGU6Ly9zdWRvLnBhbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjkzZGJkMWU0N2MxMzYxNzlmZjFiMDE0OTRjMWMwZTc1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE4YTY5N2NiYjExMzg1OTA1ODk0NDg1MGQwOTg0NjQ2MTgyNTQ4MDRjZjk3OTYxZGVlOTI2NDI5ZjAwYTEyMzciCisKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdsaWJwYW0nLCAnJywgZCl9IgorUkRFUEVORFNfJHtQTn0gKz0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0tcGx1Z2luLWxpbWl0cyBwYW0tcGx1Z2luLWtleWluaXQnLCAnJywgZCl9IgorCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgICAgICAgICAgYWNfY3ZfdHlwZV9yc2l6ZV90PW5vIFwKKyAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICctLXdpdGgtcGFtJywgJy0td2l0aG91dC1wYW0nLCBkKX0gXAorICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICctLWVuYWJsZS10bXBmaWxlcy5kPSR7bGliZGlyfS90bXBmaWxlcy5kJywgJy0tZGlzYWJsZS10bXBmaWxlcy5kJywgZCl9IFwKKyAgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpZiBbICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3BhbScsICdwYW0nLCAnJywgZCl9IiA9ICJwYW0iIF07IHRoZW4KKwkJaW5zdGFsbCAtRCAtbSA2NjQgJHtXT1JLRElSfS9zdWRvLnBhbSAke0R9LyR7c3lzY29uZmRpcn0vcGFtLmQvc3VkbworCWZpCisKKwljaG1vZCA0MTExICR7RH0ke2JpbmRpcn0vc3VkbworCWNobW9kIDA0NDAgJHtEfSR7c3lzY29uZmRpcn0vc3Vkb2VycworCisJIyBFeHBsaWNpdGx5IHJlbW92ZSB0aGUgJHtsb2NhbHN0YXRlZGlyfS9ydW4gZGlyZWN0b3J5IHRvIGF2b2lkIFFBIGVycm9yCisJcm1kaXIgLXAgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfSR7bG9jYWxzdGF0ZWRpcn0vcnVuL3N1ZG8KK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS90bXBmaWxlcy5kIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L2xpYioke1NPTElCU0RFVn0gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tc3RyaXAtaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGZiYTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXN0cmlwLWluc3RhbGwucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogc3lza2xvZ2QtMS41L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3lza2xvZ2QtMS41Lm9yaWcvTWFrZWZpbGUJMjAwOS0wNi0wOSAxMzowMjo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBzeXNrbG9nZC0xLjUvTWFrZWZpbGUJMjAwOS0wNi0wOSAxMzowMzowNi4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjcsOCArMTI3LDggQEAKKyAJcm0gLWYgc3lzbG9nZCBrbG9nZCBrc3ltIHN5c2xvZ190c3Qgb29wc190ZXN0IFRBR1MgdHN5c2xvZ2QgdGtsb2dkCisgCisgaW5zdGFsbF9leGVjOiBzeXNsb2dkIGtsb2dkCistCSR7SU5TVEFMTH0gLW0gNTAwIC1zIHN5c2xvZ2QgJHtCSU5ESVJ9L3N5c2xvZ2QKKy0JJHtJTlNUQUxMfSAtbSA1MDAgLXMga2xvZ2QgJHtCSU5ESVJ9L2tsb2dkCisrCSR7SU5TVEFMTH0gLW0gNTAwIHN5c2xvZ2QgJHtCSU5ESVJ9L3N5c2xvZ2QKKysJJHtJTlNUQUxMfSAtbSA1MDAga2xvZ2QgJHtCSU5ESVJ9L2tsb2dkCisgCisgaW5zdGFsbF9tYW46CisgCSR7SU5TVEFMTH0gLW0gJHtNQU5fUEVSTVN9IHN5c2tsb2dkLjggJHtNQU5ESVJ9L21hbjgvc3lza2xvZ2QuOApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvbm8tdmVjdG9yaXphdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNjMDQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL25vLXZlY3Rvcml6YXRpb24ucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1RoZSBjb21waWxlciBzaG91bGQgbm90IGJlIGdlbmVyYXRpbmcgdmVjdG9yaXplZCBpbnN0cnVjdGlvbnMgb24gdGhpcyB0YXJnZXQuCitUaGlzIGlzIGEgd29yayBhcm91bmQgdW50aWwgSSBjYW4gZGV0ZXJtaW5lIHdoeSB0aGlzIGlzIG9jY3VyaW5nIG9uIHRoaXMKK3BhcnRpY3VsYXIgcmVjaXBlCisKK0luZGV4OiBzeXNrbG9nZC0xLjUvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzeXNrbG9nZC0xLjUub3JpZy9NYWtlZmlsZQorKysrIHN5c2tsb2dkLTEuNS9NYWtlZmlsZQorQEAgLTIwLDcgKzIwLDggQEAKKyBDQz0gZ2NjCisgI1NLRkxBR1M9IC1nIC1EU1lTViAtV2FsbAorICNMREZMQUdTPSAtZworLVNLRkxBR1M9ICQoUlBNX09QVF9GTEFHUykgLU8zIC1EU1lTViAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZQorK1NLRkxBR1M9ICQoUlBNX09QVF9GTEFHUykgLU8zIC1EU1lTViAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtZm5vLXN0cmVuZ3RoLXJlZHVjZSBcCisrCS1mbm8tdHJlZS12ZWN0b3JpemUKKyAjIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLURfTEFSR0VGSUxFX1NPVVJDRQorICMgLURfRklMRV9PRkZTRVRfQklUUz02NCAtRF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyAjICQoc2hlbGwgZ2V0Y29uZiBMRlNfU0tGTEFHUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNrbG9nZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNThmODgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL2ZpbGVzL3N5c2tsb2dkCkBAIC0wLDAgKzEsMTUxIEBACisjISAvYmluL3NoCisjIC9ldGMvaW5pdC5kL3N5c2tsb2dkOiBzdGFydCB0aGUgc3lzdGVtIGxvZyBkYWVtb24uCisKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgICAgIHN5c2tsb2dkCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFJlcXVpcmVkLVN0b3A6ICAgICAgICAkcmVtb3RlX2ZzICR0aW1lCisjIFNob3VsZC1TdGFydDogICAgICAgICAkbmV0d29yaworIyBTaG91bGQtU3RvcDogICAgICAgICAgJG5ldHdvcmsKKyMgRGVmYXVsdC1TdGFydDogICAgICAgIDIgMyA0IDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgICAgIDAgMSA2CisjIFNob3J0LURlc2NyaXB0aW9uOiAgICBTeXN0ZW0gbG9nZ2VyCisjIyMgRU5EIElOSVQgSU5GTworCisjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLiAvZXRjL2luaXQuZC9mdW5jdGlvbnMKKworUEFUSD0vYmluOi91c3IvYmluOi9zYmluOi91c3Ivc2JpbgorCitwaWRmaWxlX3N5c2xvZ2Q9L3Zhci9ydW4vc3lzbG9nZC5waWQKK3BpZGZpbGVfa2xvZ2Q9L3Zhci9ydW4va2xvZ2QucGlkCitiaW5wYXRoX3N5c2xvZ2Q9L3NiaW4vc3lzbG9nZAorYmlucGF0aF9rbG9nZD0vc2Jpbi9rbG9nZAorCit0ZXN0IC14ICRiaW5wYXRoIHx8IGV4aXQgMAorCit0ZXN0ICEgLXIgL2V0Yy9kZWZhdWx0L3N5c2xvZ2QgfHwgLiAvZXRjL2RlZmF1bHQvc3lzbG9nZAorCitjcmVhdGVfeGNvbnNvbGUoKQoreworICAgICMgT25seSBwcm9jZWVkIGlmIC9kZXYveGNvbnNvbGUgaXMgdXNlZCBhdCBhbGwKKyAgICBpZiAhIGdyZXAgLXEgJ15bXiNdLiovZGV2L3hjb25zb2xlJyAvZXRjL3N5c2xvZy5jb25mCisgICAgdGhlbgorCXJldHVybgorICAgIGZpCisKKyAgICBpZiBbICEgLWUgL2Rldi94Y29uc29sZSBdOyB0aGVuCisJbWtub2QgLW0gNjQwIC9kZXYveGNvbnNvbGUgcAorICAgIGVsc2UKKwljaG1vZCAwNjQwIC9kZXYveGNvbnNvbGUKKyAgICBmaQorICAgIGNob3duIHJvb3Q6YWRtIC9kZXYveGNvbnNvbGUKKyAgICB0ZXN0ICEgLXggL3NiaW4vcmVzdG9yZWNvbiB8fCAvc2Jpbi9yZXN0b3JlY29uIC9kZXYveGNvbnNvbGUKK30KKworbG9nX2JlZ2luX21zZyAoKSB7CisgICAgZWNobyAtbiAkMQorfQorCitsb2dfZW5kX21zZyAoKSB7CisgICAgZWNobyAkMQorfQorCitsb2dfc3VjY2Vzc19tc2cgKCkgeworICAgIGVjaG8gJDEKK30KKworcnVubmluZygpCit7CisgICAgIyBObyBwaWRmaWxlLCBwcm9iYWJseSBubyBkYWVtb24gcHJlc2VudAorICAgICMKKyAgICBpZiBbICEgLWYgJHBpZGZpbGUgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBwaWQ9YGNhdCAkcGlkZmlsZV9zeXNsb2dkYAorCisgICAgIyBObyBwaWQsIHByb2JhYmx5IG5vIGRhZW1vbiBwcmVzZW50CisgICAgIworICAgIGlmIFsgLXogIiRwaWQiIF0KKyAgICB0aGVuCisJcmV0dXJuIDEKKyAgICBmaQorCisgICAgaWYgWyAhIC1kIC9wcm9jLyRwaWQgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICBjbWQ9YGNhdCAvcHJvYy8kcGlkL2NtZGxpbmUgfCB0ciAiXDAwMCIgIlxuInxoZWFkIC1uIDFgCisKKyAgICAjIE5vIHN5c2xvZ2Q/CisgICAgIworICAgIGlmIFsgIiRjbWQiICE9ICIkYmlucGF0aCIgXQorICAgIHRoZW4KKwlyZXR1cm4gMQorICAgIGZpCisKKyAgICByZXR1cm4gMAorfQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgbG9nX2JlZ2luX21zZyAiU3RhcnRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgY3JlYXRlX3hjb25zb2xlCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkIC0tc3RhcnRhcyAkYmlucGF0aF9zeXNsb2dkIC0tICRTWVNMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJTdGFydGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkIC0tbmFtZSBrbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfa2xvZ2QgLS0gJEtMT0dECisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICA7OworICBzdG9wKQorICAgIGxvZ19iZWdpbl9tc2cgIlN0b3BwaW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9zeXNsb2dkIC0tbmFtZSBzeXNsb2dkCisgICAgbG9nX2VuZF9tc2cgJD8KKyAgICBsb2dfYmVnaW5fbXNnICJTdG9wcGluZyBrZXJuZWwgbG9nIGRhZW1vbi4uLiIKKyAgICBzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLXJldHJ5IDMgLS1leGVjICRiaW5wYXRoX2tsb2dkIC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVsb2FkfGZvcmNlLXJlbG9hZCkKKyAgICBsb2dfYmVnaW5fbXNnICJSZWxvYWRpbmcgc3lzdGVtIGxvZyBkYWVtb24uLi4iCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdG9wIC0tcXVpZXQgLS1zaWduYWwgMSAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVzdGFydCkKKyAgICBsb2dfYmVnaW5fbXNnICJSZXN0YXJ0aW5nIHN5c3RlbSBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXJldHJ5IDUgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZAorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLXBpZGZpbGUgJHBpZGZpbGVfc3lzbG9nZCAtLW5hbWUgc3lzbG9nZCAtLXN0YXJ0YXMgJGJpbnBhdGhfc3lzbG9nZCAtLSAkU1lTTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgbG9nX2JlZ2luX21zZyAiUmVsb2FkaW5nIGtlcm5lbCBsb2cgZGFlbW9uLi4uIgorICAgIHN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tcmV0cnkgMyAtLWV4ZWMgJGJpbnBhdGhfa2xvZ2QgLS1waWRmaWxlICRwaWRmaWxlX2tsb2dkCisgICAgc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAkcGlkZmlsZV9rbG9nZCAtLW5hbWUga2xvZ2QgLS1zdGFydGFzICRiaW5wYXRoX2tsb2dkIC0tICRLTE9HRAorICAgIGxvZ19lbmRfbXNnICQ/CisgICAgOzsKKyAgcmVsb2FkLW9yLXJlc3RhcnQpCisgICAgaWYgcnVubmluZworICAgIHRoZW4KKwkkMCByZWxvYWQKKyAgICBlbHNlCisJJDAgc3RhcnQKKyAgICBmaQorICAgIDs7CisgIHN0YXR1cykKKyAgICBzdGF0dXMgc3lzbG9nZAorICAgIFJFVFZBTD0kPworICAgIHN0YXR1cyBrbG9nZAorICAgIHJ2YWw9JD8KKyAgICBbICRSRVRWQUwgLWVxIDAgXSAmJiBleGl0ICRydmFsCisgICAgZXhpdCAkUkVUVkFMCisgICAgOzsKKyAgKikKKyAgICBsb2dfc3VjY2Vzc19tc2cgIlVzYWdlOiAvZXRjL2luaXQuZC9zeXNrbG9nZCB7c3RhcnR8c3RvcHxyZWxvYWR8cmVzdGFydHxmb3JjZS1yZWxvYWR8cmVsb2FkLW9yLXJlc3RhcnR8c3RhdHVzfSIKKyAgICBleGl0IDEKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2QvZmlsZXMvc3lzbG9nLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg0OWRlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9maWxlcy9zeXNsb2cuY29uZgpAQCAtMCwwICsxLDcxIEBACisjICAvZXRjL3N5c2xvZy5jb25mCUNvbmZpZ3VyYXRpb24gZmlsZSBmb3Igc3lzbG9nZC4KKyMKKyMgIFBvcnRlZCBmcm9tIGRlYmlhbiBieSBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorIworCisjCisjIEZpcnN0IHNvbWUgc3RhbmRhcmQgbG9nZmlsZXMuICBMb2cgYnkgZmFjaWxpdHkuCisjCisKK2F1dGgsYXV0aHByaXYuKgkJCS92YXIvbG9nL2F1dGgubG9nCisqLio7YXV0aCxhdXRocHJpdi5ub25lCQktL3Zhci9sb2cvc3lzbG9nCisjY3Jvbi4qCQkJCS92YXIvbG9nL2Nyb24ubG9nCitkYWVtb24uKgkJCS0vdmFyL2xvZy9kYWVtb24ubG9nCitrZXJuLioJCQkJLS92YXIvbG9nL2tlcm4ubG9nCitscHIuKgkJCQktL3Zhci9sb2cvbHByLmxvZworbWFpbC4qCQkJCS0vdmFyL2xvZy9tYWlsLmxvZwordXNlci4qCQkJCS0vdmFyL2xvZy91c2VyLmxvZworCisjCisjIExvZ2dpbmcgZm9yIHRoZSBtYWlsIHN5c3RlbS4gIFNwbGl0IGl0IHVwIHNvIHRoYXQKKyMgaXQgaXMgZWFzeSB0byB3cml0ZSBzY3JpcHRzIHRvIHBhcnNlIHRoZXNlIGZpbGVzLgorIworbWFpbC5pbmZvCQkJLS92YXIvbG9nL21haWwuaW5mbworbWFpbC53YXJuCQkJLS92YXIvbG9nL21haWwud2FybgorbWFpbC5lcnIJCQkvdmFyL2xvZy9tYWlsLmVycgorCisjIExvZ2dpbmcgZm9yIElOTiBuZXdzIHN5c3RlbQorIworbmV3cy5jcml0CQkJL3Zhci9sb2cvbmV3cy5jcml0CituZXdzLmVycgkJCS92YXIvbG9nL25ld3MuZXJyCituZXdzLm5vdGljZQkJCS0vdmFyL2xvZy9uZXdzLm5vdGljZQorCisjCisjIFNvbWUgYGNhdGNoLWFsbCcgbG9nZmlsZXMuCisjCisqLj1kZWJ1ZztcCithdXRoLGF1dGhwcml2Lm5vbmU7XAorbmV3cy5ub25lO21haWwubm9uZQktL3Zhci9sb2cvZGVidWcKKworKi49aW5mbzsqLj1ub3RpY2U7Ki49d2FybjtcCithdXRoLGF1dGhwcml2Lm5vbmU7XAorY3JvbixkYWVtb24ubm9uZTtcCittYWlsLG5ld3Mubm9uZQkJLS92YXIvbG9nL21lc3NhZ2VzCisKKyMKKyMgRW1lcmdlbmNpZXMgYXJlIHNlbnQgdG8gZXZlcnlib2R5IGxvZ2dlZCBpbi4KKyMKKyouZW1lcmcJCQkJKgorCisjCisjIEkgbGlrZSB0byBoYXZlIG1lc3NhZ2VzIGRpc3BsYXllZCBvbiB0aGUgY29uc29sZSwgYnV0IG9ubHkgb24gYSB2aXJ0dWFsCisjIGNvbnNvbGUgSSB1c3VhbGx5IGxlYXZlIGlkbGUuCisjCisjZGFlbW9uLG1haWwuKjtcCisjbmV3cy49Y3JpdDtuZXdzLj1lcnI7bmV3cy49bm90aWNlO1wKKyMqLj1kZWJ1ZzsqLj1pbmZvO1wKKyMqLj1ub3RpY2U7Ki49d2FybgkvZGV2L3R0eTgKKworIyBUaGUgbmFtZWQgcGlwZSAvZGV2L3hjb25zb2xlIGlzIGZvciB0aGUgYHhjb25zb2xlJyB1dGlsaXR5LiAgVG8gdXNlIGl0LAorIyB5b3UgbXVzdCBpbnZva2UgYHhjb25zb2xlJyB3aXRoIHRoZSBgLWZpbGUnIG9wdGlvbjoKKyMKKyMgICAgJCB4Y29uc29sZSAtZmlsZSAvZGV2L3hjb25zb2xlIFsuLi5dCisjCisjIE5PVEU6IGFkanVzdCB0aGUgbGlzdCBiZWxvdywgb3IgeW91J2xsIGdvIGNyYXp5IGlmIHlvdSBoYXZlIGEgcmVhc29uYWJseQorIyAgICAgIGJ1c3kgc2l0ZS4uCisjCitkYWVtb24uKjttYWlsLio7XAorbmV3cy5lcnI7XAorKi49ZGVidWc7Ki49aW5mbztcCisqLj1ub3RpY2U7Ki49d2Fybgl8L2Rldi94Y29uc29sZQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lza2xvZ2Qvc3lza2xvZ2QuaW5jIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Y4YWE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkLmluYwpAQCAtMCwwICsxLDU4IEBACitTVU1NQVJZID0gIlN5c3RlbSBMb2cgRGFlbW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoZSBzeXNrbG9nZCBwYWNrYWdlIGltcGxlbWVudHMgdHdvIHN5c3RlbSBsb2cgZGFlbW9uczogc3lzbG9nZCwga2xvZ2QiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmluZm9kcm9tLm9yZy9wcm9qZWN0cy9zeXNrbG9nZC8iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgQlNEIgorTElDRU5TRV9zeXNsb2dkID0gIkJTRCIKK0xJQ0VOU0Vfa2xvZ2QgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGNhNDNjYmM4NDJjMjMzNmU4MzU5MjZjMjE2NmMyOGIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3lzbG9nZC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MTU7bWQ1PTc3ZmZiMmZlYzQ4YzQ2ZDdjYTBhYmIyZDU4MTNlN2ZkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tsb2dkLmM7YmVnaW5saW5lPTI7ZW5kbGluZT0xOTttZDU9N2U4N2VkMGFlNjE0MmRlMDc5YmNlNzM4YzEwYzg5OWQgXAorICAgICAgICAgICAgICAgICAgICIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pbmZvZHJvbS5vcmcvcHJvamVjdHMvc3lza2xvZ2QvZG93bmxvYWQvc3lza2xvZ2QtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vLXN0cmlwLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc3lza2xvZ2QgXAorICAgICAgICAgICBmaWxlOi8vc3lzbG9nLmNvbmYgXAorICAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2U1MDB2MiA9ICIgZmlsZTovL25vLXZlY3Rvcml6YXRpb24ucGF0Y2giCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJzeXNsb2ciCitDT05GRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZi4ke0JQTn0iCisKK0NGTEFHU19hcHBlbmQgPSAiIC1EU1lTViIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjggXAorCQkJJHtEfSR7bWFuZGlyfS9tYW41IFwKKwkJCSR7RH0ke2Jhc2Vfc2JpbmRpcn0KKwlvZV9ydW5tYWtlICdCSU5ESVI9JHtEfSR7YmFzZV9zYmluZGlyfScgXAorCQkJJ01BTkRJUj0ke0R9JHttYW5kaXJ9JyBpbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfQorCWluc3RhbGwgLW0gNjQ0ICR7V09SS0RJUn0vc3lzbG9nLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vc3lzbG9nLmNvbmYKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZAorCWluc3RhbGwgLW0gNzU1ICR7V09SS0RJUn0vc3lza2xvZ2QgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZworfQorCisjIHN5c2tsb2dkIHBhY2thZ2UgaGFzIG5vIGludGVybmFsIHN5c3RlbWQgc3VwcG9ydCwgc28gd2Ugd2VpZ2ggYnVzeWJveCdzCisjIHN5c2tsb2dkIHV0aWxpdHkgb3ZlciBpdCBpbiBjYXNlIG9mIHN5c3RlbWQKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywnMTAnLCcxMDAnLGQpfSIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAic3lzbG9nZCBrbG9nZCBzeXNsb2ctaW5pdCBzeXNsb2ctY29uZiIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW3N5c2xvZ2RdID0gIiR7YmFzZV9zYmluZGlyfS9zeXNsb2dkIgorQUxURVJOQVRJVkVfTElOS19OQU1FW2tsb2dkXSA9ICIke2Jhc2Vfc2JpbmRpcn0va2xvZ2QiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc3lzbG9nLWluaXRdID0gIiR7c3lzY29uZmRpcn0vaW5pdC5kL3N5c2xvZyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtzeXNsb2ctY29uZl0gPSAiJHtzeXNjb25mZGlyfS9zeXNsb2cuY29uZiIKKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlpZiB0ZXN0ICJ4JEQiID0gIngiOyB0aGVuCisJaWYgdGVzdCAiJDEiID0gInVwZ3JhZGUiIC1vICIkMSIgPSAicmVtb3ZlIjsgdGhlbgorCQkvZXRjL2luaXQuZC9zeXNsb2cgc3RvcAorCWZpCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNrbG9nZC9zeXNrbG9nZF8xLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzVlY2MyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c2tsb2dkL3N5c2tsb2dkXzEuNS4xLmJiCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSBzeXNrbG9nZC5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gImM3MDU5OWFiMGQwMzdmZGU3MjRmNzIxMGMyYzhkN2Y4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxNjZjMTg1YWUyM2M5MmU4YjlmZWVlNjZhNmUzZDBiYzk0NGJmNjczMTEyZjUzZTNlY2Y2MmUwOGNlN2MyMDEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNzYxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0LmluYwpAQCAtMCwwICsxLDU1IEBACitTVU1NQVJZID0gIlN5c3RlbSBwZXJmb3JtYW5jZSB0b29scyIKK0RFU0NSSVBUSU9OID0gIlRoZSBzeXNzdGF0IHV0aWxpdGllcyBhcmUgYSBjb2xsZWN0aW9uIG9mIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdG9vbHMgZm9yIExpbnV4LiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWJhc3RpZW4uZ29kYXJkLnBhZ2VzcGVyc28tb3JhbmdlLmZyLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitTUkNfVVJJID0gImh0dHA6Ly9wYWdlc3BlcnNvLW9yYW5nZS5mci9zZWJhc3RpZW4uZ29kYXJkL3N5c3N0YXQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzk5X3N5c3N0YXQgXAorICAgICAgICAgICBmaWxlOi8vc3lzc3RhdC5zZXJ2aWNlIFwKKyAgICAgICAgICAiCisKK0RFUEVORFMgKz0gImJhc2UtcGFzc3dkIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCBzeXN0ZW1kCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNlbnNvcnMiCitFWFRSQV9PRU1BS0UgKz0gJ0xGTEFHUz0iIicKKworU1lTVEVNRF9QQUNLQUdFUyA9ICIke1BOfSIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJzeXNzdGF0LnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImVuYWJsZSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgZXhwb3J0IHNhX2xpYl9kaXI9JHtsaWJkaXJ9L3NhCit9CisKK2RvX2luc3RhbGwoKSB7CisJYXV0b3Rvb2xzX2RvX2luc3RhbGwKKworCSMgZG9uJ3QgaW5zdGFsbCAvdmFyL2xvZy9zYSB3aGVuIHBvcHVsYXRpbmcgcm9vdGZzLiBEbyBpdCB0aHJvdWdoIHZvbGF0aWxlCisKKwlybSAtcmYgJHtEfS92YXIKKwlpbnN0YWxsIC1kICR7RH0vZXRjL2RlZmF1bHQvdm9sYXRpbGVzCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vOTlfc3lzc3RhdCAke0R9L2V0Yy9kZWZhdWx0L3ZvbGF0aWxlcworCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3N5c3N0YXQuc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCXNlZCAtaSAtZSAncyNATElCRElSQCMke2xpYmRpcn0jZycgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vc3lzc3RhdC5zZXJ2aWNlCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgICAgIGlmIFsgLW4gIiREIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZXhpdCAwCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWUgL2V0Yy9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXTsgdGhlbgorICAgICAgICAgICAgICAgIC9ldGMvaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorICAgICAgICBmaQorfQorCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vc2EiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9zYS8uZGVidWcvIgorCitUQVJHRVRfQ0NfQVJDSCArPSAiJHtMREZMQUdTfSIKK0xERkxBR1NfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtbGludGwiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0Lzk5X3N5c3N0YXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIwZWMzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvOTlfc3lzc3RhdApAQCAtMCwwICsxIEBACitkIHJvb3Qgcm9vdCAwNzU1IC92YXIvbG9nL3NhIG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdC9zeXNzdGF0LnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMDcxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC9zeXNzdGF0L3N5c3N0YXQvc3lzc3RhdC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTIgQEAKK1tVbml0XQorRGVzY3JpcHRpb249UmVzZXRzIFN5c3RlbSBBY3Rpdml0eSBMb2dzCisKK1tTZXJ2aWNlXQorVHlwZT1vbmVzaG90CitSZW1haW5BZnRlckV4aXQ9eWVzCitVc2VyPXJvb3QKK0V4ZWNTdGFydD1ATElCRElSQC9zYS9zYTEgLS1ib290CisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvc3lzc3RhdC9zeXNzdGF0XzExLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQyZWMyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3N5c3N0YXQvc3lzc3RhdF8xMS4xLjUuYmIKQEAgLTAsMCArMSw3IEBACityZXF1aXJlIHN5c3N0YXQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGQ4ZTZlNzJkMDU3MTg5YTE2NjA0NjJhNjc4ZDlhZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZmViM2E5MGQ4NmZmZDY5Y2Y1Yjg4MTQ0YTg4NzZhZTA1YmQ0MjM4NGY1NTk2NzZmMDgxMDA2NzE1ODlmYTJiYiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9hdm9pZF9oZWFwX292ZXJmbG93LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMmFlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtidWdmaXg6IGh0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEwLTA2MjRdCisKK1RoaXMgcGF0Y2ggYXZvaWRzIGhlYXAgb3ZlcmZsb3cgcmVwb3J0ZWQgYnkgOgoraHR0cDovL3dlYi5udmQubmlzdC5nb3Yvdmlldy92dWxuL2RldGFpbD92dWxuSWQ9Q1ZFLTIwMTAtMDYyNAorCitUaGlzIGlzIGEgY2xlYW4gcGF0Y2ggZm9yIHRoZSBHUEx2MiB0YXIgcmVjaXBlLgorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzA0LzI1CisKK0luZGV4OiB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjE3Lm9yaWcvbGliL3J0YXBlbGliLmMKKysrKyB0YXItMS4xNy9saWIvcnRhcGVsaWIuYworQEAgLTU3MCw3ICs1NzAsNyBAQCBybXRfcmVhZF9fIChpbnQgaGFuZGxlLCBjaGFyICpidWZmZXIsIHNpCisgCisgICBzcHJpbnRmIChjb21tYW5kX2J1ZmZlciwgIlIlbHVcbiIsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpOworICAgaWYgKGRvX2NvbW1hbmQgKGhhbmRsZSwgY29tbWFuZF9idWZmZXIpID09IC0xCistICAgICAgfHwgKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikKKysgICAgICB8fCAoKHN0YXR1cyA9IGdldF9zdGF0dXMgKGhhbmRsZSkpID09IFNBRkVfUkVBRF9FUlJPUikgfHwgKHN0YXR1cyA+IGxlbmd0aCkpCisgICAgIHJldHVybiBTQUZFX1JFQURfRVJST1I7CisgCisgICBmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgc3RhdHVzOyBjb3VudGVyICs9IHJsZW4sIGJ1ZmZlciArPSBybGVuKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXItMS4xNy9nY2M0M2J1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MDU5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L2djYzQzYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwzNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKKyMgRml4IGVycm9ycyB3aGVuIGJ1aWx0IHdpdGggZ2NjIDQuMworIyBQYXRjaCB0YWtlbiBmcm9tIERlYmlhbiBidWcgIzQ1MjA5NgorCitkaWZmIC11ck4gdGFyLTEuMTcub3JpZy9saWIvYXJncC1mbXRzdHJlYW0uaCB0YXItMS4xNy9saWIvYXJncC1mbXRzdHJlYW0uaAorLS0tIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AtZm10c3RyZWFtLmgJMjAwNi0wMS0xMSAxMjoyNDowNS4wMDAwMDAwMDAgLTA4MDAKKysrKyB0YXItMS4xNy9saWIvYXJncC1mbXRzdHJlYW0uaAkyMDEwLTA3LTIyIDIyOjM2OjEyLjAwMDAwMDAwMCAtMDcwMAorQEAgLTE5OCw3ICsxOTgsMTEgQEAKKyAjZW5kaWYKKyAKKyAjaWZuZGVmIEFSR1BfRlNfRUkKKy0jZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZQorKyAjaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworKyAgICNkZWZpbmUgQVJHUF9GU19FSSBleHRlcm4gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fZ251X2lubGluZV9fKSkKKysgI2Vsc2UKKysgICAjZGVmaW5lIEFSR1BfRlNfRUkgZXh0ZXJuIGlubGluZQorKyAjZW5kaWYKKyAjZW5kaWYKKyAKKyBBUkdQX0ZTX0VJIHNpemVfdAorZGlmZiAtdXJOIHRhci0xLjE3Lm9yaWcvbGliL2FyZ3AuaCB0YXItMS4xNy9saWIvYXJncC5oCistLS0gdGFyLTEuMTcub3JpZy9saWIvYXJncC5oCTIwMDctMDMtMzAgMDA6MDk6MTEuMDAwMDAwMDAwIC0wNzAwCisrKysgdGFyLTEuMTcvbGliL2FyZ3AuaAkyMDEwLTA3LTIyIDIyOjM4OjQ0LjAwMDAwMDAwMCAtMDcwMAorQEAgLTU4MCw3ICs1ODAsMTEgQEAKKyAjIGVuZGlmCisgCisgIyBpZm5kZWYgQVJHUF9FSQorLSMgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fCisrIyAgaWYgZGVmaW5lZCBfX0dOVUNfU1REQ19JTkxJTkVfXworKyMgICAgZGVmaW5lIEFSR1BfRUkgZXh0ZXJuIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19nbnVfaW5saW5lX18pKQorKyMgIGVsc2UKKysjICAgIGRlZmluZSBBUkdQX0VJIGV4dGVybiBfX2lubGluZV9fCisrIyAgZW5kaWYKKyAjIGVuZGlmCisgCisgQVJHUF9FSSB2b2lkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLTEuMTcvbTRleHRlbnNpb25zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNTM0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci0xLjE3L200ZXh0ZW5zaW9ucy5wYXRjaApAQCAtMCwwICsxLDMwIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworIyBEZWZpbmUgQUNfVVNFX1NZU1RFTV9FWFRFTlNJT05TIG9ubHkgaWYgaXQgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkLgorIyBUaGlzIGlzIG5lZWRlZCB0byBjb25maWd1cmUgY29ycmVjdGx5IHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgYXV0b2NvbmYuCisKKy0tLSB0YXItMS4xNy9tNC9leHRlbnNpb25zLm00Lm9yaWcJMjAxMC0wNy0yMiAyMjoyMTozNS4wMDAwMDAwMDAgLTA3MDAKKysrKyB0YXItMS4xNy9tNC9leHRlbnNpb25zLm00CTIwMTAtMDctMjIgMjI6MjM6NDEuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCA0ICAtKi0gQXV0b2NvbmYgLSotCisrIyBzZXJpYWwgNSAgLSotIEF1dG9jb25mIC0qLQorICMgRW5hYmxlIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IG5vcm1hbGx5IGRpc2FibGUgdGhlbS4KKyAKKyAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0BAIC0xNiw2ICsxNiw3IEBACisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIEVuYWJsZSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBub3JtYWxseSBkaXNhYmxlIHRoZW0sCisgIyB0eXBpY2FsbHkgZHVlIHRvIHN0YW5kYXJkcy1jb25mb3JtYW5jZSBpc3N1ZXMuCisrbTRfaWZkZWYoW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sIFtdLCBbCisgQUNfREVGVU4oW0FDX1VTRV9TWVNURU1fRVhURU5TSU9OU10sCisgWworICAgQUNfQkVGT1JFKFskMF0sIFtBQ19DT01QSUxFX0lGRUxTRV0pCitAQCAtNDgsNyArNDksNyBAQAorICAgICBBQ19ERUZJTkUoW19fRVhURU5TSU9OU19fXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorLV0pCisrXSldKQorIAorICMgZ2xfVVNFX1NZU1RFTV9FWFRFTlNJT05TCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzM5YzQzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIuaW5jCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiR05VIGZpbGUgYXJjaGl2aW5nIHByb2dyYW0iCitERVNDUklQVElPTiA9ICJHTlUgdGFyIHNhdmVzIG1hbnkgZmlsZXMgdG9nZXRoZXIgaW50byBhIHNpbmdsZSB0YXBlIFwKK29yIGRpc2sgYXJjaGl2ZSwgYW5kIGNhbiByZXN0b3JlIGluZGl2aWR1YWwgZmlsZXMgZnJvbSB0aGUgYXJjaGl2ZS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGFyLyIKK1NFQ1RJT04gPSAiYmFzZSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3Rhci90YXItJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKK0VYVFJBX09FQ09ORiArPSAiREVGQVVMVF9STVRfRElSPSR7YmFzZV9zYmluZGlyfSIKKworIyBMZXQgYWNsb2NhbCB1c2UgdGhlIHJlbGF0aXZlIHBhdGggZm9yIHRoZSBtNCBmaWxlIHJhdGhlciB0aGFuIHRoZQorIyBhYnNvbHV0ZSBzaW5jZSB0YXIgaGFzIGEgbG90IG9mIG00IGZpbGVzLCBvdGhlcndpc2UgdGhlcmUgbWlnaHQKKyMgYmUgYW4gIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciIGVycm9yIHdoZW4gaXQgaXMgYnVpbHQgaW4gYSBsb25nL2RlZXAKKyMgZGlyZWN0b3J5LgorYWNwYXRocyA9ICItSSAuL200IgorCitkb19pbnN0YWxsICgpIHsKKyAgICBhdXRvdG9vbHNfZG9faW5zdGFsbAorICAgIGxuIC1zIHRhciAke0R9JHtiaW5kaXJ9L2d0YXIKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgbXYgJHtEfSR7YmluZGlyfS90YXIgJHtEfSR7YmFzZV9iaW5kaXJ9L3RhcgorICAgIG12ICR7RH0ke2JpbmRpcn0vZ3RhciAke0R9JHtiYXNlX2JpbmRpcn0vZ3RhcgorICAgIHJtZGlyICR7RH0ke2JpbmRpcn0vCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1ybXQiCisKK0ZJTEVTXyR7UE59LXJtdCA9ICIke2Jhc2Vfc2JpbmRpcn0vcm10KiIKKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidGFyIgorQUxURVJOQVRJVkVfJHtQTn0tcm10ID0gInJtdCIKK0FMVEVSTkFUSVZFXyR7UE59X2NsYXNzLW5hdGl2ZXNkayA9ICIiCitBTFRFUk5BVElWRV8ke1BOfS1ybXRfY2xhc3MtbmF0aXZlc2RrID0gIiIKKworQUxURVJOQVRJVkVfTElOS19OQU1FW3Rhcl0gPSAiJHtiYXNlX2JpbmRpcn0vdGFyIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3JtdF0gPSAiJHtiYXNlX3NiaW5kaXJ9L3JtdCIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGFyLXJlcGxhY2VtZW50LW5hdGl2ZSIKK05BVElWRV9QQUNLQUdFX1BBVEhfU1VGRklYID0gIi8ke1BOfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhci9yZW1vdmUtZ2V0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjhiZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXIvcmVtb3ZlLWdldHMucGF0Y2gKQEAgLTAsMCArMSwyMiBAQAorSVNPIEMxMSByZW1vdmVzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGdldHMoKSBmcm9tIHRoZSBDIGxhbmd1YWdlLCBlZ2xpYmMgMi4xNisgcmVtb3ZlZCBpdAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK0luZGV4OiB0YXItMS4yNy9nbnUvc3RkaW8uaW4uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRhci0xLjI3Lm9yaWcvZ251L3N0ZGlvLmluLmgJMjAxMy0wNi0yOSAwODo1NDoyNi4wMDAwMDAwMDAgKzAzMDAKKysrKyB0YXItMS4yNy9nbnUvc3RkaW8uaW4uaAkyMDEzLTEwLTE2IDE1OjIyOjQ2Ljk3NzIwNDczNyArMDMwMAorQEAgLTcxMCwxMCArNzEwLDEyIEBACisgLyogSXQgaXMgdmVyeSByYXJlIHRoYXQgdGhlIGRldmVsb3BlciBldmVyIGhhcyBmdWxsIGNvbnRyb2wgb2Ygc3RkaW4sCisgICAgc28gYW55IHVzZSBvZiBnZXRzIHdhcnJhbnRzIGFuIHVuY29uZGl0aW9uYWwgd2FybmluZzsgYmVzaWRlcywgQzExCisgICAgcmVtb3ZlZCBpdC4gICovCisrI2lmIGRlZmluZWQgZ2V0cworICN1bmRlZiBnZXRzCisgI2lmIEhBVkVfUkFXX0RFQ0xfR0VUUworIF9HTF9XQVJOX09OX1VTRSAoZ2V0cywgImdldHMgaXMgYSBzZWN1cml0eSBob2xlIC0gdXNlIGZnZXRzIGluc3RlYWQiKTsKKyAjZW5kaWYKKysjZW5kaWYKKyAKKyAKKyAjaWYgQEdOVUxJQl9PQlNUQUNLX1BSSU5URkAgfHwgQEdOVUxJQl9PQlNUQUNLX1BSSU5URl9QT1NJWEAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90YXIvdGFyXzEuMTcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Y2EyMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjE3LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgdGFyLmluYworCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BSID0gInIzIgorCitTUkNfVVJJICs9ICJmaWxlOi8vbTRleHRlbnNpb25zLnBhdGNoIFwKKyAgICBmaWxlOi8vZ2NjNDNidWlsZC5wYXRjaCBcCisgICAgZmlsZTovL2F2b2lkX2hlYXBfb3ZlcmZsb3cucGF0Y2ggXAorICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM2YzRmMWMwNzVkYmYwZjc1YzI5NzM3ZmFhNThmMjkwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjE5ZjkwMjFkZGE1MWExNjI5NWU0NzA2ZTgwODcwZTcxZjg3MTA3Njc1ZTUxYzE3NmE0OTFlYmEwZmM0Y2E0OTIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGFyL3Rhcl8xLjI4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODE2MDAwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3Rhci90YXJfMS4yOC5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHRhci5pbmMKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYWNsXSA9ICItLXdpdGgtcG9zaXgtYWNscywgLS13aXRob3V0LXBvc2l4LWFjbHMsIGFjbCwiCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCIKKworU1JDX1VSSSArPSAiZmlsZTovL3JlbW92ZS1nZXRzLnBhdGNoIFwKKyAgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gIjhmMzJiMmJjMWVkN2RkZjRjZjRlNGEzOTcxMTM0MWIwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYwZTRiZmUwNjAyZmVmMzRjZDkwOGQ5MWNmNjM4ZTE3ZWViMDkzOTRkN2I5OGMyNDg3MjE3ZGM0ZDMxNDc1NjIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wMF9tYW5fcXVvdGluZy5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDY3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDBfbWFuX3F1b3RpbmcuZGlmZgpAQCAtMCwwICsxLDc3IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkxOTk1LTAxLTMwIDE5OjUxOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0wOSAxNjo1OTo0NS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNzMsNyArMTczLDcgQEAKKyBQYXR0ZXJucyBsaWtlIHRoZXNlIGNhbiBiZSB1c2VkIHdoZW4gdGhlIG1hY2hpbmUgaGFzIGRpZmZlcmVudCBpbnRlcm5ldAorIGFkZHJlc3NlcyB3aXRoIGRpZmZlcmVudCBpbnRlcm5ldCBob3N0bmFtZXMuICBTZXJ2aWNlIHByb3ZpZGVycyBjYW4gdXNlCisgdGhpcyBmYWNpbGl0eSB0byBvZmZlciBGVFAsIEdPUEhFUiBvciBXV1cgYXJjaGl2ZXMgd2l0aCBpbnRlcm5ldCBuYW1lcworLXRoYXQgbWF5IGV2ZW4gYmVsb25nIHRvIGRpZmZlcmVudCBvcmdhbml6YXRpb25zLiBTZWUgYWxzbyB0aGUgYHR3aXN0JworK3RoYXQgbWF5IGV2ZW4gYmVsb25nIHRvIGRpZmZlcmVudCBvcmdhbml6YXRpb25zLiBTZWUgYWxzbyB0aGUgYHR3aXN0XCcKKyBvcHRpb24gaW4gdGhlIGhvc3RzX29wdGlvbnMoNSkgZG9jdW1lbnQuIFNvbWUgc3lzdGVtcyAoU29sYXJpcywKKyBGcmVlQlNEKSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGludGVybmV0IGFkZHJlc3Mgb24gb25lIHBoeXNpY2FsCisgaW50ZXJmYWNlOyB3aXRoIG90aGVyIHN5c3RlbXMgeW91IG1heSBoYXZlIHRvIHJlc29ydCB0byBTTElQIG9yIFBQUAorQEAgLTIzNiwxMCArMjM2LDEwIEBACisgQmVmb3JlIGFjY2VwdGluZyBhIGNsaWVudCByZXF1ZXN0LCB0aGUgd3JhcHBlcnMgY2FuIHVzZSB0aGUgSURFTlQKKyBzZXJ2aWNlIHRvIGZpbmQgb3V0IHRoYXQgdGhlIGNsaWVudCBkaWQgbm90IHNlbmQgdGhlIHJlcXVlc3QgYXQgYWxsLgorIFdoZW4gdGhlIGNsaWVudCBob3N0IHByb3ZpZGVzIElERU5UIHNlcnZpY2UsIGEgbmVnYXRpdmUgSURFTlQgbG9va3VwCistcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYFVOS05PV05AaG9zdCcpIGlzIHN0cm9uZyBldmlkZW5jZSBvZiBhIGhvc3QKKytyZXN1bHQgKHRoZSBjbGllbnQgbWF0Y2hlcyBgVU5LTk9XTkBob3N0XCcpIGlzIHN0cm9uZyBldmlkZW5jZSBvZiBhIGhvc3QKKyBzcG9vZmluZyBhdHRhY2suCisgLlBQCistQSBwb3NpdGl2ZSBJREVOVCBsb29rdXAgcmVzdWx0ICh0aGUgY2xpZW50IG1hdGNoZXMgYEtOT1dOQGhvc3QnKSBpcworK0EgcG9zaXRpdmUgSURFTlQgbG9va3VwIHJlc3VsdCAodGhlIGNsaWVudCBtYXRjaGVzIGBLTk9XTkBob3N0XCcpIGlzCisgbGVzcyB0cnVzdHdvcnRoeS4gSXQgaXMgcG9zc2libGUgZm9yIGFuIGludHJ1ZGVyIHRvIHNwb29mIGJvdGggdGhlCisgY2xpZW50IGNvbm5lY3Rpb24gYW5kIHRoZSBJREVOVCBsb29rdXAsIGFsdGhvdWdoIGRvaW5nIHNvIGlzIG11Y2gKKyBoYXJkZXIgdGhhbiBzcG9vZmluZyBqdXN0IGEgY2xpZW50IGNvbm5lY3Rpb24uIEl0IG1heSBhbHNvIGJlIHRoYXQKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfb3B0aW9ucy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNQkxOTk0LTEyLTI4IDE3OjQyOjI5LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfb3B0aW9ucy41CTIwMDQtMDQtMDkgMTY6NTk6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMTI0LDcgKzEyNCw3IEBACisgdmFsdWUgaXMgdGFrZW4uCisgLlNIIE1JU0NFTExBTkVPVVMKKyAuSVAgImJhbm5lcnMgL3NvbWUvZGlyZWN0b3J5IgorLUxvb2sgZm9yIGEgZmlsZSBpbiBgL3NvbWUvZGlyZWN0b3J5JyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRhZW1vbgorK0xvb2sgZm9yIGEgZmlsZSBpbiBgL3NvbWUvZGlyZWN0b3J5XCcgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBkYWVtb24KKyBwcm9jZXNzIChmb3IgZXhhbXBsZSBpbi50ZWxuZXRkIGZvciB0aGUgdGVsbmV0IHNlcnZpY2UpLCBhbmQgY29weSBpdHMKKyBjb250ZW50cyB0byB0aGUgY2xpZW50LiBOZXdsaW5lIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkIGJ5CisgY2FycmlhZ2UtcmV0dXJuIG5ld2xpbmUsIGFuZCAlPGxldHRlcj4gc2VxdWVuY2VzIGFyZSBleHBhbmRlZCAoc2VlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44IHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLjgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLjgJMTk5Ni0wMi0xMSAxNzowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CTIwMDQtMDQtMDkgMTc6MDA6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtMjYsNyArMjYsNyBAQAorIEEgZGFlbW9uIHByb2Nlc3MgbmFtZS4gVHlwaWNhbGx5LCB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBkYWVtb24KKyBleGVjdXRhYmxlIHBhdGhuYW1lLgorIC5JUCBjbGllbnQKKy1BIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd24nIG9yIGBwYXJhbm9pZCcKKytBIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd25cJyBvciBgcGFyYW5vaWRcJworIHdpbGRjYXJkIHBhdHRlcm5zLgorIC5zcAorIFdoZW4gYSBjbGllbnQgaG9zdCBuYW1lIGlzIHNwZWNpZmllZCwgXGZJdGNwZG1hdGNoXGZSIGdpdmVzIGEKK0BAIC0zNywxMyArMzcsMTMgQEAKKyAuUFAKKyBPcHRpb25hbCBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgd2l0aCB0aGUgXGZJZGFlbW9uQHNlcnZlclxmUiBmb3JtOgorIC5JUCBzZXJ2ZXIKKy1BIGhvc3QgbmFtZSBvciBuZXR3b3JrIGFkZHJlc3MsIG9yIG9uZSBvZiB0aGUgYHVua25vd24nIG9yIGBwYXJhbm9pZCcKKy13aWxkY2FyZCBwYXR0ZXJucy4gVGhlIGRlZmF1bHQgc2VydmVyIG5hbWUgaXMgYHVua25vd24nLgorK0EgaG9zdCBuYW1lIG9yIG5ldHdvcmsgYWRkcmVzcywgb3Igb25lIG9mIHRoZSBgdW5rbm93blwnIG9yIGBwYXJhbm9pZFwnCisrd2lsZGNhcmQgcGF0dGVybnMuIFRoZSBkZWZhdWx0IHNlcnZlciBuYW1lIGlzIGB1bmtub3duXCcuCisgLlBQCisgT3B0aW9uYWwgaW5mb3JtYXRpb24gc3BlY2lmaWVkIHdpdGggdGhlIFxmSXVzZXJAY2xpZW50XGZSIGZvcm06CisgLklQIHVzZXIKKyBBIGNsaWVudCB1c2VyIGlkZW50aWZpZXIuIFR5cGljYWxseSwgYSBsb2dpbiBuYW1lIG9yIGEgbnVtZXJpYyB1c2VyaWQuCistVGhlIGRlZmF1bHQgdXNlciBuYW1lIGlzIGB1bmtub3duJy4KKytUaGUgZGVmYXVsdCB1c2VyIG5hbWUgaXMgYHVua25vd25cJy4KKyAuU0ggT1BUSU9OUworIC5JUCAtZAorIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmRlbnlcZlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQKK0BAIC03MCw3ICs3MCw3IEBACisgLnRpICs1CisgdGNwZG1hdGNoIGluLnRlbG5ldGQgcGFyYW5vaWQKKyAuUFAKKy1PbiBzb21lIHN5c3RlbXMsIGRhZW1vbiBuYW1lcyBoYXZlIG5vIGBpbi4nIHByZWZpeCwgb3IgXGZJdGNwZG1hdGNoXGZSCisrT24gc29tZSBzeXN0ZW1zLCBkYWVtb24gbmFtZXMgaGF2ZSBubyBgaW4uXCcgcHJlZml4LCBvciBcZkl0Y3BkbWF0Y2hcZlIKKyBtYXkgbmVlZCBzb21lIGhlbHAgdG8gbG9jYXRlIHRoZSBpbmV0ZCBjb25maWd1cmF0aW9uIGZpbGUuCisgLlNIIEZJTEVTCisgLlBQCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDFfbWFuX3BvcnRhYmlsaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAxX21hbl9wb3J0YWJpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTczNWJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzAxX21hbl9wb3J0YWJpbGl0eS5wYXRjaApAQCAtMCwwICsxLDI1MCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuMyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zCTIwMDUtMDMtMDkgMTg6MzA6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuMwkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTMsNyArMyw3IEBACisgaG9zdHNfYWNjZXNzLCBob3N0c19jdGwsIHJlcXVlc3RfaW5pdCwgcmVxdWVzdF9zZXQgXC0gYWNjZXNzIGNvbnRyb2wgbGlicmFyeQorIC5TSCBTWU5PUFNJUworIC5uZgorLSNpbmNsdWRlICJ0Y3BkLmgiCisrI2luY2x1ZGUgPHRjcGQuaD4KKyAKKyBleHRlcm4gaW50IGFsbG93X3NldmVyaXR5OworIGV4dGVybiBpbnQgZGVueV9zZXZlcml0eTsKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNS0wMy0wOSAxODozMDoyNS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDUtMDMtMDkgMTg6MzA6MTguMDAwMDAwMDAwICswMTAwCitAQCAtOCw5ICs4LDkgQEAgbmFtZSwgaG9zdCBuYW1lL2FkZHJlc3MpIHBhdHRlcm5zLiAgRXhhbQorIGltcGF0aWVudCByZWFkZXIgaXMgZW5jb3VyYWdlZCB0byBza2lwIHRvIHRoZSBFWEFNUExFUyBzZWN0aW9uIGZvciBhCisgcXVpY2sgaW50cm9kdWN0aW9uLgorIC5QUAorLUFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGlzIGRlc2NyaWJlZCBpbiB0aGUKKy1cZklob3N0c19vcHRpb25zXGZSKDUpIGRvY3VtZW50LiBUaGUgZXh0ZW5zaW9ucyBhcmUgdHVybmVkIG9uIGF0CistcHJvZ3JhbSBidWlsZCB0aW1lIGJ5IGJ1aWxkaW5nIHdpdGggLURQUk9DRVNTX09QVElPTlMuCisrVGhlIGV4dGVuZGVkIHZlcnNpb24gb2YgdGhlIGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGlzIGRlc2NyaWJlZCBpbiB0aGUKKytcZklob3N0c19vcHRpb25zXGZSKDUpIGRvY3VtZW50LiBcZkJOb3RlIHRoYXQgdGhpcyBsYW5ndWFnZSBzdXBlcnNlZGVzCisrdGhlIG1lYW5pbmcgb2YgXGZJc2hlbGxfY29tbWFuZFxmQiBhcyBkb2N1bWVudGVkIGJlbG93LlxmUgorIC5QUAorIEluIHRoZSBmb2xsb3dpbmcgdGV4dCwgXGZJZGFlbW9uXGZSIGlzIHRoZSB0aGUgcHJvY2VzcyBuYW1lIG9mIGEKKyBuZXR3b3JrIGRhZW1vbiBwcm9jZXNzLCBhbmQgXGZJY2xpZW50XGZSIGlzIHRoZSBuYW1lIGFuZC9vciBhZGRyZXNzIG9mCitAQCAtMzQ2LDggKzM0Niw4IEBAIGluLnRmdHBkOiBMT0NBTCwgLm15LmRvbWFpbgorIC9ldGMvaG9zdHMuZGVueToKKyAuaW4gKzMKKyAubmYKKy1pbi50ZnRwZDogQUxMOiAoL3NvbWUvd2hlcmUvc2FmZV9maW5nZXIgLWwgQCVoIHwgXFwKKy0JL3Vzci91Y2IvbWFpbCAtcyAlZC0laCByb290KSAmCisraW4udGZ0cGQ6IEFMTDogKC91c3Ivc2Jpbi9zYWZlX2ZpbmdlciAtbCBAJWggfCBcXAorKwkvdXNyL2Jpbi9tYWlsIC1zICVkLSVoIHJvb3QpICYKKyAuZmkKKyAuUFAKKyBUaGUgc2FmZV9maW5nZXIgY29tbWFuZCBjb21lcyB3aXRoIHRoZSB0Y3BkIHdyYXBwZXIgYW5kIHNob3VsZCBiZQorQEAgLTM4Myw2ICszODMsNyBAQCB0aGF0IHNob3VsZG5cJ3QuICBBbGwgcHJvYmxlbXMgYXJlIHJlcG9yCisgLmZpCisgLlNIIFNFRSBBTFNPCisgLm5mCisraG9zdHNfb3B0aW9ucyg1KSBleHRlbmRlZCBzeW50YXguCisgdGNwZCg4KSB0Y3AvaXAgZGFlbW9uIHdyYXBwZXIgcHJvZ3JhbS4KKyB0Y3BkY2hrKDgpLCB0Y3BkbWF0Y2goOCksIHRlc3QgcHJvZ3JhbXMuCisgLlNIIEJVR1MKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX29wdGlvbnMuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19vcHRpb25zLjUJMjAwNS0wMy0wOSAxODozMDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX29wdGlvbnMuNQkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTIsMTAgKzIsOCBAQAorIC5TSCBOQU1FCisgaG9zdHNfb3B0aW9ucyBcLSBob3N0IGFjY2VzcyBjb250cm9sIGxhbmd1YWdlIGV4dGVuc2lvbnMKKyAuU0ggREVTQ1JJUFRJT04KKy1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBkZXNjcmliZWQKKy1pbiB0aGUgaG9zdHNfYWNjZXNzKDUpIGRvY3VtZW50LiBUaGUgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBhdCBwcm9ncmFtCistYnVpbGQgdGltZS4gRm9yIGV4YW1wbGUsIGJ5IGVkaXRpbmcgdGhlIE1ha2VmaWxlIGFuZCB0dXJuaW5nIG9uIHRoZSAKKy1QUk9DRVNTX09QVElPTlMgY29tcGlsZS10aW1lIG9wdGlvbi4KKytUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBleHRlbnNpb25zIHRvIHRoZSBsYW5ndWFnZSBkZXNjcmliZWQKKytpbiB0aGUgaG9zdHNfYWNjZXNzKDUpIGRvY3VtZW50LgorIC5QUAorIFRoZSBleHRlbnNpYmxlIGxhbmd1YWdlIHVzZXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgLnNwCitAQCAtNTgsMTIgKzU2LDEyIEBAIE5vdGljZSB0aGUgbGVhZGluZyBkb3Qgb24gdGhlIGRvbWFpbiBuYW0KKyBFeGVjdXRlLCBpbiBhIGNoaWxkIHByb2Nlc3MsIHRoZSBzcGVjaWZpZWQgc2hlbGwgY29tbWFuZCwgYWZ0ZXIKKyBwZXJmb3JtaW5nIHRoZSAlPGxldHRlcj4gZXhwYW5zaW9ucyBkZXNjcmliZWQgaW4gdGhlIGhvc3RzX2FjY2Vzcyg1KQorIG1hbnVhbCBwYWdlLiAgVGhlIGNvbW1hbmQgaXMgZXhlY3V0ZWQgd2l0aCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIKKy1jb25uZWN0ZWQgdG8gdGhlIG51bGwgZGV2aWNlLCBzbyB0aGF0IGl0IHdvblwndCBtZXNzIHVwIHRoZQorK2Nvbm5lY3RlZCB0byB0aGUgbnVsbCBkZXZpY2UsIHNvIHRoYXQgaXQgd29uJ3QgbWVzcyB1cCB0aGUKKyBjb252ZXJzYXRpb24gd2l0aCB0aGUgY2xpZW50IGhvc3QuIEV4YW1wbGU6CisgLnNwCisgLm5mCisgLnRpICszCistc3Bhd24gKC9zb21lL3doZXJlL3NhZmVfZmluZ2VyIC1sIEAlaCB8IC91c3IvdWNiL21haWwgcm9vdCkgJgorK3NwYXduICgvdXNyL3NiaW4vc2FmZV9maW5nZXIgLWwgQCVoIHwgL3Vzci9iaW4vbWFpbCByb290KSAmCisgLmZpCisgLnNwCisgZXhlY3V0ZXMsIGluIGEgYmFja2dyb3VuZCBjaGlsZCBwcm9jZXNzLCB0aGUgc2hlbGwgY29tbWFuZCAic2FmZV9maW5nZXIKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2luZXRjZi5jIHRjcF93cmFwcGVyc183LjYvaW5ldGNmLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaW5ldGNmLmMJMTk5Ny0wMi0xMiAwMjoxMzoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2luZXRjZi5jCTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMjYsMTMgKzI2LDE3IEBAIGV4dGVybiB2b2lkIGV4aXQoKTsKKyAgICogZ3Vlc3Nlcy4gU2hvcnRlciBuYW1lcyBmb2xsb3cgbG9uZ2VyIG9uZXMuCisgICAqLworIGNoYXIgICAqaW5ldF9maWxlc1tdID0geworKyNpZiAwCisgICAgICIvcHJpdmF0ZS9ldGMvaW5ldGQuY29uZiIsCQkvKiBORVhUICovCisgICAgICIvZXRjL2luZXQvaW5ldGQuY29uZiIsCQkvKiBTWVNWNCAqLworICAgICAiL3Vzci9ldGMvaW5ldGQuY29uZiIsCQkvKiBJUklYPz8gKi8KKysjZW5kaWYKKyAgICAgIi9ldGMvaW5ldGQuY29uZiIsCQkJLyogQlNEICovCisrI2lmIDAKKyAgICAgIi9ldGMvbmV0L3RsaWQuY29uZiIsCQkvKiBTWVNWND8/ICovCisgICAgICIvZXRjL3NhZi90bGlkLmNvbmYiLAkJLyogU1lTVjQ/PyAqLworICAgICAiL2V0Yy90bGlkLmNvbmYiLAkJCS8qIFNZU1Y0Pz8gKi8KKysjZW5kaWYKKyAgICAgMCwKKyB9OworIAorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC44IHRjcF93cmFwcGVyc183LjYvdGNwZC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuOAkxOTk2LTAyLTIxIDE2OjM5OjE2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtMTIsNyArMTIsMTEgQEAgVGhlIHByb2dyYW0gc3VwcG9ydHMgYm90aCA0LjNCU0Qtc3R5bGUgcworIFRMSS4gIEZ1bmN0aW9uYWxpdHkgbWF5IGJlIGxpbWl0ZWQgd2hlbiB0aGUgcHJvdG9jb2wgdW5kZXJuZWF0aCBUTEkgaXMKKyBub3QgYW4gaW50ZXJuZXQgcHJvdG9jb2wuCisgLlBQCistT3BlcmF0aW9uIGlzIGFzIGZvbGxvd3M6IHdoZW5ldmVyIGEgcmVxdWVzdCBmb3Igc2VydmljZSBhcnJpdmVzLCB0aGUKKytUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIG1vZGVzIG9mIG9wZXJhdGlvbjogZXhlY3V0aW9uIG9mIFxmSXRjcGRcZlAKKytiZWZvcmUgYSBzZXJ2aWNlIHN0YXJ0ZWQgYnkgXGZJaW5ldGRcZlAsIG9yIGxpbmtpbmcgYSBkYWVtb24gd2l0aAorK3RoZSBcZklsaWJ3cmFwXGZQIHNoYXJlZCBsaWJyYXJ5IGFzIGRvY3VtZW50ZWQgaW4gdGhlIFxmSWhvc3RzX2FjY2Vzc1xmUigzKQorK21hbnVhbCBwYWdlLiBPcGVyYXRpb24gd2hlbiBzdGFydGVkIGJ5IFxmSWluZXRkXGZQCisraXMgYXMgZm9sbG93czogd2hlbmV2ZXIgYSByZXF1ZXN0IGZvciBzZXJ2aWNlIGFycml2ZXMsIHRoZQorIFxmSWluZXRkXGZQIGRhZW1vbiBpcyB0cmlja2VkIGludG8gcnVubmluZyB0aGUgXGZJdGNwZFxmUCBwcm9ncmFtCisgaW5zdGVhZCBvZiB0aGUgZGVzaXJlZCBzZXJ2ZXIuIFxmSXRjcGRcZlAgbG9ncyB0aGUgcmVxdWVzdCBhbmQgZG9lcworIHNvbWUgYWRkaXRpb25hbCBjaGVja3MuIFdoZW4gYWxsIGlzIHdlbGwsIFxmSXRjcGRcZlAgcnVucyB0aGUKK0BAIC04OCwxMSArOTIsMTEgQEAgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAuc3AKKyAuaW4gKzUKKyAjIG1rZGlyIC9vdGhlci9wbGFjZQorLSMgbXYgL3Vzci9ldGMvaW4uZmluZ2VyZCAvb3RoZXIvcGxhY2UKKy0jIGNwIHRjcGQgL3Vzci9ldGMvaW4uZmluZ2VyZAorKyMgbXYgL3Vzci9zYmluL2luLmZpbmdlcmQgL290aGVyL3BsYWNlCisrIyBjcCB0Y3BkIC91c3Ivc2Jpbi9pbi5maW5nZXJkCisgLmZpCisgLlBQCistVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL2V0Yy4gT24gc29tZQorK1RoZSBleGFtcGxlIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluLiBPbiBzb21lCisgc3lzdGVtcywgbmV0d29yayBkYWVtb25zIGxpdmUgaW4gL3Vzci9zYmluIG9yIGluIC91c3IvbGliZXhlYywgb3IgaGF2ZQorIG5vIGBpbi5cJyBwcmVmaXggdG8gdGhlaXIgbmFtZS4KKyAuU0ggRVhBTVBMRSAyCitAQCAtMTAxLDM1ICsxMDUsMzQgQEAgYXJlIGxlZnQgaW4gdGhlaXIgb3JpZ2luYWwgcGxhY2UuCisgLlBQCisgSW4gb3JkZXIgdG8gbW9uaXRvciBhY2Nlc3MgdG8gdGhlIFxmSWZpbmdlclxmUiBzZXJ2aWNlLCBwZXJmb3JtIHRoZQorIGZvbGxvd2luZyBlZGl0cyBvbiB0aGUgXGZJaW5ldGRcZlIgY29uZmlndXJhdGlvbiBmaWxlICh1c3VhbGx5IAorLVxmSS9ldGMvaW5ldGQuY29uZlxmUiBvciBcZkkvZXRjL2luZXQvaW5ldGQuY29uZlxmUik6CisrXGZJL2V0Yy9pbmV0ZC5jb25mXGZSKToKKyAubmYKKyAuc3AKKyAudGkgKzUKKy1maW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9ldGMvaW4uZmluZ2VyZCAgaW4uZmluZ2VyZAorK2ZpbmdlciAgc3RyZWFtICB0Y3AgIG5vd2FpdCAgbm9ib2R5ICAvdXNyL3NiaW4vaW4uZmluZ2VyZCAgaW4uZmluZ2VyZAorIC5zcAorIGJlY29tZXM6CisgLnNwCisgLnRpICs1CistZmluZ2VyICBzdHJlYW0gIHRjcCAgbm93YWl0ICBub2JvZHkgIC9zb21lL3doZXJlL3RjcGQgICAgIGluLmZpbmdlcmQKKytmaW5nZXIgIHN0cmVhbSAgdGNwICBub3dhaXQgIG5vYm9keSAgL3Vzci9zYmluL3RjcGQgICAgIGluLmZpbmdlcmQKKyAuc3AKKyAuZmkKKyAuUFAKKy1UaGUgZXhhbXBsZSBhc3N1bWVzIHRoYXQgdGhlIG5ldHdvcmsgZGFlbW9ucyBsaXZlIGluIC91c3IvZXRjLiBPbiBzb21lCisrVGhlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHRoZSBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4uIE9uIHNvbWUKKyBzeXN0ZW1zLCBuZXR3b3JrIGRhZW1vbnMgbGl2ZSBpbiAvdXNyL3NiaW4gb3IgaW4gL3Vzci9saWJleGVjLCB0aGUKKyBkYWVtb25zIGhhdmUgbm8gYGluLlwnIHByZWZpeCB0byB0aGVpciBuYW1lLCBvciB0aGVyZSBpcyBubyB1c2VyaWQKKyBmaWVsZCBpbiB0aGUgaW5ldGQgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFNpbWlsYXIgY2hhbmdlcyB3aWxsIGJlIG5lZWRlZCBmb3IgdGhlIG90aGVyIHNlcnZpY2VzIHRoYXQgYXJlIHRvIGJlCisgY292ZXJlZCBieSBcZkl0Y3BkXGZSLiAgU2VuZCBhIGBraWxsIC1IVVBcJyB0byB0aGUgXGZJaW5ldGRcZlIoOCkKKy1wcm9jZXNzIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLiBBSVggdXNlcnMgbWF5IGFsc28gaGF2ZSB0bworLWV4ZWN1dGUgdGhlIGBpbmV0aW1wXCcgY29tbWFuZC4KKytwcm9jZXNzIHRvIG1ha2UgdGhlIGNoYW5nZXMgZWZmZWN0aXZlLgorIC5TSCBFWEFNUExFIDMKKyBJbiB0aGUgY2FzZSBvZiBkYWVtb25zIHRoYXQgZG8gbm90IGxpdmUgaW4gYSBjb21tb24gZGlyZWN0b3J5ICgic2VjcmV0IgorIG9yIG90aGVyd2lzZSksIGVkaXQgdGhlIFxmSWluZXRkXGZSIGNvbmZpZ3VyYXRpb24gZmlsZSBzbyB0aGF0IGl0Cisgc3BlY2lmaWVzIGFuIGFic29sdXRlIHBhdGggbmFtZSBmb3IgdGhlIHByb2Nlc3MgbmFtZSBmaWVsZC4gRm9yIGV4YW1wbGU6CisgLm5mCisgLnNwCistICAgIG50YWxrICBkZ3JhbSAgdWRwICB3YWl0ICByb290ICAvc29tZS93aGVyZS90Y3BkICAvdXNyL2xvY2FsL2xpYi9udGFsa2QKKysgICAgbnRhbGsgIGRncmFtICB1ZHAgIHdhaXQgIHJvb3QgIC91c3Ivc2Jpbi90Y3BkICAvdXNyL2xvY2FsL2xpYi9udGFsa2QKKyAuc3AKKyAuZmkKKyAuUFAKK0BAIC0xNjQsNiArMTY3LDcgQEAgVGhlIGRlZmF1bHQgbG9jYXRpb25zIG9mIHRoZSBob3N0IGFjY2VzcworIC5TSCBTRUUgQUxTTworIC5uYQorIC5uZgorK2hvc3RzX2FjY2VzcygzKSwgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBsaWJ3cmFwIGxpYnJhcnkuCisgaG9zdHNfYWNjZXNzKDUpLCBmb3JtYXQgb2YgdGhlIHRjcGQgYWNjZXNzIGNvbnRyb2wgdGFibGVzLgorIHN5c2xvZy5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHN5c2xvZ2QgY29udHJvbCBmaWxlLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay44IHRjcF93cmFwcGVyc183LjYvdGNwZGNoay44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuOAkxOTk1LTAxLTA4IDE3OjAwOjMxLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay44CTIwMDUtMDMtMDkgMTg6Mjc6MDMuMDAwMDAwMDAwICswMTAwCitAQCAtOSw4ICs5LDggQEAgdGNwZGNoayBbLWFdIFstZF0gWy1pIGluZXRfY29uZl0gWy12XQorIHBvdGVudGlhbCBhbmQgcmVhbCBwcm9ibGVtcyBpdCBjYW4gZmluZC4gVGhlIHByb2dyYW0gZXhhbWluZXMgdGhlCisgXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCBmaWxlcyAoYnkgZGVmYXVsdCwgdGhlc2UgYXJlCisgXGZJL2V0Yy9ob3N0cy5hbGxvd1xmUiBhbmQgXGZJL2V0Yy9ob3N0cy5kZW55XGZSKSwgYW5kIGNvbXBhcmVzIHRoZQorLWVudHJpZXMgaW4gdGhlc2UgZmlsZXMgYWdhaW5zdCBlbnRyaWVzIGluIHRoZSBcZklpbmV0ZFxmUiBvciBcZkl0bGlkXGZSCistbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGVzLgorK2VudHJpZXMgaW4gdGhlc2UgZmlsZXMgYWdhaW5zdCBlbnRyaWVzIGluIHRoZSBcZklpbmV0ZFxmUgorK25ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLgorIC5QUAorIFxmSXRjcGRjaGtcZlIgcmVwb3J0cyBwcm9ibGVtcyBzdWNoIGFzIG5vbi1leGlzdGVudCBwYXRobmFtZXM7IHNlcnZpY2VzCisgdGhhdCBhcHBlYXIgaW4gXGZJdGNwZFxmUiBhY2Nlc3MgY29udHJvbCBydWxlcywgYnV0IGFyZSBub3QgY29udHJvbGxlZAorQEAgLTI2LDE0ICsyNiwxMyBAQCBwcm9ibGVtLgorIC5TSCBPUFRJT05TCisgLklQIC1hCisgUmVwb3J0IGFjY2VzcyBjb250cm9sIHJ1bGVzIHRoYXQgcGVybWl0IGFjY2VzcyB3aXRob3V0IGFuIGV4cGxpY2l0CistQUxMT1cga2V5d29yZC4gVGhpcyBhcHBsaWVzIG9ubHkgd2hlbiB0aGUgZXh0ZW5kZWQgYWNjZXNzIGNvbnRyb2wKKy1sYW5ndWFnZSBpcyBlbmFibGVkIChidWlsZCB3aXRoIC1EUFJPQ0VTU19PUFRJT05TKS4KKytBTExPVyBrZXl3b3JkLgorIC5JUCAtZAorIEV4YW1pbmUgXGZJaG9zdHMuYWxsb3dcZlIgYW5kIFxmSWhvc3RzLmRlbnlcZlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQKKyBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBvbmVzLgorIC5JUCAiLWkgaW5ldF9jb25mIgorIFNwZWNpZnkgdGhpcyBvcHRpb24gd2hlbiBcZkl0Y3BkY2hrXGZSIGlzIHVuYWJsZSB0byBmaW5kIHlvdXIKKy1cZklpbmV0ZC5jb25mXGZSIG9yIFxmSXRsaWQuY29uZlxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZSwgb3Igd2hlbgorK1xmSWluZXRkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKyB5b3Ugc3VzcGVjdCB0aGF0IHRoZSBwcm9ncmFtIHVzZXMgdGhlIHdyb25nIG9uZS4KKyAuSVAgLXYKKyBEaXNwbGF5IHRoZSBjb250ZW50cyBvZiBlYWNoIGFjY2VzcyBjb250cm9sIHJ1bGUuICBEYWVtb24gbGlzdHMsIGNsaWVudAorQEAgLTU0LDcgKzUzLDYgQEAgdGNwZG1hdGNoKDgpLCBleHBsYWluIHdoYXQgdGNwZCB3b3VsZCBkbworIGhvc3RzX2FjY2Vzcyg1KSwgZm9ybWF0IG9mIHRoZSB0Y3BkIGFjY2VzcyBjb250cm9sIHRhYmxlcy4KKyBob3N0c19vcHRpb25zKDUpLCBmb3JtYXQgb2YgdGhlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisgaW5ldGQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSBpbmV0ZCBjb250cm9sIGZpbGUuCistdGxpZC5jb25mKDUpLCBmb3JtYXQgb2YgdGhlIHRsaWQgY29udHJvbCBmaWxlLgorIC5TSCBBVVRIT1JTCisgLm5hCisgLm5mCitkaWZmIC1ydU5wIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guOCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRtYXRjaC44CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRtYXRjaC44CTIwMDUtMDMtMDkgMTg6MzA6MjQuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guOAkyMDA1LTAzLTA5IDE4OjI3OjAzLjAwMDAwMDAwMCArMDEwMAorQEAgLTEzLDcgKzEzLDcgQEAgcmVxdWVzdCBmb3Igc2VydmljZS4gIEV4YW1wbGVzIGFyZSBnaXZlbgorIFRoZSBwcm9ncmFtIGV4YW1pbmVzIHRoZSBcZkl0Y3BkXGZSIGFjY2VzcyBjb250cm9sIHRhYmxlcyAoZGVmYXVsdAorIFxmSS9ldGMvaG9zdHMuYWxsb3dcZlIgYW5kIFxmSS9ldGMvaG9zdHMuZGVueVxmUikgYW5kIHByaW50cyBpdHMKKyBjb25jbHVzaW9uLiAgRm9yIG1heGltYWwgYWNjdXJhY3ksIGl0IGV4dHJhY3RzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKy1mcm9tIHlvdXIgXGZJaW5ldGRcZlIgb3IgXGZJdGxpZFxmUiBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gZmlsZS4KKytmcm9tIHlvdXIgXGZJaW5ldGRcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUuCisgLlBQCisgV2hlbiBcZkl0Y3BkbWF0Y2hcZlIgZmluZHMgYSBtYXRjaCBpbiB0aGUgYWNjZXNzIGNvbnRyb2wgdGFibGVzLCBpdAorIGlkZW50aWZpZXMgdGhlIG1hdGNoZWQgcnVsZS4gSW4gYWRkaXRpb24sIGl0IGRpc3BsYXlzIHRoZSBvcHRpb25hbAorQEAgLTUwLDcgKzUwLDcgQEAgRXhhbWluZSBcZklob3N0cy5hbGxvd1xmUiBhbmQgXGZJaG9zdHMuZAorIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZXMuCisgLklQICItaSBpbmV0X2NvbmYiCisgU3BlY2lmeSB0aGlzIG9wdGlvbiB3aGVuIFxmSXRjcGRtYXRjaFxmUiBpcyB1bmFibGUgdG8gZmluZCB5b3VyCistXGZJaW5ldGQuY29uZlxmUiBvciBcZkl0bGlkLmNvbmZcZlIgbmV0d29yayBjb25maWd1cmF0aW9uIGZpbGUsIG9yIHdoZW4KKytcZklpbmV0ZC5jb25mXGZSIG5ldHdvcmsgY29uZmlndXJhdGlvbiBmaWxlLCBvciB3aGVuCisgeW91IHN1c3BlY3QgdGhhdCB0aGUgcHJvZ3JhbSB1c2VzIHRoZSB3cm9uZyBvbmUuCisgLlNIIEVYQU1QTEVTCisgVG8gcHJlZGljdCBob3cgXGZJdGNwZFxmUiB3b3VsZCBoYW5kbGUgYSB0ZWxuZXQgcmVxdWVzdCBmcm9tIHRoZSBsb2NhbAorQEAgLTg2LDcgKzg2LDYgQEAgdGNwZGNoayg4KSwgdGNwZCBjb25maWd1cmF0aW9uIGNoZWNrZXIKKyBob3N0c19hY2Nlc3MoNSksIGZvcm1hdCBvZiB0aGUgdGNwZCBhY2Nlc3MgY29udHJvbCB0YWJsZXMuCisgaG9zdHNfb3B0aW9ucyg1KSwgZm9ybWF0IG9mIHRoZSBsYW5ndWFnZSBleHRlbnNpb25zLgorIGluZXRkLmNvbmYoNSksIGZvcm1hdCBvZiB0aGUgaW5ldGQgY29udHJvbCBmaWxlLgorLXRsaWQuY29uZig1KSwgZm9ybWF0IG9mIHRoZSB0bGlkIGNvbnRyb2wgZmlsZS4KKyAuU0ggQVVUSE9SUworIC5uYQorIC5uZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA1X3dpbGRjYXJkX21hdGNoaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMTg4MDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2VlIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTc4NDcKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNSB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTg6NTQ6MzMuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTEwIDE4OjU0OjI3LjAwMDAwMDAwMCArMDIwMAorQEAgLTg5LDYgKzg5LDEwIEBACisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisrLklQIFwoYnUKKytXaWxkY2FyZHMgYCpcJyBhbmQgYD9cJyBjYW4gYmUgdXNlZCB0byBtYXRjaCBob3N0bmFtZXMgb3IgSVAgYWRkcmVzc2VzLiAgVGhpcworK21ldGhvZCBvZiBtYXRjaGluZyBjYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBuZXQvbWFza1wnIG1hdGNoaW5nLAorK2hvc3RuYW1lIG1hdGNoaW5nIGJlZ2lubmluZyB3aXRoIGAuXCcgb3IgSVAgYWRkcmVzcyBtYXRjaGluZyBlbmRpbmcgd2l0aCBgLlwnLgorIC5TSCBXSUxEQ0FSRFMKKyBUaGUgYWNjZXNzIGNvbnRyb2wgbGFuZ3VhZ2Ugc3VwcG9ydHMgZXhwbGljaXQgd2lsZGNhcmRzOgorIC5JUCBBTEwKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkxOTk3LTAyLTEyIDAyOjEzOjIzLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxODo1MjoyMS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yODksNiArMjg5LDExIEBACisgeworICAgICBpbnQgICAgIG47CisgCisrI2lmbmRlZiBESVNBQkxFX1dJTERDQVJEX01BVENISU5HCisrICAgIGlmIChzdHJjaHIodG9rLCAnKicpIHx8IHN0cmNocih0b2ssJz8nKSkgeyAgLyogY29udGFpbnMgJyonIG9yICc/JyAqLworKyAgICAgICAgcmV0dXJuIChtYXRjaF9wYXR0ZXJuX3lsbyhzdHJpbmcsdG9rKSk7IAkgICAgICAgCisrICAgIH0gZWxzZSAKKysjZW5kaWYgICAgCisgICAgIGlmICh0b2tbMF0gPT0gJy4nKSB7CQkJLyogc3VmZml4ICovCisgCW4gPSBzdHJsZW4oc3RyaW5nKSAtIHN0cmxlbih0b2spOworIAlyZXR1cm4gKG4gPiAwICYmIFNUUl9FUSh0b2ssIHN0cmluZyArIG4pKTsKK0BAIC0zMjksMyArMzM0LDcxIEBACisgICAgIH0KKyAgICAgcmV0dXJuICgoYWRkciAmIG1hc2spID09IG5ldCk7CisgfQorKworKyNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworKy8qIE5vdGU6IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBhZGFwdGVkIGluIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkKKysgICBmcm9tIFRhdHUgWWxvbmVuJ3MgbGFzdCBTU0ggdmVyc2lvbiB1bmRlciBmcmVlIGxpY2Vuc2UgYnkgCisrICAgUGVra2EgU2F2b2xhIDxwZWtrYXNAbmV0Y29yZS5maT4uCisrCisrICAgQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKKysqLworKworKy8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMgdGhlIHBhdHRlcm4gKHdoaWNoIG1heSBjb250YWluCisrICAgPyBhbmQgKiBhcyB3aWxkY2FyZHMpLCBhbmQgemVybyBpZiBpdCBkb2VzIG5vdCBtYXRjaC4gKi8KKysJICAKKytpbnQgbWF0Y2hfcGF0dGVybl95bG8oY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqcGF0dGVybikKKyt7CisrICB3aGlsZSAoMSkKKysgICAgeworKyAgICAgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBhY2NlcHQgaWYgYWxzbyBhdCBlbmQgb2Ygc3RyaW5nLiAqLworKyAgICAgIGlmICghKnBhdHRlcm4pCisrICAgICAgICByZXR1cm4gISpzOworKworKyAgICAgIC8qIFByb2Nlc3MgJyonLiAqLworKyAgICAgIGlmICgqcGF0dGVybiA9PSAnKicpCisrICAgICAgICB7CisrCSAgLyogU2tpcCB0aGUgYXN0ZXJpc2suICovCisrCSAgcGF0dGVybisrOworKworKwkgIC8qIElmIGF0IGVuZCBvZiBwYXR0ZXJuLCBhY2NlcHQgaW1tZWRpYXRlbHkuICovCisrICAgICAgICAgIGlmICghKnBhdHRlcm4pCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrCisrCSAgLyogSWYgbmV4dCBjaGFyYWN0ZXIgaW4gcGF0dGVybiBpcyBrbm93biwgb3B0aW1pemUuICovCisrICAgICAgICAgIGlmICgqcGF0dGVybiAhPSAnPycgJiYgKnBhdHRlcm4gIT0gJyonKQorKyAgICAgICAgICAgIHsKKysJICAgICAgLyogTG9vayBpbnN0YW5jZXMgb2YgdGhlIG5leHQgY2hhcmFjdGVyIGluIHBhdHRlcm4sIGFuZCB0cnkKKysJCSB0byBtYXRjaCBzdGFydGluZyBmcm9tIHRob3NlLiAqLworKyAgICAgICAgICAgICAgZm9yICg7ICpzOyBzKyspCisrICAgICAgICAgICAgICAgIGlmICgqcyA9PSAqcGF0dGVybiAmJgorKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hfcGF0dGVybl95bG8ocyArIDEsIHBhdHRlcm4gKyAxKSkKKysgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysJICAgICAgLyogRmFpbGVkLiAqLworKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgfQorKworKwkgIC8qIE1vdmUgYWhlYWQgb25lIGNoYXJhY3RlciBhdCBhIHRpbWUgYW5kIHRyeSB0byBtYXRjaCBhdCBlYWNoCisrCSAgICAgcG9zaXRpb24uICovCisrICAgICAgICAgIGZvciAoOyAqczsgcysrKQorKyAgICAgICAgICAgIGlmIChtYXRjaF9wYXR0ZXJuX3lsbyhzLCBwYXR0ZXJuKSkKKysgICAgICAgICAgICAgIHJldHVybiAxOworKwkgIC8qIEZhaWxlZC4gKi8KKysgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrCisrICAgICAgLyogVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgbW9yZSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gIElmIHdlIGFyZQorKwkgYXQgdGhlIGVuZCwgZmFpbC4gKi8KKysgICAgICBpZiAoISpzKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgICAgLyogQ2hlY2sgaWYgdGhlIG5leHQgY2hhcmFjdGVyIG9mIHRoZSBzdHJpbmcgaXMgYWNjZXB0YWJsZS4gKi8KKysgICAgICBpZiAoKnBhdHRlcm4gIT0gJz8nICYmICpwYXR0ZXJuICE9ICpzKQorKwlyZXR1cm4gMDsKKysgICAgICAKKysgICAgICAvKiBNb3ZlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciwgYm90aCBpbiBzdHJpbmcgYW5kIGluIHBhdHRlcm4uICovCisrICAgICAgcysrOworKyAgICAgIHBhdHRlcm4rKzsKKysgICAgfQorKyAgLypOT1RSRUFDSEVEKi8KKyt9CisrI2VuZGlmIC8qIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcgKi8KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8wNl9maXhfZ2V0aG9zdGJ5bmFtZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjVmNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzA2X2ZpeF9nZXRob3N0YnluYW1lLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBNb24gRmViICA1IDIwMDEgUHJlc3RvbiBCcm93biA8cGJyb3duQHJlZGhhdC5jb20+CistIGZpeCBnZXRob3N0YnluYW1lIHRvIHdvcmsgYmV0dGVyIHdpdGggZG90ICIuIiBub3RhdGlvbiAoIzE2OTQ5KQorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYy5maXhnZXRob3N0YnluYW1lCUZyaSBNYXIgMjEgMTM6Mjc6MjUgMTk5NworKysrIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJTW9uIEZlYiAgNSAxNDowOTo0MCAyMDAxCitAQCAtNTIsNyArNTIsOCBAQAorIGNoYXIgICAqbmFtZTsKKyB7CisgICAgIGNoYXIgICAgZG90X25hbWVbTUFYSE9TVE5BTUVMRU4gKyAxXTsKKy0KKysgICAgc3RydWN0IGhvc3RlbnQgKmhwOworKyAgICAKKyAgICAgLyoKKyAgICAgICogRG9uJ3QgYXBwZW5kIGRvdHMgdG8gdW5xdWFsaWZpZWQgbmFtZXMuIFN1Y2ggbmFtZXMgYXJlIGxpa2VseSB0byBjb21lCisgICAgICAqIGZyb20gbG9jYWwgaG9zdHMgZmlsZXMgb3IgZnJvbSBOSVMuCitAQCAtNjEsOCArNjIsMTIgQEAKKyAgICAgaWYgKHN0cmNocihuYW1lLCAnLicpID09IDAgfHwgc3RybGVuKG5hbWUpID49IE1BWEhPU1ROQU1FTEVOIC0gMSkgeworIAlyZXR1cm4gKGdldGhvc3RieW5hbWUobmFtZSkpOworICAgICB9IGVsc2UgeworLQlzcHJpbnRmKGRvdF9uYW1lLCAiJXMuIiwgbmFtZSk7CistCXJldHVybiAoZ2V0aG9zdGJ5bmFtZShkb3RfbmFtZSkpOworKyAgICAgICAgc3ByaW50Zihkb3RfbmFtZSwgIiVzLiIsIG5hbWUpOworKyAgICAgICAgaHAgPSBnZXRob3N0YnluYW1lKGRvdF9uYW1lKTsKKysJaWYgKGhwKQorKwkgICAgcmV0dXJuIGhwOworKwllbHNlCisrCSAgICByZXR1cm4gKGdldGhvc3RieW5hbWUobmFtZSkpOworICAgICB9CisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTBfdXNhZ2ktaXB2Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmQ0N2MzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEwX3VzYWdpLWlwdjYucGF0Y2gKQEAgLTAsMCArMSwxMjU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZml4X29wdGlvbnMuYyB0Y3Bfd3JhcHBlcnNfNy42L2ZpeF9vcHRpb25zLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZml4X29wdGlvbnMuYwkxOTk3LTA0LTA4IDAyOjI5OjE5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvZml4X29wdGlvbnMuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTExLDYgKzExLDkgQEAKKyAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2VuZGlmCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorICNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CitAQCAtNDEsNiArNDQsMjIgQEAKKyAgICAgdW5zaWduZWQgaW50IG9wdDsKKyAgICAgaW50ICAgICBvcHRsZW47CisgICAgIHN0cnVjdCBpbl9hZGRyIGR1bW15OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKKysgICAgaW50IHNzbGVuOworKworKyAgICAvKgorKyAgICAgKiBjaGVjayBpZiB0aGlzIGlzIEFGX0lORVQgc29ja2V0CisrICAgICAqIFhYWCBJUHY2IHN1cHBvcnQ/CisrICAgICAqLworKyAgICBzc2xlbiA9IHNpemVvZihzcyk7CisrICAgIGlmIChnZXRzb2NrbmFtZShmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzcywgJnNzbGVuKSA8IDApIHsKKysJc3lzbG9nKExPR19FUlIsICJnZXRwZWVybmFtZTogJW0iKTsKKysJY2xlYW5fZXhpdChyZXF1ZXN0KTsKKysgICAgfQorKyAgICBpZiAoc3Muc3NfZmFtaWx5ICE9IEFGX0lORVQpCisrCXJldHVybjsKKysjZW5kaWYKKyAKKyAgICAgaWYgKChpcCA9IGdldHByb3RvYnluYW1lKCJpcCIpKSAhPSAwKQorIAlpcHByb3RvID0gaXAtPnBfcHJvdG87CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyMjo1OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtODUsMTEgKzg1LDE4IEBACisgZm9yIGRhZW1vbiBwcm9jZXNzIG5hbWVzIG9yIGZvciBjbGllbnQgdXNlciBuYW1lcy4KKyAuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbS5tLm0ubVwnIGlzIGludGVycHJldGVkIGFzIGEKKy1gbmV0L21hc2tcJyBwYWlyLiBBIGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUKKytgbmV0L21hc2tcJyBwYWlyLiBBbiBJUHY0IGhvc3QgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUKKyBiaXR3aXNlIEFORCBvZiB0aGUgYWRkcmVzcyBhbmQgdGhlIGBtYXNrXCcuIEZvciBleGFtcGxlLCB0aGUgbmV0L21hc2sKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKyAuSVAgXChidQorK0FuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYFtuOm46bjpuOm46bjpuOm5dL21cJyBpcyBpbnRlcnByZXRlZCBhcyBhCisrYFtuZXRdL3ByZWZpeGxlblwnIHBhaXIuIEFuIElQdjYgaG9zdCBhZGRyZXNzIGlzIG1hdGNoZWQgaWYKKytgcHJlZml4bGVuXCcgYml0cyBvZiBgbmV0XCcgaXMgZXF1YWwgdG8gdGhlIGBwcmVmaXhsZW5cJyBiaXRzIG9mIHRoZQorK2FkZHJlc3MuIEZvciBleGFtcGxlLCB0aGUgW25ldF0vcHJlZml4bGVuIHBhdHRlcm4KKytgWzNmZmU6NTA1OjI6MTo6XS82NFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUgcmFuZ2UKKytgM2ZmZTo1MDU6MjoxOjpcJyB0aHJvdWdoIGAzZmZlOjUwNToyOjE6ZmZmZjpmZmZmOmZmZmY6ZmZmZlwnLgorKy5JUCBcKGJ1CisgV2lsZGNhcmRzIGAqXCcgYW5kIGA/XCcgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggaG9zdG5hbWVzIG9yIElQIGFkZHJlc3Nlcy4gIFRoaXMKKyBtZXRob2Qgb2YgbWF0Y2hpbmcgY2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgbmV0L21hc2tcJyBtYXRjaGluZywKKyBob3N0bmFtZSBtYXRjaGluZyBiZWdpbm5pbmcgd2l0aCBgLlwnIG9yIElQIGFkZHJlc3MgbWF0Y2hpbmcgZW5kaW5nIHdpdGggYC5cJy4KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuYwkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCw3ICsyNCwxMyBAQAorIC8qIFN5c3RlbSBsaWJyYXJpZXMuICovCisgCisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpZmRlZiBJTlQzMl9UCisrICAgIHR5cGVkZWYgdWludDMyX3QgdV9pbnQzMl90OworKyNlbmRpZgorICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTMzLDYgKzM5LDkgQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c2V0am1wLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpZmRlZiBJTkVUNgorKyNpbmNsdWRlIDxuZXRkYi5oPgorKyNlbmRpZgorIAorIGV4dGVybiBjaGFyICpmZ2V0cygpOworIGV4dGVybiBpbnQgZXJybm87CitAQCAtODIsNiArOTEsMTAgQEAKKyBzdGF0aWMgaW50IGhvc3RfbWF0Y2goKTsKKyBzdGF0aWMgaW50IHN0cmluZ19tYXRjaCgpOworIHN0YXRpYyBpbnQgbWFza2VkX21hdGNoKCk7CisrI2lmZGVmIElORVQ2Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g0KCk7Cisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g2KCk7CisrI2VuZGlmCisgCisgLyogU2l6ZSBvZiBsb2dpY2FsIGxpbmUgYnVmZmVyLiAqLworIAorQEAgLTI4OSw2ICszMDIsMTMgQEAKKyB7CisgICAgIGludCAgICAgbjsKKyAKKysjaWZkZWYgSU5FVDYKKysgICAgLyogY29udmVydCBJUHY0IG1hcHBlZCBJUHY2IGFkZHJlc3MgdG8gSVB2NCBhZGRyZXNzICovCisrICAgIGlmIChTVFJOX0VRKHN0cmluZywgIjo6ZmZmZjoiLCA3KQorKyAgICAgICYmIGRvdF9xdWFkX2FkZHIoc3RyaW5nICsgNykgIT0gSU5BRERSX05PTkUpIHsKKysgICAgICBzdHJpbmcgKz0gNzsKKysgICAgfQorKyNlbmRpZiAgICAKKyAjaWZuZGVmIERJU0FCTEVfV0lMRENBUkRfTUFUQ0hJTkcKKyAgICAgaWYgKHN0cmNocih0b2ssICcqJykgfHwgc3RyY2hyKHRvaywnPycpKSB7ICAvKiBjb250YWlucyAnKicgb3IgJz8nICovCisgICAgICAgICByZXR1cm4gKG1hdGNoX3BhdHRlcm5feWxvKHN0cmluZyx0b2spKTsgCSAgICAgICAKK0BAIC0zMDQsMjAgKzMyNCw3MiBAQAorICAgICB9IGVsc2UgaWYgKHRva1sobiA9IHN0cmxlbih0b2spKSAtIDFdID09ICcuJykgewkvKiBwcmVmaXggKi8KKyAJcmV0dXJuIChTVFJOX0VRKHRvaywgc3RyaW5nLCBuKSk7CisgICAgIH0gZWxzZSB7CQkJCQkvKiBleGFjdCBtYXRjaCAqLworKyNpZmRlZiBJTkVUNgorKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrCXN0cnVjdCBzb2NrYWRkcl9pbjYgcGF0LCBhZGRyOworKwlpbnQgbGVuLCByZXQ7CisrCWNoYXIgY2g7CisrCisrCWxlbiA9IHN0cmxlbih0b2spOworKwlpZiAoKnRvayA9PSAnWycgJiYgdG9rW2xlbiAtIDFdID09ICddJykgeworKwkgICAgY2ggPSB0b2tbbGVuIC0gMV07CisrCSAgICB0b2tbbGVuIC0gMV0gPSAnXDAnOworKwkgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCSAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysJICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrCSAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysJICAgIGlmICgocmV0ID0gZ2V0YWRkcmluZm8odG9rICsgMSwgTlVMTCwgJmhpbnRzLCAmcmVzKSkgPT0gMCkgeworKwkJbWVtY3B5KCZwYXQsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKHBhdCkpOworKwkJZnJlZWFkZHJpbmZvKHJlcyk7CisrCSAgICB9CisrCSAgICB0b2tbbGVuIC0gMV0gPSBjaDsKKysJICAgIGlmIChyZXQgIT0gMCB8fCBnZXRhZGRyaW5mbyhzdHJpbmcsIE5VTEwsICZoaW50cywgJnJlcykgIT0gMCkKKysJCXJldHVybiBOTzsKKysJICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworKwkgICAgZnJlZWFkZHJpbmZvKHJlcyk7CisrI2lmZGVmIE5JX1dJVEhTQ09QRUlECisrCSAgICBpZiAocGF0LnNpbjZfc2NvcGVfaWQgIT0gMCAmJgorKwkJYWRkci5zaW42X3Njb3BlX2lkICE9IHBhdC5zaW42X3Njb3BlX2lkKQorKwkJcmV0dXJuIE5POworKyNlbmRpZgorKwkgICAgcmV0dXJuICghbWVtY21wKCZwYXQuc2luNl9hZGRyLCAmYWRkci5zaW42X2FkZHIsCisrCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSk7CisrCSAgICByZXR1cm4gKHJldCk7CisrCX0KKysjZW5kaWYKKyAJcmV0dXJuIChTVFJfRVEodG9rLCBzdHJpbmcpKTsKKyAgICAgfQorIH0KKyAKKyAvKiBtYXNrZWRfbWF0Y2ggLSBtYXRjaCBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL25ldG1hc2sgKi8KKyAKKysjaWZkZWYgSU5FVDYKKyBzdGF0aWMgaW50IG1hc2tlZF9tYXRjaChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorIGNoYXIgICAqbmV0X3RvazsKKyBjaGFyICAgKm1hc2tfdG9rOworIGNoYXIgICAqc3RyaW5nOworIHsKKysgICAgcmV0dXJuIChtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpIHx8CisrCSAgICBtYXNrZWRfbWF0Y2g2KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpKTsKKyt9CisrCisrc3RhdGljIGludCBtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcpCisrI2Vsc2UKKytzdGF0aWMgaW50IG1hc2tlZF9tYXRjaChuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorKyNlbmRpZgorK2NoYXIgICAqbmV0X3RvazsKKytjaGFyICAgKm1hc2tfdG9rOworK2NoYXIgICAqc3RyaW5nOworK3sKKysjaWZkZWYgSU5FVDYKKysgICAgdV9pbnQzMl90IG5ldDsKKysgICAgdV9pbnQzMl90IG1hc2s7CisrICAgIHVfaW50MzJfdCBhZGRyOworKyNlbHNlCisgICAgIHVuc2lnbmVkIGxvbmcgbmV0OworICAgICB1bnNpZ25lZCBsb25nIG1hc2s7CisgICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRGlzYWxsb3cgZm9ybXMgb3RoZXIgdGhhbiBkb3R0ZWQgcXVhZDogdGhlIHRyZWF0bWVudCB0aGF0IGluZXRfYWRkcigpCitAQCAtMzI5LDEyICs0MDEsNzggQEAKKyAJcmV0dXJuIChOTyk7CisgICAgIGlmICgobmV0ID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKyAJfHwgKG1hc2sgPSBkb3RfcXVhZF9hZGRyKG1hc2tfdG9rKSkgPT0gSU5BRERSX05PTkUpIHsKKysjaWZuZGVmIElORVQ2CisgCXRjcGRfd2FybigiYmFkIG5ldC9tYXNrIGV4cHJlc3Npb246ICVzLyVzIiwgbmV0X3RvaywgbWFza190b2spOworKyNlbmRpZgorIAlyZXR1cm4gKE5PKTsJCQkJLyogbm90IHRjcGRfanVtcCgpICovCisgICAgIH0KKyAgICAgcmV0dXJuICgoYWRkciAmIG1hc2spID09IG5ldCk7CisgfQorIAorKyNpZmRlZiBJTkVUNgorK3N0YXRpYyBpbnQgbWFza2VkX21hdGNoNihuZXRfdG9rLCBtYXNrX3Rvaywgc3RyaW5nKQorK2NoYXIgICAqbmV0X3RvazsKKytjaGFyICAgKm1hc2tfdG9rOworK2NoYXIgICAqc3RyaW5nOworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG5ldCwgYWRkcjsKKysgICAgdV9pbnQzMl90IG1hc2s7CisrICAgIGludCBsZW4sIG1hc2tfbGVuLCBpID0gMDsKKysgICAgY2hhciBjaDsKKysKKysgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKHN0cmluZywgTlVMTCwgJmhpbnRzLCAmcmVzKSAhPSAwKQorKwlyZXR1cm4gTk87CisrICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysKKysgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyLnNpbjZfYWRkcikpIHsKKysJaWYgKCgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKysJIHx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKQorKwkgICAgcmV0dXJuIChOTyk7CisrCXJldHVybiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbMTJdICYgbWFzaykgPT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSk7CisrICAgIH0KKysKKysgICAgLyogbWF0Y2ggSVB2NiBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL3ByZWZpeGxlbiAqLworKyAgICBsZW4gPSBzdHJsZW4obmV0X3Rvayk7CisrICAgIGlmICgqbmV0X3RvayAhPSAnWycgfHwgbmV0X3Rva1tsZW4gLSAxXSAhPSAnXScpCisrCXJldHVybiBOTzsKKysgICAgY2ggPSBuZXRfdG9rW2xlbiAtIDFdOworKyAgICBuZXRfdG9rW2xlbiAtIDFdID0gJ1wwJzsKKysgICAgaWYgKGdldGFkZHJpbmZvKG5ldF90b2sgKyAxLCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApIHsKKysJbmV0X3Rva1tsZW4gLSAxXSA9IGNoOworKwlyZXR1cm4gTk87CisrICAgIH0KKysgICAgbWVtY3B5KCZuZXQsIHJlcy0+YWlfYWRkciwgc2l6ZW9mKG5ldCkpOworKyAgICBmcmVlYWRkcmluZm8ocmVzKTsKKysgICAgbmV0X3Rva1tsZW4gLSAxXSA9IGNoOworKyAgICBpZiAoKG1hc2tfbGVuID0gYXRvaShtYXNrX3RvaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkKKysJcmV0dXJuIE5POworKworKyNpZmRlZiBOSV9XSVRIU0NPUEVJRAorKyAgICBpZiAobmV0LnNpbjZfc2NvcGVfaWQgIT0gMCAmJiBhZGRyLnNpbjZfc2NvcGVfaWQgIT0gbmV0LnNpbjZfc2NvcGVfaWQpCisrCXJldHVybiBOTzsKKysjZW5kaWYKKysgICAgd2hpbGUgKG1hc2tfbGVuID4gMCkgeworKwlpZiAobWFza19sZW4gPCAzMikgeworKwkgICAgbWFzayA9IGh0b25sKH4oMHhmZmZmZmZmZiA+PiBtYXNrX2xlbikpOworKwkgICAgaWYgKCgqKHVfaW50MzJfdCAqKSZhZGRyLnNpbjZfYWRkci5zNl9hZGRyW2ldICYgbWFzaykgIT0gKCoodV9pbnQzMl90ICopJm5ldC5zaW42X2FkZHIuczZfYWRkcltpXSAmIG1hc2spKQorKwkJcmV0dXJuIE5POworKwkgICAgYnJlYWs7CisrCX0KKysJaWYgKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gIT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyW2ldKQorKwkgICAgcmV0dXJuIE5POworKwlpICs9IDQ7CisrCW1hc2tfbGVuIC09IDMyOworKyAgICB9CisrICAgIHJldHVybiBZRVM7CisrfQorKyNlbmRpZiAvKiBJTkVUNiAqLworKworICNpZm5kZWYgRElTQUJMRV9XSUxEQ0FSRF9NQVRDSElORworIC8qIE5vdGU6IHRoaXMgZmVhdHVyZSBoYXMgYmVlbiBhZGFwdGVkIGluIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkKKyAgICBmcm9tIFRhdHUgWWxvbmVuJ3MgbGFzdCBTU0ggdmVyc2lvbiB1bmRlciBmcmVlIGxpY2Vuc2UgYnkgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMTk5Ny0wMy0yMSAxOToyNzoyMS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDQtMDQtMTAgMTk6MjI6NDQuMDAwMDAwMDAwICswMjAwCitAQCAtMjEsNyArMjEsNyBAQAorIAlAZWNobyAiCWR5bml4IGVwaXggZXNpeCBmcmVlYnNkIGhwdXggaXJpeDQgaXJpeDUgaXJpeDYgaXNjIGl1bml4IgorIAlAZWNobyAiCWxpbnV4IG1hY2h0ZW4gbWlwcyh1bnRlc3RlZCkgbmNyc3ZyNCBuZXRic2QgbmV4dCBvc2YgcG93ZXJfdW5peF8yMTEiCisgCUBlY2hvICIJcHR4LTIueCBwdHgtZ2VuZXJpYyBweXJhbWlkIHNjbyBzY28tbmlzIHNjby1vZDIgc2NvLW9zNSBzaW5peCBzdW5vczQiCistCUBlY2hvICIJc3Vub3M0MCBzdW5vczUgc3lzdjQgdGFuZGVtIHVsdHJpeCB1bmljb3M3IHVuaWNvczggdW5peHdhcmUxIHVuaXh3YXJlMiIKKysJQGVjaG8gIglzdW5vczQwIHN1bm9zNSBzb2xhcmlzOCBzeXN2NCB0YW5kZW0gdWx0cml4IHVuaWNvczcgdW5pY29zOCB1bml4d2FyZTEgdW5peHdhcmUyIgorIAlAZWNobyAiCXV0czIxNSB1eHAiCisgCUBlY2hvCisgCUBlY2hvICJJZiBub25lIG9mIHRoZXNlIG1hdGNoIHlvdXIgZW52aXJvbm1lbnQsIGVkaXQgdGhlIHN5c3RlbSIKK0BAIC0xMzEsMjAgKzEzMSwzNCBAQAorIAlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gU1lTVFlQRT0iLXN5c3R5cGUgYnNkNDMiIGFsbAorIAorICMgRnJlZWJzZCBhbmQgbGludXggYnkgZGVmYXVsdCBoYXZlIG5vIE5JUy4KKy0zODZic2QgbmV0YnNkIGJzZG9zOgorKzM4NmJzZCBic2RvczoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisgCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCisgCUVYVFJBX0NGTEFHUz0tRFNZU19FUlJMSVNUX0RFRklORUQgVlNZU0xPRz0gYWxsCisgCisgZnJlZWJzZDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9Ii1ML3Vzci9sb2NhbC92Ni9saWIgLWxpbmV0NiIgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gTkVUR1JPVVA9IFRMST0gXAorLQlFWFRSQV9DRkxBR1M9LURTWVNfRVJSTElTVF9ERUZJTkVEIFZTWVNMT0c9IGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtRElORVQ2IC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBcCisrCVZTWVNMT0c9IGFsbAorKworK25ldGJzZDoKKysJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCisrCUxJQlM9IFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBORVRHUk9VUD0gVExJPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESU5FVDYgLURzc19mYW1pbHk9X19zc19mYW1pbHkgLURzc19sZW49X19zc19sZW4iIFZTWVNMT0c9IGFsbAorIAorIGxpbnV4OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0gUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9c2V0ZW52Lm8gXAorLQlORVRHUk9VUD0gVExJPSBFWFRSQV9DRkxBR1M9Ii1EQlJPS0VOX1NPX0xJTkdFUiIgYWxsCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9IFwKKysJTkVUR1JPVVA9Ii1ETkVUR1JPVVAiIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKysKKytnbnU6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCU5FVEdST1VQPS1ETkVUR1JPVVAgVExJPSBWU1lTTE9HPSBCVUdTPSBcCisrCUVYVFJBX0NGTEFHUz0iLURTWVNfRVJSTElTVF9ERUZJTkVEIC1ESEFWRV9TVFJFUlJPUiIgYWxsCisgCisgIyBUaGlzIGlzIGdvb2QgZm9yIG1hbnkgU1lTVitCU0QgaHlicmlkcyB3aXRoIE5JUywgcHJvYmFibHkgYWxzbyBmb3IgSFAtVVggNy54LgorIGhwdXggaHB1eDggaHB1eDkgaHB1eDEwOgorQEAgLTE5Niw2ICsyMTAsMTMgQEAKKyAJTkVUR1JPVVA9LURORVRHUk9VUCBBVVhfT0JKPXNldGVudi5vIFRMST0tRFRMSSBcCisgCUJVR1M9IiQoQlVHUykgLURTT0xBUklTXzI0X0dFVEhPU1RCWU5BTUVfQlVHIiBhbGwKKyAKKysjIFN1bk9TIDUuOCBpcyBhbm90aGVyIFNZU1Y0IHZhcmlhbnQsIGJ1dCBoYXMgSVB2NiBzdXBwb3J0Cisrc29sYXJpczg6CisrCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorKwlMSUJTPSItbHNvY2tldCAtbG5zbCIgUkFOTElCPWVjaG8gQVJGTEFHUz1ydiBWU1lTTE9HPSBcCisrCU5FVEdST1VQPS1ETkVUR1JPVVAgQVVYX09CSj1zZXRlbnYubyBUTEk9LURUTEkgXAorKwlFWFRSQV9DRkxBR1M9Ii1ESU5FVDYgLUROT19DTE9ORV9ERVZJQ0UgLURJTlQzMl9UIiBhbGwKKysKKyAjIEdlbmVyaWMgU1lTVjQwCisgZXNpeCBzeXN2NDoKKyAJQG1ha2UgUkVBTF9EQUVNT05fRElSPSQoUkVBTF9EQUVNT05fRElSKSBTVFlMRT0kKFNUWUxFKSBcCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9taXNjLmMJMTk5Ni0wMi0xMSAxNzowMTozMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L21pc2MuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTU4LDkgKzU4LDMxIEBACisgeworICAgICBjaGFyICAgKmNwOworIAorKyNpZmRlZiBJTkVUNgorKyAgICBpbnQgYnJhY2tldCA9IDA7CisrCisrICAgIGZvciAoY3AgPSBzdHJpbmc7IGNwICYmICpjcDsgY3ArKykgeworKwlzd2l0Y2ggKCpjcCkgeworKwljYXNlICdbJzoKKysJICAgIGJyYWNrZXQrKzsKKysJICAgIGJyZWFrOworKwljYXNlICddJzoKKysJICAgIGJyYWNrZXQtLTsKKysJICAgIGJyZWFrOworKwlkZWZhdWx0OgorKwkgICAgaWYgKGJyYWNrZXQgPT0gMCAmJiAqY3AgPT0gZGVsaW1pdGVyKSB7CisrCQkqY3ArKyA9IDA7CisrCQlyZXR1cm4gY3A7CisrCSAgICB9CisrCSAgICBicmVhazsKKysJfQorKyAgICB9CisrICAgIHJldHVybiAoTlVMTCk7CisrI2Vsc2UKKyAgICAgaWYgKChjcCA9IHN0cmNocihzdHJpbmcsIGRlbGltaXRlcikpICE9IDApCisgCSpjcCsrID0gMDsKKyAgICAgcmV0dXJuIChjcCk7CisrI2VuZGlmCisgfQorIAorIC8qIGRvdF9xdWFkX2FkZHIgLSBjb252ZXJ0IGRvdHRlZCBxdWFkIHRvIGludGVybmFsIGZvcm0gKi8KK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmVmdXNlLmMgdGNwX3dyYXBwZXJzXzcuNi9yZWZ1c2UuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZWZ1c2UuYwkxOTk0LTEyLTI4IDE3OjQyOjQwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmVmdXNlLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSwxMiBAQAorIHZvaWQgICAgcmVmdXNlKHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN5c2xvZyhkZW55X3NldmVyaXR5LCAicmVmdXNlZCBjb25uZWN0IGZyb20gJXMgKCVzKSIsCisrCSAgIGV2YWxfY2xpZW50KHJlcXVlc3QpLCBldmFsX2hvc3RhZGRyKHJlcXVlc3QtPmNsaWVudCkpOworKyNlbHNlCisgICAgIHN5c2xvZyhkZW55X3NldmVyaXR5LCAicmVmdXNlZCBjb25uZWN0IGZyb20gJXMiLCBldmFsX2NsaWVudChyZXF1ZXN0KSk7CisrI2VuZGlmCisgICAgIGNsZWFuX2V4aXQocmVxdWVzdCk7CisgICAgIC8qIE5PVFJFQUNIRUQgKi8KKyB9CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMJMTk5NS0wMS0wMiAxNjoxMTozNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsMjAgKzY4LDUwIEBACisgLyogcmZjOTMxIC0gcmV0dXJuIHJlbW90ZSB1c2VyIG5hbWUsIGdpdmVuIHNvY2tldCBzdHJ1Y3R1cmVzICovCisgCisgdm9pZCAgICByZmM5MzEocm10X3Npbiwgb3VyX3NpbiwgZGVzdCkKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3Qgc29ja2FkZHIgKnJtdF9zaW47Cisrc3RydWN0IHNvY2thZGRyICpvdXJfc2luOworKyNlbHNlCisgc3RydWN0IHNvY2thZGRyX2luICpybXRfc2luOworIHN0cnVjdCBzb2NrYWRkcl9pbiAqb3VyX3NpbjsKKysjZW5kaWYKKyBjaGFyICAgKmRlc3Q7CisgeworICAgICB1bnNpZ25lZCBybXRfcG9ydDsKKyAgICAgdW5zaWduZWQgb3VyX3BvcnQ7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHJtdF9xdWVyeV9zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIG91cl9xdWVyeV9zaW47CisrICAgIGludCBhbGVuOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBybXRfcXVlcnlfc2luOworICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gb3VyX3F1ZXJ5X3NpbjsKKysjZW5kaWYKKyAgICAgY2hhciAgICB1c2VyWzI1Nl07CQkJLyogWFhYICovCisgICAgIGNoYXIgICAgYnVmZmVyWzUxMl07CQkvKiBYWFggKi8KKyAgICAgY2hhciAgICpjcDsKKyAgICAgY2hhciAgICpyZXN1bHQgPSB1bmtub3duOworICAgICBGSUxFICAgKmZwOworIAorKyNpZmRlZiBJTkVUNgorKyAgICAvKiBhZGRyZXNzIGZhbWlseSBtdXN0IGJlIHRoZSBzYW1lICovCisrICAgIGlmIChybXRfc2luLT5zYV9mYW1pbHkgIT0gb3VyX3Npbi0+c2FfZmFtaWx5KSB7CisrCVNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CisrCXJldHVybjsKKysgICAgfQorKyAgICBzd2l0Y2ggKG91cl9zaW4tPnNhX2ZhbWlseSkgeworKyAgICBjYXNlIEFGX0lORVQ6CisrCWFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKysJYnJlYWs7CisrICAgIGNhc2UgQUZfSU5FVDY6CisrCWFsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrCWJyZWFrOworKyAgICBkZWZhdWx0OgorKwlTVFJOX0NQWShkZXN0LCByZXN1bHQsIFNUUklOR19MRU5HVEgpOworKwlyZXR1cm47CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgLyoKKyAgICAgICogVXNlIG9uZSB1bmJ1ZmZlcmVkIHN0ZGlvIHN0cmVhbSBmb3Igd3JpdGluZyB0byBhbmQgZm9yIHJlYWRpbmcgZnJvbQorICAgICAgKiB0aGUgUkZDOTMxIGV0Yy4gc2VydmVyLiBUaGlzIGlzIGRvbmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgU3VuT1MKK0BAIC05Miw3ICsxMjIsMTEgQEAKKyAgICAgICogc29ja2V0cy4KKyAgICAgICovCisgCisrI2lmZGVmIElORVQ2CisrICAgIGlmICgoZnAgPSBmc29ja2V0KG91cl9zaW4tPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApKSAhPSAwKSB7CisrI2Vsc2UKKyAgICAgaWYgKChmcCA9IGZzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApKSAhPSAwKSB7CisrI2VuZGlmCisgCXNldGJ1ZihmcCwgKGNoYXIgKikgMCk7CisgCisgCS8qCitAQCAtMTEyLDYgKzE0NiwyNSBAQAorIAkgICAgICogYWRkcmVzc2VzIGZyb20gdGhlIHF1ZXJ5IHNvY2tldC4KKyAJICAgICAqLworIAorKyNpZmRlZiBJTkVUNgorKwkgICAgbWVtY3B5KCZvdXJfcXVlcnlfc2luLCBvdXJfc2luLCBhbGVuKTsKKysJICAgIG1lbWNweSgmcm10X3F1ZXJ5X3Npbiwgcm10X3NpbiwgYWxlbik7CisrCSAgICBzd2l0Y2ggKG91cl9zaW4tPnNhX2ZhbWlseSkgeworKwkgICAgY2FzZSBBRl9JTkVUOgorKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmb3VyX3F1ZXJ5X3NpbiktPnNpbl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmcm10X3F1ZXJ5X3NpbiktPnNpbl9wb3J0ID0gaHRvbnMoUkZDOTMxX1BPUlQpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIEFGX0lORVQ2OgorKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm91cl9xdWVyeV9zaW4pLT5zaW42X3BvcnQgPSBodG9ucyhBTllfUE9SVCk7CisrCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm10X3F1ZXJ5X3NpbiktPnNpbjZfcG9ydCA9IGh0b25zKFJGQzkzMV9QT1JUKTsKKysJCWJyZWFrOworKwkgICAgfQorKworKwkgICAgaWYgKGJpbmQoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIG91cl9xdWVyeV9zaW4sCisrCQkgICAgIGFsZW4pID49IDAgJiYKKysJCWNvbm5lY3QoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIHJtdF9xdWVyeV9zaW4sCisrCQkJYWxlbikgPj0gMCkgeworKyNlbHNlCisgCSAgICBvdXJfcXVlcnlfc2luID0gKm91cl9zaW47CisgCSAgICBvdXJfcXVlcnlfc2luLnNpbl9wb3J0ID0gaHRvbnMoQU5ZX1BPUlQpOworIAkgICAgcm10X3F1ZXJ5X3NpbiA9ICpybXRfc2luOworQEAgLTEyMSw2ICsxNzQsNyBAQAorIAkJICAgICBzaXplb2Yob3VyX3F1ZXJ5X3NpbikpID49IDAgJiYKKyAJCWNvbm5lY3QoZmlsZW5vKGZwKSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmIHJtdF9xdWVyeV9zaW4sCisgCQkJc2l6ZW9mKHJtdF9xdWVyeV9zaW4pKSA+PSAwKSB7CisrI2VuZGlmCisgCisgCQkvKgorIAkJICogU2VuZCBxdWVyeSB0byBzZXJ2ZXIuIE5lZ2xlY3QgdGhlIHJpc2sgdGhhdCBhIDEzLWJ5dGUKK0BAIC0xMjksOCArMTgzLDEzIEBACisgCQkgKi8KKyAKKyAJCWZwcmludGYoZnAsICIldSwldVxyXG4iLAorKyNpZmRlZiBJTkVUNgorKwkJCW50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopcm10X3NpbiktPnNpbl9wb3J0KSwKKysJCQludG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW91cl9zaW4pLT5zaW5fcG9ydCkpOworKyNlbHNlCisgCQkJbnRvaHMocm10X3Npbi0+c2luX3BvcnQpLAorIAkJCW50b2hzKG91cl9zaW4tPnNpbl9wb3J0KSk7CisrI2VuZGlmCisgCQlmZmx1c2goZnApOworIAorIAkJLyoKK0BAIC0xNDQsOCArMjAzLDEzIEBACisgCQkgICAgJiYgZmVycm9yKGZwKSA9PSAwICYmIGZlb2YoZnApID09IDAKKyAJCSAgICAmJiBzc2NhbmYoYnVmZmVyLCAiJXUgLCAldSA6IFVTRVJJRCA6JSpbXjpdOiUyNTVzIiwKKyAJCQkgICAgICAmcm10X3BvcnQsICZvdXJfcG9ydCwgdXNlcikgPT0gMworKyNpZmRlZiBJTkVUNgorKwkJICAgICYmIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopcm10X3NpbiktPnNpbl9wb3J0KSA9PSBybXRfcG9ydAorKwkJICAgICYmIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopb3VyX3NpbiktPnNpbl9wb3J0KSA9PSBvdXJfcG9ydCkgeworKyNlbHNlCisgCQkgICAgJiYgbnRvaHMocm10X3Npbi0+c2luX3BvcnQpID09IHJtdF9wb3J0CisgCQkgICAgJiYgbnRvaHMob3VyX3Npbi0+c2luX3BvcnQpID09IG91cl9wb3J0KSB7CisrI2VuZGlmCisgCisgCQkgICAgLyoKKyAJCSAgICAgKiBTdHJpcCB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4uIEl0IGlzIHBhcnQgb2YgdGhlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMJMTk5Ny0wMy0yMSAxOToyNzoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNSw3ICsyNSw5IEBACisgI2RlZmluZQlJTkFERFJfTk9ORQkoLTEpCQkvKiBYWFggc2hvdWxkIGJlIDB4ZmZmZmZmZmYgKi8KKyAjZW5kaWYKKyAKKysjaWZuZGVmIElORVQ2CisgZXh0ZXJuIGNoYXIgKm1hbGxvYygpOworKyNlbmRpZgorIAorIC8qIEFwcGxpY2F0aW9uLXNwZWNpZmljLiAqLworIAorQEAgLTM5LDYgKzQxLDcgQEAKKyBpbnQgICAgIGRlbnlfc2V2ZXJpdHkgPSBMT0dfV0FSTklORzsKKyBpbnQgICAgIHJmYzkzMV90aW1lb3V0ID0gUkZDOTMxX1RJTUVPVVQ7CisgCisrI2lmbmRlZiBJTkVUNgorIC8qIGR1cF9ob3N0ZW50IC0gY3JlYXRlIGhvc3RlbnQgaW4gb25lIG1lbW9yeSBibG9jayAqLworIAorIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZHVwX2hvc3RlbnQoaHApCitAQCAtNzMsOSArNzYsNDYgQEAKKyAgICAgfQorICAgICByZXR1cm4gKCZoYi0+aG9zdCk7CisgfQorKyNlbmRpZgorIAorIC8qIGZpbmRfaW5ldF9hZGRyIC0gZmluZCBhbGwgYWRkcmVzc2VzIGZvciB0aGlzIGhvc3QsIHJlc3VsdCB0byBmcmVlKCkgKi8KKyAKKysjaWZkZWYgSU5FVDYKKytzdHJ1Y3QgYWRkcmluZm8gKmZpbmRfaW5ldF9hZGRyKGhvc3QpCisrY2hhciAgICpob3N0OworK3sKKysgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqcmVzOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9OVU1FUklDSE9TVDsKKysgICAgaWYgKGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsICZoaW50cywgJnJlcykgPT0gMCkKKysJcmV0dXJuIChyZXMpOworKworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworKyAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKyAgICBoaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUU7CisrICAgIGlmIChnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCAmaGludHMsICZyZXMpICE9IDApIHsKKysJdGNwZF93YXJuKCIlczogaG9zdCBub3QgZm91bmQiLCBob3N0KTsKKysJcmV0dXJuICgwKTsKKysgICAgfQorKyAgICBpZiAocmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYgJiYgcmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVCkgeworKwl0Y3BkX3dhcm4oIiVkOiBub3QgYW4gaW50ZXJuZXQgaG9zdCIsIHJlcy0+YWlfZmFtaWx5KTsKKysJZnJlZWFkZHJpbmZvKHJlcyk7CisrCXJldHVybiAoMCk7CisrICAgIH0KKysgICAgaWYgKCFyZXMtPmFpX2Nhbm9ubmFtZSkgeworKwl0Y3BkX3dhcm4oIiVzOiBob3N0bmFtZSBhbGlhcyIsIGhvc3QpOworKwl0Y3BkX3dhcm4oIihjYW5ub3Qgb2J0YWluIG9mZmljaWFsIG5hbWUpIiwgcmVzLT5haV9jYW5vbm5hbWUpOworKyAgICB9IGVsc2UgaWYgKFNUUl9ORShob3N0LCByZXMtPmFpX2Nhbm9ubmFtZSkpIHsKKysJdGNwZF93YXJuKCIlczogaG9zdG5hbWUgYWxpYXMiLCBob3N0KTsKKysJdGNwZF93YXJuKCIob2ZmaWNpYWwgbmFtZTogJS4qcykiLCBTVFJJTkdfTEVOR1RILCByZXMtPmFpX2Nhbm9ubmFtZSk7CisrICAgIH0KKysgICAgcmV0dXJuIChyZXMpOworK30KKysjZWxzZQorIHN0cnVjdCBob3N0ZW50ICpmaW5kX2luZXRfYWRkcihob3N0KQorIGNoYXIgICAqaG9zdDsKKyB7CitAQCAtMTE4LDYgKzE1OCw3IEBACisgICAgIH0KKyAgICAgcmV0dXJuIChkdXBfaG9zdGVudChocCkpOworIH0KKysjZW5kaWYKKyAKKyAvKiBjaGVja19kbnMgLSBnaXZlIGVhY2ggYWRkcmVzcyB0aG9yb3VnaCB3b3Jrb3V0LCByZXR1cm4gYWRkcmVzcyBjb3VudCAqLworIAorQEAgLTEyNSw4ICsxNjYsMTMgQEAKKyBjaGFyICAgKmhvc3Q7CisgeworICAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvIHJlcXVlc3Q7CisrI2lmZGVmIElORVQ2CisrICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNpbjsKKysgICAgc3RydWN0IGFkZHJpbmZvICpocCwgKnJlczsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrI2VuZGlmCisgICAgIGludCAgICAgY291bnQ7CisgICAgIGNoYXIgICAqYWRkcjsKKyAKK0BAIC0xMzQsMTEgKzE4MCwxOCBAQAorIAlyZXR1cm4gKDApOworICAgICByZXF1ZXN0X2luaXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZzaW4sIDApOworICAgICBzb2NrX21ldGhvZHMoJnJlcXVlc3QpOworKyNpZm5kZWYgSU5FVDYKKyAgICAgbWVtc2V0KChjaGFyICopICZzaW4sIDAsIHNpemVvZihzaW4pKTsKKyAgICAgc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworKyNlbmRpZgorIAorKyNpZmRlZiBJTkVUNgorKyAgICBmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCW1lbWNweSgmc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrI2Vsc2UKKyAgICAgZm9yIChjb3VudCA9IDA7IChhZGRyID0gaHAtPmhfYWRkcl9saXN0W2NvdW50XSkgIT0gMDsgY291bnQrKykgeworIAltZW1jcHkoKGNoYXIgKikgJnNpbi5zaW5fYWRkciwgYWRkciwgc2l6ZW9mKHNpbi5zaW5fYWRkcikpOworKyNlbmRpZgorIAorIAkvKgorIAkgKiBGb3JjZSBob3N0IG5hbWUgYW5kIGFkZHJlc3MgY29udmVyc2lvbnMuIFVzZSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUKK0BAIC0xNTEsNyArMjA0LDExIEBACisgCSAgICB0Y3BkX3dhcm4oImhvc3QgYWRkcmVzcyAlcy0+bmFtZSBsb29rdXAgZmFpbGVkIiwKKyAJCSAgICAgIGV2YWxfaG9zdGFkZHIocmVxdWVzdC5jbGllbnQpKTsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICBmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgICAgIGZyZWUoKGNoYXIgKikgaHApOworKyNlbmRpZgorICAgICByZXR1cm4gKGNvdW50KTsKKyB9CisgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmggdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmgJMTk5NC0xMi0zMSAxODoxOToyMC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmgJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC00LDYgKzQsMTAgQEAKKyAgICogQXV0aG9yOiBXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisgICAqLworIAorKyNpZmRlZiBJTkVUNgorK2V4dGVybiBzdHJ1Y3QgYWRkcmluZm8gKmZpbmRfaW5ldF9hZGRyKCk7CisrI2Vsc2UKKyBleHRlcm4gc3RydWN0IGhvc3RlbnQgKmZpbmRfaW5ldF9hZGRyKCk7CisrI2VuZGlmCisgZXh0ZXJuIGludCBjaGVja19kbnMoKTsKKyBleHRlcm4gaW50IGNoZWNrX3BhdGgoKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvc29ja2V0LmMgdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9zb2NrZXQuYwkyMDA0LTA0LTEwIDE5OjIyOjU4LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvc29ja2V0LmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yNCwxMyArMjQsMjIgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisrI2lmZGVmIElOVDMyX1QKKyt0eXBlZGVmIHVpbnQzMl90IHVfaW50MzJfdDsKKysjZW5kaWYKKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxuZXRkYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXNsb2cuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCisrI2lmZGVmIElORVQ2CisrI2lmbmRlZiBOSV9XSVRIU0NPUEVJRAorKyNkZWZpbmUgTklfV0lUSFNDT1BFSUQJMAorKyNlbmRpZgorKyNlbHNlCisgZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSgpOworKyNlbmRpZgorIAorIC8qIExvY2FsIHN0dWZmLiAqLworIAorQEAgLTc5LDggKzg4LDEzIEBACisgdm9pZCAgICBzb2NrX2hvc3QocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGNsaWVudDsKKysgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNlcnZlcjsKKysjZWxzZQorICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisrI2VuZGlmCisgICAgIGludCAgICAgbGVuOworICAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBpbnQgICAgIGZkID0gcmVxdWVzdC0+ZmQ7CitAQCAtMTA5LDcgKzEyMywxMSBAQAorIAltZW1zZXQoYnVmLCAwIHNpemVvZihidWYpKTsKKyAjZW5kaWYKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0LT5jbGllbnQtPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50OworKyNlbHNlCisgICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gJmNsaWVudDsKKysjZW5kaWYKKyAKKyAgICAgLyoKKyAgICAgICogRGV0ZXJtaW5lIHRoZSBzZXJ2ZXIgYmluZGluZy4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgdXNlcm5hbWUKK0BAIC0xMjIsNyArMTQwLDExIEBACisgCXRjcGRfd2FybigiZ2V0c29ja25hbWU6ICVtIik7CisgCXJldHVybjsKKyAgICAgfQorKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2VydmVyOworKyNlbHNlCisgICAgIHJlcXVlc3QtPnNlcnZlci0+c2luID0gJnNlcnZlcjsKKysjZW5kaWYKKyB9CisgCisgLyogc29ja19ob3N0YWRkciAtIG1hcCBlbmRwb2ludCBhZGRyZXNzIHRvIHByaW50YWJsZSBmb3JtICovCitAQCAtMTMwLDEwICsxNTIsMjYgQEAKKyB2b2lkICAgIHNvY2tfaG9zdGFkZHIoaG9zdCkKKyBzdHJ1Y3QgaG9zdF9pbmZvICpob3N0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBob3N0LT5zaW47CisrICAgIGludCBzYWxlbjsKKysKKysgICAgaWYgKCFzaW4pCisrCXJldHVybjsKKysjaWZkZWYgU0lONl9MRU4KKysgICAgc2FsZW4gPSBzaW4tPnNhX2xlbjsKKysjZWxzZQorKyAgICBzYWxlbiA9IChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSA/IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pCisrCQkJCQk6IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKysjZW5kaWYKKysgICAgZ2V0bmFtZWluZm8oc2luLCBzYWxlbiwgaG9zdC0+YWRkciwgc2l6ZW9mKGhvc3QtPmFkZHIpLAorKwkJTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QgfCBOSV9XSVRIU0NPUEVJRCk7CisrI2Vsc2UKKyAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSBob3N0LT5zaW47CisgCisgICAgIGlmIChzaW4gIT0gMCkKKyAJU1RSTl9DUFkoaG9zdC0+YWRkciwgaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpLCBzaXplb2YoaG9zdC0+YWRkcikpOworKyNlbmRpZgorIH0KKyAKKyAvKiBzb2NrX2hvc3RuYW1lIC0gbWFwIGVuZHBvaW50IGFkZHJlc3MgdG8gaG9zdCBuYW1lICovCitAQCAtMTQxLDYgKzE3OSwxNjAgQEAKKyB2b2lkICAgIHNvY2tfaG9zdG5hbWUoaG9zdCkKKyBzdHJ1Y3QgaG9zdF9pbmZvICpob3N0OworIHsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyICpzaW4gPSBob3N0LT5zaW47CisrICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW40OworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMsICpyZXMwID0gTlVMTDsKKysgICAgaW50IHNhbGVuLCBhbGVuLCBlcnIgPSAxOworKyAgICBjaGFyICphcCA9IE5VTEwsICpyYXAsIGhuYW1lW05JX01BWEhPU1RdOworKworKyAgICBpZiAoc2luICE9IE5VTEwpIHsKKysJaWYgKHNpbi0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisrCSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzaW47CisrCisrCSAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKysJCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKKysjaWZkZWYgU0lONl9MRU4KKysJCXNpbjQuc2luX2xlbiA9IHNpemVvZihzaW40KTsKKysjZW5kaWYKKysJCXNpbjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisrCQlzaW40LnNpbl9wb3J0ID0gc2luNi0+c2luNl9wb3J0OworKwkJc2luNC5zaW5fYWRkci5zX2FkZHIgPSAqKHVfaW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIuczZfYWRkclsxMl07CisrCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjQ7CisrCSAgICB9CisrCX0KKysJc3dpdGNoIChzaW4tPnNhX2ZhbWlseSkgeworKwljYXNlIEFGX0lORVQ6CisrCSAgICBhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopc2luKS0+c2luX2FkZHI7CisrCSAgICBhbGVuID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKysJICAgIHNhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisrCSAgICBicmVhazsKKysJY2FzZSBBRl9JTkVUNjoKKysJICAgIGFwID0gKGNoYXIgKikmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luKS0+c2luNl9hZGRyOworKwkgICAgYWxlbiA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworKwkgICAgc2FsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisrCSAgICBicmVhazsKKysJZGVmYXVsdDoKKysJICAgIGJyZWFrOworKwl9CisrCWlmIChhcCkKKysJICAgIGVyciA9IGdldG5hbWVpbmZvKHNpbiwgc2FsZW4sIGhuYW1lLCBzaXplb2YoaG5hbWUpLAorKwkJCSAgICAgIE5VTEwsIDAsIE5JX1dJVEhTQ09QRUlEIHwgTklfTkFNRVJFUUQpOworKyAgICB9CisrICAgIGlmICghZXJyKSB7CisrCisrCVNUUk5fQ1BZKGhvc3QtPm5hbWUsIGhuYW1lLCBzaXplb2YoaG9zdC0+bmFtZSkpOworKworKwkvKiByZWplY3QgbnVtZXJpYyBhZGRyZXNzZXMgKi8KKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUUgfCBBSV9OVU1FUklDSE9TVDsKKysJaWYgKChlcnIgPSBnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSA9PSAwKSkgeworKwkgICAgZnJlZWFkZHJpbmZvKHJlczApOworKwkgICAgcmVzMCA9IE5VTEw7CisrCSAgICB0Y3BkX3dhcm4oImhvc3QgbmFtZS9uYW1lIG1pc21hdGNoOiAiCisrCQkgICAgICAicmV2ZXJzZSBsb29rdXAgcmVzdWx0cyBpbiBub24tRlFETiAlcyIsCisrCQkgICAgICBob3N0LT5uYW1lKTsKKysJICAgIHN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CS8qIG5hbWUgaXMgYmFkLCBjbG9iYmVyIGl0ICovCisrCX0KKysJZXJyID0gIWVycjsKKysgICAgfQorKyAgICBpZiAoIWVycikgeworKwkvKiB3ZSBhcmUgbm93IHN1cmUgdGhhdCB0aGlzIGlzIG5vbi1udW1lcmljICovCisrCisrCS8qCisrCSAqIFZlcmlmeSB0aGF0IHRoZSBhZGRyZXNzIGlzIGEgbWVtYmVyIG9mIHRoZSBhZGRyZXNzIGxpc3QgcmV0dXJuZWQKKysJICogYnkgZ2V0aG9zdGJ5bmFtZShob3N0bmFtZSkuCisrCSAqIAorKwkgKiBWZXJpZnkgYWxzbyB0aGF0IGdldGhvc3RieWFkZHIoKSBhbmQgZ2V0aG9zdGJ5bmFtZSgpIHJldHVybiB0aGUgc2FtZQorKwkgKiBob3N0bmFtZSwgb3IgcnNoZCBhbmQgcmxvZ2luZCBtYXkgc3RpbGwgZW5kIHVwIGJlaW5nIHNwb29mZWQuCisrCSAqIAorKwkgKiBPbiBzb21lIHNpdGVzLCBnZXRob3N0YnluYW1lKCJsb2NhbGhvc3QiKSByZXR1cm5zICJsb2NhbGhvc3QuZG9tYWluIi4KKysJICogVGhpcyBpcyBhIEROUyBhcnRlZmFjdC4gV2UgdHJlYXQgaXQgYXMgYSBzcGVjaWFsIGNhc2UuIFdoZW4gd2UKKysJICogY2FuJ3QgYmVsaWV2ZSB0aGUgYWRkcmVzcyBsaXN0IGZyb20gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0IikKKysJICogd2UncmUgaW4gYmlnIHRyb3VibGUgYW55d2F5LgorKwkgKi8KKysKKysJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRzLmFpX2ZhbWlseSA9IHNpbi0+c2FfZmFtaWx5OworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9mbGFncyA9IEFJX1BBU1NJVkUgfCBBSV9DQU5PTk5BTUU7CisrCWlmIChnZXRhZGRyaW5mbyhob3N0LT5uYW1lLCBOVUxMLCAmaGludHMsICZyZXMwKSAhPSAwKSB7CisrCisrCSAgICAvKgorKwkgICAgICogVW5hYmxlIHRvIHZlcmlmeSB0aGF0IHRoZSBob3N0IG5hbWUgbWF0Y2hlcyB0aGUgYWRkcmVzcy4gVGhpcworKwkgICAgICogbWF5IGJlIGEgdHJhbnNpZW50IHByb2JsZW0gb3IgYSBib3RjaGVkIG5hbWUgc2VydmVyIHNldHVwLgorKwkgICAgICovCisrCisrCSAgICB0Y3BkX3dhcm4oImNhbid0IHZlcmlmeSBob3N0bmFtZTogZ2V0YWRkcmluZm8oJXMsICVzKSBmYWlsZWQiLAorKwkJICAgICAgaG9zdC0+bmFtZSwKKysJCSAgICAgIChzaW4tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSA/ICJBRl9JTkVUIiA6ICJBRl9JTkVUNiIpOworKworKwl9IGVsc2UgaWYgKChyZXMwLT5haV9jYW5vbm5hbWUgPT0gTlVMTAorKwkJICAgIHx8IFNUUl9ORShob3N0LT5uYW1lLCByZXMwLT5haV9jYW5vbm5hbWUpKQorKwkJICAgJiYgU1RSX05FKGhvc3QtPm5hbWUsICJsb2NhbGhvc3QiKSkgeworKworKwkgICAgLyoKKysJICAgICAqIFRoZSBnZXRob3N0YnlhZGRyKCkgYW5kIGdldGhvc3RieW5hbWUoKSBjYWxscyBkaWQgbm90IHJldHVybgorKwkgICAgICogdGhlIHNhbWUgaG9zdG5hbWUuIFRoaXMgY291bGQgYmUgYSBuYW1lc2VydmVyIGNvbmZpZ3VyYXRpb24KKysJICAgICAqIHByb2JsZW0uIEl0IGNvdWxkIGFsc28gYmUgdGhhdCBzb21lb25lIGlzIHRyeWluZyB0byBzcG9vZiB1cy4KKysJICAgICAqLworKworKwkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogJXMgIT0gJS4qcyIsCisrCQkgICAgICBob3N0LT5uYW1lLCBTVFJJTkdfTEVOR1RILAorKwkJICAgICAgKHJlczAtPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKSA/ICIiIDogcmVzMC0+YWlfY2Fub25uYW1lKTsKKysKKysJfSBlbHNlIHsKKysKKysJICAgIC8qCisrCSAgICAgKiBUaGUgYWRkcmVzcyBzaG91bGQgYmUgYSBtZW1iZXIgb2YgdGhlIGFkZHJlc3MgbGlzdCByZXR1cm5lZCBieQorKwkgICAgICogZ2V0aG9zdGJ5bmFtZSgpLiBXZSBzaG91bGQgZmlyc3QgdmVyaWZ5IHRoYXQgdGhlIGhfYWRkcnR5cGUKKysJICAgICAqIGZpZWxkIGlzIEFGX0lORVQsIGJ1dCB0aGlzIHByb2dyYW0gaGFzIGFscmVhZHkgY2F1c2VkIHRvbyBtdWNoCisrCSAgICAgKiBncmllZiBvbiBzeXN0ZW1zIHdpdGggYnJva2VuIGxpYnJhcnkgY29kZS4KKysJICAgICAqLworKworKwkgICAgZm9yIChyZXMgPSByZXMwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCkgeworKwkJaWYgKHJlcy0+YWlfZmFtaWx5ICE9IHNpbi0+c2FfZmFtaWx5KQorKwkJICAgIGNvbnRpbnVlOworKwkJc3dpdGNoIChyZXMtPmFpX2ZhbWlseSkgeworKwkJY2FzZSBBRl9JTkVUOgorKwkJICAgIHJhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luICopcmVzLT5haV9hZGRyKS0+c2luX2FkZHI7CisrCQkgICAgYnJlYWs7CisrCQljYXNlIEFGX0lORVQ2OgorKwkJICAgIC8qIG5lZWQgdG8gY2hlY2sgc2NvcGVfaWQgKi8KKysJCSAgICBpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2luKS0+c2luNl9zY29wZV9pZCAhPQorKwkJICAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZXMtPmFpX2FkZHIpLT5zaW42X3Njb3BlX2lkKSB7CisrCQkJY29udGludWU7CisrCQkgICAgfQorKwkJICAgIHJhcCA9IChjaGFyICopJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfYWRkcjsKKysJCSAgICBicmVhazsKKysJCWRlZmF1bHQ6CisrCQkgICAgY29udGludWU7CisrCQl9CisrCQlpZiAobWVtY21wKHJhcCwgYXAsIGFsZW4pID09IDApIHsKKysJCSAgICBmcmVlYWRkcmluZm8ocmVzMCk7CisrCQkgICAgcmV0dXJuOwkJCS8qIG5hbWUgaXMgZ29vZCwga2VlcCBpdCAqLworKwkJfQorKwkgICAgfQorKworKwkgICAgLyoKKysJICAgICAqIFRoZSBob3N0IG5hbWUgZG9lcyBub3QgbWFwIHRvIHRoZSBpbml0aWFsIGFkZHJlc3MuIFBlcmhhcHMKKysJICAgICAqIHNvbWVvbmUgaGFzIG1lc3NlZCB1cC4gUGVyaGFwcyBzb21lb25lIGNvbXByb21pc2VkIGEgbmFtZQorKwkgICAgICogc2VydmVyLgorKwkgICAgICovCisrCisrCSAgICBnZXRuYW1laW5mbyhzaW4sIHNhbGVuLCBobmFtZSwgc2l6ZW9mKGhuYW1lKSwKKysJCQlOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCB8IE5JX1dJVEhTQ09QRUlEKTsKKysJICAgIHRjcGRfd2FybigiaG9zdCBuYW1lL2FkZHJlc3MgbWlzbWF0Y2g6ICVzICE9ICUuKnMiLAorKwkJICAgICAgaG5hbWUsIFNUUklOR19MRU5HVEgsCisrCQkgICAgICAocmVzMC0+YWlfY2Fub25uYW1lID09IE5VTEwpID8gIiIgOiByZXMwLT5haV9jYW5vbm5hbWUpOworKwl9CisrCXN0cmNweShob3N0LT5uYW1lLCBwYXJhbm9pZCk7CQkvKiBuYW1lIGlzIGJhZCwgY2xvYmJlciBpdCAqLworKwlpZiAocmVzMCkKKysJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKysgICAgfQorKyNlbHNlIC8qIElORVQ2ICovCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gaG9zdC0+c2luOworICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisgICAgIGludCAgICAgaTsKK0BAIC0yMjAsNiArNDEyLDcgQEAKKyAJfQorIAlzdHJjcHkoaG9zdC0+bmFtZSwgcGFyYW5vaWQpOwkJLyogbmFtZSBpcyBiYWQsIGNsb2JiZXIgaXQgKi8KKyAgICAgfQorKyNlbmRpZiAvKiBJTkVUNiAqLworIH0KKyAKKyAvKiBzb2NrX3NpbmsgLSBhYnNvcmIgdW5yZWNlaXZlZCBJUCBkYXRhZ3JhbSAqLworQEAgLTIyOCw3ICs0MjEsMTEgQEAKKyBpbnQgICAgIGZkOworIHsKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2luOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisrI2VuZGlmCisgICAgIGludCAgICAgc2l6ZSA9IHNpemVvZihzaW4pOworIAorICAgICAvKgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5jCTE5OTYtMDItMTEgMTc6MDE6MzMuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjAsNyArMTIwLDEyIEBACisgCisgICAgIC8qIFJlcG9ydCByZXF1ZXN0IGFuZCBpbnZva2UgdGhlIHJlYWwgZGFlbW9uIHByb2dyYW0uICovCisgCisrI2lmZGVmIElORVQ2CisrICAgIHN5c2xvZyhhbGxvd19zZXZlcml0eSwgImNvbm5lY3QgZnJvbSAlcyAoJXMpIiwKKysJICAgZXZhbF9jbGllbnQoJnJlcXVlc3QpLCBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisrI2Vsc2UKKyAgICAgc3lzbG9nKGFsbG93X3NldmVyaXR5LCAiY29ubmVjdCBmcm9tICVzIiwgZXZhbF9jbGllbnQoJnJlcXVlc3QpKTsKKysjZW5kaWYKKyAgICAgY2xvc2Vsb2coKTsKKyAgICAgKHZvaWQpIGV4ZWN2KHBhdGgsIGFyZ3YpOworICAgICBzeXNsb2coTE9HX0VSUiwgImVycm9yOiBjYW5ub3QgZXhlY3V0ZSAlczogJW0iLCBwYXRoKTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkxOTk3LTAyLTEyIDAyOjEzOjI1LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMjIsNiArMjIsOSBAQAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysjaWZkZWYgSU5FVDYKKysjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorKyNlbmRpZgorICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisgI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorQEAgLTM5Nyw2ICs0MDAsMzEgQEAKKyAgICAgfQorIH0KKyAKKysjaWZkZWYgSU5FVDYKKytzdGF0aWMgaW50IGlzX2luZXQ2X2FkZHIocGF0KQorKyAgICBjaGFyICpwYXQ7CisreworKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CisrICAgIGludCBsZW4sIHJldDsKKysgICAgY2hhciBjaDsKKysKKysgICAgaWYgKCpwYXQgIT0gJ1snKQorKwlyZXR1cm4gKDApOworKyAgICBsZW4gPSBzdHJsZW4ocGF0KTsKKysgICAgaWYgKChjaCA9IHBhdFtsZW4gLSAxXSkgIT0gJ10nKQorKwlyZXR1cm4gKDApOworKyAgICBwYXRbbGVuIC0gMV0gPSAnXDAnOworKyAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfSU5FVDY7CisrICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisrICAgIGhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX05VTUVSSUNIT1NUOworKyAgICBpZiAoKHJldCA9IGdldGFkZHJpbmZvKHBhdCArIDEsIE5VTEwsICZoaW50cywgJnJlcykpID09IDApCisrCWZyZWVhZGRyaW5mbyhyZXMpOworKyAgICBwYXRbbGVuIC0gMV0gPSBjaDsKKysgICAgcmV0dXJuIChyZXQgPT0gMCk7CisrfQorKyNlbmRpZgorKworIC8qIGNoZWNrX2hvc3QgLSBjcml0aWNpemUgaG9zdCBwYXR0ZXJuICovCisgCisgc3RhdGljIGludCBjaGVja19ob3N0KHBhdCkKK0BAIC00MjMsMTQgKzQ1MSwyNyBAQAorICNlbmRpZgorICNlbmRpZgorICAgICB9IGVsc2UgaWYgKG1hc2sgPSBzcGxpdF9hdChwYXQsICcvJykpIHsJLyogbmV0d29yay9uZXRtYXNrICovCisrI2lmZGVmIElORVQ2CisrCWludCBtYXNrX2xlbjsKKysKKysJaWYgKChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKysJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrCSAgICAmJiAoIWlzX2luZXQ2X2FkZHIocGF0KQorKwkJfHwgKChtYXNrX2xlbiA9IGF0b2kobWFzaykpIDwgMCB8fCBtYXNrX2xlbiA+IDEyOCkpKQorKyNlbHNlCisgCWlmIChkb3RfcXVhZF9hZGRyKHBhdCkgPT0gSU5BRERSX05PTkUKKyAJICAgIHx8IGRvdF9xdWFkX2FkZHIobWFzaykgPT0gSU5BRERSX05PTkUpCisrI2VuZGlmCisgCSAgICB0Y3BkX3dhcm4oIiVzLyVzOiBiYWQgbmV0L21hc2sgcGF0dGVybiIsIHBhdCwgbWFzayk7CisgICAgIH0gZWxzZSBpZiAoU1RSX0VRKHBhdCwgIkZBSUwiKSkgewkJLyogb2Jzb2xldGUgKi8KKyAJdGNwZF93YXJuKCJGQUlMIGlzIG5vIGxvbmdlciByZWNvZ25pemVkIik7CisgCXRjcGRfd2FybigiKHVzZSBFWENFUFQgb3IgREVOWSBpbnN0ZWFkKSIpOworICAgICB9IGVsc2UgaWYgKHJlc2VydmVkX25hbWUocGF0KSkgewkJLyogb3RoZXIgcmVzZXJ2ZWQgKi8KKyAJIC8qIHZvaWQgKi8gOworKyNpZmRlZiBJTkVUNgorKyAgICB9IGVsc2UgaWYgKGlzX2luZXQ2X2FkZHIocGF0KSkgeyAvKiBJUHY2IGFkZHJlc3MgKi8KKysJYWRkcl9jb3VudCA9IDE7CisrI2VuZGlmCisgICAgIH0gZWxzZSBpZiAoTk9UX0lOQUREUihwYXQpKSB7CQkvKiBpbnRlcm5ldCBuYW1lICovCisgCWlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKKyAJICAgIHRjcGRfd2FybigiJXM6IGRvbWFpbiBvciBob3N0IG5hbWUgZW5kcyBpbiBkb3QiLCBwYXQpOworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmggdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oCTE5OTYtMDMtMTkgMTY6MjI6MjUuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkLmgJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMSw3ICsxMSwxMSBAQAorIHN0cnVjdCBob3N0X2luZm8geworICAgICBjaGFyICAgIG5hbWVbU1RSSU5HX0xFTkdUSF07CS8qIGFjY2VzcyB2aWEgZXZhbF9ob3N0bmFtZShob3N0KSAqLworICAgICBjaGFyICAgIGFkZHJbU1RSSU5HX0xFTkdUSF07CS8qIGFjY2VzcyB2aWEgZXZhbF9ob3N0YWRkcihob3N0KSAqLworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbjsJCS8qIHNvY2tldCBhZGRyZXNzIG9yIDAgKi8KKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsJCS8qIHNvY2tldCBhZGRyZXNzIG9yIDAgKi8KKysjZW5kaWYKKyAgICAgc3RydWN0IHRfdW5pdGRhdGEgKnVuaXQ7CQkvKiBUTEkgdHJhbnNwb3J0IGFkZHJlc3Mgb3IgMCAqLworICAgICBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwkvKiBmb3Igc2hhcmVkIGluZm9ybWF0aW9uICovCisgfTsKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZG1hdGNoLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkbWF0Y2guYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkbWF0Y2guYwkxOTk2LTAyLTExIDE3OjAxOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZG1hdGNoLmMJMjAwNC0wNC0xMCAxOTowNzo0My4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Nyw3ICs1NywxMSBAQAorIGludCAgICAgYXJnYzsKKyBjaGFyICAqKmFyZ3Y7CisgeworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpocCwgKnJlczsKKysjZWxzZQorICAgICBzdHJ1Y3QgaG9zdGVudCAqaHA7CisrI2VuZGlmCisgICAgIGNoYXIgICAqbXluYW1lID0gYXJndlswXTsKKyAgICAgY2hhciAgICpjbGllbnQ7CisgICAgIGNoYXIgICAqc2VydmVyOworQEAgLTY4LDggKzcyLDEzIEBACisgICAgIGludCAgICAgY2g7CisgICAgIGNoYXIgICAqaW5ldGNmID0gMDsKKyAgICAgaW50ICAgICBjb3VudDsKKysjaWZkZWYgSU5FVDYKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2VydmVyX3NpbjsKKysgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgY2xpZW50X3NpbjsKKysjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyX3NpbjsKKyAgICAgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudF9zaW47CisrI2VuZGlmCisgICAgIHN0cnVjdCBzdGF0IHN0OworIAorICAgICAvKgorQEAgLTE3MiwxMyArMTgxLDIwIEBACisgICAgIGlmIChOT1RfSU5BRERSKHNlcnZlcikgPT0gMCB8fCBIT1NUTkFNRV9LTk9XTihzZXJ2ZXIpKSB7CisgCWlmICgoaHAgPSBmaW5kX2luZXRfYWRkcihzZXJ2ZXIpKSA9PSAwKQorIAkgICAgZXhpdCgxKTsKKysjaWZuZGVmIElORVQ2CisgCW1lbXNldCgoY2hhciAqKSAmc2VydmVyX3NpbiwgMCwgc2l6ZW9mKHNlcnZlcl9zaW4pKTsKKyAJc2VydmVyX3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKysjZW5kaWYKKyAJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX1NFUlZFUl9TSU4sICZzZXJ2ZXJfc2luLCAwKTsKKyAKKysjaWZkZWYgSU5FVDYKKysJZm9yIChyZXMgPSBocCwgY291bnQgPSAwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCwgY291bnQrKykgeworKwkgICAgbWVtY3B5KCZzZXJ2ZXJfc2luLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbik7CisrI2Vsc2UKKyAJZm9yIChjb3VudCA9IDA7IChhZGRyID0gaHAtPmhfYWRkcl9saXN0W2NvdW50XSkgIT0gMDsgY291bnQrKykgeworIAkgICAgbWVtY3B5KChjaGFyICopICZzZXJ2ZXJfc2luLnNpbl9hZGRyLCBhZGRyLAorIAkJICAgc2l6ZW9mKHNlcnZlcl9zaW4uc2luX2FkZHIpKTsKKysjZW5kaWYKKyAKKyAJICAgIC8qCisgCSAgICAgKiBGb3JjZSBldmFsdWF0aW9uIG9mIHNlcnZlciBob3N0IG5hbWUgYW5kIGFkZHJlc3MuIEhvc3QgbmFtZQorQEAgLTE5NCw3ICsyMTAsMTEgQEAKKyAJICAgIGZwcmludGYoc3RkZXJyLCAiUGxlYXNlIHNwZWNpZnkgYW4gYWRkcmVzcyBpbnN0ZWFkXG4iKTsKKyAJICAgIGV4aXQoMSk7CisgCX0KKysjaWZkZWYgSU5FVDYKKysJZnJlZWFkZHJpbmZvKGhwKTsKKysjZWxzZQorIAlmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgfSBlbHNlIHsKKyAJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX1NFUlZFUl9OQU1FLCBzZXJ2ZXIsIDApOworICAgICB9CitAQCAtMjA4LDYgKzIyOCwxOCBAQAorIAl0Y3BkbWF0Y2goJnJlcXVlc3QpOworIAlleGl0KDApOworICAgICB9CisrI2lmZGVmIElORVQ2CisrICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKyAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKysgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfTlVNRVJJQ0hPU1Q7CisrICAgIGlmIChnZXRhZGRyaW5mbyhjbGllbnQsIE5VTEwsICZoaW50cywgJnJlcykgPT0gMCkgeworKwlmcmVlYWRkcmluZm8ocmVzKTsKKysJcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9BRERSLCBjbGllbnQsIDApOworKwl0Y3BkbWF0Y2goJnJlcXVlc3QpOworKwlleGl0KDApOworKyAgICB9CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIFBlcmhhcHMgdGhleSBhcmUgdGVzdGluZyBzcGVjaWFsIGNsaWVudCBob3N0bmFtZSBwYXR0ZXJucyB0aGF0IGFyZW4ndAorQEAgLTIyOSw2ICsyNjEsMzQgQEAKKyAgICAgICovCisgICAgIGlmICgoaHAgPSBmaW5kX2luZXRfYWRkcihjbGllbnQpKSA9PSAwKQorIAlleGl0KDEpOworKyNpZmRlZiBJTkVUNgorKyAgICByZXF1ZXN0X3NldCgmcmVxdWVzdCwgUlFfQ0xJRU5UX1NJTiwgJmNsaWVudF9zaW4sIDApOworKworKyAgICBmb3IgKHJlcyA9IGhwLCBjb3VudCA9IDA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0LCBjb3VudCsrKSB7CisrCW1lbWNweSgmY2xpZW50X3NpbiwgcmVzLT5haV9hZGRyLCByZXMtPmFpX2FkZHJsZW4pOworKworKwkvKgorKwkgKiBnZXRuYW1laW5mbygpIGRvZXNuJ3QgZG8gcmV2ZXJzZSBsb29rdXAgYWdhaW5zdCBsaW5rLWxvY2FsCisrCSAqIGFkZHJlc3MuICBTbywgd2UgcGFzcyB0aHJvdWdoIGhvc3QgbmFtZSBldmFsdWF0aW9uIGFnYWluc3QKKysJICogc3VjaCBhZGRyZXNzZXMuCisrCSAqLworKwlpZiAocmVzLT5haV9mYW1pbHkgIT0gQUZfSU5FVDYgfHwKKysJICAgICFJTjZfSVNfQUREUl9MSU5LTE9DQUwoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlcy0+YWlfYWRkciktPnNpbjZfYWRkcikpIHsKKysJICAgIC8qCisrCSAgICAgKiBGb3JjZSBldmFsdWF0aW9uIG9mIGNsaWVudCBob3N0IG5hbWUgYW5kIGFkZHJlc3MuIEhvc3QgbmFtZQorKwkgICAgICogY29uZmxpY3RzIHdpbGwgYmUgcmVwb3J0ZWQgd2hpbGUgZXZhbF9ob3N0bmFtZSgpIGRvZXMgaXRzIGpvYi4KKysJICAgICAqLworKwkgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9OQU1FLCAiIiwgUlFfQ0xJRU5UX0FERFIsICIiLCAwKTsKKysJICAgIGlmIChTVFJfRVEoZXZhbF9ob3N0bmFtZShyZXF1ZXN0LmNsaWVudCksIHVua25vd24pKQorKwkJdGNwZF93YXJuKCJob3N0IGFkZHJlc3MgJXMtPm5hbWUgbG9va3VwIGZhaWxlZCIsCisrCQkJICBldmFsX2hvc3RhZGRyKHJlcXVlc3QuY2xpZW50KSk7CisrCX0KKysJdGNwZG1hdGNoKCZyZXF1ZXN0KTsKKysJaWYgKHJlcy0+YWlfbmV4dCkKKysJICAgIHByaW50ZigiXG4iKTsKKysgICAgfQorKyAgICBmcmVlYWRkcmluZm8oaHApOworKyNlbHNlCisgICAgIG1lbXNldCgoY2hhciAqKSAmY2xpZW50X3NpbiwgMCwgc2l6ZW9mKGNsaWVudF9zaW4pKTsKKyAgICAgY2xpZW50X3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgcmVxdWVzdF9zZXQoJnJlcXVlc3QsIFJRX0NMSUVOVF9TSU4sICZjbGllbnRfc2luLCAwKTsKK0BAIC0yNTAsNiArMzEwLDcgQEAKKyAJICAgIHByaW50ZigiXG4iKTsKKyAgICAgfQorICAgICBmcmVlKChjaGFyICopIGhwKTsKKysjZW5kaWYKKyAgICAgZXhpdCgwKTsKKyB9CisgCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RsaS5jIHRjcF93cmFwcGVyc183LjYvdGxpLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGxpLmMJMTk5Ny0wMy0yMSAxOToyNzoyNi4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RsaS5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtNjUsOCArNjUsMTMgQEAKKyB2b2lkICAgIHRsaV9ob3N0KHJlcXVlc3QpCisgc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdDsKKyB7CisrI2lmZGVmIElORVQ2CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBjbGllbnQ7CisrICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzZXJ2ZXI7CisrI2Vsc2UKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnQ7CisgICAgIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyOworKyNlbmRpZgorIAorICAgICAvKgorICAgICAgKiBJZiB3ZSBkaXNjb3ZlciB0aGF0IHdlIGFyZSB1c2luZyBhbiBJUCB0cmFuc3BvcnQsIHByZXRlbmQgd2UgbmV2ZXIKK0BAIC03NiwxNCArODEsMjkgQEAKKyAKKyAgICAgdGxpX2VuZHBvaW50cyhyZXF1ZXN0KTsKKyAgICAgaWYgKChyZXF1ZXN0LT5jb25maWcgPSB0bGlfdHJhbnNwb3J0KHJlcXVlc3QtPmZkKSkgIT0gMAorKyNpZmRlZiBJTkVUNgorKwkmJiAoU1RSX0VRKHJlcXVlc3QtPmNvbmZpZy0+bmNfcHJvdG9mbWx5LCAiaW5ldCIpIHx8CisrCSAgICBTVFJfRVEocmVxdWVzdC0+Y29uZmlnLT5uY19wcm90b2ZtbHksICJpbmV0NiIpKSkgeworKyNlbHNlCisgCSYmIFNUUl9FUShyZXF1ZXN0LT5jb25maWctPm5jX3Byb3RvZm1seSwgImluZXQiKSkgeworKyNlbmRpZgorIAlpZiAocmVxdWVzdC0+Y2xpZW50LT51bml0ICE9IDApIHsKKysjaWZkZWYgSU5FVDYKKysJICAgIGNsaWVudCA9ICooc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgcmVxdWVzdC0+Y2xpZW50LT51bml0LT5hZGRyLmJ1ZjsKKysJICAgIHJlcXVlc3QtPmNsaWVudC0+c2luID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmY2xpZW50OworKyNlbHNlCisgCSAgICBjbGllbnQgPSAqKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSByZXF1ZXN0LT5jbGllbnQtPnVuaXQtPmFkZHIuYnVmOworIAkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSAmY2xpZW50OworKyNlbmRpZgorIAl9CisgCWlmIChyZXF1ZXN0LT5zZXJ2ZXItPnVuaXQgIT0gMCkgeworKyNpZmRlZiBJTkVUNgorKwkgICAgc2VydmVyID0gKihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSByZXF1ZXN0LT5zZXJ2ZXItPnVuaXQtPmFkZHIuYnVmOworKwkgICAgcmVxdWVzdC0+c2VydmVyLT5zaW4gPSAoc3RydWN0IHNvY2thZGRyICopICZzZXJ2ZXI7CisrI2Vsc2UKKyAJICAgIHNlcnZlciA9ICooc3RydWN0IHNvY2thZGRyX2luICopIHJlcXVlc3QtPnNlcnZlci0+dW5pdC0+YWRkci5idWY7CisgCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9ICZzZXJ2ZXI7CisrI2VuZGlmCisgCX0KKyAJdGxpX2NsZWFudXAocmVxdWVzdCk7CisgCXNvY2tfbWV0aG9kcyhyZXF1ZXN0KTsKK0BAIC0xODcsNyArMjA3LDE1IEBACisgICAgIH0KKyAgICAgd2hpbGUgKGNvbmZpZyA9IGdldG5ldGNvbmZpZyhoYW5kbGVwKSkgeworIAlpZiAoc3RhdChjb25maWctPm5jX2RldmljZSwgJmZyb21fY29uZmlnKSA9PSAwKSB7CisrI2lmZGVmIE5PX0NMT05FX0RFVklDRQorKwkvKgorKwkgKiBJZiB0aGUgbmV0d29yayBkZXZpY2VzIGFyZSBub3QgY2xvbmVkIChhcyBpcyB0aGUgY2FzZSBmb3IKKysJICogU29sYXJpcyA4IEJldGEpLCB3ZSBtdXN0IGNvbXBhcmUgdGhlIG1ham9yIGRldmljZSBudW1iZXJzLgorKwkgKi8KKysJICAgIGlmIChtYWpvcihmcm9tX2NvbmZpZy5zdF9yZGV2KSA9PSBtYWpvcihmcm9tX2NsaWVudC5zdF9yZGV2KSkKKysjZWxzZQorIAkgICAgaWYgKG1pbm9yKGZyb21fY29uZmlnLnN0X3JkZXYpID09IG1ham9yKGZyb21fY2xpZW50LnN0X3JkZXYpKQorKyNlbmRpZgorIAkJYnJlYWs7CisgCX0KKyAgICAgfQorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy91cGRhdGUuYyB0Y3Bfd3JhcHBlcnNfNy42L3VwZGF0ZS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3VwZGF0ZS5jCTE5OTQtMTItMjggMTc6NDI6NTYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi91cGRhdGUuYwkyMDA0LTA0LTEwIDE5OjA3OjQzLjAwMDAwMDAwMCArMDIwMAorQEAgLTQ2LDEwICs0NiwxOCBAQAorIAkgICAgcmVxdWVzdC0+ZmQgPSB2YV9hcmcoYXAsIGludCk7CisgCSAgICBjb250aW51ZTsKKyAJY2FzZSBSUV9DTElFTlRfU0lOOgorKyNpZmRlZiBJTkVUNgorKwkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkciAqKTsKKysjZWxzZQorIAkgICAgcmVxdWVzdC0+Y2xpZW50LT5zaW4gPSB2YV9hcmcoYXAsIHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKKysjZW5kaWYKKyAJICAgIGNvbnRpbnVlOworIAljYXNlIFJRX1NFUlZFUl9TSU46CisrI2lmZGVmIElORVQ2CisrCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisgCSAgICByZXF1ZXN0LT5zZXJ2ZXItPnNpbiA9IHZhX2FyZyhhcCwgc3RydWN0IHNvY2thZGRyX2luICopOworKyNlbmRpZgorIAkgICAgY29udGludWU7CisgCisgCSAgICAvKgorZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy93b3JrYXJvdW5kcy5jIHRjcF93cmFwcGVyc183LjYvd29ya2Fyb3VuZHMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy93b3JrYXJvdW5kcy5jCTE5OTYtMDMtMTkgMTY6MjI6MjYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi93b3JrYXJvdW5kcy5jCTIwMDQtMDQtMTAgMTk6MDc6NDMuMDAwMDAwMDAwICswMjAwCitAQCAtMTY2LDExICsxNjYsMjIgQEAKKyBpbnQgICAgKmxlbjsKKyB7CisgICAgIGludCAgICAgcmV0OworKyNpZmRlZiBJTkVUNgorKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiA9IHNhOworKyNlbHNlCisgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzYTsKKysjZW5kaWYKKyAKKyAgICAgaWYgKChyZXQgPSBnZXRwZWVybmFtZShzb2NrLCBzYSwgbGVuKSkgPj0gMAorKyNpZmRlZiBJTkVUNgorKwkmJiAoKHNpbi0+c3Vfc2kuc2lfZmFtaWx5ID09IEFGX0lORVQ2CisrCSAgICAgJiYgSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbi0+c3Vfc2luNi5zaW42X2FkZHIpKQorKwkgICAgfHwgKHNpbi0+c3Vfc2kuc2lfZmFtaWx5ID09IEFGX0lORVQKKysJCSYmIHNpbi0+c3Vfc2luLnNpbl9hZGRyLnNfYWRkciA9PSAwKSkpIHsKKysjZWxzZQorIAkmJiBzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQKKyAJJiYgc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworKyNlbmRpZgorIAllcnJubyA9IEVOT1RDT05OOworIAlyZXR1cm4gKC0xKTsKKyAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjYxMDZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzExX3RjcGRfYmxhY2tsaXN0LnBhdGNoCkBAIC0wLDAgKzEsMTUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1BhdGg6IG5ld3MucG9yY3VwaW5lLm9yZyFuZXdzLnBvcmN1cGluZS5vcmchbm90LWZvci1tYWlsCitGcm9tOiBXaWV0c2UgVmVuZW1hIDx3aWV0c2VAKChubykoc3BhbSkocGxlYXNlKSl3enYud2luLnR1ZS5ubD4KK05ld3Nncm91cHM6IGNvbXAubWFpbC5zZW5kbWFpbCxjb21wLnNlY3VyaXR5LnVuaXgKK1N1YmplY3Q6IFRDUCBXcmFwcGVyIEJsYWNrbGlzdCBFeHRlbnNpb24KK0ZvbGxvd3VwLVRvOiBwb3N0ZXIKK0RhdGU6IDggU2VwIDE5OTcgMTg6NTM6MTMgLTA0MDAKK09yZ2FuaXphdGlvbjogV2lldHNlJ3MgaGFuZ291dCB3aGlsZSBvbiBzYWJhdHRpY2FsIGluIHRoZSBVU0EKK0xpbmVzOiAxNDcKK1NlbmRlcjogd2lldHNlQHNwaWtlLnBvcmN1cGluZS5vcmcKK01lc3NhZ2UtSUQ6IDw1djF2a3AkaDRmJDFAc3Bpa2UucG9yY3VwaW5lLm9yZz4KK05OVFAtUG9zdGluZy1Ib3N0OiBzcGlrZS5wb3JjdXBpbmUub3JnCitYcmVmOiBuZXdzLnBvcmN1cGluZS5vcmcgY29tcC5tYWlsLnNlbmRtYWlsOjM1NDEgY29tcC5zZWN1cml0eS51bml4OjcxNTgKKworVGhlIHBhdGNoIGJlbG93IGFkZHMgYSBuZXcgaG9zdCBwYXR0ZXJuIHRvIHRoZSBUQ1AgV3JhcHBlciBhY2Nlc3MKK2NvbnRyb2wgbGFuZ3VhZ2UuIEluc3RlYWQgb2YgYSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJuLCB5b3UKK2NhbiBzcGVjaWZ5IGFuIGV4dGVybmFsIC9maWxlL25hbWUgd2l0aCBob3N0IG5hbWUgb3IgYWRkcmVzcworcGF0dGVybnMuICAgVGhlIGZlYXR1cmUgY2FuIGJlIHVzZWQgcmVjdXJzaXZlbHkuCisKK1RoZSAvZmlsZS9uYW1lIGV4dGVuc2lvbiBtYWtlcyBpdCBlYXN5IHRvIGJsYWNrbGlzdCBiYWQgc2l0ZXMsIGZvcgorZXhhbXBsZSwgdG8gYmxvY2sgdW53YW50ZWQgZWxlY3Ryb25pYyBtYWlsIHdoZW4gbGlid3JhcCBpcyBsaW5rZWQKK2ludG8gc2VuZG1haWwuICBBZGRpbmcgaG9zdHMgdG8gYSBzaW1wbGUgdGV4dCBmaWxlIGlzIG11Y2ggZWFzaWVyCit0aGFuIGhhdmluZyB0byBlZGl0IGEgbW9yZSBjb21wbGV4IGhvc3RzLmFsbG93L2RlbnkgZmlsZS4KKworSSBkZXZlbG9wZWQgdGhpcyBhIHllYXIgb3Igc28gYWdvIGFzIGEgc3Vic3RpdHV0ZSBmb3IgTklTIG5ldGdyb3Vwcy4KK0F0IHRoYXQgdGltZSwgSSBkaWQgbm90IGNvbnNpZGVyIGl0IG9mIHN1ZmZpY2llbnQgaW50ZXJlc3QgZm9yCitpbmNsdXNpb24gaW4gdGhlIFRDUCBXcmFwcGVyIGRpc3RyaWJ1dGlvbi4gSG93IHRpbWVzIGhhdmUgY2hhbmdlZC4KKworVGhlIHBhdGNoIGlzIHJlbGF0aXZlIHRvIFRDUCBXcmFwcGVycyB2ZXJzaW9uIDcuNi4gVGhlIG1haW4gYXJjaGl2ZQorc2l0ZSBpcyBmdHA6Ly9mdHAud2luLnR1ZS5ubC9wdWIvc2VjdXJpdHkvdGNwX3dyYXBwZXJzXzcuNi50YXIuZ3oKKworVGhhbmtzIHRvIHRoZSBEZWJpYW4gTElOVVggZm9sa3MgZm9yIGV4cHJlc3NpbmcgdGhlaXIgaW50ZXJlc3QgaW4KK3RoaXMgcGF0Y2guCisKKwlXaWV0c2UKKworCitbZGlmZiB1cGRhdGVkIGJ5IE1kXQorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMDQtMTAgMTk6Mjg6MDEuMDAwMDAwMDAwICswMjAwCitAQCAtOTcsNiArOTcsMTMgQEAKKyBgWzNmZmU6NTA1OjI6MTo6XS82NFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUgcmFuZ2UKKyBgM2ZmZTo1MDU6MjoxOjpcJyB0aHJvdWdoIGAzZmZlOjUwNToyOjE6ZmZmZjpmZmZmOmZmZmY6ZmZmZlwnLgorIC5JUCBcKGJ1CisrQSBzdHJpbmcgdGhhdCBiZWdpbnMgd2l0aCBhIGAvXCcgY2hhcmFjdGVyIGlzIHRyZWF0ZWQgYXMgYSBmaWxlCisrbmFtZS4gQSBob3N0IG5hbWUgb3IgYWRkcmVzcyBpcyBtYXRjaGVkIGlmIGl0IG1hdGNoZXMgYW55IGhvc3QgbmFtZQorK29yIGFkZHJlc3MgcGF0dGVybiBsaXN0ZWQgaW4gdGhlIG5hbWVkIGZpbGUuIFRoZSBmaWxlIGZvcm1hdCBpcworK3plcm8gb3IgbW9yZSBsaW5lcyB3aXRoIHplcm8gb3IgbW9yZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBwYXR0ZXJucworK3NlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiAgQSBmaWxlIG5hbWUgcGF0dGVybiBjYW4gYmUgdXNlZCBhbnl3aGVyZQorK2EgaG9zdCBuYW1lIG9yIGFkZHJlc3MgcGF0dGVybiBjYW4gYmUgdXNlZC4KKysuSVAgXChidQorIFdpbGRjYXJkcyBgKlwnIGFuZCBgP1wnIGNhbiBiZSB1c2VkIHRvIG1hdGNoIGhvc3RuYW1lcyBvciBJUCBhZGRyZXNzZXMuICBUaGlzCisgbWV0aG9kIG9mIG1hdGNoaW5nIGNhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYG5ldC9tYXNrXCcgbWF0Y2hpbmcsCisgaG9zdG5hbWUgbWF0Y2hpbmcgYmVnaW5uaW5nIHdpdGggYC5cJyBvciBJUCBhZGRyZXNzIG1hdGNoaW5nIGVuZGluZyB3aXRoIGAuXCcuCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDQtMDQtMTAgMTk6Mjc6MDUuMDAwMDAwMDAwICswMjAwCitAQCAtMjUzLDYgKzI1MywyNiBAQAorICAgICB9CisgfQorIAorKy8qIGhvc3RmaWxlX21hdGNoIC0gbG9vayB1cCBob3N0IHBhdHRlcm5zIGZyb20gZmlsZSAqLworKworK3N0YXRpYyBpbnQgaG9zdGZpbGVfbWF0Y2gocGF0aCwgaG9zdCkKKytjaGFyICAgKnBhdGg7Cisrc3RydWN0IGhvc3RzX2luZm8gKmhvc3Q7CisreworKyAgICBjaGFyICAgIHRva1tCVUZTSVpdOworKyAgICBpbnQgICAgIG1hdGNoID0gTk87CisrICAgIEZJTEUgICAqZnA7CisrCisrICAgIGlmICgoZnAgPSBmb3BlbihwYXRoLCAiciIpKSAhPSAwKSB7CisrCXdoaWxlIChmc2NhbmYoZnAsICIlcyIsIHRvaykgPT0gMSAmJiAhKG1hdGNoID0gaG9zdF9tYXRjaCh0b2ssIGhvc3QpKSkKKysJICAgICAvKiB2b2lkICovIDsKKysJZmNsb3NlKGZwKTsKKysgICAgfSBlbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpIHsKKysJdGNwZF93YXJuKCJvcGVuICVzOiAlbSIsIHBhdGgpOworKyAgICB9CisrICAgIHJldHVybiAobWF0Y2gpOworK30KKysKKyAvKiBob3N0X21hdGNoIC0gbWF0Y2ggaG9zdCBuYW1lIGFuZC9vciBhZGRyZXNzIGFnYWluc3QgcGF0dGVybiAqLworIAorIHN0YXRpYyBpbnQgaG9zdF9tYXRjaCh0b2ssIGhvc3QpCitAQCAtMjgwLDYgKzMwMCw4IEBACisgCXRjcGRfd2FybigibmV0Z3JvdXAgc3VwcG9ydCBpcyBkaXNhYmxlZCIpOwkvKiBub3QgdGNwZF9qdW1wKCkgKi8KKyAJcmV0dXJuIChOTyk7CisgI2VuZGlmCisrICAgIH0gZWxzZSBpZiAodG9rWzBdID09ICcvJykgewkJCS8qIC9maWxlIGhhY2sgKi8KKysJcmV0dXJuIChob3N0ZmlsZV9tYXRjaCh0b2ssIGhvc3QpKTsKKyAgICAgfSBlbHNlIGlmIChTVFJfRVEodG9rLCAiS05PV04iKSkgewkJLyogY2hlY2sgYWRkcmVzcyBhbmQgbmFtZSAqLworIAljaGFyICAgKm5hbWUgPSBldmFsX2hvc3RuYW1lKGhvc3QpOworIAlyZXR1cm4gKFNUUl9ORShldmFsX2hvc3RhZGRyKGhvc3QpLCB1bmtub3duKSAmJiBIT1NUTkFNRV9LTk9XTihuYW1lKSk7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMJMjAwNC0wNC0xMCAxOToyODowOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGRjaGsuYwkyMDA0LTA0LTEwIDE5OjI3OjA1LjAwMDAwMDAwMCArMDIwMAorQEAgLTM1Myw2ICszNTMsOCBAQAorIHsKKyAgICAgaWYgKHBhdFswXSA9PSAnQCcpIHsKKyAJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggXCJAXCIiLCBwYXQpOworKyAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLycpIHsKKysJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggXCIvXCIiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLicpIHsKKyAJdGNwZF93YXJuKCIlczogZGFlbW9uIG5hbWUgYmVnaW5zIHdpdGggZG90IiwgcGF0KTsKKyAgICAgfSBlbHNlIGlmIChwYXRbc3RybGVuKHBhdCkgLSAxXSA9PSAnLicpIHsKK0BAIC0zODUsNiArMzg3LDggQEAKKyB7CisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CQkJLyogQG5ldGdyb3VwICovCisgCXRjcGRfd2FybigiJXM6IHVzZXIgbmFtZSBiZWdpbnMgd2l0aCBcIkBcIiIsIHBhdCk7CisrICAgIH0gZWxzZSBpZiAocGF0WzBdID09ICcvJykgeworKwl0Y3BkX3dhcm4oIiVzOiB1c2VyIG5hbWUgYmVnaW5zIHdpdGggXCIvXCIiLCBwYXQpOworICAgICB9IGVsc2UgaWYgKHBhdFswXSA9PSAnLicpIHsKKyAJdGNwZF93YXJuKCIlczogdXNlciBuYW1lIGJlZ2lucyB3aXRoIGRvdCIsIHBhdCk7CisgICAgIH0gZWxzZSBpZiAocGF0W3N0cmxlbihwYXQpIC0gMV0gPT0gJy4nKSB7CitAQCAtNDMwLDggKzQzNCwxMyBAQAorIHN0YXRpYyBpbnQgY2hlY2tfaG9zdChwYXQpCisgY2hhciAgICpwYXQ7CisgeworKyAgICBjaGFyICAgIGJ1ZltCVUZTSVpdOworICAgICBjaGFyICAgKm1hc2s7CisgICAgIGludCAgICAgYWRkcl9jb3VudCA9IDE7CisrICAgIEZJTEUgICAqZnA7CisrICAgIHN0cnVjdCB0Y3BkX2NvbnRleHQgc2F2ZWRfY29udGV4dDsKKysgICAgY2hhciAgICpjcDsKKysgICAgY2hhciAgICp3c3AgPSAiIFx0XHJcbiI7CisgCisgICAgIGlmIChwYXRbMF0gPT0gJ0AnKSB7CQkJLyogQG5ldGdyb3VwICovCisgI2lmZGVmIE5PX05FVEdSRU5UCitAQCAtNDUwLDYgKzQ1OSwyMSBAQAorIAl0Y3BkX3dhcm4oIm5ldGdyb3VwIHN1cHBvcnQgZGlzYWJsZWQiKTsKKyAjZW5kaWYKKyAjZW5kaWYKKysgICAgfSBlbHNlIGlmIChwYXRbMF0gPT0gJy8nKSB7CQkJLyogL3BhdGgvbmFtZSAqLworKwlpZiAoKGZwID0gZm9wZW4ocGF0LCAiciIpKSAhPSAwKSB7CisrCSAgICBzYXZlZF9jb250ZXh0ID0gdGNwZF9jb250ZXh0OworKwkgICAgdGNwZF9jb250ZXh0LmZpbGUgPSBwYXQ7CisrCSAgICB0Y3BkX2NvbnRleHQubGluZSA9IDA7CisrCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApKSB7CisrCQl0Y3BkX2NvbnRleHQubGluZSsrOworKwkJZm9yIChjcCA9IHN0cnRvayhidWYsIHdzcCk7IGNwOyBjcCA9IHN0cnRvaygoY2hhciAqKSAwLCB3c3ApKQorKwkJICAgIGNoZWNrX2hvc3QoY3ApOworKwkgICAgfQorKwkgICAgdGNwZF9jb250ZXh0ID0gc2F2ZWRfY29udGV4dDsKKysJICAgIGZjbG9zZShmcCk7CisrCX0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisrCSAgICB0Y3BkX3dhcm4oIm9wZW4gJXM6ICVtIiwgcGF0KTsKKysJfQorICAgICB9IGVsc2UgaWYgKG1hc2sgPSBzcGxpdF9hdChwYXQsICcvJykpIHsJLyogbmV0d29yay9uZXRtYXNrICovCisgI2lmZGVmIElORVQ2CisgCWludCBtYXNrX2xlbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMV91c2FnaV9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdXNhZ2lfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MGU4ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTFfdXNhZ2lfZml4LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtdU4gdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9ob3N0c19hY2Nlc3MuYworLS0tIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMJTW9uIE1heSAyMCAxNDowMDo1NiAyMDAyCisrKysgdGNwX3dyYXBwZXJzXzcuNi5uZXcvaG9zdHNfYWNjZXNzLmMJTW9uIE1heSAyMCAxNDoyNTowNSAyMDAyCitAQCAtNDQ4LDYgKzQ0OCwxNSBAQAorICAgICBpbnQgbGVuLCBtYXNrX2xlbiwgaSA9IDA7CisgICAgIGNoYXIgY2g7CisgCisrICAgIC8qCisrICAgICAqIEJlaGF2aW9yIG9mIGdldGFkZHJpbmZvKCkgYWdhaW5zdCBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3MgaXMKKysgICAgICogZGlmZmVyZW50IGJldHdlZW4gS0FNRSBhbmQgU29sYXJpczguICBXaGlsZSBLQU1FIHJldHVybnMKKysgICAgICogQUZfSU5FVDYsIFNvbGFyaXM4IHJldHVybnMgQUZfSU5FVC4gIFNvLCB3ZSBhdm9pZCB0aGlzIGhlcmUuCisrICAgICAqLworKyAgICBpZiAoU1RSTl9FUShzdHJpbmcsICI6OmZmZmY6IiwgNykKKysJJiYgZG90X3F1YWRfYWRkcihzdHJpbmcgKyA3KSAhPSBJTkFERFJfTk9ORSkKKysJcmV0dXJuIChtYXNrZWRfbWF0Y2g0KG5ldF90b2ssIG1hc2tfdG9rLCBzdHJpbmcgKyA3KSk7CisrCisgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKK0BAIC00NTcsMTMgKzQ2Niw2IEBACisgICAgIG1lbWNweSgmYWRkciwgcmVzLT5haV9hZGRyLCBzaXplb2YoYWRkcikpOworICAgICBmcmVlYWRkcmluZm8ocmVzKTsKKyAKKy0gICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyLnNpbjZfYWRkcikpIHsKKy0JaWYgKCgqKHVfaW50MzJfdCAqKSZuZXQuc2luNl9hZGRyLnM2X2FkZHJbMTJdID0gZG90X3F1YWRfYWRkcihuZXRfdG9rKSkgPT0gSU5BRERSX05PTkUKKy0JIHx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKQorLQkgICAgcmV0dXJuIChOTyk7CistCXJldHVybiAoKCoodV9pbnQzMl90ICopJmFkZHIuc2luNl9hZGRyLnM2X2FkZHJbMTJdICYgbWFzaykgPT0gKih1X2ludDMyX3QgKikmbmV0LnNpbjZfYWRkci5zNl9hZGRyWzEyXSk7CistICAgIH0KKy0KKyAgICAgLyogbWF0Y2ggSVB2NiBhZGRyZXNzIGFnYWluc3QgbmV0bnVtYmVyL3ByZWZpeGxlbiAqLworICAgICBsZW4gPSBzdHJsZW4obmV0X3Rvayk7CisgICAgIGlmICgqbmV0X3RvayAhPSAnWycgfHwgbmV0X3Rva1tsZW4gLSAxXSAhPSAnXScpCitkaWZmIC11TiB0Y3Bfd3JhcHBlcnNfNy42L3NvY2tldC5jIHRjcF93cmFwcGVyc183LjYubmV3L3NvY2tldC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi9zb2NrZXQuYwlNb24gTWF5IDIwIDEzOjQ4OjM1IDIwMDIKKysrKyB0Y3Bfd3JhcHBlcnNfNy42Lm5ldy9zb2NrZXQuYwlNb24gTWF5IDIwIDE0OjIyOjI3IDIwMDIKK0BAIC0yMjgsNyArMjI4LDcgQEAKKyAJaGludHMuYWlfZmFtaWx5ID0gc2luLT5zYV9mYW1pbHk7CisgCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRSB8IEFJX05VTUVSSUNIT1NUOworLQlpZiAoKGVyciA9IGdldGFkZHJpbmZvKGhvc3QtPm5hbWUsIE5VTEwsICZoaW50cywgJnJlczApID09IDApKSB7CisrCWlmICgoZXJyID0gZ2V0YWRkcmluZm8oaG9zdC0+bmFtZSwgTlVMTCwgJmhpbnRzLCAmcmVzMCkpID09IDApIHsKKyAJICAgIGZyZWVhZGRyaW5mbyhyZXMwKTsKKyAJICAgIHJlczAgPSBOVUxMOworIAkgICAgdGNwZF93YXJuKCJob3N0IG5hbWUvbmFtZSBtaXNtYXRjaDogIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEyX21ha2VmaWxlX2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMl9tYWtlZmlsZV9jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyODllNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xMl9tYWtlZmlsZV9jb25maWcucGF0Y2gKQEAgLTAsMCArMSw4MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL01ha2VmaWxlIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUJMjAwMy0wOC0yMSAwMTo0MzozOS4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L01ha2VmaWxlCTIwMDMtMDgtMjEgMDE6NDM6MzUuMDAwMDAwMDAwICswMjAwCitAQCAtNDUsNyArNDUsNyBAQAorICMKKyAjIFN5c1YuNCBTb2xhcmlzIDIueCBPU0YgQUlYCisgI1JFQUxfREFFTU9OX0RJUj0vdXNyL3NiaW4KKy0jCisrUkVBTF9EQUVNT05fRElSPS91c3Ivc2JpbgorICMgQlNEIDQuNAorICNSRUFMX0RBRU1PTl9ESVI9L3Vzci9saWJleGVjCisgIworQEAgLTUxMiw2ICs1MTksNyBAQAorICMgKGV4YW1wbGVzOiBhbGxvdywgZGVueSwgYmFubmVycywgdHdpc3QgYW5kIHNwYXduKS4KKyAjIAorICNTVFlMRQk9IC1EUFJPQ0VTU19PUFRJT05TCSMgRW5hYmxlIGxhbmd1YWdlIGV4dGVuc2lvbnMuCisrU1RZTEUgPSAtRFBST0NFU1NfT1BUSU9OUworIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIE9wdGlvbmFsOiBDaGFuZ2luZyB0aGUgZGVmYXVsdCBkaXNwb3NpdGlvbiBvZiBsb2dmaWxlIHJlY29yZHMKK0BAIC01MzUsNiArNTQzLDcgQEAKKyAjIFRoZSBMT0dfWFhYIG5hbWVzIGJlbG93IGFyZSB0YWtlbiBmcm9tIHRoZSAvdXNyL2luY2x1ZGUvc3lzbG9nLmggZmlsZS4KKyAKKyBGQUNJTElUWT0gTE9HX01BSUwJIyBMT0dfTUFJTCBpcyB3aGF0IG1vc3Qgc2VuZG1haWwgZGFlbW9ucyB1c2UKKytGQUNJTElUWT0gTE9HX0RBRU1PTgorIAorICMgVGhlIHN5c2xvZyBwcmlvcml0eSBhdCB3aGljaCBzdWNjZXNzZnVsIGNvbm5lY3Rpb25zIGFyZSBsb2dnZWQuCisgCitAQCAtNjMxLDYgKzY0MCw3IEBACisgIyBsb29rdXBzIGFsdG9nZXRoZXIsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLgorIAorIFBBUkFOT0lEPSAtRFBBUkFOT0lECisrUEFSQU5PSUQ9CisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IHR1cm5pbmcgb2ZmIGhvc3RuYW1lIGxvb2t1cHMKK0BAIC02NDQsNiArNjU0LDcgQEAKKyAjIG1vZGUgKHNlZSBwcmV2aW91cyBzZWN0aW9uKSBhbmQgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyBkZWZpbml0aW9uLgorIAorIEhPU1ROQU1FPSAtREFMV0FZU19IT1NUTkFNRQorK0hPU1ROQU1FPQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgT3B0aW9uYWw6IFR1cm5pbmcgb24gaG9zdCBBRERSRVNTIGNoZWNraW5nCitAQCAtNjcwLDYgKzY4MSw3IEBACisgIyBTb2xhcmlzIDIueCwgYW5kIExpbnV4LiBTZWUgeW91ciBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKyAjCisgIyBLSUxMX09QVD0gLURLSUxMX0lQX09QVElPTlMKKytLSUxMX09QVD0gLURLSUxMX0lQX09QVElPTlMKKyAKKyAjIyBFbmQgY29uZmlndXJhdGlvbiBvcHRpb25zCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQEAgLTY3Nyw5ICs2ODksMTAgQEAKKyAjIFByb3RlY3Rpb24gYWdhaW5zdCB3ZWlyZCBzaGVsbHMgb3Igd2VpcmQgbWFrZSBwcm9ncmFtcy4KKyAKKyBTSEVMTAk9IC9iaW4vc2gKKy0uYy5vOjsJJChDQykgJChDRkxBR1MpIC1jICQqLmMKKysuYy5vOjsJJChDQykgJChDRkxBR1MpIC1vICQqLm8gLWMgJCouYworIAorLUNGTEFHUwk9IC1PIC1ERkFDSUxJVFk9JChGQUNJTElUWSkgJChBQ0NFU1MpICQoUEFSQU5PSUQpICQoTkVUR1JPVVApIFwKKytDT1BUUwk9IC1PMiAtZworK0NGTEFHUwk9ICQoQ09QVFMpIC1ERkFDSUxJVFk9JChGQUNJTElUWSkgJChBQ0NFU1MpICQoUEFSQU5PSUQpICQoTkVUR1JPVVApIFwKKyAJJChCVUdTKSAkKFNZU1RZUEUpICQoQVVUSCkgJChVTUFTSykgXAorIAktRFJFQUxfREFFTU9OX0RJUj1cIiQoUkVBTF9EQUVNT05fRElSKVwiICQoU1RZTEUpICQoS0lMTF9PUFQpIFwKKyAJLURTRVZFUklUWT0kKFNFVkVSSVRZKSAtRFJGQzkzMV9USU1FT1VUPSQoUkZDOTMxX1RJTUVPVVQpIFwKK0BAIC03MTIsMTAgKzcyNSwxMSBAQAorIAorIGNvbmZpZy1jaGVjazoKKyAJQHNldCArZTsgdGVzdCAtbiAiJChSRUFMX0RBRU1PTl9ESVIpIiB8fCB7IG1ha2U7IGV4aXQgMTsgfQorLQlAc2V0ICtlOyBlY2hvICQoQ0ZMQUdTKSA+L3RtcC9jZmxhZ3MuJCQkJCA7IFwKKy0JaWYgY21wIGNmbGFncyAvdG1wL2NmbGFncy4kJCQkIDsgXAorLQl0aGVuIHJtIC90bXAvY2ZsYWdzLiQkJCQgOyBcCistCWVsc2UgbXYgL3RtcC9jZmxhZ3MuJCQkJCBjZmxhZ3MgOyBcCisrCUBzZXQgK2U7IGVjaG8gJChDRkxBR1MpID5jZmxhZ3MubmV3IDsgXAorKwlpZiBjbXAgY2ZsYWdzIGNmbGFncy5uZXcgOyBcCisrCXRoZW4gcm0gY2ZsYWdzLm5ldyA7IFwKKysJZWxzZSBtdiBjZmxhZ3MubmV3IGNmbGFncyA7IFwKKyAJZmkgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorKwlAaWYgWyAhIC1kIHNoYXJlZCBdOyB0aGVuIG1rZGlyIHNoYXJlZDsgZmkKKyAKKyAkKExJQik6CSQoTElCX09CSikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzEzX3NobGliX3dlYWtzeW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQxMzk2YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xM19zaGxpYl93ZWFrc3ltLnBhdGNoCkBAIC0wLDAgKzEsMjU1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDA0LTA1LTAyIDE1OjM3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvTWFrZWZpbGUJMjAwNC0wNS0wMiAxNTozMTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTAsMTUgKzE1MCwxNSBAQAorIAorIGxpbnV4OgorIAlAbWFrZSBSRUFMX0RBRU1PTl9ESVI9JChSRUFMX0RBRU1PTl9ESVIpIFNUWUxFPSQoU1RZTEUpIFwKKy0JTElCUz0tbG5zbCBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0gXAorKwlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPXdlYWtfc3ltYm9scy5vIFwKKyAJTkVUR1JPVVA9Ii1ETkVUR1JPVVAiIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorLQlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKysJRVhUUkFfQ0ZMQUdTPSItRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuIiBhbGwKKyAKKyBnbnU6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorLQlMSUJTPS1sbnNsIFJBTkxJQj1yYW5saWIgQVJGTEFHUz1ydiBBVVhfT0JKPSBcCisrCUxJQlM9LWxuc2wgUkFOTElCPXJhbmxpYiBBUkZMQUdTPXJ2IEFVWF9PQko9d2Vha19zeW1ib2xzLm8gXAorIAlORVRHUk9VUD0tRE5FVEdST1VQIFRMST0gVlNZU0xPRz0gQlVHUz0gXAorLQlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IiIGFsbAorKwlFWFRSQV9DRkxBR1M9Ii1EU1lTX0VSUkxJU1RfREVGSU5FRCAtREhBVkVfU1RSRVJST1IgLURIQVZFX1dFQUtTWU1TIC1EX1JFRU5UUkFOVCIgYWxsCisgCisgIyBUaGlzIGlzIGdvb2QgZm9yIG1hbnkgU1lTVitCU0QgaHlicmlkcyB3aXRoIE5JUywgcHJvYmFibHkgYWxzbyBmb3IgSFAtVVggNy54LgorIGhwdXggaHB1eDggaHB1eDkgaHB1eDEwOgorQEAgLTcxMyw3ICs3MTMsMjIgQEAKKyAKKyBMSUIJPSBsaWJ3cmFwLmEKKyAKKy1hbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrCisrc2hhcmVkLyUubzogJS5jCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKFNIQ0ZMQUdTKSAtYyAkPCAtbyAkQAorKworK1NPTUFKT1IgPSAwCisrU09NSU5PUiA9IDcuNgorKworK1NITElCCQk9IHNoYXJlZC9saWJ3cmFwLnNvLiQoU09NQUpPUikuJChTT01JTk9SKQorK1NITElCU09NQUoJPSBzaGFyZWQvbGlid3JhcC5zby4kKFNPTUFKT1IpCisrU0hMSUJTTwkJPSBzaGFyZWQvbGlid3JhcC5zbworK1NITElCRkxBR1MJPSAtTHNoYXJlZCAtbHdyYXAKKysKKytTSExJTktGTEFHUyA9IC1zaGFyZWQgLVhsaW5rZXIgLXNvbmFtZSAtWGxpbmtlciBsaWJ3cmFwLnNvLiQoU09NQUpPUikgLWxjICQoTElCUykKKytTSENGTEFHUyA9IC1mUElDIC1zaGFyZWQgLURfUkVFTlRSQU5UCisrU0hMSUJfT0JKPSAkKGFkZHByZWZpeCBzaGFyZWQvLCAkKExJQl9PQkopKTsKKysKKythbGwgb3RoZXI6IGNvbmZpZy1jaGVjayB0Y3BkIHRjcGRtYXRjaCB0cnktZnJvbSBzYWZlX2ZpbmdlciB0Y3BkY2hrICQoTElCKQorIAorICMgSW52YWxpZGF0ZSBhbGwgb2JqZWN0IGZpbGVzIHdoZW4gdGhlIGNvbXBpbGVyIG9wdGlvbnMgKENGTEFHUykgaGF2ZSBjaGFuZ2VkLgorIAorQEAgLTczMSwyNyArNzQ2LDMzIEBACisgCSQoQVIpICQoQVJGTEFHUykgJChMSUIpICQoTElCX09CSikKKyAJLSQoUkFOTElCKSAkKExJQikKKyAKKy10Y3BkOgl0Y3BkLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChMSUIpICQoTElCUykKKyskKFNITElCKTogJChTSExJQl9PQkopCisrCXJtIC1mICQoU0hMSUIpCisrCSQoQ0MpIC1vICQoU0hMSUIpICQoU0hMSU5LRkxBR1MpICQoU0hMSUJfT0JKKQorKwlsbiAtc2YgJChub3RkaXIgJChTSExJQikpICQoU0hMSUJTT01BSikKKysJbG4gLXNmICQobm90ZGlyICQoU0hMSUJTT01BSikpICQoU0hMSUJTTykKKysKKyt0Y3BkOgl0Y3BkLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHRjcGQubyAkKFNITElCRkxBR1MpCisgCisgbWlzY2Q6CW1pc2NkLm8gJChMSUIpCisgCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisgCistc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoTElCKSAkKExJQlMpCisrc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERNQVRDSF9PQkogPSB0Y3BkbWF0Y2gubyBmYWtlbG9nLm8gaW5ldGNmLm8gc2NhZmZvbGQubworIAorLXRjcGRtYXRjaDogJChUQ1BETUFUQ0hfT0JKKSAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChMSUIpICQoTElCUykKKyt0Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorIAorLXRyeS1mcm9tOiB0cnktZnJvbS5vIGZha2Vsb2cubyAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoTElCKSAkKExJQlMpCisrdHJ5LWZyb206IHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUIpCisrCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0cnktZnJvbS5vIGZha2Vsb2cubyAkKFNITElCRkxBR1MpCisgCisgVENQRENIS19PQkogPSB0Y3BkY2hrLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKy10Y3BkY2hrOiAkKFRDUERDSEtfT0JKKSAkKExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoTElCKSAkKExJQlMpCisrdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChTSExJQikKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKyAKKyBzaGFyOgkkKEtJVCkKKyAJQHNoYXIgJChLSVQpCitAQCAtNzY3LDcgKzc4OCw5IEBACisgCisgY2xlYW46CisgCXJtIC1mIHRjcGQgbWlzY2Qgc2FmZV9maW5nZXIgdGNwZG1hdGNoIHRjcGRjaGsgdHJ5LWZyb20gKi5bb2FdIGNvcmUgXAorKwlsaWJ3cmFwKi5zbyogXAorIAljZmxhZ3MKKysJcm0gLXJmIHNoYXJlZC8KKyAKKyB0aWR5OgljbGVhbgorIAljaG1vZCAtUiBhK3IgLgorQEAgLTkxMyw1ICs5MzYsNiBAQAorIHVwZGF0ZS5vOiBteXN0ZGFyZy5oCisgdXBkYXRlLm86IHRjcGQuaAorIHZmcHJpbnRmLm86IGNmbGFncworK3dlYWtfc3ltYm9scy5vOiB0Y3BkLmgKKyB3b3JrYXJvdW5kcy5vOiBjZmxhZ3MKKyB3b3JrYXJvdW5kcy5vOiB0Y3BkLmgKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZC5oIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaAkyMDA0LTA1LTAyIDE1OjM3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZC5oCTIwMDQtMDUtMDIgMTU6Mzc6NDkuMDAwMDAwMDAwICswMjAwCitAQCAtNCw2ICs0LDE1IEBACisgICAqIEF1dGhvcjogV2lldHNlIFZlbmVtYSwgRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLgorICAgKi8KKyAKKysjaWZuZGVmIF9UQ1BXUkFQUEVSU19UQ1BEX0gKKysjZGVmaW5lIF9UQ1BXUkFQUEVSU19UQ1BEX0gKKysKKysvKiBOZWVkIGRlZmluaXRpb25zIG9mIHN0cnVjdCBzb2NrYWRkcl9pbiBhbmQgRklMRS4gKi8KKysjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK19fQkVHSU5fREVDTFMKKysKKyAvKiBTdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgb25lIGNvbW11bmljYXRpb25zIGVuZHBvaW50LiAqLworIAorICNkZWZpbmUgU1RSSU5HX0xFTkdUSAkxMjgJCS8qIGhvc3RzLCB1c2VycywgcHJvY2Vzc2VzICovCitAQCAtMjksMTAgKzM4LDEwIEBACisgICAgIGNoYXIgICAgcGlkWzEwXTsJCQkvKiBhY2Nlc3MgdmlhIGV2YWxfcGlkKHJlcXVlc3QpICovCisgICAgIHN0cnVjdCBob3N0X2luZm8gY2xpZW50WzFdOwkJLyogY2xpZW50IGVuZHBvaW50IGluZm8gKi8KKyAgICAgc3RydWN0IGhvc3RfaW5mbyBzZXJ2ZXJbMV07CQkvKiBzZXJ2ZXIgZW5kcG9pbnQgaW5mbyAqLworLSAgICB2b2lkICAoKnNpbmspICgpOwkJCS8qIGRhdGFncmFtIHNpbmsgZnVuY3Rpb24gb3IgMCAqLworLSAgICB2b2lkICAoKmhvc3RuYW1lKSAoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGhvc3RuYW1lICovCistICAgIHZvaWQgICgqaG9zdGFkZHIpICgpOwkJLyogYWRkcmVzcyB0byBwcmludGFibGUgYWRkcmVzcyAqLworLSAgICB2b2lkICAoKmNsZWFudXApICgpOwkJLyogY2xlYW51cCBmdW5jdGlvbiBvciAwICovCisrICAgIHZvaWQgICgqc2luaykgKGludCk7CQkvKiBkYXRhZ3JhbSBzaW5rIGZ1bmN0aW9uIG9yIDAgKi8KKysgICAgdm9pZCAgKCpob3N0bmFtZSkgKHN0cnVjdCBob3N0X2luZm8gKik7IC8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGhvc3RuYW1lICovCisrICAgIHZvaWQgICgqaG9zdGFkZHIpIChzdHJ1Y3QgaG9zdF9pbmZvICopOyAvKiBhZGRyZXNzIHRvIHByaW50YWJsZSBhZGRyZXNzICovCisrICAgIHZvaWQgICgqY2xlYW51cCkgKHN0cnVjdCByZXF1ZXN0X2luZm8gKik7IC8qIGNsZWFudXAgZnVuY3Rpb24gb3IgMCAqLworICAgICBzdHJ1Y3QgbmV0Y29uZmlnICpjb25maWc7CQkvKiBuZXRkaXIgaGFuZGxlICovCisgfTsKKyAKK0BAIC03MCwyMCArNzksMjcgQEAKKyAjZGVmaW5lIGZyb21ob3N0IHNvY2tfaG9zdAkJLyogbm8gVExJIHN1cHBvcnQgbmVlZGVkICovCisgI2VuZGlmCisgCistZXh0ZXJuIGludCBob3N0c19hY2Nlc3MoKTsJCS8qIGFjY2VzcyBjb250cm9sICovCistZXh0ZXJuIHZvaWQgc2hlbGxfY21kKCk7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKy1leHRlcm4gY2hhciAqcGVyY2VudF94KCk7CQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworLWV4dGVybiB2b2lkIHJmYzkzMSgpOwkJCS8qIGNsaWVudCBuYW1lIGZyb20gUkZDIDkzMSBkYWVtb24gKi8KKy1leHRlcm4gdm9pZCBjbGVhbl9leGl0KCk7CQkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworLWV4dGVybiB2b2lkIHJlZnVzZSgpOwkJCS8qIGNsZWFuIHVwIGFuZCBleGl0ICovCistZXh0ZXJuIGNoYXIgKnhnZXRzKCk7CQkJLyogZmdldHMoKSBvbiBzdGVyb2lkcyAqLworLWV4dGVybiBjaGFyICpzcGxpdF9hdCgpOwkJLyogc3RyY2hyKCkgYW5kIHNwbGl0ICovCistZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG90X3F1YWRfYWRkcigpOwkvKiByZXN0cmljdGVkIGluZXRfYWRkcigpICovCisrZXh0ZXJuIGludCBob3N0c19hY2Nlc3Moc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdCk7CS8qIGFjY2VzcyBjb250cm9sICovCisrZXh0ZXJuIHZvaWQgc2hlbGxfY21kKGNoYXIgKik7CQkvKiBleGVjdXRlIHNoZWxsIGNvbW1hbmQgKi8KKytleHRlcm4gY2hhciAqcGVyY2VudF94KGNoYXIgKiwgaW50LCBjaGFyICosIHN0cnVjdCByZXF1ZXN0X2luZm8gKik7CisrCQkJCQkvKiBkbyAlPGNoYXI+IGV4cGFuc2lvbiAqLworK2V4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIGNoYXIgKik7CisrCQkJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCisrZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworK2V4dGVybiB2b2lkIHJlZnVzZShzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworK2V4dGVybiBjaGFyICp4Z2V0cyhjaGFyICosIGludCwgRklMRSAqKTsJLyogZmdldHMoKSBvbiBzdGVyb2lkcyAqLworK2V4dGVybiBjaGFyICpzcGxpdF9hdChjaGFyICosIGludCk7CQkvKiBzdHJjaHIoKSBhbmQgc3BsaXQgKi8KKytleHRlcm4gdW5zaWduZWQgbG9uZyBkb3RfcXVhZF9hZGRyKGNoYXIgKik7CS8qIHJlc3RyaWN0ZWQgaW5ldF9hZGRyKCkgKi8KKyAKKyAvKiBHbG9iYWwgdmFyaWFibGVzLiAqLworIAorKyNpZmRlZiBIQVZFX1dFQUtTWU1TCisrZXh0ZXJuIGludCBhbGxvd19zZXZlcml0eSBfX2F0dHJpYnV0ZV9fICgod2VhaykpOyAvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisrZXh0ZXJuIGludCBkZW55X3NldmVyaXR5IF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7IC8qIGZvciBjb25uZWN0aW9uIGxvZ2dpbmcgKi8KKysjZWxzZQorIGV4dGVybiBpbnQgYWxsb3dfc2V2ZXJpdHk7CQkvKiBmb3IgY29ubmVjdGlvbiBsb2dnaW5nICovCisgZXh0ZXJuIGludCBkZW55X3NldmVyaXR5OwkJLyogZm9yIGNvbm5lY3Rpb24gbG9nZ2luZyAqLworKyNlbmRpZgorIGV4dGVybiBjaGFyICpob3N0c19hbGxvd190YWJsZTsJCS8qIGZvciB2ZXJpZmljYXRpb24gbW9kZSByZWRpcmVjdGlvbiAqLworIGV4dGVybiBjaGFyICpob3N0c19kZW55X3RhYmxlOwkJLyogZm9yIHZlcmlmaWNhdGlvbiBtb2RlIHJlZGlyZWN0aW9uICovCisgZXh0ZXJuIGludCBob3N0c19hY2Nlc3NfdmVyYm9zZTsJLyogZm9yIHZlcmJvc2UgbWF0Y2hpbmcgbW9kZSAqLworQEAgLTk4LDYgKzExNCw4IEBACisgI2lmZGVmIF9fU1REQ19fCisgZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3RfaW5pdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICosLi4uKTsKKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9zZXQoc3RydWN0IHJlcXVlc3RfaW5mbyAqLC4uLik7CisrZXh0ZXJuIGludCBob3N0c19jdGwoY2hhciAqZGFlbW9uLCBjaGFyICpjbGllbnRfbmFtZSwgY2hhciAqY2xpZW50X2FkZHIsCisrCQljaGFyICpjbGllbnRfdXNlcik7CisgI2Vsc2UKKyBleHRlcm4gc3RydWN0IHJlcXVlc3RfaW5mbyAqcmVxdWVzdF9pbml0KCk7CS8qIGluaXRpYWxpemUgcmVxdWVzdCAqLworIGV4dGVybiBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0X3NldCgpOwkvKiB1cGRhdGUgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KK0BAIC0xMjEsMjAgKzEzOSwyMyBAQAorICAgKiBob3N0X2luZm8gc3RydWN0dXJlcyBzZXJ2ZSBhcyBjYWNoZXMgZm9yIHRoZSBsb29rdXAgcmVzdWx0cy4KKyAgICovCisgCistZXh0ZXJuIGNoYXIgKmV2YWxfdXNlcigpOwkJLyogY2xpZW50IHVzZXIgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0bmFtZSgpOwkJLyogcHJpbnRhYmxlIGhvc3RuYW1lICovCistZXh0ZXJuIGNoYXIgKmV2YWxfaG9zdGFkZHIoKTsJCS8qIHByaW50YWJsZSBob3N0IGFkZHJlc3MgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbygpOwkJLyogaG9zdCBuYW1lIG9yIGFkZHJlc3MgKi8KKy1leHRlcm4gY2hhciAqZXZhbF9jbGllbnQoKTsJCS8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworLWV4dGVybiBjaGFyICpldmFsX3NlcnZlcigpOwkJLyogd2hhdGV2ZXIgaXMgYXZhaWxhYmxlICovCisrZXh0ZXJuIGNoYXIgKmV2YWxfdXNlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGllbnQgdXNlciAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RuYW1lKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIHByaW50YWJsZSBob3N0bmFtZSAqLworK2V4dGVybiBjaGFyICpldmFsX2hvc3RhZGRyKHN0cnVjdCBob3N0X2luZm8gKik7CS8qIHByaW50YWJsZSBob3N0IGFkZHJlc3MgKi8KKytleHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbyhzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworK2V4dGVybiBjaGFyICpldmFsX2NsaWVudChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworK2V4dGVybiBjaGFyICpldmFsX3NlcnZlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworICNkZWZpbmUgZXZhbF9kYWVtb24ocikJKChyKS0+ZGFlbW9uKQkvKiBkYWVtb24gcHJvY2VzcyBuYW1lICovCisgI2RlZmluZSBldmFsX3BpZChyKQkoKHIpLT5waWQpCS8qIHByb2Nlc3MgaWQgKi8KKyAKKyAvKiBTb2NrZXQtc3BlY2lmaWMgbWV0aG9kcywgaW5jbHVkaW5nIEROUyBob3N0bmFtZSBsb29rdXBzLiAqLworIAorLWV4dGVybiB2b2lkIHNvY2tfaG9zdCgpOwkJLyogbG9vayB1cCBlbmRwb2ludCBhZGRyZXNzZXMgKi8KKy1leHRlcm4gdm9pZCBzb2NrX2hvc3RuYW1lKCk7CQkvKiB0cmFuc2xhdGUgYWRkcmVzcyB0byBob3N0bmFtZSAqLworLWV4dGVybiB2b2lkIHNvY2tfaG9zdGFkZHIoKTsJCS8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKysvKiBsb29rIHVwIGVuZHBvaW50IGFkZHJlc3NlcyAqLworK2V4dGVybiB2b2lkIHNvY2tfaG9zdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOworKy8qIHRyYW5zbGF0ZSBhZGRyZXNzIHRvIGhvc3RuYW1lICovCisrZXh0ZXJuIHZvaWQgc29ja19ob3N0bmFtZShzdHJ1Y3QgaG9zdF9pbmZvICopOworKy8qIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGFkZHJlc3MgKi8KKytleHRlcm4gdm9pZCBzb2NrX2hvc3RhZGRyKHN0cnVjdCBob3N0X2luZm8gKik7CisgI2RlZmluZSBzb2NrX21ldGhvZHMocikgXAorIAl7IChyKS0+aG9zdG5hbWUgPSBzb2NrX2hvc3RuYW1lOyAociktPmhvc3RhZGRyID0gc29ja19ob3N0YWRkcjsgfQorIAorQEAgLTE4Miw3ICsyMDMsNyBAQAorICAgKiBiZWhhdmlvci4KKyAgICovCisgCistZXh0ZXJuIHZvaWQgcHJvY2Vzc19vcHRpb25zKCk7CQkvKiBleGVjdXRlIG9wdGlvbnMgKi8KKytleHRlcm4gdm9pZCBwcm9jZXNzX29wdGlvbnMoY2hhciAqLCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIGV4ZWN1dGUgb3B0aW9ucyAqLworIGV4dGVybiBpbnQgZHJ5X3J1bjsJCQkvKiB2ZXJpZmljYXRpb24gZmxhZyAqLworIAorIC8qIEJ1ZyB3b3JrYXJvdW5kcy4gKi8KK0BAIC0yMjEsMyArMjQyLDcgQEAKKyAjZGVmaW5lIHN0cnRvawlteV9zdHJ0b2sKKyBleHRlcm4gY2hhciAqbXlfc3RydG9rKCk7CisgI2VuZGlmCisrCisrX19FTkRfREVDTFMKKysKKysjZW5kaWYKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvd2Vha19zeW1ib2xzLmMgdGNwX3dyYXBwZXJzXzcuNi93ZWFrX3N5bWJvbHMuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy93ZWFrX3N5bWJvbHMuYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIHRjcF93cmFwcGVyc183LjYvd2Vha19zeW1ib2xzLmMJMjAwNC0wNS0wMiAxNTozMTowOS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTEgQEAKKysgLyoKKysgICogQCgjKSB3ZWFrX3N5bWJvbHMuaCAxLjUgOTkvMTIvMjkgMjM6NTAKKysgICogCisrICAqIEF1dGhvcjogQW50aG9ueSBUb3ducyA8YWp0QGRlYmlhbi5vcmc+CisrICAqLworKworKyNpZmRlZiBIQVZFX1dFQUtTWU1TCisrI2luY2x1ZGUgPHN5c2xvZy5oPgorK2ludCBkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisraW50IGFsbG93X3NldmVyaXR5ID0gU0VWRVJJVFk7IAorKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42LzE0X2NpZHJfc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNF9jaWRyX3N1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI1Njg1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNF9jaWRyX3N1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDMtMDgtMjEgMDM6MTU6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtOTAsNiArOTAsMTAgQEAKKyBwYXR0ZXJuIGAxMzEuMTU1LjcyLjAvMjU1LjI1NS4yNTQuMFwnIG1hdGNoZXMgZXZlcnkgYWRkcmVzcyBpbiB0aGUKKyByYW5nZSBgMTMxLjE1NS43Mi4wXCcgdGhyb3VnaCBgMTMxLjE1NS43My4yNTVcJy4KKyAuSVAgXChidQorK0FuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbW0nIGlzIGludGVycHJldGVkIGFzIGEKKytgbmV0L21hc2tsZW5ndGgnIHBhaXIsIHdoZXJlIGBtbScgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBgMScKKytiaXRzIGluIHRoZSBuZXRtYXNrIGFwcGxpZWQgdG8gdGhlIGBuLm4ubi5uJyBhZGRyZXNzLgorKy5JUCBcKGJ1CisgQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgW246bjpuOm46bjpuOm46bl0vbVwnIGlzIGludGVycHJldGVkIGFzIGEKKyBgW25ldF0vcHJlZml4bGVuXCcgcGFpci4gQW4gSVB2NiBob3N0IGFkZHJlc3MgaXMgbWF0Y2hlZCBpZgorIGBwcmVmaXhsZW5cJyBiaXRzIG9mIGBuZXRcJyBpcyBlcXVhbCB0byB0aGUgYHByZWZpeGxlblwnIGJpdHMgb2YgdGhlCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy5jIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLmMJMjAwMy0wOC0yMSAwMzoxNTozNi4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtNDE3LDcgKzQxNyw4IEBACisgICAgIGlmICgoYWRkciA9IGRvdF9xdWFkX2FkZHIoc3RyaW5nKSkgPT0gSU5BRERSX05PTkUpCisgCXJldHVybiAoTk8pOworICAgICBpZiAoKG5ldCA9IGRvdF9xdWFkX2FkZHIobmV0X3RvaykpID09IElOQUREUl9OT05FCistCXx8IChtYXNrID0gZG90X3F1YWRfYWRkcihtYXNrX3RvaykpID09IElOQUREUl9OT05FKSB7CisrCXx8ICgobWFzayA9IGRvdF9xdWFkX2FkZHIobWFza190b2spKSA9PSBJTkFERFJfTk9ORQorKwkgICAgJiYgKG1hc2sgPSBjaWRyX21hc2tfYWRkcihtYXNrX3RvaykpID09IDApKSB7CisgI2lmbmRlZiBJTkVUNgorIAl0Y3BkX3dhcm4oImJhZCBuZXQvbWFzayBleHByZXNzaW9uOiAlcy8lcyIsIG5ldF90b2ssIG1hc2tfdG9rKTsKKyAjZW5kaWYKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvbWlzYy5jIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL21pc2MuYwkyMDAzLTA4LTIxIDAzOjE1OjM2LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvbWlzYy5jCTIwMDMtMDgtMjEgMDM6MDk6MzAuMDAwMDAwMDAwICswMjAwCitAQCAtMTA3LDMgKzEwNywxNyBAQAorICAgICB9CisgICAgIHJldHVybiAocnVucyA9PSA0ID8gaW5ldF9hZGRyKHN0cikgOiBJTkFERFJfTk9ORSk7CisgfQorKworKy8qIGNpZHJfbWFza19hZGRyIC0gY29udmVydCBjaWRyIG5ldG1hc2sgbGVuZ3RoIHRvIGludGVybmFsIGZvcm0gKi8KKysKKyt1bnNpZ25lZCBsb25nIGNpZHJfbWFza19hZGRyKHN0cikKKytjaGFyICAgKnN0cjsKKyt7CisrICAgIGludCAgICAgbWFza2JpdHM7CisrCisrICAgIG1hc2tiaXRzID0gYXRvaShzdHIpOworKyAgICBpZiAobWFza2JpdHMgPCAxIHx8IG1hc2tiaXRzID4gMzIpCisrCXJldHVybiAoMCk7CisrICAgIHJldHVybiBodG9ubCgweEZGRkZGRkZGIDw8ICgzMiAtIG1hc2tiaXRzKSk7CisrfQorKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkY2hrLmMgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDM6MTU6MzYuMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi90Y3BkY2hrLmMJMjAwMy0wOC0yMSAwMzowOTozMC4wMDAwMDAwMDAgKzAyMDAKK0BAIC00OTcsMTIgKzQ5NywxMiBAQAorIAlpbnQgbWFza19sZW47CisgCisgCWlmICgoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCistCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSAmJiBjaWRyX21hc2tfYWRkcihtYXNrKSA9PSAwKQorIAkgICAgJiYgKCFpc19pbmV0Nl9hZGRyKHBhdCkKKyAJCXx8ICgobWFza19sZW4gPSBhdG9pKG1hc2spKSA8IDAgfHwgbWFza19sZW4gPiAxMjgpKSkKKyAjZWxzZQorIAlpZiAoZG90X3F1YWRfYWRkcihwYXQpID09IElOQUREUl9OT05FCistCSAgICB8fCBkb3RfcXVhZF9hZGRyKG1hc2spID09IElOQUREUl9OT05FKQorKwkgICAgfHwgZG90X3F1YWRfYWRkcihtYXNrKSA9PSBJTkFERFJfTk9ORSAmJiBjaWRyX21hc2tfYWRkcihtYXNrKSA9PSAwKQorICNlbmRpZgorIAkgICAgdGNwZF93YXJuKCIlcy8lczogYmFkIG5ldC9tYXNrIHBhdHRlcm4iLCBwYXQsIG1hc2spOworICAgICB9IGVsc2UgaWYgKFNUUl9FUShwYXQsICJGQUlMIikpIHsJCS8qIG9ic29sZXRlICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi8xNV9tYXRjaF9jbGFyaWZ5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYTY4NzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvMTVfbWF0Y2hfY2xhcmlmeS5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuNQorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9ob3N0c19hY2Nlc3MuNQkyMDA0LTA0LTI1IDEyOjE3OjU5LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUJMjAwNC0wNC0yNSAxMjoxNzo1My4wMDAwMDAwMDAgKzAyMDAKK0BAIC04OSw2ICs4OSw4IEBACisgYml0d2lzZSBBTkQgb2YgdGhlIGFkZHJlc3MgYW5kIHRoZSBgbWFza1wnLiBGb3IgZXhhbXBsZSwgdGhlIG5ldC9tYXNrCisgcGF0dGVybiBgMTMxLjE1NS43Mi4wLzI1NS4yNTUuMjU0LjBcJyBtYXRjaGVzIGV2ZXJ5IGFkZHJlc3MgaW4gdGhlCisgcmFuZ2UgYDEzMS4xNTUuNzIuMFwnIHRocm91Z2ggYDEzMS4xNTUuNzMuMjU1XCcuCisrYDI1NS4yNTUuMjU1LjI1NVwnIGlzIG5vdCBhIHZhbGlkIG1hc2sgdmFsdWUsIHNvIGEgc2luZ2xlIGhvc3QgY2FuIGJlCisrbWF0Y2hlZCBqdXN0IGJ5IGl0cyBJUC4KKyAuSVAgXChidQorIEFuIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYG4ubi5uLm4vbW0nIGlzIGludGVycHJldGVkIGFzIGEKKyBgbmV0L21hc2tsZW5ndGgnIHBhaXIsIHdoZXJlIGBtbScgaXMgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBgMScKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9leHBhbmRfcmVtb3RlX3BvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODczNzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoCkBAIC0wLDAgKzEsNzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9ldmFsLmMgdGNwX3dyYXBwZXJzXzcuNi9ldmFsLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvZXZhbC5jCTE5OTUtMDEtMzAgMTk6NTE6NDYuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ldmFsLmMJMjAwNC0xMS0wNCAxMzo1OTowMS4wMDAwMDAwMDAgKzAxMDAKK0BAIC05OCw2ICs5OCwyOCBAQAorICAgICB9CisgfQorIAorKy8qIGV2YWxfcG9ydCAtIHJldHVybiBzdHJpbmcgd2l0aCB0aGUgcG9ydCAqLworK2NoYXIgICAqZXZhbF9wb3J0KHNhZGRyKQorKyNpZmRlZiBJTkVUNgorK3N0cnVjdCBzb2NrYWRkciAqc2FkZHI7CisrI2Vsc2UKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhZGRyOworKyNlbmRpZgorK3sKKysgICAgc3RhdGljIGNoYXIgcG9ydFsxNl07CisrICAgIGlmIChzYWRkciAhPSAwKSB7CisrICAgICAgICBzcHJpbnRmKHBvcnQsICIldSIsCisrI2lmZGVmIElORVQ2CisrICAgICAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYWRkciktPnNpbl9wb3J0KSk7CisrI2Vsc2UKKysgICAgICAgICAgICBudG9ocyhzYWRkci0+c2luX3BvcnQpKTsKKysjZW5kaWYKKysgICAgfSBlbHNlIHsKKysJc3RyY3B5KHBvcnQsICIwIik7CisrICAgIH0KKysgICAgcmV0dXJuIChwb3J0KTsKKyt9CisrCisgLyogZXZhbF9jbGllbnQgLSByZXR1cm4gc3RyaW5nIHdpdGggYXMgbXVjaCBhYm91dCB0aGUgY2xpZW50IGFzIHdlIGtub3cgKi8KKyAKKyBjaGFyICAgKmV2YWxfY2xpZW50KHJlcXVlc3QpCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy41IHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjUKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjUJMjAwNC0xMS0wNCAxMzoxNzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy41CTIwMDQtMTEtMDQgMTM6NTU6MzIuMDAwMDAwMDAwICswMTAwCitAQCAtMTc1LDYgKzE3NSw4IEBACisgdW5hdmFpbGFibGUuCisgLklQICIlbiAoJU4pIgorIFRoZSBjbGllbnQgKHNlcnZlcikgaG9zdCBuYW1lIChvciAidW5rbm93biIgb3IgInBhcmFub2lkIikuCisrLklQICIlciAoJVIpIgorK1RoZSBjbGllbnRzIChzZXJ2ZXJzKSBwb3J0IG51bWJlciAob3IgIjAiKS4KKyAuSVAgJXAKKyBUaGUgZGFlbW9uIHByb2Nlc3MgaWQuCisgLklQICVzCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfeC5jIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF94LmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF94LmMJMTk5NC0xMi0yOCAxNzo0MjozOC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfeC5jCTIwMDQtMTEtMDQgMTM6MTk6MjkuMDAwMDAwMDAwICswMTAwCitAQCAtNjMsNiArNjMsOCBAQAorIAkJY2ggPT0gJ24nID8gZXZhbF9ob3N0bmFtZShyZXF1ZXN0LT5jbGllbnQpIDoKKyAJCWNoID09ICdOJyA/IGV2YWxfaG9zdG5hbWUocmVxdWVzdC0+c2VydmVyKSA6CisgCQljaCA9PSAncCcgPyBldmFsX3BpZChyZXF1ZXN0KSA6CisrCQljaCA9PSAncicgPyBldmFsX3BvcnQocmVxdWVzdC0+Y2xpZW50LT5zaW4pIDoKKysJCWNoID09ICdSJyA/IGV2YWxfcG9ydChyZXF1ZXN0LT5zZXJ2ZXItPnNpbikgOgorIAkJY2ggPT0gJ3MnID8gZXZhbF9zZXJ2ZXIocmVxdWVzdCkgOgorIAkJY2ggPT0gJ3UnID8gZXZhbF91c2VyKHJlcXVlc3QpIDoKKyAJCWNoID09ICclJyA/ICIlIiA6ICh0Y3BkX3dhcm4oInVucmVjb2duaXplZCAlJSVjIiwgY2gpLCAiIik7CitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNC0xMS0wNCAxMzoxNzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA0LTExLTA0IDEzOjE5OjEzLjAwMDAwMDAwMCArMDEwMAorQEAgLTE0NSw2ICsxNDUsMTEgQEAKKyBleHRlcm4gY2hhciAqZXZhbF9ob3N0aW5mbyhzdHJ1Y3QgaG9zdF9pbmZvICopOwkvKiBob3N0IG5hbWUgb3IgYWRkcmVzcyAqLworIGV4dGVybiBjaGFyICpldmFsX2NsaWVudChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworIGV4dGVybiBjaGFyICpldmFsX3NlcnZlcihzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOy8qIHdoYXRldmVyIGlzIGF2YWlsYWJsZSAqLworKyNpZmRlZiBJTkVUNgorK2V4dGVybiBjaGFyICpldmFsX3BvcnQoc3RydWN0IHNvY2thZGRyICopOworKyNlbHNlCisrZXh0ZXJuIGNoYXIgKmV2YWxfcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisrI2VuZGlmCisgI2RlZmluZSBldmFsX2RhZW1vbihyKQkoKHIpLT5kYWVtb24pCS8qIGRhZW1vbiBwcm9jZXNzIG5hbWUgKi8KKyAjZGVmaW5lIGV2YWxfcGlkKHIpCSgociktPnBpZCkJLyogcHJvY2VzcyBpZCAqLworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvaGF2ZV9zdHJlcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M1NTRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L2hhdmVfc3RyZXJyb3IucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3BlcmNlbnRfbS5jIHRjcF93cmFwcGVyc183LjYvcGVyY2VudF9tLmMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcGVyY2VudF9tLmMJMTk5NC0xMi0yOCAxNzo0MjozNy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3BlcmNlbnRfbS5jCTIwMDMtMDgtMjEgMDI6NDU6MzEuMDAwMDAwMDAwICswMjAwCitAQCAtMjksMTEgKzI5LDE1IEBACisgCisgICAgIHdoaWxlICgqYnAgPSAqY3ApCisgCWlmICgqY3AgPT0gJyUnICYmIGNwWzFdID09ICdtJykgeworKyNpZmRlZiBIQVZFX1NUUkVSUk9SCisrCSAgICBzdHJjcHkoYnAsIHN0cmVycm9yKGVycm5vKSk7CisrI2Vsc2UKKyAJICAgIGlmIChlcnJubyA8IHN5c19uZXJyICYmIGVycm5vID4gMCkgeworIAkJc3RyY3B5KGJwLCBzeXNfZXJybGlzdFtlcnJub10pOworIAkgICAgfSBlbHNlIHsKKyAJCXNwcmludGYoYnAsICJVbmtub3duIGVycm9yICVkIiwgZXJybm8pOworIAkgICAgfQorKyNlbmRpZgorIAkgICAgYnAgKz0gc3RybGVuKGJwKTsKKyAJICAgIGNwICs9IDI7CisgCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9sZGZsYWdzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTIxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK0luZGV4OiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcub3JpZy9NYWtlZmlsZQkyMDA5LTA0LTA2IDEwOjU1OjQ3LjAwMDAwMDAwMCArMDAwMAorKysrIHRjcF93cmFwcGVyc183LjYub3JpZy9NYWtlZmlsZQkyMDA5LTA0LTA2IDEwOjU3OjA0LjAwMDAwMDAwMCArMDAwMAorQEAgLTc0OCwzMSArNzQ4LDMxIEBACisgCisgJChTSExJQik6ICQoU0hMSUJfT0JKKQorIAlybSAtZiAkKFNITElCKQorLQkkKENDKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKysJJChDQykgJChMREZMQUdTKSAtbyAkKFNITElCKSAkKFNITElOS0ZMQUdTKSAkKFNITElCX09CSikKKyAJbG4gLXNmICQobm90ZGlyICQoU0hMSUIpKSAkKFNITElCU09NQUopCisgCWxuIC1zZiAkKG5vdGRpciAkKFNITElCU09NQUopKSAkKFNITElCU08pCisgCisgdGNwZDoJdGNwZC5vICQoU0hMSUIpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCB0Y3BkLm8gJChTSExJQkZMQUdTKQorIAorIG1pc2NkOgltaXNjZC5vICQoTElCKQorLQkkKENDKSAkKENGTEFHUykgLW8gJEAgbWlzY2QubyAkKExJQikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBtaXNjZC5vICQoTElCKSAkKExJQlMpCisgCisgc2FmZV9maW5nZXI6IHNhZmVfZmluZ2VyLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHNhZmVfZmluZ2VyLm8gJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBzYWZlX2Zpbmdlci5vICQoU0hMSUJGTEFHUykKKyAKKyBUQ1BETUFUQ0hfT0JKID0gdGNwZG1hdGNoLm8gZmFrZWxvZy5vIGluZXRjZi5vIHNjYWZmb2xkLm8KKyAKKyB0Y3BkbWF0Y2g6ICQoVENQRE1BVENIX09CSikgJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRE1BVENIX09CSikgJChTSExJQkZMQUdTKQorKwkkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCAkKFRDUERNQVRDSF9PQkopICQoU0hMSUJGTEFHUykKKyAKKyB0cnktZnJvbTogdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAIHRyeS1mcm9tLm8gZmFrZWxvZy5vICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgdHJ5LWZyb20ubyBmYWtlbG9nLm8gJChTSExJQkZMQUdTKQorIAorIFRDUERDSEtfT0JKID0gdGNwZGNoay5vIGZha2Vsb2cubyBpbmV0Y2YubyBzY2FmZm9sZC5vCisgCisgdGNwZGNoazogJChUQ1BEQ0hLX09CSikgJChTSExJQikKKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoVENQRENIS19PQkopICQoU0hMSUJGTEFHUykKKysJJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEAgJChUQ1BEQ0hLX09CSikgJChTSExJQkZMQUdTKQorIAorIHNoYXI6CSQoS0lUKQorIAlAc2hhciAkKEtJVCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYWtlZmlsZS1maXgtcGFyYWxsZWwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzM1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gZGFmODlkMjcyZTUxYjIxNTMwMTVjZTdmNTRhYjBiODYxODJlNjRjMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAyOCBKYW4gMjAxNSAxODo1MDoyMyAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKK21ha2U6ICoqKiBObyBydWxlIHRvIG1ha2UgdGFyZ2V0IGBjZmxhZ3MnLCBuZWVkZWQgYnkgYHRjcGQubycuICBTdG9wLgorCitMZXQgImNmbGFncyIgZGVwZW5kIG9uIGNvbmZpZy1jaGVjayB3aGljaCBnZW5lcmF0ZXMgY2ZsZ2FzIHdpbGwgZml4IHRoZQorcHJvYmxlbS4KKworQWxzbyBmaXhlZDoKK0ZhdGFsIGVycm9yOiBjYW4ndCBjcmVhdGUgc2hhcmVkL2hvc3RzX2FjY2Vzcy5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlIHwgICAgNSArKysrLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IGZlNWU3MzIuLmY0Njg3NTEgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC03MTQsNiArNzE0LDcgQEAgS0lUCT0gUkVBRE1FIG1pc2NkLmMgdGNwZC5jIGZyb21ob3N0LmMgaG9zdHNfYWNjZXNzLmMgc2hlbGxfY21kLmMgXAorIExJQgk9IGxpYndyYXAuYQorIAorIHNoYXJlZC8lLm86ICUuYworKwlbIC1kIHNoYXJlZCBdIHx8IG1rZGlyIC1wIHNoYXJlZAorIAkkKENDKSAkKENGTEFHUykgJChTSENGTEFHUykgLWMgJDwgLW8gJEAKKyAKKyBTT01BSk9SID0gMAorQEAgLTczMCw2ICs3MzEsOCBAQCBTSExJQl9PQko9ICQoYWRkcHJlZml4IHNoYXJlZC8sICQoTElCX09CSikpOworIAorIGFsbCBvdGhlcjogY29uZmlnLWNoZWNrIHRjcGQgdGNwZG1hdGNoIHRyeS1mcm9tIHNhZmVfZmluZ2VyIHRjcGRjaGsgJChMSUIpCisgCisrY2ZsYWdzOiBjb25maWctY2hlY2sKKysKKyAjIEludmFsaWRhdGUgYWxsIG9iamVjdCBmaWxlcyB3aGVuIHRoZSBjb21waWxlciBvcHRpb25zIChDRkxBR1MpIGhhdmUgY2hhbmdlZC4KKyAKKyBjb25maWctY2hlY2s6CitAQCAtNzM5LDcgKzc0Miw3IEBAIGNvbmZpZy1jaGVjazoKKyAJdGhlbiBybSBjZmxhZ3MubmV3IDsgXAorIAllbHNlIG12IGNmbGFncy5uZXcgY2ZsYWdzIDsgXAorIAlmaSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCistCUBpZiBbICEgLWQgc2hhcmVkIF07IHRoZW4gbWtkaXIgc2hhcmVkOyBmaQorKwlAWyAtZCBzaGFyZWQgXSB8fCBta2RpciAtcCBzaGFyZWQKKyAKKyAkKExJQik6CSQoTElCX09CSikKKyAJcm0gLWYgJChMSUIpCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L21hbl9mcm9taG9zdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYW5fZnJvbWhvc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliZDdkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9tYW5fZnJvbWhvc3QucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitkaWZmIC1ydU4gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL2hvc3RzX2FjY2Vzcy4zIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLjMKKy0tLSB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvaG9zdHNfYWNjZXNzLjMJMjAwNC0wNC0yNSAwMDoxMDo0OC4wMDAwMDAwMDAgKzAyMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L2hvc3RzX2FjY2Vzcy4zCTIwMDQtMDQtMjUgMDA6MDk6MzYuMDAwMDAwMDAwICswMjAwCitAQCAtMTQsNiArMTQsOSBAQAorIHN0cnVjdCByZXF1ZXN0X2luZm8gKnJlcXVlc3Rfc2V0KHJlcXVlc3QsIGtleSwgdmFsdWUsIC4uLiwgMCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorK3ZvaWQgZnJvbWhvc3QocmVxdWVzdCkKKytzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworKworIGludCBob3N0c19hY2Nlc3MocmVxdWVzdCkKKyBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorQEAgLTYwLDYgKzYzLDcgQEAKKyBpcyBhdmFpbGFibGUsIGhvc3QgbmFtZXMgYW5kIGNsaWVudCB1c2VyIG5hbWVzIGFyZSBsb29rZWQgdXAgb24gZGVtYW5kLAorIHVzaW5nIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBhcyBhIGNhY2hlLiAgaG9zdHNfYWNjZXNzKCkgcmV0dXJucyB6ZXJvIGlmCisgYWNjZXNzIHNob3VsZCBiZSBkZW5pZWQuCisrZnJvbWhvc3QoKSBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaG9zdHNfYWNjZXNzKCkuCisgLlBQCisgaG9zdHNfY3RsKCkgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgcmVxdWVzdF9pbml0KCkgYW5kIGhvc3RzX2FjY2VzcygpCisgcm91dGluZXMgd2l0aCBhIHBlcmhhcHMgbW9yZSBjb252ZW5pZW50IGludGVyZmFjZSAodGhvdWdoIGl0IGRvZXMgbm90CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmVuYW1lX3N0cmluZ3NfdmFyaWFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1MDYwMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaApAQCAtMCwwICsxLDM1IEBACitTVFJJTkdTIG5hbWUgY29uZmxpY3RzIHdpdGggdmFyaWFibGUgZm9yIHN0cmluZ3MgdG9vbHMgKGUuZy4gaTU4Ni1vZS1saW51eC1zdHJpbmdzKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCistLS0gdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZS5vcmlnCTIwMTMtMDQtMTggMjM6NDE6NTguMjc3OTgxNzQwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9NYWtlZmlsZQkyMDEzLTA0LTE4IDIzOjQyOjQyLjUxMzk3ODk2NiArMDIwMAorQEAgLTMwOSw3ICszMDksNyBAQAorIHB5cmFtaWQ6CisgCUBtYWtlIFJFQUxfREFFTU9OX0RJUj0kKFJFQUxfREFFTU9OX0RJUikgU1RZTEU9JChTVFlMRSkgXAorIAlMSUJTPSBSQU5MSUI9cmFubGliIEFSRkxBR1M9cnYgQVVYX09CSj0iZW52aXJvbi5vIHZmcHJpbnRmLm8iIFwKKy0JU1RSSU5HUz0iLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5IiBcCisrCVNUUklOR1NfRkxBR1M9Ii1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweSIgXAorIAlORVRHUk9VUD0iLURORVRHUk9VUCAtRFVTRV9HRVRET01BSU4iIFRMST0gYWxsCisgCisgIyBVbnRlc3RlZC4KK0BAIC00MTksNyArNDE5LDcgQEAKKyAjIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGlmIHlvdXIgQyBsaWJyYXJ5IGRvZXMgbm90IHByb3ZpZGUgdGhlCisgIyBzdHJjaHIvc3RycmNoci9tZW1jbXAgcm91dGluZXMsIGJ1dCBjb21lcyB3aXRoIGluZGV4L3JpbmRleC9iY21wLgorICMKKy0jU1RSSU5HUz0gLURzdHJjaHI9aW5kZXggLURzdHJyY2hyPXJpbmRleCAtRG1lbWNtcD1iY21wIC1Ebm9fbWVtY3B5CisrI1NUUklOR1NfRkxBR1M9IC1Ec3RyY2hyPWluZGV4IC1Ec3RycmNocj1yaW5kZXggLURtZW1jbXA9YmNtcCAtRG5vX21lbWNweQorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBTeXN0ZW0gZGVwZW5kZW5jaWVzOiBzZWxlY3Rpb24gb2Ygbm9uLWRlZmF1bHQgb2JqZWN0IGxpYnJhcmllcy4KK0BAIC02OTAsNyArNjkwLDcgQEAKKyAJJChCVUdTKSAkKFNZU1RZUEUpICQoQVVUSCkgJChVTUFTSykgXAorIAktRFJFQUxfREFFTU9OX0RJUj1cIiQoUkVBTF9EQUVNT05fRElSKVwiICQoU1RZTEUpICQoS0lMTF9PUFQpIFwKKyAJLURTRVZFUklUWT0kKFNFVkVSSVRZKSAtRFJGQzkzMV9USU1FT1VUPSQoUkZDOTMxX1RJTUVPVVQpIFwKKy0JJChVQ0hBUikgJChUQUJMRVMpICQoU1RSSU5HUykgJChUTEkpICQoRVhUUkFfQ0ZMQUdTKSAkKERPVCkgXAorKwkkKFVDSEFSKSAkKFRBQkxFUykgJChTVFJJTkdTX0ZMQUdTKSAkKFRMSSkgJChFWFRSQV9DRkxBR1MpICQoRE9UKSBcCisgCSQoVlNZU0xPRykgJChIT1NUTkFNRSkKKyAKKyBMSUJfT0JKPSBob3N0c19hY2Nlc3MubyBvcHRpb25zLm8gc2hlbGxfY21kLm8gcmZjOTMxLm8gZXZhbC5vIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3NWI4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZXN0b3JlX3NpZ2FsYXJtLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYyB0Y3Bfd3JhcHBlcnNfNy42L3JmYzkzMS5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3JmYzkzMS5jCTIwMDQtMDgtMjkgMTg6NDA6MDguMDAwMDAwMDAwICswMjAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQwOjAyLjAwMDAwMDAwMCArMDIwMAorQEAgLTkyLDYgKzkyLDggQEAKKyAgICAgY2hhciAgICpjcDsKKyAgICAgY2hhciAgICpyZXN1bHQgPSB1bmtub3duOworICAgICBGSUxFICAgKmZwOworKyAgICB1bnNpZ25lZCBzYXZlZF90aW1lb3V0OworKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG5hY3QsIG9hY3Q7CisgCisgI2lmZGVmIElORVQ2CisgICAgIC8qIGFkZHJlc3MgZmFtaWx5IG11c3QgYmUgdGhlIHNhbWUgKi8KK0BAIC0xMzQsNyArMTM2LDEyIEBACisgCSAqLworIAorIAlpZiAoc2V0am1wKHRpbWVidWYpID09IDApIHsKKy0JICAgIHNpZ25hbChTSUdBTFJNLCB0aW1lb3V0KTsKKysJICAgIC8qIFNhdmUgU0lHQUxSTSB0aW1lciBhbmQgaGFuZGxlci4gU3VkaGVlciBBYmR1bC1TYWxhbSwgU1VOLiAqLworKwkgICAgc2F2ZWRfdGltZW91dCA9IGFsYXJtKDApOworKwkgICAgbmFjdC5zYV9oYW5kbGVyID0gdGltZW91dDsKKysJICAgIG5hY3Quc2FfZmxhZ3MgPSAwOworKwkgICAgKHZvaWQpIHNpZ2VtcHR5c2V0KCZuYWN0LnNhX21hc2spOworKwkgICAgKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCAmbmFjdCwgJm9hY3QpOworIAkgICAgYWxhcm0ocmZjOTMxX3RpbWVvdXQpOworIAorIAkgICAgLyoKK0BAIC0yMjMsNiArMjMwLDEwIEBACisgCSAgICB9CisgCSAgICBhbGFybSgwKTsKKyAJfQorKwkvKiBSZXN0b3JlIFNJR0FMUk0gdGltZXIgYW5kIGhhbmRsZXIuIFN1ZGhlZXIgQWJkdWwtU2FsYW0sIFNVTi4gKi8KKysJKHZvaWQpIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2FjdCwgTlVMTCk7CisrCWlmIChzYXZlZF90aW1lb3V0ID4gMCkKKysJICAgIGFsYXJtKHNhdmVkX3RpbWVvdXQpOworIAlmY2xvc2UoZnApOworICAgICB9CisgICAgIFNUUk5fQ1BZKGRlc3QsIHJlc3VsdCwgU1RSSU5HX0xFTkdUSCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvcmZjOTMxLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzZjRmMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9yZmM5MzEuZGlmZgpAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMgdGNwX3dyYXBwZXJzXzcuNi9zY2FmZm9sZC5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3NjYWZmb2xkLmMJMjAwNS0wMy0wOSAxODoyMjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3NjYWZmb2xkLmMJMjAwNS0wMy0wOSAxODoyMDo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yMzcsMTAgKzIzNywxNyBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworIAorIC8qIEFSR1NVU0VEICovCisgCistdm9pZCAgICByZmM5MzEocmVxdWVzdCkKKy1zdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworK3ZvaWQgICAgcmZjOTMxKHJtdF9zaW4sIG91cl9zaW4sIGRlc3QpCisrI2lmZGVmIElORVQ2Cisrc3RydWN0IHNvY2thZGRyICpybXRfc2luOworK3N0cnVjdCBzb2NrYWRkciAqb3VyX3NpbjsKKysjZWxzZQorK3N0cnVjdCBzb2NrYWRkcl9pbiAqcm10X3NpbjsKKytzdHJ1Y3Qgc29ja2FkZHJfaW4gKm91cl9zaW47CisrI2VuZGlmCisrY2hhciAgICpkZXN0OworIHsKKy0gICAgc3RyY3B5KHJlcXVlc3QtPnVzZXIsIHVua25vd24pOworKyAgICBzdHJjcHkoZGVzdCwgdW5rbm93bik7CisgfQorIAorIC8qIGNoZWNrX3BhdGggLSBleGFtaW5lIGFjY2Vzc2liaWxpdHkgKi8KK2RpZmYgLXJ1TnAgdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGQuaCB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAorLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy90Y3BkLmgJMjAwNS0wMy0wOSAxODoyMjowNC4wMDAwMDAwMDAgKzAxMDAKKysrKyB0Y3Bfd3JhcHBlcnNfNy42L3RjcGQuaAkyMDA1LTAzLTA5IDE4OjIxOjIzLjAwMDAwMDAwMCArMDEwMAorQEAgLTgzLDcgKzgzLDExIEBAIGV4dGVybiBpbnQgaG9zdHNfYWNjZXNzKHN0cnVjdCByZXF1ZXN0X2kKKyBleHRlcm4gdm9pZCBzaGVsbF9jbWQoY2hhciAqKTsJCS8qIGV4ZWN1dGUgc2hlbGwgY29tbWFuZCAqLworIGV4dGVybiBjaGFyICpwZXJjZW50X3goY2hhciAqLCBpbnQsIGNoYXIgKiwgc3RydWN0IHJlcXVlc3RfaW5mbyAqKTsKKyAJCQkJCS8qIGRvICU8Y2hhcj4gZXhwYW5zaW9uICovCisrI2lmZGVmIElORVQ2CisgZXh0ZXJuIHZvaWQgcmZjOTMxKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY2hhciAqKTsKKysjZWxzZQorK2V4dGVybiB2b2lkIHJmYzkzMShzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luICosIGNoYXIgKik7CisrI2VuZGlmCisgCQkJCQkvKiBjbGllbnQgbmFtZSBmcm9tIFJGQyA5MzEgZGFlbW9uICovCisgZXh0ZXJuIHZvaWQgY2xlYW5fZXhpdChzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLworIGV4dGVybiB2b2lkIHJlZnVzZShzdHJ1Y3QgcmVxdWVzdF9pbmZvICopOwkvKiBjbGVhbiB1cCBhbmQgZXhpdCAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzU2MTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLjgKQEAgLTAsMCArMSwzNCBAQAorLlRIIFNBRkVfRklOR0VSIDggIjIxdGggSnVuZSAxOTk3IiBMaW51eCAiTGludXggUHJvZ3JhbW1lcidzIE1hbnVhbCIKKy5TSCBOQU1FCitzYWZlX2ZpbmdlciBcLSBmaW5nZXIgY2xpZW50IHdyYXBwZXIgdGhhdCBwcm90ZWN0cyBhZ2FpbnN0IG5hc3R5IHN0dWZmCitmcm9tIGZpbmdlciBzZXJ2ZXJzCisuU0ggU1lOT1BTSVMKKy5CIHNhZmVfZmluZ2VyIFtmaW5nZXJfb3B0aW9uc10KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiBzYWZlX2ZpbmdlcgorY29tbWFuZCBwcm90ZWN0cyBhZ2FpbnN0IG5hc3R5IHN0dWZmIGZyb20gZmluZ2VyIHNlcnZlcnMuIFVzZSB0aGlzCitwcm9ncmFtIGZvciBhdXRvbWF0aWMgcmV2ZXJzZSBmaW5nZXIgcHJvYmVzIGZyb20gdGhlCisuQiB0Y3Bfd3JhcHBlcgorLkIgKHRjcGQpCissIG5vdCB0aGUgcmF3IGZpbmdlciBjb21tYW5kLiBUaGUKKy5CIHNhZmVfZmluZ2VyCitjb21tYW5kIG1ha2VzIHN1cmUgdGhhdCB0aGUgZmluZ2VyIGNsaWVudCBpcyBub3QgcnVuIHdpdGggcm9vdAorcHJpdmlsZWdlcy4gSXQgYWxzbyBydW5zIHRoZSBmaW5nZXIgY2xpZW50IHdpdGggYSBkZWZpbmVkIFBBVEgKK2Vudmlyb25tZW50LgorLkIgc2FmZV9maW5nZXIKK3dpbGwgYWxzbyBwcm90ZWN0IHlvdSBmcm9tIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgb3V0cHV0IG9mIHNvbWUKK2ZpbmdlciBzZXJ2ZXJzLiBUaGUgcHJvYmxlbTogc29tZSBwcm9ncmFtcyBtYXkgcmVhY3QgdG8gc3R1ZmYgaW4KK3RoZSBmaXJzdCBjb2x1bW4uIE90aGVyIHByb2dyYW1zIG1heSBnZXQgdXBzZXQgYnkgdGhyYXNoIGFueXdoZXJlCitvbiBhIGxpbmUuIEZpbGUgc3lzdGVtcyBtYXkgZmlsbCB1cCBhcyB0aGUgZmluZ2VyIHNlcnZlciBrZWVwcworc2VuZGluZyBkYXRhLiBUZXh0IGVkaXRvcnMgbWF5IGJvbWIgb3V0IG9uIGV4dHJlbWVseSBsb25nIGxpbmVzLgorVGhlIGZpbmdlciBzZXJ2ZXIgbWF5IHRha2UgZm9yZXZlciBiZWNhdXNlIGl0IGlzIHNvbWVob3cgd2VkZ2VkLgorLkIgc2FmZV9maW5nZXIKK3Rha2VzIGNhcmUgb2YgYWxsIHRoaXMgYmFkbmVzcy4KKy5TSCBTRUUgQUxTTworLkJSIGhvc3RzX2FjY2VzcyAoNSksCisuQlIgaG9zdHNfb3B0aW9ucyAoNSksCisuQlIgdGNwZCAoOCkKKy5TSCBBVVRIT1IKK1dpZXRzZSBWZW5lbWEsIEVpbmRob3ZlbiBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3ksIFRoZSBOZXRoZXJsYW5kcy4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NhZmVfZmluZ2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmFmZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvc2FmZV9maW5nZXIucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0gdGNwLXdyYXBwZXJzLTcuNi1pcHY2LjEub3JpZy9zYWZlX2Zpbmdlci5jCisrKysgdGNwLXdyYXBwZXJzLTcuNi1pcHY2LjEvc2FmZV9maW5nZXIuYworQEAgLTI2LDIxICsyNiwyNCBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxjdHlwZS5oPgorICNpbmNsdWRlIDxwd2QuaD4KKysjaW5jbHVkZSA8c3lzbG9nLmg+CisgCisgZXh0ZXJuIHZvaWQgZXhpdCgpOworIAorIC8qIExvY2FsIHN0dWZmICovCisgCistY2hhciAgICBwYXRoW10gPSAiUEFUSD0vYmluOi91c3IvYmluOi91c3IvdWNiOi91c3IvYnNkOi9ldGM6L3Vzci9ldGM6L3Vzci9zYmluIjsKKytjaGFyICAgIHBhdGhbXSA9ICJQQVRIPS9iaW46L3Vzci9iaW46L3NiaW46L3Vzci9zYmluIjsKKyAKKyAjZGVmaW5lCVRJTUVfTElNSVQJNjAJCS8qIERvIG5vdCBrZWVwIGxpc3RpbmdpbmcgZm9yZXZlciAqLworICNkZWZpbmUJSU5QVVRfTEVOR1RICTEwMDAwMAkJLyogRG8gbm90IGtlZXAgbGlzdGluZ2luZyBmb3JldmVyICovCisgI2RlZmluZQlMSU5FX0xFTkdUSAkxMjgJCS8qIEVkaXRvcnMgY2FuIGNob2tlIG9uIGxvbmcgbGluZXMgKi8KKyAjZGVmaW5lCUZJTkdFUl9QUk9HUkFNCSJmaW5nZXIiCS8qIE1vc3QsIGlmIG5vdCBhbGwsIFVOSVggc3lzdGVtcyAqLworICNkZWZpbmUJVU5QUklWX05BTUUJIm5vYm9keSIJLyogUHJlZmVycmVkIHByaXZpbGVnZSBsZXZlbCAqLworLSNkZWZpbmUJVU5QUklWX1VHSUQJMzI3NjcJCS8qIERlZmF1bHQgdWlkIGFuZCBnaWQgKi8KKysjZGVmaW5lCVVOUFJJVl9VR0lECTY1NTM0CQkvKiBEZWZhdWx0IHVpZCBhbmQgZ2lkICovCisgCisgaW50ICAgICBmaW5nZXJfcGlkOworK2ludAlhbGxvd19zZXZlcml0eSA9IFNFVkVSSVRZOworK2ludAlkZW55X3NldmVyaXR5ID0gTE9HX1dBUk5JTkc7CisgCisgdm9pZCAgICBjbGVhbnVwKHNpZykKKyBpbnQgICAgIHNpZzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3ZWEwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworKiBNb24gRmViIDEwIDIwMDMgSGFyYWxkIEhveWVyIDxoYXJhbGRAcmVkaGF0LmRlPiA3LjYtMjkKKy0gYWRkZWQgc2VjdXJpdHkgcGF0Y2ggdGNwX3dyYXBwZXJzLTcuNi1zaWcucGF0Y2gKKworLS0tIHRjcF93cmFwcGVyc183LjYvaG9zdHNfYWNjZXNzLmMuc2lnCTIwMDMtMDItMTAgMTY6MTg6MzEuMDAwMDAwMDAwICswMTAwCisrKysgdGNwX3dyYXBwZXJzXzcuNi9ob3N0c19hY2Nlc3MuYwkyMDAzLTAyLTEwIDE2OjUwOjM4LjAwMDAwMDAwMCArMDEwMAorQEAgLTY2LDYgKzY2LDcgQEAKKyAKKyAjZGVmaW5lCVlFUwkJMQorICNkZWZpbmUJTk8JCTAKKysjZGVmaW5lIEVSUiAgICAgICAgICAgICAtMQorIAorICAvKgorICAgKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGdsb2JhbGx5IHZpc2libGUgc28gdGhhdCB0aGV5IGNhbiBiZSByZWRpcmVjdGVkIGluCitAQCAtMTI5LDkgKzEyOSw5IEBACisgCXJldHVybiAodmVyZGljdCA9PSBBQ19QRVJNSVQpOworICAgICBpZiAodGFibGVfbWF0Y2goaG9zdHNfYWxsb3dfdGFibGUsIHJlcXVlc3QpKQorIAlyZXR1cm4gKFlFUyk7CistICAgIGlmICh0YWJsZV9tYXRjaChob3N0c19kZW55X3RhYmxlLCByZXF1ZXN0KSkKKy0JcmV0dXJuIChOTyk7CistICAgIHJldHVybiAoWUVTKTsKKysgICAgaWYgKHRhYmxlX21hdGNoKGhvc3RzX2RlbnlfdGFibGUsIHJlcXVlc3QpID09IE5PKQorKwlyZXR1cm4gKFlFUyk7CisrICAgIHJldHVybiAoTk8pOworIH0KKyAKKyAvKiB0YWJsZV9tYXRjaCAtIG1hdGNoIHRhYmxlIGVudHJpZXMgd2l0aCAoZGFlbW9uLCBjbGllbnQpIHBhaXIgKi8KK0BAIC0xNzUsNiArMTc1LDcgQEAKKyAJKHZvaWQpIGZjbG9zZShmcCk7CisgICAgIH0gZWxzZSBpZiAoZXJybm8gIT0gRU5PRU5UKSB7CisgCXRjcGRfd2FybigiY2Fubm90IG9wZW4gJXM6ICVtIiwgdGFibGUpOworKwltYXRjaCA9IEVSUjsKKyAgICAgfQorICAgICBpZiAobWF0Y2gpIHsKKyAJaWYgKGhvc3RzX2FjY2Vzc192ZXJib3NlID4gMSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NpZ2xvbmdqbXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkZDYzNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zaWdsb25nam1wLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworZGlmZiAtcnVOcCB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvcmZjOTMxLmMgdGNwX3dyYXBwZXJzXzcuNi9yZmM5MzEuYworLS0tIHRjcF93cmFwcGVyc183LjYub3JpZy9yZmM5MzEuYwkyMDA0LTA4LTI5IDE4OjQyOjI1LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvcmZjOTMxLmMJMjAwNC0wOC0yOSAxODo0MTowNC4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zMyw3ICszMyw3IEBAIHN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIykgcmZjOTMxLmMgMS4KKyAKKyBpbnQgICAgIHJmYzkzMV90aW1lb3V0ID0gUkZDOTMxX1RJTUVPVVQ7LyogR2xvYmFsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkICovCisgCistc3RhdGljIGptcF9idWYgdGltZWJ1ZjsKKytzdGF0aWMgc2lnam1wX2J1ZiB0aW1lYnVmOworIAorIC8qIGZzb2NrZXQgLSBvcGVuIHN0ZGlvIHN0cmVhbSBvbiB0b3Agb2Ygc29ja2V0ICovCisgCitAQCAtNjIsNyArNjIsNyBAQCBpbnQgICAgIHByb3RvY29sOworIHN0YXRpYyB2b2lkIHRpbWVvdXQoc2lnKQorIGludCAgICAgc2lnOworIHsKKy0gICAgbG9uZ2ptcCh0aW1lYnVmLCBzaWcpOworKyAgICBzaWdsb25nam1wKHRpbWVidWYsIHNpZyk7CisgfQorIAorIC8qIHJmYzkzMSAtIHJldHVybiByZW1vdGUgdXNlciBuYW1lLCBnaXZlbiBzb2NrZXQgc3RydWN0dXJlcyAqLworQEAgLTEzNSw3ICsxMzUsNyBAQCBjaGFyICAgKmRlc3Q7CisgCSAqIFNldCB1cCBhIHRpbWVyIHNvIHdlIHdvbid0IGdldCBzdHVjayB3aGlsZSB3YWl0aW5nIGZvciB0aGUgc2VydmVyLgorIAkgKi8KKyAKKy0JaWYgKHNldGptcCh0aW1lYnVmKSA9PSAwKSB7CisrCWlmIChzaWdzZXRqbXAodGltZWJ1ZiwgMCkgPT0gMCkgeworIAkgICAgLyogU2F2ZSBTSUdBTFJNIHRpbWVyIGFuZCBoYW5kbGVyLiBTdWRoZWVyIEFiZHVsLVNhbGFtLCBTVU4uICovCisgCSAgICBzYXZlZF90aW1lb3V0ID0gYWxhcm0oMCk7CisgCSAgICBuYWN0LnNhX2hhbmRsZXIgPSB0aW1lb3V0OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3NvY2tsZW5fdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zb2NrbGVuX3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0NmRmOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi9zb2NrbGVuX3QucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorY29tbWl0IDg4YjY5ODRlZjBiZjNiNzAzYzFjODUxMDkyNjYyYjk1ZTkxZGIxZmYKK0F1dGhvcjogZmFycmFoIHJhc2hpZCA8ZmFycmFoLnJhc2hpZEB3aW5kcml2ZXIuY29tPgorRGF0ZTogICBUdWUgRmViIDEyIDA5OjUzOjUwIDIwMTMgLTA1MDAKKworICAgIHRjcC13cmFwcGVycyBTdXBwb3J0IGZvciBidWlsZGluZyB3aXRoIGdsaWJjCisgICAgCisgICAgQWRkZWQgc3VwcG9ydCBmb3Igc29ja2xlbl90IHR5cGUgdG8gbGVuIGFyZ3VtZW50IHBhc3NlZCB0byBzb2NrZXQgcmVsYXRlZAorICAgIGNhbGxzLiBUaGlzIGZpeGVzIGEgYnVnIHRoYXQgY2F1c2VzIHRjcCB3cmFwcGVycyB0byBmYWlsIHdoZW4gdXNpbmcgc3NoZC4KKyAgICAKKyAgICBVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBmYXJyYWggcmFzaGlkIDxmYXJyYWgucmFzaGlkQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9maXhfb3B0aW9ucy5jIGIvZml4X29wdGlvbnMuYworaW5kZXggNzQ3M2FkZi4uZmUyYjQ0MiAxMDA2NDQKKy0tLSBhL2ZpeF9vcHRpb25zLmMKKysrKyBiL2ZpeF9vcHRpb25zLmMKK0BAIC0zOCw3ICszOCwxMiBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICNpZmRlZiBJUF9PUFRJT05TCisgICAgIHVuc2lnbmVkIGNoYXIgb3B0YnVmW0JVRkZFUl9TSVpFIC8gM10sICpjcDsKKyAgICAgY2hhciAgICBsYnVmW0JVRkZFUl9TSVpFXSwgKmxwOworLSAgICBpbnQgICAgIG9wdHNpemUgPSBzaXplb2Yob3B0YnVmKSwgaXBwcm90bzsKKysjaWZkZWYgX19HTElCQ19fCisrICAgIHNvY2tsZW5fdCAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpOworKyNlbHNlCisrICAgIGludCAgICAgb3B0c2l6ZSA9IHNpemVvZihvcHRidWYpOworKyNlbmRpZgorKyAgICBpbnQgaXBwcm90bzsKKyAgICAgc3RydWN0IHByb3RvZW50ICppcDsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworICAgICB1bnNpZ25lZCBpbnQgb3B0OworZGlmZiAtLWdpdCBhL3NvY2tldC5jIGIvc29ja2V0LmMKK2luZGV4IDRiMmM1NzUuLmEwZDI5ODcgMTAwNjQ0CistLS0gYS9zb2NrZXQuYworKysrIGIvc29ja2V0LmMKK0BAIC05NSw3ICs5NSwxMSBAQCBzdHJ1Y3QgcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgICBzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIGNsaWVudDsKKyAgICAgc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXI7CisgI2VuZGlmCisrI2lmZGVmIF9fR0xJQkNfXworKyAgICBzb2NrbGVuX3QgIGxlbjsKKysjZWxzZQorICAgICBpbnQgICAgIGxlbjsKKysjZW5kaWYKKyAgICAgY2hhciAgICBidWZbQlVGU0laXTsKKyAgICAgaW50ICAgICBmZCA9IHJlcXVlc3QtPmZkOworIAorQEAgLTQyNiw3ICs0MzAsMTEgQEAgaW50ICAgICBmZDsKKyAjZWxzZQorICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworICNlbmRpZgorKyNpZmRlZiBfX0dMSUJDX18KKysgICAgc29ja2xlbl90ICBzaXplID0gc2l6ZW9mKHNpbik7CisrI2Vsc2UKKyAgICAgaW50ICAgICBzaXplID0gc2l6ZW9mKHNpbik7CisrI2VuZGlmCisgCisgICAgIC8qCisgICAgICAqIEVhdCB1cCB0aGUgbm90LXlldCByZWNlaXZlZCBkYXRhZ3JhbS4gU29tZSBzeXN0ZW1zIGluc2lzdCBvbiBhCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGNwLXdyYXBwZXJzL3RjcC13cmFwcGVycy03LjYvdGNwZGNoa19saWJ3cmFwcGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RjcGRjaGtfbGlid3JhcHBlZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTI5YmRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RjcGRjaGtfbGlid3JhcHBlZC5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK2RpZmYgLXJ1TiB0Y3Bfd3JhcHBlcnNfNy42Lm9yaWcvdGNwZGNoay5jIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCistLS0gdGNwX3dyYXBwZXJzXzcuNi5vcmlnL3RjcGRjaGsuYwkyMDAzLTA4LTIxIDAyOjUwOjM3LjAwMDAwMDAwMCArMDIwMAorKysrIHRjcF93cmFwcGVyc183LjYvdGNwZGNoay5jCTIwMDMtMDgtMjEgMDI6NTA6MzMuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsNiArNTMsMjQgQEAKKyAjaW5jbHVkZSAiaW5ldGNmLmgiCisgI2luY2x1ZGUgInNjYWZmb2xkLmgiCisgCisrLyogbGlzdCBvZiBwcm9ncmFtcyB3aGljaCBhcmUga25vd24gdG8gYmUgbGlua2VkIHdpdGggbGlid3JhcCBpbiBkZWJpYW4gKi8KKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbGlid3JhcF9wcm9ncmFtc1tdID0geworKyAgICAicG9ydG1hcCIsICJtb3VudGQiLCAic3RhdGQiLCAidWdpZGQiLAorKyAgICAicmVkaXIiLCAicmxpbmV0ZCIsCisrICAgICJzc2hkIiwKKysgICAgImF0ZnRwZCIsCisrICAgICJkaWFsZCIsCisrICAgICJlc291bmQiLAorKyAgICAiZ2RtIiwgImdub21lLXNlc3Npb24iLAorKyAgICAiaWNlY2FzdCIsICJpY2VjYXN0X2FkbWluIiwgImljZWNhc3RfY2xpZW50IiwgImljZWNhc3Rfc291cmNlIiwKKysgICAgIm15c3FsZCIsCisrICAgICJudG9wIiwKKysgICAgInBwdHBkIiwKKysgICAgInJxdW90YWQiLAorKyAgICAic2VuZG1haWwiLCAic21haWwiLAorKyAgICBOVUxMCisrfTsKKysKKyAgLyoKKyAgICogU3RvbGVuIGZyb20gaG9zdHNfYWNjZXNzLmMuLi4KKyAgICovCitAQCAtMTQ3LDggKzE2NSw4IEBACisgICAgIC8qCisgICAgICAqIFRoZXNlIGFyZSBub3QgcnVuIGZyb20gaW5ldGQgYnV0IG1heSBoYXZlIGJ1aWx0LWluIGFjY2VzcyBjb250cm9sLgorICAgICAgKi8KKy0gICAgaW5ldF9zZXQoInBvcnRtYXAiLCBXUl9OT1QpOworLSAgICBpbmV0X3NldCgicnBjYmluZCIsIFdSX05PVCk7CisrICAgIGZvciAoYyA9IDA7IGxpYndyYXBfcHJvZ3JhbXNbY107IGMrKykKKysJaW5ldF9zZXQobGlid3JhcF9wcm9ncmFtc1tjXSwgV1JfWUVTKTsKKyAKKyAgICAgLyoKKyAgICAgICogQ2hlY2sgYWNjZXNzaWJpbGl0eSBvZiBhY2Nlc3MgY29udHJvbCBmaWxlcy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnMtNy42L3RyeS1mcm9tLjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM4ZjMwNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzLTcuNi90cnktZnJvbS44CkBAIC0wLDAgKzEsMjggQEAKKy5USCBUUlktRlJPTSA4ICIyMXRoIEp1bmUgMTk5NyIgTGludXggIkxpbnV4IFByb2dyYW1tZXIncyBNYW51YWwiCisuU0ggTkFNRQordHJ5LWZyb20gXC0gdGVzdCBwcm9ncmFtIGZvciB0aGUgdGNwX3dyYXBwZXIKKy5TSCBTWU5PUFNJUworLkIgdHJ5LWZyb20KKy5TSCBERVNDUklQVElPTgorVGhlCisuQiB0cnktZnJvbQorY29tbWFuZCBjYW4gYmUgY2FsbGVkIHZpYSBhIHJlbW90ZSBzaGVsbCBjb21tYW5kIHRvIGZpbmQgb3V0CitpZiB0aGUgaG9zdG5hbWUgYW5kIGFkZHJlc3MgYXJlIHByb3Blcmx5IHJlY29nbml6ZWQKK2J5IHRoZQorLkIgdGNwX3dyYXBwZXIKK2xpYnJhcnksIGlmIHVzZXJuYW1lIGxvb2t1cCB3b3JrcywgYW5kIChTeXNWIG9ubHkpIGlmIHRoZSBUTEkKK29uIHRvcCBvZiBJUCBoZXVyaXN0aWNzIHdvcmsuIERpYWdub3N0aWNzIGFyZSByZXBvcnRlZCB0aHJvdWdoCisuQlIgc3lzbG9nICgzKQorYW5kIHJlZGlyZWN0ZWQgdG8gc3RkZXJyLgorCitFeGFtcGxlOgorCityc2ggaG9zdCAvc29tZS93aGVyZS90cnktZnJvbQorCisuU0ggU0VFIEFMU08KKy5CUiBob3N0c19hY2Nlc3MgKDUpLAorLkJSIGhvc3RzX29wdGlvbnMgKDUpLAorLkJSIHRjcGQgKDgpCisuU0ggQVVUSE9SCitXaWV0c2UgVmVuZW1hLCBFaW5kaG92ZW4gVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCBUaGUgTmV0aGVybGFuZHMuCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90Y3Atd3JhcHBlcnMvdGNwLXdyYXBwZXJzXzcuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjMwNDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RjcC13cmFwcGVycy90Y3Atd3JhcHBlcnNfNy42LmJiCkBAIC0wLDAgKzEsMTI4IEBACitTVU1NQVJZID0gIlNlY3VyaXR5IHRvb2wgdGhhdCBpcyBhIHdyYXBwZXIgZm9yIFRDUCBkYWVtb25zIgorREVTQ1JJUFRJT04gPSAiVG9vbHMgZm9yIG1vbml0b3JpbmcgYW5kIGZpbHRlcmluZyBpbmNvbWluZyByZXF1ZXN0cyBmb3IgdGNwIFwKKyAgICAgICAgICAgICAgIHNlcnZpY2VzLiIKK1NFQ1RJT04gPSAiY29uc29sZS9uZXR3b3JrIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0RJU0NMQUlNRVI7bWQ1PTA3MWJkNjljYjc4YjE4ODg4ZWE1ZTNkYTVjMzEyN2ZhIgorUFIgPSJyMTAiCisKKworUEFDS0FHRVMgPSAiJHtQTn0tZGJnIGxpYndyYXAgbGlid3JhcC1kb2MgbGlid3JhcC1kZXYgbGlid3JhcC1zdGF0aWNkZXYgJHtQTn0gJHtQTn0tZG9jIgorRklMRVNfbGlid3JhcCA9ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlN9IgorRklMRVNfbGlid3JhcC1kb2MgPSAiJHttYW5kaXJ9L21hbjMgJHttYW5kaXJ9L21hbjUiCitGSUxFU19saWJ3cmFwLWRldiA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTREVWfSAke2luY2x1ZGVkaXJ9IgorRklMRVNfbGlid3JhcC1zdGF0aWNkZXYgPSAiJHtsaWJkaXJ9L2xpYiouYSIKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0iCitGSUxFU18ke1BOfS1kb2MgPSAiJHttYW5kaXJ9L21hbjgiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLnBvcmN1cGluZS5vcmcvcHViL3NlY3VyaXR5L3RjcF93cmFwcGVyc18ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDBfbWFuX3F1b3RpbmcuZGlmZiBcCisgICAgICAgICAgIGZpbGU6Ly8wMV9tYW5fcG9ydGFiaWxpdHkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDVfd2lsZGNhcmRfbWF0Y2hpbmcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDZfZml4X2dldGhvc3RieW5hbWUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTBfdXNhZ2ktaXB2Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMV90Y3BkX2JsYWNrbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8xMV91c2FnaV9maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTJfbWFrZWZpbGVfY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzEzX3NobGliX3dlYWtzeW0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMTRfY2lkcl9zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzE1X21hdGNoX2NsYXJpZnkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXhwYW5kX3JlbW90ZV9wb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhdmVfc3RyZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbWFuX2Zyb21ob3N0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3Jlc3RvcmVfc2lnYWxhcm0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcmZjOTMxLmRpZmYgXAorICAgICAgICAgICBmaWxlOi8vc2FmZV9maW5nZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vc2lnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zaWdsb25nam1wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3NvY2tsZW5fdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90Y3BkY2hrX2xpYndyYXBwZWQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW5hbWVfc3RyaW5nc192YXJpYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90cnktZnJvbS44IFwKKyAgICAgICAgICAgZmlsZTovL3NhZmVfZmluZ2VyLjggXAorICAgICAgICAgICBmaWxlOi8vbWFrZWZpbGUtZml4LXBhcmFsbGVsLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTZmYTI1ZjcxMjI2ZDA5MGYzNGRlM2Y2YjEyMmZiNWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU0M2Q3YWRlZGY3OGE2ZGUwYjIyMWNjYmJkMTk1MmUwOGI1MTM4NzE3ZjRhZGU4MTQwMzliYjQ4OWE0MzE1ZCIKKworUyA9ICIke1dPUktESVJ9L3RjcF93cmFwcGVyc18ke1BWfSIKKworRVhUUkFfT0VNQUtFID0gIidDQz0ke0NDfScgXAorICAgICAgICAgICAgICAgICdBUj0ke0FSfScgXAorICAgICAgICAgICAgICAgICdSQU5MSUI9JHtSQU5MSUJ9JyBcCisgICAgICAgICAgICAgICAgJ1JFQUxfREFFTU9OX0RJUj0ke3NiaW5kaXJ9JyBcCisgICAgICAgICAgICAgICAgJ1NUWUxFPS1EUFJPQ0VTU19PUFRJT05TJyBcCisgICAgICAgICAgICAgICAgJ0ZBQ0lMSVRZPUxPR19EQUVNT04nIFwKKyAgICAgICAgICAgICAgICAnU0VWRVJJVFk9TE9HX0lORk8nIFwKKyAgICAgICAgICAgICAgICAnQlVHUz0nIFwKKyAgICAgICAgICAgICAgICAnVlNZU0xPRz0nIFwKKyAgICAgICAgICAgICAgICAnUkZDOTMxX1RJTUVPVVQ9MTAnIFwKKyAgICAgICAgICAgICAgICAnQUNDRVNTPS1ESE9TVFNfQUNDRVNTJyBcCisgICAgICAgICAgICAgICAgJ0tJTExfT1BUPS1ES0lMTF9JUF9PUFRJT05TJyBcCisgICAgICAgICAgICAgICAgJ1VNQVNLPS1EREFFTU9OX1VNQVNLPTAyMicgXAorICAgICAgICAgICAgICAgICdORVRHUk9VUD0ke0VYVFJBX09FTUFLRV9ORVRHUk9VUH0nIFwKKyAgICAgICAgICAgICAgICAnTElCUz0tbG5zbCcgXAorICAgICAgICAgICAgICAgICdBUkZMQUdTPXJ2JyBcCisgICAgICAgICAgICAgICAgJ0FVWF9PQko9d2Vha19zeW1ib2xzLm8nIFwKKyAgICAgICAgICAgICAgICAnVExJPScgXAorICAgICAgICAgICAgICAgICdDT1BUUz0nIFwKKyAgICAgICAgICAgICAgICAnRVhUUkFfQ0ZMQUdTPSR7Q0ZMQUdTfSAtRFNZU19FUlJMSVNUX0RFRklORUQgLURIQVZFX1NUUkVSUk9SIC1ESEFWRV9XRUFLU1lNUyAtRF9SRUVOVFJBTlQgLURJTkVUNj0xIC1Ec3NfZmFtaWx5PV9fc3NfZmFtaWx5IC1Ec3NfbGVuPV9fc3NfbGVuJyIKKworRVhUUkFfT0VNQUtFX05FVEdST1VQID0gIi1ETkVUR1JPVVAgLURVU0VfR0VURE9NQUlOIgorRVhUUkFfT0VNQUtFX05FVEdST1VQX2xpYmMtdWNsaWJjID0gIi1EVVNFX0dFVERPTUFJTiIKKworZG9fY29tcGlsZSAoKSB7CisJb2VfcnVubWFrZSAnVEFCTEVTPS1ESE9TVFNfREVOWT1cIiR7c3lzY29uZmRpcn0vaG9zdHMuZGVueVwiIC1ESE9TVFNfQUxMT1c9XCIke3N5c2NvbmZkaXJ9L2hvc3RzLmFsbG93XCInIFwKKwkJICAgYWxsCit9CisKK0JJTlMgPSAic2FmZV9maW5nZXIgdGNwZCB0Y3BkY2hrIHRyeS1mcm9tIHRjcGRtYXRjaCIKK01BTlMzID0gImhvc3RzX2FjY2VzcyIKK01BTlM1ID0gImhvc3RzX29wdGlvbnMiCitNQU5TOCA9ICJ0Y3BkIHRjcGRjaGsgdGNwZG1hdGNoIgorZG9faW5zdGFsbCAoKSB7CisJb2VfbGliaW5zdGFsbCAtYSBsaWJ3cmFwICR7RH0ke2xpYmRpcn0KKwlvZV9saWJpbnN0YWxsIC1DIHNoYXJlZCAtc28gbGlid3JhcCAke0R9JHtiYXNlX2xpYmRpcn0KKworCWlmIFsgIiR7bGliZGlyfSIgIT0gIiR7YmFzZV9saWJkaXJ9IiBdIDsgdGhlbgorCQlyZWxfbGliX3ByZWZpeD1gZWNobyAke2xpYmRpcn0gfCBzZWQgJ3MsXCheL1x8XClbXi9dW14vXSosLi4sZydgCisJCWxpYm5hbWU9YHJlYWRsaW5rICR7RH0ke2Jhc2VfbGliZGlyfS9saWJ3cmFwLnNvIHwgeGFyZ3MgYmFzZW5hbWVgCisJCWxuIC1zICR7cmVsX2xpYl9wcmVmaXh9JHtiYXNlX2xpYmRpcn0vJHtsaWJuYW1lfSAke0R9JHtsaWJkaXJ9L2xpYndyYXAuc28KKwkJcm0gLWYgJHtEfSR7YmFzZV9saWJkaXJ9L2xpYndyYXAuc28KKwlmaQorCisJaW5zdGFsbCAtZCAke0R9JHtzYmluZGlyfQorCWZvciBiIGluICR7QklOU307IGRvCisJCWluc3RhbGwgLW0gMDc1NSAkYiAke0R9JHtzYmluZGlyfS8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHttYW5kaXJ9L21hbjMKKwlmb3IgbSBpbiAke01BTlMzfTsgZG8KKwkJaW5zdGFsbCAtbSAwNjQ0ICRtLjMgJHtEfSR7bWFuZGlyfS9tYW4zLyB8fCBleGl0IDEKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0vbWFuNQorCWZvciBtIGluICR7TUFOUzV9OyBkbworCQlpbnN0YWxsIC1tIDA2NDQgJG0uNSAke0R9JHttYW5kaXJ9L21hbjUvIHx8IGV4aXQgMQorCWRvbmUKKworCWluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44CisJZm9yIG0gaW4gJHtNQU5TOH07IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkbS44ICR7RH0ke21hbmRpcn0vbWFuOC8gfHwgZXhpdCAxCisJZG9uZQorCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vdHJ5LWZyb20uOCAke0R9JHttYW5kaXJ9L21hbjgvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vc2FmZV9maW5nZXIuOCAke0R9JHttYW5kaXJ9L21hbjgvCisKKwlpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9CisJaW5zdGFsbCAtbSAwNjQ0IHRjcGQuaCAke0R9JHtpbmNsdWRlZGlyfS8KKworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKwl0b3VjaCAke0R9JHtzeXNjb25mZGlyfS9ob3N0cy5hbGxvdworCXRvdWNoICR7RH0ke3N5c2NvbmZkaXJ9L2hvc3RzLmRlbnkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0vaG9zdHMuYWxsb3cgJHtzeXNjb25mZGlyfS9ob3N0cy5kZW55IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGkyaHRtbC90ZXhpMmh0bWxfNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzI4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aTJodG1sL3RleGkyaHRtbF81LjAuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJQZXJsIHNjcmlwdCB0aGF0IGNvbnZlcnRzIFRleGluZm8gdG8gSFRNTCIKK0hPTUVQQUdFICAgID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy90ZXhpMmh0bWwvIgorU0VDVElPTiAgICAgPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgICAgID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIiCisKK1BSID0gInIyIgorCitTUkNfVVJJICAgICA9ICIke1NBVkFOTkFIX0dOVV9NSVJST1J9L3RleGkyaHRtbC8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmMTVhYzg3NmZjZGM4YmU4NjViMTY1MzVmNDgwYWE1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlOGE5OGIwZWUyMGM0OTVhNmFiODk0Mzk4YTA2NWVmNTgwMjcyZGJkNWExNWIxYjE5ZThiZDFiYzg5ZDlmOWZhIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8KKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBhdXRvdG9vbHNfZG9fY29uZmlndXJlIHVwZGF0ZXMgcG8vTWFrZWZpbGUuaW4uaW4sIHdlIGFsc28gbmVlZAorCSMgdXBkYXRlIHBvX2RvY3VtZW50LgorCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX2RvY3VtZW50LworCWNwIC1mICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiAke1N9L3BvX21lc3NhZ2VzLworfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJc2VkIC1pIC1lICcxcywjIS4qcGVybCwjISAke1VTUkJJTlBBVEh9L2VudiBwZXJsLCcgJHtEfSR7YmluZGlyfS90ZXhpMmh0bWwKK30KKworRklMRVNfJHtQTn0tZG9jICs9ICIke2RhdGFkaXJ9L3RleGluZm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS1uYXRpdmUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0MjBhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15LW5hdGl2ZS5iYgpAQCAtMCwwICsxLDMwIEBACitERVNDUklQVElPTiA9ICJGYWtlIHZlcnNpb24gb2YgdGhlIHRleGluZm8gdXRpbGl0eSBzdWl0ZSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDZiYjYyZTczY2E4YjkwMWQzZjJlOWQ3MTU0MmY0YmIiCitERVBFTkRTID0gIiIKK1BWID0gIjEuMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vdGVtcGxhdGUucHkgZmlsZTovL0NPUFlJTkciCisKK1MgPSAiJHtXT1JLRElSfSIKKworTkFUSVZFX1BBQ0tBR0VfUEFUSF9TVUZGSVggPSAiLyR7UE59IgorCitpbmhlcml0IG5hdGl2ZQorCitkb19pbnN0YWxsX25hbWUoKSB7CisgICAgRklMRU5BTUU9IiR7RH0ke2JpbmRpcn0vJDEiCisgICAgIyBVc2luZyBsbiBjYXVzZXMgcHJvYmxlbXMgd2l0aCBybV93b3JrCisgICAgY3AgLVQgIiR7U30vdGVtcGxhdGUucHkiICIkRklMRU5BTUUiCisgICAgY2htb2QgK3ggJEZJTEVOQU1FCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgbWtkaXIgLXAgIiR7RH0ke2JpbmRpcn0iCisgICAgZm9yIGkgaW4gbWFrZWluZm8gcG9kMnRleGkgdGV4aTJkdmkgcGRmdGV4aTJkdmkgdGV4aW5kZXggdGV4aTJwZGYgXAorICAgICAgICAgICAgIHR4aXhtbDJ0ZXhpIHRleGkyYW55IGluc3RhbGwtaW5mbyBnaW5zdGFsbC1pbmZvIFwKKyAgICAgICAgICAgICB1cGRhdGUtaW5mby1kaXI7IGRvCisgICAgICAgIGRvX2luc3RhbGxfbmFtZSAkaQorICAgIGRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L0NPUFlJTkcgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMWNiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby1kdW1teS1uYXRpdmUvdGV4aW5mby1kdW1teS9DT1BZSU5HCkBAIC0wLDAgKzEsMTkgQEAKK0NvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3JwLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KK1RIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8tZHVtbXktbmF0aXZlL3RleGluZm8tZHVtbXkvdGVtcGxhdGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3MDMzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvLWR1bW15LW5hdGl2ZS90ZXhpbmZvLWR1bW15L3RlbXBsYXRlLnB5CkBAIC0wLDAgKzEsMTIyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMi43CisKKyMgdGVtcGxhdGUucHkgKGFuZCBvdGhlciBmaWxlbmFtZXMpCisjIEJ5IE1heCBFbGlhc2VyIChtYXguZWxpYXNlckBpbnRlbC5jb20pCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnAuCisKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisjIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyMgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorCisjIFRoaXMgcHJvZ3JhbSBhY3RzIGxpa2UgYSBkdW1teSB2ZXJzaW9uIG9mIHRoZSB0ZXhpbmZvIHV0aWxpdGllcywgY3JlYXRpbmcKKyMgdGhlIHJpZ2h0IG91dHB1dCBmaWxlcyBidXQgbGVhdmluZyB0aGVtIGJsYW5rLiBJdCB3aWxsIHBhcnNlIG91dCB0aGUgbmFtZQorIyBvZiB0aGUgZXhlY3V0YWJsZSBmcm9tIGFyZ3ZbMF0gYW5kIGVtdWxhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcHJvZ3JhbSwgc28KKyMgbXVsdGlwbGUgY29waWVzIG9mIHRoaXMgc2NyaXB0IHdpbGwgZXhpc3QgdW5kZXIgZGlmZmVyZW50IG5hbWVzLgorCitpbXBvcnQgc3lzLCBvcworCitvbG9uZyA9ICItLW91dHB1dD0iCitFbG9uZyA9ICItLW1hY3JvLWV4cGFuZD0iCisKKwordGhpc19iaW5hcnkgPSBzeXMuYXJndlswXS5zcGxpdCAoIi8iKVstMV0KKworIyBUbyBiZSBvdXRwdXR0ZWQgaWYgZnVuY3Rpb25hbGl0eSB0aGF0IGhhc24ndCBiZWVuIHN0dWJiZWQgeWV0IGlzIGludm9rZWQuCitzdHViX21zZyA9ICIiIgorVGhpcyBzdGFuZC1pbiB2ZXJzaW9uIG9mICVzIGlzIG5vdCB5ZXQgZnVsbHkgY2FwYWJsZSBvZiBlbXVsYXRpbmcgdGhlIHJlYWwKK3ZlcnNpb24gZnJvbSB0aGUgR05VIHRleGluZm8gc3VpdGUuIElmIHlvdSBzZWUgdGhpcyBtZXNzYWdlLCBmaWxlIGEgYnVnIHJlcG9ydAord2l0aCBkZXRhaWxzIG9uIHRoZSByZWNpcGUgdGhhdCBmYWlsZWQuCisiIiIgJSB0aGlzX2JpbmFyeQorCisjIEF1dG90b29scyBzZXR1cHMgcXVlcnkgdGhlIHZlcnNpb24sIHNvIHRoaXMgaXMgYWN0dWFsbHkgbmVjZXNzYXJ5LiBTb21lIG9mCisjIHRoZW0gKGxvb2tpbicgYXQgeW91LCBnbGliYykgYWN0dWFsbHkgbG9vayBmb3IgdGhlIHN1YnN0cmluZyAiR05VIHRleGluZm8sIgorIyBzbyB3ZSBwdXQgdGhhdCBzdWJzdHJpbmcgaW4gdGhlcmUgd2l0aG91dCBhY3R1YWxseSB0ZWxsaW5nIGEgbGllLgordmVyc2lvbl9zdHIgPSAiIiIgJXMgKGZha2UgdGV4aW5mbywgZW11bGF0aW5nIEdOVSB0ZXhpbmZvKSA1LjIKKyAKK1N1cGVyIGFtYXppbmcgdmVyc2lvbiB3aGljaCBpcyB0b3RhbGx5IG5vdCBmYWtlIGluIGFueSB3YXkgd2hhdHNvZXZlci4KK0NvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLiBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVAorbGljZW5zZS4KKyIiIiAlIHRoaXNfYmluYXJ5CisKK3NpbXBsZV9iaW5hcmllcyA9ICJwb2QydGV4aSB0ZXhpMmR2aSBwZGZ0ZXhpMmR2aSB0ZXhpbmRleCB0ZXhpMnBkZiBcCisgICAgICAgICAgICAgICAgICAgdHhpeG1sMnRleGkgaW5zdGFsbC1pbmZvIGdpbnN0YWxsLWluZm8gXAorICAgICAgICAgICAgICAgICAgIHVwZGF0ZS1pbmZvLWRpciIuc3BsaXQgKCkKKworIyBUaGVzZSB1dGlsaXRpZXMgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIGFuZCBmbGFncy4KK2NvbXBsZXhfYmluYXJpZXMgPSAibWFrZWluZm8gdGV4aTJhbnkiLnNwbGl0ICgpCisKK3ZhbGlkX2JpbmFyaWVzID0gc2ltcGxlX2JpbmFyaWVzICsgY29tcGxleF9iaW5hcmllcworCisjIEZvciBnZW5lcmF0aW5nIGJsYW5rIG91dHB1dCBmaWxlcy4KK2RlZiB0b3VjaF9maWxlIChwYXRoKToKKyAgICBmID0gb3BlbiAocGF0aCwgInciKQorICAgIGYuY2xvc2UgKCkKKworYXNzZXJ0IHRoaXNfYmluYXJ5IGluIHZhbGlkX2JpbmFyaWVzLCBcCisgICAgICAgdGhpc19iaW5hcnkgKyAiIGlzIG5vdCBvbmUgb2YgIiArICcsICcuam9pbiAodmFsaWRfYmluYXJpZXMpCisKK2lmICItLXZlcnNpb24iIGluIHN5cy5hcmd2OgorICAgIHByaW50IHZlcnNpb25fc3RyCisgICAgc3lzLmV4aXQgKDApCisKKyMgRm9yIGRlYnVnZ2luZworbG9nX2ludGVyY2VwdGlvbnMgPSBGYWxzZQoraWYgbG9nX2ludGVyY2VwdGlvbnM6CisgICAgZiA9IG9wZW4gKCIvdG1wL2ludGVyY2VwdGVkXyIgKyB0aGlzX2JpbmFyeSwgImEiKQorICAgIGYud3JpdGUgKCcgJy5qb2luIChbdGhpc19iaW5hcnldICsgc3lzLmFyZ3ZbMTpdKSArICdcbicpCisgICAgZi5jbG9zZSAoKQorCisjIExvb2sgdGhyb3VnaCB0aGUgb3B0aW9ucyBhbmQgZmxhZ3MsIGFuZCBpZiBuZWNlc3NhcnksIHRvdWNoIGFueSBvdXRwdXQKKyMgZmlsZXMuCithcmdfaWR4ID0gMQord2hpbGUgYXJnX2lkeCA8IGxlbiAoc3lzLmFyZ3YpOgorICAgIGFyZyA9IHN5cy5hcmd2IFthcmdfaWR4XQorICAgIAorICAgIGlmIGFyZyA9PSAiLS0iOgorICAgICAgICBicmVhaworICAgIAorICAgICMgU29tZXRoaW5nIGxpa2UgLUkgLiBjYW4gcmVzdWx0IGluIGEgbmVlZCBmb3IgdGhpcyAoc3BlY2lmaWNhbGx5IHRoZSAuKQorICAgIGVsaWYgbGVuIChhcmcpIDwgMjoKKyAgICAgICAgcGFzcworICAgIAorICAgICMgQ2hlY2sgaWYgLW8gb3IgLS1vdXRwdXQgaXMgc3BlY2lmaWVkLiBUaGVzZSBjYW4gYmUgdXNlZCBhdCBtb3N0IG9uY2UuCisgICAgZWxpZiBhcmdbMF0gPT0gJy0nIGFuZCBhcmdbMV0gIT0gJy0nIGFuZCBhcmdbbGVuIChhcmcpIC0gMV0gPT0gJ28nOgorICAgICAgICB0b3VjaF9maWxlIChzeXMuYXJndlthcmdfaWR4ICsgMV0pCisgICAgICAgIHN5cy5leGl0ICgwKQorICAgIGVsaWYgYXJnLnN0YXJ0c3dpdGggKG9sb25nKToKKyAgICAgICAgdG91Y2hfZmlsZSAoYXJnLnNwbGl0ICgiPSIpWzFdKQorICAgICAgICBzeXMuZXhpdCAoMCkKKyAgICAKKyAgICAjIENoZWNrIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgorICAgIGVsc2U6CisgICAgICAgIGFzc2VydCBhcmdbMF0gIT0gJy0nIG9yIGFyZ1sxXSA9PSAnLScgb3IgJ0UnIG5vdCBpbiBhcmcgb3IgXAorICAgICAgICAgICAgICAgdGhpc19iaW5hcnkgaW4gc2ltcGxlX2JpbmFyaWVzLCBcCisgICAgICAgICAgICAgICAiLUUgb3B0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkIiArIHN0dWJfbXNnCisgICAgICAgIAorICAgICAgICBhc3NlcnQgbm90IGFyZy5zdGFydHN3aXRoIChFbG9uZyksIFwKKyAgICAgICAgICAgICAgIEVsb25nWzotMV0gKyAiIG9wdGlvbiBub3QgeWV0IHN1cHBvcnRlZCIgKyBzdHViX21zZworICAgIAorICAgIGFyZ19pZHggKz0gMQorCisjIFRoZSAtby8tLW91dHB1dCBvcHRpb24gb3ZlcnJpZGVzIHRoZSBkZWZhdWx0LiBGb3IgbWFrZWluZm8gYW5kIHRleGkyYW55LAorIyB0aGF0IGRlZmF1bHQgaXMgdG8gbG9vayBmb3IgYSBAc2V0ZmlsZW5hbWUgY29tbWFuZCBpbiB0aGUgaW5wdXQgZmlsZS4KKyMgT3RoZXJ3aXNlLCBwcmludGluZyBub3RoaW5nIHRvIHN0ZG91dCBhbmQgdGhlbiBleGl0aW5nIHNob3VsZCBzdWZmaWNlLgorYXNzZXJ0IHRoaXNfYmluYXJ5IGluIHNpbXBsZV9iaW5hcmllcywgXAorICAgICAgICJEb24ndCBrbm93IGhvdyB0byBnZXQgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIGZyb20gaW5wdXQgZmlsZSEiICsgXAorICAgICAgIHN0dWJfbXNnCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvY2hlY2stbG9jYWxlLWgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkNjY2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2NoZWNrLWxvY2FsZS1oLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK2ZpeCB0aGUgbWFjcm8gY2hlY2sKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2NvbmZpZ3VyZSBkb2VzIG5vdCBjaGVjayBpZiBsb2NhbGUuaCBleGlzdHMsIGJ1dCBjaGVjayBzZXRsb2NhbGUsCitpZiBzZXRsb2NhbGUgZXhpc3QsIHRoZSBsb2NhbGUuaCBzaG91bGQgZXhpc3QuCisKK1NpZ25lZC1vZmYtYnk6IFJveSBMaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGxpYi9zeXN0ZW0uaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9zeXN0ZW0uaCBiL2xpYi9zeXN0ZW0uaAoraW5kZXggOTQ2ZWIzYy4uYzcwMDM3YiAxMDA2NDQKKy0tLSBhL2xpYi9zeXN0ZW0uaAorKysrIGIvbGliL3N5c3RlbS5oCitAQCAtNDIsNyArNDIsNyBAQCBleHRlcm4gY2hhciAqc3Vic3RyaW5nIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgI2luY2x1ZGUgPGN0eXBlLmg+CisgCisgLyogQWxsIHN5c3RlbXMgbm93YWRheXMgcHJvYmFibHkgaGF2ZSB0aGVzZSBmdW5jdGlvbnMsIGJ1dCAuLi4gKi8KKy0jaWZkZWYgSEFWRV9MT0NBTEVfSAorKyNpZmRlZiBIQVZFX1NFVExPQ0FMRQorICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjZW5kaWYKKyAjaWZuZGVmIEhBVkVfU0VUTE9DQUxFCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvZG8tY29tcGlsZS1uYXRpdmUtdG9vbHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlYmUyNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0Zyb20gNDU4ZTk0NTBjZWNmNzAzZjU1NTM2ZTYwOTM2NTE2MjcxOTU4NTkwMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBTZXAgMjAxNCAxNzowMzoyOSArMDgwMAorU3ViamVjdDogW1BBVENIXSBkbyBub3QgY29tcGlsZSBob3N0IHRvb2xzLCBzaW5jZSB3ZSBoYXZlIG5hdGl2ZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjMgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDIyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiNDYxMzBkLi5jZjU4NjU0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC05MCwyOCArOTAsNyBAQCBBQ19DQU5PTklDQUxfQlVJTEQKKyAjICRuYXRpdmVfdG9vbHMgaXMgYWxzbyBhZGRlZCB0byBTVUJESVJTIGluIHRoZSBtYWluIE1ha2VmaWxlLmFtLAorICMgc28gdGhhdCBtYWtlIGNvbXBpbGVzIHRoZSBuYXRpdmUgdG9vbHMgZmlyc3QuCisgIworLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKy0gIG5hdGl2ZV90b29scz0KKy1lbHNlCistICBuYXRpdmVfdG9vbHM9dG9vbHMKKy0gIHRlc3QgLWQgIiRuYXRpdmVfdG9vbHMiIHx8IG1rZGlyICIkbmF0aXZlX3Rvb2xzIgorLSAgY29uZmRpcj1gKGNkICIkc3JjZGlyIjtwd2QpYAorLSAgIyBNYWtlIHN1cmUgdGhlIHNlY29uZGFyeSBjb25maWd1cmUgd29uJ3QgZmFpbCB3aXRoCistICAjICJlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQiLgorLSAgcm0gLWYgY29uZmlnLnN0YXR1cworLSAgQUNfTVNHX05PVElDRShbW0RvaW5nIGNvbmZpZ3VyZSBvZiBuYXRpdmUgdG9vbHMgKCR7YnVpbGR9KS5dXSkKKy0gIGNkICIkbmF0aXZlX3Rvb2xzIiB8fCBleGl0IDEKKy0gICMgUnVuIHNlY29uZGFyeSBjb25maWd1cmUgaW4gYWx0ZXJuYXRlIGVudmlyb25tZW50IG9yCistICAjIGl0IGdldHMgdGhlIHdyb25nIENDIGV0Yy4gIGVudiAtaSBnaXZlcyB0aGlzIGJ1aWxkIGhvc3QgY29uZmlndXJlCistICAjIGEgY2xlYW4gZW52aXJvbm1lbnQuCistICBlbnYgLWkgQ0M9IiR7QlVJTERfQ0N9IiBBUj0iJHtCVUlMRF9BUn0iIFJBTkxJQj0iJHtCVUlMRF9SQU5MSUJ9IiBcCistICAgICAgUEFUSD0iJHtQQVRIfSIgXAorLSAgICAgIHRvb2xzX29ubHk9MSBcCistICAgICR7Y29uZmRpcn0vY29uZmlndXJlIC0tYnVpbGQ9JHtidWlsZH0gLS1ob3N0PSR7YnVpbGR9IFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJwYXRoIC0tZGlzYWJsZS1ubHMKKy0gIGNkIC4uIHx8IGV4aXQgMQorLSAgQUNfTVNHX05PVElDRShbW0NvbnRpbnVpbmcgd2l0aCBtYWluIGNvbmZpZ3VyZSAoJHtob3N0fSkuXV0pCistZmkKKytuYXRpdmVfdG9vbHM9CisgQUNfU1VCU1QobmF0aXZlX3Rvb2xzKQorIEFNX0NPTkRJVElPTkFMKFRPT0xTX09OTFksIFtbdGVzdCAieCR0b29sc19vbmx5IiA9IHgxXV0pCisgCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8tNC44L3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjk3MDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby00LjgvdXNpbmctbmF0aXZlLW1ha2VpbmZvLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0Zyb20gOWIwZGY3ZDZkM2MxOGNmYWM4MmMyOTFkNjBhNTM1N2QxYmM4ZDlkMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJSb3kuTGkiIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorRGF0ZTogV2VkLCAxMCBTZXAgMjAxNCAxNzoxMDowMyArMDgwMAorU3ViamVjdDogW1BBVENIXSB1c2luZyBuYXRpdmUgbWFrZWluZm8KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJveS5MaSA8cm9uZ3FpbmcubGlAd2luZHJpdmVyLmNvbT4KKy0tLQorIGRvYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KKworZGlmZiAtLWdpdCBhL2RvYy9NYWtlZmlsZS5hbSBiL2RvYy9NYWtlZmlsZS5hbQoraW5kZXggNjNkZjgxOC4uYjZjZWIzNCAxMDA2NDQKKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMTksNyArMTksNyBAQCBtYW5fTUFOUyA9IGluZm8uMSBpbmZva2V5LjEgaW5zdGFsbC1pbmZvLjEgbWFrZWluZm8uMSB0ZXhpbmRleC4xIHRleGkyZHZpLjEgXAorIAorICMgVXNlIHRoZSBwcm9ncmFtcyBidWlsdCBpbiBvdXIgZGlzdHJpYnV0aW9uLCB0YWtpbmcgYWNjb3VudCBvZiBwb3NzaWJsZQorICMgY3Jvc3MtY29tcGlsaW5nLgorLU1BS0VJTkZPID0gJCh0b3BfYnVpbGRkaXIpLyQobmF0aXZlX3Rvb2xzKS9tYWtlaW5mby9tYWtlaW5mbworK01BS0VJTkZPID0gbWFrZWluZm8KKyBJTlNUQUxMX0lORk8gPSAkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL3V0aWwvaW5zdGFsbC1pbmZvCisgCisgVFhJX1hMQVRFID0gdHhpLWNzLnRleCB0eGktZGUudGV4IHR4aS1lbi50ZXggdHhpLWVzLnRleCB0eGktZnIudGV4IFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzMzOGFhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHRleGluZm8tNS4yL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMi5vcmlnL2dudWxpYi9saWIvTWFrZWZpbGUuYW0KKysrKyB0ZXhpbmZvLTUuMi9nbnVsaWIvbGliL01ha2VmaWxlLmFtCitAQCAtMzc4LDcgKzM3OCw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjZmMTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kaXNhYmxlLW5hdGl2ZS10b29scy5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBhbHJlYWR5IERFUEVORCBvbiB0aGUgbmF0aXZlIHRleGluZm8gYmVpbmcgcHJlc2VudCBiZWZvcmUgYnVpbGRpbmcgc28KK3RoZXJlIGlzbid0IGFueSBuZWVkIHRvIHRyeSBhbmQgYnVpbGQgdGhlIHJlcXVpcmVkIG5hdGl2ZSB0ZXhpbmZvIGJpbmFyaWVzCitiZWZvcmUgY3Jvc3MtY29tcGlsaW5nLiBUaGlzIHNpbXBsaWZpZXMgdGhlIHJlY2lwZSBzb21ld2hhdCEKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIG9lIHNwZWNpZmljCisKK1NpZ25lZC1vZmYtYnk6IEpvc2h1YSBMb2NrIDxqb3NoQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IHRleGluZm8tNC4xMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTQuMTMub3JpZy9jb25maWd1cmUuYWMKKysrKyB0ZXhpbmZvLTQuMTMvY29uZmlndXJlLmFjCitAQCAtMTAwLDI5ICsxMDAsNyBAQCBBQ19DQU5PTklDQUxfQlVJTEQKKyAjICRuYXRpdmVfdG9vbHMgaXMgYWxzbyBhZGRlZCB0byBTVUJESVJTIGluIHRoZSBtYWluIE1ha2VmaWxlLmFtLAorICMgc28gdGhhdCBtYWtlIGNvbXBpbGVzIHRoZSBuYXRpdmUgdG9vbHMgZmlyc3QuCisgIworLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbm87IHRoZW4KKy0gIG5hdGl2ZV90b29scz0KKy1lbHNlCistICBuYXRpdmVfdG9vbHM9dG9vbHMKKy0gIHRlc3QgLWQgIiRuYXRpdmVfdG9vbHMiIHx8IG1rZGlyICIkbmF0aXZlX3Rvb2xzIgorLSAgY29uZmRpcj1gKGNkICIkc3JjZGlyIjtwd2QpYAorLSAgIyBNYWtlIHN1cmUgdGhlIHNlY29uZGFyeSBjb25maWd1cmUgd29uJ3QgZmFpbCB3aXRoCistICAjICJlcnJvcjogc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQiLgorLSAgcm0gLWYgY29uZmlnLnN0YXR1cworLSAgQUNfTVNHX05PVElDRShbW0RvaW5nIGNvbmZpZ3VyZSBvZiBuYXRpdmUgdG9vbHMgKCR7YnVpbGR9KS5dXSkKKy0gIGNkICIkbmF0aXZlX3Rvb2xzIiB8fCBleGl0IDEKKy0gICMgUnVuIHNlY29uZGFyeSBjb25maWd1cmUgaW4gYWx0ZXJuYXRlIGVudmlyb25tZW50IG9yCistICAjIGl0IGdldHMgdGhlIHdyb25nIENDIGV0Yy4KKy0gICMgZW52IC1pIGdpdmVzIHRoaXMgYnVpbGQgaG9zdCBjb25maWd1cmUgYSBjbGVhbiBlbnZpcm9ubWVudDsKKy0gICMgY29uc2VxdWVudGx5LCB3ZSBoYXZlIHRvIHJlLWluaXRpYWxpemUgJFBBVEguCistICBlbnYgLWkgQ0M9IiRCVUlMRF9DQyIgQVI9IiRCVUlMRF9BUiIgUkFOTElCPSIkQlVJTERfUkFOTElCIiBcCistICAgICAgUEFUSD0iJFBBVEgiIFwKKy0gICAgICB0b29sc19vbmx5PTEgXAorLSAgICAke2NvbmZkaXJ9L2NvbmZpZ3VyZSAtLWJ1aWxkPSR7YnVpbGR9IC0taG9zdD0ke2J1aWxkfSBcCistICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGF0aCAtLWRpc2FibGUtbmxzCistICBjZCAuLiB8fCBleGl0IDEKKy0gIEFDX01TR19OT1RJQ0UoW1tDb250aW51aW5nIHdpdGggbWFpbiBjb25maWd1cmUgKCR7aG9zdH0pLl1dKQorLWZpCisrbmF0aXZlX3Rvb2xzPQorIEFDX1NVQlNUKG5hdGl2ZV90b29scykKKyBBTV9DT05ESVRJT05BTChUT09MU19PTkxZLCBbW3Rlc3QgIngkdG9vbHNfb25seSIgPSB4MV1dKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNlNDdlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSw2NCBAQAorRnJvbSA2ZjFmMzkxMmZjYjkwMGIzYTNlNmNiZTMzNjAzMDZmYWRlMzMzNDk3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgNiBBdWcgMjAxNSAxNDo1NTowOCArMDMwMAorU3ViamVjdDogW1BBVENIXSBkb250LWRlcGVuZC1vbi1oZWxwMm1hbgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKy0tLQorIGRvYy9NYWtlZmlsZS5hbSB8ICAyICstCisgbWFuL01ha2VmaWxlLmFtIHwgMTIgKysrKysrLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kb2MvTWFrZWZpbGUuYW0gYi9kb2MvTWFrZWZpbGUuYW0KK2luZGV4IDcxOThhNmIuLjRiYmE1NTAgMTAwNjQ0CistLS0gYS9kb2MvTWFrZWZpbGUuYW0KKysrKyBiL2RvYy9NYWtlZmlsZS5hbQorQEAgLTQwLDcgKzQwLDcgQEAgcmVmY2FyZF9maWxlcyA9IHJlZmNhcmQvTWFrZWZpbGUgcmVmY2FyZC90eGljbWRjaGVjayBcCisgIyBJbmNsdWRlIG91ciB0ZXhpbmZvLnRleCwgbm90IEF1dG9tYWtlJ3MuCisgRVhUUkFfRElTVCA9IGVwc2YudGV4IHRleGluZm8udGV4IFwKKyAgICAgICAgICAgICAgZmRsLnRleGkgXAorLQkgICAgICQobWFuX01BTlMpICQoVFhJX1hMQVRFKSBcCisrCSAgICAgJChUWElfWExBVEUpIFwKKyAJICAgICAkKHJlZmNhcmRfZmlsZXMpCisgCisgaWYgSU5TVEFMTF9XQVJOSU5HUworZGlmZiAtLWdpdCBhL21hbi9NYWtlZmlsZS5hbSBiL21hbi9NYWtlZmlsZS5hbQoraW5kZXggYTA4ZDYwMy4uYmRmYzlhNCAxMDA2NDQKKy0tLSBhL21hbi9NYWtlZmlsZS5hbQorKysrIGIvbWFuL01ha2VmaWxlLmFtCitAQCAtMTMsMjQgKzEzLDI0IEBACisgIyBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAKKyAjIFRoZXNlIGFyZSBnZW5lcmF0ZWQgdXNpbmcgaGVscDJtYW4uCistbWFuX01BTlMgPSBpbnN0YWxsLWluZm8uMSBtYWtlaW5mby4xIHRleGluZGV4LjEgdGV4aTJkdmkuMQorKyNtYW5fTUFOUyA9IGluc3RhbGwtaW5mby4xIG1ha2VpbmZvLjEgdGV4aW5kZXguMSB0ZXhpMmR2aS4xCisgCisgIyBUaGVzZSByZXF1aXJlIHRoZSBidWlsZCBpbiBpbmZvLywgdGh1cyBjYW4ndCBkbyBpZiB3ZSBmYWlsZWQgdG8gZmluZCBhCisgIyB0ZXJtaW5hbCBsaWJyYXJ5LgorIGlmIEhBVkVfVEVSTUxJQlMKKy1tYW5fTUFOUyArPSBpbmZvLjEKKysjbWFuX01BTlMgKz0gaW5mby4xCisgZW5kaWYKKyAKKyAjIFRoZXNlIGFyZSBoYW5kLXdyaXR0ZW4uCistbWFuX01BTlMgKz0gaW5mby41IHRleGluZm8uNQorKyNtYW5fTUFOUyArPSBpbmZvLjUgdGV4aW5mby41CisgCisgIyBUaGlzIGlzIGdlbmVyYXRlZCBieSBwb2QybWFuLCBidXQgbGV0J3MganVzdCBydW4gaXQgYnkgaGFuZC4KKy1tYW5fTUFOUyArPSBwb2QydGV4aS4xCisrI21hbl9NQU5TICs9IHBvZDJ0ZXhpLjEKKyAKKyAjIFRoZXNlIGFyZSBqdXN0IC5zbydzIHRvIHRoZSBjb21tb24gcHJvZ3JhbS4KKy1tYW5fTUFOUyArPSB0ZXhpMmFueS4xIHRleGkycGRmLjEgcGRmdGV4aTJkdmkuMQorKyNtYW5fTUFOUyArPSB0ZXhpMmFueS4xIHRleGkycGRmLjEgcGRmdGV4aTJkdmkuMQorIAorLUVYVFJBX0RJU1QgPSAkKG1hbl9NQU5TKSBnaW5mby5oMm0KKytFWFRSQV9ESVNUID0gZ2luZm8uaDJtCisgCisgIyBNYWludGFpbmVycyBzaG91bGQgYmUgYWJsZSB0byByZWdlbmVyYXRlLgorIE1BSU5UQUlORVJDTEVBTkZJTEVTID0gJChtYW5fTUFOUykKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby9saW5rLXppcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vbGluay16aXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2ZTlmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm8vbGluay16aXAucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAoraW5zdGFsbC1pbmZvIHVzZXMgc3ltYm9scyBmcm9tIHpsaWIgc28gbXVzdCBsaW5rIGFnYWluc3QgaXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb3NodWEgTG9jayA8am9zaEBsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB0ZXhpbmZvLTUuMS9pbnN0YWxsLWluZm8vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB0ZXhpbmZvLTUuMS5vcmlnL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4xL2luc3RhbGwtaW5mby9NYWtlZmlsZS5hbQorQEAgLTM0LDQgKzM0LDQgQEAgQU1fQ1BQRkxBR1MgPSAJCQkJCVwKKyAgIC1JJCh0b3Bfc3JjZGlyKS9nbnVsaWIvbGliCQkJXAorICAgLUkkKHRvcF9idWlsZGRpcikvZ251bGliL2xpYgkJCVwKKyAgIC1ETE9DQUxFRElSPVwiJChsb2NhbGVkaXIpXCIKKy1MREFERCA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hICQoTElCSU5UTCkKKytMREFERCA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hICQoTElCSU5UTCkgLWx6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3RleGluZm8tNC4xMi16bGliLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby90ZXhpbmZvLTQuMTItemxpYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWJkMjIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby90ZXhpbmZvLTQuMTItemxpYi5wYXRjaApAQCAtMCwwICsxLDIzMyBAQAorRnJvbSAyMGUxZDhhOTQ4MWRjMTNkZDFkNGQxNjhiOTBlMGVkMmZmMDk3Yjk4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFRodSwgNiBBdWcgMjAxNSAxNDoyOTo1NyArMDMwMAorU3ViamVjdDogW1BBVENIXSB0ZXhpbmZvLTQuMTItemxpYgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGluc3RhbGwtaW5mby9NYWtlZmlsZS5pbiAgICB8ICAyICstCisgaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCA0MiBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbiBiL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgoraW5kZXggYWQ3M2FiYi4uZWFhMjE1MyAxMDA2NDQKKy0tLSBhL2luc3RhbGwtaW5mby9NYWtlZmlsZS5pbgorKysrIGIvaW5zdGFsbC1pbmZvL01ha2VmaWxlLmluCitAQCAtMjQxLDcgKzI0MSw3IEBAIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIKKyBQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQorIGFtX2dpbnN0YWxsX2luZm9fT0JKRUNUUyA9IGluc3RhbGwtaW5mby4kKE9CSkVYVCkKKyBnaW5zdGFsbF9pbmZvX09CSkVDVFMgPSAkKGFtX2dpbnN0YWxsX2luZm9fT0JKRUNUUykKKy1naW5zdGFsbF9pbmZvX0xEQUREID0gJChMREFERCkKKytnaW5zdGFsbF9pbmZvX0xEQUREID0gJChMREFERCkgLWx6CisgYW1fX0RFUEVOREVOQ0lFU18xID0KKyBnaW5zdGFsbF9pbmZvX0RFUEVOREVOQ0lFUyA9ICQodG9wX2J1aWxkZGlyKS9nbnVsaWIvbGliL2xpYmdudS5hIFwKKyAJJChhbV9fREVQRU5ERU5DSUVTXzEpCitkaWZmIC0tZ2l0IGEvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jIGIvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCitpbmRleCBiNDU0YzE1Li40ZTM5MTIyIDEwMDY0NAorLS0tIGEvaW5zdGFsbC1pbmZvL2luc3RhbGwtaW5mby5jCisrKysgYi9pbnN0YWxsLWluZm8vaW5zdGFsbC1pbmZvLmMKK0BAIC0yMiw2ICsyMiw3IEBACisgI2luY2x1ZGUgPGdldG9wdC5oPgorICNpbmNsdWRlIDxyZWdleC5oPgorICNpbmNsdWRlIDxhcmd6Lmg+CisrI2luY2x1ZGUgPHpsaWIuaD4KKyAKKyAjZGVmaW5lIFRBQl9XSURUSCA4CisgCitAQCAtNjg0LDE1ICs2ODUsMTUgQEAgVGhlIGZpcnN0IHRpbWUgeW91IGludm9rZSBJbmZvIHlvdSBzdGFydCBvZmYgbG9va2luZyBhdCB0aGlzIG5vZGUuXG5cCisgICAgCisgICAgUmV0dXJuIGVpdGhlciBzdGRpbiByZWFkaW5nIHRoZSBmaWxlLCBvciBhIG5vbi1zdGRpbiBwaXBlIHJlYWRpbmcKKyAgICB0aGUgb3V0cHV0IG9mIHRoZSBjb21wcmVzc2lvbiBwcm9ncmFtLiAgKi8KKy1GSUxFICoKKyt2b2lkICoKKyBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgICAgIHZvaWQgKCpjcmVhdGVfY2FsbGJhY2spIChjaGFyICopLAorLSAgICBjaGFyICoqb3BlbmVkX2ZpbGVuYW1lLCBjaGFyICoqY29tcHJlc3Npb25fcHJvZ3JhbSkgCisrICAgIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtLCBpbnQgKmlzX3BpcGUpIAorIHsKKyAgIGNoYXIgKmxvY2FsX29wZW5lZF9maWxlbmFtZSwgKmxvY2FsX2NvbXByZXNzaW9uX3Byb2dyYW07CisgICBpbnQgbnJlYWQ7CisgICBjaGFyIGRhdGFbMTNdOworLSAgRklMRSAqZjsKKysgIGd6RmlsZSAqZjsKKyAKKyAgIC8qIFdlIGxldCB0aGVtIHBhc3MgTlVMTCBpZiB0aGV5IGRvbid0IHdhbnQgdGhpcyBpbmZvLCBidXQgaXQncyBlYXNpZXIKKyAgICAgIHRvIGFsd2F5cyBkZXRlcm1pbmUgaXQuICAqLworQEAgLTcwMCw0OCArNzAxLDQ4IEBAIG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChjaGFyICpmaWxlbmFtZSwKKyAgICAgb3BlbmVkX2ZpbGVuYW1lID0gJmxvY2FsX29wZW5lZF9maWxlbmFtZTsKKyAKKyAgICpvcGVuZWRfZmlsZW5hbWUgPSBmaWxlbmFtZTsKKy0gIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgIGlmICghZikKKyAgICAgeworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmd6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLnh6IiwgIiIpOworLSAgICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgIH0KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmJ6MiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5seiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgKm9wZW5lZF9maWxlbmFtZSA9IGNvbmNhdCAoZmlsZW5hbWUsICIubHptYSIsICIiKTsKKy0gICAgIGYgPSBmb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisrICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICNpZmRlZiBfX01TRE9TX18KKyAgIGlmICghZikKKyAgICAgeworICAgICAgIGZyZWUgKCpvcGVuZWRfZmlsZW5hbWUpOworICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb25jYXQgKGZpbGVuYW1lLCAiLmlneiIsICIiKTsKKy0gICAgICBmID0gZm9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworKyAgICAgIGYgPSBnem9wZW4gKCpvcGVuZWRfZmlsZW5hbWUsIEZPUEVOX1JCSU4pOworICAgICB9CisgICBpZiAoIWYpCisgICAgIHsKKyAgICAgICBmcmVlICgqb3BlbmVkX2ZpbGVuYW1lKTsKKyAgICAgICAqb3BlbmVkX2ZpbGVuYW1lID0gY29uY2F0IChmaWxlbmFtZSwgIi5pbnoiLCAiIik7CistICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICBmID0gZ3pvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKyAgICAgfQorICNlbmRpZiAvKiBfX01TRE9TX18gKi8KKyAgIGlmICghZikKK0BAIC03NTcsNyArNzU4LDcgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAoKmNyZWF0ZV9jYWxsYmFjaykgKGZpbGVuYW1lKTsKKyAKKyAgICAgICAgICAgLyogQW5kIHRyeSBvcGVuaW5nIGl0IGFnYWluLiAgKi8KKy0gICAgICAgICAgZiA9IGZvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCBGT1BFTl9SQklOKTsKKysgICAgICAgICAgZiA9IGd6b3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTik7CisgICAgICAgICAgIGlmICghZikKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KK0BAIC03NjcsMTIgKzc2OCwxMiBAQCBvcGVuX3Bvc3NpYmx5X2NvbXByZXNzZWRfZmlsZSAoY2hhciAqZmlsZW5hbWUsCisgCisgICAvKiBSZWFkIGZpcnN0IGZldyBieXRlcyBvZiBmaWxlIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gdGhlIGZpbGVuYW1lLgorICAgICAgSWYgdGhlIGZpbGUgaXMgc2hvcnRlciB0aGFuIHRoaXMgaXQgY2FuJ3QgYmUgdXNhYmxlIGFueXdheS4gICovCistICBucmVhZCA9IGZyZWFkIChkYXRhLCBzaXplb2YgKGRhdGEpLCAxLCBmKTsKKy0gIGlmIChucmVhZCAhPSAxKQorKyAgbnJlYWQgPSBnenJlYWQgKGYsIGRhdGEsIHNpemVvZiAoZGF0YSkpOworKyAgaWYgKG5yZWFkICE9IHNpemVvZiAoZGF0YSkpCisgICAgIHsKKyAgICAgICAvKiBFbXB0eSBmaWxlcyBkb24ndCBzZXQgZXJybm8uICBDYWxsaW5nIGNvZGUgY2FuIGNoZWNrIGZvcgorICAgICAgICAgIHRoaXMsIHNvIG1ha2Ugc3VyZSBlcnJubyA9PSAwIGp1c3QgaW4gY2FzZSBpdCBpc24ndCBhbHJlYWR5LiAqLworLSAgICAgIGlmIChucmVhZCA9PSAwKQorKyAgICAgIGlmIChucmVhZCA+PSAwKQorICAgICAgICAgZXJybm8gPSAwOworICAgICAgIHJldHVybiAwOworICAgICB9CitAQCAtODM4LDM1ICs4MzksNDAgQEAgb3Blbl9wb3NzaWJseV9jb21wcmVzc2VkX2ZpbGUgKGNoYXIgKmZpbGVuYW1lLAorICAgICAqY29tcHJlc3Npb25fcHJvZ3JhbSA9IE5VTEw7CisgCisgICAvKiBTZWVrIGJhY2sgb3ZlciB0aGUgbWFnaWMgYnl0ZXMuICAqLworLSAgaWYgKGZzZWVrIChmLCAwLCAwKSA8IDApCisrICBpZiAoZ3pzZWVrIChmLCAwLCBTRUVLX1NFVCkgPT0gLTEpCisgICAgIHJldHVybiAwOworIAorICAgaWYgKCpjb21wcmVzc2lvbl9wcm9ncmFtKQorICAgICB7IC8qIEl0J3MgY29tcHJlc3NlZCwgc28gb3BlbiBhIHBpcGUuICAqLworKyAgICAgIEZJTEUgKnA7CisgICAgICAgY2hhciAqY29tbWFuZCA9IGNvbmNhdCAoKmNvbXByZXNzaW9uX3Byb2dyYW0sICIgLWQiLCAiIik7CisgCistICAgICAgaWYgKGZjbG9zZSAoZikgPCAwKQorKyAgICAgIGlmIChnemNsb3NlIChmKSA8IDApCisgICAgICAgICByZXR1cm4gMDsKKy0gICAgICBmID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTiwgc3RkaW4pOworLSAgICAgIGlmICghZikKKysgICAgICBwID0gZnJlb3BlbiAoKm9wZW5lZF9maWxlbmFtZSwgRk9QRU5fUkJJTiwgc3RkaW4pOworKyAgICAgIGlmICghcCkKKyAgICAgICAgIHJldHVybiAwOworLSAgICAgIGYgPSBwb3BlbiAoY29tbWFuZCwgInIiKTsKKy0gICAgICBpZiAoIWYpCisrICAgICAgcCA9IHBvcGVuIChjb21tYW5kLCAiciIpOworKyAgICAgIGlmICghcCkKKyAgICAgICAgIHsKKyAgICAgICAgICAgLyogVXNlZCBmb3IgZXJyb3IgbWVzc2FnZSBpbiBjYWxsaW5nIGNvZGUuICovCisgICAgICAgICAgICpvcGVuZWRfZmlsZW5hbWUgPSBjb21tYW5kOworICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKysgICAgICBlbHNlCisrICAgICAgICAqaXNfcGlwZSA9IDE7CisrICAgICAgcmV0dXJuIHA7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworLSNpZiBPX0JJTkFSWQorKyNpZiAwICYmIE9fQklOQVJZCisgICAgICAgLyogU2luY2UgdGhpcyBpcyBhIHRleHQgZmlsZSwgYW5kIHdlIG9wZW5lZCBpdCBpbiBiaW5hcnkgbW9kZSwKKyAgICAgICAgICBzd2l0Y2ggYmFjayB0byB0ZXh0IG1vZGUuICAqLworICAgICAgIGYgPSBmcmVvcGVuICgqb3BlbmVkX2ZpbGVuYW1lLCAiciIsIGYpOworICAgICAgIGlmICghIGYpCisgCXJldHVybiAwOworICNlbmRpZgorKyAgICAgICppc19waXBlID0gMDsKKyAgICAgfQorIAorICAgcmV0dXJuIGY7CitAQCAtODg1LDcgKzg5MSw4IEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgICAgdm9pZCAoKmNyZWF0ZV9jYWxsYmFjaykgKGNoYXIgKiksIGNoYXIgKipvcGVuZWRfZmlsZW5hbWUsCisgICAgIGNoYXIgKipjb21wcmVzc2lvbl9wcm9ncmFtKQorIHsKKy0gIEZJTEUgKmY7CisrICB2b2lkICpmOworKyAgaW50IHBpcGVfcDsKKyAgIGludCBmaWxsZWQgPSAwOworICAgaW50IGRhdGFfc2l6ZSA9IDgxOTI7CisgICBjaGFyICpkYXRhID0geG1hbGxvYyAoZGF0YV9zaXplKTsKK0BAIC04OTMsMTQgKzkwMCwyMCBAQCByZWFkZmlsZSAoY2hhciAqZmlsZW5hbWUsIGludCAqc2l6ZXAsCisgICAvKiBJZiB0aGV5IHBhc3NlZCB0aGUgc3BhY2UgZm9yIHRoZSBmaWxlIG5hbWUgdG8gcmV0dXJuLCB1c2UgaXQuICAqLworICAgZiA9IG9wZW5fcG9zc2libHlfY29tcHJlc3NlZF9maWxlIChmaWxlbmFtZSwgY3JlYXRlX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZWRfZmlsZW5hbWUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uX3Byb2dyYW0pOworKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbl9wcm9ncmFtLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlwZV9wKTsKKyAKKyAgIGlmICghZikKKyAgICAgcmV0dXJuIDA7CisgCisgICBmb3IgKDs7KQorICAgICB7CistICAgICAgaW50IG5yZWFkID0gZnJlYWQgKGRhdGEgKyBmaWxsZWQsIDEsIGRhdGFfc2l6ZSAtIGZpbGxlZCwgZik7CisrICAgICAgaW50IG5yZWFkOworKworKyAgICAgIGlmIChwaXBlX3ApCisrICAgICAgICBucmVhZCA9IGZyZWFkIChkYXRhICsgZmlsbGVkLCAxLCBkYXRhX3NpemUgLSBmaWxsZWQsIGYpOworKyAgICAgIGVsc2UKKysgICAgICAgIG5yZWFkID0gZ3pyZWFkIChmLCBkYXRhICsgZmlsbGVkLCBkYXRhX3NpemUgLSBmaWxsZWQpOworICAgICAgIGlmIChucmVhZCA8IDApCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgICBpZiAobnJlYWQgPT0gMCkKK0BAIC05MTksOCArOTMyLDEwIEBAIHJlYWRmaWxlIChjaGFyICpmaWxlbmFtZSwgaW50ICpzaXplcCwKKyAgIC8qIFdlIG5lZWQgdG8gY2xvc2UgdGhlIHN0cmVhbSwgc2luY2Ugb24gc29tZSBzeXN0ZW1zIHRoZSBwaXBlIGNyZWF0ZWQKKyAgICAgIGJ5IHBvcGVuIGlzIHNpbXVsYXRlZCBieSBhIHRlbXBvcmFyeSBmaWxlIHdoaWNoIG9ubHkgZ2V0cyByZW1vdmVkCisgICAgICBpbnNpZGUgcGNsb3NlLiAgKi8KKy0gIGlmIChmICE9IHN0ZGluKQorKyAgaWYgKHBpcGVfcCkKKyAgICAgcGNsb3NlIChmKTsKKysgIGVsc2UKKysgICAgZ3pjbG9zZSAoZik7CisgCisgICAqc2l6ZXAgPSBmaWxsZWQ7CisgICByZXR1cm4gZGF0YTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mby91c2VfaG9zdF9tYWtlZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2YzMmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjcm9zcyBidWlsZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogdGV4aW5mby01LjEvaW5mby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRleGluZm8tNS4xLm9yaWcvaW5mby9NYWtlZmlsZS5hbQorKysrIHRleGluZm8tNS4xL2luZm8vTWFrZWZpbGUuYW0KK0BAIC03Niw3ICs3Niw3IEBAIGNtZF9zb3VyY2VzID0gJChzcmNkaXIpL3Nlc3Npb24uYyAkKHNyY2QKKyAjIG1vcmUgdGhhbiBvbmNlLgorIGZ1bnMuaDogbWFrZWRvYyQoRVhFRVhUKSAkKGNtZF9zb3VyY2VzKQorIAlybSAtZiAkKGdlbmVyYXRlZF9zb3VyY2VzKQorLQkkKHRvcF9idWlsZGRpcikvJChuYXRpdmVfdG9vbHMpL2luZm8vbWFrZWRvYyAkKGNtZF9zb3VyY2VzKQorKwltYWtlZG9jICQoY21kX3NvdXJjZXMpCisgCisgIyBUaGUgZm9sbG93aW5nIGhhY2sgaXMgbmVjZXNzYXJ5IHRvIGhpbnQgbWFrZSBiZWZvcmUgdGhlIGF1dG9tYXRpYworICMgZGVwZW5kZW5jaWVzIGFyZSBidWlsdC4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RleGluZm8vdGV4aW5mb180LjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2NzhlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNC44LmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiRG9jdW1lbnRhdGlvbiBzeXN0ZW0gZm9yIG9uLWxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IgorREVTQ1JJUFRJT04gPSAiVGV4aW5mbyBpcyBhIGRvY3VtZW50YXRpb24gc3lzdGVtIHRoYXQgY2FuIHByb2R1Y2UgYm90aCBcCitvbmxpbmUgaW5mb3JtYXRpb24gYW5kIHByaW50ZWQgb3V0cHV0IGZyb20gYSBzaW5nbGUgc291cmNlIGZpbGUuIFRoZSBcCitHTlUgUHJvamVjdCB1c2VzIHRoZSBUZXhpbmZvIGZpbGUgZm9ybWF0IGZvciBtb3N0IG9mIGl0cyBkb2N1bWVudGF0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworUFJPVklERVNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgdGV4aW5mby00LjgtcmVwbGFjZW1lbnQtbmF0aXZlIgorCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyB0ZXhpbmZvLTQuOC1yZXBsYWNlbWVudC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJ6bGliLW5hdGl2ZSBuY3Vyc2VzLW5hdGl2ZSIKKworVEFSR0VUX1BBVENIID0gImZpbGU6Ly91c2VfaG9zdF9tYWtlZG9jLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3VzaW5nLW5hdGl2ZS1tYWtlaW5mby5wYXRjaCBcCisiCitUQVJHRVRfUEFUQ0hfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RleGluZm8vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NoZWNrLWxvY2FsZS1oLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvLWNvbXBpbGUtbmF0aXZlLXRvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgJHtUQVJHRVRfUEFUQ0h9IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ZTlhMWE1OTFlZDIzNjAwM2QwZDRiMDA4YmYwN2VlZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxZjNjZGVlYmU2NWZkZjUxMGY1NWQ3NjVhYjEwMzFiNTQ0MTZhYTViYzI2MzViNmE1NGVmOWJjYjIzNjdjOTE3IgorCit0ZXhfdGV4aW5mbyA9ICJ0ZXhtZi90ZXgvdGV4aW5mbyIKKworaW5oZXJpdCBnZXR0ZXh0IGF1dG90b29scworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCWluc3RhbGwgLXAgLW02NDQgJHtTfS9kb2MvdGV4aW5mby50ZXggJHtTfS9kb2MvdHhpLT8/LnRleCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSA3NTUgaW5mby9tYWtlZG9jICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDc1NSBtYWtlaW5mby9tYWtlaW5mbyAke0R9JHtiaW5kaXJ9Cit9CisKK1BBQ0tBR0VTICs9ICJpbmZvIGluZm8tZG9jIgorCitGSUxFU19pbmZvID0gIiR7YmluZGlyfS9pbmZvICR7YmluZGlyfS9pbmZva2V5ICR7YmluZGlyfS9pbnN0YWxsLWluZm8iCitGSUxFU19pbmZvLWRvYyA9ICIke2luZm9kaXJ9L2luZm8uaW5mbyAke2luZm9kaXJ9L2RpciAke2luZm9kaXJ9L2luZm8tKi5pbmZvIFwKKyAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xL2luZm8uMSogJHttYW5kaXJ9L21hbjUvaW5mby41KiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZva2V5LjEqICR7bWFuZGlyfS9tYW4xL2luc3RhbGwtaW5mby4xKiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9L21ha2VpbmZvICR7YmluZGlyfS90ZXhpKiAke2JpbmRpcn0vcGRmdGV4aTJkdmkgJHtiaW5kaXJ9L3BvZDJ0ZXhpICR7ZGF0YWRpcn0vdGV4aW5mbyIKK0ZJTEVTXyR7UE59LWRvYyA9ICIke2luZm9kaXJ9L3RleGluZm8qIFwKKyAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9LyR7dGV4X3RleGluZm99IFwKKyAgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMSAke21hbmRpcn0vbWFuNSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90ZXhpbmZvL3RleGluZm9fNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjcxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGV4aW5mby90ZXhpbmZvXzYuMC5iYgpAQCAtMCwwICsxLDgyIEBACitTVU1NQVJZID0gIkRvY3VtZW50YXRpb24gc3lzdGVtIGZvciBvbi1saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCIKK0RFU0NSSVBUSU9OID0gIlRleGluZm8gaXMgYSBkb2N1bWVudGF0aW9uIHN5c3RlbSB0aGF0IGNhbiBwcm9kdWNlIGJvdGggXAorb25saW5lIGluZm9ybWF0aW9uIGFuZCBwcmludGVkIG91dHB1dCBmcm9tIGEgc2luZ2xlIHNvdXJjZSBmaWxlLiBUaGUgXAorR05VIFByb2plY3QgdXNlcyB0aGUgVGV4aW5mbyBmaWxlIGZvcm1hdCBmb3IgbW9zdCBvZiBpdHMgZG9jdW1lbnRhdGlvbi4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvdGV4aW5mby8iCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IgorCitQUk9WSURFU19hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiB0ZXhpbmZvLXJlcGxhY2VtZW50LW5hdGl2ZSIKKworZGVmIGNvbXByZXNzX3BrZyhkKToKKyAgICBpZiAiY29tcHJlc3NfZG9jIiBpbiAoZC5nZXRWYXIoIklOSEVSSVQiLCBUcnVlKSBvciAiIikuc3BsaXQoKToKKyAgICAgICAgIGNvbXByZXNzID0gZC5nZXRWYXIoIkRPQ19DT01QUkVTUyIsIFRydWUpCisgICAgICAgICBpZiBjb21wcmVzcyA9PSAiZ3oiOgorICAgICAgICAgICAgIHJldHVybiAiZ3ppcCIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gImJ6MiI6CisgICAgICAgICAgICAgcmV0dXJuICJiemlwMiIKKyAgICAgICAgIGVsaWYgY29tcHJlc3MgPT0gInh6IjoKKyAgICAgICAgICAgICByZXR1cm4gInh6IgorICAgIHJldHVybiAiIgorCitSREVQRU5EU19pbmZvICs9ICIke0Bjb21wcmVzc19wa2coZCl9IgorCitERVBFTkRTID0gInpsaWIgbmN1cnNlcyB0ZXhpbmZvLXJlcGxhY2VtZW50LW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIG5jdXJzZXMtbmF0aXZlIgorCitUQVJHRVRfUEFUQ0ggPSAiZmlsZTovL3VzZV9ob3N0X21ha2Vkb2MucGF0Y2giCitUQVJHRVRfUEFUQ0hfY2xhc3MtbmF0aXZlID0gIiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RleGluZm8vJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL3RleGluZm8tNC4xMi16bGliLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtbmF0aXZlLXRvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpbmstemlwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICAke1RBUkdFVF9QQVRDSH0gXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImUxYTJlZjVkY2U1MDE4YjUzZjBmNmVlZDQ1YjI0N2E3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjgzZDMxODMyOTBmMzRlN2Y5NThkMjA5ZDBiMjAwMjJjNmZlOWU5MjFlYjZmZTk0YzI3ZDk4ODgyN2Q0ODc4ZDIiCisKK3RleF90ZXhpbmZvID0gInRleG1mL3RleC90ZXhpbmZvIgorCitpbmhlcml0IGdldHRleHQgYXV0b3Rvb2xzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIGF1dG90b29sc19kb19jb25maWd1cmUgdXBkYXRlcyBwby9NYWtlZmlsZS5pbi5pbiwgd2UgYWxzbyBuZWVkCisJIyB1cGRhdGUgcG9fZG9jdW1lbnQuCisJY3AgLWYgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9nZXR0ZXh0L3BvL01ha2VmaWxlLmluLmluICR7U30vcG9fZG9jdW1lbnQvCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlpZiBbIC1kIHRvb2xzIF07dGhlbgorCQlvZV9ydW5tYWtlIC1DIHRvb2xzL2dudWxpYi9saWIKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCWluc3RhbGwgLXAgLW02NDQgJHtTfS9kb2MvdGV4aW5mby50ZXggJHtTfS9kb2MvdHhpLT8/LnRleCAke0R9JHtkYXRhZGlyfS8ke3RleF90ZXhpbmZvfQorCXNlZCAtaSAtZSAnMXMsIyEuKnBlcmwsIyEgJHtVU1JCSU5QQVRIfS9lbnYgcGVybCwnICR7RH0ke2JpbmRpcn0vdGV4aTJhbnkgJHtEfSR7YmluZGlyfS9wb2QydGV4aQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJaW5zdGFsbCAtbSA3NTUgaW5mby9tYWtlZG9jICR7RH0ke2JpbmRpcn0KK30KKworUEFDS0FHRVMgKz0gImluZm8gaW5mby1kb2MiCisKK0ZJTEVTX2luZm8gPSAiJHtiaW5kaXJ9L2luZm8gJHtiaW5kaXJ9L2luZm9rZXkgJHtiaW5kaXJ9L2luc3RhbGwtaW5mbyIKK0ZJTEVTX2luZm8tZG9jID0gIiR7aW5mb2Rpcn0vaW5mby5pbmZvKiAke2luZm9kaXJ9L2RpciAke2luZm9kaXJ9L2luZm8tKi5pbmZvKiBcCisgICAgICAgICAgICAgICAgICAke21hbmRpcn0vbWFuMS9pbmZvLjEqICR7bWFuZGlyfS9tYW41L2luZm8uNSogXAorICAgICAgICAgICAgICAgICAgJHttYW5kaXJ9L21hbjEvaW5mb2tleS4xKiAke21hbmRpcn0vbWFuMS9pbnN0YWxsLWluZm8uMSoiCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9tYWtlaW5mbyAke2JpbmRpcn0vdGV4aSogJHtiaW5kaXJ9L3BkZnRleGkyZHZpICR7YmluZGlyfS9wb2QydGV4aSAke2RhdGFkaXJ9L3RleGluZm8iCitSREVQRU5EU18ke1BOfSA9ICJwZXJsIgorRklMRVNfJHtQTn0tZG9jID0gIiR7aW5mb2Rpcn0vdGV4aW5mbyogXAorICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vJHt0ZXhfdGV4aW5mb30gXAorICAgICAgICAgICAgICAgICAgICR7bWFuZGlyfS9tYW4xICR7bWFuZGlyfS9tYW41IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90aW1lL3RpbWUtMS43L2RlYmlhbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2VhMGUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS0xLjcvZGViaWFuLnBhdGNoCkBAIC0wLDAgKzEsMTMwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0gdGltZS0xLjcub3JpZy9jb25maWd1cmUuaW4KKysrKyB0aW1lLTEuNy9jb25maWd1cmUuaW4KK0BAIC0xLDExICsxLDggQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKHRpbWUuYykKKy1WRVJTSU9OPTEuNworLUFDX1NVQlNUKFZFUlNJT04pCistUEFDS0FHRT10aW1lCistQUNfU1VCU1QoUEFDS0FHRSkKKytBTV9JTklUX0FVVE9NQUtFKHRpbWUsIDEuNykKKyAKKy1BQ19BUkdfUFJPR1JBTQorK0FNX01BSU5UQUlORVJfTU9ERQorIAorIGRubCBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKK0BAIC0xNSw3ICsxMiw3IEBACisgZG5sIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIEFDX0hFQURFUl9TVERDCisgQUNfSEVBREVSX1NZU19XQUlUCistQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzdHJpbmcuaCBzeXMvcnVzYWdlLmgpCisrQUNfQ0hFQ0tfSEVBREVSUyh1bmlzdGQuaCBzdHJpbmcuaCBzeXMvcnVzYWdlLmggc3lzL3Jlc291cmNlLmgpCisgCisgZG5sIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisgQUNfQ19DT05TVAorLS0tIHRpbWUtMS43Lm9yaWcvdmVyc2lvbi50ZXhpCisrKysgdGltZS0xLjcvdmVyc2lvbi50ZXhpCitAQCAtMSwzICsxLDMgQEAKKy1Ac2V0IFVQREFURUQgMTIgSnVuZSAxOTk2CisrQHNldCBVUERBVEVEIDkgTWF5IDIwMDIKKyBAc2V0IEVESVRJT04gMS43CisgQHNldCBWRVJTSU9OIDEuNworLS0tIHRpbWUtMS43Lm9yaWcvdGltZS5jCisrKysgdGltZS0xLjcvdGltZS5jCitAQCAtMTQ3LDYgKzE0NywxMCBAQAorICAgTlVMTAorIH07CisgDAorKworKy8qIElmIHRydWUsIGRvIG5vdCBzaG93IHRoZSBleGl0IG1lc3NhZ2UgKi8KKytzdGF0aWMgYm9vbGVhbiBxdWlldDsKKysKKyAvKiBJZiB0cnVlLCBzaG93IGFuIEVuZ2xpc2ggZGVzY3JpcHRpb24gbmV4dCB0byBlYWNoIHN0YXRpc3RpYy4gICovCisgc3RhdGljIGJvb2xlYW4gdmVyYm9zZTsKKyAKK0BAIC0xNzIsNiArMTc2LDcgQEAKKyAgIHsiaGVscCIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaCd9LAorICAgeyJvdXRwdXQtZmlsZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnbyd9LAorICAgeyJwb3J0YWJpbGl0eSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAncCd9LAorKyAgeyJxdWlldCIsIG5vX2FyZ3VtZW50LE5VTEwsICdxJ30sCisgICB7InZlcmJvc2UiLCBub19hcmd1bWVudCwgTlVMTCwgJ3YnfSwKKyAgIHsidmVyc2lvbiIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnVid9LAorICAge05VTEwsIG5vX2FyZ3VtZW50LCBOVUxMLCAwfQorQEAgLTMzMyw3ICszMzgsOCBAQAorICAgZWxzZSBpZiAoV0lGU0lHTkFMRUQgKHJlc3AtPndhaXRzdGF0dXMpKQorICAgICBmcHJpbnRmIChmcCwgIkNvbW1hbmQgdGVybWluYXRlZCBieSBzaWduYWwgJWRcbiIsCisgCSAgICAgV1RFUk1TSUcgKHJlc3AtPndhaXRzdGF0dXMpKTsKKy0gIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzcC0+d2FpdHN0YXR1cykgJiYgV0VYSVRTVEFUVVMgKHJlc3AtPndhaXRzdGF0dXMpKQorKyAgZWxzZSBpZiAoV0lGRVhJVEVEIChyZXNwLT53YWl0c3RhdHVzKSAmJiBXRVhJVFNUQVRVUyAocmVzcC0+d2FpdHN0YXR1cykKKysJICAgJiYgIXF1aWV0KQorICAgICBmcHJpbnRmIChmcCwgIkNvbW1hbmQgZXhpdGVkIHdpdGggbm9uLXplcm8gc3RhdHVzICVkXG4iLAorIAkgICAgIFdFWElUU1RBVFVTIChyZXNwLT53YWl0c3RhdHVzKSk7CisgCitAQCAtNTIzLDYgKzUyOSw3IEBACisgICBjaGFyICpmb3JtYXQ7CQkJLyogRm9ybWF0IGZvdW5kIGluIGVudmlyb25tZW50LiAgKi8KKyAKKyAgIC8qIEluaXRpYWxpemUgdGhlIG9wdGlvbiBmbGFncy4gICovCisrICBxdWlldCA9IGZhbHNlOworICAgdmVyYm9zZSA9IGZhbHNlOworICAgb3V0ZmlsZSA9IE5VTEw7CisgICBvdXRmcCA9IHN0ZGVycjsKK0BAIC01MzYsNyArNTQzLDcgQEAKKyAgIGlmIChmb3JtYXQpCisgICAgIG91dHB1dF9mb3JtYXQgPSBmb3JtYXQ7CisgCistICB3aGlsZSAoKG9wdGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgIithZjpvOnB2ViIsIGxvbmdvcHRzLCAoaW50ICopIDApKQorKyAgd2hpbGUgKChvcHRjID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICIrYWY6bzpwcXZWIiwgbG9uZ29wdHMsIChpbnQgKikgMCkpCisgCSAhPSBFT0YpCisgICAgIHsKKyAgICAgICBzd2l0Y2ggKG9wdGMpCitAQCAtNTU1LDYgKzU2Miw5IEBACisgCWNhc2UgJ3AnOgorIAkgIG91dHB1dF9mb3JtYXQgPSBwb3NpeF9mb3JtYXQ7CisgCSAgYnJlYWs7CisrCWNhc2UgJ3EnOgorKwkgIHF1aWV0ID0gdHJ1ZTsKKysJICBicmVhazsKKyAJY2FzZSAndic6CisgCSAgdmVyYm9zZSA9IHRydWU7CisgCSAgYnJlYWs7CitAQCAtNjQyLDkgKzY1Miw5IEBACisgICBmZmx1c2ggKG91dGZwKTsKKyAKKyAgIGlmIChXSUZTVE9QUEVEIChyZXMud2FpdHN0YXR1cykpCistICAgIGV4aXQgKFdTVE9QU0lHIChyZXMud2FpdHN0YXR1cykpOworKyAgICBleGl0IChXU1RPUFNJRyAocmVzLndhaXRzdGF0dXMpICsgMTI4KTsKKyAgIGVsc2UgaWYgKFdJRlNJR05BTEVEIChyZXMud2FpdHN0YXR1cykpCistICAgIGV4aXQgKFdURVJNU0lHIChyZXMud2FpdHN0YXR1cykpOworKyAgICBleGl0IChXVEVSTVNJRyAocmVzLndhaXRzdGF0dXMpICsgMTI4KTsKKyAgIGVsc2UgaWYgKFdJRkVYSVRFRCAocmVzLndhaXRzdGF0dXMpKQorICAgICBleGl0IChXRVhJVFNUQVRVUyAocmVzLndhaXRzdGF0dXMpKTsKKyB9CitAQCAtNjU3LDcgKzY2Nyw3IEBACisgICBmcHJpbnRmIChzdHJlYW0sICJcCisgVXNhZ2U6ICVzIFstYXB2Vl0gWy1mIGZvcm1hdF0gWy1vIGZpbGVdIFstLWFwcGVuZF0gWy0tdmVyYm9zZV1cblwKKyAgICAgICAgWy0tcG9ydGFiaWxpdHldIFstLWZvcm1hdD1mb3JtYXRdIFstLW91dHB1dD1maWxlXSBbLS12ZXJzaW9uXVxuXAorLSAgICAgICBbLS1oZWxwXSBjb21tYW5kIFthcmcuLi5dXG4iLAorKyAgICAgICBbLS1xdWlldF0gWy0taGVscF0gY29tbWFuZCBbYXJnLi4uXVxuIiwKKyAJICAgcHJvZ3JhbV9uYW1lKTsKKyAgIGV4aXQgKHN0YXR1cyk7CisgfQorLS0tIHRpbWUtMS43Lm9yaWcvcmVzdXNlLmgKKysrKyB0aW1lLTEuNy9yZXN1c2UuaAorQEAgLTM2LDE5ICszNiw4IEBACisgIyBpbmNsdWRlIDxzeXMvcnVzYWdlLmg+CisgI2Vsc2UKKyAjIGRlZmluZSBUVl9NU0VDIHR2X3VzZWMgLyAxMDAwCistIyBpZiBIQVZFX1dBSVQzCisrIyBpZiBIQVZFX1NZU19SRVNPVVJDRV9ICisgIyAgaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CistIyBlbHNlCistLyogUHJvY2VzcyByZXNvdXJjZSB1c2FnZSBzdHJ1Y3R1cmUuICAqLworLXN0cnVjdCBydXNhZ2UKKy17CistICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsJLyogVXNlciB0aW1lIHVzZWQuICAqLworLSAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CS8qIFN5c3RlbSB0aW1lIHVzZWQuICAqLworLSAgaW50IHJ1X21heHJzcywgcnVfaXhyc3MsIHJ1X2lkcnNzLCBydV9pc3JzcywKKy0gIHJ1X21pbmZsdCwgcnVfbWFqZmx0LCBydV9uc3dhcCwgcnVfaW5ibG9jaywgCistICBydV9vdWJsb2NrLCBydV9tc2dzbmQsIHJ1X21zZ3JjdiwgcnVfbnNpZ25hbHMsCistICBydV9udmNzdywgcnVfbml2Y3N3OworLX07CisgIyBlbmRpZgorICNlbmRpZgorIAorLS0tIHRpbWUtMS43Lm9yaWcvdGltZS50ZXhpCisrKysgdGltZS0xLjcvdGltZS50ZXhpCitAQCAtMTEsNiArMTEsMTIgQEAKKyBAZmluYWxvdXQKKyBAZW5kIGlmdGV4CisgCisrQGRpcmNhdGVnb3J5IEluZGl2aWR1YWwgdXRpbGl0aWVzCisrQGRpcmVudHJ5CisrKiB0aW1lOiAodGltZSkuICAgICAgICAgICAgICAgICAgICAgUnVuIHByb2dyYW1zIGFuZCBzdW1tYXJpemUKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gcmVzb3VyY2UgdXNhZ2UuCisrQGVuZCBkaXJlbnRyeQorKworIEBpZmluZm8KKyBUaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSB0aGUgR05VIEBjb2Rle3RpbWV9IGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKyBhbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCitAQCAtMTg1LDYgKzE5MSwxMCBAQAorIHN5cyAlUworIEBlbmQgZXhhbXBsZQorIAorK0BpdGVtIC1xCisrQGl0ZW14IC0tcXVpZXQKKytTdXBwcmVzcyBub24temVybyBlcnJvciBjb2RlIGZyb20gdGhlIGV4ZWN1dGVkIHByb2dyYW0uCisrCisgQGl0ZW0gLXYKKyBAaXRlbXggLS12ZXJib3NlCisgQGNpbmRleCBmb3JtYXQKKy0tLSB0aW1lLTEuNy5vcmlnL3RpbWUuaW5mbworKysrIHRpbWUtMS43L3RpbWUuaW5mbworQEAgLTEsNSArMSwxMCBAQAorLVRoaXMgaXMgSW5mbyBmaWxlIC4vdGltZS5pbmZvLCBwcm9kdWNlZCBieSBNYWtlaW5mby0xLjU1IGZyb20gdGhlIGlucHV0CistZmlsZSB0aW1lLnRleGkuCisrVGhpcyBpcyB0aW1lLmluZm8sIHByb2R1Y2VkIGJ5IG1ha2VpbmZvIHZlcnNpb24gNC4xIGZyb20gdGltZS50ZXhpLgorKworK0lORk8tRElSLVNFQ1RJT04gSW5kaXZpZHVhbCB1dGlsaXRpZXMKKytTVEFSVC1JTkZPLURJUi1FTlRSWQorKyogdGltZTogKHRpbWUpLiAgICAgICAgICAgICAgICAgICAgIFJ1biBwcm9ncmFtcyBhbmQgc3VtbWFyaXplCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtIHJlc291cmNlIHVzYWdlLgorK0VORC1JTkZPLURJUi1FTlRSWQorIAorICAgIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIHRoZSBHTlUgYHRpbWUnIGNvbW1hbmQgZm9yIHJ1bm5pbmcgcHJvZ3JhbXMKKyBhbmQgc3VtbWFyaXppbmcgdGhlIHN5c3RlbSByZXNvdXJjZXMgdGhleSB1c2UuCitAQCAtMzEsNyArMzYsNyBAQAorIAorICogUmVzb3VyY2UgTWVhc3VyZW1lbnQ6OiAgTWVhc3VyaW5nIHByb2dyYW0gcmVzb3VyY2UgdXNlLgorIAorLSAtLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tCisrIC0tLSBUaGUgRGV0YWlsZWQgTm9kZSBMaXN0aW5nIC0tLQorIAorIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZQorIAorQEAgLTU4LDE0ICs2MywxNCBAQAorICAgIFRoZSBgdGltZScgY29tbWFuZCBydW5zIGFub3RoZXIgcHJvZ3JhbSwgdGhlbiBkaXNwbGF5cyBpbmZvcm1hdGlvbgorIGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGF0IHByb2dyYW0sIGNvbGxlY3RlZCBieSB0aGUgc3lzdGVtIHdoaWxlCisgdGhlIHByb2dyYW0gd2FzIHJ1bm5pbmcuICBZb3UgY2FuIHNlbGVjdCB3aGljaCBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZAorLWFuZCB0aGUgZm9ybWF0IGluIHdoaWNoIGl0IGlzIHNob3duICgqbm90ZSBTZXR0aW5nIEZvcm1hdDo6LiksIG9yIGhhdmUKKythbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoKm5vdGUgU2V0dGluZyBGb3JtYXQ6OiksIG9yIGhhdmUKKyBgdGltZScgc2F2ZSB0aGUgaW5mb3JtYXRpb24gaW4gYSBmaWxlIGluc3RlYWQgb2YgZGlzcGxheWluZyBpdCBvbiB0aGUKKy1zY3JlZW4gKCpub3RlIFJlZGlyZWN0aW5nOjouKS4KKytzY3JlZW4gKCpub3RlIFJlZGlyZWN0aW5nOjopLgorIAorICAgIFRoZSByZXNvdXJjZXMgdGhhdCBgdGltZScgY2FuIHJlcG9ydCBvbiBmYWxsIGludG8gdGhlIGdlbmVyYWwKKyBjYXRlZ29yaWVzIG9mIHRpbWUsIG1lbW9yeSwgYW5kIEkvTyBhbmQgSVBDIGNhbGxzLiAgU29tZSBzeXN0ZW1zIGRvIG5vdAorIHByb3ZpZGUgbXVjaCBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtIHJlc291cmNlIHVzZTsgYHRpbWUnIHJlcG9ydHMKKy11bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoKm5vdGUgQWNjdXJhY3k6Oi4pLgorK3VuYXZhaWxhYmxlIGluZm9ybWF0aW9uIGFzIHplcm8gdmFsdWVzICgqbm90ZSBBY2N1cmFjeTo6KS4KKyAKKyAgICBUaGUgZm9ybWF0IG9mIHRoZSBgdGltZScgY29tbWFuZCBpczoKKyAKK0BAIC0xMzIsNiArMTM3LDEwIEBACisgICAgICAgICAgIHVzZXIgJVUKKyAgICAgICAgICAgc3lzICVTCisgCisrYC1xJworK2AtLXF1aWV0JworKyAgICAgU3VwcHJlc3Mgbm9uLXplcm8gZXJyb3IgY29kZSBmcm9tIHRoZSBleGVjdXRlZCBwcm9ncmFtLgorKworIGAtdicKKyBgLS12ZXJib3NlJworICAgICAgVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdCwgd2hpY2ggZGlzcGxheXMgZWFjaCBhdmFpbGFibGUKK0BAIC0xNzQsNyArMTgzLDcgQEAKKyAgICBUaGUgcmVzb3VyY2Ugc3BlY2lmaWVycywgd2hpY2ggYXJlIGEgc3VwZXJzZXQgb2YgdGhvc2UgcmVjb2duaXplZCBieQorIHRoZSBgdGNzaCcgYnVpbHRpbiBgdGltZScgY29tbWFuZCwgYXJlIGxpc3RlZCBiZWxvdy4gIE5vdCBhbGwgcmVzb3VyY2VzCisgYXJlIG1lYXN1cmVkIGJ5IGFsbCB2ZXJzaW9ucyBvZiBVbml4LCBzbyBzb21lIG9mIHRoZSB2YWx1ZXMgbWlnaHQgYmUKKy1yZXBvcnRlZCBhcyB6ZXJvICgqbm90ZSBBY2N1cmFjeTo6LikuCisrcmVwb3J0ZWQgYXMgemVybyAoKm5vdGUgQWNjdXJhY3k6OikuCisgCisgKiBNZW51OgorIAorQEAgLTMwOCwxMSArMzE3LDExIEBACisgYC1vIEZJTEUnCisgYC0tb3V0cHV0PUZJTEUnCisgICAgICBXcml0ZSB0aGUgcmVzb3VyY2UgdXNlIHN0YXRpc3RpY3MgdG8gRklMRS4gIEJ5IGRlZmF1bHQsIHRoaXMKKy0gICAgICpvdmVyd3JpdGVzKiB0aGUgZmlsZSwgZGVzdHJveWluZyB0aGUgZmlsZSdzIHByZXZpb3VzIGNvbnRlbnRzLgorKyAgICAgX292ZXJ3cml0ZXNfIHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisgCisgYC1hJworIGAtLWFwcGVuZCcKKy0gICAgICpBcHBlbmQqIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKysgICAgIF9BcHBlbmRfIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKyAgICAgIG9mIG92ZXJ3cml0aW5nIGl0LiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCB0aGUgYC1vJyBvcgorICAgICAgYC0tb3V0cHV0JyBvcHRpb24uCisgCitAQCAtNDM3LDcgKzQ0Niw3IEBACisgCisgYC1hJworIGAtLWFwcGVuZCcKKy0gICAgICpBcHBlbmQqIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKysgICAgIF9BcHBlbmRfIHRoZSByZXNvdXJjZSB1c2UgaW5mb3JtYXRpb24gdG8gdGhlIG91dHB1dCBmaWxlIGluc3RlYWQKKyAgICAgIG9mIG92ZXJ3cml0aW5nIGl0LgorIAorIGAtZiBGT1JNQVQnCitAQCAtNDYyLDE3ICs0NzEsMTcgQEAKKyAKKyAfCisgVGFnIFRhYmxlOgorLU5vZGU6IFRvcH85MzQKKy1Ob2RlOiBSZXNvdXJjZSBNZWFzdXJlbWVudH8xNzI1CistTm9kZTogU2V0dGluZyBGb3JtYXR/MzY3OAorLU5vZGU6IEZvcm1hdCBTdHJpbmd/NDkwNworLU5vZGU6IFRpbWUgUmVzb3VyY2VzfzYyMTQKKy1Ob2RlOiBNZW1vcnkgUmVzb3VyY2VzfzY4NDQKKy1Ob2RlOiBJL08gUmVzb3VyY2Vzfzc1NDkKKy1Ob2RlOiBDb21tYW5kIEluZm9/ODc0NworLU5vZGU6IFJlZGlyZWN0aW5nfzg5NjQKKy1Ob2RlOiBFeGFtcGxlc385NzU0CistTm9kZTogQWNjdXJhY3l/MTIwNjQKKy1Ob2RlOiBJbnZva2luZyB0aW1lfzEzNTg2CisrTm9kZTogVG9wfzExMTUKKytOb2RlOiBSZXNvdXJjZSBNZWFzdXJlbWVudH8xOTA4CisrTm9kZTogU2V0dGluZyBGb3JtYXR/Mzg1OAorK05vZGU6IEZvcm1hdCBTdHJpbmd/NTE2NAorK05vZGU6IFRpbWUgUmVzb3VyY2VzfzY0NzAKKytOb2RlOiBNZW1vcnkgUmVzb3VyY2VzfzcxMDAKKytOb2RlOiBJL08gUmVzb3VyY2Vzfzc4MDUKKytOb2RlOiBDb21tYW5kIEluZm9/OTAwMworK05vZGU6IFJlZGlyZWN0aW5nfzkyMjAKKytOb2RlOiBFeGFtcGxlc38xMDAxMAorK05vZGU6IEFjY3VyYWN5fzEyMzIwCisrTm9kZTogSW52b2tpbmcgdGltZX8xMzg0MgorIB8KKyBFbmQgVGFnIFRhYmxlCistLS0gdGltZS0xLjcub3JpZy90aW1lLmh0bWwKKysrKyB0aW1lLTEuNy90aW1lLmh0bWwKK0BAIC0wLDAgKzEsMTAyMSBAQAorKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisrICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAvbG9vc2UuZHRkIj4KKys8SFRNTD4KKys8IS0tIENyZWF0ZWQgb24gU2VwdGVtYmVyLCAxIDIwMDMgYnkgdGV4aTJodG1sIDEuNjYgLS0+CisrPCEtLQorK1dyaXR0ZW4gYnk6IExpb25lbCBDb25zIDxMaW9uZWwuQ29uc0BjZXJuLmNoPiAob3JpZ2luYWwgYXV0aG9yKQorKyAgICAgICAgICAgIEthcmwgQmVycnkgIDxrYXJsQGZyZWVmcmllbmRzLm9yZz4KKysgICAgICAgICAgICBPbGFmIEJhY2htYW5uIDxvYmFjaG1hbkBtYXRoZW1hdGlrLnVuaS1rbC5kZT4KKysgICAgICAgICAgICBhbmQgbWFueSBvdGhlcnMuCisrTWFpbnRhaW5lZCBieTogTWFueSBjcmVhdGl2ZSBwZW9wbGUgPGRldkB0ZXhpMmh0bWwuY3ZzaG9tZS5vcmc+CisrU2VuZCBidWdzIGFuZCBzdWdnZXN0aW9ucyB0byA8dXNlcnNAdGV4aTJodG1sLmN2c2hvbWUub3JnPgorKworKy0tPgorKzxIRUFEPgorKzxUSVRMRT5NZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2U8L1RJVExFPgorKworKzxNRVRBIE5BTUU9ImRlc2NyaXB0aW9uIiBDT05URU5UPSJNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UiPgorKzxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJNZWFzdXJpbmcgUHJvZ3JhbSBSZXNvdXJjZSBVc2UiPgorKzxNRVRBIE5BTUU9InJlc291cmNlLXR5cGUiIENPTlRFTlQ9ImRvY3VtZW50Ij4KKys8TUVUQSBOQU1FPSJkaXN0cmlidXRpb24iIENPTlRFTlQ9Imdsb2JhbCI+CisrPE1FVEEgTkFNRT0iR2VuZXJhdG9yIiBDT05URU5UPSJ0ZXhpMmh0bWwgMS42NiI+CisrCisrPC9IRUFEPgorKworKzxCT0RZIExBTkc9ImVuIiBCR0NPTE9SPSIjRkZGRkZGIiBURVhUPSIjMDAwMDAwIiBMSU5LPSIjMDAwMEZGIiBWTElOSz0iIzgwMDA4MCIgQUxJTks9IiNGRjAwMDAiPgorKworKzxBIE5BTUU9IlNFQ19Ub3AiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgxPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvSDE+CisrCisrPFA+CisrCisrVGhpcyBmaWxlIGRvY3VtZW50cyB0aGUgdGhlIEdOVSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kIGZvciBydW5uaW5nIHByb2dyYW1zCisrYW5kIHN1bW1hcml6aW5nIHRoZSBzeXN0ZW0gcmVzb3VyY2VzIHRoZXkgdXNlLgorK1RoaXMgaXMgZWRpdGlvbiAxLjcsIGZvciB2ZXJzaW9uIDEuNy4KKys8L1A+CisrPFA+CisrCisrPC9QPgorKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPk1lYXN1cmluZyBwcm9ncmFtIHJlc291cmNlIHVzZS48L1REPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+IC0tIFRoZSBEZXRhaWxlZCBOb2RlIExpc3RpbmcgLS0tCisrPC9USD48L1RSPgorKzxUUj48VEggQ09MU1BBTj0iMyIgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj4KKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPk1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZQorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+CisrPC9USD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMiI+MS4xIFNldHRpbmcgdGhlIE91dHB1dCBGb3JtYXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TZWxlY3RpbmcgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGJ5IDxDT0RFPnRpbWU8L0NPREU+LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlRoZSBpbmZvcm1hdGlvbiA8Q09ERT50aW1lPC9DT0RFPiBjYW4gcmVwb3J0LjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5Xcml0aW5nIHRoZSBpbmZvcm1hdGlvbiB0byBhIGZpbGUuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+RXhhbXBsZXMgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTAiPjEuNSBBY2N1cmFjeTwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPkxpbWl0YXRpb25zIG9uIHRoZSBhY2N1cmFjeSBvZiA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+U3VtbWFyeSBvZiB0aGUgb3B0aW9ucyB0byB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZC48L1REPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFRIIENPTFNQQU49IjMiIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIEZvcm1hdCBTdHJpbmcKKys8L1RIPjwvVFI+CisrPFRSPjxUSCBDT0xTUEFOPSIzIiBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPgorKzwvVEg+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8SFIgU0laRT0xPgorKzxBIE5BTUU9IlNFQzEiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmx0OyZsdDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEEgTkFNRT0iUmVzb3VyY2UgTWVhc3VyZW1lbnQiPjwvQT4KKys8SDE+IDEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZSA8L0gxPgorKzwhLS1kb2NpZDo6U0VDMTo6LS0+CisrPFA+CisrCisrVGhlIDxDT0RFPnRpbWU8L0NPREU+IGNvbW1hbmQgcnVucyBhbm90aGVyIHByb2dyYW0sIHRoZW4gZGlzcGxheXMgaW5mb3JtYXRpb24KKythYm91dCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhhdCBwcm9ncmFtLCBjb2xsZWN0ZWQgYnkgdGhlIHN5c3RlbSB3aGlsZQorK3RoZSBwcm9ncmFtIHdhcyBydW5uaW5nLiAgWW91IGNhbiBzZWxlY3Qgd2hpY2ggaW5mb3JtYXRpb24gaXMgcmVwb3J0ZWQKKythbmQgdGhlIGZvcm1hdCBpbiB3aGljaCBpdCBpcyBzaG93biAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPiksIG9yIGhhdmUKKys8Q09ERT50aW1lPC9DT0RFPiBzYXZlIHRoZSBpbmZvcm1hdGlvbiBpbiBhIGZpbGUgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIGl0IG9uIHRoZQorK3NjcmVlbiAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPjEuMyBSZWRpcmVjdGluZyBPdXRwdXQ8L0E+KS4KKys8L1A+CisrPFA+CisrCisrVGhlIHJlc291cmNlcyB0aGF0IDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQgb24gZmFsbCBpbnRvIHRoZSBnZW5lcmFsCisrY2F0ZWdvcmllcyBvZiB0aW1lLCBtZW1vcnksIGFuZCBJL08gYW5kIElQQyBjYWxscy4gIFNvbWUgc3lzdGVtcyBkbyBub3QKKytwcm92aWRlIG11Y2ggaW5mb3JtYXRpb24gYWJvdXQgcHJvZ3JhbSByZXNvdXJjZSB1c2U7IDxDT0RFPnRpbWU8L0NPREU+CisrcmVwb3J0cyB1bmF2YWlsYWJsZSBpbmZvcm1hdGlvbiBhcyB6ZXJvIHZhbHVlcyAoc2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+KS4KKys8L1A+CisrPFA+CisrCisrVGhlIGZvcm1hdCBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBpczoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnRpbWUgW29wdGlvbjxzbWFsbD4uLi48L3NtYWxsPl0gPFZBUj5jb21tYW5kPC9WQVI+IFs8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPl0KKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJJRFgxIj48L0E+CisrPENPREU+dGltZTwvQ09ERT4gcnVucyB0aGUgcHJvZ3JhbSA8VkFSPmNvbW1hbmQ8L1ZBUj4sIHdpdGggYW55IGdpdmVuIGFyZ3VtZW50cworKzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+LiAgV2hlbiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZmluaXNoZXMsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzCisraW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHVzZWQgYnkgPFZBUj5jb21tYW5kPC9WQVI+LgorKzwvUD4KKys8UD4KKysKKytIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdXNpbmcgPENPREU+dGltZTwvQ09ERT4gdG8gbWVhc3VyZSB0aGUgdGltZSBhbmQgb3RoZXIKKytyZXNvdXJjZXMgdXNlZCBieSBydW5uaW5nIHRoZSBwcm9ncmFtIDxDT0RFPmdyZXA8L0NPREU+OgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgZ3JlcCBub2JvZHkgL2V0Yy9hbGlhc2VzCisrbm9ib2R5Oi9kZXYvbnVsbAorK2V0Yy1maWxlczpub2JvZHkKKyttaXNjLWdyb3VwOm5vYm9keQorKzAuMDd1c2VyIDAuNTBzeXN0ZW0gMDowNi42OWVsYXBzZWQgOCVDUFUgKDBhdmd0ZXh0KzQ4OWF2Z2RhdGEgMzI0bWF4cmVzaWRlbnQpaworKzQ2aW5wdXRzKzdvdXRwdXRzICg0M21ham9yKzI1MW1pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrTWFpbCBzdWdnZXN0aW9ucyBhbmQgYnVnIHJlcG9ydHMgZm9yIEdOVSA8Q09ERT50aW1lPC9DT0RFPiB0bworKzxDT0RFPmJ1Zy1nbnUtdXRpbHNAcHJlcC5haS5taXQuZWR1PC9DT0RFPi4gIFBsZWFzZSBpbmNsdWRlIHRoZSB2ZXJzaW9uIG9mCisrPENPREU+dGltZTwvQ09ERT4sIHdoaWNoIHlvdSBjYW4gZ2V0IGJ5IHJ1bm5pbmcgYDxTQU1QPnRpbWUgLS12ZXJzaW9uPC9TQU1QPicsIGFuZCB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIGFuZCBDIGNvbXBpbGVyIHlvdSB1c2VkLgorKzwvUD4KKys8UD4KKysKKys8VEFCTEUgQk9SREVSPSIwIiBDRUxMU1BBQ0lORz0iMCI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4xLjEgU2V0dGluZyB0aGUgT3V0cHV0IEZvcm1hdDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPlNlbGVjdGluZyB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgYnkgPENPREU+dGltZTwvQ09ERT4uPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+VGhlIGluZm9ybWF0aW9uIDxDT0RFPnRpbWU8L0NPREU+IGNhbiByZXBvcnQuPC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDOCI+MS4zIFJlZGlyZWN0aW5nIE91dHB1dDwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPldyaXRpbmcgdGhlIGluZm9ybWF0aW9uIHRvIGEgZmlsZS48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4xLjQgRXhhbXBsZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5FeGFtcGxlcyBvZiB1c2luZyA8Q09ERT50aW1lPC9DT0RFPi48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+TGltaXRhdGlvbnMgb24gdGhlIGFjY3VyYWN5IG9mIDxDT0RFPnRpbWU8L0NPREU+IG91dHB1dC48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMSI+MS42IFJ1bm5pbmcgdGhlIDxDT0RFPnRpbWU8L0NPREU+IENvbW1hbmQ8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj5TdW1tYXJ5IG9mIHRoZSBvcHRpb25zIHRvIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLjwvVEQ+PC9UUj4KKys8L1RBQkxFPgorKzxQPgorKworKzxBIE5BTUU9IlNldHRpbmcgRm9ybWF0Ij48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzIiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0IDwvSDI+CisrPCEtLWRvY2lkOjpTRUMyOjotLT4KKys8UD4KKysKKys8Q09ERT50aW1lPC9DT0RFPiB1c2VzIGEgPEVNPmZvcm1hdCBzdHJpbmc8L0VNPiB0byBkZXRlcm1pbmUgd2hpY2ggaW5mb3JtYXRpb24gdG8KKytkaXNwbGF5IGFib3V0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgY29tbWFuZCBpdCBydW5zLiAgU2VlIHNlY3Rpb24gPEEgSFJFRj0idGltZS5odG1sI1NFQzMiPjEuMiBUaGUgRm9ybWF0IFN0cmluZzwvQT4sIGZvciB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGZvcm1hdCBzdHJpbmcgY29udGVudHMuCisrPC9QPgorKzxQPgorKworK1lvdSBjYW4gc3BlY2lmeSBhIGZvcm1hdCBzdHJpbmcgd2l0aCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgbGlzdGVkCisrYmVsb3cuICBJZiBubyBmb3JtYXQgaXMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCB0aGUKKys8Q09ERT5USU1FPC9DT0RFPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBmb3JtYXQKKytzdHJpbmcuICBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IGZvcm1hdCBidWlsdCBpbnRvIDxDT0RFPnRpbWU8L0NPREU+IGlzIHVzZWQ6CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT4lVXVzZXIgJVNzeXN0ZW0gJUVlbGFwc2VkICVQQ1BVICglWHRleHQrJURkYXRhICVNbWF4KWsKKyslSWlucHV0cyslT291dHB1dHMgKCVGbWFqb3IrJVJtaW5vcilwYWdlZmF1bHRzICVXc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytUaGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gc2V0IHRoZSBmb3JtYXQgYXJlOgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1mIDxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1mb3JtYXQ9PFZBUj5mb3JtYXQ8L1ZBUj48L0NPREU+CisrPEREPlVzZSA8VkFSPmZvcm1hdDwvVkFSPiBhcyB0aGUgZm9ybWF0IHN0cmluZy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1wPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1wb3J0YWJpbGl0eTwvQ09ERT4KKys8REQ+VXNlIHRoZSBmb2xsb3dpbmcgZm9ybWF0IHN0cmluZywgZm9yIGNvbmZvcm1hbmNlIHdpdGggUE9TSVggc3RhbmRhcmQKKysxMDAzLjI6CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnJlYWwgJWUKKyt1c2VyICVVCisrc3lzICVTCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcXVpZXQ8L0NPREU+CisrPEREPlN1cHByZXNzIG5vbi16ZXJvIGVycm9yIGNvZGUgZnJvbSB0aGUgZXhlY3V0ZWQgcHJvZ3JhbS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi12PC9DT0RFPgorKzxERD48RFQ+PENPREU+LS12ZXJib3NlPC9DT0RFPgorKzxERD48QSBOQU1FPSJJRFgyIj48L0E+CisrVXNlIHRoZSBidWlsdC1pbiB2ZXJib3NlIGZvcm1hdCwgd2hpY2ggZGlzcGxheXMgZWFjaCBhdmFpbGFibGUgcGllY2Ugb2YKKytpbmZvcm1hdGlvbiBvbiB0aGUgcHJvZ3JhbSdzIHJlc291cmNlIHVzZSBvbiBpdHMgb3duIGxpbmUsIHdpdGggYW4KKytFbmdsaXNoIGRlc2NyaXB0aW9uIG9mIGl0cyBtZWFuaW5nLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iRm9ybWF0IFN0cmluZyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUMzIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMyIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjIgVGhlIEZvcm1hdCBTdHJpbmcgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzM6Oi0tPgorKzxQPgorKworKzxBIE5BTUU9IklEWDMiPjwvQT4KKys8QSBOQU1FPSJJRFg0Ij48L0E+CisrVGhlIDxFTT5mb3JtYXQgc3RyaW5nPC9FTT4gY29udHJvbHMgdGhlIGNvbnRlbnRzIG9mIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBvdXRwdXQuCisrSXQgY29uc2lzdHMgb2YgPEVNPnJlc291cmNlIHNwZWNpZmllcnM8L0VNPiBhbmQgPEVNPmVzY2FwZXM8L0VNPiwgaW50ZXJzcGVyc2VkCisrd2l0aCBwbGFpbiB0ZXh0LgorKzwvUD4KKys8UD4KKysKKytBIGJhY2tzbGFzaCBpbnRyb2R1Y2VzIGFuIDxFTT5lc2NhcGU8L0VNPiwgd2hpY2ggaXMgdHJhbnNsYXRlZAorK2ludG8gYSBzaW5nbGUgcHJpbnRpbmcgY2hhcmFjdGVyIHVwb24gb3V0cHV0LiAgVGhlIHZhbGlkIGVzY2FwZXMgYXJlCisrbGlzdGVkIGJlbG93LiAgQW4gaW52YWxpZCBlc2NhcGUgaXMgb3V0cHV0IGFzIGEgcXVlc3Rpb24gbWFyayBmb2xsb3dlZAorK2J5IGEgYmFja3NsYXNoLgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPlx0PC9DT0RFPgorKzxERD5hIHRhYiBjaGFyYWN0ZXIKKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlxuPC9DT0RFPgorKzxERD5hIG5ld2xpbmUKKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlxcPC9DT0RFPgorKzxERD5hIGxpdGVyYWwgYmFja3NsYXNoCisrPC9ETD4KKys8UD4KKysKKys8Q09ERT50aW1lPC9DT0RFPiBhbHdheXMgcHJpbnRzIGEgbmV3bGluZSBhZnRlciBwcmludGluZyB0aGUgcmVzb3VyY2UgdXNlCisraW5mb3JtYXRpb24sIHNvIG5vcm1hbGx5IGZvcm1hdCBzdHJpbmdzIGRvIG5vdCBlbmQgd2l0aCBhIG5ld2xpbmUKKytjaGFyYWN0ZXIgKG9yIGA8U0FNUD5cbjwvU0FNUD4nKS4KKys8L1A+CisrPFA+CisrCisrQSByZXNvdXJjZSBzcGVjaWZpZXIgY29uc2lzdHMgb2YgYSBwZXJjZW50IHNpZ24gZm9sbG93ZWQgYnkgYW5vdGhlcgorK2NoYXJhY3Rlci4gIEFuIGludmFsaWQgcmVzb3VyY2Ugc3BlY2lmaWVyIGlzIG91dHB1dCBhcyBhIHF1ZXN0aW9uIG1hcmsKKytmb2xsb3dlZCBieSB0aGUgaW52YWxpZCBjaGFyYWN0ZXIuICBVc2UgYDxTQU1QPiUlPC9TQU1QPicgdG8gb3V0cHV0IGEgbGl0ZXJhbAorK3BlcmNlbnQgc2lnbi4KKys8L1A+CisrPFA+CisrCisrVGhlIHJlc291cmNlIHNwZWNpZmllcnMsIHdoaWNoIGFyZSBhIHN1cGVyc2V0IG9mIHRob3NlIHJlY29nbml6ZWQgYnkgdGhlCisrPENPREU+dGNzaDwvQ09ERT4gYnVpbHRpbiA8Q09ERT50aW1lPC9DT0RFPiBjb21tYW5kLCBhcmUgbGlzdGVkIGJlbG93LiAgTm90IGFsbAorK3Jlc291cmNlcyBhcmUgbWVhc3VyZWQgYnkgYWxsIHZlcnNpb25zIG9mIFVuaXgsIHNvIHNvbWUgb2YgdGhlIHZhbHVlcworK21pZ2h0IGJlIHJlcG9ydGVkIGFzIHplcm8gKHNlZSBzZWN0aW9uIDxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+MS41IEFjY3VyYWN5PC9BPikuCisrPC9QPgorKzxQPgorKworKzxUQUJMRSBCT1JERVI9IjAiIENFTExTUEFDSU5HPSIwIj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzQiPjEuMi4xIFRpbWUgUmVzb3VyY2VzPC9BPjwvVEQ+PFREPiZuYnNwOyZuYnNwOzwvVEQ+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PC9URD48L1RSPgorKzxUUj48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48QSBIUkVGPSJ0aW1lLmh0bWwjU0VDNSI+MS4yLjIgTWVtb3J5IFJlc291cmNlczwvQT48L1REPjxURD4mbmJzcDsmbmJzcDs8L1REPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjwvVEQ+PC9UUj4KKys8VFI+PFREIEFMSUdOPSJsZWZ0IiBWQUxJR049IlRPUCI+PEEgSFJFRj0idGltZS5odG1sI1NFQzYiPjEuMi4zIEkvTyBSZXNvdXJjZXM8L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPFRSPjxURCBBTElHTj0ibGVmdCIgVkFMSUdOPSJUT1AiPjxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4xLjIuNCBDb21tYW5kIEluZm88L0E+PC9URD48VEQ+Jm5ic3A7Jm5ic3A7PC9URD48VEQgQUxJR049ImxlZnQiIFZBTElHTj0iVE9QIj48L1REPjwvVFI+CisrPC9UQUJMRT4KKys8UD4KKysKKys8QSBOQU1FPSJUaW1lIFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM0Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMzIj4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMSBUaW1lIFJlc291cmNlcyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNDo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5FPC9DT0RFPgorKzxERD5FbGFwc2VkIHJlYWwgKHdhbGwgY2xvY2spIHRpbWUgdXNlZCBieSB0aGUgcHJvY2VzcywgaW4KKytbaG91cnM6XW1pbnV0ZXM6c2Vjb25kcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPmU8L0NPREU+CisrPEREPkVsYXBzZWQgcmVhbCAod2FsbCBjbG9jaykgdGltZSB1c2VkIGJ5IHRoZSBwcm9jZXNzLCBpbgorK3NlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5TPC9DT0RFPgorKzxERD5Ub3RhbCBudW1iZXIgb2YgQ1BVLXNlY29uZHMgdXNlZCBieSB0aGUgc3lzdGVtIG9uIGJlaGFsZiBvZiB0aGUgcHJvY2VzcworKyhpbiBrZXJuZWwgbW9kZSksIGluIHNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5VPC9DT0RFPgorKzxERD5Ub3RhbCBudW1iZXIgb2YgQ1BVLXNlY29uZHMgdGhhdCB0aGUgcHJvY2VzcyB1c2VkIGRpcmVjdGx5IChpbiB1c2VyCisrbW9kZSksIGluIHNlY29uZHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5QPC9DT0RFPgorKzxERD5QZXJjZW50YWdlIG9mIHRoZSBDUFUgdGhhdCB0aGlzIGpvYiBnb3QuICBUaGlzIGlzIGp1c3QgdXNlciArIHN5c3RlbQorK3RpbWVzIGRpdmllZCBieSB0aGUgdG90YWwgcnVubmluZyB0aW1lLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iTWVtb3J5IFJlc291cmNlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM1Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM0Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM2Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgzPiAxLjIuMiBNZW1vcnkgUmVzb3VyY2VzIDwvSDM+CisrPCEtLWRvY2lkOjpTRUM1OjotLT4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPk08L0NPREU+CisrPEREPk1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgb2YgdGhlIHByb2Nlc3MgZHVyaW5nIGl0cyBsaWZldGltZSwgaW4KKytLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT50PC9DT0RFPgorKzxERD5BdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIG9mIHRoZSBwcm9jZXNzLCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5LPC9DT0RFPgorKzxERD5BdmVyYWdlIHRvdGFsIChkYXRhK3N0YWNrK3RleHQpIG1lbW9yeSB1c2Ugb2YgdGhlIHByb2Nlc3MsIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPkQ8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHVuc2hhcmVkIGRhdGEgYXJlYSwgaW4gS2lsb2J5dGVzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+cDwvQ09ERT4KKys8REQ+QXZlcmFnZSBzaXplIG9mIHRoZSBwcm9jZXNzJ3MgdW5zaGFyZWQgc3RhY2ssIGluIEtpbG9ieXRlcy4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlg8L0NPREU+CisrPEREPkF2ZXJhZ2Ugc2l6ZSBvZiB0aGUgcHJvY2VzcydzIHNoYXJlZCB0ZXh0LCBpbiBLaWxvYnl0ZXMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5aPC9DT0RFPgorKzxERD5TeXN0ZW0ncyBwYWdlIHNpemUsIGluIGJ5dGVzLiAgVGhpcyBpcyBhIHBlci1zeXN0ZW0gY29uc3RhbnQsIGJ1dAorK3ZhcmllcyBiZXR3ZWVuIHN5c3RlbXMuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJJL08gUmVzb3VyY2VzIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzYiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzUiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzciPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi4zIEkvTyBSZXNvdXJjZXMgPC9IMz4KKys8IS0tZG9jaWQ6OlNFQzY6Oi0tPgorKzxQPgorKworKzwvUD4KKys8REwgQ09NUEFDVD4KKys8RFQ+PENPREU+RjwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIG1ham9yLCBvciBJL08tcmVxdWlyaW5nLCBwYWdlIGZhdWx0cyB0aGF0IG9jY3VycmVkIHdoaWxlIHRoZQorK3Byb2Nlc3Mgd2FzIHJ1bm5pbmcuICBUaGVzZSBhcmUgZmF1bHRzIHdoZXJlIHRoZSBwYWdlIGhhcyBhY3R1YWxseQorK21pZ3JhdGVkIG91dCBvZiBwcmltYXJ5IG1lbW9yeS4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlI8L0NPREU+CisrPEREPk51bWJlciBvZiBtaW5vciwgb3IgcmVjb3ZlcmFibGUsIHBhZ2UgZmF1bHRzLiAgVGhlc2UgYXJlIHBhZ2VzIHRoYXQgYXJlCisrbm90IHZhbGlkIChzbyB0aGV5IGZhdWx0KSBidXQgd2hpY2ggaGF2ZSBub3QgeWV0IGJlZW4gY2xhaW1lZCBieSBvdGhlcgorK3ZpcnR1YWwgcGFnZXMuICBUaHVzIHRoZSBkYXRhIGluIHRoZSBwYWdlIGlzIHN0aWxsIHZhbGlkIGJ1dCB0aGUgc3lzdGVtCisrdGFibGVzIG11c3QgYmUgdXBkYXRlZC4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPlc8L0NPREU+CisrPEREPk51bWJlciBvZiB0aW1lcyB0aGUgcHJvY2VzcyB3YXMgc3dhcHBlZCBvdXQgb2YgbWFpbiBtZW1vcnkuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5jPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgdGltZXMgdGhlIHByb2Nlc3Mgd2FzIGNvbnRleHQtc3dpdGNoZWQgaW52b2x1bnRhcmlseSAoYmVjYXVzZQorK3RoZSB0aW1lIHNsaWNlIGV4cGlyZWQpLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+dzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIHByb2dyYW0gd2FzIGNvbnRleHQtc3dpdGNoZWQgdm9sdW50YXJpbHksIGZvcgorK2luc3RhbmNlIHdoaWxlIHdhaXRpbmcgZm9yIGFuIEkvTyBvcGVyYXRpb24gdG8gY29tcGxldGUuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5JPC9DT0RFPgorKzxERD5OdW1iZXIgb2YgZmlsZSBzeXN0ZW0gaW5wdXRzIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+TzwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIGZpbGUgc3lzdGVtIG91dHB1dHMgYnkgdGhlIHByb2Nlc3MuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT5yPC9DT0RFPgorKzxERD5OdW1iZXIgb2Ygc29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkIGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+czwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNvY2tldCBtZXNzYWdlcyBzZW50IGJ5IHRoZSBwcm9jZXNzLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+azwvQ09ERT4KKys8REQ+TnVtYmVyIG9mIHNpZ25hbHMgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNzLgorKzwvREw+CisrPFA+CisrCisrPEEgTkFNRT0iQ29tbWFuZCBJbmZvIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzciPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzYiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzgiPiAmZ3Q7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDM+IDEuMi40IENvbW1hbmQgSW5mbyA8L0gzPgorKzwhLS1kb2NpZDo6U0VDNzo6LS0+CisrPFA+CisrCisrPC9QPgorKzxETCBDT01QQUNUPgorKzxEVD48Q09ERT5DPC9DT0RFPgorKzxERD5OYW1lIGFuZCBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9mIHRoZSBjb21tYW5kIGJlaW5nIHRpbWVkLgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+eDwvQ09ERT4KKys8REQ+RXhpdCBzdGF0dXMgb2YgdGhlIGNvbW1hbmQuCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJSZWRpcmVjdGluZyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM4Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM3Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM5Ij4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjMgUmVkaXJlY3RpbmcgT3V0cHV0IDwvSDI+CisrPCEtLWRvY2lkOjpTRUM4OjotLT4KKys8UD4KKysKKytCeSBkZWZhdWx0LCA8Q09ERT50aW1lPC9DT0RFPiB3cml0ZXMgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIHRoZQorK3N0YW5kYXJkIGVycm9yIHN0cmVhbS4gIFRoZSBvcHRpb25zIGJlbG93IG1ha2UgaXQgd3JpdGUgdGhlIHN0YXRpc3RpY3MKKyt0byBhIGZpbGUgaW5zdGVhZC4gIERvaW5nIHRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgcHJvZ3JhbSB5b3UncmUKKytydW5uaW5nIHdyaXRlcyB0byB0aGUgc3RhbmRhcmQgZXJyb3Igb3IgeW91J3JlIHJ1bm5pbmcgPENPREU+dGltZTwvQ09ERT4KKytub25pbnRlcmFjdGl2ZWx5IG9yIGluIHRoZSBiYWNrZ3JvdW5kLgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1vIDxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tb3V0cHV0PTxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+V3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIDxWQVI+ZmlsZTwvVkFSPi4gIEJ5IGRlZmF1bHQsIHRoaXMKKys8RU0+b3ZlcndyaXRlczwvRU0+IHRoZSBmaWxlLCBkZXN0cm95aW5nIHRoZSBmaWxlJ3MgcHJldmlvdXMgY29udGVudHMuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tYTwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tYXBwZW5kPC9DT0RFPgorKzxERD48RU0+QXBwZW5kPC9FTT4gdGhlIHJlc291cmNlIHVzZSBpbmZvcm1hdGlvbiB0byB0aGUgb3V0cHV0IGZpbGUgaW5zdGVhZAorK29mIG92ZXJ3cml0aW5nIGl0LiAgVGhpcyBvcHRpb24gaXMgb25seSB1c2VmdWwgd2l0aCB0aGUgYDxTQU1QPi1vPC9TQU1QPicgb3IKKytgPFNBTVA+LS1vdXRwdXQ8L1NBTVA+JyBvcHRpb24uCisrPC9ETD4KKys8UD4KKysKKys8QSBOQU1FPSJFeGFtcGxlcyI+PC9BPgorKzxIUiBTSVpFPSI2Ij4KKys8QSBOQU1FPSJTRUM5Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4gJmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+ICZndDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxIj4gJmx0OyZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+IFVwIDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bICZndDsmZ3Q7IF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMj4gMS40IEV4YW1wbGVzIDwvSDI+CisrPCEtLWRvY2lkOjpTRUM5OjotLT4KKys8UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPndjIC9ldGMvaG9zdHM8L1NBTVA+JyBhbmQgc2hvdyB0aGUgZGVmYXVsdCBpbmZvcm1hdGlvbjoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIHdjIC9ldGMvaG9zdHMKKysgICAgICAzNSAgICAgMTExICAgIDExMzQgL2V0Yy9ob3N0cworKzAuMDB1c2VyIDAuMDFzeXN0ZW0gMDowMC4wNGVsYXBzZWQgMjUlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpaworKzFpbnB1dHMrMW91dHB1dHMgKDBtYWpvciswbWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKytSdW4gdGhlIGNvbW1hbmQgYDxTQU1QPmxzIC1GczwvU0FNUD4nIGFuZCBzaG93IGp1c3QgdGhlIHVzZXIsIHN5c3RlbSwgYW5kCisrd2FsbC1jbG9jayB0aW1lOgorKzwvUD4KKys8UD4KKysKKys8VEFCTEU+PHRyPjx0ZD4mbmJzcDs8L3RkPjx0ZCBjbGFzcz1leGFtcGxlPjxwcmU+ZWckIHRpbWUgLWYgJnF1b3Q7XHQlRSByZWFsLFx0JVUgdXNlcixcdCVTIHN5cyZxdW90OyBscyAtRnMKKyt0b3RhbCAxNgorKzEgYWNjb3VudC8gICAgICAxIGRiLyAgICAgICAgICAgMSBtYWlsLyAgICAgICAgIDEgcnVuLworKzEgYmFja3Vwcy8gICAgICAxIGVtYWNzLyAgICAgICAgMSBtc2dzLyAgICAgICAgIDEgcndoby8KKysxIGNyYXNoLyAgICAgICAgMSBnYW1lcy8gICAgICAgIDEgcHJlc2VydmUvICAgICAxIHNwb29sLworKzEgY3Jvbi8gICAgICAgICAxIGxvZy8gICAgICAgICAgMSBxdW90YXMvICAgICAgIDEgdG1wLworKyAgICAgICAgMDowMC4wMyByZWFsLCAgIDAuMDAgdXNlciwgICAgICAwLjAxIHN5cworKzwvcHJlPjwvdGQ+PC90cj48L3RhYmxlPjxQPgorKworK0VkaXQgdGhlIGZpbGUgYDxUVD4uYmFzaHJjPC9UVD4nIGFuZCBoYXZlIDxDT0RFPnRpbWU8L0NPREU+IGFwcGVuZCB0aGUgZWxhcHNlZCB0aW1lCisrYW5kIG51bWJlciBvZiBzaWduYWxzIHRvIHRoZSBmaWxlIGA8VFQ+bG9nPC9UVD4nLCByZWFkaW5nIHRoZSBmb3JtYXQgc3RyaW5nCisrZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgPENPREU+VElNRTwvQ09ERT46CisrPC9QPgorKzxQPgorKworKzxUQUJMRT48dHI+PHRkPiZuYnNwOzwvdGQ+PHRkIGNsYXNzPWV4YW1wbGU+PHByZT5lZyQgZXhwb3J0IFRJTUU9JnF1b3Q7XHQlRSxcdCVrJnF1b3Q7ICMgSWYgdXNpbmcgYmFzaCBvciBrc2gKKytlZyQgc2V0ZW52IFRJTUUgJnF1b3Q7XHQlRSxcdCVrJnF1b3Q7ICMgSWYgdXNpbmcgY3NoIG9yIHRjc2gKKytlZyQgdGltZSAtYSAtbyBsb2cgZW1hY3MgLmJhc2hyYworK2VnJCBjYXQgbG9nCisrICAgICAgICAwOjE2LjU1LCAgICAgICAgNzI2CisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrUnVuIHRoZSBjb21tYW5kIGA8U0FNUD5zbGVlcCA0PC9TQU1QPicgYW5kIHNob3cgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBpdAorK3ZlcmJvc2VseToKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPmVnJCB0aW1lIC12IHNsZWVwIDQKKysgICAgICAgIENvbW1hbmQgYmVpbmcgdGltZWQ6ICZxdW90O3NsZWVwIDQmcXVvdDsKKysgICAgICAgIFVzZXIgdGltZSAoc2Vjb25kcyk6IDAuMDAKKysgICAgICAgIFN5c3RlbSB0aW1lIChzZWNvbmRzKTogMC4wNQorKyAgICAgICAgUGVyY2VudCBvZiBDUFUgdGhpcyBqb2IgZ290OiAxJQorKyAgICAgICAgRWxhcHNlZCAod2FsbCBjbG9jaykgdGltZSAoaDptbTpzcyBvciBtOnNzKTogMDowNC4yNgorKyAgICAgICAgQXZlcmFnZSBzaGFyZWQgdGV4dCBzaXplIChrYnl0ZXMpOiAzNgorKyAgICAgICAgQXZlcmFnZSB1bnNoYXJlZCBkYXRhIHNpemUgKGtieXRlcyk6IDI0CisrICAgICAgICBBdmVyYWdlIHN0YWNrIHNpemUgKGtieXRlcyk6IDAKKysgICAgICAgIEF2ZXJhZ2UgdG90YWwgc2l6ZSAoa2J5dGVzKTogNjAKKysgICAgICAgIE1heGltdW0gcmVzaWRlbnQgc2V0IHNpemUgKGtieXRlcyk6IDMyCisrICAgICAgICBBdmVyYWdlIHJlc2lkZW50IHNldCBzaXplIChrYnl0ZXMpOiAyNAorKyAgICAgICAgTWFqb3IgKHJlcXVpcmluZyBJL08pIHBhZ2UgZmF1bHRzOiAzCisrICAgICAgICBNaW5vciAocmVjbGFpbWluZyBhIGZyYW1lKSBwYWdlIGZhdWx0czogMAorKyAgICAgICAgVm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoZXM6IDExCisrICAgICAgICBJbnZvbHVudGFyeSBjb250ZXh0IHN3aXRjaGVzOiAwCisrICAgICAgICBTd2FwczogMAorKyAgICAgICAgRmlsZSBzeXN0ZW0gaW5wdXRzOiAzCisrICAgICAgICBGaWxlIHN5c3RlbSBvdXRwdXRzOiAxCisrICAgICAgICBTb2NrZXQgbWVzc2FnZXMgc2VudDogMAorKyAgICAgICAgU29ja2V0IG1lc3NhZ2VzIHJlY2VpdmVkOiAwCisrICAgICAgICBTaWduYWxzIGRlbGl2ZXJlZDogMQorKyAgICAgICAgUGFnZSBzaXplIChieXRlcyk6IDQwOTYKKysgICAgICAgIEV4aXQgc3RhdHVzOiAwCisrPC9wcmU+PC90ZD48L3RyPjwvdGFibGU+PFA+CisrCisrPEEgTkFNRT0iQWNjdXJhY3kiPjwvQT4KKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDMTAiPjwvQT4KKys8VEFCTEUgQ0VMTFBBRERJTkc9MSBDRUxMU1BBQ0lORz0xIEJPUkRFUj0wPgorKzxUUj48VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzkiPiAmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzExIj4gJmd0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQzEiPiAmbHQ7Jmx0OyA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj4gVXAgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyZndDsgXTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPlRvcDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Db250ZW50cyI+Q29udGVudHM8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+W0luZGV4XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQWJvdXQiPiA/IDwvQT5dPC9URD4KKys8L1RSPjwvVEFCTEU+CisrPEgyPiAxLjUgQWNjdXJhY3kgPC9IMj4KKys8IS0tZG9jaWQ6OlNFQzEwOjotLT4KKys8UD4KKysKKytUaGUgZWxhcHNlZCB0aW1lIGlzIG5vdCBjb2xsZWN0ZWQgYXRvbWljYWxseSB3aXRoIHRoZSBleGVjdXRpb24gb2YgdGhlCisrcHJvZ3JhbTsgYXMgYSByZXN1bHQsIGluIGJpemFycmUgY2lyY3Vtc3RhbmNlcyAoaWYgdGhlIDxDT0RFPnRpbWU8L0NPREU+CisrY29tbWFuZCBnZXRzIHN0b3BwZWQgb3Igc3dhcHBlZCBvdXQgaW4gYmV0d2VlbiB3aGVuIHRoZSBwcm9ncmFtIGJlaW5nCisrdGltZWQgZXhpdHMgYW5kIHdoZW4gPENPREU+dGltZTwvQ09ERT4gY2FsY3VsYXRlcyBob3cgbG9uZyBpdCB0b29rIHRvIHJ1biksIGl0CisrY291bGQgYmUgbXVjaCBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGV4ZWN1dGlvbiB0aW1lLgorKzwvUD4KKys8UD4KKysKKytXaGVuIHRoZSBydW5uaW5nIHRpbWUgb2YgYSBjb21tYW5kIGlzIHZlcnkgbmVhcmx5IHplcm8sIHNvbWUgdmFsdWVzCisrKGUuZy4sIHRoZSBwZXJjZW50YWdlIG9mIENQVSB1c2VkKSBtYXkgYmUgcmVwb3J0ZWQgYXMgZWl0aGVyIHplcm8gKHdoaWNoCisraXMgd3JvbmcpIG9yIGEgcXVlc3Rpb24gbWFyay4KKys8L1A+CisrPFA+CisrCisrTW9zdCBpbmZvcm1hdGlvbiBzaG93biBieSA8Q09ERT50aW1lPC9DT0RFPiBpcyBkZXJpdmVkIGZyb20gdGhlIDxDT0RFPndhaXQzPC9DT0RFPgorK3N5c3RlbSBjYWxsLiAgVGhlIG51bWJlcnMgYXJlIG9ubHkgYXMgZ29vZCBhcyB0aG9zZSByZXR1cm5lZCBieQorKzxDT0RFPndhaXQzPC9DT0RFPi4gIE1hbnkgc3lzdGVtcyBkbyBub3QgbWVhc3VyZSBhbGwgb2YgdGhlIHJlc291cmNlcyB0aGF0CisrPENPREU+dGltZTwvQ09ERT4gY2FuIHJlcG9ydCBvbjsgdGhvc2UgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCBhcyB6ZXJvLiAgVGhlCisrc3lzdGVtcyB0aGF0IG1lYXN1cmUgbW9zdCBvciBhbGwgb2YgdGhlIHJlc291cmNlcyBhcmUgYmFzZWQgb24gNC4yIG9yCisrNC4zQlNELiAgTGF0ZXIgQlNEIHJlbGVhc2VzIHVzZSBkaWZmZXJlbnQgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSB0aGF0CisrbWVhc3VyZXMgZmV3ZXIgcmVzb3VyY2VzLgorKzwvUD4KKys8UD4KKysKKytPbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgYSA8Q09ERT53YWl0MzwvQ09ERT4gY2FsbCB0aGF0IHJldHVybnMgc3RhdHVzCisraW5mb3JtYXRpb24sIHRoZSA8Q09ERT50aW1lczwvQ09ERT4gc3lzdGVtIGNhbGwgaXMgdXNlZCBpbnN0ZWFkLiAgSXQgcHJvdmlkZXMKKyttdWNoIGxlc3MgaW5mb3JtYXRpb24gdGhhbiA8Q09ERT53YWl0MzwvQ09ERT4sIHNvIG9uIHRob3NlIHN5c3RlbXMgPENPREU+dGltZTwvQ09ERT4KKytyZXBvcnRzIG1vc3Qgb2YgdGhlIHJlc291cmNlcyBhcyB6ZXJvLgorKzwvUD4KKys8UD4KKysKKytUaGUgYDxTQU1QPiVJPC9TQU1QPicgYW5kIGA8U0FNUD4lTzwvU0FNUD4nIHZhbHVlcyBhcmUgYWxsZWdlZGx5IG9ubHkgJnF1b3Q7cmVhbCZxdW90OyBpbnB1dAorK2FuZCBvdXRwdXQgYW5kIGRvIG5vdCBpbmNsdWRlIHRob3NlIHN1cHBsaWVkIGJ5IGNhY2hpbmcgZGV2aWNlcy4gIFRoZQorK21lYW5pbmcgb2YgJnF1b3Q7cmVhbCZxdW90OyBJL08gcmVwb3J0ZWQgYnkgYDxTQU1QPiVJPC9TQU1QPicgYW5kIGA8U0FNUD4lTzwvU0FNUD4nIG1heSBiZQorK211ZGRsZWQgZm9yIHdvcmtzdGF0aW9ucywgZXNwZWNpYWxseSBkaXNrbGVzcyBvbmVzLgorKzwvUD4KKys8UD4KKysKKys8QSBOQU1FPSJJbnZva2luZyB0aW1lIj48L0E+CisrPEhSIFNJWkU9IjYiPgorKzxBIE5BTUU9IlNFQzExIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUMxMCI+ICZsdDsgPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPlsgJmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDMSI+ICZsdDsmbHQ7IDwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19Ub3AiPiBVcCA8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WyAmZ3Q7Jmd0OyBdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPiAmbmJzcDsgPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+ICZuYnNwOyA8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj4gJm5ic3A7IDxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX1RvcCI+VG9wPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0NvbnRlbnRzIj5Db250ZW50czwvQT5dPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bSW5kZXhdPC9URD4KKys8VEQgVkFMSUdOPSJNSURETEUiIEFMSUdOPSJMRUZUIj5bPEEgSFJFRj0idGltZS5odG1sI1NFQ19BYm91dCI+ID8gPC9BPl08L1REPgorKzwvVFI+PC9UQUJMRT4KKys8SDI+IDEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kIDwvSDI+CisrPCEtLWRvY2lkOjpTRUMxMTo6LS0+CisrPFA+CisrCisrVGhlIGZvcm1hdCBvZiB0aGUgPENPREU+dGltZTwvQ09ERT4gY29tbWFuZCBpczoKKys8L1A+CisrPFA+CisrCisrPFRBQkxFPjx0cj48dGQ+Jm5ic3A7PC90ZD48dGQgY2xhc3M9ZXhhbXBsZT48cHJlPnRpbWUgW29wdGlvbjxzbWFsbD4uLi48L3NtYWxsPl0gPFZBUj5jb21tYW5kPC9WQVI+IFs8VkFSPmFyZzwvVkFSPjxzbWFsbD4uLi48L3NtYWxsPl0KKys8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48UD4KKysKKys8QSBOQU1FPSJJRFg1Ij48L0E+CisrPENPREU+dGltZTwvQ09ERT4gcnVucyB0aGUgcHJvZ3JhbSA8VkFSPmNvbW1hbmQ8L1ZBUj4sIHdpdGggYW55IGdpdmVuIGFyZ3VtZW50cworKzxWQVI+YXJnPC9WQVI+PHNtYWxsPi4uLjwvc21hbGw+LiAgV2hlbiA8VkFSPmNvbW1hbmQ8L1ZBUj4gZmluaXNoZXMsIDxDT0RFPnRpbWU8L0NPREU+IGRpc3BsYXlzCisraW5mb3JtYXRpb24gYWJvdXQgcmVzb3VyY2VzIHVzZWQgYnkgPFZBUj5jb21tYW5kPC9WQVI+IChvbiB0aGUgc3RhbmRhcmQgZXJyb3IKKytvdXRwdXQsIGJ5IGRlZmF1bHQpLiAgSWYgPFZBUj5jb21tYW5kPC9WQVI+IGV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzIG9yIGlzCisrdGVybWluYXRlZCBieSBhIHNpZ25hbCwgPENPREU+dGltZTwvQ09ERT4gZGlzcGxheXMgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIHRoZQorK2V4aXQgc3RhdHVzIG9yIHNpZ25hbCBudW1iZXIuCisrPC9QPgorKzxQPgorKworK09wdGlvbnMgdG8gPENPREU+dGltZTwvQ09ERT4gbXVzdCBhcHBlYXIgb24gdGhlIGNvbW1hbmQgbGluZSBiZWZvcmUKKys8VkFSPmNvbW1hbmQ8L1ZBUj4uICBBbnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIGFmdGVyIDxWQVI+Y29tbWFuZDwvVkFSPiBpcworK3Bhc3NlZCBhcyBhcmd1bWVudHMgdG8gPFZBUj5jb21tYW5kPC9WQVI+LgorKzwvUD4KKys8UD4KKysKKys8L1A+CisrPERMIENPTVBBQ1Q+CisrPERUPjxDT0RFPi1vIDxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tb3V0cHV0PTxWQVI+ZmlsZTwvVkFSPjwvQ09ERT4KKys8REQ+V3JpdGUgdGhlIHJlc291cmNlIHVzZSBzdGF0aXN0aWNzIHRvIDxWQVI+ZmlsZTwvVkFSPi4KKys8UD4KKysKKys8L1A+CisrPERUPjxDT0RFPi1hPC9DT0RFPgorKzxERD48RFQ+PENPREU+LS1hcHBlbmQ8L0NPREU+CisrPEREPjxFTT5BcHBlbmQ8L0VNPiB0aGUgcmVzb3VyY2UgdXNlIGluZm9ybWF0aW9uIHRvIHRoZSBvdXRwdXQgZmlsZSBpbnN0ZWFkCisrb2Ygb3ZlcndyaXRpbmcgaXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tZiA8VkFSPmZvcm1hdDwvVkFSPjwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tZm9ybWF0PTxWQVI+Zm9ybWF0PC9WQVI+PC9DT0RFPgorKzxERD5Vc2UgPFZBUj5mb3JtYXQ8L1ZBUj4gYXMgdGhlIGZvcm1hdCBzdHJpbmcuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tLWhlbHA8L0NPREU+CisrPEREPlByaW50IGEgc3VtbWFyeSBvZiB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgdG8gPENPREU+dGltZTwvQ09ERT4gYW5kIGV4aXQuCisrPFA+CisrCisrPC9QPgorKzxEVD48Q09ERT4tcDwvQ09ERT4KKys8REQ+PERUPjxDT0RFPi0tcG9ydGFiaWxpdHk8L0NPREU+CisrPEREPlVzZSB0aGUgUE9TSVggZm9ybWF0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LXY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcmJvc2U8L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDYiPjwvQT4KKytVc2UgdGhlIGJ1aWx0LWluIHZlcmJvc2UgZm9ybWF0LgorKzxQPgorKworKzwvUD4KKys8RFQ+PENPREU+LVY8L0NPREU+CisrPEREPjxEVD48Q09ERT4tLXZlcnNpb248L0NPREU+CisrPEREPjxBIE5BTUU9IklEWDciPjwvQT4KKytQcmludCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgPENPREU+dGltZTwvQ09ERT4gYW5kIGV4aXQuCisrPC9ETD4KKys8UD4KKysKKys8SFIgU0laRT0iNiI+CisrPEEgTkFNRT0iU0VDX0NvbnRlbnRzIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5UYWJsZSBvZiBDb250ZW50czwvSDE+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMSIgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT4KKys8QlI+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMiIgSFJFRj0idGltZS5odG1sI1NFQzIiPjEuMSBTZXR0aW5nIHRoZSBPdXRwdXQgRm9ybWF0PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MzIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMyI+MS4yIFRoZSBGb3JtYXQgU3RyaW5nPC9BPgorKzxCUj4KKys8QkxPQ0tRVU9URT4KKys8QSBOQU1FPSJUT0M0IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNCI+MS4yLjEgVGltZSBSZXNvdXJjZXM8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzUiIEhSRUY9InRpbWUuaHRtbCNTRUM1Ij4xLjIuMiBNZW1vcnkgUmVzb3VyY2VzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M2IiBIUkVGPSJ0aW1lLmh0bWwjU0VDNiI+MS4yLjMgSS9PIFJlc291cmNlczwvQT4KKys8QlI+CisrPEEgTkFNRT0iVE9DNyIgSFJFRj0idGltZS5odG1sI1NFQzciPjEuMi40IENvbW1hbmQgSW5mbzwvQT4KKys8QlI+CisrPC9CTE9DS1FVT1RFPgorKzxBIE5BTUU9IlRPQzgiIEhSRUY9InRpbWUuaHRtbCNTRUM4Ij4xLjMgUmVkaXJlY3RpbmcgT3V0cHV0PC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0M5IiBIUkVGPSJ0aW1lLmh0bWwjU0VDOSI+MS40IEV4YW1wbGVzPC9BPgorKzxCUj4KKys8QSBOQU1FPSJUT0MxMCIgSFJFRj0idGltZS5odG1sI1NFQzEwIj4xLjUgQWNjdXJhY3k8L0E+CisrPEJSPgorKzxBIE5BTUU9IlRPQzExIiBIUkVGPSJ0aW1lLmh0bWwjU0VDMTEiPjEuNiBSdW5uaW5nIHRoZSA8Q09ERT50aW1lPC9DT0RFPiBDb21tYW5kPC9BPgorKzxCUj4KKys8L0JMT0NLUVVPVEU+CisrPC9CTE9DS1FVT1RFPgorKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDX09WRVJWSUVXIj48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5TaG9ydCBUYWJsZSBvZiBDb250ZW50czwvSDE+CisrPEJMT0NLUVVPVEU+CisrPEEgTkFNRT0iVE9DMSIgSFJFRj0idGltZS5odG1sI1NFQzEiPjEuIE1lYXN1cmluZyBQcm9ncmFtIFJlc291cmNlIFVzZTwvQT4KKys8QlI+CisrCisrPC9CTE9DS1FVT1RFPgorKzxIUiBTSVpFPTE+CisrPEEgTkFNRT0iU0VDX0Fib3V0Ij48L0E+CisrPFRBQkxFIENFTExQQURESU5HPTEgQ0VMTFNQQUNJTkc9MSBCT1JERVI9MD4KKys8VFI+PFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfVG9wIj5Ub3A8L0E+XTwvVEQ+CisrPFREIFZBTElHTj0iTUlERExFIiBBTElHTj0iTEVGVCI+WzxBIEhSRUY9InRpbWUuaHRtbCNTRUNfQ29udGVudHMiPkNvbnRlbnRzPC9BPl08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPltJbmRleF08L1REPgorKzxURCBWQUxJR049Ik1JRERMRSIgQUxJR049IkxFRlQiPls8QSBIUkVGPSJ0aW1lLmh0bWwjU0VDX0Fib3V0Ij4gPyA8L0E+XTwvVEQ+CisrPC9UUj48L1RBQkxFPgorKzxIMT5BYm91dCB0aGlzIGRvY3VtZW50PC9IMT4KKytUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQKKytieSAKKyt1c2luZyA8QSBIUkVGPSJodHRwOi8vdGV4aTJodG1sLmN2c2hvbWUub3JnIj48ST50ZXhpMmh0bWw8L0k+PC9BPgorKzxQPjwvUD4KKytUaGUgYnV0dG9ucyBpbiB0aGUgbmF2aWdhdGlvbiBwYW5lbHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisrPFA+PC9QPgorKzx0YWJsZSBib3JkZXIgPSAiMSI+CisrPFRSPgorKzxUSD4gQnV0dG9uIDwvVEg+CisrPFRIPiBOYW1lIDwvVEg+CisrPFRIPiBHbyB0byA8L1RIPgorKzxUSD4gRnJvbSAxLjIuMyBnbyB0bzwvVEg+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbICZsdDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytCYWNrCisrPC9URD4KKys8VEQ+CisrcHJldmlvdXMgc2VjdGlvbiBpbiByZWFkaW5nIG9yZGVyCisrPC9URD4KKys8VEQ+CisrMS4yLjIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmZ3Q7IF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrRm9yd2FyZAorKzwvVEQ+CisrPFREPgorK25leHQgc2VjdGlvbiBpbiByZWFkaW5nIG9yZGVyCisrPC9URD4KKys8VEQ+CisrMS4yLjQKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgWyAmbHQ7Jmx0OyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Zhc3RCYWNrCisrPC9URD4KKys8VEQ+CisrYmVnaW5uaW5nIG9mIHRoaXMgY2hhcHRlciBvciBwcmV2aW91cyBjaGFwdGVyCisrPC9URD4KKys8VEQ+CisrMQorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbIFVwIF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrVXAKKys8L1REPgorKzxURD4KKyt1cCBzZWN0aW9uCisrPC9URD4KKys8VEQ+CisrMS4yCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgJmd0OyZndDsgXSA8L1REPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKytGYXN0Rm9yd2FyZAorKzwvVEQ+CisrPFREPgorK25leHQgY2hhcHRlcgorKzwvVEQ+CisrPFREPgorKzIKKys8L1REPgorKzwvVFI+CisrPFRSPgorKzxURCBBTElHTj0iQ0VOVEVSIj4KKysgW1RvcF0gPC9URD4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrVG9wCisrPC9URD4KKys8VEQ+CisrY292ZXIgKHRvcCkgb2YgZG9jdW1lbnQKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbQ29udGVudHNdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0NvbnRlbnRzCisrPC9URD4KKys8VEQ+CisrdGFibGUgb2YgY29udGVudHMKKys8L1REPgorKzxURD4KKysgJm5ic3A7IAorKzwvVEQ+CisrPC9UUj4KKys8VFI+CisrPFREIEFMSUdOPSJDRU5URVIiPgorKyBbSW5kZXhdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0luZGV4CisrPC9URD4KKys8VEQ+CisrY29uY2VwdCBpbmRleAorKzwvVEQ+CisrPFREPgorKyAmbmJzcDsgCisrPC9URD4KKys8L1RSPgorKzxUUj4KKys8VEQgQUxJR049IkNFTlRFUiI+CisrIFsgPyBdIDwvVEQ+CisrPFREIEFMSUdOPSJDRU5URVIiPgorK0Fib3V0CisrPC9URD4KKys8VEQ+CisrdGhpcyBwYWdlCisrPC9URD4KKys8VEQ+CisrICZuYnNwOyAKKys8L1REPgorKzwvVFI+CisrPC9UQUJMRT4KKysgICAgPFA+CisrICAgICAgd2hlcmUgdGhlIDxTVFJPTkc+IEV4YW1wbGUgPC9TVFJPTkc+IGFzc3VtZXMgdGhhdCB0aGUgY3VycmVudCBwb3NpdGlvbgorKyAgICAgIGlzIGF0IDxTVFJPTkc+IFN1YnN1YnNlY3Rpb24gT25lLVR3by1UaHJlZSA8L1NUUk9ORz4gb2YgYSBkb2N1bWVudCBvZgorKyAgICAgIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOjwvUD4KKysgICAgPFVMPgorKyAgICAgIDxMST4gMS4gU2VjdGlvbiBPbmUKKysgICAgICAgIDxVTD4KKysgICAgICAgICAgPExJPjEuMSBTdWJzZWN0aW9uIE9uZS1PbmUKKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+Li4uPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8TEk+MS4yIFN1YnNlY3Rpb24gT25lLVR3bworKyAgICAgICAgICAgIDxVTD4KKysgICAgICAgICAgICAgIDxMST4xLjIuMSBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tT25lPC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuMiBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVHdvPC9MST4KKysgICAgICAgICAgICAgIDxMST4xLjIuMyBTdWJzdWJzZWN0aW9uIE9uZS1Ud28tVGhyZWUgJm5ic3A7ICZuYnNwOworKyAgICAgICAgICAgICAgICA8U1RST05HPiZsdDs9PSBDdXJyZW50IFBvc2l0aW9uIDwvU1RST05HPjwvTEk+CisrICAgICAgICAgICAgICA8TEk+MS4yLjQgU3Vic3Vic2VjdGlvbiBPbmUtVHdvLUZvdXI8L0xJPgorKyAgICAgICAgICAgIDwvVUw+CisrICAgICAgICAgIDwvTEk+CisrICAgICAgICAgIDxMST4xLjMgU3Vic2VjdGlvbiBPbmUtVGhyZWUKKysgICAgICAgICAgICA8VUw+CisrICAgICAgICAgICAgICA8TEk+Li4uPC9MST4KKysgICAgICAgICAgICA8L1VMPgorKyAgICAgICAgICA8L0xJPgorKyAgICAgICAgICA8TEk+MS40IFN1YnNlY3Rpb24gT25lLUZvdXI8L0xJPgorKyAgICAgICAgPC9VTD4KKysgICAgICA8L0xJPgorKyAgICA8L1VMPgorKworKzxIUiBTSVpFPTE+CisrPEJSPgorKzxGT05UIFNJWkU9Ii0xIj4KKytUaGlzIGRvY3VtZW50IHdhcyBnZW5lcmF0ZWQKKytieSA8ST5yb290PC9JPiBvbiA8ST5TZXB0ZW1iZXIsIDEgMjAwMzwvST4KKyt1c2luZyA8QSBIUkVGPSJodHRwOi8vdGV4aTJodG1sLmN2c2hvbWUub3JnIj48ST50ZXhpMmh0bWw8L0k+PC9BPgorKzwvRk9OVD4KKysKKys8L0JPRFk+CisrPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg2MjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZS5pbmMKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJUb29sIHRoYXQgbWVhc3VyZXMgQ1BVIHJlc291cmNlcyIKK0RFU0NSSVBUSU9OID0gInRpbWUgbWVhc3VyZXMgbWFueSBvZiB0aGUgQ1BVIHJlc291cmNlcywgc3VjaCBhcyB0aW1lIGFuZCBcCittZW1vcnksIHRoYXQgb3RoZXIgcHJvZ3JhbXMgdXNlLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90aW1lLyIKK1NFQ1RJT04gPSAidXRpbHMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjYTQzY2JjODQyYzIzMzZlODM1OTI2YzIxNjZjMjhiIgorCitpbmhlcml0IHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ0aW1lIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdGltZS90aW1lXzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmM1MzUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3RpbWUvdGltZV8xLjcuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB0aW1lLmluYworCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3RpbWUvdGltZS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly9kZWJpYW4ucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlMzhkMmI4YjM0YjFjYTI1OWNmN2IwNTNjYWFjMzJiMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMzdlYTc5YTI1M2JmODVhODVhZGEyZjdjNjMyYzE0ZTQ4MWE1ZmQyNjJhMzYyZjZmNGZkNThlNjg2MDE0OTZkIgorCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3R6Y29kZS90emNvZGUtbmF0aXZlXzIwMTVmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ODY1YTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpjb2RlL3R6Y29kZS1uYXRpdmVfMjAxNWYuYmIKQEAgLTAsMCArMSwyNSBAQAorIyBub3RlIHRoYXQgd2UgYWxsb3cgZm9yIHVzIHRvIHVzZSBkYXRhIGxhdGVyIHRoYW4gb3VyIGNvZGUgdmVyc2lvbgorIworREVTQ1JJUFRJT04gPSAidHpjb2RlLCB0aW1lem9uZSB6b25laW5mbyB1dGlscyAtLSB6aWMsIHpkdW1wLCB0enNlbGVjdCIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7V09SS0RJUn0vUkVBRE1FO21kNT1kMGZmOTNhNzNkZDViYzNjNmU3MjRiYjQzNDM3NjBmNiIKKworU1JDX1VSSSA9IiBmdHA6Ly9mdHAuaWFuYS5vcmcvdHovcmVsZWFzZXMvdHpjb2RlJHtQVn0udGFyLmd6O25hbWU9dHpjb2RlIFwKKyAgICAgICAgICAgZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6ZGF0YTIwMTVmLnRhci5nejtuYW1lPXR6ZGF0YSIKKworU1JDX1VSSVt0emNvZGUubWQ1c3VtXSA9ICIxOTU3OGQ0MzJiYThiOTJmNzM0MDZhMTdhOWJjMjY4ZCIKK1NSQ19VUklbdHpjb2RlLnNoYTI1NnN1bV0gPSAiMGM5NWUwYTQyYmI2MTE0MWY3OTBmNGY1ZjIwNGI5NTRkNzY1NGM4OTRhYTU0YTU5NGEyMTVkNmYzOGRlODRhZSIKK1NSQ19VUklbdHpkYXRhLm1kNXN1bV0gPSAiZTNiODI3MzJkMjBlOTczZTQ4YWYxYzZmMTNkZjlhMWQiCitTUkNfVVJJW3R6ZGF0YS5zaGEyNTZzdW1dID0gIjk1OWY4MWI1NDFlMDQyZWNiMTNjNTAwOTdkMjY0YWU5MmZmMDNhNTc5NzljNDc4ZGJjZjI0ZDVkYTI0MjUzMWQiCisKK1MgPSAiJHtXT1JLRElSfSIKKworaW5oZXJpdCBuYXRpdmUKKworZG9faW5zdGFsbCAoKSB7CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgemljICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHpkdW1wICR7RH0ke2JpbmRpcn0vCisgICAgICAgIGluc3RhbGwgLW0gNzU1IHR6c2VsZWN0ICR7RH0ke2JpbmRpcn0vCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC90emRhdGEvdHpkYXRhXzIwMTVmLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZGE0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdHpkYXRhL3R6ZGF0YV8yMDE1Zi5iYgpAQCAtMCwwICsxLDIwNyBAQAorREVTQ1JJUFRJT04gPSAiVGltZXpvbmUgZGF0YSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcyIKK1NFQ1RJT04gPSAiYmFzZSIKK0xJQ0VOU0UgPSAiUEQgJiBCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hc2lhO2JlZ2lubGluZT0yO2VuZGxpbmU9MzttZDU9OTk2YTk4MTE3NDdhYTQ4ZGI5MWVkMjM5ZTViMzU1YTEiCitERVBFTkRTID0gInR6Y29kZS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmlhbmEub3JnL3R6L3JlbGVhc2VzL3R6ZGF0YSR7UFZ9LnRhci5nejtuYW1lPXR6ZGF0YSIKKworU1JDX1VSSVt0emRhdGEubWQ1c3VtXSA9ICJlM2I4MjczMmQyMGU5NzNlNDhhZjFjNmYxM2RmOWExZCIKK1NSQ19VUklbdHpkYXRhLnNoYTI1NnN1bV0gPSAiOTU5ZjgxYjU0MWUwNDJlY2IxM2M1MDA5N2QyNjRhZTkyZmYwM2E1Nzk3OWM0NzhkYmNmMjRkNWRhMjQyNTMxZCIKKworaW5oZXJpdCBhbGxhcmNoCisKK1JDT05GTElDVFNfJHtQTn0gPSAidGltZXpvbmVzIHRpbWV6b25lLWFmcmljYSB0aW1lem9uZS1hbWVyaWNhIHRpbWV6b25lLWFudGFyY3RpY2EgXAorICAgICAgICAgICAgIHRpbWV6b25lLWFyY3RpYyB0aW1lem9uZS1hc2lhIHRpbWV6b25lLWF0bGFudGljIFwKKyAgICAgICAgICAgICB0aW1lem9uZS1hdXN0cmFsaWEgdGltZXpvbmUtZXVyb3BlIHRpbWV6b25lLWluZGlhbiBcCisgICAgICAgICAgICAgdGltZXpvbmUtaXNvMzE2Ni50YWIgdGltZXpvbmUtcGFjaWZpYyB0aW1lem9uZS16b25lLnRhYiIKKworUyA9ICIke1dPUktESVJ9IgorCitERUZBVUxUX1RJTUVaT05FID89ICJVbml2ZXJzYWwiCisKK1RaT05FUz0gImFmcmljYSBhbnRhcmN0aWNhIGFzaWEgYXVzdHJhbGFzaWEgZXVyb3BlIG5vcnRoYW1lcmljYSBzb3V0aGFtZXJpY2EgIFwKKyAgICAgICAgIGZhY3RvcnkgZXRjZXRlcmEgYmFja3dhcmQgc3lzdGVtdiBcCisgICAgICAgICIKKyMgcGFjaWZpY25ldyAKKworZG9fY29tcGlsZSAoKSB7CisgICAgICAgIGZvciB6b25lIGluICR7VFpPTkVTfTsgZG8gXAorICAgICAgICAgICAgJHtTVEFHSU5HX0JJTkRJUl9OQVRJVkV9L3ppYyAtZCAke1dPUktESVJ9JHtkYXRhZGlyfS96b25laW5mbyAtTCAvZGV2L251bGwgXAorICAgICAgICAgICAgICAgIC15ICR7U30veWVhcmlzdHlwZS5zaCAke1N9LyR7em9uZX0gOyBcCisgICAgICAgICAgICAke1NUQUdJTkdfQklORElSX05BVElWRX0vemljIC1kICR7V09SS0RJUn0ke2RhdGFkaXJ9L3pvbmVpbmZvL3Bvc2l4IC1MIC9kZXYvbnVsbCBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgICAgICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS96aWMgLWQgJHtXT1JLRElSfSR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQgLUwgJHtTfS9sZWFwc2Vjb25kcyBcCisgICAgICAgICAgICAgICAgLXkgJHtTfS95ZWFyaXN0eXBlLnNoICR7U30vJHt6b25lfSA7IFwKKyAgICAgICAgZG9uZQorfQorCitkb19pbnN0YWxsICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9LyRleGVjX3ByZWZpeCAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFBSICR7U30vJGV4ZWNfcHJlZml4ICR7RH0vCisgICAgICAgICMgbGliYyBpcyByZW1vdmluZyB6b25laW5mbyBmaWxlcyBmcm9tIHBhY2thZ2UKKyAgICAgICAgY3AgLXBQICIke1N9L3pvbmUudGFiIiAke0R9JHtkYXRhZGlyfS96b25laW5mbworICAgICAgICBjcCAtcFAgIiR7U30vaXNvMzE2Ni50YWIiICR7RH0ke2RhdGFkaXJ9L3pvbmVpbmZvCisKKyAgICAgICAgIyBJbnN0YWxsIGRlZmF1bHQgdGltZXpvbmUKKyAgICAgICAgaWYgWyAtZSAke0R9JHtkYXRhZGlyfS96b25laW5mby8ke0RFRkFVTFRfVElNRVpPTkV9IF07IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICAgICAgICAgIGVjaG8gJHtERUZBVUxUX1RJTUVaT05FfSA+ICR7RH0ke3N5c2NvbmZkaXJ9L3RpbWV6b25lCisgICAgICAgICAgICBsbiAtcyAke2RhdGFkaXJ9L3pvbmVpbmZvLyR7REVGQVVMVF9USU1FWk9ORX0gJHtEfSR7c3lzY29uZmRpcn0vbG9jYWx0aW1lCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJiZXJyb3IgIkRFRkFVTFRfVElNRVpPTkUgaXMgc2V0IHRvIGFuIGludmFsaWQgdmFsdWUuIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlldGNfbHQ9IiREJHtzeXNjb25mZGlyfS9sb2NhbHRpbWUiCisJc3JjPSIkRCR7c3lzY29uZmRpcn0vdGltZXpvbmUiCisKKwlpZiBbIC1lICR7c3JjfSBdIDsgdGhlbgorCQl0ej0kKHNlZCAtZSAnczojLio6OicgLWUgJ3M6W1s6c3BhY2U6XV0qOjpnJyAtZSAnL14kL2QnICIke3NyY30iKQorCWZpCisJCisJaWYgWyAteiAiJHt0en0iIF0gOyB0aGVuCisJCWV4aXQgMAorCWZpCisJCisJaWYgWyAhIC1lICIkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iIF0gOyB0aGVuCisJCWVjaG8gIllvdSBoYXZlIGFuIGludmFsaWQgVElNRVpPTkUgc2V0dGluZyBpbiAke3NyY30iCisJCWVjaG8gIllvdXIgJHtldGNfbHR9IGhhcyBiZWVuIHJlc2V0IHRvIFVuaXZlcnNhbDsgZW5qb3khIgorCQl0ej0iVW5pdmVyc2FsIgorCQllY2hvICJVcGRhdGluZyAke2V0Y19sdH0gd2l0aCAkRCR7ZGF0YWRpcn0vem9uZWluZm8vJHt0en0iCisJCWlmIFsgLUwgJHtldGNfbHR9IF0gOyB0aGVuCisJCQlybSAtZiAiJHtldGNfbHR9IgorCQlmaQorCQlsbiAtcyAiJHtkYXRhZGlyfS96b25laW5mby8ke3R6fSIgIiR7ZXRjX2x0fSIKKwlmaQorfQorCisjIFBhY2thZ2VzIHByaW1hcmlseSBvcmdhbml6ZWQgYnkgZGlyZWN0b3J5IHdpdGggYSBtYWpvciBjaXR5CisjIGluIG1vc3QgdGltZSB6b25lcyBpbiB0aGUgYmFzZSBwYWNrYWdlCisKK1BBQ0tBR0VTID0gInR6ZGF0YSB0emRhdGEtbWlzYyB0emRhdGEtcG9zaXggdHpkYXRhLXJpZ2h0IHR6ZGF0YS1hZnJpY2EgXAorICAgIHR6ZGF0YS1hbWVyaWNhcyB0emRhdGEtYW50YXJjdGljYSB0emRhdGEtYXJjdGljIHR6ZGF0YS1hc2lhIFwKKyAgICB0emRhdGEtYXRsYW50aWMgdHpkYXRhLWF1c3RyYWxpYSB0emRhdGEtZXVyb3BlIHR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtYWZyaWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FmcmljYS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hZnJpY2EgPSAidHpkYXRhLWFmcmljYSIKKworRklMRVNfdHpkYXRhLWFtZXJpY2FzICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FtZXJpY2EvKiAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vVVMvKiAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9CcmF6aWwvKiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0NhbmFkYS8qICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vTWV4aWNvLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DaGlsZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1hbWVyaWNhcyA9ICJ0emRhdGEtYW1lcmljYXMiCisKK0ZJTEVTX3R6ZGF0YS1hbnRhcmN0aWNhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FudGFyY3RpY2EvKiIKK1JQUk9WSURFU190emRhdGEtYW50YXJjdGljYSA9ICJ0emRhdGEtYW50YXJjdGljYSIKKworRklMRVNfdHpkYXRhLWFyY3RpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BcmN0aWMvKiIKK1JQUk9WSURFU190emRhdGEtYXJjdGljID0gInR6ZGF0YS1hcmN0aWMiCisKK0ZJTEVTX3R6ZGF0YS1hc2lhICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0FzaWEvKiAgICAgICAgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vem9uZWluZm8vSW5kaWFuLyogICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NaWRlYXN0LyoiCitSUFJPVklERVNfdHpkYXRhLWFzaWEgPSAidHpkYXRhLWFzaWEiCisKK0ZJTEVTX3R6ZGF0YS1hdGxhbnRpYyArPSAiJHtkYXRhZGlyfS96b25laW5mby9BdGxhbnRpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1hdGxhbnRpYyA9ICJ0emRhdGEtYXRsYW50aWMiCisKK0ZJTEVTX3R6ZGF0YS1hdXN0cmFsaWEgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vQXVzdHJhbGlhLyoiCitSUFJPVklERVNfdHpkYXRhLWF1c3RyYWxpYSA9ICJ0emRhdGEtYXVzdHJhbGlhIgorCitGSUxFU190emRhdGEtZXVyb3BlICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0V1cm9wZS8qIgorUlBST1ZJREVTX3R6ZGF0YS1ldXJvcGUgPSAidHpkYXRhLWV1cm9wZSIKKworRklMRVNfdHpkYXRhLXBhY2lmaWMgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vUGFjaWZpYy8qIgorUlBST1ZJREVTX3R6ZGF0YS1wYWNpZmljID0gInR6ZGF0YS1wYWNpZmljIgorCitGSUxFU190emRhdGEtcG9zaXggKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcG9zaXgvKiIKK1JQUk9WSURFU190emRhdGEtcG9zaXggPSAidHpkYXRhLXBvc2l4IgorCitGSUxFU190emRhdGEtcmlnaHQgKz0gIiR7ZGF0YWRpcn0vem9uZWluZm8vcmlnaHQvKiIKK1JQUk9WSURFU190emRhdGEtcmlnaHQgPSAidHpkYXRhLXJpZ2h0IgorCisKK0ZJTEVTX3R6ZGF0YS1taXNjICs9ICIke2RhdGFkaXJ9L3pvbmVpbmZvL0N1YmEgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VneXB0ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0VpcmUgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ZhY3RvcnkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0dCLUVpcmUgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0hvbmdrb25nICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0ljZWxhbmQgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lyYW4gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0lzcmFlbCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phbWFpY2EgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0phcGFuICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0t3YWphbGVpbiAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL0xpYnlhICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL05hdmFqbyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvbGFuZCAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1BvcnR1Z2FsICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1NpbmdhcG9yZSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3pvbmVpbmZvL1R1cmtleSIKK1JQUk9WSURFU190emRhdGEtbWlzYyA9ICJ0emRhdGEtbWlzYyIKKworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL0hvbm9sdWx1ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0FuY2hvcmFnZSAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0xvc19BbmdlbGVzICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0RlbnZlciAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NoaWNhZ28gICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL05ld19Zb3JrICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL0NhcmFjYXMgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BbWVyaWNhL1Nhb19QYXVsbyAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTG9uZG9uICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvUGFyaXMgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BZnJpY2EvQ2Fpcm8gICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdXJvcGUvTW9zY293ICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0R1YmFpICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0thcmFjaGkgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0RoYWthICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0JhbmtvayAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL0hvbmdfS29uZyAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Bc2lhL1Rva3lvICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvRGFyd2luICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQWRlbGFpZGUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvQnJpc2JhbmUgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9BdXN0cmFsaWEvU3lkbmV5ICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QYWNpZmljL05vdW1lYSAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9DU1Q2Q0RUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FU1Q1RURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HQiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQrMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQtMCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HTVQwICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9HcmVlbndpY2ggICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9IU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9NU1Q3TURUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWiAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9OWi1DSEFUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QUkMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9QU1Q4UERUICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0MgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9ST0sgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VQ1QgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9VVEMgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9Vbml2ZXJzYWwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XLVNVICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9XRVQgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9adWx1ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby96b25lLnRhYiAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9pc28zMTY2LnRhYiAgICAgICAgICBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS96b25laW5mby9FdGMvKiIKKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3RpbWV6b25lICR7c3lzY29uZmRpcn0vbG9jYWx0aW1lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJhM2MxZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wNi11bnppcDYwLWFsdC1pY29udi11dGY4X0NWRS0yMDE1LTEzMTUucGF0Y2gKQEAgLTAsMCArMSw0MDIgQEAKK0Zyb206IEdpb3Zhbm5pIFNjYWZvcmEgPGdpb3Zhbm5pLmFyY2hsaW51eC5vcmc+CitTdWJqZWN0OiB1bnppcCBmaWxlcyBlbmNvZGVkIHdpdGggbm9uLWxhdGluLCBub24tdW5pY29kZSBmaWxlIG5hbWVzCitMYXN0LVVwZGF0ZTogMjAxNS0wMi0xMQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1VwZGF0ZWQgMjAxNS0wMi0xMSBieSBNYXJjIERlc2xhdXJpZXJzIDxtYXJjLmRlc2xhdXJpZXJzQGNhbm9uaWNhbC5jb20+Cit0byBmaXggYnVmZmVyIG92ZXJmbG93IGluIGNoYXJzZXRfdG9faW50ZXJuKCkKKworU2lnbmVkLW9mZi1ieTogTWFyYyBEZXNsYXVyaWVycyA8bWFyYy5kZXNsYXVyaWVyc0BjYW5vbmljYWwuY29tPgorCitJbmRleDogdW56aXAtNi4wL3VuaXgvdW5peC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW5peC91bml4LmMJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKKysrKyB1bnppcC02LjAvdW5peC91bml4LmMJMjAxNS0wMi0xMSAwOToxODowNC45MDIwODEzMTkgLTA1MDAKK0BAIC0zMCw2ICszMCw5IEBACisgI2RlZmluZSBVTlpJUF9JTlRFUk5BTAorICNpbmNsdWRlICJ1bnppcC5oIgorIAorKyNpbmNsdWRlIDxpY29udi5oPgorKyNpbmNsdWRlIDxsYW5naW5mby5oPgorKworICNpZmRlZiBTQ09fWEVOSVgKKyAjICBkZWZpbmUgU1lTTkRJUgorICNlbHNlICAvKiBTQ08gVW5peCwgQUlYLCBETklYLCBUSSBTeXNWLCBDb2hlcmVudCA0LngsIC4uLiAqLworQEAgLTE4NzQsMyArMTg3NywxMDIgQEAKKyAgICAgfQorIH0KKyAjZW5kaWYgLyogUUxaSVAgKi8KKysKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrICAgIGNoYXIgKmFyY2hpdmVfY2hhcnNldDsKKyt9IENIQVJTRVRfTUFQOworKworKy8qIEEgbWFwcGluZyBvZiBsb2NhbCA8LT4gYXJjaGl2ZSBjaGFyc2V0cyB1c2VkIGJ5IGRlZmF1bHQgdG8gY29udmVydCBmaWxlbmFtZXMKKysgKiBvZiBET1MvV2luZG93cyBaaXAgYXJjaGl2ZXMuIEN1cnJlbnRseSB2ZXJ5IGJhc2ljLiAqLworK3N0YXRpYyBDSEFSU0VUX01BUCBkb3NfY2hhcnNldF9tYXBbXSA9IHsKKysgICAgeyAiQU5TSV9YMy40LTE5NjgiLCAiQ1A4NTAiIH0sCisrICAgIHsgIklTTy04ODU5LTEiLCAiQ1A4NTAiIH0sCisrICAgIHsgIkNQMTI1MiIsICJDUDg1MCIgfSwKKysgICAgeyAiVVRGLTgiLCAiQ1A4NjYiIH0sCisrICAgIHsgIktPSTgtUiIsICJDUDg2NiIgfSwKKysgICAgeyAiS09JOC1VIiwgIkNQODY2IiB9LAorKyAgICB7ICJJU08tODg1OS01IiwgIkNQODY2IiB9CisrfTsKKysKKytjaGFyIE9FTV9DUFtNQVhfQ1BfTkFNRV0gPSAiIjsKKytjaGFyIElTT19DUFtNQVhfQ1BfTkFNRV0gPSAiIjsKKysKKysvKiBUcnkgdG8gZ3Vlc3MgdGhlIGRlZmF1bHQgdmFsdWUgb2YgT0VNX0NQIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvY2FsZS4KKysgKiBJU09fQ1AgaXMgbGVmdCBhbG9uZSBmb3Igbm93LiAqLworK3ZvaWQgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKCkKKyt7CisrICAgIGNvbnN0IGNoYXIgKmxvY2FsX2NoYXJzZXQ7CisrICAgIGludCBpOworKworKyAgICAvKiBNYWtlIGEgZ3Vlc3Mgb25seSBpZiBPRU1fQ1Agbm90IGFscmVhZHkgc2V0LiAqLyAKKysgICAgaWYoKk9FTV9DUCA9PSAnXDAnKSB7CisrICAgIAlsb2NhbF9jaGFyc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisrICAgIAlmb3IoaSA9IDA7IGkgPCBzaXplb2YoZG9zX2NoYXJzZXRfbWFwKS9zaXplb2YoQ0hBUlNFVF9NQVApOyBpKyspCisrICAgIAkJaWYoIXN0cmNhc2VjbXAobG9jYWxfY2hhcnNldCwgZG9zX2NoYXJzZXRfbWFwW2ldLmxvY2FsX2NoYXJzZXQpKSB7CisrICAgIAkJCXN0cm5jcHkoT0VNX0NQLCBkb3NfY2hhcnNldF9tYXBbaV0uYXJjaGl2ZV9jaGFyc2V0LAorKyAgICAJCQkJCXNpemVvZihPRU1fQ1ApKTsKKysgICAgCQkJYnJlYWs7CisrICAgIAkJfQorKyAgICB9CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBvbmUgZW5jb2RpbmcgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIHVzaW5nIGljb252KCkuCisrICogQmUgYXMgbm9uLWludHJ1c2l2ZSBhcyBwb3NzaWJsZS4gSWYgZXJyb3IgaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvdmVydGlvbgorKyAqIGp1c3QgbGVhdmUgdGhlIHN0cmluZyBpbnRhY3QuICovCisrc3RhdGljIHZvaWQgY2hhcnNldF90b19pbnRlcm4oY2hhciAqc3RyaW5nLCBjaGFyICpmcm9tX2NoYXJzZXQpCisreworKyAgICBpY29udl90IGNkOworKyAgICBjaGFyICpzLCpkLCAqYnVmOworKyAgICBzaXplX3Qgc2xlbiwgZGxlbiwgYnVmbGVuOworKyAgICBjb25zdCBjaGFyICpsb2NhbF9jaGFyc2V0OworKworKyAgICBpZigqZnJvbV9jaGFyc2V0ID09ICdcMCcpCisrICAgIAlyZXR1cm47CisrCisrICAgIGJ1ZiA9IE5VTEw7CisrICAgIGxvY2FsX2NoYXJzZXQgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKKysKKysgICAgaWYoKGNkID0gaWNvbnZfb3Blbihsb2NhbF9jaGFyc2V0LCBmcm9tX2NoYXJzZXQpKSA9PSAoaWNvbnZfdCktMSkKKysgICAgICAgIHJldHVybjsKKysKKysgICAgc2xlbiA9IHN0cmxlbihzdHJpbmcpOworKyAgICBzID0gc3RyaW5nOworKworKyAgICAvKiAgTWFrZSBzdXJlIE9VVEJVRlNJWiArIDEgbmV2ZXIgZW5kcyB1cCBzbWFsbGVyIHRoYW4gRklMTkFNU0laCisrICAgICAqICBhcyB0aGlzIGZ1bmN0aW9uIGFsc28gZ2V0cyBjYWxsZWQgd2l0aCBHLm91dGJ1ZiBpbiBmaWxlaW8uYworKyAgICAgKi8KKysgICAgYnVmbGVuID0gRklMTkFNU0laOworKyAgICBpZiAoT1VUQlVGU0laICsgMSA8IEZJTE5BTVNJWikKKysgICAgeworKyAgICAgICAgYnVmbGVuID0gT1VUQlVGU0laICsgMTsKKysgICAgfQorKworKyAgICBkID0gYnVmID0gbWFsbG9jKGJ1Zmxlbik7CisrICAgIGlmKCFkKQorKyAgICAJZ290byBjbGVhbnVwOworKworKyAgICBiemVybyhidWYsYnVmbGVuKTsKKysgICAgZGxlbiA9IGJ1ZmxlbiAtIDE7CisrCisrICAgIGlmKGljb252KGNkLCAmcywgJnNsZW4sICZkLCAmZGxlbikgPT0gKHNpemVfdCktMSkKKysgICAgCWdvdG8gY2xlYW51cDsKKysgICAgc3RybmNweShzdHJpbmcsIGJ1ZiwgYnVmbGVuKTsKKysKKysgICAgY2xlYW51cDoKKysgICAgZnJlZShidWYpOworKyAgICBpY29udl9jbG9zZShjZCk7CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBPRU1fQ1AgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGNoYXJzZXQuICovCisraW5saW5lIHZvaWQgb2VtX2ludGVybihjaGFyICpzdHJpbmcpCisreworKyAgICBjaGFyc2V0X3RvX2ludGVybihzdHJpbmcsIE9FTV9DUCk7CisrfQorKworKy8qIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBJU09fQ1AgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGNoYXJzZXQuICovCisraW5saW5lIHZvaWQgaXNvX2ludGVybihjaGFyICpzdHJpbmcpCisreworKyAgICBjaGFyc2V0X3RvX2ludGVybihzdHJpbmcsIElTT19DUCk7CisrfQorSW5kZXg6IHVuemlwLTYuMC91bml4L3VueGNmZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW5peC91bnhjZmcuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bml4L3VueGNmZy5oCTIwMTUtMDItMTEgMDg6NDY6NDMuNjcxMzI0MjYwIC0wNTAwCitAQCAtMjI4LDQgKzIyOCwzMCBAQAorIC8qIHdpbGRfZGlyLCBkaXJuYW1lLCB3aWxkbmFtZSwgbWF0Y2huYW1lW10sIGRpcm5hbWVsZW4sIGhhdmVfZGlybmFtZSwgKi8KKyAvKiAgICBhbmQgbm90Zmlyc3RjYWxsIGFyZSB1c2VkIGJ5IGRvX3dpbGQoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgCisrCisrI2RlZmluZSBNQVhfQ1BfTkFNRSAyNSAKKysgICAKKysjaWZkZWYgU0VUTE9DQUxFCisrIyAgdW5kZWYgU0VUTE9DQUxFCisrI2VuZGlmCisrI2RlZmluZSBTRVRMT0NBTEUoY2F0ZWdvcnksIGxvY2FsZSkgc2V0bG9jYWxlKGNhdGVnb3J5LCBsb2NhbGUpCisrI2luY2x1ZGUgPGxvY2FsZS5oPgorKyAgIAorKyNpZmRlZiBfSVNPX0lOVEVSTgorKyMgIHVuZGVmIF9JU09fSU5URVJOCisrI2VuZGlmCisrI2RlZmluZSBfSVNPX0lOVEVSTihzdHIxKSBpc29faW50ZXJuKHN0cjEpCisrCisrI2lmZGVmIF9PRU1fSU5URVJOCisrIyAgdW5kZWYgX09FTV9JTlRFUk4KKysjZW5kaWYKKysjaWZuZGVmIElaX09FTTJJU09fQVJSQVkKKysjICBkZWZpbmUgSVpfT0VNMklTT19BUlJBWQorKyNlbmRpZgorKyNkZWZpbmUgX09FTV9JTlRFUk4oc3RyMSkgb2VtX2ludGVybihzdHIxKQorKworK3ZvaWQgaXNvX2ludGVybihjaGFyICopOworK3ZvaWQgb2VtX2ludGVybihjaGFyICopOworK3ZvaWQgaW5pdF9jb252ZXJzaW9uX2NoYXJzZXRzKHZvaWQpOworKyAgIAorICNlbmRpZiAvKiAhX191bnhjZmdfaCAqLworSW5kZXg6IHVuemlwLTYuMC91bnppcC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvdW56aXAuYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bnppcC5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCitAQCAtMzI3LDExICszMjcsMjEgQEAKKyAgIC0yICBqdXN0IGZpbGVuYW1lcyBidXQgYWxsb3cgLWgvLXQvLXogIC1sICBsb25nIFVuaXggXCJscyAtbFwiIGZvcm1hdFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXYgIHZlcmJvc2UsIG11bHRpLXBhZ2UgZm9ybWF0XG4iOworIAorKyNpZm5kZWYgVU5JWAorIHN0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTNbXSA9ICJtaXNjZWxsYW5lb3VzIG9wdGlvbnM6XG5cCisgICAtaCAgcHJpbnQgaGVhZGVyIGxpbmUgICAgICAgLXQgIHByaW50IHRvdGFscyBmb3IgbGlzdGVkIGZpbGVzIG9yIGZvciBhbGxcblwKKyAgIC16ICBwcmludCB6aXBmaWxlIGNvbW1lbnQgICAtVCAgcHJpbnQgZmlsZSB0aW1lcyBpbiBzb3J0YWJsZSBkZWNpbWFsIGZvcm1hdFwKKyBcbiAgLUMgIGJlIGNhc2UtaW5zZW5zaXRpdmUgICAlc1wKKyAgIC14ICBleGNsdWRlIGZpbGVuYW1lcyB0aGF0IGZvbGxvdyBmcm9tIGxpc3RpbmdcbiI7CisrI2Vsc2UgLyogVU5JWCAqLworK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgWmlwSW5mb1VzYWdlTGluZTNbXSA9ICJtaXNjZWxsYW5lb3VzIG9wdGlvbnM6XG5cCisrICAtaCAgcHJpbnQgaGVhZGVyIGxpbmUgICAgICAgLXQgIHByaW50IHRvdGFscyBmb3IgbGlzdGVkIGZpbGVzIG9yIGZvciBhbGxcblwKKysgIC16ICBwcmludCB6aXBmaWxlIGNvbW1lbnQgICVjLVQlYyBwcmludCBmaWxlIHRpbWVzIGluIHNvcnRhYmxlIGRlY2ltYWwgZm9ybWF0XAorK1xuICVjLUMlYyBiZSBjYXNlLWluc2Vuc2l0aXZlICAgJXNcCisrICAteCAgZXhjbHVkZSBmaWxlbmFtZXMgdGhhdCBmb2xsb3cgZnJvbSBsaXN0aW5nXG5cCisrICAtTyBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBET1MsIFdpbmRvd3MgYW5kIE9TLzIgYXJjaGl2ZXNcblwKKysgIC1JIENIQVJTRVQgIHNwZWNpZnkgYSBjaGFyYWN0ZXIgZW5jb2RpbmcgZm9yIFVOSVggYW5kIG90aGVyIGFyY2hpdmVzXG4iOworKyNlbmRpZiAvKiAhVU5JWCAqLworICNpZmRlZiBNT1JFCisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBaaXBJbmZvVXNhZ2VMaW5lNFtdID0KKyAgICAgICIgIC1NICBwYWdlIG91dHB1dCB0aHJvdWdoIGJ1aWx0LWluIFwibW9yZVwiXG4iOworQEAgLTY2NCw2ICs2NzQsMTcgQEAKKyAgIC1VICB1c2UgZXNjYXBlcyBmb3IgYWxsIG5vbi1BU0NJSSBVbmljb2RlICAtVVUgaWdub3JlIGFueSBVbmljb2RlIGZpZWxkc1xuXAorICAgLUMgIG1hdGNoIGZpbGVuYW1lcyBjYXNlLWluc2Vuc2l0aXZlbHkgICAgIC1MICBtYWtlIChzb21lKSBuYW1lcyBcCisgbG93ZXJjYXNlXG4gJS00MnMgIC1WICByZXRhaW4gVk1TIHZlcnNpb24gbnVtYmVyc1xuJXMiOworKyNlbGlmIChkZWZpbmVkIFVOSVgpCisrc3RhdGljIFpDT05TVCBjaGFyIEZhciBVbnppcFVzYWdlTGluZTRbXSA9ICJcCisrbW9kaWZpZXJzOlxuXAorKyAgLW4gIG5ldmVyIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyAgICAgICAgIC1xICBxdWlldCBtb2RlICgtcXEgPT4gcXVpZXRlcilcblwKKysgIC1vICBvdmVyd3JpdGUgZmlsZXMgV0lUSE9VVCBwcm9tcHRpbmcgICAgICAtYSAgYXV0by1jb252ZXJ0IGFueSB0ZXh0IGZpbGVzXG5cCisrICAtaiAganVuayBwYXRocyAoZG8gbm90IG1ha2UgZGlyZWN0b3JpZXMpICAgLWFhIHRyZWF0IEFMTCBmaWxlcyBhcyB0ZXh0XG5cCisrICAtVSAgdXNlIGVzY2FwZXMgZm9yIGFsbCBub24tQVNDSUkgVW5pY29kZSAgLVVVIGlnbm9yZSBhbnkgVW5pY29kZSBmaWVsZHNcblwKKysgIC1DICBtYXRjaCBmaWxlbmFtZXMgY2FzZS1pbnNlbnNpdGl2ZWx5ICAgICAtTCAgbWFrZSAoc29tZSkgbmFtZXMgXAorK2xvd2VyY2FzZVxuICUtNDJzICAtViAgcmV0YWluIFZNUyB2ZXJzaW9uIG51bWJlcnNcbiVzXAorKyAgLU8gQ0hBUlNFVCAgc3BlY2lmeSBhIGNoYXJhY3RlciBlbmNvZGluZyBmb3IgRE9TLCBXaW5kb3dzIGFuZCBPUy8yIGFyY2hpdmVzXG5cCisrICAtSSBDSEFSU0VUICBzcGVjaWZ5IGEgY2hhcmFjdGVyIGVuY29kaW5nIGZvciBVTklYIGFuZCBvdGhlciBhcmNoaXZlc1xuXG4iOworICNlbHNlIC8qICFWTVMgKi8KKyBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFVuemlwVXNhZ2VMaW5lNFtdID0gIlwKKyBtb2RpZmllcnM6XG5cCitAQCAtODAyLDYgKzgyMywxMCBAQAorICNlbmRpZiAvKiBVTklDT0RFX1NVUFBPUlQgKi8KKyAKKyAKKysjaWZkZWYgVU5JWAorKyAgICBpbml0X2NvbnZlcnNpb25fY2hhcnNldHMoKTsKKysjZW5kaWYKKysKKyAjaWYgKGRlZmluZWQoX19JQk1DX18pICYmIGRlZmluZWQoX19ERUJVR19BTExPQ19fKSkKKyAgICAgZXh0ZXJuIHZvaWQgRGVidWdNYWxsb2Modm9pZCk7CisgCitAQCAtMTMzNSw2ICsxMzYwLDExIEBACisgICAgIGFyZ2MgPSAqcGFyZ2M7CisgICAgIGFyZ3YgPSAqcGFyZ3Y7CisgCisrI2lmZGVmIFVOSVgKKysgICAgZXh0ZXJuIGNoYXIgT0VNX0NQW01BWF9DUF9OQU1FXTsKKysgICAgZXh0ZXJuIGNoYXIgSVNPX0NQW01BWF9DUF9OQU1FXTsKKysjZW5kaWYKKysgICAgCisgICAgIHdoaWxlICgrK2FyZ3YsICgtLWFyZ2MgPiAwICYmICphcmd2ICE9IE5VTEwgJiYgKiphcmd2ID09ICctJykpIHsKKyAgICAgICAgIHMgPSAqYXJndiArIDE7CisgICAgICAgICB3aGlsZSAoKGMgPSAqcysrKSAhPSAwKSB7ICAgIC8qICIhPSAwIjogIHByZXZlbnQgVHVyYm8gQyB3YXJuaW5nICovCitAQCAtMTUxNiw2ICsxNTQ2LDM1IEBACisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAjZW5kaWYgIC8qIE1BQ09TICovCisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ0knKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLUljaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1JIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgKCdqJyk6ICAgIC8qIGp1bmsgcGF0aG5hbWVzL2RpcmVjdG9yeSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5qZmxhZyA9IEZBTFNFLCBuZWdhdGl2ZSA9IDA7CitAQCAtMTU5MSw2ICsxNjUwLDM1IEBACisgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICArK3VPLm92ZXJ3cml0ZV9hbGw7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnTycpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtT2NoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLU8gY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1PIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAoJ3AnKTogICAgLyogcGlwZXM6ICBleHRyYWN0IHRvIHN0ZG91dCwgbm8gbWVzc2FnZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgIHVPLmNmbGFnID0gRkFMU0U7CitJbmRleDogdW56aXAtNi4wL3VuenByaXYuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHVuemlwLTYuMC5vcmlnL3VuenByaXYuaAkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorKysrIHVuemlwLTYuMC91bnpwcml2LmgJMjAxNS0wMi0xMSAwODo0Njo0My42NzUzMjQyOTAgLTA1MDAKK0BAIC0zMDA4LDcgKzMwMDgsNyBAQAorICAgICAgICAgICEoKChpc2xvY2hkcikgfHwgKGlzdXhhdHQpKSAmJiBcCisgICAgICAgICAgICAoKGhvc3R2ZXIpID09IDI1IHx8IChob3N0dmVyKSA9PSAyNiB8fCAoaG9zdHZlcikgPT0gNDApKSkgfHwgXAorICAgICAgICAgKGhvc3RudW0pID09IEZTX0hQRlNfIHx8IFwKKy0gICAgICAgICgoaG9zdG51bSkgPT0gRlNfTlRGU18gJiYgKGhvc3R2ZXIpID09IDUwKSkgeyBcCisrICAgICAgICAoKGhvc3RudW0pID09IEZTX05URlNfIC8qICYmIChob3N0dmVyKSA9PSA1MCAqLyApKSB7IFwKKyAgICAgICAgIF9PRU1fSU5URVJOKChzdHJpbmcpKTsgXAorICAgICB9IGVsc2UgeyBcCisgICAgICAgICBfSVNPX0lOVEVSTigoc3RyaW5nKSk7IFwKK0luZGV4OiB1bnppcC02LjAvemlwaW5mby5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gdW56aXAtNi4wLm9yaWcvemlwaW5mby5jCTIwMTUtMDItMTEgMDg6NDY6NDMuNjc1MzI0MjkwIC0wNTAwCisrKysgdW56aXAtNi4wL3ppcGluZm8uYwkyMDE1LTAyLTExIDA4OjQ2OjQzLjY3NTMyNDI5MCAtMDUwMAorQEAgLTQ1Nyw2ICs0NTcsMTAgQEAKKyAgICAgaW50ICAgIHRmbGFnX3NsbT1UUlVFLCB0ZmxhZ18ydj1GQUxTRTsKKyAgICAgaW50ICAgIGV4cGxpY2l0X2g9RkFMU0UsIGV4cGxpY2l0X3Q9RkFMU0U7CisgCisrI2lmZGVmIFVOSVgKKysgICAgZXh0ZXJuIGNoYXIgT0VNX0NQW01BWF9DUF9OQU1FXTsKKysgICAgZXh0ZXJuIGNoYXIgSVNPX0NQW01BWF9DUF9OQU1FXTsKKysjZW5kaWYKKyAKKyAjaWZkZWYgTUFDT1MKKyAgICAgdU8ubGZsYWcgPSBMRkxBRzsgICAgICAgICAvKiByZXNldCBkZWZhdWx0IG9uIGVhY2ggY2FsbCAqLworQEAgLTUwMSw2ICs1MDUsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisrI2lmZGVmIFVOSVgKKysgICAgCQkJY2FzZSAoJ0knKToKKysgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkgeworKyAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvcjogIGVuY29kaW5ncyBjYW4ndCBiZSBuZWdhdGVkIikpOworKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7CisrICAgIAkJCQl9IGVsc2UgeworKyAgICAJCQkJCWlmKCpzKSB7IC8qIEhhbmRsZSB0aGUgLUljaGFyc2V0IGNhc2UgKi8KKysgICAgCQkJCQkJLyogQXNzdW1lIHRoYXQgY2hhcnNldHMgY2FuJ3Qgc3RhcnQgd2l0aCBhIGRhc2ggdG8gc3BvdCBhcmd1bWVudHMgbWlzdXNlICovCisrICAgIAkJCQkJCWlmKCpzID09ICctJykgeyAKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIEluZm8oc2xpZGUsIDB4NDAxLCAoKGNoYXIgKilzbGlkZSwKKysgICAgICAgIAkJICAgICAgICAgICAgICAgICAgImVycm9yOiAgYSB2YWxpZCBjaGFyYWN0ZXIgZW5jb2Rpbmcgc2hvdWxkIGZvbGxvdyB0aGUgLUkgYXJndW1lbnQiKSk7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oUEtfUEFSQU0pOyAKKysgICAgCQkJCQkJfQorKyAgICAJCQkJCQlzdHJuY3B5KElTT19DUCwgcywgc2l6ZW9mKElTT19DUCkpOworKyAgICAJCQkJCX0gZWxzZSB7IC8qIC1JIGNoYXJzZXQgKi8KKysgICAgCQkJCQkJKythcmd2OworKyAgICAJCQkJCQlpZighKC0tYXJnYyA+IDAgJiYgKmFyZ3YgIT0gTlVMTCAmJiAqKmFyZ3YgIT0gJy0nKSkgeworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXMgPSAqYXJndjsKKysgICAgCQkJCQkJc3RybmNweShJU09fQ1AsIHMsIHNpemVvZihJU09fQ1ApKTsKKysgICAgCQkJCQl9CisrICAgIAkJCQkJd2hpbGUoKigrK3MpKTsgLyogTm8gcGFyYW1zIHN0cmFpZ2h0IGFmdGVyIGNoYXJzZXQgbmFtZSAqLworKyAgICAJCQkJfQorKyAgICAJCQkJYnJlYWs7CisrI2VuZGlmIC8qID9VTklYICovCisgICAgICAgICAgICAgICAgIGNhc2UgJ2wnOiAgICAgIC8qIGxvbmdlciBmb3JtIG9mICJscyAtbCIgdHlwZSBsaXN0aW5nICovCisgICAgICAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgICAgICAgICAgdU8ubGZsYWcgPSAtMiwgbmVnYXRpdmUgPSAwOworQEAgLTUyMSw2ICs1NTQsMzUgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICBHLk1fZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgVU5JWAorKyAgICAJCQljYXNlICgnTycpOgorKyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CisrICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yOiAgZW5jb2RpbmdzIGNhbid0IGJlIG5lZ2F0ZWQiKSk7CisrICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsKKysgICAgCQkJCX0gZWxzZSB7CisrICAgIAkJCQkJaWYoKnMpIHsgLyogSGFuZGxlIHRoZSAtT2NoYXJzZXQgY2FzZSAqLworKyAgICAJCQkJCQkvKiBBc3N1bWUgdGhhdCBjaGFyc2V0cyBjYW4ndCBzdGFydCB3aXRoIGEgZGFzaCB0byBzcG90IGFyZ3VtZW50cyBtaXN1c2UgKi8KKysgICAgCQkJCQkJaWYoKnMgPT0gJy0nKSB7IAorKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgCQkgICAgICAgICAgICAgICAgICAiZXJyb3I6ICBhIHZhbGlkIGNoYXJhY3RlciBlbmNvZGluZyBzaG91bGQgZm9sbG93IHRoZSAtSSBhcmd1bWVudCIpKTsKKysgICAgCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihQS19QQVJBTSk7IAorKyAgICAJCQkJCQl9CisrICAgIAkJCQkJCXN0cm5jcHkoT0VNX0NQLCBzLCBzaXplb2YoT0VNX0NQKSk7CisrICAgIAkJCQkJfSBlbHNlIHsgLyogLU8gY2hhcnNldCAqLworKyAgICAJCQkJCQkrK2FyZ3Y7CisrICAgIAkJCQkJCWlmKCEoLS1hcmdjID4gMCAmJiAqYXJndiAhPSBOVUxMICYmICoqYXJndiAhPSAnLScpKSB7CisrICAgIAkgICAgICAgICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAweDQwMSwgKChjaGFyICopc2xpZGUsCisrICAgICAgICAJCSAgICAgICAgICAgICAgICAgICJlcnJvcjogIGEgdmFsaWQgY2hhcmFjdGVyIGVuY29kaW5nIHNob3VsZCBmb2xsb3cgdGhlIC1PIGFyZ3VtZW50IikpOworKyAgICAJICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKFBLX1BBUkFNKTsgCisrICAgIAkJCQkJCX0KKysgICAgCQkJCQkJcyA9ICphcmd2OworKyAgICAJCQkJCQlzdHJuY3B5KE9FTV9DUCwgcywgc2l6ZW9mKE9FTV9DUCkpOworKyAgICAJCQkJCX0KKysgICAgCQkJCQl3aGlsZSgqKCsrcykpOyAvKiBObyBwYXJhbXMgc3RyYWlnaHQgYWZ0ZXIgY2hhcnNldCBuYW1lICovCisrICAgIAkJCQl9CisrICAgIAkJCQlicmVhazsKKysjZW5kaWYgLyogP1VOSVggKi8KKyAgICAgICAgICAgICAgICAgY2FzZSAncyc6ICAgICAgLyogZGVmYXVsdDogIHNob3J0ZXIgImxzIC1sIiB0eXBlIGxpc3RpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB1Ty5sZmxhZyA9IC0yLCBuZWdhdGl2ZSA9IDA7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMDktY3ZlLTIwMTQtODEzOS1jcmMtb3ZlcmZsb3cucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzN2YwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8wOS1jdmUtMjAxNC04MTM5LWNyYy1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tOiBzbXMKK1N1YmplY3Q6IEZpeCBDVkUtMjAxNC04MTM5OiBDUkMzMiB2ZXJpZmljYXRpb24gaGVhcC1iYXNlZCBvdmVyZmxvdworQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjk4LDYgKzI5OCw4IEBACisgI2lmbmRlZiBTRlgKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIEluY29uc2lzdEVGbGVuZ3RoW10gPSAiYmFkIGV4dHJhLWZpZWxkIGVudHJ5OlxuIFwKKyAgICAgIEVGIGJsb2NrIGxlbmd0aCAoJXUgYnl0ZXMpIGV4Y2VlZHMgcmVtYWluaW5nIEVGIGRhdGEgKCV1IGJ5dGVzKVxuIjsKKysgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIFRvb1NtYWxsRUJsZW5ndGhbXSA9ICJiYWQgZXh0cmEtZmllbGQgZW50cnk6XG4gXAorKyAgICAgRUYgYmxvY2sgbGVuZ3RoICgldSBieXRlcykgaW52YWxpZCAoPCAlZClcbiI7CisgICAgc3RhdGljIFpDT05TVCBjaGFyIEZhciBJbnZhbGlkQ29tcHJEYXRhRUFzW10gPQorICAgICAgIiBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBmb3IgRUFzXG4iOworICMgIGlmIChkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKE5UU0RfRUFTKSkKK0BAIC0yMDIzLDcgKzIwMjUsOCBAQAorICAgICAgICAgZWJJRCA9IG1ha2V3b3JkKGVmKTsKKyAgICAgICAgIGViTGVuID0gKHVuc2lnbmVkKW1ha2V3b3JkKGVmK0VCX0xFTik7CisgCistICAgICAgICBpZiAoZWJMZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKSB7CisrICAgICAgICBpZiAoZWJMZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKQorKyAgICAgICAgeworICAgICAgICAgICAgLyogRGlzY292ZXJlZCBzb21lIGV4dHJhIGZpZWxkIGluY29uc2lzdGVuY3khICovCisgICAgICAgICAgICAgaWYgKHVPLnFmbGFnKQorICAgICAgICAgICAgICAgICBJbmZvKHNsaWRlLCAxLCAoKGNoYXIgKilzbGlkZSwgIiUtMjJzICIsCitAQCAtMjE1OCwxMSArMjE2MSwxOSBAQAorICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIGNhc2UgRUZfUEtWTVM6CistICAgICAgICAgICAgICAgIGlmIChtYWtlbG9uZyhlZitFQl9IRUFEU0laRSkgIT0KKysgICAgICAgICAgICAgICAgaWYgKGViTGVuIDwgNCkKKysgICAgICAgICAgICAgICAgeworKyAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwKKysgICAgICAgICAgICAgICAgICAgICAoKGNoYXIgKilzbGlkZSwgTG9hZEZhclN0cmluZyhUb29TbWFsbEVCbGVuZ3RoKSwKKysgICAgICAgICAgICAgICAgICAgICBlYkxlbiwgNCkpOworKyAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1ha2Vsb25nKGVmK0VCX0hFQURTSVpFKSAhPQorICAgICAgICAgICAgICAgICAgICAgY3JjMzIoQ1JDVkFMX0lOSVRJQUwsIGVmKyhFQl9IRUFEU0laRSs0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHRlbnQpKGViTGVuLTQpKSkKKysgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMSwgKChjaGFyICopc2xpZGUsCisgICAgICAgICAgICAgICAgICAgICAgIExvYWRGYXJTdHJpbmcoQmFkQ1JDX0VBcykpKTsKKysgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICBjYXNlIEVGX1BLVzMyOgorICAgICAgICAgICAgIGNhc2UgRUZfUEtVTklYOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwLzEwLWN2ZS0yMDE0LTgxNDAtdGVzdC1jb21wci1lYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMC1jdmUtMjAxNC04MTQwLXRlc3QtY29tcHItZWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjN2Q1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMC1jdmUtMjAxNC04MTQwLXRlc3QtY29tcHItZWIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODE0MDogb3V0LW9mLWJvdW5kcyB3cml0ZSBpc3N1ZSBpbiB0ZXN0X2NvbXByX2ViKCkKK0J1Zy1EZWJpYW46IGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvNzczNzIyCisKK1RoZSBwYXRjaCBjb21lcyBmcm9tIHVuemlwXzYuMC04K2RlYjd1Mi5kZWJpYW4udGFyLmd6CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorCistLS0gYS9leHRyYWN0LmMKKysrKyBiL2V4dHJhY3QuYworQEAgLTIyMzIsMTAgKzIyMzIsMTcgQEAKKyAgICAgaWYgKGNvbXByX29mZnNldCA8IDQpICAgICAgICAgICAgICAgIC8qIGZpZWxkIGlzIG5vdCBjb21wcmVzc2VkOiAqLworICAgICAgICAgcmV0dXJuIFBLX09LOyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBhbmQgc2lnbmFsIE9LICovCisgCisrICAgIC8qIFJldHVybiBuby9iYWQtZGF0YSBlcnJvciBzdGF0dXMgaWYgYW55IHByb2JsZW0gaXMgZm91bmQ6CisrICAgICAqICAgIDEuIGViX3NpemUgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIHVuY29tcHJlc3NlZCBzaXplCisrICAgICAqICAgICAgIChlYl91Y3NpemUpLiAgKEVsc2UgZXh0cmFjdCBlYl91Y3NpemUuKQorKyAgICAgKiAgICAyLiBlYl91Y3NpemUgaXMgemVybyAoaW52YWxpZCkuICAyMDE0LTEyLTA0IFNNUy4KKysgICAgICogICAgMy4gZWJfdWNzaXplIGlzIHBvc2l0aXZlLCBidXQgZWJfc2l6ZSBpcyB0b28gc21hbGwgdG8gaG9sZAorKyAgICAgKiAgICAgICB0aGUgY29tcHJlc3NlZCBkYXRhIGhlYWRlci4KKysgICAgICovCisgICAgIGlmICgoZWJfc2l6ZSA8IChFQl9VQ1NJWkVfUCArIDQpKSB8fAorLSAgICAgICAgKChlYl91Y3NpemUgPSBtYWtlbG9uZyhlYisoRUJfSEVBRFNJWkUrRUJfVUNTSVpFX1ApKSkgPiAwTCAmJgorLSAgICAgICAgIGViX3NpemUgPD0gKGNvbXByX29mZnNldCArIEVCX0NNUFJIRUFETEVOKSkpCistICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgICAgLyogbm8gY29tcHJlc3NlZCBkYXRhISAqLworKyAgICAgKChlYl91Y3NpemUgPSBtYWtlbG9uZyggZWIrIChFQl9IRUFEU0laRSsgRUJfVUNTSVpFX1ApKSkgPT0gMEwpIHx8CisrICAgICAoKGViX3Vjc2l6ZSA+IDBMKSAmJiAoZWJfc2l6ZSA8PSAoY29tcHJfb2Zmc2V0ICsgRUJfQ01QUkhFQURMRU4pKSkpCisrICAgICAgICByZXR1cm4gSVpfRUZfVFJVTkM7ICAgICAgICAgICAgIC8qIG5vL2JhZCBjb21wcmVzc2VkIGRhdGEhICovCisgCisgICAgIGlmICgKKyAjaWZkZWYgSU5UXzE2QklUCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBjMWRiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC8xMS1jdmUtMjAxNC04MTQxLWdldHppcDY0ZGF0YS5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorRnJvbTogc21zCitTdWJqZWN0OiBGaXggQ1ZFLTIwMTQtODE0MTogb3V0LW9mLWJvdW5kcyByZWFkIGlzc3VlcyBpbiBnZXRaaXA2NERhdGEoKQorQnVnLURlYmlhbjogaHR0cDovL2J1Z3MuZGViaWFuLm9yZy83NzM3MjIKKworVGhlIHBhdGNoIGNvbWVzIGZyb20gdW56aXBfNi4wLTgrZGViN3UyLmRlYmlhbi50YXIuZ3oKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CisKKworLS0tIGEvZmlsZWlvLmMKKysrKyBiL2ZpbGVpby5jCitAQCAtMTc2LDYgKzE3Niw4IEBACisgI2VuZGlmCisgc3RhdGljIFpDT05TVCBjaGFyIEZhciBFeHRyYUZpZWxkVG9vTG9uZ1tdID0KKyAgICJ3YXJuaW5nOiAgZXh0cmEgZmllbGQgdG9vIGxvbmcgKCVkKS4gIElnbm9yaW5nLi4uXG4iOworK3N0YXRpYyBaQ09OU1QgY2hhciBGYXIgRXh0cmFGaWVsZENvcnJ1cHRbXSA9CisrICAid2FybmluZzogIGV4dHJhIGZpZWxkICh0eXBlOiAweCUwNHgpIGNvcnJ1cHQuICBDb250aW51aW5nLi4uXG4iOworIAorICNpZmRlZiBXSU5ETEwKKyAgICBzdGF0aWMgWkNPTlNUIGNoYXIgRmFyIERpc2tGdWxsUXVlcnlbXSA9CitAQCAtMjI5NSw3ICsyMjk3LDEyIEBACisgICAgICAgICAgICAgaWYgKHJlYWRidWYoX19HX18gKGNoYXIgKilHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpID09IDApCisgICAgICAgICAgICAgICAgIHJldHVybiBQS19FT0Y7CisgICAgICAgICAgICAgLyogTG9va3MgbGlrZSBoZXJlIGlzIHdoZXJlIGV4dHJhIGZpZWxkcyBhcmUgcmVhZCAqLworLSAgICAgICAgICAgIGdldFppcDY0RGF0YShfX0dfXyBHLmV4dHJhX2ZpZWxkLCBsZW5ndGgpOworKyAgICAgICAgICAgIGlmIChnZXRaaXA2NERhdGEoX19HX18gRy5leHRyYV9maWVsZCwgbGVuZ3RoKSAhPSBQS19DT09MKQorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgSW5mbyhzbGlkZSwgMHg0MDEsICgoY2hhciAqKXNsaWRlLAorKyAgICAgICAgICAgICAgICAgTG9hZEZhclN0cmluZyggRXh0cmFGaWVsZENvcnJ1cHQpLCBFRl9QS1NaNjQpKTsKKysgICAgICAgICAgICAgICAgZXJyb3IgPSBQS19XQVJOOworKyAgICAgICAgICAgIH0KKyAjaWZkZWYgVU5JQ09ERV9TVVBQT1JUCisgICAgICAgICAgICAgRy51bmlwYXRoX2ZpbGVuYW1lID0gTlVMTDsKKyAgICAgICAgICAgICBpZiAoRy5Vek8uVV9mbGFnIDwgMikgeworLS0tIGEvcHJvY2Vzcy5jCisrKysgYi9wcm9jZXNzLmMKK0BAIC0xLDUgKzEsNSBAQAorIC8qCistICBDb3B5cmlnaHQgKGMpIDE5OTAtMjAwOSBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICBDb3B5cmlnaHQgKGMpIDE5OTAtMjAxNCBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgICBTZWUgdGhlIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0UsIHZlcnNpb24gMjAwOS1KYW4tMDIgb3IgbGF0ZXIKKyAgICh0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlIGFsc28gaW5jbHVkZWQgaW4gdW56aXAuaCkgZm9yIHRlcm1zIG9mIHVzZS4KK0BAIC0xOTAxLDQ4ICsxOTAxLDgyIEBACisgICAgIGFuZCBhIDQtYnl0ZSB2ZXJzaW9uIG9mIGRpc2sgc3RhcnQgbnVtYmVyLgorICAgICBTZXRzIGJvdGggbG9jYWwgaGVhZGVyIGFuZCBjZW50cmFsIGhlYWRlciBmaWVsZHMuICBOb3QgdGVycmlibHkgY2xldmVyLAorICAgICBidXQgaXQgbWVhbnMgdGhhdCB0aGlzIHByb2NlZHVyZSBpcyBvbmx5IGNhbGxlZCBpbiBvbmUgcGxhY2UuCisrCisrICAgIDIwMTQtMTItMDUgU01TLgorKyAgICBBZGRlZCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgZW5vdWdoIGRhdGEgYXJlIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZworKyAgICBtYWtlaW50NjQoKSBvciBtYWtlbG9uZygpLiAgUmVwbGFjZWQgdmFyaW91cyBzaXplb2YoKSB2YWx1ZXMgd2l0aAorKyAgICBzaW1wbGUgKCI0IiBvciAiOCIpIGNvbnN0YW50cy4gIChUaGUgWmlwNjQgc3RydWN0dXJlcyBkbyBub3QgZGVwZW5kCisrICAgIG9uIG91ciB2YXJpYWJsZSBzaXplcy4pICBFcnJvciBoYW5kbGluZyBpcyBjcnVkZSwgYnV0IHdlIHNob3VsZCBub3cKKysgICAgc3RheSB3aXRoaW4gdGhlIGJ1ZmZlci4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgCisrI2RlZmluZSBaNjRGTEdTIDB4ZmZmZgorKyNkZWZpbmUgWjY0RkxHTCAweGZmZmZmZmZmCisrCisgICAgIGlmIChlZl9sZW4gPT0gMCB8fCBlZl9idWYgPT0gTlVMTCkKKyAgICAgICAgIHJldHVybiBQS19DT09MOworIAorICAgICBUcmFjZSgoc3RkZXJyLCJcbmdldFppcDY0RGF0YTogc2Nhbm5pbmcgZXh0cmEgZmllbGQgb2YgbGVuZ3RoICV1XG4iLAorICAgICAgIGVmX2xlbikpOworIAorLSAgICB3aGlsZSAoZWZfbGVuID49IEVCX0hFQURTSVpFKSB7CisrICAgIHdoaWxlIChlZl9sZW4gPj0gRUJfSEVBRFNJWkUpCisrICAgIHsKKyAgICAgICAgIGViX2lkID0gbWFrZXdvcmQoRUJfSUQgKyBlZl9idWYpOworICAgICAgICAgZWJfbGVuID0gbWFrZXdvcmQoRUJfTEVOICsgZWZfYnVmKTsKKyAKKy0gICAgICAgIGlmIChlYl9sZW4gPiAoZWZfbGVuIC0gRUJfSEVBRFNJWkUpKSB7CistICAgICAgICAgICAgLyogZGlzY292ZXJlZCBzb21lIGV4dHJhIGZpZWxkIGluY29uc2lzdGVuY3khICovCisrICAgICAgICBpZiAoZWJfbGVuID4gKGVmX2xlbiAtIEVCX0hFQURTSVpFKSkKKysgICAgICAgIHsKKysgICAgICAgICAgICAvKiBFeHRyYSBibG9jayBsZW5ndGggZXhjZWVkcyByZW1haW5pbmcgZXh0cmEgZmllbGQgbGVuZ3RoLiAqLworICAgICAgICAgICAgIFRyYWNlKChzdGRlcnIsCisgICAgICAgICAgICAgICAiZ2V0WmlwNjREYXRhOiBibG9jayBsZW5ndGggJXUgPiByZXN0IGVmX3NpemUgJXVcbiIsIGViX2xlbiwKKyAgICAgICAgICAgICAgIGVmX2xlbiAtIEVCX0hFQURTSVpFKSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistICAgICAgICBpZiAoZWJfaWQgPT0gRUZfUEtTWjY0KSB7CistCisrICAgICAgICBpZiAoZWJfaWQgPT0gRUZfUEtTWjY0KQorKyAgICAgICAgeworICAgICAgICAgICBpbnQgb2Zmc2V0ID0gRUJfSEVBRFNJWkU7CisgCistICAgICAgICAgIGlmIChHLmNyZWMudWNzaXplID09IDB4ZmZmZmZmZmYgfHwgRy5scmVjLnVjc2l6ZSA9PSAweGZmZmZmZmZmKXsKKy0gICAgICAgICAgICBHLmxyZWMudWNzaXplID0gRy5jcmVjLnVjc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLnVjc2l6ZSk7CisrICAgICAgICAgIGlmICgoRy5jcmVjLnVjc2l6ZSA9PSBaNjRGTEdMKSB8fCAoRy5scmVjLnVjc2l6ZSA9PSBaNjRGTEdMKSkKKysgICAgICAgICAgeworKyAgICAgICAgICAgIGlmIChvZmZzZXQrIDggPiBlZl9sZW4pCisrICAgICAgICAgICAgICByZXR1cm4gUEtfRVJSOworKworKyAgICAgICAgICAgIEcuY3JlYy51Y3NpemUgPSBHLmxyZWMudWNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CisrICAgICAgICAgICAgb2Zmc2V0ICs9IDg7CisgICAgICAgICAgIH0KKy0gICAgICAgICAgaWYgKEcuY3JlYy5jc2l6ZSA9PSAweGZmZmZmZmZmIHx8IEcubHJlYy5jc2l6ZSA9PSAweGZmZmZmZmZmKXsKKy0gICAgICAgICAgICBHLmNzaXplID0gRy5scmVjLmNzaXplID0gRy5jcmVjLmNzaXplID0gbWFrZWludDY0KG9mZnNldCArIGVmX2J1Zik7CistICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihHLmNyZWMuY3NpemUpOworKworKyAgICAgICAgICBpZiAoKEcuY3JlYy5jc2l6ZSA9PSBaNjRGTEdMKSB8fCAoRy5scmVjLmNzaXplID09IFo2NEZMR0wpKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgOCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisrICAgICAgICAgICAgRy5jc2l6ZSA9IEcuY3JlYy5jc2l6ZSA9IEcubHJlYy5jc2l6ZSA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9PSAweGZmZmZmZmZmKXsKKysKKysgICAgICAgICAgaWYgKEcuY3JlYy5yZWxhdGl2ZV9vZmZzZXRfbG9jYWxfaGVhZGVyID09IFo2NEZMR0wpCisrICAgICAgICAgIHsKKysgICAgICAgICAgICBpZiAob2Zmc2V0KyA4ID4gZWZfbGVuKQorKyAgICAgICAgICAgICAgcmV0dXJuIFBLX0VSUjsKKysKKyAgICAgICAgICAgICBHLmNyZWMucmVsYXRpdmVfb2Zmc2V0X2xvY2FsX2hlYWRlciA9IG1ha2VpbnQ2NChvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLnJlbGF0aXZlX29mZnNldF9sb2NhbF9oZWFkZXIpOworKyAgICAgICAgICAgIG9mZnNldCArPSA4OworICAgICAgICAgICB9CistICAgICAgICAgIGlmIChHLmNyZWMuZGlza19udW1iZXJfc3RhcnQgPT0gMHhmZmZmKXsKKysKKysgICAgICAgICAgaWYgKEcuY3JlYy5kaXNrX251bWJlcl9zdGFydCA9PSBaNjRGTEdTKQorKyAgICAgICAgICB7CisrICAgICAgICAgICAgaWYgKG9mZnNldCsgNCA+IGVmX2xlbikKKysgICAgICAgICAgICAgIHJldHVybiBQS19FUlI7CisrCisgICAgICAgICAgICAgRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0ID0gKHp1dmxfdCltYWtlbG9uZyhvZmZzZXQgKyBlZl9idWYpOworLSAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2YoRy5jcmVjLmRpc2tfbnVtYmVyX3N0YXJ0KTsKKysgICAgICAgICAgICBvZmZzZXQgKz0gNDsKKyAgICAgICAgICAgfQorKyNpZiAwCisrICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAvKiBFeHBlY3Qgb25seSBvbmUgRUZfUEtTWjY0IGJsb2NrLiAqLworKyNlbmRpZiAvKiAwICovCisgICAgICAgICB9CisgCistICAgICAgICAvKiBTa2lwIHRoaXMgZXh0cmEgZmllbGQgYmxvY2sgKi8KKysgICAgICAgIC8qIFNraXAgdGhpcyBleHRyYSBmaWVsZCBibG9jay4gKi8KKyAgICAgICAgIGVmX2J1ZiArPSAoZWJfbGVuICsgRUJfSEVBRFNJWkUpOworICAgICAgICAgZWZfbGVuIC09IChlYl9sZW4gKyBFQl9IRUFEU0laRSk7CisgICAgIH0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9hdm9pZC1zdHJpcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMwZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwL2F2b2lkLXN0cmlwLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1bml4L01ha2VmaWxlOiByZW1vdmUgaGFyZCBjb2RlZCBzdHJpcCBjb21tYW5kcworCitSZW1vdmUgdGhlIGhhcmQgY29kZWQgc3RyaXAgY29tbWFuZHMsIGJvdGggTEYyICh1c2VkIGluIGxpbmtpbmcpIGFuZAorU1RSSVAgdXNlZCBhbG9uZS4KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11ciB1bnppcDYwLm9yaWcvdW5peC9jb25maWd1cmUgdW56aXA2MC91bml4L2NvbmZpZ3VyZQorLS0tIHVuemlwNjAub3JpZy91bml4L2NvbmZpZ3VyZQkyMDA5LTA0LTE2IDE0OjI1OjEyLjAwMDAwMDAwMCAtMDUwMAorKysrIHVuemlwNjAvdW5peC9jb25maWd1cmUJMjAxMS0wNi0yMSAxMToyMzozNi44MjI4NDk5NjAgLTA1MDAKK0BAIC0xNyw3ICsxNyw3IEBACisgSVpfQlpJUDI9JHszfQorIENGTEFHUz0iJHtDRkxBR1N9IC1JLiAtRFVOSVgiCisgTEZMQUdTMT0iIgorLUxGTEFHUzI9Ii1zIgorK0xGTEFHUzI9IiIKKyBMTj0ibG4gLXMiCisgCisgQ0ZMQUdTX09QVD0nJworZGlmZiAtdXIgdW56aXA2MC5vcmlnL3VuaXgvTWFrZWZpbGUgdW56aXA2MC91bml4L01ha2VmaWxlCistLS0gdW56aXA2MC5vcmlnL3VuaXgvTWFrZWZpbGUJMjAwOS0wMS0xOCAxNjo0MToxOC4wMDAwMDAwMDAgLTA2MDAKKysrKyB1bnppcDYwL3VuaXgvTWFrZWZpbGUJMjAxMS0wNi0yMSAxMToxMjoyMi45MDAwMDMzODggLTA1MDAKK0BAIC01Miw3ICs1Miw3IEBACisgQ0YgPSAkKENGTEFHUykgJChDRl9OT09QVCkKKyBMRkxBR1MxID0KKyBMRiA9IC1vIHVuemlwJEUgJChMRkxBR1MxKQorLUxGMiA9IC1zCisrTEYyID0gCisgCisgIyBVblppcFNGWCBmbGFncworIFNMID0gLW8gdW56aXBzZngkRSAkKExGTEFHUzEpCitAQCAtNzAsNyArNzAsNyBAQAorIENITU9EID0gY2htb2QKKyBCSU5QRVJNUyA9IDc1NQorIE1BTlBFUk1TID0gNjQ0CistU1RSSVAgPSBzdHJpcAorK1NUUklQID0KKyBFID0KKyBPID0gLm8KKyBNID0gdW5peAorQEAgLTc3Niw3ICs3NzYsNiBAQAorICMKKyBnY2M6CQl1bml4X21ha2UKKyAJJChNQUtFKSB1bnppcHMgQ0M9Z2NjIExEPWdjYyBDRkxBR1M9Ii1PMyIgTEYyPSIiCistCSQoU1RSSVApICQoVU5aSVBTKQorIAorICMgSGV1cmlrb24gSEs2OCAoNjgwMTApLCBVbmlQbHVzKyBTeXN0ZW0gViA1LjAsIEdyZWVuIEhpbGxzIEMtNjgwMDAKKyBoazY4OgkJdW5peF9tYWtlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvZGVmaW5lLWxkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU5YzZlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC9kZWZpbmUtbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDE4IEBACitQYXNzIExERkxBR1MgdG8gdGhlIGxpbmtlciAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1pa2hhaWwgRHVybmV2IDxNaWtoYWlsX0R1cm5ldkBtZW50b3IuY29tPgorCitkaWZmIC1OYXVyIG9sZC91bml4L2NvbmZpZ3VyZSBuZXcvdW5peC9jb25maWd1cmUKKy0tLSBvbGQvdW5peC9jb25maWd1cmUJMjAxNC0wMS0xMyAyMTo1OToyNy4wMDAwMDAwMDAgKzExMDAKKysrKyBuZXcvdW5peC9jb25maWd1cmUJMjAxNC0wMS0xNCAxNjozNjowMi4wMDAwMDAwMDAgKzExMDAKK0BAIC0xNiw3ICsxNiw3IEBACisgQ0ZMQUdTUj0ke0NGTEFHU30KKyBJWl9CWklQMj0kezN9CisgQ0ZMQUdTPSIke0NGTEFHU30gLUkuIC1EVU5JWCIKKy1MRkxBR1MxPSIiCisrTEZMQUdTMT0ke0xERkxBR1N9CisgTEZMQUdTMj0iIgorIExOPSJsbiAtcyIKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC91bnppcC91bnppcC91bnppcC02LjBfb3ZlcmZsb3czLmRpZmYgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvdW56aXAtNi4wX292ZXJmbG93My5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMGJmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXAvdW56aXAtNi4wX292ZXJmbG93My5kaWZmCkBAIC0wLDAgKzEsNDUgQEAKK0Zyb20gMTkwMDQwZWJmY2Y1Mzk1YTZjY2VkZWRlMmNjOTM0M2QzNGYwYTEwOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IG1hbmNoYSA8bWFuY2hhMSBBVCB6b2hvIERPVCBjb20+CitEYXRlOiBXZWQsIDExIEZlYiAyMDE1CitTdWJqZWN0OiBJbmZvLVpJUCBVblppcCBidWZmZXIgb3ZlcmZsb3cKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitCeSBjYXJlZnVsbHkgY3JhZnRpbmcgYSBjb3JydXB0IFpJUCBhcmNoaXZlIHdpdGggImV4dHJhIGZpZWxkcyIgdGhhdAorcHVycG9ydCB0byBoYXZlIGNvbXByZXNzZWQgYmxvY2tzIGxhcmdlciB0aGFuIHRoZSBjb3JyZXNwb25kaW5nCit1bmNvbXByZXNzZWQgYmxvY2tzIGluIFNUT1JFRCBuby1jb21wcmVzc2lvbiBtb2RlLCBhbiBhdHRhY2tlciBjYW4KK3RyaWdnZXIgYSBoZWFwIG92ZXJmbG93IHRoYXQgY2FuIHJlc3VsdCBpbiBhcHBsaWNhdGlvbiBjcmFzaCBvcgorcG9zc2libHkgaGF2ZSBvdGhlciB1bnNwZWNpZmllZCBpbXBhY3QuCisKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHdoZW4gZXh0cmEgZmllbGRzIHVzZSBTVE9SRUQgbW9kZSwgdGhlCisiY29tcHJlc3NlZCIgYW5kIHVuY29tcHJlc3NlZCBibG9jayBzaXplcyBtYXRjaC4KKworU2lnbmVkLW9mZi1ieTogbWFuY2hhIDxtYW5jaGExIEFUIHpvaG8gRE9UIGNvbT4KKy0tLQorIGV4dHJhY3QuYyB8ICAgIDggKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKKy0tLSBhL2V4dHJhY3QuYworKysrIGIvZXh0cmFjdC5jCitAQCAtMjIxNyw2ICsyMjE3LDcgQEAgc3RhdGljIGludCB0ZXN0X2NvbXByX2ViKF9fR19fIGViLCBlYl9zaQorICAgICB1bGcgZWJfdWNzaXplOworICAgICB1Y2ggKmViX3VjcHRyOworICAgICBpbnQgcjsKKysgICAgdXNoIG1ldGhvZDsKKyAKKyAgICAgaWYgKGNvbXByX29mZnNldCA8IDQpICAgICAgICAgICAgICAgIC8qIGZpZWxkIGlzIG5vdCBjb21wcmVzc2VkOiAqLworICAgICAgICAgcmV0dXJuIFBLX09LOyAgICAgICAgICAgICAgICAgICAgLyogZG8gbm90aGluZyBhbmQgc2lnbmFsIE9LICovCitAQCAtMjIyNiw2ICsyMjI3LDEzIEBAIHN0YXRpYyBpbnQgdGVzdF9jb21wcl9lYihfX0dfXyBlYiwgZWJfc2kKKyAgICAgICAgICBlYl9zaXplIDw9IChjb21wcl9vZmZzZXQgKyBFQl9DTVBSSEVBRExFTikpKQorICAgICAgICAgcmV0dXJuIElaX0VGX1RSVU5DOyAgICAgICAgICAgICAgIC8qIG5vIGNvbXByZXNzZWQgZGF0YSEgKi8KKyAKKysgICAgbWV0aG9kID0gbWFrZXdvcmQoZWIgKyAoRUJfSEVBRFNJWkUgKyBjb21wcl9vZmZzZXQpKTsKKysgICAgaWYgKChtZXRob2QgPT0gU1RPUkVEKSAmJgorKyAgICAgICAgKGViX3NpemUgLSBjb21wcl9vZmZzZXQgLSBFQl9DTVBSSEVBRExFTiAhPSBlYl91Y3NpemUpKQorKwlyZXR1cm4gUEtfRVJSOwkJCSAgLyogY29tcHJlc3NlZCAmIHVuY29tcHJlc3NlZAorKwkJCQkJICAgKiBzaG91bGQgbWF0Y2ggaW4gU1RPUkVECisrCQkJCQkgICAqIG1ldGhvZCAqLworKworICAgICBpZiAoCisgI2lmZGVmIElOVF8xNkJJVAorICAgICAgICAgKCgodWxnKShleHRlbnQpZWJfdWNzaXplKSAhPSBlYl91Y3NpemUpIHx8CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvdW56aXAvdW56aXBfNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBhNzEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3VuemlwL3VuemlwXzYuMC5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgZXh0cmFjdGluZyBhbmQgdmlld2luZyBmaWxlcyBpbiAuemlwIGFyY2hpdmVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5pbmZvLXppcC5vcmciCitTRUNUSU9OID0gImNvbnNvbGUvdXRpbHMiCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTk0Y2FlYzVhNTFlZjU1ZWY3MTFlZTRlOGIxYzY5ZTI5IgorUEUgPSAiMSIKK1BSID0gInI1IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3VuemlwNjAudGd6IFwKKwlmaWxlOi8vYXZvaWQtc3RyaXAucGF0Y2ggXAorCWZpbGU6Ly9kZWZpbmUtbGRmbGFncy5wYXRjaCBcCisJZmlsZTovLzA2LXVuemlwNjAtYWx0LWljb252LXV0ZjhfQ1ZFLTIwMTUtMTMxNS5wYXRjaCBcCisJZmlsZTovL3VuemlwLTYuMF9vdmVyZmxvdzMuZGlmZiBcCisJZmlsZTovLzA5LWN2ZS0yMDE0LTgxMzktY3JjLW92ZXJmbG93LnBhdGNoIFwKKwlmaWxlOi8vMTAtY3ZlLTIwMTQtODE0MC10ZXN0LWNvbXByLWViLnBhdGNoIFwKKwlmaWxlOi8vMTEtY3ZlLTIwMTQtODE0MS1nZXR6aXA2NGRhdGEucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjJiNDkwNDA3NDg5NTIxZGI4NjNiNTIzYTdmODYzNzUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2ZDk2OTkxNjQ2ZDA0NDllZDBhYTk1MmU0ZmJlMjFiNDc2Y2U5OTRhYmMyNzZlNDlkMzBlNjg2NzA4YmQzNyIKK1MgPSAiJHtXT1JLRElSfS91bnppcDYwIgorCisjIE1ha2VmaWxlIHVzZXMgQ0ZfTk9PUFQgaW5zdGVhZCBvZiBDRkxBR1MuICBXZSBsaWZ0ZWQgdGhlIHZhbHVlcyBmcm9tCisjIE1ha2VmaWxlIGFuZCBhZGQgQ0ZMQUdTLiAgT3B0aW1pemF0aW9uIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IHVuemlwCisjIGNvbmZpZ3VyZSB0byBiZSAtTzMuCisjCitFWFRSQV9PRU1BS0UgKz0gIlNUUklQPXRydWUgTEYyPScnIFwKKyAgICAgICAgICAgICAgICAnQ0ZfTk9PUFQ9LUkuIC1JYnppcDIgLURVTklYICR7Q0ZMQUdTfSciCisKK2V4cG9ydCBMRCA9ICIke0NDfSIKK0xEX2NsYXNzLW5hdGl2ZSA9ICIke0NDfSIKKworZG9fY29tcGlsZSgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGdlbmVyaWMKK30KKworZG9faW5zdGFsbCgpIHsKKyAgICAgICAgb2VfcnVubWFrZSAtZiB1bml4L01ha2VmaWxlIGluc3RhbGwgcHJlZml4PSR7RH0ke3ByZWZpeH0KKwlpbnN0YWxsIC1kICR7RH0ke21hbmRpcn0KKwltdiAke0R9JHtwcmVmaXh9L21hbi8qICR7RH0ke21hbmRpcn0KKwlybWRpciAke0R9JHtwcmVmaXh9L21hbi8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworQUxURVJOQVRJVkVfJHtQTn0gPSAidW56aXAiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbdW56aXBdID0gIiR7YmluZGlyfS91bnppcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXgtcGluZy1mYWlsdXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YWI5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4LXBpbmctZmFpbHVyZS5wYXRjaApAQCAtMCwwICsxLDc5IEBACitGaXggcGluZyBtb2RlIGZhaWx1cmUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nICAKKworV2hlbiB3YXRjaGRvZyB3b3JrcyBvbiBwaW5nIG1vZGUsIHRoZSBzeXN0ZW0gd2lsbCBiZSByZWJvb3RlZCBzaW5jZQord2F0Y2hkb2cgY2FuIG5vdCByZWNlaXZlIHRoZSBleHBlY3RlZCBFQ09SRVBMWSBvbiBhIHNldHRpbmcgaW50ZXJ2YWwuCisKK1BpbmcgbW9kZSB1c2VzIGEgcmF3IHNvY2tldCB0byBzZW5kIGEgRUNPIHBhY2tldCwgdGhlbiB1c2VzIHNlbGVjdCgpCit0byB3YWl0IGFuZCByZWN2ZnJvbSgpIHRvIHJlY2VpdmUgdGhlIEVDT1JFUExZIHBhY2tldCwgaWYgc2VsZWN0KCkKK3Nob3dzIHRoZSBkYXRhIGlzIHJlYWR5LCBhbmQgdGhlIGRhdGEgaXMgbm90IHRoZSBleHBlY3RlZCBFQ09SRVBMWSwKK2FuZCB3YWl0aW5nIHRpbWUgaXMgbm90IG92ZXJkdWUsIGl0IHdpbGwgY29udGludWUgdXNlIHNlbGVjdCgpIGFuZAorcmVjdmZyb20oKS4KKworUHJvYmxlbSBpcyB0aGF0IHRoZSByYXcgc29ja2V0IGNhbiByZWNlaXZlIGFueSBpY21wIHBhY2tldHMsIGlmIHdlIGRvCitub3Qgc2V0IGZpbHRlcnMsIGFuZCB0aGVyZSBhcmUgbWFueSBpY21wIHBhY2tldHMgb24gc29ja2V0LCB0aGlzCitwcm9ncmFtIHdpbGwgbm90IGZpbmQgaXRzIGludGVyZXN0ZWQgRUNPUkVQTFkgcGFja2V0IGluIGEgc3BlY2lhbAoraW50ZXJ2YWwsIHdoaWNoIG1ha2VzIHRoZSBwaW5nIG1vZGUgZmFpbC4KKworCitPdGhlciBwcm9ncmFtIGlzIHRoYXQgd2F0Y2hkb2cgc29tZXRpbWUgY2FuIG5vdCByZWFjaCB0aGUgY2FsbCBvZgorcmVjdmZyb20gdG8gdHJ5IHRvIHJlY2VpdmUgcGFja2V0cyBzaW5jZSB0dl9zZWMgb2Ygc3RydWN0IHRpbWV2YWwKK29mIHNlbGVjdCBwYXJhbWV0ZXIgaXMgMC4KKworVGhlIHRpbWVvdXQgb2Ygc2VsZWN0KCkgaXMgdGhlIHJlc3VsdCBvZiBwaW5nIGludGVydmFsIG1pbnVzaW5nIHRoZQordGltZSBvZiBjYWxsaW5nIGdldHRpbWVvZmRheSBzcGVuZGluZywgd2hlbiBwaW5nIGludGVydmFsIGlzIDEgc2Vjb25kLAorYW5kIHRoZSBjYWxsIG9mIGdldHRpbWVvZmRheSgpIHNwZW5kcyBzZXZlcmFsIHVzZWNvbmRzLCB0aGUgdHZfc2VjIG9mCitzdHJ1Y3QgdGltZXZhbCBvZiBzZWxlY3QgcGFyYW1ldGVyIG11c3QgYmUgMCwgYXQgdGhhdCBjb25kaXRpb24sIHdlCitzaG91bGQgaXQgaXMgdmFsaWQgb2YgdHZfc2VjIG9mIHN0cnVjdCB0aW1ldmFsIG9mIHNlbGVjdCBwYXJhbWV0ZXIgYmUgMCAKKworU2lnbmVkLW9mZi1ieTogUm95LkxpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL25ldC5jICAgICAgfCAgICAyICstCisgc3JjL3dhdGNoZG9nLmMgfCAgICA1ICsrKystCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiB3YXRjaGRvZy01LjE0L3NyYy93YXRjaGRvZy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xNC5vcmlnL3NyYy93YXRjaGRvZy5jCisrKysgd2F0Y2hkb2ctNS4xNC9zcmMvd2F0Y2hkb2cuYworQEAgLTI0LDYgKzI0LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorICNpbmNsdWRlIDxsaW51eC9vb20uaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAKK0luZGV4OiB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdhdGNoZG9nLTUuMTQub3JpZy9zcmMvbmV0LmMKKysrKyB3YXRjaGRvZy01LjE0L3NyYy9uZXQuYworQEAgLTExLDcgKzExLDggQEAKKyAjaW5jbHVkZSA8ZXJybm8uaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorLSNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKysjaW5jbHVkZSA8bGludXgvaWNtcC5oPgorKy8vI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorICNpbmNsdWRlIDxmY250bC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBmb3IgZ2V0aG9zdG5hbWUoKSBldGMgKi8KK0BAIC0xNzksNiArMTgwLDkgQEAgaW50IG9wZW5fbmV0Y2hlY2soc3RydWN0IGxpc3QgKnRsaXN0KQorIHsKKyAJc3RydWN0IGxpc3QgKmFjdDsKKyAJaW50IGhvbGQgPSAwOworKwlzdHJ1Y3QgaWNtcF9maWx0ZXIgZmlsdDsKKysJZmlsdC5kYXRhID0gfigxPDxJQ01QX0VDSE9SRVBMWSk7CisrCisgCisgCWlmICh0bGlzdCAhPSBOVUxMKSB7CisgCQlmb3IgKGFjdCA9IHRsaXN0OyBhY3QgIT0gTlVMTDsgYWN0ID0gYWN0LT5uZXh0KSB7CitAQCAtMjAyLDYgKzIwNiw3IEBAIGludCBvcGVuX25ldGNoZWNrKHN0cnVjdCBsaXN0ICp0bGlzdCkKKyAJCQkgICAgZmF0YWxfZXJyb3IoRVhfU1lTRVJSLCAiZXJyb3Igb3BlbmluZyBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CisgCQkJfQorIAorKwkJCXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfUkFXLCBJQ01QX0ZJTFRFUiwgKGNoYXIqKSZmaWx0LCBzaXplb2YoZmlsdCkpOworIAkJCS8qIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBicm9hZGNhc3QgcGluZ3MgdG8gd29yayAqLworIAkJCSh2b2lkKXNldHNvY2tvcHQobmV0LT5zb2NrX2ZwLCBTT0xfU09DS0VULCBTT19CUk9BRENBU1QsIChjaGFyICopJmhvbGQsIHNpemVvZihob2xkKSk7CisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvZml4c2VwYnVpbGQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhZDNhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy9maXhzZXBidWlsZC5wYXRjaApAQCAtMCwwICsxLDI3IEBACitGaXggb3V0IG9mIHRyZWUgYnVpbGQgc3VwcG9ydDoKKworfCBpbnN0YWxsaW5nIC9ldGMvd2F0Y2hkb2cuY29uZgorfCAgL2Jpbi9ta2RpciAtcCAnL21lZGlhL2J1aWxkMS9wb2t5L2J1aWxkL3RtcC93b3JrL2k1ODYtcG9reS1saW51eC93YXRjaGRvZy81LjEzLXIwL2ltYWdlL3Vzci9zaGFyZS9tYW4vbWFuNScKK3wgIC9iaW4vbWtkaXIgLXAgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCit8ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mLjUgJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjUnCit8ICAvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDY0NCAvbWVkaWEvYnVpbGQxL3Bva3kvYnVpbGQvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3dhdGNoZG9nLzUuMTMtcjAvd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2tlZXBhbGl2ZS44IC9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC93YXRjaGRvZy01LjEzL3dkX2lkZW50aWZ5LjggJy9tZWRpYS9idWlsZDEvcG9reS9idWlsZC90bXAvd29yay9pNTg2LXBva3ktbGludXgvd2F0Y2hkb2cvNS4xMy1yMC9pbWFnZS91c3Ivc2hhcmUvbWFuL21hbjgnCit8IC91c3IvYmluL2luc3RhbGw6IGNhbm5vdCBzdGF0IGB3YXRjaGRvZy5jb25mJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorfCBtYWtlWzJdOiAqKiogW2luc3RhbGwtZXRjLWxvY2FsXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzAzLzIxCisKK0luZGV4OiB3YXRjaGRvZy01LjEzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL01ha2VmaWxlLmFtCTIwMTMtMDItMDEgMTE6MTU6NDQuMDAwMDAwMDAwICswMDAwCisrKysgd2F0Y2hkb2ctNS4xMy9NYWtlZmlsZS5hbQkyMDEzLTAzLTIxIDExOjU5OjM1LjYzNzEzOTAzMSArMDAwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAJZWxzZSBcCisgCSAgICAgICAgZWNobyAiaW5zdGFsbGluZyAkKENPTkZJR19GSUxFTkFNRSkiOyBcCisgCQkkKG1raW5zdGFsbGRpcnMpIGBkaXJuYW1lICQoREVTVERJUikkKENPTkZJR19GSUxFTkFNRSlgOyBcCistCSAgICAgICAgJChJTlNUQUxMX0RBVEEpIHdhdGNoZG9nLmNvbmYgJChERVNURElSKSQoQ09ORklHX0ZJTEVOQU1FKTsgXAorKwkgICAgICAgICQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rpcikvd2F0Y2hkb2cuY29uZiAkKERFU1RESVIpJChDT05GSUdfRklMRU5BTUUpOyBcCisgCWZpCisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOiBpbnN0YWxsLWV0Yy1sb2NhbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctY29uZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmYyOTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nL3dhdGNoZG9nLWNvbmYucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorLS0tIHdhdGNoZG9nLTUuMTMub3JpZy93YXRjaGRvZy5jb25mCTIwMTMtMDItMDEgMTI6MTU6NDQuMDAwMDAwMDAwICswMTAwCisrKysgd2F0Y2hkb2ctNS4xMy93YXRjaGRvZy5jb25mCTIwMTQtMTEtMTMgMTA6NTk6NDMuMjMzOTQzMDAwICswMTAwCitAQCAtMjAsNyArMjAsNyBAQAorICN0ZXN0LWJpbmFyeQkJPSAKKyAjdGVzdC10aW1lb3V0CQk9IAorIAorLSN3YXRjaGRvZy1kZXZpY2UJPSAvZGV2L3dhdGNoZG9nCisrd2F0Y2hkb2ctZGV2aWNlCT0gL2Rldi93YXRjaGRvZworIAorICMgRGVmYXVsdHMgY29tcGlsZWQgaW50byB0aGUgYmluYXJ5CisgI3RlbXBlcmF0dXJlLWRldmljZQk9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93YXRjaGRvZy93YXRjaGRvZy93YXRjaGRvZy1pbml0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYThlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2cvd2F0Y2hkb2ctaW5pdC5wYXRjaApAQCAtMCwwICsxLDUzIEBACistLS0gd2F0Y2hkb2ctNS4xMy5vcmlnL3JlZGhhdC93YXRjaGRvZy5pbml0CTIwMTQtMTEtMTIgMTc6MTg6MzkuMTI1OTQzMDAwICswMTAwCisrKysgd2F0Y2hkb2ctNS4xMy9yZWRoYXQvd2F0Y2hkb2cuaW5pdAkyMDE0LTExLTEyIDE4OjI3OjM2LjE4OTk0MzAwMCArMDEwMAorQEAgLTcsNyArNyw3IEBACisgIyAgICAgICAgICAgICAgICAgSGVubmluZyBQLiBTY2htaWVkZWhhdXNlbiA8aHBzQHRhbnN0YWFmbC5kZT4KKyAKKyAjIFNvdXJjZSBmdW5jdGlvbiBsaWJyYXJ5LgorLS4gL2V0Yy9yYy5kL2luaXQuZC9mdW5jdGlvbnMKKysuIC9ldGMvaW5pdC5kL2Z1bmN0aW9ucworIAorIFsgLXggL3Vzci9zYmluL3dhdGNoZG9nIC1hIC1lIC9ldGMvd2F0Y2hkb2cuY29uZiBdIHx8IGV4aXQgMAorIAorQEAgLTIzLDIyICsyMywyMiBAQAorIAorIHN0YXJ0KCkgeworIAorLQllY2hvIC1uICQiU3RhcnRpbmcgJHByb2c6ICIKKysJZWNobyAtbiAiU3RhcnRpbmcgJHByb2c6ICIKKyAJaWYgWyAtbiAiJChwaWRvZnByb2MgJHByb2cpIiBdOyB0aGVuCistCQllY2hvIC1uICQiJHByb2c6IGFscmVhZHkgcnVubmluZyIKKy0JCWVjaG9fZmFpbHVyZQorKwkJZWNobyAtbiAiJHByb2c6IGFscmVhZHkgcnVubmluZyAiCisrCQlmYWlsdXJlCisgCQllY2hvCisgCQlyZXR1cm4gMQorIAlmaQorIAlpZiBbICIkVkVSQk9TRSIgPSAieWVzIiBdOyB0aGVuCistCSAgICBkYWVtb24gL3Vzci9zYmluLyR7cHJvZ30gLXYKKysJICAgIC91c3Ivc2Jpbi8ke3Byb2d9IC12CisgCWVsc2UKKy0JICAgIGRhZW1vbiAvdXNyL3NiaW4vJHtwcm9nfQorKwkgICAgL3Vzci9zYmluLyR7cHJvZ30KKyAgICAgICAgIGZpCisgCVJFVFZBTD0kPworIAlbICRSRVRWQUwgLWVxIDAgXSAmJiB0b3VjaCAkbG9ja2ZpbGUKKy0JWyAkUkVUVkFMIC1lcSAwIF0gJiYgZWNob19zdWNjZXNzCistCVsgJFJFVFZBTCAtbmUgMCBdICYmIGVjaG9fZmFpbHVyZQorKwlbICRSRVRWQUwgLWVxIDAgXSAmJiBzdWNjZXNzCisrCVsgJFJFVFZBTCAtbmUgMCBdICYmIGZhaWx1cmUKKyAJZWNobworIAlyZXR1cm4gJFJFVFZBTAorIH0KK0BAIC01MCw4ICs1MCwxMCBAQAorIAkjIGFuZCByZWJvb3QgdGhlIGJveC4KKyAJa2lsbHByb2MgJHByb2cgLVRFUk0KKyAJUkVUVkFMPSQ/CistCWVjaG8KKyAJWyAkUkVUVkFMIC1lcSAwIF0gJiYgcm0gLWYgJGxvY2tmaWxlICRwaWRmaWxlCisrCVsgJFJFVFZBTCAtZXEgMCBdICYmIHN1Y2Nlc3MKKysJWyAkUkVUVkFMIC1uZSAwIF0gJiYgZmFpbHVyZQorKwllY2hvCisgCXJldHVybiAkUkVUVkFMCisgfQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2F0Y2hkb2cvd2F0Y2hkb2dfNS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWMwYThlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dhdGNoZG9nL3dhdGNoZG9nXzUuMTQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJTb2Z0d2FyZSB3YXRjaGRvZyIKK0RFU0NSSVBUSU9OID0gIldhdGNoZG9nIGlzIGEgZGFlbW9uIHRoYXQgY2hlY2tzIGlmIHlvdXIgc3lzdGVtIGlzIHN0aWxsIFwKK3dvcmtpbmcuIElmIHByb2dyYW1zIGluIHVzZXIgc3BhY2UgYXJlIG5vdCBsb25nZXIgZXhlY3V0ZWQgXAoraXQgd2lsbCByZWJvb3QgdGhlIHN5c3RlbS4iCitIT01FUEFHRSA9ICJodHRwOi8vd2F0Y2hkb2cuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNzIwMzAmYXRpZD04NjAxOTQiCisKK0xJQ0VOU0UgPSAiR1BMLTIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2MwNTUxYmY1NGFkOTdmNmI1NDE3MjBmODRkNjU2OSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vd2F0Y2hkb2cvd2F0Y2hkb2ctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeHNlcGJ1aWxkLnBhdGNoIFwKKwkgICBmaWxlOi8vZml4LXBpbmctZmFpbHVyZS5wYXRjaCBcCisJICAgZmlsZTovL3dhdGNoZG9nLWluaXQucGF0Y2ggXAorCSAgIGZpbGU6Ly93YXRjaGRvZy1jb25mLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWIyZGJhMGM1OTM5NDJmNGFjYzEwMGJjYTBkNTYwYzQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjIwYjJmNDllOTg3OWYyZTg1YzczZDRjMWY0MjJmOTEwMWU2YjM4ZTgyNGZlYTI0MTRiZWZkOGJiNjg2NmFkMSIKKworaW5oZXJpdCBhdXRvdG9vbHMKK2luaGVyaXQgdXBkYXRlLXJjLmQKKworSU5JVFNDUklQVF9OQU1FID0gIndhdGNoZG9nLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMTUgMSAyIDMgNCA1IC4gc3RvcCA4NSAwIDYgLiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAia2VybmVsLW1vZHVsZS1zb2Z0ZG9nIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1EICR7U30vcmVkaGF0L3dhdGNoZG9nLmluaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93YXRjaGRvZy5zaAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDliODk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC5pbmMKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJDb25zb2xlIFVSTCBkb3dubG9hZCB1dGlsaXR5IHN1cHBvcnRpbmcgSFRUUCwgRlRQLCBldGMiCitIT01FUEFHRSA9ICJodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3dnZXQvIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQiCitERVBFTkRTID0gImdudXRscyB6bGliIGxpYnBjcmUiCisKK0lOQ19QUiA9ICJyMTYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgdGV4aW5mbyB1cGRhdGUtYWx0ZXJuYXRpdmVzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtaXB2NiAtLXdpdGgtc3NsPWdudXRscyAtLWRpc2FibGUtcnBhdGggLS1kaXNhYmxlLWlyaSBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmdudXRscy1wcmVmaXggYWNfY3ZfaGVhZGVyX3V1aWRfdXVpZF9oPW5vIgorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3Z2V0IgorQUxURVJOQVRJVkVfJHtQTn1fY2xhc3MtbmF0aXZlc2RrID0gIiIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gImNhLWNlcnRpZmljYXRlcyIKKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlc2RrIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1dWlkXSA9ICItLXdpdGgtbGlidXVpZCwgLS13aXRob3V0LWxpYnV1aWQsdXRpbC1saW51eCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNjNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldC8wMDAxLVVuc2V0LW5lZWRfY2hhcnNldF9hbGlhcy13aGVuLWJ1aWxkaW5nLWZvci1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYjk1NjVkYzJmZTBjNGY3ZGFhZWM5MWI3ZTgzYmM3MzEzZGVlMmY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDEzIEFwciAyMDE1IDE3OjAyOjEzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIFVuc2V0IG5lZWRfY2hhcnNldF9hbGlhcyB3aGVuIGJ1aWxkaW5nIGZvciBtdXNsCisKK2xvY2FsY2hhcnNldCB1c2VzIGFjX2N2X2dudV9saWJyYXJ5XzJfMSBmcm9tIGdsaWJjMjEubTQKK3doaWNoIGFjdHVhbGx5IHNob3VkbCBiZSBmaXhlZCBpbiBnbnVsaWIgYW5kIHRoZW4gYWxsIGRvd25zdHJlYW0KK3Byb2plY3RzIHdpbGwgZ2V0IGl0IGV2ZW50dWFsbHkuIEZvciBub3cgd2UgYXBwbHkgdGhlIGZpeCB0bworY29yZXV0aWxzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgbGliL2dudWxpYi5tayB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworSW5kZXg6IHdnZXQtMS4xNi4zL2xpYi9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHdnZXQtMS4xNi4zLm9yaWcvbGliL01ha2VmaWxlLmFtCisrKysgd2dldC0xLjE2LjMvbGliL01ha2VmaWxlLmFtCitAQCAtODQ2LDcgKzg0Niw3IEBAIGluc3RhbGwtZXhlYy1sb2NhbGNoYXJzZXQ6IGFsbC1sb2NhbAorIAkgIGNhc2UgJyQoaG9zdF9vcyknIGluIFwKKyAJICAgIGRhcndpbls1Nl0qKSBcCisgCSAgICAgIG5lZWRfY2hhcnNldF9hbGlhcz10cnVlIDs7IFwKKy0JICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopIFwKKysJICAgIGRhcndpbiogfCBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyogfCBsaW51eC1tdXNsKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9ZmFsc2UgOzsgXAorIAkgICAgKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXQvZml4X21ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTJlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2dldC93Z2V0L2ZpeF9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiB3Z2V0LTEuMTIvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2dldC0xLjEyLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDktMjIgMDk6Mzk6NDkuMDAwMDAwMDAwIC0wNzAwCisrKysgd2dldC0xLjEyL2NvbmZpZ3VyZS5hYwkyMDExLTEwLTE5IDIwOjMyOjUzLjcxNDgxMjE2MCAtMDcwMAorQEAgLTE3Nyw3ICsxNzcsNyBAQAorIGRubCBHZXR0ZXh0CisgZG5sCisgQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSxbbmVlZC1uZ2V0dGV4dF0pCistQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xN10pCisrQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4xOF0pCisgCisgQUNfUFJPR19SQU5MSUIKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3dnZXQvd2dldF8xLjE2LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzNGE0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93Z2V0L3dnZXRfMS4xNi4zLmJiCkBAIC0wLDAgKzEsOSBAQAorU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L3dnZXQvd2dldC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4X21ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImY2MWQ5MDExYjk5ZjgyNDEwNmE1ZDVhMDVkZDBmNjNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlmMWM2ZDA5ZDcxNDhjMWMyZDlmZDBlYTY1NWRjZjRkY2M0MDdkZWIyZGIzMmQ0MTI2MjUxY2EwMjQ1Y2I2NzAiCisKK3JlcXVpcmUgd2dldC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjE4L2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NWNkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXV0b21ha2UgZm9yZWlnbiBzdHJpY3RuZXNzCisKK1VzZSBmb3JlaWduIHN0cmljdG5lc3MgdG8gYXZvaWQgYXV0b21ha2UgZXJyb3JzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3Vwc3RyZWFtIG5vIGxvbmdlciBhY3RpdmVdCisKK1NpZ25lZC1vZmYtYnk6IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgICA1ICsrKy0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGIzMGI2ZjUuLmJkMzIyMmMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEsNiArMSw3IEBACisgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCistQUNfSU5JVCh3aGljaC5jKQorLUFNX0lOSVRfQVVUT01BS0Uod2hpY2gsIDIuMTgpCisrQUNfSU5JVChbd2hpY2hdLFsyLjE4XSkKKytBQ19DT05GSUdfU1JDRElSKHdoaWNoLmMpCisrQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyBBTV9NQUlOVEFJTkVSX01PREUKKyAKKy0tIAorMS43LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMTgvZml4X25hbWVfY29uZmxpY3RfZ3JvdXBfbWVtYmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOWIxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvd2hpY2gvd2hpY2gtMi4xOC9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0aGlzIGlzIDIuMTgoR1BMdjIpIHNwZWNpZmljXQorCisjIGdsaWJjIGFsc28gaW1wbGVtZW50cyB0aGUgZnVuY3Rpb24gZ3JvdXBfbWVtYmVyLiBUbyBhdm9pZCBuYW1lIGNvbmZsaWN0LAorIyBoZXJlIGxldCB1cyBhcHBlbmQgYSAiXyIgdG8gd2hpY2gncyB2ZXJzaW9uLgorIworIyBTaWduZWQtb2ZmLWJ5IERleHVhbiBDdWkgPGRleHVhbi5jdWlAaW50ZWwuY29tPiwgMjAxMC0wOC0yMAorIyAodGhpcyBwYXRjaCBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MikKKworLS0tIHdoaWNoLTIuMTgvYmFzaC5jCisrKysgd2hpY2gtMi4xOC9iYXNoLmMKK0BAIC00NSw3ICs0NSwxMiBAQAorICAqIC0gY2hhbmdlZCBhbGwgb2NjdXJlbmNlcyBvZiAnZ2lkX3QnIGludG8gJ0dJRF9UJy4KKyAgKiAtIGV4cG9ydGVkIGZ1bmN0aW9ucyBuZWVkZWQgaW4gd2hpY2guYworICAqLworLXN0YXRpYyBpbnQgZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpOworKworKy8qCisrICogZ2xpYmMgYWxzbyBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbiBncm91cF9tZW1iZXIuIFRvIGF2b2lkIG5hbWUgY29uZmxpY3QsCisrICogaGVyZSBsZXQgdXMgYXBwZW5kIGEgIl8iIHRvIHdoaWNoJ3MgdmVyc2lvbi4KKysgKi8KKytzdGF0aWMgaW50IF9ncm91cF9tZW1iZXIgKEdJRF9UIGdpZCk7Cisgc3RhdGljIGNoYXIqIGV4dHJhY3RfY29sb25fdW5pdCAoY2hhciBjb25zdCogc3RyaW5nLCBpbnQgKnBfaW5kZXgpOworIAorIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitAQCAtMjAwLDggKzIwNSw4IEBACisgCisgLyogRnJvbSBiYXNoLTIuMDViIC8gZ2VuZXJhbC5jIC8gbGluZSA4MDUgKi8KKyAvKiBSZXR1cm4gbm9uLXplcm8gaWYgR0lEIGlzIG9uZSB0aGF0IHdlIGhhdmUgaW4gb3VyIGdyb3VwcyBsaXN0LiAqLworLWludAorLWdyb3VwX21lbWJlciAoR0lEX1QgZ2lkKQorK3N0YXRpYyBpbnQKKytfZ3JvdXBfbWVtYmVyIChHSURfVCBnaWQpCisgeworICNpZiBkZWZpbmVkIChIQVZFX0dFVEdST1VQUykKKyAgIHJlZ2lzdGVyIGludCBpOworQEAgLTI5MCw3ICsyOTUsNyBAQAorICAgICByZXR1cm4gKFhfQklUICh1X21vZGVfYml0cyAoZmluZm8uc3RfbW9kZSkpKSA/IChGU19FWElTVFMgfCBGU19FWEVDQUJMRSkgOiBGU19FWElTVFM7CisgCisgICAvKiBPdGhlcndpc2UsIGlmIHdlIGFyZSBpbiB0aGUgb3duaW5nIGdyb3VwLCB0aGUgZ3JvdXAgcGVybWlzc2lvbnMgYXBwbHkuICovCistICBpZiAoZ3JvdXBfbWVtYmVyIChmaW5mby5zdF9naWQpKQorKyAgaWYgKF9ncm91cF9tZW1iZXIgKGZpbmZvLnN0X2dpZCkpCisgICAgIHJldHVybiAoWF9CSVQgKGdfbW9kZV9iaXRzIChmaW5mby5zdF9tb2RlKSkpID8gKEZTX0VYSVNUUyB8IEZTX0VYRUNBQkxFKSA6IEZTX0VYSVNUUzsKKyAKKyAgIC8qIE90aGVyd2lzZSwgaWYgd2UgYXJlIGluIHRoZSBvdGhlciBncm91cCwgdGhlIG90aGVyIHBlcm1pc3Npb25zIGFwcGx5LiAqLworQEAgLTMzMSw3ICszMzYsNyBAQAorIC8qIEdpdmVuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdW5pdHMgb2YgaW5mb3JtYXRpb24gc2VwYXJhdGVkIGJ5IGNvbG9ucywKKyAgICByZXR1cm4gdGhlIG5leHQgb25lIHBvaW50ZWQgdG8gYnkgKFBfSU5ERVgpLCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubyBtb3JlLgorICAgIEFkdmFuY2UgKFBfSU5ERVgpIHRvIHRoZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGNvbG9uLiAqLworLWNoYXIqCisrc3RhdGljIGNoYXIqCisgZXh0cmFjdF9jb2xvbl91bml0IChjaGFyIGNvbnN0KiBzdHJpbmcsIGludCogcF9pbmRleCkKKyB7CisgICBpbnQgaSwgc3RhcnQsIGxlbjsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoLTIuMjEvYXV0b21ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwZjJlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaC0yLjIxL2F1dG9tYWtlLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK1VwZGF0ZSBhdXRvY29uZiBwcm9sb2d1ZSB0byB1c2UgImZvcmVpZ24iIHN0cmljdG5lc3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZDk3NDQ2MS4uYTIwZGZhOCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMSw3ICsxLDcgQEAKKyBkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyBBQ19JTklUKFt3aGljaF0sIFsyLjIxXSkKKyBBQ19DT05GSUdfU1JDRElSKHdoaWNoLmMpCistQU1fSU5JVF9BVVRPTUFLRQorK0FNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ25dKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMTguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI2Y2M5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjE4LmJiCkBAIC0wLDAgKzEsMzQgQEAKK1NVTU1BUlkgPSAiRGlzcGxheXMgdGhlIGZ1bGwgcGF0aCBvZiBzaGVsbCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OID0gIldoaWNoIGlzIGEgdXRpbGl0eSB0aGF0IHByaW50cyBvdXQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgXAorZXhlY3V0YWJsZXMgdGhhdCBiYXNoKDEpIHdvdWxkIGV4ZWN1dGUgd2hlbiB0aGUgcGFzc2VkIFwKK3Byb2dyYW0gbmFtZXMgd291bGQgaGF2ZSBiZWVuIGVudGVyZWQgb24gdGhlIHNoZWxsIHByb21wdC4gXAorSXQgZG9lcyB0aGlzIGJ5IHVzaW5nIHRoZSBleGFjdCBzYW1lIGFsZ29yaXRobSBhcyBiYXNoLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYXJsbzE3LmhvbWUueHM0YWxsLm5sL3doaWNoLyIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzL3doaWNoL3doaWNoLTIuMTgudGFyLmd6LzQyZDUxOTM4ZTQ4YjkxZjZlMTlmYWJmMjE2ZjVjM2U5L3doaWNoLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXhfbmFtZV9jb25mbGljdF9ncm91cF9tZW1iZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYXV0b21ha2UtZm9yZWlnbi5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MmQ1MTkzOGU0OGI5MWY2ZTE5ZmFiZjIxNmY1YzNlOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NDQ1Y2Q3ZTAyZWMwYzI2YTQ0ZmQ1NjA5ODQ2NGRlZDA2NGJhNWQ5M2RkMmUxNWVjMTI0MTBiYTU2YjJlNTQ0IgorCitERVBFTkRTID0gImN3YXV0b21hY3Jvcy1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gdXBkYXRlLWFsdGVybmF0aXZlcworCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlPTEQ9IkBBQ0xPQ0FMX0NXRkxBR1NAIgorCU5FVz0iLUkgJHtTVEFHSU5HX0RJUl9OQVRJVkV9LyR7ZGF0YWRpcn0vY3dhdXRvbWFjcm9zL200IgorCXNlZCAtaSAicyMke09MRH0jJHtORVd9I2ciIGBncmVwIC1ybCAke09MRH0gJHtTfWAKK30KKworQUxURVJOQVRJVkVfJHtQTn0gPSAid2hpY2giCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICIxMDAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3doaWNoL3doaWNoXzIuMjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2ODdmNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC93aGljaC93aGljaF8yLjIxLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiRGlzcGxheXMgdGhlIGZ1bGwgcGF0aCBvZiBzaGVsbCBjb21tYW5kcyIKK0RFU0NSSVBUSU9OID0gIldoaWNoIGlzIGEgdXRpbGl0eSB0aGF0IHByaW50cyBvdXQgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgXAorZXhlY3V0YWJsZXMgdGhhdCBiYXNoKDEpIHdvdWxkIGV4ZWN1dGUgd2hlbiB0aGUgcGFzc2VkIFwKK3Byb2dyYW0gbmFtZXMgd291bGQgaGF2ZSBiZWVuIGVudGVyZWQgb24gdGhlIHNoZWxsIHByb21wdC4gXAorSXQgZG9lcyB0aGlzIGJ5IHVzaW5nIHRoZSBleGFjdCBzYW1lIGFsZ29yaXRobSBhcyBiYXNoLiIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly9jYXJsbzE3LmhvbWUueHM0YWxsLm5sL3doaWNoLyIKKworTElDRU5TRSA9ICJHUEx2MysiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3doaWNoLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9YTk5NjM2OTNhZjIyNzJlN2E4ZGY2ZjIzMTE2NGU3YTIiCitERVBFTkRTICAgICA9ICJjd2F1dG9tYWNyb3MtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUFIgPSAicjMiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaWJlcnR5IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vd2hpY2gvd2hpY2gtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2F1dG9tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDk3ZmYxYTMyNGFlMDJlMGEzYjAzNjlmMDdhNzU0NGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjRhMjQ1Yjk0MTI0YjM3N2Q4YjQ5NjQ2YmY0MjFmOTE1NWQzNmFhNzYxNGI2ZWJmODM3MDVkM2ZmYzc2ZWFhZCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJc2VkIC1pIC1lICdzJUBBQ0xPQ0FMX0NXRkxBR1NAJS1JICR7U1RBR0lOR19ESVJfTkFUSVZFfS91c3Ivc2hhcmUvY3dhdXRvbWFjcm9zL200JWcnICR7U30vTWFrZWZpbGUuYW0gJHtTfS90aWxkZS9NYWtlZmlsZS5hbQorfQorCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ3aGljaCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzLzAwMDEtUmVpbnN0YXRlLXhkZy10ZXJtaW5hbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2QxYmFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hkZy11dGlscy94ZGctdXRpbHMvMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoCkBAIC0wLDAgKzEsNjcyIEBACitGcm9tIDE3NGFhNzIwNmY0YjMwOGQ0ZDIyOTJiYjgwNjdhMDdkOGNjNzE1YzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLb2VuIEtvb2kgPGtvZW5AZG9taW5pb24udGhydWhlcmUubmV0PgorRGF0ZTogVHVlLCAyOSBBcHIgMjAxNCAwNzoyOTozMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBSZWluc3RhdGUgeGRnLXRlcm1pbmFsCisKK1NpZ25lZC1vZmYtYnk6IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbUmV2ZXJ0XQorLS0tCisgc2NyaXB0cy9NYWtlZmlsZS5pbiAgfCAgIDYgKy0KKyBzY3JpcHRzL3hkZy10ZXJtaW5hbCB8IDYyMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDYyNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDc1NSBzY3JpcHRzL3hkZy10ZXJtaW5hbAorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5pbiBiL3NjcmlwdHMvTWFrZWZpbGUuaW4KK2luZGV4IDJjN2QyYWMuLmJlZjEwZDEgMTAwNjQ0CistLS0gYS9zY3JpcHRzL01ha2VmaWxlLmluCisrKysgYi9zY3JpcHRzL01ha2VmaWxlLmluCitAQCAtMjAsMTEgKzIwLDExIEBAIFNDUklQVFMJCT0gXAorICAgICB4ZGctb3BlbiBcCisgICAgIHhkZy1lbWFpbCBcCisgICAgIHhkZy1zY3JlZW5zYXZlciBcCistICAgIHhkZy1zZXR0aW5ncworKyAgICB4ZGctc2V0dGluZ3MgXAorKyAgICB4ZGctdGVybWluYWwKKyAjICAgIHhkZy1zdQorICMgICAgeGRnLWNvcHkgXAorICMgICAgeGRnLWZpbGUtZGlhbG9nCistIyAgICB4ZGctdGVybWluYWwKKyAKKyBNQU5QQUdFUz0JJChTQ1JJUFRTOiU9bWFuLyUuMSkKKyBXRUJQQUdFUz0JJChTQ1JJUFRTOiU9JS5odG1sKQorQEAgLTQyLDcgKzQyLDcgQEAgcmVsZWFzZToJc2NyaXB0cyBodG1sIG1hbgorIAlybSAtZiB4ZGctKi5pbiAqfiBIQUNLSU5HIGdlbmVyYXRlLWhlbHAtc2NyaXB0LmF3aworIAlybSAtcmYgZGVzYy8KKyAJcm0gLXJmIHhzbC8KKy0Jcm0gLWYgeGRnLWZpbGUtZGlhbG9nIHhkZy1zdSB4ZGctY29weSB4ZGctdGVybWluYWwKKysJcm0gLWYgeGRnLWZpbGUtZGlhbG9nIHhkZy1zdSB4ZGctY29weQorIAorIGRpc3RjbGVhbjogY2xlYW4KKyAJcm0gLWYgTWFrZWZpbGUKK2RpZmYgLS1naXQgYS9zY3JpcHRzL3hkZy10ZXJtaW5hbCBiL3NjcmlwdHMveGRnLXRlcm1pbmFsCituZXcgZmlsZSBtb2RlIDEwMDc1NQoraW5kZXggMDAwMDAwMC4uNGJkOTIwNQorLS0tIC9kZXYvbnVsbAorKysrIGIvc2NyaXB0cy94ZGctdGVybWluYWwKK0BAIC0wLDAgKzEsNjIyIEBACisrIyEvYmluL3NoCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgICB4ZGctdGVybWluYWwKKysjCisrIyAgIFV0aWxpdHkgc2NyaXB0IHRvIG9wZW4gdGhlIHJlZ2lzdGVyZWQgdGVybWluYWwgZW11bGF0b3IKKysjCisrIyAgIFJlZmVyIHRvIHRoZSB1c2FnZSgpIGZ1bmN0aW9uIGJlbG93IGZvciB1c2FnZS4KKysjCisrIyAgIENvcHlyaWdodCAyMDA5LTIwMTAsIEZhdGhpIEJvdWRyYSA8ZmFib0BmcmVlZGVza3RvcC5vcmc+CisrIyAgIENvcHlyaWdodCAyMDA5LTIwMTAsIFJleCBEaWV0ZXIgPHJkaWV0ZXJAZmVkb3JhcHJvamVjdC5vcmc+CisrIyAgIENvcHlyaWdodCAyMDA2LCBLZXZpbiBLcmFtbWVyIDxrZXZpbi5rcmFtbWVyQGdteC5hdD4KKysjCisrIyAgIExJQ0VOU0U6CisrIworKyMgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKyMgICBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorKyMgICB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisrIyAgIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorKyMgICBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKysjICAgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysjCisrIyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisrIyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKyMKKysjICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKysjICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrIyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisrIyAgIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisrIyAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorKyMgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKysjICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKyMKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCisrbWFudWFscGFnZSgpCisreworK2NhdCA8PCBfTUFOVUFMUEFHRQorK05hbWUKKysKKysgICB4ZGctdGVybWluYWwgLSBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbgorKworK1N5bm9wc2lzCisrCisrICAgeGRnLXRlcm1pbmFsIFtjb21tYW5kXQorKworKyAgIHhkZy10ZXJtaW5hbCB7IC0taGVscCB8IC0tbWFudWFsIHwgLS12ZXJzaW9uIH0KKysKKytEZXNjcmlwdGlvbgorKworKyAgIHhkZy10ZXJtaW5hbCBvcGVucyB0aGUgdXNlcidzIHByZWZlcnJlZCB0ZXJtaW5hbCBlbXVsYXRvciBhcHBsaWNhdGlvbi4gSWYKKysgICBhIGNvbW1hbmQgaXMgcHJvdmlkZWQgdGhlIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgc2hlbGwgd2l0aGluIHRoZQorKyAgIG5ld2x5IG9wZW5lZCB0ZXJtaW5hbCB3aW5kb3cuCisrCisrICAgeGRnLXRlcm1pbmFsIGlzIGZvciB1c2UgaW5zaWRlIGEgZGVza3RvcCBzZXNzaW9uIG9ubHkuIEl0IGlzIG5vdAorKyAgIHJlY29tbWVuZGVkIHRvIHVzZSB4ZGctdGVybWluYWwgYXMgcm9vdC4KKysKKytPcHRpb25zCisrCisrICAgLS1oZWxwCisrICAgICAgICAgICBTaG93IGNvbW1hbmQgc3lub3BzaXMuCisrCisrICAgLS1tYW51YWwKKysgICAgICAgICAgIFNob3cgdGhpcyBtYW51YWwgcGFnZS4KKysKKysgICAtLXZlcnNpb24KKysgICAgICAgICAgIFNob3cgdGhlIHhkZy11dGlscyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorKworK0V4aXQgQ29kZXMKKysKKysgICBBbiBleGl0IGNvZGUgb2YgMCBpbmRpY2F0ZXMgc3VjY2VzcyB3aGlsZSBhIG5vbi16ZXJvIGV4aXQgY29kZSBpbmRpY2F0ZXMKKysgICBmYWlsdXJlLiBUaGUgZm9sbG93aW5nIGZhaWx1cmUgY29kZXMgY2FuIGJlIHJldHVybmVkOgorKworKyAgIDEKKysgICAgICAgICAgIEVycm9yIGluIGNvbW1hbmQgbGluZSBzeW50YXguCisrCisrICAgMworKyAgICAgICAgICAgQSByZXF1aXJlZCB0b29sIGNvdWxkIG5vdCBiZSBmb3VuZC4KKysKKysgICA0CisrICAgICAgICAgICBUaGUgYWN0aW9uIGZhaWxlZC4KKysKKytFeGFtcGxlcworKworKyB4ZGctdGVybWluYWwKKysKKysgICBPcGVucyB0aGUgdXNlcidzIGRlZmF1bHQgdGVybWluYWwgZW11bGF0b3IsIGp1c3Qgc3RhcnRpbmcgYW4gaW50ZXJhY3RpdmUKKysgICBzaGVsbC4KKysKKysgeGRnLXRlcm1pbmFsIHRvcAorKworKyAgIE9wZW5zIHRoZSB1c2VyJ3MgZGVmYXVsdCB0ZXJtaW5hbCBlbXVsYXRvciBhbmQgbGV0cyBpdCBydW4gdGhlIHRvcAorKyAgIGV4ZWN1dGFibGUuCisrX01BTlVBTFBBR0UKKyt9CisrCisrdXNhZ2UoKQorK3sKKytjYXQgPDwgX1VTQUdFCisrICAgeGRnLXRlcm1pbmFsIC0gb3BlbnMgdGhlIHVzZXIncyBwcmVmZXJyZWQgdGVybWluYWwgZW11bGF0b3IgYXBwbGljYXRpb24KKysKKytTeW5vcHNpcworKworKyAgIHhkZy10ZXJtaW5hbCBbY29tbWFuZF0KKysKKysgICB4ZGctdGVybWluYWwgeyAtLWhlbHAgfCAtLW1hbnVhbCB8IC0tdmVyc2lvbiB9CisrCisrX1VTQUdFCisrfQorKworKyNAeGRnLXV0aWxzLWNvbW1vbkAKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgICBDb21tb24gdXRpbGl0eSBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gYWxsIFhERyB3cmFwcGVyIHNjcmlwdHMKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworK0RFQlVHKCkKKyt7CisrICBbIC16ICIke1hER19VVElMU19ERUJVR19MRVZFTH0iIF0gJiYgcmV0dXJuIDA7CisrICBbICR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSAtbHQgJDEgXSAmJiByZXR1cm4gMDsKKysgIHNoaWZ0CisrICBlY2hvICIkQCIgPiYyCisrfQorKworKyMgVGhpcyBoYW5kbGVzIGJhY2tzbGFzaGVzIGJ1dCBub3QgcXVvdGUgbWFya3MuCisrZmlyc3Rfd29yZCgpCisreworKyAgICByZWFkIGZpcnN0IHJlc3QKKysgICAgZWNobyAiJGZpcnN0IgorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgbWFwIGEgYmluYXJ5IHRvIGEgLmRlc2t0b3AgZmlsZQorK2JpbmFyeV90b19kZXNrdG9wX2ZpbGUoKQorK3sKKysgICAgc2VhcmNoPSIke1hER19EQVRBX0hPTUU6LSRIT01FLy5sb2NhbC9zaGFyZX06JHtYREdfREFUQV9ESVJTOi0vdXNyL2xvY2FsL3NoYXJlOi91c3Ivc2hhcmV9IgorKyAgICBiaW5hcnk9ImB3aGljaCAiJDEiYCIKKysgICAgYmluYXJ5PSJgcmVhZGxpbmsgLWYgIiRiaW5hcnkiYCIKKysgICAgYmFzZT0iYGJhc2VuYW1lICIkYmluYXJ5ImAiCisrICAgIElGUz06CisrICAgIGZvciBkaXIgaW4gJHNlYXJjaDsgZG8KKysgICAgICAgIHVuc2V0IElGUworKyAgICAgICAgWyAiJGRpciIgXSB8fCBjb250aW51ZQorKyAgICAgICAgWyAtZCAiJGRpci9hcHBsaWNhdGlvbnMiIF0gfHwgWyAtZCAiJGRpci9hcHBsbmsiIF0gfHwgY29udGludWUKKysgICAgICAgIGZvciBmaWxlIGluICIkZGlyIi9hcHBsaWNhdGlvbnMvKi5kZXNrdG9wICIkZGlyIi9hcHBsaWNhdGlvbnMvKi8qLmRlc2t0b3AgIiRkaXIiL2FwcGxuay8qLmRlc2t0b3AgIiRkaXIiL2FwcGxuay8qLyouZGVza3RvcDsgZG8KKysgICAgICAgICAgICBbIC1yICIkZmlsZSIgXSB8fCBjb250aW51ZQorKyAgICAgICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIGl0J3Mgd29ydGggdGhlIHByb2Nlc3NpbmcuCisrICAgICAgICAgICAgZ3JlcCAtcSAiXkV4ZWMuKiRiYXNlIiAiJGZpbGUiIHx8IGNvbnRpbnVlCisrICAgICAgICAgICAgIyBNYWtlIHN1cmUgaXQncyBhIHZpc2libGUgZGVza3RvcCBmaWxlIChlLmcuIG5vdCAicHJlZmVycmVkLXdlYi1icm93c2VyLmRlc2t0b3AiKS4KKysgICAgICAgICAgICBncmVwIC1FcSAiXihOb0Rpc3BsYXl8SGlkZGVuKT10cnVlIiAiJGZpbGUiICYmIGNvbnRpbnVlCisrICAgICAgICAgICAgY29tbWFuZD0iYGdyZXAgLUUgIl5FeGVjKFxbW15dPV0qXSk/PSIgIiRmaWxlIiB8IGN1dCAtZD0gLWYgMi0gfCBmaXJzdF93b3JkYCIKKysgICAgICAgICAgICBjb21tYW5kPSJgd2hpY2ggIiRjb21tYW5kImAiCisrICAgICAgICAgICAgaWYgWyB4ImByZWFkbGluayAtZiAiJGNvbW1hbmQiYCIgPSB4IiRiaW5hcnkiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgIyBGaXggYW55IGRvdWJsZSBzbGFzaGVzIHRoYXQgZ290IGFkZGVkIHBhdGggY29tcG9zaXRpb24KKysgICAgICAgICAgICAgICAgZWNobyAiJGZpbGUiIHwgc2VkIC1lICdzLC8vKiwvLGcnCisrICAgICAgICAgICAgICAgIHJldHVybgorKyAgICAgICAgICAgIGZpCisrICAgICAgICBkb25lCisrICAgIGRvbmUKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIG1hcCBhIC5kZXNrdG9wIGZpbGUgdG8gYSBiaW5hcnkKKysjIyBGSVhNRTogaGFuZGxlIHZlbmRvciBkaXIgY2FzZQorK2Rlc2t0b3BfZmlsZV90b19iaW5hcnkoKQorK3sKKysgICAgc2VhcmNoPSIke1hER19EQVRBX0hPTUU6LSRIT01FLy5sb2NhbC9zaGFyZX06JHtYREdfREFUQV9ESVJTOi0vdXNyL2xvY2FsL3NoYXJlOi91c3Ivc2hhcmV9IgorKyAgICBkZXNrdG9wPSJgYmFzZW5hbWUgIiQxImAiCisrICAgIElGUz06CisrICAgIGZvciBkaXIgaW4gJHNlYXJjaDsgZG8KKysgICAgICAgIHVuc2V0IElGUworKyAgICAgICAgWyAiJGRpciIgXSAmJiBbIC1kICIkZGlyL2FwcGxpY2F0aW9ucyIgXSB8fCBjb250aW51ZQorKyAgICAgICAgZmlsZT0iJGRpci9hcHBsaWNhdGlvbnMvJGRlc2t0b3AiCisrICAgICAgICBbIC1yICIkZmlsZSIgXSB8fCBjb250aW51ZQorKyAgICAgICAgIyBSZW1vdmUgYW55IGFyZ3VtZW50cyAoJUYsICVmLCAlVSwgJXUsIGV0Yy4pLgorKyAgICAgICAgY29tbWFuZD0iYGdyZXAgLUUgIl5FeGVjKFxbW15dPV0qXSk/PSIgIiRmaWxlIiB8IGN1dCAtZD0gLWYgMi0gfCBmaXJzdF93b3JkYCIKKysgICAgICAgIGNvbW1hbmQ9ImB3aGljaCAiJGNvbW1hbmQiYCIKKysgICAgICAgIHJlYWRsaW5rIC1mICIkY29tbWFuZCIKKysgICAgICAgIHJldHVybgorKyAgICBkb25lCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBzdWNjZXNzZnVsbHkgY29tcGxldGluZyB0aGUgZGVzaXJlZCBvcGVyYXRpb24KKysKKytleGl0X3N1Y2Nlc3MoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICIkQCIKKysgICAgICAgIGVjaG8KKysgICAgZmkKKysKKysgICAgZXhpdCAwCisrfQorKworKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgRXhpdCBzY3JpcHQgb24gbWFsZm9ybWVkIGFyZ3VtZW50cywgbm90IGVub3VnaCBhcmd1bWVudHMKKysjIG9yIG1pc3NpbmcgcmVxdWlyZWQgb3B0aW9uLgorKyMgcHJpbnRzIHVzYWdlIGluZm9ybWF0aW9uCisrCisrZXhpdF9mYWlsdXJlX3N5bnRheCgpCisreworKyAgICBpZiBbICQjIC1ndCAwIF07IHRoZW4KKysgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbDogJEAiID4mMgorKyAgICAgICAgZWNobyAiVHJ5ICd4ZGctdGVybWluYWwgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorKyAgICBlbHNlCisrICAgICAgICB1c2FnZQorKyAgICAgICAgZWNobyAiVXNlICdtYW4geGRnLXRlcm1pbmFsJyBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIKKysgICAgZmkKKysKKysgICAgZXhpdCAxCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBtaXNzaW5nIGZpbGUgc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZQorKworK2V4aXRfZmFpbHVyZV9maWxlX21pc3NpbmcoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCAyCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBmYWlsdXJlIHRvIGxvY2F0ZSBuZWNlc3NhcnkgdG9vbCBhcHBsaWNhdGlvbnMKKysKKytleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCAzCisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBmYWlsdXJlIHJldHVybmVkIGJ5IGEgdG9vbCBhcHBsaWNhdGlvbgorKworK2V4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNAorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrIyBFeGl0IHNjcmlwdCBvbiBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbiB0byByZWFkIGEgc3BlY2lmaWVkIGZpbGUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3JlYWQoKQorK3sKKysgICAgaWYgWyAkIyAtZ3QgMCBdOyB0aGVuCisrICAgICAgICBlY2hvICJ4ZGctdGVybWluYWw6ICRAIiA+JjIKKysgICAgZmkKKysKKysgICAgZXhpdCA1CisrfQorKworKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIEV4aXQgc2NyaXB0IG9uIGluc3VmZmljaWVudCBwZXJtaXNzaW9uIHRvIHdyaXRlIGEgc3BlY2lmaWVkIGZpbGUKKysKKytleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlKCkKKyt7CisrICAgIGlmIFsgJCMgLWd0IDAgXTsgdGhlbgorKyAgICAgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkQCIgPiYyCisrICAgIGZpCisrCisrICAgIGV4aXQgNgorK30KKysKKytjaGVja19pbnB1dF9maWxlKCkKKyt7CisrICAgIGlmIFsgISAtZSAiJDEiIF07IHRoZW4KKysgICAgICAgIGV4aXRfZmFpbHVyZV9maWxlX21pc3NpbmcgImZpbGUgJyQxJyBkb2VzIG5vdCBleGlzdCIKKysgICAgZmkKKysgICAgaWYgWyAhIC1yICIkMSIgXTsgdGhlbgorKyAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl9yZWFkICJubyBwZXJtaXNzaW9uIHRvIHJlYWQgZmlsZSAnJDEnIgorKyAgICBmaQorK30KKysKKytjaGVja192ZW5kb3JfcHJlZml4KCkKKyt7CisrICAgIGZpbGVfbGFiZWw9IiQyIgorKyAgICBbIC1uICIkZmlsZV9sYWJlbCIgXSB8fCBmaWxlX2xhYmVsPSJmaWxlbmFtZSIKKysgICAgZmlsZT1gYmFzZW5hbWUgIiQxImAKKysgICAgY2FzZSAiJGZpbGUiIGluCisrICAgICAgIFtbOmFscGhhOl1dKi0qKQorKyAgICAgICAgIHJldHVybgorKyAgICAgICAgIDs7CisrICAgIGVzYWMKKysKKysgICAgZWNobyAieGRnLXRlcm1pbmFsOiAkZmlsZV9sYWJlbCAnJGZpbGUnIGRvZXMgbm90IGhhdmUgYSBwcm9wZXIgdmVuZG9yIHByZWZpeCIgPiYyCisrICAgIGVjaG8gJ0EgdmVuZG9yIHByZWZpeCBjb25zaXN0cyBvZiBhbHBoYSBjaGFyYWN0ZXJzIChbYS16QS1aXSkgYW5kIGlzIHRlcm1pbmF0ZWQnID4mMgorKyAgICBlY2hvICd3aXRoIGEgZGFzaCAoIi0iKS4gQW4gZXhhbXBsZSAnIiRmaWxlX2xhYmVsIicgaXMgJyInZXhhbXBsZS0kZmlsZSciID4mMgorKyAgICBlY2hvICJVc2UgLS1ub3ZlbmRvciB0byBvdmVycmlkZSBvciAneGRnLXRlcm1pbmFsIC0tbWFudWFsJyBmb3IgYWRkaXRpb25hbCBpbmZvLiIgPiYyCisrICAgIGV4aXQgMQorK30KKysKKytjaGVja19vdXRwdXRfZmlsZSgpCisreworKyAgICAjIGlmIHRoZSBmaWxlIGV4aXN0cywgY2hlY2sgaWYgaXQgaXMgd3JpdGVhYmxlCisrICAgICMgaWYgaXQgZG9lcyBub3QgZXhpc3RzLCBjaGVjayBpZiB3ZSBhcmUgYWxsb3dlZCB0byB3cml0ZSBvbiB0aGUgZGlyZWN0b3J5CisrICAgIGlmIFsgLWUgIiQxIiBdOyB0aGVuCisrICAgICAgICBpZiBbICEgLXcgIiQxIiBdOyB0aGVuCisrICAgICAgICAgICAgZXhpdF9mYWlsdXJlX2ZpbGVfcGVybWlzc2lvbl93cml0ZSAibm8gcGVybWlzc2lvbiB0byB3cml0ZSB0byBmaWxlICckMSciCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBESVI9YGRpcm5hbWUgIiQxImAKKysgICAgICAgIGlmIFsgISAtdyAiJERJUiIgXSB8fCBbICEgLXggIiRESVIiIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfZmlsZV9wZXJtaXNzaW9uX3dyaXRlICJubyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBmaWxlICckMSciCisrICAgICAgICBmaQorKyAgICBmaQorK30KKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyMgQ2hlY2tzIGZvciBzaGFyZWQgY29tbWFuZHMsIGUuZy4gLS1oZWxwCisrCisrY2hlY2tfY29tbW9uX2NvbW1hbmRzKCkKKyt7CisrICAgIHdoaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisrICAgICAgICBwYXJtPSIkMSIKKysgICAgICAgIHNoaWZ0CisrCisrICAgICAgICBjYXNlICIkcGFybSIgaW4KKysgICAgICAgICAgICAtLWhlbHApCisrICAgICAgICAgICAgdXNhZ2UKKysgICAgICAgICAgICBlY2hvICJVc2UgJ21hbiB4ZGctdGVybWluYWwnIG9yICd4ZGctdGVybWluYWwgLS1tYW51YWwnIGZvciBhZGRpdGlvbmFsIGluZm8uIgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgLS1tYW51YWwpCisrICAgICAgICAgICAgbWFudWFscGFnZQorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgICAgIDs7CisrCisrICAgICAgICAgICAgLS12ZXJzaW9uKQorKyAgICAgICAgICAgIGVjaG8gInhkZy10ZXJtaW5hbCAxLjEuMCByYzEiCisrICAgICAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgICAgICAgICAgOzsKKysgICAgICAgIGVzYWMKKysgICAgZG9uZQorK30KKysKKytjaGVja19jb21tb25fY29tbWFuZHMgIiRAIgorKworK1sgLXogIiR7WERHX1VUSUxTX0RFQlVHX0xFVkVMfSIgXSAmJiB1bnNldCBYREdfVVRJTFNfREVCVUdfTEVWRUw7CisraWYgWyAke1hER19VVElMU19ERUJVR19MRVZFTC0wfSAtbHQgMSBdOyB0aGVuCisrICAgICMgQmUgc2lsZW50CisrICAgIHhkZ19yZWRpcmVjdF9vdXRwdXQ9IiA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwiCisrZWxzZQorKyAgICAjIEFsbCBvdXRwdXQgdG8gc3RkZXJyCisrICAgIHhkZ19yZWRpcmVjdF9vdXRwdXQ9IiA+JjIiCisrZmkKKysKKysjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIENoZWNrcyBmb3Iga25vd24gZGVza3RvcCBlbnZpcm9ubWVudHMKKysjIHNldCB2YXJpYWJsZSBERSB0byB0aGUgZGVza3RvcCBlbnZpcm9ubWVudHMgbmFtZSwgbG93ZXJjYXNlCisrCisrZGV0ZWN0REUoKQorK3sKKysgICAgIyBzZWUgaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQxNjQKKysgICAgdW5zZXQgR1JFUF9PUFRJT05TCisrCisrICAgIGlmIFsgLW4gIiR7WERHX0NVUlJFTlRfREVTS1RPUH0iIF07IHRoZW4KKysgICAgICBjYXNlICIke1hER19DVVJSRU5UX0RFU0tUT1B9IiBpbgorKyAgICAgICAgIEVOTElHSFRFTk1FTlQpCisrICAgICAgICAgICBERT1lbmxpZ2h0ZW5tZW50OworKyAgICAgICAgICAgOzsKKysgICAgICAgICBHTk9NRSkKKysgICAgICAgICAgIERFPWdub21lOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBLREUpCisrICAgICAgICAgICBERT1rZGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIExYREUpCisrICAgICAgICAgICBERT1seGRlOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBNQVRFKQorKyAgICAgICAgICAgREU9bWF0ZTsKKysgICAgICAgICAgIDs7CisrICAgICAgICAgWEZDRSkKKysgICAgICAgICAgIERFPXhmY2UKKysgICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBjbGFzc2ljIGZhbGxiYWNrcworKyAgICAgIGlmIFsgeCIkS0RFX0ZVTExfU0VTU0lPTiIgIT0geCIiIF07IHRoZW4gREU9a2RlOworKyAgICAgIGVsaWYgWyB4IiRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiICE9IHgiIiBdOyB0aGVuIERFPWdub21lOworKyAgICAgIGVsaWYgWyB4IiRNQVRFX0RFU0tUT1BfU0VTU0lPTl9JRCIgIT0geCIiIF07IHRoZW4gREU9bWF0ZTsKKysgICAgICBlbGlmIGBkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLWRlc3Q9b3JnLmZyZWVkZXNrdG9wLkRCdXMgL29yZy9mcmVlZGVza3RvcC9EQnVzIG9yZy5mcmVlZGVza3RvcC5EQnVzLkdldE5hbWVPd25lciBzdHJpbmc6b3JnLmdub21lLlNlc3Npb25NYW5hZ2VyID4gL2Rldi9udWxsIDI+JjFgIDsgdGhlbiBERT1nbm9tZTsKKysgICAgICBlbGlmIHhwcm9wIC1yb290IF9EVF9TQVZFX01PREUgMj4gL2Rldi9udWxsIHwgZ3JlcCAnID0gXCJ4ZmNlNFwiJCcgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIERFPXhmY2U7CisrICAgICAgZWxpZiB4cHJvcCAtcm9vdCAyPiAvZGV2L251bGwgfCBncmVwIC1pICdeeGZjZV9kZXNrdG9wX3dpbmRvdycgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIERFPXhmY2UKKysgICAgICBlbGlmIGVjaG8gJERFU0tUT1AgfCBncmVwIC1xICdeRW5saWdodGVubWVudCc7IHRoZW4gREU9ZW5saWdodGVubWVudDsKKysgICAgICBmaQorKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgICAgIyBmYWxsYmFjayB0byBjaGVja2luZyAkREVTS1RPUF9TRVNTSU9OCisrICAgICAgY2FzZSAiJERFU0tUT1BfU0VTU0lPTiIgaW4KKysgICAgICAgICBnbm9tZSkKKysgICAgICAgICAgIERFPWdub21lOworKyAgICAgICAgICAgOzsKKysgICAgICAgICBMWERFfEx1YnVudHUpCisrICAgICAgICAgICBERT1seGRlOyAKKysgICAgICAgICAgIDs7CisrICAgICAgICAgTUFURSkKKysgICAgICAgICAgIERFPW1hdGU7CisrICAgICAgICAgICA7OworKyAgICAgICAgIHhmY2V8eGZjZTR8J1hmY2UgU2Vzc2lvbicpCisrICAgICAgICAgICBERT14ZmNlOworKyAgICAgICAgICAgOzsKKysgICAgICBlc2FjCisrICAgIGZpCisrCisrICAgIGlmIFsgeCIkREUiID0geCIiIF07IHRoZW4KKysgICAgICAjIGZhbGxiYWNrIHRvIHVuYW1lIG91dHB1dCBmb3Igb3RoZXIgcGxhdGZvcm1zCisrICAgICAgY2FzZSAiJCh1bmFtZSAyPi9kZXYvbnVsbCkiIGluIAorKyAgICAgICAgRGFyd2luKQorKyAgICAgICAgICBERT1kYXJ3aW47CisrICAgICAgICAgIDs7CisrICAgICAgZXNhYworKyAgICBmaQorKworKyAgICBpZiBbIHgiJERFIiA9IHgiZ25vbWUiIF07IHRoZW4KKysgICAgICAjIGdub21lLWRlZmF1bHQtYXBwbGljYXRpb25zLXByb3BlcnRpZXMgaXMgb25seSBhdmFpbGFibGUgaW4gR05PTUUgMi54CisrICAgICAgIyBidXQgbm90IGluIEdOT01FIDMueAorKyAgICAgIHdoaWNoIGdub21lLWRlZmF1bHQtYXBwbGljYXRpb25zLXByb3BlcnRpZXMgPiAvZGV2L251bGwgMj4mMSAgfHwgREU9Imdub21lMyIKKysgICAgZmkKKyt9CisrCisrIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysjIGtmbWNsaWVudCBleGVjL29wZW5VUkwgY2FuIGdpdmUgYm9ndXMgZXhpdCB2YWx1ZSBpbiBLREUgPD0gMy41LjQKKysjIEl0IGFsc28gYWx3YXlzIHJldHVybnMgMSBpbiBLREUgMy40IGFuZCBlYXJsaWVyCisrIyBTaW1wbHkgcmV0dXJuIDAgaW4gc3VjaCBjYXNlCisrCisra2ZtY2xpZW50X2ZpeF9leGl0X2NvZGUoKQorK3sKKysgICAgdmVyc2lvbj1gTENfQUxMPUMuVVRGLTgga2RlLWNvbmZpZyAtLXZlcnNpb24gMj4vZGV2L251bGwgfCBncmVwICdeS0RFJ2AKKysgICAgbWFqb3I9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFwoWzAtOV1cKS4qL1wxLydgCisrICAgIG1pbm9yPWBlY2hvICR2ZXJzaW9uIHwgc2VkICdzL0tERS4qOiBbMC05XSpcLlwoWzAtOV1cKS4qL1wxLydgCisrICAgIHJlbGVhc2U9YGVjaG8gJHZlcnNpb24gfCBzZWQgJ3MvS0RFLio6IFswLTldKlwuWzAtOV0qXC5cKFswLTldXCkuKi9cMS8nYAorKyAgICB0ZXN0ICIkbWFqb3IiIC1ndCAzICYmIHJldHVybiAkMQorKyAgICB0ZXN0ICIkbWlub3IiIC1ndCA1ICYmIHJldHVybiAkMQorKyAgICB0ZXN0ICIkcmVsZWFzZSIgLWd0IDQgJiYgcmV0dXJuICQxCisrICAgIHJldHVybiAwCisrfQorKworK3Rlcm1pbmFsX2tkZSgpCisreworKyAgICB0ZXJtaW5hbD1ga3JlYWRjb25maWcgLS1maWxlIGtkZWdsb2JhbHMgLS1ncm91cCBHZW5lcmFsIC0ta2V5IFRlcm1pbmFsQXBwbGljYXRpb24gLS1kZWZhdWx0IGtvbnNvbGVgCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICR0ZXJtaW5hbCAyPi9kZXYvbnVsbGAKKysKKysgICAgaWYgWyAteCAiJHRlcm1pbmFsX2V4ZWMiIF07IHRoZW4KKysgICAgICAgIGlmIFsgeCIkMSIgPSB4IiIgXTsgdGhlbgorKyAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgLWUgIiQxIgorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJHRlcm1pbmFsJyBub3QgZm91bmQgb3Igbm90IGV4ZWN1dGFibGUiCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2dub21lKCkKKyt7CisrICAgIHRlcm1fZXhlY19rZXk9Ii9kZXNrdG9wL2dub21lL2FwcGxpY2F0aW9ucy90ZXJtaW5hbC9leGVjIgorKyAgICB0ZXJtX2V4ZWNfYXJnX2tleT0iL2Rlc2t0b3AvZ25vbWUvYXBwbGljYXRpb25zL3Rlcm1pbmFsL2V4ZWNfYXJnIgorKworKyAgICB0ZXJtX2V4ZWM9YGdjb25mdG9vbC0yIC0tZ2V0ICR7dGVybV9leGVjX2tleX1gCisrICAgIHRlcm1fZXhlY19hcmc9YGdjb25mdG9vbC0yIC0tZ2V0ICR7dGVybV9leGVjX2FyZ19rZXl9YAorKworKyAgICB0ZXJtaW5hbF9leGVjPWB3aGljaCAkdGVybV9leGVjIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBpZiBbIHgiJHRlcm1fZXhlY19hcmciID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgIiQxIgorKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMgIiR0ZXJtX2V4ZWNfYXJnIiAiJDEiCisrICAgICAgICAgICAgZmkKKysgICAgICAgIGZpCisrCisrICAgICAgICBpZiBbICQ/IC1lcSAwIF07IHRoZW4KKysgICAgICAgICAgICBleGl0X3N1Y2Nlc3MKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ZhaWxlZAorKyAgICAgICAgZmkKKysgICAgZWxzZQorKyAgICAgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJjb25maWd1cmVkIHRlcm1pbmFsIHByb2dyYW0gJyR0ZXJtX2V4ZWMnIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfeGZjZSgpCisreworKyAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgIGV4by1vcGVuIC0tbGF1bmNoIFRlcm1pbmFsRW11bGF0b3IKKysgICAgZWxzZQorKyAgICAgICAgZXhvLW9wZW4gLS1sYXVuY2ggVGVybWluYWxFbXVsYXRvciAiJDEiCisrICAgIGZpCisrCisrICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgZXhpdF9zdWNjZXNzCisrICAgIGVsc2UKKysgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgIGZpCisrfQorKworK3Rlcm1pbmFsX2dlbmVyaWMoKQorK3sKKysgICAgIyBpZiAkVEVSTSBpcyBhIGtub3duIG5vbi1jb21tYW5kLCB1c2UgaGFyZC1jb2RlZCBmYWxsYmFja3MKKysgICAgaWYgWyB4IiRURVJNIiA9IHgiIiBdIHx8IFsgeCIkVEVSTSIgPSB4ImxpbnV4IiBdIHx8IFsgeCIkVEVSTSIgPSB4InZ0MTAwIiBdOyB0aGVuCisrICAgICAgICBURVJNPXh0ZXJtCisrICAgIGZpCisrCisrICAgIHRlcm1pbmFsX2V4ZWM9YHdoaWNoICRURVJNIDI+L2Rldi9udWxsYAorKworKyAgICBpZiBbIC14ICIkdGVybWluYWxfZXhlYyIgXTsgdGhlbgorKyAgICAgICAgaWYgWyB4IiQxIiA9IHgiIiBdOyB0aGVuCisrICAgICAgICAgICAgJHRlcm1pbmFsX2V4ZWMKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICAjIHNjcmVlbiBhbmQgdXJ4dnQgd29uJ3QgZG8gdGhlaXIgb3duIHBhcnNpbmcgb2YgcXVvdGVkIGFyZ3VtZW50cworKyAgICAgICAgICAgIGlmIFsgeCIkVEVSTSIgPSB4InNjcmVlbiIgXTsgdGhlbgorKyAgICAgICAgICAgICAgICAjIHNjcmVlbiBoYXMgYW4gaW5jb21wYXRpYmxlIG1lYW5pbmcgZm9yIC1lCisrICAgICAgICAgICAgICAgIHNoIC1jICJleGVjICR0ZXJtaW5hbF9leGVjICQxIgorKyAgICAgICAgICAgIGVsaWYgWyB4IiRURVJNIiA9IHgidXJ4dnQiIF0gfHwgWyB4IiRURVJNIiA9IHgicnh2dC11bmljb2RlIiBdIHx8IFsgeCIkVEVSTSIgPSB4InJ4dnQiIF07IHRoZW4KKysgICAgICAgICAgICAgICAgI1RPRE86IFVzZSB3aGF0ZXZlciBtZWNoYW5pc20gZGFzaCBzdXBwb3J0cyB0byB0ZXN0IGZvcgorKyAgICAgICAgICAgICAgICAjICAgICAgcnh2dC0qIHRvIG1hdGNoIHRoaW5ncyBsaWtlIHJ4dnQtdW5pY29kZS0yNTZjb2xvcgorKyAgICAgICAgICAgICAgICBzaCAtYyAiZXhlYyAkdGVybWluYWxfZXhlYyAtZSAkMSIKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgICR0ZXJtaW5hbF9leGVjIC1lICIkMSIKKysgICAgICAgICAgICBmaQorKyAgICAgICAgZmkKKysKKysgICAgICAgIGlmIFsgJD8gLWVxIDAgXTsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfc3VjY2VzcworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9vcGVyYXRpb25fZmFpbGVkCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICBleGl0X2ZhaWx1cmVfb3BlcmF0aW9uX2ltcG9zc2libGUgImNvbmZpZ3VyZWQgdGVybWluYWwgcHJvZ3JhbSAnJFRFUk0nIG5vdCBmb3VuZCBvciBub3QgZXhlY3V0YWJsZSIKKysgICAgZmkKKyt9CisrCisrdGVybWluYWxfbHhkZSgpCisreworKyAgICBpZiB3aGljaCBseHRlcm1pbmFsICY+L2Rldi9udWxsOyB0aGVuCisrICAgICAgICBpZiBbIHgiJDEiID0geCIiIF07IHRoZW4KKysgICAgICAgICAgICBseHRlcm1pbmFsCisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgbHh0ZXJtaW5hbCAtZSAiJDEiCisrICAgICAgICBmaQorKyAgICBlbHNlCisrICAgICAgICB0ZXJtaW5hbF9nZW5lcmljICIkMSIKKysgICAgZmkKKyt9CisrCisrI1sgeCIkMSIgIT0geCIiIF0gfHwgZXhpdF9mYWlsdXJlX3N5bnRheAorKworK2NvbW1hbmQ9Cisrd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKysgICAgcGFybT0iJDEiCisrICAgIHNoaWZ0CisrCisrICAgIGNhc2UgIiRwYXJtIiBpbgorKyAgICAgIC0qKQorKyAgICAgICAgZXhpdF9mYWlsdXJlX3N5bnRheCAidW5leHBlY3RlZCBvcHRpb24gJyRwYXJtJyIKKysgICAgICAgIDs7CisrCisrICAgICAgKikKKysgICAgICAgIGlmIFsgLW4gIiRjb21tYW5kIiBdIDsgdGhlbgorKyAgICAgICAgICAgIGV4aXRfZmFpbHVyZV9zeW50YXggInVuZXhwZWN0ZWQgYXJndW1lbnQgJyRwYXJtJyIKKysgICAgICAgIGZpCisrICAgICAgICBjb21tYW5kPSIkcGFybSIKKysgICAgICAgIDs7CisrICAgIGVzYWMKKytkb25lCisrCisrZGV0ZWN0REUKKysKKytpZiBbIHgiJERFIiA9IHgiIiBdOyB0aGVuCisrICAgIERFPWdlbmVyaWMKKytmaQorKworK2Nhc2UgIiRERSIgaW4KKysgICAga2RlKQorKyAgICB0ZXJtaW5hbF9rZGUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBnbm9tZSopCisrICAgIHRlcm1pbmFsX2dub21lICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgeGZjZSkKKysgICAgdGVybWluYWxfeGZjZSAiJGNvbW1hbmQiCisrICAgIDs7CisrCisrICAgIGx4ZGUpCisrICAgIHRlcm1pbmFsX2x4ZGUgIiRjb21tYW5kIgorKyAgICA7OworKworKyAgICBnZW5lcmljKQorKyAgICB0ZXJtaW5hbF9nZW5lcmljICIkY29tbWFuZCIKKysgICAgOzsKKysKKysgICAgKikKKysgICAgZXhpdF9mYWlsdXJlX29wZXJhdGlvbl9pbXBvc3NpYmxlICJubyB0ZXJtaW5hbCBlbXVsYXRvciBhdmFpbGFibGUiCisrICAgIDs7CisrZXNhYworLS0gCisxLjkuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGRnLXV0aWxzL3hkZy11dGlsc18xLjEuMC1yYzEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmMWUzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ZGctdXRpbHMveGRnLXV0aWxzXzEuMS4wLXJjMS5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkJhc2ljIGRlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIgorCitERVNDUklQVElPTiA9ICJUaGUgeGRnLXV0aWxzIHBhY2thZ2UgaXMgYSBzZXQgb2Ygc2ltcGxlIHNjcmlwdHMgdGhhdCBwcm92aWRlIGJhc2ljIFwKK2Rlc2t0b3AgaW50ZWdyYXRpb24gZnVuY3Rpb25zIGZvciBhbnkgRnJlZSBEZXNrdG9wLCBzdWNoIGFzIExpbnV4LiBcCitUaGV5IGFyZSBpbnRlbmRlZCB0byBwcm92aWRlIGEgc2V0IG9mIGRlZmFjdG8gc3RhbmRhcmRzLiBcCitUaGUgZm9sbG93aW5nIHNjcmlwdHMgYXJlIHByb3ZpZGVkIGF0IHRoaXMgdGltZTogXAoreGRnLWRlc2t0b3AtaWNvbiBcICAgICAKK3hkZy1kZXNrdG9wLW1lbnUgXCAgCit4ZGctZW1haWwgXCAKK3hkZy1pY29uLXJlc291cmNlIFwKK3hkZy1taW1lIFwgICAgICAgCit4ZGctb3BlbiBcICAgICAKK3hkZy1zY3JlZW5zYXZlciBcIAoreGRnLXRlcm1pbmFsIFwKKyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1hNTM2N2E5MDkzNDA5OGQ2YjA1YWYzYjc0NjQwNTAxNCIKKworU1JDX1VSSSA9ICJodHRwOi8vcG9ydGxhbmQuZnJlZWRlc2t0b3Aub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1SZWluc3RhdGUteGRnLXRlcm1pbmFsLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYWRmNWU3YTA4ZTA1MjZmYzYwZGJlM2U1YjdlZjhkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjA1NTU4YWU0YmI4ZWRlMzU2ODYzY2FlOGM0MmUzZTAxMmFhNDIxYmY5ZDQ1MTMwYTU3MGZkMjA5ZDc5MTAyIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHhwcm9wIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4cHJvcCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL0Rpc2FibGUtc2VydmljZXMtZnJvbS1pbmV0ZC5jb25mLWlmLWEtc2VydmljZS13aXRoLXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNmU2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoCkBAIC0wLDAgKzEsODYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGQ1ODhiNjUzMGUxMzgyYTYyNDg5OGIzZjQzMDdmNjM2YzcyYzgwYTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI4IE5vdiAyMDA3IDEwOjEzOjA4ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIERpc2FibGUgc2VydmljZXMgZnJvbSBpbmV0ZC5jb25mIGlmIGEgc2VydmljZSB3aXRoIHRoZSBzYW1lIGlkIGV4aXN0cy4KKworICBUaGlzIHdheSwgaWYgYSBzZXJ2aWNlIGlzIGVuYWJsZWQgaW4gL2V0Yy94aW5ldGQqIF9hbmRfIGluCisvZXRjL2luZXRkLmNvbmYsIHRoZSBvbmUgKGV2ZW4gaWYgZGlzYWJsZWQpIGZyb20gL2V0Yy94aW5ldGQqIHRha2VzCitwcmVjZWRlbmNlLgorCitTaWduZWQtb2ZmLWJ5OiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CistLS0KKyB4aW5ldGQvaW5ldC5jIHwgICAyMiArKysrKysrKysrKysrKysrKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEveGluZXRkL2luZXQuYyBiL3hpbmV0ZC9pbmV0LmMKK2luZGV4IDFjYjJiYTIuLjhjYWFiNDUgMTAwNjQ0CistLS0gYS94aW5ldGQvaW5ldC5jCisrKysgYi94aW5ldGQvaW5ldC5jCitAQCAtMjMsNiArMjMsOCBAQAorICNpbmNsdWRlICJwYXJzZXN1cC5oIgorICNpbmNsdWRlICJudmxpc3RzLmgiCisgCisrc3RhdGljIHBzaV9oIGl0ZXIgOworKworIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqZGVmYXVsdHMpOworIAorQEAgLTMyLDEyICszNCwxNSBAQCB2b2lkIHBhcnNlX2luZXRfY29uZl9maWxlKCBpbnQgZmQsIHN0cnVjdCBjb25maWd1cmF0aW9uICpjb25mcCApCisgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0X2NvbmZpZyA9IENORl9ERUZBVUxUUyggY29uZnAgKTsKKyAgICAKKyAgICBsaW5lX2NvdW50ID0gMDsKKysgICBpdGVyID0gcHNpX2NyZWF0ZSAoc2NvbmZzKTsKKyAKKyAgICBmb3IoIDs7ICkKKyAgICB7ICAgCisgICAgICAgaWYgKGdldF9uZXh0X2luZXRfZW50cnkoZmQsIHNjb25mcywgZGVmYXVsdF9jb25maWcpID09IC0yKQorICAgICAgICAgIGJyZWFrOworICAgIH0KKysKKysgICBwc2lfZGVzdHJveShpdGVyKTsKKyB9CisgCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorQEAgLTQ2LDcgKzUxLDcgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgY2hhciAqcDsKKyAgICBzdHJfaCBzdHJwOworICAgIGNoYXIgKmxpbmUgPSBuZXh0X2xpbmUoZmQpOworLSAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqc2NwOworKyAgIHN0cnVjdCBzZXJ2aWNlX2NvbmZpZyAqc2NwLCAqdG1wOworICAgIHVuc2lnbmVkIHUsIGk7CisgICAgY29uc3QgY2hhciAqZnVuYyA9ICJnZXRfbmV4dF9pbmV0X2VudHJ5IjsKKyAgICBjaGFyICpuYW1lID0gTlVMTCwgKnJwY3ZlcnMgPSBOVUxMLCAqcnBjcHJvdG8gPSBOVUxMOworQEAgLTQwNSw3ICs0MTAsMTYgQEAgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsCisgICAgU0NfU1BFQ0lGWSggc2NwLCBBX1NPQ0tFVF9UWVBFICk7CisgICAgU0NfU1BFQ0lGWSggc2NwLCBBX1dBSVQgKTsKKyAKKy0gICBpZiggISBwc2V0X2FkZChzY29uZnMsIHNjcCkgKQorKyAgIGZvciAoIHRtcCA9IFNDUCggcHNpX3N0YXJ0KCBpdGVyICkgKSA7IHRtcCA7IHRtcCA9IFNDUCggcHNpX25leHQoaXRlcikpICl7CisrICAgICAgaWYgKEVRKFNDX0lEKHNjcCksIFNDX0lEKHRtcCkpKSB7CisrICAgICAgICAgcGFyc2Vtc2coTE9HX0RFQlVHLCBmdW5jLCAicmVtb3ZpbmcgZHVwbGljYXRlIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgICAgICAgIHNjX2ZyZWUoc2NwKTsKKysgICAgICAgICBzY3AgPSBOVUxMOworKyAgICAgICAgIGJyZWFrOworKyAgICAgIH0KKysgICB9CisrCisrICAgaWYoIHNjcCAmJiAhIHBzZXRfYWRkKHNjb25mcywgc2NwKSApCisgICAgeworICAgICAgIG91dF9vZl9tZW1vcnkoIGZ1bmMgKTsKKyAgICAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CitAQCAtNDE0LDcgKzQyOCw5IEBAIHN0YXRpYyBpbnQgZ2V0X25leHRfaW5ldF9lbnRyeSggaW50IGZkLCBwc2V0X2ggc2NvbmZzLAorICAgIH0KKyAKKyAgICBwc2V0X2Rlc3Ryb3koYXJncyk7CistICAgcGFyc2Vtc2coIExPR19ERUJVRywgZnVuYywgImFkZGVkIHNlcnZpY2UgJXMiLCBTQ19OQU1FKHNjcCkpOworKyAgIGlmIChzY3ApIHsKKysgICAgICBwYXJzZW1zZyggTE9HX0RFQlVHLCBmdW5jLCAiYWRkZWQgc2VydmljZSAlcyIsIFNDX05BTUUoc2NwKSk7CisrICAgfQorICAgIHJldHVybiAwOworIH0KKyAKKy0tIAorMS41LjMuNi4yMDQwLmcxNWU2CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL1ZhcmlvdXMtZml4ZXMtZnJvbS10aGUtcHJldmlvdXMtbWFpbnRhaW5lci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTU5Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQvVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGEzNDEwYjBiYzgxYWIwM2E4ODlkOWZmYzE0ZTM1MWJhZGY4MzcyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQaWVycmUgSGFib3V6aXQgPG1hZGNvZGVyQGRlYmlhbi5vcmc+CitEYXRlOiBNb24sIDI2IE5vdiAyMDA3IDE2OjAyOjA0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIFZhcmlvdXMgZml4ZXMgZnJvbSB0aGUgcHJldmlvdXMgbWFpbnRhaW5lci4KKworLS0tCisgeGluZXRkL2NoaWxkLmMgICB8ICAgMjAgKysrKysrKysrKysrKysrKystLS0KKyB4aW5ldGQvc2VydmljZS5jIHwgICAgOCArKysrLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3hpbmV0ZC9jaGlsZC5jIGIveGluZXRkL2NoaWxkLmMKK2luZGV4IDg5ZWU1NGMuLjQ4ZTk2MTUgMTAwNjQ0CistLS0gYS94aW5ldGQvY2hpbGQuYworKysrIGIveGluZXRkL2NoaWxkLmMKK0BAIC0yODQsNiArMjg0LDcgQEAgdm9pZCBjaGlsZF9wcm9jZXNzKCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBjb25uZWN0aW9uX3MgICAgICAgICAgICAqY3AgID0gU0VSVkVSX0NPTk5FQ1RJT04oIHNlcnAgKSA7CisgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICAgKnNjcCA9IFNWQ19DT05GKCBzcCApIDsKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAqZnVuYyA9ICJjaGlsZF9wcm9jZXNzIiA7CisrICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmQsIG51bGxfZmQ7CisgCisgICAgc2lnbmFsX2RlZmF1bHRfc3RhdGUoKTsKKyAKK0BAIC0yOTYsOSArMjk3LDIyIEBAIHZvaWQgY2hpbGRfcHJvY2Vzcyggc3RydWN0IHNlcnZlciAqc2VycCApCisgICAgc2lnbmFsc19wZW5kaW5nWzBdID0gLTE7CisgICAgc2lnbmFsc19wZW5kaW5nWzFdID0gLTE7CisgCistICAgU2Nsb3NlKDApOworLSAgIFNjbG9zZSgxKTsKKy0gICBTY2xvc2UoMik7CisrICAgaWYgKCAoIG51bGxfZmQgPSBvcGVuKCAiL2Rldi9udWxsIiwgT19SRE9OTFkgKSApID09IC0xICkKKysgICB7CisrICAgICAgbXNnKCBMT0dfRVJSLCBmdW5jLCAib3BlbignL2Rldi9udWxsJykgZmFpbGVkOiAlbSIpIDsKKysgICAgICBfZXhpdCggMSApIDsKKysgICB9CisrCisrICAgZm9yICggZmQgPSAwIDsgZmQgPD0gTUFYX1BBU1NfRkQgOyBmZCsrICkKKysgICB7CisrICAgICAgaWYgKCBmZCAhPSBudWxsX2ZkICYmIGR1cDIoIG51bGxfZmQsIGZkICkgPT0gLTEgKQorKyAgICAgIHsKKysgICAgICAgICBtc2coIExPR19FUlIsIGZ1bmMsICJkdXAyKCVkLCAlZCkgZmFpbGVkOiAlbSIpIDsKKysgICAgICAgICBfZXhpdCggMSApIDsKKysgICAgICB9CisrICAgfQorKyAgIGlmICggbnVsbF9mZCA+IE1BWF9QQVNTX0ZEICkKKysgICAgICAodm9pZCkgU2Nsb3NlKCBudWxsX2ZkICkgOworIAorIAorICNpZmRlZiBERUJVR19TRVJWRVIKK2RpZmYgLS1naXQgYS94aW5ldGQvc2VydmljZS5jIGIveGluZXRkL3NlcnZpY2UuYworaW5kZXggM2Q2OGQ3OC4uMDEzMmQ2YyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC9zZXJ2aWNlLmMKKysrKyBiL3hpbmV0ZC9zZXJ2aWNlLmMKK0BAIC03NDUsOCArNzQ1LDggQEAgc3RhdGljIHN0YXR1c19lIGZhaWxlZF9zZXJ2aWNlKHN0cnVjdCBzZXJ2aWNlICpzcCwKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTEVEOworIAorICAgICAgICAgICAgIGlmICggbGFzdCA9PSBOVUxMICkgeworLSAgICAgICAgICAgICAgIGxhc3QgPSBTQUlOKCBjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKy0JICAgICAgIFNWQ19MQVNUX0RHUkFNX0FERFIoc3ApID0gKHVuaW9uIHhzb2NrYWRkciAqKWxhc3Q7CisrCSAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9ICBTQUlOKCBjYWxsb2MoIDEsIHNpemVvZih1bmlvbiB4c29ja2FkZHIpICkgKTsKKysJICAgIGxhc3QgPSBTQUlOKCBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSApOworICAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgICAodm9pZCkgdGltZSggJmN1cnJlbnRfdGltZSApIDsKK0BAIC03NzIsOCArNzcyLDggQEAgc3RhdGljIHN0YXR1c19lIGZhaWxlZF9zZXJ2aWNlKHN0cnVjdCBzZXJ2aWNlICpzcCwKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFJTEVEOworIAorIAkgICAgaWYoIGxhc3QgPT0gTlVMTCApIHsKKy0gICAgICAgICAgICAgICBsYXN0ID0gU0FJTjYoY2FsbG9jKCAxLCBzaXplb2YodW5pb24geHNvY2thZGRyKSApICk7CistCSAgICAgICBTVkNfTEFTVF9ER1JBTV9BRERSKCBzcCApID0gKHVuaW9uIHhzb2NrYWRkciAqKWxhc3Q7CisrCSAgICBTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSA9IFNBSU42KGNhbGxvYyggMSwgc2l6ZW9mKHVuaW9uIHhzb2NrYWRkcikgKSApOworKyAgICAgICAgICAgIGxhc3QgPSBTQUlONihTVkNfTEFTVF9ER1JBTV9BRERSKHNwKSk7CisgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICh2b2lkKSB0aW1lKCAmY3VycmVudF90aW1lICkgOworLS0gCisxLjUuMy42LjIwNDAuZzE1ZTYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtQ1ZFLTIwMTMtNDM0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQyZGJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLUNWRS0yMDEzLTQzNDIucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAoreGluZXRkOiBDVkUtMjAxMy00MzQyCisKK3hpbmV0ZCBkb2VzIG5vdCBlbmZvcmNlIHRoZSB1c2VyIGFuZCBncm91cCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMKK2ZvciBUQ1BNVVggc2VydmljZXMsIHdoaWNoIGNhdXNlcyB0aGVzZSBzZXJ2aWNlcyB0byBiZSBydW4gYXMgcm9vdAorYW5kIG1ha2VzIGl0IGVhc2llciBmb3IgcmVtb3RlIGF0dGFja2VycyB0byBnYWluIHByaXZpbGVnZXMgYnkKK2xldmVyYWdpbmcgYW5vdGhlciB2dWxuZXJhYmlsaXR5IGluIGEgc2VydmljZS4KK2h0dHA6Ly93ZWIubnZkLm5pc3QuZ292L3ZpZXcvdnVsbi9kZXRhaWw/dnVsbklkPUNWRS0yMDEzLTQzNDIKKwordGhlIHBhdGNoIGNvbWUgZnJvbToKK2h0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9hdHRhY2htZW50LmNnaT9pZD03OTk3MzImYWN0aW9uPWRpZmYKKworU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgeGluZXRkL2J1aWx0aW5zLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvYnVpbHRpbnMuYyBiL3hpbmV0ZC9idWlsdGlucy5jCitpbmRleCAzYjg1NTc5Li4zNGE1YmFjIDEwMDY0NAorLS0tIGEveGluZXRkL2J1aWx0aW5zLmMKKysrKyBiL3hpbmV0ZC9idWlsdGlucy5jCitAQCAtNjE3LDcgKzYxNyw3IEBAIHN0YXRpYyB2b2lkIHRjcG11eF9oYW5kbGVyKCBjb25zdCBzdHJ1Y3Qgc2VydmVyICpzZXJwICkKKyAgICBpZiggU0NfSVNfSU5URVJOQUwoIHNjcCApICkgeworICAgICAgIFNDX0lOVEVSTkFMKHNjcCwgbnNlcnApOworICAgIH0gZWxzZSB7CistICAgICAgZXhlY19zZXJ2ZXIobnNlcnApOworKyAgICAgIGNoaWxkX3Byb2Nlc3MobnNlcnApOworICAgIH0KKyB9CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLXNob3VsZC1iZS1hYmxlLXRvLWxpc3Rlbi1vbi1JUHY2LWV2ZW4taW4taW5lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNjVjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2gKQEAgLTAsMCArMSwxMTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbZnJvbSBvdGhlciBkaXN0cm8gRGViaWFuXQorCitGcm9tIGY0NGIyMThjY2M3NzlhYjNmNGFlZDA3MjM5MGNjZjEyOWQ5NGI1OGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEYXZpZCBNYWRvcmUgPGRhdmlkQHBsZWlhZGVzLnN0YXJzPgorRGF0ZTogTW9uLCAyNCBNYXIgMjAwOCAxMjo0NTozNiArMDEwMAorU3ViamVjdDogW1BBVENIXSB4aW5ldGQgc2hvdWxkIGJlIGFibGUgdG8gbGlzdGVuIG9uIElQdjYgZXZlbiBpbiAtaW5ldGRfY29tcGF0IG1vZGUKKworeGluZXRkIGRvZXMgbm90IGJpbmQgdG8gSVB2NiBhZGRyZXNzZXMgKGFuZCBkb2VzIG5vdCBzZWVtIHRvIGhhdmUgYW4KK29wdGlvbiB0byBkbyBzbykgd2hlbiB1c2VkIGluIC1pbmV0ZF9jb21wYXQgbW9kZS4gIEFzIGN1cnJlbnQgaW5ldGQncworYXJlIElQdjYtYXdhcmUsIHRoaXMgaXMgYSBwcm9ibGVtOiB0aGlzIG1lYW5zIHhpbmV0ZCBjYW5ub3QgYmUgdXNlZCBhcworYSBkcm9wLWluIGluZXRkIHJlcGxhY2VtZW50LgorCitUaGUgYXR0YWNoZWQgcGF0Y2ggaXMgYSBzdWdnZXN0aW9uOiBpdCBhZGRzIGEgLWluZXRkX2lwdjYgZ2xvYmFsCitvcHRpb24gdGhhdCwgaWYgdXNlZCwgY2F1c2VzIGluZXRkLWNvbXBhdGliaWxpdHkgbGluZXMgdG8gaGF2ZSBhbgoraW1wbGljaXQgIklQdjYiIG9wdGlvbi4gIFBlcmhhcHMgdGhpcyBpcyBub3QgdGhlIGJlc3Qgc29sdXRpb24sIGJ1dAordGhlcmUgc2hvdWxkIGRlZmluaXRlbHkgYmUgYSB3YXkgdG8gZ2V0IGluZXRkLmNvbmYgdG8gYmUgcmVhZCBpbgorSVB2Ni1hd2FyZSBtb2RlLgorLS0tCisgeGluZXRkL2NvbmZwYXJzZS5jIHwgICAgMSArCisgeGluZXRkL2luZXQuYyAgICAgIHwgICAxNyArKysrKysrKysrKysrKysrKworIHhpbmV0ZC9vcHRpb25zLmMgICB8ICAgIDMgKysrCisgeGluZXRkL3hpbmV0ZC5tYW4gIHwgICAgNiArKysrKysKKyA0IGZpbGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS94aW5ldGQvY29uZnBhcnNlLmMgYi94aW5ldGQvY29uZnBhcnNlLmMKK2luZGV4IGRiOWY0MzEuLmQ3YjBiY2MgMTAwNjQ0CistLS0gYS94aW5ldGQvY29uZnBhcnNlLmMKKysrKyBiL3hpbmV0ZC9jb25mcGFyc2UuYworQEAgLTQwLDYgKzQwLDcgQEAKKyAjaW5jbHVkZSAiaW5ldC5oIgorICNpbmNsdWRlICJtYWluLmgiCisgCisrZXh0ZXJuIGludCBpbmV0ZF9pcHY2OworIGV4dGVybiBpbnQgaW5ldGRfY29tcGF0OworIAorIC8qCitkaWZmIC0tZ2l0IGEveGluZXRkL2luZXQuYyBiL3hpbmV0ZC9pbmV0LmMKK2luZGV4IDhjYWFiNDUuLjJlNjE3YWUgMTAwNjQ0CistLS0gYS94aW5ldGQvaW5ldC5jCisrKysgYi94aW5ldGQvaW5ldC5jCitAQCAtMjUsNiArMjUsOCBAQAorIAorIHN0YXRpYyBwc2lfaCBpdGVyIDsKKyAKKytleHRlcm4gaW50IGluZXRkX2lwdjY7CisrCisgc3RhdGljIGludCBnZXRfbmV4dF9pbmV0X2VudHJ5KCBpbnQgZmQsIHBzZXRfaCBzY29uZnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZpY2VfY29uZmlnICpkZWZhdWx0cyk7CisgCitAQCAtMzYwLDYgKzM2MiwyMSBAQCBzdGF0aWMgaW50IGdldF9uZXh0X2luZXRfZW50cnkoIGludCBmZCwgcHNldF9oIHNjb25mcywKKyAgICAgICAgICB9CisgICAgICAgICAgU0NfU0VSVkVSX0FSR1Yoc2NwKVt1XSA9IHA7CisgICAgICAgfQorKworKyAgICAgIC8qIFNldCB0aGUgSVB2NiBmbGFnIGlmIHdlIHdlcmUgcGFzc2VkIHRoZSAtaW5ldGRfaXB2NiBvcHRpb24gKi8KKysgICAgICBpZiAoIGluZXRkX2lwdjYgKQorKyAgICAgIHsKKysgICAgICAgICBudnAgPSBudl9maW5kX3ZhbHVlKCBzZXJ2aWNlX2ZsYWdzLCAiSVB2NiIgKTsKKysgICAgICAgICBpZiAoIG52cCA9PSBOVUxMICkKKysgICAgICAgICB7CisrICAgICAgICAgICAgcGFyc2Vtc2coIExPR19XQVJOSU5HLCBmdW5jLCAiaW5ldGQuY29uZiAtIEJhZCBmb28gJXMiLCBuYW1lICkgOworKyAgICAgICAgICAgIHBzZXRfZGVzdHJveShhcmdzKTsKKysgICAgICAgICAgICBzY19mcmVlKHNjcCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgIH0KKysgICAgICAgICBNX1NFVChTQ19YRkxBR1Moc2NwKSwgbnZwLT52YWx1ZSk7CisrICAgICAgfQorKworICAgICAgIC8qIFNldCB0aGUgcmV1c2UgZmxhZywgYXMgdGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgaW5ldGQgKi8KKyAgICAgICBudnAgPSBudl9maW5kX3ZhbHVlKCBzZXJ2aWNlX2ZsYWdzLCAiUkVVU0UiICk7CisgICAgICAgaWYgKCBudnAgPT0gTlVMTCApCitkaWZmIC0tZ2l0IGEveGluZXRkL29wdGlvbnMuYyBiL3hpbmV0ZC9vcHRpb25zLmMKK2luZGV4IGIwNThiNmEuLmRjMmYzYTAgMTAwNjQ0CistLS0gYS94aW5ldGQvb3B0aW9ucy5jCisrKysgYi94aW5ldGQvb3B0aW9ucy5jCitAQCAtMzAsNiArMzAsNyBAQCBpbnQgbG9ncHJvY3Nfb3B0aW9uIDsKKyB1bnNpZ25lZCBsb2dwcm9jc19vcHRpb25fYXJnIDsKKyBpbnQgc3RheWFsaXZlX29wdGlvbj0wOworIGNoYXIgKnByb2dyYW1fbmFtZSA7CisraW50IGluZXRkX2lwdjYgPSAwIDsKKyBpbnQgaW5ldGRfY29tcGF0ID0gMCA7CisgaW50IGRvbnRfZm9yayA9IDA7CisgCitAQCAtMTI4LDYgKzEyOSw4IEBAIGludCBvcHRfcmVjb2duaXplKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICB9CisrICAgICAgICAgZWxzZSBpZiAoIHN0cmNtcCAoICZhcmd2WyBhcmcgXVsgMSBdLCAiaW5ldGRfaXB2NiIgKSA9PSAwICkKKysgICAgICAgICAgICBpbmV0ZF9pcHY2ID0gMTsKKyAgICAgICAgICBlbHNlIGlmICggc3RyY21wICggJmFyZ3ZbIGFyZyBdWyAxIF0sICJpbmV0ZF9jb21wYXQiICkgPT0gMCApCisgICAgICAgICAgICAgaW5ldGRfY29tcGF0ID0gMTsKKyAgICAgICB9CitkaWZmIC0tZ2l0IGEveGluZXRkL3hpbmV0ZC5tYW4gYi94aW5ldGQveGluZXRkLm1hbgoraW5kZXggYzc2YzNjNi4uYzlkZDgwMyAxMDA2NDQKKy0tLSBhL3hpbmV0ZC94aW5ldGQubWFuCisrKysgYi94aW5ldGQveGluZXRkLm1hbgorQEAgLTEwNiw2ICsxMDYsMTIgQEAgVGhpcyBvcHRpb24gY2F1c2VzIHhpbmV0ZCB0byByZWFkIC9ldGMvaW5ldGQuY29uZiBpbiBhZGRpdGlvbiB0byB0aGUKKyBzdGFuZGFyZCB4aW5ldGQgY29uZmlnIGZpbGVzLiAgL2V0Yy9pbmV0ZC5jb25mIGlzIHJlYWQgYWZ0ZXIgdGhlCisgc3RhbmRhcmQgeGluZXRkIGNvbmZpZyBmaWxlcy4KKyAuVFAKKysuQkkgXC1pbmV0ZF9pcHY2CisrVGhpcyBvcHRpb24gY2F1c2VzIHhpbmV0ZCB0byBiaW5kIHRvIElQdjYgKEFGX0lORVQ2KSBhZGRyZXNzZXMgZm9yCisraW5ldGQgY29tcGF0aWJpbGl0eSBsaW5lcyAoc2VlIHByZXZpb3VzIG9wdGlvbikuICBUaGlzIG9ubHkgYWZmZWN0cworK2hvdyAvZXRjL2luZXRkLmNvbmYgaXMgaW50ZXJwcmV0ZWQgYW5kIHRodXMgb25seSBoYXMgYW55IGVmZmVjdCBpZgorK3RoZSBcLWluZXRkX2NvbXBhdCBvcHRpb24gaXMgYWxzbyB1c2VkLgorKy5UUAorIC5CSSBcLWNjICIgaW50ZXJ2YWwiCisgVGhpcyBvcHRpb24gaW5zdHJ1Y3RzCisgLkIgeGluZXRkCistLSAKKzEuNS41LnJjMC4xMjcuZ2I0MzM3CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2ZWEyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5jb25mCkBAIC0wLDAgKzEsMTEgQEAKKyMgU2ltcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgeGluZXRkCisjCisjIFNvbWUgZGVmYXVsdHMsIGFuZCBpbmNsdWRlIC9ldGMveGluZXRkLmQvCisKK2RlZmF1bHRzCit7CisKKworfQorCitpbmNsdWRlZGlyIC9ldGMveGluZXRkLmQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0IGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLmRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBhMzhlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgeGluZXRkLiBUaGlzIGZpbGUgaXMgc291cmNlZCBieSAvYmluL3NoIGZyb20KKyMgL2V0Yy9pbml0LmQveGluZXRkCisKKyMgZW5hYmxlIHhpbmV0ZCBJbmV0ZCBjb21wYXQgbW9kZQorSU5FVERfQ09NUEFUPVllcworCisjIE9wdGlvbnMgdG8gcGFzcyB0byB4aW5ldGQKKyMKKyMgLXN0YXlhbGl2ZSBjb21lcyBieSBkZWZhdWx0IDogaXQgY2FuIGJlIHJlbW92ZWQgaWYgeGluZXRkIGlzIGV4cGVjdGVkCisjIG5vdCB0byBzdGFydCB3aGVuIG5vIHNlcnZpY2UgaXMgY29uZmlndXJlZAorIworWElORVREX09QVFM9Ii1zdGF5YWxpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdCBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3N2MyYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveGluZXRkL3hpbmV0ZC94aW5ldGQuaW5pdApAQCAtMCwwICsxLDY0IEBACisjIS9iaW4vc2gKKyMKKyMgL2V0Yy9pbml0LmQveGluZXRkICAtLSAgc2NyaXB0IHRvIHN0YXJ0IGFuZCBzdG9wIHhpbmV0ZC4KKworIyBTb3VyY2UgZnVuY3Rpb24gbGlicmFyeS4KKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2lmIHRlc3QgLWYgL2V0Yy9kZWZhdWx0L3hpbmV0ZDsgdGhlbgorCS4gL2V0Yy9kZWZhdWx0L3hpbmV0ZAorZmkKKworCit0ZXN0IC14IC91c3Ivc2Jpbi94aW5ldGQgfHwgZXhpdCAwCisKK2NoZWNrcG9ydG1hcCAoKSB7CisgIGlmIGdyZXAgIl5bXiAqI10iIC9ldGMveGluZXRkLmNvbmYgfCBncmVwIC1xICdycGMvJzsgdGhlbgorICAgIGlmICEgcnBjaW5mbyAtdSBsb2NhbGhvc3QgcG9ydG1hcHBlciA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIldBUk5JTkc6IHBvcnRtYXBwZXIgaW5hY3RpdmUgLSBSUEMgc2VydmljZXMgdW5hdmFpbGFibGUhIgorICAgICAgZWNobyAiICAgIENvbW1lbnRpbmcgb3V0IG9yIHJlbW92aW5nIHRoZSBSUEMgc2VydmljZXMgZnJvbSIKKyAgICAgIGVjaG8gIiAgICB0aGUgL2V0Yy94aW5ldGQuY29uZiBmaWxlIHdpbGwgcmVtb3ZlIHRoaXMgbWVzc2FnZS4iCisgICAgICBlY2hvCisgICAgZmkKKyAgZmkKK30gCisKK2Nhc2UgIiQxIiBpbgorICAgIHN0YXJ0KQorICAgICAgICBjaGVja3BvcnRtYXAKKwllY2hvIC1uICJTdGFydGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RhcnQgLS1xdWlldCAtLWJhY2tncm91bmQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQgLS0gLXBpZGZpbGUgL3Zhci9ydW4veGluZXRkLnBpZCAkWElORVREX09QVFMKKwllY2hvICIuIgorCTs7CisgICAgc3RvcCkKKwllY2hvIC1uICJTdG9wcGluZyBpbnRlcm5ldCBzdXBlcnNlcnZlcjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAzIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgc3RhdHVzKQorCXN0YXR1cyAvdXNyL3NiaW4veGluZXRkOworCWV4aXQgJD8KKwk7OworICAgIHJlbG9hZCkKKwllY2hvIC1uICJSZWxvYWRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXIgY29uZmlndXJhdGlvbjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgZm9yY2UtcmVsb2FkKQorCWVjaG8gIiQwIGZvcmNlLXJlbG9hZDogRm9yY2UgUmVsb2FkIGlzIGRlcHJlY2F0ZWQiCisJZWNobyAtbiAiRm9yY2VmdWxseSByZWxvYWRpbmcgaW50ZXJuZXQgc3VwZXJzZXJ2ZXIgY29uZmlndXJhdGlvbjogeGluZXRkIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXNpZ25hbCAxIC0tcXVpZXQgLS1leGVjIC91c3Ivc2Jpbi94aW5ldGQKKwllY2hvICIuIgorCTs7CisgICAgcmVzdGFydCkKKwkkMCBzdG9wCisJJDAgc3RhcnQKKwk7OworICAgICopCisJZWNobyAiVXNhZ2U6IC9ldGMvaW5pdC5kL3hpbmV0ZCB7c3RhcnR8c3RvcHxzdGF0dXN8cmVsb2FkfGZvcmNlLXJlbG9hZHxyZXN0YXJ0fSIKKwlleGl0IDEKKwk7OworZXNhYworCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGQveGluZXRkLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVmZGM1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkL3hpbmV0ZC5zZXJ2aWNlCkBAIC0wLDAgKzEsMTMgQEAKK1tVbml0XQorRGVzY3JpcHRpb249WGluZXRkIEEgUG93ZXJmdWwgUmVwbGFjZW1lbnQgRm9yIEluZXRkCitBZnRlcj1zeXNsb2cudGFyZ2V0IG5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorVHlwZT1mb3JraW5nCitQSURGaWxlPS92YXIvcnVuL3hpbmV0ZC5waWQKK0Vudmlyb25tZW50RmlsZT0tL2V0Yy9zeXNjb25maWcveGluZXRkCitFeGVjU3RhcnQ9QFNCSU5ESVJAL3hpbmV0ZCAtc3RheWFsaXZlIC1waWRmaWxlIC92YXIvcnVuL3hpbmV0ZC5waWQgIiRFWFRSQU9QVElPTlMiCitFeGVjUmVsb2FkPUBCQVNFX0JJTkRJUkAva2lsbCAtSFVQICRNQUlOUElECisKK1tJbnN0YWxsXQorV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYiBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94aW5ldGQveGluZXRkXzIuMy4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmMwM2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3hpbmV0ZC94aW5ldGRfMi4zLjE1LmJiCkBAIC0wLDAgKzEsNjggQEAKK1NVTU1BUlkgPSAiU29ja2V0LWJhc2VkIHNlcnZpY2UgYWN0aXZhdGlvbiBkYWVtb24iCitIT01FUEFHRSA9ICJodHRwczovL2dpdGh1Yi5jb20veGluZXRkLW9yZy94aW5ldGQiCisKKyMgeGluZXRkIGlzIGEgQlNELWxpa2UgbGljZW5zZQorIyBBcHBsZSBhbmQgR2VudG9vIHNheSBCU0QgaGVyZS4KK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWVJJR0hUO21kNT04YWQ4NjE1MTk4NTQyNDQ0Zjg0ZDI4YTZjZjIyNmRkOCIKKworREVQRU5EUyA9ICIiCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3hpbmV0ZC1vcmcveGluZXRkLmdpdDtwcm90b2NvbD1odHRwcyBcCisgICAgICBmaWxlOi8veGluZXRkLmluaXQgXAorICAgICAgZmlsZTovL3hpbmV0ZC5jb25mIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuZGVmYXVsdCBcCisgICAgICBmaWxlOi8vVmFyaW91cy1maXhlcy1mcm9tLXRoZS1wcmV2aW91cy1tYWludGFpbmVyLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly9EaXNhYmxlLXNlcnZpY2VzLWZyb20taW5ldGQuY29uZi1pZi1hLXNlcnZpY2Utd2l0aC10LnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQtc2hvdWxkLWJlLWFibGUtdG8tbGlzdGVuLW9uLUlQdjYtZXZlbi1pbi1pbmUucGF0Y2ggXAorICAgICAgZmlsZTovL3hpbmV0ZC1DVkUtMjAxMy00MzQyLnBhdGNoIFwKKyAgICAgIGZpbGU6Ly94aW5ldGQuc2VydmljZSBcCisgICAgICAiCisKK1NSQ1JFViA9ICI2OGJiOWFiOWU5ZjIxNGFkOGEyMzIyZjI4YWMxZDY3MzNlNzBiYzI0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ4aW5ldGQuc2VydmljZSIKKworSU5JVFNDUklQVF9OQU1FID0gInhpbmV0ZCIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gImRlZmF1bHRzIgorCitFWFRSQV9PRUNPTkY9Ii0tZGlzYWJsZS1ubHMiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ0Y3Atd3JhcHBlcnMiCitQQUNLQUdFQ09ORklHW3RjcC13cmFwcGVyc10gPSAiLS13aXRoLWxpYndyYXAsLHRjcC13cmFwcGVycyIKKworZG9fY29uZmlndXJlKCkgeworCSMgTG9va3MgbGlrZSBjb25maWd1cmUuaW4gaXMgYnJva2VuLCBzbyB3ZSBhcmUgc2tpcHBpbmcKKwkjIHJlYnVpbGRpbmcgY29uZmlndXJlIGFuZCBhcmUganVzdCB1c2luZyB0aGUgc2hpcHBlZCBvbmUKKwkoIGNkICR7U307IGdudS1jb25maWdpemUgLS1mb3JjZSApCisJb2VfcnVuY29uZgorfQorCitkb19pbnN0YWxsKCkgeworCSMgU2FtZSBoZXJlLCB0aGUgTWFrZWZpbGUgZG9lcyBzb21lIHJlYWxseSBzdHVwaWQgdGhpbmdzLAorCSMgYnV0IHNpbmNlIHdlIG9ubHkgd2FudCB0d28gZmlsZXMgd2h5IG5vdCBvdmVycmlkZQorCSMgZG9faW5zdGFsbCBmcm9tIGF1dG90b29scyBhbmQgZG9pbmcgaXQgb3Vyc2VsZnM/CisJaW5zdGFsbCAtZCAiJHtEfSR7c2JpbmRpcn0iCisJaW5zdGFsbCAtZCAiJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L3hpbmV0ZC5kIgorCWluc3RhbGwgLWQgIiR7RH0ke3N5c2NvbmZkaXJ9L2RlZmF1bHQiCisJaW5zdGFsbCAtbSA2NDQgIiR7V09SS0RJUn0veGluZXRkLmNvbmYiICIke0R9JHtzeXNjb25mZGlyfSIKKwlpbnN0YWxsIC1tIDc1NSAiJHtXT1JLRElSfS94aW5ldGQuaW5pdCIgIiR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC94aW5ldGQiCisJaW5zdGFsbCAtbSA2NDQgIiR7V09SS0RJUn0veGluZXRkLmRlZmF1bHQiICIke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hpbmV0ZCIKKwlpbnN0YWxsIC1tIDc1NSAiJHtCfS94aW5ldGQveGluZXRkIiAiJHtEfSR7c2JpbmRpcn0iCisJaW5zdGFsbCAtbSA3NTUgIiR7Qn0veGluZXRkL2l0b3giICIke0R9JHtzYmluZGlyfSIKKworCSMgSW5zdGFsbCBzeXN0ZW1kIHVuaXQgZmlsZXMKKwlpbnN0YWxsIC1kICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0veGluZXRkLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0KKwlzZWQgLWkgLWUgJ3MsQEJBU0VfQklORElSQCwke2Jhc2VfYmluZGlyfSxnJyBcCisJICAgICAgIC1lICdzLEBTQklORElSQCwke3NiaW5kaXJ9LGcnIFwKKwkgICAgICAgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0veGluZXRkLnNlcnZpY2UKK30KKworQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0veGluZXRkLmNvbmYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQveHoveHpfNS4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBhZTQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC94ei94el81LjIuMS5iYgpAQCAtMCwwICsxLDM2IEBACitTVU1NQVJZID0gIlV0aWxpdGllcyBmb3IgbWFuYWdpbmcgTFpNQSBjb21wcmVzc2VkIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3R1a2Fhbmkub3JnL3h6LyIKK1NFQ1RJT04gPSAiYmFzZSIKKworIyBUaGUgc291cmNlIGluY2x1ZGVzIGJpdHMgb2YgUEQsIEdQTHYyLCBHUEx2MywgTEdQTHYyLjErLCBidXQgdGhlIG9ubHkgZmlsZQorIyB3aGljaCBpcyBHUEx2MyBpcyBhbiBtNCBtYWNybyB3aGljaCBpc24ndCBzaGlwcGVkIGluIGFueSBvZiBvdXIgcGFja2FnZXMsCisjIGFuZCB0aGUgTEdQTCBiaXRzIGFyZSB1bmRlciBsaWIvLCB3aGljaCBhcHBlYXJzIHRvIGJlIHVzZWQgZm9yIGxpYmdudSwgd2hpY2gKKyMgYXBwZWFycyB0byBiZSB1c2VkIGZvciBET1MgYnVpbGRzLiBTbyB3ZSdyZSBsZWZ0IHdpdGggR1BMdjIrIGFuZCBQRC4KK0xJQ0VOU0UgPSAiR1BMdjIrICYgR1BMdjMrICYgTEdQTHYyLjErICYgUEQiCitMSUNFTlNFXyR7UE59ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tc3RhdGljZGV2ID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZG9jID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tZGJnID0gIkdQTHYyKyIKK0xJQ0VOU0VfJHtQTn0tbG9jYWxlID0gIkdQTHYyKyIKK0xJQ0VOU0VfbGlibHptYSA9ICJQRCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzQ3NWI2YzdkY2EyMzY3NDBhY2U0YmJhNTUzZThlMWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MjttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MR1BMdjIuMTttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliL2dldG9wdC5jO2VuZGxpbmU9MjM7bWQ1PTIwNjliMGVlNzEwNTcyYzAzYmIzMTE0ZTQ1MzJjZDg0ICIKKworU1JDX1VSSSA9ICJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotJHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjNlNDRjNzY2YzNmYjRmMTllMzQ4ZTY0NmZjZDU3NzhhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI5MThiNjY0ODA3NmU3NGY4ZDdhZTE5ZGI1ZWU2NjNkZjgwMDA0OWUxODcyNTlmYWY1ZWI5OTdhN2I5NzQ2ODEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworUEFDS0FHRVMgPSsgImxpYmx6bWEiCisKK0ZJTEVTX2xpYmx6bWEgPSAiJHtsaWJkaXJ9L2xpYmx6bWEqJHtTT0xJQlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vc2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyMWM1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1leHRlbmRlZC96aXAvemlwLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIkNvbXByZXNzb3IvYXJjaGl2ZXIgZm9yIGNyZWF0aW5nIGFuZCBtb2RpZnlpbmcgLnppcCBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mby16aXAub3JnIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkJTRC0zLUNsYXVzZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTA0ZDQzYzVkNzBiNDk2YzAzMjMwODEwNmUyNmFlMTdkIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvc3JjL3ppcCR7QGQuZ2V0VmFyKCdQVicsMSkucmVwbGFjZSgnLicsICcnKX0udGd6IgorCitFWFRSQV9PRU1BS0UgPSAiJ0NDPSR7Q0N9JyAnQklORD0ke0NDfScgJ0FTPSR7Q0N9IC1jJyAnQ1BQPSR7Q1BQfScgXAorCQknQ0ZMQUdTPS1JLiAtRFVOSVggJHtDRkxBR1N9JyAnSU5TVEFMTD1pbnN0YWxsJyBcCisJCSdCSU5GTEFHUz0wNzU1JyAnSU5TVEFMTF9EPWluc3RhbGwgLWQnIgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBmbGFncyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQorCXNlZCAtaSAncyNMRkxBR1MxPSIiI0xGTEFHUzE9IiR7TERGTEFHU30iIycgZmxhZ3MKKwlvZV9ydW5tYWtlIC1mIHVuaXgvTWFrZWZpbGUgZ2VuZXJpYyBJWl9CWklQMj1ub19zdWNoX2RpcmVjdG9yeQorfQorCitkb19pbnN0YWxsKCkgeworCW9lX3J1bm1ha2UgLWYgdW5peC9NYWtlZmlsZSBwcmVmaXg9JHtEfSR7cHJlZml4fSBcCisJCSAgIEJJTkRJUj0ke0R9JHtiaW5kaXJ9IE1BTkRJUj0ke0R9JHttYW5kaXJ9L21hbjEgXAorCQkgICBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiIGIvbWV0YS9yZWNpcGVzLWV4dGVuZGVkL3ppcC96aXBfMy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZXh0ZW5kZWQvemlwL3ppcF8zLjAuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSB6aXAuaW5jCisKK1BSPSJyMiIKKworIyB6aXAtMi4zMiBzdGlsbCB1c2VzIGRpcmVjdG9yeSBuYW1lIG9mIHppcC0yLjMwCitTID0gIiR7V09SS0RJUn0vemlwMzAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3Yjc0NTUxZTYzZjhlZTZhYWI2ZmJjODY2NzZjMGQzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMGU4YmIxZjliN2ViMGIwMTI4NTQ5NWEyNjk5ZGYzYTRiNzY2Nzg0YzE3NjVhOGYxYWVlZGY2M2MwODA2MzY5IgorCisjIHppcC5pbmMgc2V0cyBDRkxBR1MsIGJ1dCB3aGF0IE1ha2VmaWxlIGFjdHVhbGx5IHVzZXMgaXMKKyMgQ0ZMQUdTX05PT1BULiAgSXQgd2lsbCBhbHNvIGZvcmNlIC1PMyBvcHRpbWl6YXRpb24sIG92ZXJyaWRpbmcKKyMgd2hhdGV2ZXIgd2Ugc2V0LgorIworRVhUUkFfT0VNQUtFX2FwcGVuZCA9ICIgJ0NGTEFHU19OT09QVD0tSS4gLURVTklYICR7Q0ZMQUdTfSciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZXBpcGhhbnkvZXBpcGhhbnlfMy4xNi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMTYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZmYjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2VwaXBoYW55XzMuMTYuMy5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIldlYktpdCBiYXNlZCB3ZWIgYnJvd3NlciBmb3IgR05PTUUiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCitERVBFTkRTID0gImxpYnNvdXAtMi40IHdlYmtpdGd0ayBndGsrMyBpc28tY29kZXMgY2EtY2VydGlmaWNhdGVzIGF2YWhpIGxpYm5vdGlmeSBnY3IgbGlid25jazMgXAorCSAgIGdzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMgZ25vbWUtZGVza3RvcDMiCisKK2luaGVyaXQgZ25vbWViYXNlIGdzZXR0aW5ncworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjMyOTZhZjQ1MzJiODAxOTc3NWY0YjQwZDIxYTM0MWFlIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiZDUyN2YxNzcwNzc5ZWMyMmQ5NTVhZWIxM2IxNDhhODQ2YTI2MTQ0ZTQzM2ZmMDQ4MGM5ODFhZjgwZTIzOTBiMSIKKworRVhUUkFfT0VDT05GICs9ICIgLS1kaXNhYmxlLW5zcyAtLXdpdGgtZGlzdHJpYnV0b3ItbmFtZT0ke0RJU1RST30iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHRvdWNoICR7U30vZ25vbWUtZG9jLXV0aWxzLm1ha2UKKyAgICBzZWQgLWkgLWUgczpoZWxwOjpnICR7U30vTWFrZWZpbGUuYW0KK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwZGF0YSAke2RhdGFkaXJ9L2RidXMtMSAke2RhdGFkaXJ9L2dub21lLXNoZWxsL3NlYXJjaC1wcm92aWRlcnMiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9lcGlwaGFueS8qL3dlYi1leHRlbnNpb25zLy5kZWJ1Zy9saWJlcGh5d2ViZXh0ZW5zaW9uLnNvIgorUkRFUEVORFNfJHtQTn0gPSAiaXNvLWNvZGVzIGFkd2FpdGEtaWNvbi10aGVtZSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImNhLWNlcnRpZmljYXRlcyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2VwaXBoYW55L2ZpbGVzLzAwMDEteWVscC5tNC1kcm9wLXRoZS1jaGVjay1mb3ItaXRzdG9vbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9maWxlcy8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4NWQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9lcGlwaGFueS9maWxlcy8wMDAxLXllbHAubTQtZHJvcC10aGUtY2hlY2stZm9yLWl0c3Rvb2wucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSAzMGYwM2EyNTZlZmUzNzVhNGQ1YzNhMjRiZjQxNjhlYmYzODBlM2FiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMwIEp1bCAyMDE1IDE1OjEzOjIzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIHllbHAubTQ6IGRyb3AgdGhlIGNoZWNrIGZvciBpdHN0b29sCisKK0l0IGlzbid0IHVzZWQgZm9yIGFueXRoaW5nIGR1cmluZyBidWlsZCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHByb3ZpZGUKK2l0IGFzIGEgcmVjaXBlLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW3RhcmJhbGwtc3BlY2lmaWMgaXNzdWVdCistLS0KKyBtNC95ZWxwLm00IHwgNiAtLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL200L3llbHAubTQgYi9tNC95ZWxwLm00CitpbmRleCA1ZGI4NDdmLi4xYjZlZGU0IDEwMDY0NAorLS0tIGEvbTQveWVscC5tNAorKysrIGIvbTQveWVscC5tNAorQEAgLTI3LDEyICsyNyw2IEBAIEFDX0FSR19XSVRIKFtoZWxwLWRpcl0sCisgSEVMUF9ESVI9IiR3aXRoX2hlbHBfZGlyIgorIEFDX1NVQlNUKEhFTFBfRElSKQorIAorLUFDX0FSR19WQVIoW0lUU1RPT0xdLCBbUGF0aCB0byB0aGUgYGl0c3Rvb2xgIGNvbW1hbmRdKQorLUFDX0NIRUNLX1BST0coW0lUU1RPT0xdLCBbaXRzdG9vbF0sIFtpdHN0b29sXSkKKy1pZiB0ZXN0IHgiJElUU1RPT0wiID0geDsgdGhlbgorLSAgQUNfTVNHX0VSUk9SKFtpdHN0b29sIG5vdCBmb3VuZF0pCistZmkKKy0KKyBBQ19BUkdfVkFSKFtYTUxMSU5UXSwgW1BhdGggdG8gdGhlIGB4bWxsaW50YCBjb21tYW5kXSkKKyBBQ19DSEVDS19QUk9HKFtYTUxMSU5UXSwgW3htbGxpbnRdLCBbeG1sbGludF0pCisgaWYgdGVzdCB4IiRYTUxMSU5UIiA9IHg7IHRoZW4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2djci9nY3JfMy4xNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWI2ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2NyL2djcl8zLjE2LjAuYmIKQEAgLTAsMCArMSwxOCBAQAorU1VNTUFSWSA9ICJBIGxpYnJhcnkgZm9yIGJpdHMgb2YgY3J5cHRvIFVJIGFuZCBwYXJzaW5nIGV0YyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUiCisKK0RFUEVORFMgPSAiZ3RrKzMgcDExLWtpdCBnbGliLTIuMCBsaWJnY3J5cHQgdmFsYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ25vbWViYXNlIGd0ay1pY29uLWNhY2hlIGd0ay1kb2MKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDU4MzU2ODBiZTBiNmE4MzhlMDJhNTI4ZDUzNzhkOWMiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlY2ZlOGRmNDFjYzg4MTU4MzY0YmIxNWFkZGM2NzBiMTFlNTM5ZmU4NDQ3NDI5ODM2MjliYTIzMjM4ODhkMDc1IgorCitGSUxFU18ke1BOfSArPSAiIFwKKyAgICAke2RhdGFkaXJ9L2RidXMtMSBcCisgICAgJHtkYXRhZGlyfS9nY3ItMyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTdjMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi8wMDAxLXBpeG9wcy1CZS1tb3JlLWNhcmVmdWwtYWJvdXQtaW50ZWdlci1vdmVyZmxvdy5wYXRjaApAQCAtMCwwICsxLDg5IEBACitGcm9tIGZmZWM4NmVkNTAxMGM1YTJiZTE0ZjQ3YjMzYmNmNGVkMzE2OWExOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXR0aGlhcyBDbGFzZW4gPG1jbGFzZW5AcmVkaGF0LmNvbT4KK0RhdGU6IE1vbiwgMTMgSnVsIDIwMTUgMDA6MzM6NDAgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGl4b3BzOiBCZSBtb3JlIGNhcmVmdWwgYWJvdXQgaW50ZWdlciBvdmVyZmxvdworCitPdXIgbG9hZGVyIGNvZGUgaXMgc3VwcG9zZWQgdG8gaGFuZGxlIG91dC1vZi1tZW1vcnkgYW5kIG92ZXJmbG93CitzaXR1YXRpb25zIGdyYWNlZnVsbHksIHJlcG9ydGluZyBlcnJvcnMgaW5zdGVhZCBvZiBhYm9ydGluZy4gQnV0CitpZiB5b3UgbG9hZCBhbiBpbWFnZSBhdCBhIHNwZWNpZmljIHNpemUsIHdlIGFsc28gZXhlY3V0ZSBvdXIKK3NjYWxpbmcgY29kZSwgd2hpY2ggd2FzIG5vdCBjYXJlZnVsIGVub3VnaCBhYm91dCBvdmVyZmxvdyBpbiBzb21lCitwbGFjZXMuCisKK1RoaXMgY29tbWl0IG1ha2VzIHRoZSBzY2FsaW5nIGNvZGUgc2lsZW50bHkgcmV0dXJuIGlmIGl0IGZhaWxzIHRvCithbGxvY2F0ZSBmaWx0ZXIgdGFibGVzLiBUaGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkbywgc2luY2UKK2dka19waXhidWZfc2NhbGUoKSBpcyBub3QgdGFraW5nIGEgR0Vycm9yLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUyMjk3CisKK1Vwc3RyZWFtLVN0YXR1czogYmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogTGkgWmhvdSA8bGkuemhvdUB3aW5kcml2ZXIuY29tPgorLS0tCisgZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMgfCAgIDIyICsrKysrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dkay1waXhidWYvcGl4b3BzL3BpeG9wcy5jIGIvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKK2luZGV4IDI5YTFjMTQuLmNlNTE3NDUgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL3BpeG9wcy9waXhvcHMuYworKysrIGIvZ2RrLXBpeGJ1Zi9waXhvcHMvcGl4b3BzLmMKK0BAIC0xMjcyLDcgKzEyNzIsMTYgQEAgbWFrZV9maWx0ZXJfdGFibGUgKFBpeG9wc0ZpbHRlciAqZmlsdGVyKQorICAgaW50IGlfb2Zmc2V0LCBqX29mZnNldDsKKyAgIGludCBuX3ggPSBmaWx0ZXItPngubjsKKyAgIGludCBuX3kgPSBmaWx0ZXItPnkubjsKKy0gIGludCAqd2VpZ2h0cyA9IGdfbmV3IChpbnQsIFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCAqIG5feSk7CisrICBnc2l6ZSBuX3dlaWdodHM7CisrICBpbnQgKndlaWdodHM7CisrCisrICBuX3dlaWdodHMgPSBTVUJTQU1QTEUgKiBTVUJTQU1QTEUgKiBuX3ggKiBuX3k7CisrICBpZiAobl93ZWlnaHRzIC8gKFNVQlNBTVBMRSAqIFNVQlNBTVBMRSAqIG5feCkgIT0gbl95KQorKyAgICByZXR1cm4gTlVMTDsgLyogb3ZlcmZsb3csIGJhaWwgKi8KKysKKysgIHdlaWdodHMgPSBnX3RyeV9uZXcgKGludCwgbl93ZWlnaHRzKTsKKysgIGlmICghd2VpZ2h0cykKKysgICAgcmV0dXJuIE5VTEw7IC8qIG92ZXJmbG93LCBiYWlsICovCisgCisgICBmb3IgKGlfb2Zmc2V0PTA7IGlfb2Zmc2V0IDwgU1VCU0FNUExFOyBpX29mZnNldCsrKQorICAgICBmb3IgKGpfb2Zmc2V0PTA7IGpfb2Zmc2V0IDwgU1VCU0FNUExFOyBqX29mZnNldCsrKQorQEAgLTEzNDcsOCArMTM1NiwxMSBAQCBwaXhvcHNfcHJvY2VzcyAoZ3VjaGFyICAgICAgICAgKmRlc3RfYnVmLAorICAgaWYgKHhfc3RlcCA9PSAwIHx8IHlfc3RlcCA9PSAwKQorICAgICByZXR1cm47IC8qIG92ZXJmbG93LCBiYWlsIG91dCAqLworIAorLSAgbGluZV9idWZzID0gZ19uZXcgKGd1Y2hhciAqLCBmaWx0ZXItPnkubik7CisgICBmaWx0ZXJfd2VpZ2h0cyA9IG1ha2VfZmlsdGVyX3RhYmxlIChmaWx0ZXIpOworKyAgaWYgKCFmaWx0ZXJfd2VpZ2h0cykKKysgICAgcmV0dXJuOyAvKiBvdmVyZmxvdywgYmFpbCBvdXQgKi8KKysKKysgIGxpbmVfYnVmcyA9IGdfbmV3IChndWNoYXIgKiwgZmlsdGVyLT55Lm4pOworIAorICAgY2hlY2tfc2hpZnQgPSBjaGVja19zaXplID8gZ2V0X2NoZWNrX3NoaWZ0IChjaGVja19zaXplKSA6IDA7CisgCitAQCAtMTQ2OCw3ICsxNDgwLDcgQEAgdGlsZV9tYWtlX3dlaWdodHMgKFBpeG9wc0ZpbHRlckRpbWVuc2lvbiAqZGltLAorIAkJICAgZG91YmxlICAgICAgICAgICAgICAgICBzY2FsZSkKKyB7CisgICBpbnQgbiA9IGNlaWwgKDEgLyBzY2FsZSArIDEpOworLSAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworICAgaW50IG9mZnNldDsKKyAgIGludCBpOworIAorQEAgLTE1MjYsNyArMTUzOCw3IEBAIGJpbGluZWFyX21hZ25pZnlfbWFrZV93ZWlnaHRzIChQaXhvcHNGaWx0ZXJEaW1lbnNpb24gKmRpbSwKKyAgICAgfQorIAorICAgZGltLT5uID0gbjsKKy0gIGRpbS0+d2VpZ2h0cyA9IGdfbmV3IChkb3VibGUsIFNVQlNBTVBMRSAqIG4pOworKyAgZGltLT53ZWlnaHRzID0gZ19tYWxsb2NfbiAoc2l6ZW9mIChkb3VibGUpICogU1VCU0FNUExFLCBuKTsKKyAKKyAgIHBpeGVsX3dlaWdodHMgPSBkaW0tPndlaWdodHM7CisgCitAQCAtMTYxNyw3ICsxNjI5LDcgQEAgYmlsaW5lYXJfYm94X21ha2Vfd2VpZ2h0cyAoUGl4b3BzRmlsdGVyRGltZW5zaW9uICpkaW0sCisgCQkJICAgZG91YmxlICAgICAgICAgICAgICAgICBzY2FsZSkKKyB7CisgICBpbnQgbiA9IGNlaWwgKDEvc2NhbGUgKyAzLjApOworLSAgZG91YmxlICpwaXhlbF93ZWlnaHRzID0gZ19uZXcgKGRvdWJsZSwgU1VCU0FNUExFICogbik7CisrICBkb3VibGUgKnBpeGVsX3dlaWdodHMgPSBnX21hbGxvY19uIChzaXplb2YgKGRvdWJsZSkgKiBTVUJTQU1QTEUsIG4pOworICAgZG91YmxlIHc7CisgICBpbnQgb2Zmc2V0LCBpOworIAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9leHRlbmRpbmctbGliaW5zdGFsbC1kZXBlbmRlbmNpZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRiZGNlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZXh0ZW5kaW5nLWxpYmluc3RhbGwtZGVwZW5kZW5jaWVzLnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitUaGlzIHBhdGNoIGZpeGVzIHBhcmFsbGVsIGluc3RhbGwgaXNzdWUgdGhhdCBsaWIgbGlicGl4YnVmbG9hZGVyLXBuZy5sYQorZGVwZW5kcyBvbiBsaWJnZGtfcGl4YnVmLTIuMC5sYSB3aGljaCB3aWxsIGJlIHJlZ2VuZXJhdGVkIGR1cmluZyBpbnN0YS0KK2xsYXRpb24sIGlmIGxpYmdka19waXhidWYtMi4wLmxhIGlzIHJlZ2VuZXJhdGluZyBhbmQgYXQgdGhlIHNhbWUgdGltZQorbGlicGl4YnVmbG9hZGVyLXBuZy5sYSBsaW5rcyBpdCwgdGhlIGVycm9yIHdpbGwgaGFwcGVuLgorCitFcnJvciBtZXNzYWdlIGlzOgorKiB1c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbGdka19waXhidWYtMi4wCisqIGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzCisKK01ha2UgYW4gZXhwbGljaXQgZGVwZW5kZW5jeSB0byB0aGUgbGlicyBpbnN0YWxsIHRhcmdldHMgd291bGQgZml4IHRoaXMKK2lzc3VlLgorCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGdkay1waXhidWYvTWFrZWZpbGUuYW0gfCAgICAxICsKKyBsaWJkZXBzLm1rICAgICAgICAgICAgIHwgICAgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZGVwcy5taworCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9NYWtlZmlsZS5hbSBiL2dkay1waXhidWYvTWFrZWZpbGUuYW0KK2luZGV4IDk1YTkzYTguLmRiNDRjYWUgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL01ha2VmaWxlLmFtCisrKysgYi9nZGstcGl4YnVmL01ha2VmaWxlLmFtCitAQCAtNzgzLDMgKzc4Myw0IEBAIGxvYWRlcnMuY2FjaGU6CisgZW5kaWYKKyAKKyAtaW5jbHVkZSAkKHRvcF9zcmNkaXIpL2dpdC5taworKy1pbmNsdWRlICQodG9wX3NyY2RpcikvbGliZGVwcy5taworZGlmZiAtLWdpdCBhL2xpYmRlcHMubWsgYi9saWJkZXBzLm1rCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDdhMTBhOAorLS0tIC9kZXYvbnVsbAorKysrIGIvbGliZGVwcy5taworQEAgLTAsMCArMSwzIEBACisrIyBFeHRlbmRpbmcgZGVwZW5kZW5jaWVzIG9mIGluc3RhbGwtbG9hZGVyTFRMSUJSQVJJRVM6CisrIyBUaGUgJChsaWItTFRMSUJSQVJJRVMpIGlzIG5lZWRlZCBieSByZWxpbmtpbmcgJChsb2FkZXJfTFRMSUJSQVJJRVMpCisraW5zdGFsbC1sb2FkZXJMVExJQlJBUklFUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworLS0gCisxLjcuNi4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9mYXRhbC1sb2FkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxNDZjNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvZmF0YWwtbG9hZGVyLnBhdGNoCkBAIC0wLDAgKzEsNzkgQEAKK0lmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNwZWNpZmllZCBzZXQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4oKSB0bworbm9uLXplcm8gaWYgdGhlIGxvYWRlciBoYWQgZXJyb3JzIChtaXNzaW5nIGxpYnJhcmllcywgZ2VuZXJhbGx5KS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2RrLXBpeGJ1Zi9xdWVyeWxvYWRlcnMuYyBiL2dkay1waXhidWYvcXVlcnlsb2FkZXJzLmMKK2luZGV4IGE5Y2EwMTUuLjM5NTY3NGEgMTAwNjQ0CistLS0gYS9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCisrKysgYi9nZGstcGl4YnVmL3F1ZXJ5bG9hZGVycy5jCitAQCAtMTQ2LDcgKzE0Niw3IEBAIHdyaXRlX2xvYWRlcl9pbmZvIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqcGF0aCwgR2RrUGl4YnVmRm9ybWF0ICppbmZvKQorICAgICAgICAgZ19zdHJpbmdfYXBwZW5kX2MgKGNvbnRlbnRzLCAnXG4nKTsKKyB9CisgCistc3RhdGljIHZvaWQKKytzdGF0aWMgZ2Jvb2xlYW4KKyBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgeworICAgICAgICAgY2hhciAqcGF0aDsKK0BAIC0xNTUsNiArMTU1LDcgQEAgcXVlcnlfbW9kdWxlIChHU3RyaW5nICpjb250ZW50cywgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpmaWxlKQorICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKCpmaWxsX3Z0YWJsZSkgICAoR2RrUGl4YnVmTW9kdWxlICptb2R1bGUpOworICAgICAgICAgZ3BvaW50ZXIgZmlsbF9pbmZvX3B0cjsKKyAgICAgICAgIGdwb2ludGVyIGZpbGxfdnRhYmxlX3B0cjsKKysgICAgICAgIGdib29sZWFuIHJldCA9IFRSVUU7CisgCisgICAgICAgICBpZiAoZ19wYXRoX2lzX2Fic29sdXRlIChmaWxlKSkKKyAgICAgICAgICAgICAgICAgcGF0aCA9IGdfc3RyZHVwIChmaWxlKTsKK0BAIC0yMDQsMTAgKzIwNSwxMyBAQCBxdWVyeV9tb2R1bGUgKEdTdHJpbmcgKmNvbnRlbnRzLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX21vZHVsZV9lcnJvcigpKTsKKyAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfZnByaW50ZiAoc3RkZXJyLCAiQ2Fubm90IGxvYWQgbG9hZGVyICVzXG4iLCBwYXRoKTsKKysgICAgICAgICAgICAgICAgcmV0ID0gRkFMU0U7CisgICAgICAgICB9CisgICAgICAgICBpZiAobW9kdWxlKQorICAgICAgICAgICAgICAgICBnX21vZHVsZV9jbG9zZSAobW9kdWxlKTsKKyAgICAgICAgIGdfZnJlZSAocGF0aCk7CisrCisrICAgICAgICByZXR1cm4gcmV0OworIH0KKyAKKyAjaWZkZWYgR19PU19XSU4zMgorQEAgLTI1Nyw2ICsyNjEsNyBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgR1N0cmluZyAqY29udGVudHM7CisgICAgICAgICBnY2hhciAqY2FjaGVfZmlsZSA9IE5VTEw7CisgICAgICAgICBnaW50IGZpcnN0X2ZpbGUgPSAxOworKyAgICAgICAgZ2Jvb2xlYW4gc3VjY2VzcyA9IFRSVUU7CisgCisgI2lmZGVmIEdfT1NfV0lOMzIKKyAgICAgICAgIGdjaGFyICpsaWJkaXI7CitAQCAtMzYwLDcgKzM2NSw4IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbiA9IHN0cmxlbiAoZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gU09FWFRfTEVOICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY21wIChkZW50ICsgbGVuIC0gU09FWFRfTEVOLCBTT0VYVCkgPT0gMCkgeworLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBwYXRoLCBkZW50KTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeV9tb2R1bGUgKGNvbnRlbnRzLCBwYXRoLCBkZW50KSkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIGdfZGlyX2Nsb3NlIChkaXIpOworQEAgLTM3OCw3ICszODQsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgICAgICAgICAgICAgIGluZmlsZW5hbWUgPSBnX2xvY2FsZV90b191dGY4IChpbmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgI2VuZGlmCistICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlfbW9kdWxlIChjb250ZW50cywgY3dkLCBpbmZpbGVuYW1lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5X21vZHVsZSAoY29udGVudHMsIGN3ZCwgaW5maWxlbmFtZSkpCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRkFMU0U7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgZ19mcmVlIChjd2QpOworICAgICAgICAgfQorQEAgLTM5NCw1ICs0MDEsOCBAQCBpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBnX3ByaW50ICgiJXNcbiIsIGNvbnRlbnRzLT5zdHIpOworIAorLSAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoZ19nZXRlbnYgKCJHREtfUElYQlVGX0ZBVEFMX0xPQURFUiIpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcyA/IDAgOiAxOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2NhNjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dkay1waXhidWYvZ2RrLXBpeGJ1Zi9oYXJkY29kZWRfbGlidG9vbC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnZGstcGl4YnVmLTIuMjIuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnZGstcGl4YnVmLTIuMjIuMS5vcmlnL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDA5OjA2OjM0LjAwMDAwMDAwMCArMDgwMAorKysrIGdkay1waXhidWYtMi4yMi4xL2NvbmZpZ3VyZS5hYwkyMDEwLTExLTI2IDA5OjA3OjMzLjAwMDAwMDAwMCArMDgwMAorQEAgLTI4Nyw3ICsyODcsNyBAQAorIGNhc2UgJGVuYWJsZV9leHBsaWNpdF9kZXBzIGluCisgICBhdXRvKQorICAgICBleHBvcnQgU0VECistICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisrICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kPWAoLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnOyBlY2hvICdldmFsIGVjaG8gXCIkZGVwbGlic19jaGVja19tZXRob2RcIicpIHwgc2hgCisgICAgIGlmIHRlc3QgIngkZGVwbGlic19jaGVja19tZXRob2QiICchPScgeHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNDg0LDcgKzQ4NCw3IEBACisgICAgIGRubCBOb3cgd2UgY2hlY2sgdG8gc2VlIGlmIG91ciBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWIgZGVwcworICAgICBkbmwgKGluIGEgcmF0aGVyIHVnbHkgd2F5IGV2ZW4pCisgICAgIGlmICRkeW53b3JrczsgdGhlbgorLSAgICAgICAgcGl4YnVmX2xpYnRvb2xfY29uZmlnPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSAuL2xpYnRvb2wgLS1jb25maWciCisrICAgICAgICBwaXhidWZfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIHBpeGJ1Zl9kZXBsaWJzX2NoZWNrPWAkcGl4YnVmX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtOTU3LDcgKzk1Nyw3IEBACisgIyBXZSBhcmUgdXNpbmcgZ21vZHVsZS1uby1leHBvcnQgbm93LCBidXQgSSdtIGxlYXZpbmcgdGhlIHN0cmlwcGluZworICMgY29kZSBpbiBwbGFjZSBmb3Igbm93LCBzaW5jZSBwYW5nbyBhbmQgYXRrIHN0aWxsIHJlcXVpcmUgZ21vZHVsZS4KKyBleHBvcnQgU0VECistZXhwb3J0X2R5bmFtaWM9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKytleHBvcnRfZHluYW1pYz1gKC4vJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19QSVhCVUZfREVQX0xJQlM9YGVjaG8gJEdES19QSVhCVUZfREVQX0xJQlMgfCBzZWQgLWUgInMvJGV4cG9ydF9keW5hbWljLy8iYAorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWYvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTA3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBnZGstcGl4YnVmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9nZGstcGl4YnVmL2dkay1waXhidWZfMi4zMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzJkY2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ2RrLXBpeGJ1Zi9nZGstcGl4YnVmXzIuMzAuOC5iYgpAQCAtMCwwICsxLDk3IEBACitTVU1NQVJZID0gIkltYWdlIGxvYWRpbmcgbGlicmFyeSBmb3IgR1RLKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ3RrLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGstcGl4YnVmL2dkay1waXhidWYuaDtlbmRsaW5lPTI2O21kNT03MmIzOWRhN2NiZGRlMmU2NjUzMjlmZWY2MThlMWQ2YiIKKworU0VDVElPTiA9ICJsaWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIgorREVQRU5EU19hcHBlbmRfbGludXhzdGRiYXNlID0gIiB2aXJ0dWFsL2xpYngxMSIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2V4dGVuZGluZy1saWJpbnN0YWxsLWRlcGVuZGVuY2llcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vZmF0YWwtbG9hZGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGl4b3BzLUJlLW1vcmUtY2FyZWZ1bC1hYm91dC1pbnRlZ2VyLW92ZXJmbG93LnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGZlZDBkNTQ0MzJmMWI2OWZjNmU2NmU2MDhiZDU1NDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDg1MzgzMDYxNjExM2RiNDQzNTgzNzk5MmMwYWViZDk0Y2JiOTkzYzQ0ZGM1NTA2M2NlZTdmNzJhN2JlZjhiZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgcGl4YnVmY2FjaGUgcHRlc3QtZ25vbWUKKworTElCViA9ICIyLjEwLjAiCisKK0dES19QSVhCVUZfTE9BREVSUyA/PSAicG5nIGpwZWciCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0dES19QSVhCVUZfTE9BREVSU30iCitQQUNLQUdFQ09ORklHX2xpbnV4c3RkYmFzZSA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9ICR7R0RLX1BJWEJVRl9MT0FERVJTfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID0gIiR7R0RLX1BJWEJVRl9MT0FERVJTfSIKKworUEFDS0FHRUNPTkZJR1twbmddID0gIi0td2l0aC1saWJwbmcsLS13aXRob3V0LWxpYnBuZyxsaWJwbmciCitQQUNLQUdFQ09ORklHW2pwZWddID0gIi0td2l0aC1saWJqcGVnLC0td2l0aG91dC1saWJqcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0td2l0aC1saWJ0aWZmLC0td2l0aG91dC1saWJ0aWZmLHRpZmYiCitQQUNLQUdFQ09ORklHW2pwZWcyMDAwXSA9ICItLXdpdGgtbGliamFzcGVyLC0td2l0aG91dC1saWJqYXNwZXIsamFzcGVyIgorCisjIFVzZSBHSU8gdG8gc25pZmYgaW1hZ2UgZm9ybWF0IGluc3RlYWQgb2YgdHJ5aW5nIGFsbCBsb2FkZXJzCitQQUNLQUdFQ09ORklHW2dpby1zbmlmZl0gPSAiLS1lbmFibGUtZ2lvLXNuaWZmaW5nLC0tZGlzYWJsZS1naW8tc25pZmZpbmcsLHNoYXJlZC1taW1lLWluZm8iCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS13aXRoLXgxMSwtLXdpdGhvdXQteDExLHZpcnR1YWwvbGlieDExIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1BBQ0tBR0VTID0rICIke1BOfS14bGliIgorCitGSUxFU18ke1BOfS14bGliID0gIiR7bGliZGlyfS8qcGl4YnVmX3hsaWIqJHtTT0xJQlN9IgorQUxMT1dfRU1QVFlfJHtQTn0teGxpYiA9ICIxIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1xdWVyeS1sb2FkZXJzIFwKKwkke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1waXhkYXRhIFwKKwkke2xpYmRpcn0vbGliKi5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisJJHtiaW5kaXJ9L2dkay1waXhidWYtY3NvdXJjZSBcCisJJHtpbmNsdWRlZGlyfS8qIFwKKwkke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisgICAgICAgICR7bGliZGlyfS8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcvKiBcCisiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5nZGstcGl4YnVmLWxvYWRlci0uKiIKK1BBQ0tBR0VTX0RZTkFNSUNfY2xhc3MtbmF0aXZlID0gIiIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHBvc3RpbnN0X3BpeGJ1ZmxvYWRlciA9IGQuZ2V0VmFyKCJwb3N0aW5zdF9waXhidWZsb2FkZXIiLCBUcnVlKQorCisgICAgbG9hZGVyc19yb290ID0gZC5leHBhbmQoJyR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMnKQorCisgICAgcGFja2FnZXMgPSAnICcuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBsb2FkZXJzX3Jvb3QsICdebGlicGl4YnVmbG9hZGVyLSguKilcLnNvJCcsICdnZGstcGl4YnVmLWxvYWRlci0lcycsICdHREsgcGl4YnVmIGxvYWRlciBmb3IgJXMnKSkKKyAgICBkLnNldFZhcignUElYQlVGX1BBQ0tBR0VTJywgcGFja2FnZXMpCisKKyAgICAjIFRoZSB0ZXN0IHN1aXRlIGV4ZXJjaXNlcyBhbGwgdGhlIGxvYWRlcnMsIHNvIGVuc3VyZSB0aGV5IGFyZSBhbGwKKyAgICAjIGRlcGVuZGVuY2llcyBvZiB0aGUgcHRlc3QgcGFja2FnZS4KKyAgICBkLmFwcGVuZFZhcigiUkRFUEVORFNfZ2RrLXBpeGJ1Zi1wdGVzdCIsICIgIiArIHBhY2thZ2VzKQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUoKSB7CisJZmluZCAke0R9JHtsaWJkaXJ9IC1uYW1lICJsaWJwaXhidWZsb2FkZXItKi5sYSIgLWV4ZWMgcm0gXHtcfSBcOworCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vZ2RrLXBpeGJ1Zi1jc291cmNlIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvJHtMSUJWfS9sb2FkZXJzLmNhY2hlCisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9nZGstcGl4YnVmLXBpeGRhdGEgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMuY2FjaGUKKworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2dkay1waXhidWYtcXVlcnktbG9hZGVycyBcCisJCUdES19QSVhCVUZfTU9EVUxFX0ZJTEU9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L2dkay1waXhidWYtMi4wLyR7TElCVn0vbG9hZGVycy5jYWNoZSBcCisJCUdES19QSVhCVUZfTU9EVUxFRElSPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8ke0xJQlZ9L2xvYWRlcnMKK30KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lLWRlc2t0b3AvZ25vbWUtZGVza3RvcDNfMy4xNi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMmYwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUtZGVza3RvcC9nbm9tZS1kZXNrdG9wM18zLjE2LjIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJHTk9NRSBsaWJyYXJ5IGZvciByZWFkaW5nIC5kZXNrdG9wIGZpbGVzIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAiZ25vbWUtZGVza3RvcCIKKworaW5oZXJpdCBnbm9tZSBwa2djb25maWcKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImFiNWJmNGNjOTRhZDYzNjM5ZjQyYWRjYzE1NDJiMWYwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiM2E4ZjE5NmI0NmViOWRiZDNiYTJhZmI4ZmI1ZmVmNmE4ODI1NTM5ZDQ0OWEwMjE4MTMxMTI0MmUyMjIyN2JkMCIKKworREVQRU5EUyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyBnY29uZiBsaWJ4cmFuZHIgdmlydHVhbC9saWJ4MTEgZ3RrKzMgZ2xpYi0yLjAgZ25vbWUtZG9jLXV0aWxzIGdub21lLWNvbW1vbiBzdGFydHVwLW5vdGlmaWNhdGlvbiBpc28tY29kZXMiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtZGVza3RvcC1kb2NzIgorCitQQUNLQUdFUyA9KyAibGliZ25vbWUtZGVza3RvcDMiCitGSUxFU19saWJnbm9tZS1kZXNrdG9wMyA9ICIke2xpYmRpcn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9L2xpYmdub21lLWRlc2t0b3AqL3BucC5pZHMgJHtkYXRhZGlyfS9nbm9tZS8qeG1sIgorCitSUkVDT01NRU5EU19saWJnbm9tZS1kZXNrdG9wMyArPSAiZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZmOWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZS9DcmVhdGUtc3ltbGlua3Mtd2hlbi1pbnN0YWxsaW5nLWN1cnNvcnMucGF0Y2gKQEAgLTAsMCArMSwxNzggQEAKK0NyZWF0ZSBzeW1saW5rcyB3aGVuIGluc3RhbGxpbmcgY3Vyc29ycworCitUaGlzIGN1dHMgZG93biB0aGUgaW5zdGFsbGVkIHNpemUgYnkgfjExTUIuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworRnJvbSAxZThjMGRkMGEyZGU1ZTFkNWZmNjBmZjExZjEzMWU4ODUxMGM3ZjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xPz1EMD1BMD1EMT04Mz1EMT04MT1EMD1CQj1EMD1CMD1EMD1CRD0yMD1EMD05OD1EMD1CNj1EMD1CMT89CisgPT9VVEYtOD9xPz1EMT04Mz1EMD1CQj1EMD1CMD1EMT04Mj1EMD1CRT1EMD1CMj89IDxscm4xOTg2QGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTYgTWF5IDIwMTUgMDc6NDk6MTkgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ3JlYXRlIHN5bWxpbmtzIHdoZW4gaW5zdGFsbGluZyBjdXJzb3JzCisKK0Fsc28gc3VwcG9ydCBjcmVhdGluZyBzeW1saW5rcyBmb3IgVzMyIGN1cnNvcnMgKGluY2x1ZGluZyBMIGFuZCBYTCB2YXJpYW50cykuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkyMjMKKy0tLQorIE1ha2VmaWxlLmFtICB8IDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGNvbmZpZ3VyZS5hYyB8IDI0ICsrKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBmZWQzOTcyLi40ZDAwMjY4IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNiw2ICs2LDE3IEBAIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00ICR7QUNMT0NBTF9GTEFHU30KKyAKKyBjdXJzb3JkaXIgPSAkKGRhdGFkaXIpL2ljb25zL0Fkd2FpdGEvY3Vyc29ycworIGN1cnNvcl9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS9jdXJzb3JzLyopCisraWYgRU5BQkxFX0xfWExfVkFSSUFOVFMKKytjdXJzb3JsZGlyID0gJChkYXRhZGlyKS9pY29ucy9BZHdhaXRhLUxhcmdlL2N1cnNvcnMKKytjdXJzb3JsX0RBVEEgPSAkKHdpbGRjYXJkICQoc3JjZGlyKS9BZHdhaXRhLUxhcmdlL2N1cnNvcnMvKikKKytjdXJzb3J4bGRpciA9ICQoZGF0YWRpcikvaWNvbnMvQWR3YWl0YS1FeHRyYUxhcmdlL2N1cnNvcnMKKytjdXJzb3J4bF9EQVRBID0gJCh3aWxkY2FyZCAkKHNyY2RpcikvQWR3YWl0YS1FeHRyYUxhcmdlL2N1cnNvcnMvKikKKytlbHNlCisrY3Vyc29ybGRpciA9CisrY3Vyc29ybF9EQVRBID0KKytjdXJzb3J4bGRpciA9CisrY3Vyc29yeGxfREFUQSA9CisrZW5kaWYKKyAKKyB0aGVtZV9pbl9maWxlcyA9IGluZGV4LnRoZW1lLmluLmluCisgdGhlbWVfREFUQSA9ICQodGhlbWVfaW5fZmlsZXM6LnRoZW1lLmluLmluPS50aGVtZSkKK0BAIC05OSw2ICsxMTAsODggQEAgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAlmaQorIAorIGluc3RhbGwtZGF0YS1ob29rOgorKwljZCAkKERFU1RESVIpJChjdXJzb3JkaXIpICYmIFwKKysJaWYgdGVzdCAieCQoZW5hYmxlX3czMl9jdXJzb3JzKSIgPSAieHllcyI7IFwKKysJdGhlbiBcCisrCQljdXI9LmN1ciAmJiBcCisrCQlhbmk9LmFuaTsgXAorKwllbHNlIFwKKysJCWN1cj0gJiYgXAorKwkJYW5pPSA7IFwKKysJZmk7IFwKKysJaWYgdGVzdCAieCQoZW5hYmxlX2xfeGxfdmFyaWFudHMpIiA9ICJ4eWVzIjsgXAorKwl0aGVuIFwKKysJCXRoZW1lZGlycz0iJChjdXJzb3JkaXIpICQoY3Vyc29ybGRpcikgJChjdXJzb3J4bGRpcikiOyBcCisrCWVsc2UgXAorKwkJdGhlbWVkaXJzPSIkKGN1cnNvcmRpcikiOyBcCisrCWZpOyBcCisrCWZvciBkIGluICQkdGhlbWVkaXJzOyBcCisrCWRvIFwKKysJCWNkICQoREVTVERJUikkJGQgJiYgXAorKwkJZWNobyBDcmVhdGluZyBzeW1saW5rcyBpbiAkKERFU1RESVIpJCRkICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJZHJhcGVkX2JveCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJaWNvbiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGRvdGJveCQkY3VyCQkJdGFyZ2V0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG90Ym94JCRjdXIJCQlkb3RfYm94X21hc2skJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBYX2N1cnNvciQkY3VyCQlwaXJhdGUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQkwOGU4ZTFjOTVmZTJmYzAxZjk3NmYxZTA2M2EyNGNjZCQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIGxlZnRfcHRyX3dhdGNoJCRhbmkJCTNlY2I2MTBjMWJmMjQxMGY0NDIwMGY0OGM0MGQzNTk5JCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJYXJyb3ckJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0ciQkY3VyCQl0b3BfbGVmdF9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3B0ciQkY3VyCQlkcmFmdF9sYXJnZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHJpZ2h0X3B0ciQkY3VyCQlkcmFmdF9zbWFsbCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIG1vdmUkJGN1cgkJCTQ0OThmMGUwYzE5MzdmZmUwMWZkMDZmOTczNjY1ODMwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbW92ZSQkY3VyCQkJOTA4MTIzNzM4M2Q5MGU1MDlhYTAwZjAwMTcwZTk2OGYkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjb3B5JCRjdXIJCQkxMDgxZTM3MjgzZDkwMDAwODAwMDAzYzA3ZjNlZjZiZiQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNvcHkkJGN1cgkJCTY0MDdiMGU5NDE4MTc5MDUwMWZkMWUxNjdiNDc0ODcyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWNyb3NzX3JldmVyc2UkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zcyQkY3VyCQkJZGlhbW9uZF9jcm9zcyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQxJCRjdXIJCQlncmFiJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCTlkODAwNzg4ZjFiMDg4MDBhZTgxMDIwMjM4MGEwODIyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCWUyOTI4NWU2MzQwODYzNTI5NDZhMGU3MDkwZDczMTA2JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgaGFuZDIkJGN1cgkJCWhhbmQkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBncmFiYmluZyQkY3VyCQlmbGV1ciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHF1ZXN0aW9uX2Fycm93JCRjdXIJCWQ5Y2UwYWI2MDU2OThmMzIwNDI3Njc3YjQ1OGFkNjBiJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJNWM2Y2Q5OGIzZjNlYmNiMWY5YzdmMWMyMDQ2MzA0MDgkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBxdWVzdGlvbl9hcnJvdyQkY3VyCQloZWxwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgcXVlc3Rpb25fYXJyb3ckJGN1cgkJbGVmdF9wdHJfaGVscCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGxpbmskJGN1cgkJCTMwODVhMGUyODU0MzA4OTQ5NDA1MjcwMzJmOGIyNmRmJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGluayQkY3VyCQkJNjQwZmIwZTc0MTk1NzkxNTAxZmQxZWQ1N2I0MTQ4N2YkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBjcm9zc2VkX2NpcmNsZSQkY3VyCQkwM2I2ZTBmY2IzNDk5Mzc0YTg2N2MwNDFmNTIyOThmMCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGZkX2RvdWJsZV9hcnJvdyQkY3VyCWZjZjFjM2M3Y2Q0NDkxZDgwMWYxZTFjNzhmMTAwMDAwJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYmRfZG91YmxlX2Fycm93JCRjdXIJYzcwODhmMGYzZTZjODA4ODIzNmVmOGUxZTNlNzAwMDAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBzYl9oX2RvdWJsZV9hcnJvdyQkY3VyIAloX2RvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJMTRmZWY3ODJkMDI0NDA4ODQzOTI5NDJjMTEyMDUyMzAkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBoX2RvdWJsZV9hcnJvdyQkY3VyCQkwMjgwMDYwMzBlMGU3ZWJmZmM3ZjcwNzBjMDYwMDE0MCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIgCWRvdWJsZV9hcnJvdyQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX3ZfZG91YmxlX2Fycm93JCRjdXIgCXZfZG91YmxlX2Fycm93JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cgkyODcwYTA5MDgyYzEwMzA1MDgxMGZmZGZmZmZlMDIwNCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHZfZG91YmxlX2Fycm93JCRjdXIJCTAwMDA4MTYwMDAwMDA2ODEwMDAwNDA4MDgwMDEwMTAyJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgbGVmdF9wdHIkJGN1cgkJZGVmYXVsdCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGhhbmQkJGN1cgkJCXBvaW50ZXIkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3B0cl93YXRjaCQkYW5pCQlwcm9ncmVzcyQkYW5pICYmIFwKKysJCSQoTE5fUykgLWYgIHdhdGNoJCRhbmkJCQl3YWl0JCRhbmkgJiYgXAorKwkJJChMTl9TKSAtZiAgY3Jvc3MkJGN1cgkJCWNyb3NzaGFpciQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHh0ZXJtJCRjdXIJCQl0ZXh0JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLWxpbmskJGN1cgkJYWxpYXMkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBkbmQtY29weSQkY3VyCQljb3B5JCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgZG5kLW5vbmUkJGN1cgkJbm8tZHJvcCQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGNyb3NzZWRfY2lyY2xlJCRjdXIJCW5vdC1hbGxvd2VkJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2JfaF9kb3VibGVfYXJyb3ckJGN1cgljb2wtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cglyb3ctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX3NpZGUkJGN1cgkJbi1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICByaWdodF9zaWRlJCRjdXIJCWUtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX3NpZGUkJGN1cgkJcy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBsZWZ0X3NpZGUkJGN1cgkJdy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICB0b3BfcmlnaHRfY29ybmVyJCRjdXIJbmUtcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgdG9wX2xlZnRfY29ybmVyJCRjdXIJbnctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgYm90dG9tX3JpZ2h0X2Nvcm5lciQkY3VyCXNlLXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJvdHRvbV9sZWZ0X2Nvcm5lciQkY3VyCXN3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIHNiX2hfZG91YmxlX2Fycm93JCRjdXIJZXctcmVzaXplJCRjdXIgJiYgXAorKwkJJChMTl9TKSAtZiAgc2Jfdl9kb3VibGVfYXJyb3ckJGN1cglucy1yZXNpemUkJGN1ciAmJiBcCisrCQkkKExOX1MpIC1mICBmZF9kb3VibGVfYXJyb3ckJGN1cgluZXN3LXJlc2l6ZSQkY3VyICYmIFwKKysJCSQoTE5fUykgLWYgIGJkX2RvdWJsZV9hcnJvdyQkY3VyCW53c2UtcmVzaXplJCRjdXI7IFwKKysJZG9uZQorIAlpZiB0ZXN0IC16ICIkKERFU1RESVIpIiAmJiB0ZXN0IC1uICIkKEdUS19VUERBVEVfSUNPTl9DQUNIRSkiIDsgdGhlbiBcCisgCQkkKEdUS19VUERBVEVfSUNPTl9DQUNIRSkgLXEgJChERVNURElSKSQodGhlbWVkaXIpOyBcCisgCWZpCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5ZTRkOGEwLi4zMTJiMjRjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMSw2ICszMSw3IEBAIEFDX1NVQlNUKFtyZW5kZXJfc2l6ZXNdLCBbIjh4OCAxNngxNiAyMngyMiAyNHgyNCAzMngzMiA0OHg0OCAyNTZ4MjU2Il0pCisgQUNfU1VCU1QoW3N5bWJvbGljX3JlbmRlcl9zaXplc10sIFsiIl0pCisgQUNfU1VCU1QoW2luc3RhbGxfc2l6ZXNdLCBbIjh4OCAxNngxNiAyMngyMiAyNHgyNCAzMngzMiA0OHg0OCA2NHg2NCA5Nng5NiAyNTZ4MjU2Il0pCisgCisrQUNfUFJPR19MTl9TCisgQUNfUEFUSF9QUk9HKEdUS19VUERBVEVfSUNPTl9DQUNIRSwgZ3RrLXVwZGF0ZS1pY29uLWNhY2hlKQorIAorICMgbmVlZCBnaXQsIGljb250b29sLCBhbmQgaW5rc2NhcGUgZm9yIHJlbmRlcmluZworQEAgLTU2LDYgKzU3LDI5IEBAIGlmIHRlc3QgIngkR1RLX0VOQ09ERV9TWU1CT0xJQ19TVkciID0gInhmYWxzZSI7IHRoZW4KKyBmaQorIEFDX1NVQlNUKHN5bWJvbGljX2VuY29kZV9zaXplcykKKyAKKytBQ19BUkdfRU5BQkxFKFt3MzItY3Vyc29yc10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXczMi1jdXJzb3JzXSwKKysgICAgW01ha2UgYW5kIGluc3RhbGwgV2luZG93cyBjdXJzb3JzICguY3VyIGFuZCAuYW5pKSBpbnN0ZWFkIG9mIFggY3Vyc29yc10pXSwKKysgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgIHllcykgZW5hYmxlX3czMl9jdXJzb3JzPXllcyA7OworKyAgICBubykgIGVuYWJsZV93MzJfY3Vyc29ycz1ubyA7OworKyAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLXczMi1jdXJzb3JzXSkgOzsKKysgICBlc2FjXSwKKysgIFtlbmFibGVfdzMyX2N1cnNvcnM9bm9dKQorK0FDX1NVQlNUKGVuYWJsZV93MzJfY3Vyc29ycykKKysKKytBQ19BUkdfRU5BQkxFKFtsLXhsLXZhcmlhbnRzXSwKKysgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbC14bC12YXJpYW50c10sCisrICAgIFtBbHNvIG1ha2UgYW5kIGluc3RhbGwgTGFyZ2UgYW5kIEV4dHJhIExhcmdlIFdpbmRvd3MgY3Vyc29yIHZlcnNpb25zXSldLAorKyAgW2Nhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKysgICAgeWVzKSBlbmFibGVfbF94bF92YXJpYW50cz15ZXMgOzsKKysgICAgbm8pICBlbmFibGVfbF94bF92YXJpYW50cz1ubyA7OworKyAgICAqKSBBQ19NU0dfRVJST1IoW2JhZCB2YWx1ZSAke2VuYWJsZXZhbH0gZm9yIC0tZW5hYmxlLWwteGwtdmFyaWFudHNdKSA7OworKyAgIGVzYWNdLAorKyAgW2VuYWJsZV9sX3hsX3ZhcmlhbnRzPW5vXSkKKytBQ19TVUJTVChlbmFibGVfbF94bF92YXJpYW50cykKKytBTV9DT05ESVRJT05BTChbRU5BQkxFX0xfWExfVkFSSUFOVFNdLCBbdGVzdCB4JGVuYWJsZV9sX3hsX3ZhcmlhbnRzID0geHllc10pCisrCisgQUNfQ09ORklHX0ZJTEVTKFsKKyBNYWtlZmlsZQorIGFkd2FpdGEtaWNvbi10aGVtZS5wYworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvYWR3YWl0YS1pY29uLXRoZW1lXzMuMTYuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE2LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjZlNjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2Fkd2FpdGEtaWNvbi10aGVtZV8zLjE2LjIuMS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkdUSysgaWNvbiB0aGVtZSIKK0hPTUVQQUdFID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9HTk9NRS9zb3VyY2VzL2Fkd2FpdGEtaWNvbi10aGVtZS8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorCitMSUNFTlNFID0gIkxHUEwtMy4wIHwgQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Yzg0Y2FjODhlNDZmYzA3NjQ3ZWEwN2U2YzI0ZWViN2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQgZ3RrLWljb24tY2FjaGUKKworREVQRU5EUyArPSAiaW50bHRvb2wtbmF0aXZlIgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL0NyZWF0ZS1zeW1saW5rcy13aGVuLWluc3RhbGxpbmctY3Vyc29ycy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWVmODY5NTJjOTQ3YWEyN2ExYTg4OGI3NzM1ZDYwYjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjQ1NTZkZmJmNTU1ZDRmYWMxMmQ0ZDVjMTJmNzUxOWRlMGQ0M2VjNDJhMWI2NDk2MTE0MzlhNTBiZjdhY2I5NiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBCdWlsZCB1c2VzIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHRvIGNyZWF0ZSBwbmcgdmVyc2lvbnM6CisgICAgICAgICMgbm8gbmVlZCB0byBzdG9yZSB0aGUgc3ZncyBhbnltb3JlLgorCXJtIC1mICR7RH0ke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9zY2FsYWJsZS8qLyotc3ltYm9saWMuc3ZnIFwKKwkgICAgICAke0R9JHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvc2NhbGFibGUvKi8qLXN5bWJvbGljLXJ0bC5zdmcKK30KKworUEFDS0FHRVMgPSAiJHtQTn0tY3Vyc29ycyAke1BOfS1zeW1ib2xpYyAke1BOfS1oaXJlcyAke1BOfSIKKworRklMRVNfJHtQTn0tY3Vyc29ycyA9ICIke3ByZWZpeH0vc2hhcmUvaWNvbnMvQWR3YWl0YS9jdXJzb3JzLyIKK0ZJTEVTXyR7UE59LXN5bWJvbGljID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLyovKi8qLnN5bWJvbGljLnBuZyIKK0ZJTEVTXyR7UE59LWhpcmVzID0gIiR7cHJlZml4fS9zaGFyZS9pY29ucy9BZHdhaXRhLzI1NngyNTYvIgorRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L3NoYXJlL2ljb25zL0Fkd2FpdGEvIFwKKyAgICAgICAgICAgICAgICR7cHJlZml4fS9zaGFyZS9wa2djb25maWcvYWR3YWl0YS1pY29uLXRoZW1lLnBjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvcmVtb3ZlX3BsdXNfZnJvbV9pbnZhbGlkX2NoYXJhY3RlcnNfbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWE3Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2djb25mL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlbW92ZSAnKycgZnJvbSBpbnZhbGlkIGNoYXJhY3RlcnMgbGlzdAorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBHQ29uZi0zLjIuNS9nY29uZi9nY29uZi1iYWNrZW5kLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBHQ29uZi0zLjIuNS5vcmlnL2djb25mL2djb25mLWJhY2tlbmQuYworKysrIEdDb25mLTMuMi41L2djb25mL2djb25mLWJhY2tlbmQuYworQEAgLTM3LDcgKzM3LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgaW52YWxpZF9jaGFyc1tdID0KKyAgIC8qIFNwYWNlIGlzIGNvbW1vbiBpbiB1c2VyIG5hbWVzIChhbmQgdGh1cyBob21lIGRpcmVjdG9yaWVzKSBvbiBXaW5kb3dzICovCisgICAiICIKKyAjZW5kaWYKKy0gICJcdFxyXG5cIiQmPD4sKz0jISgpJ3x7fVtdP35gOyVcXCI7CisrICAiXHRcclxuXCIkJjw+LD0jISgpJ3x7fVtdP35gOyVcXCI7CisgCisgc3RhdGljIGdib29sZWFuCisgZ2NvbmZfYWRkcmVzc192YWxpZCAoY29uc3QgY2hhciAgKmFkZHJlc3MsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZi91bmFibGUtY29ubmVjdC1kYnVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NThhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmYvdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaApAQCAtMCwwICsxLDk1IEBACitGaXhlcyBlcnJvcnMgc3VjaCBhcyB0aGlzIGluIHRoZSByb290ZnMgZ2VuZXJhdGlvbjoKKworKGdjb25mdG9vbC0yLnJlYWw6MTAwOTUpOiBHQ29uZi1XQVJOSU5HICoqOiBDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjoKK1VzaW5nIFgxMSBmb3IgZGJ1cy1kYWVtb24gYXV0b2xhdW5jaCB3YXMgZGlzYWJsZWQgYXQgY29tcGlsZSB0aW1lLCBzZXQgeW91ciBEQlVTX1NFU1NJT05fQlVTX0FERFJFU1MgaW5zdGVhZAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGcm9tIGIwODk1ZTE5OThlYmM4M2FiMDMwZWMwZjE3YzA2ODU0MzlmNWI0MDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSYXkgU3Ryb2RlIDxyc3Ryb2RlQHJlZGhhdC5jb20+CitEYXRlOiBNb24sIDE1IEFwciAyMDEzIDA5OjU3OjM0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGRidXM6IERvbid0IHNwZXcgdG8gY29uc29sZSB3aGVuIHVuYWJsZSB0byBjb25uZWN0IHRvIGRidXMKKyBkYWVtb24KKworSW5zdGVhZCBwYXNzIHRoZSBlcnJvciB1cCBmb3IgdGhlIGNhbGxlciB0byBkZWNpZGUgd2hhdCB0byBkby4KKworVGhpcyBwcmV2ZW50IHVudHJhcHBhYmxlIHdhcm5pbmcgbWVzc2FnZXMgZnJvbSBzaG93aW5nIHVwIGF0IHRoZQorY29uc29sZSBpZiBnY29uZnRvb2wgLS1tYWtlZmlsZS1pbnN0YWxsLXJ1bGUgaXMgY2FsbGVkLgorLS0tCisgZ2NvbmYvZ2NvbmYtZGJ1cy5jIHwgICAyNCArKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nY29uZi9nY29uZi1kYnVzLmMgYi9nY29uZi9nY29uZi1kYnVzLmMKK2luZGV4IDU2MTBmY2YuLjA0OGUzZWEgMTAwNjQ0CistLS0gYS9nY29uZi9nY29uZi1kYnVzLmMKKysrKyBiL2djb25mL2djb25mLWRidXMuYworQEAgLTEwNSw3ICsxMDUsNyBAQCBzdGF0aWMgR0hhc2hUYWJsZSAgICAgKmVuZ2luZXNfYnlfZGIgPSBOVUxMOworIHN0YXRpYyBHSGFzaFRhYmxlICAgICAqZW5naW5lc19ieV9hZGRyZXNzID0gTlVMTDsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgICAgIGRidXNfZGlzY29ubmVjdGVkID0gRkFMU0U7CisgCistc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfZGJ1c19jb25uZWN0aW9uICAgICAgKHZvaWQpOworK3N0YXRpYyBnYm9vbGVhbiAgICAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAgICAgIChHRXJyb3IgKiplcnJvcik7Cisgc3RhdGljIGdib29sZWFuICAgICBlbnN1cmVfc2VydmljZSAgICAgICAgICAgICAgKGdib29sZWFuICAgICAgICAgIHN0YXJ0X2lmX25vdF9mb3VuZCwKKyAJCQkJCQkgR0Vycm9yICAgICAgICAgICoqZXJyKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gICAgIGVuc3VyZV9kYXRhYmFzZSAgICAgICAgICAgICAoR0NvbmZFbmdpbmUgICAgICAqY29uZiwKK0BAIC0zODMsNyArMzgzLDcgQEAgZ2NvbmZfZW5naW5lX2RldGFjaCAoR0NvbmZFbmdpbmUgKmNvbmYpCisgfQorIAorIHN0YXRpYyBnYm9vbGVhbgorLWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisrZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoR0Vycm9yICoqZXJyKQorIHsKKyAgIERCdXNFcnJvciBlcnJvcjsKKyAKK0BAIC0zOTIsNyArMzkyLDkgQEAgZW5zdXJlX2RidXNfY29ubmVjdGlvbiAodm9pZCkKKyAKKyAgIGlmIChkYnVzX2Rpc2Nvbm5lY3RlZCkKKyAgICAgeworLSAgICAgIGdfd2FybmluZyAoIlRoZSBjb25uZWN0aW9uIHRvIERCdXMgd2FzIGJyb2tlbi4gQ2FuJ3QgcmVpbml0aWFsaXplIGl0LiIpOworKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorKyAgICAgICAgICAgICAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCisrICAgICAgICAgICAgICAgICAgICJUaGUgY29ubmVjdGlvbiB0byBEQnVzIHdhcyBicm9rZW4uIENhbid0IHJlaW5pdGlhbGl6ZSBpdC4iKTsKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKyAKK0BAIC00MDIsNyArNDA0LDEwIEBAIGVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKHZvaWQpCisgICAKKyAgIGlmICghZ2xvYmFsX2Nvbm4pIAorICAgICB7CistICAgICAgZ193YXJuaW5nICgiQ2xpZW50IGZhaWxlZCB0byBjb25uZWN0IHRvIHRoZSBELUJVUyBkYWVtb246XG4lcyIsIGVycm9yLm1lc3NhZ2UpOworKyAgICAgIGdfc2V0X2Vycm9yIChlcnIsIEdDT05GX0VSUk9SLAorKyAgICAgICAgICAgICAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCisrICAgICAgICAgICAgICAgICAgICJDbGllbnQgZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIEQtQlVTIGRhZW1vbjpcbiVzIiwKKysgICAgICAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSk7CisgICAgICAgCisgICAgICAgZGJ1c19lcnJvcl9mcmVlICgmZXJyb3IpOworICAgICAgIHJldHVybiBGQUxTRTsKK0BAIC00MzEsMTMgKzQzNiw4IEBAIGVuc3VyZV9zZXJ2aWNlIChnYm9vbGVhbiAgc3RhcnRfaWZfbm90X2ZvdW5kLAorIAorICAgaWYgKGdsb2JhbF9jb25uID09IE5VTEwpCisgICAgIHsKKy0gICAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKCkpCistCXsKKy0JICBnX3NldF9lcnJvciAoZXJyLCBHQ09ORl9FUlJPUiwKKy0JCSAgICAgICBHQ09ORl9FUlJPUl9OT19TRVJWRVIsCistCQkgICAgICAgXygiTm8gRC1CVVMgZGFlbW9uIHJ1bm5pbmdcbiIpKTsKKy0JICByZXR1cm4gRkFMU0U7CistCX0KKysgICAgICBpZiAoIWVuc3VyZV9kYnVzX2Nvbm5lY3Rpb24gKGVycikpCisrICAgICAgICByZXR1cm4gRkFMU0U7CisgCisgICAgICAgZ19hc3NlcnQgKGdsb2JhbF9jb25uICE9IE5VTEwpOworICAgICB9CitAQCAtMjUxMiw3ICsyNTEyLDcgQEAgZ2NvbmZfcGluZ19kYWVtb24gKHZvaWQpCisgeworICAgaWYgKGdsb2JhbF9jb25uID09IE5VTEwpCisgICB7CistICAgIGlmICghZW5zdXJlX2RidXNfY29ubmVjdGlvbiAoKSkKKysgICAgaWYgKCFlbnN1cmVfZGJ1c19jb25uZWN0aW9uIChOVUxMKSkKKyAgICAgeworICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgfQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ2NvbmZfMy4yLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdmZGFmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nY29uZl8zLjIuNi5iYgpAQCAtMCwwICsxLDYwIEBACitTVU1NQVJZID0gIkdOT01FIGNvbmZpZ3VyYXRpb24gc3lzdGVtIgorU0VDVElPTiA9ICJ4MTEvZ25vbWUiCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSIKKworREVQRU5EUyA9ICJnbGliLTIuMCBkYnVzIGRidXMtZ2xpYiBsaWJ4bWwyIGludGx0b29sLW5hdGl2ZSBnb2JqZWN0LWludHJvc3BlY3Rpb24tc3R1YiIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gImdsaWItMi4wLW5hdGl2ZSBkYnVzLW5hdGl2ZSBkYnVzLWdsaWItbmF0aXZlIGxpYnhtbDItbmF0aXZlIGludGx0b29sLW5hdGl2ZSBnbm9tZS1jb21tb24tbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViLW5hdGl2ZSIKKworCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIGdldHRleHQKKworU1JDX1VSSSA9ICIke0dOT01FX01JUlJPUn0vR0NvbmYvJHtAZ25vbWVfdmVyZGlyKCIke1BWfSIpfS9HQ29uZi0ke1BWfS50YXIueHo7bmFtZT1hcmNoaXZlIFwKKyAgICAgICAgICAgZmlsZTovL3JlbW92ZV9wbHVzX2Zyb21faW52YWxpZF9jaGFyYWN0ZXJzX2xpc3QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdW5hYmxlLWNvbm5lY3QtZGJ1cy5wYXRjaCBcCisiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjJiMTY5OTZkMGU0YjExMjg1NmVlNWM1OTEzMGU4MjJjIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTkxMmI5MTgwM2FiMDlhNWVlZDM0ZDM2NGJmMDlmZTNhMmE5Yzk2NzUxZmRlMDNhNGUwY2ZhNTFhMDRkNzg0YyIKKworUyA9ICIke1dPUktESVJ9L0dDb25mLSR7UFZ9IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1zdGF0aWMgLS1lbmFibGUtZGVidWc9eWVzIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtb3JiaXQgLS13aXRoLW9wZW5sZGFwPW5vIC0tZGlzYWJsZS1ndGsiCisKKyMgRGlzYWJsZSBQb2xpY3lLaXQgYnkgZGVmYXVsdAorUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKyMgV2UgcmVhbGx5IGRvbid0IHdhbnQgUG9saWN5S2l0IGZvciBuYXRpdmUgb3IgdWNsaWJjCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICIiCitQQUNLQUdFQ09ORklHX2xpYmMtdWNsaWJjID0gIiIKKworUEFDS0FHRUNPTkZJR1twb2xpY3lraXRdID0gIi0tZW5hYmxlLWRlZmF1bHRzLXNlcnZpY2UsLS1kaXNhYmxlLWRlZmF1bHRzLXNlcnZpY2UscG9sa2l0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHRoaXMgZGlyZWN0b3J5IG5lZWQgdG8gYmUgY3JlYXRlZCB0byBhdm9pZCBhbiBFcnJvciAyNTYgYXQgZ2RtIGxhdW5jaAorCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLnN5c3RlbQorCisJIyB0aGlzIHN0dWZmIGlzIHVudXNhYmxlCisJcm0gLWYgJHtEfSR7bGliZGlyfS9HQ29uZi8qLyouKmEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L2dpby8qLyouKmEKK30KKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2djb25mdG9vbC0yIFwKKwkJR0NPTkZfQkFDS0VORF9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9L0dDb25mLzIKK30KKworIyBkaXNhYmxlIGRidXMteDExIHdoZW4geDExIGlzbid0IGluIERJU1RST19GRUFUVVJFUworUkRFUEVORFNfJHtQTn0gKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2RidXMteDExJywgJycsIGQpfSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vR0NvbmYvKiBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2dpby8qLyouc28gXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcG9sa2l0KiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9zeXN0ZW0tc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyovKi8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7ZGF0YWRpcn0vc2dtbC9nY29uZi9nY29uZi0xLjAuZHRkIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWNvbW1vbl8zLjE0LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBiNzAzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1jb21tb25fMy4xNC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIG1hY3JvcyBmb3IgYnVpbGRpbmcgR05PTUUgYXBwbGljYXRpb25zIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbm9tZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMiCisKK1NFQ1RJT04gPSAieDExL2dub21lIgoraW5oZXJpdCBnbm9tZWJhc2UgYWxsYXJjaAorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJiYTU4YzYxZDBkODFiN2MzZmY4NDUyYzYyMDUxM2E5ZCIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjRjMDAyNDJmNzgxYmI0NDEyODlmNDlkZDgwZWQxZDg5NWQ4NGRlMGM5NGJmYzJjNjgxOGExMDRjOWUzOTI2MmMiCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorREVQRU5EUyA9ICIiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FjbG9jYWwiCitGSUxFU18ke1BOfS1kZXYgPSAiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4NzUwNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMuaW5jCkBAIC0wLDAgKzEsMzMgQEAKK1NVTU1BUlkgPSAiQSBjb2xsZWN0aW9uIG9mIGRvY3VtZW50YXRpb24gdXRpbGl0aWVzIGZvciB0aGUgR25vbWUgcHJvamVjdCIKK0RFU0NSSVBUSU9OID0gIlRoZSBHTk9NRSBEb2N1bWVudGF0aW9uIEJ1aWxkIFV0aWxpdGllcyAoZ25vbWUtZG9jLSBcCit1dGlscykgd2VyZSBjcmVhdGVkIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHRvIFwKK2luY2x1ZGUgYW5kIGNyZWF0ZSBkb2N1bWVudGF0aW9uIGluIHRoZWlyIHJlbGVhc2VzLiBUaGV5IGluY2x1ZGUgdGhlIFwKK3htbDJwbyB0b29sIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB0cmFuc2xhdGUgYW5kIGtlZXAgdXAgdG8gZGF0ZSBcCit0cmFuc2xhdGlvbnMgb2YgZG9jdW1lbnRhdGlvbi4iCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitERVBFTkRTID0gImxpYnhtbDIgbGlieHNsdCBsaWJ4c2x0LW5hdGl2ZSBnbm9tZS1kb2MtdXRpbHMtbmF0aXZlIGdsaWItMi4wIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgbGlieHNsdC1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ2V0dGV4dCBweXRob24tZGlyIHB5dGhvbm5hdGl2ZSBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0NMRUFOQlJPS0VOID0gIjEiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXNjcm9sbGtlZXBlciIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbWtkaXIgLXAgICR7RH0ke2RhdGFkaXJ9L3htbC9nbm9tZS94c2x0LworCWNwIC1wUHIgJHtTfS94c2x0LyogJHtEfSR7ZGF0YWRpcn0veG1sL2dub21lL3hzbHQvCisKKwljaG93biAtUiByb290OnJvb3QgJHtEfQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmUgKCkgeworCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICR7RH0ke2JpbmRpcn0veG1sMnBvCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbCogJHtQWVRIT05fU0lURVBBQ0tBR0VTX0RJUn0vKiIKKworUkRFUEVORFNfJHtQTn0gPSAiYmFzaCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy9zeXNyb290ZWQtcGtnLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2ZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorSW4gY3Jvc3MgZW52aXJvbm1lbnQgd2UgaGF2ZSB0byBwcmVwZW5kIHRoZSBzeXNyb290IHRvIHRoZSBwYXRoIGZvdW5kIGJ5Citwa2djb25maWcgc2luY2UgdGhlIHBhdGggcmV0dXJuZWQgZnJvbSBwa2djb25maWcgZG9lcyBub3QgaGF2ZSBzeXNyb290IHByZWZpeGVkCitpdCBlbmRzIHVwIHVzaW5nIHRoZSBmaWxlcyBmcm9tIGhvc3Qgc3lzdGVtLiBOb3cgdXN1YWxseSBwZW9wbGUgaGF2ZSBnbm9tZSBpbnN0YWxsZWQKK3NvIHRoZSBidWlsZCBzdWNjZWVkcyBidXQgaWYgeW91IGRvbnQgaGF2ZSBnbm9tZSBpbnN0YWxsZWQgb24gYnVpbGQgaG9zdCB0aGVuCitpdCB3b250IGZpbmQgdGhlIGZpbGVzIG9uIGhvc3Qgc3lzdGVtIGFuZCBwYWNrYWdlcyB1c2luZyBnbm9tZS1kb2MtdXRpbHMgd29udAorY29tcGlsZS4KKworVGhpcyBzaG91bGQgd29yayBvayB3aXRoIG5vbiBzeXNyb290ZWQgYnVpbGRzIHRvbyBzaW5jZSBpbiB0aG9zZSBjYXNlcyBQS0dfQ09ORklHX1NZU1JPT1RfRElSCit3aWxsIGJlIGVtcHR5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENvbnN0YW50aW4gTXVzY2EgPGNvbnN0YW50aW54Lm11c2NhQGludGVsLmNvbT4KKworSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy90b29scy9nbm9tZS1kb2MtdXRpbHMubWFrZQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCitAQCAtMTMzLDExICsxMzMsMTEgQEAgX0RPQ19BQlNfU1JDRElSID0gQGFic19zcmNkaXJACisgX3htbDJwbyA/PSBgd2hpY2ggeG1sMnBvYAorIF94bWwycG9fbW9kZSA9ICQoaWYgJChET0NfSUQpLG1hbGxhcmQsZG9jYm9vaykKKyAKKy1fZGIyaHRtbCA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIGRiMmh0bWwgZ25vbWUtZG9jLXV0aWxzYAorLV9kYjJvbWYgID89IGAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKKy1fY2h1bmtzICA/PSBgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jaHVua3MueHNsCistX2NyZWRpdHMgPz0gYCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY3JlZGl0cy54c2wKKy1faWRzID89ICQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCisrX2RiMmh0bWwgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyaHRtbCBnbm9tZS1kb2MtdXRpbHNgCisrX2RiMm9tZiAgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfWAkKFBLR19DT05GSUcpIC0tdmFyaWFibGUgZGIyb21mIGdub21lLWRvYy11dGlsc2AKKytfY2h1bmtzICA/PSAke1BLR19DT05GSUdfU1lTUk9PVF9ESVJ9YCQoUEtHX0NPTkZJRykgLS12YXJpYWJsZSB4bWxkaXIgZ25vbWUtZG9jLXV0aWxzYC9nbm9tZS94c2x0L2RvY2Jvb2svdXRpbHMvY2h1bmtzLnhzbAorK19jcmVkaXRzID89ICR7UEtHX0NPTkZJR19TWVNST09UX0RJUn1gJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHNgL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9jcmVkaXRzLnhzbAorK19pZHMgPz0gJHtQS0dfQ09ORklHX1NZU1JPT1RfRElSfSQoc2hlbGwgJChQS0dfQ09ORklHKSAtLXZhcmlhYmxlIHhtbGRpciBnbm9tZS1kb2MtdXRpbHMpL2dub21lL3hzbHQvZG9jYm9vay91dGlscy9pZHMueHNsCisgCisgaWYgRU5BQkxFX1NLCisgX0VOQUJMRV9TSyA9IHRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy91c2UtdXNyLWJpbi1lbnYtZm9yLXB5dGhvbi1pbi14bWwycG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxOTZjMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHMvdXNlLXVzci1iaW4tZW52LWZvci1weXRob24taW4teG1sMnBvLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK1dlIGNhbid0IHVzZSAjIS9mdWxsL3BhdGgvdG8vcHl0aG9uIC11IGFzIHRoaXMgY2FuIGJlIGxvbmdlciB0aGFuIHNoZWJhbmcKK2FsbG93cyBmb3IuICBJbiBvcmRlciB0byBiZSBhcHByb3ByYWl0ZSBmb3IgdXBzdHJlYW0gbW9yZSB3b3JrIHdvdWxkIGJlCituZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1haW4geG1sMnBvIGNvZGUgZG9lc24ndCByZWx5IG9uIHB5dGhvbgorYmVpbmcgaW52b2tlZCB3aXRoIC11IChmb3JjZSBzdGRpbi9vdXQvZXJyIHRvIGJlIHVzZWQgcmF3KS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtXb3VsZCBicmVhayBiZWhhdmlvciBvbiBXaW5kb3dzXQorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcveG1sMnBvL3htbDJwby9NYWtlZmlsZS5hbQorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8vTWFrZWZpbGUuYW0KK0BAIC03LDcgKzcsNiBAQCBDTEVBTkZJTEVTID0geG1sMnBvCisgCisgeG1sMnBvOiB4bWwycG8ucHkuaW4KKyAJJChBTV9WX0dFTilzZWQgLWUgInMvXlZFUlNJT04gPS4qL1ZFUlNJT04gPSBcIkBWRVJTSU9OQFwiLyIgXAorLQkgICAgLWUgInMrXiMhLipweXRob24uKisjISQoUFlUSE9OKSsiIFwKKyAJICA8ICQoc3JjZGlyKS94bWwycG8ucHkuaW4gPiB4bWwycG8KKyAJJChBTV9WX2F0KWNobW9kICt4IHhtbDJwbworIAorSW5kZXg6IGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAub3JpZy94bWwycG8veG1sMnBvL3htbDJwby5weS5pbgorKysrIGdub21lLWRvYy11dGlscy0wLjIwLjEwL3htbDJwby94bWwycG8veG1sMnBvLnB5LmluCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdQorKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorICMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KKyAjIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSwgMjAwNiBEYW5pbG8gxaBlZ2FuIDxkYW5pbG9AZ25vbWUub3JnPi4KKyAjIENvcHlyaWdodCAoYykgMjAwOSBDbGF1ZGUgUGFyb3ogPGNsYXVkZUAyeGxpYnJlLm5ldD4uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvZ25vbWUtZG9jLXV0aWxzL3hzbHRwcm9jX25vbmV0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzQ2NDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlscy94c2x0cHJvY19ub25ldC5wYXRjaApAQCAtMCwwICsxLDk1IEBACitUaGlzIGFkZHMgdGhlIC1ub25ldCBvcHRpb24gdG8geHNsdHByb2MgaW52b2NhdGlvbnMsIHdoaWNoIGZpeGVzCitjb21waWxlIGVycm9ycyB3aGVuIGJ1aWxkaW5nIHRoZSBnbm9tZS1kb2MtdXRpbHMgZG9jcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorU2lnbmVkLW9mZi1ieTogU2NvdHQgR2FybWFuIDxzY290dC5hLmdhcm1hbkBpbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdub21lLWRvYy11dGlscy0wLjIwLjEwLm9yaWcvZG9jL3hzbHQvTWFrZWZpbGUuYW0KKysrKyBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC9kb2MveHNsdC9NYWtlZmlsZS5hbQorQEAgLTIxLDE0ICsyMSwxNCBAQCBhbGw6ICQoeHNsZG9jX2RvY3MpICQoeHNsZG9jX3htbHMpCisgCisgJCh4c2xkb2NfZG9jcyk6ICQoeHNsZG9jX3hzbHMpIHhzbGRvYy5hd2sgeHNsZG9jLWZpbGwueHNsCisgCSQoQU1fVl9HRU4pJChHRFVfQVdLKSAtZiAiJChzcmNkaXIpL3hzbGRvYy5hd2siICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCistCXwgeHNsdHByb2MgLW8gIiRAIiBcCisrCXwgeHNsdHByb2MgLW5vbmV0IC1vICIkQCIgXAorIAktLXN0cmluZ3BhcmFtIGJhc2VuYW1lICIkKGJhc2VuYW1lICQobm90ZGlyICRAKSkiIFwKKyAJLS1zdHJpbmdwYXJhbSB4c2xfZmlsZSAiJChmaWx0ZXIgJS8kKGJhc2VuYW1lICQobm90ZGlyICRAKSkueHNsLCQoeHNsZG9jX3hzbHMpKSIgXAorIAkiJChzcmNkaXIpL3hzbGRvYy1maWxsLnhzbCIgLQorIAorICQoeHNsZG9jX3htbHMpOiB4c2xkb2MtZG9jYm9vay54c2wKKyAkKHhzbGRvY194bWxzKTogQy8lLnhtbCA6IEMvJS54c2xkb2MKKy0JJChBTV9WX0dFTil4c2x0cHJvYyAtbyAiJEAiIFwKKysJJChBTV9WX0dFTil4c2x0cHJvYyAtbm9uZXQgLW8gIiRAIiBcCisgCS0tc3RyaW5ncGFyYW0gYmFzZW5hbWUgIiQoYmFzZW5hbWUgJChub3RkaXIgJEApKSIgXAorIAktLXN0cmluZ3BhcmFtIHhzbF9maWxlICIkKGZpbHRlciAlLyQoYmFzZW5hbWUgJChub3RkaXIgJEApKS54c2wsJCh4c2xkb2NfeHNscykpIiBcCisgCSIkKHNyY2RpcikveHNsZG9jLWRvY2Jvb2sueHNsIiAiJDwiCitAQCAtNjIsNyArNjIsNyBAQCBnbm9tZS1kb2MteHNsdC1jaGVjay1pbmNsdWRlczoKKyBnbm9tZS1kb2MteHNsdC1jaGVjay14c2xkb2M6ICQoeHNsZG9jX2RvY3MpCisgCUBlY2hvICJSdW5uaW5nIHhzbGRvYyBjaGVja3MiOworIAlAKGVjaG8gIjx4c2xkb2M+IjsgY2F0ICQoeHNsZG9jX2RvY3MpOyBlY2hvICI8L3hzbGRvYz4iKSBcCistCXwgeHNsdHByb2MgIiQoc3JjZGlyKS94c2xkb2MtY2hlY2sueHNsIiAtIDE+IC9kZXYvbnVsbAorKwl8IHhzbHRwcm9jIC1ub25ldCAiJChzcmNkaXIpL3hzbGRvYy1jaGVjay54c2wiIC0gMT4gL2Rldi9udWxsCisgCisgLlBIT05ZOiBjbGVhbi14c2xkb2MKKyBjbGVhbi1sb2NhbDogY2xlYW5feHNsZG9jCitJbmRleDogZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1kb2MtdXRpbHMtMC4yMC4xMC5vcmlnL3Rvb2xzL2dub21lLWRvYy11dGlscy5tYWtlCisrKysgZ25vbWUtZG9jLXV0aWxzLTAuMjAuMTAvdG9vbHMvZ25vbWUtZG9jLXV0aWxzLm1ha2UKK0BAIC0zNyw3ICszNyw3IEBAICQoRE9DX0hfRklMRSk6ICQoRE9DX0hfRE9DUyk7CisgCWxpc3Q9JyQoRE9DX0hfRE9DUyknOyBmb3IgZG9jIGluICQkbGlzdDsgZG8gXAorIAkgIHhtbHBhdGg9ImBlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2A6JChzcmNkaXIpL2BlY2hvICQkZG9jIHwgc2VkIC1lICdzL15cKC4qXC9cKS4qL1wxLycgLWUgJy9cLy8hcy8uKi8vJ2AiOyBcCisgCSAgaWYgISB0ZXN0IC1mICIkJGRvYyI7IHRoZW4gZG9jPSIkKHNyY2RpcikvJCRkb2MiOyBmaTsgXAorLQkgIHhzbHRwcm9jIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9jcmVkaXRzKSAkJGRvYzsgXAorKwkgIHhzbHRwcm9jIC1ub25ldCAtLXBhdGggIiQkeG1scGF0aCIgJChfY3JlZGl0cykgJCRkb2M7IFwKKyAJZG9uZSB8IHNvcnQgfCB1bmlxIFwKKyAJICB8IGF3ayAnQkVHSU57cz0iIn17bj1zcGxpdCgkJDAsdywiPCIpO2lmKHMhPSIiJiZzIT1zdWJzdHIod1sxXSwxLGxlbmd0aCh3WzFdKS0xKSl7cHJpbnQgc307aWYobj4xKXtwcmludCAkJDA7cz0iIn1lbHNle3M9JCQwfX07RU5Ee2lmKHMhPSIiKXtwcmludCBzfX0nIFwKKyAJICB8IHNlZCAtZSAncy9cXC9cXFxcLycgLWUgJ3MvIi9cXCIvJyAtZSAncy9cKC4qXCkvXHQiXDEiLC8nID4+ICRALnRtcAorQEAgLTUwLDcgKzUwLDcgQEAgJChET0NfSF9GSUxFKTogJChET0NfSF9ET0NTKTsKKyAJICBkb2NpZD1gZWNobyAiJCRkb2MiIHwgc2VkIC1lICdzLy4qXC9cKFteL10qXClcLnhtbC9cMS8nIFwKKyAJICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYDsgXAorIAkgIGVjaG8gJCR4bWxwYXRoOyBcCistCSAgaWRzPWB4c2x0cHJvYyAtLXhpbmNsdWRlIC0tcGF0aCAiJCR4bWxwYXRoIiAkKF9pZHMpICQkZG9jYDsgXAorKwkgIGlkcz1geHNsdHByb2MgLW5vbmV0IC0teGluY2x1ZGUgLS1wYXRoICIkJHhtbHBhdGgiICQoX2lkcykgJCRkb2NgOyBcCisgCSAgZm9yIGlkIGluICQkaWRzOyBkbyBcCisgCSAgICBlY2hvICcjZGVmaW5lIEhFTFBfJ2BlY2hvICQkZG9jaWRgJ18nYGVjaG8gJCRpZCBcCisgCSAgICAgIHwgc2VkIC1lICdzL1teYS16QS1aX10vXy9nJyB8IHRyICdhLXonICdBLVonYCcgIickJGlkJyInID4+ICRALnRtcDsgXAorQEAgLTE5Nyw3ICsxOTcsNyBAQCAkKF9ET0NfT01GX0RCKSA6ICQoRE9DX01PRFVMRSktJS5vbWYgOiAlCisgCSAgZWNobyAiVGhlIGZpbGUgJyQoX3NrY29udGVudHNsaXN0KScgZG9lcyBub3QgZXhpc3QuIiA+JjI7CQlcCisgCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKKyAJICBleGl0IDE7IH0KKy0JJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW8gJEAgJChjYWxsIGRiMm9tZl9hcmdzLCRALCQ8LCdkb2Nib29rJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKysJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwnZG9jYm9vaycpIHx8IHsgcm0gLWYgIiRAIjsgZXhpdCAxOyB9CisgCisgIyMgQCBfRE9DX09NRl9IVE1MCisgIyMgVGhlIE9NRiBmaWxlcyBmb3IgSFRNTCBvdXRwdXQKK0BAIC0yMTIsNyArMjEyLDcgQEAgaWYgRU5BQkxFX1NLCisgCSAgZWNobyAiUGxlYXNlIGNoZWNrIHlvdXIgU2Nyb2xsS2VlcGVyIGluc3RhbGxhdGlvbi4iID4mMjsJCVwKKyAJICBleGl0IDE7IH0KKyBlbmRpZgorLQkkKEdEVV9WX0RCMk9NRil4c2x0cHJvYyAtbyAkQCAkKGNhbGwgZGIyb21mX2FyZ3MsJEAsJDwsJ3hodG1sJykgfHwgeyBybSAtZiAiJEAiOyBleGl0IDE7IH0KKysJJChHRFVfVl9EQjJPTUYpeHNsdHByb2MgLW5vbmV0IC1vICRAICQoY2FsbCBkYjJvbWZfYXJncywkQCwkPCwneGh0bWwnKSB8fCB7IHJtIC1mICIkQCI7IGV4aXQgMTsgfQorIAorICMjIEAgX0RPQ19PTUZfQUxMCisgIyMgQWxsIE9NRiBvdXRwdXQgZmlsZXMgdG8gYmUgYnVpbHQKK0BAIC0yNjcsNyArMjY3LDcgQEAgX0RPQ19DX0ZJR1VSRVMgPSAkKGlmICQoRE9DX0ZJR1VSRVMpLAorICMjIEFsbCBIVE1MIGRvY3VtZW50YXRpb24gaW4gdGhlIEMgbG9jYWxlCisgIyBGSVhNRTogcHJvYmFibHkgaGF2ZSB0byBzaGVsbCBlc2NhcGUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG5hbWVzCisgX0RPQ19DX0hUTUwgPSAkKGZvcmVhY2ggZiwJCQkJCQlcCistCSQoc2hlbGwgeHNsdHByb2MgLS14aW5jbHVkZSAJCQkJCVwKKysJJChzaGVsbCB4c2x0cHJvYyAtbm9uZXQgLS14aW5jbHVkZSAJCQkJCVwKKyAJICAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIgkJXAorIAkgICQoX2NodW5rcykgIkMvJChET0NfTU9EVUxFKS54bWwiKSwJCQkJXAorIAlDLyQoZikueGh0bWwpCitAQCAtMzkzLDcgKzM5Myw3IEBAIF9ET0NfSFRNTF9BTEwgPSAkKGlmICQoZmlsdGVyIGh0bWwgSFRNTCwKKyBfRE9DX0hUTUxfVE9QUyA9ICQoZm9yZWFjaCBsYyxDICQoX0RPQ19SRUFMX0xJTkdVQVMpLCQobGMpLyQoRE9DX01PRFVMRSkueGh0bWwpCisgCisgJChfRE9DX0hUTUxfVE9QUyk6ICQoX0RPQ19DX0RPQ1MpICQoX0RPQ19MQ19ET0NTKQorLQkkKEdEVV9WX0RCMkhUTSl4c2x0cHJvYyAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCisrCSQoR0RVX1ZfREIySFRNKXhzbHRwcm9jIC1ub25ldCAtbyAkQCAtLXhpbmNsdWRlIC0tcGFyYW0gZGIuY2h1bmsuY2h1bmtfdG9wICJmYWxzZSgpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmJhc2VuYW1lICIkKERPQ19NT0RVTEUpIiAtLXN0cmluZ3BhcmFtIGRiLmNodW5rLmV4dGVuc2lvbiAiLnhodG1sIiAkKF9kYjJodG1sKSAkKHBhdHN1YnN0ICUueGh0bWwsJS54bWwsJEApCisgCisgCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1kb2MtdXRpbHNfMC4yMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGNjMDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLWRvYy11dGlsc18wLjIwLjEwLmJiCkBAIC0wLDAgKzEsMTEgQEAKK3JlcXVpcmUgZ25vbWUtZG9jLXV0aWxzLmluYworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PWViNzIzYjYxNTM5ZmVlZjAxM2RlNDc2ZTY4YjVjNTBhIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHNsdHByb2Nfbm9uZXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3VzZS11c3ItYmluLWVudi1mb3ItcHl0aG9uLWluLXhtbDJwby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3lzcm9vdGVkLXBrZy1jb25maWcucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjNjNjRhZDdiYWNkNjE3YjA0OTk5ZTRhMTY4YWZhYWM1IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiY2IwNjM5ZmZhOTU1MGI2ZGRmM2I2MmYzYjFhZGQ5MmZiOTJhYjQ2OTBkMzUxZjIzNTNjZmZlNjY4YmU4YzRhNiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YS9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwMzQyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGEvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdub21lLW1pbWUtZGF0YS0yLjE4LjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbm9tZS1taW1lLWRhdGEtMi4xOC4wLm9yaWcvTWFrZWZpbGUuYW0JMjAwOS0wNi0xMSAxNzoyNzo0OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBnbm9tZS1taW1lLWRhdGEtMi4xOC4wL01ha2VmaWxlLmFtCTIwMDktMDYtMTEgMTc6Mjc6NTkuMDAwMDAwMDAwICswMTAwCitAQCAtMSw2ICsxLDYgQEAKKyBTVUJESVJTID0gbWFuIHBvCisgCistcGtnY29uZmlnZGlyID0gJChkYXRhZGlyKS9wa2djb25maWcKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBnbm9tZS1taW1lLWRhdGEtMi4wLnBjCisgCisgTlVMTD0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2dub21lLW1pbWUtZGF0YV8yLjE4LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxZWI1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9nbm9tZS1taW1lLWRhdGFfMi4xOC4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFzZSBNSU1FIGFuZCBBcHBsaWNhdGlvbiBkYXRhYmFzZSBmb3IgR05PTUUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU5NTMwYmRmMzM2NTliMjllNzNkNGFkYjlmOWY2NTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NoZWNrLW1pbWUucGw7ZW5kbGluZT0yNjttZDU9YTk1YjYzYzkyYzMzZDRjYTFhZjYxYTMxNTg4OGY0NTAiCisKK2luaGVyaXQgZ25vbWViYXNlIG1pbWUKK1BSID0gInI0IgorCitTUkNfVVJJICs9ICJmaWxlOi8vcGtnY29uZmlnLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICI1NDE4NTgxODhmODAwOTBkMTJhMzNiNWE3YzM0ZDQyYyIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjM3MTk2YjViMzcwODViYmNkNDVjMzM4YzM2ZTI2ODk4ZmUzNWRkNTk3NTI5NWY2OWY0ODAyOGIxZTg0MzZmZDciCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK0RFUEVORFMgKz0gInNoYXJlZC1taW1lLWluZm8gaW50bHRvb2wtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAic2hhcmVkLW1pbWUtaW5mbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsL2xpYmFydF9sZ3BsLTIuMy4yMS1jcm9zc2NvbXBpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2MWY1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9nbm9tZS9saWJhcnQtbGdwbC9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoCkBAIC0wLDAgKzEsODQgQEAKK1Rha2VuIGZyb20gcG9ydGFnZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0Zyb20gZTE0NDNjOTQ1YTRjZjY3MDk2ZDhjMjc3MjFhYWRkNzM2ODM4MmIzZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEdpbGxlcyBEYXJ0aWd1ZWxvbmd1ZSA8ZXZhQGdlbnRvby5vcmc+CitEYXRlOiBUdWUsIDYgQXByIDIwMTAgMTU6MjI6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGdlbnRvbzogdXNlIElTTyB0eXBlcyBmb3IgZml4ZWQgdHlwZSBzaXplCisKKy0tLQorIE1ha2VmaWxlLmFtICB8ICAgMTEgKystLS0tLS0tLS0KKyBhcnRfY29uZmlnLmggfCAgICA1ICsrKysrCisgY29uZmlndXJlLmluIHwgICAxMCAtLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcnRfY29uZmlnLmgKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDk1OTUyZGEuLjZhYTJmZTMgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yLDEzICsyLDYgQEAgY2hlY2tfUFJPR1JBTVMgPSB0ZXN0YXJ0IHRlc3R1dGEKKyAKKyBiaW5fU0NSSVBUUyA9IFwKKyAJbGliYXJ0Mi1jb25maWcKKy0JCistbm9pbnN0X1NDUklQVFMgPSBnZW5fYXJ0X2NvbmZpZy5zaAorLQorLUJVSUxUX1NPVVJDRVMgPSBhcnRfY29uZmlnLmgKKy0KKy1hcnRfY29uZmlnLmg6CistCS4vZ2VuX2FydF9jb25maWcuc2ggPiBhcnRfY29uZmlnLmgKKyAKKyBFWFRSQV9ESVNUID0gCQkJXAorIAlsaWJhcnQuZGVmCQlcCitAQCAtMTczLDUgKzE2Niw1IEBAIGluc3RhbGwtZGF0YS1sb2NhbDogaW5zdGFsbC1tcy1saWIgaW5zdGFsbC1saWJ0b29sLWltcG9ydC1saWIKKyAKKyB1bmluc3RhbGwtbG9jYWw6IHVuaW5zdGFsbC1tcy1saWIgdW5pbnN0YWxsLWxpYnRvb2wtaW1wb3J0LWxpYgorIAorLUNMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpICQoYmluX1NDUklQVFMpCistRElTVENMRUFORklMRVMgPSAkKEJVSUxUX1NPVVJDRVMpICQoYmluX1NDUklQVFMpCisrQ0xFQU5GSUxFUyA9ICQoYmluX1NDUklQVFMpCisrRElTVENMRUFORklMRVMgPSAkKGJpbl9TQ1JJUFRTKQorZGlmZiAtLWdpdCBhL2FydF9jb25maWcuaCBiL2FydF9jb25maWcuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU5ODVmMWYKKy0tLSBhL2FydF9jb25maWcuaAorKysrIGIvYXJ0X2NvbmZpZy5oCitAQCAtMCwwICsxLDUgQEAKKysjaW5jbHVkZSA8c3RkaW50Lmg+CisrCisrdHlwZWRlZiB1aW50OF90IGFydF91ODsKKyt0eXBlZGVmIHVpbnQxNl90IGFydF91MTY7CisrdHlwZWRlZiB1aW50MzJfdCBhcnRfdTMyOworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggZTQ4MDRmNy4uZGRjYWM0ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtOTIsMTUgKzkyLDYgQEAgQUNfRlVOQ19BTExPQ0EKKyAKKyBBQ19DX0JJR0VORElBTgorIAorLUFDX0NIRUNLX1NJWkVPRihjaGFyKQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfQ0hBUiwgJGFjX2N2X3NpemVvZl9jaGFyKQorLUFDX0NIRUNLX1NJWkVPRihzaG9ydCkKKy1BQ19TVUJTVChBUlRfU0laRU9GX1NIT1JULCAkYWNfY3Zfc2l6ZW9mX3Nob3J0KQorLUFDX0NIRUNLX1NJWkVPRihpbnQpCistQUNfU1VCU1QoQVJUX1NJWkVPRl9JTlQsICRhY19jdl9zaXplb2ZfaW50KQorLUFDX0NIRUNLX1NJWkVPRihsb25nKQorLUFDX1NVQlNUKEFSVF9TSVpFT0ZfTE9ORywgJGFjX2N2X3NpemVvZl9sb25nKQorLQorIEFDX0NPTkZJR19GSUxFUyhbCisgbGliYXJ0LWZlYXR1cmVzLmgKKyBNYWtlZmlsZQorQEAgLTEwOSw2ICsxMDAsNSBAQCBsaWJhcnQtMi4wLXVuaW5zdGFsbGVkLnBjCisgbGliYXJ0LXppcF0pCisgCisgQUNfQ09ORklHX0ZJTEVTKFtsaWJhcnQtY29uZmlnXSxbY2htb2QgK3ggbGliYXJ0LWNvbmZpZ10pCistQUNfQ09ORklHX0ZJTEVTKFtnZW5fYXJ0X2NvbmZpZy5zaF0sW2NobW9kICt4IGdlbl9hcnRfY29uZmlnLnNoXSkKKyAKKyBBQ19PVVRQVVQKKy0tIAorMS43LjAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ25vbWUvbGliYXJ0LWxncGxfMi4zLjIxLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsXzIuMy4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTU4MWIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dub21lL2xpYmFydC1sZ3BsXzIuMy4yMS5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkxpYnJhcnkgb2YgZnVuY3Rpb25zIGZvciAyRCBncmFwaGljcyIKK1NFQ1RJT04gPSAieDExL2dub21lIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKK1BSID0gInIyIgorCisjIGNhbid0IHVzZSBnbm9tZS5vZWNsYXNzIGR1ZSB0byBfIGluIGZpbGVuYW1lCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJhcnRfbGdwbC8yLjMvbGliYXJ0X2xncGwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJhcnRfbGdwbC0yLjMuMjEtY3Jvc3Njb21waWxlLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwODU1OWZmM2M2N2ZkOTVkNTdiMGM1ZTkxYTZiNDMwMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGMxMWU3NGMxMGZjOWZmZTQxODg1MzdlMmIzNzBjMGFiYWNjYTdkODkwMjFkNGQzMDNhZmRmN2ZkNzQ3NmZhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworREVQRU5EUyA9ICIiCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9saWJhcnQyLWNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2xpYmFydF9sZ3BsLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcy9nc2V0dGluZ3MtZGVza3RvcC1zY2hlbWFzXzMuMTYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmYyYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2dzZXR0aW5ncy1kZXNrdG9wLXNjaGVtYXMvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hc18zLjE2LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorU1VNTUFSWSA9ICJHTk9NRSBkZXNrdG9wLXdpZGUgR1NldHRpbmdzIHNjaGVtYXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGl2ZS5nbm9tZS5vcmcvZ3NldHRpbmdzLWRlc2t0b3Atc2NoZW1hcyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViLW5hdGl2ZSIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3NldHRpbmdzIGdldHRleHQKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiYmFlYmJjZjNjMjA1OTFmOTg4NzZlNDJmYjBhM2ZkMzUiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI3NGZlOWZkYWQ1MTBjOGE2NjY2ZmViZWNlYjdlYmFmYzU4MWVmOTkwYjNhZmNjOGMxZThiNWQ5MGIyNGIzNDYxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUyNzNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy5pbmMKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJNdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBHVUlzIgorREVTQ1JJUFRJT04gPSAiR1RLKyBpcyBhIG11bHRpLXBsYXRmb3JtIHRvb2xraXQgZm9yIGNyZWF0aW5nIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMuIE9mZmVyaW5nIGEgY29tcGxldGUgXAorc2V0IG9mIHdpZGdldHMsIEdUSysgaXMgc3VpdGFibGUgZm9yIHByb2plY3RzIHJhbmdpbmcgZnJvbSBzbWFsbCBvbmUtb2ZmIHByb2plY3RzIHRvIGNvbXBsZXRlIGFwcGxpY2F0aW9uIHN1aXRlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmd0ay5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworU0VDVElPTiA9ICJsaWJzIgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworQU5ZX09GX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiB4MTEiCisKK1gxMURFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGV4dCBsaWJ4Y3Vyc29yIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnhyZW5kZXIgbGlieGNvbXBvc2l0ZSIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgcGFuZ28gYXRrIGpwZWcgbGlicG5nIGdkay1waXhidWYtbmF0aXZlIGRvY2Jvb2stdXRpbHMtbmF0aXZlIFwKKyBjYWlybyBnZGstcGl4YnVmIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14PXllcyAtLXdpdGgtZ2RrdGFyZ2V0PXgxMSwtLXdpdGgteD1ubywke1gxMURFUEVORFN9IgorIyB3aXRob3V0IC0td2l0aC1nZGt0YXJnZXQ9ZGlyZWN0ZmIgaXQgd2lsbCBjaGVjayBmb3IgY2Fpcm8teGxpYiB3aGljaCBpc24ndCBhdmFpbGFibGUgd2l0aG91dCBYMTEgRElTVFJPX0ZFQVRVUkUKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdID0gIi0td2l0aC1nZGt0YXJnZXQ9ZGlyZWN0ZmIsLGRpcmVjdGZiIgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIHBrZ2NvbmZpZyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGd0ay1pbW1vZHVsZXMtY2FjaGUKKworUEFDS0FHRVMgKz0gImxpYmdhaWwgZ3RrLWRlbW8iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wIFwKKwkke2JpbmRpcn0vZ3RrLXF1ZXJ5LWltbW9kdWxlcy0yLjAgXAorCSR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKwkke2RhdGFkaXJ9L3RoZW1lcyAke3N5c2NvbmZkaXJ9IFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2VuZ2luZXMvbGlicGl4bWFwLnNvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiBcCisgICAgICAgICR7ZGF0YWRpcn0vZ3RrLTIuMC9pbmNsdWRlIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9pbmNsdWRlIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzLyoubGEgXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vbG9hZGVycy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9L3ByaW50YmFja2VuZHMvKi5sYSBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9lbmdpbmVzLyoubGEgXAorCSR7YmluZGlyfS9ndGstYnVpbGRlci1jb252ZXJ0IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy8uZGVidWcvKiBcCisgICAgICAgICR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vbG9hZGVycy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9pbW1vZHVsZXMvLmRlYnVnLyogXAorCSR7bGliZGlyfS9ndGstMi4wLyR7TElCVn0vZW5naW5lcy8uZGVidWcvKiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvJHtMSUJWfS9wcmludGJhY2tlbmRzLy5kZWJ1Zy8qIgorCitGSUxFU19ndGstZGVtbyA9ICIgXAorICR7ZGF0YWRpcn0vZ3RrLTIuMC9kZW1vLyogXAorICR7YmluZGlyfS9ndGstZGVtbyBcCisgIgorCitGSUxFU19saWJnYWlsID0gIiBcCisJJHtsaWJkaXJ9L2d0ay0yLjAvbW9kdWxlcy9saWJnYWlsLnNvIFwKKwkke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzL2xpYmZlcnJldC5zbyBcCisJIgorCitHVEtCQVNFX1JSRUNPTU1FTkRTID89ICJsaWJlcmF0aW9uLWZvbnRzIGdkay1waXhidWYtbG9hZGVyLXBuZyBnZGstcGl4YnVmLWxvYWRlci1qcGVnIGdkay1waXhidWYtbG9hZGVyLWdpZiBnZGstcGl4YnVmLWxvYWRlci14cG0gc2hhcmVkLW1pbWUtaW5mbyIKK0dUS0dMSUJDX1JSRUNPTU1FTkRTID89ICIke0dUS0JBU0VfUlJFQ09NTUVORFN9IGdsaWJjLWdjb252LWlzbzg4NTktMSIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiJHtHVEtCQVNFX1JSRUNPTU1FTkRTfSIKK1JSRUNPTU1FTkRTXyR7UE59X2xpYmMtZ2xpYmMgPSAiJHtHVEtHTElCQ19SUkVDT01NRU5EU30iCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtndGstdXBkYXRlLWljb24tY2FjaGVdID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wIgorCitkb19pbnN0YWxsICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9ndGstMi4wCisKKwlta2RpciAtcCAke0R9JHtsaWJkaXJ9L2d0ay0yLjAvaW5jbHVkZQorCWluc3RhbGwgLW0gMDY0NCBnZGsvZ2RrY29uZmlnLmggJHtEfSR7bGliZGlyfS9ndGstMi4wL2luY2x1ZGUvZ2RrY29uZmlnLmgKKworCWluc3RhbGwgLW0gMDY0NCAke1N9L2d0ay9ndGtmaWxlY2hvb3NlcnByaXZhdGUuaCAke0R9JHtpbmNsdWRlZGlyfS9ndGstMi4wL2d0ay8KKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS9ndGsvZ3RrZmlsZWNob29zZXJ1dGlscy5oICAgJHtEfSR7aW5jbHVkZWRpcn0vZ3RrLTIuMC9ndGsvCisJaW5zdGFsbCAtbSAwNjQ0ICR7U30vZ3RrL2d0a2ZpbGVzeXN0ZW1tb2RlbC5oICAgICR7RH0ke2luY2x1ZGVkaXJ9L2d0ay0yLjAvZ3RrLworCisJbXYgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMi4wCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZ3RrX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworZ3RrX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJaWYgWyAtZSAke0R9JHtiaW5kaXJ9L2d0ay1idWlsZGVyLWNvbnZlcnQgXTsgdGhlbgorCQlpbnN0YWxsIC1kICR7U1lTUk9PVF9ERVNURElSfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vCisJCWluc3RhbGwgLW0gNzU1ICR7RH0ke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCWZpCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy9kb2MtZml4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlNDc5ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvZG9jLWZpeGVzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1RoZXJlIGFyZSBpc3N1ZXMgYnVpbGRpbmcgdGhlIGd0aysgdHV0b3JpYWwgYW5kIGZhcSBkb2N1bWVudGF0aW9uLgorU2luY2UgdGhleSB3ZXJlIHJlbW92ZWQgaW4gZ3RrKyB1cHN0cmVhbSBhbmQgYXJlIHN1cGVyZmx1b3VzIGluCitlbWJlZGRlZCBhcHBsaWNhdGlvbnMsIGp1c3QgZG9uJ3QgYnVpbGQgdGhlbS4KKworVGhhbmtzIHRvIEpvc2h1YSBMb2NrIGZvciBzdWdnZXN0aW5nIHRoaXMgYXBwcm9hY2guCisKK1NpZ25lZC1vZmYtYnk6IFNjb3R0IEdhcm1hbiA8c2NvdHQuYS5nYXJtYW5AaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitkaWZmIC11ck4gZ3RrKy0yLjIyLjEub3JpZy9kb2NzL01ha2VmaWxlLmFtIGd0aystMi4yMi4xL2RvY3MvTWFrZWZpbGUuYW0KKy0tLSBndGsrLTIuMjIuMS5vcmlnL2RvY3MvTWFrZWZpbGUuYW0JMjAxMC0xMS0xNSAwNDoxMzowOS4wMDAwMDAwMDAgLTA4MDAKKysrKyBndGsrLTIuMjIuMS9kb2NzL01ha2VmaWxlLmFtCTIwMTEtMDItMjMgMTk6MjU6MTYuOTE0ODE1MDk3IC0wODAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KKyBpbmNsdWRlICQodG9wX3NyY2RpcikvTWFrZWZpbGUuZGVjbAorIAorLVNVQkRJUlMgPSB0dXRvcmlhbCBmYXEgcmVmZXJlbmNlIHRvb2xzCisrU1VCRElSUyA9IHJlZmVyZW5jZSB0b29scworIAorIEVYVFJBX0RJU1QgKz0gXAorIAlkZWZzZm9ybWF0LnR4dAkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZTcyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1VwZGF0ZWQgdG8gYXBwbHkgdG8gZ3RrKy0yLjI0LjE1CisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMgZ3RrKy0yLjI0LjE1L2NvbmZpZ3VyZS5hYworLS0tIGd0aystMi4yNC4xNS9jb25maWd1cmUuYWMJMjAxMy0wMS0xMiAyMDo1Mjo1NC4wMDAwMDAwMDAgKzAyMDAKKysrKyBndGsrLTIuMjQuMTUvY29uZmlndXJlLmFjCTIwMTMtMDItMTIgMjE6MzM6MzAuNjg5OTI1OTY3ICswMjAwCitAQCAtNDE1LDcgKzQxNSw3IEBACisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJyE9JyB4cGFzc19hbGwgfHwgdGVzdCAieCRlbmFibGVfc3RhdGljIiA9IHh5ZXMgOyB0aGVuCisgICAgICAgZW5hYmxlX2V4cGxpY2l0X2RlcHM9eWVzCisgICAgIGVsc2UKK0BAIC03NzQsNyArNzc0LDcgQEAKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZyIKKyAgICAgICAgIG1vZHVsZV9kZXBsaWJzX2NoZWNrPWAkbW9kdWxlX2xpYnRvb2xfY29uZmlnIHwgXAorICAgICAgICAgICAgIGdyZXAgJ15bW2Etel9dXSpjaGVja1tbYS16X11dKl9tZXRob2Q9W1snXCcnIl1dJyB8IFwKKyAgICAgICAgICAgICBzZWQgJ3MvLipbWydcJyciXV1cKC4qXClbWydcJyciXV0kL1wxLydgCitAQCAtMTU3NCw3ICsxNTc0LDcgQEAKKyAjIFdlIGFyZSB1c2luZyBnbW9kdWxlLW5vLWV4cG9ydCBub3csIGJ1dCBJJ20gbGVhdmluZyB0aGUgc3RyaXBwaW5nCisgIyBjb2RlIGluIHBsYWNlIGZvciBub3csIHNpbmNlIHBhbmdvIGFuZCBhdGsgc3RpbGwgcmVxdWlyZSBnbW9kdWxlLgorIGV4cG9ydCBTRUQKKy1leHBvcnRfZHluYW1pYz1gKC4vbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorK2V4cG9ydF9keW5hbWljPWAoJGhvc3RfYWxpYXMtbGlidG9vbCAtLWNvbmZpZzsgZWNobyBldmFsIGVjaG8gXFwkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjKSB8IHNoYAorIGlmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKyAgIEdES19ERVBfTElCUz1gZWNobyAkR0RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKKyAgIEdUS19ERVBfTElCUz1gZWNobyAkR1RLX0RFUF9MSUJTIHwgc2VkIC1lICJzLyRleHBvcnRfZHluYW1pYy8vImAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvc3RyaWN0LXByb3RvdHlwZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTFmNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3N0cmljdC1wcm90b3R5cGVzLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0ZpeGVzCisKK2luY2x1ZGUvZ3RrLTIuMC9ndGsvZ3RraXRlbWZhY3RvcnkuaDo0NzoxOiB3YXJuaW5nOiBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpc24ndCBhIHByb3RvdHlwZSBbLVdzdHJpY3QtcHJvdG90eXBlc10KKyB0eXBlZGVmIHZvaWQgKCpHdGtJdGVtRmFjdG9yeUNhbGxiYWNrKSAgKCk7CisKK2djYzUgaGFzIC1Xc3RyaWN0LXByb3RvdHlwZXMgb24gYnkgZGVmYXVsdCBmb3IgLVdlcnJvciBzbyB0aGlzIGJlY29tZXMgYSBidWlsZCBmYWlsdXJlIGZvciBjb25zdW1lcnMKK29mIHRoaXMgaGVhZGVyIGUuZy4gbWF0Y2hib3gtcGFuZWwtMgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0luZGV4OiBndGsrLTIuMjQuMjcvZ3RrL2d0a2l0ZW1mYWN0b3J5LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBndGsrLTIuMjQuMjcub3JpZy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorKysrIGd0aystMi4yNC4yNy9ndGsvZ3RraXRlbWZhY3RvcnkuaAorQEAgLTQ0LDcgKzQ0LDcgQEAgdHlwZWRlZiB2b2lkCSgqR3RrUHJpbnRGdW5jKQkJICAgKGdwb2ludAorICAqIChOb3RlIHRoYXQgaWYgd2UgYXJlIGluY2x1ZGVkIGZyb20gYSBDKysgcHJvZ3JhbSAoKSB3aWxsIG1lYW4KKyAgKiAodm9pZCkgc28gYW4gZXhwbGljaXQgY2FzdCB3aWxsIGJlIG5lZWRlZC4pCisgICovCistdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjaykgICgpOworK3R5cGVkZWYJdm9pZAkoKkd0a0l0ZW1GYWN0b3J5Q2FsbGJhY2spICAodm9pZCk7CisgdHlwZWRlZgl2b2lkCSgqR3RrSXRlbUZhY3RvcnlDYWxsYmFjazEpIChncG9pbnRlcgkJIGNhbGxiYWNrX2RhdGEsCisgCQkJCQkgICAgZ3VpbnQJCSBjYWxsYmFja19hY3Rpb24sCisgCQkJCQkgICAgR3RrV2lkZ2V0CQkqd2lkZ2V0KTsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aysvdG9nZ2xlLWZvbnQuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDBkMTIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy90b2dnbGUtZm9udC5kaWZmCkBAIC0wLDAgKzEsMTAyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0ay9ndGtjZWxscmVuZGVyZXJ0b2dnbGUuYy5vcmlnCTIwMTAtMDYtMjIgMTg6MTE6MzMuMDAwMDAwMDAwICswODAwCisrKysgZ3RrL2d0a2NlbGxyZW5kZXJlcnRvZ2dsZS5jCTIwMTAtMDYtMjIgMTg6MTE6NDMuMDAwMDAwMDAwICswODAwCitAQCAtNzEsNiArNzEsOCBAQAorICAgUFJPUF9JTkRJQ0FUT1JfU0laRQorIH07CisgCisrLyogVGhpcyBpcyBhIGhhcmQtY29kZWQgZGVmYXVsdCB3aGljaCBwcm9tcHRseSBnZXRzIG92ZXJyaWRkZW4gYnkgYSBzaXplCisrICAgY2FsY3VsYXRlZCBmcm9tIHRoZSBmb250IHNpemUuICovCisgI2RlZmluZSBUT0dHTEVfV0lEVEggMTMKKyAKKyBzdGF0aWMgZ3VpbnQgdG9nZ2xlX2NlbGxfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKK0BAIC04MCw4ICs4Miw5IEBACisgdHlwZWRlZiBzdHJ1Y3QgX0d0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUgR3RrQ2VsbFJlbmRlcmVyVG9nZ2xlUHJpdmF0ZTsKKyBzdHJ1Y3QgX0d0a0NlbGxSZW5kZXJlclRvZ2dsZVByaXZhdGUKKyB7CistICBnaW50IGluZGljYXRvcl9zaXplOworLQorKyAgZ2ludCBpbmRpY2F0b3Jfc2l6ZTsgLyogVGhpcyBpcyB0aGUgcmVhbCBzaXplICovCisrICBnaW50IG92ZXJyaWRlX3NpemU7IC8qIFRoaXMgaXMgdGhlIHNpemUgc2V0IGZyb20gdGhlIGluZGljYXRvci1zaXplIHByb3BlcnR5ICovCisrICBHdGtXaWRnZXQgKmNhY2hlZF93aWRnZXQ7CisgICBndWludCBpbmNvbnNpc3RlbnQgOiAxOworIH07CisgCitAQCAtMTA0LDYgKzEwNyw3IEBACisgICBHVEtfQ0VMTF9SRU5ERVJFUiAoY2VsbHRvZ2dsZSktPnlwYWQgPSAyOworIAorICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBUT0dHTEVfV0lEVEg7CisrICBwcml2LT5vdmVycmlkZV9zaXplID0gMDsKKyAgIHByaXYtPmluY29uc2lzdGVudCA9IEZBTFNFOworIH0KKyAKK0BAIC0yMTAsNyArMjE0LDcgQEAKKyAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuICh2YWx1ZSwgY2VsbHRvZ2dsZS0+cmFkaW8pOworICAgICAgIGJyZWFrOworICAgICBjYXNlIFBST1BfSU5ESUNBVE9SX1NJWkU6CistICAgICAgZ192YWx1ZV9zZXRfaW50ICh2YWx1ZSwgcHJpdi0+aW5kaWNhdG9yX3NpemUpOworKyAgICAgIGdfdmFsdWVfc2V0X2ludCAodmFsdWUsIHByaXYtPm92ZXJyaWRlX3NpemUgPyBwcml2LT5vdmVycmlkZV9zaXplIDogcHJpdi0+aW5kaWNhdG9yX3NpemUpOworICAgICAgIGJyZWFrOworICAgICBkZWZhdWx0OgorICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwYXJhbV9pZCwgcHNwZWMpOworQEAgLTI0NSw3ICsyNDksNyBAQAorICAgICAgIGNlbGx0b2dnbGUtPnJhZGlvID0gZ192YWx1ZV9nZXRfYm9vbGVhbiAodmFsdWUpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIFBST1BfSU5ESUNBVE9SX1NJWkU6CistICAgICAgcHJpdi0+aW5kaWNhdG9yX3NpemUgPSBnX3ZhbHVlX2dldF9pbnQgKHZhbHVlKTsKKysgICAgICBwcml2LT5vdmVycmlkZV9zaXplID0gZ192YWx1ZV9nZXRfaW50ICh2YWx1ZSk7CisgICAgICAgYnJlYWs7CisgICAgIGRlZmF1bHQ6CisgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHBhcmFtX2lkLCBwc3BlYyk7CitAQCAtMjczLDYgKzI3NywyNyBAQAorIH0KKyAKKyBzdGF0aWMgdm9pZAorK29uX3dpZGdldF9zdHlsZV9zZXQgKEd0a1dpZGdldCAqd2lkZ2V0LCBHdGtTdHlsZSAqcHJldmlvdXMsIGdwb2ludGVyIHVzZXJfZGF0YSkKKyt7CisrICBHdGtDZWxsUmVuZGVyZXJUb2dnbGVQcml2YXRlICpwcml2ID0gdXNlcl9kYXRhOworKyAgUGFuZ29Db250ZXh0ICpjb250ZXh0OworKyAgUGFuZ29Gb250TWV0cmljcyAqbWV0cmljczsKKysgIGludCBoZWlnaHQ7CisrICAKKysgIGNvbnRleHQgPSBndGtfd2lkZ2V0X2dldF9wYW5nb19jb250ZXh0ICh3aWRnZXQpOworKyAgbWV0cmljcyA9IHBhbmdvX2NvbnRleHRfZ2V0X21ldHJpY3MgKGNvbnRleHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LT5zdHlsZS0+Zm9udF9kZXNjLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmdvX2NvbnRleHRfZ2V0X2xhbmd1YWdlIChjb250ZXh0KSk7CisrCisrICBoZWlnaHQgPSBwYW5nb19mb250X21ldHJpY3NfZ2V0X2FzY2VudCAobWV0cmljcykgKworKyAgICBwYW5nb19mb250X21ldHJpY3NfZ2V0X2Rlc2NlbnQgKG1ldHJpY3MpOworKyAgCisrICBwYW5nb19mb250X21ldHJpY3NfdW5yZWYgKG1ldHJpY3MpOworKyAgCisrICBwcml2LT5pbmRpY2F0b3Jfc2l6ZSA9IFBBTkdPX1BJWEVMUyAoaGVpZ2h0ICogMC44NSk7CisrfQorKworK3N0YXRpYyB2b2lkCisgZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xlX2dldF9zaXplIChHdGtDZWxsUmVuZGVyZXIgKmNlbGwsCisgCQkJCSAgIEd0a1dpZGdldCAgICAgICAqd2lkZ2V0LAorIAkJCQkgICBHZGtSZWN0YW5nbGUgICAgKmNlbGxfYXJlYSwKK0BAIC0yODcsNiArMzEyLDIwIEBACisgCisgICBwcml2ID0gR1RLX0NFTExfUkVOREVSRVJfVE9HR0xFX0dFVF9QUklWQVRFIChjZWxsKTsKKyAKKysgIGlmIChwcml2LT5vdmVycmlkZV9zaXplKSB7CisrICAgIHByaXYtPmluZGljYXRvcl9zaXplID0gcHJpdi0+b3ZlcnJpZGVfc2l6ZTsKKysgIH0gZWxzZSBpZiAocHJpdi0+Y2FjaGVkX3dpZGdldCAhPSB3aWRnZXQpIHsKKysgICAgaWYgKHByaXYtPmNhY2hlZF93aWRnZXQpIHsKKysgICAgICBnX29iamVjdF9yZW1vdmVfd2Vha19wb2ludGVyICh3aWRnZXQsICZwcml2LT5jYWNoZWRfd2lkZ2V0KTsKKysgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPmNhY2hlZF93aWRnZXQsIG9uX3dpZGdldF9zdHlsZV9zZXQsIHByaXYpOworKyAgICB9CisrICAgIHByaXYtPmNhY2hlZF93aWRnZXQgPSB3aWRnZXQ7CisrICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIgKHdpZGdldCwgJnByaXYtPmNhY2hlZF93aWRnZXQpOworKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3aWRnZXQsICJzdHlsZS1zZXQiLCBvbl93aWRnZXRfc3R5bGVfc2V0LCBwcml2KTsKKysgICAgCisrICAgIG9uX3dpZGdldF9zdHlsZV9zZXQgKHdpZGdldCwgTlVMTCwgcHJpdik7CisrICB9CisrCisgICBjYWxjX3dpZHRoID0gKGdpbnQpIGNlbGwtPnhwYWQgKiAyICsgcHJpdi0+aW5kaWNhdG9yX3NpemU7CisgICBjYWxjX2hlaWdodCA9IChnaW50KSBjZWxsLT55cGFkICogMiArIHByaXYtPmluZGljYXRvcl9zaXplOworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrL3hzZXR0aW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGE5NzBhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKy94c2V0dGluZ3MucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBndGsrLTIuMjEuMi9nZGsveDExL2dka2V2ZW50cy14MTEuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMi4yMS4yLm9yaWcvZ2RrL3gxMS9nZGtldmVudHMteDExLmMJMjAxMC0wNi0yMiAxNzoyODowNC4wMDAwMDAwMDAgKzA4MDAKKysrKyBndGsrLTIuMjEuMi9nZGsveDExL2dka2V2ZW50cy14MTEuYwkyMDEwLTA2LTIyIDE3OjI4OjA2LjAwMDAwMDAwMCArMDgwMAorQEAgLTMwNjIsMTAgKzMwNjIsOSBAQAorIHsKKyAgIEdka1NjcmVlblgxMSAqc2NyZWVuID0gZGF0YTsKKyAgIAorLSAgaWYgKHhzZXR0aW5nc19jbGllbnRfcHJvY2Vzc19ldmVudCAoc2NyZWVuLT54c2V0dGluZ3NfY2xpZW50LCAoWEV2ZW50ICopeGV2ZW50KSkKKy0gICAgcmV0dXJuIEdES19GSUxURVJfUkVNT1ZFOworLSAgZWxzZQorLSAgICByZXR1cm4gR0RLX0ZJTFRFUl9DT05USU5VRTsKKysgIHhzZXR0aW5nc19jbGllbnRfcHJvY2Vzc19ldmVudCAoc2NyZWVuLT54c2V0dGluZ3NfY2xpZW50LCAoWEV2ZW50ICopeGV2ZW50KTsKKysKKysgIHJldHVybiBHREtfRklMVEVSX0NPTlRJTlVFOworIH0KKyAKKyBzdGF0aWMgQm9vbApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWYwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy5pbmMKQEAgLTAsMCArMSwxMTEgQEAKK1NVTU1BUlkgPSAiTXVsdGktcGxhdGZvcm0gdG9vbGtpdCBmb3IgY3JlYXRpbmcgR1VJcyIKK0RFU0NSSVBUSU9OID0gIkdUSysgaXMgYSBtdWx0aS1wbGF0Zm9ybSB0b29sa2l0IGZvciBjcmVhdGluZyBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiBPZmZlcmluZyBhIGNvbXBsZXRlIFwKK3NldCBvZiB3aWRnZXRzLCBHVEsrIGlzIHN1aXRhYmxlIGZvciBwcm9qZWN0cyByYW5naW5nIGZyb20gc21hbGwgb25lLW9mZiBwcm9qZWN0cyB0byBjb21wbGV0ZSBhcHBsaWNhdGlvbiBzdWl0ZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ndGsub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgY2Fpcm8gcGFuZ28gYXRrIGpwZWcgbGlicG5nIGdkay1waXhidWYgXAorICAgICAgICAgICBkb2Nib29rLXV0aWxzLW5hdGl2ZSBnZGstcGl4YnVmLW5hdGl2ZSBsaWJlcG94eSIKKworTElDRU5TRSA9ICJMR1BMdjIgJiBMR1BMdjIrICYgTEdQTHYyLjErIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ3RrLWRvYyB1cGRhdGUtYWx0ZXJuYXRpdmVzIGd0ay1pbW1vZHVsZXMtY2FjaGUgZ3NldHRpbmdzCisKKyMgVGhpcyBzaG91bGQgYmUgaW4gYXV0b3Rvb2xzLmJiY2xhc3MsIGJ1dCB1bnRpbCBzb21ldGhpbmcgZWxzZXMgdXNlcyBpdCBwdXR0aW5nCisjIGl0IGhlcmUgYXZvaWRzIHJlYnVpbGRpbmcgZXZlcnl0aGluZy4KK2V4cG9ydCBQS0dfQ09ORklHX0ZPUl9CVUlMRCA9ICIke1NUQUdJTkdfQklORElSX05BVElWRX0vcGtnLWNvbmZpZy1uYXRpdmUiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgRG8gdGhpcyBiZWNhdXNlIHRoZSBjb25maWd1cmUgc2NyaXB0IGlzIHJ1bm5pbmcgLi9saWJ0b29sIGRpcmVjdGx5CisgICAgcm0gLWYgbGlidG9vbAorICAgIGxuIC1zICR7VEFSR0VUX1BSRUZJWH1saWJ0b29sIGxpYnRvb2wKK30KKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtZ2xpYnRlc3QgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteGluZXJhbWEgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1tb2R1bGVzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWN1cHMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIngxMSIsICJ4MTEiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgIndheWxhbmQiLCAid2F5bGFuZCIsICIiLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtYmFja2VuZCwtLWRpc2FibGUteDExLWJhY2tlbmQsYXQtc3BpMi1hdGsgZm9udGNvbmZpZyBsaWJ4MTEgbGlieGV4dCBsaWJ4Y3Vyc29yIGxpYnhpIGxpYnhkYW1hZ2UgbGlieHJhbmRyIGxpYnhyZW5kZXIgbGlieGNvbXBvc2l0ZSBsaWJ4Zml4ZXMiCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtYmFja2VuZCwtLWRpc2FibGUtd2F5bGFuZC1iYWNrZW5kLHdheWxhbmQgbGlieGtiY29tbW9uIHZpcnR1YWwvbWVzYSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJbXYgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgJHtEfSR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1kZW1vIgorTElCViA9ICIzLjAuMCIKKworRklMRVNfJHtQTn0tZGVtbyA9ICIke2JpbmRpcn0vZ3RrMy1kZW1vIFwKKyAgICAgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L2d0azMtZGVtby1hcHBsaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLWljb24tYnJvd3NlciBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGszLXdpZGdldC1mYWN0b3J5IFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2RlbW8gXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLWRlbW8uZGVza3RvcCBcCisgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2d0azMtaWNvbi1icm93c2VyLmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9ndGszLXdpZGdldC1mYWN0b3J5LmRlc2t0b3AgXAorICAgICAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvKi9hcHBzL2d0azMtZGVtbyoucG5nIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLyovYXBwcy9ndGszLXdpZGdldC1mYWN0b3J5Ki5wbmciCisKKyMgVGhlIGRlbW8gdXNlcyBQTkcgZmlsZXMgYW5kIG1pbWUgdHlwZSBzbmlmZmluZywgc28gZW5zdXJlIHRoYXQgdGhlc2UKKyMgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50LgorUkRFUEVORFNfJHtQTn0tZGVtbyArPSAiZ2RrLXBpeGJ1Zi1sb2FkZXItcG5nIHNoYXJlZC1taW1lLWluZm8iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIFwKKyAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstcXVlcnktaW1tb2R1bGVzLTMuMCBcCisgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWxhdW5jaCBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliKiR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcyAke3N5c2NvbmZkaXJ9ICR7ZGF0YWRpcn0vZ2xpYi0yLjAvc2NoZW1hcy8gXAorICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzL2xpYnBpeG1hcC5zbyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLyouc28iCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2d0a2J1aWxkZXIucm5nIFwKKyAgICAgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9ndGstMy4wL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9sb2FkZXJzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2ltbW9kdWxlcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvMy4wLjAvcHJpbnRiYWNrZW5kcy8qLmxhIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2JpbmRpcn0vZ3RrLWJ1aWxkZXItY29udmVydCBcCisgICAgICAgICAgICAgICAgICAgICR7YmluZGlyfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyIKKworRklMRVNfJHtQTn0tZGJnICs9ICIgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC8ke0xJQlZ9L2xvYWRlcnMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9pbW1vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfS9lbmdpbmVzLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9ndGstMy4wLyR7TElCVn0vcHJpbnRiYWNrZW5kcy8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vZ3RrLTMuMC9tb2R1bGVzLy5kZWJ1ZyIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAiYWR3YWl0YS1pY29uLXRoZW1lLXN5bWJvbGljIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrMy1pbW1vZHVsZS0uKiBeZ3RrMy1wcmludGJhY2tlbmQtLioiCisKK0FMVEVSTkFUSVZFXyR7UE59ID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSIKK0FMVEVSTkFUSVZFX1RBUkdFVFtndGstdXBkYXRlLWljb24tY2FjaGVdID0gIiR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUtMy4wIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgaW1wb3J0IG9zLnBhdGgKKworICAgIGd0a19saWJkaXIgPSBkLmV4cGFuZCgnJHtsaWJkaXJ9L2d0ay0zLjAvJHtMSUJWfScpCisgICAgaW1tb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ2ltbW9kdWxlcycpCisgICAgcHJpbnRtb2R1bGVzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZ3RrX2xpYmRpciwgJ3ByaW50YmFja2VuZHMnKTsKKworICAgIGltbW9kdWxlcyA9IGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGszLWltbW9kdWxlLSVzJywgJ0dUSyBpbnB1dCBtb2R1bGUgZm9yICVzJykKKyAgICBpZiBpbW1vZHVsZXM6CisgICAgICAgIGQuc2V0VmFyKCJHVEtJTU1PRFVMRVNfUEFDS0FHRVMiLCAiICIuam9pbihpbW1vZHVsZXMpKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGszLXByaW50YmFja2VuZC0lcycsICdHVEsgcHJpbnRiYWNrZW5kIG1vZHVsZSBmb3IgJXMnKQorCisgICAgaWYgKGQuZ2V0VmFyKCdERUJJQU5fTkFNRVMnLCAxKSk6CisgICAgICAgIGQuc2V0VmFyKCdQS0dfJHtQTn0nLCAnJHtNTFBSRUZJWH1saWJndGstMy4wJykKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrMy9Eb250LWZvcmNlLWNzZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmQ4YTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvRG9udC1mb3JjZS1jc2QucGF0Y2gKQEAgLTAsMCArMSwxMTggQEAKK3dpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KKworCitGcm9tIGM1ZTVlZTY3NDkwZTdlN2FmNTYwNTJkOGY4YmViNzVkYjAwMmMyZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbW1hbnVlbGUgQmFzc2kgPGViYXNzaUBnbm9tZS5vcmc+CitEYXRlOiBXZWQsIDMgSnVuIDIwMTUgMTQ6MDc6MjkgKzAxMDAKK1N1YmplY3Q6IHdpbmRvdzogQ2hlY2sgaWYgd2UgY2FuIHVzZSBDU0QgYmVmb3JlIGVuYWJsaW5nIHRoZW0KKworVGhlIGNoYW5nZSBpbiAwMzIxM2I5NTA5ZmMxZGYxNmM2NjE5NGVhMTY4YWVkNmMxNTExMGU5IGNoYW5nZWQgdGhlIHJ1bGVzCithcyB0byB3aGVuIENTRCBjYW4gYmUgZW5hYmxlZCwgYnV0IGl0IGFsc28gdW5jb25kaXRpb25hbGx5IGVuYWJsZXMgQ1NECit3aXRoIHRoZSBpbXBsaWNpdCBhc3N1bXB0aW9uIHRoYXQgY2xpZW50LXNpZGUgc2hhZG93cyB3ZXJlIHRoZSByZWFsCitpc3N1ZSwgYW5kIHRoYXQgd2UgY291bGQgd29yayBhcm91bmQgdGhhdCBieSBkcmF3aW5nIG91ciBvd24gYm9yZGVycy4KK1RoaXMgYWxzbyBtZWFucyB0aGF0IHNldHRpbmcgYSB0aXRsZWJhciBmb3IgYSBHdGtXaW5kb3cgd2lsbCBlbmFibGUgQ1NECit1bmNvbmRpdGlvbmFsbHkuCisKK0luIHJlYWxpdHksIHNvbWUgd2luZG93IG1hbmFnZXJzIChsaWtlIE1hdGNoYm94KSAqb25seSogc3VwcG9ydAorc2VydmVyLXNpZGUgZGVjb3JhdGlvbnMsIGFuZCB3aWxsIGlnbm9yZSBhbGwgaGludHMgdG8gdGhlIGNvbnRyYXJ5LCB0bwordGhlIHBvaW50IG9mIGRyYXdpbmcgZGVjb3JhdGlvbnMgYXQgcmFuZG9tIGxvY2F0aW9ucyBvbiB0b3Agb2YgdGhlCit3aW5kb3cuCisKK1NpbmNlIENTRCBhcmUgZW5hYmxlZCB1bmNvbmRpdGlvbmFsbHksIHRoZSBHVEtfQ1NEIGVudmlyb25tZW50IHZhcmlhYmxlCitpcyBhbHNvIG5vdCBhIHN1aXRhYmxlIGVzY2FwZSBoYXRjaC4KKworSW4gdGhlIGdyYW5kIHRyYWRpdGlvbiBvZiBhc2tpbmcgb3Vyc2VsdmVzIGlmIHdlIHNob3VsZCBkbyBzb21ldGhpbmcKK2p1c3QgYmVjYXVzZSB3ZSBjYW4sIHdlIHNob3VsZCBzcGxpdCB0aGUgZW52aXJvbm1lbnQgY2hlY2tzIGZyb20gdGhlCitjaGVja3Mgb24gd2hhdCB0aGUgdXNlciByZXF1ZXN0ZWQ7IGJ5IGRvaW5nIHRoYXQsIHdlIGNhbiBhbHNvIGNoZWNrCit3aGVuIGVuYWJsaW5nIGNsaWVudC1zaWRlIGRlY29yYXRpb25zLCBhbmQgaWRlYWxseSBiYWlsIG91dCBpZiBuZWVkZWQuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NTAzNDMKKworZGlmZiAtLWdpdCBhL2d0ay9ndGt3aW5kb3cuYyBiL2d0ay9ndGt3aW5kb3cuYworaW5kZXggNDIzYzZiZC4uOWZlODgyZiAxMDA2NDQKKy0tLSBhL2d0ay9ndGt3aW5kb3cuYworKysrIGIvZ3RrL2d0a3dpbmRvdy5jCitAQCAtNDA1Niw2ICs0MDU2LDMyIEBAIGd0a193aW5kb3dfc3VwcG9ydHNfY2xpZW50X3NoYWRvdyAoR3RrV2luZG93ICp3aW5kb3cpCisgICByZXR1cm4gVFJVRTsKKyB9CisgCisrc3RhdGljIGdib29sZWFuCisrZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAoR3RrV2luZG93ICp3aW5kb3cpCisreworKyAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7CisrCisrI2lmZGVmIEdES19XSU5ET1dJTkdfQlJPQURXQVkKKysgIGlmIChHREtfSVNfQlJPQURXQVlfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19XQVlMQU5ECisrICBpZiAoR0RLX0lTX1dBWUxBTkRfRElTUExBWSAoZ3RrX3dpZGdldF9nZXRfZGlzcGxheSAoR1RLX1dJREdFVCAod2luZG93KSkpKQorKyAgICByZXR1cm4gVFJVRTsKKysjZW5kaWYKKysKKysjaWZkZWYgR0RLX1dJTkRPV0lOR19NSVIKKysgIGlmIChHREtfSVNfTUlSX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKysgICAgcmV0dXJuIFRSVUU7CisrI2VuZGlmCisrCisrICBjc2RfZW52ID0gZ19nZXRlbnYgKCJHVEtfQ1NEIik7CisrCisrICAvKiBJZiBHVEtfQ1NEIGlzIHVuc2V0IHdlIGRlZmF1bHQgdG8gQ1NEIHN1cHBvcnQgKi8KKysgIHJldHVybiBjc2RfZW52ID09IE5VTEwgfHwgKHN0cmNtcCAoY3NkX2VudiwgIjEiKSA9PSAwKTsKKyt9CisrCisgc3RhdGljIHZvaWQKKyBndGtfd2luZG93X2VuYWJsZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorIHsKK0BAIC00MDYzLDYgKzQwODksMTAgQEAgZ3RrX3dpbmRvd19lbmFibGVfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyAgIEd0a1dpZGdldCAqd2lkZ2V0ID0gR1RLX1dJREdFVCAod2luZG93KTsKKyAgIEdka1Zpc3VhbCAqdmlzdWFsOworIAorKyAgLyogSWYgdGhlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgQ1NELCB0aGVuIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZW5hYmxpbmcgdGhlbSAqLworKyAgaWYgKCFndGtfd2luZG93X2Nhbl91c2VfY3NkICh3aW5kb3cpKQorKyAgICByZXR1cm47CisrCisgICAvKiBXZSBuZWVkIGEgdmlzdWFsIHdpdGggYWxwaGEgZm9yIGNsaWVudCBzaGFkb3dzICovCisgICBpZiAocHJpdi0+dXNlX2NsaWVudF9zaGFkb3cpCisgICAgIHsKK0BAIC01ODM5LDcgKzU4NjksNiBAQCBzdGF0aWMgZ2Jvb2xlYW4KKyBndGtfd2luZG93X3Nob3VsZF91c2VfY3NkIChHdGtXaW5kb3cgKndpbmRvdykKKyB7CisgICBHdGtXaW5kb3dQcml2YXRlICpwcml2ID0gd2luZG93LT5wcml2OworLSAgY29uc3QgZ2NoYXIgKmNzZF9lbnY7CisgCisgICBpZiAocHJpdi0+Y3NkX3JlcXVlc3RlZCkKKyAgICAgcmV0dXJuIFRSVUU7CitAQCAtNTg1MCwyNCArNTg3OSw3IEBAIGd0a193aW5kb3dfc2hvdWxkX3VzZV9jc2QgKEd0a1dpbmRvdyAqd2luZG93KQorICAgaWYgKHByaXYtPnR5cGUgPT0gR1RLX1dJTkRPV19QT1BVUCkKKyAgICAgcmV0dXJuIEZBTFNFOworIAorLSNpZmRlZiBHREtfV0lORE9XSU5HX0JST0FEV0FZCistICBpZiAoR0RLX0lTX0JST0FEV0FZX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistI2lmZGVmIEdES19XSU5ET1dJTkdfV0FZTEFORAorLSAgaWYgKEdES19JU19XQVlMQU5EX0RJU1BMQVkgKGd0a193aWRnZXRfZ2V0X2Rpc3BsYXkgKEdUS19XSURHRVQgKHdpbmRvdykpKSkKKy0gICAgcmV0dXJuIFRSVUU7CistI2VuZGlmCistCistI2lmZGVmIEdES19XSU5ET1dJTkdfTUlSCistICBpZiAoR0RLX0lTX01JUl9ESVNQTEFZIChndGtfd2lkZ2V0X2dldF9kaXNwbGF5IChHVEtfV0lER0VUICh3aW5kb3cpKSkpCistICAgIHJldHVybiBUUlVFOworLSNlbmRpZgorLQorLSAgY3NkX2VudiA9IGdfZ2V0ZW52ICgiR1RLX0NTRCIpOworLQorLSAgcmV0dXJuIChnX3N0cmNtcDAgKGNzZF9lbnYsICIxIikgPT0gMCk7CisrICByZXR1cm4gZ3RrX3dpbmRvd19jYW5fdXNlX2NzZCAod2luZG93KTsKKyB9CisgCisgc3RhdGljIHZvaWQKKy0tIAorY2dpdCB2MC4xMC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrKzMvaGFyZGNvZGVkX2xpYnRvb2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0YmVlYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CisKK0luZGV4OiBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGd0aystMy44LjIub3JpZy9jb25maWd1cmUuYWMKKysrKyBndGsrLTMuOC4yL2NvbmZpZ3VyZS5hYworQEAgLTUzMSw3ICs1MzEsNyBAQCBBQ19NU0dfQ0hFQ0tJTkcoW1doZXRoZXIgdG8gd3JpdGUgZGVwZW5kCisgY2FzZSAkZW5hYmxlX2V4cGxpY2l0X2RlcHMgaW4KKyAgIGF1dG8pCisgICAgIGV4cG9ydCBTRUQKKy0gICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguL2xpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKysgICAgZGVwbGlic19jaGVja19tZXRob2Q9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gJ2V2YWwgZWNobyBcIiRkZXBsaWJzX2NoZWNrX21ldGhvZFwiJykgfCBzaGAKKyAgICAgaWYgdGVzdCAieCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0geHBhc3NfYWxsIHx8IHRlc3QgIngkZW5hYmxlX3N0YXRpYyIgPSB4eWVzIDsgdGhlbgorICAgICAgIGVuYWJsZV9leHBsaWNpdF9kZXBzPXllcworICAgICBlbHNlCitAQCAtNzkzLDcgKzc5Myw3IEBAIGVsc2UKKyAgICAgZG5sIE5vdyB3ZSBjaGVjayB0byBzZWUgaWYgb3VyIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYiBkZXBzCisgICAgIGRubCAoaW4gYSByYXRoZXIgdWdseSB3YXkgZXZlbikKKyAgICAgaWYgJGR5bndvcmtzOyB0aGVuCistICAgICAgICBtb2R1bGVfbGlidG9vbF9jb25maWc9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9IC4vbGlidG9vbCAtLWNvbmZpZyIKKysgICAgICAgIG1vZHVsZV9saWJ0b29sX2NvbmZpZz0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0gLi8kaG9zdF9hbGlhcy1saWJ0b29sIC0tY29uZmlnIgorICAgICAgICAgbW9kdWxlX2RlcGxpYnNfY2hlY2s9YCRtb2R1bGVfbGlidG9vbF9jb25maWcgfCBcCisgICAgICAgICAgICAgZ3JlcCAnXltbYS16X11dKmNoZWNrW1thLXpfXV0qX21ldGhvZD1bWydcJyciXV0nIHwgXAorICAgICAgICAgICAgIHNlZCAncy8uKltbJ1wnJyJdXVwoLipcKVtbJ1wnJyJdXSQvXDEvJ2AKK0BAIC0xNTI4LDcgKzE1MjgsNyBAQCBmaQorICMgV2UgYXJlIHVzaW5nIGdtb2R1bGUtbm8tZXhwb3J0IG5vdywgYnV0IEknbSBsZWF2aW5nIHRoZSBzdHJpcHBpbmcKKyAjIGNvZGUgaW4gcGxhY2UgZm9yIG5vdywgc2luY2UgcGFuZ28gYW5kIGF0ayBzdGlsbCByZXF1aXJlIGdtb2R1bGUuCisgZXhwb3J0IFNFRAorLWV4cG9ydF9keW5hbWljPWAoLi9saWJ0b29sIC0tY29uZmlnOyBlY2hvIGV2YWwgZWNobyBcXCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMpIHwgc2hgCisrZXhwb3J0X2R5bmFtaWM9YCguLyRob3N0X2FsaWFzLWxpYnRvb2wgLS1jb25maWc7IGVjaG8gZXZhbCBlY2hvIFxcJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYykgfCBzaGAKKyBpZiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWMiOyB0aGVuCisgICBHREtfREVQX0xJQlM9YGVjaG8gJEdES19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCisgICBHVEtfREVQX0xJQlM9YGVjaG8gJEdUS19ERVBfTElCUyB8IHNlZCAtZSAicy8kZXhwb3J0X2R5bmFtaWMvLyJgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrM18zLjE2LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ3MzZhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ayszXzMuMTYuNi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIGd0ayszLmluYworCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiaHR0cDovL2Z0cC5nbm9tZS5vcmcvcHViL2dub21lL3NvdXJjZXMvZ3RrKy8ke01BSl9WRVJ9L2d0aystJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0RvbnQtZm9yY2UtY3NkLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzU5ZTVjOGI1YTQ1ODViNjA2MjNkZDcwOGRmNDAwYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0ZDEyNzI2ZDA4NTZhOTY4YjQxODAyYWU1YzU5NzFkN2U5YmFjNTMyNzE3ZTMwOWQzZjgxYjk5ODlkYTVmZmJlIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWYzMGYwNzE2ZGZkZDBkOTFlYjQzOWViZWM1MjJlYzIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3RrL2d0ay5oO2VuZGxpbmU9MjU7bWQ1PTFkOGRjMGZjY2RiZmEyNjI4N2EyNzFkY2U4OGFmNzM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dkay9nZGsuaDtlbmRsaW5lPTI1O21kNT1jOTIwY2UzOWRjODhjNmYwNmQzZTdjNTBlMDgwODZmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90ZXN0cy90ZXN0Z3RrLmM7ZW5kbGluZT0yNTttZDU9Y2I3MzJkYWVlMWQ4MmFmN2EyYmY5NTNjZjNjZjI2ZjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrKy9ndGsrXzIuMjQuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0Mzc3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0aytfMi4yNC4yOC5iYgpAQCAtMCwwICsxLDM0IEBACityZXF1aXJlIGd0aysuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI3O21kNT1jNTllMGI0NDkwZGQxMzVhNTcyNmViZjg1MWY5YjE3ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNzttZDU9MDdkYjI4NWVjMjA4ZmIzZTBiZjdkODYxYjA2MTQyMDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9Mjc7bWQ1PTI2MmRiNWRiNWY3NzZmOTg2M2U1NmRmMzE0MjNlMjRjIgorU1JDX1VSSSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvZ25vbWUvc291cmNlcy9ndGsrLzIuMjQvZ3RrKy0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8veHNldHRpbmdzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhcmRjb2RlZF9saWJ0b29sLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3RvZ2dsZS1mb250LmRpZmY7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL2RvYy1maXhlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zdHJpY3QtcHJvdG90eXBlcy5wYXRjaCBcCisJICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiZmFjZjg3YjJlYTY3ZTRlNWM3ODY2YTkwMDNlNjUyNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiMmM2NDQxZTk4YmM1MjMyZTVmOWJiYTY5NjUwNzVkY2Y1ODBhODcyNjM5OGY3Mzc0ZDM5ZjkwYjg4ZWQ0NjU2IgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUteGtiIC0tZGlzYWJsZS1nbGlidGVzdCAtLWRpc2FibGUtY3VwcyAtLWRpc2FibGUteGluZXJhbWEiCisKK0xJQlYgPSAiMi4xMC4wIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeZ3RrLWltbW9kdWxlLS4qIF5ndGstcHJpbnRiYWNrZW5kLS4qIgorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCAoKSB7CisgICAgZ3RrX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3RrLTIuMC8ke0xJQlZ9JykKKyAgICBpbW1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAnaW1tb2R1bGVzJykKKyAgICBwcmludG1vZHVsZXNfcm9vdCA9IG9zLnBhdGguam9pbihndGtfbGliZGlyLCAncHJpbnRiYWNrZW5kcycpOworCisgICAgZC5zZXRWYXIoJ0dUS0lNTU9EVUxFU19QQUNLQUdFUycsICcgJy5qb2luKGRvX3NwbGl0X3BhY2thZ2VzKGQsIGltbW9kdWxlc19yb290LCAnXmltLSguKilcLnNvJCcsICdndGstaW1tb2R1bGUtJXMnLCAnR1RLIGlucHV0IG1vZHVsZSBmb3IgJXMnKSkpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcHJpbnRtb2R1bGVzX3Jvb3QsICdebGlicHJpbnRiYWNrZW5kLSguKilcLnNvJCcsICdndGstcHJpbnRiYWNrZW5kLSVzJywgJ0dUSyBwcmludGJhY2tlbmQgbW9kdWxlIGZvciAlcycpCisKKyAgICBpZiAoZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpKToKKyAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYmd0ay0yLjAnKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMtbmF0aXZlXzMuMTYuNi5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjE2LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMzgxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzLW5hdGl2ZV8zLjE2LjYuYmIKQEAgLTAsMCArMSw2MyBAQAorU1VNTUFSWSA9ICJOYXRpdmUgaWNvbiB1dGlscyBmb3IgR1RLKyIKK0RFU0NSSVBUSU9OID0gImd0ay11cGRhdGUtaWNvbi1jYWNoZSBhbmQgZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcgYnVpbHQgZnJvbSBHVEsrIG5hdGl2ZWx5LCBmb3IgYnVpbGQgdGltZSBhbmQgb24taG9zdCBwb3N0aW5zdCBzY3JpcHQgZXhlY3V0aW9uLiIKK1NFQ1RJT04gPSAibGlicyIKKworREVQRU5EUyA9ICJnbGliLTIuMC1uYXRpdmUgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlicnN2Zy1uYXRpdmUiCisKK0xJQ0VOU0UgPSAiTEdQTHYyICYgTEdQTHYyKyAmIExHUEx2Mi4xKyIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gImh0dHA6Ly9mdHAuZ25vbWUub3JnL3B1Yi9nbm9tZS9zb3VyY2VzL2d0aysvJHtNQUpfVkVSfS9ndGsrLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgZmlsZTovL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIgorU1JDX1VSSVttZDVzdW1dID0gImZjNTllNWM4YjVhNDU4NWI2MDYyM2RkNzA4ZGY0MDBiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjRkMTI3MjZkMDg1NmE5NjhiNDE4MDJhZTVjNTk3MWQ3ZTliYWM1MzI3MTdlMzA5ZDNmODFiOTk4OWRhNWZmYmUiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2d0ay9ndGsuaDtlbmRsaW5lPTI1O21kNT0xZDhkYzBmY2NkYmZhMjYyODdhMjcxZGNlODhhZjczNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nZGsvZ2RrLmg7ZW5kbGluZT0yNTttZDU9YzkyMGNlMzlkYzg4YzZmMDZkM2U3YzUwZTA4MDg2ZjIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdHMvdGVzdGd0ay5jO2VuZGxpbmU9MjU7bWQ1PWNiNzMyZGFlZTFkODJhZjdhMmJmOTUzY2YzY2YyNmYxIgorCitTID0gIiR7V09SS0RJUn0vZ3RrKy0ke1BWfSIKKworaW5oZXJpdCBwa2djb25maWcgbmF0aXZlCisKK1BLR19DT05GSUdfRk9SX0JVSUxEID0gIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnLW5hdGl2ZSIKKworZG9fY29uZmlndXJlKCkgeworCSMgUXVpdGUgdWdseSBidXQgZGVmaW5lcyBlbm91Z2ggdG8gY29tcGlsZSB0aGUgdG9vbHMuCisJaWYgISB0ZXN0IC1mIGd0ay9jb25maWcuaDsgdGhlbgorCQllY2hvICIjZGVmaW5lIEdFVFRFWFRfUEFDS0FHRSBcImd0azMwXCIiID4+IGd0ay9jb25maWcuaAorCQllY2hvICIjZGVmaW5lIEhBVkVfVU5JU1REX0ggMSIgPj4gZ3RrL2NvbmZpZy5oCisJCWVjaG8gIiNkZWZpbmUgSEFWRV9GVFdfSCAxIiA+PiBndGsvY29uZmlnLmgKKwlmaQorCWlmICEgdGVzdCAtZiBnZGsvY29uZmlnLmg7IHRoZW4KKwkJdG91Y2ggZ2RrL2NvbmZpZy5oCisJZmkKK30KKworZG9fY29tcGlsZSgpIHsKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL3VwZGF0ZWljb25jYWNoZS5jIFwKKwkJJCgke1BLR19DT05GSUdfRk9SX0JVSUxEfSAtLWNmbGFncyAtLWxpYnMgZ2RrLXBpeGJ1Zi0yLjApIFwKKwkJLW8gZ3RrLXVwZGF0ZS1pY29uLWNhY2hlCisKKwkke0JVSUxEX0NDfSAke0JVSUxEX0NGTEFHU30gJHtCVUlMRF9MREZMQUdTfSBcCisJCSR7U30vZ3RrL2VuY29kZXN5bWJvbGljLmMgXAorCQkkKCR7UEtHX0NPTkZJR19GT1JfQlVJTER9IC0tY2ZsYWdzIC0tbGlicyBnaW8tMi4wIGdkay1waXhidWYtMi4wKSBcCisJCS1vIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCit9CisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7Qn0vZ3RrLXVwZGF0ZS1pY29uLWNhY2hlICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9ndGstZW5jb2RlLXN5bWJvbGljLXN2ZyAke0R9JHtiaW5kaXJ9CisKKwljcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS9ndGstdXBkYXRlLWljb24tY2FjaGUgXAorCQlHREtfUElYQlVGX01PRFVMRV9GSUxFPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9nZGstcGl4YnVmLTIuMC8yLjEwLjAvbG9hZGVycy5jYWNoZQorCWNyZWF0ZV93cmFwcGVyICR7RH0vJHtiaW5kaXJ9L2d0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIFwKKwkJR0RLX1BJWEJVRl9NT0RVTEVfRklMRT0ke1NUQUdJTkdfTElCRElSX05BVElWRX0vZ2RrLXBpeGJ1Zi0yLjAvMi4xMC4wL2xvYWRlcnMuY2FjaGUKK30KKworIyBQcmV2ZW50IGJpdGJha2UgZnJvbSBvcHRpbWl6aW5nIGF3YXkgdGhlIG5hdGl2ZSBsaWJyc3ZnIHN5c3Jvb3QgcG9wdWxhdGlvbgorZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZVtkZXBlbmRzXSArPSAibGlicnN2Zy1uYXRpdmU6ZG9fcG9wdWxhdGVfc3lzcm9vdF9zZXRzY2VuZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0aysvZ3RrLWljb24tdXRpbHMvUmVtb3ZlLUdkay1kZXBlbmRlbmN5LWZyb20tZ3RrLWVuY29kZS1zeW1ib2xpYy1zdmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM3ZjgwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGsrL2d0ay1pY29uLXV0aWxzL1JlbW92ZS1HZGstZGVwZW5kZW5jeS1mcm9tLWd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnLnBhdGNoCkBAIC0wLDAgKzEsMTAyIEBACitGcm9tIDRkMDlmZjMyNDQxOWZlNGU2NzEyMzMwNDRlNDI0Mzc4ZGE1Mzk2OWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogVHVlLCA5IEp1biAyMDE1IDE0OjIwOjMwICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlbW92ZSBHZGstZGVwZW5kZW5jeSBmcm9tIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnCisKK0J1aWxkaW5nIGd0ay1lbmNvZGUtc3ltYm9saWMtc3ZnIHdpdGhvdXQgYnVpbGRpbmcgR2RrIGlzIHVzZWZ1bAorYXMgb25seSB0aGUgaWNvbiB0b29scyBhcmUgbmVlZGVkIG9uIHRoZSBuYXRpdmUgYnVpbGQ6IHRoaXMgbWFrZXMKK25hdGl2ZSBidWlsZCBtdWNoIGZhc3RlciBhbmQgcmVxdWlyZXMgbXVjaCBsZXNzIGRlcGVuZGVuY2llcy4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBndGsvZW5jb2Rlc3ltYm9saWMuYyB8IDM2ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2d0ay9lbmNvZGVzeW1ib2xpYy5jIGIvZ3RrL2VuY29kZXN5bWJvbGljLmMKK2luZGV4IDlmN2QwMTUuLjFmMDc1NjMgMTAwNjQ0CistLS0gYS9ndGsvZW5jb2Rlc3ltYm9saWMuYworKysrIGIvZ3RrL2VuY29kZXN5bWJvbGljLmMKK0BAIC0xOSw3ICsxOSw2IEBACisgCisgI2luY2x1ZGUgPGdsaWIuaD4KKyAjaW5jbHVkZSA8Z2RrLXBpeGJ1Zi9nZGstcGl4ZGF0YS5oPgorLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisgI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyAKKyAjaWZkZWYgSEFWRV9VTklTVERfSAorQEAgLTQzLDMwICs0MiwxOCBAQCBzdGF0aWMgR2RrUGl4YnVmICoKKyBsb2FkX3N5bWJvbGljX3N2ZyAoY2hhciAqZmlsZV9kYXRhLCBnc2l6ZSBmaWxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqZmcsCistICAgICAgICAgICAgICAgICAgIGNvbnN0IEdka1JHQkEgICpzdWNjZXNzX2NvbG9yLAorLSAgICAgICAgICAgICAgICAgICBjb25zdCBHZGtSR0JBICAqd2FybmluZ19jb2xvciwKKy0gICAgICAgICAgICAgICAgICAgY29uc3QgR2RrUkdCQSAgKmVycm9yX2NvbG9yLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3NfZmcsCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNzc19zdWNjZXNzLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjc3Nfd2FybmluZywKKysgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3NzX2Vycm9yLAorICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICoqZXJyb3IpCisgeworICAgR0lucHV0U3RyZWFtICpzdHJlYW07CisgICBHZGtQaXhidWYgKnBpeGJ1ZjsKKy0gIGdjaGFyICpjc3NfZmc7CistICBnY2hhciAqY3NzX3N1Y2Nlc3M7CistICBnY2hhciAqY3NzX3dhcm5pbmc7CistICBnY2hhciAqY3NzX2Vycm9yOworICAgZ2NoYXIgKmRhdGE7CisgICBnY2hhciAqc3ZnX3dpZHRoLCAqc3ZnX2hlaWdodDsKKyAgIGdjaGFyICplc2NhcGVkX2ZpbGVfZGF0YTsKKyAKKy0gIGNzc19mZyA9IGdka19yZ2JhX3RvX3N0cmluZyAoZmcpOworLQorLSAgY3NzX3N1Y2Nlc3MgPSBjc3Nfd2FybmluZyA9IGNzc19lcnJvciA9IE5VTEw7CistCistICBjc3Nfd2FybmluZyA9IGdka19yZ2JhX3RvX3N0cmluZyAod2FybmluZ19jb2xvcik7CistICBjc3NfZXJyb3IgPSBnZGtfcmdiYV90b19zdHJpbmcgKGVycm9yX2NvbG9yKTsKKy0gIGNzc19zdWNjZXNzID0gZ2RrX3JnYmFfdG9fc3RyaW5nIChzdWNjZXNzX2NvbG9yKTsKKy0KKyAgIC8qIEZldGNoIHNpemUgZnJvbSB0aGUgb3JpZ2luYWwgaWNvbiAqLworICAgc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKGZpbGVfZGF0YSwgZmlsZV9sZW4sIE5VTEwpOworICAgcGl4YnVmID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV9zdHJlYW0gKHN0cmVhbSwgTlVMTCwgZXJyb3IpOworQEAgLTEwNSwxMCArOTIsNiBAQCBsb2FkX3N5bWJvbGljX3N2ZyAoY2hhciAqZmlsZV9kYXRhLCBnc2l6ZSBmaWxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIjwvc3ZnPiIsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgZ19mcmVlIChlc2NhcGVkX2ZpbGVfZGF0YSk7CistICBnX2ZyZWUgKGNzc19mZyk7CistICBnX2ZyZWUgKGNzc193YXJuaW5nKTsKKy0gIGdfZnJlZSAoY3NzX2Vycm9yKTsKKy0gIGdfZnJlZSAoY3NzX3N1Y2Nlc3MpOworICAgZ19mcmVlIChzdmdfd2lkdGgpOworICAgZ19mcmVlIChzdmdfaGVpZ2h0KTsKKyAKK0BAIC0xNjcsNyArMTUwLDggQEAgbWFrZV9zeW1ib2xpY19waXhidWYgKGNoYXIgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgKiplcnJvcikKKyAKKyB7CistICBHZGtSR0JBIHIgPSB7IDEsMCwwLDF9LCBnID0gezAsMSwwLDF9OworKyAgY29uc3QgY2hhciByW10gPSAicmdiYSgyNTUsMCwwLDEpIjsKKysgIGNvbnN0IGNoYXIgZ1tdID0gInJnYmEoMCwyNTUsMCwxKSI7CisgICBHZGtQaXhidWYgKmxvYWRlZDsKKyAgIEdka1BpeGJ1ZiAqcGl4YnVmOworICAgaW50IHBsYW5lOworQEAgLTE5NiwxMCArMTgwLDEwIEBAIG1ha2Vfc3ltYm9saWNfcGl4YnVmIChjaGFyICpmaWxlLAorICAgICAgICAqIHRoZSAicmVzdCIsIGFzIGFsbCBjb2xvciBmcmFjdGlvbnMgc2hvdWxkIGFkZCB1cCB0byAxLgorICAgICAgICAqLworICAgICAgIGxvYWRlZCA9IGxvYWRfc3ltYm9saWNfc3ZnIChmaWxlX2RhdGEsIGZpbGVfbGVuLCB3aWR0aCwgaGVpZ2h0LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMCA/ICZyIDogJmcsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDEgPyAmciA6ICZnLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAyID8gJnIgOiAmZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhbmUgPT0gMCA/IHIgOiBnLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZSA9PSAxID8gciA6IGcsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5lID09IDIgPyByIDogZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpOworICAgICAgIGlmIChsb2FkZWQgPT0gTlVMTCkKKyAgICAgICAgIHJldHVybiBOVUxMOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWRvYy1zdHViL2d0ay1kb2Mtc3R1Yl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmMzI0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZG9jLXN0dWIvZ3RrLWRvYy1zdHViX2dpdC5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYyIKK0RFU0NSSVBUSU9OID0gIlN0dWIgaW1wbGVtZW50YXRpb24gb2YgZ3RrLWRvYywgYXMgd2UgZG9uJ3Qgd2FudCB0byBidWlsZCB0aGUgQVBJIGRvY3VtZW50YXRpb24iCitTRUNUSU9OID0gIngxMS9iYXNlIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorCitQUk9WSURFUyA9ICJndGstZG9jIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIgorCitTUkNSRVYgPSAiMWRlYTI2NjU5M2VkYjc2NmQ2ZDg5OGM3OTQ1MWVmMTkzZWIxN2NmYSIKK1BWID0gIjEuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZ25vbWUub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL2dsaWItMi4zMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGI4NzhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzLTIuMjAuMi9nbGliLTIuMzIucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAorRnJvbSA4ZDQ5YTM4NmY0NjdjYmY4ZTA4NDJkMjIxODEyNmY2NDNlNTBmODM0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRG9taW5pcXVlIExldWVuYmVyZ2VyIDxkaW1zdGFyQG9wZW5zdXNlLm9yZz4KK0RhdGU6IFN1biwgMjcgTm92IDIwMTEgMTQ6MjQ6NTcgKzAwMDAKK1N1YmplY3Q6IEZpeCBidWlsZCB3aXRoIGdsaWIgMi4zMTogT25seSBnbGliLmggY2FuIGJlICNpbmNsdWRlJ2QuIEZpeGVzIGJ1ZyAjNjY0OTE0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworLS0tCitkaWZmIC0tZ2l0IGEvZW5naW5lcy9jbGVhcmxvb2tzL3NyYy9hbmltYXRpb24uYyBiL2VuZ2luZXMvY2xlYXJsb29rcy9zcmMvYW5pbWF0aW9uLmMKK2luZGV4IDFmN2E0MWYuLjU2YTkyODYgMTAwNjQ0CistLS0gYS9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCisrKysgYi9lbmdpbmVzL2NsZWFybG9va3Mvc3JjL2FuaW1hdGlvbi5jCitAQCAtMjgsNyArMjgsNyBAQAorICNpbmNsdWRlICJhbmltYXRpb24uaCIKKyAKKyAjaWZkZWYgSEFWRV9XT1JLSU5HX0FOSU1BVElPTgorLSNpbmNsdWRlIDxnbGliL2d0aW1lci5oPgorKyNpbmNsdWRlIDxnbGliLmg+CisgCisgc3RydWN0IF9BbmltYXRpb25JbmZvIHsKKyAJR1RpbWVyICp0aW1lcjsKKy0tCitjZ2l0IHYwLjkuMC4yCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvZ3RrLWVuZ2luZXMvZ3RrLWVuZ2luZXMtMi4yMC4yL3N1YnN0aXR1dGUtdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM1NTdiYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lcy0yLjIwLjIvc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDM3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYyBndGstZW5naW5lcy0yLjIwLjIvY29uZmlndXJlLmFjCistLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL2NvbmZpZ3VyZS5hYwkyMDEwLTEwLTAxIDE1OjQyOjM3LjAwMDAwMDAwMCArMDMwMAorKysrIGd0ay1lbmdpbmVzLTIuMjAuMi9jb25maWd1cmUuYWMJMjAxMy0wOC0yMCAwMjo1MDoyNy45MzA1MTA1NjUgKzAzMDAKK0BAIC0xNjYsNiArMTY2LDkgQEAKKworIEFDX1NVQlNUKERFVkVMT1BNRU5UX0NGTEFHUykKKworK0FDX1NVQlNUKFtleHBvcnRlZF9zeW1ib2xzX3Rlc3RzXSwgW1skKEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMpXV0pCisrQUNfU1VCU1QoW3RvcnR1cmVfdGVzdF90ZXN0c10sIFtbJChUT1JUVVJFX1RFU1RfVEVTVFMpXV0pCisrCisgQU1fQ09ORklHX0hFQURFUihbZW5naW5lcy9zdXBwb3J0L2NvbmZpZy5oXSkKKworIEFDX0NPTkZJR19GSUxFUyhbCitkaWZmIC1OdXJkIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtIGd0ay1lbmdpbmVzLTIuMjAuMi90ZXN0L01ha2VmaWxlLmFtCistLS0gZ3RrLWVuZ2luZXMtMi4yMC4yL3Rlc3QvTWFrZWZpbGUuYW0JMjAxMC0wOS0xOSAxODoxODoyMS4wMDAwMDAwMDAgKzAzMDAKKysrKyBndGstZW5naW5lcy0yLjIwLjIvdGVzdC9NYWtlZmlsZS5hbQkyMDEzLTA4LTIwIDAyOjUwOjM2Ljg0MjUxMDg2NSArMDMwMAorQEAgLTY2LDcgKzY2LDcgQEAKKyAjIFByZWZpeCB3aXRoIGV4cG9ydGVkXworIEVYUE9SVEVEX1NZTUJPTFNfVEVTVFMgPSAkKHBhdHN1YnN0ICUsZXhwb3J0ZWRfJSwkKEJVSUxEX0VOR0lORVMpKQorCistVEVTVFMgKz0gJChFWFBPUlRFRF9TWU1CT0xTX1RFU1RTKQorK1RFU1RTICs9IEBleHBvcnRlZF9zeW1ib2xzX3Rlc3RzQAorCisKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAQCAtODgsNyArODgsNyBAQAorIFRPUlRVUkVfVEVTVF9URVNUUyA9IHRvcnR1cmVfYnVpbGRpbiAkKHBhdHN1YnN0ICUsdG9ydHVyZV8lLCQoVE9SVFVSRV9URVNUX0VOR0lORVMpKQorCisgIyBBZGQgVE9SVFVSRV9URVNUX0VOR0lORVMgdG8gbGlzdCBvZiB0ZXN0cworLVRFU1RTICs9ICQoVE9SVFVSRV9URVNUX1RFU1RTKQorK1RFU1RTICs9IEB0b3J0dXJlX3Rlc3RfdGVzdHNACisKKyAjIFBvc3NpYmxlIG90aGVyIHRlc3RzOgorICMgIC0gQW4gZXh0ZW5zaXZlIHRoZW1lIHN3aXRjaCB0ZXN0cyB0aGF0IGxvYWRzL3VubG9hZHMgdGhlIGVuZ2luZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2d0ay1lbmdpbmVzL2d0ay1lbmdpbmVzXzIuMjAuMi5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lc18yLjIwLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMwNDU0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstZW5naW5lcy9ndGstZW5naW5lc18yLjIwLjIuYmIKQEAgLTAsMCArMSw0OSBAQAorU1VNTUFSWSA9ICJHVEsrIHRoZW1lIGVuZ2luZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmdub21lLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorREVQRU5EUyA9ICJpbnRsdG9vbC1uYXRpdmUgZ3RrKyIKKworUFIgPSAicjMiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1zY2hlbWFzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmd0ay1lbmdpbmUtLiogXmd0ay10aGVtZS0uKiIKKworUkRFUEVORFNfZ3RrLXRoZW1lLXJlZG1vbmQgPSAiZ3RrLWVuZ2luZS1yZWRtb25kOTUiCitSREVQRU5EU19ndGstdGhlbWUtbWV0YWwgPSAiZ3RrLWVuZ2luZS1tZXRhbCIKK1JERVBFTkRTX2d0ay10aGVtZS1taXN0ID0gImd0ay1lbmdpbmUtbWlzdCIKK1JERVBFTkRTX2d0ay10aGVtZS1jcnV4ID0gImd0ay1lbmdpbmUtY3J1eC1lbmdpbmUiCitSREVQRU5EU19ndGstdGhlbWUtbGlnaHRob3VzZWJsdWUgPSAiZ3RrLWVuZ2luZS1saWdodGhvdXNlYmx1ZSIKK1JERVBFTkRTX2d0ay10aGVtZS10aGluaWNlID0gImd0ay1lbmdpbmUtdGhpbmljZSIKK1JERVBFTkRTX2d0ay10aGVtZS1pbmR1c3RyaWFsID0gImd0ay1lbmdpbmUtaW5kdXN0cmlhbCIKK1JERVBFTkRTX2d0ay10aGVtZS1jbGVhcmxvb2tzID0gImd0ay1lbmdpbmUtY2xlYXJsb29rcyIKKworRklMRVNfJHtQTn0gPSAiIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2VuZ2luZXMvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXNjaGVtYXMgPSAiJHtkYXRhZGlyfS9ndGstZW5naW5lcy8qLnhtbCIKKworQ0ZMQUdTX3ByZXBlbmQgPSAiLURIQVZFX0FOSU1BVElPTiAiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCisKK2luaGVyaXQgZ25vbWViYXNlCitHTk9NRV9DT01QUkVTU19UWVBFPSJiejIiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGVuZ2luZXNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignbGliZGlyJywgVHJ1ZSksICJndGstMi4wLzIuMTAuMC9lbmdpbmVzIikKKyAgICB0aGVtZXNfcm9vdCA9IG9zLnBhdGguam9pbihkLmdldFZhcignZGF0YWRpcicsIFRydWUpLCAidGhlbWVzIikKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGVuZ2luZXNfcm9vdCwgJ15saWIoLiopXC5zbyQnLCAnZ3RrLWVuZ2luZS0lcycsICdHVEsgJXMgdGhlbWUgZW5naW5lJywgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCB0aGVtZXNfcm9vdCwgJyguKiknLCAnZ3RrLXRoZW1lLSVzJywgJ0dUSyB0aGVtZSAlcycsIGFsbG93X2RpcnM9VHJ1ZSwgZXh0cmFfZGVwZW5kcz0nJykKKyAgICAjIFRPRE86IG1hcmsgdGhlbWUgcGFja2FnZXMgYXMgYXJjaCBhbGwKK30KKworU1JDX1VSSSArPSAiZmlsZTovL2dsaWItMi4zMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc3Vic3RpdHV0ZS10ZXN0cy5wYXRjaCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjVkZWIyODdiYzYwNzVkYzIxODEyMTMwNjA0YzdkYzRmIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTViNjgwYWJjYTZjNzczZWNiODUyNTM1MjFmYTEwMGRkM2I4NTQ5YmVmZWVjYzc1OTViMTAyMDlkNjJkNjZiNSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9ndGstdGhlbWUtdG9ydHVyZXIvZ3RrLXRoZW1lLXRvcnR1cmVyX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODlmZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2d0ay10aGVtZS10b3J0dXJlci9ndGstdGhlbWUtdG9ydHVyZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR1RLKyBUaGVtZSBiZW5jaG1hcmsgcHJvZ3JhbSIKK0RFUEVORFMgPSAiZ3RrKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93aWtpLmxhcHRvcC5vcmcvZ28vR1RLX2Zvcl9PTFBDIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9hcHB3aW5kb3cuYztlbmRsaW5lPTEzO21kNT04YzA5OTIwZGU0NjBjN2VhMWY2NGVlNTY5ODZhYWJkOSIKKworU1JDUkVWID0gIjk5OTYyYWUzOWJiNWFhZGIzMTkyOWIyNWM1OGUxYTA1M2Y5Yzk1NDUiCitQViA9ICIwLjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9kZXYubGFwdG9wLm9yZy9wcm9qZWN0cy9zb2MtZ3RrLyIKK1MgPSAiJHtXT1JLRElSfS9naXQvZ3RrLXRoZW1lLXRvcnR1cmVyIgorCitDRkxBR1MgKz0gIi1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgdG9ydHVyZXIgJHtEfSR7YmluZGlyfQorfQorCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9oaWNvbG9yLWljb24tdGhlbWUvaGljb2xvci1pY29uLXRoZW1lXzAuMTUuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvaGljb2xvci1pY29uLXRoZW1lL2hpY29sb3ItaWNvbi10aGVtZV8wLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDQ2MzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvaGljb2xvci1pY29uLXRoZW1lL2hpY29sb3ItaWNvbi10aGVtZV8wLjE1LmJiCkBAIC0wLDAgKzEsMTQgQEAKK1NVTU1BUlkgPSAiRGVmYXVsdCBpY29uIHRoZW1lIHRoYXQgYWxsIGljb24gdGhlbWVzIGF1dG9tYXRpY2FsbHkgaW5oZXJpdCBmcm9tIgorSE9NRVBBR0UgPSAiaHR0cDovL2ljb24tdGhlbWUuZnJlZWRlc2t0b3Aub3JnL3dpa2kvSGljb2xvclRoZW1lIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWYwOGE0NDY4MDk5MTNmYzliM2M3MThmMGVhZWEwNDI2IgorCitTUkNfVVJJID0gImh0dHA6Ly9pY29uLXRoZW1lLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjZhYTJiMzk5M2E4ODNkODUwMTdjN2NjMGNmYzBmYjczIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljYzQ1YWMzMzE4YzMxMjEyZWEyZDhjYjk5ZTY0MDIwNzMyMzkzZWU3NjMwZmE2YzE4MTBhZjVmOTg3MDMzY2MiCisKK2luaGVyaXQgYWxsYXJjaCBhdXRvdG9vbHMKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9qc29uLWdsaWIvanNvbi1nbGliXzEuMC40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MDhhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvanNvbi1nbGliL2pzb24tZ2xpYl8xLjAuNC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkpTT04tR0xpYiBpbXBsZW1lbnRzIGEgZnVsbCBKU09OIHBhcnNlciB1c2luZyBHTGliIGFuZCBHT2JqZWN0IgorREVTQ1JJUFRJT04gPSAiVXNlIEpTT04tR0xpYiBpdCBpcyBwb3NzaWJsZSB0byBwYXJzZSBhbmQgZ2VuZXJhdGUgdmFsaWQgSlNPTlwKKyBkYXRhIHN0cnVjdHVyZXMsIHVzaW5nIGEgRE9NLWxpa2UgQVBJLiBKU09OLUdMaWIgYWxzbyBvZmZlcnMgR09iamVjdCBcCitpbnRlZ3JhdGlvbiwgcHJvdmlkaW5nIHRoZSBhYmlsaXR5IHRvIHNlcmlhbGl6ZSBhbmQgZGVzZXJpYWxpemUgR09iamVjdCBcCitpbnN0YW5jZXMgdG8gYW5kIGZyb20gSlNPTiBkYXRhIHR5cGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9Kc29uR2xpYiIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImdsaWItMi4wIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICIzMTMxYjA0MTdlY2RlM2RhMWFlNzJhY2NlYWEzNzVjZiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjgwZjM1OTNjYjZiZDEzZjE0NjU4MjhlNDZhOWY3NDBlMmU5YmQzY2QyMjU3ODg5NDQyYjNlNjJiZDZkZTA1Y2QiCisKK2luaGVyaXQgZ25vbWViYXNlIGdldHRleHQgbGliX3BhY2thZ2UKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS8wMDAxLW1pcHMtVXNlLWNvbXBpbGVyLWludGVybmFsLWRlZmluZS1mb3ItbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5NmU2MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGE1ZWZhYTk2ZmQ5MzRlYjI0NWMyMzRhNTI3NWZjZjYyNjk4ZWY5ODYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogVGh1LCAyIEFwciAyMDE1IDIxOjM4OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1pcHM6IFVzZSBjb21waWxlciBpbnRlcm5hbCBkZWZpbmUgZm9yIGxpbnV4CisKK19fbGludXhfXyBpcyBkZWZpbmVkIGJ5IGNvbXBpbGVyIHdoZW4gYnVpbGRpbmcgZm9yCitsaW51eCBwbGF0Zm9ybXMsIGxldHMgdXNlIGl0CisKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzcmMvbWlwcy9mZml0YXJnZXQuaCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9taXBzL2ZmaXRhcmdldC5oIGIvc3JjL21pcHMvZmZpdGFyZ2V0LmgKK2luZGV4IDcxN2Q2NTkuLjZmYWEzNTggMTAwNjQ0CistLS0gYS9zcmMvbWlwcy9mZml0YXJnZXQuaAorKysrIGIvc3JjL21pcHMvZmZpdGFyZ2V0LmgKK0BAIC0zMiw3ICszMiw3IEBACisgI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGlyZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyAjZW5kaWYKKyAKKy0jaWZkZWYgbGludXgKKysjaWZkZWYgX19saW51eF9fCisgIyBpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgorICNlbGlmIGRlZmluZWQoX19ydGVtc19fKQorIC8qCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJmZmkvbGliZmZpL2ZpeC1saWJmZmkubGEtbG9jYXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS9maXgtbGliZmZpLmxhLWxvY2F0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NWJmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaS9maXgtbGliZmZpLmxhLWxvY2F0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGxpYmZmaS0zLjAuMTMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJmZmktMy4wLjEzLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBsaWJmZmktMy4wLjEzL01ha2VmaWxlLmFtCitAQCAtOTgsNyArOTgsNyBAQCBGTEFHU19UT19QQVNTID0gJChBTV9NQUtFRkxBR1MpCisgCisgTUFLRU9WRVJSSURFUz0KKyAKKy10b29sZXhlY2xpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQorK2xpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQorIG5vaW5zdF9MVExJQlJBUklFUyA9IGxpYmZmaV9jb252ZW5pZW5jZS5sYQorIAorIGxpYmZmaV9sYV9TT1VSQ0VTID0gc3JjL3ByZXBfY2lmLmMgc3JjL3R5cGVzLmMgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZmZpL2xpYmZmaV8zLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDkxNmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmZmaS9saWJmZmlfMy4yLjEuYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJBIHBvcnRhYmxlIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgYGxpYmZmaScgbGlicmFyeSBwcm92aWRlcyBhIHBvcnRhYmxlLCBoaWdoIGxldmVsIHByb2dyYW1taW5nIGludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgXAorY29udmVudGlvbnMuICBUaGlzIGFsbG93cyBhIHByb2dyYW1tZXIgdG8gY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuIFwKK3RpbWUuIEZGSSBzdGFuZHMgZm9yIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlLiAgQSBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZSBpcyB0aGUgcG9wdWxhciBuYW1lIGZvciB0aGUgXAoraW50ZXJmYWNlIHRoYXQgYWxsb3dzIGNvZGUgd3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gIFRoZSBgbGliZmZpJyBcCitsaWJyYXJ5IHJlYWxseSBvbmx5IHByb3ZpZGVzIHRoZSBsb3dlc3QsIG1hY2hpbmUgZGVwZW5kZW50IGxheWVyIG9mIGEgZnVsbHkgZmVhdHVyZWQgZm9yZWlnbiBmdW5jdGlvbiBpbnRlcmZhY2UuICBcCitBIGxheWVyIG11c3QgZXhpc3QgYWJvdmUgYGxpYmZmaScgdGhhdCBoYW5kbGVzIHR5cGUgY29udmVyc2lvbnMgZm9yIHZhbHVlcyBwYXNzZWQgYmV0d2VlbiB0aGUgdHdvIGxhbmd1YWdlcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9MzYxMGJiMTc2ODNhMDA4OWVkNjQwNTU0MTZiMmFlMWIiCisKK1NSQ19VUkkgPSAiZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2xpYmZmaS8ke0JQfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZml4LWxpYmZmaS5sYS1sb2NhdGlvbi5wYXRjaCBcCisJICAgZmlsZTovLzAwMDEtbWlwcy1Vc2UtY29tcGlsZXItaW50ZXJuYWwtZGVmaW5lLWZvci1saW51eC5wYXRjaCBcCisJICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODNiODk1ODc2MDdlM2ViNjVjNzBkMzYxZjEzYmFiNDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZDA2ZWJiOGUxZDlhMjJkMTllMzhkNjNmZGI4Mzk1NDI1M2YzOWJlZGM1ZDQ2MjMyYTA1NjQ1Njg1NzIyY2EzNyIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtYnVpbGRkaXIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vbGliZmZpLSR7UFZ9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvZ2xhZGUtY3J1ZnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkNTg2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9nbGFkZS1jcnVmdC5wYXRjaApAQCAtMCwwICsxLDEwMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjAvY29uZmlndXJlLmluCistLS0gbGliZ2xhZGUtMi40LjB+L2NvbmZpZ3VyZS5pbgkyMDA0LTA1LTE3IDEyOjM4OjMxLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmdsYWRlLTIuNC4wL2NvbmZpZ3VyZS5pbgkyMDA0LTA3LTI4IDE2OjUzOjA5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0Nyw2ICsxNDcsMTggQEAKKyBBTV9DT05ESVRJT05BTChIQVZFX1BZVEhPTiwgJGhhdmVfcHl0aG9uKQorIEFDX1NVQlNUKFBZVEhPTikKKyAKKytBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBjcnVmdCBpbiBsaWJndGtdKQorK0FDX1RSWV9MSU5LKFsKKysjaW5jbHVkZSA8Z3RrL2d0ay5oPgorKyNpbmNsdWRlIDxzdGRpby5oPgorK10sICAgICAgWyBndGtfdHJlZV9nZXRfdHlwZSAoKTsgcmV0dXJuIDA7IF0sCisrICAgICAgICBbIEFDX01TR19SRVNVTFQoeWVzKQorKyAgICAgICAgICBoYXZlX2NydWZ0PXllcyBdLAorKyAgICAgICAgWyBBQ19NU0dfUkVTVUxUKG5vKQorKwkgIEFDX0RFRklORShESVNBQkxFX0NSVUZULCxbbGVhdmUgb3V0IHN1cHBvcnQgZm9yIG9sZCwgYnJva2VuIHdpZGdldHNdKQorKyAgICAgICAgICBoYXZlX2NydWZ0PW5vIF0pCisrQUNfU1VCU1QoRElTQUJMRV9DUlVGVCkKKysKKyBkbmwgYWRkIGRlYnVnZ2luZyBvcHRpb25zIC4uLgorIGNoYW5nZXF1b3RlKCwpZG5sCisgaWYgdGVzdCAieCRHQ0MiID0geHllczsgdGhlbgorT25seSBpbiBsaWJnbGFkZS0yLjQuMDogY29uZmlndXJlLmluLm9yaWcKK2RpZmYgLXVyIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYyBsaWJnbGFkZS0yLjQuMC9nbGFkZS9nbGFkZS1ndGsuYworLS0tIGxpYmdsYWRlLTIuNC4wfi9nbGFkZS9nbGFkZS1ndGsuYwkyMDA0LTAzLTEzIDEzOjQ3OjM1LjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdsYWRlLTIuNC4wL2dsYWRlL2dsYWRlLWd0ay5jCTIwMDQtMDctMjggMTY6NTM6NTIuMDAwMDAwMDAwICswMTAwCitAQCAtMjEzLDYgKzIxMyw4IEBACisgCWd0a19jbGlzdF9jb2x1bW5fdGl0bGVzX2hpZGUgKEdUS19DTElTVCAodykpOworIH0KKyAKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKysKKyBzdGF0aWMgdm9pZAorIHRyZWVfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTIzOCw2ICsyNDAsOCBAQAorICAgICBndGtfdHJlZV9zZXRfdmlld19saW5lcyAoR1RLX1RSRUUgKHcpLCBCT09MICh2YWx1ZSkpOworIH0KKyAKKysjZW5kaWYKKysKKyBzdGF0aWMgdm9pZAorIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCisgCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQorQEAgLTI1NCw2ICsyNTgsNyBAQAorICAgICBndGtfY2hlY2tfbWVudV9pdGVtX3NldF9zaG93X3RvZ2dsZSAoR1RLX0NIRUNLX01FTlVfSVRFTSAodyksIEJPT0wgKHZhbHVlKSk7CisgfQorIAorKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorIHN0YXRpYyB2b2lkCisgdGV4dF9zZXRfdGV4dCAoR2xhZGVYTUwgKnhtbCwgR3RrV2lkZ2V0ICp3LAorIAkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCitAQCAtMjYyLDYgKzI2Nyw3IEBACisgCisgICAgIGd0a19lZGl0YWJsZV9pbnNlcnRfdGV4dCAoR1RLX0VESVRBQkxFICh3KSwgdmFsdWUsIC0xLCAmcG9zKTsKKyB9CisrI2VuZGlmCisgCisgc3RhdGljIHZvaWQKKyByYWRpb19tZW51X2l0ZW1fc2V0X2dyb3VwIChHbGFkZVhNTCAqeG1sLCBHdGtXaWRnZXQgKncsCitAQCAtMTEyNSwxMyArMTEzMSwxNyBAQAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfQ0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGNsaXN0X3NldF9zZWxlY3Rpb25fbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9DTElTVCwgInNoYWRvd190eXBlIiwgY2xpc3Rfc2V0X3NoYWRvd190eXBlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NMSVNULCAic2hvd190aXRsZXMiLCBjbGlzdF9zZXRfc2hvd190aXRsZXMpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInNlbGVjdGlvbl9tb2RlIiwgdHJlZV9zZXRfc2VsZWN0aW9uX21vZGUpOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVFJFRSwgInZpZXdfbW9kZSIsIHRyZWVfc2V0X3ZpZXdfbW9kZSk7CisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9UUkVFLCAidmlld19saW5lIiwgdHJlZV9zZXRfdmlld19saW5lKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0xJU1QsICJzZWxlY3Rpb25fbW9kZSIsIGxpc3Rfc2V0X3NlbGVjdGlvbl9tb2RlKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX0NIRUNLX01FTlVfSVRFTSwgImFsd2F5c19zaG93X3RvZ2dsZSIsCisgCQkJCWNoZWNrX21lbnVfaXRlbV9zZXRfYWx3YXlzX3Nob3dfdG9nZ2xlKTsKKysjaWZuZGVmIERJU0FCTEVfQ1JVRlQKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfY3VzdG9tX3Byb3AgKEdUS19UWVBFX1RFWFQsICJ0ZXh0IiwgdGV4dF9zZXRfdGV4dCk7CisrI2VuZGlmCisgICAgIGdsYWRlX3JlZ2lzdGVyX2N1c3RvbV9wcm9wIChHVEtfVFlQRV9SQURJT19NRU5VX0lURU0sICJncm91cCIsCisgCQkJCXJhZGlvX21lbnVfaXRlbV9zZXRfZ3JvdXApOworICAgICBnbGFkZV9yZWdpc3Rlcl9jdXN0b21fcHJvcCAoR1RLX1RZUEVfVE9PTEJBUiwgInRvb2x0aXBzIiwgdG9vbGJhcl9zZXRfdG9vbHRpcHMpOworQEAgLTEyODgsOCArMTI5OCwxMCBAQAorIAkJCSAgIGdsYWRlX3N0YW5kYXJkX2J1aWxkX2NoaWxkcmVuLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URUFST0ZGX01FTlVfSVRFTSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNpZm5kZWYgRElTQUJMRV9DUlVGVAorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RFWFQsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKysjZW5kaWYKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9URVhUX1ZJRVcsIGdsYWRlX3N0YW5kYXJkX2J1aWxkX3dpZGdldCwKKyAJCQkgICBOVUxMLCBOVUxMKTsKKyAgICAgZ2xhZGVfcmVnaXN0ZXJfd2lkZ2V0IChHVEtfVFlQRV9USVBTX1FVRVJZLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCitAQCAtMTMwNCw4ICsxMzE2LDEwIEBACisgCQkJICAgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfY2hpbGRyZW4sIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RPT0xfQlVUVE9OLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCisgCQkJICAgTlVMTCwgTlVMTCk7CisrI2lmbmRlZiBESVNBQkxFX0NSVUZUCisgICAgIGdsYWRlX3JlZ2lzdGVyX3dpZGdldCAoR1RLX1RZUEVfVFJFRSwgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworKyNlbmRpZgorICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1RSRUVfVklFVywgZ2xhZGVfc3RhbmRhcmRfYnVpbGRfd2lkZ2V0LAorIAkJCSAgIE5VTEwsIE5VTEwpOworICAgICBnbGFkZV9yZWdpc3Rlcl93aWRnZXQgKEdUS19UWVBFX1ZCVVRUT05fQk9YLCBnbGFkZV9zdGFuZGFyZF9idWlsZF93aWRnZXQsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJnbGFkZS9saWJnbGFkZS0yLjYuNC9uby14bWwyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGMwOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvbm8teG1sMi5wYXRjaApAQCAtMCwwICsxLDUwMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9jb25maWd1cmUuaW4gbGliZ2xhZGUtMi40LjIvY29uZmlndXJlLmluCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9jb25maWd1cmUuaW4JMjAwNS0wMi0xMSAxMjo0Mjo1OC4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9jb25maWd1cmUuaW4JMjAwNS0wMy0yMiAwMToyMjowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01MiwxMSArNTIsMzMgQEAKKyBBQ19QQVRIX1BST0coUEtHX0NPTkZJRywgcGtnLWNvbmZpZywgbm8pCisgCisgUEtHX0NIRUNLX01PRFVMRVMoTElCR0xBREUsIFtkbmwKKy0gIGxpYnhtbC0yLjAgPj0gcmVxdWlyZWRfbGlieG1sX3ZlcnNpb24gZG5sCisgICBhdGsgPj0gcmVxdWlyZWRfYXRrX3ZlcnNpb24gZG5sCisgICBndGsrLTIuMCA+PSByZXF1aXJlZF9ndGtfdmVyc2lvbiBkbmwKKyAgIGdsaWItMi4wID49IHJlcXVpcmVkX2dsaWJfdmVyc2lvbl0pCisgCisrZGlzYWJsZV94bWwyPW5vCisrQUNfQVJHX1dJVEgoW2xpYnhtbDJdLAorKyAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1saWJ4bWwyXSwgW0Rvbid0IHVzZSBsaWJ4bWwyLCB1c2UgR2xpYidzIEdNYXJrdXBQYXJzZXIgaW5zdGVhZF0pLAorKyAgW2Rpc2FibGVfeG1sMj15ZXNdLAorKyAgW2Rpc2FibGVfeG1sMj1ub10pCisrCisrQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBhcmUgdXNpbmcgbGlieG1sMl0pCisraWYgdGVzdCAieCRkaXNhYmxlX3htbDIiID09ICJ4bm8iOyB0aGVuCisrICBBQ19NU0dfUkVTVUxUKHllcykKKysgIFBLR19DSEVDS19NT0RVTEVTKFhNTDIsIGxpYnhtbC0yLjAgPj0gMi40LjEwKQorKyAgUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMj0ibGlieG1sLTIuMCIKKysgIExJQkdMQURFX0NGTEFHUz0iJExJQkdMQURFX0NGTEFHUyAkWE1MMl9DRkxBR1MiCisrICBMSUJHTEFERV9MSUJTPSIkTElCR0xBREVfTElCUyAkWE1MMl9MSUJTIgorK2Vsc2UKKysgIExJQkdMQURFX0NGTEFHUz0iJExJQkdMQURFX0NGTEFHUyAtRFVTRV9HTUFSS1VQX1BBUlNFUiIKKysgIFBLR0NGR19SRVFVSVJFX0xJQlhNTDI9IiIKKysgIEFDX01TR19SRVNVTFQobm8pCisrZmkKKysKKytBQ19TVUJTVChYTUwyX0xJQlMpCisrQUNfU1VCU1QoWE1MMl9DRkxBR1MpCisrQUNfU1VCU1QoUEtHQ0ZHX1JFUVVJUkVfTElCWE1MMikKKysKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBuYXRpdmUgV2luMzJdKQorIGNhc2UgIiRob3N0IiBpbgorICAgKi0qLW1pbmd3KikKK0BAIC0xMTYsNiArMTM4LDIxIEBACisgICBmaQorIGZpCisgCisraWYgdGVzdCAieCRkaXNhYmxlX3htbDIiID09ICJ4eWVzIjsgdGhlbgorKyAgZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioiCisrICBlY2hvICIgIFlvdSBjaG9zZSB0byBkaXNhYmxlIGxpYnhtbDIgYW5kIHVzZSBHbGliJ3MiCisrICBlY2hvICIgIEdNYXJrdXBQYXJzZXIgaW5zdGVhZC4iIAorKyAgZWNobyAgCisrICBlY2hvICIgIFBsZWFzZSBiZWFyIGluIG1pbmQgdGhhdCB1c2luZyBsaWJnbGFkZSB3aXRoIgorKyAgZWNobyAiICBHTWFya3VwUGFyc2VyIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlIG9ubHkuIgorKyAgZWNobworKyAgZWNobyAiICBQbGVhc2UgcG9zdCBwcm9ibGVtcyBvciBzdWNjZXNzIHN0b3JpZXMgdG8iCisrICBlY2hvICIgIHRoZSBnbGFkZS1kZXZlbCBtYWlsaW5nIGxpc3QuIFRoYW5rIHlvdS4iCisrICBlY2hvICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIKKytmaQorKworKworKworIEdUS19ET0NfQ0hFQ0soMS4wKQorIAorIGRubCBnZXR0ZXh0IHN0dWZmIC4uLiB0aGVyZSBpcyBubyBtZXNzYWdlIGNhdGFsb2cgZm9yIGxpYmdsYWRlIC0tIGxpYmdsYWRlCitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9nbGFkZS9nbGFkZS1wYXJzZXIuYyBsaWJnbGFkZS0yLjQuMi9nbGFkZS9nbGFkZS1wYXJzZXIuYworLS0tIGxpYmdsYWRlLTIuNC4yLm9yaWcvZ2xhZGUvZ2xhZGUtcGFyc2VyLmMJMjAwNC0xMS0xMSAxMTo1NjoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9nbGFkZS9nbGFkZS1wYXJzZXIuYwkyMDA1LTAzLTIyIDAxOjIwOjAwLjAwMDAwMDAwMCArMDEwMAorQEAgLTM0LDcgKzM0LDE1IEBACisgIyAgZGVmaW5lIGRnZXR0ZXh0KERvbWFpbiwgU3RyaW5nKSAoU3RyaW5nKQorICNlbmRpZgorIAorLSNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisrI2lmZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKyMgIGluY2x1ZGUgPHpsaWIuaD4KKysjZWxzZQorKyMgIGluY2x1ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKysjZW5kaWYKKysKKysjaWZkZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrIyAgZGVmaW5lIHhtbENoYXIgZ2NoYXIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSAiZ2xhZGUtcGFyc2VyLmgiCisgI2luY2x1ZGUgImdsYWRlLXByaXZhdGUuaCIKK0BAIC01MDgsNyArNTE2LDkgQEAKKyAgICAgY2FzZSBQQVJTRVJfU1RBUlQ6CisgCWlmICghc3RyY21wKG5hbWUsICJnbGFkZS1pbnRlcmZhY2UiKSkgeworIAkgICAgc3RhdGUtPnN0YXRlID0gUEFSU0VSX0dMQURFX0lOVEVSRkFDRTsKKy0jaWYgMAorKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrICNpZiAwCisgCSAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBYTUwgbmFtZXNwYWNlICovCisgCSAgICBmb3IgKGkgPSAwOyBhdHRycyAmJiBhdHRyc1tpXSAhPSBOVUxMOyBpICs9IDIpIHsKKyAJCWlmICghc3RyY21wKGF0dHJzW2ldLCAieG1sbnMiKSAmJgorQEAgLTUxOCw3ICs1MjgsOSBAQAorIAkJICAgIGdfd2FybmluZygidW5rbm93biBhdHRyaWJ1dGUgYCVzJyBmb3IgPGdsYWRlLWludGVyZmFjZT4iLAorIAkJCSAgICAgIGF0dHJzW2ldKTsKKyAJICAgIH0KKysgI2VuZGlmCisgI2VuZGlmCisrCisgCX0gZWxzZSB7CisgCSAgICBnX3dhcm5pbmcoIkV4cGVjdGVkIDxnbGFkZS1pbnRlcmZhY2U+LiAgR290IDwlcz4uIiwgbmFtZSk7CisgCSAgICBzdGF0ZS0+cHJldl9zdGF0ZSA9IHN0YXRlLT5zdGF0ZTsKK0BAIC0xMDYzLDEyICsxMDc1LDE4IEBACisgICAgIH0KKyB9CisgCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgeG1sRW50aXR5UHRyCisgZ2xhZGVfcGFyc2VyX2dldF9lbnRpdHkoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgeG1sQ2hhciAqbmFtZSkKKyB7CisgICAgIHJldHVybiB4bWxHZXRQcmVkZWZpbmVkRW50aXR5KG5hbWUpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfd2FybmluZyhHbGFkZVBhcnNlU3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptc2csIC4uLikKKyB7CitAQCAtMTA3OSw2ICsxMDk3LDEwIEBACisgICAgIHZhX2VuZChhcmdzKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIHN0YXRpYyB2b2lkCisgZ2xhZGVfcGFyc2VyX2Vycm9yKEdsYWRlUGFyc2VTdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQorIHsKK0BAIC0xMDg5LDYgKzExMTEsMTAgQEAKKyAgICAgdmFfZW5kKGFyZ3MpOworIH0KKyAKKysjZW5kaWYgLyogIWRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgc3RhdGljIHZvaWQKKyBnbGFkZV9wYXJzZXJfZmF0YWxfZXJyb3IoR2xhZGVQYXJzZVN0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqbXNnLCAuLi4pCisgeworQEAgLTEwOTksNiArMTEyNSwxMCBAQAorICAgICB2YV9lbmQoYXJncyk7CisgfQorIAorKyNlbmRpZiAvKiAhZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgeG1sU0FYSGFuZGxlciBnbGFkZV9wYXJzZXIgPSB7CisgICAgIChpbnRlcm5hbFN1YnNldFNBWEZ1bmMpTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGludGVybmFsU3Vic2V0ICovCisgICAgIChpc1N0YW5kYWxvbmVTQVhGdW5jKU5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlzU3RhbmRhbG9uZSAqLworQEAgLTExMjYsNiArMTE1Niw4MiBAQAorICAgICAoZmF0YWxFcnJvclNBWEZ1bmMpZ2xhZGVfcGFyc2VyX2ZhdGFsX2Vycm9yLCAgICAgICAvKiBmYXRhbEVycm9yICovCisgfTsKKyAKKysjZWxzZSAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9zdGFydF9lbGVtZW50X3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgKm5hbWUsIAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICoqYXR0cl9uYW1lcywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqKmF0dHJfdmFsdWVzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgc3RhdGUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnJvcikKKyt7CisrICAgIGd1aW50IGkgPSAwOworKworKyAgICAvKiBQYWNrIGF0dHJpYnV0ZSBuYW1lcy92YWx1ZXMgZnJvbSB0d28gc2VwYXJhdGUKKysgICAgICogIGFycmF5cyAoR01hcmt1cFBhcnNlciBzdHlsZSkgaW50byBvbmUgc2luZ2xlCisrICAgICAqICBhcnJheSAobGlieG1sIFNBWFBhcnNlciBzdHlsZSkuIFRoaXMgaXMgbm90CisrICAgICAqICB2ZXJ5IGVmZmljaWVudCwgYnV0IHdlIGRvIGl0IHRvIG1ha2UgdGhlCisrICAgICAqICBHTWFya3VwUGFyc2VyIGNvZGUgYXMgbGl0dGxlIGludmFzaXZlIGFzCisrICAgICAqICBwb3NzaWJsZS4gKi8KKysKKysgICAgd2hpbGUgKGF0dHJfbmFtZXNbaV0gIT0gTlVMTCkgeworKyAgICAgICsraTsKKysgICAgfQorKworKyAgICBpZiAoMSkKKysgICAgeworKyAgICAgICAgY29uc3QgZ2NoYXIgKmF0dHJbKGkqMikrMV07CisrICAgICAgICBndWludCBqLCBrOworKyAgICAgICAKKysgICAgICAgIGZvciAoaj0wLCBrPTA7ICBrIDwgaTsgIGogKz0gMikKKysgICAgICAgIHsKKysgICAgICAgICAgICBhdHRyW2pdID0gYXR0cl9uYW1lc1trXTsKKysgICAgICAgICAgICBhdHRyW2orMV0gPSBhdHRyX3ZhbHVlc1trXTsKKysgICAgICAgICAgICArK2s7CisrICAgICAgICB9CisrICAgICAgICBhdHRyW2kqMl0gPSBOVUxMOworKworKyAgICAgICAgZ2xhZGVfcGFyc2VyX3N0YXJ0X2VsZW1lbnQoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIG5hbWUsIGF0dHIpOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkCisrZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50X3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAqbmFtZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgKiplcnIpCisreworKyAgICBnbGFkZV9wYXJzZXJfZW5kX2VsZW1lbnQoKEdsYWRlUGFyc2VTdGF0ZSopc3RhdGUsIG5hbWUpOworK30KKysKKytzdGF0aWMgdm9pZAorK2dsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzX3dyYXBwZXIoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICpjaGFycywgCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgICAgICAgICBsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICBzdGF0ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAqKmVycikKKyt7CisrICAgIGdsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzKChHbGFkZVBhcnNlU3RhdGUqKXN0YXRlLCBjaGFycywgKGludCkgbGVuKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKytnbGFkZV9wYXJzZXJfZXJyb3IoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwgR0Vycm9yICplcnIsIGdwb2ludGVyIGRhdGEpCisreworKyAgICBnX2xvZygiR2xhZGUtUGFyc2VyIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICIlcyIsIGVyci0+bWVzc2FnZSk7CisrfQorKworK3N0YXRpYyBjb25zdCBHTWFya3VwUGFyc2VyICAgZ2xhZGVfcGFyc2VyID0geworKyAgICBnbGFkZV9wYXJzZXJfc3RhcnRfZWxlbWVudF93cmFwcGVyLCAgLyogZWxlbWVudCBvcGVuICAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2VuZF9lbGVtZW50X3dyYXBwZXIsICAgIC8qIGVsZW1lbnQgY2xvc2UgICovCisrICAgIGdsYWRlX3BhcnNlcl9jaGFyYWN0ZXJzX3dyYXBwZXIsICAgICAvKiB0ZXh0IGNvbnRlbnQgICAqLworKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcGFzc3Rocm91Z2ggICAgKi8KKysgICAgZ2xhZGVfcGFyc2VyX2Vycm9yLCAgICAgICAgICAgICAgICAgIC8qIHBhcnNlIGVycm9yICAgICovCisrfTsKKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisgc3RhdGljIHZvaWQKKyB3aWRnZXRfaW5mb19mcmVlKEdsYWRlV2lkZ2V0SW5mbyAqaW5mbykKKyB7CitAQCAtMTE5MSw2ICsxMjk3LDkgQEAKKyAgKgorICAqIFJldHVybnM6IHRoZSBHbGFkZUludGVyZmFjZSBzdHJ1Y3R1cmUgZm9yIHRoZSBYTUwgZmlsZS4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIEdsYWRlSW50ZXJmYWNlICoKKyBnbGFkZV9wYXJzZXJfcGFyc2VfZmlsZShjb25zdCBnY2hhciAqZmlsZSwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyB7CitAQCAtMTIyMiw2ICsxMzMxLDMxIEBACisgICAgIHJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworK0dsYWRlSW50ZXJmYWNlICoKKytnbGFkZV9wYXJzZXJfcGFyc2VfZmlsZShjb25zdCBnY2hhciAqZmlsZSwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrICAgIEdsYWRlSW50ZXJmYWNlICAqaW50ZXJmYWNlOworKyAgICBHRXJyb3IgICAgICAgICAgKmVyciAgICAgPSBOVUxMOworKyAgICBnY2hhciAgICAgICAgICAgKmNvbnRlbnQgPSBOVUxMOworKyAgICBnc2l6ZSAgICAgICAgICAgIGNsZW47CisrCisrICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlLCAmY29udGVudCwgJmNsZW4sICZlcnIpKSB7CisrICAgICAgICBnX3dhcm5pbmcoImNvdWxkIG5vdCBsb2FkIGdsYWRlIGZpbGU6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKysgICAgICAgIGdfZXJyb3JfZnJlZShlcnIpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgaW50ZXJmYWNlID0gZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcihjb250ZW50LCAoZ2ludCkgY2xlbiwgZG9tYWluKTsKKysKKysgICAgZ19mcmVlKGNvbnRlbnQpOworKworKyAgICByZXR1cm4gaW50ZXJmYWNlOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisgLyoqCisgICogZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcgorICAqIEBidWZmZXI6IGEgYnVmZmVyIGluIG1lbW9yeSBjb250YWluaW5nIFhNTCBkYXRhLgorQEAgLTEyMzcsNiArMTM3MSw5IEBACisgICoKKyAgKiBSZXR1cm5zOiB0aGUgR2xhZGVJbnRlcmZhY2Ugc3RydWN0dXJlIGZvciB0aGUgWE1MIGJ1ZmZlci4KKyAgKi8KKysKKysjaWZuZGVmIFVTRV9HTUFSS1VQX1BBUlNFUgorKworIEdsYWRlSW50ZXJmYWNlICoKKyBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorIHsKK0BAIC0xMjYzLDYgKzE0MDAsMTYxIEBACisgICAgIHJldHVybiBzdGF0ZS5pbnRlcmZhY2U7CisgfQorIAorKyNlbHNlIC8qIGRlZmluZWQoVVNFX0dNQVJLVVBfUEFSU0VSKSAqLworKworKworK3N0YXRpYyBHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2J1ZmZlcl9pbnRlcm5hbChjb25zdCBnY2hhciAqYnVmZmVyLCBnaW50IGxlbiwgY29uc3QgZ2NoYXIgKmRvbWFpbikKKyt7CisrCUdNYXJrdXBQYXJzZUNvbnRleHQgICpjb250ZXh0OworKwlHbGFkZVBhcnNlU3RhdGUgICAgICAgc3RhdGUgPSB7IDAgfTsKKysJR0Vycm9yICAgICAgICAgICAgICAgKmVyciAgID0gTlVMTDsKKysKKysJc3RhdGUuaW50ZXJmYWNlID0gTlVMTDsKKysJaWYgKGRvbWFpbikKKysJCXN0YXRlLmRvbWFpbiA9IGRvbWFpbjsKKysJZWxzZQorKwkJc3RhdGUuZG9tYWluID0gdGV4dGRvbWFpbihOVUxMKTsKKysKKysJLyogRklYTUU6IFRoaXMgc3Ryc3RyKCkgaXMgbm90IHNhZmUsIGFzIGl0IGlnbm9yZXMgdGhlIGxlbgorKwkgKiAgICAgICAgYXJndW1lbnQgYW5kIGFzc3VtZXMgdGhlIGJ1ZmZlciBpcyBOVUwtdGVybWluYXRlZCAqLworKwlpZiAoc3Ryc3RyKGJ1ZmZlciwgIjw/eG1sIikgPT0gTlVMTCkgeworKwkJZ193YXJuaW5nKCJObyBYTUwgaGVhZGVyIGZvdW5kIGluIGRvY3VtZW50ISIpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJY29udGV4dCA9IGdfbWFya3VwX3BhcnNlX2NvbnRleHRfbmV3KCZnbGFkZV9wYXJzZXIsIChHTWFya3VwUGFyc2VGbGFncykgMCwgJnN0YXRlLCBOVUxMKTsKKysKKysJZ2xhZGVfcGFyc2VyX3N0YXJ0X2RvY3VtZW50KCZzdGF0ZSk7CisrCisrCWlmICghZ19tYXJrdXBfcGFyc2VfY29udGV4dF9wYXJzZShjb250ZXh0LCBidWZmZXIsIChnc3NpemUpIGxlbiwgJmVycikpIHsKKysJCWdfd2FybmluZygiZG9jdW1lbnQgbm90IHdlbGwgZm9ybWVkOiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCQlnX2Vycm9yX2ZyZWUoZXJyKTsKKysJCWlmIChzdGF0ZS5pbnRlcmZhY2UpCisrCQkJZ2xhZGVfaW50ZXJmYWNlX2Rlc3Ryb3kgKHN0YXRlLmludGVyZmFjZSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlnbGFkZV9wYXJzZXJfZW5kX2RvY3VtZW50KCZzdGF0ZSk7CisrCisrCWlmIChzdGF0ZS5zdGF0ZSAhPSBQQVJTRVJfRklOSVNIKSB7CisrCQlnX3dhcm5pbmcoImRpZCBub3QgZmluaXNoIGluIFBBUlNFUl9GSU5JU0ggc3RhdGUhIik7CisrCisrCQlpZiAoc3RhdGUuaW50ZXJmYWNlKQorKwkJCWdsYWRlX2ludGVyZmFjZV9kZXN0cm95KHN0YXRlLmludGVyZmFjZSk7CisrCisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlyZXR1cm4gc3RhdGUuaW50ZXJmYWNlOworK30KKysKKytzdHJ1Y3QgX2d6aXBfcmZjMTk1Ml9oZHIKKyt7CisrCWd1aW50OAlpZDEsIGlkMiwgY20sIGZsYWdzOworKwlndWludDMyIG10aW1lOworKwlndWludDggIHhmbGFnczsKKysJZ3VpbnQ4ICBvczsKKyt9OworKworK3N0YXRpYyBHbGFkZUludGVyZmFjZSAqCisrZ2xhZGVfcGFyc2VyX3BhcnNlX2d6aXBwZWRfYnVmZmVyKGNvbnN0IGdjaGFyICpidWZmZXIsIGdpbnQgbGVuLCBjb25zdCBnY2hhciAqZG9tYWluKQorK3sKKysJc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyICpoZHIgPSAoc3RydWN0IF9nemlwX3JmYzE5NTJfaGRyKilidWZmZXI7CisrCXN0cnVjdCB6X3N0cmVhbV9zICAgICAgICAgenN0cmVhbTsKKysJR2xhZGVJbnRlcmZhY2UgICAgICAgICAgICppbnRlcmZhY2U7CisrCWNvbnN0IGd1aW50OCAgICAgICAgICAgICAqY2J1ZjsgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSAqLworKwlndWludDggICAgICAgICAgICAgICAgICAgKmRlY29tcHJlc3NfYnVmOworKwlndWxvbmcgICAgICAgICAgICAgICAgICAgIGRlY29tcHJlc3NfbGVuID0gMDsKKysJZ2ludCAgICAgICAgICAgICAgICAgICAgICByZXQ7CisrCisrCWdfYXNzZXJ0KGhkciAhPSBOVUxMICYmIGhkci0+aWQxID09IDB4MWYgJiYgaGRyLT5pZDIgPT0gMHg4Yik7CisrCisrCWlmIChoZHItPmNtICE9IFpfREVGTEFURUQpIHsKKysJCWdfd2FybmluZygiVW5rbm93biBkZWNvbXByZXNzaW9uIG1ldGhvZCAldSIsIChndWludCkgaGRyLT5jbSk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwkvKiBVbmNvbXByZXNzZWQgc2l6ZSAobW9kdWxvIDJeMzIpIGlzIGxhc3QKKysJICogIDQgYnl0ZXMgb2YgZ3ppcHBlZCBmaWxlLCBhbmQgbGl0dGxlIGVuZGlhbi4KKysJICogIFNlZSBSRkMgMTk1MiAqLworKwlkZWNvbXByZXNzX2xlbiA9IEdVSU5UMzJfRlJPTV9MRSgqKChndWludDMyKikoKChndWludDgqKWJ1ZmZlcikgKyBsZW4gLSA0KSkpOworKworKwkvKiBwYXJhbm9pZCBtb2RlOiBnbGFkZSBmaWxlcyA+IDVNQiBhcmUgdW5saWtlbHkgKi8KKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZGVjb21wcmVzc19sZW4gPCA1KjEwMjQqMTAyNCwgTlVMTCk7CisrCisrCWRlY29tcHJlc3NfYnVmID0gZ19tYWxsb2MwKGRlY29tcHJlc3NfbGVuICsgMSk7IC8qICsxIGZvciBOVUwtdGVybWluYXRvciAqLworKworKwkvKiBmaW5kIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSwgc2tpcHBpbmcgaGVhZGVyIHN0dWZmICovCisrCWNidWYgPSAoZ3VpbnQ4KilidWZmZXIgKyAxMDsKKysJaWYgKGhkci0+ZmxhZ3MgJiAweDA0KSB7CisrCQlndWludDE2IHhsZW4gPSBHVUlOVDE2X0ZST01fTEUoKigoZ3VpbnQxNiopY2J1ZikpOworKwkJY2J1ZiArPSB4bGVuICsgMjsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MDgpIHsKKysJCWd1aW50MTYgb25hbWVsZW4gPSBzdHJsZW4oY2J1Zik7CisrCQljYnVmICs9IG9uYW1lbGVuICsgMTsKKysJfQorKwlpZiAoaGRyLT5mbGFncyAmIDB4MTApIHsKKysJCWd1aW50MTYgY29tbWVudGxlbiA9IHN0cmxlbihjYnVmKTsKKysJCWNidWYgKz0gY29tbWVudGxlbiArIDE7CisrCX0KKysJaWYgKGhkci0+ZmxhZ3MgJiAweDAyKQorKwl7CisrCQljYnVmICs9IDI7IC8qIHNraXAgaGVhZGVyIENSQzE2ICovCisrCX0KKysKKysJenN0cmVhbS5uZXh0X2luICA9ICh2b2lkKiljYnVmOworKwl6c3RyZWFtLmF2YWlsX2luID0gKHVMb25nZikgbGVuIC0gKCh2b2lkKiljYnVmLSh2b2lkKilidWZmZXIpIC0gNCAtIDQgKzE7IAorKwl6c3RyZWFtLm5leHRfb3V0ID0gZGVjb21wcmVzc19idWY7CisrCXpzdHJlYW0uYXZhaWxfb3V0PSBkZWNvbXByZXNzX2xlbjsKKysJenN0cmVhbS56YWxsb2MgICA9IFpfTlVMTDsKKysJenN0cmVhbS56ZnJlZSAgICA9IFpfTlVMTDsKKysJenN0cmVhbS5vcGFxdWUgICA9IFpfTlVMTDsKKysKKysJcmV0ID0gaW5mbGF0ZUluaXQyKCZ6c3RyZWFtLCAtTUFYX1dCSVRTKTsKKysKKysJaWYgKHJldCAhPSBaX09LKSB7CisrCQlnX3dhcm5pbmcoImluZmxhdGVJbml0MigpIGZhaWxlZC4gemxpYiBlcnJvciBjb2RlOiAlZCIsIHJldCk7CisrCQlnX2ZyZWUoZGVjb21wcmVzc19idWYpOworKwkJcmV0dXJuIE5VTEw7CisrCX0KKysKKysJcmV0ID0gaW5mbGF0ZSgmenN0cmVhbSwgWl9GSU5JU0gpOworKworKwlpZiAocmV0ICE9IFpfU1RSRUFNX0VORCkgeworKwkJZ193YXJuaW5nKCJ6bGliIGRlY29tcHJlc3Npb24gZmFpbGVkLiB6bGliIGVycm9yIGNvZGU6ICVkIiwgcmV0KTsKKysJCWdfZnJlZShkZWNvbXByZXNzX2J1Zik7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKworKwlpbnRlcmZhY2UgPSBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGRlY29tcHJlc3NfYnVmLCBkZWNvbXByZXNzX2xlbiwgZG9tYWluKTsKKysKKysJZ19mcmVlKGRlY29tcHJlc3NfYnVmKTsKKysKKysJcmV0dXJuIGludGVyZmFjZTsKKyt9CisrCisrR2xhZGVJbnRlcmZhY2UgKgorK2dsYWRlX3BhcnNlcl9wYXJzZV9idWZmZXIoY29uc3QgZ2NoYXIgKmJ1ZmZlciwgZ2ludCBsZW4sIGNvbnN0IGdjaGFyICpkb21haW4pCisreworKwlnX3JldHVybl92YWxfaWZfZmFpbChidWZmZXIgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbiA+IDAsIE5VTEwpOworKworKwkvKiBDaGVjayBpZiBidWZmZXIgaXMgZ3ppcHBlZCAqLworKwlpZiAoYnVmZmVyWzBdID09IDB4MWYgJiYgYnVmZmVyWzFdID09IChnY2hhcikweDhiKSB7CisrCQlyZXR1cm4gZ2xhZGVfcGFyc2VyX3BhcnNlX2d6aXBwZWRfYnVmZmVyKGJ1ZmZlciwgbGVuLCBkb21haW4pOworKwl9CisrCisrCS8qIEJ1ZmZlciBpcyBjbGVhcnRleHQuICovCisrCXJldHVybiBnbGFkZV9wYXJzZXJfcGFyc2VfYnVmZmVyX2ludGVybmFsKGJ1ZmZlciwgbGVuLCBkb21haW4pOworK30KKysKKysjZW5kaWYgLyogVVNFX0dNQVJLVVBfUEFSU0VSICovCisrCisrCisrI2lmbmRlZiBVU0VfR01BUktVUF9QQVJTRVIKKysKKyBzdGF0aWMgdm9pZAorIGR1bXBfd2lkZ2V0KHhtbE5vZGUgKnBhcmVudCwgR2xhZGVXaWRnZXRJbmZvICppbmZvLCBnaW50IGluZGVudCkKKyB7CitAQCAtMTM4Miw2ICsxNjc0LDggQEAKKyAJeG1sTm9kZUFkZENvbnRlbnQod2lkZ2V0LCAiICAiKTsKKyB9CisgCisrI2VuZGlmIC8qICFkZWZpbmVkKFVTRV9HTUFSS1VQX1BBUlNFUikgKi8KKysKKyAvKioKKyAgKiBnbGFkZV9pbnRlcmZhY2VfZHVtcAorICAqIEBpbnRlcmZhY2U6IHRoZSBHbGFkZUludGVyZmFjZQorQEAgLTEzOTAsNiArMTY4NCw5IEBACisgICogVGhpcyBmdW5jdGlvbiBkdW1wcyB0aGUgY29udGVudHMgb2YgYSBHbGFkZUludGVyZmFjZSBpbnRvIGEgZmlsZSBhcworICAqIFhNTC4gIEl0IGlzIGludGVuZGVkIG1haW5seSBhcyBhIGRlYnVnZ2luZyB0b29sLgorICAqLworKworKyNpZm5kZWYgVVNFX0dNQVJLVVBfUEFSU0VSCisrCisgdm9pZAorIGdsYWRlX2ludGVyZmFjZV9kdW1wKEdsYWRlSW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IGdjaGFyICpmaWxlbmFtZSkKKyB7CitAQCAtMTQyOCw2ICsxNzI1LDE3IEBACisgICAgIHhtbEZyZWVEb2MoZG9jKTsKKyB9CisgCisrI2Vsc2UgLyogZGVmaW5lZChVU0VfR01BUktVUF9QQVJTRVIpICovCisrCisrdm9pZAorK2dsYWRlX2ludGVyZmFjZV9kdW1wKEdsYWRlSW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IGdjaGFyICpmaWxlbmFtZSkKKyt7CisrICAgIGdfd2FybmluZygiZ2xhZGVfaW50ZXJmYWNlX2R1bXAoKSBpcyBvbmx5IGF2YWlsYWJsZSB3aXRoIGxpYnhtbDIuIik7CisrfQorKworKyNlbmRpZiAvKiBVU0VfR01BUktVUF9QQVJTRVIgKi8KKysKKysKKyAjaWYgMAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CitkaWZmIC11ck4gbGliZ2xhZGUtMi40LjIub3JpZy9saWJnbGFkZS0yLjAucGMuaW4gbGliZ2xhZGUtMi40LjIvbGliZ2xhZGUtMi4wLnBjLmluCistLS0gbGliZ2xhZGUtMi40LjIub3JpZy9saWJnbGFkZS0yLjAucGMuaW4JMjAwMS0xMi0xMiAxNToyODoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJnbGFkZS0yLjQuMi9saWJnbGFkZS0yLjAucGMuaW4JMjAwNS0wMy0yMiAwMToyMDowMC4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xMSw3ICsxMSw3IEBACisgTmFtZTogTGliZ2xhZGUKKyBEZXNjcmlwdGlvbjogYSBsaWJyYXJ5IGZvciBkeW5hbWljYWxseSBsb2FkaW5nIEdMQURFIGludGVyZmFjZSBmaWxlcworIFZlcnNpb246IEBWRVJTSU9OQAorLVJlcXVpcmVzOiBndGsrLTIuMCBsaWJ4bWwtMi4wCisrUmVxdWlyZXM6IGd0aystMi4wIEBQS0dDRkdfUkVRVUlSRV9MSUJYTUwyQAorIExpYnM6IC1MJHtsaWJkaXJ9IC1sZ2xhZGUtMi4wCisgQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vbGliZ2xhZGUtMi4wCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGUtMi42LjQvcHl0aG9uX2Vudmlyb25tZW50LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWIyZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlLTIuNi40L3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVc2luZyBAUFlUSE9OQCBmb3IgdGhpcyBwYXRoIHdvdWxkIHJlc3VsdCBpbiB0aGUgYnVpbGQgc3lzdGVtIHB5dGhvbiBiZWluZyAKK3JlZmVycmVkIHRvLiBJbnN0ZWFkIHdlIHdhbnQgdG8gbG9jYXRlIHB5dGhvbiBmcm9tIHRoZSBlbnZpcm9ubWVudC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitkaWZmIC1ydU4gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbiBsaWJnbGFkZS0yLjYuNC9saWJnbGFkZS1jb252ZXJ0LmluCistLS0gbGliZ2xhZGUtMi42LjQtb3JpZy8vbGliZ2xhZGUtY29udmVydC5pbgkyMDExLTA5LTIyIDEwOjE4OjI4Ljk5MTE2NDAwMyArMDgwMAorKysrIGxpYmdsYWRlLTIuNi40L2xpYmdsYWRlLWNvbnZlcnQuaW4JMjAxMS0wOS0yMiAxMDoxODo1NS40MzExNjQwMDMgKzA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhQFBZVEhPTkAKKysjIS91c3IvYmluL2VudiBweXRob24KKyAjIC0qLSBtb2RlOiBweXRob24gLSotCisgCisgIyB5ZXMsIHRoaXMgcmVxdWlyZXMgcHl0aG9uIDIueCBhbmQgYW4gWE1MIHBhcnNlciBtb2R1bGUgKGVnLiBQeUV4cGF0KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYmdsYWRlL2xpYmdsYWRlXzIuNi40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjY3Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGliZ2xhZGUvbGliZ2xhZGVfMi42LjQuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJSdW50aW1lIHN1cHBvcnQgZm9yIHRoZSBHVEsrIGludGVyZmFjZSBidWlsZGVyIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYnJhcnkuZ25vbWUub3JnL2RldmVsL2xpYmdsYWRlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01NWNhODE3Y2NiN2Q1YjViNjYzNTU2OTBlOWFiYzYwNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbGFkZS9nbGFkZS5oO2VuZGxpbmU9MjI7bWQ1PWEwNGY0NjFjOTY0YmE0YjU3YTE3MmQxZmJjZDhmOGZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dsYWRlL2dsYWRlLWd0ay5jO2VuZGxpbmU9MjI7bWQ1PTc2NmY5OTM0MzNlMjY0MmZlYzg3OTM2ZDMxOTk5MGZmIgorCitTRUNUSU9OID0gImxpYnMiCitQUiA9ICJyNSIKK0RFUEVORFMgPSAiemxpYiBnZGstcGl4YnVmIGd0aysiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYworR05PTUVfQ09NUFJFU1NfVFlQRT0iYnoyIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZ2xhZGUtY3J1ZnQucGF0Y2ggZmlsZTovL25vLXhtbDIucGF0Y2ggZmlsZTovL3B5dGhvbl9lbnZpcm9ubWVudC5wYXRjaCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiZDE3NzZiNDBmNGUxNjZiNWU5YzEwN2YxYzhmZTQxMzkiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI2NDM2MWU3NjQ3ODM5ZDM2ZWQ4MzM2ZDk5MmZkMjEwZDNlODEzOTg4MjI2OWJlZDQ3ZGM0Njc0OTgwMTY1ZGVjIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1saWJ4bWwyIgorCitDRkxBR1MgKz0gIi1seiIKKworUEFDS0FHRVMgKz0gIiAke1BOfS1kYXRhIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYiouc28uKiIKK0ZJTEVTXyR7UE59LWRhdGEgPSAiJHtkYXRhZGlyfS94bWwvbGliZ2xhZGUvZ2xhZGUtMi4wLmR0ZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiaW5kaXJ9L2xpYmdsYWRlLWNvbnZlcnQiCisjUkRFUEVORFNfJHtQTn0gPSAiJHtQTn0tZGF0YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYm5vdGlmeS9saWJub3RpZnlfMC43LjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkMTg4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJub3RpZnkvbGlibm90aWZ5XzAuNy42LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3Igc2VuZGluZyBkZXNrdG9wIG5vdGlmaWNhdGlvbnMgdG8gYSBub3RpZmljYXRpb24gZGFlbW9uIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IgorCitERVBFTkRTID0gImRidXMgZ3RrKzMgZGJ1cy1nbGliIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImE0OTk3MDE5ZDA4ZjQ2ZjNiZjU3Yjc4ZTZmNzk1YTU5IgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMGVmNjFjYTQwMGQzMGUyODIxNzk3OWJmYTBlNzNhNzQwNmIxOWMzMmRkNzYxNTA2NTRlYzViMmJkZjQ3ZDgzNyIKKworIyB0aGVyZSB3ZXJlIHRpbWVzLCB3ZSBoYWQgdHdvIHZlcnNpb25zIG9mIGxpYm5vdGlmeSAob2UtY29yZSBsaWJub3RpZnk6MC42LnggLworIyBtZXRhLWdub21lIGxpYm5vdGlmeTM6IDAuNy54KQorUFJPVklERVMgKz0gImxpYm5vdGlmeTMiCitSUFJPVklERVNfJHtQTn0gKz0gImxpYm5vdGlmeTMiCitSQ09ORkxJQ1RTXyR7UE59ICs9ICJsaWJub3RpZnkzIgorUlJFUExBQ0VTXyR7UE59ICs9ICJsaWJub3RpZnkzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnJzdmcvbGlicnN2Zy9ndGstb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnL2d0ay1vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAxYzM4ZDU3MGIzM2YyYjAzNmQ0ZmE0N2U5MjliYjJiMzI2NGUzOGJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVzc2kgS3Vra29uZW4gPGp1c3NpLmt1a2tvbmVuQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgQXVnIDIwMTUgMTY6MjU6MzggKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBhZGQgb3B0aW9uIHRvIGVuYWJsZS9kaXNhYmxlIHVzZSBvZiBHVEsrCisKK0Rpc3RybyBwYWNrYWdlcnMgbGlrZSBwcmVkaWN0YWJpbGl0eSBhbmQgYXV0b21hdGljYWxseSBkZXRlY3RlZCBvcHRpb25hbAorZGVwZW5kZW5jaWVzIGFyZSBub3QgcHJlZGljYWJsZS4gIEFkZCBhIC0td2l0aC1ndGszIG9wdGlvbiAoZGVmYXVsdCB0byAiYXV0byIpCitmb3IgZm9yY2libHkgY29udHJvbGxpbmcgd2hldGhlciBHVEsrIHdpbGwgYmUgdXNlZCBvciBub3QuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEyNjkzXQorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitGb3J3YXJkLXBvcnRlZCB0byAyLjQwLjEwCisKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAxNyArKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZjc3ZjNhLi5jYTc3ZGU4IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMjgsMTcgKzEyOCwyMiBAQCBBQ19DSEVDS19GVU5DUyhzdHJ0b2tfcikKKyAjIEdUSworICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCistUEtHX0NIRUNLX01PRFVMRVMoW0dUSzNdLFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0sW2hhdmVfZ3RrXzM9eWVzXSxbaGF2ZV9ndGtfMz1ub10pCistCisgR1RLM19CSU5BUllfVkVSU0lPTj0KKyAKKy1pZiB0ZXN0ICIkaGF2ZV9ndGtfMyIgPSAieWVzIjsgdGhlbgorLSAgICBHVEszX0JJTkFSWV9WRVJTSU9OPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1ndGtfYmluYXJ5X3ZlcnNpb24gZ3RrKy0zLjBgIgorK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgR1RLKyAzXSkKKytBQ19BUkdfV0lUSChbZ3RrM10sCisrICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1ndGszXSxbRG9uJ3QgYnVpbGQgR1RLKzMgdG9vbHMgKGRlZmF1bHQ9YXV0byldKV0sCisrICBbXSxbUEtHX0NIRUNLX0VYSVNUUyhbZ3RrKy0zLjAgPj0gJEdUSzNfUkVRVUlSRURdLFt3aXRoX2d0azM9eWVzXSxbd2l0aF9ndGszPW5vXSldKQorK0FDX01TR19SRVNVTFQoWyR3aXRoX2d0azNdKQorKworK2lmIHRlc3QgIiR3aXRoX2d0azMiID0gInllcyI7IHRoZW4KKysgIFBLR19DSEVDS19NT0RVTEVTKEdUSzMsIFtndGsrLTMuMCA+PSAkR1RLM19SRVFVSVJFRF0pCisrICBHVEszX0JJTkFSWV9WRVJTSU9OPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1ndGtfYmluYXJ5X3ZlcnNpb24gZ3RrKy0zLjBgIgorIGZpCisgCisgQUNfU1VCU1QoW0dUSzNfQklOQVJZX1ZFUlNJT05dKQorIAorLUFNX0NPTkRJVElPTkFMKFtIQVZFX0dUS18zXSxbdGVzdCAiJGhhdmVfZ3RrXzMiID0gInllcyJdKQorK0FNX0NPTkRJVElPTkFMKFtIQVZFX0dUS18zXSxbdGVzdCAiJHdpdGhfZ3RrMyIgPSAieWVzIl0pCisgCisgZG5sID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGRubCBHREstUGl4YnVmIFNWRyBsb2FkZXIKK0BAIC0yODksNiArMjk0LDYgQEAgbGlicnN2Zy0kVkVSU0lPTgorIAlCdWlsZCBpbnRyb3NwZWN0YWJsZSBiaW5kaW5nczogICR7Zm91bmRfaW50cm9zcGVjdGlvbn0KKyAJQnVpbGQgVmFsYSBiaW5kaW5nczogICAgICAgICAgICAke2VuYWJsZV92YWxhfQorIAlCdWlsZCBHZGtQaXhidWYgbG9hZGVyOiAgICAgICAgICR7ZW5hYmxlX3BpeGJ1Zl9sb2FkZXJ9CistICAgICAgICBHVEsrICRHVEszX1JFUVVJUkVEIG9yIGxhdGVyOiAgICAgICAgICAgJHtoYXZlX2d0a18zfQorKyAgICAgICAgR1RLKyAkR1RLM19SRVFVSVJFRCBvciBsYXRlcjogICAgICAgICAgICR7d2l0aF9ndGtfM30KKyAJQnVpbGQgbWlzY2VsbGFlbm91cyB0b29sczogICAgICAke2J1aWxkX21pc2NfdG9vbHN9CisgIgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlicnN2Zy9saWJyc3ZnXzIuNDAuMTAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThiMGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJyc3ZnL2xpYnJzdmdfMi40MC4xMC5iYgpAQCAtMCwwICsxLDQ3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlbmRlcmluZyBTVkcgZmlsZXMiCitIT01FUEFHRSA9ICJodHRwOi8vZnRwLmdub21lLm9yZy9wdWIvR05PTUUvc291cmNlcy9saWJyc3ZnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yc3ZnLmg7YmVnaW5saW5lPTM7ZW5kbGluZT0yNDttZDU9MjBiNDExM2M0OTA5YmJmMGQ2N2UwMDY3NzgzMDJiYzYiCisKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorREVQRU5EUyA9ICJjYWlybyBnZGstcGl4YnVmIGdsaWItMi4wIGxpYmNyb2NvIGxpYnhtbDIgcGFuZ28iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdub21lYmFzZSBndGstZG9jIHBpeGJ1ZmNhY2hlCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ndGstb3B0aW9uLnBhdGNoIgorCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJmYWRlYmUyZTc5OWFiMTU5MTY5ZWUzMTk4NDE1ZmY4NSIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjk2NWM4MDc0MzhjZTkwYjIwNGU5MzBmZjgwYzkyZWJhMTYwNmEyZjZmZDVjY2ZkMDkzMzVjOTk4OTZkZDM0NzkiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiAtLWRpc2FibGUtdmFsYSIKKworIyBUaGUgb2xkZXIgbGQgKDIuMjIpIG9uIHRoZSBob3N0IChDZW50b3MgNi41KSBkb2Vzbid0IGhhdmUgdGhlCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIG9wdGlvbiwgd2UgY2FuIGRpc2FibGUgaXQgZm9yIG5hdGl2ZS4KK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtbmF0aXZlID0gIiAtLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKKworUEFDS0FHRUNPTkZJRyA/Pz0gImdka3BpeGJ1ZiIKKyMgVGhlIGdkay1waXhidWYgbG9hZGVyCitQQUNLQUdFQ09ORklHW2dka3BpeGJ1Zl0gPSAiLS1lbmFibGUtcGl4YnVmLWxvYWRlciwtLWRpc2FibGUtcGl4YnVmLWxvYWRlcixnZGstcGl4YnVmLW5hdGl2ZSIKKyMgR1RLKyB0ZXN0IGFwcGxpY2F0aW9uIChyc3ZnLXZpZXcpCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS13aXRoLWd0azMsLS13aXRob3V0LWd0azMsZ3RrKzMiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgTG9hZGFibGUgbW9kdWxlcyBkb24ndCBuZWVkIC5hIG9yIC5sYSBvbiBMaW51eAorCXJtIC1mICR7RH0ke2xpYmRpcn0vZ2RrLXBpeGJ1Zi0yLjAvKi9sb2FkZXJzLyouYSAke0R9JHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8qLmxhCit9CisKK1BBQ0tBR0VTID0rICJsaWJyc3ZnLWd0ayByc3ZnIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dkay1waXhidWYtMi4wLyovbG9hZGVycy8uZGVidWciCitGSUxFU19yc3ZnID0gIiR7YmluZGlyfS9yc3ZnKiBcCisJICAgICAgJHtkYXRhZGlyfS9waXhtYXBzL3N2Zy12aWV3ZXIuc3ZnIFwKKwkgICAgICAke2RhdGFkaXJ9L3RoZW1lcyIKK0ZJTEVTX2xpYnJzdmctZ3RrID0gIiR7bGliZGlyfS9nZGstcGl4YnVmLTIuMC8qLyovKi5zbyIKKworUElYQlVGX1BBQ0tBR0VTID0gImxpYnJzdmctZ3RrIgorCitQSVhCVUZDQUNIRV9TWVNST09UX0RFUFNfYXBwZW5kX2NsYXNzLW5hdGl2ZSA9ICIgaGFyZmJ1enotbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgcGFuZ28tbmF0aXZlOmRvX3BvcHVsYXRlX3N5c3Jvb3Rfc2V0c2NlbmUgaWN1LW5hdGl2ZTpkb19wb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnNlY3JldC9saWJzZWNyZXRfMC4xOC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYmM4M2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ25vbWUvbGlic2VjcmV0L2xpYnNlY3JldF8wLjE4LjIuYmIKQEAgLTAsMCArMSwxMiBAQAorU1VNTUFSWSA9ICJsaWJzZWNyZXQgaXMgYSBsaWJyYXJ5IGZvciBzdG9yaW5nIGFuZCByZXRyaWV2aW5nIHBhc3N3b3JkcyBhbmQgb3RoZXIgc2VjcmV0cyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yM2MyYTVlMDEwNmI5OWQ3NTIzODk4NjU1OWJiNWZjNiIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitERVBFTkRTID0gImdsaWItMi4wIGxpYmdjcnlwdCIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtbWFucGFnZXMiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjIzY2RmODI2N2QxMWEyNmY4OGYwZGJlYzFlMjAyMmFkIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiMTJmZDI4OGIwMTJlMWIyYjFiNTRkNTg2Y2Q0YzY1MDc4ODU3MTU1MzQ2NDRiNDUzNGI3ZWY3ZDcwNzliYTQ0MyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYiBiL21ldGEvcmVjaXBlcy1nbm9tZS9saWJ3bmNrL2xpYnduY2szXzMuMTQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGY1MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdub21lL2xpYnduY2svbGlid25jazNfMy4xNC4wLmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiV2luZG93IG5hdmlnYXRpb24gY29uc3RydWN0aW9uIHRvb2xraXQiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitCUE4gPSAibGlid25jayIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ29iamVjdC1pbnRyb3NwZWN0aW9uLXN0dWIgZ3RrKzMgZ2RrLXBpeGJ1Zi1uYXRpdmUgbGlieHJlcyIKKworUEFDS0FHRUNPTkZJRyA/Pz0gInN0YXJ0dXAtbm90aWZpY2F0aW9uIgorUEFDS0FHRUNPTkZJR1tzdGFydHVwLW5vdGlmaWNhdGlvbl0gPSAiLS1lbmFibGUtc3RhcnR1cC1ub3RpZmljYXRpb24sLS1kaXNhYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLHN0YXJ0dXAtbm90aWZpY2F0aW9uIgorCitpbmhlcml0IGdub21lYmFzZQorU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNDUzODY3MmUwZDc3NWZhZGVkZjEwYWJlYjgwMjAwNDciCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJmNTA4MDA3NjM0NjYwOWI0YzM2Mzk0Yjg3OWYzYTg2YjkyY2VkM2I5MGEzN2NiNTRjOGU5YTE0ZjAwZTc5MjFjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9idWlsZGVyXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjcyOWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvYnVpbGRlcl8wLjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJOZXcgdXNlciB0byBkbyBzcGVjaWZpYyBqb2IiCitERVNDUklQVElPTiA9ICJUaGlzIHJlY2lwZSBjcmVhdGUgYSBuZXcgdXNlciBuYW1lZCAke1BOfSwgd2hvIGlzIHVzZWQgZm9yIHNwZWNpZmljIGpvYnMgbGlrZSBidWlsZGluZy4gVGhlIHRhc2sgY2FuIGJlIGF1dG8gc3RhcnRlZCB2aWEgbWluaSBYIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyNiIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vYnVpbGRlcl9ob2Jfc3RhcnQuc2g7ZW5kbGluZT01O21kNT04NDc5NmMzYzQxNzg1ZDg2MTAwZmRhYmNiZGFkZTAwZSIKKworU1JDX1VSSSA9ICJmaWxlOi8vYnVpbGRlcl9ob2Jfc3RhcnQuc2ggXAorICAgICAgICAgICBmaWxlOi8vcGxlYXNlX3dhaXRfZGlhbG9nLnB5IFwKKyAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfSIKKworUkRFUEVORFNfJHtQTn0gPSAibWluaS14LXNlc3Npb24iCisKK2luaGVyaXQgdXNlcmFkZAorCisjIGJ1aWxkZXIgdXNlciBwYXNzd29yZCBpcyAiYnVpbGRlciIKK0JVSUxERVJfUEFTU1dPUkQgPz0gIi5nTGliaU5YbjBQMTIiCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLXN5c3RlbSAtLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ncm91cHMgdmlkZW8sdHR5LGF1ZGlvIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1wYXNzd29yZCAke0JVSUxERVJfUEFTU1dPUkR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS11c2VyLWdyb3VwIGJ1aWxkZXIiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgLW0gNzU1ICR7RH0ke3N5c2NvbmZkaXJ9L21pbmlfeC9zZXNzaW9uLmQKKwlpbnN0YWxsIC1wIC1tIDc1NSBidWlsZGVyX2hvYl9zdGFydC5zaCAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kLworCisJY2hvd24gIGJ1aWxkZXIuYnVpbGRlciAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gvc2Vzc2lvbi5kL2J1aWxkZXJfaG9iX3N0YXJ0LnNoCisgICAgICAgIGluc3RhbGwgLXAgLW0gNzU1IHBsZWFzZV93YWl0X2RpYWxvZy5weSAke0R9JHtzeXNjb25mZGlyfS9taW5pX3gKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvYnVpbGRlci9maWxlcy9idWlsZGVyX2hvYl9zdGFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzk0YjA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvYnVpbGRlcl9ob2Jfc3RhcnQuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjVGhpcyBzY3JpcHQgd2lsbCBiZSBjYWxsZWQgdmlhIG1pbmkgWCBzZXNzaW9uIG9uIGJlaGFsZiBvZiBmaWxlIG93bmVyLCBhZnRlcgorI2luc3RhbGxlZCBpbiAvZXRjL21pbmlfeC9zZXNzaW9uLmQvLiBBbnkgYXV0byBzdGFydCBqb2JzIGluY2x1ZGluZyBYIGFwcHMgY2FuCisjYmUgcHV0IGhlcmUKKworIyBzdGFydCBob2IgaGVyZQorZXhwb3J0IFBTRVVET19QUkVGSVg9L3VzcgorZXhwb3J0IFBTRVVET19MT0NBTFNUQVRFRElSPS9ob21lL2J1aWxkZXIvcHNldWRvCitleHBvcnQgUFNFVURPX0xJQkRJUj0vdXNyL2xpYi9wc2V1ZG8vbGliNjQKK2V4cG9ydCBHSVRfUFJPWFlfQ09NTUFORD0vaG9tZS9idWlsZGVyL3Bva3kvc2NyaXB0cy9vZS1naXQtcHJveHkKKworI3N0YXJ0IHBjbWFuZm0gaW4gZGFlbW9uIG1vZGUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIGxhdW5jaAorcGNtYW5mbSAtZCYKKworI3JlZ2lzdGVyIGhhbmRsZXJzIGZvciBzb21lIGZpbGUgdHlwZXMKK2lmIFsgISAtZCAvaG9tZS9idWlsZGVyLy5sb2NhbC9zaGFyZS9hcHBsaWNhdGlvbnMgXTsgdGhlbgorICAgIG1rZGlyIC1wIC9ob21lL2J1aWxkZXIvLmxvY2FsL3NoYXJlL2FwcGxpY2F0aW9ucy8KKyAgICAjcmVnaXN0ZXIgZm9sZGVycyB0byBvcGVuIHdpdGggUENNYW5GTSBmaWxlbWFuYWdlcgorICAgIHhkZy1taW1lIGRlZmF1bHQgcGNtYW5mbS5kZXNrdG9wIGlub2RlL2RpcmVjdG9yeQorCisgICAgI3JlZ2lzdGVyIGh0bWwgbGlua3MgYW5kIGZpbGVzIHdpdGggZXBpcGhhbnkKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgeC1zY2hlbWUtaGFuZGxlci9odHRwCisgICAgeGRnLW1pbWUgZGVmYXVsdCBlcGlwaGFueS5kZXNrdG9wIHgtc2NoZW1lLWhhbmRsZXIvaHR0cHMKKyAgICB4ZGctbWltZSBkZWZhdWx0IGVwaXBoYW55LmRlc2t0b3AgdGV4dC9odG1sCisKKyAgICAjcmVnaXN0ZXIgdGV4dCBmaWxlcyB3aXRoIGxlYWZwYWQgdGV4dCBlZGl0b3IKKyAgICB4ZGctbWltZSBkZWZhdWx0IGxlYWZwYWQuZGVza3RvcCB0ZXh0L3BsYWluCitmaQorCitjZCAvaG9tZS9idWlsZGVyL3Bva3kKKy4gLi9vZS1pbml0LWJ1aWxkLWVudgorCitob2IgJgorCittYXRjaGJveC10ZXJtaW5hbCYKKworL2V0Yy9taW5pX3gvcGxlYXNlX3dhaXRfZGlhbG9nLnB5ICYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weSBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9idWlsZGVyL2ZpbGVzL3BsZWFzZV93YWl0X2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDIzODFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2J1aWxkZXIvZmlsZXMvcGxlYXNlX3dhaXRfZGlhbG9nLnB5CkBAIC0wLDAgKzEsMjggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgoraW1wb3J0IGdsaWIKK2ltcG9ydCBndGsKKyAKK2RlZiBkZXN0cm95X3dpbmRvd19jYih3aWRnZXQsIGV2ZW50KToKKyAgICBndGsubWFpbl9xdWl0KCkKKyAKK2RlZiBhbGxfZG9uZV9jYigpOgorICAgIGd0ay5tYWluX3F1aXQoKQorIAorZGVmIGRpYWxvZ3VlX3VpKCk6CisgICAgd2luZG93ID0gZ3RrLldpbmRvdygpCisgICAgd2luZG93LnNldF90aXRsZSgiUGxlYXNlIHdhaXQuLi4iKQorICAgIHdpbmRvdy5jb25uZWN0KCJkZWxldGUtZXZlbnQiLCBkZXN0cm95X3dpbmRvd19jYikKKyAgICB3aW5kb3cuc2hvdygpCisgICAgd2luZG93LnNldF9ib3JkZXJfd2lkdGgoMTIpCisgCisgICAgbXNnID0gIlBsZWFzZSB3YWl0IHdoaWxlIEJpdEJha2UgaW5pdGlhbGl6ZXMgSG9iIgorICAgIGxhYmVsID0gZ3RrLkxhYmVsKG1zZykKKyAgICBsYWJlbC5zaG93KCkKKyAgICB3aW5kb3cuYWRkKGxhYmVsKQorIAorICAgIGdsaWIudGltZW91dF9hZGRfc2Vjb25kcygxMCwgYWxsX2RvbmVfY2IpCisgCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGRpYWxvZ3VlX3VpKCkKKyAgICBndGsubWFpbigpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvLWZwdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY3MmU4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby1mcHUuaW5jCkBAIC0wLDAgKzEsNiBAQAorCitkZWYgZ2V0X2NhaXJvX2ZwdV9zZXR0aW5nKGJiLCBkKToKKyAgICBpZiBkLmdldFZhcignVEFSR0VUX0ZQVScsIFRydWUpIGluIFsgJ3NvZnQnIF06CisgICAgICAgIHJldHVybiAiLS1kaXNhYmxlLXNvbWUtZmxvYXRpbmctcG9pbnQiCisgICAgcmV0dXJuICIiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyby5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNDUzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2Fpcm8vY2Fpcm8uaW5jCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiVGhlIENhaXJvIDJEIHZlY3RvciBncmFwaGljcyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiQ2Fpcm8gaXMgYSBtdWx0aS1wbGF0Zm9ybSBsaWJyYXJ5IHByb3ZpZGluZyBhbnRpLWFsaWFzZWQgXAordmVjdG9yLWJhc2VkIHJlbmRlcmluZyBmb3IgbXVsdGlwbGUgdGFyZ2V0IGJhY2tlbmRzLiBQYXRocyBjb25zaXN0IFwKK29mIGxpbmUgc2VnbWVudHMgYW5kIGN1YmljIHNwbGluZXMgYW5kIGNhbiBiZSByZW5kZXJlZCBhdCBhbnkgd2lkdGggXAord2l0aCB2YXJpb3VzIGpvaW4gYW5kIGNhcCBzdHlsZXMuIEFsbCBjb2xvcnMgbWF5IGJlIHNwZWNpZmllZCB3aXRoIFwKK29wdGlvbmFsIHRyYW5zbHVjZW5jZSAob3BhY2l0eS9hbHBoYSkgYW5kIGNvbWJpbmVkIHVzaW5nIHRoZSBcCitleHRlbmRlZCBQb3J0ZXIvRHVmZiBjb21wb3NpdGluZyBhbGdlYnJhIGFzIGZvdW5kIGluIHRoZSBYIFJlbmRlciBcCitFeHRlbnNpb24uIgorSE9NRVBBR0UgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIk1QTC0xICYgTEdQTHYyLjEgJiBHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LWRldiA9ICJNUEwtMSAmIExHUEx2Mi4xIgorTElDRU5TRV8ke1BOfS1nb2JqZWN0ID0gIk1QTC0xICYgTEdQTHYyLjEiCitMSUNFTlNFXyR7UE59LXBlcmYtdXRpbHMgPSAiR1BMdjMrIgorWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIGxpYnhleHQiCitERVBFTkRTID0gImxpYnBuZyBmb250Y29uZmlnIHBpeG1hbiBnbGliLTIuMCB6bGliIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIHhjYicsICcnLCBkKX0gXAorICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0td2l0aC14PXllcyAtZW5hYmxlLXhsaWIsLS13aXRoLXg9bm8gLS1kaXNhYmxlLXhsaWIsJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbeGNiXSA9ICItLWVuYWJsZS14Y2IsLS1kaXNhYmxlLXhjYixsaWJ4Y2IiCitQQUNLQUdFQ09ORklHW2RpcmVjdGZiXSA9ICItLWVuYWJsZS1kaXJlY3RmYj15ZXMsLGRpcmVjdGZiIgorUEFDS0FHRUNPTkZJR1t2YWxncmluZF0gPSAiLS1lbmFibGUtdmFsZ3JpbmQ9eWVzLC0tZGlzYWJsZS12YWxncmluZCx2YWxncmluZCIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2w9eWVzLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2dsZXN2Ml0gPSAiLS1lbmFibGUtZ2xlc3YyLC0tZGlzYWJsZS1nbGVzdjIsdmlydHVhbC9saWJnbGVzMiIKKworI2NoZWNrIGZvciBUQVJHRVRfRlBVPXNvZnQgYW5kIGluZm9ybSBjb25maWd1cmUgb2YgdGhlIHJlc3VsdCBzbyBpdCBjYW4gZGlzYWJsZSBzb21lIGZsb2F0aW5nIHBvaW50cyAKK3JlcXVpcmUgY2Fpcm8tZnB1LmluYworRVhUUkFfT0VDT05GICs9ICIke0BnZXRfY2Fpcm9fZnB1X3NldHRpbmcoYmIsIGQpfSBcCisgICAgICAgICAgICAgICAgIC0tZW5hYmxlLXRlZSBcCisgICAgICAgICAgICAgICAgIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBXZSBkb24ndCBkZXBlbmQgb24gYmludXRpbHMgc28gd2UgbmVlZCB0byBkaXNhYmxlIHRoaXMKK2V4cG9ydCBhY19jdl9saWJfYmZkX2JmZF9vcGVucj0ibm8iCisjIEVuc3VyZSB3ZSBkb24ndCBkZXBlbmQgb24gTFpPCitleHBvcnQgYWNfY3ZfbGliX2x6bzJfbHpvMmFfZGVjb21wcmVzcz0ibm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitDRkxBR1MgKz0gIi1mZmF0LWx0by1vYmplY3RzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NhaXJvL2NhaXJvXzEuMTQuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgxN2RiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jYWlyby9jYWlyb18xLjE0LjIuYmIKQEAgLTAsMCArMSw0MyBAQAorcmVxdWlyZSBjYWlyby5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTczZTk5OWUwYzcyYjVhYzkwMTI0MjRmYTE1N2FkNzciCisKK1NSQ19VUkkgPSAiaHR0cDovL2NhaXJvZ3JhcGhpY3Mub3JnL3JlbGVhc2VzL2NhaXJvLSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImUxY2RmYWYxYzZjOTk1YzRkNGM1NGUwNzIxNWIwMTE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM5MTlkOTk5ZGRiMWJiYmVjZDRiYmU2NTI5OWNhMmFiZDIwNzljN2UxM2QyMjQ1Nzc4OTVhZmE3MDA1ZWNjZWIiCisKK1BBQ0tBR0VTID0rICJjYWlyby1nb2JqZWN0IGNhaXJvLXNjcmlwdC1pbnRlcnByZXRlciBjYWlyby1wZXJmLXV0aWxzIgorCitTVU1NQVJZXyR7UE59ID0gIlRoZSBDYWlybyAyRCB2ZWN0b3IgZ3JhcGhpY3MgbGlicmFyeSIKK0RFU0NSSVBUSU9OXyR7UE59ID0gIkNhaXJvIGlzIGEgbXVsdGktcGxhdGZvcm0gbGlicmFyeSBwcm92aWRpbmcgYW50aS1hbGlhc2VkIFwKK3ZlY3Rvci1iYXNlZCByZW5kZXJpbmcgZm9yIG11bHRpcGxlIHRhcmdldCBiYWNrZW5kcy4gUGF0aHMgY29uc2lzdCBcCitvZiBsaW5lIHNlZ21lbnRzIGFuZCBjdWJpYyBzcGxpbmVzIGFuZCBjYW4gYmUgcmVuZGVyZWQgYXQgYW55IHdpZHRoIFwKK3dpdGggdmFyaW91cyBqb2luIGFuZCBjYXAgc3R5bGVzLiBBbGwgY29sb3JzIG1heSBiZSBzcGVjaWZpZWQgd2l0aCBcCitvcHRpb25hbCB0cmFuc2x1Y2VuY2UgKG9wYWNpdHkvYWxwaGEpIGFuZCBjb21iaW5lZCB1c2luZyB0aGUgXAorZXh0ZW5kZWQgUG9ydGVyL0R1ZmYgY29tcG9zaXRpbmcgYWxnZWJyYSBhcyBmb3VuZCBpbiB0aGUgWCBSZW5kZXIgXAorRXh0ZW5zaW9uLiIKKworU1VNTUFSWV9jYWlyby1nb2JqZWN0ID0gIlRoZSBDYWlybyBsaWJyYXJ5IEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IgorREVTQ1JJUFRJT05fY2Fpcm8tZ29iamVjdCA9ICJBIEdPYmplY3Qgd3JhcHBlciBsaWJyYXJ5IGZvciB0aGUgQ2Fpcm8gQVBJLiIKKworU1VNTUFSWV9jYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIgPSAiVGhlIENhaXJvIGxpYnJhcnkgc2NyaXB0IGludGVycHJldGVyIgorREVTQ1JJUFRJT05fY2Fpcm8tc2NyaXB0LWludGVycHJldGVyID0gIlRoZSBDYWlybyBzY3JpcHQgaW50ZXJwcmV0ZXIgaW1wbGVtZW50cyBcCitDYWlyb1NjcmlwdC4gIENhaXJvU2NyaXB0IGlzIHVzZWQgYnkgdHJhY2luZyB1dGlsaXRpZXMgdG8gZW5hYmxlIHRoZSBhYmlsaXR5IFwKK3RvIHJlcGxheSByZW5kZXJpbmcuIgorCitERVNDUklQVElPTl9jYWlyby1wZXJmLXV0aWxzID0gIlRoZSBDYWlybyBsaWJyYXJ5IHBlcmZvcm1hbmNlIHV0aWxpdGllcyIKKworRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2xpYmNhaXJvLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9jYWlyby8qLnNvIgorRklMRVNfJHtQTn0tZ29iamVjdCA9ICIke2xpYmRpcn0vbGliY2Fpcm8tZ29iamVjdC5zby4qIgorRklMRVNfJHtQTn0tc2NyaXB0LWludGVycHJldGVyID0gIiR7bGliZGlyfS9saWJjYWlyby1zY3JpcHQtaW50ZXJwcmV0ZXIuc28uKiIKK0ZJTEVTXyR7UE59LXBlcmYtdXRpbHMgPSAiJHtiaW5kaXJ9L2NhaXJvLXRyYWNlICR7bGliZGlyfS9jYWlyby8qLmxhICR7bGliZGlyfS9jYWlyby9saWJjYWlyby10cmFjZS5zby4qIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2JpbmRpcn0vY2Fpcm8tc3BoaW54CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vY2Fpcm8vY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvL2NhaXJvLXNwaGlueCoKKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jYWlyby8uZGVidWcvY2Fpcm8tZmRyKgorCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2NhaXJvLy5kZWJ1Zy9jYWlyby1zcGhpbngqCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyMWNlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wLmluYwpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIkdyYXBoaWNzIGxpYnJhcnkgZm9yIGNyZWF0aW5nIGhhcmR3YXJlLWFjY2VsZXJhdGVkIHVzZXIgaW50ZXJmYWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuY2x1dHRlci1wcm9qZWN0Lm9yZy8iCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKKworaW5oZXJpdCBjbHV0dGVyIHB0ZXN0LWdub21lCisKK0RFUEVORFMgPSAicGFuZ28gZ2xpYi0yLjAganNvbi1nbGliIGF0ayB1ZGV2IGNvZ2wtMS4wIgorUEFDS0FHRV9CRUZPUkVfUE4gKz0gIiR7UE59LWV4YW1wbGVzIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCitFREVQRU5EU19YMTEgPSAidmlydHVhbC9saWJ4MTEgbGlieGkgbGlieGZpeGVzIgorRURFUEVORFNfR0xYID0gInZpcnR1YWwvbGliZ2wiCitFREVQRU5EU19FR0wgPSAidmlydHVhbC9lZ2wiCitFREVQRU5EU19XQVlMQU5EID0gIndheWxhbmQgbGlieGtiY29tbW9uIGdkay1waXhidWYiCisKK0VERVBFTkRTX0VWREVWID0gImxpYnhrYmNvbW1vbiIKK0VSREVQRU5EU19FVkRFViA9ICJ4a2V5Ym9hcmQtY29uZmlnIgorCisjIERpc2FibGUgcHJldHR5IG11Y2ggZXZlcnl0aGluZywgb3ZlcnJpZGUgaW4gcGxhdGZvcm0gc3BlY2lmaWMgc2V0IHVwCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uCVwKKwkgICAgIAkgLS1kaXNhYmxlLXF1YXJ0ei1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLXdpbjMyLWJhY2tlbmQJXAorCSAgICAgCSAtLWRpc2FibGUtZ2RrLWJhY2tlbmQJCVwKKwkgICAgIAkgLS1kaXNhYmxlLWNleDEwMC1iYWNrZW5kCVwKKwkgICAgIAkgLS1kaXNhYmxlLXRzbGliLWlucHV0CQlcCisJICAgIAkiCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtYmFja2VuZCwtLWRpc2FibGUteDExLWJhY2tlbmQsJHtFREVQRU5EU19YMTF9IgorUEFDS0FHRUNPTkZJR1tnbHhdID0gIiwsJHtFREVQRU5EU19YMTF9ICR7RURFUEVORFNfR0xYfSIKK1BBQ0tBR0VDT05GSUdbZWdsXSA9ICItLWVuYWJsZS1lZ2wtYmFja2VuZCwtLWRpc2FibGUtZWdsLWJhY2tlbmQsJHtFREVQRU5EU19FR0x9IgorUEFDS0FHRUNPTkZJR1tldmRldl0gPSAiLS1lbmFibGUtZXZkZXYtaW5wdXQsLS1kaXNhYmxlLWV2ZGV2LWlucHV0LCR7RURFUEVORFNfRVZERVZ9LCR7RVJERVBFTkRTX0VWREVWfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLS1lbmFibGUtd2F5bGFuZC1iYWNrZW5kLC0tZGlzYWJsZS13YXlsYW5kLWJhY2tlbmQsJHtFREVQRU5EU19XQVlMQU5EfSIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZC1jb21wb3NpdG9yXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix3YXlsYW5kIgorCisjIERlZmF1bHQgY29uZmlndXJhdGlvbiwgZGlzdHJvcyBtaWdodCB3YW50IHRvIG92ZXJyaWRlCitQQUNLQUdFQ09ORklHID8/PSAiZWdsIFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dseCB4MTEnLCAnJywgZCl9IgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9jbHV0dGVyL2V4YW1wbGVzLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7bGliZGlyfS9jbHV0dGVyL2V4YW1wbGVzIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLy5kZWJ1ZyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJIyBzZWUgaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTEyOCBmb3IgdGhpcworCXRvdWNoIC10IDIwMDAwMTAxMDAwMCAke1N9L3BvL2NsdXR0ZXItMS4wLnBvdAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci0xLjAvaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL2luc3RhbGwtZXhhbXBsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YTcwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL2luc3RhbGwtZXhhbXBsZXMucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorSW5zdGFsbCB0aGUgZXhhbXBsZXMgdG8gJGxpYmRpci9jbHV0dGVyLy4KKworU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0gYi9leGFtcGxlcy9NYWtlZmlsZS5hbQoraW5kZXggNGI5YjQ0OS4uMjMyY2QxOSAxMDA2NDQKKy0tLSBhL2V4YW1wbGVzL01ha2VmaWxlLmFtCisrKysgYi9leGFtcGxlcy9NYWtlZmlsZS5hbQorQEAgLTM4LDYgKzM4LDcgQEAgQU1fQ1BQRkxBR1MgPSBcCisgCS1JJCh0b3Bfc3JjZGlyKS9jbHV0dGVyIFwKKyAJLUkkKHRvcF9idWlsZGRpcikvY2x1dHRlcgorIAorLW5vaW5zdF9QUk9HUkFNUyA9ICQoYWxsX2V4YW1wbGVzKQorK2V4YW1wbGVkaXIgPSAkKHBrZ2xpYmRpcikvZXhhbXBsZXMKKytleGFtcGxlX1BST0dSQU1TID0gJChhbGxfZXhhbXBsZXMpCisgCisgRVhUUkFfRElTVCA9IHJlZGhhbmQucG5nCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1pbnN0YWxsZWQtdGVzdHMtd2l0aC10YXAtb3V0cHV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzE4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4taW5zdGFsbGVkLXRlc3RzLXdpdGgtdGFwLW91dHB1dC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDY2OGUxZDE0YWYxMzI0OTM4NGFiMzI0YzdkNzllYzQxNDdmMDdlNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAyNyBBcHIgMjAxNSAyMDoxMjozMyArMDMwMAorU3ViamVjdDogW1BBVENIXSBSdW4gaW5zdGFsbGVkIHRlc3RzIHdpdGggdGFwIG91dHB1dAorCitDb25maWd1cmUgb3V0cHV0IGZyb20gaW5zdGFsbGVkLXRlc3RzIHRvIGJlIFRBUCBjb21wbGlhbnQgc3VjaCB0aGF0Citnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIHByb3Blcmx5IGludGVycHJldHMgdGhlIHJlc3VsdHMuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBUaW0gT3JsaW5nIDxUaWNvVGltb0BnbWFpbC5jb20+CistLS0KKyBidWlsZC9hdXRvdG9vbHMvZ2xpYi10YXAubWsgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5tayBiL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworaW5kZXggN2M1ZjgyYi4uODQ0ZTE3ZSAxMDA2NDQKKy0tLSBhL2J1aWxkL2F1dG90b29scy9nbGliLXRhcC5taworKysrIGIvYnVpbGQvYXV0b3Rvb2xzL2dsaWItdGFwLm1rCitAQCAtMTI3LDcgKzEyNyw4IEBAIGluc3RhbGxlZF90ZXN0X21ldGFfREFUQSA9ICQoaW5zdGFsbGVkX3Rlc3RjYXNlczo9LnRlc3QpCisgJS50ZXN0OiAlJChFWEVFWFQpIE1ha2VmaWxlCisgCSQoQU1fVl9HRU4pIChlY2hvICdbVGVzdF0nID4gJEAudG1wOyBcCisgCWVjaG8gJ1R5cGU9c2Vzc2lvbicgPj4gJEAudG1wOyBcCistCWVjaG8gJ0V4ZWM9ZW52IEdfRU5BQkxFX0RJQUdOT1NUSUM9MCBDTFVUVEVSX0VOQUJMRV9ESUFHTk9TVElDPTAgJChpbnN0YWxsZWRfdGVzdGRpcikvJDwnID4+ICRALnRtcDsgXAorKwllY2hvICdFeGVjPWVudiBHX0VOQUJMRV9ESUFHTk9TVElDPTAgQ0xVVFRFUl9FTkFCTEVfRElBR05PU1RJQz0wICQoaW5zdGFsbGVkX3Rlc3RkaXIpLyQ8IC0tdGFwJyA+PiAkQC50bXA7IFwKKysJZWNobyAnT3V0cHV0PVRBUCcgPj4gJEAudG1wOyBcCisgCW12ICRALnRtcCAkQCkKKyAKKyBDTEVBTkZJTEVTICs9ICQoaW5zdGFsbGVkX3Rlc3RfbWV0YV9EQVRBKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4NzdlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhIC9iaW4vc2gKKworZ25vbWUtZGVza3RvcC10ZXN0aW5nLXJ1bm5lciBjbHV0dGVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLTEuMF8xLjIyLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4Y2RmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItMS4wXzEuMjIuNC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIGNsdXR0ZXItMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjY0OTQyNTZjOTgwZDQ5NzAzYTU1MzkxNmUzMDgzY2QiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxZDc3Y2UxNjAyNWY4NzY2N2ExZDAwZGM0ZmE2MTdhMTkzNTE1NmY2M2ZkMTc2MzVmZGFkZjEzODg2NmM5ZTFlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vaW5zdGFsbC1leGFtcGxlcy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vcnVuLWluc3RhbGxlZC10ZXN0cy13aXRoLXRhcC1vdXRwdXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZmVkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAuaW5jCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiR1N0cmVhbWVyIGludGVncmF0aW9uIGxpYnJhcnkgZm9yIENsdXR0ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNsdXR0ZXItcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIrIgorCitpbmhlcml0IGNsdXR0ZXIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCIKKworREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZCBjbHV0dGVyLTEuMCIKK1JERVBFTkRTXyR7UE59ICs9ICJnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIgorUEFDS0FHRVMgID0rICIke1BOfS1leGFtcGxlcyIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKKworRklMRVNfJHtQTn0gICAgICAgICAgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wL2xpYiouc28iCitGSUxFU18ke1BOfS1kZXYgICAgICArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LWRiZyAgICAgICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8uZGVidWcvbGliKi5zbyIKK0ZJTEVTXyR7UE59LWV4YW1wbGVzICA9ICIke2JpbmRpcn0vdmlkZW8tcGxheWVyICR7YmluZGlyfS92aWRlby1zaW5rIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wLzAwMDEtSW5zdGFsbC1leGFtcGxlLWJpbmFyeS1uZWVkZWQtZm9yLWNvcmUtaW1hZ2UtY2x1dHRlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyNmI5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMC8wMDAxLUluc3RhbGwtZXhhbXBsZS1iaW5hcnktbmVlZGVkLWZvci1jb3JlLWltYWdlLWNsdXR0ZXIucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorRnJvbSBkNzdjNzExMjc3YmYwNzVjZTA1NDVjMTliMzIyZjA0MGM0OWM3NzhhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQWxleGFuZGVyIEthbmF2aW4gPGFsZXgua2FuYXZpbkBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDMwIEFwciAyMDE1IDEyOjE5OjEzICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIEluc3RhbGwgZXhhbXBsZSBiaW5hcnkgbmVlZGVkIGZvciBjb3JlLWltYWdlLWNsdXR0ZXIKKworU2lnbmVkLW9mZi1ieTogWmhhaSBFZHdpbiA8ZWR3aW4uemhhaUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW1wb3J0ZWQgZnJvbSBjbHV0dGVyLWdzdC0xLjggcGFja2FnZSwgZ2l0Oi8vZ2l0Lm9wZW5lbWJlZGRlZC5vcmcvb3BlbmVtYmVkZGVkLAorY29tbWl0IGFlMjhlZTNmN2EwNjBiOWUwZDEzMTU0YTg0ZjI0NDRhOTg0OTBiNWIsIHVwZGF0ZWQgZm9yIGNsdXR0ZXItZ3N0IDMuMAorCitTaWduZWQtb2ZmLWJ5OiBUb21hcyBGcnlkcnljaCA8dG9tYXNAc2xlZXBmaXZlLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorLS0tCisgZXhhbXBsZXMvTWFrZWZpbGUuYW0gfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9leGFtcGxlcy9NYWtlZmlsZS5hbSBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitpbmRleCBiZmJjMWI1Li4wOTY1NWUzIDEwMDY0NAorLS0tIGEvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKysrKyBiL2V4YW1wbGVzL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyBOVUxMID0gIworIAorLW5vaW5zdF9QUk9HUkFNUyA9IGNhbWVyYS1wbGF5ZXIgdmlkZW8tcGxheWVyIHZpZGVvLXNpbmsgdmlkZW8tc2luay1uYXZpZ2F0aW9uIHZpZGVvLWNvbnRlbnQKKytiaW5fUFJPR1JBTVMgPSBjYW1lcmEtcGxheWVyIHZpZGVvLXBsYXllciB2aWRlby1zaW5rIHZpZGVvLXNpbmstbmF2aWdhdGlvbiB2aWRlby1jb250ZW50CisgCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikgXAorIAkJJChNQUlOVEFJTkVSX0NGTEFHUykgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWdzdC0zLjAvZW5hYmxlLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wL2VuYWJsZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2FlYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wL2VuYWJsZS10ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIzIEBACitJbnN0YWxsIGV4YW1wbGUgYmluYXJ5IG5lZWRlZCBmb3IgY29yZS1pbWFnZS1jbHV0dGVyCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0ltcG9ydGVkIGZyb20gY2x1dHRlci1nc3QtMS44IHBhY2thZ2UsIGdpdDovL2dpdC5vcGVuZW1iZWRkZWQub3JnL29wZW5lbWJlZGRlZCwKK2NvbW1pdCBhZTI4ZWUzZjdhMDYwYjllMGQxMzE1NGE4NGYyNDQ0YTk4NDkwYjViLCB1cGRhdGVkIGZvciBjbHV0dGVyLWdzdCAxLjYKKworU2lnbmVkLW9mZi1ieTogVG9tYXMgRnJ5ZHJ5Y2ggPHRvbWFzQHNsZWVwZml2ZS5jb20+CisKK0luZGV4OiBnaXQvZXhhbXBsZXMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9leGFtcGxlcy9NYWtlZmlsZS5hbQkyMDExLTAxLTMxIDEwOjE0OjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGdpdC9leGFtcGxlcy9NYWtlZmlsZS5hbQkyMDExLTAxLTMxIDEwOjE0OjM0LjAwMDAwMDAwMCArMDgwMAorQEAgLTEsNiArMSw2IEBACisgTlVMTCA9ICMKKyAKKy1ub2luc3RfUFJPR1JBTVMgPSB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24KKytiaW5fUFJPR1JBTVMgPSB2aWRlby1wbGF5ZXIgdmlkZW8tc2luayB2aWRlby1zaW5rLW5hdmlnYXRpb24KKyAKKyBJTkNMVURFUyA9IC1JJCh0b3Bfc3JjZGlyKSBcCisgCSAgICQoTUFJTlRBSU5FUl9DRkxBR1MpIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3N0LTMuMF8zLjAuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlhOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NsdXR0ZXIvY2x1dHRlci1nc3QtMy4wXzMuMC44LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjbHV0dGVyLWdzdC0zLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NsdXR0ZXItZ3N0L2NsdXR0ZXItZ3N0Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNDttZDU9OTViYWFjYmExOTRlODE0YzExMGVhM2JkZjI1ZGRiZjQiCisKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gImY3ZDk3Zjk2ZTdjY2E4MmYzODMxN2QxNzM0ZDVkYWRiIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNTgyZTg1Yjg4NDgyZTE2ZjdlYzcxOTM2M2UzOGZhZGY4NGZhYjRkNGJhYWEyMWU1MjI3YTQ1NGI4MjRmMTM1YyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODk4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjAuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgZW1iZWRkaW5nIGEgQ2x1dHRlciBjYW52YXMgaW4gYSBHVEsrIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5jbHV0dGVyLXByb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKKworaW5oZXJpdCBjbHV0dGVyCisKK0RFUEVORFMgPSAiY2x1dHRlci0xLjAgZ3RrKzMiCitQQUNLQUdFUyAgPSsgIiR7UE59LWV4YW1wbGVzIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY2x1dHRlci9jbHV0dGVyLWd0ay0xLjBfMS42LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMwZWExOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jbHV0dGVyL2NsdXR0ZXItZ3RrLTEuMF8xLjYuMi5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgY2x1dHRlci1ndGstMS4wLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNTU3ZDgxNGMzZTcwY2MzYTJkMWNmMzgxNjkxOWIxNGYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJiYmQwM2RmYTlhMjAxMDJkNWNkYjQ0MDUxM2IwYTAzNTkzM2RhNTU3YWQ3ZTlkYTMxNTQ2MDM0ZGUyZGFmMDY5IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYTMxYzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC5pbmMKQEAgLTAsMCArMSw3MCBAQAorU1VNTUFSWSA9ICJNb2Rlcm4gM0QgZ3JhcGhpY3MgQVBJIHdpdGggYXNzb2NpYXRlZCB1dGlsaXR5IEFQSXMiCitIT01FUEFHRSA9ICJodHRwOi8vd2lraS5jbHV0dGVyLXByb2plY3Qub3JnL3dpa2kvQ29nbCIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IGNsdXR0ZXIKKworREVQRU5EUyA9ICJnbGliLTIuMCBnZGstcGl4YnVmIgorUEFDS0FHRVMgPSsgIiR7UE59LWV4YW1wbGVzIFwKKyAgICAgICAgICAgICBsaWJjb2dsIGxpYmNvZ2wtZ2xlczIgbGliY29nbC1wYW5nbyBsaWJjb2dsLXBhdGggXAorICAgICAgICAgICAgIgorQVVUT1RPT0xTX0FVWERJUiA9ICIke1N9L2J1aWxkIgorCisjIEV4dHJhIERFUEVORFMgZm9yIFBBQ0tBR0VDT05GSUcKK0VERVBFTkRTX0dMID0gInZpcnR1YWwvbGliZ2wgbGliZHJtIgorRURFUEVORFNfR0xFUzIgPSAidmlydHVhbC9saWJnbGVzMiIKK0VERVBFTkRTX0tNUyA9ICJsaWJkcm0gdmlydHVhbC9lZ2wiCitFREVQRU5EU19FR0wgPSAidmlydHVhbC9lZ2wiCitFREVQRU5EU19YMTEgPSAidmlydHVhbC9saWJ4MTEgbGlieGNvbXBvc2l0ZSBsaWJ4Zml4ZXMgbGlieGkgbGlieHJhbmRyIgorRURFUEVORFNfV0FZTEFORCA9ICJ2aXJ0dWFsL21lc2Egd2F5bGFuZCIKKworIyBFeHRyYSBSREVQRU5EUyBmb3IgUEFDS0FHRUNPTkZJRworIyBUaGlzIGhhcyB0byBiZSBleHBsaWN0bHkgbGlzdGVkLCBiZWNhdXNlIGNvZ2wgZGxvcGVucyB0aGUgYmFja2VuZHMKK0VSREVQRU5EU19HTCAgICA9ICJsaWJnbCIKK0VSREVQRU5EU19HTEVTMiA9ICJsaWJnbGVzMiIKKworIyBHTEVTdjEgaXMgcmFyZWx5IHRlc3RlZCwgc28gZGlzYWJsZSBpdAorRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbglcCisJICAgICAgIAkgLS1lbmFibGUtZXhhbXBsZXMtaW5zdGFsbAlcCisJICAgICAgIAkgLS1lbmFibGUtZGVidWcJCSAJXAorCSAgICAgICAJIC0tZGlzYWJsZS1nbGVzMQkJXAorCSAgICAgICAgIC0tZGlzYWJsZS1jYWlybyAgICAgICAgICAgICAgICBcCisJICAgIAkiCisKKyMgT3BlbkdML0dMWAorUEFDS0FHRUNPTkZJR1tnbHhdID0gIi0tZW5hYmxlLWdsIC0tZW5hYmxlLWdseCwtLWRpc2FibGUtZ2wgLS1kaXNhYmxlLWdseCwke0VERVBFTkRTX0dMfSAke0VERVBFTkRTX1gxMX0sJHtFUkRFUEVORFNfR0x9IgorCisjIEdMRVN2MgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLCR7RURFUEVORFNfR0xFUzJ9LCAke0VSREVQRU5EU19HTEVTMn0iCisKKyMgRUdMIGJhY2tlbmRzCitQQUNLQUdFQ09ORklHW2VnbC1rbXNdID0gIi0tZW5hYmxlLWttcy1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLWttcy1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19LTVN9IgorUEFDS0FHRUNPTkZJR1tlZ2wtbnVsbF0gPSAiLS1lbmFibGUtbnVsbC1lZ2wtcGxhdGZvcm0sLS1kaXNhYmxlLW51bGwtZWdsLXBsYXRmb3JtIgorUEFDS0FHRUNPTkZJR1tlZ2wteDExXSA9ICItLWVuYWJsZS14bGliLWVnbC1wbGF0Zm9ybSwtLWRpc2FibGUteGxpYi1lZ2wtcGxhdGZvcm0sJHtFREVQRU5EU19YMTF9ICR7RURFUEVORFNfRUdMfSIKK1BBQ0tBR0VDT05GSUdbZWdsLXdheWxhbmRdID0gIi0tZW5hYmxlLXdheWxhbmQtZWdsLXBsYXRmb3JtLC0tZGlzYWJsZS13YXlsYW5kLWVnbC1wbGF0Zm9ybSwke0VERVBFTkRTX1dBWUxBTkR9IgorCisjIFdheWxhbmQgKHNlcnZlci1zaWRlKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kLXNlcnZlcl0gPSAiLS1lbmFibGUtd2F5bGFuZC1lZ2wtc2VydmVyLC0tZGlzYWJsZS13YXlsYW5kLWVnbC1zZXJ2ZXIsJHtFREVQRU5EU19XQVlMQU5EfSIKKworIyBTdXBwb3J0IHJlbmRlcmluZyB0ZXh0IGRpcmVjdGx5IHdpdGggUGFuZ28KK1BBQ0tBR0VDT05GSUdbY29nbC1wYW5nb10gPSAiLS1lbmFibGUtY29nbC1wYW5nbywtLWRpc2FibGUtY29nbC1wYW5nbyxwYW5nbyIKKworIyBSZXNwZWN0IHRoZSBESVNUUk9fRkVBVFVSRVMgdG8gcHVsbCBpbiBHTFggb3IgV2F5bGFuZCBhcyBhcHByb3ByaWF0ZSBieQorIyBkZWZhdWx0LgorUEFDS0FHRUNPTkZJRyA/Pz0gImNvZ2wtcGFuZ28gZ2xlczIgXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnd2F5bGFuZCcsICdlZ2wtd2F5bGFuZCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2dseCBlZ2wteDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgIgorCisKK0ZJTEVTXyR7UE59LWV4YW1wbGVzID0gIiR7YmluZGlyfS8qICR7ZGF0YWRpcn0vY29nbC9leGFtcGxlcy1kYXRhLyoiCitGSUxFU19saWJjb2dsID0gIiR7bGliZGlyfS9saWJjb2dsJHtTT0xJQlN9IgorRklMRVNfbGliY29nbC1nbGVzMiA9ICIke2xpYmRpcn0vbGliY29nbC1nbGVzMiR7U09MSUJTfSIKK0ZJTEVTX2xpYmNvZ2wtcGFuZ28gPSAiJHtsaWJkaXJ9L2xpYmNvZ2wtcGFuZ28ke1NPTElCU30iCisKK0ZJTEVTX2xpYmNvZ2wtcGF0aCA9ICIke2xpYmRpcn0vbGliY29nbC1wYXRoJHtTT0xJQlN9IgorCisjIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhZnRlciBEZWJpYW4tcmVuYW1pbmcKK1JQUk9WSURFU19saWJjb2dsID0gImNvZ2wtMS4wIgorUkNPTkZMSUNUU19saWJjb2dsID0gImNvZ2wtMS4wIgorUlJFUExBQ0VTX2xpYmNvZ2wgPSAiY29nbC0xLjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMC9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAvY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTgzOTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2NvZ2wvY29nbC0xLjAvY29nbC1mcmFtZWJ1ZmZlci1nbC1Xb3JrLWFnYWluLW9uLUdMRVN2Mi5wYXRjaApAQCAtMCwwICsxLDQxIEBACitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKKworRnJvbSBmOGNjZTVmNmNiMjk1OGE0MDc0Zjg3Y2QzNDViZmU0NmUwZGRhNmUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogIkphc3BlciBTdC4gUGllcnJlIiA8anN0cGllcnJlQG1lY2hleWUubmV0PgorRGF0ZTogTW9uLCAyMCBBcHIgMjAxNSAxMjowODoyOSAtMDcwMAorU3ViamVjdDogY29nbC1mcmFtZWJ1ZmZlci1nbDogV29yayBhZ2FpbiBvbiBHTEVTdjIKKworCitkaWZmIC0tZ2l0IGEvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jIGIvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCitpbmRleCA3OTNiMTBiLi42MDljZmIzIDEwMDY0NAorLS0tIGEvY29nbC9kcml2ZXIvZ2wvY29nbC1mcmFtZWJ1ZmZlci1nbC5jCisrKysgYi9jb2dsL2RyaXZlci9nbC9jb2dsLWZyYW1lYnVmZmVyLWdsLmMKK0BAIC0xMDcsNiArMTA3LDEyIEBACisgI2lmbmRlZiBHTF9QQUNLX0lOVkVSVF9NRVNBCisgI2RlZmluZSBHTF9QQUNLX0lOVkVSVF9NRVNBIDB4ODc1OAorICNlbmRpZgorKyNpZm5kZWYgR0xfQkFDS19MRUZUCisrI2RlZmluZSBHTF9CQUNLX0xFRlQJCQkJMHgwNDAyCisrI2VuZGlmCisrI2lmbmRlZiBHTF9CQUNLX1JJR0hUCisrI2RlZmluZSBHTF9CQUNLX1JJR0hUCQkJCTB4MDQwMworKyNlbmRpZgorIAorICNpZm5kZWYgR0xfQ09MT1IKKyAjZGVmaW5lIEdMX0NPTE9SIDB4MTgwMAorQEAgLTI0NSw2ICsyNTEsOSBAQCBfY29nbF9mcmFtZWJ1ZmZlcl9nbF9mbHVzaF9zdGVyZW9fbW9kZV9zdGF0ZSAoQ29nbEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKKyAgIGlmIChmcmFtZWJ1ZmZlci0+dHlwZSA9PSBDT0dMX0ZSQU1FQlVGRkVSX1RZUEVfT0ZGU0NSRUVOKQorICAgICByZXR1cm47CisgCisrICBpZiAoIWN0eC0+Z2xEcmF3QnVmZmVyKQorKyAgICByZXR1cm47CisrCisgICAvKiBUaGUgb25lLXNob3QgZGVmYXVsdCBkcmF3IGJ1ZmZlciBzZXR0aW5nIGluIF9jb2dsX2ZyYW1lYnVmZmVyX2dsX2JpbmQKKyAgICAqIG11c3QgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkLiBJZiBub3QgaXQgd291bGQgb3ZlcnJpZGUgd2hhdCB3ZSBzZXQgaGVyZS4gKi8KKyAgIGdfYXNzZXJ0IChjdHgtPndhc19ib3VuZF90b19vbnNjcmVlbik7CistLSAKK2NnaXQgdjAuMTAuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvY29nbC9jb2dsLTEuMF8xLjIwLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIwYjgxNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9jb2dsL2NvZ2wtMS4wXzEuMjAuMC5iYgpAQCAtMCwwICsxLDggQEAKK3JlcXVpcmUgY29nbC0xLjAuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb2dsLWZyYW1lYnVmZmVyLWdsLVdvcmstYWdhaW4tb24tR0xFU3YyLnBhdGNoIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xYjFhNTA4ZDkxZDI1Y2E2MDdjODNmOTJmM2UzMWM4NCIKK1NSQ19VUklbYXJjaGl2ZS5tZDVzdW1dID0gIjViMjg4OTcxOTRkOWZmNzZhNTc0YTk0OTNkMWY3ZWUwIgorU1JDX1VSSVthcmNoaXZlLnNoYTI1NnN1bV0gPSAiNzI5ZTM1NDk1ODI5ZTdkMzFmYWZhMzM1OGU0N2I3NDNiYTIxYTJiMDhmZjliNmNkMjhmYjc0YzBkZTkxMTkyYiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxN2VhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi1leGFtcGxlcy9jb25maWd1cmUuaW4tRml4LXN0cmluZy1hcmd1bWVudC1zeW50YXgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA4ODA3N2VkMTU2YTcxNGYzMmJiNDA4ZjQyMjI3OGQ2MTYxMWZmZDQxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IFNhdCwgMjYgSnVsIDIwMTQgMTY6NTc6NDYgLTAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmluOiBGaXggc3RyaW5nIGFyZ3VtZW50IHN5bnRheAorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorLS0tCisgY29uZmlndXJlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCitpbmRleCBiZmUxYjgyLi5lOTM5YmJkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmluCisrKysgYi9jb25maWd1cmUuaW4KK0BAIC02NSw3ICs2NSw3IEBAIGZpKQorIAorIERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT049MS40LjE0CisgCistUEtHX0NIRUNLX01PRFVMRVMoRElSRUNURkIsIGRpcmVjdGZiID49ICRESVJFQ1RGQl9SRVFVSVJFRF9WRVJTSU9OLFsgV0FURVI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F0ZXIgZGlyZWN0ZmJgIF0sCisrUEtHX0NIRUNLX01PRFVMRVMoW0RJUkVDVEZCXSwgZGlyZWN0ZmIgPj0gJERJUkVDVEZCX1JFUVVJUkVEX1ZFUlNJT04sWyBXQVRFUj1gJFBLR19DT05GSUcgLS12YXJpYWJsZT13YXRlciBkaXJlY3RmYmAgXSwKKyAJQUNfTVNHX0VSUk9SKFskRElSRUNURkJfUEtHX0VSUk9SUworICoqKiBEaXJlY3RGQiAkRElSRUNURkJfUkVRVUlSRURfVkVSU0lPTiBvciBuZXdlciBpcyByZXF1aXJlZC4gVGhlIGxhdGVzdCB2ZXJzaW9uCisgKioqIG9mIERpcmVjdEZCIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnLy5dKSkKKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLWV4YW1wbGVzXzEuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljM2U4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmItZXhhbXBsZXNfMS43LjAuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJFeGFtcGxlIERpcmVjdEZCIGFwcGxpY2F0aW9ucyIKK0RFU0NSSVBUSU9OID0gIlRoZSBEaXJlY3RGQi1leGFtcGxlcyBwYWNrYWdlIGNvbnRhaW5zIGEgc2V0IG9mIHNpbXBsZSBEaXJlY3RGQiBcCisgICAgICBhcHBsaWNhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IGFuZCBkZW1vbnN0cmF0ZSB2YXJpb3VzIERpcmVjdEZCIFwKKyAgICAgIGZlYXR1cmVzIgorREVQRU5EUyA9ICJkaXJlY3RmYiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTUlUIgorCitTUkNfVVJJID0gIiBcCisgICAgICAgICAgIGh0dHA6Ly93d3cuZGlyZWN0ZmIub3JnL2Rvd25sb2Fkcy9FeHRyYXMvRGlyZWN0RkItZXhhbXBsZXMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5pbi1GaXgtc3RyaW5nLWFyZ3VtZW50LXN5bnRheC5wYXRjaCBcCisgICAgICAgICAgIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lY2Y2ZmQyYjE5OTE1YWZjNGRhNTYwNDM5MjZjYTE4ZiIKKworUyA9ICIke1dPUktESVJ9L0RpcmVjdEZCLWV4YW1wbGVzLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworU1JDX1VSSVttZDVzdW1dID0gIjhiNjBjODY3YWYyOTU0ODFjMzJhOGM3ZmM1ODAyMzA3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjlhMjEwNGNjNGRhODEyM2M4MzcxODEzNTUxYjY2Yjk0MzE5ODk3OWY3NDVjYmViYzAzNGJiNWUxMDg0NDEyMmEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDZhYWVhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi5pbmMKQEAgLTAsMCArMSw4MCBAQAorU1VNTUFSWSA9ICJHcmFwaGljcyBhYnN0cmFjdGlvbiBsaWJyYXJ5IGZvciB0aGUgTGludXggRnJhbWVidWZmZXIgRGV2aWNlIgorREVTQ1JJUFRJT04gPSAiRGlyZWN0RkIgaXMgYSB0aGluIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBkZXZlbG9wZXJzIFwKK3dpdGggaGFyZHdhcmUgZ3JhcGhpY3MgYWNjZWxlcmF0aW9uLCBpbnB1dCBkZXZpY2UgaGFuZGxpbmcgYW5kIFwKK2Fic3RyYWN0aW9uLCBhbiBpbnRlZ3JhdGVkIHdpbmRvd2luZyBzeXN0ZW0gd2l0aCBzdXBwb3J0IGZvciBcCit0cmFuc2x1Y2VudCB3aW5kb3dzIGFuZCBtdWx0aXBsZSBkaXNwbGF5IGxheWVycyBvbiB0b3Agb2YgdGhlIFwKK0xpbnV4IGZyYW1lYnVmZmVyIGRldmljZS4iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGNmM2M4MjU2NTllODI1Mzk2NDVkYTQxYTc5MDg1ODkiCisKK0hPTUVQQUdFID0gImh0dHA6Ly9kaXJlY3RmYi5vcmciCitERVBFTkRTID0gImpwZWcgbGlicG5nIGZyZWV0eXBlIHpsaWIgdHNsaWIgc3lzZnN1dGlscyIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmRpcmVjdGZiLm9yZy9kb3dubG9hZHMvQ29yZS9EaXJlY3RGQi0xLjcvRGlyZWN0RkItJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9mdXNpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYmFzaGlzbS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWdmeC1kaXJlY3QtQWJvaWQtdXNuZy1WTEFzLWFuZC1wcmludGYtZm9ybWF0cy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vRGlyZWN0RkItJHtQVn0iCisKK0xERkxBR1NfYXBwZW5kID0iIC1sdHMgLWxtIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tqcGVnMjAwMF0gPSAiLS1lbmFibGUtanBlZzIwMDAsLS1kaXNhYmxlLWpwZWcyMDAwLGphc3BlciIKK1BBQ0tBR0VDT05GSUdbZHJta21zXSA9ICItLWVuYWJsZS1kcm1rbXMsLS1kaXNhYmxlLWRybWttcyxsaWJkcm0iCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorCitFWFRSQV9PRUNPTkYgPSAiXAorICAtLXdpdGgtZ2Z4ZHJpdmVycz1ub25lIFwKKyAgLS1lbmFibGUtZnJlZXR5cGU9eWVzIFwKKyAgLS1lbmFibGUtemxpYiBcCisgIC0tZGlzYWJsZS1pbWxpYjIgXAorICAtLWRpc2FibGUtbWVzYSBcCisgIC0tZGlzYWJsZS1zZGwgXAorICAtLWRpc2FibGUtdm5jIFwKKyAgLS1kaXNhYmxlLXgxMSBcCisiCisKKyNPbmNlIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIG9wdGlvbiBvZiBnY2MgaXMgYWRkZWQgaW50byBUQVJHRVRfQ0xGQUdTIGFzIGRlZmF1bHQKKyN0aGlzIHdpbGwgY2F1c2UgZGlyZWN0ZmIgYnVpbGQgZmFpbHVyZSBvbiB4ODYgYXJjaCwgc28gZmlsdGVyIG91dCBpdC4KK1RBUkdFVF9DRkxBR1NfcmVtb3ZlX3g4NiA9ICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciIKKworI1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5kaXJlY3RmYi1pbnB1dGRyaXZlcnMtLioiCisjCisjcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworIyAgICBpbnB1dGRyaXZlcnNfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9pbnB1dGRyaXZlcnMnKQorIyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBpbnB1dGRyaXZlcnNfbGliZGlyLCAnKi5zbyQnLCAnZGlyZWN0ZmItaW5wdXRkcml2ZXJzLSVzJywgJ0RpcmVjdGZiIHBsdWdpbiBmb3IgJXMnKQorI30KKworIyBOT1RFOiBtb25vbGl0aGljIHBhY2thZ2luZyBmb3Igbm93LCBzaG91bGQgaW1wcm92ZSB0aGF0IGV2ZW50dWFsbHkKKworCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vKi8qLy5kZWJ1Zy8qLnNvIFwKKyAgJHtsaWJkaXJ9L2RpcmVjdGZiLSR7UlZ9LyovLmRlYnVnLyouc28gXAorIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIlwKKyAgJHtiaW5kaXJ9L2RpcmVjdGZiLWNvbmZpZyBcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9zeXN0ZW1zLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW50ZXJmYWNlcy8qLyoubGEgXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vd20vKi5sYSBcCisiCisKK0ZJTEVTXyR7UE59ICs9ICJcCisgICR7bGliZGlyfS9kaXJlY3RmYi0ke1JWfS9zeXN0ZW1zLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW5wdXRkcml2ZXJzLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vaW50ZXJmYWNlcy8qLyouc28gXAorICAke2xpYmRpcn0vZGlyZWN0ZmItJHtSVn0vd20vKi5zbyBcCisgICR7ZGF0YWRpcn0vZGlyZWN0ZmItJHtQVn0gXAorIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiLzAwMDEtZ2Z4LWRpcmVjdC1BYm9pZC11c25nLVZMQXMtYW5kLXByaW50Zi1mb3JtYXRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZTBmNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvMDAwMS1nZngtZGlyZWN0LUFib2lkLXVzbmctVkxBcy1hbmQtcHJpbnRmLWZvcm1hdHMucGF0Y2gKQEAgLTAsMCArMSw2MSBAQAorRnJvbSBmNDNlZjQ0ODA2ZmZiOGUzYjM1ZDk5MDcwZGRlOWI2Y2MxNzE0ZDNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgOCBTZXAgMjAxNSAyMTozMjoyMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBnZngsZGlyZWN0OiBBYm9pZCB1c25nIFZMQXMgYW5kIHByaW50ZiBmb3JtYXRzCisKK1ZMQXMgYXJlIGZsYWdnZWQgYnkgY2xhbmcgd2hlbiB1c2luZyBub24tUE9EIHR5cGVzLCB0aGVyZWZvcmUgcmVwbGFjZQordGhlIHVzYWdlIHdpdGggYWxsb2NhIHdoaWNoIGlzIGV4YWN0IHNhbWUgYWxsb2NhdGlvbiBvbiBzdGFjaworCisgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXykpKSBpcyBub3QgcG9ydGFibGUgYXMgdXNlZCBoZXJlCisgdGhlcmVmb3JlIGRpc2FibGUgdGhlIGNoZWNrIGZvciBjbGFuZyBoZXJlLCB3ZSBsb3NlIG5vIGZ1bmN0aW9uYWxpdHkKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBsaWIvZGlyZWN0L3V0aWwuaCB8IDIgKy0KKyBzcmMvZ2Z4L3V0aWwuY3BwICB8IDggKysrKy0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9kaXJlY3QvdXRpbC5oIGIvbGliL2RpcmVjdC91dGlsLmgKK2luZGV4IDcyOTQxZTkuLjhlN2ZhNGEgMTAwNjQ0CistLS0gYS9saWIvZGlyZWN0L3V0aWwuaAorKysrIGIvbGliL2RpcmVjdC91dGlsLmgKK0BAIC05OCw3ICs5OCw3IEBACisgI2RlZmluZSBEX0NPTlNUX0ZVTkMKKyAjZW5kaWYKKyAKKy0jaWYgX19HTlVDX18gPj0gMworKyNpZiBfX0dOVUNfXyA+PSAzICYmICFkZWZpbmVkIF9fY2xhbmdfXworICNkZWZpbmUgRF9GT1JNQVRfUFJJTlRGKG4pICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgbiwgbisxKSkpCisgI2RlZmluZSBEX0ZPUk1BVF9WUFJJTlRGKG4pICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCBuLCAwKSkpCisgI2Vsc2UKK2RpZmYgLS1naXQgYS9zcmMvZ2Z4L3V0aWwuY3BwIGIvc3JjL2dmeC91dGlsLmNwcAoraW5kZXggNDAwMzJiYy4uZDEwMTVkNCAxMDA2NDQKKy0tLSBhL3NyYy9nZngvdXRpbC5jcHAKKysrKyBiL3NyYy9nZngvdXRpbC5jcHAKK0BAIC0yOTQsOCArMjk0LDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfc3RlcmVvKCBDb3JlU3VyZmFjZSAgICAgICAgICAgKnNvdXJjZSwKKyB7CisgICAgICB1bnNpZ25lZCBpbnQgaSwgbiA9IDA7CisgICAgICBERkJSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgc291cmNlLT5jb25maWcuc2l6ZS53LCBzb3VyY2UtPmNvbmZpZy5zaXplLmggfTsKKy0gICAgIERGQlJlY3RhbmdsZSByZWN0c1tudW1dOworLSAgICAgREZCUG9pbnQgICAgIHBvaW50c1tudW1dOworKyAgICAgREZCUmVjdGFuZ2xlICpyZWN0cyA9ICAoREZCUmVjdGFuZ2xlKilhbGxvY2EoIHNpemVvZihzdHJ1Y3QgREZCUmVjdGFuZ2xlKSAqIG51bSk7CisrICAgICBERkJQb2ludCAqcG9pbnRzID0gIChERkJQb2ludCopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlBvaW50KSAqIG51bSk7CisgCisgICAgICBmb3IgKGk9MDsgaTxudW07IGkrKykgeworICAgICAgICAgICBERkJfUkVHSU9OX0FTU0VSVCggJnJlZ2lvbnNbaV0gKTsKK0BAIC0zNTEsOCArMzUxLDggQEAgZGZiX2dmeF9jb3B5X3JlZ2lvbnNfY2xpZW50KCBDb3JlU3VyZmFjZSAgICAgICAgICAgICAqc291cmNlLAorIHsKKyAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICBpLCBuID0gMDsKKyAgICAgIERGQlJlY3RhbmdsZSAgICAgICAgICAgICByZWN0ID0geyAwLCAwLCBzb3VyY2UtPmNvbmZpZy5zaXplLncsIHNvdXJjZS0+Y29uZmlnLnNpemUuaCB9OworLSAgICAgREZCUmVjdGFuZ2xlICAgICAgICAgICAgIHJlY3RzW251bV07CistICAgICBERkJQb2ludCAgICAgICAgICAgICAgICAgcG9pbnRzW251bV07CisrICAgICBERkJSZWN0YW5nbGUgICAgICAgICAgICAqcmVjdHMgPSAgKERGQlJlY3RhbmdsZSopYWxsb2NhKCBzaXplb2Yoc3RydWN0IERGQlJlY3RhbmdsZSkgKiBudW0pOworKyAgICAgREZCUG9pbnQgICAgICAgICAgICAgICAgKnBvaW50cyA9ICAoREZCUG9pbnQqKWFsbG9jYSggc2l6ZW9mKHN0cnVjdCBERkJQb2ludCkgKiBudW0pOworICAgICAgQ29yZUdyYXBoaWNzU3RhdGVDbGllbnQgKmNsaWVudCA9IF9jbGllbnQgPyBfY2xpZW50IDogJlN0YXRlQ2xpZW50OjpHZXQoKS0+Y2xpZW50OworICAgICAgQ2FyZFN0YXRlICAgICAgICAgICAgICAgKnN0YXRlICA9IGNsaWVudC0+c3RhdGU7CisgICAgICBDYXJkU3RhdGUgICAgICAgICAgICAgICAgYmFja3VwOworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9iYXNoaXNtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjRlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvYmFzaGlzbS5wYXRjaApAQCAtMCwwICsxLDE4IEBACiske3gvL3kvfSBpcyBhIGJhc2ggc3ludGF4LiBSZXBsYWNlIHdpdGggc29tZXRoaW5nIGRhc2ggY29tcGF0aWJsZQorCitSUCAyMDE1LzUvMworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBEaXJlY3RGQi0xLjcuNy9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBEaXJlY3RGQi0xLjcuNy5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIERpcmVjdEZCLTEuNy43L2NvbmZpZ3VyZS5pbgorQEAgLTI2OTYsNyArMjY5Niw3IEBAIEFNX0NPTkRJVElPTkFMKEJVSUxEX1RPT0xTLCB0ZXN0ICIkd2l0aF8KKyBBTV9DT05ESVRJT05BTChDUk9TU19DT01QSUxJTkcsIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gInllcyIpCisgCisgQ0ZMQUdTPSIkQ0ZMQUdTICRERkJfSU5URVJOQUxfQ0ZMQUdTIgorLUNYWEZMQUdTPSIkQ1hYRkxBR1MgJHtDRkxBR1MvLy1XZXJyb3ItaW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24vfSIKKytDWFhGTEFHUz0iJENYWEZMQUdTICQocHJpbnRmICclc1xuJyAiJENGTEFHUyIgfCBzZWQgJ3MvLVdlcnJvci1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbi8vZycpIgorIERGQl9MREZMQUdTPSIkTERGTEFHUyAkWkxJQl9MSUJTIgorIAorIENGTEFHUz0iJENGTEFHUyAkQ0ZMQUdTX1NURCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kaXJlY3RmYi9kaXJlY3RmYi9jb25maWd1cmVmaXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29uZmlndXJlZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOGMwMTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvY29uZmlndXJlZml4LnBhdGNoCkBAIC0wLDAgKzEsNjAgQEAKK0xpYnRvb2wgbmVlZHMgdGhlc2Ugc2V0IGNvcnJlY3RseSBlbHNlIHdlIGVuZCB1cCB3aXRoIHBvaW50bGVzcyBycGF0aHMKK3N1Y2ggYXMgdGhlIFFBIHdhcm5pbmdzOgorCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJsYXllciBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJtYXN0ZXIgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZnQgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZHVtcCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnB1dCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJmeCBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJzY3JlZW4gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vbWtkZ2lmZiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWJXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9kZmJpbnNwZWN0b3IgY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2Jpbi9ta2RmaWZmIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiaW5mbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvYmluL2RmYnBlbm1vdW50IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9iaW4vZGZiZyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmZ1c2lvbi0xLjQuc28uNiBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2xpYmRpcmVjdGZiLTEuNC5zby42IGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvbGliZnVzaW9uLTEuNC5zby42LjAuOSBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZmJkZXYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9zeXN0ZW1zL2xpYmRpcmVjdGZiX2Rldm1lbS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3N5c3RlbXMvbGliZGlyZWN0ZmJfZHVtbXkuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl92NGwuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQlZpZGVvUHJvdmlkZXIvbGliaWRpcmVjdGZidmlkZW9wcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lDb3JlUmVzb3VyY2VNYW5hZ2VyL2xpYmljb3JlcmVzb3VyY2VtYW5hZ2VyX3Rlc3Quc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9qcGVnLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfcG5nLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW50ZXJmYWNlcy9JRGlyZWN0RkJJbWFnZVByb3ZpZGVyL2xpYmlkaXJlY3RmYmltYWdlcHJvdmlkZXJfZGZpZmYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkltYWdlUHJvdmlkZXIvbGliaWRpcmVjdGZiaW1hZ2Vwcm92aWRlcl9naWYuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9mdDIuc28gY29udGFpbnMgcHJvYmFibHktcmVkdW5kYW50IFJQQVRIIC91c3IvbGliCitXQVJOSU5HOiBRQSBJc3N1ZTogZGlyZWN0ZmI6IC93b3JrL2k1ODYtcG9reS1saW51eC9kaXJlY3RmYi0xLjQuMTUtcjEvcGFja2FnZXMtc3BsaXQvZGlyZWN0ZmIvdXNyL2xpYi9kaXJlY3RmYi0xLjQtNi9pbnRlcmZhY2VzL0lEaXJlY3RGQkZvbnQvbGliaWRpcmVjdGZiZm9udF9kZ2lmZi5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L3dtL2xpYmRpcmVjdGZid21fZGVmYXVsdC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl96eXRyb25pYy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wZW5tb3VudC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saW51eF9pbnB1dC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9zZXJpYWxtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9tdXRvdWNoLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3RzbGliLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX2pveXN0aWNrLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3NvbnlwaS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9saXJjLnNvIGNvbnRhaW5zIHByb2JhYmx5LXJlZHVuZGFudCBSUEFUSCAvdXNyL2xpYgorV0FSTklORzogUUEgSXNzdWU6IGRpcmVjdGZiOiAvd29yay9pNTg2LXBva3ktbGludXgvZGlyZWN0ZmItMS40LjE1LXIxL3BhY2thZ2VzLXNwbGl0L2RpcmVjdGZiL3Vzci9saWIvZGlyZWN0ZmItMS40LTYvaW5wdXRkcml2ZXJzL2xpYmRpcmVjdGZiX3dtOTd4eF90cy5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9wczJtb3VzZS5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKK1dBUk5JTkc6IFFBIElzc3VlOiBkaXJlY3RmYjogL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L2RpcmVjdGZiLTEuNC4xNS1yMS9wYWNrYWdlcy1zcGxpdC9kaXJlY3RmYi91c3IvbGliL2RpcmVjdGZiLTEuNC02L2lucHV0ZHJpdmVycy9saWJkaXJlY3RmYl9rZXlib2FyZC5zbyBjb250YWlucyBwcm9iYWJseS1yZWR1bmRhbnQgUlBBVEggL3Vzci9saWIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JQIDIwMTIvMDMvMTYKKworSW5kZXg6IERpcmVjdEZCLTEuNC4xNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBEaXJlY3RGQi0xLjQuMTUub3JpZy9jb25maWd1cmUuaW4JMjAxMi0wMy0xNiAxMzozMjoyMy42OTI0MDI4NzkgKzAwMDAKKysrKyBEaXJlY3RGQi0xLjQuMTUvY29uZmlndXJlLmluCTIwMTItMDMtMTYgMTM6MzM6MjIuMzEyNDAwOTYwICswMDAwCitAQCAtOTcsMTMgKzk3LDYgQEAKKyBBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQorIEFDX0NIRUNLX0ZVTkNTKGZvcmspCisgCistCistIyMgV29yayBhcm91bmQgbGlic3R1aGwgZHVyaW5nIGNyb3NzIGJ1aWxkLi4uCistaWYgdGVzdCAiJGhvc3QiICE9ICIkYnVpbGQiOyB0aGVuCistICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iIgorLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIiCistZmkKKy0KKyBBQ19QQVRIX1BST0dTKFBFUkwsIHBlcmw1IHBlcmwpCisgCisgQUNfUEFUSF9QUk9HKE1BTjJIVE1MLCBtYW4yaHRtbCwgbm8pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmIvZnVzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgxYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiL2Z1c2lvbi5wYXRjaApAQCAtMCwwICsxLDM2IEBACitkaXJlY3RmYjogRml4IGZvciBoYW5ncyBpbiBkaXJlY3RfdGVzdCwgZnVzaW9uX3NraXJtaXNoIG9uIGV4aXQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW4gUG9zdCA8bGF1cmVuLnBvc3RAZnJlZXNjYWxlLmNvbT4KKworLS0tIGEvbGliL2Z1c2lvbi9mdXNpb24uYwkyMDEzLTAxLTE4IDIyOjU3OjExLjAwMDAwMDAwMCArMDgwMAorKysrIGIvbGliL2Z1c2lvbi9mdXNpb24uYwkyMDEzLTA3LTA0IDEwOjQyOjU2LjUwMjY5OTExOSArMDgwMAorQEAgLTI4NTMsOSArMjg1MywxNCBAQAorICAgICAgICAgICBkaXJlY3RfbXV0ZXhfbG9jayggJndvcmxkLT5ldmVudF9kaXNwYXRjaGVyX211dGV4ICk7CisgCisgICAgICAgICAgIHdoaWxlICgxKSB7CistICAgICAgICAgICAgICAgaWYgKCF3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzKQorKyAgICAgICAgICAgICAgIGlmICghd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfYnVmZmVycyl7CisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rfd2FpdHF1ZXVlX3dhaXQoICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9jb25kLCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKy0KKysgICAgICAgICAgICAgICAgICAgIGlmICh3b3JsZC0+ZGlzcGF0Y2hfc3RvcCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICBEX0RFQlVHX0FUKCBGdXNpb25fTWFpbl9EaXNwYXRjaCwgIiAgLT4gSUdOT1JJTkcgKGRpc3BhdGNoX3N0b3AhKVxuIiApOworKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICB9CisrICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZiA9IChGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKil3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzOworICAgICAgICAgICAgICAgIERfTUFHSUNfQVNTRVJUKCBidWYsIEZ1c2lvbkV2ZW50RGlzcGF0Y2hlckJ1ZmZlciApOworIAorQEAgLTI4NzIsNiArMjg3NywxMSBAQAorIC8vRF9JTkZPKCJ3YWl0aW5nLi4uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgIERfQVNTRVJUKCBidWYtPnJlYWRfcG9zID09IGJ1Zi0+d3JpdGVfcG9zICk7CisgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rfd2FpdHF1ZXVlX3dhaXQoICZ3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9jb25kLCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysJCSAgICAgIGlmICh3b3JsZC0+ZGlzcGF0Y2hfc3RvcCkgeworKyAgICAgICAgICAgICAgICAgICAgICAgICBEX0RFQlVHX0FUKCBGdXNpb25fTWFpbl9EaXNwYXRjaCwgIiAgLT4gSUdOT1JJTkcgKGRpc3BhdGNoX3N0b3AhKVxuIiApOworKyAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RfbXV0ZXhfdW5sb2NrKCAmd29ybGQtPmV2ZW50X2Rpc3BhdGNoZXJfbXV0ZXggKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorIAorICAgICAgICAgICAgICAgIGJ1ZiA9IChGdXNpb25FdmVudERpc3BhdGNoZXJCdWZmZXIgKil3b3JsZC0+ZXZlbnRfZGlzcGF0Y2hlcl9idWZmZXJzOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RpcmVjdGZiL2RpcmVjdGZiXzEuNy43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YzA3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZGlyZWN0ZmIvZGlyZWN0ZmJfMS43LjcuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIGRpcmVjdGZiLmluYworCitSViA9ICIxLjctNyIKKworTEVBRF9TT05BTUUgPSAibGliZGlyZWN0ZmItMS43LnNvLjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNTJjZjE4NjNiMWEzYTI4YWExMzcwZTkwNTM0NDBiZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzg1YzYzOGRjMzFiOGZlM2E3YzgxYmUxNDc1Yzg5YjIyNTVhYjNkNjdiNzc3Yzc0N2QzZmJjNTJmODAyN2EzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vaW5zdGFsbHRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2RybS9saWJkcm0vaW5zdGFsbHRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNzVkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybS9pbnN0YWxsdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyMyBAQAordGVzdHM6IGFsc28gaW5zdGFsbCB0ZXN0cyBhcHAKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggYmYxOTg3Zi4uZDkwOWUxOSAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTI3LDEwICsyNywxMSBAQCBBTV9DUFBGTEFHUyA9IFwKKyAKKyBMREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWJkcm0ubGEKKyAKKy1jaGVja19QUk9HUkFNUyA9IFwKKytiaW5fUFJPR1JBTVMgPSBcCisgCWRyaXN0YXQgXAorIAlkcm1zdGF0CisgCisrY2hlY2tfUFJPR1JBTVMgPQorIGlmIEhBVkVfTk9VVkVBVQorIFNVQkRJUlMgKz0gbm91dmVhdQorIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZHJtL2xpYmRybV8yLjQuNjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE2MzA1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9kcm0vbGliZHJtXzIuNC42Mi5iYgpAQCAtMCwwICsxLDQyIEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBpbnRlcmZhY2UgdG8gdGhlIGtlcm5lbCBEUk0gc2VydmljZXMiCitERVNDUklQVElPTiA9ICJUaGUgcnVudGltZSBsaWJyYXJ5IGZvciBhY2Nlc3NpbmcgdGhlIGtlcm5lbCBEUk0gc2VydmljZXMuICBEUk0gXAorc3RhbmRzIGZvciBcIkRpcmVjdCBSZW5kZXJpbmcgTWFuYWdlclwiLCB3aGljaCBpcyB0aGUga2VybmVsIHBvcnRpb24gb2YgdGhlIFwKK1wiRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZVwiIChEUkkpLiAgRFJJIGlzIHJlcXVpcmVkIGZvciBtYW55IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veGY4NmRybS5jO2JlZ2lubGluZT05O2VuZGxpbmU9MzI7bWQ1PWM4YTNiOTYxYWY3NjY3YzUzMDgxNjc2MWU5NDlkYzcxIgorUFJPVklERVMgPSAiZHJtIgorREVQRU5EUyA9ICJsaWJwdGhyZWFkLXN0dWJzIHVkZXYgbGlicGNpYWNjZXNzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kcmkuZnJlZWRlc2t0b3Aub3JnL2xpYmRybS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2luc3RhbGx0ZXN0cy5wYXRjaCAiCitTUkNfVVJJW21kNXN1bV0gPSAiYzkyOTFiYWUwZTVjYTY1ZDE0ODM4MjFkMzY5OGQzYWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTA2YzI5NGJkYmUxYzk0YzNjYTA4NDMwNWQ2MWE2ZTVhODM2N2YzYjQ5ODZlNmNjMTNiMWU5YjNmNzU5MzFkYyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNhaXJvLXRlc3RzIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtb21hcC1leHBlcmltZW50YWwtYXBpIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5zdGFsbC10ZXN0LXByb2dyYW1zIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1hbnBhZ2VzIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKKyAgICAgICAgICAgICAgICAiCisKK0FMTE9XX0VNUFRZXyR7UE59LWRyaXZlcnMgPSAiMSIKK1BBQ0tBR0VTID0rICIke1BOfS10ZXN0cyAke1BOfS1kcml2ZXJzICR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgXAorICAgICAgICAgICAgICR7UE59LWludGVsICR7UE59LWV4eW5vcyAke1BOfS1rbXMgJHtQTn0tZnJlZWRyZW5vIgorCitSUkVDT01NRU5EU18ke1BOfS1kcml2ZXJzID0gIiR7UE59LXJhZGVvbiAke1BOfS1ub3V2ZWF1ICR7UE59LW9tYXAgJHtQTn0taW50ZWwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke1BOfS1leHlub3MgJHtQTn0tZnJlZWRyZW5vIgorCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2JpbmRpcn0vZHIqICR7YmluZGlyfS9tb2RlKiAke2JpbmRpcn0vKnRlc3QiCitGSUxFU18ke1BOfS1yYWRlb24gPSAiJHtsaWJkaXJ9L2xpYmRybV9yYWRlb24uc28uKiIKK0ZJTEVTXyR7UE59LW5vdXZlYXUgPSAiJHtsaWJkaXJ9L2xpYmRybV9ub3V2ZWF1LnNvLioiCitGSUxFU18ke1BOfS1vbWFwID0gIiR7bGliZGlyfS9saWJkcm1fb21hcC5zby4qIgorRklMRVNfJHtQTn0taW50ZWwgPSAiJHtsaWJkaXJ9L2xpYmRybV9pbnRlbC5zby4qIgorRklMRVNfJHtQTn0tZXh5bm9zID0gIiR7bGliZGlyfS9saWJkcm1fZXh5bm9zLnNvLioiCitGSUxFU18ke1BOfS1rbXMgPSAiJHtsaWJkaXJ9L2xpYmttcyouc28uKiIKK0ZJTEVTXyR7UE59LWZyZWVkcmVubyA9ICIke2xpYmRpcn0vbGliZHJtX2ZyZWVkcmVuby5zby4qIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLWZiXzEuMC4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby1mYl8xLjAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTVkMzFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby1mYl8xLjAuMC5iYgpAQCAtMCwwICsxLDYgQEAKK0VHTElORk9fUExBVEZPUk0gPz0gImZiIgorRUdMSU5GT19CSU5BUllfTkFNRSA/PSAiZWdsaW5mby1mYiIKKworaW5jbHVkZSBlZ2xpbmZvLmluYworCitTVU1NQVJZICs9ICIoRnJhbWVidWZmZXIgdmVyc2lvbikiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8teDExXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MjdmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZWdsaW5mby9lZ2xpbmZvLXgxMV8xLjAuMC5iYgpAQCAtMCwwICsxLDEyIEBACitFR0xJTkZPX1BMQVRGT1JNID89ICJ4MTEiCitFR0xJTkZPX0JJTkFSWV9OQU1FID89ICJlZ2xpbmZvLXgxMSIKKworaW5jbHVkZSBlZ2xpbmZvLmluYworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1VNTUFSWSArPSAiKFgxMSB2ZXJzaW9uKSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2VnbGluZm8vZWdsaW5mby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3Njg4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9lZ2xpbmZvL2VnbGluZm8uaW5jCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgcHJpbnRpbmcgaW5mb3JtYXRpb24gRUdMIGFuZCBpdHMgY2xpZW50IEFQSXMgKE9wZW5HTCwgT3BlbkdMIEVTLCBPcGVuVkcpIgorU0VDVElPTiA9ICJncmFwaGljcyIKK0xJQ0VOU0UgPSAiWmxpYiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9kdjEvZWdsaW5mbyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PThkNGYzM2JjM2FkZDk3NmY3ZGZhZTg1ZGFiNjZmMDNjIgorCitERVBFTkRTID0gInZpcnR1YWwvZWdsIgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZHYxL2VnbGluZm8uZ2l0O2JyYW5jaD1tYXN0ZXIiCitTUkNSRVYgPSAiNGIzMTc2NDhlYzZjZjM5NTU2YTllNWQ4MDc4ZjYwNWJjMGVkZDVkZSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCB3YWYKKworIyBCU1AgbGF5ZXJzIHNob3VsZCBhZGQgLmJiYXBwZW5kIGZpbGVzIGZvciB0aGUgLXgxMSBhbmQgLWZiIC5iYiByZWNpcGVzLCB3aGljaAorIyBhcHBlbmQgdGhlIHJlc3BlY3RpdmUgRUdML09wZW5HTEVTL09wZW5WRyBsaWJyYXJpZXMgdG8gREVQRU5EUyBhbmQgc2V0CisjIEVHTF9ERVZJQ0UgYXMgYXBwcm9wcmlhdGUuCitFR0xJTkZPX0RFVklDRSA/PSAiZ2VuZXJpYyIKKworRVhUUkFfT0VDT05GID0gIi0tcGxhdGZvcm09JHtFR0xJTkZPX1BMQVRGT1JNfSBcCisgICAgICAgICAgICAgICAgLS1kZXZpY2U9JHtFR0xJTkZPX0RFVklDRX0gXAorICAgICAgICAgICAgICAgIC0tc3lzcm9vdCAke1NUQUdJTkdfRElSX1RBUkdFVH0iCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW12ICR7RH0vJHtiaW5kaXJ9L2VnbGluZm8gJHtEfS8ke2JpbmRpcn0vJHtFR0xJTkZPX0JJTkFSWV9OQU1FfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZy9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNhMWU2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mb250Y29uZmlnL2ZvbnRjb25maWcvcmV2ZXJ0LXN0YXRpYy1wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorUmV2ZXJ0IHBhcnQgb2YgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2ZvbnRjb25maWcvY29tbWl0L2ZvbnRjb25maWcucGMuaW4/aWQ9MzM4ZmZlNmI4ODZhZDRiYTg2ZmY0NzFjYjU5YzRhNWU1ZmZiZTQwOAorV2UgcmVhbGx5IGRvbnQgZG8gc3RhdGljIGxpbmtpbmcgc28gaXRzIG5vdCBnb2luZyB0byBjYXVzZSBpc3N1ZXMgZm9yIHVzIGJ1dCBhcyBzdWNoIHRoaXMgaXMgaGFybWluZyB1cyBieSBhZGRpbmcgYWJzb2x1dGUKK3BhdGhzIGludG8gLUkgb3B0aW9ucyBpbnRvIGZvbnRjb25maWcucGMgd2hpY2ggaXMgdGhlbSBwcmVwZW5kZWQgd2l0aCBzeXNyb290IHdoZW4gcmVhZCBiYWNrIGJ5IGNyb3NzIHBrZy1jb25maWcgYW5kCit3ZSBlbmQgdXAgd2l0aCAtSSA8c3lzcm9vdD4vPHN5c3Jvb3Q+L3Vzci9pbmNsdWRlL2ZvbnRjb25maWcgaW4gQ0ZMQUdTIG9mIGNsaWVudHMgd2hpY2ggZGVwZW5kIG9uIGl0LiBvbmUgc3VjaCBleGFtcGxlCitpcyBtYXRjaGJveC1wYW5lbC0yIGFuZCBpdCB3YXMgd29ya2luZyBmaW5lIHdpdGggZ2NjIDwgNSBiZWNhdXNlIGl0IHRvbGVyYXRlZCBub24tZXhpc3RpbmcgcGF0aHMgaW4gLUkgZmxhZ3MgYnV0IGdjYy01CitnZW50bHkgcmVmdXNlcyBhbmQgcmlnaHRseSBzby4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1TcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBmb250Y29uZmlnLTIuMTEuOTMvZm9udGNvbmZpZy5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGZvbnRjb25maWctMi4xMS45My5vcmlnL2ZvbnRjb25maWcucGMuaW4KKysrKyBmb250Y29uZmlnLTIuMTEuOTMvZm9udGNvbmZpZy5wYy5pbgorQEAgLTE1LDQgKzE1LDQgQEAgUmVxdWlyZXM6IEBQS0dDT05GSUdfUkVRVUlSRVNACisgUmVxdWlyZXMucHJpdmF0ZTogQFBLR0NPTkZJR19SRVFVSVJFU19QUklWQVRFTFlACisgTGliczogLUwke2xpYmRpcn0gLWxmb250Y29uZmlnCisgTGlicy5wcml2YXRlOiBARVhQQVRfTElCU0AgQEZSRUVUWVBFX0xJQlNAIEBJQ09OVl9MSUJTQCBATElCWE1MMl9MSUJTQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBFWFBBVF9DRkxBR1NAIEBGUkVFVFlQRV9DRkxBR1NAIEBJQ09OVl9DRkxBR1NAIEBMSUJYTUwyX0NGTEFHU0AKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjExLjk0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZvbnRjb25maWcvZm9udGNvbmZpZ18yLjExLjk0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmZmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZm9udGNvbmZpZy9mb250Y29uZmlnXzIuMTEuOTQuYmIKQEAgLTAsMCArMSw0NSBAQAorU1VNTUFSWSA9ICJHZW5lcmljIGZvbnQgY29uZmlndXJhdGlvbiBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRm9udGNvbmZpZyBpcyBhIGZvbnQgY29uZmlndXJhdGlvbiBhbmQgY3VzdG9taXphdGlvbiBsaWJyYXJ5LCB3aGljaCBcCitkb2VzIG5vdCBkZXBlbmQgb24gdGhlIFggV2luZG93IFN5c3RlbS4gSXQgaXMgZGVzaWduZWQgdG8gbG9jYXRlIFwKK2ZvbnRzIHdpdGhpbiB0aGUgc3lzdGVtIGFuZCBzZWxlY3QgdGhlbSBhY2NvcmRpbmcgdG8gcmVxdWlyZW1lbnRzIFwKK3NwZWNpZmllZCBieSBhcHBsaWNhdGlvbnMuIFwKK0ZvbnRjb25maWcgaXMgbm90IGEgcmFzdGVyaXphdGlvbiBsaWJyYXJ5LCBub3IgZG9lcyBpdCBpbXBvc2UgYSBcCitwYXJ0aWN1bGFyIHJhc3Rlcml6YXRpb24gbGlicmFyeSBvbiB0aGUgYXBwbGljYXRpb24uIFRoZSBYLXNwZWNpZmljIFwKK2xpYnJhcnkgJ1hmdCcgdXNlcyBmb250Y29uZmlnIGFsb25nIHdpdGggZnJlZXR5cGUgdG8gc3BlY2lmeSBhbmQgXAorcmFzdGVyaXplIGZvbnRzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mb250Y29uZmlnLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9Zm9udGNvbmZpZyIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUgJiBNSVQgJiBQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdhMDQ0OWU5YmM1MzcwNDAyYTk0YzAwMjA0YmVjYTNkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mY2ZyZWV0eXBlLmM7ZW5kbGluZT00NTttZDU9NWQ5NTEzZTMxOTZhMWZiZmRmYTk0MDUxYzA5ZGZjODQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZjY2FjaGUuYztiZWdpbmxpbmU9MTE5OTtlbmRsaW5lPTEyMTQ7bWQ1PTAzMjZjZmViNGE3MzMzZGQ0ZGQyNWZiYmM0YjlmMjdmIgorCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAiZXhwYXQgZnJlZXR5cGUgemxpYiIKKworU1JDX1VSSSA9ICJodHRwOi8vZm9udGNvbmZpZy5vcmcvcmVsZWFzZS9mb250Y29uZmlnLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9yZXZlcnQtc3RhdGljLXBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NzliZTg3MGM3ZjgzZjE1Zjg3YmFjMDg1YjYxZDY0MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3M2Y2ZDMyM2M3YmNmYmRlMjVkNzgzOTc2NzUxOTFkNTViOGY0MTM5MTMyYzZhOTQ0NDQxMGYzYTJkOGE5YTk1IgorCitQQUNLQUdFUyA9KyAiZm9udGNvbmZpZy11dGlscyIKK0ZJTEVTXyR7UE59ID0rICIke2RhdGFkaXJ9L3htbC8qIgorRklMRVNfZm9udGNvbmZpZy11dGlscyA9ICIke2JpbmRpcn0vKiIKKworIyBXb3JrIGFyb3VuZCBwYXN0IGJyZWFrYWdlIGluIGRlYmlhbi5iYmNsYXNzCitSUFJPVklERVNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorUlJFUExBQ0VTX2ZvbnRjb25maWctdXRpbHMgPSAibGliZm9udGNvbmZpZy11dGlscyIKK1JDT05GTElDVFNfZm9udGNvbmZpZy11dGlscyA9ICJsaWJmb250Y29uZmlnLXV0aWxzIgorREVCSUFOX05PQVVUT05BTUVfZm9udGNvbmZpZy11dGlscyA9ICIxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRk9OVENPTkZJR19DQUNIRV9ESVIgPz0gIiR7bG9jYWxzdGF0ZWRpcn0vY2FjaGUvZm9udGNvbmZpZyIKKworRVhUUkFfT0VDT05GID0gIiAtLWRpc2FibGUtZG9jcyAtLXdpdGgtZGVmYXVsdC1mb250cz0ke2RhdGFkaXJ9L2ZvbnRzIC0td2l0aC1jYWNoZS1kaXI9JHtGT05UQ09ORklHX0NBQ0hFX0RJUn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ZyZWV0eXBlL2ZyZWV0eXBlXzIuNi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1OTljNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mcmVldHlwZS9mcmVldHlwZV8yLjYuYmIKQEAgLTAsMCArMSw2MCBAQAorU1VNTUFSWSA9ICJGcmVldHlwZSBmb250IHJlbmRlcmluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiRnJlZVR5cGUgaXMgYSBzb2Z0d2FyZSBmb250IGVuZ2luZSB0aGF0IGlzIGRlc2lnbmVkIHRvIGJlIHNtYWxsLCBlZmZpY2llbnQsIFwKK2hpZ2hseSBjdXN0b21pemFibGUsIGFuZCBwb3J0YWJsZSB3aGlsZSBjYXBhYmxlIG9mIHByb2R1Y2luZyBoaWdoLXF1YWxpdHkgb3V0cHV0IChnbHlwaCBcCitpbWFnZXMpLiBJdCBjYW4gYmUgdXNlZCBpbiBncmFwaGljcyBsaWJyYXJpZXMsIGRpc3BsYXkgc2VydmVycywgZm9udCBjb252ZXJzaW9uIHRvb2xzLCB0ZXh0IFwKK2ltYWdlIGdlbmVyYXRpb24gdG9vbHMsIGFuZCBtYW55IG90aGVyIHByb2R1Y3RzIGFzIHdlbGwuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLm5vbmdudS5vcmcvYnVncy8/Z3JvdXA9ZnJlZXR5cGUiCisKK0xJQ0VOU0UgPSAiRnJlZVR5cGUgfCBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL0xJQ0VOU0UuVFhUO21kNT1jMDE3ZmYxN2ZjNmYwNzk0YWRmOTNkYjU1NTljY2Q1NiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kb2NzL0ZUTC5UWFQ7bWQ1PWQ0NzllODM3OTdmNjk5ZmU4NzNiMzhkYWRkMGZjZDRjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RvY3MvR1BMdjIuVFhUO21kNT04ZWYzODA0NzZmNjQyYzIwZWJmNDBmZWNiMGFkZDJlYyIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9mcmVldHlwZS9mcmVldHlwZS0ke1BWfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjU2ODI4OTBjYjAyNjdmNjY3MWRkM2RlNmVhYmQzZTY5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg0NjlmYjgxMjQ3NjRmODUwMjljYzgyNDdjMzFlMTMyYTJjNWU1MTA4NGRkY2UyYTQ0ZWEzMmVlNGFlODM0N2UiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vZnJlZXR5cGUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZCBtdWx0aWxpYl9oZWFkZXIKKworTElCVE9PTCA9ICIke1N9L2J1aWxkcy91bml4LyR7SE9TVF9TWVN9LWxpYnRvb2wiCitFWFRSQV9PRU1BS0UgPSAiJ0xJQlRPT0w9JHtMSUJUT09MfSciCitFWFRSQV9PRU1BS0VfY2xhc3MtbmF0aXZlID0gIiIKK0VYVFJBX09FQ09ORiA9ICItLXdpdGhvdXQtemxpYiAtLXdpdGhvdXQtYnppcDIgQ0NfQlVJTEQ9JyR7QlVJTERfQ0N9JyIKK1RBUkdFVF9DUFBGTEFHUyArPSAiLURfRklMRV9PRkZTRVRfQklUUz02NCIKKworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1twaXhtYXBdID0gIi0td2l0aC1wbmcsLS13aXRob3V0LXBuZyxsaWJwbmciCisjIFRoaXMgcmVzdWx0cyBpbiBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgc28gZW5hYmxpbmcgaXMgbm9uLXRyaXZpYWwKK1BBQ0tBR0VDT05GSUdbaGFyZmJ1enpdID0gIi0td2l0aC1oYXJmYnV6eiwtLXdpdGhvdXQtaGFyZmJ1enosaGFyZmJ1enoiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwljZCBidWlsZHMvdW5peAorCWxpYnRvb2xpemUgLS1mb3JjZSAtLWNvcHkKKwlhY2xvY2FsIC1JIC4KKwlnbnUtY29uZmlnaXplIC0tZm9yY2UKKwlhdXRvY29uZgorCWNkICR7U30KKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbmZpZ3VyZV9jbGFzcy1uYXRpdmUoKSB7CisJKGNkIGJ1aWxkcy91bml4ICYmIGdudS1jb25maWdpemUpIHx8IGRpZSAiZmFpbHVyZSBydW5uaW5nIGdudS1jb25maWdpemUiCisJb2VfcnVuY29uZgorfQorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisJJHtCVUlMRF9DQ30gLW8gb2Jqcy9hcGluYW1lcyBzcmMvdG9vbHMvYXBpbmFtZXMuYworfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlvZV9tdWx0aWxpYl9oZWFkZXIgZnJlZXR5cGUyL2NvbmZpZy9mdGNvbmZpZy5oCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9mc3Rlc3RzL2ZzdGVzdHNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YzMzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZnN0ZXN0cy9mc3Rlc3RzX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIlZhcmlvdXMgYmVuY2htYXJuaW5nIHRlc3RzIGZvciBYIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiWmxpYiIKK0RFUEVORFMgPSAicGFuZ28gbGlieGV4dCBsaWJ4ZnQgdmlydHVhbC9saWJ4MTEgZ3RrKyIKKworU1JDUkVWID0gImU1OTM5ZmY2MDhiOTVjZGQ0ZDBhYjBlMTkzNTc4MWFiOWEyNzZhYzAiCitQViA9ICIwLjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly90ZXN0LXBhbmdvLWdkay5jO2VuZGxpbmU9MjQ7bWQ1PTFlZTc0ZWM4NTFlY2RhNTdlYjdhYzZjYzE4MGY3NjU1IgorCitTID0gIiR7V09SS0RJUn0vZ2l0L3Rlc3RzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvYXV0b3Rvb2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZmUwODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvZ2xldy9nbGV3L2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDE0OSBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBnbGV3L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgZ2xldy9NYWtlZmlsZS5hbQkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSw1IEBACisrCisrQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQgLS1pbnN0YWxsCisrCisrU1VCRElSUyA9IGluY2x1ZGUgc3JjCisrCitJbmRleDogZ2xldy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L2NvbmZpZ3VyZS5hYwkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSw2NyBAQAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKysjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisrCisrQUNfUFJFUkVRKFsyLjYyXSkKKytBQ19JTklUKFtnbGV3XSwgWzEuOS4wXSwgW0JVRy1SRVBPUlQtQUREUkVTU10pCisrQUNfQ09ORklHX1NSQ0RJUihbc3JjL2dsZXcuY10pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKytBTV9JTklUX0FVVE9NQUtFKFstV2FsbCAtV2Vycm9yIGZvcmVpZ25dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKysKKytMVF9JTklUCisrCisrIyBDaGVja3MgZm9yIHByb2dyYW1zLgorK0FDX1BST0dfQ0MKKytBQ19QUk9HX0lOU1RBTEwKKytBQ19QUk9HX0xOX1MKKysKKysjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorKworKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCisrQUNfQ0hFQ0tfSEVBREVSUyhbaW50dHlwZXMuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRsaWIuaCBzdHJpbmcuaF0pCisrCisrIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorK0FDX1RZUEVfSU5UMzJfVAorK0FDX1RZUEVfSU5UNjRfVAorK0FDX1RZUEVfVUlOVDY0X1QKKytBQ19DSEVDS19UWVBFUyhbcHRyZGlmZl90XSkKKysKKysjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisrQUNfRlVOQ19NQUxMT0MKKytBQ19DSEVDS19GVU5DUyhbc3RydG9sXSkKKysKKysjIENoZWNrIGZvciBwa2djb25maWcgbGlicworKworK1BLR19DSEVDS19NT0RVTEVTKFtYMTFdLCBbeDExXSkKKytBQ19TVUJTVChbWDExX0xJQlNdKQorK0FDX1NVQlNUKFtYMTFfQ0ZMQUdTXSkKKysKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbWE1VXSwgW3htdV0pCisrQUNfU1VCU1QoW1hNVV9MSUJTXSkKKytBQ19TVUJTVChbWE1VX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hJXSwgW3hpXSkKKytBQ19TVUJTVChbWElfTElCU10pCisrQUNfU1VCU1QoW1hJX0NGTEFHU10pCisrCisrUEtHX0NIRUNLX01PRFVMRVMoW1hFWFRdLCBbeGV4dF0pCisrQUNfU1VCU1QoW1hFWFRfTElCU10pCisrQUNfU1VCU1QoW1hFWFRfQ0ZMQUdTXSkKKysKKysjIENoZWNrIGZvciBHTFUgaXMgZW5vdWdoIGFuZCBpbXBsZXMgZ2wgc28gbm8gZG91YmxlZCAtbEdMIGluIExERkxBR1MKKytQS0dfQ0hFQ0tfTU9EVUxFUyhbR0xVXSwgW2dsdV0pCisrQUNfU1VCU1QoW0dMVV9MSUJTXSkKKytBQ19TVUJTVChbR0xVX0NGTEFHU10pCisrCisrIyBFTkFCTEUgb3B0aW9uIGZvciBNdWx0aXBsZSBSZW5kZXJpbmcgQ29udGV4dHMgc3VwcG9ydAorK0FDX0NIRUNLX0VOQUJMRV9HTEVXTVgKKysKKysjIGZvciBub3cgd2UgdXNlIHRoZSBzYW1lIHZlcnNpb24gYXMgdGhlIHBhY2thZ2UsIGJ1dCB0aGF0IHNob3VsZCBiZSBhdm9pZGVkCisrIyBpbiB0aGUgZnV0dXJlCisrCisrQUNfU1VCU1QoW0xJQkdMRVdfU09fVkVSU0lPTl0sIFsxOjk6MF0pCisrCisrQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZQorKyAgICAgICAgICAgICAgICAgc3JjL01ha2VmaWxlXSkKKytBQ19PVVRQVVQKK0luZGV4OiBnbGV3L3NyYy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGdsZXcvc3JjL01ha2VmaWxlLmFtCTIwMDktMTItMDIgMDA6MzM6NDguNjkwNzg2MTEwICswMTAwCitAQCAtMCwwICsxLDM1IEBACisrCisrQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorKworK2lmIEVOQUJMRV9HTEVXTVgKKytBTV9DUFBGTEFHUyArPSAtREdMRVdfTVgKKytlbmRpZgorKworK0FNX0NGTEFHUyA9IEBYMTFfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhNVV9DRkxBR1NAIFwKKysgICAgICAgICAgICBAWElfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQFhFWFRfQ0ZMQUdTQCBcCisrICAgICAgICAgICAgQEdMVV9DRkxBR1NACisrCisrbGliX0xUTElCUkFSSUVTID0gbGliR0xFVy5sYQorKworK2xpYkdMRVdfbGFfU09VUkNFUyA9IGdsZXcuYworKworK2xpYkdMRVdfbGFfTElCQUREID0gQFgxMV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWE1VX0xJQlNAIFwKKysgICAgICAgICAgICAgICAgICAgIEBYSV9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAWEVYVF9MSUJTQCBcCisrICAgICAgICAgICAgICAgICAgICBAR0xVX0xJQlNACisrCisrbGliR0xFV19sYV9MREZMQUdTID0gLXZlcnNpb24tbnVtYmVyIEBMSUJHTEVXX1NPX1ZFUlNJT05ACisrCisrYmluX1BST0dSQU1TID0gZ2xld2luZm8gdmlzdWFsaW5mbworKworK2dsZXdpbmZvX1NPVVJDRVMgPSBnbGV3aW5mby5jCisrCisrZ2xld2luZm9fTERBREQgPSBsaWJHTEVXLmxhCisrCisrdmlzdWFsaW5mb19TT1VSQ0VTID0gIHZpc3VhbGluZm8uYworKworK3Zpc3VhbGluZm9fTERBREQgPSBsaWJHTEVXLmxhCisrCitJbmRleDogZ2xldy9tNC9nbGV3bXgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L200L2dsZXdteC5tNAkyMDA5LTEyLTAyIDAwOjMwOjIzLjI5NjY0MTY2MyArMDEwMAorQEAgLTAsMCArMSwxMSBAQAorKworK0FDX0RFRlVOKFtBQ19DSEVDS19FTkFCTEVfR0xFV01YXSxbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGluY2x1ZGUgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIHN1cHBvcnRdKQorK0FDX0FSR19FTkFCTEUoW2dsZXdteF0sCisrICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbGV3bXhdLCBbZW5hYmxlIEdMRVcgTXVsdGlwbGUgUmVuZGVyaW5nIENvbnRleHRzIChkZWZhdWx0IGlzIG5vKV0pXSwKKysgICBbRU5BQkxFX0dMRVdNWD0iJGVuYWJsZXZhbCJdLAorKyAgIFtFTkFCTEVfR0xFV01YPSJubyJdKQorK0FDX01TR19SRVNVTFQoWyR7RU5BQkxFX0dMRVdNWH1dKQorK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfR0xFV01YXSwgW3Rlc3QgeCIke0VOQUJMRV9HTEVXTVh9IiA9ICJ4eWVzIl0pCisrXSkKKysKK0luZGV4OiBnbGV3L2luY2x1ZGUvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbGV3L2luY2x1ZGUvTWFrZWZpbGUuYW0JMjAwOS0xMi0wMiAwMDozMDoyMy4yOTY2NDE2NjMgKzAxMDAKK0BAIC0wLDAgKzEsMyBAQAorKworK25vYmFzZV9pbmNsdWRlX0hFQURFUlMgPSBHTC9nbGV3LmggIEdML2dseGV3LmggIEdML3dnbGV3LmgKKysKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZml4LWdsZXcucGMtaW5zdGFsbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZml4LWdsZXcucGMtaW5zdGFsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE5OWFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9maXgtZ2xldy5wYy1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKKworV2UgbWFpbnRhaW4gdGhlIGF1dG90b29scyBjb25maWd1cmUuYWMgYW5kIE1ha2VmaWxlLmFtLCB0byBjb3JyZWN0bHkKK3Byb3ZpZGUgdGhlIGdsZXcucGMsIHRoZSBmb2xsb3dpbmcgcGF0Y2ggaXMgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogZ2xldy0xLjExLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL01ha2VmaWxlLmFtCisrKysgZ2xldy0xLjExLjAvTWFrZWZpbGUuYW0KK0BAIC0zLDMgKzMsNSBAQCBBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNCAtLWluc3RhbGwKKyAKKyBTVUJESVJTID0gaW5jbHVkZSBzcmMKKyAKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBnbGV3LnBjCitJbmRleDogZ2xldy0xLjExLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2xldy0xLjExLjAub3JpZy9jb25maWd1cmUuYWMKKysrKyBnbGV3LTEuMTEuMC9jb25maWd1cmUuYWMKK0BAIC02Niw1ICs2Niw2IEBAIEFDX1NVQlNUKFtMSUJHTEVXX1NPX1ZFUlNJT05dLCBbMTo5OjBdKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUKKy0gICAgICAgICAgICAgICAgIHNyYy9NYWtlZmlsZV0pCisrICAgICAgICAgICAgICAgICBzcmMvTWFrZWZpbGUKKysgICAgICAgICAgICAgICAgIGdsZXcucGNdKQorIEFDX09VVFBVVAorSW5kZXg6IGdsZXctMS4xMS4wL2dsZXcucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuMTEuMC5vcmlnL2dsZXcucGMuaW4KKysrKyBnbGV3LTEuMTEuMC9nbGV3LnBjLmluCitAQCAtNSw3ICs1LDcgQEAgaW5jbHVkZWRpcj0ke3ByZWZpeH0vaW5jbHVkZS9HTAorIAorIE5hbWU6IGdsZXcKKyBEZXNjcmlwdGlvbjogVGhlIE9wZW5HTCBFeHRlbnNpb24gV3JhbmdsZXIgbGlicmFyeQorLVZlcnNpb246IEB2ZXJzaW9uQAorLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBjZmxhZ3NACistTGliczogLUwke2xpYmRpcn0gLWxAbGlibmFtZUAKKy1SZXF1aXJlczogQHJlcXVpcmVzbGliQAorK1ZlcnNpb246IEBWRVJTSU9OQAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBDRkxBR1NACisrTGliczogLUwke2xpYmRpcn0gLWxHTEVXCisrUmVxdWlyZXM6IGdsdQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xldy9nbGV3X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZ2xld19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwN2VmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXcvZ2xld19maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgcGF0Y2ggZml4ZXMgZm9sbG93aW5nIGlzc3VlIHdpdGggYXV0b21ha2UgMS4xMgorCit8IGF1dG9tYWtlOiB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBlcnJvcnMKK3wgL3Nydi9ob21lL25pdGluL2J1aWxkcy9idWlsZC1nY2M0Ny90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9zaGFyZS9hdXRvbWFrZS0xLjEyL2FtL2x0bGlicmFyeS5hbTogd2FybmluZzogJ2xpYkdMRVcubGEnOiBsaW5raW5nIGxpYnRvb2wgbGlicmFyaWVzIHVzaW5nIGEgbm9uLVBPU0lYCit8IC9zcnYvaG9tZS9uaXRpbi9idWlsZHMvYnVpbGQtZ2NjNDcvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3Ivc2hhcmUvYXV0b21ha2UtMS4xMi9hbS9sdGxpYnJhcnkuYW06IGFyY2hpdmVyIHJlcXVpcmVzICdBTV9QUk9HX0FSJyBpbiAnY29uZmlndXJlLmFjJworCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMworCitJbmRleDogZ2xldy0xLjcuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbGV3LTEuNy4wLm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2xldy0xLjcuMC9jb25maWd1cmUuYWMKK0BAIC0xNCw2ICsxNCw5IEBAIExUX0lOSVQKKyBBQ19QUk9HX0NDCisgQUNfUFJPR19JTlNUQUxMCisgQUNfUFJPR19MTl9TCisrIyBhdXRvbWFrZSAxLjEyIHNlZW1zIHRvIHJlcXVpcmUgdGhpcywgYnV0IGF1dG9tYWtlIDEuMTEgZG9lc24ndCByZWNvZ25pemUgaXQKKyttNF9wYXR0ZXJuX2FsbG93KFtBTV9QUk9HX0FSXSkKKytBTV9QUk9HX0FSCisgCisgIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2dsZXcvZ2xld18xLjEyLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIyOGM0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9nbGV3L2dsZXdfMS4xMi4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJUaGUgT3BlbkdMIEV4dGVuc2lvbiBXcmFuZ2xlciBMaWJyYXJ5IChHTEVXKSBpcyBhIGNyb3NzLXBsYXRmb3JtIG9wZW4tc291cmNlIEMvQysrIGV4dGVuc2lvbiBsb2FkaW5nIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2dsZXcuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD02NzU4NiIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLnR4dDttZDU9MmFjMjUxNTU4ZGU2ODVjNmI5NDc4ZDg5YmUzMTQ5YzIiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgdmlydHVhbC9saWJnbCBsaWJnbHUgbGlieGV4dCBsaWJ4aSBsaWJ4bXUiCisKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9nbGV3L2dsZXcvJHtQVn0vZ2xldy0ke1BWfS50Z3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dsZXdfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1nbGV3LnBjLWluc3RhbGwucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAxMjQ2YzdlY2QxMzVkOTliZTAzMWFhNjNmODZkY2ExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmNTgxMDNmNDgyNGI0NDNlN2ZhNGVkM2FmNTkzYjhlZGFjNmYzYTdiZTNiMzA5MTFlZGJjNzM0NGY0OGU0YmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjAuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9oYXJmYnV6ei9oYXJmYnV6el8xLjAuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBiZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2hhcmZidXp6L2hhcmZidXp6XzEuMC4yLmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiVGV4dCBzaGFwaW5nIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJIYXJmQnV6eiBpcyBhbiBPcGVuVHlwZSB0ZXh0IHNoYXBpbmcgZW5naW5lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvSGFyZkJ1enoiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUhhcmZCdXp6IgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWUwMjFkZDZkZGE2ZmYxZTZiMTA0NDAwMmZjNjYyYjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9oYi11Y2RuL0NPUFlJTkc7bWQ1PTk5NGJhMGYxMjk1ZjE1YjRiZGE0OTk5YTViYmVkZGVmIFwKKyIKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL2hhcmZidXp6L3JlbGVhc2UvJHtCUH0udGFyLmJ6MiIKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzRmNjQ0MDQ1ZmU0MmMzOGEyNjQxZmMxZTgyYTgwMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiZWIzY2FmODY1NDAxMGZjZGNhNjFjODEwYTNhNzUzMjIzN2ZjNTY3ZWU0MjcxZGViNjc0YjVlZmJiZTNiNDY2IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgbGliX3BhY2thZ2UKKworREVQRU5EUyA9ICJnbGliLTIuMCBjYWlybyBmcmVldHlwZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZ2xpYiAtLXdpdGgtZnJlZXR5cGUgLS13aXRoLWNhaXJvIC0td2l0aG91dC1ncmFwaGl0ZTIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJpY3UiCitQQUNLQUdFQ09ORklHW2ljdV0gPSAiLS13aXRoLWljdSwtLXdpdGhvdXQtaWN1LGljdSIKKworUEFDS0FHRVMgPSsgIiR7UE59LWljdSAke1BOfS1pY3UtZGJnICR7UE59LWljdS1kZXYiCisKK0ZJTEVTXyR7UE59LWljdSA9ICIke2xpYmRpcn0vbGliaGFyZmJ1enotaWN1LnNvLioiCitGSUxFU18ke1BOfS1pY3UtZGJnID0gIiR7bGliZGlyfS8uZGVidWcvbGliaGFyZmJ1enotaWN1LnNvKiIKK0ZJTEVTXyR7UE59LWljdS1kZXYgPSAiJHtsaWJkaXJ9L2xpYmhhcmZidXp6LWljdS5sYSBcCisgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJoYXJmYnV6ei1pY3Uuc28gXAorICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2hhcmZidXp6LWljdS5wYyBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1jbHV0dGVyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZjI1Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtY2x1dHRlci5iYgpAQCAtMCwwICsxLDEzIEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSB3aXRoIHN1cHBvcnQgZm9yIHRoZSBPcGVuIEdMLWJhc2VkIHRvb2xraXQgQ2x1dHRlciwgXAord2hpY2ggZW5hYmxlcyBkZXZlbG9wbWVudCBvZiByaWNoIGFuZCBhbmltYXRlZCBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgeDExLWJhc2UgeDExLXNhdG8gc3NoLXNlcnZlci1kcm9wYmVhciIKKworTElDRU5TRSA9ICJNSVQiCisKK0lNQUdFX0lOU1RBTEwgPSAiXAorICAgICR7Q09SRV9JTUFHRV9CQVNFX0lOU1RBTEx9IFwKKyAgICBwYWNrYWdlZ3JvdXAtY29yZS1jbHV0dGVyLWNvcmUgXAorICAgICIKKworaW5oZXJpdCBjb3JlLWltYWdlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UtZGlyZWN0ZmIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0MTE5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9pbWFnZXMvY29yZS1pbWFnZS1kaXJlY3RmYi5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkFuIGltYWdlIHRoYXQgdXNlcyBEaXJlY3RGQiBpbnN0ZWFkIG9mIFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitpbmhlcml0IGNvcmUtaW1hZ2UgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJkaXJlY3RmYiIKK0NPTkZMSUNUX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0lNQUdFX0lOU1RBTEwgKz0gIlwKKwkke0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMfSBcCisJcGFja2FnZWdyb3VwLWNvcmUtZnVsbC1jbWRsaW5lIFwKKwlwYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYiBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2Utd2VzdG9uLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmUyNzFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXdlc3Rvbi5iYgpAQCAtMCwwICsxLDExIEBACitTVU1NQVJZID0gIkEgdmVyeSBiYXNpYyBXYXlsYW5kIGltYWdlIHdpdGggYSB0ZXJtaW5hbCIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgc3NoLXNlcnZlci1kcm9wYmVhciBod2NvZGVjcyIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIndheWxhbmQiCisKK0NPUkVfSU1BR0VfQkFTRV9JTlNUQUxMICs9ICJ3ZXN0b24gd2VzdG9uLWluaXQgd2VzdG9uLWV4YW1wbGVzIGd0ayszLWRlbW8gY2x1dHRlci0xLjAtZXhhbXBsZXMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvaW1hZ2VzL2NvcmUtaW1hZ2UteDExLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXgxMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDU1YmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2ltYWdlcy9jb3JlLWltYWdlLXgxMS5iYgpAQCAtMCwwICsxLDkgQEAKK1NVTU1BUlkgPSAiQSB2ZXJ5IGJhc2ljIFgxMSBpbWFnZSB3aXRoIGEgdGVybWluYWwiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJzcGxhc2ggcGFja2FnZS1tYW5hZ2VtZW50IHgxMS1iYXNlIgorCitMSUNFTlNFID0gIk1JVCIKKworaW5oZXJpdCBjb3JlLWltYWdlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMS1zZWxlY3QtcGxhdGZvcm1zLWJhc2VkLW9uLWNvbmZpZ3VyYXRpb24tcmVzdWx0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRjOGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2gKQEAgLTAsMCArMSwxMjggQEAKK0Zyb20gM2E5MzE1MGJjMGFlYzg2YWZkYjdkMDUzMjQ3ZGMyNDQ4OTI1ZTA5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9BbmRyZWFzPTIwTT1DMz1CQ2xsZXI/PSA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KK0RhdGU6IFdlZCwgNiBNYXkgMjAxNSAxMDo0NToyMiArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gc2VsZWN0IHBsYXRmb3JtcyBiYXNlZCBvbiBjb25maWd1cmF0aW9uIHJlc3VsdHMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgWzFdCisKK1sxXSBodHRwczovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5L3B1bGwvNTIKKworU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBNw7xsbGVyIDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjICAgICAgICAgIHwgMTMgKysrKystLS0tLS0tLQorIHNyYy9kaXNwYXRjaF9jb21tb24uYyB8ICA5ICsrKysrKy0tLQorIHNyYy9kaXNwYXRjaF9jb21tb24uaCB8ICA5ICsrKysrLS0tLQorIDMgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGE1MmZjNTguLmJkZDcwZGEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTU4LDYgKzU4LDEwIEBAIEFDX0NIRUNLX0hFQURFUihbS0hSL2tocnBsYXRmb3JtLmhdLAorICMgdWludHB0cl90IHRvIGEgdm9pZCAqIikgYnkgZGVmYXVsdC4gIEtpbGwgdGhhdC4KKyBYT1JHX1RFU1RTRVRfQ0ZMQUcoQ1dBUk5GTEFHUywgWy1Xbm8taW50LWNvbnZlcnNpb25dKQorIAorK1BLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9eWVzXSwgW3gxMT1ub10pCisrCisrQU1fQ09ORElUSU9OQUwoSEFWRV9YMTEsIHRlc3QgeCR4MTEgPSB4eWVzKQorKworIGhhc196bm93PXllcworIAorIGNhc2UgJGhvc3Rfb3MgaW4KK0BAIC04Niw3ICs5MCw3IEBAIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgIDs7CisgICAgICopCisgICAgICAgICBidWlsZF9lZ2w9eWVzCistICAgICAgICBidWlsZF9nbHg9eWVzCisrICAgICAgICBidWlsZF9nbHg9JHgxMQorICAgICAgICAgYnVpbGRfd2dsPW5vCisgICAgICAgICAjIE9uIHBsYXRmb3JtcyB3aXRoIGRsb3Blbiwgd2UgbG9hZCBldmVyeXRoaW5nIGR5bmFtaWNhbGx5IGFuZAorICAgICAgICAgIyBkb24ndCBsaW5rIGFnYWluc3QgYSBzcGVjaWZpYyB3aW5kb3cgc3lzdGVtIG9yIEdMIGltcGxlbWVudGF0aW9uLgorQEAgLTE0NCwxMyArMTQ4LDYgQEAgZXNhYworIAorIEFDX1NVQlNUKFtWSVNJQklMSVRZX0NGTEFHU10pCisgCistUEtHX0NIRUNLX01PRFVMRVMoWDExLCBbeDExXSwgW3gxMT15ZXNdLCBbeDExPW5vXSkKKy1pZiB0ZXN0IHgkeDExID0geG5vIC1hIHgkYnVpbGRfZ2x4ID0geHllczsgdGhlbgorLSAgICBBQ19NU0dfRVJST1IoW2xpYlgxMSBoZWFkZXJzIChsaWJ4MTEtZGV2KSByZXF1aXJlZCB0byBidWlsZCB3aXRoIEdMWCBzdXBwb3J0XSkKKy1maQorLQorLUFNX0NPTkRJVElPTkFMKEhBVkVfWDExLCB0ZXN0IHgkeDExID0geHllcykKKy0KKyBQS0dfQ0hFQ0tfTU9EVUxFUyhHTCwgW2dsXSwgW2dsPXllc10sIFtnbD1ub10pCisgCisgQUNfQ09ORklHX0ZJTEVTKFsKK2RpZmYgLS1naXQgYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmMgYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKK2luZGV4IDRlMzRkNmUuLjJhYjg0ZWQgMTAwNjQ0CistLS0gYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmMKKysrKyBiL3NyYy9kaXNwYXRjaF9jb21tb24uYworQEAgLTYxNSwxMCArNjE1LDEzIEBAIGVwb3h5X2dldF9wcm9jX2FkZHJlc3MoY29uc3QgY2hhciAqbmFtZSkKKyAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyAgICAgcmV0dXJuIGVwb3h5X2dsX2Rsc3ltKG5hbWUpOworICNlbHNlCisrI2lmIFBMQVRGT1JNX0hBU19HTFgKKyAgICAgaWYgKGVwb3h5X2N1cnJlbnRfY29udGV4dF9pc19nbHgoKSkgeworICAgICAgICAgcmV0dXJuIGdsWEdldFByb2NBZGRyZXNzQVJCKChjb25zdCBHTHVieXRlICopbmFtZSk7CistICAgIH0gZWxzZSB7CisrICAgIH0gZWxzZQorKyNlbmRpZiAvKiBQTEFURk9STV9IQVNfR0xYICovCisgI2lmIFBMQVRGT1JNX0hBU19FR0wKKysgICAgeworICAgICAgICAgR0xlbnVtIGVnbF9hcGkgPSBlcG94eV9lZ2xfZ2V0X2N1cnJlbnRfZ2xfY29udGV4dF9hcGkoKTsKKyAKKyAgICAgICAgIHN3aXRjaCAoZWdsX2FwaSkgeworQEAgLTYyOCwxMCArNjMxLDEwIEBAIGVwb3h5X2dldF9wcm9jX2FkZHJlc3MoY29uc3QgY2hhciAqbmFtZSkKKyAgICAgICAgIGNhc2UgRUdMX05PTkU6CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CistI2VuZGlmCisgICAgIH0KKysjZW5kaWYgLyogUExBVEZPUk1fSEFTX0VHTCAqLworICAgICBlcnJ4KDEsICJDb3VsZG4ndCBmaW5kIGN1cnJlbnQgR0xYIG9yIEVHTCBjb250ZXh0LlxuIik7CistI2VuZGlmCisrI2VuZGlmIC8qIF9XSU4zMiB8IF9fQVBQTEVfXyovCisgfQorIAorIHZvaWQKK2RpZmYgLS1naXQgYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmggYi9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKK2luZGV4IDZiODUwM2EuLjgyNjgxZTQgMTAwNjQ0CistLS0gYS9zcmMvZGlzcGF0Y2hfY29tbW9uLmgKKysrKyBiL3NyYy9kaXNwYXRjaF9jb21tb24uaAorQEAgLTIxLDEyICsyMSwxMyBAQAorICAqIElOIFRIRSBTT0ZUV0FSRS4KKyAgKi8KKyAKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAKKyAjaWZkZWYgX1dJTjMyCisgI2RlZmluZSBQTEFURk9STV9IQVNfRUdMIDAKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMAorLSNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAxCisrI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIEJVSUxEX1dHTAorICNkZWZpbmUgRVBPWFlfSU1QT1JURVhQT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorICNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorICNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAwCitAQCAtMzQsMTMgKzM1LDEzIEBACisgI2RlZmluZSBQTEFURk9STV9IQVNfV0dMIDAKKyAjZGVmaW5lIEVQT1hZX0lNUE9SVEVYUE9SVAorICNlbGlmIGRlZmluZWQoQU5EUk9JRCkKKy0jZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgMQorKyNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCBCVUlMRF9FR0wKKyAjZGVmaW5lIFBMQVRGT1JNX0hBU19HTFggMAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZWxzZQorLSNkZWZpbmUgUExBVEZPUk1fSEFTX0VHTCAxCistI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIDEKKysjZGVmaW5lIFBMQVRGT1JNX0hBU19FR0wgQlVJTERfRUdMCisrI2RlZmluZSBQTEFURk9STV9IQVNfR0xYIEJVSUxEX0dMWAorICNkZWZpbmUgUExBVEZPUk1fSEFTX1dHTCAwCisgI2RlZmluZSBFUE9YWV9JTVBPUlRFWFBPUlQKKyAjZW5kaWYKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDItYWRkLWFuLW9wdGlvbi10by1kaXNhYmxlLWdseC1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5LzAwMDItYWRkLWFuLW9wdGlvbi10by1kaXNhYmxlLWdseC1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MmQ2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHkvMDAwMi1hZGQtYW4tb3B0aW9uLXRvLWRpc2FibGUtZ2x4LXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSAyNDg2OGNiZmI5ZGRhNWY2OTI5ZGQyNzdjNDdkMzVkZjAxNmU4NzU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogV2VkLCA2IE1heSAyMDE1IDExOjA1OjQ4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi8yXSBhZGQgYW4gb3B0aW9uIHRvIGRpc2FibGUgZ2x4IHN1cHBvcnQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwordGhpcyBvcHRpb24gd291bGQgaGVscCB1cyBpbiB5b2N0byB0byBnZXQgZGV0ZXJtaW5pc3RpYyBidWlsZCByZXN1bHRzCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFsxXQorCitbMV0gaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS9wdWxsLzUyCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgTcO8bGxlciA8c2Nobml0emVsdG9ueUBnb29nbGVtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDkgKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiZGQ3MGRhLi42YzcxNTNkIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01OCw3ICs1OCwxNCBAQCBBQ19DSEVDS19IRUFERVIoW0tIUi9raHJwbGF0Zm9ybS5oXSwKKyAjIHVpbnRwdHJfdCB0byBhIHZvaWQgKiIpIGJ5IGRlZmF1bHQuICBLaWxsIHRoYXQuCisgWE9SR19URVNUU0VUX0NGTEFHKENXQVJORkxBR1MsIFstV25vLWludC1jb252ZXJzaW9uXSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYMTEsIFt4MTFdLCBbeDExPXllc10sIFt4MTE9bm9dKQorK0FDX0FSR19FTkFCTEUoW2dseF0sCisrICAgICAgICAgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWdseF0sCisrCQkJCVtkaXNhYmxlIGlmIHlvdSBkb24ndCB3YW50IHgxMS9nbHggc3VwcG9ydF0pXSwKKysgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgIFtlbmFibGVfZ2x4PXllc10KKysgICAgICAgICAgICAgKQorKworK1BLR19DSEVDS19NT0RVTEVTKFgxMSwgW3gxMV0sIFt4MTE9JGVuYWJsZV9nbHhdLCBbeDExPW5vXSkKKyAKKyBBTV9DT05ESVRJT05BTChIQVZFX1gxMSwgdGVzdCB4JHgxMSA9IHh5ZXMpCisgCistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmVwb3h5L2xpYmVwb3h5L25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI4ZmVhNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eS9uby1uZWVkLWZvci1weXRob24zLnBhdGNoCkBAIC0wLDAgKzEsMjAgQEAKK1RoZXJlIGlzIG5vIG5lZWQgdG8gdXNlIHB5dGhvbjMgYnkgdGhpcyBwYWNrYWdlICh0aGUgcHl0aG9uIHNjcmlwdHMKK3RoYXQgYXJlIHVzaW5nIGR1cmluZyBjb25maWd1cmF0aW9uIG9ubHkgbmVlZCBweXRob24yLjcrKQorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IEdhcnkgVGhvbWFzIDxnYXJ5QG1sYmFzc29jLmNvbT4KKy0tCitJbmRleDogZ2l0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGdpdC9jb25maWd1cmUuYWMKK0BAIC00MCw3ICs0MCw3IEBAIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjgpCisgWE9SR19ERUZBVUxUX09QVElPTlMKKyAKKy1BQ19DSEVDS19QUk9HUyhbUFlUSE9OXSwgW3B5dGhvbjMgcHl0aG9uMiBweXRob25dKQorK0FDX0NIRUNLX1BST0dTKFtQWVRIT05dLCBbcHl0aG9uMiBweXRob25dKQorIAorICMgSW5pdGlhbGl6ZSBsaWJ0b29sCisgQUNfRElTQUJMRV9TVEFUSUMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJlcG94eS9saWJlcG94eV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTcyOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZXBveHkvbGliZXBveHlfZ2l0LmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGZ1bmN0aW9uIHBvaW50ZXIgbWFuYWdlbWVudCBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9naXRodWIuY29tL2FuaG9sdC9saWJlcG94eS8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NThlZjRjODBkNDAxZTA3YmQ5ZWU4YjZiNThjZjQ2NGIiCisKKworU1JDX1VSSSA9ICIgXAorICAgIGdpdDovL2dpdGh1Yi5jb20vYW5ob2x0L2xpYmVwb3h5LmdpdCBcCisgICAgZmlsZTovLzAwMDEtc2VsZWN0LXBsYXRmb3Jtcy1iYXNlZC1vbi1jb25maWd1cmF0aW9uLXJlc3VsdHMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLWFkZC1hbi1vcHRpb24tdG8tZGlzYWJsZS1nbHgtc3VwcG9ydC5wYXRjaCBcCisgICAgZmlsZTovL25vLW5lZWQtZm9yLXB5dGhvbjMucGF0Y2ggXAorIgorU1JDUkVWPSJlMmMzM2FmNWJmY2ZjOWQxNjhmOWU3NzYxNTZkZDQ3YzMzZjQyOGIzIgorUFYgPSAiMS4zLjEiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitERVBFTkRTID0gInV0aWwtbWFjcm9zIHZpcnR1YWwvZWdsIgorCitQQUNLQUdFQ09ORklHW3gxMV0gPSAiLS1lbmFibGUtZ2x4LCAtLWRpc2FibGUtZ2x4LCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGliZmFrZWtleS9saWJmYWtla2V5X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjBkZGVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYmZha2VrZXkvbGliZmFrZWtleV9naXQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBjb252ZXJ0aW5nIGNoYXJhY3RlcnMgdG8gWCBrZXktcHJlc3NlcyIKK0RFU0NSSVBUSU9OID0gImxpYmZha2VrZXkgaXMgYSBzaW1wbGUgbGlicmFyeSBmb3IgY29udmVydGluZyBVVEYtOCBjaGFyYWN0ZXJzIGludG8gJ2Zha2UnIFggXAora2V5LXByZXNzZXMuIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvbGliZmFrZWtleS5jO2VuZGxpbmU9MzA7bWQ1PTYwMmI1Y2NkNDhmNjQ0MDc1MTA4NjdmMzM3M2I0NDhjIgorCitERVBFTkRTID0gImxpYnh0c3QiCitTRUNUSU9OID0gIngxMS93bSIKKworU1JDUkVWID0gImUzMjdmZjA0OWI4NTAzYWYyZGFkZmZhODQzNzBhMDg2MGI5ZmI2ODIiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgbGlieHRzdCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94L2xpYnBuZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkNTA3ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJtYXRjaGJveC9saWJtYXRjaGJveC9saWJwbmcucGF0Y2gKQEAgLTAsMCArMSw2OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSAxOWMzZDI0MjAzNDc0OGIzYzYwNzY1NjgzZTFmZjRlMmRmOTcwMjA1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTAgRGVjIDIwMTMgMTE6Mzc6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlOiBpbXByb3ZlIGxpYnBuZyBkZXRlY3Rpb24KKworSW5zdGVhZCBvZiBsb29raW5nIGZvciAibGlicG5nMTIiIGV4cGxpY2l0bHkgdGhvdWdoIHBrZy1jb25maWcgYW5kIHRoZW4gZmFsbGluZworYmFjayB0byBsaWJyYXJ5IGh1bnRpbmcsIGp1c3QgdXNlIHBrZy1jb25maWcgdG8gZmluZCAibGlicG5nIiB3aGljaCBpcyBwcm92aWRlZAorYnkgYm90aCBsaWJwbmcxMiBhbmQgbGlicG5nMTYuCisKK1RoaXMgYWxzbyBtYWtlcyB0aGUgbGlicG5nIGRldGVjdGlvbiBkZXRlcm1pbmlzdGljLgorCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjkgKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAyNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggOGEyODA3Ni4uNjVkN2M3OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzQsNyArMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGpwZWcsCisgICBlbmFibGVfanBlZz0kZW5hYmxldmFsLCBlbmFibGVfanBlZz1ubykKKyAKKyBBQ19BUkdfRU5BQkxFKHBuZywKKy0gIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgcG5nIHN1cHBvcnQgW2RlZmF1bHQ9bm9dXSwKKysgIFsgIC0tZGlzYWJsZS1wbmcgICAgICAgICAgIGRpc2FibGUgUE5HIHN1cHBvcnQgW2RlZmF1bHQ9ZW5hYmxlZF1dLAorICAgICAgZW5hYmxlX3BuZz0kZW5hYmxldmFsLCBlbmFibGVfcG5nPXllcyApCisgCisgQUNfQVJHX0VOQUJMRShkb3h5Z2VuLWRvY3MsICAgICAKK0BAIC0xNTYsMjkgKzE1NiwxMCBAQCBmaQorIGRubCAtLS0tLS0gQ2hlY2sgZm9yIFBORyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAKKyBpZiB0ZXN0IHgkZW5hYmxlX3BuZyAhPSB4bm87IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhmb3IgbGlicG5nMTIpCistICBpZiB0ZXN0IHgkUEtHX0NPTkZJRyAhPSB4bm8gJiYgJFBLR19DT05GSUcgLS1leGlzdHMgbGlicG5nMTI7IHRoZW4gCistICAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKy0gICAgICAgIFBOR19MSUJTPWAkUEtHX0NPTkZJRyAtLWxpYnMgbGlicG5nMTJgCistCVBOR19DRkxBR1M9YCRQS0dfQ09ORklHIC0tY2ZsYWdzIGxpYnBuZzEyYAorLSAgICAgICAgQUNfREVGSU5FKFVTRV9QTkcsIFsxXSwgW1VzZSBQbmddKQorLQlTVVBQT1JUU19QTkc9MQorLQlQTkdfUkVRVUlSRUQ9ImxpYnBuZzEyIgorLSAgZWxzZQorLQlBQ19NU0dfUkVTVUxUKG5vKQorLSAgICAgICAgIyBBQ19DSEVDS19IRUFERVJTKHBuZy5oLCBbIGhhdmVfcG5nX2g9InllcyIgXSwgWyBoYXZlX3BuZ19oPSJubyIgXSApCistICAgICAgICBBQ19DSEVDS19MSUIoW3BuZ10sIFtwbmdfY3JlYXRlX3JlYWRfc3RydWN0XSwgW2hhdmVfcG5nPSJ5ZXMiXSwgW2hhdmVfcG5nPSJubyJdKQorLQorLSAgICAgICAgaWYgdGVzdCB4JGhhdmVfcG5nPXh5ZXMgJiYgdGVzdCB4JGhhdmVfcG5nX2g9eHllczsgdGhlbiAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBuZ10pCistCSAgICBTVVBQT1JUU19QTkc9MQorLSAgICAgICAgICAgIFBOR19MSUJTPSItbHBuZyAtbHoiCistICAgICAgICAgICAgTUJfRVhUUkFfTElCUz0iJE1CX0VYVFJBX0xJQlMgJFBOR19MSUJTIgorLSAgICAgICAgZWxzZQorLQkgICAgQUNfTVNHX1dBUk4oWyoqKiBDYW5ub3QgZmluZCBQTkcsIGRpc2FibGluZyBzdXBwb3J0XSkKKy0gICAgICAgICAgICBlbmFibGVfcG5nPW5vCistCWZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoUE5HLCBsaWJwbmcpCisrICBBQ19ERUZJTkUoVVNFX1BORywgWzFdLCBbVXNlIFBOR10pCisrICBTVVBQT1JUU19QTkc9MQorKyAgUE5HX1JFUVVJUkVEPSJsaWJwbmciCisgZmkKKyAKKyAKKy0tIAorMS44LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlibWF0Y2hib3gvbGlibWF0Y2hib3hfMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmViNjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYm1hdGNoYm94L2xpYm1hdGNoYm94XzEuMTEuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB3aW5kb3cgbWFuYWdlciBjb3JlIGxpYnJhcnkiCitTRUNUSU9OID0gIngxMS9saWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5jb20vIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJtYi9tYmV4cC5jO2VuZGxpbmU9MjA7bWQ1PTI4YzBhZWYzYjIzZTMwODQ2NGY1ZGFlNmExMWIwZDJmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm1iL21iZG90ZGVza3RvcC5jO2VuZGxpbmU9MjE7bWQ1PTVhMjg3MTU2YjMyMDdlODUxYzFkNjhkMDljNDM5YjUxIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhleHQiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy55b2N0b3Byb2plY3Qub3JnL3JlbGVhc2VzL21hdGNoYm94LyR7QlBOfS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJwbmcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYzZjYzgwN2Y1NWEzZTdjNzUyZDgwMTMxNzY4NzVkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTRjYWI1MmUzMDRhMzUxMmM4ZGY0YmU1OWQ2OTBjZjM5MjFiYmI2OGEyOGVkZTdmZTI2YjkzNTM0MjE3YjUzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJqcGVnIHBuZyB4ZnQgeHNldHRpbmdzIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWciCitQQUNLQUdFQ09ORklHW3BhbmdvXSA9ICItLWVuYWJsZS1wYW5nbywtLWRpc2FibGUtcGFuZ28scGFuZ28iCitQQUNLQUdFQ09ORklHW3BuZ10gPSAiLS1lbmFibGUtcG5nLC0tZGlzYWJsZS1wbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1t4ZnRdID0gIi0tZW5hYmxlLXhmdCwtLWRpc2FibGUteGZ0LGxpYnhmdCIKK1BBQ0tBR0VDT05GSUdbeHNldHRpbmdzXSA9ICItLWVuYWJsZS14c2V0dGluZ3MsLS1kaXNhYmxlLXhzZXR0aW5ncyxsaWJ4c2V0dGluZ3MtY2xpZW50IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2NvbmZpZ3VyZV90d2Vhay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9jb25maWd1cmVfdHdlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y5NzYzOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJzZGwvbGlic2RsLTEuMi4xNS9jb25maWd1cmVfdHdlYWsucGF0Y2gKQEAgLTAsMCArMSwxMTExIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBTREwtMS4yLjE1L2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIFNETC0xLjIuMTUub3JpZy9jb25maWd1cmUuaW4KKysrKyBTREwtMS4yLjE1L2NvbmZpZ3VyZS5pbgorQEAgLTQ4LDkgKzQ4LDkgQEAgQUNfQ09ORklHX0FVWF9ESVIoW2J1aWxkLXNjcmlwdHNdKQorIGRubCBBQ19DQU5PTklDQUxfSE9TVAorIEFDX0NfQklHRU5ESUFOCisgaWYgdGVzdCB4JGFjX2N2X2NfYmlnZW5kaWFuID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgNDMyMSkKKysgICAgQUNfREVGSU5FKFNETF9CWVRFT1JERVIsIDQzMjEsICJCeXRlIE9yZGVyIikKKyBlbHNlCistICAgIEFDX0RFRklORShTRExfQllURU9SREVSLCAxMjM0KQorKyAgICBBQ19ERUZJTkUoU0RMX0JZVEVPUkRFUiwgMTIzNCwgIkJ5dGUgT3JkZXIiKQorIGZpCisgCisgZG5sIENoZWNrIGZvciB0b29scworQEAgLTEzNCw3ICsxMzQsNyBAQCBBQ19BUkdfRU5BQkxFKGxpYmMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWxpYmNdLCBbVXNlIHRoZSBzeXN0ZW0gQyBsaWJyYXJ5IFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfbGliYz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoSEFWRV9MSUJDKQorKyAgICBBQ19ERUZJTkUoSEFWRV9MSUJDLDEsIiIpCisgCisgICAgIGRubCBDaGVjayBmb3IgQyBsaWJyYXJ5IGhlYWRlcnMKKyAgICAgQUNfSEVBREVSX1NUREMKK0BAIC0xNDUsNyArMTQ1LDcgQEAgaWYgdGVzdCB4JGVuYWJsZV9saWJjID0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB4eWVzIC1vIHgkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0geHllczsgdGhlbgorICAgICAgICAgQUNfQ0hFQ0tfVFlQRShpbnQ2NF90KQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3R5cGVfaW50NjRfdCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUsMSwiIikKKyAgICAgICAgIGZpCisgICAgICAgICBoYXZlX2ludHR5cGVzPXllcworICAgICBmaQorQEAgLTE2MSwxMSArMTYxLDExIEBAIGlmIHRlc3QgeCRlbmFibGVfbGliYyA9IHh5ZXM7IHRoZW4KKyAKKyAgICAgQUNfRlVOQ19NRU1DTVAKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoSEFWRV9NRU1DTVApCisrICAgICAgICBBQ19ERUZJTkUoSEFWRV9NRU1DTVAsMSwiIikKKyAgICAgZmkKKyAgICAgQUNfRlVOQ19TVFJUT0QKKyAgICAgaWYgdGVzdCB4JGFjX2N2X2Z1bmNfc3RydG9kID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVE9EKQorKyAgICAgICAgQUNfREVGSU5FKEhBVkVfU1RSVE9ELDEsIiIpCisgICAgIGZpCisgICAgIEFDX0NIRUNLX0ZVTkMobXByb3RlY3QsCisgICAgICAgICBBQ19UUllfQ09NUElMRShbCitAQCAtMTkxLDQwICsxOTEsNDAgQEAgaWYgdGVzdCB4JGhhdmVfaW50dHlwZXMgIT0geHllczsgdGhlbgorICAgICBBQ19DSEVDS19TSVpFT0YobG9uZywgNCkKKyAgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZywgOCkKKyAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9jaGFyID0geDE7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQ4X3QsIHNpZ25lZCBjaGFyKQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQ4X3QsIHVuc2lnbmVkIGNoYXIpCisrICAgICAgICBBQ19ERUZJTkUoaW50OF90LCBzaWduZWQgY2hhciwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50OF90LCB1bnNpZ25lZCBjaGFyLCIiKQorICAgICBmaQorICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX3Nob3J0ID0geDI7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQxNl90LCBzaWduZWQgc2hvcnQpCistICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIHNob3J0KQorKyAgICAgICAgQUNfREVGSU5FKGludDE2X3QsIHNpZ25lZCBzaG9ydCwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50MTZfdCwgdW5zaWduZWQgc2hvcnQsIiIpCisgICAgIGVsc2UKKyAgICAgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfaW50ID0geDI7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIGludCkKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIGludCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoaW50MTZfdCwgc2lnbmVkIGludCwiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUodWludDE2X3QsIHVuc2lnbmVkIGludCwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfaW50ID0geDQ7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgaW50KQorLSAgICAgICAgQUNfREVGSU5FKHVpbnQzMl90LCB1bnNpZ25lZCBpbnQpCisrICAgICAgICBBQ19ERUZJTkUoaW50MzJfdCwgc2lnbmVkIGludCwiIikKKysgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgaW50LCIiKQorICAgICBlbHNlCisgICAgICAgICBpZiB0ZXN0IHgkYWNfY3Zfc2l6ZW9mX2xvbmcgPSB4NDsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQzMl90LCBzaWduZWQgbG9uZykKKy0gICAgICAgICAgICBBQ19ERUZJTkUodWludDMyX3QsIHVuc2lnbmVkIGxvbmcpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDMyX3QsIHNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgICAgIEFDX0RFRklORSh1aW50MzJfdCwgdW5zaWduZWQgbG9uZywiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgICAgIGlmIHRlc3QgeCRhY19jdl9zaXplb2ZfbG9uZyA9IHg4OyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoaW50NjRfdCwgc2lnbmVkIGxvbmcpCistICAgICAgICBBQ19ERUZJTkUodWludDY0X3QsIHVuc2lnbmVkIGxvbmcpCistICAgICAgICBBQ19ERUZJTkUoU0RMX0hBU182NEJJVF9UWVBFKQorKyAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwiIikKKyAgICAgZWxzZQorICAgICAgICAgaWYgdGVzdCB4JGFjX2N2X3NpemVvZl9sb25nX2xvbmcgPSB4ODsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShpbnQ2NF90LCBzaWduZWQgbG9uZyBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORSh1aW50NjRfdCwgdW5zaWduZWQgbG9uZyBsb25nKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSEFTXzY0QklUX1RZUEUpCisrICAgICAgICAgICAgQUNfREVGSU5FKGludDY0X3QsIHNpZ25lZCBsb25nIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKHVpbnQ2NF90LCB1bnNpZ25lZCBsb25nIGxvbmcsIiIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IQVNfNjRCSVRfVFlQRSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCistICAgIEFDX0RFRklORShzaXplX3QsIHVuc2lnbmVkIGludCkKKy0gICAgQUNfREVGSU5FKHVpbnRwdHJfdCwgdW5zaWduZWQgbG9uZykKKysgICAgQUNfREVGSU5FKHNpemVfdCwgdW5zaWduZWQgaW50LCIiKQorKyAgICBBQ19ERUZJTkUodWludHB0cl90LCB1bnNpZ25lZCBsb25nLCIiKQorIGZpCisgCisgIyBTdGFuZGFyZCBDIHNvdXJjZXMKK0BAIC0yNDUsMjUgKzI0NSwyNSBAQCBBQ19BUkdfRU5BQkxFKGF1ZGlvLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdWRpb10sIFtFbmFibGUgdGhlIGF1ZGlvIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2F1ZGlvPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9BVURJT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9BVURJT19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRSh2aWRlbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW9dLCBbRW5hYmxlIHRoZSB2aWRlbyBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfVklERU9fRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVklERU9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoZXZlbnRzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ldmVudHNdLCBbRW5hYmxlIHRoZSBldmVudHMgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfZXZlbnRzPXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2V2ZW50cyAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfRVZFTlRTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0VWRU5UU19ESVNBQkxFRCwxLCIiKQorIGZpCisgQUNfQVJHX0VOQUJMRShqb3lzdGljaywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtam95c3RpY2tdLCBbRW5hYmxlIHRoZSBqb3lzdGljayBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV9qb3lzdGljaz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRElTQUJMRUQsMSwiIikKKyBlbHNlCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrLyouYyIKKyBmaQorQEAgLTI3MSw0MyArMjcxLDQzIEBAIEFDX0FSR19FTkFCTEUoY2Ryb20sCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNkcm9tXSwgW0VuYWJsZSB0aGUgY2Ryb20gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfY2Ryb209eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKHRocmVhZHMsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXRocmVhZHNdLCBbRW5hYmxlIHRoZSB0aHJlYWRpbmcgc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfdGhyZWFkcz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9USFJFQURTX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUodGltZXJzLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS10aW1lcnNdLCBbRW5hYmxlIHRoZSB0aW1lciBzdWJzeXN0ZW0gW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAsIGVuYWJsZV90aW1lcnM9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9USU1FUlNfRElTQUJMRUQpCisrICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGZpbGUsCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZpbGVdLCBbRW5hYmxlIHRoZSBmaWxlIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2ZpbGU9eWVzKQorIGlmIHRlc3QgeCRlbmFibGVfZmlsZSAhPSB4eWVzOyB0aGVuCistICAgIEFDX0RFRklORShTRExfRklMRV9ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9GSUxFX0RJU0FCTEVELDEsIiIpCisgZmkKKyBBQ19BUkdfRU5BQkxFKGxvYWRzbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtbG9hZHNvXSwgW0VuYWJsZSB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIHN1YnN5c3RlbSBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2xvYWRzbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gIT0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCkKKysgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoY3B1aW5mbywKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtY3B1aW5mb10sIFtFbmFibGUgdGhlIGNwdWluZm8gc3Vic3lzdGVtIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgLCBlbmFibGVfY3B1aW5mbz15ZXMpCisgaWYgdGVzdCB4JGVuYWJsZV9jcHVpbmZvICE9IHh5ZXM7IHRoZW4KKy0gICAgQUNfREVGSU5FKFNETF9DUFVJTkZPX0RJU0FCTEVEKQorKyAgICBBQ19ERUZJTkUoU0RMX0NQVUlORk9fRElTQUJMRUQsMSwiIikKKyBmaQorIEFDX0FSR19FTkFCTEUoYXNzZW1ibHksCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWFzc2VtYmx5XSwgW0VuYWJsZSBhc3NlbWJseSByb3V0aW5lcyBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICwgZW5hYmxlX2Fzc2VtYmx5PXllcykKKyBpZiB0ZXN0IHgkZW5hYmxlX2Fzc2VtYmx5ID0geHllczsgdGhlbgorLSAgICBBQ19ERUZJTkUoU0RMX0FTU0VNQkxZX1JPVVRJTkVTKQorKyAgICBBQ19ERUZJTkUoU0RMX0FTU0VNQkxZX1JPVVRJTkVTLDEsIiIpCisgZmkKKyAKKyBkbmwgU2VlIGlmIHRoZSBPU1MgYXVkaW8gaW50ZXJmYWNlIGlzIHN1cHBvcnRlZAorQEAgLTMzNSwxMiArMzM1LDEyIEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vc3NdLCBbc3VwcG9ydAorICAgICAgICAgICAgICAgaW50IGFyZyA9IFNORENUTF9EU1BfU0VURlJBR01FTlQ7CisgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgaGF2ZV9vc3M9eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTX1NPVU5EQ0FSRF9IKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TU19TT1VORENBUkRfSCwxLCIiKQorICAgICAgICAgICAgIF0pCisgICAgICAgICBmaQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9vc3MpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9vc3MgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfT1NTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX09TUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2RzcC8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZG1hLyouYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworQEAgLTQwNyw3ICs0MDcsNyBAQCBDaGVja0RNRURJQSgpCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX2RtZWRpYSkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfZG1lZGlhID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RNRURJQSkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ETUVESUEsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9kbWVkaWEvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sYXVkaW8iCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKK0BAIC00NDQsNyArNDQ0LDcgQEAgQ2hlY2tNTUUoKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkaGF2ZV9tbWUpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21tZSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NTUVBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9NTUVBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21tZS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRNTUVfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRNTUVfTElCUyIKK0BAIC00NjcsNyArNDY3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVzZC1zaGFyZWRdLCBbZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfZXNkX3NoYXJlZD15ZXMpCisgICAgICAgICAgICAgZXNkX2xpYj1bYGZpbmRfbGliICJsaWJlc2Quc28uKiIgIiRFU0RfTElCUyIgfCBzZWQgJ3MvLipcL1woLipcKS9cMS87IHEnYF0KKyAKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9FU0QpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRVNELDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZXNkLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJEVTRF9DRkxBR1MiCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvICE9IHh5ZXMgJiYgXAorQEAgLTQ3Nyw3ICs0NzcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXNkLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvID0geHllcyAmJiBcCisgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV9lc2Rfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkZXNkX2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliZXNkIC0+ICRlc2RfbGliIgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9FU0RfRFlOQU1JQywgIiRlc2RfbGliIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9BVURJT19EUklWRVJfRVNEX0RZTkFNSUMsICIkZXNkX2xpYiIsICIiKQorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJEVTRF9MSUJTIgorICAgICAgICAgICAgIGZpCitAQCAtNTY0LDcgKzU2NCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcnRzLXNoYXJlZF0sIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9hcnRzX3NoYXJlZD15ZXMpCisgICAgICAgICAgICAgICAgIGFydHNfbGliPVtgZmluZF9saWIgImxpYmFydHNjLnNvLioiICIkQVJUU19MSUJTIiB8IHNlZCAncy8uKlwvXCguKlwpL1wxLzsgcSdgXQorIAorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9BUlRTKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9BUlRTLCwgIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2FydHMvKi5jIgorICAgICAgICAgICAgICAgICBFWFRSQV9DRkxBR1M9IiRFWFRSQV9DRkxBR1MgJEFSVFNfQ0ZMQUdTIgorICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9sb2Fkc28gIT0geHllcyAmJiBcCitAQCAtNTc0LDcgKzU3NCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hcnRzLXNoYXJlZF0sIFsKKyAgICAgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbG9hZHNvID0geHllcyAmJiBcCisgICAgICAgICAgICAgICAgICAgIHRlc3QgeCRlbmFibGVfYXJ0c19zaGFyZWQgPSB4eWVzICYmIHRlc3QgeCRhcnRzX2xpYiAhPSB4OyB0aGVuCisgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYmFydHNjIC0+ICRhcnRzX2xpYiIKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfQVVESU9fRFJJVkVSX0FSVFNfRFlOQU1JQywgIiRhcnRzX2xpYiIpCisrICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX0FVRElPX0RSSVZFUl9BUlRTX0RZTkFNSUMsICIkYXJ0c19saWIiLDEsIiIpCisgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRBUlRTX0xJQlMiCisgICAgICAgICAgICAgICAgIGZpCitAQCAtNjM0LDcgKzYzNCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uYXMtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJE5BU19MSUJTIgorICAgICAgICAgICAgIGZpCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTkFTKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX05BUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL25hcy8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICROQVNfQ0ZMQUdTIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNjQ5LDcgKzY0OSw3IEBAIENoZWNrRGlza0F1ZGlvKCkKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlza2F1ZGlvXSwgW3N1cHBvcnQgdGhlIGRpc2sgd3JpdGVyIGF1ZGlvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9kaXNrYXVkaW89eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllcyAtYSB4JGVuYWJsZV9kaXNrYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9ESVNLKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRElTSywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vZGlzay8qLmMiCisgICAgIGZpCisgfQorQEAgLTY2MSw3ICs2NjEsNyBAQCBDaGVja0R1bW15QXVkaW8oKQorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kdW1teWF1ZGlvXSwgW3N1cHBvcnQgdGhlIGR1bW15IGF1ZGlvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV9kdW1teWF1ZGlvPXllcykKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXMgLWEgeCRlbmFibGVfZHVtbXlhdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RVTU1ZKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFVNTVksMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2R1bW15LyouYyIKKyAgICAgZmkKKyB9CitAQCAtNjc3LDcgKzY3Nyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1taW50YXVkaW9dLCBbc3UKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihtaW50L2ZhbGNvbi5oLCBoYXZlX21pbnRfZmFsY29uX2hkcj15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9taW50X2ZhbGNvbl9oZHIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgbWludGF1ZGlvPXllcworLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX01JTlQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21pbnQvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21pbnQvKi5TIgorICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCitAQCAtNzQ2LDcgKzc0Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uYXNtXSwgW3VzZSBuYXMKKyAgICAgICAgIENvbXBpbGVOQVNNIHVucXVvdGVkLXNlY3Rpb25zIHx8IE5BU009IiIKKyAKKyAgICAgICAgIGlmIHRlc3QgIngkTkFTTSIgIT0geCAtYSAieCROQVNNIiAhPSB4JyIkTkFTTSInOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IRVJNRVNfQkxJVFRFUlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9IRVJNRVNfQkxJVFRFUlMsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9oZXJtZXMvKi5hc20iCisgICAgICAgICAgICAgTkFTTUZMQUdTPSIkTkFTTUZMQUdTIC1JICRzcmNkaXIvc3JjL2hlcm1lcy8iCisgCitAQCAtODQwLDkgKzg0MCw5IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hbHRpdmVjXSwgW3VzZQorICAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9nY2NfYWx0aXZlYyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FMVElWRUNfQkxJVFRFUlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BTFRJVkVDX0JMSVRURVJTLDEsIiIpCisgICAgICAgICAgICAgaWYgdGVzdCB4JGhhdmVfYWx0aXZlY19oX2hkciA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FMVElWRUNfSCkKKysgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0FMVElWRUNfSCwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRhbHRpdmVjX0NGTEFHUyIKKyAgICAgICAgIGZpCitAQCAtOTIwLDcgKzkyMCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pcG9kXSwgW2NvbmZpZ3UKKyAKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9pcG9kID0geHllczsgdGhlbgorICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTIC1ESVBPRCIKKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0lQT0QpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9JUE9ELDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9pcG9kLyouYyIKKyAgICAgZmkKKyB9CitAQCAtOTU0LDcgKzk1NCw3IEBAIENoZWNrTkFOT1goKQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAtREVOQUJMRV9OQU5PWF9ESVJFQ1RfRkIiCisgICAgICAgICBmaQorIAorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfTkFOT1gpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9OQU5PWCwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbmFub3gvKi5jIgorICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxuYW5vLVgiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTEwMjAsNyArMTAyMCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS14MTEtc2hhcmVkXSwgW2QKKyAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFhfQ0ZMQUdTIgorICAgICAgICAgICAgIExERkxBR1M9IiRMREZMQUdTICRYX0xJQlMiCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3gxMS8qLmMiCisgICAgICAgICAgICAgRVhUUkFfQ0ZMQUdTPSIkRVhUUkFfQ0ZMQUdTICRYX0NGTEFHUyIKKyAKK0BAIC0xMDQyLDggKzEwNDIsOCBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUteDExLXNoYXJlZF0sIFtkCisgICAgICAgICAgICAgICAgdGVzdCB4JGVuYWJsZV94MTFfc2hhcmVkID0geHllcyAmJiB0ZXN0IHgkeDExX2xpYiAhPSB4ICYmIHRlc3QgeCR4MTFleHRfbGliICE9IHg7IHRoZW4KKyAgICAgICAgICAgICAgICAgZWNobyAiLS0gZHluYW1pYyBsaWJYMTEgLT4gJHgxMV9saWIiCisgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWDExZXh0IC0+ICR4MTFleHRfbGliIgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQywgIiR4MTFfbGliIikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUNfWEVYVCwgIiR4MTFleHRfbGliIikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNETF9WSURFT19EUklWRVJfWDExX0RZTkFNSUMsICIkeDExX2xpYiIsIiIpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hFWFQsICIkeDExZXh0X2xpYiIsIiIpCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBlbmFibGVfeDExX3NoYXJlZD1ubworICAgICAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkWF9MSUJTIC1sWDExIC1sWGV4dCIKK0BAIC0xMDYwLDIwICsxMDYwLDIwIEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZ2FdLCBbYWxsb3cgdXMKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZGdhXSwgW3VzZSBER0EgMi4wIHZpZGVvIGRyaXZlciBbW2RlZmF1bHQ9eWVzXV1dKSwKKyAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb19kZ2E9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfZGdhID0geHllcyAtYSB4JGVuYWJsZV92aWRlb19kZ2EgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RHQSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfREdBLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2RnYS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS1kZ2Ftb3VzZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLWRnYW1vdXNlXSwgW3VzZSBYMTEgREdBIGZvciBtb3VzZSBldmVudHMgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfZGdhbW91c2U9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfZGdhID0geHllcyAtYSB4JGVuYWJsZV92aWRlb194MTFfZGdhbW91c2UgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9ER0FNT1VTRSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX0RHQU1PVVNFLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS12bSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXZtXSwgW3VzZSBYMTEgVk0gZXh0ZW5zaW9uIGZvciBmdWxsc2NyZWVuIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9feDExX3ZtPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV92bSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1ZJRE1PREUpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9WSURNT0RFLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL1hleHQvWHhmODZ2bS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19BUkdfRU5BQkxFKHZpZGVvLXgxMS14diwKK0BAIC0xMDg3LDE0ICsxMDg3LDE0IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHZdLAorIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteGluZXJhbWFdLCBbZW5hYmxlIFgxMSBYaW5lcmFtYSBzdXBwb3J0IFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfeGluZXJhbWE9eWVzKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW9feDExX3hpbmVyYW1hID0geHllczsgdGhlbgorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YMTFfWElORVJBTUEpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YSU5FUkFNQSwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9YZXh0L1hpbmVyYW1hLyouYyIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX0FSR19FTkFCTEUodmlkZW8teDExLXhtZSwKKyBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhtZV0sIFtlbmFibGUgWGkgR3JhcGhpY3MgWE1FIGZvciBmdWxsc2NyZWVuIFtbZGVmYXVsdD15ZXNdXV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGVuYWJsZV92aWRlb194MTFfeG1lPXllcykKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX3gxMV94bWUgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YTUUpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1gxMV9YTUUsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vWGV4dC9YTUUvKi5jIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQUNfQVJHX0VOQUJMRSh2aWRlby14MTEteHJhbmRyLAorQEAgLTExMTEsOCArMTExMSw4IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby14MTEteHJhbmQKKyAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfeDExX3NoYXJlZCA9IHh5ZXMgJiYgdGVzdCB4JHhyYW5kcl9saWIgIT0geCA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItLSBkeW5hbWljIGxpYlhyZW5kZXIgLT4gJHhyZW5kZXJfbGliIgorICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIi0tIGR5bmFtaWMgbGliWHJhbmRyIC0+ICR4cmFuZHJfbGliIgorLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSRU5ERVIsICIkeHJlbmRlcl9saWIiKQorLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORV9VTlFVT1RFRChTRExfVklERU9fRFJJVkVSX1gxMV9EWU5BTUlDX1hSQU5EUiwgIiR4cmFuZHJfbGliIikKKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkVOREVSLCAiJHhyZW5kZXJfbGliIiwiIikKKysgICAgICAgICAgICAgICAgICAgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoU0RMX1ZJREVPX0RSSVZFUl9YMTFfRFlOQU1JQ19YUkFORFIsICIkeHJhbmRyX2xpYiIsIiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGVseV9lbmFibGVfdmlkZW9feDExX3hyYW5kcj15ZXMKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBBQ19DSEVDS19MSUIoWHJlbmRlciwgWFJlbmRlclF1ZXJ5RXh0ZW5zaW9uLCBoYXZlX3hyZW5kZXJfbGliPXllcykKK0BAIC0xMTI1LDcgKzExMjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8teDExLXhyYW5kCisgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBpZiB0ZXN0IHgkZGVmaW5pdGVseV9lbmFibGVfdmlkZW9feDExX3hyYW5kciA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hSQU5EUikKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWDExX1hSQU5EUiwxLCIiKQorICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTExNTIsNyArMTE1Miw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1waG90b25dLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3Bob3RvbikKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19waG90b24gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUEhPVE9OKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BIT1RPTiwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Bob3Rvbi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxwaCIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTExNjYsNyArMTE2Niw3IEBAIGRubCBTZXQgdXAgdGhlIEJXaW5kb3cgdmlkZW8gZHJpdmVyIGlmIGUKKyBDaGVja0JXSU5ET1coKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0JXSU5ET1cpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9CV0lORE9XLDEsIiIpCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9id2luZG93LyouY2MiCisgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICBmaQorQEAgLTExODksNyArMTE4OSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1jYXJib25dLAorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfY2FyYm9uKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfY2FyYm9uID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1RPT0xCT1gpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfVE9PTEJPWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL21hY2NvbW1vbi8qLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vbWFjcm9tLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTEyMTgsNyArMTIxOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1jb2NvYV0sIFsKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhdmVfY29jb2EpCisgICAgICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2NvY29hID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1FVQVJUWikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVUFSVFosMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9xdWFydHovKi5tIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEyNDUsNyArMTI0NSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1mYmNvbl0sIFsKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2ZiY29uKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2ZiY29uID0geHllczsgdGhlbgorICAgICAgICAgICAgIEFDX0NIRUNLX0ZVTkNTKGdldHBhZ2VzaXplKQorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0ZCQ09OKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0ZCQ09OLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZmJjb24vKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTEyOTYsNyArMTI5Niw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1kaXJlY3RmYl0KKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX2RpcmVjdGZiKQorIAorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2RpcmVjdGZiID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RJUkVDVEZCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0RJUkVDVEZCLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZGlyZWN0ZmIvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkRElSRUNURkJfQ0ZMQUdTIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTICRESVJFQ1RGQl9MSUJTIgorQEAgLTEzMjMsNyArMTMyMyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1wczJnc10sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19wczJncykKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19wczJncyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QUzJHUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9QUzJHUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3BzMmdzLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xMzc2LDcgKzEzNzYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZ2dpXSwgW3VzCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fZ2dpKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX2dnaSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9HR0kpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0dJLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZ2dpLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbGdnaSAtbGdpaSAtbGdnIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQwNiw3ICsxNDA2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXN2Z2FdLCBbdQorICAgICAgICAgXSkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHZpZGVvX3N2Z2EpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fc3ZnYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9TVkdBTElCKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1NWR0FMSUIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9zdmdhLyouYyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAtbHZnYSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE0MzgsNyArMTQzOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby12Z2xdLCBbdXMKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb192Z2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fdmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1ZHTCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9WR0wsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby92Z2wvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdmdsIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTQ2Niw3ICsxNDY2LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXdzY29uc10sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fd3Njb25zKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3dzY29ucyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XU0NPTlMpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfV1NDT05TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vd3Njb25zLyouYyIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworICAgICAgICAgZmkKK0BAIC0xNDkxLDcgKzE0OTEsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tYWFsaWJdLCBbCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fYWFsaWIpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fYWFsaWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQUFMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfQUFMSUIsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9hYWxpYi8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhYSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE1NTMsNyArMTU1Myw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12aWRlby1xdG9waWFdLAorICAgICAgICAgQ1hYRkxBR1M9IiRPTERfQ1hYIgorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcXRvcGlhKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX3F0b3BpYSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9RVE9QSUEpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUVRPUElBLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vcXRvcGlhLyouY2MiCisgICAgICAgICAgICAgU0RMTUFJTl9TT1VSQ0VTPSIkc3JjZGlyL3NyYy9tYWluL3F0b3BpYS8qLmNjIgorICAgICAgICAgICAgIFNETE1BSU5fTERGTEFHUz0iLXN0YXRpYyIKK0BAIC0xNTgzLDcgKzE1ODMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tcGljb2d1aV0sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fcGljb2d1aSkKKyAgICAgICAgIGlmIHRlc3QgeCR2aWRlb19waWNvZ3VpID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1BJQ09HVUkpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfUElDT0dVSSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3BpY29ndWkvKi5jIgorICAgICAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgLWxwZ3VpIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCitAQCAtMTYwNyw3ICsxNjA3LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLXhiaW9zXSwgWworICAgICB2aWRlb194Ymlvcz1ubworICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllcyAtYSB4JGVuYWJsZV92aWRlb194YmlvcyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgIHZpZGVvX3hiaW9zPXllcworLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfWEJJT1MpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9YQklPUywxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8veGJpb3MvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xNjI1LDcgKzE2MjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtdmlkZW8tZ2VtXSwgW3VzCisgICAgICAgICBBQ19DSEVDS19MSUIoZ2VtLCBhcHBsX2luaXQsIGhhdmVfZ2VtX2xpYj15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9nZW1faGRyID0geHllcyAtYSB4JGhhdmVfZ2VtX2xpYiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICB2aWRlb19nZW09eWVzCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfR0VNKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX0dFTSwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL2dlbS8qLmMiCisgICAgICAgICAgICAgU0RMX0xJQlM9IiRTRExfTElCUyAtbGdlbSIKKyAgICAgICAgICAgICBoYXZlX3ZpZGVvPXllcworQEAgLTE2NDAsNyArMTY0MCw3IEBAIENoZWNrRHVtbXlWaWRlbygpCisgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZpZGVvLWR1bW15XSwgW3VzZSBkdW1teSB2aWRlbyBkcml2ZXIgW1tkZWZhdWx0PXllc11dXSksCisgICAgICAgICAgICAgICAgICAgLCBlbmFibGVfdmlkZW9fZHVtbXk9eWVzKQorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX2R1bW15ID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRFVNTVkpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9EVU1NWSwxLCIiKQorICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdmlkZW8vZHVtbXkvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgZmkKK0BAIC0xNjY3LDggKzE2NjcsOCBAQCBDaGVja09wZW5HTFgxMSgpCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdmlkZW9fb3BlbmdsKQorICAgICAgICAgaWYgdGVzdCB4JHZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9HTFgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9HTFgsMSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgfQorQEAgLTE2ODcsNyArMTY4Nyw3IEBAIENoZWNrT3BlbkdMUU5YKCkKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCR2aWRlb19vcGVuZ2wpCisgICAgICAgICBpZiB0ZXN0IHgkdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMLDEsIiIpCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxHTCIKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTY5Nyw4ICsxNjk3LDggQEAgZG5sIENoZWNrIGZvciBXaW4zMiBPcGVuR0wKKyBDaGVja1dJTjMyR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9XR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfV0dMLDEsIiIpCisgICAgIGZpCisgfQorIAorQEAgLTE3MDYsNyArMTcwNiw3IEBAIGRubCBDaGVjayBmb3IgQmVPUyBPcGVuR0wKKyBDaGVja0JlR0woKQorIHsKKyAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRlbmFibGVfdmlkZW9fb3BlbmdsID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxHTCIKKyAgICAgZmkKKyB9CitAQCAtMTcxNSw3ICsxNzE1LDcgQEAgZG5sIENoZWNrIGZvciBNYWNPUyBPcGVuR0wKKyBDaGVja01hY0dMKCkKKyB7CisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzIC1hIHgkZW5hYmxlX3ZpZGVvX29wZW5nbCA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wsMSwiIikKKyAgICAgICAgIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgICAgICotKi1kYXJ3aW4qKQorICAgICAgICAgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvX2NvY29hID0geHllczsgdGhlbgorQEAgLTE3NDcsOCArMTc0Nyw4IEBAIENoZWNrQXRhcmlPU01lc2EoKQorICAgICAgICAgICAgIE9TTUVTQV9DRkxBR1M9YCRPU01FU0FfQ09ORklHIC0tY2ZsYWdzYAorICAgICAgICAgICAgIE9TTUVTQV9MSUJTPWAkT1NNRVNBX0NPTkZJRyAtLWxpYnNgCisgICAgICAgICBmaQorLSAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0wpCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTF9PU01FU0EpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX09QRU5HTCwxLCIiKQorKyAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBLDEsIiIpCisgICAgICAgICBTRExfQ0ZMQUdTPSIkU0RMX0NGTEFHUyAkT1NNRVNBX0NGTEFHUyIKKyAgICAgICAgIFNETF9MSUJTPSIkU0RMX0xJQlMgJE9TTUVTQV9MSUJTIgorIAorQEAgLTE3NTgsNyArMTc1OCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vc21lc2Etc2hhcmVkXSwKKyAgICAgICAgIGlmIHRlc3QgIngkZW5hYmxlX29zbWVzYV9zaGFyZWQiID0gInh5ZXMiIC1hICJ4JGVuYWJsZV9hdGFyaV9sZGciID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICAgIyBEeW5hbWljIGxpbmtpbmcKKyAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGhhdmVfb3NtZXNhX2hkciIgPSAieHllcyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19PUEVOR0xfT1NNRVNBX0RZTkFNSUMpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fT1BFTkdMX09TTUVTQV9EWU5BTUlDLDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgIGZpCitAQCAtMTc5Miw3ICsxNzkyLDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWlucHV0LWV2ZW50c10sCisgICAgICAgICBdKQorICAgICAgICAgQUNfTVNHX1JFU1VMVCgkdXNlX2lucHV0X2V2ZW50cykKKyAgICAgICAgIGlmIHRlc3QgeCR1c2VfaW5wdXRfZXZlbnRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfTElOVVhFVikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0lOUFVUX0xJTlVYRVYsMSwiIikKKyAgICAgICAgIGZpCisgICAgIGZpCisgfQorQEAgLTE4MTQsNyArMTgxNCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnB1dC10c2xpYl0sIFsKKyAgICAgICAgIF0pCisgICAgICAgICBBQ19NU0dfUkVTVUxUKCRlbmFibGVfaW5wdXRfdHNsaWIpCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2lucHV0X3RzbGliID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfSU5QVVRfVFNMSUIpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9JTlBVVF9UU0xJQiwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sdHMiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTE4MzcsNyArMTgzNyw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wdGhdLCBbdXNlIEdOVQorICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKHB0aCkKKyAgICAgICAgIEFDX01TR19SRVNVTFQoJHVzZV9wdGgpCisgICAgICAgICBpZiB0ZXN0ICJ4JHVzZV9wdGgiID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvcHRoLyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzc2VtLmMiCisgICAgICAgICAgICAgU0RMX0NGTEFHUz0iJFNETF9DRkxBR1MgYCRQVEhfQ09ORklHIC0tY2ZsYWdzYCIKK0BAIC0xOTQzLDcgKzE5NDMsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgCisgICAgICAgICAjIERvIGZ1dGhlciB0ZXN0aW5nIGlmIHdlIGhhdmUgcHRocmVhZCBzdXBwb3J0Li4uCisgICAgICAgICBpZiB0ZXN0IHgkdXNlX3B0aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1BUSFJFQUQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRCwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkcHRocmVhZF9jZmxhZ3MiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgJHB0aHJlYWRfbGliIgorICAgICAgICAgICAgIFNETF9DRkxBR1M9IiRTRExfQ0ZMQUdTICRwdGhyZWFkX2NmbGFncyIKK0BAIC0xOTY1LDcgKzE5NjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpOworICAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgaGFzX3JlY3Vyc2l2ZV9tdXRleGVzPXllcworLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVgsMSwiIikKKyAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXNfcmVjdXJzaXZlX211dGV4ZXMgPSB4bm87IHRoZW4KK0BAIC0xOTc2LDcgKzE5NzYsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZC1zZW1dLCBbCisgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlApOworICAgICAgICAgICAgICAgICBdLFsKKyAgICAgICAgICAgICAgICAgaGFzX3JlY3Vyc2l2ZV9tdXRleGVzPXllcworLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9QVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9OUCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfTlAsMSwiIikKKyAgICAgICAgICAgICAgICAgXSkKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJGhhc19yZWN1cnNpdmVfbXV0ZXhlcykKK0BAIC0yMDY1LDcgKzIwNjUsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RkaW8tcmVkaXJlY3RdCisgICAgIGZpCisgCisgICAgIGlmIHRlc3QgeCRlbmFibGVfdmlkZW8gPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XSU5ESUIpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9XSU5ESUIsMSwiIikKKyAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3dpbmNvbW1vbi8qLmMiCisgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5kaWIvKi5jIgorICAgICAgICAgaGF2ZV92aWRlbz15ZXMKK0BAIC0yMDg3LDcgKzIwODcsNyBAQCBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZGlyZWN0eF0sIFt1c2UKKyAgICAgICAgICAgICBoYXZlX2RpcmVjdHg9eWVzCisgICAgICAgICBmaQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV92aWRlbyA9IHh5ZXMgLWEgeCRoYXZlX2RpcmVjdHggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRERSQVcpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9WSURFT19EUklWRVJfRERSQVcsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby93aW5keDUvKi5jIgorICAgICAgICAgICAgIGhhdmVfdmlkZW89eWVzCisgICAgICAgICBmaQorQEAgLTIxMTgsNyArMjExOCw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zZGwtZGxvcGVuXSwgW3UKKyAgICAgICAgICAgICBBQ19DSEVDS19MSUIoYywgZGxvcGVuLCBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyIsCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sZGwiLAorICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihsdGRsLCBkbG9wZW4sIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1sbHRkbCIpKSkKKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ETE9QRU4pCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRExPUEVOLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Rsb3Blbi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTIxMzUsNyArMjEzNSw3IEBAIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1hdGFyaS1sZGddLCBbdXMKKyAgICAgICAgIEFDX0NIRUNLX0hFQURFUihsZGcuaCwgaGF2ZV9sZGdfaGRyPXllcykKKyAgICAgICAgIEFDX0NIRUNLX0xJQihsZGcsIGxkZ19vcGVuLCBoYXZlX2xkZ19saWI9eWVzLCBoYXZlX2xkZ19saWI9bm8sIC1sZ2VtKQorICAgICAgICAgaWYgdGVzdCB4JGhhdmVfbGRnX2hkciA9IHh5ZXMgLWEgeCRoYXZlX2xkZ19saWIgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fTERHKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0xERywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9taW50LyouYyIKKyAgICAgICAgICAgICBTRExfTElCUz0iJFNETF9MSUJTIC1sbGRnIC1sZ2VtIgorICAgICAgICAgICAgIGhhdmVfbG9hZHNvPXllcworQEAgLTIyNjYsMTEgKzIyNjYsMTEgQEAgQ2hlY2tVU0JISUQoKQorICAgICAgICAgICAgIGhhdmVfbWFjaGluZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICBdKQorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX21hY2hpbmVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfVVNCSElEX01BQ0hJTkVfSk9ZU1RJQ0tfSCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISURfTUFDSElORV9KT1lTVElDS19ILDEsIiIpCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKCRoYXZlX21hY2hpbmVfam95c3RpY2spCisgCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISUQpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19VU0JISUQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9ic2QvKi5jIgorICAgICAgICAgICAgIEVYVFJBX0NGTEFHUz0iJEVYVFJBX0NGTEFHUyAkVVNCX0NGTEFHUyIKKyAgICAgICAgICAgICBFWFRSQV9MREZMQUdTPSIkRVhUUkFfTERGTEFHUyAkVVNCX0xJQlMiCitAQCAtMjI4OSw3ICsyMjg5LDcgQEAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNsb2NrX2dldHRpbWVdLAorICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nsb2NrX2dldHRpbWUgPSB4eWVzOyB0aGVuCisgICAgICAgICBBQ19DSEVDS19MSUIocnQsIGNsb2NrX2dldHRpbWUsIGhhdmVfY2xvY2tfZ2V0dGltZT15ZXMpCisgICAgICAgICBpZiB0ZXN0IHgkaGF2ZV9jbG9ja19nZXR0aW1lID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUpCisrICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQ0xPQ0tfR0VUVElNRSwxLCIiKQorICAgICAgICAgICAgIEVYVFJBX0xERkxBR1M9IiRFWFRSQV9MREZMQUdTIC1scnQiCisgICAgICAgICBmaQorICAgICBmaQorQEAgLTIzMjAsNyArMjMyMCw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tJUG9kCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjM4NiwxNyArMjM4NiwxNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCisgICAgICAgICAgIGNhc2UgJEFSQ0ggaW4KKyAgICAgICAgICAgICBzeXN2NXxzb2xhcmlzfGhwdXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9TVU5BVURJTywxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9zdW4vKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgbmV0YnNkfG9wZW5ic2QpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL2JzZC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICBhaXgpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1BBVUQpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1BBVUQsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvYXVkaW8vcGF1ZGlvLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0MDYsNyArMjQwNiw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgY2FzZSAkQVJDSCBpbgorICAgICAgICAgICAgIGxpbnV4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0xJTlVYKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0xJTlVYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL2xpbnV4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgICAgICA7OworQEAgLTI0MTYsMzIgKzI0MTYsMzIgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorICAgICAgICAgICBjYXNlICRBUkNIIGluCisgICAgICAgICAgICAgbGludXh8c29sYXJpcykKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9MSU5VWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9MSU5VWCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9saW51eC8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAqZnJlZWJzZCopCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRlJFRUJTRCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9GUkVFQlNELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2ZyZWVic2QvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgKm9wZW5ic2QqfCpuZXRic2QqKQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX09QRU5CU0QpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1BFTkJTRCwxLCIiKQorICAgICAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9vcGVuYnNkLyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIGJzZGkpCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQlNESSkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9CU0RJLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2JzZGkvKi5jIgorICAgICAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgYWl4KQorLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0FJWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9BSVgsMSwiIikKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vYWl4LyouYyIKKyAgICAgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgICAgICA7OworICAgICAgICAgICAgIG9zZikKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9PU0YpCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fT1NGLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL29zZi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICAgICAgOzsKK0BAIC0yNDQ5LDcgKzI0NDksNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzIC1hIHgkdXNlX3B0aHJlYWRzICE9IHh5ZXMgLWEgeCR1c2VfcHRoICE9IHh5ZXMgLWEgeCRBUkNIID0geGlyaXg7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9TUFJPQykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9TUFJPQywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9pcml4LyouYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzbXV0ZXguYyIKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aHJlYWQvZ2VuZXJpYy9TRExfc3lzY29uZC5jIgorQEAgLTI0NTcsNyArMjQ1Nyw3IEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKK0BAIC0yNDc2LDIwICsyNDc2LDIwIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgQ2hlY2tQVEhSRUFECisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfUU5YTlRPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1FOWE5UTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL250by8qLmMiCisgICAgICAgICAgICAgRVhUUkFfTERGTEFHUz0iJEVYVFJBX0xERkxBR1MgLWxhc291bmQiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9RTlgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9RTlgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9xbngvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvdW5peC8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI1MTQsMjkgKzI1MTQsMjkgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBDaGVja05BU00KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9XQVZFT1VUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1dBVkVPVVQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby93aW5kaWIvKi5jIgorICAgICAgICAgICAgIGlmIHRlc3QgeCRoYXZlX2RpcmVjdHggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0RTT1VORCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfRFNPVU5ELDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3dpbmR4NS8qLmMiCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX1dJTk1NKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfV0lOTU0sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay93aW4zMi8qLmMiCisgICAgICAgICAgICAgaGF2ZV9qb3lzdGljaz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGNkcm9tIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfY2Ryb20gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9DRFJPTV9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvY2Ryb20vd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfY2Ryb209eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aHJlYWQgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfVEhSRUFEX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC93aW4zMi9TRExfc3lzc2VtLmMiCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL3dpbjMyL1NETF9zeXN0aHJlYWQuYyIKK0BAIC0yNTQ1LDEzICsyNTQ1LDEzIEBAIGNhc2UgIiRob3N0IiBpbgorICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9XSU4zMikKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvd2luMzIvKi5jIgorICAgICAgICAgICAgIGhhdmVfdGltZXJzPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX1dJTjMyKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX1dJTjMyLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL3dpbjMyLyouYyIKKyAgICAgICAgICAgICBoYXZlX2xvYWRzbz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjYyMiwyNSArMjYyMiwyNSBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrQmVHTAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBhdWRpbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2F1ZGlvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0JBVURJTykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0FVRElPX0RSSVZFUl9CQVVESU8sMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9hdWRpby9iYXVkaW8vKi5jYyIKKyAgICAgICAgICAgICBoYXZlX2F1ZGlvPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgam95c3RpY2sgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svYmVvcy8qLmNjIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0JFT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9iZW9zLyouY2MiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRocmVhZCBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USFJFQURfQkVPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRF9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2Jlb3MvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNtdXRleC5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RocmVhZC9nZW5lcmljL1NETF9zeXNjb25kLmMiCitAQCAtMjY0OCw3ICsyNjQ4LDcgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX0JFT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9CRU9TLDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvYmVvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI2NTYsMTEgKzI2NTYsMTEgQEAgY2FzZSAiJGhvc3QiIGluCisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2xvYWRzbyA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICAgICAgICAgKi0qLWJlb3MqKQorLSAgICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fQkVPUykKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0JFT1MsMSwiIikKKyAgICAgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2xvYWRzby9iZW9zLyouYyIKKyAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgKi0qLWhhaWt1KikKKy0gICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTikKKysgICAgICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMT1BFTiwxLCIiKQorICAgICAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL2Rsb3Blbi8qLmMiCisgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgZXNhYyAgICAKK0BAIC0yNjk2LDcgKzI2OTYsNyBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgc2hhcmVkIG9iamVjdCBsb2FkaW5nIGxpYnJhcnkKKyAgICAgICAgICMgKHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlIGR5bmFtaWMgWDExIGNoZWNrKQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9sb2Fkc28gPSB4eWVzIC1hIHgkaGF2ZV9kbG9wZW4gIT0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMQ09NUEFUKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfTE9BRFNPX0RMQ09NUEFULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvbG9hZHNvL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9sb2Fkc289eWVzCisgICAgICAgICBmaQorQEAgLTI3MTQsMjYgKzI3MTQsMjYgQEAgY2FzZSAiJGhvc3QiIGluCisgCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGF1ZGlvIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfYXVkaW8gPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfQ09SRUFVRElPKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX0NPUkVBVURJTywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9hdWRpbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19JT0tJVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0pPWVNUSUNLX0lPS0lULDEsIiIpCisgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svZGFyd2luLyouYyIKKyAgICAgICAgICAgICBoYXZlX2pveXN0aWNrPXllcworICAgICAgICAgICAgIG5lZWRfaW9raXRfZnJhbWV3b3JrPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgY2Ryb20gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01BQ09TWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01BQ09TWCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL21hY29zeC8qLmMiCisgICAgICAgICAgICAgaGF2ZV9jZHJvbT15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIHRpbWVyIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfdGltZXJzID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1VOSVgsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy90aW1lci91bml4LyouYyIKKyAgICAgICAgICAgICBoYXZlX3RpbWVycz15ZXMKKyAgICAgICAgIGZpCitAQCAtMjc3NSwzMCArMjc3NSwzMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgYXVkaW8gbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JGVuYWJsZV9wdGggPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV9hdWRpbyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9BVURJT19EUklWRVJfU1VOQVVESU8pCisrICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfQVVESU9fRFJJVkVSX1NVTkFVRElPLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2F1ZGlvL3N1bi8qLmMiCisgICAgICAgICAgICAgICAgIGhhdmVfYXVkaW89eWVzCisgICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19NSU5UKQorKyAgICAgICAgICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfTUlOVCwxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2pveXN0aWNrL21pbnQvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSBjZHJvbSBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX2Nkcm9tID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfQ0RST01fTUlOVCkKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX01JTlQsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9jZHJvbS9taW50LyouYyIKKyAgICAgICAgICAgICBoYXZlX2Nkcm9tPXllcworICAgICAgICAgZmkKKyAgICAgICAgICMgU2V0IHVwIGZpbGVzIGZvciB0aGUgdGltZXIgbGlicmFyeQorICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCisgICAgICAgICAgICAgaWYgdGVzdCB4JGVuYWJsZV90aHJlYWRzID0geHllcyAtYSB4JGVuYWJsZV9wdGggPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgICAgIEFDX0RFRklORShTRExfVElNRVJfVU5JWCkKKysgICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9VTklYLDEsIiIpCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3VuaXgvKi5jIgorICAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICAgQUNfREVGSU5FKFNETF9USU1FUl9NSU5UKQorKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX01JTiwxLCIiVCkKKyAgICAgICAgICAgICAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGltZXIvbWludC8qLmMiCisgICAgICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL21pbnQvKi5TIgorICAgICAgICAgICAgIGZpCitAQCAtMjgxMSwyMCArMjgxMSwyMCBAQCBjYXNlICIkaG9zdCIgaW4KKyAgICAgICAgIENoZWNrUFRIUkVBRAorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB2aWRlbyBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3ZpZGVvID0geHllczsgdGhlbgorLSAgICAgICAgICAgIEFDX0RFRklORShTRExfVklERU9fRFJJVkVSX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1ZJREVPX0RSSVZFUl9SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy92aWRlby9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3ZpZGVvL3Jpc2Nvcy8qLlMiCisgICAgICAgICAgICAgaGF2ZV92aWRlbz15ZXMKKyAgICAgICAgIGZpCisgICAgICAgICAjIFNldCB1cCBmaWxlcyBmb3IgdGhlIGpveXN0aWNrIGxpYnJhcnkKKyAgICAgICAgIGlmIHRlc3QgeCRlbmFibGVfam95c3RpY2sgPSB4eWVzOyB0aGVuCistICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19SSVNDT1MpCisrICAgICAgICAgICAgQUNfREVGSU5FKFNETF9KT1lTVElDS19SSVNDT1MsMSwiIikKKyAgICAgICAgICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9qb3lzdGljay9yaXNjb3MvKi5jIgorICAgICAgICAgICAgIGhhdmVfam95c3RpY2s9eWVzCisgICAgICAgICBmaQorICAgICAgICAgIyBTZXQgdXAgZmlsZXMgZm9yIHRoZSB0aW1lciBsaWJyYXJ5CisgICAgICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RpbWVycyA9IHh5ZXM7IHRoZW4KKy0gICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1JJU0NPUykKKysgICAgICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSX1JJU0NPUywxLCIiKQorICAgICAgICAgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL3Jpc2Nvcy8qLmMiCisgICAgICAgICAgICAgaGF2ZV90aW1lcnM9eWVzCisgICAgICAgICBmaQorQEAgLTI4NDYsMzEgKzI4NDYsMzEgQEAgQ2hlY2tXYXJuQWxsCisgaWYgdGVzdCB4JGVuYWJsZV9qb3lzdGljayA9IHh5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgeCRoYXZlX2pveXN0aWNrICE9IHh5ZXM7IHRoZW4KKyAgICAgIyBXYW50cyBqb3lzdGljayBzdWJzeXN0ZW0sIGJ1dCBkb2Vzbid0IGhhdmUgYSBwbGF0Zm9ybS1zcGVjaWZpYyBiYWNrZW5kLi4uCistICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRFVNTVkpCisrICAgIEFDX0RFRklORShTRExfSk9ZU1RJQ0tfRFVNTVksMSwiIikKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvam95c3RpY2svZHVtbXkvKi5jIgorICAgZmkKKyBmaQorIGlmIHRlc3QgeCRoYXZlX2Nkcm9tICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV9jZHJvbSA9IHh5ZXM7IHRoZW4KKy0gICAgICAgIEFDX0RFRklORShTRExfQ0RST01fRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0NEUk9NX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL2Nkcm9tL2R1bW15LyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX3RocmVhZHMgIT0geHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgkZW5hYmxlX3RocmVhZHMgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX1RIUkVBRFNfRElTQUJMRUQsMSwiIikKKyAgICAgZmkKKyAgICAgU09VUkNFUz0iJFNPVVJDRVMgJHNyY2Rpci9zcmMvdGhyZWFkL2dlbmVyaWMvKi5jIgorIGZpCisgaWYgdGVzdCB4JGhhdmVfdGltZXJzICE9IHh5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCB4JGVuYWJsZV90aW1lcnMgPSB4eWVzOyB0aGVuCistICAgICAgICBBQ19ERUZJTkUoU0RMX1RJTUVSU19ESVNBQkxFRCkKKysgICAgICAgIEFDX0RFRklORShTRExfVElNRVJTX0RJU0FCTEVELDEsIiIpCisgICAgIGZpCisgICAgIFNPVVJDRVM9IiRTT1VSQ0VTICRzcmNkaXIvc3JjL3RpbWVyL2R1bW15LyouYyIKKyBmaQorIGlmIHRlc3QgeCRoYXZlX2xvYWRzbyAhPSB4eWVzOyB0aGVuCisgICAgIGlmIHRlc3QgeCRlbmFibGVfbG9hZHNvID0geHllczsgdGhlbgorLSAgICAgICAgQUNfREVGSU5FKFNETF9MT0FEU09fRElTQUJMRUQpCisrICAgICAgICBBQ19ERUZJTkUoU0RMX0xPQURTT19ESVNBQkxFRCwxLCIiKQorICAgICBmaQorICAgICBTT1VSQ0VTPSIkU09VUkNFUyAkc3JjZGlyL3NyYy9sb2Fkc28vZHVtbXkvKi5jIgorIGZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvbGlic2RsLTEuMi4xNS14ZGF0YTMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOThiOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaApAQCAtMCwwICsxLDE5IEBACitsaWJYMTEtMS41Ljk5LjkwMSBoYXMgY2hhbmdlZCBwcm90b3R5cGUgb2YgX1hEYXRhMzIKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorPGh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5PgorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLXIgYjZiMjgyOWNkN2VmIHNyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCistLS0gYS9zcmMvdmlkZW8veDExL1NETF94MTFzeW0uaAlXZWQgRmViIDI3IDE1OjIwOjMxIDIwMTMgLTA4MDAKKysrKyBiL3NyYy92aWRlby94MTEvU0RMX3gxMXN5bS5oCVdlZCBNYXIgMjcgMTY6MDc6MjMgMjAxMyArMDEwMAorQEAgLTE2NSw3ICsxNjUsNyBAQAorICAqLworICNpZmRlZiBMT05HNjQKKyBTRExfWDExX01PRFVMRShJT18zMkJJVCkKKy1TRExfWDExX1NZTShpbnQsX1hEYXRhMzIsKERpc3BsYXkgKmRweSxyZWdpc3RlciBsb25nICpkYXRhLHVuc2lnbmVkIGxlbiksKGRweSxkYXRhLGxlbikscmV0dXJuKQorK1NETF9YMTFfU1lNKGludCxfWERhdGEzMiwoRGlzcGxheSAqZHB5LHJlZ2lzdGVyIF9YY29uc3QgbG9uZyAqZGF0YSx1bnNpZ25lZCBsZW4pLChkcHksZGF0YSxsZW4pLHJldHVybikKKyBTRExfWDExX1NZTSh2b2lkLF9YUmVhZDMyLChEaXNwbGF5ICpkcHkscmVnaXN0ZXIgbG9uZyAqZGF0YSxsb25nIGxlbiksKGRweSxkYXRhLGxlbiksKQorICNlbmRpZgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbC0xLjIuMTUvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTNiYWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGwtMS4yLjE1L3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE4NyBAQAorUmF0aGVyIHRoYW4gY29kZSB3aGljaCBkb2Vzbid0IGV2ZW4gd29yayBwcm9wZXJseSB3aGVuIGNyb3NzIGNvbXBpbGluZywKK2xldHMganVzdCB1c2UgcGtnLWNvbmZpZyBpbnN0ZWFkLiBJdHMgYSBsaXR0bGUgc2ltcGxlci4KKworUlAgMjAxNC82LzIwCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogU0RMLTEuMi4xNS9zZGwubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBTREwtMS4yLjE1Lm9yaWcvc2RsLm00CisrKysgU0RMLTEuMi4xNS9zZGwubTQKK0BAIC0xMiwxNzQgKzEyLDggQEAgZG5sIFRlc3QgZm9yIFNETCwgYW5kIGRlZmluZSBTRExfQ0ZMQUdTCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfU0RMXSwKKyBbZG5sIAorLWRubCBHZXQgdGhlIGNmbGFncyBhbmQgbGlicmFyaWVzIGZyb20gdGhlIHNkbC1jb25maWcgc2NyaXB0CistZG5sCistQUNfQVJHX1dJVEgoc2RsLXByZWZpeCxbICAtLXdpdGgtc2RsLXByZWZpeD1QRlggICBQcmVmaXggd2hlcmUgU0RMIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSwKKy0gICAgICAgICAgICBzZGxfcHJlZml4PSIkd2l0aHZhbCIsIHNkbF9wcmVmaXg9IiIpCistQUNfQVJHX1dJVEgoc2RsLWV4ZWMtcHJlZml4LFsgIC0td2l0aC1zZGwtZXhlYy1wcmVmaXg9UEZYIEV4ZWMgcHJlZml4IHdoZXJlIFNETCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0sCistICAgICAgICAgICAgc2RsX2V4ZWNfcHJlZml4PSIkd2l0aHZhbCIsIHNkbF9leGVjX3ByZWZpeD0iIikKKy1BQ19BUkdfRU5BQkxFKHNkbHRlc3QsIFsgIC0tZGlzYWJsZS1zZGx0ZXN0ICAgICAgIERvIG5vdCB0cnkgdG8gY29tcGlsZSBhbmQgcnVuIGEgdGVzdCBTREwgcHJvZ3JhbV0sCistCQkgICAgLCBlbmFibGVfc2RsdGVzdD15ZXMpCistCistICBpZiB0ZXN0IHgkc2RsX2V4ZWNfcHJlZml4ICE9IHggOyB0aGVuCistICAgIHNkbF9jb25maWdfYXJncz0iJHNkbF9jb25maWdfYXJncyAtLWV4ZWMtcHJlZml4PSRzZGxfZXhlY19wcmVmaXgiCistICAgIGlmIHRlc3QgeCR7U0RMX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgU0RMX0NPTkZJRz0kc2RsX2V4ZWNfcHJlZml4L2Jpbi9zZGwtY29uZmlnCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCB4JHNkbF9wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgc2RsX2NvbmZpZ19hcmdzPSIkc2RsX2NvbmZpZ19hcmdzIC0tcHJlZml4PSRzZGxfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke1NETF9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIFNETF9DT05GSUc9JHNkbF9wcmVmaXgvYmluL3NkbC1jb25maWcKKy0gICAgZmkKKy0gIGZpCistCistICBhc19zYXZlX1BBVEg9IiRQQVRIIgorLSAgaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCistICAgIFBBVEg9IiRwcmVmaXgvYmluOiRwcmVmaXgvdXNyL2JpbjokUEFUSCIKKy0gIGZpCistICBBQ19QQVRIX1BST0coU0RMX0NPTkZJRywgc2RsLWNvbmZpZywgbm8sIFskUEFUSF0pCistICBQQVRIPSIkYXNfc2F2ZV9QQVRIIgorICAgbWluX3NkbF92ZXJzaW9uPWlmZWxzZShbJDFdLCAsMC4xMS4wLCQxKQorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBTREwgLSB2ZXJzaW9uID49ICRtaW5fc2RsX3ZlcnNpb24pCistICBub19zZGw9IiIKKy0gIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgIG5vX3NkbD15ZXMKKy0gIGVsc2UKKy0gICAgU0RMX0NGTEFHUz1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgU0RMX0xJQlM9YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS1saWJzYAorLQorLSAgICBzZGxfbWFqb3JfdmVyc2lvbj1gJFNETF9DT05GSUcgJHNkbF9jb25maWdfYXJncyAtLXZlcnNpb24gfCBcCistICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgc2RsX21pbm9yX3ZlcnNpb249YCRTRExfQ09ORklHICRzZGxfY29uZmlnX2FyZ3MgLS12ZXJzaW9uIHwgXAorLSAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKS5cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHNkbF9taWNyb192ZXJzaW9uPWAkU0RMX0NPTkZJRyAkc2RsX2NvbmZpZ19hcmdzIC0tdmVyc2lvbiB8IFwKKy0gICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXCkuXChbWzAtOV1dKlwpLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zZGx0ZXN0IiA9ICJ4eWVzIiA7IHRoZW4KKy0gICAgICBhY19zYXZlX0NGTEFHUz0iJENGTEFHUyIKKy0gICAgICBhY19zYXZlX0NYWEZMQUdTPSIkQ1hYRkxBR1MiCistICAgICAgYWNfc2F2ZV9MSUJTPSIkTElCUyIKKy0gICAgICBDRkxBR1M9IiRDRkxBR1MgJFNETF9DRkxBR1MiCistICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICBMSUJTPSIkTElCUyAkU0RMX0xJQlMiCistZG5sCistZG5sIE5vdyBjaGVjayBpZiB0aGUgaW5zdGFsbGVkIFNETCBpcyBzdWZmaWNpZW50bHkgbmV3LiAoQWxzbyBzYW5pdHkKKy1kbmwgY2hlY2tzIHRoZSByZXN1bHRzIG9mIHNkbC1jb25maWcgdG8gc29tZSBleHRlbnQKKy1kbmwKKy0gICAgICBybSAtZiBjb25mLnNkbHRlc3QKKy0gICAgICBBQ19UUllfUlVOKFsKKy0jaW5jbHVkZSA8c3RkaW8uaD4KKy0jaW5jbHVkZSA8c3RkbGliLmg+CistI2luY2x1ZGUgPHN0cmluZy5oPgorLSNpbmNsdWRlICJTREwuaCIKKy0KKy1jaGFyKgorLW15X3N0cmR1cCAoY2hhciAqc3RyKQorLXsKKy0gIGNoYXIgKm5ld19zdHI7CistICAKKy0gIGlmIChzdHIpCistICAgIHsKKy0gICAgICBuZXdfc3RyID0gKGNoYXIgKiltYWxsb2MgKChzdHJsZW4gKHN0cikgKyAxKSAqIHNpemVvZihjaGFyKSk7CistICAgICAgc3RyY3B5IChuZXdfc3RyLCBzdHIpOworLSAgICB9CistICBlbHNlCistICAgIG5ld19zdHIgPSBOVUxMOworLSAgCistICByZXR1cm4gbmV3X3N0cjsKKy19CistCistaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisteworLSAgaW50IG1ham9yLCBtaW5vciwgbWljcm87CistICBjaGFyICp0bXBfdmVyc2lvbjsKKy0KKy0gIC8qIFRoaXMgaGFuZ3Mgb24gc29tZSBzeXN0ZW1zICg/KQorLSAgc3lzdGVtICgidG91Y2ggY29uZi5zZGx0ZXN0Iik7CistICAqLworLSAgeyBGSUxFICpmcCA9IGZvcGVuKCJjb25mLnNkbHRlc3QiLCAiYSIpOyBpZiAoIGZwICkgZmNsb3NlKGZwKTsgfQorLQorLSAgLyogSFAvVVggOSAoJUAjISkgd3JpdGVzIHRvIHNzY2FuZiBzdHJpbmdzICovCistICB0bXBfdmVyc2lvbiA9IG15X3N0cmR1cCgiJG1pbl9zZGxfdmVyc2lvbiIpOworLSAgaWYgKHNzY2FuZih0bXBfdmVyc2lvbiwgIiVkLiVkLiVkIiwgJm1ham9yLCAmbWlub3IsICZtaWNybykgIT0gMykgeworLSAgICAgcHJpbnRmKCIlcywgYmFkIHZlcnNpb24gc3RyaW5nXG4iLCAiJG1pbl9zZGxfdmVyc2lvbiIpOworLSAgICAgZXhpdCgxKTsKKy0gICB9CistCistICAgaWYgKCgkc2RsX21ham9yX3ZlcnNpb24gPiBtYWpvcikgfHwKKy0gICAgICAoKCRzZGxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRzZGxfbWlub3JfdmVyc2lvbiA+IG1pbm9yKSkgfHwKKy0gICAgICAoKCRzZGxfbWFqb3JfdmVyc2lvbiA9PSBtYWpvcikgJiYgKCRzZGxfbWlub3JfdmVyc2lvbiA9PSBtaW5vcikgJiYgKCRzZGxfbWljcm9fdmVyc2lvbiA+PSBtaWNybykpKQorLSAgICB7CistICAgICAgcmV0dXJuIDA7CistICAgIH0KKy0gIGVsc2UKKy0gICAgeworLSAgICAgIHByaW50ZigiXG4qKiogJ3NkbC1jb25maWcgLS12ZXJzaW9uJyByZXR1cm5lZCAlZC4lZC4lZCwgYnV0IHRoZSBtaW5pbXVtIHZlcnNpb25cbiIsICRzZGxfbWFqb3JfdmVyc2lvbiwgJHNkbF9taW5vcl92ZXJzaW9uLCAkc2RsX21pY3JvX3ZlcnNpb24pOworLSAgICAgIHByaW50ZigiKioqIG9mIFNETCByZXF1aXJlZCBpcyAlZC4lZC4lZC4gSWYgc2RsLWNvbmZpZyBpcyBjb3JyZWN0LCB0aGVuIGl0IGlzXG4iLCBtYWpvciwgbWlub3IsIG1pY3JvKTsKKy0gICAgICBwcmludGYoIioqKiBiZXN0IHRvIHVwZ3JhZGUgdG8gdGhlIHJlcXVpcmVkIHZlcnNpb24uXG4iKTsKKy0gICAgICBwcmludGYoIioqKiBJZiBzZGwtY29uZmlnIHdhcyB3cm9uZywgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBTRExfQ09ORklHXG4iKTsKKy0gICAgICBwcmludGYoIioqKiB0byBwb2ludCB0byB0aGUgY29ycmVjdCBjb3B5IG9mIHNkbC1jb25maWcsIGFuZCByZW1vdmUgdGhlIGZpbGVcbiIpOworLSAgICAgIHByaW50ZigiKioqIGNvbmZpZy5jYWNoZSBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmVcbiIpOworLSAgICAgIHJldHVybiAxOworLSAgICB9CistfQorLQorLV0sLCBub19zZGw9eWVzLFtlY2hvICRhY19uICJjcm9zcyBjb21waWxpbmc7IGFzc3VtZWQgT0suLi4gJGFjX2MiXSkKKy0gICAgICAgQ0ZMQUdTPSIkYWNfc2F2ZV9DRkxBR1MiCistICAgICAgIENYWEZMQUdTPSIkYWNfc2F2ZV9DWFhGTEFHUyIKKy0gICAgICAgTElCUz0iJGFjX3NhdmVfTElCUyIKKy0gICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAieCRub19zZGwiID0geCA7IHRoZW4KKy0gICAgIEFDX01TR19SRVNVTFQoeWVzKQorLSAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkgICAgIAorLSAgZWxzZQorLSAgICAgQUNfTVNHX1JFU1VMVChubykKKy0gICAgIGlmIHRlc3QgIiRTRExfQ09ORklHIiA9ICJubyIgOyB0aGVuCistICAgICAgIGVjaG8gIioqKiBUaGUgc2RsLWNvbmZpZyBzY3JpcHQgaW5zdGFsbGVkIGJ5IFNETCBjb3VsZCBub3QgYmUgZm91bmQiCistICAgICAgIGVjaG8gIioqKiBJZiBTREwgd2FzIGluc3RhbGxlZCBpbiBQUkVGSVgsIG1ha2Ugc3VyZSBQUkVGSVgvYmluIGlzIGluIgorLSAgICAgICBlY2hvICIqKiogeW91ciBwYXRoLCBvciBzZXQgdGhlIFNETF9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIgorLSAgICAgICBlY2hvICIqKiogZnVsbCBwYXRoIHRvIHNkbC1jb25maWcuIgorLSAgICAgZWxzZQorLSAgICAgICBpZiB0ZXN0IC1mIGNvbmYuc2RsdGVzdCA7IHRoZW4KKy0gICAgICAgIDoKKy0gICAgICAgZWxzZQorLSAgICAgICAgICBlY2hvICIqKiogQ291bGQgbm90IHJ1biBTREwgdGVzdCBwcm9ncmFtLCBjaGVja2luZyB3aHkuLi4iCistICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICAgICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAkU0RMX0NGTEFHUyIKKy0gICAgICAgICAgTElCUz0iJExJQlMgJFNETF9MSUJTIgorLSAgICAgICAgICBBQ19UUllfTElOSyhbCistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgIlNETC5oIgorLQorLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisteyByZXR1cm4gMDsgfQorLSN1bmRlZiAgbWFpbgorLSNkZWZpbmUgbWFpbiBLX2FuZF9SX0NfbWFpbgorLV0sICAgICAgWyByZXR1cm4gMDsgXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gY29tcGlsZWQsIGJ1dCBkaWQgbm90IHJ1bi4gVGhpcyB1c3VhbGx5IG1lYW5zIgorLSAgICAgICAgICBlY2hvICIqKiogdGhhdCB0aGUgcnVuLXRpbWUgbGlua2VyIGlzIG5vdCBmaW5kaW5nIFNETCBvciBmaW5kaW5nIHRoZSB3cm9uZyIKKy0gICAgICAgICAgZWNobyAiKioqIHZlcnNpb24gb2YgU0RMLiBJZiBpdCBpcyBub3QgZmluZGluZyBTREwsIHlvdSdsbCBuZWVkIHRvIHNldCB5b3VyIgorLSAgICAgICAgICBlY2hvICIqKiogTERfTElCUkFSWV9QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciBlZGl0IC9ldGMvbGQuc28uY29uZiB0byBwb2ludCIKKy0gICAgICAgICAgZWNobyAiKioqIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24gIEFsc28sIG1ha2Ugc3VyZSB5b3UgaGF2ZSBydW4gbGRjb25maWcgaWYgdGhhdCIKKy0gICAgICAgICAgZWNobyAiKioqIGlzIHJlcXVpcmVkIG9uIHlvdXIgc3lzdGVtIgorLQkgIGVjaG8gIioqKiIKKy0gICAgICAgICAgZWNobyAiKioqIElmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIGluc3RhbGxlZCwgaXQgaXMgYmVzdCB0byByZW1vdmUgaXQsIGFsdGhvdWdoIgorLSAgICAgICAgICBlY2hvICIqKiogeW91IG1heSBhbHNvIGJlIGFibGUgdG8gZ2V0IHRoaW5ncyB0byB3b3JrIGJ5IG1vZGlmeWluZyBMRF9MSUJSQVJZX1BBVEgiXSwKKy0gICAgICAgIFsgZWNobyAiKioqIFRoZSB0ZXN0IHByb2dyYW0gZmFpbGVkIHRvIGNvbXBpbGUgb3IgbGluay4gU2VlIHRoZSBmaWxlIGNvbmZpZy5sb2cgZm9yIHRoZSIKKy0gICAgICAgICAgZWNobyAiKioqIGV4YWN0IGVycm9yIHRoYXQgb2NjdXJlZC4gVGhpcyB1c3VhbGx5IG1lYW5zIFNETCB3YXMgaW5jb3JyZWN0bHkgaW5zdGFsbGVkIgorLSAgICAgICAgICBlY2hvICIqKiogb3IgdGhhdCB5b3UgaGF2ZSBtb3ZlZCBTREwgc2luY2UgaXQgd2FzIGluc3RhbGxlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB5b3UiCistICAgICAgICAgIGVjaG8gIioqKiBtYXkgd2FudCB0byBlZGl0IHRoZSBzZGwtY29uZmlnIHNjcmlwdDogJFNETF9DT05GSUciIF0pCistICAgICAgICAgIENGTEFHUz0iJGFjX3NhdmVfQ0ZMQUdTIgorLSAgICAgICAgICBDWFhGTEFHUz0iJGFjX3NhdmVfQ1hYRkxBR1MiCistICAgICAgICAgIExJQlM9IiRhY19zYXZlX0xJQlMiCistICAgICAgIGZpCistICAgICBmaQorLSAgICAgU0RMX0NGTEFHUz0iIgorLSAgICAgU0RMX0xJQlM9IiIKKy0gICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoW1NETF0sIFtzZGwgPj0gJG1pbl9zZGxfdmVyc2lvbl0pCisgICBBQ19TVUJTVChTRExfQ0ZMQUdTKQorICAgQUNfU1VCU1QoU0RMX0xJQlMpCistICBybSAtZiBjb25mLnNkbHRlc3QKKyBdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGxfMS4yLjE1LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbC9saWJzZGxfMS4yLjE1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NmJkNDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsL2xpYnNkbF8xLjIuMTUuYmIKQEAgLTAsMCArMSw2NyBAQAorU1VNTUFSWSA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIiCitERVNDUklQVElPTiA9ICJTaW1wbGUgRGlyZWN0TWVkaWEgTGF5ZXIgaXMgYSBjcm9zcy1wbGF0Zm9ybSBtdWx0aW1lZGlhIFwKK2xpYnJhcnkgZGVzaWduZWQgdG8gcHJvdmlkZSBsb3cgbGV2ZWwgYWNjZXNzIHRvIGF1ZGlvLCBrZXlib2FyZCwgbW91c2UsIFwKK2pveXN0aWNrLCAzRCBoYXJkd2FyZSB2aWEgT3BlbkdMLCBhbmQgMkQgdmlkZW8gZnJhbWVidWZmZXIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJzZGwub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEubGlic2RsLm9yZy8iCisKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3ODE4Y2Q3ZmQ4Mzg3N2E4ZTNlZjgyYjgyNzk4ZWY0IgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYnNkbCIKKworREVQRU5EUyA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJ2RpcmVjdGZiJywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ3ZpcnR1YWwvbGliZ2wgbGliZ2x1JywgJycsIGQpfSBcCisgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHJhbmRyIGxpYnhyZW5kZXInLCAnJywgZCl9IFwKKyAgICAgICAgICAgdHNsaWIiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd2aXJ0dWFsL25hdGl2ZXNkay1saWJ4MTEgbmF0aXZlc2RrLWxpYnhyYW5kciBuYXRpdmVzZGstbGlieHJlbmRlciBuYXRpdmVzZGstbGlieGV4dCcsICcnLCBkKX0iCisKK1BSID0gInIzIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubGlic2RsLm9yZy9yZWxlYXNlL1NETC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX3R3ZWFrLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYnNkbC0xLjIuMTUteGRhdGEzMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L1NETC0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gIjlkOTZkZjg0MTc1NzJhMmFmYjc4MWE3YzRjODExYTg1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ2ZDMxNmE3OTNlNWUzNDgxNTVmMGRkOTNiOTc5Nzk4OTMzZmI5OGFhMWVkZWJjYzEwODgyOWQ2NDc0YWFkMDAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vc2RsLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXN0YXRpYyAtLWVuYWJsZS1jZHJvbSAtLWVuYWJsZS10aHJlYWRzIC0tZW5hYmxlLXRpbWVycyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZmlsZSAtLWRpc2FibGUtb3NzIC0tZGlzYWJsZS1lc2QgLS1kaXNhYmxlLWFydHMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kaXNrYXVkaW8gLS1kaXNhYmxlLW5hcyAtLWRpc2FibGUtZXNkLXNoYXJlZCAtLWRpc2FibGUtZXNkdGVzdCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLW1pbnRhdWRpbyAtLWRpc2FibGUtbmFzbSAtLWRpc2FibGUtdmlkZW8tZGdhIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tZmJjb24gLS1kaXNhYmxlLXZpZGVvLXBzMmdzIC0tZGlzYWJsZS12aWRlby1wczMgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14YmlvcyAtLWRpc2FibGUtZ2VtIC0tZGlzYWJsZS12aWRlby1kdW1teSBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtaW5wdXQtZXZlbnRzIC0tZW5hYmxlLWlucHV0LXRzbGliIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2RpcmVjdGZiJywgJy0tZW5hYmxlLXZpZGVvLWRpcmVjdGZiJywgJy0tZGlzYWJsZS12aWRlby1kaXJlY3RmYicsIGQpfSBcCisgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLS1lbmFibGUtdmlkZW8tb3BlbmdsJywgJy0tZGlzYWJsZS12aWRlby1vcGVuZ2wnLCBkKX0gXAorICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJy0tZW5hYmxlLXZpZGVvLXgxMScsICctLWRpc2FibGUtdmlkZW8teDExJywgZCl9IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tc3ZnYSBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZpZGVvLXBpY29ndWkgLS1kaXNhYmxlLXZpZGVvLXF0b3BpYSAtLWVuYWJsZS1zZGwtZGxvcGVuIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1wdWxzZWF1ZGlvIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhIC0tZGlzYWJsZS1hbHNhdGVzdCwtLWRpc2FibGUtYWxzYSxhbHNhLWxpYiwiCisKK0VYVFJBX0FVVE9SRUNPTkYgKz0gIi0taW5jbHVkZT1hY2luY2x1ZGUgLS1leGNsdWRlPWF1dG9oZWFkZXIiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICAgICAjIFJlbW92ZSBvbGQgbGlidG9vbCBtYWNyb3MuCisgICAgICAgIE1BQ1JPUz0ibGlidG9vbC5tNCBsdH5vYnNvbGV0ZS5tNCBsdG9wdGlvbnMubTQgbHRzdWdhci5tNCBsdHZlcnNpb24ubTQiCisgICAgICAgIGZvciBpIGluICR7TUFDUk9TfTsgZG8KKyAgICAgICAgICAgICAgIHJtIC1mICR7U30vYWNpbmNsdWRlLyRpCisgICAgICAgIGRvbmUKKyAgICAgICAgZXhwb3J0IFNZU1JPT1Q9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlic2RsMi9saWJzZGwyXzIuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMl8yLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y2NGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnNkbDIvbGlic2RsMl8yLjAuMy5iYgpAQCAtMCwwICsxLDYzIEBACitTVU1NQVJZID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciIKK0RFU0NSSVBUSU9OID0gIlNpbXBsZSBEaXJlY3RNZWRpYSBMYXllciBpcyBhIGNyb3NzLXBsYXRmb3JtIG11bHRpbWVkaWEgXAorbGlicmFyeSBkZXNpZ25lZCB0byBwcm92aWRlIGxvdyBsZXZlbCBhY2Nlc3MgdG8gYXVkaW8sIGtleWJvYXJkLCBtb3VzZSwgXAoram95c3RpY2ssIDNEIGhhcmR3YXJlIHZpYSBPcGVuR0wsIGFuZCAyRCB2aWRlbyBmcmFtZWJ1ZmZlci4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxpYnNkbC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5saWJzZGwub3JnLyIKKworU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIlpsaWIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLnR4dDttZDU9NjdkY2I3ZmFlMTY5NTI1NTdiYzVmOTZlOWViNWQxODgiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlic2RsMiIKKworREVQRU5EU19jbGFzcy1uYXRpdmVzZGsgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9uYXRpdmVzZGstbGlieDExIG5hdGl2ZXNkay1saWJ4cmFuZHIgbmF0aXZlc2RrLWxpYnhyZW5kZXIgbmF0aXZlc2RrLWxpYnhleHQnLCAnJywgZCl9IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubGlic2RsLm9yZy9yZWxlYXNlL1NETDItJHtQVn0udGFyLmd6IgorCitTID0gIiR7V09SS0RJUn0vU0RMMi0ke1BWfSIKKworU1JDX1VSSVttZDVzdW1dID0gImZlNmM2MWQyZTlkZjllZjU3MGU3ZTgwYzZlODIyNTM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImE1YTY5YTZhYmY4MGJjY2U3MTNmYTg3MzYwNzczNWZlNzEyZjQ0Mjc2YTdmMDQ4ZDYwYTYxYmIyZjZiM2M5MGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1vc3MgLS1kaXNhYmxlLWVzZCAtLWRpc2FibGUtYXJ0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWRpc2thdWRpbyAtLWRpc2FibGUtbmFzIC0tZGlzYWJsZS1lc2Qtc2hhcmVkIC0tZGlzYWJsZS1lc2R0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtdmlkZW8tZHVtbXkgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXB0aHJlYWRzIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zZGwtZGxvcGVuIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtcnBhdGgiCisKKyMgb3BlbmdsIHBhY2thZ2Vjb25maWcgZmFjdG9yZWQgb3V0IHRvIG1ha2UgaXQgZWFzeSBmb3IgZGlzdHJvcworIyBhbmQgQlNQIGxheWVycyB0byBwaWNrIGVpdGhlciAoZGVza3RvcCkgb3BlbmdsLCBnbGVzMiwgb3Igbm8gR0wKK1BBQ0tBR0VDT05GSUdfR0wgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ29wZW5nbCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7UEFDS0FHRUNPTkZJR19HTH0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdkaXJlY3RmYicsICdkaXJlY3RmYicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyIKK1BBQ0tBR0VDT05GSUdbYWxzYV0gICAgICAgPSAiLS1lbmFibGUtYWxzYSAtLWRpc2FibGUtYWxzYXRlc3QsLS1kaXNhYmxlLWFsc2EsYWxzYS1saWIsIgorUEFDS0FHRUNPTkZJR1tkaXJlY3RmYl0gICA9ICItLWVuYWJsZS12aWRlby1kaXJlY3RmYiAtLWRpc2FibGUtdmlkZW8tZGlyZWN0ZmIsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW2dsZXMyXSAgICAgID0gIi0tZW5hYmxlLXZpZGVvLW9wZW5nbGVzLC0tZGlzYWJsZS12aWRlby1vcGVuZ2xlcyx2aXJ0dWFsL2xpYmdsZXMyIgorUEFDS0FHRUNPTkZJR1tvcGVuZ2xdICAgICA9ICItLWVuYWJsZS12aWRlby1vcGVuZ2wsLS1kaXNhYmxlLXZpZGVvLW9wZW5nbCx2aXJ0dWFsL2xpYmdsIgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZWF1ZGlvLC0tZGlzYWJsZS1wdWxzZWF1ZGlvLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3RzbGliXSAgICAgID0gIi0tZW5hYmxlLWlucHV0LXRzbGliLC0tZGlzYWJsZS1pbnB1dC10c2xpYix0c2xpYiIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gICAgPSAiLS1lbmFibGUtdmlkZW8td2F5bGFuZCwtLWRpc2FibGUtdmlkZW8td2F5bGFuZCx3YXlsYW5kIgorUEFDS0FHRUNPTkZJR1t4MTFdICAgICAgICA9ICItLWVuYWJsZS12aWRlby14MTEsLS1kaXNhYmxlLXZpZGVvLXgxMSx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyYW5kciBsaWJ4cmVuZGVyIgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluY2x1ZGU9YWNpbmNsdWRlIC0tZXhjbHVkZT1hdXRvaGVhZGVyIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKyAgICAgICAgIyBSZW1vdmUgb2xkIGxpYnRvb2wgbWFjcm9zLgorICAgICAgICBNQUNST1M9ImxpYnRvb2wubTQgbHR+b2Jzb2xldGUubTQgbHRvcHRpb25zLm00IGx0c3VnYXIubTQgbHR2ZXJzaW9uLm00IgorICAgICAgICBmb3IgaSBpbiAke01BQ1JPU307IGRvCisgICAgICAgICAgICAgICBybSAtZiAke1N9L2FjaW5jbHVkZS8kaQorICAgICAgICBkb25lCisgICAgICAgIGV4cG9ydCBTWVNST09UPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L01JVC1zdHlsZS1saWNlbnNlIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjhkZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9NSVQtc3R5bGUtbGljZW5zZQpAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDEgUmVkIEhhdCwgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgUmVkIEhhdCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgUmVkIEhhdCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisgKiBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICoKKyAqIFJFRCBIQVQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFJFRCBIQVQKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTgorICogT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiAKKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQXV0aG9yOiAgT3dlbiBUYXlsb3IsIFJlZCBIYXQsIEluYy4KKyAqLwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9kaXNhYmxlX09zX29wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiN2VmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitEbyBub3Qgc2V0IE9zIG9wdGltaXphdGlvbiBpbiB0YXJnZXQgQVBQIENGTEFHUywgc2luY2UgaXQgbWF5IGhhdmUgcG90ZW50aWFsCitlcnJvciBpZiAiLS1lbmFibGUtdGFyZ2V0LW9wdHNwYWNlIiBpcyBub3Qgc2V0IHdoZW4gY29uZmlndXJpbmcgR0NDLgorCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitkaWZmIC1ydU4gWHNldHRpbmdzLWNsaWVudC0wLjEwLW9yaWcvY29uZmlndXJlLmFjIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMKKy0tLSBYc2V0dGluZ3MtY2xpZW50LTAuMTAtb3JpZy9jb25maWd1cmUuYWMJMjAxMC0wOS0yMSAxNDowMTo0Ny4wMDAwMDAwMDAgKzA4MDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMTAtMDktMjEgMTQ6MDI6MDEuMDAwMDAwMDAwICswODAwCitAQCAtMyw3ICszLDcgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFhzZXR0aW5ncy1jbGllbnQsIDAuMTApCisgQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKyAKKy1DRkxBR1M9Ii1PcyAtV2FsbCIKKytDRkxBR1M9Ii1PMiAtV2FsbCIKKyAKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9saW5rLXgxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvbGluay14MTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA4ZDBkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnQvbGluay14MTEucGF0Y2gKQEAgLTAsMCArMSwxMyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogWHNldHRpbmdzLWNsaWVudC0wLjEwL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gWHNldHRpbmdzLWNsaWVudC0wLjEwLm9yaWcvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo0OTo1NC4wMDAwMDAwMDAgKzAwMDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvTWFrZWZpbGUuYW0JMjAwOC0wMi0wNyAxNDo1MDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC05LDQgKzksNCBAQAorIAorIGxpYlhzZXR0aW5nc19jbGllbnRfbGFfU09VUkNFUz0gJChzb3VyY2VfYykgJChzb3VyY2VfaCkKKyAKKy1saWJYc2V0dGluZ3NfY2xpZW50X2xhX0xJQkFERCAgICAgID0gQFhfTElCU0AKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2xpYlhzZXR0aW5nc19jbGllbnRfbGFfTElCQUREICAgICAgPSBAWF9MSUJTQCAtbFgxMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbGlieHNldHRpbmdzLWNsaWVudC9saWJ4c2V0dGluZ3MtY2xpZW50L29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDVkMDhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudC9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMgWHNldHRpbmdzLWNsaWVudC0wLjEwL2NvbmZpZ3VyZS5hYworLS0tIFhzZXR0aW5ncy1jbGllbnQtMC4xMC9jb25maWd1cmUuYWMJMjAwMy0wMy0yOCAxMjozOTo1MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBYc2V0dGluZ3MtY2xpZW50LTAuMTAvY29uZmlndXJlLmFjCTIwMTMtMDEtMTEgMDc6Mzc6MjEuNDkxNTk3NzQzICswMjAwCitAQCAtMSw3ICsxLDcgQEAKKyAjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisgQUNfSU5JVCh4c2V0dGluZ3MtY2xpZW50LmMpCisgQU1fSU5JVF9BVVRPTUFLRShYc2V0dGluZ3MtY2xpZW50LCAwLjEwKQorLUFNX0NPTkZJR19IRUFERVIoY29uZmlnLmgpCisrQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmgpCisKKyBDRkxBR1M9Ii1PcyAtV2FsbCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9saWJ4c2V0dGluZ3MtY2xpZW50L2xpYnhzZXR0aW5ncy1jbGllbnRfMC4xMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzBkOWZjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL2xpYnhzZXR0aW5ncy1jbGllbnQvbGlieHNldHRpbmdzLWNsaWVudF8wLjEwLmJiCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAidXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBYc2V0dGluZ3MgcHJvdG9jb2wiCitERVNDUklQVElPTiA9ICJMaWJyYXJpZXMgdXNlZCBmb3IgYXBwbGljYXRpb25zIG1ha2luZyB1c2Ugb2YgdGhlIFhzZXR0aW5ncyBjb25maWd1cmF0aW9uIFwKK3NldHRpbmcgcHJvcGFnYXRpb24gcHJvdG9jb2wuIENvbnRyb2xzIHNldHRpbmcgb2YgZG91YmxlIGNsaWNrIHRpbWVvdXQsIGRyYWctYW5kLWRyb3AgXAordGhyZXNob2xkLCBhbmQgZGVmYXVsdCBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycyBmb3IgYWxsIGFwcGxpY2F0aW9ucyBydW5uaW5nIHdpdGhpbiBhIFwKK2Rlc2t0b3AuIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnL3NvdXJjZXMvb3B0aW9uYWwtZGVwZW5kZW5jaWVzLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorU0VDVElPTiA9ICJ4L2xpYnMiCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdjZmFjOWQyZDRkYzM2OTRjYzdlYjYwNWNmMzJhNjliIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hzZXR0aW5ncy1jbGllbnQuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIgorCitQUiA9ICJyNSIKKworaGVhZGVycyA9ICJ4c2V0dGluZ3MtY29tbW9uLmggeHNldHRpbmdzLWNsaWVudC5oIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueW9jdG9wcm9qZWN0Lm9yZy9yZWxlYXNlcy9tYXRjaGJveC9vcHRpb25hbC1kZXBlbmRlbmNpZXMvWHNldHRpbmdzLWNsaWVudC0wLjEwLnRhci5neiBcCisgICAgICAgIGZpbGU6Ly9NSVQtc3R5bGUtbGljZW5zZSBcCisgICAgICAgIGZpbGU6Ly9saW5rLXgxMS5wYXRjaDthcHBseT15ZXMgXAorICAgICAgICBmaWxlOi8vZGlzYWJsZV9Pc19vcHRpb24ucGF0Y2ggXAorICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImMxNGFhOWRiNmMwOTdlMDMwNmRhYzk3ZmI3ZGExYWRkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYyNzRhNGJjOTY5YWUxOTI5OTRhODU2YjdmNzg2YzZmY2U5NmJhZTc3Zjk2YzFjMmI3MWRkOTc1OTllMDZlNDMiCisKK1MgPSAiJHtXT1JLRElSfS9Yc2V0dGluZ3MtY2xpZW50LTAuMTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgVGhpcyBwYWNrYWdlIGRvZXNuJ3Qgc2hpcCB3aXRoIGl0cyBvd24gQ09QWUlORyBmaWxlIGFuZAorICAgICMgYXV0b3Rvb2xzIHdpbGwgaW5zdGFsbCBhIEdQTHYyIG9uZSBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgTUlULXN0eWxlIGxpY2Vuc2UgaGVyZS4KKyAgICAjIEFkZCB0aGUgY29ycmVjdCBsaWNlbnNlIGhlcmUgdG8gYXZvaWQgY29uZnVzaW9uLgorICAgIGNwIC1mICR7V09SS0RJUn0vTUlULXN0eWxlLWxpY2Vuc2UgJHtTfS9DT1BZSU5HCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDZjYWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXNlc3Npb24vbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIG1hdGNoYm94IHRvb2xzCisjCisKKyMgVW5jb21tZW50IGJlbG93IHRvIGVuYWJsZSBwYXJzaW5nIG9mIGRlYmlhbiBtZW51IGVudHJ5cworIyBleHBvcnQgTUJfVVNFX0RFQl9NRU5VUz0xIAorCitpZiBbIC1lICRIT01FLy5tYXRjaGJveC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgJEhPTUUvLm1hdGNoYm94L3Nlc3Npb24KK2ZpCisKK2lmIFsgLWUgL2V0Yy9tYXRjaGJveC9zZXNzaW9uIF0KK3RoZW4KK2V4ZWMgL2V0Yy9tYXRjaGJveC9zZXNzaW9uCitmaQorCisjIERlZmF1bHQgZmlsZXMgdG8gcnVuIGlmICRIT01FLy5tYXRjaGJveC9zZXNzaW9uIG9yIC9ldGMvbWF0Y2hib3gvc2Vzc2lvbgorIyBkb250IGV4aXN0LiAKKworbWF0Y2hib3gtZGVza3RvcCAmCittYXRjaGJveC1wYW5lbCAmCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC1zZXNzaW9uL21hdGNoYm94LXNlc3Npb25fMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWYwNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtc2Vzc2lvbi9tYXRjaGJveC1zZXNzaW9uXzAuMS5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIkN1c3RvbSBNYXRjaGJveCBzZXNzaW9uIGZpbGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tYXRjaGJveC1wcm9qZWN0Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL21hdGNoYm94LXNlc3Npb247ZW5kbGluZT0yMDttZDU9MTgwZjFjMTY5YTE1ZDA1OWE1NmMzMDA5NGY2ZmI1ZWEiCisKK1NFQ1RJT04gPSAieDExIgorUkNPTkZMSUNUU18ke1BOfSA9ICJtYXRjaGJveC1jb21tb24iCisKK1NSQ19VUkkgPSAiZmlsZTovL21hdGNoYm94LXNlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK1BSID0gInI0IgorCitpbmhlcml0IHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworQUxURVJOQVRJVkVfJHtQTn0gPSAieC1zZXNzaW9uLW1hbmFnZXIiCitBTFRFUk5BVElWRV9UQVJHRVRbeC1zZXNzaW9uLW1hbmFnZXJdID0gIiR7YmluZGlyfS9tYXRjaGJveC1zZXNzaW9uIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiMTAwIgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9tYXRjaGJveC1zZXNzaW9uICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWF0Y2hib3gtd20vbWF0Y2hib3gtd20va2JkY29uZmlnIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtL2tiZGNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlkYThmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtL2tiZGNvbmZpZwpAQCAtMCwwICsxLDQyIEBACisjCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBrZXlib2FyZCBjb25maWcgZmlsZSBmb3IgbWF0Y2hib3gKKyMKKyMgWW91IGNhbiBlZGl0IHRoaXMgZmlsZSBvciBjaGFuZ2UgcGVyIHVzZXIgYnkgY29weWluZyB0byAKKyMgIH4vLm1hdGNoYm94L2tiZGNvbmZpZworIworIyBTZSB0aGUgbWF0Y2hib3ggbWFudWFsIGZvciBtb3JlIGluZm8gKCBodHRwOi8vcHJvamVjdHMuby1oYW5kLmNvbS9tYXRjaGJveCApCisKKyMjIyBXaW5kb3cgb3BlcmF0aW9uIHNob3J0IGN1dHMgCisKKzxBbHQ+bj1uZXh0Cis8QWx0PnA9cHJldgorPEFsdD5jPWNsb3NlCis8QWx0PmQ9ZGVza3RvcAorPEFsdD5tPSFtYXRjaGJveC1yZW1vdGUgLW1ibWVudQorCisjIyMgQXBwIGxhdW5jaGluZy4KKworPGN0cmw+PGFsdD54PSF4dGVybQorPGN0cmw+PGFsdD5yPSFyeHZ0CisKKyMjIyBwb2t5IGFkZGl0aW9ucworCitYRjg2Q2FsZW5kYXI9ISRjb250YWN0cwordGVsZXBob25lPSEkZGF0ZXMKK1hGODZTdGFydD0hbWF0Y2hib3gtcmVtb3RlIC1kZXNrdG9wCitGMj0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKworI1hGODZNYWlsPSEkdGFza3MKKyNFc2NhcGU9Y2xvc2UKKworIyMjIHdpbmRvd3Mgc3R5bGUga2V5IHNob3J0Y3V0cworCis8YWx0PlRhYj1uZXh0Cis8YWx0PjxzaGlmdD5UYWI9cHJldgorCis8YWx0PnNwYWNlPXRhc2ttZW51Cis8YWx0PmVzY2FwZT0hbWF0Y2hib3gtcmVtb3RlIC1tYm1lbnUKKzxhbHQ+ZjQ9Y2xvc2UKKworZjExPWZ1bGxzY3JlZW4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21hdGNoYm94LXdtL21hdGNoYm94LXdtX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIyZDI1NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tYXRjaGJveC13bS9tYXRjaGJveC13bV9naXQuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBsaWdodHdlaWdodCB3aW5kb3cgbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy93bS5oO2VuZGxpbmU9MjE7bWQ1PWE3ZTg0NDQ2NWVkYmNmNzljMjgyMzY5ZjkzY2FhODM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9tYWluLmM7ZW5kbGluZT0yMTttZDU9M2U1ZDlmODMyYjUyN2IwZDcyZGJlOGUzYzRjNjBiOTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3dtLmM7ZW5kbGluZT0yMTttZDU9OGRjOWQyNDQ3N2Q4N2VmNWRmYmMyZTQ5MjcxNDZhYWIiCisKK1NFQ1RJT04gPSAieDExL3dtIgorREVQRU5EUyA9ICJsaWJtYXRjaGJveCB2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnhyZW5kZXIgc3RhcnR1cC1ub3RpZmljYXRpb24gZXhwYXQgZ2NvbmYgbGlieGN1cnNvciBsaWJ4Zml4ZXMiCisKK1NSQ1JFViA9ICIyOTU0NGYwZTYxY2MyODFmYzYwMDYxNDQzYTUzNzI3MWUxMDgxYjc4IgorUFYgPSAiMS4yK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL21hdGNoYm94LXdpbmRvdy1tYW5hZ2VyIFwKKyAgICAgICAgICAgZmlsZTovL2tiZGNvbmZpZyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0vbWF0Y2hib3ggXAorICAgICAgICAgICAgICAgJHtkYXRhZGlyfS90aGVtZXMvYmxvbmRpZS9tYXRjaGJveCBcCisgICAgICAgICAgICAgICAke2RhdGFkaXJ9L3RoZW1lcy9EZWZhdWx0L21hdGNoYm94IFwKKyAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vdGhlbWVzL01CT3B1cy9tYXRjaGJveCIKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14cm0gXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS1leHBhdCBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1leHBhdC1saWI9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgICAtLXdpdGgtZXhwYXQtaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0iCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsICR7V09SS0RJUn0va2JkY29uZmlnICR7U30vZGF0YS9rYmRjb25maWcKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZW51LWNhY2hlL21lbnUtY2FjaGVfMS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVudS1jYWNoZS9tZW51LWNhY2hlXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTA5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVudS1jYWNoZS9tZW51LWNhY2hlXzEuMC4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgY2FjaGluZyBhcHBsaWNhdGlvbiBtZW51cyIKK0RFU0NSSVBUSU9OID0gIkEgbGlicmFyeSBjcmVhdGluZyBhbmQgdXRpbGl6aW5nIGNhY2hlcyB0byBzcGVlZCB1cCBmcmVlZGVza3RvcC5vcmcgYXBwbGljYXRpb24gbWVudXMiCitIT01FUEFHRSA9ICJodHRwOi8vbHhkZS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NjRjNjg5ZmNmNGMyMWM2Nzk3ZWE4NzQwODQxNmI2IgorCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyA9ICJnbGliLTIuMCBpbnRsdG9vbC1uYXRpdmUgbGliZm0tZXh0cmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2x4ZGUvbWVudS1jYWNoZS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0YThlNmMxYTg2ZDVlNjRlYzcyNWQ4NTBhNGFiZmJhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZjdkZjQzN2JiZmQzMTE5YzVmNjYyYzZkMjA5Yjk4ZjE1ZGUwM2E3MjAzMzA4YzZiNTZhNGMxZTFkNDE5YWFmIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZyBndGstZG9jCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9saWJnbHVfOS4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDEwOTk4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL2xpYmdsdV85LjAuMC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlRoZSBPcGVuR0wgdXRpbGl0eSB0b29sa2l0IgorREVTQ1JJUFRJT04gPSAiR0xVIGlzIGEgdXRpbGl0eSB0b29sa2l0IHVzZWQgd2l0aCBPcGVuR0wgaW1wbGVtZW50YXRpb25zIgorCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9pbmNsdWRlL0dML2dsdS5oO2VuZGxpbmU9Mjk7bWQ1PTZiNzljNTcwZjY0NDM2M2IzNTY0NTZlN2Q0NDQ3MWQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9saWJ0ZXNzL3Rlc3MuYztlbmRsaW5lPTI5O21kNT02Yjc5YzU3MGY2NDQzNjNiMzU2NDU2ZTdkNDQ0NzFkOSIKKworIyBFcG9jaCBhcyB0aGlzIHVzZWQgdG8gYmUgcGFydCBvZiBtZXNhCitQRSA9ICIyIgorUFIgPSAiMCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2dsdS9nbHUtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImJlOTI0OTEzMmZmNDkyNzU0NjFjZjkyMDM5MDgzMDMwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFmN2FkMGQzNzlhNzIyZmNiZDMwM2FhNTY1MGM2ZDdkNTU0NGZkZTgzMTk2YjQyYTczZDExOTM1NjhhNGRmMTIiCisKK1MgPSAiJHtXT1JLRElSfS9nbHUtJHtQVn0iCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJnbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFJlcXVpcmVzIGxpYkdMLnNvIHdoaWNoIGlzIHByb3ZpZGVkIGJ5IG1lc2Egd2hlbiB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCisjIFJlbW92ZSB0aGUgbWVzYS1nbHUgZGVwZW5kZW5jeSBpbiBtZXNhLWdsdS1kZXYsIGFzIG1lc2EtZ2x1IGlzIGVtcHR5CitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAxLW1lc2EtZGVtb3MtQWRkLW1pc3NpbmctZGF0YS1maWxlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNlZTljMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw2MjQgQEAKK0Zyb20gYjY5NWMzYTNmYTNmNGNkNDhjMTNhYTI2NTQyMTEwZGUyNzA3NTUxOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBNb24sIDEyIE1heSAyMDE0IDE1OjIyOjMyIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggMS85XSBtZXNhLWRlbW9zOiBBZGQgbWlzc2luZyBkYXRhIGZpbGVzLgorCitBZGQgc29tZSBkYXRhIGZpbGVzIHRoYXQgYXJlIHByZXNlbnQgaW4gdGhlIGdpdCByZXBvc2l0b3J5OgorICAgaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL21lc2EvZGVtb3MvdHJlZS8/aWQ9bWVzYS1kZW1vcy04LjEuMAorYnV0IG5vdCBpbiB0aGUgcmVsZWFzZSB0YXJiYWxsCisgICBmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLzguMS4wL21lc2EtZGVtb3MtOC4xLjAudGFyLmJ6MgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wgICAgICB8ICAgNCArCisgc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgICB8ICAgNyArCisgc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcgICB8ICA0NyArKysrKysrCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcgICB8ICAzMSArKysrKworIHNyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0ICAgfCAgMTYgKysrCisgc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZyAgICAgICB8ICAyMSArKysKKyBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wgICAgIHwgMjc5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvZ2xzbC9za2lubmluZy52ZXJ0ICAgICAgICAgIHwgIDI0ICsrKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnIHwgIDE5ICsrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgfCAgMTQgKysKKyBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnIHwgIDE3ICsrKworIHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQgfCAgMTQgKysKKyBzcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCAgIHwgICA4ICsrCisgMTMgZmlsZXMgY2hhbmdlZCwgNTAxIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2dsc2wvc2tpbm5pbmcudmVydAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0CisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL2RlcHRoLXJlYWQuZ2xzbCBiL3NyYy9mcGdsc2wvZGVwdGgtcmVhZC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uODZkMjk4ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2ZwZ2xzbC9kZXB0aC1yZWFkLmdsc2wKK0BAIC0wLDAgKzEsNCBAQAorK3ZvaWQgbWFpbigpCisreworKyAgIGdsX0ZyYWdDb2xvciA9IGdsX0ZyYWdDb29yZC56enp6OworK30KK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbCBiL3NyYy9mcGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYzZkYzZlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wKK0BAIC0wLDAgKzEsNyBAQAorK3ZvaWQgbWFpbigpIHsKKysgICB2ZWM0IHN1bSA9IHZlYzQoMCk7CisrICAgZm9yIChpbnQgaSA9IDE7IGkgIT0gMjsgaSArPSAyKSB7CisrICAgICAgc3VtICs9IHZlYzQoMC4xLCAwLjEsIDAuMSwgMC4xKTsKKysgICB9CisrICAgZ2xfRnJhZ0NvbG9yID0gc3VtOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9DSDExLWJ1bXBtYXB0ZXguZnJhZyBiL3NyYy9nbHNsL0NIMTEtYnVtcG1hcHRleC5mcmFnCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjVkYWJiNAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvQ0gxMS1idW1wbWFwdGV4LmZyYWcKK0BAIC0wLDAgKzEsNDcgQEAKKysvLworKy8vIEZyYWdtZW50IHNoYWRlciBmb3IgcHJvY2VkdXJhbCBidW1wcworKy8vCisrLy8gQXV0aG9yczogSm9obiBLZXNzZW5pY2gsIFJhbmRpIFJvc3QKKysvLworKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDA2IDNEbGFicyBJbmMuIEx0ZC4gCisrLy8KKysvLyBTZWUgM0RsYWJzLUxpY2Vuc2UudHh0IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uCisrLy8KKysvLyBUZXh0dXJlIG1hcHBpbmcvbW9kdWxhdGlvbiBhZGRlZCBieSBCcmlhbiBQYXVsCisrLy8KKysKKyt2YXJ5aW5nIHZlYzMgTGlnaHREaXI7CisrdmFyeWluZyB2ZWMzIEV5ZURpcjsKKysKKyt1bmlmb3JtIGZsb2F0IEJ1bXBEZW5zaXR5OyAgICAgLy8gPSAxNi4wCisrdW5pZm9ybSBmbG9hdCBCdW1wU2l6ZTsgICAgICAgIC8vID0gMC4xNQorK3VuaWZvcm0gZmxvYXQgU3BlY3VsYXJGYWN0b3I7ICAvLyA9IDAuNQorKworK3VuaWZvcm0gc2FtcGxlcjJEIFRleDsKKysKKyt2b2lkIG1haW4oKQorK3sKKysgICAgdmVjMyBhbWJpZW50ID0gdmVjMygwLjI1KTsKKysgICAgdmVjMyBsaXRDb2xvcjsKKysgICAgdmVjMiBjID0gQnVtcERlbnNpdHkgKiBnbF9UZXhDb29yZFswXS5zdDsKKysgICAgdmVjMiBwID0gZnJhY3QoYykgLSB2ZWMyKDAuNSk7CisrCisrICAgIGZsb2F0IGQsIGY7CisrICAgIGQgPSBwLnggKiBwLnggKyBwLnkgKiBwLnk7CisrICAgIGYgPSBpbnZlcnNlc3FydChkICsgMS4wKTsKKysKKysgICAgaWYgKGQgPj0gQnVtcFNpemUpCisrICAgICAgICB7IHAgPSB2ZWMyKDAuMCk7IGYgPSAxLjA7IH0KKysKKysgICAgdmVjMyBTdXJmYWNlQ29sb3IgPSB0ZXh0dXJlMkQoVGV4LCBnbF9UZXhDb29yZFswXS5zdCkueHl6OworKworKyAgICB2ZWMzIG5vcm1EZWx0YSA9IHZlYzMocC54LCBwLnksIDEuMCkgKiBmOworKyAgICBsaXRDb2xvciA9IFN1cmZhY2VDb2xvciAqIChhbWJpZW50ICsgbWF4KGRvdChub3JtRGVsdGEsIExpZ2h0RGlyKSwgMC4wKSk7CisrICAgIHZlYzMgcmVmbGVjdERpciA9IHJlZmxlY3QoTGlnaHREaXIsIG5vcm1EZWx0YSk7CisrICAgIAorKyAgICBmbG9hdCBzcGVjID0gbWF4KGRvdChFeWVEaXIsIHJlZmxlY3REaXIpLCAwLjApOworKyAgICBzcGVjICo9IFNwZWN1bGFyRmFjdG9yOworKyAgICBsaXRDb2xvciA9IG1pbihsaXRDb2xvciArIHNwZWMsIHZlYzMoMS4wKSk7CisrCisrICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobGl0Q29sb3IsIDEuMCk7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5mcmFnIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wZGIwNjBiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuZnJhZworQEAgLTAsMCArMSwzMSBAQAorKyNleHRlbnNpb24gR0xfQVJCX3VuaWZvcm1fYnVmZmVyX29iamVjdCA6IGVuYWJsZQorKworK2xheW91dChzdGQxNDApIHVuaWZvcm0gY29sb3JzMAorK3sKKysgICAgZmxvYXQgRGlmZnVzZUNvb2w7CisrICAgIGZsb2F0IERpZmZ1c2VXYXJtOworKyAgICB2ZWMzICBTdXJmYWNlQ29sb3I7CisrICAgIHZlYzMgIFdhcm1Db2xvcjsKKysgICAgdmVjMyAgQ29vbENvbG9yOworKyAgICB2ZWM0ICBzb21lWzhdOworK307CisrCisrdmFyeWluZyBmbG9hdCBOZG90TDsKKyt2YXJ5aW5nIHZlYzMgIFJlZmxlY3RWZWM7CisrdmFyeWluZyB2ZWMzICBWaWV3VmVjOworKworK3ZvaWQgbWFpbiAodm9pZCkKKyt7CisrCisrICAgIHZlYzMga2Nvb2wgICAgPSBtaW4oQ29vbENvbG9yICsgRGlmZnVzZUNvb2wgKiBTdXJmYWNlQ29sb3IsIDEuMCk7CisrICAgIHZlYzMga3dhcm0gICAgPSBtaW4oV2FybUNvbG9yICsgRGlmZnVzZVdhcm0gKiBTdXJmYWNlQ29sb3IsIDEuMCk7CisrICAgIHZlYzMga2ZpbmFsICAgPSBtaXgoa2Nvb2wsIGt3YXJtLCBOZG90TCk7CisrCisrICAgIHZlYzMgbnJlZmxlY3QgPSBub3JtYWxpemUoUmVmbGVjdFZlYyk7CisrICAgIHZlYzMgbnZpZXcgICAgPSBub3JtYWxpemUoVmlld1ZlYyk7CisrCisrICAgIGZsb2F0IHNwZWMgICAgPSBtYXgoZG90KG5yZWZsZWN0LCBudmlldyksIDAuMCk7CisrICAgIHNwZWMgICAgICAgICAgPSBwb3coc3BlYywgMzIuMCk7CisrCisrICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQgKG1pbihrZmluYWwgKyBzcGVjLCAxLjApLCAxLjApOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QudmVydCBiL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzk3ZDczMworLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LnZlcnQKK0BAIC0wLDAgKzEsMTYgQEAKKyt2ZWMzIExpZ2h0UG9zaXRpb24gPSB2ZWMzKDAuMCwgMTAuMCwgNC4wKTsgCisrIAorK3ZhcnlpbmcgZmxvYXQgTmRvdEw7CisrdmFyeWluZyB2ZWMzICBSZWZsZWN0VmVjOworK3ZhcnlpbmcgdmVjMyAgVmlld1ZlYzsKKysgCisrdm9pZCBtYWluKHZvaWQpCisreworKyAgICB2ZWMzIGVjUG9zICAgICAgPSB2ZWMzIChnbF9Nb2RlbFZpZXdNYXRyaXggKiBnbF9WZXJ0ZXgpOworKyAgICB2ZWMzIHRub3JtICAgICAgPSBub3JtYWxpemUoZ2xfTm9ybWFsTWF0cml4ICogZ2xfTm9ybWFsKTsKKysgICAgdmVjMyBsaWdodFZlYyAgID0gbm9ybWFsaXplKExpZ2h0UG9zaXRpb24gLSBlY1Bvcyk7CisrICAgIFJlZmxlY3RWZWMgICAgICA9IG5vcm1hbGl6ZShyZWZsZWN0KC1saWdodFZlYywgdG5vcm0pKTsKKysgICAgVmlld1ZlYyAgICAgICAgID0gbm9ybWFsaXplKC1lY1Bvcyk7CisrICAgIE5kb3RMICAgICAgICAgICA9IChkb3QobGlnaHRWZWMsIHRub3JtKSArIDEuMCkgKiAwLjU7CisrICAgIGdsX1Bvc2l0aW9uICAgICA9IGZ0cmFuc2Zvcm0oKTsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvY29udm9sdXRpb24uZnJhZyBiL3NyYy9nbHNsL2NvbnZvbHV0aW9uLmZyYWcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lNDliOGFjCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9jb252b2x1dGlvbi5mcmFnCitAQCAtMCwwICsxLDIxIEBACisrCisrY29uc3QgaW50IEtlcm5lbFNpemUgPSA5OworKworKy8vdGV4dHVyZSBvZmZzZXRzCisrdW5pZm9ybSB2ZWMyIE9mZnNldFtLZXJuZWxTaXplXTsKKysvL2NvbnZvbHV0aW9uIGtlcm5lbAorK3VuaWZvcm0gdmVjNCBLZXJuZWxWYWx1ZVtLZXJuZWxTaXplXTsKKyt1bmlmb3JtIHNhbXBsZXIyRCBzcmNUZXg7CisrdW5pZm9ybSB2ZWM0IFNjYWxlRmFjdG9yOworK3VuaWZvcm0gdmVjNCBCYXNlQ29sb3I7CisrCisrdm9pZCBtYWluKHZvaWQpCisreworKyAgICBpbnQgaTsKKysgICAgdmVjNCBzdW0gPSB2ZWM0KDAuMCk7CisrICAgIGZvciAoaSA9IDA7IGkgPCBLZXJuZWxTaXplOyArK2kpIHsKKysgICAgICAgIHZlYzQgdG1wID0gdGV4dHVyZTJEKHNyY1RleCwgZ2xfVGV4Q29vcmRbMF0uc3QgKyBPZmZzZXRbaV0pOworKyAgICAgICAgc3VtICs9IHRtcCAqIEtlcm5lbFZhbHVlW2ldOworKyAgICB9CisrICAgIGdsX0ZyYWdDb2xvciA9IHN1bSAqIFNjYWxlRmFjdG9yICsgQmFzZUNvbG9yOworK30KK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjgzM2NiCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmdsc2wKK0BAIC0wLDAgKzEsMjc5IEBACisrLy8KKysvLyBEZXNjcmlwdGlvbiA6IEFycmF5IGFuZCB0ZXh0dXJlbGVzcyBHTFNMIDJELzNELzREIHNpbXBsZXgKKysvLyBub2lzZSBmdW5jdGlvbnMuCisrLy8gQXV0aG9yIDogSWFuIE1jRXdhbiwgQXNoaW1hIEFydHMuCisrLy8gTWFpbnRhaW5lciA6IGlqbQorKy8vIExhc3Rtb2QgOiAyMDExMDIyMworKy8vIExpY2Vuc2UgOiBDb3B5cmlnaHQgKEMpIDIwMTEgQXNoaW1hIEFydHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFydGlzdGljIExpY2Vuc2UgMi4wOyBTZWUgTElDRU5DRSBmaWxlLgorKy8vCisrCisrI2RlZmluZSBOT1JNQUxJWkVfR1JBRElFTlRTCisrI3VuZGVmIFVTRV9DSVJDTEUKKysjZGVmaW5lIENPTExBUFNFX1NPUlRORVQKKysKKytmbG9hdCBwZXJtdXRlKGZsb2F0IHgwLHZlYzMgcCkgeworKyAgZmxvYXQgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWMyIHBlcm11dGUodmVjMiB4MCx2ZWMzIHApIHsKKysgIHZlYzIgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWMzIHBlcm11dGUodmVjMyB4MCx2ZWMzIHApIHsKKysgIHZlYzMgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKyt2ZWM0IHBlcm11dGUodmVjNCB4MCx2ZWMzIHApIHsKKysgIHZlYzQgeDEgPSBtb2QoeDAgKiBwLnksIHAueCk7CisrICByZXR1cm4gZmxvb3IoIG1vZCggKHgxICsgcC56KSAqeDAsIHAueCApKTsKKysgIH0KKysKKyt1bmlmb3JtIHZlYzQgcFBhcmFtOworKy8vIEV4YW1wbGUKKysvLyBjb25zdCB2ZWM0IHBQYXJhbSA9IHZlYzQoIDE3LiogMTcuLCAzNC4sIDEuLCA3Lik7CisrCisrZmxvYXQgdGF5bG9ySW52U3FydChmbG9hdCByKQorKyAgeworKyAgcmV0dXJuICggMC44MzY2NjAwMjY1MzQwOCArIDAuNyowLjg1MzczNDcyMDk1MzE0IC0gMC44NTM3MzQ3MjA5NTMxNCAqIHIgKTsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2UyKHZlYzIgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoMC4yMTEzMjQ4NjU0MDUxODcxMzQsIC8vICgzLjAtc3FydCgzLjApKS82LjsKKysgICAgICAgICAgICAgICAgICAgICAgMC4zNjYwMjU0MDM3ODQ0Mzg1OTcpOyAvLyAwLjUqKHNxcnQoMy4wKS0xLik7CisrICBjb25zdCB2ZWMzIEQgPSB2ZWMzKCAwLiwgMC41LCAyLjApICogMy4xNDE1OTI2NTM1ODk3OTMxMjsKKysvLyBGaXJzdCBjb3JuZXIKKysgIHZlYzIgaSA9IGZsb29yKHYgKyBkb3QodiwgQy55eSkgKTsKKysgIHZlYzIgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4KTsKKysKKysvLyBPdGhlciBjb3JuZXJzCisrICB2ZWMyIGkxID0gKHgwLnggPiB4MC55KSA/IHZlYzIoMS4sMC4pIDogdmVjMigwLiwxLikgOworKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjMiB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHggOworKyAgdmVjMiB4MiA9IHgwIC0gMS4gKyAyLiAqIEMueHggOworKworKy8vIFBlcm11dGF0aW9ucworKyAgaSA9IG1vZChpLCBwUGFyYW0ueCk7CisrICB2ZWMzIHAgPSBwZXJtdXRlKCBwZXJtdXRlKAorKyAgICAgICAgICAgICBpLnkgKyB2ZWMzKDAuLCBpMS55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWMzKDAuLCBpMS54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysKKysjaWZuZGVmIFVTRV9DSVJDTEUKKysvLyAoIE4gcG9pbnRzIHVuaWZvcm1seSBvdmVyIGEgbGluZSwgbWFwcGVkIG9udG8gYSBkaWFtb25kLikKKysgIHZlYzMgeCA9IGZyYWN0KHAgLyBwUGFyYW0udykgOworKyAgdmVjMyBoID0gMC41IC0gYWJzKHgpIDsKKysKKysgIHZlYzMgc3ggPSB2ZWMzKGxlc3NUaGFuKHgsRC54eHgpKSAqMi4gLTEuOworKyAgdmVjMyBzaCA9IHZlYzMobGVzc1RoYW4oaCxELnh4eCkpOworKworKyAgdmVjMyBhMCA9IHggKyBzeCpzaDsKKysgIHZlYzIgcDAgPSB2ZWMyKGEwLngsaC54KTsKKysgIHZlYzIgcDEgPSB2ZWMyKGEwLnksaC55KTsKKysgIHZlYzIgcDIgPSB2ZWMyKGEwLnosaC56KTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyNlbmRpZgorKworKyAgdmVjMyBnID0gMi4wICogdmVjMyggZG90KHAwLCB4MCksIGRvdChwMSwgeDEpLCBkb3QocDIsIHgyKSApOworKyNlbHNlCisrLy8gTiBwb2ludHMgYXJvdW5kIGEgdW5pdCBjaXJjbGUuCisrICB2ZWMzIHBoaSA9IEQueiAqIG1vZChwLHBQYXJhbS53KSAvcFBhcmFtLncgOworKyAgdmVjNCBhMCA9IHNpbihwaGkueHh5eStELnh5eHkpOworKyAgdmVjMiBhMSA9IHNpbihwaGkuenogK0QueHkpOworKyAgdmVjMyBnID0gdmVjMyggZG90KGEwLnh5LCB4MCksIGRvdChhMC56dywgeDEpLCBkb3QoYTEueHksIHgyKSApOworKyNlbmRpZgorKy8vIG1peAorKyAgdmVjMyBtID0gbWF4KDAuNSAtIHZlYzMoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSksIDAuKTsKKysgIG0gPSBtKm0gOworKyAgcmV0dXJuIDEuNjY2NjYqIDcwLipkb3QobSptLCBnKTsKKysgIH0KKysKKytmbG9hdCBzaW1wbGV4Tm9pc2UzKHZlYzMgdikKKysgIHsKKysgIGNvbnN0IHZlYzIgQyA9IHZlYzIoMS4vNi4gLCAxLi8zLiApIDsKKysgIGNvbnN0IHZlYzQgRCA9IHZlYzQoMC4sIDAuNSwgMS4wLCAyLjApOworKworKy8vIEZpcnN0IGNvcm5lcgorKyAgdmVjMyBpID0gZmxvb3IodiArIGRvdCh2LCBDLnl5eSkgKTsKKysgIHZlYzMgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eCkgOworKyAgCisrLy8gT3RoZXIgY29ybmVycworKyNpZmRlZiBDT0xMQVBTRV9TT1JUTkVUCisrICB2ZWMzIGcgPSB2ZWMzKCBncmVhdGVyVGhhbiggeDAueHl6LCB4MC55engpICk7CisrICB2ZWMzIGwgPSB2ZWMzKCBsZXNzVGhhbkVxdWFsKCB4MC54eXosIHgwLnl6eCkgKTsKKysKKysgIHZlYzMgaTEgPSBnLnh5eiAqIGwuenh5OworKyAgdmVjMyBpMiA9IG1heCggZy54eXosIGwuenh5KTsKKysjZWxzZQorKy8vIEtlZXBpbmcgdGhpcyBjbGVhbiAtIGxldCB0aGUgY29tcGlsZXIgb3B0aW1pemUuCisrICB2ZWMzIHExOworKyAgcTEueCA9IG1heCh4MC54LCB4MC55KTsKKysgIHExLnkgPSBtaW4oeDAueCwgeDAueSk7CisrICBxMS56ID0geDAuejsKKysKKysgIHZlYzMgcTI7CisrICBxMi54ID0gbWF4KHExLngscTEueik7CisrICBxMi56ID0gbWluKHExLngscTEueik7CisrICBxMi55ID0gcTEueTsKKysKKysgIHZlYzMgcTM7CisrICBxMy55ID0gbWF4KHEyLnksIHEyLnopOworKyAgcTMueiA9IG1pbihxMi55LCBxMi56KTsKKysgIHEzLnggPSBxMi54OworKworKyAgdmVjMyBpMSA9IHZlYzMoZXF1YWwocTMueHh4LCB4MCkpOworKyAgdmVjMyBpMiA9IGkxICsgdmVjMyhlcXVhbChxMy55eXksIHgwKSk7CisrI2VuZGlmCisrCisrICAgLy8geDAgPSB4MCAtIDAuICsgMC4gKiBDCisrICB2ZWMzIHgxID0geDAgLSBpMSArIDEuICogQy54eHg7CisrICB2ZWMzIHgyID0geDAgLSBpMiArIDIuICogQy54eHg7CisrICB2ZWMzIHgzID0geDAgLSAxLiArIDMuICogQy54eHg7CisrCisrLy8gUGVybXV0YXRpb25zCisrICBpID0gbW9kKGksIHBQYXJhbS54ICk7CisrICB2ZWM0IHAgPSBwZXJtdXRlKCBwZXJtdXRlKCBwZXJtdXRlKAorKyAgICAgICAgICAgICBpLnogKyB2ZWM0KDAuLCBpMS56LCBpMi56LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnkgKyB2ZWM0KDAuLCBpMS55LCBpMi55LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnggKyB2ZWM0KDAuLCBpMS54LCBpMi54LCAxLiApLCBwUGFyYW0ueHl6KTsKKysKKysvLyBHcmFkaWVudHMKKysvLyAoIE4qTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBzcXVhcmUsIG1hcHBlZCBvbnRvIGEgb2N0b2hlZHJvbi4pCisrICBmbG9hdCBuXyA9IDEuMC9wUGFyYW0udyA7CisrICB2ZWMzIG5zID0gbl8gKiBELnd5eiAtIEQueHp4IDsKKysKKysgIHZlYzQgaiA9IHAgLSBwUGFyYW0udypwUGFyYW0udypmbG9vcihwICogbnMueiAqbnMueik7IC8vIG1vZChwLE4qTikKKysKKysgIHZlYzQgeF8gPSBmbG9vcihqICogbnMueikgOworKyAgdmVjNCB5XyA9IGZsb29yKGogLSBwUGFyYW0udyAqIHhfICkgOyAvLyBtb2QoaixOKQorKworKyAgdmVjNCB4ID0geF8gKm5zLnggKyBucy55eXl5OworKyAgdmVjNCB5ID0geV8gKm5zLnggKyBucy55eXl5OworKyAgdmVjNCBoID0gMS4gLSBhYnMoeCkgLSBhYnMoeSk7CisrCisrICB2ZWM0IGIwID0gdmVjNCggeC54eSwgeS54eSApOworKyAgdmVjNCBiMSA9IHZlYzQoIHguencsIHkuencgKTsKKysKKysgIHZlYzQgczAgPSB2ZWM0KGxlc3NUaGFuKGIwLEQueHh4eCkpICoyLiAtMS47CisrICB2ZWM0IHMxID0gdmVjNChsZXNzVGhhbihiMSxELnh4eHgpKSAqMi4gLTEuOworKyAgdmVjNCBzaCA9IHZlYzQobGVzc1RoYW4oaCwgRC54eHh4KSk7CisrCisrICB2ZWM0IGEwID0gYjAueHp5dyArIHMwLnh6eXcqc2gueHh5eSA7CisrICB2ZWM0IGExID0gYjEueHp5dyArIHMxLnh6eXcqc2guenp3dyA7CisrCisrICB2ZWMzIHAwID0gdmVjMyhhMC54eSxoLngpOworKyAgdmVjMyBwMSA9IHZlYzMoYTAuencsaC55KTsKKysgIHZlYzMgcDIgPSB2ZWMzKGExLnh5LGgueik7CisrICB2ZWMzIHAzID0gdmVjMyhhMS56dyxoLncpOworKworKyNpZmRlZiBOT1JNQUxJU0VfR1JBRElFTlRTCisrICBwMCAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMCxwMCkpOworKyAgcDEgKj0gdGF5bG9ySW52U3FydChkb3QocDEscDEpKTsKKysgIHAyICo9IHRheWxvckludlNxcnQoZG90KHAyLHAyKSk7CisrICBwMyAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMyxwMykpOworKyNlbmRpZgorKworKy8vIE1peAorKyAgdmVjNCBtID0gbWF4KDAuNiAtIHZlYzQoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSwgZG90KHgzLHgzKSksIDAuKTsKKysgIG0gPSBtICogbTsKKysvL3VzZWQgdG8gYmUgNjQuCisrICByZXR1cm4gNDguMCAqIGRvdCggbSptLCB2ZWM0KCBkb3QocDAseDApLCBkb3QocDEseDEpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90KHAyLHgyKSwgZG90KHAzLHgzKSApICk7CisrICB9CisrCisrdmVjNCBncmFkNChmbG9hdCBqLCB2ZWM0IGlwKQorKyAgeworKyAgY29uc3QgdmVjNCBvbmVzID0gdmVjNCgxLiwxLiwxLiwtMS4pOworKyAgdmVjNCBwLHM7CisrCisrICBwLnh5eiA9IGZsb29yKCBmcmFjdCAodmVjMyhqKSAqIGlwLnh5eikgKnBQYXJhbS53KSAqIGlwLnogLTEuMDsKKysgIHAudyA9IDEuNSAtIGRvdChhYnMocC54eXopLCBvbmVzLnh5eik7CisrICBzID0gdmVjNChsZXNzVGhhbihwLHZlYzQoMC4pKSk7CisrICBwLnh5eiA9IHAueHl6ICsgKHMueHl6KjIuLTEuKSAqIHMud3d3OworKworKyAgcmV0dXJuIHA7CisrICB9CisrCisrZmxvYXQgc2ltcGxleE5vaXNlNCh2ZWM0IHYpCisrICB7CisrICBjb25zdCB2ZWMyIEMgPSB2ZWMyKCAwLjEzODE5NjYwMTEyNTAxMDUwNCwgLy8gKDUgLSBzcXJ0KDUpKS8yMCBHNAorKyAgICAgICAgICAgICAgICAgICAgICAgIDAuMzA5MDE2OTk0Mzc0OTQ3NDUxKTsgLy8gKHNxcnQoNSkgLSAxKS80IEY0CisrLy8gRmlyc3QgY29ybmVyCisrICB2ZWM0IGkgPSBmbG9vcih2ICsgZG90KHYsIEMueXl5eSkgKTsKKysgIHZlYzQgeDAgPSB2IC0gaSArIGRvdChpLCBDLnh4eHgpOworKworKy8vIE90aGVyIGNvcm5lcnMKKysKKysvLyBGb3JjZSBleGlzdGFuY2Ugb2Ygc3RyaWN0IHRvdGFsIG9yZGVyaW5nIGluIHNvcnQuCisrICB2ZWM0IHEwID0gZmxvb3IoeDAgKiAxMDI0LjApICsgdmVjNCggMC4sIDEuLzQuLCAyLi80LiAsIDMuLzQuKTsKKysgIHZlYzQgcTE7CisrICBxMS54eSA9IG1heChxMC54eSxxMC56dyk7IC8vIHg6eiB5OncKKysgIHExLnp3ID0gbWluKHEwLnh5LHEwLnp3KTsKKysKKysgIHZlYzQgcTI7CisrICBxMi54eiA9IG1heChxMS54eixxMS55dyk7IC8vIHg6eSB6OncKKysgIHEyLnl3ID0gbWluKHExLnh6LHExLnl3KTsKKysgIAorKyAgdmVjNCBxMzsKKysgIHEzLnkgPSBtYXgocTIueSxxMi56KTsgLy8geTp6CisrICBxMy56ID0gbWluKHEyLnkscTIueik7CisrICBxMy54dyA9IHEyLnh3OworKworKyAgdmVjNCBpMSA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy54eHh4LCBxMCkpOworKyAgdmVjNCBpMiA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy55eXl5LCBxMCkpOworKyAgdmVjNCBpMyA9IHZlYzQobGVzc1RoYW5FcXVhbChxMy56enp6LCBxMCkpOworKworKyAgIC8vIHgwID0geDAgLSAwLiArIDAuICogQworKyAgdmVjNCB4MSA9IHgwIC0gaTEgKyAxLiAqIEMueHh4eDsKKysgIHZlYzQgeDIgPSB4MCAtIGkyICsgMi4gKiBDLnh4eHg7CisrICB2ZWM0IHgzID0geDAgLSBpMyArIDMuICogQy54eHh4OworKyAgdmVjNCB4NCA9IHgwIC0gMS4gKyA0LiAqIEMueHh4eDsKKysKKysvLyBQZXJtdXRhdGlvbnMKKysgIGkgPSBtb2QoaSwgcFBhcmFtLnggKTsKKysgIGZsb2F0IGowID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSAoCisrICAgICAgICAgICAgICBpLncsIHBQYXJhbS54eXopICsgaS56LCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgICsgaS55LCBwUGFyYW0ueHl6KSArIGkueCwgcFBhcmFtLnh5eik7CisrICB2ZWM0IGoxID0gcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSggcGVybXV0ZSAoCisrICAgICAgICAgICAgIGkudyArIHZlYzQoaTEudywgaTIudywgaTMudywgMS4gKSwgcFBhcmFtLnh5eikKKysgICAgICAgICAgICsgaS56ICsgdmVjNChpMS56LCBpMi56LCBpMy56LCAxLiApLCBwUGFyYW0ueHl6KQorKyAgICAgICAgICAgKyBpLnkgKyB2ZWM0KGkxLnksIGkyLnksIGkzLnksIDEuICksIHBQYXJhbS54eXopCisrICAgICAgICAgICArIGkueCArIHZlYzQoaTEueCwgaTIueCwgaTMueCwgMS4gKSwgcFBhcmFtLnh5eik7CisrLy8gR3JhZGllbnRzCisrLy8gKCBOKk4qTiBwb2ludHMgdW5pZm9ybWx5IG92ZXIgYSBjdWJlLCBtYXBwZWQgb250byBhIDQtb2N0b2hlZHJvbi4pCisrICB2ZWM0IGlwID0gcFBhcmFtIDsKKysgIGlwLnh5ICo9IHBQYXJhbS53IDsKKysgIGlwLnggKj0gcFBhcmFtLncgOworKyAgaXAgPSB2ZWM0KDEuLDEuLDEuLDIuKSAvIGlwIDsKKysKKysgIHZlYzQgcDAgPSBncmFkNChqMCwgaXApOworKyAgdmVjNCBwMSA9IGdyYWQ0KGoxLngsIGlwKTsKKysgIHZlYzQgcDIgPSBncmFkNChqMS55LCBpcCk7CisrICB2ZWM0IHAzID0gZ3JhZDQoajEueiwgaXApOworKyAgdmVjNCBwNCA9IGdyYWQ0KGoxLncsIGlwKTsKKysKKysjaWZkZWYgTk9STUFMSVNFX0dSQURJRU5UUworKyAgcDAgKj0gdGF5bG9ySW52U3FydChkb3QocDAscDApKTsKKysgIHAxICo9IHRheWxvckludlNxcnQoZG90KHAxLHAxKSk7CisrICBwMiAqPSB0YXlsb3JJbnZTcXJ0KGRvdChwMixwMikpOworKyAgcDMgKj0gdGF5bG9ySW52U3FydChkb3QocDMscDMpKTsKKysgIHA0ICo9IHRheWxvckludlNxcnQoZG90KHA0LHA0KSk7CisrI2VuZGlmCisrCisrLy8gTWl4CisrICB2ZWMzIG0wID0gbWF4KDAuNiAtIHZlYzMoZG90KHgwLHgwKSwgZG90KHgxLHgxKSwgZG90KHgyLHgyKSksIDAuKTsKKysgIHZlYzIgbTEgPSBtYXgoMC42IC0gdmVjMihkb3QoeDMseDMpLCBkb3QoeDQseDQpICksIDAuKTsKKysgIG0wID0gbTAgKiBtMDsKKysgIG0xID0gbTEgKiBtMTsKKysgIHJldHVybiAzMi4gKiAoIGRvdChtMCptMCwgdmVjMyggZG90KCBwMCwgeDAgKSwgZG90KCBwMSwgeDEgKSwgZG90KCBwMiwgeDIgKSkpCisrICAgICAgICAgICAgICAgKyBkb3QobTEqbTEsIHZlYzIoIGRvdCggcDMsIHgzICksIGRvdCggcDQsIHg0ICkgKSApICkgOworKworKyAgfQorKworKworKworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NraW5uaW5nLnZlcnQgYi9zcmMvZ2xzbC9za2lubmluZy52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjg5NzBlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dsc2wvc2tpbm5pbmcudmVydAorQEAgLTAsMCArMSwyNCBAQAorKy8vIFZlcnRleCB3ZWlnaHRpbmcvYmxlbmRpbiBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrLy8gNCBOb3YgMjAwOAorKworK3VuaWZvcm0gbWF0NCBtYXQwLCBtYXQxOworK2F0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7CisrCisrdm9pZCBtYWluKCkgCisreworKyAgIC8vIHNpbXBsZSBkaWZmdXNlIHNoYWRpbmcKKysgICAvLyBOb3RlIHRoYXQgd2Ugc2hvdWxkIHJlYWxseSB0cmFuc2Zvcm0gdGhlIG5vcm1hbCB2ZWN0b3IgYWxvbmcgd2l0aAorKyAgIC8vIHRoZSBwb3N0aW9uIGJlbG93Li4uIHNvbWVkYXkuCisrICAgdmVjMyBsaWdodFZlYyA9IHZlYzMoMCwgMCwgMSk7CisrICAgdmVjMyBub3JtID0gZ2xfTm9ybWFsTWF0cml4ICogZ2xfTm9ybWFsOworKyAgIGZsb2F0IGRvdCA9IDAuMiArIG1heCgwLjAsIGRvdChub3JtLCBsaWdodFZlYykpOworKyAgIGdsX0Zyb250Q29sb3IgPSB2ZWM0KGRvdCk7CisrCisrICAgLy8gY29tcHV0ZSBzdW0gb2Ygd2VpZ2h0ZWQgdHJhbnNmb3JtYXRpb25zCisrICAgdmVjNCBwb3MwID0gbWF0MCAqIGdsX1ZlcnRleDsKKysgICB2ZWM0IHBvczEgPSBtYXQxICogZ2xfVmVydGV4OworKyAgIHZlYzQgcG9zID0gbWl4KHBvczAsIHBvczEsIHdlaWdodCk7CisrCisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogcG9zOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS5mcmFnIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjA4Mzk0MzYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcKK0BAIC0wLDAgKzEsMTkgQEAKKysvLyBNdWx0aS10ZXh0dXJlIGZyYWdtZW50IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysvLyBDb21wb3NpdGUgc2Vjb25kIHRleHR1cmUgb3ZlciBmaXJzdC4KKysvLyBXZSdyZSBhc3N1bWluZyB0aGUgMm5kIHRleHR1cmUgaGFzIGEgbWVhbmluZ2Z1bCBhbHBoYSBjaGFubmVsLgorKworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDE7CisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MjsKKyt1bmlmb3JtIHZlYzQgVW5pVjE7CisrdW5pZm9ybSB2ZWM0IFVuaVYyOworKworK3ZvaWQgbWFpbigpCisreworKyAgIHZlYzQgdDM7CisrICAgdmVjNCB0MSA9IHRleHR1cmUyRCh0ZXgxLCBnbF9UZXhDb29yZFswXS54eSk7CisrICAgdmVjNCB0MiA9IHRleHR1cmUyRCh0ZXgyLCBnbF9UZXhDb29yZFsxXS54eSk7CisrICAgdDMgPSBtaXgodDEsIHQyLCB0Mi53KTsKKysgICBnbF9GcmFnQ29sb3IgPSB0MyArIFVuaVYxICsgVW5pVjI7CisrfQorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgYi9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMS52ZXJ0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uY2VmNTBkYgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTEudmVydAorQEAgLTAsMCArMSwxNCBAQAorKy8vIE11bHRpLXRleHR1cmUgdmVydGV4IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysKKythdHRyaWJ1dGUgdmVjNCBUZXhDb29yZDAsIFRleENvb3JkMTsKKythdHRyaWJ1dGUgdmVjNCBWZXJ0Q29vcmQ7CisrCisrdm9pZCBtYWluKCkKKyt7CisrICAgZ2xfVGV4Q29vcmRbMF0gPSBUZXhDb29yZDA7CisrICAgZ2xfVGV4Q29vcmRbMV0gPSBUZXhDb29yZDE7CisrICAgLy8gbm90ZTogbWF5IHVzZSBnbF9WZXJ0ZXggb3IgVmVydENvb3JkIGhlcmUgZm9yIHRlc3Rpbmc6CisrICAgZ2xfUG9zaXRpb24gPSBnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4ICogZ2xfVmVydGV4OworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi5mcmFnIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjBkZjAzMTkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLmZyYWcKK0BAIC0wLDAgKzEsMTcgQEAKKysvLyBNdWx0aS10ZXh0dXJlIGZyYWdtZW50IHNoYWRlcgorKy8vIEJyaWFuIFBhdWwKKysKKysvLyBDb21wb3NpdGUgc2Vjb25kIHRleHR1cmUgb3ZlciBmaXJzdC4KKysvLyBXZSdyZSBhc3N1bWluZyB0aGUgMm5kIHRleHR1cmUgaGFzIGEgbWVhbmluZ2Z1bCBhbHBoYSBjaGFubmVsLgorKworK3VuaWZvcm0gc2FtcGxlcjJEIHRleDE7CisrdW5pZm9ybSBzYW1wbGVyMkQgdGV4MjsKKyt1bmlmb3JtIHZlYzQgVW5pVjE7CisrdW5pZm9ybSB2ZWM0IFVuaVYyOworKworK3ZvaWQgbWFpbigpCisreworKyAgIHZlYzQgdDEgPSB0ZXh0dXJlMkQodGV4MSwgZ2xfVGV4Q29vcmRbMF0ueHkpOworKyAgIHZlYzQgdDIgPSB0ZXh0dXJlMkQodGV4MiwgZ2xfVGV4Q29vcmRbMV0ueHkpOworKyAgIGdsX0ZyYWdDb2xvciA9IHQxICsgdDIgKyBVbmlWMSArIFVuaVYyOworK30KK2RpZmYgLS1naXQgYS9zcmMvcGVyZi9nbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZTIudmVydAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmNlZjUwZGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK0BAIC0wLDAgKzEsMTQgQEAKKysvLyBNdWx0aS10ZXh0dXJlIHZlcnRleCBzaGFkZXIKKysvLyBCcmlhbiBQYXVsCisrCisrCisrYXR0cmlidXRlIHZlYzQgVGV4Q29vcmQwLCBUZXhDb29yZDE7CisrYXR0cmlidXRlIHZlYzQgVmVydENvb3JkOworKworK3ZvaWQgbWFpbigpCisreworKyAgIGdsX1RleENvb3JkWzBdID0gVGV4Q29vcmQwOworKyAgIGdsX1RleENvb3JkWzFdID0gVGV4Q29vcmQxOworKyAgIC8vIG5vdGU6IG1heSB1c2UgZ2xfVmVydGV4IG9yIFZlcnRDb29yZCBoZXJlIGZvciB0ZXN0aW5nOgorKyAgIGdsX1Bvc2l0aW9uID0gZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCAqIGdsX1ZlcnRleDsKKyt9CitkaWZmIC0tZ2l0IGEvc3JjL3ZwZ2xzbC9pbmZpbml0ZS1sb29wLmdsc2wgYi9zcmMvdnBnbHNsL2luZmluaXRlLWxvb3AuZ2xzbAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmJjN2FlNGIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy92cGdsc2wvaW5maW5pdGUtbG9vcC5nbHNsCitAQCAtMCwwICsxLDggQEAKKyt2b2lkIG1haW4oKSB7CisrICAgZ2xfUG9zaXRpb24gPSBnbF9WZXJ0ZXg7CisrICAgdmVjNCBzdW0gPSB2ZWM0KDApOworKyAgIGZvciAoaW50IGkgPSAxOyBpICE9IDI7IGkgKz0gMikgeworKyAgICAgIHN1bSArPSB2ZWM0KDAuMSwgMC4xLCAwLjEsIDAuMSk7CisrICAgfQorKyAgIGdsX0Zyb250Q29sb3IgPSBzdW07CisrfQorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMi1Db3JyZWN0bHktaW1wbGVtZW50LXdpdGgtQUNfV0lUSC1nbHV0LXNvLXRoYXQtd2l0aG91LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NmFmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDItQ29ycmVjdGx5LWltcGxlbWVudC13aXRoLUFDX1dJVEgtZ2x1dC1zby10aGF0LXdpdGhvdS5wYXRjaApAQCAtMCwwICsxLDU0IEBACitGcm9tIDM2ODI5YThkN2FkMjg4ODUxNWZiZWU5NWMyYTcwYjNkNjM2ZDc1MzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorRGF0ZTogV2VkLCA5IEp1bCAyMDE0IDE0OjMwOjMzICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMi85XSBDb3JyZWN0bHkgaW1wbGVtZW50IHdpdGggQUNfV0lUSChnbHV0KSBzbyB0aGF0CisgLS13aXRob3V0LWdsdXQgd29ya3MuCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDI2ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjNGVlMTJiLi45NDQ1NDI0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NywyMSArNjcsMjUgQEAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xfQ0ZMQUdTIgorIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xfTElCUyIKKyAKKyBkbmwgQ2hlY2sgZm9yIEdMVVQKKy1HTFVUX0NGTEFHUz0iIgorLUdMVVRfTElCUz0tbGdsdXQKKy1nbHV0X2VuYWJsZWQ9eWVzCisrZ2x1dF9lbmFibGVkPW5vCisgQUNfQVJHX1dJVEgoW2dsdXRdLAorIAlbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1nbHV0PURJUl0sCisgCQkJW2dsdXQgaW5zdGFsbCBkaXJlY3RvcnldKV0sCisgCVtHTFVUX0NGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlIgorLQkgR0xVVF9MSUJTPSItTCR3aXRodmFsL2xpYiAtbGdsdXQiXSkKKy1BQ19DSEVDS19IRUFERVIoW0dML2dsdXQuaF0sCistCQlbXSwKKy0JCVtnbHV0X2VuYWJsZWQ9bm9dKQorLUFDX0NIRUNLX0xJQihbZ2x1dF0sCistCQlbZ2x1dEluaXRdLAorLQkJW10sCistCQlbZ2x1dF9lbmFibGVkPW5vXSkKKysJIEdMVVRfTElCUz0iLUwkd2l0aHZhbC9saWIgLWxnbHV0Il0sCisrCVtHTFVUX0NGTEFHUz0iIgorKwkgR0xVVF9MSUJTPSItbGdsdXQiXQorKyAgICAgICAgKQorK0FTX0lGKFt0ZXN0ICJ4JHdpdGhfZ2x1dCIgIT0geG5vXSwKKysgICAgICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHV0LmhdLAorKyAgICAgICAgICAgICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgICAgICAgICAgICBbZ2x1dF9lbmFibGVkPW5vXSkKKysgICAgICAgQUNfQ0hFQ0tfTElCKFtnbHV0XSwKKysgICAgICAgICAgICAgICAgICAgIFtnbHV0SW5pdF0sCisrICAgICAgICAgICAgICAgICAgICBbXSwKKysgICAgICAgICAgICAgICAgICAgIFtnbHV0X2VuYWJsZWQ9bm9dKQorKyAgICAgICBnbHV0X2VuYWJsZWQ9eWVzCisrXSkKKyAKKyBkbmwgQ2hlY2sgZm9yIEZyZWVHTFVUIDIuNiBvciBsYXRlcgorIEFDX0VHUkVQX0hFQURFUihbZ2x1dEluaXRDb250ZXh0UHJvZmlsZV0sCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1OGMyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwMy1jb25maWd1cmUtQWxsb3ctdG8tZGlzYWJsZS1kZW1vcy13aGljaC1yZXF1aXJlLUdMRVctLnBhdGNoCkBAIC0wLDAgKzEsNDI0IEBACitGcm9tIGIyNWU5YzY3NWNmNTYwYjhiMDM3ZGM4NTVjNmIzYjFkMDk5NTc4NjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDkgSnVsIDIwMTQgMTQ6MjM6NDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzldIGNvbmZpZ3VyZTogQWxsb3cgdG8gZGlzYWJsZSBkZW1vcyB3aGljaCByZXF1aXJlIEdMRVcgb3IKKyBHTFUKKworKiBpbiBzb21lIHN5c3RlbXMgd2l0aG91dCBYMTEgc3VwcG9ydCB3ZSBkb24ndCBoYXZlIEdMRVcsIGJ1dAorICBtZXNhLWRlbW9zIGFyZSBzdGlsbCB1c2VmdWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgIHwgNDkgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KKyBzcmMvTWFrZWZpbGUuYW0gICAgICAgICAgICAgICB8IDE0ICsrKysrKy0tLQorIHNyYy9kZW1vcy9NYWtlZmlsZS5hbSAgICAgICAgIHwgNzMgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNyYy9lZ2wvTWFrZWZpbGUuYW0gICAgICAgICAgIHwgIDggKysrLS0KKyBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDQ0ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCisgc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gfCAzMyArKysrKysrKysrLS0tLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgODYgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDk0NDU0MjQuLmJjNGM4ZDEgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTkzLDI1ICs5Myw0NCBAQCBBQ19FR1JFUF9IRUFERVIoW2dsdXRJbml0Q29udGV4dFByb2ZpbGVdLAorIAkJW0FDX0RFRklORShIQVZFX0ZSRUVHTFVUKV0sCisgCQlbXSkKKyAKKy1kbmwgQ2hlY2sgZm9yIEdMRVcKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhHTEVXLCBbZ2xldyA+PSAxLjUuNF0pCistREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xFV19DRkxBR1MiCistREVNT19MSUJTPSIkREVNT19MSUJTICRHTEVXX0xJQlMiCisrQUNfQVJHX0VOQUJMRShbZ2xld10sCisrICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZ2xld10sCisrICAgICAgICBbYnVpbGQgZGVtb3Mgd2hpY2ggcmVxdWlyZSBnbGV3IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgIFtlbmFibGVfZ2xldz0iJGVuYWJsZXZhbCJdLAorKyAgICBbZW5hYmxlX2dsZXc9eWVzXQorKykKKysKKytpZiB0ZXN0ICJ4JGVuYWJsZV9nbGV3IiA9IHh5ZXM7IHRoZW4KKysgICAgZG5sIENoZWNrIGZvciBHTEVXCisrICAgIFBLR19DSEVDS19NT0RVTEVTKEdMRVcsIFtnbGV3ID49IDEuNS40XSwgW2dsZXdfZW5hYmxlZD15ZXNdLCBbZ2xld19lbmFibGVkPW5vXSkKKysgICAgREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xFV19DRkxBR1MiCisrICAgIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xFV19MSUJTIgorK2ZpCisgCisgIyBMSUJTIHdhcyBzZXQgYnkgQUNfQ0hFQ0tfTElCIGFib3ZlCisgTElCUz0iIgorIAorLVBLR19DSEVDS19NT0RVTEVTKEdMVSwgW2dsdV0sIFtdLAorLQkJICBbQUNfQ0hFQ0tfSEVBREVSKFtHTC9nbHUuaF0sCistCQkJCSAgIFtdLAorLQkJICAJCSAgIEFDX01TR19FUlJPUihbR0xVIG5vdCBmb3VuZF0pKQorLQkJICAgQUNfQ0hFQ0tfTElCKFtHTFVdLAorLQkJCQlbZ2x1QmVnaW5DdXJ2ZV0sCistCQkJCVtHTFVfTElCUz0tbEdMVV0sCistCQkJCUFDX01TR19FUlJPUihbR0xVIHJlcXVpcmVkXSkpIF0pCisrQUNfQVJHX0VOQUJMRShbZ2x1XSwKKysgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1nbHVdLAorKyAgICAgICAgW2J1aWxkIGRlbW9zIHdoaWNoIHJlcXVpcmUgZ2x1IEA8OkBkZWZhdWx0PXllc0A6PkBdKV0sCisrICAgIFtlbmFibGVfZ2x1PSIkZW5hYmxldmFsIl0sCisrICAgIFtlbmFibGVfZ2x1PXllc10KKyspCisgCistREVNT19DRkxBR1M9IiRERU1PX0NGTEFHUyAkR0xVX0NGTEFHUyIKKy1ERU1PX0xJQlM9IiRERU1PX0xJQlMgJEdMVV9MSUJTIgorK2lmIHRlc3QgIngkZW5hYmxlX2dsdSIgPSB4eWVzOyB0aGVuCisrICAgIFBLR19DSEVDS19NT0RVTEVTKEdMVSwgW2dsdV0sIFtnbHVfZW5hYmxlZD15ZXNdLAorKyAgICAgICAgICAgICAgICAgICAgIFtBQ19DSEVDS19IRUFERVIoW0dML2dsdS5oXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtHTFUgbm90IGZvdW5kXSkpCisrICAgICAgICAgICAgICAgICAgICAgIEFDX0NIRUNLX0xJQihbR0xVXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbHVCZWdpbkN1cnZlXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtHTFVfTElCUz0tbEdMVQorKwkJCQkgICAgZ2x1X2VuYWJsZWQ9eWVzXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbR0xVIHJlcXVpcmVkXSkpIF0pCisrCisrICAgIERFTU9fQ0ZMQUdTPSIkREVNT19DRkxBR1MgJEdMVV9DRkxBR1MiCisrICAgIERFTU9fTElCUz0iJERFTU9fTElCUyAkR0xVX0xJQlMiCisrZmkKKyAKKyBBQ19BUkdfRU5BQkxFKFtlZ2xdLAorICAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWVnbF0sCitAQCAtMzA0LDYgKzMyMyw4IEBAIEFDX1NVQlNUKFtXQVlMQU5EX0NGTEFHU10pCisgQUNfU1VCU1QoW1dBWUxBTkRfTElCU10pCisgCisgCisrQU1fQ09ORElUSU9OQUwoSEFWRV9HTFUsIHRlc3QgIngkZ2x1X2VuYWJsZWQiID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKEhBVkVfR0xFVywgdGVzdCAieCRnbGV3X2VuYWJsZWQiID0gInh5ZXMiKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfRUdMLCB0ZXN0ICJ4JGVnbF9lbmFibGVkIiA9ICJ4eWVzIikKKyBBTV9DT05ESVRJT05BTChIQVZFX0dMRVNWMSwgdGVzdCAieCRnbGVzdjFfZW5hYmxlZCIgPSAieHllcyIpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9HTEVTVjIsIHRlc3QgIngkZ2xlc3YyX2VuYWJsZWQiID0gInh5ZXMiKQorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggMTY0N2Q2NC4uNzU0YzQ3YyAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMjMsMTQgKzIzLDE4IEBACisgIyAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorIAorK2lmIEhBVkVfR0xFVworK1VUSUwgPSB1dGlsCisrZW5kaWYKKysKKyBTVUJESVJTID0gXAorLQl1dGlsIFwKKysJJChVVElMKSBcCisgCWRhdGEgXAorIAlkZW1vcyBcCisgCWVnbCBcCisgCWZwIFwKKyAJZnBnbHNsIFwKKyAJZ2xzbCBcCistICAgICAgICBncyBcCisrCWdzIFwKKyAJb2Jqdmlld2VyIFwKKyAJb3NkZW1vcyBcCisgCXBlcmYgXAorQEAgLTQwLDggKzM5LDEyIEBAIFNVQkRJUlMgPSBcCisgCXNsYW5nIFwKKyAJdGVzdHMgXAorIAl0b29scyBcCistCXRyaXZpYWwgXAorLQl2cCBcCistCXZwZ2xzbCBcCisgCXdnbCBcCisgCXhkZW1vcworKworK2lmIEhBVkVfR0xFVworK1NVQkRJUlMgKz0gXAorKwl2cCBcCisrCXZwZ2xzbCBcCisrCXRyaXZpYWwKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9kZW1vcy9NYWtlZmlsZS5hbSBiL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQoraW5kZXggNDE2MDNmYS4uYWIxZTNhYiAxMDA2NDQKKy0tLSBhL3NyYy9kZW1vcy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2RlbW9zL01ha2VmaWxlLmFtCitAQCAtMzAsOTEgKzMwLDEwMCBAQCBBTV9MREZMQUdTID0gXAorIAkkKERFTU9fTElCUykgXAorIAkkKEdMVVRfTElCUykKKyAKKytiaW5fUFJPR1JBTVMgPQorKworIGlmIEhBVkVfR0xVVAorLWJpbl9QUk9HUkFNUyA9IFwKKytpZiBIQVZFX0dMRVcKKytiaW5fUFJPR1JBTVMgKz0gXAorIAlhcmJmcGxpZ2h0IFwKKyAJYXJiZnNsaWdodCBcCisgCWFyYm9jY2x1ZGUgXAorIAlhcmJvY2NsdWRlMiBcCistCWJvdW5jZSBcCistCWNsZWFyc3BkIFwKKyAJY29weXBpeCBcCisgCWN1YmVtYXAgXAorIAljdWJlcmVuZGVyIFwKKyAJZGlub3NoYWRlIFwKKy0JZGlzc29sdmUgXAorLQlkcmF3cGl4IFwKKyAJZW5naW5lIFwKKyAJZmJvX2ZpcmVjdWJlIFwKKyAJZmJvdGV4dHVyZSBcCistCWZpcmUgXAorIAlmb2djb29yZCBcCisgCWZwbGlnaHQgXAorIAlmc2xpZ2h0IFwKKysJZ2xvc3MgXAorKwlpc29zdXJmIFwKKysJbXVsdGlhcmIgXAorKwlwYWx0ZXggXAorKwlwb2ludGJsYXN0IFwKKysJcHJvanRleCBcCisrCXNoYWRvd3RleCBcCisrCXNwcml0ZWJsYXN0IFwKKysJc3RleDNkIFwKKysJdGV4dHVyZXMgXAorKwl2YW9fZGVtbyBcCisrCXdpbnBvcworKworK2NvcHlwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytjdWJlbWFwX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrY3ViZXJlbmRlcl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2VuZ2luZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2Zib19maXJlY3ViZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK2dsb3NzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisraXNvc3VyZl9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK211bHRpYXJiX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrcHJvanRleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorK3RleHR1cmVzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrd2lucG9zX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5kaWYKKysKKytpZiBIQVZFX0dMVQorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWJvdW5jZSBcCisrCWNsZWFyc3BkIFwKKysJZGlzc29sdmUgXAorKwlkcmF3cGl4IFwKKysJZmlyZSBcCisgCWdhbW1hIFwKKyAJZ2VhcmJveCBcCisgCWdlYXJzIFwKKyAJZ2VhcnRyYWluIFwKKyAJZ2xpbmZvIFwKKy0JZ2xvc3MgXAorIAlnbHRlc3RwZXJmIFwKKyAJaXBlcnMgXAorLQlpc29zdXJmIFwKKyAJbG9kYmlhcyBcCisgCW1vcnBoM2QgXAorLQltdWx0aWFyYiBcCistCXBhbHRleCBcCisgCXBpeGVsdGVzdCBcCistCXBvaW50Ymxhc3QgXAorLQlwcm9qdGV4IFwKKyAJcmF5IFwKKyAJcmVhZHBpeCBcCisgCXJlZmxlY3QgXAorIAlyZW5vcm1hbCBcCistCXNoYWRvd3RleCBcCisgCXNpbmdsZWJ1ZmZlciBcCisgCXNwZWN0ZXggXAorLQlzcHJpdGVibGFzdCBcCistCXN0ZXgzZCBcCisgCXRlYXBvdCBcCisgCXRlcnJhaW4gXAorIAl0ZXNzZGVtbyBcCisgCXRleGN5bCBcCisgCXRleGVudiBcCistCXRleHR1cmVzIFwKKyAJdHJpc3BkIFwKKyAJdHVubmVsMiBcCistCXR1bm5lbCBcCistCXZhb19kZW1vIFwKKy0Jd2lucG9zCistZW5kaWYKKysJdHVubmVsCisgCisgdHVubmVsX1NPVVJDRVMgPSBcCisgCXR1bm5lbC5jIFwKKyAJdHVubmVsZGF0LmgKKyAKKy1jb3B5cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistY3ViZW1hcF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWN1YmVyZW5kZXJfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1kcmF3cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgZGlzc29sdmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1lbmdpbmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1mYm9fZmlyZWN1YmVfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKytkcmF3cGl4X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgZmlyZV9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLWdsb3NzX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgaXBlcnNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKy1pc29zdXJmX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgbG9kYmlhc19MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorLW11bHRpYXJiX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistcHJvanRleF9MREFERCA9IC4uL3V0aWwvbGlidXRpbC5sYQorIHJlYWRwaXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyByZWZsZWN0X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdGVhcG90X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdGV4Y3lsX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistdGV4dHVyZXNfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0dW5uZWxfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB0dW5uZWwyX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCistd2lucG9zX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisrZW5kaWYKKytlbmRpZgorIAorIEVYVFJBX0RJU1QgPSBcCisgCVJFQURNRQorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL01ha2VmaWxlLmFtCitpbmRleCBkNjRhNDllLi40ZmUxY2E4IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9NYWtlZmlsZS5hbQorQEAgLTI0LDggKzI0LDEyIEBACisgCisgU1VCRElSUyA9IFwKKyAJZWdsdXQgXAorLQlvcGVuZ2wgXAorLQlvcGVudmcgXAorIAlvcGVuZ2xlczEgXAorIAlvcGVuZ2xlczIgXAorIAlvZXNfdmcKKysKKytpZiBIQVZFX0dMVQorK1NVQkRJUlMgKz0gXAorKwlvcGVuZ2wgXAorKwlvcGVudmcKKytlbmRpZgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK2luZGV4IDdhOTgyOGQuLjM0NTVlNzUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK0BAIC0zNiwyOCArMzYsNDMgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChFR0xfTElCUykgXAorIAktbG0KKyAKKytub2luc3RfUFJPR1JBTVMgPQorKworIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjEKKy1ub2luc3RfUFJPR1JBTVMgPSBcCistCWJpbmR0ZXggXAorLQljbGVhciBcCisrbm9pbnN0X1BST0dSQU1TICs9IFwKKyAJZHJhd3RleF9zY3JlZW4gXAorKwlnZWFyc19zY3JlZW4gXAorKwl0b3J1c19zY3JlZW4gXAorKwl0cmlfc2NyZWVuCisrCisrZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYworK2dlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYworK3RvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYworK3RyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCisrCisrZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKytnZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyt0b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyt0cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCisrCisraWYgSEFWRV9YMTEKKytub2luc3RfUFJPR1JBTVMgKz0gXAorKwljbGVhcgorKworK2Jpbl9QUk9HUkFNUyA9IFwKKysJYmluZHRleCBcCisgCWRyYXd0ZXhfeDExIFwKKyAJZWdsZmJkZXYgXAorIAllczFfaW5mbyBcCistCWdlYXJzX3NjcmVlbiBcCisgCWdlYXJzX3gxMSBcCisgCW1zYWEgXAorIAlwYnVmZmVyXAorIAlyZW5kZXJfdGV4IFwKKyAJdGV4dHVyZV9mcm9tX3BpeG1hcCBcCistCXRvcnVzX3NjcmVlbiBcCisgCXRvcnVzX3gxMSBcCistCXRyaV9zY3JlZW4gXAorIAl0cmlfeDExIFwKKyAJdHdvX3dpbgorLWVuZGlmCistZW5kaWYKKyAKKyBiaW5kdGV4X0xEQUREID0gJChYMTFfTElCUykKKyBlczFfaW5mb19MREFERCA9ICQoWDExX0xJQlMpCitAQCAtNzEsMjIgKzg2LDE1IEBAIHR3b193aW5fTERBREQgPSAkKFgxMV9MSUJTKQorIGNsZWFyX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhICQoRUdMX0xJQlMpICQoWDExX0xJQlMpCisgY2xlYXJfTERGTEFHUyA9CisgCistZHJhd3RleF9zY3JlZW5fU09VUkNFUyA9IGRyYXd0ZXguYworLWdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZ2VhcnMuYworLXRvcnVzX3NjcmVlbl9TT1VSQ0VTID0gdG9ydXMuYworLXRyaV9zY3JlZW5fU09VUkNFUyA9IHRyaS5jCistCisgZHJhd3RleF94MTFfU09VUkNFUyA9IGRyYXd0ZXguYworIGdlYXJzX3gxMV9TT1VSQ0VTID0gZ2VhcnMuYworIHRvcnVzX3gxMV9TT1VSQ0VTID0gdG9ydXMuYworIHRyaV94MTFfU09VUkNFUyA9IHRyaS5jCisgCistZHJhd3RleF9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy1nZWFyc19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy10b3J1c19zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKy10cmlfc2NyZWVuX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfc2NyZWVuLmxhCistCisgZHJhd3RleF94MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyBnZWFyc194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyB0b3J1c194MTFfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF94MTEubGEKKyB0cmlfeDExX0xEQUREID0gLi4vZWdsdXQvbGliZWdsdXRfeDExLmxhCisrZW5kaWYKKytlbmRpZgorK2VuZGlmCitkaWZmIC0tZ2l0IGEvc3JjL2VnbC9vcGVuZ2xlczIvTWFrZWZpbGUuYW0gYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQoraW5kZXggNDFjMWI4MC4uNzRhZjQ2MCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsZXMyL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZWdsL29wZW5nbGVzMi9NYWtlZmlsZS5hbQorQEAgLTM2LDI2ICszNiwyOSBAQCBBTV9MREZMQUdTID0gXAorIGlmIEhBVkVfRUdMCisgaWYgSEFWRV9HTEVTVjIKKyBiaW5fUFJPR1JBTVMgPSBcCistCWVzMl9pbmZvIFwKKy0JZXMyZ2VhcnNfc2NyZWVuIFwKKy0JZXMyZ2VhcnNfeDExIFwKKy0JZXMydHJpCisrCWVzMmdlYXJzX3NjcmVlbgorKworK2VzMmdlYXJzX3NjcmVlbl9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorKworIGlmIEhBVkVfV0FZTEFORAorIGJpbl9QUk9HUkFNUyArPSBlczJnZWFyc193YXlsYW5kCistZW5kaWYKKy1lbmRpZgorLWVuZGlmCisgCistZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorLWVzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCisrZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworK2VzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCisrZW5kaWYKKyAKKy1lczJnZWFyc19zY3JlZW5fU09VUkNFUyA9IGVzMmdlYXJzLmMKKytpZiBIQVZFX1gxMQorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWVzMnRyaSBcCisrCWVzMl9pbmZvIFwKKysJZXMyZ2VhcnNfeDExCisgCisrZXMyX2luZm9fTERBREQgPSAkKFgxMV9MSUJTKQorIGVzMmdlYXJzX3gxMV9TT1VSQ0VTID0gZXMyZ2VhcnMuYworLQorLWVzMmdlYXJzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorLQorIGVzMmdlYXJzX3gxMV9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3gxMS5sYQorK2VzMnRyaV9MREFERCA9ICQoWDExX0xJQlMpCisrZW5kaWYKKytlbmRpZgorK2VuZGlmCisgCistZXMyZ2VhcnNfd2F5bGFuZF9TT1VSQ0VTID0gZXMyZ2VhcnMuYworLWVzMmdlYXJzX3dheWxhbmRfTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF93YXlsYW5kLmxhCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNC1Vc2UtREVNT1NfREFUQV9ESVItdG8tbG9jYXRlLWRhdGEtZmlsZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2I5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDQtVXNlLURFTU9TX0RBVEFfRElSLXRvLWxvY2F0ZS1kYXRhLWZpbGVzLnBhdGNoCkBAIC0wLDAgKzEsMjM0IEBACitGcm9tIDVlMTAxMDhkNzZhNTlhYmFjMjFjN2U1NDBiY2ZkMmRkYWNjY2EyY2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEcmV3IE1vc2VsZXkgPGRyZXdfbW9zZWxleUBtZW50b3IuY29tPgorRGF0ZTogRnJpLCA5IE1heSAyMDE0IDExOjUwOjI0IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0ggNC85XSBVc2UgREVNT1NfREFUQV9ESVIgdG8gbG9jYXRlIGRhdGEgZmlsZXMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NDk2XQorU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKy0tLQorIHNyYy9nbHNsL2Jlemllci5jICAgICAgICAgICB8ICAyICstCisgc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMgIHwgIDQgKystLQorIHNyYy9nbHNsL2JyaWNrLmMgICAgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9idW1wLmMgICAgICAgICAgICAgfCAgNiArKystLS0KKyBzcmMvZ2xzbC9jb252b2x1dGlvbnMuYyAgICAgfCAgMiArLQorIHNyYy9nbHNsL21hbmRlbGJyb3QuYyAgICAgICB8ICA0ICsrLS0KKyBzcmMvZ2xzbC9tdWx0aXRleC5jICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jICAgIHwgIDIgKy0KKyBzcmMvZ2xzbC9za2lubmluZy5jICAgICAgICAgfCAgNCArKy0tCisgc3JjL2dsc2wvdGV4ZGVtbzEuYyAgICAgICAgIHwgIDggKysrKy0tLS0KKyBzcmMvZ2xzbC90b3liYWxsLmMgICAgICAgICAgfCAgNCArKy0tCisgc3JjL29ianZpZXdlci9vYmp2aWV3LmMgICAgIHwgMTIgKysrKysrLS0tLS0tCisgc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jIHwgIDggKysrKy0tLS0KKyAxMyBmaWxlcyBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2Jlemllci5jIGIvc3JjL2dsc2wvYmV6aWVyLmMKK2luZGV4IDBiNTZiYzEuLmUwMTYwM2QgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9iZXppZXIuYworKysrIGIvc3JjL2dsc2wvYmV6aWVyLmMKK0BAIC0xMyw3ICsxMyw3IEBACisgI2luY2x1ZGUgImdsdXRfd3JhcC5oIgorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCistc3RhdGljIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gImJlemllci5nZW9tIjsKKytzdGF0aWMgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBERU1PU19EQVRBX0RJUiAiYmV6aWVyLmdlb20iOworIAorIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKKyBzdGF0aWMgR0x1aW50IHZlcnRTaGFkZXI7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvYmxpbmtpbmctdGVhcG90LmMgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworaW5kZXggZTNiZjI0ZC4uNzY2MmIxZiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2JsaW5raW5nLXRlYXBvdC5jCisrKysgYi9zcmMvZ2xzbC9ibGlua2luZy10ZWFwb3QuYworQEAgLTYzLDggKzYzLDggQEAgaW5pdF9vcGVuZ2wgKHZvaWQpCisgICAgICBleGl0KDEpOworICAgfSAgICAgCisgCistICB2c2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9WRVJURVhfU0hBREVSLCAiYmxpbmtpbmctdGVhcG90LnZlcnQiKTsKKy0gIGZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX0ZSQUdNRU5UX1NIQURFUiwgImJsaW5raW5nLXRlYXBvdC5mcmFnIik7CisrICB2c2hhZF9pZCA9IENvbXBpbGVTaGFkZXJGaWxlIChHTF9WRVJURVhfU0hBREVSLCBERU1PU19EQVRBX0RJUiAiYmxpbmtpbmctdGVhcG90LnZlcnQiKTsKKysgIGZzaGFkX2lkID0gQ29tcGlsZVNoYWRlckZpbGUgKEdMX0ZSQUdNRU5UX1NIQURFUiwgREVNT1NfREFUQV9ESVIgImJsaW5raW5nLXRlYXBvdC5mcmFnIik7CisgICBwcm9nX2lkID0gTGlua1NoYWRlcnMgKHZzaGFkX2lkLCBmc2hhZF9pZCk7CisgCisgICBVc2VQcm9ncmFtIChwcm9nX2lkKTsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9icmljay5jIGIvc3JjL2dsc2wvYnJpY2suYworaW5kZXggMzAyMTg1Ni4uZmU1ZjE5MCAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL2JyaWNrLmMKKysrKyBiL3NyYy9nbHNsL2JyaWNrLmMKK0BAIC0xNCw4ICsxNCw4IEBACisgI2luY2x1ZGUgInNoYWRlcnV0aWwuaCIKKyAKKyAKKy1zdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gIkNIMDYtYnJpY2suZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDA2LWJyaWNrLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gwNi1icmljay5mcmFnIjsKKytzdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMDYtYnJpY2sudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9idW1wLmMgYi9zcmMvZ2xzbC9idW1wLmMKK2luZGV4IDU5ZjYyY2QuLjNhMWIyMGEgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9idW1wLmMKKysrKyBiL3NyYy9nbHNsL2J1bXAuYworQEAgLTE1LDkgKzE1LDkgQEAKKyAjaW5jbHVkZSAicmVhZHRleC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwLmZyYWciOworLXN0YXRpYyBjaGFyICpGcmFnVGV4UHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwdGV4LmZyYWciOworLXN0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSAiQ0gxMS1idW1wbWFwLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwLmZyYWciOworK3N0YXRpYyBjaGFyICpGcmFnVGV4UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwdGV4LmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxMS1idW1wbWFwLnZlcnQiOworIHN0YXRpYyBjaGFyICpUZXh0dXJlRmlsZSA9IERFTU9TX0RBVEFfRElSICJ0aWxlLnJnYiI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL2NvbnZvbHV0aW9ucy5jIGIvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKK2luZGV4IGExMjBjZmUuLjkzMTJmMDAgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9jb252b2x1dGlvbnMuYworKysrIGIvc3JjL2dsc2wvY29udm9sdXRpb25zLmMKK0BAIC0zNDAsNyArMzQwLDcgQEAgc3RhdGljIHZvaWQgaW5pdCh2b2lkKQorIAorICAgIG1lbnVJbml0KCk7CisgICAgcmVhZFRleHR1cmUodGV4dHVyZUxvY2F0aW9uKTsKKy0gICBjcmVhdGVQcm9ncmFtKCJjb252b2x1dGlvbi52ZXJ0IiwgImNvbnZvbHV0aW9uLmZyYWciKTsKKysgICBjcmVhdGVQcm9ncmFtKERFTU9TX0RBVEFfRElSICJjb252b2x1dGlvbi52ZXJ0IiwgREVNT1NfREFUQV9ESVIgImNvbnZvbHV0aW9uLmZyYWciKTsKKyAKKyAgICBnbEVuYWJsZShHTF9URVhUVVJFXzJEKTsKKyAgICBnbENsZWFyQ29sb3IoMS4wLCAxLjAsIDEuMCwgMS4wKTsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9tYW5kZWxicm90LmMgYi9zcmMvZ2xzbC9tYW5kZWxicm90LmMKK2luZGV4IDMxZWRlMWQuLmFiMzRhMGYgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9tYW5kZWxicm90LmMKKysrKyBiL3NyYy9nbHNsL21hbmRlbGJyb3QuYworQEAgLTE0LDggKzE0LDggQEAKKyAjaW5jbHVkZSAic2hhZGVydXRpbC5oIgorIAorIAorLXN0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSAiQ0gxOC1tYW5kZWwuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDE4LW1hbmRlbC52ZXJ0IjsKKytzdGF0aWMgY2hhciAqRnJhZ1Byb2dGaWxlID0gREVNT1NfREFUQV9ESVIgIkNIMTgtbWFuZGVsLmZyYWciOworK3N0YXRpYyBjaGFyICpWZXJ0UHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAiQ0gxOC1tYW5kZWwudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9tdWx0aXRleC5jIGIvc3JjL2dsc2wvbXVsdGl0ZXguYworaW5kZXggMjYyZWE1MC4uNTQ2YmQyNyAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL211bHRpdGV4LmMKKysrKyBiL3NyYy9nbHNsL211bHRpdGV4LmMKK0BAIC0zNSw4ICszNSw4IEBACisgCisgc3RhdGljIGNvbnN0IGNoYXIgKkRlbW8gPSAibXVsdGl0ZXgiOworIAorLXN0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZSA9ICJtdWx0aXRleC52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUgPSAibXVsdGl0ZXguZnJhZyI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlID0gREVNT1NfREFUQV9ESVIgIm11bHRpdGV4LnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZSA9IERFTU9TX0RBVEFfRElSICJtdWx0aXRleC5mcmFnIjsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqVGV4RmlsZXNbMl0gPSAKKyAgICB7CitkaWZmIC0tZ2l0IGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jIGIvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCitpbmRleCAxM2ZkZDVkLi44ODVmMDFlIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvc2ltcGxleC1ub2lzZS5jCisrKysgYi9zcmMvZ2xzbC9zaW1wbGV4LW5vaXNlLmMKK0BAIC0xNjksNyArMTY5LDcgQEAgU3BlY2lhbEtleShpbnQga2V5LCBpbnQgeCwgaW50IHkpCisgc3RhdGljIHZvaWQKKyBJbml0KHZvaWQpCisgeworLSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lID0gInNpbXBsZXgtbm9pc2UuZ2xzbCI7CisrICAgY29uc3QgY2hhciAqZmlsZW5hbWUgPSBERU1PU19EQVRBX0RJUiAic2ltcGxleC1ub2lzZS5nbHNsIjsKKyAgICBjaGFyIG5vaXNlVGV4dFsxMDAwMF07CisgICAgRklMRSAqZjsKKyAgICBpbnQgbGVuOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3NraW5uaW5nLmMgYi9zcmMvZ2xzbC9za2lubmluZy5jCitpbmRleCBiZjM4ZDc3Li41MzZkNDc1IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvc2tpbm5pbmcuYworKysrIGIvc3JjL2dsc2wvc2tpbm5pbmcuYworQEAgLTIwLDggKzIwLDggQEAKKyAjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1CisgI2VuZGlmCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJza2lubmluZy5mcmFnIjsKKy1zdGF0aWMgY2hhciAqVmVydFByb2dGaWxlID0gInNraW5uaW5nLnZlcnQiOworK3N0YXRpYyBjaGFyICpGcmFnUHJvZ0ZpbGUgPSBERU1PU19EQVRBX0RJUiAic2tpbm5pbmcuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJza2lubmluZy52ZXJ0IjsKKyAKKyAvKiBwcm9ncmFtL3NoYWRlciBvYmplY3RzICovCisgc3RhdGljIEdMdWludCBmcmFnU2hhZGVyOworZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3RleGRlbW8xLmMgYi9zcmMvZ2xzbC90ZXhkZW1vMS5jCitpbmRleCA2Y2RlMjM5Li5hMDgyMzQyIDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvdGV4ZGVtbzEuYworKysrIGIvc3JjL2dsc2wvdGV4ZGVtbzEuYworQEAgLTM1LDExICszNSwxMSBAQAorIAorIHN0YXRpYyBjb25zdCBjaGFyICpEZW1vID0gInRleGRlbW8xIjsKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqUmVmbGVjdFZlcnRGaWxlID0gInJlZmxlY3QudmVydCI7Cistc3RhdGljIGNvbnN0IGNoYXIgKkN1YmVGcmFnRmlsZSA9ICJjdWJlbWFwLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpSZWZsZWN0VmVydEZpbGUgPSBERU1PU19EQVRBX0RJUiAicmVmbGVjdC52ZXJ0IjsKKytzdGF0aWMgY29uc3QgY2hhciAqQ3ViZUZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgImN1YmVtYXAuZnJhZyI7CisgCistc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVZlcnRGaWxlID0gInNpbXBsZS52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqU2ltcGxlVGV4RnJhZ0ZpbGUgPSAic2hhZG93dGV4LmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpTaW1wbGVWZXJ0RmlsZSA9IERFTU9TX0RBVEFfRElSICJzaW1wbGUudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKlNpbXBsZVRleEZyYWdGaWxlID0gREVNT1NfREFUQV9ESVIgInNoYWRvd3RleC5mcmFnIjsKKyAKKyBzdGF0aWMgY29uc3QgY2hhciAqR3JvdW5kSW1hZ2UgPSBERU1PU19EQVRBX0RJUiAidGlsZS5yZ2IiOworIAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL3RveWJhbGwuYyBiL3NyYy9nbHNsL3RveWJhbGwuYworaW5kZXggNWYyNzk1MS4uNGU3ZTgzMiAxMDA2NDQKKy0tLSBhL3NyYy9nbHNsL3RveWJhbGwuYworKysrIGIvc3JjL2dsc2wvdG95YmFsbC5jCitAQCAtMTQsOCArMTQsOCBAQAorICNpbmNsdWRlICJzaGFkZXJ1dGlsLmgiCisgCisgCistc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9ICJDSDExLXRveWJhbGwuZnJhZyI7Cistc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9ICJDSDExLXRveWJhbGwudmVydCI7Cisrc3RhdGljIGNoYXIgKkZyYWdQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLXRveWJhbGwuZnJhZyI7Cisrc3RhdGljIGNoYXIgKlZlcnRQcm9nRmlsZSA9IERFTU9TX0RBVEFfRElSICJDSDExLXRveWJhbGwudmVydCI7CisgCisgLyogcHJvZ3JhbS9zaGFkZXIgb2JqZWN0cyAqLworIHN0YXRpYyBHTHVpbnQgZnJhZ1NoYWRlcjsKK2RpZmYgLS1naXQgYS9zcmMvb2Jqdmlld2VyL29ianZpZXcuYyBiL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCitpbmRleCA2ZGVmNzI2Li43OGE2YWNmIDEwMDY0NAorLS0tIGEvc3JjL29ianZpZXdlci9vYmp2aWV3LmMKKysrKyBiL3NyYy9vYmp2aWV3ZXIvb2Jqdmlldy5jCitAQCAtMTYyLDEyICsxNjIsMTIgQEAgaW5pdF9tb2RlbCh2b2lkKQorIHN0YXRpYyB2b2lkCisgaW5pdF9za3lib3godm9pZCkKKyB7CistICAgU2t5Ym94VGV4ID0gTG9hZFNreUJveEN1YmVUZXh0dXJlKCJhbHBpbmVfZWFzdC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX3dlc3QucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV91cC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX2Rvd24ucmdiIiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFscGluZV9zb3V0aC5yZ2IiLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxwaW5lX25vcnRoLnJnYiIpOworKyAgIFNreWJveFRleCA9IExvYWRTa3lCb3hDdWJlVGV4dHVyZShERU1PU19EQVRBX0RJUiAiYWxwaW5lX2Vhc3QucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV93ZXN0LnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfdXAucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9kb3duLnJnYiIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFTU9TX0RBVEFfRElSICJhbHBpbmVfc291dGgucmdiIiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVNT1NfREFUQV9ESVIgImFscGluZV9ub3J0aC5yZ2IiKTsKKyAgICBnbG1TcGVjdWxhclRleHR1cmUoTW9kZWwsIFNreWJveFRleCk7CisgfQorIAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYyBiL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworaW5kZXggNzQyMmI3OC4uZGJmODMzMiAxMDA2NDQKKy0tLSBhL3NyYy9wZXJmL2dsc2xzdGF0ZXNjaGFuZ2UuYworKysrIGIvc3JjL3BlcmYvZ2xzbHN0YXRlc2NoYW5nZS5jCitAQCAtMzMsMTAgKzMzLDEwIEBACisgI2luY2x1ZGUgImdsbWFpbi5oIgorICNpbmNsdWRlICJjb21tb24uaCIKKyAKKy1zdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUxID0gImdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQiOworLXN0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTEgPSAiZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyI7Cistc3RhdGljIGNvbnN0IGNoYXIgKlZlcnRGaWxlMiA9ICJnbHNsc3RhdGVzY2hhbmdlMi52ZXJ0IjsKKy1zdGF0aWMgY29uc3QgY2hhciAqRnJhZ0ZpbGUyID0gImdsc2xzdGF0ZXNjaGFuZ2UyLmZyYWciOworK3N0YXRpYyBjb25zdCBjaGFyICpWZXJ0RmlsZTEgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTEudmVydCI7Cisrc3RhdGljIGNvbnN0IGNoYXIgKkZyYWdGaWxlMSA9IERFTU9TX0RBVEFfRElSICJnbHNsc3RhdGVzY2hhbmdlMS5mcmFnIjsKKytzdGF0aWMgY29uc3QgY2hhciAqVmVydEZpbGUyID0gREVNT1NfREFUQV9ESVIgImdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQiOworK3N0YXRpYyBjb25zdCBjaGFyICpGcmFnRmlsZTIgPSBERU1PU19EQVRBX0RJUiAiZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyI7Cisgc3RhdGljIHN0cnVjdCB1bmlmb3JtX2luZm8gVW5pZm9ybXMxW10gPSB7CisgICAgeyAidGV4MSIsICAxLCBHTF9TQU1QTEVSXzJELCB7IDAsIDAsIDAsIDAgfSwgLTEgfSwKKyAgICB7ICJ0ZXgyIiwgIDEsIEdMX1NBTVBMRVJfMkQsIHsgMSwgMCwgMCwgMCB9LCAtMSB9LAorLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwNS1GaXgtYnVpbGQtd2hlbi1FR0xfTUVTQV9zY3JlZW5fc3VyZmFjZS1leHRlbnNpb24taXNuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYzJhMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaApAQCAtMCwwICsxLDI2NyBAQAorRnJvbSA0NTMzNTNhMjIxZGU5YzY0NDc5ZjQzNzI1NjVkMmNkODU5MWIzNmNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CitEYXRlOiBGcmksIDI5IEp1biAyMDEyIDExOjI2OjA0ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNS85XSBGaXggYnVpbGQgd2hlbiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24gaXNuJ3QKKyBwcmVzZW50CisKK1RoZSBFR0wgZGVtb3Mgd29uJ3QgYnVpbGQgYWdhaW5zdCBFR0wgaW1wbGVtZW50YXRpb25zIHRoYXQgZG9uJ3Qgc3VwcG9ydAordGhlIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlIGV4dGVuc2lvbi4gRml4IHRoaXMsIGluIG1vc3QgY2FzZXMsIGJ5Cit3cmFwcGluZyByZWxldmFudCBiaXRzIG9mIGNvZGUgaW4gI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLgorCitTaWduZWQtb2ZmLWJ5OiBGcmFuayBCaW5ucyA8ZnJhbmsuYmlubnNAaW1ndGVjLmNvbT4KKworQXBwbGllZCBhbmQgZml4ZWQgdXAgaW4gWW9jdG8gYnkuLi4KKworSW50ZWdyYXRlZC1ieTogVG9tIFphbnVzc2kgPHRvbS56YW51c3NpQGxpbnV4LmludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBzcmMvZWdsL2VnbHV0L2VnbHV0LmMgICAgICAgIHwgIDkgKysrKysrKy0tCisgc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYyB8IDE0ICsrKysrKysrKysrKysrCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYyAgICAgICB8ICAyICsrCisgc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYyAgICAgICB8ICA3ICsrKysrKy0KKyBzcmMvZWdsL29wZW5nbC9kZW1vMy5jICAgICAgIHwgIDcgKysrKysrLQorIDUgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworaW5kZXggMmVlNmYxNS4uZjZhMmFkNCAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXQuYworKysrIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dC5jCitAQCAtNzYsOCArNzYsOSBAQCBfZWdsdXROb3codm9pZCkKKyBzdGF0aWMgdm9pZAorIF9lZ2x1dERlc3Ryb3lXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luKQorIHsKKy0gICBpZiAoX2VnbHV0LT5zdXJmYWNlX3R5cGUgIT0gRUdMX1BCVUZGRVJfQklUICYmCistICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCisrCisrICAgaWYgKF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9XSU5ET1dfQklUIHx8CisrICAgICAgIF9lZ2x1dC0+c3VyZmFjZV90eXBlID09IEVHTF9QSVhNQVBfQklUKQorICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKF9lZ2x1dC0+ZHB5LCB3aW4tPnN1cmZhY2UpOworIAorICAgIF9lZ2x1dE5hdGl2ZUZpbmlXaW5kb3cod2luKTsKK0BAIC0xNzUsNyArMTc2LDkgQEAgX2VnbHV0Q3JlYXRlV2luZG93KGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKKyAgICAgICAgICAgICB3aW4tPmNvbmZpZywgd2luLT5uYXRpdmUudS5waXhtYXAsIE5VTEwpOworICAgICAgIGJyZWFrOworICAgIGNhc2UgRUdMX1BCVUZGRVJfQklUOgorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGNhc2UgRUdMX1NDUkVFTl9CSVRfTUVTQToKKysjZW5kaWYKKyAgICAgICB3aW4tPnN1cmZhY2UgPSB3aW4tPm5hdGl2ZS51LnN1cmZhY2U7CisgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKK0BAIC0yODksOCArMjkyLDEwIEBAIGVnbHV0RGVzdHJveVdpbmRvdyhpbnQgd2luKQorICAgIGlmICh3aW5kb3ctPmluZGV4ICE9IHdpbikKKyAgICAgICByZXR1cm47CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgLyogWFhYIGl0IGNhdXNlcyBzb21lIGJ1ZyBpbiBzdC9lZ2wgS01TIGJhY2tlbmQgKi8KKyAgICBpZiAoIF9lZ2x1dC0+c3VyZmFjZV90eXBlICE9IEVHTF9TQ1JFRU5fQklUX01FU0EpCisrI2VuZGlmCisgICAgICAgZWdsTWFrZUN1cnJlbnQoX2VnbHV0LT5kcHksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworIAorICAgIF9lZ2x1dERlc3Ryb3lXaW5kb3coX2VnbHV0LT5jdXJyZW50KTsKK2RpZmYgLS1naXQgYS9zcmMvZWdsL2VnbHV0L2VnbHV0X3NjcmVlbi5jIGIvc3JjL2VnbC9lZ2x1dC9lZ2x1dF9zY3JlZW4uYworaW5kZXggMDIxYThmMS4uMDk0YTRlMiAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKKysrKyBiL3NyYy9lZ2wvZWdsdXQvZWdsdXRfc2NyZWVuLmMKK0BAIC0zNSwyNiArMzUsMzMgQEAKKyAKKyAjZGVmaW5lIE1BWF9NT0RFUyAxMDAKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyBzdGF0aWMgRUdMU2NyZWVuTUVTQSBrbXNfc2NyZWVuOworIHN0YXRpYyBFR0xNb2RlTUVTQSBrbXNfbW9kZTsKKyBzdGF0aWMgRUdMaW50IGttc193aWR0aCwga21zX2hlaWdodDsKKysjZW5kaWYKKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlSW5pdERpc3BsYXkodm9pZCkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgX2VnbHV0LT5uYXRpdmVfZHB5ID0gRUdMX0RFRkFVTFRfRElTUExBWTsKKyAgICBfZWdsdXQtPnN1cmZhY2VfdHlwZSA9IEVHTF9TQ1JFRU5fQklUX01FU0E7CisrI2VuZGlmCisgfQorIAorIHZvaWQKKyBfZWdsdXROYXRpdmVGaW5pRGlzcGxheSh2b2lkKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBrbXNfc2NyZWVuID0gMDsKKyAgICBrbXNfbW9kZSA9IDA7CisgICAga21zX3dpZHRoID0gMDsKKyAgICBrbXNfaGVpZ2h0ID0gMDsKKysjZW5kaWYKKyB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQKKyBpbml0X2ttcyh2b2lkKQorIHsKK0BAIC05NCwxOSArMTAxLDIzIEBAIGluaXRfa21zKHZvaWQpCisgICAga21zX3dpZHRoID0gd2lkdGg7CisgICAga21zX2hlaWdodCA9IGhlaWdodDsKKyB9CisrI2VuZGlmCisgCisgdm9pZAorIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKQorIHsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xpbnQgc3VyZl9hdHRyaWJzWzE2XTsKKyAgICBFR0xpbnQgaTsKKysjZW5kaWYKKyAgICBjb25zdCBjaGFyICpleHRzOworIAorICAgIGV4dHMgPSBlZ2xRdWVyeVN0cmluZyhfZWdsdXQtPmRweSwgRUdMX0VYVEVOU0lPTlMpOworICAgIGlmICghZXh0cyB8fCAhc3Ryc3RyKGV4dHMsICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKQorICAgICAgIF9lZ2x1dEZhdGFsKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBpbml0X2ttcygpOworIAorICAgIGkgPSAwOworQEAgLTEyOCwxNCArMTM5LDE3IEBAIF9lZ2x1dE5hdGl2ZUluaXRXaW5kb3coc3RydWN0IGVnbHV0X3dpbmRvdyAqd2luLCBjb25zdCBjaGFyICp0aXRsZSwKKyAKKyAgICB3aW4tPm5hdGl2ZS53aWR0aCA9IGttc193aWR0aDsKKyAgICB3aW4tPm5hdGl2ZS5oZWlnaHQgPSBrbXNfaGVpZ2h0OworKyNlbmRpZgorIH0KKyAKKyB2b2lkCisgX2VnbHV0TmF0aXZlRmluaVdpbmRvdyhzdHJ1Y3QgZWdsdXRfd2luZG93ICp3aW4pCisgeworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbFNob3dTY3JlZW5TdXJmYWNlTUVTQShfZWdsdXQtPmRweSwKKyAgICAgICAgICBrbXNfc2NyZWVuLCBFR0xfTk9fU1VSRkFDRSwgMCk7CisgICAgZWdsRGVzdHJveVN1cmZhY2UoX2VnbHV0LT5kcHksIHdpbi0+bmF0aXZlLnUuc3VyZmFjZSk7CisrI2VuZGlmCisgfQorIAorIHZvaWQKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9kZW1vMS5jIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworaW5kZXggZDg5MjczNC4uM2EzNTY0YyAxMDA2NDQKKy0tLSBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKKysrKyBiL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMKK0BAIC0xOCw2ICsxOCw3IEBACisgc3RhdGljIHZvaWQKKyBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyB7CisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgI2RlZmluZSBNQVggOAorICAgIEVHTFNjcmVlbk1FU0Egc2NyZWVuc1tNQVhdOworICAgIEVHTGludCBudW1TY3JlZW5zOworQEAgLTI4LDYgKzI5LDcgQEAgVGVzdFNjcmVlbnMoRUdMRGlzcGxheSBkcHkpCisgICAgZm9yIChpID0gMDsgaSA8IG51bVNjcmVlbnM7IGkrKykgeworICAgICAgIHByaW50ZigiIFNjcmVlbiAlZCBoYW5kbGU6ICVkXG4iLCBpLCAoaW50KSBzY3JlZW5zW2ldKTsKKyAgICB9CisrI2VuZGlmCisgfQorIAorIC8qKgorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8yLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMi5jCitpbmRleCA1MDViNDc0Li5iZmVmNTllIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzIuYworQEAgLTE2LDYgKzE2LDcgQEAKKyAKKyAvKiNkZWZpbmUgRlJPTlRCVUZGRVIqLworIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorIHN0YXRpYyB2b2lkIF9zdWJzZXRfUmVjdGYoR0xmbG9hdCB4MSwgR0xmbG9hdCB5MSwgR0xmbG9hdCB4MiwgR0xmbG9hdCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgciwgR0xmbG9hdCBnLCBHTGZsb2F0IGIpCisgeworQEAgLTk1LDEyICs5NiwxMyBAQCBUZXN0U2NyZWVucyhFR0xEaXNwbGF5IGRweSkKKyAgICAgICBwcmludGYoIiBTY3JlZW4gJWQgaGFuZGxlOiAlZFxuIiwgaSwgKGludCkgc2NyZWVuc1tpXSk7CisgICAgfQorIH0KKy0KKysjZW5kaWYKKyAKKyBpbnQKKyBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgeworICAgIGludCBtYWosIG1pbjsKKysjaWZkZWYgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UKKyAgICBFR0xDb250ZXh0IGN0eDsKKyAgICBFR0xTdXJmYWNlIHBidWZmZXIsIHNjcmVlbl9zdXJmOworICAgIEVHTENvbmZpZyBjb25maWdzWzEwXTsKK0BAIC0xMTUsNiArMTE3LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIEVHTE1vZGVNRVNBIG1vZGU7CisgICAgRUdMU2NyZWVuTUVTQSBzY3JlZW47CisgICAgRUdMaW50IGNvdW50OworKyNlbmRpZgorIAorICAgIEVHTERpc3BsYXkgZCA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7CisgICAgYXNzZXJ0KGQpOworQEAgLTEzMiw2ICsxMzUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgICAgZXhpdCgxKTsKKyAgICB9CisgCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgICAgZWdsR2V0Q29uZmlncyhkLCBjb25maWdzLCAxMCwgJm51bUNvbmZpZ3MpOworICAgIHByaW50ZigiR290ICVkIEVHTCBjb25maWdzOlxuIiwgbnVtQ29uZmlncyk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bUNvbmZpZ3M7IGkrKykgeworQEAgLTIxMSw2ICsyMTUsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgcGJ1ZmZlcik7CisgICAgZWdsRGVzdHJveUNvbnRleHQoZCwgY3R4KTsKKyAgICBlZ2xUZXJtaW5hdGUoZCk7CisrI2VuZGlmCisgCisgICAgcmV0dXJuIDA7CisgfQorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8zLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMy5jCitpbmRleCBmODRjYTIzLi4zMWI1ZDhiIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzMuYworQEAgLTQ2LDcgKzQ2LDcgQEAgR0x1Ynl0ZSBPcGVuR0xfYml0c1tdID0geworICAgIDB4M2UsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGMsIDB4MDAsIAorIH07CisgCistCisrI2lmZGVmIEVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlCisgc3RhdGljIHZvaWQgSW5pdCh2b2lkKQorIHsKKyAKK0BAIC01NTEsMTEgKzU1MSwxMyBAQCB3cml0ZV9wcG0oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IEdMdWJ5dGUgKmJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgICAgIGZjbG9zZShmKTsKKyAgICB9CisgfQorKyNlbmRpZgorIAorIGludAorIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyB7CisgICAgaW50IG1haiwgbWluOworKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIEVHTENvbnRleHQgY3R4OworICAgIEVHTFN1cmZhY2Ugc2NyZWVuX3N1cmY7CisgICAgRUdMQ29uZmlnIGNvbmZpZ3NbMTBdOworQEAgLTU2Niw2ICs1NjgsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgY29uc3QgR0x1Ynl0ZSAqYml0bWFwOworICAgIEVHTGludCBzY3JlZW5BdHRyaWJzWzMyXTsKKyAgICBFR0xpbnQgaTsKKysjZW5kaWYKKyAKKyAgICBFR0xEaXNwbGF5IGQgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworICAgIGFzc2VydChkKTsKK0BAIC01ODMsNiArNTg2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgICAgIGV4aXQoMSk7CisgICAgfQorIAorKyNpZmRlZiBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZQorICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgMTAsICZudW1Db25maWdzKTsKKyAgICBlZ2xHZXRTY3JlZW5zTUVTQShkLCAmc2NyZWVuLCAxLCAmY291bnQpOworICAgIGVnbEdldE1vZGVzTUVTQShkLCBzY3JlZW4sICZtb2RlLCAxLCAmY291bnQpOworQEAgLTY0Miw2ICs2NDYsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgICAgZWdsRGVzdHJveVN1cmZhY2UoZCwgc2NyZWVuX3N1cmYpOworICAgIGVnbERlc3Ryb3lDb250ZXh0KGQsIGN0eCk7CisgICAgZWdsVGVybWluYXRlKGQpOworKyNlbmRpZgorIAorICAgIHJldHVybiAwOworIH0KKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmUwODA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA2LVF1ZXJ5LWRpc3BsYXktZm9yLUVHTF9NRVNBX3NjcmVlbl9zdXJmYWNlLWV4dGVuc2lvbi0ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSA2YTE5ZGJhMWQyNzU1NzljNzNlNzc2M2IwNTU0NDEwZmY0ZTFlNjUwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmsgQmlubnMgPGZyYW5rLmJpbm5zQGltZ3RlYy5jb20+CitEYXRlOiBGcmksIDI5IEp1biAyMDEyIDEyOjAwOjI2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNi85XSBRdWVyeSBkaXNwbGF5IGZvciBFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBleHRlbnNpb24KKyBiZWZvcmUgdXNpbmcgaXQKKworVGhpcyBjb2RlIG1ha2VzIGhlYXZ5IHVzZSBvZiB0aGUgRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UgZXh0ZW5zaW9uIHNvCitjaGVjayB0aGUgZGlzcGxheSB0byBkZXRlcm1pbmUgaWYgaXQncyBzdXBwb3J0ZWQgYnkgdGhlIHVuZGVybHlpbmcgRUdMCitpbXBsZW1lbnRhdGlvbi4gSWYgaXQgZG9lc24ndCB0aGVuIGJhaWwuCisKK1NpZ25lZC1vZmYtYnk6IEZyYW5rIEJpbm5zIDxmcmFuay5iaW5uc0BpbWd0ZWMuY29tPgorCitBcHBsaWVkIGFuZCBmaXhlZCB1cCBpbiBZb2N0byBieS4uLgorCitJbnRlZ3JhdGVkLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAbGludXguaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHNyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgfCA2ICsrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsL2RlbW8xLmMgYi9zcmMvZWdsL29wZW5nbC9kZW1vMS5jCitpbmRleCAzYTM1NjRjLi4wNmUyMTM4IDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworKysrIGIvc3JjL2VnbC9vcGVuZ2wvZGVtbzEuYworQEAgLTExMCw2ICsxMTAsMTIgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgIHByaW50ZigiRUdMIHZlcnNpb24gPSAlZC4lZFxuIiwgbWFqLCBtaW4pOworICAgIHByaW50ZigiRUdMX1ZFTkRPUiA9ICVzXG4iLCBlZ2xRdWVyeVN0cmluZyhkLCBFR0xfVkVORE9SKSk7CisgCisrICAgaWYgKCFzdHJzdHIoZWdsUXVlcnlTdHJpbmcoZCwgRUdMX0VYVEVOU0lPTlMpLAorKyAgICAgICAgICAgICAgICJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSIpKSB7CisrICAgICAgcHJpbnRmKCJFR0xfTUVTQV9zY3JlZW5fc3VyZmFjZSBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKysgICAgICBleGl0KDEpOworKyAgIH0KKysKKyAgICBlZ2xHZXRDb25maWdzKGQsIE5VTEwsIDAsICZudW1Db25maWdzKTsKKyAgICBjb25maWdzID0gbWFsbG9jKHNpemVvZigqY29uZmlncykgKm51bUNvbmZpZ3MpOworICAgIGVnbEdldENvbmZpZ3MoZCwgY29uZmlncywgbnVtQ29uZmlncywgJm51bUNvbmZpZ3MpOworLS0gCisyLjAuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQyZmFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA3LUluc3RhbGwtZmV3LW1vcmUtdGVzdC1wcm9ncmFtcy5wYXRjaApAQCAtMCwwICsxLDc0IEBACitGcm9tIGQ5MzBiMmRhNTdmN2M5ZWZiODBjOGNlZjhmOGFkYWQxNWJiYmMwZDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjMwOjUyICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggNy85XSBJbnN0YWxsIGZldyBtb3JlIHRlc3QgcHJvZ3JhbXMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtICAgIHwgIDIgKy0KKyBzcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbSB8IDEwICsrKystLS0tLS0KKyBzcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbSAgICB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZWdsL29wZW5nbC9NYWtlZmlsZS5hbSBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCitpbmRleCAwYzcyMjhmLi44N2IyZjFhIDEwMDY0NAorLS0tIGEvc3JjL2VnbC9vcGVuZ2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9lZ2wvb3BlbmdsL01ha2VmaWxlLmFtCitAQCAtNTAsNyArNTAsNyBAQCBlbmRpZgorIGVuZGlmCisgCisgaWYgSEFWRV9FR0wKKy1ub2luc3RfUFJPR1JBTVMgPSBcCisrYmluX1BST0dSQU1TID0gXAorIAlkZW1vMSBcCisgCWRlbW8yIFwKKyAJZGVtbzMgXAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbmdsZXMxL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK2luZGV4IDM0NTVlNzUuLjUxNmU1MTYgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW5nbGVzMS9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVuZ2xlczEvTWFrZWZpbGUuYW0KK0BAIC0zNiwxMSArMzYsMTEgQEAgQU1fTERGTEFHUyA9IFwKKyAJJChFR0xfTElCUykgXAorIAktbG0KKyAKKy1ub2luc3RfUFJPR1JBTVMgPQorK2Jpbl9QUk9HUkFNUyA9CisgCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX0dMRVNWMQorLW5vaW5zdF9QUk9HUkFNUyArPSBcCisrYmluX1BST0dSQU1TICs9IFwKKyAJZHJhd3RleF9zY3JlZW4gXAorIAlnZWFyc19zY3JlZW4gXAorIAl0b3J1c19zY3JlZW4gXAorQEAgLTU3LDEwICs1Nyw4IEBAIHRvcnVzX3NjcmVlbl9MREFERCA9IC4uL2VnbHV0L2xpYmVnbHV0X3NjcmVlbi5sYQorIHRyaV9zY3JlZW5fTERBREQgPSAuLi9lZ2x1dC9saWJlZ2x1dF9zY3JlZW4ubGEKKyAKKyBpZiBIQVZFX1gxMQorLW5vaW5zdF9QUk9HUkFNUyArPSBcCistCWNsZWFyCistCistYmluX1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyArPSBcCisrCWNsZWFyIFwKKyAJYmluZHRleCBcCisgCWRyYXd0ZXhfeDExIFwKKyAJZWdsZmJkZXYgXAorZGlmZiAtLWdpdCBhL3NyYy9lZ2wvb3BlbnZnL01ha2VmaWxlLmFtIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KK2luZGV4IDczMThhNDMuLmI1NDUyMjUgMTAwNjQ0CistLS0gYS9zcmMvZWdsL29wZW52Zy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2VnbC9vcGVudmcvTWFrZWZpbGUuYW0KK0BAIC00OSw3ICs0OSw3IEBAIGVuZGlmCisgCisgaWYgSEFWRV9FR0wKKyBpZiBIQVZFX1ZHCistbm9pbnN0X1BST0dSQU1TID0gXAorK2Jpbl9QUk9HUkFNUyA9IFwKKyAJbGlvbl9zY3JlZW4gXAorIAlzcF9zY3JlZW4gXAorIAkkKEVHTF9YMTFfREVNT1MpCistLSAKKzIuMC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA4LWdsc2wtcGVyZi1BZGQtZmV3LW1pc3NpbmctLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMtdG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwODU3NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3MvMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoCkBAIC0wLDAgKzEsMTAxIEBACitGcm9tIDBiNmY5NWY5YjhlY2UyMmU5ODU2YzE1MGU0YmUyOWZkODZlYWY1NDYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDE0IDE0OjI5OjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggOC85XSBnbHNsLCBwZXJmOiBBZGQgZmV3IG1pc3NpbmcgLmdsc2wsIC52ZXJ0LCAuZnJhZyBmaWxlcyB0bworIEVYVFJBX0RBVEEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9mcGdsc2wvTWFrZWZpbGUuYW0gfCAgMiArKworIHNyYy9nbHNsL01ha2VmaWxlLmFtICAgfCAxMCArKysrKysrKy0tCisgc3JjL3BlcmYvTWFrZWZpbGUuYW0gICB8ICA2ICsrKysrKworIHNyYy92cGdsc2wvTWFrZWZpbGUuYW0gfCAgMSArCisgNCBmaWxlcyBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDQ3YzEwMzkuLmZkNDNjOTEgMTAwNjQ0CistLS0gYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCisrKysgYi9zcmMvZnBnbHNsL01ha2VmaWxlLmFtCitAQCAtMzksMTAgKzM5LDEyIEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyBlbmRpZgorIAorIEVYVFJBX0RJU1QgPSBcCisrCWRlcHRoLXJlYWQuZ2xzbCBcCisgCWRvd2hpbGUyLmdsc2wgXAorIAlkb3doaWxlLmdsc2wgXAorIAlmb3JicmVhay5nbHNsIFwKKyAJZm9yLmdsc2wgXAorKwlpbmZpbml0ZS1sb29wLmdsc2wgXAorIAltb3YuZ2xzbCBcCisgCW1vdi1pbW0uZ2xzbCBcCisgCXNpbXBsZWlmLmdsc2wgXAorZGlmZiAtLWdpdCBhL3NyYy9nbHNsL01ha2VmaWxlLmFtIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK2luZGV4IDRmYWE4ZGIuLjA3OWEyOWQgMTAwNjQ0CistLS0gYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbQorKysrIGIvc3JjL2dsc2wvTWFrZWZpbGUuYW0KK0BAIC0zNyw3ICszNyw3IEBAIEFNX0xERkxBR1MgPSBcCisgaWYgSEFWRV9HTFVUCisgYmluX1BST0dSQU1TID0gXAorIAlhcnJheSBcCistICAgICAgICBiZXppZXIgXAorKwliZXppZXIgXAorIAliaXRtYXAgXAorIAlicmljayBcCisgCWJ1bXAgXAorQEAgLTEyMywxMiArMTIzLDE2IEBAIEVYVFJBX0RJU1QgPSBcCisgCUNIMDYtYnJpY2sudmVydCBcCisgCUNIMTEtYnVtcG1hcC5mcmFnIFwKKyAJQ0gxMS1idW1wbWFwLnZlcnQgXAorKwlDSDExLWJ1bXBtYXB0ZXguZnJhZyBcCisgCUNIMTEtdG95YmFsbC5mcmFnIFwKKyAJQ0gxMS10b3liYWxsLnZlcnQgXAorIAlDSDE4LW1hbmRlbC5mcmFnIFwKKyAJQ0gxOC1tYW5kZWwudmVydCBcCistICAgICAgICBiZXppZXIuZ2VvbSBcCisrCWJlemllci5nZW9tIFwKKyAJYnJpY2suc2h0ZXN0IFwKKysJYmxpbmtpbmctdGVhcG90LmZyYWcgXAorKwlibGlua2luZy10ZWFwb3QudmVydCBcCisrCWNvbnZvbHV0aW9uLmZyYWcgXAorIAljb252b2x1dGlvbi52ZXJ0IFwKKyAJY3ViZW1hcC5mcmFnIFwKKyAJbWFuZGVsYnJvdC5zaHRlc3QgXAorQEAgLTEzOCw1ICsxNDIsNyBAQCBFWFRSQV9ESVNUID0gXAorIAlyZWZsZWN0LnZlcnQgXAorIAlzaGFkb3d0ZXguZnJhZyBcCisgCXNpbXBsZS52ZXJ0IFwKKysJc2ltcGxleC1ub2lzZS5nbHNsIFwKKyAJc2tpbm5pbmcuZnJhZyBcCisrCXNraW5uaW5nLnZlcnQgXAorIAl0b3liYWxsLnNodGVzdAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL01ha2VmaWxlLmFtIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK2luZGV4IDUzNjNjNTguLmM1Y2NhOGQgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK0BAIC01NywzICs1Nyw5IEBAIGJpbl9QUk9HUkFNUyA9IFwKKyBlbmRpZgorIAorIGdsc2xzdGF0ZXNjaGFuZ2VfTERBREQgPSBsaWJwZXJmLmxhIC4uL3V0aWwvbGlidXRpbC5sYQorKworK0VYVFJBX0RJU1QgPSBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UxLmZyYWcgXAorKwlnbHNsc3RhdGVzY2hhbmdlMS52ZXJ0IFwKKysJZ2xzbHN0YXRlc2NoYW5nZTIuZnJhZyBcCisrCWdsc2xzdGF0ZXNjaGFuZ2UyLnZlcnQKK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNGE4NWVkNC4uNDhiMDhmNCAxMDA2NDQKKy0tLSBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK0BAIC00NCw2ICs0NCw3IEBAIEVYVFJBX0RJU1QgPSBcCisgCWZ1bmMyLmdsc2wgXAorIAlpZmVsc2UuZ2xzbCBcCisgCWlmLmdsc2wgXAorKwlpbmZpbml0ZS1sb29wLmdsc2wgXAorIAltb3YuZ2xzbCBcCisgCW5lc3RlZGlmcy5nbHNsIFwKKyAJbmVzdGVkc3dpenpsZS5nbHNsIFwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vcy8wMDA5LWdsc2wtcGVyZi1JbnN0YWxsLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNjJkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWRlbW9zLzAwMDktZ2xzbC1wZXJmLUluc3RhbGwtLmdsc2wtLnZlcnQtLmZyYWctZmlsZXMucGF0Y2gKQEAgLTAsMCArMSw3MyBAQAorRnJvbSBjOGMzZGU1NDE3ZDZiNmM3ZDc1NzljNTI4YzBjYWI3MThmNGJmZGI2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogVGh1LCAxMCBKdWwgMjAxNCAxNDo0ODoxMiArMDIwMAorU3ViamVjdDogW1BBVENIIDkvOV0gZ2xzbCwgcGVyZjogSW5zdGFsbCAuZ2xzbCwgLnZlcnQsIC5mcmFnIGZpbGVzCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbSB8IDMgKystCisgc3JjL2dsc2wvTWFrZWZpbGUuYW0gICB8IDMgKystCisgc3JjL3BlcmYvTWFrZWZpbGUuYW0gICB8IDMgKystCisgc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbSB8IDMgKystCisgNCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvZnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL2ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggZmQ0M2M5MS4uMmJmNTFkZSAxMDA2NDQKKy0tLSBhL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9mcGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOCw3ICszOCw4IEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyAJZnAtdHJpCisgZW5kaWYKKyAKKy1FWFRSQV9ESVNUID0gXAorK2RlbW9zZGF0YWRpcj0kKGRhdGFkaXIpLyQoUEFDS0FHRSkvCisrZGlzdF9kZW1vc2RhdGFfREFUQT0gXAorIAlkZXB0aC1yZWFkLmdsc2wgXAorIAlkb3doaWxlMi5nbHNsIFwKKyAJZG93aGlsZS5nbHNsIFwKK2RpZmYgLS1naXQgYS9zcmMvZ2xzbC9NYWtlZmlsZS5hbSBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitpbmRleCAwNzlhMjlkLi5mNjZlYzI5IDEwMDY0NAorLS0tIGEvc3JjL2dsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy9nbHNsL01ha2VmaWxlLmFtCitAQCAtMTE4LDcgKzExOCw4IEBAIHZlcnRfb3JfZnJhZ19vbmx5X0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgdmVydF90ZXhfTERBREQgPSAuLi91dGlsL2xpYnV0aWwubGEKKyB2c3JheXRyYWNlX0xEQUREID0gLi4vdXRpbC9saWJ1dGlsLmxhCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJQ0gwNi1icmljay5mcmFnIFwKKyAJQ0gwNi1icmljay52ZXJ0IFwKKyAJQ0gxMS1idW1wbWFwLmZyYWcgXAorZGlmZiAtLWdpdCBhL3NyYy9wZXJmL01ha2VmaWxlLmFtIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK2luZGV4IGM1Y2NhOGQuLjE0MDI1NmQgMTAwNjQ0CistLS0gYS9zcmMvcGVyZi9NYWtlZmlsZS5hbQorKysrIGIvc3JjL3BlcmYvTWFrZWZpbGUuYW0KK0BAIC01OCw3ICs1OCw4IEBAIGVuZGlmCisgCisgZ2xzbHN0YXRlc2NoYW5nZV9MREFERCA9IGxpYnBlcmYubGEgLi4vdXRpbC9saWJ1dGlsLmxhCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZ2xzbHN0YXRlc2NoYW5nZTEuZnJhZyBcCisgCWdsc2xzdGF0ZXNjaGFuZ2UxLnZlcnQgXAorIAlnbHNsc3RhdGVzY2hhbmdlMi5mcmFnIFwKK2RpZmYgLS1naXQgYS9zcmMvdnBnbHNsL01ha2VmaWxlLmFtIGIvc3JjL3ZwZ2xzbC9NYWtlZmlsZS5hbQoraW5kZXggNDhiMDhmNC4uNTUyNjg2NyAxMDA2NDQKKy0tLSBhL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KKysrKyBiL3NyYy92cGdsc2wvTWFrZWZpbGUuYW0KK0BAIC0zOCw3ICszOCw4IEBAIG5vaW5zdF9QUk9HUkFNUyA9IFwKKyAJdnAtdHJpcworIGVuZGlmCisgCistRVhUUkFfRElTVCA9IFwKKytkZW1vc2RhdGFkaXI9JChkYXRhZGlyKS8kKFBBQ0tBR0UpLworK2Rpc3RfZGVtb3NkYXRhX0RBVEE9IFwKKyAJZm9yLmdsc2wgXAorIAlmdW5jLmdsc2wgXAorIAlmdW5jMi5nbHNsIFwKKy0tIAorMi4wLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS1kZW1vc184LjIuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ1MTY0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZGVtb3NfOC4yLjAuYmIKQEAgLTAsMCArMSw1NyBAQAorU1VNTUFSWSA9ICJNZXNhIGRlbW8gYXBwbGljYXRpb25zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIGluY2x1ZGVzIHRoZSBkZW1vbnN0cmF0aW9uIGFwcGxpY2F0aW9uLCBzdWNoIGFzIGdseGdlYXJzLiBcCitUaGVzZSBhcHBsaWNhdGlvbnMgY2FuIGJlIHVzZWQgZm9yIE1lc2EgdmFsaWRhdGlvbiBhbmQgYmVuY2htYXJraW5nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tZXNhM2Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnIgorU0VDVElPTiA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTUlUICYgUEQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGRlbW9zL2dseGdlYXJzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9OTE0MjI1Nzg1NDUwZWZmNjQ0YTg2Yzg3MWQzYWUwMGUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3hkZW1vcy9nbHhkZW1vLmM7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1iMDFkNWFiMWFlZTk0ZDM1YjdlZmFhMmVmNDhlMWEwNiIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhL2RlbW9zLyR7UFZ9LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICBmaWxlOi8vMDAwMS1tZXNhLWRlbW9zLUFkZC1taXNzaW5nLWRhdGEtZmlsZXMucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAyLUNvcnJlY3RseS1pbXBsZW1lbnQtd2l0aC1BQ19XSVRILWdsdXQtc28tdGhhdC13aXRob3UucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAzLWNvbmZpZ3VyZS1BbGxvdy10by1kaXNhYmxlLWRlbW9zLXdoaWNoLXJlcXVpcmUtR0xFVy0ucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDA0LVVzZS1ERU1PU19EQVRBX0RJUi10by1sb2NhdGUtZGF0YS1maWxlcy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDUtRml4LWJ1aWxkLXdoZW4tRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLWlzbi5wYXRjaCBcCisgICAgZmlsZTovLzAwMDYtUXVlcnktZGlzcGxheS1mb3ItRUdMX01FU0Ffc2NyZWVuX3N1cmZhY2UtZXh0ZW5zaW9uLS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDctSW5zdGFsbC1mZXctbW9yZS10ZXN0LXByb2dyYW1zLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOC1nbHNsLXBlcmYtQWRkLWZldy1taXNzaW5nLS5nbHNsLS52ZXJ0LS5mcmFnLWZpbGVzLXRvLnBhdGNoIFwKKyAgICBmaWxlOi8vMDAwOS1nbHNsLXBlcmYtSW5zdGFsbC0uZ2xzbC0udmVydC0uZnJhZy1maWxlcy5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiNzI2MTNhMmM4YzAxMzcxNmRiMDJlM2ZmNTlkMjkwNjEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTRiZmVjYjU4MTZkZGQ0YjdiMzdjMWJjODc2YjYzZjFmN2YwNmZkYTU4NzkyMjFhOTc3NGQwOTUyZjkwYmE5MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz0gImRybSBvc21lc2EgZnJlZXR5cGUyIGdibSBlZ2wgZ2xlczEgZ2xlczIgXAorICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExIGdsZXcgZ2x1JywgJycsIGQpfSIKKworIyBUaGUgV2F5bGFuZCBjb2RlIGRvZXNuJ3Qgd29yayB3aXRoIFdheWxhbmQgMS4wLCBzbyBkaXNhYmxlIGl0IGZvciBub3cKKyMke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3dheWxhbmQnLCAnd2F5bGFuZCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtc3lzdGVtLWRhdGEtZmlsZXMiCisKK1BBQ0tBR0VDT05GSUdbZHJtXSA9ICItLWVuYWJsZS1saWJkcm0sLS1kaXNhYmxlLWxpYmRybSxsaWJkcm0iCitQQUNLQUdFQ09ORklHW2VnbF0gPSAiLS1lbmFibGUtZWdsLC0tZGlzYWJsZS1lZ2wsdmlydHVhbC9lZ2wiCitQQUNLQUdFQ09ORklHW2ZyZWV0eXBlMl0gPSAiLS1lbmFibGUtZnJlZXR5cGUyLC0tZGlzYWJsZS1mcmVldHlwZTIsZnJlZXR5cGUiCitQQUNLQUdFQ09ORklHW2dibV0gPSAiLS1lbmFibGUtZ2JtLC0tZGlzYWJsZS1nYm0sdmlydHVhbC9saWJnbCIKK1BBQ0tBR0VDT05GSUdbZ2xlczFdID0gIi0tZW5hYmxlLWdsZXMxLC0tZGlzYWJsZS1nbGVzMSx2aXJ0dWFsL2xpYmdsZXMxIgorUEFDS0FHRUNPTkZJR1tnbGVzMl0gPSAiLS1lbmFibGUtZ2xlczIsLS1kaXNhYmxlLWdsZXMyLHZpcnR1YWwvbGliZ2xlczIiCitQQUNLQUdFQ09ORklHW2dsdXRdID0gIi0td2l0aC1nbHV0PSR7U1RBR0lOR19FWEVDUFJFRklYRElSfSwtLXdpdGhvdXQtZ2x1dCwiCitQQUNLQUdFQ09ORklHW29zbWVzYV0gPSAiLS1lbmFibGUtb3NtZXNhLC0tZGlzYWJsZS1vc21lc2EsIgorUEFDS0FHRUNPTkZJR1t2Z10gPSAiLS1lbmFibGUtdmcsLS1kaXNhYmxlLXZnLHZpcnR1YWwvbGlib3BlbnZnIgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLC0tZGlzYWJsZS13YXlsYW5kLHZpcnR1YWwvbGliZ2wgd2F5bGFuZCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEsLS1kaXNhYmxlLXgxMSx2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbZ2xld10gPSAiLS1lbmFibGUtZ2xldywtLWRpc2FibGUtZ2xldyxnbGV3IgorUEFDS0FHRUNPTkZJR1tnbHVdID0gIi0tZW5hYmxlLWdsdSwtLWRpc2FibGUtZ2x1LHZpcnR1YWwvbGliZ2wiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgaXQgY2FuIGJlIGNvbXBsZXRlbHkgZW1wdHkgd2hlbiBhbGwgUEFDS0FHRUNPTkZJRyBvcHRpb25zIGFyZSBkaXNhYmxlZAorCXJtZGlyIC0taWdub3JlLWZhaWwtb24tbm9uLWVtcHR5ICR7RH0ke2JpbmRpcn0KKworCWlmIFsgLWYgJHtEfSR7YmluZGlyfS9jbGVhciBdOyB0aGVuCisgICAgICAgIAltdiAke0R9JHtiaW5kaXJ9L2NsZWFyICR7RH0ke2JpbmRpcn0vY2xlYXIubWVzYS1kZW1vcworCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2EtZ2xfMTAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMmJjYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLWdsXzEwLjYuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIG1lc2FfJHtQVn0uYmIKKworU1VNTUFSWSArPSAiIChPcGVuR0wgb25seSwgbm8gRUdML0dMRVMpIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9tZXNhOiIKKworUFJPVklERVMgPSAidmlydHVhbC9saWJnbCB2aXJ0dWFsL21lc2EiCisKK1MgPSAiJHtXT1JLRElSfS9tZXNhLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiZHJpICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjdhMmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYS5pbmMKQEAgLTAsMCArMSwxODUgQEAKK1NVTU1BUlkgPSAiQSBmcmVlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBPcGVuR0wgQVBJIgorREVTQ1JJUFRJT04gPSAiTWVzYSBpcyBhbiBvcGVuLXNvdXJjZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgT3BlbkdMIHNwZWNpZmljYXRpb24gLSBcCithIHN5c3RlbSBmb3IgcmVuZGVyaW5nIGludGVyYWN0aXZlIDNEIGdyYXBoaWNzLiAgXAorQSB2YXJpZXR5IG9mIGRldmljZSBkcml2ZXJzIGFsbG93cyBNZXNhIHRvIGJlIHVzZWQgaW4gbWFueSBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIFwKK3JhbmdpbmcgZnJvbSBzb2Z0d2FyZSBlbXVsYXRpb24gdG8gY29tcGxldGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGZvciBtb2Rlcm4gR1BVcy4gXAorTWVzYSBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBhbmQgWC5vcmcgXAorZW52aXJvbm1lbnQuIgorCitIT01FUEFHRSA9ICJodHRwOi8vbWVzYTNkLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZyIKK1NFQ1RJT04gPSAieDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2NzL2xpY2Vuc2UuaHRtbDttZDU9NmEyMzQ0NTk4MmE3YTk3MmFjMTk4ZTkzY2MxY2IzZGUiCisKK1BFID0gIjIiCisKK0RFUEVORFMgPSAiZXhwYXQgbWFrZWRlcGVuZC1uYXRpdmUgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIGxpYnhtbDItbmF0aXZlIHVkZXYiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGliZ2wgdmlydHVhbC9saWJnbGVzMSB2aXJ0dWFsL2xpYmdsZXMyIHZpcnR1YWwvZWdsIHZpcnR1YWwvbWVzYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZSBnZXR0ZXh0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAib3BlbmdsIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkLWdsYXBpIgorCitQQUNLQUdFQ09ORklHID8/PSAiZWdsIGdsZXMgZHJpIFwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfVwKKwkJJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9XAorCQkiCisKK1gxMV9ERVBTID0gInhmODZkcmlwcm90byBnbHByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhleHQgbGlieHhmODZ2bSBsaWJ4ZGFtYWdlIGxpYnhmaXhlcyIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS1nbHgtdGxzLC0tZGlzYWJsZS1nbHgsJHtYMTFfREVQU30iCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyIKK1BBQ0tBR0VDT05GSUdbd2F5bGFuZF0gPSAiLCx3YXlsYW5kIgorCitEUklEUklWRVJTID0gInN3cmFzdCIKK0RSSURSSVZFUlNfYXBwZW5kX3g4NiA9ICIscmFkZW9uLHIyMDAsbm91dmVhdSxpOTY1LGk5MTUiCitEUklEUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiLHJhZGVvbixyMjAwLG5vdXZlYXUsaTk2NSxpOTE1IgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSAtLXdpdGgtZHJpLWRyaXZlcnM9JHtEUklEUklWRVJTfSwgLS1kaXNhYmxlLWRyaSwgZHJpMnByb3RvIGxpYmRybSIKK1BBQ0tBR0VDT05GSUdbZHJpM10gPSAiLS1lbmFibGUtZHJpMywgLS1kaXNhYmxlLWRyaTMsIGRyaTNwcm90byBwcmVzZW50cHJvdG8gbGlieHNobWZlbmNlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZW5hYmxlLWdibSIKKworUEFDS0FHRUNPTkZJR1tnbGVzXSA9ICItLWVuYWJsZS1nbGVzMSAtLWVuYWJsZS1nbGVzMiwgLS1kaXNhYmxlLWdsZXMxIC0tZGlzYWJsZS1nbGVzMiIKKworRUdMX1BMQVRGT1JNUyAgPSAiZHJtIgorRUdMX1BMQVRGT1JNUyAuPSIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICd4MTEnLCAnLHgxMScsICcnLCBkKX0iCitFR0xfUExBVEZPUk1TIC49IiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3dheWxhbmQnLCAnLHdheWxhbmQnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLXdpdGgtZWdsLXBsYXRmb3Jtcz0ke0VHTF9QTEFURk9STVN9LCAtLWRpc2FibGUtZWdsIgorCitHQUxMSVVNRFJJVkVSUyA9ICJzd3Jhc3QiCitHQUxMSVVNRFJJVkVSU19MTFZNMzMgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAncjYwMCcsICdyYWRlb25zaSxyNjAwJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbcjYwMF0gPSAiIgorR0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUQgPSAiJHtAYmFzZV92ZXJzaW9uX2xlc3Nfb3JfZXF1YWwoJ01FU0FfTExWTV9SRUxFQVNFJywgJzMuMicsIEZhbHNlLCBsZW4oJyR7R0FMTElVTURSSVZFUlNfTExWTTMzfScpID4gMCwgZCl9IgorR0FMTElVTURSSVZFUlNfTExWTSA9ICJyMzAwLHN2Z2Esbm91dmVhdSR7QCcsJHtHQUxMSVVNRFJJVkVSU19MTFZNMzN9JyBpZiAke0dBTExJVU1EUklWRVJTX0xMVk0zM19FTkFCTEVEfSBlbHNlICcnfSIKK0dBTExJVU1EUklWRVJTX2FwcGVuZF94ODYgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKK0dBTExJVU1EUklWRVJTX2FwcGVuZF94ODYtNjQgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZ2FsbGl1bS1sbHZtJywgJywke0dBTExJVU1EUklWRVJTX0xMVk19JywgJycsIGQpfSIKKyMga2VlcCAtLXdpdGgtZ2FsbGl1bS1kcml2ZXJzIHNlcGFyYXRlLCBiZWNhdXNlIHdoZW4gb25seSBvbmUgb2YgZ2FsbGl1bSB2ZXJzaW9ucyBpcyBlbmFibGVkLCBvdGhlciAyIHdlcmUgYWRkaW5nIC0td2l0aG91dC1nYWxsaXVtLWRyaXZlcnMKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bV0gICAgICA9ICItLXdpdGgtZ2FsbGl1bS1kcml2ZXJzPSR7R0FMTElVTURSSVZFUlN9LCAtLXdpdGhvdXQtZ2FsbGl1bS1kcml2ZXJzIgorTUVTQV9MTFZNX1JFTEVBU0UgPz0gIjMuMyIKK1BBQ0tBR0VDT05GSUdbZ2FsbGl1bS1sbHZtXSA9ICItLWVuYWJsZS1nYWxsaXVtLWxsdm0gLS1lbmFibGUtbGx2bS1zaGFyZWQtbGlicywgLS1kaXNhYmxlLWdhbGxpdW0tbGx2bSwgbGx2bSR7TUVTQV9MTFZNX1JFTEVBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0AnZWxmdXRpbHMnIGlmICR7R0FMTElVTURSSVZFUlNfTExWTTMzX0VOQUJMRUR9IGVsc2UgJyd9IgorZXhwb3J0IFdBTlRfTExWTV9SRUxFQVNFID0gIiR7TUVTQV9MTFZNX1JFTEVBU0V9IgorUEFDS0FHRUNPTkZJR1t4YV0gID0gIi0tZW5hYmxlLXhhLCAtLWRpc2FibGUteGEiCisKKyMgbGx2bXBpcGUgaXMgc2xvdyBpZiBjb21waWxlZCB3aXRoIC1mb21pdC1mcmFtZS1wb2ludGVyIChlLmcuIC1PMikKK0ZVTExfT1BUSU1JWkFUSU9OX2FwcGVuZCA9ICIgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIiCisKKyMgTXVsdGlwbGUgdmlydHVhbC9nbCBwcm92aWRlcnMgYmVpbmcgYnVpbHQgYnJlYWtzIHN0YWdpbmcKK0VYQ0xVREVfRlJPTV9XT1JMRCA9ICIxIgorCisjIFJlbW92ZSB0aGUgbWVzYSBkZXBlbmRlbmN5IG9uIG1lc2EtZGV2LCBhcyBtZXNhIGlzIGVtcHR5CitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorCitQQUNLQUdFUyA9KyAibGliZWdsLW1lc2EgbGliZWdsLW1lc2EtZGV2IFwKKyAgICAgICAgICAgICBsaWJvc21lc2EgbGlib3NtZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2wtbWVzYSBsaWJnbC1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xhcGkgbGliZ2xhcGktZGV2IFwKKyAgICAgICAgICAgICBsaWJnYm0gbGliZ2JtLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczEtbWVzYSBsaWJnbGVzMS1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczItbWVzYSBsaWJnbGVzMi1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGliZ2xlczMtbWVzYSBsaWJnbGVzMy1tZXNhLWRldiBcCisgICAgICAgICAgICAgbGlid2F5bGFuZC1lZ2wgbGlid2F5bGFuZC1lZ2wtZGV2IFwKKyAgICAgICAgICAgICBsaWJ4dm1jc29mdHBpcGUgbGlieHZtY3NvZnRwaXBlLWRldiBcCisgICAgICAgICAgICAgbGlieGF0cmFja2VyIGxpYnhhdHJhY2tlci1kZXYgXAorICAgICAgICAgICAgIG1lc2EtbWVnYWRyaXZlciBcCisgICAgICAgICAgICAiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAjIERyaXZlcnMgbmV2ZXIgbmVlZCBsaWJ0b29sIC5sYSBmaWxlcworICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZHJpLyoubGEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2VnbC8qLmxhCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9nYWxsaXVtLXBpcGUvKi5sYQorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vZ2JtLyoubGEKKyAgICAKKyAgICAjIGl0IHdhcyBwYWNrYWdlZCBpbiBsaWJkcmljb3JlOS4xLjMtMSBhbmQgcHJldmVudGluZyB1cGdyYWRlcyB3aGVuIGRlYmlhbi5iYmNsYXNzIHdhcyB1c2VkIAorICAgIHJtIC1mICR7RH0ke3N5c2NvbmZkaXJ9L2RyaXJjCit9CisKKyMgRm9yIHRoZSBwYWNrYWdlcyB0aGF0IG1ha2UgdXAgdGhlIE9wZW5HTCBpbnRlcmZhY2VzLCBpbmplY3QgdmFyaWFibGVzIHNvIHRoYXQKKyMgdGhleSBkb24ndCBnZXQgRGViaWFuLXJlbmFtZWQgKHdoaWNoIHdvdWxkIHJlbW92ZSB0aGUgLW1lc2Egc3VmZml4KSwgYW5kCisjIFJQUk9WSURFcy9SQ09ORkxJQ1RzIG9uIHRoZSBnZW5lcmljIGxpYmdsIG5hbWUuCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgcGtnY29uZmlnID0gKGQuZ2V0VmFyKCdQQUNLQUdFQ09ORklHJywgVHJ1ZSkgb3IgIiIpLnNwbGl0KCkKKyAgICBmb3IgcCBpbiAoKCJlZ2wiLCAibGliZWdsIiwgImxpYmVnbDEiKSwKKyAgICAgICAgICAgICAgKCJkcmkiLCAibGliZ2wiLCAibGliZ2wxIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMSIsICJsaWJnbGVzdjEtY20xIiksCisgICAgICAgICAgICAgICgiZ2xlcyIsICJsaWJnbGVzMiIsICJsaWJnbGVzdjItMiIpLAorICAgICAgICAgICAgICAoImdsZXMiLCAibGliZ2xlczMiLCkpOgorICAgICAgICBpZiBub3QgcFswXSBpbiBwa2djb25maWc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmdWxscCA9IHBbMV0gKyAiLW1lc2EiCisgICAgICAgIHBrZ3MgPSAiICIuam9pbihwWzE6XSkKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTl9OT0FVVE9OQU1FXyIgKyBmdWxscCwgIjEiKQorICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgCisgICAgICAgICMgRm9yIC1kZXYsIHRoZSBmaXJzdCBlbGVtZW50IGlzIGJvdGggdGhlIERlYmlhbiBhbmQgb3JpZ2luYWwgbmFtZQorICAgICAgICBmdWxscCArPSAiLWRldiIKKyAgICAgICAgcGtncyA9IHBbMV0gKyAiLWRldiIKKyAgICAgICAgZC5zZXRWYXIoIkRFQklBTl9OT0FVVE9OQU1FXyIgKyBmdWxscCwgIjEiKQorICAgICAgICBkLmFwcGVuZFZhcigiUlJFUExBQ0VTXyIgKyBmdWxscCwgcGtncykKKyAgICAgICAgZC5hcHBlbmRWYXIoIlJQUk9WSURFU18iICsgZnVsbHAsIHBrZ3MpCisgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyIgKyBmdWxscCwgcGtncykKK30KKworcHl0aG9uIG1lc2FfcG9wdWxhdGVfcGFja2FnZXMoKSB7CisgICAgcGtncyA9IFsnbWVzYScsICdtZXNhLWRldicsICdtZXNhLWRiZyddCisgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICBkLnNldFZhcigiUlBST1ZJREVTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKyAgICAgICAgZC5zZXRWYXIoIlJDT05GTElDVFNfJXMiICUgcGtnLCBwa2cucmVwbGFjZSgibWVzYSIsICJtZXNhLWRyaSIsIDEpKQorICAgICAgICBkLnNldFZhcigiUlJFUExBQ0VTXyVzIiAlIHBrZywgcGtnLnJlcGxhY2UoIm1lc2EiLCAibWVzYS1kcmkiLCAxKSkKKworICAgIGltcG9ydCByZQorICAgIGRyaV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZHJpIikKKyAgICBkcmlfcGtncyA9IG9zLmxpc3RkaXIoZC5nZXRWYXIoJ1BLR0QnLCBUcnVlKSArIGRyaV9kcml2ZXJzX3Jvb3QpCisgICAgbGliX25hbWUgPSBkLmV4cGFuZCgiJHtNTFBSRUZJWH1tZXNhLW1lZ2Fkcml2ZXIiKQorICAgIGZvciBwIGluIGRyaV9wa2dzOgorICAgICAgICBtID0gcmUubWF0Y2goJ14oLiopX2RyaVwuc28kJywgcCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHBrZ19uYW1lID0gIiAke01MUFJFRklYfW1lc2EtZHJpdmVyLSVzIiAlIGxlZ2l0aW1pemVfcGFja2FnZV9uYW1lKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICBkLmFwcGVuZFZhcigiUlBST1ZJREVTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSQ09ORkxJQ1RTXyVzIiAlIGxpYl9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgIGQuYXBwZW5kVmFyKCJSUkVQTEFDRVNfJXMiICUgbGliX25hbWUsIHBrZ19uYW1lKQorCisgICAgcGlwZV9kcml2ZXJzX3Jvb3QgPSBvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ2xpYmRpcicsIFRydWUpLCAiZ2FsbGl1bS1waXBlIikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwaXBlX2RyaXZlcnNfcm9vdCwgJ15waXBlXyguKilcLnNvJCcsICdtZXNhLWRyaXZlci1waXBlLSVzJywgJ01lc2EgJXMgcGlwZSBkcml2ZXInLCBleHRyYV9kZXBlbmRzPScnKQorfQorCitQQUNLQUdFU1BMSVRGVU5DU19wcmVwZW5kID0gIm1lc2FfcG9wdWxhdGVfcGFja2FnZXMgIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJebWVzYS1kcml2ZXItLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWcvKiIKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2RyaXJjIgorRklMRVNfbWVzYS1tZWdhZHJpdmVyID0gIiR7bGliZGlyfS9kcmkvKiIKK0ZJTEVTX2xpYmVnbC1tZXNhID0gIiR7bGliZGlyfS9saWJFR0wuc28uKiIKK0ZJTEVTX2xpYmdibSA9ICIke2xpYmRpcn0vbGliZ2JtLnNvLioiCitGSUxFU19saWJnbGVzMS1tZXNhID0gIiR7bGliZGlyfS9saWJHTEVTdjEqLnNvLioiCitGSUxFU19saWJnbGVzMi1tZXNhID0gIiR7bGliZGlyfS9saWJHTEVTdjIuc28uKiIKK0ZJTEVTX2xpYmdsLW1lc2EgPSAiJHtsaWJkaXJ9L2xpYkdMLnNvLioiCitGSUxFU19saWJnbGFwaSA9ICIke2xpYmRpcn0vbGliZ2xhcGkuc28uKiIKK0ZJTEVTX2xpYm9zbWVzYSA9ICIke2xpYmRpcn0vbGliT1NNZXNhLnNvLioiCitGSUxFU19saWJ3YXlsYW5kLWVnbCA9ICIke2xpYmRpcn0vbGlid2F5bGFuZC1lZ2wuc28uKiIKK0ZJTEVTX2xpYnh2bWNzb2Z0cGlwZSA9ICIke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLnNvLioiCitGSUxFU19saWJ4YXRyYWNrZXIgPSAiJHtsaWJkaXJ9L2xpYnhhdHJhY2tlci5zby4qIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZy9kcmkucGMiCitGSUxFU19saWJlZ2wtbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYkVHTC4qICR7aW5jbHVkZWRpcn0vRUdMICR7aW5jbHVkZWRpcn0vS0hSICR7bGliZGlyfS9wa2djb25maWcvZWdsLnBjIgorRklMRVNfbGliZ2JtLWRldiA9ICIke2xpYmRpcn0vbGliZ2JtLiogJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nYm0ucGMgJHtpbmNsdWRlZGlyfS9nYm0uaCIKK0ZJTEVTX2xpYmdsLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTC4qICR7aW5jbHVkZWRpcn0vR0wgJHtsaWJkaXJ9L3BrZ2NvbmZpZy9nbC5wYyIKK0ZJTEVTX2xpYmdsYXBpLWRldiA9ICIke2xpYmRpcn0vbGliZ2xhcGkuKiIKK0ZJTEVTX2xpYmdsZXMxLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTEVTdjEqLiogJHtpbmNsdWRlZGlyfS9HTEVTICR7bGliZGlyfS9wa2djb25maWcvZ2xlc3YxKi5wYyIKK0ZJTEVTX2xpYmdsZXMyLW1lc2EtZGV2ID0gIiR7bGliZGlyfS9saWJHTEVTdjIuKiAke2luY2x1ZGVkaXJ9L0dMRVMyICR7bGliZGlyfS9wa2djb25maWcvZ2xlc3YyLnBjIgorRklMRVNfbGliZ2xlczMtbWVzYS1kZXYgPSAiJHtpbmNsdWRlZGlyfS9HTEVTMyIKK0ZJTEVTX2xpYm9zbWVzYS1kZXYgPSAiJHtsaWJkaXJ9L2xpYk9TTWVzYS4qICR7aW5jbHVkZWRpcn0vb3NtZXNhLmggJHtsaWJkaXJ9L3BrZ2NvbmZpZy9vc21lc2EucGMiCitGSUxFU19saWJ3YXlsYW5kLWVnbC1kZXYgPSAiJHtsaWJkaXJ9L3BrZ2NvbmZpZy93YXlsYW5kLWVnbC5wYyAke2xpYmRpcn0vbGlid2F5bGFuZC1lZ2wuKiIKK0ZJTEVTX2xpYnh2bWNzb2Z0cGlwZS1kZXYgPSAiJHtsaWJkaXJ9L2xpYlh2TUNzb2Z0cGlwZS5zbyAke2xpYmRpcn0vbGliWHZNQ3NvZnRwaXBlLmxhIgorRklMRVNfbGlieGF0cmFja2VyLWRldiA9ICIke2xpYmRpcn0vbGlieGF0cmFja2VyLnNvICR7bGliZGlyfS9saWJ4YXRyYWNrZXIubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAke2luY2x1ZGVkaXJ9L3hhX3RyYWNrZXIuaCAke2luY2x1ZGVkaXJ9L3hhX2NvbXBvc2l0ZS5oICR7aW5jbHVkZWRpcn0veGFfY29udGV4dC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy94YXRyYWNrZXIucGMiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2RyaS8uZGVidWcvKiAke2xpYmRpcn0vZWdsLy5kZWJ1Zy8qICR7bGliZGlyfS9nYm0vLmRlYnVnLyogJHtsaWJkaXJ9L2dhbGxpdW0tcGlwZS8uZGVidWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfMTAuNi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNTUwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWVzYS9tZXNhXzEwLjYuMy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlICR7QlBOfS5pbmMKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZnJlZWRlc2t0b3Aub3JnL3B1Yi9tZXNhLyR7UFZ9L21lc2EtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTUzZTUyNWQyZjIwZWQ0OGZjYThmMWVjMzE3NmZkODMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTg1OTJlMDdjMzUwY2QyZTg5NjliNzNmYTgzMDQ4YzY1N2EzOWZlMmYxM2YzYjg4ZjVlNTgxOGZlMmU0Njc2ZCIKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21lc2EvbWVzYV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzNDUxNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9tZXNhL21lc2FfZ2l0LmJiCkBAIC0wLDAgKzEsMjIgQEAKK3JlcXVpcmUgJHtCUE59LmluYworCitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK1NSQ1JFViA9ICJlYTBkMWY1NzVjMjE0YzA5YmEzZGYxMjY0NGE5NjBlODZlMDMxNzY2IgorUFYgPSAiMTAuNS40K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC9tZXNhL21lc2E7YnJhbmNoPTEwLjUiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgKz0gInB5dGhvbi1tYWtvLW5hdGl2ZSIKKworaW5oZXJpdCBweXRob25uYXRpdmUKKworI2JlY2F1c2Ugd2UgY2Fubm90IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBhbGwgYXBwcyB3aWxsIHVzZSBwa2djb25maWcsCisjbWFrZSBlZ2xwbGF0Zm9ybS5oIGluZGVwZW5kZW50IG9mIE1FU0FfRUdMX05PX1gxMV9IRUFERVIKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2VnbCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncy9eI2lmIGRlZmluZWQoTUVTQV9FR0xfTk9fWDExX0hFQURFUlMpJC8jaWYgZGVmaW5lZChNRVNBX0VHTF9OT19YMTFfSEVBREVSUykgfHwgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAneDExJywgJzAnLCAnMScsIGQpfS8nICR7RH0ke2luY2x1ZGVkaXJ9L0VHTC9lZ2xwbGF0Zm9ybS5oCisgICAgZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9maWxlcy9taW5pLXgtc2Vzc2lvbiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9taW5pLXgtc2Vzc2lvbi9maWxlcy9taW5pLXgtc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2E2NTVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL2ZpbGVzL21pbmkteC1zZXNzaW9uCkBAIC0wLDAgKzEsMzkgQEAKKyMhL2Jpbi9zaAorIworIyBWZXJ5IHNpbXBsZSBzZXNzaW9uIG1hbmFnZXIgZm9yIE1pbmkgWAorIworCisjIFVuY29tbWVudCBiZWxvdyB0byBlbmFibGUgcGFyc2luZyBvZiBkZWJpYW4gbWVudSBlbnRyeXMKKyMgZXhwb3J0IE1CX1VTRV9ERUJfTUVOVVM9MSAKKworaWYgWyAtZSAkSE9NRS8ubWluaV94L3Nlc3Npb24gXQordGhlbgorZXhlYyAkSE9NRS8ubWluaV94L3Nlc3Npb24KK2ZpCisKK2lmIFsgLWUgL2V0Yy9taW5pX3gvc2Vzc2lvbiBdCit0aGVuCitleGVjIC9ldGMvbWluaV94L3Nlc3Npb24KK2ZpCisKK01JTklfWF9TRVNTSU9OX0RJUj0vZXRjL21pbmlfeC9zZXNzaW9uLmQKK2lmIFsgLWQgIiRNSU5JX1hfU0VTU0lPTl9ESVIiIF07IHRoZW4KKwkjIEV4ZWN1dGUgc2Vzc2lvbiBmaWxlIG9uIGJlaGFsZiBvZiBmaWxlIG93bmVyCisJZmluZCAkTUlOSV9YX1NFU1NJT05fRElSIC10eXBlIGYgfCB3aGlsZSByZWFkIFNFU1NJT05GSUxFOyBkbworCQlzZXQgK2UKKwkJVVNFUk5BTUU9YHN0YXQgLWMgJVUgJFNFU1NJT05GSUxFYAorCQkjIFVzaW5nIHN1IHJhdGhlciB0aGFuIHN1ZG8gYXMgbGF0ZXN0IDEuOC4xIGNhdXNlIGZhaWx1cmUgW1lPQ1RPICMxMjExXQorIwkJc3UgLWwgLWMgJyRTRVNTSU9ORklMRSYnICRVU0VSTkFNRQorCQlzdWRvIC1iIC1pIC11ICRVU0VSTkFNRSAkU0VTU0lPTkZJTEUmCisJCXNldCAtZQorCWRvbmUKK2ZpCisKKyMgVGhpcyByZXNvbHV0aW9uIGlzIGJpZyBlbm91Z2ggZm9yIGhvYjIncyBtYXggd2luZG93IHNpemUuCit4cmFuZHIgLXMgMTAyNHg3NjgKKworIyBEZWZhdWx0IGZpbGVzIHRvIHJ1biBpZiAkSE9NRS8ubWluaV94L3Nlc3Npb24gb3IgL2V0Yy9taW5pX3gvc2Vzc2lvbgorIyBkb250IGV4aXN0LiAKKworbWF0Y2hib3gtdGVybWluYWwmCitleGVjIG1hdGNoYm94LXdpbmRvdy1tYW5hZ2VyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbWluaS14LXNlc3Npb24vbWluaS14LXNlc3Npb25fMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL21pbmkteC1zZXNzaW9uXzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTg5ZDYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL21pbmkteC1zZXNzaW9uL21pbmkteC1zZXNzaW9uXzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlZlcnkgc2ltcGxlIHNlc3Npb24gbWFuYWdlciBmb3IgWCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueW9jdG9wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnBva3lsaW51eC5vcmciCisKK1BSID0gInI0IgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbWluaS14LXNlc3Npb247ZW5kbGluZT01O21kNT1iNjQzMGJmZmJjZjA1Zjk3NjBlNzI5Mzg4MjZiNzQ4NyIKKworU0VDVElPTiA9ICJ4MTEiCitSQ09ORkxJQ1RTXyR7UE59ID0gIm1hdGNoYm94LWNvbW1vbiIKKworU1JDX1VSSSA9ICJmaWxlOi8vbWluaS14LXNlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK1JERVBFTkRTXyR7UE59ID0gInN1ZG8iCisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV8ke1BOfSA9ICJ4LXNlc3Npb24tbWFuYWdlciIKK0FMVEVSTkFUSVZFX1RBUkdFVFt4LXNlc3Npb24tbWFuYWdlcl0gPSAiJHtiaW5kaXJ9L21pbmkteC1zZXNzaW9uIgorQUxURVJOQVRJVkVfUFJJT1JJVFkgPSAiNTAiCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSAke1N9L21pbmkteC1zZXNzaW9uICR7RH0vJHtiaW5kaXJ9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC1idWlsZC1kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M4YTgzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC0xLjAvZml4LWJ1aWxkLWRpci5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGaXggYnVpbGQgZm9yIFMgIT0gQgorCitUaGlzIHBhdGNoIGlzIHNwZWNpZmljIHRvIHZlcnNpb24gMS40LngKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODEKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorLS0KK0luZGV4OiBnaXQvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvZG9jcy9yZWZlcmVuY2UvbGlibXgtZ3RrL01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCisrKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14LWd0ay9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE0OjMzLjY4NDMxODY1MCArMDEwMAorQEAgLTEsMyArMSw2IEBACisrRVhUUkFfRElTVD0KKytDTEVBTkZJTEVTPQorKworICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorIAorICMgV2UgcmVxdWlyZSBhdXRvbWFrZSAxLjYgYXQgbGVhc3QuCitAQCAtNzcsNyArODAsNyBAQAorIEdUS0RPQ19MSUJTPSQoTVhfTElCUykgJCh0b3BfYnVpbGRkaXIpL214LWd0ay9saWJteC1ndGstJChNWF9BUElfVkVSU0lPTikubGEKKyAKKyAjIFRoaXMgaW5jbHVkZXMgdGhlIHN0YW5kYXJkIGd0ay1kb2MgbWFrZSBydWxlcywgY29waWVkIGJ5IGd0a2RvY2l6ZS4KKy1pbmNsdWRlICQodG9wX3NyY2RpcikvZ3RrLWRvYy5tYWtlCisraW5jbHVkZSAkKHRvcF9idWlsZGRpcikvZ3RrLWRvYy5tYWtlCisgCisgIyBPdGhlciBmaWxlcyB0byBkaXN0cmlidXRlCisgRVhUUkFfRElTVCArPSB2ZXJzaW9uLnhtbC5pbgorSW5kZXg6IGdpdC9kb2NzL3JlZmVyZW5jZS9saWJteC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MDc6MDIuMDI3MTU0Nzg4ICswMTAwCisrKysgZ2l0L2RvY3MvcmVmZXJlbmNlL2xpYm14L01ha2VmaWxlLmFtCTIwMTMtMDUtMDggMTU6MTQ6MjQuNDU2Mzc4MTM1ICswMTAwCitAQCAtMSwzICsxLDYgQEAKKytFWFRSQV9ESVNUPQorK0NMRUFORklMRVM9CisrCisgIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluCisgCisgIyBXZSByZXF1aXJlIGF1dG9tYWtlIDEuNiBhdCBsZWFzdC4KK0BAIC0xMDYsNyArMTA5LDcgQEAKKyBHVEtET0NfTElCUz0kKE1YX0xJQlMpICQodG9wX2J1aWxkZGlyKS9teC9saWJteC0kKE1YX0FQSV9WRVJTSU9OKS5sYQorIAorICMgVGhpcyBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgZ3RrLWRvYyBtYWtlIHJ1bGVzLCBjb3BpZWQgYnkgZ3RrZG9jaXplLgorLWluY2x1ZGUgJCh0b3Bfc3JjZGlyKS9ndGstZG9jLm1ha2UKKytpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9ndGstZG9jLm1ha2UKKyAKKyAjIE90aGVyIGZpbGVzIHRvIGRpc3RyaWJ1dGUKKyBFWFRSQV9ESVNUICs9IHZlcnNpb24ueG1sLmluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmM5M2RkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMC9maXgtdGVzdC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDIwIEBACitGaXggbWlzc2luZyBpbmNsdWRlIGRpcmVjdG9yeSB3aGVuIGJ1aWxkaW5nIHRlc3RzCisKK1RoaXMgcGF0Y2ggaXMgY3VycmVudGx5IHJlcXVpcmVkIGZvciBhbGwgdmVyc2lvbnMgb2YgbXgKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIEAgaHR0cHM6Ly9naXRodWIuY29tL2NsdXR0ZXItcHJvamVjdC9teC9pc3N1ZXMvODIKK1NpZ25lZC1vZmYtYnk6IFRvbWFzIEZyeWRyeWNoIDx0b21hc0BzbGVlcGZpdmUuY29tPgorLS0KK0luZGV4OiBnaXQvdGVzdHMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjE4OjU2LjkxODU5NjQyNSArMDEwMAorKysrIGdpdC90ZXN0cy9NYWtlZmlsZS5hbQkyMDEzLTA1LTA4IDE1OjIzOjI2Ljg2NDc4MTQwMSArMDEwMAorQEAgLTEwLDcgKzEwLDggQEAKKyAKKyBJTkNMVURFUyA9IFwKKyAJLUkkKHRvcF9zcmNkaXIpIFwKKy0JLUkkKHRvcF9idWlsZGRpcikKKysJLUkkKHRvcF9idWlsZGRpcilcCisrCS1JJCh0b3BfYnVpbGRkaXIpL214CisgCisgbm9pbnN0X1BST0dSQU1TID0gCQkJXAorIAl0ZXN0LWRlZm9ybS10ZXh0dXJlCQlcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXgtMS4wXzEuNC43LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTM1YjYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL214L214LTEuMF8xLjQuNy5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIG14LmluYworCisjIFRoZSAxLjQuNyB0YWcgZG9lcyBub3QgYnVpbGQgYWdhaW5zdCBjb2dsIDEuMTQsIHB1bGwgaW4gYSByZXZpc2lvbiB3aXRoIGEgZml4CitTUkNSRVYgPSAiOWIxZGI2YjgwNjBiZDAwYjEyMWE2OTJmOTQyNDA0YTI0YWUyOTYwZiIKK1BWID0gIjEuNC43K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vY2x1dHRlci1wcm9qZWN0L214LmdpdDticmFuY2g9bXgtMS40IFwKKwkgICBmaWxlOi8vZml4LWJ1aWxkLWRpci5wYXRjaCBcCisJICAgZmlsZTovL2ZpeC10ZXN0LWluY2x1ZGVzLnBhdGNoIFwKKwkgICIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9teC9teC13aWRnZXQuYztiZWdpbmxpbmU9ODtlbmRsaW5lPTIwO21kNT0xM2JiYTNjOTczYTcyNDE0YTcwMWUxZTg3YjVlZTg3OSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9teC9teC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXguaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlN2YxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvbXgvbXguaW5jCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQ2x1dHRlciBiYXNlZCBVSSB3aWRnZXQgbGlicmFyeSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCisKK2luaGVyaXQgY2x1dHRlciBhdXRvdG9vbHMtYnJva2Vuc2VwCisKK0RFUEVORFMgPSAiY2x1dHRlci0xLjAgZGJ1cy1nbGliIGdkay1waXhidWYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NvdXJjZS5jbHV0dGVyLXByb2plY3Qub3JnL3NvdXJjZXMvbXgvJHtAZ2V0X3ZlcmRpcigiJHtQVn0iKX0vbXgtJHtQVn0udGFyLnh6IgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWludHJvc3BlY3Rpb24JCVwKKwkgICAgICAgIC0tZGlzYWJsZS1ndGstZG9jCQlcCisJICAgICAgICAtLWRpc2FibGUtZ3RrLXdpZGdldHMJCVwKKwkJLS13aXRoLWRidXMJCQlcCisJCS0td2l0aC13aW5zeXM9bm9uZQkJXAorCQktLXdpdGhvdXQtY2x1dHRlci1pbWNvbnRleHQJXAorCQktLXdpdGhvdXQtY2x1dHRlci1nZXN0dXJlCVwKKwkJLS13aXRob3V0LXN0YXJ0dXAtbm90aWZpY2F0aW9uCVwKKwkJLS13aXRob3V0LWdsYWRlCQkJXAorCSAgICAgICAiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtY2x1dHRlci5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2N2U1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLWNsdXR0ZXIuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiQ2x1dHRlciBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitQUiA9ICJyNiIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRVMgPSAiXAorICAgICR7UE59LWNvcmUgXAorICAgICIKKworU1VNTUFSWV8ke1BOfS1jb3JlID0gIkNsdXR0ZXIgZ3JhcGhpY3MgbGlicmFyeSIKK1JERVBFTkRTXyR7UE59LWNvcmUgPSAiXAorICAgIGNsdXR0ZXItMS4wIFwKKyAgICBjbHV0dGVyLWdzdC0zLjAgXAorICAgIGNsdXR0ZXItZ3RrLTEuMCBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1kaXJlY3RmYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RjMGFlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtZGlyZWN0ZmIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJEaXJlY3RGQiB3aXRob3V0IFgxMSIKK0xJQ0VOU0UgPSAiTUlUIgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitUT1VDSCA9ICcgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAidG91Y2hzY3JlZW4iLCAidHNsaWIgdHNsaWItY2FsaWJyYXRlIHRzbGliLXRlc3RzIiwgIiIsZCl9JworCitSREVQRU5EU18ke1BOfSA9ICIgXAorCQlkaXJlY3RmYiBcCisJCWRpcmVjdGZiLWV4YW1wbGVzIFwKKwkJcGFuZ28gXAorCQlwYW5nby1tb2R1bGVzIFwKKwkJZm9udGNvbmZpZyBcCisJCSR7VE9VQ0h9IFwKKyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLWJhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczMDFhMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1iYXNlLmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiQmFzaWMgWDExIHNlc3Npb24iCitERVNDUklQVElPTiA9ICJQYWNrYWdlcyByZXF1aXJlZCB0byBzZXQgdXAgYSBiYXNpYyB3b3JraW5nIFgxMSBzZXNzaW9uIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIG1hdGNoYm94LXdtCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitSREVQRU5EU18ke1BOfSA9ICJcCisgICAgcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIgXAorICAgIHBhY2thZ2Vncm91cC1jb3JlLXgxMS11dGlscyBcCisgICAgZGJ1cyBcCisgICAgcG9pbnRlcmNhbCBcCisgICAgbWF0Y2hib3gtdGVybWluYWwgXAorICAgIG1hdGNoYm94LXdtIFwKKyAgICBtaW5pLXgtc2Vzc2lvbiBcCisgICAgbGliZXJhdGlvbi1mb250cyBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEteHNlcnZlci5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTNmMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXhzZXJ2ZXIuYmIKQEAgLTAsMCArMSwyMSBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyMKKworU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0MCIKKworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIFhTRVJWRVIKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1hTRVJWRVIgPz0gInhzZXJ2ZXIteG9yZyB4Zjg2LXZpZGVvLWZiZGV2IHhmODYtaW5wdXQtZXZkZXYiCitYU0VSVkVSQ09ERUNTID89ICIiCisKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1hTRVJWRVJ9IFwKKyAgICAke1hTRVJWRVJDT0RFQ1N9IFwKKyAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS14MTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzN2Q4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS5iYgpAQCAtMCwwICsxLDM0IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorIworCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0MCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHgxMS1jb21tb24KK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LXV0aWxzIgorCisjIHhzZXJ2ZXItY29tbW9uLCB4MTEtY29tbW9uCitWSVJUVUFMLVJVTlRJTUVfeHNlcnZlcl9jb21tb24gPz0gIngxMS1jb21tb24iCisKKyMgZWxzYSwgeHNlcnZlci1ub2RtLWluaXQKK1ZJUlRVQUwtUlVOVElNRV9ncmFwaGljYWxfaW5pdF9tYW5hZ2VyID89ICJ4c2VydmVyLW5vZG0taW5pdCIKKworU1VNTUFSWSA9ICJYMTEgZGlzcGxheSBzZXJ2ZXIgYW5kIGJhc2ljIHV0aWxpdGllcyIKK1JERVBFTkRTXyR7UE59ID0gIlwKKyAgICAke1BOfS14c2VydmVyIFwKKyAgICAke1BOfS11dGlscyBcCisgICAgIgorCitTVU1NQVJZXyR7UE59LXV0aWxzID0gIlgxMSBiYXNpYyB1dGlsaXRpZXMgYW5kIGluaXQiCitSREVQRU5EU18ke1BOfS11dGlscyA9ICJcCisgICAgJHtWSVJUVUFMLVJVTlRJTUVfeHNlcnZlcl9jb21tb259IFwKKyAgICAke1ZJUlRVQUwtUlVOVElNRV9ncmFwaGljYWxfaW5pdF9tYW5hZ2VyfSBcCisgICAgeGF1dGggXAorICAgIHhob3N0IFwKKyAgICB4c2V0IFwKKyAgICB4cmFuZHIgXAorICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMGZkZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28uaW5jCkBAIC0wLDAgKzEsOTkgQEAKK1NVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBsYXlvdXQgYW5kIHJlbmRlcmluZyBvZiBpbnRlcm5hdGlvbmFsaXplZCB0ZXh0IgorREVTQ1JJUFRJT04gPSAiUGFuZ28gaXMgYSBsaWJyYXJ5IGZvciBsYXlpbmcgb3V0IGFuZCByZW5kZXJpbmcgb2YgdGV4dCwgXAord2l0aCBhbiBlbXBoYXNpcyBvbiBpbnRlcm5hdGlvbmFsaXphdGlvbi4gUGFuZ28gY2FuIGJlIHVzZWQgYW55d2hlcmUgXAordGhhdCB0ZXh0IGxheW91dCBpcyBuZWVkZWQsIHRob3VnaCBtb3N0IG9mIHRoZSB3b3JrIG9uIFBhbmdvIHNvIGZhciBoYXMgXAorYmVlbiBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBHVEsrIHdpZGdldCB0b29sa2l0LiBQYW5nbyBmb3JtcyB0aGUgXAorY29yZSBvZiB0ZXh0IGFuZCBmb250IGhhbmRsaW5nIGZvciBHVEsrLTIueC4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnBhbmdvLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2Mi4wKyIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJ4ZnQiCitERVBFTkRTID0gImdsaWItMi4wIGZvbnRjb25maWcgZnJlZXR5cGUgemxpYiB2aXJ0dWFsL2xpYmljb252IGNhaXJvIGhhcmZidXp6IHFlbXUtbmF0aXZlIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICdwdGVzdCcsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteGZ0LC0td2l0aG91dC14ZnQsJHtYMTFERVBFTkRTfSIKK1BBQ0tBR0VDT05GSUdbcHRlc3RdID0gIi0tZW5hYmxlLWluc3RhbGxlZC10ZXN0cywtLWRpc2FibGUtaW5zdGFsbGVkLXRlc3RzLGdsaWItMi4wLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJnbGliLTIuMC1uYXRpdmUgY2Fpcm8tbmF0aXZlIGhhcmZidXp6LW5hdGl2ZSIKKworUEFDS0FHRVNfRFlOQU1JQyArPSAiXnBhbmdvLW1vZHVsZS0uKiIKKworUlJFQ09NTUVORFNfJHtQTn0gPSAicGFuZ28tbW9kdWxlLWJhc2ljLWZjIgorCitpbmhlcml0IGdub21lYmFzZSBndGstZG9jIHFlbXUgcHRlc3QKKworIyBDcmVhdGUgYSBwYW5nby1tb2R1bGVzIHBhY2thZ2UKK0FMTE9XX0VNUFRZXyR7QlBOfS1tb2R1bGVzID0gIjEiCitQQUNLQUdFUyArPSAiJHtCUE59LW1vZHVsZXMiCitSUkVDT01NRU5EU18ke0JQTn0tbW9kdWxlcyA9ICAiJHtAIiAiLmpvaW4oW3AgZm9yIHAgaW4gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKSBpZiBwLmZpbmQoInBhbmdvLW1vZHVsZSIpICE9IC0xXSl9IgorCisKK0VYVFJBX0FVVE9SRUNPTkYgPSAiIgorCisjIHNlZW1zIHRvIGdvIHdyb25nIHdpdGggZGVmYXVsdCBjZmxhZ3MKK0ZVTExfT1BUSU1JWkFUSU9OX2FybSA9ICItTzIiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtaW50cm9zcGVjdGlvbiBcCisJCS0tZW5hYmxlLWV4cGxpY2l0LWRlcHM9bm8gXAorCSAgICAgICAgLS1kaXNhYmxlLWRlYnVnIFwKKwkgICAgICAgIC0td2l0aC1tbHByZWZpeD0ke01MUFJFRklYfSIKKworTEVBRF9TT05BTUUgPSAibGlicGFuZ28tMS4wKiIKK0xJQlYgPSAiMS44LjAiCisKK3BhbmdvX3Bvc3RpbnN0KCkgeworaWYgISBbIC1lICREJHtzeXNjb25mZGlyfS9wYW5nbyBdIDsgdGhlbgorCW1rZGlyIC1wICREJHtzeXNjb25mZGlyfS9wYW5nbworZmkKKworaWYgWyAtbiAiJEQiIF07IHRoZW4KKwkke0BxZW11X3J1bl9iaW5hcnkoZCwgJyREJywnJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzJyl9IFwKKwkJJEQke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzLyouc28gXAorCQk+ICREJHtzeXNjb25mZGlyfS9wYW5nby8ke01MUFJFRklYfXBhbmdvLm1vZHVsZXMgMj4vZGV2L251bGwKKworCVsgJD8gLW5lIDAgXSAmJiBleGl0IDEKKworCXNlZCAtaSAtZSAiczokRDo6IiAkRCR7c3lzY29uZmRpcn0vcGFuZ28vJHtNTFBSRUZJWH1wYW5nby5tb2R1bGVzCisKKwlleGl0IDAKK2Vsc2UKKwkke2JpbmRpcn0vJHtNTFBSRUZJWH1wYW5nby1xdWVyeW1vZHVsZXMgPiAvZXRjL3BhbmdvLyR7TUxQUkVGSVh9cGFuZ28ubW9kdWxlcworZmkKK30KKworIyBUaGlzIGJpbmFyeSBuZWVkcyB0byBiZSBjb21waWxlZCBmb3IgdGhlIGhvc3QgYXJjaGl0ZWN0dXJlLiAgVGhpcyBpc24ndCBwcmV0dHkhCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWlmICR7QGJhc2VfY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdGVzdCcsICd0cnVlJywgJ2ZhbHNlJywgZCl9OyB0aGVuCisJCW1ha2UgQ0M9IiR7QlVJTERfQ0N9IiBDRkxBR1M9IiIgQU1fQ1BQRkxBR1M9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1jZmxhZ3MgZ2xpYi0yLjApIiBnZW5fYWxsX3VuaWNvZGVfTERBREQ9IiQocGtnLWNvbmZpZy1uYXRpdmUgLS1saWJzIGdsaWItMi4wKSIgLUMgJHtCfS90ZXN0cyBnZW4tYWxsLXVuaWNvZGUKKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaWYgWyAiJHtNTFBSRUZJWH0iICE9ICIiIF07IHRoZW4KKwkJbXYgJHtEfS8ke2JpbmRpcn0vcGFuZ28tcXVlcnltb2R1bGVzICR7RH0vJHtiaW5kaXJ9LyR7TUxQUkVGSVh9cGFuZ28tcXVlcnltb2R1bGVzIAorCWZpCit9CisKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIHBhbmdvX3Bvc3RpbnN0ID0gZC5nZXRWYXIoInBhbmdvX3Bvc3RpbnN0IiwgVHJ1ZSkKKworICAgIG1vZHVsZXNfcm9vdCA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcGFuZ28vJHtMSUJWfS9tb2R1bGVzJykKKworICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIG1vZHVsZXNfcm9vdCwgJ15wYW5nby0oLiopXC5zbyQnLCAncGFuZ28tbW9kdWxlLSVzJywgJ1BhbmdvIG1vZHVsZSAlcycsIHBhbmdvX3Bvc3RpbnN0KQorfQorCitGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3BhbmdvLyogJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L2xpYnBhbmdvKiR7U09MSUJTfSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3BhbmdvLyR7TElCVn0vbW9kdWxlcy8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wYW5nby8ke0xJQlZ9L21vZHVsZXMvKi5sYSIKKworRklMRVNfJHtQTn0tcHRlc3QgKz0gIiR7bGliZXhlY2Rpcn0vaW5zdGFsbGVkLXRlc3RzLyogXAorICAgICAgICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vaW5zdGFsbGVkLXRlc3RzL3BhbmdvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9L2luc3RhbGxlZC10ZXN0cy8uZGVidWciCisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJnbm9tZS1kZXNrdG9wLXRlc3RpbmcgbGliZXJhdGlvbi1mb250cyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9tdWx0aWxpYi1maXgtY2xlYW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDE0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoCkBAIC0wLDAgKzEsNzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIHRvIGFwcGx5IHRvIHBhbmdvLTEuMzIuNQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjIHBhbmdvLTEuMzIuNS9jb25maWd1cmUuYWMKKy0tLSBwYW5nby0xLjMyLjUvY29uZmlndXJlLmFjCTIwMTItMTItMDcgMDQ6NDM6MjUuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTA5IDA4OjI3OjQwLjMyODUxNjc5MiArMDIwMAorQEAgLTIxMyw2ICsyMTMsMTEgQEAKKworIEFDX1NVQlNUKFBBTkdPX0RFQlVHX0ZMQUdTKQorCisrQUNfQVJHX1dJVEgobWxwcmVmaXgsCisrICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1tbHByZWZpeD08QVJHPl0sIFttdWx0aWxpYiBwcmVmaXhdKSwKKysgICAgICAgICAgICBtbHByZWZpeF9zdHI9JHdpdGh2YWwsIG1scHJlZml4X3N0cj0iIikKKytBQ19ERUZJTkVfVU5RVU9URUQoW01MUFJFRklYXSwgWyIkbWxwcmVmaXhfc3RyIl0sIFttdWx0aWxpYiBwcmVmaXguXSkKKysKKyBBQ19BUkdfRU5BQkxFKHJlYnVpbGRzLAorICAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtcmVidWlsZHNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlIGFsbCBzb3VyY2UgYXV0b2dlbmVyYXRpb24gcnVsZXNdKV0sLAorZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMKKy0tLSBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jCTIwMTItMTItMTcgMjA6Mjc6NTYuMDAwMDAwMDAwICswMjAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYwkyMDEzLTAxLTA5IDA4OjMxOjE2LjMzNjUxMjA1MiArMDIwMAorQEAgLTU1NSwxMSArNTU1LDExIEBACisgICAgICAgZmlsZXMgPSBnX25ldyAoY2hhciAqLCAzKTsKKworICAgICAgIGZpbGVzWzBdID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X3N5c2NvbmZfc3ViZGlyZWN0b3J5ICgpLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhbmdvLm1vZHVsZXMiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggInBhbmdvLm1vZHVsZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZmlsZXNbMV0gPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfbGliX3N1YmRpcmVjdG9yeSAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9WRVJTSU9OLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1vZHVsZXMuY2FjaGUiLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxQUkVGSVggIm1vZHVsZXMuY2FjaGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZmlsZXNbMl0gPSBOVUxMOworICAgICB9CitAQCAtNjc0LDcgKzY3NCw4IEBACisgICAgICAgaWYgKCFub19tb2R1bGVfd2FybmluZykKKwl7CisJICBnY2hhciAqZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwYW5nb19nZXRfc3lzY29uZl9zdWJkaXJlY3RvcnkgKCksCistCQkJCQkgICAgICAicGFuZ28ubW9kdWxlcyIsCisrLyogRm9yIG11bHRpbGliIGNhc2UsIGtlZXAgbXVsdGlwbGUgY29uZmlnIGZpbGUgZm9yIGRpZmZlcmVudCBsaWJzICovCisrCQkJCQkgICAgICBNTFBSRUZJWCAicGFuZ28ubW9kdWxlcyIsCisJCQkJCSAgICAgIE5VTEwpOworCSAgZ19jcml0aWNhbCAoIk5vIG1vZHVsZXMgZm91bmQ6XG4iCisJCSAgICAgICJObyBidWlsdGluIG9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzIHdlcmUgZm91bmQuXG4iCitkaWZmIC1OdXJkIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqIHBhbmdvLTEuMzIuNS9wYW5nby9tb2R1bGVzLmMucmVqCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL21vZHVsZXMuYy5yZWoJMTk3MC0wMS0wMSAwMjowMDowMC4wMDAwMDAwMDAgKzAyMDAKKysrKyBwYW5nby0xLjMyLjUvcGFuZ28vbW9kdWxlcy5jLnJlagkyMDEzLTAxLTA5IDA4OjI3OjQwLjMyODUxNjc5MiArMDIwMAorQEAgLTAsMCArMSwxMiBAQAorKy0tLSBwYW5nby9tb2R1bGVzLmMJMjAxMC0wOS0yMiAwMzozNzowMS4wMDAwMDAwMDAgKzA4MDAKKysrKysgcGFuZ28vbW9kdWxlcy5jCTIwMTItMDUtMDggMjE6MjE6MDIuMDAwMDAwMDAwICswODAwCisrQEAgLTUyOSw3ICs1MjksOCBAQAorKworKyAgIGlmICghZmlsZV9zdHIpCisrICAgICBmaWxlX3N0ciA9IGdfYnVpbGRfZmlsZW5hbWUgKHBhbmdvX2dldF9zeXNjb25mX3N1YmRpcmVjdG9yeSAoKSwKKystCQkJCSAicGFuZ28ubW9kdWxlcyIsCisrKy8qIEZvciBtdWx0aWxpYiBjYXNlLCBrZWVwIG11bHRpcGxlIGNvbmZpZyBmaWxlIGZvciBkaWZmZXJlbnQgbGlicyAqLworKysJCQkJIE1MUFJFRklYICJwYW5nby5tb2R1bGVzIiwKKysgCQkJCSBOVUxMKTsKKysKKysgICBmaWxlcyA9IHBhbmdvX3NwbGl0X2ZpbGVfbGlzdCAoZmlsZV9zdHIpOworZGlmZiAtTnVyZCBwYW5nby0xLjMyLjUvcGFuZ28vcXVlcnltb2R1bGVzLmMgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCistLS0gcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCTIwMTItMDgtMjggMTU6Mjc6MTguMDAwMDAwMDAwICswMzAwCisrKysgcGFuZ28tMS4zMi41L3BhbmdvL3F1ZXJ5bW9kdWxlcy5jCTIwMTMtMDEtMDkgMDg6MzE6NDcuODI4NTExMzU5ICswMjAwCitAQCAtMzA0LDcgKzMwNCw3IEBACisKKyAgICAgICBjYWNoZV9maWxlID0gZ19idWlsZF9maWxlbmFtZSAocGFuZ29fZ2V0X2xpYl9zdWJkaXJlY3RvcnkgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRV9WRVJTSU9OLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW9kdWxlcy5jYWNoZSIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUFJFRklYICJtb2R1bGVzLmNhY2hlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgZXJyID0gTlVMTDsKKyAgICAgICBpZiAoIWdfZmlsZV9zZXRfY29udGVudHMgKGNhY2hlX2ZpbGUsIGNvbnRlbnRzLT5zdHIsIC0xLCAmZXJyKSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wYW5nby9wYW5nby9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODdhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ28vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMyBAQAorIyEgL2Jpbi9zaAorCitnbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyIHBhbmdvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGFuZ28vcGFuZ29fMS4zNi44LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzYuOC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGU0MjUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BhbmdvL3BhbmdvXzEuMzYuOC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHBhbmdvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vbXVsdGlsaWItZml4LWNsZWFuLnBhdGNoIFwKKyIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiMjE3YTlhNzUzMDA2Mjc1MjE1ZmE5ZmExMjc3NjBlY2UiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICIxOGRiYjUxYjhhZTEyYmFlMGFiN2E5NThlN2NmMzMxN2M5YWNmYzhhMWUxMTAzZWMyZjE0NzE2NGEwZmMyZDA3IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvcGlnbGl0L3BpZ2xpdC8wMDAxLXRlc3RzLUZpeC1taXNzaW5nLWluY2x1ZGUtb2YtWHV0aWwuaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdjYzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXQvMDAwMS10ZXN0cy1GaXgtbWlzc2luZy1pbmNsdWRlLW9mLVh1dGlsLmgucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KKworRnJvbSBlNDBlMGEyNWY5OTZkMmUyMDVjNGJkZWMyYzhhNWNjN2Y3NGU1MDY1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTY6MjU6MzAgLTAzMDAKK1N1YmplY3Q6IHRlc3RzOiBGaXggbWlzc2luZyBpbmNsdWRlIG9mIFh1dGlsLmgKKworVGhlIEVHTCB0ZXN0cyByZWx5IG9uIFh1dGlsLmggYmVpbmcgaW5jbHVkZWQuIFNvbWUgRUdMIGltcGxlbWVudGF0aW9uCitkb2VzIG5vdCBleHBsaXRseSBpbmNsdWRlIGl0IGJ5IGRlZmF1bHQgYW5kIHRoZW4gdGhlIGJ1aWxkIGZhaWxzLgorCitTaWduZWQtb2ZmLWJ5OiBPdGF2aW8gU2FsdmFkb3IgPG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyPgorUmV2aWV3ZWQtYnk6IE5laWwgUm9iZXJ0cyA8bmVpbEBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS90ZXN0cy9lZ2wvZWdsLWNvbmZpZ2xlc3MtY29udGV4dC5jIGIvdGVzdHMvZWdsL2VnbC1jb25maWdsZXNzLWNvbnRleHQuYworaW5kZXggMDUwNGEyNi4uMTU0YjU1YyAxMDA2NDQKKy0tLSBhL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKKysrKyBiL3Rlc3RzL2VnbC9lZ2wtY29uZmlnbGVzcy1jb250ZXh0LmMKK0BAIC0zMiw2ICszMiw3IEBACisgLyogQ2h1bmtzIG9mIGNvZGUgaW4gdGhpcyBmaWxlIGFyZSB0YWtlbiBmcm9tIGVnbC11dGlsLmMgKi8KKyAKKyAjaW5jbHVkZSA8WDExL1hsaWIuaD4KKysjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisgCisgI2luY2x1ZGUgInBpZ2xpdC11dGlsLWdsLmgiCisgI2luY2x1ZGUgInBpZ2xpdC11dGlsLWVnbC5oIgorLS0gCitjZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9waWdsaXQvcGlnbGl0X2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDgyNWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BpZ2xpdC9waWdsaXRfZ2l0LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiT3BlbkdMIGRyaXZlciB0ZXN0aW5nIGZyYW1ld29yayIKK0xJQ0VOU0UgPSAiTUlUICYgTEdQTHYyKyAmIEdQTHYzICYgR1BMdjIrICYgQlNELTMtQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjJiZWRlZDcxMDNhM2Q4YTQ0MmEyYTAzOTFkNjA3YjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvcGlnbGl0IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdGVzdHMtRml4LW1pc3NpbmctaW5jbHVkZS1vZi1YdXRpbC5oLnBhdGNoIgorCisjIEZyb20gMjAxNC8xMi8wNAorU1JDUkVWID0gIjEyNmM3ZDA0OWI4ZjMyZTU0MTYyNWQ1YTM1ZmJjNWY1ZTRlN2ZiZjgiCisjICh3aGVuIFBWIGdvZXMgYWJvdmUgMS4wIHJlbW92ZSB0aGUgdHJhaWxpbmcgcikKK1BWID0gIjEuMCtnaXRyJHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieHJlbmRlciB3YWZmbGUgdmlydHVhbC9saWJnbCBsaWJnbHUgcHl0aG9uLW1ha28tbmF0aXZlIHB5dGhvbi1udW1weS1uYXRpdmUiCisKK2luaGVyaXQgY21ha2UgcHl0aG9ubmF0aXZlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tmcmVlZ2x1dF0gPSAiLURQSUdMSVRfVVNFX0dMVVQ9MSwtRFBJR0xJVF9VU0VfR0xVVD0wLGZyZWVnbHV0LCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICBpZiBbICIke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdmcmVlZ2x1dCcsICd5ZXMnLCAnbm8nLCBkKX0iID0gIm5vIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAiL14jLippbmNsdWRlIDxHTFwvZnJlZWdsdXRfZXh0Lmg+JC9kIiAke1N9L3NyYy9waWdsaXQvZ2x1dF93cmFwLmgKKyAgICAgICAgc2VkIC1pIC1lICIvXiMuKmluY2x1ZGUuKjxHTFwvZ2x1dC5oPiQvZCIgJHtTfS9zcmMvcGlnbGl0L2dsdXRfd3JhcC5oCisgICBmaQorfQorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9waWdsaXQvKi8uZGVidWcvIgorCitSREVQRU5EU18ke1BOfSA9ICJ3YWZmbGUgcHl0aG9uIHB5dGhvbi1tYWtvIHB5dGhvbi1qc29uIHB5dGhvbi1zdWJwcm9jZXNzIFwKKwlweXRob24tYXJncGFyc2UgcHl0aG9uLWltcG9ydGxpYiBweXRob24tdW5peGFkbWluIFwKKwlweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi10ZXh0dXRpbHMgcHl0aG9uLW5ldHNlcnZlciBweXRob24tc2hlbGwgXAorCW1lc2EtZGVtb3MgYmFzaCBcCisJIgorCitJTlNBTkVfU0tJUF8ke1BOfSArPSAiZGV2LXNvIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9jay9wb25nLWNsb2NrLW5vLWZsaWNrZXIuYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2svcG9uZy1jbG9jay1uby1mbGlja2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFjZWJjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2svcG9uZy1jbG9jay1uby1mbGlja2VyLmMKQEAgLTAsMCArMSw0MTAgQEAKKy8qCisgKiBQb25nIENsb2NrIC0gQSBjbG9jayB0aGF0IHBsYXlzIHBvbmcuIAorICogICAgICAgICAgICAgU2VlIGh0dHA6Ly9tb2NvbG9jby5jb20vYXJjaGl2ZXMvMDAxNzY2LnBocCBmb3IgdGhlIGluc3BpcmF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNYXR0aGV3IEFsbHVtCisgKgorICogQXV0aG9yOiBNYXR0aGV3IEFsbHVtIG1hbGx1bUBvcGVuZWRoYW5kLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8WDExL1hsaWIuaD4KKyNpbmNsdWRlIDxYMTEvWHV0aWwuaD4KKyNpbmNsdWRlIDxYMTEvWGF0b20uaD4KKworLyogVHdlYWsgdmFsdWVzIGZvciBkaWZmZXJlbnQgaHcgc2V0dXBzICovCisKKyNkZWZpbmUgRlBTICAgICAgICAgIDUwCisjZGVmaW5lIFJFU1ggICAgICAgICA0MAorI2RlZmluZSBSRVNZICAgICAgICAgNDAKKyNkZWZpbmUgVE9fTUlTU19TRUNTIDU1CisjZGVmaW5lIEJBTExEWCAgICAgICAxNgorI2RlZmluZSBCQUxMRFkgICAgICAgNAorCisKK3R5cGVkZWYgc3RydWN0IFBvbmdDbG9jaworeworICBEaXNwbGF5ICp4ZHB5OworICBpbnQgICAgICB4c2NyZWVuOworICBXaW5kb3cgICB4d2luLCB4d2luX3Jvb3Q7CisgIFBpeG1hcCAgIGJhY2tidWZmZXI7CisgIEdDICAgICAgIHhnYzsKKyAgaW50ICAgICAgeHdpbl93aWR0aCwgeHdpbl9oZWlnaHQ7CisgIGludCAgICAgIHBpeGVsdywgcGl4ZWxoOworCisgIGludCAgICAgIGJhbGxfeCwgYmFsbF95LCBiYWxsX2R4LCBiYWxsX2R5OworICBpbnQgICAgICBiYXRhX3ksIGJhdGJfeTsKKyAgQm9vbCAgICAgYmF0YV90b19taXNzLCBiYXRiX3RvX21pc3M7CisKK30gCitQb25nQ2xvY2s7CisKK3ZvaWQKK2dldF90aW1lKGludCAqaG91ciwgaW50ICptaW4sIGludCAqc2VjKQoreworICBzdHJ1Y3QgdGltZXZhbCAgIHR2OworICBzdHJ1Y3QgdG0gICAgICAgKmxvY2FsVGltZSA9IE5VTEw7IAorICB0aW1lX3QgICAgICAgICAgIGFjdHVhbFRpbWU7CisKKyAgZ2V0dGltZW9mZGF5KCZ0diwgMCk7CisgIGFjdHVhbFRpbWUgPSB0di50dl9zZWM7CisgIGxvY2FsVGltZSA9IGxvY2FsdGltZSgmYWN0dWFsVGltZSk7CisKKyAgaWYgKGhvdXIpCisgICAgKmhvdXIgPSBsb2NhbFRpbWUtPnRtX2hvdXI7CisgIAorICBpZiAobWluKQorICAgICptaW4gID0gbG9jYWxUaW1lLT50bV9taW47CisKKyAgaWYgKHNlYykKKyAgICAqc2VjICA9IGxvY2FsVGltZS0+dG1fc2VjOworfQorCit2b2lkCitkcmF3X3JlY3QgKFBvbmdDbG9jayAqcG9uZ19jbG9jaywgCisJICAgaW50ICAgICAgICB4LAorCSAgIGludCAgICAgICAgeSwKKwkgICBpbnQgICAgICAgIHdpZHRoLAorCSAgIGludCAgICAgICAgaGVpZ2h0KQoreworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICB4ICogcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHkgKiBwb25nX2Nsb2NrLT5waXhlbGgsCisJCSAgd2lkdGggKiBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgaGVpZ2h0ICogcG9uZ19jbG9jay0+cGl4ZWxoKTsKK30KKwordm9pZAorZHJhd19maWVsZCAoUG9uZ0Nsb2NrICpwb25nX2Nsb2NrKQoreworICBpbnQgaTsKKworICBkcmF3X3JlY3QgKHBvbmdfY2xvY2ssIDAsIDAsIFJFU1grMSwgMSk7ICAKKyAgZHJhd19yZWN0IChwb25nX2Nsb2NrLCAwLCBSRVNZLTEsIFJFU1grMSwgMSk7ICAKKworICBmb3IgKGk9MDsgaSA8IFJFU1kvMjsgaSsrKQorICAgIGRyYXdfcmVjdCAocG9uZ19jbG9jaywgKFJFU1gvMiktMSwgaSoyLCAyLCAxKTsgIAorfQorCit2b2lkCitkcmF3X2RpZ2l0IChQb25nQ2xvY2sgKnBvbmdfY2xvY2ssIAorCSAgICBpbnQgICAgICAgIHgsCisJICAgIGludCAgICAgICAgeSwKKwkgICAgaW50ICAgICAgICBkaWdpdCkKK3sKKyAgaW50IGRpZ2l0c1tdID0geyAweDFmOGM2M2YsIDB4MWYyMTA4NiwgMHgxZjBmZTFmLCAweDFmODdlMWYsIDB4MTA4N2UzMSwKKwkJICAgMHgxZjg3YzNmLCAweDFmOGZjM2YsIDB4ODQ0MjFmLCAgMHgxZjhmZTNmLCAweDEwODdlM2YgfTsKKworICBYUmVjdGFuZ2xlIHJlY3RzWzUqNV07CisgIGludCBpLGosazsKKworICBpID0gMDsKKworICBmb3IgKGs9MDsgazw1OyBrKyspIAorICAgIGZvciAoaj0wOyBqPDU7IGorKykJCisgICAgICBpZiAoZGlnaXRzW2RpZ2l0XSAmICgxIDw8ICgoayo1KStqKSkpCisJeworCSAgcmVjdHNbaV0ueCAgICAgID0gKHggKyBqKSAqIHBvbmdfY2xvY2stPnBpeGVsdzsgCisJICByZWN0c1tpXS55ICAgICAgPSAoeSArIGspICogcG9uZ19jbG9jay0+cGl4ZWxoOyAKKwkgIHJlY3RzW2ldLndpZHRoICA9IHBvbmdfY2xvY2stPnBpeGVsdzsKKwkgIHJlY3RzW2ldLmhlaWdodCA9IHBvbmdfY2xvY2stPnBpeGVsaDsgIAorCSAgaSsrOworCX0KKworICBYRmlsbFJlY3RhbmdsZXMgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgIHBvbmdfY2xvY2stPmJhY2tidWZmZXIsCisJCSAgIHBvbmdfY2xvY2stPnhnYywKKwkJICAgcmVjdHMsIGkpOworfSAKKwordm9pZAorZHJhd190aW1lIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBob3VyLCBtaW47CisKKyAgZ2V0X3RpbWUoJmhvdXIsICZtaW4sIE5VTEwpOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpIC0gMTQsCisJICAgICAgNSwKKwkgICAgICBob3VyIC8gMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSAtIDgsCisJICAgICAgNSwKKwkgICAgICBob3VyICUgMTAgKTsKKworICBkcmF3X2RpZ2l0IChwb25nX2Nsb2NrLCAKKwkgICAgICAoUkVTWC8yKSArIDMsCisJICAgICAgNSwKKwkgICAgICBtaW4gLyAxMCApOworCisgIGRyYXdfZGlnaXQgKHBvbmdfY2xvY2ssIAorCSAgICAgIChSRVNYLzIpICsgOSwKKwkgICAgICA1LAorCSAgICAgIG1pbiAlIDEwICk7Cit9CisKK3ZvaWQKK2RyYXdfYmF0X2FuZF9iYWxsIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIC8qIGJhbGwgKi8KKworICBYRmlsbFJlY3RhbmdsZSAocG9uZ19jbG9jay0+eGRweSwKKwkJICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyLAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBwb25nX2Nsb2NrLT5iYWxsX3gsCisJCSAgcG9uZ19jbG9jay0+YmFsbF95LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsdywKKwkJICBwb25nX2Nsb2NrLT5waXhlbGgpOworCisgIC8qIGJhdCBhICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgMCwKKwkJICBwb25nX2Nsb2NrLT5iYXRhX3kgLSAoMiAqIHBvbmdfY2xvY2stPnBpeGVsaCksCisJCSAgcG9uZ19jbG9jay0+cGl4ZWx3LAorCQkgIHBvbmdfY2xvY2stPnBpeGVsaCAqIDUpOworCisgIC8qIGJhdCBiICovCisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgKHBvbmdfY2xvY2stPnh3aW5fd2lkdGggLSBwb25nX2Nsb2NrLT5waXhlbHcpLAorCQkgIHBvbmdfY2xvY2stPmJhdGJfeSAtICgyICogcG9uZ19jbG9jay0+cGl4ZWxoKSwKKwkJICBwb25nX2Nsb2NrLT5waXhlbHcsCisJCSAgcG9uZ19jbG9jay0+cGl4ZWxoICogNSk7CisKK30KKwordm9pZAordXBkYXRlX3N0YXRlIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIGludCBzZWMsIG1pbiwgaG91cjsKKworICBnZXRfdGltZSgmaG91ciwgJm1pbiwgJnNlYyk7CisKKyAgLyogQ2hlY2sgYmFsbCBpcyBvbiBmaWVsZCBhbmQgbm8gb25lcyBkdWVzIHRvIG1pc3MgYSBzaG90LgorICAqLworICBpZiAoIChwb25nX2Nsb2NrLT5iYWxsX3ggPCAwICYmICFwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MpIAorICAgICAgfHwgKHBvbmdfY2xvY2stPmJhbGxfeCA+IChwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3KQorCSAgJiYgIXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykgKQorICAgIHBvbmdfY2xvY2stPmJhbGxfZHggKj0gLTE7CisKKyAgaWYgKChwb25nX2Nsb2NrLT5iYWxsX3kgPCBwb25nX2Nsb2NrLT5waXhlbGgpCisgICAgICB8fCBwb25nX2Nsb2NrLT5iYWxsX3kgPiAocG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLSAoMipwb25nX2Nsb2NrLT5waXhlbGgpKSkKKyAgICBwb25nX2Nsb2NrLT5iYWxsX2R5ICo9IC0xOyAKKworICBwb25nX2Nsb2NrLT5iYWxsX3ggKz0gcG9uZ19jbG9jay0+YmFsbF9keDsKKyAgcG9uZ19jbG9jay0+YmFsbF95ICs9IHBvbmdfY2xvY2stPmJhbGxfZHk7CisKKyAgLyogU2V0IHVwIHNvbWVvbmUgdG8gbWlzcyBpZiB3ZSBnZXR0aW5nIGNsb3NlIHRvIGFuIGhvdXIgb3IgbWluLiAKKyAgICovCisgIGlmIChzZWMgPiBUT19NSVNTX1NFQ1MpCisgICAgeworICAgICAgaWYgKG1pbiA9PSA1OSkKKwlwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MgPSBUcnVlOwkKKyAgICAgIGVsc2UKKwlwb25nX2Nsb2NrLT5iYXRhX3RvX21pc3MgPSBUcnVlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIFJlc2V0IHRoZSBnYW1lICovCisgICAgICBpZiAocG9uZ19jbG9jay0+YmF0YV90b19taXNzKQorCXsKKwkgIHBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcyA9IEZhbHNlOworCSAgcG9uZ19jbG9jay0+YmFsbF95ID0gcG9uZ19jbG9jay0+YmF0YV95OyAKKwkgIHBvbmdfY2xvY2stPmJhbGxfeCA9IHBvbmdfY2xvY2stPnBpeGVsdzsgCisJICBwb25nX2Nsb2NrLT5iYWxsX2R4ICo9IC0xOworCX0KKworICAgICAgaWYgKHBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykKKwl7CisJICBwb25nX2Nsb2NrLT5iYXRiX3RvX21pc3MgPSBGYWxzZTsKKwkgIHBvbmdfY2xvY2stPmJhbGxfeSA9IHBvbmdfY2xvY2stPmJhdGJfeTsgCisJICBwb25nX2Nsb2NrLT5iYWxsX3ggPSBwb25nX2Nsb2NrLT54d2luX3dpZHRoIC0gcG9uZ19jbG9jay0+cGl4ZWx3OworCSAgcG9uZ19jbG9jay0+YmFsbF9keCAqPSAtMTsgCisJfQorICAgIH0KKworICAvKiBLZWVwIGJhdHMgb24gZmllbGQgYW5kIG9ubHkgbW92ZSBpbiBub3Qgc2V0dXAgdG8gbWlzcyAqLworICBpZiAocG9uZ19jbG9jay0+YmFsbF95ID49ICgzKnBvbmdfY2xvY2stPnBpeGVsaCkKKyAgICAgICYmIHBvbmdfY2xvY2stPmJhbGxfeSA8PSAgKHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0IC0gKDUqcG9uZ19jbG9jay0+cGl4ZWxoKSkpCisgIHsKKyAgICBpZiAoIXBvbmdfY2xvY2stPmJhdGJfdG9fbWlzcykgCisgICAgICBwb25nX2Nsb2NrLT5iYXRiX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisKKyAgICBpZiAoIXBvbmdfY2xvY2stPmJhdGFfdG9fbWlzcykKKyAgICAgIHBvbmdfY2xvY2stPmJhdGFfeSA9IHBvbmdfY2xvY2stPmJhbGxfeTsKKyAgfQorfQorCit2b2lkCitkcmF3X2ZyYW1lIChQb25nQ2xvY2sgKnBvbmdfY2xvY2spCit7CisgIHVwZGF0ZV9zdGF0ZSAocG9uZ19jbG9jayk7CisKKyAgLyogQ2xlYXIgcGxheWZpZWxkICovCisgIFhTZXRGb3JlZ3JvdW5kIChwb25nX2Nsb2NrLT54ZHB5LAorCQkgIHBvbmdfY2xvY2stPnhnYywKKwkJICBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICBwb25nX2Nsb2NrLT54c2NyZWVuKSk7CisKKyAgWEZpbGxSZWN0YW5nbGUgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+YmFja2J1ZmZlciwKKwkJICBwb25nX2Nsb2NrLT54Z2MsCisJCSAgMCwgMCwKKwkJICBwb25nX2Nsb2NrLT54d2luX3dpZHRoLCAKKwkJICBwb25nX2Nsb2NrLT54d2luX2hlaWdodCk7CisKKyAgWFNldEZvcmVncm91bmQgKHBvbmdfY2xvY2stPnhkcHksCisJCSAgcG9uZ19jbG9jay0+eGdjLAorCQkgIFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBkcmF3X2ZpZWxkIChwb25nX2Nsb2NrKTsKKworICBkcmF3X3RpbWUgKHBvbmdfY2xvY2spOworCisgIGRyYXdfYmF0X2FuZF9iYWxsIChwb25nX2Nsb2NrKTsKKworICAvKiBmbGlwICdiYWNrYnVmZmVyJyAqLworICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcCAocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBwb25nX2Nsb2NrLT54d2luLAorCQkJICAgICAgcG9uZ19jbG9jay0+YmFja2J1ZmZlcik7CisgIFhDbGVhcldpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luKTsKKworICBYU3luYyhwb25nX2Nsb2NrLT54ZHB5LCBGYWxzZSk7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBYR0NWYWx1ZXMgIGdjdjsKKyAgQXRvbSAgICAgICBhdG9tc19XSU5ET1dfU1RBVEUsIGF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOOworICBQb25nQ2xvY2sgKnBvbmdfY2xvY2s7CisKKyAgcG9uZ19jbG9jayA9IG1hbGxvYyhzaXplb2YoUG9uZ0Nsb2NrKSk7CisgIG1lbXNldChwb25nX2Nsb2NrLCAwLCBzaXplb2YoUG9uZ0Nsb2NrKSk7CisKKyAgaWYgKChwb25nX2Nsb2NrLT54ZHB5ID0gWE9wZW5EaXNwbGF5KGdldGVudigiRElTUExBWSIpKSkgPT0gTlVMTCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiQ2Fubm90IGNvbm5lY3QgdG8gWCBzZXJ2ZXIgb24gZGlzcGxheSAlcy4iLAorCSAgICBnZXRlbnYoIkRJU1BMQVkiKSk7CisgICAgZXhpdCgtMSk7CisgIH0KKworICBwb25nX2Nsb2NrLT54c2NyZWVuICAgICA9IERlZmF1bHRTY3JlZW4ocG9uZ19jbG9jay0+eGRweSk7CisgIHBvbmdfY2xvY2stPnh3aW5fcm9vdCAgID0gRGVmYXVsdFJvb3RXaW5kb3cocG9uZ19jbG9jay0+eGRweSk7CisgIHBvbmdfY2xvY2stPnh3aW5fd2lkdGggID0gRGlzcGxheVdpZHRoKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIHBvbmdfY2xvY2stPnh3aW5faGVpZ2h0ID0gRGlzcGxheUhlaWdodChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJICBwb25nX2Nsb2NrLT54c2NyZWVuKTsKKworICBwb25nX2Nsb2NrLT5waXhlbHcgID0gcG9uZ19jbG9jay0+eHdpbl93aWR0aCAgLyBSRVNYOworICBwb25nX2Nsb2NrLT5waXhlbGggID0gcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQgLyBSRVNZOworCisgIHBvbmdfY2xvY2stPmJhbGxfeCA9IDA7IAorICBwb25nX2Nsb2NrLT5iYWxsX3kgPSBwb25nX2Nsb2NrLT54d2luX2hlaWdodCAvIDI7IAorCisgIHBvbmdfY2xvY2stPmJhbGxfZHggPSBCQUxMRFg7IAorICBwb25nX2Nsb2NrLT5iYWxsX2R5ID0gQkFMTERZOyAKKworICBwb25nX2Nsb2NrLT5iYXRiX3kgPSBwb25nX2Nsb2NrLT5iYXRhX3kgPSBwb25nX2Nsb2NrLT5iYWxsX3k7CisKKyAgZ2N2LmJhY2tncm91bmQgPSBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbik7CisgIGdjdi5mb3JlZ3JvdW5kID0gV2hpdGVQaXhlbChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCSAgICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pOworICBnY3YuZ3JhcGhpY3NfZXhwb3N1cmVzID0gRmFsc2U7CisKKyAgcG9uZ19jbG9jay0+eGdjID0gWENyZWF0ZUdDIChwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luX3Jvb3QsIAorCQkJICAgICAgIEdDRm9yZWdyb3VuZHxHQ0JhY2tncm91bmR8R0NHcmFwaGljc0V4cG9zdXJlcywKKwkJCSAgICAgICAmZ2N2KTsKKworICBhdG9tc19XSU5ET1dfU1RBVEUKKyAgICA9IFhJbnRlcm5BdG9tKHBvbmdfY2xvY2stPnhkcHksICJfTkVUX1dNX1NUQVRFIixGYWxzZSk7CisgIGF0b21zX1dJTkRPV19TVEFURV9GVUxMU0NSRUVOCisgICAgPSBYSW50ZXJuQXRvbShwb25nX2Nsb2NrLT54ZHB5LCAiX05FVF9XTV9TVEFURV9GVUxMU0NSRUVOIixGYWxzZSk7CisKKyAgcG9uZ19jbG9jay0+eHdpbiA9IFhDcmVhdGVTaW1wbGVXaW5kb3cocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCSBwb25nX2Nsb2NrLT54d2luX3Jvb3QsIAorCQkJCQkgMCwgMCwKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQsIAorCQkJCQkgMCwKKwkJCQkJIFdoaXRlUGl4ZWwocG9uZ19jbG9jay0+eGRweSwgCisJCQkJCQkgICAgcG9uZ19jbG9jay0+eHNjcmVlbiksCisJCQkJCSBCbGFja1BpeGVsKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgIHBvbmdfY2xvY2stPnhzY3JlZW4pKTsKKworICBwb25nX2Nsb2NrLT5iYWNrYnVmZmVyID0gWENyZWF0ZVBpeG1hcChwb25nX2Nsb2NrLT54ZHB5LCAKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fcm9vdCwKKwkJCQkJIHBvbmdfY2xvY2stPnh3aW5fd2lkdGgsIAorCQkJCQkgcG9uZ19jbG9jay0+eHdpbl9oZWlnaHQsIAorCQkJCQkgRGVmYXVsdERlcHRoKHBvbmdfY2xvY2stPnhkcHksIAorCQkJCQkJICAgICAgcG9uZ19jbG9jay0+eHNjcmVlbikpOworCisgIFhTZWxlY3RJbnB1dChwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luLCBLZXlQcmVzc01hc2spOworICAKKworICAvKiBTZXQgdGhlIGhpbnRzIGZvciBmdWxsc2NyZWVuICovCisgIFhDaGFuZ2VQcm9wZXJ0eShwb25nX2Nsb2NrLT54ZHB5LCAKKwkJICBwb25nX2Nsb2NrLT54d2luLCAKKwkJICBhdG9tc19XSU5ET1dfU1RBVEUsIAorCQkgIFhBX0FUT00sIAorCQkgIDMyLCAKKwkJICBQcm9wTW9kZVJlcGxhY2UsIAorCQkgICh1bnNpZ25lZCBjaGFyICopICZhdG9tc19XSU5ET1dfU1RBVEVfRlVMTFNDUkVFTiwgMSk7CisKKyAgWE1hcFdpbmRvdyhwb25nX2Nsb2NrLT54ZHB5LCBwb25nX2Nsb2NrLT54d2luKTsKKyAgCisgIHdoaWxlIChUcnVlKSAKKyAgICB7CisgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgICAgWEV2ZW50ICAgICAgICAgeGV2OworCisgICAgICB0aW1lb3V0LnR2X3NlYyAgPSAwOworICAgICAgdGltZW91dC50dl91c2VjID0gMTAwMDAwMCAvIEZQUzsgCisgICAgICBzZWxlY3QgKDAsIE5VTEwsIE5VTEwsIE5VTEwsICZ0aW1lb3V0KTsKKworICAgICAgZHJhd19mcmFtZSAocG9uZ19jbG9jayk7CisKKyAgICAgIFhGbHVzaChwb25nX2Nsb2NrLT54ZHB5KTsKKworICAgICAgaWYgKFhQZW5kaW5nKHBvbmdfY2xvY2stPnhkcHkpKQorCXsKKwkgIGlmIChYQ2hlY2tNYXNrRXZlbnQocG9uZ19jbG9jay0+eGRweSwgCisJCQkgICAgICBLZXlQcmVzc01hc2ssCisJCQkgICAgICAmeGV2KSkKKwkgICAgZXhpdCgtMSk7CisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3BvbmctY2xvY2svcG9uZy1jbG9ja18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYTc5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9wb25nLWNsb2NrL3BvbmctY2xvY2tfMS4wLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiQSBjbG9jayBjb21iaW5lZCB3aXRoIGEgZ2FtZSBvZiBwb25nIgorTElDRU5TRSA9ICJHUEx2MisiCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIHhkbWNwIHhhdSIKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICJmaWxlOi8vcG9uZy1jbG9jay1uby1mbGlja2VyLmMiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3BvbmctY2xvY2stbm8tZmxpY2tlci5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWRkMjQ4ZDUwZjczZjc0NmQxZWU3ODU4NmIwYjJlYmQzIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2NvbXBpbGUgKCkgeworCSR7Q0N9IC1vIHBvbmctY2xvY2sgcG9uZy1jbG9jay1uby1mbGlja2VyLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIHgxMSB4YXUgeGRtY3BgCit9CisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorCWluc3RhbGwgLW0gMDc1NSBwb25nLWNsb2NrICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTg2ZjJiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD01OTA5N10KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4gc3RhcnR1cC1ub3RpZmljYXRpb24tMC4xMi9jb25maWd1cmUuaW4KKy0tLSBzdGFydHVwLW5vdGlmaWNhdGlvbi0wLjEyL2NvbmZpZ3VyZS5pbgkyMDExLTA1LTE2IDE3OjI5OjIwLjAwMDAwMDAwMCArMDMwMAorKysrIHN0YXJ0dXAtbm90aWZpY2F0aW9uLTAuMTIvY29uZmlndXJlLmluCTIwMTMtMDEtMDcgMDY6MDA6NDguOTIxOTA1NDA5ICswMjAwCitAQCAtMyw3ICszLDcgQEAKKyBBQ19DT05GSUdfU1JDRElSKGxpYnNuL3NuLWxhdW5jaGVlLmMpCisKKyBBTV9JTklUX0FVVE9NQUtFCistQU1fQ09ORklHX0hFQURFUihjb25maWcuaCkKKytBQ19DT05GSUdfSEVBREVSUyhjb25maWcuaCkKKworICMgSG9ub3IgYWNsb2NhbCBmbGFncworIEFDX1NVQlNUKEFDTE9DQUxfQU1GTEFHUywgIlwke0FDTE9DQUxfRkxBR1N9IikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3N0YXJ0dXAtbm90aWZpY2F0aW9uXzAuMTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxYjkzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy9zdGFydHVwLW5vdGlmaWNhdGlvbi9zdGFydHVwLW5vdGlmaWNhdGlvbl8wLjEyLmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiRW5hYmxlcyBtb25pdG9yaW5nIGFuZCBkaXNwbGF5IG9mIGFwcGxpY2F0aW9uIHN0YXJ0dXAiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3N0YXJ0dXAtbm90aWZpY2F0aW9uLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9U3BlY2lmaWNhdGlvbnMiCisKKyMgbW9zdCBmaWxlcyBhcmUgdW5kZXIgTUlULCBidXQgbGlic24vc24tdXRpbC5jIGlzIHVuZGVyIExHUEwsIHRoZQorIyBlZmZlY3RpdmUgbGljZW5zZSBpcyBMR1BMCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMmFlMmNkNDdkNmQyZjIzODQxMGY1MzY0ZGZiYzBmMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJzbi9zbi11dGlsLmM7ZW5kbGluZT0xODttZDU9MThhMTRkYzE4MjVkMzhlNzQxZDc3MjMxMWZlYTllZTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlic24vc24tY29tbW9uLmg7ZW5kbGluZT0yMzttZDU9NmQwNWJjMGViZGNmNTUxM2E2ZTc3Y2IyNmU4Y2Q3ZTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdGVzdC90ZXN0LWJvaWxlcnBsYXRlLmg7ZW5kbGluZT0yMzttZDU9OTIzZTcwNmIyYTcwNTg2MTc2ZWVhZDI2MWNjNWJiOTgiCisKK1BSID0gInIyIgorCitTRUNUSU9OID0gImxpYnMiCisKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSB4Y2ItdXRpbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwvbGlieDExCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3N0YXJ0dXAtbm90aWZpY2F0aW9uL3JlbGVhc2VzLyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjJjZDc3MzI2ZDRkY2FlZDlhNWEyM2ExMjMyZmIzOGU5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMzkxZjdlOTMwYzU4MzA5NTA0NWNkMmQxMGViNzNhNjRmMDg1YzdmZGU5ZDI2MGYyNjUyYzdjYjNjZmJlNGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYi90cy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMGRhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHMuY29uZgpAQCAtMCwwICsxLDI1IEBACisjIFVuY29tbWVudCBpZiB5b3Ugd2lzaCB0byB1c2UgdGhlIGxpbnV4IGlucHV0IGxheWVyIGV2ZW50IGludGVyZmFjZQorbW9kdWxlX3JhdyBpbnB1dAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtNTUwMC9TTC01MDAwZAorIyBtb2R1bGVfcmF3IGNvbGxpZQorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYSBTaGFycCBaYXVydXMgU0wtQzcwMC9DNzUwL0M3NjAvQzg2MAorIyBtb2R1bGVfcmF3IGNvcmdpCisKKyMgVW5jb21tZW50IGlmIHlvdSdyZSB1c2luZyBhIGRldmljZSB3aXRoIGEgVUNCMTIwMC8xMzAwLzE0MDAgVFMgaW50ZXJmYWNlCisjIG1vZHVsZV9yYXcgdWNiMXgwMAorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSFAgaVBhcSBoMzYwMCBvciBzaW1pbGFyCisjIG1vZHVsZV9yYXcgaDM2MDAKKworIyBVbmNvbW1lbnQgaWYgeW91J3JlIHVzaW5nIGEgSGl0YWNoaSBXZWJwYWQKKyMgbW9kdWxlX3JhdyBtazcxMgorCisjIFVuY29tbWVudCBpZiB5b3UncmUgdXNpbmcgYW4gSUJNIEFyY3RpYyBJSQorIyBtb2R1bGVfcmF3IGFyY3RpYzIKKworbW9kdWxlIHB0aHJlcyBwbWluPTEKK21vZHVsZSB2YXJpYW5jZSBkZWx0YT0zMAorbW9kdWxlIGRlaml0dGVyIGRlbHRhPTEwMAorbW9kdWxlIGxpbmVhcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzbGliLnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliL3RzbGliLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjhlOGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHNsaWIvdHNsaWIvdHNsaWIuc2gKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKworaWYgWyAtZSAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBdOyB0aGVuCisgICAgVFNMSUJfVFNERVZJQ0U9L2Rldi9pbnB1dC90b3VjaHNjcmVlbjAKKworICAgIGV4cG9ydCBUU0xJQl9UU0RFVklDRQorZmkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3RzbGliL3RzbGliXzEuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4YzdkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90c2xpYi90c2xpYl8xLjEuYmIKQEAgLTAsMCArMSw1MyBAQAorU1VNTUFSWSA9ICJBbiBhYnN0cmFjdGlvbiBsYXllciBmb3IgdG91Y2hzY3JlZW4gcGFuZWwgZXZlbnRzIgorREVTQ1JJUFRJT04gPSAiVHNsaWIgaXMgYW4gYWJzdHJhY3Rpb24gbGF5ZXIgZm9yIHRvdWNoc2NyZWVuIHBhbmVsIFwKK2V2ZW50cywgYXMgd2VsbCBhcyBhIGZpbHRlciBzdGFjayBmb3IgdGhlIG1hbmlwdWxhdGlvbiBvZiB0aG9zZSBldmVudHMuIFwKK1RzbGliIGlzIGdlbmVyYWxseSB1c2VkIG9uIGVtYmVkZGVkIGRldmljZXMgdG8gcHJvdmlkZSBhIGNvbW1vbiB1c2VyIFwKK3NwYWNlIGludGVyZmFjZSB0byB0b3VjaHNjcmVlbiBmdW5jdGlvbmFsaXR5LiIKK0hPTUVQQUdFID0gImh0dHA6Ly90c2xpYi5iZXJsaW9zLmRlLyIKKworQVVUSE9SID0gIlJ1c3NlbGwgS2luZyB3LyBwbHVnaW5zIGJ5IENocmlzIExhcnNvbiBldC4gYWwuIgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMzBhOTcxNmVmMzc2MmUzNDY3YTJmNjJiZjc5MGYwYSIKKworU1JDX1VSSSA9ICJodHRwczovL2dpdGh1Yi5jb20va2VyZ290aC90c2xpYi9yZWxlYXNlcy9kb3dubG9hZC8ke1BWfS90c2xpYi0ke1BWfS50YXIueHo7ZG93bmxvYWRmaWxlbmFtZT10c2xpYi0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vdHMuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly90c2xpYi5zaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxNDc3MWY4NjA3YjM0MWJiNGIyOTc4MTlkMzdlODM3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZTM1ZTVmNzEwZWE5MzNiMTE4ZjcxMGUyY2U0NDAzYWMwNzZmZTY5OTI2YjU3MDMzMzg2N2Q0ZGUwODJhNTFjIgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZGlzYWJsZS1oMzYwMCAtLWVuYWJsZS1pbnB1dCAtLWRpc2FibGUtY29yZ2kgLS1kaXNhYmxlLWNvbGxpZSAtLWRpc2FibGUtbWs3MTIgLS1kaXNhYmxlLWFyY3RpYzIgLS1kaXNhYmxlLXVjYjF4MDAiCisKK2RvX2luc3RhbGxfcHJlcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS90cy5jb25mICR7U30vZXRjL3RzLmNvbmYKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vdHNsaWIuc2ggJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworfQorCisjIFBlb3BsZSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdWRldidzIC9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIHN5bWxpbmsKKyMgaW5zdGVhZCBvZiBkZXRlY3Qtc3R5bHVzCisjUkRFUEVORFNfdHNsaWItY29uZl93ZWlyZC1tYWNoaW5lID0gImRldGVjdC1zdHlsdXMiCitSUFJPVklERVNfdHNsaWItY29uZiA9ICJsaWJ0cy0wLjAtY29uZiIKKworUEFDS0FHRVMgPSsgInRzbGliLWNvbmYgdHNsaWItdGVzdHMgdHNsaWItY2FsaWJyYXRlIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItY29uZiA9ICIxIgorREVCSUFOX05PQVVUT05BTUVfdHNsaWItdGVzdHMgPSAiMSIKK0RFQklBTl9OT0FVVE9OQU1FX3RzbGliLWNhbGlicmF0ZSA9ICIxIgorCitSREVQRU5EU18ke1BOfSA9ICJ0c2xpYi1jb25mIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicG9pbnRlcmNhbCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vdHMvLmRlYnVnKiIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3RzLyoubGEiCitGSUxFU190c2xpYi1jb25mID0gIiR7c3lzY29uZmRpcn0vdHMuY29uZiAke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC90c2xpYi5zaCAke2RhdGFkaXJ9L3RzbGliIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmRpcn0vdHMvKi5zbyoiCitGSUxFU190c2xpYi1jYWxpYnJhdGUgKz0gIiR7YmluZGlyfS90c19jYWxpYnJhdGUiCitGSUxFU190c2xpYi10ZXN0cyA9ICIke2JpbmRpcn0vdHNfaGFydmVzdCAke2JpbmRpcn0vdHNfcHJpbnQgJHtiaW5kaXJ9L3RzX3ByaW50X3JhdyAke2JpbmRpcn0vdHNfdGVzdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250cy8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250cy8zMC1saWJlcmF0aW9uLWFsaWFzZXMuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjA5NDUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3R0Zi1mb250cy9saWJlcmF0aW9uLWZvbnRzLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGZvbnRjb25maWcgU1lTVEVNICJmb250cy5kdGQiPgorPCEtLSBjb25mLmQvc3ViLXBpeGVsLmNvbmYgLS0+Cis8Zm9udGNvbmZpZz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+c2Fucy1zZXJpZjwvZmFtaWx5PgorCQk8YWNjZXB0PjxmYW1pbHk+TGliZXJhdGlvbiBTYW5zPC9mYW1pbHk+PC9hY2NlcHQ+CisJPC9hbGlhcz4KKwk8YWxpYXM+CisJCTxmYW1pbHk+c2VyaWY8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gU2VyaWY8L2ZhbWlseT48L2FjY2VwdD4KKwk8L2FsaWFzPgorCTxhbGlhcz4KKwkJPGZhbWlseT5tb25vc3BhY2U8L2ZhbWlseT4KKwkJPGFjY2VwdD48ZmFtaWx5PkxpYmVyYXRpb24gTW9ubzwvZmFtaWx5PjwvYWNjZXB0PgorCTwvYWxpYXM+Cis8L2ZvbnRjb25maWc+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvbGliZXJhdGlvbi1mb250c18xLjA0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTgyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL2xpYmVyYXRpb24tZm9udHNfMS4wNC5iYgpAQCAtMCwwICsxLDQwIEBACitTVU1NQVJZID0gIkxpYmVyYXRpb24odG0pIEZvbnRzIgorREVTQ1JJUFRJT04gPSAiVGhlIExpYmVyYXRpb24odG0pIEZvbnRzIGlzIGEgZm9udCBmYW1pbHkgb3JpZ2luYWxseSBcCitjcmVhdGVkIGJ5IEFzY2VuZGVyKGMpIHdoaWNoIGFpbXMgYXQgbWV0cmljIGNvbXBhdGliaWxpdHkgd2l0aCBcCitBcmlhbCwgVGltZXMgTmV3IFJvbWFuLCBDb3VyaWVyIE5ldy4iCitIT01FUEFHRSA9ICJodHRwczovL2ZlZG9yYWhvc3RlZC5vcmcvbGliZXJhdGlvbi1mb250cy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS8iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIjIueCBkZXBlbmRzIG9uIGZvbnRmb3JnZSBwYWNrYWdlLCB3aGljaCBpcyBub3QgeWV0IHByb3ZpZGVkIGluIG9lLWNvcmUiCisKK1NFQ1RJT04gPSAieDExL2ZvbnRzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIgorUFIgPSAicjQiCitQRSA9ICIxIgorCitpbmhlcml0IGFsbGFyY2ggZm9udGNhY2hlCisKK0ZPTlRfUEFDS0FHRVMgPSAiJHtQTn0iCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9mZWRvcmFob3N0ZWQub3JnL3JlbGVhc2VzL2wvaS9saWJlcmF0aW9uLWZvbnRzL2xpYmVyYXRpb24tZm9udHMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzMwLWxpYmVyYXRpb24tYWxpYXNlcy5jb25mIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDg0Njc5N2VmMGZjNzBiMGNiYWVkZTI1MTQ2NzdjNTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGUwZDA5NTdjODViNzU4NTYxYTNkNGFlZjRlYmNkMmMzOTk1OWU1MzI4NDI5ZDk2YWUxMDYyNDlkODM1MzFhMSIKKworZG9faW5zdGFsbCAoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9mb250cy90dGYvCisJZm9yIGkgaW4gKi50dGY7IGRvCisJCWluc3RhbGwgLW0gMDY0NCAkaSAke0R9JHtwcmVmaXh9L3NoYXJlL2ZvbnRzL3R0Zi8ke2l9CisJZG9uZQorCisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cy9jb25mLmQvCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vMzAtbGliZXJhdGlvbi1hbGlhc2VzLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvY29uZi5kLworCisJaW5zdGFsbCAtZCAke0R9JHtwcmVmaXh9L3NoYXJlL2RvYy8ke0JQTn0vCisJaW5zdGFsbCAtbSAwNjQ0IExpY2Vuc2UudHh0ICR7RH0ke2RhdGFkaXJ9L2RvYy8ke0JQTn0vCit9CisKK1BBQ0tBR0VTID0gIiR7UE59IgorRklMRVNfJHtQTn0gKz0gIiR7c3lzY29uZmRpcn0gJHtkYXRhZGlyfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy90dGYtZm9udHMvdHRmLWJpdHN0cmVhbS12ZXJhXzEuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL3R0Zi1iaXRzdHJlYW0tdmVyYV8xLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZTRjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MvdHRmLWZvbnRzL3R0Zi1iaXRzdHJlYW0tdmVyYV8xLjEwLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiVGhlIEJpdHN0cmVhbSBWZXJhIGZvbnRzIC0gVFRGIEVkaXRpb24iCitERVNDUklQVElPTiA9ICJUaGUgQml0c3RyZWFtIFZlcmEgZm9udHMgaW5jbHVkZSBmb3VyIG1vbm9zcGFjZSBhbmQgc2FucyBcCitmYWNlcyAobm9ybWFsLCBvYmxpcXVlLCBib2xkLCBib2xkIG9ibGlxdWUpIGFuZCB0d28gc2VyaWYgZmFjZXMgKG5vcm1hbCBcCithbmQgYm9sZCkuICBJbiBhZGRpdGlvbiBGb250Y29uZmlnL1hmdDIgY2FuIGFydGlmaWNpYWxseSBvYmxpcXVlIHRoZSBcCitzZXJpZiBmYWNlcyBmb3IgeW91OiB0aGlzIGxvc2VzIGhpbnRpbmcgYW5kIGRpc3RvcnRzIHRoZSBmYWNlcyBzbGlnaHRseSwgXAorYnV0IGlzIHZpc2libHkgZGlmZmVyZW50IHRoYW4gbm9ybWFsIGFuZCBib2xkLCBhbmQgcmVhc29uYWJseSBwbGVhc2luZy4iCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiQml0c3RyZWFtVmVyYSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlSSUdIVC5UWFQ7bWQ1PTI3ZDc0ODRiMWUxOGQwZWU0Y2U1Mzg2NDRhM2YwNGJlIgorUFIgPSAicjciCisKK2luaGVyaXQgZm9udGNhY2hlCisKK0ZPTlRfUEFDS0FHRVMgPSAiJHtQTn0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9L3R0Zi1iaXRzdHJlYW0tdmVyYS8xLjEwL3R0Zi1iaXRzdHJlYW0tdmVyYS0ke1BWfS50YXIuYnoyIiAKKworZG9faW5zdGFsbCAoKSB7IAorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyAKKyAgICAgICAgZm9yIGkgaW4gKi50dGY7IGRvIAorICAgICAgICAgICAgICAgIGluc3RhbGwgLW0gNjQ0ICRpICR7RH0ke3ByZWZpeH0vc2hhcmUvZm9udHMvdHRmLyR7aX0gCisgICAgICAgIGRvbmUgCisKKwkjIGZvbnRjb25maWcgc2hpcHMgdGhpcyB0b28uICBub3Qgc3VyZSB3aGF0IHRvIGRvIGFib3V0IGl0LgorICAgICAgICAjaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9mb250cyAKKyAgICAgICAgI2luc3RhbGwgLW0gNjQ0IGxvY2FsLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZm9udHMvbG9jYWwuY29uZiAKKworCisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LworICAgICAgICBmb3IgaSBpbiAqLlRYVDsgZG8gCisgICAgICAgICAgICAgICAgaW5zdGFsbCAtbSA2NDQgJGkgJHtEfSR7cHJlZml4fS9zaGFyZS9kb2MvJHtCUE59LyRpCisgICAgICAgIGRvbmUgCit9IAorCitGSUxFU18ke1BOfSA9ICIvZXRjICR7ZGF0YWRpcn0vZm9udHMiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiYjIyYmQ1YjQ2NzVmNWRiZTE3YzY5NjNkOGMwMGVkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYjViMjdkZjdiYmIzMTgwMzZlYmRiNzVhY2QzZTk4ZjFiZDZlYjY2MDhmYjcwYTY3ZDQ3OGNkMjQzZDE3OGRjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2FmZmxlL3dhZmZsZV8xLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGFhMDVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dhZmZsZS93YWZmbGVfMS41LjEuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJjcm9zcy1wbGF0Zm9ybSBDIGxpYnJhcnkgdG8gZGVmZXIgc2VsZWN0aW9uIG9mIEdMIEFQSSBhbmQgb2Ygd2luZG93IHN5c3RlbSIKK0xJQ0VOU0UgPSAiQlNELTItQ2xhdXNlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS50eHQ7bWQ1PTRjNTE1NDQwN2MyNDkwNzUwZGQ0NjFjNTBhZDk0Nzk3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvd2FmZmxlL3dhZmZsZS5oO2VuZGxpbmU9MjQ7bWQ1PTYxZGJmODY5N2Y2MWM3ODY0NWU3NWE5M2M1ODViMWJmIgorCitTUkNfVVJJID0gImh0dHA6Ly93YWZmbGUtZ2wub3JnL2ZpbGVzL3JlbGVhc2UvJHtCUE59LSR7UFZ9LyR7QlBOfS0ke1BWfS50YXIueHoiCitTUkNfVVJJW21kNXN1bV0gPSAiYzBkODAyYmMzZDBhYmE4N2M1MWU0MjNhM2E4YmRkNjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2JhYjBlOTI2NTE1MDY0ZTgxOGJmMDg5YTVhZjA0YmUzMzMwN2U1ZjQwZDA3NjU5ZmI0MGQ1OWIyYmZlMjBhYSIKKworaW5oZXJpdCBjbWFrZSBkaXN0cm9fZmVhdHVyZXNfY2hlY2sgbGliX3BhY2thZ2UKKworIyBUaGlzIHNob3VsZCBiZSBvdmVycmlkZGVuIHBlci1tYWNoaW5lIHRvIHJlZmxlY3QgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgR0wKKyMgc3RhY2suCitQQUNLQUdFQ09ORklHID8/PSAiZ2x4IgorCisjIGxpYngxMSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTLgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ2dseCcsICd4MTEnLCAnJywgZCl9IgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGdsLnBjCitQQUNLQUdFQ09ORklHW2dseF0gPSAiLUR3YWZmbGVfaGFzX2dseD0xLC1Ed2FmZmxlX2hhc19nbHg9MCx2aXJ0dWFsL2xpYmdsIGxpYngxMSIKKworIyBJIHNheSB2aXJ0dWFsL2xpYmdsLCBhY3R1YWxseSB3YW50cyB3YXlsYW5kLWVnbC5wYywgZWdsLnBjLCBhbmQgdGhlIHdheWxhbmQKKyMgRElTVFJPX0ZFQVRVUkUuCitQQUNLQUdFQ09ORklHW3dheWxhbmRdID0gIi1Ed2FmZmxlX2hhc193YXlsYW5kPTEsLUR3YWZmbGVfaGFzX3dheWxhbmQ9MCx2aXJ0dWFsL2xpYmdsIHdheWxhbmQiCisKKyMgSSBzYXkgdmlydHVhbC9saWJnbCwgYWN0dWFsbHkgd2FudHMgZ2JtLnBjIGVnbC5wYworUEFDS0FHRUNPTkZJR1tnYm1dID0gIi1Ed2FmZmxlX2hhc19nYm09MSwtRHdhZmZsZV9oYXNfZ2JtPTAsdmlydHVhbC9saWJnbCB1ZGV2IgorCisjIEkgc2F5IHZpcnR1YWwvbGliZ2wsIGFjdHVhbGx5IHdhbnRzIGVnbC5wYworUEFDS0FHRUNPTkZJR1t4MTEtZWdsXSA9ICItRHdhZmZsZV9oYXNfeDExX2VnbD0xLC1Ed2FmZmxlX2hhc194MTFfZWdsPTAsdmlydHVhbC9saWJnbCBsaWJ4Y2IiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZS9Nb2R1bGVzL0ZpbmRXYWZmbGUuY21ha2UgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vY21ha2UvV2FmZmxlLyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbGliaW5wdXQvbGliaW5wdXQtY29uZmlndXJlLmFjLWFkZC1hcmctd2l0aC1saWJ1bndpbmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1ZWJjYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L2xpYmlucHV0LWNvbmZpZ3VyZS5hYy1hZGQtYXJnLXdpdGgtbGlidW53aW5kLnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK0Zyb20gY2M2ZmNlNTg3ZjI2MjhjOGIzNDI3NjRlMDZmYjBmYzI3YzFlODI3NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEphY2tpZSBIdWFuZyA8amFja2llLmh1YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBNb24sIDMgQXVnIDIwMTUgMjA6MzM6NDQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZmlndXJlLmFjOiBhZGQgYXJnIC0td2l0aC1saWJ1bndpbmQKKworQWRkIGFyZyAtLXdpdGgtbGlidW53aW5kIGZvciBjb25maWd1cmUgc28gaXQncyBvcHRpb25hbCB0byBjaGVjaworbGlidW53aW5kLCB3aGljaCBpcyBoZWxwZnVsbCB0byBtYWtlIGRldGVybWluaXN0aWMgYnVpbGRzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbd2F5bGFuZC1kZXZlbF0KKworU2lnbmVkLW9mZi1ieTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDE5ICsrKysrKysrKysrKysrLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzE0YjBkNC4uMjQyZDI1MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjAsMTMgKzYwLDIyIEBAIFBLR19QUk9HX1BLR19DT05GSUcoKQorIFBLR19DSEVDS19NT0RVTEVTKE1UREVWLCBbbXRkZXYgPj0gMS4xLjBdKQorIFBLR19DSEVDS19NT0RVTEVTKExJQlVERVYsIFtsaWJ1ZGV2XSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJFVkRFViwgW2xpYmV2ZGV2ID49IDAuNF0pCistUEtHX0NIRUNLX01PRFVMRVMoTElCVU5XSU5ELAorKworK0FDX0FSR19XSVRIKGxpYnVud2luZCwKKysgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWxpYnVud2luZF0sW0RvIG5vdCB1c2UgbGlidW53aW5kXSkpCisrCisrQVNfSUYoW3Rlc3QgIngkd2l0aF9saWJ1bndpbmQiICE9ICJ4bm8iXSwKKysJW1BLR19DSEVDS19NT0RVTEVTKExJQlVOV0lORCwKKyAJCSAgW2xpYnVud2luZF0sCisgCQkgIFtIQVZFX0xJQlVOV0lORD15ZXNdLAorLQkJICBbSEFWRV9MSUJVTldJTkQ9bm9dKQorLWlmIHRlc3QgIngkSEFWRV9MSUJVTldJTkQiID0gInh5ZXMiOyB0aGVuCistCUFDX0RFRklORShIQVZFX0xJQlVOV0lORCwgMSwgW0hhdmUgbGlidW53aW5kIHN1cHBvcnRdKQorLWZpCisrCQkgIFtIQVZFX0xJQlVOV0lORD1ub10pXSwKKysJW0hBVkVfTElCVU5XSU5EPW5vXSkKKysKKytBU19JRihbdGVzdCAieCRIQVZFX0xJQlVOV0lORCIgPSAieHllcyJdLAorKwlbQUNfREVGSU5FKEhBVkVfTElCVU5XSU5ELCAxLCBbSGF2ZSBsaWJ1bndpbmQgc3VwcG9ydF0pXSwKKysJW0FTX0lGKFt0ZXN0ICJ4JHdpdGhfbGlidW53aW5kIiA9ICJ4eWVzIl0sCisrCQlbQUNfTVNHX0VSUk9SKFtsaWJ1bndpbmQgcmVxdWVzdGVkIGJ1dCBub3QgZm91bmRdKV0pXSkKKysKKyBBTV9DT05ESVRJT05BTChIQVZFX0xJQlVOV0lORCwgW3Rlc3QgIngkSEFWRV9MSUJVTldJTkQiID0geHllc10pCisgQUNfUEFUSF9QUk9HKEFERFIyTElORSwgW2FkZHIybGluZV0pCisgaWYgdGVzdCAieCRBRERSMkxJTkUiICE9ICJ4IjsgdGhlbgorLS0gCisyLjMuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dC90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjNjNiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0L3RvdWNocGFkLXNlcmlhbC1zeW5hcHRpY3MtbmVlZC10by1mYWtlLW5ldy10b3VjaGVzLW9uLVRSSVBMRVRBUC5wYXRjaApAQCAtMCwwICsxLDcyIEBACitUaGlzIGlzIGEgd29ya2Fyb3VuZCB1cHN0cmVhbSBzdWdnZXN0cyBmb3IgdXNlIHdpdGgga2VybmVsIDQuMS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFt0ZW1wb3Jhcnkgd29yay1hcm91bmRdCitTaWduZWQtT2ZmLUJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisKKworRnJvbTogUGV0ZXIgSHV0dGVyZXIgPHBldGVyLmh1dHRlcmVyQHdoby10Lm5ldD4KK0RhdGU6IE1vbiBBdWcgMyAxODoyMzoxMiBQRFQgMjAxNQorU3ViamVjdDogW1BBVENIIHYzIGxpYmlucHV0XSB0b3VjaHBhZDogc2VyaWFsIHN5bmFwdGljcyBuZWVkIHRvIGZha2UgbmV3IHRvdWNoZXMgb24gVFJJUExFVEFQCisKK09uIHRoZSA0LjEga2VybmVscyBzeW5hcHRpY3MgcHJldGVuZHMgdG8gaGF2ZSAzIHNsb3RzICh0aGUgc2VyaWFsIGZ3IG9ubHkgZG9lcworMikuIFRoaXMgd2FzIGFkZGVkIHRvIGF2b2lkIGN1cnNvciBqdW1wcyBidXQgaGFzIHNpbmNlIGJlZW4gcmV2ZXJ0ZWQgZm9yIDQuMgorKGtlcm5lbCBjb21taXQgZGJmM2MzNzA4NiwgNC4xLjMgaXMgc3RpbGwgYnVnZ3kpLiBJbiBzb21lIGNhc2VzIGEgVFJJUExFVEFQCittYXkgYmUgdHJpZ2dlcmVkIHdpdGhvdXQgc2xvdCAyIGV2ZXIgYWN0aXZhdGluZy4KKworV2hpbGUgdGhlcmUgYXJlIHN0aWxsIHRob3NlIGtlcm5lbHMgb3V0IHRoZXJlLCB3b3JrIGFyb3VuZCB0aGlzIGJ1ZyBieSBvcGVuaW5nCithIG5ldyB0b3VjaCBwb2ludCB3aGVyZSBub25lIGV4aXN0cyBpZiB0aGUgZmFrZSBmaW5nZXIgY291bnQgZXhjZWVkcyB0aGUgc2xvdAorY291bnQuCisKK1JlcG9ydGVkLWJ5OiBKYW4gQWxleGFuZGVyIFN0ZWZmZW5zIDxqYW4uc3RlZmZlbnMgYXQgZ21haWwuY29tPgorU2lnbmVkLW9mZi1ieTogUGV0ZXIgSHV0dGVyZXIgPHBldGVyLmh1dHRlcmVyIGF0IHdoby10Lm5ldD4KK1Rlc3RlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyA8amFuLnN0ZWZmZW5zIGF0IGdtYWlsLmNvbT4KK1Jldmlld2VkLWJ5OiBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZSBhdCByZWRoYXQuY29tPgorLS0tCitDaGFuZ2VzIHRvIHYyOgorLSBzcGxpdCBvdXQgdGhlIGhhbmRsaW5nIGluc3RlYWQgb2YgaGF2aW5nIGEgdG1wIHN0YXRlIHZhcmlhYmxlLCBzZWUgSGFucycKKyAgY29tbWVudHMgZnJvbSB2MgorCitNYWlubHkgc2VuZGluZyB0aGlzIHRvIHRoZSBsaXN0IGFnYWluIHNvIEkgaGF2ZSBhIGxpbmsgdG8gcG9pbnQgcGVvcGxlIHRvLgorSWYgeW91J3JlIG9uIDQuMS54IGFkZCB0aGlzIHBhdGNoIHRvIHlvdXIgZGlzdHJpYnV0aW9uIHBhY2thZ2UuCisKKyBzcmMvZXZkZXYtbXQtdG91Y2hwYWQuYyB8IDIyICsrKysrKysrKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9ldmRldi1tdC10b3VjaHBhZC5jIGIvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKK2luZGV4IGE2ODNkOWEuLjVlZjAzZDUgMTAwNjQ0CistLS0gYS9zcmMvZXZkZXYtbXQtdG91Y2hwYWQuYworKysrIGIvc3JjL2V2ZGV2LW10LXRvdWNocGFkLmMKK0BAIC0zNjksMTMgKzM2OSwyMyBAQCB0cF9yZXN0b3JlX3N5bmFwdGljc190b3VjaGVzKHN0cnVjdCB0cF9kaXNwYXRjaCAqdHAsCisgCWZvciAoaSA9IDA7IGkgPCB0cC0+bnVtX3Nsb3RzOyBpKyspIHsKKyAJCXN0cnVjdCB0cF90b3VjaCAqdCA9IHRwX2dldF90b3VjaCh0cCwgaSk7CisgCistCQlpZiAodC0+c3RhdGUgIT0gVE9VQ0hfRU5EKQorKwkJc3dpdGNoKHQtPnN0YXRlKSB7CisrCQljYXNlIFRPVUNIX0hPVkVSSU5HOgorKwkJY2FzZSBUT1VDSF9CRUdJTjoKKysJCWNhc2UgVE9VQ0hfVVBEQVRFOgorIAkJCWNvbnRpbnVlOworLQorLQkJLyogbmV3IHRvdWNoLCBtb3ZlIGl0IHRocm91Z2ggYmVnaW4gdG8gdXBkYXRlIGltbWVkaWF0ZWx5ICovCistCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworLQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworLQkJdC0+c3RhdGUgPSBUT1VDSF9VUERBVEU7CisrCQljYXNlIFRPVUNIX05PTkU6CisrCQkJLyogbmV3IHRvdWNoLCBtb3ZlIGl0IHRocm91Z2ggdG8gYmVnaW4gaW1tZWRpYXRlbHkgKi8KKysJCQl0cF9uZXdfdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXRwX2JlZ2luX3RvdWNoKHRwLCB0LCB0aW1lKTsKKysJCQlicmVhazsKKysJCWNhc2UgVE9VQ0hfRU5EOgorKwkJCS8qIHRvdWNoIGp1c3QgZW5kZWQgLHdlIG5lZWQgbmVlZCB0byByZXN0b3JlIGl0IHRvIHVwZGF0ZSAqLworKwkJCXRwX25ld190b3VjaCh0cCwgdCwgdGltZSk7CisrCQkJdHBfYmVnaW5fdG91Y2godHAsIHQsIHRpbWUpOworKwkJCXQtPnN0YXRlID0gVE9VQ0hfVVBEQVRFOworKwkJCWJyZWFrOworKwkJfQorIAl9CisgfQorIAorLS0gCisyLjQuMworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8wLjIxLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC9saWJpbnB1dF8wLjIxLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1YTI0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL2xpYmlucHV0XzAuMjEuMC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkxpYnJhcnkgdG8gaGFuZGxlIGlucHV0IGRldmljZXMgaW4gV2F5bGFuZCBjb21wb3NpdG9ycyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliaW5wdXQvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTIxODRhZWYzOGZmMTM3ZWQzM2NlOWE2M2I5ZDFlYjhmIgorCitERVBFTkRTID0gImxpYmV2ZGV2IHVkZXYgbXRkZXYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvJHtCUE59LyR7QlB9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9saWJpbnB1dC1jb25maWd1cmUuYWMtYWRkLWFyZy13aXRoLWxpYnVud2luZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly90b3VjaHBhZC1zZXJpYWwtc3luYXB0aWNzLW5lZWQtdG8tZmFrZS1uZXctdG91Y2hlcy1vbi1UUklQTEVUQVAucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImY5MWQ4ZjRjZWQ5ODZmMWFlMTZkNTJlYTAyYmM3ODM3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjdjY2U3YTllNTEwZGZlNWM0YTE5YWQwMGU5MzUwODA4ZDRmNTlmODYxMWZkMmI1ZTg3MjEzYzUwNzI4M2Y1NTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0td2l0aC1saWJ1bndpbmQsLS13aXRob3V0LWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW2d1aV0gPSAiLS1lbmFibGUtZXZlbnQtZ3VpLC0tZGlzYWJsZS1ldmVudC1ndWksY2Fpcm8gZ3RrKzMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vdWRldi8iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS91ZGV2Ly5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvbXRkZXZfMS4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkMGViYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL210ZGV2XzEuMS41LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiTXVsdGl0b3VjaCBQcm90b2NvbCBUcmFuc2xhdGlvbiBMaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJtdGRldiBpcyBhIGxpYnJhcnkgd2hpY2ggdHJhbnNmb3JtcyBhbGwgdmFyaWFudHMgb2Yga2VybmVsIFwKK211bHRpdG91Y2ggZXZlbnRzIHRvIHRoZSBzbG90dGVkIHR5cGUgQiBwcm90b2NvbC4gVGhlIGV2ZW50cyBwdXQgaW50byBtdGRldiBtYXkgXAorYmUgZnJvbSBhbnkgTVQgZGV2aWNlLCBzcGVjaWZpY2FsbHkgdHlwZSBBIHdpdGhvdXQgY29udGFjdCB0cmFja2luZywgdHlwZSBBIHdpdGggXAorY29udGFjdCB0cmFja2luZywgb3IgdHlwZSBCIHdpdGggY29udGFjdCB0cmFja2luZyIKKworSE9NRVBBR0UgPSAiaHR0cDovL2JpdG1hdGgub3JnL2NvZGUvbXRkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhNmJkMDI2OGJiMGZjZDZiMjc2OTg2MTZjZWVlNWQ2IgorCitTUkNfVVJJID0gImh0dHA6Ly9iaXRtYXRoLm9yZy9jb2RlLyR7QlBOfS8ke0JQfS50YXIuYnoyIgorU1JDX1VSSVttZDVzdW1dID0gIjUyYzk2MTBiNjAwMmY3MWQxNjQyZGMxYTFjY2E1ZWMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY2NzdkNTcwOGE3OTQ4ODQwZGU3MzRkOGI0Njc1ZDU5ODBkNDU2MTE3MWM1YThlODllNTRhZGY3YTEzZWJhN2YiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwZTZiZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmQvYWx3YXlzLWJ1aWxkLXNjYW5uZXIucGF0Y2gKQEAgLTAsMCArMSwxMDUgQEAKK2J1aWxkOiBhbHdheXMgYnVpbGQgd2F5bGFuZC1zY2FubmVyCisKK1RoZSBwcmV2aW91cyBpZGlvbSBmb3IgYnVpbGRpbmcgYSBjcm9zcy1jb21waWxlZCBXYXlsYW5kIGlzIHRvIGJ1aWxkIG9uY2UgZm9yCit0aGUgYnVpbGQgaG9zdCAod2l0aCAtLWVuYWJsZS1zY2FubmVyIC0tZGlzYWJsZS1saWJyYXJpZXMpIHRvIGdldCBhCit3YXlsYW5kLXNjYW5uZXIgYmluYXJ5IHRoYXQgY2FuIHRoZW4gYmUgdXNlZCBpbiBhIGNyb3NzLWNvbXBpbGUgKHdpdGgKKy0tZGlzYWJsZS1zY2FubmVyKS4gIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IHRoZSBjcm9zcyB3YXlsYW5kIGlzIG1pc3NpbmcKK2Egd2F5bGFuZC1zY2FubmVyIGJpbmFyeSwgd2hpY2ggbWVhbnMgeW91IHRoZW4gY2FuJ3QgZG8gYW55IFdheWxhbmQgZGV2ZWxvcG1lbnQKK29uIHRoZSB0YXJnZXQuCisKK0luc3RlYWQsIGFsd2F5cyBidWlsZCB3YXlsYW5kLXNjYW5uZXIgZm9yIHRoZSB0YXJnZXQgYW5kIGNoYW5nZQorLS1lbmFibGUvZGlzYWJsZS1zY2FubmVyIHRvIC0td2l0aC93aXRob3V0LWhvc3Qtc2Nhbm5lci4gIE5vcm1hbCBidWlsZHMgdXNlIHRoZQorZGVmYXVsdCBvZiAtLXdpdGhvdXQtaG9zdC1zY2FubmVyIGFuZCBydW4gdGhlIHdheWxhbmQtc2Nhbm5lciBpdCBqdXN0IGJ1aWx0LCBhbmQKK2Nyb3NzLWNvbXBpbGVkIGJ1aWxkcyBwYXNzIC0td2l0aC1ob3N0LXNjYW5uZXIgdG8gdXNlIGEgcHJldmlvdXNseSBidWlsdCBob3N0CitzY2FubmVyIGJ1dCBzdGlsbCBnZXQgYSB3YXlsYW5kLXNjYW5uZXIgdG8gaW5zdGFsbC4KKworKGEgdGhlb3JldGljYWxseSBuZWF0ZXIgc29sdXRpb24gd291bGQgYmUgdG8gYnVpbGQgdHdvIHNjYW5uZXJzIGlmIHJlcXVpcmVkIChvbmUKK3RvIHJ1biBhbmQgb25lIHRvIGluc3RhbGwpLCBidXQgYXV0b21ha2UgbWFrZXMgdGhpcyBvdmVybHkgY29tcGxpY2F0ZWQpCisKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggYzE5NDk0Zi4uYzJkOTI5YiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTY0LDE2ICs2NCwxNyBAQCBub2Rpc3RfbGlid2F5bGFuZF9jbGllbnRfbGFfU09VUkNFUyA9CQlcCisgCisgcGtnY29uZmlnX0RBVEEgKz0gc3JjL3dheWxhbmQtY2xpZW50LnBjIHNyYy93YXlsYW5kLXNlcnZlci5wYworIAorLWlmIEVOQUJMRV9TQ0FOTkVSCistd2F5bGFuZF9zY2FubmVyID0gJCh0b3BfYnVpbGRkaXIpL3dheWxhbmQtc2Nhbm5lcgorIGJpbl9QUk9HUkFNUyA9IHdheWxhbmQtc2Nhbm5lcgorIHdheWxhbmRfc2Nhbm5lcl9TT1VSQ0VTID0gc3JjL3NjYW5uZXIuYworIHdheWxhbmRfc2Nhbm5lcl9DRkxBR1MgPSAkKEVYUEFUX0NGTEFHUykgJChBTV9DRkxBR1MpCisgd2F5bGFuZF9zY2FubmVyX0xEQUREID0gJChFWFBBVF9MSUJTKSBsaWJ3YXlsYW5kLXV0aWwubGEKKy0kKEJVSUxUX1NPVVJDRVMpIDogd2F5bGFuZC1zY2FubmVyCisgcGtnY29uZmlnX0RBVEEgKz0gc3JjL3dheWxhbmQtc2Nhbm5lci5wYworLWVsc2UKKysKKytpZiBIT1NUX1NDQU5ORVIKKyB3YXlsYW5kX3NjYW5uZXIgPSB3YXlsYW5kLXNjYW5uZXIKKytlbHNlCisrJChCVUlMVF9TT1VSQ0VTKSA6IHdheWxhbmQtc2Nhbm5lcgorK3dheWxhbmRfc2Nhbm5lciA9ICQodG9wX2J1aWxkZGlyKS93YXlsYW5kLXNjYW5uZXIKKyBlbmRpZgorIAorIHByb3RvY29sLyUtcHJvdG9jb2wuYyA6ICQodG9wX3NyY2RpcikvcHJvdG9jb2wvJS54bWwKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGMyYTgwNGUuLmRlMGIwMmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY1LDExICs2NSwxMSBAQCBBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKyAJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorIEFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorIAorLUFDX0FSR19FTkFCTEUoW3NjYW5uZXJdLAorLSAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtc2Nhbm5lcl0sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0Rpc2FibGUgY29tcGlsYXRpb24gb2Ygd2F5bGFuZC1zY2FubmVyXSldLAorLSAgICAgICAgICAgICAgW10sCistICAgICAgICAgICAgICBbZW5hYmxlX3NjYW5uZXI9eWVzXSkKKytBQ19BUkdfV0lUSChbaG9zdC1zY2FubmVyXSwKKysgICAgICAgICAgICBbQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1ob3N0LXNjYW5uZXJdLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIGEgaG9zdCB3YXlsYW5kLXNjYW5uZXJdKV0sCisrICAgICAgICAgICAgW10sCisrICAgICAgICAgICAgW3dpdGhfaG9zdF9zY2FubmVyPW5vXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtkb2N1bWVudGF0aW9uXSwKKyAJICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtZG9jdW1lbnRhdGlvbl0sCitAQCAtNzcsMjUgKzc3LDIzIEBAIEFDX0FSR19FTkFCTEUoW2RvY3VtZW50YXRpb25dLAorIAkgICAgICBbXSwKKyAJICAgICAgW2VuYWJsZV9kb2N1bWVudGF0aW9uPXllc10pCisgCistQU1fQ09ORElUSU9OQUwoRU5BQkxFX1NDQU5ORVIsIHRlc3QgIngkZW5hYmxlX3NjYW5uZXIiID0geHllcykKKytBTV9DT05ESVRJT05BTChIT1NUX1NDQU5ORVIsIHRlc3QgIngkd2l0aF9ob3N0X3NjYW5uZXIiID0geHllcykKKyAKKyBBQ19BUkdfV0lUSChpY29uZGlyLCBbICAtLXdpdGgtaWNvbmRpcj08ZGlyPiAgICBMb29rIGZvciBjdXJzb3IgaWNvbnMgaGVyZV0sCisgCQkgICAgIFsgIElDT05ESVI9JHdpdGh2YWxdLAorIAkJICAgICBbICBJQ09ORElSPSR7ZGF0YWRpcn0vaWNvbnNdKQorIEFDX1NVQlNUKFtJQ09ORElSXSkKKyAKKy1pZiB0ZXN0ICJ4JGVuYWJsZV9zY2FubmVyIiA9ICJ4eWVzIjsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhFWFBBVCwgW2V4cGF0XSwgW10sCistCQlbQUNfQ0hFQ0tfSEVBREVSUyhleHBhdC5oLCBbXSwKKy0JCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0LmguIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKy0JCSBTQVZFX0xJQlM9IiRMSUJTIgorLQkJIEFDX1NFQVJDSF9MSUJTKFhNTF9QYXJzZXJDcmVhdGUsIGV4cGF0LCBbXSwKKy0JCQlbQUNfTVNHX0VSUk9SKFtDYW4ndCBmaW5kIGV4cGF0IGxpYnJhcnkuIFBsZWFzZSBpbnN0YWxsIGV4cGF0Ll0pXSkKKy0JCSBFWFBBVF9MSUJTPSIkTElCUyIKKy0JCSBMSUJTPSIkU0FWRV9MSUJTIgorLQkJIEFDX1NVQlNUKEVYUEFUX0xJQlMpCistCQldKQorLWZpCisrUEtHX0NIRUNLX01PRFVMRVMoRVhQQVQsIFtleHBhdF0sIFtdLAorKwlbQUNfQ0hFQ0tfSEVBREVSUyhleHBhdC5oLCBbXSwKKysJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQuaC4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorKwkgU0FWRV9MSUJTPSIkTElCUyIKKysJIEFDX1NFQVJDSF9MSUJTKFhNTF9QYXJzZXJDcmVhdGUsIGV4cGF0LCBbXSwKKysJCVtBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgZXhwYXQgbGlicmFyeS4gUGxlYXNlIGluc3RhbGwgZXhwYXQuXSldKQorKwkgRVhQQVRfTElCUz0iJExJQlMiCisrCSBMSUJTPSIkU0FWRV9MSUJTIgorKwkgQUNfU1VCU1QoRVhQQVRfTElCUykKKysJXSkKKyAKKyBBQ19QQVRIX1BST0coWFNMVFBST0MsIHhzbHRwcm9jKQorIEFNX0NPTkRJVElPTkFMKFtIQVZFX1hTTFRQUk9DXSwgW3Rlc3QgIngkWFNMVFBST0MiICE9ICJ4Il0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kL2Rpc2FibGUtbWFjcm8tY2hlY2tzLW5vdC11c2VkLWZvci1zY2FubmVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9kaXNhYmxlLW1hY3JvLWNoZWNrcy1ub3QtdXNlZC1mb3Itc2Nhbm5lci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDhiYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2F5bGFuZC9kaXNhYmxlLW1hY3JvLWNoZWNrcy1ub3QtdXNlZC1mb3Itc2Nhbm5lci5wYXRjaApAQCAtMCwwICsxLDUwIEBACitkaXNhYmxlIG1hY3JvIGNoZWNrcyBub3QgdXNlZCBmb3Igc2Nhbm5lcgorCitXZSBvbmx5IGJ1aWxkIHdheWxhbmQtbmF0aXZlIGZvciB0aGUgc2Nhbm5lciwgc28gZGlzYWJsZSB0aGUgYml0cyB3ZSBkb24ndAorYWN0dWFsbHkgbmVlZC4gVGhpcyBhdm9pZCBidWlsZCBpc3N1ZSBvbiBvbGRlciBkaXN0cm8gc3VjaCBhcyBDZW50b3MgNS54OgorfCBlcnJvcjogJ09fQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiBzeXMvdGltZXJmZC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cit8IGVycm9yOiAnQ0xPQ0tfTU9OT1RPTklDJyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbikKK3wgZXJyb3I6ICdURkRfQ0xPRVhFQycgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24pCit8IGVycm9yOiAnU0ZEX0NMT0VYRUMnIHVuZGVjbGFyZWQgKGZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uKQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjAgKysrKysrKysrKy0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDEsMTYgKzQxLDE2IEBAIEFDX1NVQlNUKEdDQ19DRkxBR1MpCisgCisgQUNfQ0hFQ0tfRlVOQ1MoW2FjY2VwdDQgbWtvc3RlbXAgcG9zaXhfZmFsbG9jYXRlXSkKKyAKKy1BQ19DSEVDS19ERUNMKFNGRF9DTE9FWEVDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJTRkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD5dXSkKKy1BQ19DSEVDS19ERUNMKFRGRF9DTE9FWEVDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJURkRfQ0xPRVhFQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorLQkgICAgICBbWyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPl1dKQorLUFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorLQkgICAgICBbQUNfTVNHX0VSUk9SKCJDTE9DS19NT05PVE9OSUMgaXMgbmVlZGVkIHRvIGNvbXBpbGUgd2F5bGFuZCIpXSwKKy0JICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorLUFDX0NIRUNLX0hFQURFUlMoW2V4ZWNpbmZvLmhdKQorKyMjQUNfQ0hFQ0tfREVDTChTRkRfQ0xPRVhFQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIlNGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD5dXSkKKysjQUNfQ0hFQ0tfREVDTChURkRfQ0xPRVhFQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIlRGRF9DTE9FWEVDIGlzIG5lZWRlZCB0byBjb21waWxlIHdheWxhbmQiKV0sCisrIwkgICAgICBbWyNpbmNsdWRlIDxzeXMvdGltZXJmZC5oPl1dKQorKyNBQ19DSEVDS19ERUNMKENMT0NLX01PTk9UT05JQyxbXSwKKysjCSAgICAgIFtBQ19NU0dfRVJST1IoIkNMT0NLX01PTk9UT05JQyBpcyBuZWVkZWQgdG8gY29tcGlsZSB3YXlsYW5kIildLAorKyMJICAgICAgW1sjaW5jbHVkZSA8dGltZS5oPl1dKQorKyNBQ19DSEVDS19IRUFERVJTKFtleGVjaW5mby5oXSkKKyAKKyBBQ19BUkdfRU5BQkxFKFtzY2FubmVyXSwKKyAgICAgICAgICAgICAgIFtBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXNjYW5uZXJdLAorLS0gCisxLjguMy4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dheWxhbmRfMS44LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWEwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93YXlsYW5kXzEuOC4xLmJiCkBAIC0wLDAgKzEsNDUgQEAKK1NVTU1BUlkgPSAiV2F5bGFuZCwgYSBwcm90b2NvbCBiZXR3ZWVuIGEgY29tcG9zaXRvciBhbmQgY2xpZW50cyIKK0RFU0NSSVBUSU9OID0gIldheWxhbmQgaXMgYSBwcm90b2NvbCBmb3IgYSBjb21wb3NpdG9yIHRvIHRhbGsgdG8gaXRzIGNsaWVudHMgXAorYXMgd2VsbCBhcyBhIEMgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IHByb3RvY29sLiBUaGUgY29tcG9zaXRvciBjYW4gYmUgXAorYSBzdGFuZGFsb25lIGRpc3BsYXkgc2VydmVyIHJ1bm5pbmcgb24gTGludXgga2VybmVsIG1vZGVzZXR0aW5nIGFuZCBldmRldiBcCitpbnB1dCBkZXZpY2VzLCBhbiBYIGFwcGxpY2F0aW9uLCBvciBhIHdheWxhbmQgY2xpZW50IGl0c2VsZi4gVGhlIGNsaWVudHMgY2FuIFwKK2JlIHRyYWRpdGlvbmFsIGFwcGxpY2F0aW9ucywgWCBzZXJ2ZXJzIChyb290bGVzcyBvciBmdWxsc2NyZWVuKSBvciBvdGhlciBcCitkaXNwbGF5IHNlcnZlcnMuIgorSE9NRVBBR0UgPSAiaHR0cDovL3dheWxhbmQuZnJlZWRlc2t0b3Aub3JnIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xZDQ0NzZhN2Q5OGRkNTY5MWM1M2Q0ZDQzYTUxMGM3MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvd2F5bGFuZC1zZXJ2ZXIuYztlbmRsaW5lPTIxO21kNT0wNzlhZTIxZGJmOThhZGE1MmVjMjM3NDQ4NTFiMGE1YyIKKworU1JDX1VSSSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9hbHdheXMtYnVpbGQtc2Nhbm5lci5wYXRjaCIKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ZTg3Nzg3N2MzZTA0Y2ZiODY1Y2ZjZDA3MzNjOWFiMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmMTdjOTM4ZDFjMjRmZDBhMTBmNjUwYTYyM2EyNzc1ZDMyOWRiMzE2OGI1NzMyZTQ5OGIwODM4OGVjNzc2ZmM4IgorCitTUkNfVVJJX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIFwKKyAgICBmaWxlOi8vZGlzYWJsZS1tYWNyby1jaGVja3Mtbm90LXVzZWQtZm9yLXNjYW5uZXIucGF0Y2ggXAorICAgICIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0RFUEVORFMgPSAiZXhwYXQgbGliZmZpIHdheWxhbmQtbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWRvY3VtZW50YXRpb24gLS13aXRoLWhvc3Qtc2Nhbm5lciIKKworIyBXYXlsYW5kIGluc3RhbGxzIGEgTTQgbWFjcm8gZm9yIG90aGVyIHByb2plY3RzIHRvIHVzZSwgd2hpY2ggdXNlcyB0aGUgdGFyZ2V0CisjIHBrZy1jb25maWcgdG8gZmluZCBmaWxlcy4gIFJlcGxhY2UgcGtnLWNvbmZpZyB3aXRoIHBrZy1jb25maWctbmF0aXZlLgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworICBzZWQgLWUgJ3MsUEtHX0NIRUNLX01PRFVMRVMoLiopLCxnJyBcCisgICAgICAtZSAncywkUEtHX0NPTkZJRyxwa2ctY29uZmlnLW5hdGl2ZSxnJyBcCisgICAgICAtaSAke0R9LyR7ZGF0YWRpcn0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQKK30KKworc3lzcm9vdF9zdGFnZV9hbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisJcm0gJHtTWVNST09UX0RFU1RESVJ9LyR7ZGF0YWRpcn0vYWNsb2NhbC93YXlsYW5kLXNjYW5uZXIubTQKKwljcCAke1NUQUdJTkdfREFUQURJUl9OQVRJVkV9L2FjbG9jYWwvd2F5bGFuZC1zY2FubmVyLm00ICR7U1lTUk9PVF9ERVNURElSfS8ke2RhdGFkaXJ9L2FjbG9jYWwvCit9CisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS8qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0gJHtkYXRhZGlyfS93YXlsYW5kIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGI3OGJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLWluaXQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJTdGFydHVwIHNjcmlwdCBmb3IgdGhlIFdlc3RvbiBXYXlsYW5kIGNvbXBvc2l0b3IiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L0xJQ0VOU0U7bWQ1PTRkOTJjZDM3M2FiZGEzOTM3YzJiYzQ3ZmJjNDlkNjkwIgorCitTUkNfVVJJID0gImZpbGU6Ly9pbml0IgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vaW5pdC5kCisJaW5zdGFsbCAtbTc1NSAke1dPUktESVJ9L2luaXQgJHtEfS8ke3N5c2NvbmZkaXJ9L2luaXQuZC93ZXN0b24KK30KKworaW5oZXJpdCBhbGxhcmNoIHVwZGF0ZS1yYy5kCisKK1JERVBFTkRTXyR7UE59ID0gIndlc3RvbiBrYmQiCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJ3ZXN0b24iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi1pbml0L2luaXQgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTM4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24taW5pdC9pbml0CkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyMjIEJFR0lOIElOSVQgSU5GTworIyBQcm92aWRlczogd2VzdG9uCisjIFJlcXVpcmVkLVN0YXJ0OiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBSZXF1aXJlZC1TdG9wOiAkbG9jYWxfZnMgJHJlbW90ZV9mcworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMjIyBFTkQgSU5JVCBJTkZPCisKK2lmIHRlc3QgLWUgL2V0Yy9kZWZhdWx0L3dlc3RvbiA7IHRoZW4KKyAgICAgICAgLiAvZXRjL2RlZmF1bHQvd2VzdG9uCitmaQorCitraWxscHJvYygpIHsKKyAgICAgICAgcGlkPWAvYmluL3BpZG9mICQxYAorICAgICAgICBbICIkcGlkIiAhPSAiIiBdICYmIGtpbGwgJHBpZAorfQorCityZWFkIENNRExJTkUgPCAvcHJvYy9jbWRsaW5lCitmb3IgeCBpbiAkQ01ETElORTsgZG8KKyAgICAgICAgY2FzZSAkeCBpbgorICAgICAgICB3ZXN0b249ZmFsc2UpCisJCWVjaG8gIldlc3RvbiBkaXNhYmxlZCIKKwkJZXhpdCAwOworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKK2RvbmUKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorICAgICAgICAuIC9ldGMvcHJvZmlsZQorCisgICAgICAgICMgVGhpcyBpcyBhbGwgYSBuYXN0eSBoYWNrCisgICAgICAgIGlmIHRlc3QgLXogIiRYREdfUlVOVElNRV9ESVIiOyB0aGVuCisgICAgICAgICAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUj0vcnVuL3VzZXIvcm9vdAorICAgICAgICAgICAgICAgIG1rZGlyIC0tcGFyZW50cyAkWERHX1JVTlRJTUVfRElSCisgICAgICAgICAgICAgICAgY2htb2QgMDcwMCAkWERHX1JVTlRJTUVfRElSCisgICAgICAgIGZpCisKKyAgICAgICAgb3BlbnZ0IC1zIHdlc3RvbiAtLSAkT1BUQVJHUworICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIFdlc3RvbiIKKyAgICAgICAga2lsbHByb2Mgd2VzdG9uCisgIDs7CisKKyAgcmVzdGFydCkKKwkkMCBzdG9wCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uLzAwMDEtbWFrZS1lcnJvci1wb3J0YWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ4ODQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi8wMDAxLW1ha2UtZXJyb3ItcG9ydGFibGUucGF0Y2gKQEAgLTAsMCArMSw4MCBAQAorRnJvbSBjMjJlOTAzNjVkODkzNDYyNTgzOTQ4MzNjYmNhZDAzZmYzMmIyZTI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMTUgMjA6NTY6MDAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCB3ZXN0b25dIG1ha2UgZXJyb3IoKSBwb3J0YWJsZQorCitlcnJvcigpIGlzIG5vdCBwb3NpeCBidXQgZ251IGV4dGVuc2lvbiBzbyBtYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwKK2tpbmQgb2Ygc3lzdGVtc2kgZS5nLiBtdXNsLgorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCisgY29uZmlndXJlLmFjICAgICAgICB8ICAyICsrCisgc3JjL3dlc3Rvbi1lcnJvci5oICB8IDIwICsrKysrKysrKysrKysrKysrKysrCisgc3JjL3dlc3Rvbi1sYXVuY2guYyB8ICAyICstCisgMyBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy93ZXN0b24tZXJyb3IuaAorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyNjNmYzIyLi5mNTJjZDYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01Nyw2ICs1Nyw4IEBAIEFDX0NIRUNLX0RFQ0woQ0xPQ0tfTU9OT1RPTklDLFtdLAorIAkgICAgICBbWyNpbmNsdWRlIDx0aW1lLmg+XV0pCisgQUNfQ0hFQ0tfSEVBREVSUyhbZXhlY2luZm8uaF0pCisgCisrQUNfQ0hFQ0tfSEVBREVSUyhbZXJyb3IuaF0pCisrCisgQUNfQ0hFQ0tfRlVOQ1MoW21rb3N0ZW1wIHN0cmNocm51bCBpbml0Z3JvdXBzIHBvc2l4X2ZhbGxvY2F0ZV0pCisgCisgQ09NUE9TSVRPUl9NT0RVTEVTPSJ3YXlsYW5kLXNlcnZlciA+PSAxLjcuOTMgcGl4bWFuLTEgPj0gMC4yNS4yIgorZGlmZiAtLWdpdCBhL3NyYy93ZXN0b24tZXJyb3IuaCBiL3NyYy93ZXN0b24tZXJyb3IuaAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjIwODlkMDIKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy93ZXN0b24tZXJyb3IuaAorQEAgLTAsMCArMSwyMCBAQAorKyNpZm5kZWYgX1dFU1RPTl9FUlJPUl9ICisrI2RlZmluZSBfV0VTVE9OX0VSUk9SX0gKKysKKysjaWYgZGVmaW5lZChIQVZFX0VSUk9SX0gpCisrI2luY2x1ZGUgPGVycm9yLmg+CisrI2Vsc2UKKysjaW5jbHVkZSA8ZXJyLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNkZWZpbmUgX3dlc3Rvbl9lcnJvcihTLCBFLCBGLCAuLi4pIGRvIHsgXAorKwlpZiAoRSkgXAorKwkJZXJyKFMsIEYgIjogJXMiLCAjI19fVkFfQVJHU19fLCBzdHJlcnJvcihFKSk7IFwKKysJZWxzZSBcCisrCQllcnIoUywgRiwgIyNfX1ZBX0FSR1NfXyk7IFwKKyt9IHdoaWxlKDApCisrCisrI2RlZmluZSBlcnJvciBfd2VzdG9uX2Vycm9yCisrI2VuZGlmCisrCisrI2VuZGlmCisrCitkaWZmIC0tZ2l0IGEvc3JjL3dlc3Rvbi1sYXVuY2guYyBiL3NyYy93ZXN0b24tbGF1bmNoLmMKK2luZGV4IDEwYzY2ZGUuLjNlNmQzMGEgMTAwNjQ0CistLS0gYS9zcmMvd2VzdG9uLWxhdW5jaC5jCisrKysgYi9zcmMvd2VzdG9uLWxhdW5jaC5jCitAQCAtMzAsNyArMzAsNiBAQAorICNpbmNsdWRlIDxwb2xsLmg+CisgI2luY2x1ZGUgPGVycm5vLmg+CisgCistI2luY2x1ZGUgPGVycm9yLmg+CisgI2luY2x1ZGUgPGdldG9wdC5oPgorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0BAIC01Niw2ICs1NSw3IEBACisgI2VuZGlmCisgCisgI2luY2x1ZGUgIndlc3Rvbi1sYXVuY2guaCIKKysjaW5jbHVkZSAid2VzdG9uLWVycm9yLmgiCisgCisgI2RlZmluZSBEUk1fTUFKT1IgMjI2CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9kaXNhYmxlLXdheWxhbmQtc2Nhbm5lci1wa2ctY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vZGlzYWJsZS13YXlsYW5kLXNjYW5uZXItcGtnLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmEzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vZGlzYWJsZS13YXlsYW5kLXNjYW5uZXItcGtnLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTUwMSwxMiArNTAxLDYgQEAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0geHllczsgdGhlbgorIGZpCisgQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRoYXZlX2xjbXMiID0geHllc10pCisgCistQUNfUEFUSF9QUk9HKFt3YXlsYW5kX3NjYW5uZXJdLCBbd2F5bGFuZC1zY2FubmVyXSkKKy1pZiB0ZXN0IHgkd2F5bGFuZF9zY2FubmVyID0geDsgdGhlbgorLQlQS0dfQ0hFQ0tfTU9EVUxFUyhXQVlMQU5EX1NDQU5ORVIsIFt3YXlsYW5kLXNjYW5uZXJdKQorLQl3YXlsYW5kX3NjYW5uZXI9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9d2F5bGFuZF9zY2FubmVyIHdheWxhbmQtc2Nhbm5lcmAKKy1maQorLQorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgc3JjL3ZlcnNpb24uaCBzcmMvd2VzdG9uLnBjXSkKKyAKKyBBTV9DT05ESVRJT05BTChbSEFWRV9HSVRfUkVQT10sIFt0ZXN0IC1mICRzcmNkaXIvLmdpdC9sb2dzL0hFQURdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlNmQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxjbXMtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAord2VzdG9uLTEuNS4wL2NvbmZpZ3VyZS5hYzogbWFrZSBsY21zIGV4cGxpY2l0bHkgY29uZmlndXJhYmxlCisKK1RoZSBsY21zIHBhY2thZ2UgaXMgb3V0c2lkZSBvZiBvcGVuZW1iZWRkZWQtY29yZSwgc28gbWFrZSBpdAorZXhwbGljaXRseSBjb25maWd1cmFibGUuIE1ha2UgaXQgZGV0ZXJtaW5pc3RpYywgc28gdGhhdCBpZiBsY21zCitkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLiBGb2xsb3cKK3Vwc3RyZWFtIHN0eWxlIHRvIG1ha2UgaXQgbW9yZSBsaWtlbHkgdG8gYmUgbWVyZ2VkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCitAQCAtNDkxLDEyICs0OTEsMjQgQEAgQUNfQVJHX0VOQUJMRShkZW1vLWNsaWVudHMtaW5zdGFsbCwKKyAJCQkgICAgIGVuYWJsZV9kZW1vX2NsaWVudHNfaW5zdGFsbD1ubykKKyBBTV9DT05ESVRJT05BTChJTlNUQUxMX0RFTU9fQ0xJRU5UUywgW3Rlc3QgIngkZW5hYmxlX2RlbW9fY2xpZW50c19pbnN0YWxsIiA9ICJ4eWVzIl0pCisgCistUEtHX0NIRUNLX01PRFVMRVMoTENNUywgbGNtczIsCistICAgICAgICAgICAgICAgICAgW2hhdmVfbGNtcz15ZXNdLCBbaGF2ZV9sY21zPW5vXSkKKy1pZiB0ZXN0ICJ4JGhhdmVfbGNtcyIgPSB4eWVzOyB0aGVuCistICAgICAgIEFDX0RFRklORShIQVZFX0xDTVMsIDEsIFtIYXZlIGxjbXMgc3VwcG9ydF0pCisrQUNfQVJHX0VOQUJMRShsY21zLAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1sY21zXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxjbXMgc3VwcG9ydF0pLCwKKysgICAgICAgICAgICAgIGVuYWJsZV9sY21zPWF1dG8pCisrQU1fQ09ORElUSU9OQUwoSEFWRV9MQ01TLCBbdGVzdCAieCRlbmFibGVfbGNtcyIgPSB4eWVzXSkKKytpZiB0ZXN0ICJ4JGVuYWJsZV9sY21zIiAhPSAieG5vIjsgdGhlbgorKyAgICAgICAgUEtHX0NIRUNLX01PRFVMRVMoTENNUywgCisrICAgICAgICAgICAgICAgICAgICAgICAgIGxjbXMyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBbaGF2ZV9sY21zPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXZlX2xjbXM9bm9dKQorKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInhubyIgLWEgIngkZW5hYmxlX2xjbXMiID0gInh5ZXMiOyB0aGVuCisrICAgICAgICAgIEFDX01TR19FUlJPUihbbGNtcyBzdXBwb3J0IGV4cGxpY2l0bHkgcmVxdWVzdGVkLCBidXQgbGNtcyBjb3VsZG4ndCBiZSBmb3VuZF0pCisrICAgICAgICBmaQorKyAgICAgICAgaWYgdGVzdCAieCRoYXZlX2xjbXMiID0gInh5ZXMiOyB0aGVuCisrICAgICAgICAgICAgICAgIGVuYWJsZV9sY21zPXllcworKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9MQ01TLCAxLCBbSGF2ZSBsY21zIHN1cHBvcnRdKQorKyAgICAgICAgZmkKKyBmaQorLUFNX0NPTkRJVElPTkFMKEhBVkVfTENNUywgW3Rlc3QgIngkaGF2ZV9sY21zIiA9IHh5ZXNdKQorIAorIEFDX1BBVEhfUFJPRyhbd2F5bGFuZF9zY2FubmVyXSwgW3dheWxhbmQtc2Nhbm5lcl0pCisgaWYgdGVzdCB4JHdheWxhbmRfc2Nhbm5lciA9IHg7IHRoZW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDdkNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vbWFrZS1saWJ3ZWJwLWV4cGxpY2l0bHktY29uZmlndXJhYmxlLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKKworVGhlIGxpYndlYnAgcGFja2FnZSBpcyBvdXRzaWRlIG9mIG9wZW5lbWJlZGRlZC1jb3JlLCBzbyBtYWtlIGl0CitleHBsaWNpdGx5IGNvbmZpZ3VyYWJsZS4gTWFrZSBpdCBkZXRlcm1pbmlzdGljLCBzbyB0aGF0IGlmIGxpYndlYnAgCitkZXBlbmRlbmNpZXMgYXJlIG1pc3NpbmcsIGF1dG9jb25mIHRocm93cyBhIGZhdGFsIGVycm9yLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHdlc3Rvbi0xLjUuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB3ZXN0b24tMS41LjAub3JpZy9jb25maWd1cmUuYWMKKysrKyB3ZXN0b24tMS41LjAvY29uZmlndXJlLmFjCitAQCAtMjY4LDkgKzI2OCwyMiBAQCBmaQorIAorIFBLR19DSEVDS19NT0RVTEVTKFBJWE1BTiwgW3BpeG1hbi0xXSkKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhQTkcsIFtsaWJwbmddKQorLVBLR19DSEVDS19NT0RVTEVTKFdFQlAsIFtsaWJ3ZWJwXSwgW2hhdmVfd2VicD15ZXNdLCBbaGF2ZV93ZWJwPW5vXSkKKy1BU19JRihbdGVzdCAieCRoYXZlX3dlYnAiID0gInh5ZXMiXSwKKy0gICAgICBbQUNfREVGSU5FKFtIQVZFX1dFQlBdLCBbMV0sIFtIYXZlIHdlYnBdKV0pCisrQUNfQVJHX0VOQUJMRSh3ZWJwLAorKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS13ZWJwXSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEaXNhYmxlIGxpYndlYnAgc3VwcG9ydF0pLCwKKysgICAgICAgICAgICAgIGVuYWJsZV93ZWJwPWF1dG8pCisrQU1fQ09ORElUSU9OQUwoSEFWRV9XRUJQLCBbdGVzdCAieCRlbmFibGVfd2VicCIgPSB4eWVzXSkKKytBU19JRihbdGVzdCAieCRlbmFibGVfd2VicCIgIT0gInhubyJdLAorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhXRUJQLAorKyAgICAgICAgICAgICAgICAgICAgIFtsaWJ3ZWJwXSwKKysgICAgICAgICAgICAgICAgICAgICBbaGF2ZV93ZWJwPXllc10sCisrICAgICAgICAgICAgICAgICAgICAgW2hhdmVfd2VicD1ub10pCisrICAgIEFTX0lGKFt0ZXN0ICJ4JGhhdmVfd2VicCIgPSAieG5vIiAtYSAieCRlbmFibGVfd2VicCIgPSAieHllcyJdLAorKyAgICAgICAgQUNfTVNHX0VSUk9SKFtsaWJ3ZWJwIHN1cHBvcnQgZXhwbGljaXRseSByZXF1ZXN0LCBidXQgbGlwd2VicCBjb3VsZCBub3QgYmUgZm91bmRdKSkKKysgICAgQVNfSUYoW3Rlc3QgIngkaGF2ZV93ZWJwIiA9ICJ4eWVzIl0sCisrICAgICAgICBbZW5hYmxlX3dlYnA9eWVzXQorKyAgICAgICAgW0FDX0RFRklORShbSEFWRV9XRUJQXSwgWzFdLCBbSGF2ZSB3ZWJwXSldKQorKykKKyAKKyBBQ19BUkdfRU5BQkxFKHZhYXBpLXJlY29yZGVyLCBbICAtLWVuYWJsZS12YWFwaS1yZWNvcmRlcl0sLAorIAkgICAgICBlbmFibGVfdmFhcGlfcmVjb3JkZXI9YXV0bykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi9wYXJhbGxlbG1ha2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vcGFyYWxsZWxtYWtlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjVlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vcGFyYWxsZWxtYWtlLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK0JhY2twb3J0IHR3byBwYXRjaGVzIGZyb20gdXBzdHJlYW0gdG8gZml4IHBhcmFsbGVsIGJ1aWxkcworCistIG1rZGlyIHJhY2VzICgyZWZmMjJiOGU2ZjZlNTI1NWExOTE1YzMzZGZkOTFjZWNmMDJjYmJjKQorLSB3ZXN0b24uZGVza3RvcCByYWNlICgzMTU0NzZmYTdiMWYxYzQ0YzFiMzUxMTYwMzZkZjU0YWM1Y2I5YTAzKQorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQoraW5kZXggNTgxOWIxOS4uZmYxM2IxOSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTIwLDcgKzIwLDcgQEAgd2VzdG9uLmluaSA6ICQoc3JjZGlyKS93ZXN0b24uaW5pLmluCisgCQkkPCA+ICRACisgCisgaXZpLXNoZWxsL3dlc3Rvbi5pbmkgOiAkKHNyY2RpcikvaXZpLXNoZWxsL3dlc3Rvbi5pbmkuaW4KKy0JJChBTV9WX0dFTikkKFNFRCkgXAorKwkkKEFNX1ZfR0VOKSQoTUtESVJfUCkgJChkaXIgJEApICYmICQoU0VEKSBcCisgCQktZSAnc3xAYmluZGlyW0BdfCQoYmluZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9idWlsZGRpcltAXXwkKGFic190b3BfYnVpbGRkaXIpfGcnIFwKKyAJCS1lICdzfEBhYnNfdG9wX3NyY2RpcltAXXwkKGFic190b3Bfc3JjZGlyKXxnJyBcCitAQCAtMjksNyArMjksNyBAQCBpdmktc2hlbGwvd2VzdG9uLmluaSA6ICQoc3JjZGlyKS9pdmktc2hlbGwvd2VzdG9uLmluaS5pbgorIAkJJDwgPiAkQAorIAorIHRlc3RzL3dlc3Rvbi1pdmkuaW5pIDogJChzcmNkaXIpL2l2aS1zaGVsbC93ZXN0b24uaW5pLmluCistCSQoQU1fVl9HRU4pJChTRUQpIFwKKysJJChBTV9WX0dFTikkKE1LRElSX1ApICQoZGlyICRAKSAmJiAkKFNFRCkgXAorIAkJLWUgJ3N8QGJpbmRpcltAXXwkKGJpbmRpcil8ZycgXAorIAkJLWUgJ3N8QGFic190b3BfYnVpbGRkaXJbQF18JChhYnNfdG9wX2J1aWxkZGlyKXxnJyBcCisgCQktZSAnc3xAYWJzX3RvcF9zcmNkaXJbQF18JChhYnNfdG9wX3NyY2Rpcil8ZycgXAorQEAgLTE3OSw4ICsxNzksNyBAQCBwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBzcmMvd2VzdG9uLnBjCisgCisgd2F5bGFuZF9zZXNzaW9uZGlyID0gJChkYXRhZGlyKS93YXlsYW5kLXNlc3Npb25zCistd2F5bGFuZF9zZXNzaW9uX0RBVEEgPSBzcmMvd2VzdG9uLmRlc2t0b3AKKy1kaXN0X3dheWxhbmRfc2Vzc2lvbl9EQVRBID0gJCh3YXlsYW5kX3Nlc3Npb25fREFUQSkKKytkaXN0X3dheWxhbmRfc2Vzc2lvbl9EQVRBID0gc3JjL3dlc3Rvbi5kZXNrdG9wCisgCisgd2VzdG9uaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvd2VzdG9uCisgd2VzdG9uaW5jbHVkZV9IRUFERVJTID0JCQkJXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3dheWxhbmQvd2VzdG9uL3dlc3Rvbi5kZXNrdG9wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODZhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLmRlc2t0b3AKQEAgLTAsMCArMSw5IEBACitbRGVza3RvcCBFbnRyeV0KK0VuY29kaW5nPVVURi04CitUeXBlPUFwcGxpY2F0aW9uCitOYW1lPVdlc3RvbgorQ29tbWVudD1XYXlsYW5kIENvbXBvc3RpdG9yCitFeGVjPXdlc3RvbgorSWNvbj13ZXN0b24KK1Rlcm1pbmFsPWZhbHNlCitDYXRlZ29yaWVzPVV0aWxpdHk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbi93ZXN0b24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhOGI3ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b24vd2VzdG9uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS44LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3Mvd2F5bGFuZC93ZXN0b25fMS44LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyYzYwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy93YXlsYW5kL3dlc3Rvbl8xLjguMC5iYgpAQCAtMCwwICsxLDk0IEBACitTVU1NQVJZID0gIldlc3RvbiwgYSBXYXlsYW5kIGNvbXBvc2l0b3IiCitERVNDUklQVElPTiA9ICJXZXN0b24gaXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBhIFdheWxhbmQgY29tcG9zaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly93YXlsYW5kLmZyZWVkZXNrdG9wLm9yZyIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Mjc1ZWZhYzI1NTlhMjI0NTI3YmQ0ZmQ1OTNkMzg0NjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NvbXBvc2l0b3IuYztlbmRsaW5lPTIzO21kNT1hOTc5M2YxZWRjOGQxYTRjMzQ0Y2E4YWUyNTIzNTJmYiIKKworU1JDX1VSSSA9ICJodHRwOi8vd2F5bGFuZC5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUE59LSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly93ZXN0b24ucG5nIFwKKyAgICAgICAgICAgZmlsZTovL3dlc3Rvbi5kZXNrdG9wIFwKKyAgICAgICAgICAgZmlsZTovL21ha2UtbGNtcy1leHBsaWNpdGx5LWNvbmZpZ3VyYWJsZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9tYWtlLWxpYndlYnAtZXhwbGljaXRseS1jb25maWd1cmFibGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1tYWtlLWVycm9yLXBvcnRhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BhcmFsbGVsbWFrZS5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiMjRjYjhhN2VkMDUzNWI0ZmMzNjQyNjQzOTg4ZGFiMzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODk2M2U2OWYzMjhlODE1Y2VjNDJjNTgwNDZjNGFmNzIxNDc2Yzc1NDFiYjdkOWVkYzcxNzQwZmFkYTVhZDMxMiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHVzZXJhZGQKKworREVQRU5EUyA9ICJsaWJ4a2Jjb21tb24gZ2RrLXBpeGJ1ZiBwaXhtYW4gY2Fpcm8gZ2xpYi0yLjAganBlZyIKK0RFUEVORFMgKz0gIndheWxhbmQgbGliaW5wdXQgdmlydHVhbC9lZ2wgcGFuZ28iCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zZXR1aWQtaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXh3YXlsYW5kIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaW1wbGUtY2xpZW50cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtY2xpZW50cyBcCisgICAgICAgICAgICAgICAgLS1lbmFibGUtZGVtby1jbGllbnRzLWluc3RhbGwgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1ycGktY29tcG9zaXRvciBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJkcC1jb21wb3NpdG9yIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfcWVtdXg4NiA9ICJcCisJCVdFU1RPTl9OQVRJVkVfQkFDS0VORD1mYmRldi1iYWNrZW5kLnNvIFwKKwkJIgorRVhUUkFfT0VDT05GX2FwcGVuZF9xZW11eDg2LTY0ID0gIlwKKwkJV0VTVE9OX05BVElWRV9CQUNLRU5EPWZiZGV2LWJhY2tlbmQuc28gXAorCQkiCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ2ttcyBmYmRldiB3YXlsYW5kIGVnbCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncGFtJywgJ2xhdW5jaCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgIgorIworIyBDb21wb3NpdG9yIGNob2ljZXMKKyMKKyMgV2VzdG9uIG9uIEtNUworUEFDS0FHRUNPTkZJR1trbXNdID0gIi0tZW5hYmxlLWRybS1jb21wb3NpdG9yLC0tZGlzYWJsZS1kcm0tY29tcG9zaXRvcixkcm0gdWRldiB2aXJ0dWFsL21lc2EgbXRkZXYiCisjIFdlc3RvbiBvbiBXYXlsYW5kIChuZXN0ZWQgV2VzdG9uKQorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSA9ICItLWVuYWJsZS13YXlsYW5kLWNvbXBvc2l0b3IsLS1kaXNhYmxlLXdheWxhbmQtY29tcG9zaXRvcix2aXJ0dWFsL21lc2EiCisjIFdlc3RvbiBvbiBYMTEKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTEtY29tcG9zaXRvciwtLWRpc2FibGUteDExLWNvbXBvc2l0b3IsdmlydHVhbC9saWJ4MTEgbGlieGNiIGxpYnhjYiBsaWJ4Y3Vyc29yIGNhaXJvIgorIyBIZWFkbGVzcyBXZXN0b24KK1BBQ0tBR0VDT05GSUdbaGVhZGxlc3NdID0gIi0tZW5hYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IsLS1kaXNhYmxlLWhlYWRsZXNzLWNvbXBvc2l0b3IiCisjIFdlc3RvbiBvbiBmcmFtZWJ1ZmZlcgorUEFDS0FHRUNPTkZJR1tmYmRldl0gPSAiLS1lbmFibGUtZmJkZXYtY29tcG9zaXRvciwtLWRpc2FibGUtZmJkZXYtY29tcG9zaXRvcix1ZGV2IG10ZGV2IgorIyB3ZXN0b24tbGF1bmNoCitQQUNLQUdFQ09ORklHW2xhdW5jaF0gPSAiLS1lbmFibGUtd2VzdG9uLWxhdW5jaCwtLWRpc2FibGUtd2VzdG9uLWxhdW5jaCxsaWJwYW0gZHJtIgorIyBWQS1BUEkgZGVza3RvcCByZWNvcmRlcgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGktcmVjb3JkZXIsLS1kaXNhYmxlLXZhYXBpLXJlY29yZGVyLGxpYnZhIgorIyBXZXN0b24gd2l0aCBFR0wgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tlZ2xdID0gIi0tZW5hYmxlLWVnbCAtLWVuYWJsZS1zaW1wbGUtZWdsLWNsaWVudHMsLS1kaXNhYmxlLWVnbCAtLWRpc2FibGUtc2ltcGxlLWVnbC1jbGllbnRzLHZpcnR1YWwvZWdsIgorIyBXZXN0b24gd2l0aCBjYWlybyBnbGVzdjIgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tjYWlyby1nbGVzdjJdID0gIi0td2l0aC1jYWlyby1nbGVzdjIsLS13aXRoLWNhaXJvPWltYWdlLGNhaXJvIgorIyBXZXN0b24gd2l0aCBsY21zIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbbGNtc10gPSAiLS1lbmFibGUtbGNtcywtLWRpc2FibGUtbGNtcyxsY21zIgorIyBXZXN0b24gd2l0aCB3ZWJwIHN1cHBvcnQKK1BBQ0tBR0VDT05GSUdbd2VicF0gPSAiLS1lbmFibGUtd2VicCwtLWRpc2FibGUtd2VicCxsaWJ3ZWJwIgorIyBXZXN0b24gd2l0aCB1bndpbmRpbmcgc3VwcG9ydAorUEFDS0FHRUNPTkZJR1tsaWJ1bndpbmRdID0gIi0tZW5hYmxlLWxpYnVud2luZCwtLWRpc2FibGUtbGlidW53aW5kLGxpYnVud2luZCIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBXZXN0b24gZG9lc24ndCBuZWVkIHRoZSAubGEgZmlsZXMgdG8gbG9hZCBtb2R1bGVzLCBzbyB3aXBlIHRoZW0KKwlybSAtZiAke0R9LyR7bGliZGlyfS93ZXN0b24vKi5sYQorCisJIyBJZiBYMTEsIHNoaXAgYSBkZXNrdG9wIGZpbGUgdG8gbGF1bmNoIGl0CisJaWYgWyAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIgPSAieDExIiBdOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCisJCWluc3RhbGwgJHtXT1JLRElSfS93ZXN0b24uZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKworCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L2ljb25zL2hpY29sb3IvNDh4NDgvYXBwcworCQlpbnN0YWxsICR7V09SS0RJUn0vd2VzdG9uLnBuZyAke0R9JHtkYXRhZGlyfS9pY29ucy9oaWNvbG9yLzQ4eDQ4L2FwcHMKKyAgICAgICAgZmkKK30KKworUEFDS0FHRVMgKz0gIiR7UE59LWV4YW1wbGVzIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vd2VzdG9uICR7YmluZGlyfS93ZXN0b24tdGVybWluYWwgJHtiaW5kaXJ9L3dlc3Rvbi1pbmZvICR7YmluZGlyfS93ZXN0b24tbGF1bmNoICR7YmluZGlyfS93Y2FwLWRlY29kZSAke2xpYmV4ZWNkaXJ9ICR7bGliZGlyfS8ke0JQTn0vKi5zbyAke2RhdGFkaXJ9IgorRklMRVNfJHtQTn0tZXhhbXBsZXMgPSAiJHtiaW5kaXJ9LyoiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgorUlJFQ09NTUVORFNfJHtQTn0gPSAibGliZXJhdGlvbi1mb250cyIKKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHdlc3Rvbi1sYXVuY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWGRlZmF1bHRzIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hkZWZhdWx0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI2OWRkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hkZWZhdWx0cwpAQCAtMCwwICsxLDMgQEAKK1J4dnQqc2Nyb2xsQmFyX3JpZ2h0OiB0cnVlCitSeHZ0KmZvbnQ6IHhmdDpNb25vOnBpeGVsc2l6ZT05CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1NzBkZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2VydmVyCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorIworCitYU0VSVkVSPS91c3IvYmluL1hvcmcKKworLiAvZXRjL3Byb2ZpbGUKKworQVJHUz0iIC1iciAtcG4iCisKK0RJU1BMQVk9JzowJworCitleGVjIHhpbml0IC9ldGMvWDExL1hzZXNzaW9uIC0tICRYU0VSVkVSICRESVNQTEFZICRBUkdTICQqCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24gYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI3MzEyNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbgpAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKworaWYgWyAteCAvdXNyL2Jpbi9kYnVzLWxhdW5jaCBdOyB0aGVuCisgICAgIyBBcyB0aGlzIGlzIHRoZSBYIHNlc3Npb24gc2NyaXB0LCBhbHdheXMgc3RhcnQgYSBuZXcgREJ1cyBzZXNzaW9uLgorICAgIGV2YWwgYGRidXMtbGF1bmNoIC0tc2gtc3ludGF4IC0tZXhpdC13aXRoLXNlc3Npb24gPC9kZXYvbnVsbGAKKyAgICBlY2hvICJELUJVUyBwZXItc2Vzc2lvbiBkYWVtb24gYWRkcmVzcyBpczogJERCVVNfU0VTU0lPTl9CVVNfQUREUkVTUyIKK2ZpCisKKy4gL2V0Yy9wcm9maWxlCisKK2lmIFsgLWYgJEhPTUUvLnByb2ZpbGUgXTsgdGhlbgorICAgIC4gJEhPTUUvLnByb2ZpbGUKK2ZpCisKK1NZU1NFU1NJT05ESVI9L2V0Yy9YMTEvWHNlc3Npb24uZAorCitleHBvcnQgQ0xVVFRFUl9ESVNBQkxFX01JUE1BUFBFRF9URVhUPTEKKworZm9yIFNFU1NJT05GSUxFIGluICRTWVNTRVNTSU9ORElSLyo7IGRvCisgICAgc2V0ICtlCisgICAgY2FzZSAiJFNFU1NJT05GSUxFIiBpbgorICAgICAgICAqLnNoKQorICAgICAgICAgICAgLiAiJFNFU1NJT05GSUxFIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKi5zaGJnKQorICAgICAgICAgICAgIiRTRVNTSU9ORklMRSIgJgorICAgICAgICAgICAgOzsKKyAgICAgICAgKn4pCisgICAgICAgICAgICAjIElnbm9yZSBiYWNrdXAgZmlsZXMKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAiJFNFU1NJT05GSUxFIgorICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgICAgc2V0IC1lCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xMmtleW1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWQxMDJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvMTJrZXltYXAuc2gKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworIyBrZHJpdmUgMS40IGRvZXMgbm90IGhhdmUgZGVmYXVsdCBrZXltYXAgaW4gc2VydmVyCisjeG1vZG1hcCAtIDwvZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzEzeGRnYmFzZWRpcnMuc2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTk0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvWHNlc3Npb24uZC8xM3hkZ2Jhc2VkaXJzLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMgTWluaW1hbC9zdHViIGltcGxlbWVudGF0aW9uIG9mIHRoZSBYREcgQmFzZSBEaXJlY3Rvcnkgc3BlY2lmaWNhdGlvbi4KKyMgaHR0cDovL3N0YW5kYXJkcy5mcmVlZGVza3RvcC5vcmcvYmFzZWRpci1zcGVjL2Jhc2VkaXItc3BlYy1sYXRlc3QuaHRtbAorIworIyBXYXlsYW5kIG5lZWRzIFhER19SVU5USU1FX0RJUiwgc28gc2V0IGl0IHRvIC90bXAuICBUaGlzIGlzbid0IGNvbXBsaWFudCB3aXRoCisjIHRoZSBzcGVjaWZpY2F0aW9uICh3cm9uZyBtb2RlLCB3cm9uZyBvd25lcikgYnV0IGl0J3MgbW9zdGx5IHN1ZmZpY2llbnQuCisjCisjIEluIHRoZSBpZGVhbCBjYXNlIHdoZXJlIFN5c3RlbUQgaXMgYm9vdGluZyBhbmQgdXNlcnNwYWNlIGlzIGluaXRpYXRlZCBieSBhCisjIFN5c3RlbUQgdXNlciBzZXNzaW9uIHRoaXMgd2lsbCBoYXZlIGJlZW4gc2V0IGFscmVhZHksIHNvIGRvbid0IG92ZXJ3cml0ZSBpdC4KKworaWYgWyAteiAiJFhHRF9SVU5USU1FX0RJUiIgXTsgdGhlbgorCVhER19SVU5USU1FX0RJUj0iL3RtcCIKKyAgICAgICAgZXhwb3J0IFhER19SVU5USU1FX0RJUgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvODl4ZGdhdXRvc3RhcnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q3MDA4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzg5eGRnYXV0b3N0YXJ0LnNoCkBAIC0wLDAgKzEsNyBAQAorWERHQVVUT1NUQVJUPS9ldGMveGRnL2F1dG9zdGFydAoraWYgWyAtZCAkWERHQVVUT1NUQVJUIF07IHRoZW4KKyAgICBmb3IgU0NSSVBUIGluICRYREdBVVRPU1RBUlQvKjsgZG8KKyAgICAgICAgQ01EPWBncmVwIF5FeGVjPSAkU0NSSVBUIHwgY3V0IC1kICc9JyAtZiAyYAorICAgICAgICAkQ01EICYKKyAgICBkb25lCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ldGMvWDExL1hzZXNzaW9uLmQvOTBYV2luZG93TWFuYWdlci5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzkwWFdpbmRvd01hbmFnZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzNmRlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9Yc2Vzc2lvbi5kLzkwWFdpbmRvd01hbmFnZXIuc2gKQEAgLTAsMCArMSw3IEBACitpZiBbIC14ICRIT01FLy5Yc2Vzc2lvbiBdOyB0aGVuCisgICAgZXhlYyAkSE9NRS8uWHNlc3Npb24KK2VsaWYgWyAteCAvdXNyL2Jpbi94LXNlc3Npb24tbWFuYWdlciBdOyB0aGVuCisgICAgZXhlYyAvdXNyL2Jpbi94LXNlc3Npb24tbWFuYWdlcgorZWxzZQorICAgIGV4ZWMgL3Vzci9iaW4veC13aW5kb3ctbWFuYWdlcgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb24vZXRjL1gxMS9kZWZhdWx0Lnhtb2RtYXAgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YTEzZmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2V0Yy9YMTEvZGVmYXVsdC54bW9kbWFwCkBAIC0wLDAgKzEsMjYwIEBACitrZXljb2RlICAgOCA9CitrZXljb2RlICAgOSA9IEVzY2FwZQora2V5Y29kZSAgMTAgPSAxIGV4Y2xhbQora2V5Y29kZSAgMTEgPSAyIGF0CitrZXljb2RlICAxMiA9IDMgbnVtYmVyc2lnbgora2V5Y29kZSAgMTMgPSA0IGRvbGxhcgora2V5Y29kZSAgMTQgPSA1IHBlcmNlbnQKK2tleWNvZGUgIDE1ID0gNiBhc2NpaWNpcmN1bQora2V5Y29kZSAgMTYgPSA3IGFtcGVyc2FuZCBicmFjZWxlZnQKK2tleWNvZGUgIDE3ID0gOCBhc3RlcmlzayBicmFja2V0bGVmdAora2V5Y29kZSAgMTggPSA5IHBhcmVubGVmdCBicmFja2V0cmlnaHQKK2tleWNvZGUgIDE5ID0gMCBwYXJlbnJpZ2h0IGJyYWNlcmlnaHQKK2tleWNvZGUgIDIwID0gbWludXMgdW5kZXJzY29yZSBiYWNrc2xhc2gKK2tleWNvZGUgIDIxID0gZXF1YWwgcGx1cwora2V5Y29kZSAgMjIgPSBCYWNrU3BhY2UKK2tleWNvZGUgIDIzID0gVGFiCitrZXljb2RlICAyNCA9IHEgUSBxCitrZXljb2RlICAyNSA9IHcgVyB3CitrZXljb2RlICAyNiA9IGUgRQora2V5Y29kZSAgMjcgPSByIFIgcgora2V5Y29kZSAgMjggPSB0IFQgdAora2V5Y29kZSAgMjkgPSB5IFkgeQora2V5Y29kZSAgMzAgPSB1IFUgdQora2V5Y29kZSAgMzEgPSBpIEkgaQora2V5Y29kZSAgMzIgPSBvIE8gbwora2V5Y29kZSAgMzMgPSBwIFAgcAora2V5Y29kZSAgMzQgPSBicmFja2V0bGVmdCBicmFjZWxlZnQKK2tleWNvZGUgIDM1ID0gYnJhY2tldHJpZ2h0IGJyYWNlcmlnaHQgYXNjaWl0aWxkZQora2V5Y29kZSAgMzYgPSBSZXR1cm4KK2tleWNvZGUgIDM3ID0gQ29udHJvbF9MCitrZXljb2RlICAzOCA9IGEgQQora2V5Y29kZSAgMzkgPSBzIFMgcwora2V5Y29kZSAgNDAgPSBkIEQKK2tleWNvZGUgIDQxID0gZiBGCitrZXljb2RlICA0MiA9IGcgRyBnCitrZXljb2RlICA0MyA9IGggSCBoCitrZXljb2RlICA0NCA9IGogSiBqCitrZXljb2RlICA0NSA9IGsgSyBrCitrZXljb2RlICA0NiA9IGwgTCBsCitrZXljb2RlICA0NyA9IHNlbWljb2xvbiBjb2xvbgora2V5Y29kZSAgNDggPSBhcG9zdHJvcGhlIHF1b3RlZGJsCitrZXljb2RlICA0OSA9IGdyYXZlIGFzY2lpdGlsZGUKK2tleWNvZGUgIDUwID0gU2hpZnRfTAora2V5Y29kZSAgNTEgPSBiYWNrc2xhc2ggYmFyCitrZXljb2RlICA1MiA9IHogWiB6CitrZXljb2RlICA1MyA9IHggWCB4CitrZXljb2RlICA1NCA9IGMgQwora2V5Y29kZSAgNTUgPSB2IFYgdgora2V5Y29kZSAgNTYgPSBiIEIKK2tleWNvZGUgIDU3ID0gbiBOIG4KK2tleWNvZGUgIDU4ID0gbSBNIG0KK2tleWNvZGUgIDU5ID0gY29tbWEgbGVzcwora2V5Y29kZSAgNjAgPSBwZXJpb2QgZ3JlYXRlcgora2V5Y29kZSAgNjEgPSBzbGFzaCBxdWVzdGlvbgora2V5Y29kZSAgNjIgPSBTaGlmdF9SCitrZXljb2RlICA2MyA9IEtQX011bHRpcGx5CitrZXljb2RlICA2NCA9IEFsdF9MCitrZXljb2RlICA2NSA9IHNwYWNlCitrZXljb2RlICA2NiA9IENhcHNfTG9jawora2V5Y29kZSAgNjcgPSBGMSBGMTEKK2tleWNvZGUgIDY4ID0gRjIgRjEyCitrZXljb2RlICA2OSA9IEYzIEYxMwora2V5Y29kZSAgNzAgPSBGNCBGMTQKK2tleWNvZGUgIDcxID0gRjUgRjE1CitrZXljb2RlICA3MiA9IEY2IEYxNgora2V5Y29kZSAgNzMgPSBGNyBGMTcKK2tleWNvZGUgIDc0ID0gRjggRjE4CitrZXljb2RlICA3NSA9IEY5IEYxOQora2V5Y29kZSAgNzYgPSBGMTAgRjIwCitrZXljb2RlICA3NyA9IE51bV9Mb2NrCitrZXljb2RlICA3OCA9IFNjcm9sbF9Mb2NrCitrZXljb2RlICA3OSA9IEtQXzcKK2tleWNvZGUgIDgwID0gS1BfOAora2V5Y29kZSAgODEgPSBLUF85CitrZXljb2RlICA4MiA9IEtQX1N1YnRyYWN0CitrZXljb2RlICA4MyA9IEtQXzQKK2tleWNvZGUgIDg0ID0gS1BfNQora2V5Y29kZSAgODUgPSBLUF82CitrZXljb2RlICA4NiA9IEtQX0FkZAora2V5Y29kZSAgODcgPSBLUF8xCitrZXljb2RlICA4OCA9IEtQXzIKK2tleWNvZGUgIDg5ID0gS1BfMwora2V5Y29kZSAgOTAgPSBLUF8wCitrZXljb2RlICA5MSA9IEtQX0RlY2ltYWwKK2tleWNvZGUgIDkyID0KK2tleWNvZGUgIDkzID0KK2tleWNvZGUgIDk0ID0gbGVzcyBncmVhdGVyIGJhcgora2V5Y29kZSAgOTUgPSBGMTEKK2tleWNvZGUgIDk2ID0gRjEyCitrZXljb2RlICA5NyA9CitrZXljb2RlICA5OCA9CitrZXljb2RlICA5OSA9CitrZXljb2RlIDEwMCA9CitrZXljb2RlIDEwMSA9CitrZXljb2RlIDEwMiA9CitrZXljb2RlIDEwMyA9CitrZXljb2RlIDEwNCA9IEtQX0VudGVyCitrZXljb2RlIDEwNSA9IENvbnRyb2xfUgora2V5Y29kZSAxMDYgPSBLUF9EaXZpZGUKK2tleWNvZGUgMTA3ID0KK2tleWNvZGUgMTA4ID0gTW9kZV9zd2l0Y2gKK2tleWNvZGUgMTA5ID0gQnJlYWsKK2tleWNvZGUgMTEwID0gSG9tZQora2V5Y29kZSAxMTEgPSBVcAora2V5Y29kZSAxMTIgPSBQcmlvcgora2V5Y29kZSAxMTMgPSBMZWZ0CitrZXljb2RlIDExNCA9IFJpZ2h0CitrZXljb2RlIDExNSA9IEVuZAora2V5Y29kZSAxMTYgPSBEb3duCitrZXljb2RlIDExNyA9IE5leHQKK2tleWNvZGUgMTE4ID0gSW5zZXJ0CitrZXljb2RlIDExOSA9IERlbGV0ZQora2V5Y29kZSAxMjAgPSBNZW51CitrZXljb2RlIDEyMSA9IEYxMwora2V5Y29kZSAxMjIgPSBGMTQKK2tleWNvZGUgMTIzID0gSGVscAora2V5Y29kZSAxMjQgPSBFeGVjdXRlCitrZXljb2RlIDEyNSA9IEYxNwora2V5Y29kZSAxMjYgPSBLUF9TdWJ0cmFjdAora2V5Y29kZSAxMjcgPSBQYXVzZQora2V5Y29kZSAxMjggPQora2V5Y29kZSAxMjkgPQora2V5Y29kZSAxMzAgPQora2V5Y29kZSAxMzEgPQora2V5Y29kZSAxMzIgPQora2V5Y29kZSAxMzMgPQora2V5Y29kZSAxMzQgPQora2V5Y29kZSAxMzUgPQora2V5Y29kZSAxMzYgPQora2V5Y29kZSAxMzcgPQora2V5Y29kZSAxMzggPQora2V5Y29kZSAxMzkgPQora2V5Y29kZSAxNDAgPQora2V5Y29kZSAxNDEgPQora2V5Y29kZSAxNDIgPQora2V5Y29kZSAxNDMgPQora2V5Y29kZSAxNDQgPQora2V5Y29kZSAxNDUgPQora2V5Y29kZSAxNDYgPQora2V5Y29kZSAxNDcgPQora2V5Y29kZSAxNDggPQora2V5Y29kZSAxNDkgPQora2V5Y29kZSAxNTAgPQora2V5Y29kZSAxNTEgPQora2V5Y29kZSAxNTIgPQora2V5Y29kZSAxNTMgPQora2V5Y29kZSAxNTQgPQora2V5Y29kZSAxNTUgPQora2V5Y29kZSAxNTYgPQora2V5Y29kZSAxNTcgPQora2V5Y29kZSAxNTggPQora2V5Y29kZSAxNTkgPQora2V5Y29kZSAxNjAgPQora2V5Y29kZSAxNjEgPQora2V5Y29kZSAxNjIgPQora2V5Y29kZSAxNjMgPQora2V5Y29kZSAxNjQgPQora2V5Y29kZSAxNjUgPQora2V5Y29kZSAxNjYgPQora2V5Y29kZSAxNjcgPQora2V5Y29kZSAxNjggPQora2V5Y29kZSAxNjkgPQora2V5Y29kZSAxNzAgPQora2V5Y29kZSAxNzEgPQora2V5Y29kZSAxNzIgPQora2V5Y29kZSAxNzMgPQora2V5Y29kZSAxNzQgPQora2V5Y29kZSAxNzUgPQora2V5Y29kZSAxNzYgPQora2V5Y29kZSAxNzcgPQora2V5Y29kZSAxNzggPQora2V5Y29kZSAxNzkgPQora2V5Y29kZSAxODAgPQora2V5Y29kZSAxODEgPQora2V5Y29kZSAxODIgPQora2V5Y29kZSAxODMgPQora2V5Y29kZSAxODQgPQora2V5Y29kZSAxODUgPQora2V5Y29kZSAxODYgPQora2V5Y29kZSAxODcgPQora2V5Y29kZSAxODggPQora2V5Y29kZSAxODkgPQora2V5Y29kZSAxOTAgPQora2V5Y29kZSAxOTEgPQora2V5Y29kZSAxOTIgPQora2V5Y29kZSAxOTMgPQora2V5Y29kZSAxOTQgPQora2V5Y29kZSAxOTUgPQora2V5Y29kZSAxOTYgPQora2V5Y29kZSAxOTcgPQora2V5Y29kZSAxOTggPQora2V5Y29kZSAxOTkgPQora2V5Y29kZSAyMDAgPQora2V5Y29kZSAyMDEgPQora2V5Y29kZSAyMDIgPQora2V5Y29kZSAyMDMgPQora2V5Y29kZSAyMDQgPQora2V5Y29kZSAyMDUgPQora2V5Y29kZSAyMDYgPQora2V5Y29kZSAyMDcgPQora2V5Y29kZSAyMDggPQora2V5Y29kZSAyMDkgPQora2V5Y29kZSAyMTAgPQora2V5Y29kZSAyMTEgPQora2V5Y29kZSAyMTIgPQora2V5Y29kZSAyMTMgPQora2V5Y29kZSAyMTQgPQora2V5Y29kZSAyMTUgPQora2V5Y29kZSAyMTYgPQora2V5Y29kZSAyMTcgPQora2V5Y29kZSAyMTggPQora2V5Y29kZSAyMTkgPQora2V5Y29kZSAyMjAgPQora2V5Y29kZSAyMjEgPQora2V5Y29kZSAyMjIgPQora2V5Y29kZSAyMjMgPQora2V5Y29kZSAyMjQgPQora2V5Y29kZSAyMjUgPQora2V5Y29kZSAyMjYgPQora2V5Y29kZSAyMjcgPQora2V5Y29kZSAyMjggPQora2V5Y29kZSAyMjkgPQora2V5Y29kZSAyMzAgPQora2V5Y29kZSAyMzEgPQora2V5Y29kZSAyMzIgPQora2V5Y29kZSAyMzMgPQora2V5Y29kZSAyMzQgPQora2V5Y29kZSAyMzUgPQora2V5Y29kZSAyMzYgPQora2V5Y29kZSAyMzcgPQora2V5Y29kZSAyMzggPQora2V5Y29kZSAyMzkgPQora2V5Y29kZSAyNDAgPQora2V5Y29kZSAyNDEgPQora2V5Y29kZSAyNDIgPQora2V5Y29kZSAyNDMgPQora2V5Y29kZSAyNDQgPQora2V5Y29kZSAyNDUgPQora2V5Y29kZSAyNDYgPQora2V5Y29kZSAyNDcgPQora2V5Y29kZSAyNDggPQora2V5Y29kZSAyNDkgPQora2V5Y29kZSAyNTAgPQora2V5Y29kZSAyNTEgPQora2V5Y29kZSAyNTIgPQora2V5Y29kZSAyNTMgPQora2V5Y29kZSAyNTQgPQorCithZGQgc2hpZnQgPSBTaGlmdF9MCithZGQgc2hpZnQgPSBTaGlmdF9SCithZGQgc2hpZnQgPSBNZW51CithZGQgbG9jayA9IENhcHNfTG9jaworYWRkIGNvbnRyb2wgPSBDb250cm9sX0wKK2FkZCBjb250cm9sID0gQ29udHJvbF9SCithZGQgbW9kMSA9IEFsdF9MCithZGQgbW9kMiA9IE51bV9Mb2NrCishbW9kMyAgICAgIAorYWRkIG1vZDQgPSBNb2RlX3N3aXRjaAorIW1vZDUgICAgICAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ncGx2Mi1saWNlbnNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbi9ncGx2Mi1saWNlbnNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjk3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94MTEtY29tbW9uL2dwbHYyLWxpY2Vuc2UucGF0Y2gKQEAgLTAsMCArMSwzNTUgQEAKK0NPUFlJTkc6IGFkZCBHUEx2MiBsaWNlbnNlIGZpbGUKKwordGhpcyBpcyBhIGxvY2FsIGZpbGUgcmVjaXBlIGFuZCB0aGUgbGljZW5zZSBmaWxlIGlzIG1pc3NpbmcuSW4gb3JkZXIKK3RvIHBhc3MgdGhlIGxpY2Vuc2UgY2hlY2tzdW0gY2hlY2tpbmcsIHRoZSBsaWNlbnNlIGZpbGUgaXMgbmVlZGVkLiBTbwordGhpcyBwYXRjaCBhZGQgdGhlIEdQTHYyIGxpY2Vuc2UgZmlsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtsaWNlbnNpbmddCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ1MTE5MDUKKy0tLSAvZGV2L251bGwKKysrKyBiL0NPUFlJTkcKK0BAIC0wLDAgKzEsMzM5IEBACisrCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKysJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorKworKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisrIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKysKKysJCQkgICAgUHJlYW1ibGUKKysKKysgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKKytmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKKytzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bworK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKKyt0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworK3lvdXIgcHJvZ3JhbXMsIHRvby4KKysKKysgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKKytwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CisraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgorK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAorK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CisraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorKworKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KKytUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKysKKysgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKKytncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKKyt5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKKytyaWdodHMuCisrCisrICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisrKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKKytkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorKworKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KKyt0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQorK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCisrdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKKythdXRob3JzJyByZXB1dGF0aW9ucy4KKysKKysgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisrcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKKytwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKKytwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorKworKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyttb2RpZmljYXRpb24gZm9sbG93LgorKworKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisrCisrICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCisrYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKKyt1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCisrcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCisrbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKKyt0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCisrbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgorK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorKworK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90CisrY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KKytpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCisrV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisrCisrICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKytzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKytjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCisrY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKKythbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCisrYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKysKKytZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKKyt5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorKworKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKKytkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKKythYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorKworKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKysgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKysKKysgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisrICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKysgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisrICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKysgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisrICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorKworK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKKytpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgorK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKKytzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKKytkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKKytvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKKyt0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKysKKytUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKKyt5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KKytleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKKytjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorKworK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KKyt3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKKythIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgorK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKKyt1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKKytTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisrCisrICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKysgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisrICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisrICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKysgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKysgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorKworKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisrICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorKworK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKKyttYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55CisrYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCisrY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5CisrZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKKytvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAorK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKysKKytJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCisrYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisrCisrICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KKytleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0Cisrb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisrdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCisrdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKKytwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisrCisrICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKytzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKKyttb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKKyt0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKysKKysgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KKyt0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKytZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bworK3RoaXMgTGljZW5zZS4KKysKKysgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKKytpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKKytvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CisrZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKKytkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCisrTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKKytsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CisrYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCisrdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisrCisrSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisrYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCisrY2lyY3Vtc3RhbmNlcy4KKysKKytJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CisrcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKKytzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCisraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCisraW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCisrZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAorK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0Cisrc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZworK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAorK2ltcG9zZSB0aGF0IGNob2ljZS4KKysKKytUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KKytiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCisrY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCisrb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZworK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKKytjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKKyt0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKysKKysgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCisrb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCisrYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCisrYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisrCisrRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CisrbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgorK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKytGb3VuZGF0aW9uLgorKworKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKKyt0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKKytTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKKyttYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscworK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKKytvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKysKKysJCQkgICAgTk8gV0FSUkFOVFkKKysKKysgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKKytQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKytQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKKytSRVBBSVIgT1IgQ09SUkVDVElPTi4KKysKKysgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKKytXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCisrUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKKytJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKKytPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECisrVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCisrWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKKytQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKytQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisrCisrCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworKworKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisrCisrICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CisrcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorKworKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKKyt0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CisrY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKKyt0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKysKKysgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKysgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKysgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKysKKytBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKysKKytJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCisrd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKysKKysgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisrICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKysgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisrCisrVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCisrcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisrCisrWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKKytzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKysKKysgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKysgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorKworKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisrICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorKworK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5CisrY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCisrbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKytQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veDExLWNvbW1vbl8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2YjMyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3gxMS1jb21tb25fMC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQ29tbW9uIFgxMSBzY3JpcHRzIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorU0VDVElPTiA9ICJ4MTEiCitQUiA9ICJyNDciCisKK2luaGVyaXQgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIHJkZXBlbmRzIG9uIHhkeXBpbmZvIHhtb2RtYXAgeGluaXQKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL2V0YyBcCisgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJY3AgLVIgJHtTfS9ldGMgJHtEfSR7c3lzY29uZmRpcn0KKwljaG1vZCAtUiA3NTUgJHtEfSR7c3lzY29uZmRpcn0KKwlmaW5kICR7RH0ke3N5c2NvbmZkaXJ9IC10eXBlIGYgLW5hbWUgXCp+IC1leGVjIHJtIC1yZiB7fSBcOworfQorCitSREVQRU5EU18ke1BOfSA9ICJkYnVzLXgxMSB4bW9kbWFwIHhkcHlpbmZvIHh0c2NhbCB4aW5pdCBmb3JtZmFjdG9yIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGQ0MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC5iYgpAQCAtMCwwICsxLDUyIEBACitTVU1NQVJZID0gIlNpbXBsZSBYc2VydmVyIEluaXQgU2NyaXB0IChubyBkbSkiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUiCitTRUNUSU9OID0gIngxMSIKK1BSID0gInIzMSIKKworU1JDX1VSSSA9ICJmaWxlOi8veHNlcnZlci1ub2RtIFwKKyAgICAgICAgICAgZmlsZTovL1h1c2VybmFtZSBcCisgICAgICAgICAgIGZpbGU6Ly9ncGx2Mi1saWNlbnNlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlIFwKKyAgICAgICAgICAgZmlsZTovL3hzZXJ2ZXItbm9kbS5jb25mIFwKKyIKKworUyA9ICIke1dPUktESVJ9IgorCisjIFNpbmNlIHdlIHJlZmVyIHRvIFJPT1RMRVNTX1ggd2hpY2ggaXMgbm9ybWFsbHkgZW5hYmxlZCBwZXItbWFjaGluZQorUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKyAgICBpbnN0YWxsIHhzZXJ2ZXItbm9kbSAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN0ZW1kJywndHJ1ZScsJ2ZhbHNlJyxkKX07IHRoZW4KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0CisgICAgICAgIGluc3RhbGwgeHNlcnZlci1ub2RtLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC94c2VydmVyLW5vZG0KKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94c2VydmVyLW5vZG0uc2VydmljZSAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorICAgICAgICBpZiBbICIke1JPT1RMRVNTX1h9IiA9ICIxIiBdIDsgdGhlbgorICAgICAgICAgICAgc2VkIC1pICdzIV5IT01FPS4qIUhPTUU9L2hvbWUveHVzZXIhJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICAgICAgc2VkIC1pICdzIV5Vc2VyPS4qIVVzZXI9eHVzZXIhJyAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbS94c2VydmVyLW5vZG0uc2VydmljZQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWQgLWkgJ3MhXkhPTUU9LiohSE9NRT0ke1JPT1RfSE9NRX0hJyAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorICAgICAgICAgICAgc2VkIC1pICcvXlVzZXI9L2QnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCisgICAgICAgIGZpCisgICAgZmkKKworICAgIGlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCdzeXN2aW5pdCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisgICAgICAgIGlmIFsgIiR7Uk9PVExFU1NfWH0iID0gIjEiIF0gOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L1gxMQorICAgICAgICAgICAgaW5zdGFsbCBYdXNlcm5hbWUgJHtEfSR7c3lzY29uZmRpcn0vWDExCisgICAgICAgIGZpCisgICAgZmkKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtAYmFzZV9jb25kaXRpb25hbCgnUk9PVExFU1NfWCcsICcxJywgJ3h1c2VyLWFjY291bnQnLCAnJywgZCl9IgorCitJTklUU0NSSVBUX05BTUUgPSAieHNlcnZlci1ub2RtIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgOSA1IC4gc3RvcCAyMCAwIDEgMiAzIDYgLiIKK1NZU1RFTURfU0VSVklDRV8ke1BOfSA9ICJ4c2VydmVyLW5vZG0uc2VydmljZSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQvWHVzZXJuYW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjBlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9YdXNlcm5hbWUKQEAgLTAsMCArMSBAQAoreHVzZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L2dwbHYyLWxpY2Vuc2UucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9ncGx2Mi1saWNlbnNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZjk3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC9ncGx2Mi1saWNlbnNlLnBhdGNoCkBAIC0wLDAgKzEsMzU1IEBACitDT1BZSU5HOiBhZGQgR1BMdjIgbGljZW5zZSBmaWxlCisKK3RoaXMgaXMgYSBsb2NhbCBmaWxlIHJlY2lwZSBhbmQgdGhlIGxpY2Vuc2UgZmlsZSBpcyBtaXNzaW5nLkluIG9yZGVyCit0byBwYXNzIHRoZSBsaWNlbnNlIGNoZWNrc3VtIGNoZWNraW5nLCB0aGUgbGljZW5zZSBmaWxlIGlzIG5lZWRlZC4gU28KK3RoaXMgcGF0Y2ggYWRkIHRoZSBHUEx2MiBsaWNlbnNlIGZpbGUuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbbGljZW5zaW5nXQorCitTaWduZWQtb2ZmLWJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kNTExOTA1CistLS0gL2Rldi9udWxsCisrKysgYi9DT1BZSU5HCitAQCAtMCwwICsxLDMzOSBAQAorKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisrCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKysKKysgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKysgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKysgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisrCisrCQkJICAgIFByZWFtYmxlCisrCisrICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisrZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKytMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCisrc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKKytHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KKyt1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5CisrdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KKyt5b3VyIHByb2dyYW1zLCB0b28uCisrCisrICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CisrcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQorK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKKyt0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKKytpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAorK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKysKKysgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKKythbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCisrVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKKytkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisrCisrICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCisrZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0CisreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKKytzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCisrcmlnaHRzLgorKworKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCisrZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKysKKysgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCisrdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKKytzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKKyt3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbworK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCisrYXV0aG9ycycgcmVwdXRhdGlvbnMuCisrCisrICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKKytwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCisrcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CisrcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKysKKysgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCisrbW9kaWZpY2F0aW9uIGZvbGxvdy4KKysKKysJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorKworKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCisrdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6CisrdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKKytlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KKyt0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKysKKytBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKKytydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCisraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKKytQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorKworKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCisrc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CisrY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKKytub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CisrYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisrCisrWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCisreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKysKKysgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KKytvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCisrZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCisrYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKysKKysgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisrICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisrCisrICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKysgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKysgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisrICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKysgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKysgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisrICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKysgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKysgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKysgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKysKKytUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCisraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKKythbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KKyt0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCisrc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CisrZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCisrb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCisrdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKKytlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisrCisrVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0CisreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCisrZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCisrY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKysKKytJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCisrd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCisrYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKKyt0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorKworKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisrdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCisrU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisrICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKysgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKysgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisrICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisrICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKysKKysgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKysgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKysgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKysgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKysKKytUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCisrbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKKytjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKKytzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKKythbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCisrb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKKytpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisrCisrSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKythY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKytkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKytjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorKworKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisrZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcworK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKytIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgorK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCisrcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorKworKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Cisrc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKKytkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKKytwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5CisrbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKKythbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCisrdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisrCisrICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCisrUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKKytvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisrdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKytyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisrWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KKyt0aGlzIExpY2Vuc2UuCisrCisrICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CisraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKKytjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCisrb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CisrZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKKyttYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CisrbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgorK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KKytyZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorKworK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KKythcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorK2NpcmN1bXN0YW5jZXMuCisrCisrSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Cisrc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKKyt0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKKyt0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKKytpbXBvc2UgdGhhdCBjaG9pY2UuCisrCisrVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCisrYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKKyttYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKKyt0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCisrY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCisrdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisrCisrICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorKworK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KKytzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKytlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKKyt0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrRm91bmRhdGlvbi4KKysKKysgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKKytwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCisrdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCisrU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCisrbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKKytvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCisrb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisrCisrCQkJICAgIE5PIFdBUlJBTlRZCisrCisrICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKKytGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KKytPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCisrUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKKytPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKKytUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisrUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCisrUkVQQUlSIE9SIENPUlJFQ1RJT04uCisrCisrICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCisrV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCisrSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCisrT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCisrUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCisrUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorKworKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKysKKysJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworKworKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKKytmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKysKKysgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CisrdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0CisrdGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisrCisrICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisrICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisrICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisrICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrCisrICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisrICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisrICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisrCisrQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisrCisrSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcworK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisrCisrICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisrICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKysgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorKworK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKKytiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKKyttb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorKworK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCisrc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKKytuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisrCisrICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisrICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKysKKysgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKysKKytUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KKytwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCisrUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0gYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmZhMGE4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbQpAQCAtMCwwICsxLDY1IEBACisjIS9iaW4vc2gKKyMKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6IHhzZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICRsb2NhbF9mcyAkcmVtb3RlX2ZzIGRidXMKKyMgUmVxdWlyZWQtU3RvcDogJGxvY2FsX2ZzICRyZW1vdGVfZnMKKyMgRGVmYXVsdC1TdGFydDogICAgIDUKKyMgRGVmYXVsdC1TdG9wOiAgICAgIDAgMSAyIDMgNgorIyMjIEVORCBJTklUIElORk8KKwora2lsbHByb2MoKSB7ICAgICAgICAgICAgIyBraWxsIHRoZSBuYW1lZCBwcm9jZXNzKGVzKQorICAgICAgICBwaWQ9YC9iaW4vcGlkb2YgJDFgCisgICAgICAgIFsgIiRwaWQiICE9ICIiIF0gJiYga2lsbCAkcGlkCit9CisKK3JlYWQgQ01ETElORSA8IC9wcm9jL2NtZGxpbmUKK2ZvciB4IGluICRDTURMSU5FOyBkbworICAgICAgICBjYXNlICR4IGluCisgICAgICAgIHgxMT1mYWxzZSkKKwkJZWNobyAiWCBTZXJ2ZXIgZGlzYWJsZWQiIAorCQlleGl0IDA7CisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworZG9uZQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgICAgLiAvZXRjL3Byb2ZpbGUKKyAgICAgICB1c2VybmFtZT1yb290CisgICAgICAgZWNobyAiU3RhcnRpbmcgWHNlcnZlciIKKyAgICAgICBpZiBbIC1mIC9ldGMvWDExL1h1c2VybmFtZSBdOyB0aGVuCisgICAgICAgICAgIHVzZXJuYW1lPWBjYXQgL2V0Yy9YMTEvWHVzZXJuYW1lYAorICAgICAgICAgICAjIHNldHRpbmcgZm9yIHJvb3RsZXNzIFgKKyAgICAgICAgICAgY2htb2Qgbyt3IC92YXIvbG9nCisgICAgICAgICAgIGNobW9kIGcrciAvZGV2L3R0eVswLTNdCisgICAgICAgICAgICMgaGlkcmF3IGRldmljZSBpcyBwcm9iYWJseSBuZWVkZWQKKyAgICAgICAgICAgaWYgWyAtZSAvZGV2L2hpZHJhdzAgXTsgdGhlbgorICAgICAgICAgICAgICAgY2htb2QgbytydyAvZGV2L2hpZHJhdyoKKyAgICAgICAgICAgZmkKKyAgICAgICBmaQorICAgICAgICMgVXNpbmcgc3UgcmF0aGVyIHRoYW4gc3VkbyBhcyBsYXRlc3QgMS44LjEgY2F1c2UgZmFpbHVyZSBbWU9DVE8gIzEyMTFdCisgICAgICAgc3UgLWwgLWMgJy9ldGMvWDExL1hzZXJ2ZXImJyAkdXNlcm5hbWUgCisgICAgICAgIyBXYWl0IGZvciB0aGUgZGVza3RvcCB0byBzYXkgaXRzIGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAjIGJlZm9yZSBsb2FkaW5nIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0KKyAgICAgICAjIGRidXMtd2FpdCBvcmcubWF0Y2hib3hfcHJvamVjdC5kZXNrdG9wIExvYWRlZAorICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIFhTZXJ2ZXIiCisgICAgICAgIGtpbGxwcm9jIHhpbml0CisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgY2h2dCAxICYKKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgJDAgc3RhcnQKKyAgOzsKKworICAqKQorICAgICAgICBlY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iCisgIDs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzA1ODJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMS1jb21tb24veHNlcnZlci1ub2RtLWluaXQveHNlcnZlci1ub2RtLmNvbmYKQEAgLTAsMCArMSBAQAorSE9NRT0vaG9tZS9yb290CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZSBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTEtY29tbW9uL3hzZXJ2ZXItbm9kbS1pbml0L3hzZXJ2ZXItbm9kbS5zZXJ2aWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExLWNvbW1vbi94c2VydmVyLW5vZG0taW5pdC94c2VydmVyLW5vZG0uc2VydmljZQpAQCAtMCwwICsxLDEwIEBACitbVW5pdF0KK0Rlc2NyaXB0aW9uPVhzZXJ2ZXIgc3RhcnR1cCB3aXRob3V0IGEgZGlzcGxheSBtYW5hZ2VyCisKK1tTZXJ2aWNlXQorVXNlcj1yb290CitFbnZpcm9ubWVudEZpbGU9L2V0Yy9kZWZhdWx0L3hzZXJ2ZXItbm9kbQorRXhlY1N0YXJ0PS9ldGMvWDExL1hzZXJ2ZXIKKworW0luc3RhbGxdCitBbGlhcz1kaXNwbGF5LW1hbmFnZXIuc2VydmljZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9lbmRpYW4tZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9lbmRpYW4tZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTUzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL2VuZGlhbi1maXgucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorbGlidm5jc2VydmVyOiByZXBsYWNlIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4gd2l0aCBXT1JEU19CSUdFTkRJQU4KKworc2luY2UgbWFjcm8gQUNfQ19CSUdFTkRJQU4gaXMgdXNlZCBpbiBhdXRvY29uZiBhbmQgV09SRFNfQklHRU5ESUFOIGlzCithdXRvbWF0aWNhbGx5IHNldCBmb3IgZGlmZmVyZW50IGFyY2gsIGl0IGlzIGJldHRlciB0byB1c2UgV09SRFNfQklHRU5ESUFOCitpbnN0ZWFkIG9mIExJQlZOQ1NFUlZFUl9XT1JEU19CSUdFTkRJQU4sIHdoaWNoIGN1YXNlIGlzc3VlIGluIG1pcHMuCisKK1NpZ25lZC1vZmYtYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitkaWZmIC0tZ2l0IGEvbGlidm5jc2VydmVyL21haW4uYyBiL2xpYnZuY3NlcnZlci9tYWluLmMKK2luZGV4IGI2YmQ5MzAuLjhiYmI3YmYgMTAwNjQ0CistLS0gYS9saWJ2bmNzZXJ2ZXIvbWFpbi5jCisrKysgYi9saWJ2bmNzZXJ2ZXIvbWFpbi5jCitAQCAtNDcsNyArNDcsNyBAQCBzdGF0aWMgTVVURVgoZXh0TXV0ZXgpOworIAorIHN0YXRpYyBpbnQgcmZiRW5hYmxlTG9nZ2luZz0xOworIAorLSNpZmRlZiBMSUJWTkNTRVJWRVJfV09SRFNfQklHRU5ESUFOCisrI2lmZGVmIFdPUkRTX0JJR0VORElBTgorIGNoYXIgcmZiRW5kaWFuVGVzdCA9ICgxPT0wKTsKKyAjZWxzZQorIGNoYXIgcmZiRW5kaWFuVGVzdCA9ICgxPT0xKTsKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveDExdm5jL2ZpbGVzL3N0YXJ0aW5nLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjJlNDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy9maWxlcy9zdGFydGluZy1maXgucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorIi1ndWkiICYgIi1yZmJwb3J0IiByZXF1aXJlICJ3aXNoIiBpbnN0YWxsZWQsIG9yIGVsc2UgeDExdm5jIGZhaWxzIHRvIHN0YXJ0LgorUmVtb3ZpbmcgdGhlc2UgMiBwYXJhbWV0ZXJzIG1ha2VzIHgxMXZuYyB3b3JrcyB3ZWxsIG9uIHBva3kgc2F0byBpbWFnZS4KKworQWRkIGFsc28gLXNraXBfbG9ja2tleXMgb3B0aW9uIHRvIGlnbm9yZSBhbGwgQ2Fwc19Mb2NrLCBTaGlmdF9Mb2NrLCBOdW1fTG9jaywKK1Njcm9sbF9Mb2NrIGtleXN5bXMgcmVjZWl2ZWQgZnJvbSB2aWV3ZXJzLCBpbiBvcmRlciB0byBsZWF2ZSB0aGUgbG9jayBzdGF0ZSBvbgordGhlIHNlcnZlciBzaWRlIHVuY2hhbmdlZC4gWWV0LCB0aGUga2V5cyB3aWxsIGFwcGVhciBjb3JyZWN0bHkuCisKK1NpZ25lZC1vZmYtYnk6IFpoYWkgRWR3aW4gPGVkd2luLnpoYWlAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiB4MTF2bmMtMC45LjEyL3gxMXZuYy94MTF2bmMuZGVza3RvcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHgxMXZuYy0wLjkuMTIub3JpZy94MTF2bmMveDExdm5jLmRlc2t0b3AJMjAxMS0wMy0wMyAxMDozMzoxOC4wMDAwMDAwMDAgKzA4MDAKKysrKyB4MTF2bmMtMC45LjEyL3gxMXZuYy94MTF2bmMuZGVza3RvcAkyMDExLTAzLTAzIDEwOjM1OjIwLjAwMDAwMDAwMCArMDgwMAorQEAgLTEsNyArMSw3IEBACisgW0Rlc2t0b3AgRW50cnldCisgTmFtZT1YMTFWTkMgU2VydmVyCisgQ29tbWVudD1TaGFyZSB0aGlzIGRlc2t0b3AgYnkgVk5DCistRXhlYz14MTF2bmMgLWd1aSB0cmF5PXNldHBhc3MgLXJmYnBvcnQgUFJPTVBUIC1iZyAtbyAlJUhPTUUvLngxMXZuYy5sb2cuJSVWTkNESVNQTEFZCisrRXhlYz14MTF2bmMgLWJnIC1yZmJwb3J0IDU5MDAgLXNraXBfbG9ja2tleXMgLW8gJSVIT01FLy54MTF2bmMubG9nLiUlVk5DRElTUExBWQorIEljb249Y29tcHV0ZXIKKyBUZXJtaW5hbD1mYWxzZQorIFR5cGU9QXBwbGljYXRpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMveDExdm5jXzAuOS4xMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94MTF2bmMveDExdm5jXzAuOS4xMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzAyNDFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3gxMXZuYy94MTF2bmNfMC45LjEzLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiRXhwb3J0cyB5b3VyIFggc2Vzc2lvbiBvbi10aGUtZmx5IHZpYSBWTkMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmthcmxydW5nZS5jb20veDExdm5jLyIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitBVVRIT1IgPSAiS2FybCBSdW5nZSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzYxYjZiODM3Y2FkMjZjNjkwMGE5MjZiNjJhYWRhNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veDExdm5jL3gxMXZuYy5oO2VuZGxpbmU9MzM7bWQ1PTZmOTVkYzY1MzU0NjdkN2VlMTU2M2ZkNDM0ZmIzNzJlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ2bmNzZXJ2ZXIveDExdm5jLyR7UFZ9L3gxMXZuYy0ke1BWfS50YXIuZ3pcCisgICAgICAgICAgIGZpbGU6Ly9zdGFydGluZy1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW5kaWFuLWZpeC5wYXRjaCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMzcyZWM0ZmU4MjExMjIxNTQ3YjFjMTA4Y2Y1NmU0YyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNjgyOWYyZTYyOTY2N2E1Mjg0ZGU2MmIwODBiMTMxMjZhMDczNjQ5OWZlNDdjZGI0NDdhZWRiMDdhNTlmMTNiIgorCitERVBFTkRTID0gIm9wZW5zc2wgdmlydHVhbC9saWJ4MTEgbGlieGV4dCBqcGVnIHpsaWIgbGlieGZpeGVzIGxpYnhyYW5kciBsaWJ4ZGFtYWdlIGxpYnh0c3QiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnemVyb2NvbmYnLCAnYXZhaGknLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thdmFoaV0gPSAiLS13aXRoLWF2YWhpLC0td2l0aG91dC1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbeGluZXJhbWFdID0gIi0td2l0aC14aW5lcmFtYSwtLXdpdGhvdXQteGluZXJhbWEsbGlieGluZXJhbWEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2ZpeF93YXRjaF9jdXJzb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2ZpeF93YXRjaF9jdXJzb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhYzU1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvZml4X3dhdGNoX2N1cnNvci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitGaXggdHlwbyBpbiBNYWtlZmlsZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvY3Vyc29ycy9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEub3JpZy9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDQuMDAxNDM1MzA1ICswMDAwCisrKysgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCTIwMTMtMDMtMDcgMjI6MjU6MDQuMDYxNDM1MzAyICswMDAwCitAQCAtNzksNyArNzksNyBAQAorIAl1bF9hbmdsZSBcCisgCXVyX2FuZ2xlIFwKKyAJdl9kb3VibGVfYXJyb3cgXAorLQl3YXRjaGEgXAorKwl3YXRjaCBcCisgCXh0ZXJtICAKKyAKKyBDVVJTT1JfRElSID0gJChkYXRhZGlyKS9pY29ucy94Y3Vyc29yLXRyYW5zcGFyZW50L2N1cnNvcnMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAyOGZkNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUtMC4xLjEvdXNlLXJlbGF0aXZlLXN5bWxpbmtzLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1VzZSByZWxhdGl2ZSBzeW1saW5rIGZvciBsaW5rIHJhdGhlciB0aGFuIGFic29sdXRlIHBhdGggd2hpY2ggCitkb2Vzbid0IHdvcmsgd2VsbCBpbiBERVNURElSIHNldHRpbmcuCisKK0Fsc28gZml4IG91dCBvZiB0cmVlIGJ1aWxkcyB0byB1c2UgY29ycmVjdCBzcmNkaXIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitSUCAyMDEzLzMvOAorCitJbmRleDogeGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS9jdXJzb3JzL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0wLjEuMS5vcmlnL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNTowMy45MzM0MzUzMDcgKzAwMDAKKysrKyB4Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lLTAuMS4xL2N1cnNvcnMvTWFrZWZpbGUuYW0JMjAxMy0wMy0wNyAyMjoyNToyNy4yOTM0MzQ3NTUgKzAwMDAKK0BAIC04OCw5ICs4OCw5IEBACisgCisgaW5zdGFsbC1kYXRhLWxvY2FsOgorIAkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKENVUlNPUl9ESVIpOyAKKy0JJChJTlNUQUxMX0RBVEEpICQoQ1VSU09SX1JFQUwpICQoREVTVERJUikkKENVUlNPUl9ESVIpLyAKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS8kKENVUlNPUl9SRUFMKSAkKERFU1RESVIpJChDVVJTT1JfRElSKS8KKyAJZm9yIENVUlNPUiBpbiAkKENVUlNPUl9OQU1FUyk7IGRvIFwKKyAJCWVjaG8gJy0tIEluc3RhbGxpbmcgY3Vyc29yICckJENVUlNPUjsgXAorLQkJbG4gLXMgJChERVNURElSKSQoQ1VSU09SX0RJUikvdHJhbnNwICQoREVTVERJUikkKENVUlNPUl9ESVIpLyQkQ1VSU09SOyBcCisrCQlsbiAtcyB0cmFuc3AgJChERVNURElSKSQoQ1VSU09SX0RJUikvJCRDVVJTT1I7IFwKKyAJZG9uZQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWUveGN1cnNvci10cmFuc3BhcmVudC10aGVtZV8wLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU2NjhhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94Y3Vyc29yLXRyYW5zcGFyZW50LXRoZW1lL3hjdXJzb3ItdHJhbnNwYXJlbnQtdGhlbWVfMC4xLjEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJUcmFuc3BhcmVudCBYMTEgY3Vyc29yIHRoZW1lIGZvciB0b3VjaHNjcmVlbnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMvbWF0Y2hib3gvdXRpbHMveGN1cnNvci10cmFuc3BhcmVudC10aGVtZS0ke1BWfS50YXIuZ3ogXAorCSAgIGZpbGU6Ly91c2UtcmVsYXRpdmUtc3ltbGlua3MucGF0Y2ggXAorCSAgIGZpbGU6Ly9maXhfd2F0Y2hfY3Vyc29yLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2IwYzYyMzA0OWQ0YWFiMjA2MDBkNjQ3M2Y4YWFiMjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjI2YWRmMmQ1MDNkMDEyOTk3MTgzOTBhZTM5ZGFiNDY5MWE2NzIyMGRlMDk0MjNiZTAzNjRlOWEwNjBiZjdlNCIKK0ZJTEVTXyR7UE59ID0gIiR7ZGF0YWRpcn0vaWNvbnMveGN1cnNvci10cmFuc3BhcmVudC9jdXJzb3JzLyoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGFsbGFyY2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dC9wb2ludGVyY2FsLnhpbnB1dCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dC9wb2ludGVyY2FsLnhpbnB1dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMzZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3BvaW50ZXJjYWwteGlucHV0L3BvaW50ZXJjYWwueGlucHV0CkBAIC0wLDAgKzEgQEAKKyMgcmVwbGFjZSB3aXRoIHZhbGlkIG1hY2hpbmUgc3BlY2lmaWMgcG9pbnRlcmNhbC54aW5wdXQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci9wb2ludGVyY2FsLXhpbnB1dF8wLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXRfMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MzQ4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IvcG9pbnRlcmNhbC14aW5wdXRfMC4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZGF0YSBmcm9tIHhpbnB1dC1jYWxpYnJhdG9yIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUFIgPSAicjciCisKK1NSQ19VUkkgPSAiZmlsZTovL3BvaW50ZXJjYWwueGlucHV0IgorUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworICAgICMgT25seSBpbnN0YWxsIGZpbGUgaWYgaXQgaGFzIGEgY29udGVudHMKKyAgICBpZiBbIC1zICR7U30vcG9pbnRlcmNhbC54aW5wdXQgXSAmJlwKKyAgICAgICBbICEgLW4gIiQoaGVhZCAtbjEgJHtTfS9wb2ludGVyY2FsLnhpbnB1dHxncmVwICJyZXBsYWNlLipwb2ludGVyY2FsXC54aW5wdXQiKSIgXTsgdGhlbgorICAgICAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9LworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtTfS9wb2ludGVyY2FsLnhpbnB1dCAke0R9JHtzeXNjb25mZGlyfS8KKyAgICBmaQorfQorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorQ09ORkZJTEVTXyR7UE59ID0gIiR7c3lzY29uZmRpcn0vcG9pbnRlcmNhbC54aW5wdXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvMzB4aW5wdXRfY2FsaWJyYXRlLnNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yLzMweGlucHV0X2NhbGlicmF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjkwNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yLzMweGlucHV0X2NhbGlicmF0ZS5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKwkvdXNyL2Jpbi94aW5wdXRfY2FsaWJyYXRvcl9vbmNlLnNoCitmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveGlucHV0LWNhbGlicmF0b3IveGlucHV0LWNhbGlicmF0b3IvQWxsb3cteGlucHV0X2NhbGlicmF0b3JfcG9pbnRlcmNhbC5zaC10by1iZS1ydW4tYXMtbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njk4MjkyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2gKQEAgLTAsMCArMSw2NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gMTQ3MzRhOTNiZDNmYzMyMzMyNTQ1OWUyNGIwNDc5NTQyMmUzOTVlNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IExhdXJlbnRpdSBQYWxjdSA8bGF1cmVudGl1LnBhbGN1QGludGVsLmNvbT4KK0RhdGU6IE1vbiwgMSBKdWwgMjAxMyAxNTozODowMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBBbGxvdyB4aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHRvIGJlIHJ1biBhcyBub3JtYWwKKyB1c2VyCisKK0FsbG93IG5vcm1hbCB1c2VyIHRvIGNyZWF0ZSB0aGVpciBvd24gcG9pbnRlcmNhbC54aW5wdXQgZmlsZXMgdGhhdAorb3ZlcnJpZGUgdGhlIHN5c3RlbSBwb2ludGVyY2FsIGZpbGUgaW4gL2V0Yy4KKworU2lnbmVkLW9mZi1ieTogTGF1cmVudGl1IFBhbGN1IDxsYXVyZW50aXUucGFsY3VAaW50ZWwuY29tPgorLS0tCisgc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIHwgICAzMyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoIGIvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCitpbmRleCBmY2NiMTk3Li4wYWRhN2RhIDEwMDc1NQorLS0tIGEvc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoCisrKysgYi9zY3JpcHRzL3hpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gKK0BAIC0xMSwxOSArMTEsMzIgQEAKKyBQQVRIPSIvdXNyL2JpbjokUEFUSCIKKyAKKyBCSU5BUlk9InhpbnB1dF9jYWxpYnJhdG9yIgorLUNBTEZJTEU9Ii9ldGMvcG9pbnRlcmNhbC54aW5wdXQiCistTE9HRklMRT0iL3Zhci9sb2cveGlucHV0X2NhbGlicmF0b3IucG9pbnRlcmNhbC5sb2ciCisrU1lTX0NBTEZJTEU9Ii9ldGMvcG9pbnRlcmNhbC54aW5wdXQiCisrVVNFUl9DQUxGSUxFPSIkSE9NRS8ucG9pbnRlcmNhbC9wb2ludGVyY2FsLnhpbnB1dCIKKyAKKy1pZiBbIC1lICRDQUxGSUxFIF0gOyB0aGVuCistICBpZiBncmVwIHJlcGxhY2UgJENBTEZJTEUgOyB0aGVuCistICAgIGVjaG8gIkVtcHR5IGNhbGlicmF0aW9uIGZpbGUgZm91bmQsIHJlbW92aW5nIGl0IgorLSAgICBybSAkQ0FMRklMRQorLSAgZWxzZQorLSAgICBlY2hvICJVc2luZyBjYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbiAkQ0FMRklMRSIKKy0gICAgLiAkQ0FMRklMRSAmJiBleGl0IDAKKy0gIGZpCisraWYgWyAiJFVTRVIiID0gInJvb3QiIF07IHRoZW4KKysgIExPR0ZJTEU9Ii92YXIvbG9nL3hpbnB1dF9jYWxpYnJhdG9yLnBvaW50ZXJjYWwubG9nIgorKyAgQ0FMRklMRVM9IiRTWVNfQ0FMRklMRSIKKytlbHNlCisrICBMT0dGSUxFPSIkSE9NRS8ucG9pbnRlcmNhbC94aW5wdXRfY2FsaWJyYXRvci5wb2ludGVyY2FsLmxvZyIKKysgIENBTEZJTEVTPSIkVVNFUl9DQUxGSUxFICRTWVNfQ0FMRklMRSIKKysgIG1rZGlyIC1wICIkSE9NRS8ucG9pbnRlcmNhbCIKKyBmaQorIAorK2ZvciBDQUxGSUxFIGluICRDQUxGSUxFUzsgZG8KKysgIGlmIFsgLWUgJENBTEZJTEUgXTsgdGhlbgorKyAgICBpZiBncmVwIHJlcGxhY2UgJENBTEZJTEUgOyB0aGVuCisrICAgICAgZWNobyAiRW1wdHkgY2FsaWJyYXRpb24gZmlsZSBmb3VuZCwgcmVtb3ZpbmcgaXQiCisrICAgICAgcm0gJENBTEZJTEUgMj4vZGV2L251bGwgfHwgdHJ1ZQorKyAgICBlbHNlCisrICAgICAgZWNobyAiVXNpbmcgY2FsaWJyYXRpb24gZGF0YSBzdG9yZWQgaW4gJENBTEZJTEUiCisrICAgICAgLiAkQ0FMRklMRSAmJiBleGl0IDAKKysgICAgZmkKKysgIGZpCisrZG9uZQorKworK1sgIiRVU0VSIiAhPSAicm9vdCIgXSAmJiBDQUxGSUxFPSRVU0VSX0NBTEZJTEUKKysKKyBDQUxEQVRBPWAkQklOQVJZIC0tb3V0cHV0LXR5cGUgeGlucHV0IC12IHwgdGVlICRMT0dGSUxFIHwgZ3JlcCAnICAgIHhpbnB1dCBzZXQnIHwgc2VkICdzL14gICAgLy9nOyBzLyQvOy9nJ2AKKyBpZiBbICEgLXogIiRDQUxEQVRBIiBdIDsgdGhlbgorICAgZWNobyAkQ0FMREFUQSA+ICRDQUxGSUxFCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hpbnB1dC1jYWxpYnJhdG9yL3hpbnB1dC1jYWxpYnJhdG9yX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlkZTNkNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94aW5wdXQtY2FsaWJyYXRvci94aW5wdXQtY2FsaWJyYXRvcl9naXQuYmIKQEAgLTAsMCArMSwzNyBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiBwcm9ncmFtIGZvciBYMTEiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hpbnB1dF9jYWxpYnJhdG9yIgorTElDRU5TRSA9ICJNSVQtWCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9jYWxpYnJhdG9yLmNwcDtlbmRsaW5lPTIyO21kNT0xYmNiYTA4ZjY3Y2RiNTZmMzQwMjE1NTc4OThlNGI1YSIKK0RFUEVORFMgPSAidmlydHVhbC9saWJ4MTEgbGlieGkiCisKK1BWID0gIjAuNy41K2dpdCR7U1JDUFZ9IgorUFIgPSAicjYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gImMwMWM1YWY4MDdjYjRiMDE1N2I4ODJhYjA3YTg5M2RmOWE4MTAxMTEiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vdGlhcy94aW5wdXRfY2FsaWJyYXRvci5naXQgXAorICAgICAgICAgICBmaWxlOi8vMzB4aW5wdXRfY2FsaWJyYXRlLnNoIFwKKyAgICAgICAgICAgZmlsZTovL0FsbG93LXhpbnB1dF9jYWxpYnJhdG9yX3BvaW50ZXJjYWwuc2gtdG8tYmUtcnVuLWFzLW4ucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKKyMgZm9yY2UgbmF0aXZlIFgxMSB1aSBhcyB3ZSBkb24ndCBoYXZlIGd0aysgaW4gREVQRU5EUworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZ3VpPXgxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvcl9wb2ludGVyY2FsLnNoICR7RH0ke2JpbmRpcn0veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaAorCisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhpbnB1dF9jYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisKKyAgICBpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQKKyAgICBzZWQgLWUgJ3MsXkV4ZWM9LiosRXhlYz0ke2JpbmRpcn0veGlucHV0X2NhbGlicmF0b3Jfb25jZS5zaCwnICR7U30vc2NyaXB0cy94aW5wdXRfY2FsaWJyYXRvci5kZXNrdG9wID4gJHtEfSR7c3lzY29uZmRpcn0veGRnL2F1dG9zdGFydC94aW5wdXRfY2FsaWJyYXRvci5kZXNrdG9wCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L3hkZy9hdXRvc3RhcnQiCitSREVQRU5EU18ke1BOfSA9ICJ4aW5wdXQgZm9ybWZhY3RvciIKK1JSRUNPTU1FTkRTXyR7UE59ID0gInBvaW50ZXJjYWwteGlucHV0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udGRpcl8xLjAuNy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRkaXJfMS4wLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1M2UyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9ta2ZvbnRkaXJfMS4wLjcuYmIKQEAgLTAsMCArMSwyMiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNyZWF0ZSBhbiBpbmRleCBvZiBYIGZvbnQgZmlsZXMgaW4gYSBkaXJlY3RvcnkiCisKK0RFU0NSSVBUSU9OID0gIkZvciBlYWNoIGRpcmVjdG9yeSBhcmd1bWVudCwgbWtmb250ZGlyIHJlYWRzIGFsbCBvZiB0aGUgXAorZm9udCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBUaGUgZm9udCBuYW1lcyBhbmQgcmVsYXRlZCBkYXRhIGFyZSB3cml0dGVuIFwKK291dCB0byB0aGUgZmlsZXMgXCJmb250cy5kaXJcIiwgXCJmb250cy5zY2FsZVwiLCBhbmQgXCJmb250cy5hbGlhc1wiLiAgXAorVGhlIFggc2VydmVyIGFuZCBmb250IHNlcnZlciB1c2UgdGhlc2UgZmlsZXMgdG8gZmluZCB0aGUgYXZhaWxhYmxlIGZvbnQgXAorZmlsZXMuIgorCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1JERVBFTkRTXyR7UE59ICs9ICJta2ZvbnRzY2FsZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSArPSAibWtmb250c2NhbGUtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjRmY2YyYjkwY2FkYmZjMTUwMDliOWUxMjRkYzNhM2YiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxOGM0MjkxNDhjOTZjMjA3OWVkZGE5MjJhMmI2NzYzMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NmQ1MmE0ODJkZjEzMDQ4NGU1MWZkMDY2ZDFiNmVkYTdjMmMwMmRkYmM5MWZlNmUyYmUxYjljNGU3MzA2NTMwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udHNjYWxlXzEuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL21rZm9udHNjYWxlXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxY2YxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAvbWtmb250c2NhbGVfMS4xLjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiQSBwcm9ncmFtIHRvIGNyZWF0ZSBhbiBpbmRleCBvZiBzY2FsYWJsZSBmb250IGZpbGVzIGZvciBYIgorCitERVNDUklQVElPTiA9ICJGb3IgZWFjaCBkaXJlY3RvcnkgYXJndW1lbnQsIG1rZm9udHNjYWxlIHJlYWRzIGFsbCBvZiB0aGUgXAorc2NhbGFibGUgZm9udCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LiBGb3IgZXZlcnkgZm9udCBmaWxlIGZvdW5kLCBhbiBYMTEgXAorZm9udCBuYW1lIChYTEZEKSBpcyBnZW5lcmF0ZWQsIGFuZCBpcyB3cml0dGVuIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgXAorbmFtZSB0byBhIGZpbGUgZm9udHMuc2NhbGUgaW4gdGhlIGRpcmVjdG9yeS4gIFRoZSByZXN1bHRpbmcgZm9udHMuc2NhbGUgXAoraXMgdXNlZCBieSB0aGUgbWtmb250ZGlyIHByb2dyYW0uIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSB6bGliIGxpYmZvbnRlbmMgZnJlZXR5cGUgeHByb3RvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmUwZDEyOWQwNTMwNTE3NmQxYTc5MGUwYWMxYWNiN2YiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5YmRkNmViZmE2MmIxYmJkNDc0OTA2YWM4NmE0MGZkOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4YzZkNTIyOGFmODg1NDc3YjlhZWM2MGNhNmYxNzI1NzhlN2QyZGU0MjIzNDM1N2FmNjJmYjAwNDM5NDUzZjIwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3JnYl8xLjAuNi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9yZ2JfMS4wLjYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyNjgwNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC9yZ2JfMS4wLjYuYmIKQEAgLTAsMCArMSwxNiBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWDExIGNvbG9yIG5hbWUgZGF0YWJhc2UiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgYm90aCB0aGUgbGlzdCBtYXBwaW5nIFggY29sb3IgbmFtZXMgXAordG8gUkdCIHZhbHVlcyAocmdiLnR4dCkgYW5kLCBpZiBjb25maWd1cmVkIHRvIHVzZSBhIGRhdGFiYXNlIGZvciBjb2xvciBcCitsb29rdXAsIHRoZSByZ2IgcHJvZ3JhbSB0byBjb252ZXJ0IHRoZSB0ZXh0IGZpbGUgaW50byB0aGUgYmluYXJ5IGRhdGFiYXNlIFwKK2Zvcm1hdC4iCisKK0RFUEVORFMgKz0gIiB4cHJvdG8gdXRpbC1tYWNyb3MiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZjU5OGFkYmUyNDFiZDBiMGI5MTEzODMxZjZlMjQ5YSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlYWI1YmJkNzY0MmU1Yzc4NDQyOTMwN2VjMjEwZDE5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiYmNhN2M2YWE1OTkzOWI5ZjZhMGZiOWZmZjE1ZGZkNjIxNzY0MjBmZmQ0YWUzMGM4ZDkyYTZhMTI1ZmJlNmIwIgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94MTFwZXJmXzEuNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOTM1NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveDExcGVyZl8xLjYuMC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgc2VydmVyIHBlcmZvcm1hbmNlIHRlc3QgcHJvZ3JhbSIKKworREVTQ1JJUFRJT04gPSAiVGhlIHgxMXBlcmYgcHJvZ3JhbSBydW5zIG9uZSBvciBtb3JlIHBlcmZvcm1hbmNlIHRlc3RzIFwKK2FuZCByZXBvcnRzIGhvdyBmYXN0IGFuIFggc2VydmVyIGNhbiBleGVjdXRlIHRoZSB0ZXN0cy4iCisKKworREVQRU5EUyArPSAibGlieG11IGxpYnhyZW5kZXIgbGlieGZ0IGxpYnhleHQgZm9udGNvbmZpZyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDI4Y2E0ZDY3YTQxZmNkNGZjMzI4M2RjZTliYmRhN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veDExcGVyZi5oO2VuZGxpbmU9MjQ7bWQ1PTI5NTU1MDY2YmFmNDA2YTEwNWZmOTE3YWMyNWIyZDAxIgorCitQRSA9ICIxIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L1gxMS94MTFwZXJmY29tcC8qIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjBiMjRlNGQ4YmViNjIyYTQxOWU4NDMxZTFjMDNjZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTg3MDk4ZGVjMTk0NzU3MmQ3MGM2MjY5N2E3YjcwYmRlMWFiNTY2ODIzN2Q0NjYwMDgwZWFkZTZiYzA5Njc1MSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94YXV0aF8xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTczZjRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hhdXRoXzEuMC45LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworU1VNTUFSWSA9ICJYIGF1dGhvcml0eSB1dGlsaXRpZXMiCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9uIHRvIGVkaXQgYW5kIGRpc3BsYXkgdGhlIGF1dGhvcml6YXRpb24gXAoraW5mb3JtYXRpb24gdXNlZCBpbiBjb25uZWN0aW5nIHRvIHRoZSBYIHNlcnZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVlYzc0ZGQ3ZWE0ZDEwYzQ3MTVhN2M0NGYxNTlhNDBiIgorCitERVBFTkRTICs9ICJsaWJ4YXUgbGlieGV4dCBsaWJ4bXUiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiN2Q2MDAzZjMyODM4ZDViNjg4ZTJjOGExMzEwODMyNzEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTZjZTE1MjNlYjQ4YjFmOGE0ZjQyNDRmZTFjM2Q4ZTZhZjFhM2I3ZDRiMGU2MDYzNTgyNDIxYjBiNjhkYzI4ZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mby9kaXNhYmxlLXhrYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mby9kaXNhYmxlLXhrYi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgxOTljCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvL2Rpc2FibGUteGtiLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeGRweWluZm8tMS4zLjAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geGRweWluZm8tMS4zLjAub3JpZy9jb25maWd1cmUuYWMJMjAxMS0xMC0yMSAyMTozNDoyMS4wMDAwMDAwMDAgLTA3MDAKKysrKyB4ZHB5aW5mby0xLjMuMC9jb25maWd1cmUuYWMJMjAxMS0xMS0yOCAyMDowNjo1Ni41NTQwNTY5MzUgLTA4MDAKK0BAIC00NywxMSArNDcsMTUgQEAKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvbXVsdGlidWYuaCBYMTEvZXh0ZW5zaW9ucy9YU2htLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKyAKKytBQ19BUkdfRU5BQkxFKHhrYiwgQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS14a2JdLCBbRGlzYWJsZSBYS0Igc3VwcG9ydF0pLAorKwlYS0I9IiRlbmFibGV2YWwiLCBYS0I9InllcyIpCisraWYgdGVzdCAieCRYS0IiID0gInh5ZXMiIDsgdGhlbgorIFBLR19DSEVDS19NT0RVTEVTKERQWV9YS0IsIHgxMSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkRFBZX1hLQl9DRkxBR1MgJERQWV9YMTFfQ0ZMQUdTIgorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvZXh0ZW5zaW9ucy9YS0IuaCBYMTEvWEtCbGliLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKytmaQorIAorIFBLR19DSEVDS19NT0RVTEVTKERQWV9YRjg2VklETU9ERSwgeHhmODZ2bSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mb18xLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZHB5aW5mb18xLjMuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjA0YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hkcHlpbmZvXzEuMy4yLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkRpc3BsYXkgaW5mb3JtYXRpb24gdXRpbGl0eSBmb3IgWCIKKworREVTQ1JJUFRJT04gPSAiWGRweWluZm8gaXMgYSB1dGlsaXR5IGZvciBkaXNwbGF5aW5nIGluZm9ybWF0aW9uIGFib3V0IGFuIFwKK1ggc2VydmVyLiBJdCBpcyB1c2VkIHRvIGV4YW1pbmUgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHNlcnZlciwgdGhlIFwKK3ByZWRlZmluZWQgdmFsdWVzIGZvciB2YXJpb3VzIHBhcmFtZXRlcnMgdXNlZCBpbiBjb21tdW5pY2F0aW5nIGJldHdlZW4gXAorY2xpZW50cyBhbmQgdGhlIHNlcnZlciwgYW5kIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2NyZWVucyBhbmQgdmlzdWFscyBcCit0aGF0IGFyZSBhdmFpbGFibGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mM2QwOWU2YjllMjAzYTFhZjQ4OWUxNmM3MDhmNGZiMyIKK0RFUEVORFMgKz0gImxpYnh0c3QgbGlieGV4dCBsaWJ4eGY4NnZtIGxpYnh4Zjg2ZGdhIGxpYnh4Zjg2bWlzYyBsaWJ4aSBsaWJ4cmVuZGVyIGxpYnhpbmVyYW1hIGxpYmRteCBsaWJ4YXUgbGlieGNvbXBvc2l0ZSIKK1BFID0gIjEiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaXNhYmxlLXhrYi5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg4MDkwMzdiZDQ4NTk5YWY1NWRhZDgxYzUwOGI2YjM5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjMwMjM4ZWQ5MTU2MTllMDZjZWI0MTcyMWU1Zjc0N2Q2NzMyMDU1NWNjMzhkNDU5ZTk1NDgzOWMxODljY2FmNTEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUteGtiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldi9kaWV0LXgxMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXYvZGlldC14MTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEzMDk1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXYvZGlldC14MTEucGF0Y2gKQEAgLTAsMCArMSw4MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKKy0tLQorIHhldi5jIHwgICAxNiArKysrKysrKy0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworSW5kZXg6IHhldi0xLjIuMC94ZXYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhldi0xLjIuMC5vcmlnL3hldi5jCisrKysgeGV2LTEuMi4wL3hldi5jCitAQCAtMTE2LDcgKzExNiw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgbmJ5dGVzID0gWExvb2t1cFN0cmluZyAoZSwgc3RyLCAyNTYsICZrcywgTlVMTCk7CisgCisgICAgIC8qIG5vdCBzdXBwb3NlZCB0byBjYWxsIFhtYkxvb2t1cFN0cmluZyBvbiBhIGtleSByZWxlYXNlIGV2ZW50ICovCistICAgIGlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworKyAgICAvKmlmIChlLT50eXBlID09IEtleVByZXNzICYmIHhpYykgeworICAgICAgICAgZG8geworICAgICAgICAgICAgIG5tYmJ5dGVzID0gWG1iTG9va3VwU3RyaW5nICh4aWMsIGUsIGJ1ZiwgYnNpemUgLSAxLCAma3MsICZzdGF0dXMpOworICAgICAgICAgICAgIGJ1ZltubWJieXRlc10gPSAnXDAnOworQEAgLTEyNiw3ICsxMjYsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgICAgICAgICAgICAgIGJ1ZiA9IHJlYWxsb2MgKGJ1ZiwgYnNpemUpOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0gd2hpbGUgKHN0YXR1cyA9PSBYQnVmZmVyT3ZlcmZsb3cpOworLSAgICB9CisrICAgIH0qLworIAorICAgICBpZiAoa3MgPT0gTm9TeW1ib2wpCisgCWtzbmFtZSA9ICJOb1N5bWJvbCI7CitAQCAtMTU2LDcgKzE1Niw3IEBAIGRvX0tleVByZXNzIChYRXZlbnQgKmV2ZW50cCkKKyAgICAgfQorIAorICAgICAvKiBub3Qgc3VwcG9zZWQgdG8gY2FsbCBYbWJMb29rdXBTdHJpbmcgb24gYSBrZXkgcmVsZWFzZSBldmVudCAqLworLSAgICBpZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKysgICAgLyppZiAoZS0+dHlwZSA9PSBLZXlQcmVzcyAmJiB4aWMpIHsKKyAgICAgICAgIHByaW50ZiAoIiAgICBYbWJMb29rdXBTdHJpbmcgZ2l2ZXMgJWQgYnl0ZXM6ICIsIG5tYmJ5dGVzKTsKKyAgICAgICAgIGlmIChubWJieXRlcyA+IDApIHsKKyAgICAgICAgICAgIGR1bXAgKGJ1Ziwgbm1iYnl0ZXMpOworQEAgLTE2NCw3ICsxNjQsNyBAQCBkb19LZXlQcmVzcyAoWEV2ZW50ICpldmVudHApCisgICAgICAgICB9IGVsc2UgeworICAgICAJICAgcHJpbnRmICgiXG4iKTsKKyAgICAgICAgIH0KKy0gICAgfQorKyAgICB9ICovCisgCisgICAgIHByaW50ZiAoIiAgICBYRmlsdGVyRXZlbnQgcmV0dXJuczogJXNcbiIsCisgCSAgICBYRmlsdGVyRXZlbnQgKGV2ZW50cCwgZS0+d2luZG93KSA/ICJUcnVlIiA6ICJGYWxzZSIpOworQEAgLTEwMTUsNyArMTAxNSw3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAgWFNldExvY2FsZU1vZGlmaWVycyBmYWlsZWRcbiIsIFByb2dyYW1OYW1lKTsKKyAgICAgfQorIAorLSAgICB4aW0gPSBYT3BlbklNIChkcHksIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAvKnhpbSA9IFhPcGVuSU0gKGRweSwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgIGlmICh4aW0gPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICBYT3BlbklNIGZhaWxlZFxuIiwgUHJvZ3JhbU5hbWUpOworICAgICB9CitAQCAtMTA0Miw3ICsxMDQyLDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBYRnJlZSAoeGltX3N0eWxlcyk7CisgICAgICAgICB9CistICAgIH0KKysJfSovCisgCisgICAgIHNjcmVlbiA9IERlZmF1bHRTY3JlZW4gKGRweSk7CisgCitAQCAtMTEwOSw3ICsxMTA5LDcgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlwcmludGYgKCJPdXRlciB3aW5kb3cgaXMgMHglbHgsIGlubmVyIHdpbmRvdyBpcyAweCVseFxuIiwgdywgc3Vidyk7CisgICAgIH0KKyAKKy0gICAgaWYgKHhpbSAmJiB4aW1fc3R5bGUpIHsKKysgICAgLyppZiAoeGltICYmIHhpbV9zdHlsZSkgeworICAgICAgICAgeGljID0gWENyZWF0ZUlDICh4aW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIFhOSW5wdXRTdHlsZSwgeGltX3N0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBYTkNsaWVudFdpbmRvdywgdywKK0BAIC0xMTE5LDcgKzExMTksNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgICAgICBpZiAoeGljID09IE5VTEwpIHsKKyAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICJYQ3JlYXRlSUMgZmFpbGVkXG4iKTsKKyAgICAgICAgIH0KKy0gICAgfQorKyAgICB9Ki8KKyAKKyAgICAgaGF2ZV9yciA9IFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZycl9ldmVudF9iYXNlLCAmcnJfZXJyb3JfYmFzZSk7CisgICAgIGlmIChoYXZlX3JyKSB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV2XzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldl8xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTUxYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hldl8xLjIuMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYIEV2ZW50IFZpZXdlciIKK0RFU0NSSVBUSU9OID0gIlhldiBjcmVhdGVzIGEgd2luZG93IGFuZCB0aGVuIGFza3MgdGhlIFggc2VydmVyIHRvIHNlbmQgaXQgZXZlbnRzIFwKK3doZW5ldmVyIGFueXRoaW5nIGhhcHBlbnMgdG8gdGhlIHdpbmRvdyAoc3VjaCBhcyBpdCBiZWluZyBtb3ZlZCwgcmVzaXplZCwgXAordHlwZWQgaW4sIGNsaWNrZWQgaW4sIGV0Yy4pLiBZb3UgY2FuIGFsc28gYXR0YWNoIGl0IHRvIGFuIGV4aXN0aW5nIHdpbmRvdy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3hldi5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MzM7bWQ1PTU3N2M5OTQyMWYxODAzYjg5MWQyYzc5MDk3YWU0NjgyIgorTElDRU5TRSA9ICJNSVQiCisKK1BFID0gIjEiCisKK0RFUEVORFMgKz0gImxpYnhyYW5kciB4cHJvdG8iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9kaWV0LXgxMS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI0OWJkZGU5MGYwMWMwZDg2MWFmNTJkYzhmZWMzNzllIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5NGFlNjJhNmMxYWY1NmMyOTYxZDcxZjU3ODIwNzZhYzQxMTZmMGZhNGU0MDE0MjBhYzdlMGRiMzNkYzMxNGYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV5ZXNfMS4xLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGV5ZXNfMS4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkMGNiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94ZXllc18xLjEuMS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYMTEgZXllcyB0aGF0IGZvbGxvdyB0aGUgbW91c2UgY3Vyc29yIGRlbW8iCitERVNDUklQVElPTiA9ICJYZXllcyBpcyBhIHNtYWxsIFgxMSBhcHBsaWNhdGlvbiB0aGF0IHNob3dzIGEgcGFpciBvZiBleWVzIHRoYXQgbW92ZSB0byBcCitmb2xsb3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBtb3VzZSBjdXJzb3IgYXJvdW5kIHRoZSBzY3JlZW4uIgorCitQRSA9ICIxIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZWE1MWIzNjUwNTFhYzMyZDE4MTNhN2RiYWE0YmZjNiIKKworU1JDX1VSSVttZDVzdW1dID0gImEzMDM1ZGNlY2RiZGI4OWU4NjQxNzdjMDgwOTI0OTgxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NWU5ODY4MGNkNTllMWY5NDM5MDE2Mzg2NjA5NTQ2ZWQwOGMyODRkMGYwNWE5NTI3NmY5NmFjYTZlOGE1MjEiCisKK0RFUEVORFMgKz0gImxpYnhhdSBsaWJ4dCBsaWJ4ZXh0IGxpYnhtdSBsaWJ4cmVuZGVyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hob3N0XzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNTczN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGhvc3RfMS4wLjcuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiU2VydmVyIGFjY2VzcyBjb250cm9sIHByb2dyYW0gZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4aG9zdCBwcm9ncmFtIGlzIHVzZWQgdG8gYWRkIGFuZCBkZWxldGUgaG9zdCBuYW1lcyBvciBcCit1c2VyIG5hbWVzIHRvIHRoZSBsaXN0IGFsbG93ZWQgdG8gbWFrZSBjb25uZWN0aW9ucyB0byB0aGUgWCBzZXJ2ZXIuIEluIFwKK3RoZSBjYXNlIG9mIGhvc3RzLCB0aGlzIHByb3ZpZGVzIGEgcnVkaW1lbnRhcnkgZm9ybSBvZiBwcml2YWN5IGNvbnRyb2wgXAorYW5kIHNlY3VyaXR5LiBFbnZpcm9ubWVudHMgd2hpY2ggcmVxdWlyZSBtb3JlIHNvcGhpc3RpY2F0ZWQgbWVhc3VyZXMgXAorc2hvdWxkIGltcGxlbWVudCB0aGUgdXNlci1iYXNlZCBtZWNoYW5pc20gb3IgdXNlIHRoZSBob29rcyBpbiB0aGUgXAorcHJvdG9jb2wgZm9yIHBhc3Npbmcgb3RoZXIgYXV0aGVudGljYXRpb24gZGF0YSB0byB0aGUgc2VydmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OGZiZWQ3MWRkZGY0ODU0MTgxOGNlZjgwNzkxMjQxOTkiCitERVBFTkRTICs9ICJsaWJ4bXUgbGlieGF1IgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImY1ZDQ5MDczOGIxNDhjYjdmMmZlNzYwZjQwZjkyNTE2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkzZTYxOWVlMTU0NzFmNTc2Y2ZiMzBjNjYzZTE4ZjViYzcwYWNhNTc3YTYzZDJjMmMwM2YwMDZhNzgzN2MyOWEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGluaXRfMS4zLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGluaXRfMS4zLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMxODUxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94aW5pdF8xLjMuNC5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYIFdpbmRvdyBTeXN0ZW0gaW5pdGlhbGl6ZXIiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4aW5pdCBwcm9ncmFtIGlzIHVzZWQgdG8gc3RhcnQgdGhlIFggV2luZG93IFN5c3RlbSBcCitzZXJ2ZXIgYW5kIGEgZmlyc3QgY2xpZW50IHByb2dyYW0gb24gc3lzdGVtcyB0aGF0IGNhbm5vdCBzdGFydCBYIFwKK2RpcmVjdGx5IGZyb20gL2V0Yy9pbml0IG9yIGluIGVudmlyb25tZW50cyB0aGF0IHVzZSBtdWx0aXBsZSB3aW5kb3cgXAorc3lzdGVtcy4gV2hlbiB0aGlzIGZpcnN0IGNsaWVudCBleGl0cywgeGluaXQgd2lsbCBraWxsIHRoZSBYIHNlcnZlciBhbmQgXAordGhlbiB0ZXJtaW5hdGUuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xOGYwMWU3YjM5ODA3YmViZTJiOGRmMTAxYTAzOWI2OCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRlOTI4NDUyZGZhZjczODUxNDEzYTJkOGI4Yzc2Mzg4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc1ZDg4ZDczOTdhMDdlMDFkYjI1MzE2M2I3YzdhMDBiMjQ5YjNkMzBlOTk0ODlmMjczNGNhYzlhMGM3OTAyYjMiCisKK0VYVFJBX09FQ09ORiA9ICJhY19jdl9wYXRoX01DT09LSUU9JHtiaW5kaXJ9L21jb29raWUiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ1dGlsLWxpbnV4LW1jb29raWUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveGlucHV0XzEuNi4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbnB1dF8xLjYuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmVmY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hpbnB1dF8xLjYuMS5iYgpAQCAtMCwwICsxLDE0IEBACityZXF1aXJlIHhvcmctYXBwLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJSdW50aW1lIGNvbmZpZ3VyYXRpb24gYW5kIHRlc3Qgb2YgWElucHV0IGRldmljZXMiCisKK0RFU0NSSVBUSU9OID0gIlhpbnB1dCBpcyBhbiB1dGlsaXR5IGZvciBjb25maWd1cmluZyBhbmQgdGVzdGluZyBYSW5wdXQgZGV2aWNlcyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODgxNTI1Zjg5Zjk5Y2FkMzljOTgzMmJjYjcyZTZmYTUiCisKK0RFUEVORFMgKz0gIiBsaWJ4aSBsaWJ4cmFuZHIgbGlieGluZXJhbWEiCisKKworU1JDX1VSSVttZDVzdW1dID0gIjMwNTk4MGFjNzhhNjk1NGUzMDZhMTRkODBhNTRjNDQxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI3NjMyZDBmMjI4YThhNmJlOTNiMDk4NTdlYTQxMzk0MGZjZjQ0MDkxZTYwZjRhMGZlOWY1ZmQ4MmVmZDg3MWYiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hrYmNvbXBfMS4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhYzA2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94a2Jjb21wXzEuMy4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIkEgcHJvZ3JhbSB0byBjb21waWxlIFhLQiBrZXlib2FyZCBkZXNjcmlwdGlvbiIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhrYmNvbXAga2V5bWFwIGNvbXBpbGVyIGNvbnZlcnRzIGEgZGVzY3JpcHRpb24gb2YgYW4gXAorWEtCIGtleW1hcCBpbnRvIG9uZSBvZiBzZXZlcmFsIG91dHB1dCBmb3JtYXRzLiBUaGUgbW9zdCBjb21tb24gdXNlIGZvciBcCit4a2Jjb21wIGlzIHRvIGNyZWF0ZSBhIGNvbXBpbGVkIGtleW1hcCBmaWxlICgueGttIGV4dGVuc2lvbikgd2hpY2ggY2FuIFwKK2JlIHJlYWQgZGlyZWN0bHkgYnkgWEtCLWNhcGFibGUgWCBzZXJ2ZXJzIG9yIHV0aWxpdGllcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA4NDM2ZTRmNDQ3Njk2NGUyZTJkZDdlN2U0MWUwNzZhIgorCitQUiA9ICIke0lOQ19QUn0uMCIKKworREVQRU5EUyArPSAibGlieGtiZmlsZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDEyYThlMzA5MmNkZGY3Zjg3YjI1MGY5NmJiMzhjNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZmFjOTczNzc4ZmFiZjUyMTYxMjFhZDYwYjdhZjhhYjc0Y2U3NTEzYWYwZjkyNjBjZjhjNTMwOWUxNjIyYjJhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG1vZG1hcF8xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGVhYzZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3htb2RtYXBfMS4wLjkuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVXRpbGl0eSBmb3IgbW9kaWZ5aW5nIGtleW1hcHMgYW5kIHBvaW50ZXIgYnV0dG9uIG1hcHBpbmdzIGluIFgiCisKK0RFU0NSSVBUSU9OID0gIlRoZSB4bW9kbWFwIHByb2dyYW0gaXMgdXNlZCB0byBlZGl0IGFuZCBkaXNwbGF5IHRoZSBcCitrZXlib2FyZCBtb2RpZmllciBtYXAgYW5kIGtleW1hcCB0YWJsZSB0aGF0IGFyZSB1c2VkIGJ5IGNsaWVudCBcCithcHBsaWNhdGlvbnMgdG8gY29udmVydCBldmVudCBrZXljb2RlcyBpbnRvIGtleXN5bXMuIEl0IGlzIHVzdWFsbHkgcnVuIFwKK2Zyb20gdGhlIHVzZXIncyBzZXNzaW9uIHN0YXJ0dXAgc2NyaXB0IHRvIGNvbmZpZ3VyZSB0aGUga2V5Ym9hcmQgXAorYWNjb3JkaW5nIHRvIHBlcnNvbmFsIHRhc3Rlcy4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjcyYzE3ZTk2MzcwZTFlNzQ3NzNmYTIyZDk5ODk2MjEiCisKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MjNmMDJkM2E1Zjk4NDUwNTU0NTU2MjA1ZjBhOTQ5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiN2IwZTVjYzVmMTBkMGZiNmQyZDZlYTRmMDBjNzdlOGFjMGU4NDdjYzVhNzNiZTk0Y2Q4NjEzOWFjNGFjNDc4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveG9yZy1hcHAtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTI5Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hvcmctYXBwLWNvbW1vbi5pbmMKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJYIGFwcGxpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9hcHBzIgorTElDRU5TRSA9ICJNSVQtWCIKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MtbmF0aXZlIHZpcnR1YWwvbGlieDExIgorCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0lOQ19QUiA9ICJyOCIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL2FwcC8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9YMTEvJHtCUE59ICR7ZGF0YWRpcn0vWDExL2FwcC1kZWZhdWx0cy8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHByb3BfMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHByb3BfMS4yLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4YmYwNDUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hwcm9wXzEuMi4yLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgdG8gZGlzcGxheSB3aW5kb3cgYW5kIGZvbnQgcHJvcGVydGllcyBvZiBhbiBYIHNlcnZlciIKKworREVTQ1JJUFRJT04gPSAiVGhlIHhwcm9wIHV0aWxpdHkgaXMgZm9yIGRpc3BsYXlpbmcgd2luZG93IGFuZCBmb250IFwKK3Byb3BlcnRpZXMgaW4gYW4gWCBzZXJ2ZXIuIE9uZSB3aW5kb3cgb3IgZm9udCBpcyBzZWxlY3RlZCB1c2luZyB0aGUgXAorY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvciBwb3NzaWJseSBpbiB0aGUgY2FzZSBvZiBhIHdpbmRvdywgYnkgY2xpY2tpbmcgXAorb24gdGhlIGRlc2lyZWQgd2luZG93LiBBIGxpc3Qgb2YgcHJvcGVydGllcyBpcyB0aGVuIGdpdmVuLCBwb3NzaWJseSB3aXRoIFwKK2Zvcm1hdHRpbmcgaW5mb3JtYXRpb24uIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMjI2YWI4ZGI4OGFjMGJjMDM5MTY3M2JlNDBjOWY5MSIKKworREVQRU5EUyArPSAibGlieG11IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmFlM2QyZmRhMDc2ODQwMjdhNjQzY2E3ODNkNTk1Y2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWJlZTg4YjEwMjU4NjVhZDEyMWY3MmQzMjU3NmRkMzAyN2FmMTQ0Njc3NGFhODMwMGNjZTNjMjYxZDg2OWJjNiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94cmFuZHJfMS40LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYmQ0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1hcHAveHJhbmRyXzEuNC4zLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlhSYW5kUjogWCBSZXNpemUsIFJvdGF0ZSBhbmQgUmVmbGVjdCBleHRlbnNpb24gY29tbWFuZCIKKworREVTQ1JJUFRJT04gPSAiWHJhbmRyIGlzIHVzZWQgdG8gc2V0IHRoZSBzaXplLCBvcmllbnRhdGlvbiBhbmQvb3IgXAorcmVmbGVjdGlvbiBvZiB0aGUgb3V0cHV0cyBmb3IgYSBzY3JlZW4uIEl0IGNhbiBhbHNvIHNldCB0aGUgc2NyZWVuIFwKK3NpemUuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZlMTYwOGJkYjMzY2Y4YzYyYTQ0MzhmN2QzNDY3OWIzIgorREVQRU5EUyArPSAibGlieHJhbmRyIGxpYnhyZW5kZXIiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDQxZmRiOThkMmFiYzYwNTExMDhiNzA3NWQ5NDhmYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzE1NGFjMzQ4NmI4NjkyMzY5MmYyZDZjZGIyOTkxYTJlZTcyYmMzMmFmMmM0Mzc5YTZmMWMwNjhmMjA0YmUxYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXQvZGlzYWJsZS14a2IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkMTNhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0L2Rpc2FibGUteGtiLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK2FkZCAiLWRpc2FibGUteGtiIiBvcHRpb24KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1JlYmFzZSBmb3IgMS4yLjEgYnk6IFl1IEtlIDxrZS55dUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDgxYzNhZTQuLjI2NjAxYmYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUyLDExICs1MiwxNSBAQCBQS0dfQ0hFQ0tfTU9EVUxFUyhTRVRfWEVYVCwgeGV4dCwKKyAJQUNfQ0hFQ0tfSEVBREVSUyhbWDExL2V4dGVuc2lvbnMvZHBtcy5oIFgxMS9leHRlbnNpb25zL01JVE1pc2MuaF0sLCxbI2luY2x1ZGUgPFgxMS9YbGliLmg+XSkKKyAJQ1BQRkxBR1M9IiRTQVZFX0NQUEZMQUdTIl0sW2VjaG8gIm5vdCBmb3VuZCJdKQorIAorK0FDX0FSR19FTkFCTEUoeGtiLCBBQ19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXhrYl0sIFtEaXNhYmxlIFhLQiBzdXBwb3J0XSksCisrCQlYS0I9IiRlbmFibGV2YWwiLCBYS0I9InllcyIpCisraWYgdGVzdCAieCRYS0IiID0gInh5ZXMiIDsgdGhlbgorIFBLR19DSEVDS19NT0RVTEVTKFNFVF9YS0IsIHgxMSwKKyAJW1NBVkVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkU0VUX1hLQl9DRkxBR1MgJFNFVF9YMTFfQ0ZMQUdTIgorIAlBQ19DSEVDS19IRUFERVJTKFtYMTEvWEtCbGliLmhdLCwsWyNpbmNsdWRlIDxYMTEvWGxpYi5oPl0pCisgCUNQUEZMQUdTPSIkU0FWRV9DUFBGTEFHUyJdLFtlY2hvICJub3QgZm91bmQiXSkKKytmaQorIAorIEFDX0FSR19XSVRIKHhmODZtaXNjLCBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LXhmODZtaXNjXSxbRGlzYWJsZSB4Zjg2bWlzYyBzdXBwb3J0Ll0pLAorICAgICAgICAgICAgICAgICBbVVNFX1hGODZNSVNDPSIkd2l0aHZhbCJdLCBbVVNFX1hGODZNSVNDPSJ5ZXMiXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3hzZXRfMS4yLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4M2I3NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94c2V0XzEuMi4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIlV0aWxpdHkgZm9yIHNldHRpbmcgdmFyaW91cyB1c2VyIHByZWZlcmVuY2Ugb3B0aW9ucyBvZiB0aGUgZGlzcGxheSIKKworREVTQ1JJUFRJT04gPSAieHNldCBpcyBhIHV0aWxpdHkgdGhhdCBpcyB1c2VkIHRvIHNldCB2YXJpb3VzIHVzZXIgXAorcHJlZmVyZW5jZSBvcHRpb25zIG9mIHRoZSBkaXNwbGF5LiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iZWE4MWNjOTgyN2NkZjFhZjBlMTJjMmI4MjI4Y2Y4ZCIKK0RFUEVORFMgKz0gImxpYnhleHQgbGlieHhmODZtaXNjIGxpYnhtdSBsaWJ4YXUiCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14a2IucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkY2QyMjczODhiNTc0ODdkNTQzY2FiMmZkN2E2MDJkNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0MzgyZjRmYjI5Yjg4NjQ3ZTEzZjNiNGJjMjkyNjMxMzQyNzA3NDdmYzE1OWNmYzVmN2UzYWYyMzU4OGM4MDYzIgorCitDRkxBR1MgKz0gIi1EX0dOVV9TT1VSQ0UiCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXhrYiAtLXdpdGhvdXQtZm9udGNhY2hlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h2aW5mb18xLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dmluZm9fMS4xLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk2NWVmNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94dmluZm9fMS4xLjMuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLWFwcC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiUHJpbnQgb3V0IFgtVmlkZW8gZXh0ZW5zaW9uIGFkYXB0b3IgaW5mb3JtYXRpb24iCisKK0RFU0NSSVBUSU9OID0gInh2aW5mbyBwcmludHMgb3V0IHRoZSBjYXBhYmlsaXRpZXMgb2YgYW55IHZpZGVvIGFkYXB0b3JzIFwKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgZGlzcGxheSB0aGF0IGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFgtVmlkZW8gXAorZXh0ZW5zaW9uLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjY2NDEwMWFkN2ExZGM3NThhNGM0MTA5YmY5NzhlNjgiCitERVBFTkRTICs9ICIgbGlieHYiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTU4MzYwMTc2YjcxOGRlZTNjMzliYzA2NDhjMGQxMGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWZiYThiNjhkYWY1Mzg2M2U2NmQ1MDA0ZmE5YzcwM2ZjZWNmNjlkYjRkMTUxZWEyZDNkODg1ZDYyMWU2ZTVlYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94d2luaW5mb18xLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWFwcC94d2luaW5mb18xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTQ1MjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctYXBwL3h3aW5pbmZvXzEuMS4zLmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1hcHAtY29tbW9uLmluYworCitTVU1NQVJZID0gIldpbmRvdyBpbmZvcm1hdGlvbiB1dGlsaXR5IGZvciBYIgorCitERVNDUklQVElPTiA9ICJYd2luaW5mbyBpcyBhIHV0aWxpdHkgZm9yIGRpc3BsYXlpbmcgaW5mb3JtYXRpb24gYWJvdXQgXAord2luZG93cy4gIEluZm9ybWF0aW9uIG1heSBpbmNsdWRlIHdpbmRvdyBwb3NpdGlvbiwgc2l6ZSwgY29sb3IgZGVwdGgsIFwKK2FuZCBhIG51bWJlciBvZiBvdGhlciBpdGVtcy4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc4OTc2Y2QzMTE1ZjZmYWY2MTVhY2NjNGUwOTRkOTBlIgorREVQRU5EUyArPSAibGlieGV4dCBsaWJ4bXUiCisKK1BFID0gIjAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNzc3YmFmYjY3NDU1NWU0OGZkODQzNzYxODI3MDkzMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyMThlYjBlYTk1YmQ4ZGU3OTAzZGZhYTI2NDIzODIwYzUyM2FkMTU5OGJlMDc1MWQyZDhiNmEyYzIzYjIzZmY4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1ldmRldl8yLjkuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjQyOGRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtZXZkZXZfMi45LjIuYmIKQEAgLTAsMCArMSwyMCBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBldmVudCBkZXZpY2VzIChldmRldikgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJldmRldiBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgTGludXgncyBnZW5lcmljIGV2ZW50IFwKK2RldmljZXMuIEl0IHRoZXJlZm9yZSBzdXBwb3J0cyBhbGwgaW5wdXQgZGV2aWNlcyB0aGF0IHRoZSBrZXJuZWwga25vd3MgXAorYWJvdXQsIGluY2x1ZGluZyBtb3N0IG1pY2UgYW5kIGtleWJvYXJkcy4gXAorXAorVGhlIGV2ZGV2IGRyaXZlciBjYW4gc2VydmUgYXMgYm90aCBhIHBvaW50ZXIgYW5kIGEga2V5Ym9hcmQgaW5wdXQgXAorZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgYm90aCB0aGUgY29yZSBrZXlib2FyZCBhbmQgdGhlIGNvcmUgcG9pbnRlci4gXAorTXVsdGlwbGUgaW5wdXQgZGV2aWNlcyBhcmUgc3VwcG9ydGVkIGJ5IG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIFwKK2RyaXZlciwgd2l0aCBvbmUgTG9hZCBkaXJlY3RpdmUgZm9yIGV2ZGV2IGluIHRoZSBNb2R1bGUgc2VjdGlvbiBvZiB5b3VyIFwKK3hvcmcuY29uZiBmb3IgZWFjaCBpbnB1dCBkZXZpY2UgdGhhdCB3aWxsIHVzZSB0aGlzIGRyaXZlci4gIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mZWZlMzNiMWNmMGNhY2JhMGU3MmUzYjBmYTBmMGUxNiIKKworREVQRU5EUyArPSAibXRkZXYgbGliZXZkZXYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5OWVlYmYxNzFlNmM3YmZmYzQyZDRmYzQzMGQ0NzQ1NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3OTIzMjliNTMxYWZjNjkyOGNjZGE5NGU0YjUxYTU1MjBkNGRkZjhlZjlhMDA4OTBhNWQwZDMxODk4YWNlZmVjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1rZXlib2FyZF8xLjguMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmU1MWFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfMS44LjEuYmIKQEAgLTAsMCArMSwxMyBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBrZXlib2FyZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImtleWJvYXJkIGlzIGFuIFhvcmcgaW5wdXQgZHJpdmVyIGZvciBrZXlib2FyZHMuIFRoZSBcCitkcml2ZXIgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIE9TLXByb3ZpZGVkIGtleWJvYXJkIGludGVyZmFjZS4gIFRoZSBkcml2ZXIgXAorZnVuY3Rpb25zIGFzIGEga2V5Ym9hcmQgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBrZXlib2FyZC4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWVhMjA5OWQyNGFjOWUzMTZhNmQ0YjlmMjBiM2Q0ZTEwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTZjY2M0M2QzODliOTcwYWZiZDM4OTM4NzVkZmQ2NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWFjOGZmMzliZjlkYTdkMmZjN2ZkNmMyNDUxNTcyNmU4MTM4MzQwYzA1MThhYjhjNjA2ZTAwOGNmOTNjYTIxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LWtleWJvYXJkX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmIwOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmRfZ2l0LmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItaW5wdXQuaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0ga2V5Ym9hcmQgaW5wdXQgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJrZXlib2FyZCBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3Iga2V5Ym9hcmRzLiBUaGUgXAorZHJpdmVyIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBPUy1wcm92aWRlZCBrZXlib2FyZCBpbnRlcmZhY2UuICBUaGUgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIGtleWJvYXJkIGlucHV0IGRldmljZSwgYW5kIG1heSBiZSB1c2VkIGFzIHRoZSBYIHNlcnZlcidzIFwKK2NvcmUga2V5Ym9hcmQuIgorCitTUkNSRVYgPSAiM2UyOGQ2OGI1MGQyOTE5Mzg3MzRlOTY4NGI4Mjk2Y2E4NjRmMzg5MiIKK1BWID0gIjEuMy4yK2dpdCR7U1JDUFZ9IgorUFIgPSAiJHtJTkNfUFJ9LjAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvZHJpdmVyL3hmODYtaW5wdXQta2V5Ym9hcmQiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZS91bmJyZWFrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2UvdW5icmVhay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTMwODY0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtbW91c2UvdW5icmVhay5wYXRjaApAQCAtMCwwICsxLDIxIEBACitVbmJyZWFrIHRoZSBsaW51eCBtb3VzZSBkcml2ZXIgYnkgdXNpbmcgY29uZmlnLmgKKworUlAgLSA0LzExLzA3CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogZ2l0L3NyYy9sbnhfbW91c2UuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3NyYy9sbnhfbW91c2UuYwkyMDA4LTExLTA0IDIzOjQ2OjA1LjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC9zcmMvbG54X21vdXNlLmMJMjAwOC0xMS0wNCAyMzo0NjoxNS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0zLDggKzMsOCBAQAorICAqIENvcHlyaWdodCAxOTk5IGJ5IFRoZSBYRnJlZTg2IFByb2plY3QsIEluYy4KKyAgKi8KKyAKKy0jaWZkZWYgSEFWRV9YT1JHX0NPTkZJR19ICistI2luY2x1ZGUgPHhvcmctY29uZmlnLmg+CisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisgI2luY2x1ZGUgPFgxMS9YLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlXzEuOS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGI3OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV8xLjkuMS5iYgpAQCAtMCwwICsxLDE1IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIG1vdXNlIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAibW91c2UgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIG1pY2UuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgbW9zdCBhdmFpbGFibGUgbW91c2UgdHlwZXMgYW5kIGludGVyZmFjZXMuICBUaGUgbW91c2UgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIHBvaW50ZXIgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBwb2ludGVyLiBNdWx0aXBsZSBtaWNlIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBlYTlmOTBkNzJiNmQ5MzI3ZGVkZTVmZmRiMmE1MTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3NzA4NWI2NDljNWMwYjMzMzU2NWJhNTYyZjU3Mzk1MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzNDg1ZDM3NTc3OWMwODQwNmYwNzg5ZmVlZGRlMTU5MzNkYzcwMzE1OGEwODZkZGFjNjM4NTk4ZjQ3OWZjNWNlIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1tb3VzZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc5YTJlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LW1vdXNlX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIG1vdXNlIGlucHV0IGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAibW91c2UgaXMgYW4gWG9yZyBpbnB1dCBkcml2ZXIgZm9yIG1pY2UuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgbW9zdCBhdmFpbGFibGUgbW91c2UgdHlwZXMgYW5kIGludGVyZmFjZXMuICBUaGUgbW91c2UgZHJpdmVyIFwKK2Z1bmN0aW9ucyBhcyBhIHBvaW50ZXIgaW5wdXQgZGV2aWNlLCBhbmQgbWF5IGJlIHVzZWQgYXMgdGhlIFggc2VydmVyJ3MgXAorY29yZSBwb2ludGVyLiBNdWx0aXBsZSBtaWNlIGFyZSBzdXBwb3J0ZWQgYnkgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgXAorZHJpdmVyLiIKKworU1JDUkVWID0gImVhNWNmZTgwNGUxMTJmMzIwZjE0YWQ4OTZjNzgwMmQ1MzU1MWQzZTYiCitQViA9ICIxLjMuMCtnaXQke1NSQ1BWfSIKK1BSID0gIiR7SU5DX1BSfS4wIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2RyaXZlci94Zjg2LWlucHV0LW1vdXNlIFwKKyAgICAgICAgICAgZmlsZTovL3VuYnJlYWsucGF0Y2giCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfMS44LjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfMS44LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljMTIyZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LWlucHV0LXN5bmFwdGljc18xLjguMi5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIHN5bmFwdGljcyB0b3VjaHBhZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInN5bmFwdGljcyBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgdGhlIHRvdWNocGFkcyBmcm9tIFwKK1N5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEV2ZW4gdGhvdWdoIHRoZXNlIHRvdWNocGFkcyAoYnkgZGVmYXVsdCwgXAorb3BlcmF0aW5nIGluIGEgY29tcGF0aWJpbGl0eSBtb2RlIGVtdWxhdGluZyBhIHN0YW5kYXJkIG1vdXNlKSBjYW4gYmUgXAoraGFuZGxlZCBieSB0aGUgbm9ybWFsIGV2ZGV2IG9yIG1vdXNlIGRyaXZlcnMsIHRoaXMgZHJpdmVyIGFsbG93cyBtb3JlIFwKK2FkdmFuY2VkIGZlYXR1cmVzIG9mIHRoZSB0b3VjaHBhZCB0byBiZWNvbWUgYXZhaWxhYmxlLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVhYWNkMzUzNWE3NDE4MjQ5NTVjNWViOGYwNjEzOTgiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZWQ2OGU4Y2M2NzRkZDYxYWRiMjgwNzA0NzY0YWFmYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YjBlMTY0ZWJkMDJhNjgwZTBjNjk1OTU1ZTc4MzA1OWYzN2VkYjBjMjY1NjM5OGUwYTk3MmFkYzhlNjk4YzgwIgorCitERVBFTkRTICs9ICJsaWJ4aSBtdGRldiBsaWJ4dHN0IGxpYmV2ZGV2IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9YMTEveG9yZy5jb25mLmQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3NfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDBmNjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtc3luYXB0aWNzX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLWlucHV0LmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIHN5bmFwdGljcyB0b3VjaHBhZCBpbnB1dCBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gInN5bmFwdGljcyBpcyBhbiBYb3JnIGlucHV0IGRyaXZlciBmb3IgdGhlIHRvdWNocGFkcyBmcm9tIFwKK1N5bmFwdGljcyBJbmNvcnBvcmF0ZWQuIEV2ZW4gdGhvdWdoIHRoZXNlIHRvdWNocGFkcyAoYnkgZGVmYXVsdCwgXAorb3BlcmF0aW5nIGluIGEgY29tcGF0aWJpbGl0eSBtb2RlIGVtdWxhdGluZyBhIHN0YW5kYXJkIG1vdXNlKSBjYW4gYmUgXAoraGFuZGxlZCBieSB0aGUgbm9ybWFsIGV2ZGV2IG9yIG1vdXNlIGRyaXZlcnMsIHRoaXMgZHJpdmVyIGFsbG93cyBtb3JlIFwKK2FkdmFuY2VkIGZlYXR1cmVzIG9mIHRoZSB0b3VjaHBhZCB0byBiZWNvbWUgYXZhaWxhYmxlLiIKKworU1JDUkVWID0gIjkzNGJjMDAxMmY5NDhjNTJhYWRjOGVkYTkxMmY3NzI4ZmI3Mzk0YTIiCitQViA9ICIwLjE1LjIrZ2l0JHtTUkNQVn0iCitQUiA9ICIke0lOQ19QUn0uMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9kcml2ZXIveGY4Ni1pbnB1dC1zeW5hcHRpY3MiCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitERVBFTkRTICs9ICJsaWJ4aSBtdGRldiBsaWJ4dHN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni1pbnB1dC12bW1vdXNlXzEzLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtaW5wdXQtdm1tb3VzZV8xMy4xLjAuYmIKQEAgLTAsMCArMSwyNiBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci1pbnB1dC5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBWTVdhcmUgbW91c2UgaW5wdXQgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiVGhlIHZtbW91c2UgZHJpdmVyIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIHNwZWNpYWwgVk1Nb3VzZSBcCitwcm90b2NvbCB0aGF0IGlzIHByb3ZpZGVkIGJ5IFZNd2FyZSB2aXJ0dWFsIG1hY2hpbmVzIHRvIGdpdmUgYWJzb2x1dGUgXAorcG9pbnRlciBwb3NpdGlvbmluZy4gVGhlIHZtbW91c2UgZHJpdmVyIGlzIGNhcGFibGUgb2YgZmFsbGluZyBiYWNrIHRvIHRoZSBcCitzdGFuZGFyZCAnbW91c2UnIGRyaXZlciBpZiBhIFZNd2FyZSB2aXJ0dWFsIG1hY2hpbmUgaXMgbm90IGRldGVjdGVkLiIKKworU1JDX1VSSVttZDVzdW1dID0gIjg1ZTJlNDY0YjcyMTljNDk1YWQzYTE2NDY1YzIyNmVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBhZjU1ODk1N2FjMWJlMWIyODYzNzEyYzI0NzVkZThmNGQ3ZjE0OTIxZmQwMWRlZDJlMmZkZTQ5MjFiMTkzMTkiCisKK1JERVBFTkRTXyR7UE59ICs9ICJ4Zjg2LWlucHV0LW1vdXNlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02MjI4NDFjMDY4YTlkNzYyNWZiZmU3YWNmZmIxYThmYyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCSMgV2UgZG9uJ3QgY2FyZSBhYm91dCBoYWwKKwlybSAtcmYgJHtEfSR7ZGF0YWRpcn0vaGFsLworCXJtIC1yZiAke0R9JHtsaWJkaXJ9L2hhbC8KK30KKworRVhUUkFfT0VDT05GID0gIi0td2l0aC11ZGV2LXJ1bGVzLWRpcj0ke25vbmFyY2hfYmFzZV9saWJkaXJ9L3VkZXYvcnVsZXMuZCIKKworRklMRVNfJHtQTn0gKz0gIiR7bm9uYXJjaF9iYXNlX2xpYmRpcn0vdWRldi9ydWxlcy5kLyAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWNpcnJ1c18xLjUuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWNpcnJ1c18xLjUuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDk4NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tY2lycnVzXzEuNS4zLmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gY2lycnVzIGRpc3BsYXkgZHJpdmVyIgorREVTQ1JJUFRJT04gPSAiY2lycnVzIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBDaXJydXMgTG9naWMgVkdBIGFkYXB0ZXJzLiBUaGVzZSBcCitkZXZpY2VzIGFyZSBub3Qgc28gY29tbW9uIGluIHRoZSB3aWxkIGFueW1vcmUsIGJ1dCBRRU1VIGNhbiBlbXVsYXRlIG9uZSwgc28gXAordGhlIGRyaXZlciBpcyBzdGlsbCB1c2VmdWwuIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZGRjN2NhODYwZGM1ZmQwMTRlN2YxNjBlYTY5OTI5NSIKKworU1JDX1VSSVttZDVzdW1dID0gIjdkN2RmZDRjZGM0MmFhOGI2ZTkyMzUxMGZhMDBhZDJiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVkYzg3YjIwYTU1MjU5MTI2YjUyMzliNWMxZWY5MTM0MTllYWI3ZGVkMGVkMTJhZTlhZTk4OTQ2MGQ3MzUxYWIiCisKK0RFUEVORFMgKz0gImxpYnBjaWFjY2VzcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tZmJkZXZfMC40LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJlOWJkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWZiZGV2XzAuNC40LmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSB4b3JnLWRyaXZlci12aWRlby5pbmMKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBmYmRldiBkaXNwbGF5IGRyaXZlciIKK0RFU0NSSVBUSU9OID0gImZiZGV2IGlzIGFuIFhvcmcgZHJpdmVyIGZvciBmcmFtZWJ1ZmZlciBkZXZpY2VzLiBUaGlzIGlzIGEgbm9uLWFjY2VsZXJhdGVkIGRyaXZlci4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ4Y2JkOTlmZmY3NzNmOTJlODQ0OTQ4Zjc0ZWYwZGY4IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzkzMWMwZTE5ZDQ0MWNjNTc2ZGMwODhmOWViOWZkNzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWRkNGIzMjY0OTgyMjNhYmJmZGY3ODYwODlhNDZlYTNkYjRmYTZiYmQzNDEzMDhlYjQ4YTllMDBiYzNmZDUxYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Fsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNWRkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK0luY2x1ZGUgeG9yZy1zZXJ2ZXIuaCB0byBmaXggYnVpbGQgZXJyb3JzIHNlZW4gd2l0aCBnbGliYyAyLjIwCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8taW50ZWwvMl8yLjk5LjkxMi1yMC94Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYzozOToKKy9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvb3MuaDo1Nzk6MTogZXJyb3I6IGV4cGVjdGVkIGlkZW50aWZpZXIgb3IgJygnIGJlZm9yZSAnX19leHRlbnNpb25fXycKKyBzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG4pOworIF4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHhmODYtdmlkZW8taW50ZWwtMi45OS45MTIub3JpZy9zcmMvYmFja2xpZ2h0LmMJMjAxNC0wNC0wOSAxMDo0MToxOC4wMDAwMDAwMDAgLTA3MDAKKysrKyB4Zjg2LXZpZGVvLWludGVsLTIuOTkuOTEyL3NyYy9iYWNrbGlnaHQuYwkyMDE0LTA4LTI4IDE4OjUyOjI1LjUyNDA3MDU4NyAtMDcwMAorQEAgLTI5LDYgKzI5LDcgQEAKKyAjaW5jbHVkZSAiY29uZmlnLmgiCisgI2VuZGlmCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvd2FpdC5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvZGlzYWJsZS14MTEtZHJpMy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNTA4ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL2Rpc2FibGUteDExLWRyaTMucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorVGhlc2UgbW9kdWxlcyBhcmUgb25seSB1c2VkIGZvciB0ZXN0cyB0aGF0IGRvbid0IGdldCBpbnN0YWxsZWQsIGFuZCB0aGUKK2F1dG9tYXRpYyBkZXRlY3Rpb24gd2l0aG91dCBleHBsaWNpdCBkZXBlbmRlbmNpZXMgbWVhbnMgdGhhdCBhIGJ1aWxkIGNhbiBmaW5kCitlLmcuIHhzaG1mZW5jZSBhdCBjb25maWd1cmUgdGltZSBidXQgdGhlbiBpdCdzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzeXNyb290IGJ5Cit0aGUgdGltZSBjb21waWxlIGhhcHBlbnMuCisKK0FzIHRoZSB0ZXN0cyBkb24ndCBnZXQgaW5zdGFsbGVkLCBqdXN0IGRpc2FibGUgdGhlIGNoZWNrcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1zcGVjaWZpY10KK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJkNjU0ZjMuLjc4YTBlMGQgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI1MSArMjUxIEBAIGZpCistUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKKysjUEtHX0NIRUNLX01PRFVMRVMoWDExX0RSSTMsIFt4Y2ItZHJpMyB4Y2Itc3luYyB4Y2ItcHJlc2VudCB4MTEteGNiIHhzaG1mZW5jZSB4MTEgeHJlbmRlciB4ZXh0IGxpYmRybV0sIFt4MTFfZHJpMz0ieWVzIl0sIFt4MTFfZHJpMz0ibm8iXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3NuYS1Qcm90ZWN0LWFnYWluc3QtQUJJLWJyZWFrYWdlLWluLXJlY2VudC12ZXJzaW9ucy0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OWQ1MmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1pbnRlbC9zbmEtUHJvdGVjdC1hZ2FpbnN0LUFCSS1icmVha2FnZS1pbi1yZWNlbnQtdmVyc2lvbnMtLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gN2ZlMmIyOTQ4NjUyNDQzZmY0M2Q5MDc4NTViZDdhMDUxZDU0ZDMwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAyMzoxNDoxNyArMDAwMAorU3ViamVjdDogW1BBVENIXSBzbmE6IFByb3RlY3QgYWdhaW5zdCBBQkkgYnJlYWthZ2UgaW4gcmVjZW50IHZlcnNpb25zIG9mCisgbGliZHJtCisKK2NvbW1pdCA3ZmUyYjI5NDg2NTI0NDNmZjQzZDkwNzg1NWJkN2EwNTFkNTRkMzA5IHVwc3RyZWFtLgorCitTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFBhdWwgR29ydG1ha2VyIDxwYXVsLmdvcnRtYWtlckB3aW5kcml2ZXIuY29tPgorCitkaWZmIC0tZ2l0IGEvc3JjL3NuYS9rZ2VtLmMgYi9zcmMvc25hL2tnZW0uYworaW5kZXggMTFmMDgyOGYyYmJjLi42ZjE2Y2JhYzg3ZjIgMTAwNjQ0CistLS0gYS9zcmMvc25hL2tnZW0uYworKysrIGIvc3JjL3NuYS9rZ2VtLmMKK0BAIC0xODIsNiArMTgyLDE1IEBAIHN0cnVjdCBsb2NhbF9pOTE1X2dlbV9jYWNoaW5nIHsKKyAjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1NFVF9DQUNISU5HIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIExPQ0FMX0k5MTVfR0VNX1NFVF9DQUNISU5HLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZykKKyAjZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0dFVF9DQUNISU5HIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIExPQ0FMX0k5MTVfR0VNX0dFVF9DQUNISU5HLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY2FjaGluZykKKyAKKytzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCB7CisrCXVpbnQzMl90IGhhbmRsZTsKKysJdWludDMyX3QgcGFkOworKwl1aW50NjRfdCBvZmZzZXQ7CisrCXVpbnQ2NF90IHNpemU7CisrCXVpbnQ2NF90IGFkZHJfcHRyOworK307CisrI2RlZmluZSBMT0NBTF9JT0NUTF9JOTE1X0dFTV9NTUFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1fTU1BUCwgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXApCisrCisgc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21tYXAyIHsKKyAJdWludDMyX3QgaGFuZGxlOworIAl1aW50MzJfdCBwYWQ7CitAQCAtNTE0LDE1ICs1MjMsMTUgQEAgcmV0cnlfd2M6CisgCisgc3RhdGljIHZvaWQgKl9fa2dlbV9ib19tYXBfX2NwdShzdHJ1Y3Qga2dlbSAqa2dlbSwgc3RydWN0IGtnZW1fYm8gKmJvKQorIHsKKy0Jc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIG1tYXBfYXJnOworKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fbW1hcCBhcmc7CisgCWludCBlcnI7CisgCisgcmV0cnk6CistCVZHX0NMRUFSKG1tYXBfYXJnKTsKKy0JbW1hcF9hcmcuaGFuZGxlID0gYm8tPmhhbmRsZTsKKy0JbW1hcF9hcmcub2Zmc2V0ID0gMDsKKy0JbW1hcF9hcmcuc2l6ZSA9IGJ5dGVzKGJvKTsKKy0JaWYgKChlcnIgPSBkb19pb2N0bChrZ2VtLT5mZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX01NQVAsICZtbWFwX2FyZykpKSB7CisrCVZHX0NMRUFSKGFyZyk7CisrCWFyZy5oYW5kbGUgPSBiby0+aGFuZGxlOworKwlhcmcub2Zmc2V0ID0gMDsKKysJYXJnLnNpemUgPSBieXRlcyhibyk7CisrCWlmICgoZXJyID0gZG9faW9jdGwoa2dlbS0+ZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVAsICZhcmcpKSkgeworIAkJYXNzZXJ0KGVyciAhPSBFSU5WQUwpOworIAorIAkJaWYgKF9fa2dlbV90aHJvdHRsZV9yZXRpcmUoa2dlbSwgMCkpCitAQCAtNTM2LDEwICs1NDUsMTAgQEAgcmV0cnk6CisgCQlyZXR1cm4gTlVMTDsKKyAJfQorIAorLQlWRyhWQUxHUklORF9NQUtFX01FTV9ERUZJTkVEKG1tYXBfYXJnLmFkZHJfcHRyLCBieXRlcyhibykpKTsKKysJVkcoVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChhcmcuYWRkcl9wdHIsIGJ5dGVzKGJvKSkpOworIAorIAlEQkcoKCIlczogY2FjaGluZyBDUFUgdm1hIGZvciAlZFxuIiwgX19GVU5DVElPTl9fLCBiby0+aGFuZGxlKSk7CistCXJldHVybiBiby0+bWFwX19jcHUgPSAodm9pZCAqKSh1aW50cHRyX3QpbW1hcF9hcmcuYWRkcl9wdHI7CisrCXJldHVybiBiby0+bWFwX19jcHUgPSAodm9pZCAqKSh1aW50cHRyX3QpYXJnLmFkZHJfcHRyOworIH0KKyAKKyBzdGF0aWMgaW50IGdlbV93cml0ZShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwKKy0tIAorMi40LjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWwvdWRldi1mc3RhdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3VkZXYtZnN0YXQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NzVlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsL3VkZXYtZnN0YXQucGF0Y2gKQEAgLTAsMCArMSw1OSBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSAxMmFmOGE1NzVkMTUxOGQ0MDQxNmY4MzE5NTA0OTE1N2MzYTA2MmE1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CitEYXRlOiBUdWUsIDI0IEZlYiAyMDE1IDE1OjI1OjQwICswMDAwCitTdWJqZWN0OiBzbmE6IHVkZXYgaW50ZWdyYXRpb24gZGVwZW5kcyBvbiBmc3RhdCBhbmQgc3lzL3N0YXQuaAorCitzcmMvc25hL3NuYV9kcml2ZXIuYzogSW4gZnVuY3Rpb24gJ3NuYV9oYW5kbGVfdWV2ZW50cyc6CitzcmMvc25hL3NuYV9kcml2ZXIuYzo3NTk6MjogZXJyb3I6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uICdmc3RhdCcgWy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb25dCisKK0Fsc28gdGFrZSB0aGUgb3Bwb3J0dW5pdHkgdG8gaW5jbHVkZSB1ZGV2IHN1cHBvcnQgaW4gdGhlIGNvbmZpZ3VyZQorc3VtbWFyeS4KKworU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDc0NzZlMmIuLmRlM2E0YjMgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTE5NywxMSArMTk3LDE1IEBAIEFDX0FSR19FTkFCTEUodWRldiwKKyAKKyBpZiB0ZXN0ICJ4JFVERVYiICE9ICJ4bm8iOyB0aGVuCisgCVBLR19DSEVDS19NT0RVTEVTKFVERVYsIFtsaWJ1ZGV2XSwgW3VkZXY9InllcyJdLCBbdWRldj0ibm8iXSkKKysJQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3N0YXQuaF0sIFtdLCBbdWRldj0ibm8iXSkKKyAJaWYgdGVzdCAieCRVREVWIiA9ICJ4eWVzIiAtYSAieCR1ZGV2IiAhPSAieHllcyI7IHRoZW4KKyAJCUFDX01TR19FUlJPUihbdWRldiBzdXBwb3J0IHJlcXVlc3RlZCBidXQgbm90IGZvdW5kIChsaWJ1ZGV2KV0pCisgCWZpCisgCWlmIHRlc3QgIngkdWRldiIgPSAieHllcyI7IHRoZW4KKyAJCUFDX0RFRklORShIQVZFX1VERVYsMSxbRW5hYmxlIHVkZXYtYmFzZWQgbW9uaXRvciBob3RwbHVnIGRldGVjdGlvbl0pCisrCQl1ZGV2X21zZz0iIHllcyIKKysJZWxzZQorKwkJdWRldl9tc2c9IiBubyIKKyAJZmkKKyBmaQorIAorQEAgLTkxMSw2ICs5MTUsNyBAQCBlY2hvICIgIFN1cHBvcnQgZm9yIEtlcm5lbCBNb2RlIFNldHRpbmc/ICRLTVMiCisgZWNobyAiICBTdXBwb3J0IGZvciBsZWdhY3kgVXNlciBNb2RlIFNldHRpbmcgKGZvciBpODEwKT8gJFVNUyIKKyBlY2hvICIgIFN1cHBvcnQgZm9yIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmU6JGRyaV9tc2ciCisgZWNobyAiICBTdXBwb3J0IGZvciBYdiBtb3Rpb24gY29tcGVuc2F0aW9uIChYdk1DIGFuZCBsaWJYdk1DKTokeHZtY19tc2ciCisrZWNobyAiICBTdXBwb3J0IGZvciBkaXNwbGF5IGhvdHBsdWcgbm90aWZpY2F0aW9ucyAodWRldik6JHVkZXZfbXNnIgorIGVjaG8gIiAgQnVpbGQgYWRkaXRpb25hbCB0b29scyBhbmQgdXRpbGl0aWVzPyR0b29sc19tc2ciCisgaWYgdGVzdCAtbiAiJHhwX21zZyI7IHRoZW4KKyBlY2hvICIgIEV4cGVyaW1lbnRhbCBzdXBwb3J0OiR4cF9tc2ciCitkaWZmIC0tZ2l0IGEvc3JjL3NuYS9zbmFfZHJpdmVyLmMgYi9zcmMvc25hL3NuYV9kcml2ZXIuYworaW5kZXggOGMwZDBiNS4uYmMyMGVmMCAxMDA2NDQKKy0tLSBhL3NyYy9zbmEvc25hX2RyaXZlci5jCisrKysgYi9zcmMvc25hL3NuYV9kcml2ZXIuYworQEAgLTc0MCw2ICs3NDAsOCBAQCBzbmFfd2FrZXVwX2hhbmRsZXIoV0FLRVVQSEFORExFUl9BUkdTX0RFQ0wpCisgfQorIAorICNpZiBIQVZFX1VERVYKKysjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKysKKyBzdGF0aWMgdm9pZAorIHNuYV9oYW5kbGVfdWV2ZW50cyhpbnQgZmQsIHZvaWQgKmNsb3N1cmUpCisgeworLS0gCitjZ2l0IHYwLjEwLjIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8taW50ZWxfMi45OS45MTcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmMTQ1NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLWludGVsXzIuOTkuOTE3LmJiCkBAIC0wLDAgKzEsNDAgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gSW50ZWwgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwc2V0cyBkcml2ZXIiCisKK0RFU0NSSVBUSU9OID0gImludGVsIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBJbnRlbCBpbnRlZ3JhdGVkIGdyYXBoaWNzIFwKK2NoaXBzZXRzLiBUaGUgZHJpdmVyIHN1cHBvcnRzIGRlcHRocyA4LCAxNSwgMTYgYW5kIDI0LiBPbiBzb21lIGNoaXBzZXRzLCBcCit0aGUgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIGFjY2VsZXJhdGVkIDNEIHZpYSB0aGUgRGlyZWN0IFJlbmRlcmluZyBcCitJbmZyYXN0cnVjdHVyZSAoRFJJKS4iCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg3MzBhZDU4ZDExYzdiYmFkOWE3MDY2ZDY5Zjc4MDhlIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZS14MTEtZHJpMy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYWx3YXlzX2luY2x1ZGVfeG9yZ19zZXJ2ZXIuaC5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vc25hLVByb3RlY3QtYWdhaW5zdC1BQkktYnJlYWthZ2UtaW4tcmVjZW50LXZlcnNpb25zLS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vdWRldi1mc3RhdC5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImZhMTk2YTY2ZTUyYzBjNjI0ZmU1ZDM1MGFmN2E1ZTdiIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwYjc4MWVlYTA1NTU4MjgyMGExMjNjNDdiNjI0MTFiZGY2YWFiZjRmMDNkYzA1NjhmYWVjNTVmYWY5NjY3YzkiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGRybSBsaWJwY2lhY2Nlc3MgcGl4bWFuIgorCitQQUNLQUdFQ09ORklHID8/PSAieHZtYyBzbmEgdWRldiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICdkcmkgZHJpMSBkcmkyJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpIgorUEFDS0FHRUNPTkZJR1tkcmkxXSA9ICItLWVuYWJsZS1kcmkxLC0tZGlzYWJsZS1kcmkxLHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCitQQUNLQUdFQ09ORklHW2RyaTNdID0gIi0tZW5hYmxlLWRyaTMsLS1kaXNhYmxlLWRyaTMsZHJpM3Byb3RvIgorUEFDS0FHRUNPTkZJR1tzbmFdID0gIi0tZW5hYmxlLXNuYSwtLWRpc2FibGUtc25hIgorUEFDS0FHRUNPTkZJR1t1eGFdID0gIi0tZW5hYmxlLXV4YSwtLWRpc2FibGUtdXhhIgorUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLWVuYWJsZS11ZGV2LC0tZGlzYWJsZS11ZGV2LHVkZXYiCitQQUNLQUdFQ09ORklHW3h2bWNdID0gIi0tZW5hYmxlLXh2bWMsLS1kaXNhYmxlLXh2bWMsbGlieHZtYyB4Y2ItdXRpbCIKK1BBQ0tBR0VDT05GSUdbdG9vbHNdID0gIi0tZW5hYmxlLXRvb2xzLC0tZGlzYWJsZS10b29scyxsaWJ4aW5lcmFtYSBsaWJ4cmFuZHIgbGlieGRhbWFnZSBsaWJ4Zml4ZXMgbGlieGN1cnNvciBsaWJ4dHN0IGxpYnhleHQgbGlieHJlbmRlciIKKworIyAtLWVuYWJsZS1rbXMtb25seSBvcHRpb24gaXMgcmVxdWlyZWQgYnkgUk9PVExFU1NfWAorRVhUUkFfT0VDT05GICs9ICcke0BiYXNlX2NvbmRpdGlvbmFsKCAiUk9PVExFU1NfWCIsICIxIiwgIiAtLWVuYWJsZS1rbXMtb25seSIsICIiLCBkICl9JworCitDT01QQVRJQkxFX0hPU1QgPSAnKGkuODZ8eDg2XzY0KS4qLWxpbnV4JworCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9wb2xraXQtMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcC8wMDAxLWRybW1vZGVfb3V0cHV0X2RwbXMtUmVwbGFjZS1sb2dpY2FsLXdpdGgtYml0d2lzZS1vcGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlNzdkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXAvMDAwMS1kcm1tb2RlX291dHB1dF9kcG1zLVJlcGxhY2UtbG9naWNhbC13aXRoLWJpdHdpc2Utb3BlLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gZmM2NTNjYTNiMzY0MzVhZWEyODFhZTQwOWZiOTBmODVlMWJjMGQ4MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDcgU2VwIDIwMTUgMDg6NDQ6MTMgKzAwMDAKK1N1YmplY3Q6IFtmcmVlZHJlbm9dW1BBVENIXSBkcm1tb2RlX291dHB1dF9kcG1zOiBSZXBsYWNlIGxvZ2ljYWwgJiYgd2l0aCBiaXR3aXNlICYKKyBvcGVyYXRpb24KKworVGhpcyBpcyBhIG1hc2sgY2FsY3VsYXRpb24gc28gYml0Yndpc2UgJiBzaG91bGQgaGF2ZSBiZWVuIHVzZWQKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworIHNyYy9kcm1tb2RlX2Rpc3BsYXkuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYyBiL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworaW5kZXggYzNjZjRmOC4uZWI1NGI1OSAxMDA2NDQKKy0tLSBhL3NyYy9kcm1tb2RlX2Rpc3BsYXkuYworKysrIGIvc3JjL2RybW1vZGVfZGlzcGxheS5jCitAQCAtNzc3LDcgKzc3Nyw3IEBAIGRybW1vZGVfb3V0cHV0X2RwbXMoeGY4Nk91dHB1dFB0ciBvdXRwdXQsIGludCBtb2RlKQorIAorIAlmb3IgKGkgPSAwOyBpIDwga291dHB1dC0+Y291bnRfcHJvcHM7IGkrKykgeworIAkJcHJvcHMgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtbW9kZS0+ZmQsIGtvdXRwdXQtPnByb3BzW2ldKTsKKy0JCWlmIChwcm9wcyAmJiAocHJvcHMtPmZsYWdzICYmIERSTV9NT0RFX1BST1BfRU5VTSkpIHsKKysJCWlmIChwcm9wcyAmJiAocHJvcHMtPmZsYWdzICYgRFJNX01PREVfUFJPUF9FTlVNKSkgeworIAkJCWlmICghc3RyY21wKHByb3BzLT5uYW1lLCAiRFBNUyIpKSB7CisgCQkJCW1vZGVfaWQgPSBrb3V0cHV0LT5wcm9wc1tpXTsKKyAJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wcyk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBfMC40LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwXzAuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjgyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwXzAuNC4zLmJiCkBAIC0wLDAgKzEsNDMgQEAKK3JlcXVpcmUgeG9yZy1kcml2ZXItdmlkZW8uaW5jCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVGV4YXMgSW5zdHJ1bWVudHMgT01BUCBmcmFtZWJ1ZmZlciBkcml2ZXIiCisKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gVEkgT01BUCBpbnRlZ3JhdGVkIGdyYXBoaWNzIGNoaXBzZXRzIGRyaXZlciIKKworREVTQ1JJUFRJT04gPSAiT3Blbi1zb3VyY2UgWC5vcmcgZ3JhcGhpY3MgZHJpdmVyIGZvciBUSSBPTUFQIGdyYXBoaWNzIFwKK0N1cnJlbnRseSByZWxpZXMgb24gYSBjbG9zZWQtc291cmNlIHN1Ym1vZHVsZSBmb3IgRVhBIGFjY2VsZXJhdGlvbiBvbiBcCit0aGUgZm9sbG93aW5nIGNoaXBzZXRzOiBcCisgICsgT01BUDM0MzAgXAorICArIE9NQVAzNjMwIFwKKyAgKyBPTUFQNDQzMCBcCisgICsgT01BUDQ0NjAgXAorICArIE9NQVA1NDMwIFwKKyAgKyBPTUFQNTQzMiBcCitcCitOT1RFOiB0aGlzIGRyaXZlciBpcyB3b3JrIGluIHByb2dyZXNzLi4gIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHRyeSBcCithbmQgdXNlIGl0IHlldC4gIFRoZSBBUEkvQUJJIGJldHdlZW4gZHJpdmVyIGFuZCBrZXJuZWwsIGFuZCBkcml2ZXIgYW5kIFwKK2FjY2VsZXJhdGlvbiBzdWJtb2R1bGVzIGlzIG5vdCBzdGFibGUgeWV0LiAgVGhpcyBkcml2ZXIgcmVxdWlyZXMgdGhlIFwKK29tYXBkcm0ga2VybmVsIGRyaXZlciB3LyBHRU0gc3VwcG9ydC4gXAorIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEwY2U1ZGUzYjExMTMxNWVhNjUyYTVmNzRlYzBjNjAyIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgbGliZHJtIHhmODZkcmlwcm90byIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZHJtbW9kZV9vdXRwdXRfZHBtcy1SZXBsYWNlLWxvZ2ljYWwtd2l0aC1iaXR3aXNlLW9wZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImJlMzVkYWY2ZmE0Yjc1MDkyY2M0YTg5NzhjNDM3YmM1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImRiMWUwZTY5ZmQ0YzRjOGZkY2E1ZWYyY2IwNDQ3YmNjZDc1MThhNzE4NDk1ODc2YTY5MDRiZWY1N2IzOTk4NmQiCisKK0NGTEFHUyArPSAiIC1JJHtTVEFHSU5HX0lOQ0RJUn0veG9yZyAiCisKKyMgVXNlIG92ZXJsYXkgMiBvbiBvbWFwMyB0byBlbmFibGUgb3RoZXIgYXBwcyB0byB1c2Ugb3ZlcmxheSAxIChlLmcuIGRtYWkgb3Igb21hcGZicGxheSkKK2RvX2NvbXBpbGVfcHJlcGVuZF9hcm12N2EgKCkgeworICAgICAgICBzZWQgLWkgLWUgczpmYjE6ZmIyOmcgJHtTfS9zcmMvb21hcF94di5jCit9CisKK3B5dGhvbiAoKSB7CisgICAgaWYgbm90IGJiLnV0aWxzLmNvbnRhaW5zICgnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsIFRydWUsIEZhbHNlLCBkKToKKyAgICAgICAgcmFpc2UgYmIucGFyc2UuU2tpcFBhY2thZ2UoIidvcGVuZ2wnIG5vdCBpbiBESVNUUk9fRkVBVFVSRVMiKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUHJldmVudHMtb21hcGZiLWZyb20tZnJvbS1jcmFzaGluZy13aGVuLXBpeGVsY2xvY2stby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNmMTZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDEtUHJldmVudHMtb21hcGZiLWZyb20tZnJvbS1jcmFzaGluZy13aGVuLXBpeGVsY2xvY2stby5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGcm9tIDI4YzAwNmM5NGU1N2VhNzFkZjExZWM0ZmZmNzlkN2ZmY2ZjNDg2MGYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGYXIgTWNLb24gPEZhck1jS29uQGJ1Z2xhYnMubmV0PgorRGF0ZTogVHVlLCAzIE1heSAyMDExIDIwOjU5OjA0ICswMzAwCitTdWJqZWN0OiBbUEFUQ0hdIFByZXZlbnRzIG9tYXBmYiBmcm9tIGZyb20gY3Jhc2hpbmcgd2hlbiBwaXhlbGNsb2NrIG9mIDAgaXMKKyBzZW50IHRvIGl0LgorCitEdWUgdG8gYSBMaW51eCBkZXNpZ24gYnVnIGl0IGlzIGVhc3kgdG8gZ2V0IGEgcGl4ZWxjbG9jayBzZXQgdG8gemVybword2hlbiBjaGFuZ2luZyBkaXNwbGF5cyBhdCBydW50aW1lLgorLS0tCisgc3JjL29tYXBmYi1vdXRwdXQuYyB8IDkgKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9vbWFwZmItb3V0cHV0LmMgYi9zcmMvb21hcGZiLW91dHB1dC5jCitpbmRleCBmOGI0ZGIzLi40ZDU5MjY1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1vdXRwdXQuYworKysrIGIvc3JjL29tYXBmYi1vdXRwdXQuYworQEAgLTEyNSw4ICsxMjUsMTMgQEAgT01BUEZCT3V0cHV0R2V0TW9kZXMoeGY4Nk91dHB1dFB0ciBvdXRwdXQpCisgCS8qIE9ubHkgcG9wdWxhdGUgdGhlIG5hdGl2ZSAoY3VycmVudCkgbW9kZSAqLworIAltb2RlID0gY2FsbG9jKDEsIHNpemVvZihEaXNwbGF5TW9kZVJlYykpOworIAltb2RlLT50eXBlICAgICAgfD0gTV9UX1BSRUZFUlJFRDsKKy0JbW9kZS0+Q2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKy0JbW9kZS0+U3ludGhDbG9jayA9IFBJQ09TMktIWihvZmItPnN0YXRlX2luZm8ucGl4Y2xvY2spOworKwlpZiAob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrID09IDApIHsKKysJCW1vZGUtPkNsb2NrID0gMDsKKysJCW1vZGUtPlN5bnRoQ2xvY2sgPSAwOworKwl9IGVsc2UgeworKwkJbW9kZS0+Q2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJCW1vZGUtPlN5bnRoQ2xvY2sgPSBQSUNPUzJLSFoob2ZiLT5zdGF0ZV9pbmZvLnBpeGNsb2NrKTsKKysJfQorIAltb2RlLT5IRGlzcGxheSAgID0gb2ZiLT5zdGF0ZV9pbmZvLnhyZXM7CisgCW1vZGUtPkhTeW5jU3RhcnQgPSBtb2RlLT5IRGlzcGxheQorIAkgICAgICAgICAgICAgICAgICArIG9mYi0+c3RhdGVfaW5mby5yaWdodF9tYXJnaW47CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAxLVJldmVydC1TZXQtYS1sYXJnZS1DUlRDLXVwcGVyLWxpbWl0LXRvLW5vdC1wcnVuZS1sYXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1SZXZlcnQtU2V0LWEtbGFyZ2UtQ1JUQy11cHBlci1saW1pdC10by1ub3QtcHJ1bmUtbGFyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjAxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMS1SZXZlcnQtU2V0LWEtbGFyZ2UtQ1JUQy11cHBlci1saW1pdC10by1ub3QtcHJ1bmUtbGFyLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gOGZiN2QwZjk5ZDRhZmJiNTc0YjMwY2I0ZjFlNjZhOGY4OWQ5NGFkNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEyOjA0OjM2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMS82XSBSZXZlcnQgIlNldCBhIGxhcmdlIENSVEMgdXBwZXIgbGltaXQgdG8gbm90IHBydW5lIGxhcmdlcgorIHJlc29sdXRpb25zIgorCitQaWN0dXJlIGlzIGdhcmJsZWQgYWZ0ZXIgc3dpdGNoaW5nIHJlc29sdXRpb25zLCBzbyByZXZlcnQgaXQuCitWaXJ0dWFsIHNpemUgdG9vIGJpZywgcmV2ZXJ0IHRoZSBjb21taXQgOWM0ZDc1OTJkY2I3ZGMyMGE0OGE2Zjk0MWQ5ZDk0YmQ3M2QzNDE1My4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItY3J0Yy5jIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWNydGMuYyBiL3NyYy9vbWFwZmItY3J0Yy5jCitpbmRleCA5YWFhNTJmLi5jYmVmZjM1IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1jcnRjLmMKKysrKyBiL3NyYy9vbWFwZmItY3J0Yy5jCitAQCAtMTkwLDEzICsxOTAsMTMgQEAgT01BUEZCQ1JUQ0luaXQoU2NybkluZm9QdHIgcFNjcm4pCisgCSAqIEluIHByYWN0aXNlLCB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBiZSBzdXBwb3J0ZWQuCisgCSAqIChubyB3YXkgdG8gc2V0dXAgdGhlIG92ZXJsYXkgb2Zmc2V0L2Jhc2UgYWRkcmVzcykKKyAJICovCistCSAvKiBGSVhNRTogZmlndXJlIG91dCB3aGF0IG1ha2VzIHNlbnNlIGhlcmUuIEEga25vd24gbWF4IHJlc29sdXRpb24/CistCSAgKiBmcmFtZWJ1ZmZlciBzaXplPworLQkgICovCisgCXhmODZDcnRjU2V0U2l6ZVJhbmdlKHBTY3JuLAorLQkgICAgICAgICAgICAgICAgICAgICA4LCA4LCAyMDQ4LCAyMDQ4KTsKKysJICAgICAgICAgICAgICAgICAgICAgOCwgOCwKKysJICAgICAgICAgICAgICAgICAgICAgb2ZiLT5zdGF0ZV9pbmZvLnhyZXNfdmlydHVhbCwKKysJICAgICAgICAgICAgICAgICAgICAgb2ZiLT5zdGF0ZV9pbmZvLnlyZXNfdmlydHVhbCk7CisgCisgCW9mYi0+Y3J0YyA9IHhmODZDcnRjQ3JlYXRlKHBTY3JuLCAmT01BUEZCQ3J0Y0Z1bmNzKTsKKysKKyB9CisgCisgCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMi1SZXZlcnQtU2V0LXZpcnR1YWwtc2l6ZS13aGVuLWNvbmZpZ3VyaW5nLWZyYW1lYnVmZmVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4M2E5ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwMi1SZXZlcnQtU2V0LXZpcnR1YWwtc2l6ZS13aGVuLWNvbmZpZ3VyaW5nLWZyYW1lYnVmZmVyLnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0Zyb20gODU1YzMzM2FjMGQxNjM1MGY4OTVmMWQxYjkzOTFlOWNiYjBiNmRiNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjI3OjIwICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggMi82XSBSZXZlcnQgIlNldCB2aXJ0dWFsIHNpemUgd2hlbiBjb25maWd1cmluZyBmcmFtZWJ1ZmZlciIKKworVmlydHVhbCBzaXplIHRvbyBiaWcsIHNvIHJldmVydCBpdC4KKworVGhpcyByZXZlcnRzIGNvbW1pdCAyNjUzZWYwNzg4M2ZiZDFhNWU3MDI1ZjkzMDBjZjg5Yjc5YmE0MjlhLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL29tYXBmYi1jcnRjLmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWNydGMuYyBiL3NyYy9vbWFwZmItY3J0Yy5jCitpbmRleCBjYmVmZjM1Li45NjU1ZGIyIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi1jcnRjLmMKKysrKyBiL3NyYy9vbWFwZmItY3J0Yy5jCitAQCAtOTgsOCArOTgsNiBAQCBPTUFQRkJDcnRjQ29tbWl0Q2hhbmdlTW9kZSAoeGY4NkNydGNQdHIgY3J0YykKKyAJdiA9IG9mYi0+c3RhdGVfaW5mbzsKKyAJdi54cmVzID0gbW9kZS0+SERpc3BsYXk7CisgCXYueXJlcyA9IG1vZGUtPlZEaXNwbGF5OworLQl2LnhyZXNfdmlydHVhbCA9IGNydGMtPnNjcm4tPnZpcnR1YWxYOworLQl2LnlyZXNfdmlydHVhbCA9IGNydGMtPnNjcm4tPnZpcnR1YWxZOworIAl2LmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOworIAl2LnBpeGNsb2NrID0gS0haMlBJQ09TKG1vZGUtPkNsb2NrID8gbW9kZS0+Q2xvY2sgOiA1NjAwMCk7CisgCXYubGVmdF9tYXJnaW4gPSBtb2RlLT5IVG90YWwgLSBtb2RlLT5IU3luY0VuZDsKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDMtZm9yY2UtcGxhaW4tbW9kZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAzLWZvcmNlLXBsYWluLW1vZGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlYTdjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDAzLWZvcmNlLXBsYWluLW1vZGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAyNTJmNDRjMDcyZDM0NDdhMzIxMjdmYzlhZmU1ZDBkNDBmM2M1MTBlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IFdlZCwgMjYgSmFuIDIwMTEgMTM6MjA6MjAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzZdIGZvcmNlICdwbGFpbicgbW9kZQorCitUaGUgbmV3IERTUyBtb2RlIGJyZWFrcyBYViwgc28gZm9yY2UgcGxhaW4gbW9kZQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItZHJpdmVyLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggMDE4ZTA0MC4uNDhhYTA5YyAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC0zMjYsNyArMzI2LDcgQEAgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKQorIAlPTUFQRkJQcm9iZUNvbnRyb2xsZXIob2ZiLT5jdHJsX25hbWUpOworIAorIAkvKiBEbyB3ZSBoYXZlIHRoZSBEU1Mga2VybmVsIEFQST8gKi8KKy0JaWYgKHN0YXQoU1lTRlNfRFNTX0RJUiwgJnN0KSA9PSAwKSB7CisrCWlmICgwKSB7IC8vc3RhdChTWVNGU19EU1NfRElSLCAmc3QpID09IDApIHsKKyAJCW9mYi0+ZHNzID0gVFJVRTsKKyAJfSBlbHNlIHsKKyAJCW9mYi0+ZHNzID0gRkFMU0U7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA0LWJsYWNrbGlzdC10di1vdXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNC1ibGFja2xpc3QtdHYtb3V0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYWM5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNC1ibGFja2xpc3QtdHYtb3V0LnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gY2ZhNDZiNjdmNTkxMTVmNmQ4ZWY5NDE0YWY2MDM4MDc0OWZmM2ViMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtvZW4gS29vaSA8a29lbkBkb21pbmlvbi50aHJ1aGVyZS5uZXQ+CitEYXRlOiBXZWQsIDI2IEphbiAyMDExIDEzOjIxOjEyICswMTAwCitTdWJqZWN0OiBbUEFUQ0ggNC82XSBibGFja2xpc3QgdHYgb3V0CisKK1RoZSB0di1vdXQgZ2V0cyBhZGRlZCBsYXN0IGFuZCB0aGUgZHJpdmVyIHRyaWVzIHRvIHJlY29uZmlndXJlIGR2aSB0byBUViByZXNvbHV0aW9ucywgd2hpY2ggZmFpbHMuIHNvIGJsYWNrbGlzdCBpdAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9vbWFwZmItb3V0cHV0LWRzcy5jIHwgNCArKysrCisgMSBmaWxlIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1vdXRwdXQtZHNzLmMgYi9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworaW5kZXggNmNjNTJkZS4uODNjYjcxMSAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItb3V0cHV0LWRzcy5jCisrKysgYi9zcmMvb21hcGZiLW91dHB1dC1kc3MuYworQEAgLTIwNSw2ICsyMDUsMTAgQEAgT01BUEZCRFNTT3V0cHV0RGV0ZWN0ICh4Zjg2T3V0cHV0UHRyIG91dHB1dCkKKyAJaWYob2ZiLT50aW1pbmdzW2lkeF1bMF0gPT0gJ1wwJykKKyAJCXJldHVybiBYRjg2T3V0cHV0U3RhdHVzRGlzY29ubmVjdGVkOworIAorKwkvLyBIYWNrIHRvIGRpc2FibGUgdGhlIHR2IG91dAorKwlpZiAoc3RybmNtcChvdXRwdXQtPm5hbWUsICJ0diIsIDIpID09IDApCisrCQlyZXR1cm4gWEY4Nk91dHB1dFN0YXR1c0Rpc2Nvbm5lY3RlZDsKKysKKyAJcmV0dXJuIFhGODZPdXRwdXRTdGF0dXNDb25uZWN0ZWQ7CisgfQorIAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNS1BdHRlbXB0LXRvLWZpeC1WUkZCLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDUtQXR0ZW1wdC10by1maXgtVlJGQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2IyODQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiLzAwMDUtQXR0ZW1wdC10by1maXgtVlJGQi5wYXRjaApAQCAtMCwwICsxLDMyNSBAQAorRnJvbSA4YjFmNjk3YTYwZTM1YWI4MmZmZmRhYmZhZWZkYjQ1ZTlhOWRmMzc5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRWluby1WaWxsZSBUYWx2YWxhIDx0YWx2YWxhQHN0YW5mb3JkLmVkdT4KK0RhdGU6IFR1ZSwgMjMgQXVnIDIwMTEgMTg6Mzc6MDEgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCA1LzZdIEF0dGVtcHQgdG8gZml4IFZSRkIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2h0dHA6Ly9kb21pbmlvbi50aHJ1aGVyZS5uZXQvZ2l0L2NnaXQuY2dpL3hmODYtdmlkZW8tb21hcGZiL2NvbW1pdC8/aD1rb2VuL2ZpeHVwcyZpZD02ODMzZmM5Zjc5NTI2NWU0OTQzZDI0ODEwM2ZiYWYzNDYzYjUxNWQ2CisKK1NpZ25lZC1vZmYtYnk6IFNlYmFzdGlhbiBLcnp5c3prb3dpYWsgPGRvc0Bkb3Nvd2lza28ubmV0PgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jIHwgIDQgKy0tCisgc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIHwgIDIgKy0KKyBzcmMvb21hcGZiLWRyaXZlci5jICAgICAgICAgICAgfCAyOCArKysrKysrKysrKysrLS0tCisgc3JjL29tYXBmYi14di1ibGl6emFyZC5jICAgICAgIHwgIDEgKworIHNyYy9vbWFwZmIteHYtZ2VuZXJpYy5jICAgICAgICB8IDcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQorIHNyYy9vbWFwZmIteHYuYyAgICAgICAgICAgICAgICB8ICAzICsrCisgNiBmaWxlcyBjaGFuZ2VkLCA4OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworaW5kZXggZGNlZmE5Yi4uZDQzNDI3ZCAxMDA2NDQKKy0tLSBhL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuYworKysrIGIvc3JjL2ltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5jCitAQCAtMzgsMTMgKzM4LDEzIEBACisgI2luY2x1ZGUgImltYWdlLWZvcm1hdC1jb252ZXJzaW9ucy5oIgorIAorIC8qIEJhc2ljIGxpbmUtYmFzZWQgY29weSBmb3IgcGFja2VkIGZvcm1hdHMgKi8KKy12b2lkIHBhY2tlZF9saW5lX2NvcHkoaW50IHcsIGludCBoLCBpbnQgc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpCisrdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHNyY19zdHJpZGUsIGludCBkc3Rfc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpCisgeworIAlpbnQgaTsKKyAJaW50IGxlbiA9IHcgKiAyOworIAlmb3IgKGkgPSAwOyBpIDwgaDsgaSsrKQorIAl7CistCQltZW1jcHkoZGVzdCArIGkgKiBsZW4sIHNyYyArIGkgKiBzdHJpZGUsIGxlbik7CisrCQltZW1jcHkoZGVzdCArIGkgKiBkc3Rfc3RyaWRlLCBzcmMgKyBpICogc3JjX3N0cmlkZSwgbGVuKTsKKyAJfQorIH0KKyAKK2RpZmYgLS1naXQgYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmggYi9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKK2luZGV4IDU4NDg5NmEuLmJhN2NhZjIgMTAwNjQ0CistLS0gYS9zcmMvaW1hZ2UtZm9ybWF0LWNvbnZlcnNpb25zLmgKKysrKyBiL3NyYy9pbWFnZS1mb3JtYXQtY29udmVyc2lvbnMuaAorQEAgLTI3LDcgKzI3LDcgQEAKKyAjaW5jbHVkZSA8c3RkaW50Lmg+CisgCisgLyogQmFzaWMgbGluZS1iYXNlZCBjb3B5IGZvciBwYWNrZWQgZm9ybWF0cyAqLworLXZvaWQgcGFja2VkX2xpbmVfY29weShpbnQgdywgaW50IGgsIGludCBzdHJpZGUsIHVpbnQ4X3QgKnNyYywgdWludDhfdCAqZGVzdCk7Cisrdm9pZCBwYWNrZWRfbGluZV9jb3B5KGludCB3LCBpbnQgaCwgaW50IHNyY19zdHJpZGUsIGludCBkc3Rfc3RyaWRlLCB1aW50OF90ICpzcmMsIHVpbnQ4X3QgKmRlc3QpOworIAorIC8qIEJhc2ljIEMgaW1wbGVtZW50YXRpb24gb2YgWVYxMi9JNDIwIHRvIFVZVlkgY29udmVyc2lvbiAqLworIHZvaWQgdXYxMl90b191eXZ5KGludCB3LCBpbnQgaCwgaW50IHlfcGl0Y2gsIGludCB1dl9waXRjaCwgdWludDhfdCAqeV9wLCB1aW50OF90ICp1X3AsIHVpbnQ4X3QgKnZfcCwgdWludDhfdCAqZGVzdCk7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi1kcml2ZXIuYyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK2luZGV4IDQ4YWEwOWMuLjA3OTg5ZjUgMTAwNjQ0CistLS0gYS9zcmMvb21hcGZiLWRyaXZlci5jCisrKysgYi9zcmMvb21hcGZiLWRyaXZlci5jCitAQCAtNjYsNiArNjYsNyBAQAorICNkZWZpbmUgT01BUEZCX1ZFUlNJT04gMTAwMAorICNkZWZpbmUgT01BUEZCX0RSSVZFUl9OQU1FICJPTUFQRkIiCisgI2RlZmluZSBPTUFQRkJfTkFNRSAib21hcGZiIgorKyNkZWZpbmUgRU5GT1JDRV9NT0RFUworIAorIHN0YXRpYyBCb29sIE9NQVBGQlByb2JlKERyaXZlclB0ciBkcnYsIGludCBmbGFncyk7Cisgc3RhdGljIEJvb2wgT01BUEZCUHJlSW5pdChTY3JuSW5mb1B0ciBwU2NybiwgaW50IGZsYWdzKTsKK0BAIC0xMDUsMTEgKzEwNiwxMyBAQCBzdGF0aWMgU3ltVGFiUmVjIE9NQVBGQkNoaXBzZXRzW10gPSB7CisgdHlwZWRlZiBlbnVtIHsKKyAJT1BUSU9OX0FDQ0VMTUVUSE9ELAorIAlPUFRJT05fRkIsCisrCU9QVElPTl9ST1RBVEUsCisgfSBGQkRldk9wdHM7CisgCisgc3RhdGljIGNvbnN0IE9wdGlvbkluZm9SZWMgT01BUEZCT3B0aW9uc1tdID0geworIAl7IE9QVElPTl9BQ0NFTE1FVEhPRCwJIkFjY2VsTWV0aG9kIiwJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKyAJeyBPUFRJT05fRkIsCQkiZmIiLAkJT1BUVl9TVFJJTkcsCXswfSwJRkFMU0UgfSwKKysJeyBPUFRJT05fUk9UQVRFLAkicm90YXRpb24iLAlPUFRWX1NUUklORywJezB9LAlGQUxTRSB9LAorIAl7IC0xLAkJCU5VTEwsCQlPUFRWX05PTkUsCXswfSwJRkFMU0UgfQorIH07CisgCitAQCAtMjg2LDYgKzI4OSw3IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyB7CisgCU9NQVBGQlB0ciBvZmI7CisgCUVudGl0eUluZm9QdHIgcEVudDsKKysJY2hhciAqcm90YXRlOworIAlyZ2IgemVyb3MgPSB7IDAsIDAsIDAgfTsKKyAJc3RydWN0IHN0YXQgc3Q7CisgCitAQCAtMzc5LDYgKzM4Myw4IEBAIE9NQVBGQlByZUluaXQoU2NybkluZm9QdHIgcFNjcm4sIGludCBmbGFncykKKyAJcFNjcm4tPnByb2dDbG9jayA9IFRSVUU7CisgCXBTY3JuLT5jaGlwc2V0ICAgPSAib21hcGZiIjsKKyAJCisrCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9JTkZPLCAiUm90YXRlIHRlc3QgdmVyc2lvbiAwLjAyXG4iKTsKKysJCisgCS8qIFN0YXJ0IHdpdGggY29uZmlndXJlZCB2aXJ0dWFsIHNpemUgKi8KKyAJcFNjcm4tPnZpcnR1YWxYID0gcFNjcm4tPmRpc3BsYXktPnZpcnR1YWxYOworIAlwU2Nybi0+dmlydHVhbFkgPSBwU2Nybi0+ZGlzcGxheS0+dmlydHVhbFk7CitAQCAtNDk2LDEyICs1MDIsMjEgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAlvZmItPkNsb3NlU2NyZWVuID0gcFNjcmVlbi0+Q2xvc2VTY3JlZW47CisgCXBTY3JlZW4tPkNsb3NlU2NyZWVuID0gT01BUEZCQ2xvc2VTY3JlZW47CisgCisrCS8qIEVuZm9yY2UgdGhlIGRlZmF1bHQgbW9kZSAodGhpcyBpcyBzaWxseSBJIGd1ZXNzKSAqLworKyNpZmRlZiBFTkZPUkNFX01PREVTCisrCS8veGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0lORk8sICJFbmZvcmNpbmcgbW9kZXNcbiIpOworKwkvL3NldF9tb2RlKG9mYiwgJm9mYi0+ZGVmYXVsdF9tb2RlKTsKKysJLy9wU2Nybi0+ZGlzcGxheVdpZHRoID0gb2ZiLT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoIC8KKysJLy8gIChvZmItPnN0YXRlX2luZm8uYml0c19wZXJfcGl4ZWw+PjMpOyAvL29mYi0+c3RhdGVfaW5mby54cmVzOworKyNlbmRpZgorKworIAkvKiBNYXAgb3VyIGZyYW1lYnVmZmVyIG1lbW9yeSAqLworKwlvZmItPm1lbV9pbmZvLnNpemUgPSBvZmItPmZpeGVkX2luZm8ubGluZV9sZW5ndGggKiBvZmItPnN0YXRlX2luZm8ueXJlczsKKyAJb2ZiLT5mYiA9IG1tYXAgKE5VTEwsIG9mYi0+bWVtX2luZm8uc2l6ZSwKKyAJICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgCSAgICAgICAgICAgICAgICBvZmItPmZkLCAwKTsKKy0JaWYgKG9mYi0+ZmIgPT0gTlVMTCkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJNYXBwaW5nIGZyYW1lYnVmZmVyIG1lbW9yeSBmYWlsZWRcbiIpOworKwlpZiAob2ZiLT5mYiA9PSBNQVBfRkFJTEVEKSB7CisrCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTU3OCw4ICs1OTMsMTMgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAl9IGVsc2UgaWYgKCFvZmItPmRzcykgeworIAorIAkJb2ZiLT5wbGFuZV9pbmZvLmVuYWJsZWQgPSAxOworLQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworLQkJb2ZiLT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCWlmIChvZmItPnN0YXRlX2luZm8ucm90YXRlID09IDAgfHwgb2ZiLT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAyKSB7CisrCQkJb2ZiLT5wbGFuZV9pbmZvLm91dF93aWR0aCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQl9IGVsc2UgeworKwkJCW9mYi0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueXJlczsKKysJCQlvZmItPnBsYW5lX2luZm8ub3V0X2hlaWdodCA9IG9mYi0+c3RhdGVfaW5mby54cmVzOworKwkJfQorIAorIAkJaWYgKGlvY3RsIChvZmItPmZkLCBPTUFQRkJfU0VUVVBfUExBTkUsICZvZmItPnBsYW5lX2luZm8pKSB7CisgCQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di1ibGl6emFyZC5jIGIvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCitpbmRleCA0MDZmZmM2Li5iNzFkMmFhIDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCisrKysgYi9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKK0BAIC0yMjAsNiArMjIwLDcgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VCbGl6emFyZCAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcGFja2VkX2xpbmVfY29weShzcmNfdyAmIH4zLAorIAkJCSAgICAgICAgICAgICAgICAgc3JjX2ggJiB+MywKKyAJCQkgICAgICAgICAgICAgICAgICgoc3JjX3cgKyAxKSAmIH4xKSAqIDIsCisrCQkJCQkgb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoLAorIAkJCSAgICAgICAgICAgICAgICAgKHVpbnQ4X3QqKWJ1ZiwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilvZmItPnBvcnQtPmZiKTsKKyAJCQlicmVhazsKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYyBiL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCitpbmRleCBlNmY4OWZlLi5iMzNmMzQ0IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di1nZW5lcmljLmMKKysrKyBiL3NyYy9vbWFwZmIteHYtZ2VuZXJpYy5jCitAQCAtNjIsNyArNjIsNyBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyB7CisgCU9NQVBGQlB0ciBvZmIgPSBPTUFQRkIocFNjcm4pOworIAorLQkvKiBUaGUgbWVtb3J5IHNpemUgaXMgYWxyZWFkeSBzZXQgaW4gT01BUEZCWFZRdWVyeUltYWdlQXR0cmlidXRlcyAqLworKwkvKiBUaGUgbWVtb3J5IHNpemUgaXMgYWxyZWFkeSBzZXQgYmVmb3JlIHdlIGdldCBoZXJlICovCisgCWlmIChpb2N0bChvZmItPnBvcnQtPmZkLCBPTUFQRkJfU0VUVVBfTUVNLCAmb2ZiLT5wb3J0LT5tZW1faW5mbykgIT0gMCkgeworIAkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLAorIAkJICAgICAgICAgICAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIHBsYW5lIG1lbW9yeVxuIik7CitAQCAtNzMsMTkgKzczLDIwIEBAIGludCBPTUFQWFZBbGxvY1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIAlvZmItPnBvcnQtPmZiID0gbW1hcCAoTlVMTCwgb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplLAorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+cG9ydC0+ZmQsIDApOworLQlpZiAob2ZiLT5wb3J0LT5mYiA9PSBOVUxMKSB7CisrCWlmIChvZmItPnBvcnQtPmZiID09IE1BUF9GQUlMRUQpIHsKKyAJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCSAgICAgICAgICAgIk1hcHBpbmcgdmlkZW8gbWVtb3J5IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorIAorIAkvKiBVcGRhdGUgdGhlIHN0YXRlIGluZm8gKi8KKysJLyogTGV0J3Mgbm90IC0gaXQncyBiYWQKKyAJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPR0VUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKyAJeworIAkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IFJlYWRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisgCQlyZXR1cm4gWHZCYWRBbGxvYzsKKyAJfQorLQorKwkqLworIAlyZXR1cm4gU3VjY2VzczsKKyB9CisgCitAQCAtOTMsNiArOTQsNyBAQCBpbnQgT01BUFhWQWxsb2NQbGFuZShTY3JuSW5mb1B0ciBwU2NybikKKyBpbnQgT01BUFhWU2V0dXBWaWRlb1BsYW5lKFNjcm5JbmZvUHRyIHBTY3JuKQorIHsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CisrCWludCByZXQ7CisgCisgCWlmIChpb2N0bCAob2ZiLT5wb3J0LT5mZCwgRkJJT1BVVF9WU0NSRUVOSU5GTywgJm9mYi0+cG9ydC0+c3RhdGVfaW5mbykpCisgCXsKK0BAIC0xMDQsNiArMTA2LDMxIEBAIGludCBPTUFQWFZTZXR1cFZpZGVvUGxhbmUoU2NybkluZm9QdHIgcFNjcm4pCisgCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKyAJCXJldHVybiBYdkJhZEFsbG9jOworIAl9CisrCS8qIENoYW5naW5nIHJvdGF0aW9uL25vbnN0ZCBmbGFncyBjYW4gY2hhbmdlIHRoZSBmaXhlZCBpbmZvISAqLworKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfRlNDUkVFTklORk8sICZvZmItPnBvcnQtPmZpeGVkX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisrCS8qIENvcnJlY3QgZml4ZWQgaW5mbyByZXF1aXJlcyByZWNhbGN1bGF0aW9uIG9mIG5lZWRlZCBtZW1vcnkgKi8KKysJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplID0gb2ZiLT5wb3J0LT5maXhlZF9pbmZvLmxpbmVfbGVuZ3RoICogb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCisrCS8qIEFsbG9jYXRlIGJ1ZmZlciBtZW1vcnkgKi8KKysJcmV0ID0gT01BUFhWQWxsb2NQbGFuZShwU2Nybik7CisrCWlmIChyZXQgIT0gU3VjY2VzcykKKysJCXJldHVybiByZXQ7CisrCisrCS8qIFdvcmthcm91bmQgZm9yIHJlc2V0IG9mIG1vZGUgYWZ0ZXIgbWVtb3J5IGFsbG8gKi8KKysJaWYgKGlvY3RsIChvZmItPnBvcnQtPmZkLCBGQklPUFVUX1ZTQ1JFRU5JTkZPLCAmb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvKSkKKysJeworKwkJeGY4Nk1zZyhYX0VSUk9SLCAiJXM6IHNldHRpbmcgc3RhdGUgaW5mbyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisrCQlyZXR1cm4gWHZCYWRBbGxvYzsKKysJfQorKwlpZiAoaW9jdGwgKG9mYi0+cG9ydC0+ZmQsIEZCSU9HRVRfVlNDUkVFTklORk8sICZvZmItPnBvcnQtPnN0YXRlX2luZm8pKQorKwl7CisrCQl4Zjg2TXNnKFhfRVJST1IsICIlczogUmVhZGluZyBzdGF0ZSBpbmZvIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKKysJCXJldHVybiBYdkJhZEFsbG9jOworKwl9CisgCisgCWlmKGlvY3RsKG9mYi0+cG9ydC0+ZmQsIE9NQVBGQl9TRVRVUF9QTEFORSwKKyAJICAgJm9mYi0+cG9ydC0+cGxhbmVfaW5mbykgIT0gMCkgeworQEAgLTEyNCw2ICsxNTEsOCBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhd2FibGVQdHIgcERyYXcpCisgeworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKKysJc2hvcnQgZHJ3X3RlbXA7CisrCXNob3J0IHJvdF94cmVzLCByb3RfeXJlczsKKyAKKyAJaWYgKCFvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZAorIAkgfHwgb2ZiLT5wb3J0LT51cGRhdGVfd2luZG93LnggIT0gc3JjX3gKK0BAIC0xNjMsMTMgKzE5Miw2IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcmV0dXJuIFN1Y2Nlc3M7CisgCQl9CisgCistCQkvKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBwbGFuZSBydW5uaW5nLCBlbmFibGUgaXQgKi8KKy0JCWlmICghb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLmVuYWJsZWQpIHsKKy0JCQlyZXQgPSBPTUFQWFZBbGxvY1BsYW5lKHBTY3JuKTsKKy0JCQlpZiAocmV0ICE9IFN1Y2Nlc3MpCistCQkJCXJldHVybiByZXQ7CistCQl9CistCisgCQkvKiBTZXQgdXAgdGhlIHN0YXRlIGluZm8sIHhyZXMgYW5kIHlyZXMgd2lsbCBiZSB1c2VkIGZvcgorIAkJICogc2NhbGluZyB0byB0aGUgdmFsdWVzIGluIHRoZSBwbGFuZSBpbmZvIHN0cnVjdAorIAkJICovCitAQCAtMTc5LDEyICsyMDEsMzEgQEAgaW50IE9NQVBGQlhWUHV0SW1hZ2VHZW5lcmljIChTY3JuSW5mb1B0ciBwU2NybiwKKyAJCW9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzX3ZpcnR1YWwgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnhvZmZzZXQgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlvZmZzZXQgPSAwOworLQkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9IDA7CisrCQkvL29mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLmdyYXlzY2FsZSA9IDA7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uYWN0aXZhdGUgPSBGQl9BQ1RJVkFURV9OT1c7CisgCQlvZmItPnBvcnQtPnN0YXRlX2luZm8uYml0c19wZXJfcGl4ZWwgPSAwOworIAkJb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLm5vbnN0ZCA9IHh2X3RvX29tYXBmYl9mb3JtYXQoaW1hZ2UpOworIAorKwkJLyogUGxhbmUgaW5mbyBkb2VzIG5vdCByb3RhdGUgd2l0aCBzdGF0ZV9pbmZvICovCisrCQlpZiAob2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnJvdGF0ZSA9PSAxIHx8CisrCQkgIG9mYi0+cG9ydC0+c3RhdGVfaW5mby5yb3RhdGUgPT0gMykgeworKwkJCWRyd190ZW1wID0gZHJ3X3g7CisrCQkJZHJ3X3ggPSBkcndfeTsKKysJCQlkcndfeSA9IGRyd190ZW1wOworKworKwkJCWRyd190ZW1wID0gZHJ3X3c7CisrCQkJZHJ3X3cgPSBkcndfaDsKKysJCQlkcndfaCA9IGRyd190ZW1wOworKworKwkJCXJvdF94cmVzID0gb2ZiLT5wb3J0LT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJcm90X3lyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueHJlczsKKysJCX0gZWxzZSB7CisrCQkJcm90X3hyZXMgPSBvZmItPnBvcnQtPnN0YXRlX2luZm8ueHJlczsKKysJCQlyb3RfeXJlcyA9IG9mYi0+cG9ydC0+c3RhdGVfaW5mby55cmVzOworKwkJfQorKworKworIAkJLyogU2V0IHVwIHRoZSB2aWRlbyBwbGFuZSBpbmZvICovCisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CisgCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3ggPSBkcndfeDsKK0BAIC0xOTMsMTMgKzIzNCwxMyBAQCBpbnQgT01BUEZCWFZQdXRJbWFnZUdlbmVyaWMgKFNjcm5JbmZvUHRyIHBTY3JuLAorIAkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSBkcndfaCAmIH4xNTsKKyAKKyAJCS8qIENhcCBvdXRwdXQgdG8gc2NyZWVuIHNpemUgKi8KKy0JCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID4gb2ZiLT5zdGF0ZV9pbmZvLnhyZXMpIHsKKysJCWlmIChvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID4gcm90X3hyZXMpIHsKKyAJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3ggPSAwOworLQkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfd2lkdGggPSBvZmItPnN0YXRlX2luZm8ueHJlczsKKysJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ub3V0X3dpZHRoID0gcm90X3hyZXM7CisgCQl9CistCQlpZiAob2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPiBvZmItPnN0YXRlX2luZm8ueXJlcykgeworKwkJaWYgKG9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID4gcm90X3lyZXMpIHsKKyAJCQlvZmItPnBvcnQtPnBsYW5lX2luZm8ucG9zX3kgPSAwOworLQkJCW9mYi0+cG9ydC0+cGxhbmVfaW5mby5vdXRfaGVpZ2h0ID0gb2ZiLT5zdGF0ZV9pbmZvLnlyZXM7CisrCQkJb2ZiLT5wb3J0LT5wbGFuZV9pbmZvLm91dF9oZWlnaHQgPSByb3RfeXJlczsKKyAJCX0KKyAKKyAJCXJldCA9IE9NQVBYVlNldHVwVmlkZW9QbGFuZShwU2Nybik7CitAQCAtMjIzLDYgKzI2NCw3IEBAIGludCBPTUFQRkJYVlB1dEltYWdlR2VuZXJpYyAoU2NybkluZm9QdHIgcFNjcm4sCisgCQkJcGFja2VkX2xpbmVfY29weShzcmNfdyAmIH4xNSwKKyAJCQkgICAgICAgICAgICAgICAgIHNyY19oICYgfjE1LAorIAkJCSAgICAgICAgICAgICAgICAgKChzcmNfdyArIDEpICYgfjEpICogMiwKKysJCQkgICAgICAgICAgICAgICAgIG9mYi0+cG9ydC0+Zml4ZWRfaW5mby5saW5lX2xlbmd0aCwKKyAJCQkgICAgICAgICAgICAgICAgICh1aW50OF90KilidWYsCisgCQkJICAgICAgICAgICAgICAgICAodWludDhfdCopb2ZiLT5wb3J0LT5mYik7CisgCQkJYnJlYWs7CitkaWZmIC0tZ2l0IGEvc3JjL29tYXBmYi14di5jIGIvc3JjL29tYXBmYi14di5jCitpbmRleCAxZGY2NTFlLi4wZmVlMmM2IDEwMDY0NAorLS0tIGEvc3JjL29tYXBmYi14di5jCisrKysgYi9zcmMvb21hcGZiLXh2LmMKK0BAIC0xNjksOCArMTY5LDExIEBAIHN0YXRpYyBpbnQgT01BUEZCWFZRdWVyeUltYWdlQXR0cmlidXRlcyAoU2NybkluZm9QdHIgcFNjcm4sCisgCWggPSAqaGVpZ2h0OworIAorIAl3ID0gKHcgKyAxKSAmIH4xOworKworKwkvKiBDYW4ndCBjYWxjdWxhdGUgdGhlc2UgaGVyZSAtIGRvbid0IGtub3cgbGluZSBsZW5ndGgKKyAJb2ZiLT5wb3J0LT5tZW1faW5mby5zaXplID0gdyA8PCAxOworIAlvZmItPnBvcnQtPm1lbV9pbmZvLnNpemUgKj0gaDsKKysJKi8KKyAKKyAJcmV0dXJuIHNpemU7CisgfQorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU2NzI5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA2LW9tYXBmYi1wb3J0LXRvLW5ldy14c2VydmVyLXZpZGVvLUFQSS5wYXRjaApAQCAtMCwwICsxLDI3MiBAQAorRnJvbSA4MDNlY2YyOTA5OTQ5ZTYxNTJmNGE4MWI2Y2JiOTJhNDQzMDY3OWFjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMyBOb3YgMjAxMiAwMDozMTowNiArMDEwMAorU3ViamVjdDogW1BBVENIIDYvNl0gb21hcGZiOiBwb3J0IHRvIG5ldyB4c2VydmVyIHZpZGVvIEFQSQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2NvbXBhdC1hcGkuaCAgICB8IDk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL29tYXBmYi1kcml2ZXIuYyB8IDQxICsrKysrKysrKysrKy0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxMTggaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb21wYXQtYXBpLmgKKworZGlmZiAtLWdpdCBhL3NyYy9jb21wYXQtYXBpLmggYi9zcmMvY29tcGF0LWFwaS5oCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjE1OTFiMQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvbXBhdC1hcGkuaAorQEAgLTAsMCArMSw5NiBAQAorKy8qCisrICogQ29weXJpZ2h0IDIwMTIgUmVkIEhhdCwgSW5jLgorKyAqCisrICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKysgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKysgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKysgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKysgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKyAqCisrICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKysgKiBTb2Z0d2FyZS4KKysgKgorKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisrICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisrICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKysgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKysgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisrICoKKysgKiBBdXRob3I6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisrICovCisrCisrLyogdGhpcyBmaWxlIHByb3ZpZGVzIEFQSSBjb21wYXQgYmV0d2VlbiBzZXJ2ZXIgcG9zdCAxLjEzIGFuZCBwcmUgaXQsCisrICAgaXQgc2hvdWxkIGJlIHJldXNlZCBpbnNpZGUgYXMgbWFueSBkcml2ZXJzIGFzIHBvc3NpYmxlICovCisrI2lmbmRlZiBDT01QQVRfQVBJX0gKKysjZGVmaW5lIENPTVBBVF9BUElfSAorKworKyNpZm5kZWYgR0xZUEhfSEFTX0dMWVBIX1BJQ1RVUkVfQUNDRVNTT1IKKysjZGVmaW5lIEdldEdseXBoUGljdHVyZShnLCBzKSBHbHlwaFBpY3R1cmUoKGcpKVsocyktPm15TnVtXQorKyNkZWZpbmUgU2V0R2x5cGhQaWN0dXJlKGcsIHMsIHApIEdseXBoUGljdHVyZSgoZykpWyhzKS0+bXlOdW1dID0gcAorKyNlbmRpZgorKworKyNpZm5kZWYgWEY4Nl9IQVNfU0NSTl9DT05WCisrI2RlZmluZSB4Zjg2U2NyZWVuVG9TY3JuKHMpIHhmODZTY3JlZW5zWyhzKS0+bXlOdW1dCisrI2RlZmluZSB4Zjg2U2NyblRvU2NyZWVuKHMpIHNjcmVlbkluZm8uc2NyZWVuc1socyktPnNjcm5JbmRleF0KKysjZW5kaWYKKysKKysjaWZuZGVmIFhGODZfU0NSTl9JTlRFUkZBQ0UKKysKKysjZGVmaW5lIFNDUk5fQVJHX1RZUEUgaW50CisrI2RlZmluZSBTQ1JOX0lORk9fUFRSKGFyZzEpIFNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbKGFyZzEpXQorKworKyNkZWZpbmUgU0NSRUVOX0FSR19UWVBFIGludAorKyNkZWZpbmUgU0NSRUVOX1BUUihhcmcxKSBTY3JlZW5QdHIgcFNjcmVlbiA9IHNjcmVlbkluZm8uc2NyZWVuc1soYXJnMSldCisrCisrI2RlZmluZSBTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wgaW50IGluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2CisrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHU19ERUNMIGludCBhcmcsIHBvaW50ZXIgYmxvY2tEYXRhLCBwb2ludGVyIHBUaW1lb3V0LCBwb2ludGVyIHBSZWFkbWFzaworKyNkZWZpbmUgQkxPQ0tIQU5ETEVSX0FSR1MgYXJnLCBibG9ja0RhdGEsIHBUaW1lb3V0LCBwUmVhZG1hc2sKKysKKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wgaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4KKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTIHNjcm5JbmRleCwgcFNjcmVlbgorKworKyNkZWZpbmUgQURKVVNUX0ZSQU1FX0FSR1NfREVDTCBpbnQgYXJnLCBpbnQgeCwgaW50IHksIGludCBmbGFncworKworKyNkZWZpbmUgU1dJVENIX01PREVfQVJHU19ERUNMIGludCBhcmcsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncworKworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHU19ERUNMIGludCBhcmcsIGludCBmbGFncworKyNkZWZpbmUgRlJFRV9TQ1JFRU5fQVJHUyh4KSAoeCktPnNjcm5JbmRleCwgMAorKworKyNkZWZpbmUgVlRfRlVOQ19BUkdTX0RFQ0wgaW50IGFyZywgaW50IGZsYWdzCisrI2RlZmluZSBWVF9GVU5DX0FSR1MoZmxhZ3MpIHBTY3JuLT5zY3JuSW5kZXgsIChmbGFncykKKysKKysjZGVmaW5lIFhGODZfRU5BQkxFRElTQUJMRUZCX0FSRyh4KSAoKHgpLT5zY3JuSW5kZXgpCisrI2Vsc2UKKysjZGVmaW5lIFNDUk5fQVJHX1RZUEUgU2NybkluZm9QdHIKKysjZGVmaW5lIFNDUk5fSU5GT19QVFIoYXJnMSkgU2NybkluZm9QdHIgcFNjcm4gPSAoYXJnMSkKKysKKysjZGVmaW5lIFNDUkVFTl9BUkdfVFlQRSBTY3JlZW5QdHIKKysjZGVmaW5lIFNDUkVFTl9QVFIoYXJnMSkgU2NyZWVuUHRyIHBTY3JlZW4gPSAoYXJnMSkKKysKKysjZGVmaW5lIFNDUkVFTl9JTklUX0FSR1NfREVDTCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2CisrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHU19ERUNMIFNjcmVlblB0ciBhcmcsIHBvaW50ZXIgcFRpbWVvdXQsIHBvaW50ZXIgcFJlYWRtYXNrCisrI2RlZmluZSBCTE9DS0hBTkRMRVJfQVJHUyBhcmcsIHBUaW1lb3V0LCBwUmVhZG1hc2sKKysKKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wgU2NyZWVuUHRyIHBTY3JlZW4KKysjZGVmaW5lIENMT1NFX1NDUkVFTl9BUkdTIHBTY3JlZW4KKysKKysjZGVmaW5lIEFESlVTVF9GUkFNRV9BUkdTX0RFQ0wgU2NybkluZm9QdHIgYXJnLCBpbnQgeCwgaW50IHkKKysjZGVmaW5lIFNXSVRDSF9NT0RFX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcsIERpc3BsYXlNb2RlUHRyIG1vZGUKKysKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcKKysjZGVmaW5lIEZSRUVfU0NSRUVOX0FSR1MoeCkgKHgpCisrCisrI2RlZmluZSBWVF9GVU5DX0FSR1NfREVDTCBTY3JuSW5mb1B0ciBhcmcKKysjZGVmaW5lIFZUX0ZVTkNfQVJHUyhmbGFncykgcFNjcm4KKysKKysjZGVmaW5lIFhGODZfRU5BQkxFRElTQUJMRUZCX0FSRyh4KSAoeCkKKysKKysjZW5kaWYKKysKKysjZW5kaWYKK2RpZmYgLS1naXQgYS9zcmMvb21hcGZiLWRyaXZlci5jIGIvc3JjL29tYXBmYi1kcml2ZXIuYworaW5kZXggMDc5ODlmNS4uNDg2ZmZhNCAxMDA2NDQKKy0tLSBhL3NyYy9vbWFwZmItZHJpdmVyLmMKKysrKyBiL3NyYy9vbWFwZmItZHJpdmVyLmMKK0BAIC00NCw2ICs0NCw4IEBACisgCisgI2luY2x1ZGUgImV4YS5oIgorIAorKyNpbmNsdWRlICJjb21wYXQtYXBpLmgiCisrCisgI2lmZGVmIEhBVkVfWEVYVFBST1RPXzcxCisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL2RwbXNjb25zdC5oPgorICNlbHNlCitAQCAtNzAsMTAgKzcyLDEwIEBACisgCisgc3RhdGljIEJvb2wgT01BUEZCUHJvYmUoRHJpdmVyUHRyIGRydiwgaW50IGZsYWdzKTsKKyBzdGF0aWMgQm9vbCBPTUFQRkJQcmVJbml0KFNjcm5JbmZvUHRyIHBTY3JuLCBpbnQgZmxhZ3MpOworLXN0YXRpYyBCb29sIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndik7Cistc3RhdGljIEJvb2wgT01BUEZCRW50ZXJWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpOworLXN0YXRpYyB2b2lkIE9NQVBGQkxlYXZlVlQoaW50IHNjcm5JbmRleCwgaW50IGZsYWdzKTsKKy1zdGF0aWMgQm9vbCBPTUFQRkJTd2l0Y2hNb2RlKGludCBzY3JuSW5kZXgsIERpc3BsYXlNb2RlUHRyIG1vZGUsIGludCBmbGFncyk7Cisrc3RhdGljIEJvb2wgT01BUEZCU2NyZWVuSW5pdChTQ1JFRU5fSU5JVF9BUkdTX0RFQ0wpOworK3N0YXRpYyBCb29sIE9NQVBGQkVudGVyVlQoVlRfRlVOQ19BUkdTX0RFQ0wpOworK3N0YXRpYyB2b2lkIE9NQVBGQkxlYXZlVlQoVlRfRlVOQ19BUkdTX0RFQ0wpOworK3N0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoU1dJVENIX01PREVfQVJHU19ERUNMKTsKKyAKKyBzdGF0aWMgQm9vbAorIE9NQVBGQkVuc3VyZVJlYyhTY3JuSW5mb1B0ciBwU2NybikKK0BAIC00ODEsNyArNDgzLDcgQEAgT01BUEZCWHZTY3JlZW5Jbml0KFNjcmVlblB0ciBwU2NyZWVuKQorIH0KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQkNsb3NlU2NyZWVuKGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuKQorK09NQVBGQkNsb3NlU2NyZWVuKENMT1NFX1NDUkVFTl9BUkdTX0RFQ0wpCisgeworIAlTY3JuSW5mb1B0ciBwU2NybiA9IHhmODZTY3JlZW5zW3BTY3JlZW4tPm15TnVtXTsKKyAJT01BUEZCUHRyIG9mYiA9IE9NQVBGQihwU2Nybik7CitAQCAtNDkwLDExICs0OTIsMTEgQEAgT01BUEZCQ2xvc2VTY3JlZW4oaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4pCisgCisgCXBTY3JlZW4tPkNsb3NlU2NyZWVuID0gb2ZiLT5DbG9zZVNjcmVlbjsKKyAJCistCXJldHVybiAoKnBTY3JlZW4tPkNsb3NlU2NyZWVuKShzY3JuSW5kZXgsIHBTY3JlZW4pOworKwlyZXR1cm4gKCpwU2NyZWVuLT5DbG9zZVNjcmVlbikoQ0xPU0VfU0NSRUVOX0FSR1MpOworIH0KKyAKKyBzdGF0aWMgQm9vbAorLU9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKytPTUFQRkJTY3JlZW5Jbml0KFNDUkVFTl9JTklUX0FSR1NfREVDTCkKKyB7CisgCVNjcm5JbmZvUHRyIHBTY3JuID0geGY4NlNjcmVlbnNbcFNjcmVlbi0+bXlOdW1dOworIAlPTUFQRkJQdHIgb2ZiID0gT01BUEZCKHBTY3JuKTsKK0BAIC01MTYsNyArNTE4LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwKKyAJICAgICAgICAgICAgICAgIG9mYi0+ZmQsIDApOworIAlpZiAob2ZiLT5mYiA9PSBNQVBfRkFJTEVEKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKysJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwgIk1hcHBpbmcgZnJhbWVidWZmZXIgbWVtb3J5IGZhaWxlZCwgd2FudGVkICVkIGJ5dGVzLlxuIiwgb2ZiLT5tZW1faW5mby5zaXplKTsKKyAJCXJldHVybiBGQUxTRTsKKyAJfQorIAorQEAgLTUyNiw3ICs1MjgsNyBAQCBPTUFQRkJTY3JlZW5Jbml0KGludCBzY3JuSW5kZXgsIFNjcmVlblB0ciBwU2NyZWVuLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCS8qIE9ubHkgc3VwcG9ydCBUcnVlQ29sb3IgZm9yIG5vdyAqLworIAlpZiAoIW1pU2V0VmlzdWFsVHlwZXMocFNjcm4tPmRlcHRoLCBUcnVlQ29sb3JNYXNrLAorIAkJcFNjcm4tPnJnYkJpdHMsIHBTY3JuLT5kZWZhdWx0VmlzdWFsKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJ2aXN1YWwgdHlwZSBzZXR1cCBmYWlsZWQiCisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJ2aXN1YWwgdHlwZSBzZXR1cCBmYWlsZWQiCisgCQkgICAgICAgICAgICIgZm9yICVkIGJpdHMgcGVyIHBpeGVsIFsxXVxuIiwKKyAJCSAgICAgICAgICAgcFNjcm4tPmJpdHNQZXJQaXhlbCk7CisgCQlyZXR1cm4gRkFMU0U7CitAQCAtNTM0LDcgKzUzNiw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogU2V0IHVwIHBpeG1hcCBkZXB0aCBpbmZvcm1hdGlvbiAqLworIAlpZiAoIW1pU2V0UGl4bWFwRGVwdGhzKCkpIHsKKy0JCXhmODZEcnZNc2coc2NybkluZGV4LFhfRVJST1IsInBpeG1hcCBkZXB0aCBzZXR1cCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LFhfRVJST1IsInBpeG1hcCBkZXB0aCBzZXR1cCBmYWlsZWRcbiIpOworIAkJcmV0dXJuIEZBTFNFOworIAl9CisgCitAQCAtNTQ2LDcgKzU0OCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPnZpcnR1YWxZLCBwU2Nybi0+eERwaSwKKyAJICAgICAgICAgICAgICAgICAgcFNjcm4tPnlEcGksIHBTY3JuLT5kaXNwbGF5V2lkdGgsCisgCSAgICAgICAgICAgICAgICAgIHBTY3JuLT5iaXRzUGVyUGl4ZWwpKSB7CistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgImZiU2NyZWVuSW5pdCBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiZmJTY3JlZW5Jbml0IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAKK0BAIC01NjcsNyArNTY5LDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorIAkvKiBJbml0aWFsaXplIFhSZW5kZXIgZmFsbGJhY2tzICovCisgCWlmICghZmJQaWN0dXJlSW5pdChwU2NyZWVuLCBOVUxMLCAwKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsICJmYlBpY3R1cmVJbml0IGZhaWxlZFxuIik7CisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsICJmYlBpY3R1cmVJbml0IGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KKyAJCitAQCAtNTc5LDcgKzU4MSw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAKKyAJLyogSW5pdGlhbGl6ZSBkZWZhdWx0IGNvbG9ybWFwICovCisgCWlmICghbWlDcmVhdGVEZWZDb2xvcm1hcChwU2NyZWVuKSkgeworLQkJeGY4NkRydk1zZyhzY3JuSW5kZXgsIFhfRVJST1IsCisrCQl4Zjg2RHJ2TXNnKHBTY3JuLT5zY3JuSW5kZXgsIFhfRVJST1IsCisgCQkgICAgICAgICAgICJjcmVhdGluZyBkZWZhdWx0IGNvbG9ybWFwIGZhaWxlZFxuIik7CisgCQlyZXR1cm4gRkFMU0U7CisgCX0KK0BAIC01ODksNyArNTkxLDcgQEAgT01BUEZCU2NyZWVuSW5pdChpbnQgc2NybkluZGV4LCBTY3JlZW5QdHIgcFNjcmVlbiwgaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJLyogVGhpcyBpcyBub24tZmF0YWwgc2luY2Ugd2UgbWlnaHQgYmUgcnVubmluZyBhZ2FpbnN0IG9sZGVyCisgCQkgKiBrZXJuZWwgZHJpdmVyIGluIHdoaWNoIGNhc2Ugd2Ugb25seSBkbyBiYXNpYyAyRCBzdHVmZi4uLgorIAkJICovCistCQl4Zjg2RHJ2TXNnKHNjcm5JbmRleCwgWF9FUlJPUiwgIlJlYWRpbmcgcGxhbmUgaW5mbyBmYWlsZWRcbiIpOworKwkJeGY4NkRydk1zZyhwU2Nybi0+c2NybkluZGV4LCBYX0VSUk9SLCAiUmVhZGluZyBwbGFuZSBpbmZvIGZhaWxlZFxuIik7CisgCX0gZWxzZSBpZiAoIW9mYi0+ZHNzKSB7CisgCisgCQlvZmItPnBsYW5lX2luZm8uZW5hYmxlZCA9IDE7CitAQCAtNjAyLDcgKzYwNCw3IEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCX0KKyAKKyAJCWlmIChpb2N0bCAob2ZiLT5mZCwgT01BUEZCX1NFVFVQX1BMQU5FLCAmb2ZiLT5wbGFuZV9pbmZvKSkgeworLQkJCXhmODZEcnZNc2coc2NybkluZGV4LCBYX0VSUk9SLAorKwkJCXhmODZEcnZNc2cocFNjcm4tPnNjcm5JbmRleCwgWF9FUlJPUiwKKyAJCQkgICAgICAgICAgICAiJXM6IFBsYW5lIHNldHVwIGZhaWxlZDogJXNcbiIsCisgCQkJICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzdHJlcnJvcihlcnJubykpOworIAkJCXJldHVybiBGQUxTRTsKK0BAIC02NDUsOSArNjQ3LDEwIEBAIE9NQVBGQlNjcmVlbkluaXQoaW50IHNjcm5JbmRleCwgU2NyZWVuUHRyIHBTY3JlZW4sIGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorLXN0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoaW50IHNjcm5JbmRleCwgRGlzcGxheU1vZGVQdHIgbW9kZSwgaW50IGZsYWdzKQorK3N0YXRpYyBCb29sIE9NQVBGQlN3aXRjaE1vZGUoU1dJVENIX01PREVfQVJHU19ERUNMKQorIHsKKy0JcmV0dXJuIHhmODZTZXRTaW5nbGVNb2RlICh4Zjg2U2NyZWVuc1tzY3JuSW5kZXhdLCBtb2RlLCBSUl9Sb3RhdGVfMCk7CisrCVNDUk5fSU5GT19QVFIoYXJnKTsKKysJcmV0dXJuIHhmODZTZXRTaW5nbGVNb2RlIChwU2NybiwgbW9kZSwgUlJfUm90YXRlXzApOworIH0KKyAKKyB2b2lkCitAQCAtNjk5LDE0ICs3MDIsMTQgQEAgT01BUEZCUHJpbnRDYXBhYmlsaXRpZXMoU2NybkluZm9QdHIgcFNjcm4sCisgLyoqKiBVbmltcGxlbWVudGVkOiAqLworIAorIHN0YXRpYyBCb29sCistT01BUEZCRW50ZXJWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpCisrT01BUEZCRW50ZXJWVChWVF9GVU5DX0FSR1NfREVDTCkKKyB7CisgCXhmODZNc2coWF9OT1RfSU1QTEVNRU5URUQsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorIHN0YXRpYyB2b2lkCistT01BUEZCTGVhdmVWVChpbnQgc2NybkluZGV4LCBpbnQgZmxhZ3MpCisrT01BUEZCTGVhdmVWVChWVF9GVU5DX0FSR1NfREVDTCkKKyB7CisgCXhmODZNc2coWF9OT1RfSU1QTEVNRU5URUQsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94Zjg2LXZpZGVvLW9tYXBmYi8wMDA3LWFsd2F5c19pbmNsdWRlX3hvcmdfc2VydmVyLmgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMGI5YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmIvMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0ZpeCBlcnJvcnMgd2l0aCBnbGliYyAyLjIwCisKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS9zdHJpbmcuaDo2MzQ6MCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTMsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9taXNjLmg6MTE1LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4NnN0ci5oOjM3LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcveGY4Ni5oOjQ0LAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy93b3JrL2k1ODYtb2UtbGludXgveGY4Ni12aWRlby1vbWFwZmIvMl8wLjEuMStnaXRyQVVUT0lOQysyOGMwMDZjOTRlLXIyMS43L2dpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmM6MzM6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCitJbiBmaWxlIGluY2x1ZGVkIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUvc3RyaW5nLmg6NjM0OjAsCisgICAgICAgICAgICAgICAgIGZyb20gL2hvbWUvdWJ1bnR1L3dvcmsvdXBzdHJlYW0vb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLWdsaWJjL3N5c3Jvb3RzL3FlbXV4ODYvdXNyL2luY2x1ZGUveG9yZy9vcy5oOjUzLAorICAgICAgICAgICAgICAgICBmcm9tIC9ob21lL3VidW50dS93b3JrL3Vwc3RyZWFtL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1nbGliYy9zeXNyb290cy9xZW11eDg2L3Vzci9pbmNsdWRlL3hvcmcvbWlzYy5oOjExNSwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODZzdHIuaDozNywKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL3hmODYuaDo0NCwKKyAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvd29yay9pNTg2LW9lLWxpbnV4L3hmODYtdmlkZW8tb21hcGZiLzJfMC4xLjErZ2l0ckFVVE9JTkMrMjhjMDA2Yzk0ZS1yMjEuNy9naXQvc3JjL29tYXBmYi14di1nZW5lcmljLmM6Mjg6CisvaG9tZS91YnVudHUvd29yay91cHN0cmVhbS9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtZ2xpYmMvc3lzcm9vdHMvcWVtdXg4Ni91c3IvaW5jbHVkZS94b3JnL29zLmg6NTc5OjE6IGVycm9yOiBleHBlY3RlZCBpZGVudGlmaWVyIG9yICcoJyBiZWZvcmUgJ19fZXh0ZW5zaW9uX18nCisgc3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBuKTsKKyBeCisKK1NpbmdlZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworSW5kZXg6IGdpdC9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvb21hcGZiLXh2LWJsaXp6YXJkLmMJMjAxNC0wOC0yOCAwNToxNjoyNS42ODQwNzA1ODcgLTA3MDAKKysrKyBnaXQvc3JjL29tYXBmYi14di1ibGl6emFyZC5jCTIwMTQtMDgtMjggMTk6MDU6MzkuNDQwMDcwNTg3IC0wNzAwCitAQCAtMzAsNiArMzAsNyBAQAorICAqICAtCisgICovCisgCisrI2luY2x1ZGUgPHhvcmctc2VydmVyLmg+CisgI2luY2x1ZGUgInhmODYuaCIKKyAjaW5jbHVkZSAieGY4Nl9PU2xpYi5oIgorICNpbmNsdWRlICJ4Zjg2eHYuaCIKK0luZGV4OiBnaXQvc3JjL29tYXBmYi14di1nZW5lcmljLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYwkyMDE0LTA4LTI4IDA1OjE2OjI1LjY4NDA3MDU4NyAtMDcwMAorKysrIGdpdC9zcmMvb21hcGZiLXh2LWdlbmVyaWMuYwkyMDE0LTA4LTI4IDE5OjA1OjUxLjc4MDA3MDU4NyAtMDcwMAorQEAgLTI1LDYgKzI1LDcgQEAKKyAgKiBHZW5lcmljIGZ1bmN0aW9ucyBmb3IgdGhlIFhWIGRyaXZlcgorICAqLworIAorKyNpbmNsdWRlIDx4b3JnLXNlcnZlci5oPgorICNpbmNsdWRlICJ4Zjg2LmgiCisgI2luY2x1ZGUgInhmODZfT1NsaWIuaCIKKyAjaW5jbHVkZSAieGY4Nnh2LmgiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby1vbWFwZmJfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWViODcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tb21hcGZiX2dpdC5iYgpAQCAtMCwwICsxLDM1IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFRleGFzIEluc3RydW1lbnRzIE9NQVAgZnJhbWVidWZmZXIgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJvbWFwZmIgZHJpdmVyIHN1cHBvcnRzIHRoZSBiYXNpYyBUZXhhcyBJbnN0cnVtZW50cyBPTUFQIFwKK2ZyYW1lYnVmZmVyLiIKKworTElDRU5TRSA9ICJNSVQtWCAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTYzZTJjYmFjNTM4NjNmNjBlMmY0MzM0M2ZiMzQzNjdmIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEiCisKK1NSQ1JFViA9ICIzM2UzNmMxMmRkZTMzNmVkYmRkMzQ2MjZkZDhhZGZjYWViYzhmYmI4IgorUFIgPSAiJHtJTkNfUFJ9LjciCitQViA9ICIwLjEuMStnaXRyJHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbnNjbS5kZWJpYW4ub3JnL2NvbGxhYi1tYWludC94Zjg2LXZpZGVvLW9tYXBmYi5naXQgXAorICBmaWxlOi8vMDAwMS1QcmV2ZW50cy1vbWFwZmItZnJvbS1mcm9tLWNyYXNoaW5nLXdoZW4tcGl4ZWxjbG9jay1vLnBhdGNoIFwKKyAgZmlsZTovLzAwMDEtUmV2ZXJ0LVNldC1hLWxhcmdlLUNSVEMtdXBwZXItbGltaXQtdG8tbm90LXBydW5lLWxhci5wYXRjaCBcCisgIGZpbGU6Ly8wMDAyLVJldmVydC1TZXQtdmlydHVhbC1zaXplLXdoZW4tY29uZmlndXJpbmctZnJhbWVidWZmZXIucGF0Y2ggXAorICBmaWxlOi8vMDAwMy1mb3JjZS1wbGFpbi1tb2RlLnBhdGNoIFwKKyAgZmlsZTovLzAwMDQtYmxhY2tsaXN0LXR2LW91dC5wYXRjaCBcCisgIGZpbGU6Ly8wMDA1LUF0dGVtcHQtdG8tZml4LVZSRkIucGF0Y2ggXAorICBmaWxlOi8vMDAwNi1vbWFwZmItcG9ydC10by1uZXcteHNlcnZlci12aWRlby1BUEkucGF0Y2ggXAorICBmaWxlOi8vMDAwNy1hbHdheXNfaW5jbHVkZV94b3JnX3NlcnZlci5oLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VDT05GX2FybXY3YSA9ICIgLS1lbmFibGUtbmVvbiAiCitDRkxBR1MgKz0gIiAtSSR7U1RBR0lOR19JTkNESVJ9L3hvcmcgIgorCisjIFVzZSBvdmVybGF5IDIgb24gb21hcDMgdG8gZW5hYmxlIG90aGVyIGFwcHMgdG8gdXNlIG92ZXJsYXkgMSAoZS5nLiBkbWFpIG9yIG9tYXBmYnBsYXkpCitkb19jb21waWxlX3ByZXBlbmRfYXJtdjdhICgpIHsKKyAgICAgICAgc2VkIC1pIC1lIHM6ZmIxOmZiMjpnICR7U30vc3JjL29tYXBmYi14di5jCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12ZXNhXzIuMy40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdmVzYV8yLjMuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTI1MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdmVzYV8yLjMuNC5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hMWYwNjEwZWJkYzZmMzE0YTlmYTUxMDJhOGM1YzFiMCIKKworU1VNTUFSWSA9ICJYLk9yZyBYIHNlcnZlciAtLSBHZW5lcmljIFZlc2EgdmlkZW8gZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJ2ZXNhIGlzIGFuIFhvcmcgZHJpdmVyIGZvciBnZW5lcmljIFZFU0EgdmlkZW8gY2FyZHMuIEl0IFwKK2NhbiBkcml2ZSBtb3N0IFZFU0EtY29tcGF0aWJsZSB2aWRlbyBjYXJkcywgYnV0IG9ubHkgbWFrZXMgdXNlIG9mIHRoZSBcCitiYXNpYyBzdGFuZGFyZCBWRVNBIGNvcmUgdGhhdCBpcyBjb21tb24gdG8gdGhlc2UgY2FyZHMuIFRoZSBkcml2ZXIgXAorc3VwcG9ydHMgZGVwdGhzIDgsIDE1IDE2IGFuZCAyNC4iCisKK1BSID0gIiR7SU5DX1BSfS4wIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSByYW5kcnByb3RvIGxpYnBjaWFjY2VzcyIKKworQ09NUEFUSUJMRV9IT1NUID0gJyhpLjg2fHg4Nl82NCkuKi1saW51eCcKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gInhzZXJ2ZXIteG9yZy1tb2R1bGUtbGliaW50MTAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhODkzYzM3YzU4OWY3YTMxY2VhOTI5YTVkODk2YTBlMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YmRkZjRkODc5ZGQ2ZjY3MDg4ZWNiMjAzYTMxZTEyMzM0YWFiOTgwMTc0YmQwOTA5OTMwYTIxZjMyZTI1MWMxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlLzAwMDItYWRkLW9wdGlvbi1mb3Itdm13Z2Z4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlLzAwMDItYWRkLW9wdGlvbi1mb3Itdm13Z2Z4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzlkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmUvMDAwMi1hZGQtb3B0aW9uLWZvci12bXdnZngucGF0Y2gKQEAgLTAsMCArMSw5OCBAQAorVXBzdHJlYW0tU3RhdHVzOlN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSBmMTAzZDZmNTcwNjcxYzY0OWNjZDdiMjI1ZTZkNmM5ZjE0MzcxODg4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjUgSnVuIDIwMTQgMTY6MTY6NDQgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIGFkZCBvcHRpb24gZm9yIHZtd2dmeAorCistLS0KKyBjb25maWd1cmUuYWMgfCAgIDQ5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGJlNDBlZDcuLjhlMTUzMDcgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTY0LDYgKzY0LDEzIEBAIEFDX0FSR19FTkFCTEUodm13YXJlY3RybC1jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVk1XQVJFQ1RSTD0kZW5hYmxldmFsXSwgW1ZNV0FSRUNUUkw9bm9dKQorIEFNX0NPTkRJVElPTkFMKEJVSUxEX1ZNV0FSRUNUUkwsIFt0ZXN0ICJ4JFZNV0FSRUNUUkwiID0geHllc10pCisgCisrIyBEZWZpbmUgYSBjb25maWd1cmUgb3B0aW9uIHRvIGJ1aWxkIHRoZSB2bXdnZnggZHJpdmVyCisrQUNfQVJHX0VOQUJMRSh2bXdnZngsCisrICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXZtd2dmeF0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRGlzYWJsZSB2bXdnZnggZHJpdmVyIChLTVMvM0QpIChkZWZhdWx0OiBlbmFibGVkKV0pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZNV0dGWD0iJGVuYWJsZXZhbCJdLCBbVk1XR0ZYPSJ5ZXMiXSkKKytBTV9DT05ESVRJT05BTChCVUlMRF9WTVdHRlgsIHRlc3QgIngkVk1XR0ZYIiA9IHh5ZXMpCisrCisgIyBTdG9yZSB0aGUgbGlzdCBvZiBzZXJ2ZXIgZGVmaW5lZCBvcHRpb25hbCBleHRlbnNpb25zIGluIFJFUVVJUkVEX01PRFVMRVMKKyBYT1JHX0RSSVZFUl9DSEVDS19FWFQoUkFORFIsIHJhbmRycHJvdG8pCisgWE9SR19EUklWRVJfQ0hFQ0tfRVhUKFJFTkRFUiwgcmVuZGVycHJvdG8pCitAQCAtODUsMTEgKzkyLDYgQEAgUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS40Ljk5XSwKKyAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV81XzBdLCAxLAorICAgICAgICAgICAgICAgICAgW0hhcyB2ZXJzaW9uIDEuNS4wIG9yIGdyZWF0ZXIgb2YgdGhlIFhzZXJ2ZXJdKV0pCisgCistUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS43LjBdLAorLSAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9YT1JHX1NFUlZFUl8xXzdfMF0sIDEsCistICAgICAgICAgICAgICAgICBbSGFzIHZlcnNpb24gMS43LjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pCistCQkgQlVJTERfVk1XR0ZYPXllc10sW0JVSUxEX1ZNV0dGWD1ub10pCistCisgUEtHX0NIRUNLX0VYSVNUUyhbeG9yZy1zZXJ2ZXIgPj0gMS4xMi4wXSwKKyAgICAgICAgICAgICAgICAgIFtBQ19ERUZJTkUoW0hBVkVfWE9SR19TRVJWRVJfMV8xMl8wXSwgMSwKKyAgICAgICAgICAgICAgICAgIFtIYXMgdmVyc2lvbiAxLjEyLjAgb3IgZ3JlYXRlciBvZiB0aGUgWHNlcnZlcl0pXSkKK0BAIC0xMTQsMzkgKzExNiwyOCBAQCBBTV9DT05ESVRJT05BTChYU0VSVkVSX0xJQlBDSUFDQ0VTUywgdGVzdCAieCRYU0VSVkVSX0xJQlBDSUFDQ0VTUyIgPSB4eWVzKQorIAorIEFDX1NVQlNUKFttb2R1bGVkaXJdKQorIAorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistCVBLR19DSEVDS19NT0RVTEVTKFtMSUJEUk1dLCBbbGliZHJtXSxbXSxbQlVJTERfVk1XR0ZYPW5vXSkKKy1maQorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistIworLSMgRWFybHkgdmVyc2lvbnMgb2YgbWVzYSAxMCBmb3Jnb3QgdG8gYnVtcCB0aGUgWEEgbWFqb3IgdmVyc2lvbiBudW1iZXIgaW4KKy0jIHRoZSB4YV90cmFja2VyLmggaGVhZGVyCistIworLQlQS0dfQ0hFQ0tfTU9EVUxFUyhbWEFUUkFDS0VSXSwgW3hhdHJhY2tlciA+PSAwLjQuMF0sCistCQkJICBbUEtHX0NIRUNLX0VYSVNUUyhbeGF0cmFja2VyID0gMi4wLjBdLAorLQkgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hBXzJdLCAxLAorLSAgICAgICAgICAgICAgIAkJICBbSGFzIHZlcnNpb24gMiBvZiBYQV0pXSldLAorLQkJCSAgW0JVSUxEX1ZNV0dGWD1ub10pCistIworLSMgQ2hlY2sgZm9yIHByaW1lLgorLSMKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgS2VybmVsIE1vZGUgU2V0dGluZyBhbmQgM0RdKQorK2lmIHRlc3QgeCRWTVdHRlggPSB4eWVzOyB0aGVuCisrCVBLR19DSEVDS19NT0RVTEVTKFtMSUJEUk1dLCBbbGliZHJtXSkKKysJIyBDaGVjayBmb3IgcHJpbWUuCisgCVBLR19DSEVDS19FWElTVFMoW2xpYmRybSA+PSAyLjQuMzhdLAorIAkJCSBbQUNfREVGSU5FKFtIQVZFX0xJQkRSTV8yXzRfMzhdLCAxLAorIAkJCSBbSGFzIHZlcnNpb24gMi40LjM4IG9yIGdyZWF0ZXIgb2YgbGliZHJtXSldKQorLWZpCisgCistRFJJVkVSX05BTUU9dm13YXJlCistQUNfU1VCU1QoW0RSSVZFUl9OQU1FXSkKKy0KKy1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgS2VybmVsIE1vZGUgU2V0dGluZyBhbmQgM0RdKQorLWlmIHRlc3QgeCRCVUlMRF9WTVdHRlggPSB4eWVzOyB0aGVuCistCUFDX01TR19SRVNVTFQoW3llc10pCisrCSMgRWFybHkgdmVyc2lvbnMgb2YgbWVzYSAxMCBmb3Jnb3QgdG8gYnVtcCB0aGUgWEEgbWFqb3IgdmVyc2lvbiBudW1iZXIKKysJIyBpbiB0aGUgeGFfdHJhY2tlci5oIGhlYWRlcgorKwlQS0dfQ0hFQ0tfTU9EVUxFUyhbWEFUUkFDS0VSXSwgW3hhdHJhY2tlciA+PSAwLjQuMF0sCisrCQkJICBbUEtHX0NIRUNLX0VYSVNUUyhbeGF0cmFja2VyID0gMi4wLjBdLAorKwkgICAgICAgICAgICAgICAgICBbQUNfREVGSU5FKFtIQVZFX1hBXzJdLCAxLAorKyAgICAgICAgICAgICAgIAkJICBbSGFzIHZlcnNpb24gMiBvZiBYQV0pXSldKQorICAgICAgICAgQUNfREVGSU5FKFtCVUlMRF9WTVdHRlhdLCAxLCBbQnVpbGRpbmcgdGhlIHZtd2dmeCBkcml2ZXIgcGF0aF0pCisrCUFDX01TR19SRVNVTFQoW3llc10pCisgZWxzZQorIAlBQ19NU0dfUkVTVUxUKFtub10pCisgZmkKKyAKKy1BTV9DT05ESVRJT05BTChCVUlMRF9WTVdHRlgsIHRlc3QgIngkQlVJTERfVk1XR0ZYIiA9IHh5ZXMpCisrRFJJVkVSX05BTUU9dm13YXJlCisrQUNfU1VCU1QoW0RSSVZFUl9OQU1FXSkKKyAKKyBBQ19DT05GSUdfRklMRVMoWworICAgICAgICAgICAgICAgICBNYWtlZmlsZQorLS0gCisxLjcuMTAuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveGY4Ni12aWRlby12bXdhcmVfMTMuMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlXzEzLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWI5OGVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hmODYtdmlkZW8tdm13YXJlXzEzLjEuMC5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctZHJpdmVyLXZpZGVvLmluYworCitTVU1NQVJZID0gIlguT3JnIFggc2VydmVyIC0tIFZNd2FyZSBTVkdBIGRpc3BsYXkgZHJpdmVyIgorCitERVNDUklQVElPTiA9ICJ2bXdhcmUgaXMgYW4gWG9yZyBkcml2ZXIgZm9yIFZNd2FyZSB2aXJ0dWFsIHZpZGVvIGNhcmRzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NWZjZDdkNDM3YTk1OWExNWZiZWU4NzA3NzQ3YzZiNTMiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHhpbmVyYW1hcHJvdG8gdmlkZW9wcm90byBsaWJwY2lhY2Nlc3MiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAyLWFkZC1vcHRpb24tZm9yLXZtd2dmeC5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjBjYmEyMmZlZDRjYjYzOWQ1YzQyNzZmNzg5MmM1NDNkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNjMWQyNDRlNGIxYjc3ZTkyMTI2OTU3OTY1Y2RjOWZiODJkZTRjMjE1YzA3MDZhM2E4YWFmZjY5MzllNGEwY2MiCisKK0NPTVBBVElCTEVfSE9TVCA9ICcoaS44Ni4qLWxpbnV4fHg4Nl82NC4qLWxpbnV4KScKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUtdm13Z2Z4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRkMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLWNvbW1vbi5pbmMKQEAgLTAsMCArMSw0MSBAQAorU1VNTUFSWSA9ICJYIGRyaXZlciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmciCitTRUNUSU9OID0gIngxMS9kcml2ZXJzIgorTElDRU5TRSA9ICJNSVQtWCIKKworUEUgPSAiMiIKK0lOQ19QUiA9ICJyMjEiCisKK0RFUEVORFMgPSAidmlydHVhbC94c2VydmVyIHhwcm90byByYW5kcnByb3RvIHV0aWwtbWFjcm9zIgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvZHJpdmVyLyR7QlBOfS0ke1BWfS50YXIuYnoyIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9kcml2ZXJzLy5kZWJ1ZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyBkZXBlbmRzIG9uIHZpcnR1YWwveHNlcnZlcgorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworIyBGSVhNRTogV2UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIHRoZSBsaWJ0b29sIGFyY2hpdmVzICgqLmxhKSBmcm9tIG1vZHVsZXMKKyMgZGlyZWN0b3J5LCBhcyB0aGV5IHNlcnZlIG5vIHVzZWZ1bCBwdXJwb3NlLiBVcHN0cmVhbSBzaG91bGQgZml4IE1ha2VmaWxlLmFtCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlmaW5kICR7RH0ke2xpYmRpcn0veG9yZy9tb2R1bGVzIC1yZWdleCAiLipcLmxhJCIgfCB4YXJncyBybSAtZiAtLQorfQorCisjIEZ1bmN0aW9uIHRvIGFkZCB0aGUgcmVsZXZhbnQgQUJJIGRlcGVuZGVuY3kgdG8gZHJpdmVycywgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZAorIyBmcm9tIGEgUEFDS0FHRUZVTkMuCitkZWYgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsIG5hbWUpOgorICAgICMgTWFwIG9mIEFCSSBuYW1lcyBleHBvc2VkIGluIHRoZSBkZXBlbmRlbmNpZXMgdG8gcGtnLWNvbmZpZyB2YXJpYWJsZXMKKyAgICBhYmlzID0geworICAgICAgInZpZGVvIjogImFiaV92aWRlb2RydiIsCisgICAgICAiaW5wdXQiOiAiYWJpX3hpbnB1dCIKKyAgICB9CisKKyAgICBvdXRwdXQgPSBvcy5wb3BlbigicGtnLWNvbmZpZyB4b3JnLXNlcnZlciAtLXZhcmlhYmxlPSVzIiAlIGFiaXNbbmFtZV0pLnJlYWQoKQorICAgIG1scHJlZml4ID0gZC5nZXRWYXIoJ01MUFJFRklYJywgVHJ1ZSkgb3IgJycKKyAgICBhYmkgPSAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU18nICsgcG4sICcgJyArIGFiaSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci1pbnB1dC5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItaW5wdXQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZWMwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1kcml2ZXIveG9yZy1kcml2ZXItaW5wdXQuaW5jCkBAIC0wLDAgKzEsMTEgQEAKK2luY2x1ZGUgeG9yZy1kcml2ZXItY29tbW9uLmluYworCitERVBFTkRTICs9ICJpbnB1dHByb3RvIGticHJvdG8gIgorCitweXRob24gYWRkX3hvcmdfYWJpX2RlcGVuZHMoKSB7CisgICAgX2FkZF94b3JnX2FiaV9kZXBlbmRzKGQsICJpbnB1dCIpCit9CitQQUNLQUdFRlVOQ1MgPSsgImFkZF94b3JnX2FiaV9kZXBlbmRzIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvaW5wdXQvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS94b3JnL21vZHVsZXMvaW5wdXQvLmRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZHJpdmVyL3hvcmctZHJpdmVyLXZpZGVvLmluYyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci12aWRlby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyODFlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWRyaXZlci94b3JnLWRyaXZlci12aWRlby5pbmMKQEAgLTAsMCArMSw4IEBACitpbmNsdWRlIHhvcmctZHJpdmVyLWNvbW1vbi5pbmMKKworREVQRU5EUyA9KyAicmVuZGVycHJvdG8gdmlkZW9wcm90byB4ZXh0cHJvdG8gZm9udHNwcm90byIKKworcHl0aG9uIGFkZF94b3JnX2FiaV9kZXBlbmRzKCkgeworICAgIF9hZGRfeG9yZ19hYmlfZGVwZW5kcyhkLCAidmlkZW8iKQorfQorUEFDS0FHRUZVTkNTID0rICJhZGRfeG9yZ19hYmlfZGVwZW5kcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzL25vY29tcGlsZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5ncy9ub2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzBjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2VuY29kaW5ncy9ub2NvbXBpbGVyLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworWE9SR19ERUZBVUxUX09QVElPTlMgcHVsbHMgaW4gdGhlIGZvbGxvd2luZyBkZXBlbmRlbmN5IGNoYWluczoKKworWE9SR19DV0FSTkZMQUdTIC0+IEFDX1BST0dfQ0NfQzk5CitYT1JHX1NUUklDVF9PUFRJT04gLT4gQUNfUFJPR19DQ19DOTksIFhPUkdfQ1dBUk5GTEFHUworWE9SR19NQU5QQUdFX1NFQ1RJT05TIC0+IEFDX0NBTk9OSUNBTF9IT1NUIC0+IENoZWNrcyBob3N0IAorCitlYWNoIG9mIHdoaWNoIHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIGhvc3QgY29tcGlsZXIuIEFzIGFuICJhbGwiCithcmNoaXRlY3R1cmUgcGFja2FnZSwgaXQgc2hvdWxkbid0IG5lZWQgYSBjb21waWxlciAoYW5kIGRvZXNuJ3QpLgorCitSUCAxNy81LzIwMTEKKworSW5kZXg6IGVuY29kaW5ncy0xLjAuNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBlbmNvZGluZ3MtMS4wLjQub3JpZy9jb25maWd1cmUuYWMJMjAxMS0wNS0xNyAyMzozNjoxOS41MDUwOTU4NzYgKzAxMDAKKysrKyBlbmNvZGluZ3MtMS4wLjQvY29uZmlndXJlLmFjCTIwMTEtMDUtMTcgMjM6NTQ6MTQuOTM1MDk2MTI4ICswMTAwCitAQCAtNCwxMiArNCwxMiBAQAorIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgQU1fTUFJTlRBSU5FUl9NT0RFCisgCistIyBSZXF1aXJlIHhvcmctbWFjcm9zOiBYT1JHX0RFRkFVTFRfT1BUSU9OUworIG00X2lmbmRlZihbWE9SR19NQUNST1NfVkVSU0lPTl0sCisgCSAgW200X2ZhdGFsKFttdXN0IGluc3RhbGwgeG9yZy1tYWNyb3MgMS4zIG9yIGxhdGVyIGJlZm9yZSBydW5uaW5nIGF1dG9jb25mL2F1dG9nZW5dKV0pCisgWE9SR19NQUNST1NfVkVSU0lPTigxLjMpCistWE9SR19ERUZBVUxUX09QVElPTlMKKy0KKytYT1JHX1JFTEVBU0VfVkVSU0lPTgorK1hPUkdfQ0hBTkdFTE9HCisrWE9SR19JTlNUQUxMCisgQUNfUFJPR19JTlNUQUxMCisgCisgIyBSZXF1aXJlIFguT3JnJ3MgZm9udCB1dGlsIG1hY3JvcyAxLjIgb3IgbGF0ZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9lbmNvZGluZ3NfMS4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA4NDZkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZW5jb2RpbmdzXzEuMC40LmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiVGhlIFhvcmcgZm9udCBlbmNvZGluZyBmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIGVuY29kaW5ncyB0aGF0IG1hcCB0byBzcGVjaWZpYyBjaGFyYWN0ZXJzIGZvciBhIFwKK251bWJlciBvZiBYb3JnIGFuZCBjb21tb24gZm9udHMuIgorCityZXF1aXJlIHhvcmctZm9udC1jb21tb24uaW5jCitMSUNFTlNFID0gIlBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OWRhOTNmMmRhZjJkNTU3MmZhYTJiZmFmMGRiZDllNzYiCitQRSA9ICIxIgorUFIgPSAiJHtJTkNfUFJ9LjEiCisKK0RFUEVORFMgPSAibWtmb250c2NhbGUtbmF0aXZlIGZvbnQtdXRpbC1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICIiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbXBpbGVyLnBhdGNoIgorCitpbmhlcml0IGFsbGFyY2gKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtZW5jb2RpbmdzZGlyPSR7ZGF0YWRpcn0vZm9udHMvWDExL2VuY29kaW5ncyIKKworU1JDX1VSSVttZDVzdW1dID0gIjBmMmQ2NTQ2ZDUxNGM1Y2M0ZWNmNzhhNjA2NTdhNWMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNlZDYzMTI5ODhhNDVkMjM4MTJjMmFjNzA4YjQ1OTVmNjNmZDdhNDljNGRjZDlmNjZiZGNkNTBkMTA1N2Q1MzkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhcy0xLjAuMy9ub2NvbXBpbGVyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOWZiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L2ZvbnQtYWxpYXMtMS4wLjMvbm9jb21waWxlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1hPUkdfREVGQVVMVF9PUFRJT05TIHB1bGxzIGluIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jeSBjaGFpbnM6CisKK1hPUkdfQ1dBUk5GTEFHUyAtPiBBQ19QUk9HX0NDX0M5OQorWE9SR19TVFJJQ1RfT1BUSU9OIC0+IEFDX1BST0dfQ0NfQzk5LCBYT1JHX0NXQVJORkxBR1MKK1hPUkdfTUFOUEFHRV9TRUNUSU9OUyAtPiBBQ19DQU5PTklDQUxfSE9TVCAtPiBDaGVja3MgaG9zdCAKKworZWFjaCBvZiB3aGljaCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSBob3N0IGNvbXBpbGVyLiBBcyBhbiAiYWxsIgorYXJjaGl0ZWN0dXJlIHBhY2thZ2UsIGl0IHNob3VsZG4ndCBuZWVkIGEgY29tcGlsZXIgKGFuZCBkb2Vzbid0KS4KKworUlAgMTcvNS8yMDExCisKK2RpZmYgLXVOciBmb250LWFsaWFzLTEuMC4zLm9yaWcvL2NvbmZpZ3VyZS5hYyBmb250LWFsaWFzLTEuMC4zL2NvbmZpZ3VyZS5hYworLS0tIGZvbnQtYWxpYXMtMS4wLjMub3JpZy8vY29uZmlndXJlLmFjCTIwMTEtMDUtMTggMjE6Mjk6MTguMzc4MjU4NjQzICswMjAwCisrKysgZm9udC1hbGlhcy0xLjAuMy9jb25maWd1cmUuYWMJMjAxMS0wNS0xOCAyMTozMjowNi44NjUyNTg1OTMgKzAyMDAKK0BAIC0yOCwxMiArMjgsMTIgQEAKKyBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduIGRpc3QtYnppcDJdKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorLSMgUmVxdWlyZSB4b3JnLW1hY3JvczogWE9SR19ERUZBVUxUX09QVElPTlMKKyBtNF9pZm5kZWYoW1hPUkdfTUFDUk9TX1ZFUlNJT05dLAorIAkgIFttNF9mYXRhbChbbXVzdCBpbnN0YWxsIHhvcmctbWFjcm9zIDEuMyBvciBsYXRlciBiZWZvcmUgcnVubmluZyBhdXRvY29uZi9hdXRvZ2VuXSldKQorIFhPUkdfTUFDUk9TX1ZFUlNJT04oMS4zKQorLVhPUkdfREVGQVVMVF9PUFRJT05TCistCisrWE9SR19SRUxFQVNFX1ZFUlNJT04KKytYT1JHX0NIQU5HRUxPRworK1hPUkdfSU5TVEFMTAorIEFDX1BST0dfSU5TVEFMTAorIAorIFhPUkdfRk9OVFJPT1RESVIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhc18xLjAuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC1hbGlhc18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWUxMDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LWFsaWFzXzEuMC4zLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiWCBmb250IGFsaWFzZXMiCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iZjAxNThiODliZTQ5M2Q1MjNkNjlkOWYyOTI2NTAzOCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jeXJpbGxpYy9mb250cy5hbGlhczttZDU9ZjQwNzk1YjA2NDBkNjc4NTgyNmFlY2QzYjE2ZjYxMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vNzVkcGkvZm9udHMuYWxpYXM7bWQ1PTZiYzQ4MDIzZjJhZTdmM2JmYzEwNWRiN2IwZWU2YjQ5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21pc2MvZm9udHMuYWxpYXM7bWQ1PWE4ZWMwNWQ1Mjg0MzFkNGM5NzAzYjU1YTdlZmQ2N2E4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovLzEwMGRwaS9mb250cy5hbGlhczttZDU9ODViZWJkNmNhMjEzYWE2NTZjMzAxYTcyZWI0Mzk3Y2IiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9ub2NvbXBpbGVyLnBhdGNoIgorCitERVBFTkRTID0gInV0aWwtbWFjcm9zLW5hdGl2ZSBmb250LXV0aWwtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAiZW5jb2RpbmdzIGZvbnQtdXRpbCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJmb250LXV0aWwtbmF0aXZlIgorCitpbmhlcml0IGFsbGFyY2gKKworUEUgPSAiMSIKK1BSID0gIiR7SU5DX1BSfS4zIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmQyNWY2NDc5NmZlZjM0YjUzYjQzOWMyZTllZmE1NjIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGI0NTNiMmFhZTFjZmE4MDkwMDA5Y2EwMzcwMzdiOGM1ZTMzMzU1MDY1MWQ1YTE1OGI3MjY0Y2UxZDQ3MmM5YSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC9mb250LXV0aWxfMS4zLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4NTEyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQvZm9udC11dGlsXzEuMy4xLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiWC5PcmcgZm9udCBwYWNrYWdlIGNyZWF0aW9uL2luc3RhbGxhdGlvbiB1dGlsaXRpZXMiCisKK3JlcXVpcmUgeG9yZy1mb250LWNvbW1vbi5pbmMKKworI1VuaWNvZGUgaXMgTUlUCitMSUNFTlNFID0gIkJTRCAmIE1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVkZjIwOGVjNjVlYjg0Y2U1YmI4ZDgyZDhmM2I5Njc1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3VjczJhbnkuYztlbmRsaW5lPTI4O21kNT04MzU3ZGM1NjdmYzYyOGJkMTI2OTZmMTViMmEzM2JjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9iZGZ0cnVuY2F0ZS5jO2VuZGxpbmU9MjY7bWQ1PTRmODJmZmMxMDFhMWIxNjVlYWU5YzY5OThhYmZmOTM3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21hcC1JU084ODU5LTE7YmVnaW5saW5lPTk7ZW5kbGluZT0yMzttZDU9MWNlY2I5ODQwNjMyNDhmMjlmZmU1YzQ2ZjVjMDRmMzQiCisKK0RFUEVORFMgPSAiZW5jb2RpbmdzIHV0aWwtbWFjcm9zIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAidXRpbC1tYWNyb3MtbmF0aXZlIgorUkRFUEVORFNfJHtQTn0gPSAibWtmb250ZGlyIG1rZm9udHNjYWxlIGVuY29kaW5ncyIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSA9ICJta2ZvbnRkaXItbmF0aXZlIG1rZm9udHNjYWxlLW5hdGl2ZSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyMzc1NmRhYjgwOWY5ZWM1MDExYmIyN2ZiMmMzYzdkNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhYTdlYmRiMDcxNTEwNmRkMjU1MDgyZjIzMTBkYmFhMmNkN2UyMjU5NTdjMmE3N2Q3MTk3MjBjN2NjOTJiOTIxIgorCitTWVNST09UX1BSRVBST0NFU1NfRlVOQ1MgKz0gImZvbnR1dGlsX3N5c3Jvb3RfcHJlcHJvY2VzcyIKK2ZvbnR1dGlsX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJc3lzcm9vdF9zdGFnZV9kaXIgJHtEfSR7ZGF0YWRpcn0vZm9udHMvICR7U1lTUk9PVF9ERVNURElSfSR7ZGF0YWRpcn0vZm9udHMvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctZm9udC1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLWZvbnQtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTI2N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLWZvbnQtY29tbW9uLmluYwpAQCAtMCwwICsxLDQyIEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK0RFUEVORFMgPSAiIGVuY29kaW5ncyBmb250LWFsaWFzIGZvbnQtdXRpbC1uYXRpdmUgbWtmb250ZGlyLW5hdGl2ZSBta2ZvbnRzY2FsZS1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJlbmNvZGluZ3MgZm9udC11dGlsIGZvbnQtYWxpYXMiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorSU5DX1BSID0gInIyIgorCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9mb250LyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIG1rZm9udHNjYWxlLW5hdGl2ZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitFWFRSQV9PRU1BS0UgKz0gIkZDQ0FDSEU9L2Jpbi90cnVlIFVUSUxfRElSPSR7U1RBR0lOR19ESVJfVEFSR0VUfVwkXChNQVBGSUxFU19QQVRIXCkiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWZpbmQgJHtEfSR7bGliZGlyfS9YMTEvZm9udHMgLXR5cGUgZiAtbmFtZSBmb250cy5kaXIgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7bGliZGlyfS9YMTEvZm9udHMgLXR5cGUgZiAtbmFtZSBmb250cy5zY2FsZSB8IHhhcmdzIHJtIC1mCisJZmluZCAke0R9JHtkYXRhZGlyfS9mb250cy9YMTEgLXR5cGUgZiAtbmFtZSBmb250cy5kaXIgfCB4YXJncyBybSAtZgorCWZpbmQgJHtEfSR7ZGF0YWRpcn0vZm9udHMvWDExIC10eXBlIGYgLW5hbWUgZm9udHMuc2NhbGUgfCB4YXJncyBybSAtZgkKK30KKworRklMRVNfJHtQTn0gKz0gIiAke2xpYmRpcn0vWDExL2ZvbnRzICR7ZGF0YWRpcn0iCisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgICAgIGZvciBmb250ZGlyIGluIGBmaW5kICREL3Vzci9saWIvWDExL2ZvbnRzIC10eXBlIGRgOyBkbworICAgICAgICAgICAgICAgIG1rZm9udGRpciAkZm9udGRpcgorICAgICAgICAgICAgICAgIG1rZm9udHNjYWxlICRmb250ZGlyCisgICAgICAgIGRvbmUKKyAgICAgICAgZm9yIGZvbnRkaXIgaW4gYGZpbmQgJEQvdXNyL3NoYXJlL2ZvbnRzL1gxMSAtdHlwZSBkYDsgZG8KKyAgICAgICAgICAgICAgICBta2ZvbnRkaXIgJGZvbnRkaXIKKyAgICAgICAgICAgICAgICBta2ZvbnRzY2FsZSAkZm9udGRpcgorICAgICAgICBkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliY2QxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlhvcmcgbWluaW1hbCBmb250cyBkYXRhIgorREVTQ1JJUFRJT04gPSAiTWluaW1hbCBmb250cyByZXF1aXJlZCBieSBYLm9yZy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorCitTRUNUSU9OID0gIngxMS9mb250cyIKKworTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLy4uL21pc2MvZm9udHMuZGlyO21kNT04MmExNDNkOTRkNmE5NzRhYWZlOTcxMzJkMmQ1MTlhYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8uLi9taXNjL2N1cnNvci5wY2YuZ3o7bWQ1PTQwYmM4MTAwMWZlZjRjMjFjYTA4ZGY0MzA1MDE0YTJhIgorCitTUkNfVVJJID0gImZpbGU6Ly9taXNjIgorCitQRSA9ICIxIgorUFIgPSAicjIiCisKK2luaGVyaXQgYWxsYXJjaCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworIyBUaGUgZm9udC1hbGlhcyByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitTID0gIiR7V09SS0RJUn0vbWlzYyIKKworUEFDS0FHRVMgPSAiJHtQTn0iCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vWDExLyAke2RhdGFkaXJ9L2ZvbnRzL1gxMS8iCitSREVQRU5EU18ke1BOfSArPSAiZm9udC1hbGlhcyIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9mb250cy9YMTEvbWlzYworCWluc3RhbGwgLW0gMDY0NCAke1N9LyogJHtEfS8ke2RhdGFkaXJ9L2ZvbnRzL1gxMS9taXNjLworCWluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vWDExCisJbG4gLXNmICR7ZGF0YWRpcn0vZm9udHMvWDExLyAke0R9LyR7bGliZGlyfS9YMTEvZm9udHMgLXMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJjODU3MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEwLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEwLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE4MjkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTExLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTExLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjFjNWUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEzLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTEzLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDJmYTFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE0LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE0LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDExOWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE1LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE1LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWZlODRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE2LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTE2LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYyYzcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2YTc1OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRmYWYxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZkZGQxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxYTJhZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktNy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODZmNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4OWFiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTgucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUlTTzg4NTktOS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyYjUzNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1JU084ODU5LTkucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzLUtPSTgtUi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmY2I4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy1LT0k4LVIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxMy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZjYzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYzYzVkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTEucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTAucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYTdkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTAucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xMy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTMucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDhlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTFiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTUucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MDQ1MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0xNi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTYucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOGIxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktMTYucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0yLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0yLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDFlNmNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTIucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0zLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS0zLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzJiNzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTMucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS00LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS00LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBhNDMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTQucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS01LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS01LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzVlN2MxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTUucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS03LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS03LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzEyZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzQi1JU084ODU5LTcucGNmLmd6CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS04LnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS04LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmJiZDUyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS04LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkwZDMxZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0ItSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM0IucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YzMxODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNCLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg0YjUxMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0xLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTAucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEwLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmIxYTlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEwLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTMucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEzLnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGM4NTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTEzLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTQucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE0LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTkwZjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE0LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTUucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE1LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEyNzNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE1LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMTYucGNmLmd6IGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE2LnBjZi5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTAwYjQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctZm9udC94b3JnLW1pbmltYWwtZm9udHMvbWlzYy82eDEzTy1JU084ODU5LTE2LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMi5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1YmJlZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjODM1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS0zLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNC5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNC5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc4NTQxYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS00LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM1OTNjZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS01LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM1Y2Y1ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS03LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktOS5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLUlTTzg4NTktOS5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk5NDIzZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08tSVNPODg1OS05LnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5neiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvNngxM08ucGNmLmd6Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNTQ2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjLzZ4MTNPLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2N1cnNvci5wY2YuZ3ogYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2N1cnNvci5wY2YuZ3oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlYjcyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvY3Vyc29yLnBjZi5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpciBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWZvbnQveG9yZy1taW5pbWFsLWZvbnRzL21pc2MvZm9udHMuZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMjcxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1mb250L3hvcmctbWluaW1hbC1mb250cy9taXNjL2ZvbnRzLmRpcgpAQCAtMCwwICsxLDQxMCBAQAorNDA5CisxMHgyMC1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktMQorMTB4MjAtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMAorMTB4MjAtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMQorMTB4MjAtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xMworMTB4MjAtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNAorMTB4MjAtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNQorMTB4MjAtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0xNgorMTB4MjAtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTIKKzEweDIwLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS0zCisxMHgyMC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktNAorMTB4MjAtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTUKKzEweDIwLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvODg1OS03CisxMHgyMC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjAtMjAwLTc1LTc1LWMtMTAwLWlzbzg4NTktOAorMTB4MjAtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTIwLTIwMC03NS03NS1jLTEwMC1pc284ODU5LTkKKzEweDIwLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAta29pOC1yCisxMHgyMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yMC0yMDAtNzUtNzUtYy0xMDAtaXNvMTA2NDYtMQorMTJ4MTNqYS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWphLTEzLTEyMC03NS03NS1jLTEyMC1pc28xMDY0Ni0xCisxMngyNC5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0xNzAtMTAwLTEwMC1jLTEyMC1pc284ODU5LTEKKzEyeDI0cmsucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0xMjAtamlzeDAyMDEuMTk3Ni0wCisxOHgxOGphLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtamEtMTgtMTIwLTEwMC0xMDAtYy0xODAtaXNvMTA2NDYtMQorMTh4MThrby5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLWtvLTE4LTEyMC0xMDAtMTAwLWMtMTgwLWlzbzEwNjQ2LTEKKzR4Ni1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMQorNHg2LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTAKKzR4Ni1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTEzCis0eDYtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS0xNAorNHg2LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMTUKKzR4Ni1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTE2Cis0eDYtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTIKKzR4Ni1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktMworNHg2LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS00Cis0eDYtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTUKKzR4Ni1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWlzbzg4NTktNworNHg2LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNDAtaXNvODg1OS04Cis0eDYtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc284ODU5LTkKKzR4Ni1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTQwLWtvaTgtcgorNHg2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc28xMDY0Ni0xCis1eDctSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEKKzV4Ny1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTEwCis1eDctSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xMworNXg3LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktMTQKKzV4Ny1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTE1Cis1eDctSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0xNgorNXg3LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS0yCis1eDctSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTMKKzV4Ny1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktNAorNXg3LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS01Cis1eDctSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1pc284ODU5LTcKKzV4Ny1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tNy03MC03NS03NS1jLTUwLWlzbzg4NTktOAorNXg3LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvODg1OS05Cis1eDctS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTctNzAtNzUtNzUtYy01MC1rb2k4LXIKKzV4Ny5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS03LTcwLTc1LTc1LWMtNTAtaXNvMTA2NDYtMQorNXg4LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xCis1eDgtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xMAorNXg4LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTMKKzV4OC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTE0Cis1eDgtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0xNQorNXg4LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMTYKKzV4OC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktMgorNXg4LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS0zCis1eDgtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTQKKzV4OC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktNQorNXg4LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAtaXNvODg1OS03Cis1eDgtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc284ODU5LTgKKzV4OC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzg4NTktOQorNXg4LUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtNTAta29pOC1yCis1eDgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTUwLWlzbzEwNjQ2LTEKKzZ4MTAtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTAtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDEwLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxMC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTAtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDEwLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTAtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMC1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDEwLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTAtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMC1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDEwLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4MTAtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWtvaTgtcgorNngxMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEyLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEyLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4MTItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMi0xMTAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEyLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMi1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEyLTExMC03NS03NS1jLTYwLWtvaTgtcgorNngxMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTItMTEwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxMy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxMy1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCis2eDEzLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTEKKzZ4MTMtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4MTMtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMworNngxMy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNworNngxMy1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorNngxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWtvaTgtcgorNngxMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorNngxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xCis2eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxM0ItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTMKKzZ4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE0Cis2eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxM0ItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTYKKzZ4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMgorNngxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzQi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTQKKzZ4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNQorNngxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzQi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTgKKzZ4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis2eDEzTy1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMQorNngxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMAorNngxM08tSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworNngxM08tSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNngxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNQorNngxM08tSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorNngxM08tSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0zCis2eDEzTy1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorNngxM08tSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1zZW1pY29uZGVuc2VkLS0xMy0xMjAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tc2VtaWNvbmRlbnNlZC0tMTMtMTIwLTc1LTc1LWMtNjAtaXNvODg1OS03Cis2eDEzTy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOQorNngxM08ucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLXNlbWljb25kZW5zZWQtLTEzLTEyMC03NS03NS1jLTYwLWlzbzEwNjQ2LTEKKzZ4OS1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMQorNng5LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTAKKzZ4OS1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTEzCis2eDktSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS0xNAorNng5LUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMTUKKzZ4OS1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTE2Cis2eDktSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTIKKzZ4OS1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktMworNng5LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS00Cis2eDktSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTUKKzZ4OS1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWlzbzg4NTktNworNng5LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS05LTkwLTc1LTc1LWMtNjAtaXNvODg1OS04Cis2eDktSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc284ODU5LTkKKzZ4OS1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tOS05MC03NS03NS1jLTYwLWtvaTgtcgorNng5LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTktOTAtNzUtNzUtYy02MC1pc28xMDY0Ni0xCis3eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzLUlTTzg4NTktMTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxMy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTMtSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxMy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTMtSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxMy1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDEzLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTMtSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxMy1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDEzLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTgKKzd4MTMtSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxMy1LT0k4LVIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAta29pOC1yCis3eDEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTNCLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xCis3eDEzQi1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEwCis3eDEzQi1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzQi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEzCis3eDEzQi1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE0Cis3eDEzQi1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzQi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE2Cis3eDEzQi1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMgorN3gxM0ItSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTNCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS00Cis3eDEzQi1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktNQorN3gxM0ItSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTNCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS04Cis3eDEzQi1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktOQorN3gxM0IucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTNPLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTEKKzd4MTNPLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxM08tSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTMKKzd4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzg4NTktMTYKKzd4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTQKKzd4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTcwLWlzbzEwNjQ2LTEKKzd4MTQtSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxNC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTAKKzd4MTQtSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTExCis3eDE0LUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxNC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMTQKKzd4MTQtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTE1Cis3eDE0LUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxNC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0yCis3eDE0LUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTMKKzd4MTQtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxNC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS01Cis3eDE0LUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTcKKzd4MTQtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxNC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS05Cis3eDE0LUpJU1gwMjAxLjE5NzYtMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1qaXN4MDIwMS4xOTc2LTAKKzd4MTQtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWtvaTgtcgorN3gxNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis3eDE0Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktMQorN3gxNEItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMAorN3gxNEItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMQorN3gxNEItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xMworN3gxNEItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNAorN3gxNEItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNQorN3gxNEItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0xNgorN3gxNEItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTIKKzd4MTRCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS0zCis3eDE0Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktNAorN3gxNEItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTUKKzd4MTRCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtNzAtaXNvODg1OS03Cis3eDE0Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE0LTEzMC03NS03NS1jLTcwLWlzbzg4NTktOAorN3gxNEItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc284ODU5LTkKKzd4MTRCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNC0xMzAtNzUtNzUtYy03MC1pc28xMDY0Ni0xCis4eDEzLUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTMtSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xMworOHgxMy1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTMtSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNgorOHgxMy1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTMtSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNAorOHgxMy1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTMtSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktOAorOHgxMy1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzLUtPSTgtUi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1rb2k4LXIKKzh4MTMucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxM0ItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEKKzh4MTNCLUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTAKKzh4MTNCLUlTTzg4NTktMTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTNCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTQKKzh4MTNCLUlTTzg4NTktMTUucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTUKKzh4MTNCLUlTTzg4NTktMTYucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTNCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0yCis4eDEzQi1JU084ODU5LTMucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMworOHgxM0ItSVNPODg1OS00LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTNCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS01Cis4eDEzQi1JU084ODU5LTcucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktNworOHgxM0ItSVNPODg1OS04LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTgKKzh4MTNCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS05Cis4eDEzQi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvMTA2NDYtMQorOHgxM08tSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMQorOHgxM08tSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTEwCis4eDEzTy1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTMKKzh4MTNPLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1vLW5vcm1hbC0tMTMtMTIwLTc1LTc1LWMtODAtaXNvODg1OS0xNAorOHgxM08tSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTE1Cis4eDEzTy1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzg4NTktMTYKKzh4MTNPLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTIKKzh4MTNPLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTMKKzh4MTNPLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTQKKzh4MTNPLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTUKKzh4MTNPLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTcKKzh4MTNPLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLW8tbm9ybWFsLS0xMy0xMjAtNzUtNzUtYy04MC1pc284ODU5LTkKKzh4MTNPLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tby1ub3JtYWwtLTEzLTEyMC03NS03NS1jLTgwLWlzbzEwNjQ2LTEKKzh4MTYucGNmLmd6IC1zb255LWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTIwLTEwMC0xMDAtYy04MC1pc284ODU5LTEKKzh4MTZyay5wY2YuZ3ogLXNvbnktZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTgwLWppc3gwMjAxLjE5NzYtMAorOXgxNS1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xCis5eDE1LUlTTzg4NTktMTAucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMAorOXgxNS1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTEKKzl4MTUtSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTEzCis5eDE1LUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNAorOXgxNS1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMTUKKzl4MTUtSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTE2Cis5eDE1LUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTIKKzl4MTUtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMworOXgxNS1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS00Cis5eDE1LUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTUKKzl4MTUtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNworOXgxNS1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS04Cis5eDE1LUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTkKKzl4MTUtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWtvaTgtcgorOXgxNS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCis5eDE1Qi1JU084ODU5LTEucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktMQorOXgxNUItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMAorOXgxNUItSVNPODg1OS0xMS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMQorOXgxNUItSVNPODg1OS0xMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xMworOXgxNUItSVNPODg1OS0xNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNAorOXgxNUItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNQorOXgxNUItSVNPODg1OS0xNi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0xNgorOXgxNUItSVNPODg1OS0yLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTIKKzl4MTVCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS0zCis5eDE1Qi1JU084ODU5LTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktNAorOXgxNUItSVNPODg1OS01LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTUKKzl4MTVCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTUtMTQwLTc1LTc1LWMtOTAtaXNvODg1OS03Cis5eDE1Qi1JU084ODU5LTgucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE1LTE0MC03NS03NS1jLTkwLWlzbzg4NTktOAorOXgxNUItSVNPODg1OS05LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc284ODU5LTkKKzl4MTVCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xNS0xNDAtNzUtNzUtYy05MC1pc28xMDY0Ni0xCis5eDE4LUlTTzg4NTktMS5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMQorOXgxOC1JU084ODU5LTEwLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMAorOXgxOC1JU084ODU5LTExLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMQorOXgxOC1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xMworOXgxOC1JU084ODU5LTE0LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNAorOXgxOC1JU084ODU5LTE1LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNQorOXgxOC1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNgorOXgxOC1JU084ODU5LTIucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTIKKzl4MTgtSVNPODg1OS0zLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0zCis5eDE4LUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktNAorOXgxOC1JU084ODU5LTUucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTUKKzl4MTgtSVNPODg1OS03LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS03Cis5eDE4LUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktOAorOXgxOC1JU084ODU5LTkucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTkKKzl4MTgtS09JOC1SLnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAta29pOC1yCis5eDE4LnBjZi5neiAtbWlzYy1maXhlZC1tZWRpdW0tci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvMTA2NDYtMQorOXgxOEItSVNPODg1OS0xLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMQorOXgxOEItSVNPODg1OS0xMC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTEwCis5eDE4Qi1JU084ODU5LTEzLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTMKKzl4MThCLUlTTzg4NTktMTQucGNmLmd6IC1taXNjLWZpeGVkLWJvbGQtci1ub3JtYWwtLTE4LTEyMC0xMDAtMTAwLWMtOTAtaXNvODg1OS0xNAorOXgxOEItSVNPODg1OS0xNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTE1Cis5eDE4Qi1JU084ODU5LTE2LnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzg4NTktMTYKKzl4MThCLUlTTzg4NTktMi5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTIKKzl4MThCLUlTTzg4NTktMy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTMKKzl4MThCLUlTTzg4NTktNC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTQKKzl4MThCLUlTTzg4NTktNS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTUKKzl4MThCLUlTTzg4NTktNy5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTcKKzl4MThCLUlTTzg4NTktOC5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTgKKzl4MThCLUlTTzg4NTktOS5wY2YuZ3ogLW1pc2MtZml4ZWQtYm9sZC1yLW5vcm1hbC0tMTgtMTIwLTEwMC0xMDAtYy05MC1pc284ODU5LTkKKzl4MThCLnBjZi5neiAtbWlzYy1maXhlZC1ib2xkLXItbm9ybWFsLS0xOC0xMjAtMTAwLTEwMC1jLTkwLWlzbzEwNjQ2LTEKK2FyYWJpYzI0LnBjZi5neiAtYXJhYmljLW5ld3NwYXBlci1tZWRpdW0tci1ub3JtYWwtLTMyLTI0Ni0xMDAtMTAwLXAtMTM3LWlzbzEwNjQ2LTEKK2NsQjZ4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEwLTEwMC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xCNngxMi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDEwLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHgxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tYm9sZC1yLW5vcm1hbC0tMTMtMTMwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI4eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNC0xNDAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsQjh4MTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLWJvbGQtci1ub3JtYWwtLTE2LTE2MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xCOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS04LTgwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbEI5eDE1LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1ib2xkLXItbm9ybWFsLS0xNS0xNTAtNzUtNzUtYy05MC1pc282NDYuMTk5MS1pcnYKK2NsSTZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1pLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbEk4eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1pLW5vcm1hbC0tOC04MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSNHg2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTYtNjAtNzUtNzUtYy00MC1pc282NDYuMTk5MS1pcnYKK2NsUjV4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNTAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI1eDYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tNi02MC03NS03NS1jLTUwLWlzbzY0Ni4xOTkxLWlydgorY2xSNXg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy01MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDEyLUlTTzg4NTktMS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEKK2NsUjZ4MTItSVNPODg1OS0xMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTEwCitjbFI2eDEyLUlTTzg4NTktMTMucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xMworY2xSNngxMi1JU084ODU5LTE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktMTQKK2NsUjZ4MTItSVNPODg1OS0xNS5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTE1CitjbFI2eDEyLUlTTzg4NTktMTYucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0xNgorY2xSNngxMi1JU084ODU5LTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS0yCitjbFI2eDEyLUlTTzg4NTktMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTMKK2NsUjZ4MTItSVNPODg1OS00LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktNAorY2xSNngxMi1JU084ODU5LTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS01CitjbFI2eDEyLUlTTzg4NTktNy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1pc284ODU5LTcKK2NsUjZ4MTItSVNPODg1OS04LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTYwLWlzbzg4NTktOAorY2xSNngxMi1JU084ODU5LTkucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvODg1OS05CitjbFI2eDEyLUtPSTgtUi5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMi0xMjAtNzUtNzUtYy02MC1rb2k4LXIKK2NsUjZ4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNjAtaXNvMTA2NDYtMQorY2xSNngxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy02MC1pc282NDYuMTk5MS1pcnYKK2NsUjZ4Ni5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS02LTYwLTc1LTc1LWMtNjAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI2eDgucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tOC04MC03NS03NS1jLTYwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3gxMC5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMC0xMDAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjd4MTIucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTItMTIwLTc1LTc1LWMtNzAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI3eDE0LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE0LTE0MC03NS03NS1jLTcwLWlzbzY0Ni4xOTkxLWlydgorY2xSN3g4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy03MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTAucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTAtMTAwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDEyLnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTEyLTEyMC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHgxMy5wY2YuZ3ogLXNjaHVtYWNoZXItY2xlYW4tbWVkaXVtLXItbm9ybWFsLS0xMy0xMzAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjh4MTQucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTQwLTc1LTc1LWMtODAtaXNvNjQ2LjE5OTEtaXJ2CitjbFI4eDE2LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03NS03NS1jLTgwLWlzbzY0Ni4xOTkxLWlydgorY2xSOHg4LnBjZi5neiAtc2NodW1hY2hlci1jbGVhbi1tZWRpdW0tci1ub3JtYWwtLTgtODAtNzUtNzUtYy04MC1pc282NDYuMTk5MS1pcnYKK2NsUjl4MTUucGNmLmd6IC1zY2h1bWFjaGVyLWNsZWFuLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTUwLTc1LTc1LWMtOTAtaXNvNjQ2LjE5OTEtaXJ2CitjdS1hbHQxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYWx0ZXJuYXRlIGdseXBocy1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTIyLWlzbzEwNjQ2LTEKK2N1LWFyYWJpYzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBhcmFiaWMgZXh0cmEtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTEwMS1mb250c3BlY2lmaWMtMAorY3UtZGV2bmFnMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IGRldmFuZ2FyaSBleHRyYS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTA1LWZvbnRzcGVjaWZpYy0wCitjdS1saWcxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgbGlnYXR1cmUtbWVkaXVtLXItbm9ybWFsLS0xNy0xMjAtMTAwLTEwMC1wLTE0MS1mb250c3BlY2lmaWMtMAorY3UtcHVhMTIucGNmLmd6IC1tdXR0LWNsZWFybHl1IHB1YS1tZWRpdW0tci1ub3JtYWwtLTE3LTEyMC0xMDAtMTAwLXAtMTEwLWlzbzEwNjQ2LTEKK2N1MTIucGNmLmd6IC1tdXR0LWNsZWFybHl1LW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC0xMjMtaXNvMTA2NDYtMQorY3VhcmFiaWMxMi5wY2YuZ3ogLW11dHQtY2xlYXJseXUgYXJhYmljLW1lZGl1bS1yLW5vcm1hbC0tMTctMTIwLTEwMC0xMDAtcC05My1pc28xMDY0Ni0xCitjdWRldm5hZzEyLnBjZi5neiAtbXV0dC1jbGVhcmx5dSBkZXZhbmFnYXJpLW1lZGl1bS1yLW5vcm1hbC0tMTUtMTIwLTkwLTkwLXAtMTA0LWZvbnRzcGVjaWZpYy0wCitjdXJzb3IucGNmLmd6IGN1cnNvcgorZGVjY3Vycy5wY2YuZ3ogZGVjdyRjdXJzb3IKK2RlY3Nlc3MucGNmLmd6IGRlY3ckc2Vzc2lvbgorZ2IxNmZzLnBjZi5neiAtaXNhcy1mYW5nc29uZyB0aS1tZWRpdW0tci1ub3JtYWwtLTE2LTE2MC03Mi03Mi1jLTE2MC1nYjIzMTIuMTk4MC0wCitnYjE2c3QucGNmLmd6IC1pc2FzLXNvbmcgdGktbWVkaXVtLXItbm9ybWFsLS0xNi0xNjAtNzItNzItYy0xNjAtZ2IyMzEyLjE5ODAtMAorZ2IyNHN0LnBjZi5neiAtaXNhcy1zb25nIHRpLW1lZGl1bS1yLW5vcm1hbC0tMjQtMjQwLTcyLTcyLWMtMjQwLWdiMjMxMi4xOTgwLTAKK2hhbmdsZzE2LnBjZi5neiAtZGFld29vLWdvdGhpYy1tZWRpdW0tci1ub3JtYWwtLTE2LTEyMC0xMDAtMTAwLWMtMTYwLWtzYzU2MDEuMTk4Ny0wCitoYW5nbG0xNi5wY2YuZ3ogLWRhZXdvby1taW5jaG8tbWVkaXVtLXItbm9ybWFsLS0xNi0xMjAtMTAwLTEwMC1jLTE2MC1rc2M1NjAxLjE5ODctMAoraGFuZ2xtMjQucGNmLmd6IC1kYWV3b28tbWluY2hvLW1lZGl1bS1yLW5vcm1hbC0tMjQtMTcwLTEwMC0xMDAtYy0yNDAta3NjNTYwMS4xOTg3LTAKK2ppc2thbjE2LnBjZi5neiAtamlzLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTYtMTUwLTc1LTc1LWMtMTYwLWppc3gwMjA4LjE5ODMtMAoramlza2FuMjQucGNmLmd6IC1qaXMtZml4ZWQtbWVkaXVtLXItbm9ybWFsLS0yNC0yMzAtNzUtNzUtYy0yNDAtamlzeDAyMDguMTk4My0wCitrMTQucGNmLmd6IC1taXNjLWZpeGVkLW1lZGl1bS1yLW5vcm1hbC0tMTQtMTMwLTc1LTc1LWMtMTQwLWppc3gwMjA4LjE5ODMtMAorbWljcm8ucGNmLmd6IG1pY3JvCituaWwyLnBjZi5neiAtbWlzYy1uaWwtbWVkaXVtLXItbm9ybWFsLS0yLTIwLTc1LTc1LWMtMTAtbWlzYy1mb250c3BlY2lmaWMKK29sY3Vyc29yLnBjZi5neiAtc3VuLW9wZW4gbG9vayBjdXJzb3ItLS0tLTEyLTEyMC03NS03NS1wLTE2MC1zdW5vbGN1cnNvci0xCitvbGdsMTAucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xMC0xMDAtNzUtNzUtcC0xMDEtc3Vub2xnbHlwaC0xCitvbGdsMTIucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xMi0xMjAtNzUtNzUtcC0xMTMtc3Vub2xnbHlwaC0xCitvbGdsMTQucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xNC0xNDAtNzUtNzUtcC0xMjgtc3Vub2xnbHlwaC0xCitvbGdsMTkucGNmLmd6IC1zdW4tb3BlbiBsb29rIGdseXBoLS0tLS0xOS0xOTAtNzUtNzUtcC0xNTQtc3Vub2xnbHlwaC0xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZG14XzEuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmRteF8xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIzY2VlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmRteF8xLjEuMy5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJETVg6IERpc3RyaWJ1dGVkIE11bHRpaGVhZCBYIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgRE1YIGV4dGVuc2lvbiBwcm92aWRlcyBzdXBwb3J0IGZvciBjb21tdW5pY2F0aW9uIHdpdGggXAorYW5kIGNvbnRyb2wgb2YgWGRteCgxKSBzZXJ2ZXIuIEF0dHJpYnV0ZXMgb2YgdGhlIFhkbXgoMSkgc2VydmVyIGFuZCBvZiBcCit0aGUgYmFjay1lbmQgc2NyZWVucyBhdHRhY2hlZCB0byB0aGUgc2VydmVyIGNhbiBiZSBxdWVyaWVkIGFuZCBtb2RpZmllZCBcCit2aWEgdGhpcyBwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTNjMzQ5OTIzMWE4MDM1ZWZkMGUwMDRjZmJkM2I3MmEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2RteC5jO2VuZGxpbmU9MzM7bWQ1PWM0M2YxOWFmMDNjN2M4NjE5Y2FkYzk3MjRlZDlhZmUxIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGRteHByb3RvIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmE5ODNlYmE1YTlmMDVkMTUyYTA3MjViOGU4NjMxNTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzk3ZGEzNmQyZTU2YTJkN2I2ZTRmODk2MjQxNzg1YWNjOTVlOTdlYjk1NTc0NjVmZDY2YmEyYTE1NWE3YjIwMSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliZm9udGVuY18xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTgxZjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmZvbnRlbmNfMS4xLjMuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJYIGZvbnQgZW5jb2RpbmcgbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliZm9udGVuYyBpcyBhIGxpYnJhcnkgd2hpY2ggaGVscHMgZm9udCBsaWJyYXJpZXMgXAorcG9ydGFibHkgZGV0ZXJtaW5lIGFuZCBkZWFsIHdpdGggZGlmZmVyZW50IGVuY29kaW5ncyBvZiBmb250cy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk2MjU0YzIwYWI4MWM2M2U2NWIyNmYwZGJjZDRhMWMxIgorCitERVBFTkRTICs9ICJ6bGliIHhwcm90byBmb250LXV0aWwiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjA5MjA5MjRjM2E5ZWJjMTI2NTUxN2JkZDJmOWZkZTUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcwNTg4OTMwZTZmYzk1NDJmZjM4ZTA4ODQ3NzhmYmM2ZTZmZWJmMjFhZGJhYjkyZmQ4ZjUyNGZlNjBhZWZkMjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGliaWNlXzEuMC45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmljZV8xLjAuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDQ5YjdlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYmljZV8xLjAuOS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIklDRTogSW50ZXItQ2xpZW50IEV4Y2hhbmdlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBJbnRlci1DbGllbnQgRXhjaGFuZ2UgKElDRSkgcHJvdG9jb2wgcHJvdmlkZXMgYSBcCitnZW5lcmljIGZyYW1ld29yayBmb3IgYnVpbGRpbmcgcHJvdG9jb2xzIG9uIHRvcCBvZiByZWxpYWJsZSwgYnl0ZS1zdHJlYW0gXAordHJhbnNwb3J0IGNvbm5lY3Rpb25zLiBJdCBwcm92aWRlcyBiYXNpYyBtZWNoYW5pc21zIGZvciBzZXR0aW5nIHVwIGFuZCBcCitzaHV0dGluZyBkb3duIGNvbm5lY3Rpb25zLCBmb3IgcGVyZm9ybWluZyBhdXRoZW50aWNhdGlvbiwgZm9yIFwKK25lZ290aWF0aW5nIHZlcnNpb25zLCBhbmQgZm9yIHJlcG9ydGluZyBlcnJvcnMuICIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDE2MmIxYjNjNmZhODEyZGE5ZDgwNGRjZjg1ODRhOTMiCisKK0RFUEVORFMgKz0gInhwcm90byB4dHJhbnMiCitQUk9WSURFUyA9ICJpY2UiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliSUNFIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gImFkZGZiMWU4OTdjYTgwNzk1MzE2NjljN2M3NzExNzI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhmNzAzMmYyYzFjNjQzNTJiNTQyM2Y2YjQ4YThlYmRjMzM5Y2M2MzA2NGFmMzRkNjZhNmM5YWE3OTc1OWUyMDIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2FyYzRdID0gImFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9eWVzLGFjX2N2X2xpYl9ic2RfYXJjNHJhbmRvbV9idWY9bm8sbGliYnNkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDEtSW5jbHVkZS1jb25maWcuaC1iZWZvcmUtYW55dGhpbmctZWxzZS1pbi0uYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTJmYzBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAxLUluY2x1ZGUtY29uZmlnLmgtYmVmb3JlLWFueXRoaW5nLWVsc2UtaW4tLmMucGF0Y2gKQEAgLTAsMCArMSwxODcgQEAKK0Zyb20gYjE0Njk2YTU1Nzk2ZTczOTYyNGJiZGE0Zjc3MjQyNzAzMmVmZmYyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bGllbiBDcmlzdGF1IDxqY3Jpc3RhdUBkZWJpYW4ub3JnPgorRGF0ZTogU3VuLCAyNiBBcHIgMjAxNSAxNToyMDo1NyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvNF0gSW5jbHVkZSBjb25maWcuaCBiZWZvcmUgYW55dGhpbmcgZWxzZSBpbiAqLmMKKworRGViaWFuIGJ1ZyM3NDkwMDggPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnLzc0OTAwOD4KKworUmVwb3J0ZWQtYnk6IE1pY2hhZWwgVGF1dHNjaG5pZyA8bXRAZGViaWFuLm9yZz4KK1NpZ25lZC1vZmYtYnk6IEp1bGllbiBDcmlzdGF1IDxqY3Jpc3RhdUBkZWJpYW4ub3JnPgorUmV2aWV3ZWQtYnk6IEFsYW4gQ29vcGVyc21pdGggPGFsYW4uY29vcGVyc21pdGhAb3JhY2xlLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCisgc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMgIHwgMyArKysKKyBzcmMvY29tbW9uX2luaXQuYyAgICAgICAgfCAzICsrKworIHNyYy9jb21tb25faW50ZXJmYWNlLmMgICB8IDMgKysrCisgc3JjL2NvbW1vbl9pby5jICAgICAgICAgIHwgMyArKysKKyBzcmMvY29tbW9uX2l0ZXJhdG9yLmMgICAgfCAzICsrKworIHNyYy9jb21tb25fbWFwLmMgICAgICAgICB8IDMgKysrCisgc3JjL2NvbW1vbl92Z2FhcmJfc3R1Yi5jIHwgMyArKysKKyBzcmMvbGludXhfZGV2bWVtLmMgICAgICAgfCA1ICsrKy0tCisgc3JjL29wZW5ic2RfcGNpLmMgICAgICAgIHwgMyArKysKKyBzcmMvc29seF9kZXZmcy5jICAgICAgICAgfCAzICsrKworIHNyYy94ODZfcGNpLmMgICAgICAgICAgICB8IDQgKysrLQorIDExIGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2NhcGFiaWxpdHkuYyBiL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCitpbmRleCA0ODg3NDNkLi4xNWQzOTVkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9jYXBhYmlsaXR5LmMKKysrKyBiL3NyYy9jb21tb25fY2FwYWJpbGl0eS5jCitAQCAtMzEsNiArMzEsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2luaXQuYyBiL3NyYy9jb21tb25faW5pdC5jCitpbmRleCBiMWMwYzNlLi5mN2I1OWJkIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9pbml0LmMKKysrKyBiL3NyYy9jb21tb25faW5pdC5jCitAQCAtMjgsNiArMjgsOSBAQAorICAqCisgICogXGF1dGhvciBJYW4gUm9tYW5pY2sgPGlkckB1cy5pYm0uY29tPgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2ludGVyZmFjZS5jIGIvc3JjL2NvbW1vbl9pbnRlcmZhY2UuYworaW5kZXggNTk3NzhjZi4uY2I5NWU5MCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb25faW50ZXJmYWNlLmMKKysrKyBiL3NyYy9jb21tb25faW50ZXJmYWNlLmMKK0BAIC0yOCw2ICsyOCw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2lvLmMgYi9zcmMvY29tbW9uX2lvLmMKK2luZGV4IGY1YzllNDUuLmU5NTg2YWQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2lvLmMKKysrKyBiL3NyYy9jb21tb25faW8uYworQEAgLTIyLDYgKzIyLDkgQEAKKyAgKiBBdXRob3I6CisgICoJQWRhbSBKYWNrc29uIDxhamF4QHJlZGhhdC5jb20+CisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX2l0ZXJhdG9yLmMgYi9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKK2luZGV4IGNjZjY1NmQuLjJiZWIxODAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX2l0ZXJhdG9yLmMKKysrKyBiL3NyYy9jb21tb25faXRlcmF0b3IuYworQEAgLTI4LDYgKzI4LDkgQEAKKyAgKgorICAqIFxhdXRob3IgSWFuIFJvbWFuaWNrIDxpZHJAdXMuaWJtLmNvbT4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorZGlmZiAtLWdpdCBhL3NyYy9jb21tb25fbWFwLmMgYi9zcmMvY29tbW9uX21hcC5jCitpbmRleCA4NzU3MTUxLi5mMTg1NGJiIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbl9tYXAuYworKysrIGIvc3JjL2NvbW1vbl9tYXAuYworQEAgLTIxLDYgKzIxLDkgQEAKKyAgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAqLworKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMgYi9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKK2luZGV4IDkzOTQyNzMuLmMxNzA4ZjYgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uX3ZnYWFyYl9zdHViLmMKKysrKyBiL3NyYy9jb21tb25fdmdhYXJiX3N0dWIuYworQEAgLTIzLDYgKzIzLDkgQEAKKyAgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICoKKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSAicGNpYWNjZXNzLmgiCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X2Rldm1lbS5jIGIvc3JjL2xpbnV4X2Rldm1lbS5jCitpbmRleCAxMGUzYmRlLi4wZDA1NjdjIDEwMDY0NAorLS0tIGEvc3JjL2xpbnV4X2Rldm1lbS5jCisrKysgYi9zcmMvbGludXhfZGV2bWVtLmMKK0BAIC0zMiw4ICszMiw5IEBACisgICoKKyAgKiBcYXV0aG9yIElhbiBSb21hbmljayA8aWRyQHVzLmlibS5jb20+CisgICovCistCistI2RlZmluZSBfR05VX1NPVVJDRQorKyNpZmRlZiBIQVZFX0NPTkZJR19ICisrI2luY2x1ZGUgImNvbmZpZy5oIgorKyNlbmRpZgorIAorICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CitkaWZmIC0tZ2l0IGEvc3JjL29wZW5ic2RfcGNpLmMgYi9zcmMvb3BlbmJzZF9wY2kuYworaW5kZXggNGQxYjVjZC4uYjhjZTMxOCAxMDA2NDQKKy0tLSBhL3NyYy9vcGVuYnNkX3BjaS5jCisrKysgYi9zcmMvb3BlbmJzZF9wY2kuYworQEAgLTEzLDYgKzEzLDkgQEAKKyAgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgICovCisrI2lmZGVmIEhBVkVfQ09ORklHX0gKKysjaW5jbHVkZSAiY29uZmlnLmgiCisrI2VuZGlmCisgCisgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KK2RpZmYgLS1naXQgYS9zcmMvc29seF9kZXZmcy5jIGIvc3JjL3NvbHhfZGV2ZnMuYworaW5kZXggZjU3MjM5My4uY2Y5NjQ2NyAxMDA2NDQKKy0tLSBhL3NyYy9zb2x4X2RldmZzLmMKKysrKyBiL3NyYy9zb2x4X2RldmZzLmMKK0BAIC0yNSw2ICsyNSw5IEBACisgLyoKKyAgKiBTb2xhcmlzIGRldmZzIGludGVyZmFjZXMKKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0cmluZ3MuaD4KK2RpZmYgLS1naXQgYS9zcmMveDg2X3BjaS5jIGIvc3JjL3g4Nl9wY2kuYworaW5kZXggNDljMWNhYi4uMzJkYWEwNCAxMDA2NDQKKy0tLSBhL3NyYy94ODZfcGNpLmMKKysrKyBiL3NyYy94ODZfcGNpLmMKK0BAIC0xOCw4ICsxOCwxMCBAQAorICAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAgKi8KKysjaWZkZWYgSEFWRV9DT05GSUdfSAorKyNpbmNsdWRlICJjb25maWcuaCIKKysjZW5kaWYKKyAKKy0jZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDY5YTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDItRml4LXF1b3RpbmctaXNzdWUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSA3NjVlMGEzOGNiOGM0MGY4ODY1YWY1Y2IzNTZmZmU2MDM5ZmZiMDhmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhvbWFzIEtsYXVzbmVyIDx3aXpATmV0QlNELm9yZz4KK0RhdGU6IFN1biwgMjIgTWFyIDIwMTUgMjE6Mzg6MjMgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzRdIEZpeCBxdW90aW5nIGlzc3VlLgorCittNCBoYXMgJ1tdJyBhcyBxdW90aW5nIGNoYXJhY3RlcnMsIHNvIGlmIHdlIHdhbnQgJ1tdJyB0bworZW5kIHVwIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LCB3ZSBuZWVkIHRvIHF1b3RlIHRoZW0gYWdhaW4uCisKK1JlcG9ydGVkIGJ5IEdyZWcgVHJveGVsIDxnZHRAaXIuYmJuLmNvbT4uCisKK1NpZ25lZC1vZmYtYnk6IFRob21hcyBLbGF1c25lciA8d2l6QE5ldEJTRC5vcmc+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBjb25maWd1cmUuYWMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU2N2U5ZTEuLjg4ODMzMGIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTc2LDcgKzc2LDcgQEAgY2FzZSAkaG9zdF9vcyBpbgorIAkJOzsKKyAJKm5ldGJzZCopCisgCQljYXNlICRob3N0IGluCistCQkqaVszLTldODYqKQorKwkJKmlbWzMtOV1dODYqKQorIAkJCVBDSUFDQ0VTU19MSUJTPSIkUENJQUNDRVNTX0xJQlMgLWxpMzg2IgorIAkJCTs7CisgCQkqeDg2XzY0KnwqYW1kNjQqKQorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3MvMDAwMy1saW51eF9zeXNmcy5jLUluY2x1ZGUtbGltaXRzLmgtZm9yLVBBVEhfTUFYLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MTNjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDMtbGludXhfc3lzZnMuYy1JbmNsdWRlLWxpbWl0cy5oLWZvci1QQVRIX01BWC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDZiZDJmN2Y5MmVhZTcxMzY2M2Y0ZTEzZjZlMmNiMjM1MjY2MDdiOGMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBGZWxpeCBKYW5kYSA8ZmVsaXguamFuZGFAcG9zdGVvLmRlPgorRGF0ZTogRnJpLCAxIE1heSAyMDE1IDE2OjM2OjUwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMy80XSBsaW51eF9zeXNmcy5jOiBJbmNsdWRlIDxsaW1pdHMuaD4gZm9yIFBBVEhfTUFYCisKK0ZpeGVzIGNvbXBpbGF0aW9uIHdpdGggbXVzbCBsaWJjLgorCitUZXN0ZWQtYnk6IEJlcm5kIEt1aGxzIDxiZXJuZC5rdWhsc0B0LW9ubGluZS5kZT4KK1NpZ25lZC1vZmYtYnk6IEZlbGl4IEphbmRhIDxmZWxpeC5qYW5kYUBwb3N0ZW8uZGU+CitSZXZpZXdlZC1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQWxhbiBDb29wZXJzbWl0aCA8YWxhbi5jb29wZXJzbWl0aEBvcmFjbGUuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKKyBzcmMvbGludXhfc3lzZnMuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvc3JjL2xpbnV4X3N5c2ZzLmMgYi9zcmMvbGludXhfc3lzZnMuYworaW5kZXggNTBkOTRjZi4uM2Y5NWU1MyAxMDA2NDQKKy0tLSBhL3NyYy9saW51eF9zeXNmcy5jCisrKysgYi9zcmMvbGludXhfc3lzZnMuYworQEAgLTQ1LDYgKzQ1LDcgQEAKKyAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisgI2luY2x1ZGUgPGZjbnRsLmg+CisrI2luY2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzeXMvbW1hbi5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzcy8wMDA0LURvbi10LWluY2x1ZGUtc3lzLWlvLmgtb24tYXJtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzI4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlicGNpYWNjZXNzLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSBiNmRmNTIwMjMwNmJkNzExNThiNDgyZjI1Y2EyZTY5MTk2NDVkNGRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgNCBKdW4gMjAxNSAyMDo1NTowNiAtMDcwMAorU3ViamVjdDogW1BBVENIIDQvNF0gRG9uJ3QgaW5jbHVkZSBzeXMvaW8uaCBvbiBhcm0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBzcmMvbGludXhfc3lzZnMuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9saW51eF9zeXNmcy5jIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK2luZGV4IDNmOTVlNTMuLjFlM2FhZDMgMTAwNjQ0CistLS0gYS9zcmMvbGludXhfc3lzZnMuYworKysrIGIvc3JjL2xpbnV4X3N5c2ZzLmMKK0BAIC01MCw3ICs1MCw3IEBACisgI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorIAorLSNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19hcm1fXykKKysjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICNpbmNsdWRlIDxzeXMvaW8uaD4KKyAjZWxzZQorICNkZWZpbmUgaW5iKHgpIC0xCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnBjaWFjY2Vzc18wLjEzLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhNmE2MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwY2lhY2Nlc3NfMC4xMy40LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBQQ0kgYWNjZXNzIGxpYnJhcnkgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gImxpYnBjaWFjY2VzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IGZvciBYIHRvIGFjY2VzcyB0aGUgXAorUENJIGJ1cyBhbmQgZGV2aWNlcyBpbiBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHdheS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1JbmNsdWRlLWNvbmZpZy5oLWJlZm9yZS1hbnl0aGluZy1lbHNlLWluLS5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLUZpeC1xdW90aW5nLWlzc3VlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAzLWxpbnV4X3N5c2ZzLmMtSW5jbHVkZS1saW1pdHMuaC1mb3ItUEFUSF9NQVgucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDQtRG9uLXQtaW5jbHVkZS1zeXMtaW8uaC1vbi1hcm0ucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYWNlNzhhZWM3OTliMWNmNmRmYWVhNTVkMzg3OWVkOWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDdmODY0NjU0NTYxZTRhYzg2MjlhMGVmOWM4ZjA3ZmJjMWY4NTkyZDFiNmM0MTg0MzE1OTNlOWJhMmNmMmZjZiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNzdhYWRhNTIyMmI5YTIyZmJmMzQ3MWZmMzY4NzA2OCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwdGhyZWFkLXN0dWJzXzAuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJwdGhyZWFkLXN0dWJzXzAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTE0YzdmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnB0aHJlYWQtc3R1YnNfMC4zLmJiCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSB0aGF0IHByb3ZpZGVzIHdlYWsgYWxpYXNlcyBmb3IgcHRocmVhZCBmdW5jdGlvbnMiCitERVNDUklQVElPTiA9ICJUaGlzIGxpYnJhcnkgcHJvdmlkZXMgd2VhayBhbGlhc2VzIGZvciBwdGhyZWFkIGZ1bmN0aW9ucyBcCitub3QgcHJvdmlkZWQgaW4gbGliYyBvciBvdGhlcndpc2UgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PVhDQiIKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlZGMxZmVhMDNkOTU5ZjBjMmQ3NDNmZTVjYTc0NmFkIgorCisjREVQRU5EUyA9ICJ4Y2ItcHJvdG8geHByb3RvIGxpYnhhdSBsaWJ4c2x0LW5hdGl2ZSIKKyMgREVQRU5EUyArPSAieHNsdHByb2MtbmF0aXZlIGdwZXJmLW5hdGl2ZSIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnB0aHJlYWQtc3R1YnMtJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImU4ZmEzMWI0MmUxM2Y4N2U4ZjVhN2EyYjczMWRiN2VlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjM1YjZkNTRlM2NjNmYzYmEyODA2MWRhODFhZjY0YjlhOTJiN2I3NTczMTkwOTgxNzI0ODhhNjYwZTNkODcyOTkiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnNtXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5MjUxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlic21fMS4yLjIuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJTTTogU2Vzc2lvbiBNYW5hZ2VtZW50IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBTZXNzaW9uIE1hbmFnZW1lbnQgTGlicmFyeSAoU01saWIpIGlzIGEgbG93LWxldmVsIFwiQ1wiIFwKK2xhbmd1YWdlIGludGVyZmFjZSB0byBYU01QLiAgVGhlIHB1cnBvc2Ugb2YgdGhlIFggU2Vzc2lvbiBNYW5hZ2VtZW50IFwKK1Byb3RvY29sIChYU01QKSBpcyB0byBwcm92aWRlIGEgdW5pZm9ybSBtZWNoYW5pc20gZm9yIHVzZXJzIHRvIHNhdmUgYW5kIFwKK3Jlc3RvcmUgdGhlaXIgc2Vzc2lvbnMuICBBIHNlc3Npb24gaXMgYSBncm91cCBvZiBjbGllbnRzLCBlYWNoIG9mIHdoaWNoIFwKK2hhcyBhIHBhcnRpY3VsYXIgc3RhdGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jMGZiMzdmNDRlMDJiZGJkZTgwNTQ2MDI0NDAwNzI4ZCIKKworREVQRU5EUyArPSAibGliaWNlIHhwcm90byB4dHJhbnMiCisKKyMgbGliU00gY2FuIHdvcmsgd2l0aG91dCBsaWJ1dWlkLCB3ZSBleHBsaWNpdGx5IGRpc2FibGUgaXQgdG8gYnJlYWsgdGhlIGZvbGxvd2luZyBjaXJjdWxhciBkZXBlbmRlbmN5CisjIHdoZW4gRElTVFJPX0ZFQVRVUkVTIGNvbnRhaW5zICdzeXN0ZW1kJyBhbmQgJ3gxMScuCisjIHN5c3RlbWQgLT4gZGJ1cyAtPiBsaWJzbSAtPiB1dGlsLWxpbnV4IC0+IHN5c3RlbWQKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWxpYnV1aWQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliU00iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDk5YTc3NzNjNjVhYmE1MTM2MDlmZTY1MTg1M2M1ZjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGJhY2E4YzlmNWQ5MzQ0NTBhNzA4OTZjNGFkMzhkMDY0NzU1MjEyNTVjYTYzYjcxN2E2NTEwZmRiNmUyODdiZCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEtZGlldF8xLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQwMTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS1kaWV0XzEuNi4zLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgbGlieDExLmluYworCitERVNDUklQVElPTiArPSAiIFN1cHBvcnQgZm9yIFhDTVMgYW5kIFhMT0NBTEUgaXMgZGlzYWJsZWQgaW4gXAordGhpcyB2ZXJzaW9uLiIKKworU1JDX1VSSSArPSAiZmlsZTovL1gxOE5DTVNzdHVicy5kaWZmIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtZGlzYWJsZS14bG9jYWxlLmRpZmYgXAorICAgICAgICAgICAgZmlsZTovL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaCBcCisgICAgICAgICAgICIKKworUlBST1ZJREVTXyR7UE59LWRldiA9ICJsaWJ4MTEtZGV2IgorUlBST1ZJREVTXyR7UE59LWxvY2FsZSA9ICJsaWJ4MTEtbG9jYWxlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmUzNmI3M2Y4YTQyMTQzMTQyZGRhODEyOWYwMmU0ZTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2YzMWE3YzM5ZjJmNTJlOGViZDBkYjk1NjQwMzg0ZTYzNDUxZjliMDE0ZWVkMmJiN2Y1ZGUwM2U4YWRjODExMSIKKworRVhUUkFfT0VDT05GICs9ICItLWRpc2FibGUteGxvY2FsZSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA0ZWFmYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEuaW5jCkBAIC0wLDAgKzEsNDEgQEAKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIEludGVyZmFjZSBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgYSBjbGllbnQgaW50ZXJmYWNlIHRvIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0sIG90aGVyd2lzZSBrbm93biBhcyAnWGxpYicuICBJdCBwcm92aWRlcyBhIGNvbXBsZXRlIEFQSSBmb3IgdGhlIFwKK2Jhc2ljIGZ1bmN0aW9ucyBvZiB0aGUgd2luZG93IHN5c3RlbS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitpbmhlcml0IHNpdGVpbmZvCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L2xpYngxMToiCisKK1BFID0gIjEiCisKK1BST1ZJREVTID0gInZpcnR1YWwvbGlieDExIgorCitYT1JHX1BOID0gImxpYlgxMSIKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlICYgQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTcyMjU1ZGVlNjZiYjAxNTE0MzViMmQ1ZDcwOWZjZjciCisKK0RFUEVORFMgKz0gInhwcm90byB4ZXh0cHJvdG8geHRyYW5zIGxpYnhjYiBrYnByb3RvIGlucHV0cHJvdG8iCitERVBFTkRTICs9ICJ4cHJvdG8tbmF0aXZlIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aC1rZXlzeW1kZWZkaXI9JHtTVEFHSU5HX0lOQ0RJUn0vWDExLyAtLWRpc2FibGUteGY4NmJpZ2ZvbnQiCitFWFRSQV9PRU1BS0UgKz0gJ0NXQVJORkxBR1M9IiInCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ4Y21zIgorUEFDS0FHRUNPTkZJR1t4Y21zXSA9ICItLWVuYWJsZS14Y21zLC0tZGlzYWJsZS14Y21zIgorCisjIHNyYy91dGlsL21ha2VrZXlzIGlzIGJ1aWx0IG5hdGl2ZWx5IGJ1dCBuZWVkcyAtRF9HTlVfU09VUkNFIGRlZmluZWQuCitDUFBGTEFHU19GT1JfQlVJTEQgKz0gIi1EX0dOVV9TT1VSQ0UiCisKK1BBQ0tBR0VTID0rICIke1BOfS14Y2IiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS9YS2V5c3ltREIgJHtkYXRhZGlyfS9YMTEvWEVycm9yREIgJHtkYXRhZGlyfS9YMTEvWGNtcy50eHQiCitGSUxFU18ke1BOfS14Y2IgKz0gIiR7bGliZGlyfS9saWJYMTEteGNiLnNvLioiCitGSUxFU18ke1BOfS1sb2NhbGUgKz0gIiR7ZGF0YWRpcn0vWDExL2xvY2FsZSAke2xpYmRpcn0vWDExL2xvY2FsZSIKKworIyBNdWx0aXBsZSBsaWJ4MTEgZGVyaXZhdGl2ZXMgZnJvbSBmcm9tIHRoaXMgZmlsZSBhbmQgYXJlIHNlbGVjdGVkIGJ5IHZpcnR1YWwvbGlieDExCisjIEEgd29ybGQgYnVpbGQgc2hvdWxkIG9ubHkgYnVpbGQgdGhlIGNvcnJlY3QgdmVyc2lvbiwgbm90IGFsbCBvZiB0aGVtLgorRVhDTFVERV9GUk9NX1dPUkxEID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL1gxOE5DTVNzdHVicy5kaWZmIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9YMThOQ01Tc3R1YnMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDRjZWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9YMThOQ01Tc3R1YnMuZGlmZgpAQCAtMCwwICsxLDUyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYlgxMS0xLjMub3JpZy9zcmMvaW1Db252LmMKKysrKyBsaWJYMTEtMS4zL3NyYy9pbUNvbnYuYworQEAgLTgzLDYgKzgzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBTdWJzdFJlYyBTdWJzdFRhYmxlWworICAqIGZyb20gVUNTIGNoYXIgdG8gc3BlY2lmaWVkIGNoYXJzZXQgY2hhci4KKyAgKiBUaGlzIGNvbnZlcnRlciBpcyBuZWVkZWQgZm9yIF9YaW1HZXRDaGFyQ29kZSBzdWJyb3V0aW5lLgorICAqLworKyNpZmRlZiBYTE9DQUxFCisgWFBvaW50ZXIKKyBfWGltR2V0TG9jYWxlQ29kZSAoCisgICAgIF9YY29uc3QgY2hhcioJZW5jb2RpbmdfbmFtZSkKK0BAIC05Niw2ICs5Nyw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgICAgfQorICAgICByZXR1cm4gY3Z0OworIH0KKysjZW5kaWYKKyAKKyAvKgorICAqIFJldHVybnMgdGhlIGxvY2FsZSBkZXBlbmRlbnQgcmVwcmVzZW50YXRpb24gb2YgYSBrZXlzeW0uCitAQCAtMTA2LDYgKzEwOCw3IEBAIF9YaW1HZXRMb2NhbGVDb2RlICgKKyAgKiB0ZXJtaW5hdGluZyBOVUwgYnl0ZS4gUmV0dXJuIDAgaWYgdGhlIGtleXN5bSBpcyBub3QgcmVwcmVzZW50YWJsZSBpbiB0aGUKKyAgKiBsb2NhbGUKKyAgKi8KKysjaWZkZWYgWExPQ0FMRQorIC8qQVJHU1VTRUQqLworIGludAorIF9YaW1HZXRDaGFyQ29kZSAoCitAQCAtMTM1LDYgKzEzOCw3IEBAIF9YaW1HZXRDaGFyQ29kZSAoCisgICAgICAgICBidWZbY291bnRdPSAnXDAnOworICAgICByZXR1cm4gY291bnQ7CisgfQorKyNlbmRpZgorIAorICNpZmRlZiBYS0IKKyBzdGF0aWMgaW50IGxvb2t1cF9zdHJpbmcoCitJbmRleDogbGliWDExLTEuMy9zcmMvWDE4TkNNU3N0dWJzLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJYMTEtMS4zL3NyYy9YMThOQ01Tc3R1YnMuYworQEAgLTAsMCArMSw0MjggQEAKKysvKgorKyAqIFgxOE5DTVNzdHVicy5jCisrICogLSBQcm92aWRlcyBzdHVicyBhbmQgZHVtbXkgZnVuY3MgbmVlZGVkIHdoZW4gWGNtcyBhbmQgWExvY2FsZSBzdHVmZiByZW1vdmVkCisrICoKKysgKiBDb3B5cmlnaHQgqSAyMDAzIE1hdHRoZXcgQWxsdW0KKysgKgorKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisrICogdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0CisrICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworKyAqIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE1hdHRoZXcgQWxsdW0gbm90IGJlIHVzZWQgaW4KKysgKiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQKKysgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBhbmQgQ29tcGFxIG1ha2VzIG5vCisrICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0CisrICogaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKysgKgorKyAqIE1BVFRIRVcgQUxMVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgCisrICogU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgCisrICogSU4gTk8gRVZFTlQgU0hBTEwgS0VJVEggUEFDS0FSRCBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLAorKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKKysgKiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCisrICogUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgIlhsaWJpbnQuaCIKKysjaW5jbHVkZSAiWGxjaW50LmgiCisrI2luY2x1ZGUgPFgxMS9YbG9jYWxlLmg+CisrI2luY2x1ZGUgPFgxMS9Yb3MuaD4KKysjaWZkZWYgV0lOMzIKKysjdW5kZWYgY2xvc2UKKysjZW5kaWYKKysjaW5jbHVkZSA8WDExL1h1dGlsLmg+CisrI2luY2x1ZGUgIlhsY1B1YkkuaCIKKysKKysjaW5jbHVkZSAiWGNtc2ludC5oIiAJCS8qIGZvciBYY21zQ0NDIHR5cGUgICovCisrI2luY2x1ZGUgIlhsY1B1YkkuaCIgICAgICAgICAgICAvKiBmb3IgWExDZCB0eXBlICovCisrI2luY2x1ZGUgImNvbmZpZy5oIgorKworKyNpZiAhIFhMT0NBTEUKKysKKytCb29sCisrWFN1cHBvcnRzTG9jYWxlKCkKKyt7CisrICByZXR1cm4gRmFsc2U7IAkJCisrfQorKworK2NoYXIgKgorK1hTZXRMb2NhbGVNb2RpZmllcnMoCisrICAgIGNvbnN0IGNoYXIgKm1vZGlmaWVycykKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrWExDZAorK19YT3BlbkxDKAorKyAgICBjaGFyICpuYW1lKQorK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytYTENkCisrX1hsY0N1cnJlbnRMQygpCisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGxjVmFUb0FyZ0xpc3QoCisrICAgIHZhX2xpc3QgdmFyLAorKyAgICBpbnQgY291bnQsCisrICAgIFhsY0FyZ0xpc3QgKmFyZ3NfcmV0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YbGNDb3VudFZhTGlzdCgKKysgICAgdmFfbGlzdCB2YXIsCisrICAgIGludCAqY291bnRfcmV0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrdm9pZAorK19YQ2xvc2VMQygKKysgICAgWExDZCBsY2QpCisreworKyAgcmV0dXJuOworK30KKysKKytpbnQKKytfWGxjQ29udmVydCgKKysgICAgWGxjQ29udiBjb252LAorKyAgICBYUG9pbnRlciAqZnJvbSwKKysgICAgaW50ICpmcm9tX2xlZnQsCisrICAgIFhQb2ludGVyICp0bywKKysgICAgaW50ICp0b19sZWZ0LAorKyAgICBYUG9pbnRlciAqYXJncywKKysgICAgaW50IG51bV9hcmdzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKysvKiBYSU0gU3R1YnMgKi8KKysKKytYUG9pbnRlcgorK19YaW1HZXRMb2NhbGVDb2RlICggX1hjb25zdCBjaGFyKiBlbmNvZGluZ19uYW1lICkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisraW50CisrX1hpbUdldENoYXJDb2RlICgKKysgICAgWFBvaW50ZXIgICAgICAgICAgICB1Y3NfY29udiwKKysgICAgS2V5U3ltICAgICAgICAgICAgICBrZXlzeW0sCisrICAgIHVuc2lnbmVkIGNoYXIqICAgICAgYnVmLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIG5ieXRlcykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrLyogWHJtIFN0dWJzICovCisrCisrWHJtTWV0aG9kcworK19Ycm1Jbml0UGFyc2VJbmZvKAorKyAgICBYUG9pbnRlciAqc3RhdGUpCisreworKyAgICByZXR1cm4gKFhybU1ldGhvZHMpIE5VTEw7CisrfQorKworKy8qIFh3YyBTdHVicyAqLworKworK2ludAorK1h3Y1RleHRFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpvdmVyYWxsX2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZCAKKytYd2NEcmF3U3RyaW5nKERpc3BsYXkgKmRpc3BsYXksCisrCSAgICAgIERyYXdhYmxlIGQsCisrCSAgICAgIFhGb250U2V0IGZvbnRfc2V0LAorKwkgICAgICBHQyBnYywKKysJICAgICAgaW50IHgsIGludCB5LAorKwkgICAgICBfWGNvbnN0IHdjaGFyX3QgKnN0cmluZywKKysJICAgICAgaW50IG51bV93Y2hhcnMpCisreworKyAgOworK30KKysKKyt2b2lkCisrWHdjRHJhd1RleHQoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBYd2NUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisrICAgIGludCAgICAgICAgICAgICAgICAgbml0ZW1zKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1h3Y0RyYXdJbWFnZVN0cmluZygKKysgICAgRGlzcGxheSAgICAgICAgICAgICpkcHksCisrICAgIERyYXdhYmxlICAgICAgICAgICAgZCwKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgR0MgICAgICAgICAgICAgICAgICBnYywKKysgICAgaW50ICAgICAgICAgICAgICAgICB4LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHksCisrICAgIF9YY29uc3Qgd2NoYXJfdCAgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICA7CisrfQorKworK2ludAorK1h3Y1RleHRFc2NhcGVtZW50KAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IHdjaGFyX3QgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgcmV0dXJuIDA7CisrfQorKworK1N0YXR1cworK1h3Y1RleHRQZXJDaGFyRXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCB3Y2hhcl90ICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAgICAgKmlua19leHRlbnRzX2J1ZmZlciwKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLAorKyAgICBpbnQgICAgICAgICAgICAgICAgKm51bV9jaGFycywKKysgICAgWFJlY3RhbmdsZSAgICAgICAgICptYXhfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICAgICAqbWF4X2xvZ2ljYWxfZXh0ZW50cykKKyt7CisrICByZXR1cm4oWGNtc0ZhaWx1cmUpOworK30KKysKKytpbnQKKytYd2NUZXh0UHJvcGVydHlUb1RleHRMaXN0KAorKyAgICBEaXNwbGF5ICpkcHksCisrICAgIGNvbnN0IFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCwKKysgICAgd2NoYXJfdCAqKipsaXN0X3JldCwKKysgICAgaW50ICpjb3VudF9yZXQpCisreworKyAgcmV0dXJuIDA7CisrfQorKworK2ludAorK1h3Y1RleHRMaXN0VG9UZXh0UHJvcGVydHkoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgd2NoYXJfdCAqKmxpc3QsCisrICAgIGludCBjb3VudCwKKysgICAgWElDQ0VuY29kaW5nU3R5bGUgc3R5bGUsCisrICAgIFhUZXh0UHJvcGVydHkgKnRleHRfcHJvcCkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrdm9pZAorK1h3Y0ZyZWVTdHJpbmdMaXN0KHdjaGFyX3QgKipsaXN0KQorK3sKKysgIHJldHVybjsKKyt9CisrCisrCisrdm9pZCBYbWJTZXRXTVByb3BlcnRpZXMgKCAgICAgICAgLyogQWN0dWFsbHkgZnJvbSBtYldNUHJvcHMuYyAqLworKyAgICBEaXNwbGF5ICpkcHksCisrICAgIFdpbmRvdyB3LAorKyAgICBfWGNvbnN0IGNoYXIgKndpbmRvd05hbWUsCisrICAgIF9YY29uc3QgY2hhciAqaWNvbk5hbWUsCisrICAgIGNoYXIgKiphcmd2LAorKyAgICBpbnQgYXJnYywKKysgICAgWFNpemVIaW50cyAqc2l6ZUhpbnRzLAorKyAgICBYV01IaW50cyAqd21IaW50cywKKysgICAgWENsYXNzSGludCAqY2xhc3NIaW50cykKKyt7CisrICByZXR1cm47CisrfQorKworK2ludAorK1htYlRleHRQcm9wZXJ0eVRvVGV4dExpc3QoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgY29uc3QgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wLAorKyAgICBjaGFyICoqKmxpc3RfcmV0LAorKyAgICBpbnQgKmNvdW50X3JldCkKKyt7CisrICByZXR1cm4gWExvY2FsZU5vdFN1cHBvcnRlZDsKKyt9CisrCisraW50CisrWG1iVGV4dExpc3RUb1RleHRQcm9wZXJ0eSgKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBjaGFyICoqbGlzdCwKKysgICAgaW50IGNvdW50LAorKyAgICBYSUNDRW5jb2RpbmdTdHlsZSBzdHlsZSwKKysgICAgWFRleHRQcm9wZXJ0eSAqdGV4dF9wcm9wKQorK3sKKysgIHJldHVybiBYTG9jYWxlTm90U3VwcG9ydGVkOworK30KKysKKytpbnQKKytYbWJUZXh0RXh0ZW50cygKKysgICAgWEZvbnRTZXQgICAgICAgIGZvbnRfc2V0LAorKyAgICBfWGNvbnN0IGNoYXIgICAqdGV4dCwKKysgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuLAorKyAgICBYUmVjdGFuZ2xlICAgICAqb3ZlcmFsbF9pbmtfZXh0ZW50cywKKysgICAgWFJlY3RhbmdsZSAgICAgKm92ZXJhbGxfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt2b2lkCisrWG1iRHJhd1RleHQoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBYbWJUZXh0SXRlbSAgICAgICAgKnRleHRfaXRlbXMsCisrICAgIGludCAgICAgICAgICAgICAgICAgbml0ZW1zKQorK3sKKysgIDsKKyt9CisrCisrdm9pZAorK1htYkRyYXdTdHJpbmcoCisrICAgIERpc3BsYXkgICAgICAgICAgICAqZHB5LAorKyAgICBEcmF3YWJsZSAgICAgICAgICAgIGQsCisrICAgIFhGb250U2V0ICAgICAgICAgICAgZm9udF9zZXQsCisrICAgIEdDICAgICAgICAgICAgICAgICAgZ2MsCisrICAgIGludCAgICAgICAgICAgICAgICAgeCwKKysgICAgaW50ICAgICAgICAgICAgICAgICB5LAorKyAgICBfWGNvbnN0IGNoYXIgICAgICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICAgICAgdGV4dF9sZW4pCisreworKyAgOworK30KKysKKyt2b2lkCisrWG1iRHJhd0ltYWdlU3RyaW5nKAorKyAgICBEaXNwbGF5ICAgICAgICAgICAgKmRweSwKKysgICAgRHJhd2FibGUgICAgICAgICAgICBkLAorKyAgICBYRm9udFNldCAgICAgICAgICAgIGZvbnRfc2V0LAorKyAgICBHQyAgICAgICAgICAgICAgICAgIGdjLAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHgsCisrICAgIGludCAgICAgICAgICAgICAgICAgeSwKKysgICAgX1hjb25zdCBjaGFyICAgICAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgICAgIHRleHRfbGVuKQorK3sKKysgIDsKKyt9CisrCisraW50CisrWG1iVGV4dEVzY2FwZW1lbnQoCisrICAgIFhGb250U2V0ICAgICAgICBmb250X3NldCwKKysgICAgX1hjb25zdCBjaGFyICAgKnRleHQsCisrICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbikKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrU3RhdHVzCisrWG1iVGV4dFBlckNoYXJFeHRlbnRzKAorKyAgICBYRm9udFNldCAgICAgICAgZm9udF9zZXQsCisrICAgIF9YY29uc3QgY2hhciAgICp0ZXh0LAorKyAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW4sCisrICAgIFhSZWN0YW5nbGUgICAgICppbmtfZXh0ZW50c19idWZmZXIsCisrICAgIFhSZWN0YW5nbGUgICAgICpsb2dpY2FsX2V4dGVudHNfYnVmZmVyLAorKyAgICBpbnQgICAgICAgICAgICAgYnVmZmVyX3NpemUsCisrICAgIGludCAgICAgICAgICAgICpudW1fY2hhcnMsCisrICAgIFhSZWN0YW5nbGUgICAgICptYXhfaW5rX2V4dGVudHMsCisrICAgIFhSZWN0YW5nbGUgICAgICptYXhfbG9naWNhbF9leHRlbnRzKQorK3sKKysgIHJldHVybiAwOworK30KKysKKyt1bnNpZ25lZCBpbnQKKytLZXlTeW1Ub1VjczQoS2V5U3ltIGtleXN5bSkKKyt7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmIAorKworKyNpZiAhIFhDTVMKKysKKytYY21zQ0NDIAorK1hjbXNDQ0NPZkNvbG9ybWFwKGRweSwgY21hcCkKKysgICAgRGlzcGxheSAqZHB5OworKyAgICBDb2xvcm1hcCBjbWFwOworK3sKKysgIHJldHVybiBOVUxMOworK30KKysKKytTdGF0dXMKKytfWGNtc1Jlc29sdmVDb2xvclN0cmluZyAoCisrICAgIFhjbXNDQ0MgY2NjLAorKyAgICBjb25zdCBjaGFyICoqY29sb3Jfc3RyaW5nLAorKyAgICBYY21zQ29sb3IgKnBDb2xvcl9leGFjdF9yZXR1cm4sCisrICAgIFhjbXNDb2xvckZvcm1hdCByZXN1bHRfZm9ybWF0KQorK3sKKysgIHJldHVybihYY21zRmFpbHVyZSk7CisrfQorKworK3ZvaWQKKytfWGNtc1VucmVzb2x2ZUNvbG9yKAorKyAgICBYY21zQ0NDIGNjYywKKysgICAgWGNtc0NvbG9yICpwQ29sb3IpCisreworKyAgcmV0dXJuOworK30KKysKKyt2b2lkCisrX1hVbnJlc29sdmVDb2xvcigKKysgICAgWGNtc0NDQyBjY2MsCisrICAgIFhDb2xvciAqcFhDb2xvcikKKyt7CisrICByZXR1cm47CisrfQorKworK1hjbXNDbWFwUmVjICoKKytfWGNtc0FkZENtYXBSZWMoZHB5LCBjbWFwLCB3aW5kb3dJRCwgdmlzdWFsKQorKyAgICBEaXNwbGF5ICpkcHk7CisrICAgIENvbG9ybWFwIGNtYXA7CisrICAgIFdpbmRvdyB3aW5kb3dJRDsKKysgICAgVmlzdWFsICp2aXN1YWw7CisreworKyAgcmV0dXJuIE5VTEw7CisrfQorKworK3ZvaWQKKytfWGNtc1JHQl90b19YQ29sb3IoCisrICAgIFhjbXNDb2xvciAqcENvbG9ycywKKysgICAgWENvbG9yICpwWENvbG9ycywKKysgICAgdW5zaWduZWQgaW50IG5Db2xvcnMpCisreworKyAgcmV0dXJuOworK30KKysKKytYY21zQ21hcFJlYyAqCisrX1hjbXNDb3B5Q21hcFJlY0FuZEZyZWUoCisrICAgIERpc3BsYXkgKmRweSwKKysgICAgQ29sb3JtYXAgc3JjX2NtYXAsCisrICAgIENvbG9ybWFwIGNvcHlfY21hcCkKKyt7CisrICByZXR1cm4gTlVMTDsKKyt9CisrCisrdm9pZAorK19YY21zRGVsZXRlQ21hcFJlYygKKysgICAgRGlzcGxheSAqZHB5LAorKyAgICBDb2xvcm1hcCBjbWFwKQorK3sKKysgIHJldHVybjsKKyt9CisrCisrI2VuZGlmCitJbmRleDogbGliWDExLTEuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCisrKysgbGliWDExLTEuMy9zcmMvTWFrZWZpbGUuYW0KK0BAIC0zMzUsNiArMzM1LDggQEAgaWYgVEhSU1RVQlMKKyBsaWJYMTFfbGFfU09VUkNFUys9VUlUaHJTdHVicy5jCisgZW5kaWYKKyAKKytsaWJYMTFfbGFfU09VUkNFUys9WDE4TkNNU3N0dWJzLmMKKysKKyB4MTFkYXRhZGlyID0gQFgxMV9EQVRBRElSQAorIHgxMWRhdGFfREFUQSA9IFhLZXlzeW1EQiBYRXJyb3JEQgorIAorQEAgLTM0Miw2ICszNDQsNyBAQCBFWFRSQV9ESVNUID0gXAorIAkkKHgxMWRhdGFfREFUQSkgXAorIAlvczJTdHVicy5jIFwKKy0JVUlUaHJTdHVicy5jIAorKwlVSVRoclN0dWJzLmMgXAorKwlYMThOQ01Tc3R1YnMuYworIAorIGlmIFhDQgorIGxpYlgxMV9sYV9TT1VSQ0VTICs9IFwKK0luZGV4OiBsaWJYMTEtMS4zL3NyYy9sb2NraW5nLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYMTEtMS4zLm9yaWcvc3JjL2xvY2tpbmcuYworKysrIGxpYlgxMS0xLjMvc3JjL2xvY2tpbmcuYworQEAgLTY2LDcgKzY2LDkgQEAgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYQorICNkZWZpbmUgTlVNX0ZSRUVfQ1ZMUyA0CisgCisgLyogaW4gbGNXcmFwLmMgKi8KKysjaWZkZWYgWExPQ0FMRQorIGV4dGVybiBMb2NrSW5mb1B0ciBfWGkxOG5fbG9jazsKKysjZW5kaWYKKyAKKyAjaWZkZWYgV0lOMzIKKyBzdGF0aWMgRFdPUkQgX1hfVGxzSW5kZXggPSAoRFdPUkQpLTE7CitAQCAtNTk0LDkgKzU5NiwxMSBAQCBTdGF0dXMgWEluaXRUaHJlYWRzKHZvaWQpCisgICAgIF9YZ2xvYmFsX2xvY2sgPSAmZ2xvYmFsX2xvY2s7CisgICAgIHhtdXRleF9pbml0KF9YZ2xvYmFsX2xvY2stPmxvY2spOworICAgICB4bXV0ZXhfc2V0X25hbWUoX1hnbG9iYWxfbG9jay0+bG9jaywgIlhsaWIgZ2xvYmFsIik7CisrI2lmZGVmIFhMT0NBTEUKKyAgICAgX1hpMThuX2xvY2sgPSAmaTE4bl9sb2NrOworICAgICB4bXV0ZXhfaW5pdChfWGkxOG5fbG9jay0+bG9jayk7CisgICAgIHhtdXRleF9zZXRfbmFtZShfWGkxOG5fbG9jay0+bG9jaywgIlhsaWIgaTE4biIpOworKyNlbmRpZgorICAgICBfWExvY2tNdXRleF9mbiA9IF9YTG9ja011dGV4OworICAgICBfWFVubG9ja011dGV4X2ZuID0gX1hVbmxvY2tNdXRleDsKKyAgICAgX1hDcmVhdGVNdXRleF9mbiA9IF9YQ3JlYXRlTXV0ZXg7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2Rpc2FibGVfdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2Rpc2FibGVfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiNmNkZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZGlzYWJsZV90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2Rpc2FibGUgZmVhdHVyZV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KKworVXBkYXRlIGZvciAxLjYuMQorCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtTnVyZCBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtIGxpYlgxMS0xLjUuMC9ubHMvTWFrZWZpbGUuYW0KKy0tLSBsaWJYMTEtMS41LjAvbmxzL01ha2VmaWxlLmFtCTIwMTItMDYtMDIgMDk6Mzc6MTguMDAwMDAwMDAwICswMzAwCisrKysgbGliWDExLTEuNS4wL25scy9NYWtlZmlsZS5hbQkyMDEzLTAxLTAyIDE2OjEwOjI0Ljk2MDE1NjEzMSArMDIwMAorQEAgLTM2LDExICszNiw2IEBACisgICAgICAgICA8IGxvY2FsZS5kaXIubDEgPiBsb2NhbGUuZGlyLmwyCisJY2F0IGxvY2FsZS5kaXIubDIgbG9jYWxlLmRpci5sMSA+IGxvY2FsZS5kaXIKKworLWlmIEhBVkVfUEVSTAorLUxPR19DT01QSUxFUiA9ICQoUEVSTCkKKy1URVNUUyA9IGNvbXBvc2UtY2hlY2sucGwKKy1lbmRpZiBIQVZFX1BFUkwKKy0KKworICMgUGVyLWxvY2FsZSBkYXRhIGZpbGVzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvZml4LWRpc2FibGUteGxvY2FsZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzM5ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC1kaXNhYmxlLXhsb2NhbGUuZGlmZgpAQCAtMCwwICsxLDE3IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWGlhb2ZlbmcgWWFuIDx4aWFvZmVuZy55YW5Ad2luZHJpdmVyLmNvbT4KKy0tLSBsaWJYMTEtWDExUjcuMC0xLjAuMC9zcmMvRm9udC5jLm9yaWcJMjAwNi0wMy0xMiAxODozNTo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBsaWJYMTEtWDExUjcuMC0xLjAuMC9zcmMvRm9udC5jCTIwMDYtMDMtMTIgMTg6NDA6MjcuMDAwMDAwMDAwICswMTAwCitAQCAtNzAxLDcgKzcwMSwxMSBAQAorICAgICB9CisgICAgIGlmIChsIC0gMiAtIChwIC0gY2hhcnNldCkgPCAwKQorIAlyZXR1cm4gMDsKKysjaWZkZWYgWExPQ0FMRQorICAgICBpZiAoX1hsY05Db21wYXJlSVNPTGF0aW4xKG5hbWUgKyBsIC0gMiAtIChwIC0gY2hhcnNldCksIGNoYXJzZXQsIHAgLSBjaGFyc2V0KSkKKysjZWxzZQorKyAgICBpZiAoc3RybmNhc2VjbXAobmFtZSArIGwgLSAyIC0gKHAgLSBjaGFyc2V0KSwgY2hhcnNldCwgcCAtIGNoYXJzZXQpKQorKyNlbmRpZgorIAlyZXR1cm4gMDsKKyAgICAgaWYgKHN0cmxlbihwICsgMSkgKyBsIC0gMSA+PSBzaXplb2YoYnVmKSAtIDEpCisgCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2ZpeC11dGY4LXdyb25nLWRlZmluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjM0N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMS9maXgtdXRmOC13cm9uZy1kZWZpbmUucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFhpYW9mZW5nIFlhbiA8eGlhb2ZlbmcueWFuQHdpbmRyaXZlci5jb20+CisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3LmhvbGdlcnNjaHVyaWcuZGUvcGF0Y2hlci5odG1sCisjCisKKy0tLSBsaWJYMTEtWDExUjcuMC0xLjAuMC9pbmNsdWRlL1gxMS9YbGliLmh+Zml4LXV0Zjgtd3JvbmctZGVmaW5lCisrKysgbGliWDExLVgxMVI3LjAtMS4wLjAvaW5jbHVkZS9YMTEvWGxpYi5oCitAQCAtMTAzLDcgKzEwMyw3IEBACisgCisgLyogQVBJIG1lbnRpb25pbmcgIlVURjgiIG9yICJ1dGY4IiBpcyBhbiBYRnJlZTg2IGV4dGVuc2lvbiwgaW50cm9kdWNlZCBpbgorICAgIE5vdmVtYmVyIDIwMDAuIEl0cyBwcmVzZW5jZSBpcyBpbmRpY2F0ZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIG1hY3JvLiAqLworLSNkZWZpbmUgWF9IQVZFX1VURjhfU1RSSU5HIDEKKysjdW5kZWYgWF9IQVZFX1VURjhfU1RSSU5HCisgCisgdHlwZWRlZiBjaGFyICpYUG9pbnRlcjsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTEvbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYWJmN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieDExL2xpYlgxMS1BZGQtbWlzc2luZy1OVUxMLWNoZWNrLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK0Zyb20gNGQ4NWQ1ZjNiZDhhZmFjODkzNzM4ZmQ4OGUxOWQ4Y2I1Y2Y5OThmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CitEYXRlOiBTdW4sIDI3IEp1bCAyMDE0IDEzOjEwOjA3IC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYlgxMTogQWRkIG1pc3NpbmcgTlVMTCBjaGVjayBvbiBpbSBhbmQgaW0tPm1ldGhvZHMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCAoYzgyN2VkY2QxYzRhN2Y5MjBhYTI1MjA4MDgzYjViNThkNjBkMmI0NCkKK1NpZ25lZC1vZmYtYnk6IERyZXcgTW9zZWxleSA8ZHJld19tb3NlbGV5QG1lbnRvci5jb20+CisKKy0tLQorIHNyYy94bGliaTE4bi9JQ1dyYXAuYyB8IDUgKysrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC1ydSBsaWJYMTEtMS42LjItb3JpZy9zcmMveGxpYmkxOG4vSUNXcmFwLmMgbGliWDExLTEuNi4yL3NyYy94bGliaTE4bi9JQ1dyYXAuYworLS0tIGxpYlgxMS0xLjYuMi1vcmlnL3NyYy94bGliaTE4bi9JQ1dyYXAuYwkyMDE0LTA3LTI3IDEzOjM4OjI5LjU4NjY2NjQ0OSAtMDQwMAorKysrIGxpYlgxMS0xLjYuMi9zcmMveGxpYmkxOG4vSUNXcmFwLmMJMjAxNC0wNy0yNyAxMzo0MTozOS42NzE2MDkwMzAgLTA0MDAKK0BAIC0xNjksNyArMTY5LDcgQEAKKyAgICAgdmFfbGlzdCB2YXI7CisgICAgIGludCAgICAgdG90YWxfY291bnQ7CisgICAgIFhJTUFyZyAqYXJnczsKKy0gICAgY2hhciAgICpyZXQ7CisrICAgIGNoYXIgICAqcmV0ID0gTlVMTDsKKyAKKyAgICAgLyoKKyAgICAgICogc28gY291bnQgdGhlIHN0dWZmIGRhbmdsaW5nIGhlcmUKK0BAIC0xODUsNyArMTg1LDggQEAKKyAgICAgX1hJTVZhVG9OZXN0ZWRMaXN0KHZhciwgdG90YWxfY291bnQsICZhcmdzKTsKKyAgICAgdmFfZW5kKHZhcik7CisgCistICAgIHJldCA9ICgqaW0tPm1ldGhvZHMtPnNldF92YWx1ZXMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJcmV0ID0gKCppbS0+bWV0aG9kcy0+c2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKyAgICAgWGZyZWUoYXJncyk7CisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTE5Niw3ICsxOTcsNyBAQAorICAgICB2YV9saXN0IHZhcjsKKyAgICAgaW50ICAgICB0b3RhbF9jb3VudDsKKyAgICAgWElNQXJnICphcmdzOworLSAgICBjaGFyICAgKnJldDsKKysgICAgY2hhciAgICpyZXQgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTIxMiw3ICsyMTMsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgcmV0ID0gKCppbS0+bWV0aG9kcy0+Z2V0X3ZhbHVlcykgKGltLCBhcmdzKTsKKysgICAgaWYgKGltICYmIGltLT5tZXRob2RzKQorKwlyZXQgPSAoKmltLT5tZXRob2RzLT5nZXRfdmFsdWVzKSAoaW0sIGFyZ3MpOworICAgICBYZnJlZShhcmdzKTsKKyAgICAgcmV0dXJuIHJldDsKKyB9CitAQCAtMjI4LDcgKzIzMCw3IEBACisgICAgIHZhX2xpc3QgdmFyOworICAgICBpbnQgICAgIHRvdGFsX2NvdW50OworICAgICBYSU1BcmcgKmFyZ3M7CistICAgIFhJQyAgICAgaWM7CisrICAgIFhJQyAgICAgaWMgPSBOVUxMOworIAorICAgICAvKgorICAgICAgKiBzbyBjb3VudCB0aGUgc3R1ZmYgZGFuZ2xpbmcgaGVyZQorQEAgLTI0NCw3ICsyNDYsOCBAQAorICAgICBfWElNVmFUb05lc3RlZExpc3QodmFyLCB0b3RhbF9jb3VudCwgJmFyZ3MpOworICAgICB2YV9lbmQodmFyKTsKKyAKKy0gICAgaWMgPSAoWElDKSAoKmltLT5tZXRob2RzLT5jcmVhdGVfaWMpIChpbSwgYXJncyk7CisrICAgIGlmIChpbSAmJiBpbS0+bWV0aG9kcykKKysJaWMgPSAoWElDKSAoKmltLT5tZXRob2RzLT5jcmVhdGVfaWMpIChpbSwgYXJncyk7CisgICAgIFhmcmVlKGFyZ3MpOworICAgICBpZiAoaWMpIHsKKyAJaWMtPmNvcmUubmV4dCA9IGltLT5jb3JlLmljX2NoYWluOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYngxMV8xLjYuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1MzFjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4MTFfMS42LjMuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBsaWJ4MTEuaW5jCitpbmhlcml0IGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZGlzYWJsZV90ZXN0cy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vbGliWDExLUFkZC1taXNzaW5nLU5VTEwtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTM2YjczZjhhNDIxNDMxNDJkZGE4MTI5ZjAyZTRlMCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZjMxYTdjMzlmMmY1MmU4ZWJkMGRiOTU2NDAzODRlNjM0NTFmOWIwMTRlZWQyYmI3ZjVkZTAzZThhZGM4MTExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhhdV8xLjAuOC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4YXVfMS4wLjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVmOGJmYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4YXVfMS4wLjguYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYYXU6IFggQXV0aG9yaXR5IERhdGFiYXNlIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhhdSBwcm92aWRlcyB0aGUgbWFpbiBpbnRlcmZhY2VzIHRvIHRoZSBYMTEgXAorYXV0aG9yaXNhdGlvbiBoYW5kbGluZywgd2hpY2ggY29udHJvbHMgYXV0aG9yaXNhdGlvbiBmb3IgWCBjb25uZWN0aW9ucywgXAorYm90aCBjbGllbnQtc2lkZSBhbmQgc2VydmVyLXNpZGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworaW5oZXJpdCBnZXR0ZXh0CisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzkwOGUzNDI0OTExOTg0MDEzMjFjZWMxOTU2ODA3ZWMiCisKK0RFUEVORFMgKz0gIiB4cHJvdG8iCitQUk9WSURFUyA9ICJ4YXUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGF1IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2ODVmOGFiYmZmYTZkMTQ1YzBmOTMwZjAwNzAzYjIxYiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmZGQ0NzczMjBhZWI1Y2RkNjcyNzI4Mzg3MjJkNmI3ZDU0NDg4N2RmZTdkZTQ2ZTFlN2NjMGMyN2MyYmVhNGYyIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYWxpYnJhdGUvZml4LXhjYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlL2ZpeC14Y2IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxNDg4MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlL2ZpeC14Y2IucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoZXJlIGlzIG5vIGV4dHJhIHJlcGx5IGRhdGEgYW5kIGlmIHdlIHNheSBub3QgdG8gZGlzZ2FyZCBpdCwgeGNiCit0aHJvd3MgZmF0YWwgYXNzZXJ0cy4KKworUlAgLSAyNi8xMS8wOQorCitJbmRleDogZ2l0L3hjYWxpYnJhdGUuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3hjYWxpYnJhdGUuYwkyMDA5LTExLTI2IDA4OjExOjQ4LjAwMDAwMDAwMCArMDAwMAorKysrIGdpdC94Y2FsaWJyYXRlLmMJMjAwOS0xMS0yNiAwODowOTo1NS4wMDAwMDAwMDAgKzAwMDAKK0BAIC0yMTYsNyArMjE2LDcgQEAKKyAgIHJlcS0+cmVxVHlwZSA9IGluZm8tPmNvZGVzLT5tYWpvcl9vcGNvZGU7CisgICByZXEtPnhDYWxpYnJhdGVSZXFUeXBlID0gWF9YQ2FsaWJyYXRlUmF3TW9kZTsKKyAgIHJlcS0+b24gPSBlbmFibGU7CistICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4RmFsc2UpKSAKKysgIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhUcnVlKSkgCisgICAgIHsKKyAgICAgICBVbmxvY2tEaXNwbGF5IChkcHkpOworICAgICAgIFN5bmNIYW5kbGUgKCk7CitAQCAtMjQwLDcgKzI0MCw3IEBACisgICByZXEtPnhDYWxpYnJhdGVSZXFUeXBlID0gWF9YQ2FsaWJyYXRlU2NyZWVuVG9Db29yZDsKKyAgIHJlcS0+eCA9ICp4OworICAgcmVxLT55ID0gKnk7CistICBpZiAoIV9YUmVwbHkgKGRweSwgKHhSZXBseSAqKSAmcmVwLCAwLCB4RmFsc2UpKSAKKysgIGlmICghX1hSZXBseSAoZHB5LCAoeFJlcGx5ICopICZyZXAsIDAsIHhUcnVlKSkgCisgICAgIHsKKyAgICAgICBVbmxvY2tEaXNwbGF5IChkcHkpOworICAgICAgIFN5bmNIYW5kbGUgKCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNhbGlicmF0ZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZTg2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2FsaWJyYXRlX2dpdC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIlhDYWxpYnJhdGU6IFRvdWNoc2NyZWVuIGNhbGlicmF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhDYWxpYnJhdGUgaXMgYSBsaWJyYXJ5IGZvciBwZXJmb3JtaW5nIHRvdWNoc2NyZWVuIFwKK2NhbGlicmF0aW9uIHdpdGggdGhlIGtkcml2ZSB0c2xpYiB0b3VjaHNjcmVlbiBkcml2ZXIuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Y2FsaWJyYXRlLmg7ZW5kbGluZT0yMTttZDU9ZmE1NzJkZjY0MzlmMGYyMzVmMjYxMmYzNzBmMTUzZDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8veGNhbGlicmF0ZS5jO2VuZGxpbmU9MjE7bWQ1PWZhNTcyZGY2NDM5ZjBmMjM1ZjI2MTJmMzcwZjE1M2Q3IgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGNhbGlicmF0ZXByb3RvIGxpYnhleHQiCisKK1NSQ1JFViA9ICIyMDlkODNhZjYxZWQzOGEwMDJjODA5NjM3N2RlYWMyOTJiM2UzOTZjIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94b3JnL2xpYi9saWJYQ2FsaWJyYXRlIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC14Y2IucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK0ZJTEVTXyR7UE59LWxvY2FsZSArPSAiJHtkYXRhZGlyfS9YMTEvbG9jYWxlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTMxZjIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYi5pbmMKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJYQ0I6IFRoZSBYIHByb3RvY29sIEMgYmluZGluZyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIFggcHJvdG9jb2wgQy1sYW5ndWFnZSBCaW5kaW5nIChYQ0IpIGlzIGEgcmVwbGFjZW1lbnQgXAorZm9yIFhsaWIgZmVhdHVyaW5nIGEgc21hbGwgZm9vdHByaW50LCBsYXRlbmN5IGhpZGluZywgZGlyZWN0IGFjY2VzcyB0byBcCit0aGUgcHJvdG9jb2wsIGltcHJvdmVkIHRocmVhZGluZyBzdXBwb3J0LCBhbmQgZXh0ZW5zaWJpbGl0eS4iCitIT01FUEFHRSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9WENCIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitERVBFTkRTID0gInhjYi1wcm90byB4cHJvdG8gbGlieGF1IHhjYi1wcm90by1uYXRpdmUgbGlicHRocmVhZC1zdHVicyIKKworU1JDX1VSSSA9ICJodHRwOi8veGNiLmZyZWVkZXNrdG9wLm9yZy9kaXN0L2xpYnhjYi0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3hjYmluY2x1ZGVkaXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1jaGVjay5wYXRjaCIKKworUEFDS0FHRVNfRFlOQU1JQyA9ICJebGlieGNiLS4qIgorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlieGNiLnNvLioiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBweXRob25uYXRpdmUgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnhhdSBhbmQgb3RoZXJzIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCAnJHtsaWJkaXJ9JywgJ15saWJ4Y2ItKC4qKVwuc29cLi4qJCcsICdsaWJ4Y2ItJXMnLCAnWENCIGxpYnJhcnkgbW9kdWxlIGZvciAlcycsIGFsbG93X2xpbmtzPVRydWUpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL2Rpc2FibGUtY2hlY2sucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL2Rpc2FibGUtY2hlY2sucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0MWMwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IvZGlzYWJsZS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitUaGUgImNoZWNrIiBwYWNrYWdlIGlzIGNoZWNrZWQgZm9yIHdpdGhvdXQgYW4gZXhwbGljaXQgZW5hYmxlL2Rpc2FibGUgb3B0aW9uLAord2hpY2ggY2FuIGxlYWQgdG8gbm9uLWRldGVybWluaXN0aWMgYnVpbGQgaXNzdWVzIHdpdGggYm90aCBjaGVjayBhbmQgbGlieHNsdC4KKworQXMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBpcyBtaW5pbWFsIGF0IHByZXNlbnQsIHNpbXBseSBkaXNhYmxlIHRoZSB0ZXN0IHN1aXRlLiAgSW4KK3RoZSBmdXR1cmUgaWYgdGhlIHRlc3Qgc3VpdGUgaXMgZXhwYW5kZWQgdGhpcyBjYW4gYmUgbWFkZSBjb25kaXRpb25hbCBvbiB0aGUKK3B0ZXN0IERJU1RST19GRUFUVVJFLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNmQ3YzlhNS4uMjJjY2ViOSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjEsNyArMjEsOCBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyAKKyBBTV9QQVRIX1BZVEhPTihbMi42XSkKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhDSEVDSywgW2NoZWNrID49IDAuOS40XSwgW0hBVkVfQ0hFQ0s9eWVzXSwgW0hBVkVfQ0hFQ0s9bm9dKQorK2RubCBQS0dfQ0hFQ0tfTU9EVUxFUyhDSEVDSywgW2NoZWNrID49IDAuOS40XSwgW0hBVkVfQ0hFQ0s9eWVzXSwgW0hBVkVfQ0hFQ0s9bm9dKQorK0hBVkVfQ0hFQ0s9bm8KKyBBTV9DT05ESVRJT05BTChIQVZFX0NIRUNLLCB0ZXN0IHgkSEFWRV9DSEVDSyA9IHh5ZXMpCisgCisgQUNfQ09ORklHX0hFQURFUlMoW3NyYy9jb25maWcuaF0pCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL3hjYmluY2x1ZGVkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNiL3hjYmluY2x1ZGVkaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyOTdjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2IveGNiaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDI4IEBACitBcyBwa2ctY29uZmlnIC0tdmFyaWFibGUgZG9lc24ndCByZXNwZWN0IHRoZSBzeXNyb290LCBhZGQgdGhlIHBrZy1jb25maWcgc3lzcm9vdAordG8gdGhlIGJlZ2lubmluZyBvZiB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBsYXRlciBvbiB0aGUgaG9zdC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5NGRhNGY3Li5kMjljZDZhIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NCw3ICs2NCw3IEBAIEFDX1NVQlNUKE5FRURFRCkKKyAKKyAjIEZpbmQgdGhlIHhjYi1wcm90byBwcm90b2NvbCBkZXNjcmlwdGlvbnMKKyBBQ19NU0dfQ0hFQ0tJTkcoWENCUFJPVE9fWENCSU5DTFVERURJUikKKy1YQ0JQUk9UT19YQ0JJTkNMVURFRElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXhjYmluY2x1ZGVkaXIgeGNiLXByb3RvYAorK1hDQlBST1RPX1hDQklOQ0xVREVESVI9JFBLR19DT05GSUdfU1lTUk9PVF9ESVIvYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9eGNiaW5jbHVkZWRpciB4Y2ItcHJvdG9gCisgQUNfTVNHX1JFU1VMVCgkWENCUFJPVE9fWENCSU5DTFVERURJUikKKyBBQ19TVUJTVChYQ0JQUk9UT19YQ0JJTkNMVURFRElSKQorIAorQEAgLTc0LDcgKzc0LDcgQEAgQUNfU1VCU1QoWENCUFJPVE9fVkVSU0lPTikKKyAKKyAjIEZpbmQgdGhlIHhjYmdlbiBQeXRob24gcGFja2FnZQorIEFDX01TR19DSEVDS0lORyhYQ0JQUk9UT19YQ0JQWVRIT05ESVIpCistWENCUFJPVE9fWENCUFlUSE9ORElSPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5dGhvbmRpciB4Y2ItcHJvdG9gCisrWENCUFJPVE9fWENCUFlUSE9ORElSPSRQS0dfQ09ORklHX1NZU1JPT1RfRElSL2AkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXB5dGhvbmRpciB4Y2ItcHJvdG9gCisgQUNfTVNHX1JFU1VMVCgkWENCUFJPVE9fWENCUFlUSE9ORElSKQorIEFDX1NVQlNUKFhDQlBST1RPX1hDQlBZVEhPTkRJUikKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfMS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTYyNzAyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl8xLjExLmJiCkBAIC0wLDAgKzEsMTAgQEAKK2luY2x1ZGUgbGlieGNiLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IgorCisKK0RFUEVORFMgKz0gImxpYnhkbWNwIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWE4NzNlYmQzODNkMWE2MDYxMmRkNmVjNmI0MmM3ODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDM2MzVkNzAwNDViOWVkZTkwNzc4ZTY3NTE2MTM1ODI4YTU3ZGU4N2FjNTA4Zjk4NzAyNGY0M2MwMzYyMGZmNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjYl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2NjM2ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y2JfZ2l0LmJiCkBAIC0wLDAgKzEsMTAgQEAKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworaW5jbHVkZSBsaWJ4Y2IuaW5jCisKK1NSQ1JFViA9ICI2MjVlZDU5NmNhZTZkZDgxNzVhZWI2Y2I2ZjI2Nzg0OTI4MDQyZjIyIgorUFYgPSAiMS4xLjkwLjErZ2l0ciR7U1JDUFZ9IgorUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hjYi9saWJ4Y2IiCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGNvbXBvc2l0ZS9jaGFuZ2UtaW5jbHVkZS1vcmRlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDMzMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGUvY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitUaGlzIHBhdGNoIG1ha2VzIHRoZSBidWlsZCB1c2UgaXRzIG93biBYY29tcG9zaXRlLmggb3ZlciByYXRoZXIgdGhhbiBhbgorb2xkZXIgWGNvbXBvc2l0ZS5oIHRoYXQgbWlnaHQgYWxyZWFkeSBiZSBpbnN0YWxsZWQgaW4gdGhlIHN0YWdpbmcgZGlyLgorCitJbmRleDogbGliWGNvbXBvc2l0ZS0wLjQuMy9zcmMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJYY29tcG9zaXRlLTAuNC4zLm9yaWcvc3JjL01ha2VmaWxlLmFtCTIwMTAtMDYtMzAgMjI6NDI6NTMuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliWGNvbXBvc2l0ZS0wLjQuMy9zcmMvTWFrZWZpbGUuYW0JMjAxMC0xMS0yMyAyMzowOTozNC41NDQzMjI5MzAgLTA4MDAKK0BAIC0xOSw3ICsxOSw3IEBACisgIyAgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorICMgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgCistQU1fQ0ZMQUdTID0gJChDV0FSTkZMQUdTKSAkKFhDT01QT1NJVEVfQ0ZMQUdTKSAkKFhGSVhFU19DRkxBR1MpCisrQU1fQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgJChDV0FSTkZMQUdTKSAkKFhDT01QT1NJVEVfQ0ZMQUdTKSAkKFhGSVhFU19DRkxBR1MpCisgQU1fQ1BQRkxBR1MgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorIAorIGxpYl9MVExJQlJBUklFUyA9IGxpYlhjb21wb3NpdGUubGEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjb21wb3NpdGVfMC40LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAyNTcxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Y29tcG9zaXRlXzAuNC40LmJiCkBAIC0wLDAgKzEsMjggQEAKK1NVTU1BUlkgPSAiWGNvbXBvc2l0ZTogWCBDb21wb3NpdGUgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBjb21wb3NpdGUgZXh0ZW5zaW9uIHByb3ZpZGVzIHRocmVlIHJlbGF0ZWQgXAorbWVjaGFuaXNtczogcGVyLWhpZXJhcmNoeSBzdG9yYWdlLCBhdXRvbWF0aWMgc2hhZG93IHVwZGF0ZSwgYW5kIGV4dGVybmFsIFwKK3BhcmVudC4gIEluIHBlci1oaWVyYXJjaHkgc3RvcmFnZSwgdGhlIHJlbmRlcmluZyBvZiBhbiBlbnRpcmUgaGllcmFyY2h5IFwKK29mIHdpbmRvd3MgaXMgcmVkaXJlY3RlZCB0byBvZmYtc2NyZWVuIHN0b3JhZ2UuICBJbiBhdXRvbWF0aWMgc2hhZG93IFwKK3VwZGF0ZSwgd2hlbiBhIGhpZXJhcmNoeSBpcyByZW5kZXJlZCBvZmYtc2NyZWVuLCB0aGUgWCBzZXJ2ZXIgcHJvdmlkZXMgXAorYW4gYXV0b21hdGljIG1lY2hhbmlzbSBmb3IgcHJlc2VudGluZyB0aG9zZSBjb250ZW50cyB3aXRoaW4gdGhlIHBhcmVudCBcCit3aW5kb3cuICBJbiBleHRlcm5hbCBwYXJlbnQsIGEgbWVjaGFuaXNtIGZvciBwcm92aWRpbmcgcmVkaXJlY3Rpb24gb2YgXAorY29tcG9zaXRpbmcgdHJhbnNmb3JtYXRpb25zIHRocm91Z2ggYSBjbGllbnQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zZjI5MDdhYWQ1NDFmNmYyMjZmYmM1OGNjMWIzY2RmMSIKKworREVQRU5EUyArPSAiIGNvbXBvc2l0ZXByb3RvIHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IgorUFJPVklERVMgPSAieGNvbXBvc2l0ZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhjb21wb3NpdGUiCisKK1NSQ19VUkkgKz0gIiBmaWxlOi8vY2hhbmdlLWluY2x1ZGUtb3JkZXIucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmN2EyMThkY2JmNmYwODQ4NTk5YzZjMzZmYzY1YzUxYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlZGUyNTBjZDIwN2Q4YmVlNGEzMzgyNjVjMzAwN2Q3YTY4ZDVhY2E3OTFiNmFjNDFhZjE4ZTlhMmFlYjM0MTc4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhjdXJzb3JfMS4xLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZTRmMjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGN1cnNvcl8xLjEuMTQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJYY3Vyc29yOiBYIEN1cnNvciBtYW5hZ2VtZW50IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlhjdXJzb3IgaXMgYSBzaW1wbGUgbGlicmFyeSBkZXNpZ25lZCB0byBoZWxwIGxvY2F0ZSBhbmQgXAorbG9hZCBjdXJzb3JzLiBDdXJzb3JzIGNhbiBiZSBsb2FkZWQgZnJvbSBmaWxlcyBvciBtZW1vcnkuIEEgbGlicmFyeSBvZiBcCitjb21tb24gY3Vyc29ycyBleGlzdHMgd2hpY2ggbWFwIHRvIHRoZSBzdGFuZGFyZCBYIGN1cnNvciBuYW1lcy4gQ3Vyc29ycyBcCitjYW4gZXhpc3QgaW4gc2V2ZXJhbCBzaXplcyBhbmQgdGhlIGxpYnJhcnkgYXV0b21hdGljYWxseSBwaWNrcyB0aGUgYmVzdCBcCitzaXplLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODkwMmU2NjQzZjdiY2Q3NzkzYjIzZGNkNWQ4MDMxYTQiCisKK0RFUEVORFMgKz0gImxpYnhyZW5kZXIgbGlieGZpeGVzIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWGN1cnNvciIKKworU1JDX1VSSVttZDVzdW1dID0gIjFlN2MxN2FmYmJjZTgzZTIyMTU5MTcwNDdjNTdkMWIzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjliYzZhY2IyMWNhMTRkYTUxYmRhNWJjOTEyYzg5NTViYzZlNWU0MzNmMGFiMDBjNWU4YmVmODQyNTk2YzMzZGYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZGFtYWdlXzEuMS40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzZDcwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRhbWFnZV8xLjEuNC5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIlhkYW1hZ2U6IFggRGFtYWdlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICInRGFtYWdlJyBpcyBhIHRlcm0gdGhhdCBkZXNjcmliZXMgY2hhbmdlcyBtYWtlIHRvIHBpeGVsIFwKK2NvbnRlbnRzIG9mIHdpbmRvd3MgYW5kIHBpeG1hcHMuICBEYW1hZ2UgYWNjdW11bGF0ZXMgYXMgZHJhd2luZyBvY2N1cnMgXAoraW4gdGhlIGRyYXdhYmxlLiAgRWFjaCBkcmF3aW5nIG9wZXJhdGlvbiAnZGFtYWdlcycgb25lIG9yIG1vcmUgXAorcmVjdGFuZ3VsYXIgYXJlYXMgd2l0aGluIHRoZSBkcmF3YWJsZS4gIFRoZSByZWN0YW5nbGVzIGFyZSBndWFyYW50ZWVkIHRvIFwKK2luY2x1ZGUgdGhlIHNldCBvZiBwaXhlbHMgbW9kaWZpZWQgYnkgZWFjaCBvcGVyYXRpb24sIGJ1dCBtYXkgaW5jbHVkZSBcCitzaWduaWZpY2FudGx5IG1vcmUgdGhhbiBqdXN0IHRob3NlIHBpeGVscy4gIFRoZSBEQU1BR0UgZXh0ZW5zaW9uIGFsbG93cyBcCithcHBsaWNhdGlvbnMgdG8gZWl0aGVyIHJlY2VpdmUgdGhlIHJhdyByZWN0YW5nbGVzIGFzIGEgc3RyZWFtIG9mIGV2ZW50cywgXAorb3IgdG8gaGF2ZSB0aGVtIHBhcnRpYWxseSBwcm9jZXNzZWQgd2l0aGluIHRoZSBYIHNlcnZlciB0byByZWR1Y2UgdGhlIFwKK2Ftb3VudCBvZiBkYXRhIHRyYW5zbWl0dGVkIGFzIHdlbGwgYXMgcmVkdWNlIHRoZSBwcm9jZXNzaW5nIGxhdGVuY3kgb25jZSBcCit0aGUgcmVwYWludCBvcGVyYXRpb24gaGFzIHN0YXJ0ZWQuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ZmUxMDFmMzBkZDI0MTM0Y2Y0MzE0Njg2MzI0MTg2OCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZGFtYWdlcHJvdG8gbGlieGZpeGVzIgorUFJPVklERVMgPSAieGRhbWFnZSIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhkYW1hZ2UiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwY2YyOTJkZTJhOWZhMmU5YTkzOWFlZmRlNjhmZDM0ZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3YzNmZTdjNjU3ZTgzNTQ3ZjQ4MjJiZmRlMzBhOTBkODQ1MjRlZmI1NjM2NTQ0ODc2ODQwOWI3N2YwNTM1NWFkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkbWNwXzEuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhkbWNwXzEuMS4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTMwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGRtY3BfMS4xLjIuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJYRE1DUDogWCBEaXNwbGF5IE1hbmFnZXIgQ29udHJvbCBQcm90b2NvbCBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgcHVycG9zZSBvZiB0aGUgWCBEaXNwbGF5IE1hbmFnZXIgQ29udHJvbCBQcm90b2NvbCBcCisoWERNQ1ApIGlzIHRvIHByb3ZpZGUgYSB1bmlmb3JtIG1lY2hhbmlzbSBmb3IgYW4gYXV0b25vbW91cyBkaXNwbGF5IHRvIFwKK3JlcXVlc3QgbG9naW4gc2VydmljZSBmcm9tIGEgcmVtb3RlIGhvc3QuIEFuIFggdGVybWluYWwgKHNjcmVlbiwgXAora2V5Ym9hcmQsIG1vdXNlLCBwcm9jZXNzb3IsIG5ldHdvcmsgaW50ZXJmYWNlKSBpcyBhIHByaW1lIGV4YW1wbGUgb2YgYW4gXAorYXV0b25vbW91cyBkaXNwbGF5LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK2luaGVyaXQgZ2V0dGV4dAorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ1NTlmYjI2ZTEyOTYyNjAyMmUwNTJhNWU2ZTBlMTIzIgorCitERVBFTkRTICs9ICJ4cHJvdG8iCitQUk9WSURFUyA9ICJ4ZG1jcCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZG1jcCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMThhYTVjMTI3OWIwMWY5ZDE4ZTMyOTk5Njk2NjViMmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiODFmZTA5ODY3OTE4ZmZmMjU4Mjk2ZTFlMWUxNTlmMGRjNjM5Y2IzMGQyMDFjNTM1MTlmMjVhYjczYWY0ZTRlMiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbYXJjNF0gPSAiYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj15ZXMsYWNfY3ZfbGliX2JzZF9hcmM0cmFuZG9tX2J1Zj1ubyxsaWJic2QiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZXh0XzEuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYThiNjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF8xLjMuMy5iYgpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhleHQgcHJvdmlkZXMgYW4gWCBXaW5kb3cgU3lzdGVtIGNsaWVudCBpbnRlcmZhY2UgdG8gXAorc2V2ZXJhbCBleHRlbnNpb25zIHRvIHRoZSBYIHByb3RvY29sLiAgVGhlIHN1cHBvcnRlZCBwcm90b2NvbCBleHRlbnNpb25zIFwKK2FyZSBET1VCTEUtQlVGRkVSLCBEUE1TLCBFeHRlbmRlZC1WaXN1YWwtSW5mb3JtYXRpb24sIExCWCwgTUlUX1NITSwgXAorTUlUX1NVTkRSWS1OT05TVEFOREFSRCwgTXVsdGktQnVmZmVyaW5nLCBTRUNVUklUWSwgU0hBUEUsIFNZTkMsIFRPRy1DVVAsIFwKK1hDLUFQUEdST1VQLCBYQy1NSVNDLCBYVEVTVC4gIGxpYlhleHQgYWxzbyBwcm92aWRlcyBhIHNtYWxsIHNldCBvZiBcCit1dGlsaXR5IGZ1bmN0aW9ucyB0byBhaWQgYXV0aG9ycyBvZiBjbGllbnQgQVBJcyBmb3IgWCBwcm90b2NvbCBcCitleHRlbnNpb25zLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ODc5Y2UyNjY3ODU0MTRiZDFjYmMzYmMyZjRkOWQ3YzgiCisKK0RFUEVORFMgKz0gInhwcm90byB2aXJ0dWFsL2xpYngxMSB4ZXh0cHJvdG8gbGlieGF1IGxpYnhkbWNwIgorUFJPVklERVMgPSAieGV4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZXh0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1MmRmN2M0YzFmMGJhZGQ5ZjgyYWIxMjRmYjMyZWI5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTE4ZDRkMzMyMjMxZjMxMzM3MWZkZWZhYzU5ZTM3NzZmNGYwODIzYmNiMjNjZjdjNzMwNWJmYjU3YjE2ZTM1IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhleHRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3OTkxODYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGV4dF9naXQuYmIKQEAgLTAsMCArMSwyNCBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEV4dDogWCBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAibGliWGV4dCBwcm92aWRlcyBhbiBYIFdpbmRvdyBTeXN0ZW0gY2xpZW50IGludGVyZmFjZSB0byBcCitzZXZlcmFsIGV4dGVuc2lvbnMgdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgc3VwcG9ydGVkIHByb3RvY29sIGV4dGVuc2lvbnMgXAorYXJlIERPVUJMRS1CVUZGRVIsIERQTVMsIEV4dGVuZGVkLVZpc3VhbC1JbmZvcm1hdGlvbiwgTEJYLCBNSVRfU0hNLCBcCitNSVRfU1VORFJZLU5PTlNUQU5EQVJELCBNdWx0aS1CdWZmZXJpbmcsIFNFQ1VSSVRZLCBTSEFQRSwgU1lOQywgVE9HLUNVUCwgXAorWEMtQVBQR1JPVVAsIFhDLU1JU0MsIFhURVNULiAgbGliWGV4dCBhbHNvIHByb3ZpZGVzIGEgc21hbGwgc2V0IG9mIFwKK3V0aWxpdHkgZnVuY3Rpb25zIHRvIGFpZCBhdXRob3JzIG9mIGNsaWVudCBBUElzIGZvciBYIHByb3RvY29sIFwKK2V4dGVuc2lvbnMuIgorCitERVBFTkRTICs9ICJ4cHJvdG8gdmlydHVhbC9saWJ4MTEgeGV4dHByb3RvIGxpYnhhdSBsaWJ4ZG1jcCIKK1BST1ZJREVTID0gInhleHQiCitTUkNSRVYgPSAiZDFmM2JjNzdhNDhjOGU0Mjc3MTU3OWUzZmRmMzM3MGIzNWQzMjA5ZCIKK1BFID0gIjEiCitQViA9ICIxLjAuOTkuMStnaXRyJHtTUkNQVn0iCisKK1hPUkdfUE4gPSAibGliWGV4dCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9saWIvJHtYT1JHX1BOfSIKK1MgPSAiJHtXT1JLRElSfS9naXQvIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zml4ZXNfNS4wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMjc0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGZpeGVzXzUuMC4xLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZpeGVzOiBYIEZpeGVzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYIGFwcGxpY2F0aW9ucyBoYXZlIG9mdGVuIG5lZWRlZCB0byB3b3JrIGFyb3VuZCB2YXJpb3VzIFwKK3Nob3J0Y29taW5ncyBpbiB0aGUgY29yZSBYIHdpbmRvdyBzeXN0ZW0uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBcCitwcm92aWRlIHRoZSBtaW5pbWFsIHNlcnZlci1zaWRlIHN1cHBvcnQgbmVjZXNzYXJ5IHRvIGVsaW1pbmF0ZSBwcm9ibGVtcyBcCitjYXVzZWQgYnkgdGhlc2Ugd29ya2Fyb3VuZHMuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYzFjZTQyYzMzNGE2ZjVjY2NiMDI3NzU1NmEwNTNlMCIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgeHByb3RvIGZpeGVzcHJvdG8geGV4dHByb3RvIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhmaXhlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk4NWI4NWY4YjkzODZjODVkZGNmZTEwNzM5MDZiNGQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNiZWMwODUwODRmYTNjYWFlZTUxODA0OTBkZDg3MWYxZWIyMDIwYmE5ZTliMzlhMzBmOTM2OTNmZmMzNDc2NyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4Zm9udF8xLjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjZlMzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmb250XzEuNS4xLmJiCkBAIC0wLDAgKzEsMjIgQEAKK1NVTU1BUlkgPSAiWEZvbnQ6IFggRm9udCByYXN0ZXJpc2F0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlhmb250IHByb3ZpZGVzIHZhcmlvdXMgc2VydmljZXMgZm9yIFggc2VydmVycywgbW9zdCBcCitub3RhYmx5IGZvbnQgc2VsZWN0aW9uIGFuZCByYXN0ZXJpc2F0aW9uICh0aHJvdWdoIGV4dGVybmFsIGxpYnJhcmllcyBcCitzdWNoIGFzIGZyZWV0eXBlKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE0NmM4MDQwZjJmNzM3YmNkMGM0MzVmZWIyYWIxYzJjIgorCitERVBFTkRTICs9ICJmcmVldHlwZSB4dHJhbnMgZm9udHNwcm90byBsaWJmb250ZW5jIHpsaWIiCitQUk9WSURFUyA9ICJ4Zm9udCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYZm9udCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NmY3NmJhOTRiNGM5MDkyMzBiYWMxZTJkY2Q1NTFjNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNzA4OTg1MjdjNzNmOTc1OGY1NTFiYmFiNjEyYWY2MTFiOGEwOTYyMjAyODI5NTY4ZDk0ZjNlZGY0ZDg2MDk4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhmdF8yLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZnRfMi4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2N2NkYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4ZnRfMi4zLjIuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJYRnQ6IFggRnJlZVR5cGUgbGliYXJ5IgorCitERVNDUklQVElPTiA9ICJYZnQgd2FzIGRlc2lnbmVkIHRvIHByb3ZpZGUgZ29vZCBzdXBwb3J0IGZvciBzY2FsYWJsZSBcCitmb250cywgYW5kIHRvIGRvIHNvIGVmZmljaWVudGx5LiAgVW5saWtlIHRoZSBjb3JlIGZvbnRzIHN5c3RlbSwgaXQgXAorc3VwcG9ydHMgZmVhdHVyZXMgc3VjaCBhcyBhbnRpLWFsaWFzaW5nIGFuZCBzdWItcGl4ZWwgcmFzdGVyaXNhdGlvbi4gXAorUGVyaGFwcyBtb3JlIGltcG9ydGFudGx5LCBpdCBnaXZlcyBhcHBsaWNhdGlvbnMgZnVsbCBjb250cm9sIG92ZXIgdGhlIFwKK3dheSBnbHlwaHMgYXJlIHJlbmRlcmVkLCBtYWtpbmcgZmluZSB0eXBlc2V0dGluZyBhbmQgV1lTSVdJRyBkaXNwbGF5IFwKK3Bvc3NpYmxlLiBGaW5hbGx5LCBpdCBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHVzZSBmb250cyB0aGF0IGFyZSBub3QgXAoraW5zdGFsbGVkIHN5c3RlbS13aWRlIGZvciBkaXNwbGF5aW5nIGRvY3VtZW50cyB3aXRoIGVtYmVkZGVkIGZvbnRzLiAgWGZ0IFwKK2lzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGNvcmUgZm9udHMgc3lzdGVtOiB1c2FnZSBvZiBYZnQgcmVxdWlyZXMgXAorZmFpcmx5IGV4dGVuc2l2ZSBjaGFuZ2VzIHRvIHRvb2xraXRzICh1c2VyLWludGVyZmFjZSBsaWJyYXJpZXMpLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTBiOTBiNjBlYjMwZjY1ZmM5YzI2NzNkN2NmNTllMjQiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIGxpYnhyZW5kZXIgZnJlZXR5cGUgZm9udGNvbmZpZyIKK1BST1ZJREVTID0gInhmdCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjMzMWIzYTJhM2ExYTc4YjViNDRjZmJkNDNmODZmY2ZlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImY1YTNjODI0NzYxZGYzNTFjYTkxODI3YWMyMjEwOTA5NDNlZjI4YjI0ODU3MzQ4NjA1MGRlODlmNGJmY2RjNGMiCisKK1hPUkdfUE4gPSAibGliWGZ0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworcHl0aG9uICgpIHsKKyAgICAgICAgaWYgZC5nZXRWYXIoJ0RFQklBTl9OQU1FUycsIFRydWUpOgorICAgICAgICAgICAgZC5zZXRWYXIoJ1BLR18ke1BOfScsICcke01MUFJFRklYfWxpYnhmdDInKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpXzEuNy40LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpXzEuNy40LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MDMzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGlfMS43LjQuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhpIGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgWDExIHByb3RvY29sIHRvIHN1cHBvcnQgXAoraW5wdXQgZGV2aWNlcyBvdGhlciB0aGFuIHRoZSBjb3JlIFgga2V5Ym9hcmQgYW5kIHBvaW50ZXIuICBJdCBhbGxvd3MgXAorY2xpZW50IHByb2dyYW1zIHRvIHNlbGVjdCBpbnB1dCBmcm9tIHRoZXNlIGRldmljZXMgaW5kZXBlbmRlbnRseSBmcm9tIFwKK2VhY2ggb3RoZXIgYW5kIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgY29yZSBkZXZpY2VzLiIKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xN2IwNjQ3ODlmYWI5MzZhMWM1OGM0ZTEzZDk2NWIwZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWElHZXREZXZGb2N1cy5jO2VuZGxpbmU9MjM7bWQ1PWNkZmIwZDQzNWEzM2VjNTdlYTBkMWU4ZTM5NWI3MjlmIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGlucHV0cHJvdG8gbGlieGZpeGVzIgorCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhpIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWM0YTY5YzM0YjE5ZWMxZTQyMTJlODQ5NTQ5NTQ0Y2IiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmNmZmMyNjg2NjE4ZGMxODAzNzI1NjM2Y2Q5MmIzNjM0MmM1MTJkYzYwYTdhMzVjYmEzNGJmNzE5MmE0MjI0NCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4aW5lcmFtYV8xLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjdjODA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhpbmVyYW1hXzEuMS4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitTVU1NQVJZID0gIlhpbmVyYW1hOiBYaW5lcmFtYSBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiWGluZXJhbWEgaXMgYSBzaW1wbGUgbGlicmFyeSBkZXNpZ25lZCB0byBpbnRlcmZhY2UgdGhlIFwKK1hpbmVyYW1hIEV4dGVuc2lvbiBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCBwaHlzaWNhbCBvdXRwdXQgXAorZGV2aWNlcyB3aGljaCBtYXkgYmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBsb2dpY2FsIFggc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02ZjRmNjM0ZDE2NDNhMmU2MzhiYmEzZmNkMTljMjUzNiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvWGluZXJhbWEuYztiZWdpbmxpbmU9MjtlbmRsaW5lPTI1O21kNT1mY2VmMjczYmZiNjYzMzkyNTY0MTFkZDA2ZWE3OWMwMiIKKworREVQRU5EUyArPSAibGlieGV4dCB4aW5lcmFtYXByb3RvIgorUFJPVklERVMgPSAieGluZXJhbWEiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhpbmVyYW1hIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTMzNmRjNDZhZTNiZjVmODFjMjQ3ZjcxMzE0NjFlZmQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2E0NTY5OWYxNzczMDk1YTNmODIxZTQ5MWNiZDVlMTBjODg3YzVhNWZjZTVkOGQzZmNlZDE1YzJmZjc2OThlMiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2Jjb21tb25fMC41LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNjZiNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieGtiY29tbW9uXzAuNS4wLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiR2VuZXJpYyBYS0Iga2V5bWFwIGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJsaWJ4a2Jjb21tb24gaXMgYSBrZXltYXAgY29tcGlsZXIgYW5kIHN1cHBvcnQgbGlicmFyeSB3aGljaCBcCitwcm9jZXNzZXMgYSByZWR1Y2VkIHN1YnNldCBvZiBrZXltYXBzIGFzIGRlZmluZWQgYnkgdGhlIFhLQiBzcGVjaWZpY2F0aW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueGtiY29tbW9uLm9yZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA5NDU3YjE1NmUzMTU1OTcyYWJlYmNhYWFhMGNiNDM0IgorTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MgZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly94a2Jjb21tb24ub3JnL2Rvd25sb2FkLyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyZTFmYWVhZmNjNjA5YzMwYWYzYTU2MWE5MWU4NDE1OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5MGJkNzgyNDc0MmI5YTZmNTJhNmNmODBlMmNhZGQ2ZjUzNDljZjYwMGEzNThkMDgyNjA3NzI2MTViODlkMTljIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2NzIgorCitQQUNLQUdFQ09ORklHID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLGxpYnhjYiB4a2V5Ym9hcmQtY29uZmlnLCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhrYmZpbGVfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhMzQ0YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4a2JmaWxlXzEuMC45LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiWEtCOiBYIEtleWJvYXJkIEZpbGUgbWFuaXB1bGF0aW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYnhrYmZpbGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHJlYWQgYW5kIG1hbmlwdWxhdGUgXAorZGVzY3JpcHRpb24gZmlsZXMgZm9yIFhLQiwgdGhlIFgxMSBrZXlib2FyZCBjb25maWd1cmF0aW9uIGV4dGVuc2lvbi4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThiZTczNjdmN2U1ZDYwNWE0MjZmNzZiYjM3ZDRkNjFmIgorCitERVBFTkRTICs9ICJ2aXJ0dWFsL2xpYngxMSBrYnByb3RvIgorCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSVttZDVzdW1dID0gIjRhNGNmZWFmMjRkYWIxYjk5MTkwMzQ1NWQ2ZDdkNDA0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjUxODE3ZTA1MzA5NjE5NzVkOTUxM2I3NzM5NjBiNGVkZDI3NWY3ZDVjNzIyOTNkNWExNTFlZDRmNDJhZWIxNmEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieG11XzEuMS4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDNiYWVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhtdV8xLjEuMi5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIlhtdSBhbmQgWG11dTogWCBNaXNjZWxsYW5lb3VzIFV0aWxpdHkgbGlicmFyaWVzIgorCitERVNDUklQVElPTiA9ICJUaGUgWG11IExpYnJhcnkgaXMgYSBjb2xsZWN0aW9uIG9mIG1pc2NlbGxhbmVvdXMgKHNvbWUgXAorbWlnaHQgc2F5IHJhbmRvbSkgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdXNlZnVsIGluIGJ1aWxkaW5nIFwKK3ZhcmlvdXMgYXBwbGljYXRpb25zIGFuZCB3aWRnZXRzLiBUaGlzIGxpYnJhcnkgaXMgcmVxdWlyZWQgYnkgdGhlIEF0aGVuYSBcCitXaWRnZXRzLiBBIHN1YnNldCBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgZG8gbm90IHJlbHkgb24gdGhlIEF0aGVuYSBcCitXaWRnZXRzIChsaWJYYXcpIG9yIFggVG9vbGtpdCBJbnN0cmluc2ljcyAobGliWHQpIGFyZSBwcm92aWRlZCBpbiBhIFwKK3NlY29uZCBsaWJyYXJ5LCBsaWJYbXV1LiIKKworCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZWYzZDhlNGU5YzQyMDA0ZjE5NDFmYTIyZjAxZGMxOCIKKworREVQRU5EUyArPSAibGlieHQgbGlieGV4dCIKK1BST1ZJREVTID0gInhtdSIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYbXUiCisKK0xFQURfU09OQU1FID0gImxpYlhtdSIKKworUEFDS0FHRVMgPSsgImxpYnhtdXUiCisKK0ZJTEVTX2xpYnhtdXUgPSAiJHtsaWJkaXJ9L2xpYlhtdXUuc28uKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0MWQ5MmFiNjI3ZGZhMDY1NjgwNzYwNDNmM2UwODllNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3NTZlZGM3YzM4MzI1NGVlZjhiNGUxYjczM2MzYmYxZGMwNjFiNTIzYzlmOTgzM2FjNzA1ODM3OGI4MzQ5ZDBiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHBtXzMuNS4xMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDU4NzRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhwbV8zLjUuMTEuYmIKQEAgLTAsMCArMSwyNyBAQAorcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKKyMgbGlieHBtIHJlcXVpcmVzIHhnZXR0ZXh0IHRvIGJ1aWxkCitpbmhlcml0IGdldHRleHQKKworU1VNTUFSWSA9ICJYcG06IFggUGl4bWFwIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYcG0gcHJvdmlkZXMgc3VwcG9ydCBhbmQgY29tbW9uIG9wZXJhdGlvbiBmb3IgdGhlIFhQTSBcCitwaXhtYXAgZm9ybWF0LCB3aGljaCBpcyBjb21tb25seSB1c2VkIGluIGxlZ2FjeSBYIGFwcGxpY2F0aW9ucy4gIFhQTSBpcyBcCithbiBleHRlbnNpb24gb2YgdGhlIG1vbm9jaHJvbWUgWEJNIGJpdG1hcCBzcGVjaWZpY2llZCBpbiB0aGUgWCBcCitwcm90b2NvbC4iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTFmNDI3MGIwMTJlY2Q0YWIxYTE2NGY1ZjRlZDZjZjciCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnNtIGxpYnh0IgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcG0iCisKK1BBQ0tBR0VTID0rICJzeHBtIGN4cG0iCitGSUxFU19jeHBtID0gIiR7YmluZGlyfS9jeHBtIgorRklMRVNfc3hwbSA9ICIke2JpbmRpcn0vc3hwbSIKKworU1JDX1VSSVttZDVzdW1dID0gIjc2OWVlMTJhNDM2MTFjZGViZDM4MDk0ZWFmODNmM2YwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImM1YmRhZmE1MWQxYWUzMDA4NmZhYzAxYWI4M2JlOGQ0N2ZlMTE3YjIzOGQzNDM3ZjhlOTY1NDM0MDkwZTA0MWMiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyYW5kcl8xLjUuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmFuZHJfMS41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJiYmFlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4cmFuZHJfMS41LjAuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFJlc2l6ZSwgUm90YXRlIGFuZCBSZWZsZWN0IEV4dGVuc2lvbiwgY2FsbGVkIFJhbmRSIFwKK2ZvciBzaG9ydCwgYnJpbmdzIHRoZSBhYmlsaXR5IHRvIHJlc2l6ZSwgcm90YXRlIGFuZCByZWZsZWN0IHRoZSByb290IFwKK3dpbmRvdyBvZiBhIHNjcmVlbi4gSXQgaXMgYmFzZWQgb24gdGhlIFggUmVzaXplIGFuZCBSb3RhdGUgRXh0ZW5zaW9uIGFzIFwKK3NwZWNpZmllZCBpbiB0aGUgUHJvY2VlZGluZ3Mgb2YgdGhlIDIwMDEgVXNlbml4IFRlY2huaWNhbCBDb25mZXJlbmNlIFwKK1tSQU5EUl0uIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jOWQxYTIxMThhNmNkNTcyNzUyMWRiOGU3YTJmZWU2OSIKKworREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgcmFuZHJwcm90byBsaWJ4cmVuZGVyIGxpYnhleHQiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJhbmRyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzMDk3NjI4NjdlNDFjNmZkODEzZGE4ODBkOGExYmM5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2Zjg2NDk1OWI3ZmMzNWRiMTE3NTRiMjcwZDcxMTA2ZWY1YjVjZjM2MzQyNmFhNTg1ODljYjhhYzgyNjZkZTU4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlbmRlcl8wLjkuOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmRlMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZW5kZXJfMC45LjkuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJYUmVuZGVyOiBYIFJlbmRlcmluZyBFeHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggUmVuZGVyaW5nIEV4dGVuc2lvbiAoUmVuZGVyKSBpbnRyb2R1Y2VzIGRpZ2l0YWwgXAoraW1hZ2UgY29tcG9zaXRpb24gYXMgdGhlIGZvdW5kYXRpb24gb2YgYSBuZXcgcmVuZGVyaW5nIG1vZGVsIHdpdGhpbiB0aGUgXAorWCBXaW5kb3cgU3lzdGVtLiBSZW5kZXJpbmcgZ2VvbWV0cmljIGZpZ3VyZXMgaXMgYWNjb21wbGlzaGVkIGJ5IFwKK2NsaWVudC1zaWRlIHRlc3NlbGxhdGlvbiBpbnRvIGVpdGhlciB0cmlhbmdsZXMgb3IgdHJhcGV6b2lkcy4gIFRleHQgaXMgXAorZHJhd24gYnkgbG9hZGluZyBnbHlwaHMgaW50byB0aGUgc2VydmVyIGFuZCByZW5kZXJpbmcgc2V0cyBvZiB0aGVtLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDhiYzcxOTg2ZDNiOWIzNjM5ZjZkZmQ2ZmFjOGYxOTYiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIHJlbmRlcnByb3RvIHhwcm90byB4ZG1jcCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYcmVuZGVyIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1ZGI5Mjk2MmIxMjRjYTNhODE0N2RhYWU0YWRiZDYyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmYzJmZTU3OTgwYTE0MDkyNDI2ZGZmY2QxZjJkOWRlMDk4N2I5ZDQwYWRlYTY2M2JkNzBkNjM0MmMwZTliZTFhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHJlc18xLjAuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA0YzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhyZXNfMS4wLjcuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYUmVzOiBYIFJlc291cmNlIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYUmVzIHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIFwKK3RoZSBSZXNvdXJjZSBleHRlbnNpb24gdG8gdGhlIFggcHJvdG9jb2wuICBUaGUgUmVzb3VyY2UgZXh0ZW5zaW9uIGFsbG93cyBcCitmb3IgWCBjbGllbnRzIHRvIHNlZSBhbmQgbW9uaXRvciB0aGUgWCByZXNvdXJjZSB1c2FnZSBvZiB2YXJpb3VzIGNsaWVudHMgXAorKHBpeG1hcHMsIGV0IGFsKS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PThjODk0NDFhOGRmMjYxYmRjNTY1ODc0NjVlMTNjN2ZhIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHJlc291cmNlcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHJlcyIKKworU1JDX1VSSVttZDVzdW1dID0gIjQ1ZWYyOTIwNmE2YjU4MjU0YzgxYmVhMjhlYzZjOTVmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI2ODk5MDU0YWE4N2Y4MWIxN2JlY2M2OGU4NjQ1YjI0MGYxNDA0NjRjZjkwYzQyNjE2ZWJiMjYzZWM1ZmEwZTUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4c2NybnNhdmVyXzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NGU1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNjcm5zYXZlcl8xLjIuMi5iYgpAQCAtMCwwICsxLDIzIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYc2NybnNhdmVyOiBYIFNjcmVlbiBTYXZlciBleHRlbnNpb24gbGlicmFyeSIKKworREVTQ1JJUFRJT04gPSAiVGhlIFggV2luZG93IFN5c3RlbSBwcm92aWRlcyBzdXBwb3J0IGZvciBjaGFuZ2luZyB0aGUgXAoraW1hZ2Ugb24gYSBkaXNwbGF5IHNjcmVlbiBhZnRlciBhIHVzZXItc2V0dGFibGUgcGVyaW9kIG9mIGluYWN0aXZpdHkgdG8gXAorYXZvaWQgYnVybmluZyB0aGUgY2F0aG9kZSByYXkgdHViZSBwaG9zcGhvcnMuIEhvd2V2ZXIsIG5vIGludGVyZmFjZXMgYXJlIFwKK3Byb3ZpZGVkIGZvciB0aGUgdXNlciB0byBjb250cm9sIHRoZSBpbWFnZSB0aGF0IGlzIGRyYXduLiBUaGlzIGV4dGVuc2lvbiBcCithbGxvd3MgYW4gZXh0ZXJuYWwgXCJzY3JlZW4gc2F2ZXJcIiBjbGllbnQgdG8gZGV0ZWN0IHdoZW4gdGhlIGFsdGVybmF0ZSBcCitpbWFnZSBpcyB0byBiZSBkaXNwbGF5ZWQgYW5kIHRvIHByb3ZpZGUgdGhlIGdyYXBoaWNzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yMWZkMTU0ZWU3NTc4MTM2MzJhZGE4NzFhMzQxMTNmYiIKKworREVQRU5EUyArPSAibGlieGV4dCBzY3Juc2F2ZXJwcm90byIKK1BST1ZJREVTID0gImxpYnhzcyIKK1JSRVBMQUNFU18ke1BOfSA9ICJsaWJ4c3MiCitQRSA9ICIxIgorCitYT1JHX1BOID0gImxpYlhTY3JuU2F2ZXIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YTc3M2IxNjE2NWUzOWU5Mzg2NTBiY2M5MDI3YzFkNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZmYxZWZhNzM0MWM3ZjM0YmNmOWIxN2M4OTY0OGQ2MzI1ZGRhYWUyMmUzOTA0ZTA5MTc5NGUwYjQ0MjZjZTFkIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHNobWZlbmNlXzEuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTM0YjFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnhzaG1mZW5jZV8xLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJTaGFyZWQgbWVtb3J5ICdTeW5jRmVuY2UnIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgbGlicmFyeSBvZmZlcnMgYSBDUFUtYmFzZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSBjb21wYXRpYmxlIFwKK3dpdGggdGhlIFggU3luY0ZlbmNlIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzIFwKK3VzaW5nIGZpbGUgZGVzY3JpcHRvciBwYXNzaW5nLiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDdlNTA4Y2EyODBmZGU5NzkwNmVhY2I3Nzg5MmMzYWMiCisKK0RFUEVORFMgKz0gInZpcnR1YWwvbGlieDExIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2NjY2MmU3Njg5OTExMmMwZjk5ZTIyZjJmYzc3NWE3ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMjFiMmQxZmQ3OGMxZWZiZTFmMmMxNmRhZTFjYjIzZjhmZDIzMWRjZjg5MTQ2NWI4ZGViZTYzNmE5MDU0YjBjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh0L2xpYnh0X2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNmM3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHQvbGlieHRfZml4X2Zvcl94MzIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1RoaXMgZml4ZXMgY29tcGlsYXRpb24gd2l0aCB4MzIgdG9vbGNoYWluLgorCitSZWNlaXZlZCB0aGlzIHBhdGNoIGZyb20gSC5KLiBMdSA8aGpsLnRvb2xzQGdtYWlsLmNvbT4KK1NpZ25lZC1PZmYtQnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+IDIwMTEvMTIvMQorCisKKy0tLSBsaWJYdC0xLjEuMS9pbmNsdWRlL1gxMS9YdG9zLmgueDMyCTIwMTEtMDItMDggMDc6NTY6NDAuMDAwMDAwMDAwIC0wODAwCisrKysgbGliWHQtMS4xLjEvaW5jbHVkZS9YMTEvWHRvcy5oCTIwMTEtMTEtMzAgMTc6MTk6MjcuNDczMzQ5NzcwIC0wODAwCitAQCAtNjIsNyArNjIsNyBAQCBTT0ZUV0FSRS4KKyAgICAgZGVmaW5lZChfX3NwYXJjNjRfXykgfHwgXAorICAgICBkZWZpbmVkKF9fczM5MHhfXykgfHwgXAorICAgICAoZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX0xQNjRfXykpIHx8IFwKKy0gICAgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoYW1kNjQpIHx8IFwKKysgICAgKChkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkpICYmIGRlZmluZWQoX19MUDY0X18pKSB8fCBcCisgICAgIGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgXAorICAgICAoZGVmaW5lZChzZ2kpICYmIChfTUlQU19TWkxPTkcgPT0gNjQpKQorICNkZWZpbmUgTE9ORzY0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRfMS4xLjUuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRfMS4xLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlZDBiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dF8xLjEuNS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlh0OiBYIFRvb2xraXQgSW50cmluc2ljcyBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGUgSW50cmluc2ljcyBhcmUgYSBwcm9ncmFtbWluZyBsaWJyYXJ5IHRhaWxvcmVkIHRvIHRoZSBcCitzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB1c2VyIGludGVyZmFjZSBjb25zdHJ1Y3Rpb24gd2l0aGluIGEgbmV0d29yayBcCit3aW5kb3cgc3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFggV2luZG93IFN5c3RlbS4gVGhlIEludHJpbnNpY3MgYW5kIGEgXAord2lkZ2V0IHNldCBtYWtlIHVwIGFuIFggVG9vbGtpdC4gVGhlIEludHJpbnNpY3MgcHJvdmlkZSB0aGUgYmFzZSBcCittZWNoYW5pc20gbmVjZXNzYXJ5IHRvIGJ1aWxkIGEgd2lkZSB2YXJpZXR5IG9mIGludGVyb3BlcmF0aW5nIHdpZGdldCBcCitzZXRzIGFuZCBhcHBsaWNhdGlvbiBlbnZpcm9ubWVudHMuIFRoZSBJbnRyaW5zaWNzIGFyZSBhIGxheWVyIG9uIHRvcCBvZiBcCitYbGliLCB0aGUgQyBMaWJyYXJ5IFggSW50ZXJmYWNlLiBUaGV5IGV4dGVuZCB0aGUgZnVuZGFtZW50YWwgXAorYWJzdHJhY3Rpb25zIHByb3ZpZGVkIGJ5IHRoZSBYIFdpbmRvdyBTeXN0ZW0gd2hpbGUgc3RpbGwgcmVtYWluaW5nIFwKK2luZGVwZW5kZW50IG9mIGFueSBwYXJ0aWN1bGFyIHVzZXIgaW50ZXJmYWNlIHBvbGljeSBvciBzdHlsZS4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY1NjViMWUwMDk0ZWExY2FhZTA5NzFjYzQwMzVmMzQzIgorCisKK0RFUEVORFMgKz0gInV0aWwtbGludXggbGlieGNiIGxpYnNtIHZpcnR1YWwvbGlieDExIGticHJvdG8gbGlieGRtY3AiCitQUk9WSURFUyA9ICJ4dCIKKworUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdCIKKworU1JDX1VSSSArPSAgImZpbGU6Ly9saWJ4dF9maXhfZm9yX3gzMi5wYXRjaCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLXhrYiIKKworU1JDX1VSSVttZDVzdW1dID0gIjhmNWI1NTc2ZmJhYmJhMjlhMDVmM2NhMjIyNmY3NGQzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2ZWViNmJlNzgwMjExZmRkOThjNTEwOTI4NjYxOGY2NzA3NzEyMjM1ZmRkMTlkZjRjZTFlNjk1NGYzNDlmMWEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dHN0XzEuMi4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMGJjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHRzdF8xLjIuMi5iYgpAQCAtMCwwICsxLDIwIEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYVGVzdDogWCBUZXN0IGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJUaGlzIGV4dGVuc2lvbiBpcyBhIG1pbmltYWwgc2V0IG9mIGNsaWVudCBhbmQgc2VydmVyIFwKK2V4dGVuc2lvbnMgcmVxdWlyZWQgdG8gY29tcGxldGVseSB0ZXN0IHRoZSBYMTEgc2VydmVyIHdpdGggbm8gdXNlciBcCitpbnRlcnZlbnRpb24uIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWJiNGY4OTk3MmMzODY5ZjYxN2Y2MWMxYTc5YWQxOTUyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9YVGVzdC5jO2JlZ2lubGluZT0yO2VuZGxpbmU9MzI7bWQ1PWIxYzhjOWRmZjg0MmI0ZDViODljYTVmYTMyYzQwZTk5IgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHJlY29yZHByb3RvIGlucHV0cHJvdG8gbGlieGkiCitQUk9WSURFUyA9ICJ4dHN0IgorUEUgPSAiMSIKKworWE9SR19QTiA9ICJsaWJYdHN0IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjVjNmIzNjZhYzNkYzdhMTJjNWQ3OTgxNmNlOTZhNTkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZWYwYTdmZmQ1NzdlNWYxYTI1YjE2NjNiMzc1Njc5NTI5NjYzYTE4ODAxNTFiZWFhNzNlOTE4NmM4MzA5ZjZkOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dl8xLjAuMTAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZfMS4wLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMmI4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHZfMS4wLjEwLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh2IHByb3ZpZGVzIGFuIFggV2luZG93IFN5c3RlbSBjbGllbnQgaW50ZXJmYWNlIHRvIHRoZSBcCitYIFZpZGVvIGV4dGVuc2lvbiB0byB0aGUgWCBwcm90b2NvbC4gVGhlIFggVmlkZW8gZXh0ZW5zaW9uIGFsbG93cyBmb3IgXAorYWNjZWxlcmF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuICBIYXJkd2FyZSBhZGFwdG9ycyBhcmUgZXhwb3NlZCB0byBcCitjbGllbnRzLCB3aGljaCBtYXkgZHJhdyBpbiBhIG51bWJlciBvZiBjb2xvdXJzcGFjZXMsIGluY2x1ZGluZyBZVVYuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT04MjdkYTlhZmFiMWY3MjdmMmE2NjU3NDYyOWUwZjM5YyIKKworREVQRU5EUyArPSAibGlieGV4dCB2aWRlb3Byb3RvIgorCitYT1JHX1BOID0gImxpYlh2IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBhZjQ5ZDdkNzU4Yjk5MGU2ZmVmNjI5NzIyZDRhY2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTVmZTkyZjg2ODZjZTg2MTJlMmMxYmZhZjU4YzA1NzcxNTUzNDQxOWRhNzAwYmRhOGQ1MTdiMWQ5NzkxNDUyNSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh2bWNfMS4wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFlODQ5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4dm1jXzEuMC45LmJiCkBAIC0wLDAgKzEsMTkgQEAKK1NVTU1BUlkgPSAiWHZNQzogWCBWaWRlbyBNb3Rpb24gQ29tcGVuc2F0aW9uIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJYdk1DIGV4dGVuZHMgdGhlIFggVmlkZW8gZXh0ZW5zaW9uIChYdikgYW5kIGVuYWJsZXMgXAoraGFyZHdhcmUgcmVuZGVyZWQgbW90aW9uIGNvbXBlbnNhdGlvbiBzdXBwb3J0LiIKKworcmVxdWlyZSB4b3JnLWxpYi1jb21tb24uaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGEyMDdmMDhkNDk2MTQ4OWM1NTA0NmM5YTVlNTAwZGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vd3JhcHBlci9Ydk1DV3JhcHBlci5jO2VuZGxpbmU9MjY7bWQ1PTUxNTFkYWE4MTcyYTNmMWJiMGNiMGUwZmYxNTdkOWRlIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IGxpYnh2IHZpZGVvcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHZNQyIKKworU1JDX1VSSVttZDVzdW1dID0gImViYTZiNzM4ZWQ1ZmRjZDhmNDIwM2Q3YzhhNDcwYzc5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA3MDNkN2RmZjZmZmMxODRmMTczNWNhNWQ0ZWI5ZGJiNDAyYjUyMmUwOGUwMDhmMmY5NmFlZTE2YzQwYTU3NTYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZkZ2FfMS4xLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZkZ2FfMS4xLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk1YTM5NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4NmRnYV8xLjEuNC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYRnJlZTg2LURHQTogWEZyZWU4NiBEaXJlY3QgR3JhcGhpY3MgQWNjZXNzIGV4dGVuc2lvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJsaWJYeGY4NmRnYSBwcm92aWRlcyB0aGUgWEZyZWU4Ni1ER0EgZXh0ZW5zaW9uLCB3aGljaCBcCithbGxvd3MgZGlyZWN0IGdyYXBoaWNzIGFjY2VzcyB0byBhIGZyYW1lYnVmZmVyLWxpa2UgcmVnaW9uLCBhbmQgYWxzbyBcCithbGxvd3MgcmVsYXRpdmUgbW91c2UgcmVwb3J0aW5nLCBldCBhbC4gIEl0IGlzIG1haW5seSB1c2VkIGJ5IGdhbWVzIGFuZCBcCitlbXVsYXRvcnMgZm9yIGdhbWVzLiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWJiOTlhYzEyNWY4NGY0MjRhNDI3ODE1Mzk4OGUzMmYiCisKK0RFUEVORFMgKz0gImxpYnhleHQgeGY4NmRnYXByb3RvIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDdkZDliOWRmMzM2YjdkZDQwMjhiNmI1NjU0MmZmMmMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGVlY2Q0YjZjMWRmOWEzNzA0YzA0NzMzYzJmNGZhOTNlZjQ2OWI1NTAyOGFmNTUxMGIyNTgxOGUyNDU2Yzc3ZSIKKworWE9SR19QTiA9ICJsaWJYeGY4NmRnYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9saWJ4eGY4Nm1pc2NfMS4wLjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZtaXNjXzEuMC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNmYxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZtaXNjXzEuMC4zLmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiWEZyZWU4Ni1NaXNjOiBYRnJlZTg2IG1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYRnJlZTg2LU1pc2MgZXh0ZW5zaW9uLCBwcm92aWRlcyBhIG1lYW5zIHRvIGFjY2VzcyBcCitpbnB1dCBkZXZpY2UgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBzcGVjaWZpYyB0byB0aGUgWEZyZWU4Ni9Yb3JnIEREWC4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI3YzkxZWNjNDM1YmQzZDJiZmFkODY4OTE0Yzk0YjQ1IgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZtaXNjcHJvdG8iCitQUk9WSURFUyA9ICJ4eGY4Nm1pc2MiCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHhmODZtaXNjIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmJjMGJmNzg5MDlmZDcxMDIxYzQ2NmM3OTNkNDM4NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTYzZjQyMDA4NjJlZmQzMzM0YzMzYTY2OWUwYTBhYWU1YmFiMzFmMzk5OGRiNzViODdhOTlhNjk3Y2MyNmI1YiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvbGlieHhmODZ2bV8xLjEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWY4N2QyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL2xpYnh4Zjg2dm1fMS4xLjQuYmIKQEAgLTAsMCArMSwyMCBAQAorU1VNTUFSWSA9ICJYRnJlZTg2LVZNOiBYRnJlZTg2IHZpZGVvIG1vZGUgZXh0ZW5zaW9uIGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gImxpYlh4Zjg2dm0gcHJvdmlkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZSBcCitYRnJlZTg2LVZpZE1vZGVFeHRlbnNpb24gZXh0ZW5zaW9uLCB3aGljaCBhbGxvd3MgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBcCitnZXQgYW5kIHNldCB2aWRlbyBtb2RlIHRpbWluZ3MgaW4gZXh0ZW5zaXZlIGRldGFpbC4gIEl0IGlzIHVzZWQgYnkgdGhlIFwKK3h2aWR0dW5lIHByb2dyYW0gaW4gcGFydGljdWxhci4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZhMGI5YzQ2MmQ4ZjJmMTNlYmEyNjQ5MmQ0MmVhNjNkIgorCitERVBFTkRTICs9ICJsaWJ4ZXh0IHhmODZ2aWRtb2RlcHJvdG8iCisKK1BFID0gIjEiCisKK1hPUkdfUE4gPSAibGliWHhmODZ2bSIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5OGI4ZmZmODJkZjE3MzA0ZGZkYjVmZTQwNjZmZTNhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFmZWUyN2Y5M2M1ZjMxYzBhZDU4Mjg1MmMwZmIzNmQ1MGU0ZGU3Y2Q1ODVmY2Y2NTVlMjc4YTYzM2Q4NWNkNTciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjlkY2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaApAQCAtMCwwICsxLDE0NCBAQAorRnJvbSBhMGY1M2UxZGJiMzg1MWJiMGYwZWZjZmRiZDU2NWIwNWU0YmU5Y2FjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0FuZHJlYXM9MjBNPUMzPUJDbGxlcj89IDxzY2huaXR6ZWx0b255QGdvb2dsZW1haWwuY29tPgorRGF0ZTogVGh1LCAyMyBBdWcgMjAxMiAxODoxMDo1NyArMDIwMAorU3ViamVjdDogW1BBVENIIDEvMl0gQVJNOiBxZW11IHJlbGF0ZWQgd29ya2Fyb3VuZHMgaW4gY3B1IGZlYXR1cmVzIGRldGVjdGlvbgorIGNvZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworVGhpcyB3YXMgcG9ydGVkIGZyb20gbWV0YS1vZSdzIHBhdGNoIFsxXS4gVGhlIG9yaWdpbmFsIHBpeG1hbiBwYXRjaCBpcyBmb3VuZAorYXQgWzJdLgorCitbMV0gaHR0cDovL2NnaXQub3BlbmVtYmVkZGVkLm9yZy9tZXRhLW9wZW5lbWJlZGRlZC90cmVlL21ldGEtb2UvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4tMC4yNi4yLzAwMDEtQVJNLXFlbXUtcmVsYXRlZC13b3JrYXJvdW5kcy1pbi1jcHUtZmVhdHVyZXMtZGV0ZWN0aS5wYXRjaAorWzJdIGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvYXJjaGl2ZXMvcGl4bWFuLzIwMTEtSmFudWFyeS8wMDA5MDYuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW290aGVyXSBxZW11IGZpeAorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWFzIE3DvGxsZXIgPHNjaG5pdHplbHRvbnlAZ29vZ2xlbWFpbC5jb20+CistLS0KKyBwaXhtYW4vcGl4bWFuLWFybS5jIHwgICA4MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMTcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9waXhtYW4vcGl4bWFuLWFybS5jIGIvcGl4bWFuL3BpeG1hbi1hcm0uYworaW5kZXggMjMzNzRlNC4uZDk4YmRhNiAxMDA2NDQKKy0tLSBhL3BpeG1hbi9waXhtYW4tYXJtLmMKKysrKyBiL3BpeG1hbi9waXhtYW4tYXJtLmMKK0BAIC0xMjksMTYgKzEyOSwzNSBAQCBkZXRlY3RfY3B1X2ZlYXR1cmVzICh2b2lkKQorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyAjaW5jbHVkZSA8c3lzL21tYW4uaD4KKysjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyAjaW5jbHVkZSA8ZmNudGwuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPGVsZi5oPgorIAorKy8qCisrICogVGhlIHdob2xlIENQVSBjYXBhYmlsaXRpZXMgZGV0ZWN0aW9uIGlzIGEgYml0IHVnbHk6IHdoZW4gcnVubmluZyBpbgorKyAqIHVzZXJzcGFjZSBxZW11LCB3ZSBzZWUgL3Byb2Mvc2VsZi9hdXh2IGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBUbyBtYWtlCisrICogZXZlcnl0aGluZyBldmVuIHdvcnNlLCB0aGUgc2l6ZSBvZiBlYWNoIHZhbHVlIGlzIDY0LWJpdCB3aGVuIHJ1bm5pbmcKKysgKiBvbiBhIDY0LWJpdCBob3N0IHN5c3RlbS4gU28gdGhlIGRhdGEgaXMgdG90YWxseSBib2d1cyBiZWNhdXNlIHdlIGV4cGVjdAorKyAqIDMyLWJpdCB2YWx1ZXMuIEFzIEFUX1BMQVRGT1JNIHZhbHVlIGlzIHVzZWQgYXMgYSBwb2ludGVyLCBpdCBtYXkgY2F1c2UKKysgKiBzZWdmYXVsdCAobnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIG9uIHg4Ni02NCBob3N0KS4gU28gaW4gb3JkZXIgdG8gYmUKKysgKiBvbiBhIHNhZmUgc2lkZSwgd2UgcmVxdWlyZSB0aGF0IEFUX1BMQVRGT1JNIHZhbHVlIGlzIGZvdW5kIG9ubHkgb25jZSwKKysgKiBhbmQgaXQgaGFzIG5vbi16ZXJvIHZhbHVlICh0aGlzIGlzIHN0aWxsIG5vdCB0b3RhbGx5IHJlbGlhYmxlIGZvciBhIGJpZworKyAqIGVuZGlhbiA2NC1iaXQgaG9zdCBzeXN0ZW0gcnVubmluZyBxZW11IGFuZCBtYXkgdGhlb3JldGljYWxseSBmYWlsKS4KKysgKi8KKysjZGVmaW5lIEFSTV9IV0NBUF9WRlAgNjQKKysjZGVmaW5lIEFSTV9IV0NBUF9JV01NWFQgNTEyCisrI2RlZmluZSBBUk1fSFdDQVBfTkVPTiA0MDk2CisrCisgc3RhdGljIGFybV9jcHVfZmVhdHVyZXNfdAorIGRldGVjdF9jcHVfZmVhdHVyZXMgKHZvaWQpCisgeworICAgICBhcm1fY3B1X2ZlYXR1cmVzX3QgZmVhdHVyZXMgPSAwOworICAgICBFbGYzMl9hdXh2X3QgYXV4OworICAgICBpbnQgZmQ7CisrICAgIHVpbnQzMl90IGh3Y2FwID0gMDsKKysgICAgY29uc3QgY2hhciAqcGxhdCA9IE5VTEw7CisrICAgIGludCBwbGF0X2NudCA9IDA7CisgCisgICAgIGZkID0gb3BlbiAoIi9wcm9jL3NlbGYvYXV4diIsIE9fUkRPTkxZKTsKKyAgICAgaWYgKGZkID49IDApCitAQCAtMTQ3LDMyICsxNjYsNjEgQEAgZGV0ZWN0X2NwdV9mZWF0dXJlcyAodm9pZCkKKyAJeworIAkgICAgaWYgKGF1eC5hX3R5cGUgPT0gQVRfSFdDQVApCisgCSAgICB7CistCQl1aW50MzJfdCBod2NhcCA9IGF1eC5hX3VuLmFfdmFsOworLQorLQkJLyogaGFyZGNvZGUgdGhlc2UgdmFsdWVzIHRvIGF2b2lkIGRlcGVuZGluZyBvbiBzcGVjaWZpYworLQkJICogdmVyc2lvbnMgb2YgdGhlIGh3Y2FwIGhlYWRlciwgZS5nLiBIV0NBUF9ORU9OCistCQkgKi8KKy0JCWlmICgoaHdjYXAgJiA2NCkgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fVkZQOworLQkJaWYgKChod2NhcCAmIDUxMikgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fSVdNTVhUOworLQkJLyogdGhpcyBmbGFnIGlzIG9ubHkgcHJlc2VudCBvbiBrZXJuZWwgMi42LjI5ICovCistCQlpZiAoKGh3Y2FwICYgNDA5NikgIT0gMCkKKy0JCSAgICBmZWF0dXJlcyB8PSBBUk1fTkVPTjsKKysJCWh3Y2FwID0gYXV4LmFfdW4uYV92YWw7CisgCSAgICB9CisgCSAgICBlbHNlIGlmIChhdXguYV90eXBlID09IEFUX1BMQVRGT1JNKQorIAkgICAgeworLQkJY29uc3QgY2hhciAqcGxhdCA9IChjb25zdCBjaGFyKikgYXV4LmFfdW4uYV92YWw7CistCistCQlpZiAoc3RybmNtcCAocGxhdCwgInY3bCIsIDMpID09IDApCisrCQlwbGF0ID0gKGNvbnN0IGNoYXIqKSBhdXguYV91bi5hX3ZhbDsKKysJCXBsYXRfY250Kys7CisrCSAgICB9CisrCX0KKysJY2xvc2UgKGZkKTsKKysJaWYgKHBsYXQgPT0gTlVMTCB8fCBwbGF0X2NudCAhPSAxIHx8ICpwbGF0ICE9ICd2JykKKysJeworKwkgICAgLyoKKysJICAgICAqIFNvbWV0aGluZyBzZWVtcyB0byBiZSByZWFsbHkgd3JvbmcsIG1vc3QgbGlrZWx5IHdlIGFyZQorKwkgICAgICogcnVubmluZyB1bmRlciBxZW11LiBMZXQncyB1c2UgbWFjaGluZSB0eXBlIGZyb20gInVuYW1lIiBmb3IKKysJICAgICAqIENQVSBjYXBhYmlsaXRpZXMgZGV0ZWN0aW9uOgorKwkgICAgICogaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL3FlbXUtZGV2ZWwgYXQgbm9uZ251Lm9yZy9tc2cyMjIxMi5odG1sCisrCSAgICAgKi8KKysJICAgIHN0cnVjdCB1dHNuYW1lIHU7CisrCSAgICBod2NhcCA9IDA7IC8qIGNsZWFyIGh3Y2FwLCBiZWNhdXNlIGl0IGlzIGJvZ3VzICovCisrCSAgICBpZiAodW5hbWUgKCZ1KSA9PSAwKQorKwkgICAgeworKwkJaWYgKHN0cmNtcCAodS5tYWNoaW5lLCAiYXJtdjdsIikgPT0gMCkKKysJCXsKKyAJCSAgICBmZWF0dXJlcyB8PSAoQVJNX1Y3IHwgQVJNX1Y2KTsKKy0JCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2NmwiLCAzKSA9PSAwKQorKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9WRlA7ICAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdmZwICovCisrCQkgICAgaHdjYXAgfD0gQVJNX0hXQ0FQX05FT047IC8qIHFlbXUgaXMgc3VwcG9zZWQgdG8gZW11bGF0ZSBuZW9uICovCisrCQl9CisrCQllbHNlIGlmIChzdHJjbXAgKHUubWFjaGluZSwgImFybXY2bCIpID09IDApCisrCQl7CisgCQkgICAgZmVhdHVyZXMgfD0gQVJNX1Y2OworKwkJICAgIGh3Y2FwIHw9IEFSTV9IV0NBUF9WRlA7ICAvKiBxZW11IGlzIHN1cHBvc2VkIHRvIGVtdWxhdGUgdmZwICovCisrCQl9CisgCSAgICB9CisgCX0KKy0JY2xvc2UgKGZkKTsKKysJZWxzZSBpZiAoc3RybmNtcCAocGxhdCwgInY3bCIsIDMpID09IDApCisrCXsKKysJICAgIGZlYXR1cmVzIHw9IChBUk1fVjcgfCBBUk1fVjYpOworKwl9CisrCWVsc2UgaWYgKHN0cm5jbXAgKHBsYXQsICJ2NmwiLCAzKSA9PSAwKQorKwl7CisrCSAgICBmZWF0dXJlcyB8PSBBUk1fVjY7CisrCX0KKyAgICAgfQorIAorKyAgICAvKiBoYXJkY29kZSB0aGVzZSB2YWx1ZXMgdG8gYXZvaWQgZGVwZW5kaW5nIG9uIHNwZWNpZmljCisrICAgICAqIHZlcnNpb25zIG9mIHRoZSBod2NhcCBoZWFkZXIsIGUuZy4gSFdDQVBfTkVPTgorKyAgICAgKi8KKysgICAgaWYgKChod2NhcCAmIEFSTV9IV0NBUF9WRlApICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fVkZQOworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX0lXTU1YVCkgIT0gMCkKKysgICAgICAgIGZlYXR1cmVzIHw9IEFSTV9JV01NWFQ7CisrICAgIC8qIHRoaXMgZmxhZyBpcyBvbmx5IHByZXNlbnQgb24ga2VybmVsIDIuNi4yOSAqLworKyAgICBpZiAoKGh3Y2FwICYgQVJNX0hXQ0FQX05FT04pICE9IDApCisrICAgICAgICBmZWF0dXJlcyB8PSBBUk1fTkVPTjsKKysKKyAgICAgcmV0dXJuIGZlYXR1cmVzOworIH0KKyAKKy0tIAorMS43LjYuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL2FzbV9pbmNsdWRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9hc21faW5jbHVkZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJhNTcwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbi9hc21faW5jbHVkZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGaXhlcyBlcnJvcnMgbGlrZQorCitBc3NlbWJsZXIgbWVzc2FnZXM6CitGYXRhbCBlcnJvcjogY2FuJ3QgY3JlYXRlIC5saWJzL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5vOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisKK2l0IHdvcmtzIHdpdGggZ2xpYmMgYmVjYXVzZSBpdCB1c2VzIGdjYyBmaXhlZC1oZWFkZXJzIGJ1dCB0aGF0cyBub3QgcmlnaHQuCisKK1dlIG1vdmUgdGhlIGluY2x1ZGUgdW5kZXIgQyBibG9jaworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitJbmRleDogcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBpeG1hbi0wLjMyLjYub3JpZy9waXhtYW4vcGl4bWFuLXByaXZhdGUuaAorKysrIHBpeG1hbi0wLjMyLjYvcGl4bWFuL3BpeG1hbi1wcml2YXRlLmgKK0BAIC0xLDQgKzEsMyBAQAorLSNpbmNsdWRlIDxmbG9hdC5oPgorIAorICNpZm5kZWYgUElYTUFOX1BSSVZBVEVfSAorICNkZWZpbmUgUElYTUFOX1BSSVZBVEVfSAorQEAgLTE3LDYgKzE2LDggQEAKKyAKKyAjaWZuZGVmIF9fQVNTRU1CTEVSX18KKyAKKysjaW5jbHVkZSA8ZmxvYXQuaD4KKysKKyAjaWZuZGVmIFBBQ0tBR0UKKyAjICBlcnJvciBjb25maWcuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSBwaXhtYW4tcHJpdmF0ZS5oCisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi9waXhtYW4vbWlwcy1leHBvcnQtcmV2ZXJ0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTVmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuL21pcHMtZXhwb3J0LXJldmVydC5wYXRjaApAQCAtMCwwICsxLDIyIEBACitSZXZlcnQgYSBjb21taXQgaW4gcGl4bWFuIDAuMzIuNiB3aGljaCBicmVha3MgY29tcGxpYXRpb24gb24gTUlQUyBtYWNoaW5lcyB3aXRoCitlcnJvcnMgc3VjaCBhczoKKworcGl4bWFuLTAuMzIuNi9waXhtYW4vcGl4bWFuLW1pcHMtZHNwcjItYXNtLlM6NDI2NzoKK0Vycm9yOiBpbnZhbGlkIG9wZXJhbmRzIGBtZmxvICQxNCwkYWMzJworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKKy0tLSBiL3BpeG1hbi9waXhtYW4tbWlwcy1kc3ByMi1hc20uaAorKysrIGEvcGl4bWFuL3BpeG1hbi1taXBzLWRzcHIyLWFzbS5oCitAQCAtNzIsMTAgKzcyLDcgQEAKKyAjZGVmaW5lIExFQUZfTUlQUzMyUjIoc3ltYm9sKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLmdsb2JsICBzeW1ib2w7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgLmFsaWduICAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0jaWZkZWYgX19FTEZfXworLSAgICAgICAgICAgICAgICAuaGlkZGVuIHN5bWJvbDsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAudHlwZSAgIHN5bWJvbCwgQGZ1bmN0aW9uOyAgICAgICAgICAgICAgXAorLSNlbmRpZgorICAgICAgICAgICAgICAgICAuZW50ICAgIHN5bWJvbCwgMDsgICAgICAgICAgICAgICAgICAgICAgXAorIHN5bWJvbDogICAgICAgICAuZnJhbWUgIHNwLCAwLCByYTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAuc2V0ICAgIHB1c2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIvcGl4bWFuXzAuMzIuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU1OWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3BpeG1hbl8wLjMyLjYuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJQaXhtYW46IFBpeGVsIE1hbmlwdWxhdGlvbiBsaWJyYXJ5IgorCitERVNDUklQVElPTiA9ICJQaXhtYW4gcHJvdmlkZXMgYSBsaWJyYXJ5IGZvciBtYW5pcHVsYXRpbmcgcGl4ZWwgcmVnaW9ucyBcCistLSBhIHNldCBvZiBZLVggYmFuZGVkIHJlY3RhbmdsZXMsIGltYWdlIGNvbXBvc2l0aW5nIHVzaW5nIHRoZSBcCitQb3J0ZXIvRHVmZiBtb2RlbCBhbmQgaW1wbGljaXQgbWFzayBnZW5lcmF0aW9uIGZvciBnZW9tZXRyaWMgcHJpbWl0aXZlcyBcCitpbmNsdWRpbmcgdHJhcGV6b2lkcywgdHJpYW5nbGVzLCBhbmQgcmVjdGFuZ2xlcy4iCisKK3JlcXVpcmUgeG9yZy1saWItY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSAmIFBEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MTQwOTZjNzY5YWUwY2JiNWZjYjk0ZWM0NjhiZTExYjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGl4bWFuL3BpeG1hbi1tYXRyaXguYztlbmRsaW5lPTI1O21kNT1iYTZlODc2OWJmYWFlZTJjNDE2OTg3NTVhZjA0YzRiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9waXhtYW4vcGl4bWFuLWFybS1uZW9uLWFzbS5oO2VuZGxpbmU9MjQ7bWQ1PTlhOWNjMWU1MWFiYmYxZGE1OGY0ZDk1MjhlYzlkNDliIFwKKyAgICAgICAgICAgICAgICAgICAiCitERVBFTkRTICs9ICJ6bGliIGxpYnBuZyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEUgPSAiMSIKKworSVdNTVhUID0gIi0tZGlzYWJsZS1hcm0taXdtbXh0IgorTE9PTkdTT05fTU1JID0gIi0tZGlzYWJsZS1sb29uZ3Nvbi1tbWkiCitORU9OID0gIiAtLWRpc2FibGUtYXJtLW5lb24gIgorTkVPTl9jbGFzcy1uYXRpdmVzZGsgPSAiIC0tZGlzYWJsZS1hcm0tbmVvbiAiCitORU9OX2FybXY3YSA9ICIgIgorTkVPTl9hcm12N2EtdmZwLW5lb24gPSAiICIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1ndGsgJHtJV01NWFR9ICR7TE9PTkdTT05fTU1JfSAke05FT059IgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZSA9ICItLWRpc2FibGUtZ3RrIgorCitTUkNfVVJJICs9ICJcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1BUk0tcWVtdS1yZWxhdGVkLXdvcmthcm91bmRzLWluLWNwdS1mZWF0dXJlcy1kZXRlY3RpLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9taXBzLWV4cG9ydC1yZXZlcnQucGF0Y2ggXAorCSAgICBmaWxlOi8vYXNtX2luY2x1ZGUucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGE5ZThmMTQ3NDNhMzljZjMwMzgwM2YzNjljMWYzNDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjAxZmMwZDdkNmJjMDAxNzQ5NmYyYmQyN2IzY2ExNDIyNGFlYTBkZjZiNjI0YzVlZTJkYzAzMDdhNGZmMTRhNCIKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1pbWFnZV8wLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1pbWFnZV8wLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTQ2NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLWltYWdlXzAuNC4wLmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0RFUEVORFMgKz0gInhjYi11dGlsIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2ltYWdlL3hjYl9pbWFnZS5jO2VuZGxpbmU9MjQ7bWQ1PWVhZmRmOTY1Y2ZiODk5NTVmZGVkZjc1MDU0MjIzZmI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2ltYWdlL3hjYl9pbWFnZS5oO2JlZ2lubGluZT00O2VuZGxpbmU9Mjc7bWQ1PTQ4Y2QyNWFlNTVlN2RlNTI1ZmUxZTFhM2E3NjcyZTFjIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDhmZThmZmVjYzhkNGUzN2MwYWRlNzkwNmIzZjRjODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmRiOTZhMzdkNzg4MzFkNjQzNTM4ZGQxYjU5NWQ3ZDcxMmUwNGJkY2NmODg5NmE1ZTE4Y2UwZjM5OGVhMmZmYyIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1rZXlzeW1zXzAuNC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYTY0ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwta2V5c3ltc18wLjQuMC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgeGNiLXV0aWwuaW5jCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8va2V5c3ltcy9rZXlzeW1zLmM7ZW5kbGluZT0zMDttZDU9MmY4ZGUwMjNlZDgyM2JiOTJmMGI0NzkwMDU3NGVhOWUgXAorCQkJCQkiCitTUkNfVVJJW21kNXN1bV0gPSAiMTAyMjI5MzA4M2VlYzllNjJkNTY1OTI2MWMyOWUzNjciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGVmODQ5MGZmMWRlZGU1MmI3ZGU1MzMxNTg1NDdmOGI0NTRiMjQxYWEzZTRkY2NhMzY5NTA3ZjY2ZjIxNmRkOSIKKworCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbC1yZW5kZXJ1dGlsXzAuMy45LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YzIyZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtcmVuZGVydXRpbF8wLjMuOS5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIHhjYi11dGlsLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3JlbmRlcnV0aWwvZ2x5cGguYztlbmRsaW5lPTI0O21kNT1jNTE3YzQ4M2I4ZDcyNjIzNGVjOTRmOTE2OTIzNjY2MSBcCisJCQkJCWZpbGU6Ly9yZW5kZXJ1dGlsL3V0aWwuYztlbmRsaW5lPTIwO21kNT02ZTBiZmM0NGZiMTMyOThjMGY0Njk0ZWI3MGRjODBkNCBcCisJCQkJCWZpbGU6Ly9yZW5kZXJ1dGlsL3hjYl9yZW5kZXJ1dGlsLmg7ZW5kbGluZT0yNDttZDU9ZDBkZGFiMzA1MmRkNDk0OWM5M2NmY2IwODkxYzk2ZGYgXAorCQkJCQkiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0NjhiMTE5Yzk0ZGE5MTBlMTI5MWYzZmZhYjkxMDE5YSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNmU5N2U0OGZiMTI4NmQ2Mzk0ZGRkYjFjMTczMmYwMDIyN2M3MGJkMWJlZGI3ZDFhY2FiZWZkZDM0MGJlYTViIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXdtXzAuNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLXdtXzAuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjEzODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwtd21fMC40LjEuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9ld21oL2V3bWguYy5tNDtlbmRsaW5lPTI3O21kNT02M2ZkODA1NTJkN2RjODg2ZjRlYjI2NzYxMGQ1YmI5ZCBcCisJCQkJCWZpbGU6Ly9ld21oL3hjYl9ld21oLmgubTQ7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMDttZDU9NzNiNTg5ZjkwZWY5MGI0YTQzOTk4OTU1ZGFhZDVjZDggXAorCQkJCQlmaWxlOi8vaWNjY20vaWNjY20uYztlbmRsaW5lPTI4O21kNT1lMmIzMjQwYTBjMTk3ZTg5NzdhZGRlMmE1Y2YxOGQ1MCBcCisJCQkJCWZpbGU6Ly9pY2NjbS94Y2JfaWNjY20uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTMxO21kNT0zOTM3NzJiN2IwN2I5ODY4ZDQ3OWQ1MzgyMzhjMWQ4YSBcCisJCQkJCSIKKworU1JDX1VSSVttZDVzdW1dID0gIjg3YjE5YTFjZDdiZmNiNjVhMjRlMzZjMzAwZTAzMTI5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI4YmY4MTc5NjQwZWFhODkyNzZkMmIwZjFjZTQyODUxMDNkMTM2YmU2Yzk4MjYyYjYxNTFhYWVlMWQzYzJhM2YiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGNiLXV0aWwuaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQwNGY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsLmluYwpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlhDQjogVGhlIFggcHJvdG9jb2wgQyBiaW5kaW5nIHV0aWxpdGllcyIKK0RFU0NSSVBUSU9OID0gIlRoZSB4Y2ItdXRpbCBtb2R1bGUgcHJvdmlkZXMgYSBudW1iZXIgb2YgbGlicmFyaWVzIHdoaWNoIFwKK3NpdCBvbiB0b3Agb2YgbGlieGNiLCB0aGUgY29yZSBYIHByb3RvY29sIGxpYnJhcnksIGFuZCBzb21lIG9mIHRoZSBcCitleHRlbnNpb24gbGlicmFyaWVzLiBUaGVzZSBleHBlcmltZW50YWwgbGlicmFyaWVzIHByb3ZpZGUgY29udmVuaWVuY2UgXAorZnVuY3Rpb25zIGFuZCBpbnRlcmZhY2VzIHdoaWNoIG1ha2UgdGhlIHJhdyBYIHByb3RvY29sIG1vcmUgdXNhYmxlLiBTb21lIFwKK29mIHRoZSBsaWJyYXJpZXMgYWxzbyBwcm92aWRlIGNsaWVudC1zaWRlIGNvZGUgd2hpY2ggaXMgbm90IHN0cmljdGx5IFwKK3BhcnQgb2YgdGhlIFggcHJvdG9jb2wgYnV0IHdoaWNoIGhhdmUgdHJhZGl0aW9uYWxseSBiZWVuIHByb3ZpZGVkIGJ5IFwKK1hsaWIuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvWGNiVXRpbC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworTElDRU5TRSA9ICJNSVQiCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCisKK0RFUEVORFMgPSAibGlieGNiIgorREVQRU5EUyArPSAiZ3BlcmYtbmF0aXZlIgorCitTUkNfVVJJID0gImh0dHA6Ly94Y2IuZnJlZWRlc2t0b3Aub3JnL2Rpc3QvJHtCUE59LSR7UFZ9LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbF8wLjQuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94Y2ItdXRpbF8wLjQuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDZmMDdhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hjYi11dGlsXzAuNC4wLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSB4Y2ItdXRpbC5pbmMKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMveGNiX2F1eC5jO2VuZGxpbmU9MzA7bWQ1PWFlMzA1YjljMmEzOGY5YmEyNzA2MDE5MTA0NmE2NDYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy94Y2JfZXZlbnQuaDtlbmRsaW5lPTI3O21kNT02MjdiZTM1NWFlZTU5ZTFiOGFkZTgwZDViZDkwZmFkOSIKKworU1JDX1VSSVttZDVzdW1dID0gIjJlOTdmZWVkODE5MTk0NjVhMDRjY2M3MWU0MDczMzEzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjQ2ZTQ5NDY5Y2IzYjU5NGFmMWQzMzE3NmNkNzU2NWRlZjJiZTNmYThiZTQzNzFkNjIyNzFmYWJiNWVhZTUwZTkiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1saWIveGtleWJvYXJkLWNvbmZpZ18yLjE1LmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDE2OTkwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hrZXlib2FyZC1jb25maWdfMi4xNS5iYgpAQCAtMCwwICsxLDMxIEBACitTVU1NQVJZID0gIktleWJvYXJkIGNvbmZpZ3VyYXRpb24gZGF0YWJhc2UgZm9yIFggV2luZG93IgorCitERVNDUklQVElPTiA9ICJUaGUgbm9uLWFyY2gga2V5Ym9hcmQgY29uZmlndXJhdGlvbiBkYXRhYmFzZSBmb3IgWCBcCitXaW5kb3cuICBUaGUgZ29hbCBpcyB0byBwcm92aWRlIHRoZSBjb25zaXN0ZW50LCB3ZWxsLXN0cnVjdHVyZWQsIFwKK2ZyZXF1ZW50bHkgcmVsZWFzZWQgb3BlbiBzb3VyY2Ugb2YgWCBrZXlib2FyZCBjb25maWd1cmF0aW9uIGRhdGEgZm9yIFggXAorV2luZG93IFN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuICBUaGUgcHJvamVjdCBpcyB0YXJnZXRlZCB0byBYS0ItYmFzZWQgXAorc3lzdGVtcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9mcmVlZGVza3RvcC5vcmcvd2lraS9Tb2Z0d2FyZS9YS2V5Ym9hcmRDb25maWciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhrZXlib2FyZC1jb25maWciCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MGU3ZjIxY2E3ZGI5NzVjNjM0NjdkMmU3NjI0YTEyZjkiCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9kYXRhL3hrZXlib2FyZC1jb25maWcvJHtCUE59LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJW21kNXN1bV0gPSAiNGFmMWRlZWI3YzVmNGNhZDYyZTY1OTU3ZDk4ZDY3NTgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGU0NDNjZjdjYTJmMGI0MDg0NjQ3MmMwMjk2NDdhMDU5MzNmYzcwNWQ2MTFlMTQ3OGM0ZGI4YTQ4YTZmMzhiZiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiaW50bHRvb2wtbmF0aXZlIHZpcnR1YWwvZ2V0dGV4dCB1dGlsLW1hY3JvcyBsaWJ4c2x0LW5hdGl2ZSIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC14a2ItcnVsZXMtc3ltbGluaz14b3JnIC0tZGlzYWJsZS1ydW50aW1lLWRlcHMiCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L1gxMS94a2IiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQKKyAgICBjZCAke0R9JHtkYXRhZGlyfS9YMTEveGtiL3J1bGVzICYmIGxuIC1zZiBiYXNlIHhvcmcKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3hvcmctbGliLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlkZjAxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94b3JnLWxpYi1jb21tb24uaW5jCkBAIC0wLDAgKzEsMjYgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKKworWE9SR19QTiA9ICIke0JQTn0iCisKK1NSQ19VUkkgPSAiJHtYT1JHX01JUlJPUn0vaW5kaXZpZHVhbC9saWIvJHtYT1JHX1BOfS0ke1BWfS50YXIuYnoyIgorCitTID0gIiR7V09SS0RJUn0vJHtYT1JHX1BOfS0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLXNwZWNzIC0td2l0aG91dC1ncm9mZiAtLXdpdGhvdXQtcHMycGRmIC0td2l0aG91dC1mb3AiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLXdpdGgteG1sdG8sIC0td2l0aG91dC14bWx0bywgeG1sdG8tbmF0aXZlIGRvY2Jvb2steG1sLWR0ZDQtbmF0aXZlIGRvY2Jvb2steHNsLXN0eWxlc2hlZXRzLW5hdGl2ZSIKKworVU5LTk9XTl9DT05GSUdVUkVfV0hJVEVMSVNUICs9ICItLWVuYWJsZS1tYWxsb2MwcmV0dXJuc251bGwgLS1kaXNhYmxlLW1hbGxvYzByZXR1cm5zbnVsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zcGVjcyAtLXdpdGhvdXQtZ3JvZmYgLS13aXRob3V0LXBzMnBkZiAtLXdpdGhvdXQtZm9wIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LXhtbHRvIC0td2l0aC14bWx0byBcCisiCisKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA/PSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctbGliL3h0cmFuc18xLjMuNS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94dHJhbnNfMS4zLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViN2YxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLWxpYi94dHJhbnNfMS4zLjUuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYVHJhbnM6IFggVHJhbnNwb3J0IGxpYnJhcnkiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBYIFRyYW5zcG9ydCBJbnRlcmZhY2UgaXMgaW50ZW5kZWQgdG8gY29tYmluZSBhbGwgXAorc3lzdGVtIGFuZCB0cmFuc3BvcnQgc3BlY2lmaWMgY29kZSBpbnRvIGEgc2luZ2xlIHBsYWNlLiAgVGhpcyBBUEkgc2hvdWxkIFwKK2JlIHVzZWQgYnkgYWxsIGxpYnJhcmllcywgY2xpZW50cyBhbmQgc2VydmVycyBvZiB0aGUgWCBXaW5kb3cgU3lzdGVtLiBcCitVc2Ugb2YgdGhpcyBBUEkgc2hvdWxkIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBuZXcgdHlwZXMgb2YgdHJhbnNwb3J0cyBhbmQgXAorc3VwcG9ydCBmb3IgbmV3IHBsYXRmb3JtcyB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgc291cmNlIFwKK2V4Y2VwdCBpbiB0aGUgWCBUcmFuc3BvcnQgSW50ZXJmYWNlIGNvZGUuIgorCityZXF1aXJlIHhvcmctbGliLWNvbW1vbi5pbmMKKworTElDRU5TRSA9ICJNSVQgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00OTM0NzkyMWQ0ZDUyNjgwMjFhOTk5ZjI1MGVkYzljYSIKKworUEUgPSAiMSIKKworUkRFUEVORFNfJHtQTn0tZGV2ID0gIiIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImM1YmE0MzJkZDE1MTRkODU4MDUzZmZlOWY0NzM3ZGQ4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFkYmQzYjM2OTMyY2U0YzA2MmNkMTBmNTdkNzhhMTU2YmE5OGQ2MThiZGI2ZjUwNjY0ZGEzMjc1MDJiYzgzMDEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9iaWdyZXFzcHJvdG9fMS4xLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9iaWdyZXFzcHJvdG9fMS4xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5OGE0MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2JpZ3JlcXNwcm90b18xLjEuMi5iYgpAQCAtMCwwICsxLDE2IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitQRSA9ICIxIgorCitTVU1NQVJZID0gIkJpZ1JlcXM6IFggQmlnIFJlcXVlc3RzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitCSUctUkVRVUVTVFMgZXh0ZW5zaW9uLCB1c2VkIHRvIHNlbmQgbGFyZ2VyIHJlcXVlc3RzIHRoYXQgdXN1YWwgaW4gb3JkZXIgXAordG8gYXZvaWQgZnJhZ21lbnRhdGlvbi4iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjEyNzE1NjMwZGE2ZjI2OGQwZDM3MTJlZTFhNTA0ZjQiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxYTA1ZmIwMWZhMWQ1MTk4ODk0YzkzMWNmOTI1YzAyNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NjIxMTZhYjQ0ZTQxZDgxMjFiZmRlOTQ3MzIxOTUwMzcwYjI4NWE1MzE2NjEyYjhmY2U4MzM0ZDUwNzUxYjFlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG8vZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG8vZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOGNiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jYWxpYnJhdGVwcm90by9maXgucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0FkZCBtaXNzaW5nIGxlbmd0aCBmaWVsZHMgdG8gdGhlIHJlcGxpZXMuIFdpdGhvdXQgdGhlc2UsIHNhbml0eSBjaGVja2luZyBpbiByZWNlbnQgWAorYnJlYWtzIHRoaW5ncy4KKworUlAgMTEvMi8xMAorCisKK0luZGV4OiBnaXQveGNhbGlicmF0ZXByb3RvLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy94Y2FsaWJyYXRlcHJvdG8uaAkyMDEwLTAyLTExIDExOjQ3OjQ1LjcxMTk4NTkzMiArMDAwMAorKysrIGdpdC94Y2FsaWJyYXRlcHJvdG8uaAkyMDEwLTAyLTExIDExOjQwOjIxLjAwMDAwMDAwMCArMDAwMAorQEAgLTY3LDEzICs2NywxMyBAQAorICAgICBCWVRFICAgIHR5cGU7ICAgLyogWF9SZXBseSAqLworICAgICBCWVRFICAgIHBhZDE7CisgICAgIENBUkQxNiAgc2VxdWVuY2VOdW1iZXIgQjE2OworKyAgICBDQVJEMzIgIGxlbmd0aDsKKyAgICAgQ0FSRDMyICBzdGF0dXM7CisgICAgIENBUkQzMiAgcGFkMiBCMzI7CisgICAgIENBUkQzMiAgcGFkMyBCMzI7CisgICAgIENBUkQzMiAgcGFkNCBCMzI7CisgICAgIENBUkQzMiAgcGFkNSBCMzI7CisgICAgIENBUkQzMiAgcGFkNiBCMzI7CistICAgIENBUkQzMiAgcGFkNyBCMzI7CisgfSB4WENhbGlicmF0ZVJhd01vZGVSZXBseTsKKyAKKyAjZGVmaW5lIHN6X3hYQ2FsaWJyYXRlUmF3TW9kZVJlcGx5CTMyCitAQCAtOTIsMTMgKzkyLDEzIEBACisgICAgIEJZVEUgICAgdHlwZTsgICAvKiBYX1JlcGx5ICovCisgICAgIEJZVEUgICAgcGFkMTsKKyAgICAgQ0FSRDE2ICBzZXF1ZW5jZU51bWJlciBCMTY7CisrICAgIENBUkQzMiAgbGVuZ3RoOworICAgICBDQVJEMzIgIHg7CisgICAgIENBUkQzMiAgeTsKKyAgICAgQ0FSRDMyICBwYWQyIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQzIEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ0IEIzMjsKKyAgICAgQ0FSRDMyICBwYWQ1IEIzMjsKKy0gICAgQ0FSRDMyICBwYWQ2IEIzMjsKKyB9IHhYQ2FsaWJyYXRlU2NyZWVuVG9Db29yZFJlcGx5OworIAorICNkZWZpbmUgc3pfeFhDYWxpYnJhdGVTY3JlZW5Ub0Nvb3JkUmVwbHkJMzIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NhbGlicmF0ZXByb3RvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhkMTU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vY2FsaWJyYXRlcHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWENhbGlicmF0ZTogVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgXAorVG91Y2hzY3JlZW4gY2FsaWJyYXRpb24gZXh0ZW5zaW9uLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly94Y2FsaWJyYXRld2lyZS5oO2VuZGxpbmU9MjM7bWQ1PTdmODZlZjdiMDNjY2U2YzRjOWViZDU5ZDIwY2E0ODVmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hjYWxpYnJhdGVwcm90by5oO2VuZGxpbmU9MjM7bWQ1PWU0NDkwNDkxZWRjYzE3MWNhMjRmOTg1NjllZTU4MGRiIgorCitTUkNSRVYgPSAiMWRhNmZkMWUyYzdhNDk2NDgyNDVjOTg0ODFmYWJlYThiOTY5MGE4YyIKKworUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vY2FsaWJyYXRlcHJvdG8gXAorICAgICAgICAgICBmaWxlOi8vZml4LnBhdGNoO2FwcGx5PXllcyIKK1MgPSAiJHtXT1JLRElSfS9naXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2NvbXBvc2l0ZXByb3RvXzAuNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmVlMjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9jb21wb3NpdGVwcm90b18wLjQuMi5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhjb21wb3NpdGU6IFggY29tcG9zaXRlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK2NvbXBvc2l0ZSBleHRlbnNpb24uICBUaGUgWCBjb21wb3NpdGUgZXh0ZW5zaW9uIHByb3ZpZGVzIHRocmVlIHJlbGF0ZWQgXAorbWVjaGFuaXNtcyBmb3IgY29tcG9zaXRpbmcgYW5kIG9mZi1zY3JlZW4gc3RvcmFnZS4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MmM0YmZlMTM2ZjRhNDQxOGVhMmYyYTk2YjdjOGYzYzUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tcG9zaXRlLmg7ZW5kbGluZT00MzttZDU9Y2JkNDRkNDA3OTA1M2FhNzU5MzBlZDJmMDJiOTI5MjYiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiY29tcG9zaXRlZXh0IgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk4NDgyZjY1YmExZTc0YTA4YmY1YjA1NmE0MDMxZWYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA0OTM1OWYwYmUwYjJiOTg0YTgxNDljOTY2ZGQwNGU4YzU4ZTZlYWRlMmE0YTMwOWNmMTEyNjYzNWNjZDBjZmMiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZGFtYWdlcHJvdG9fMS4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMDI2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RhbWFnZXByb3RvXzEuMi4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGRhbWFnZTogWCBEYW1hZ2UgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERBTUFHRSBcCitleHRlbnNpb24uICBUaGUgREFNQUdFIGV4dGVuc2lvbiBhbGxvd3MgYXBwbGljYXRpb25zIHRvIHJlY2VpdmUgXAoraW5mb3JtYXRpb24gYWJvdXQgY2hhbmdlcyBtYWRlIHRvIHBpeGVsIGNvbnRlbnRzIG9mIHdpbmRvd3MgYW5kIFwKK3BpeG1hcHMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ1ZjVhMmRlNjVjM2E4NGNiZGU3NjlmMDdhNzY5NjA4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2RhbWFnZXdpcmUuaDtlbmRsaW5lPTIzO21kNT00YTQ1MDFhNTkyZGJjN2RlNWNlODkyNTVlNTBkMDI5NiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJkYW1hZ2VleHQiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKK1BSID0gInIxIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5OGU1OTA0NzY0YjgyNjQyY2M2M2Q5N2I0YmE5ZTk1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVjN2MxMTJlOWI5ZWE4YTlkNWIwMTllNWYxN2Q0ODFhZTIwZjc2NmNiN2E0NjQ4MzYwZTdjMWI0NmZjOWZjNWIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RteHByb3RvXzIuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NjBlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kbXhwcm90b18yLjMuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIkRNWDogRGlzdHJpYnV0ZWQgTXVsdGloZWFkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBETVggXAorZXh0ZW5zaW9uLiAgVGhlIERNWCBleHRlbnNpb24gcHJvdmlkZXMgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFwKK2FuZCBjb250cm9sIG9mIFhkbXggc2VydmVyLiAgQXR0cmlidXRlcyBvZiB0aGUgWGRteCBzZXJ2ZXIgYW5kIG9mIHRoZSBcCitiYWNrLWVuZCBzY3JlZW5zIGF0dGFjaGVkIHRvIHRoZSBzZXJ2ZXIgY2FuIGJlIHF1ZXJpZWQgYW5kIG1vZGlmaWVkIHZpYSBcCit0aGlzIHByb3RvY29sLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hM2MzNDk5MjMxYTgwMzVlZmQwZTAwNGNmYmQzYjcyYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kbXhwcm90by5oO2VuZGxpbmU9MzI7bWQ1PWFiODUwOTk1NWMzZGQ0YzY1ZmFjNzI4ZTFiMzY3YmM0IgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGVlMTc1YmJkNDRkMDVjMzRkNDNiYjEyOWJlNTA5OGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTcyMDUxZTZhM2UwNmIyMzZkMTllZWQ1NjM2ODExN2I3NDVjYTFlMWEyN2JkYzUwZmQ1MWFhMzc1YmVhNjUwOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b18yLjguYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fMi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzQwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fMi44LmJiCkBAIC0wLDAgKzEsMTUgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCitSZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9kcmkycHJvdG8uaDtlbmRsaW5lPTMxO21kNT0yMmYyOGJmNjhkMDFiNTMzZjI2MTk1ZTk0YjNlZDhjYSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiYjI3MjFkNWQyNGMwNGQ5OTgwYTBjNjU0MGNiNTM5NmEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjliNTU0NzZkZWY0NGZjN2M0NTliMjUzN2QxN2RiYzczMWUzNmVkNWQ0MTZhZjdjYTBiMWUyZTY3NmY4YWEwNCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTJwcm90b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNzRmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9kcmkycHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiRFJJMjogRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSAyIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIERpcmVjdCBcCitSZW5kZXJpbmcgSWZucmFzdHJ1Y3R1cmUgMi4gIERJUiBpcyByZXF1aXJlZCBmb3IgbWF5IGhhcmR3YXJlIFwKK2FjY2VsZXJhdGVkIE9wZW5HTCBkcml2ZXJzLiIKKworU1JDUkVWID0gIjY2YzU2YWIxMGQ5MTdlM2Y0N2Y5MzE3OGQ3ZWFjNjQzMDk3MGQzYzQiCitQViA9ICIxLjk5LjMrZ2l0JHtTUkNQVn0iCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9kcmkycHJvdG8iCisKK0xJQ19GSUxFU19DSEtTVU09ImZpbGU6Ly9DT1BZSU5HO21kNT0yZTM5NmZhOTE4MzRmODc4NjAzMmNhZDJkYTU2MzhmMyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZHJpM3Byb3RvXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTNwcm90b18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVkOTdiMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2RyaTNwcm90b18xLjAuYmIKQEAgLTAsMCArMSwxNCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJEaXJlY3QgUmVuZGVyaW5nIEluZnJhc3RydWN0dXJlIDMgRXh0ZW5zaW9uIgorCitERVNDUklQVElPTiA9ICJUaGUgRFJJMyBleHRlbnNpb24gcHJvdmlkZXMgbWVjaGFuaXNtcyB0byB0cmFuc2xhdGUgYmV0d2VlbiBkaXJlY3QgXAorcmVuZGVyZWQgYnVmZmVycyBhbmQgWCBwaXhtYXBzLiBXaGVuIGNvbWJpbmVkIHdpdGggdGhlIFByZXNlbnQgZXh0ZW5zaW9uLCBcCithIGNvbXBsZXRlIGRpcmVjdCByZW5kZXJpbmcgc29sdXRpb24gZm9yIE9wZW5HTCBpcyBwcm92aWRlZC4iCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZHJpM3Byb3RvLmg7ZW5kbGluZT0yMTttZDU9YWM5MGQxZDQxNmJlM2NiMTNlMWQzYzg4Y2Q1MTY2YmYiCisKKworU1JDX1VSSVttZDVzdW1dID0gImEzZDJjYmU2MGE5Y2ExYmYzYWVhNmM5M2M4MTdmZWUzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAxYmU0OWQ3MDIwMDUxOGI5YTZiMjk3MTMxZjZjYzcxZjRlYTJkZTE3NDM2ODk2YWYxNTMyMjZhNzc0ZmMwNzQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ZpeGVzcHJvdG9fNS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZmI4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9maXhlc3Byb3RvXzUuMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGaXhlczogWCBGaXhlcyBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBGaXhlcyBcCitleHRlbnNpb24uICBUaGlzIGV4dGVuc2lvbiBpcyBkZXNpZ25lZCB0byBwcm92aWRlIHNlcnZlci1zaWRlIHN1cHBvcnQgXAorZm9yIGFwcGxpY2F0aW9uIHdvcmsgYXJvdW5kcyB0byBzaG9ydGNvbWluZ3MgaW4gdGhlIGNvcmUgWCB3aW5kb3cgXAorc3lzdGVtLiIKKworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTI2MmE3YTg3ZGE1NmU2NmRkNjM5YmY3MzM0YTExMGM2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hmaXhlc3Byb3RvLmg7ZW5kbGluZT00MzttZDU9YzNhOWVlNmRiMzUzMmVkMGQ0NGRlYTI2NmNmYzk3ZjQiCisKK1JDT05GTElDVFNfJHtQTn0gPSAiZml4ZXNleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImU3NDMxYWI4NGQzN2IyNjc4YWY3MWUyOTM1NWUxMDFkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJhMmYzZjMxMjQ2YmRkM2YyYTBhY2Y4YmQzYjA5YmE5OWNhYjk2NWM3ZmIyYzJjOTJiN2RjNzI4NzBlNDI0Y2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9mb250c3Byb3RvXzIuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZm9udHNwcm90b18yLjEuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2ZjMjgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZm9udHNwcm90b18yLjEuMy5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGb250OiBYIEZvbnQgcmFzdGVyaXNhdGlvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIEZvbnQgXAorcmFzdGVyaXNhdGlvbiBleHRlbnNpb25zLiAgVGhlc2UgZXh0ZW5zaW9ucyBhcmUgdXNlZCB0byBjb250cm9sIFwKK3NlcnZlci1zaWRlIGZvbnQgY29uZmlndXJhdGlvbnMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWMzZTQ4YWE5Y2U4NjhjOGU5MGYwNDAxZGI0MWMxMWEyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0ZTcHJvdG8uaDtlbmRsaW5lPTQ0O21kNT1kMmU1OGUyNzA5NWU1ZWE3ZDRhZDQ1NmNjYjkxOTg2YyIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzNjkzNGQwMGIwMDU1NWVhYWNkZTlmMDkxZjM5MmY5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyNTkwNDZiMGRkOTEzMDgyNWM0YTRjNDc5YmEzNTkxZDZkMGYxN2EzM2Y1NGUyOTRiNTY0Nzg3MjlhNmU1YWI4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9nbHByb3RvXzEuNC4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjAzZDMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vZ2xwcm90b18xLjQuMTcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJPcGVuR0w6IFggT3BlbkdMIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBcCitPcGVuR0wtcmVsYXRlZCBleHRlbnNpb25zLCB1c2VkIHRvIGVuYWJsZSB0aGUgcmVuZGVyaW5nIG9mIGFwcGxpY2F0aW9ucyBcCit1c2luZyBPcGVuR0wuIgorCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ0NGVkMDE0Njk5Nzg1NjMwNGRmYmI1MTJhNTlhOGRlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dseHByb3RvLmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMjttZDU9NmI3OWM1NzBmNjQ0MzYzYjM1NjQ1NmU3ZDQ0NDcxZDkiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNTU2NWYxYjBmYWNmNGE1OWMyNzc4MjI5YzFmNzBkMTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYWRhYTk0YmRlZDMxMGEyYmZjYmI5ZGViNGQ3NTFkOTY1ZmNmZTZmYjNhMmY2ZDI0MmUyZGYyZDY1ODlkYmU0MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fMi4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlOGUwYzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEk6IFggSW5wdXQgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggSW5wdXQgXAorZXh0ZW5zaW9uLiAgVGhlIGV4dGVuc2lvbiBzdXBwb3J0cyBpbnB1dCBkZXZpY2VzIG90aGVyIHRoZW4gdGhlIGNvcmUgWCBcCitrZXlib2FyZCBhbmQgcG9pbnRlci4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTU2MmNjMGY2NTg3Yjk2MWYwMzIyMTFkODE2MGYzMWUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEkycHJvdG8uaDtlbmRsaW5lPTQ4O21kNT0xYWMxNTgxZTYxMTg4ZGEyODg1Y2MxNGZmNDliMjBiZSIKKworUEUgPSAiMSIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjZjYWViZWFkNGI3NzliYTAzMTcyN2Y2NmE3ZmZhMzU4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhNDdlZTYyMDUzYTZhY2VmM2E4M2Y1MDYzMTI0OTRiZTE0NjEwNjhkMGI5MjY5ZDgxODgzOTcwM2I5NWMxZDEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2lucHV0cHJvdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjBmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9pbnB1dHByb3RvX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhJOiBYIElucHV0IGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIElucHV0IFwKK2V4dGVuc2lvbi4gIFRoZSBleHRlbnNpb24gc3VwcG9ydHMgaW5wdXQgZGV2aWNlcyBvdGhlciB0aGVuIHRoZSBjb3JlIFggXAora2V5Ym9hcmQgYW5kIHBvaW50ZXIuIgorCitQUiA9ICJyMSIKK1BFID0gIjEiCitTUkNSRVYgPSAiNzIwMzAzNjUyMmJhOWQ0YjIyNGQyODJkNmFmYzJkMGI5NDc3MTFlZSIKK1BWID0gIjEuOS45OS4xMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9naXQveG9yZy9wcm90by9pbnB1dHByb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBnZXR0ZXh0CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL2ticHJvdG9fMS4wLjcuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9rYnByb3RvXzEuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZjVjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9rYnByb3RvXzEuMC43LmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEtCOiBYIEtleWJvYXJkIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYIFwKK0tleWJvYXJkIGV4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgdG8gY29udHJvbCBvcHRpb25zIHJlbGF0ZWQgXAordG8ga2V5Ym9hcmQgaGFuZGxpbmcgYW5kIGxheW91dC4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2RkNmVhOTllMmE4M2E1NTJjMDJjODA5NjM2MjNjMzggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vWEtCcHJvdG8uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI1O21kNT01NzQ0ZWVmZjQwN2FlYjZlN2ExMzQ2ZWViYWI0ODZhMiIKKworUEUgPSAiMSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOTRhZmM5MGMxZjdiZWY0YTI3ZmRkNTllY2UzOWM4NzgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjg4MjIxMGI3NjM3NmUzZmEwMDZiMTFkYmQ4OTBlNTZlYzA5NDJiYzU2ZTY1ZDEyNDlmZjRhZjg2ZjkwYjg1NyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ByZXNlbnRwcm90b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9wcmVzZW50cHJvdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYjZmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9wcmVzZW50cHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMjQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSBiYXNpYyBoZWFkZXJzIGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtIgorREVTQ1JJUFRJT04gPSAiVGhlIFByZXNlbnQgZXh0ZW5zaW9uIHByb3ZpZGVzIGEgd2F5IGZvciBhcHBsaWNhdGlvbnMgdG8gdXBkYXRlIHRoZWlyIFwKKyAgICAgICAgICAgICAgIHdpbmRvdyBjb250ZW50cyBmcm9tIGEgcGl4bWFwIGluIGEgd2VsbCBkZWZpbmVkIGZhc2hpb24sIHN5bmNocm9uaXppbmcgXAorICAgICAgICAgICAgICAgd2l0aCB0aGUgZGlzcGxheSByZWZyZXNoIGFuZCBwb3RlbnRpYWxseSB1c2luZyBhIG1vcmUgZWZmaWNpZW50IFwKKyAgICAgICAgICAgICAgIG1lY2hhbmlzbSB0aGFuIGNvcHlpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBzb3VyY2UgcGl4bWFwLlwKKyAgICAgICAgICAgICAgIgorCitMSUNFTlNFID0gIkdQTHYyIgorCitTUkNSRVYgPSAiMjRmM2E1NmU1NDFiMGE5ZTZjNmVlNzYwODFmNDQxMjIxYTEyMGVmOSIKK1BWID0gIjEuMCtnaXQke1NSQ1BWfSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDdlNTA4Y2EyODBmZGU5NzkwNmVhY2I3Nzg5MmMzYWMiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ2l0L3hvcmcvcHJvdG8vcHJlc2VudHByb3RvIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmFuZHJwcm90b18xLjUuMC5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JhbmRycHJvdG9fMS41LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU5ZTUyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JhbmRycHJvdG9fMS41LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmFuZFI6IFggUmVzaXplLCBSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggUmVzaXplLCBcCitSb3RhdGUgYW5kIFJlZmxlY3QgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gXAorcmVzaXplLCByb3RhdGUgYW5kIHJlZmxlY3QgdGhlIHJvb3Qgd2luZG93IG9mIGEgc2NyZWVuLiIKKworTElDRU5TRSA9ICJNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wMDQyNmQ0MWJkM2Q5MjY3Y2Y5YmJiMmRmOTMyM2E1ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9yYW5kcnByb3RvLmg7ZW5kbGluZT0zMDttZDU9Mzg4NTk1N2M2MDQ4ZmRmMzMxMGFjOGJhNTRjYTJjM2YiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmFuZHJleHQiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNDY3NjVjOGRjYWNiNzExNGM4MjFiYWYwZGYxZTc5NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YzY3NTUzM2U3OWNkNzMwOTk3ZDIzMmM4ODk0YjY2OTIxNzRkY2U1OGQzZTIwNzAyMWI4Zjg2MGJlNDk4NDY4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVjb3JkcHJvdG9fMS4xNC4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVjb3JkcHJvdG9fMS4xNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjMxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZWNvcmRwcm90b18xLjE0LjIuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYUmVjb3JkOiBYIFJlY29yZCBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBSZWNvcmQgXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gaXMgdXNlZCB0byByZWNvcmQgYW5kIHBsYXkgYmFjayBldmVudCBcCitzZXF1ZW5jZXMuIgorCitMSUNFTlNFID0gIk1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTU3NTgyN2EwZjU1NGJiZWQzMzI1NDI5NzZkNWYzZDQwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3JlY29yZHByb3RvLmg7ZW5kbGluZT0xOTttZDU9MWNiYjBkZDQ1YTBiMDYwZmY4MzM5MDE2MjBhM2U3MzgiCisKK1JDT05GTElDVFNfJHtQTn0gPSAicmVjb3JkZXh0IgorUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWI0ZTVkZWRlNWVhNTE5MDZmMTUzMGNhMWUyMWQyMTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYTc3NzU0OGQyZTkyYWEyNTlmMTUyOGRlM2M0YTM2ZDE1ZTA3YTQ2NTBkMDk3NjU3M2E4ZTJmZjU0MzdlNzM3MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlbmRlcnByb3RvXzAuMTEuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3JlbmRlcnByb3RvXzAuMTEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgwMGVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vcmVuZGVycHJvdG9fMC4xMS4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlbmRlcjogWCByZW5kZXJpbmcgRXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggXAorUmVuZGVyaW5nIGV4dGVuc2lvbi4gIFRoaXMgaXMgdGhlIGJhc2lzIHRoZSBpbWFnZSBjb21wb3NpdGlvbiB3aXRoaW4gdGhlIFwKK1ggd2luZG93IHN5c3RlbS4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjgyNmQ5OTc2NTE5NjM1MmU2MTIyYTQwNmNmMGQwMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcmVuZGVycHJvdG8uaDtiZWdpbmxpbmU9NDtlbmRsaW5lPTI0O21kNT0zZTVlMjg1MWRhZDI0MGIwYTNhMjdjNDc3NmI0ZmQxZiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZW5kZXJleHQiCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gImE5MTRjY2MxZGU2NmRkZWI0YjYxMWM2YjA2ODZlMjc0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA2NzM1YTViOTJiMjA3NTkyMDRlNDc1MWVjZDYwNjRhMmFkOGE2MjQ2YmI2NWIzMDc4Yjg2MmEwMGRlZjI1MzciCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3Jlc291cmNlcHJvdG9fMS4yLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZXNvdXJjZXByb3RvXzEuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YjYxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9yZXNvdXJjZXByb3RvXzEuMi4wLmJiCkBAIC0wLDAgKzEsMTkgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWFJlczogWCBSZXNvdXJjZSBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBcCitSZXNvdXJjZSBleHRlbnNpb24uICBYUmVzIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0aGF0IGFsbG93cyBYIGNsaWVudHMgdG8gXAorc2VlIGFuZCBtb25pdG9yIFggcmVzb3VyY2UgdXNhZ2Ugb2YgdmFyaW91cyBjbGllbnRzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT02MDQ4NTkzMDVlNjYyNTAzMDc3MjQwZmVlOGM3N2Q5NyIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJyZXNvdXJjZWV4dCIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2ZkYjU3ZGFlMjIxYjcxYjI3MDNmOGUyOTgwZWFhZjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiM2M2NjAwM2E2YmRlYjBmNzA5MzJhOWVkM2NmNTdjYzU1NDIzNDE1NDM3OGQzMDFlMGM1Y2ZhMTg5ZDhmNjgxOCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by9zY3Juc2F2ZXJwcm90b18xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjA3ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8vc2NybnNhdmVycHJvdG9fMS4yLjIuYmIKQEAgLTAsMCArMSwxOSBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYc2NybnNhdmVyOiBYIFNjcmVlbiBTYXZlciBleHRlbnNpb24gaGVhZGVycyIKKworREVTQ1JJUFRJT04gPSAiVGhpcyBwYWNrYWdlIHByb3ZpZGVzIHRoZSB3aXJlIHByb3RvY29sIGZvciB0aGUgWCBTY3JlZW4gXAorU2F2ZXIgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGFuIGV4dGVybmFsIFwic2NyZWVuIHNhdmVyXCIgXAorY2xpZW50IHRvIGRldGVjdCB3aGVuIHRoZSBhbHRlcm5hdGl2ZSBpbWFnZSBpcyB0byBiZSBkaXNwbGF5ZWQgYW5kIHRvIFwKK3Byb3ZpZGUgdGhlIGdyYXBoaWNzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZWQ0OWI3OGIxNWI0MzZjOTMzYjZiOGIwNTRlMzkwMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYXZlcnByb3RvLmg7ZW5kbGluZT0yNjttZDU9YTg0YzA2MzczMDUxNTlmM2MwYWIxNzNhYWVlZGU0OGQiCisKK1BFID0gIjEiCisKK0VYVFJBX09FQ09ORl9hcHBlbmQgPSAiIC0tZW5hYmxlLXNwZWNzPW5vIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZWRkOGE3Mzc3NWU4ZWNlMWQ2OTUxNWRkMTc3NjdiZmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGJiNzBhOGRhMTY0OTMwY2NlYWViNGM3NDE4MDI5MTY2MDUzM2FkM2NjNDUzNzdiMzBhNzk1ZDFiODViY2Q2NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3ZpZGVvcHJvdG9fMi4zLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYWE3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by92aWRlb3Byb3RvXzIuMy4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWHY6IFggVmlkZW8gZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFggVmlkZW8gXAorZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxvd3MgZm9yIGFjY2VybGF0ZWQgZHJhd2luZyBvZiB2aWRlb3MuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNlMzQ3MmExMTlhODY0MDg1ZmE0MTU1Y2IwOTc5YTdiIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTY1ODY0MTU5NTMyN2QzOTkwZWFiNzBmZGI1NWNhOGIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGRhZTE2OGNiODIwZmNkMzJmNTY0ODc5YWZiM2YyNGQyN2MxNzYzMDBkOWFmNjY4MTlhMTgyNjU1MzliZDRiNiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90by5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWI1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG8uaW5jCkBAIC0wLDAgKzEsMjUgQEAKK1NVTU1BUlkgPSAiWENCOiBUaGUgWCBwcm90b2NvbCBDIGJpbmRpbmcgaGVhZGVycyIKK0RFU0NSSVBUSU9OID0gIkZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHRoZSBYIHByb3RvY29sIEMtbGFuZ3VhZ2UgQmluZGluZyBcCisoWENCKS4gIFhDQiBpcyBhIHJlcGxhY2VtZW50IGZvciBYbGliIGZlYXR1cmluZyBhIHNtYWxsIGZvb3RwcmludCwgXAorbGF0ZW5jeSBoaWRpbmcsIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHByb3RvY29sLCBpbXByb3ZlZCB0aHJlYWRpbmcgXAorc3VwcG9ydCwgYW5kIGV4dGVuc2liaWxpdHkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PVhDQiIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1NSQ19VUkkgPSAiaHR0cDovL3hjYi5mcmVlZGVza3RvcC5vcmcvZGlzdC94Y2ItcHJvdG8tJHtQVn0udGFyLmJ6MiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIHB5dGhvbm5hdGl2ZQorCitQQUNLQUdFUyArPSAicHl0aG9uLXhjYmdlbiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L3hjYi8qLnhtbCAke2RhdGFkaXJ9L3hjYi8qLnhzZCIKK0ZJTEVTX3B5dGhvbi14Y2JnZW4gPSAiJHtsaWJkaXJ9L3B5dGhvbioiCisKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitERVBFTkRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIHB5dGhvbi1uYXRpdmUiCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b18xLjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzVhMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fMS4xMS5iYgpAQCAtMCwwICsxLDkgQEAKK2luY2x1ZGUgeGNiLXByb3RvLmluYworCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3NjNiMDgxY2IxMGMyMjM0MzViMDFlMDBkYzBhYmE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9kcmkyLnhtbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTI4O21kNT1mODc2M2IxM2ZmNDMyZTg1OTdlMGQ2MTBjZjU5OGU2NSIKKworCitTUkNfVVJJW21kNXN1bV0gPSAiNmJmMjc5NzQ0NWRjNmQ0M2U5ZTQ3MDdjMDgyZWZmOWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYjRhY2VlZTY1MDJhMGNlNDVmYzM5YjMzYzU0MWEyZGY0NzE1ZDAwYjcyZTY2MGViZThjNWJiNDQ0NzcxZTMyZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hjYi1wcm90b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTRkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y2ItcHJvdG9fZ2l0LmJiCkBAIC0wLDAgKzEsOSBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIHhjYi1wcm90by5pbmMKK1NSQ1JFViA9ICJkODFjYTIzM2U5OGJlOGZhNTllOGM5MGQyNjJjMDUxNjk0NGM1YTY2IgorUFYgPSAiMS4yK2dpdHIke1NSQ1BWfSIKK1BSID0gInI0IgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dpdC94Y2IvcHJvdG8iCitTID0gIiR7V09SS0RJUn0vZ2l0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Y21pc2Nwcm90b18xLjIuMi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUxYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGNtaXNjcHJvdG9fMS4yLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYQy1NSVNDOiBYIFhDLU1pc2NlbGxhbmVvdXMgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhDLU1JU0MgXAorZXh0ZW5zaW9uLCB3aGljaCBpcyB1c2VkIHRvIGdldCBkZXRhaWxzIG9mIFhJRCBhbGxvY2F0aW9ucyB3aXRoaW4gdGhlIFwKK3NlcnZlci4iCisKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDlkODMwNDdjMTU5OTRlMDVkYjI5YjQyM2VkNjY2MmUiCisKK1BFID0gIjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjVmNDg0N2M3OGU0MWI4MDE5ODJjOGE1ZTA2MzY1YjI0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImIxMzIzNjg2OTM3MjI1NmMzNmRiNzlhZTM5ZDU0MjE0MTcyNjc3ZmI3OWU5Y2RjNTU1ZGNlZWM4MGJkOWQyZGYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94ZXh0cHJvdG9fNy4zLjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94ZXh0cHJvdG9fNy4zLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQwYmQ5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hleHRwcm90b183LjMuMC5iYgpAQCAtMCwwICsxLDI0IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhFeHQ6IFggRXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3Igc2V2ZXJhbCBYIFwKK2V4dGVuc2lvbnMuICBUaGVzZSBwcm90b2NvbCBleHRlbnNpb25zIGluY2x1ZGUgRE9VQkxFLUJVRkZFUiwgRFBNUywgXAorRXh0ZW5kZWQtVmlzdWFsLUluZm9ybWF0aW9uLCBMQlgsIE1JVF9TSE0sIE1JVF9TVU5EUlktTk9OU1RBTkRBUkQsIFwKK011bHRpLUJ1ZmZlcmluZywgU0VDVVJJVFksIFNIQVBFLCBTWU5DLCBUT0ctQ1VQLCBYQy1BUFBHUk9VUCwgWEMtTUlTQywgXAorWFRFU1QuICBJbiBhZGRpdGlvbiBhIHNtYWxsIHNldCBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgYWxzbyBcCithdmFpbGFibGUuIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg2ZjI3MzI5MTc1OWQwYmEyYTIyNTg1Y2QxYzA2YzUzIgorCitQRSA9ICIxIgorCitpbmhlcml0IGdldHRleHQKKworRVhUUkFfT0VDT05GX2FwcGVuZCA9ICIgLS1lbmFibGUtc3BlY3M9bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjcwYzkwZjMxM2I0YjA4NTE3NThlZjc3Yjk1MDE5NTg0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYzZjRiMjNhYzhkYjljM2E5ZTBkOGVkYjU5MTcxM2YzZDcwZWY5YzNiMTc1OTcwZGQ4ODIzZGZjOTJhYTViYjAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZGdhcHJvdG9fMi4xLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRnYXByb3RvXzIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmYzY2UzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4NmRnYXByb3RvXzIuMS5iYgpAQCAtMCwwICsxLDE4IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtREdBOiBYRnJlZTg2IERpcmVjdCBHcmFwaGljcyBBY2Nlc3MgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAorRGlyZWN0IEdyYXBoaWNzIEFjY2VzcyBleHRlbnNpb24uIFRoaXMgZXh0ZW5zaW9uIGFsbG93cyBkaXJlY3QgZ3JhcGhpY3MgXAorYWNjZXNzIHRvIGEgZnJhbWVidWZmZXItbGlrZSByZWdpb24sIGFzIHdlbGwgYXMgcmVsYXRpdmUgbW91c2UgXAorcmVwb3J0aW5nLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDFlNjZlNGIzMTcwODhjZjg2OWJjOThlNmFmNGZiNiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ4eGY4NmRnYWV4dCIKK1BSID0gInIyIgorUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gImEwMzZkYzJmY2JmMDUyZWMxMDYyMWZkNDhiNjhkYmIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImFjNWVmNjUxMDhlMWYyMTQ2Mjg2ZTUzMDgwOTc1NjgzZGFlNDlmYzk0NjgwMDQyZTA0YmQxZTIwMTBlOTkwNTAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZHJpcHJvdG9fMi4xLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2ZHJpcHJvdG9fMi4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmOTIxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZkcmlwcm90b18yLjEuMS5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtRFJJOiBYRnJlZTg2IERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhGcmVlODYgXAorRGlyZWN0IFJlbmRlcmluZyBJbmZyYXN0cnVjdHVyZSBleHRlbnNpb24uICBUaGUgWEZyZWU4Ni1EUkkgZXh0ZW5zaW9uIGlzIFwKK3VzZWQgdG8gb3JnYW5pemUgZGlyZWN0IHJlbmRlcmluZyBzdXBwb3J0IG9yIDNEIGNsaWVudHMgYW5kIGhlbHAgXAorYXJiaXRyYXRlIHJlcXVlc3RzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lZjEwM2I5ZDk1MWUzOWZmN2UyM2QzODZlMjAxMWZhMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94Zjg2ZHJpcHJvdG8uaDtlbmRsaW5lPTM1O21kNT00MmJlM2Q4ZTZkNDI5YWI3OTE3MjU3MmJiMGNmZjU0NCIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjFkNzE2ZDBkYWMzYjY2NGU1ZWUyMGM2OWQzNGJjMTBlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljNGI4ZDcyMjFjYjZkYzQzMDkyNjljY2MwMDhhMjI3NTM2OThhZTkyNDVhMzk4YTU5ZGYzNWYxNDA0ZDY2MWYiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2bWlzY3Byb3RvXzAuOS4zLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4Nm1pc2Nwcm90b18wLjkuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY2M2VhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGY4Nm1pc2Nwcm90b18wLjkuMy5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIHhvcmctcHJvdG8tY29tbW9uLmluYworCitTVU1NQVJZID0gIlhGcmVlODYtTWlzYzogWEZyZWU4NiBtaXNjZWxsYW5lb3VzIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZSBcCittaXNjZWxsYW5lb3VzIGV4dGVuc2lvbi4gIFRoZSBYRnJlZTg2LU1pc2MgZXh0ZW5zaW9uIHByb3ZpZGVzIGEgbWVhbnMgdG8gXAorYWNjZXNzIGlucHV0IGRldmljZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIHNwZWNpZmljIHRvIHRoZSBYRnJlZTg2L1hvcmcgXAorRERYLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lMDFlNjZlNGIzMTcwODhjZjg2OWJjOThlNmFmNGZiNiIKKworUFIgPSAicjEiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiY2E2M2JiYjMxY2Y1YjdmMzdiMjIzN2U5MjNmZjI1N2EiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDViOGVjNmE0YThjYTIxMDY2ZGNlMTE3ZTA5ZGNjODg1Mzk4NjJlNjE2ZTYwZmIzOTFkZTA1YjM2ZjYzYjA5NSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hmODZ2aWRtb2RlcHJvdG9fMi4zLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2dmlkbW9kZXByb3RvXzIuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzE5MDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94Zjg2dmlkbW9kZXByb3RvXzIuMy4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWEZyZWU4Ni1WTTogWEZyZWU4NiB2aWRlbyBtb2RlIGV4dGVuc2lvbiBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIHdpcmUgcHJvdG9jb2wgZm9yIHRoZSBYRnJlZTg2IFwKK3ZpZGVvIG1vZGUgZXh0ZW5zaW9uLiAgVGhpcyBleHRlbnNpb24gYWxsb3dzIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gZ2V0IFwKK2FuZCBzZXQgdmlkZW8gbW9kZSB0aW1pbmdzLiIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00OTliZTJmZjM4N2E0MmY4NDYyOGMzNWYzMTFmMTUwMiIKKworUkNPTkZMSUNUU18ke1BOfSA9ICJ4eGY4NnZtZXh0IgorCitQUiA9ICJyMSIKK1BFID0gIjEiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlNzkzZWNlZmVhZWNmZWFiZDFhZWQ2YTAxMDk1MTc0ZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NWQ5NDk5YWE3YjczMjAzZmQ2YjM1MDViMDI1OTYyNGFmZWQ1YzE2Yjk0MWJkMDRmY2YxMjNlNWRlNjk4NzcwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctcHJvdG8veGluZXJhbWFwcm90b18xLjIuMS5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hpbmVyYW1hcHJvdG9fMS4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAwNzc0ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hpbmVyYW1hcHJvdG9fMS4yLjEuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSB4b3JnLXByb3RvLWNvbW1vbi5pbmMKKworU1VNTUFSWSA9ICJYaW5lcmFtYTogWGluZXJhbWEgZXh0ZW5zaW9uIGhlYWRlcnMiCisKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyB0aGUgd2lyZSBwcm90b2NvbCBmb3IgdGhlIFhpbmVyYW1hIFwKK2V4dGVuc2lvbi4gIFRoaXMgZXh0ZW5zaW9uIGlzIHVzZWQgZm9yIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgXAorcGh5c2ljYWwgb3V0cHV0IGRldmljZXMgd2hpY2ggbWF5IGJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgbG9naWNhbCBYIFwKK3NjcmVlbi4iCisKK0xJQ0VOU0UgPSAiTUlUICYgTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9M2UzOTdhNTMyNmM4M2Q1ZDBlYmY1YjNmODcxNjNhYzYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vcGFub3JhbWlYcHJvdG8uaDtlbmRsaW5lPTI0O21kNT0wOThlMGJjMDg5MzY4YTk4ODA5MmIzY2JkYTYxN2E1NyIKKworUEUgPSAiMSIKKworU1JDX1VSSVttZDVzdW1dID0gIjk5NTlmZTBiZmIyMmEwZTcyNjA0MzNiOGQxOTk1OTBhIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk3NzU3NGJiM2RjMTkyZWNkOWM1NWY1OWY5OTFlYzFkZmYzNDBiZTNlMzEzOTJjOTVkZWZmNDIzZGE1MjQ4NWIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94b3JnLXByb3RvLWNvbW1vbi5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94b3JnLXByb3RvLWNvbW1vbi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0MTdjOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hvcmctcHJvdG8tY29tbW9uLmluYwpAQCAtMCwwICsxLDI2IEBACitTVU1NQVJZID0gIlggcHJvdG9jb2wgaGVhZGVyczogJHtYT1JHX1BOfSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cueC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PXhvcmciCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitMSUNFTlNFID0gIk1JVC1YIgorCitYT1JHX1BOID0gIiR7QlBOfSIKKworU1JDX1VSSSA9ICIke1hPUkdfTUlSUk9SfS9pbmRpdmlkdWFsL3Byb3RvLyR7WE9SR19QTn0tJHtQVn0udGFyLmJ6MiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK0RFUEVORFMgPSAidXRpbC1tYWNyb3MiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1mb3AiCisKK1VOS05PV05fQ09ORklHVVJFX1dISVRFTElTVCArPSAiLS13aXRob3V0LWZvcCAtLXdpdGhvdXQteG1sdG8gLS13aXRoLXhtbHRvIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCisKKyMgJHtQTn0gaXMgZW1wdHkgc28gd2UgbmVlZCB0byB0d2VhayAtZGV2IGFuZCAtZGJnIHBhY2thZ2UgZGVwZW5kZW5jaWVzCitSREVQRU5EU18ke1BOfS1kZXYgPSAiIgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7UE59LWRldiAoPSAke0VYVEVORFBLR1Z9KSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90by94cHJvdG9fZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGFkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitEb24ndCBhbHdheXMgZGVmaW5lIExPTkc2NCBmb3IgQU1ENjQKKyAgICAKK1gzMiBkZWZpbmVzIF9fYW1kNjRfXy9hbWQ2NCB3aXRoIDMyYml0IGxvbmcuICBXZSBzaG91bGQgc2ltcGx5IGNoZWNrCitfX0xQNjRfXyBiZWZvcmUgZGVmaW5pbmcgTE9ORzY0IHdpdGhvdXQgY2hlY2tpbmcgX19hbWQ2NF9fL2FtZDY0LgorCitUaGlzIGZpeGVzIGNvbXBpbGF0aW9uIHdpdGggeDMyIHRvb2xjaGFpbi4KKworUmVjZWl2ZWQgdGhpcyBwYXRjaCBmcm9tIEguSi4gTHUgPGhqbC50b29sc0BnbWFpbC5jb20+CitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPiAyMDExLzEyLzEKKworLS0tIHhwcm90by03LjAuMjIvWG1kLmgueDMyCTIwMDktMDctMTEgMDQ6MTk6NTAuMDAwMDAwMDAwIC0wNzAwCisrKysgeHByb3RvLTcuMC4yMi9YbWQuaAkyMDExLTExLTMwIDE3OjE0OjE5LjI5MDM5NTg5MyAtMDgwMAorQEAgLTYyLDcgKzYyLDYgQEAgU09GVFdBUkUuCisgICAgICBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKGlhNjQpIHx8IFwKKyAgICAgIGRlZmluZWQoX19zcGFyYzY0X18pIHx8IFwKKyAgICAgIGRlZmluZWQoX19zMzkweF9fKSB8fCBcCistICAgICBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChhbWQ2NCkgfHwgXAorICAgICAgZGVmaW5lZChfX3Bvd2VycGM2NF9fKQorICMgIGRlZmluZSBMT05HNjQJCQkJLyogMzIvNjQtYml0IGFyY2hpdGVjdHVyZSAqLworICMgZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXByb3RvL3hwcm90b183LjAuMjguYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjdhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy1wcm90by94cHJvdG9fNy4wLjI4LmJiCkBAIC0wLDAgKzEsMjAgQEAKK3JlcXVpcmUgeG9yZy1wcm90by1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiWGxpYjogQyBMYW5ndWFnZSBYIGludGVyZmFjZSBoZWFkZXJzIgorCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgcHJvdmlkZXMgdGhlIGJhc2ljIGhlYWRlcnMgZm9yIHRoZSBYIFdpbmRvdyBcCitTeXN0ZW0uIgorCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWI5ZTA1MTEwN2Q1NjI4OTY2NzM5YTBiMmU5YjMyNjc2IgorCitQRSA9ICIxIgorCitTUkNfVVJJICs9ICJmaWxlOi8veHByb3RvX2ZpeF9mb3JfeDMyLnBhdGNoIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kID0gIiAtLWVuYWJsZS1zcGVjcz1ubyIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSVttZDVzdW1dID0gIjNjZTJmMjMwYzVkOGZhOTI5ZjMyNmFkMWYwZmE0MGE4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI5ZTg1NTY4ZDFmNjhjZWVmOGEyYzA4MWRhZDliYzBlNTUwMGE1M2NmZmZkZTI0YjU2NGRjNDNkNDZkZGY2Y2EiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvZ2NjbWFrZWRlcF8xLjAuMy5iYiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvZ2NjbWFrZWRlcF8xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2YyZjRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC9nY2NtYWtlZGVwXzEuMC4zLmJiCkBAIC0wLDAgKzEsMTcgQEAKK1NVTU1BUlkgPSAiUHJvZ3JhbSB0byBjcmVhdGUgZGVwZW5kZW5jaWVzIGluIG1ha2VmaWxlcyIKKworREVTQ1JJUFRJT04gPSAiVGhlIGdjY21ha2VkZXAgcHJvZ3JhbSBjYWxscyAnZ2NjIC1NJyB0byBvdXRwdXQgbWFrZWZpbGUgXAorcnVsZXMgZGVzY3JpYmluZyB0aGUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggc291cmNlZmlsZSwgc28gdGhhdCBtYWtlIGtub3dzIFwKK3doaWNoIG9iamVjdCBmaWxlcyBtdXN0IGJlIHJlY29tcGlsZWQgd2hlbiBhIGRlcGVuZGVuY3kgaGFzIGNoYW5nZWQuIgorCityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9NYWtlZmlsZS5hbTtlbmRsaW5lPTIwO21kNT0yM2MyNzczOTZkNjkwNDEzMjQ1ZWJiODliMThjNWQ0ZCIKK0RFU0NSSVBUSU9OID0gImNyZWF0ZSBkZXBlbmRlbmNpZXMgaW4gbWFrZWZpbGVzIHVzaW5nICdnY2MgLU0nIgorREVQRU5EUyA9ICJ1dGlsLW1hY3JvcyIKK1JERVBFTkRTXyR7UE59ID0gImdjYyIKKworUFIgPSAicjMiCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTI3ZGRiNjEzMWViNGE1NmZkZjY2NDRhNjNhZGU3ODgiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjllMmU3YTU5MGUyN2Y4NGI2NzA4YWI3YTgxZTU0NjM5OWI5NDliZjY1MmZiOWI5NTE5M2UwZTU0M2U2YTU0OCIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL21ha2VkZXBlbmRfMS4wLjUuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL21ha2VkZXBlbmRfMS4wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhOTY3YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXV0aWwvbWFrZWRlcGVuZF8xLjAuNS5iYgpAQCAtMCwwICsxLDIxIEBACityZXF1aXJlIHhvcmctdXRpbC1jb21tb24uaW5jCisKK1NVTU1BUlkgPSAiY3JlYXRlIGRlcGVuZGVuY2llcyBpbiBtYWtlZmlsZXMiCisKK0RFU0NSSVBUSU9OID0gIlRoZSBtYWtlZGVwZW5kIHByb2dyYW0gcmVhZHMgZWFjaCBzb3VyY2VmaWxlIGluIHNlcXVlbmNlIFwKK2FuZCBwYXJzZXMgaXQgbGlrZSBhIEMtcHJlcHJvY2Vzc29yLCBwcm9jZXNzaW5nIFwKK2FsbCAjaW5jbHVkZSwgI2RlZmluZSwgICN1bmRlZiwgI2lmZGVmLCAjaWZuZGVmLCAjZW5kaWYsICNpZiwgI2VsaWYgXAorYW5kICNlbHNlIGRpcmVjdGl2ZXMgc28gdGhhdCBpdCBjYW4gY29ycmVjdGx5IHRlbGwgd2hpY2ggI2luY2x1ZGUsIFwKK2RpcmVjdGl2ZXMgd291bGQgYmUgdXNlZCBpbiBhIGNvbXBpbGF0aW9uLiBBbnkgI2luY2x1ZGUsIGRpcmVjdGl2ZXMgXAorY2FuIHJlZmVyZW5jZSBmaWxlcyBoYXZpbmcgb3RoZXIgI2luY2x1ZGUgZGlyZWN0aXZlcywgYW5kIHBhcnNpbmcgd2lsbCBcCitvY2N1ciBpbiB0aGVzZSBmaWxlcyBhcyB3ZWxsLiIKKworREVQRU5EUyA9ICJ4cHJvdG8gdXRpbC1tYWNyb3MiCitQRSA9ICIxIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NDNhNmVkYTM0YjQ4ZWU4MjFiM2I2NmY0Zjc1M2NlNGYiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZmIyZDdjN2UyMjg0MDk0Nzg2M2VmYWVkYzE3NTc0NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MDM5MDNkNDFmYjViYWRiNzNjYjcwZDdiMzc0MGM4YjMwZmUxY2M2OGM1MDRkM2I2YTg1ZTY2NDRjNGU1MDA0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3V0aWwtbWFjcm9zXzEuMTkuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNmNTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC91dGlsLW1hY3Jvc18xLjE5LjAuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJYIGF1dG90b29scyBtYWNyb3MiCisKK0RFU0NSSVBUSU9OID0gIk00IGF1dG90b29scyBtYWNyb3MgdXNlZCBieSB2YXJpb3VzIFgub3JnIHByb2dyYW1zLiIKKworcmVxdWlyZSB4b3JnLXV0aWwtY29tbW9uLmluYworCitMSUNFTlNFID0gIk1JVCAmIE1JVC1zdHlsZSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE5NzA1MTFmZGRkNDM5YjA3YTZiYTc4OWQyOGZmNjYyIgorCitQRSA9ICIxIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNDBlMWNhYTQ5YTcxYTI2ZTBhYTY4ZGRkMDAyMDM3MTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGQ0ZGY1MWIyOTAyM2RhZjJmNjNhZWJmM2ViYzYzOGVhODhlZmVkZmQ1NjBhYjU4NjY3NDFhYjNmOTJhY2FhMSIKKworIyAke1BOfSBpcyBlbXB0eSBzbyB3ZSBuZWVkIHRvIHR3ZWFrIC1kZXYgYW5kIC1kYmcgcGFja2FnZSBkZXBlbmRlbmNpZXMKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy11dGlsL3hvcmctdXRpbC1jb21tb24uaW5jIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC94b3JnLXV0aWwtY29tbW9uLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQwMjJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmctdXRpbC94b3JnLXV0aWwtY29tbW9uLmluYwpAQCAtMCwwICsxLDEzIEBACitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD14b3JnIgorCitTRUNUSU9OID0gIngxMS91dGlscyIKK0xJQ0VOU0UgPSAiTUlULVgiCisKK1hPUkdfUE4gPSAiJHtCUE59IgorCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwvdXRpbC8ke1hPUkdfUE59LSR7UFZ9LnRhci5neiIKKworUyA9ICIke1dPUktESVJ9LyR7WE9SR19QTn0tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZWI2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYKQEAgLTAsMCArMSw5IEBACitTZWN0aW9uICJNb2R1bGUiCisgICAgTG9hZCAiZmJkZXZodyIKKyAgICBMb2FkICJmYiIKKyAgICBMb2FkICJzaGFkb3ciCisgICAgTG9hZCAic2hhZG93ZmIiCisgICAgTG9hZCAidmJlIgorICAgIExvYWQgInZnYWh3IgorRW5kU2VjdGlvbgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdWFybS94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdWFybS94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11YXJtL3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVtaXBzL3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwcy94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjOGI1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwcy94b3JnLmNvbmYKQEAgLTAsMCArMSw3MCBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgRGVmYXVsdERlcHRoICAxNgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHM2NC94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdW1pcHM2NC94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI5YWUyMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11bWlwczY0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY5IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJtb3VzZSIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC9taWNlIgorICAgIE9wdGlvbiAgICAgICAgIlByb3RvY29sIiAgICAgICAgIkltUFMvMiIKKyAgICBPcHRpb24gICAgICAgICJaQXhpc01hcHBpbmciICAgICAgICAiNCA1IgorICAgIE9wdGlvbiAgICAgICAgIkVtdWxhdGUzQnV0dG9ucyIgICAgInRydWUiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIlFlbXUgVGFibGV0IgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCIKKyAgICBPcHRpb24gICAgICAgICJVU0IiICAgICAgICAgICAib24iCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIkRldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIERyaXZlciAgICAgICAgImZiZGV2IgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVwcGMveG9yZy5jb25mIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVwcGMveG9yZy5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOWFlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXBwYy94b3JnLmNvbmYKQEAgLTAsMCArMSw2OSBAQAorCitTZWN0aW9uICJGaWxlcyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlS2V5Ym9hcmQiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICIvZGV2L2lucHV0L2J5LXBhdGgvcGxhdGZvcm0taTgwNDItc2VyaW8tMC1ldmVudC1rYmQiCisgICAgT3B0aW9uICAgICAgICAiWGtiUnVsZXMiICAgICJ4b3JnIgorICAgIE9wdGlvbiAgICAgICAgIlhrYk1vZGVsIiAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiWGtiTGF5b3V0IiAgICAidXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgRHJpdmVyICAgICAgICAibW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJEZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBEcml2ZXIgICAgICAgICJmYmRldiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11c2g0L3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11c2g0L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjlhZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXVzaDQveG9yZy5jb25mCkBAIC0wLDAgKzEsNjkgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgIm1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiRGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgRHJpdmVyICAgICAgICAiZmJkZXYiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIk1vbml0b3IiCisgICAgSWRlbnRpZmllciAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIE9wdGlvbiAgICAgICAgIkRQTVMiCisgICAgIyAxMDI0eDYwMCA1OS44NSBIeiAoQ1ZUKSBoc3luYzogMzcuMzUga0h6OyBwY2xrOiA0OS4wMCBNSHoKKyAgICBNb2RlbGluZSAiMTAyNHg2MDBfNjAuMDAiICAgNDkuMDAgIDEwMjQgMTA3MiAxMTY4IDEzMTIgIDYwMCA2MDMgNjEzIDYyNCAtaHN5bmMgK3ZzeW5jCisgICAgIyA2NDB4NDgwIEAgNjBIeiAoSW5kdXN0cnkgc3RhbmRhcmQpIGhzeW5jOiAzMS41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDI1LjIgIDY0MCAgNjU2ICA3NTIgIDgwMCAgICA0ODAgIDQ5MCAgNDkyICA1MjUgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDcySHogKFZFU0EpIGhzeW5jOiAzNy45a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjY0ICA3MDQgIDgzMiAgICA0ODAgIDQ4OSAgNDkxICA1MjAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDc1SHogKFZFU0EpIGhzeW5jOiAzNy41a0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDMxLjUgIDY0MCAgNjU2ICA3MjAgIDg0MCAgICA0ODAgIDQ4MSAgNDg0ICA1MDAgLWhzeW5jIC12c3luYworICAgICMgNjQweDQ4MCBAIDg1SHogKFZFU0EpIGhzeW5jOiA0My4za0h6CisgICAgTW9kZUxpbmUgIjY0MHg0ODAiICAgIDM2LjAgIDY0MCAgNjk2ICA3NTIgIDgzMiAgICA0ODAgIDQ4MSAgNDg0ICA1MDkgLWhzeW5jIC12c3luYworRW5kU2VjdGlvbgorCitTZWN0aW9uICJTY3JlZW4iCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgRGV2aWNlICAgICAgICAiR3JhcGhpY3MgQ29udHJvbGxlciIKKyAgICBNb25pdG9yICAgICAgICAiR2VuZXJpYyBNb25pdG9yIgorICAgIFN1YlNlY3Rpb24gIkRpc3BsYXkiCisgICAgICAgIE1vZGVzICAgICAiNjQweDQ4MCIKKyAgICBFbmRTdWJTZWN0aW9uCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNlcnZlckxheW91dCIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IExheW91dCIKKyAgICBTY3JlZW4gICAgICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBJbnB1dERldmljZSAgICAiR2VuZXJpYyBLZXlib2FyZCIKKyAgICAjIElucHV0RGV2aWNlICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIElucHV0RGV2aWNlICAgICJRRU1VIFRhYmxldCIKKyAgICBPcHRpb24gICAgICAgICAiQWxsb3dFbXB0eUlucHV0IiAibm8iCitFbmRTZWN0aW9uCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni02NC94b3JnLmNvbmYgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWcvcWVtdXg4Ni02NC94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJkYTllYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2LTY0L3hvcmcuY29uZgpAQCAtMCwwICsxLDY0IEBACisKK1NlY3Rpb24gIkZpbGVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgIERyaXZlciAgICAgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVLZXlib2FyZCIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgIi9kZXYvaW5wdXQvYnktcGF0aC9wbGF0Zm9ybS1pODA0Mi1zZXJpby0wLWV2ZW50LWtiZCIKKyAgICBPcHRpb24gICAgICAgICJYa2JSdWxlcyIgICAgInhvcmciCisgICAgT3B0aW9uICAgICAgICAiWGtiTW9kZWwiICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJYa2JMYXlvdXQiICAgICJ1cyIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBEcml2ZXIgICAgICAgICJ2bW1vdXNlIgorICAgIE9wdGlvbiAgICAgICAgIkNvcmVQb2ludGVyIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAgICIvZGV2L2lucHV0L21pY2UiCisgICAgT3B0aW9uICAgICAgICAiUHJvdG9jb2wiICAgICAgICAiSW1QUy8yIgorICAgIE9wdGlvbiAgICAgICAgIlpBeGlzTWFwcGluZyIgICAgICAgICI0IDUiCisgICAgT3B0aW9uICAgICAgICAiRW11bGF0ZTNCdXR0b25zIiAgICAidHJ1ZSIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiSW5wdXREZXZpY2UiCisgICAgSWRlbnRpZmllciAgICAiUWVtdSBUYWJsZXQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wIgorICAgIE9wdGlvbiAgICAgICAgIlVTQiIgICAgICAgICAgICJvbiIKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiTW9uaXRvciIKKyAgICBJZGVudGlmaWVyICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgT3B0aW9uICAgICAgICAiRFBNUyIKKyAgICAjIDEwMjR4NjAwIDU5Ljg1IEh6IChDVlQpIGhzeW5jOiAzNy4zNSBrSHo7IHBjbGs6IDQ5LjAwIE1IegorICAgIE1vZGVsaW5lICIxMDI0eDYwMF82MC4wMCIgICA0OS4wMCAgMTAyNCAxMDcyIDExNjggMTMxMiAgNjAwIDYwMyA2MTMgNjI0IC1oc3luYyArdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA2MEh6IChJbmR1c3RyeSBzdGFuZGFyZCkgaHN5bmM6IDMxLjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMjUuMiAgNjQwICA2NTYgIDc1MiAgODAwICAgIDQ4MCAgNDkwICA0OTIgIDUyNSAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzJIeiAoVkVTQSkgaHN5bmM6IDM3LjlrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NjQgIDcwNCAgODMyICAgIDQ4MCAgNDg5ICA0OTEgIDUyMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgNzVIeiAoVkVTQSkgaHN5bmM6IDM3LjVrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzEuNSAgNjQwICA2NTYgIDcyMCAgODQwICAgIDQ4MCAgNDgxICA0ODQgIDUwMCAtaHN5bmMgLXZzeW5jCisgICAgIyA2NDB4NDgwIEAgODVIeiAoVkVTQSkgaHN5bmM6IDQzLjNrSHoKKyAgICBNb2RlTGluZSAiNjQweDQ4MCIgICAgMzYuMCAgNjQwICA2OTYgIDc1MiAgODMyICAgIDQ4MCAgNDgxICA0ODQgIDUwOSAtaHN5bmMgLXZzeW5jCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIlNjcmVlbiIKKyAgICBJZGVudGlmaWVyICAgICJEZWZhdWx0IFNjcmVlbiIKKyAgICBEZXZpY2UgICAgICAgICJHcmFwaGljcyBDb250cm9sbGVyIgorICAgIE1vbml0b3IgICAgICAgICJHZW5lcmljIE1vbml0b3IiCisgICAgU3ViU2VjdGlvbiAiRGlzcGxheSIKKyAgICAgICAgTW9kZXMgICAgICI2NDB4NDgwIgorICAgIEVuZFN1YlNlY3Rpb24KK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2VydmVyTGF5b3V0IgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgTGF5b3V0IgorICAgIFNjcmVlbiAgICAgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIElucHV0RGV2aWNlICAgICJHZW5lcmljIEtleWJvYXJkIgorICAgICMgSW5wdXREZXZpY2UgICAgIkNvbmZpZ3VyZWQgTW91c2UiCisgICAgSW5wdXREZXZpY2UgICAgIlFFTVUgVGFibGV0IgorICAgIE9wdGlvbiAgICAgICAgICJBbGxvd0VtcHR5SW5wdXQiICJubyIKK0VuZFNlY3Rpb24KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2L3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy9xZW11eDg2L3hvcmcuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmRhOWVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3FlbXV4ODYveG9yZy5jb25mCkBAIC0wLDAgKzEsNjQgQEAKKworU2VjdGlvbiAiRmlsZXMiCitFbmRTZWN0aW9uCisKK1NlY3Rpb24gIklucHV0RGV2aWNlIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgRHJpdmVyICAgICAgICAiZXZkZXYiCisgICAgT3B0aW9uICAgICAgICAiQ29yZUtleWJvYXJkIgorICAgIE9wdGlvbiAgICAgICAgIkRldmljZSIgICAgICAiL2Rldi9pbnB1dC9ieS1wYXRoL3BsYXRmb3JtLWk4MDQyLXNlcmlvLTAtZXZlbnQta2JkIgorICAgIE9wdGlvbiAgICAgICAgIlhrYlJ1bGVzIiAgICAieG9yZyIKKyAgICBPcHRpb24gICAgICAgICJYa2JNb2RlbCIgICAgImV2ZGV2IgorICAgIE9wdGlvbiAgICAgICAgIlhrYkxheW91dCIgICAgInVzIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJDb25maWd1cmVkIE1vdXNlIgorICAgIERyaXZlciAgICAgICAgInZtbW91c2UiCisgICAgT3B0aW9uICAgICAgICAiQ29yZVBvaW50ZXIiCisgICAgT3B0aW9uICAgICAgICAiRGV2aWNlIiAgICAgICAgIi9kZXYvaW5wdXQvbWljZSIKKyAgICBPcHRpb24gICAgICAgICJQcm90b2NvbCIgICAgICAgICJJbVBTLzIiCisgICAgT3B0aW9uICAgICAgICAiWkF4aXNNYXBwaW5nIiAgICAgICAgIjQgNSIKKyAgICBPcHRpb24gICAgICAgICJFbXVsYXRlM0J1dHRvbnMiICAgICJ0cnVlIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJJbnB1dERldmljZSIKKyAgICBJZGVudGlmaWVyICAgICJRZW11IFRhYmxldCIKKyAgICBEcml2ZXIgICAgICAgICJldmRldiIKKyAgICBPcHRpb24gICAgICAgICJDb3JlUG9pbnRlciIKKyAgICBPcHRpb24gICAgICAgICJEZXZpY2UiICAgICAgICAiL2Rldi9pbnB1dC90b3VjaHNjcmVlbjAiCisgICAgT3B0aW9uICAgICAgICAiVVNCIiAgICAgICAgICAgIm9uIgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJNb25pdG9yIgorICAgIElkZW50aWZpZXIgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBPcHRpb24gICAgICAgICJEUE1TIgorICAgICMgMTAyNHg2MDAgNTkuODUgSHogKENWVCkgaHN5bmM6IDM3LjM1IGtIejsgcGNsazogNDkuMDAgTUh6CisgICAgTW9kZWxpbmUgIjEwMjR4NjAwXzYwLjAwIiAgIDQ5LjAwICAxMDI0IDEwNzIgMTE2OCAxMzEyICA2MDAgNjAzIDYxMyA2MjQgLWhzeW5jICt2c3luYworICAgICMgNjQweDQ4MCBAIDYwSHogKEluZHVzdHJ5IHN0YW5kYXJkKSBoc3luYzogMzEuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAyNS4yICA2NDAgIDY1NiAgNzUyICA4MDAgICAgNDgwICA0OTAgIDQ5MiAgNTI1IC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3Mkh6IChWRVNBKSBoc3luYzogMzcuOWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY2NCAgNzA0ICA4MzIgICAgNDgwICA0ODkgIDQ5MSAgNTIwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA3NUh6IChWRVNBKSBoc3luYzogMzcuNWtIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzMS41ICA2NDAgIDY1NiAgNzIwICA4NDAgICAgNDgwICA0ODEgIDQ4NCAgNTAwIC1oc3luYyAtdnN5bmMKKyAgICAjIDY0MHg0ODAgQCA4NUh6IChWRVNBKSBoc3luYzogNDMuM2tIegorICAgIE1vZGVMaW5lICI2NDB4NDgwIiAgICAzNi4wICA2NDAgIDY5NiAgNzUyICA4MzIgICAgNDgwICA0ODEgIDQ4NCAgNTA5IC1oc3luYyAtdnN5bmMKK0VuZFNlY3Rpb24KKworU2VjdGlvbiAiU2NyZWVuIgorICAgIElkZW50aWZpZXIgICAgIkRlZmF1bHQgU2NyZWVuIgorICAgIERldmljZSAgICAgICAgIkdyYXBoaWNzIENvbnRyb2xsZXIiCisgICAgTW9uaXRvciAgICAgICAgIkdlbmVyaWMgTW9uaXRvciIKKyAgICBTdWJTZWN0aW9uICJEaXNwbGF5IgorICAgICAgICBNb2RlcyAgICAgIjY0MHg0ODAiCisgICAgRW5kU3ViU2VjdGlvbgorRW5kU2VjdGlvbgorCitTZWN0aW9uICJTZXJ2ZXJMYXlvdXQiCisgICAgSWRlbnRpZmllciAgICAiRGVmYXVsdCBMYXlvdXQiCisgICAgU2NyZWVuICAgICAgICAiRGVmYXVsdCBTY3JlZW4iCisgICAgSW5wdXREZXZpY2UgICAgIkdlbmVyaWMgS2V5Ym9hcmQiCisgICAgIyBJbnB1dERldmljZSAgICAiQ29uZmlndXJlZCBNb3VzZSIKKyAgICBJbnB1dERldmljZSAgICAiUUVNVSBUYWJsZXQiCisgICAgT3B0aW9uICAgICAgICAgIkFsbG93RW1wdHlJbnB1dCIgIm5vIgorRW5kU2VjdGlvbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhmODYtY29uZmlnL3hvcmcuY29uZiBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy94b3JnLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZy94b3JnLmNvbmYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14Zjg2LWNvbmZpZ18wLjEuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwN2MyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteGY4Ni1jb25maWdfMC4xLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiWC5PcmcgWCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy54Lm9yZyIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCitQUiA9ICJyMzMiCisKK1NSQ19VUkkgPSAiZmlsZTovL3hvcmcuY29uZiIKKworU1JDX1VSSV9hcHBlbmRfbGliYy1tdXNsID0gIlwKKyAgICAgICAgICBmaWxlOi8vMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYgXAorIgorCitTID0gIiR7V09SS0RJUn0iCisKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L1gxMS94b3JnLmNvbmYiCitDT05GRklMRVNfJHtQTn1fYXBwZW5kX2xpYmMtbXVzbCA9ICIgJHtzeXNjb25mZGlyfS9YMTEveG9yZy5jb25mLmQvMTAtcHJlbG9hZC1tb2R1bGVzLmNvbmYiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorCitkb19pbnN0YWxsICgpIHsKKwlpZiB0ZXN0IC1zICR7V09SS0RJUn0veG9yZy5jb25mOyB0aGVuCisJCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMQorCQlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS94b3JnLmNvbmYgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS8KKwlmaQorfQorCitkb19pbnN0YWxsX2FwcGVuZF9saWJjLW11c2wgKCkgeworCWluc3RhbGwgLURtIDA2NDQgJHtXT1JLRElSfS8xMC1wcmVsb2FkLW1vZHVsZXMuY29uZiAke0R9LyR7c3lzY29uZmRpcn0vWDExL3hvcmcuY29uZi5kLzEwLXByZWxvYWQtbW9kdWxlcy5jb25mCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxYzAyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnLmluYwpAQCAtMCwwICsxLDE3MCBAQAorU1VNTUFSWSA9ICJUaGUgWC5PcmcgWCBzZXJ2ZXIiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lngub3JnIgorU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0xJQ0VOU0UgPSAiTUlULVgiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01ZGY4Nzk1MGFmNTFhYzJjNTgyMjA5NDU1M2VhMTg4MCIKKworIyB4Zjg2LSotKiBwYWNrYWdlcyBkZXBlbmQgb24gYW4gWCBzZXJ2ZXIgYnVpbHQgd2l0aCB0aGUgeGZyZWU4NiBERFgKKyMgc28gd2UgaGF2ZSBhIHZpcnR1YWwgdG8gcmVwcmVzZW50IHRoYXQ6CisjIGRlcHJlY2F0ZWQsIHdlIHNob3VsZCB1c2UgdmlydHVhbC94c2VydmVyIGluc3RlYWQKK1BST1ZJREVTID0gInZpcnR1YWwveHNlcnZlci14Zjg2IgorCisjIE90aGVyIHBhY2thZ2VzIHRlbmQgdG8ganVzdCBjYXJlIHRoYXQgdGhlcmUgaXMgKmFuKiBYIHNlcnZlcjoKK1BST1ZJREVTICs9ICJ2aXJ0dWFsL3hzZXJ2ZXIiCisKK1BFID0gIjIiCitJTkNfUFIgPSAicjgiCisKK1hPUkdfUE4gPSAieG9yZy1zZXJ2ZXIiCitTUkNfVVJJID0gIiR7WE9SR19NSVJST1J9L2luZGl2aWR1YWwveHNlcnZlci8ke1hPUkdfUE59LSR7UFZ9LnRhci5iejIiCitTUkNfVVJJICs9ICJmaWxlOi8vbWFjcm9fdHdlYWsucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS8ke1hPUkdfUE59LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFJPVE9fREVQUyA9ICJyYW5kcnByb3RvIHJlbmRlcnByb3RvIGZpeGVzcHJvdG8gZGFtYWdlcHJvdG8geGV4dHByb3RvIHhwcm90byB4Zjg2ZGdhcHJvdG8geGY4Nm1pc2Nwcm90byB4Zjg2dmlkbW9kZXByb3RvIGNvbXBvc2l0ZXByb3RvIHJlY29yZHByb3RvIHJlc291cmNlcHJvdG8gdmlkZW9wcm90byBzY3Juc2F2ZXJwcm90byAgeGluZXJhbWFwcm90byBmb250c3Byb3RvIGticHJvdG8gaW5wdXRwcm90byBiaWdyZXFzcHJvdG8geGNtaXNjcHJvdG8gcHJlc2VudHByb3RvIgorTElCX0RFUFMgPSAicGl4bWFuIGxpYnhmb250IHh0cmFucyBsaWJ4YXUgbGlieGV4dCBsaWJ4ZG1jcCBsaWJkcm0gbGlieGtiZmlsZSBsaWJwY2lhY2Nlc3Mgb3BlbnNzbCBsaWJnY3J5cHQiCitERVBFTkRTID0gIiR7UFJPVE9fREVQU30gJHtMSUJfREVQU30gZm9udC11dGlsIgorCisjIFNwbGl0IG91dCBzb21lIG1vZHVsZXMgYW5kIGV4dGVuc2lvbnMgZnJvbSB0aGUgbWFpbiBwYWNrYWdlCisjIFRoZXNlIGFyZW4ndCBuZWVkZWQgZm9yIGJhc2ljIG9wZXJhdGlvbnMgYW5kIG9ubHkgdGFrZSB1cCBzcGFjZToKKyMgIDMyLjBrICAgbGliZHJpLnNvCisjICA5MS4wayAgIGxpYmV4YS5zbworIyAgMzM2LjBrICBsaWJnbHguc28KKyMgIDEzNjBrICAgbGliaW50MTAuc28KKyMgIDE4MC4wayAgbGlid2ZiLnNvCisjICAzMjAuMGsgIGxpYnhhYS5zbworIyAgMTI0LjBrICBsaWJ4ZjFicHAuc28KKyMgIDg0LjBrICAgbGlieGY0YnBwLnNvCisjICAgICAgICAgIGxpYnJlY29yZC5zbworIyAgICAgICAgICBsaWJleHRtb2Quc28KKyMgICAgICAgICAgbGliZGJlLnNvCisKK1BBQ0tBR0VTID0rICIke1BOfS1zZWN1cml0eS1wb2xpY3kgXAorICAgICAgICAgICAgICR7UE59LXNkbCBcCisgICAgICAgICAgICAgJHtQTn0tZmJkZXYgXAorICAgICAgICAgICAgICR7UE59LXh2ZmIgXAorICAgICAgICAgICAgICR7UE59LXV0aWxzIFwKKyAgICAgICAgICAgICAke1BOfS14ZXBoeXIgXAorICAgICAgICAgICAgICR7UE59LXh3YXlsYW5kIFwKKyAgICAgICAgICAgICAke1BOfS1tdWx0aW1lZGlhLW1vZHVsZXMgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZ2x4IFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliaW50MTAgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJhZmIgXAorICAgICAgICAgICAgICR7UE59LW1vZHVsZS1saWJ3ZmIgIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlibWZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGliY2ZiIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtZXhhIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUteGFhIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlieGYxYnBwIFwKKyAgICAgICAgICAgICAke1BOfS1tb2R1bGUtbGlieGY0YnBwIFwKKyAgICAgICAgICAgICB4Zjg2LXZpZGVvLW1vZGVzZXR0aW5nIgorCitTVU1NQVJZX3hmODYtdmlkZW8tbW9kZXNldHRpbmcgPSAiWC5PcmcgWCBzZXJ2ZXIgLS0gbW9kZXNldHRpbmcgZGlzcGxheSBkcml2ZXIiCitJTlNBTkVfU0tJUF94Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gInhvcmctZHJpdmVyLWFiaSIKKworUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7UE59LXNlY3VyaXR5LXBvbGljeSB4a2V5Ym9hcmQtY29uZmlnIHJnYiB4c2VydmVyLXhmODYtY29uZmlnIHhrYmNvbXAiCitSREVQRU5EU18ke1BOfS14dmZiICs9ICJ4a2V5Ym9hcmQtY29uZmlnIgorUkRFUEVORFNfJHtQTn0tbW9kdWxlLWV4YSA9ICIke1BOfSAoPSAke0VYVEVORFBLR1Z9KSIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS9YMTEvT3B0aW9ucyAke2xpYmRpcn0vWDExL0NhcmRzICR7bGliZGlyfS9YMTEvZ2V0Y29uZmlnICR7bGliZGlyfS9YMTEvZXRjICR7bGliZGlyfS9tb2R1bGVzLyouc28gJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLnNvIC9ldGMvWDExICR7bGliZGlyfS94b3JnL3Byb3RvY29sLnR4dCAke2RhdGFkaXJ9L1gxMS94b3JnLmNvbmYuZCIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLmxhICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8qLmxhIgorRklMRVNfJHtQTn0tZG9jICs9ICIke2xpYmRpcn0vWDExL2RvYyAke2RhdGFkaXJ9L1gxMS94a2IvY29tcGlsZWQvUkVBRE1FLmNvbXBpbGVkICR7bG9jYWxzdGF0ZWRpcn0vbGliL3hrYi9SRUFETUUuY29tcGlsZWQiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvLmRlYnVnIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS94b3JnL21vZHVsZXMvKi8qLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICIKK0ZJTEVTXyR7UE59LXNlY3VyaXR5LXBvbGljeSArPSAiJHtsaWJkaXJ9L3hzZXJ2ZXIvU2VjdXJpdHlQb2xpY3kiCitGSUxFU18ke1BOfS1zZGwgPSAiJHtiaW5kaXJ9L1hzZGwiCitGSUxFU18ke1BOfS1mYmRldiA9ICIke2JpbmRpcn0vWGZiZGV2IgorRklMRVNfJHtQTn0teHZmYiA9ICIke2JpbmRpcn0vWHZmYiIKK0ZJTEVTXyR7UE59LXV0aWxzID0gIiR7YmluZGlyfS9zY2FucGNpICR7YmluZGlyfS9wY2l0d2VhayAke2JpbmRpcn0vaW9wb3J0ICR7YmluZGlyfS9pbltid2xdICR7YmluZGlyfS9vdXRbYndsXSAke2JpbmRpcn0vbW1hcFtyd10gJHtiaW5kaXJ9L2d0ZiAke2JpbmRpcn0vZ2V0Y29uZmlnICR7YmluZGlyfS9nZXRjb25maWcucGwiCitGSUxFU18ke1BOfS14ZXBoeXIgPSAiJHtiaW5kaXJ9L1hlcGh5ciIKK0ZJTEVTXyR7UE59LXh3YXlsYW5kID0gIiR7YmluZGlyfS9Yd2F5bGFuZCIKK0ZJTEVTXyR7UE59LW11bHRpbWVkaWEtbW9kdWxlcyA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL211bHRpbWVkaWEvKmRydioiCitGSUxFU18ke1BOfS1leHRlbnNpb24tZHJpID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZXh0ZW5zaW9ucy9saWJkcmkuc28iCitGSUxFU18ke1BOfS1leHRlbnNpb24tZHJpMiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2V4dGVuc2lvbnMvbGliZHJpMi5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1nbHggPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmdseC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1yZWNvcmQgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYnJlY29yZC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1leHRtb2QgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmV4dG1vZC5zbyIKK0ZJTEVTXyR7UE59LWV4dGVuc2lvbi1kYmUgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9leHRlbnNpb25zL2xpYmRiZS5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJpbnQxMCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmludDEwLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmFmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmFmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ3ZmIgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ3ZmIuc28iCitGSUxFU18ke1BOfS1tb2R1bGUtbGlibWZiID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlibWZiLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYmNmYiA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYmNmYi5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1leGEgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJleGEuc28iCitGSUxFU18ke1BOfS1tb2R1bGUteGFhID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvbGlieGFhLnNvIgorRklMRVNfJHtQTn0tbW9kdWxlLWxpYnhmMWJwcCA9ICIke2xpYmRpcn0veG9yZy9tb2R1bGVzL2xpYnhmMWJwcC5zbyIKK0ZJTEVTXyR7UE59LW1vZHVsZS1saWJ4ZjRicHAgPSAiJHtsaWJkaXJ9L3hvcmcvbW9kdWxlcy9saWJ4ZjRicHAuc28iCitGSUxFU194Zjg2LXZpZGVvLW1vZGVzZXR0aW5nID0gIiR7bGliZGlyfS94b3JnL21vZHVsZXMvZHJpdmVycy9tb2Rlc2V0dGluZ19kcnYuc28iCisKK0VYVFJBX09FQ09ORiArPSAiLS13aXRoLWZvcD1ubyBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1waWMgXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXJlY29yZCBcCisgICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1kbXggXAorICAgICAgICAgICAgICAgICAtLWRpc2FibGUteG5lc3QgXAorICAgICAgICAgICAgICAgICAtLWVuYWJsZS14dmZiIFwKKyAgICAgICAgICAgICAgICAgLS1lbmFibGUtY29tcG9zaXRlIFwKKyAgICAgICAgICAgICAgICAgLS13aXRob3V0LWR0cmFjZSBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1pbnQxMD14ODZlbXUgXAorICAgICAgICAgICAgICAgICAtLXN5c2NvbmZkaXI9L2V0Yy9YMTEgXAorICAgICAgICAgICAgICAgICAtLWxvY2Fsc3RhdGVkaXI9L3ZhciBcCisgICAgICAgICAgICAgICAgIC0td2l0aC14a2Itb3V0cHV0PS92YXIvbGliL3hrYiBcCisgICAgICAgICAgICAgICAgIC0td2l0aC1zaGExPWxpYmNyeXB0byBcCisiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJkcmkyIHVkZXYgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnZHJpIGdseCcsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJESVNUUk9fRkVBVFVSRVMiLCAid2F5bGFuZCIsICJ4d2F5bGFuZCIsICIiLCBkKX0gXAorIgorCitQQUNLQUdFQ09ORklHW3VkZXZdID0gIi0tZW5hYmxlLWNvbmZpZy11ZGV2LC0tZGlzYWJsZS1jb25maWctdWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1tkcmldID0gIi0tZW5hYmxlLWRyaSwtLWRpc2FibGUtZHJpLGdscHJvdG8gdmlydHVhbC9tZXNhIHhmODZkcmlwcm90byIKK1BBQ0tBR0VDT05GSUdbZHJpMl0gPSAiLS1lbmFibGUtZHJpMiwtLWRpc2FibGUtZHJpMixkcmkycHJvdG8iCisjIERSSTMgcmVxdWlyZXMgeHNobWZlbmNlIHRvIGFsc28gYmUgZW5hYmxlZAorUEFDS0FHRUNPTkZJR1tkcmkzXSA9ICItLWVuYWJsZS1kcmkzLC0tZGlzYWJsZS1kcmkzLGRyaTNwcm90byIKK1BBQ0tBR0VDT05GSUdbZ2x4XSA9ICItLWVuYWJsZS1nbHggLS1lbmFibGUtZ2x4LXRscywtLWRpc2FibGUtZ2x4LGdscHJvdG8gdmlydHVhbC9saWJnbCB2aXJ0dWFsL2xpYngxMSIKK1BBQ0tBR0VDT05GSUdbdW53aW5kXSA9ICItLWVuYWJsZS1saWJ1bndpbmQsLS1kaXNhYmxlLWxpYnVud2luZCxsaWJ1bndpbmQiCitQQUNLQUdFQ09ORklHW3hzaG1mZW5jZV0gPSAiLS1lbmFibGUteHNobWZlbmNlLC0tZGlzYWJsZS14c2htZmVuY2UsbGlieHNobWZlbmNlIgorUEFDS0FHRUNPTkZJR1t4bWx0b10gPSAiLS13aXRoLXhtbHRvLCAtLXdpdGhvdXQteG1sdG8sIHhtbHRvLW5hdGl2ZSBkb2Nib29rLXhtbC1kdGQ0LW5hdGl2ZSBkb2Nib29rLXhzbC1zdHlsZXNoZWV0cy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW3N5c3RlbWQtbG9naW5kXSA9ICItLWVuYWJsZS1zeXN0ZW1kLWxvZ2luZD15ZXMsLS1lbmFibGUtc3lzdGVtZC1sb2dpbmQ9bm8sZGJ1cywiCitQQUNLQUdFQ09ORklHW3hpbmVyYW1hXSA9ICItLWVuYWJsZS14aW5lcmFtYSwtLWRpc2FibGUteGluZXJhbWEseGluZXJhbWFwcm90byIKK1BBQ0tBR0VDT05GSUdbeHdheWxhbmRdID0gIi0tZW5hYmxlLXh3YXlsYW5kLC0tZGlzYWJsZS14d2F5bGFuZCx3YXlsYW5kIGxpYmVwb3h5IgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJIyBJdHMgYXNzdW1lZCBiYXNlLWZpbGVzIGNyZWF0ZXMgdGhpcyBmb3IgdXMKKwlybWRpciAke0R9JHtsb2NhbHN0YXRlZGlyfS9sb2cvCit9CisKKyMgQWRkIHJ1bnRpbWUgcHJvdmlkZXMgZm9yIHRoZSBBQkkgdmVyc2lvbnMgb2YgdGhlIHZpZGVvIGFuZCBpbnB1dCBzdWJzeXN0ZW1zLAorIyBzbyB0aGF0IGRyaXZlcnMgY2FuIGRlcGVuZCBvbiB0aGUgcmVsZXZhbnQgdmVyc2lvbi4KK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIGltcG9ydCBzdWJwcm9jZXNzCisKKyAgICAjIFNldCBQS0dfQ09ORklHX1BBVEggc28gcGtnLWNvbmZpZyBsb29rcyBhdCB0aGUgLnBjIGZpbGVzIHRoYXQgYXJlIGdvaW5nCisgICAgIyBpbnRvIHRoZSBuZXcgcGFja2FnZSwgbm90IHRoZSBzdGFnZWQgb25lcy4KKyAgICBuZXdlbnYgPSBkaWN0KG9zLmVudmlyb24pCisgICAgbmV3ZW52WyJQS0dfQ09ORklHX1BBVEgiXSA9IGQuZXhwYW5kKCIke1BLR0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8iKQorCisgICAgZGVmIGdldF9hYmkobmFtZSk6CisgICAgICAgIGFiaXMgPSB7CisgICAgICAgICAgInZpZGVvIjogImFiaV92aWRlb2RydiIsCisgICAgICAgICAgImlucHV0IjogImFiaV94aW5wdXQiCisgICAgICAgIH0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncz0icGtnLWNvbmZpZyAtLXZhcmlhYmxlPSVzIHhvcmctc2VydmVyIiAlIGFiaXNbbmFtZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxsPVRydWUsIGVudj1uZXdlbnYsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIG91dHB1dCA9IHAuY29tbXVuaWNhdGUoKVswXQorICAgICAgICBtbHByZWZpeCA9IGQuZ2V0VmFyKCdNTFBSRUZJWCcsIFRydWUpIG9yICcnCisgICAgICAgIHJldHVybiAiJXN4b3JnLWFiaS0lcy0lcyIgJSAobWxwcmVmaXgsIG5hbWUsIG91dHB1dC5zcGxpdCgiLiIpWzBdKQorCisgICAgcG4gPSBkLmdldFZhcigiUE4iLCBUcnVlKQorICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJpbnB1dCIpKQorICAgIGQuYXBwZW5kVmFyKCJSUFJPVklERVNfIiArIHBuLCAiICIgKyBnZXRfYWJpKCJ2aWRlbyIpKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvMDAwMS11c2UtX19HTElCQ19fLWd1YXJkLWZvci1nbGliYy1zcGVjaWZpYy1jb2RlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZTRlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZy8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBmMjQyNzQwZjY0ODhhMjVlNmNhODQ5NjhiMGUyMzE5YTlhMzk3NWI0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNiBBcHIgMjAxNSAyMDo1Mjo1MCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2UgX19HTElCQ19fIGd1YXJkIGZvciBnbGliYyBzcGVjaWZpYyBjb2RlCisKK1VzaW5nIF9fbGludXhfXyBpcyBhIHRhZCBiaXQgd3JvbmcgYXNzdW1wdGlvbiBzaW5jZQorbGludXggIT0gZ2xpYmMKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L3hmODZfT1NsaWIuaCBiL2h3L3hmcmVlODYvb3Mtc3VwcG9ydC94Zjg2X09TbGliLmgKK2luZGV4IGViMGEzMzguLmMzNjZmZmMgMTAwNjQ0CistLS0gYS9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCisrKysgYi9ody94ZnJlZTg2L29zLXN1cHBvcnQveGY4Nl9PU2xpYi5oCitAQCAtMTc4LDcgKzE3OCw3IEBACisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxhc3NlcnQuaD4KKyAKKy0jaWZkZWYgX19saW51eF9fCisrI2lmZGVmIF9fR0xJQkNfXworICNpbmNsdWRlIDx0ZXJtaW8uaD4KKyAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fR0xJQkNfXyAqLworICNpbmNsdWRlIDx0ZXJtaW9zLmg+CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmcvbWFjcm9fdHdlYWsucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMwZWVhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94b3JnLXhzZXJ2ZXIveHNlcnZlci14b3JnL21hY3JvX3R3ZWFrLnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK1RoaXMgaXMgdGhlIHJldmlzZWQgdmVyc2lvbiBvZiBmaWxlcy9tYWNyb190d2Vhay5wYXRjaCBmb3IKK3hvcmctc2VydmVyIDEuOC45OS45MDQgYW5kIG5ld2VyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWXUgS2UgPGtlLnl1QGludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3hvcmctc2VydmVyLm00IGIveG9yZy1zZXJ2ZXIubTQKK2luZGV4IGJkZWNmNjIuLjA0MGZkYjggMTAwNjQ0CistLS0gYS94b3JnLXNlcnZlci5tNAorKysrIGIveG9yZy1zZXJ2ZXIubTQKK0BAIC0yOCwxMCArMjgsMTIgQEAgZG5sCisgIyBDaGVja3MgZm9yIHRoZSAkMSBkZWZpbmUgaW4geG9yZy1zZXJ2ZXIuaCAoZnJvbSB0aGUgc2RrKS4gIElmIGl0CisgIyBpcyBkZWZpbmVkLCB0aGVuIGFkZCAkMSB0byAkUkVRVUlSRURfTU9EVUxFUy4KKyAKKyttNF9wYXR0ZXJuX2FsbG93KFBLR19DT05GSUdfU1lTUk9PVF9ESVIpCisrCisgQUNfREVGVU4oW1hPUkdfRFJJVkVSX0NIRUNLX0VYVF0sWworIAlBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKKyAJU0FWRV9DRkxBR1M9IiRDRkxBR1MiCistCUNGTEFHUz0iJENGTEFHUyAtSWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXNka2RpciB4b3JnLXNlcnZlcmAiCisrCUNGTEFHUz0iJENGTEFHUyAtSSRQS0dfQ09ORklHX1NZU1JPT1RfRElSYCRQS0dfQ09ORklHIC0tdmFyaWFibGU9c2RrZGlyIHhvcmctc2VydmVyYCIKKyAJQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworICNpbmNsdWRlICJ4b3JnLXNlcnZlci5oIgorICNpZiAhZGVmaW5lZCAkMQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xNy4yLmJiIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hvcmcteHNlcnZlci94c2VydmVyLXhvcmdfMS4xNy4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMzlkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveG9yZy14c2VydmVyL3hzZXJ2ZXIteG9yZ18xLjE3LjIuYmIKQEAgLTAsMCArMSwyOCBAQAorcmVxdWlyZSB4c2VydmVyLXhvcmcuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly8wMDAxLXVzZS1fX0dMSUJDX18tZ3VhcmQtZm9yLWdsaWJjLXNwZWNpZmljLWNvZGUucGF0Y2ggXAorICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiMzk3ZTQwNTU2NjY1MTE1MDQ5MGZmNDkzZTQ2M2YxYWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjYxMTIwNjEyNzI4ZjJjNTAzNDY3MWQwY2EzZTIyNzM0MzhjNjBhYmE5M2IzZGRhNGE4YWE0MGU2YTI1Nzk5MyIKKworIyBUaGVzZSBleHRlbnNpb25zIGFyZSBub3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBzZXJ2ZXIsIHNvIGRlY2xhcmUgdGhlIG1pZ3JhdGlvbgorIyBwYXRoIGZvciBpbi1wbGFjZSB1cGdyYWRlcy4KKworUlJFUExBQ0VTXyR7UE59ID0gICIke1BOfS1leHRlbnNpb24tZHJpIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRyaTIgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tcmVjb3JkIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWV4dG1vZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kYmUgXAorICAgICAgICAgICAgICAgICAgICIKK1JQUk9WSURFU18ke1BOfSA9ICAiJHtQTn0tZXh0ZW5zaW9uLWRyaSBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1kcmkyIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLXJlY29yZCBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1leHRtb2QgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZGJlIFwKKyAgICAgICAgICAgICAgICAgICAiCitSQ09ORkxJQ1RTXyR7UE59ID0gIiR7UE59LWV4dGVuc2lvbi1kcmkgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZHJpMiBcCisgICAgICAgICAgICAgICAgICAgICR7UE59LWV4dGVuc2lvbi1yZWNvcmQgXAorICAgICAgICAgICAgICAgICAgICAke1BOfS1leHRlbnNpb24tZXh0bW9kIFwKKyAgICAgICAgICAgICAgICAgICAgJHtQTn0tZXh0ZW5zaW9uLWRiZSBcCisgICAgICAgICAgICAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHJlc3RvcC94cmVzdG9wXzAuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTVkZjAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3hyZXN0b3AveHJlc3RvcF8wLjQuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSA9ICJYUmVzOiBBIHRvcC1saWtlIHJlc291cmNlIHVzYWdlIHRvb2wgZm9yIFgiCisKK0RFU0NSSVBUSU9OID0gInRvcC1saWtlIHN0YXRpc3RpY3Mgb2YgWDExIHNlcnZlciByZXNvdXJjZSB1c2FnZSBieSBjbGllbnRzIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3hyZXN0b3AiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3hyZXN0b3AuYztlbmRsaW5lPTE4O21kNT03MzA4NzZjMzBmMGQ4YTkyODY3NmJjZDEyNDJhM2IzNSIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitQUiA9ICJyMyIKKworREVQRU5EUyA9ICJsaWJ4cmVzIGxpYnhleHQgdmlydHVhbC9saWJ4MTEgbmN1cnNlcyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnlvY3RvcHJvamVjdC5vcmcvcmVsZWFzZXMveHJlc3RvcC94cmVzdG9wLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ4YTU0NTk2Y2JhZjAzN2U2MmI4MGM0NTg1YTNjYTliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjY3YzJmYzk0YTdlY2VkYmFhZTBkMTgzN2U4MmU5M2QxZDk4ZjRhNmQ3NTk4Mjg4NjBlNTUyMTE5YWYzY2UyNTciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsLzMweFRzX0NhbGlicmF0ZS5zaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsLzMweFRzX0NhbGlicmF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQzNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvMzB4VHNfQ2FsaWJyYXRlLnNoCkBAIC0wLDAgKzEsMTMgQEAKKyMhL2Jpbi9zaAorCisuIC9ldGMvZm9ybWZhY3Rvci9jb25maWcKKworaWYgWyAiJEhBVkVfVE9VQ0hTQ1JFRU4iID0gIjEiIF07IHRoZW4KKwluPTEKKwl3aGlsZSBbICEgLXogJFRTTElCX1RTREVWSUNFIF0gJiYgWyAhIC1mIC9ldGMvcG9pbnRlcmNhbCBdICYmIFsgJG4gLWxlIDUgXQorCWRvCisJICAgL3Vzci9iaW4veHRzY2FsCisJICAgc2xlZXAgMQorCSAgIG49JCgoJG4rMSkpCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2NoYW5nZS1jcm9zcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE3NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2hhbmdlLWNyb3NzLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gdG1wL21haW4uYy5vcmlnCTIwMDctMDEtMDIgMTU6Mzk6NTQuMDAwMDAwMDAwICswMDAwCisrKysgdG1wL21haW4uYwkyMDA3LTAxLTAyIDE1OjM5OjU0LjAwMDAwMDAwMCArMDAwMAorQEAgLTEzMSw5ICsxMzEsMTAgQEAKKyB7CisgICBYUmVuZGVyRmlsbFJlY3RhbmdsZXMgKGRweSwgUGljdE9wU3JjLCBwaWN0LCAmcmVjdF9jb2xvciwgcmVjdGFuZ2xlcywgMik7CisgCistICBYRmlsbEFyYyAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLCAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwgCistCSAgICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpIC0gMSwKKy0JICAgIFdJRFRIICsgMSwgV0lEVEggKyAxLCAwLCAzNjAgKiA2NCk7CisrICBYRmlsbFJlY3RhbmdsZSAoZHB5LCBjcm9zc2hhaXJfdywgY3Jvc3NoYWlyX2djLAorKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAorKwkJICAoQ1JPU1NIQUlSX1NJWkUgLyAyKSAtIChXSURUSCAvIDIpLAorKwkJICBXSURUSCwgV0lEVEgpOworIH0KKyAKKyB2b2lkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9jbGVhbnVwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2xlYW51cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2IwODU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWwvY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDYyMSBAQAorLS0tCisgTWFrZWZpbGUuYW0gIHwgICAgOSAtLQorIGNvbmZpZ3VyZS5hYyB8ICAgIDMgCisgZ3BlLWRpc3QuYW0gIHwgICAxMiAtLS0KKyBoMzYwMF90cy5oICAgfCAgMjE2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgbWFpbi5jICAgICAgIHwgIDIxMCArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB4dHNjYWwuaW4gICAgfCAgIDE5IC0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA0NTUgZGVsZXRpb25zKC0pCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogeHRzY2FsLTAuNi4zL3h0c2NhbC5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL3h0c2NhbC5pbgkyMDA0LTA5LTEwIDIwOjEwOjM2LjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMTkgKzAsMCBAQAorLSMhL2Jpbi9zaAorLQorLW1vZHVsZV9pZCgpIHsKKy0gICAgIyBHZXQgbW9kZWwgbmFtZQorLSAgICBlY2hvIGBncmVwICJeSGFyZHdhcmUiIC9wcm9jL2NwdWluZm8gfCBzZWQgLWUgInMvLio6ICovLyIgfCB0ciBhLXogQS1aYAorLX0KKy0KKy1jYXNlIGBtb2R1bGVfaWRgIGluCistCSJIUCBJUEFRIEgzMTAwIiB8ICJIUCBJUEFRIEgzODAwIiApCistCQlBUkdTPSItcm90YXRlIDkwIiA7OworLQkiSFAgSVBBUSBIMzYwMCIgfCAiSFAgSVBBUSBIMzcwMCIgfCAiSFAgSVBBUSBIMzkwMCIgfCAqQ09MTElFIHwgKlBPT0RMRSkKKy0JCUFSR1M9Ii1yb3RhdGUgMjcwIiA7OworLQkjIEgyMjAwOiB3b3JrcyB3aXRob3V0IHJvdGF0aW9uCistZXNhYworLQorLSMgdGhlIHRoaW5ncyB3ZSBkbyBmb3IgYXV0b2NvbmYKKy1wcmVmaXg9QHByZWZpeEAKKy1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACistZXhlYyBAbGliZXhlY2RpckAveHRzY2FsLmJpbiAkQVJHUyAkKgorSW5kZXg6IHh0c2NhbC0wLjYuMy9tYWluLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9tYWluLmMJMjAwNy0wNy0wMSAwMToxMjo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyB4dHNjYWwtMC42LjMvbWFpbi5jCTIwMDctMDctMDEgMDE6MTI6NTUuMDAwMDAwMDAwICswMTAwCitAQCAtMjIsMTIgKzIyLDEwIEBACisgI2luY2x1ZGUgPFgxMS9YbGliLmg+CisgCisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL1hyZW5kZXIuaD4KKy0jaW5jbHVkZSA8WDExL2V4dGVuc2lvbnMvWHJhbmRyLmg+CisgI2luY2x1ZGUgPFgxMS9YZnQvWGZ0Lmg+CisgI2luY2x1ZGUgPFgxMS9leHRlbnNpb25zL3hjYWxpYnJhdGUuaD4KKyAjaW5jbHVkZSA8WDExL2tleXN5bS5oPgorIAorLSNpbmNsdWRlICJoMzYwMF90cy5oIgorICNpbmNsdWRlICJjYWxpYnJhdGUuaCIKKyAKKyBEaXNwbGF5ICpkcHk7CitAQCAtNDUsMTUgKzQzLDExIEBAIFhmdENvbG9yIHhmdGNvbDsKKyBYZnREcmF3ICp4ZnRkcmF3OworIFhmdEZvbnQgKnhmdGZvbnQ7CisgaW50IHNjcmVlbl94LCBzY3JlZW5feTsKKy1pbnQgdHNfZmQ7CisgaW50IHNhbXBsZXM7CisgUGl4bWFwIGJnX3BpeG1hcDsKKyBpbnQgZmxhZ19kZWJ1ZzsKKy1pbnQgcm90YXRpb24gPSAwOworIGludCBlcnJvcl9iYXNlLCBldmVudF9iYXNlOworIAorLWludCB1c2luZ194Y2FsaWJyYXRlOworLQorIGludCBtb3Zpbmc7CisgCisgI2RlZmluZSBDUk9TU0hBSVJfU0laRQkyNQorQEAgLTYzLDcgKzU3LDYgQEAgaW50IG1vdmluZzsKKyAjZGVmaW5lIEVOT1VHSCA1CisgI2RlZmluZSBNQVhfU0FNUExFUyA0MAorIAorLSNkZWZpbmUgUkFXX0RFVklDRSAiL2Rldi9oMzYwMF90c3JhdyIKKyAjZGVmaW5lIEZPTlROQU1FICJzYW5zLTEwIgorIAorIHN0cnVjdCBwb2ludCAKK0BAIC0yODcsMTIgKzI4MCw4IEBAIHNvcnRfYnlfeSAoY29uc3Qgdm9pZCogYSwgY29uc3Qgdm9pZCAqYikKKyB2b2lkCisgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQorIHsKKy0gIFRTX0NBTCB0YzsKKy0gIGludCB4dHJhbnMsIHl0cmFucywgeHNjYWxlLCB5c2NhbGUsIHh5c2NhbGUsIHl4c2NhbGU7CisgICBjYWxpYnJhdGlvbiBvY2FsID0gKmNhbDsKKyAKKy0gIGlmICh1c2luZ194Y2FsaWJyYXRlKQorLSAgICB7CisgICAgICAgRklMRSAqZnA7CisgICAgICAgaWYgKGZsYWdfZGVidWcpCisgCXByaW50ZiAoImNvbnN0YW50cyBhcmU6ICVkICVkICVkICVkICVkICVkICVkXG4iLCBjYWwtPmFbMV0sIGNhbC0+YVsyXSwgY2FsLT5hWzBdLCBjYWwtPmFbNF0sIGNhbC0+YVs1XSwgY2FsLT5hWzNdLCBjYWwtPmFbNl0pOworQEAgLTMwNCwyOSArMjkzLDYgQEAgc2V0X2NhbGlicmF0aW9uIChjYWxpYnJhdGlvbiAqY2FsKQorIAl9CisgICAgICAgZnByaW50ZiAoZnAsICIlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgY2FsLT5hWzFdLCBjYWwtPmFbMl0sIGNhbC0+YVswXSwgY2FsLT5hWzRdLCBjYWwtPmFbNV0sIGNhbC0+YVszXSwgY2FsLT5hWzZdKTsKKyAgICAgICBmY2xvc2UgKGZwKTsgCistICAgICAgcmV0dXJuOworLSAgICB9CistCistICB4dHJhbnMgPSBjYWwtPmFbMF0gLyBjYWwtPmFbNl07CistICB5dHJhbnMgPSBjYWwtPmFbM10gLyBjYWwtPmFbNl07CistICB4c2NhbGUgPSBjYWwtPmFbMV0gKiAyNTYgLyBjYWwtPmFbNl07CistICB5c2NhbGUgPSBjYWwtPmFbNV0gKiAyNTYgLyBjYWwtPmFbNl07CistICB4eXNjYWxlID0gY2FsLT5hWzJdICogMjU2IC8gY2FsLT5hWzZdOworLSAgeXhzY2FsZSA9IGNhbC0+YVs0XSAqIDI1NiAvIGNhbC0+YVs2XTsKKy0gIAorLSAgdGMueHRyYW5zID0geHRyYW5zOworLSAgdGMueXRyYW5zID0geXRyYW5zOworLSAgdGMueHNjYWxlID0geHNjYWxlOworLSAgdGMueXNjYWxlID0geXNjYWxlOworLSAgdGMueHlzd2FwID0gMDsKKy0KKy0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7CistCistICBpZiAoaW9jdGwgKHRzX2ZkLCBUU19TRVRfQ0FMLCAodm9pZCAqKSZ0YykgIT0gMCkKKy0gICAgeworLSAgICAgIHBlcnJvciAoIlRTX1NFVF9DQUwiKTsKKy0gICAgICBleGl0ICgxKTsKKy0gICAgfQorIH0KKyAKKyB2b2lkCitAQCAtMzk4LDgwICszNjQsMTMgQEAgaGFuZGxlX3RzX2V2ZW50IChpbnQgeCwgaW50IHksIGludCBwcmVzcworIH0KKyAKKyB2b2lkCistcmVhZF90cyAodm9pZCkKKy17CistICBUU19FVkVOVCB0c19ldjsKKy0gIGludCByOworLQorLSAgciA9IHJlYWQgKHRzX2ZkLCAmdHNfZXYsIHNpemVvZiAodHNfZXYpKTsKKy0gIGlmIChyID09IHNpemVvZiAodHNfZXYpKQorLSAgICBoYW5kbGVfdHNfZXZlbnQgKHRzX2V2LngsIHRzX2V2LnksIHRzX2V2LnByZXNzdXJlKTsKKy19CistCistdm9pZAorLWRvX2NhbCAoY2hhciAqKmFyZ3MpCisteworLSAgVFNfQ0FMIHRjOworLQorLSAgdGMueHNjYWxlID0gYXRvaSAoYXJnc1swXSk7CistICB0Yy54dHJhbnMgPSBhdG9pIChhcmdzWzFdKTsKKy0gIHRjLnlzY2FsZSA9IGF0b2kgKGFyZ3NbMl0pOworLSAgdGMueXRyYW5zID0gYXRvaSAoYXJnc1szXSk7CistICB0Yy54eXN3YXAgPSBhdG9pIChhcmdzWzRdKTsKKy0KKy0gIGlmIChmbGFnX2RlYnVnKQorLSAgICBmcHJpbnRmIChzdGRlcnIsICJzZXR0aW5nOiAlZCAlZCAlZCAlZCAlZFxuIiwgCistCSAgICAgdGMueHRyYW5zLCB0Yy55dHJhbnMsIHRjLnhzY2FsZSwgdGMueXNjYWxlLCB0Yy54eXN3YXApOworLSAgICAKKy0gIGlmIChpb2N0bCAodHNfZmQsIFRTX1NFVF9DQUwsICh2b2lkICopJnRjKSAhPSAwKQorLSAgICB7CistICAgICAgcGVycm9yICgiVFNfU0VUX0NBTCIpOworLSAgICAgIGV4aXQgKDEpOworLSAgICB9CistICAKKy0gIGV4aXQgKDApOworLX0KKy0KKy12b2lkCistc2hvd19jYWwgKHZvaWQpCisteworLSAgVFNfQ0FMIHRjOworLQorLSAgaWYgKGlvY3RsICh0c19mZCwgVFNfR0VUX0NBTCwgKHZvaWQgKikmdGMpICE9IDApCistICAgIHsKKy0gICAgICBwZXJyb3IgKCJUU19HRVRfQ0FMIik7CistICAgICAgZXhpdCAoMSk7CistICAgIH0KKy0KKy0gIHByaW50ZiAoIiVkICVkICVkICVkICVkXG4iLCB0Yy54c2NhbGUsIHRjLnh0cmFucywgdGMueXNjYWxlLCB0Yy55dHJhbnMsIHRjLnh5c3dhcCk7CistfQorLQorLXZvaWQKKyB1c2FnZSAoY29uc3QgY2hhciAqbmFtZSkKKyB7CistICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgLXZpZXdcbiIsIG5hbWUpOworLSAgZnByaW50ZiAoc3RkZXJyLCAiICAgICAgICVzIFstcm90YXRlIDwwIHwgOTAgfCAxODAgfCAyNzA+XVxuIiwgbmFtZSk7CistICBmcHJpbnRmIChzdGRlcnIsICIgICAgICAgJXMgLWNhbCA8eHM+IDx4dD4gPHlzPiA8eXQ+IDx4eXN3YXA+XG4iLCBuYW1lKTsKKy0KKysgIGZwcmludGYgKHN0ZGVyciwgInVzYWdlOiAlcyBbLWRlYnVnXVxuIiwgbmFtZSk7CisgICBleGl0ICgxKTsKKyB9CisgCisgaW50CisteHJyX3N1cHBvcnRlZCAodm9pZCkKKy17CistICBpbnQgeHJyX2V2ZW50X2Jhc2UsIHhycl9lcnJvcl9iYXNlOworLSAgaW50IHhycl9tYWpvciwgeHJyX21pbm9yOworLQorLSAgaWYgKFhSUlF1ZXJ5RXh0ZW5zaW9uIChkcHksICZ4cnJfZXZlbnRfYmFzZSwgJnhycl9lcnJvcl9iYXNlKSA9PSBGYWxzZQorLSAgICAgIHx8IFhSUlF1ZXJ5VmVyc2lvbiAoZHB5LCAmeHJyX21ham9yLCAmeHJyX21pbm9yKSA9PSAwCistICAgICAgfHwgeHJyX21ham9yICE9IDEKKy0gICAgICB8fCB4cnJfbWlub3IgPCAxKQorLSAgICByZXR1cm4gMDsKKy0KKy0gIHJldHVybiAxOworLX0KKy0KKy1pbnQKKyBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIHsKKyAgIFhTZXRXaW5kb3dBdHRyaWJ1dGVzIGF0dHJpYnV0ZXM7CitAQCAtNDgwLDMxICszNzksMTEgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyAgIGludCBtYXhfZmQ7CisgICBHQyBiZ19nYzsKKyAgIGludCBpOworLSAgaW50IGhhdmVfeHJhbmRyOworIAorICAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICAgeworLSAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLXZpZXciKSkKKy0JeworLQkgIHNob3dfY2FsICgpOworLQkgIGV4aXQgKDApOworLQl9CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1kZWJ1ZyIpKQorKyAgICAgIGlmICghc3RyY21wIChhcmd2W2ldLCAiLWRlYnVnIikpCisgCWZsYWdfZGVidWcgPSAxOworLSAgICAgIGVsc2UgaWYgKCFzdHJjbXAgKGFyZ3ZbaV0sICItY2FsIikpCistCXsKKy0JICBpZiAoYXJnYyA+IChpICsgNSkpCistCSAgICBkb19jYWwgKGFyZ3YgKyBpICsgMSk7CistCSAgZWxzZQorLQkgICAgdXNhZ2UgKGFyZ3ZbMF0pOworLQl9CistICAgICAgZWxzZSBpZiAoIXN0cmNtcCAoYXJndltpXSwgIi1yb3RhdGUiKSkKKy0JeworLQkgIGlmIChhcmdjID4gKGkgKyAxKSkKKy0JICAgIHJvdGF0aW9uID0gYXRvaSAoYXJndlsrK2ldKTsKKy0JICBlbHNlCistCSAgICB1c2FnZSAoYXJndlswXSk7CistCX0KKyAgICAgICBlbHNlCisgCXVzYWdlIChhcmd2WzBdKTsKKyAgICAgfQorQEAgLTUzMSw0OCArNDEwLDExIEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCSAgZnByaW50ZiAoc3RkZXJyLCAiZmFpbGVkIHRvIHNldCByYXcgbW9kZTogZXJyb3IgJWRcbiIsIHIpOworIAkgIGV4aXQgKDEpOworIAl9CistCistICAgICAgdXNpbmdfeGNhbGlicmF0ZSA9IDE7CistICAgIH0KKy0KKy0gIGhhdmVfeHJhbmRyID0geHJyX3N1cHBvcnRlZCAoKTsKKy0gIGlmIChoYXZlX3hyYW5kcikKKy0gICAgeworLSAgICAgIFhSUlNjcmVlbkNvbmZpZ3VyYXRpb24gKnJyX3NjcmVlbjsKKy0gICAgICBSb3RhdGlvbiBjdXJyZW50X3JvdGF0aW9uOworLQorLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJYUkFORFIgaXMgc3VwcG9ydGVkXG4iKTsKKy0KKy0gICAgICBycl9zY3JlZW4gPSBYUlJHZXRTY3JlZW5JbmZvIChkcHksIFJvb3RXaW5kb3cgKGRweSwgc2NyZWVuKSk7CistCistICAgICAgWFJSUm90YXRpb25zIChkcHksIHNjcmVlbiwgJmN1cnJlbnRfcm90YXRpb24pOworLQorLSAgICAgIFhSUkZyZWVTY3JlZW5Db25maWdJbmZvIChycl9zY3JlZW4pOworLQorLSAgICAgIGlmIChmbGFnX2RlYnVnKQorLQlmcHJpbnRmIChzdGRlcnIsICJDdXJyZW50IFJBTkRSIHJvdGF0aW9uIGlzICVkXG4iLCBjdXJyZW50X3JvdGF0aW9uKTsKKy0KKy0gICAgICBzd2l0Y2ggKGN1cnJlbnRfcm90YXRpb24pCistCXsKKy0JY2FzZSBSUl9Sb3RhdGVfMjcwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQljYXNlIFJSX1JvdGF0ZV8xODA6CistCSAgcm90YXRpb24gKz0gOTA7CistCWNhc2UgUlJfUm90YXRlXzkwOgorLQkgIHJvdGF0aW9uICs9IDkwOworLQkgIHJvdGF0aW9uICU9IDM2MDsKKy0JY2FzZSBSUl9Sb3RhdGVfMDoKKy0JICBicmVhazsKKy0JZGVmYXVsdDoKKy0JICBmcHJpbnRmIChzdGRlcnIsICJVbmtub3duIFJBTkRSIHJvdGF0aW9uOiAlZFxuIiwgY3VycmVudF9yb3RhdGlvbik7CistCSAgYnJlYWs7CistCX0KKyAgICAgfQorICAgZWxzZQorICAgICB7CistICAgICAgaWYgKGZsYWdfZGVidWcpCistCWZwcmludGYgKHN0ZGVyciwgIlhSQU5EUiBub3Qgc3VwcG9ydGVkXG4iKTsKKysgICAgICBwZXJyb3IgKCJYQ0FMSUJSQVRFIGV4dGVuc2lvbiBtaXNzaW5nIik7CisrICAgICAgZXhpdCAoMSk7CisgICAgIH0KKyAKKyAgIGF0dHJpYnV0ZXMub3ZlcnJpZGVfcmVkaXJlY3QgPSBmbGFnX2RlYnVnID8gRmFsc2UgOiBUcnVlOworQEAgLTY2Niw0NSArNTA4LDE3IEBAIG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgICBmb3IgKGkgPSAwOyBpIDwgTlJfUE9JTlRTOyBpKyspCisgICAgIHsKKy0gICAgICBzd2l0Y2ggKHJvdGF0aW9uKQorLQl7CistCWNhc2UgMDoKKy0JICBjYWwueGZiW2ldID0gY2FsLnhzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IGNhbC55c2NyW2ldOworLQkgIGJyZWFrOworLQljYXNlIDkwOgorLQkgIGNhbC54ZmJbaV0gPSBjYWwueXNjcltpXTsKKy0JICBjYWwueWZiW2ldID0gc2NyZWVuX3ggLSBjYWwueHNjcltpXTsKKy0JICBicmVhazsKKy0JY2FzZSAxODA6CistCSAgY2FsLnhmYltpXSA9IHNjcmVlbl94IC0gY2FsLnhzY3JbaV07CistCSAgY2FsLnlmYltpXSA9IHNjcmVlbl95IC0gY2FsLnlzY3JbaV07CistCSAgYnJlYWs7CistCWNhc2UgMjcwOgorLQkgIGNhbC54ZmJbaV0gPSBzY3JlZW5feSAtIGNhbC55c2NyW2ldOworLQkgIGNhbC55ZmJbaV0gPSBjYWwueHNjcltpXTsKKy0JICBicmVhazsKKy0JfQorKyAgICAgIGNhbC54ZmJbaV0gPSBjYWwueHNjcltpXTsKKysgICAgICBjYWwueWZiW2ldID0gY2FsLnlzY3JbaV07CisrICAgICAgWENhbGlicmF0ZVNjcmVlblRvQ29vcmQgKGRweSwgJmNhbC54ZmJbaV0sICZjYWwueWZiW2ldKTsKKyAKKyAgICAgICBpZiAoZmxhZ19kZWJ1ZykKKy0JcHJpbnRmICgicm90YXRpb24gJWQ6ICglZCwlZCkgLT4gKCVkLCVkKVxuIiwgcm90YXRpb24sIAorKwlwcmludGYgKCJyb3RhdGlvbiBjb252ZXJzaW9uOiAoJWQsJWQpIC0+ICglZCwlZClcbiIsCisgCQljYWwueHNjcltpXSwgY2FsLnlzY3JbaV0sIGNhbC54ZmJbaV0sIGNhbC55ZmJbaV0pOworICAgICB9CisgCisgICBuZXh0X2V2ZW50ICgpOworIAorLSAgaWYgKCF1c2luZ194Y2FsaWJyYXRlKQorLSAgICB7CistICAgICAgdHNfZmQgPSBvcGVuIChSQVdfREVWSUNFLCBPX1JET05MWSk7CistICAgICAgaWYgKHRzX2ZkIDwgMCkKKy0JeworLQkgIHBlcnJvciAoUkFXX0RFVklDRSk7CistCSAgZXhpdCAoMSk7CistCX0KKy0gICAgfQorLQorLSAgbWF4X2ZkID0gKHhmZCA+IHRzX2ZkKSA/IHhmZCA6IHRzX2ZkOworLQorICAgZm9yICg7OykKKyAgICAgeworICAgICAgIGZkX3NldCBmZHM7CitAQCAtNzEzLDEyICs1MjcsOCBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorIAorICAgICAgIEZEX1pFUk8gKCZmZHMpOworICAgICAgIEZEX1NFVCAoeGZkLCAmZmRzKTsKKy0gICAgICBpZiAodHNfZmQgIT0gLTEpCistCUZEX1NFVCAodHNfZmQsICZmZHMpOworIAorLSAgICAgIHNlbGVjdCAobWF4X2ZkICsgMSwgJmZkcywgTlVMTCwgTlVMTCwgTlVMTCk7CistICAgICAgCistICAgICAgaWYgKHRzX2ZkICE9IC0xICYmIEZEX0lTU0VUICh0c19mZCwgJmZkcykpCistCXJlYWRfdHMgKCk7CisrICAgICAgc2VsZWN0ICh4ZmQgKyAxLCAmZmRzLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgfQorIH0KKysKK0luZGV4OiB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0geHRzY2FsLTAuNi4zLm9yaWcvY29uZmlndXJlLmFjCTIwMDQtMDktMTAgMjA6MTE6MTIuMDAwMDAwMDAwICswMTAwCisrKysgeHRzY2FsLTAuNi4zL2NvbmZpZ3VyZS5hYwkyMDA3LTA3LTAxIDAxOjEyOjU1LjAwMDAwMDAwMCArMDEwMAorQEAgLTksOCArOSw3IEBAIEFNX0lOSVRfQVVUT01BS0UoW2ZvcmVpZ24gZGlzdC1iemlwMl0pCisgIyBDaGVja3MgZm9yIHByb2dyYW1zLgorIEFDX1BST0dfQ0MKKyAKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4cmFuZHIgeGNhbGlicmF0ZSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhYVFNDQUwsIHgxMSB4ZnQgeGV4dCB4Y2FsaWJyYXRlKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorLUFDX0NPTkZJR19GSUxFUyhbeHRzY2FsXSkKKyBBQ19PVVRQVVQKK0luZGV4OiB4dHNjYWwtMC42LjMvZ3BlLWRpc3QuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9ncGUtZGlzdC5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorQEAgLTEsMTIgKzAsMCBAQAorLUNWU1RBRyA6PSAkKHNoZWxsIGVjaG8gJChQQUNLQUdFKS0kKFZFUlNJT04pIHwgdHIgW2Etei5dIFtBLVpfXSkKKy0KKy1kaXN0LXVwbG9hZDogZGlzdAorLQlzY3AgJChQQUNLQUdFKS0kKFZFUlNJT04pLnRhci5iejIgJChVU0VSKUBoYW5kaGVsZHMub3JnOi9ob21lL2Z0cC9wdWIvcHJvamVjdHMvZ3BlL3NvdXJjZS8KKy0KKy10YWc6CistCWN2cyB0YWcgJChDVlNUQUcpCistCistcmV0YWc6CistCWN2cyB0YWcgLUYgJChDVlNUQUcpCistCistc291cmNlOiB0YWcgZGlzdC11cGxvYWQKK0luZGV4OiB4dHNjYWwtMC42LjMvaDM2MDBfdHMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHh0c2NhbC0wLjYuMy5vcmlnL2gzNjAwX3RzLmgJMjAwMy0wNy0wNSAxNzoyNzoxMC4wMDAwMDAwMDAgKzAxMDAKKysrKyAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xLDIxNiArMCwwIEBACistLyoKKy0qCistKiBEcml2ZXIgZm9yIHRoZSBIMzYwMCBUb3VjaCBTY3JlZW4gYW5kIG90aGVyIEF0bWVsIGNvbnRyb2xsZWQgZGV2aWNlcy4KKy0qCistKiBDb3B5cmlnaHQgMjAwMCBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24uCistKgorLSogVXNlIGNvbnNpc3RlbnQgd2l0aCB0aGUgR05VIEdQTCBpcyBwZXJtaXR0ZWQsCistKiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworLSogcHJlc2VydmVkIGluIGl0cyBlbnRpcmV0eSBpbiBhbGwgY29waWVzIGFuZCBkZXJpdmVkIHdvcmtzLgorLSoKKy0qIENPTVBBUSBDT01QVVRFUiBDT1JQT1JBVElPTiBNQUtFUyBOTyBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKy0qIEFTIFRPIFRIRSBVU0VGVUxORVNTIE9SIENPUlJFQ1RORVNTIE9GIFRISVMgQ09ERSBPUiBJVFMKKy0qIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCistKgorLSogQXV0aG9yOiBDaGFybGVzIEZseW5uLgorLSoKKy0qLworLQorLQorLSNpZm5kZWYgX19IMzYwMF9UU19IX18KKy0jZGVmaW5lIF9fSDM2MDBfVFNfSF9fCistCistI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CistCistZW51bSBoMzYwMF90c19taW5vcl9kZXZpY2VzIHsKKy0JVFNfTUlOT1IgICAgPSAwLAorLQlUU1JBV19NSU5PUiA9IDEsCistCUtFWV9NSU5PUiAgID0gMgorLX07CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24geworLSAgICAgICAgaW50IHhzY2FsZTsKKy0gICAgICAgIGludCB4dHJhbnM7CistICAgICAgICBpbnQgeXNjYWxlOworLSAgICAgICAgaW50IHl0cmFuczsKKy0gICAgICAgIGludCB4eXN3YXA7CistfSBUU19DQUw7CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZXZlbnQgeworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcHJlc3N1cmU7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCB4OworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeTsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZDsKKy19IFRTX0VWRU5UOworLQorLS8qIERlcHJlY2F0ZWQgLSBkbyBub3QgdXNlICovCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfcmV0dXJuIHsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHByZXNzdXJlOworLSAgICAgICAgdW5zaWduZWQgc2hvcnQgeDsKKy0gICAgICAgIHVuc2lnbmVkIHNob3J0IHk7CistICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWQ7CistfSBUU19SRVQ7CistCistZW51bSBwb3dlcl9idXR0b25fbW9kZSB7CistICAgUEJNX1NVU1BFTkQgICAgICAgICAgID0gMCwKKy0gICBQQk1fR0VORVJBVEVfS0VZUFJFU1MgPSAxCistfTsKKy0KKy0KKy0vKiArKysrKysrKysrKysrKyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICovCistCistdHlwZWRlZiBzdHJ1Y3QgdGhlcm1fZGV2IHsKKy0Jc2hvcnQgZGF0YTsKKy19IFRIRVJNX0RFVjsKKy0KKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9BTEtBTElORSAgICAgICAgMHgwMQorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX05JQ0QgICAgICAgICAgICAweDAyCistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTklNSCAgICAgICAgICAgIDB4MDMKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9MSU9OICAgICAgICAgICAgMHgwNAorLSNkZWZpbmUgSDM2MDBfQkFUVF9DSEVNX0xJUE9MWSAgICAgICAgICAweDA1CistI2RlZmluZSBIMzYwMF9CQVRUX0NIRU1fTk9UX0lOU1RBTExFRCAgIDB4MDYKKy0jZGVmaW5lIEgzNjAwX0JBVFRfQ0hFTV9VTktOT1dOICAgICAgICAgMHhmZgorLQorLS8qIFRoZXNlIHNob3VsZCBtYXRjaCB0aGUgYXBtX2Jpb3MuaCBkZWZpbml0aW9ucyAqLworLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09GRkxJTkUJMHgwMAorLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX09OTElORQkweDAxCistI2RlZmluZSBIMzYwMF9BQ19TVEFUVVNfQUNfQkFDS1VQCTB4MDIgICAvKiBXaGF0IGRvZXMgdGhpcyBtZWFuPyAqLworLSNkZWZpbmUgSDM2MDBfQUNfU1RBVFVTX0FDX1VOS05PV04JMHhmZgorLQorLS8qIFRoZXNlIGJpdGZpZWxkcyBhcmUgcmFyZWx5ICJvcidkIiB0b2dldGhlciAqLworLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfSElHSAkJMHgwMQorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfTE9XCQkweDAyCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DUklUSUNBTAkweDA0CistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0lORwkweDA4CistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19DSEFSR0VfTUFJTiAgIDB4MTAKKy0jZGVmaW5lIEgzNjAwX0JBVFRfU1RBVFVTX0RFQUQgICAgICAgICAgMHgyMCAgIC8qIEJhdHRlcnkgd2lsbCBub3QgY2hhcmdlICovCistI2RlZmluZSBIMzYwMF9CQVRUX05PVF9JTlNUQUxMRUQgICAgICAgIDB4MjAgICAvKiBGb3IgZXhwYW5zaW9uIHBhY2sgYmF0dGVyaWVzICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19GVUxMICAgICAgICAgIDB4NDAgICAvKiBCYXR0ZXJ5IGZ1bGx5IGNoYXJnZWQgKGFuZCBjb25uZWN0ZWQgdG8gQUMpICovCistI2RlZmluZSBIMzYwMF9CQVRUX1NUQVRVU19OT0JBVFQJMHg4MAorLSNkZWZpbmUgSDM2MDBfQkFUVF9TVEFUVVNfVU5LTk9XTgkweGZmCistCistc3RydWN0IGJhdHRlcnlfZGF0YSB7CistCXVuc2lnbmVkIGNoYXIgIGNoZW1pc3RyeTsKKy0JdW5zaWduZWQgY2hhciAgc3RhdHVzOworLQl1bnNpZ25lZCBzaG9ydCB2b2x0YWdlOyAgICAvKiBWb2x0YWdlIGZvciBiYXR0ZXJ5ICMwOyB1bmtub3duIGZvciBiYXR0ZXJ5ICMxICovCistCXVuc2lnbmVkIHNob3J0IHBlcmNlbnRhZ2U7IC8qIFBlcmNlbnRhZ2Ugb2YgZnVsbCBjaGFyZ2UgKi8KKy0JdW5zaWduZWQgc2hvcnQgbGlmZTsgICAgICAgLyogTGlmZSByZW1haW5pbmcgaW4gbWludXRlcyAqLworLX07CistCistc3RydWN0IGgzNjAwX2JhdHRlcnkgeworLSAgICAgICAgdW5zaWduZWQgY2hhciAgICAgICBhY19zdGF0dXM7CistCXVuc2lnbmVkIGNoYXIgICAgICAgYmF0dGVyeV9jb3VudDsgIC8qIEhvdyBtYW55IGJhdHRlcmllcyB3ZSBoYXZlICovCistCXN0cnVjdCBiYXR0ZXJ5X2RhdGEgYmF0dGVyeVsyXTsKKy19OworLQorLS8qIC0tLS0tLS0tIEVFUFJPTSBhbmQgU1BJIEludGVyZmFjZXMgLS0tLS0tLS0tLS0tLS0tKi8KKy0KKy0jZGVmaW5lIEVFUFJPTV9SRF9CVUZTSVogNgkvKiBFRVBST00gcmVhZHMgYXJlIDE2IGJpdHMgKi8KKy0jZGVmaW5lIEVFUFJPTV9XUl9CVUZTSVogNQkvKiBBbGxvdyByb29tIGZvciA4Yml0ICdhZGRyJyBmaWVsZCBpbiBidWZmZXIqLyAKKy0jZGVmaW5lIFNQSV9SRF9CVUZTSVoJIDE2CS8qIFNQSSByZWFkcyBhcmUgOCBiaXRzICovCistI2RlZmluZSBTUElfV1JfQlVGU0laCSA3CistCistLyogVGhlIEVFUFJPTSBpcyB3aGVyZSBpbnRlcm5hbCBwcm9ncmFtcyBhcmUgc3RvcmVkIG9uIHRoZSBBbXRlbC4KKy0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byByZWFkIG9yIHdyaXRlIHRoZXNlIHZhbHVlcyAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV9yZWFkX3JlcXVlc3QgeworLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDhiaXQgQWRkcmVzcyBPZmZzZXQgMC0yNTUgKi8KKy0JdW5zaWduZWQgY2hhciBsZW47ICAgICAvKiBOdW1iZXIgb2YgMTZiaXQgd29yZHMgdG8gcmVhZCAwLTEyOCAgKi8KKy0JdW5zaWduZWQgc2hvcnQgYnVmZltFRVBST01fUkRfQlVGU0laXTsKKy19IEVFUFJPTV9SRUFEOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX2VlcHJvbV93cml0ZV9yZXF1ZXN0IHsKKy0JdW5zaWduZWQgY2hhciBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLworLQl1bnNpZ25lZCBjaGFyIGFkZHI7ICAgIC8qIDAtMTI4ICAqLworLQl1bnNpZ25lZCBzaG9ydCBidWZmW0VFUFJPTV9XUl9CVUZTSVpdOworLX0gRUVQUk9NX1dSSVRFOworLQorLS8qIFRoZSBTUEkgYnVzIGNvbm5lY3RzIHRvIEVFUFJPTXMgbG9jYXRlZCBvbiBzbGVldmVzIHBsdWdnZWQgaW50bworLSAgIHRoZSBpUEFRLiAgWW91IG1heSB3YW50IHRvIHJlYWQgdGhlc2UgdmFsdWVzICAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3NwaV9yZWFkX3JlcXVlc3QgeworLQl1bnNpZ25lZCBzaG9ydCBhZGRyOyAgICAvKiAxNmJpdCBBZGRyZXNzIE9mZnNldCAwLTEyOCAqLworLQl1bnNpZ25lZCBjaGFyIGxlbjsgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCAqLworLQl1bnNpZ25lZCBjaGFyIGJ1ZmZbU1BJX1JEX0JVRlNJWl07CistfSBTUElfUkVBRDsKKy0KKy0jZGVmaW5lIFNQSV9SRUFEX1NUQVRVU19CWVRFICAweGZmZmYgICAvKiBVc2UgdGhpcyBhZGRyZXNzIHRvIHJlYWQgdGhlIHN0YXR1cyBieXRlICovCistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfc3BpX3dyaXRlX3JlcXVlc3QgeworLQl1bnNpZ25lZCBzaG9ydCBsZW47CS8qIHVzZWQgb25seSB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZCAqLworLQl1bnNpZ25lZCBzaG9ydCBhZGRyOwkvKiB0aGlzIDE2Yml0IGFkZHJlc3MgYWNjZXNzZXMgYSBzaW5nbGUgYnl0ZSAqLworLQl1bnNpZ25lZCBjaGFyICBidWZmW1NQSV9XUl9CVUZTSVpdOworLX0gU1BJX1dSSVRFOworLQorLQorLS8qIC0tLS0tLS0tIGVuZCBvZiBFRVBST00gYW5kIFNQSSBJbnRlcmZhY2VzIC0tLS0tLS0tLS0tLS0tLSovCistCistLyogVXNlciBzcGFjZSBzdHJ1Y3R1cmVzIGZvciBJT0NUTCBjYWxscyAqLworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX3ZlcnNpb24geworLQl1bnNpZ25lZCBjaGFyIGhvc3RfdmVyc2lvbls4XTsJLyogYXNjaWkgIngueXkiICovCistCXVuc2lnbmVkIGNoYXIgcGFja192ZXJzaW9uWzhdOwkvKiBhc2NpaSAieC55eSIgKi8KKy0JdW5zaWduZWQgY2hhciBib290X3R5cGU7CQkvKiBUT0RPID8/ICovCistfSBWRVJfUkVUOworLQorLXR5cGVkZWYgc3RydWN0IGgzNjAwX3RzX2xlZCB7CistICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZk9uQmxpbms7ICAgICAgIC8qIDA9b2ZmIDE9b24gMj1CbGluayAqLworLSAgICAgICAgdW5zaWduZWQgY2hhciBUb3RhbFRpbWU7ICAgICAgICAvKiBVbml0cyBvZiA1IHNlY29uZHMgKi8KKy0gICAgICAgIHVuc2lnbmVkIGNoYXIgT25UaW1lOyAgICAgICAgICAgLyogdW5pdHMgb2YgMTAwbS9zICovCistICAgICAgICB1bnNpZ25lZCBjaGFyIE9mZlRpbWU7ICAgICAgICAgIC8qIHVuaXRzIG9mIDEwMG0vcyAqLworLX0gTEVEX0lOOworLQorLWVudW0gZmxpdGVfbW9kZSB7CistICAgICAgICBGTElURV9NT0RFMSA9IDEsCistCUZMSVRFX0FVVE9fTU9ERSAgID0gMSwgICAgIC8qIGZvciByZWZlcmVuY2Ugb25seSAqLworLQlGTElURV9NQU5VQUxfTU9ERSA9IDIsICAgICAvKiBVc2UgdGhpcyBub3JtYWxseT8gKi8KKy0JRkxJVEVfR0VUX0xJR0hUX1NFTlNPUiA9IDMgLyogUmV0dXJucyBsaWdodCByZWFkaW5nIGluICJicmlnaHRuZXNzIiBmaWVsZCAqLworLX07CistZW51bSBmbGl0ZV9wd3IgeworLSAgICAgICAgRkxJVEVfUFdSX09GRiA9IDAsCistICAgICAgICBGTElURV9QV1JfT04gID0gMQorLX07CistCistdHlwZWRlZiBzdHJ1Y3QgaDM2MDBfdHNfZmxpdGUgeworLSAgICAgICAgdW5zaWduZWQgY2hhciBtb2RlOworLSAgICAgICAgdW5zaWduZWQgY2hhciBwd3I7CistICAgICAgICB1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CistfSBGTElURV9JTjsKKy0KKy0vKioqKioqKioqKioqKioqKioqKioqKioqKioqIFVwZGF0ZWQgInVuaXZlcnNhbCIgc3RydWN0dXJlcyAqKioqKioqKioqKioqKioqKioqLworLQorLS8qIFNldHMgYmFja2xpZ2h0IGZvciBib3RoIEgzMTAwIGFuZCBIMzYwMCBtb2RlbHMgLSB0ZWNobmljYWxseSAiZnJvbnRsaWdodCIgZm9yIEgzNjAwICovCistc3RydWN0IGgzNjAwX3RzX2JhY2tsaWdodCB7CistCWVudW0gZmxpdGVfcHdyIHBvd2VyOyAgICAgICAgICAvKiAwID0gb2ZmLCAxID0gb24gKi8KKy0JdW5zaWduZWQgY2hhciAgYnJpZ2h0bmVzczsgICAgIC8qIDAgLSAyNTUgICAgICAgICAqLworLX07CistCistc3RydWN0IGgzNjAwX3RzX2NvbnRyYXN0IHsgICAgICAgICAgICAvKiBPbmx5IHVzZWZ1bCBvbiBIMzEwMCBtb2RlbCAqLworLQl1bnNpZ25lZCBjaGFyIGNvbnRyYXN0OyAgICAgICAvKiAwIC0gMjU1ICovCistfTsKKy0KKy0vKiBJT0NUTCBjbWRzICB1c2VyIG9yIGtlcm5lbCBzcGFjZSAqLworLQorLS8qIFVzZSAnZicgYXMgbWFnaWMgbnVtYmVyICovCistI2RlZmluZSBJT0NfSDM2MDBfVFNfTUFHSUMgICdmJworLQorLS8qIFRPRE86IFNvbWUgb2YgdGhlc2UgSU9XUiB2YWx1ZXMgYXJlIGp1c3QgcGxhaW4gd3JvbmcgKi8KKy0jZGVmaW5lIEdFVF9WRVJTSU9OCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDEsIHN0cnVjdCBoMzYwMF90c192ZXJzaW9uICkKKy0jZGVmaW5lIFJFQURfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIsIHN0cnVjdCBoMzYwMF9lZXByb21fcmVhZF9yZXF1ZXN0KQorLSNkZWZpbmUgV1JJVEVfRUVQUk9NCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDMsIHN0cnVjdCBoMzYwMF9lZXByb21fd3JpdGVfcmVxdWVzdCkKKy0jZGVmaW5lIEdFVF9USEVSTUFMCQlfSU9SKElPQ19IMzYwMF9UU19NQUdJQywgIDQsIHN0cnVjdCB0aGVybV9kZXYpCistI2RlZmluZSBMRURfT04JCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDUsIHN0cnVjdCBoMzYwMF90c19sZWQpCistI2RlZmluZSBHRVRfQkFUVEVSWV9TVEFUVVMJX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsICA2LCBzdHJ1Y3QgaDM2MDBfYmF0dGVyeSkKKy0jZGVmaW5lIEZMSVRFX09OCQlfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgIDcsIHN0cnVjdCBoMzYwMF90c19mbGl0ZSkKKy0jZGVmaW5lIFJFQURfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDgsIHN0cnVjdCBoMzYwMF9zcGlfcmVhZF9yZXF1ZXN0KQorLSNkZWZpbmUgV1JJVEVfU1BJCQlfSU9XUihJT0NfSDM2MDBfVFNfTUFHSUMsIDksIHN0cnVjdCBoMzYwMF9zcGlfd3JpdGVfcmVxdWVzdCkKKy0jZGVmaW5lIFRTX0dFVF9DQUwJCV9JT1IoSU9DX0gzNjAwX1RTX01BR0lDLCAxMCwgc3RydWN0IGgzNjAwX3RzX2NhbGlicmF0aW9uKQorLSNkZWZpbmUgVFNfU0VUX0NBTAkJX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDExLCBzdHJ1Y3QgaDM2MDBfdHNfY2FsaWJyYXRpb24pCistCistLyogTmV3IElPQ1RMIGludGVyZmFjZXMgLSBkZWZpbmVkIHRvIGJlIG1vcmUgdXNlciBmcmllbmRseSAqLworLSNkZWZpbmUgVFNfR0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQorLSNkZWZpbmUgVFNfU0VUX0JBQ0tMSUdIVCAgICAgICAgX0lPVyhJT0NfSDM2MDBfVFNfTUFHSUMsIDIwLCBzdHJ1Y3QgaDM2MDBfdHNfYmFja2xpZ2h0KQorLSNkZWZpbmUgVFNfR0VUX0NPTlRSQVNUICAgICAgICAgX0lPUihJT0NfSDM2MDBfVFNfTUFHSUMsIDIxLCBzdHJ1Y3QgaDM2MDBfdHNfY29udHJhc3QpCistI2RlZmluZSBUU19TRVRfQ09OVFJBU1QgICAgICAgICBfSU9XKElPQ19IMzYwMF9UU19NQUdJQywgMjEsIHN0cnVjdCBoMzYwMF90c19jb250cmFzdCkKKy0KKy0jZW5kaWYKK0luZGV4OiB4dHNjYWwtMC42LjMvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9NYWtlZmlsZS5hbQkyMDA0LTA2LTAyIDIzOjA3OjEzLjAwMDAwMDAwMCArMDEwMAorKysrIHh0c2NhbC0wLjYuMy9NYWtlZmlsZS5hbQkyMDA3LTA3LTAyIDEyOjUxOjAyLjAwMDAwMDAwMCArMDEwMAorQEAgLTEsMTEgKzEsOCBAQAorLWxpYmV4ZWNfUFJPR1JBTVMgPSB4dHNjYWwuYmluCistYmluX1NDUklQVFMgPSB4dHNjYWwKKytiaW5fUFJPR1JBTVMgPSB4dHNjYWwKKyAKKy14dHNjYWxfYmluX1NPVVJDRVMgPSBtYWluLmMgY2FsaWJyYXRlLmMgY2FsaWJyYXRlLmggaDM2MDBfdHMuaAorK3h0c2NhbF9TT1VSQ0VTID0gbWFpbi5jIGNhbGlicmF0ZS5jIGNhbGlicmF0ZS5oCisgCisteHRzY2FsX2Jpbl9MREFERCA9IEBYVFNDQUxfTElCU0AKKyt4dHNjYWxfTERBREQgPSBAWFRTQ0FMX0xJQlNACisgCisgSU5DTFVERVMgPSBAWFRTQ0FMX0NGTEFHU0AgLUROUl9QT0lOVFM9NQorIAorLWluY2x1ZGUgZ3BlLWRpc3QuYW0KKy0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dHNjYWwveHRzY2FsL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNDUzM2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbC9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK2FmdGVyIGdjYyBsaW5raW5nIGhhcyBjaGFuZ2VkLCBhbGwgdGhlIGxpYnJhcmllcyBtdXN0IGJlIGV4cGxpY2l0ZWx5IHNwZWNpZmllZCAKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgbGlua2luZyBlcnJvcjoKKworfCBjY2FjaGUgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbWFyY2g9aTU4NiAtLXN5c3Jvb3Q9L2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eCAgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnJlbmFtZS1yZWdpc3RlcnMgLU8yIC1nZ2RiIC1mZWxpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAgLVdsLC1PMSAtV2wsLS1oYXNoLXN0eWxlPWdudSAtV2wsLS1hcy1uZWVkZWQgLW8geHRzY2FsIG1haW4ubyBjYWxpYnJhdGUubyAtbFgxMSAtbFhmdCAtbFhleHQgLWxYY2FsaWJyYXRlXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvbGliZXhlYy9pNTg2LXBva3ktbGludXgvZ2NjL2k1ODYtcG9reS1saW51eC80LjUuMS9sZDogXj86IGludmFsaWQgRFNPIGZvciBzeW1ib2wgYFhSZW5kZXJDaGFuZ2VQaWN0dXJlJyBkZWZpbml0aW9uXk0KK3wgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3N5c3Jvb3RzL2k1ODYtcG9reS1saW51eC91c3IvbGliL2xpYlhyZW5kZXIuc28uMTogY291bGQgbm90IHJlYWQgc3ltYm9sczogQmFkIHZhbHVlXk0KK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXNeTQorfCBtYWtlOiAqKiogW3h0c2NhbF0gRXJyb3IgMQorCitOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorRGF0ZTogMjAxMS8wMS8xMQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHh0c2NhbC0wLjYuMy9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSB4dHNjYWwtMC42LjMub3JpZy9jb25maWd1cmUuYWMKKysrKyB4dHNjYWwtMC42LjMvY29uZmlndXJlLmFjCitAQCAtOSw3ICs5LDcgQEAgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbiBkaXN0LWJ6aXAyXSkKKyAjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCisgQUNfUFJPR19DQworIAorLVBLR19DSEVDS19NT0RVTEVTKFhUU0NBTCwgeDExIHhmdCB4ZXh0IHhjYWxpYnJhdGUpCisrUEtHX0NIRUNLX01PRFVMRVMoWFRTQ0FMLCB4MTEgeGZ0IHhleHQgeGNhbGlicmF0ZSB4cmVuZGVyKQorIAorIEFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorIEFDX09VVFBVVApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHRzY2FsL3h0c2NhbF8wLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZkZGYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWdyYXBoaWNzL3h0c2NhbC94dHNjYWxfMC42LjMuYmIKQEAgLTAsMCArMSwzMyBAQAorU1VNTUFSWSA9ICJUb3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgorCitERVNDUklQVElPTiA9ICJCYXNpYyB0b3VjaHNjcmVlbiBjYWxpYnJhdGlvbiB1dGlsaXR5IgorCitIT01FUEFHRSA9ICJodHRwOi8vZ3BlLmxpbnV4dG9nby5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWdzLmxpbnV4dG9nby5vcmciCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jO2VuZGxpbmU9MTA7bWQ1PTg3MjFiY2IwOGFlOWYyNGU1ZmU0YzgyOTQxODczYzg3IgorCitTRUNUSU9OID0gIngxMS9iYXNlIgorCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnhmdCBsaWJ4Y2FsaWJyYXRlIgorCitQUiA9ICJyMTMiCisKK1NSQ19VUkkgPSAiJHtHUEVfTUlSUk9SfS94dHNjYWwtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9jaGFuZ2UtY3Jvc3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYW51cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9kc29fbGlua2luZ19jaGFuZ2VfYnVpbGRfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzMweFRzX0NhbGlicmF0ZS5zaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjliY2FiODBiNDc0ZDU0NTQ0NzdkMWNhMTY2YTY4YzM0IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI3YjlkYzIyMDNkZTliMTcwNmNhMzlmYTZjYTgwZWNhYjg4MDc5MDllYzkwMWM0YTM0NWI4ZTQxMTc4ODAwYTEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9YMTEvWHNlc3Npb24uZC8KKyAgICBpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS8zMHhUc19DYWxpYnJhdGUuc2ggJHtEfSR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHZpZGVvLXRlc3RzL3h2aWRlby10ZXN0c19naXQuYmIgYi9tZXRhL3JlY2lwZXMtZ3JhcGhpY3MveHZpZGVvLXRlc3RzL3h2aWRlby10ZXN0c19naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzYzllMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ncmFwaGljcy94dmlkZW8tdGVzdHMveHZpZGVvLXRlc3RzX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIlNpbXBsZSBYVmlkZW8gdGVzdCBhcHBsaWNhdGlvbiIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTk1MzBiZGYzMzY1OWIyOWU3M2Q0YWRiOWY5ZjY1NTIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3Rlc3QteHZpZGVvLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9NmFlM2I0YzNjMmZmOWU1MWRiYmMzNWJiMjM3YWZhMDAiCitERVBFTkRTID0gImxpYnh2IgorCitTUkNSRVYgPSAiZjhmMzIwZDAyNTRjMDljZTQ4M2ZjMWQ4ZWU5OWVjZjViYzk0MDk2NSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy90ZXN0LXh2aWRlbyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGxpYnh2IHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlL2xkZmxhZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3ZDE2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvYmxrdHJhY2UvYmxrdHJhY2UvbGRmbGFncy5wYXRjaApAQCAtMCwwICsxLDkzIEBACitibGt0cmFjZTogb2JleSBMREZMQUdTCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorCit0aGUgcGF0Y2ggd2FzIGltcG9ydGVkIGZyb20gbWV0YS1tZW50b3IgbGF5ZXIgb24geW9jdG9wcm9qZWN0IGdpdCBzZXJ2ZXIKK2h0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL21ldGEtbWVudG9yIGFzIG9mIGNvbW1pdCBpZAorYWVkNDYzNDE0ZTJlMmJmOGNhNDRiYTU0ZWU1OTczZTdlZDU5OWU1NworCitTaWduZWQtb2ZmLWJ5OiBGYWhhZCBVc21hbiA8ZmFoYWRfdXNtYW5AbWVudG9yLmNvbT4KKy0tLQorIE1ha2VmaWxlICAgICAgICAgIHwgICAxMSArKysrKystLS0tLQorIGJ0cmVwbGF5L01ha2VmaWxlIHwgICAgMyArKy0KKyBidHQvTWFrZWZpbGUgICAgICB8ICAgIDMgKystCisgMyBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCistLS0gZ2l0Lm9yaWcvTWFrZWZpbGUKKysrKyBnaXQvTWFrZWZpbGUKK0BAIC0xLDUgKzEsNiBAQAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLU8yIC1nIC1XCisrTERGTEFHUyA9CisgQUxMX0NGTEFHUyA9ICQoQ0ZMQUdTKSAtRF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAorIFBST0dTCT0gYmxrcGFyc2UgYmxrdHJhY2UgdmVyaWZ5X2Jsa3BhcnNlIGJsa3Jhd3ZlcmlmeSBibGtpb21vbgorIExJQlMJPSAtbHB0aHJlYWQKK0BAIC0yMywxOSArMjQsMTkgQEAgYnRyZXBsYXkvYnRyZXBsYXk6CisgCSQoQ0MpIC1vICQqLm8gLWMgJChBTExfQ0ZMQUdTKSAkPAorIAorIGJsa3BhcnNlOiBibGtwYXJzZS5vIGJsa3BhcnNlX2ZtdC5vIHJidHJlZS5vIGFjdF9tYXNrLm8KKy0JJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pCisrCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYmxrdHJhY2U6IGJsa3RyYWNlLm8gYWN0X21hc2subworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgdmVyaWZ5X2Jsa3BhcnNlOiB2ZXJpZnlfYmxrcGFyc2UubworLQkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTERGTEFHUykKKyAKKyBibGtyYXd2ZXJpZnk6IGJsa3Jhd3ZlcmlmeS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMREZMQUdTKQorIAorIGJsa2lvbW9uOiBibGtpb21vbi5vIHJidHJlZS5vCistCSQoQ0MpICQoQUxMX0NGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpIC1scnQKKysJJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgLWxydCAkKExERkxBR1MpCisgCisgJChQUk9HUyk6IHwgZGVwZW5kCisgCistLS0gZ2l0Lm9yaWcvYnRyZXBsYXkvTWFrZWZpbGUKKysrKyBnaXQvYnRyZXBsYXkvTWFrZWZpbGUKK0BAIC03LDYgKzcsNyBAQAorIAorIENDCT0gZ2NjCisgQ0ZMQUdTCT0gLVdhbGwgLVcgLU8yIC1nCisrTERGTEFHUyA9CisgSU5DUwk9IC1JLiAtSS4uIC1JLi4vYnR0CisgT0NGTEFHUwk9IC1VQ09VTlRfSU9TIC1VREVCVUcgLUROREVCVUcKKyBYQ0ZMQUdTCT0gLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKK0BAIC0zMiwxMCArMzMsMTAgQEAgY2xlYW46IGRvY3NjbGVhbgorCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKi5vICQ8CisKKyBidHJlY29yZDogYnRyZWNvcmQubworLQkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExERkxBR1MpCisgCisgYnRyZXBsYXk6IGJ0cmVwbGF5Lm8KKy0JJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKQorKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJChmaWx0ZXIgJS5vLCReKSAkKExJQlMpICQoTERGTEFHUykKKyAKKyBkZXBlbmQ6CisgCUAkKENDKSAtTU0gJChDRkxBR1MpICouYyAxPiAuZGVwZW5kCistLS0gZ2l0Lm9yaWcvYnR0L01ha2VmaWxlCisrKysgZ2l0L2J0dC9NYWtlZmlsZQorQEAgLTcsNiArNyw3IEBACisgCisgQ0MJPSBnY2MKKyBDRkxBR1MJPSAtV2FsbCAtVyAtTzIgLWcKKytMREZMQUdTID0KKyBJTkNTCT0gLUkuIC1JLi4KKyBYQ0ZMQUdTCT0gLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQKKyBvdmVycmlkZSBDRkxBR1MgKz0gJChJTkNTKSAkKFhDRkxBR1MpCitAQCAtMzgsNyArMzksNyBAQCBjbGVhbjogZG9jc2NsZWFuCisgCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtbyAkKi5vICQ8CisgCisgYnR0OiAkKE9CSlMpCistCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKysJJChDQykgJChDRkxBR1MpIC1vICRAICQoZmlsdGVyICUubywkXikgJChMSUJTKSAkKExERkxBR1MpCisgCisgaWZuZXEgKCQod2lsZGNhcmQgLmRlcGVuZCksKQorIGluY2x1ZGUgLmRlcGVuZApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2Jsa3RyYWNlL2Jsa3RyYWNlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjBiZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9ibGt0cmFjZS9ibGt0cmFjZV9naXQuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJHZW5lcmF0ZXMgdHJhY2VzIG9mIEkvTyB0cmFmZmljIG9uIGJsb2NrIGRldmljZXMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzkzYTVjYTQ0NWY2OTY1ODczZWNhMDI1OWExN2Y4MzMiCisKK0RFUEVORFMgPSAibGliYWlvIgorCitTUkNSRVYgPSAiNDNmYzg3MGNlMDRlOTYzZGVmNDVkZmMwZDFlZDRlYTIxZWYxMGQ0YiIKKworUFYgPSAiMS4xLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXQgXAorICAgICAgICAgICBmaWxlOi8vbGRmbGFncy5wYXRjaCIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAnQ0M9JHtDQ30nIFwKKyAgICAnQ0ZMQUdTPSR7Q0ZMQUdTfScgXAorICAgICdMREZMQUdTPSR7TERGTEFHU30nIFwKKyIKKworIyBUaGVyZSBhcmUgYSBmZXcgcGFyYWxsZWwgaXNzdWVzOgorIyAxKSAuLi9yYnRyZWUubzogZXJyb3IgYWRkaW5nIHN5bWJvbHM6IEludmFsaWQgb3BlcmF0aW9uCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBNYWtlZmlsZTo0MjogcmVjaXBlIGZvciB0YXJnZXQgJ2J0dCcgZmFpbGVkCisjIDIpIGdpdC9ibGtpb21vbi5jOjIxNjogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmJfaW5zZXJ0X2NvbG9yJworIyBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKKyMgTWFrZWZpbGU6Mjc6IHJlY2lwZSBmb3IgdGFyZ2V0ICdibGtwYXJzZScgZmFpbGVkCisjIDMpIGxkOiByYnRyZWUubzogaW52YWxpZCBzdHJpbmcgb2Zmc2V0IDEyOCA+PSAxMjUgZm9yIHNlY3Rpb24gYC5zdHJ0YWInCisjIDQpIGJ0cmVwbGF5Lm86IGZpbGUgbm90IHJlY29nbml6ZWQ6IEZpbGUgdHJ1bmNhdGVkCisjIGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworIyBidHJlcGxheS9idHJlcGxheS5jOjQ3OjE4OiBmYXRhbCBlcnJvcjogbGlzdC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CitQQVJBTExFTF9NQUtFID0gIiIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIEFSQ0g9IiR7QVJDSH0iIHByZWZpeD0ke3ByZWZpeH0gXAorCQltYW5kaXI9JHttYW5kaXJ9IERFU1RESVI9JHtEfSBpbnN0YWxsCit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi1saW51eF8xLjcuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbGludXhfMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzg0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbGludXhfMS43LmJiCkBAIC0wLDAgKzEsMTMgQEAKK3JlcXVpcmUgY3J5cHRvZGV2XyR7UFZ9LmluYworCitTVU1NQVJZID0gIkEgL2Rldi9jcnlwdG8gZGV2aWNlIGRyaXZlciBoZWFkZXIgZmlsZSIKKworZG9fY29tcGlsZVtub2V4ZWNdID0gIjEiCisKKyMgSnVzdCBpbnN0YWxsIGNyeXB0b2Rldi5oIHdoaWNoIGlzIHRoZSBvbmx5IGhlYWRlciBmaWxlIG5lZWRlZCB0byBiZSBleHBvcnRlZAorZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1EICR7U30vY3J5cHRvL2NyeXB0b2Rldi5oICR7RH0ke2luY2x1ZGVkaXJ9L2NyeXB0by9jcnlwdG9kZXYuaAorfQorCitBTExPV19FTVBUWV8ke1BOfSA9ICIxIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9jcnlwdG9kZXYtbW9kdWxlXzEuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q1MmViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LW1vZHVsZV8xLjcuYmIKQEAgLTAsMCArMSwxOCBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIGtlcm5lbCBtb2R1bGUiCisKK2luaGVyaXQgbW9kdWxlCisKKyMgSGVhZGVyIGZpbGUgcHJvdmlkZWQgYnkgYSBzZXBhcmF0ZSBwYWNrYWdlCitERVBFTkRTICs9ICJjcnlwdG9kZXYtbGludXgiCisKK1NSQ19VUkkgKz0gIiBcCitmaWxlOi8vMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoIFwKK2ZpbGU6Ly8wMDAxLWlvY3RsLmMtRml4LWJ1aWxkLW9uLTMuMTkucGF0Y2ggXAorIgorCitFWFRSQV9PRU1BS0U9J0tFUk5FTF9ESVI9IiR7U1RBR0lOR19LRVJORUxfRElSfSIgUFJFRklYPSIke0R9IicKKworUkNPTkZMSUNUU18ke1BOfSA9ICJvY2YtbGludXgiCitSUkVQTEFDRVNfJHtQTn0gPSAib2NmLWxpbnV4IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2LXRlc3RzXzEuNy5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi10ZXN0c18xLjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZjNDFhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldi10ZXN0c18xLjcuYmIKQEAgLTAsMCArMSwyMyBAQAorcmVxdWlyZSBjcnlwdG9kZXZfJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiQSB0ZXN0IHN1aXRlIGZvciAvZGV2L2NyeXB0byBkZXZpY2UgZHJpdmVyIgorCitERVBFTkRTICs9ICJvcGVuc3NsIgorCitTUkNfVVJJICs9ICIgXAorZmlsZTovLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBcCitmaWxlOi8vMDAwMi1GaXgtdGVzdHMtTWFrZWZpbGUtdXNhZ2Utb2YtTERMSUJTLXZzLi1MREZMQUdTLnBhdGNoIFwKKyIKKworRVhUUkFfT0VNQUtFPSdLRVJORUxfRElSPSIke1NUQUdJTkdfS0VSTkVMX0RJUn0iIFBSRUZJWD0iJHtEfSInCisKK2RvX2NvbXBpbGUoKSB7CisJb2VfcnVubWFrZSB0ZXN0cHJvZ3MKK30KKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGxfdGVzdHMKK30KKworRklMRVNfJHtQTn0tZGJnICs9ICIke2JpbmRpcn0vdGVzdHNfY3J5cHRvZGV2Ly5kZWJ1ZyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS90ZXN0c19jcnlwdG9kZXYvKiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvY3J5cHRvZGV2XzEuNy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhNjkyNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2NyeXB0b2Rldl8xLjcuaW5jCkBAIC0wLDAgKzEsMTMgQEAKK0hPTUVQQUdFID0gImh0dHA6Ly9jcnlwdG9kZXYtbGludXgub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5nbmEub3JnL2NyeXB0b2Rldi1saW51eC9jcnlwdG9kZXYtbGludXgtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMGI2M2IzNDgxY2YyYzkwMzg2YjM1ZjA1NzQ4MWQzNmIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDE4ODA1MzNiNTNkZTRkN2IzZjA1NGUyMzBmNTc2OTg4ZGFmYjhlZWQ3YmVmNWViY2Y2NDIyYmIyZTNhM2IyNSIKKworUyA9ICIke1dPUktESVJ9L2NyeXB0b2Rldi1saW51eC0ke1BWfSIKKworQ0xFQU5CUk9LRU4gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtQWRkLXRoZS1jb21waWxlLWFuZC1pbnN0YWxsLXJ1bGVzLWZvci1jcnlwdG9kZXYtdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjAyOThiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1BZGQtdGhlLWNvbXBpbGUtYW5kLWluc3RhbGwtcnVsZXMtZm9yLWNyeXB0b2Rldi10ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNjYgQEAKK0Zyb20gMTk4MGE4ZjQ3NzlhOTU1ZTczMjg1ZTdhMGQ4NjU0OWI2OWJlYTVjOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl1IFpvbmdjaHVuIDxiNDA1MjdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFN1biwgMjggQXByIDIwMTMgMTQ6Mzk6MjIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHRoZSBjb21waWxlIGFuZCBpbnN0YWxsIHJ1bGVzIGZvciBjcnlwdG9kZXYgdGVzdHMgZm9sZGVyCisKK1RoaXMgaXMgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgY3J5cHRvZGV2IHRlc3RzIGZvbGRlciB0byByb290ZnMKKworU2lnbmVkLW9mZi1ieTogWXUgWm9uZ2NodW4gPGI0MDUyN0BmcmVlc2NhbGUuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tCisgTWFrZWZpbGUgICAgICAgfCAgICA2ICsrKysrKworIHRlc3RzL01ha2VmaWxlIHwgICAgOCArKysrKysrKworIDIgZmlsZXMgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDMxYzRiM2YuLjJlY2YyYTkgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zNCw2ICszNCw5IEBAIG1vZHVsZXNfaW5zdGFsbDoKKyAJQGVjaG8gIkluc3RhbGxpbmcgY3J5cHRvZGV2LmggaW4gJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0byAuLi4iCisgCUBpbnN0YWxsIC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvL2NyeXB0b2Rldi5oCisgCisraW5zdGFsbF90ZXN0czoKKysJbWFrZSAtQyB0ZXN0cyBpbnN0YWxsIERFU1RESVI9JChQUkVGSVgpCisrCisgY2xlYW46CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCisgCXJtIC1mICQoaG9zdHByb2dzKSAqfgorQEAgLTQyLDYgKzQ1LDkgQEAgY2xlYW46CisgY2hlY2s6CisgCUNGTEFHUz0kKENSWVBUT0RFVl9DRkxBR1MpIEtFUk5FTF9ESVI9JChLRVJORUxfRElSKSBtYWtlIC1DIHRlc3RzIGNoZWNrCisgCisrdGVzdHByb2dzOgorKwlLRVJORUxfRElSPSQoS0VSTkVMX0RJUikgbWFrZSAtQyB0ZXN0cyB0ZXN0cHJvZ3MKKysKKyBDUE9QVFMgPQorIGlmbmVxICgke1NIT1dfVFlQRVN9LCkKKyBDUE9QVFMgKz0gLS1zaG93LXR5cGVzCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggYzlmMDRlOC4uY2QyMDJhZiAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTE5LDYgKzE5LDEyIEBAIGV4YW1wbGUtYXN5bmMtaG1hYy1vYmpzIDo9IGFzeW5jX2htYWMubworIGV4YW1wbGUtYXN5bmMtc3BlZWQtb2JqcyA6PSBhc3luY19zcGVlZC5vCisgZXhhbXBsZS1oYXNoY3J5cHQtc3BlZWQtb2JqcyA6PSBoYXNoY3J5cHRfc3BlZWQuYworIAorK2luc3RhbGw6CisrCWluc3RhbGwgLWQgICQoREVTVERJUikvdXNyL2Jpbi90ZXN0c19jcnlwdG9kZXYKKysJZm9yIGJpbiBpbiAkKGhvc3Rwcm9ncyk7IGRvIFwKKysJCWluc3RhbGwgLW0gNzU1ICQke2Jpbn0gJChERVNURElSKS91c3IvYmluL3Rlc3RzX2NyeXB0b2Rldi87IFwKKysJZG9uZQorKworIGNoZWNrOiAkKGhvc3Rwcm9ncykKKyAJLi9jaXBoZXIKKyAJLi9obWFjCitAQCAtMjgsNiArMzQsOCBAQCBjaGVjazogJChob3N0cHJvZ3MpCisgCS4vY2lwaGVyLWdjbQorIAkuL2NpcGhlci1hZWFkCisgCisrdGVzdHByb2dzOiAkKGhvc3Rwcm9ncykKKysKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICp+ICQoaG9zdHByb2dzKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1EaXNhYmxlLWluc3RhbGxpbmctaGVhZGVyLWZpbGUtcHJvdmlkZWQtYnktYW5vdGhlci1wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ODBmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAxLURpc2FibGUtaW5zdGFsbGluZy1oZWFkZXItZmlsZS1wcm92aWRlZC1ieS1hbm90aGVyLXAucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSA4YTg4NGY1NWJkMTUyN2JhYTgyZmFiNjhjMTg2YmE1NDYyNzM4NjBjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGVueXMgRG15dHJpeWVua28gPGRlbnlzQHRpLmNvbT4KK0RhdGU6IFN1biwgNiBBcHIgMjAxNCAxOTo1MTozOSAtMDQwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIGluc3RhbGxpbmcgaGVhZGVyIGZpbGUgcHJvdmlkZWQgYnkgYW5vdGhlciBwYWNrYWdlCisKK1NpZ25lZC1vZmYtYnk6IERlbnlzIERteXRyaXllbmtvIDxkZW55c0B0aS5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbIE9FIHNwZWNpZmljIF0KKy0tLQorIE1ha2VmaWxlIHwgMiAtLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggZDY2ZWYyNi4uOGU5N2M2YSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIzLDggKzIzLDYgQEAgaW5zdGFsbDogbW9kdWxlc19pbnN0YWxsCisgCisgbW9kdWxlc19pbnN0YWxsOgorIAltYWtlIC1DICQoS0VSTkVMX0RJUikgU1VCRElSUz1gcHdkYCBtb2R1bGVzX2luc3RhbGwKKy0JQGVjaG8gIkluc3RhbGxpbmcgY3J5cHRvZGV2LmggaW4gJChQUkVGSVgpL3Vzci9pbmNsdWRlL2NyeXB0byAuLi4iCistCUBpbnN0YWxsIC1EIGNyeXB0by9jcnlwdG9kZXYuaCAkKFBSRUZJWCkvdXNyL2luY2x1ZGUvY3J5cHRvL2NyeXB0b2Rldi5oCisgCisgY2xlYW46CisgCW1ha2UgLUMgJChLRVJORUxfRElSKSBTVUJESVJTPWBwd2RgIGNsZWFuCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtaW9jdGwuYy1GaXgtYnVpbGQtb24tMy4xOS5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDEtaW9jdGwuYy1GaXgtYnVpbGQtb24tMy4xOS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM4OTcyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9jcnlwdG9kZXYvZmlsZXMvMDAwMS1pb2N0bC5jLUZpeC1idWlsZC1vbi0zLjE5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gN2Q3MTEyNDk5MTAzMGY5OTk2NWU2ZTZhYWVkNDIxMTE1ZjE4NWFkYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJpY2FyZG8gUmliYWxkYSBEZWxnYWRvIDxyaWNhcmRvLnJpYmFsZGFAZ21haWwuY29tPgorRGF0ZTogTW9uLCA5IEZlYiAyMDE1IDEzOjUxOjU2ICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIGlvY3RsLmM6IEZpeCBidWlsZCBvbiAzLjE5CisKK2dldF91bnVzZWRfZmQoKSBNQUNSTyBoYXMgYmVlbiByZW1vdmVkIG9uIGtlcm5lbCAzLjE5LiBSZXBsYWNlIGJ5IHRoZQorYWN0dWFsIG91dHB1dCBvZiB0aGUgbWFjcm8uCisKK1NpZ25lZC1vZmYtYnk6IFJpY2FyZG8gUmliYWxkYSBEZWxnYWRvIDxyaWNhcmRvLnJpYmFsZGFAZ21haWwuY29tPgorLS0tCisgaW9jdGwuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2lvY3RsLmMgYi9pb2N0bC5jCitpbmRleCBmMjZjZjkzLi5jZjhjYzE3IDEwMDY0NAorLS0tIGEvaW9jdGwuYworKysrIGIvaW9jdGwuYworQEAgLTUyOSw3ICs1MjksNyBAQCBzdGF0aWMgaW50CisgY2xvbmVmZChzdHJ1Y3QgZmlsZSAqZmlscCkKKyB7CisgCWludCByZXQ7CistCXJldCA9IGdldF91bnVzZWRfZmQoKTsKKysJcmV0ID0gZ2V0X3VudXNlZF9mZF9mbGFncygwKTsKKyAJaWYgKHJldCA+PSAwKSB7CisgCQkJZ2V0X2ZpbGUoZmlscCk7CisgCQkJZmRfaW5zdGFsbChyZXQsIGZpbHApOworLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAyLUZpeC10ZXN0cy1NYWtlZmlsZS11c2FnZS1vZi1MRExJQlMtdnMuLUxERkxBR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2NyeXB0b2Rldi9maWxlcy8wMDAyLUZpeC10ZXN0cy1NYWtlZmlsZS11c2FnZS1vZi1MRExJQlMtdnMuLUxERkxBR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhYjhiNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvY3J5cHRvZGV2L2ZpbGVzLzAwMDItRml4LXRlc3RzLU1ha2VmaWxlLXVzYWdlLW9mLUxETElCUy12cy4tTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDQ3ZmYxZWI5YmI0Zjg3MmMxZDczMWI5M2QzMzRlZTU4NjViZjM0MzkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorRGF0ZTogU3VuLCA2IEFwciAyMDE0IDIyOjE2OjMwIC0wNDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCB0ZXN0cyBNYWtlZmlsZSB1c2FnZSBvZiBMRExJQlMgdnMuIExERkxBR1MKKworTGlicmFyaWVzIG11c3QgY29tZSBhZnRlciBvYmplY3RzLCBhcyBsaW5rIG9yZGVyIG1hdHRlcnMsIGVzcGVjaWFsbHkKK3doZW4gdXNpbmcgbGlua2VyIGZsYWdzIGxpa2UgLVdsLC0tYXMtbmVlZGVkLgorCitTaWduZWQtb2ZmLWJ5OiBEZW55cyBEbXl0cml5ZW5rbyA8ZGVueXNAdGkuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIHRlc3RzL01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUgYi90ZXN0cy9NYWtlZmlsZQoraW5kZXggY2QyMDJhZi4uNjdjM2M4MyAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlCisrKysgYi90ZXN0cy9NYWtlZmlsZQorQEAgLTM5LDUgKzM5LDUgQEAgdGVzdHByb2dzOiAkKGhvc3Rwcm9ncykKKyBjbGVhbjoKKyAJcm0gLWYgKi5vICp+ICQoaG9zdHByb2dzKQorIAorLSR7Y29tcF9wcm9nc306IExERkxBR1MgKz0gLWxzc2wgLWxjcnlwdG8KKyske2NvbXBfcHJvZ3N9OiBMRExJQlMgKz0gLWxzc2wgLWxjcnlwdG8KKyAke2NvbXBfcHJvZ3N9OiAlOiAlLm8gb3BlbnNzbF93cmFwcGVyLm8KKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM0MDliMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy5pbmMKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJEZXZpY2UgVHJlZSBDb21waWxlciIKK0RFU0NSSVBUSU9OID0gIlRoZSBEZXZpY2UgVHJlZSBDb21waWxlciBpcyBhIHRvb2wgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSBPcGVuLUZpcm13YXJlLWxpa2UgZGV2aWNlIHRyZWUgdXNlZCBieSBQb3dlclBDIGtlcm5lbHMuIgorU0VDVElPTiA9ICJib290bG9hZGVyIgorTElDRU5TRSA9ICJHUEx2MiB8IEJTRCIKK0RFUEVORFMgPSAiZmxleC1uYXRpdmUgYmlzb24tbmF0aXZlIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vdXRpbHMvZHRjL2R0Yy5naXQgXAorICAgICAgICAgICBmaWxlOi8vbWFrZV9pbnN0YWxsLnBhdGNoIFwKKwkgICIKKworRVhUUkFfT0VNQUtFPSdQUkVGSVg9IiR7cHJlZml4fSIgTElCRElSPSIke2xpYmRpcn0iIERFU1RESVI9IiR7RH0iJworCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsICgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LW1pc2MiCitGSUxFU18ke1BOfS1taXNjID0gIiR7YmluZGlyfS9jb252ZXJ0LWR0c3YwICR7YmluZGlyfS9mdGR1bXAgJHtiaW5kaXJ9L2R0ZGlmZiIKKworUkRFUEVORFNfJHtQTn0tbWlzYyArPSAiYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvZHRjL2R0Yy9tYWtlX2luc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMvbWFrZV9pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjA2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGMvbWFrZV9pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGdpdC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL01ha2VmaWxlCTIwMTEtMTEtMDIgMTQ6NTI6MTcuMjQzMTA0Nzc5IC0wNzAwCisrKysgZ2l0L01ha2VmaWxlCTIwMTEtMTEtMDIgMTU6MDY6MDEuNTU1MTA0OTgyIC0wNzAwCitAQCAtMTYxLDggKzE2MSw4IEBACisgCSQoSU5TVEFMTCkgLWQgJChERVNURElSKSQoQklORElSKQorIAkkKElOU1RBTEwpICQoQklOKSAkKFNDUklQVFMpICQoREVTVERJUikkKEJJTkRJUikKKyAJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJChMSUJESVIpCistCSQoSU5TVEFMTCkgJChMSUJGRFRfbGliKSAkKERFU1RESVIpJChMSUJESVIpCistCWxuIC1zZiAkKG5vdGRpciAkKExJQkZEVF9saWIpKSAkKERFU1RESVIpJChMSUJESVIpLyQoTElCRkRUX3NvbmFtZSkKKysJJChJTlNUQUxMKSAkKExJQkZEVF9saWIpICQoREVTVERJUikkKExJQkRJUikvJChMSUJGRFRfc29uYW1lKQorKwlsbiAtc2YgJChMSUJGRFRfc29uYW1lKSAkKERFU1RESVIpJChMSUJESVIpLyQobm90ZGlyICQoTElCRkRUX2xpYikpCisgCWxuIC1zZiAkKExJQkZEVF9zb25hbWUpICQoREVTVERJUikkKExJQkRJUikvbGliZmR0LiQoU0hBUkVETElCX0VYVCkKKyAJJChJTlNUQUxMKSAtbSA2NDQgJChMSUJGRFRfYXJjaGl2ZSkgJChERVNURElSKSQoTElCRElSKQorIAkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKElOQ0xVREVESVIpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2R0Yy9kdGNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDQ2MTQyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9kdGMvZHRjX2dpdC5iYgpAQCAtMCwwICsxLDExIEBACityZXF1aXJlIGR0Yy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisJCSAgICBmaWxlOi8vbGliZmR0L2xpYmZkdC5oO2JlZ2lubGluZT0zO2VuZGxpbmU9NTI7bWQ1PWZiMzYwOTYzMTUxZjhlYzJkNmMwNmIwNTViY2JiNjhjIgorCitTUkNSRVYgPSAiMzAyZmNhOWY0YzI4M2UxOTk0Y2YwYTVhOWNlMWNmNDNjYTE1ZTZkMiIKK1BWID0gIjEuNC4xK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tlcm4tdG9vbHMva2Vybi10b29scy1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUzMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rZXJuLXRvb2xzL2tlcm4tdG9vbHMtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIlRvb2xzIGZvciBtYW5hZ2luZyBZb2N0byBQcm9qZWN0IHN0eWxlIGJyYW5jaGVkIGtlcm5lbHMiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZ2l0L3Rvb2xzL2tnaXQ7YmVnaW5saW5lPTU7ZW5kbGluZT05O21kNT1kOGQxZDcyOWE3MGNkNWY1Mjk3MmY4ODg0YjgwNzQzZCIKKworREVQRU5EUyA9ICJnaXQtbmF0aXZlIgorCitTUkNSRVYgPSAiYmQxNDRkNDNjYTViMWVhZjllNzI3YmNlZDRjZTNiNjFiNjQyMjk3YyIKK1BSID0gInIxMiIKK1BWID0gIjAuMitnaXQke1NSQ1BWfSIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtdG9vbHMuZ2l0IgorUyA9ICIke1dPUktESVJ9IgorCitkb19jb21waWxlKCkgeyAKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJY2QgJHtTfS9naXQKKwltYWtlIERFU1RESVI9JHtEfSR7YmluZGlyfSBpbnN0YWxsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OTdhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLmluYwpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIktleGVjIGZhc3QgcmVib290IHRvb2xzIgorREVTQ1JJUFRJT04gPSAiS2V4ZWMgaXMgYSBmYXN0IHJlYm9vdCBmZWF0dXJlIHRoYXQgbGV0cyB5b3UgcmVib290IHRvIGEgbmV3IExpbnV4IGtlcm5lbCIKK0FVVEhPUiA9ICJFcmljIEJpZWRlcm1hbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwva2V4ZWMvIgorU0VDVElPTiA9ICJrZXJuZWwvdXNlcmxhbmQiCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWE1YmVkMmY2MGQzNTc2MThjYTE2MWFkNTM5ZjdjMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8va2V4ZWMva2V4ZWMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1hZjEwZjZhZTRhODcxNTk2NWU2NDhhYTY4N2FkM2UwOSIKK0RFUEVORFMgPSAiemxpYiB4eiIKKworU1JDX1VSSSA9ICIke0tFUk5FTE9SR19NSVJST1J9L2xpbnV4L3V0aWxzL2tlcm5lbC9rZXhlYy9rZXhlYy10b29scy0ke1BWfS50YXIuZ3oiCisKK1BSID0gInIxIgorCitpbmhlcml0IGF1dG90b29scworCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhcm0uKnxhYXJjaDY0Lip8cG93ZXJwYy4qfG1pcHMuKiktKGxpbnV4fGZyZWVic2QuKiknCisKK0lOU0FORV9TS0lQXyR7UE59ID0gImFyY2giCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIFJlbW92ZSB0aGUgJyouZCcgZmlsZSB0byBtYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIGZvciBkZXAgaW4gYGZpbmQgJHtCfSAtdHlwZSBmIC1uYW1lICcqLmQnYDsgZG8KKyAgICAgICAgZGVwX25vX2Q9ImBlY2hvICRkZXAgfCBzZWQgJ3MjLmQkIyMnYCIKKyAgICAgICAgIyBSZW1vdmUgZmlsZS5kIHdoZW4gdGhlcmUgaXMgYSBmaWxlLm8KKyAgICAgICAgaWYgWyAtZiAiJGRlcF9ub19kLm8iIF07IHRoZW4KKyAgICAgICAgICAgIHJtIC1mICRkZXAKKyAgICAgICAgZmkKKyAgICBkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZkMDc3ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMS1wdXJnYXRvcnktUGFzcy1yLWRpcmVjdGx5LXRvLWxpbmtlci5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIGExMTM1YjMxNzA5NjNiYTk1NmYyMzY0YzEyODM4NjRjMzU1NDEyOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA3OjU5OjQ1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIHB1cmdhdG9yeTogUGFzcyAtciBkaXJlY3RseSB0byBsaW5rZXIKKworVGhpcyBoZWxwcyBjb21waWxpbmcgd2l0aCBjbGFuZyBzaW5jZSAtciBpcyBub3QgYSBrbm93biBvcHRpb24gZm9yIGNsYW5nCit3aGVyZSBhcyBnY2Mga25vd3MgaG93IHRvIGRlYWwgd2l0aCBpdCBhbmQgcGFzc2VzIGl0IGRvd24gdG8gbGlua2VyCit1bmZpbHRlcmVkCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgcHVyZ2F0b3J5L01ha2VmaWxlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvcHVyZ2F0b3J5L01ha2VmaWxlIGIvcHVyZ2F0b3J5L01ha2VmaWxlCitpbmRleCAyYjVjMDYxLi5iMjUxMzUzIDEwMDY0NAorLS0tIGEvcHVyZ2F0b3J5L01ha2VmaWxlCisrKysgYi9wdXJnYXRvcnkvTWFrZWZpbGUKK0BAIC02MSw3ICs2MSw3IEBAICQoUFVSR0FUT1JZKTogQ1BQRkxBR1M9JCgkKEFSQ0gpX1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MpIFwKKyAJCQktSSQoc2hlbGwgJChDQykgLXByaW50LWZpbGUtbmFtZT1pbmNsdWRlKQorICQoUFVSR0FUT1JZKTogTERGTEFHUz0kKCQoQVJDSClfUFVSR0FUT1JZX0VYVFJBX0NGTEFHUylcCisgCQkJLVdsLC0tbm8tdW5kZWZpbmVkIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIFwKKy0JCQktbm9kZWZhdWx0bGlicyAtZSBwdXJnYXRvcnlfc3RhcnQgLXIgXAorKwkJCS1ub2RlZmF1bHRsaWJzIC1lIHB1cmdhdG9yeV9zdGFydCAtV2wsLXIgXAorIAkJCS1XbCwtTWFwPSQoUFVSR0FUT1JZX01BUCkKKyAKKyAkKFBVUkdBVE9SWSk6ICQoUFVSR0FUT1JZX09CSlMpCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMvMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTdkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzLzAwMDItcG93ZXJwYy1jaGFuZ2UtdGhlLW1lbW9yeS1zaXplLWxpbWl0LnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gYjE5YjY4ZWFiNTY3YWE1MzRjZjhkZWM3OWZlMThlM2RjMGUxNDA0MyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFF1YW55YW5nIFdhbmcgPHF1YW55YW5nLndhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTYgSnVuIDIwMTUgMTI6NTk6NTcgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcG93ZXJwYzogY2hhbmdlIHRoZSBtZW1vcnkgc2l6ZSBsaW1pdAorCitXaGVuIHJ1biAia2V4ZWMiIGluIHBvd2VycGMgYm9hcmQsIHRoZSBrZXhlYyBoYXMgYSBsaW1pdCB0aGF0Cit0aGUga2VybmVsIHRleHQgYW5kIGJzcyBzaXplIG11c3QgYmUgbGVzcyB0aGFuIDI0TS4gQnV0IG5vdworc29tZSBrZXJuZWwgc2l6ZSBleGNlZWQgdGhlIGxpbWl0LiBTbyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgbGltaXQsCitlbHNlIHdpbGwgZ2V0IHRoZSBlcnJvciBsb2cgYXMgYmVsb3c6CisKK215X2xvYWQ6NjY5OiBkbworQ291bGQgbm90IGZpbmQgYSBmcmVlIGFyZWEgb2YgbWVtb3J5IG9mIDB4MTI0MDAgYnl0ZXMuLi4KK0NvdWxkIG5vdCBmaW5kIGEgZnJlZSBhcmVhIG9mIG1lbW9yeSBvZiAweDEzMDAwIGJ5dGVzLi4uCitsb2NhdGVfaG9sZSBmYWlsZWQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFF1YW55YW5nIFdhbmcgPHF1YW55YW5nLndhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGtleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2tleGVjLXBwYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9wcGMva2V4ZWMtcHBjLmgKK0BAIC00Miw3ICs0Miw3IEBAIHZvaWQgZG9sX3BwY191c2FnZSh2b2lkKTsKKyAgKiBEdXJpbmcgaW5pdGFsIHNldHVwIHRoZSBrZXJuZWwgZG9lcyBub3QgbWFwIHRoZSB3aG9sZSBtZW1vcnkgYnV0IGEgcGFydCBvZgorICAqIGl0LiBPbiBCb29rLUUgdGhhdCBpcyA2NE1pQiwgNjAxIDI0TWlCIG9yIDI1Nk1pQiAoaWYgcG9zc2libGUpLgorICAqLworLSNkZWZpbmUgS0VSTkVMX0FDQ0VTU19UT1AgKDI0ICogMTAyNCAqIDEwMjQpCisrI2RlZmluZSBLRVJORUxfQUNDRVNTX1RPUCAoMzYgKiAxMDI0ICogMTAyNCkKKyAKKyAvKiBib290IGJsb2NrIHZlcnNpb24gMTcgYXMgZGVmaW5lZCBieSB0aGUgbGludXgga2VybmVsICovCisgc3RydWN0IGJvb3RibG9jayB7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLWFhcmNoNjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLWFhcmNoNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjAzZjU4MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtYWFyY2g2NC5wYXRjaApAQCAtMCwwICsxLDgwMSBAQAorRnJvbTogR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgorRGF0ZTogTW9uLCAxNSBKdWwgMjAxMyAyMzozMjozNiArMDAwMCAoLTA3MDApCitTdWJqZWN0OiBBZGQgYXJtNjQgc3VwcG9ydAorWC1HaXQtVXJsOiBodHRwczovL2dpdC5saW5hcm8ub3JnL2dpdHdlYj9wPXBlb3BsZSUyRmdlb2ZmJTJGa2V4ZWMtdG9vbHMuZ2l0O2E9Y29tbWl0ZGlmZl9wbGFpbjtoPWZiZjVhYzZjMmM3MGVjMGY2ZGEyYjlmZjU2M2U1NzM5OTk3NTJjMDEKKworQWRkIGFybTY0IHN1cHBvcnQKKworU2lnbmVkLW9mZi1ieTogR2VvZmYgTGV2YW5kIDxnZW9mZkBpbmZyYWRlYWQub3JnPgorCitHZXQgcGF0Y2ggZnJvbToKK2h0dHBzOi8vZmVkb3JhcGVvcGxlLm9yZy9+aHJ3L2FhcmNoNjQvZm9yLWZlZG9yYS9rZXhlYy1hYXJjaDY0LnBhdGNoCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzIAorIGtleGVjL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisga2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAxMyArCisga2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYyAgICAgIHwgIDMwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGtleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaCB8ICAgMjYgKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMgICAgICAgICAgfCAgMTc3ICsrKysrKysrKysrKysrKysrKworIGtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaCAgICAgICAgICB8ICAgMjAgKysKKyBrZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jICAgICAgfCAgMTE0ICsrKysrKysrKysrCisga2V4ZWMva2V4ZWMtc3lzY2FsbC5oICAgICAgICAgICAgICAgICAgIHwgICAgOSAKKyBrZXhlYy9rZXhlYy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAorIHB1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlICAgICAgICAgICB8ICAgIDcgCisgMTEgZmlsZXMgY2hhbmdlZCwgNjc1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcvY29uZmlndXJlLmFjCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworQEAgLTM2LDYgKzM2LDkgQEAgY2FzZSAkdGFyZ2V0X2NwdSBpbgorIAkJQVJDSD0icHBjNjQiCisgCQlTVUJBUkNIPSJMRSIKKyAJCTs7CisrCWFhcmNoNjQqICkKKysJCUFSQ0g9ImFybTY0IgorKwkJOzsKKyAJYXJtKiApCisgCQlBUkNIPSJhcm0iCisgCQk7OworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL01ha2VmaWxlCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL01ha2VmaWxlCitAQCAtNzEsNiArNzEsNyBAQCBLRVhFQ19TUkNTCQkJKz0gJCgkKEFSQ0gpX0ZTMkRUKQorIAorIGluY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYWxwaGEvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2FybS9NYWtlZmlsZQorK2luY2x1ZGUgJChzcmNkaXIpL2tleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2kzODYvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL2lhNjQvTWFrZWZpbGUKKyBpbmNsdWRlICQoc3JjZGlyKS9rZXhlYy9hcmNoL202OGsvTWFrZWZpbGUKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9NYWtlZmlsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMCwwICsxLDEzIEBACisrCisrYXJtNjRfS0VYRUNfU1JDUyArPSBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuYyBcCisrCWtleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMgXAorKwlrZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCisrCisrYXJtNjRfQVJDSF9SRVVTRV9JTklUUkQgPQorK2FybTY0X0FERF9TRUdNRU5UID0KKythcm02NF9WSVJUX1RPX1BIWVMgPQorKworK2Rpc3QgKz0gJChhcm02NF9LRVhFQ19TUkNTKSBcCisrCWtleGVjL2FyY2gvYXJtNjQvTWFrZWZpbGUgXAorKwlrZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9jcmFzaGR1bXAtYXJtNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2NyYXNoZHVtcC1hcm02NC5jCitAQCAtMCwwICsxLDMwNSBAQAorKy8qCisrICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKysgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gKHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSkuCisrICovCisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLWVsZi5oIgorKyNpbmNsdWRlICIuLi8uLi9jcmFzaGR1bXAuaCIKKysKKytpbnQgaXNfY3Jhc2hrZXJuZWxfbWVtX3Jlc2VydmVkKHZvaWQpCisreworKwlyZXR1cm4gMDsKKyt9CisrCisrI2lmIDAKKysvKgorKyAqIFVzZWQgdG8gc2F2ZSB2YXJpb3VzIG1lbW9yeSByYW5nZXMvcmVnaW9ucyBuZWVkZWQgZm9yIHRoZSBjYXB0dXJlZAorKyAqIGtlcm5lbCB0byBib290LiAobGltZSBtZW1tYXA9IG9wdGlvbiBpbiBvdGhlciBhcmNocykKKysgKi8KKytzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBjcmFzaF9tZW1vcnlfcmFuZ2VzW0NSQVNIX01BWF9NRU1PUllfUkFOR0VTXTsKKytzdHJ1Y3QgbWVtb3J5X3JhbmdlcyB1c2FibGVtZW1fcmducyA9IHsKKysgICAgLnNpemUgPSAwLAorKyAgICAucmFuZ2VzID0gY3Jhc2hfbWVtb3J5X3JhbmdlcywKKyt9OworKworKy8qIG1lbW9yeSByYW5nZSByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwgKi8KKytzdGF0aWMgc3RydWN0IG1lbW9yeV9yYW5nZSBjcmFzaF9yZXNlcnZlZF9tZW07CisrCisrc3RhdGljIHN0cnVjdCBjcmFzaF9lbGZfaW5mbyBlbGZfaW5mbyA9IHsKKysJLmNsYXNzCQk9IEVMRkNMQVNTMzIsCisrCS5kYXRhCQk9IEVMRkRBVEEyTFNCLAorKwkubWFjaGluZQk9IEVNX0FSTSwKKysJLnBhZ2Vfb2Zmc2V0CT0gUEFHRV9PRkZTRVQsCisrfTsKKysKKyt1bnNpZ25lZCBsb25nIHBoeXNfb2Zmc2V0OworKworKy8qKgorKyAqIGNyYXNoX3JhbmdlX2NhbGxiYWNrKCkgLSBjYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggaW9tZW0gcmVnaW9uCisrICogQGRhdGE6IG5vdCB1c2VkCisrICogQG5yOiBub3QgdXNlZAorKyAqIEBzdHI6IG5hbWUgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKiBAYmFzZTogc3RhcnQgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IHJlZ2lvbgorKyAqIEBsZW5ndGg6IHNpemUgb2YgdGhlIG1lbW9yeSByZWdpb24KKysgKgorKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggbWVtb3J5IHJlZ2lvbiBmb3VuZCBpbiAvcHJvYy9pb21lbS4gSXQKKysgKiBsb2NhdGVzIHN5c3RlbSBSQU0gYW5kIGNyYXNoa2VybmVsIHJlc2VydmVkIG1lbW9yeSBhbmQgcGxhY2VzIHRoZXNlIHRvCisrICogdmFyaWFibGVzOiBAY3Jhc2hfbWVtb3J5X3JhbmdlcyBhbmQgQGNyYXNoX3Jlc2VydmVkX21lbS4gTnVtYmVyIG9mIG1lbW9yeQorKyAqIHJlZ2lvbnMgaXMgcGxhY2VkIGluIEBjcmFzaF9tZW1vcnlfbnJfcmFuZ2VzLgorKyAqLworK3N0YXRpYyBpbnQgY3Jhc2hfcmFuZ2VfY2FsbGJhY2sodm9pZCAqVU5VU0VEKGRhdGEpLCBpbnQgVU5VU0VEKG5yKSwKKysJCQkJY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIGJhc2UsCisrCQkJCXVuc2lnbmVkIGxvbmcgbGVuZ3RoKQorK3sKKysJc3RydWN0IG1lbW9yeV9yYW5nZSAqcmFuZ2U7CisrCisrCWlmICh1c2FibGVtZW1fcmducy5zaXplID49IENSQVNIX01BWF9NRU1PUllfUkFOR0VTKQorKwkJcmV0dXJuIDE7CisrCisrCXJhbmdlID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgdXNhYmxlbWVtX3JnbnMuc2l6ZTsKKysKKysJaWYgKHN0cm5jbXAoc3RyLCAiU3lzdGVtIFJBTVxuIiwgMTEpID09IDApIHsKKysJCXJhbmdlLT5zdGFydCA9IGJhc2U7CisrCQlyYW5nZS0+ZW5kID0gYmFzZSArIGxlbmd0aCAtIDE7CisrCQlyYW5nZS0+dHlwZSA9IFJBTkdFX1JBTTsKKysJCXVzYWJsZW1lbV9yZ25zLnNpemUrKzsKKysJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgIkNyYXNoIGtlcm5lbFxuIiwgMTMpID09IDApIHsKKysJCWNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCA9IGJhc2U7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0uZW5kID0gYmFzZSArIGxlbmd0aCAtIDE7CisrCQljcmFzaF9yZXNlcnZlZF9tZW0udHlwZSA9IFJBTkdFX1JBTTsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY3Jhc2hfZXhjbHVkZV9yYW5nZSgpIC0gZXhjbHVkZXMgbWVtb3J5IHJlZ2lvbiByZXNlcnZlZCBmb3IgY3Jhc2hrZXJuZWwKKysgKgorKyAqIEZ1bmN0aW9uIGxvY2F0ZXMgd2hlcmUgY3Jhc2hrZXJuZWwgcmVzZXJ2ZWQgbWVtb3J5IGlzIGFuZCByZW1vdmVzIHRoYXQgcmVnaW9uCisrICogZnJvbSB0aGUgYXZhaWxhYmxlIG1lbW9yeSByZWdpb25zLgorKyAqLworK3N0YXRpYyB2b2lkIGNyYXNoX2V4Y2x1ZGVfcmFuZ2Uodm9pZCkKKyt7CisrCWNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnJhbmdlID0gJmNyYXNoX3Jlc2VydmVkX21lbTsKKysJaW50IGk7CisrCisrCWZvciAoaSA9IDA7IGkgPCB1c2FibGVtZW1fcmducy5zaXplOyBpKyspIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIgPSB1c2FibGVtZW1fcmducy5yYW5nZXMgKyBpOworKworKwkJLyoKKysJCSAqIFdlIGFzc3VtZSB0aGF0IGNyYXNoIGFyZWEgaXMgZnVsbHkgY29udGFpbmVkIGluCisrCQkgKiBzb21lIGxhcmdlciBtZW1vcnkgYXJlYS4KKysJCSAqLworKwkJaWYgKHItPnN0YXJ0IDw9IHJhbmdlLT5zdGFydCAmJiByLT5lbmQgPj0gcmFuZ2UtPmVuZCkgeworKwkJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgKm5ldzsKKysJCQkvKgorKwkJCSAqIExldCdzIHNwbGl0IHRoaXMgYXJlYSBpbnRvIDIgc21hbGxlciBvbmVzIGFuZAorKwkJCSAqIHJlbW92ZSBleGNsdWRlZCByYW5nZSBmcm9tIGJldHdlZW4uIEZpcnN0IGNyZWF0ZQorKwkJCSAqIG5ldyBlbnRyeSBmb3IgdGhlIHJlbWFpbmluZyBhcmVhLgorKwkJCSAqLworKwkJCW5ldyA9IHVzYWJsZW1lbV9yZ25zLnJhbmdlcyArIHVzYWJsZW1lbV9yZ25zLnNpemU7CisrCQkJbmV3LT5zdGFydCA9IHJhbmdlLT5lbmQgKyAxOworKwkJCW5ldy0+ZW5kID0gci0+ZW5kOworKwkJCXVzYWJsZW1lbV9yZ25zLnNpemUrKzsKKysJCQkvKgorKwkJCSAqIE5leHQgdXBkYXRlIHRoaXMgYXJlYSB0byBlbmQgYmVmb3JlIGV4Y2x1ZGVkIHJhbmdlLgorKwkJCSAqLworKwkJCXItPmVuZCA9IHJhbmdlLT5zdGFydCAtIDE7CisrCQkJYnJlYWs7CisrCQl9CisrCX0KKyt9CisrCisrc3RhdGljIGludCByYW5nZV9jbXAoY29uc3Qgdm9pZCAqYTEsIGNvbnN0IHZvaWQgKmEyKQorK3sKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcjEgPSBhMTsKKysJY29uc3Qgc3RydWN0IG1lbW9yeV9yYW5nZSAqcjIgPSBhMjsKKysKKysJaWYgKHIxLT5zdGFydCA+IHIyLT5zdGFydCkKKysJCXJldHVybiAxOworKwlpZiAocjEtPnN0YXJ0IDwgcjItPnN0YXJ0KQorKwkJcmV0dXJuIC0xOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrLyoqCisrICogY3Jhc2hfZ2V0X21lbW9yeV9yYW5nZXMoKSAtIHJlYWQgc3lzdGVtIHBoeXNpY2FsIG1lbW9yeQorKyAqCisrICogRnVuY3Rpb24gcmVhZHMgdGhyb3VnaCBzeXN0ZW0gcGh5c2ljYWwgbWVtb3J5IGFuZCBzdG9yZXMgZm91bmQgbWVtb3J5IHJlZ2lvbnMKKysgKiBpbiBAY3Jhc2hfbWVtb3J5X3Jhbmdlcy4gTnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIGZvdW5kIGlzIHBsYWNlZCBpbgorKyAqIEBjcmFzaF9tZW1vcnlfbnJfcmFuZ2VzLiBSZWdpb25zIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyLgorKyAqCisrICogUmV0dXJucyAlMCBpbiBjYXNlIG9mIHN1Y2Nlc3MgYW5kICUtMSBvdGhlcndpc2UgKGVycm5vIGlzIHNldCkuCisrICovCisrc3RhdGljIGludCBjcmFzaF9nZXRfbWVtb3J5X3Jhbmdlcyh2b2lkKQorK3sKKysJLyoKKysJICogRmlyc3QgcmVhZCBhbGwgbWVtb3J5IHJlZ2lvbnMgdGhhdCBjYW4gYmUgY29uc2lkZXJlZCBhcworKwkgKiBzeXN0ZW0gbWVtb3J5IGluY2x1ZGluZyB0aGUgY3Jhc2ggYXJlYS4KKysJICovCisrCWtleGVjX2lvbWVtX2Zvcl9lYWNoX2xpbmUoTlVMTCwgY3Jhc2hfcmFuZ2VfY2FsbGJhY2ssIE5VTEwpOworKworKwlpZiAodXNhYmxlbWVtX3JnbnMuc2l6ZSA8IDEpIHsKKysJCWVycm5vID0gRUlOVkFMOworKwkJcmV0dXJuIC0xOworKwl9CisrCisrCS8qCisrCSAqIEV4Y2x1ZGUgbWVtb3J5IHJlc2VydmVkIGZvciBjcmFzaGtlcm5lbCAodGhpcyBtYXkgcmVzdWx0IGEgc3BsaXQgbWVtb3J5CisrCSAqIHJlZ2lvbikuCisrCSAqLworKwljcmFzaF9leGNsdWRlX3JhbmdlKCk7CisrCisrCS8qCisrCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBtZW1vcnkgcmVnaW9ucyBhcmUgc29ydGVkLgorKwkgKi8KKysJcXNvcnQodXNhYmxlbWVtX3JnbnMucmFuZ2VzLCB1c2FibGVtZW1fcmducy5zaXplLAorKwkgICAgICBzaXplb2YoKnVzYWJsZW1lbV9yZ25zLnJhbmdlcyksIHJhbmdlX2NtcCk7CisrCisrCXJldHVybiAwOworK30KKysKKysvKioKKysgKiBjbWRsaW5lX2FkZF9lbGZjb3JlaGRyKCkgLSBhZGRzIGVsZmNvcmVoZHI9IHRvIEBjbWRsaW5lCisrICogQGNtZGxpbmU6IGJ1ZmZlciB3aGVyZSBwYXJhbWV0ZXIgaXMgcGxhY2VkCisrICogQGVsZmNvcmVoZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWxmY29yZWhkcgorKyAqCisrICogRnVuY3Rpb24gYXBwZW5kcyAnZWxmY29yZWhkcj1zdGFydCcgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGluCisrICogQGNtZGxpbmUuIE5vdGUgdGhhdCBAY21kbGluZSBtdXN0IGJlIGF0IGxlYXN0ICVDT01NQU5EX0xJTkVfU0laRSBieXRlcyBsb25nCisrICogKGluY2x1bmRpbmcgJU5VTCkuCisrICovCisrc3RhdGljIHZvaWQgY21kbGluZV9hZGRfZWxmY29yZWhkcihjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIGVsZmNvcmVoZHIpCisreworKwljaGFyIGJ1ZltDT01NQU5EX0xJTkVfU0laRV07CisrCWludCBidWZsZW47CisrCisrCWJ1ZmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyBlbGZjb3JlaGRyPSUjbHgiLAorKwkJCSAgY21kbGluZSwgZWxmY29yZWhkcik7CisrCWlmIChidWZsZW4gPCAwKQorKwkJZGllKCJGYWlsZWQgdG8gY29uc3RydWN0IGVsZmNvcmVoZHI9IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJcbiIpOworKwlpZiAoYnVmbGVuID49IHNpemVvZihidWYpKQorKwkJZGllKCJDb21tYW5kIGxpbmUgb3ZlcmZsb3dcbiIpOworKworKwkodm9pZCkgc3RybmNweShjbWRsaW5lLCBidWYsIENPTU1BTkRfTElORV9TSVpFKTsKKysJY21kbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKKyt9CisrCisrLyoqCisrICogY21kbGluZV9hZGRfbWVtKCkgLSBhZGRzIG1lbT0gcGFyYW1ldGVyIHRvIGtlcm5lbCBjb21tYW5kIGxpbmUKKysgKiBAY21kbGluZTogYnVmZmVyIHdoZXJlIHBhcmFtZXRlciBpcyBwbGFjZWQKKysgKiBAc2l6ZTogc2l6ZSBvZiB0aGUga2VybmVsIHJlc2VydmVkIG1lbW9yeSAoaW4gYnl0ZXMpCisrICoKKysgKiBUaGlzIGZ1bmN0aW9uIGFwcGVuZHMgJ21lbT1zaXplJyBhdCB0aGUgZW5kIG9mIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4gaW4KKysgKiBAY21kbGluZS4gTm90ZSB0aGF0IEBjbWRsaW5lIG11c3QgYmUgYXQgbGVhc3QgJUNPTU1BTkRfTElORV9TSVpFIGJ5dGVzIGxvbmcKKysgKiAoaW5jbHVkaW5nICVOVUwpLgorKyAqLworK3N0YXRpYyB2b2lkIGNtZGxpbmVfYWRkX21lbShjaGFyICpjbWRsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUpCisreworKwljaGFyIGJ1ZltDT01NQU5EX0xJTkVfU0laRV07CisrCWludCBidWZsZW47CisrCisrCWJ1ZmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyBtZW09JWxkSyIsIGNtZGxpbmUsIHNpemUgPj4gMTApOworKwlpZiAoYnVmbGVuIDwgMCkKKysJCWRpZSgiRmFpbGVkIHRvIGNvbnN0cnVjdCBtZW09IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJcbiIpOworKwlpZiAoYnVmbGVuID49IHNpemVvZihidWYpKQorKwkJZGllKCJDb21tYW5kIGxpbmUgb3ZlcmZsb3dcbiIpOworKworKwkodm9pZCkgc3RybmNweShjbWRsaW5lLCBidWYsIENPTU1BTkRfTElORV9TSVpFKTsKKysJY21kbGluZVtDT01NQU5EX0xJTkVfU0laRSAtIDFdID0gJ1wwJzsKKyt9CisrCisrc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByYW5nZV9zaXplKGNvbnN0IHN0cnVjdCBtZW1vcnlfcmFuZ2UgKnIpCisreworKwlyZXR1cm4gci0+ZW5kIC0gci0+c3RhcnQgKyAxOworK30KKysKKytzdGF0aWMgdm9pZCBkdW1wX21lbW9yeV9yYW5nZXModm9pZCkKKyt7CisrCWludCBpOworKworKwlpZiAoIWtleGVjX2RlYnVnKQorKwkJcmV0dXJuOworKworKwlkYmdwcmludGYoImNyYXNoa2VybmVsOiBbJSNsbHggLSAlI2xseF0gKCVsZE0pXG4iLAorKwkJICBjcmFzaF9yZXNlcnZlZF9tZW0uc3RhcnQsIGNyYXNoX3Jlc2VydmVkX21lbS5lbmQsCisrCQkgICh1bnNpZ25lZCBsb25nKXJhbmdlX3NpemUoJmNyYXNoX3Jlc2VydmVkX21lbSkgPj4gMjApOworKworKwlmb3IgKGkgPSAwOyBpIDwgdXNhYmxlbWVtX3JnbnMuc2l6ZTsgaSsrKSB7CisrCQlzdHJ1Y3QgbWVtb3J5X3JhbmdlICpyID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzICsgaTsKKysJCWRiZ3ByaW50ZigibWVtb3J5IHJhbmdlOiBbJSNsbHggLSAlI2xseF0gKCVsZE0pXG4iLAorKwkJCSAgci0+c3RhcnQsIHItPmVuZCwgKHVuc2lnbmVkIGxvbmcpcmFuZ2Vfc2l6ZShyKSA+PiAyMCk7CisrCX0KKyt9CisrCisrLyoqCisrICogbG9hZF9jcmFzaGR1bXBfc2VnbWVudHMoKSAtIGxvYWRzIGFkZGl0aW9uYWwgc2VnbWVudHMgbmVlZGVkIGZvciBrZHVtcAorKyAqIEBpbmZvOiBrZXhlYyBpbmZvIHN0cnVjdHVyZQorKyAqIEBtb2RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZQorKyAqCisrICogVGhpcyBmdW5jdGlvbiBsb2FkcyBhZGRpdGlvbmFsIHNlZ21lbnRzIHdoaWNoIGFyZSBuZWVkZWQgZm9yIHRoZSBkdW1wIGNhcHR1cmUKKysgKiBrZXJuZWwuIEl0IGFsc28gdXBkYXRlcyBrZXJuZWwgY29tbWFuZCBsaW5lIHBhc3NlZCBpbiBAbW9kX2NtZGxpbmUgdG8gaGF2ZQorKyAqIHJpZ2h0IHBhcmFtZXRlcnMgZm9yIHRoZSBkdW1wIGNhcHR1cmUga2VybmVsLgorKyAqCisrICogUmV0dXJuICUwIGluIGNhc2Ugb2Ygc3VjY2VzcyBhbmQgJS0xIGluIGNhc2Ugb2YgZXJyb3IuCisrICovCisraW50IGxvYWRfY3Jhc2hkdW1wX3NlZ21lbnRzKHN0cnVjdCBrZXhlY19pbmZvICppbmZvLCBjaGFyICptb2RfY21kbGluZSkKKyt7CisrCXVuc2lnbmVkIGxvbmcgZWxmY29yZWhkcjsKKysJdW5zaWduZWQgbG9uZyBidWZzejsKKysJdm9pZCAqYnVmOworKwlpbnQgZXJyOworKworKwkvKgorKwkgKiBGaXJzdCBmZXRjaCBhbGwgdGhlIG1lbW9yeSAoUkFNKSByYW5nZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gcGFzcyB0bworKwkgKiB0aGUgY3Jhc2hkdW1wIGtlcm5lbCBkdXJpbmcgcGFuaWMuCisrCSAqLworKwllcnIgPSBjcmFzaF9nZXRfbWVtb3J5X3JhbmdlcygpOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJLyoKKysJICogTm93IHRoYXQgd2UgaGF2ZSBtZW1vcnkgcmVnaW9ucyBzb3J0ZWQsIHdlIGNhbiB1c2UgZmlyc3QgbWVtb3J5CisrCSAqIHJlZ2lvbiBhcyBQSFlTX09GRlNFVC4KKysJICovCisrCXBoeXNfb2Zmc2V0ID0gdXNhYmxlbWVtX3JnbnMucmFuZ2VzLT5zdGFydDsKKysJZGJncHJpbnRmKCJwaHlzX29mZnNldDogJSNseFxuIiwgcGh5c19vZmZzZXQpOworKworKwllcnIgPSBjcmFzaF9jcmVhdGVfZWxmMzJfaGVhZGVycyhpbmZvLCAmZWxmX2luZm8sCisrCQkJCQkgdXNhYmxlbWVtX3JnbnMucmFuZ2VzLAorKwkJCQkJIHVzYWJsZW1lbV9yZ25zLnNpemUsICZidWYsICZidWZzeiwKKysJCQkJCSBFTEZfQ09SRV9IRUFERVJfQUxJR04pOworKwlpZiAoZXJyKQorKwkJcmV0dXJuIGVycjsKKysKKysJLyoKKysJICogV2UgYWxsb2NhdGUgRUxGIGNvcmUgaGVhZGVyIGZyb20gdGhlIGVuZCBvZiB0aGUgbWVtb3J5IGFyZWEgcmVzZXJ2ZWQKKysJICogZm9yIHRoZSBjcmFzaGtlcm5lbC4gV2UgYWxpZ24gdGhlIGhlYWRlciB0byBTRUNUSU9OX1NJWkUgKHdoaWNoIGlzCisrCSAqIDFNQikgc28gdGhhdCBhdmFpbGFibGUgbWVtb3J5IHBhc3NlZCBpbiBrZXJuZWwgY29tbWFuZCBsaW5lIHdpbGwgYmUKKysJICogYWxpZ25lZCB0byAxTUIuIFRoaXMgaXMgYmVjYXVzZSBrZXJuZWwgY3JlYXRlX21hcHBpbmcoKSB3YW50cyBtZW1vcnkKKysJICogcmVnaW9ucyB0byBiZSBhbGlnbmVkIHRvIFNFQ1RJT05fU0laRS4KKysJICovCisrCWVsZmNvcmVoZHIgPSBhZGRfYnVmZmVyX3BoeXNfdmlydChpbmZvLCBidWYsIGJ1ZnN6LCBidWZzeiwgMSA8PCAyMCwKKysJCQkJCSAgY3Jhc2hfcmVzZXJ2ZWRfbWVtLnN0YXJ0LAorKwkJCQkJICBjcmFzaF9yZXNlcnZlZF9tZW0uZW5kLCAtMSwgMCk7CisrCisrCWRiZ3ByaW50ZigiZWxmY29yZWhkcjogJSNseFxuIiwgZWxmY29yZWhkcik7CisrCWNtZGxpbmVfYWRkX2VsZmNvcmVoZHIobW9kX2NtZGxpbmUsIGVsZmNvcmVoZHIpOworKworKwkvKgorKwkgKiBBZGQgJ21lbT1zaXplJyBwYXJhbWV0ZXIgdG8gZHVtcCBjYXB0dXJlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoaXMKKysJICogcHJldmVudHMgdGhlIGR1bXAgY2FwdHVyZSBrZXJuZWwgZnJvbSB1c2luZyBhbnkgb3RoZXIgbWVtb3J5IHJlZ2lvbnMKKysJICogd2hpY2ggYmVsb25nIHRvIHRoZSBwcmltYXJ5IGtlcm5lbC4KKysJICovCisrCWNtZGxpbmVfYWRkX21lbShtb2RfY21kbGluZSwgZWxmY29yZWhkciAtIGNyYXNoX3Jlc2VydmVkX21lbS5zdGFydCk7CisrCisrCWR1bXBfbWVtb3J5X3JhbmdlcygpOworKwlkYmdwcmludGYoImtlcm5lbCBjb21tYW5kIGxpbmU6IFwiJXNcIlxuIiwgbW9kX2NtZGxpbmUpOworKworKwlyZXR1cm4gMDsKKyt9CisrCisrI2VuZGlmCisrCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQvaW5jbHVkZS9hcmNoL29wdGlvbnMuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2luY2x1ZGUvYXJjaC9vcHRpb25zLmgKK0BAIC0wLDAgKzEsMjYgQEAKKysjaWZuZGVmIEtFWEVDX0FSQ0hfQVJNNjRfT1BUSU9OU19ICisrI2RlZmluZSBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSAorKworKy8vI2RlZmluZSBPUFRfQVJDSF9NQVgJKChPUFRfTUFYKSswKQorKworKyNkZWZpbmUgT1BUX0FQUEVORAkoKE9QVF9NQVgpKzApCisrI2RlZmluZSBPUFRfUkFNRElTSwkoKE9QVF9NQVgpKzEpCisrI2RlZmluZSBPUFRfRFRCCQkoKE9QVF9NQVgpKzIpCisrCisrI2RlZmluZSBPUFRfQVJDSF9NQVgJKChPUFRfTUFYKSszKQorKworKworKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRJT05TIFwKKysJS0VYRUNfT1BUSU9OUyBcCisrCXsgImFwcGVuZCIsICAgICAgIDEsIE5VTEwsIE9QVF9BUFBFTkQgfSwgXAorKwl7ICJjb21tYW5kLWxpbmUiLCAxLCBOVUxMLCBPUFRfQVBQRU5EIH0sIFwKKysJeyAiZHRiIiwgICAgICAgICAgMSwgTlVMTCwgT1BUX0RUQiB9LCBcCisrCXsgImluaXRyZCIsICAgICAgIDEsIE5VTEwsIE9QVF9SQU1ESVNLIH0sIFwKKysJeyAicmFtZGlzayIsICAgICAgMSwgTlVMTCwgT1BUX1JBTURJU0sgfSwgXAorKworKyNkZWZpbmUgS0VYRUNfQVJDSF9PUFRfU1RSIEtFWEVDX09QVF9TVFIgLyogT25seSBhY2NlcHQgbG9uZyBhcmNoIG9wdGlvbnMuICovCisrCisrI2RlZmluZSBLRVhFQ19BTExfT1BUSU9OUyBLRVhFQ19BUkNIX09QVElPTlMKKysjZGVmaW5lIEtFWEVDX0FMTF9PUFRfU1RSIEtFWEVDX0FSQ0hfT1BUX1NUUgorKworKyNlbmRpZiAvKiBLRVhFQ19BUkNIX0FSTTY0X09QVElPTlNfSCAqLworSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC9hcm02NC9rZXhlYy1hcm02NC5jCitAQCAtMCwwICsxLDE3NyBAQAorKy8qCisrICogQVJNNjQga2V4ZWMgc3VwcG9ydC4KKysgKi8KKysKKysjZGVmaW5lIF9HTlVfU09VUkNFCisrCisrI2luY2x1ZGUgPGVycm5vLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKworKy8vI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisrCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLmgiCisrI2luY2x1ZGUgIi4uLy4uL2tleGVjLXN5c2NhbGwuaCIKKysjaW5jbHVkZSAia2V4ZWMtYXJtNjQuaCIKKysKKysKKyt2b2lkIGFyY2hfdXNhZ2Uodm9pZCkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworKwlwcmludGYoCisrIiAgICAgLS1hcHBlbmQ9U1RSSU5HICAgICAgIFNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBTVFJJTkcuXG4iCisrIiAgICAgLS1jb21tYW5kLWxpbmU9U1RSSU5HIFNldCB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBTVFJJTkcuXG4iCisrIiAgICAgLS1kdGI9RklMRSAgICAgICAgICAgIFVzZSBGSUxFIGFzIHRoZSBkZXZpY2UgdHJlZSBibG9iLlxuIgorKyIgICAgIC0taW5pdHJkPUZJTEUgICAgICAgICBVc2UgRklMRSBhcyB0aGUga2VybmVsIGluaXRpYWwgcmFtZGlzay5cbiIKKysiICAgICAtLXJhbWRpc2s9RklMRSAgICAgICAgVXNlIEZJTEUgYXMgdGhlIGtlcm5lbCBpbml0aWFsIHJhbWRpc2suXG4iKTsKKysKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogPC1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrfQorKworK2ludCBhcmNoX3Byb2Nlc3Nfb3B0aW9ucyhpbnQgVU5VU0VEKGFyZ2MpLCBjaGFyICoqVU5VU0VEKGFyZ3YpKQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogZG9cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCXJldHVybiAwOworK30KKysKKytjb25zdCBzdHJ1Y3QgYXJjaF9tYXBfZW50cnkgYXJjaGVzW10gPSB7CisrCXsgImFhcmNoNjQiLCBLRVhFQ19BUkNIX0FSTTY0IH0sCisrCXsgTlVMTCwgMCB9LAorK307CisrCisrdm9pZCBhcmNoX3VwZGF0ZV9wdXJnYXRvcnkoc3RydWN0IGtleGVjX2luZm8gKlVOVVNFRChpbmZvKSkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKyt1bnNpZ25lZCBsb25nIHZpcnRfdG9fcGh5cyh1bnNpZ25lZCBsb25nIGFkZHIpCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlMDE2bHggLT4gJTAxNmx4XG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGFkZHIsCisrCQlhZGRyICsgMHgwODAwMDAwMDBVTCk7CisrCXJldHVybiBhZGRyICsgMHgwODAwMDAwMDBVTDsKKyt9CisrCisrdm9pZCBhZGRfc2VnbWVudChzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbywgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmc3osCisrCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZV90IG1lbXN6KQorK3sKKysJZnByaW50ZihzdGRlcnIsICIlczolZDogLT5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisrCWFkZF9zZWdtZW50X3BoeXNfdmlydChpbmZvLCBidWYsIGJ1ZnN6LCBiYXNlLCBtZW1zeiwgMSk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworK30KKysKKytzdGF0aWMgaW50IGdldF9tZW1vcnlfcmFuZ2VzXzEoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCQl1bnNpZ25lZCBsb25nIGtleGVjX2ZsYWdzKQorK3sKKysJc3RhdGljIHN0cnVjdCBtZW1vcnlfcmFuZ2UgbWVtb3J5X3JhbmdlW0tFWEVDX1NFR01FTlRfTUFYXTsKKysJY29uc3QgY2hhciAqaW9tZW07CisrCWludCByYW5nZV9jb3VudCA9IDA7CisrCWNoYXIgbGluZVtNQVhfTElORV07CisrCUZJTEUgKmZwOworKworKwlpb21lbSA9IHByb2NfaW9tZW0oKTsKKysJZnAgPSBmb3Blbihpb21lbSwgInIiKTsKKysKKysJaWYgKCFmcCkgeworKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb3BlbiAlczogJXNcbiIsCisrCQkJaW9tZW0sIHN0cmVycm9yKGVycm5vKSk7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJZGJncHJpbnRmKCJtZW1vcnkgcmFuZ2VzOlxuIik7CisrCisrCXdoaWxlKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApICE9IDApIHsKKysJCXN0cnVjdCBtZW1vcnlfcmFuZ2UgcjsKKysJCWNoYXIgKnN0cjsKKysJCWludCBjb25zdW1lZDsKKysKKysJCWlmIChyYW5nZV9jb3VudCA+PSBLRVhFQ19TRUdNRU5UX01BWCkKKysJCQlicmVhazsKKysKKysJCWlmIChzc2NhbmYobGluZSwgIiVMeC0lTHggOiAlbiIsICZyLnN0YXJ0LCAmci5lbmQsICZjb25zdW1lZCkKKysJCQkhPSAyKQorKwkJCWNvbnRpbnVlOworKworKwkJc3RyID0gbGluZSArIGNvbnN1bWVkOworKwkJci5lbmQrKzsKKysKKysJCWlmIChtZW1jbXAoc3RyLCAiU3lzdGVtIFJBTVxuIiwgMTEpKSB7CisrCQkJZGJncHJpbnRmKCIgU2tpcDogJTAxNkx4IC0gJTAxNkx4IDogJXMiLCByLnN0YXJ0LCByLmVuZCwKKysJCQkJc3RyKTsKKysJCQljb250aW51ZTsKKysJCX0KKysKKysJCXIudHlwZSA9IFJBTkdFX1JBTTsKKysJCW1lbW9yeV9yYW5nZVtyYW5nZV9jb3VudF0gPSByOworKwkJcmFuZ2VfY291bnQrKzsKKysKKysJCWRiZ3ByaW50ZigiIEFkZDogICUwMTZMeCAtICUwMTZMeCA6ICVzIiwgci5zdGFydCwgci5lbmQsIHN0cik7CisrCX0KKysKKysJZmNsb3NlKGZwKTsKKysJKnJhbmdlID0gbWVtb3J5X3JhbmdlOworKwkqcmFuZ2VzID0gcmFuZ2VfY291bnQ7CisrCisrCXJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGdldF9tZW1vcnlfcmFuZ2VzXzIoc3RydWN0IG1lbW9yeV9yYW5nZSAqKnJhbmdlLCBpbnQgKnJhbmdlcywKKysJCSAgICAgIHVuc2lnbmVkIGxvbmcgVU5VU0VEKGtleGVjX2ZsYWdzKSkKKyt7CisrCXN0YXRpYyBzdHJ1Y3QgbWVtb3J5X3JhbmdlIG1lbW9yeV9yYW5nZVsyXTsKKysKKysJbWVtb3J5X3JhbmdlWzBdLnN0YXJ0ID0gMHgwODAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVswXS5lbmQgICA9IDB4MTAwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMF0udHlwZSA9IFJBTkdFX1JBTTsKKysKKysJbWVtb3J5X3JhbmdlWzFdLnN0YXJ0ID0gMHg5MDAwMDAwMDA7CisrCW1lbW9yeV9yYW5nZVsxXS5lbmQgICA9IDB4ODgwMDAwMDAwOworKwltZW1vcnlfcmFuZ2VbMV0udHlwZSA9IFJBTkdFX1JBTTsKKysKKysJKnJhbmdlID0gbWVtb3J5X3JhbmdlOworKwkqcmFuZ2VzID0gc2l6ZW9mKG1lbW9yeV9yYW5nZSkgLyBzaXplb2YobWVtb3J5X3JhbmdlWzBdKTsKKysKKysJcmV0dXJuIDA7CisrfQorKworK2ludCBnZXRfbWVtb3J5X3JhbmdlcyhzdHJ1Y3QgbWVtb3J5X3JhbmdlICoqcmFuZ2UsIGludCAqcmFuZ2VzLAorKwkJCXVuc2lnbmVkIGxvbmcga2V4ZWNfZmxhZ3MpCisreworKwkvKiBGSVhNRTogU2hvdWxkIGdldCB0aGlzIGluZm8gZnJvbSBkZXZpY2UgdHJlZS4gKi8KKysJCisrCXJldHVybiBnZXRfbWVtb3J5X3Jhbmdlc18xKHJhbmdlLCByYW5nZXMsIGtleGVjX2ZsYWdzKTsKKyt9CisrCisrc3RydWN0IGZpbGVfdHlwZSBmaWxlX3R5cGVbXSA9IHsKKysJeyAiZWxmLWFybTY0IiwgZWxmX2FybTY0X3Byb2JlLCBlbGZfYXJtNjRfbG9hZCwgZWxmX2FybTY0X3VzYWdlIH0sCisrfTsKKysKKytpbnQgZmlsZV90eXBlcyA9IHNpemVvZihmaWxlX3R5cGUpIC8gc2l6ZW9mKGZpbGVfdHlwZVswXSk7CisrCisraW50IGFyY2hfY29tcGF0X3RyYW1wb2xpbmUoc3RydWN0IGtleGVjX2luZm8gKmluZm8pCisreworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgYXJjaF9yZXVzZV9pbml0cmQodm9pZCkKKyt7CisrfQorKworK2ludCBtYWNoaW5lX3ZlcmlmeV9lbGZfcmVsKHN0cnVjdCBtZW1fZWhkciAqZWhkcikKKyt7CisrCSh2b2lkKWVoZHI7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGRvXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBtYWNoaW5lX2FwcGx5X2VsZl9yZWwoc3RydWN0IG1lbV9laGRyICplaGRyLCB1bnNpZ25lZCBsb25nIHJfdHlwZSwKKysJdm9pZCAqbG9jYXRpb24sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyB2YWx1ZSkKKyt7CisrCSh2b2lkKWVoZHI7CisrCSh2b2lkKXJfdHlwZTsKKysJKHZvaWQpbG9jYXRpb247CisrCSh2b2lkKWFkZHJlc3M7CisrCSh2b2lkKXZhbHVlOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtYXJtNjQuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWFybTY0LmgKK0BAIC0wLDAgKzEsMjAgQEAKKysvKgorKyAqIEFSTTY0IGtleGVjIHN1cHBvcnQuCisrICovCisrCisrI2lmICFkZWZpbmVkKEtFWEVDX0FSTTY0X0gpCisrI2RlZmluZSBLRVhFQ19BUk02NF9ICisrCisrLyogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+IEZJWE1FOiB0aGlzIGlzIGJyb2tlbiAqLworKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKysjaW5jbHVkZSAiLi4vLi4va2V4ZWMuaCIKKysKKysjZGVmaW5lIEtFWEVDX1NFR01FTlRfTUFYIDE2IC8qIEZJWE1FOiB0aGlzIHNob3VsZCBjb21lIGZyb20gPGxpbnV4L2tleGVjLmg+ICovCisrCisraW50IGVsZl9hcm02NF9wcm9iZShjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbik7CisraW50IGVsZl9hcm02NF9sb2FkKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqYnVmLCBvZmZfdCBsZW4sCisrCXN0cnVjdCBrZXhlY19pbmZvICppbmZvKTsKKyt2b2lkIGVsZl9hcm02NF91c2FnZSh2b2lkKTsKKysKKysjZW5kaWYKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9hcmNoL2FybTY0L2tleGVjLWVsZi1hcm02NC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvYXJtNjQva2V4ZWMtZWxmLWFybTY0LmMKK0BAIC0wLDAgKzEsMTE0IEBACisrLyoKKysgKiBBUk02NCBrZXhlYyBzdXBwb3J0LgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8ZWxmLmg+CisrI2luY2x1ZGUgPGdldG9wdC5oPgorKworKyNpbmNsdWRlICIuLi8uLi9rZXhlYy1zeXNjYWxsLmgiCisrCisrI2luY2x1ZGUgImtleGVjLWFybTY0LmgiCisrI2luY2x1ZGUgImFyY2gvb3B0aW9ucy5oIgorKworKyNpZiAhZGVmaW5lZChFTV9BQVJDSDY0KQorKyMgZGVmaW5lIEVNX0FBUkNINjQgMTgzCisrI2VuZGlmCisrCisraW50IGVsZl9hcm02NF9wcm9iZShjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbikKKyt7CisrCWludCByZXN1bHQ7CisrCXN0cnVjdCBtZW1fZWhkciBlaGRyOworKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAtPlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysJCisrCXJlc3VsdCA9IGJ1aWxkX2VsZl9leGVjX2luZm8oYnVmLCBsZW4sICZlaGRyLCAwKTsKKysKKysJaWYgKHJlc3VsdCA8IDApIHsKKysJCWRiZ3ByaW50ZigiTm90IGFuIEVMRiBleGVjdXRhYmxlXG4iKTsKKysJCWdvdG8gb3V0OworKwl9CisrCisrCWlmIChlaGRyLmVfbWFjaGluZSAhPSBFTV9BQVJDSDY0KSB7CisrCQlkYmdwcmludGYoIk5vdCBhbiBBQVJDSDY0IGV4ZWN1dGFibGVcbiIpOworKwkJcmVzdWx0ID0gLTE7CisrCQlnb3RvIG91dDsKKysJfQorKworKwlyZXN1bHQgPSAwOworKworK291dDoKKysJZnJlZV9lbGZfaW5mbygmZWhkcik7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKytpbnQgZWxmX2FybTY0X2xvYWQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpidWYsIG9mZl90IGxlbiwKKysJCQlzdHJ1Y3Qga2V4ZWNfaW5mbyAqaW5mbykKKyt7CisrCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKysJCUtFWEVDX0FSQ0hfT1BUSU9OUworKwkJeyAwIH0KKysJfTsKKysJc3RhdGljIGNvbnN0IGNoYXIgc2hvcnRfb3B0aW9uc1tdID0gS0VYRUNfT1BUX1NUUiAiIjsKKysJY29uc3QgY2hhciAqY29tbWFuZF9saW5lID0gTlVMTDsKKysJdW5zaWduZWQgaW50IGNvbW1hbmRfbGluZV9sZW4gPSAwOworKwljb25zdCBjaGFyICpyYW1kaXNrID0gTlVMTDsKKysJY29uc3QgY2hhciAqZHRiID0gTlVMTDsKKysJaW50IG9wdDsKKysJc3RydWN0IG1lbV9laGRyIGVoZHI7CisrCWludCByZXN1bHQ7CisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKworKwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsIHNob3J0X29wdGlvbnMsIG9wdGlvbnMsIDApKQorKwkJIT0gLTEpIHsKKysJCXN3aXRjaCAob3B0KSB7CisrCQlkZWZhdWx0OgorKwkJCWlmIChvcHQgPCBPUFRfTUFYKSAvKiBJZ25vcmUgY29yZSBvcHRpb25zICovCisrCQkJCWJyZWFrOworKwkJY2FzZSBPUFRfQVBQRU5EOgorKwkJCWNvbW1hbmRfbGluZSA9IG9wdGFyZzsKKysJCQljb21tYW5kX2xpbmVfbGVuID0gc3RybGVuKGNvbW1hbmRfbGluZSkgKyAxOworKwkJCWJyZWFrOworKwkJY2FzZSBPUFRfUkFNRElTSzoKKysJCQlyYW1kaXNrID0gb3B0YXJnOworKwkJCWJyZWFrOworKwkJY2FzZSBPUFRfRFRCOgorKwkJCWR0YiA9IG9wdGFyZzsKKysJCQlicmVhazsKKysJCX0KKysJfQorKworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjb21tYW5kX2xpbmU6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGNvbW1hbmRfbGluZSk7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IHJhbWRpc2s6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIHJhbWRpc2spOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkdGI6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIGR0Yik7CisrCisrCWlmIChpbmZvLT5rZXhlY19mbGFncyAmIEtFWEVDX09OX0NSQVNIKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgImtleGVjOiBrZHVtcCBub3QgeWV0IHN1cHBvcnRlZCBvbiBhcm02NFxuIik7CisrCQlyZXR1cm4gLTE7CisrCX0KKysKKysJcmVzdWx0ID0gYnVpbGRfZWxmX2V4ZWNfaW5mbyhidWYsIGxlbiwgJmVoZHIsIDApOworKworKwlpZiAocmVzdWx0IDwgMCkgeworKwkJZnJlZV9lbGZfaW5mbygmZWhkcik7CisrCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBmcmVlX2VsZl9pbmZvIGZhaWxlZFxuIiwgX19mdW5jX18sCisrCQkJX19MSU5FX18pOworKwkJcmV0dXJuIHJlc3VsdDsKKysJfQorKworKwllbGZfZXhlY19idWlsZF9sb2FkKGluZm8sICZlaGRyLCBidWYsIGxlbiwgMCk7CisrCisrCWluZm8tPmVudHJ5ID0gKHZvaWQqKTB4ODAwODAwMDBVTDsgIC8vIEZJWE1FCisrCisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IDwtXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlyZXR1cm4gMDsKKyt9CisrCisrdm9pZCBlbGZfYXJtNjRfdXNhZ2Uodm9pZCkKKyt7CisrCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IC0+XG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiA8LVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKyt9CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLXN5c2NhbGwuaAorKysrIGtleGVjLXRvb2xzLTIuMC4xMC9rZXhlYy9rZXhlYy1zeXNjYWxsLmgKK0BAIC0zOSw4ICszOSw4IEBACisgI2lmZGVmIF9fczM5MF9fCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI3NworICNlbmRpZgorLSNpZmRlZiBfX2FybV9fCistI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCV9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ3ICAKKysjaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtNjRfXykKKysjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJX19OUl9TWVNDQUxMX0JBU0UgKyAzNDcKKyAjZW5kaWYKKyAjaWYgZGVmaW5lZChfX21pcHNfXykKKyAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAgICAgICAgICAgICAgICA0MzExCitAQCAtMTA4LDYgKzEwOCw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGsKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfUFBDNjQgICAoMjEgPDwgMTYpCisgI2RlZmluZSBLRVhFQ19BUkNIX0lBXzY0ICAgKDUwIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9BUk0gICAgICg0MCA8PCAxNikKKysjZGVmaW5lIEtFWEVDX0FSQ0hfQVJNNjQgICAoMTgzIDw8IDE2KQorKy8qICNkZWZpbmUgS0VYRUNfQVJDSF9BQVJDSDY0ICgxODMgPDwgMTYpICovCisgI2RlZmluZSBLRVhFQ19BUkNIX1MzOTAgICAgKDIyIDw8IDE2KQorICNkZWZpbmUgS0VYRUNfQVJDSF9TSCAgICAgICg0MiA8PCAxNikKKyAjZGVmaW5lIEtFWEVDX0FSQ0hfTUlQU19MRSAoMTAgPDwgMTYpCitAQCAtMTUzLDUgKzE1NSw4IEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBrZXhlY19maWxlX2xvYWQoaW50IGsKKyAjaWZkZWYgX19tNjhrX18KKyAjZGVmaW5lIEtFWEVDX0FSQ0hfTkFUSVZFCUtFWEVDX0FSQ0hfNjhLCisgI2VuZGlmCisrI2lmIGRlZmluZWQoX19hcm02NF9fKQorKyNkZWZpbmUgS0VYRUNfQVJDSF9OQVRJVkUJS0VYRUNfQVJDSF9BUk02NAorKyNlbmRpZgorIAorICNlbmRpZiAvKiBLRVhFQ19TWVNDQUxMX0ggKi8KK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2tleGVjLmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMuYworQEAgLTY2NCw2ICs2NjQsOCBAQCBzdGF0aWMgaW50IG15X2xvYWQoY29uc3QgY2hhciAqdHlwZSwgaW50CisgCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKKyAJaW5mby5rZXhlY19mbGFncyA9IGtleGVjX2ZsYWdzOworIAorKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBkb1xuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKysKKyAJcmVzdWx0ID0gMDsKKyAJaWYgKGFyZ2MgLSBmaWxlaW5kIDw9IDApIHsKKyAJCWZwcmludGYoc3RkZXJyLCAiTm8ga2VybmVsIHNwZWNpZmllZFxuIik7CitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL3B1cmdhdG9yeS9hcmNoL2FybTY0L01ha2VmaWxlCitAQCAtMCwwICsxLDcgQEAKKysjCisrIyBQdXJnYXRvcnkgYXJtNjQKKysjCisrCisrYXJtNjRfUFVSR0FUT1JZX1NSQ1MgPQorKworK2Rpc3QgKz0gcHVyZ2F0b3J5L2FyY2gvYXJtNjQvTWFrZWZpbGUgJChhcm02NF9QVVJHQVRPUllfU1JDUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOThlYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXRvb2xzLVJlZmluZS1rZHVtcC1kZXZpY2VfdHJlZS1zb3J0LnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK2tleGVjLXRvb2xzOiBSZWZpbmUga2R1bXAgZGV2aWNlX3RyZWUgc29ydAorCitUaGUgY29tbWl0IGIwMmQ3MzViZiB3YXMgdG8gcmVhcnJhbmdlIHRoZSBkZXZpY2UtdHJlZSBlbnRyaWVzLCBhbmQKK2Fzc3VtZWQgdGhhdCB0aGVzZSBlbnRyaWVzIGFyZSBzb3J0ZWQgaW4gdGhlIGFzY2VuZGluZyBvcmRlci4gYnV0CithY2N0dWFsbHkgd2hlbiBJIHdhcyB2YWxpZGF0aW5nIGtleGVjIGFuZCBrZHVtcCwgdGhlIG9yZGVyIG9mCitzZXJpYWwgbm9kZSBzdGlsbCBpcyBjaGFuZ2VkLiBTbyB0aGUgcGF0Y2ggaXMgdG8gc29ydCB0aGVzZSBlbnRyaWVzCitieSB0aGUgZGlyZWN0b3J5IG5hbWUgaW4gYXNjZW5kaW5nIG9yZGVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogWWFuZyBXZWkgPFdlaS5ZYW5nQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBDaG9uZyBMdSA8Q2hvbmcuTHVAd2luZHJpdmVyLmNvbT4KKy0tLQorIGtleGVjL2FyY2gvcHBjL2ZzMmR0LmMgfCAgIDEzICsrKysrKysrKystLS0KKyBrZXhlYy9mczJkdC5jICAgICAgICAgIHwgICAxMyArKysrKysrKysrLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9rZXhlYy9hcmNoL3BwYy9mczJkdC5jCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2FyY2gvcHBjL2ZzMmR0LmMKK0BAIC0yOTYsNiArMjk2LDkgQEAgc3RhdGljIGludCBjb21wYXJlZnVuYyhjb25zdCB2b2lkICpkZW50cgorIHsKKyAJY2hhciAqc3RyMSA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MSktPmRfbmFtZTsKKyAJY2hhciAqc3RyMiA9ICgqKHN0cnVjdCBkaXJlbnQgKiopZGVudHJ5MiktPmRfbmFtZTsKKysJY2hhciogcHRyMSA9IHN0cmNocihzdHIxLCAnQCcpOworKwljaGFyKiBwdHIyID0gc3RyY2hyKHN0cjIsICdAJyk7CisrCWludCBsZW4xLCBsZW4yOworIAorIAkvKgorIAkgKiBzdHJjbXAgc2NhbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBmYWlscyB0byBpZGV0aWZ5IGZvciBzb21lCitAQCAtMzAzLDkgKzMwNiwxMyBAQCBzdGF0aWMgaW50IGNvbXBhcmVmdW5jKGNvbnN0IHZvaWQgKmRlbnRyCisgCSAqIFRoZXJlZm9yZSwgd2UgZ2V0IHRoZSB3cm9uZyBzb3J0ZWQgb3JkZXIgbGlrZSBtZW1vcnlAMTAwMDAwMDAgYW5kCisgCSAqIG1lbW9yeUBmMDAwMDAwLgorIAkgKi8KKy0JaWYgKHN0cmNocihzdHIxLCAnQCcpICYmIHN0cmNocihzdHIyLCAnQCcpICYmCistCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKKy0JCXJldHVybiAxOworKwlpZiAocHRyMSAmJiBwdHIyKSB7CisrCQlsZW4xID0gcHRyMSAtIHN0cjE7CisrCQlsZW4yID0gcHRyMiAtIHN0cjI7CisrCQlpZiAoIXN0cm5jbXAoc3RyMSwgc3RyMiwgbGVuMSA+bGVuMiA/IGxlbjE6IGxlbjIpICYmCisrCQkJCQkoc3RybGVuKHN0cjEpID4gc3RybGVuKHN0cjIpKSkKKysJCQkJcmV0dXJuIDE7CisrCX0KKyAKKyAJcmV0dXJuIHN0cmNtcChzdHIxLCBzdHIyKTsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHMva2V4ZWMteDMyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZDE4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzL2tleGVjLXgzMi5wYXRjaApAQCAtMCwwICsxLDg4IEBACit4ODZfNjQ6IEFkZCBzdXBwb3J0IHRvIGJ1aWxkIGtleGVjLXRvb2xzIHdpdGggeDMyIEFCSQorCitTdW1tYXJ5IG9mIGNoYW5nZXMsCisKK2NvbmZpZ3VyZS5hYzogQWRkIHRlc3QgZm9yIGRldGVjdCB4MzIgQUJJLgorcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlOiBOb3QgdXNlIG1jbW9kZWwgbGFyZ2Ugd2hlbgorCXgzMiBBQkkgaXMgc2V0Lgora2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYzogV2hlbiB4MzIgQUJJIGlzIHNldAorCXVzZSBFTEZDTEFTUzMyIGluc3RlYWQgb2YgRUxGQ0xBU1M2NC4KK2tleGVjL2tleGVjLXN5c2NhbGwuaDogQWRkIGNvcnJlY3Qgc3lzY2FsbCBudW1iZXIgZm9yIHgzMiBBQkkuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1NpZ25lZC1vZmYtYnk6IEFuw61iYWwgTGltw7NuIDxhbmliYWwubGltb25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFyaWFubyBMb3BleiA8bWFyaWFuby5sb3BlekBsaW51eC5pbnRlbC5jb20+CisKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5ICsrKysrKysrKworIGtleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMgfCA0ICsrKysKKyBrZXhlYy9rZXhlYy1zeXNjYWxsLmggICAgICAgICAgICAgICAgICAgIHwgNCArKysrCisgcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlICAgICAgICAgICB8IDQgKysrLQorIDQgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitJbmRleDoga2V4ZWMtdG9vbHMtMi4wLjEwL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGtleGVjLXRvb2xzLTIuMC4xMC9jb25maWd1cmUuYWMKK0BAIC01Niw2ICs1NiwxNSBAQCBjYXNlICR0YXJnZXRfY3B1IGluCisgCQk7OworIAlpYTY0fHg4Nl82NHxhbHBoYXxtNjhrICkKKyAJCUFSQ0g9IiR0YXJnZXRfY3B1IgorKworKwkJZG5sIC0tLVRlc3QgZm9yIHgzMiBBQkkgaW4geDg2XzY0CisrCQlpZiB0ZXN0ICJ4JEFSQ0giID0gInh4ODZfNjQiIDsgdGhlbgorKwkJCUFDX0VHUkVQX0NQUCh4MzJfdGVzdCwKKysJCQlbI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKwkJCQl4MzJfdGVzdAorKwkJCSNlbmRpZgorKwkJCV0sIFNVQkFSQ0g9J3gzMicsIFNVQkFSQ0g9JzY0JykKKysJCWZpCisgCQk7OworIAkqICkKKyAJCUFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlICR0YXJnZXRfY3B1XSkKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGtleGVjLXRvb2xzLTIuMC4xMC5vcmlnL2tleGVjL2FyY2gveDg2XzY0L2tleGVjLWVsZi1yZWwteDg2XzY0LmMKKysrKyBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMvYXJjaC94ODZfNjQva2V4ZWMtZWxmLXJlbC14ODZfNjQuYworQEAgLTgsNyArOCwxMSBAQCBpbnQgbWFjaGluZV92ZXJpZnlfZWxmX3JlbChzdHJ1Y3QgbWVtX2VoCisgCWlmIChlaGRyLT5laV9kYXRhICE9IEVMRkRBVEEyTFNCKSB7CisgCQlyZXR1cm4gMDsKKyAJfQorKyNpZmRlZiBfX0lMUDMyX18KKysJaWYgKGVoZHItPmVpX2NsYXNzICE9IEVMRkNMQVNTMzIpIHsKKysjZWxzZQorIAlpZiAoZWhkci0+ZWlfY2xhc3MgIT0gRUxGQ0xBU1M2NCkgeworKyNlbmRpZgorIAkJcmV0dXJuIDA7CisgCX0KKyAJaWYgKGVoZHItPmVfbWFjaGluZSAhPSBFTV9YODZfNjQpIHsKK0luZGV4OiBrZXhlYy10b29scy0yLjAuMTAva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0ga2V4ZWMtdG9vbHMtMi4wLjEwLm9yaWcva2V4ZWMva2V4ZWMtc3lzY2FsbC5oCisrKysga2V4ZWMtdG9vbHMtMi4wLjEwL2tleGVjL2tleGVjLXN5c2NhbGwuaAorQEAgLTMxLDggKzMxLDEyIEBACisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI2OAorICNlbmRpZgorICNpZmRlZiBfX3g4Nl82NF9fCisrI2lmZGVmIF9fSUxQMzJfXworKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQk1MjgKKysjZWxzZQorICNkZWZpbmUgX19OUl9rZXhlY19sb2FkCQkyNDYKKyAjZW5kaWYKKysjZW5kaWYKKyAjaWZkZWYgX19zMzkweF9fCisgI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI3NworICNlbmRpZgorSW5kZXg6IGtleGVjLXRvb2xzLTIuMC4xMC9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBrZXhlYy10b29scy0yLjAuMTAub3JpZy9wdXJnYXRvcnkvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrKyBrZXhlYy10b29scy0yLjAuMTAvcHVyZ2F0b3J5L2FyY2gveDg2XzY0L01ha2VmaWxlCitAQCAtMjMsNCArMjMsNiBAQCB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvCisgeDg2XzY0X1BVUkdBVE9SWV9TUkNTICs9IHB1cmdhdG9yeS9hcmNoL2kzODYvdmdhLmMKKyB4ODZfNjRfUFVSR0FUT1JZX1NSQ1MgKz0gcHVyZ2F0b3J5L2FyY2gvaTM4Ni9waWMuYworIAorLXg4Nl82NF9QVVJHQVRPUllfRVhUUkFfQ0ZMQUdTID0gLW1jbW9kZWw9bGFyZ2UKKytpZmVxICgkKFNVQkFSQ0gpLDY0KQorKyAgICAgICAgeDg2XzY0X1BVUkdBVE9SWV9FWFRSQV9DRkxBR1MgPSAtbWNtb2RlbD1sYXJnZQorK2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwva2V4ZWMva2V4ZWMtdG9vbHNfMi4wLjEwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGI5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2tleGVjL2tleGVjLXRvb2xzXzIuMC4xMC5iYgpAQCAtMCwwICsxLDIyIEBACityZXF1aXJlIGtleGVjLXRvb2xzLmluYworZXhwb3J0IExERkxBR1MgPSAiLUwke1NUQUdJTkdfTElCRElSfSIKK0VYVFJBX09FQ09ORiA9ICIgLS13aXRoLXpsaWI9eWVzIgorCitTUkNfVVJJICs9ICJmaWxlOi8va2V4ZWMtdG9vbHMtUmVmaW5lLWtkdW1wLWRldmljZV90cmVlLXNvcnQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLWFhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2tleGVjLXgzMi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMi1wb3dlcnBjLWNoYW5nZS10aGUtbWVtb3J5LXNpemUtbGltaXQucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDEtcHVyZ2F0b3J5LVBhc3Mtci1kaXJlY3RseS10by1saW5rZXIucGF0Y2ggXAorICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmNiNGQyMmJjZWM3MWI2ZTA3MGFhOGU5ZDk5MGE1ZTYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzMxYmI4M2RlZWY5NTQ3YTI4ZThjZmMxZjA5MTZlNzBmOGU2YjkyYTZiZDJlZjcwNzdlMTJlMzMzODIzOWFmMyIKKworUEFDS0FHRVMgPSsgImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtleGVjIGtkdW1wIHZtY29yZS1kbWVzZyIKKworRklMRVNfa2V4ZWMgPSAiJHtzYmluZGlyfS9rZXhlYyIKK0ZJTEVTX2tkdW1wID0gIiR7c2JpbmRpcn0va2R1bXAiCitGSUxFU192bWNvcmUtZG1lc2cgPSAiJHtzYmluZGlyfS92bWNvcmUtZG1lc2ciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2QvZGVwbW9kd3JhcHBlci1jcm9zc18xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFjYjNhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9kZXBtb2R3cmFwcGVyLWNyb3NzXzEuMC5iYgpAQCAtMCwwICsxLDQ4IEBACitTVU1NQVJZID0gIldyYXBwZXIgc2NyaXB0IGZvciB0aGUgTGludXgga2VybmVsIG1vZHVsZSBkZXBlbmRlbmN5IGluZGV4ZXIiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovLyR7Q09SRUJBU0V9L21ldGEvQ09QWUlORy5NSVQ7bWQ1PTNkYTljZmJjYjc4OGM4MGEwMzg0MzYxYjRkZTIwNDIwIgorCitTID0gIiR7V09SS0RJUn0iCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisjIFRoZSBrZXJuZWwgYW5kIHRoZSBzdGFnaW5nIGRpciBmb3IgaXQgaXMgbWFjaGluZSBzcGVjaWZpYworUEFDS0FHRV9BUkNIID0gIiR7TUFDSElORV9BUkNIfSIKKworIyBXZSBuZWVkIHRoZSBmb2xsb3dpbmcgZm9yIHRoZSBzc3RhdGUgY29kZSB0byBwcm9jZXNzIHRoZSB3cmFwcGVyCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiZGVwbW9kd3JhcHBlciIKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9LworCisJY2F0ID4gJHtEfSR7YmluZGlyX2Nyb3Nzc2NyaXB0c30vZGVwbW9kd3JhcHBlciA8PCBFT0YKKyMhL2Jpbi9zaAorIyBFeHBlY3RlZCB0byBiZSBjYWxsZWQgYXM6IGRlcG1vZHdyYXBwZXIgLWEgS0VSTkVMX1ZFUlNJT04KK2lmIFsgIlwkMSIgIT0gIi1hIiAtbyAiXCQyIiAhPSAiLWIiIF07IHRoZW4KKyAgICBlY2hvICJVc2FnZTogZGVwbW9kd3JhcHBlciAtYSAtYiByb290ZnMgS0VSTkVMX1ZFUlNJT04iID4mMgorICAgIGV4aXQgMQorZmkKK2lmIFsgISAtciAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uIF07IHRoZW4KKyAgICBlY2hvICJVbmFibGUgdG8gcmVhZDogJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9rZXJuZWwtYWJpdmVyc2lvbiIgPiYyCitlbHNlCisgICAga2VybmVsYWJpPVwkKGNhdCAke1BLR0RBVEFfRElSfS9rZXJuZWwtZGVwbW9kL2tlcm5lbC1hYml2ZXJzaW9uKQorICAgIGlmIFsgIlwka2VybmVsYWJpIiAhPSAiXCQ0IiBdOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBLZXJuZWwgdmVyc2lvbiBcJDQgZG9lcyBub3QgbWF0Y2gga2VybmVsLWFiaXZlcnNpb24gKFwka2VybmVsYWJpKSIgPiYyCisgICAgICAgIGV4aXQgMQorICAgIGZpCitmaQorCitpZiBbICEgLXIgJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCBdOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIHJlYWQ6ICR7UEtHREFUQV9ESVJ9L2tlcm5lbC1kZXBtb2QvU3lzdGVtLm1hcC1cJDQiID4mMgorICAgIGV4ZWMgZW52IGRlcG1vZCAiXCQxIiAiXCQyIiAiXCQzIiAiXCQ0IgorZWxzZQorICAgIGV4ZWMgZW52IGRlcG1vZCAiXCQxIiAiXCQyIiAiXCQzIiAtRiAiJHtQS0dEQVRBX0RJUn0va2VybmVsLWRlcG1vZC9TeXN0ZW0ubWFwLVwkNCIgIlwkNCIKK2ZpCitFT0YKKwljaG1vZCAreCAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfS9kZXBtb2R3cmFwcGVyCit9CisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiZGVwbW9kd3JhcHBlcl9zeXNyb290X3ByZXByb2Nlc3MiCisKK2RlcG1vZHdyYXBwZXJfc3lzcm9vdF9wcmVwcm9jZXNzICgpIHsKKwlzeXNyb290X3N0YWdlX2RpciAke0R9JHtiaW5kaXJfY3Jvc3NzY3JpcHRzfSAke1NZU1JPT1RfREVTVERJUn0ke2JpbmRpcl9jcm9zc3NjcmlwdHN9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC1uYXRpdmVfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QtbmF0aXZlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUyNzRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QtbmF0aXZlX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCityZXF1aXJlIGttb2QuaW5jCisKK0RFUEVORFMgKz0gInpsaWItbmF0aXZlIgorCitpbmhlcml0IG5hdGl2ZQorCitTUkNfVVJJICs9ICJmaWxlOi8vQ2hhbmdlLXRvLWNhbGxpbmctYnN3YXBfLWluc3RlYWQtb2YtaHRvYmUtYW5kLWJlLXRvaC5wYXRjaCBcCisgICAgICAgICAgICIKKworZG9faW5zdGFsbF9hcHBlbmQgKCl7CisJZm9yIHRvb2wgaW4gZGVwbW9kIGluc21vZCBsc21vZCBtb2RpbmZvIG1vZHByb2JlIHJtbW9kCisJZG8KKwkJbG4gLXMga21vZCAke0R9JHtiaW5kaXJ9LyR0b29sCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWE2N2QKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC5pbmMKQEAgLTAsMCArMSw0MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIgS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKyMgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIChzZWUgQ09QWUlORy5NSVQgZm9yIHRoZSB0ZXJtcykKKworU1VNTUFSWSA9ICJUb29scyBmb3IgbWFuYWdpbmcgTGludXgga2VybmVsIG1vZHVsZXMiCitERVNDUklQVElPTiA9ICJrbW9kIGlzIGEgc2V0IG9mIHRvb2xzIHRvIGhhbmRsZSBjb21tb24gdGFza3Mgd2l0aCBMaW51eCBrZXJuZWwgbW9kdWxlcyBsaWtlIFwKKyAgICAgICAgICAgICAgIGluc2VydCwgcmVtb3ZlLCBsaXN0LCBjaGVjayBwcm9wZXJ0aWVzLCByZXNvbHZlIGRlcGVuZGVuY2llcyBhbmQgYWxpYXNlcy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGFja2FnZXMucHJvZnVzaW9uLm1vYmkva21vZC8iCitMSUNFTlNFID0gIkdQTC0yLjArICYgTEdQTC0yLjErIgorTElDRU5TRV9saWJrbW9kID0gIkxHUEwtMi4xKyIKK1NFQ1RJT04gPSAiYmFzZSIKKworREVQRU5EUyArPSAicGtnY29uZmlnLW5hdGl2ZSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YTZmODllMjEwMGQ5YjZjZGZmY2VhNGYzOThlMzczNDMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlia21vZC9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIgoraW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYworCitTUkNSRVYgPSAiMGQ4MzM3MTVlYWE2NTYzNmRkYTI3MDViODkzNTlhMWUwMTU0ZGM1OCIKKyMgTG9va291dCBmb3IgUFYgYnVtcCB0b28gd2hlbiBTUkNSRVYgaXMgY2hhbmdlZAorUFYgPSAiMjErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS91dGlscy9rZXJuZWwva21vZC9rbW9kLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9kZXBtb2Qtc2VhcmNoLmNvbmYgXAorICAgICAgICAgICBmaWxlOi8vYXZvaWRfcGFyYWxsZWxfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LU9fQ0xPRVhFQy5wYXRjaCBcCisgICAgICAgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9BVVRPUkVDT05GICs9ICItLWluc3RhbGwgLS1zeW1saW5rIgorRVhUUkFfT0VDT05GICs9IiAtLWVuYWJsZS10b29scyAtLWRpc2FibGUtbWFucGFnZXMgLS13aXRoLXpsaWIiCisKK1BBQ0tBR0VDT05GSUdbZGVidWddID0gIi0tZW5hYmxlLWRlYnVnLC0tZGlzYWJsZS1kZWJ1ZyIKK1BBQ0tBR0VDT05GSUdbbG9nZ2luZ10gPSAiIC0tZW5hYmxlLWxvZ2dpbmcsLS1kaXNhYmxlLWxvZ2dpbmciCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAgICAgZ3RrZG9jaXplIC0tZG9jZGlyICR7U30vbGlia21vZC9kb2NzIHx8IHRvdWNoICR7U30vbGlia21vZC9kb2NzL2d0ay1kb2MubWFrZQorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKwlzZWQgLWkgJ3MjfWxpYnRvb2wjfSR7VEFSR0VUX1NZU30tbGlidG9vbCMnICR7Qn0vZG9sdGxpYnRvb2wKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL0NoYW5nZS10by1jYWxsaW5nLWJzd2FwXy1pbnN0ZWFkLW9mLWh0b2JlLWFuZC1iZS10b2gucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9DaGFuZ2UtdG8tY2FsbGluZy1ic3dhcF8taW5zdGVhZC1vZi1odG9iZS1hbmQtYmUtdG9oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjIxODMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9DaGFuZ2UtdG8tY2FsbGluZy1ic3dhcF8taW5zdGVhZC1vZi1odG9iZS1hbmQtYmUtdG9oLnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK1N1YmplY3Q6IENoYW5nZSB0byBjYWxsaW5nIGJzd2FwXyogaW5zdGVhZCBvZiBodG9iZSogYW5kIGJlKnRvaAorCitXZSBjYW4ndCB1c2UgaHRvYmUqIGFuZCBiZSp0b2ggZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBhcmUgbm90CithdmFpbGFibGUgb24gb2xkZXIgdmVyc2lvbnMgb2YgZ2xpYmMsIEZvciBleGFtcGxlLCBzaGlwcGVkIG9uIENlbnRvcyA1LjUuCisKK0NoYW5nZSB0byBkaXJlY3RseSBjYWxsaW5nIGJzd2FwXyogYXMgZGVmaW5lZCBpbitieXRlc3dhcC5oLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKKworU2lnbmVkLW9mZi1ieTogVGluZyBMaXUgPGIyODQ5NUBmcmVlc2NhbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorLS0tCisgbGlia21vZC9saWJrbW9kLXNpZ25hdHVyZS5jIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMgYi9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKK2luZGV4IDZmYzA2ZmMuLjkxMjE4NWEgMTAwNjQ0CistLS0gYS9saWJrbW9kL2xpYmttb2Qtc2lnbmF0dXJlLmMKKysrKyBiL2xpYmttb2QvbGlia21vZC1zaWduYXR1cmUuYworQEAgLTE4LDYgKzE4LDcgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8ZW5kaWFuLmg+CisrI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CisgI2luY2x1ZGUgPGludHR5cGVzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTEyNyw3ICsxMjgsNyBAQCBib29sIGttb2RfbW9kdWxlX3NpZ25hdHVyZV9pbmZvKGNvbnN0IHN0cnVjdCBrbW9kX2ZpbGUgKmZpbGUsIHN0cnVjdCBrbW9kX3NpZ25hdAorIAkJCW1vZHNpZy0+aGFzaCA+PSBQS0VZX0hBU0hfX0xBU1QgfHwKKyAJCQltb2RzaWctPmlkX3R5cGUgPj0gUEtFWV9JRF9UWVBFX19MQVNUKQorIAkJcmV0dXJuIGZhbHNlOworLQlzaWdfbGVuID0gYmUzMnRvaChnZXRfdW5hbGlnbmVkKCZtb2RzaWctPnNpZ19sZW4pKTsKKysJc2lnX2xlbiA9IGJzd2FwXzMyKGdldF91bmFsaWduZWQoJm1vZHNpZy0+c2lnX2xlbikpOworIAlpZiAoc2lnX2xlbiA9PSAwIHx8CisgCSAgICBzaXplIDwgKGludDY0X3QpKG1vZHNpZy0+c2lnbmVyX2xlbiArIG1vZHNpZy0+a2V5X2lkX2xlbiArIHNpZ19sZW4pKQorIAkJcmV0dXJuIGZhbHNlOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2F2b2lkX3BhcmFsbGVsX3Rlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYWZjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9hdm9pZF9wYXJhbGxlbF90ZXN0cy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitBdm9pZCBwYXJhbGxlbC10ZXN0cyBhcyBpdCByZW1vdmUKK2J1aWxkdGVzdC1URVNUUyBhbmQgcnVudGVzdC1URVNUUyB0YXJnZXRzIHJlcXVpcmVkIGJ5IHB0ZXN0LgorSW4gYXV0b21ha2UgMS4xMy40IHBhcmFsbGVsLXRlc3RzIGlzIGFzc3VtZWQgYnkgZGVmYXVscy4KK0luIG9yZGVyIHRvIGhhdmUgYnVpbGR0ZXN0LVRFU1RTIGFuZCBydW50ZXN0LVRFU1RTIHRhcmdldHMKK3NlcmlhbC10ZXN0cyBpcyBub3cgcmVxdWlyZWQKKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgKGRpc2FibGUgZmVhdHVyZSBpbmNvbXBhdGlibGUgd2l0aCBwdGVzdCkgCisKKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggZWIwZjlkMS4uYTUzOTk2OCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTQsNyArMTQsNyBAQCBBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKKyBBQ19TWVNfTEFSR0VGSUxFCisgQUNfUFJFRklYX0RFRkFVTFQoWy91c3JdKQorIEFNX01BSU5UQUlORVJfTU9ERShbZW5hYmxlXSkKKy1BTV9JTklUX0FVVE9NQUtFKFtjaGVjay1uZXdzIGZvcmVpZ24gMS4xMSBzaWxlbnQtcnVsZXMgdGFyLXBheCBuby1kaXN0LWd6aXAgZGlzdC14eiBzdWJkaXItb2JqZWN0cyBjb2xvci10ZXN0cyBwYXJhbGxlbC10ZXN0c10pCisrQU1fSU5JVF9BVVRPTUFLRShbY2hlY2stbmV3cyBmb3JlaWduIDEuMTEgc2lsZW50LXJ1bGVzIHRhci1wYXggbm8tZGlzdC1nemlwIGRpc3QteHogc3ViZGlyLW9iamVjdHMgY29sb3ItdGVzdHMgc2VyaWFsLXRlc3RzXSkKKyBBTV9TSUxFTlRfUlVMRVMoW3llc10pCisgTFRfSU5JVChbZGlzYWJsZS1zdGF0aWMgcGljLW9ubHldKQorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9kZXBtb2Qtc2VhcmNoLmNvbmYgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9kZXBtb2Qtc2VhcmNoLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI3YzBiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2RlcG1vZC1zZWFyY2guY29uZgpAQCAtMCwwICsxLDYgQEAKKyMKKyMgL2V0Yy9kZXBtb2QuZC9kZXBtb2QuY29uZgorIworCitzZWFyY2ggdXBkYXRlcyBleHRyYW1vZHVsZXMgYnVpbHQtaW4KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvZml4LU9fQ0xPRVhFQy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2ZpeC1PX0NMT0VYRUMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE2MWQ2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL2ZpeC1PX0NMT0VYRUMucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorRnJvbSBiZDQzMzY3ZWVlODY4MDU5NzcwMTg4ZmQ5ZTlkYjM4NTIwZGM2ZmZmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBXZWQsIDIyIEphbiAyMDE0IDAxOjA2OjQwIC0wNTAwCitTdWJqZWN0OiBbUEFUQ0hdIGxpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oOiBjaGVjayB3aGV0aGVyIE9fQ0xPRVhFQyBpcworIGRlZmluZWQgb3Igbm90CisKK09fQ0xPRVhFQyBpcyBpbnRyb2R1Y2VkIGZyb20gTGludXggMi42LjIzLCBzbyBvbGQga2VybmVsIGRvZXNuJ3QgaGF2ZQoraXQsIHdlIG5lZWQgY2hlY2sgYmVmb3JlIHVzZS4KKworVGhpcyBwYXRjaCBpcyBtdWNoIG1vcmUgbGlrZSBhIHdvcmthcm91bmQsIHNpbmNlIGl0IG1heSBuZWVkIGZjbnRsKCkgdXNlCitGRF9DTE9FWEVDIHRvIHJlcGxhY2UuCisKK1RoaXMgcHJvYmxlbSB3YXMgcmVwb3J0ZWQgYnkgIlRpbmcgTGl1IDxiMjg0OTVAZnJlZXNjYWxlLmNvbT4iCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBsaWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaCB8ICAgIDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2xpYmttb2QvbGlia21vZC1pbnRlcm5hbC5oIGIvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKK2luZGV4IDAxODAxMjQuLjEwMGI0MGYgMTAwNjQ0CistLS0gYS9saWJrbW9kL2xpYmttb2QtaW50ZXJuYWwuaAorKysrIGIvbGlia21vZC9saWJrbW9kLWludGVybmFsLmgKK0BAIC05LDYgKzksMTAgQEAKKyAjaW5jbHVkZSAibWFjcm8uaCIKKyAjaW5jbHVkZSAibGlia21vZC5oIgorIAorKyNpZm5kZWYgT19DTE9FWEVDCisrI2RlZmluZSBPX0NMT0VYRUMgMAorKyNlbmRpZgorKworIHN0YXRpYyBfYWx3YXlzX2lubGluZV8gX3ByaW50Zl9mb3JtYXRfKDIsIDMpIHZvaWQKKyAJa21vZF9sb2dfbnVsbChzdHJ1Y3Qga21vZF9jdHggKmN0eCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pIHt9CisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcHRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxZGJjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kL3B0ZXN0LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK0FkZCAnaW5zdGFsbC1wdGVzdCcgcnVsZS4KKworU2lnbmVkLW9mZi1ieTogVHVkb3IgRmxvcmVhIDx0dWRvci5mbG9yZWFAZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtcnVOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQorLS0tIGEvTWFrZWZpbGUuYW0JMjAxMy0wNy0xMiAxNzoxMTowNS4yNzgzMzE1NTcgKzAyMDAKKysrKyBiL01ha2VmaWxlLmFtCTIwMTMtMDctMTIgMTc6MTQ6MjcuMDMzNzg4MDE2ICswMjAwCitAQCAtMjA0LDYgKzIwNCwxNiBAQAorIAorIGRpc3RjbGVhbi1sb2NhbDogJChESVNUQ0xFQU5fTE9DQUxfSE9PS1MpCisgCisraW5zdGFsbC1wdGVzdDoKKysJQCQoTUtESVJfUCkgJChERVNURElSKS90ZXN0c3VpdGUKKysJQGZvciBmaWxlIGluICQoVEVTVFNVSVRFKTsgZG8gXAorKwkJaW5zdGFsbCAkJGZpbGUgJChERVNURElSKS90ZXN0c3VpdGU7IFwKKysJZG9uZTsKKysJQHNlZCAtZSAncy9eTWFrZWZpbGUvX01ha2VmaWxlLycgPCBNYWtlZmlsZSA+ICQoREVTVERJUikvTWFrZWZpbGUKKysJQCQoTUtESVJfUCkgJChERVNURElSKS90b29scworKwlAY3AgJChub2luc3RfU0NSSVBUUykgJChub2luc3RfUFJPR1JBTVMpICQoREVTVERJUikvdG9vbHMKKysJQGNwIC1yIHRlc3RzdWl0ZS9yb290ZnMgdGVzdHN1aXRlLy5saWJzICQoREVTVERJUikvdGVzdHN1aXRlCisrCisgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAjIGN1c3RvbSByZWxlYXNlIGhlbHBlcnMKKyAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9rbW9kL2ttb2QvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU5OGRkMmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZC9ydW4tcHRlc3QKQEAgLTAsMCArMSw1IEBACisjIS9iaW4vc2gKK3RvdWNoIHRlc3RzdWl0ZS9zdGFtcC1yb290ZnMKK3RhciB4ZiB0ZXN0bW9kdWxlLnRhcgorbWFrZSAtayBydW50ZXN0LVRFU1RTIDI+L2Rldi9udWxsfCBncmVwIC1lIF5QQVNTIC1lIF5GQUlMCitmaW5kIHRlc3RzdWl0ZSAtbmFtZSAqLmtvIC1leGVjIHJtIC1mIHt9IFw7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZF9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2ttb2Qva21vZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0ZDg1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwva21vZC9rbW9kX2dpdC5iYgpAQCAtMCwwICsxLDYzIEBACisjIENvcHlyaWdodCAoQykgMjAxMiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorIyBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgKHNlZSBDT1BZSU5HLk1JVCBmb3IgdGhlIHRlcm1zKQorCityZXF1aXJlIGttb2QuaW5jCisKK0RFUEVORFMgKz0gInpsaWIiCitQUk9WSURFUyArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSUFJPVklERVNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorUkNPTkZMSUNUU18ke1BOfSArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCitSUkVQTEFDRVNfJHtQTn0gKz0gIm1vZHVsZS1pbml0LXRvb2xzLWluc21vZC1zdGF0aWMgbW9kdWxlLWluaXQtdG9vbHMtZGVwbW9kIG1vZHVsZS1pbml0LXRvb2xzIgorCisjIHRvIGZvcmNlIHVzZXIgdG8gcmVtb3ZlIG9sZCBtb2R1bGUtaW5pdC10b29scyBhbmQgcmVwbGFjZSB0aGVtIHdpdGgga21vZCB2YXJpYW50cworUkNPTkZMSUNUU19saWJrbW9kMiArPSAibW9kdWxlLWluaXQtdG9vbHMtaW5zbW9kLXN0YXRpYyBtb2R1bGUtaW5pdC10b29scy1kZXBtb2QgbW9kdWxlLWluaXQtdG9vbHMiCisKKyMgYXV0b3Rvb2xzIHNldCBwcmVmaXggdG8gL3VzciwgaG93ZXZlciB3ZSB3YW50IHRoZW0gaW4gL2JpbiBhbmQgL3NiaW4KK2JpbmRpciA9ICIke2Jhc2VfYmluZGlyfSIKK3NiaW5kaXIgPSAiJHtiYXNlX3NiaW5kaXJ9IgorIyBsaWJkaXIgPSAiJHtiYXNlX2xpYmRpcn0iCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZG03NTUgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2Vfc2JpbmRpcn0KKyAgICAgICAgIyBhZGQgc3ltbGlua3MgdG8ga21vZAorICAgICAgICBsbiAtcyAuLiR7YmFzZV9iaW5kaXJ9L2ttb2QgJHtEfSR7YmFzZV9iaW5kaXJ9L2xzbW9kCisgICAgICAgIGZvciB0b29sIGluIGluc21vZCBybW1vZCBkZXBtb2QgbW9kaW5mbyBtb2Rwcm9iZTsgZG8KKyAgICAgICAgICAgICAgICBsbiAtcyAuLiR7YmFzZV9iaW5kaXJ9L2ttb2QgJHtEfSR7YmFzZV9zYmluZGlyfS8ke3Rvb2x9CisgICAgICAgIGRvbmUKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGRpcmVjdG9yaWVzCisgICAgICAgIGluc3RhbGwgLWRtNzU1ICR7RH0ke2Jhc2VfbGliZGlyfS9kZXBtb2QuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtiYXNlX2xpYmRpcn0vbW9kcHJvYmUuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtzeXNjb25mZGlyfS9kZXBtb2QuZAorICAgICAgICBpbnN0YWxsIC1kbTc1NSAke0R9JHtzeXNjb25mZGlyfS9tb2Rwcm9iZS5kCisKKyAgICAgICAgIyBpbnN0YWxsIGRlcG1vZC5kIGZpbGUgZm9yIHNlYXJjaC8gZGlyCisgICAgICAgIGluc3RhbGwgLURtNjQ0ICIke1dPUktESVJ9L2RlcG1vZC1zZWFyY2guY29uZiIgIiR7RH0ke2Jhc2VfbGliZGlyfS9kZXBtb2QuZC9zZWFyY2guY29uZiIKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworICAgICAgICAgICAgc2VkIC1pICdzL2FjX3B3ZD0vI2FjX3B3ZD0vJyBjb25maWcuc3RhdHVzIDsgc2VkIC1pICIvI2FjX3B3ZD0vYVxhY19wd2Q9Jy4nIiBjb25maWcuc3RhdHVzCit9CisKK2luaGVyaXQgdXBkYXRlLWFsdGVybmF0aXZlcworCitBTFRFUk5BVElWRV9QUklPUklUWSA9ICI2MCIKKworQUxURVJOQVRJVkVfa21vZCA9ICJpbnNtb2QgbW9kcHJvYmUgcm1tb2QgbW9kaW5mbyBiaW4tbHNtb2QgbHNtb2QgZGVwbW9kIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vaW5zbW9kIgorQUxURVJOQVRJVkVfTElOS19OQU1FW21vZHByb2JlXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbW9kcHJvYmUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbcm1tb2RdID0gIiR7YmFzZV9zYmluZGlyfS9ybW1vZCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVttb2RpbmZvXSA9ICIke2Jhc2Vfc2JpbmRpcn0vbW9kaW5mbyIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtiaW4tbHNtb2RdID0gIiR7YmFzZV9iaW5kaXJ9L2xzbW9kIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbbHNtb2RdID0gIiR7YmFzZV9zYmluZGlyfS9sc21vZCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtsc21vZF0gPSAiJHtiYXNlX2JpbmRpcn0vbHNtb2QuJHtCUE59IgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbZGVwbW9kXSA9ICIke2Jhc2Vfc2JpbmRpcn0vZGVwbW9kIgorCitQQUNLQUdFUyA9KyAibGlia21vZCAke1BOfS1iYXNoLWNvbXBsZXRpb24iCisKK0ZJTEVTX2xpYmttb2QgPSAiJHtiYXNlX2xpYmRpcn0vbGlia21vZCoke1NPTElCU30gJHtsaWJkaXJ9L2xpYmttb2QqJHtTT0xJQlN9IgorRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9L2RlcG1vZC5kICR7YmFzZV9saWJkaXJ9L21vZHByb2JlLmQiCitGSUxFU18ke1BOfS1iYXNoLWNvbXBsZXRpb24gPSAiJHtkYXRhZGlyfS9iYXNoLWNvbXBsZXRpb24iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvMDAwMS1SZWN0aWZ5LXRoZS1mdW5jdGlvbi1zaWduYXR1cmVzLXRvLWZpeC1wcm90b3R5cGUtbWlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41LzAwMDEtUmVjdGlmeS10aGUtZnVuY3Rpb24tc2lnbmF0dXJlcy10by1maXgtcHJvdG90eXBlLW1pcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQ4MTMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41LzAwMDEtUmVjdGlmeS10aGUtZnVuY3Rpb24tc2lnbmF0dXJlcy10by1maXgtcHJvdG90eXBlLW1pcy5wYXRjaApAQCAtMCwwICsxLDY0IEBACitGcm9tIGRiMTEyNzM5ZGM0ZjYwOGE5NjhiODEwNGIzODI5NTVkYzNkOTZjYTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA3OjQwOjEwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFJlY3RpZnkgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gZml4IHByb3RvdHlwZSBtaXNtYXRjaGVzCisKK2NsYW5nIGlzIGxlc3MgZm9yZ2l2aW5nIHdoZW4gaXQgY29tZXMgdG8gY29kaW5nIHN0YW5kYXJkcywgY29ycmVjdCB0aGUKK2Z1bmN0aW9uIHNpZ25hdHVyZXMgdG8gcmVmbGVjdCB0aGUgZnVuY3Rpb24gbG9naWMKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBmc3luYy5jICAgICAgfCA3ICsrKystLS0KKyBsYXRlbmN5dG9wLmggfCAyICstCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mc3luYy5jIGIvZnN5bmMuYworaW5kZXggODJkZmYwZS4uNWNlZmJhOSAxMDA2NDQKKy0tLSBhL2ZzeW5jLmMKKysrKyBiL2ZzeW5jLmMKK0BAIC01MSw3ICs1MSw3IEBAIHN0cnVjdCBmc3luY19maWxlcyB7Cisgc3RhdGljIEdMaXN0ICpmc3luY19kYXRhOworIAorIAorLXN0YXRpYyBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKytzdGF0aWMgdm9pZCBjaGFpbl9maWxlKHN0cnVjdCBmc3luY19wcm9jZXNzICpwcm9jLCBjaGFyICpmaWxlbmFtZSkKKyB7CisgCXN0cnVjdCBmc3luY19maWxlcyAqZmlsZTsKKyAJR0xpc3QgKml0ZW07CitAQCAtNzUsNyArNzUsNyBAQCBzdGF0aWMgY2hhaW5fZmlsZShzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYywgY2hhciAqZmlsZW5hbWUpCisgCXByb2MtPmZpbGVzID0gZ19saXN0X2FwcGVuZChwcm9jLT5maWxlcywgZmlsZSk7CisgfQorIAorLXN0YXRpYyByZXBvcnRfZmlsZShjaGFyICpwcm9jZXNzLCBjaGFyICpmaWxlKQorK3N0YXRpYyB2b2lkIHJlcG9ydF9maWxlKGNoYXIgKnByb2Nlc3MsIGNoYXIgKmZpbGUpCisgeworIAlzdHJ1Y3QgZnN5bmNfcHJvY2VzcyAqcHJvYzsKKyAJR0xpc3QgKml0ZW07CitAQCAtMTU3LDkgKzE1NywxMCBAQCBpbnQgZW5hYmxlX2ZzeW5jX3RyYWNlcih2b2lkKQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2N1cnJlbnRfdHJhY2VyIiwgImZzeW5jIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL2l0ZXJfY3RybCIsICJmdHJhY2VfcHJpbnRrIik7CQorIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworKwlyZXR1cm4gcmV0OworIH0KKyAKKy1pbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyt2b2lkIGRpc2FibGVfZnN5bmNfdHJhY2VyKHZvaWQpCisgeworIAl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworIH0KK2RpZmYgLS1naXQgYS9sYXRlbmN5dG9wLmggYi9sYXRlbmN5dG9wLmgKK2luZGV4IDUzOTRkNzMuLjlkMTA3YTggMTAwNjQ0CistLS0gYS9sYXRlbmN5dG9wLmgKKysrKyBiL2xhdGVuY3l0b3AuaAorQEAgLTU0LDUgKzU0LDUgQEAgZXh0ZXJuIGNoYXIgKnRyYW5zbGF0ZShjaGFyICpsaW5lKTsKKyBleHRlcm4gdm9pZCBpbml0X3RyYW5zbGF0aW9ucyhjaGFyICpmaWxlbmFtZSk7CisgZXh0ZXJuIGludCBmc3luY19kaXNwbGF5KGludCBkdXJhdGlvbik7CisgZXh0ZXJuIGludCBlbmFibGVfZnN5bmNfdHJhY2VyKHZvaWQpOworLWV4dGVybiBpbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCk7CisrZXh0ZXJuIHZvaWQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCk7CisgZXh0ZXJuIHZvaWQgdXBkYXRlX2xpc3Qodm9pZCk7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sYXRlbmN5dG9wL2xhdGVuY3l0b3AtMC41L2xhdGVuY3l0b3AtZnN5bmMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg0OGNjZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK2xpbnV4OiBzeXNmczogdXNlIHRyYWNpbmdfb24gYXMgdHJhY2luZ19lbmFibGVkIGlzIGRlcHJlY2F0ZWQKKwordHJhY2luZ19lbmFibGVkIHVzZSBpbiB0aGUga2VybmVsIGlzIGJlaW5nIGRlcHJlY2F0ZWQgYXMgcGVyIGNvbW1pdAorNjc1MmFiNGE5YzMwIFt0cmFjaW5nOiBEZXByZWNhdGUgdHJhY2luZ19lbmFibGVkIGZvciB0cmFjaW5nX29uXSBpbgordGhlIGxpbnV4IG1haW5saW5lIGtlcm5lbC4gdHJhY2luZ19lbmFibGVkIHVzZSB3aWxsIGdlbmVyYXRlIGEgd2FybmluZworYW5kIG1heSBubyBsb25nZXIgZnVuY3Rpb24gYXMgZXhwZWN0ZWQsIHRoZXJlZm9yZSBtb3ZlIHRvIHVzZSB0cmFjaW5nX29uLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRGVubmlzIEhhbGwgPGRlbm5pcy5oYWxsQHdpbmRyaXZlci5jb20+CisKK0luZGV4OiBsYXRlbmN5dG9wLTAuNS9mc3luYy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGF0ZW5jeXRvcC0wLjUub3JpZy9mc3luYy5jCTIwMTItMDgtMDMgMTA6NDU6NDkuMDAwMDAwMDAwIC0wNDAwCisrKysgbGF0ZW5jeXRvcC0wLjUvZnN5bmMuYwkyMDEyLTA4LTAzIDEwOjQ4OjM5LjAwMDAwMDAwMCAtMDQwMAorQEAgLTE0OSwxOSArMTQ5LDE5IEBACisgICogY2QgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZworICAqIGVjaG8gZnN5bmMgPiBjdXJyZW50X3RyYWNlcgorICAqIGVjaG8gZnRyYWNlX3ByaW50ayA+IGl0ZXJfY3RybCAKKy0gKiBlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQKKysgKiBlY2hvIDEgPiB0cmFjaW5nX29uCisgICovCisgCXJldCA9IHN5c3RlbSgiL2Jpbi9tb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcvIik7CisgCWlmICghcmV0KSAKKyAJCXJldHVybiAtMTsKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlciIsICJmc3luYyIpOwkKKyAJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9pdGVyX2N0cmwiLCAiZnRyYWNlX3ByaW50ayIpOwkKKy0Jd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX2VuYWJsZWQiLCAiMSIpOworKwl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMSIpOworIH0KKyAKKyBpbnQgZGlzYWJsZV9mc3luY190cmFjZXIodm9pZCkKKyB7CistCXdyaXRlX3RvX2ZpbGUoIi9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2luZ19lbmFibGVkIiwgIjAiKTsKKysJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjAiKTsKKyB9CisgCisgCitAQCAtMzM5LDggKzMzOSw4IEBACisgCQlpZiAoY3VyZHVyYXRpb24gPiA1KQorIAkJCWN1cmR1cmF0aW9uID0gNTsKKyAJCS8qIGNsZWFyIHRoZSBmdHJhY2UgYnVmZmVyICovCistCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIwIik7CistCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfZW5hYmxlZCIsICIxIik7CisrCQl3cml0ZV90b19maWxlKCIvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfb24iLCAiMCIpOworKwkJd3JpdGVfdG9fZmlsZSgiL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjaW5nX29uIiwgIjEiKTsKKyAJCWtleSA9IHNlbGVjdCgxLCAmcmZkcywgTlVMTCwgTlVMTCwgJmVuZCk7CisgCQlwYXJzZV9mdHJhY2UoKTsKKyAJCXByaW50X2dsb2JhbF9saXN0KCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wLTAuNS9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjIxN2YKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC0wLjUvbGF0ZW5jeXRvcC1tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDM5IEBACitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUub3JpZyBiL01ha2VmaWxlCitpbmRleCAxNmEyMzY5Li5mYTc5N2EyIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUub3JpZworKysrIGIvTWFrZWZpbGUKK0BAIC0xLDEwICsxLDExIEBACistIyBGSVhNRTogVXNlIGF1dG9jb25mID8KKy1IQVNfR1RLX0dVSSA9IDEKKysjIFVwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKysjIFNpZ25lZC1vZmYtYnk6IEphY2sgTWl0Y2hlbGwgPGphY2subWl0Y2hlbGxAZGJicm9hZGNhc3QuY28udWs+CisgCisgREVTVERJUiA9CisgU0JJTkRJUiA9IC91c3Ivc2JpbgorIFhDRkxBR1MgPSAtVyAgLWcgYHBrZy1jb25maWcgLS1jZmxhZ3MgZ2xpYi0yLjBgIC1EX0ZPUlRJRllfU09VUkNFPTIgLVduby1zaWduLWNvbXBhcmUKKy1MREYgPSAtV2wsLS1hcy1uZWVkZWQgYHBrZy1jb25maWcgLS1saWJzIGdsaWItMi4wYCAgIC1sbmN1cnNlc3cgCisrTERGID0gLVdsLC0tYXMtbmVlZGVkIGBwa2ctY29uZmlnIC0tbGlicyBnbGliLTIuMGAgICAtbG5jdXJzZXMKKytDQyA/PSBnY2MKKyAKKyBPQkpTPSBsYXRlbmN5dG9wLm8gdGV4dF9kaXNwbGF5Lm8gdHJhbnNsYXRlLm8gZnN5bmMubworIAorQEAgLTI2LDE2ICsyNywxNyBAQCBlbmRpZgorIAorICMgV2Ugd3JpdGUgZXhwbGljaXR5IHRoaXMgImltcGxpY2l0IHJ1bGUiCisgJS5vIDogJS5jCistCWdjYyAtYyAkKENGTEFHUykgJChYQ0ZMQUdTKSAkPCAtbyAkQAorKwkkKENDKSAtYyAkKENGTEFHUykgJChYQ0ZMQUdTKSAkPCAtbyAkQAorIAorIGxhdGVuY3l0b3A6ICAkKE9CSlMpIGxhdGVuY3l0b3AuaCBNYWtlZmlsZQorLQlnY2MgJChDRkxBR1MpICQoT0JKUykgJChMREYpIC1vIGxhdGVuY3l0b3AgCisrCSQoQ0MpICQoQ0ZMQUdTKSAkKE9CSlMpICQoTERGKSAtbyBsYXRlbmN5dG9wCisgCisgY2xlYW46CisgCXJtIC1mICp+IGxhdGVuY3l0b3AgREVBREpPRSAqLm8KKyAKKyBpbnN0YWxsOiBsYXRlbmN5dG9wCisgCW1rZGlyIC1wICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AKKysJbWtkaXIgLXAgJChERVNURElSKS8kKFNCSU5ESVIpCisgCWluc3RhbGwgLW0gMDY0NCBsYXRlbmN5dG9wLnRyYW5zICQoREVTVERJUikvdXNyL3NoYXJlL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcC50cmFucworIAlpbnN0YWxsIC1tIDA2NDQgKi5wbmcgJChERVNURElSKS91c3Ivc2hhcmUvbGF0ZW5jeXRvcC8KKyAJaW5zdGFsbCAtbSAwNzU1IGxhdGVuY3l0b3AgJChERVNURElSKSQoU0JJTkRJUikvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcF8wLjUuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xhdGVuY3l0b3AvbGF0ZW5jeXRvcF8wLjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMxZjFiYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGF0ZW5jeXRvcC9sYXRlbmN5dG9wXzAuNS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkxpbnV4IHRvb2wgZm9yIG1lYXN1cmluZyBhbmQgZml4aW5nIGxhdGVuY3kiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmxhdGVuY3l0b3Aub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2xhdGVuY3l0b3AuYztlbmRsaW5lPTIzO21kNT1lZTllYTliMTQxNTM1NmU1NzM0YWRhZDRhODdkYzdmYSIKKworREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYmludGwgbmN1cnNlcyBnbGliLTIuMCIKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3BrZ3MuZmVkb3JhcHJvamVjdC5vcmcvcmVwby9wa2dzLyR7QlBOfS8ke0JQfS50YXIuZ3ovNzNiYjMzNzFjNmVlMGIwZTY4ZTI1Mjg5MDI3ZTg2NWMvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgIGZpbGU6Ly9sYXRlbmN5dG9wLW1ha2VmaWxlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9sYXRlbmN5dG9wLWZzeW5jLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLVJlY3RpZnktdGhlLWZ1bmN0aW9uLXNpZ25hdHVyZXMtdG8tZml4LXByb3RvdHlwZS1taXMucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzNiYjMzNzFjNmVlMGIwZTY4ZTI1Mjg5MDI3ZTg2NWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOWU3ZjcyZmJlYTdiZDkxOGU3MTIxMmExZWFiYWFkODQ4OGQyYzYwMjIwNWQyZTNjOTVkNjJjZDU3ZTkyMDNlZiIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0iCisKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICIsLGd0aysiCisKK0VYVFJBX09FTUFLRV9YID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3gxMScsICdIQVNfR1RLX0dVST0xJywgJycsIGQpfSIKKworI0NGTEFHUyArPSAiJHtMREZMQUdTfSIKKworZG9faW5zdGFsbCgpIHsKKyAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9ICR7RVhUUkFfT0VNQUtFX1h9Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9maWxlcy8wMDAxLU1ha2VmaWxlLUFkZC1MREZMQUdTLXZhcmlhYmxlLXRvLVNMREZMQUdTLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTlhN2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saWJwZm0vZmlsZXMvMDAwMS1NYWtlZmlsZS1BZGQtTERGTEFHUy12YXJpYWJsZS10by1TTERGTEFHUy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDI3MmE4YTA2OWE4ZjVmMDZhMWU1ZGZhMGVmMTJmNWY5Mjk4NDcyOGIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOb29yIDxub29yX2Foc2FuQG1lbnRvci5jb20+CitEYXRlOiBXZWQsIDEyIEF1ZyAyMDE1IDIwOjU0OjAwICswNTAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBBZGQgTERGTEFHUyB2YXJpYWJsZSB0byBTTERGTEFHUy4KKworKiBBZGQgTERGTEFHUyB2YXJpYWJsZSB0byBTTERGTEFHUyBzbyB0aGF0IGV4dHJhIGxpbmtlcgorICBmbGFncyBjYW4gYmUgc2VudCB2aWEgdGhpcyB2YXJpYWJsZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW3BlcmZtb24yLWxpYnBmbTQtY29tbWl0c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdCisKK1NpZ25lZC1vZmYtYnk6IE5vb3IgQWhzYW4gPG5vb3JfYWhzYW5AbWVudG9yLmNvbT4KKy0tLQorIGxpYi9NYWtlZmlsZSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQoraW5kZXggMWNjODc2NS4uNGJkOTJlZiAxMDA2NDQKKy0tLSBhL2xpYi9NYWtlZmlsZQorKysrIGIvbGliL01ha2VmaWxlCitAQCAtMTg3LDcgKzE4Nyw3IEBAIENGTEFHUyArPSAtRENPTkZJR19QRk1MSUJfQ0VMTAorIGVuZGlmCisgCisgaWZlcSAoJChTWVMpLExpbnV4KQorLVNMREZMQUdTPS1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLCQoVkxJQlBGTSkKKytTTERGTEFHUz0kKExERkxBR1MpIC1zaGFyZWQgLVdsLC1zb25hbWUgLVdsLCQoVkxJQlBGTSkKKyBTTElCUEZNPWxpYnBmbS5zby4kKFZFUlNJT04pLiQoUkVWSVNJT04pLiQoQUdFKQorIFZMSUJQRk09bGlicGZtLnNvLiQoVkVSU0lPTikKKyBTT0xJQkVYVD1zbworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGlicGZtL2xpYnBmbTRfNC42LjAuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00XzQuNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZmRhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpYnBmbS9saWJwZm00XzQuNi4wLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiTW9uaXRvcmluZyB0b29scyBleHBsb2l0aW5nIHRoZSBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIGV2ZW50cyIKK0RFU0NSSVBUSU9OID0gIlRoaXMgcGFja2FnZSBwcm92aWRlcyBhIGxpYnJhcnksIGNhbGxlZCBsaWJwZm00IHdoaWNoIGlzIHVzZWQgdG8gZGV2ZWxvcCBcCittb25pdG9yaW5nIHRvb2xzIGV4cGxvaXRpbmcgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgZXZlbnRzIHN1Y2ggYXMgdGhvc2UgXAorcHJvdmlkZWQgYnkgdGhlIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBvZiBtb2Rlcm4gcHJvY2Vzc29ycy4iCitIT01FUEFHRSA9ICJodHRwOi8vcGVyZm1vbjIuc291cmNlZm9yZ2UubmV0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xNDQ4MjImYXRpZD03NTk5NTMmc291cmNlPW5hdmJhciIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0wZGU0ODhmM2JkNDQyNGUzMDhlMmUzOTljYjk5Yzc4OCIKKworU0VDVElPTiA9ICJkZXZlbCIKKworQ09NUEFUSUJMRV9IT1NUID0gInBvd2VycGM2NCIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3BlcmZtb24yLyR7QlBOfS9saWJwZm0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtTWFrZWZpbGUtQWRkLUxERkxBR1MtdmFyaWFibGUtdG8tU0xERkxBR1MucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwNzdiOTAyMjQ0MGU0OTUxZDk2ZjJkMGU3M2JkNDg3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjVhYjFlNWIwNDcyNTUwZjkwMzdhODgwMDgzNGY2YmMzYjkyNzY5MDA3MGY2OWZhYzBiNjcyODRiNGIwNWZkNWYiCisKK0VYVFJBX09FTUFLRSA9ICJERVNURElSPVwiJHtEfVwiIFBSRUZJWD1cIiR7cHJlZml4fVwiIExJQkRJUj1cIiR7bGliZGlyfVwiIExEQ09ORklHPVwidHJ1ZVwiIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjID0gIiBBUkNIPVwicG93ZXJwY1wiIgorRVhUUkFfT0VNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIEFSQ0g9XCJwb3dlcnBjXCIgQklUTU9ERT1cIjY0XCIiCisKK1MgPSAiJHtXT1JLRElSfS9saWJwZm0tJHtQVn0iCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWZpcm13YXJlL2xpbnV4LWZpcm13YXJlX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjgxMTdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1maXJtd2FyZS9saW51eC1maXJtd2FyZV9naXQuYmIKQEAgLTAsMCArMSw0MzMgQEAKK1NVTU1BUlkgPSAiRmlybXdhcmUgZmlsZXMgZm9yIHVzZSB3aXRoIExpbnV4IGtlcm5lbCIKK1NFQ1RJT04gPSAia2VybmVsIgorCitMSUNFTlNFID0gIlwKKyAgICBGaXJtd2FyZS1BYmlsaXMgXAorICAgICYgRmlybXdhcmUtYWdlcmUgXAorICAgICYgRmlybXdhcmUtYW1kLXVjb2RlIFwKKyAgICAmIEZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCBcCisgICAgJiBGaXJtd2FyZS1jYTAxMzIgXAorICAgICYgRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1jdzEyMDAgXAorICAgICYgRmlybXdhcmUtZGliMDcwMCBcCisgICAgJiBGaXJtd2FyZS1lbmVfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtZndfc3N0XzBmMjggXAorICAgICYgRmlybXdhcmUtZ283MDA3IFwKKyAgICAmIEZpcm13YXJlLWkyNDAwbSBcCisgICAgJiBGaXJtd2FyZS1pYnRfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtaXQ5MTN4IFwKKyAgICAmIEZpcm13YXJlLWl3bHdpZmlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtSW50Y1NTVDIgXAorICAgICYgRmlybXdhcmUtTWFydmVsbCBcCisgICAgJiBGaXJtd2FyZS1td2w4MzM1IFwKKyAgICAmIEZpcm13YXJlLW15cmkxMGdlX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLU9MUEMgXAorICAgICYgRmlybXdhcmUtcGhhbmZ3IFwKKyAgICAmIEZpcm13YXJlLXFhdF9kaDg5NXhjY19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1xbGEyeHh4IFwKKyAgICAmIEZpcm13YXJlLXI4YTc3OXhfdXNiMyBcCisgICAgJiBGaXJtd2FyZS1yYWRlb24gXAorICAgICYgRmlybXdhcmUtcmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1yYWxpbmstZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS10ZGE3NzA2LWZpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXRpLWNvbm5lY3Rpdml0eSBcCisgICAgJiBGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS12aWFfdnQ2NjU2IFwKKyAgICAmIEZpcm13YXJlLXdsMTI1MSBcCisgICAgJiBGaXJtd2FyZS14YzQwMDAgXAorICAgICYgRmlybXdhcmUteGM1MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMGMgXAorICAgICYgRmlybXdhcmUtc2lhbm8gXAorIgorCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vTElDRU5DRS5BYmlsaXM7bWQ1PWI1ZWUzZjQxMDc4MGU1NjcxMWFkNDhlYWRjMjJiOGJjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5hZ2VyZTttZDU9YWYwMTMzZGU2YjRhOWIyNTIyZGVmZDVmMTg4YWZkMzEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmF0aGVyb3NfZmlybXdhcmU7bWQ1PTMwYTE0Yzc4MjNiZWVkYWM5ZmEzOWM2NGZkZDAxYTEzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5icm9hZGNvbV9iY200M3h4O21kNT0zMTYwYzE0ZGY3MjI4ODkxYjg2ODA2MGUxOTUxZGZiYyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY2EwMTMyO21kNT0yMDliMzNlNjZlZTViZTA0NjFmMTNkMzFkYTM5MjE5OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuY2hlbHNpb19maXJtd2FyZTttZDU9ODE5YWE4YzNmYTQ1M2YxYjI1OGVkOGQxNjhhOWQ5MDMgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmN3MTIwMDttZDU9ZjBmNzcwODY0ZTdhODQ0NGE1YzVhYTlkMTJhM2E3ZWQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmVuZV9maXJtd2FyZTttZDU9ZWQ2N2YwZjYyZjhmNzk4MTMwYzI5NjcyMGI3ZDM5MjEgXAorICAgIGZpbGU6Ly9MSUNFTkNFLmZ3X3NzdF8wZjI4O21kNT02MzUzOTMxYzk4OGFkNTI4MThhZTczM2FjNjFjZDI5MyBcCisgICAgZmlsZTovL0xJQ0VOQ0UuZ283MDA3O21kNT1jMGJiOWY2YWFhYmE1NWIwNTI5ZWU5YjMwYWE2NmJlYiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaTI0MDBtO21kNT0xNGI5MDE5NjllMjNjNDE4ODEzMjdjMGQ5ZTRiN2QzNiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaWJ0X2Zpcm13YXJlO21kNT1mZGJlZTFkZGZlMGZiN2FiMGIyZmNkNmI0NTRhMzY2YiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaXQ5MTN4O21kNT0xZmJmNzI3YmZiNmE5NDk4MTBjNGRiZmE3ZTZjZTRmOCBcCisgICAgZmlsZTovL0xJQ0VOQ0UuaXdsd2lmaV9maXJtd2FyZTttZDU9M2ZkODQyOTExZWE5M2MyOWNkMzI2NzlhYTIzZTFjODggXAorICAgIGZpbGU6Ly9MSUNFTkNFLkludGNTU1QyO21kNT05ZTdkOGJlYTc3NjEyZDdjYzdkOWU5YjU0YjYyMzA2MiBcCisgICAgZmlsZTovL0xJQ0VOQ0UuTWFydmVsbDttZDU9OWRkZWExNzM0YTRiYWYzYzc4ZDg0NTE1MWY0MmEzN2EgXAorICAgIGZpbGU6Ly9MSUNFTkNFLm13bDgzMzU7bWQ1PTlhNjI3MWVlMGU2NDQ0MDRiMmZmM2M2MWZkMDcwOTgzIFwKKyAgICBmaWxlOi8vTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZTttZDU9NDJlMzJmYjg5ZjZiOTU5Y2EyMjJlMjVhYzhkZjhmZWQgXAorICAgIGZpbGU6Ly9MSUNFTkNFLk9MUEM7bWQ1PTViOTE3ZjlkOGMwNjE5OTFiZTRmNmY1ZjEwODcxOWNkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5waGFuZnc7bWQ1PTk1NGRjZWMwZTA1MWY5NDA5ODEyYjU2MWVhNzQzYmZhIFwKKyAgICBmaWxlOi8vTElDRU5DRS5xYXRfZGg4OTV4Y2NfZmlybXdhcmU7bWQ1PTllN2Q4YmVhNzc2MTJkN2NjN2Q5ZTliNTRiNjIzMDYyIFwKKyAgICBmaWxlOi8vTElDRU5DRS5xbGEyeHh4O21kNT1mNWNlODUyOWVjNWMxN2NiN2Y5MTFkMjcyMWQ5MGU5MSBcCisgICAgZmlsZTovL0xJQ0VOQ0UucjhhNzc5eF91c2IzO21kNT00YzE2NzE2NTYxNTMwMjVkNzA3NjEwNWE1ZGE3ZTQ5OCBcCisgICAgZmlsZTovL0xJQ0VOQ0UucmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZTttZDU9NzI4ZjFhODVmZDUzZmQ2N2ZhOGQ3YWZiMDgwYmM0MzUgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQ7bWQ1PWFiMmMyNjkyNzdjNDU0NzZmYjQ0OTY3MzkxMWEyZGZkIFwKKyAgICBmaWxlOi8vTElDRU5DRS5ydGx3aWZpX2Zpcm13YXJlLnR4dDttZDU9MDBkMDZjZmQzZWRkZDVhMjY5ODk0OGVhZDJhZDU0YTUgXAorICAgIGZpbGU6Ly9MSUNFTkNFLnRkYTc3MDYtZmlybXdhcmUudHh0O21kNT04MzU5OTdjZjVlM2MxMzFkMGRkZGQ2OTVjN2Q5MTAzZSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudGktY29ubmVjdGl2aXR5O21kNT0xODZlN2E0M2NmNmMyNzQyODNhZDgxMjcyY2EyMThlYSBcCisgICAgZmlsZTovL0xJQ0VOQ0UudWVhZ2xlLWF0bTQtZmlybXdhcmU7bWQ1PTRlZDdlYTZiNTA3Y2NjNTgzYjlkNTk0NDE3NzE0MTE4IFwKKyAgICBmaWxlOi8vTElDRU5DRS52aWFfdnQ2NjU2O21kNT1lNDE1OTY5NGNiYTQyZDQzNzdhOTEyZTc4YTZlODUwZiBcCisgICAgZmlsZTovL0xJQ0VOQ0Uud2wxMjUxO21kNT1hZDNmODE5MjJiYjllMTk3MDE0YmIxODcyODlkM2I1YiBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM0MDAwO21kNT0wZmY1MWQyZGM0OWZjZTA0ODE0YzkxNTUwODEwOTJmMCBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM1MDAwO21kNT0xZTE3MGMxMzE3NTMyM2MzMmM3ZjRkMDk5OGQ1M2Y2NiBcCisgICAgZmlsZTovL0xJQ0VOQ0UueGM1MDAwYzttZDU9MTJiMDJlZmEzMDQ5ZGI2NWQ1MjRhZWI0MThkZDg3Y2EgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmFtZC11Y29kZTttZDU9M2EwZGU0NTEyNTNjYzFlZGJmMzBhM2M2MjFlZmZlZTMgXAorICAgIGZpbGU6Ly9MSUNFTlNFLmRpYjA3MDA7bWQ1PWY3NDExODI1YzhhNTU1YTFhM2U1ZWFiOWNhNzczNDMxIFwKKyAgICBmaWxlOi8vTElDRU5TRS5yYWRlb247bWQ1PTZjN2Y5N2M2YzYyYmRkOTU5NmQwMjM4YmIyMDUxMThjIFwKKyAgICBmaWxlOi8vTElDRU5DRS5zaWFubzttZDU9NjAyYzc5YWUzZjk4ZjFlNzNkODgwZmQ5Zjk0MGE0MTggXAorIgorCisjIFRoZXNlIGFyZSBub3QgY29tbW9uIGxpY2Vuc2VzLCBzZXQgTk9fR0VORVJJQ19MSUNFTlNFIGZvciB0aGVtCisjIHNvIHRoYXQgdGhlIGxpY2Vuc2UgZmlsZXMgd2lsbCBiZSBjb3BpZWQgZnJvbSBmZXRjaGVkIHNvdXJjZQorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLUFiaWxpc10gPSAiTElDRU5DRS5BYmlsaXMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYWdlcmVdID0gIkxJQ0VOQ0UuYWdlcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZV0gPSAiTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWJyb2FkY29tX2JjbTQzeHhdID0gIkxJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jYTAxMzJdID0gIkxJQ0VOQ0UuY2EwMTMyIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWNoZWxzaW9fZmlybXdhcmVdID0gIkxJQ0VOQ0UuY2hlbHNpb19maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1jdzEyMDBdID0gIkxJQ0VOQ0UuY3cxMjAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWVuZV9maXJtd2FyZV0gPSAiTElDRU5DRS5lbmVfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZndfc3N0XzBmMjhdID0gIkxJQ0VOQ0UuZndfc3N0XzBmMjgiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZ283MDA3XSA9ICJMSUNFTkNFLmdvNzAwNyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pMjQwMG1dID0gIkxJQ0VOQ0UuaTI0MDBtIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWlidF9maXJtd2FyZV0gPSAiTElDRU5DRS5pYnRfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtaXQ5MTN4XSA9ICJMSUNFTkNFLml0OTEzeCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlXSA9ICJMSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtSW50Y1NTVDJdID0gIkxJQ0VOQ0UuSW50Y1NTVDIiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtTWFydmVsbF0gPSAiTElDRU5DRS5NYXJ2ZWxsIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLW13bDgzMzVdID0gIkxJQ0VOQ0UubXdsODMzNSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1teXJpMTBnZV9maXJtd2FyZV0gPSAiTElDRU5DRS5teXJpMTBnZV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1PTFBDXSA9ICJMSUNFTkNFLk9MUEMiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtcGhhbmZ3XSA9ICJMSUNFTkNFLnBoYW5mdyIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1xYXRfZGg4OTV4Y2NfZmlybXdhcmVdID0gIkxJQ0VOQ0UucWF0X2RoODk1eGNjX2Zpcm13YXJlIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXFsYTJ4eHhdID0gIkxJQ0VOQ0UucWxhMnh4eCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yOGE3Nzl4X3VzYjNdID0gIkxJQ0VOQ0UucjhhNzc5eF91c2IzIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmVdID0gIkxJQ0VOQ0UucmFsaW5rX2FfbWVkaWF0ZWtfY29tcGFueV9maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1yYWxpbmstZmlybXdhcmVdID0gIkxJQ0VOQ0UucmFsaW5rLWZpcm13YXJlLnR4dCIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlXSA9ICJMSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXRkYTc3MDYtZmlybXdhcmVdID0gIkxJQ0VOQ0UudGRhNzcwNi1maXJtd2FyZS50eHQiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtdGktY29ubmVjdGl2aXR5XSA9ICJMSUNFTkNFLnRpLWNvbm5lY3Rpdml0eSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZV0gPSAiTElDRU5DRS51ZWFnbGUtYXRtNC1maXJtd2FyZSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS12aWFfdnQ2NjU2XSA9ICJMSUNFTkNFLnZpYV92dDY2NTYiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtd2wxMjUxXSA9ICJMSUNFTkNFLndsMTI1MSIKK05PX0dFTkVSSUNfTElDRU5TRVtGaXJtd2FyZS14YzQwMDBdID0gIkxJQ0VOQ0UueGM0MDAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXhjNTAwMF0gPSAiTElDRU5DRS54YzUwMDAiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUteGM1MDAwY10gPSAiTElDRU5DRS54YzUwMDBjIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLWFtZC11Y29kZV0gPSAiTElDRU5TRS5hbWQtdWNvZGUiCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtZGliMDcwMF0gPSAiTElDRU5TRS5kaWIwNzAwIgorTk9fR0VORVJJQ19MSUNFTlNFW0Zpcm13YXJlLXJhZGVvbl0gPSAiTElDRU5TRS5yYWRlb24iCitOT19HRU5FUklDX0xJQ0VOU0VbRmlybXdhcmUtc2lhbm9dID0gIkxJQ0VOQ0Uuc2lhbm8iCisKK1NSQ1JFViA9ICI3NWNjM2VmOGJhNjcxMmZkNzJjMDczYjE3YTc5MDI4MjEzNmNjNzQzIgorUEUgPSAiMSIKK1BWID0gIjAuMCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZmlybXdhcmUvbGludXgtZmlybXdhcmUuZ2l0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2ggdXBkYXRlLWFsdGVybmF0aXZlcworCitDTEVBTkJST0tFTiA9ICIxIgorCitkb19jb21waWxlKCkgeworCToKK30KKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICAke0R9L2xpYi9maXJtd2FyZS8KKwljcCAtciAqICR7RH0vbGliL2Zpcm13YXJlLworCisJIyBBdm9pZCBNYWtlZmlsZSB0byBiZSBkZXBsb3llZAorCXJtICR7RH0vbGliL2Zpcm13YXJlL01ha2VmaWxlCisKKwkjIFJlbW92ZSB1bmJ1aWxkIGZpcm13YXJlIHdoaWNoIG5lZWRzIGNtYWtlIGFuZCBiYXNoCisJcm0gJHtEfS9saWIvZmlybXdhcmUvY2FybDkxNzBmdyAtcmYKKworCSMgUmVtb3ZlIHBvaW50bGVzcyBiYXNoIHNjcmlwdAorCXJtICR7RH0vbGliL2Zpcm13YXJlL2NvbmZpZ3VyZQorCisJIyBMaWJlcnRhcyBzZDg2ODYKKwlsbiAtc2YgbGliZXJ0YXMvc2Q4Njg2X3Y5LmJpbiAke0R9L2xpYi9maXJtd2FyZS9zZDg2ODYuYmluCisJbG4gLXNmIGxpYmVydGFzL3NkODY4Nl92OV9oZWxwZXIuYmluICR7RH0vbGliL2Zpcm13YXJlL3NkODY4Nl9oZWxwZXIuYmluCisKKwkjIGZpeHVwIHdsMTJ4eCBsb2NhdGlvbiwgYWZ0ZXIgMi42LjM3IHRoZSBrZXJuZWwgc2VhcmNoZXMgYSBkaWZmZXJlbnQgbG9jYXRpb24gZm9yIGl0CisJKCBjZCAke0R9L2xpYi9maXJtd2FyZSA7IGxuIC1zZiB0aS1jb25uZWN0aXZpdHkvKiAuICkKK30KKworCitQQUNLQUdFUyA9KyAiJHtQTn0tcmFsaW5rLWxpY2Vuc2UgJHtQTn0tcmFsaW5rIFwKKyAgICAgICAgICAgICAke1BOfS1yYWRlb24tbGljZW5zZSAke1BOfS1yYWRlb24gXAorICAgICAgICAgICAgICR7UE59LW1hcnZlbGwtbGljZW5zZSAke1BOfS1zZDg2ODYgJHtQTn0tc2Q4Nzg3ICR7UE59LXNkODc5NyBcCisgICAgICAgICAgICAgJHtQTn0tdGktY29ubmVjdGl2aXR5LWxpY2Vuc2UgJHtQTn0td2wxMnh4ICR7UE59LXdsMTh4eCBcCisgICAgICAgICAgICAgJHtQTn0tdnQ2NjU2LWxpY2Vuc2UgJHtQTn0tdnQ2NjU2IFwKKyAgICAgICAgICAgICAke1BOfS1ydGwtbGljZW5zZSAke1BOfS1ydGw4MTkyY3UgJHtQTn0tcnRsODE5MmNlICR7UE59LXJ0bDgxOTJzdSBcCisgICAgICAgICAgICAgJHtQTn0tYnJvYWRjb20tbGljZW5zZSAke1BOfS1iY200MzI5ICR7UE59LWJjbTQzMzAgJHtQTn0tYmNtNDMzNCBcCisgICAgICAgICAgICAgJHtQTn0tYXRoZXJvcy1saWNlbnNlICR7UE59LWFyOTE3MCAke1BOfS1hcjNrICR7UE59LWF0aDZrICR7UE59LWF0aDlrIFwKKyAgICAgICAgICAgICBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS1saWNlbnNlICR7UE59LWl3bHdpZmktMTM1LTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktMzE2MC03ICR7UE59LWl3bHdpZmktMzE2MC04ICR7UE59LWl3bHdpZmktMzE2MC05IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTYwMDAtNCAke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSAke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS02MDAwZzJiLTUgJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgXAorICAgICAgICAgICAgICR7UE59LWl3bHdpZmktNjA1MC00ICR7UE59LWl3bHdpZmktNjA1MC01IFwKKyAgICAgICAgICAgICAke1BOfS1pd2x3aWZpLTcyNjAtNyAke1BOfS1pd2x3aWZpLTcyNjAtOCAke1BOfS1pd2x3aWZpLTcyNjAtOSBcCisgICAgICAgICAgICAgJHtQTn0taXdsd2lmaS03MjY1LTggJHtQTn0taXdsd2lmaS03MjY1LTkgXAorICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAke1BOfS1saWNlbnNlIFwKKyAgICAgICAgICAgICAiCisKKyMgRm9yIGF0aGVyb3MKK0xJQ0VOU0VfJHtQTn0tYXI5MTcwID0gIkZpcm13YXJlLWF0aGVyb3NfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LWFyM2sgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXRoNmsgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKK0xJQ0VOU0VfJHtQTn0tYXRoOWsgPSAiRmlybXdhcmUtYXRoZXJvc19maXJtd2FyZSIKKworRklMRVNfJHtQTn0tYXRoZXJvcy1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS5hdGhlcm9zX2Zpcm13YXJlIgorRklMRVNfJHtQTn0tYXI5MTcwID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXI5MTcwKi5mdyBcCisiCitGSUxFU18ke1BOfS1hcjNrID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXIzayBcCisiCitGSUxFU18ke1BOfS1hdGg2ayA9ICIgXAorICAvbGliL2Zpcm13YXJlL2F0aDZrIFwKKyIKK0ZJTEVTXyR7UE59LWF0aDlrID0gIiBcCisgIC9saWIvZmlybXdhcmUvYXI5MjcxLmZ3IFwKKyAgL2xpYi9maXJtd2FyZS9hcjcwMTAqLmZ3IFwKKyAgL2xpYi9maXJtd2FyZS9odGNfOTI3MS5mdyBcCisgIC9saWIvZmlybXdhcmUvaHRjXzcwMTAuZncgXAorIgorCitSREVQRU5EU18ke1BOfS1hcjkxNzAgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWFyM2sgKz0gIiR7UE59LWF0aGVyb3MtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LWF0aDZrICs9ICIke1BOfS1hdGhlcm9zLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1hdGg5ayArPSAiJHtQTn0tYXRoZXJvcy1saWNlbnNlIgorCisjIEZvciByYWxpbmsKK0xJQ0VOU0VfJHtQTn0tcmFsaW5rID0gIkZpcm13YXJlLXJhbGluay1maXJtd2FyZSIKKworRklMRVNfJHtQTn0tcmFsaW5rLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLnJhbGluay1maXJtd2FyZS50eHQiCitGSUxFU18ke1BOfS1yYWxpbmsgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9ydCouYmluIFwKKyIKKworUkRFUEVORFNfJHtQTn0tcmFsaW5rICs9ICIke1BOfS1yYWxpbmstbGljZW5zZSIKKworIyBGb3IgcmFkZW9uCitMSUNFTlNFXyR7UE59LXJhZGVvbiA9ICJGaXJtd2FyZS1yYWRlb24iCisKK0ZJTEVTXyR7UE59LXJhZGVvbi1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5TRS5yYWRlb24iCitGSUxFU18ke1BOfS1yYWRlb24gPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9yYWRlb24gXAorIgorCitSREVQRU5EU18ke1BOfS1yYWRlb24gKz0gIiR7UE59LXJhZGVvbi1saWNlbnNlIgorCisjIEZvciBtYXJ2ZWxsCitMSUNFTlNFXyR7UE59LXNkODY4NiA9ICJGaXJtd2FyZS1NYXJ2ZWxsIgorTElDRU5TRV8ke1BOfS1zZDg3ODcgPSAiRmlybXdhcmUtTWFydmVsbCIKK0xJQ0VOU0VfJHtQTn0tc2Q4Nzk3ID0gIkZpcm13YXJlLU1hcnZlbGwiCisKK0ZJTEVTXyR7UE59LW1hcnZlbGwtbGljZW5zZSA9ICIvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuTWFydmVsbCIKK0ZJTEVTXyR7UE59LXNkODY4NiA9ICIgXAorICAvbGliL2Zpcm13YXJlL2xpYmVydGFzL3NkODY4Nl92OSogXAorICAvbGliL2Zpcm13YXJlL3NkODY4NiogXAorIgorRklMRVNfJHtQTn0tc2Q4Nzg3ID0gIiBcCisgIC9saWIvZmlybXdhcmUvbXJ2bC9zZDg3ODdfdWFwc3RhLmJpbiBcCisiCitGSUxFU18ke1BOfS1zZDg3OTcgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9tcnZsL3NkODc5N191YXBzdGEuYmluIFwKKyIKKworUkRFUEVORFNfJHtQTn0tc2Q4Njg2ICs9ICIke1BOfS1tYXJ2ZWxsLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1zZDg3ODcgKz0gIiR7UE59LW1hcnZlbGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXNkODc5NyArPSAiJHtQTn0tbWFydmVsbC1saWNlbnNlIgorCisjIEZvciBydGwKK0xJQ0VOU0VfJHtQTn0tcnRsODE5MmN1ID0gIkZpcm13YXJlLXJ0bHdpZmlfZmlybXdhcmUiCitMSUNFTlNFXyR7UE59LXJ0bDgxOTJjZSA9ICJGaXJtd2FyZS1ydGx3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1ydGw4MTkyc3UgPSAiRmlybXdhcmUtcnRsd2lmaV9maXJtd2FyZSIKKworRklMRVNfJHtQTn0tcnRsLWxpY2Vuc2UgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9MSUNFTkNFLnJ0bHdpZmlfZmlybXdhcmUudHh0IFwKKyIKK0ZJTEVTXyR7UE59LXJ0bDgxOTJjdSA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0bHdpZmkvcnRsODE5MmN1ZncuYmluIFwKKyIKK0ZJTEVTXyR7UE59LXJ0bDgxOTJjZSA9ICIgXAorICAvbGliL2Zpcm13YXJlL3J0bHdpZmkvcnRsODE5MmNmdy5iaW4gXAorIgorRklMRVNfJHtQTn0tcnRsODE5MnN1ID0gIiBcCisgIC9saWIvZmlybXdhcmUvcnRsd2lmaS9ydGw4NzEydS5iaW4gXAorIgorCitSREVQRU5EU18ke1BOfS1ydGw4MTkyY2UgKz0gIiR7UE59LXJ0bC1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tcnRsODE5MmN1ICs9ICIke1BOfS1ydGwtbGljZW5zZSIKK1JERVBFTkRTXyR7UE59LXJ0bDgxOTJzdSA9ICIke1BOfS1ydGwtbGljZW5zZSIKKworIyBGb3IgdGktY29ubmVjdGl2aXR5CitMSUNFTlNFXyR7UE59LXdsMTJ4eCA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCitMSUNFTlNFXyR7UE59LXdsMTh4eCA9ICJGaXJtd2FyZS10aS1jb25uZWN0aXZpdHkiCisKK0ZJTEVTXyR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS50aS1jb25uZWN0aXZpdHkiCitGSUxFU18ke1BOfS13bDEyeHggPSAiIFwKKyAgL2xpYi9maXJtd2FyZS93bDEyKiBcCisgIC9saWIvZmlybXdhcmUvVEkqIFwKKyAgL2xpYi9maXJtd2FyZS90aS1jb25uZWN0aXZpdHkgXAorIgorRklMRVNfJHtQTn0td2wxOHh4ID0gIiBcCisgIC9saWIvZmlybXdhcmUvd2wxOCogXAorICAvbGliL2Zpcm13YXJlL1RJKiBcCisgIC9saWIvZmlybXdhcmUvdGktY29ubmVjdGl2aXR5IFwKKyIKKworUkRFUEVORFNfJHtQTn0td2wxMnh4ID0gIiR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0td2wxOHh4ID0gIiR7UE59LXRpLWNvbm5lY3Rpdml0eS1saWNlbnNlIgorCisjIEZvciB2dDY2NTYKK0xJQ0VOU0VfJHtQTn0tdnQ2NjU2ID0gIkZpcm13YXJlLXZpYV92dDY2NTYiCisKK0ZJTEVTXyR7UE59LXZ0NjY1Ni1saWNlbnNlID0gIi9saWIvZmlybXdhcmUvTElDRU5DRS52aWFfdnQ2NjU2IgorRklMRVNfJHtQTn0tdnQ2NjU2ID0gIiBcCisgIC9saWIvZmlybXdhcmUvdm50d3VzYi5mdyBcCisiCisKK1JERVBFTkRTXyR7UE59LXZ0NjY1NiA9ICIke1BOfS12dDY2NTYtbGljZW5zZSIKKworIyBGb3IgYnJvYWRjb20KKyMKKyMgV0FSTklORzogVGhlIEFMVEVSTkFUSVZFXyogdmFyaWFibGVzIGFyZSBub3QgdXNpbmcgJHtQTn0gYmVjYXVzZSBvZgorIyBhIGJ1ZyBpbiBiaXRiYWtlOyB3aGVuIHRoaXMgaXMgZml4ZWQgYW5kIGJpdGJha2UgbGVhcm5zIGhvdyB0byBwcm9wZXIKKyMgcGFzcyB2YXJpYWJsZSBmbGFncyB3aXRoIGV4cGFuc2lvbiB3ZSBjYW4gcmV3b3JrIHRoaXMgcGF0Y2guCisKK0xJQ0VOU0VfJHtQTn0tYmNtNDMyOSA9ICJGaXJtd2FyZS1icm9hZGNvbV9iY200M3h4IgorTElDRU5TRV8ke1BOfS1iY200MzMwID0gIkZpcm13YXJlLWJyb2FkY29tX2JjbTQzeHgiCitMSUNFTlNFXyR7UE59LWJjbTQzMzQgPSAiRmlybXdhcmUtYnJvYWRjb21fYmNtNDN4eCIKKworRklMRVNfJHtQTn0tYnJvYWRjb20tbGljZW5zZSA9ICIgXAorICAvbGliL2Zpcm13YXJlL0xJQ0VOQ0UuYnJvYWRjb21fYmNtNDN4eCBcCisiCitGSUxFU18ke1BOfS1iY200MzI5ID0gIiBcCisgIC9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4gXAorIgorRklMRVNfJHtQTn0tYmNtNDMzMCA9ICIgXAorICAvbGliL2Zpcm13YXJlL2JyY20vYnJjbWZtYWM0MzMwLXNkaW8uYmluIFwKKyIKK0ZJTEVTXyR7UE59LWJjbTQzMzQgPSAiIFwKKyAgL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbiBcCisiCisKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVticmNtZm1hYy1zZGlvLmJpbl0gPSAiL2xpYi9maXJtd2FyZS9icmNtL2JyY21mbWFjLXNkaW8uYmluIgorCitBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzM0ID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMzRbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzQtc2Rpby5iaW4iCitBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzI5ID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMjlbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMjktc2Rpby5iaW4iCitBTFRFUk5BVElWRV9saW51eC1maXJtd2FyZS1iY200MzMwID0gImJyY21mbWFjLXNkaW8uYmluIgorQUxURVJOQVRJVkVfVEFSR0VUX2xpbnV4LWZpcm13YXJlLWJjbTQzMzBbYnJjbWZtYWMtc2Rpby5iaW5dID0gIi9saWIvZmlybXdhcmUvYnJjbS9icmNtZm1hYzQzMzAtc2Rpby5iaW4iCisKK1JERVBFTkRTXyR7UE59LWJjbTQzMjkgKz0gIiR7UE59LWJyb2FkY29tLWxpY2Vuc2UiCitSREVQRU5EU18ke1BOfS1iY200MzMwICs9ICIke1BOfS1icm9hZGNvbS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0tYmNtNDMzNCArPSAiJHtQTn0tYnJvYWRjb20tbGljZW5zZSIKKworIyBGb3IgaXdsd2lmaQorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTEzNS02ICAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTMxNjAtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDAtNCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNiA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwNTAtNCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTYwNTAtNSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtNyAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjAtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjUtOCAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorTElDRU5TRV8ke1BOfS1pd2x3aWZpLTcyNjUtOSAgICA9ICJGaXJtd2FyZS1pd2x3aWZpX2Zpcm13YXJlIgorCitGSUxFU18ke1BOfS1pd2x3aWZpLWxpY2Vuc2UgPSAiL2xpYi9maXJtd2FyZS9MSUNFTkNFLml3bHdpZmlfZmlybXdhcmUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTEzNS02ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0xMzUtNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktMzE2MC03ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS0zMTYwLTcudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTMxNjAtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktMzE2MC04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS0zMTYwLTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTMxNjAtOS51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMC00ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwLTQudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmEtNSA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYS01LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwMDBnMmEtNi51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjAwMGcyYi01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDAwZzJiLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTYwMDBnMmItNiA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNjAwMGcyYi02LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS02MDUwLTQgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTYwNTAtNC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNjA1MC01ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS02MDUwLTUudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjAtNyA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2MC03LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjYwLTggPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjAtOC51Y29kZSIKK0ZJTEVTXyR7UE59LWl3bHdpZmktNzI2MC05ID0gIi9saWIvZmlybXdhcmUvaXdsd2lmaS03MjYwLTkudWNvZGUiCitGSUxFU18ke1BOfS1pd2x3aWZpLTcyNjUtOCA9ICIvbGliL2Zpcm13YXJlL2l3bHdpZmktNzI2NS04LnVjb2RlIgorRklMRVNfJHtQTn0taXdsd2lmaS03MjY1LTkgPSAiL2xpYi9maXJtd2FyZS9pd2x3aWZpLTcyNjUtOS51Y29kZSIKKworUkRFUEVORFNfJHtQTn0taXdsd2lmaS0xMzUtNiAgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS0zMTYwLTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwLTQgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTYgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJhLTUgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDAwZzJiLTYgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDUwLTQgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS02MDUwLTUgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTcgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjYwLTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjY1LTggICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorUkRFUEVORFNfJHtQTn0taXdsd2lmaS03MjY1LTkgICAgPSAiJHtQTn0taXdsd2lmaS1saWNlbnNlIgorCisjIEZvciBvdGhlciBmaXJtd2FyZXMKKyMgTWF5YmUgc3BsaXQgb3V0IHRvIHNlcGFyYXRlIHBhY2thZ2VzIHdoZW4gbmVlZGVkLgorTElDRU5TRV8ke1BOfSA9ICJcCisgICAgRmlybXdhcmUtQWJpbGlzIFwKKyAgICAmIEZpcm13YXJlLWFnZXJlIFwKKyAgICAmIEZpcm13YXJlLWFtZC11Y29kZSBcCisgICAgJiBGaXJtd2FyZS1jYTAxMzIgXAorICAgICYgRmlybXdhcmUtY2hlbHNpb19maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS1jdzEyMDAgXAorICAgICYgRmlybXdhcmUtZGliMDcwMCBcCisgICAgJiBGaXJtd2FyZS1lbmVfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtZndfc3N0XzBmMjggXAorICAgICYgRmlybXdhcmUtZ283MDA3IFwKKyAgICAmIEZpcm13YXJlLWkyNDAwbSBcCisgICAgJiBGaXJtd2FyZS1pYnRfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtaXQ5MTN4IFwKKyAgICAmIEZpcm13YXJlLW13bDgzMzUgXAorICAgICYgRmlybXdhcmUtbXlyaTEwZ2VfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtT0xQQyBcCisgICAgJiBGaXJtd2FyZS1waGFuZncgXAorICAgICYgRmlybXdhcmUtcWF0X2RoODk1eGNjX2Zpcm13YXJlIFwKKyAgICAmIEZpcm13YXJlLXFsYTJ4eHggXAorICAgICYgRmlybXdhcmUtcjhhNzc5eF91c2IzIFwKKyAgICAmIEZpcm13YXJlLXJhbGlua19hX21lZGlhdGVrX2NvbXBhbnlfZmlybXdhcmUgXAorICAgICYgRmlybXdhcmUtdGRhNzcwNi1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS11ZWFnbGUtYXRtNC1maXJtd2FyZSBcCisgICAgJiBGaXJtd2FyZS13bDEyNTEgXAorICAgICYgRmlybXdhcmUteGM0MDAwIFwKKyAgICAmIEZpcm13YXJlLXhjNTAwMCBcCisgICAgJiBGaXJtd2FyZS14YzUwMDBjIFwKKyIKK0ZJTEVTXyR7UE59LWxpY2Vuc2UgKz0gIi9saWIvZmlybXdhcmUvTElDRU4qIgorRklMRVNfJHtQTn0gKz0gIi9saWIvZmlybXdhcmUvKiIKK1JERVBFTkRTXyR7UE59ICs9ICIke1BOfS1saWNlbnNlIgorCisjIE1ha2UgbGludXgtZmlybXdhcmUgZGVwZW5kIG9uIGFsbCBvZiB0aGUgc3BsaXQtb3V0IHBhY2thZ2VzLgorcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQgKCkgeworICAgIGZpcm13YXJlX3BrZ3MgPSBvZS51dGlscy5wYWNrYWdlc19maWx0ZXJfb3V0X3N5c3RlbShkKQorICAgIGQuYXBwZW5kVmFyKCdSREVQRU5EU19saW51eC1maXJtd2FyZScsICcgJyArICcgJy5qb2luKGZpcm13YXJlX3BrZ3MpKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY2YmMxZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgtbGliYy1oZWFkZXJzL2xpbnV4LWxpYmMtaGVhZGVycy5pbmMKQEAgLTAsMCArMSw3NSBAQAorU1VNTUFSWSA9ICJTYW5pdGl6ZWQgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIGZvciB0aGUgQyBsaWJyYXJ5J3MgdXNlIgorU0VDVElPTiA9ICJkZXZlbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMgICAgICAgICAgICAgICAgICAgICAgICBQTEVBU0UgUkVBRCAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgWW91J3JlIHByb2JhYmx5IGxvb2tpbmcgaGVyZSB0aGlua2luZyB5b3UgbmVlZCB0byBjcmVhdGUgc29tZSBuZXcgY29weQorIyBvZiBsaW51eC1saWJjLWhlYWRlcnMgc2luY2UgeW91IGhhdmUgeW91ciBvd24gY3VzdG9tIGtlcm5lbC4gVG8gcHV0IAorIyB0aGlzIHNpbXBseSwgeW91IERPIE5PVC4KKyMKKyMgV2h5PyBUaGVzZSBoZWFkZXJzIGFyZSB1c2VkIHRvIGJ1aWxkIHRoZSBsaWJjLiBJZiB5b3UgY3VzdG9taXNlIHRoZSAKKyMgaGVhZGVycyB5b3UgYXJlIGN1c3RvbWlzaW5nIHRoZSBsaWJjIGFuZCB0aGUgbGliYyBiZWNvbWVzIG1hY2hpbmUKKyMgc3BlY2lmaWMuIE1vc3QgcGVvcGxlIGRvIG5vdCBhZGQgY3VzdG9tIGxpYmMgZXh0ZW5zaW9ucyB0byB0aGUga2VybmVsCisjIGFuZCBoYXZlIGEgbWFjaGluZSBzcGVjaWZpYyBsaWJjLgorIworIyBCdXQgeW91IGhhdmUgc29tZSBrZXJuZWwgaGVhZGVycyB5b3UgbmVlZCBmb3Igc29tZSBkcml2ZXI/IFRoYXQgaXMgZmluZQorIyBidXQgZ2V0IHRoZW0gZnJvbSBTVEFHSU5HX0tFUk5FTF9ESVIgd2hlcmUgdGhlIGtlcm5lbCBpbnN0YWxscyBpdHNlbGYuCisjIFRoaXMgd2lsbCBtYWtlIHRoZSBwYWNrYWdlIHVzaW5nIHRoZW0gbWFjaGluZSBzcGVjaWZpYyBidXQgdGhpcyBpcyBtdWNoCisjIGJldHRlciB0aGFuIGhhdmluZyBhIG1hY2hpbmUgc3BlY2lmaWMgQyBsaWJyYXJ5LiBUaGlzIGRvZXMgbWVhbiB5b3VyIAorIyByZWNpcGUgbmVlZHMgYSBERVBFTkRTICs9ICJ2aXJ0dWFsL2tlcm5lbCIgYnV0IGFnYWluLCB0aGF0IGlzIGZpbmUgYW5kCisjIG1ha2VzIHRvdGFsIHNlbnNlLgorIworIyBUaGVyZSBjYW4gYWxzbyBiZSBhIGNhc2Ugd2hlcmUgeW91ciBrZXJuZWwgZXh0cmVtZWx5IG9sZCBhbmQgeW91IHdhbnQKKyMgYW4gb2xkZXIgbGliYyBBQkkgZm9yIHRoYXQgb2xkIGtlcm5lbC4gVGhlIGhlYWRlcnMgaW5zdGFsbGVkIGJ5IHRoaXMKKyMgcmVjaXBlIHNob3VsZCBzdGlsbCBiZSBhIHN0YW5kYXJkIG1haW5saW5lIGtlcm5lbCwgbm90IHlvdXIgb3duIGN1c3RvbSAKKyMgb25lLgorIworIyAtLSBSUAorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBtYWpvciA9IGQuZ2V0VmFyKCJQViIsVHJ1ZSkuc3BsaXQoJy4nKVswXQorICAgIGlmIG1ham9yID09ICIzIjoKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiMy4wIikKKyAgICBlbGlmIG1ham9yID09ICI0IjoKKyAgICAgICAgZC5zZXRWYXIoIkhFQURFUl9GRVRDSF9WRVIiLCAiNC54IikKKyAgICBlbHNlOgorICAgICAgICBkLnNldFZhcigiSEVBREVSX0ZFVENIX1ZFUiIsICIyLjYiKQorfQorCitpbmhlcml0IGtlcm5lbC1hcmNoCisKK0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTiA/PSAiYnoyIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgva2VybmVsL3Yke0hFQURFUl9GRVRDSF9WRVJ9L2xpbnV4LSR7UFZ9LnRhci4ke0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTn0iCisKK1MgPSAiJHtXT1JLRElSfS9saW51eC0ke1BWfSIKKworZG9fY29uZmlndXJlKCkgeworCW9lX3J1bm1ha2UgYWxsbm9jb25maWcKK30KKworZG9fY29tcGlsZSAoKSB7Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBoZWFkZXJzX2luc3RhbGwgSU5TVEFMTF9IRFJfUEFUSD0ke0R9JHtleGVjX3ByZWZpeH0KKwkjIEtlcm5lbCBzaG91bGQgbm90IGJlIGV4cG9ydGluZyB0aGlzIGhlYWRlcgorCXJtIC1mICR7RH0ke2V4ZWNfcHJlZml4fS9pbmNsdWRlL3Njc2kvc2NzaS5oCisKKwkjIFRoZSAuLmluc3RhbGwuY21kIGNvbmZsaWN0cyBiZXR3ZWVuIHZhcmlvdXMgY29uZmlndXJlIHJ1bnMKKwlmaW5kICR7RH0ke2luY2x1ZGVkaXJ9IC1uYW1lIC4uaW5zdGFsbC5jbWQgfCB4YXJncyBybSAtZgorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZXNkayIKKworI0RFUEVORFMgPSAiY3Jvc3MtbGlua2FnZSIKK1JERVBFTkRTXyR7UE59LWRldiA9ICIiCitSUkVDT01NRU5EU18ke1BOfS1kYmcgPSAiJHtQTn0tZGV2ICg9ICR7RVhURU5EUEtHVn0pIgorCitJTkhJQklUX0RFRkFVTFRfREVQUyA9ICIxIgorREVQRU5EUyArPSAidW5pZmRlZi1uYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4LWxpYmMtaGVhZGVycy9saW51eC1saWJjLWhlYWRlcnNfNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODE2ZTVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC1saWJjLWhlYWRlcnMvbGludXgtbGliYy1oZWFkZXJzXzQuMS5iYgpAQCAtMCwwICsxLDcgQEAKK0tPUkdfQVJDSElWRV9DT01QUkVTU0lPTiA9ICJ4eiIKKworcmVxdWlyZSBsaW51eC1saWJjLWhlYWRlcnMuaW5jCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmZTlkYzBmNjcyOWYzNjQwMGVhODFhYTQxZDYxNGMzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYWY1MWYwODVhYWMxZTFjZWE0ZDAwZGJiZjMwOTNlYWQwN2I1NTFmYzA3YjMxYjJhOTg5YzA1ZjhlYTcyZDlmIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2tlcm5lbC1kZXZzcmMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2YzhjNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgva2VybmVsLWRldnNyYy5iYgpAQCAtMCwwICsxLDc2IEBACitTVU1NQVJZID0gIkxpbnV4IGtlcm5lbCBEZXZlbG9wbWVudCBTb3VyY2UiCitERVNDUklQVElPTiA9ICJEZXZlbG9wbWVudCBzb3VyY2UgbGludXgga2VybmVsLiBXaGVuIGJ1aWx0LCB0aGlzIHJlY2lwZSBwYWNrYWdlcyB0aGUgXAorc291cmNlIG9mIHRoZSBwcmVmZXJyZWQgdmlydHVhbC9rZXJuZWwgcHJvdmlkZXIgYW5kIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IgZnVsbCBrZXJuZWwgXAorZGV2ZWxvcG1lbnQgb3IgZXh0ZXJuYWwgbW9kdWxlIGJ1aWxkcyIKKworU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPTU1PTl9MSUNFTlNFX0RJUn0vR1BMLTIuMDttZDU9ODAxZjgwOTgwZDE3MWRkNjQyNTYxMDgzM2EyMmRiZTYiCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2UKKworIyBXaGlsc3Qgbm90IGEgbW9kdWxlLCB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgZ2V0IG11bHRpbGliIGV4dGVuZGVkICh3aGljaCB3b3VsZCBtYWtlIG5vIHNlbnNlKQoraW5oZXJpdCBtb2R1bGUtYmFzZQorCisjIFdlIG5lZWQgdGhlIGtlcm5lbCB0byBiZSBzdGFnZWQgKHVucGFja2VkLCBwYXRjaGVkIGFuZCBjb25maWd1cmVkKSBiZWZvcmUKKyMgd2UgY2FuIGdyYWIgdGhlIHNvdXJjZSBhbmQgbWFrZSB0aGUgc291cmNlIHBhY2thZ2UuIFdlIGFsc28gbmVlZCB0aGUgYml0cyBmcm9tCisjICR7Qn0gbm90IHRvIGNoYW5nZSB3aGlsZSB3ZSBpbnN0YWxsLCBzbyB2aXJ0dWFsL2tlcm5lbCBtdXN0IGZpbmlzaCBkb19jb21waWxlLgorZG9faW5zdGFsbFtkZXBlbmRzXSArPSAidmlydHVhbC9rZXJuZWw6ZG9fc2hhcmVkX3dvcmtkaXIiCisjIE5lZWQgdGhlIHNvdXJjZSwgbm90IGp1c3QgdGhlIG91dHB1dCBvZiBwb3B1bGF0ZV9zeXNyb290Citkb19pbnN0YWxsW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19pbnN0YWxsIgorCisjIFRoZXJlJ3Mgbm90aGluZyB0byBkbyBoZXJlLCBleGNlcHQgaW5zdGFsbCB0aGUgc291cmNlIHdoZXJlIHdlIGNhbiBwYWNrYWdlIGl0Citkb19mZXRjaFtub2V4ZWNdID0gIjEiCitkb191bnBhY2tbbm9leGVjXSA9ICIxIgorZG9fcGF0Y2hbbm9leGVjXSA9ICIxIgorZG9fY29uZmlndXJlW25vZXhlY10gPSAiMSIKK2RvX2NvbXBpbGVbbm9leGVjXSA9ICIxIgorZG9fcG9wdWxhdGVfc3lzcm9vdFtub2V4ZWNdID0gIjEiCisKKyMgRGVmaW5lIHdoZXJlIHRoZSBrZXJuZWwgaGVhZGVycyBhcmUgaW5zdGFsbGVkIG9uIHRoZSB0YXJnZXQgYXMgd2VsbCBhcyB3aGVyZQorIyB0aGV5IGFyZSBzdGFnZWQuCitLRVJORUxfU1JDX1BBVEggPSAiL3Vzci9zcmMva2VybmVsIgorUyA9ICIke1NUQUdJTkdfS0VSTkVMX0RJUn0iCitCID0gIiR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9IgorCitLRVJORUxfVkVSU0lPTiA9ICIke0BnZXRfa2VybmVsdmVyc2lvbl9oZWFkZXJzKCcke1N9Jyl9IgorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBrZXJuZWxkaXI9JHtEfSR7S0VSTkVMX1NSQ19QQVRIfQorICAgICAgICBpbnN0YWxsIC1kICRrZXJuZWxkaXIKKworICAgICAgICAjCisgICAgICAgICMgQ29weSB0aGUgc3RhZ2luZyBkaXIgc291cmNlIChhbmQgbW9kdWxlIGJ1aWxkIHN1cHBvcnQpIGludG8gdGhlIGRldnNyYyBzdHJ1Y3R1cmUuCisgICAgICAgICMgV2UgY2FuIGtlZXAgdGhpcyBjb3B5IHNpbXBsZSBhbmQgdGFrZSBldmVyeXRoaW5nLCBzaW5jZSBhIHdlJ2xsIGNsZWFuIHVwIGFueSBidWlsZAorICAgICAgICAjIGFydGlmYWN0cyBhZnRlcndhcmRzLCBhbmQgdGhlIGV4dHJhIGkvbyBpcyBub3Qgc2lnbmlmaWNhbnQKKyAgICAgICAgIworICAgICAgICBjZCAke0J9CisgICAgICAgIGZpbmQgLiAtdHlwZSBkIC1uYW1lICcuZ2l0KicgLXBydW5lIC1vIC1wYXRoICcuZGVidWcnIC1wcnVuZSAtbyAtdHlwZSBmIC1wcmludDAgfCBjcGlvIC0tbnVsbCAtcGRsdSAka2VybmVsZGlyCisgICAgICAgIGNkICR7U30KKyAgICAgICAgZmluZCAuIC10eXBlIGQgLW5hbWUgJy5naXQqJyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQwIHwgY3BpbyAtLW51bGwgLXBkbHUgJGtlcm5lbGRpcgorCisgICAgICAgICMgRXhwbGljaXRseSBzZXQgS0JVSUxEX09VVFBVVCB0byBlbnN1cmUgdGhhdCB0aGUgaW1hZ2UgZGlyZWN0b3J5IGlzIGNsZWFuZWQgYW5kIG5vdAorICAgICAgICAjIFRoZSBtYWluIGJ1aWxkIGFydGlmYWN0cy4gV2UgY2xlYW4gdGhlIGRpcmVjdG9yeSB0byBhdm9pZCBRQSBlcnJvcnMgb24gbWlzbWF0Y2hlZAorICAgICAgICAjIGFyY2hpdGVjdHVyZSAoc2luY2Ugc2NyaXB0cyBhbmQgaGVscGVycyBhcmUgbmF0aXZlIGZvcm1hdCkuCisgICAgICAgIEtCVUlMRF9PVVRQVVQ9IiRrZXJuZWxkaXIiCisgICAgICAgIG9lX3J1bm1ha2UgLUMgJGtlcm5lbGRpciBDQz0iJHtLRVJORUxfQ0N9IiBMRD0iJHtLRVJORUxfTER9IiBjbGVhbiBfbXJwcm9wZXJfc2NyaXB0cworCisgICAgICAgICMgQXMgb2YgTGludXgga2VybmVsIHZlcnNpb24gMy4wLjEsIHRoZSBjbGVhbiB0YXJnZXQgcmVtb3ZlcworICAgICAgICAjIGFyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8gd2hpY2ggaXMgcHJlc2VudCBpbgorICAgICAgICAjIEtCVUlMRF9MREZMQUdTX01PRFVMRSwgbWFraW5nIGl0IHJlcXVpcmVkIHRvIGJ1aWxkIGV4dGVybmFsIG1vZHVsZXMuCisgICAgICAgIGlmIFsgJHtBUkNIfSA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgbWtkaXIgLXAgJGtlcm5lbGRpci9hcmNoL3Bvd2VycGMvbGliLworICAgICAgICAgICAgICAgIGNwICR7Qn0vYXJjaC9wb3dlcnBjL2xpYi9jcnRzYXZyZXMubyAka2VybmVsZGlyL2FyY2gvcG93ZXJwYy9saWIvY3J0c2F2cmVzLm8KKyAgICAgICAgZmkKKworICAgICAgICBjaG93biAtUiByb290OnJvb3QgJHtEfQorfQorIyBFbnN1cmUgd2UgZG9uJ3QgcmFjZSBhZ2FpbnN0ICJtYWtlIHNjcmlwdHMiIGR1cmluZyBjcGlvCitkb19pbnN0YWxsW2xvY2tmaWxlc10gPSAiJHtUTVBESVJ9L2tlcm5lbC1zY3JpcHRzLmxvY2siCisKK1BBQ0tBR0VTID0gImtlcm5lbC1kZXZzcmMiCitGSUxFU18ke1BOfSA9ICIke0tFUk5FTF9TUkNfUEFUSH0iCitSREVQRU5EU18ke1BOfSA9ICJiYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHRiLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTNhNWUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdGIuaW5jCkBAIC0wLDAgKzEsNzkgQEAKKyMgU3VwcG9ydCBmb3IgZGV2aWNlIHRyZWUgZ2VuZXJhdGlvbgorRklMRVNfa2VybmVsLWRldmljZXRyZWUgPSAiLyR7S0VSTkVMX0lNQUdFREVTVH0vZGV2aWNldHJlZSoiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgZC5hcHBlbmRWYXIoIlBBQ0tBR0VTIiwgIiBrZXJuZWwtZGV2aWNldHJlZSIpCit9CisKK2RvX2NvbXBpbGVfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJb2VfcnVubWFrZSAke0RUQn0KKwkJZG9uZQorCWZpCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCQlEVEJfU1lNTElOS19OQU1FPWBlY2hvICR7S0VSTkVMX0lNQUdFX1NZTUxJTktfTkFNRX0gfCBzZWQgInMvJHtNQUNISU5FfS8ke0RUQl9CQVNFX05BTUV9L2ciYAorCQkJRFRCX1BBVEg9IiR7Qn0vYXJjaC8ke0FSQ0h9L2Jvb3QvZHRzLyR7RFRCfSIKKwkJCWlmIFsgISAtZSAiJHtEVEJfUEFUSH0iIF07IHRoZW4KKwkJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC8ke0RUQn0iCisJCQlmaQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7RH0vJHtLRVJORUxfSU1BR0VERVNUfS9kZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiCisJCWRvbmUKKwlmaQorfQorCitkb19kZXBsb3lfYXBwZW5kKCkgeworCWlmIHRlc3QgLW4gIiR7S0VSTkVMX0RFVklDRVRSRUV9IjsgdGhlbgorCQlmb3IgRFRCIGluICR7S0VSTkVMX0RFVklDRVRSRUV9OyBkbworCQkJaWYgZWNobyAke0RUQn0gfCBncmVwIC1xICcvZHRzLyc7IHRoZW4KKwkJCQliYndhcm4gIiR7RFRCfSBjb250YWlucyB0aGUgZnVsbCBwYXRoIHRvIHRoZSB0aGUgZHRzIGZpbGUsIGJ1dCBvbmx5IHRoZSBkdGIgbmFtZSBzaG91bGQgYmUgdXNlZC4iCisJCQkJRFRCPWBiYXNlbmFtZSAke0RUQn0gfCBzZWQgJ3MsXC5kdHMkLC5kdGIsZydgCisJCQlmaQorCQkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJ9IC5kdGJgCisJCQlEVEJfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9CQVNFX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCQlEVEJfUEFUSD0iJHtCfS9hcmNoLyR7QVJDSH0vYm9vdC9kdHMvJHtEVEJ9IgorCQkJaWYgWyAhIC1lICIke0RUQl9QQVRIfSIgXTsgdGhlbgorCQkJCURUQl9QQVRIPSIke0J9L2FyY2gvJHtBUkNIfS9ib290LyR7RFRCfSIKKwkJCWZpCisJCQlpbnN0YWxsIC1kICR7REVQTE9ZRElSfQorCQkJaW5zdGFsbCAtbSAwNjQ0ICR7RFRCX1BBVEh9ICR7REVQTE9ZRElSfS8ke0RUQl9OQU1FfS5kdGIKKwkJCWNkICR7REVQTE9ZRElSfQorCQkJbG4gLXNmICR7RFRCX05BTUV9LmR0YiAke0RUQl9TWU1MSU5LX05BTUV9LmR0YgorCQkJY2QgLQorCQlkb25lCisJZmkKK30KKworcGtnX3Bvc3RpbnN0X2tlcm5lbC1kZXZpY2V0cmVlICgpIHsKKwljZCAvJHtLRVJORUxfSU1BR0VERVNUfQorCWZvciBEVEJfRklMRSBpbiAke0tFUk5FTF9ERVZJQ0VUUkVFfQorCWRvCisJCURUQl9CQVNFX05BTUU9YGJhc2VuYW1lICR7RFRCX0ZJTEV9IHwgYXdrIC1GICIuIiAne3ByaW50ICQxfSdgCisJCURUQl9TWU1MSU5LX05BTUU9YGVjaG8gJHtLRVJORUxfSU1BR0VfU1lNTElOS19OQU1FfSB8IHNlZCAicy8ke01BQ0hJTkV9LyR7RFRCX0JBU0VfTkFNRX0vZyJgCisJCXVwZGF0ZS1hbHRlcm5hdGl2ZXMgLS1pbnN0YWxsIC8ke0tFUk5FTF9JTUFHRURFU1R9LyR7RFRCX0JBU0VfTkFNRX0uZHRiICR7RFRCX0JBU0VfTkFNRX0uZHRiIGRldmljZXRyZWUtJHtEVEJfU1lNTElOS19OQU1FfS5kdGIgJHtLRVJORUxfUFJJT1JJVFl9IHx8IHRydWUKKwlkb25lCit9CisKK3BrZ19wb3N0cm1fa2VybmVsLWRldmljZXRyZWUgKCkgeworCWNkIC8ke0tFUk5FTF9JTUFHRURFU1R9CisJZm9yIERUQl9GSUxFIGluICR7S0VSTkVMX0RFVklDRVRSRUV9CisJZG8KKwkJRFRCX0JBU0VfTkFNRT1gYmFzZW5hbWUgJHtEVEJfRklMRX0gfCBhd2sgLUYgIi4iICd7cHJpbnQgJDF9J2AKKwkJRFRCX1NZTUxJTktfTkFNRT1gZWNobyAke0tFUk5FTF9JTUFHRV9TWU1MSU5LX05BTUV9IHwgc2VkICJzLyR7TUFDSElORX0vJHtEVEJfQkFTRV9OQU1FfS9nImAKKwkJdXBkYXRlLWFsdGVybmF0aXZlcyAtLXJlbW92ZSAke0RUQl9CQVNFX05BTUV9LmR0YiBkZXZpY2V0cmVlLSR7RFRCX1NZTUxJTktfTkFNRX0uZHRiICR7S0VSTkVMX1BSSU9SSVRZfSB8fCB0cnVlCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwZTRlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgtZHVtbXkuYmIKQEAgLTAsMCArMSw1NCBAQAorU1VNTUFSWSA9ICJEdW1teSBMaW51eCBrZXJuZWwiCitERVNDUklQVElPTiA9ICJEdW1teSBMaW51eCBrZXJuZWwsIHRvIGJlIHNlbGVjdGVkIGFzIHRoZSBwcmVmZXJyZWQgXAorcHJvdmlkZXIgZm9yIHZpcnR1YWwva2VybmVsIHRvIHNhdGlzZnkgZGVwZW5kZW5jaWVzIGZvciBzaXR1YXRpb25zIFwKK3doZXJlIHlvdSB3aXNoIHRvIGJ1aWxkIHRoZSBrZXJuZWwgZXh0ZXJuYWxseSBmcm9tIHRoZSBidWlsZCBzeXN0ZW0uIgorU0VDVElPTiA9ICJrZXJuZWwiCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke1dPUktESVJ9L0NPUFlJTkcuR1BMO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSIKKworUFJPVklERVMgKz0gInZpcnR1YWwva2VybmVsIgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLW1vZHVsZS0uKiIKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5rZXJuZWwtaW1hZ2UtLioiCitQQUNLQUdFU19EWU5BTUlDICs9ICJea2VybmVsLWZpcm13YXJlLS4qIgorCitQQUNLQUdFUyArPSAia2VybmVsLW1vZHVsZXMiCitGSUxFU19rZXJuZWwtbW9kdWxlcyA9ICIiCitBTExPV19FTVBUWV9rZXJuZWwtbW9kdWxlcyA9ICIxIgorREVTQ1JJUFRJT05fa2VybmVsLW1vZHVsZXMgPSAiS2VybmVsIG1vZHVsZXMgbWV0YSBwYWNrYWdlIgorCisjQ09NUEFUSUJMRV9NQUNISU5FID0gInlvdXJfbWFjaGluZSIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiZmlsZTovL0NPUFlJTkcuR1BMIgorUyA9ICIke1dPUktESVJ9IgorCitkb19jb25maWd1cmUoKSB7CisJOgorfQorCitkb19jb21waWxlICgpIHsKKwk6Cit9CisKK2RvX3NoYXJlZF93b3JrZGlyICgpIHsKKwk6Cit9CisKK2RvX2luc3RhbGwoKSB7CisJOgorfQorCitkb19idW5kbGVfaW5pdHJhbWZzKCkgeworCToKK30KKworZG9fZGVwbG95KCkgeworCToKK30KKworYWRkdGFzayBidW5kbGVfaW5pdHJhbWZzIGFmdGVyIGRvX2luc3RhbGwgYmVmb3JlIGRvX2RlcGxveQorYWRkdGFzayBkZXBsb3kgYWZ0ZXIgZG9faW5zdGFsbAorYWRkdGFzayBzaGFyZWRfd29ya2RpciBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LWR1bW15L0NPUFlJTkcuR1BMIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS9DT1BZSU5HLkdQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC1kdW1teS9DT1BZSU5HLkdQTApAQCAtMCwwICsxLDMzOSBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmZTQ4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLWRldi5iYgpAQCAtMCwwICsxLDUxIEBACisjIFRoaXMgcmVjaXBlIHRyYWNrcyB0aGUgbGludXgteW9jdG8tZGV2IHJlcG9zaXRvcnkgYXMgaXRzIHVwc3RyZWFtIHNvdXJjZS4KKyMgU2luY2UgdGhpcyB0cmVlIGlzIGZyZXF1ZW50bHkgdXBkYXRlZCwgYW5kIHBlcmlvZGljYWxseSByZWJ1aWx0LCBBVVRPUkVWIGlzCisjIHVzZWQgdG8gdHJhY2sgaXRzIGNvbnRlbnRzLgorIworIyBUaGlzIHJlY2lwZSBpcyBqdXN0IGxpa2Ugb3RoZXIgbGludXgteW9jdG8gdmFyaWFudHMsIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZQorIyBiZWluZyB0aGF0IHRvIGF2b2lkIG5ldHdvcmsgYWNjZXNzIGR1cmluZyBpbml0aWFsIHBhcnNpbmcsIHN0YXRpYyBTUkNSRVZzIGFyZQorIyBwcm92aWRlZCBhbmQgb3ZlcnJpZGRlbiBpZiB0aGUgcHJlZmVycmVkIGtlcm5lbCBwcm92aWRlciBpcyBsaW51eC15b2N0by1kZXYuCisjCisjIFRvIGVuYWJsZSB0aGlzIHJlY2lwZSwgc2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCA9ICJsaW51eC15b2N0by1kZXYiCisKK2luaGVyaXQga2VybmVsCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIHByb3ZpZGUgdGhpcyAuaW5jIHRvIHNldCBzcGVjaWZpYyByZXZpc2lvbnMKK2luY2x1ZGUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tZGV2LXJldmlzaW9ucy5pbmMKKworIyBTa2lwIHByb2Nlc3Npbmcgb2YgdGhpcyByZWNpcGUgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkIGFzIHRoZQorIyBQUkVGRVJSRURfUFJPVklERVIgZm9yIHZpcnR1YWwva2VybmVsLiBUaGlzIGF2b2lkcyBuZXR3b3JrIGFjY2VzcyByZXF1aXJlZAorIyBieSB0aGUgdXNlIG9mIEFVVE9SRVYgU1JDUkVWcywgd2hpY2ggYXJlIHRoZSBkZWZhdWx0IGZvciB0aGlzIHJlY2lwZS4KK3B5dGhvbiAoKSB7CisgICAgaWYgZC5nZXRWYXIoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsIFRydWUpICE9ICJsaW51eC15b2N0by1kZXYiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgiU2V0IFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCB0byBsaW51eC15b2N0by1kZXYgdG8gZW5hYmxlIGl0IikKK30KKworS0JSQU5DSCA9ICJzdGFuZGFyZC9iYXNlIgorS01FVEEgPSAia2VybmVsLW1ldGEiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tZGV2LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPW1hc3RlcjtkZXN0c3VmZml4PSR7S01FVEF9IgorCisjIFNldCBkZWZhdWx0IFNSQ1JFVnMuIEJvdGggdGhlIG1hY2hpbmUgYW5kIG1ldGEgU1JDUkVWcyBhcmUgc3RhdGljYWxseSBzZXQKKyMgdG8gdGhlIGtvcmcgdjMuNyB0YWcsIGFuZCBoZW5jZSBwcmV2ZW50IG5ldHdvcmsgYWNjZXNzIGR1cmluZyBwYXJzaW5nLiBJZgorIyBsaW51eC15b2N0by1kZXYgaXMgdGhlIHByZWZlcnJlZCBwcm92aWRlciwgdGhleSB3aWxsIGJlIG92ZXJyaWRkZW4gdG8KKyMgQVVUT1JFViBpbiBmb2xsb3dpbmcgYW5vbnltb3VzIHB5dGhvbiByb3V0aW5lIGFuZCByZXNvbHZlZCB3aGVuIHRoZQorIyB2YXJpYWJsZXMgYXJlIGZpbmFsaXplZC4KK1NSQ1JFVl9tYWNoaW5lID89ICcke0BvZS51dGlscy5jb25kaXRpb25hbCgiUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwva2VybmVsIiwgImxpbnV4LXlvY3RvLWRldiIsICIke0FVVE9SRVZ9IiwgIjI5NTk0NDA0ZDdmZTczY2Q4MGVhYTRlZThjNDNkY2M1Mzk3MGM2MGUiLCBkKX0nCitTUkNSRVZfbWV0YSA/PSAnJHtAb2UudXRpbHMuY29uZGl0aW9uYWwoIlBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2tlcm5lbCIsICJsaW51eC15b2N0by1kZXYiLCAiJHtBVVRPUkVWfSIsICIyOTU5NDQwNGQ3ZmU3M2NkODBlYWE0ZWU4YzQzZGNjNTM5NzBjNjBlIiwgZCl9JworCitMSU5VWF9WRVJTSU9OID89ICI0LjItcmMrIgorTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0b2Rldi0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdWFybXxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfMy4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDNkNWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by1ydF8zLjE0LmJiCkBAIC0wLDAgKzEsMjggQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3ByZWVtcHQtcnQvYmFzZSIKK0tCUkFOQ0hfcWVtdXBwYyA/PSAic3RhbmRhcmQvcHJlZW1wdC1ydC9xZW11cHBjIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitTUkNSRVZfbWFjaGluZSA/PSAiODI4MTkxNTUyN2JhOGQ3OWU1OTkwNmMwMmYyOGU3YWExMTQyNDcyMyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVwcGMgPz0gIjVlN2QzNzJlYmMzMjdmMjg2NTZmYzk3MmZhYjU1NjA1ZWVhOGFlYzMiCitTUkNSRVZfbWV0YSA/PSAiM2EwOWIzOGE5ZjUwMTVjNTZkOTlkMTdhYTdjMmYyMDBjNTY2MjQ5YiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by0zLjE0LmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiMy4xNC4zNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworTElOVVhfS0VSTkVMX1RZUEUgPSAicHJlZW1wdC1ydCIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2fHFlbXV4ODYtNjR8cWVtdWFybXxxZW11cHBjfHFlbXVtaXBzKSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIGZlYXR1cmVzL3Rhc2tzdGF0cy90YXNrc3RhdHMuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tcnRfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NDgzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXJ0XzQuMS5iYgpAQCAtMCwwICsxLDI2IEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9wcmVlbXB0LXJ0IgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitTUkNSRVZfbWFjaGluZSA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tZXRhID89ICI0MjlmOWUyZmYwNjQ5YjhjOTM0MTM0NTYyMjU0NWQ4NzRkNWUzMDNhIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTQuMS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by00LjE7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0xJTlVYX0tFUk5FTF9UWVBFID0gInByZWVtcHQtcnQiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NnxxZW11eDg2LTY0fHFlbXVhcm18cWVtdXBwY3xxZW11bWlwcykiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyBmZWF0dXJlcy90YXNrc3RhdHMvdGFza3N0YXRzLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTJjODE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTQuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitTUkNSRVZfbWFjaGluZSA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tZXRhID89ICIzYTA5YjM4YTlmNTAxNWM1NmQ5OWQxN2FhN2MyZjIwMGM1NjYyNDliIgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2xpbnV4LXlvY3RvLTMuMTQuZ2l0O2JyYW5jaD0ke0tCUkFOQ0h9O25hbWU9bWFjaGluZTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTMuMTQ7ZGVzdHN1ZmZpeD0ke0tNRVRBfSIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gIihxZW11eDg2KSIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRkVBVFVSRVMgPSAiIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfMy4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE1OGEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by10aW55XzMuMTkuYmIKQEAgLTAsMCArMSwyMyBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvdGlueS9iYXNlIgorTElOVVhfS0VSTkVMX1RZUEUgPSAidGlueSIKK0tDT05GSUdfTU9ERSA9ICItLWFsbG5vY29uZmlnIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCitMSU5VWF9WRVJTSU9OID89ICIzLjE5LjUiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21ldGEgPz0gIjEwMTY3MTQ4NjgyNDlkNjRmYzE2NjkyZmQ3Njc5NjcyYjFlZmExN2IiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lIFwKKyAgICAgICAgICAgZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveW9jdG8ta2VybmVsLWNhY2hlO3R5cGU9a21ldGE7bmFtZT1tZXRhO2JyYW5jaD15b2N0by0zLjE5O2Rlc3RzdWZmaXg9JHtLTUVUQX0iCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICIocWVtdXg4NikiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0ZFQVRVUkVTID0gIiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8tdGlueV80LjEuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTIwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLXRpbnlfNC4xLmJiCkBAIC0wLDAgKzEsMjMgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL3RpbnkvYmFzZSIKK0xJTlVYX0tFUk5FTF9UWVBFID0gInRpbnkiCitLQ09ORklHX01PREUgPSAiLS1hbGxub2NvbmZpZyIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworTElOVVhfVkVSU0lPTiA/PSAiNC4xLjYiCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK1NSQ1JFVl9tYWNoaW5lID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21ldGEgPz0gIjQyOWY5ZTJmZjA2NDliOGM5MzQxMzQ1NjIyNTQ1ZDg3NGQ1ZTMwM2EiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tNC4xLmdpdDticmFuY2g9JHtLQlJBTkNIfTtuYW1lPW1hY2hpbmUgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAiKHFlbXV4ODYpIgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9GRUFUVVJFUyA9ICIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNDFhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYwpAQCAtMCwwICsxLDUxIEBACitERVNDUklQVElPTiA9ICJZb2N0byBLZXJuZWwiCitTRUNUSU9OID0gImtlcm5lbCIKK0xJQ0VOU0UgPSAiR1BMdjIiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQ3ODEwZmFiNzQ4N2ZiMGFhZDMyN2I3NmYxYmU3Y2Q3IgorCitJTkNfUFIgPSAicjQiCisKK0RFUEVORFMgKz0gInh6LW5hdGl2ZSBiYy1uYXRpdmUiCitERVBFTkRTX2FwcGVuZF9hYXJjaDY0ID0gIiBsaWJnY2MiCitLRVJORUxfQ0NfYXBwZW5kX2FhcmNoNjQgPSAiICR7VE9PTENIQUlOX09QVElPTlN9IgorS0VSTkVMX0xEX2FwcGVuZF9hYXJjaDY0ID0gIiAke1RPT0xDSEFJTl9PUFRJT05TfSIKKworIyBBIEtNQUNISU5FIGlzIHRoZSBtYXBwaW5nIG9mIGEgeW9jdG8gJE1BQ0hJTkUgdG8gd2hhdCBpcyBidWlsdAorIyBieSB0aGUga2VybmVsLiBUaGlzIGlzIHR5cGljYWxseSB0aGUgYnJhbmNoIHRoYXQgc2hvdWxkIGJlIGJ1aWx0LAorIyBhbmQgaXQgY2FuIGJlIHNwZWNpZmljIHRvIHRoZSBtYWNoaW5lIG9yIHNoYXJlZAorIyBLTUFDSElORSA9ICJVTkRFRklORUQiCisKK0xJTlVYX0tFUk5FTF9UWVBFID89ICJzdGFuZGFyZCIKKworIyBLTUVUQSA/PSAiIgorS0JSQU5DSCA/PSAibWFzdGVyIgorS01BQ0hJTkUgPz0gIiR7TUFDSElORX0iCitTUkNSRVZfRk9STUFUID89ICJtZXRhX21hY2hpbmUiIAorCisjIExFVkVMUzoKKyMgICAwOiBubyByZXBvcnRpbmcKKyMgICAxOiByZXBvcnQgb3B0aW9ucyB0aGF0IGFyZSBzcGVjaWZpZWQsIGJ1dCBub3QgaW4gdGhlIGZpbmFsIGNvbmZpZworIyAgIDI6IHJlcG9ydCBvcHRpb25zIHRoYXQgYXJlIG5vdCBoYXJkd2FyZSByZWxhdGVkLCBidXQgc2V0IGJ5IGEgQlNQCitLQ09ORl9BVURJVF9MRVZFTCA/PSAiMSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA/PSAiMCIKKworTElOVVhfVkVSU0lPTl9FWFRFTlNJT04gPz0gIi15b2N0by0ke0xJTlVYX0tFUk5FTF9UWVBFfSIKKworIyBQaWNrIHVwIHNoYXJlZCBmdW5jdGlvbnMKK2luaGVyaXQga2VybmVsCitpbmhlcml0IGtlcm5lbC15b2N0bworcmVxdWlyZSBsaW51eC1kdGIuaW5jCisKK0IgPSAiJHtXT1JLRElSfS9saW51eC0ke1BBQ0tBR0VfQVJDSH0tJHtMSU5VWF9LRVJORUxfVFlQRX0tYnVpbGQiCisKK2RvX2luc3RhbGxfYXBwZW5kKCl7CisJaWYgWyAtbiAiJHtLTUVUQX0iIF07IHRoZW4KKwkJcm0gLXJmICR7U1RBR0lOR19LRVJORUxfRElSfS8ke0tNRVRBfQorCWZpCit9CisKKyMgZXh0cmEgdGFza3MKK2FkZHRhc2sga2VybmVsX2xpbmtfdm1saW51eCBhZnRlciBkb19jb21waWxlIGJlZm9yZSBkb19pbnN0YWxsCithZGR0YXNrIHZhbGlkYXRlX2JyYW5jaGVzIGJlZm9yZSBkb19wYXRjaCBhZnRlciBkb19rZXJuZWxfY2hlY2tvdXQKK2FkZHRhc2sga2VybmVsX2NvbmZpZ2NoZWNrIGFmdGVyIGRvX2NvbmZpZ3VyZSBiZWZvcmUgZG9fY29tcGlsZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b18zLjE0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjJlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTQuYmIKQEAgLTAsMCArMSw0MSBAQAorS0JSQU5DSCA/PSAic3RhbmRhcmQvYmFzZSIKKworcmVxdWlyZSByZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0by5pbmMKKworIyBib2FyZCBzcGVjaWZpYyBicmFuY2hlcworS0JSQU5DSF9xZW11YXJtICA/PSAic3RhbmRhcmQvYXJtLXZlcnNhdGlsZS05MjZlanMiCitLQlJBTkNIX3FlbXVhcm02NCA/PSAic3RhbmRhcmQvcWVtdWFybTY0IgorS0JSQU5DSF9xZW11bWlwcyA/PSAic3RhbmRhcmQvbXRpLW1hbHRhMzIiCitLQlJBTkNIX3FlbXVwcGMgID89ICJzdGFuZGFyZC9xZW11cHBjIgorS0JSQU5DSF9xZW11eDg2ICA/PSAic3RhbmRhcmQvY29tbW9uLXBjL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiNDgxNzc0NzkxMmI1YzUwY2U1YzMxZWYyNTY1ODM0MGNhNjE1ZTFiNCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiNTc4NjAyYTcyMmRiZmIyNjA4MDFmM2IzN2M2ZWFmZDJhYmIyMzQwZCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICI2ZWQ3NmVjMjZiMTIwZjY1Zjg1NDdjODYxMmI3MzM0YmQyNzQ1ZWM5IgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiYTg2YWRlODRiMmUxNDJjMGZkNzUzNmQ5NjQ3NzEwN2I2ZDA3ZGI1YyIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImFmMWY3ZjU4NmJkMzJkMzljMDU3ZjE3NjA2OTkxYjg4N2VhZGIzODkiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiYTYzZDQwYjg2MGE2ZDI1NTAwNWE1NDE4OTRkNTM3MjkwOTBiNDBlYSIKK1NSQ1JFVl9tYWNoaW5lID89ICI1Nzg2MDJhNzIyZGJmYjI2MDgwMWYzYjM3YzZlYWZkMmFiYjIzNDBkIgorU1JDUkVWX21ldGEgPz0gIjNhMDliMzhhOWY1MDE1YzU2ZDk5ZDE3YWE3YzJmMjAwYzU2NjI0OWIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xNC5naXQ7YnJhbmNoPSR7S0JSQU5DSH07bmFtZT1tYWNoaW5lOyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xNDtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE0LjM2IgorCitQViA9ICIke0xJTlVYX1ZFUlNJT059K2dpdCR7U1JDUFZ9IgorCitLTUVUQSA9ICJrZXJuZWwtbWV0YSIKK0tDT05GX0JTUF9BVURJVF9MRVZFTCA9ICIyIgorCitDT01QQVRJQkxFX01BQ0hJTkUgPSAicWVtdWFybXxxZW11YXJtNjR8cWVtdXg4NnxxZW11cHBjfHFlbXVtaXBzfHFlbXVtaXBzNjR8cWVtdXg4Ni02NCIKKworIyBGdW5jdGlvbmFsaXR5IGZsYWdzCitLRVJORUxfRVhUUkFfRkVBVFVSRVMgPz0gImZlYXR1cmVzL25ldGZpbHRlci9uZXRmaWx0ZXIuc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtLRVJORUxfRVhUUkFfRkVBVFVSRVN9IgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Ni02ND0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJteDMyIiwgIiBjZmcveDMyLnNjYyIsICIiICxkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvXzMuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThjMTY0MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fMy4xOS5iYgpAQCAtMCwwICsxLDQxIEBACitLQlJBTkNIID89ICJzdGFuZGFyZC9iYXNlIgorCityZXF1aXJlIHJlY2lwZXMta2VybmVsL2xpbnV4L2xpbnV4LXlvY3RvLmluYworCisjIGJvYXJkIHNwZWNpZmljIGJyYW5jaGVzCitLQlJBTkNIX3FlbXVhcm0gID89ICJzdGFuZGFyZC9hcm0tdmVyc2F0aWxlLTkyNmVqcyIKK0tCUkFOQ0hfcWVtdWFybTY0ID89ICJzdGFuZGFyZC9xZW11YXJtNjQiCitLQlJBTkNIX3FlbXVtaXBzID89ICJzdGFuZGFyZC9tdGktbWFsdGEzMiIKK0tCUkFOQ0hfcWVtdXBwYyAgPz0gInN0YW5kYXJkL3FlbXVwcGMiCitLQlJBTkNIX3FlbXV4ODYgID89ICJzdGFuZGFyZC9jb21tb24tcGMiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2NvbW1vbi1wYy02NC9iYXNlIgorS0JSQU5DSF9xZW11bWlwczY0ID89ICJzdGFuZGFyZC9tdGktbWFsdGE2NCIKKworU1JDUkVWX21hY2hpbmVfcWVtdWFybSA/PSAiOTYzYjRkZjY2M2RiYTI1ODRhYzg2NGUwYzAxNjgyNWRlMDA0NjU1OCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVhcm02NCA/PSAiZTE1MjM0OWRlNTliNDNiMmE3NWYyYzMzMmI0NDE3MWRmNDYxZDVhMCIKK1NSQ1JFVl9tYWNoaW5lX3FlbXVtaXBzID89ICJjZWRiYmM3YjVlNzJkZjJlODIwYmI5ZTc4ODVmMTIxMzJjNWUyZmZmIgorU1JDUkVWX21hY2hpbmVfcWVtdXBwYyA/PSAiMjNhODMzODZlMTA5ODZhNjNlNmNlZjcxMmEwNDU0NDU0OTlkMDAyYiIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYgPz0gImUxNTIzNDlkZTU5YjQzYjJhNzVmMmMzMzJiNDQxNzFkZjQ2MWQ1YTAiCitTUkNSRVZfbWFjaGluZV9xZW11eDg2LTY0ID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHM2NCA/PSAiM2ViNzBjZWEzNTMyZTIyYWIxYjZkYTk4NjQ0NDY2MjEyMjllNjYxNiIKK1NSQ1JFVl9tYWNoaW5lID89ICJlMTUyMzQ5ZGU1OWI0M2IyYTc1ZjJjMzMyYjQ0MTcxZGY0NjFkNWEwIgorU1JDUkVWX21ldGEgPz0gIjEwMTY3MTQ4NjgyNDlkNjRmYzE2NjkyZmQ3Njc5NjcyYjFlZmExN2IiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvbGludXgteW9jdG8tMy4xOS5naXQ7bmFtZT1tYWNoaW5lO2JyYW5jaD0ke0tCUkFOQ0h9OyBcCisgICAgICAgICAgIGdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3lvY3RvLWtlcm5lbC1jYWNoZTt0eXBlPWttZXRhO25hbWU9bWV0YTticmFuY2g9eW9jdG8tMy4xOTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICIzLjE5LjUiCisKK1BWID0gIiR7TElOVVhfVkVSU0lPTn0rZ2l0JHtTUkNQVn0iCisKK0tNRVRBID0gImtlcm5lbC1tZXRhIgorS0NPTkZfQlNQX0FVRElUX0xFVkVMID0gIjIiCisKK0NPTVBBVElCTEVfTUFDSElORSA9ICJxZW11YXJtfHFlbXVhcm02NHxxZW11eDg2fHFlbXVwcGN8cWVtdW1pcHN8cWVtdW1pcHM2NHxxZW11eDg2LTY0IgorCisjIEZ1bmN0aW9uYWxpdHkgZmxhZ3MKK0tFUk5FTF9FWFRSQV9GRUFUVVJFUyA/PSAiZmVhdHVyZXMvbmV0ZmlsdGVyL25ldGZpbHRlci5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kID0gIiAke0tFUk5FTF9FWFRSQV9GRUFUVVJFU30iCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODY9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZF9xZW11eDg2LTY0PSIgY2ZnL3NvdW5kLnNjYyBjZmcvcGFyYXZpcnRfa3ZtLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiIGNmZy94MzIuc2NjIiwgIiIgLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9saW51eC9saW51eC15b2N0b180LjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZkNDYxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG9fNC4xLmJiCkBAIC0wLDAgKzEsNDEgQEAKK0tCUkFOQ0ggPz0gInN0YW5kYXJkL2Jhc2UiCisKK3JlcXVpcmUgcmVjaXBlcy1rZXJuZWwvbGludXgvbGludXgteW9jdG8uaW5jCisKKyMgYm9hcmQgc3BlY2lmaWMgYnJhbmNoZXMKK0tCUkFOQ0hfcWVtdWFybSAgPz0gInN0YW5kYXJkL2FybS12ZXJzYXRpbGUtOTI2ZWpzIgorS0JSQU5DSF9xZW11YXJtNjQgPz0gInN0YW5kYXJkL3FlbXVhcm02NCIKK0tCUkFOQ0hfcWVtdW1pcHMgPz0gInN0YW5kYXJkL210aS1tYWx0YTMyIgorS0JSQU5DSF9xZW11cHBjICA/PSAic3RhbmRhcmQvcWVtdXBwYyIKK0tCUkFOQ0hfcWVtdXg4NiAgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXV4ODYtNjQgPz0gInN0YW5kYXJkL2Jhc2UiCitLQlJBTkNIX3FlbXVtaXBzNjQgPz0gInN0YW5kYXJkL210aS1tYWx0YTY0IgorCitTUkNSRVZfbWFjaGluZV9xZW11YXJtID89ICIzYzEyNDVkMTYyY2NiNTVkZTFhZjQyYmNmM2RiZjY5MDQ1N2JmOWU0IgorU1JDUkVWX21hY2hpbmVfcWVtdWFybTY0ID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdW1pcHMgPz0gIjQxMzJhNjkxZDA5MDhkMTBiOGYwN2NlN2VjZTAyZTZkYzk0ZTE3YmMiCitTUkNSRVZfbWFjaGluZV9xZW11cHBjID89ICI1OWI4YzRmNWU4ZGRiOWMzM2M2MmZmZjIyMjA0ZmUyYjBkOGM3MDNlIgorU1JDUkVWX21hY2hpbmVfcWVtdXg4NiA/PSAiNTliOGM0ZjVlOGRkYjljMzNjNjJmZmYyMjIwNGZlMmIwZDhjNzAzZSIKK1NSQ1JFVl9tYWNoaW5lX3FlbXV4ODYtNjQgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWFjaGluZV9xZW11bWlwczY0ID89ICIwMzNlMWFhNjMzNDY1NDQ5ZWRmNTQ0ZWI4MWFkZGEwY2FmMTZlYzYwIgorU1JDUkVWX21hY2hpbmUgPz0gIjU5YjhjNGY1ZThkZGI5YzMzYzYyZmZmMjIyMDRmZTJiMGQ4YzcwM2UiCitTUkNSRVZfbWV0YSA/PSAiNDI5ZjllMmZmMDY0OWI4YzkzNDEzNDU2MjI1NDVkODc0ZDVlMzAzYSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9saW51eC15b2N0by00LjEuZ2l0O25hbWU9bWFjaGluZTticmFuY2g9JHtLQlJBTkNIfTsgXAorICAgICAgICAgICBnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy95b2N0by1rZXJuZWwtY2FjaGU7dHlwZT1rbWV0YTtuYW1lPW1ldGE7YnJhbmNoPXlvY3RvLTQuMTtkZXN0c3VmZml4PSR7S01FVEF9IgorCitMSU5VWF9WRVJTSU9OID89ICI0LjEuNiIKKworUFYgPSAiJHtMSU5VWF9WRVJTSU9OfStnaXQke1NSQ1BWfSIKKworS01FVEEgPSAia2VybmVsLW1ldGEiCitLQ09ORl9CU1BfQVVESVRfTEVWRUwgPSAiMiIKKworQ09NUEFUSUJMRV9NQUNISU5FID0gInFlbXVhcm18cWVtdWFybTY0fHFlbXV4ODZ8cWVtdXBwY3xxZW11bWlwc3xxZW11bWlwczY0fHFlbXV4ODYtNjQiCisKKyMgRnVuY3Rpb25hbGl0eSBmbGFncworS0VSTkVMX0VYVFJBX0ZFQVRVUkVTID89ICJmZWF0dXJlcy9uZXRmaWx0ZXIvbmV0ZmlsdGVyLnNjYyIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmQgPSAiICR7S0VSTkVMX0VYVFJBX0ZFQVRVUkVTfSIKK0tFUk5FTF9GRUFUVVJFU19hcHBlbmRfcWVtdXg4Nj0iIGNmZy9zb3VuZC5zY2MgY2ZnL3BhcmF2aXJ0X2t2bS5zY2MiCitLRVJORUxfRkVBVFVSRVNfYXBwZW5kX3FlbXV4ODYtNjQ9IiBjZmcvc291bmQuc2NjIGNmZy9wYXJhdmlydF9rdm0uc2NjIgorS0VSTkVMX0ZFQVRVUkVTX2FwcGVuZCA9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibXgzMiIsICIgY2ZnL3gzMi5zY2MiLCAiIiAsZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9iYWJlbHRyYWNlLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UyYzRlMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZS8wMDAxLUZpeC1pbnZhbGlkLXBvaW50ZXItZnJlZS13aXRoLXRyYWNlLWNvbGxlY3Rpb24ucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorRnJvbSBlNGNhZDkwMDk5NGNmMjg2ZDk3MTc5NmE5NDdmZWE3ODJkZmM2NjUxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMTUgSnVuIDIwMTUgMTE6NDM6MDIgLTA0MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IGludmFsaWQgcG9pbnRlciBmcmVlIHdpdGggdHJhY2UgY29sbGVjdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitQYXRjaCBwcm9wb3NlZCBieSBMaSBSb25nUWluZyByZWxhdGVkIHRvIGJ1ZyMgNzkwCisKK1NpZ25lZC1vZmYtYnk6IE1pa2FlbCBCZWNraXVzIDxtaWthZWwuYmVja2l1c0B3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogRnJhbmNpcyBHaXJhbGRlYXUgPGZyYW5jaXMuZ2lyYWxkZWF1QGdtYWlsLmNvbT4KKy0tLQorIGxpYi9jb250ZXh0LmMgfCA4ICsrKy0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYi9jb250ZXh0LmMgYi9saWIvY29udGV4dC5jCitpbmRleCA0NWFhYjM0Li44ZDM3NzBmIDEwMDY0NAorLS0tIGEvbGliL2NvbnRleHQuYworKysrIGIvbGliL2NvbnRleHQuYworQEAgLTc5LDcgKzc5LDcgQEAgaW50IGJ0X2NvbnRleHRfYWRkX3RyYWNlKHN0cnVjdCBidF9jb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBhdGgsCisgCXN0cnVjdCBidF90cmFjZV9kZXNjcmlwdG9yICp0ZDsKKyAJc3RydWN0IGJ0X2Zvcm1hdCAqZm10OworIAlzdHJ1Y3QgYnRfdHJhY2VfaGFuZGxlICpoYW5kbGU7CistCWludCByZXQsIGNsb3NlcmV0OworKwlpbnQgcmV0OworIAorIAlpZiAoIWN0eCB8fCAhZm9ybWF0X25hbWUgfHwgKCFwYXRoICYmICFzdHJlYW1fbGlzdCkpCisgCQlyZXR1cm4gLUVJTlZBTDsKK0BAIC0xNTksMTAgKzE1OSw4IEBAIGludCBidF9jb250ZXh0X2FkZF90cmFjZShzdHJ1Y3QgYnRfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpwYXRoLAorIAlyZXR1cm4gaGFuZGxlLT5pZDsKKyAKKyBlcnJvcjoKKy0JY2xvc2VyZXQgPSBmbXQtPmNsb3NlX3RyYWNlKHRkKTsKKy0JaWYgKGNsb3NlcmV0KSB7CistCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluIGNsb3NlX3RyYWNlIGNhbGxiYWNrXG4iKTsKKy0JfQorKwlpZiAoaGFuZGxlKQorKwkJYnRfY29udGV4dF9yZW1vdmVfdHJhY2UoY3R4LCBoYW5kbGUtPmlkKTsKKyBlbmQ6CisgCXJldHVybiByZXQ7CisgfQorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4yLjQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2JhYmVsdHJhY2VfMS4yLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2YmU0MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvYmFiZWx0cmFjZV8xLjIuNC5iYgpAQCAtMCwwICsxLDI0IEBACitTVU1NQVJZID0gIkJhYmVsdHJhY2UgLSBUcmFjZSBGb3JtYXQgQmFiZWwgVG93ZXIiCitERVNDUklQVElPTiA9ICJCYWJlbHRyYWNlIHByb3ZpZGVzIHRyYWNlIHJlYWQgYW5kIHdyaXRlIGxpYnJhcmllcyBpbiBob3N0IHNpZGUsIGFzIHdlbGwgYXMgYSB0cmFjZSBjb252ZXJ0ZXIsIHdoaWNoIHVzZWQgdG8gY29udmVydCBMVFRuZyAyLjAgdHJhY2VzIGludG8gaHVtYW4tcmVhZGFibGUgbG9nLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2JhYmVsdHJhY2UiCisKK0xJQ0VOU0UgPSAiTUlUICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT03NmJhMTVkZDc2YTI0OGUxZGQ1MjZiY2EwZTIxMjVmYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgdXRpbC1saW51eCBwb3B0IGJpc29uLW5hdGl2ZSBmbGV4LW5hdGl2ZSIKKworU1JDUkVWID0gIjkwMzk1ODI0ZWZjMDA3ZGU4ODc4N2E2YjhlNDAwYTA3Yzk4MGJlMWMiCitQViA9ICIxLjIuNCtnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQuZWZmaWNpb3MuY29tL2JhYmVsdHJhY2UuZ2l0O2JyYW5jaD1zdGFibGUtMS4yIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRml4LWludmFsaWQtcG9pbnRlci1mcmVlLXdpdGgtdHJhY2UtY29sbGVjdGlvbi5wYXRjaCBcCisiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkoIGNkICR7U307ICR7U30vYm9vdHN0cmFwICkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctbW9kdWxlc19naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTQ0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLW1vZHVsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsMzMgQEAKK1NFQ1RJT04gPSAiZGV2ZWwiCitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgS0VSTkVMIE1PRFVMRSIKK0RFU0NSSVBUSU9OID0gIlRoZSBsdHRuZy1tb2R1bGVzIDIuMCBwYWNrYWdlIGNvbnRhaW5zIHRoZSBrZXJuZWwgdHJhY2VyIG1vZHVsZXMiCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIgJiBNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0xNDEyY2FmNWExYWE5MGQ2YTQ4NTg4YTQ3OTRjMGVhYyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKKworaW5oZXJpdCBtb2R1bGUKKworU1JDUkVWID0gIjdhODhmOGI1MDY5NmRkNzFlODBjMDg2NjExNTljYWY4ZTExOWJmNTEiCitQViA9ICIyLjYuMitnaXQke1NSQ1BWfSIKKworQ09NUEFUSUJMRV9IT1NUID0gJyh4ODZfNjR8aS44Nnxwb3dlcnBjfGFhcmNoNjR8bWlwc3xhcm0pLiotbGludXgnCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmx0dG5nLm9yZy9sdHRuZy1tb2R1bGVzLmdpdDticmFuY2g9c3RhYmxlLTIuNiIKKworZXhwb3J0IElOU1RBTExfTU9EX0RJUj0ia2VybmVsL2x0dG5nLW1vZHVsZXMiCisKK0VYVFJBX09FTUFLRSArPSAiS0VSTkVMRElSPScke1NUQUdJTkdfS0VSTkVMX0RJUn0nIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIERlbGV0ZSBlbXB0eSBkaXJlY3RvcmllcyB0byBhdm9pZCBRQSBmYWlsdXJlcyBpZiBubyBtb2R1bGVzIHdlcmUgYnVpbHQKKwlmaW5kICR7RH0vbGliIC1kZXB0aCAtdHlwZSBkIC1lbXB0eSAtZXhlYyBybWRpciB7fSBcOworfQorCitweXRob24gZG9fcGFja2FnZV9wcmVwZW5kKCkgeworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZC5nZXRWYXIoJ0QnLCBUcnVlKSwgJ2xpYi9tb2R1bGVzJykpOgorICAgICAgICBiYi53YXJuKCIlczogbm8gbW9kdWxlcyB3ZXJlIGNyZWF0ZWQ7IHRoaXMgbWF5IGJlIGR1ZSB0byBDT05GSUdfVFJBQ0VQT0lOVFMgbm90IGJlaW5nIGVuYWJsZWQgaW4geW91ciBrZXJuZWwuIiAlIGQuZ2V0VmFyKCdQTicsIFRydWUpKQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvZXh0ZXJuLWRlY2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OWVmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2V4dGVybi1kZWNscy5wYXRjaApAQCAtMCwwICsxLDQ0MiBAQAorVGhpcyBtYWtlIHRoZSBkZWNsYXJhdGlvbnMgdG8gYmUgZXh0ZXJuIHNvIHRoZXkgZG9udCBlbmQgdXAKK2luIGR1cGxpY2F0ZXMgaW4gZGF0YS5yZWwucm8gc2VjdGlvbnMKKworYXZvaWQgZXJyb3JzIGxpa2UKKworfCAuLi8uLi8uLi9zcmMvY29tbW9uLy5saWJzL2xpYmNvbW1vbi5hKG1pLWx0dG5nLm8pOiguZGF0YS5yZWwucm8ubG9jYWwrMHgwKTogbXVsdGlwbGUgZGVmaW5pdGlvbiBvZiBgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHMnCit8IGNvbW1hbmRzL2VuYWJsZV9ldmVudHMubzooLmJzcysweDQ4KTogZmlyc3QgZGVmaW5lZCBoZXJlCit8IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworfCBNYWtlZmlsZTo1MDI6IHJlY2lwZSBmb3IgdGFyZ2V0ICdsdHRuZycgZmFpbGVkCit8IG1ha2VbM106ICoqKiBbbHR0bmddIEVycm9yIDEKKworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBnaXQvc3JjL2NvbW1vbi9jb25maWcvY29uZmlnLXNlc3Npb24tYWJpLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorKysrIGdpdC9zcmMvY29tbW9uL2NvbmZpZy9jb25maWctc2Vzc2lvbi1hYmkuaAorQEAgLTE4LDk1ICsxOCw5NSBAQAorICNpZm5kZWYgQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSAorICNkZWZpbmUgQ09ORklHX1NFU1NJT05fSU5URVJOQUxfSAorIAorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jaGFubmVsczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kb21haW5zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9ldmVudDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb250ZXh0czsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYXR0cmlidXRlczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXhjbHVzaW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9leGNsdXNpb25zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9mdW5jdGlvbl9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wcm9iZV9hdHRyaWJ1dGVzOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zeW1ib2xfbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYWRkcmVzczsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb2Zmc2V0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9uYW1lOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9lbmFibGVkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdmVyd3JpdGVfbW9kZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3ViYnVmX3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X251bV9zdWJidWY7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N3aXRjaF90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcmVhZF90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9vdXRwdXRfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHJhY2VmaWxlX3NpemU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9jb3VudDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbGl2ZV90aW1lcl9pbnRlcnZhbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfdHlwZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYnVmZmVyX3R5cGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3Nlc3Npb25zOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wZXJmOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9jb25maWc7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N0YXJ0ZWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X21vZGU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbF90eXBlOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9maWx0ZXI7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X291dHB1dHM7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnN1bWVyX291dHB1dDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGVzdGluYXRpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3BhdGg7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25ldF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRyb2xfdXJpOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9kYXRhX3VyaTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbWF4X3NpemU7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9rZXJuZWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV91c3Q7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9qdWw7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9sb2c0ajsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl9waWQ7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfdWlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfZ2xvYmFsOworLQorLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfZGlzY2FyZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX292ZXJ3cml0ZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX3NwbGljZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX21tYXA7CistCistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19sb2dsZXZlbF90eXBlX3NpbmdsZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV90cmFjZXBvaW50OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9wcm9iZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfZnVuY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uX2VudHJ5OworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9ub29wOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9zeXNjYWxsOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcHJvYmU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2tyZXRwcm9iZTsKKy0KKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcm9jbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHJpbzsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfbmljZTsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92dGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcGlkOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF92cHBpZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfcHRocmVhZF9pZDsKKy1jb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaG9zdG5hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X2lwOworLWNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wZXJmX3RocmVhZF9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY2hhbm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NoYW5uZWxzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZG9tYWluczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZXZlbnRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29udGV4dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRleHRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2V4Y2x1c2lvbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9mdW5jdGlvbl9hdHRyaWJ1dGVzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfcHJvYmVfYXR0cmlidXRlczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3N5bWJvbF9uYW1lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYWRkcmVzczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X29mZnNldDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9lbmFibGVkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3ZlcndyaXRlX21vZGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zdWJidWZfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X251bV9zdWJidWY7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zd2l0Y2hfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9yZWFkX3RpbWVyX2ludGVydmFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfb3V0cHV0X3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90cmFjZWZpbGVfc2l6ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3RyYWNlZmlsZV9jb3VudDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xpdmVfdGltZXJfaW50ZXJ2YWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF90eXBlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfYnVmZmVyX3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zZXNzaW9uOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc2Vzc2lvbnM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wZXJmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uZmlnOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfc3RhcnRlZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X3NuYXBzaG90X21vZGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9sb2dsZXZlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2xvZ2xldmVsX3R5cGU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9maWx0ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9zbmFwc2hvdF9vdXRwdXRzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfY29uc3VtZXJfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGVzdGluYXRpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9wYXRoOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfbmV0X291dHB1dDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19lbGVtZW50X2NvbnRyb2xfdXJpOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2VsZW1lbnRfZGF0YV91cmk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZWxlbWVudF9tYXhfc2l6ZTsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9rZXJuZWw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZG9tYWluX3R5cGVfdXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2RvbWFpbl90eXBlX2p1bDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19kb21haW5fdHlwZV9sb2c0ajsKKysKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19idWZmZXJfdHlwZV9wZXJfcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2J1ZmZlcl90eXBlX3Blcl91aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfYnVmZmVyX3R5cGVfZ2xvYmFsOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX292ZXJ3cml0ZV9tb2RlX2Rpc2NhcmQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfb3ZlcndyaXRlX21vZGVfb3ZlcndyaXRlOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX291dHB1dF90eXBlX3NwbGljZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19vdXRwdXRfdHlwZV9tbWFwOworKworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2xvZ2xldmVsX3R5cGVfcmFuZ2U7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV90cmFjZXBvaW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfcHJvYmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX2Z1bmN0aW9uX2VudHJ5OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X3R5cGVfbm9vcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF90eXBlX3N5c2NhbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcHJvYmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfdHlwZV9rcmV0cHJvYmU7CisrCisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9waWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcm9jbmFtZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3ByaW87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9uaWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3RpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3Z0aWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wcGlkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfdnBwaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9wdGhyZWFkX2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgY29uZmlnX2V2ZW50X2NvbnRleHRfaG9zdG5hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBjb25maWdfZXZlbnRfY29udGV4dF9pcDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGNvbmZpZ19ldmVudF9jb250ZXh0X3BlcmZfdGhyZWFkX2NvdW50ZXI7CisgCisgI2VuZGlmIC8qIENPTkZJR19TRVNTSU9OX0lOVEVSTkFMX0ggKi8KK0luZGV4OiBnaXQvc3JjL2NvbW1vbi9taS1sdHRuZy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc3JjL2NvbW1vbi9taS1sdHRuZy5oCisrKysgZ2l0L3NyYy9jb21tb24vbWktbHR0bmcuaAorQEAgLTQ5LDEzMyArNDksMTMzIEBAIHN0cnVjdCBtaV9sdHRuZ192ZXJzaW9uIHsKKyB9OworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FjdGlvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2FkZF9jb250ZXh0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY2FsaWJyYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY3JlYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfZGVzdHJveTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfY2hhbm5lbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfY2hhbm5lbHM7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfZXZlbnQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9saXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbG9hZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX25hbWU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9vdXRwdXQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zYXZlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2V0X3Nlc3Npb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2FkZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2RlbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2xpc3Q7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9yZWNvcmQ7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdGFydDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N0b3A7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdWNjZXNzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfdmVyc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9hY3Rpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfYWRkX2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfY2FsaWJyYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2NyZWF0ZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kZXN0cm95OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2Rpc2FibGVfY2hhbm5lbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9kaXNhYmxlX2V2ZW50OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX2VuYWJsZV9jaGFubmVsczsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9lbmFibGVfZXZlbnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfbGlzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9sb2FkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfb3V0cHV0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NhdmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc2V0X3Nlc3Npb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3Q7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfc25hcHNob3RfYWRkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X2RlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zbmFwc2hvdF9saXN0OworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3NuYXBzaG90X3JlY29yZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdGFydDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY29tbWFuZF9zdG9wOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jb21tYW5kX3N1Y2Nlc3M7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NvbW1hbmRfdmVyc2lvbjsKKyAKKyAvKiBTdHJpbmdzIHJlbGF0ZWQgdG8gdmVyc2lvbiBjb21tYW5kICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2NvbW1pdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX2Rlc2NyaXB0aW9uOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbGljZW5zZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX21ham9yOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbWlub3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9wYXRjaF9sZXZlbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3N0cjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF92ZXJzaW9uX3dlYjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9jb21taXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fZGVzY3JpcHRpb247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fbGljZW5zZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9tYWpvcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9taW5vcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9wYXRjaF9sZXZlbDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdmVyc2lvbl9zdHI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3ZlcnNpb25fd2ViOworIAorIC8qIFN0cmluZyByZWxhdGVkIHRvIGEgbHR0bmdfZXZlbnRfZmllbGQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2V2ZW50X2ZpZWxkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ldmVudF9maWVsZHM7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbHR0bmdfZXZlbnRfY29udGV4dCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jb3VudGVyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jcHVfY291bnRlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfdGhyZWFkX2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl9jb3VudGVyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfY29udGV4dF90eXBlX3BlcmZfY3B1X2NvdW50ZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19jb250ZXh0X3R5cGVfcGVyZl90aHJlYWRfY291bnRlcjsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsdHRuZ19ldmVudF9wZXJmX2NvdW50ZXJfY3R4ICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGVyZl9jb3VudGVyX2NvbnRleHQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BlcmZfY291bnRlcl9jb250ZXh0OworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBwaWQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRzOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9waWRfaWQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3BpZDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfcGlkX2lkOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBzYXZlIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zYXZlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zYXZlOworIAorIC8qIFN0cmluZ3MgcmVsYXRlZCB0byBsb2FkIGNvbW1hbmQgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9sb2FkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9sb2FkOworIAorIC8qIEdlbmVyYWwgZWxlbWVudCBvZiBtaV9sdHRuZyAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2VtcHR5OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2lkOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X25vd3JpdGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc3VjY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2VudW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9mbG9hdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2ludGVnZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9vdGhlcjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX3N0cmluZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfZW1wdHk7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2lkOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9ub3dyaXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zdWNjZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF90eXBlX2VudW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfZmxvYXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3R5cGVfaW50ZWdlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9vdGhlcjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfdHlwZV9zdHJpbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2FsZXJ0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfY3JpdDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfZnVuY3Rpb247CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19saW5lOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfbW9kdWxlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfcHJvY2VzczsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2dyYW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19zeXN0ZW07CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z191bml0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZW1lcmc7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9lcnI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9pbmZvOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbm90aWNlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfdW5rbm93bjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3dhcm5pbmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfYWxlcnQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfY3JpdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1ZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19saW5lOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX21vZHVsZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9kZWJ1Z19wcm9jZXNzOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3Byb2dyYW07CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZGVidWdfc3lzdGVtOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2RlYnVnX3VuaXQ7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZW1lcmc7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfZXJyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2luZm87CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbm90aWNlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX3Vua25vd247CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfd2FybmluZzsKKyAKKyAvKiBTdHJpbmcgcmVsYXRlZCB0byBsb2dsZXZlbCBKVUwgKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9hbGw7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfY29uZmlnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXI7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXN0OworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2luZm87CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfb2ZmOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3NldmVyZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF93YXJuaW5nOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2NvbmZpZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfZmluZXI7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX2ZpbmVzdDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9qdWxfb2ZmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2p1bF9zZXZlcmU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfanVsX3dhcm5pbmc7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgTG9nNGogKi8KKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX29mZjsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2ZhdGFsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfZXJyb3I7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al93YXJuOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfaW5mbzsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2RlYnVnOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfdHJhY2U7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9hbGw7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfb2ZmOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2ZhdGFsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX2Vycm9yOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfc3RyX2xvZzRqX3dhcm47CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF9zdHJfbG9nNGpfaW5mbzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9kZWJ1ZzsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al90cmFjZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3N0cl9sb2c0al9hbGw7CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gbG9nbGV2ZWwgdHlwZSAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19sb2dsZXZlbF90eXBlX2FsbDsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9zaW5nbGU7CistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfdW5rbm93bjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfYWxsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV9yYW5nZTsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2xvZ2xldmVsX3R5cGVfc2luZ2xlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfbG9nbGV2ZWxfdHlwZV91bmtub3duOworIAorIC8qIFN0aW5nIHJlbGF0ZWQgdG8gbHR0bmdfY2FsaWJyYXRlICovCistY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X2NhbGlicmF0ZV9mdW5jdGlvbjsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfY2FsaWJyYXRlOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9jYWxpYnJhdGVfZnVuY3Rpb247CisgCisgLyogU3RyaW5nIHJlbGF0ZWQgdG8gYSBsdHRuZ19zbmFwc2hvdCAqLworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2N0cmxfdXJsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2RhdGFfdXJsOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X21heF9zaXplOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X25fcHRyOworLWNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X3Nlc3Npb25fbmFtZTsKKy1jb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdHM7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X2N0cmxfdXJsOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9kYXRhX3VybDsKKytleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IG1pX2x0dG5nX2VsZW1lbnRfc25hcHNob3RfbWF4X3NpemU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90X25fcHRyOworK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgbWlfbHR0bmdfZWxlbWVudF9zbmFwc2hvdF9zZXNzaW9uX25hbWU7CisrZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBtaV9sdHRuZ19lbGVtZW50X3NuYXBzaG90czsKKyAKKyAvKiBVdGlsaXR5IHN0cmluZyBmdW5jdGlvbiAgKi8KKyBjb25zdCBjaGFyICptaV9sdHRuZ19sb2dsZXZlbF9zdHJpbmcoaW50IHZhbHVlLCBlbnVtIGx0dG5nX2RvbWFpbl90eXBlIGRvbWFpbik7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL2x0dG5nLXRvb2xzLUZpeC1saXZlLXRpbWVyLWNhbGN1bGF0aW9uLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzE5ZDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDE2MTQ5NmZiZTE0NjU4MTdhNzdhNTBhMTE3MjczNGRhZTgxYTEzZWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMTUgMTE6MTE6NDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbHR0bmctdG9vbHM6IEZpeCBsaXZlIHRpbWVyIGNhbGN1bGF0aW9uIGVycm9yCisKK1RoZXJlIGlzIGFuIGNhbGN1bGF0aW9uIGVycm9yIGZvciBsaXZlIHRpbWVyLiBWYXJpYWJsZSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgaXMKK2Jhc2VkIG9uIG1pY3Jvc2Vjb25kLCBhbmQgaXQgaXMgbm90IHJpZ2h0IHRvIGFzc2lnbiBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgbW9kCisxMDAwMDAwIHRvIHZhciB0dl9uc2VjIHdoaWNoIGlzIGJhc2VkIG9uIG5hbm9zZWNvbmQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEppYW5jaHVhbiBXYW5nIDxqaWFuY2h1YW4ud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYyBiL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworaW5kZXggMTQwODA1Mi4uYzYyMDJiYSAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vY29uc3VtZXItdGltZXIuYworKysrIGIvc3JjL2NvbW1vbi9jb25zdW1lci10aW1lci5jCitAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgY29uc3VtZXJfdGltZXJfc3dpdGNoX3N0YXJ0KHN0cnVjdCBsdHRuZ19jb25zdW1lcl9jaGFubmVsICpjaGFubmVsLAorIAljaGFubmVsLT5zd2l0Y2hfdGltZXJfZW5hYmxlZCA9IDE7CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBzd2l0Y2hfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IHN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKHN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCitAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgY29uc3VtZXJfdGltZXJfbGl2ZV9zdGFydChzdHJ1Y3QgbHR0bmdfY29uc3VtZXJfY2hhbm5lbCAqY2hhbm5lbCwKKyAJY2hhbm5lbC0+bGl2ZV90aW1lcl9lbmFibGVkID0gMTsKKyAKKyAJaXRzLml0X3ZhbHVlLnR2X3NlYyA9IGxpdmVfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGxpdmVfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwOworKwlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IChsaXZlX3RpbWVyX2ludGVydmFsICUgMTAwMDAwMCkgKiAxMDAwOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfc2VjID0gaXRzLml0X3ZhbHVlLnR2X3NlYzsKKyAJaXRzLml0X2ludGVydmFsLnR2X25zZWMgPSBpdHMuaXRfdmFsdWUudHZfbnNlYzsKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzU4ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW4tcHRlc3QKQEAgLTAsMCArMSw0IEBACisjIS9iaW4vc2gKKworbWFrZSAtQyB0ZXN0cyBpbnN0YWxsY2hlY2sKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LTIuNC4wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OGJjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXRvb2xzL3J1bnRlc3QtMi40LjAucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDU4NGY1OWIuLmMyYmNhYmQgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0xMiwzICsxMiw5IEBAIGRpc3RfZG9jX0RBVEEgPSBMSUNFTlNFIFwKKyBkaXN0X25vaW5zdF9EQVRBID0gQ29kaW5nU3R5bGUKKyAKKyBFWFRSQV9ESVNUID0gZXh0cmFzL2x0dG5nLWJhc2hfY29tcGxldGlvbiBncGwtMi4wLnR4dCBsZ3BsLTIuMS50eHQKKysKKytpbnN0YWxsLXB0ZXN0OgorKwljcCAtciAkKHNyY2RpcikvdGVzdHMgJChERVNURElSKQorKwlmb3IgbSBpbiAkJChmaW5kICQoREVTVERJUikvdGVzdHMgLW5hbWUgTWFrZWZpbGUpOyBkbyBcCisrICAgICAgICAgIHNlZCAtaSAtZSAnc3xeTWFrZWZpbGU6fF9NYWtlZmlsZTp8JyAkJG07IFwKKysgICAgICAgIGRvbmUKK2RpZmYgLS1naXQgYS90ZXN0cy9ydW4uc2ggYi90ZXN0cy9ydW4uc2gKK2luZGV4IGM2YzUwZmQuLjY0NTUzNTkgMTAwNzU1CistLS0gYS90ZXN0cy9ydW4uc2gKKysrKyBiL3Rlc3RzL3J1bi5zaAorQEAgLTE5LDQgKzE5LDcgQEAKKyAKKyBbIC16ICIkMSIgXSAmJiBlY2hvICJFcnJvcjogTm8gdGVzdGxpc3QuIFBsZWFzZSBzcGVjaWZ5IGEgdGVzdGxpc3QgdG8gcnVuLiIgJiYgZXhpdCAxCisgCistcHJvdmUgLS1tZXJnZSAtLWV4ZWMgJycgLSA8ICQxCisrcHJvdmUgLS1tZXJnZSAtdiAtLWV4ZWMgJycgLSA8ICQxIHwgc2VkIFwKKysgIC1lICdzfF5vayBcKC4qXCl8UEFTUzogXDF8JyBcCisrICAtZSAnc3xebm90IG9rIFwoLipcKXxGQUlMOiBcMXwnIFwKKysgIHwgZWdyZXAgLWggJ1BBU1N8RkFJTCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHMvcnVudGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVhNWRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29scy9ydW50ZXN0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCA1ODRmNTliLi5jMmJjYWJkIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtMTIsMyArMTIsOSBAQCBkaXN0X2RvY19EQVRBID0gTElDRU5TRSBcCisgZGlzdF9ub2luc3RfREFUQSA9IENvZGluZ1N0eWxlCisgCisgRVhUUkFfRElTVCA9IGV4dHJhcy9sdHRuZy1iYXNoX2NvbXBsZXRpb24gZ3BsLTIuMC50eHQgbGdwbC0yLjEudHh0CisrCisraW5zdGFsbC1wdGVzdDoKKysJY3AgLXIgJChzcmNkaXIpL3Rlc3RzICQoREVTVERJUikKKysJZm9yIG0gaW4gJCQoZmluZCAkKERFU1RESVIpL3Rlc3RzIC1uYW1lIE1ha2VmaWxlKTsgZG8gXAorKyAgICAgICAgICBzZWQgLWkgLWUgJ3N8Xk1ha2VmaWxlOnxfTWFrZWZpbGU6fCcgJCRtOyBcCisrICAgICAgICBkb25lCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNmQ1YjAwZC4uMzc3NGY5ZCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEsMTQgKzEsMTcgQEAKKyBTVUJESVJTID0gdXRpbHMgcmVncmVzc2lvbiB1bml0IHN0cmVzcworIAorLWlmIFVTRV9QWVRIT04KKy1jaGVjay1hbToKKytpbnN0YWxsY2hlY2stYW06CisgCS4vcnVuLnNoIHVuaXRfdGVzdHMKKyAJLi9ydW4uc2ggZmFzdF9yZWdyZXNzaW9uCisraWYgVVNFX1BZVEhPTgorIAkuL3J1bi5zaCB3aXRoX2JpbmRpbmdzX3JlZ3Jlc3Npb24KKy1lbHNlCisrZW5kaWYKKysKKyBjaGVjay1hbToKKyAJLi9ydW4uc2ggdW5pdF90ZXN0cworIAkuL3J1bi5zaCBmYXN0X3JlZ3Jlc3Npb24KKytpZiBVU0VfUFlUSE9OCisrCS4vcnVuLnNoIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorIGVuZGlmCisgCisgZGlzdF9ub2luc3RfU0NSSVBUUyA9IHJ1bi5zaCB1bml0X3Rlc3RzIGZhc3RfcmVncmVzc2lvbiBsb25nX3JlZ3Jlc3Npb24gcm9vdF9yZWdyZXNzaW9uIHdpdGhfYmluZGluZ3NfcmVncmVzc2lvbgorZGlmZiAtLWdpdCBhL3Rlc3RzL3J1bi5zaCBiL3Rlc3RzL3J1bi5zaAoraW5kZXggYzZjNTBmZC4uNjQ1NTM1OSAxMDA3NTUKKy0tLSBhL3Rlc3RzL3J1bi5zaAorKysrIGIvdGVzdHMvcnVuLnNoCitAQCAtMTksNCArMTksNyBAQAorIAorIFsgLXogIiQxIiBdICYmIGVjaG8gIkVycm9yOiBObyB0ZXN0bGlzdC4gUGxlYXNlIHNwZWNpZnkgYSB0ZXN0bGlzdCB0byBydW4uIiAmJiBleGl0IDEKKyAKKy1wcm92ZSAtLW1lcmdlIC0tZXhlYyAnJyAtIDwgJDEKKytwcm92ZSAtLW1lcmdlIC12IC0tZXhlYyAnJyAtIDwgJDEgfCBzZWQgXAorKyAgLWUgJ3N8Xm9rIFwoLipcKXxQQVNTOiBcMXwnIFwKKysgIC1lICdzfF5ub3Qgb2sgXCguKlwpfEZBSUw6IFwxfCcgXAorKyAgfCBlZ3JlcCAtaCAnUEFTU3xGQUlMJwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9sdHRuZy9sdHRuZy10b29sc18yLjYuMC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM5N2E5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdG9vbHNfMi42LjAuYmIKQEAgLTAsMCArMSw4MiBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiTGludXggVHJhY2UgVG9vbGtpdCBDb250cm9sIgorREVTQ1JJUFRJT04gPSAiVGhlIExpbnV4IHRyYWNlIHRvb2xraXQgaXMgYSBzdWl0ZSBvZiB0b29scyBkZXNpZ25lZCBcCit0byBleHRyYWN0IHByb2dyYW0gZXhlY3V0aW9uIGRldGFpbHMgZnJvbSB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSBcCithbmQgaW50ZXJwcmV0IHRoZW0uIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wMWQ3ZmM0NDk2YWFjZjM3ZDkwZGY5MGI5MGIwY2FjMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9ncGwtMi4wLnR4dDttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGdwbC0yLjEudHh0O21kNT0wZjBkNzE1MDBlNmE1N2ZkMjRkODI1ZjMzMjQyYjljYSIKKworREVQRU5EUyA9ICJsaWJ1cmN1IHBvcHQgbHR0bmctdXN0IGxpYnhtbDIiCitSREVQRU5EU18ke1BOfS1wdGVzdCArPSAibWFrZSBwZXJsIGJhc2giCisKK1NSQ1JFViA9ICJkNTIyYzFmMTQyODVlMmU4YjEwYjdjMGNkMDExODQ3Njk2ZmZlNzc5IgorCitQWVRIT05fT1BUSU9OID0gImFtX2N2X3B5dGhvbl9weWV4ZWNkaXI9JyR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcycgXAorICAgICAgICAgICAgICAgICBhbV9jdl9weXRob25fcHl0aG9uZGlyPScke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L3NpdGUtcGFja2FnZXMnIFwKKyAgICAgICAgICAgICAgICAgUFlUSE9OX0lOQ0xVREU9Jy1JJHtTVEFHSU5HX0lOQ0RJUn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059JyBcCisiCitQQUNLQUdFQ09ORklHID8/PSAibHR0bmctdXN0IgorUEFDS0FHRUNPTkZJR1tweXRob25dID0gIi0tZW5hYmxlLXB5dGhvbi1iaW5kaW5ncyAke1BZVEhPTl9PUFRJT059LCxweXRob24gc3dpZy1uYXRpdmUiCitQQUNLQUdFQ09ORklHW2x0dG5nLXVzdF0gPSAiLS1lbmFibGUtbHR0bmctdXN0LCAtLWRpc2FibGUtbHR0bmctdXN0LCBsdHRuZy11c3QiCitQQUNLQUdFQ09ORklHW2ttb2RdID0gIi0tZW5hYmxlLWttb2QsIC0tZGlzYWJsZS1rbW9kLCBrbW9kIgorCitTUkNfVVJJID0gImdpdDovL2dpdC5sdHRuZy5vcmcvbHR0bmctdG9vbHMuZ2l0O2JyYW5jaD1zdGFibGUtMi42IFwKKyAgICAgICAgICAgZmlsZTovL3J1bnRlc3QtMi40LjAucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZXh0ZXJuLWRlY2xzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9sdHRuZy10b29scy1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBcCisJICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwdGVzdCBwa2djb25maWcgdXNlcmFkZAorCitVU0VSQUREX1BBQ0tBR0VTID0gIiR7UE59IgorR1JPVVBBRERfUEFSQU1fJHtQTn0gPSAidHJhY2luZyIKKworZXhwb3J0IEtFUk5FTERJUj0iJHtTVEFHSU5HX0tFUk5FTF9ESVJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2x0dG5nL2xpYmV4ZWMvKiAke2RhdGFkaXJ9L3htbC9sdHRuZyBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS9zaXRlLXBhY2thZ2VzLyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9sdHRuZy9saWJleGVjLy5kZWJ1ZyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9weXRob24yLjcvc2l0ZS1wYWNrYWdlcy8uZGVidWciCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qLmEiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vc2l0ZS1wYWNrYWdlcy8qLmxhIgorCisjIFNpbmNlIGZpbGVzIGFyZSBpbnN0YWxsZWQgaW50byAke2xpYmRpcn0vbHR0bmcvbGliZXhlYyB3ZSBtYXRjaCAKKyMgdGhlIGxpYmV4ZWMgaW5zYW5lIHRlc3Qgc28gc2tpcCBpdC4KKyMgUHl0aG9uIG1vZHVsZSBuZWVkcyB0byBrZWVwIF9sdHRuZy5zbworSU5TQU5FX1NLSVBfJHtQTn0gPSAibGliZXhlYyBkZXYtc28iCitJTlNBTkVfU0tJUF8ke1BOfS1kYmcgPSAibGliZXhlYyIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRGVsZXRlIGEgc2hpcHBlZCBtNCBmaWxlIHRoYXQgb3ZlcnJpZGVzIG91ciBwYXRjaGVkIG9uZQorCXJtIC1mICR7U30vY29uZmlnL2xpYnhtbC5tNAorfQorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwljaG1vZCAreCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAorCWZvciBpIGluIGBmaW5kICR7RH0ke1BURVNUX1BBVEh9IC1wZXJtIC91K3ggLXR5cGUgZmA7IGRvCisJCXNlZCAtZSAiczpcJFRFU1RESVIuKi9zcmMvYmluL2x0dG5nL1wkTFRUTkdfQklOOlwkTFRUTkdfQklOOmciIFwKKwkJICAtZSAiczpcJFRFU1RESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRESVIvLi4vc3JjL2Jpbi9sdHRuZy1zZXNzaW9uZC9cJFNFU1NJT05EX0JJTjpcJFNFU1NJT05EX0JJTjpnIiBcCisJCSAgLWUgInM6XCRURVNURElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAorCQkgIC1lICJzOlwkRElSLy4uL3NyYy9iaW4vbHR0bmctY29uc3VtZXJkLzoke2xpYmRpcn0vbHR0bmcvbGliZXhlYy86ZyIgXAorCQkgIC1lICJzOlwkVEVTVERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXNlc3Npb25kL2x0dG5nLXNlc3Npb25kOlwkU0VTU0lPTkRfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9zcmMvYmluL2x0dG5nLXJlbGF5ZC9cJFJFTEFZRF9CSU46XCRSRUxBWURfQklOOmciIFwKKwkJICAtZSAiczpcJERJUi8uLi9iaW4vbHR0bmctcmVsYXlkL1wkUkVMQVlEX0JJTjpcJFJFTEFZRF9CSU46ZyIgXAorCQkgIC1pICRpCisJZG9uZQorCisJc2VkIC1lICJzOnNyYy9iaW4vbHR0bmctc2Vzc2lvbmQ6JGJpbmRpcjpnIiBcCisJICAgIC1lICJzOnNyYy9iaW4vbHR0bmctY29uc3VtZXJkOiR7bGliZXhlY2Rpcn0vbGliZXhlYy86ZyIgXAorCS1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzL3JlZ3Jlc3Npb24vcnVuLXJlcG9ydC5weQorCXNlZCAtZSAiczpzcmMvYmluOmJpbjpnIiAtZSAiczpsdC06OmciIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91dGlscy91dGlscy5zaAorCXNlZCAtZSAiczppbmlfY29uZmlnOlwubGlic1wvaW5pX2NvbmZpZzoiIFwKKwktaSAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cy91bml0L2luaV9jb25maWcvdGVzdF9pbmlfY29uZmlnCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtRml4LWxpdmUtdGltZXItY2FsY3VsYXRpb24tZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxMjBmZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaApAQCAtMCwwICsxLDQyIEBACitGcm9tIDZkMDJhNmMxYWViMWQwNTBmZmU3YzY2MjRiYWI5YWNmYTc2ZmMwNWYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMTIgTWF5IDIwMTUgMTE6MDQ6MzQgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gbHR0bmctdXN0OkZpeCBsaXZlIHRpbWVyIGNhbGN1bGF0aW9uIGVycm9yCisKK1RoZXJlIGlzIGFuIGNhbGN1bGF0aW9uIGVycm9yIGZvciBsaXZlIHRpbWVyLiBWYXJpYWJsZSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgaXMKK2Jhc2VkIG9uIG1pY3Jvc2Vjb25kLCBhbmQgaXQgaXMgbm90IHJpZ2h0IHRvIGFzc2lnbiBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgbW9kCisxMDAwMDAwIHRvIHZhciB0dl9uc2VjIHdoaWNoIGlzIGJhc2VkIG9uIG5hbm9zZWNvbmQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWthZWwgQmVja2l1cyA8bWlrYWVsLmJlY2tpdXNAd2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IEppYW5jaHVhbiBXYW5nIDxqaWFuY2h1YW4ud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYyBiL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworaW5kZXggZWI0ZTQ4Ni4uZTAzNzdhMyAxMDA2NDQKKy0tLSBhL2xpYnJpbmdidWZmZXIvcmluZ19idWZmZXJfZnJvbnRlbmQuYworKysrIGIvbGlicmluZ2J1ZmZlci9yaW5nX2J1ZmZlcl9mcm9udGVuZC5jCitAQCAtNTI4LDcgKzUyOCw3IEBAIHZvaWQgbGliX3JpbmdfYnVmZmVyX2NoYW5uZWxfc3dpdGNoX3RpbWVyX3N0YXJ0KHN0cnVjdCBjaGFubmVsICpjaGFuKQorIAl9CisgCisgCWl0cy5pdF92YWx1ZS50dl9zZWMgPSBjaGFuLT5zd2l0Y2hfdGltZXJfaW50ZXJ2YWwgLyAxMDAwMDAwOworLQlpdHMuaXRfdmFsdWUudHZfbnNlYyA9IGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGNoYW4tPnN3aXRjaF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDApICogMTAwMDsKKyAJaXRzLml0X2ludGVydmFsLnR2X3NlYyA9IGl0cy5pdF92YWx1ZS50dl9zZWM7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9uc2VjID0gaXRzLml0X3ZhbHVlLnR2X25zZWM7CisgCitAQCAtNTgyLDcgKzU4Miw3IEBAIHZvaWQgbGliX3JpbmdfYnVmZmVyX2NoYW5uZWxfcmVhZF90aW1lcl9zdGFydChzdHJ1Y3QgY2hhbm5lbCAqY2hhbikKKyAJfQorIAorIAlpdHMuaXRfdmFsdWUudHZfc2VjID0gY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAvIDEwMDAwMDA7CistCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gY2hhbi0+cmVhZF90aW1lcl9pbnRlcnZhbCAlIDEwMDAwMDA7CisrCWl0cy5pdF92YWx1ZS50dl9uc2VjID0gKGNoYW4tPnJlYWRfdGltZXJfaW50ZXJ2YWwgJSAxMDAwMDAwKSAqIDEwMDA7CisgCWl0cy5pdF9pbnRlcnZhbC50dl9zZWMgPSBpdHMuaXRfdmFsdWUudHZfc2VjOworIAlpdHMuaXRfaW50ZXJ2YWwudHZfbnNlYyA9IGl0cy5pdF92YWx1ZS50dl9uc2VjOworIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdC9sdHRuZy11c3QtZG9jLWV4YW1wbGVzLWRpc2FibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY4YTk4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0L2x0dG5nLXVzdC1kb2MtZXhhbXBsZXMtZGlzYWJsZS5wYXRjaApAQCAtMCwwICsxLDE4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitEb24ndCBidWlsZCB0aGUgZG9jIGV4YW1wbGVzIC0gd2UgZG9uJ3QgbmVlZCB0aGVtIGFuZCBpbiBmYWN0IHRoZXkKK25ldmVyIHN1Y2Nlc3NmdWxseSBidWlsdCBpbiBwcmV2aW91cyBpdGVyYXRpb25zIG9mIHRoZSBsdHRuZy11c3QKK3JlY2lwZSBhbnl3YXkuCisKK1NpZ25lZC1vZmYtYnk6IFRvbSBaYW51c3NpIDx0b20uemFudXNzaUBpbnRlbC5jb20+CisKK0luZGV4OiBkb2MvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhL2RvYy9NYWtlZmlsZS5hbQorKysrIGIvZG9jL01ha2VmaWxlLmFtCitAQCAtMSw0ICsxLDQgQEAKKy1TVUJESVJTID0gLiBleGFtcGxlcworK1NVQkRJUlMgPSAuCisgCisgZGlzdF9tYW5fTUFOUyA9IG1hbi9sdHRuZy1nZW4tdHAuMSBcCisgCW1hbi9sdHRuZy11c3QuMyBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL2x0dG5nL2x0dG5nLXVzdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0YWZkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbHR0bmcvbHR0bmctdXN0X2dpdC5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkxpbnV4IFRyYWNlIFRvb2xraXQgVXNlcnNwYWNlIFRyYWNlciAyLngiCitERVNDUklQVElPTiA9ICJUaGUgTFRUbmcgVVNUIDIueCBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1c2Vyc3BhY2UgdHJhY2VyIGxpYnJhcnkgdG8gdHJhY2UgdXNlcnNwYWNlIGNvZGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHRuZy5vcmcvdXN0IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MubHR0bmcub3JnL3Byb2plY3RzL2x0dG5nLXVzdCIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBNSVQgJiBHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWM5NjNlYjM2NmI3ODEyNTJiMGJmMGZkZjE2MjRkOWU5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NucHJpbnRmL3NucHJpbnRmLmM7ZW5kbGluZT0zMjttZDU9ZDNkNTQ0OTU5ZDhhMzc4MmIyZTA3NDUxYmUwYTkwM2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc25wcmludGYvdmFyaW91cy5oO2VuZGxpbmU9MzE7bWQ1PTg5ZjI1MDliNmI0NjgyYzRmYzk1MjU1ZWVjNGFiZTQ0IgorCitpbmhlcml0IGF1dG90b29scyBsaWJfcGFja2FnZQorCitERVBFTkRTID0gImxpYnVyY3UgdXRpbC1saW51eCIKK1JERVBFTkRTXyR7UE59LWJpbiA9ICJweXRob24tY29yZSIKKworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWZ0ZXIgcmVuYW1lCitSUFJPVklERVNfJHtQTn0gPSAibHR0bmcyLXVzdCIKK1JSRVBMQUNFU18ke1BOfSA9ICJsdHRuZzItdXN0IgorUkNPTkZMSUNUU18ke1BOfSA9ICJsdHRuZzItdXN0IgorCitTUkNSRVYgPSAiYzQ5ZWU5MDQwYWRhNjk4NGM4ODA3NTY2MTRlOGE2ZjdmZDY0NWJkNiIKK1BFID0gIjIiCitQViA9ICIyLjYuMitnaXQke1NSQ1BWfSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQubHR0bmcub3JnL2x0dG5nLXVzdC5naXQ7YnJhbmNoPXN0YWJsZS0yLjYgXAorICAgICAgICAgICBmaWxlOi8vbHR0bmctdXN0LWRvYy1leGFtcGxlcy1kaXNhYmxlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2x0dG5nLXVzdC1GaXgtbGl2ZS10aW1lci1jYWxjdWxhdGlvbi1lcnJvci5wYXRjaCBcCisgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSggY2QgJHtTfTsgJHtTfS9ib290c3RyYXAgKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9QRC5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvUEQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhYzQ5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvbW9kdXRpbHMtaW5pdHNjcmlwdHMvZmlsZXMvUEQucGF0Y2gKQEAgLTAsMCArMSw4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2xpY2Vuc2luZ10KKworSW5kZXg6IG1vZHV0aWxzLWluaXRzY3JpcHRzLTEuMC9MSUNFTlNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbW9kdXRpbHMtaW5pdHNjcmlwdHMtMS4wL0xJQ0VOU0UJMjAxMC0xMi0wNiAxNDoyNjowMy41NzAzMzkwMDIgLTA4MDAKK0BAIC0wLDAgKzEgQEAKKytQdWJsaWMgRG9tYWluCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL2ZpbGVzL21vZHV0aWxzLnNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9tb2R1dGlscy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzhhZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9maWxlcy9tb2R1dGlscy5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKyMjIyBCRUdJTiBJTklUIElORk8KKyMgUHJvdmlkZXM6ICAgICAgICAgIG1vZHVsZS1pbml0LXRvb2xzCisjIFJlcXVpcmVkLVN0YXJ0OiAgICAKKyMgUmVxdWlyZWQtU3RvcDogICAgIAorIyBTaG91bGQtU3RhcnQ6ICAgICAgY2hlY2tyb290CisjIFNob3VsZC1zdG9wOgorIyBEZWZhdWx0LVN0YXJ0OiAgICAgUworIyBEZWZhdWx0LVN0b3A6CisjIFNob3J0LURlc2NyaXB0aW9uOiBQcm9jZXNzIC9ldGMvbW9kdWxlcy4KKyMgRGVzY3JpcHRpb246ICAgICAgIExvYWQgdGhlIG1vZHVsZXMgbGlzdGVkIGluIC9ldGMvbW9kdWxlcy4KKyMjIyBFTkQgSU5JVCBJTkZPCisKK0xPQURfTU9EVUxFPW1vZHByb2JlCitbIC1mIC9wcm9jL21vZHVsZXMgXSB8fCBleGl0IDAKK1sgLWYgL2V0Yy9tb2R1bGVzIF0gfHwgWyAtZCAvZXRjL21vZHVsZXMtbG9hZC5kIF0gfHwgZXhpdCAwCitbIC1lIC9zYmluL21vZHByb2JlIF0gfHwgTE9BRF9NT0RVTEU9aW5zbW9kCisKK2lmIFsgISAtZiAvbGliL21vZHVsZXMvYHVuYW1lIC1yYC9tb2R1bGVzLmRlcCBdOyB0aGVuCisJWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAiQ2FsY3VsYXRpbmcgbW9kdWxlIGRlcGVuZGVuY2llcyAuLi4iCisJZGVwbW9kIC1BZQorZmkKKworbG9hZGVkX21vZHVsZXM9IiAiCisKK3Byb2Nlc3NfZmlsZSgpIHsKKwlmaWxlPSQxCisKKwkoY2F0ICRmaWxlOyBlY2hvOyApIHwKKwl3aGlsZSByZWFkIG1vZHVsZSBhcmdzCisJZG8KKwkJY2FzZSAiJG1vZHVsZSIgaW4KKwkJCVwjKnwiIikgY29udGludWUgOzsKKwkJZXNhYworCQlbIC1uICIkKGVjaG8gJGxvYWRlZF9tb2R1bGVzIHwgZ3JlcCAiICRtb2R1bGUgIikiIF0gJiYgY29udGludWUKKwkJWyAiJFZFUkJPU0UiICE9IG5vIF0gJiYgZWNobyAtbiAiJG1vZHVsZSAiCisJCWV2YWwgIiRMT0FEX01PRFVMRSAkbW9kdWxlICRhcmdzID4vZGV2L251bGwgMj4mMSIKKwkJbG9hZGVkX21vZHVsZXM9IiR7bG9hZGVkX21vZHVsZXN9JHttb2R1bGV9ICIKKwlkb25lCit9CisKK1sgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8gLW4gIkxvYWRpbmcgbW9kdWxlczogIgorWyAtZiAvZXRjL21vZHVsZXMgXSAmJiBwcm9jZXNzX2ZpbGUgL2V0Yy9tb2R1bGVzCisKK1sgLWQgL2V0Yy9tb2R1bGVzLWxvYWQuZCBdIHx8IGV4aXQgMAorCitmb3IgZiBpbiAvZXRjL21vZHVsZXMtbG9hZC5kLyouY29uZjsgZG8KKwlwcm9jZXNzX2ZpbGUgJGYKK2RvbmUKK1sgIiRWRVJCT1NFIiAhPSBubyBdICYmIGVjaG8KKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL21vZHV0aWxzLWluaXRzY3JpcHRzL21vZHV0aWxzLWluaXRzY3JpcHRzLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9tb2R1dGlscy1pbml0c2NyaXB0cy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjY3MGNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9tb2R1dGlscy1pbml0c2NyaXB0cy9tb2R1dGlscy1pbml0c2NyaXB0cy5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkluaXRzY3JpcHQgZm9yIGF1dG8tbG9hZGluZyBrZXJuZWwgbW9kdWxlcyBvbiBib290IgorU0VDVElPTiA9ICJiYXNlIgorTElDRU5TRSA9ICJQRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTdiZjg3ZmMzNzk3NmU5M2VjNjZhZDg0ZmFjNThjMDk4IgorU1JDX1VSSSA9ICJmaWxlOi8vbW9kdXRpbHMuc2ggXAorCSAgIGZpbGU6Ly9QRC5wYXRjaCIKKworUFIgPSAicjciCisKK1MgPSAiJHtXT1JLRElSfSIKKworSU5JVFNDUklQVF9OQU1FID0gIm1vZHV0aWxzLnNoIgorSU5JVFNDUklQVF9QQVJBTVMgPSAic3RhcnQgMDUgUyAuIgorCitpbmhlcml0IHVwZGF0ZS1yYy5kCisKK2RvX2NvbXBpbGUgKCkgeworfQorCitkb19pbnN0YWxsICgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC8KKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9tb2R1dGlscy5zaCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQvCit9CisKK0RFUEVORFNfYXBwZW5kID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3N5c3RlbWQtc3lzdGVtY3RsLW5hdGl2ZScsJycsZCl9IgorcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywnc3lzdGVtZCcsJ3RydWUnLCdmYWxzZScsZCl9OyB0aGVuCisJCWlmIFsgLW4gIiREIiBdOyB0aGVuCisJCQlPUFRTPSItLXJvb3Q9JEQiCisJCWZpCisJCXN5c3RlbWN0bCAkT1BUUyBtYXNrIG1vZHV0aWxzLnNlcnZpY2UKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM1NmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJTeXN0ZW0tV2lkZSBQcm9maWxlciIKK0RFU0NSSVBUSU9OID0gIk9Qcm9maWxlIGlzIGEgc3lzdGVtLXdpZGUgcHJvZmlsZXIgZm9yIExpbnV4IHN5c3RlbXMsIGNhcGFibGUgXAorb2YgcHJvZmlsaW5nIGFsbCBydW5uaW5nIGNvZGUgYXQgbG93IG92ZXJoZWFkLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9vcHJvZmlsZS5zb3VyY2Vmb3JnZS5uZXQvbmV3cy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTYxOTEmYXRpZD0xMTYxOTEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvcGFnZW50L29wYWdlbnQuaDtiZWdpbmxpbmU9NTtlbmRsaW5lPTI2O21kNT00ZjE2ZjcyYzdhNDkzZDhhNDcwNGFhMThkMDNkMTVjNiBcCisgICAgICAgICAgICAgICAgICAgIgorU0VDVElPTiA9ICJkZXZlbCIKKworREVQRU5EUyA9ICJwb3B0IGJpbnV0aWxzIgorUkRFUEVORFNfJHtQTn0gPSAiYmludXRpbHMtc3ltbGlua3MiCitSUkVDT01NRU5EU18ke1BOfSA9ICJrZXJuZWwtdm1saW51eCIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9ICR7bGliZGlyfS8ke0JQTn0vbGliKiR7U09MSUJTfSAke2RhdGFkaXJ9LyR7QlBOfSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqJHtTT0xJQlNERVZ9ICR7bGliZGlyfS8ke0JQTn0vbGliKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9LyR7QlBOfS9saWIqLmEiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29wcm9maWxlLWNyb3NzLWNvbXBpbGUtdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3Jvb3QtaG9tZS1kaXIucGF0Y2giCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBwdGVzdAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWtlcm5lbD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IC0td2l0aG91dC14IGFjX2N2X3Byb2dfWFNMVFBST0M9IgorZG9fY29uZmlndXJlICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworCWF1dG90b29sc19kb19jb25maWd1cmUKK30KKworRVhUUkFfT0VNQUtFID0gIlNSQ0RJUj0ke1BURVNUX1BBVEh9L2xpYnV0aWwrKy90ZXN0cyIKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisJb2VfcnVubWFrZSBjaGVjaworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXN1YmRpcnM9ImxpYmRiL3Rlc3RzIGxpYnV0aWwrKy90ZXN0cyBsaWJyZWdleC90ZXN0cyBsaWJ1dGlsL3Rlc3RzIGxpYm9wL3Rlc3RzIGxpYmRiL3Rlc3RzICIKKwlmb3IgdG9vbHRlc3QgaW4gJHtzdWJkaXJzfQorCWRvCisJCWZpbmQgJHt0b29sdGVzdH0gLXBlcm0gL3U9eCAtdHlwZSBmfCBjcGlvIC1wdmR1ICR7RH0ke1BURVNUX1BBVEh9CisJZG9uZQorCisJIyBuZWVkZWQgYnkgc29tZSBsaWJvcCB0ZXN0cworCWNwIC1yIGV2ZW50cyAke0R9JHtQVEVTVF9QQVRIfQorCisJIyBuZWVkZWQgYnkgbGlicmVnZXggcmVnZXhfdGVzdAorCWNwIGxpYnJlZ2V4L3N0bC5wYXQgJHtEfSR7UFRFU1RfUEFUSH0vbGlicmVnZXgKKwljcCBsaWJyZWdleC90ZXN0cy9tYW5nbGVkLW5hbWUgJHtEfSR7UFRFU1RfUEFUSH0vbGlicmVnZXgvdGVzdHMKKworCSMgbmVlZGVkIGJ5IGxpdHV0aWwrKyBmaWxlX21hbmlwX3Rlc3RzCisJY3AgJHtTfS9saWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5jcHAgXAorCQlsaWJ1dGlsKysvdGVzdHMvZmlsZV9tYW5pcF90ZXN0cy5vICR7RH0ke1BURVNUX1BBVEh9L2xpYnV0aWwrKy90ZXN0cworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWVjZDkxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSw1ODEgQEAKK2RubCBBWF9LRVJORUxfT1BUSU9OKG9wdGlvbiwgYWN0aW9uLWlmLWZvdW5kLCBhY3Rpb24taWYtbm90LWZvdW5kKQorZG5sIHNlZSBpZiBhdXRvY29uZi5oIGRlZmluZXMgdGhlIG9wdGlvbgorQUNfREVGVU4oW0FYX0tFUk5FTF9PUFRJT05dLCBbCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1JJEtJTkMgLU8yIC1EX19LRVJORUxfXyIKK0FDX1RSWV9DT01QSUxFKCBbI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPl0sCitbCisjaWZuZGVmICQxCiticmVha19tZV9oYXJkKFxcXCk7CisjZW5kaWYKK10sWyQyXSxbJDNdLCkKK0NGTEFHUz0kU0FWRV9DRkxBR1MKK10pCisKK2RubCBIYW5kbGUgdGhlIDIuNCBtb2R1bGUgaW5zaWRlIG1vZHVsZS8KK0FDX0RFRlVOKFtBWF9DT05GSUdfTU9EVUxFXSwKK1sKK2lmIHRlc3QgISAtZiAkS0lOQy9saW51eC9hdXRvY29uZi5oOyB0aGVuCisJQUNfTVNHX0VSUk9SKFtubyBzdWl0YWJseSBjb25maWd1cmVkIGtlcm5lbCBpbmNsdWRlIHRyZWUgZm91bmRdKQorZmkKKworZG5sICAtLS0gR2V0IExpbnV4IGtlcm5lbCB2ZXJzaW9uIGFuZCBjb21waWxlIHBhcmFtZXRlcnMgLS0tCisKK0FDX1NVQlNUKEtWRVJTKQorQUNfTVNHX0NIRUNLSU5HKFtmb3Iga2VybmVsIHZlcnNpb25dKQorZG5sIGl0J3MgbGlrZSB0aGlzIHRvIGhhbmRsZSBtYW5kcmFrZSdzIGZ1YmFyIHZlcnNpb24uaCAtIGJ1ZyAjNDcxNDQ4CitldmFsIEtWRVJTPWBnY2MgLUkkS0lOQyAtRSAtZE0gJEtJTkMvbGludXgvdmVyc2lvbi5oIHwgZ3JlcCAtdyBVVFNfUkVMRUFTRSB8IGF3ayAne3ByaW50ICRbXTN9J2AKK0FDX01TR19SRVNVTFQoWyRLVkVSU10pCitjYXNlICIkS1ZFUlMiIGluCisyLjIuKnwyLjQuKikgOzsKKyopIEFDX01TR19FUlJPUihbVW5zdXBwb3J0ZWQga2VybmVsIHZlcnNpb25dKQorZXNhYworCitkbmwgQ2hlY2sgZm9yIHRoZSBtaW5pbWFsIGtlcm5lbCB2ZXJzaW9uIHN1cHBvcnRlZAorQUNfTVNHX0NIRUNLSU5HKFtrZXJuZWwgdmVyc2lvbl0pCitBWF9LRVJORUxfVkVSU0lPTigyLCAyLCAxMCwgPD0sIEFDX01TR19SRVNVTFQoW29rXSksIEFDX01TR19FUlJPUihbY2hlY2sgaHRtbCBkb2N1bWVudGF0aW9uIGluc3RhbGwgc2VjdGlvbl0pKQorCitkbmwgbGludXgvc3BpbmxvY2suaCBhZGRlZCBhdCBzb21lIHBvaW50IGluIHBhc3QKK0FDX01TR19DSEVDS0lORyhbZm9yICRLSU5DL2xpbnV4L3NwaW5sb2NrLmhdKQoraWYgdGVzdCAtZiAkS0lOQy9saW51eC9zcGlubG9jay5oOyB0aGVuCisJRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURIQVZFX0xJTlVYX1NQSU5MT0NLX0hFQURFUiIKKwlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorCUFDX01TR19SRVNVTFQoW25vXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbZm9yIHJ0Y19sb2NrXSkKK2djYyAtSSRLSU5DIC1FICRLSU5DL2xpbnV4L21jMTQ2ODE4cnRjLmggfCBncmVwIHJ0Y19sb2NrID4vZGV2L251bGwKK2lmIHRlc3QgIiQ/IiAtZXEgMDsgdGhlbgorCUVYVFJBX0NGTEFHU19NT0RVTEU9IiRFWFRSQV9DRkxBR1NfTU9EVUxFIC1EUlRDX0xPQ0siCisJQUNfTVNHX1JFU1VMVChbeWVzXSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKFtub10pCitmaQorCSAKK2FyY2g9InVua25vd24iCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHg4Ni02NCBhcmNoaXRlY3R1cmUpCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19YODZfNjQsIHg4NjY0PTEsIHg4NjY0PTApCitBWF9NU0dfUkVTVUxUX1lOKCR4ODY2NCkKK0JVSUxEX0hBTU1FUj1ubworaWYgdGVzdCAiJHg4NjY0IiAtZXEgMTsgdGhlbgorCWFyY2g9Ing4NiIKKwlCVUlMRF9IQU1NRVI9eWVzCitlbHNlCisJQUNfTVNHX0NIRUNLSU5HKGZvciB4ODYgYXJjaGl0ZWN0dXJlKQorCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4NiwgeDg2PTEsIHg4Nj0wKQorCUFYX0tFUk5FTF9PUFRJT04oQ09ORklHX1g4Nl9XUF9XT1JLU19PSywgeDg2PTEsIHg4Nj0keDg2KQorCUFYX01TR19SRVNVTFRfWU4oJHg4NikKKwl0ZXN0ICIkeDg2IiA9IDEgJiYgYXJjaD0ieDg2IgorCQorCWlmIHRlc3QgIiRhcmNoIiA9ICJ1bmtub3duIjsgdGhlbgorICAJCUFDX01TR19DSEVDS0lORyhmb3IgaWE2NCBhcmNoaXRlY3R1cmUpCisgIAkJQVhfS0VSTkVMX09QVElPTihDT05GSUdfSUE2NCwgaWE2ND0xLCBpYTY0PTApCisgIAkJQVhfTVNHX1JFU1VMVF9ZTigkaWE2NCkKKyAgCQl0ZXN0ICIkaWE2NCIgPSAxICYmIGFyY2g9ImlhNjQiCisJZmkKKworZmkKK0FDX1NVQlNUKEJVSUxEX0hBTU1FUikKKwordGVzdCAiJGFyY2giID0gInVua25vd24iICYmIEFDX01TR19FUlJPUihVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUpCisKK2RubCBjaGVjayB0byBzZWUgaWYga2VybmVsIHZlcmlvbiBhcHByb3ByaWF0ZSBmb3IgYXJjaAorQUNfTVNHX0NIRUNLSU5HKGFyY2gva2VybmVsIHZlcnNpb24gY29tYmluYXRpb24pCitjYXNlICIkYXJjaCIgaW4KK2lhNjQpCisJQVhfS0VSTkVMX1ZFUlNJT04oMiwgNCwgMTgsIDwsIEFDX01TR19SRVNVTFQoW29rXSksCisJCUFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQgYXJjaC9rZXJuZWxdKSkgOzsKKyopIEFDX01TR19SRVNVTFQoW29rXSkKK2VzYWMKKworZG5sIGZvciBub3cgd2UgZG8gbm90IHN1cHBvcnQgUFJFRU1QVCBwYXRjaAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHJlZW1wdCBwYXRjaF0pCitBWF9LRVJORUxfT1BUSU9OKENPTkZJR19QUkVFTVBULHByZWVtcHQ9MSxwcmVlbXB0PTApCitBWF9NU0dfUkVTVUxUX1lOKFskcHJlZW1wdF0pCit0ZXN0ICIkcHJlZW1wdCIgPSAwIHx8IEFDX01TR19FUlJPUihbdW5zdXBwb3J0ZWQga2VybmVsIGNvbmZpZ3VyYXRpb24gOiBDT05GSUdfUFJFRU1QVF0pCisKK0FDX1NVQlNUKEtJTkMpCisKK01PRElOU1RBTExESVI9L2xpYi9tb2R1bGVzLyRLVkVSUworIAorT1BST0ZJTEVfTU9EVUxFX0FSQ0g9JGFyY2gKK0FDX1NVQlNUKE9QUk9GSUxFX01PRFVMRV9BUkNIKQorXQorKQorCitkbmwgQVhfTVNHX1JFU1VMVF9ZTihhKQorZG5sIHJlc3VsdHMgInllcyIgaWZmIGE9PTEsICJubyIgZWxzZQorQUNfREVGVU4oW0FYX01TR19SRVNVTFRfWU5dLCBbeD1ubwordGVzdCAieCQxIiA9ICJ4MSIgJiYgeD15ZXMKK0FDX01TR19SRVNVTFQoJHgpXSkKKworZG5sIEFYX01BTExPQ19BVFRSSUJVVEUgLSBzZWUgaWYgZ2NjIHdpbGwgdGFrZSBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKQorQUNfREVGVU4oW0FYX01BTExPQ19BVFRSSUJVVEVdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9DT01QSUxFKCxbCit2b2lkIG1vbmtleSgpIF9fYXR0cmlidXRlX18oKG1hbGxvYykpOworXSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgQUNfREVGSU5FKE1BTExPQ19BVFRSSUJVVEVfT0ssIDEsIFt3aGV0aGVyIG1hbGxvYyBhdHRyaWJ1dGUgaXMgdW5kZXJzdG9vZF0pLCBBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUyAKK10KKykKKworZG5sIGJ1aWx0aW5fZXhwZWN0IGlzIHVzZWQgaW4gbW9kdWxlIHdlIGNhbid0IGFkZCB0aGF0IGluIGNvbmZpZy5oCitBQ19ERUZVTihbQVhfQlVJTFRJTl9FWFBFQ1RdLAorWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIF9fYnVpbHRpbl9leHBlY3QgaXMgdW5kZXJzdG9vZF0pCitTQVZFX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9Ii1XZXJyb3IgJENGTEFHUyIKK0FDX1RSWV9MSU5LKCxbCitpbnQgaTsKK2lmIChfX2J1aWx0aW5fZXhwZWN0KGksIDApKSB7IH0KK10sCitBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgRVhUUkFfQ0ZMQUdTX01PRFVMRT0iJEVYVFJBX0NGTEFHU19NT0RVTEUgLURFWFBFQ1RfT0siLAorQUNfTVNHX1JFU1VMVChbbm9dKTspCitDRkxBR1M9JFNBVkVfQ0ZMQUdTIAorXQorKSAKKworZG5sIEFYX0VYVFJBX0RJUlMgLSBMZXQgdXNlciBzcGVjaWZ5IGV4dHJhIGRpcnMgZm9yIGluY2x1ZGUvbGlicworQUNfREVGVU4oW0FYX0VYVFJBX0RJUlNdLAorWworQUNfQVJHX1dJVEgoZXh0cmEtaW5jbHVkZXMsCitbICAtLXdpdGgtZXh0cmEtaW5jbHVkZXM9RElSICAgIGFkZCBleHRyYSBpbmNsdWRlIHBhdGhzXSwKKyAgdXNlX2V4dHJhX2luY2x1ZGVzPSIkd2l0aHZhbCIsCisgIHVzZV9leHRyYV9pbmNsdWRlcz1OTworKQoraWYgdGVzdCAtbiAiJHVzZV9leHRyYV9pbmNsdWRlcyIgJiYgXAorICAgICAgICB0ZXN0ICIkdXNlX2V4dHJhX2luY2x1ZGVzIiAhPSAiTk8iOyB0aGVuCisgIGFjX3NhdmVfaWZzPSRJRlMKKyAgSUZTPSc6JworICBmb3IgZGlyIGluICR1c2VfZXh0cmFfaW5jbHVkZXM7IGRvCisgICAgZXh0cmFfaW5jbHVkZXM9IiRleHRyYV9pbmNsdWRlcyAtSSRkaXIiCisgIGRvbmUKKyAgSUZTPSRhY19zYXZlX2lmcworICBDUFBGTEFHUz0iJENQUEZMQUdTICRleHRyYV9pbmNsdWRlcyIKK2ZpCisKK0FDX0FSR19XSVRIKGV4dHJhLWxpYnMsCitbICAtLXdpdGgtZXh0cmEtbGlicz1ESVIgICAgICAgIGFkZCBleHRyYSBsaWJyYXJ5IHBhdGhzXSwKKyAgdXNlX2V4dHJhX2xpYnM9JHdpdGh2YWwsCisgIHVzZV9leHRyYV9saWJzPU5PCispCitpZiB0ZXN0IC1uICIkdXNlX2V4dHJhX2xpYnMiICYmIFwKKyAgICAgICAgdGVzdCAiJHVzZV9leHRyYV9saWJzIiAhPSAiTk8iOyB0aGVuCisgICBhY19zYXZlX2lmcz0kSUZTCisgICBJRlM9JzonCisgICBmb3IgZGlyIGluICR1c2VfZXh0cmFfbGliczsgZG8KKyAgICAgZXh0cmFfbGlicmFyaWVzPSIkZXh0cmFfbGlicmFyaWVzIC1MJGRpciIKKyAgIGRvbmUKKyAgIElGUz0kYWNfc2F2ZV9pZnMKKyAgIExERkxBR1M9IiRMREZMQUdTICRleHRyYV9saWJyYXJpZXMiCitmaQorXQorKQorCitkbmwgQVhfUE9QVF9DT05TVCAtIGNoZWNrIHBvcHQgcHJvdG90eXBlCitBQ19ERUZVTihbQVhfUE9QVF9DT05TVF0sCitbCitBQ19NU0dfQ0hFQ0tJTkcoW3BvcHQgcHJvdG90eXBlXSkKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0iLVdlcnJvciAkQ1hYRkxBR1MiCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHBvcHQuaD5dLAorWworaW50IGM7IGNoYXIgKip2OworcG9wdEdldENvbnRleHQoMCwgYywgdiwgMCwgMCk7CitdLAorQUNfTVNHX1JFU1VMVChbdGFrZXMgY2hhciAqKl0pOywKK0FDX01TR19SRVNVTFQoW3Rha2VzIGNvbnN0IGNoYXIgKipdKTsgQUNfREVGSU5FKENPTlNUX1BPUFQsIDEsIFt3aGV0aGVyIHBvcHQgcHJvdG90eXBlIHRha2VzIGEgY29uc3QgY2hhciAqKl0pKQorQ1hYRkxBR1M9IiRTQVZFX0NYWEZMQUdTIgorXQorKQorCitkbmwgQVhfQ0hFQ0tfU1NUUkVBTSAtIGNoZWNrIGlmIGxvY2FsIHNzdHJlYW0gaXMgbmVlZGVkIHRvIGNvbXBpbGUgT0sKK0FDX0RFRlVOKFtBWF9DSEVDS19TU1RSRUFNXSwKK1sKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1c2UgaW5jbHVkZWQgc3N0cmVhbV0pCitBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHNzdHJlYW0+XSwgW10sIAorQUNfTVNHX1JFU1VMVChbbm9dKTssCitBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgT1BfQ1hYRkxBR1M9IiRPUF9DWFhGTEFHUyAtSVwke3RvcF9zcmNkaXJ9L2luY2x1ZGUiKQorXQorKQorCitkbmwgQVhfQ0hFQ0tfVFlQRURFRih0eXBlZGVmX25hbWUsIHR5cGUsIGFjdGlvbi1pZi10cnVlLCBhY3Rpb24taWYtZmFsc2UpCitkbmwgZXhlYyBhY3Rpb24taWYtdHJ1ZSBpZiB0eXBlZGVmX25hbWUgaXMgYSB0eXBlZGVmIHRvIHR5cGUgZWxzZSBleGVjIAorZG5sIGFjdGlvbi1pZi1mYWxzZQorZG5sIGN1cnJlbnRseSB3b3JrIG9ubHkgd2l0aCB0eXBlIHR5cGVkZWYnZWQgaW4gc3RkZGVmLmgKK0FDX0RFRlVOKFtBWF9DSEVDS19UWVBFREVGXSwgWworZG5sIEFDX0xBTkdfUFVTSChDKSBub3QgaW4gYXV0b2NvbmYgMi4xMworQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iLVdlcnJvciAkQ0ZMQUdTIgorCitBQ19UUllfQ09NUElMRSgKKyAgWworICAjaW5jbHVkZSA8c3RkZGVmLmg+CisgIF0sCisgIFsKKyAgdHlwZWRlZiB2b2lkICgqZmN0MSkoJDEpOworICB0eXBlZGVmIHZvaWQgKCpmY3QyKSgkMik7CisgIGZjdDEgZjEgPSAwOworICBmY3QyIGYyID0gMDsKKyAgaWYgKGYxID09IGYyKSB7fQorICBdLAorWyQzXSxbJDRdKQorCitDRkxBR1M9JFNBVkVfQ0ZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKKworZG5sIEFYX1RZUEVERUZFRF9OQU1FKHR5cGVkZWZfbmFtZSwgY2FuZGlkYXRlX2xpc3QsIHZhcl9uYW1lKQorZG5sIHNldCB2YXJfbmFtZSB0byB0aGUgdHlwZWRlZiBuYW1lIG9mICQxIHdoaWNoIG11c3QgYmUgaW4gY2FuZGl0YXRlX2xpc3QKK2RubCBlbHNlIHByb2R1Y2UgYSBmYXRhbCBlcnJvcgorQUNfREVGVU4oW0FYX1RZUEVERUZFRF9OQU1FXSwgWworCUFDX01TR19DSEVDS0lORyhbdHlwZSBvZiAkMV0pCisJZm9yIGYgaW4gJDI7IGRvCisJCUFYX0NIRUNLX1RZUEVERUYoJDEsICRmLCAkMz0iJGYiLCAkMz0iIikKKwkJaWYgdGVzdCAtbiAiJHskM30iOyB0aGVuCisJCQlicmVhaworCQlmaQorCWRvbmUKKwlpZiB0ZXN0IC1uICIkeyQzfSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbJHskM31dKQorCWVsc2UKKwkJQUNfTVNHX0VSUk9SKFtub3QgZm91bmRdKQorCWZpCitdKQorCitkbmwgZmluZCBhIGJpbmFyeSBpbiB0aGUgcGF0aAorQUNfREVGVU4oW1FUX0ZJTkRfUEFUSF0sCitbCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorCUFDX0NBQ0hFX1ZBTChxdF9jdl9wYXRoXyQxLAorCVsKKwkJcXRfY3ZfcGF0aF8kMT0iTk9ORSIKKwkJaWYgdGVzdCAtbiAiJCQyIjsgdGhlbgorCQkJcXRfY3ZfcGF0aF8kMT0iJCQyIjsKKwkJZWxzZQorCQkJZGlycz0iJDMiCisJCQlxdF9zYXZlX0lGUz0kSUZTCisJCQlJRlM9JzonCisJCQlmb3IgZGlyIGluICRQQVRIOyBkbworCQkJCWRpcnM9IiRkaXJzICRkaXIiCisJCQlkb25lCisJCQlJRlM9JHF0X3NhdmVfSUZTCisgCisJCQlmb3IgZGlyIGluICRkaXJzOyBkbworCQkJCWlmIHRlc3QgLXggIiRkaXIvJDEiOyB0aGVuCisJCQkJCWlmIHRlc3QgLW4gIiQ1IjsgdGhlbgorCQkJCQkJZXZhbHN0cj0iJGRpci8kMSAkNSAyPiYxICIKKwkJCQkJCWlmIGV2YWwgJGV2YWxzdHI7IHRoZW4KKwkJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJCWJyZWFrCisJCQkJCQlmaQorCQkJCQllbHNlCisJCQkJCQlxdF9jdl9wYXRoXyQxPSIkZGlyLyQxIgorCQkJCQkJYnJlYWsKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQlmaQorCV0pCisgCisJaWYgdGVzdCAteiAiJHF0X2N2X3BhdGhfJDEiIHx8IHRlc3QgIiRxdF9jdl9wYXRoXyQxIiA9ICJOT05FIjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKG5vdCBmb3VuZCkKKwkJJDQKKwllbHNlCisJCUFDX01TR19SRVNVTFQoJHF0X2N2X3BhdGhfJDEpCisJCSQyPSRxdF9jdl9wYXRoXyQxCisJZmkKK10pCisKK2RubCBGaW5kIHRoZSB1aWMgY29tcGlsZXIgb24gdGhlIHBhdGggb3IgaW4gcXRfY3ZfZGlyCitBQ19ERUZVTihbUVRfRklORF9VSUNdLAorWworCVFUX0ZJTkRfUEFUSCh1aWMsIGFjX3VpYywgJHF0X2N2X2Rpci9iaW4pCisJaWYgdGVzdCAteiAiJGFjX3VpYyIgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbdWljIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorIAorZG5sIEZpbmQgdGhlIHJpZ2h0IG1vYyBpbiBwYXRoL3F0X2N2X2RpcgorQUNfREVGVU4oW1FUX0ZJTkRfTU9DXSwKK1sKKwlRVF9GSU5EX1BBVEgobW9jMiwgYWNfbW9jMiwgJHF0X2N2X2Rpci9iaW4pCisJUVRfRklORF9QQVRIKG1vYywgYWNfbW9jMSwgJHF0X2N2X2Rpci9iaW4pCisKKwlpZiB0ZXN0IC1uICIkYWNfbW9jMSIgLWEgLW4gIiRhY19tb2MyIjsgdGhlbgorCQlkbmwgZm91bmQgYm90aC4gUHJlZmVyIFF0MydzIGlmIGl0IGV4aXN0cyBlbHNlIG1vYzIKKwkJJGFjX21vYzEgLXYgMj4mMSB8IGdyZXAgIlF0IDMiID4vZGV2L251bGwKKwkJaWYgdGVzdCAiJD8iID0gMDsgdGhlbgorCQkJYWNfbW9jPSRhY19tb2MxOworCQllbHNlCisJCQlhY19tb2M9JGFjX21vYzI7CisJCWZpCisJZWxzZQorCQlpZiB0ZXN0IC1uICIkYWNfbW9jMSI7IHRoZW4KKwkJCWFjX21vYz0kYWNfbW9jMTsKKwkJZWxzZQorCQkJYWNfbW9jPSRhY19tb2MyOworCQlmaQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYWNfbW9jIiAgLWEgIiRGQVRBTCIgPSAxOyB0aGVuCisJCUFDX01TR19FUlJPUihbbW9jIGJpbmFyeSBub3QgZm91bmQgaW4gXCRQQVRIIG9yICRxdF9jdl9kaXIvYmluICFdKQorCWZpCitdKQorCitkbmwgY2hlY2sgYSBwYXJ0aWN1bGFyIGxpYm5hbWUKK0FDX0RFRlVOKFtRVF9UUllfTElOS10sCitbCisJU0FWRV9MSUJTPSIkTElCUyIKKwlMSUJTPSIkTElCUyAkMSIKKwlBQ19UUllfTElOSyhbCisJI2luY2x1ZGUgPHFnbG9iYWwuaD4KKwkjaW5jbHVkZSA8cXN0cmluZy5oPgorCQldLAorCVsKKwlRU3RyaW5nIHMoIm1hbmdsZV9mYWlsdXJlIik7CisJI2lmIChRVF9WRVJTSU9OIDwgMjIxKQorCWJyZWFrX21lXyhcXFwpOworCSNlbmRpZgorCV0sCisJcXRfY3ZfbGlibmFtZT0kMSwKKwkpCisJTElCUz0iJFNBVkVfTElCUyIKK10pCisgCitkbmwgY2hlY2sgd2UgY2FuIGRvIGEgY29tcGlsZQorQUNfREVGVU4oW1FUX0NIRUNLX0NPTVBJTEVdLAorWworCUFDX01TR19DSEVDS0lORyhbZm9yIFF0IGxpYnJhcnkgbmFtZV0pCisgCisJQUNfQ0FDSEVfVkFMKHF0X2N2X2xpYm5hbWUsCisJWworCQlBQ19MQU5HX0NQTFVTUExVUworCQlTQVZFX0NYWEZMQUdTPSRDWFhGTEFHUworCQlDWFhGTEFHUz0iJENYWEZMQUdTICRRVF9JTkNMVURFUyAkUVRfTERGTEFHUyIgCisKKwkJZm9yIGxpYm5hbWUgaW4gLWxxdC1tdCAtbHF0MyAtbHF0MiAtbHF0OworCQlkbworCQkJUVRfVFJZX0xJTksoJGxpYm5hbWUpCisJCQlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJCQlicmVhazsKKwkJCWZpCisJCWRvbmUKKworCQlDWFhGTEFHUz0kU0FWRV9DWFhGTEFHUworCV0pCisKKwlpZiB0ZXN0IC16ICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVChbZmFpbGVkXSkgCisJCWlmIHRlc3QgIiRGQVRBTCIgPSAxIDsgdGhlbgorCQkJQUNfTVNHX0VSUk9SKFtDYW5ub3QgY29tcGlsZSBhIHNpbXBsZSBRdCBleGVjdXRhYmxlLiBDaGVjayB5b3UgaGF2ZSB0aGUgcmlnaHQgXCRRVERJUiAhXSkKKwkJZmkKKwllbHNlCisJCUFDX01TR19SRVNVTFQoWyRxdF9jdl9saWJuYW1lXSkKKwlmaQorXSkKKworZG5sIGdldCBRdCB2ZXJzaW9uIHdlJ3JlIHVzaW5nCitBQ19ERUZVTihbUVRfR0VUX1ZFUlNJT05dLAorWworCUFDX0NBQ0hFX0NIRUNLKFtRdCB2ZXJzaW9uXSxseXhfY3ZfcXR2ZXJzaW9uLAorCVsKKwkJQUNfTEFOR19DUExVU1BMVVMKKwkJU0FWRV9DUFBGTEFHUz0kQ1BQRkxBR1MKKwkJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkUVRfSU5DTFVERVMiCisKKwkJY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisiJSUlIlFUX1ZFUlNJT05fU1RSIiUlJSIKK0VPRgorCQlseXhfY3ZfcXR2ZXJzaW9uPWAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8IFwKKwkJCWdyZXAgJ14iJSUlIicgIDI+L2Rldi9udWxsIHwgXAorCQkJc2VkIC1lICdzLyIlJSUiLy9nJyAtZSAncy8iLy9nJ2AKKwkJcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorCQlDUFBGTEFHUz0kU0FWRV9DUFBGTEFHUworCV0pCisgCisJUVRfVkVSU0lPTj0kbHl4X2N2X3F0dmVyc2lvbgorCUFDX1NVQlNUKFFUX1ZFUlNJT04pCitdKQorIAorZG5sIHN0YXJ0IGhlcmUgCitBQ19ERUZVTihbUVRfRE9fSVRfQUxMXSwKK1sKKwlkbmwgUGxlYXNlIGxlYXZlIHRoaXMgYWxvbmUuIEkgdXNlIHRoaXMgZmlsZSBpbgorCWRubCBvcHJvZmlsZS4KKwlGQVRBTD0wCisKKwlBQ19BUkdfV0lUSChxdC1kaXIsIFsgIC0td2l0aC1xdC1kaXIgICAgICAgICAgIHdoZXJlIHRoZSByb290IG9mIFF0IGlzIGluc3RhbGxlZCBdLAorCQlbIHF0X2N2X2Rpcj1gZXZhbCBlY2hvICIkd2l0aHZhbCIvYCBdKQorCSAKKwlBQ19BUkdfV0lUSChxdC1pbmNsdWRlcywgWyAgLS13aXRoLXF0LWluY2x1ZGVzICAgICAgd2hlcmUgdGhlIFF0IGluY2x1ZGVzIGFyZS4gXSwKKwkJWyBxdF9jdl9pbmNsdWRlcz1gZXZhbCBlY2hvICIkd2l0aHZhbCJgIF0pCisgCisJQUNfQVJHX1dJVEgocXQtbGlicmFyaWVzLCBbICAtLXdpdGgtcXQtbGlicmFyaWVzICAgICB3aGVyZSB0aGUgUXQgbGlicmFyeSBpcyBpbnN0YWxsZWQuXSwKKwkJWyAgcXRfY3ZfbGlicmFyaWVzPWBldmFsIGVjaG8gIiR3aXRodmFsImAgXSkKKworCWRubCBwYXkgYXR0ZW50aW9uIHRvICRRVERJUiB1bmxlc3Mgb3ZlcnJpZGRlbgorCWlmIHRlc3QgLXogIiRxdF9jdl9kaXIiOyB0aGVuCisJCXF0X2N2X2Rpcj0kUVRESVIKKwlmaQorIAorCWRubCBkZXJpdmUgaW5jL2xpYiBpZiBuZWVkZWQKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfZGlyIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCQlxdF9jdl9pbmNsdWRlcz0kcXRfY3ZfZGlyL2luY2x1ZGUKKwkJZmkKKwkJaWYgdGVzdCAteiAiJHF0X2N2X2xpYnJhcmllcyI7IHRoZW4KKwkJCXF0X2N2X2xpYnJhcmllcz0kcXRfY3ZfZGlyL2xpYgorCQlmaQorCWZpCisKKwlkbmwgZmxhZ3MgZm9yIGNvbXBpbGF0aW9uCisJUVRfSU5DTFVERVM9CisJUVRfTERGTEFHUz0KKwlpZiB0ZXN0IC1uICIkcXRfY3ZfaW5jbHVkZXMiOyB0aGVuCisJCVFUX0lOQ0xVREVTPSItSSRxdF9jdl9pbmNsdWRlcyIKKwlmaQorCWlmIHRlc3QgLW4gIiRxdF9jdl9saWJyYXJpZXMiOyB0aGVuCisJCVFUX0xERkxBR1M9Ii1MJHF0X2N2X2xpYnJhcmllcyIKKwlmaQorCUFDX1NVQlNUKFFUX0lOQ0xVREVTKQorCUFDX1NVQlNUKFFUX0xERkxBR1MpCisgCisJUVRfRklORF9NT0MKKwlNT0M9JGFjX21vYworCUFDX1NVQlNUKE1PQykKKwlRVF9GSU5EX1VJQworCVVJQz0kYWNfdWljCisJQUNfU1VCU1QoVUlDKQorCisJUVRfQ0hFQ0tfQ09NUElMRQorIAorCVFUX0xJQj0kcXRfY3ZfbGlibmFtZTsKKwlBQ19TVUJTVChRVF9MSUIpCisKKwlpZiB0ZXN0IC1uICIkcXRfY3ZfbGlibmFtZSI7IHRoZW4KKwkJUVRfR0VUX1ZFUlNJT04KKwlmaQorXSkKKworZG5sIEFYX0NYWEZMQUdTX09QVElPTlModmFyLW5hbWUsIG9wdGlvbikKK2RubCBhZGQgb3B0aW9uIHRvIHZhci1uYW1lIGlmICRDWFggc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DSEVDS19QUkVDT01QSUxFRF9IRUFERVJdLCBbCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJHtDWFh9IHN1cHBvcnQgcHJlY29tcGlsZWQgaGVhZGVyXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitkbmwgd2UgY29uc2lkZXIgdGhhbiBpZiAtV2ludmFsaWQtcGNoIGlzIGFjY2VwdGVkIHBjaCB3aWxsIHdvcmtzIC4uLgorQ1hYRkxBR1M9LVdpbnZhbGlkLXBjaAorZG5sIGJ1dCB3ZSBkb24ndCB3YW50IC1XaW52YWxpZC1wY2ggZWxzZSBjb21waWxhdGlvbiB3aWxsIGZhaWwgZHVlIC1XZXJyb3IgYW5kCitkbmwgdGhlIGZhY3QgdGhhbiBzb21lIHBjaCB3aWxsIGJlIGludmFsaWQgZm9yIHRoZSBnaXZlbiBjb21waWxhdGlvbiBvcHRpb24KK0FDX1RSWV9DT01QSUxFKCxbO10sQUNfTVNHX1JFU1VMVChbeWVzXSk7ICQxPSIkeyQxfSAtaW5jbHVkZSBiaXRzL3N0ZGMrKy5oIiwgQUNfTVNHX1JFU1VMVChbbm9dKSkKK0NYWEZMQUdTPSRTQVZFX0NYWEZMQUdTCitBQ19MQU5HX1JFU1RPUkUKK10pCisKK2RubCBBWF9DSEVDS19ET0NCT09LCitBQ19ERUZVTihbQVhfQ0hFQ0tfRE9DQk9PS10sIFsKKyMgSXQncyBqdXN0IHJ1ZGUgdG8gZ28gb3ZlciB0aGUgbmV0IHRvIGJ1aWxkCitYU0xUUFJPQ19GTEFHUz0tLW5vbmV0CitET0NCT09LX1JPT1Q9CitpZiB0ZXN0ICEgLWYgL2V0Yy94bWwvY2F0YWxvZzsgdGhlbgorCWZvciBpIGluIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3N0eWxlc2hlZXQveHNsL253YWxzaCAvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMvOworCWRvCisJCWlmIHRlc3QgLWQgIiRpIjsgdGhlbgorCQkJRE9DQk9PS19ST09UPSRpCisJCWZpCisJZG9uZQorCisJIyBMYXN0IHJlc29ydCAtIHRyeSBuZXQKKwlpZiB0ZXN0IC16ICIkRE9DQk9PS19ST09UIjsgdGhlbgorCQlYU0xUUFJPQ19GTEFHUz0KKwlmaQorZWxzZQorCVhNTF9DQVRBTE9HPS9ldGMveG1sL2NhdGFsb2cKKwlDQVRfRU5UUllfU1RBUlQ9JzwhLS0nCisJQ0FUX0VOVFJZX0VORD0nLS0+JworZmkKKworQUNfQ0hFQ0tfUFJPRyhYU0xUUFJPQyx4c2x0cHJvYyx4c2x0cHJvYywpCitYU0xUUFJPQ19XT1JLUz1ubworaWYgdGVzdCAtbiAiJFhTTFRQUk9DIjsgdGhlbgorCUFDX01TR19DSEVDS0lORyhbd2hldGhlciB4c2x0cHJvYyB3b3Jrc10pCisKKwlpZiB0ZXN0IC1uICIkWE1MX0NBVEFMT0ciOyB0aGVuCisJCURCX0ZJTEU9Imh0dHA6Ly9kb2Nib29rLnNvdXJjZWZvcmdlLm5ldC9yZWxlYXNlL3hzbC9jdXJyZW50L3hodG1sL2RvY2Jvb2sueHNsIgorCWVsc2UKKwkJREJfRklMRT0iJERPQ0JPT0tfUk9PVC9kb2Nib29rLnhzbCIKKwlmaQorCisJJFhTTFRQUk9DICRYU0xUUFJPQ19GTEFHUyAkREJfRklMRSA+L2Rldi9udWxsIDI+JjEgPDwgRU5ECis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Cis8IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgVjQuMS4yLy9FTiIgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIj4KKzxib29rIGlkPSJ0ZXN0Ij4KKzwvYm9vaz4KK0VORAorCWlmIHRlc3QgIiQ/IiA9IDA7IHRoZW4KKwkJWFNMVFBST0NfV09SS1M9eWVzCisJZmkKKwlBQ19NU0dfUkVTVUxUKCRYU0xUUFJPQ19XT1JLUykKK2ZpCitBTV9DT05ESVRJT05BTChoYXZlX3hzbHRwcm9jLCB0ZXN0ICIkWFNMVFBST0NfV09SS1MiID0gInllcyIpCisKK0FDX1NVQlNUKFhNTF9DQVRBTE9HKQorQUNfU1VCU1QoWFNMVFBST0NfRkxBR1MpCitBQ19TVUJTVChET0NCT09LX1JPT1QpCitBQ19TVUJTVChDQVRfRU5UUllfU1RBUlQpCitBQ19TVUJTVChDQVRfRU5UUllfRU5EKQorXSkKKworZG5sIEFYX0NGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ0Mgc3VwcG9ydCBpdC4KK0FDX0RFRlVOKFtBWF9DRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q0N9ICQyIGlzIHVuZGVyc3Rvb2RdKQorQUNfTEFOR19TQVZFCitBQ19MQU5HX0MKK1NBVkVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ0ZMQUdTPSRTQVZFX0NGTEFHUworQUNfTEFOR19SRVNUT1JFCitdKQorCisKK2RubCBBWF9DWFhGTEFHU19PUFRJT05TKHZhci1uYW1lLCBvcHRpb24pCitkbmwgYWRkIG9wdGlvbiB0byB2YXItbmFtZSBpZiAkQ1hYIHN1cHBvcnQgaXQuCitBQ19ERUZVTihbQVhfQ1hYRkxBR1NfT1BUSU9OXSwgWworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICR7Q1hYfSAkMiBpcyB1bmRlcnN0b29kXSkKK0FDX0xBTkdfU0FWRQorQUNfTEFOR19DUExVU1BMVVMKK1NBVkVfQ1hYRkxBR1M9JENYWEZMQUdTCitDWFhGTEFHUz0kMgorQUNfVFJZX0NPTVBJTEUoLFs7XSxBQ19NU0dfUkVTVUxUKFt5ZXNdKTsgJDE9IiR7JDF9ICQyIixBQ19NU0dfUkVTVUxUKFtub10pKQorQ1hYRkxBR1M9JFNBVkVfQ1hYRkxBR1MKK0FDX0xBTkdfUkVTVE9SRQorXSkKKworZG5sIEFYX0NPUFlfSUZfQ0hBTkdFKHNvdXJjZSwgZGVzdCkKK2RubCBjb3B5IHNvdXJjZSB0byBkZXN0IGlmIHRoZXkgZG9uJ3QgY29tcGFyZSBlcXVhbGx5IG9yIGlmIGRlc3QgZG9lc24ndCBleGlzdAorQUNfREVGVU4oW0FYX0NPUFlfSUZfQ0hBTkdFXSwgWworaWYgdGVzdCAtciAkMjsgdGhlbgorCWlmIGNtcCAkMSAkMiA+IC9kZXYvbnVsbDsgdGhlbgorCQllY2hvICQyIGlzIHVuY2hhbmdlZAorCWVsc2UKKwkJY3AgLWYgJDEgJDIKKwlmaQorZWxzZQorCWNwIC1mICQxICQyCitmaQorXSkKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YmI2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorb3Byb2ZpbGUgZG9lc24ndCB3YW50IEdOVS1sZXZlbHMgb2YgYXV0b21ha2Ugc3RyaWN0bmVzcyBzbyB0ZWxsIGl0IHRvIGJlICJmb3JlaWduIi4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA1NzQwNTg1Li5jZjZjMzE2IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xNiArMTYgQEAgQUNfQ09ORklHX1NSQ0RJUihbbGlib3Avb3BfY29uZmlnLmhdKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvb3Byb2ZpbGUtY3Jvc3MtY29tcGlsZS10ZXN0cy5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvb3Byb2ZpbGUtY3Jvc3MtY29tcGlsZS10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWZhOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9vcHJvZmlsZS1jcm9zcy1jb21waWxlLXRlc3RzLnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1ByZXZlbnQgcnVubmluZyBjaGVjayB0ZXN0cyBvbiBob3N0IGlmIGNyb3NzIGNvbXBpbGluZworCitUaGlzIHBhdGNoIGVuYWJsZXMgcnVubmluZyB0aGUgJ21ha2UgY2hlY2snIHRlc3RzIG9uIHRoZSB0YXJnZXQKK2luIGEgY3Jvc3MtY29tcGlsZWQgZW52aXJvbm1lbnQuIElmIG5vdCBjcm9zcy1jb21waWxpbmcsIHRoZW4gJ21ha2UKKyBjaGVjaycgYnVpbGRzIGFuZCBleGVjdXRlcyB0aGUgdGVzdHM7IG5vIGNoYW5nZSBmcm9tIHRoaXMgcGF0Y2guCitJbiBhIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudCwgdGhlIG1ha2UgdmFyaWFibGUgQ1JPU1NfQ09NUElMRSBpcworc2V0IHdoaWNoIGJ5cGFzc2VzIGFzc2lnaW5nIHRlc3RzIHRvIHRoZSBtYWtla2ZpbGUgdmFyaWFibGUgVEVTVFMuCitTaW5jZSBURVNUUyBpcyBlbXB0eSwgdGhlICdtYWtlIGNoZWNrJyBwcm9jZXNzIG5ldmVyIHRyaWVzIHRvIHJ1biB0aGUKK3Rlc3RzIG9uIHRoZSBob3N0cy4gIE9uIHRoZSB0YXJnZXQsIHRoZSB0ZXN0cyBtdXN0IGJlIHJ1biBtYW51YWxseS4KKworQWxzbywgaW4gdGhlIGxpYnV0aWwrKyB0ZXN0cywgYSBtYWtlZmlsZSB2YXJpYWJsZSBTUkNESVIgaXMgcGFzc2VkIGludG8KK3RoZSBjb21waWxhdGlvbiBwaGFzZSwgcG9pbnRpbmcgdG8gdGhlIHJ1bnRpbWUgbG9jYXRpb24gb2YgdGhlIHRlc3QKKydmaWxlLW1hbmlwLXRlc3RzJy4gIFRoZSBtZWNoYW5pc20gdXNlZCBmb3IgYSBob3N0IHRlc3QsIGJhc2VkIG9uCisndG9wZGlyJyBkb2Vzbid0IHdvcmsuICBJbnN0ZWFkLCBpZiBDUk9TU19DT01QSUxFIGlzIHNldCwgdGhlCittYWtlZmlsZSB0YWtlcyB0aGUgcGF0aCBvZiBTUkNESVIgZnJvbSB0aGUgYnVpbGQgZW52aXJvbm1lbnQgYW5kIG5vdAorZnJvbSBhbiBleHByZXNzaW9uIGJhc2VkIG9uIHRoZSBob3N0IHBhdGggJ3RvcGRpcicuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEYXZlIExlcm5lciA8ZGF2ZS5sZXJuZXJAd2luZHJpdmVyLmNvbT4KKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggNDFlY2U2NC4uY2U1YTE2ZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzkyLDYgKzM5Miw3IEBAIEFDX0FSR19FTkFCTEUoYWNjb3VudC1jaGVjaywKKyAJZW5hYmxlX2FjY291bnRfY2hlY2s9JGVuYWJsZXZhbCwgZW5hYmxlX2FjY291bnRfY2hlY2s9eWVzKQorIAorIEFNX0NPTkRJVElPTkFMKENIRUNLX0FDQ09VTlQsIHRlc3QgIngkZW5hYmxlX2FjY291bnRfY2hlY2siID0gInh5ZXMiKQorK0FNX0NPTkRJVElPTkFMKENST1NTX0NPTVBJTEUsIHRlc3QgIngkY3Jvc3NfY29tcGlsaW5nIiA9ICJ4eWVzIikKKyAKKyBBQ19TVUJTVChPUF9DRkxBR1MpCisgQUNfU1VCU1QoT1BfQ1hYRkxBR1MpCitkaWZmIC0tZ2l0IGEvbGliZGIvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOGE2OTAwMy4uZDgyMDA5MCAxMDA2NDQKKy0tLSBhL2xpYmRiL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJkYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEzLDQgKzEzLDYgQEAgY2hlY2tfUFJPR1JBTVMgPSBkYl90ZXN0CisgZGJfdGVzdF9TT1VSQ0VTID0gZGJfdGVzdC5jCisgZGJfdGVzdF9MREFERCA9IC4uL2xpYm9kYi5hIC4uLy4uL2xpYnV0aWwvbGlidXRpbC5hCisgCisraWYgISBDUk9TU19DT01QSUxFCisgVEVTVFMgPSAke2NoZWNrX1BST0dSQU1TfQorK2VuZGlmCitkaWZmIC0tZ2l0IGEvbGlib3AvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggOGE3OWViNS4uNmQ0MTdjNCAxMDA2NDQKKy0tLSBhL2xpYm9wL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi9saWJvcC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTMzLDQgKzMzLDYgQEAgbG9hZF9ldmVudHNfZmlsZXNfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIG1hbmdsZV90ZXN0c19TT1VSQ0VTID0gbWFuZ2xlX3Rlc3RzLmMKKyBtYW5nbGVfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30gdXRmOF9jaGVja2VyLnNoCisrZW5kaWYKK2RpZmYgLS1naXQgYS9saWJyZWdleC90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCA2ZjE5ODM4Li4xZDE3NmY5IDEwMDY0NAorLS0tIGEvbGlicmVnZXgvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL2xpYnJlZ2V4L3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTgsNCArMTgsNiBAQCBqYXZhX3Rlc3RfTERBREQgPSBcCisgCisgRVhUUkFfRElTVCA9IG1hbmdsZWQtbmFtZS5pbgorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbSBiL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggNTFhZjAzMS4uYTAxZWEyZCAxMDA2NDQKKy0tLSBhL2xpYnV0aWwrKy90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlidXRpbCsrL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMSw3ICsxLDkgQEAKKyAKKyBSRUFMUEFUSD0gcmVhZGxpbmsgLWYKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBTUkNESVIgOj0gJChzaGVsbCAkKFJFQUxQQVRIKSAkKHRvcGRpcikvbGlidXRpbCsrL3Rlc3RzLyApCisrZW5kaWYKKyAKKyBBTV9DUFBGTEFHUyA9IFwKKyAJLUkgJHt0b3Bfc3JjZGlyfS9saWJ1dGlsKysgLUQgU1JDRElSPSJcIiQoU1JDRElSKS9cIiIgQE9QX0NQUEZMQUdTQAorQEAgLTQ2LDQgKzQ4LDYgQEAgY2FjaGVkX3ZhbHVlX3Rlc3RzX0xEQUREID0gJHtDT01NT05fTElCU30KKyB1dGlsaXR5X3Rlc3RzX1NPVVJDRVMgPSB1dGlsaXR5X3Rlc3RzLmNwcAorIHV0aWxpdHlfdGVzdHNfTERBREQgPSAke0NPTU1PTl9MSUJTfQorIAorK2lmICEgQ1JPU1NfQ09NUElMRQorIFRFU1RTID0gJHtjaGVja19QUk9HUkFNU30KKytlbmRpZgorZGlmZiAtLWdpdCBhL2xpYnV0aWwvdGVzdHMvTWFrZWZpbGUuYW0gYi9saWJ1dGlsL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCBkZmNkNmVjLi5lODgzMWI1IDEwMDY0NAorLS0tIGEvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorKysrIGIvbGlidXRpbC90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTEyLDQgKzEyLDYgQEAgZmlsZV90ZXN0c19MREFERCA9IC4uL2xpYnV0aWwuYQorIHN0cmluZ190ZXN0c19TT1VSQ0VTID0gc3RyaW5nX3Rlc3RzLmMKKyBzdHJpbmdfdGVzdHNfTERBREQgPSAuLi9saWJ1dGlsLmEKKyAKKytpZiAhIENST1NTX0NPTVBJTEUKKyBURVNUUyA9ICR7Y2hlY2tfUFJPR1JBTVN9CisrZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcm9vdC1ob21lLWRpci5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcm9vdC1ob21lLWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZjNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9yb290LWhvbWUtZGlyLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK29wcm9maWxlOiBEZXRlcm1pbmUgdGhlIHJvb3QgaG9tZSBkaXJlY3RvcnkgZHluYW1pY2FsbHkKKworVGhpcyBjb21taXQgZGV0ZWN0cyB0aGUgcm9vdCBob21lIGRpcmVjdG9yeSBkeW5hbWljYWxseSB3aXRoIGNoYW5nZXMgdG8KK3RoZSBvcHJvZmlsZSBndWkgYXBwIHNvdXJjZS4KKworVGhlIGNvbW1pdCByZXBsYWNlcyBhbiBlYXJsaWVyIGZpeCB0aGF0IGRldGVjdGVkIGFuZCBhZGp1c3RlZCBhCisnbm9uLXN0YW5kYXJkJyByb290IGhvbWUgZGlyZWN0b3J5IGF0IGJ1aWxkIHRpbWUuICBUaGUgYWR2YW50YWdlIG9mIHRoaXMKK3BhdGNoIGlzIHRoYXQgdGhlIG9wcm9maWxlIHRvb2xzIGFyZSBhZGp1c3RlZCB0byB0aGUgY3VycmVudCBydW4tdGltZQorcGF0aCB0byB+cm9vdCwgbm90IHRoZSBidWlsZCB0aW1lIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogaW5hcHByb3ByaWF0ZSBbT0Ugc3BlY2lmaWNdCisKK1NpZ25lZC1vZmYtYnk6IERhdmUgTGVybmVyIDxkYXZlLmxlcm5lckB3aW5kcml2ZXIuY29tPgorCitJbmRleDogb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLmh0bWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBvcHJvZmlsZS0xLjAuMC5vcmlnL2RvYy9vcHJvZmlsZS5odG1sCTIwMTQtMTEtMDMgMTc6NTU6MzEuNTExMDM0ODU3ICswMDAwCisrKysgb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLmh0bWwJMjAxNC0xMS0wMyAxNzo1NzoyNi40MTUwMzc5ODggKzAwMDAKK0BAIC0xNTYzLDggKzE1NjMsOCBAQAorIAkJPHNwYW4gY2xhc3M9ImVtcGhhc2lzIj48ZW0+bXVzdDwvZW0+PC9zcGFuPiBzdG9wIGl0IGluIGEgY29udHJvbGxlZCBtYW5uZXIgaW4gb3JkZXIgdG8gcHJvY2VzcworIAkJdGhlIHByb2ZpbGUgZGF0YSBpdCBoYXMgY29sbGVjdGVkLiAgVXNlIDxjb2RlIGNsYXNzPSJjb2RlIj5raWxsIC1TSUdJTlQgJmx0O29wZXJmLVBJRCZndDs8L2NvZGU+CisgCQlmb3IgdGhpcyBwdXJwb3NlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHdoZW4gcnVubmluZyA8c3BhbiBjbGFzcz0iY29tbWFuZCI+PHN0cm9uZz5vcGVyZjwvc3Ryb25nPjwvc3Bhbj4KKy0JCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj4vcm9vdDwvY29kZT4gb3IgYSBzdWJkaXJlY3RvcnkKKy0JCW9mIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+L3Jvb3Q8L2NvZGU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKysJCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5+cm9vdDwvY29kZT4gb3IgYSBzdWJkaXJlY3RvcnkKKysJCW9mIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+fnJvb3Q8L2NvZGU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKyAJCTwvcD4KKyAgICAgICAgICAgICAgIDwvZGQ+CisgICAgICAgICAgICAgICA8ZHQ+CitJbmRleDogb3Byb2ZpbGUtMS4wLjAvZG9jL29wcm9maWxlLnhtbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG9wcm9maWxlLTEuMC4wLm9yaWcvZG9jL29wcm9maWxlLnhtbAkyMDE0LTExLTAzIDE3OjU1OjMxLjUxNTAzNDg1NyArMDAwMAorKysrIG9wcm9maWxlLTEuMC4wL2RvYy9vcHJvZmlsZS54bWwJMjAxNC0xMS0wMyAxNzo1ODowMy43MTkwMzkwMDUgKzAwMDAKK0BAIC02NTQsOCArNjU0LDggQEAKKyAJCTxlbXBoYXNpcz5tdXN0PC9lbXBoYXNpcz4gc3RvcCBpdCBpbiBhIGNvbnRyb2xsZWQgbWFubmVyIGluIG9yZGVyIHRvIHByb2Nlc3MKKyAJCXRoZSBwcm9maWxlIGRhdGEgaXQgaGFzIGNvbGxlY3RlZC4gIFVzZSA8Y29kZT5raWxsIC1TSUdJTlQgJmx0O29wZXJmLVBJRCZndDs8L2NvZGU+CisgCQlmb3IgdGhpcyBwdXJwb3NlLiBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHdoZW4gcnVubmluZyA8Y29tbWFuZD5vcGVyZjwvY29tbWFuZD4KKy0JCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGZpbGVuYW1lPi9yb290PC9maWxlbmFtZT4gb3IgYSBzdWJkaXJlY3RvcnkKKy0JCW9mIDxmaWxlbmFtZT4vcm9vdDwvZmlsZW5hbWU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKysJCXdpdGggdGhpcyBvcHRpb24sIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzaG91bGQgYmUgPGZpbGVuYW1lPn5yb290PC9maWxlbmFtZT4gb3IgYSBzdWJkaXJlY3RvcnkKKysJCW9mIDxmaWxlbmFtZT5+cm9vdDwvZmlsZW5hbWU+IHRvIGF2b2lkIHN0b3Jpbmcgc2FtcGxlIGRhdGEgZmlsZXMgaW4gbG9jYXRpb25zIGFjY2Vzc2libGUgYnkgcmVndWxhciB1c2Vycy4KKyAJCTwvcGFyYT48L2xpc3RpdGVtPgorIAk8L3Zhcmxpc3RlbnRyeT4KKyAJPHZhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZS9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxNGJlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGUvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCitzYXZlZF9kaXI9JFBXRAorZm9yIGRpciBpbiAqL3Rlc3RzIDsgZG8KKwljZCAkZGlyCisJZm9yIGF0ZXN0IGluICogOyBkbworCQlpZiBbIFwoIC14ICRhdGVzdCBcKSAtYSBcKCAtZiAkYXRlc3QgXCkgXSA7IHRoZW4KKwkJCS4vJGF0ZXN0ID4gJHthdGVzdH0uc3Rkb3V0IDI+ICR7YXRlc3R9LnN0ZGVycgorCQkJaWYgWyAkPyA9IDAgXSA7IHRoZW4KKwkJCQllY2hvICJQQVNTOiAkZGlyICRhdGVzdCIKKwkJCQlybSAke2F0ZXN0fS5zdGRvdXQgJHthdGVzdH0uc3RkZXJyCisJCQllbHNlCisJCQkJZWNobyAiRkFJTDogJHtkaXJ9LyR7YXRlc3R9IgorCQkJZmkKKwkJZmkKKwlkb25lCisJY2QgJHNhdmVkX2RpcgorZG9uZQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxlXzEuMS4wLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZV8xLjEuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE5NGFkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZV8xLjEuMC5iYgpAQCAtMCwwICsxLDEwIEBACityZXF1aXJlIG9wcm9maWxlLmluYworCitERVBFTkRTICs9ICJ2aXJ0dWFsL2tlcm5lbCIKK0RFUEVORFNfYXBwZW5kX3Bvd2VycGM2NCA9ICIgbGlicGZtNCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI0OGM0YzA2OWY5NDc2ZjQyN2ZhNzE5NTU2M2Y5ODY3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImNmNzU5YTZkZTFhNjAzM2Q1ZGZjOTNiZGExMjlhOWYyZTEyOGFlY2M0MjM4Y2M2NTdmZWIwODAxZDFiMDM2NmMiCisKK1MgPSAiJHtXT1JLRElSfS9vcHJvZmlsZS0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0IGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlci9pbml0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1NDRlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL2luaXQKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisjIyMgQkVHSU4gSU5JVCBJTkZPCisjIFByb3ZpZGVzOiAgICAgICAgICBvcHJvZmlsZS1zZXJ2ZXIKKyMgUmVxdWlyZWQtU3RhcnQ6ICAgICRuZXR3b3JrCisjIFJlcXVpcmVkLVN0b3A6ICAgICAkbmV0d29yaworIyBEZWZhdWx0LVN0YXJ0OiAgICAgMiAzIDQgNQorIyBEZWZhdWx0LVN0b3A6ICAgICAgMCAxIDYKKyMgU2hvcnQtRGVzY3JpcHRpb246IE9Qcm9maWxlVUkgc2VydmVyCisjIERlc2NyaXB0aW9uOiAgICAgICAKKyMjIyBFTkQgSU5JVCBJTkZPCisKKy4gL2V0Yy9pbml0LmQvZnVuY3Rpb25zCisKK2Nhc2UgIiQxIiBpbgorICBzdGFydCkKKyAgICAgICAgZWNobyAiU3RhcnRpbmcgT1Byb2ZpbGVVSSBzZXJ2ZXIiCisJLiAvZXRjL3Byb2ZpbGUKKwkvdXNyL2Jpbi9vcHJvZmlsZS1zZXJ2ZXIgJgorICA7OworCisgIHN0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nIE9Qcm9maWxlVUkgc2VydmVyIgorICAgICAgICBraWxscHJvYyBvcHJvZmlsZS1zZXJ2ZXIKKyAgOzsKKworICByZXN0YXJ0KQorCSQwIHN0b3AKKyAgICAgICAgc2xlZXAgMQorICAgICAgICAkMCBzdGFydAorICA7OworCisgICopCisgICAgICAgIGVjaG8gInVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHJlc3RhcnQgfSIKKyAgOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgYi9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWktc2VydmVyL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyY2JlNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXIvb3Byb2ZpbGV1aS1zZXJ2ZXIuc2VydmljZQpAQCAtMCwwICsxLDYgQEAKK1tVbml0XQorRGVzY3JpcHRpb249T1Byb2ZpbGVVSSBTZXJ2ZXIKK0FmdGVyPW5ldHdvcmsudGFyZ2V0CisKK1tTZXJ2aWNlXQorRXhlY1N0YXJ0PS9iaW4vc2ggLWMgIi4gQFNZU0NPTkZESVJAL3Byb2ZpbGU7IEBCSU5ESVJAL29wcm9maWxlLXNlcnZlciIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLXNlcnZlcl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYjc4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvb3Byb2ZpbGUvb3Byb2ZpbGV1aS1zZXJ2ZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMzQgQEAKK3JlcXVpcmUgb3Byb2ZpbGV1aS5pbmMKKworU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSBcCisgICAgICAgICAgIGZpbGU6Ly9pbml0IFwKKyAgICAgICAgICAgZmlsZTovL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgIgorCitERVBFTkRTICs9ICJpbnRsdG9vbC1uYXRpdmUiCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWNsaWVudCAtLWVuYWJsZS1zZXJ2ZXIiCisKK1JERVBFTkRTXyR7UE59ID0gIm9wcm9maWxlIGF2YWhpLWRhZW1vbiIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9pbml0LmQKKwlpbnN0YWxsIC1tIDA3NTUgJHtXT1JLRElSfS9pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9vcHJvZmlsZXVpLXNlcnZlcgorCisJaW5zdGFsbCAtZCAke0R9JHtzeXN0ZW1kX3VuaXRkaXJ9L3N5c3RlbQorCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L29wcm9maWxldWktc2VydmVyLnNlcnZpY2UgJHtEfSR7c3lzdGVtZF91bml0ZGlyfS9zeXN0ZW0vCisJc2VkIC1pIC1lICdzLEBTWVNDT05GRElSQCwke3N5c2NvbmZkaXJ9LGcnIFwKKwkJLWUgJ3MsQEJJTkRJUkAsJHtiaW5kaXJ9LGcnICR7RH0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtL29wcm9maWxldWktc2VydmVyLnNlcnZpY2UKK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZCBzeXN0ZW1kCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJvcHJvZmlsZXVpLXNlcnZlciIKK0lOSVRTQ1JJUFRfUEFSQU1TID0gInN0YXJ0IDk5IDUgMiAuIHN0b3AgMjAgMCAxIDYgLiIKKworU1lTVEVNRF9TRVJWSUNFXyR7UE59ID0gIm9wcm9maWxldWktc2VydmVyLnNlcnZpY2UiCitTWVNURU1EX0FVVE9fRU5BQkxFID0gImRpc2FibGUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWkuaW5jIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmNmMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpLmluYwpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlVzZXIgSW50ZXJmYWNlIGZvciB0aGUgU3lzdGVtLVdpZGUgUHJvZmlsZXIiCitERVNDUklQVElPTiA9ICJVc2VyIGludGVyZmFjZSBmb3IgdGhlIE9Qcm9maWxlIHRvb2wiCitIT01FUEFHRSA9ICJodHRwOi8vbGFicy5vLWhhbmQuY29tL29wcm9maWxldWkvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgYXZhaGkgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWF2YWhpIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL29wcm9maWxlL29wcm9maWxldWlfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY5ZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9vcHJvZmlsZS9vcHJvZmlsZXVpX2dpdC5iYgpAQCAtMCwwICsxLDE3IEBACityZXF1aXJlIG9wcm9maWxldWkuaW5jCisKK0RFUEVORFMgKz0gImd0aysgbGliZ2xhZGUgbGlieG1sMiBhdmFoaS11aSBnY29uZiIKKworU1JDUkVWID0gIjM4OWUxODc1YWY0NzIxZDUyYzdlNjVjZjljZmZmYjY5YjBlZDZhNTkiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvb3Byb2ZpbGV1aSIKKworRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1jbGllbnQgLS1kaXNhYmxlLXNlcnZlciIKKworUEFDS0FHRVMgPSsgIm9wcm9maWxldWktdmlld2VyIgorCitGSUxFU19vcHJvZmlsZXVpLXZpZXdlciA9ICIke2JpbmRpcn0vb3BhcmNoY29udiAke2JpbmRpcn0vb3Byb2ZpbGUtdmlld2VyICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyAke2RhdGFkaXJ9L29wcm9maWxldWkvICR7ZGF0YWRpcn0vaWNvbnMiCitSREVQRU5EU19vcHJvZmlsZXVpLXZpZXdlciA9ICJvcHJvZmlsZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLWZlYXR1cmVzLmluYyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLWZlYXR1cmVzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODg1OWFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYtZmVhdHVyZXMuaW5jCkBAIC0wLDAgKzEsMjIgQEAKK1BFUkZfRkVBVFVSRVNfRU5BQkxFID89ICJwZXJmLXNjcmlwdGluZyBwZXJmLXR1aSIKKworZGVmIHBlcmZfZmVhdHVyZV9lbmFibGVkKGZlYXR1cmUsIHRydWV2YWwsIGZhbHNldmFsLCBkKToKKyAgICAiIiIKKyAgICBDaGVjayB3aGljaCBwZXJmIGZlYXR1cmVzIGFyZSBlbmFibGVkLgorCisgICAgVGhlIFBFUkZfRkVBVFVSRVNfRU5BQkxFIHZhcmlhYmxlIGxpc3RzIHRoZSBwZXJmIGZlYXR1cmVzIHRvCisgICAgZW5hYmxlLiAgT3ZlcnJpZGUgaXQgaWYgeW91IHdhbnQgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIHdoYXQncworICAgIGxpc3RlZCBhYm92ZSwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuICBJZiBlbXB0eSwgdGhlIGJ1aWxkIHdvbid0CisgICAgZW5hYmxlIGFueSBmZWF0dXJlcyAod2hpY2ggbWF5IGJlIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCwganVzdCBhCisgICAgYmFyZWJvbmVzIHBlcmYgd2l0aG91dCBhbnkgZXh0cmEgYmFnZ2FnZSwgd2hhdCB5b3UgZ2V0IGlmIHlvdQorICAgIHNwZWNpZnkgYW4gZW1wdHkgZmVhdHVyZSBsaXN0KS4KKworICAgIEF2YWlsYWJsZSBwZXJmIGZlYXR1cmVzOgorICAgICAgcGVyZi1zY3JpcHRpbmc6IGVuYWJsZSBzdXBwb3J0IGZvciBQZXJsIGFuZCBQeXRob24gYmluZGluZ3MKKyAgICAgIHBlcmYtdHVpOiBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIHBlcmYgVFVJICh2aWEgbGlibmV3dCkKKworICAgICIiIgorICAgIGVuYWJsZWRfZmVhdHVyZXMgPSBkLmdldFZhcigiUEVSRl9GRUFUVVJFU19FTkFCTEUiLCBUcnVlKSBvciAiIgorICAgIGlmIGZlYXR1cmUgaW4gZW5hYmxlZF9mZWF0dXJlczoKKyAgICAgICAgcmV0dXJuIHRydWV2YWwKKyAgICByZXR1cm4gZmFsc2V2YWwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9wZXJmL3BlcmYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiM2EyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvcGVyZi9wZXJmLmJiCkBAIC0wLDAgKzEsMjEwIEBACitTVU1NQVJZID0gIlBlcmZvcm1hbmNlIGFuYWx5c2lzIHRvb2xzIGZvciBMaW51eCIKK0RFU0NSSVBUSU9OID0gIlBlcmZvcm1hbmNlIGNvdW50ZXJzIGZvciBMaW51eCBhcmUgYSBuZXcga2VybmVsLWJhc2VkIFwKK3N1YnN5c3RlbSB0aGF0IHByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIGFsbCB0aGluZ3MgXAorcGVyZm9ybWFuY2UgYW5hbHlzaXMuIEl0IGNvdmVycyBoYXJkd2FyZSBsZXZlbCBcCisoQ1BVL1BNVSwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBmZWF0dXJlcyBcCithbmQgc29mdHdhcmUgZmVhdHVyZXMgKHNvZnR3YXJlIGNvdW50ZXJzLCB0cmFjZXBvaW50cykgXAorYXMgd2VsbC4iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kNzgxMGZhYjc0ODdmYjBhYWQzMjdiNzZmMWJlN2NkNyIKKworUFIgPSAicjkiCisKK3JlcXVpcmUgcGVyZi1mZWF0dXJlcy5pbmMKKworQlVJTERQRVJGX2xpYmMtdWNsaWJjID0gIm5vIgorCisjIGd1aSBzdXBwb3J0IHdhcyBhZGRlZCB3aXRoIGtlcm5lbCAzLjYuMzUKKyMgc2luY2UgMy4xMCBsaWJuZXd0IHdhcyByZXBsYWNlZCBieSBzbGFuZworIyB0byBjb3ZlciBhIHdpZGUgcmFuZ2Ugb2Yga2VybmVsIHdlIGFkZCBib3RoIGRlcGVuZGVuY2llcworVFVJX0RFUEVORFMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtdHVpJywgJ2xpYm5ld3Qgc2xhbmcnLCAnJyxkKX0iCitTQ1JJUFRJTkdfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAncGVybCBweXRob24nLCAnJyxkKX0iCitMSUJVTldJTkRfREVQRU5EUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJ1bndpbmQnLCAnbGlidW53aW5kJywgJycsZCl9IgorCitERVBFTkRTID0gIiBcCisgICAgdmlydHVhbC8ke01MUFJFRklYfWxpYmMgXAorICAgICR7TUxQUkVGSVh9ZWxmdXRpbHMgXAorICAgICR7TUxQUkVGSVh9YmludXRpbHMgXAorICAgICR7VFVJX0RFUEVORFN9IFwKKyAgICAke1NDUklQVElOR19ERVBFTkRTfSBcCisgICAgJHtMSUJVTldJTkRfREVQRU5EU30gXAorICAgIGJpc29uIGZsZXggeHogXAorIgorCitkb19jb25maWd1cmVbZGVwZW5kc10gKz0gInZpcnR1YWwva2VybmVsOmRvX3NoYXJlZF93b3JrZGlyIgorCitQUk9WSURFUyA9ICJ2aXJ0dWFsL3BlcmYiCisKK2luaGVyaXQgbGludXgta2VybmVsLWJhc2Uga2VybmVsLWFyY2ggcHl0aG9ubmF0aXZlCisKKyMgbmVlZGVkIGZvciBidWlsZGluZyB0aGUgdG9vbHMvcGVyZiBQeXRob24gYmluZGluZ3MKK2luaGVyaXQgcHl0aG9uLWRpcgorZXhwb3J0IFNUQUdJTkdfSU5DRElSCitleHBvcnQgU1RBR0lOR19MSUJESVIKK2V4cG9ydCBCVUlMRF9TWVMKK2V4cG9ydCBIT1NUX1NZUworZXhwb3J0IFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSCisKKyNrZXJuZWwgMy4xKyBzdXBwb3J0cyBXRVJST1IgdG8gZGlzYWJsZSB3YXJuaW5ncyBhcyBlcnJvcnMKK2V4cG9ydCBXRVJST1IgPSAiMCIKKworZG9fcG9wdWxhdGVfbGljW2RlcGVuZHNdICs9ICJ2aXJ0dWFsL2tlcm5lbDpkb19wYXRjaCIKKworIyBuZWVkZWQgZm9yIGJ1aWxkaW5nIHRoZSB0b29scy9wZXJmIFBlcmwgYmluZGluZworaW5oZXJpdCBwZXJsbmF0aXZlIGNwYW4tYmFzZQorIyBFbnYgdmFyIHdoaWNoIHRlbGxzIHBlcmwgaWYgaXQgc2hvdWxkIHVzZSBob3N0IChubykgb3IgdGFyZ2V0ICh5ZXMpIHNldHRpbmdzCitleHBvcnQgUEVSTENPTkZJR1RBUkdFVCA9ICIke0Bpc190YXJnZXQoZCl9IgorZXhwb3J0IFBFUkxfSU5DID0gIiR7U1RBR0lOR19MSUJESVJ9JHtQRVJMX09XTl9ESVJ9L3BlcmwvJHtAZ2V0X3BlcmxfdmVyc2lvbihkKX0vQ09SRSIKK2V4cG9ydCBQRVJMX0xJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorZXhwb3J0IFBFUkxfQVJDSExJQiA9ICIke1NUQUdJTkdfTElCRElSfSR7UEVSTF9PV05fRElSfS9wZXJsLyR7QGdldF9wZXJsX3ZlcnNpb24oZCl9IgorCitpbmhlcml0IGtlcm5lbHNyYworCitCID0gIiR7V09SS0RJUn0vJHtCUE59LSR7UFZ9IgorU1BEWF9TID0gIiR7U30vdG9vbHMvcGVyZiIKKworU0NSSVBUSU5HX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJycsICdOT19MSUJQRVJMPTEgTk9fTElCUFlUSE9OPTEnLGQpfSIKK1RVSV9ERUZJTkVTID0gIiR7QHBlcmZfZmVhdHVyZV9lbmFibGVkKCdwZXJmLXR1aScsICcnLCAnTk9fTkVXVD0xJyxkKX0iCitMSUJVTldJTkRfREVGSU5FUyA9ICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1saWJ1bndpbmQnLCAnJywgJ05PX0xJQlVOV0lORD0xIE5PX0xJQkRXX0RXQVJGX1VOV0lORD0xJyxkKX0iCitMSUJOVU1BX0RFRklORVMgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtbGlibnVtYScsICcnLCAnTk9fTElCTlVNQT0xJyxkKX0iCisKKyMgVGhlIExERkxBR1MgaXMgcmVxdWlyZWQgb3Igc29tZSBvbGQga2VybmVscyBmYWlscyBkdWUgbWlzc2luZworIyBzeW1ib2xzIGFuZCB0aGlzIGlzIHByZWZlcnJlZCB0aGFuIHJlcXVpcmluZyBwYXRjaGVzIHRvIGV2ZXJ5IG9sZAorIyBzdXBwb3J0ZWQga2VybmVsLgorTERGTEFHUz0iLWxkbCAtbHV0aWwiCisKK0VYVFJBX09FTUFLRSA9ICdcCisgICAgLUMgJHtTfS90b29scy9wZXJmIFwKKyAgICBPPSR7Qn0gXAorICAgIENST1NTX0NPTVBJTEU9JHtUQVJHRVRfUFJFRklYfSBcCisgICAgQVJDSD0ke0FSQ0h9IFwKKyAgICBDQz0iJHtDQ30iIFwKKyAgICBBUj0iJHtBUn0iIFwKKyAgICBFWFRSQV9DRkxBR1M9Ii1sZHciIFwKKyAgICBwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9IFwKKyAgICBOT19HVEsyPTEgJHtUVUlfREVGSU5FU30gTk9fRFdBUkY9MSAke0xJQlVOV0lORF9ERUZJTkVTfSBcCisgICAgJHtTQ1JJUFRJTkdfREVGSU5FU30gJHtMSUJOVU1BX0RFRklORVN9IFwKKycKKworRVhUUkFfT0VNQUtFICs9ICJcCisgICAgJ3ByZWZpeD0ke3ByZWZpeH0nIFwKKyAgICAnYmluZGlyPSR7YmluZGlyfScgXAorICAgICdzaGFyZWRpcj0ke2RhdGFkaXJ9JyBcCisgICAgJ3N5c2NvbmZkaXI9JHtzeXNjb25mZGlyfScgXAorICAgICdwZXJmZXhlY2Rpcj0ke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZScgXAorICAgIFwKKyAgICAnRVRDX1BFUkZDT05GSUc9JHtAb3MucGF0aC5yZWxwYXRoKHN5c2NvbmZkaXIsIHByZWZpeCl9JyBcCisgICAgJ3NoYXJlZGlyPSR7QG9zLnBhdGgucmVscGF0aChkYXRhZGlyLCBwcmVmaXgpfScgXAorICAgICdtYW5kaXI9JHtAb3MucGF0aC5yZWxwYXRoKG1hbmRpciwgcHJlZml4KX0nIFwKKyAgICAnaW5mb2Rpcj0ke0Bvcy5wYXRoLnJlbHBhdGgoaW5mb2RpciwgcHJlZml4KX0nIFwKKyIKKworCitkb19jb21waWxlKCkgeworCSMgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyBleHBlY3RlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcKKwl1bnNldCBDRkxBR1MKKwlvZV9ydW5tYWtlIGFsbAorfQorCitkb19pbnN0YWxsKCkgeworCSMgTGludXgga2VybmVsIGJ1aWxkIHN5c3RlbSBpcyBleHBlY3RlZCB0byBkbyB0aGUgcmlnaHQgdGhpbmcKKwl1bnNldCBDRkxBR1MKKwlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsCisJIyB3ZSBhcmUgY2hlY2tpbmcgZm9yIHRoaXMgbWFrZSB0YXJnZXQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHBlcmYgdmVyc2lvbnMKKwlpZiBbICIke0BwZXJmX2ZlYXR1cmVfZW5hYmxlZCgncGVyZi1zY3JpcHRpbmcnLCAxLCAwLCBkKX0iID0gIjEiIF0gJiYgZ3JlcCAtcSBpbnN0YWxsLXB5dGhvbl9leHQgJHtTfS90b29scy9wZXJmL01ha2VmaWxlKjsgdGhlbgorCQlvZV9ydW5tYWtlIERFU1RESVI9JHtEfSBpbnN0YWxsLXB5dGhvbl9leHQKKwlmaQorfQorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisgICAgIyBGaXggZm9yIHJlYnVpbGRpbmcKKyAgICBybSAtcmYgJHtCfS8KKyAgICBta2RpciAke0J9LworCisgICAgIyBJZiBidWlsZGluZyBhIG11bHRsaWIgYmFzZWQgcGVyZiwgdGhlIGluY29ycmVjdCBsaWJyYXJ5IHBhdGggd2lsbCBiZQorICAgICMgZGV0ZWN0ZWQgYnkgcGVyZiwgc2luY2UgaXQgdHJpZ2dlcnMgdmlhOiBpZmVxICgkKEFSQ0gpLHg4Nl82NCkuIEluIGEgMzIgYml0CisgICAgIyBidWlsZCwgd2l0aCBhIDY0IGJpdCBtdWx0aWxpYiwgdGhlIGFyY2ggd29uJ3QgbWF0Y2ggYW5kIHRoZSBkZXRlY3Rpb24gb2YgYSAKKyAgICAjIDY0IGJpdCBidWlsZCAoYW5kIGxpYnJhcnkpIGFyZSBub3QgZXhlY3RlZC4gVG8gZW5zdXJlIHRoYXQgbGlicmFyaWVzIGFyZQorICAgICMgaW5zdGFsbGVkIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uLCB3ZSBjYW4gdXNlIHRoZSB3ZWFrIGFzc2lnbm1lbnQgaW4gdGhlCisgICAgIyBjb25maWcvTWFrZWZpbGUuCisgICAgIworICAgICMgQWxzbyBuZWVkIHRvIHJlbG9jYXRlIC5jb25maWctZGV0ZWN0ZWQgdG8gJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZAorICAgICMgZm9yIGtlcm5lbCBzb3VyY2VzIHRoYXQgZG8gbm90IGFscmVhZHkgZG8gdGhpcworICAgICMgYXMgdHdvIGJ1aWxkcyAoZS5nLiBwZXJmIGFuZCBsaWIzMi1wZXJmIGZyb20gbXV0bGlsaWIgY2FuIGNvbmZsaWN0CisgICAgIyB3aXRoIGVhY2ggb3RoZXIgaWYgaXRzIGluIHRoZSBzaGFyZWQgc291cmNlIGRpcmVjdG9yeQorICAgICMKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlIiBdOyB0aGVuCisgICAgICAgICMgTWF0Y2ggJChwcmVmaXgpLyQobGliKSBhbmQgJChwcmVmaXgpL2xpYgorICAgICAgICBzZWQgLWkgLWUgJ3MsXmxpYmRpciA9IFwoJChwcmVmaXgpLy4qbGliXCksbGliZGlyID89IFwxLCcgXAorICAgICAgICAgICAgICAgLWUgJ3MsXnBlcmZleGVjZGlyID0gXCguKlwpLHBlcmZleGVjZGlyID89IFwxLCcgXAorICAgICAgICAgICAgICAgLWUgJ3MsXCAuY29uZmlnLWRldGVjdGVkLCAkKE9VVFBVVCkvY29uZmlnLWRldGVjdGVkLGcnIFwKKyAgICAgICAgICAgICR7U30vdG9vbHMvcGVyZi9jb25maWcvTWFrZWZpbGUKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvcGVyZi9NYWtlZmlsZS5wZXJmIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAtZSAncyxcIC5jb25maWctZGV0ZWN0ZWQsICQoT1VUUFVUKS9jb25maWctZGV0ZWN0ZWQsZycgXAorICAgICAgICAgICAgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICAgICAgc2VkIC1pIC1lICJzLHByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyQscHJlZml4PSdcJChERVNURElSX1NRKS91c3InIC0taW5zdGFsbC1saWI9J1wkKERFU1RESVIpXCQoUFlUSE9OX1NJVEVQQUNLQUdFU19ESVIpJyxnIiBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgIGZpCisgICAgc2VkIC1pIC1lICJzLC0tcm9vdD0nL1wkKERFU1RESVJfU1EpJywtLXByZWZpeD0nXCQoREVTVERJUl9TUSkvdXNyJyAtLWluc3RhbGwtbGliPSdcJChERVNURElSKVwkKFBZVEhPTl9TSVRFUEFDS0FHRVNfRElSKScsZyIgXAorICAgICAgICAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUKKworICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvYnVpbGQvTWFrZWZpbGUuYnVpbGQiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pIC1lICdzLFwgLmNvbmZpZy1kZXRlY3RlZCwgJChPVVRQVVQpL2NvbmZpZy1kZXRlY3RlZCxnJyBcCisgICAgICAgICAgICAke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmJ1aWxkCisgICAgZmkKKworICAgICMgV2UgbmVlZCB0byBlbnN1cmUgdGhlIC0tc3lzcm9vdCBvcHRpb24gaW4gQ0MgaXMgcHJlc2VydmVkCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENDID0gJChDUk9TU19DT01QSUxFKWdjYywjQ0MsJyAke1N9L3Rvb2xzL3BlcmYvTWFrZWZpbGUucGVyZgorICAgICAgICBzZWQgLWkgJ3MsQVIgPSAkKENST1NTX0NPTVBJTEUpYXIsI0FSLCcgJHtTfS90b29scy9wZXJmL01ha2VmaWxlLnBlcmYKKyAgICBmaQorICAgIGlmIFsgLWUgIiR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZSIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsQ0MgPSAkKENST1NTX0NPTVBJTEUpZ2NjLCNDQywnICR7U30vdG9vbHMvbGliL2FwaS9NYWtlZmlsZQorICAgICAgICBzZWQgLWkgJ3MsQVIgPSAkKENST1NTX0NPTVBJTEUpYXIsI0FSLCcgJHtTfS90b29scy9saWIvYXBpL01ha2VmaWxlCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncyxDQyA6PSAkKENST1NTX0NPTVBJTEUpZ2NjIC1NRCxDQyArPSAtTUQsJyAke1N9L3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL01ha2VmaWxlCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL2J1aWxkL01ha2VmaWxlLmZlYXR1cmUiIF07IHRoZW4KKyAgICAgICAgc2VkIC1pICdzLENGTEFHUz0sQ0M9IlwkKENDKSIgQ0ZMQUdTPSwnICR7U30vdG9vbHMvYnVpbGQvTWFrZWZpbGUuZmVhdHVyZQorICAgIGZpCisKKyAgICAjIDMuMTctcmMxKyBoYXMgYSBpbmNsdWRlIGlzc3VlIGZvciBhcm0vcG93ZXJwYy4gVGVtcG9yYXJpbHkgc2VkIGluIHRoZSBhcHByb3ByaWF0ZSBpbmNsdWRlCisgICAgaWYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvJEFSQ0gvdXRpbC9za2lwLWNhbGxjaGFpbi1pZHguYyIgXTsgdGhlbgorICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInV0aWwvY2FsbGNoYWluLmgiLCNpbmNsdWRlICJ1dGlsL2NhbGxjaGFpbi5oIlxuI2luY2x1ZGUgInV0aWwvZGVidWcuaCIsJyAke1N9L3Rvb2xzL3BlcmYvYXJjaC8kQVJDSC91dGlsL3NraXAtY2FsbGNoYWluLWlkeC5jCisgICAgZmkKKyAgICBpZiBbIC1lICIke1N9L3Rvb2xzL3BlcmYvYXJjaC9hcm0vdXRpbC91bndpbmQtbGlidW53aW5kLmMiIF0gJiYgWyAtZSAiJHtTfS90b29scy9wZXJmL2FyY2gvYXJtL3Rlc3RzL2R3YXJmLXVud2luZC5jIiBdOyB0aGVuCisgICAgICAgIHNlZCAtaSAncywjaW5jbHVkZSAidGVzdHMvdGVzdHMuaCIsI2luY2x1ZGUgInRlc3RzL3Rlc3RzLmgiXG4jaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIiwnICR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS90ZXN0cy9kd2FyZi11bndpbmQuYworICAgICAgICBzZWQgLWkgJ3MsI2luY2x1ZGUgInBlcmZfcmVncy5oIiwjaW5jbHVkZSAicGVyZl9yZWdzLmgiXG4jaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIiwnICR7U30vdG9vbHMvcGVyZi9hcmNoL2FybS91dGlsL3Vud2luZC1saWJ1bndpbmQuYworICAgIGZpCit9CisKK3B5dGhvbiBkb19wYWNrYWdlX3ByZXBlbmQoKSB7CisgICAgZC5zZXRWYXIoJ1BLR1YnLCBkLmdldFZhcigiS0VSTkVMX1ZFUlNJT04iLCBUcnVlKS5zcGxpdCgiLSIpWzBdKQorfQorCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCisKK1BBQ0tBR0VTID0rICIke1BOfS1hcmNoaXZlICR7UE59LXRlc3RzICR7UE59LXBlcmwgJHtQTn0tcHl0aG9uIgorCitSREVQRU5EU18ke1BOfSArPSAiZWxmdXRpbHMgYmFzaCIKK1JERVBFTkRTXyR7UE59LWFyY2hpdmUgPSsgImJhc2giCitSREVQRU5EU18ke1BOfS1weXRob24gPSsgImJhc2ggcHl0aG9uIgorUkRFUEVORFNfJHtQTn0tcGVybCA9KyAiYmFzaCBwZXJsIHBlcmwtbW9kdWxlcyIKK1JERVBFTkRTXyR7UE59LXRlc3RzID0rICJweXRob24iCisKK1JTVUdHRVNUU19TQ1JJUFRJTkcgPSAiJHtAcGVyZl9mZWF0dXJlX2VuYWJsZWQoJ3BlcmYtc2NyaXB0aW5nJywgJyR7UE59LXBlcmwgJHtQTn0tcHl0aG9uJywgJycsZCl9IgorUlNVR0dFU1RTXyR7UE59ICs9ICIke1BOfS1hcmNoaXZlICR7UE59LXRlc3RzICR7UlNVR0dFU1RTX1NDUklQVElOR30iCisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmV4ZWNkaXJ9L3BlcmYtY29yZSAke2V4ZWNfcHJlZml4fS9saWJleGVjL3BlcmYtY29yZSAke2xpYmRpcn0vdHJhY2VldmVudCIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcy8uZGVidWciCitGSUxFU18ke1BOfS1hcmNoaXZlID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9wZXJmLWFyY2hpdmUiCitGSUxFU18ke1BOfS10ZXN0cyA9ICIke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvdGVzdHMiCitGSUxFU18ke1BOfS1weXRob24gPSAiJHtsaWJkaXJ9L3B5dGhvbiovc2l0ZS1wYWNrYWdlcyAke2xpYmRpcn0vcGVyZi9wZXJmLWNvcmUvc2NyaXB0cy9weXRob24iCitGSUxFU18ke1BOfS1wZXJsID0gIiR7bGliZGlyfS9wZXJmL3BlcmYtY29yZS9zY3JpcHRzL3BlcmwiCisKKworSU5ISUJJVF9QQUNLQUdFX0RFQlVHX1NQTElUPSIxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3Bvd2VydG9wL3Bvd2VydG9wXzIuNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmEwN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9wb3dlcnRvcC9wb3dlcnRvcF8yLjcuYmIKQEAgLTAsMCArMSwzMiBAQAorU1VNTUFSWSA9ICJQb3dlciB1c2FnZSB0b29sIgorREVTQ1JJUFRJT04gPSAiTGludXggdG9vbCB0byBkaWFnbm9zZSBpc3N1ZXMgd2l0aCBwb3dlciBjb25zdW1wdGlvbiBhbmQgcG93ZXIgbWFuYWdlbWVudC4iCitIT01FUEFHRSA9ICJodHRwOi8vMDEub3JnL3Bvd2VydG9wLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmxlc3N3YXR0cy5vcmcvIgorREVQRU5EUyA9ICJuY3Vyc2VzIGxpYm5sIHBjaXV0aWxzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTEyZjg4NGQyYWUxZmY4N2MwOWU1YjdjY2MyYzRjYTdlIgorCitTUkNfVVJJID0gImh0dHA6Ly8wMS5vcmcvc2l0ZXMvZGVmYXVsdC9maWxlcy9kb3dubG9hZHMvcG93ZXJ0b3AvcG93ZXJ0b3AtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBkNjg2ZTQ3ZGFhZjdlOWQ4OTAzMWY3NzYzNDMyZWYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOGQ0YjE0OTBlMmJhYWQ0NDY3YzBkZWQzYzQyM2RiNDQ3MmRjYmY3YjJkZDhmOGYyYTkyOGY1NDA0N2M2NzhjYSIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCBwa2djb25maWcKKworIyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayB3aXRoIGxpYmludGwgaW4gdUNsaWJjIHN5c3RlbXMKK0VYVFJBX0xERkxBR1MgPz0gIiIKK0VYVFJBX0xERkxBR1NfbGliYy11Y2xpYmMgPSAiLWxpbnRsIgorTERGTEFHUyArPSAiJHtFWFRSQV9MREZMQUdTfSIKKworIyB3ZSBkbyBub3Qgd2FudCBsaWJuY3Vyc2VzdyBpZiB3ZSBjYW4KK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgICMgY29uZmlndXJlLmFjIGNoZWNrcyBmb3IgZGVsd2luKCkgaW4gIm5jdXJzZXN3IG5jdXJzZXMiIHNvIGxldCdzIGRyb3AgZmlyc3Qgb25lCisgICAgc2VkIC1pIC1lICJzL25jdXJzZXN3Ly9nIiAke1N9L2NvbmZpZ3VyZS5hYworICAgIG1rZGlyIC1wICR7Qn0vc3JjL3R1bmluZy8KK30KKworaW5oZXJpdCB1cGRhdGUtYWx0ZXJuYXRpdmVzCitBTFRFUk5BVElWRV8ke1BOfSA9ICJwb3dlcnRvcCIKK0FMVEVSTkFUSVZFX1RBUkdFVFtwb3dlcnRvcF0gPSAiJHtzYmluZGlyfS9wb3dlcnRvcCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtwb3dlcnRvcF0gPSAiJHtzYmluZGlyfS9wb3dlcnRvcCIKK0FMVEVSTkFUSVZFX1BSSU9SSVRZID0gIjEwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL2RlZmluZS1OVF9HTlVfQlVJTERfSUQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjMmNiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK09uIHVjbGliYyBlbGYuaCBkb2VzIG5vdCBoYXZlIEdOVSBleHRlbnRpb25zIGJ1dCB3ZSBuZWVkIHRoaXMgZGVmaW5lCitzbyB3ZSBkZWZpbmUgaXQgbG9jYWxseSBpZiBpdHMgbm90IGdldHRpbmcgaXQgZnJvbSBlbGYuaAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC9lbGZwYXJzZXIuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2VsZnBhcnNlci5oCTIwMTEtMDctMTYgMTg6NTc6NDEuMDAwMDAwMDAwIC0wNzAwCisrKysgZ2l0L2VsZnBhcnNlci5oCTIwMTEtMDctMTYgMjA6Mjg6NTQuNzMzODI5ODk1IC0wNzAwCitAQCAtMTcsNiArMTcsMTAgQEAKKyAgKi8KKyAjaW5jbHVkZSA8Z2xpYi5oPgorIAorKyNpZm5kZWYgTlRfR05VX0JVSUxEX0lECisrI2RlZmluZSBOVF9HTlVfQlVJTERfSUQgMworKyNlbmRpZgorKworIHR5cGVkZWYgc3RydWN0IEVsZlN5bSBFbGZTeW07CisgdHlwZWRlZiBzdHJ1Y3QgRWxmUGFyc2VyIEVsZlBhcnNlcjsKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXNwcm9mL2ZpbGVzL3JtYi1hcm0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUzYWM2NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItYXJtLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnaXQvdXRpbC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvdXRpbC5oCTIwMTAtMTItMDcgMjI6NDE6NTcuMTU2MjQzMDAxIC0wNjAwCisrKysgZ2l0L3V0aWwuaAkyMDEwLTEyLTA3IDIyOjQzOjQ3LjYxNjI0MzAwMiAtMDYwMAorQEAgLTM3LDQgKzM3LDEzIEBACisgI2RlZmluZSBjcHVfcmVsYXgoKSAgICAgYXNtIHZvbGF0aWxlKCIiIDo6OiAibWVtb3J5Iik7CisgI2VuZGlmCisgCisrI2lmZGVmIF9fYXJtX18KKysvKgorKyAqIFVzZSB0aGUgX19rdXNlcl9tZW1vcnlfYmFycmllciBoZWxwZXIgaW4gdGhlIENQVSBoZWxwZXIgcGFnZS4gU2VlCisrICogYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBpbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgZGV0YWlscy4KKysgKi8KKysjZGVmaW5lIHJtYigpCQkoKHZvaWQoKikodm9pZCkpMHhmZmZmMGZhMCkoKQorKyNkZWZpbmUgY3B1X3JlbGF4KCkJYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrCisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2YvZmlsZXMvcm1iLW1pcHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA1NWI4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9maWxlcy9ybWItbWlwcy5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdpdC91dGlsLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy91dGlsLmgJMjAxMC0xMi0wOCAwMToyMjo0NC40ODYyNDMwMDEgLTA2MDAKKysrKyBnaXQvdXRpbC5oCTIwMTAtMTItMDggMDE6MjM6MjcuODM2MjQzMDAxIC0wNjAwCitAQCAtMzcsNCArMzcsMTUgQEAKKyAjZGVmaW5lIGNwdV9yZWxheCgpICAgICBhc20gdm9sYXRpbGUoIiIgOjo6ICJtZW1vcnkiKTsKKyAjZW5kaWYKKyAKKysjaWZkZWYgX19taXBzX18KKysjZGVmaW5lIHJtYigpCQlhc20gdm9sYXRpbGUoCQkJCQlcCisrCQkJCSIuc2V0CW1pcHMyXG5cdCIJCQlcCisrCQkJCSJzeW5jXG5cdCIJCQkJXAorKwkJCQkiLnNldAltaXBzMCIJCQkJXAorKwkJCQk6IC8qIG5vIG91dHB1dCAqLwkJCVwKKysJCQkJOiAvKiBubyBpbnB1dCAqLwkJCVwKKysJCQkJOiAibWVtb3J5IikKKysjZGVmaW5lIGNwdV9yZWxheCgpCWFzbSB2b2xhdGlsZSgiIiA6OjogIm1lbW9yeSIpCisrI2VuZGlmCisrCisgI2VuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3Byb2Yvc3lzcHJvZl9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTljM2UxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzcHJvZi9zeXNwcm9mX2dpdC5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlN5c3RlbS13aWRlIFBlcmZvcm1hbmNlIFByb2ZpbGVyIGZvciBMaW51eCIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiIKKworREVQRU5EUyA9ICJndGsrIGxpYmdsYWRlIgorCitTUkNSRVYgPSAiY2Q0NGVlNjY0NGMzNjQxNTA3ZmI1M2I4YTJhNjkxMzdmMjk3MTIxOSIKK1BWID0gIjEuMi4wK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC5nbm9tZS5vcmcvc3lzcHJvZiBcCisgICAgICAgICAgIGZpbGU6Ly9kZWZpbmUtTlRfR05VX0JVSUxEX0lELnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklfYXBwZW5kX2FybSAgPSAiIGZpbGU6Ly9ybWItYXJtLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfYXJtZWIgID0gIiBmaWxlOi8vcm1iLWFybS5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHMgPSAiIGZpbGU6Ly9ybWItbWlwcy5wYXRjaCIKK1NSQ19VUklfYXBwZW5kX21pcHM2NCA9ICIgZmlsZTovL3JtYi1taXBzLnBhdGNoIgorU1JDX1VSSV9hcHBlbmRfbWlwczY0bjMyID0gIiBmaWxlOi8vcm1iLW1pcHMucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIFdlIGRvIG5vdCB5ZXQgd29yayBmb3IgYWFyY2g2NC4KKyMKK0NPTVBBVElCTEVfSE9TVCA9ICJeKD8hYWFyY2g2NCkuKiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwLXVwcm9iZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ODkwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAtdXByb2Jlc19naXQuYmIKQEAgLTAsMCArMSw0NCBAQAorU1VNTUFSWSA9ICJVUHJvYmVzIGtlcm5lbCBtb2R1bGUgZm9yIFN5c3RlbVRhcCIKKworcmVxdWlyZSBzeXN0ZW10YXBfZ2l0LmluYworCitERVBFTkRTID0gInN5c3RlbXRhcCB2aXJ0dWFsL2tlcm5lbCIKKworUFIgPSAicjEiCisKKyMgT24gc3lzdGVtcyB3aXRob3V0IENPTkZJR19VVFJBQ0UsIHRoaXMgcGFja2FnZSBpcyBlbXB0eS4KK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK2luaGVyaXQgbW9kdWxlLWJhc2UgZ2V0dGV4dAorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9zeXN0ZW10YXA6IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9zeXN0ZW10YXAvcnVudGltZS91cHJvYmVzIgorCitFWFRSQV9PRU1BS0UgPSAiIgorCisjIENvbXBpbGUgYW5kIGluc3RhbGwgdGhlIHVwcm9iZXMga2VybmVsIG1vZHVsZSBvbiBtYWNoaW5lcyB3aXRoIHV0cmFjZQorIyBzdXBwb3J0LiAgTm90ZSB0aGF0IHN0YXBydW4gZXhwZWN0cyBpdCBpbiB0aGUgc3lzdGVtdGFwL3J1bnRpbWUgZGlyZWN0b3J5LAorIyBub3QgaW4gL2xpYi9tb2R1bGVzLgorZG9fY29tcGlsZSgpIHsKKwlpZiBncmVwIC1xICJDT05GSUdfVVRSQUNFPXkiICR7U1RBR0lOR19LRVJORUxfQlVJTERESVJ9Ly5jb25maWcKKwl0aGVuCisJCXVuc2V0IENGTEFHUyBDUFBGTEFHUyBDWFhGTEFHUyBMREZMQUdTIENDIExEIENQUAorCQlvZV9ydW5tYWtlIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkJCSAgIC1DICR7U1RBR0lOR19LRVJORUxfRElSfSBzY3JpcHRzCisJCW9lX3J1bm1ha2UgS0RJUj0ke1NUQUdJTkdfS0VSTkVMX0RJUn0gICBcCisJCQkgICBNPSIke1N9L3J1bnRpbWUvdXByb2Jlcy8iIFwKKwkJCSAgIENDPSIke0tFUk5FTF9DQ30iIExEPSIke0tFUk5FTF9MRH0iIFwKKwkJCSAgIEFSPSIke0tFUk5FTF9BUn0iIFwKKwkJCSAgIC1DICIke1N9L3J1bnRpbWUvdXByb2Jlcy8iCisJZmkKK30KKworZG9faW5zdGFsbCgpIHsKKwlpZiBbIC1lICIke1N9L3J1bnRpbWUvdXByb2Jlcy91cHJvYmVzLmtvIiBdCisJdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke2RhdGFkaXJ9L3N5c3RlbXRhcC9ydW50aW1lL3Vwcm9iZXMvCisJCWluc3RhbGwgLW0gMDY0NCAke1N9L3J1bnRpbWUvdXByb2Jlcy91cHJvYmVzLmtvICR7RH0ke2RhdGFkaXJ9L3N5c3RlbXRhcC9ydW50aW1lL3Vwcm9iZXMvCisJZmkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2NvbmZpZ3VyZS1hbGxvdy10by1kaXNhYmxlLWxpYnZpcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRmMmZiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJ2aXJ0LnBhdGNoCkBAIC0wLDAgKzEsMzkgQEAKK0Zyb20gNWViMTBkOTBhZjkxNzhlZGI2NWU2MDkxYWU5MzlkMWI1YjE5YmI3OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogVHVlLCAyMyBTZXAgMjAxNCAwNDo0NzoxMCAtMDQwMAorU3ViamVjdDogW1BBVENIXSBzeXN0ZW10YXA6IGFsbG93IHRvIGRpc2FibGUgbGlidmlydAorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogV2Vuem9uZyBGYW4gPHdlbnpvbmcuZmFuQHdpbmRyaXZlci5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDEzICsrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBhNjMxYWU3Li5jYjQ4ODViIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MjUsMTAgKzUyNSwxNSBAQCBkbmwgQ2hlY2sgZm9yIHRoZSBsaWJ2aXJ0IGFuZCBsaWJ4bWwyIGRldmVsIHBhY2thZ2VzCisgCisgZG5sIFdlIHJlcXVpcmUgbGlidmlydCA+PSAxLjAuMiBiZWNhdXNlIHN0YXB2aXJ0IHJlbGllcyBvbiB0aGUKKyBkbmwgdmlyRG9tYWluT3BlbkNoYW5uZWwgZnVuY3Rpb24sIHdoaWNoIHdhcyBpbXBsZW1lbnRlZCBpbiAxLjAuMi4KKy1QS0dfQ0hFQ0tfTU9EVUxFUyhbbGlidmlydF0sIFtsaWJ2aXJ0ID49IDEuMC4yXSwgWworLSAgIGhhdmVfbGlidmlydD15ZXMKKy0gICBBQ19ERUZJTkUoW0hBVkVfTElCVklSVF0sWzFdLFtEZWZpbmUgdG8gMSBpZiBsaWJ2aXJ0IGRldmVsb3BtZW50IGxpYnJhcmllcyBhcmUgaW5zdGFsbGVkXSkKKy0gICBdLCBbaGF2ZV9saWJ2aXJ0PW5vXSkKKytBQ19BUkdfRU5BQkxFKFtsaWJ2aXJ0XSwKKysgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidmlydF0sIFtEbyBub3QgdXNlIGxpYnZpcnQgZXZlbiBpZiBwcmVzZW50XSkpCisrCisraWYgdGVzdCAiJGVuYWJsZV9saWJ2aXJ0IiAhPSBubzsgdGhlbgorKyAgUEtHX0NIRUNLX01PRFVMRVMoW2xpYnZpcnRdLCBbbGlidmlydCA+PSAxLjAuMl0sIFsKKysgICAgIGhhdmVfbGlidmlydD15ZXMKKysgICAgIEFDX0RFRklORShbSEFWRV9MSUJWSVJUXSxbMV0sW0RlZmluZSB0byAxIGlmIGxpYnZpcnQgZGV2ZWxvcG1lbnQgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWRdKQorKyAgICAgXSwgW2hhdmVfbGlidmlydD1ub10pCisrZmkKKyBBTV9DT05ESVRJT05BTChbSEFWRV9MSUJWSVJUXSwgW3Rlc3QgIiR7aGF2ZV9saWJ2aXJ0fSIgPSAieWVzIl0pCisgUEtHX0NIRUNLX01PRFVMRVMoW2xpYnhtbDJdLCBbbGlieG1sLTIuMF0sIFsKKyAgICBoYXZlX2xpYnhtbDI9eWVzCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL2RvY3Byb2MtYnVpbGQtZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTg5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvZG9jcHJvYy1idWlsZC1maXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBUb20gWmFudXNzaSA8dG9tLnphbnVzc2lAaW50ZWwuY29tPgorCitJbmRleDogZ2l0L2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL2RvYy9TeXN0ZW1UYXBfVGFwc2V0X1JlZmVyZW5jZS9NYWtlZmlsZS5hbQkyMDEyLTA0LTEzIDA4OjQzOjQ2LjI2MzMzOTAwMyAtMDUwMAorKysrIGdpdC9kb2MvU3lzdGVtVGFwX1RhcHNldF9SZWZlcmVuY2UvTWFrZWZpbGUuYW0JMjAxMi0wNC0xMyAwOTozMToyMi40NzAwODM5MTUgLTA1MDAKK0BAIC0yNyw2ICsyNywxMCBAQAorIG5vaW5zdF9QUk9HUkFNUyA9IGRvY3Byb2MKKyBTUkNUUkVFPSQoYWJzX3RvcF9zcmNkaXIpLworIERPQ1BST0M9JChhYnNfYnVpbGRkaXIpL2RvY3Byb2MKKytkb2Nwcm9jX0xJTksgPSAkKENDX0ZPUl9CVUlMRCkgJChMREZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAKKysKKytkb2Nwcm9jLm86ICQoc3JjZGlyKS9kb2Nwcm9jLmMKKysJJChDQ19GT1JfQlVJTEQpIC1jICQoQ0ZMQUdTX0ZPUl9CVUlMRCkgLW8gJEAgJChzcmNkaXIpL2RvY3Byb2MuYworIAorIGFsbDogJChQREZET0NTKSBzdGFtcC1odG1sZG9jcyBzdGFtcC1tYW5kb2NzCisgdGFwc2V0cy54bWw6IGRvY3Byb2MgJChzaGVsbCBmaW5kICQoU1JDVFJFRSkvdGFwc2V0IC1uYW1lICcqLnN0cCcpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODhjZGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK0luZGV4OiBnaXQvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ2l0L2NvbmZpZ3VyZS5hYworQEAgLTE5LDcgKzE5LDYgQEAgQUNfUFJPR19MTl9TCisgQUNfUFJPR19DQworIEFDX1BST0dfQ1hYCisgQUNfUFJPR19DUFAKKy1BTV9QUk9HX0NDX1NUREMKKyBBTV9QUk9HX0NDX0NfTworIEFDX1BST0dfUkFOTElCCisgQUNfT0JKRVhUCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC9zeXN0ZW1fbWFwX2xvY2F0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxM2FmNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXAvc3lzdGVtX21hcF9sb2NhdGlvbi5wYXRjaApAQCAtMCwwICsxLDIzIEBACitzeXN0ZW10YXA6IENyb3NzIGNvbXBpbGF0aW9uIGZpeAorCitUaGlzIGlzIGEgY3Jvc3MgY29tcGlsYXRpb24gZml4LiBJdCBhbGxvd3Mgc3lzdGVtdGFwIHRvIGZpbmQKK3RoZSBrZXJuZWwgbWFwIGZpbGUgaW4gdGhlIHJpZ2h0IHBsYWNlLCBpLmUuIGluIHRoZSBrZXJuZWwgYnVpbGQgdHJlZS4KK1dpdGhvdXQgdGhpcyBmaXggaXQgdGFrZXMgYSBtYXAgZmlsZSBmcm9tIHRoZSBidWlsZCBob3N0LCBpZiBhdmFpbGFibGUuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNaWtoYWlsIER1cm5ldiA8bWlraGFpbF9kdXJuZXZAbWVudG9yLmNvbT4KKworSW5kZXg6IGdpdC9zZXNzaW9uLmN4eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdpdC5vcmlnL3Nlc3Npb24uY3h4CisrKysgZ2l0L3Nlc3Npb24uY3h4CitAQCAtMTYzNCw3ICsxNjM0LDcgQEAgc3lzdGVtdGFwX3Nlc3Npb246OnBhcnNlX2tlcm5lbF9mdW5jdGlvbgorIAljbG9nIDw8IF9GKCJLZXJuZWwgc3ltYm9sIHRhYmxlICVzIHVuYXZhaWxhYmxlLCAoJXMpIiwKKyAJCSAgIHN5c3RlbV9tYXBfcGF0aC5jX3N0cigpLCBzdHJlcnJvcihlcnJubykpIDw8IGVuZGw7CisgCistICAgICAgc3lzdGVtX21hcF9wYXRoID0gIi9ib290L1N5c3RlbS5tYXAtIiArIGtlcm5lbF9yZWxlYXNlOworKyAgICAgIHN5c3RlbV9tYXBfcGF0aCA9IGtlcm5lbF9idWlsZF90cmVlICsgIi9TeXN0ZW0ubWFwLSIgKyBrZXJuZWxfcmVsZWFzZTsKKyAgICAgICBzeXN0ZW1fbWFwLmNsZWFyKCk7CisgICAgICAgc3lzdGVtX21hcC5vcGVuKHN5c3RlbV9tYXBfcGF0aC5jX3N0cigpLCBpZnN0cmVhbTo6aW4pOworICAgICAgIGlmICghIHN5c3RlbV9tYXAuaXNfb3BlbigpKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwL3gzMl9hYmlfdGltZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC94MzJfYWJpX3RpbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhhN2VhZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcC94MzJfYWJpX3RpbWUucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRml4IHRpbWVfdCBwcmludCBiZWNhdXNlIGluIHgzMiBBQkkgaXMgbG9uZyBsb25nIGludCBpbnN0ZWFkIG9mIGxvbmcgaW50LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogQW7DrWJhbCBMaW3Ds24gPGFuaWJhbC5saW1vbkBsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jYWNoZS5jeHggYi9jYWNoZS5jeHgKK2luZGV4IDM1NDZiMzAuLjE5Yzc3Y2EgMTAwNjQ0CistLS0gYS9jYWNoZS5jeHgKKysrKyBiL2NhY2hlLmN4eAorQEAgLTI5NCw3ICsyOTQsMTEgQEAgY2xlYW5fY2FjaGUoc3lzdGVtdGFwX3Nlc3Npb24mIHMpCisgICAgICAgICB7CisgICAgICAgICAgIC8vaW50ZXJ2YWwgbm90IHBhc3NlZCwgZG9uJ3QgY29udGludWUKKyAgICAgICAgICAgaWYgKHMudmVyYm9zZSA+IDEpCisrI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKyAgICAgICAgICAgIGNsb2cgPDwgX0YoIkNhY2hlIGNsZWFuaW5nIHNraXBwZWQsIGludGVydmFsIG5vdCByZWFjaGVkICVsbGQgcyAvICVsdSBzLiIsCisrI2Vsc2UKKyAgICAgICAgICAgICBjbG9nIDw8IF9GKCJDYWNoZSBjbGVhbmluZyBza2lwcGVkLCBpbnRlcnZhbCBub3QgcmVhY2hlZCAlbHUgcyAvICVsdSBzLiIsCisrI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF90aW1lLnR2X3NlYy1zYi5zdF9tdGltZSksIGNhY2hlX2NsZWFuX2ludGVydmFsKSAgPDwgZW5kbDsKKyAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQorQEAgLTMwMiw3ICszMDYsMTEgQEAgY2xlYW5fY2FjaGUoc3lzdGVtdGFwX3Nlc3Npb24mIHMpCisgICAgICAgICB7CisgICAgICAgICAgIC8vaW50ZXJ2YWwgcmVhY2hlZCwgY29udGludWUKKyAgICAgICAgICAgaWYgKHMudmVyYm9zZSA+IDEpCisrI2lmIGRlZmluZWQoX194ODZfNjRfXykgJiYgZGVmaW5lZCAoX19JTFAzMl9fKQorKyAgICAgICAgICAgIGNsb2cgPDwgX0YoIkNsZWFuaW5nIGNhY2hlLCBpbnRlcnZhbCByZWFjaGVkICVsbGQgcyA+ICVsdSBzLiIsCisrI2Vsc2UKKyAgICAgICAgICAgICBjbG9nIDw8IF9GKCJDbGVhbmluZyBjYWNoZSwgaW50ZXJ2YWwgcmVhY2hlZCAlbHUgcyA+ICVsdSBzLiIsCisrI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF90aW1lLnR2X3NlYy1zYi5zdF9tdGltZSksIGNhY2hlX2NsZWFuX2ludGVydmFsKSAgPDwgZW5kbDsKKyAgICAgICAgIH0KKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvc3lzdGVtdGFwL3N5c3RlbXRhcF9naXQuYmIgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZGQ0MmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiU2NyaXB0LWRpcmVjdGVkIGR5bmFtaWMgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgYW5hbHlzaXMgdG9vbCBmb3IgTGludXgiCisKK3JlcXVpcmUgc3lzdGVtdGFwX2dpdC5pbmMKKworREVQRU5EUyA9ICJlbGZ1dGlscyBzcWxpdGUzIHN5c3RlbXRhcC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICJlbGZ1dGlscy1uYXRpdmUgc3FsaXRlMy1uYXRpdmUgZ2V0dGV4dC1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZXNkayA9ICJuYXRpdmVzZGstZWxmdXRpbHMgbmF0aXZlc2RrLXNxbGl0ZTMgbmF0aXZlc2RrLWdldHRleHQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJweXRob24gYmFzaCIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZSArPSAicHl0aG9uLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLW5hdGl2ZXNkayArPSAicHl0aG9uLW5hdGl2ZSIKKworRVhUUkFfT0VDT05GICs9ICItLXdpdGgtbGliZWxmPSR7U1RBR0lOR19ESVJfVEFSR0VUfSAtLXdpdGhvdXQtcnBtIFwKKyAgICAgICAgICAgIC0td2l0aG91dC1uc3MgLS13aXRob3V0LWF2YWhpIC0td2l0aG91dC1keW5pbnN0IFwKKyAgICAgICAgICAgIC0tZGlzYWJsZS1zZXJ2ZXIgLS1kaXNhYmxlLWdyYXBoZXIgLS1lbmFibGUtcHJvbG9ndWVzIFwKKyAgICAgICAgICAgIGFjX2N2X3Byb2dfaGF2ZV9qYXZhYz1ubyBcCisgICAgICAgICAgICBhY19jdl9wcm9nX2hhdmVfamFyPW5vICIKKworU1RBUF9ET0NTID89ICItLWRpc2FibGUtZG9jcyAtLWRpc2FibGUtcHVibGljYW4gLS1kaXNhYmxlLXJlZmRvY3MiCisKK0VYVFJBX09FQ09ORiArPSAiJHtTVEFQX0RPQ1N9ICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbbGlidmlydF0gPSAiLS1lbmFibGUtbGlidmlydCwtLWRpc2FibGUtbGlidmlydCxsaWJ2aXJ0IgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9zeXN0ZW10YXAvLmRlYnVnIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL3N5c3RlbXRhcC9zeXN0ZW10YXBfZ2l0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWE1NzhkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC9zeXN0ZW10YXAvc3lzdGVtdGFwX2dpdC5pbmMKQEAgLTAsMCArMSwyOCBAQAorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorU1JDUkVWID0gImJmMTYyNjY3ODJlMWYyNTg4YjUxOWE1MGQ5Njg0Mjc5ZDRlMjEwMzYiCitQViA9ICIyLjcrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vc291cmNld2FyZS5vcmcvZ2l0L3N5c3RlbXRhcC5naXQgXAorICAgICAgICAgICBmaWxlOi8vZG9jcHJvYy1idWlsZC1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3N5c3RlbV9tYXBfbG9jYXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlidmlydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly94MzJfYWJpX3RpbWUucGF0Y2ggXAorICAgICAgICAgICIKKworIyBzeXN0ZW10YXAgZG9lc24ndCBzdXBwb3J0IG1pcHMKK0NPTVBBVElCTEVfSE9TVCA9ICcoeDg2XzY0fGkuODZ8cG93ZXJwY3xhcm18YWFyY2g2NCkuKi1saW51eCcKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBzeXN0ZW10YXAgY2FuJ3QgYmUgYnVpbHQgd2l0aG91dCBvcHRpbWl6YXRpb24sIGlmIHNvbWVvbmUgdHJpZXMgdG8gY29tcGlsZSBhbgorIyBlbnRpcmUgaW1hZ2UgYXMgLU8wLCB3ZSBvdmVycmlkZSBpdCB3aXRoIC1PMiBoZXJlIGFuZCBnaXZlIGEgbm90ZSBhYm91dCBpdC4KK2RlZiBnZXRfb3B0aW1pemF0aW9uKGQpOgorICAgIHNlbGVjdGVkX29wdGltaXphdGlvbiA9IGQuZ2V0VmFyKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCBUcnVlKQorICAgIGlmIGJiLnV0aWxzLmNvbnRhaW5zKCJTRUxFQ1RFRF9PUFRJTUlaQVRJT04iLCAiLU8wIiwgIngiLCAiIiwgZCkgPT0gIngiOgorICAgICAgICBiYi5ub3RlKCJzeXN0ZW10YXAgY2FuJ3QgYmUgYnVpbHQgd2l0aCAtTzAsIC1PMiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4iKQorICAgICAgICByZXR1cm4gc2VsZWN0ZWRfb3B0aW1pemF0aW9uLnJlcGxhY2UoIi1PMCIsICItTzIiKQorICAgIHJldHVybiBzZWxlY3RlZF9vcHRpbWl6YXRpb24KKworU0VMRUNURURfT1BUSU1JWkFUSU9OIDo9ICIke0BnZXRfb3B0aW1pemF0aW9uKGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL2tlcm5lbHNoYXJrX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGVjY2FlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQva2VybmVsc2hhcmtfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiR3JhcGhpY2FsIHRyYWNlIHZpZXdlciBmb3IgRnRyYWNlIgorTElDRU5TRSA9ICJHUEx2MiIKKworcmVxdWlyZSB0cmFjZS1jbWQuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2tlcm5lbC1zaGFyay5jO2JlZ2lubGluZT02O2VuZGxpbmU9ODttZDU9MmMyMmM5NjVhNjQ5ZGRkNzk3M2Q3OTEzYzU2MzRhNWUiCisKK0RFUEVORFMgPSAiZ3RrKyBsaWJ4bWwyIgorUkRFUEVORFNfJHtQTn0gPSAidHJhY2UtY21kIgorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdwcmVmaXg9JHtwcmVmaXh9JyBcCisgICAgJ2JpbmRpcl9yZWxhdGl2ZT0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgYmluZGlyKX0nIFwKKyAgICAnbGliZGlyPSR7QG9lLnBhdGgucmVsYXRpdmUocHJlZml4LCBsaWJkaXIpfScgXAorICAgIE5PX1BZVEhPTj0xIFwKKyAgICBndWkgXAorIgorZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgIyBNYWtlIHN1cmUgdGhlIHJlY29tcGlsZSBpcyBPSworICAgIHJtIC1mICR7Qn0vLiouZAorfQorCitkb19pbnN0YWxsKCkgeworICAgIG9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbF9ndWkKKyAgICBybSAke0R9JHtiaW5kaXJ9L3RyYWNlLWNtZAorICAgIHJtIC1yZiAke0R9JHtsaWJkaXJ9L3RyYWNlLWNtZAorICAgIHJtZGlyICR7RH0ke2xpYmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC5pbmMgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZTRhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMta2VybmVsL3RyYWNlLWNtZC90cmFjZS1jbWQuaW5jCkBAIC0wLDAgKzEsMTIgQEAKK1NSQ1JFViA9ICIwODEzMzM1ZDJlNDkyOTFlN2FiNmE0MzY1Y2VjMmJhYTA1ODEzZWRhIgorUFYgPSAiMi41LjMrZ2l0JHtTUkNQVn0iCisKK2luaGVyaXQgcGtnY29uZmlnCisKK0ZJTEVTRVhUUkFQQVRIUyA9LiAiJHtGSUxFX0RJUk5BTUV9L3RyYWNlLWNtZDoiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Jvc3RlZHQvdHJhY2UtY21kLmdpdDticmFuY2g9dHJhY2UtY21kLXN0YWJsZS12Mi41IFwKKyAgICAgICAgICAgZmlsZTovL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaCBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZC9ibGt0cmFjZS1hcGktY29tcGF0aWJpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjBkYjZhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kL2Jsa3RyYWNlLWFwaS1jb21wYXRpYmlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK3RyYWNlLWNtZDogQWRkIGJsa3RyYWNlX2FwaSBjb21wYXRpYmlsaXR5IGZvciBUQ19CQVJSSUVSCisKK05ld2VyIGtlcm5lbHMgcmVwbGFjZSBUQ19CQVJSSUVSIHdpdGggVENfRkxVU0guIEVuc3VyZSB0cmFjZS1jbWQKK2NhbiBidWlsZCByZWdhcmRsZXNzIG9mIHRoZSBsaW51eC1rZXJuZWwtaGVhZGVycyB2ZXJzaW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW1N0b3AgZ2FwXQorCitTaWduZWQtb2ZmLWJ5OiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL3BsdWdpbl9ibGsuYyBiL3BsdWdpbl9ibGsuYworaW5kZXggOTMyN2IxNy4uYzhlNWUxYyAxMDA2NDQKKy0tLSBhL3BsdWdpbl9ibGsuYworKysrIGIvcGx1Z2luX2Jsay5jCitAQCAtNDQsNiArNDQsMTUgQEAgc3RydWN0IGJsa19kYXRhIHsKKyAJdW5zaWduZWQgc2hvcnQJCXBkdV9sZW47CisgfTsKKyAKKysvKgorKyAqIE5ld2VyIGtlcm5lbHMgZG9uJ3QgZGVmaW5lIEJMS19UQ19CQVJSSUVSIGFuZCBoYXZlIHJlcGxhY2VkIGl0IHdpdGgKKysgKiBCTEtfVENfRkxVU0guIEluIHRoaXMgY2FzZSwgZGVmaW5lIGl0IGhlcmUgYW5kIHJlcG9ydCBGTFVTSEVTIGFzIEJBUlJJRVJTIGFzCisrICogYSB3b3JrYXJvdW5kLCBhcyBkZXNjcmliZWQgaW46CisrICogaHR0cDovL2dpdC5rZXJuZWwub3JnLz9wPWxpbnV4L2tlcm5lbC9naXQvdG9ydmFsZHMvbGludXguZ2l0O2E9Y29tbWl0O2g9YzA5YzQ3Y2FlZGM5ODU0ZDU5Mzc4ZDZlMzRjOTg5ZTUxY2ZkZDJiNAorKyAqLworKyNpZm5kZWYgQkxLX1RDX0JBUlJJRVIKKysjZGVmaW5lIEJMS19UQ19CQVJSSUVSIDE8PDIKKysjZW5kaWYKKyBzdGF0aWMgdm9pZCBmaWxsX3J3YnMoY2hhciAqcndicywgaW50IGFjdGlvbiwgdW5zaWduZWQgaW50IGJ5dGVzKQorIHsKKyAJaW50IGkgPSAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWtlcm5lbC90cmFjZS1jbWQvdHJhY2UtY21kX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhYzc4OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1rZXJuZWwvdHJhY2UtY21kL3RyYWNlLWNtZF9naXQuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJVc2VyIGludGVyZmFjZSB0byBGdHJhY2UiCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCisKK3JlcXVpcmUgdHJhY2UtY21kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03NTE0MTkyNjBhYTk1NDQ5OWY3YWJhYWJhYTg4MmJiZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZS1jbWQuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTg7bWQ1PTJjMjJjOTY1YTY0OWRkZDc5NzNkNzkxM2M1NjM0YTVlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1iYmI0NjEyMTFhMzNiMTM0ZDQyZWQ1ZWU4MDJiMzdmZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly90cmFjZS1pbnB1dC5jO2JlZ2lubGluZT01O2VuZGxpbmU9ODttZDU9M2VjODJmNDNiYmUwY2ZiNTk1MWZmNDE0ZWY0ZDQ0ZDAgXAorIgorCitFWFRSQV9PRU1BS0UgPSAiXAorICAgICdwcmVmaXg9JHtwcmVmaXh9JyBcCisgICAgJ2JpbmRpcj0ke2JpbmRpcn0nIFwKKyAgICAnbWFuX2Rpcj0ke21hbmRpcn0nIFwKKyAgICAnaHRtbF9pbnN0YWxsPSR7ZGF0YWRpcn0va2VybmVsc2hhcmsvaHRtbCcgXAorICAgICdpbWdfaW5zdGFsbD0ke2RhdGFkaXJ9L2tlcm5lbHNoYXJrL2h0bWwvaW1hZ2VzJyBcCisgICAgXAorICAgICdiaW5kaXJfcmVsYXRpdmU9JHtAb2UucGF0aC5yZWxhdGl2ZShwcmVmaXgsIGJpbmRpcil9JyBcCisgICAgJ2xpYmRpcj0ke0BvZS5wYXRoLnJlbGF0aXZlKHByZWZpeCwgbGliZGlyKX0nIFwKKyAgICBcCisgICAgTk9fUFlUSE9OPTEgXAorIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS90cmFjZS1jbWQvcGx1Z2lucy8uZGVidWciCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcmVjb21waWxlIGlzIE9LCisgICAgcm0gLWYgJHtCfS8uKi5kCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgREVTVERJUj0iJHtEfSIgaW5zdGFsbAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbHNiNC9saWJwbmcvbGlicG5nMTJfMS4yLjUzLmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvbGlicG5nL2xpYnBuZzEyXzEuMi41My5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjg2MWE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvbGlicG5nL2xpYnBuZzEyXzEuMi41My5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIlBORyBpbWFnZSBmb3JtYXQgZGVjb2RpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlicG5nLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxpYnBuZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWJkMmE3YTEzMzU1ZmNjYTkyYWQ4M2JkZjdlMjk2MDExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2JlZ2lubGluZT0zMjI7ZW5kbGluZT00MzY7bWQ1PWNhZjllZTU0MTIzNGM2NjNhZWVjZGNmZWYyZjc5YWUxIgorREVQRU5EUyA9ICJ6bGliIgorCitQTiA9ICJsaWJwbmcxMiIKK1MgPSAiJHtXT1JLRElSfS9saWJwbmctJHtQVn0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvbGlicG5nL2xpYnBuZzEyLyR7UFZ9L2xpYnBuZy0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3ZDE4YTc0ZTZmZDIwMjlhZWU3NmNjZDAwZTAwYTllNiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDVlNDlmNjg5ZTc0NTFiZDU3NjU2OWU2YTM0NGY3ZTBkMTFjMDJlY2JiNzk3ZjRkYTBlNDMxNTI2NzY1YzBhIgorCitCSU5DT05GSUdfR0xPQiA9ICIke1BOfS1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZyBwa2djb25maWcKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBUaGUgZm9sbG93IGxpbmsgZmlsZXMgbGluayB0byBjb3JyZXNwb25kaW5nIHBuZzEyKi5oIGFuZCBsaWJwbmcxMiogZmlsZXMKKwkjIFRoZXkgY29uZmxpY3Qgd2l0aCBoaWdoZXIgdmVyaXNvbiwgc28gZHJvcCB0aGVtCisJdW5saW5rICR7RH0vJHtpbmNsdWRlZGlyfS9wbmcuaAorCXVubGluayAke0R9LyR7aW5jbHVkZWRpcn0vcG5nY29uZi5oCisKKwl1bmxpbmsgJHtEfS8ke2xpYmRpcn0vbGlicG5nLmxhCisJdW5saW5rICR7RH0vJHtsaWJkaXJ9L2xpYnBuZy5zbworCXVubGluayAke0R9LyR7bGliZGlyfS9saWJwbmcuYQorCXVubGluayAke0R9LyR7bGliZGlyfS9wa2djb25maWcvbGlicG5nLnBjCisKKwl1bmxpbmsgJHtEfS8ke2JpbmRpcn0vbGlicG5nLWNvbmZpZworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJjbGFzcy1pc2EtcGVybF8wLjM2LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5Mzg0MWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmNsYXNzLWlzYS1wZXJsXzAuMzYuYmIKQEAgLTAsMCArMSwzMSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSBmb3IgcmVwb3J0aW5nIHRoZSBzZWFyY2ggcGF0aCBmb3IgYSBjbGFzcydzIElTQSB0cmVlIgorREVTQ1JJUFRJT04gPSAiU3VwcG9zZSB5b3UgaGF2ZSBhIGNsYXNzIChsaWtlIEZvb2Q6OkZpc2g6OkZpc2hzdGljaykgdGhhdCBpcyBkZXJpdmVkLCBcCit2aWEgaXRzIEBJU0EsIGZyb20gb25lIG9yIG1vcmUgc3VwZXJjbGFzc2VzIChhcyBGb29kOjpGaXNoOjpGaXNoc3RpY2sgaXMgZnJvbSBGb29kOjpGaXNoLFwKK0xpZmU6OkZ1bmd1cywgYW5kIENoZW1pY2FscyksIGFuZCBzb21lIG9mIHRob3NlIHN1cGVyY2xhc3NlcyBtYXkgdGhlbXNlbHZlcyBlYWNoIGJlXAorZGVyaXZlZCwgdmlhIGl0cyBASVNBLCBmcm9tIG9uZSBvciBtb3JlIHN1cGVyY2xhc3NlcyAoYXMgYWJvdmUpLlwKK1wKK1doZW4sIHRoZW4sIHlvdSBjYWxsIGEgbWV0aG9kIGluIHRoYXQgY2xhc3MgKCRmaXNoc3RpY2stPmNhbG9yaWVzKSwgUGVybCBmaXJzdCBzZWFyY2hlc1wKK3RoZXJlIGZvciB0aGF0IG1ldGhvZCwgYnV0IGlmIGl0J3Mgbm90IHRoZXJlLCBpdCBnb2VzIHNlYXJjaGluZyBpbiBpdHMgc3VwZXJjbGFzc2VzLCBhbmRcCitzbyBvbiwgaW4gYSBkZXB0aC1maXJzdCAob3IgbWF5YmUgImhlaWdodC1maXJzdCIgaXMgdGhlIHdvcmQpIHNlYXJjaC4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsXAoraXQnZCBmaXJzdCBsb29rIGluIEZvb2Q6OkZpc2gsIHRoZW4gRm9vZCwgdGhlbiBNYXR0ZXIsIHRoZW4gTGlmZTo6RnVuZ3VzLCB0aGVuIExpZmUsIHRoZW5cCitDaGVtaWNhbHMuXAorXAorVGhpcyBsaWJyYXJ5LCBDbGFzczo6SVNBLCBwcm92aWRlcyBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdGhhdCBsaXN0IC0tIHRoZSBsaXN0XAorKGluIG9yZGVyKSBvZiBuYW1lcyBvZiBjbGFzc2VzIFBlcmwgd291bGQgc2VhcmNoIHRvIGZpbmQgYSBtZXRob2QsIHdpdGggbm8gZHVwbGljYXRlcy4iCisKK0hPTUVQQUdFID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvZGlzdC9DbGFzcy1JU0EvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0xMDc7ZW5kbGluZT0xMTE7bWQ1PTZhNWM2ODQyYTYzY2ZlNGRhYjFmNjZlMjM1MGU0ZDI1IgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL1MvU00vU01VRUxMRVIvQ2xhc3MtSVNBLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjNhMmFkMjAzYzhkYzg3ZDZjOWRlMTYyMTVkMDBhZjQ3IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg4MTZmMzRlOWEzOGU4NDlhMTBkZjc1NjAzMGRjY2Y5ZmUwNjFhMTk2YzExYWMzZmFhZmQ3MTEzYzkyOWI5NjQiCisKK1MgPSAiJHtXT1JLRElSfS9DbGFzcy1JU0EtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZHVtcHZhbHVlLXBlcmxfMS4xNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTc0NjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJkdW1wdmFsdWUtcGVybF8xLjE3LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgZm9yIHByb3ZpZGVzIHNjcmVlbiBkdW1wIG9mIFBlcmwgZGF0YSIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRHVtcHZhbHVlLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWY3MzZiZWM1YWRhMWZjNWUzOWIyYThlN2UwNmJiY2JiIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvRHVtcHZhbHVlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjZlZGU5ZjY5M2Q0YTljNDU1NTU0MWNiMWExY2MyMDA2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjllYTc0NjA2YjU0NWY3NjlhNzg3ZWMyYWUyMjk1NDlhMmFkMGE4ZTNjZDRiMTRlZmYyY2UzODQxODM2YjNiZGIiCisKK1MgPSAiJHtXT1JLRElSfS9EdW1wdmFsdWUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYiBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZW52LXBlcmxfMS4wNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDhlMTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJlbnYtcGVybF8xLjA0LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBpbXBvcnRzIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcyBzY2FsYXJzIG9yIGFycmF5cyIKK0RFU0NSSVBUSU9OID0gIlBlcmwgbWFpbnRhaW5zIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBhIHNwZWNpYWwgaGFzaCBuYW1lZCAlRU5WLiBcCitGb3Igd2hlbiB0aGlzIGFjY2VzcyBtZXRob2QgaXMgaW5jb252ZW5pZW50LCB0aGUgUGVybCBtb2R1bGUgRW52IGFsbG93cyBlbnZpcm9ubWVudCBcCit2YXJpYWJsZXMgdG8gYmUgdHJlYXRlZCBhcyBzY2FsYXIgb3IgYXJyYXkgdmFyaWFibGVzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvRW52LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTc2YzFjYmYxOGRiNTZiMzM0MGQ5MWNiOTQ3OTQzYmQzIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvRW52LSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImZkYmE1YzA2OTBlNjY5NzJjOTZmZWUxMTJjZjVmMjVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImQ5NGEzZDQxMmRmMjQ2YWZkYzMxYTIxOTljYmQ4YWU5MTUxNjdhM2Y0Njg0ZjdiNzAxNGNlMTIwMDI1MWViYjAiCisKK1MgPSAiJHtXT1JLRElSfS9FbnYtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJmaWxlLWNoZWNrdHJlZS1wZXJsXzQuNDEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UzN2M3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGliZmlsZS1jaGVja3RyZWUtcGVybF80LjQxLmJiCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiUGVybCBtb2R1bGUgdGhhdCBydW4gbWFueSBmaWxldGVzdCBjaGVja3Mgb24gYSB0cmVlIgorREVTQ1JJUFRJT04gPSAiVGhlIHZhbGlkYXRlKCkgcm91dGluZSB0YWtlcyBhIHNpbmdsZSBtdWx0aWxpbmUgc3RyaW5nIGNvbnNpc3RpbmcgXAorb2YgZGlyZWN0aXZlcywgZWFjaCBjb250YWluaW5nIGEgZmlsZW5hbWUgcGx1cyBhIGZpbGUgdGVzdCB0byB0cnkgb24gaXQuIChUaGUgZmlsZSBcCit0ZXN0IG1heSBhbHNvIGJlIGEgImNkIiwgY2F1c2luZyBzdWJzZXF1ZW50IHJlbGF0aXZlIGZpbGVuYW1lcyB0byBiZSBpbnRlcnByZXRlZCBcCityZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS4pIEFmdGVyIHRoZSBmaWxlIHRlc3QgeW91IG1heSBwdXQgfHwgZGllIHRvIG1ha2UgaXQgYSBcCitmYXRhbCBlcnJvciBpZiB0aGUgZmlsZSB0ZXN0IGZhaWxzLiBUaGUgZGVmYXVsdCBpcyB8fCB3YXJuLiBUaGUgZmlsZSB0ZXN0IG1heSBcCitvcHRpb25hbGx5IGhhdmUgYSAiIScgcHJlcGVuZGVkIHRvIHRlc3QgZm9yIHRoZSBvcHBvc2l0ZSBjb25kaXRpb24uIElmIHlvdSBkbyBhIFwKK2NkIGFuZCB0aGVuIGxpc3Qgc29tZSByZWxhdGl2ZSBmaWxlbmFtZXMsIHlvdSBtYXkgd2FudCB0byBpbmRlbnQgdGhlbSBzbGlnaHRseSBmb3IgXAorcmVhZGFiaWxpdHkuIElmIHlvdSBzdXBwbHkgeW91ciBvd24gZGllKCkgb3Igd2FybigpIG1lc3NhZ2UsIHlvdSBjYW4gdXNlICRmaWxlIHRvIFwKK2ludGVycG9sYXRlIHRoZSBmaWxlbmFtZS4gXAorXAorRmlsZXRlc3RzIG1heSBiZSBidW5jaGVkOiAiLXJ3eCIgdGVzdHMgZm9yIGFsbCBvZiAtciwgLXcsIGFuZCAteC4gT25seSB0aGUgZmlyc3QgZmFpbGVkIFwKK3Rlc3Qgb2YgdGhlIGJ1bmNoIHdpbGwgcHJvZHVjZSBhIHdhcm5pbmcuIFwKK1wKK1RoZSByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZiB3YXJuaW5ncyBpc3N1ZWQuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35mbG9yYS9GaWxlLUNoZWNrVHJlZS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkFydGlzdGljLTEuMCB8IEdQTC0xLjArIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1jNmZjYWNjNWRmODBlMDM3MDYwMzAwYTdmNGI5M2JmOSIKKworU1JDX1VSSSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL0NQQU4vYXV0aG9ycy9pZC9GL0ZML0ZMT1JBL0ZpbGUtQ2hlY2tUcmVlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjUxOWM4MmFhN2U1YjdmNzUyYjRkYTE0YTZjOGFkNzQwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZjOTlhYjZiYjVhZjQ2NjQ4MzI3MTU5NzRiNWExOWUzMjgwNzFkYzkyMDJhYjcyZTVkNWE1OTRlYmQ0NmE3MjkiCisKK1MgPSAiJHtXT1JLRElSfS9GaWxlLUNoZWNrVHJlZS0ke1BWfSIKKworaW5oZXJpdCBjcGFuCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJpMThuLWNvbGxhdGUtcGVybF8xLjAyLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxODM5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbHNiNC9wZXJsL2xpYmkxOG4tY29sbGF0ZS1wZXJsXzEuMDIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJQZXJsIG1vZHVsZSB0aGF0IGNvbXBhcmUgOC1iaXQgc2NhbGFyIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGxvY2FsZSIKK0RFU0NSSVBUSU9OID0gIlRoaXMgbW9kdWxlIHByb3ZpZGVzIHlvdSB3aXRoIG9iamVjdHMgdGhhdCB3aWxsIGNvbGxhdGUgYWNjb3JkaW5nIHRvIFwKK3lvdXIgbmF0aW9uYWwgY2hhcmFjdGVyIHNldCwgcHJvdmlkZWQgdGhhdCB0aGUgUE9TSVggc2V0bG9jYWxlKCkgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIFwKK29uIHlvdXIgc3lzdGVtLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZmxvcmEvSTE4Ti1Db2xsYXRlLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQXJ0aXN0aWMtMS4wIHwgR1BMLTEuMCsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWZmNmQ2MjkxNDRhNmVjMWVhOGMzMDBmNzU3NjAxODRmIgorCitTUkNfVVJJID0gImh0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvQ1BBTi9hdXRob3JzL2lkL0YvRkwvRkxPUkEvSTE4Ti1Db2xsYXRlLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjcyZGRiNmQxYzU5Y2ZkZjMxYWEzYjA0Nzk5Yjg2YWYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjkxNzQ1MDZiYzkwM2VkYTg5NjkwMzk0ZTNmNDU1NThhYjdlMDEzMTE0MjI3ODk2ZDg1NjlkNjE2NDY0OGZlMzciCisKK1MgPSAiJHtXT1JLRElSfS9JMThOLUNvbGxhdGUtJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiIGIvbWV0YS9yZWNpcGVzLWxzYjQvcGVybC9saWJwb2QtcGxhaW5lci1wZXJsXzEuMDQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlNThmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1sc2I0L3BlcmwvbGlicG9kLXBsYWluZXItcGVybF8xLjA0LmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiUGVybCBleHRlbnNpb24gZm9yIGNvbnZlcnRpbmcgUG9kIHRvIG9sZC1zdHlsZSBQb2QiCitERVNDUklQVElPTiA9ICJQb2Q6OlBsYWluZXIgdXNlcyBQb2Q6OlBhcnNlciB3aGljaCB0YWtlcyBQb2Qgd2l0aCB0aGUgKG5ldykgJ0M8PCAuLiA+PicgXAorY29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgb2xkKGVyKSBzdHlsZSB3aXRoIGp1c3QgJ0M8Pic7ICc8JyBhbmQgJz4nIGFyZSByZXBsYWNlZCBieSBcCisnRTxsdD4nIGFuZCAnRTxndD4nLiBcCitcCitUaGlzIGNhbiBiZSB1c2VkIHRvIHByZS1wcm9jZXNzIFBvZCBiZWZvcmUgdXNpbmcgdG9vbHMgd2hpY2ggZG8gbm90IHJlY29nbmlzZSB0aGUgbmV3IHN0eWxlIFBvZHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vc2VhcmNoLmNwYW4ub3JnL2Rpc3QvUG9kLVBsYWluZXIvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJBcnRpc3RpYy0xLjAgfCBHUEwtMS4wKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vUkVBRE1FO2JlZ2lubGluZT0yNzttZDU9MjI3Y2Y4Mzk3MGZjNjEyNjQ4NDU4MjVkOWQyYmY2ZjgiCisKK1NSQ19VUkkgPSAiaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9DUEFOL2F1dGhvcnMvaWQvUi9STS9STUJBUktFUi9Qb2QtUGxhaW5lci0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNTAyZWFjZDFhNDA4OTRiOWRmZWE1NWZjMmNkNWU3ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxYmJmYmY3ZDFkNDg3MWU1YTgzYmFiMjEzN2UyMmQwODkwNzgyMDY4MTUxOTBlYjFkNWMxMjYwYTM0OTk0NTZmIgorCitTID0gIiR7V09SS0RJUn0vUG9kLVBsYWluZXItJHtQVn0iCisKK2luaGVyaXQgY3BhbgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWZwdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA0MDIzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1mcHUuaW5jCkBAIC0wLDAgKzEsNiBAQAorCitkZWYgZ2V0X2Fsc2FfZnB1X3NldHRpbmcoYmIsIGQpOgorCWlmIGQuZ2V0VmFyKCdUQVJHRVRfRlBVJywgVHJ1ZSkgaW4gWyAnc29mdCcgXToKKwkJcmV0dXJuICItLXdpdGgtc29mdGZsb2F0IgorCXJldHVybiAiIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliLzAwMDEtYnVpbGQtRG8tbm90LXRyeS10by1kZXRlY3QtY3Jvc3MtY29tcGlsZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzYmMzZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvMDAwMS1idWlsZC1Eby1ub3QtdHJ5LXRvLWRldGVjdC1jcm9zcy1jb21waWxlci5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitGcm9tIDE3YWViMzU2NWY0MTFlNzc5NmNhYmU0MDNmOTJkMTU5NDhhOGNhOTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogRnJpLCAyMSBBdWcgMjAxNSAxNDo0Mjo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBidWlsZDogRG8gbm90IHRyeSB0byBkZXRlY3QgY3Jvc3MtY29tcGlsZXIKKworY3Jvc3MgY29tcGlsZXJzIGFyZSBwYXNzZWQgdmlhIHBhdGggbWF5IG5vdCBiZSBhIGdjYyBiYXNlZCBjcm9zcworY29tcGlsZXIgaW4gc3VjaCBjYXNlcyB0aGlzIGNoZWNrIGZhaWxzIGFuZCB0cnkncyB0byBmb3JjZSBnY2MgYmFzZWQKK2Nyb3NzIGNvbXBpbGVyIGRldGVjdGlvbiwgVGhpcyBjb2RlIGlzIGEgY29udmVuaWVuY2UgdGhhdCBsaW1pdHMgdGhlCitidWlsZCBzeXN0ZW0KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBjb25maWd1cmUuYWMgfCAxNCAtLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMzAyMmNmOC4uOWQ3NzQ0MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMjcsMjAgKzI3LDYgQEAgQUNfUFJFRklYX0RFRkFVTFQoL3VzcikKKyAKKyBkbmwgQ2hlY2tzIGZvciBwcm9ncmFtcy4KKyAKKy1kbmwgdHJ5IHRvIGd1ZXMgY3Jvc3MtY29tcGlsZXIgaWYgbm90IHNldAorLWlmIHRlc3QgIngkaG9zdCIgIT0gIngkYnVpbGQiIC1hIC16ICJgZWNobyAkQ0MgfCBncmVwIC1lICctZ2NjJ2AiOworLXRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhmb3IgY3Jvc3MtY29tcGlsZXIpCistCistICB3aGljaCAke3Byb2dyYW1fcHJlZml4fWdjYyA+L2Rldi9udWxsIDI+JjEgJiYgQ0M9JHtwcm9ncmFtX3ByZWZpeH1nY2MKKy0gIHdoaWNoICR7aG9zdF9jcHV9LSR7aG9zdF9vc30tZ2NjID4vZGV2L251bGwgMj4mMSBcCistICAmJiBDQz0ke2hvc3RfY3B1fS0ke2hvc3Rfb3N9LWdjYworLSAgd2hpY2ggJHtob3N0X2NwdX0tJHtob3N0X3ZlbmRvcn0tJHtob3N0X29zfS1nY2MgPi9kZXYvbnVsbCAyPiYxIFwKKy0gICYmIENDPSR7aG9zdF9jcHV9LSR7aG9zdF92ZW5kb3J9LSR7aG9zdF9vc30tZ2NjCistCistICBBQ19NU0dfUkVTVUxUKCRDQykKKy1maQorLQkgICAgCisgQ0ZMQUdTPSIkQ0ZMQUdTIC1EX0dOVV9TT1VSQ0UiCisgCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1saWIvQ2hlY2staWYtd29yZGV4cC1mdW5jdGlvbi1pcy1zdXBwb3J0ZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTZlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliL0NoZWNrLWlmLXdvcmRleHAtZnVuY3Rpb24taXMtc3VwcG9ydGVkLnBhdGNoCkBAIC0wLDAgKzEsNTEgQEAKK0Zyb20gZTMzMzU3YjU5YTEwZDQ0ZTliZWM1ZDI0MTAwY2UyM2NhMzAwY2M3OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ICJIb25nIEguIFBoYW0iIDxob25nLnBoYW1Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IEZyaSwgMjkgQXVnIDIwMTQgMTc6MTM6NTUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ2hlY2sgaWYgd29yZGV4cCBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQKKworZWdsaWJjIGNvdWxkIGJlIGNvbmZpZ3VyZWQgdG8gYnVpbGQgd2l0aG91dCB3b3JkZXhwLCBzbyBpdCBpcyBub3QgZW5vdWdoCit0byBjaGVjayBpZiB3b3JkZXhwLmggZXhpc3RzICh0aGUgaGVhZGVyIGZpbGUgY291bGQgYmUgaW5zdGFsbGVkLCBidXQgaXQncworcG9zc2libGUgdGhhdCB0aGUgd29yZGV4cCgpIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQpLiAgQW4gYWRkaXRpb25hbAorY2hlY2sgaWYgd29yZGV4cCgpIGlzIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtIEMgbGlicmFyeSBpcyBuZWVkZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogSG9uZyBILiBQaGFtIDxob25nLnBoYW1Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICB8IDUgKysrKy0KKyBzcmMvdXNlcmZpbGUuYyB8IDIgKy0KKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYjgzNTNhMC4uNzczYjcyZiAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzExLDcgKzMxMSwxMCBAQCBmaQorIEFDX1NVQlNUKEFMU0FfREVQTElCUykKKyAKKyBkbmwgQ2hlY2sgZm9yIGhlYWRlcnMKKy1BQ19DSEVDS19IRUFERVJTKFt3b3JkZXhwLmggZW5kaWFuLmggc3lzL2VuZGlhbi5oXSkKKytBQ19DSEVDS19IRUFERVJTKFt3b3JkZXhwLmggZW5kaWFuLmggc3lzL2VuZGlhbi5oXSwKKysgIGRubCBNYWtlIHN1cmUgd29yZGV4cCBpcyBzdXBwb3J0ZWQgYnkgdGhlIEMgbGlicmFyeQorKyAgQUNfQ0hFQ0tfRlVOQ1MoW3dvcmRleHBdKQorKykKKyAKKyBkbmwgQ2hlY2sgZm9yIHJlc21nciBzdXBwb3J0Li4uCisgQUNfTVNHX0NIRUNLSU5HKGZvciByZXNtZ3Igc3VwcG9ydCkKK2RpZmYgLS1naXQgYS9zcmMvdXNlcmZpbGUuYyBiL3NyYy91c2VyZmlsZS5jCitpbmRleCAzYTczODM2Li5iOGNlODA5IDEwMDY0NAorLS0tIGEvc3JjL3VzZXJmaWxlLmMKKysrKyBiL3NyYy91c2VyZmlsZS5jCitAQCAtMzIsNyArMzIsNyBAQAorICAqIHN0b3JlcyB0aGUgZmlyc3QgbWF0Y2hpbmUgb25lLiAgVGhlIHJldHVybmVkIHN0cmluZyBpcyBzdHJkdXAnZWQuCisgICovCisgCistI2lmZGVmIEhBVkVfV09SREVYUF9ICisrI2lmIChkZWZpbmVkKEhBVkVfV09SREVYUF9IKSAmJiBkZWZpbmVkKEhBVkVfV09SREVYUCkpCisgI2luY2x1ZGUgPHdvcmRleHAuaD4KKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisgaW50IHNuZF91c2VyX2ZpbGUoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqKnJlc3VsdCkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtbGliXzEuMC4yOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzBmNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLWxpYl8xLjAuMjkuYmIKQEAgLTAsMCArMSw1MSBAQAorU1VNTUFSWSA9ICJBTFNBIHNvdW5kIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAibGlicy9tdWx0aW1lZGlhIgorTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTdmYmMzMzgzMDlhYzM4ZmVmY2Q2NGIwNGJiOTAzZTM0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zb2NrZXQuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTI2O21kNT0xMWZmODlhOGE3YTRhNjkwYTVjNzhlZmZlODE1OTU0NSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCisjIGNvbmZpZ3VyZS5pbiBzZXRzIC1EX19hcm1fXyBvbiB0aGUgY29tbWFuZCBsaW5lIGZvciBhbnkgYXJtIHN5c3RlbQorIyAobm90IGp1c3QgdGhvc2Ugd2l0aCB0aGUgQVJNIGluc3RydWN0aW9uIHNldCksIHRoaXMgc2hvdWxkIGJlIHJlbW92ZWQsCisjIChvciByZXBsYWNlZCBieSBhIHBlcm1pdHRlZCAjZGVmaW5lKS4KKyNGSVhNRTogcmVtb3ZlIHRoZSBmb2xsb3dpbmcKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi9saWIvJHtCUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9DaGVjay1pZi13b3JkZXhwLWZ1bmN0aW9uLWlzLXN1cHBvcnRlZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLWJ1aWxkLURvLW5vdC10cnktdG8tZGV0ZWN0LWNyb3NzLWNvbXBpbGVyLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZTY3ZTBlY2E3MjQ3NGQ2YjExMjEwMzdkYWZlMTAyNCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MzA0M2MzNWViOTYzNmJlMGY0YWY2YTI0MDIzNWMyMTNmMTJhMjVmZWIxZjA0YWVlYWM4Y2I3ZTMwZmNiZGQwIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworcmVxdWlyZSBhbHNhLWZwdS5pbmMKK0VYVFJBX09FQ09ORiArPSAiJHtAZ2V0X2Fsc2FfZnB1X3NldHRpbmcoYmIsIGQpfSAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcHl0aG9uIgorCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLXdpdGgtdmVyc2lvbmVkPW5vICIKKworUEFDS0FHRVMgPSsgImFsc2Etc2VydmVyIGxpYmFzb3VuZCBhbHNhLWNvbmYtYmFzZSBhbHNhLWNvbmYgYWxzYS1kb2MiCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS9zbWl4ZXIvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59L3NtaXhlci8qLmxhIgorRklMRVNfbGliYXNvdW5kID0gIiR7bGliZGlyfS9saWJhc291bmQuc28uKiIKK0ZJTEVTX2Fsc2Etc2VydmVyID0gIiR7YmluZGlyfS8qIgorRklMRVNfYWxzYS1jb25mID0gIiR7ZGF0YWRpcn0vYWxzYS8iCitGSUxFU19hbHNhLWNvbmYtYmFzZSA9ICJcCiske2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mIFwKKyR7ZGF0YWRpcn0vYWxzYS9jYXJkcy9hbGlhc2VzLmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kZWZhdWx0LmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kbWl4LmNvbmYgXAorJHtkYXRhZGlyfS9hbHNhL3BjbS9kc25vb3AuY29uZiIKKworUkRFUEVORFNfbGliYXNvdW5kID0gImFsc2EtY29uZi1iYXNlIGFsc2EtY29uZiIKKyMgdXBncmFkZSBwYXRoCitSUFJPVklERVNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgorUlJFUExBQ0VTXyR7UE59LWRldiA9ICJhbHNhLWRldiIKK1JDT05GTElDVFNfJHtQTn0tZGV2ID0gImFsc2EtZGV2IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWFyY2FtLWF2LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1mZF9zZXQtZGVmaW5pdGlvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBjNzJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnMvMDAwMS1hcmNhbS1hdi1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3ItZmRfc2V0LWRlZmluaXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBkMjhjNjU1YmUzYWM0ZmNiODAyNDU1NTk4Mzg4NGY4MzJlZTE4Nzg3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMjkgTWF5IDIwMTUgMTU6MTc6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYXJjYW0tYXY6IEluY2x1ZGUgc3lzL3NlbGVjdC5oIGZvciBmZF9zZXQgZGVmaW5pdGlvbgorCitmaXhlcyBidWlsZCBlcnJvcnMgb24gbm9uLWdsaWJjIGJhc2VkIHN5c3RlbXMKKworYXJjYW0tYXYvYXJjYW1fYXYuYzozODk6MjogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICdmZF9zZXQnCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyBhcmNhbS1hdi9hcmNhbV9hdi5jIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9hcmNhbS1hdi9hcmNhbV9hdi5jIGIvYXJjYW0tYXYvYXJjYW1fYXYuYworaW5kZXggMDQ5MWZjNi4uZmZmOTZmOSAxMDA2NDQKKy0tLSBhL2FyY2FtLWF2L2FyY2FtX2F2LmMKKysrKyBiL2FyY2FtLWF2L2FyY2FtX2F2LmMKK0BAIC0zMSw2ICszMSw3IEBACisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorIAorICNpbmNsdWRlIDxzeXMvaXBjLmg+CisrI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAjaW5jbHVkZSA8c3lzL3NobS5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS1wbHVnaW5zLzAwMDEtaW5jbHVkZS1zcGVleGRzcF90eXBlcy5oLW5vdC1zcGVleF90eXBlcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MTk5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2lucy8wMDAxLWluY2x1ZGUtc3BlZXhkc3BfdHlwZXMuaC1ub3Qtc3BlZXhfdHlwZXMuaC5wYXRjaApAQCAtMCwwICsxLDcxIEBACitGcm9tIGNhNDFlOTZhNDlhNTY4MTI4MzU0ZjY1ZjkwYTc2OWRlYmY1NDM1ZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgOSBKdWwgMjAxNSAxMTo1ODoxMiArMDMwMAorU3ViamVjdDogW1BBVENIXSBpbmNsdWRlIHNwZWV4ZHNwX3R5cGVzLmgsIG5vdCBzcGVleF90eXBlcy5oCisKK1NwZWV4ZHNwIHdhcyBzZXBhcmF0ZWQgZnJvbSBzcGVleCBpbiAxLjJyYzIuIHNwZWV4X3R5cGVzLmggaXMgbm90CitzaGlwcGVkIGJ5IHNwZWV4ZHNwLCBzbyBhbHNhLXBsdWdpbnMgc2hvdWxkbid0IHVzZSB0aGF0IGZpbGUuIHNwZWV4ZHNwCitoYXMgc3BlZXhkc3BfdHlwZXMuaCwgd2hpY2ggaGFzIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHNwZWV4X3R5cGVzLmguCisKK3NwZWV4ZHNwX3R5cGVzLmggaXMgYSBuZXcgZmlsZSBpbnRyb2R1Y2VkIGluIDEuMnJjMiwgc28gdGhpcyBjaGFuZ2UKK2J1bXBzIHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBzcGVleGRzcCB2ZXJzaW9uLiBUaGUgdmVyc2lvbiBjaGVjayBpbgorY29uZmlndXJlLmFjIHdpbGwgYWN0dWFsbHkgYnJlYWsgaWYgc3BlZXhkc3AgMS4yIGV2ZXIgZ2V0cyByZWxlYXNlZCwKK2JlY2F1c2UgcGtnLWNvbmZpZyB0aGlua3MgdGhhdCAiMS4yIiA8ICIxLjJyYzIiLCBidXQgSSB0aGluayBpdCdzCit1c2VmdWwgdG8gZmFpbCBpZiB0aGUgaW5zdGFsbGVkIHNwZWV4ZHNwIHZlcnNpb24gaXMgMS4ycmMxICh3aGljaCBJCitiZWxpZXZlIGlzIHZlcnkgY29tbW9uIG9uIGN1cnJlbnQgZGlzdHJpYnV0aW9ucykuIElmIGEgbm9uLXJjIHZlcnNpb24KK29mIHNwZWV4ZHNwIHdpbGwgZXZlciBnZXQgcmVsZWFzZWQsIEkgaG9wZSB2ZXJzaW9uIG51bWJlciAxLjIgd2lsbCBiZQorc2tpcHBlZCBmb3IgdGhpcyByZWFzb24uIChBIG5vbi1yYyB2ZXJzaW9uIHNlZW1zIHVubGlrZWx5LCBzaW5jZQorMS4ycmMxIHdhcyByZWxlYXNlZCB5ZWFycyBhZ28sIHNvIGl0J3MgcHJldHR5IGxpa2VseSB0aGF0IHRoZSBwcm9qZWN0CitpcyBzdHVjayBvbiBzbyBjYWxsZWQgInJlbGVhc2UgY2FuZGlkYXRlcyIgZm9yZXZlci4uLikKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgKGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LmFsc2EuZGV2ZWwvMTQxMTQ5KQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8IDIgKy0KKyBwcGgvYXJjaC5oICAgICAgICAgICAgfCAyICstCisgcHBoL3NwZWV4X3Jlc2FtcGxlci5oIHwgMiArLQorIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5MDJhNmQ3Li5jNTU0ZDIyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xMDgsNyArMTA4LDcgQEAgQUNfU1VCU1QoQVZDT0RFQ19DRkxBR1MpCisgQUNfU1VCU1QoQVZDT0RFQ19MSUJTKQorIEFDX1NVQlNUKEFWQ09ERUNfSEVBREVSKQorIAorLVBLR19DSEVDS19NT0RVTEVTKHNwZWV4ZHNwLCBbc3BlZXhkc3AgPj0gMS4yXSwgW0hBVkVfU1BFRVhEU1A9InllcyJdLCBbSEFWRV9TUEVFWERTUD0iIl0pCisrUEtHX0NIRUNLX01PRFVMRVMoc3BlZXhkc3AsIFtzcGVleGRzcCA+PSAxLjJyYzJdLCBbSEFWRV9TUEVFWERTUD0ieWVzIl0sIFtIQVZFX1NQRUVYRFNQPSIiXSkKKyBBTV9DT05ESVRJT05BTChIQVZFX1NQRUVYRFNQLCB0ZXN0ICIkSEFWRV9TUEVFWERTUCIgPSAieWVzIikKKyAKKyBBQ19BUkdfV0lUSChbc3BlZXhdLAorZGlmZiAtLWdpdCBhL3BwaC9hcmNoLmggYi9wcGgvYXJjaC5oCitpbmRleCBlMmQ3MzFhLi5hMDdkMGQ5IDEwMDY0NAorLS0tIGEvcHBoL2FyY2guaAorKysrIGIvcHBoL2FyY2guaAorQEAgLTM2LDcgKzM2LDcgQEAKKyAjZGVmaW5lIEFSQ0hfSAorIAorICNpZm5kZWYgT1VUU0lERV9TUEVFWAorLSNpbmNsdWRlICJzcGVleC9zcGVleF90eXBlcy5oIgorKyNpbmNsdWRlICJzcGVleC9zcGVleGRzcF90eXBlcy5oIgorICNlbmRpZgorIAorICNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gKC0oeCkpIDogKHgpKSAgICAgIC8qKjwgQWJzb2x1dGUgaW50ZWdlciB2YWx1ZS4gKi8KK2RpZmYgLS1naXQgYS9wcGgvc3BlZXhfcmVzYW1wbGVyLmggYi9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKK2luZGV4IGM0NGZiY2QuLmFhODVhYmIgMTAwNjQ0CistLS0gYS9wcGgvc3BlZXhfcmVzYW1wbGVyLmgKKysrKyBiL3BwaC9zcGVleF9yZXNhbXBsZXIuaAorQEAgLTgyLDcgKzgyLDcgQEAKKyAgICAgICAKKyAjZWxzZSAvKiBPVVRTSURFX1NQRUVYICovCisgCistI2luY2x1ZGUgInNwZWV4L3NwZWV4X3R5cGVzLmgiCisrI2luY2x1ZGUgInNwZWV4L3NwZWV4ZHNwX3R5cGVzLmgiCisgCisgI2VuZGlmIC8qIE9VVFNJREVfU1BFRVggKi8KKyAKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXBsdWdpbnNfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mjg2MTgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtcGx1Z2luc18xLjAuMjkuYmIKQEAgLTAsMCArMSwxMDUgQEAKK0RFU0NSSVBUSU9OID0gIkFMU0EgUGx1Z2lucyIKK0hPTUVQQUdFID0gImh0dHA6Ly9hbHNhLXByb2plY3Qub3JnIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorCisjIFRoZSBwcmltYXJ5IGxpY2Vuc2Ugb2YgYWxzYS1wbHVnaW5zIGlzIExHUEx2Mi4xLgorIworIyBtNC9hdHRyaWJ1dGVzLm00IGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKy4gbTQvYXR0cmlidXRlcy5tNCBpcyBwYXJ0IG9mIHRoZQorIyBidWlsZCBzeXN0ZW0sIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgbGljZW5zaW5nIG9mIHRoZSBidWlsZCByZXN1bHQuCisjCisjIFRoZSBzYW1wbGVyYXRlIHBsdWdpbiBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciBHUEx2MisgdG8gYmUgY29uc2lzdGVudAorIyB3aXRoIHRoZSBsaWJzYW1wbGVyYXRlIGxpY2Vuc2UuCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJcCisgICAgICAgIGZpbGU6Ly9DT1BZSU5HO21kNT03ZmJjMzM4MzA5YWMzOGZlZmNkNjRiMDRiYjkwM2UzNCBcCisgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTDttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICBmaWxlOi8vbTQvYXR0cmlidXRlcy5tNDtlbmRsaW5lPTMzO21kNT1iMjU5NThkYTQ0YzAyMjMxZTM2NDFmMWJjY2VmNTNlYiBcCisgICAgICAgIGZpbGU6Ly9yYXRlL3JhdGVfc2FtcGxlcmF0ZS5jO2VuZGxpbmU9MTk7bWQ1PWYzZDNjZTBiMTg5ODQ2YTQ4NjUxN2Q5N2E4NTRiMjc2IFwKKyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuYWxzYS1wcm9qZWN0Lm9yZy9wdWIvcGx1Z2lucy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtYXJjYW0tYXYtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLWZkX3NldC1kZWZpbml0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtaW5jbHVkZS1zcGVleGRzcF90eXBlcy5oLW5vdC1zcGVleF90eXBlcy5oLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjY3OTdiNDQ3MWUzY2JlOTY1NzUyMDdiZmJlMjUyYyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIzMjVkODVjYWMyODVmNjMyYjgzZTAxOTFhZTNmMzQ4YmFkMDNjMWYwMDdiOTM3MDQyZjE2NGFiYjgxZWE2NTMyIgorCitERVBFTkRTICs9ICJhbHNhLWxpYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK1BBQ0tBR0VDT05GSUcgPz89ICJcCisgICAgICAgIHNhbXBsZXJhdGUgXAorICAgICAgICBzcGVleGRzcCBcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAncHVsc2VhdWRpbycsICdwdWxzZWF1ZGlvJywgJycsIGQpfSBcCisiCitQQUNLQUdFQ09ORklHW2F2Y29kZWNdID0gIi0tZW5hYmxlLWF2Y29kZWMsLS1kaXNhYmxlLWF2Y29kZWMsbGliYXYiCitQQUNLQUdFQ09ORklHW2phY2tdID0gIi0tZW5hYmxlLWphY2ssLS1kaXNhYmxlLWphY2ssamFjayIKK1BBQ0tBR0VDT05GSUdbbWFlbW8tcGx1Z2luXSA9ICItLWVuYWJsZS1tYWVtby1wbHVnaW4sLS1kaXNhYmxlLW1hZW1vLXBsdWdpbiIKK1BBQ0tBR0VDT05GSUdbbWFlbW8tcmVzb3VyY2UtbWFuYWdlcl0gPSAiLS1lbmFibGUtbWFlbW8tcmVzb3VyY2UtbWFuYWdlciwtLWRpc2FibGUtbWFlbW8tcmVzb3VyY2UtbWFuYWdlcixkYnVzIgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZWF1ZGlvLC0tZGlzYWJsZS1wdWxzZWF1ZGlvLHB1bHNlYXVkaW8iCitQQUNLQUdFQ09ORklHW3NhbXBsZXJhdGVdID0gIi0tZW5hYmxlLXNhbXBsZXJhdGUsLS1kaXNhYmxlLXNhbXBsZXJhdGUsbGlic2FtcGxlcmF0ZTAiCitQQUNLQUdFQ09ORklHW3NwZWV4ZHNwXSA9ICItLXdpdGgtc3BlZXg9bGliLC0td2l0aC1zcGVleD1ubyxzcGVleGRzcCIKKworUEFDS0FHRVMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAnYWxzYS1wbHVnaW5zLXB1bHNlYXVkaW8tY29uZicsICcnLCBkKX0iCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXmxpYmFzb3VuZC1tb2R1bGUtLioiCisKKyMgVGhlIGFsc2EtcGx1Z2lucyBwYWNrYWdlIGRvZXNuJ3QgaXRzZWxmIGNvbnRhaW4gYW55dGhpbmcsIGl0IGp1c3QgZGVwZW5kcyBvbgorIyBhbGwgYnVpbHQgcGx1Z2lucy4KK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXJtICR7RH0ke2xpYmRpcn0vYWxzYS1saWIvKi5sYQorCisJIyBXZSB1c2UgdGhlIGV4YW1wbGUgYXMgaXMsIHNvIGp1c3QgZHJvcCB0aGUgLmV4YW1wbGUgc3VmZml4LgorCWlmIFsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B1bHNlYXVkaW8nLCAneWVzJywgJ25vJywgZCl9IiA9ICJ5ZXMiIF07IHRoZW4KKwkJbXYgJHtEfSR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC85OS1wdWxzZWF1ZGlvLWRlZmF1bHQuY29uZi5leGFtcGxlICR7RH0ke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYKKwlmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICBwbHVnaW5kaXIgPSBiYi5kYXRhLmV4cGFuZCgnJHtsaWJkaXJ9L2Fsc2EtbGliLycsIGQpCisgICAgcGFja2FnZXMgPSAiICIuam9pbihkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5kaXIsICdebGliYXNvdW5kX21vZHVsZV8oLiopXC5zbyQnLCAnbGliYXNvdW5kLW1vZHVsZS0lcycsICdBbHNhIHBsdWdpbiBmb3IgJXMnLCBleHRyYV9kZXBlbmRzPScnKSkKKyAgICBkLnNldFZhcigiUkRFUEVORFNfYWxzYS1wbHVnaW5zIiwgcGFja2FnZXMpCit9CisKKyMgVGhlIHJhdGUgcGx1Z2lucyBjcmVhdGUgc29tZSBzeW1saW5rcy4gRm9yIGV4YW1wbGUsIHRoZSBzYW1wbGVyYXRlIHBsdWdpbgorIyBjcmVhdGVzIHRoZXNlIGxpbmtzIHRvIHRoZSBtYWluIHBsdWdpbiBmaWxlOgorIworIyAgIGxpYmFzb3VuZF9tb2R1bGVfcmF0ZV9zYW1wbGVyYXRlX2Jlc3Quc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9saW5lYXIuc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9tZWRpdW0uc28KKyMgICBsaWJhc291bmRfbW9kdWxlX3JhdGVfc2FtcGxlcmF0ZV9vcmRlci5zbworIworIyBUaGUgb3RoZXIgcmF0ZSBwbHVnaW5zIGNyZWF0ZSBzaW1pbGFyIGxpbmtzLiBXZSBoYXZlIHRvIGFkZCB0aGUgbGlua3MgdG8KKyMgRklMRVMgbWFudWFsbHksIGJlY2F1c2UgZG9fc3BsaXRfcGFja2FnZXMoKSBza2lwcyB0aGUgbGlua3MgKHdoaWNoIGlzIGdvb2QsCisjIGJlY2F1c2Ugd2Ugd291bGRuJ3Qgd2FudCBkb19zcGxpdF9wYWNrYWdlcygpIHRvIGNyZWF0ZSBzZXBhcmF0ZSBwYWNrYWdlcyBmb3IKKyMgdGhlIHN5bWxpbmtzKS4KKyMKKyMgVGhlIHN5bWxpbmtzIGNhdXNlIFFBIGVycm9ycywgYmVjYXVzZSB1c3VhbGx5IGl0J3MgYSBidWcgaWYgYSBub24KKyMgLWRldi8tZGJnLy1uYXRpdmVzZGsgcGFja2FnZSBjb250YWlucyBsaW5rcyB0byAuc28gZmlsZXMsIGJ1dCBpbiB0aGlzIGNhc2UKKyMgdGhlIGVycm9ycyBhcmUgZmFsc2UgcG9zaXRpdmVzLCBzbyB3ZSBkaXNhYmxlIHRoZSBRQSBjaGVja3MuCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1sYXZjcmF0ZSArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLypyYXRlX2xhdmNyYXRlXyouc28iCitGSUxFU18ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zYW1wbGVyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfc2FtcGxlcmF0ZV8qLnNvIgorRklMRVNfJHtNTFBSRUZJWH1saWJhc291bmQtbW9kdWxlLXJhdGUtc3BlZXhyYXRlICs9ICIke2xpYmRpcn0vYWxzYS1saWIvKnJhdGVfc3BlZXhyYXRlXyouc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1sYXZjcmF0ZSA9ICJkZXYtc28iCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfWxpYmFzb3VuZC1tb2R1bGUtcmF0ZS1zYW1wbGVyYXRlID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7TUxQUkVGSVh9bGliYXNvdW5kLW1vZHVsZS1yYXRlLXNwZWV4cmF0ZSA9ICJkZXYtc28iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2Fsc2EtbGliLy5kZWJ1ZyIKKworIyA1MC1wdWxzZWF1ZGlvLmNvbmYgZGVmaW5lcyBhIGRldmljZSBuYW1lZCAicHVsc2UiIHRoYXQgYXBwbGljYXRpb25zIGNhbiB1c2UKKyMgaWYgdGhleSBleHBsaWNpdGx5IHdhbnQgdG8gdXNlIHRoZSBQdWxzZUF1ZGlvIHBsdWdpbi4KKyMgOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYgY29uZmlndXJlcyB0aGUgImRlZmF1bHQiIGRldmljZSB0byB1c2UgdGhlCisjIFB1bHNlQXVkaW8gcGx1Z2luLgorRklMRVNfJHtQTn0tcHVsc2VhdWRpby1jb25mICs9ICJcCisgICAgICAgICR7ZGF0YWRpcn0vYWxzYS9hbHNhLmNvbmYuZC81MC1wdWxzZWF1ZGlvLmNvbmYgXAorICAgICAgICAke2RhdGFkaXJ9L2Fsc2EvYWxzYS5jb25mLmQvOTktcHVsc2VhdWRpby1kZWZhdWx0LmNvbmYgXAorIgorCitSREVQRU5EU18ke1BOfS1wdWxzZWF1ZGlvLWNvbmYgKz0gIlwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1jb25mLXB1bHNlIFwKKyAgICAgICAgbGliYXNvdW5kLW1vZHVsZS1jdGwtcHVsc2UgXAorICAgICAgICBsaWJhc291bmQtbW9kdWxlLXBjbS1wdWxzZSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0OWEzMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy8wMDAxLWFzMTBrMS1NYWtlLW91dHB1dF90cmFtX2xpbmUtc3RhdGljLWlubGluZS5wYXRjaApAQCAtMCwwICsxLDMxIEBACitGcm9tIDFlNTkyNmRmNzRhMzVmZTJjZDkwYmM1OWY1MjY0YTg3MTVjOTQwNDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA3IFNlcCAyMDE1IDA4OjE2OjU5ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGFzMTBrMTogTWFrZSBvdXRwdXRfdHJhbV9saW5lKCkgc3RhdGljIGlubGluZQorCitUaGUgZnVuY3Rpb24gaXMgbm90IHVzZWQgaW4gYW55IG90aGVyIGZpbGUsIGl0cyBiZXR0ZXIgdG8gbWFrZSBpdCBzdGF0aWMKK2lubGluZSBzbyBjb21waWxlciBoYXMgYSBiZXR0ZXIgY2hhbmNlIG9mIG9wdGltaXppbmcgaGVyZQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIGFzMTBrMS9hczEwazEuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FzMTBrMS9hczEwazEuYyBiL2FzMTBrMS9hczEwazEuYworaW5kZXggOTZhZjBjMy4uZDA3NjZmZCAxMDA2NDQKKy0tLSBhL2FzMTBrMS9hczEwazEuYworKysrIGIvYXMxMGsxL2FzMTBrMS5jCitAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgYXNfZXhpdChjb25zdCBjaGFyICptZXNzYWdlKQorIAlleGl0KDEpOworIH0KKyAKKy1pbmxpbmUgdm9pZCBvdXRwdXRfdHJhbV9saW5lKCBzdHJ1Y3QgbGlzdF9oZWFkICpsaW5lX2hlYWQsIGludCB0eXBlKXsKKytzdGF0aWMgaW5saW5lIHZvaWQgb3V0cHV0X3RyYW1fbGluZSggc3RydWN0IGxpc3RfaGVhZCAqbGluZV9oZWFkLCBpbnQgdHlwZSl7CisgICAgICAgICAKKyAgICAgICAgIHN0cnVjdCB0cmFtICp0cmFtX3N5bTsKKyAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworLS0gCisyLjUuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvYXV0b3Rvb2xzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2F1dG90b29scy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTM5MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2F1dG90b29scy5wYXRjaApAQCAtMCwwICsxLDMyIEBACitBZGQgcGFyYW1ldGVycyB0byBhdXRvcmVjb25mIHRvIHN1cHBvcnQgY3Jvc3MgY29tcGlsZS4KK1JlbW92ZSBzb21lIHN1Yi1jb21wb25lbnRzIHdoaWNoIG5lZWRzIGZ1cnRoZXIgcmVjaXBlIHN1cHBvcnQuCisKK1NpZ25lZC1vZmYtYnk6IERvbmd4aWFvIFh1IDxkb25neGlhby54dUBpbnRlbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworZGlmZiAtcnVOIGFsc2EtdG9vbHMtMS4wLjI0LjEtb3JpZy8vbGQxMGsxL2dpdGNvbXBpbGUgYWxzYS10b29scy0xLjAuMjQuMS9sZDEwazEvZ2l0Y29tcGlsZQorLS0tIGFsc2EtdG9vbHMtMS4wLjI0LjEtb3JpZy8vbGQxMGsxL2dpdGNvbXBpbGUJMjAxMS0wNy0wNiAxMToyNzo0MC4yMjc2NjUwMDIgKzA4MDAKKysrKyBhbHNhLXRvb2xzLTEuMC4yNC4xL2xkMTBrMS9naXRjb21waWxlCTIwMTEtMDctMTQgMTM6MjY6MTguMDE3NjY1MDA0ICswODAwCitAQCAtMSw2ICsxLDYgQEAKKyAjIS9iaW4vYmFzaAorIAorLWF1dG9yZWNvbmYgLWZpIHx8IGV4aXQgMQorK2F1dG9yZWNvbmYgJEFDTE9DQUxfRkxBR1MgLWZpIHx8IGV4aXQgMQorIGV4cG9ydCBDRkxBR1M9Jy1PMiAtV2FsbCAtcGlwZSAtZycKKyBlY2hvICJDRkxBR1M9JENGTEFHUyIKKyBlY2hvICIuL2NvbmZpZ3VyZSAkQCIKK2RpZmYgLXJ1TiBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL01ha2VmaWxlIGFsc2EtdG9vbHMtMS4wLjI0LjEvTWFrZWZpbGUKKy0tLSBhbHNhLXRvb2xzLTEuMC4yNC4xLW9yaWcvL01ha2VmaWxlCTIwMTEtMDctMDYgMTE6Mjc6NDAuMjA3NjY1MDAwICswODAwCisrKysgYWxzYS10b29scy0xLjAuMjQuMS9NYWtlZmlsZQkyMDExLTA3LTE0IDE1OjA4OjA4Ljg3NzY2NTAwOSArMDgwMAorQEAgLTEsOCArMSw4IEBACisgVkVSU0lPTiA9IDEuMC4yOQorIFRPUCA9IC4KKy1TVUJESVJTID0gYXMxMGsxIGVudnkyNGNvbnRyb2wgaGRzcGxvYWRlciBoZHNwY29uZiBoZHNwbWl4ZXIgXAorK1NVQkRJUlMgPSBhczEwazEgZW52eTI0Y29udHJvbCBcCisgCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHJtZWRpZ2ljb250cm9sIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKy0JICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgZWNob21peGVyIGxkMTBrMSBxbG8xMGsxIFwKKysJICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgZWNob21peGVyIFwKKyAJICBod21peHZvbHVtZSBoZGFqYWNrcmV0YXNrIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKyAKKyBhbGw6CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvZ2l0Y29tcGlsZV9oZGFqYWNrc2Vuc2V0ZXN0IGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2dpdGNvbXBpbGVfaGRhamFja3NlbnNldGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODMyOGJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXRvb2xzL2dpdGNvbXBpbGVfaGRhamFja3NlbnNldGVzdApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vYmFzaAorCithY2xvY2FsICRBQ0xPQ0FMX0ZMQUdTIHx8IGV4aXQgMQorYXV0b21ha2UgLS1mb3JlaWduIC0tYWRkLW1pc3NpbmcgfHwgZXhpdCAxCithdXRvY29uZiB8fCBleGl0IDEKK2V4cG9ydCBDRkxBR1M9Jy1PMiAtV2FsbCAtcGlwZSAtZycKK2VjaG8gIkNGTEFHUz0kQ0ZMQUdTIgorZWNobyAiLi9jb25maWd1cmUgJEAiCisuL2NvbmZpZ3VyZSAkQCB8fCBleGl0IDEKK3Vuc2V0IENGTEFHUworaWYgWyAteiAiJEdJVENPTVBJTEVfTk9fTUFLRSIgXTsgdGhlbgorICBtYWtlIHx8IGV4aXQgMQorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29scy9tYWtlZmlsZV9ub19ndGsucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvbWFrZWZpbGVfbm9fZ3RrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTc2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHMvbWFrZWZpbGVfbm9fZ3RrLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK1JlbW92ZSBzb21lIHN1Yi1jb21wb25lbnRzIHdoaWNoIG5lZWQgZ3RrKy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBSb2dlcmlvIE51bmVzIDxyb251bmVzQGdtYWlsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE90YXZpbyBTYWx2YWRvciA8b3RhdmlvQG9zc3lzdGVtcy5jb20uYnI+CisKK1VwZGF0ZSBwYXRjaCBmb3IgYWxzYS10b29scyAxLjAuMjkKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAyNDU3YTFjLi43MjM0NmQ5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMSw5ICsxLDkgQEAKKyBWRVJTSU9OID0gMS4wLjI5CisgVE9QID0gLgorLVNVQkRJUlMgPSBhczEwazEgZW52eTI0Y29udHJvbCBcCistCSAgbWl4YXJ0bG9hZGVyIHBjeGhybG9hZGVyIHJtZWRpZ2ljb250cm9sIHNiMTZfY3NwIHNlcSBzc2NhcGVfY3RsIFwKKy0JICB1czQyOGNvbnRyb2wgdXN4Mnlsb2FkZXIgdnhsb2FkZXIgZWNob21peGVyIFwKKy0JICBod21peHZvbHVtZSBoZGFqYWNrcmV0YXNrIGhkYS12ZXJiIGhkYWphY2tzZW5zZXRlc3QKKytTVUJESVJTID0gYXMxMGsxIFwKKysJICBtaXhhcnRsb2FkZXIgcGN4aHJsb2FkZXIgc2IxNl9jc3Agc2VxIHNzY2FwZV9jdGwgXAorKwkgIHVzNDI4Y29udHJvbCB1c3gyeWxvYWRlciB2eGxvYWRlciBcCisrCSAgaHdtaXh2b2x1bWUgaGRhLXZlcmIgaGRhamFja3NlbnNldGVzdAorIAorIGFsbDoKKyAJQGZvciBpIGluICQoU1VCRElSUyk7IGRvIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS10b29sc18xLjAuMjkuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjM5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdG9vbHNfMS4wLjI5LmJiCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiQWR2YW5jZWQgdG9vbHMgZm9yIGNlcnRhaW4gQUxTQSBzb3VuZCBjYXJkIGRyaXZlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVndHJhY2suYWxzYS1wcm9qZWN0Lm9yZy9hbHNhLWJ1Zy9sb2dpbl9wYWdlLnBocCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiR1BMdjIgJiBMR1BMdjIrIgorREVQRU5EUyA9ICJhbHNhLWxpYiBuY3Vyc2VzIGdsaWItMi4wIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9oZHNwbG9hZGVyL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xkMTBrMS9DT1BZSU5HLkxJQjttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmFsc2EtcHJvamVjdC5vcmcvcHViL3Rvb2xzLyR7QlB9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vYXV0b3Rvb2xzLnBhdGNoIFwKKyAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL21ha2VmaWxlX25vX2d0ay5wYXRjaCcsIGQpfSBcCisgICAgICAgICAgIGZpbGU6Ly9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hczEwazEtTWFrZS1vdXRwdXRfdHJhbV9saW5lLXN0YXRpYy1pbmxpbmUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImYzMzlhM2NkMjRmNzQ4YzlkMDA3YmRmZjBlOTg3NzViIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjk0YWJmMGFiNWE3M2YwNzEwYzcwZDRmYjNkYzEwMDNhZjViYWUyZDJlZDcyMWQ1OWQyNDViNDFhZDBmMmZiZDEiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworQ0xFQU5CUk9LRU4gPSAiMSIKKworRVhUUkFfT0VNQUtFICs9ICJHSVRDT01QSUxFX0FSR1M9Jy0taG9zdD0ke0hPU1RfU1lTfSAtLWJ1aWxkPSR7QlVJTERfU1lTfSAtLXRhcmdldD0ke1RBUkdFVF9TWVN9IC0td2l0aC1saWJ0b29sLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9IT1NUfSAtLXByZWZpeD0ke3ByZWZpeH0nIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ3RrKycsICcnLCBkKX0iCitQQUNLQUdFQ09ORklHW2d0aytdID0gIiwsZ3RrKyBndGsrMywiCisKKyMgY29uZmlndXJlLmFjLy5pbiBkb2Vzbid0IGV4aXN0IHNvIGZvcmNlIGNvcHkKK0FVVE9UT09MU19DT1BZQUNMT0NBTCA9ICIxIgorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworICAgICNBdXRvbWFrZSBkaXIgaXMgbm90IGNvcnJlY3RseSBkZXRlY3RlZCBpbiBjcm9zcyBjb21waWxhdGlvbiBjYXNlCisgICAgZXhwb3J0IEFVVE9NQUtFX0RJUj0iJChhdXRvbWFrZSAtLXByaW50LWxpYmRpcikiCisgICAgZXhwb3J0IEFDTE9DQUxfRkxBR1M9Ii0tc3lzdGVtLWFjZGlyPSR7QUNMT0NBTERJUn0vIgorCisgICAgY3AgJHtXT1JLRElSfS9naXRjb21waWxlX2hkYWphY2tzZW5zZXRlc3QgJHtTfS9oZGFqYWNrc2Vuc2V0ZXN0L2dpdGNvbXBpbGUKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbGQxMGsxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLXNjcmlwdHNfMS4wLjI5LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OGY5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMtc2NyaXB0c18xLjAuMjkuYmIKQEAgLTAsMCArMSwyMSBAQAorcmVxdWlyZSBhbHNhLXV0aWxzXyR7UFZ9LmJiCisKK1NVTU1BUlkgPSAiU2hlbGwgc2NyaXB0cyB0aGF0IHNob3cgaGVscCBpbmZvIGFuZCBjcmVhdGUgQUxTQSBjb25maWd1cmF0aW9uIGZpbGVzIgorUFJPVklERVMgPSAiYWxzYS11dGlscy1hbHNhY29uZiIKKworRklMRVNFWFRSQVBBVEhTX3ByZXBlbmQgOj0gIiR7VEhJU0RJUn0vYWxzYS11dGlsczoiCisKK1BBQ0tBR0VTID0gIiR7UE59IgorUkRFUEVORFNfJHtQTn0gKz0gImJhc2giCisKK0ZJTEVTXyR7UE59ID0gIiR7c2JpbmRpcn0vYWxzYWNvbmYgXAorICAgICAgICAgICAgICAgJHtzYmluZGlyfS9hbHNhLWluZm8uc2ggXAorICAgICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9hbHNhLXV0aWxzLSR7UFZ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c2JpbmRpcn0KKwlpbnN0YWxsIC1tIDA3NTUgJHtCfS9hbHNhY29uZi9hbHNhY29uZiAke0R9JHtzYmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgJHtTfS9hbHNhLWluZm8vYWxzYS1pbmZvLnNoICR7RH0ke3NiaW5kaXJ9LworfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzLzAwMDEtYWxzYWN0bC1kb24tdC1sZXQtc3lzdGVtZC11bml0LXJlc3RvcmUtdGhlLXZvbHVtZS13aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5ZGQ1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy8wMDAxLWFsc2FjdGwtZG9uLXQtbGV0LXN5c3RlbWQtdW5pdC1yZXN0b3JlLXRoZS12b2x1bWUtd2gucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorRnJvbSA0M2E1NmZhMzZhMTJmMDljY2Q3OGIzY2Y1ZTZhZTE5N2ZjYWI1MDFmIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK0RhdGU6IEZyaSwgMjkgQXVnIDIwMTQgMTg6NTg6NTYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gYWxzYWN0bDogZG9uJ3QgbGV0IHN5c3RlbWQgdW5pdCByZXN0b3JlIHRoZSB2b2x1bWUgd2hlbgorIGFzb3VuZC5zdGF0ZSBpcyBtaXNzaW5nCisKK1RoaXMgYXZvaWRzIGFuIGVycm9yIG9uIGJvb3R1cAorCitGaWxlZCBhcyBodHRwczovL2J1Z3RyYWNrLmFsc2EtcHJvamVjdC5vcmcvYWxzYS1idWcvdmlldy5waHA/aWQ9NTQ1OQorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS29lbiBLb29pIDxrb2VuQGRvbWluaW9uLnRocnVoZXJlLm5ldD4KK1NpZ25lZC1vZmYtYnk6IENyaXN0aWFuIElvcmdhIDxjcmlzdGlhbi5pb3JnYUBpbnRlbC5jb20+CistLS0KKyBhbHNhY3RsL01ha2VmaWxlLmFtICAgICAgICAgICAgIHwgNyArKysrLS0tCisgYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbiB8IDEgKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9NYWtlZmlsZS5hbSBiL2Fsc2FjdGwvTWFrZWZpbGUuYW0KK2luZGV4IDQ3ZjA2ZTkuLmI3MjhjMDYgMTAwNjQ0CistLS0gYS9hbHNhY3RsL01ha2VmaWxlLmFtCisrKysgYi9hbHNhY3RsL01ha2VmaWxlLmFtCitAQCAtNDMsOSArNDMsMTAgQEAgaW5zdGFsbC1kYXRhLWhvb2s6CisgZW5kaWYKKyAKKyBlZGl0ID0gXAorLQkkKFNFRCkgLXIgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKy0JCSAgLWUgJ3MsQG15ZGF0YWRpclxALCQobXlkYXRhZGlyKSxnJyBcCistCQkgIC1lICdzLEBkYWVtb25zd2l0Y2hcQCwkKEFMU0FDVExfREFFTU9OU1dJVENIKSxnJyBcCisrCSQoU0VEKSAtZSAncyxAbG9jYWxzdGF0ZWRpclxALCQobG9jYWxzdGF0ZWRpciksZycgXAorKwkgICAgICAgLWUgJ3MsQHNiaW5kaXJcQCwkKHNiaW5kaXIpLGcnIFwKKysJICAgICAgIC1lICdzLEBteWRhdGFkaXJcQCwkKG15ZGF0YWRpciksZycgXAorKwkgICAgICAgLWUgJ3MsQGRhZW1vbnN3aXRjaFxALCQoQUxTQUNUTF9EQUVNT05TV0lUQ0gpLGcnIFwKKyAJCQkJCQkJPCAkPCA+ICRAIHx8IHJtICRACisgCisgYWxzYS1zdGF0ZS5zZXJ2aWNlOiBhbHNhLXN0YXRlLnNlcnZpY2UuaW4KK2RpZmYgLS1naXQgYS9hbHNhY3RsL2Fsc2EtcmVzdG9yZS5zZXJ2aWNlLmluIGIvYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbgoraW5kZXggMjQ1YTQzOS4uYjAxNzg1NCAxMDA2NDQKKy0tLSBhL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KKysrKyBiL2Fsc2FjdGwvYWxzYS1yZXN0b3JlLnNlcnZpY2UuaW4KK0BAIC0xMCw2ICsxMCw3IEBAIERlZmF1bHREZXBlbmRlbmNpZXM9bm8KKyBBZnRlcj1hbHNhLXN0YXRlLnNlcnZpY2UKKyBCZWZvcmU9c2h1dGRvd24udGFyZ2V0CisgQ29uZmxpY3RzPXNodXRkb3duLnRhcmdldAorK0NvbmRpdGlvblBhdGhFeGlzdHM9QGxvY2Fsc3RhdGVkaXJAL2xpYi9hbHNhL2Fzb3VuZC5zdGF0ZQorIAorIFtTZXJ2aWNlXQorIFR5cGU9b25lc2hvdAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9hbHNhL2Fsc2EtdXRpbHMvYWxzYS11dGlscy1hcGxheS1pbnRlcnJ1cHQtc2lnbmFsLWhhbmRsaW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fsc2EtdXRpbHMtYXBsYXktaW50ZXJydXB0LXNpZ25hbC1oYW5kbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGYwMDRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fsc2EtdXRpbHMtYXBsYXktaW50ZXJydXB0LXNpZ25hbC1oYW5kbGluZy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworYXBsYXkvYXJlY29yZCAoYWxzYS11dGlscyB2MS4wLjI4KSBjYW5ub3QgaW50ZXJydXB0IHN0cmVhbWluZwordmlhIENUUkwtQy4gRml4ZWQgdGhlIGlzc3VlIGJ5IHJldmVydGluZyBidWdneSBwYXRjaGVzIGFuZAorcHJvcGVybHkgaGFuZGxpbmcgJ2luX2Fib3J0aW5nJyBmbGFnIGluIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucy4KKworU2lnbmVkLW9mZi1ieTogQW5hbnQgQWdyYXdhbCA8QW5hbnRfQWdyYXdhbEBtZW50b3IuY29tPgorU2lnbmVkLW9mZi1ieTogTWlraGFpbCBEdXJuZXYgPG1pa2hhaWxfZHVybmV2QG1lbnRvci5jb20+CisKKy0tLSBhL2FwbGF5L2FwbGF5LmMJMjAxNC0wNS0xOSAxNjoyNToxNC4wMDAwMDAwMDAgKzA1MzAKKysrKyBiL2FwbGF5L2FwbGF5LmMJMjAxNC0wNS0yMCAxNToxNzoxNC4zNjQ4MjMwMDcgKzA1MzAKK0BAIC0zOTIsMTQgKzM5MiwyMiBAQAorIAkJcHV0Y2hhcignXG4nKTsKKyAJaWYgKCFxdWlldF9tb2RlKQorIAkJZnByaW50ZihzdGRlcnIsIF8oIkFib3J0ZWQgYnkgc2lnbmFsICVzLi4uXG4iKSwgc3Ryc2lnbmFsKHNpZykpOworLQlpZiAoaGFuZGxlKQorKwlpZiAoc3RyZWFtID09IFNORF9QQ01fU1RSRUFNX0NBUFRVUkUpIHsKKysJCWlmIChmbXRfcmVjX3RhYmxlW2ZpbGVfdHlwZV0uZW5kKSB7CisrCQkJZm10X3JlY190YWJsZVtmaWxlX3R5cGVdLmVuZChmZCk7CisrCQkJZmQgPSAtMTsKKysJCX0KKysJCXN0cmVhbSA9IC0xOworKwl9CisrCWlmIChmZCA+IDEpIHsKKysJCWNsb3NlKGZkKTsKKysJCWZkID0gLTE7CisrCX0KKysJaWYgKGhhbmRsZSAmJiBzaWcgIT0gU0lHQUJSVCkgeworIAkJc25kX3BjbV9hYm9ydChoYW5kbGUpOworLQlpZiAoc2lnID09IFNJR0FCUlQpIHsKKy0JCS8qIGRvIG5vdCBjYWxsIHNuZF9wY21fY2xvc2UoKSBhbmQgYWJvcnQgaW1tZWRpYXRlbHkgKi8KKyAJCWhhbmRsZSA9IE5VTEw7CistCQlwcmdfZXhpdChFWElUX0ZBSUxVUkUpOworIAl9CistCXNpZ25hbChzaWcsIHNpZ25hbF9oYW5kbGVyKTsKKysJcHJnX2V4aXQoRVhJVF9GQUlMVVJFKTsKKyB9CisgCisgLyogY2FsbCBvbiBTSUdVU1IxIHNpZ25hbC4gKi8KK0BAIC0yMDk2LDcgKzIxMDQsNyBAQAorIAlzc2l6ZV90IHJlc3VsdCA9IGNvdW50LCByOworIAlzaXplX3Qgc2l6ZTsKKyAKKy0Jd2hpbGUgKGNvdW50ID4gMCkgeworKwl3aGlsZSAoY291bnQgPiAwICYmICFpbl9hYm9ydGluZykgeworIAkJc2l6ZSA9IGNvdW50OworIAkJaWYgKHNpemUgPiBjaHVua19ieXRlcyAtIGJ1ZmZlcl9wb3MpCisgCQkJc2l6ZSA9IGNodW5rX2J5dGVzIC0gYnVmZmVyX3BvczsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlscy9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjcyODNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzL2Fzc3VtZS1zdG9yaW5nLWlzLXN1Y2Nlc3MtaWYtbm90LXNvdW5kLWNhcmQtZGV2aWNlLnBhdGNoCkBAIC0wLDAgKzEsMzQgQEAKK1tQQVRDSF0gYXNzdW1lIHN0b3JpbmcgaXMgc3VjY2VzcyBpZiBub3Qgc291bmQgY2FyZCBkZXZpY2UKKworVXBzdHJlYW0tU3RhdHVlOiBQZW5kaW5nCisKK1N5c3RlbWQgd2lsbCByZXBvcnQgZmFpbHVyZSB3aGVuIHJ1biBhbHNhLSosIGlmIHRoZSBtYWNoaW5lIGhhcyBub3QgdGhlCitzb3VuZCBjYXJkLiBUbyB2b2lkIHRoaXMgYW5ub3llZCBtZXNzYWdlLCBhbHNhLXJlc3RvcmUvYWxzYS1zdGF0ZSBpZ25vcmUKK2FsbCB0aGUgZXhpdCBjb2RlcyBieSBwcmVmaXhpbmcgIi0iIGluIEV4ZWNTdGFydCwgbGlrZToKKworICAgYWxzYS11dGlscy0xLjAuMjkkIGdyZXAgIj0tIiAuLyAtcnxncmVwIHNlcnZpY2UuaW4KKyAgIC4vYWxzYWN0bC9hbHNhLXJlc3RvcmUuc2VydmljZS5pbjpFeGVjU3RhcnQ9LUBzYmluZGlyQC9hbHNhY3RsIHJlc3RvcmUKKyAgIC4vYWxzYWN0bC9hbHNhLXN0YXRlLnNlcnZpY2UuaW46RXhlY1N0YXJ0PS1Ac2JpbmRpckAvYWxzYWN0bCAtcyAtbiAxOSAtYyByZGFlbW9uCisgICAuL2Fsc2FjdGwvYWxzYS1zdGF0ZS5zZXJ2aWNlLmluOkV4ZWNTdG9wPS1Ac2JpbmRpckAvYWxzYWN0bCAtcyBraWxsIHNhdmVfYW5kX3F1aXQKKyAgIGxzYS11dGlscy0xLjAuMjkkCisKK0J1dCBhbHNhLXN0b3JlLnNlcnZpY2UuaW4gaXMgbWlzc2luZywgYW5kIGJldHRlciBzb2x1dGlvbiBpcyB0byBpZ25vcmUKK3RoZSBleGl0IGNvZGUgMTkgd2hpY2ggbWVhbnMgbm90IHNvdW5kIGNhcmQgZGV2aWNlLCBub3QgYWxsIGV4aXQgY29kZQorCitTaWduZWQtb2ZmLWJ5OiBSb3kgTGkgPHJvbmdxaW5nLmxpQHdpbmRyaXZlci5jb20+CistLS0KKyBhbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbiB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvYWxzYWN0bC9hbHNhLXN0b3JlLnNlcnZpY2UuaW4gYi9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgoraW5kZXggZjFhNTZiYi4uNjhjYTUyOSAxMDA2NDQKKy0tLSBhL2Fsc2FjdGwvYWxzYS1zdG9yZS5zZXJ2aWNlLmluCisrKysgYi9hbHNhY3RsL2Fsc2Etc3RvcmUuc2VydmljZS5pbgorQEAgLTEzLDMgKzEzLDQgQEAgQmVmb3JlPXNodXRkb3duLnRhcmdldAorIFR5cGU9b25lc2hvdAorIEV4ZWNTdGFydD1Ac2JpbmRpckAvYWxzYWN0bCBzdG9yZQorIFN0YW5kYXJkT3V0cHV0PXN5c2xvZworK1N1Y2Nlc3NFeGl0U3RhdHVzPTAgMTkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvYWxzYS9hbHNhLXV0aWxzXzEuMC4yOS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjAuMjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmZTRiMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2Fsc2EvYWxzYS11dGlsc18xLjAuMjkuYmIKQEAgLTAsMCArMSw5NyBAQAorU1VNTUFSWSA9ICJBTFNBIHNvdW5kIHV0aWxpdGllcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd0cmFjay5hbHNhLXByb2plY3Qub3JnL2Fsc2EtYnVnL2xvZ2luX3BhZ2UucGhwIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hbHNhY3RsL3V0aWxzLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9ZmU5NTI2YjA1NWUyNDZiNTU1ODgwOWE1YWUyNWMwYjkiCitERVBFTkRTID0gImFsc2EtbGliIG5jdXJzZXMgbGlic2FtcGxlcmF0ZTAiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJ1ZGV2IgorUEFDS0FHRUNPTkZJR1t1ZGV2XSA9ICItLXdpdGgtdWRldi1ydWxlcy1kaXI9YHBrZy1jb25maWcgLS12YXJpYWJsZT11ZGV2ZGlyIHVkZXZgL3J1bGVzLmQsLHVkZXYiCitQQUNLQUdFQ09ORklHW3htbHRvXSA9ICItLWVuYWJsZS14bWx0bywgLS1kaXNhYmxlLXhtbHRvLCB4bWx0by1uYXRpdmUgZG9jYm9vay14bWwtZHRkNC1uYXRpdmUgZG9jYm9vay14c2wtc3R5bGVzaGVldHMtbmF0aXZlIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5hbHNhLXByb2plY3Qub3JnL3B1Yi91dGlscy9hbHNhLXV0aWxzLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1hbHNhY3RsLWRvbi10LWxldC1zeXN0ZW1kLXVuaXQtcmVzdG9yZS10aGUtdm9sdW1lLXdoLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Fsc2EtdXRpbHMtYXBsYXktaW50ZXJydXB0LXNpZ25hbC1oYW5kbGluZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hc3N1bWUtc3RvcmluZy1pcy1zdWNjZXNzLWlmLW5vdC1zb3VuZC1jYXJkLWRldmljZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmIyODliZjg3NGM0YzlhNjNmNGIzOTczMDkzZGQ0MDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTE2MDA1OGYzZTE0NDgzY2VkNWRlOTE5ZGQ0NzNmOTM5MzIwNTk0NTQ1MzBhOWI3ZWY5N2RjYWJkNjgzM2U5YiIKKworIyBsYXp5IGhhY2suIG5lZWRzIHByb3BlciBmaXhpbmcgaW4gZ2V0dGV4dC5tNCwgc2VlCisjIGh0dHA6Ly9idWdzLm9wZW5lbWJlZGRlZC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDgKKyMgcGxlYXNlIGNsb3NlIGJ1ZyBhbmQgcmVtb3ZlIHRoaXMgY29tbWVudCB3aGVuIHByb3Blcmx5IGZpeGVkCisjCitFWFRSQV9PRUNPTkZfYXBwZW5kX2xpYmMtdWNsaWJjID0gIiAtLWRpc2FibGUtbmxzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHBrZ2NvbmZpZworCisjIFRoaXMgYXJlIGFsbCBwYWNrYWdlcyB0aGF0IHdlIG5lZWQgdG8gbWFrZS4gQWxzbywgdGhlIG5vdyBlbXB0eSBhbHNhLXV0aWxzCisjIGlwayBkZXBlbmRzIG9uIHRoZW0uCisKK0FMU0FfVVRJTFNfUEtHUyA9ICJcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhbWl4ZXIgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtbWlkaSBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hcGxheSBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbWl4ZXIgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWNvbm5lY3QgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtaWVjc2V0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0IFwKKyAgICAgICAgICAgICBhbHNhLXV0aWxzLWFzZXFuZXQgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYXNlcWR1bXAgXAorICAgICAgICAgICAgIGFsc2EtdXRpbHMtYWxzYWN0bCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhbG9vcCBcCisgICAgICAgICAgICAgYWxzYS11dGlscy1hbHNhdWNtIFwKKyAgICAgICAgICAgICIKKworUEFDS0FHRVMgKz0gIiR7QUxTQV9VVElMU19QS0dTfSIKK1JERVBFTkRTXyR7UE59ICs9ICIke0FMU0FfVVRJTFNfUEtHU30iCisKK0ZJTEVTXyR7UE59ID0gIiIKK0ZJTEVTX2Fsc2EtdXRpbHMtYXBsYXkgICAgICAgPSAiJHtiaW5kaXJ9L2FwbGF5ICR7YmluZGlyfS9hcmVjb3JkIgorRklMRVNfYWxzYS11dGlscy1hbWl4ZXIgICAgICA9ICIke2JpbmRpcn0vYW1peGVyIgorRklMRVNfYWxzYS11dGlscy1hbHNhbWl4ZXIgICA9ICIke2JpbmRpcn0vYWxzYW1peGVyIgorRklMRVNfYWxzYS11dGlscy1zcGVha2VydGVzdCA9ICIke2JpbmRpcn0vc3BlYWtlci10ZXN0ICR7ZGF0YWRpcn0vc291bmRzL2Fsc2EvICR7ZGF0YWRpcn0vYWxzYS9zcGVha2VyLXRlc3QvIgorRklMRVNfYWxzYS11dGlscy1taWRpICAgICAgICA9ICIke2JpbmRpcn0vYXBsYXltaWRpICR7YmluZGlyfS9hcmVjb3JkbWlkaSAke2JpbmRpcn0vYW1pZGkiCitGSUxFU19hbHNhLXV0aWxzLWFjb25uZWN0ICAgID0gIiR7YmluZGlyfS9hY29ubmVjdCIKK0ZJTEVTX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgPSAiJHtiaW5kaXJ9L2FzZXFuZXQiCitGSUxFU19hbHNhLXV0aWxzLWllY3NldCAgICAgID0gIiR7YmluZGlyfS9pZWNzZXQiCitGSUxFU19hbHNhLXV0aWxzLWFsc2FjdGwgICAgID0gIiR7c2JpbmRpcn0vYWxzYWN0bCAqL3VkZXYvcnVsZXMuZCAqLyovdWRldi9ydWxlcy5kICR7c3lzdGVtZF91bml0ZGlyfSAke2xvY2Fsc3RhdGVkaXJ9L2xpYi9hbHNhICR7ZGF0YWRpcn0vYWxzYS9pbml0LyIKK0ZJTEVTX2Fsc2EtdXRpbHMtYXNlcWR1bXAgICAgPSAiJHtiaW5kaXJ9L2FzZXFkdW1wIgorRklMRVNfYWxzYS11dGlscy1hbHNhbG9vcCAgICA9ICIke2JpbmRpcn0vYWxzYWxvb3AiCitGSUxFU19hbHNhLXV0aWxzLWFsc2F1Y20gICAgID0gIiR7YmluZGlyfS9hbHNhdWNtIgorCisKK1NVTU1BUllfYWxzYS11dGlscy1hcGxheSAgICAgICAgPSAiUGxheSAoYW5kIHJlY29yZCkgc291bmQgZmlsZXMgdXNpbmcgQUxTQSIKK1NVTU1BUllfYWxzYS11dGlscy1hbWl4ZXIgICAgICAgPSAiQ29tbWFuZC1saW5lIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2FtaXhlciAgICA9ICJuY3Vyc2VzLWJhc2VkIGNvbnRyb2wgZm9yIEFMU0EgbWl4ZXIgYW5kIHNldHRpbmdzIgorU1VNTUFSWV9hbHNhLXV0aWxzLXNwZWFrZXJ0ZXN0ICA9ICJBTFNBIHN1cnJvdW5kIHNwZWFrZXIgdGVzdCB1dGlsaXR5IgorU1VNTUFSWV9hbHNhLXV0aWxzLW1pZGkgICAgICAgICA9ICJNaXNjZWxsYW5lb3VzIE1JREkgdXRpbGl0aWVzIGZvciBBTFNBIgorU1VNTUFSWV9hbHNhLXV0aWxzLWFjb25uZWN0ICAgICA9ICJBTFNBIHNlcXVlbmNlciBjb25uZWN0aW9uIG1hbmFnZXIiCitTVU1NQVJZX2Fsc2EtdXRpbHMtYXNlcW5ldCAgICAgID0gIk5ldHdvcmsgY2xpZW50L3NlcnZlciBmb3IgQUxTQSBzZXF1ZW5jZXIiCitTVU1NQVJZX2Fsc2EtdXRpbHMtaWVjc2V0ICAgICAgID0gIkFMU0EgdXRpbGl0eSBmb3Igc2V0dGluZy9zaG93aW5nIElFQzk1OCAoUy9QRElGKSBzdGF0dXMgYml0cyIKK1NVTU1BUllfYWxzYS11dGlscy1hbHNhY3RsICAgICAgPSAiU2F2ZXMvcmVzdG9yZXMgQUxTQS1zZXR0aW5ncyBpbiAvZXRjL2Fzb3VuZC5zdGF0ZSIKK1NVTU1BUllfYWxzYS11dGlscy1hc2VxZHVtcCAgICAgPSAiU2hvd3MgdGhlIGV2ZW50cyByZWNlaXZlZCBhdCBhbiBBTFNBIHNlcXVlbmNlciBwb3J0IgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2Fsb29wICAgICA9ICJBTFNBIFBDTSBsb29wYmFjayB1dGlsaXR5IgorU1VNTUFSWV9hbHNhLXV0aWxzLWFsc2F1Y20gICAgICA9ICJBTFNBIFVzZSBDYXNlIE1hbmFnZXIiCisKK1JSRUNPTU1FTkRTX2Fsc2EtdXRpbHMtYWxzYWN0bCA9ICJhbHNhLXN0YXRlcyIKKworQUxMT1dfRU1QVFlfYWxzYS11dGlscyA9ICIxIgorCitkb19pbnN0YWxsKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwkjIFdlIGRvbid0IHNoaXAgdGhpcyBoZXJlIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBkZXBlbmRlbmN5IG9uIGJhc2guCisJIyBTZWUgYWxzYS11dGlscy1zY3JpcHRzXyR7UFZ9LmJiCisJcm0gJHtEfSR7c2JpbmRpcn0vYWxzYWNvbmYKKwlybSAke0R9JHtzYmluZGlyfS9hbHNhLWluZm8uc2gKKworCWlmICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3VkZXYnLCAnZmFsc2UnLCAndHJ1ZScsIGQpfTsgdGhlbgorCSAgICMgVGhpcyBpcyB3aGVyZSBhbHNhLXV0aWxzIHdpbGwgaW5zdGFsbCBpdHMgcnVsZXMgaWYgd2UgZG9uJ3QgdGVsbCBpdCBhbnl0aGluZyBlbHNlLgorCSAgIHJtIC1yZiAke0R9L2xpYi91ZGV2CisJICAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgJHtEfS9saWIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZmxhYy9mbGFjXzEuMy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNTI3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9mbGFjL2ZsYWNfMS4zLjEuYmIKQEAgLTAsMCArMSw0MiBAQAorU1VNTUFSWSA9ICJGcmVlIExvc3NsZXNzIEF1ZGlvIENvZGVjIgorREVTQ1JJUFRJT04gPSAiRkxBQyBzdGFuZHMgZm9yIEZyZWUgTG9zc2xlc3MgQXVkaW8gQ29kZWMsIGEgbG9zc2xlc3MgYXVkaW8gY29tcHJlc3Npb24gZm9ybWF0LiIKK0hPTUVQQUdFID0gImh0dHBzOi8veGlwaC5vcmcvZmxhYy8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9mbGFjL2J1Z3MvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHRkRMLTEuMiAmIEdQTHYyKyAmIExHUEx2Mi4xKyAmIEJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuRkRMO21kNT1hZDE0MTllY2M1NmUwNjBlY2NmODE4NGE4N2M0Mjg1ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvTWFrZWZpbGUuYW07YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9MGE4NTNiODFkOWQ0M2Q4YWFkM2I1M2IwNWNmY2MzN2UgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5HUEw7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9mbGFjL21haW4uYztiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1kMDNhNzY2NTU4ZDIzM2Y5Y2MzYWM1ZGZhZmQ0OWRlYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9wbHVnaW5fY29tbW9uL2FsbC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTdjOGEzYjllMWU2NmVkMGFiYTc2NWJjNmYzNWRhODVkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuWGlwaDttZDU9YTJjNGI3MWMwMTk4NjgyMzc2ZDQ4M2ViNWJjYzkxOTcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9GTEFDL2FsbC5oO2JlZ2lubGluZT02NTtlbmRsaW5lPTcwO21kNT02NDQ3NGYyYjIyZTllNzdiMjhkOGI4YjI1Yzk4M2E0OCIKK0RFUEVORFMgPSAibGlib2dnIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvZmxhYy8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiOTkyMmM5YTAzNzhjODhkM2U5MDFiMjM0Zjg1MjY5OCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0NzczYzAwOTlkYmE3NjdkOTYzZmQ5MjE0MzI2M2JlMzM4YzQ4NzAyMTcyZTg3NTRiOWJjNTEwM2VmZTFjNTZjIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtb2dndGVzdCBcCisgICAgICAgICAgICAgICAgLS13aXRoLW9nZy1saWJyYXJpZXM9JHtTVEFHSU5HX0xJQkRJUn0gXAorICAgICAgICAgICAgICAgIC0td2l0aC1vZ2ctaW5jbHVkZXM9JHtTVEFHSU5HX0lOQ0RJUn0gXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS14bW1zLXBsdWdpbiBcCisgICAgICAgICAgICAgICAgLS13aXRob3V0LWxpYmljb252LXByZWZpeCBcCisgICAgICAgICAgICAgICAgYWNfY3ZfcHJvZ19OQVNNPSIiIFwKKyAgICAgICAgICAgICAgICAiCisKK0VYVFJBX09FQ09ORiArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAiYWx0aXZlYyIsICIgLS1lbmFibGUtYWx0aXZlYyIsICIgLS1kaXNhYmxlLWFsdGl2ZWMiLCBkKX0iCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgImNvcmUyIiwgIiAtLWVuYWJsZS1zc2UiLCAiIiwgZCl9IgorRVhUUkFfT0VDT05GICs9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJjb3JlaTciLCAiIC0tZW5hYmxlLXNzZSIsICIiLCBkKX0iCisKK1BBQ0tBR0VTICs9ICJsaWJmbGFjIGxpYmZsYWMrKyBsaWJvZ2dmbGFjIGxpYm9nZ2ZsYWMrKyIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGliZmxhYyA9ICIke2xpYmRpcn0vbGliRkxBQy5zby4qIgorRklMRVNfbGliZmxhYysrID0gIiR7bGliZGlyfS9saWJGTEFDKysuc28uKiIKK0ZJTEVTX2xpYm9nZ2ZsYWMgPSAiJHtsaWJkaXJ9L2xpYk9nZ0ZMQUMuc28uKiIKK0ZJTEVTX2xpYm9nZ2ZsYWMrKyA9ICIke2xpYmRpcn0vbGliT2dnRkxBQysrLnNvLioiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL0FkZC1lcnJvci1zaWduYWwtZW1pc3Npb24tZm9yLW1pc3NpbmctcGx1Z2lucy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTJkNDZkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvQWRkLWVycm9yLXNpZ25hbC1lbWlzc2lvbi1mb3ItbWlzc2luZy1wbHVnaW5zLnBhdGNoCkBAIC0wLDAgKzEsMjUyIEBACitGcm9tIGQ2NGM3ZWRiNjZmNGE2NGZmNDljNDMwNmNmNzdmZDI2OWI3MDc5YWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogTW9uLCAxNiBNYXIgMjAxNSAxMzo0NTozMCArMDIwMAorU3ViamVjdDogW1BBVENIXSBBZGQgZXJyb3Igc2lnbmFsIGVtaXNzaW9uIGZvciBtaXNzaW5nIHBsdWdpbnMKKworQWRkIGEgbWlzc2luZyBwbHVnaW5zIGVycm9yIHNpZ25hbCB0byBnc3QtcGxheWVyLiBOb3RlIHRoYXQgdGhpcyBlcnJvcgorZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGUgcGxheWJhY2sgaGFzIGNvbXBsZXRlbHkgZmFpbGVkLCBidXQgaW4KK3ByYWN0aWNlIHRoZSB1c2VyIGV4cGVyaWVuY2Ugd2lsbCBiZSBiYWQgKHRoaW5rLCBlLmcuIG9mIGEgbXA0IGZpbGUKK3doZXJlIEguMjY0IGNvZGVjIGlzIG1pc3Npbmc6IEFBQyBwbGF5YmFjayBzdGlsbCB3b3Jrcy4uLikuCisKK1VzZSB0aGUgc2lnbmFsIGluIGd0ay1wbGF5IHRvIHNob3cgYSBpbmZvYmFyIGlmIHBsdWdpbnMgYXJlIG1pc3NpbmcuCisKK1N1Ym1pdHRlZCB1cHN0cmVhbSBhdCBodHRwczovL2dpdGh1Yi5jb20vc2Ryb2VnZS9nc3QtcGxheWVyL3B1bGwvMTEKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICB8ICAyICstCisgZ3RrL2d0ay1wbGF5LmMgICAgICAgICAgICAgfCA1NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgfCAyMiArKysrKysrKysrKysrKysrKysrCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmggfCAgMyArKy0KKyA0IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IDkwYWI3NGMuLjZjZGI0ZWIgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTUzLDcgKzUzLDcgQEAgQUNfU1VCU1QoTFRfQUdFKQorIFBLR19QUk9HX1BLR19DT05GSUcKKyAKKyBQS0dfQ0hFQ0tfTU9EVUxFUyhHTElCLCBbZ2xpYi0yLjAgZ29iamVjdC0yLjBdKQorLVBLR19DSEVDS19NT0RVTEVTKEdTVFJFQU1FUiwgW2dzdHJlYW1lci0xLjAgPj0gMS40IGdzdHJlYW1lci12aWRlby0xLjAgPj0gMS40XSkKKytQS0dfQ0hFQ0tfTU9EVUxFUyhHU1RSRUFNRVIsIFtnc3RyZWFtZXItMS4wID49IDEuNCBnc3RyZWFtZXItdmlkZW8tMS4wID49IDEuNCBnc3RyZWFtZXItcGJ1dGlscy0xLjBdKQorIAorIEdMSUJfUFJFRklYPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1wcmVmaXggZ2xpYi0yLjBgIgorIEFDX1NVQlNUKEdMSUJfUFJFRklYKQorZGlmZiAtLWdpdCBhL2d0ay9ndGstcGxheS5jIGIvZ3RrL2d0ay1wbGF5LmMKK2luZGV4IGI5Mjc3M2IuLmUyYjYwNWEgMTAwNjQ0CistLS0gYS9ndGsvZ3RrLXBsYXkuYworKysrIGIvZ3RrL2d0ay1wbGF5LmMKK0BAIC0zMCw2ICszMCw4IEBAIHR5cGVkZWYgc3RydWN0CisgICBHdGtXaWRnZXQgKnByZXZfYnV0dG9uLCAqbmV4dF9idXR0b247CisgICBHdGtXaWRnZXQgKnNlZWtiYXI7CisgICBHdGtXaWRnZXQgKnZpZGVvX2FyZWE7CisrICBHdGtXaWRnZXQgKmluZm9fbGFiZWw7CisrICBHdGtXaWRnZXQgKmluZm9fYmFyOworICAgR3RrV2lkZ2V0ICp2b2x1bWVfYnV0dG9uOworICAgZ3Vsb25nIHNlZWtiYXJfdmFsdWVfY2hhbmdlZF9zaWduYWxfaWQ7CisgICBnYm9vbGVhbiBwbGF5aW5nOworQEAgLTE0MSw2ICsxNDMsMTMgQEAgcGxheV9wYXVzZV9jbGlja2VkX2NiIChHdGtCdXR0b24gKiBidXR0b24sIEd0a1BsYXkgKiBwbGF5KQorIH0KKyAKKyBzdGF0aWMgdm9pZAorK2NsZWFyX21pc3NpbmdfcGx1Z2lucyAoR3RrUGxheSAqIHBsYXkpCisreworKyAgZ3RrX2xhYmVsX3NldF90ZXh0IChHVEtfTEFCRUwgKHBsYXktPmluZm9fbGFiZWwpLCAiIik7CisrICBndGtfd2lkZ2V0X2hpZGUgKHBsYXktPmluZm9fYmFyKTsKKyt9CisrCisrc3RhdGljIHZvaWQKKyBza2lwX3ByZXZfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB7CisgICBHTGlzdCAqcHJldjsKK0BAIC0xNTUsNiArMTY0LDcgQEAgc2tpcF9wcmV2X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgCisgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPm5leHRfYnV0dG9uLCBUUlVFKTsKKyAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAocGxheS0+cGxheWVyLCBwcmV2LT5kYXRhKTsKKysgIGNsZWFyX21pc3NpbmdfcGx1Z2lucyAocGxheSk7CisgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICBzZXRfdGl0bGUgKHBsYXksIHByZXYtPmRhdGEpOworICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5wcmV2X2J1dHRvbiwgZ19saXN0X3ByZXZpb3VzIChwcmV2KSAhPSBOVUxMKTsKK0BAIC0xNzUsNiArMTg1LDcgQEAgc2tpcF9uZXh0X2NsaWNrZWRfY2IgKEd0a0J1dHRvbiAqIGJ1dHRvbiwgR3RrUGxheSAqIHBsYXkpCisgCisgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUgKHBsYXktPnByZXZfYnV0dG9uLCBUUlVFKTsKKyAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAocGxheS0+cGxheWVyLCBuZXh0LT5kYXRhKTsKKysgIGNsZWFyX21pc3NpbmdfcGx1Z2lucyAocGxheSk7CisgICBnc3RfcGxheWVyX3BsYXkgKHBsYXktPnBsYXllcik7CisgICBzZXRfdGl0bGUgKHBsYXksIG5leHQtPmRhdGEpOworICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgZ19saXN0X25leHQgKG5leHQpICE9IE5VTEwpOworQEAgLTE5MywxMCArMjA0LDE2IEBAIHZvbHVtZV9jaGFuZ2VkX2NiIChHdGtTY2FsZUJ1dHRvbiAqIGJ1dHRvbiwgZ2RvdWJsZSB2YWx1ZSwgR3RrUGxheSAqIHBsYXkpCisgICBnc3RfcGxheWVyX3NldF92b2x1bWUgKHBsYXktPnBsYXllciwgdmFsdWUpOworIH0KKyAKKyt2b2lkCisraW5mb19iYXJfcmVzcG9uc2VfY2IgKEd0a0luZm9CYXIgKiBiYXIsIGdpbnQgcmVzcG9uc2UsIEd0a1BsYXkgKiBwbGF5KQorK3sKKysgIGd0a193aWRnZXRfaGlkZSAoR1RLX1dJREdFVCAoYmFyKSk7CisrfQorKworIHN0YXRpYyB2b2lkCisgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyB7CistICBHdGtXaWRnZXQgKmNvbnRyb2xzLCAqbWFpbl9oYm94LCAqbWFpbl92Ym94OworKyAgR3RrV2lkZ2V0ICpjb250cm9scywgKm1haW5faGJveCwgKm1haW5fdmJveCwgKmluZm9fYmFyLCAqY29udGVudF9hcmVhOworIAorICAgcGxheS0+d2luZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHBsYXktPndpbmRvdyksICJkZWxldGUtZXZlbnQiLAorQEAgLTIwOCw2ICsyMjUsMjAgQEAgY3JlYXRlX3VpIChHdGtQbGF5ICogcGxheSkKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXktPnZpZGVvX2FyZWEsICJyZWFsaXplIiwKKyAgICAgICBHX0NBTExCQUNLICh2aWRlb19hcmVhX3JlYWxpemVfY2IpLCBwbGF5KTsKKyAKKysgIHBsYXktPmluZm9fYmFyID0gZ3RrX2luZm9fYmFyX25ldyAoKTsKKysgIGd0a19pbmZvX2Jhcl9zZXRfbWVzc2FnZV90eXBlIChHVEtfSU5GT19CQVIgKHBsYXktPmluZm9fYmFyKSwKKysgICAgICBHVEtfTUVTU0FHRV9XQVJOSU5HKTsKKysgIC8vZ3RrX2luZm9fYmFyX3NldF9zaG93X2Nsb3NlX2J1dHRvbiAoR1RLX0lORk9fQkFSIChwbGF5LT5pbmZvX2JhciksCisrICAvLyAgICBUUlVFKTsKKysgIGd0a193aWRnZXRfc2V0X25vX3Nob3dfYWxsIChwbGF5LT5pbmZvX2JhciwgVFJVRSk7CisrICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LT5pbmZvX2JhciwgInJlc3BvbnNlIiwKKysgICAgICBHX0NBTExCQUNLIChpbmZvX2Jhcl9yZXNwb25zZV9jYiksIHBsYXkpOworKworKyAgY29udGVudF9hcmVhID0gZ3RrX2luZm9fYmFyX2dldF9jb250ZW50X2FyZWEgKEdUS19JTkZPX0JBUiAocGxheS0+aW5mb19iYXIpKTsKKysgIHBsYXktPmluZm9fbGFiZWwgPSBndGtfbGFiZWxfbmV3ICgiIik7CisrICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoY29udGVudF9hcmVhKSwgcGxheS0+aW5mb19sYWJlbCk7CisrICBndGtfd2lkZ2V0X3Nob3cgKHBsYXktPmluZm9fbGFiZWwpOworKworICAgLyogVW5pZmllZCBwbGF5L3BhdXNlIGJ1dHRvbiAqLworICAgcGxheS0+cGxheV9wYXVzZV9idXR0b24gPQorICAgICAgIGd0a19idXR0b25fbmV3X2Zyb21faWNvbl9uYW1lICgibWVkaWEtcGxheWJhY2stcGF1c2UiLAorQEAgLTI1OCw2ICsyODksNyBAQCBjcmVhdGVfdWkgKEd0a1BsYXkgKiBwbGF5KQorIAorICAgbWFpbl92Ym94ID0gZ3RrX2JveF9uZXcgKEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7CisgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKG1haW5fdmJveCksIG1haW5faGJveCwgVFJVRSwgVFJVRSwgMCk7CisrICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKG1haW5fdmJveCksIHBsYXktPmluZm9fYmFyLCBGQUxTRSwgRkFMU0UsIDApOworICAgZ3RrX2JveF9wYWNrX3N0YXJ0IChHVEtfQk9YIChtYWluX3Zib3gpLCBjb250cm9scywgRkFMU0UsIEZBTFNFLCAwKTsKKyAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChwbGF5LT53aW5kb3cpLCBtYWluX3Zib3gpOworIAorQEAgLTMyMiw2ICszNTQsNyBAQCBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCisgICAgICAgZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlIChwbGF5LT5uZXh0X2J1dHRvbiwgZ19saXN0X25leHQgKG5leHQpICE9IE5VTEwpOworIAorICAgICAgIGdzdF9wbGF5ZXJfc2V0X3VyaSAocGxheS0+cGxheWVyLCBuZXh0LT5kYXRhKTsKKysgICAgICBjbGVhcl9taXNzaW5nX3BsdWdpbnMgKHBsYXkpOworICAgICAgIGdzdF9wbGF5ZXJfcGxheSAocGxheS0+cGxheWVyKTsKKyAgICAgICBzZXRfdGl0bGUgKHBsYXksIG5leHQtPmRhdGEpOworICAgICB9IGVsc2UgeworQEAgLTMzMCw2ICszNjMsMjQgQEAgZW9zX2NiIChHc3RQbGF5ZXIgKiB1bnVzZWQsIEd0a1BsYXkgKiBwbGF5KQorICAgfQorIH0KKyAKKytzdGF0aWMgdm9pZAorK2Vycm9yX2NiIChHc3RQbGF5ZXIgKiBwbGF5ZXIsIEdFcnJvciAqIGVyciwgR3RrUGxheSAqIHBsYXkpCisreworKyAgY2hhciAqbWVzc2FnZTsKKysKKysgIGlmIChnX2Vycm9yX21hdGNoZXMgKGVyciwgZ3N0X3BsYXllcl9lcnJvcl9xdWFyayAoKSwKKysgICAgICBHU1RfUExBWUVSX0VSUk9SX01JU1NJTkdfUExVR0lOKSkgeworKyAgICAvLyBhZGQgbWVzc2FnZSB0byBlbmQgb2YgYW55IGV4aXN0aW5nIG1lc3NhZ2U6IHRoZXJlIG1heSBiZQorKyAgICAvLyBtdWx0aXBsZSBtaXNzaW5nIHBsdWdpbnMuCisrICAgIG1lc3NhZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIlcyVzLiAiLAorKyAgICAgICAgZ3RrX2xhYmVsX2dldF90ZXh0IChHVEtfTEFCRUwgKHBsYXktPmluZm9fbGFiZWwpKSwgZXJyLT5tZXNzYWdlKTsKKysgICAgZ3RrX2xhYmVsX3NldF90ZXh0IChHVEtfTEFCRUwgKHBsYXktPmluZm9fbGFiZWwpLCBtZXNzYWdlKTsKKysgICAgZ19mcmVlIChtZXNzYWdlKTsKKysKKysgICAgZ3RrX3dpZGdldF9zaG93IChwbGF5LT5pbmZvX2Jhcik7CisrICB9CisrfQorKworIGludAorIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyB7CitAQCAtNDIyLDYgKzQ3Myw3IEBAIG1haW4gKGdpbnQgYXJnYywgZ2NoYXIgKiogYXJndikKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKHBsYXkucGxheWVyLCAidmlkZW8tZGltZW5zaW9ucy1jaGFuZ2VkIiwKKyAgICAgICBHX0NBTExCQUNLICh2aWRlb19kaW1lbnNpb25zX2NoYW5nZWRfY2IpLCAmcGxheSk7CisgICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgImVuZC1vZi1zdHJlYW0iLCBHX0NBTExCQUNLIChlb3NfY2IpLCAmcGxheSk7CisrICBnX3NpZ25hbF9jb25uZWN0IChwbGF5LnBsYXllciwgImVycm9yIiwgR19DQUxMQkFDSyAoZXJyb3JfY2IpLCAmcGxheSk7CisgCisgICAvKiBXZSBoYXZlIGZpbGUocykgdGhhdCBuZWVkIHBsYXlpbmcuICovCisgICBzZXRfdGl0bGUgKCZwbGF5LCBnX2xpc3RfZmlyc3QgKHBsYXkudXJpcyktPmRhdGEpOworZGlmZiAtLWdpdCBhL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKK2luZGV4IGJkNjgyZDkuLjc4ZTdiYTEgMTAwNjQ0CistLS0gYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYworKysrIGIvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKK0BAIC00Nyw2ICs0Nyw3IEBACisgCisgI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisrI2luY2x1ZGUgPGdzdC9wYnV0aWxzL21pc3NpbmctcGx1Z2lucy5oPgorIAorIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMgKGdzdF9wbGF5ZXJfZGVidWcpOworICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIGdzdF9wbGF5ZXJfZGVidWcKK0BAIC0yMzgsNiArMjM5LDcgQEAgZ3N0X3BsYXllcl9jbGFzc19pbml0IChHc3RQbGF5ZXJDbGFzcyAqIGtsYXNzKQorICAgICAgIGdfc2lnbmFsX25ldyAoInZpZGVvLWRpbWVuc2lvbnMtY2hhbmdlZCIsIEdfVFlQRV9GUk9NX0NMQVNTIChrbGFzcyksCisgICAgICAgR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9OT19SRUNVUlNFIHwgR19TSUdOQUxfTk9fSE9PS1MsIDAsIE5VTEwsCisgICAgICAgTlVMTCwgTlVMTCwgR19UWVBFX05PTkUsIDIsIEdfVFlQRV9JTlQsIEdfVFlQRV9JTlQpOworKworIH0KKyAKKyBzdGF0aWMgdm9pZAorQEAgLTYxOSw2ICs2MjEsMjEgQEAgZXJyb3JfY2IgKEdzdEJ1cyAqIGJ1cywgR3N0TWVzc2FnZSAqIG1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQorICAgZ19tdXRleF91bmxvY2sgKCZzZWxmLT5wcml2LT5sb2NrKTsKKyB9CisgCisrc3RhdGljIHZvaWQKKytlbGVtZW50X2NiIChHc3RCdXMgKiBidXMsIEdzdE1lc3NhZ2UgKiBtc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKKyt7CisrICBHc3RQbGF5ZXIgKnNlbGYgPSBHU1RfUExBWUVSICh1c2VyX2RhdGEpOworKworKyAgaWYgKGdzdF9pc19taXNzaW5nX3BsdWdpbl9tZXNzYWdlIChtc2cpKSB7CisrICAgIGdjaGFyICpkZXNjOworKworKyAgICBkZXNjID0gZ3N0X21pc3NpbmdfcGx1Z2luX21lc3NhZ2VfZ2V0X2Rlc2NyaXB0aW9uIChtc2cpOworKyAgICBlbWl0X2Vycm9yIChzZWxmLCBnX2Vycm9yX25ldyAoR1NUX1BMQVlFUl9FUlJPUiwKKysgICAgICAgIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4sICJNaXNzaW5nIHBsdWdpbiAnJXMnIiwgZGVzYykpOworKyAgICBnX2ZyZWUgKGRlc2MpOworKyAgfQorK30KKysKKyBzdGF0aWMgZ2Jvb2xlYW4KKyBlb3NfZGlzcGF0Y2ggKGdwb2ludGVyIHVzZXJfZGF0YSkKKyB7CitAQCAtMTA1OSw2ICsxMDc2LDggQEAgZ3N0X3BsYXllcl9tYWluIChncG9pbnRlciBkYXRhKQorICAgICAgIE5VTEwsIE5VTEwpOworICAgZ19zb3VyY2VfYXR0YWNoIChidXNfc291cmNlLCBzZWxmLT5wcml2LT5jb250ZXh0KTsKKyAKKysgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZWxlbWVudCIsCisrICAgICAgR19DQUxMQkFDSyAoZWxlbWVudF9jYiksIHNlbGYpOworICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKGJ1cyksICJtZXNzYWdlOjplcnJvciIsIEdfQ0FMTEJBQ0sgKGVycm9yX2NiKSwKKyAgICAgICBzZWxmKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChidXMpLCAibWVzc2FnZTo6ZW9zIiwgR19DQUxMQkFDSyAoZW9zX2NiKSwgc2VsZik7CitAQCAtMTU2MCw2ICsxNTc5LDcgQEAgZ3N0X3BsYXllcl9lcnJvcl9nZXRfdHlwZSAodm9pZCkKKyAgIHN0YXRpYyBnc2l6ZSBpZCA9IDA7CisgICBzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSB2YWx1ZXNbXSA9IHsKKyAgICAge0NfRU5VTSAoR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQpLCAiR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQiLCAiZmFpbGVkIn0sCisrICAgIHtDX0VOVU0gKEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU4pLCAiR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTiIsICJtaXNzaW5nLXBsdWdpbiJ9LAorICAgICB7MCwgTlVMTCwgTlVMTH0KKyAgIH07CisgCitAQCAtMTU3Nyw2ICsxNTk3LDggQEAgZ3N0X3BsYXllcl9lcnJvcl9nZXRfbmFtZSAoR3N0UGxheWVyRXJyb3IgZXJyb3IpCisgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgIGNhc2UgR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQ6CisgICAgICAgcmV0dXJuICJmYWlsZWQiOworKyAgICBjYXNlIEdTVF9QTEFZRVJfRVJST1JfTUlTU0lOR19QTFVHSU46CisrICAgICAgcmV0dXJuICJtaXNzaW5nLXBsdWdpbiI7CisgICB9CisgCisgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCAoKTsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitpbmRleCBjNDM4NTEzLi4zNWZiNWJiIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitAQCAtNDQsNyArNDQsOCBAQCBHVHlwZSAgICAgICAgZ3N0X3BsYXllcl9lcnJvcl9nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7CisgI2RlZmluZSAgICAgIEdTVF9UWVBFX1BMQVlFUl9FUlJPUiAgICAgICAgICAgICAgICAgICAgKGdzdF9wbGF5ZXJfZXJyb3JfZ2V0X3R5cGUgKCkpCisgCisgdHlwZWRlZiBlbnVtIHsKKy0gIEdTVF9QTEFZRVJfRVJST1JfRkFJTEVEID0gMAorKyAgR1NUX1BMQVlFUl9FUlJPUl9GQUlMRUQgPSAwLAorKyAgR1NUX1BMQVlFUl9FUlJPUl9NSVNTSU5HX1BMVUdJTgorIH0gR3N0UGxheWVyRXJyb3I7CisgCisgY29uc3QgZ2NoYXIgKmdzdF9wbGF5ZXJfZXJyb3JfZ2V0X25hbWUgICAgICAgICAgICAgICAgKEdzdFBsYXllckVycm9yIGVycm9yKTsKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9GaXgtcGF1c2UtcGxheS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODNjNDJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvRml4LXBhdXNlLXBsYXkucGF0Y2gKQEAgLTAsMCArMSwxMDcgQEAKK0ZpeCBwYXVzZS9wbGF5CisKK1RoZSBjdXJyZW50IHBsYXllciBzdGF0ZSBpcyBub3cgbm90aWZpZWQgdmlhIHRoZSBzdGF0ZS1jaGFuZ2VkIHNpZ25hbCwKK2FuZCBpbiB0aGUgR1RLIFVJIGl0IHdhcyBvbmx5IHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgZGVzaXJlZCBzdGF0ZS4KKworVGhpcyBpcyBhIGJhY2twb3J0IG9mIHVwc3RyZWFtIGNvbW1pdCA3Mzg0NzljN2EwLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCistLS0KKyBndGsvZ3RrLXBsYXkuYyAgICAgICAgICAgICB8ICA4ICsrKysrKy0tCisgbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMgfCAxMiAtLS0tLS0tLS0tLS0KKyBsaWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCB8ICAyIC0tCisgMyBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggNmU3YTA5OC4uZTJiNjA1YSAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTM0LDYgKzM0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QKKyAgIEd0a1dpZGdldCAqaW5mb19iYXI7CisgICBHdGtXaWRnZXQgKnZvbHVtZV9idXR0b247CisgICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKKysgIGdib29sZWFuIHBsYXlpbmc7CisgfSBHdGtQbGF5OworIAorIC8qIENvbXBhdCBzdHVicyAqLworQEAgLTExOCwxMiArMTE5LDEzIEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyB7CisgICBHdGtXaWRnZXQgKmltYWdlOworIAorLSAgaWYgKGdzdF9wbGF5ZXJfaXNfcGxheWluZyAocGxheS0+cGxheWVyKSkgeworKyAgaWYgKHBsYXktPnBsYXlpbmcpIHsKKyAgICAgZ3N0X3BsYXllcl9wYXVzZSAocGxheS0+cGxheWVyKTsKKyAgICAgaW1hZ2UgPQorICAgICAgICAgZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fbmFtZSAoIm1lZGlhLXBsYXliYWNrLXN0YXJ0IiwKKyAgICAgICAgIEdUS19JQ09OX1NJWkVfQlVUVE9OKTsKKyAgICAgZ3RrX2J1dHRvbl9zZXRfaW1hZ2UgKEdUS19CVVRUT04gKHBsYXktPnBsYXlfcGF1c2VfYnV0dG9uKSwgaW1hZ2UpOworKyAgICBwbGF5LT5wbGF5aW5nID0gRkFMU0U7CisgICB9IGVsc2UgeworICAgICBnY2hhciAqdGl0bGU7CisgCitAQCAtMTM2LDYgKzEzOCw3IEBAIHBsYXlfcGF1c2VfY2xpY2tlZF9jYiAoR3RrQnV0dG9uICogYnV0dG9uLCBHdGtQbGF5ICogcGxheSkKKyAgICAgdGl0bGUgPSBnc3RfcGxheWVyX2dldF91cmkgKHBsYXktPnBsYXllcik7CisgICAgIHNldF90aXRsZSAocGxheSwgdGl0bGUpOworICAgICBnX2ZyZWUgKHRpdGxlKTsKKysgICAgcGxheS0+cGxheWluZyA9IFRSVUU7CisgICB9CisgfQorIAorQEAgLTMzNSw3ICszMzgsNyBAQCB2aWRlb19kaW1lbnNpb25zX2NoYW5nZWRfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgZ2ludCB3aWR0aCwgZ2ludCBoZWlnaHQsCisgc3RhdGljIHZvaWQKKyBlb3NfY2IgKEdzdFBsYXllciAqIHVudXNlZCwgR3RrUGxheSAqIHBsYXkpCisgeworLSAgaWYgKGdzdF9wbGF5ZXJfaXNfcGxheWluZyAocGxheS0+cGxheWVyKSkgeworKyAgaWYgKHBsYXktPnBsYXlpbmcpIHsKKyAgICAgR0xpc3QgKm5leHQgPSBOVUxMOworICAgICBnY2hhciAqdXJpOworIAorQEAgLTQ1Miw2ICs0NTUsNyBAQCBtYWluIChnaW50IGFyZ2MsIGdjaGFyICoqIGFyZ3YpCisgICB9CisgCisgICBwbGF5LnBsYXllciA9IGdzdF9wbGF5ZXJfbmV3ICgpOworKyAgcGxheS5wbGF5aW5nID0gVFJVRTsKKyAKKyAgIGdfb2JqZWN0X3NldCAocGxheS5wbGF5ZXIsICJkaXNwYXRjaC10by1tYWluLWNvbnRleHQiLCBUUlVFLCBOVUxMKTsKKyAKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuYyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitpbmRleCAwNjliMjg0Li43OGU3YmExIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmMKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5jCitAQCAtMTQyMiwxOCArMTQyMiw2IEBAIGdzdF9wbGF5ZXJfc2V0X3VyaSAoR3N0UGxheWVyICogc2VsZiwgY29uc3QgZ2NoYXIgKiB2YWwpCisgICBnX29iamVjdF9zZXQgKHNlbGYsICJ1cmkiLCB2YWwsIE5VTEwpOworIH0KKyAKKy1nYm9vbGVhbgorLWdzdF9wbGF5ZXJfaXNfcGxheWluZyAoR3N0UGxheWVyICogc2VsZikKKy17CistICBnYm9vbGVhbiB2YWw7CistCistICBnX3JldHVybl92YWxfaWZfZmFpbCAoR1NUX0lTX1BMQVlFUiAoc2VsZiksIEZBTFNFKTsKKy0KKy0gIGdfb2JqZWN0X2dldCAoc2VsZiwgImlzLXBsYXlpbmciLCAmdmFsLCBOVUxMKTsKKy0KKy0gIHJldHVybiB2YWw7CistfQorLQorIEdzdENsb2NrVGltZQorIGdzdF9wbGF5ZXJfZ2V0X3Bvc2l0aW9uIChHc3RQbGF5ZXIgKiBzZWxmKQorIHsKK2RpZmYgLS1naXQgYS9saWIvZ3N0L3BsYXllci9nc3RwbGF5ZXIuaCBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitpbmRleCA2OTMzZGQ3Li4zNWZiNWJiIDEwMDY0NAorLS0tIGEvbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmgKKysrKyBiL2xpYi9nc3QvcGxheWVyL2dzdHBsYXllci5oCitAQCAtOTMsOCArOTMsNiBAQCBnY2hhciAqICAgICAgZ3N0X3BsYXllcl9nZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyKTsKKyB2b2lkICAgICAgICAgZ3N0X3BsYXllcl9zZXRfdXJpICAgICAgICAgICAgICAgICAgICAgICAoR3N0UGxheWVyICAgICogcGxheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgKiB1cmkpOworIAorLWdib29sZWFuICAgICBnc3RfcGxheWVyX2lzX3BsYXlpbmcgICAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworLQorIEdzdENsb2NrVGltZSBnc3RfcGxheWVyX2dldF9wb3NpdGlvbiAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworIEdzdENsb2NrVGltZSBnc3RfcGxheWVyX2dldF9kdXJhdGlvbiAgICAgICAgICAgICAgICAgIChHc3RQbGF5ZXIgICAgKiBwbGF5ZXIpOworIAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2ZpbGVjaG9vc2VyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZjFiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9maWxlY2hvb3Nlci5wYXRjaApAQCAtMCwwICsxLDU0IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworRnJvbSA0M2Q0YjE5YWI2MTFkODQ0MTU2ZTI2YzQ4NDBjYzU0ZGRiNzNhZTAzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KK0RhdGU6IFRodSwgMjYgRmViIDIwMTUgMTc6MTc6MDUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3RrLXBsYXk6IHNob3cgYSBmaWxlIGNob29zZXIgaWYgbm8gVVJJcyB3ZXJlIHBhc3NlZAorCistLS0KKyBndGsvZ3RrLXBsYXkuYyB8ICAgMjggKysrKysrKysrKysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggZjAxNTA3Ny4uOTc2NmE3MiAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTMxOSw4ICszMTksMzIgQEAgbWFpbiAoZ2ludCBhcmdjLCBnY2hhciAqKiBhcmd2KQorICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBwbGF5bGlzdHMgYW5kIHN0dWZmCisgICAvKiBQYXJzZSB0aGUgbGlzdCBvZiB0aGUgZmlsZSBuYW1lcyB3ZSBoYXZlIHRvIHBsYXkuICovCisgICBpZiAoIWZpbGVfbmFtZXMpIHsKKy0gICAgZ19wcmludCAoIlVzYWdlOiAlcyBGSUxFKHMpfFVSSShzKVxuIiwgQVBQX05BTUUpOworLSAgICByZXR1cm4gMTsKKysgICAgR3RrV2lkZ2V0ICpjaG9vc2VyOworKyAgICBpbnQgcmVzOworKworKyAgICBjaG9vc2VyID0gZ3RrX2ZpbGVfY2hvb3Nlcl9kaWFsb2dfbmV3ICgiU2VsZWN0IGZpbGVzIHRvIHBsYXkiLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxFX0NIT09TRVJfQUNUSU9OX09QRU4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9DYW5jZWwiLCBHVEtfUkVTUE9OU0VfQ0FOQ0VMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfT3BlbiIsIEdUS19SRVNQT05TRV9BQ0NFUFQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisrICAgIGdfb2JqZWN0X3NldCAoY2hvb3NlciwKKysgICAgICAgICAgICAgICAgICAibG9jYWwtb25seSIsIEZBTFNFLAorKyAgICAgICAgICAgICAgICAgICJzZWxlY3QtbXVsdGlwbGUiLCBUUlVFLAorKyAgICAgICAgICAgICAgICAgIE5VTEwpOworKworKyAgICByZXMgPSBndGtfZGlhbG9nX3J1biAoR1RLX0RJQUxPRyAoY2hvb3NlcikpOworKyAgICBpZiAocmVzID09IEdUS19SRVNQT05TRV9BQ0NFUFQpIHsKKysgICAgICBHU0xpc3QgKmw7CisrCisrICAgICAgbCA9IGd0a19maWxlX2Nob29zZXJfZ2V0X3VyaXMgKEdUS19GSUxFX0NIT09TRVIgKGNob29zZXIpKTsKKysgICAgICB3aGlsZSAobCkgeworKyAgICAgICAgcGxheS51cmlzID0gZ19saXN0X2FwcGVuZCAocGxheS51cmlzLCBsLT5kYXRhKTsKKysgICAgICAgIGwgPSBnX3NsaXN0X2RlbGV0ZV9saW5rIChsLCBsKTsKKysgICAgICB9CisrICAgIH0gZWxzZSB7CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgZ3RrX3dpZGdldF9kZXN0cm95IChjaG9vc2VyKTsKKyAgIH0gZWxzZSB7CisgICAgIGd1aW50IGk7CisgCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2dzdC1wbGF5ZXIuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmQyMDdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXIvZ3N0LXBsYXllci5kZXNrdG9wCkBAIC0wLDAgKzEsMTAgQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1NZWRpYSBQbGF5ZXIKK0NvbW1lbnQ9QmFzaWMgbWVkaWEgcGxheWVyCitJY29uPWF1ZGlvLXBsYXllcgorVHJ5RXhlYz1ndGstcGxheQorRXhlYz1ndGstcGxheQorU3RhcnR1cE5vdGlmeT10cnVlCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HVEs7QXVkaW9WaWRlbzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyL2d0azIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZDE4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsYXllci9ndGsyLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK0FzIHRoZSByZXN0IG9mIFNhdG8gaXMgR1RLKyAyLCBwYXRjaCBndGstcGxheSB0byB1c2UgR1RLKyAyLiAgV2hlbiB0aGUgcmVzdCBvZgorU2F0byBoYXMgYmVlbiBwb3J0ZWQgdG8gR1RLKyAzIHRoaXMgcGF0Y2ggY2FuIGJlIGRyb3BwZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKworCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBiOGFmMTNiLi45MGFiNzRjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02MCw3ICs2MCw3IEBAIEFDX1NVQlNUKEdMSUJfUFJFRklYKQorIEdTVF9QUkVGSVg9ImAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPXByZWZpeCBnc3RyZWFtZXItMS4wYCIKKyBBQ19TVUJTVChHU1RfUFJFRklYKQorIAorLVBLR19DSEVDS19NT0RVTEVTKEdUSywgW2d0aystMy4wXSwgW2hhdmVfZ3RrPSJ5ZXMiXSwgW2hhdmVfZ3RrPSJubyJdKQorK1BLR19DSEVDS19NT0RVTEVTKEdUSywgW2d0aystMi4wXSwgW2hhdmVfZ3RrPSJ5ZXMiXSwgW2hhdmVfZ3RrPSJubyJdKQorIEFNX0NPTkRJVElPTkFMKEhBVkVfR1RLLCB0ZXN0ICJ4JGhhdmVfZ3RrIiAhPSAieG5vIikKKyAKKyBHT0JKRUNUX0lOVFJPU1BFQ1RJT05fQ0hFQ0soWzEuMzEuMV0pCitkaWZmIC0tZ2l0IGEvZ3RrL2d0ay1wbGF5LmMgYi9ndGsvZ3RrLXBsYXkuYworaW5kZXggZjAxNTA3Ny4uOTU0ZDZmYiAxMDA2NDQKKy0tLSBhL2d0ay9ndGstcGxheS5jCisrKysgYi9ndGsvZ3RrLXBsYXkuYworQEAgLTM0LDYgKzM0LDQ2IEBAIHR5cGVkZWYgc3RydWN0CisgICBndWxvbmcgc2Vla2Jhcl92YWx1ZV9jaGFuZ2VkX3NpZ25hbF9pZDsKKyB9IEd0a1BsYXk7CisgCisrLyogQ29tcGF0IHN0dWJzICovCisrR3RrV2lkZ2V0ICoKKytndGtfYm94X25ldyAoR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24sCisrICAgICAgICAgICAgIGdpbnQgc3BhY2luZykKKyt7CisrICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOgorKyAgICByZXR1cm4gZ3RrX2hib3hfbmV3IChGQUxTRSwgc3BhY2luZyk7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDoKKysgICAgcmV0dXJuIGd0a192Ym94X25ldyAoRkFMU0UsIHNwYWNpbmcpOworKyAgfQorK30KKysKKytHdGtXaWRnZXQqCisrZ3RrX2J1dHRvbl9uZXdfZnJvbV9pY29uX25hbWUgKGNvbnN0IGdjaGFyICppY29uX25hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a0ljb25TaXplICBzaXplKQorK3sKKysgIEd0a1dpZGdldCAqYnV0dG9uOworKyAgR3RrV2lkZ2V0ICppbWFnZTsKKysKKysgIGltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX2ljb25fbmFtZSAoaWNvbl9uYW1lLCBzaXplKTsKKysgIGJ1dHRvbiA9ICBnX29iamVjdF9uZXcgKEdUS19UWVBFX0JVVFRPTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgImltYWdlIiwgaW1hZ2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworKyAgcmV0dXJuIGJ1dHRvbjsKKyt9CisrCisrR3RrV2lkZ2V0ICoKKytndGtfc2NhbGVfbmV3X3dpdGhfcmFuZ2UgKEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RvdWJsZSBtaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICBnZG91YmxlIG1heCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgc3RlcCkKKyt7CisrICBzd2l0Y2ggKG9yaWVudGF0aW9uKSB7CisrICBjYXNlIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMOgorKyAgICByZXR1cm4gZ3RrX2hzY2FsZV9uZXdfd2l0aF9yYW5nZSAobWluLCBtYXgsIHN0ZXApOworKyAgY2FzZSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUw6CisrICAgIHJldHVybiBndGtfdnNjYWxlX25ld193aXRoX3JhbmdlIChtaW4sIG1heCwgc3RlcCk7CisrICB9CisrfQorIAorIHN0YXRpYyB2b2lkCisgc2V0X3RpdGxlIChHdGtQbGF5ICogcGxheSwgY29uc3QgZ2NoYXIgKiB0aXRsZSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3QtcGxheWVyX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNmYmJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbGF5ZXJfZ2l0LmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlk9IkdTdHJlYW1lciBwbGF5YmFjayBoZWxwZXIgbGlicmFyeSBhbmQgZXhhbXBsZXMiCisKK0xJQ0VOU0UgPSAiTEdQTC0yLjArIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbGliL2dzdC9wbGF5ZXIvZ3N0cGxheWVyLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xOTttZDU9MDNhZWNhOWQ4Mjk1ZjgxMTgxNzkwOTA3NWExNWZmNjUiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAgZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3RrKyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL3Nkcm9lZ2UvZ3N0LXBsYXllci5naXQgXAorICAgICAgICAgICBmaWxlOi8vZmlsZWNob29zZXIucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3RrMi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtcGF1c2UtcGxheS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtZXJyb3Itc2lnbmFsLWVtaXNzaW9uLWZvci1taXNzaW5nLXBsdWdpbnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZ3N0LXBsYXllci5kZXNrdG9wIgorCitTUkNSRVYgPSAiNTM4NmM1Yjk4NGQ0MGVmNTQzNDY3M2VkNjIyMDRlNjlhYWY1MjY0NSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ3RrLWRvYyBsaWJfcGFja2FnZSBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJdG91Y2ggJHtTfS9DaGFuZ2VMb2cKK30KKworRVhUUkFfT0VDT05GICs9ICJhY19jdl9wYXRoX1ZBTEdSSU5EPW5vIGFjX2N2X3BhdGhfR0RCPW5vIgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1tIDA2NDQgLUQgJHtXT1JLRElSfS9nc3QtcGxheWVyLmRlc2t0b3AgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2dzdC1wbGF5ZXIuZGVza3RvcAorfQorCitGSUxFU18ke1BOfS1iaW4gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyouZGVza3RvcCIKKworUkRFUEVORFNfJHtQTn0tYmluID0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtcGxheWJhY2siCitSUkVDT01NRU5EU18ke1BOfS1iaW4gPSAiZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLW1ldGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC1tZXRhIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtbGliYXYiLCAiIiwgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygiTElDRU5TRV9GTEFHU19XSElURUxJU1QiLCAiY29tbWVyY2lhbCIsICJnc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LW1ldGEiLCAiIiwgZCl9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLXBhY2thZ2UuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWJlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtcGFja2FnZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorUEFDS0FHRVNQTElURlVOQ1NfcHJlcGVuZCA9ICIgc3BsaXRfZ3N0cmVhbWVyMTBfcGFja2FnZXMgIgorUEFDS0FHRVNQTElURlVOQ1NfYXBwZW5kID0gIiBzZXRfbWV0YXBrZ19yZGVwZW5kcyAiCisKK3B5dGhvbiBzcGxpdF9nc3RyZWFtZXIxMF9wYWNrYWdlcyAoKSB7CisgICAgZ3N0X2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vZ3N0cmVhbWVyLSR7TElCVn0nKQorICAgIHBvc3RpbnN0ID0gZC5nZXRWYXIoJ3BsdWdpbl9wb3N0aW5zdCcsIFRydWUpCisgICAgZ2xpYmRpciA9IGQuZ2V0VmFyKCdsaWJkaXInLCBUcnVlKQorCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ2xpYmRpciwgJ15saWIoLiopXC5zb1wuKicsICdsaWIlcycsICdnc3RyZWFtZXIgJXMgbGlicmFyeScsIGV4dHJhX2RlcGVuZHM9JycsIGFsbG93X2xpbmtzPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgZ3N0X2xpYmRpciwgJ2xpYmdzdCguKilcLnNvJCcsIGQuZXhwYW5kKCcke1BOfS0lcycpLCAnR1N0cmVhbWVyIHBsdWdpbiBmb3IgJXMnLCBwb3N0aW5zdD1wb3N0aW5zdCwgZXh0cmFfZGVwZW5kcz0nJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBnc3RfbGliZGlyLCAnbGliZ3N0KC4qKVwubGEkJywgZC5leHBhbmQoJyR7UE59LSVzLWRldicpLCAnR1N0cmVhbWVyIHBsdWdpbiBmb3IgJXMgKGRldmVsb3BtZW50IGZpbGVzKScsIGV4dHJhX2RlcGVuZHM9ZC5leHBhbmQoJyR7UE59LWRldicpKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdzdF9saWJkaXIsICdsaWJnc3QoLiopXC5hJCcsIGQuZXhwYW5kKCcke1BOfS0lcy1zdGF0aWNkZXYnKSwgJ0dTdHJlYW1lciBwbHVnaW4gZm9yICVzIChzdGF0aWMgZGV2ZWxvcG1lbnQgZmlsZXMpJywgZXh0cmFfZGVwZW5kcz1kLmV4cGFuZCgnJHtQTn0tc3RhdGljZGV2JykpCit9CisKK3B5dGhvbiBzZXRfbWV0YXBrZ19yZGVwZW5kcyAoKSB7CisgICAgaW1wb3J0IG9zCisKKyAgICBwbiA9IGQuZ2V0VmFyKCdQTicsIFRydWUpCisgICAgbWV0YXBrZyA9ICBwbiArICctbWV0YScKKyAgICBkLnNldFZhcignQUxMT1dfRU1QVFlfJyArIG1ldGFwa2csICIxIikKKyAgICBkLnNldFZhcignRklMRVNfJyArIG1ldGFwa2csICIiKQorICAgIGJsYWNrbGlzdCA9IFsgcG4sIHBuICsgJy1sb2NhbGUnLCBwbiArICctZGV2JywgcG4gKyAnLWRiZycsIHBuICsgJy1kb2MnLCBwbiArICctbWV0YScgXQorICAgIG1ldGFwa2dfcmRlcGVuZHMgPSBbXQorICAgIHBhY2thZ2VzID0gZC5nZXRWYXIoJ1BBQ0tBR0VTJywgVHJ1ZSkuc3BsaXQoKQorICAgIHBrZ2Rlc3QgPSBkLmdldFZhcignUEtHREVTVCcsIFRydWUpCisgICAgZm9yIHBrZyBpbiBwYWNrYWdlc1sxOl06CisgICAgICAgIGlmIG5vdCBwa2cgaW4gYmxhY2tsaXN0IGFuZCBub3QgcGtnIGluIG1ldGFwa2dfcmRlcGVuZHMgYW5kIG5vdCBwa2cuZW5kc3dpdGgoJy1kZXYnKSBhbmQgbm90IHBrZy5lbmRzd2l0aCgnLWRiZycpIGFuZCBub3QgcGtnLmNvdW50KCdsb2NhbGUnKSBhbmQgbm90IHBrZy5jb3VudCgnLXN0YXRpY2RldicpOgorICAgICAgICAgICAgIyBTZWUgaWYgdGhlIHBhY2thZ2UgaXMgZW1wdHkgYnkgbG9va2luZyBhdCB0aGUgY29udGVudHMgb2YgaXRzIFBLR0RFU1Qgc3ViZGlyZWN0b3J5LiAKKyAgICAgICAgICAgICMgSWYgdGhpcyBzdWJkaXJlY3RvcnkgaXMgZW1wdHksIHRoZW4gdGhlIHBhY2thZ2UgaXMuCisgICAgICAgICAgICAjIEVtcHR5IHBhY2thZ2VzIGRvIG5vdCBnZXQgYWRkZWQgdG8gdGhlIG1ldGEgcGFja2FnZSdzIFJERVBFTkRTCisgICAgICAgICAgICBwa2dkaXIgPSBvcy5wYXRoLmpvaW4ocGtnZGVzdCwgcGtnKQorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGtnZGlyKToKKyAgICAgICAgICAgICAgICBkaXJfY29udGVudHMgPSBvcy5saXN0ZGlyKHBrZ2Rpcikgb3IgW10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlyX2NvbnRlbnRzID0gW10KKyAgICAgICAgICAgIGlzX2VtcHR5ID0gbGVuKGRpcl9jb250ZW50cykgPT0gMAorICAgICAgICAgICAgaWYgbm90IGlzX2VtcHR5OgorICAgICAgICAgICAgICAgIG1ldGFwa2dfcmRlcGVuZHMuYXBwZW5kKHBrZykKKyAgICBkLnNldFZhcignUkRFUEVORFNfJyArIG1ldGFwa2csICcgJy5qb2luKG1ldGFwa2dfcmRlcGVuZHMpKQorICAgIGQuc2V0VmFyKCdERVNDUklQVElPTl8nICsgbWV0YXBrZywgcG4gKyAnIG1ldGEgcGFja2FnZScpCit9CisKKyMgZWFjaCBwbHVnaW4tZGV2IGRlcGVuZHMgb24gUE4tZGV2LCBwbHVnaW4tc3RhdGljZGV2IG9uIFBOLXN0YXRpY2RldgorIyBzbyB3ZSBuZWVkIHRoZW0gZXZlbiB3aGVuIGVtcHR5IChsaWtlIGluIGdzdC1wbHVnaW5zLWdvb2QgY2FzZSkKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCitBTExPV19FTVBUWV8ke1BOfS1kZXYgPSAiMSIKK0FMTE9XX0VNUFRZXyR7UE59LXN0YXRpY2RldiA9ICIxIgorCitQQUNLQUdFUyArPSAiJHtQTn0tYXBwcyAke1BOfS1tZXRhICR7UE59LWdsaWIiCitGSUxFU18ke1BOfS1hcHBzID0gIiR7YmluZGlyfSIKKworUkRFUEVORFNfJHtQTn0tYXBwcyArPSAicGVybCIKK1JSRUNPTU1FTkRTXyR7UE59ICs9ICIke1BOfS1tZXRhIgorCitGSUxFU18ke1BOfSA9ICIiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItJHtMSUJWfS8uZGVidWciCitGSUxFU18ke1BOfS1nbGliID0gIiR7ZGF0YWRpcn0vZ2xpYi0yLjAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlNmU5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYuaW5jCkBAIC0wLDAgKzEsMzIgQEAKK1NVTU1BUlkgPSAiTGliYXYtYmFzZWQgR1N0cmVhbWVyIDEueCBwbHVnaW4iCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisgJiAoIChHUEx2MisgJiBMR1BMdjIuMSspIHwgKEdQTHYzKyAmIExHUEx2MyspICkiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdzdHJlYW1lci5uZXQvIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZSB6bGliIGJ6aXAyIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworIyBDQVVUSU9OOiBVc2luZyB0aGUgc3lzdGVtIGxpYmF2IGlzIG5vdCByZWNvbW1lbmRlZC4gU2luY2UgdGhlIGxpYmF2IEFQSSBpcyBjaGFuZ2luZyBhbGwgdGhlIHRpbWUsCisjIGNvbXBpbGF0aW9uIGVycm9ycyAoYW5kIG90aGVyLCBtb3JlIHN1YnRsZSBidWdzKSBjYW4gaGFwcGVuLiBJdCBpcyB1c3VhbGx5IGJldHRlciB0byByZWx5IG9uIHRoZQorIyBsaWJhdiBjb3B5IGluY2x1ZGVkIGluIHRoZSBnc3QtbGliYXYgcGFja2FnZS4KK1BBQ0tBR0VDT05GSUcgPz89ICIgb3JjIHlhc20gIgorUEFDS0FHRUNPTkZJR1tsaWJhdl0gPSAiLS13aXRoLXN5c3RlbS1saWJhdiwsbGliYXYiCitQQUNLQUdFQ09ORklHW2xncGxdICA9ICItLWVuYWJsZS1sZ3BsLCwiCitQQUNLQUdFQ09ORklHW3lhc21dICA9ICItLWVuYWJsZS15YXNtLC0tZGlzYWJsZS15YXNtLHlhc20tbmF0aXZlIgorUEFDS0FHRUNPTkZJR1tvcmNdICA9ICItLWVuYWJsZS1vcmMsLS1kaXNhYmxlLW9yYyxvcmMiCisKKworR1NUUkVBTUVSXzFfMF9ERUJVRyA/PSAiLS1kaXNhYmxlLWRlYnVnIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkUgPSAiLS13aXRoLWxpYmF2LWV4dHJhLWNvbmZpZ3VyZSIKK0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT04gPSBcCisnJHtMSUJBVl9FWFRSQV9DT05GSUdVUkV9PSIke0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT05fQVJHfSInCisKK0VYVFJBX09FQ09ORiA9ICIke0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT059IgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvLmRlYnVnIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmEiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdi8wMDAxLURpc2FibGUteWFzbS1mb3ItbGliYXYtd2hlbi1kaXNhYmxlLXlhc20ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5OWFkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvMDAwMS1EaXNhYmxlLXlhc20tZm9yLWxpYmF2LXdoZW4tZGlzYWJsZS15YXNtLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK0Zyb20gNTRiYmEyMjhlYTUyZDAxZmQ4NDk0MWQ5N2JlMjNjMDNmOTg2MmI2NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFNhdCwgNiBBcHIgMjAxMyAwMToyMjoyMiArMDIwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIHlhc20gZm9yIGxpYmF2IHdoZW4gLS1kaXNhYmxlLXlhc20KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjJlZGU4OC4uZWYzYzA1MCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMzA1LDYgKzMwNSwxMiBAQCBlbHNlCisgICAgIGVtYmxpYmF2X2NvbmZpZ3VyZV9hcmdzPSIkZW1ibGliYXZfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtZ3BsIgorICAgZmkKKworKyAgQUNfQVJHX0VOQUJMRSh5YXNtLAorKyAgICAgICAgICAgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUteWFzbV0sIFtkaXNhYmxlIHVzZSBvZiB5YXNtIGFzc2VtYmxlcl0pXSkKKysgIGlmIHRlc3QgIngkZW5hYmxlX3lhc20iID0gInhubyI7IHRoZW4KKysgICAgZW1ibGliYXZfY29uZmlndXJlX2FyZ3M9IiRlbWJsaWJhdl9jb25maWd1cmVfYXJncyAtLWRpc2FibGUteWFzbSIKKysgIGZpCisrCisgICAjIGlmIHdlIGFyZSBjcm9zcy1jb21waWxpbmcsIHRlbGwgbGliYXYgc28KKyAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAqYW5kcm9pZCopCistLSAKKzEuOC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXYvd29ya2Fyb3VuZC10by1idWlsZC1nc3QtbGliYXYtZm9yLWk1ODYtd2l0aC1nY2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2L3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWRlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2L3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Rlc2NyaXB0aW9uOiBXb3JrYXJvdW5kIHRvIGJ1aWxkIGxpYmF2IGZvciBpNTg2IHdpdGggZ2NjIDQuOS4yIGJ5IGF2b2lkaW5nIG1lbXNldAorQXV0aG9yOiBCZXJuaGFyZCDcYmVsYWNrZXIgPGJlcm5oYXJkdUB2ci13ZWIuZGU+CisKKy0tLQorQnVnLURlYmlhbjogaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvNzgzMDgyCitMYXN0LVVwZGF0ZTogMjAxNS0wNC0yOAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtkZWJpYW5dCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gZ3N0LWxpYmF2LTEuNC41Lm9yaWcvZ3N0LWxpYnMvZXh0L2xpYmF2L2xpYmF2Y29kZWMvaDI2NF9jYWJhYy5jCisrKysgZ3N0LWxpYmF2LTEuNC41L2dzdC1saWJzL2V4dC9saWJhdi9saWJhdmNvZGVjL2gyNjRfY2FiYWMuYworQEAgLTIwMjAsNyArMjAyMCwxMSBAQCBkZWNvZGVfaW50cmFfbWI6CisgICAgICAgICAvLyBJbiBkZWJsb2NraW5nLCB0aGUgcXVhbnRpemVyIGlzIDAKKyAgICAgICAgIGgtPmN1cl9waWMucXNjYWxlX3RhYmxlW21iX3h5XSA9IDA7CisgICAgICAgICAvLyBBbGwgY29lZmZzIGFyZSBwcmVzZW50CistICAgICAgICBtZW1zZXQoaC0+bm9uX3plcm9fY291bnRbbWJfeHldLCAxNiwgNDgpOworKyAgICAgICAgLyptZW1zZXQoaC0+bm9uX3plcm9fY291bnRbbWJfeHldLCAxNiwgNDgpOyovCisrICAgICAgICAgICAgLyogYXZvaWRpbmcgdGhpcyBtZW1zZXQgYmVjYXVzZSBpdCBsZWFkcyBhdCBsZWFzdCB3aXRoIGdjYzQuOS4yIHRvIGVycm9yOiAnYXNtJyBvcGVyYW5kIGhhcyBpbXBvc3NpYmxlIGNvbnN0cmFpbnRzICovCisrICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ4OyBpKyspIHsKKysgICAgICAgICAgICAoICh1bnNpZ25lZCBjaGFyKikoaC0+bm9uX3plcm9fY291bnRbbWJfeHldKSApIFtpXSA9IDE2OworKyAgICAgICAgfQorICAgICAgICAgaC0+Y3VyX3BpYy5tYl90eXBlW21iX3h5XSA9IG1iX3R5cGU7CisgICAgICAgICBoLT5sYXN0X3FzY2FsZV9kaWZmID0gMDsKKyAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1saWJhdl8xLjQuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmYzdlYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfMS40LjUuYmIKQEAgLTAsMCArMSwyNyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtbGliYXYuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leHQvbGliYXYvZ3N0YXYuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTE4O21kNT1hNzUyYzM1MjY3ZDgyNzZmZDljYTNkYjY5OTRmY2E5YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvTElDRU5TRTttZDU9ZWE2NmU5N2E3YWMxZGI5NzhjZjM1MjkwNjhhOGM5NDggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5MR1BMdjIuMTttZDU9YmQ3YTQ0MzMyMGFmOGM4MTJlNGMxOGQxYjc5ZGYwMDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3QtbGliYXYvZ3N0LWxpYmF2LSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovLzAwMDEtRGlzYWJsZS15YXNtLWZvci1saWJhdi13aGVuLWRpc2FibGUteWFzbS5wYXRjaCBcCisgICAgZmlsZTovL3dvcmthcm91bmQtdG8tYnVpbGQtZ3N0LWxpYmF2LWZvci1pNTg2LXdpdGgtZ2NjLnBhdGNoIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJmNDkyMmE0NmFkYmNiZTdiZDAxMzMxZmY1ZGM3OTc5ZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDVjNjI2MjQ2MDRmM2JiNWM4NzA4NDRjYzFmMjcxMTc3OWNjNTMzYjAwNGMyYWExZDhjMGQ1ODU1N2FmYmJjIgorCitMSUJBVl9FWFRSQV9DT05GSUdVUkVfQ09NTU9OX0FSRyA9ICItLXRhcmdldC1vcz1saW51eCBcCisgIC0tY2M9JyR7Q0N9JyAtLWFzPScke0NDfScgLS1sZD0nJHtDQ30nIC0tbm09JyR7Tk19JyAtLWFyPScke0FSfScgXAorICAtLXJhbmxpYj0nJHtSQU5MSUJ9JyBcCisgICR7R1NUUkVBTUVSXzFfMF9ERUJVR30gXAorICAtLWNyb3NzLXByZWZpeD0nJHtIT1NUX1BSRUZJWH0nIgorCitTID0gIiR7V09SS0RJUn0vZ3N0LWxpYmF2LSR7UFZ9IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbGliYXZfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMWI4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLWxpYmF2X2dpdC5iYgpAQCAtMCwwICsxLDI5IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLWxpYmF2LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZXh0L2xpYmF2L2dzdGF2Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0xODttZDU9YTc1MmMzNTI2N2Q4Mjc2ZmQ5Y2EzZGI2OTk0ZmNhOWMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0xJQ0VOU0U7bWQ1PTIzYTU0ZjU5YjgyNTcyYzIwM2E1NTkzNDZlODllZDU3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QtbGlicy9leHQvbGliYXYvQ09QWUlORy5HUEx2MzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0LWxpYnMvZXh0L2xpYmF2L0NPUFlJTkcuTEdQTHYyLjE7bWQ1PWJkN2E0NDMzMjBhZjhjODEyZTRjMThkMWI3OWRmMDA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC1saWJzL2V4dC9saWJhdi9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1saWJhdjticmFuY2g9bWFzdGVyIgorUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjEyNzIwMmQ2ZjY1NTg0ODkxZGFiZjkyYmUwMzFmMGQxNzBiMGU3ZjEiCisKK0xJQkFWX0VYVFJBX0NPTkZJR1VSRV9DT01NT05fQVJHID0gIi0tdGFyZ2V0LW9zPWxpbnV4IFwKKyAgLS1jYz0nJHtDQ30nIC0tYXM9JyR7Q0N9JyAtLWxkPScke0NDfScgLS1ubT0nJHtOTX0nIC0tYXI9JyR7QVJ9JyBcCisgICR7R1NUUkVBTUVSXzFfMF9ERUJVR30gXAorICAtLWNyb3NzLXByZWZpeD0nJHtIT1NUX1BSRUZJWH0nIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1tZXRhLWJhc2UuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmMTBjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtbWV0YS1iYXNlLmJiCkBAIC0wLDAgKzEsNjUgQEAKK0RFU0NSSVBUSU9OID0gIkdzdHJlYW1lcjEuMCBwYWNrYWdlIGdyb3VwcyIKK0xJQ0VOU0UgPSAiTUlUIgorCitpbmhlcml0IHBhY2thZ2Vncm91cAorCitDT01NRVJDSUFMX1BMVUdJTlMgPSAiJHtDT01NRVJDSUFMX0FVRElPX1BMVUdJTlN9ICR7Q09NTUVSQ0lBTF9WSURFT19QTFVHSU5TfSIKK0RFUEVORFNfVUdMWT0iJHtAJ2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHknIGlmICd1Z2x5JyBpbiBDT01NRVJDSUFMX1BMVUdJTlMuc3BsaXQoJy0nKSBlbHNlICcnfSIKK0RFUEVORFNfQkFEPSIke0AnZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkJyBpZiAnYmFkJyBpbiBDT01NRVJDSUFMX1BMVUdJTlMuc3BsaXQoJy0nKSBlbHNlICcnfSIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZCAke0RFUEVORFNfVUdMWX0gJHtERVBFTkRTX0JBRH0iCisKK1BBQ0tBR0VTID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS14MTEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYXVkaW8gXAorICAgIGdzdHJlYW1lcjEuMC1tZXRhLWRlYnVnIFwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS12aWRlbyIKKworQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UgPSAiMSIKK0FMTE9XX0VNUFRZX2dzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvID0gIjEiCitBTExPV19FTVBUWV9nc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyA9ICIxIgorQUxMT1dfRU1QVFlfZ3N0cmVhbWVyMS4wLW1ldGEtdmlkZW8gPSAiMSIKKworUkRFUEVORFNfZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSA9ICJcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAnZ3N0cmVhbWVyMS4wLW1ldGEteDExLWJhc2UnLCAnJywgZCl9IFwKKyAgICBnc3RyZWFtZXIxLjAgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtcGxheWJhY2sgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtZ2lvIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWFsc2EgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2Utdm9sdW1lIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLWF1ZGlvY29udmVydCBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb3Jlc2FtcGxlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXR5cGVmaW5kZnVuY3Rpb25zIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZpZGVvc2NhbGUgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdmlkZW9jb252ZXJ0IFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLWF1dG9kZXRlY3QgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2Qtc291cGh0dHBzcmMiCisKK1JSRUNPTU1FTkRTX2dzdHJlYW1lcjEuMC1tZXRhLXgxMS1iYXNlID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXhpbWFnZXNpbmsgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UteHZpbWFnZXNpbmsiCisKK1JERVBFTkRTX2dzdHJlYW1lcjEuMC1tZXRhLWF1ZGlvID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1iYXNlIFwKKyAgICBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLXZvcmJpcyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1vZ2cgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2Qtd2F2cGFyc2UgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtZmxhYyBcCisgICAgJHtDT01NRVJDSUFMX0FVRElPX1BMVUdJTlN9IgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS1kZWJ1ZyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1kZWJ1ZyBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS1hdWRpb3Rlc3RzcmMgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdmlkZW90ZXN0c3JjIgorCitSREVQRU5EU19nc3RyZWFtZXIxLjAtbWV0YS12aWRlbyA9ICJcCisgICAgZ3N0cmVhbWVyMS4wLW1ldGEtYmFzZSBcCisgICAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC1hdmkgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QtbWF0cm9za2EgXAorICAgIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UtdGhlb3JhIFwKKyAgICAke0NPTU1FUkNJQUxfVklERU9fUExVR0lOU30iCisKK1JSRUNPTU1FTkRTX2dzdHJlYW1lcjEuMC1tZXRhLXZpZGVvID0gIlwKKyAgICBnc3RyZWFtZXIxLjAtbWV0YS1hdWRpbyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjk4OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXguaW5jCkBAIC0wLDAgKzEsNDIgQEAKK1NVTU1BUlkgPSAiT3Blbk1BWCBJTCBwbHVnaW5zIGZvciBHU3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nc3RyZWFtZXIubmV0LyIKK0RFUEVORFMgPSAiZ3N0cmVhbWVyMS4wIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIgorUkRFUEVORFNfJHtQTn0gPSAibGlib214aWwiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK2FjcGF0aHMgPSAiLUkgJHtTfS9jb21tb24vbTQgLUkgJHtTfS9tNCIKKworUFIgPSAicjEiCisKK0dTVFJFQU1FUl8xXzBfT01YX1RBUkdFVCA/PSAiYmVsbGFnaW8iCitHU1RSRUFNRVJfMV8wX09NWF9DT1JFX05BTUUgPz0gIiR7bGliZGlyfS9saWJvbXhpbC1iZWxsYWdpby5zby4wIgorCitFWFRSQV9PRUNPTkYgKz0gIi0tZGlzYWJsZS12YWxncmluZCAtLXdpdGgtb214LXRhcmdldD0ke0dTVFJFQU1FUl8xXzBfT01YX1RBUkdFVH0iCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgb214X3RhcmdldCA9IGQuZ2V0VmFyKCJHU1RSRUFNRVJfMV8wX09NWF9UQVJHRVQiLCBUcnVlKQorICAgIGlmIG9teF90YXJnZXQgaW4gWydnZW5lcmljJywgJ2JlbGxhZ2lvJ106CisgICAgICAgIHNyY2RpciA9IGQuZ2V0VmFyKCJTIiwgVHJ1ZSkKKyAgICAgICAgIyBCZWxsYWdpbyBoZWFkZXJzIGFyZSBpbmNvbXBsZXRlICh0aGV5IGFyZSBtaXNzaW5nIHRoZSBPTVhfVkVSU0lPTl9NQUpPUiwjCisgICAgICAgICMgT01YX1ZFUlNJT05fTUlOT1IsIE9NWF9WRVJTSU9OX1JFVklTSU9OLCBhbmQgT01YX1ZFUlNJT05fU1RFUCBtYWNyb3MpOworICAgICAgICAjIGFwcGVuZGluZyBhIGRpcmVjdG9yeSBwYXRoIHRvIGdzdC1vbXgnIGludGVybmFsIE9wZW5NQVggSUwgaGVhZGVycyBmaXhlcyB0aGlzCisgICAgICAgIGQuYXBwZW5kVmFyKCJDRkxBR1MiLCAiIC1JJXMvb214L29wZW5tYXgiICUgc3JjZGlyKQorICAgIGVsaWYgb214X3RhcmdldCA9PSAicnBpIjoKKyAgICAgICAgIyBEZWRpY2F0ZWQgUmFzcGJlcnJ5IFBpIE9wZW5NQVggSUwgc3VwcG9ydCBtYWtlcyB0aGlzIHBhY2thZ2UgbWFjaGluZSBzcGVjaWZpYworICAgICAgICBkLnNldFZhcigiUEFDS0FHRV9BUkNIIiwgZC5nZXRWYXIoIk1BQ0hJTkVfQVJDSCIsIFRydWUpKQorfQorCitzZXRfb214X2NvcmVfbmFtZSgpIHsKKwlzZWQgLWkgLWUgInM7XmNvcmUtbmFtZT0uKjtjb3JlLW5hbWU9JHtHU1RSRUFNRVJfMV8wX09NWF9DT1JFX05BTUV9OyIgIiR7RH0ke3N5c2NvbmZkaXJ9L3hkZy9nc3RvbXguY29uZiIKK30KK2RvX2luc3RhbGxbcG9zdGZ1bmNzXSArPSAiIHNldF9vbXhfY29yZV9uYW1lICIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5sYSIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2dzdHJlYW1lci0xLjAvKi5hIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teC8wMDAxLW9teC1maXhlZC10eXBlLWVycm9yLWluLXByaW50Zi1jYWxsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXgvMDAwMS1vbXgtZml4ZWQtdHlwZS1lcnJvci1pbi1wcmludGYtY2FsbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDI4YWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1vbXgvMDAwMS1vbXgtZml4ZWQtdHlwZS1lcnJvci1pbi1wcmludGYtY2FsbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGY2MjllMDQxZTlmNjc4ZmNkODZhZDc2NGExNTExN2RmZjYzYzI3MWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDYXJsb3MgUmFmYWVsIEdpYW5pIDxkdkBwc2V1ZG90ZXJtaW5hbC5vcmc+CitEYXRlOiBTYXQsIDI3IEFwciAyMDEzIDAyOjUwOjI1ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIG9teDogZml4ZWQgdHlwZSBlcnJvciBpbiBwcmludGYgY2FsbAorCislenUgZXhwZWN0cyBzaXplX3QKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02OTkwMDhdCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIG9teC9nc3RvbXguYyB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL29teC9nc3RvbXguYyBiL29teC9nc3RvbXguYworaW5kZXggYTI5NDVlZC4uMWVjYTdjYyAxMDA2NDQKKy0tLSBhL29teC9nc3RvbXguYworKysrIGIvb214L2dzdG9teC5jCitAQCAtMTYzMCw3ICsxNjMwLDcgQEAgZ3N0X29teF9wb3J0X2FsbG9jYXRlX2J1ZmZlcnNfdW5sb2NrZWQgKEdzdE9NWFBvcnQgKiBwb3J0LAorIAorICAgR1NUX0lORk9fT0JKRUNUIChjb21wLT5wYXJlbnQsCisgICAgICAgIkFsbG9jYXRpbmcgJWQgYnVmZmVycyBvZiBzaXplICV6dSBmb3IgJXMgcG9ydCAldSIsIG4sCistICAgICAgcG9ydC0+cG9ydF9kZWYubkJ1ZmZlclNpemUsIGNvbXAtPm5hbWUsIChndWludCkgcG9ydC0+aW5kZXgpOworKyAgICAgIChzaXplX3QpIChwb3J0LT5wb3J0X2RlZi5uQnVmZmVyU2l6ZSksIGNvbXAtPm5hbWUsIChndWludCkgcG9ydC0+aW5kZXgpOworIAorICAgaWYgKCFwb3J0LT5idWZmZXJzKQorICAgICBwb3J0LT5idWZmZXJzID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3IChuKTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtb214XzEuMi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlN2M5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF8xLjIuMC5iYgpAQCAtMCwwICsxLDEyIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1vbXguaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29teC9nc3RvbXguaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT01YzhlMWZjYTMyNzA0NDg4ZTc2ZDJiYTlkZGZhOTM1ZiIKKworU1JDX1VSSSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy9zcmMvZ3N0LW9teC9nc3Qtb214LSR7UFZ9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gImQyNGU4YzAxNTNjMzVkZmVmZWUzZTI2YjFjMmMzNWY4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiNDg3NDk2MWU2NDg4YWQ5ZTU4MDgxMTRiZDQ4NmVhOTgxYzU0MDkwNzI2MmNhYWIxNDE5MzU1ZmQ4MmQ3NDUiCisKK1MgPSAiJHtXT1JLRElSfS9nc3Qtb214LSR7UFZ9IgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljODQ2NjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLW9teF9naXQuYmIKQEAgLTAsMCArMSwyNiBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1vbXguaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTRmYmQ2NTM4MGNkZDI1NTk1MTA3OTAwOGIzNjQ1MTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL29teC9nc3RvbXguaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT01YzhlMWZjYTMyNzA0NDg4ZTc2ZDJiYTlkZGZhOTM1ZiIKKworU1JDX1VSSSA9ICIgXAorICAgIGdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3Qtb214O2JyYW5jaD1tYXN0ZXI7bmFtZT1nc3Qtb214IFwKKyAgICBnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvY29tbW9uO2Rlc3RzdWZmaXg9Z2l0L2NvbW1vbjticmFuY2g9bWFzdGVyO25hbWU9Y29tbW9uIFwKKyAgICBmaWxlOi8vMDAwMS1vbXgtZml4ZWQtdHlwZS1lcnJvci1pbi1wcmludGYtY2FsbC5wYXRjaCBcCisgICAgIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVZfZ3N0LW9teCA9ICJhMmRiNzZiMDQ4ZGIyNzhlZjBhYTc5OGUxMDZiNzU5NDI2NGUwNmMwIgorU1JDUkVWX2NvbW1vbiA9ICI1ZWRjZDg1N2IyMTA3Y2Q4Yjc4YzE2MjMyZGQxMDg3NzUxM2VjMTU3IgorCitTUkNSRVZfRk9STUFUID0gImdzdC1vbXgiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGVkYjYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKQEAgLTAsMCArMSwxMzUgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyAmIExHUEx2Mi4xKyAiCisKK0RFUEVORFMgKz0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgbGlicG5nIGpwZWciCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1iYWQtJHtQVn0iCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitpbmhlcml0IGdldHRleHQgYmx1ZXRvb3RoCisKKyMgb3BlbmdsIHBhY2thZ2Vjb25maWcgZmFjdG9yZWQgb3V0IHRvIG1ha2UgaXQgZWFzeSBmb3IgZGlzdHJvcworIyBhbmQgQlNQIGxheWVycyB0byBwaWNrIGVpdGhlciAoZGVza3RvcCkgb3BlbmdsLCBnbGVzMiwgb3Igbm8gR0wKK1BBQ0tBR0VDT05GSUdfR0wgPz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnb3BlbmdsJywgJ2dsZXMyJywgJycsIGQpfSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiBcCisgICAgJHtQQUNLQUdFQ09ORklHX0dMfSBcCisgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd3YXlsYW5kJywgJ3dheWxhbmQnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ2JsdWV0b290aCcsICdibHVleicsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnZGlyZWN0ZmInLCAnZGlyZWN0ZmInLCAnJywgZCl9IFwKKyAgICBvcmMgY3VybCB1dmNoMjY0IG5lb24gc25kZmlsZSBcCisgICAgaGxzIHNiYyBkYXNoIGJ6MiBzbW9vdGhzdHJlYW1pbmcgXAorICAgICIKKworIyBkYXNoID0gRHluYW1pYyBBZGFwdGl2ZSBTdHJlYW1pbmcgb3ZlciBIVFRQCitQQUNLQUdFQ09ORklHW2Fzc3JlbmRlcl0gICAgICAgPSAiLS1lbmFibGUtYXNzcmVuZGVyLC0tZGlzYWJsZS1hc3NyZW5kZXIsbGliYXNzIgorUEFDS0FHRUNPTkZJR1tjdXJsXSAgICAgICAgICAgID0gIi0tZW5hYmxlLWN1cmwsLS1kaXNhYmxlLWN1cmwsY3VybCIKK1BBQ0tBR0VDT05GSUdbZ2xlczJdICAgICAgICAgICA9ICItLWVuYWJsZS1nbGVzMiwtLWRpc2FibGUtZ2xlczIsdmlydHVhbC9saWJnbGVzMiIKK1BBQ0tBR0VDT05GSUdbb3BlbmdsXSAgICAgICAgICA9ICItLWVuYWJsZS1vcGVuZ2wsLS1kaXNhYmxlLW9wZW5nbCx2aXJ0dWFsL2xpYmdsIGxpYmdsdSIKK1BBQ0tBR0VDT05GSUdbZmFhY10gICAgICAgICAgICA9ICItLWVuYWJsZS1mYWFjLC0tZGlzYWJsZS1mYWFjLGZhYWMiCitQQUNLQUdFQ09ORklHW2ZhYWRdICAgICAgICAgICAgPSAiLS1lbmFibGUtZmFhZCwtLWRpc2FibGUtZmFhZCxmYWFkMiIKK1BBQ0tBR0VDT05GSUdbbGlibW1zXSAgICAgICAgICA9ICItLWVuYWJsZS1saWJtbXMsLS1kaXNhYmxlLWxpYm1tcyxsaWJtbXMiCitQQUNLQUdFQ09ORklHW21vZHBsdWddICAgICAgICAgPSAiLS1lbmFibGUtbW9kcGx1ZywtLWRpc2FibGUtbW9kcGx1ZyxsaWJtb2RwbHVnIgorUEFDS0FHRUNPTkZJR1ttcGcxMjNdICAgICAgICAgID0gIi0tZW5hYmxlLW1wZzEyMywtLWRpc2FibGUtbXBnMTIzLG1wZzEyMyIKK1BBQ0tBR0VDT05GSUdbb3B1c10gICAgICAgICAgICA9ICItLWVuYWJsZS1vcHVzLC0tZGlzYWJsZS1vcHVzLGxpYm9wdXMiCitQQUNLQUdFQ09ORklHW2ZsaXRlXSAgICAgICAgICAgPSAiLS1lbmFibGUtZmxpdGUsLS1kaXNhYmxlLWZsaXRlLGZsaXRlLWFsc2EiCitQQUNLQUdFQ09ORklHW29wZW5jdl0gICAgICAgICAgPSAiLS1lbmFibGUtb3BlbmN2LC0tZGlzYWJsZS1vcGVuY3Ysb3BlbmN2IgorUEFDS0FHRUNPTkZJR1t3YXlsYW5kXSAgICAgICAgID0gIi0tZW5hYmxlLXdheWxhbmQgLS1lbmFibGUtZWdsLC0tZGlzYWJsZS13YXlsYW5kIC0tZGlzYWJsZS1lZ2wsd2F5bGFuZCB2aXJ0dWFsL2VnbCIKK1BBQ0tBR0VDT05GSUdbdXZjaDI2NF0gICAgICAgICA9ICItLWVuYWJsZS11dmNoMjY0LC0tZGlzYWJsZS11dmNoMjY0LGxpYnVzYjEgdWRldiIKK1BBQ0tBR0VDT05GSUdbZGlyZWN0ZmJdICAgICAgICA9ICItLWVuYWJsZS1kaXJlY3RmYiwtLWRpc2FibGUtZGlyZWN0ZmIsZGlyZWN0ZmIiCitQQUNLQUdFQ09ORklHW25lb25dICAgICAgICAgICAgPSAiLS1lbmFibGUtbmVvbiwtLWRpc2FibGUtbmVvbixuZW9uIgorUEFDS0FHRUNPTkZJR1tvcGVuYWxdICAgICAgICAgID0gIi0tZW5hYmxlLW9wZW5hbCwtLWRpc2FibGUtb3BlbmFsLG9wZW5hbC1zb2Z0IgorUEFDS0FHRUNPTkZJR1tobHNdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWhscywtLWRpc2FibGUtaGxzLGdudXRscyIKK1BBQ0tBR0VDT05GSUdbc2JjXSAgICAgICAgICAgICA9ICItLWVuYWJsZS1zYmMsLS1kaXNhYmxlLXNiYyxzYmMiCitQQUNLQUdFQ09ORklHW2Rhc2hdICAgICAgICAgICAgPSAiLS1lbmFibGUtZGFzaCwtLWRpc2FibGUtZGFzaCxsaWJ4bWwyIgorUEFDS0FHRUNPTkZJR1tiejJdICAgICAgICAgICAgID0gIi0tZW5hYmxlLWJ6MiwtLWRpc2FibGUtYnoyLGJ6aXAyIgorUEFDS0FHRUNPTkZJR1tmbHVpZHN5bnRoXSAgICAgID0gIi0tZW5hYmxlLWZsdWlkc3ludGgsLS1kaXNhYmxlLWZsdWlkc3ludGgsZmx1aWRzeW50aCIKK1BBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSAgICA9ICItLWVuYWJsZS1zY2hybywtLWRpc2FibGUtc2Nocm8sc2Nocm9lZGluZ2VyIgorUEFDS0FHRUNPTkZJR1tzbW9vdGhzdHJlYW1pbmddID0gIi0tZW5hYmxlLXNtb290aHN0cmVhbWluZywtLWRpc2FibGUtc21vb3Roc3RyZWFtaW5nLGxpYnhtbDIiCitQQUNLQUdFQ09ORklHW2JsdWV6XSAgICAgICAgICAgPSAiLS1lbmFibGUtYmx1ZXosLS1kaXNhYmxlLWJsdWV6LCR7QkxVRVp9IgorUEFDS0FHRUNPTkZJR1tyc3ZnXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXJzdmcsLS1kaXNhYmxlLXJzdmcsbGlicnN2ZyIKK1BBQ0tBR0VDT05GSUdbc25kZmlsZV0gICAgICAgICA9ICItLWVuYWJsZS1zbmRmaWxlLC0tZGlzYWJsZS1zbmRmaWxlLGxpYnNuZGZpbGUxIgorUEFDS0FHRUNPTkZJR1t3ZWJwXSAgICAgICAgICAgID0gIi0tZW5hYmxlLXdlYnAsLS1kaXNhYmxlLXdlYnAsbGlid2VicCIKK1BBQ0tBR0VDT05GSUdbcnRtcF0gICAgICAgICAgICA9ICItLWVuYWJsZS1ydG1wLC0tZGlzYWJsZS1ydG1wLHJ0bXBkdW1wIgorUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSAgICAgICAgID0gIi0tZW5hYmxlLWxpYnNzaDIsLS1kaXNhYmxlLWxpYnNzaDIsbGlic3NoMiIKKworIyB0aGVzZSBwbHVnaW5zIGhhdmUgbm90IGJlZW4gcG9ydGVkIHRvIDEuMCAoeWV0KToKKyMgICBkaXJlY3RkcmF3IHZjZCBhcGV4c2luayBkYzEzOTQgbHYyIGxpbnN5cyBtdXNlcGFjayBteXRodHYKKyMgICBuYXMgdGltaWRpdHkgdGVsZXRleHRkZWMgc2RsIHh2aWQgd2luaW5ldCBhY20gZ3NldHRpbmdzCisjICAgc25kaW8gcXR3cmFwcGVyIGNkeGFwYXJzZSBkY2NwIGZhY2VvdmVybGF5IGhkdnBhcnNlIHR0YQorIyAgIG12ZSBudXZkZW11eCBvc3hfdmlkZW8gcGF0Y2hkZXRlY3QgcXVpY2t0aW1lIHJlYWwgc2RpCisjICAgdmlkZW9tZWFzdXJlIGdzZXR0aW5ncworCisjIHRoZXNlIHBsdWdpbnMgaGF2ZSBubyBjb3JyZXNwb25kaW5nIGxpYnJhcnkgaW4gT0UtY29yZSBvciBtZXRhLW9wZW5lbWJlZGRlZDoKKyMgICBvcGVubmkyIHdpbmtzIGRpcmVjdDNkIGRpcmVjdGRyYXcgZGlyZWN0c291bmQgd2luc2NyZWVuY2FwIG9zeF92aWRlbworIyAgIGFwcGxlX21lZGlhIGFuZHJvaWRfbWVkaWEgYXZjIGNocm9tYXByaW50IGRhYWxhIGR0cyBnbWUgZ3NtIGthdGUgbGFkc3BhIG1pbWljCisjICAgbXBlZzJlbmMgbXBsZXggb2ZhIG9wZW5qcGVnIG9wZW5zbGVzIHB2ciByZXNpbmR2ZCBydG1wIHNvdW5kdG91Y2ggc3BhbmRzcCBzcGMKKyMgICBzcnRwIHZkcGF1IHZvYWFjZW5jIHZvYW1yd2JlbmMgd2FzYXBpIHpiYXIKKworRVhUUkFfT0VDT05GICs9ICIgXAorICAgIC0tZW5hYmxlLWR2YiBcCisgICAgLS1lbmFibGUtc2htIFwKKyAgICAtLWVuYWJsZS1mYmRldiBcCisgICAgLS1lbmFibGUtZGVja2xpbmsgXAorICAgIC0tZGlzYWJsZS1hY20gXAorICAgIC0tZGlzYWJsZS1hbmRyb2lkX21lZGlhIFwKKyAgICAtLWRpc2FibGUtYXBleHNpbmsgXAorICAgIC0tZGlzYWJsZS1hcHBsZV9tZWRpYSBcCisgICAgLS1kaXNhYmxlLWF2YyBcCisgICAgLS1kaXNhYmxlLWNocm9tYXByaW50IFwKKyAgICAtLWRpc2FibGUtY29jb2EgXAorICAgIC0tZGlzYWJsZS1kYWFsYSBcCisgICAgLS1kaXNhYmxlLWRjMTM5NCBcCisgICAgLS1kaXNhYmxlLWRpcmVjdDNkIFwKKyAgICAtLWRpc2FibGUtZGlyZWN0ZHJhdyBcCisgICAgLS1kaXNhYmxlLWRpcmVjdHNvdW5kIFwKKyAgICAtLWRpc2FibGUtZHRzIFwKKyAgICAtLWRpc2FibGUtZ21lIFwKKyAgICAtLWRpc2FibGUtZ3NldHRpbmdzIFwKKyAgICAtLWRpc2FibGUtZ3NtIFwKKyAgICAtLWRpc2FibGUta2F0ZSBcCisgICAgLS1kaXNhYmxlLWxhZHNwYSBcCisgICAgLS1kaXNhYmxlLWxpbnN5cyBcCisgICAgLS1kaXNhYmxlLWx2MiBcCisgICAgLS1kaXNhYmxlLW1pbWljIFwKKyAgICAtLWRpc2FibGUtbXBlZzJlbmMgXAorICAgIC0tZGlzYWJsZS1tcGxleCBcCisgICAgLS1kaXNhYmxlLW11c2VwYWNrIFwKKyAgICAtLWRpc2FibGUtbXl0aHR2IFwKKyAgICAtLWRpc2FibGUtbmFzIFwKKyAgICAtLWRpc2FibGUtb2ZhIFwKKyAgICAtLWRpc2FibGUtb3BlbmpwZWcgXAorICAgIC0tZGlzYWJsZS1vcGVuc2xlcyBcCisgICAgLS1kaXNhYmxlLW9zeF92aWRlbyBcCisgICAgLS1kaXNhYmxlLXB2ciBcCisgICAgLS1kaXNhYmxlLXF1aWNrdGltZSBcCisgICAgLS1kaXNhYmxlLXJlc2luZHZkIFwKKyAgICAtLWRpc2FibGUtc2RsIFwKKyAgICAtLWRpc2FibGUtc2RsdGVzdCBcCisgICAgLS1kaXNhYmxlLXNuZGlvIFwKKyAgICAtLWRpc2FibGUtc291bmR0b3VjaCBcCisgICAgLS1kaXNhYmxlLXNwYW5kc3AgXAorICAgIC0tZGlzYWJsZS1zcGMgXAorICAgIC0tZGlzYWJsZS1zcnRwIFwKKyAgICAtLWRpc2FibGUtdGVsZXRleHRkZWMgXAorICAgIC0tZGlzYWJsZS10aW1pZGl0eSBcCisgICAgLS1kaXNhYmxlLXZjZCBcCisgICAgLS1kaXNhYmxlLXZkcGF1IFwKKyAgICAtLWRpc2FibGUtdm9hYWNlbmMgXAorICAgIC0tZGlzYWJsZS12b2FtcndiZW5jIFwKKyAgICAtLWRpc2FibGUtd2FzYXBpIFwKKyAgICAtLWRpc2FibGUtd2lsZG1pZGkgXAorICAgIC0tZGlzYWJsZS13aW5pbmV0IFwKKyAgICAtLWRpc2FibGUtd2luc2NyZWVuY2FwIFwKKyAgICAtLWRpc2FibGUteHZpZCBcCisgICAgLS1kaXNhYmxlLXpiYXIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm14MzIiLCAiLS1kaXNhYmxlLXlhZGlmIiwgIiIsIGQpfSBcCisgICAgIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworRklMRVNfZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkLW9wZW5jdiArPSAiJHtkYXRhZGlyfS9nc3QtcGx1Z2lucy1iYWQvMS4wL29wZW5jdioiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC8wMDAxLWdsLWRvLW5vdC1jaGVjay1mb3ItR0wtR0xVLUVHTC1HTEVTMi1saWJzLWlmLWRpc2FibGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyYTMyYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK0Zyb20gZGViYTBkYTQ1ZWM4MjEyMDlhN2VkMTQ4YTQ1MjFkNTYyZTY1MTJjZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMTQ6NDc6MjUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gZ2w6IGRvIG5vdCBjaGVjayBmb3IgR0wvR0xVL0VHTC9HTEVTMiBsaWJzIGlmIGRpc2FibGVkIGluCisgY29uZmlndXJhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNTUyMl0KKworU2lnbmVkLW9mZi1ieTogQ2FybG9zIFJhZmFlbCBHaWFuaSA8ZHZAcHNldWRvdGVybWluYWwub3JnPgorLS0tCisgY29uZmlndXJlLmFjIHwgMTQgKysrKysrKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWE0NmFmYi4uZTg1ZDRiYSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjYxLDEwICs2NjEsMTYgQEAgY2FzZSAkaG9zdCBpbgorICAgICBmaQorICAgOzsKKyAgICopCistICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0wsIEdMLCBnbFRleEltYWdlMkQsLCBHTC9nbC5oKQorLSAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMVSwgR0xVLCBnbHVTcGhlcmUsLCBHTC9nbHUuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihHTEVTMiwgR0xFU3YyLCBnbFRleEltYWdlMkQsLCBHTEVTMi9nbDIuaCkKKy0gICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihFR0wsIEVHTCwgZWdsR2V0RXJyb3IsLCBFR0wvZWdsLmgpCisrICAgIGlmIHRlc3QgIngkTkVFRF9HTCIgIT0gInhubyI7IHRoZW4KKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMLCBHTCwgZ2xUZXhJbWFnZTJELCwgR0wvZ2wuaCkKKysgICAgICBBR19HU1RfQ0hFQ0tfTElCSEVBREVSKEdMVSwgR0xVLCBnbHVTcGhlcmUsLCBHTC9nbHUuaCkKKysgICAgZmkKKysgICAgaWYgdGVzdCAieCRORUVEX0dMRVMyIiAhPSAieG5vIjsgdGhlbgorKyAgICAgIEFHX0dTVF9DSEVDS19MSUJIRUFERVIoR0xFUzIsIEdMRVN2MiwgZ2xUZXhJbWFnZTJELCwgR0xFUzIvZ2wyLmgpCisrICAgIGZpCisrICAgIGlmIHRlc3QgIngkTkVFRF9FR0wiICE9ICJ4bm8iOyB0aGVuCisrICAgICAgQUdfR1NUX0NIRUNLX0xJQkhFQURFUihFR0wsIEVHTCwgZWdsR2V0RXJyb3IsLCBFR0wvZWdsLmgpCisrICAgIGZpCisgCisgICAgIG9sZF9MSUJTPSRMSUJTCisgICAgIG9sZF9DRkxBR1M9JENGTEFHUworLS0gCisxLjguMy4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQvY29uZmlndXJlLWFsbG93LXRvLWRpc2FibGUtbGlic3NoMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTJhZmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC9jb25maWd1cmUtYWxsb3ctdG8tZGlzYWJsZS1saWJzc2gyLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gZjU5YzUyNjlmOTJkNTlhNTI5NmNiZmVlYjY4MmQ0MjA5NWNkODhhZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAxOCBTZXAgMjAxNCAwMjoyNDowNyAtMDQwMAorU3ViamVjdDogW1BBVENIXSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYWQ6IGFsbG93IHRvIGRpc2FibGUgbGlic3NoMgorCitsaWJzc2gyIGlzIGF1dG9tYXRpY2FsbHkgbGlua2VkIHRvIGlmIHByZXNlbnQsIHRoaXMgdW5kZXRlcm1pbmVkCitkZXBlbmRlbmN5IG1heSBjYXVzZSBidWlsZCBlcnJvcnMgbGlrZToKKworICAuLi4veDg2XzY0LXBva3ktbGludXgvNC45LjAvbGQ6IGNhbm5vdCBmaW5kIC1sc3NoMgorCitsaWJzc2gyIGlzbid0IGFuIG9lLWNvcmUgcmVjaXBlLCBzbyBhbGxvdyB0byBkaXNhYmxlIGl0IGZyb20KK2NvbmZpZ3VyZS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFdlbnpvbmcgRmFuIDx3ZW56b25nLmZhbkB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgICAyMyArKysrKysrKysrKysrKysrKy0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAwZTk1YzVjLi4xMjE1M2I0IDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xOTAxLDYgKzE5MDEsMTUgQEAgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQ0hST01BUFJJTlQsIFtjaHJvbWFwcmludF0sIGNocm9tYXByaW50LCBbCisgXSkKKyAKKyBkbmwgKioqIEN1cmwgKioqCisrQUNfQVJHX0VOQUJMRShbbGlic3NoMl0sCisrICAgICBbICAtLWVuYWJsZS1saWJzc2gyCQllbmFibGUgTElCU1NIMiBzdXBwb3J0IEA8OkBkZWZhdWx0PWF1dG9AOj5AXSwKKysgICAgIFtjYXNlICIke2VuYWJsZXZhbH0iIGluCisrICAgICAgIHllcykgIE5FRURfU1NIMj15ZXMgOzsKKysgICAgICAgbm8pICAgTkVFRF9TU0gyPW5vIDs7CisrICAgICAgIGF1dG8pIE5FRURfU1NIMj1hdXRvIDs7CisrICAgICAgICopIEFDX01TR19FUlJPUihbYmFkIHZhbHVlICR7ZW5hYmxldmFsfSBmb3IgLS1lbmFibGUtbGlic3NoMl0pIDs7CisrICAgICBlc2FjXSxbTkVFRF9TU0gyPWF1dG9dKQorKworIHRyYW5zbGl0KGRubSwgbSwgbCkgQU1fQ09ORElUSU9OQUwoVVNFX0NVUkwsIHRydWUpCisgQUdfR1NUX0NIRUNLX0ZFQVRVUkUoQ1VSTCwgW0N1cmwgcGx1Z2luXSwgY3VybCwgWworICAgUEtHX0NIRUNLX01PRFVMRVMoQ1VSTCwgbGliY3VybCA+PSA3LjIxLjAsIFsKK0BAIC0xOTE1LDEyICsxOTI0LDE0IEBAIEFHX0dTVF9DSEVDS19GRUFUVVJFKENVUkwsIFtDdXJsIHBsdWdpbl0sIGN1cmwsIFsKKyAgIF0pCisgICBBQ19TVUJTVChDVVJMX0NGTEFHUykKKyAgIEFDX1NVQlNUKENVUkxfTElCUykKKy0gIFBLR19DSEVDS19NT0RVTEVTKFNTSDIsIGxpYnNzaDIgPj0gMS40LjMsIFsKKy0gICAgSEFWRV9TU0gyPSJ5ZXMiCistICAgIEFDX0RFRklORShIQVZFX1NTSDIsIDEsIFtEZWZpbmUgaWYgbGlic3NoMiBpcyBhdmFpbGFibGVdKQorLSAgXSwgWworLSAgICBIQVZFX1NTSDI9Im5vIgorLSAgXSkKKysgIGlmIHRlc3QgIngkTkVFRF9TU0gyIiAhPSAieG5vIjsgdGhlbgorKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhTU0gyLCBsaWJzc2gyID49IDEuNC4zLCBbCisrICAgICAgSEFWRV9TU0gyPSJ5ZXMiCisrICAgICAgQUNfREVGSU5FKEhBVkVfU1NIMiwgMSwgW0RlZmluZSBpZiBsaWJzc2gyIGlzIGF2YWlsYWJsZV0pCisrICAgIF0sIFsKKysgICAgICBIQVZFX1NTSDI9Im5vIgorKyAgICBdKQorKyAgZmkKKyAgIEFNX0NPTkRJVElPTkFMKFVTRV9TU0gyLCB0ZXN0ICJ4JEhBVkVfU1NIMiIgPSAieHllcyIpCisgICBBQ19TVUJTVChTU0gyX0NGTEFHUykKKyAgIEFDX1NVQlNUKFNTSDJfTElCUykKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkXzEuNC41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA2NWRlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF8xLjQuNS5iYgpAQCAtMCwwICsxLDE0IEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzNhNTg1NWE4MTE5ZGViMDE3ZjVmMTNjZjMyNzA5NWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9maWx0ZXJzLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PThhMDgyNzA2NTZmMmY4YWQ3YmIzNjU1YjgzMTM4ZTVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yMTY4MmU0ZThmZWE1MjQxM2ZkMjZjNjBhY2I5MDdlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2NyYzMyLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PTI3ZGIyNjljNTc1ZDFlNTMxN2ZmZmNhMmQzM2IzYjUwIgorCitTUkNfVVJJICs9ICJmaWxlOi8vMDAwMS1nbC1kby1ub3QtY2hlY2stZm9yLUdMLUdMVS1FR0wtR0xFUzItbGlicy1pZi1kaXNhYmxlLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTBiYjM5NDEyY2Y0YTQ4ZmUwMzk3YmNmM2E3Y2Q0NTEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMTUyZmFkNzI1MDY4M2Q3MmY5ZGViMzZjNTY4NTQyODMzODM2NWZlNGE0Yzg3ZmZlMTVlMzg3ODNiMTRmOTgzYyIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhZC0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk1MDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZF9naXQuYmIKQEAgLTAsMCArMSwyNiBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhZC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzNhNTg1NWE4MTE5ZGViMDE3ZjVmMTNjZjMyNzA5NWQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3R0YS9maWx0ZXJzLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PThhMDgyNzA2NTZmMmY4YWQ3YmIzNjU1YjgzMTM4ZTVhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT0yMTY4MmU0ZThmZWE1MjQxM2ZkMjZjNjBhY2I5MDdlNSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nc3QvdHRhL2NyYzMyLmg7YmVnaW5saW5lPTEyO2VuZGxpbmU9Mjk7bWQ1PTI3ZGIyNjljNTc1ZDFlNTMxN2ZmZmNhMmQzM2IzYjUwIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiNmU1ZGI1N2QyNDQ2YTc1M2FhYTc2YmVlMjY4ZTFmOTU2MDBiMTRjZSIKKworUEFDS0FHRUNPTkZJR1tzYmNdID0gIi0tZW5hYmxlLXNiYywtLWRpc2FibGUtc2JjLHNiYyIKK1BBQ0tBR0VDT05GSUdbaGxzXSA9ICItLWVuYWJsZS1obHMsLS1kaXNhYmxlLWhscyxnbnV0bHMiCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtZGlzYWJsZS1vcGVuanBlZyBcCisgICAgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2YzZjQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK3JlcXVpcmUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyKyIKKworREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAndmlydHVhbC9saWJ4MTEgbGlieHYnLCAnJywgZCl9IgorREVQRU5EUyArPSAiZnJlZXR5cGUgbGlib2lsIHV0aWwtbGludXgiCisKK2luaGVyaXQgZ2V0dGV4dAorCitQQUNLQUdFU19EWU5BTUlDID0rICJebGliZ3N0LioiCisKK1BBQ0tBR0VDT05GSUcgPz89ICIgXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3gxMScsICcnLCBkKX0gXAorICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnYWxzYScsICdhbHNhJywgJycsIGQpfSBcCisgICAgb3JjIGl2b3JiaXMgb2dnIHRoZW9yYSB2b3JiaXMgcGFuZ28gXAorICAgICIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIgorWDExRU5BQkxFT1BUUyA9ICItLWVuYWJsZS14IC0tZW5hYmxlLXh2aWRlbyAtLWVuYWJsZS14c2htIgorWDExRElTQUJMRU9QVFMgPSAiLS1kaXNhYmxlLXggLS1kaXNhYmxlLXh2aWRlbyAtLWRpc2FibGUteHNobSIKK1BBQ0tBR0VDT05GSUdbeDExXSAgICAgPSAiJHtYMTFFTkFCTEVPUFRTfSwke1gxMURJU0FCTEVPUFRTfSwke1gxMURFUEVORFN9IgorUEFDS0FHRUNPTkZJR1thbHNhXSAgICA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgorUEFDS0FHRUNPTkZJR1tpdm9yYmlzXSA9ICItLWVuYWJsZS1pdm9yYmlzLC0tZGlzYWJsZS1pdm9yYmlzLHRyZW1vciIKK1BBQ0tBR0VDT05GSUdbb2dnXSAgICAgPSAiLS1lbmFibGUtb2dnLC0tZGlzYWJsZS1vZ2csbGlib2dnIgorUEFDS0FHRUNPTkZJR1t0aGVvcmFdICA9ICItLWVuYWJsZS10aGVvcmEsLS1kaXNhYmxlLXRoZW9yYSxsaWJ0aGVvcmEiCitQQUNLQUdFQ09ORklHW3ZvcmJpc10gID0gIi0tZW5hYmxlLXZvcmJpcywtLWRpc2FibGUtdm9yYmlzLGxpYnZvcmJpcyIKK1BBQ0tBR0VDT05GSUdbcGFuZ29dICAgPSAiLS1lbmFibGUtcGFuZ28sLS1kaXNhYmxlLXBhbmdvLHBhbmdvIgorCisKKyMgY2RwYXJhbm9pYSBhbmQgbGlidmlzdWFsIGRvIG5vdCBzZWVtIHRvIGV4aXN0IGFueXdoZXJlIGluIE9FCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1kaXNhYmxlLWZyZWV0eXBldGVzdCBcCisgICAgLS1kaXNhYmxlLWNkcGFyYW5vaWEgXAorICAgIC0tZGlzYWJsZS1saWJ2aXN1YWwgXAorIgorCitGSUxFU18ke01MUFJFRklYfWxpYmdzdHRhZy0xLjAgKz0gIiR7ZGF0YWRpcn0vZ3N0LXBsdWdpbnMtYmFzZS8xLjAvbGljZW5zZS10cmFuc2xhdGlvbnMuZGljdCIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlNfYXBwZW5kX3g4NiA9ICIgYWNfY3ZfaGVhZGVyX2VtbWludHJpbl9oPW5vIGFjX2N2X2hlYWRlcl94bW1pbnRyaW5faD1ubyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtYmFzZXRleHRvdmVybGF5LW1ha2UtbWVtb3J5LWNvcHktd2hlbi12aWRlby1idWZmZXItcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2RjYTk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMS1iYXNldGV4dG92ZXJsYXktbWFrZS1tZW1vcnktY29weS13aGVuLXZpZGVvLWJ1ZmZlci1zLnBhdGNoCkBAIC0wLDAgKzEsMTI5IEBACitGcm9tIDM3ODFkNDA5NDBkNDZkN2U2YTUwMjA5MmQyNGFhYzc5OTdmNmRhNWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgNSBNYXIgMjAxNSAxMjowNjoyMyArMDgwMAorU3ViamVjdDogW1BBVENIIDEvNF0gYmFzZXRleHRvdmVybGF5OiBtYWtlIG1lbW9yeSBjb3B5IHdoZW4gdmlkZW8gYnVmZmVyJ3MKKyBtZW1vcnkgaXMgcmVhZHkgb25seQorCisxLiBzaW5jZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUganVzdCBsb29rdXAgdGhlIHJlZmNvdW50IHRvIGRldGVybWluZSBpZgorICAgYSBidWZmZXIgaXMgd3JpdGFibGUsIGFuZCBpdCB3aWxsIHVzZSBfZ3N0X2J1ZmZlcl9jb3B5KCkgd2hpY2ggZG9uJ3QKKyAgIHBlcmZvcm0gYSBkZWVwIG1lbW9yeSBjb3B5IGV2ZW4gaWYgdGhlIGZsYWcgb2YgYSBtZW1vcnkgaXMgc2V0IHRvCisgICBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkuIFNvLCB3ZSBkZXRlY3QgdGhlIG1lbW9yeSBmbGFnIGFuZCB1c2UKKyAgIGdzdF9idWZmZXJfY29weV9yZWdpb24gd2l0aCBHU1RfQlVGRkVSX0NPUFlfREVFUCBwYXJhbWV0ZXIgdG8gcGVyZm9ybQorICAgZGVlcCBtZW1vcnkgY29weS4gaWYgdGhlIGFsbG9jYXRvciBvZiBhIG1lbW9yeSBkb24ndCBzdXBwb3J0IG1lbV9jb3B5CisgICBpbnRlcmZhY2UsIHRoZSBpdCB3aWxsIHJldHVybiBOVUxMLCBpZiB0aGlzIGNhc2UsIHdlIGNhbiB1c2UKKyAgIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIHRvIGdldCBhIHNoYXJlZCBtZW1vcnkgYnVmZmVyIG9yIHRoZSBvcmlnbmFsCisgICBidWZmZXIgaWYgdGhlIGJ1ZmZlcidzIHJlZmNvdW50IGlzIDEuCisyLiAgbmV3IGZlYXR1cmUgaXMgbm8gYWRkZWQgaWYgY2FwcyBoYXMgbm8gZmVhdHVyZSBkdXJpbmcgY2FwcyBuZWdvdGlhdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ5NV0KKworU2lnbmVkLW9mZi1ieTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMgYi9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKK2luZGV4IGM5MTk4NjEuLjNjMGExZDcgMTAwNzU1CistLS0gYS9leHQvcGFuZ28vZ3N0YmFzZXRleHRvdmVybGF5LmMKKysrKyBiL2V4dC9wYW5nby9nc3RiYXNldGV4dG92ZXJsYXkuYworQEAgLTc0Nyw2ICs3NDcsNyBAQCBnc3RfYmFzZV90ZXh0X292ZXJsYXlfbmVnb3RpYXRlIChHc3RCYXNlVGV4dE92ZXJsYXkgKiBvdmVybGF5LCBHc3RDYXBzICogY2FwcykKKyAgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgIGYgPSBnc3RfY2Fwc19mZWF0dXJlc19uZXcKKyAgICAgICAgICAgKEdTVF9DQVBTX0ZFQVRVUkVfTUVUQV9HU1RfVklERU9fT1ZFUkxBWV9DT01QT1NJVElPTiwgTlVMTCk7CisrICAgICAgZ3N0X2NhcHNfc2V0X2ZlYXR1cmVzKG92ZXJsYXlfY2FwcywgMCwgZik7CisgICAgIH0gZWxzZSB7CisgICAgICAgZ3N0X2NhcHNfZmVhdHVyZXNfYWRkIChmLAorICAgICAgICAgICBHU1RfQ0FQU19GRUFUVVJFX01FVEFfR1NUX1ZJREVPX09WRVJMQVlfQ09NUE9TSVRJT04pOworQEAgLTE4OTAsMTYgKzE4OTEsNzEgQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X3B1c2hfZnJhbWUgKEdzdEJhc2VUZXh0T3ZlcmxheSAqIG92ZXJsYXksCisgICBpZiAoZ3N0X3BhZF9jaGVja19yZWNvbmZpZ3VyZSAob3ZlcmxheS0+c3JjcGFkKSkKKyAgICAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X25lZ290aWF0ZSAob3ZlcmxheSwgTlVMTCk7CisgCistICB2aWRlb19mcmFtZSA9IGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSAodmlkZW9fZnJhbWUpOworLQorICAgaWYgKG92ZXJsYXktPmF0dGFjaF9jb21wb190b19idWZmZXIpIHsKKyAgICAgR1NUX0RFQlVHX09CSkVDVCAob3ZlcmxheSwgIkF0dGFjaGluZyB0ZXh0IG92ZXJsYXkgaW1hZ2UgdG8gdmlkZW8gYnVmZmVyIik7CisrICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisgICAgIGdzdF9idWZmZXJfYWRkX3ZpZGVvX292ZXJsYXlfY29tcG9zaXRpb25fbWV0YSAodmlkZW9fZnJhbWUsCisgICAgICAgICBvdmVybGF5LT5jb21wb3NpdGlvbik7CisgICAgIC8qIEZJWE1FOiBlbXVsYXRlIHNoYWRlZCBiYWNrZ3JvdW5kIGJveCBpZiB3YW50X3NoYWRpbmc9dHJ1ZSAqLworICAgICBnb3RvIGRvbmU7CisgICB9CisgCisrICBnaW50IG0gPSBnc3RfYnVmZmVyX25fbWVtb3J5KHZpZGVvX2ZyYW1lKTsKKysgIGdib29sZWFuIG1lbV9yZG9ubHkgPSBGQUxTRTsKKysgIEdzdE1lbW9yeSAqbWVtOworKyAgR3N0QnVmZmVyICpvcmlnID0gdmlkZW9fZnJhbWU7CisrCisrICB3aGlsZSAoLS1tPj0wKSB7CisrICAgIG1lbSA9IGdzdF9idWZmZXJfZ2V0X21lbW9yeSh2aWRlb19mcmFtZSwgbSk7CisrICAgIGlmIChHU1RfTUVNT1JZX0lTX1JFQURPTkxZKG1lbSkpIHsKKysgICAgICBtZW1fcmRvbmx5ID0gVFJVRTsKKysgICAgICBnc3RfbWVtb3J5X3VucmVmIChtZW0pOworKyAgICAgIGJyZWFrOworKyAgICB9CisrICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICB9CisrCisrICBpZiAobWVtX3Jkb25seSkgeworKyAgICAvLyBzaW5jZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUganVzdCBsb29rdXAgdGhlIHJlZmNvdW50IHRvIGRldGVybWluZSBpZgorKyAgICAvLyBhIGJ1ZmZlciBpcyB3cml0YWJsZSwgYW5kIGl0IHdpbGwgdXNlIF9nc3RfYnVmZmVyX2NvcHkoKSB3aGljaCBkb24ndAorKyAgICAvLyBwZXJmb3JtIGEgZGVlcCBtZW1vcnkgY29weSBldmVuIGlmIHRoZSBmbGFnIG9mIGEgbWVtb3J5IGlzIHNldCB0bworKyAgICAvLyBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkuIFNvLCB3ZSBkZXRlY3QgdGhlIG1lbW9yeSBmbGFnIGFuZCB1c2UKKysgICAgLy8gZ3N0X2J1ZmZlcl9jb3B5X3JlZ2lvbiB3aXRoIEdTVF9CVUZGRVJfQ09QWV9ERUVQIHBhcmFtZXRlciB0byBwZXJmb3JtCisrICAgIC8vIGRlZXAgbWVtb3J5IGNvcHkuIGlmIHRoZSBhbGxvY2F0b3Igb2YgYSBtZW1vcnkgZG9uJ3Qgc3VwcG9ydCBtZW1fY29weQorKyAgICAvLyBpbnRlcmZhY2UsIHRoZSBpdCB3aWxsIHJldHVybiBOVUxMLCBpZiB0aGlzIGNhc2UsIHdlIGNhbiB1c2UKKysgICAgLy8gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgdG8gZ2V0IGEgc2hhcmVkIG1lbW9yeSBidWZmZXIgb3IgdGhlIG9yaWduYWwKKysgICAgLy8gYnVmZmVyIGlmIHRoZSBidWZmZXIncyByZWZjb3VudCBpcyAxLgorKyAgICBHc3RCdWZmZXIgKm5ld19idWYgPSBnc3RfYnVmZmVyX2NvcHlfcmVnaW9uICh2aWRlb19mcmFtZSwKKysgICAgICAgIEdTVF9CVUZGRVJfQ09QWV9BTEwgfCBHU1RfQlVGRkVSX0NPUFlfREVFUCwgMCwgLTEpOworKworKyAgICBHU1RfREVCVUdfT0JKRUNUIChvdmVybGF5LCAiY29weSAlcyB2aWRlbyBmcmFtZSBidWZmZXIgJXAgLT4gJXAiLAorKyAgICAgICAgZ190eXBlX25hbWUgKEdTVF9NSU5JX09CSkVDVF9UWVBFICh2aWRlb19mcmFtZSkpLCB2aWRlb19mcmFtZSwgbmV3X2J1Zik7CisrCisrICAgIGlmICghbmV3X2J1ZikgeworKyAgICAgIC8vbWF5YmUgdGhlIGFsbG9jYXRvciBkb24ndCBzdXBwb3J0IG1lbV9jb3B5IGludGVyZmFjZSwgdGhlIHdlIGp1c3QgdXNlCisrICAgICAgLy9nc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSB0byBnZXQgYSB3cml0YWJsZSBidWZmZXIuCisrICAgICAgdmlkZW9fZnJhbWUgPSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUgKHZpZGVvX2ZyYW1lKTsKKysgICAgfSBlbHNlIHsKKysgICAgICBnc3RfbWluaV9vYmplY3RfdW5yZWYgKHZpZGVvX2ZyYW1lKTsKKysgICAgICBHU1RfQlVGRkVSX0ZMQUdfVU5TRVQgKG5ld19idWYsIEdTVF9CVUZGRVJfRkxBR19UQUdfTUVNT1JZKTsKKysgICAgICB2aWRlb19mcmFtZSA9IG5ld19idWY7CisrICAgIH0KKysKKysgICAgaWYgKCF2aWRlb19mcmFtZSkgeworKyAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAob3ZlcmxheSwgIm1ha2Ugd3JpdGFibGUgYnVmZmVyIGZhaWxlZCIpOworKyAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKysgICAgfQorKworKyAgICBtID0gZ3N0X2J1ZmZlcl9uX21lbW9yeSh2aWRlb19mcmFtZSk7CisrICAgIHdoaWxlICgtLW0+PTApIHsKKysgICAgICBtZW0gPSBnc3RfYnVmZmVyX2dldF9tZW1vcnkodmlkZW9fZnJhbWUsIG0pOworKyAgICAgIEdTVF9NRU1PUllfRkxBR19VTlNFVCAobWVtLCBHU1RfTUVNT1JZX0ZMQUdfUkVBRE9OTFkpOworKyAgICAgIGdzdF9tZW1vcnlfdW5yZWYgKG1lbSk7CisrICAgIH0KKysgIH0gZWxzZSB7CisrICAgIHZpZGVvX2ZyYW1lID0gZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlICh2aWRlb19mcmFtZSk7CisrICB9CisrCisgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJm92ZXJsYXktPmluZm8sIHZpZGVvX2ZyYW1lLAorICAgICAgICAgICBHU1RfTUFQX1JFQURXUklURSkpCisgICAgIGdvdG8gaW52YWxpZF9mcmFtZTsKK0BAIC0xOTE4LDYgKzE5NzQsMTggQEAgZ3N0X2Jhc2VfdGV4dF9vdmVybGF5X3B1c2hfZnJhbWUgKEdzdEJhc2VUZXh0T3ZlcmxheSAqIG92ZXJsYXksCisgCisgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKCZmcmFtZSk7CisgCisrICBpZiAobWVtX3Jkb25seSAmJiBvcmlnID09IHZpZGVvX2ZyYW1lKSB7CisrICAgIC8vaWYgd2UgdXNlZCB0aGUgb3JpZ2luYWwgYnVmZmVyIGFuZCBpdCdzIG1lbSBpcyBzZXQgdG8gcmVhZCBvbmx5LAorKyAgICAvL3JlY292ZXIgdGhlIG1lbW9yeSByZWFkeSBvbmx5IGZsYWcgc2luY2Ugd2UgdW5zZXQgaXQgYmVmb3JlCisrICAgIC8vIGdzdF92aWRlb19mcmFtZV9tYXAgKCkKKysgICAgbSA9IGdzdF9idWZmZXJfbl9tZW1vcnkodmlkZW9fZnJhbWUpOworKyAgICB3aGlsZSAoLS1tPj0wKSB7CisrICAgICAgbWVtID0gZ3N0X2J1ZmZlcl9nZXRfbWVtb3J5KHZpZGVvX2ZyYW1lLCBtKTsKKysgICAgICBHU1RfTUVNT1JZX0ZMQUdTKG1lbSkgfD0gKEdTVF9NRU1PUllfRkxBR19SRUFET05MWSk7CisrICAgICAgZ3N0X21lbW9yeV91bnJlZiAobWVtKTsKKysgICAgfQorKyAgfQorKworIGRvbmU6CisgCisgICByZXR1cm4gZ3N0X3BhZF9wdXNoIChvdmVybGF5LT5zcmNwYWQsIHZpZGVvX2ZyYW1lKTsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDEtdmlkZW8tZnJhbWUtRG9uLXQtcmVmLWJ1ZmZlcnMtdHdpY2Utd2hlbi1tYXBwaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjQ3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaApAQCAtMCwwICsxLDI2IEBACitGcm9tIDI2OWY2NDJjNDVkODVjZmQ2MzBlZDQ5MDQ3OGU2YmQ2YjcxYTc2N2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogVHVlLCAxNiBTZXAgMjAxNCAwMTowNzoxOCArMDMwMAorU3ViamVjdDogW1BBVENIXSB2aWRlby1mcmFtZTogRG9uJ3QgcmVmIGJ1ZmZlcnMgdHdpY2Ugd2hlbiBtYXBwaW5nCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorLS0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitpbmRleCAwMWYyM2MwLi44YTlhZTk2IDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitAQCAtMTA1LDcgKzEwNSw3IEBAIGdzdF92aWRlb19mcmFtZV9tYXBfaWQgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgR3N0VmlkZW9JbmZvICogaW5mbywKKyAgICAgICBmcmFtZS0+ZGF0YVtpXSA9IGZyYW1lLT5tYXBbMF0uZGF0YSArIGluZm8tPm9mZnNldFtpXTsKKyAgICAgfQorICAgfQorLSAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworKyAgZnJhbWUtPmJ1ZmZlciA9IGJ1ZmZlcjsKKyAgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorICAgICBnc3RfYnVmZmVyX3JlZiAoZnJhbWUtPmJ1ZmZlcik7CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi1nc3RwbGF5c2luay1kb24tdC1zZXQtYXN5bmMtb2YtY3VzdG9tLXRleHQtc2luay10by1mLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YzE0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLWdzdHBsYXlzaW5rLWRvbi10LXNldC1hc3luYy1vZi1jdXN0b20tdGV4dC1zaW5rLXRvLWYucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSAwYTc4NTU1ZWE2YzhjMmYxZWUyN2VlNDcwN2U4ZDdhYTAwYWI3YTY2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBUaHUsIDE5IE1hciAyMDE1IDE0OjE1OjI1ICswODAwCitTdWJqZWN0OiBbUEFUQ0ggMi80XSBnc3RwbGF5c2luazogZG9uJ3Qgc2V0IGFzeW5jIG9mIGN1c3RvbSB0ZXh0LXNpbmsgdG8KKyBmYWxzZQorCitzZXQgYXN5bmMgdG8gZmFsc2UgbGVhZCB0byBBL1Ygc3luYyBwcm9ibGVtIHdoZW4gc2Vla2luZy4KK3RoZSBwcmVyb2xsIG5lZWQgdXNlIEdBUCBldmVudCBpbnN0ZWFkIG9mIHNldCBhc3luYyB0byBmYWxzZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OTldCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHBsYXlzaW5rLmMgYi9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGY1YTJkNDIuLmZiYTAxNzIKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RwbGF5c2luay5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0cGxheXNpbmsuYworQEAgLTI0MDgsNyArMjQwOCw3IEBAIGdlbl90ZXh0X2NoYWluIChHc3RQbGF5U2luayAqIHBsYXlzaW5rKQorICAgICAgICAgICBHX1RZUEVfQk9PTEVBTik7CisgICAgICAgaWYgKGVsZW0pIHsKKyAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGUgc3BhcnNlIHN1YnRpdGxlcyBkb24ndCBwYXJ0aWNpcGF0ZSBpbiB0aGUgcHJlcm9sbCAqLworLSAgICAgICAgZ19vYmplY3Rfc2V0IChlbGVtLCAiYXN5bmMiLCBGQUxTRSwgTlVMTCk7CisrICAgICAgICAvL2dfb2JqZWN0X3NldCAoZWxlbSwgImFzeW5jIiwgRkFMU0UsIE5VTEwpOworICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGxheXNpbmssICJhZGRpbmcgY3VzdG9tIHRleHQgc2luayIpOworICAgICAgICAgZ3N0X2Jpbl9hZGQgKGJpbiwgY2hhaW4tPnNpbmspOworICAgICAgICAgLyogTk9URSBzdHJlYW1zeW5jaHJvbml6ZXIgbmVlZHMgc3RyZWFtcyBkZWNvdXBsZWQgKi8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDY1YjVjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMi12aWRlby1mcmFtZS1BZGQtR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApAQCAtMCwwICsxLDg3IEBACitGcm9tIDQwYTI5M2Q0NGQxYWVjY2Y1ZWI4ZTg2ZjIzYTBiMTM2NjYxMTFjNWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAxNDozOToxNiArMDMwMAorU3ViamVjdDogW1BBVENIIDIvM10gdmlkZW8tZnJhbWU6IEFkZCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGCisKK1RoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBidWZmZXIgaXMgbm90IHJlZmZlZCBhbm90aGVyIHRpbWUgd2hlbgorc3RvcmluZyBpdCBpbiB0aGUgR3N0VmlkZW9GcmFtZSwga2VlcGluZyBpdCB3cml0YWJsZSBpZiBpdCB3YXMKK3dyaXRhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYxMTgKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jIHwgICAgOSArKysrKysrKy0KKyBnc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaCB8ICAgMTggKysrKysrKysrKysrKysrKysrCisgMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuYyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitpbmRleCA1MzdjZjcwLi4wMWYyM2MwIDEwMDY0NAorLS0tIGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5jCitAQCAtMTA2LDYgKzEwNiw5IEBAIGdzdF92aWRlb19mcmFtZV9tYXBfaWQgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSwgR3N0VmlkZW9JbmZvICogaW5mbywKKyAgICAgfQorICAgfQorICAgZnJhbWUtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmIChidWZmZXIpOworKyAgaWYgKChmbGFncyAmIEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYpID09IDApCisrICAgIGdzdF9idWZmZXJfcmVmIChmcmFtZS0+YnVmZmVyKTsKKysKKyAgIGZyYW1lLT5tZXRhID0gbWV0YTsKKyAKKyAgIC8qIGJ1ZmZlciBmbGFncyBlbmhhbmNlIHRoZSBmcmFtZSBmbGFncyAqLworQEAgLTE4OSwxMSArMTkyLDEzIEBAIGdzdF92aWRlb19mcmFtZV91bm1hcCAoR3N0VmlkZW9GcmFtZSAqIGZyYW1lKQorICAgR3N0QnVmZmVyICpidWZmZXI7CisgICBHc3RWaWRlb01ldGEgKm1ldGE7CisgICBnaW50IGk7CisrICBHc3RNYXBGbGFncyBmbGFnczsKKyAKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZyYW1lICE9IE5VTEwpOworIAorICAgYnVmZmVyID0gZnJhbWUtPmJ1ZmZlcjsKKyAgIG1ldGEgPSBmcmFtZS0+bWV0YTsKKysgIGZsYWdzID0gZnJhbWUtPm1hcFswXS5mbGFnczsKKyAKKyAgIGlmIChtZXRhKSB7CisgICAgIGZvciAoaSA9IDA7IGkgPCBmcmFtZS0+aW5mby5maW5mby0+bl9wbGFuZXM7IGkrKykgeworQEAgLTIwMiw3ICsyMDcsOSBAQCBnc3RfdmlkZW9fZnJhbWVfdW5tYXAgKEdzdFZpZGVvRnJhbWUgKiBmcmFtZSkKKyAgIH0gZWxzZSB7CisgICAgIGdzdF9idWZmZXJfdW5tYXAgKGJ1ZmZlciwgJmZyYW1lLT5tYXBbMF0pOworICAgfQorLSAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmZmVyKTsKKysKKysgIGlmICgoZmxhZ3MgJiBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSA9PSAwKQorKyAgICBnc3RfYnVmZmVyX3VucmVmIChmcmFtZS0+YnVmZmVyKTsKKyB9CisgCisgLyoqCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL3ZpZGVvLWZyYW1lLmggYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAoraW5kZXggNjI3ZmFiMC4uZjhlNjMwNCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby92aWRlby1mcmFtZS5oCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vdmlkZW8tZnJhbWUuaAorQEAgLTE0OSw2ICsxNDksMjQgQEAgdHlwZWRlZiBlbnVtIHsKKyAgIEdTVF9WSURFT19CVUZGRVJfRkxBR19MQVNUICAgICAgICA9IChHU1RfQlVGRkVSX0ZMQUdfTEFTVCA8PCA4KQorIH0gR3N0VmlkZW9CdWZmZXJGbGFnczsKKyAKKysvKioKKysgKiBHc3RWaWRlb0J1ZmZlckZsYWdzOgorKyAqIEBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGOiAgRG9uJ3QgdGFrZSBhbm90aGVyIHJlZmVyZW5jZSBvZiB0aGUgYnVmZmVyIGFuZCBzdG9yZSBpdCBpbgorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIEdzdFZpZGVvRnJhbWUuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBidWZmZXIgc3RheXMKKysgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlIHdoaWxlIHRoZSBmcmFtZSBpcyBtYXBwZWQsIGJ1dCByZXF1aXJlcyB0aGF0IHRoZQorKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyIHJlZmVyZW5jZSBzdGF5cyB2YWxpZCB1bnRpbCB0aGUgZnJhbWUgaXMgdW5tYXBwZWQgYWdhaW4uCisrICogQEdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19MQVNUOiAgICBPZmZzZXQgdG8gZGVmaW5lIG1vcmUgZmxhZ3MKKysgKgorKyAqIEFkZGl0aW9uYWwgbWFwcGluZyBmbGFncyBmb3IgZ3N0X3ZpZGVvX2ZyYW1lX21hcCgpLgorKyAqCisrICogU2luY2U6IDEuNgorKyAqLworK3R5cGVkZWYgZW51bSB7CisrICBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGICAgPSAoR1NUX01BUF9GTEFHX0xBU1QgPDwgMCksCisrICBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTEFTVCAgICAgPSAoR1NUX01BUF9GTEFHX0xBU1QgPDwgOCkKKysgIC8qIDggbW9yZSBmbGFncyBwb3NzaWJsZSBhZnRlcndhcmRzICovCisrfSBHc3RWaWRlb0ZyYW1lTWFwRmxhZ3M7CisrCisgR19FTkRfREVDTFMKKyAKKyAjZW5kaWYgLyogX19HU1RfVklERU9fRlJBTUVfSF9fICovCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXNzYXBhcnNlLWVuaGFuY2UtU1NBLXRleHQtbGluZXMtcGFyc2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmJlYmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvMDAwMy1zc2FwYXJzZS1lbmhhbmNlLVNTQS10ZXh0LWxpbmVzLXBhcnNpbmcucGF0Y2gKQEAgLTAsMCArMSwyMjUgQEAKK0Zyb20gYmU2MTYzY2ZhM2EyNTU0OTNmOWQ3NWJhZDk1NDFjYmZlMTcyM2ZlZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxOSBNYXIgMjAxNSAxNDoxNzoxMCArMDgwMAorU3ViamVjdDogW1BBVENIIDMvNF0gc3NhcGFyc2U6IGVuaGFuY2UgU1NBIHRleHQgbGluZXMgcGFyc2luZy4KKworc29tZSBwYXJzZXIgd2lsbCBwYXNzIGluIHRoZSBvcmlnaW5hbCBzc2EgdGV4dCBsaW5lIHdoaWNoIHN0YXJ0cyB3aXRoICJEaWFsb2c6IgorYW5kIHRoZXJlJ3MgYXJlIG1heWJlIG11bHRpcGxlIERpYWxvZyBsaW5lcyBpbiBvbmUgaW5wdXQgYnVmZmVyLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzQ5Nl0KKworU2lnbmVkLW9mZi1ieTogTWluZ2tlIFdhbmcgPG1pbmdrZS53YW5nQGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3Qvc3VicGFyc2UvZ3N0c3NhcGFyc2UuYyBiL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggMDZlY2VmOS4uMGFiNWRjZQorLS0tIGEvZ3N0L3N1YnBhcnNlL2dzdHNzYXBhcnNlLmMKKysrKyBiL2dzdC9zdWJwYXJzZS9nc3Rzc2FwYXJzZS5jCitAQCAtMjYwLDYgKzI2MCw3IEBAIGdzdF9zc2FfcGFyc2VfcmVtb3ZlX292ZXJyaWRlX2NvZGVzIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCkKKyAgKiBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZToKKyAgKiBAcGFyc2U6IGNhbGxlciBlbGVtZW50CisgICogQHR4dDogdGV4dCB0byBwdXNoCisrICogQHNpemU6IHRleHQgc2l6ZSBuZWVkIHRvIGJlIHBhcnNlCisgICogQHN0YXJ0OiB0aW1lc3RhbXAgZm9yIHRoZSBidWZmZXIKKyAgKiBAZHVyYXRpb246IGR1cmF0aW9uIGZvciB0aGUgYnVmZmVyCisgICoKK0BAIC0yNjksMjcgKzI3MCwxMzMgQEAgZ3N0X3NzYV9wYXJzZV9yZW1vdmVfb3ZlcnJpZGVfY29kZXMgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0KQorICAqIFJldHVybnM6IHJlc3VsdCBvZiB0aGUgcHVzaCBvZiB0aGUgY3JlYXRlZCBidWZmZXIKKyAgKi8KKyBzdGF0aWMgR3N0Rmxvd1JldHVybgorLWdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChHc3RTc2FQYXJzZSAqIHBhcnNlLCBnY2hhciAqIHR4dCwKKytnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAoR3N0U3NhUGFyc2UgKiBwYXJzZSwgZ2NoYXIgKiB0eHQsIGdpbnQgc2l6ZSwKKyAgICAgR3N0Q2xvY2tUaW1lIHN0YXJ0LCBHc3RDbG9ja1RpbWUgZHVyYXRpb24pCisgeworICAgR3N0Rmxvd1JldHVybiByZXQ7CisgICBHc3RCdWZmZXIgKmJ1ZjsKKy0gIGdjaGFyICp0LCAqZXNjYXBlZDsKKysgIGdjaGFyICp0LCAqdGV4dCwgKnAsICplc2NhcGVkLCAqcF9zdGFydCwgKnBfZW5kOworICAgZ2ludCBudW0sIGksIGxlbjsKKysgIEdzdENsb2NrVGltZSBzdGFydF90aW1lID0gR19NQVhVSU5UNjQsIGVuZF90aW1lID0gMDsKKyAKKy0gIG51bSA9IGF0b2kgKHR4dCk7CistICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJQYXJzaW5nIGxpbmUgIyVkIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKy0gICAgICBudW0sIEdTVF9USU1FX0FSR1MgKHN0YXJ0KSk7CistCistICAvKiBza2lwIGFsbCBub24tdGV4dCBmaWVsZHMgYmVmb3JlIHRoZSBhY3R1YWwgdGV4dCAqLworKyAgcCA9IHRleHQgPSBnX21hbGxvYyhzaXplICsgMSk7CisrICAqcCA9ICdcMCc7CisgICB0ID0gdHh0OworLSAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworLSAgICB0ID0gc3RyY2hyICh0LCAnLCcpOworKworKyAgLyogdGhlcmUgYXJlIG1heSBoYXZlIG11bHRpcGxlIGRpYWxvZ3VlIGxpbmVzIGF0IGEgdGltZSAqLworKyAgd2hpbGUgKCp0KSB7CisrICAgIC8qIGlnbm9yZSBsZWFkaW5nIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMgKi8KKysgICAgd2hpbGUgKGlzc3BhY2UoKnQpKQorKyAgICAgIHQrKzsKKysKKysgICAgLyogaWdub3JlIEZvcm1hdDogYW5kIFN0eWxlOiBsaW5lcyAqLworKyAgICBpZiAoc3RybmNtcCh0LCAiRm9ybWF0OiIsIDcpID09IDAgfHwgc3RybmNtcCh0LCAiU3R5bGU6IiwgNikgPT0gMCkgeworKyAgICAgIHdoaWxlICgqdCAhPSAnXDAnICYmICp0ICE9ICdcbicpIHsKKysgICAgICAgIHQrKzsKKysgICAgICB9CisrICAgIH0KKysKKysgICAgaWYgKCp0ID09ICdcMCcpCisrICAgICAgYnJlYWs7CisrCisrICAgIC8qIGNvbnRpbnVlIHdpdGggbmV4dCBsaW5lICovCisrICAgIGlmICgqdCA9PSAnXG4nKSB7CisrICAgICAgdCsrOworKyAgICAgIGNvbnRpbnVlOworKyAgICB9CisrCisrICAgIGlmKHN0cm5jbXAodCwgIkRpYWxvZ3VlOiIsIDkpICE9IDApIHsKKysgICAgICAvKiBub3Qgc3RhcnRlZCB3aXRoICJEaWFsb2d1ZToiLCBpdCBtdXN0IGJlIGEgbGluZSB0cmltbWVkIGJ5IGRlbXV4ZXIgKi8KKysgICAgICBudW0gPSBhdG9pICh0KTsKKysgICAgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJQYXJzaW5nIGxpbmUgIyVkIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCwKKysgICAgICAgICAgbnVtLCBHU1RfVElNRV9BUkdTIChzdGFydCkpOworKworKyAgICAgIC8qIHNraXAgYWxsIG5vbi10ZXh0IGZpZWxkcyBiZWZvcmUgdGhlIGFjdHVhbCB0ZXh0ICovCisrICAgICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkgeworKyAgICAgICAgdCA9IHN0cmNociAodCwgJywnKTsKKysgICAgICAgIGlmICh0ID09IE5VTEwpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgKyt0OworKyAgICAgIH0KKysgICAgfSBlbHNlIHsKKysgICAgICAvKiBzdGFydGVkIHdpdGggIkRpYWxvZ3VlOiIsIHVwZGF0ZSB0aW1lc3RhbXAgYW5kIGR1cmF0aW9uICovCisrICAgICAgLyogdGltZSBmb3JtYXQgYXJlIGxpa2UgRGlhbG9nOk1hcmssMDowMDowMS4wMiwwOjAwOjAzLjA0LHh4LHh4eCwuLi4gKi8KKysgICAgICBndWludCBob3VyLCBtaW4sIHNlYywgbXNlYywgbGVuOworKyAgICAgIEdzdENsb2NrVGltZSB0bXA7CisrICAgICAgZ2NoYXIgdF9zdHJbMTJdID0gezB9OworKworKyAgICAgIC8qIGZpbmQgdGhlIGZpcnN0ICcsJyAqLworKyAgICAgIHBfc3RhcnQgPSBzdHJjaHIgKHQsICcsJyk7CisrICAgICAgaWYgKHBfc3RhcnQpCisrICAgICAgICBwX2VuZCA9IHN0cmNociAoKytwX3N0YXJ0LCAnLCcpOworKworKyAgICAgIGlmIChwX3N0YXJ0ICYmIHBfZW5kKSB7CisrICAgICAgICAvKiBjb3B5IHRleHQgYmV0d2VlbiBmaXJzdCAnLCcgYW5kIHNlY29uZCAnLCcgKi8KKysgICAgICAgIHN0cm5jcHkodF9zdHIsIHBfc3RhcnQsIHBfZW5kIC0gcF9zdGFydCk7CisrICAgICAgICBpZiAoc3NjYW5mICh0X3N0ciwgIiV1OiV1OiV1LiV1IiwgJmhvdXIsICZtaW4sICZzZWMsICZtc2VjKSA9PSA0KSB7CisrICAgICAgICAgIHRtcCA9ICgoaG91ciozNjAwKSArIChtaW4qNjApICsgc2VjKSAqIEdTVF9TRUNPTkQgKyBtc2VjKkdTVF9NU0VDT05EOworKyAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUIChwYXJzZSwgIkdldCBzdGFydCB0aW1lOiUwMmQ6JTAyZDolMDJkOiUwM2RcbiIsCisrICAgICAgICAgICAgICBob3VyLCBtaW4sIHNlYywgbXNlYyk7CisrICAgICAgICAgIGlmIChzdGFydF90aW1lID4gdG1wKQorKyAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0bXA7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QgKHBhcnNlLAorKyAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBzc2Egc3RhcnQgdGltZXN0YW1wIHN0cmluZyA6JXMiLCB0X3N0cik7CisrICAgICAgICB9CisrCisrICAgICAgICBwX3N0YXJ0ID0gcF9lbmQ7CisrICAgICAgICBwX2VuZCA9IHN0cmNociAoKytwX3N0YXJ0LCAnLCcpOworKyAgICAgICAgaWYgKHBfZW5kKSB7CisrICAgICAgICAgIC8qIGNvcHkgdGV4dCBiZXR3ZWVuIHNlY29uZCAnLCcgYW5kIHRoaXJkICcsJyAqLworKyAgICAgICAgICBzdHJuY3B5KHRfc3RyLCBwX3N0YXJ0LCBwX2VuZCAtIHBfc3RhcnQpOworKyAgICAgICAgICBpZiAoc3NjYW5mICh0X3N0ciwgIiV1OiV1OiV1LiV1IiwgJmhvdXIsICZtaW4sICZzZWMsICZtc2VjKSA9PSA0KSB7CisrICAgICAgICAgICAgdG1wID0gKChob3VyKjM2MDApICsgKG1pbio2MCkgKyBzZWMpKkdTVF9TRUNPTkQgKyBtc2VjKkdTVF9NU0VDT05EOworKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFyc2UsICJHZXQgZW5kIHRpbWU6JTAyZDolMDJkOiUwMmQ6JTAzZFxuIiwKKysgICAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMsIG1zZWMpOworKyAgICAgICAgICAgIGlmIChlbmRfdGltZSA8IHRtcCkKKysgICAgICAgICAgICAgIGVuZF90aW1lID0gdG1wOworKyAgICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVCAocGFyc2UsCisrICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2Ugc3NhIGVuZCB0aW1lc3RhbXAgc3RyaW5nIDolcyIsIHRfc3RyKTsKKysgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICAgIH0KKysKKysgICAgICAvKiBub3cgc2tpcCBhbGwgbm9uLXRleHQgZmllbGRzIGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgKi8KKysgICAgICBmb3IgKGkgPSAwOyBpIDw9IDg7ICsraSkgeworKyAgICAgICAgdCA9IHN0cmNociAodCwgJywnKTsKKysgICAgICAgIGlmICh0ID09IE5VTEwpCisrICAgICAgICAgIGJyZWFrOworKyAgICAgICAgKyt0OworKyAgICAgIH0KKysgICAgfQorKworKyAgICAvKiBsaW5lIGVuZCBiZWZvcmUgZXhwZWN0ZWQgbnVtYmVyIG9mICcsJywgbm90IGEgRGlhbG9ndWUgbGluZSAqLworICAgICBpZiAodCA9PSBOVUxMKQorLSAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKy0gICAgKyt0OworKyAgICAgIGJyZWFrOworKworKyAgICAvKiBpZiBub3QgdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgcHJldmlvdXMgbGluZSBpcyAnXDAnLAorKyAgICAgKiB0aGVuIHJlcGxhY2UgaXQgd2l0aCAnXE4nICovCisrICAgIGlmIChwICE9IHRleHQgJiYgKnAgPT0gJ1wwJykgeworKyAgICAgICpwKysgPSAnXFwnOworKyAgICAgICpwKysgPSAnTic7CisrICAgIH0KKysKKysgICAgLyogY29weSBhbGwgYWN0dWFsIHRleHQgb2YgdGhpcyBsaW5lICovCisrICAgIHdoaWxlICgoKnQgIT0gJ1wwJykgJiYgKCp0ICE9ICdcbicpKQorKyAgICAgICpwKysgPSAqdCsrOworKworKyAgICAvKiBhZGQgYSB0ZXJtaW5hdG9yIGF0IHRoZSBlbmQgKi8KKysgICAgKnAgPSAnXDAnOworKyAgfQorKworKyAgLyogbm90IHZhbGlkIHRleHQgZm91bmQgaW4gdGhpcyBidWZmZXIgcmV0dXJuIE9LIHRvIGxldCBjYWxsZXIgdW5yZWYgYnVmZmVyICovCisrICBpZiAoc3RybGVuKHRleHQpIDw9IDApIHsKKysgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChwYXJzZSwgIk5vdCB2YWxpZCB0ZXh0IGZvdW5kIGluIHRoaXMgYnVmZmVyXG4iKTsKKysgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgfQorIAorKyAgdCA9IHRleHQ7CisgICBHU1RfTE9HX09CSkVDVCAocGFyc2UsICJUZXh0IDogJXMiLCB0KTsKKyAKKyAgIGlmIChnc3Rfc3NhX3BhcnNlX3JlbW92ZV9vdmVycmlkZV9jb2RlcyAocGFyc2UsIHQpKSB7CitAQCAtMzA3LDEzICs0MTQsMjIgQEAgZ3N0X3NzYV9wYXJzZV9wdXNoX2xpbmUgKEdzdFNzYVBhcnNlICogcGFyc2UsIGdjaGFyICogdHh0LAorICAgZ3N0X2J1ZmZlcl9maWxsIChidWYsIDAsIGVzY2FwZWQsIGxlbiArIDEpOworICAgZ3N0X2J1ZmZlcl9zZXRfc2l6ZSAoYnVmLCBsZW4pOworICAgZ19mcmVlIChlc2NhcGVkKTsKKysgIGdfZnJlZSh0KTsKKysKKysgIGlmIChzdGFydF90aW1lICE9IEdfTUFYVUlOVDY0KQorKyAgICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0X3RpbWU7CisrICBlbHNlCisrICAgIEdTVF9CVUZGRVJfVElNRVNUQU1QIChidWYpID0gc3RhcnQ7CisgCistICBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKSA9IHN0YXJ0OworLSAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGR1cmF0aW9uOworKyAgaWYgKGVuZF90aW1lID4gc3RhcnRfdGltZSkKKysgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGVuZF90aW1lIC0gc3RhcnRfdGltZTsKKysgIGVsc2UKKysgICAgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSA9IGR1cmF0aW9uOworIAorICAgR1NUX0xPR19PQkpFQ1QgKHBhcnNlLCAiUHVzaGluZyBidWZmZXIgd2l0aCB0aW1lc3RhbXAgJSIgR1NUX1RJTUVfRk9STUFUCistICAgICAgIiBhbmQgZHVyYXRpb24gJSIgR1NUX1RJTUVfRk9STUFULCBHU1RfVElNRV9BUkdTIChzdGFydCksCistICAgICAgR1NUX1RJTUVfQVJHUyAoZHVyYXRpb24pKTsKKysgICAgICAiIGFuZCBkdXJhdGlvbiAlIiBHU1RfVElNRV9GT1JNQVQsCisrICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpLAorKyAgICAgIEdTVF9USU1FX0FSR1MgKEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpKTsKKyAKKyAgIHJldCA9IGdzdF9wYWRfcHVzaCAocGFyc2UtPnNyY3BhZCwgYnVmKTsKKyAKK0BAIC0zMzMsNiArNDQ5LDcgQEAgZ3N0X3NzYV9wYXJzZV9jaGFpbiAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCisgICBHc3RDbG9ja1RpbWUgdHM7CisgICBnY2hhciAqdHh0OworICAgR3N0TWFwSW5mbyBtYXA7CisrICBnaW50IHNpemU7CisgCisgICBpZiAoR19VTkxJS0VMWSAoIXBhcnNlLT5mcmFtZWQpKQorICAgICBnb3RvIG5vdF9mcmFtZWQ7CitAQCAtMzUwLDEzICs0NjcsMTQgQEAgZ3N0X3NzYV9wYXJzZV9jaGFpbiAoR3N0UGFkICogc2lua3BhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCisgICAvKiBtYWtlIGRvdWJsZS1zdXJlIGl0J3MgMC10ZXJtaW5hdGVkIGFuZCBhbGwgKi8KKyAgIGdzdF9idWZmZXJfbWFwIChidWYsICZtYXAsIEdTVF9NQVBfUkVBRCk7CisgICB0eHQgPSBnX3N0cm5kdXAgKChnY2hhciAqKSBtYXAuZGF0YSwgbWFwLnNpemUpOworKyAgc2l6ZSA9IG1hcC5zaXplOworICAgZ3N0X2J1ZmZlcl91bm1hcCAoYnVmLCAmbWFwKTsKKyAKKyAgIGlmICh0eHQgPT0gTlVMTCkKKyAgICAgZ290byBlbXB0eV90ZXh0OworIAorICAgdHMgPSBHU1RfQlVGRkVSX1RJTUVTVEFNUCAoYnVmKTsKKy0gIHJldCA9IGdzdF9zc2FfcGFyc2VfcHVzaF9saW5lIChwYXJzZSwgdHh0LCB0cywgR1NUX0JVRkZFUl9EVVJBVElPTiAoYnVmKSk7CisrICByZXQgPSBnc3Rfc3NhX3BhcnNlX3B1c2hfbGluZSAocGFyc2UsIHR4dCwgc2l6ZSwgdHMsIEdTVF9CVUZGRVJfRFVSQVRJT04gKGJ1ZikpOworIAorICAgaWYgKHJldCAhPSBHU1RfRkxPV19PSyAmJiBHU1RfQ0xPQ0tfVElNRV9JU19WQUxJRCAodHMpKSB7CisgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDMtdmlkZW9maWx0ZXItVXNlLW5ldy1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDAzLXZpZGVvZmlsdGVyLVVzZS1uZXctR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRi5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIDNhN2NkY2RmYzljNWIwZDIwMzk0ZmU1MWIzYjhjZGEyMzkzMWNhNmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA9P1VURi04P3E/U2ViYXN0aWFuPTIwRHI9QzM9QjZnZT89IDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorRGF0ZTogRnJpLCAxMiBTZXAgMjAxNCAxNDo0MTowMSArMDMwMAorU3ViamVjdDogW1BBVENIIDMvM10gdmlkZW9maWx0ZXI6IFVzZSBuZXcgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFsxLjUuMV0KK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzYxMTgKKy0tLQorIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jIHwgICAyMyArKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZmlsdGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworaW5kZXggZTFmYTJjMS4uODc0YjJlOCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2ZpbHRlci5jCisrKysgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9maWx0ZXIuYworQEAgLTI2MCwyMyArMjYwLDE1IEBAIGdzdF92aWRlb19maWx0ZXJfdHJhbnNmb3JtIChHc3RCYXNlVHJhbnNmb3JtICogdHJhbnMsIEdzdEJ1ZmZlciAqIGluYnVmLAorICAgaWYgKGZjbGFzcy0+dHJhbnNmb3JtX2ZyYW1lKSB7CisgICAgIEdzdFZpZGVvRnJhbWUgaW5fZnJhbWUsIG91dF9mcmFtZTsKKyAKKy0gICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmaW5fZnJhbWUsICZmaWx0ZXItPmluX2luZm8sIGluYnVmLCBHU1RfTUFQX1JFQUQpKQorKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZpbl9mcmFtZSwgJmZpbHRlci0+aW5faW5mbywgaW5idWYsCisrICAgICAgICAgICAgR1NUX01BUF9SRUFEIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRikpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKyAgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwICgmb3V0X2ZyYW1lLCAmZmlsdGVyLT5vdXRfaW5mbywgb3V0YnVmLAorLSAgICAgICAgICAgIEdTVF9NQVBfV1JJVEUpKQorKyAgICAgICAgICAgIEdTVF9NQVBfV1JJVEUgfCBHU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGKSkKKyAgICAgICBnb3RvIGludmFsaWRfYnVmZmVyOworIAorLSAgICAvKiBHc3RWaWRlb0ZyYW1lIGhhcyBhbm90aGVyIHJlZmVyZW5jZSwgc28gdGhlIGJ1ZmZlciBsb29rcyB1bndyaXRlYWJsZSwKKy0gICAgICogbWVhbmluZyB0aGF0IHdlIGNhbid0IGF0dGFjaCBhbnkgbWV0YXMgb3IgYW55dGhpbmcgdG8gaXQuIE90aGVyCistICAgICAqIG1hcCgpIGZ1bmN0aW9ucyBsaWtlIGdzdF9idWZmZXJfbWFwKCkgZG9uJ3QgZ2V0IGFub3RoZXIgcmVmZXJlbmNlCistICAgICAqIG9mIHRoZSBidWZmZXIgYW5kIGV4cGVjdCB0aGUgYnVmZmVyIHJlZmVyZW5jZSB0byBiZSBrZXB0IHVudGlsCistICAgICAqIHRoZSBidWZmZXIgaXMgdW5tYXBwZWQgYWdhaW4uICovCistICAgIGdzdF9idWZmZXJfdW5yZWYgKGluYnVmKTsKKy0gICAgZ3N0X2J1ZmZlcl91bnJlZiAob3V0YnVmKTsKKyAgICAgcmVzID0gZmNsYXNzLT50cmFuc2Zvcm1fZnJhbWUgKGZpbHRlciwgJmluX2ZyYW1lLCAmb3V0X2ZyYW1lKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKGluYnVmKTsKKy0gICAgZ3N0X2J1ZmZlcl9yZWYgKG91dGJ1Zik7CisgCisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJm91dF9mcmFtZSk7CisgICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCAoJmluX2ZyYW1lKTsKK0BAIC0zMTcsNyArMzA5LDcgQEAgZ3N0X3ZpZGVvX2ZpbHRlcl90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQorICAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOworICAgICBHc3RNYXBGbGFncyBmbGFnczsKKyAKKy0gICAgZmxhZ3MgPSBHU1RfTUFQX1JFQUQ7CisrICAgIGZsYWdzID0gR1NUX01BUF9SRUFEIHwgR1NUX1ZJREVPX0ZSQU1FX01BUF9GTEFHX05PX1JFRjsKKyAKKyAgICAgaWYgKCFnc3RfYmFzZV90cmFuc2Zvcm1faXNfcGFzc3Rocm91Z2ggKHRyYW5zKSkKKyAgICAgICBmbGFncyB8PSBHU1RfTUFQX1dSSVRFOworQEAgLTMyNSwxNCArMzE3LDcgQEAgZ3N0X3ZpZGVvX2ZpbHRlcl90cmFuc2Zvcm1faXAgKEdzdEJhc2VUcmFuc2Zvcm0gKiB0cmFucywgR3N0QnVmZmVyICogYnVmKQorICAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAgKCZmcmFtZSwgJmZpbHRlci0+aW5faW5mbywgYnVmLCBmbGFncykpCisgICAgICAgZ290byBpbnZhbGlkX2J1ZmZlcjsKKyAKKy0gICAgLyogR3N0VmlkZW9GcmFtZSBoYXMgYW5vdGhlciByZWZlcmVuY2UsIHNvIHRoZSBidWZmZXIgbG9va3MgdW53cml0ZWFibGUsCistICAgICAqIG1lYW5pbmcgdGhhdCB3ZSBjYW4ndCBhdHRhY2ggYW55IG1ldGFzIG9yIGFueXRoaW5nIHRvIGl0LiBPdGhlcgorLSAgICAgKiBtYXAoKSBmdW5jdGlvbnMgbGlrZSBnc3RfYnVmZmVyX21hcCgpIGRvbid0IGdldCBhbm90aGVyIHJlZmVyZW5jZQorLSAgICAgKiBvZiB0aGUgYnVmZmVyIGFuZCBleHBlY3QgdGhlIGJ1ZmZlciByZWZlcmVuY2UgdG8gYmUga2VwdCB1bnRpbAorLSAgICAgKiB0aGUgYnVmZmVyIGlzIHVubWFwcGVkIGFnYWluLiAqLworLSAgICBnc3RfYnVmZmVyX3VucmVmIChidWYpOworICAgICByZXMgPSBmY2xhc3MtPnRyYW5zZm9ybV9mcmFtZV9pcCAoZmlsdGVyLCAmZnJhbWUpOworLSAgICBnc3RfYnVmZmVyX3JlZiAoYnVmKTsKKyAKKyAgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwICgmZnJhbWUpOworICAgfSBlbHNlIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzgxMzkxNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLzAwMDQtc3VicGFyc2Utc2V0LW5lZWRfc2VnbWVudC1hZnRlci1zaW5rLXBhZC1yZWNlaXZlZC1HUy5wYXRjaApAQCAtMCwwICsxLDY5IEBACitGcm9tIGVkMDljOGZkMmM5YzJiNTM4NGI3MmNjNzBhZjM3MjhiZTY2OTRlNjQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaW5na2UgV2FuZyA8bWluZ2tlLndhbmdAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgMTkgTWFyIDIwMTUgMTQ6MjA6MjYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSCA0LzRdIHN1YnBhcnNlOiBzZXQgbmVlZF9zZWdtZW50IGFmdGVyIHNpbmsgcGFkIHJlY2VpdmVkCisgR1NUX0VWRU5UX1NFR01FTlQKKworc3VicGFyc2Ugd29ya3MgaW4gcHVzaCBtb2RlLCBjaGFpbiBmdW5jaXRvbiB3aWxsIGJlIGNhbGxlZCBvbmNlCit1cCBzdHJlYW0gZWxlbWVudCBmaW5pc2hlZCB0aGUgc2Vla2luZyBhbmQgZmx1c2hpbmcuCitpZiBzZXQgbmVlZF9zZWdtZW50IGZsYWcgaW4gc3JjIHBhZCBldmVudCBoYW5kbGVyLCB0aGUgc2VnbWVudAorZXZlbnQgd2lsbCBiZSBwdXNoZWQgZWFybGllciwgcmVzdWx0IGluIHRoZSBzdWJ0aXRsZSB0ZXh0IHdpbGwKK2JlIHNlbmQgb3V0IHRvIGRvd24gc3RyZWFtIGZyb20gdGhlIGJlZ2lubmluZy4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDc0OThdCisKK1NpZ25lZC1vZmYtYnk6IE1pbmdrZSBXYW5nIDxtaW5na2Uud2FuZ0BmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0L3N1YnBhcnNlL2dzdHN1YnBhcnNlLmMgYi9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IGI1NjVlOTMuLjc3NDFjY2MKKy0tLSBhL2dzdC9zdWJwYXJzZS9nc3RzdWJwYXJzZS5jCisrKysgYi9nc3Qvc3VicGFyc2UvZ3N0c3VicGFyc2UuYworQEAgLTI2NiwyMiArMjY2LDIwIEBAIGdzdF9zdWJfcGFyc2Vfc3JjX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICAgIGdvdG8gYmVhY2g7CisgICAgICAgfQorIAorKyAgICAgIC8qIEFwcGx5IHRoZSBzZWVrIHRvIG91ciBzZWdtZW50ICovCisrICAgICAgZ3N0X3NlZ21lbnRfZG9fc2VlayAoJnNlbGYtPnNlZ21lbnQsIHJhdGUsIGZvcm1hdCwgZmxhZ3MsCisrICAgICAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworKworKyAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHNlbGYsICJzZWdtZW50IGFmdGVyIHNlZWs6ICUiIEdTVF9TRUdNRU5UX0ZPUk1BVCwKKysgICAgICAgICAgJnNlbGYtPnNlZ21lbnQpOworKworICAgICAgIC8qIENvbnZlcnQgdGhhdCBzZWVrIHRvIGEgc2Vla2luZyBpbiBieXRlcyBhdCBwb3NpdGlvbiAwLAorICAgICAgICAgIEZJWE1FOiBjb3VsZCB1c2UgYW4gaW5kZXggKi8KKyAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNlbGYtPnNpbmtwYWQsCisgICAgICAgICAgIGdzdF9ldmVudF9uZXdfc2VlayAocmF0ZSwgR1NUX0ZPUk1BVF9CWVRFUywgZmxhZ3MsCisgICAgICAgICAgICAgICBHU1RfU0VFS19UWVBFX1NFVCwgMCwgR1NUX1NFRUtfVFlQRV9OT05FLCAwKSk7CisgCistICAgICAgaWYgKHJldCkgeworLSAgICAgICAgLyogQXBwbHkgdGhlIHNlZWsgdG8gb3VyIHNlZ21lbnQgKi8KKy0gICAgICAgIGdzdF9zZWdtZW50X2RvX3NlZWsgKCZzZWxmLT5zZWdtZW50LCByYXRlLCBmb3JtYXQsIGZsYWdzLAorLSAgICAgICAgICAgIHN0YXJ0X3R5cGUsIHN0YXJ0LCBzdG9wX3R5cGUsIHN0b3AsICZ1cGRhdGUpOworLQorLSAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgInNlZ21lbnQgYWZ0ZXIgc2VlazogJSIgR1NUX1NFR01FTlRfRk9STUFULAorLSAgICAgICAgICAgICZzZWxmLT5zZWdtZW50KTsKKy0KKy0gICAgICAgIHNlbGYtPm5lZWRfc2VnbWVudCA9IFRSVUU7CistICAgICAgfSBlbHNlIHsKKysgICAgICBpZiAoIXJldCkgeworICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUIChzZWxmLCAic2VlayB0byAwIGJ5dGVzIGZhaWxlZCIpOworICAgICAgIH0KKyAKK0BAIC0xNjMyLDggKzE2MzAsMTAgQEAgZ3N0X3N1Yl9wYXJzZV9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICBnc3RfZXZlbnRfcGFyc2Vfc2VnbWVudCAoZXZlbnQsICZzKTsKKyAgICAgICBpZiAocy0+Zm9ybWF0ID09IEdTVF9GT1JNQVRfVElNRSkKKyAgICAgICAgIGdzdF9ldmVudF9jb3B5X3NlZ21lbnQgKGV2ZW50LCAmc2VsZi0+c2VnbWVudCk7CistICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIm5ld3NlZ21lbnQgKCVzKSIsCistICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlbGYtPnNlZ21lbnQuZm9ybWF0KSk7CisrICAgICAgR1NUX0RFQlVHX09CSkVDVCAoc2VsZiwgIm5ld3NlZ21lbnQgKCVzKSAlIiBHU1RfU0VHTUVOVF9GT1JNQVQsCisrICAgICAgICAgIGdzdF9mb3JtYXRfZ2V0X25hbWUgKHNlbGYtPnNlZ21lbnQuZm9ybWF0KSwgJnNlbGYtPnNlZ21lbnQpOworKworKyAgICAgIHNlbGYtPm5lZWRfc2VnbWVudCA9IFRSVUU7CisgCisgICAgICAgLyogaWYgbm90IHRpbWUgZm9ybWF0LCB3ZSdsbCBlaXRoZXIgc3RhcnQgd2l0aCBhIDAgdGltZXN0YW1wIGFueXdheSBvcgorICAgICAgICAqIGl0J3MgZm9sbG93aW5nIGEgc2VlayBpbiB3aGljaCBjYXNlIHdlJ2xsIGhhdmUgc2F2ZWQgdGhlIHJlcXVlc3RlZAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudC1pZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTU1ZGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50LWlmLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gYjYwOGQwMjdmZmY2ZWZjMmQxOTg4ZWJmMTY5Y2JlM2IyYjQ0YTYxYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFRodSwgOCBNYXkgMjAxNCAxMjowMToxNyArMDgwMAorU3ViamVjdDogW1BBVENIXSBFTkdSMDAzMTIwMzQ6IGRvIG5vdCBjaGFuZ2UgZW9zIGV2ZW50IHRvIGdhcCBldmVudCBpZiBubworIGRhdGEgaGFzIHBhc3NlZCB0byBzdHJlYW1zeW5jaHJvbml6ZXIuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjcwNzQKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyB8ICAgIDUgKystLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitpbmRleCAzOTk3ZDFiLi4zZTE3YzU1IDEwMDY0NAorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK0BAIC00ODgsMTIgKzQ4OCwxMSBAQCBnc3Rfc3RyZWFtX3N5bmNocm9uaXplcl9zaW5rX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwKKyAgICAgICAgIH0KKyAgICAgICAgIGdfc2xpc3RfZnJlZSAocGFkcyk7CisgICAgICAgfSBlbHNlIHsKKy0gICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIHNvbWV0aGluZyB0byByZXBsYWNlIEVPUworLSAgICAgICAgICogZm9yIHByZXJvbGwgcHVycG9zZXMgKi8KKysgICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIEVPUyBldmVudCAqLworICAgICAgICAgaWYgKCFzZWVuX2RhdGEpIHsKKyAgICAgICAgICAgR3N0RXZlbnQgKmdhcF9ldmVudDsKKyAKKy0gICAgICAgICAgZ2FwX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19nYXAgKHRpbWVzdGFtcCwgR1NUX0NMT0NLX1RJTUVfTk9ORSk7CisrICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworICAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ2FwX2V2ZW50KTsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjI0YmM3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDIucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorY29tbWl0IGY5NTM2NTQ0ZjVhZDE4MmI0Zjc4ZDAxNDNkMWRhYTQ1ZGQ2NGU2MjQKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCA5IDE3OjM3OjQzIDIwMTQgKzA4MDAKKworW2dzdHN0cmVhbXN5bmNocm9uaXplcl0gc2VuZCBFT1MgZXZlbnQgaW5zdGVyZCBvZiBHQVAgZXZlbnQgYXMgR0FQCitldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZSBkaWZmZXJlbnQgZHVyYXRpb24uCisgICAgCitzZW5kIEVPUyBldmVudCBpbnN0ZXJkIG9mIEdBUCBldmVudCBhcyBHQVAgZXZlbnQgaGFzIGlzc3VlIHdoZW4gQS9WIGhhdmUgZGlmZmVyZW50IGR1cmF0aW9uLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTczNjY1NV0KKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKworZGlmZiAtLWdpdCBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYyBiL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworaW5kZXggM2UxN2M1NS4uZmY0MmQ3MiAxMDA2NDQKKy0tLSBhL2dzdC9wbGF5YmFjay9nc3RzdHJlYW1zeW5jaHJvbml6ZXIuYworKysrIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitAQCAtNDg4LDE5ICs0ODgsMjQgQEAgZ3N0X3N0cmVhbV9zeW5jaHJvbml6ZXJfc2lua19ldmVudCAoR3N0UGFkICogcGFkLCBHc3RPYmplY3QgKiBwYXJlbnQsCisgICAgICAgICB9CisgICAgICAgICBnX3NsaXN0X2ZyZWUgKHBhZHMpOworICAgICAgIH0gZWxzZSB7CistICAgICAgICAvKiBpZiBFT1MsIGJ1dCBubyBkYXRhIGhhcyBwYXNzZWQsIHRoZW4gc2VuZCBFT1MgZXZlbnQgKi8KKysgICAgICAgIC8qIGlmIEVPUywgYnV0IG5vIGRhdGEgaGFzIHBhc3NlZCwgdGhlbiBzZW5kIHNvbWV0aGluZyB0byByZXBsYWNlIEVPUworKyAgICAgICAgICogZm9yIHByZXJvbGwgcHVycG9zZXMgKi8KKyAgICAgICAgIGlmICghc2Vlbl9kYXRhKSB7CistICAgICAgICAgIEdzdEV2ZW50ICpnYXBfZXZlbnQ7CisrICAgICAgICAgIEdzdEV2ZW50ICplb3NfZXZlbnQ7CisgCistICAgICAgICAgIGdhcF9ldmVudCA9IGdzdF9ldmVudF9uZXdfZW9zICgpOworLSAgICAgICAgICByZXQgPSBnc3RfcGFkX3B1c2hfZXZlbnQgKHNyY3BhZCwgZ2FwX2V2ZW50KTsKKysgICAgICAgICAgLyogRklYTUU6IGNoYW5nZSB0byBFT1MgZXZlbnQgYXMgR0FQIGV2ZW50IGhhcyBpc3N1ZSB3aGVuIEEvViBoYXZlCisrICAgICAgICAgICAqIGRpZmZlcmVudCBkdXJhdGlvbiAqLworKyAgICAgICAgICBlb3NfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2VvcyAoKTsKKysgICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGVvc19ldmVudCk7CisgICAgICAgICB9IGVsc2UgeworLSAgICAgICAgICBHc3RFdmVudCAqZ2FwX2V2ZW50OworKyAgICAgICAgICBHc3RFdmVudCAqZW9zX2V2ZW50OworIAorICAgICAgICAgICAvKiBGSVhNRTogQWxzbyBzZW5kIGEgR0FQIGV2ZW50IHRvIGxldCBhdWRpbyBzaW5rcyBzdGFydCB0aGVpcgorICAgICAgICAgICAgKiBjbG9jayBpbiBjYXNlIHRoZXkgZGlkIG5vdCBoYXZlIGVub3VnaCBkYXRhIHlldCAqLworLSAgICAgICAgICBnYXBfZXZlbnQgPSBnc3RfZXZlbnRfbmV3X2dhcCAodGltZXN0YW1wLCBHU1RfQ0xPQ0tfVElNRV9OT05FKTsKKy0gICAgICAgICAgcmV0ID0gZ3N0X3BhZF9wdXNoX2V2ZW50IChzcmNwYWQsIGdhcF9ldmVudCk7CisrICAgICAgICAgIC8qIEZJWE1FOiBjaGFuZ2UgdG8gRU9TIGV2ZW50IGFzIEdBUCBldmVudCBoYXMgaXNzdWUgd2hlbiBBL1YgaGF2ZQorKyAgICAgICAgICAgKiBkaWZmZXJlbnQgZHVyYXRpb24gKi8KKysgICAgICAgICAgZW9zX2V2ZW50ID0gZ3N0X2V2ZW50X25ld19lb3MgKCk7CisrICAgICAgICAgIHJldCA9IGdzdF9wYWRfcHVzaF9ldmVudCAoc3JjcGFkLCBlb3NfZXZlbnQpOworICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBnc3Rfb2JqZWN0X3VucmVmIChzcmNwYWQpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzMxYmU2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2RvLW5vdC1jaGFuZ2UtZW9zLWV2ZW50LXRvLWdhcC1ldmVudDMucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorY29tbWl0IDNmNzA1MmFhYzVlMDExOGE5YTllMDlmZmYyZjY1MDkxYmU0NDg5NzIKK0F1dGhvcjogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KK0RhdGU6ICAgVGh1IE9jdCAyMyAxMzozNToxMyAyMDE0ICswODAwCisKK1tzdHJlYW1zeW5jaHJvbml6ZXJdIE9uZSBzdHJlYW0gY2FuIGZpbmlzaCBwbGF5YmFjay4KKyAgCitBcyBjaGFuZ2VkIEdBUCBldmVudCBFT1MgZXZlbnQsIHNvIEVPUyB3aWxsIHNlbmQgbW9yZSB0aW1lcywgd2hpY2ggd2lsbAorY2F1c2Ugc2VuZCBmdW5jdGlvbiByZXR1cm4gZXJyb3IuCitTdHJlYW1zeW5jaHJvbml6ZXIgd2lsbCBkb27igJl0IHNlbmQgc2Vjb25kIHRyYWNrIEVPUyBldmVudCBpZiBzZW5kIHRoZQorZmlyc3QgdHJhY2sgRU9TIHJldHVybiBmYWlsLiBGaXhlZCBieSBpZ25vcmUgdGhlIHJldHVybiBlcnJvci4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzY2NTVdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyBiMDY0OThAZnJlZXNjYWxlLmNvbQorCitkaWZmIC0tZ2l0IGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jIGIvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCitpbmRleCBmZjQyZDcyLi5kMTczMmMzIDEwMDY0NAorLS0tIGEvZ3N0L3BsYXliYWNrL2dzdHN0cmVhbXN5bmNocm9uaXplci5jCisrKysgYi9nc3QvcGxheWJhY2svZ3N0c3RyZWFtc3luY2hyb25pemVyLmMKK0BAIC00ODIsNyArNDgyLDEwIEBAIGdzdF9zdHJlYW1fc3luY2hyb25pemVyX3NpbmtfZXZlbnQgKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LAorICAgICAgICAgd2hpbGUgKGVwYWQpIHsKKyAgICAgICAgICAgcGFkID0gZXBhZC0+ZGF0YTsKKyAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCAocGFkLCAiUHVzaGluZyBFT1MiKTsKKy0gICAgICAgICAgcmV0ID0gcmV0ICYmIGdzdF9wYWRfcHVzaF9ldmVudCAocGFkLCBnc3RfZXZlbnRfbmV3X2VvcyAoKSk7CisrICAgICAgICAgIC8qIEZJWE1FOiByZW1vdmUgZXJyb3IgY2hlY2sgYXMgR0FQIGNoYW5nZWQgdG8gRU9TIHdpbGwgc2VuZCBFT1MKKysgICAgICAgICAgICogbW9yZSB0aW1lcywgd2hpY2ggd2lsbCBjYXVzZSByZXR1cm4gZXJyb3IgYW5kIHRoZW4gZG9uJ3Qgc2VuZAorKyAgICAgICAgICAgKiBFT1MgZXZlbnQgdG8gZm9sbG93aW5nIHRyYWNrcy4gKi8KKysgICAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50IChwYWQsIGdzdF9ldmVudF9uZXdfZW9zICgpKTsKKyAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZiAocGFkKTsKKyAgICAgICAgICAgZXBhZCA9IGdfc2xpc3RfbmV4dCAoZXBhZCk7CisgICAgICAgICB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9lbmNvZGViaW4tTmVlZC1tb3JlLWJ1ZmZlcnMtaW4tb3V0cHV0LXF1ZXVlLWZvci1iZXR0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU2NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZW5jb2RlYmluLU5lZWQtbW9yZS1idWZmZXJzLWluLW91dHB1dC1xdWV1ZS1mb3ItYmV0dC5wYXRjaApAQCAtMCwwICsxLDMyIEBACitGcm9tIDU0MGUwMmM5MmM3NWUwOGI5MDMyNjg2M2RjNzg3ZmE1Y2FkZjlkYTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogRnJpLCAxMyBNYXIgMjAxNSAxODowNDozMSArMDgwMAorU3ViamVjdDogW1BBVENIXSBlbmNvZGViaW46IE5lZWQgbW9yZSBidWZmZXJzIGluIG91dHB1dCBxdWV1ZSBmb3IgYmV0dGVyCisgcGVyZm9ybWFuY2UKKworTmVlZCBtb3JlIGJ1ZmZlcnMgaW4gb3V0cHV0IHF1ZXVlIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxOTFdCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CistLS0KKyBnc3QvZW5jb2RpbmcvZ3N0ZW5jb2RlYmluLmMgfCAgICAzICstLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYyBiL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworaW5kZXggNjcyOGU1OC4uMzJkYWFlNCAxMDA2NDQKKy0tLSBhL2dzdC9lbmNvZGluZy9nc3RlbmNvZGViaW4uYworKysrIGIvZ3N0L2VuY29kaW5nL2dzdGVuY29kZWJpbi5jCitAQCAtMTEzOCw4ICsxMTM4LDcgQEAgX2NyZWF0ZV9zdHJlYW1fZ3JvdXAgKEdzdEVuY29kZUJpbiAqIGViaW4sIEdzdEVuY29kaW5nUHJvZmlsZSAqIHNwcm9mLAorICAgICogV2Ugb25seSB1c2UgYSAxYnVmZmVyIGxvbmcgcXVldWUgaGVyZSwgdGhlIGFjdHVhbCBxdWV1ZWluZyB3aWxsIGJlIGRvbmUKKyAgICAqIGluIHRoZSBpbnB1dCBxdWV1ZSAqLworICAgbGFzdCA9IHNncm91cC0+b3V0cXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UgKCJxdWV1ZSIsIE5VTEwpOworLSAgZ19vYmplY3Rfc2V0IChzZ3JvdXAtPm91dHF1ZXVlLCAibWF4LXNpemUtYnVmZmVycyIsIChndWludDMyKSAxLAorLSAgICAgICJtYXgtc2l6ZS1ieXRlcyIsIChndWludDMyKSAwLCAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAorKyAgZ19vYmplY3Rfc2V0IChzZ3JvdXAtPm91dHF1ZXVlLCAibWF4LXNpemUtdGltZSIsIChndWludDY0KSAwLAorICAgICAgICJzaWxlbnQiLCBUUlVFLCBOVUxMKTsKKyAKKyAgIGdzdF9iaW5fYWRkIChHU1RfQklOIChlYmluKSwgc2dyb3VwLT5vdXRxdWV1ZSk7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9maXgtaWQzZGVtdXgtdXRmMTYtdG8tdXRmOC1pc3N1ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjNmNzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvZml4LWlkM2RlbXV4LXV0ZjE2LXRvLXV0ZjgtaXNzdWUucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorQXV0aG9yOiBMeW9uIFdhbmcgPGIxMjY5NkBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBUaHUgT2N0IDkgMTc6Mzc6NDMgMjAxNCArMDgwMAorCitbaWQzdjJmcmFtZXNdIEJ1ZyBmaXggZm9yIGlkM2RlbXV4IGlzc3VlCisKK0ZpeCB0aGUgaXNzdWUgdGhhdCBpZDMgdGFncyB1dGYxNiBjaGFyYXRlcnMgY2Fubm90IGJlIGV4dHJlYWN0ZWQgaW4gaWQzZGVtdXgKK3doZW4gSSB0cmllZCB0byBnZXQgdGhlIGlkM3YyIHRhZyBzdWNoIGFzIFRJVDIsIFRBTEIgZXRjLiBpdCB3aWxsIHJldHVybiBleHRyYWMKK2ZhaWxlZC4KKworQ2hlY2tlZCBpbiBpZDN2MmZyYW1lLmMsICBXaGVuIHBhcnNlIHRoZSBVVEYtMTYgc3RyZWFtcywgaXQgdXNlZCBnX2NvbnZlcnQoKSB0bworY29udmVydCB0aGUgYnVmZmVyIGZyb20gVVRGLTE2IHRvIFVURi04LCBob3dldmVyIGl0IHdpbGwgcmV0dXJuIGVyciB0aGF0IHRoaXMKK2NvbnZlcnNpb24gaXMgbm90IHN1cHBvcnRlZCB3aGljaCBjYXVzZSB0aGUgZXh0cmFjdGlvbiBmYWlsZWQgd2l0aCB0aGVzZSBVVEYtMTYKK2NoYXJhY3RlcnMuCisKK0luIHRoZSBwYXRjaCwgdXNlIGdfdXRmMTZfdG9fdXRmOCgpIGluc3RlYWQgb2YgZ19jb252ZXJ0LCB3aGljaCBjYW4gY29udmVydCB0aGUKK2NoYXJhY3RlciBmb3JtYXQgc3VjY2Vzc2Z1bGx5LgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMTQ0CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorCitTaWduZWQtb2ZmLWJ5OiBMeW9uIFdhbmcgPGIxMjY5NkBmcmVlc2NhbGUuY29tPgorCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jIGIvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggMzc4NWMyYS4uN2I5ZDhhYworLS0tIGEvZ3N0LWxpYnMvZ3N0L3RhZy9pZDN2MmZyYW1lcy5jCisrKysgYi9nc3QtbGlicy9nc3QvdGFnL2lkM3YyZnJhbWVzLmMKK0BAIC0xMDU3LDE0ICsxMDU3LDE3IEBAIHBhcnNlX2luc2VydF9zdHJpbmdfZmllbGQgKGd1aW50OCBlbmNvZGluZywgZ2NoYXIgKiBkYXRhLCBnaW50IGRhdGFfc2l6ZSwKKyAgICAgICAgIGRhdGFfc2l6ZSAtPSAyOworICAgICAgIH0KKyAKKy0gICAgICBmaWVsZCA9IGdfY29udmVydCAoZGF0YSwgZGF0YV9zaXplLCAiVVRGLTgiLCBpbl9lbmNvZGUsIE5VTEwsIE5VTEwsIE5VTEwpOworLQorLSAgICAgIGlmIChmaWVsZCA9PSBOVUxMIHx8IGdfdXRmOF92YWxpZGF0ZSAoZmllbGQsIC0xLCBOVUxMKSA9PSBGQUxTRSkgeworLSAgICAgICAgLyogQXMgYSBmYWxsYmFjaywgdHJ5IGludGVycHJldGluZyBVVEYtMTYgaW4gdGhlIG90aGVyIGVuZGlhbm5lc3MgKi8KKy0gICAgICAgIGlmIChpbl9lbmNvZGUgPT0gdXRmMTZiZWVuYykKKy0gICAgICAgICAgZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgdXRmMTZsZWVuYywKKy0gICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworKyAgICAgIGlmIChpbl9lbmNvZGUgPT0gdXRmMTZiZWVuYykgeworKyAgICAgICAgICAgZ3VuaWNoYXIyICpkYXRhX3V0ZjE2OworKyAgICAgICAgICAgZ3VpbnQgaTsKKysgICAgICAgICAgIGRhdGFfdXRmMTYgPSAgKGd1bmljaGFyMiAqKSBkYXRhOworKyAgICAgICAgICBmb3IgKGk9MDsgaTwoZGF0YV9zaXplPj4xKTsgaSsrKSB7CisrICAgICAgICAgICAgZGF0YV91dGYxNltpXSA9IEdVSU5UMTZfVE9fTEUgKGRhdGFfdXRmMTZbaV0pOworKyAgICAgICAgICB9CisgICAgICAgfQorKyAgICAgIC8vZmllbGQgPSBnX2NvbnZlcnQgKGRhdGEsIGRhdGFfc2l6ZSwgIlVURi04IiwgaW5fZW5jb2RlLCBOVUxMLCBOVUxMLCBOVUxMKTsKKysgICAgICAgZmllbGQgPSBnX3V0ZjE2X3RvX3V0ZjgoKGd1bmljaGFyMiAqKWRhdGEsIChnbG9uZykoZGF0YV9zaXplPj4xKSwgTlVMTCwgTlVMTCwgTlVMTCk7CisrCisgICAgIH0KKyAKKyAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2dldC1jYXBzLWZyb20tc3JjLXBhZC13aGVuLXF1ZXJ5LWNhcHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NGFiYmUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoCkBAIC0wLDAgKzEsNDQgQEAKK0Zyb20gYWYwZGFjMjZmNjJhYWNlYjRiZjI2NjcyMDkxMTk1Mzc5M2UwZmM1ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KK0RhdGU6IFdlZCwgMTQgTWF5IDIwMTQgMTA6MTY6MjAgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gRU5HUjAwMzEyNTE1OiBnZXQgY2FwcyBmcm9tIHNyYyBwYWQgd2hlbiBxdWVyeSBjYXBzCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MjgzMTIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IHpob3VtaW5nIDxiNDI1ODZAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYyB8ICAgMTMgKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvdGFnL2dzdHRhZ2RlbXV4LmMKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYyBiL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworb2xkIG1vZGUgMTAwNjQ0CituZXcgbW9kZSAxMDA3NTUKK2luZGV4IDliNmM0NzguLmFlMjI5NGEKKy0tLSBhL2dzdC1saWJzL2dzdC90YWcvZ3N0dGFnZGVtdXguYworKysrIGIvZ3N0LWxpYnMvZ3N0L3RhZy9nc3R0YWdkZW11eC5jCitAQCAtMTcwOCw2ICsxNzA4LDE5IEBAIGdzdF90YWdfZGVtdXhfcGFkX3F1ZXJ5IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0UXVlcnkgKiBxdWVyeSkKKyAgICAgICB9CisgICAgICAgYnJlYWs7CisgICAgIH0KKysgICAgY2FzZSBHU1RfUVVFUllfQ0FQUzoKKysgICAgeworKworKyAgICAgIC8qIFdlIGNhbiBoaWphY2sgY2FwcyBxdWVyeSBpZiB3ZSB0eXBlZmluZCBhbHJlYWR5ICovCisrICAgICAgaWYgKGRlbXV4LT5wcml2LT5zcmNfY2FwcykgeworKyAgICAgICAgZ3N0X3F1ZXJ5X3NldF9jYXBzX3Jlc3VsdCAocXVlcnksIGRlbXV4LT5wcml2LT5zcmNfY2Fwcyk7CisrICAgICAgICByZXMgPSBUUlVFOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICByZXMgPSBnc3RfcGFkX3F1ZXJ5X2RlZmF1bHQgKHBhZCwgcGFyZW50LCBxdWVyeSk7CisrICAgICAgfQorKyAgICAgIGJyZWFrOworKyAgICB9CisrCisgICAgIGRlZmF1bHQ6CisgICAgICAgcmVzID0gZ3N0X3BhZF9xdWVyeV9kZWZhdWx0IChwYWQsIHBhcmVudCwgcXVlcnkpOworICAgICAgIGJyZWFrOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvaGFuZGxlLWF1ZGlvLXZpZGVvLWRlY29kZXItZXJyb3IucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODMzY2U3MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL2hhbmRsZS1hdWRpby12aWRlby1kZWNvZGVyLWVycm9yLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Zyb20gYmNiMmI4YjZmNDllN2M2NjEyNGE0ZjVlMDdkZWE4MjlkNWViZmU1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx5b24gV2FuZyA8bHlvbi53YW5nQGZyZWVzY2FsZS5jb20+CitEYXRlOiBNb24sIDE1IERlYyAyMDE0IDE2OjUyOjA3ICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIGhhbmRsZSBhdWRpby92aWRlbyBkZWNvZGVyIGVycm9yCisKK1doZW4gdGhlcmUgaXMgaW5wdXQgZGF0YSBhbmQgbm8gb3V0cHV0IGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgc3RyZWFtLCBpdCB3aWxsCitzZW5kIEdTVF9FTEVNRU5UX0VSUk9SLCBTbyB0aGUgY2xpcHMgcGxheWluZyB3aWxsIHF1aXQuCitIb3dldmVyLCBpZiBvbmx5IG9uZSBvZiB0aGUgdHJhY2tzIGlzIGNvcnJ1cHQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcXVpdCBvdGhlcgordHJhY2tzIHBsYXlpbmcuCisKK1RoZSBwYXRjaCBjb21tZW50cyB0aGUgR1NUX0VMRU1FTlRfRVJST1IoKSBhbmQganVzdCBhZGQgR1NUX0VSUk9SX09CSkVDVCgpCitpbmZvcm1hdGlvbiBpbnN0ZWFkLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTc0MTU0Ml0KKworU2lnbmVkLW9mZi1ieTogTHlvbiBXYW5nIDxseW9uLndhbmdAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyB8ICAgIDUgKysrLS0KKyBnc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgfCAgICA1ICsrKy0tCisgMiBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKKyBtb2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworCitkaWZmIC0tZ2l0IGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitvbGQgbW9kZSAxMDA2NDQKK25ldyBtb2RlIDEwMDc1NQoraW5kZXggYzJlN2EyOC4uODkxZGYwYQorLS0tIGEvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCisrKysgYi9nc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMKK0BAIC0yMTIzLDkgKzIxMjMsMTAgQEAgZ3N0X2F1ZGlvX2RlY29kZXJfc2lua19ldmVudGZ1bmMgKEdzdEF1ZGlvRGVjb2RlciAqIGRlYywgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgICBHU1RfQVVESU9fREVDT0RFUl9TVFJFQU1fVU5MT0NLIChkZWMpOworIAorICAgICAgIGlmIChkZWMtPnByaXYtPmN0eC5oYWRfaW5wdXRfZGF0YSAmJiAhZGVjLT5wcml2LT5jdHguaGFkX291dHB1dF9kYXRhKSB7CistICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUiAoZGVjLCBTVFJFQU0sIERFQ09ERSwKKysgICAgICAgIC8qIEdTVF9FTEVNRU5UX0VSUk9SIChkZWMsIFNUUkVBTSwgREVDT0RFLAorICAgICAgICAgICAgICgiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKSwKKy0gICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsKKysgICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsgKi8KKysgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QoZGVjLCAiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKTsKKyAgICAgICB9CisgCisgICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitpbmRleCBhYzU4MWUxLi40Mjc4YmNkCistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9kZWNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworQEAgLTEwNjgsOSArMTA2OCwxMCBAQCBnc3RfdmlkZW9fZGVjb2Rlcl9zaW5rX2V2ZW50X2RlZmF1bHQgKEdzdFZpZGVvRGVjb2RlciAqIGRlY29kZXIsCisgCisgICAgICAgLyogRXJyb3Igb3V0IGV2ZW4gaWYgRU9TIHdhcyBvayB3aGVuIHdlIGhhZCBpbnB1dCwgYnV0IG5vIG91dHB1dCAqLworICAgICAgIGlmIChyZXQgJiYgcHJpdi0+aGFkX2lucHV0X2RhdGEgJiYgIXByaXYtPmhhZF9vdXRwdXRfZGF0YSkgeworLSAgICAgICAgR1NUX0VMRU1FTlRfRVJST1IgKGRlY29kZXIsIFNUUkVBTSwgREVDT0RFLAorKyAgICAgICAgLyogR1NUX0VMRU1FTlRfRVJST1IgKGRlY29kZXIsIFNUUkVBTSwgREVDT0RFLAorICAgICAgICAgICAgICgiTm8gdmFsaWQgZnJhbWVzIGRlY29kZWQgYmVmb3JlIGVuZCBvZiBzdHJlYW0iKSwKKy0gICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsKKysgICAgICAgICAgICAoIm5vIHZhbGlkIGZyYW1lcyBmb3VuZCIpKTsgKi8KKysgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QoZGVjb2RlciwgIk5vIHZhbGlkIGZyYW1lcyBkZWNvZGVkIGJlZm9yZSBlbmQgb2Ygc3RyZWFtIik7CisgICAgICAgfQorIAorICAgICAgIC8qIEZvcndhcmQgRU9TIGltbWVkaWF0ZWx5LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2Ugbm8KKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmE1MmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdGFnbGlzdC1ub3Qtc2VuZC10by1kb3duLXN0cmVhbS1pZi1hbGwtdGhlLWZyYW1lLWNvci5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDY4ZmExYjE0MjVhZDJjNWY3YzUwMTNkMDk0MzE1M2E4YTZkMDkzNGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKaWFuIExpIDxsai5xZnkuc2hAZ21haWwuY29tPgorRGF0ZTogV2VkLCAyNCBTZXAgMjAxNCAxNzoyMTowMiArMDgwMAorU3ViamVjdDogW1BBVENIXSB0YWdsaXN0IG5vdCBzZW5kIHRvIGRvd24gc3RyZWFtIGlmIGFsbCB0aGUgZnJhbWUgY29ycnVwdGVkCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzcyNDYKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEppYW4gTGkgPGxqLnFmeS5zaEBnbWFpbC5jb20+CistLS0KKyBnc3QtbGlicy9nc3QvYXVkaW8vZ3N0YXVkaW9kZWNvZGVyLmMgfCAgICA5ICsrKysrKysrKworIGdzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYyB8ICAgIDggKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworaW5kZXggMzUwNDY3OC4uM2Q2OWVmZSAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC9hdWRpby9nc3RhdWRpb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L2F1ZGlvL2dzdGF1ZGlvZGVjb2Rlci5jCitAQCAtMjA4Myw2ICsyMDgzLDE1IEBAIGdzdF9hdWRpb19kZWNvZGVyX3NpbmtfZXZlbnRmdW5jIChHc3RBdWRpb0RlY29kZXIgKiBkZWMsIEdzdEV2ZW50ICogZXZlbnQpCisgICAgICAgZ3N0X2F1ZGlvX2RlY29kZXJfZHJhaW4gKGRlYyk7CisgICAgICAgR1NUX0FVRElPX0RFQ09ERVJfU1RSRUFNX1VOTE9DSyAoZGVjKTsKKyAKKysgICAgICAvKiBzZW5kIHRhZ2xpc3QgaWYgbm8gdmFsaWQgZnJhbWUgaXMgZGVjb2RlZCB1dGlsIEVPUyAqLworKyAgICAgIGlmIChkZWMtPnByaXYtPnRhZ2xpc3QgJiYgZGVjLT5wcml2LT50YWdsaXN0X2NoYW5nZWQpIHsKKysgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKGRlYywgImNvZGVjIHRhZyAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVjLT5wcml2LT50YWdsaXN0KTsKKysgICAgICAgIGlmICghZ3N0X3RhZ19saXN0X2lzX2VtcHR5IChkZWMtPnByaXYtPnRhZ2xpc3QpKQorKyAgICAgICAgICBnc3RfYXVkaW9fZGVjb2Rlcl9wdXNoX2V2ZW50IChkZWMsCisrICAgICAgICAgICAgICBnc3RfZXZlbnRfbmV3X3RhZyAoZ3N0X3RhZ19saXN0X3JlZiAoZGVjLT5wcml2LT50YWdsaXN0KSkpOworKyAgICAgICAgZGVjLT5wcml2LT50YWdsaXN0X2NoYW5nZWQgPSBGQUxTRTsKKysgICAgICB9CisrCisgICAgICAgLyogRm9yd2FyZCBFT1MgYmVjYXVzZSBubyBidWZmZXIgb3Igc2VyaWFsaXplZCBldmVudCB3aWxsIGNvbWUgYWZ0ZXIKKyAgICAgICAgKiBFT1MgYW5kIG5vdGhpbmcgY291bGQgdHJpZ2dlciBhbm90aGVyIF9maW5pc2hfZnJhbWUoKSBjYWxsLiAqLworICAgICAgIHJldCA9IGdzdF9hdWRpb19kZWNvZGVyX3B1c2hfZXZlbnQgKGRlYywgZXZlbnQpOworZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworaW5kZXggZGQ4YWJlMy4uZDliZmU0ZCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2RlY29kZXIuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZGVjb2Rlci5jCitAQCAtMTAyNCw2ICsxMDI0LDE0IEBAIGdzdF92aWRlb19kZWNvZGVyX3NpbmtfZXZlbnRfZGVmYXVsdCAoR3N0VmlkZW9EZWNvZGVyICogZGVjb2RlciwKKyAgICAgICAgKiBwYXJlbnQgY2xhc3MnIDo6c2lua19ldmVudCgpIHVudGlsIGEgbGF0ZXIgdGltZS4KKyAgICAgICAgKi8KKyAgICAgICBmb3J3YXJkX2ltbWVkaWF0ZSA9IFRSVUU7CisrCisrICAgICAgLyogc2VuZCB0YWdsaXN0IGlmIG5vIHZhbGlkIGZyYW1lIGlzIGRlY29kZWQgdXRpbCBFT1MgKi8KKysgICAgICBpZiAoZGVjb2Rlci0+cHJpdi0+dGFncyAmJiBkZWNvZGVyLT5wcml2LT50YWdzX2NoYW5nZWQpIHsKKysgICAgICAgIGdzdF92aWRlb19kZWNvZGVyX3B1c2hfZXZlbnQgKGRlY29kZXIsCisrICAgICAgICAgICAgZ3N0X2V2ZW50X25ld190YWcgKGdzdF90YWdfbGlzdF9yZWYgKGRlY29kZXItPnByaXYtPnRhZ3MpKSk7CisrICAgICAgICBkZWNvZGVyLT5wcml2LT50YWdzX2NoYW5nZWQgPSBGQUxTRTsKKysgICAgICB9CisrCisgICAgICAgYnJlYWs7CisgICAgIH0KKyAgICAgY2FzZSBHU1RfRVZFTlRfR0FQOgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9idWZmZXJfdXBkYXRhX2FsaWdubWVudF91cGRhdGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGNmZGE5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoCkBAIC0wLDAgKzEsNTMgQEAKK2NvbW1pdCA4OGQyNTNlYTIzYjA2Mjg5ZGY0MDQwMTE2MGI2MDYzMjNmMTZjOTEwCitBdXRob3I6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiAgIE1vbiBEZWMgMTUgMDk6MzQ6MzUgMjAxNCArMDgwMAorCit2aWRlb3Bvb2w6IHVwZGF0ZSB2aWRlbyBhbGlnbm1lbnQgYWZ0ZXIgdmlkZW8gYWxpZ25tZW50CisKK1ZpZGVvIGJ1ZmZlciBwb29sIHdpbGwgdXBkYXRlIHZpZGVvIGFsaWdubWVudCB0byByZXNwZWN0IHN0cmlkZSBhbGlnbm1lbnQKK3JlcXVpcmVtZW50LiBCdXQgaGF2ZW4ndCB1cGRhdGUgaXQgdG8gdmlkZW8gYWxpZ25tZW50IGluIGNvbmZpZ3VyZS4KK1doaWNoIHdpbGwgY2F1c2UgdXNlciBnZXQgd3JvbmcgdmlkZW8gYWxpZ25tZW50LgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxNTAxCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorZGlmZiAtLWdpdCBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworaW5kZXggNDQ3NWY0NS4uYWNlZjU5NCAxMDA2NDQKKy0tLSBhL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb3Bvb2wuYworKysrIGIvZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5jCitAQCAtMTY3LDYgKzE2Nyw3IEBAIHZpZGVvX2J1ZmZlcl9wb29sX3NldF9jb25maWcgKEdzdEJ1ZmZlclBvb2wgKiBwb29sLCBHc3RTdHJ1Y3R1cmUgKiBjb25maWcpCisgICAgIC8qIGdldCBhbiBhcHBseSB0aGUgYWxpZ25tZW50IHRvIHRoZSBpbmZvICovCisgICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfZ2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworICAgICBnc3RfdmlkZW9faW5mb19hbGlnbiAoJmluZm8sICZwcml2LT52aWRlb19hbGlnbik7CisrICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+dmlkZW9fYWxpZ24pOworICAgfQorICAgcHJpdi0+aW5mbyA9IGluZm87CisKK2RpZmYgLS1naXQgYS9zeXMveGltYWdlL3hpbWFnZXBvb2wuYyBiL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCitpbmRleCA2Y2MyY2ZhLi42YTFjYmM5IDEwMDY0NAorLS0tIGEvc3lzL3hpbWFnZS94aW1hZ2Vwb29sLmMKKysrKyBiL3N5cy94aW1hZ2UveGltYWdlcG9vbC5jCitAQCAtNTk3LDYgKzU5Nyw4IEBAIHhpbWFnZV9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBkbyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgKi8KKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+YWxpZ24pOworCisrICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+YWxpZ24pOworKworICAgICAvKiB3ZSBuZWVkIHRoZSB2aWRlbyBtZXRhZGF0YSB0b28gbm93ICovCisgICAgIHByaXYtPmFkZF9tZXRhdmlkZW8gPSBUUlVFOworICAgfSBlbHNlIHsKK2RpZmYgLS1naXQgYS9zeXMveHZpbWFnZS94dmltYWdlcG9vbC5jIGIvc3lzL3h2aW1hZ2UveHZpbWFnZXBvb2wuYworaW5kZXggMjQ0YTUxYS4uMzRiMWFiMiAxMDA2NDQKKy0tLSBhL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKKysrKyBiL3N5cy94dmltYWdlL3h2aW1hZ2Vwb29sLmMKK0BAIC0xMjQsNiArMTI0LDggQEAgeHZpbWFnZV9idWZmZXJfcG9vbF9zZXRfY29uZmlnIChHc3RCdWZmZXJQb29sICogcG9vbCwgR3N0U3RydWN0dXJlICogY29uZmlnKQorICAgICAvKiBkbyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgKi8KKyAgICAgZ3N0X3ZpZGVvX2luZm9fYWxpZ24gKCZpbmZvLCAmcHJpdi0+YWxpZ24pOworCisrICAgIGdzdF9idWZmZXJfcG9vbF9jb25maWdfc2V0X3ZpZGVvX2FsaWdubWVudCAoY29uZmlnLCAmcHJpdi0+YWxpZ24pOworKworICAgICAvKiB3ZSBuZWVkIHRoZSB2aWRlbyBtZXRhZGF0YSB0b28gbm93ICovCisgICAgIHByaXYtPmFkZF9tZXRhdmlkZW8gPSBUUlVFOworICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDc2OTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UvdmlkZW9lbmNvZGVyLUtlZXAtc3RpY2t5LWV2ZW50cy1hcm91bmQtd2hlbi1kb2luZy1hLXNvZnQtLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gYzNmN2QzNmI5OTJhM2NiY2VlMzM4NmRlYTg1NzIwZjNjYjA0ZTFmZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiBGcmksIDI3IE1hciAyMDE1IDEzOjM5OjQzICswODAwCitTdWJqZWN0OiBbUEFUQ0hdIHZpZGVvZW5jb2RlcjogS2VlcCBzdGlja3kgZXZlbnRzIGFyb3VuZCB3aGVuIGRvaW5nIGEgc29mdAorIHJlc2V0CisKK1RoZSBjdXJyZW50IGNvZGUgd2lsbCBmaXJzdCBkaXNjYXJkIGFsbCBmcmFtZXMsIGFuZCB0aGVuIHRyaWVzIHRvIGNvcHkKK2FsbCBzdGlja3kgZXZlbnRzIGZyb20gdGhlIChub3cgZGlzY2FyZGVkKSBmcmFtZXMuIExldCdzIGNoYW5nZSB0aGUgb3JkZXIuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDY4NjUKKworVXBzdHJlYW0tU3RhdHVzOiBBY2NlcHRlZCAKKworLS0tCisgZ3N0LWxpYnMvZ3N0L3ZpZGVvL2dzdHZpZGVvZW5jb2Rlci5jIHwgICAgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMgYi9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKK2luZGV4IDYxNGJhMmQuLjRjNWIxMTEgMTAwNjQ0CistLS0gYS9nc3QtbGlicy9nc3QvdmlkZW8vZ3N0dmlkZW9lbmNvZGVyLmMKKysrKyBiL2dzdC1saWJzL2dzdC92aWRlby9nc3R2aWRlb2VuY29kZXIuYworQEAgLTM0MCwxMCArMzQwLDYgQEAgZ3N0X3ZpZGVvX2VuY29kZXJfcmVzZXQgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIGdib29sZWFuIGhhcmQpCisgCisgICBwcml2LT5kcmFpbmVkID0gVFJVRTsKKyAKKy0gIGdfbGlzdF9mb3JlYWNoIChwcml2LT5mcmFtZXMsIChHRnVuYykgZ3N0X3ZpZGVvX2NvZGVjX2ZyYW1lX3VucmVmLCBOVUxMKTsKKy0gIGdfbGlzdF9mcmVlIChwcml2LT5mcmFtZXMpOworLSAgcHJpdi0+ZnJhbWVzID0gTlVMTDsKKy0KKyAgIHByaXYtPmJ5dGVzID0gMDsKKyAgIHByaXYtPnRpbWUgPSAwOworIAorQEAgLTM5Miw2ICszODgsMTAgQEAgZ3N0X3ZpZGVvX2VuY29kZXJfcmVzZXQgKEdzdFZpZGVvRW5jb2RlciAqIGVuY29kZXIsIGdib29sZWFuIGhhcmQpCisgICAgICAgICBlbmNvZGVyLT5wcml2LT5jdXJyZW50X2ZyYW1lX2V2ZW50cyk7CisgICB9CisgCisrICBnX2xpc3RfZm9yZWFjaCAocHJpdi0+ZnJhbWVzLCAoR0Z1bmMpIGdzdF92aWRlb19jb2RlY19mcmFtZV91bnJlZiwgTlVMTCk7CisrICBnX2xpc3RfZnJlZSAocHJpdi0+ZnJhbWVzKTsKKysgIHByaXYtPmZyYW1lcyA9IE5VTEw7CisrCisgICBHU1RfVklERU9fRU5DT0RFUl9TVFJFQU1fVU5MT0NLIChlbmNvZGVyKTsKKyAKKyAgIHJldHVybiByZXQ7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDljMmNiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2VfMS40LjUuYmIKQEAgLTAsMCArMSwzMCBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNTRjZTkzNDU3MjcxNzVmZjY2ZDE3YjY3ZmY1MWY1OCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT02NzYyZWQ0NDJiMzgyMjM4N2E1MWM5MmQ5MjhlYWQwZCBcCisgICAgICAgICAgICAgICAgICAgIgorCitTUkNfVVJJICs9ICJmaWxlOi8vZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50LWlmLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9nZXQtY2Fwcy1mcm9tLXNyYy1wYWQtd2hlbi1xdWVyeS1jYXBzLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly90YWdsaXN0LW5vdC1zZW5kLXRvLWRvd24tc3RyZWFtLWlmLWFsbC10aGUtZnJhbWUtY29yLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9maXgtaWQzZGVtdXgtdXRmMTYtdG8tdXRmOC1pc3N1ZS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vaGFuZGxlLWF1ZGlvLXZpZGVvLWRlY29kZXItZXJyb3IucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3ZpZGVvYnVmZmVyX3VwZGF0YV9hbGlnbm1lbnRfdXBkYXRlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLXZpZGVvLWZyYW1lLUFkZC1HU1RfVklERU9fRlJBTUVfTUFQX0ZMQUdfTk9fUkVGLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAxLXZpZGVvLWZyYW1lLURvbi10LXJlZi1idWZmZXJzLXR3aWNlLXdoZW4tbWFwcGluZy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMy12aWRlb2ZpbHRlci1Vc2UtbmV3LUdTVF9WSURFT19GUkFNRV9NQVBfRkxBR19OT19SRUYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL3ZpZGVvZW5jb2Rlci1LZWVwLXN0aWNreS1ldmVudHMtYXJvdW5kLXdoZW4tZG9pbmctYS1zb2Z0LS5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50Mi5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZG8tbm90LWNoYW5nZS1lb3MtZXZlbnQtdG8tZ2FwLWV2ZW50My5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vMDAwMS1iYXNldGV4dG92ZXJsYXktbWFrZS1tZW1vcnktY29weS13aGVuLXZpZGVvLWJ1ZmZlci1zLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDAyLWdzdHBsYXlzaW5rLWRvbi10LXNldC1hc3luYy1vZi1jdXN0b20tdGV4dC1zaW5rLXRvLWYucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovLzAwMDMtc3NhcGFyc2UtZW5oYW5jZS1TU0EtdGV4dC1saW5lcy1wYXJzaW5nLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDA0LXN1YnBhcnNlLXNldC1uZWVkX3NlZ21lbnQtYWZ0ZXItc2luay1wYWQtcmVjZWl2ZWQtR1MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2VuY29kZWJpbi1OZWVkLW1vcmUtYnVmZmVycy1pbi1vdXRwdXQtcXVldWUtZm9yLWJldHQucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMzU3MTY1YWY2MjVjMGNhMzUzYWI0N2M1ZDg0MzkyMGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzdiZDgxOTllN2EzMTJkM2Q3MWRlOWI3ZGRmNzYxYTNiNzg1NjBhMmMyYTgwODI5ZDA4MTVjYTM5Y2JkNTUxZCIKKworUyA9ICIke1dPUktESVJ9L2dzdC1wbHVnaW5zLWJhc2UtJHtQVn0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZV9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlM2E0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlX2dpdC5iYgpAQCAtMCwwICsxLDE5IEBACitERUZBVUxUX1BSRUZFUkVOQ0UgPSAiLTEiCisKK2luY2x1ZGUgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFzZS5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YzU0Y2U5MzQ1NzI3MTc1ZmY2NmQxN2I2N2ZmNTFmNTggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vY29tbW9uL2NvdmVyYWdlL2NvdmVyYWdlLXJlcG9ydC5wbDtiZWdpbmxpbmU9MjtlbmRsaW5lPTE3O21kNT1hNGUxODMwZmNlMDc4MDI4YzhmMDk3NDE2MTI3MjYwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworU1JDUkVWID0gIjhkNGNiNjRhNGI5ZDg0YjEwMDc2YmYzNTBmODBhMGQ2ZWE2OGVjMmQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWNkICR7U30KKwkuL2F1dG9nZW4uc2ggLS1ub2NvbmZpZ3VyZQorCWNkICR7Qn0KK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMzE2ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC5pbmMKQEAgLTAsMCArMSw1NyBAQAorcmVxdWlyZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCisKKyMgbGliaWQzdGFnCitERVBFTkRTICs9ICJnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIHpsaWIgYnppcDIgbGliY2FwIgorCitpbmhlcml0IGdldHRleHQKKworCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpbycsICcnLCBkKX0gXAorICAgIG9yYyBjYWlybyBmbGFjIGdkay1waXhidWYgZ3VkZXYganBlZyBsaWJwbmcgc291cCBzcGVleCB0YWdsaWIgXAorICAgICIKKworWDExREVQRU5EUyA9ICJ2aXJ0dWFsL2xpYngxMSBsaWJzbSBsaWJ4cmVuZGVyIGxpYnhmaXhlcyBsaWJ4ZGFtYWdlIgorWDExRU5BQkxFT1BUUyA9ICItLWVuYWJsZS14IC0tZW5hYmxlLXhzaG0iCitYMTFESVNBQkxFT1BUUyA9ICItLWRpc2FibGUteCAtLWRpc2FibGUteHNobSIKK1BBQ0tBR0VDT05GSUdbeDExXSAgICAgICAgPSAiJHtYMTFFTkFCTEVPUFRTfSwke1gxMURJU0FCTEVPUFRTfSwke1gxMURFUEVORFN9IgorUEFDS0FHRUNPTkZJR1twdWxzZWF1ZGlvXSA9ICItLWVuYWJsZS1wdWxzZSwtLWRpc2FibGUtcHVsc2UscHVsc2VhdWRpbyIKK1BBQ0tBR0VDT05GSUdbY2Fpcm9dICAgICAgPSAiLS1lbmFibGUtY2Fpcm8sLS1kaXNhYmxlLWNhaXJvLGNhaXJvIgorUEFDS0FHRUNPTkZJR1tmbGFjXSAgICAgICA9ICItLWVuYWJsZS1mbGFjLC0tZGlzYWJsZS1mbGFjLGZsYWMiCitQQUNLQUdFQ09ORklHW2dkay1waXhidWZdID0gIi0tZW5hYmxlLWdka19waXhidWYsLS1kaXNhYmxlLWdka19waXhidWYsZ2RrLXBpeGJ1ZiIKK1BBQ0tBR0VDT05GSUdbZ3VkZXZdICAgICAgPSAiLS13aXRoLWd1ZGV2LC0td2l0aG91dC1ndWRldix1ZGV2IgorUEFDS0FHRUNPTkZJR1tqYWNrXSAgICAgICA9ICItLWVuYWJsZS1qYWNrLC0tZGlzYWJsZS1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW2pwZWddICAgICAgID0gIi0tZW5hYmxlLWpwZWcsLS1kaXNhYmxlLWpwZWcsanBlZyIKK1BBQ0tBR0VDT05GSUdbbGlicG5nXSAgICAgPSAiLS1lbmFibGUtbGlicG5nLC0tZGlzYWJsZS1saWJwbmcsbGlicG5nIgorUEFDS0FHRUNPTkZJR1tzb3VwXSAgICAgICA9ICItLWVuYWJsZS1zb3VwLC0tZGlzYWJsZS1zb3VwLGxpYnNvdXAtMi40IgorUEFDS0FHRUNPTkZJR1tzcGVleF0gICAgICA9ICItLWVuYWJsZS1zcGVleCwtLWRpc2FibGUtc3BlZXgsc3BlZXgiCitQQUNLQUdFQ09ORklHW3RhZ2xpYl0gICAgID0gIi0tZW5hYmxlLXRhZ2xpYiwtLWRpc2FibGUtdGFnbGliLHRhZ2xpYiIKK1BBQ0tBR0VDT05GSUdbdnB4XSAgICAgICAgPSAiLS1lbmFibGUtdnB4LC0tZGlzYWJsZS12cHgsbGlidnB4IgorUEFDS0FHRUNPTkZJR1t3YXZwYWNrXSAgICA9ICItLWVuYWJsZS13YXZwYWNrLC0tZGlzYWJsZS13YXZwYWNrLHdhdnBhY2siCisKKyMgdGhlIDEzOTQgcGx1Z2lucyByZXF1aXJlIGJvdGggbGlicmF3MTM5NCBhbmQgbGliaWVjNjE4ODMKKyMgdGhlIGZvcm1lciBpcyBpbmNsdWRlZCBpbiBtZXRhLW9lLCB0aGUgbGF0dGVyIGlzbid0CisjIC0+IGRpc2FibGVkCisKK0VYVFJBX09FQ09ORiArPSAiIFwKKyAgICAtLWVuYWJsZS1vc3MgXAorICAgIC0tZW5hYmxlLWdzdF92NGwyIFwKKyAgICAtLXdpdGhvdXQtbGlidjRsMiBcCisgICAgLS1kaXNhYmxlLWRpcmVjdHNvdW5kIFwKKyAgICAtLWRpc2FibGUtd2F2ZWZvcm0gXAorICAgIC0tZGlzYWJsZS1vc3M0IFwKKyAgICAtLWRpc2FibGUtc3VuYXVkaW8gXAorICAgIC0tZGlzYWJsZS1vc3hfYXVkaW8gXAorICAgIC0tZGlzYWJsZS1vc3hfdmlkZW8gXAorICAgIC0tZGlzYWJsZS1hYWxpYiBcCisgICAgLS1kaXNhYmxlLWxpYmNhY2EgXAorICAgIC0tZGlzYWJsZS1saWJkdiBcCisgICAgLS1kaXNhYmxlLXNob3V0MiBcCisgICAgLS1kaXNhYmxlLWV4YW1wbGVzIFwKKyAgICAtLWRpc2FibGUtZHYxMzk0IFwKKyIKKworRklMRVNfJHtQTn0tZXF1YWxpemVyICs9ICIke2RhdGFkaXJ9L2dzdHJlYW1lci0xLjAvcHJlc2V0cy8qLnBycyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMTk3M2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QvMDAwMS1nc3RydHBtcDRncGF5LXNldC1kYWZhdWx0LXZhbHVlLWZvci1NUEVHNC13aXRob3V0LWNvLnBhdGNoCkBAIC0wLDAgKzEsNjIgQEAKK0Zyb20gYzc4MmEzMDQ4MjkwOGE0YjRkZDljZDRhYmZmOWY5YmM0MDE2Njk4ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CitEYXRlOiBUdWUsIDUgQXVnIDIwMTQgMTQ6NDA6NDYgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gZ3N0cnRwbXA0Z3BheTogc2V0IGRhZmF1bHQgdmFsdWUgZm9yIE1QRUc0IHdpdGhvdXQgY29kZWMKKyBkYXRhIGluIGNhcHMuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03MzQyNjMKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogU29uZyBCaW5nIDxiMDY0OThAZnJlZXNjYWxlLmNvbT4KKy0tLQorIGdzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jIHwgICAxOSArKysrKysrKysrKysrKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2dzdC9ydHAvZ3N0cnRwbXA0Z3BheS5jIGIvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKK2luZGV4IDc5MTNkOWEuLjE3NDlkMzkgMTAwNjQ0CistLS0gYS9nc3QvcnRwL2dzdHJ0cG1wNGdwYXkuYworKysrIGIvZ3N0L3J0cC9nc3RydHBtcDRncGF5LmMKK0BAIC0zOTAsNiArMzkwLDcgQEAgZ3N0X3J0cF9tcDRnX3BheV9zZXRjYXBzIChHc3RSVFBCYXNlUGF5bG9hZCAqIHBheWxvYWQsIEdzdENhcHMgKiBjYXBzKQorICAgY29uc3QgR1ZhbHVlICpjb2RlY19kYXRhOworICAgY29uc3QgZ2NoYXIgKm1lZGlhX3R5cGUgPSBOVUxMOworICAgZ2Jvb2xlYW4gcmVzOworKyAgY29uc3QgZ2NoYXIgKm5hbWU7CisgCisgICBydHBtcDRncGF5ID0gR1NUX1JUUF9NUDRHX1BBWSAocGF5bG9hZCk7CisgCitAQCAtNDAwLDcgKzQwMSw2IEBAIGdzdF9ydHBfbXA0Z19wYXlfc2V0Y2FwcyAoR3N0UlRQQmFzZVBheWxvYWQgKiBwYXlsb2FkLCBHc3RDYXBzICogY2FwcykKKyAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGdwYXksICJnb3QgY29kZWNfZGF0YSIpOworICAgICBpZiAoR19WQUxVRV9UWVBFIChjb2RlY19kYXRhKSA9PSBHU1RfVFlQRV9CVUZGRVIpIHsKKyAgICAgICBHc3RCdWZmZXIgKmJ1ZmZlcjsKKy0gICAgICBjb25zdCBnY2hhciAqbmFtZTsKKyAKKyAgICAgICBidWZmZXIgPSBnc3RfdmFsdWVfZ2V0X2J1ZmZlciAoY29kZWNfZGF0YSk7CisgICAgICAgR1NUX0xPR19PQkpFQ1QgKHJ0cG1wNGdwYXksICJjb25maWd1cmluZyBjb2RlY19kYXRhIik7CitAQCAtNDI2LDYgKzQyNiwyMyBAQCBnc3RfcnRwX21wNGdfcGF5X3NldGNhcHMgKEdzdFJUUEJhc2VQYXlsb2FkICogcGF5bG9hZCwgR3N0Q2FwcyAqIGNhcHMpCisgCisgICAgICAgcnRwbXA0Z3BheS0+Y29uZmlnID0gZ3N0X2J1ZmZlcl9jb3B5IChidWZmZXIpOworICAgICB9CisrICB9IGVsc2UgeworKyAgICBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZSAoc3RydWN0dXJlKTsKKysKKysgICAgaWYgKCFzdHJjbXAgKG5hbWUsICJ2aWRlby9tcGVnIikpIHsKKysgICAgICBydHBtcDRncGF5LT5wcm9maWxlID0gZ19zdHJkdXAgKCIxIik7CisrCisrICAgICAgLyogZml4ZWQgcmF0ZSAqLworKyAgICAgIHJ0cG1wNGdwYXktPnJhdGUgPSA5MDAwMDsKKysgICAgICAvKiB2aWRlbyBzdHJlYW0gdHlwZSAqLworKyAgICAgIHJ0cG1wNGdwYXktPnN0cmVhbXR5cGUgPSAiNCI7CisrICAgICAgLyogbm8gcGFyYW1zIGZvciB2aWRlbyAqLworKyAgICAgIHJ0cG1wNGdwYXktPnBhcmFtcyA9IE5VTEw7CisrICAgICAgLyogbW9kZSAqLworKyAgICAgIHJ0cG1wNGdwYXktPm1vZGUgPSAiZ2VuZXJpYyI7CisrCisrICAgICAgbWVkaWFfdHlwZSA9ICJ2aWRlbyI7CisrICAgIH0KKyAgIH0KKyAgIGlmIChtZWRpYV90eXBlID09IE5VTEwpCisgICAgIGdvdG8gY29uZmlnX2ZhaWxlZDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kL2RlY3JlYXNlX2FzdGVyaXNraDI2M19yYW5rLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ODYzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZC9kZWNyZWFzZV9hc3Rlcmlza2gyNjNfcmFuay5wYXRjaApAQCAtMCwwICsxLDI1IEBACitjb21taXQgZDcxZDc0ZGFhYzhlZDU0MTU2ZWQxMDM5NThhYjQ1NWM2M2M3MmIwZQorQXV0aG9yOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogICBNb24gTm92IDEwIDExOjI1OjQ3IDIwMTQgKzA4MDAKKworW2FzdGVyaXNraDI2M10gZGVjcmVhc2UgdGhlIHJhbmsgYXMgd2UgaGF2bid0IHRoaXMga2luZCBvZiBkZWNvZGVyLgorCitEZWNyZWFzZSB0aGUgcmFuayBhcyB3ZSBoYXZuJ3QgdGhpcyBraW5kIG9mIGRlY29kZXIuCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzk5MzUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNvbmcgQmluZyA8YjA2NDk4QGZyZWVzY2FsZS5jb20+CisKK2RpZmYgLS1naXQgYS9nc3QvcnRwL2dzdGFzdGVyaXNraDI2My5jIGIvZ3N0L3J0cC9nc3Rhc3Rlcmlza2gyNjMuYworaW5kZXggYTAxZmJjOC4uOGZhMzE5NCAxMDA2NDQKKy0tLSBhL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKKysrKyBiL2dzdC9ydHAvZ3N0YXN0ZXJpc2toMjYzLmMKK0BAIC0yMjYsNSArMjI2LDUgQEAgZ2Jvb2xlYW4KKyBnc3RfYXN0ZXJpc2toMjYzX3BsdWdpbl9pbml0IChHc3RQbHVnaW4gKiBwbHVnaW4pCisgeworICAgcmV0dXJuIGdzdF9lbGVtZW50X3JlZ2lzdGVyIChwbHVnaW4sICJhc3Rlcmlza2gyNjMiLAorLSAgICAgIEdTVF9SQU5LX1NFQ09OREFSWSwgR1NUX1RZUEVfQVNURVJJU0tfSDI2Myk7CisrICAgICAgR1NUX1JBTktfU0VDT05EQVJZIC0gMSwgR1NUX1RZUEVfQVNURVJJU0tfSDI2Myk7CisgfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF8xLjQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDNhYjYwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfMS40LjUuYmIKQEAgLTAsMCArMSwxMyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcGx1Z2lucy1nb29kLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9jb21tb24vY292ZXJhZ2UvY292ZXJhZ2UtcmVwb3J0LnBsO2JlZ2lubGluZT0yO2VuZGxpbmU9MTc7bWQ1PWE0ZTE4MzBmY2UwNzgwMjhjOGYwOTc0MTYxMjcyNjA3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9yZXBsYXlnYWluL3JnYW5hbHlzaXMuYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIzO21kNT1iNjBlYmVmZDViMmY1YThlMGNhYjZiZmVlMzkxYTVmZSIKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDEtZ3N0cnRwbXA0Z3BheS1zZXQtZGFmYXVsdC12YWx1ZS1mb3ItTVBFRzQtd2l0aG91dC1jby5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZGVjcmVhc2VfYXN0ZXJpc2toMjYzX3JhbmsucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gImVhZjFhNmRhZjczNzQ5YmM0MjNmZWFjMzAxZDYwMDM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc5YjFiNWYzZjdiY2FhOGE2MTUyMDJlYjVlMTc2MTIxZWViODMzNjk2MGY3MDY4N2U1MzZhZDc4ZGJjN2U2NDEiCisKK1MgPSAiJHtXT1JLRElSfS9nc3QtcGx1Z2lucy1nb29kLSR7UFZ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2RfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMGUwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtZ29vZF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWdvb2QuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2NvbW1vbi9jb3ZlcmFnZS9jb3ZlcmFnZS1yZXBvcnQucGw7YmVnaW5saW5lPTI7ZW5kbGluZT0xNzttZDU9YTRlMTgzMGZjZTA3ODAyOGM4ZjA5NzQxNjEyNzI2MDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L3JlcGxheWdhaW4vcmdhbmFseXNpcy5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MjM7bWQ1PWI2MGViZWZkNWIyZjVhOGUwY2FiNmJmZWUzOTFhNWZlIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNSRVYgPSAiZmQwMTIzODAwYzhjMWNmMTQ2OGMwZmE1ZDU5MmFkMGQwZDhiNDE0MCIKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJY2QgJHtTfQorCS4vYXV0b2dlbi5zaCAtLW5vY29uZmlndXJlCisJY2QgJHtCfQorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNiYTMxNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5LmluYwpAQCAtMCwwICsxLDMwIEBACityZXF1aXJlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLmluYworCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyAmIExHUEx2MisiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCisKK0RFUEVORFMgKz0gImdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UgbGliaWQzdGFnIgorCitpbmhlcml0IGdldHRleHQKKworCitQQUNLQUdFQ09ORklHID8/PSAiIFwKKyAgICBvcmMgYTUyZGVjIGxhbWUgbWFkIG1wZWcyZGVjIFwKKyAgICAiCisKK1BBQ0tBR0VDT05GSUdbYTUyZGVjXSAgID0gIi0tZW5hYmxlLWE1MmRlYywtLWRpc2FibGUtYTUyZGVjLGxpYmE1MiIKK1BBQ0tBR0VDT05GSUdbY2Rpb10gICAgID0gIi0tZW5hYmxlLWNkaW8sLS1kaXNhYmxlLWNkaW8sbGliY2RpbyIKK1BBQ0tBR0VDT05GSUdbZHZkcmVhZF0gID0gIi0tZW5hYmxlLWR2ZHJlYWQsLS1kaXNhYmxlLWR2ZHJlYWQsbGliZHZkcmVhZCIKK1BBQ0tBR0VDT05GSUdbbGFtZV0gICAgID0gIi0tZW5hYmxlLWxhbWUsLS1kaXNhYmxlLWxhbWUsbGFtZSIKK1BBQ0tBR0VDT05GSUdbbWFkXSAgICAgID0gIi0tZW5hYmxlLW1hZCwtLWRpc2FibGUtbWFkLGxpYm1hZCIKK1BBQ0tBR0VDT05GSUdbbXBlZzJkZWNdID0gIi0tZW5hYmxlLW1wZWcyZGVjLC0tZGlzYWJsZS1tcGVnMmRlYyxtcGVnMmRlYyIKK1BBQ0tBR0VDT05GSUdbeDI2NF0gICAgID0gIi0tZW5hYmxlLXgyNjQsLS1kaXNhYmxlLXgyNjQseDI2NCIKKworCitFWFRSQV9PRUNPTkYgKz0gIiBcCisgICAgLS1kaXNhYmxlLWFtcm5iIFwKKyAgICAtLWRpc2FibGUtYW1yd2IgXAorICAgIC0tZGlzYWJsZS1zaWRwbGF5IFwKKyAgICAtLWRpc2FibGUtdHdvbGFtZSBcCisgICAgIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy11Z2x5XzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2IyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV8xLjQuNS5iYgpAQCAtMCwwICsxLDEwIEBACitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OTU0YmVlZDdiYjlhOTNlNDI2ZGVlNTQzZmY0NjM5MyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1Y2Q1ZTgxY2Y2MTg5NDRmNGRjOTM1ZjE2NjliMjEyNWU4YmIyZmU5Y2M3ZGM4ZGMxNWI3MjIzN2FjYTQ5MDY3IgorCitTID0gIiR7V09SS0RJUn0vZ3N0LXBsdWdpbnMtdWdseS0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHlfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZjVmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMtdWdseV9naXQuYmIKQEAgLTAsMCArMSwxNyBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC1wbHVnaW5zLXVnbHkuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWE2Zjg5ZTIxMDBkOWI2Y2RmZmNlYTRmMzk4ZTM3MzQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NoZWNrL2VsZW1lbnRzL3hpbmdtdXguYztiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT00Yzc3MWI4YWYxODg3MjQ4NTVjYjk5Y2FkZDM5MDA2OCAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIwNmI4YWMxMGNlZTg1YzVjMzA0Y2EzMjA5OTdhYThmNDQyOTVhNjZmIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcGx1Z2lucy5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzgzYjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXBsdWdpbnMuaW5jCkBAIC0wLDAgKzEsNTkgQEAKK1NVTU1BUlkgPSAiUGx1Z2lucyBmb3IgdGhlIEdTdHJlYW1lciBtdWx0aW1lZGlhIGZyYW1ld29yayAxLngiCitIT01FUEFHRSA9ICJodHRwOi8vZ3N0cmVhbWVyLmZyZWVkZXNrdG9wLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1Hc3RyZWFtZXIiCitTRUNUSU9OID0gIm11bHRpbWVkaWEiCitERVBFTkRTID0gImdzdHJlYW1lcjEuMCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0dTVFJFQU1FUl8xXzBfREVCVUcgPz0gIi0tZGlzYWJsZS1kZWJ1ZyIKK0dTVFJFQU1FUl8xXzBfR0lUX0JSQU5DSCA/PSAibWFzdGVyIgorRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS12YWxncmluZCAke0dTVFJFQU1FUl8xXzBfREVCVUd9IC0tZGlzYWJsZS1leGFtcGxlcyAiCisKK2FjcGF0aHMgPSAiLUkgJHtTfS9jb21tb24vbTQgLUkgJHtTfS9tNCIKKworTElCViA9ICIxLjAiCityZXF1aXJlIGdzdC1wbHVnaW5zLXBhY2thZ2UuaW5jCisKK1BBQ0tBR0VDT05GSUdbb3JjXSA9ICItLWVuYWJsZS1vcmMsLS1kaXNhYmxlLW9yYyxvcmMgb3JjLW5hdGl2ZSIKKworZXhwb3J0IE9SQ0MgPSAiJHtTVEFHSU5HX0RJUl9OQVRJVkV9JHtiaW5kaXJ9L29yY2MiCisKK1BBQ0tBR0VTX0RZTkFNSUMgPSAiXiR7UE59LS4qIgorCisjIGFwcGx5IGdzdHJlYW1lciBoYWNrIGFmdGVyIE1ha2VmaWxlLmluLmluIGluIHNvdXJjZSBpcyByZXBsYWNlZCBieSBvdXIgdmVyc2lvbiBmcm9tCisjICR7U1RBR0lOR19EQVRBRElSX05BVElWRX0vZ2V0dGV4dC9wby9NYWtlZmlsZS5pbi5pbiwgYnV0IGJlZm9yZSBjb25maWd1cmUgaXMgZXhlY3V0ZWQgCisjIGh0dHA6Ly9saXN0cy5saW51eHRvZ28ub3JnL3BpcGVybWFpbC9vcGVuZW1iZWRkZWQtY29yZS8yMDEyLU5vdmVtYmVyLzAzMjIzMy5odG1sCitvZV9ydW5jb25mX3ByZXBlbmQoKSB7CisJaWYgWyAtZSAke1N9L3BvL01ha2VmaWxlLmluLmluIF07IHRoZW4KKwkJc2VkIC1pIC1lICIxYVxcIiAtZSAnR0VUVEVYVF9QQUNLQUdFID0gQEdFVFRFWFRfUEFDS0FHRUAnICR7U30vcG8vTWFrZWZpbGUuaW4uaW4KKwlmaQorfQorCitTUkNfVVJJID0gIiR7QGdldF9nc3Rfc3JjdXJpKGQpfSIKKworZGVmIGdldF9nc3Rfc3JjdXJpKGQpOgorICAgICMgY2hlY2sgaWYgZXhwZWN0ZWQgcHJlZml4IGlzIHByZXNlbnQKKyAgICBwcmVmaXggPSAiZ3N0cmVhbWVyMS4wLSIKKyAgICBicG4gPSBkLmdldFZhcigiQlBOIiwgVHJ1ZSkKKyAgICBpZiBub3QgYnBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgYmIuZmF0YWwoJ0ludmFsaWQgR1N0cmVhbWVyIDEuMCBwbHVnaW4gcGFja2FnZSBuYW1lICIlcyIgOiBtdXN0IHN0YXJ0IHdpdGggIiVzIicgJSAoYnBuLCBwcmVmaXgpKQorCisgICAgIyByZXBsYWNlZCBwcmVmaXggd2l0aCAiZ3N0LSIsIHdoaWNoIGlzIHdoYXQgaXMgdXNlZCBmb3IgdGhlIHRhcmJhbGwgYW5kIHJlcG9zaXRvcnkgZmlsZW5hbWVzCisgICAgZ3N0cGtnX2Jhc2VuYW1lID0gImdzdC0iICsgYnBuW2xlbihwcmVmaXgpOl0KKyAgICBwdiA9IGQuZ2V0VmFyKCJQViIsIFRydWUpCisgICAgYnJhbmNoID0gZC5nZXRWYXIoIkdTVFJFQU1FUl8xXzBfR0lUX0JSQU5DSCIsIFRydWUpCisKKyAgICBpZiBwdiA9PSAiZ2l0IjoKKyAgICAgICAgcyA9ICJnaXQ6Ly9hbm9uZ2l0LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvJXM7YnJhbmNoPSVzIiAlIChnc3Rwa2dfYmFzZW5hbWUsIGJyYW5jaCkKKyAgICBlbHNlOgorICAgICAgICBzID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy8lcy8lcy0lcy50YXIueHoiICUgKGdzdHBrZ19iYXNlbmFtZSwgZ3N0cGtnX2Jhc2VuYW1lLCBwdikKKyAgICByZXR1cm4gcworCitkZWxldGVfbGlibGlua19tNF9maWxlKCkgeworCSMgVGhpcyBtNCBmaWxlIGNvbnRhaW5zIG5hc3RpbmVzcyB3aGljaCBjb25mbGljdHMgd2l0aCBsaWJ0b29sIDIuMi4yCisJcm0gIiR7U30vbTQvbGliLWxpbmsubTQiIHx8IHRydWUKK30KKworZG9fY29uZmlndXJlW3ByZWZ1bmNzXSArPSAiIGRlbGV0ZV9saWJsaW5rX200X2ZpbGUgIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YTk0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyLmluYwpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBvbiB0b3Agb2YgR1N0cmVhbWVyIGZvciBidWlsZGluZyBhbiBSVFNQIHNlcnZlciIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyIgorSE9NRVBBR0UgPSAiaHR0cDovL2NnaXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcnRzcC1zZXJ2ZXIvIgorREVQRU5EUyA9ICJnc3RyZWFtZXIxLjAgbGliY2dyb3VwIGdzdHJlYW1lcjEuMC1wbHVnaW5zLWJhc2UiCisKK1BOUkVBTCA9ICJnc3QtcnRzcC1zZXJ2ZXIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2dzdHJlYW1lci5mcmVlZGVza3RvcC5vcmcvc3JjLyR7UE5SRUFMfS8ke1BOUkVBTH0tJHtQVn0udGFyLnh6IgorCitTID0gIiR7V09SS0RJUn0vJHtQTlJFQUx9LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXJfMS40LjUuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWI0MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLXJ0c3Atc2VydmVyXzEuNC41LmJiCkBAIC0wLDAgKzEsNiBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAtcnRzcC1zZXJ2ZXIuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTlmOWI4ODk5ZWM3YWIzMzY2M2NkYTc2MjdkYjQwZDMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMzA4OTI1NGJkMzFiN2MxZjFjZjJjMDM0YTNiMzU1MWY5Mjg3OGY5ZTNjYWI2NWNlZjNhOTAxYTA0YzBmMWQzNyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4YWE4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAuaW5jCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiR1N0cmVhbWVyIDEuMCBtdWx0aW1lZGlhIGZyYW1ld29yayIKK0RFU0NSSVBUSU9OID0gIkdTdHJlYW1lciBpcyBhIG11bHRpbWVkaWEgZnJhbWV3b3JrIGZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdmlkZW8gYW5kIHNvdW5kLiBcCitJdCBzdXBwb3J0cyBhIHdpZGUgcmFuZ2Ugb2YgZm9ybWF0cyBpbmNsdWRpbmcgbXAzLCBvZ2csIGF2aSwgbXBlZyBhbmQgcXVpY2t0aW1lLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUdzdHJlYW1lciIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgbGlieG1sMiBiaXNvbi1uYXRpdmUgZmxleC1uYXRpdmUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK1BBQ0tBR0VDT05GSUdbZGVidWddID0gIi0tZW5hYmxlLWRlYnVnLC0tZGlzYWJsZS1kZWJ1ZyIKK1BBQ0tBR0VDT05GSUdbY2hlY2tdID0gIi0tZW5hYmxlLWNoZWNrLC0tZGlzYWJsZS1jaGVjayIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1kb2Nib29rIC0tZGlzYWJsZS1ndGstZG9jIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWV4YW1wbGVzIC0tZGlzYWJsZS10ZXN0cyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLXZhbGdyaW5kIFwKKyAgICAgICAgICAgICAgICAiCisKK1JSRUNPTU1FTkRTXyR7UE59X3FlbXV4ODYgICAgKz0gImtlcm5lbC1tb2R1bGUtc25kLWVuczEzNzAga2VybmVsLW1vZHVsZS1zbmQtcmF3bWlkaSIKK1JSRUNPTU1FTkRTXyR7UE59X3FlbXV4ODYtNjQgKz0gImtlcm5lbC1tb2R1bGUtc25kLWVuczEzNzAga2VybmVsLW1vZHVsZS1zbmQtcmF3bWlkaSIKKworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl92YWxncmluZF92YWxncmluZF9oPW5vIgorCitGSUxFU18ke1BOfSArPSAiICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouc28iCitGSUxFU18ke1BOfS1kZXYgKz0gIiAke2xpYmRpcn0vZ3N0cmVhbWVyLTEuMC8qLmxhICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLyouYSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiICR7bGliZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1Zy8gJHtsaWJleGVjZGlyfS9nc3RyZWFtZXItMS4wLy5kZWJ1Zy8iCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1GaXgtY3Jhc2gtd2l0aC1nc3QtaW5zcGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGY1Y2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLUZpeC1jcmFzaC13aXRoLWdzdC1pbnNwZWN0LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gNmIyNmYzZGJmOWJmNTc3ZDcxNTM0YWI3NDEwZGU2NmQwNmU0NmJhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KK0RhdGU6IFNhdCwgNiBBcHIgMjAxMyAyMzo1MjoxMSArMDIwMAorU3ViamVjdDogW1BBVENIXSBGaXggY3Jhc2ggd2l0aCBnc3QtaW5zcGVjdCBDaHJpcyBMb3JkIDxjaHJpc0BvcGVuZWRoYW5kLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBSYWZhZWwgR2lhbmkgPGR2QHBzZXVkb3Rlcm1pbmFsLm9yZz4KKy0tLQorIHRvb2xzL2dzdC1pbnNwZWN0LmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS90b29scy9nc3QtaW5zcGVjdC5jIGIvdG9vbHMvZ3N0LWluc3BlY3QuYworaW5kZXggMjNiN2M0NC4uYjc5YjAyZSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2dzdC1pbnNwZWN0LmMKKysrKyBiL3Rvb2xzL2dzdC1pbnNwZWN0LmMKK0BAIC0xNTU2LDcgKzE1NTYsNyBAQCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQorICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzIChjdHgsIG9wdGlvbnMsIEdFVFRFWFRfUEFDS0FHRSk7CisgICBnX29wdGlvbl9jb250ZXh0X2FkZF9ncm91cCAoY3R4LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwICgpKTsKKyAgIGlmICghZ19vcHRpb25fY29udGV4dF9wYXJzZSAoY3R4LCAmYXJnYywgJmFyZ3YsICZlcnIpKSB7CistICAgIGdfcHJpbnRlcnIgKCJFcnJvciBpbml0aWFsaXppbmc6ICVzXG4iLCBlcnItPm1lc3NhZ2UpOworKyAgICBnX3ByaW50ZXJyICgiRXJyb3IgaW5pdGlhbGl6aW5nOiAlc1xuIiwgZXJyID8gZXJyLT5tZXNzYWdlIDogIihudWxsKSIpOworICAgICByZXR1cm4gLTE7CisgICB9CisgICBnX29wdGlvbl9jb250ZXh0X2ZyZWUgKGN0eCk7CistLSAKKzEuOC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvMDAwMS1nc3RpbmZvLVNob3J0ZW4tX19GSUxFX18tb24tYWxsLXBsYXRmb3Jtcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjEzYzRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAxLWdzdGluZm8tU2hvcnRlbi1fX0ZJTEVfXy1vbi1hbGwtcGxhdGZvcm1zLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0Zyb20gODFmZWNkMzY3YjAxNmU1YWM0ZmIwYzA0Yjg0ZGE1YzQ3NGYzMGRhNiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBldGVyIFVyYmFuZWMgPGdpdC51c2VyQHVyYmFuZWMubmV0PgorRGF0ZTogRnJpLCAyNyBGZWIgMjAxNSAwMToxNjo1OCArMTEwMAorU3ViamVjdDogW1BBVENIIDEvMV0gZ3N0aW5mbzogU2hvcnRlbiBfX0ZJTEVfXyBvbiBhbGwgcGxhdGZvcm1zLgorCitUaGlzIGlzIHVzZWZ1bCBub3Qgb25seSBmb3IgTVNWQywgYnV0IGFsc28gd2l0aCBnY2MvTGludXggd2hlbiBkb2luZworY3Jvc3MtY29tcGlsYXRpb24gYnVpbGRzIGFuZCBvdXQtb2YtdHJlZSBidWlsZHMuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ1MjEzXQorCitTaWduZWQtb2ZmLWJ5OiBQZXRlciBVcmJhbmVjIDxnaXQudXNlckB1cmJhbmVjLm5ldD4KKy0tLQorIGdzdC9nc3RpbmZvLmMgfCAxMSArKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9nc3QvZ3N0aW5mby5jIGIvZ3N0L2dzdGluZm8uYworaW5kZXggYjJhMzAwNS4uOGI2MWQwOSAxMDA2NDQKKy0tLSBhL2dzdC9nc3RpbmZvLmMKKysrKyBiL2dzdC9nc3RpbmZvLmMKK0BAIC00NDQsNyArNDQ0LDYgQEAgZ3N0X2RlYnVnX2xvZyAoR3N0RGVidWdDYXRlZ29yeSAqIGNhdGVnb3J5LCBHc3REZWJ1Z0xldmVsIGxldmVsLAorICAgdmFfZW5kICh2YXJfYXJncyk7CisgfQorIAorLSNpZmRlZiBHX09TX1dJTjMyCisgLyogYmFzZWQgb24gZ19iYXNlbmFtZSgpLCB3aGljaCB3ZSBjYW4ndCB1c2UgYmVjYXVzZSBpdCB3YXMgZGVwcmVjYXRlZCAqLworIHN0YXRpYyBpbmxpbmUgY29uc3QgZ2NoYXIgKgorIGdzdF9wYXRoX2Jhc2VuYW1lIChjb25zdCBnY2hhciAqIGZpbGVfbmFtZSkKK0BAIC00NjcsNyArNDY2LDYgQEAgZ3N0X3BhdGhfYmFzZW5hbWUgKGNvbnN0IGdjaGFyICogZmlsZV9uYW1lKQorIAorICAgcmV0dXJuIGZpbGVfbmFtZTsKKyB9CistI2VuZGlmCisgCisgLyoqCisgICogZ3N0X2RlYnVnX2xvZ192YWxpc3Q6CitAQCAtNDk3LDEyICs0OTUsMTEgQEAgZ3N0X2RlYnVnX2xvZ192YWxpc3QgKEdzdERlYnVnQ2F0ZWdvcnkgKiBjYXRlZ29yeSwgR3N0RGVidWdMZXZlbCBsZXZlbCwKKyAgIGdfcmV0dXJuX2lmX2ZhaWwgKGZ1bmN0aW9uICE9IE5VTEwpOworICAgZ19yZXR1cm5faWZfZmFpbCAoZm9ybWF0ICE9IE5VTEwpOworIAorLSAgLyogVGhlIHByZWRlZmluZWQgbWFjcm8gX19GSUxFX18gaXMgYWx3YXlzIHRoZSBleGFjdCBwYXRoIGdpdmVuIHRvIHRoZQorLSAgICogY29tcGlsZXIgd2l0aCBNU1ZDLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgYmFzZW5hbWUuICBXZSB3b3JrCistICAgKiBhcm91bmQgaXQgYXQgcnVudGltZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eS4gKi8KKy0jaWZkZWYgR19PU19XSU4zMgorKyAgLyogVGhlIHByZWRlZmluZWQgbWFjcm8gX19GSUxFX18gY2FuIGJlIGFuIGFic29sdXRlIHBhdGggaW4gc29tZSBidWlsZAorKyAgICogZW52aXJvbm1lbnRzLCBzdWNoIGFzIE1TVkMgb3Igb3V0LW9mLXRyZWUgY3Jvc3MtY29tcGlsZXMuIFRoaXMgbWF5CisrICAgKiBiZSBzaWduaWZpY2FudGx5IGxvbmdlciB0aGFuIHRoZSBmaWxlbmFtZS4gIFdlIHdvcmsgYXJvdW5kIGl0IGF0CisrICAgKiBydW50aW1lIHRvIGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5LiAqLworICAgZmlsZSA9IGdzdF9wYXRoX2Jhc2VuYW1lIChmaWxlKTsKKy0jZW5kaWYKKyAKKyAgIG1lc3NhZ2UubWVzc2FnZSA9IE5VTEw7CisgICBtZXNzYWdlLmZvcm1hdCA9IGZvcm1hdDsKKy0tIAorMi4zLjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wLzAwMDItYmFzZXNpbmstRml4LVFvUy1sYXRlbmVzcy1jaGVja2luZy1pZi1zdWJjbGFzcy1pbXBsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA1Y2JlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC8wMDAyLWJhc2VzaW5rLUZpeC1Rb1MtbGF0ZW5lc3MtY2hlY2tpbmctaWYtc3ViY2xhc3MtaW1wbGUucGF0Y2gKQEAgLTAsMCArMSw3MCBAQAorRnJvbSA2OTE0NTY2ZWQ2YTg5Yzk2OTczYTU3OGFhNWVjZDAxZWU2OGNkY2ZkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmlhbiA8Smlhbi5MaUBmcmVlc2NhbGUuY29tPgorRGF0ZTogVGh1LCAxNCBNYXkgMjAxNSAxNTo0OTo0MyArMDgwMAorU3ViamVjdDogW1BBVENIXSBiYXNlc2luazogRml4IFFvUy9sYXRlbmVzcyBjaGVja2luZyBpZiBzdWJjbGFzcyBpbXBsZW1lbnRzCisgcHJlcGFyZS9wcmVwYXJlX2xpc3QgdmZ1bmNzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKK0luIGJhc2VzaW5rIGZ1bmN0aW9ucyBnc3RfYmFzZV9zaW5rX2NoYWluX3VubG9ja2VkKCksIGJlbG93IGNvZGUgaXMgdXNlZCB0bworY2hlY2tpbmcgaWYgYnVmZmVyIGlzIGxhdGUgYmVmb3JlIGRvaW5nIHByZXBhcmUgY2FsbCB0byBzYXZlIHNvbWUgZWZmb3J0OgorICAgIGlmIChzeW5jYWJsZSAmJiBkb19zeW5jKQorICAgICAgbGF0ZSA9CisgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKyAgICAgICAgICBHU1RfQ0xPQ0tfRUFSTFksIDAsIEZBTFNFKTsKKworICAgIGlmIChHX1VOTElLRUxZIChsYXRlKSkKKyAgICAgIGdvdG8gZHJvcHBlZDsKKworQnV0IHRoaXMgY29kZSBoYXMgcHJvYmxlbSwgaXQgc2hvdWxkIGNhbGN1bGF0ZSBqaXR0ZXIgYmFzZWQgb24gY3VycmVudCBtZWRpYQorY2xvY2ssIHJhdGhlciB0aGFuIGp1c3QgcGFzc2luZyAwLiBJIGZvdW5kIGl0IHdpbGwgZHJvcCBhbGwgdGhlIGZyYW1lcyB3aGVuCityZXdpbmQgaW4gc2xvdyBzcGVlZCwgc3VjaCBhcyAtMlguCisKK2h0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD03NDkyNTgKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbMS41LjFdCistLS0KKyBsaWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgfCAgIDI2ICsrKysrKysrKysrKysrKysrKysrKystLS0tCisgMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMgYi9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKK2luZGV4IGE1MDU2OTUuLjVmYjJkNmEgMTAwNjQ0CistLS0gYS9saWJzL2dzdC9iYXNlL2dzdGJhc2VzaW5rLmMKKysrKyBiL2xpYnMvZ3N0L2Jhc2UvZ3N0YmFzZXNpbmsuYworQEAgLTMzNjksMTAgKzMzNjksMjggQEAgZ3N0X2Jhc2Vfc2lua19jaGFpbl91bmxvY2tlZCAoR3N0QmFzZVNpbmsgKiBiYXNlc2luaywgR3N0UGFkICogcGFkLAorICAgICBpZiAoR19VTkxJS0VMWSAoc3RlcHBlZCkpCisgICAgICAgZ290byBkcm9wcGVkOworIAorLSAgICBpZiAoc3luY2FibGUgJiYgZG9fc3luYykKKy0gICAgICBsYXRlID0KKy0gICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKy0gICAgICAgICAgR1NUX0NMT0NLX0VBUkxZLCAwLCBGQUxTRSk7CisrICAgIGlmIChzeW5jYWJsZSAmJiBkb19zeW5jKSB7CisrICAgICAgR3N0Q2xvY2sgKmNsb2NrOworKworKyAgICAgIEdTVF9PQkpFQ1RfTE9DSyAoYmFzZXNpbmspOworKyAgICAgIGNsb2NrID0gR1NUX0VMRU1FTlRfQ0xPQ0sgKGJhc2VzaW5rKTsKKysgICAgICBpZiAoY2xvY2sgJiYgR1NUX1NUQVRFIChiYXNlc2luaykgPT0gR1NUX1NUQVRFX1BMQVlJTkcpIHsKKysgICAgICAgIEdzdENsb2NrVGltZSBiYXNlX3RpbWU7CisrICAgICAgICBHc3RDbG9ja1RpbWUgc3RpbWU7CisrICAgICAgICBHc3RDbG9ja1RpbWUgbm93OworKworKyAgICAgICAgYmFzZV90aW1lID0gR1NUX0VMRU1FTlRfQ0FTVCAoYmFzZXNpbmspLT5iYXNlX3RpbWU7CisrICAgICAgICBzdGltZSA9IGJhc2VfdGltZSArIGdzdF9iYXNlX3NpbmtfYWRqdXN0X3RpbWUgKGJhc2VzaW5rLCByc3RhcnQpOworKyAgICAgICAgbm93ID0gZ3N0X2Nsb2NrX2dldF90aW1lIChjbG9jayk7CisrICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworKworKyAgICAgICAgbGF0ZSA9CisrICAgICAgICAgICAgZ3N0X2Jhc2Vfc2lua19pc190b29fbGF0ZSAoYmFzZXNpbmssIG9iaiwgcnN0YXJ0LCByc3RvcCwKKysgICAgICAgICAgICBHU1RfQ0xPQ0tfRUFSTFksIEdTVF9DTE9DS19ESUZGIChzdGltZSwgbm93KSwgRkFMU0UpOworKyAgICAgIH0gZWxzZSB7CisrICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyAoYmFzZXNpbmspOworKyAgICAgIH0KKysgICAgfQorIAorICAgICBpZiAoR19VTkxJS0VMWSAobGF0ZSkpCisgICAgICAgZ290byBkcm9wcGVkOworLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjAvaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNTBjZTZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMC9pbnB1dHNlbGVjdG9yLXN0aWNreS1ldmVudHMtaGF2ZW4tdC1zZW5kLW91dC13aGVuLWFjLTEtNC0xLnBhdGNoCkBAIC0wLDAgKzEsMTY3IEBACitGcm9tIDgzYmVkOTBjMzA2ZWQzMTg1ZDQ4ZmViZjY0NDExNzdkNjM4ZjczNDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorRGF0ZTogV2VkLCAyNCBEZWMgMjAxNCAxMDoxMzo1MSArMDgwMAorU3ViamVjdDogW1BBVENIXSBpbnB1dHNlbGVjdG9yOiBzdGlja3kgZXZlbnRzIGhhdmVuJ3Qgc2VuZCBvdXQgd2hlbiBhY3RpdmUKKyB0cmFjayByZWFjaCBFT1MKKworRU9TIGV2ZW50IGhhc24ndCBiZWVuIHNlbmQgdG8gZG93bi1lbGVtZW50LiBUaGUgcmVzb2x1dGlvbiBpcyBibG9jayBFT1MgZXZlbnQKK29mIGluYWN0aXZlIHBhZCwgc2VuZCB0aGUgZXZlbnQgYWZ0ZXIgdGhlIHBhZCBhY3RpdmVkLgorCitodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQwOTQ5CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgWzEuNS4xXQorCitTaWduZWQtb2ZmLWJ5OiBTb25nIEJpbmcgPGIwNjQ5OEBmcmVlc2NhbGUuY29tPgorLS0tCisgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMgfCAgIDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCisgcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmggfCAgICAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmMgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworaW5kZXggZmI1MDgwMi4uNDQ2MWY3YyAxMDA2NDQKKy0tLSBhL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5jCisrKysgYi9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuYworQEAgLTQ0MCw2ICs0NDAsMTcgQEAgZ3N0X3NlbGVjdG9yX3BhZF9pdGVyYXRlX2xpbmtlZF9wYWRzIChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCkKKyB9CisgCisgc3RhdGljIGdib29sZWFuCisrZ3N0X2lucHV0X3NlbGVjdG9yX2Vvc193YWl0IChHc3RJbnB1dFNlbGVjdG9yICogc2VsZiwgR3N0U2VsZWN0b3JQYWQgKiBwYWQpCisreworKyAgd2hpbGUgKCFzZWxmLT5lb3MgJiYgIXNlbGYtPmZsdXNoaW5nICYmICFwYWQtPmZsdXNoaW5nKSB7CisrICAgIC8qIHdlIGNhbiBiZSB1bmxvY2tlZCBoZXJlIHdoZW4gd2UgYXJlIHNodXR0aW5nIGRvd24gKGZsdXNoaW5nKSBvciB3aGVuIHdlCisrICAgICAqIGdldCB1bmJsb2NrZWQgKi8KKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1dBSVQgKHNlbGYpOworKyAgfQorKyAgcmV0dXJuIHNlbGYtPmZsdXNoaW5nOworK30KKysKKytzdGF0aWMgZ2Jvb2xlYW4KKyBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyB7CisgICBnYm9vbGVhbiByZXMgPSBUUlVFOworQEAgLTQ4Niw2ICs0OTcsNyBAQCBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RBUlQ6CisgICAgICAgLyogVW5ibG9jayB0aGUgcGFkIGlmIGl0J3Mgd2FpdGluZyAqLworICAgICAgIHNlbHBhZC0+Zmx1c2hpbmcgPSBUUlVFOworKyAgICAgIHNlbC0+ZW9zID0gRkFMU0U7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsKTsKKyAgICAgICBicmVhazsKKyAgICAgY2FzZSBHU1RfRVZFTlRfRkxVU0hfU1RPUDoKK0BAIC01MjMsMjEgKzUzNSwxMiBAQCBnc3Rfc2VsZWN0b3JfcGFkX2V2ZW50IChHc3RQYWQgKiBwYWQsIEdzdE9iamVjdCAqIHBhcmVudCwgR3N0RXZlbnQgKiBldmVudCkKKyAgICAgY2FzZSBHU1RfRVZFTlRfRU9TOgorICAgICAgIHNlbHBhZC0+ZW9zID0gVFJVRTsKKyAKKy0gICAgICBpZiAoZm9yd2FyZCkgeworLSAgICAgICAgc2VscGFkLT5lb3Nfc2VudCA9IFRSVUU7CistICAgICAgfSBlbHNlIHsKKy0gICAgICAgIEdzdFNlbGVjdG9yUGFkICphY3RpdmVfc2VscGFkOworLQorLSAgICAgICAgLyogSWYgdGhlIGFjdGl2ZSBzaW5rcGFkIGlzIGluIEVPUyBzdGF0ZSBidXQgRU9TCistICAgICAgICAgKiB3YXMgbm90IHNlbnQgZG93bnN0cmVhbSB0aGlzIG1lYW5zIHRoYXQgdGhlIHBhZAorLSAgICAgICAgICogZ290IEVPUyBiZWZvcmUgaXQgd2FzIHNldCBhcyBhY3RpdmUgcGFkIGFuZCB0aGF0CistICAgICAgICAgKiB0aGUgcHJldmlvdXNseSBhY3RpdmUgcGFkIGdvdCBFT1MgYWZ0ZXIgaXQgd2FzCistICAgICAgICAgKiBhY3RpdmUKKy0gICAgICAgICAqLworLSAgICAgICAgYWN0aXZlX3NlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQUQgKGFjdGl2ZV9zaW5rcGFkKTsKKy0gICAgICAgIGZvcndhcmQgPSAoYWN0aXZlX3NlbHBhZC0+ZW9zICYmICFhY3RpdmVfc2VscGFkLT5lb3Nfc2VudCk7CistICAgICAgICBhY3RpdmVfc2VscGFkLT5lb3Nfc2VudCA9IFRSVUU7CisrICAgICAgaWYgKCFmb3J3YXJkKSB7CisrICAgICAgICAvKiBibG9ja2VkIHVudGlsIGFjdGl2ZSB0aGUgc2luZCBwYWQgb3IgZmx1c2ggKi8KKysgICAgICAgIGdzdF9pbnB1dF9zZWxlY3Rvcl9lb3Nfd2FpdCAoc2VsLCBzZWxwYWQpOworKyAgICAgICAgZm9yd2FyZCA9IFRSVUU7CisgICAgICAgfQorKyAgICAgIHNlbHBhZC0+ZW9zX3NlbnQgPSBUUlVFOworICAgICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgInJlY2VpdmVkIEVPUyIpOworICAgICAgIGJyZWFrOworICAgICBjYXNlIEdTVF9FVkVOVF9HQVA6eworQEAgLTY3Niw2ICs2NzksMTIgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX3dhaXRfcnVubmluZ190aW1lIChHc3RJbnB1dFNlbGVjdG9yICogc2VsLAorICAgICAgICAgZ3N0X2lucHV0X3NlbGVjdG9yX2FjdGl2YXRlX3NpbmtwYWQgKHNlbCwgR1NUX1BBRF9DQVNUIChzZWxwYWQpKTsKKyAgICAgYWN0aXZlX3NlbHBhZCA9IEdTVF9TRUxFQ1RPUl9QQURfQ0FTVCAoYWN0aXZlX3NpbmtwYWQpOworIAorKyAgICBpZiAoc2VsLT5lb3MpIHsKKysgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWwsICJOb3Qgd2FpdGluZyBiZWNhdXNlIGlucHV0c2VsZWN0b3IgcmVhY2ggRU9TLiIpOworKyAgICAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9VTkxPQ0sgKHNlbCk7CisrICAgICAgcmV0dXJuIEZBTFNFOworKyAgICB9CisrCisgICAgIGlmIChzZWctPmZvcm1hdCAhPSBHU1RfRk9STUFUX1RJTUUpIHsKKyAgICAgICBHU1RfREVCVUdfT0JKRUNUIChzZWxwYWQsCisgICAgICAgICAgICJOb3Qgd2FpdGluZyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYSBUSU1FIHNlZ21lbnQiKTsKK0BAIC05NzEsNiArOTgwLDEyIEBAIGdzdF9zZWxlY3Rvcl9wYWRfY2hhaW4gKEdzdFBhZCAqIHBhZCwgR3N0T2JqZWN0ICogcGFyZW50LCBHc3RCdWZmZXIgKiBidWYpCisgICAgICAgR1NUX1RJTUVfQVJHUyAoR1NUX0JVRkZFUl9USU1FU1RBTVAgKGJ1ZikpKTsKKyAKKyAgIEdTVF9JTlBVVF9TRUxFQ1RPUl9MT0NLIChzZWwpOworKyAgaWYgKHNlbC0+ZW9zKSB7CisrICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgImlucHV0c2VsZWN0b3IgZW9zLiIpOworKyAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworKyAgICBnb3RvIGVvczsKKysgIH0KKysKKyAgIC8qIHdhaXQgb3IgY2hlY2sgZm9yIGZsdXNoaW5nICovCisgICBpZiAoZ3N0X2lucHV0X3NlbGVjdG9yX3dhaXQgKHNlbCwgc2VscGFkKSkgeworICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfVU5MT0NLIChzZWwpOworQEAgLTExNTEsNiArMTE2NiwxMyBAQCBmbHVzaGluZzoKKyAgICAgcmVzID0gR1NUX0ZMT1dfRkxVU0hJTkc7CisgICAgIGdvdG8gZG9uZTsKKyAgIH0KKytlb3M6CisrICB7CisrICAgIEdTVF9ERUJVR19PQkpFQ1QgKHBhZCwgIldlIGFyZSBlb3MsIGRpc2NhcmQgYnVmZmVyICVwIiwgYnVmKTsKKysgICAgZ3N0X2J1ZmZlcl91bnJlZiAoYnVmKTsKKysgICAgcmVzID0gR1NUX0ZMT1dfRU9TOworKyAgICBnb3RvIGRvbmU7CisrICB9CisgfQorIAorIHN0YXRpYyB2b2lkIGdzdF9pbnB1dF9zZWxlY3Rvcl9kaXNwb3NlIChHT2JqZWN0ICogb2JqZWN0KTsKK0BAIC0xMzA5LDYgKzEzMzEsNyBAQCBnc3RfaW5wdXRfc2VsZWN0b3JfaW5pdCAoR3N0SW5wdXRTZWxlY3RvciAqIHNlbCkKKyAgIGdfbXV0ZXhfaW5pdCAoJnNlbC0+bG9jayk7CisgICBnX2NvbmRfaW5pdCAoJnNlbC0+Y29uZCk7CisgICBzZWwtPmJsb2NrZWQgPSBGQUxTRTsKKysgIHNlbC0+ZW9zID0gRkFMU0U7CisgCisgICAvKiBsZXRzIGdpdmUgYSBjaGFuZ2UgZm9yIGRvd25zdHJlYW0gdG8gZG8gc29tZXRoaW5nIG9uCisgICAgKiBhY3RpdmUtcGFkIGNoYW5nZSBiZWZvcmUgd2Ugc3RhcnQgcHVzaGluZyBuZXcgYnVmZmVycyAqLworQEAgLTEzNzcsNiArMTQwMCwxMSBAQCBnc3RfaW5wdXRfc2VsZWN0b3Jfc2V0X2FjdGl2ZV9wYWQgKEdzdElucHV0U2VsZWN0b3IgKiBzZWxmLCBHc3RQYWQgKiBwYWQpCisgICBHU1RfREVCVUdfT0JKRUNUIChzZWxmLCAiTmV3IGFjdGl2ZSBwYWQgaXMgJSIgR1NUX1BUUl9GT1JNQVQsCisgICAgICAgc2VsZi0+YWN0aXZlX3NpbmtwYWQpOworIAorKyAgaWYgKG9sZCAhPSBuZXcgJiYgbmV3LT5lb3MgJiYgIW5ldy0+ZW9zX3NlbnQpIHsKKysgICAgc2VsZi0+ZW9zID0gVFJVRTsKKysgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0JST0FEQ0FTVCAoc2VsZik7CisrICB9CisrCisgICByZXR1cm4gVFJVRTsKKyB9CisgCitAQCAtMTc3MSw2ICsxNzk5LDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfTE9DSyAoc2VsZik7CisrICAgICAgc2VsZi0+ZW9zID0gRkFMU0U7CisgICAgICAgc2VsZi0+YmxvY2tlZCA9IEZBTFNFOworICAgICAgIHNlbGYtPmZsdXNoaW5nID0gRkFMU0U7CisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX1VOTE9DSyAoc2VsZik7CitAQCAtMTc3OSw2ICsxODA4LDcgQEAgZ3N0X2lucHV0X3NlbGVjdG9yX2NoYW5nZV9zdGF0ZSAoR3N0RWxlbWVudCAqIGVsZW1lbnQsCisgICAgICAgLyogZmlyc3QgdW5sb2NrIGJlZm9yZSB3ZSBjYWxsIHRoZSBwYXJlbnQgc3RhdGUgY2hhbmdlIGZ1bmN0aW9uLCB3aGljaAorICAgICAgICAqIHRyaWVzIHRvIGFjcXVpcmUgdGhlIHN0cmVhbSBsb2NrIHdoZW4gZ29pbmcgdG8gcmVhZHkuICovCisgICAgICAgR1NUX0lOUFVUX1NFTEVDVE9SX0xPQ0sgKHNlbGYpOworKyAgICAgIHNlbGYtPmVvcyA9IFRSVUU7CisgICAgICAgc2VsZi0+YmxvY2tlZCA9IEZBTFNFOworICAgICAgIHNlbGYtPmZsdXNoaW5nID0gVFJVRTsKKyAgICAgICBHU1RfSU5QVVRfU0VMRUNUT1JfQlJPQURDQVNUIChzZWxmKTsKK2RpZmYgLS1naXQgYS9wbHVnaW5zL2VsZW1lbnRzL2dzdGlucHV0c2VsZWN0b3IuaCBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCitpbmRleCA5NmM2ODBmLi45YmY5MjRmIDEwMDY0NAorLS0tIGEvcGx1Z2lucy9lbGVtZW50cy9nc3RpbnB1dHNlbGVjdG9yLmgKKysrKyBiL3BsdWdpbnMvZWxlbWVudHMvZ3N0aW5wdXRzZWxlY3Rvci5oCitAQCAtNzcsNiArNzcsNyBAQCBzdHJ1Y3QgX0dzdElucHV0U2VsZWN0b3IgeworICAgR011dGV4IGxvY2s7CisgICBHQ29uZCBjb25kOworICAgZ2Jvb2xlYW4gYmxvY2tlZDsKKysgIGdib29sZWFuIGVvczsKKyAgIGdib29sZWFuIGZsdXNoaW5nOworIH07CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF8xLjQuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ODc1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2dzdHJlYW1lci9nc3RyZWFtZXIxLjBfMS40LjUuYmIKQEAgLTAsMCArMSwxNyBAQAoraW5jbHVkZSBnc3RyZWFtZXIxLjAuaW5jCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTY3NjJlZDQ0MmIzODIyMzg3YTUxYzkyZDkyOGVhZDBkIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2dzdC9nc3QuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIxO21kNT1lMDU5MTM4NDgxMjA1ZWUyYzZmYzFjMDc5YzAxNmQwZCIKKworU1JDX1VSSSA9ICIgXAorICAgIGh0dHA6Ly9nc3RyZWFtZXIuZnJlZWRlc2t0b3Aub3JnL3NyYy9nc3RyZWFtZXIvZ3N0cmVhbWVyLSR7UFZ9LnRhci54eiBcCisgICAgZmlsZTovLzAwMDEtRml4LWNyYXNoLXdpdGgtZ3N0LWluc3BlY3QucGF0Y2ggXAorICAgIGZpbGU6Ly8wMDAxLWdzdGluZm8tU2hvcnRlbi1fX0ZJTEVfXy1vbi1hbGwtcGxhdGZvcm1zLnBhdGNoIFwKKyAgICBmaWxlOi8vaW5wdXRzZWxlY3Rvci1zdGlja3ktZXZlbnRzLWhhdmVuLXQtc2VuZC1vdXQtd2hlbi1hYy0xLTQtMS5wYXRjaCBcCisgICAgZmlsZTovLzAwMDItYmFzZXNpbmstRml4LVFvUy1sYXRlbmVzcy1jaGVja2luZy1pZi1zdWJjbGFzcy1pbXBsZS5wYXRjaCBcCisiCitTUkNfVVJJW21kNXN1bV0gPSAiODhhOTI4OWM2NGE0OTUwZWJiNGY1NDQ5ODAyMzQyODkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDA4MDFhYTdmOTc5MDI0NTI2MjU4YTBlOTQ3MDdiYTQyYjhhYjZmN2QyMjA2ZTU2YWRiYzQ0MzMxNTVjYjBhZSIKKworUyA9ICIke1dPUktESVJ9L2dzdHJlYW1lci0ke1BWfSIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9nc3RyZWFtZXIvZ3N0cmVhbWVyMS4wX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjAwZDMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvZ3N0cmVhbWVyL2dzdHJlYW1lcjEuMF9naXQuYmIKQEAgLTAsMCArMSwxOCBAQAorREVGQVVMVF9QUkVGRVJFTkNFID0gIi0xIgorCitpbmNsdWRlIGdzdHJlYW1lcjEuMC5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Njc2MmVkNDQyYjM4MjIzODdhNTFjOTJkOTI4ZWFkMGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZ3N0L2dzdC5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjE7bWQ1PWUwNTkxMzg0ODEyMDVlZTJjNmZjMWMwNzljMDE2ZDBkIgorCitTUkNfVVJJID0gImdpdDovL2Fub25naXQuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3RyZWFtZXI7YnJhbmNoPW1hc3RlciIKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK1NSQ1JFViA9ICIzYjgxODFhOGM1NTBlNzRhY2FiYTRlOGM1NWJkYzY0OWZhNTUxZGM5IgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwljZCAke1N9CisJLi9hdXRvZ2VuLnNoIC0tbm9jb25maWd1cmUKKwljZCAke0J9Cit9CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZS9sYW1lLTMuOTkuNV9maXhfZm9yX2F1dG9tYWtlLTEuMTIueC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzFhMWQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGaXggdGhpcyBraW5kIG9mIGVycm9ycyB3aXRoIGF1dG9tYWtlIDEuMTIueDoKK3wgZG9jL21hbi9NYWtlZmlsZS5hbTozOiBlcnJvcjogYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydCBoYXMgYmVlbiByZW1vdmVkCit8IGF1dG9yZWNvbmY6IGF1dG9tYWtlIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzOiAxCisKK1NpZ25lZC1PZmYtYnk6IE5pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisyMDEyLzA3LzEzCisKK0luZGV4OiBsYW1lLTMuOTkuNS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2NvbmZpZ3VyZS5pbgorKysrIGxhbWUtMy45OS41L2NvbmZpZ3VyZS5pbgorQEAgLTc3LDkgKzc3LDYgQEAgaWYgdGVzdCAiJHtHQ0N9IiA9ICJ5ZXMiOyB0aGVuCisgCUFDX01TR19SRVNVTFQoJHtHQ0NfdmVyc2lvbn0pCisgZmkKKyAKKy1kbmwgbW9yZSBhdXRvbWFrZSBzdHVmZgorLUFNX0NfUFJPVE9UWVBFUworLQorIEFDX0NIRUNLX0hFQURFUihkbWFsbG9jLmgpCisgaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfZG1hbGxvY19ofSIgPSAieWVzIjsgdGhlbgorIAlBTV9XSVRIX0RNQUxMT0MKK0luZGV4OiBsYW1lLTMuOTkuNS9kb2MvaHRtbC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxhbWUtMy45OS41Lm9yaWcvZG9jL2h0bWwvTWFrZWZpbGUuYW0KKysrKyBsYW1lLTMuOTkuNS9kb2MvaHRtbC9NYWtlZmlsZS5hbQorQEAgLTEsNiArMSw2IEBACisgIyMgJElkOiBNYWtlZmlsZS5hbSx2IDEuNyAyMDEwLzA5LzMwIDIwOjU4OjQwIGphejAwMSBFeHAgJAorIAorLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBkb2NkaXIgPSAkKGRhdGFkaXIpL2RvYworIHBrZ2RvY2RpciA9ICQoZG9jZGlyKS8kKFBBQ0tBR0UpCitJbmRleDogbGFtZS0zLjk5LjUvbGlibXAzbGFtZS9pMzg2L01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGFtZS0zLjk5LjUub3JpZy9saWJtcDNsYW1lL2kzODYvTWFrZWZpbGUuYW0KKysrKyBsYW1lLTMuOTkuNS9saWJtcDNsYW1lL2kzODYvTWFrZWZpbGUuYW0KK0BAIC0xLDYgKzEsNiBAQAorICMjICRJZDogTWFrZWZpbGUuYW0sdiAxLjI2IDIwMTEvMDQvMDQgMDk6NDI6MzQgYWxlaWRpbmdlciBFeHAgJAorIAorLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduICQodG9wX3NyY2RpcikvYW5zaTJrbnIKKytBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgorIAorIERFRlMgPSBAREVGU0AgQENPTkZJR19ERUZTQAorIAorSW5kZXg6IGxhbWUtMy45OS41L2RvYy9tYW4vTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsYW1lLTMuOTkuNS5vcmlnL2RvYy9tYW4vTWFrZWZpbGUuYW0KKysrKyBsYW1lLTMuOTkuNS9kb2MvbWFuL01ha2VmaWxlLmFtCitAQCAtMSw2ICsxLDYgQEAKKyAjIyAkSWQ6IE1ha2VmaWxlLmFtLHYgMS4xIDIwMDAvMTAvMjIgMTE6Mzk6NDQgYWxlaWRpbmdlciBFeHAgJAorIAorLUFVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24KKyAKKyBtYW5fTUFOUyA9IGxhbWUuMQorIEVYVFJBX0RJU1QgPSAke21hbl9NQU5TfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9sYW1lL2xhbWUvbm8tZ3RrMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODhkN2YxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lL25vLWd0azEucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCisjIEFjcXVpcmVkIGZyb20gT3BlbkVtYmVkZGVkCisKKy0tLSBsYW1lLTMuOTYuMS9jb25maWd1cmUuaW5+bm8tZ3RrMS5wYXRjaAkyMDA0LTA3LTI1IDE1OjUyOjEyLjAwMDAwMDAwMCArMDEwMAorKysrIGxhbWUtMy45Ni4xL2NvbmZpZ3VyZS5pbgkyMDA0LTA5LTEwIDE1OjU0OjM5LjAwMDAwMDAwMCArMDEwMAorQEAgLTM2Myw3ICszNjMsMTIgQEAKKyAKKyBkbmwgY29uZmlndXJlIHVzZSBvZiBmZWF0dXJlcworIAorLUFNX1BBVEhfR1RLKDEuMi4wLCBIQVZFX0dUSz0ieWVzIiwgSEFWRV9HVEs9Im5vIikKKysjQU1fUEFUSF9HVEsoMS4yLjAsIEhBVkVfR1RLPSJ5ZXMiLCBIQVZFX0dUSz0ibm8iKQorK0hBVkVfR1RLPSJubyIKKytHVEtfQ0ZMQUdTPSIiCisrR1RLX0xJQlM9IiIKKytBQ19TVUJTVChHVEtfQ0ZMQUdTKQorK0FDX1NVQlNUKEdUS19MSUJTKQorCisgZG5sIEVsZWN0cmljRmVuY2UgbWFsbG9jIGRlYnVnZ2luZworIEFDX01TR19DSEVDS0lORyh1c2Ugb2YgRWxlY3RyaWNGZW5jZSBtYWxsb2MgZGVidWdnaW5nKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGFtZS9sYW1lXzMuOTkuNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ3NzYxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xhbWUvbGFtZV8zLjk5LjUuYmIKQEAgLTAsMCArMSwzMCBAQAorU1VNTUFSWSA9ICJIaWdoIHF1YWxpdHkgTVAzIGF1ZGlvIGVuY29kZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbGFtZS5zb3VyY2Vmb3JnZS5uZXQvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTI5MCZhdGlkPTEwMDI5MCIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKKworREVQRU5EUyA9ICJuY3Vyc2VzIGdldHRleHQtbmF0aXZlIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1jNDZiZGEwMGZmYmIwYmExZGFjMjJmOGQwODdmNTRkOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2xhbWUuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTIwO21kNT1hMjI1ODE4MmM1OTNjMzk4ZDE1YTQ4MjYyMTMwYTkyYiBcCisiCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGFtZS9sYW1lLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby1ndGsxLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xhbWUtMy45OS41X2ZpeF9mb3JfYXV0b21ha2UtMS4xMi54LnBhdGNoICIKKworU1JDX1VSSVttZDVzdW1dID0gIjg0ODM1YjMxM2Q0YThiNjhmNTM0OTgxNmQzM2UwN2NlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjI0MzQ2YjQxNThlNGFmM2JkOWYyZTE5NGJiMjNlYjQ3M2M3NWZiNzM3NzAxMTUyMzM1MzE5NmIxOWI5YTIzZmYiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQQUNLQUdFUyArPSAibGlibXAzbGFtZSBsaWJtcDNsYW1lLWRldiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9sYW1lIgorRklMRVNfbGlibXAzbGFtZSA9ICIke2xpYmRpcn0vbGlibXAzbGFtZS5zby4qIgorRklMRVNfbGlibXAzbGFtZS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vKiIKK0ZJTEVTXyR7UE59LWRldiA9ICIiCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTX2FwcGVuZF94ODYgPSAiIGFjX2N2X2hlYWRlcl9lbW1pbnRyaW5faD1ubyBhY19jdl9oZWFkZXJfeG1taW50cmluX2g9bm8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTIvYnVpbGRjbGVhbnVwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNjgxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhNTIvbGliYTUyL2J1aWxkY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDg5IEBACitJdCBtYWtlcyBtdWNoIG1vcmUgc2Vuc2UgdG8gY29udHJvbCBvdXIgb3duIENGTEFHUyBhbmQgYXZvaWRpbmcgZlBJQyBicmVha3MKK3NvbWUgYXJjaGVzIHRvby4gQXNzdW1lIHdlIGtub3cgd2hhdCB3ZSdyZSBkb2luZyBhbmQgcmVtb3ZlIGFsbCB0aGUgbWVzc2luZyAKK2Fyb3VuZC4KKworUlAgMjMvMi8xMAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhNTJkZWMtMC43LjQvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYTUyZGVjLTAuNy40Lm9yaWcvY29uZmlndXJlLmluCTIwMTAtMDItMjMgMTQ6NTE6NTAuMDAwMDAwMDAwICswMDAwCisrKysgYTUyZGVjLTAuNy40L2NvbmZpZ3VyZS5pbgkyMDEwLTAyLTIzIDE0OjUyOjM2LjAwMDAwMDAwMCArMDAwMAorQEAgLTE0LDYyICsxNCw2IEBACisgQUNfUFJPR19DQworIEFDX1BST0dfR0NDX1RSQURJVElPTkFMCisgCistaWYgdGVzdCB4IiRHQ0MiID0geCJ5ZXMiOyB0aGVuCistCistICAgIGRubCBHQ0Mtc3BlY2lmaWMgZmxhZ3MgLSB0cnkgdG8gb3B0aW1pemUgdGhlbSBzb21ldGltZQorLSAgICBkbmwgLVdhbGwgLVdlcnJvciBtb3ZlZCB0byB0aGUgZW5kIHRvIG5vdCBkaXN0dXJiIHRoZSBjb25maWd1cmUgc2NyaXB0CistCistICAgIGRubCAtTzMKKy0gICAgY2hhbmdlcXVvdGUoPDwsPj4pCistICAgIE9QVF9DRkxBR1M9YGVjaG8gIiRDRkxBR1MifHNlZCAicy8tT1swLTldKi8vZyJgCistICAgIGNoYW5nZXF1b3RlKFssXSkKKy0gICAgT1BUX0NGTEFHUz0iJE9QVF9DRkxBR1MgLU8zIgorLSAgICBBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pCistCistICAgIGRubCAtZm9taXQtZnJhbWUtcG9pbnRlcgorLSAgICBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1mb21pdC1mcmFtZS1wb2ludGVyIgorLSAgICBBQ19UUllfQ0ZMQUdTKFskT1BUX0NGTEFHU10sW0NGTEFHUz0kT1BUX0NGTEFHU10pCistCistICAgIGRubCBhcmNoLXNwZWNpZmljIGZsYWdzCistICAgIGNhc2UgIiRob3N0IiBpbgorLSAgICBpPzg2LSogfCBrPy0qKQorLQljYXNlICIkaG9zdCIgaW4KKy0JaTM4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWkzODYiOzsKKy0JaTQ4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWk0ODYiOzsKKy0JaTU4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PXBlbnRpdW0iOzsKKy0JaTY4Ni0qKSBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PXBlbnRpdW1wcm8iOzsKKy0JazYtKikgICBPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PWs2Ijs7CistCWVzYWMKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIHNwYXJjLSogfCBzcGFyYzY0LSopCistCU9QVF9DRkxBR1M9IiRDRkxBR1MgLW10dW5lPXVsdHJhc3BhcmMiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBtaXBzLXNnaS1pcml4Ni4qKQlkbmwgZG8gd2UgbmVlZCB0byBiZSB0aGF0IHNwZWNpZmljID8KKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAtbWFiaT02NCIKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIGVzYWMKKy1lbGlmIHRlc3QgeCIkQ0MiID0geCJ0Y2MiIC1hIHgiYCRDQyAtdmVyc2lvbiAyPiYxIHwgZ3JlcCBUZW5EUkFgIiAhPSB4IiI7IHRoZW4KKy0gICAgZG5sIFRlbkRSQSBwb3J0YWJpbGl0eSBjaGVja2luZyBjb21waWxlcgorLSAgICBURU5EUkE9eWVzCistICAgIENGTEFHUz0iLVhwIC1ZYW5zaSAtZmBwd2RgL2luY2x1ZGUvdGVuZHJhLmggLURFTElERV9DT0RFIgorLSAgICBlbmFibGVfbWxpYj1ubworLSAgICBlbmFibGVfb3NzPW5vCistICAgIGVuYWJsZV9zb2xhcmlzX2F1ZGlvPW5vCistZWxpZiB0ZXN0IHgiJENDIiA9IHgiaWNjIiAtYSB4ImAkQ0MgLVYgMj4mMSB8IGdyZXAgSW50ZWxgIiAhPSB4IiI7IHRoZW4KKy0gICAgZG5sIEludGVsIEMrKyBjb21waWxlcgorLSAgICBDRkxBR1M9Ii1nIC1PMyAtdW5yb2xsIC1pcCIKKy1lbHNlCistICAgIGRubCBub24tZ2NjIGZsYWdzIC0gd2UgcHJvYmFibHkgbmVlZCBleGFjdCBjb25maWd1cmF0aW9uIHRyaXBsZXRzIGhlcmUuCistICAgIGNhc2UgIiRob3N0IiBpbgorLSAgICBtaXBzLXNnaS1pcml4Ni4qKQorLQlPUFRfQ0ZMQUdTPSIkQ0ZMQUdTIC02NCIKKy0JQUNfVFJZX0NGTEFHUyhbJE9QVF9DRkxBR1NdLFtDRkxBR1M9JE9QVF9DRkxBR1NdKTs7CistICAgIHNwYXJjLXN1bi1zb2xhcmlzKikKKy0JT1BUX0NGTEFHUz0iJENGTEFHUyAteENDIC1mYXN0IC14TzUiCistCUFDX1RSWV9DRkxBR1MoWyRPUFRfQ0ZMQUdTXSxbQ0ZMQUdTPSRPUFRfQ0ZMQUdTXSk7OworLSAgICBlc2FjCistZmkKKy0KKyBkbmwgQ2hlY2tzIGZvciBsaWJ0b29sIC0gdGhpcyBtdXN0IGJlIGRvbmUgYWZ0ZXIgd2Ugc2V0IGNmbGFncworIEFDX0RJU0FCTEVfU0hBUkVECisgQUNfTElCVE9PTF9XSU4zMl9ETEwKK0luZGV4OiBhNTJkZWMtMC43LjQvbGliYTUyL2NvbmZpZ3VyZS5pbmNsCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYTUyZGVjLTAuNy40Lm9yaWcvbGliYTUyL2NvbmZpZ3VyZS5pbmNsCTIwMTAtMDItMjMgMTQ6NTE6NDQuMDAwMDAwMDAwICswMDAwCisrKysgYTUyZGVjLTAuNy40L2xpYmE1Mi9jb25maWd1cmUuaW5jbAkyMDEwLTAyLTIzIDE0OjUxOjU5LjAwMDAwMDAwMCArMDAwMAorQEAgLTEsOSArMSw2IEBACisgQUNfU1VCU1QoW0xJQkE1Ml9DRkxBR1NdKQorIEFDX1NVQlNUKFtMSUJBNTJfTElCU10pCisgCistZG5sIGF2b2lkIC1mUElDIHdoZW4gcG9zc2libGUKKy1MSUJBNTJfQ0ZMQUdTPSIkTElCQTUyX0NGTEFHUyAtcHJlZmVyLW5vbi1waWMiCistCisgQUNfQVJHX0VOQUJMRShbZG91YmxlXSwKKyAgICAgWyAgLS1lbmFibGUtZG91YmxlICAgICAgICAgdXNlIGRvdWJsZS1wcmVjaXNpb24gc2FtcGxlc10pCisgaWYgdGVzdCB4IiRlbmFibGVfZG91YmxlIiA9IHgieWVzIjsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYTUyL2xpYmE1Ml8wLjcuNC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRiNjZiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmE1Mi9saWJhNTJfMC43LjQuYmIKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJBVFNDIEEvNTIgc3Vycm91bmQgc291bmQgc3RyZWFtIGRlY29kZXIiCitIT01FUEFHRSA9ICJodHRwOi8vbGliYTUyLnNvdXJjZWZvcmdlLm5ldC8iCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTA2MzZlNzNmZjAyMTVlOGQ2NzJkYzRjMzJjMzE3YmIzIFwKKwkJCWZpbGU6Ly9pbmNsdWRlL2E1Mi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTI7bWQ1PTgxMTUyY2ViMzU2MmJmMjBhNjBkMWI2MDE4MTc1ZGQxIgorU0VDVElPTiA9ICJsaWJzIgorUFIgPSAicjQiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmE1Mi5zb3VyY2Vmb3JnZS5uZXQvZmlsZXMvYTUyZGVjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9idWlsZGNsZWFudXAucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJjYWE5ZjViYzQ0MjMyZGM4YWVlYTc3M2ZlYTU2YmU4MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhMjFkNzI0YWIzYjM5MzMzMzAxOTQzNTM2ODdkZjgyYzQ3NWI1ZGZiOTk3NTEzZWVmNGMyNWRlNmM4NjVlYzMzIgorUyA9ICIke1dPUktESVJ9L2E1MmRlYy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIiAtLWVuYWJsZS1zaGFyZWQgIgorCitQQUNLQUdFUyA9KyAiYTUyZGVjIGE1MmRlYy1kb2MiCisKK0ZJTEVTX2E1MmRlYyA9ICIgJHtiaW5kaXJ9LyogIgorRklMRVNfYTUyZGVjLWRvYyA9ICIgJHttYW5kaXJ9L21hbjEvKiAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdi5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNmNGIxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2LmluYwpAQCAtMCwwICsxLDE0NiBAQAorU1VNTUFSWSA9ICJPcGVuIHNvdXJjZSBhdWRpbyBhbmQgdmlkZW8gcHJvY2Vzc2luZyB0b29scyBhbmQgbGlicmFpcmllcyIKK0RFU0NSSVBUSU9OID0gIkxpYmF2IGlzIGEgZnJpZW5kbHkgYW5kIGNvbW11bml0eS1kcml2ZW4gZWZmb3J0IHRvIHByb3ZpZGUgaXRzIHVzZXJzIFwKKyAgICAgICAgICAgICAgIHdpdGggYSBzZXQgb2YgcG9ydGFibGUsIGZ1bmN0aW9uYWwgYW5kIGhpZ2gtcGVyZm9ybWFuY2UgbGlicmFyaWVzIGZvciBcCisgICAgICAgICAgICAgICBkZWFsaW5nIHdpdGggbXVsdGltZWRpYSBmb3JtYXRzIG9mIGFsbCBzb3J0cy4gSXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBcCisgICAgICAgICAgICAgICBGRm1wZWcgY29kZWJhc2UsIGJ1dCBnb2VzIGl0cyBvd24gd2F5IHRoZXNlIGRheXMsIHByb3ZpZGluZyBpdHMgdXNlcnMgXAorICAgICAgICAgICAgICAgd2l0aCByZWxpYWJsZSByZWxlYXNlcyBhbmQgYSBjbGVhciB2aXNpb24gaG93IHRvIGdvIGZvcndhcmQuIgorSE9NRVBBR0UgPSAiaHR0cDovL2xpYmF2Lm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkdQTHYyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkdQTHYzO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2Mi4xO21kNT1iZDdhNDQzMzIwYWY4YzgxMmU0YzE4ZDFiNzlkZjAwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxHUEx2MzttZDU9ZTZhNjAwZmQ1ZTFkOWNiZGUyZDk4MzY4MDIzM2FkMDIiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYmF2Lm9yZy9yZWxlYXNlcy8ke0JQfS50YXIueHoiCisKKyMgUHJvdmlkZXMgZmZtcGVnIGNvbXBhdCwgc2VlIGh0dHA6Ly9saWJhdi5vcmcvYWJvdXQuaHRtbAorUFJPVklERVMgPSAiZmZtcGVnIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworREVQRU5EUyA9ICJhbHNhLWxpYiB6bGliIGxpYm9nZyB5YXNtLW5hdGl2ZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0IgPSAiJHtTfS9idWlsZC4ke0hPU1RfU1lTfS4ke1RBUkdFVF9TWVN9IgorCitGVUxMX09QVElNSVpBVElPTl9hcm12N2EgPSAiLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzQgLWZmYXN0LW1hdGgiCitCVUlMRF9PUFRJTUlaQVRJT04gPSAiJHtGVUxMX09QVElNSVpBVElPTn0iCisKK0VYVFJBX0ZGQ09ORl9hcm12N2EgPSAiLS1jcHU9Y29ydGV4LWE4IgorRVhUUkFfRkZDT05GID89ICIiCisKK1BBQ0tBR0VDT05GSUcgPz89ICJiemlwMiB4MjY0IHRoZW9yYSAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICd4MTEnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1tiemlwMl0gPSAiLS1lbmFibGUtYnpsaWIsLS1kaXNhYmxlLWJ6bGliLGJ6aXAyIgorUEFDS0FHRUNPTkZJR1tmYWFjXSA9ICItLWVuYWJsZS1saWJmYWFjLC0tZGlzYWJsZS1saWJmYWFjLGZhYWMiCitQQUNLQUdFQ09ORklHW2dzbV0gPSAiLS1lbmFibGUtbGliZ3NtLC0tZGlzYWJsZS1saWJnc20sbGliZ3NtIgorUEFDS0FHRUNPTkZJR1tqYWNrXSA9ICItLWVuYWJsZS1pbmRldj1qYWNrLC0tZGlzYWJsZS1pbmRldj1qYWNrLGphY2siCitQQUNLQUdFQ09ORklHW2xpYnZvcmJpc10gPSAiLS1lbmFibGUtbGlidm9yYmlzLC0tZGlzYWJsZS1saWJ2b3JiaXMsbGlidm9yYmlzIgorUEFDS0FHRUNPTkZJR1ttcDNsYW1lXSA9ICItLWVuYWJsZS1saWJtcDNsYW1lLC0tZGlzYWJsZS1saWJtcDNsYW1lLGxhbWUiCitQQUNLQUdFQ09ORklHW29wZW5zc2xdID0gIi0tZW5hYmxlLW9wZW5zc2wsLS1kaXNhYmxlLW9wZW5zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbc2Nocm9lZGluZ2VyXSA9ICItLWVuYWJsZS1saWJzY2hyb2VkaW5nZXIsLS1kaXNhYmxlLWxpYnNjaHJvZWRpbmdlcixzY2hyb2VkaW5nZXIiCitQQUNLQUdFQ09ORklHW3NwZWV4XSA9ICItLWVuYWJsZS1saWJzcGVleCwtLWRpc2FibGUtbGlic3BlZXgsc3BlZXgiCitQQUNLQUdFQ09ORklHW3RoZW9yYV0gPSAiLS1lbmFibGUtbGlidGhlb3JhLC0tZGlzYWJsZS1saWJ0aGVvcmEsbGlidGhlb3JhIgorUEFDS0FHRUNPTkZJR1t2YWFwaV0gPSAiLS1lbmFibGUtdmFhcGksLS1kaXNhYmxlLXZhYXBpLGxpYnZhIgorUEFDS0FHRUNPTkZJR1t2cHhdID0gIi0tZW5hYmxlLWxpYnZweCwtLWRpc2FibGUtbGlidnB4LGxpYnZweCIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLWVuYWJsZS14MTFncmFiLC0tZGlzYWJsZS14MTFncmFiLHZpcnR1YWwvbGlieDExIGxpYnhmaXhlcyBsaWJ4ZXh0IHhwcm90byB2aXJ0dWFsL2xpYnNkbCIKK1BBQ0tBR0VDT05GSUdbeDI2NF0gPSAiLS1lbmFibGUtbGlieDI2NCwtLWRpc2FibGUtbGlieDI2NCx4MjY0IgorCisjIENoZWNrIGNvZGVjcyB0aGF0IHJlcXVpcmUgLS1lbmFibGUtbm9uZnJlZQorVVNFX05PTkZSRUUgPSAiJHtAYmIudXRpbHMuY29udGFpbnNfYW55KCdQQUNLQUdFQ09ORklHJywgWyAnZmFhYycsICdvcGVuc3NsJyBdLCAneWVzJywgJycsIGQpfSIKKworRVhUUkFfT0VDT05GID0gIiBcCisgICAgLS1lbmFibGUtc2hhcmVkIFwKKyAgICAtLWVuYWJsZS1wdGhyZWFkcyBcCisgICAgLS1lbmFibGUtZ3BsIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnVVNFX05PTkZSRUUnLCAneWVzJywgJy0tZW5hYmxlLW5vbmZyZWUnLCAnJywgZCl9IFwKKyAgICAtLWVuYWJsZS1hdmZpbHRlciBcCisgICAgXAorICAgIC0tY3Jvc3MtcHJlZml4PSR7VEFSR0VUX1BSRUZJWH0gXAorICAgIC0tcHJlZml4PSR7cHJlZml4fSBcCisgICAgXAorICAgIC0tZW5hYmxlLWF2c2VydmVyIFwKKyAgICAtLWVuYWJsZS1hdnBsYXkgXAorICAgIC0tbGQ9IiR7Q0NMRH0iIFwKKyAgICAtLWFyY2g9JHtUQVJHRVRfQVJDSH0gXAorICAgIC0tdGFyZ2V0LW9zPSJsaW51eCIgXAorICAgIC0tZW5hYmxlLWNyb3NzLWNvbXBpbGUgXAorICAgIC0tZXh0cmEtY2ZsYWdzPSIke1RBUkdFVF9DRkxBR1N9ICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IiBcCisgICAgLS1leHRyYS1sZGZsYWdzPSIke1RBUkdFVF9MREZMQUdTfSIgXAorICAgIC0tc3lzcm9vdD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IiBcCisgICAgLS1lbmFibGUtaGFyZGNvZGVkLXRhYmxlcyBcCisgICAgJHtFWFRSQV9GRkNPTkZ9IFwKKyAgICAtLWxpYmRpcj0ke2xpYmRpcn0gXAorICAgIC0tc2hsaWJkaXI9JHtsaWJkaXJ9IFwKKyIKKworZG9fY29uZmlndXJlKCkgeworICAgICMgV2UgZG9uJ3QgaGF2ZSBUQVJHRVRfUFJFRklYLXBrZ2NvbmZpZworICAgIHNlZCAtaSAnL3BrZ19jb25maWdfZGVmYXVsdD0iJHtjcm9zc19wcmVmaXh9JHtwa2dfY29uZmlnX2RlZmF1bHR9Ii9kJyAke1N9L2NvbmZpZ3VyZQorICAgIG1rZGlyIC1wICR7Qn0KKyAgICBjZCAke0J9CisgICAgJHtTfS9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9CisgICAgc2VkIC1pIC1lIHM6T3M6TzQ6ZyAke0J9L2NvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2xpYmF2ZmlsdGVyLyouaCAke0R9JHtpbmNsdWRlZGlyfS9saWJhdmZpbHRlci8KK30KKworUEFDS0FHRVMgKz0gIiR7UE59LXZob29rLWRiZyAke1BOfS12aG9vayBmZm1wZWcteDI2NC1wcmVzZXRzIgorUEFDS0FHRVNfRFlOQU1JQyArPSAiXmxpYihhdihjb2RlY3xkZXZpY2V8ZmlsdGVyfGZvcm1hdHx1dGlsKXxzd3NjYWxlKS4qIgorCitSU1VHR0VTVFNfJHtQTn0gPSAibXBsYXllciIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfSIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2luY2x1ZGVkaXJ9LyR7UE59IgorCitGSUxFU18ke1BOfS12aG9vayA9ICIke2xpYmRpcn0vdmhvb2siCitGSUxFU18ke1BOfS12aG9vay1kYmcgKz0gIiR7bGliZGlyfS92aG9vay8uZGVidWciCisKK0ZJTEVTX2ZmbXBlZy14MjY0LXByZXNldHMgPSAiJHtkYXRhZGlyfS8qLmF2cHJlc2V0IgorCitMRUFEX1NPTkFNRSA9ICJsaWJhdmNvZGVjLnNvIgorCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSIKKworcHl0aG9uIHBvcHVsYXRlX3BhY2thZ2VzX3ByZXBlbmQoKSB7CisgICAgYXZfbGliZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfScpCisgICAgYXZfcGtnY29uZmlnID0gZC5leHBhbmQoJyR7bGliZGlyfS9wa2djb25maWcnKQorCisgICAgIyBSdW50aW1lIHBhY2thZ2UKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc29cLi4qJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMnLAorICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdsaWJhdiAlcyBsaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorCisgICAgIyBEZXZlbG9wbWVudCBwYWNrYWdlcyAoLWRldiwgLXN0YXRpY2RldikKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9saWJkaXIsICdebGliKC4qKVwuc28kJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfbGlua3M9VHJ1ZSkKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBhdl9wa2djb25maWcsICdebGliKC4qKVwucGMkJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZGVwZW5kcz0nJHtQTn0tZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kPVRydWUpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgYXZfbGliZGlyLCAnXmxpYiguKilcLmEkJywKKyAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcGF0dGVybj0nbGliJXMtc3RhdGljZGV2JywKKyAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj0nbGliYXYgJXMgZGV2ZWxvcG1lbnQgcGFja2FnZSAtIHN0YXRpYyBsaWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kZXBlbmRzPScke1BOfS1kZXYnLAorICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICBhbGxvd19saW5rcz1UcnVlKQorCisgICAgaWYgZC5nZXRWYXIoJ1RBUkdFVF9BUkNIJywgVHJ1ZSkgaW4gWyAnaTU4NicsICdpNjg2JyBdOgorICAgICAgICAjIGxpYmF2IGNhbid0IGJlIGJ1aWxkIHdpdGggLWZQSUMgZm9yIDMyLWJpdCB4ODYKKyAgICAgICAgcGtncyA9IGQuZ2V0VmFyKCdQQUNLQUdFUycsIFRydWUpLnNwbGl0KCkKKyAgICAgICAgZm9yIHBrZyBpbiBwa2dzOgorICAgICAgICAgICAgZC5hcHBlbmRWYXIoJ0lOU0FORV9TS0lQXyVzJyAlIHBrZywgJyB0ZXh0cmVsJykKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGliYXYvbGliYXYtZml4LUNWRS0yMDE0LTk2NzYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzMWNhYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2L2xpYmF2LWZpeC1DVkUtMjAxNC05Njc2LnBhdGNoCkBAIC0wLDAgKzEsOTggQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworQmFja3BvcnQgcGF0Y2ggdG8gZml4IENWRS0yMDE0LTk2NzYuCisKK2h0dHBzOi8vc2VjdXJpdHktdHJhY2tlci5kZWJpYW4ub3JnL3RyYWNrZXIvQ1ZFLTIwMTQtOTY3NgoraHR0cHM6Ly9naXQubGliYXYub3JnLz9wPWxpYmF2LmdpdDthPWNvbW1pdDtoPWIzZjA0NjU3MzY4YTMyYTk5MDM0MDYzOTVmODY1ZTIzMGIxZGUzNDgKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK0Zyb20gYjNmMDQ2NTczNjhhMzJhOTkwMzQwNjM5NWY4NjVlMjMwYjFkZTM0OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEx1Y2EgQmFyYmF0byA8bHVfemVyb0BnZW50b28ub3JnPgorRGF0ZTogTW9uLCA1IEphbiAyMDE1IDEwOjQwOjQxICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIHNlZ21lbnQ6IEZpeCB0aGUgZmFpbHVyZSBwYXRocworCitBIGZhaWx1cmUgaW4gc2VnbWVudF9lbmQoKSBvciBzZWdtZW50X3N0YXJ0KCkgd291bGQgbGVhZCB0byBmcmVlaW5nCithIGRhbmdsaW5nIHBvaW50ZXIgYW5kIGluIGdlbmVyYWwgZnVydGhlciBjYWxscyB0byBzZWdfd3JpdGVfcGFja2V0KCkKK29yIHRvIHNlZ193cml0ZV90cmFpbGVyKCkgd291bGQgaGF2ZSB0aGUgc2FtZSBmYXVsdHkgYmVoYXZpb3VyLgorCitDQzogbGliYXYtc3RhYmxlQGxpYmF2Lm9yZworUmVwb3J0ZWQtQnk6IGx1b2RhbG9uZ2RlQGdtYWlsLmNvbQorLS0tCisgbGliYXZmb3JtYXQvc2VnbWVudC5jIHwgMzIgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9zZWdtZW50LmMgYi9saWJhdmZvcm1hdC9zZWdtZW50LmMKK2luZGV4IDUyZGE2YjkuLmJjZmQxZjkgMTAwNjQ0CistLS0gYS9saWJhdmZvcm1hdC9zZWdtZW50LmMKKysrKyBiL2xpYmF2Zm9ybWF0L3NlZ21lbnQuYworQEAgLTE4NCw2ICsxODQsMTMgQEAgc3RhdGljIHZvaWQgY2xvc2VfbnVsbF9jdHgoQVZJT0NvbnRleHQgKnBiKQorICAgICBhdl9mcmVlKHBiKTsKKyB9CisgCisrc3RhdGljIHZvaWQgc2VnX2ZyZWVfY29udGV4dChTZWdtZW50Q29udGV4dCAqc2VnKQorK3sKKysgICAgYXZpb19jbG9zZXAoJnNlZy0+cGIpOworKyAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQoc2VnLT5hdmYpOworKyAgICBzZWctPmF2ZiA9IE5VTEw7CisrfQorKworIHN0YXRpYyBpbnQgc2VnX3dyaXRlX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCisgeworICAgICBTZWdtZW50Q29udGV4dCAqc2VnID0gcy0+cHJpdl9kYXRhOworQEAgLTI2NSwxMiArMjcyLDkgQEAgc3RhdGljIGludCBzZWdfd3JpdGVfaGVhZGVyKEFWRm9ybWF0Q29udGV4dCAqcykKKyAgICAgfQorIAorIGZhaWw6CistICAgIGlmIChyZXQpIHsKKy0gICAgICAgIGlmIChzZWctPmxpc3QpCistICAgICAgICAgICAgYXZpb19jbG9zZShzZWctPnBiKTsKKy0gICAgICAgIGlmIChzZWctPmF2ZikKKy0gICAgICAgICAgICBhdmZvcm1hdF9mcmVlX2NvbnRleHQoc2VnLT5hdmYpOworLSAgICB9CisrICAgIGlmIChyZXQgPCAwKQorKyAgICAgICAgc2VnX2ZyZWVfY29udGV4dChzZWcpOworKworICAgICByZXR1cm4gcmV0OworIH0KKyAKK0BAIC0yODIsNiArMjg2LDkgQEAgc3RhdGljIGludCBzZWdfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKKyAgICAgaW50NjRfdCBlbmRfcHRzID0gc2VnLT5yZWNvcmRpbmdfdGltZSAqIHNlZy0+bnVtYmVyOworICAgICBpbnQgcmV0LCBjYW5fc3BsaXQgPSAxOworIAorKyAgICBpZiAoIW9jKQorKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKysKKyAgICAgaWYgKHNlZy0+aGFzX3ZpZGVvKSB7CisgICAgICAgICBjYW5fc3BsaXQgPSBzdC0+Y29kZWMtPmNvZGVjX3R5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPICYmCisgICAgICAgICAgICAgICAgICAgICBwa3QtPmZsYWdzICYgQVZfUEtUX0ZMQUdfS0VZOworQEAgLTMyMiwxMSArMzI5LDggQEAgc3RhdGljIGludCBzZWdfd3JpdGVfcGFja2V0KEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCkKKyAgICAgcmV0ID0gZmZfd3JpdGVfY2hhaW5lZChvYywgcGt0LT5zdHJlYW1faW5kZXgsIHBrdCwgcyk7CisgCisgZmFpbDoKKy0gICAgaWYgKHJldCA8IDApIHsKKy0gICAgICAgIGlmIChzZWctPmxpc3QpCistICAgICAgICAgICAgYXZpb19jbG9zZShzZWctPnBiKTsKKy0gICAgICAgIGF2Zm9ybWF0X2ZyZWVfY29udGV4dChvYyk7CistICAgIH0KKysgICAgaWYgKHJldCA8IDApCisrICAgICAgICBzZWdfZnJlZV9jb250ZXh0KHNlZyk7CisgCisgICAgIHJldHVybiByZXQ7CisgfQorQEAgLTMzNSw3ICszMzksMTEgQEAgc3RhdGljIGludCBzZWdfd3JpdGVfdHJhaWxlcihzdHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzKQorIHsKKyAgICAgU2VnbWVudENvbnRleHQgKnNlZyA9IHMtPnByaXZfZGF0YTsKKyAgICAgQVZGb3JtYXRDb250ZXh0ICpvYyA9IHNlZy0+YXZmOworLSAgICBpbnQgcmV0OworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgaWYgKCFvYykKKysgICAgICAgIGdvdG8gZmFpbDsKKysKKyAgICAgaWYgKCFzZWctPndyaXRlX2hlYWRlcl90cmFpbGVyKSB7CisgICAgICAgICBpZiAoKHJldCA9IHNlZ21lbnRfZW5kKG9jLCAwKSkgPCAwKQorICAgICAgICAgICAgIGdvdG8gZmFpbDsKKy0tIAorMi40LjEuMzE0Lmc5NTMyZWFkCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYmF2XzkuMTguYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMGE2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJhdi9saWJhdl85LjE4LmJiCkBAIC0wLDAgKzEsNiBAQAorcmVxdWlyZSBsaWJhdi5pbmMKKworU1JDX1VSSVttZDVzdW1dID0gIjc1ZTgzODA2OGE3NWZiODhlMWI0ZWEwNTQ2YmMxNmYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjA4NzVlODM1ZGE2ODNlZWYxYTdiYWM3NWUxODg0NjM0MTk0MTQ5ZDc0NzlkMTUzOGJhOWZiZTE2MTRkMDY2ZDciCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9saWJhdi1maXgtQ1ZFLTIwMTQtOTY3Ni5wYXRjaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmF2L2xpYnBvc3Rwcm9jX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFhNTBmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliYXYvbGlicG9zdHByb2NfZ2l0LmJiCkBAIC0wLDAgKzEsNDcgQEAKK1NVTU1BUlkgPSAiRkZtcGVnIGRlcml2ZWQgcG9zdHByb2Nlc3NpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQudmlkZW9sYW4ub3JnLz9wPWxpYnBvc3Rwcm9jLmdpdDthPXN1bW1hcnkiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYmF2IgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKKworIyBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbGliYXYgd2hpY2ggaGFzIGNvbW1lcmNpYWwgZmxhZworTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorCitQViA9ICI1Mi4zLjArZ2l0JHtTUkNQVn0iCisKK1NSQ1JFViA9ICI4MTFkYjNiOTU3ZGZkZTI0YWVmMmQwZjgyZTI5N2U1YmY1NTJkODczIgorU1JDX1VSSSA9ICJnaXQ6Ly9naXRodWIuY29tL2x1LXplcm8vcG9zdHByb2M7cHJvdG9jb2w9aHR0cHMiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitGVUxMX09QVElNSVpBVElPTl9hcm12N2EgPSAiLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucyAtZm9taXQtZnJhbWUtcG9pbnRlciAtTzQgLWZmYXN0LW1hdGgiCitCVUlMRF9PUFRJTUlaQVRJT04gPSAiJHtGVUxMX09QVElNSVpBVElPTn0iCisKK0VYVFJBX0ZGQ09ORl9hcm12N2EgPSAiLS1jcHU9Y29ydGV4LWE4IgorRVhUUkFfRkZDT05GID89ICIiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZW5hYmxlLXNoYXJlZCBcCisgICAgLS1lbmFibGUtcHRocmVhZHMgXAorICAgIC0tZW5hYmxlLWdwbCBcCisgICAgLS1lbmFibGUtcG9zdHByb2MgXAorICAgIFwKKyAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAtLXByZWZpeD0ke3ByZWZpeH0gXAorICAgIFwKKyAgICAtLWFyY2g9JHtUQVJHRVRfQVJDSH0gXAorICAgIC0tdGFyZ2V0LW9zPSJsaW51eCIgXAorICAgIC0tZW5hYmxlLWNyb3NzLWNvbXBpbGUgXAorICAgIC0tZXh0cmEtY2ZsYWdzPSIke1RBUkdFVF9DRkxBR1N9ICR7SE9TVF9DQ19BUkNIfSR7VE9PTENIQUlOX09QVElPTlN9IiBcCisgICAgLS1leHRyYS1sZGZsYWdzPSIke1RBUkdFVF9MREZMQUdTfSIgXAorICAgIC0tc3lzcm9vdD0iJHtTVEFHSU5HX0RJUl9UQVJHRVR9IiBcCisgICAgLS1zaGxpYmRpcj0iJHtsaWJkaXJ9IiBcCisgICAgJHtFWFRSQV9GRkNPTkZ9IFwKKyIKKworZG9fY29uZmlndXJlKCkgeworICAgICR7U30vY29uZmlndXJlICR7RVhUUkFfT0VDT05GfQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnL2FkZHBrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQ0MGMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9hZGRwa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSw0MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbGliaWQzdGFnLTAuMTUuMWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpZDN0YWctMC4xNS4xYi5vcmlnL01ha2VmaWxlLmFtCTIwMDktMDctMjkgMDk6Mjk6MjAuMDAwMDAwMDAwICswMTAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvTWFrZWZpbGUuYW0JMjAwOS0wNy0yOSAwOToyOTo0Ny4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNyw2ICsyNyw5IEBACisgbGliX0xUTElCUkFSSUVTID0JbGliaWQzdGFnLmxhCisgaW5jbHVkZV9IRUFERVJTID0JaWQzdGFnLmgKKyAKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPSBpZDN0YWcucGMKKysKKyAjIyBGcm9tIHRoZSBsaWJ0b29sIGRvY3VtZW50YXRpb24gb24gbGlicmFyeSB2ZXJzaW9uaW5nOgorICMjCisgIyMgQ1VSUkVOVAorSW5kZXg6IGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmlkM3RhZy0wLjE1LjFiLm9yaWcvY29uZmlndXJlLmFjCTIwMDktMDctMjkgMDk6Mjc6MTUuMDAwMDAwMDAwICswMTAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDktMDctMjkgMDk6Mjc6NDUuMDAwMDAwMDAwICswMTAwCitAQCAtMjAxLDUgKzIwMSw1IEBACisgZG5sIEFDX1NVQlNUKExUTElCT0JKUykKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIG1zdmMrKy9NYWtlZmlsZSAgXAorLQlsaWJpZDN0YWcubGlzdF0pCisrCWxpYmlkM3RhZy5saXN0IGlkM3RhZy5wY10pCisgQUNfT1VUUFVUCitJbmRleDogbGliaWQzdGFnLTAuMTUuMWIvaWQzdGFnLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAwCisrKysgbGliaWQzdGFnLTAuMTUuMWIvaWQzdGFnLnBjLmluCTIwMDktMDctMjkgMDk6Mjk6MTAuMDAwMDAwMDAwICswMTAwCitAQCAtMCwwICsxLDExIEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrCisrTmFtZTogaWQzdGFnCisrRGVzY3JpcHRpb246IElEMyB0YWcgcmVhZGluZyBsaWJyYXJ5CisrUmVxdWlyZXM6CisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxpZDN0YWcgLWx6CisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZy9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg0NWZiMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYmlkM3RhZy9saWJpZDN0YWcvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9MzU5OTI4MCZncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgbGliaWQzdGFnLTAuMTUuMWIvY29uZmlndXJlLmFjIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYworLS0tIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA0LTAxLTI0IDAxOjIyOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmlkM3RhZy0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDEzLTAxLTAzIDA2OjQxOjAyLjczNDgzNTAxNCArMDIwMAorQEAgLTI4LDcgKzI4LDcgQEAKKworLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKKworLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorCisgZG5sIFN5c3RlbSB0eXBlLgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGliaWQzdGFnL2xpYmlkM3RhZ18wLjE1LjFiLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YThhNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJpZDN0YWcvbGliaWQzdGFnXzAuMTUuMWIuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBpbnRlcmFjdGluZyB3aXRoIElEMyB0YWdzIGluIE1QMyBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbWFkLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9ncm91cF9pZD0xMjM0OSZhdGlkPTExMjM0OSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorCQkJZmlsZTovL0NPUFlSSUdIVDttZDU9NWU2Mjc5ZWZiODdjMjZjNmU1ZTdhNjgzMTdhNmE4N2EgXAorCQkJZmlsZTovL3ZlcnNpb24uaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTg7bWQ1PTg2YWM2OGI2N2YwNTRiN2FmZGU5ZTE0OWJiYzNmZTYzIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJ6bGliIGdwZXJmLW5hdGl2ZSIKK1BSID0gInI3IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5tYXJzLm9yZy9wdWIvbXBlZy9saWJpZDN0YWctJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FkZHBrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTU4MDhhZDk5N2JhMzJjNDk4ODAzODIyMDc4NzQ4YzMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjNkYTRmNmU3OTk3Mjc4ZjhhM2ZlZjRjNmEzNzJkMzQyZjcwNTA1MWQxZWViNmE0NmE4NmIwMzYxMGUyNjE1MSIKKworUyA9ICIke1dPUktESVJ9L2xpYmlkM3RhZy0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2FkZC1wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvYWRkLXBrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDcwIEBACitIZXJlIGlzIGEgcGF0Y2ggZm9yIGFkZGluZyBwa2ctY29uZmlnIHN1cHBvcnQgdG8gbGlibWFkLgorSXQgd291bGQgbWFrZSBsaWZlIGEgYml0IGVhc2llciBmb3IgZGlzdHJvIG1haW50YWluZXJzIGlmIHRoaXMgd2FzIGFwcGxpZWQuCitJbiBjYXNlIHlvdSBkaWRuJ3Qga25vdywgcGtnLWNvbmZpZyBpcyBhIHRvb2wgZm9yIHByb3ZpZGluZyBMREZMQUdTIGFuZAorQ0ZMQUdTIGZvciBwYWNrYWdlcyB1c2luZyBzaGFyZWQgbGlicmFyaWVzLiBJdCdzIG9uIGZyZWVkZXNrdG9wLm9yZy4KK0RlYmlhbiBoYXMgYWxyZWFkeSBiZWVuIGRpc3RyaWJ1dGluZyB0aGUgcGtnLWNvbmZpZyBmaWxlIG1hZC5wYyB3aXRoCitsaWJtYWQgZm9yIHNvbWUgdGltZSwgYW5kIHBlb3BsZSBkZXZlbG9waW5nIG9uIGRlYmlhbiAobm90YWJseSB4bW1zMiAKK2RldmVsb3BlcnMpIGhhdmUgc3RhcnRlZCByZWx5aW5nIG9uIHRoaXMgc3VwcG9ydCBiZWluZyBwcmVzZW50LCBjYXVzaW5nCitzb21lIGNvbmZ1c2lvbiBmb3IgcGVvcGxlIGluc3RhbGxpbmcgZnJvbSBzb3VyY2UgYW5kIG9uIHNvbWUgQlNEcyB3aGljaAorZG8gbm90IHByb3ZpZGUgbWFkLnBjIChnb29nbGU6IHBrZ2NvbmZpZyBsaWJtYWQpLgorCitFTUgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLWgzMWd6WkV0TkxUcU9qbEYKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JnF1b3Q7bGlibWFkLTAuMTUuMWItcGtnY29uZmlnLnBhdGNoJnF1b3Q7CisKK2RpZmYgLU5hdXIgbGlibWFkLTAuMTUuMWIub2xkL2NvbmZpZ3VyZS5hYyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJtYWQtMC4xNS4xYi5vbGQvY29uZmlndXJlLmFjCTIwMDQtMDEtMjMgMTA6NDE6MzIuMDAwMDAwMDAwICswMTAwCisrKysgbGlibWFkLTAuMTUuMWIvY29uZmlndXJlLmFjCTIwMDQtMDgtMDcgMDI6MjU6MjQuNjMzNDYyMTY4ICswMjAwCitAQCAtNDI5LDUgKzQyOSw1IEBACisgZG5sIEFDX1NVQlNUKExUTElCT0JKUykKKyAKKyBBQ19DT05GSUdfRklMRVMoW01ha2VmaWxlIG1zdmMrKy9NYWtlZmlsZSAgXAorLQlsaWJtYWQubGlzdF0pCisrCWxpYm1hZC5saXN0IG1hZC5wY10pCisgQUNfT1VUUFVUCitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9tYWQucGMuaW4gbGlibWFkLTAuMTUuMWIvbWFkLnBjLmluCistLS0gbGlibWFkLTAuMTUuMWIub2xkL21hZC5wYy5pbgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL21hZC5wYy5pbgkyMDA0LTA4LTA3IDAyOjA0OjU5LjYxNzY5Mjg3MiArMDIwMAorQEAgLTAsMCArMSwxNCBAQAorKyMgbGlibWFkIHBrZy1jb25maWcgc291cmNlIGZpbGUKKysKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKytOYW1lOiBtYWQKKytEZXNjcmlwdGlvbjogTVBFRyBBdWRpbyBEZWNvZGVyCisrVmVyc2lvbjogQFZFUlNJT05ACisrUmVxdWlyZXM6CisrQ29uZmxpY3RzOgorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sbWFkIC1sbQorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitkaWZmIC1OYXVyIGxpYm1hZC0wLjE1LjFiLm9sZC9NYWtlZmlsZS5hbSBsaWJtYWQtMC4xNS4xYi9NYWtlZmlsZS5hbQorLS0tIGxpYm1hZC0wLjE1LjFiLm9sZC9NYWtlZmlsZS5hbQkyMDA0LTAyLTE3IDAzOjAyOjAzLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL01ha2VmaWxlLmFtCTIwMDQtMDgtMDcgMDI6MDM6MTkuODU5ODU4MzY4ICswMjAwCitAQCAtMjQsNiArMjQsOSBAQAorIFNVQkRJUlMgPQkJCisgRElTVF9TVUJESVJTID0JCW1zdmMrKworIAorK3BrZ2NvbmZpZ2RpciA9CQkkKGxpYmRpcikvcGtnY29uZmlnCisrcGtnY29uZmlnX0RBVEEgPQltYWQucGMKKysKKyBsaWJfTFRMSUJSQVJJRVMgPQlsaWJtYWQubGEKKyBpbmNsdWRlX0hFQURFUlMgPQltYWQuaAorIAorQEAgLTM0LDcgKzM3LDggQEAKKyBtaW5pbWFkX0xEQUREID0JCWxpYm1hZC5sYQorIAorIEVYVFJBX0RJU1QgPQkJbWFkLmguc2VkICBcCistCQkJQ0hBTkdFUyBDT1BZUklHSFQgQ1JFRElUUyBSRUFETUUgVE9ETyBWRVJTSU9OCisrCQkJQ0hBTkdFUyBDT1BZUklHSFQgQ1JFRElUUyBSRUFETUUgVE9ETyBWRVJTSU9OIFwKKysJCQltYWQucGMuaW4KKyAKKyBleHBvcnRlZF9oZWFkZXJzID0JdmVyc2lvbi5oIGZpeGVkLmggYml0LmggdGltZXIuaCBzdHJlYW0uaCBmcmFtZS5oICBcCisgCQkJc3ludGguaCBkZWNvZGVyLmgKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9hdXRvbWFrZS1mb3JlaWduLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNTQ0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL2F1dG9tYWtlLWZvcmVpZ24ucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorUGFzcyBmb3JlaWduIHRvIEFNX0lOSVRfQVVUT01BS0Ugc28gaXQgZG9lc24ndCBlbmZvcmNlIEdOVSBzdHJpY3RuZXNzLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKK2luZGV4IGU2MDJmZDMuLmUwNzViODYgMTAwNjQ0CistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI5ICsyOSBAQCBBQ19DT05GSUdfU1JDRElSKFtkZWNvZGVyLmhdKQorLUFNX0lOSVRfQVVUT01BS0UKKytBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9maXhfZm9yX21pcHNfd2l0aF9nY2MtNC41LjAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjN2FhMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoCkBAIC0wLDAgKzEsMzMgQEAKK2djYyA0LjQgZGlkIHRoaXM6IFRoZSBNSVBTIHBvcnQgbm8gbG9uZ2VyIHJlY29nbml6ZXMgdGhlIGggIGFzbSBjb25zdHJhaW50LiBJdCB3YXMgbmVjZXNzYXJ5IHRvIHJlbW92ZSB0aGlzIGNvbnN0cmFpbnQgaW4gb3JkZXIgdG8gYXZvaWQgZ2VuZXJhdGluZyB1bnByZWRpY3RhYmxlIGNvZGUgc2VxdWVuY2VzLiAKKworc28gdGhlIGxpYm1hZCBidWlsZCB3aXRoIGdjYy00LjUuMCB3YXMgZmFpbGluZy4KKworRm91bmQgYSBzb2x1dGlvbiBoZXJlOgorCitodHRwOi8vdXMuZ2VuZXJhdGlvbi1udC5jb20vYW5zd2VyL2J1Zy01Njg0MTgtbGlibWFkMC1kZXYtbXBnMzIxLWNvbXBpbGF0aW9uLWVycm9ycy1taXBzLW1pcHNlbC1hcmNoaXRlY3R1cmVzLWhlbHAtMTY5MDMzNDUxLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKzIwMTAvMDcvMjkKK05pdGluIEEgS2FtYmxlIDxuaXRpbi5hLmthbWJsZUBpbnRlbC5jb20+CisKK0luZGV4OiBsaWJtYWQtMC4xNS4xYi9maXhlZC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibWFkLTAuMTUuMWIub3JpZy9maXhlZC5oCisrKysgbGlibWFkLTAuMTUuMWIvZml4ZWQuaAorQEAgLTI5Nyw2ICsyOTcsMTUgQEAgbWFkX2ZpeGVkX3QgbWFkX2ZfbXVsX2lubGluZShtYWRfZml4ZWRfdAorIAorIC8qIC0tLSBNSVBTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAKKysjIGVsaWYgZGVmaW5lZChGUE1fTUlQUykgJiYgKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KSkKKysgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTY0X2RpX3QgX19hdHRyaWJ1dGVfXyAoKG1vZGUgKERJKSkpOworKyMgICBkZWZpbmUgTUFEX0ZfTUxYKGhpLCBsbywgeCwgeSkgXAorKyAgICBkbyB7IFwKKysgICAgICAgIHU2NF9kaV90IF9fbGwgPSAodTY0X2RpX3QpICh4KSAqICh5KTsgXAorKyAgICAgICAgaGkgPSBfX2xsID4+IDMyOyBcCisrICAgICAgICBsbyA9IF9fbGw7IFwKKysgICAgIH0gd2hpbGUgKDApCisrCisgIyBlbGlmIGRlZmluZWQoRlBNX01JUFMpCisgCisgLyoKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZC9uby1mb3JjZS1tZW0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVlNmQyMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvbm8tZm9yY2UtbWVtLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK1RoaXMgb3B0aW9uIG5vIGxvbmdlciBleGlzdHMgaW4gZ2NjIDMuNC4xCisKK1JQIC0gMTgvMDcvMjAwOAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJtYWQtMC4xNS4xYi5vcmlnL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE4IDE1OjQ1OjMwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYwkyMDA4LTA3LTE4IDE1OjQ1OjM3LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0MCw3ICsxNDAsNiBAQAorICAgICBjYXNlICIkb3B0aW1pemUiIGluCisgCS1PfCItTyAiKikKKyAJICAgIG9wdGltaXplPSItTyIKKy0JICAgIG9wdGltaXplPSIkb3B0aW1pemUgLWZmb3JjZS1tZW0iCisgCSAgICBvcHRpbWl6ZT0iJG9wdGltaXplIC1mZm9yY2UtYWRkciIKKyAJICAgIDogI3ggb3B0aW1pemU9IiRvcHRpbWl6ZSAtZmlubGluZS1mdW5jdGlvbnMiCisgCSAgICA6ICMtIG9wdGltaXplPSIkb3B0aW1pemUgLWZzdHJlbmd0aC1yZWR1Y2UiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWQvb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODdkMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJtYWQvbGlibWFkL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDldCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYm1hZC0wLjE1LjFiL2NvbmZpZ3VyZS5hYyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMKKy0tLSBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAwNC0wMS0yMyAxMTo0MTozMi4wMDAwMDAwMDAgKzAyMDAKKysrKyBsaWJtYWQtMC4xNS4xYi9jb25maWd1cmUuYWMJMjAxMy0wMS0wMyAwODoyODoyMy43MTg2OTM2OTcgKzAyMDAKK0BAIC0yOCw3ICsyOCw3IEBACisKKyBBTV9JTklUX0FVVE9NQUtFCisKKy1BTV9DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisrQUNfQ09ORklHX0hFQURFUlMoW2NvbmZpZy5oXSkKKworIGRubCBTeXN0ZW0gdHlwZS4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm1hZC9saWJtYWRfMC4xNS4xYi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA4YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlibWFkL2xpYm1hZF8wLjE1LjFiLmJiCkBAIC0wLDAgKzEsMzggQEAKK1NVTU1BUlkgPSAiTVBFRyBBdWRpbyBEZWNvZGVyIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL21hZC8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/Z3JvdXBfaWQ9MTIzNDkmYXRpZD0xMTIzNDkiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ0VOU0VfRkxBR1MgPSAiY29tbWVyY2lhbCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJCWZpbGU6Ly9DT1BZUklHSFQ7bWQ1PThlNTVlYjE0ODk0ZTc4MmI4NDQ4OGQ1YTIzOWJjMjNkIFwKKwkJCWZpbGU6Ly92ZXJzaW9uLmg7YmVnaW5saW5lPTE7ZW5kbGluZT04O21kNT1hYTA3MzExZGQzOTI4OGQ0MzQ5ZjI4ZTFkZTUxNjQ1NCIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAibGliaWQzdGFnIgorUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1hcnMub3JnL3B1Yi9tcGVnL2xpYm1hZC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbm8tZm9yY2UtbWVtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4X2Zvcl9taXBzX3dpdGhfZ2NjLTQuNS4wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9hdXRvbWFrZS1mb3JlaWduLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjFiZTU0M2JjMzBjNTZmYjZiZWExZDdiZjZhNjRlNjZjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiZmFjM2VkNmJmYmMyODIzZDM3NzVlYmI5MzEwODczNzFlMTQyYmIwZTliYjFiZWU1MWE3NmE2ZTAwNzg2OTAiIAorCitTID0gIiR7V09SS0RJUn0vbGlibWFkLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIi1lbmFibGUtc3BlZWQgLS1lbmFibGUtc2hhcmVkIgorIyBUaGUgQVNPJ3MgZG9uJ3QgdGFrZSBhbnkgYWNjb3VudCBvZiB0aHVtYi4uLgorRVhUUkFfT0VDT05GX2FwcGVuZF90aHVtYiA9ICIgLS1kaXNhYmxlLWFzbyAtLWVuYWJsZS1mcG09ZGVmYXVsdCIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiAtLWVuYWJsZS1mcG09YXJtIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisjCWRhbW4gcGlja3kgYXV0b21ha2UuLi4KKwl0b3VjaCBORVdTIEFVVEhPUlMgQ2hhbmdlTG9nCit9CisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib2dnL2xpYm9nZ18xLjMuMi5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE0MmUwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9nZy9saWJvZ2dfMS4zLjIuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICJPZ2cgYml0c3RyZWFtIGFuZCBmcmFtaW5nIGxpYmFyeSIKK0RFU0NSSVBUSU9OID0gImxpYm9nZyBpcyB0aGUgYml0c3RyZWFtIGFuZCBmcmFtaW5nIGxpYnJhcnkgXAorZm9yIHRoZSBPZ2cgcHJvamVjdC4gSXQgcHJvdmlkZXMgZnVuY3Rpb25zIHdoaWNoIGFyZSBcCituZWNlc3NhcnkgdG8gY29kZWMgbGlicmFyaWVzIGxpa2UgbGlidm9yYmlzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly94aXBoLm9yZy8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vdHJhYy54aXBoLm9yZy9uZXd0aWNrZXQiCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWRiMWI3YTY2OGIyYTZmNDdiMmFmODhmYjAwOGFkNTU1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvb2dnL29nZy5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MTE7bWQ1PWVkYTgxMjg1NmYxM2EzYjEzMjZlYjhmMDIwY2MzYjBiIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvb2dnLyR7QlB9LnRhci54eiIKKworU1JDX1VSSVttZDVzdW1dID0gIjVjM2EzNDMwOWQ4Yjk4NjQwODI3ZTVkMDk5MWE0MDE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNmNjg3Y2NkZDVhYzhiNTJkNzYzMjhmYmJmZWJjNzBjNDU5YTQwZWE4OTFkYmYzZGNjYjc0YTIxMDgyNmU3OWIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvY29uZmlndXJlLWZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2ZTgwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2NvbmZpZ3VyZS1maXgucGF0Y2gKQEAgLTAsMCArMSw1OCBAQAorVG8gZW5hYmxlIC0tZGlzYWJsZS1XZXJyb3IgZm9yIGxpYm9teGlsIHRvIGF2b2lkIHNvbWUgY29tcGlsZXJzIHdoaWNoIGNoZWNrIGNvZGUgc3RyaWN0bHkuCisKK0ZvciBleGFtcGxlLCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGVycm9ycyBoYXBwZW5lZCB0byBzb21lIGNvbXBpbGVyczoKKworMSkgT01YX0lOREVYVFlQRSBpbiBpbmNsdWRlL09NWF9JbmRleC5oIElTIE5PVCBPTVhfSU5ERVhWRU5ET1JUWVBFIGluIHNyYy9iYXNlL29teF9iYXNlX2NvbXBvbmVudC5oCit8IGk1ODYtcG9reS1saW51eC1saWJ0b29sOiBjb21waWxlOiAgaTU4Ni1wb2t5LWxpbnV4LWdjYyAtbTMyIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS95b2N0by1idWlsZDUvcG9reS9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4NiAtREhBVkVfQ2xpbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtV2Vycm9yIC1EQ09ORklHX0RFQlVHX0xFVkVMPTAgLWMgT01YQ29tcG9uZW50Uk1FeHQuYyAgLWZQSUMgLURQSUMgLW8gLmxpYnMvbGlib214YmFzZV9sYS1PTVhDb21wb25lbnRSTUV4dC5vCit8IG9teF9iYXNlX2NvbXBvbmVudC5jOiBJbiBmdW5jdGlvbiAnb214X2Jhc2VfY29tcG9uZW50X0dldFBhcmFtZXRlcic6Cit8IG9teF9iYXNlX2NvbXBvbmVudC5jOjk5MTozOiBlcnJvcjogY2FzZSB2YWx1ZSAnMjEzMDcwNjQzNScgbm90IGluIGVudW1lcmF0ZWQgdHlwZSAnT01YX0lOREVYVFlQRScgWy1XZXJyb3I9c3dpdGNoXQorfCBvbXhfYmFzZV9jb21wb25lbnQuYzo5MTg6MzogZXJyb3I6IGNhc2UgdmFsdWUgJzIxMzA3MDY0MzYnIG5vdCBpbiBlbnVtZXJhdGVkIHR5cGUgJ09NWF9JTkRFWFRZUEUnIFstV2Vycm9yPXN3aXRjaF0KKworMikKK3wgaTU4Ni1wb2t5LWxpbnV4LWdjYyAgLW0zMiAgIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vaG9tZS95b2N0by1idWlsZDUvcG9reS9idWlsZC90bXAvc3lzcm9vdHMvcWVtdXg4NiAtREhBVkVfQ09ORklHX0ggLUkuIC1JLi4gICAgLURPTVhJTENPTVBPbWluYXRlLXVudXNlZC1kZWJ1Zy10eXBlcyAtV2FsbCAtV2Vycm9yIC1EQ09ORklHX0RFQlVHX0xFVkVMPTAgLWMgLW8gb214cmVnaXN0ZXJfYmVsbGFnaW8tb214cmVnaXN0ZXIubyBgdGVzdCAtZiAnb214cmVnaXN0ZXIuYycgfHwgZWNobyAnLi8nYG8KK3wgb214cmVnaXN0ZXIuYzogSW4gZnVuY3Rpb24gJ2J1aWxkQ29tcG9uZW50c0xpc3QnOgorfCBvbXhyZWdpc3Rlci5jOjE3NTo3OiBlcnJvcjogdmFyaWFibGUgJ2Vycicgc2V0IGJ1dCBub3QgdXNlZCBbLVdlcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZV0KK3wgY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciA4MmQ3NDJkM2VhOTAgY29uZmlndXJlLmFjCistLS0gYS9jb25maWd1cmUuYWMJVHVlIERlYyAyNyAxNTozMDozNSAyMDExICswODAwCisrKysgYi9jb25maWd1cmUuYWMJVHVlIERlYyAyNyAxNjoyNjowMyAyMDExICswODAwCitAQCAtNSw3ICs1LDcgQEAKKyBBQ19QUkVSRVEoWzIuNTldKQorIAorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaF0pCistQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdlcnJvciIKKytDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCIKKyAKKyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMgU2V0IHRoZSBzaGFyZWQgdmVyc2lvbmluZyBpbmZvLCBhY2NvcmRpbmcgdG8gc2VjdGlvbiA2LjMgb2YgdGhlIGxpYnRvb2wgaW5mbyAjCitAQCAtMTIyLDYgKzEyMiwxNCBAQAorICAgICBbd2l0aF9hbmRyb2lkPSRlbmFibGV2YWxdLAorICAgICBbd2l0aF9hbmRyb2lkPW5vXSkKKyAKKytBQ19BUkdfRU5BQkxFKAorKyAgICBbV2Vycm9yXSwKKysgICAgW0FDX0hFTFBfU1RSSU5HKAorKyAgICAgICAgWy0tZGlzYWJsZS1XZXJyb3JdLAorKyAgICAgICAgW3doZXRoZXIgdG8gZGlhYmxlIHRyZWF0aW5nIGdjYyB3YXJuaW5ncyBhcyBlcnJvcnNdKV0sCisrICAgIFt3aXRoX1dlcnJvcj0kZW5hYmxldmFsXSwKKysgICAgW3dpdGhfV2Vycm9yPXllc10pCisrCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIENoZWNrIGZvciBwcm9ncmFtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitAQCAtMTkzLDYgKzIwMSwxMCBAQAorICBDRkdfREVCVUdfTEVWRUw9MjU1CisgZmkKKyAKKytpZiB0ZXN0ICJ4JHdpdGhfV2Vycm9yIiA9ICJ4eWVzIjsgdGhlbgorKyBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2Vycm9yIgorK2ZpCisrCisgQUNfU1VCU1QoQ0ZHX0RFQlVHX0xFVkVMKQorIENGTEFHUz0iJHtDRkxBR1N9IC1EQ09ORklHX0RFQlVHX0xFVkVMPSRDRkdfREVCVUdfTEVWRUwiCisgCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9kaXNhYmxlLXNvLXZlcnNpb25pbmcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwOGU0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL2Rpc2FibGUtc28tdmVyc2lvbmluZy5wYXRjaApAQCAtMCwwICsxLDM2IEBACitEaXNhYmxlIHNvIHZlcnNpb25pbmcgc2luY2UgdGhleSBhcmUgcmVhbGx5IG5vdCBhIHZlcnNpb25lZCBzaGFyZWQgbGliLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBAIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Avb214aWwvYnVncy81OS8KKworU2lnbmVkLW9mZi1ieTogRHJldyBNb3NlbGV5IDxkcmV3X21vc2VsZXlAbWVudG9yLmNvbT4KKworZGlmZiAtcnViIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9hdWRpb19lZmZlY3RzL01ha2VmaWxlLmFtCistLS0gbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy9hdWRpb19lZmZlY3RzL01ha2VmaWxlLmFtCTIwMTQtMDctMjAgMTU6MjI6MDAuODU4NDI1MjM0IC0wNDAwCisrKysgbGlib214aWwtYmVsbGFnaW8tMC45LjMvc3JjL2NvbXBvbmVudHMvYXVkaW9fZWZmZWN0cy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjI1OjQyLjY4NzUyNTIyNSAtMDQwMAorQEAgLTEwLDQgKzEwLDUgQEAKKyBsaWJvbXhhdWRpb19lZmZlY3RzX2xhX0NGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAJCQkJLUkkKHRvcF9zcmNkaXIpL3NyYyBcCisgCQkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQorK2xpYm9teGF1ZGlvX2VmZmVjdHNfbGFfTERGTEFHUyA9IC1hdm9pZC12ZXJzaW9uCisgCitkaWZmIC1ydWIgbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvY2xvY2tzcmMvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjowMC44NTg0MjUyMzQgLTA0MDAKKysrKyBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy9jbG9ja3NyYy9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjI0OjQ5LjE1MTI1OTc1MyAtMDQwMAorQEAgLTEwLDQgKzEwLDQgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKHRvcF9zcmNkaXIpL3NyYy9iYXNlCistCisrbGlib214Y2xvY2tzcmNfbGFfTERGTEFHUyA9IC1hdm9pZC12ZXJzaW9uCitkaWZmIC1ydWIgbGlib214aWwtYmVsbGFnaW8tMC45LjMtb3JpZy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbSBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbQorLS0tIGxpYm9teGlsLWJlbGxhZ2lvLTAuOS4zLW9yaWcvc3JjL2NvbXBvbmVudHMvdmlkZW9zY2hlZHVsZXIvTWFrZWZpbGUuYW0JMjAxNC0wNy0yMCAxNToyMjowMC44NjI0MjUyNTQgLTA0MDAKKysrKyBsaWJvbXhpbC1iZWxsYWdpby0wLjkuMy9zcmMvY29tcG9uZW50cy92aWRlb3NjaGVkdWxlci9NYWtlZmlsZS5hbQkyMDE0LTA3LTIwIDE1OjIyOjM2LjQ2MjYwMTc4NiAtMDQwMAorQEAgLTYsNyArNiw3IEBACisgCQkJCQkJCQlsaWJyYXJ5X2VudHJ5X3BvaW50LmMKKyAKKyBsaWJvbXh2aWRlb3NjaGVkX2xhX0xJQkFERCA9ICQodG9wX2J1aWxkZGlyKS9zcmMvbGlib214aWwtYmVsbGFnaW8ubGEKKy1saWJvbXh2aWRlb3NjaGVkX2xhX0xERkxBR1MgPSAKKytsaWJvbXh2aWRlb3NjaGVkX2xhX0xERkxBR1MgPSAtYXZvaWQtdmVyc2lvbgorIGxpYm9teHZpZGVvc2NoZWRfbGFfQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Nzk1M2EKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9keW5hbWljbG9hZGVyLWxpbmtpbmcucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorVGhpcyBwYXRjaCBmaXhlcyBsaW5rIGlzc3VlIHdoZW4gbGlib214ZHluYW1pY2xvYWRlci5zbyBpcyBsb2FkZWQgOgorTWlzc2luZyBzeW1ib2wgUk1fRGVpbml0LgorCitUaGlzIHBhdGNoIGNvbWVzIGZyb20gImh0dHA6Ly9wa2dzLmZlZG9yYXByb2plY3Qub3JnL2NnaXQvbGlib214aWwtYmVsbGFnaW8uZ2l0L2NvbW1pdC8/aD1mMTcmaWQ9NDk5NmE5NTgyODk0M2QzNDVlNTFkZWQ2ODc2YzMxMDM2NTNlZWNmOCIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFPDqWJhc3RpZW4gTWVubmV0cmllciA8cy5tZW5uZXRyaWVyQGlubm90aXMub3JnPgorCistLS0gYS9zcmMvZHluYW1pY19sb2FkZXIvTWFrZWZpbGUuYW0JMjAxNC0wMi0yNSAxNToyOToxMC4xMjg1NDk2MzYgKzAxMDAKKysrKyBiL3NyYy9keW5hbWljX2xvYWRlci9NYWtlZmlsZS5hbQkyMDE0LTAyLTI1IDE1OjMwOjE1Ljc1NjU0ODgwOCArMDEwMAorQEAgLTMsNyArMyw3IEBACisgb214ZHluYW1pY2xvYWRlcl9MVExJQlJBUklFUyA9IGxpYm9teGR5bmFtaWNsb2FkZXIubGEKKyBsaWJvbXhkeW5hbWljbG9hZGVyX2xhX1NPVVJDRVMgPSBzdGVfZHluYW1pY19jb21wb25lbnRfbG9hZGVyLmMgc3RlX2R5bmFtaWNfY29tcG9uZW50X2xvYWRlci5oCisgCistbGlib214ZHluYW1pY2xvYWRlcl9sYV9MREZMQUdTID0KKytsaWJvbXhkeW5hbWljbG9hZGVyX2xhX0xERkxBR1MgPSAtbG9teGlsLWJlbGxhZ2lvIC1MJCh0b3BfYnVpbGRkaXIpL3NyYy8ubGlicworIGxpYm9teGR5bmFtaWNsb2FkZXJfbGFfQ0ZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMgXAorIAkJCS1JJCh0b3Bfc3JjZGlyKS9zcmMvYmFzZSBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbC0wLjkuMy9tYWtlZmlsZS1kb2NkaXItZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmU4YzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvbWFrZWZpbGUtZG9jZGlyLWZpeC5wYXRjaApAQCAtMCwwICsxLDE5IEBACitUaGlzIHBhdGNoIGlzIHRvIHJlbW92ZSBERVNURElSIGluIGRvY2Rpci4KK090aGVyd2lzZSwgd2hlbiB1c2VycyBpbnN0YWxsIGJ5IHJ1bm5pbmcgYG1ha2UgaW5zdGFsbCBERVNURElSPS9hbHRlcm5hdGUvZGlyZWN0b3J5JyBzcGVjaWZpZWQgaW4gdGhlIGZpbGUgSU5TVEFMTCwgdGhlIGRvYyB3aWxsIGdvIGludG8gL2FsdGVybmF0ZS9kaXJlY3RvcnkvYWx0ZXJuYXRlL2RpcmVjdG9yeSwgd2hpY2ggaXMgbm90IGV4cGVjdGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU2hhbmUgV2FuZyA8c2hhbmUud2FuZ0BpbnRlbC5jb20+CisKK2RpZmYgLXIgMzBiNTk3ZTRlNzBkIE1ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDE1OjM4OjM1IDIwMTEgKzA4MDAKKysrKyBiL01ha2VmaWxlLmFtCVdlZCBEZWMgMjggMTU6Mzk6MjUgMjAxMSArMDgwMAorQEAgLTcsNyArNyw3IEBACisgcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworIHBrZ2NvbmZpZ19EQVRBID0gbGlib214aWwtYmVsbGFnaW8ucGMKKyAKKy1kb2NkaXIgPSAkKERFU1RESVIpJChwcmVmaXgpL3NoYXJlL2RvYy9AUEFDS0FHRUAKKytkb2NkaXIgPSAkKHByZWZpeCkvc2hhcmUvZG9jL0BQQUNLQUdFQAorIGRvY19EQVRBID0gUkVBRE1FIFwKKyAJICAgQ2hhbmdlTG9nIFwKKyAJICAgVE9ETwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlib214aWwvbGlib214aWwtMC45LjMvcGFyYWxsZWwtbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgzY2ExMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsLTAuOS4zL3BhcmFsbGVsLW1ha2UucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVGhpcyBwYXRjaCBpcyB0byBtYWtlIGxpYm9teGlsIE1ha2VmaWxlIHN1cHBvcnQgIm1ha2UgLWpOIi4KK1RoZSBvbXhyZWdpc3Rlcl9iZWxsYWdpbyBzdHVmZnMgZGVwZW5kIG9uIGxpYm9teGlsX2JlbGxhZ2lvIGxpYnJhcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBTaGFuZSBXYW5nIDxzaGFuZS53YW5nQGludGVsLmNvbT4KKworZGlmZiAtciBmNTlkMDc3ZDNkZDUgTWFrZWZpbGUuYW0KKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDEwOjU0OjM2IDIwMTEgKzA4MDAKKysrKyBiL3NyYy9NYWtlZmlsZS5hbQlXZWQgRGVjIDI4IDEwOjU1OjQ2IDIwMTEgKzA4MDAKK0BAIC03LDYgKzcsNyBAQAorIG9teHJlZ2lzdGVyX2JlbGxhZ2lvX1NPVVJDRVMgPSBvbXhyZWdpc3Rlci5jIGNvbW1vbi5jIGNvbW1vbi5oCisgb214cmVnaXN0ZXJfYmVsbGFnaW9fQ0ZMQUdTID0gLURPTVhJTENPTVBPTkVOVFNQQVRIPVwiJChwbHVnaW5kaXIpL1wiIFwKKyAJCQkgICAgICAtSSQodG9wX3NyY2RpcikvaW5jbHVkZQorK29teHJlZ2lzdGVyX2JlbGxhZ2lvX0xEQUREID0gJChsaWJfTFRMSUJSQVJJRVMpCisgb214cmVnaXN0ZXJfYmVsbGFnaW9fTERGTEFHUyA9IC1sb214aWwtYmVsbGFnaW8gLUwkKGJ1aWxkZGlyKQorIAorIGxpYl9MVExJQlJBUklFUyA9IGxpYm9teGlsLWJlbGxhZ2lvLmxhCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYm9teGlsL2xpYm9teGlsXzAuOS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZDZkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJvbXhpbC9saWJvbXhpbF8wLjkuMy5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkJlbGxhZ2lvIE9wZW5NQVggSW50ZWdyYXRpb24gTGF5ZXIgKElMKSIKK0RFU0NSSVBUSU9OID0gIkJlbGxhZ2lvIGlzIGFuIG9wZW5zb3VyY2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIEtocm9ub3MgT3Blbk1BWCBcCisgICAgICAgICAgICAgICBJbnRlZ3JhdGlvbiBMYXllciBBUEkgdG8gYWNjZXNzIG11bHRpbWVkaWEgY29tcG9uZW50cy4iCitIT01FUEFHRSA9ICJodHRwOi8vb214aWwuc291cmNlZm9yZ2UubmV0LyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1hZTZmMGY0ZGJjN2FjMTkzYjUwZjMyM2E2YWUxOTFjYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvb214Y29yZS5oO2JlZ2lubGluZT0xO2VuZGxpbmU9Mjc7bWQ1PTgwNmIxZTU1NjZjMDY0ODZmZThlNDJiNDYxZTAzYTkwIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9vbXhpbC9saWJvbXhpbC1iZWxsYWdpby0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlLWZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wYXJhbGxlbC1tYWtlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL21ha2VmaWxlLWRvY2Rpci1maXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHluYW1pY2xvYWRlci1saW5raW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGUtc28tdmVyc2lvbmluZy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gImExZGU4MjdmZGI3NWMwMmM4NGU1NWY3NDBjYTI3Y2I4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjU5M2MwNzI5YzhlZjhjMTQ2N2IzYmZlZmNmMzU1ZWMxOWE0NmRkOTJlMzFiZmMyODBlMTdkOTZiMDkzNGQ3NGMiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0tYmVsbGFnaW8tJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0VYVFJBX09FQ09ORiArPSAiLS1kaXNhYmxlLWRvYyAtLWRpc2FibGUtV2Vycm9yIgorCisjCisjIFRoZSAuc28gZmlsZXMgdW5kZXIgJHtsaWJkaXJ9L2JlbGxhZ2lvIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgdmVyc2lvbmVkIGFuZCBzeW1saW5rZWQuCisjIE1ha2Ugc3VyZSB0aGV5IGdldCBwYWNrYWdlZCBpbiB0aGUgbWFpbiBwYWNrYWdlLgorIworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9iZWxsYWdpby8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qJHtTT0xJQlN9IgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5hIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L29teGxvYWRlcnMvKi5hIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vKi5sYSBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLyoubGEgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vb214bG9hZGVycy8qJHtTT0xJQlNERVZ9IgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYmVsbGFnaW8vLmRlYnVnLyBcCisgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9vbXhsb2FkZXJzLy5kZWJ1Zy8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnBuZy9saWJwbmdfMS42LjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTU4MDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJwbmcvbGlicG5nXzEuNi4xNy5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIlBORyBpbWFnZSBmb3JtYXQgZGVjb2RpbmcgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubGlicG5nLm9yZy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxpYnBuZyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWI5Yjc1Mzk5YjcyZTRhODY1NmNmM2E2ZGRmYzg2ZDlhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2VuZGxpbmU9MTY7bWQ1PWNjOWMyZDFlYWZkYTE3ZTEyNzdhNmY5OWE5ZmMyOWM0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3BuZy5oO2JlZ2lubGluZT0yNDI7ZW5kbGluZT0zNTY7bWQ1PTU5OTMxNjgxOWQ1MjVkZGUyYmZkZjI4ZmUzZjMyM2FmIgorREVQRU5EUyA9ICJ6bGliIgorTElCViA9ICIxNiIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcHJvamVjdC9saWJwbmcvbGlicG5nJHtMSUJWfS8ke1BWfS9saWJwbmctJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiNDMwYTliNzZiNzg1MzMyMzVjZDRiOWIyNmNlNzVjN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTg1MDdiNTVmYmU1Y2Q0M2M1MTk4MWYyOTI0ZTQ2NzFmZDgxZmUzNWQ1MmRjNTMzNTdlMjBmMmM3N2ZhNWRmZCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJwbmctY29uZmlnICR7YmluZGlyfS9saWJwbmcxNi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworIyBXb3JrIGFyb3VuZCBtaXNzaW5nIHN5bWJvbHMKK0VYVFJBX09FQ09ORl9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiAke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJuZW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9uIiwgIi0tZW5hYmxlLWFybS1uZW9uPW9mZiIgLGQpfSIKKworUEFDS0FHRVMgPSsgIiR7UE59LXRvb2xzIgorCitGSUxFU18ke1BOfS10b29scyA9ICIke2JpbmRpcn0vcG5nLWZpeC1pdHh0ICR7YmluZGlyfS9wbmdmaXgiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNhbXBsZXJhdGUvbGlic2FtcGxlcmF0ZTBfMC4xLjguYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNjkzNWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzYW1wbGVyYXRlL2xpYnNhbXBsZXJhdGUwXzAuMS44LmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiQXVkaW8gU2FtcGxlIFJhdGUgQ29udmVyc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL1NSQy8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9zYW1wbGVyYXRlLmM7YmVnaW5saW5lPTE7ZW5kbGluZT0xNzttZDU9ZDA4MDdjMzVmYzkwNjQ2NmQyNGE1MDQ2MzUzNDgxNWEiCitERVBFTkRTID0gImZsYWMgbGlic25kZmlsZTEiCitQUiA9ICJyMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vU1JDL2xpYnNhbXBsZXJhdGUtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMWM3ZmIyNTE5MWI0ZTZlMzYyOGQxOThhNjZhODRmNDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTNiNTRiZGY0NmQ1ZTZkMjM1NGI3MDM0Mzk1ZmUzMjljMjIyYTk2Njc5MGRlMzQ1MjA3MDJiYjk2NDJmMWMwNiIKK1MgPSAiJHtXT1JLRElSfS9saWJzYW1wbGVyYXRlLSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUEFDS0FHRUNPTkZJR1tmZnR3XSA9ICIsLS1kaXNhYmxlLWZmdHcsZmZ0dyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvZmlsZXMvMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQ4NzEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtc2VnZmF1bHQtaW4tU0QyLVJTUkMtcGFyc2VyLnBhdGNoCkBAIC0wLDAgKzEsMjExIEBACitGcm9tIDkzNDFlOWM2ZTcwY2QzYWQ3NmM5MDFjM2NmMDUyZDRjYjUyZmQ4MjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFcmlrIGRlIENhc3RybyBMb3BvIDxlcmlrZEBtZWdhLW5lcmQuY29tPgorRGF0ZTogVGh1LCAyNyBKdW4gMjAxMyAxODowNDowMyArMTAwMAorU3ViamVjdDogW1BBVENIXSBzcmMvc2QyLmMgOiBGaXggc2VnZmF1bHQgaW4gU0QyIFJTUkMgcGFyc2VyLgorCisoVXBzdHJlYW0gY29tbWl0IDkzNDFlOWM2ZTcwY2QzYWQ3NmM5MDFjM2NmMDUyZDRjYjUyZmQ4MjcpCisKK0Egc3BlY2lhbGx5IGNyYWZ0ZWQgcmVzb3VyY2UgZm9yayBmb3IgYW4gU0QyIGZpbGUgY2FuIGNhdXNlCit0aGUgU0QyIFJTUkMgcGFyc2VyIHRvIHJlYWQgZGF0YSBmcm9tIG91dHNpZGUgYSBkeW5hbWljYWxseQorZGVmaW5lZCBidWZmZXIuIFRoZSBkYXRhIHRoYXQgaXMgcmVhZCBpcyBjb252ZXJ0ZWQgaW50byBhCitzaG9ydCBvciBpbnQgYW5kIHVzZWQgZHVyaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZy4KKworU2luY2Ugbm8gd3JpdGUgb2NjdXJzLCB0aGlzIGlzIHVubGlrZWx5IHRvIGJlIGV4cGxvaXRhYmxlLgorCitCdWcgcmVwb3J0ZWQgYnkgVGhlIE1heWhlbSBUZWFtIGZyb20gQ3lsYWIsIENhcm5lZ2llIE1lbGxvbgorVW5pdmVyaXN0eS4gUGFwZXIgaXM6CitodHRwOi8vdXNlcnMuZWNlLmNtdS5lZHUvfmFyZWJlcnQvcGFwZXJzL21heWhlbS1vYWtsYW5kLTEyLnBkZgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKy0tLQorIHNyYy9zZDIuYyB8ICAgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1NSBpbnNlcnRpb25zKCspLCAzOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9zZDIuYyBiL3NyYy9zZDIuYworaW5kZXggMzVjZTM2Yi4uNmJlMTUwYyAxMDA2NDQKKy0tLSBhL3NyYy9zZDIuYworKysrIGIvc3JjL3NkMi5jCitAQCAtMSw1ICsxLDUgQEAKKyAvKgorLSoqIENvcHlyaWdodCAoQykgMjAwMS0yMDExIEVyaWsgZGUgQ2FzdHJvIExvcG8gPGVyaWtkQG1lZ2EtbmVyZC5jb20+CisrKiogQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KKyAqKiBDb3B5cmlnaHQgKEMpIDIwMDQgUGFhdm8gSnVtcHBhbmVuCisgKioKKyAqKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorQEAgLTM3MSw0NCArMzcxLDYxIEBAIHNkMl93cml0ZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZiwgaW50IFVOVVNFRCAoY2FsY19sZW5ndGgpKQorICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX2NoYXIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0KQorLXsJcmV0dXJuIGRhdGEgW29mZnNldF0gOworLX0gLyogcmVhZF9jaGFyICovCisrcmVhZF9yc3JjX2NoYXIgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+PSBwcnNyYy0+cnNyY19sZW4pCisrCQlyZXR1cm4gMCA7CisrCXJldHVybiBkYXRhIFtvZmZzZXRdIDsKKyt9IC8qIHJlYWRfcnNyY19jaGFyICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX3Nob3J0IChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCA4KSArIGRhdGEgW29mZnNldCArIDFdIDsKKy19IC8qIHJlYWRfc2hvcnQgKi8KKytyZWFkX3JzcmNfc2hvcnQgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDEgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKwlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAxXSA7CisrfSAvKiByZWFkX3JzcmNfc2hvcnQgKi8KKyAKKyBzdGF0aWMgaW5saW5lIGludAorLXJlYWRfaW50IChjb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSwgaW50IG9mZnNldCkKKy17CXJldHVybiAoZGF0YSBbb2Zmc2V0XSA8PCAyNCkgKyAoZGF0YSBbb2Zmc2V0ICsgMV0gPDwgMTYpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDgpICsgZGF0YSBbb2Zmc2V0ICsgM10gOworLX0gLyogcmVhZF9pbnQgKi8KKytyZWFkX3JzcmNfaW50IChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQpCisrewljb25zdCB1bnNpZ25lZCBjaGFyICogZGF0YSA9IHByc3JjLT5yc3JjX2RhdGEgOworKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyAzID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiAwIDsKKysJcmV0dXJuIChkYXRhIFtvZmZzZXRdIDw8IDI0KSArIChkYXRhIFtvZmZzZXQgKyAxXSA8PCAxNikgKyAoZGF0YSBbb2Zmc2V0ICsgMl0gPDwgOCkgKyBkYXRhIFtvZmZzZXQgKyAzXSA7CisrfSAvKiByZWFkX3JzcmNfaW50ICovCisgCisgc3RhdGljIGlubGluZSBpbnQKKy1yZWFkX21hcmtlciAoY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIGludCBvZmZzZXQpCisteworK3JlYWRfcnNyY19tYXJrZXIgKGNvbnN0IFNEMl9SU1JDICpwcnNyYywgaW50IG9mZnNldCkKKyt7CWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhID0gcHJzcmMtPnJzcmNfZGF0YSA7CisrCisrCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIDMgPj0gcHJzcmMtPnJzcmNfbGVuKQorKwkJcmV0dXJuIDAgOworKworIAlpZiAoQ1BVX0lTX0JJR19FTkRJQU4pCisgCQlyZXR1cm4gKGRhdGEgW29mZnNldF0gPDwgMjQpICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAyXSA8PCA4KSArIGRhdGEgW29mZnNldCArIDNdIDsKKy0JZWxzZSBpZiAoQ1BVX0lTX0xJVFRMRV9FTkRJQU4pCisrCWlmIChDUFVfSVNfTElUVExFX0VORElBTikKKyAJCXJldHVybiBkYXRhIFtvZmZzZXRdICsgKGRhdGEgW29mZnNldCArIDFdIDw8IDgpICsgKGRhdGEgW29mZnNldCArIDJdIDw8IDE2KSArIChkYXRhIFtvZmZzZXQgKyAzXSA8PCAyNCkgOworLQllbHNlCistCQlyZXR1cm4gMHg2NjYgOworLX0gLyogcmVhZF9tYXJrZXIgKi8KKysKKysJcmV0dXJuIDAgOworK30gLyogcmVhZF9yc3JjX21hcmtlciAqLworIAorIHN0YXRpYyB2b2lkCistcmVhZF9zdHIgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCBpbnQgb2Zmc2V0LCBjaGFyICogYnVmZmVyLCBpbnQgYnVmZmVyX2xlbikKKy17CWludCBrIDsKKytyZWFkX3JzcmNfc3RyIChjb25zdCBTRDJfUlNSQyAqcHJzcmMsIGludCBvZmZzZXQsIGNoYXIgKiBidWZmZXIsIGludCBidWZmZXJfbGVuKQorK3sJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEgPSBwcnNyYy0+cnNyY19kYXRhIDsKKysJaW50IGsgOworIAorIAltZW1zZXQgKGJ1ZmZlciwgMCwgYnVmZmVyX2xlbikgOworIAorKwlpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgKyBidWZmZXJfbGVuID49IHByc3JjLT5yc3JjX2xlbikKKysJCXJldHVybiA7CisrCisgCWZvciAoayA9IDAgOyBrIDwgYnVmZmVyX2xlbiAtIDEgOyBrKyspCisgCXsJaWYgKHBzZl9pc3ByaW50IChkYXRhIFtvZmZzZXQgKyBrXSkgPT0gMCkKKyAJCQlyZXR1cm4gOworIAkJYnVmZmVyIFtrXSA9IGRhdGEgW29mZnNldCArIGtdIDsKKyAJCX0gOworIAlyZXR1cm4gOworLX0gLyogcmVhZF9zdHIgKi8KKyt9IC8qIHJlYWRfcnNyY19zdHIgKi8KKyAKKyBzdGF0aWMgaW50Cisgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorQEAgLTQzNSwxNyArNDUyLDE3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAJLyogUmVzZXQgdGhlIGhlYWRlciBzdG9yYWdlIGJlY2F1c2Ugd2UgaGF2ZSBjaGFuZ2VkIHRvIHRoZSByc3JjZGVzLiAqLworIAlwc2YtPmhlYWRpbmRleCA9IHBzZi0+aGVhZGVuZCA9IHJzcmMucnNyY19sZW4gOworIAorLQlyc3JjLmRhdGFfb2Zmc2V0ID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCAwKSA7CistCXJzcmMubWFwX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgNCkgOworLQlyc3JjLmRhdGFfbGVuZ3RoID0gcmVhZF9pbnQgKHJzcmMucnNyY19kYXRhLCA4KSA7CistCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMTIpIDsKKysJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAwKSA7CisrCXJzcmMubWFwX29mZnNldCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCA0KSA7CisrCXJzcmMuZGF0YV9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgOCkgOworKwlyc3JjLm1hcF9sZW5ndGggPSByZWFkX3JzcmNfaW50ICgmcnNyYywgMTIpIDsKKyAKKyAJaWYgKHJzcmMuZGF0YV9vZmZzZXQgPT0gMHg1MTYwNyAmJiByc3JjLm1hcF9vZmZzZXQgPT0gMHgyMDAwMCkKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiVHJ5aW5nIG9mZnNldCBvZiAweDUyIGJ5dGVzLlxuIikgOworLQkJcnNyYy5kYXRhX29mZnNldCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDApICsgMHg1MiA7CistCQlyc3JjLm1hcF9vZmZzZXQgPSByZWFkX2ludCAocnNyYy5yc3JjX2RhdGEsIDB4NTIgKyA0KSArIDB4NTIgOworLQkJcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDgpIDsKKy0JCXJzcmMubWFwX2xlbmd0aCA9IHJlYWRfaW50IChyc3JjLnJzcmNfZGF0YSwgMHg1MiArIDEyKSA7CisrCQlyc3JjLmRhdGFfb2Zmc2V0ID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyAwKSArIDB4NTIgOworKwkJcnNyYy5tYXBfb2Zmc2V0ID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyA0KSArIDB4NTIgOworKwkJcnNyYy5kYXRhX2xlbmd0aCA9IHJlYWRfcnNyY19pbnQgKCZyc3JjLCAweDUyICsgOCkgOworKwkJcnNyYy5tYXBfbGVuZ3RoID0gcmVhZF9yc3JjX2ludCAoJnJzcmMsIDB4NTIgKyAxMikgOworIAkJfSA7CisgCisgCXBzZl9sb2dfcHJpbnRmIChwc2YsICIgIGRhdGEgb2Zmc2V0IDogMHglMDRYXG4gIG1hcCAgb2Zmc2V0IDogMHglMDRYXG4iCitAQCAtNDg4LDcgKzUwNSw3IEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAJCWdvdG8gcGFyc2VfcnNyY19mb3JrX2NsZWFudXAgOworIAkJfSA7CisgCistCXJzcmMuc3RyaW5nX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIHJlYWRfc2hvcnQgKHJzcmMucnNyY19kYXRhLCByc3JjLm1hcF9vZmZzZXQgKyAyNikgOworKwlyc3JjLnN0cmluZ19vZmZzZXQgPSByc3JjLm1hcF9vZmZzZXQgKyByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyNikgOworIAlpZiAocnNyYy5zdHJpbmdfb2Zmc2V0ID4gcnNyYy5yc3JjX2xlbikKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIHN0cmluZyBvZmZzZXQgKCVkKS5cbiIsIHJzcmMuc3RyaW5nX29mZnNldCkgOworIAkJZXJyb3IgPSBTRkVfU0QyX0JBRF9SU1JDIDsKK0BAIC00OTcsNyArNTE0LDcgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAorIAlyc3JjLnR5cGVfb2Zmc2V0ID0gcnNyYy5tYXBfb2Zmc2V0ICsgMzAgOworIAorLQlyc3JjLnR5cGVfY291bnQgPSByZWFkX3Nob3J0IChyc3JjLnJzcmNfZGF0YSwgcnNyYy5tYXBfb2Zmc2V0ICsgMjgpICsgMSA7CisrCXJzcmMudHlwZV9jb3VudCA9IHJlYWRfcnNyY19zaG9ydCAoJnJzcmMsIHJzcmMubWFwX29mZnNldCArIDI4KSArIDEgOworIAlpZiAocnNyYy50eXBlX2NvdW50IDwgMSkKKyAJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIHR5cGUgY291bnQuXG4iKSA7CisgCQllcnJvciA9IFNGRV9TRDJfQkFEX1JTUkMgOworQEAgLTUxMywxMSArNTMwLDExIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy5zdHJfaW5kZXggPSAtMSA7CisgCWZvciAoayA9IDAgOyBrIDwgcnNyYy50eXBlX2NvdW50IDsgayArKykKKy0JewltYXJrZXIgPSByZWFkX21hcmtlciAocnNyYy5yc3JjX2RhdGEsIHJzcmMudHlwZV9vZmZzZXQgKyBrICogOCkgOworKwl7CW1hcmtlciA9IHJlYWRfcnNyY19tYXJrZXIgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKyAKKyAJCWlmIChtYXJrZXIgPT0gU1RSX01BUktFUikKKyAJCXsJcnNyYy5zdHJfaW5kZXggPSBrIDsKKy0JCQlyc3JjLnN0cl9jb3VudCA9IHJlYWRfc2hvcnQgKHJzcmMucnNyY19kYXRhLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDggKyA0KSArIDEgOworKwkJCXJzcmMuc3RyX2NvdW50ID0gcmVhZF9yc3JjX3Nob3J0ICgmcnNyYywgcnNyYy50eXBlX29mZnNldCArIGsgKiA4ICsgNCkgKyAxIDsKKyAJCQllcnJvciA9IHBhcnNlX3N0cl9yc3JjIChwc2YsICZyc3JjKSA7CisgCQkJZ290byBwYXJzZV9yc3JjX2ZvcmtfY2xlYW51cCA7CisgCQkJfSA7CitAQCAtNTQ5LDI2ICs1NjYsMjYgQEAgcGFyc2Vfc3RyX3JzcmMgKFNGX1BSSVZBVEUgKnBzZiwgU0QyX1JTUkMgKiByc3JjKQorIAlmb3IgKGsgPSAwIDsgZGF0YV9vZmZzZXQgKyBkYXRhX2xlbiA8IHJzcmMtPnJzcmNfbGVuIDsgaysrKQorIAl7CWludCBzbGVuIDsKKyAKKy0JCXNsZW4gPSByZWFkX2NoYXIgKHJzcmMtPnJzcmNfZGF0YSwgc3RyX29mZnNldCkgOworLQkJcmVhZF9zdHIgKHJzcmMtPnJzcmNfZGF0YSwgc3RyX29mZnNldCArIDEsIG5hbWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAobmFtZSksIHNsZW4gKyAxKSkgOworKwkJc2xlbiA9IHJlYWRfcnNyY19jaGFyIChyc3JjLCBzdHJfb2Zmc2V0KSA7CisrCQlyZWFkX3JzcmNfc3RyIChyc3JjLCBzdHJfb2Zmc2V0ICsgMSwgbmFtZSwgU0ZfTUlOIChTSUdORURfU0laRU9GIChuYW1lKSwgc2xlbiArIDEpKSA7CisgCQlzdHJfb2Zmc2V0ICs9IHNsZW4gKyAxIDsKKyAKKy0JCXJzcmNfaWQgPSByZWFkX3Nob3J0IChyc3JjLT5yc3JjX2RhdGEsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyKSA7CisrCQlyc3JjX2lkID0gcmVhZF9yc3JjX3Nob3J0IChyc3JjLCByc3JjLT5pdGVtX29mZnNldCArIGsgKiAxMikgOworIAorLQkJZGF0YV9vZmZzZXQgPSByc3JjLT5kYXRhX29mZnNldCArIHJlYWRfaW50IChyc3JjLT5yc3JjX2RhdGEsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyICsgNCkgOworKwkJZGF0YV9vZmZzZXQgPSByc3JjLT5kYXRhX29mZnNldCArIHJlYWRfcnNyY19pbnQgKHJzcmMsIHJzcmMtPml0ZW1fb2Zmc2V0ICsgayAqIDEyICsgNCkgOworIAkJaWYgKGRhdGFfb2Zmc2V0IDwgMCB8fCBkYXRhX29mZnNldCA+IHJzcmMtPnJzcmNfbGVuKQorIAkJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiRXhpdGluZyBwYXJzZXIgb24gZGF0YSBvZmZzZXQgb2YgJWQuXG4iLCBkYXRhX29mZnNldCkgOworIAkJCWJyZWFrIDsKKyAJCQl9IDsKKyAKKy0JCWRhdGFfbGVuID0gcmVhZF9pbnQgKHJzcmMtPnJzcmNfZGF0YSwgZGF0YV9vZmZzZXQpIDsKKysJCWRhdGFfbGVuID0gcmVhZF9yc3JjX2ludCAocnNyYywgZGF0YV9vZmZzZXQpIDsKKyAJCWlmIChkYXRhX2xlbiA8IDAgfHwgZGF0YV9sZW4gPiByc3JjLT5yc3JjX2xlbikKKyAJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkV4aXRpbmcgcGFyc2VyIG9uIGRhdGEgbGVuZ3RoIG9mICVkLlxuIiwgZGF0YV9sZW4pIDsKKyAJCQlicmVhayA7CisgCQkJfSA7CisgCistCQlzbGVuID0gcmVhZF9jaGFyIChyc3JjLT5yc3JjX2RhdGEsIGRhdGFfb2Zmc2V0ICsgNCkgOworLQkJcmVhZF9zdHIgKHJzcmMtPnJzcmNfZGF0YSwgZGF0YV9vZmZzZXQgKyA1LCB2YWx1ZSwgU0ZfTUlOIChTSUdORURfU0laRU9GICh2YWx1ZSksIHNsZW4gKyAxKSkgOworKwkJc2xlbiA9IHJlYWRfcnNyY19jaGFyIChyc3JjLCBkYXRhX29mZnNldCArIDQpIDsKKysJCXJlYWRfcnNyY19zdHIgKHJzcmMsIGRhdGFfb2Zmc2V0ICsgNSwgdmFsdWUsIFNGX01JTiAoU0lHTkVEX1NJWkVPRiAodmFsdWUpLCBzbGVuICsgMSkpIDsKKyAKKyAJCXBzZl9sb2dfcHJpbnRmIChwc2YsICIgIDB4JTA0eCAgICAgJTRkICAgICAlNGQgICAgICUzZCAgICAnJXMnXG4iLCBkYXRhX29mZnNldCwgcnNyY19pZCwgZGF0YV9sZW4sIHNsZW4sIHZhbHVlKSA7CisgCistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2ZpbGVzLzAwMDEtc3JjLXNkMi5jLUZpeC10d28tcG90ZW50aWFsLWJ1ZmZlci1yZWFkLW92ZXJmbG93cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTY0NzNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlic25kZmlsZS9maWxlcy8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2gKQEAgLTAsMCArMSw0OSBAQAorRnJvbSBkYmUxNGYwMDAzMGFmNWQzNTc3ZjRjYWJiZjk4NjFkYjU5ZTljMzc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRXJpayBkZSBDYXN0cm8gTG9wbyA8ZXJpa2RAbWVnYS1uZXJkLmNvbT4KK0RhdGU6IFRodSwgMjUgRGVjIDIwMTQgMTk6MjM6MTIgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gc3JjL3NkMi5jIDogRml4IHR3byBwb3RlbnRpYWwgYnVmZmVyIHJlYWQgb3ZlcmZsb3dzLgorCisoVXBzdHJlYW0gY29tbWl0IGRiZTE0ZjAwMDMwYWY1ZDM1NzdmNGNhYmJmOTg2MWRiNTllOWMzNzgpCisKK0Nsb3NlczogaHR0cHM6Ly9naXRodWIuY29tL2VyaWtkL2xpYnNuZGZpbGUvaXNzdWVzLzkzCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogWXVlIFRhbyA8eXVlLnRhb0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL3NkMi5jIHwgICAxMiArKysrKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3NkMi5jIGIvc3JjL3NkMi5jCitpbmRleCAwYjRlNWFmLi5hNzBhMWYxIDEwMDY0NAorLS0tIGEvc3JjL3NkMi5jCisrKysgYi9zcmMvc2QyLmMKK0BAIC01MTcsNiArNTE3LDExIEBAIHNkMl9wYXJzZV9yc3JjX2ZvcmsgKFNGX1BSSVZBVEUgKnBzZikKKyAKKyAJcnNyYy50eXBlX29mZnNldCA9IHJzcmMubWFwX29mZnNldCArIDMwIDsKKyAKKysJaWYgKHJzcmMubWFwX29mZnNldCArIDI4ID4gcnNyYy5yc3JjX2xlbikKKysJewlwc2ZfbG9nX3ByaW50ZiAocHNmLCAiQmFkIG1hcCBvZmZzZXQuXG4iKSA7CisrCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKysJCX0gOworKworIAlyc3JjLnR5cGVfY291bnQgPSByZWFkX3JzcmNfc2hvcnQgKCZyc3JjLCByc3JjLm1hcF9vZmZzZXQgKyAyOCkgKyAxIDsKKyAJaWYgKHJzcmMudHlwZV9jb3VudCA8IDEpCisgCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCB0eXBlIGNvdW50LlxuIikgOworQEAgLTUzMyw3ICs1MzgsMTIgQEAgc2QyX3BhcnNlX3JzcmNfZm9yayAoU0ZfUFJJVkFURSAqcHNmKQorIAorIAlyc3JjLnN0cl9pbmRleCA9IC0xIDsKKyAJZm9yIChrID0gMCA7IGsgPCByc3JjLnR5cGVfY291bnQgOyBrICsrKQorLQl7CW1hcmtlciA9IHJlYWRfcnNyY19tYXJrZXIgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKysJewlpZiAocnNyYy50eXBlX29mZnNldCArIGsgKiA4ID4gcnNyYy5yc3JjX2xlbikKKysJCXsJcHNmX2xvZ19wcmludGYgKHBzZiwgIkJhZCByc3JjIG1hcmtlci5cbiIpIDsKKysJCQlnb3RvIHBhcnNlX3JzcmNfZm9ya19jbGVhbnVwIDsKKysJCQl9IDsKKysKKysJCW1hcmtlciA9IHJlYWRfcnNyY19tYXJrZXIgKCZyc3JjLCByc3JjLnR5cGVfb2Zmc2V0ICsgayAqIDgpIDsKKyAKKyAJCWlmIChtYXJrZXIgPT0gU1RSX01BUktFUikKKyAJCXsJcnNyYy5zdHJfaW5kZXggPSBrIDsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnNuZGZpbGUvbGlic25kZmlsZTFfMS4wLjI1LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDJmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJzbmRmaWxlL2xpYnNuZGZpbGUxXzEuMC4yNS5iYgpAQCAtMCwwICsxLDMzIEBACitTVU1NQVJZID0gIkF1ZGlvIGZvcm1hdCBDb252ZXJzaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1lZ2EtbmVyZC5jb20vbGlic25kZmlsZSIKK0FVVEhPUiA9ICJFcmlrIGRlIENhc3RybyBMb3BvIgorREVQRU5EUyA9ICJzcWxpdGUzIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5tZWdhLW5lcmQuY29tL2xpYnNuZGZpbGUvZmlsZXMvbGlic25kZmlsZS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1zcmMtc2QyLmMtRml4LXNlZ2ZhdWx0LWluLVNEMi1SU1JDLXBhcnNlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXNyYy1zZDIuYy1GaXgtdHdvLXBvdGVudGlhbC1idWZmZXItcmVhZC1vdmVyZmxvd3MucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTJiN2JiNjM3ZTAxMDIyYzdkMjBmOTVmOWMzOTkwYTIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTkwMTZkYmQzMjZhYmU3ZTIzNjZkZWQ1YzM0NGM4NTM4MjliZWJmZDE3MDJlZjI2YTA3ZWY2NjJkNmFhNDg4MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZTc3ZmU5MzIwMjczNmI0N2MwNzAzNTkxMGY0Nzk3NGEiCisKK1MgPSAiJHtXT1JLRElSfS9saWJzbmRmaWxlLSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdhbHNhJywgJ2Fsc2EnLCAnJywgZCl9IgorUEFDS0FHRUNPTkZJR1thbHNhXSA9ICItLWVuYWJsZS1hbHNhLC0tZGlzYWJsZS1hbHNhLGFsc2EtbGliIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWV4dGVybmFsLWxpYnMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitkb19jb25maWd1cmVfcHJlcGVuZF9hcm0oKSB7CisJZXhwb3J0IGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTEKKwlleHBvcnQgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQKKwlhY19jdl9zaXplb2Zfb2ZmX3Q9OAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhLTEuMS4xL25vLWRvY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5ZjNkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRoZW9yYS9saWJ0aGVvcmEtMS4xLjEvbm8tZG9jcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBsaWJ0aGVvcmEtMS4xLjEvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ0aGVvcmEtMS4xLjEub3JpZy9NYWtlZmlsZS5hbQkyMDA5LTExLTI1IDIyOjAxOjUzLjU5Mzc3NTkyNiArMDEwMAorKysrIGxpYnRoZW9yYS0xLjEuMS9NYWtlZmlsZS5hbQkyMDA5LTExLTI1IDIyOjAyOjAwLjc3NzUyNDAxNyArMDEwMAorQEAgLTgsNyArOCw3IEBACisgRVhBTVBMRVNfRElSID0KKyBlbmRpZgorIAorLVNVQkRJUlMgPSBsaWIgaW5jbHVkZSBkb2MgdGVzdHMgbTQgJChFWEFNUExFU19ESVIpCisrU1VCRElSUyA9IGxpYiBpbmNsdWRlIHRlc3RzIG00ICQoRVhBTVBMRVNfRElSKQorIAorIAorICMgd2UgaW5jbHVkZSB0aGUgd2hvbGUgZGViaWFuLyBkaXIgaW4gRVhUUkFfRElTVCBiZWNhdXNlIHRoZXJlJ3MgYSBwcm9ibGVtCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aGVvcmEvbGlidGhlb3JhXzEuMS4xLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGNiMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGhlb3JhL2xpYnRoZW9yYV8xLjEuMS5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIlRoZW9yYSBWaWRlbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIlRoZSBsaWJ0aGVvcmEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIHRoZSBzdGFuZGFyZCBlbmNvZGVyIGFuZCBkZWNvZGVyIHVuZGVyIGEgQlNEIGxpY2Vuc2UuIgorSE9NRVBBR0UgPSAiaHR0cDovL3hpcGgub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly90cmFjLnhpcGgub3JnL25ld3RpY2tldCIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2Y5MTcxOGY1OWViNmE4M2QwNmRjN2JjYWY0MTExMzIiCitERVBFTkRTID0gImxpYm9nZyIKKworUFIgPSAicjEiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy90aGVvcmEvbGlidGhlb3JhLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbm8tZG9jcy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjI5MmFiNjVjZWRkNTAyMWQ2YjdkZGQxMTdlMDdjZDhlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI2YWUxZWUyZmEzZDQyYWM0ODkyODdkM2VjMzRjNTg4NTczMGIxMjk2ZjA4MDFhZTU3N2EzNTE5M2QzYWZmYmMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWV4YW1wbGVzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidGlmZi9maWxlcy9saWJ0b29sMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MjAyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvZmlsZXMvbGlidG9vbDIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0KKyBjb25maWd1cmUuYWMgfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiB0aWZmLTMuOS41L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHRpZmYtMy45LjUub3JpZy9jb25maWd1cmUuYWMKKysrKyB0aWZmLTMuOS41L2NvbmZpZ3VyZS5hYworQEAgLTI3LDcgKzI3LDcgQEAgZG5sIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcAorIEFDX1BSRVJFUSgyLjY0KQorIEFDX0lOSVQoW0xpYlRJRkYgU29mdHdhcmVdLFszLjkuNV0sW3RpZmZAbGlzdHMubWFwdG9vbHMub3JnXSxbdGlmZl0pCisgQUNfQ09ORklHX0FVWF9ESVIoY29uZmlnKQorLUFDX0NPTkZJR19NQUNST19ESVIobTQpCisrZG5sIEFDX0NPTkZJR19NQUNST19ESVIobTQpCisgQUNfTEFORyhDKQorIAorIGRubCBDb21wdXRlIHRoZSBjYW5vbmljYWwgaG9zdCAocnVuLXRpbWUpIHN5c3RlbSB0eXBlIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ0aWZmL3RpZmZfNC4wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzYTVmMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL2xpYnRpZmYvdGlmZl80LjAuNC5iYgpAQCAtMCwwICsxLDQ0IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBUYWcgSW1hZ2UgRmlsZSBGb3JtYXQgKFRJRkYpIgorTElDRU5TRSA9ICJCU0QtMi1DbGF1c2UiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZUklHSFQ7bWQ1PTM0ZGEzZGI0NmZhYjc1MDE5OTJmOTYxNWQ3ZTE1OGNmIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5yZW1vdGVzZW5zaW5nLm9yZy9saWJ0aWZmLyIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAucmVtb3Rlc2Vuc2luZy5vcmcvcHViL2xpYnRpZmYvdGlmZi0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbDIucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjlhZWU3MTA3NDA4YTEyOGMwYzdiMjQyODZjMGRiOTAwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhjYjFkOTBjOTZmNjFjZGZjMGJjZjAzNmFjYzI1MWM5ZGJlNjMyMDMzNGRhOTQxYzdhODNjZmUxNTc2ZWY4OTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTID0gImF4X2N2X2NoZWNrX2dsX2xpYmdsPW5vIgorCitQQUNLQUdFQ09ORklHID89ICJjeHgganBlZyB6bGliIGx6bWEgXAorICAgICAgICAgICAgICAgICAgc3RyaXAtY2hvcHBpbmcgZXh0cmFzYW1wbGUtYXMtYWxwaGEgY2hlY2steWNiY3Itc3Vic2FtcGxpbmciCisKK1BBQ0tBR0VDT05GSUdbY3h4XSA9ICItLWVuYWJsZS1jeHgsLS1kaXNhYmxlLWN4eCwsIgorUEFDS0FHRUNPTkZJR1tqcGVnXSA9ICItLWVuYWJsZS1qcGVnLC0tZGlzYWJsZS1qcGVnLGpwZWcsIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLWVuYWJsZS16bGliLC0tZGlzYWJsZS16bGliLHpsaWIsIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1sem1hLC0tZGlzYWJsZS1sem1hLHh6LCIKKworIyBDb252ZXJ0IHNpbmdsZS1zdHJpcCB1bmNvbXByZXNzZWQgaW1hZ2VzIHRvIG11bHRpcGxlIHN0cmlwcyBvZiBzcGVjaWZpZWQKKyMgc2l6ZSAoZGVmYXVsdDogODE5MikgdG8gcmVkdWNlIG1lbW9yeSB1c2FnZQorUEFDS0FHRUNPTkZJR1tzdHJpcC1jaG9wcGluZ10gPSAiLS1lbmFibGUtc3RyaXAtY2hvcHBpbmcsLS1kaXNhYmxlLXN0cmlwLWNob3BwaW5nLCwiCisKKyMgVHJlYXQgYSBmb3VydGggc2FtcGxlIHdpdGggbm8gRVhUUkFTQU1QTEVfIHZhbHVlIGFzIGJlaW5nIEFTU09DQUxQSEEKK1BBQ0tBR0VDT05GSUdbZXh0cmFzYW1wbGUtYXMtYWxwaGFdID0gIi0tZW5hYmxlLWV4dHJhc2FtcGxlLWFzLWFscGhhLC0tZGlzYWJsZS1leHRyYXNhbXBsZS1hcy1hbHBoYSwsIgorCisjIENvbnRyb2wgcGlja2luZyB1cCBZQ2JDciBzdWJzYW1wbGUgaW5mby4gRGlzYWJsZSB0byBzdXBwb3J0IGZpbGVzIGxhY2tpbmcKKyMgdGhlIHRhZworUEFDS0FHRUNPTkZJR1tjaGVjay15Y2Jjci1zdWJzYW1wbGluZ10gPSAiLS1lbmFibGUtY2hlY2steWNiY3Itc3Vic2FtcGxpbmcsLS1kaXNhYmxlLWNoZWNrLXljYmNyLXN1YnNhbXBsaW5nLCwiCisKKyMgU3VwcG9ydCBhIG1lY2hhbmlzbSBhbGxvd2luZyByZWFkaW5nIGxhcmdlIHN0cmlwcyAodXN1YWxseSBvbmUgc3RyaXAgZmlsZXMpCisjIGluIGNodW5rcyB3aGVuIHVzaW5nIFRJRkZSZWFkU2NhbmxpbmUuIEV4cGVyaW1lbnRhbCA0LjArIGZlYXR1cmUKK1BBQ0tBR0VDT05GSUdbY2h1bmt5LXN0cmlwLXJlYWRdID0gIi0tZW5hYmxlLWNodW5reS1zdHJpcC1yZWFkLC0tZGlzYWJsZS1jaHVua3ktc3RyaXAtcmVhZCwsIgorCitQQUNLQUdFUyA9KyAidGlmZnh4IHRpZmYtdXRpbHMiCitGSUxFU190aWZmeHggPSAiJHtsaWJkaXJ9L2xpYnRpZmZ4eC5zby4qIgorRklMRVNfdGlmZi11dGlscyA9ICIke2JpbmRpcn0vKiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9saWJ2b3JiaXMvbGlidm9yYmlzXzEuMy41LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzZlMGYzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbGlidm9yYmlzL2xpYnZvcmJpc18xLjMuNS5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIk9nZyBWb3JiaXMgQXVkaW8gQ29kZWMiCitERVNDUklQVElPTiA9ICJPZ2cgVm9yYmlzIGlzIGEgaGlnaC1xdWFsaXR5IGxvc3N5IGF1ZGlvIGNvZGVjIFwKK3RoYXQgaXMgZnJlZSBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmVzdHJpY3Rpb25zLiBsaWJ2b3JiaXMgXAoraXMgdGhlIG1haW4gdm9yYmlzIGNvZGVjIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy52b3JiaXMuY29tLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly90cmFjLnhpcGgub3JnIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT03ZDJjNDg3ZDJmYzdkZDNlM2M3YzQ2NWE1YjdmNjIxNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL3ZvcmJpcy92b3JiaXNlbmMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTExO21kNT1kMWMxZDEzODg2M2Q2MzE1MTMxMTkzZDQwNDZkODFjYiIKK0RFUEVORFMgPSAibGlib2dnIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMueGlwaC5vcmcvcmVsZWFzZXMvdm9yYmlzLyR7QlB9LnRhci54eiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIyOGNiMjgwOTdjMDdhNzM1ZDZhZjU2ZTU5OGUxYzkwZiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1NGY5NGE5NTI3ZmYwYTg4NDc3YmUwYTcxYzBiYWIwOWE0YzNmZWJlMGVkODc4YjI0ODI0OTA2Y2Q0YjBlMWQxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL21wZWcyZGVjL21wZWcyZGVjLTAuNC4xL2FsdGl2ZWNfaF9uZWVkZWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYzU2NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlYy0wLjQuMS9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoCkBAIC0wLDAgKzEsNDMgQEAKK0FkZCBuZXcgbWV0aG9kIHRvIGp1ZGdlIHdoZXRoZXIgPGFsdGl2ZWMuaD4gaXMgbmVlZGVkCisKK1RoZSBvcmlnaW5hbCBsb2dpYyB3aWxsIHVzZSAidHlwZWRlZiB2ZWN0b3IgaW50IHQ7IiB0byBqdWRnZQord2hldGhlciA8YWx0aXZlYy5oPiBpcyBuZWVkZWQuIGFsdGl2ZWMuaCBjb250YWlucyB0aGUgZm9sbG93aW5nCitzdGF0ZW1lbnQ6CisKKyAjaWYgIWRlZmluZWQoX19BUFBMRV9BTFRJVkVDX18pCisgI2RlZmluZSB2ZWN0b3IgX192ZWN0b3IKKyAjZGVmaW5lIHBpeGVsIF9fcGl4ZWwKKyAjZGVmaW5lIGJvb2wgCisgI2VuZGlmCisKK0luIGdjYy00LjMuMywgX19BUFBMRV9BTFRJVkVDX18gaXMgbm90IGRlZmluZWQgYnkgY29tcGlsZXIsIG5laXRoZXIKK2FzIHZlY3RvciwgcGl4ZWwsIGFuZCBib29sLiBJbiBvcmRlciB0byBtYWtlICJ0eXBlZGVmIHZlY3RvciBpbnQgdDsiCitwYXNzIHRoZSBjb21waWxhdGlvbiwgd2UgbmVlZCB0byBpbmNsdWRlIGFsdGl2ZWMuaC4KKworSG93ZXZlciBpbiBnY2MtNC41LjAsIF9fQVBQTEVfQUxUSVZFQ19fIGlzIGRlZmluZWQgYnkgY29tcGlsZXIsCitzbyBhcyB2ZWN0b3IsIHBpeGVsLCBhbmQgYm9vbC4gV2UgY291bGQgbm90IGp1ZGdlIHdoZXRoZXIKK2FsdGl2ZWMuaCBpcyBuZWVkZWQgYnkgInR5cGVkZWYgdmVjdG9yIGludCB0OyIuCitIZXJlIHdlIGluY2x1ZGUgYW5vdGhlciBzdGF0ZW1lbnQgImludCB0bXAgPSBfX0NSNl9FUTsiLCBpbgord2hpY2ggX19DUjZfRVEgaXMgZGVmaW5lZCBpbiBhbHRpdmVjLmguCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBEb25neGlhbyBYdSA8ZG9uZ3hpYW8ueHVAaW50ZWwuY29tPgorCitkaWZmIC1ydU4gbXBlZzJkZWMtMC40LjEtb3JpZy9jb25maWd1cmUuaW4gbXBlZzJkZWMtMC40LjEvY29uZmlndXJlLmluCistLS0gbXBlZzJkZWMtMC40LjEtb3JpZy9jb25maWd1cmUuaW4JMjAxMC0wOS0xNCAyMDo1NTo0Mi4zOTk2ODc2NjMgKzA4MDAKKysrKyBtcGVnMmRlYy0wLjQuMS9jb25maWd1cmUuaW4JMjAxMC0wOS0xNCAyMDo1Njo0My40MDMyMDQ2NDggKzA4MDAKK0BAIC03NSwxMSArNzUsMTEgQEAKKyAJCSBDRkxBR1M9IiRPUFRfQ0ZMQUdTICRUUllfQ0ZMQUdTICRDRkxBR1MiCisgCQkgQUNfTVNHX0NIRUNLSU5HKFtpZiA8YWx0aXZlYy5oPiBpcyBuZWVkZWRdKQorIAkJIEFDX1RSWV9DT01QSUxFKFtdLAorLQkJICAgIFt0eXBlZGVmIHZlY3RvciBpbnQgdDsKKysJCSAgICBbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IGludCB0bXAgPSBfX0NSNl9FUTsKKyAJCSAgICAgdmVjX2xkKDAsICh1bnNpZ25lZCBjaGFyICopMCk7XSwKKyAJCSAgICBbaGF2ZV9hbHRpdmVjPXllczsgQUNfTVNHX1JFU1VMVChubyldLAorIAkJICAgIFtBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGFsdGl2ZWMuaD5dLAorLQkJCVt0eXBlZGVmIHZlY3RvciBpbnQgdDsgdmVjX2xkKDAsICh1bnNpZ25lZCBjaGFyICopMCk7XSwKKysJCQlbdHlwZWRlZiB2ZWN0b3IgaW50IHQ7IGludCB0bXAgPSBfX0NSNl9FUTsgdmVjX2xkKDAsICh1bnNpZ25lZCBjaGFyICopMCk7XSwKKyAJCQlbQUNfREVGSU5FKFtIQVZFX0FMVElWRUNfSF0sLAorIAkJCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhbHRpdmVjLmg+IGhlYWRlci5dKQorIAkJCSBoYXZlX2FsdGl2ZWM9eWVzOyBBQ19NU0dfUkVTVUxUKHllcyldLApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9tcGVnMmRlYy9tcGVnMmRlY18wLjQuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRlMmJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvbXBlZzJkZWMvbXBlZzJkZWNfMC40LjEuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGFuZCB0ZXN0IHByb2dyYW0gZm9yIGRlY29kaW5nIE1QRUctMiBhbmQgTVBFRy0xIHZpZGVvIHN0cmVhbXMiCitIT01FUEFHRSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9tcGVnMi5oO2JlZ2lubGluZT0xO2VuZGxpbmU9MjI7bWQ1PWVhZDYyNjAyZDQ2MzgzMjlkM2I1Yjg2YTU1ODAzMTU0IgorCitQUiA9ICJyMiIKKworU1JDX1VSSSA9ICJodHRwOi8vbGlibXBlZzIuc291cmNlZm9yZ2UubmV0L2ZpbGVzL21wZWcyZGVjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9hbHRpdmVjX2hfbmVlZGVkLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzYzMWIwYTRiY2ZkZDBkNzhjMGJiMDA4MzA4MGIwZGMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYzc0YTc2MDY4ZjhlYzM2ZDRiYjU5YTAzYmYxMTU3YmU0NDExOGNhMDIyNTIxODBlOGIzNThiMGI1ZTNlZGVlZSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQgLS1kaXNhYmxlLXNkbCIKKworUEFDS0FHRUNPTkZJRyA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdbeDExXSA9ICItLXdpdGgteCwtLXdpdGhvdXQteCx2aXJ0dWFsL2xpYngxMSBsaWJ4ZXh0IGxpYnh2IgorCitQQUNLQUdFUyA9ICJtcGVnMmRlYy1kYmcgbXBlZzJkZWMgbXBlZzJkZWMtZG9jIGxpYm1wZWcyIGxpYm1wZWcyLWRldiBsaWJtcGVnMmNvbnZlcnQgbGlibXBlZzJjb252ZXJ0LWRldiBsaWJtcGVnMi1zdGF0aWNkZXYgbGlibXBlZzJjb252ZXJ0LXN0YXRpY2RldiIKKworRklMRVNfJHtQTn0gPSAiJHtiaW5kaXJ9LyoiCitGSUxFU19saWJtcGVnMiA9ICIke2xpYmRpcn0vbGlibXBlZzIuc28uKiIKK0ZJTEVTX2xpYm1wZWcyY29udmVydCA9ICIke2xpYmRpcn0vbGlibXBlZzJjb252ZXJ0LnNvLioiCitGSUxFU19saWJtcGVnMi1kZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGlibXBlZzIubGEgXAorICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvbGlibXBlZzIucGMgXAorICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzIuaCIKK0ZJTEVTX2xpYm1wZWcyLXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGlibXBlZzIuYSIKK0ZJTEVTX2xpYm1wZWcyY29udmVydC1kZXYgPSAiJHtsaWJkaXJ9L2xpYm1wZWcyY29udmVydC5zbyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQubGEgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcGtnY29uZmlnL2xpYm1wZWcyY29udmVydC5wYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vbXBlZzJkZWMvbXBlZzJjb252ZXJ0LmgiCitGSUxFU19saWJtcGVnMmNvbnZlcnQtc3RhdGljZGV2ID0gIiR7bGliZGlyfS9saWJtcGVnMmNvbnZlcnQuYSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby5pbmMgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViODA2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8uaW5jCkBAIC0wLDAgKzEsMTk3IEBACitTVU1NQVJZID0gIlNvdW5kIHNlcnZlciBmb3IgTGludXggYW5kIFVuaXgtbGlrZSBvcGVyYXRpbmcgc3lzdGVtcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucHVsc2VhdWRpby5vcmciCitBVVRIT1IgPSAiTGVubmFydCBQb2V0dGVyaW5nIgorU0VDVElPTiA9ICJsaWJzL211bHRpbWVkaWEiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vR1BMO21kNT00MzI1YWZkMzk2ZmViY2I2NTljMzZiNDk1MzMxMzVkNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcHVsc2Vjb3JlL3Jlc2FtcGxlci5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjE7bWQ1PTA5Nzk0MDEyYWUxNjkxMmMwMjcwZjMyODBjYzhmZjg0IgorCitERVBFTkRTID0gImxpYmF0b21pYy1vcHMgbGlib2lsIGxpYnNuZGZpbGUxIGxpYnRvb2wiCisjIG9wdGlvbmFsCitERVBFTkRTICs9ICJ1ZGV2IGFsc2EtbGliIGdsaWItMi4wIGdjb25mIgorREVQRU5EUyArPSAianNvbi1jIGdkYm0gc3BlZXhkc3AgbGlieG1sLXBhcnNlci1wZXJsLW5hdGl2ZSBsaWJjYXAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB1c2VyYWRkIGdldHRleHQgcGVybG5hdGl2ZSBibHVldG9vdGggc3lzdGVtZAorCisjICouZGVza3RvcCBydWxlcyB3b250IGJlIGdlbmVyYXRlZCBkdXJpbmcgY29uZmlndXJlIGFuZCBidWlsZCB3aWxsIGZhaWwKKyMgaWYgdXNpbmcgLS1kaXNhYmxlLW5scworVVNFX05MUyA9ICJ5ZXMiCisKK0VYVFJBX09FQ09ORiA9ICJcCisJCS0tZGlzYWJsZS1oYWwtY29tcGF0IFwKKwkJLS1kaXNhYmxlLW9yYyBcCisJCS0tZW5hYmxlLXRjcHdyYXA9bm8gXAorCQktLXdpdGgtYWNjZXNzLWdyb3VwPWF1ZGlvIFwKKwkJLS1kaXNhYmxlLW9wZW5zc2wgXAorCQktLWRpc2FibGUteGVuIFwKKwkJLS13aXRoLWRhdGFiYXNlPXNpbXBsZSBcCisJCS0td2l0aG91dC1mZnR3IFwKKwkJLS13aXRob3V0LXpzaC1jb21wbGV0aW9uLWRpciBcCisJCS0td2l0aC11ZGV2LXJ1bGVzLWRpcj1gcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXVkZXZkaXIgdWRldmAvcnVsZXMuZCBcCisgICAgICAgICAgICAgICAgYWNfY3ZfaGVhZGVyX3ZhbGdyaW5kX21lbWNoZWNrX2g9bm8gXAorIgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdibHVldG9vdGgnLCAnJHtCTFVFWn0nLCAnJywgZCl9IFwKKyAgICAgICAgICAgICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3plcm9jb25mJywgJ2F2YWhpJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4MTEnLCAneDExJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICczZycsICdvZm9ubycsICcnLCBkKX0gXAorICAgICAgICAgICAgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnc3lzdGVtZCcsICdzeXN0ZW1kJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgZGJ1cyBcCisgICAgICAgICAgICAgICAgICAgIgorCitQQUNLQUdFQ09ORklHW2RidXNdID0gIi0tZW5hYmxlLWRidXMsLS1kaXNhYmxlLWRidXMsZGJ1cyIKK1BBQ0tBR0VDT05GSUdbYmx1ZXo0XSA9ICItLWVuYWJsZS1ibHVlejQsLS1kaXNhYmxlLWJsdWV6NCxibHVlejQgc2JjIgorUEFDS0FHRUNPTkZJR1tibHVlejVdID0gIi0tZW5hYmxlLWJsdWV6NSwtLWRpc2FibGUtYmx1ZXo1LGJsdWV6NSBzYmMiCitQQUNLQUdFQ09ORklHW29mb25vXSA9ICItLWVuYWJsZS1ibHVlejUtb2Zvbm8taGVhZHNldCwtLWRpc2FibGUtYmx1ZXo1LW9mb25vLWhlYWRzZXQsb2Zvbm8iCitQQUNLQUdFQ09ORklHW2d0a10gPSAiLS1lbmFibGUtZ3RrMywtLWRpc2FibGUtZ3RrMyxndGsrMyIKK1BBQ0tBR0VDT05GSUdbc3lzdGVtZF0gPSAiLS1lbmFibGUtc3lzdGVtZC1kYWVtb24gLS1lbmFibGUtc3lzdGVtZC1sb2dpbiAtLWVuYWJsZS1zeXN0ZW1kLWpvdXJuYWwgLS13aXRoLXN5c3RlbWR1c2VydW5pdGRpcj0ke3N5c3RlbWRfdXNlcl91bml0ZGlyfSwtLWRpc2FibGUtc3lzdGVtZC1kYWVtb24gLS1kaXNhYmxlLXN5c3RlbWQtbG9naW4gLS1kaXNhYmxlLXN5c3RlbWQtam91cm5hbCxzeXN0ZW1kIgorUEFDS0FHRUNPTkZJR1t4MTFdID0gIi0tZW5hYmxlLXgxMSwtLWRpc2FibGUteDExLHZpcnR1YWwvbGlieDExIGxpYnh0c3QgbGliaWNlIGxpYnNtIGxpYnhjYiIKK1BBQ0tBR0VDT05GSUdbYXZhaGldID0gIi0tZW5hYmxlLWF2YWhpLC0tZGlzYWJsZS1hdmFoaSxhdmFoaSIKK1BBQ0tBR0VDT05GSUdbamFja10gPSAiLS1lbmFibGUtamFjaywtLWRpc2FibGUtamFjayxqYWNrIgorIyBTaW5jZSBtYW55IGVtYmVkZGVkIHN5c3RlbXMgZG9uJ3QgaGF2ZSBub24tcm9vdCB1c2VycywgaXQncyB1c2VmdWwgdG8gYmUKKyMgYWJsZSB0byB1c2UgcHVsc2VhdWRpbyBhdXRvc3Bhd24gZm9yIHJvb3QgYXMgd2VsbC4KK1BBQ0tBR0VDT05GSUdbYXV0b3NwYXduLWZvci1yb290XSA9ICIsLCwiCisKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtLWVuYWJsZS1uZW9uLW9wdD1ubyIsIGQpfSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfYXJtZWIgPSAiJHtAYmIudXRpbHMuY29udGFpbnMoIlRVTkVfRkVBVFVSRVMiLCAibmVvbiIsICIiLCAiIC0tZW5hYmxlLW5lb24tb3B0PW5vIiwgZCl9IgorCisKK2V4cG9ydCBUQVJHRVRfUEZQVSA9ICIke1RBUkdFVF9GUFV9IgorCisjIFRPRE86IFVzZSBtb3JlIGZpbmUgZ3JhbnVsYXIgdmVyc2lvbgorI09FX0xUX1JQQVRIX0FMTE9XPSI6JHtsaWJkaXJ9L3B1bHNlLTAuOToiCitPRV9MVF9SUEFUSF9BTExPVyA9ICJhbnkiCitPRV9MVF9SUEFUSF9BTExPV1tleHBvcnRdPSIxIgorCitzZXRfY2ZnX3ZhbHVlICgpIHsKKwlzZWQgLWkgLWUgInMvXCg7ICpcKVw/JDIgPS4qLyQyID0gJDMvIiAiJDEiCisJaWYgISBncmVwIC1xICJeJDIgPSAkM1wkIiAiJDEiOyB0aGVuCisJCWRpZSAiVXNlIG9mIHNlZCB0byBzZXQgJyQyJyB0byAnJDMnIGluICckMScgZmFpbGVkIgorCWZpCit9CisKK2RvX2NvbXBpbGVfYXBwZW5kICgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnUEFDS0FHRUNPTkZJRycsICdhdXRvc3Bhd24tZm9yLXJvb3QnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlzZXRfY2ZnX3ZhbHVlIHNyYy9jbGllbnQuY29uZiBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QgeWVzCisJZmkKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3ZvbGF0aWxlcy4wNF9wdWxzZSAgJHtEfSR7c3lzY29uZmRpcn0vZGVmYXVsdC92b2xhdGlsZXMvdm9sYXRpbGVzLjA0X3B1bHNlCit9CisKK1VTRVJBRERfUEFDS0FHRVMgPSAicHVsc2VhdWRpby1zZXJ2ZXIiCitHUk9VUEFERF9QQVJBTV9wdWxzZWF1ZGlvLXNlcnZlciA9ICJwdWxzZSIKK1VTRVJBRERfUEFSQU1fcHVsc2VhdWRpby1zZXJ2ZXIgPSAiLS1zeXN0ZW0gLS1ob21lIC92YXIvcnVuL3B1bHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbm8tY3JlYXRlLWhvbWUgLS1zaGVsbCAvYmluL2ZhbHNlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tZ3JvdXBzIGF1ZGlvLHB1bHNlIC0tZ2lkIHB1bHNlIHB1bHNlIgorCisjIFRoZSBjb25zb2xlLWtpdCBtb2R1bGUgaXMgaW5jbHVkZWQgaGVyZSBleHBsaWNpdGx5IHNvIGJpdGJha2UgY2FuIG1hcCB0byB0aGUKKyMgUkRFUEVORFMgd2UgZGVmaW5lIGZvciBpdCBpbiB0aGlzIHJlY2lwZSwgYW5kIHRoZXJlYnkgZW5zdXJlIHRoYXQgd2hlbgorIyBhZGRpbmcgdGhlIGNvbnNvbGUta2l0IG1vZHVsZSB0byBhbiBpbWFnZSwgd2UgYWxzbyBnZXQgdGhlIG5lY2Vzc2FyeQorIyBjb25zb2xla2l0IHBhY2thZ2UgcHJvZHVjZWQuCitQQUNLQUdFUyA9KyAibGlicHVsc2Vjb3JlIGxpYnB1bHNlY29tbW9uIGxpYnB1bHNlIGxpYnB1bHNlLXNpbXBsZSBsaWJwdWxzZS1tYWlubG9vcC1nbGliIFwKKyAgICAgICAgICAgICBwdWxzZWF1ZGlvLXNlcnZlciBwdWxzZWF1ZGlvLW1pc2MgJHtAYmIudXRpbHMuY29udGFpbnMoJ1BBQ0tBR0VDT05GSUcnLCAnZGJ1cycsICdwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCcsICcnLCBkKX0iCisKKyN1cGdyYWRlIHBhdGg6CitSUkVQTEFDRVNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAibGlicHVsc2UtYmluIGxpYnB1bHNlLWNvbmYiCisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5wdWxzZWF1ZGlvLWxpYi0uKiBecHVsc2VhdWRpby1tb2R1bGUtLioiCisKK0ZJTEVTX2xpYnB1bHNlY29yZSA9ICIke2xpYmRpcn0vbGlicHVsc2Vjb3JlKi5zbyIKK0ZJTEVTX2xpYnB1bHNlY29tbW9uID0gIiR7bGliZGlyfS9wdWxzZWF1ZGlvL2xpYnB1bHNlY29tbW9uKi5zbyIKKworIyBjbGllbnQuY29uZiBjb25maWd1cmVzIHRoZSBiZWhhdmlvdXIgb2YgbGlicHVsc2UsIHNvIGl0IGJlbG9uZ3MgaW4gdGhlIHNhbWUKKyMgcGFja2FnZS4KK0ZJTEVTX2xpYnB1bHNlID0gIiR7bGliZGlyfS9saWJwdWxzZS5zby4qICR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYiCisKK0ZJTEVTX2xpYnB1bHNlLXNpbXBsZSA9ICIke2xpYmRpcn0vbGlicHVsc2Utc2ltcGxlLnNvLioiCitGSUxFU19saWJwdWxzZS1tYWlubG9vcC1nbGliID0gIiR7bGliZGlyfS9saWJwdWxzZS1tYWlubG9vcC1nbGliLnNvLioiCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJleGVjZGlyfS9wdWxzZS8uZGVidWcgXAorICAgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vcHVsc2UtJHtQVn0vbW9kdWxlcy8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9wdWxzZS0ke1BWfS9tb2R1bGVzLyoubGEgJHtkYXRhZGlyfS92YWxhICR7bGliZGlyfS9jbWFrZSIgICAKK0ZJTEVTXyR7UE59LWNvbmYgPSAiJHtzeXNjb25mZGlyfSIKK0ZJTEVTXyR7UE59LWJpbiArPSAiJHtzeXNjb25mZGlyfS9kZWZhdWx0L3ZvbGF0aWxlcy92b2xhdGlsZXMuMDRfcHVsc2UiCitGSUxFU18ke1BOfS1zZXJ2ZXIgPSAiJHtiaW5kaXJ9L3B1bHNlYXVkaW8gJHtiaW5kaXJ9L3N0YXJ0LSogJHtzeXNjb25mZGlyfSAke2JpbmRpcn0vcGFjdGwgKi91ZGV2L3J1bGVzLmQvKi5ydWxlcyAqLyovdWRldi9ydWxlcy5kLyoucnVsZXMgJHtzeXN0ZW1kX3VzZXJfdW5pdGRpcn0vKiIKKworI1NZU1RFTURfUEFDS0FHRVMgPSAiJHtQTn0tc2VydmVyIgorU1lTVEVNRF9TRVJWSUNFXyR7UE59LXNlcnZlciA9ICJwdWxzZWF1ZGlvLnNlcnZpY2UiCisKK0ZJTEVTXyR7UE59LW1pc2MgPSAiJHtiaW5kaXJ9LyogJHtsaWJkaXJ9L3B1bHNlYXVkaW8vbGlicHVsc2Vkc3Auc28iCisKKyMgQWxsb3cgdGhlIHB1bHNlYXVkaW8gcGFja2FnZSB0byBiZSBjcmVhdGVkIGVtcHR5IGFzIGEgcGxhY2Vob2xkZXIgKC1kYmcgYW5kIC1kZXYgZGVwZW5kIG9uIGl0KQorQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworQ09ORkZJTEVTX2xpYnB1bHNlID0gIiR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYiCisKK0NPTkZGSUxFU19wdWxzZWF1ZGlvLXNlcnZlciA9ICJcIAorICAke3N5c2NvbmZkaXJ9L3B1bHNlL2RlZmF1bHQucGEgXAorICAke3N5c2NvbmZkaXJ9L3B1bHNlL2RhZW1vbi5jb25mIFwKKyAgJHtzeXNjb25mZGlyfS9wdWxzZS9zeXN0ZW0ucGEgXAorICAiCisKK3BrZ19wb3N0aW5zdF8ke1BOfS1zZXJ2ZXIoKSB7CisgICAgICAgIGlmIFsgLXogIiREIiBdICYmIFsgLWUgJHtzeXNjb25mZGlyfS9pbml0LmQvcG9wdWxhdGUtdm9sYXRpbGUuc2ggXSA7IHRoZW4KKyAgICAgICAgICAgICR7c3lzY29uZmRpcn0vaW5pdC5kL3BvcHVsYXRlLXZvbGF0aWxlLnNoIHVwZGF0ZQorICAgICAgICBmaQorfQorCitweXRob24gcG9wdWxhdGVfcGFja2FnZXNfcHJlcGVuZCgpIHsKKyAgICAjZC5zZXRWYXIoJ1BLR19wdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nKQorCisgICAgcGx1Z2luZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS9wdWxzZS0ke1BWfS9tb2R1bGVzLycpCisgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGx1Z2luZGlyLCAnXm1vZHVsZS0oLiopXC5zbyQnLCAncHVsc2VhdWRpby1tb2R1bGUtJXMnLCAnUHVsc2VBdWRpbyBtb2R1bGUgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJywgcHJlcGVuZD1UcnVlKQorICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIHBsdWdpbmRpciwgJ15saWIoLiopXC5zbyQnLCAncHVsc2VhdWRpby1saWItJXMnLCAnUHVsc2VBdWRpbyBsaWJyYXJ5IGZvciAlcycsIGV4dHJhX2RlcGVuZHM9JycsIHByZXBlbmQ9VHJ1ZSkKK30KKworUkRFUEVORFNfcHVsc2VhdWRpby1zZXJ2ZXIgPSAiIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1maWx0ZXItYXBwbHkgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWZpbHRlci1oZXVyaXN0aWNzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS11ZGV2LWRldGVjdCBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtbnVsbC1zaW5rIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZXZpY2UtcmVzdG9yZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtc3RyZWFtLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWNhcmQtcmVzdG9yZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1kZXRlY3QgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2Etc2luayBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYWxzYS1zb3VyY2UgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWFsc2EtY2FyZCBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtbmF0aXZlLXByb3RvY29sLXVuaXggXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWRlZmF1bHQtZGV2aWNlLXJlc3RvcmUgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLWludGVuZGVkLXJvbGVzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1yZXNjdWUtc3RyZWFtcyBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtYWx3YXlzLXNpbmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN1c3BlbmQtb24taWRsZSBcCisgICAgcHVsc2VhdWRpby1tb2R1bGUtcG9zaXRpb24tZXZlbnQtc291bmRzIFwKKyAgICBwdWxzZWF1ZGlvLW1vZHVsZS1yb2xlLWNvcmsgXAorICAgIHB1bHNlYXVkaW8tbW9kdWxlLXN3aXRjaC1vbi1wb3J0LWF2YWlsYWJsZSIKKworIyBJZiB0aGUgc2VydmVyIGlzIGluc3RhbGxlZCwgaXQncyB1c3VhbGx5IGRlc2lyYWJsZSB0byBtYWtlIEFMU0EgYXBwbGljYXRpb25zCisjIHVzZSBQdWxzZUF1ZGlvLiBhbHNhLXBsdWdpbnMtcHVsc2VhdWRpby1jb25mIHdpbGwgaW5zdGFsbCB0aGUgY29uZmlndXJhdGlvbgorIyB0aGF0IG1ha2VzIHRoZSBQdWxzZUF1ZGlvIHBsdWdpbiB0aGUgZGVmYXVsdCBBTFNBIGRldmljZS4KK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyICs9ICJhbHNhLXBsdWdpbnMtcHVsc2VhdWRpby1jb25mIgorCisjIHB1bHNlYXVkaW8tbW9kdWxlLWNvbnNvbGUta2l0IGlzIGJ1aWx0IHdoZW5ldmVyIGRidXMgaXMgZW5hYmxlZCBieSBQQUNLQUdFQ09ORklHCisjIGJ1dCBjb25zb2xla2l0IGRlcGVuZHMgb24gbGlieDExIGFuZCBpcyBhdmFpbGFibGUgb25seSBmb3IgRElTVFJPIHdpdGggeDExIGluIERJU1RST19GRUFUVVJFUworUkRFUEVORFNfcHVsc2VhdWRpby1tb2R1bGUtY29uc29sZS1raXQgPSsgIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ2NvbnNvbGVraXQnLCAnJywgZCl9IgorUkRFUEVORFNfcHVsc2VhdWRpby1taXNjICs9ICJwdWxzZWF1ZGlvLW1vZHVsZS1jbGktcHJvdG9jb2wtdW5peCIKKworRklMRVNfcHVsc2VhdWRpby1tb2R1bGUtZ2NvbmYgKz0gIiR7bGliZXhlY2Rpcn0vcHVsc2UvZ2NvbmYtaGVscGVyIgorRklMRVNfcHVsc2VhdWRpby1tb2R1bGUtYWxzYS1jYXJkICs9ICIke2RhdGFkaXJ9L3B1bHNlYXVkaW8vYWxzYS1taXhlciIKKworIyBUaGUgY29uc29sZS1raXQgbW9kdWxlIGlzIGdvb2QgdG8gaGF2ZSBvbiBYMTEgc3lzdGVtcyAoaXQga2VlcHMgUHVsc2VBdWRpbworIyBydW5uaW5nIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHVzZXIgbG9naW4gc2Vzc2lvbikuIFRoZSBkZXZpY2UtbWFuYWdlciBhbmQKKyMgeDExLSogbW9kdWxlcyBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSBzdGFydC1wdWxzZWF1ZGlvLXgxMSBzY3JpcHQsIHNvIHRob3NlCisjIG1vZHVsZXMgbXVzdCBiZSBpbnN0YWxsZWQgd2hlbiBYMTEgaXMgZW5hYmxlZC4KK1JERVBFTkRTX3B1bHNlYXVkaW8tc2VydmVyICs9ICJcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ1wKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS1jb25zb2xlLWtpdCBcCisgICAgICAgICAgICAgICAgcHVsc2VhdWRpby1tb2R1bGUtZGV2aWNlLW1hbmFnZXIgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLXgxMS1jb3JrLXJlcXVlc3QgXAorICAgICAgICAgICAgICAgIHB1bHNlYXVkaW8tbW9kdWxlLXgxMS1wdWJsaXNoIFwKKyAgICAgICAgICAgICAgICBwdWxzZWF1ZGlvLW1vZHVsZS14MTEteHNtcCBcCisgICAgICAgICcsICcnLCBkKX0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTllYjdjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY2xpZW50LWNvbmYtQWRkLWFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdC5wYXRjaApAQCAtMCwwICsxLDkyIEBACitGcm9tIDFjYjU2NDdmNzZkYzhjZDdiYWNiY2UyYTY0ZmFjOWU2YzJkYzNiMTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMjggQXByIDIwMTUgMTQ6MzI6NDMgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY2xpZW50LWNvbmY6IEFkZCBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3QKKworVXN1YWxseSBhdXRvc3Bhd25pbmcgZm9yIHJvb3QgaXMgYSBiYWQgaWRlYSwgc2luY2UgaXQgY2FuIGVhc2lseQoraW50ZXJmZXJlIHdpdGggb3RoZXIgdXNlcnMnIFB1bHNlQXVkaW8gaW5zdGFuY2VzLCBidXQgaW4gZW1iZWRkZWQKK2Vudmlyb25tZW50cyB3aGVyZSBvbmx5IHJvb3QgZXhpc3RzLCBhdXRvc3Bhd25pbmcgaXMgZmluZS4KKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQgW2h0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAuYXVkaW8ucHVsc2VhdWRpby5nZW5lcmFsLzIzNTQ5XQorCitTaWduZWQtb2ZmLWJ5OiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKy0tLQorIG1hbi9wdWxzZS1jbGllbnQuY29uZi41LnhtbC5pbiB8IDkgKysrKysrKysrCisgc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgICAgICAgIHwgMSArCisgc3JjL3B1bHNlL2NsaWVudC1jb25mLmggICAgICAgIHwgMSArCisgc3JjL3B1bHNlL2NsaWVudC5jb25mLmluICAgICAgIHwgMSArCisgc3JjL3B1bHNlL2NvbnRleHQuYyAgICAgICAgICAgIHwgMiArLQorIDUgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluIGIvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCitpbmRleCAxMDAyZGJlLi4wMDU4NDkwIDEwMDY0NAorLS0tIGEvbWFuL3B1bHNlLWNsaWVudC5jb25mLjUueG1sLmluCisrKysgYi9tYW4vcHVsc2UtY2xpZW50LmNvbmYuNS54bWwuaW4KK0BAIC03MSw2ICs3MSwxNSBAQCBMaWNlbnNlIGFsb25nIHdpdGggUHVsc2VBdWRpbzsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICAgICA8L29wdGlvbj4KKyAKKyAgICAgPG9wdGlvbj4KKysgICAgICA8cD48b3B0PmFsbG93LWF1dG9zcGF3bi1mb3Itcm9vdD08L29wdD4gQWxsb3cgYXV0b3NwYXduaW5nIGFsc28gZm9yIHJvb3QuCisrICAgICAgVGFrZXMgYSBib29sZWFuIHZhbHVlLCBkZWZhdWx0cyB0byA8b3B0Pm5vPC9vcHQ+LiBJZiB0aGUgPG9wdD5hdXRvc3Bhd24KKysgICAgICA8L29wdD4gb3B0aW9uIGlzIGRpc2FibGVkLCB0aGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0LiBBdXRvc3Bhd25pbmcgZm9yCisrICAgICAgcm9vdCBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBiZWNhdXNlIHJ1bm5pbmcgUHVsc2VBdWRpbyBhcyByb290IHdpbGwKKysgICAgICBpbnRlcmZlcmUgd2l0aCByZWd1bGFyIHVzZXJzJyBQdWxzZUF1ZGlvIGluc3RhbmNlcy4gVGhpcyBvcHRpb24gc2hvdWxkIGJlCisrICAgICAgZW5hYmxlZCBvbmx5IGluIGVudmlyb25tZW50cyB3aGVyZSB0aGVyZSBhcmUgbm8gcmVndWxhciB1c2VycyBhdCBhbGwuPC9wPgorKyAgICA8L29wdGlvbj4KKysKKysgICAgPG9wdGlvbj4KKyAgICAgICA8cD48b3B0PmRhZW1vbi1iaW5hcnk9PC9vcHQ+IFBhdGggdG8gdGhlIFB1bHNlQXVkaW8gZGFlbW9uIHRvCisgICAgICAgcnVuIHdoZW4gYXV0b3NwYXduaW5nLiBEZWZhdWx0cyB0byBhIHBhdGggY29uZmlndXJlZCBhdCBjb21waWxlCisgICAgICAgdGltZS48L3A+CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworaW5kZXggODMzMzFmOC4uMDQ3NDU4MyAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworQEAgLTEzOCw2ICsxMzgsNyBAQCB2b2lkIHBhX2NsaWVudF9jb25mX2xvYWQocGFfY2xpZW50X2NvbmYgKmMsIGJvb2wgbG9hZF9mcm9tX3gxMSwgYm9vbCBsb2FkX2Zyb21fZQorICAgICAgICAgeyAiZGVmYXVsdC1zZXJ2ZXIiLCAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmRlZmF1bHRfc2VydmVyLCBOVUxMIH0sCisgICAgICAgICB7ICJkZWZhdWx0LWRidXMtc2VydmVyIiwgICAgcGFfY29uZmlnX3BhcnNlX3N0cmluZywgICAmYy0+ZGVmYXVsdF9kYnVzX3NlcnZlciwgTlVMTCB9LAorICAgICAgICAgeyAiYXV0b3NwYXduIiwgICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ib29sLCAgICAgJmMtPmF1dG9zcGF3biwgTlVMTCB9LAorKyAgICAgICAgeyAiYWxsb3ctYXV0b3NwYXduLWZvci1yb290IiwgcGFfY29uZmlnX3BhcnNlX2Jvb2wsICAgJmMtPmFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdCwgTlVMTCB9LAorICAgICAgICAgeyAiY29va2llLWZpbGUiLCAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9zdHJpbmcsICAgJmMtPmNvb2tpZV9maWxlX2Zyb21fY2xpZW50X2NvbmYsIE5VTEwgfSwKKyAgICAgICAgIHsgImRpc2FibGUtc2htIiwgICAgICAgICAgICBwYV9jb25maWdfcGFyc2VfYm9vbCwgICAgICZjLT5kaXNhYmxlX3NobSwgTlVMTCB9LAorICAgICAgICAgeyAiZW5hYmxlLXNobSIsICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZV9ub3RfYm9vbCwgJmMtPmRpc2FibGVfc2htLCBOVUxMIH0sCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmggYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAoraW5kZXggZWFjNzA1YS4uMTMxMzkzYSAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5oCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuaAorQEAgLTM4LDYgKzM4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgcGFfY2xpZW50X2NvbmYgeworICAgICBjaGFyICpjb29raWVfZmlsZV9mcm9tX2FwcGxpY2F0aW9uOworICAgICBjaGFyICpjb29raWVfZmlsZV9mcm9tX2NsaWVudF9jb25mOworICAgICBib29sIGF1dG9zcGF3biwgZGlzYWJsZV9zaG0sIGF1dG9fY29ubmVjdF9sb2NhbGhvc3QsIGF1dG9fY29ubmVjdF9kaXNwbGF5OworKyAgICBib29sIGFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdDsKKyAgICAgc2l6ZV90IHNobV9zaXplOworIH0gcGFfY2xpZW50X2NvbmY7CisgCitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluIGIvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCitpbmRleCAyNmI3NzkwLi42OTgzMGVmIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NsaWVudC5jb25mLmluCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LmNvbmYuaW4KK0BAIC0yMyw2ICsyMyw3IEBACisgOyBkZWZhdWx0LWRidXMtc2VydmVyID0KKyAKKyA7IGF1dG9zcGF3biA9IHllcworKzsgYWxsb3ctYXV0b3NwYXduLWZvci1yb290ID0gbm8KKyA7IGRhZW1vbi1iaW5hcnkgPSBAUEFfQklOQVJZQAorIDsgZXh0cmEtYXJndW1lbnRzID0gLS1sb2ctdGFyZ2V0PXN5c2xvZworIAorZGlmZiAtLWdpdCBhL3NyYy9wdWxzZS9jb250ZXh0LmMgYi9zcmMvcHVsc2UvY29udGV4dC5jCitpbmRleCA0YmM0NDVmLi5kNmMzZjZkIDEwMDY0NAorLS0tIGEvc3JjL3B1bHNlL2NvbnRleHQuYworKysrIGIvc3JjL3B1bHNlL2NvbnRleHQuYworQEAgLTk3Niw3ICs5NzYsNyBAQCBpbnQgcGFfY29udGV4dF9jb25uZWN0KAorICAgICBpZiAoIShmbGFncyAmIFBBX0NPTlRFWFRfTk9BVVRPU1BBV04pICYmIGMtPmNvbmYtPmF1dG9zcGF3bikgeworIAorICNpZmRlZiBIQVZFX0dFVFVJRAorLSAgICAgICAgaWYgKGdldHVpZCgpID09IDApCisrICAgICAgICBpZiAoIWMtPmNvbmYtPmFsbG93X2F1dG9zcGF3bl9mb3Jfcm9vdCAmJiBnZXR1aWQoKSA9PSAwKQorICAgICAgICAgICAgIHBhX2xvZ19kZWJ1ZygiTm90IGRvaW5nIGF1dG9zcGF3biBzaW5jZSB3ZSBhcmUgcm9vdC4iKTsKKyAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgIGMtPmRvX2F1dG9zcGF3biA9IHRydWU7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLWNvbmYtcGFyc2VyLWFkZC1zdXBwb3J0LWZvci0uZC1kaXJlY3Rvcmllcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWYxYjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtY29uZi1wYXJzZXItYWRkLXN1cHBvcnQtZm9yLS5kLWRpcmVjdG9yaWVzLnBhdGNoCkBAIC0wLDAgKzEsMTk2IEBACitGcm9tIDhjYjY0M2JiZjBhMjg3ZDY3Nzk0ZTY4MGQyNmY0OWM1MDNmMzEwNTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFRodSwgMjEgTWF5IDIwMTUgMjE6MDA6NTkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gY29uZi1wYXJzZXI6IGFkZCBzdXBwb3J0IGZvciAuZCBkaXJlY3RvcmllcworCitUaGlzIGFsbG93cyBhIGNvbmZpZ3VyYXRpb24gc2NoZW1lIHdoZXJlIHByaW9yIHRvIGxvYWRpbmcKK2NvbmZpZ3VyYXRpb24gZnJvbSAic29tZWZpbGUiLCB0aGUgcGFyc2VyIGZpcnN0IGxvYWRzIGNvbmZpZ3VyYXRpb24KK2Zyb20gZmlsZXMgaW4gZGlyZWN0b3J5ICJzb21lZmlsZS5kIi4gVGhpcyBmZWF0dXJlIGlzIGN1cnJlbnRseQorZW5hYmxlZCBvbmx5IGZvciBjbGllbnQuY29uZiBhbmQgZGFlbW9uLmNvbmYuCisKK1RoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNyZWF0ZSBjb25maWd1cmF0aW9uIHBhY2thZ2VzIGluIGRpc3RyaWJ1dGlvbnMKK3doZW4gdGhlcmUncyBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gaW4gZGlmZmVyZW50IHNldHVwcy4KK0ZvciBleGFtcGxlLCB0aGUgZ3JhcGhpY2FsIFNhdG8gZW52aXJvbm1lbnQgaW4gT3BlbkVtYmVkZGVkLWNvcmUgbmVlZHMKK3RvIHNldCBhbGxvdy1hdXRvc3Bhd24tZm9yLXJvb3Q9dHJ1ZSBpbiBjbGllbnQuY29uZiwgYnV0IHRoZSBkZWZhdWx0Citjb25maWd1cmF0aW9uIGluIE9wZW5FbWJlZGRlZC1jb3JlIHNob3VsZCBub3Qgc2V0IHRoYXQgb3B0aW9uLiBXaXRoCit0aGlzIHBhdGNoLCBJIGNhbiBjcmVhdGUgYSBTYXRvLXNwZWNpZmljIHBhY2thZ2UgdGhhdCBzaW1wbHkgaW5zdGFsbHMKKzUwLXNhdG8uY29uZiBpbiAvZXRjL3B1bHNlL2NsaWVudC5jb25mLmQgd2l0aG91dCBjb25mbGljdGluZyB3aXRoIHRoZQorbWFpbiBjbGllbnQuY29uZiBmaWxlIGNvbWluZyBmcm9tIGEgZGlmZmVyZW50IHBhY2thZ2UuCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkIFtodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLmF1ZGlvLnB1bHNlYXVkaW8uZ2VuZXJhbC8yMzU5Ml0KKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBzcmMvZGFlbW9uL2RhZW1vbi1jb25mLmMgICAgICAgICAgICAgICAgfCAgMiArLQorIHNyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jICAgICAgICAgICB8ICA0ICsrLS0KKyBzcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMgfCAgMiArLQorIHNyYy9wdWxzZS9jbGllbnQtY29uZi5jICAgICAgICAgICAgICAgICB8ICAyICstCisgc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5jICAgICAgICAgICAgIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCisgc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oICAgICAgICAgICAgIHwgIDggKysrKysrLQorIDYgZmlsZXMgY2hhbmdlZCwgNTIgaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYyBiL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworaW5kZXggMjFhOGVkYi4uMTMzMmZjNiAxMDA2NDQKKy0tLSBhL3NyYy9kYWVtb24vZGFlbW9uLWNvbmYuYworKysrIGIvc3JjL2RhZW1vbi9kYWVtb24tY29uZi5jCitAQCAtNjE3LDcgKzYxNyw3IEBAIGludCBwYV9kYWVtb25fY29uZl9sb2FkKHBhX2RhZW1vbl9jb25mICpjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkgeworICAgICBjaS5kZWZhdWx0X2NoYW5uZWxfbWFwX3NldCA9IGNpLmRlZmF1bHRfc2FtcGxlX3NwZWNfc2V0ID0gZmFsc2U7CisgICAgIGNpLmNvbmYgPSBjOworIAorLSAgICByID0gZiA/IHBhX2NvbmZpZ19wYXJzZShjLT5jb25maWdfZmlsZSwgZiwgdGFibGUsIE5VTEwsIE5VTEwpIDogMDsKKysgICAgciA9IGYgPyBwYV9jb25maWdfcGFyc2UoYy0+Y29uZmlnX2ZpbGUsIGYsIHRhYmxlLCBOVUxMLCB0cnVlLCBOVUxMKSA6IDA7CisgCisgICAgIGlmIChyID49IDApIHsKKyAKK2RpZmYgLS1naXQgYS9zcmMvbW9kdWxlcy9hbHNhL2Fsc2EtbWl4ZXIuYyBiL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCitpbmRleCAyMzE0NjEyLi45ODhiNGZlIDEwMDY0NAorLS0tIGEvc3JjL21vZHVsZXMvYWxzYS9hbHNhLW1peGVyLmMKKysrKyBiL3NyYy9tb2R1bGVzL2Fsc2EvYWxzYS1taXhlci5jCitAQCAtMjQ4Myw3ICsyNDgzLDcgQEAgcGFfYWxzYV9wYXRoKiBwYV9hbHNhX3BhdGhfbmV3KGNvbnN0IGNoYXIgKnBhdGhzX2RpciwgY29uc3QgY2hhciAqZm5hbWUsIHBhX2Fsc2EKKyAKKyAgICAgZm4gPSBwYV9tYXliZV9wcmVmaXhfcGF0aChmbmFtZSwgcGF0aHNfZGlyKTsKKyAKKy0gICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIHAtPnByb3BsaXN0LCBwKTsKKysgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgaXRlbXMsIHAtPnByb3BsaXN0LCBmYWxzZSwgcCk7CisgICAgIHBhX3hmcmVlKGZuKTsKKyAKKyAgICAgaWYgKHIgPCAwKQorQEAgLTQyODgsNyArNDI4OCw3IEBAIHBhX2Fsc2FfcHJvZmlsZV9zZXQqIHBhX2Fsc2FfcHJvZmlsZV9zZXRfbmV3KGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBwYV9jaGFubmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFfcnVuX2Zyb21fYnVpbGRfdHJlZSgpID8gUEFfU1JDRElSICIvbW9kdWxlcy9hbHNhL21peGVyL3Byb2ZpbGUtc2V0cy8iIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQV9BTFNBX1BST0ZJTEVfU0VUU19ESVIpOworIAorLSAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBpdGVtcywgTlVMTCwgcHMpOworKyAgICByID0gcGFfY29uZmlnX3BhcnNlKGZuLCBOVUxMLCBpdGVtcywgTlVMTCwgZmFsc2UsIHBzKTsKKyAgICAgcGFfeGZyZWUoZm4pOworIAorICAgICBpZiAociA8IDApCitkaWZmIC0tZ2l0IGEvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jIGIvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCitpbmRleCA0MmI2ZmQ5Li41NDFmMGU3IDEwMDY0NAorLS0tIGEvc3JjL21vZHVsZXMvbW9kdWxlLWF1Z21lbnQtcHJvcGVydGllcy5jCisrKysgYi9zcmMvbW9kdWxlcy9tb2R1bGUtYXVnbWVudC1wcm9wZXJ0aWVzLmMKK0BAIC0yMDQsNyArMjA0LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3J1bGUoc3RydWN0IHJ1bGUgKnIpIHsKKyAgICAgdGFibGVbMF0uZGF0YSA9ICZyLT5hcHBsaWNhdGlvbl9uYW1lOworICAgICB0YWJsZVsxXS5kYXRhID0gJnItPmljb25fbmFtZTsKKyAKKy0gICAgaWYgKHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgdGFibGUsIE5VTEwsIHIpIDwgMCkKKysgICAgaWYgKHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgdGFibGUsIE5VTEwsIGZhbHNlLCByKSA8IDApCisgICAgICAgICBwYV9sb2dfd2FybigiRmFpbGVkIHRvIHBhcnNlIC5kZXNrdG9wIGZpbGUgJXMuIiwgZm4pOworIAorICAgICBwYV94ZnJlZShmbik7CitkaWZmIC0tZ2l0IGEvc3JjL3B1bHNlL2NsaWVudC1jb25mLmMgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworaW5kZXggODMzMzFmOC4uM2MzMzg0ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZS9jbGllbnQtY29uZi5jCisrKysgYi9zcmMvcHVsc2UvY2xpZW50LWNvbmYuYworQEAgLTE0OSw3ICsxNDksNyBAQCB2b2lkIHBhX2NsaWVudF9jb25mX2xvYWQocGFfY2xpZW50X2NvbmYgKmMsIGJvb2wgbG9hZF9mcm9tX3gxMSwgYm9vbCBsb2FkX2Zyb21fZQorIAorICAgICBmID0gcGFfb3Blbl9jb25maWdfZmlsZShERUZBVUxUX0NMSUVOVF9DT05GSUdfRklMRSwgREVGQVVMVF9DTElFTlRfQ09ORklHX0ZJTEVfVVNFUiwgRU5WX0NMSUVOVF9DT05GSUdfRklMRSwgJmZuKTsKKyAgICAgaWYgKGYpIHsKKy0gICAgICAgIHBhX2NvbmZpZ19wYXJzZShmbiwgZiwgdGFibGUsIE5VTEwsIE5VTEwpOworKyAgICAgICAgcGFfY29uZmlnX3BhcnNlKGZuLCBmLCB0YWJsZSwgTlVMTCwgdHJ1ZSwgTlVMTCk7CisgICAgICAgICBwYV94ZnJlZShmbik7CisgICAgICAgICBmY2xvc2UoZik7CisgICAgIH0KK2RpZmYgLS1naXQgYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMgYi9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKK2luZGV4IDJkY2Q0NWEuLmQ0NzMyMzIgMTAwNjQ0CistLS0gYS9zcmMvcHVsc2Vjb3JlL2NvbmYtcGFyc2VyLmMKKysrKyBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuYworQEAgLTIxLDYgKzIxLDcgQEAKKyAjaW5jbHVkZSA8Y29uZmlnLmg+CisgI2VuZGlmCisgCisrI2luY2x1ZGUgPGRpcmVudC5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8ZXJybm8uaD4KK0BAIC0xMDMsNyArMTA0LDcgQEAgc3RhdGljIGludCBwYXJzZV9saW5lKHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgKnN0YXRlKSB7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorIAorLSAgICAgICAgciA9IHBhX2NvbmZpZ19wYXJzZShmbiwgTlVMTCwgc3RhdGUtPml0ZW1fdGFibGUsIHN0YXRlLT5wcm9wbGlzdCwgc3RhdGUtPnVzZXJkYXRhKTsKKysgICAgICAgIHIgPSBwYV9jb25maWdfcGFyc2UoZm4sIE5VTEwsIHN0YXRlLT5pdGVtX3RhYmxlLCBzdGF0ZS0+cHJvcGxpc3QsIGZhbHNlLCBzdGF0ZS0+dXNlcmRhdGEpOworICAgICAgICAgcGFfeGZyZWUocGF0aCk7CisgICAgICAgICByZXR1cm4gcjsKKyAgICAgfQorQEAgLTE1Miw4ICsxNTMsMTMgQEAgc3RhdGljIGludCBwYXJzZV9saW5lKHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgKnN0YXRlKSB7CisgICAgICAgICByZXR1cm4gbm9ybWFsX2Fzc2lnbm1lbnQoc3RhdGUpOworIH0KKyAKKytzdGF0aWMgaW50IGNvbmZfZmlsdGVyKGNvbnN0IHN0cnVjdCBkaXJlbnQgKmVudHJ5KSB7CisrICAgIHJldHVybiBwYV9lbmRzd2l0aChlbnRyeS0+ZF9uYW1lLCAiLmNvbmYiKTsKKyt9CisrCisgLyogR28gdGhyb3VnaCB0aGUgZmlsZSBhbmQgcGFyc2UgZWFjaCBsaW5lICovCistaW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgdm9pZCAqdXNlcmRhdGEpIHsKKytpbnQgcGFfY29uZmlnX3BhcnNlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBGSUxFICpmLCBjb25zdCBwYV9jb25maWdfaXRlbSAqdCwgcGFfcHJvcGxpc3QgKnByb3BsaXN0LCBib29sIHVzZV9kb3RfZCwKKysgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJkYXRhKSB7CisgICAgIGludCByID0gLTE7CisgICAgIGJvb2wgZG9fY2xvc2UgPSAhZjsKKyAgICAgcGFfY29uZmlnX3BhcnNlcl9zdGF0ZSBzdGF0ZTsKK0BAIC0xNjMsNiArMTY5LDM4IEBAIGludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wCisgCisgICAgIHBhX3plcm8oc3RhdGUpOworIAorKyAgICBpZiAodXNlX2RvdF9kKSB7CisrICAgICAgICBjaGFyICpkaXJfbmFtZTsKKysgICAgICAgIGludCBuOworKyAgICAgICAgc3RydWN0IGRpcmVudCAqKmVudHJpZXMgPSBOVUxMOworKworKyAgICAgICAgZGlyX25hbWUgPSBwYV9zcHJpbnRmX21hbGxvYygiJXMuZCIsIGZpbGVuYW1lKTsKKysKKysgICAgICAgIG4gPSBzY2FuZGlyKGRpcl9uYW1lLCAmZW50cmllcywgY29uZl9maWx0ZXIsIGFscGhhc29ydCk7CisrICAgICAgICBpZiAobiA+PSAwKSB7CisrICAgICAgICAgICAgaW50IGk7CisrCisrICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworKyAgICAgICAgICAgICAgICBjaGFyICpmaWxlbmFtZTI7CisrCisrICAgICAgICAgICAgICAgIGZpbGVuYW1lMiA9IHBhX3NwcmludGZfbWFsbG9jKCIlcyIgUEFfUEFUSF9TRVAgIiVzIiwgZGlyX25hbWUsIGVudHJpZXNbaV0tPmRfbmFtZSk7CisrICAgICAgICAgICAgICAgIHBhX2NvbmZpZ19wYXJzZShmaWxlbmFtZTIsIE5VTEwsIHQsIHByb3BsaXN0LCBmYWxzZSwgdXNlcmRhdGEpOworKyAgICAgICAgICAgICAgICBwYV94ZnJlZShmaWxlbmFtZTIpOworKworKyAgICAgICAgICAgICAgICBmcmVlKGVudHJpZXNbaV0pOworKyAgICAgICAgICAgIH0KKysKKysgICAgICAgICAgICBmcmVlKGVudHJpZXMpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKQorKyAgICAgICAgICAgICAgICBwYV9sb2dfZGVidWcoInNjYW5kaXIoXCIlc1wiKSBmYWlsZWQ6ICVzIiwgZGlyX25hbWUsIHBhX2NzdHJlcnJvcihlcnJubykpOworKyAgICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgICAgcGFfbG9nX3dhcm4oInNjYW5kaXIoXCIlc1wiKSBmYWlsZWQ6ICVzIiwgZGlyX25hbWUsIHBhX2NzdHJlcnJvcihlcnJubykpOworKyAgICAgICAgfQorKworKyAgICAgICAgcGFfeGZyZWUoZGlyX25hbWUpOworKyAgICB9CisrCisgICAgIGlmICghZiAmJiAhKGYgPSBwYV9mb3Blbl9jbG9leGVjKGZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCkgeworICAgICAgICAgICAgIHBhX2xvZ19kZWJ1ZygiRmFpbGVkIHRvIG9wZW4gY29uZmlndXJhdGlvbiBmaWxlICclcyc6ICVzIiwgZmlsZW5hbWUsIHBhX2NzdHJlcnJvcihlcnJubykpOworZGlmZiAtLWdpdCBhL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaCBiL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAoraW5kZXggZGJiNmY1Yy4uY2MyMGQ3ZCAxMDA2NDQKKy0tLSBhL3NyYy9wdWxzZWNvcmUvY29uZi1wYXJzZXIuaAorKysrIGIvc3JjL3B1bHNlY29yZS9jb25mLXBhcnNlci5oCitAQCAtNTksNiArNTksMTEgQEAgc3RydWN0IHBhX2NvbmZpZ19wYXJzZXJfc3RhdGUgeworICAqIHBhX2NvbmZpZ19pdGVtcyBpbiAqdCB0aGF0IGlzIHRlcm1pbmF0ZWQgYnkgYW4gaXRlbSB3aGVyZSBsdmFsdWUgaXMKKyAgKiBOVUxMLgorICAqCisrICogSWYgdXNlX2RvdF9kIGlzIHRydWUsIHRoZW4gYmVmb3JlIHBhcnNpbmcgdGhlIGZpbGUgbmFtZWQgYnkgdGhlIGZpbGVuYW1lCisrICogYXJndW1lbnQsIHRoZSBmdW5jdGlvbiB3aWxsIHBhcnNlIGFsbCBmaWxlcyBlbmRpbmcgd2l0aCAiLmNvbmYiIGluCisrICogYWxwaGFiZXRpY2FsIG9yZGVyIGZyb20gYSBkaXJlY3Rvcnkgd2hvc2UgbmFtZSBpcyBmaWxlbmFtZSArICIuZCIsIGlmIHN1Y2gKKysgKiBkaXJlY3RvcnkgZXhpc3RzLgorKyAqCisgICogU29tZSBjb25maWd1cmF0aW9uIGZpbGVzIG1heSBjb250YWluIGEgUHJvcGVydGllcyBzZWN0aW9uLCB3aGljaAorICAqIGlzIGEgYml0IHNwZWNpYWwuIE5vcm1hbGx5IGFsbCBhY2NlcHRlZCBsdmFsdWVzIG11c3QgYmUgcHJlZGVmaW5lZAorICAqIGluIHRoZSBwYV9jb25maWdfaXRlbSB0YWJsZSwgYnV0IGluIHRoZSBQcm9wZXJ0aWVzIHNlY3Rpb24gdGhlCitAQCAtNjgsNyArNzMsOCBAQCBzdHJ1Y3QgcGFfY29uZmlnX3BhcnNlcl9zdGF0ZSB7CisgICogcHJvcGVydGllcywgYW5kIHRob3NlIHByb3BlcnRpZXMgd2lsbCBiZSBtZXJnZWQgaW50byB0aGUgZ2l2ZW4KKyAgKiBwcm9wbGlzdC4gSWYgcHJvcGxpc3QgaXMgTlVMTCwgdGhlbiBzZWN0aW9ucyBuYW1lZCAiUHJvcGVydGllcyIKKyAgKiBhcmUgbm90IGFsbG93ZWQgYXQgYWxsIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuICovCistaW50IHBhX2NvbmZpZ19wYXJzZShjb25zdCBjaGFyICpmaWxlbmFtZSwgRklMRSAqZiwgY29uc3QgcGFfY29uZmlnX2l0ZW0gKnQsIHBhX3Byb3BsaXN0ICpwcm9wbGlzdCwgdm9pZCAqdXNlcmRhdGEpOworK2ludCBwYV9jb25maWdfcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIEZJTEUgKmYsIGNvbnN0IHBhX2NvbmZpZ19pdGVtICp0LCBwYV9wcm9wbGlzdCAqcHJvcGxpc3QsIGJvb2wgdXNlX2RvdF9kLAorKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmRhdGEpOworIAorIC8qIEdlbmVyaWMgcGFyc2VycyBmb3IgaW50ZWdlcnMsIHNpemVfdCwgYm9vbGVhbnMgYW5kIHN0cmluZ3MgKi8KKyBpbnQgcGFfY29uZmlnX3BhcnNlX2ludChwYV9jb25maWdfcGFyc2VyX3N0YXRlICpzdGF0ZSk7CistLSAKKzEuOS4zCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1NTk5NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby8wMDAxLXBhZHNwLU1ha2UtaXQtY29tcGlsZS1vbi1tdXNsLnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb20gZjZhYjNjM2FhN2ExODQxYzhhZGQwNDgyODAyOTM1NmQyYThjODhlNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBNb24sIDYgQXByIDIwMTUgMjE6NTY6MzEgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gcGFkc3A6IE1ha2UgaXQgY29tcGlsZSBvbiBtdXNsCisKK2JyZWFrIGFzc3VtcHRpb25zIG9uIGdsaWJjIGFuZCB0aGVyZSBpcyBubyBzdGF0NjQgb24gbm9uCitnbGliYyBDIGxpYnJhcmllcworCitTZWUgcHVsc2VhdWRpbyBidWcKKworaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzMTkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorLS0tCisgc3JjL3V0aWxzL3BhZHNwLmMgfCAxNSArKysrKysrKystLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL3V0aWxzL3BhZHNwLmMgYi9zcmMvdXRpbHMvcGFkc3AuYworaW5kZXggZTYxMzczYy4uNjg0NzIxYSAxMDA2NDQKKy0tLSBhL3NyYy91dGlscy9wYWRzcC5jCisrKysgYi9zcmMvdXRpbHMvcGFkc3AuYworQEAgLTIzNjgsNyArMjM2OCw3IEBAIGZhaWw6CisgICAgIHJldHVybiByZXQ7CisgfQorIAorLSNpZmRlZiBzdW4KKysjaWZuZGVmIF9fR0xJQkNfXworIGludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0LCAuLi4pIHsKKyAjZWxzZQorIGludCBpb2N0bChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgLi4uKSB7CitAQCAtMjUwOCwxMCArMjUwOCwxMyBAQCBpbnQgc3RhdChjb25zdCBjaGFyICpwYXRobmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikgeworIAorICAgICByZXR1cm4gMDsKKyB9CistCisgI2lmZGVmIEhBVkVfT1BFTjY0CistCisrI3VuZGVmIHN0YXQ2NAorKyNpZmRlZiBfX0dMSUJDX18KKyBpbnQgc3RhdDY0KGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBzdHJ1Y3Qgc3RhdDY0ICpidWYpIHsKKysjZWxzZQorK2ludCBzdGF0NjQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0ICpidWYpIHsKKysjZW5kaWYKKyAgICAgc3RydWN0IHN0YXQgb2xkYnVmOworICAgICBpbnQgcmV0OworIAorQEAgLTI1NDQsNyArMjU0Nyw3IEBAIGludCBzdGF0NjQoY29uc3QgY2hhciAqcGF0aG5hbWUsIHN0cnVjdCBzdGF0NjQgKmJ1ZikgeworIAorICAgICByZXR1cm4gMDsKKyB9CistCisrI3VuZGVmIG9wZW42NAorIGludCBvcGVuNjQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSB7CisgICAgIHZhX2xpc3QgYXJnczsKKyAgICAgbW9kZV90IG1vZGUgPSAwOworQEAgLTI2NzAsOCArMjY3Myw4IEBAIEZJTEUqIGZvcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKSB7CisgfQorIAorICNpZmRlZiBIQVZFX09QRU42NAorLQorLUZJTEUgKmZvcGVuNjQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpIHsKKysjdW5kZWYgZm9wZW42NAorK0ZJTEUgKmZvcGVuNjQoY29uc3QgY2hhciAqX19yZXN0cmljdCBmaWxlbmFtZSwgY29uc3QgY2hhciAqX19yZXN0cmljdCBtb2RlKSB7CisgCisgICAgIGRlYnVnKERFQlVHX0xFVkVMX1ZFUkJPU0UsIF9fRklMRV9fIjogZm9wZW42NCglcylcbiIsIGZpbGVuYW1lP2ZpbGVuYW1lOiJOVUxMIik7CisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL2ZpeC1naXQtdmVyc2lvbi1nZW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NDI1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpby9maXgtZ2l0LXZlcnNpb24tZ2VuLnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK2dpdC12ZXJzaW9uLWdlbiBnZXRzIGNvbmZ1c2VkIGlmIGEgdGFyYmFsbCBpcyBiZWluZyBidWlsdCBpbnNpZGUgYSBnaXQgZGlyZWN0b3J5CisoaWUgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgYSBwb2t5IGNsb25lKSwgYW5kIGVuZHMgdXAgY2FsbGluZwordGhlIHJlbGVhc2UgNi4wLWRpcnR5LiAgQWRkIGEgc2hvcnRjdXQgZXhpdCBzbyBpZiBhIHRhcmJhbGwgaXMgZGV0ZWN0ZWQgaXQKK2RvZXNuJ3QgYXR0ZW1wdCB0byBsb29rIGF0IHRoZSBnaXQgc3RhdHVzLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCAoaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTA5MzYpCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZ2l0LXZlcnNpb24tZ2VuIGIvZ2l0LXZlcnNpb24tZ2VuCitpbmRleCA3NTQ2ODg0Li4wNzliOTNlIDEwMDc1NQorLS0tIGEvZ2l0LXZlcnNpb24tZ2VuCisrKysgYi9naXQtdmVyc2lvbi1nZW4KK0BAIC04NCw3ICs4NCwxMCBAQCB0aGVuCisgICAgIHY9YGNhdCAkdGFyYmFsbF92ZXJzaW9uX2ZpbGVgIHx8IGV4aXQgMQorICAgICBjYXNlICR2IGluCisgCSokbmwqKSB2PSA7OyAjIHJlamVjdCBtdWx0aS1saW5lIG91dHB1dAorLQlbMC05XSopIDs7CisrCVswLTldKikKKysJCWVjaG8gIiR2IiB8IHRyIC1kICdcMDEyJworKwkJZXhpdCAwCisrCQk7OworIAkqKSB2PSA7OworICAgICBlc2FjCisgICAgIHRlc3QgLXogIiR2IiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW8vdm9sYXRpbGVzLjA0X3B1bHNlIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjE5OTgwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvcHVsc2VhdWRpby9wdWxzZWF1ZGlvL3ZvbGF0aWxlcy4wNF9wdWxzZQpAQCAtMCwwICsxLDIgQEAKKyMgPHR5cGU+IDxvd25lcj4gPGdyb3VwPiA8bW9kZT4gPHBhdGg+IDxsaW5rc291cmNlPgorZCBwdWxzZSBwdWxzZSAwNzU1IC92YXIvcnVuL3B1bHNlIG5vbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3B1bHNlYXVkaW8vcHVsc2VhdWRpb182LjAuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZTkwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9wdWxzZWF1ZGlvL3B1bHNlYXVkaW9fNi4wLmJiCkBAIC0wLDAgKzEsMTYgQEAKK3JlcXVpcmUgcHVsc2VhdWRpby5pbmMKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3NvZnR3YXJlL3B1bHNlYXVkaW8vcmVsZWFzZXMvJHtCUH0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcGFkc3AtTWFrZS1pdC1jb21waWxlLW9uLW11c2wucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1jbGllbnQtY29uZi1BZGQtYWxsb3ctYXV0b3NwYXduLWZvci1yb290LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtY29uZi1wYXJzZXItYWRkLXN1cHBvcnQtZm9yLS5kLWRpcmVjdG9yaWVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1naXQtdmVyc2lvbi1nZW4ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdm9sYXRpbGVzLjA0X3B1bHNlIFwKKyIKK1NSQ19VUklbbWQ1c3VtXSA9ICJiNjkxZTgzYjc0MzRjNjc4ZGZmYWNmYTNhMDI3NzUwZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTA2NDBlMGI4MGIxNjA3NjAwYWNjZmFkMmU0NWFhYmI3OWQzNzliZjYzNTRjOTY3MWVmYTIwNjU0NzdmNmY2IgorCitkb19jb21waWxlX3ByZXBlbmQoKSB7CisgICAgbWtkaXIgLXAgJHtTfS9saWJsdGRsCisgICAgY3AgJHtTVEFHSU5HX0xJQkRJUn0vbGlibHRkbCogJHtTfS9saWJsdGRsCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYiBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NiYy9zYmNfMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkN2YzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zYmMvc2JjXzEuMy5iYgpAQCAtMCwwICsxLDE2IEBACitTVU1NQVJZID0gIlNCQyBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIkJsdWV0b290aCBsb3ctY29tcGxleGl0eSwgc3ViYmFuZCBjb2RlYyAoU0JDKSBsaWJyYXJ5LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vd3d3LmJsdWV6Lm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0xMmY4ODRkMmFlMWZmODdjMDllNWI3Y2NjMmM0Y2E3ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zYmMvc2JjLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yNjttZDU9MGY1N2QwZGYyMmIwZDQwNzQ2YmRkMjk4MDVhNDM2MWIiCisKK0RFUEVORFMgPSAibGlic25kZmlsZTEiCisKK1NSQ19VUkkgPSAiJHtLRVJORUxPUkdfTUlSUk9SfS9saW51eC9ibHVldG9vdGgvJHtCUH0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiMmQ4Yjc4NDFmMmMxMWFiMjg3NzE4ZDU2MmYyYjk4MWMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTYxMDIyY2Y1NzZmMTQxOTAyNDFlNzA3MTc1M2ZkYWNkY2U1ZDFkZWE4OWZmZDcwNDExMGZjNTBiZTY4OTMwOSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleF8xLjJyYzIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkMjNkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4XzEuMnJjMi5iYgpAQCAtMCwwICsxLDE5IEBACitTVU1NQVJZID0gIlNwZWVjaCBBdWRpbyBDb2RlYyIKK0RFU0NSSVBUSU9OID0gIlNwZWV4IGlzIGFuIE9wZW4gU291cmNlL0ZyZWUgU29mdHdhcmUgcGF0ZW50LWZyZWUgYXVkaW8gY29tcHJlc3Npb24gZm9ybWF0IGRlc2lnbmVkIGZvciBzcGVlY2guIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5zcGVleC5vcmciCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTMxNDY0OWQ4YmE5ZGQ3MDQ1ZGZiNjY4M2YyOThkMGE4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2luY2x1ZGUvc3BlZXgvc3BlZXguaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTM0O21kNT1lZjhjOGVhNGY3MTk4ZDcxY2YzNTA5YzZlZDA1ZWE1MCIKK0RFUEVORFMgPSAibGlib2dnIHNwZWV4ZHNwIgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMudXMueGlwaC5vcmcvcmVsZWFzZXMvc3BlZXgvc3BlZXgtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNmFlN2RiM2JhYjAxZTFkNGI4NmJhY2ZhOGNhMzNlODEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2FhMjdjNzI0N2ZmMTVjODUyMWMyYWUwZWEyMTk4N2M5ZTk3MTBhOGYyZDM0NDhlOGI3OWRhOTgwNmJjZTg5MSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORiA9ICJcCisgICAgICAgICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUQVJHRVRfRlBVJywgJ3NvZnQnLCAnLS1lbmFibGUtZml4ZWQtcG9pbnQgLS1kaXNhYmxlLWZsb2F0LWFwaSAtLWRpc2FibGUtdmJyJywgJycsIGQpfSBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3NwZWV4L3NwZWV4ZHNwLzAwMDEtRG9uLXQtcmVseS1vbi1IQVZFX1NURElOVF9ILWV0LWFsLi1iZWluZy1kZWZpbmVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MDY3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcC8wMDAxLURvbi10LXJlbHktb24tSEFWRV9TVERJTlRfSC1ldC1hbC4tYmVpbmctZGVmaW5lZC5wYXRjaApAQCAtMCwwICsxLDYzIEBACitGcm9tIGM3MzM3MGNlYWZkMTM4YmVjZWU4Y2EzYzY4OGJhNzU3NTY4MzBiZmUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBUYW51IEthc2tpbmVuIDx0YW51Lmthc2tpbmVuQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFN1biwgNSBKdWwgMjAxNSAxNzo0ODoxNiArMDMwMAorU3ViamVjdDogW1BBVENIXSBEb24ndCByZWx5IG9uIEhBVkVfU1RESU5UX0ggZXQgYWwuIGJlaW5nIGRlZmluZWQKKworTm90IGV2ZXJ5b25lIHdobyBpbmNsdWRlcyBzcGVleGRzcF9jb25maWdfdHlwZXMuaCB3aWxsIGhhdmUgYSB0ZXN0Cit3aGljaCBkZWZpbmVzIHRob3NlLCBhbmQgaWYgd2UndmUgY2hvc2VuIHRvIHVzZSB0aGUgc3RkaW50IHR5cGVzIGF0Citjb25maWd1cmUgdGltZSB0aGVuIHdlIGtub3cgZXhhY3RseSB3aGljaCBoZWFkZXIocykgYXJlIGF2YWlsYWJsZSwgc28KK2p1c3QgY2hvb3NlIHRoZSBiZXN0IG9uZSB0aGVuIGFuZCBnZW5lcmF0ZSB0aGUgaGVhZGVyIHRvIHVzZSBpdC4KKworVGhpcyBwYXRjaCwgaW5jbHVkaW5nIHRoZSBhYm92ZSB0ZXh0LCBpcyBjb3BpZWQgZnJvbSBhIGNvbW1pdCBpbiB0aGUKK3NwZWV4IHJlcG9zaXRvcnlbMV0uIFRoZSBvcmlnaW5hbCBjb21taXQgZm9yIHNwZWV4IHdhcyBtYWRlIGJ5IFJvbgorPHJvbkBkZWJpYW4ub3JnPi4KKworWzFdIGh0dHBzOi8vZ2l0LnhpcGgub3JnLz9wPXNwZWV4LmdpdDthPWNvbW1pdGRpZmY7aD03NzRjODdkNmNiN2RkOGRhYmRkMTc2NzdmYzZkYTc1M2VjZjRhYTg3CisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogVGFudSBLYXNraW5lbiA8dGFudS5rYXNraW5lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiArKysrKysKKyBpbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluIHwgOCArLS0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAyY2QyZDFlLi4xZGUwYzIzIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zMzQsNiArMzM0LDEyIEBAIEFDX1NVQlNUKFtVU0laRTE2XSkKKyBBQ19TVUJTVChbU0laRTMyXSkKKyBBQ19TVUJTVChbVVNJWkUzMl0pCisgCisrQVNfSUYoW3Rlc3QgIiRhY19jdl9oZWFkZXJfc3RkaW50X2giID0gInllcyJdLCAgICBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxzdGRpbnQuaD4iXSwKKysgICAgICBbdGVzdCAiJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oIiA9ICJ5ZXMiXSwgIFtJTkNMVURFX1NURElOVD0iI2luY2x1ZGUgPGludHR5cGVzLmg+Il0sCisrICAgICAgW3Rlc3QgIiRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2giID0gInllcyJdLCBbSU5DTFVERV9TVERJTlQ9IiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4iXSkKKysKKytBQ19TVUJTVChbSU5DTFVERV9TVERJTlRdKQorKworIEFDX0NPTkZJR19GSUxFUyhbCisgICAgICAgICAgICBNYWtlZmlsZSBsaWJzcGVleGRzcC9NYWtlZmlsZSBkb2MvTWFrZWZpbGUgU3BlZXhEU1Auc3BlYworICAgICAgICAgICAgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL3NwZWV4L01ha2VmaWxlIHNwZWV4ZHNwLnBjCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zcGVleC9zcGVleGRzcF9jb25maWdfdHlwZXMuaC5pbiBiL2luY2x1ZGUvc3BlZXgvc3BlZXhkc3BfY29uZmlnX3R5cGVzLmguaW4KK2luZGV4IDAyYjgyZmQuLjVlYTdiNTUgMTAwNjQ0CistLS0gYS9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCisrKysgYi9pbmNsdWRlL3NwZWV4L3NwZWV4ZHNwX2NvbmZpZ190eXBlcy5oLmluCitAQCAtMSwxMyArMSw3IEBACisgI2lmbmRlZiBfX1NQRUVYX1RZUEVTX0hfXworICNkZWZpbmUgX19TUEVFWF9UWVBFU19IX18KKyAKKy0jaWYgZGVmaW5lZCBIQVZFX1NURElOVF9ICistIyAgaW5jbHVkZSA8c3RkaW50Lmg+CistI2VsaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKy0jICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorLSNlbGlmIGRlZmluZWQgSEFWRV9TWVNfVFlQRVNfSAorLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNlbmRpZgorK0BJTkNMVURFX1NURElOVEAKKyAKKyB0eXBlZGVmIEBTSVpFMTZAIHNweF9pbnQxNl90OworIHR5cGVkZWYgQFVTSVpFMTZAIHNweF91aW50MTZfdDsKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvc3BlZXgvc3BlZXhkc3BfMS4ycmMzLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWFjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS9zcGVleC9zcGVleGRzcF8xLjJyYzMuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJBIHBhdGVudC1mcmVlIERTUCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiU3BlZXhEU1AgaXMgYSBwYXRlbnQtZnJlZSwgT3BlbiBTb3VyY2UvRnJlZSBTb2Z0d2FyZSBEU1AgbGlicmFyeS4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LnNwZWV4Lm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MzE0NjQ5ZDhiYTlkZDcwNDVkZmI2NjgzZjI5OGQwYTgiCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2Fkcy54aXBoLm9yZy9yZWxlYXNlcy9zcGVleC9zcGVleGRzcC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Eb24tdC1yZWx5LW9uLUhBVkVfU1RESU5UX0gtZXQtYWwuLWJlaW5nLWRlZmluZWQucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MGQ5ZDMxMTg0ZjdlYjc2MTE5MmZkMWVmMGI3MzMzMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI0YWU2ODg2MDAwMzlmNWQyMjRiZGYyZTIyMmQyZmJkZTY1NjA4NDQ3ZTRjMmY2ODE1ODVlNGRjYTZkZjY5MmYxIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAgICAgLS1kaXNhYmxlLWV4YW1wbGVzIFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ1RBUkdFVF9GUFUnLCAnc29mdCcsICctLWVuYWJsZS1maXhlZC1wb2ludCAtLWRpc2FibGUtZmxvYXQtYXBpJywgJycsIGQpfSBcCisiCisKKyMgV29ya2Fyb3VuZCBmb3IgYSBidWlsZCBmYWlsdXJlIHdoZW4gYnVpbGRpbmcgd2l0aCBNQUNISU5FPXFlbXVhcm02NC4gSSB0aGluaworIyBhYXJjaDY0IGlzIHN1cHBvc2VkIHRvIHN1cHBvcnQgTkVPTiBqdXN0IGZpbmUsIGJ1dCBidWlsZGluZyBmb3IgcWVtdWFybTY0CisjIGZhaWxzIGluIE5FT04gY29kZToKKyMKKyMgLi4uL3NwZWV4ZHNwLTEuMnJjMy9saWJzcGVleGRzcC9yZXNhbXBsZV9uZW9uLmg6MTQ4OjU6IGVycm9yOiBpbXBvc3NpYmxlIGNvbnN0cmFpbnQgaW4gJ2FzbScKKyMgICAgICBhc20gdm9sYXRpbGUgKCIgIGNtcCAlW2xlbl0sICMwXG4iCisjICAgICAgXgorIworIyBJIHNlbnQgYW4gZW1haWwgYWJvdXQgdGhlIGlzc3VlIHRvIHNwZWV4LWRldi4gQXQgdGhlIHRpbWUgb2Ygd3JpdGluZyB0aGVyZQorIyBhcmUgbm8gcmVzcG9uc2VzIHlldDoKKyMgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC5hdWRpby5jb21wcmVzc2lvbi5zcGVleC5kZXZlbC83MzYwCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdUVU5FX0ZFQVRVUkVTJywgJ2FhcmNoNjQnLCAnLS1kaXNhYmxlLW5lb24nLCAnJywgZCl9IgorCisjIHNwZWV4ZHNwIHdhcyBzcGxpdCBvZmYgZnJvbSBzcGVleCBpbiAxLjJyYzIuIE9sZGVyIHZlcnNpb25zIG9mIHNwZWV4IGNhbid0CisjIGJlIGluc3RhbGxlZCB0b2dldGhlciB3aXRoIHNwZWV4ZHNwLCBzaW5jZSB0aGV5IGNvbnRhaW4gb3ZlcmxhcHBpbmcgZmlsZXMuCitSQ09ORkxJQ1RTXyR7UE59ID0gInNwZWV4ICg8IDEuMnJjMikiCitSQ09ORkxJQ1RTXyR7UE59LWRiZyA9ICJzcGVleC1kYmcgKDwgMS4ycmMyKSIKK1JDT05GTElDVFNfJHtQTn0tZGV2ID0gInNwZWV4LWRldiAoPCAxLjJyYzIpIgorUkNPTkZMSUNUU18ke1BOfS1zdGF0aWNkZXYgPSAic3BlZXgtc3RhdGljZGV2ICg8IDEuMnJjMikiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3Ivb2Jzb2xldGVfYXV0b21ha2VfbWFjcm9zLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTEwMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly90cmFjLnhpcGgub3JnL3RpY2tldC8xOTIyXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorSW5kZXg6IGNvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGNvbmZpZ3VyZS5pbgkocmV2aXNpb24gMTg3NjQpCisrKysgY29uZmlndXJlLmluCSh3b3JraW5nIGNvcHkpCitAQCAtOSw3ICs5LDcgQEAKKyBBQ19DQU5PTklDQUxfSE9TVAorIEFDX0NBTk9OSUNBTF9UQVJHRVQKKworLUFNX0NPTkZJR19IRUFERVIoW2NvbmZpZy5oXSkKKytBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorCisgQU1fSU5JVF9BVVRPTUFLRShsaWJ2b3JiaXNpZGVjLDEuMi4xKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vci90cmVtb3ItYXJtLXRodW1iMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA0OTU0MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3RyZW1vci90cmVtb3IvdHJlbW9yLWFybS10aHVtYjIucGF0Y2gKQEAgLTAsMCArMSwxMDQgQEAKK0Zyb206IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgSnVsIDIwMTIgMTM6Mjk6MzQgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gdHJlbW9yOiBhZGQgSVQgaW5zdHJ1Y3Rpb25zIGZvciBhcm0gdGh1bWIyIHR1bmUgZmxhZ3MuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbiBUaHVtYi0yLCBtb3N0IGluc3RydWN0aW9ucyBkbyBub3QgaGF2ZSBhIGJ1aWx0IGluIGNvbmRpdGlvbiBjb2RlIChleGNlcHQgZm9yIAorY29uZGl0aW9uYWwgYnJhbmNoZXMpLiBJbnN0ZWFkLCBzaG9ydCBzZXF1ZW5jZXMgb2YgaW5zdHJ1Y3Rpb25zIHdoaWNoIGFyZSB0byBiZSAKK2V4ZWN1dGVkIGNvbmRpdGlvbmFsbHkgY2FuIGJlIHByZWNlZGVkIGJ5IGEgc3BlY2lhbCAiSVQgaW5zdHJ1Y3Rpb24iIHdoaWNoIAorZGVzY3JpYmVzIHRoZSBjb25kaXRpb24gYW5kIHdoaWNoIG9mIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIHNob3VsZCBiZSAKK2V4ZWN1dGVkIGlmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UgcmVzcGVjdGl2ZWx5LiAKKworRm9yIHRoZSBBUk0vVGh1bWIgSVQoSWYtVGhlbikgaW5zdHJ1Y3Rpb246CitodHRwOi8vaW5mb2NlbnRlci5hcm0uY29tL2hlbHAvaW5kZXguanNwP3RvcGljPS9jb20uYXJtLmRvYy5kdWkwNDg5Yy9DamFiaWNjaS5odG1sCisKK1NpZ25lZC1vZmYtYnk6IFhpbiBPdXlhbmcgPFhpbi5PdXlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGFzbV9hcm0uaCB8ICAgMTQgKysrKysrKysrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvYXNtX2FybS5oIGIvYXNtX2FybS5oCitpbmRleCBjM2JkYTAwLi44MjNjNTRmIDEwMDc1NQorLS0tIGEvYXNtX2FybS5oCisrKysgYi9hc21fYXJtLmgKK0BAIC0xMDgsOSArMTA4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBYTlBST0QzMShvZ2dfaW50MzJfdCAgYSwgb2dnX2ludDMyX3QgIGIsCisgc3RhdGljIGlubGluZSBvZ2dfaW50MzJfdCBDTElQX1RPXzE1KG9nZ19pbnQzMl90IHgpIHsKKyAgIGludCB0bXA7CisgICBhc20gdm9sYXRpbGUoInN1YnMJJTEsICUwLCAjMzI3Njhcblx0IgorKwkgICAgICAgIml0dCAgICAgcGxcblx0IgorIAkgICAgICAgIm1vdnBsCSUwLCAjMHg3ZjAwXG5cdCIKKyAJICAgICAgICJvcnJwbAklMCwgJTAsICMweGZmXG4iCisgCSAgICAgICAiYWRkcwklMSwgJTAsICMzMjc2OFxuXHQiCisrCSAgICAgICAiaXQgICAgICBtaVxuXHQiCisgCSAgICAgICAibW92bWkJJTAsICMweDgwMDAiCisgCSAgICAgICA6ICIrciIoeCksIj1yIih0bXApCisgCSAgICAgICA6CitAQCAtMTM5LDEwICsxNDEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9sb29wX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfdWludDMyX3QgKnBpcCwKKyAgICAgICAKKyAgICAgICAibGRtZGIgICByMCEse3IxLHIzfTsiCisgICAgICAgInN1YnMgICAgcjEscjEsJTQ7IiAgICAgICAgICAvL2lsc3Bbal0td2kKKysgICAgICAiaXQgICAgICBtaTsiCisgICAgICAgInJzYm1pICAgcjEscjEsIzA7IiAgICAgICAgICAvL2xhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMCxyMixyMSwlMDsiICAgICAgIC8vcWkqPWxhYnMoaWxzcFtqXS13aSkKKyAgICAgICAKKyAgICAgICAic3VicyAgICByMSxyMywlNDsiICAgICAgICAgIC8vaWxzcFtqKzFdLXdpCisrICAgICAgIml0ICAgICAgbWk7IgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwOyIgICAgICAgICAgLy9sYWJzKGlsc3BbaisxXS13aSkKKyAgICAgICAidW11bGwgICAlMSxyMyxyMSwlMTsiICAgICAgIC8vcGkqPWxhYnMoaWxzcFtqKzFdLXdpKQorICAgICAgIAorQEAgLTE2Nyw2ICsxNzEsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHNwX2xvb3BfYXNtKG9nZ191aW50MzJfdCAqcWlwLG9nZ191aW50MzJfdCAqcGlwLAorICAgICAgICJtb3YgICAgIHIwLCMweDQwMDA7XG4iCisgICAgICAgCisgICAgICAgInN1YnMgICAgcjEscjEsJTQ7XG4iICAgICAgICAgIC8vaWxzcFtqXS13aQorKyAgICAgICJpdCAgICAgIG1pO1xuIgorICAgICAgICJyc2JtaSAgIHIxLHIxLCMwO1xuIiAgICAgICAgICAvL2xhYnMoaWxzcFtqXS13aSkKKyAgICAgICAidW11bGwgICAlMCxyMixyMSwlMDtcbiIgICAgICAgLy9xaSo9bGFicyhpbHNwW2pdLXdpKQorICAgICAgICJ1bXVsbCAgICUxLHIzLHIwLCUxO1xuIiAgICAgICAvL3BpKj1sYWJzKGlsc3BbaisxXS13aSkKK0BAIC0xOTAsMTggKzE5NSwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbHNwX2xvb3BfYXNtKG9nZ191aW50MzJfdCAqcWlwLG9nZ191aW50MzJfdCAqcGlwLAorICAgICAgICJtb3YgICAgIHIyLCMwOyIKKyAgICAgICAib3JyICAgICByMSwlMCwlMTsiCisgICAgICAgInRzdCAgICAgcjEsIzB4ZmYwMDAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjODsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICM4OyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMGYwMDAwMDsiCisrICAgICAgIml0dCAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCM0OyIKKyAgICAgICAibW92bmUgICByMSxyMSxsc3IgIzQ7IgorICAgICAgICJ0c3QgICAgIHIxLCMweDAwMGMwMDAwOyIKKysgICAgICAiaXR0ICAgICBuZTsiCisgICAgICAgImFkZG5lICAgcjIscjIsIzI7IgorICAgICAgICJtb3ZuZSAgIHIxLHIxLGxzciAjMjsiCisgICAgICAgInRzdCAgICAgcjEsIzB4MDAwMjAwMDA7IgorKyAgICAgICJpdHQgICAgIG5lOyIKKyAgICAgICAiYWRkbmUgICByMixyMiwjMTsiCisgICAgICAgIm1vdm5lICAgcjEscjEsbHNyICMxOyIKKyAgICAgICAidHN0ICAgICByMSwjMHgwMDAxMDAwMDsiCisrICAgICAgIml0ICAgICAgbmU7IgorICAgICAgICJhZGRuZSAgIHIyLHIyLCMxOyIKKyAgICAgICAibW92ICAgICAlMCwlMCxsc3IgcjI7IgorICAgICAgICJtb3YgICAgICUxLCUxLGxzciByMjsiCitAQCAtMjIyLDE1ICsyMzIsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIGxzcF9ub3JtX2FzbShvZ2dfdWludDMyX3QgKnFpcCxvZ2dfaW50MzJfdCAqcWV4cHApeworICAgb2dnX2ludDMyX3QgcWV4cD0qcWV4cHA7CisgCisgICBhc20oInRzdCAgICAgJTAsIzB4MDAwMGZmMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzg7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCM4OyIKKyAgICAgICAidHN0ICAgICAlMCwjMHgwMDAwZjAwMDsiCisrICAgICAgIml0dCAgICAgZXE7IgorICAgICAgICJtb3ZlcSAgICUwLCUwLGxzbCAjNDsiCisgICAgICAgInN1YmVxICAgJTEsJTEsIzQ7IgorICAgICAgICJ0c3QgICAgICUwLCMweDAwMDBjMDAwOyIKKysgICAgICAiaXR0ICAgICBlcTsiCisgICAgICAgIm1vdmVxICAgJTAsJTAsbHNsICMyOyIKKyAgICAgICAic3ViZXEgICAlMSwlMSwjMjsiCisgICAgICAgInRzdCAgICAgJTAsIzB4MDAwMDgwMDA7IgorKyAgICAgICJpdHQgICAgIGVxOyIKKyAgICAgICAibW92ZXEgICAlMCwlMCxsc2wgIzE7IgorICAgICAgICJzdWJlcSAgICUxLCUxLCMxOyIKKyAgICAgICA6ICIrciIocWkpLCIrciIocWV4cCkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS90cmVtb3IvdHJlbW9yXzIwMTUwMTA3LmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Mzc4OTRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvdHJlbW9yL3RyZW1vcl8yMDE1MDEwNy5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkZpeGVkLXBvaW50IGRlY29kZXIiCitERVNDUklQVElPTiA9ICJ0cmVtb3IgaXMgYSBmaXhlZCBwb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdm9yYmlzIGNvZGVjLiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZGIxYjdhNjY4YjJhNmY0N2IyYWY4OGZiMDA4YWQ1NTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vb3MuaDtiZWdpbmxpbmU9MztlbmRsaW5lPTE0O21kNT01YzBhZjVlMWJlZGVmM2NlODE3OGM4OWY0OGNkNmYxZiIKK0RFUEVORFMgPSAibGlib2dnIgorU1JDREFURSA9ICIke1BWfSIKK1BSID0gInIxIgorCisjIFNWTiBzdXBwb3J0IGZvciB1cHN0cmVhbSB2ZXJzaW9uIGNoZWNrIGlzbid0IGltcGxlbWVudGVkIHlldAorUkVDSVBFX1VQU1RSRUFNX1ZFUlNJT04gPSAiMjAxNTAxMDciCitSRUNJUEVfVVBTVFJFQU1fREFURSA9ICJKYW4gMDcsIDIwMTUiCitDSEVDS19EQVRFID0gIkF1ZyAxMiwgMjAxNSIKKworU1JDX1VSSSA9ICJzdm46Ly9zdm4ueGlwaC5vcmcvdHJ1bms7bW9kdWxlPVRyZW1vcjtyZXY9MTk0Mjc7cHJvdG9jb2w9aHR0cCBcCisgICAgICAgICAgIGZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2g7c3RyaXBsZXZlbD0wIFwKKyAgICAgICAgICAgZmlsZTovL3RyZW1vci1hcm0tdGh1bWIyLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L1RyZW1vciIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQiCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEvd2VicC9saWJ3ZWJwXzAuNC4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjgwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS93ZWJwL2xpYndlYnBfMC40LjMuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJXZWJQIGlzIGFuIGltYWdlIGZvcm1hdCBkZXNpZ25lZCBmb3IgdGhlIFdlYiIKK0RFU0NSSVBUSU9OID0gIldlYlAgaXMgYSBtZXRob2Qgb2YgbG9zc3kgYW5kIGxvc3NsZXNzIGNvbXByZXNzaW9uIHRoYXQgY2FuIGJlIFwKKyAgICAgICAgICAgICAgIHVzZWQgb24gYSBsYXJnZSB2YXJpZXR5IG9mIHBob3RvZ3JhcGhpYywgdHJhbnNsdWNlbnQgYW5kIFwKKyAgICAgICAgICAgICAgIGdyYXBoaWNhbCBpbWFnZXMgZm91bmQgb24gdGhlIHdlYi4gVGhlIGRlZ3JlZSBvZiBsb3NzeSBcCisgICAgICAgICAgICAgICBjb21wcmVzc2lvbiBpcyBhZGp1c3RhYmxlIHNvIGEgdXNlciBjYW4gY2hvb3NlIHRoZSB0cmFkZS1vZmYgXAorICAgICAgICAgICAgICAgYmV0d2VlbiBmaWxlIHNpemUgYW5kIGltYWdlIHF1YWxpdHkuIFdlYlAgdHlwaWNhbGx5IGFjaGlldmVzIFwKKyAgICAgICAgICAgICAgIGFuIGF2ZXJhZ2Ugb2YgMzAlIG1vcmUgY29tcHJlc3Npb24gdGhhbiBKUEVHIGFuZCBKUEVHIDIwMDAsIFwKKyAgICAgICAgICAgICAgIHdpdGhvdXQgbG9zcyBvZiBpbWFnZSBxdWFsaXR5LiIKK0hPTUVQQUdFID0gImh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3NwZWVkL3dlYnAvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTZlOGRlZTkzMmMyNmYyZGFiNTAzYWJmNzBjOTZkOGJiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL1BBVEVOVFM7bWQ1PWFkMjU4MGFlZTM1NDY4Njc1YzQ0ZDdiZWJiYTY1Y2E4IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZHMud2VibXByb2plY3Qub3JnL3JlbGVhc2VzL3dlYnAvJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjA4ODEzNTI1ZWVlZmZlN2UzMDViNGNiZmFkZThhZTliIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmYmUwZDU4ZmRhOTM2ZjJlZDk5ZDBiODM3ZWQ3MDg3ZDA2NGQ2ODM4OTMxZjI4MmM0NjE4ZDJhM2Y3MzkwYzQiCisKK0VYVFJBX09FQ09ORiA9ICIgXAorICAgIC0tZGlzYWJsZS1leHBlcmltZW50YWwgXAorICAgIC0tZGlzYWJsZS13aWMgXAorICAgIC0tZW5hYmxlLWxpYndlYnBtdXggXAorICAgIC0tZW5hYmxlLWxpYndlYnBkZW11eCBcCisgICAgLS1lbmFibGUtdGhyZWFkaW5nIFwKKyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbGliX3BhY2thZ2UKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKKworIyBsaWJ3ZWJwZGVjb2RlciBpcyBhIHN1YnNldCBvZiBsaWJ3ZWJwLCBkb24ndCBidWlsZCBpdCB1bmxlc3MgcmVxdWVzdGVkCitQQUNLQUdFQ09ORklHW2RlY29kZXJdID0gIi0tZW5hYmxlLWxpYndlYnBkZWNvZGVyLC0tZGlzYWJsZS1saWJ3ZWJwZGVjb2RlciIKKworIyBBcHBseSBmb3IgZXhhbXBsZXMgcHJvZ3JhbXM6IGN3ZWJwIGFuZCBkd2VicAorUEFDS0FHRUNPTkZJR1tnaWZdID0gIi0tZW5hYmxlLWdpZiwtLWRpc2FibGUtZ2lmLGdpZmxpYiIKK1BBQ0tBR0VDT05GSUdbanBlZ10gPSAiLS1lbmFibGUtanBlZywtLWRpc2FibGUtanBlZyxqcGVnIgorUEFDS0FHRUNPTkZJR1twbmddID0gIi0tZW5hYmxlLXBuZywtLWRpc2FibGUtcG5nLCxsaWJwbmciCitQQUNLQUdFQ09ORklHW3RpZmZdID0gIi0tZW5hYmxlLXRpZmYsLS1kaXNhYmxlLXRpZmYsdGlmZiIKKworIyBBcHBseSBvbmx5IGZvciBleGFtcGxlIHByb2dyYW0gdndlYnAKK1BBQ0tBR0VDT05GSUdbZ2xdID0gIi0tZW5hYmxlLWdsLC0tZGlzYWJsZS1nbCxtZXNhLWdsdXQiCisKK1BBQ0tBR0VTID0rICIke1BOfS1naWYyd2VicCIKKworREVTQ1JJUFRJT05fJHtQTn0tZ2lmMndlYnAgPSAiU2ltcGxlIHRvb2wgdG8gY29udmVydCBhbmltYXRlZCBHSUZzIHRvIFdlYlAiCitGSUxFU18ke1BOfS1naWYyd2VicCA9ICIke2JpbmRpcn0vZ2lmMndlYnAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjQvZG9uLXQtZGVmYXVsdC10by1jb3J0ZXgtYTktd2l0aC1uZW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjcyZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLW11bHRpbWVkaWEveDI2NC94MjY0L2Rvbi10LWRlZmF1bHQtdG8tY29ydGV4LWE5LXdpdGgtbmVvbi5wYXRjaApAQCAtMCwwICsxLDI5IEBACistbWFyY2ggZmxhZyBpcyBub3QgaW4gQ0ZMQUdTIHNvIHRoaXMgd2lsbCBhbHdheXMgZGVmYXVsdCB0byAtbWNwdT1jb3J0ZXgtYTgKKy1tZnB1PW5lb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAyOTE2MDM2Li5mNGVjZTQwIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03NzMsOSArNzczLDYgQEAgaWYgWyAkYXNtID0gYXV0byAtYSBcKCAkQVJDSCA9IFg4NiAtbyAkQVJDSCA9IFg4Nl82NCBcKSBdIDsgdGhlbgorIGZpCisgCisgaWYgWyAkYXNtID0gYXV0byAtYSAkQVJDSCA9IEFSTSBdIDsgdGhlbgorLSAgICAjIHNldCBmbGFncyBzbyBuZW9uIGlzIGJ1aWx0IGJ5IGRlZmF1bHQKKy0gICAgZWNobyAkQ0ZMQUdTIHwgZ3JlcCAtRXEgJygtbWNwdXwtbWFyY2h8LW1mcHUpJyB8fCBDRkxBR1M9IiRDRkxBR1MgLW1jcHU9Y29ydGV4LWE4IC1tZnB1PW5lb24iCistCisgICAgIGlmICBjY19jaGVjayAnJyAnJyAnX19hc21fXygicmV2IGlwLCBpcCIpOycgOyB0aGVuICAgICAgZGVmaW5lIEhBVkVfQVJNVjYKKyAgICAgICAgIGNjX2NoZWNrICcnICcnICdfX2FzbV9fKCJtb3Z0IHIwLCAjMCIpOycgICAgICAgICAmJiBkZWZpbmUgSEFWRV9BUk1WNlQyCisgICAgICAgICBjY19jaGVjayAnJyAnJyAnX19hc21fXygidmFkZC5pMTYgcTAsIHEwLCBxMCIpOycgJiYgZGVmaW5lIEhBVkVfTkVPTgorQEAgLTc4OCw4ICs3ODUsNiBAQCBpZiBbICRhc20gPSBhdXRvIC1hICRBUkNIID0gQVJNIF0gOyB0aGVuCisgZmkKKyAKKyBpZiBbICRhc20gPSBhdXRvIC1hICRBUkNIID0gQUFSQ0g2NCBdIDsgdGhlbgorLSAgICAjIHNldCBmbGFncyBzbyBuZW9uIGlzIGJ1aWx0IGJ5IGRlZmF1bHQKKy0gICAgZWNobyAkQ0ZMQUdTIHwgZ3JlcCAtRXEgJygtbWNwdXwtbWFyY2h8LW1mcHV8LWFyY2gpJyB8fCBDRkxBR1M9IiRDRkxBR1MgLWFyY2ggYXJtNjQgLW1mcHU9bmVvbiIKKyAKKyAgICAgaWYgIGNjX2NoZWNrICcnICcnICdfX2FzbV9fKCJjbWVxIHYwLjhoLCB2MC44aCwgIzAiKTsnIDsgdGhlbiBkZWZpbmUgSEFWRV9ORU9OCisgICAgICAgICBBU0ZMQUdTPSIkQVNGTEFHUyAtYyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1tdWx0aW1lZGlhL3gyNjQveDI2NF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjk5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtbXVsdGltZWRpYS94MjY0L3gyNjRfZ2l0LmJiCkBAIC0wLDAgKzEsNTUgQEAKK1NVTU1BUlkgPSAiSC4yNjQvTVBFRy00IEFWQyB2aWRlbyBlbmNvZGVyIgorREVTQ1JJUFRJT04gPSAiQSBmcmVlIHNvZnR3YXJlIGxpYnJhcnkgYW5kIGFwcGxpY2F0aW9uIGZvciBlbmNvZGluZyB2aWRlbyBzdHJlYW1zIGludG8gdGhlIEguMjY0L01QRUctNCBBVkMgZm9ybWF0LiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL2RldmVsb3BlcnMveDI2NC5odG1sIgorCitMSUNFTlNFID0gIkdQTHYyIgorTElDRU5TRV9GTEFHUyA9ICJjb21tZXJjaWFsIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYiCisKK0RFUEVORFMgPSAieWFzbS1uYXRpdmUiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnZpZGVvbGFuLm9yZy94MjY0LmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9kb24tdC1kZWZhdWx0LXRvLWNvcnRleC1hOS13aXRoLW5lb24ucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ1JFViA9ICJjOGE3NzNlYmZjYTE0OGVmMDRmNWE2MGQ0MmNiZDczMzZhZjBiYWY2IgorCitQViA9ICJyMjQ5MStnaXQke1NSQ1BWfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBsaWJfcGFja2FnZSBwa2djb25maWcgcGVybG5hdGl2ZQorCitYMjY0X0RJU0FCTEVfQVNNID0gIiIKK1gyNjRfRElTQUJMRV9BU01fYXJtdjQgPSAiLS1kaXNhYmxlLWFzbSIKK1gyNjRfRElTQUJMRV9BU01fYXJtdjUgPSAiLS1kaXNhYmxlLWFzbSIKK1gyNjRfRElTQUJMRV9BU01fcG93ZXJwYyA9ICIke0BiYi51dGlscy5jb250YWlucygiVFVORV9GRUFUVVJFUyIsICJzcGUiLCAiLS1kaXNhYmxlLWFzbSIsICIiLCBkKX0iCisKK0VYVFJBX09FQ09ORiA9ICctLXByZWZpeD0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAgIC0taG9zdD0ke0hPU1RfU1lTfSBcCisgICAgICAgICAgICAgICAgLS1saWJkaXI9JHtsaWJkaXJ9IFwKKyAgICAgICAgICAgICAgICAtLWNyb3NzLXByZWZpeD0ke1RBUkdFVF9QUkVGSVh9IFwKKyAgICAgICAgICAgICAgICAtLXN5c3Jvb3Q9JHtTVEFHSU5HX0RJUl9UQVJHRVR9IFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1zaGFyZWQgXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLXN0YXRpYyBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxhdmYgXAorICAgICAgICAgICAgICAgIC0tZGlzYWJsZS1zd3NjYWxlIFwKKyAgICAgICAgICAgICAgICAtLWVuYWJsZS1waWMgXAorICAgICAgICAgICAgICAgICR7WDI2NF9ESVNBQkxFX0FTTX0gXAorICAgICAgICAgICAgICAgJworCitkb19jb25maWd1cmUoKSB7CisgICAgLi9jb25maWd1cmUgJHtFWFRSQV9PRUNPTkZ9Cit9CisKKyMgR2V0IHJpZCBvZiAtZQorRVhUUkFfT0VNQUtFID0gIiIKK0FTID0gIiR7VEFSR0VUX1BSRUZJWH1nY2MiCisKK2RvX2luc3RhbGwoKSB7CisgICAgb2VfcnVubWFrZSBpbnN0YWxsIERFU1RESVI9JHtEfQorfQorCisjIFBJQyBjYW4ndCBiZSBlbmFibGVkIGZvciAzMi1iaXQgeDg2CitJTlNBTkVfU0tJUF8ke1BOfV9hcHBlbmRfeDg2ID0gIiB0ZXh0cmVsIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYiBiL21ldGEvcmVjaXBlcy1xdC9pbWFnZXMvcXQ0ZS1kZW1vLWltYWdlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NTE4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvaW1hZ2VzL3F0NGUtZGVtby1pbWFnZS5iYgpAQCAtMCwwICsxLDE0IEBACitERVNDUklQVElPTiA9ICJBbiBpbWFnZSB0aGF0IHdpbGwgbGF1bmNoIGludG8gdGhlIGRlbW8gYXBwbGljYXRpb24gZm9yIHRoZSBlbWJlZGRlZCAobm90IGJhc2VkIG9uIFgxMSkgdmVyc2lvbiBvZiBRdC4iCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworSU1BR0VfSU5TVEFMTCArPSAiXAorCSR7Q09SRV9JTUFHRV9CQVNFX0lOU1RBTEx9IFwKKwlwYWNrYWdlZ3JvdXAtY29yZS1xdDRlIFwKKyIKKworaW5oZXJpdCBjb3JlLWltYWdlCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEwMTAzYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmJiCkBAIC0wLDAgKzEsNSBAQAorIyBRdCB0b29sY2hhaW4KK1FUTkFNRSA9ICJxdCIKK1FUX0RJUl9OQU1FID0gInF0NCIKKworcmVxdWlyZSBtZXRhLXRvb2xjaGFpbi1xdC5pbmMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYyBiL21ldGEvcmVjaXBlcy1xdC9tZXRhL21ldGEtdG9vbGNoYWluLXF0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc1ZDkzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXQuaW5jCkBAIC0wLDAgKzEsMzUgQEAKK1RPT0xDSEFJTl9IT1NUX1RBU0sgPSAibmF0aXZlc2RrLXBhY2thZ2Vncm91cC0ke1FUTkFNRX0tdG9vbGNoYWluLWhvc3QgcGFja2FnZWdyb3VwLWNyb3NzLWNhbmFkaWFuLSR7TUFDSElORX0iCitUT09MQ0hBSU5fVEFSR0VUX1RBU0sgPSAicGFja2FnZWdyb3VwLSR7UVROQU1FfS10b29sY2hhaW4tdGFyZ2V0IgorVE9PTENIQUlOX09VVFBVVE5BTUUgPSAiJHtTREtfTkFNRX0tdG9vbGNoYWluLSR7UVROQU1FfS0ke0RJU1RST19WRVJTSU9OfSIKKworcmVxdWlyZSByZWNpcGVzLWNvcmUvbWV0YS9tZXRhLXRvb2xjaGFpbi5iYgorCitRVF9UT09MU19QUkVGSVggPSAiJE9FQ09SRV9OQVRJVkVfU1lTUk9PVCR7YmluZGlyX25hdGl2ZXNka30iCisKK2NyZWF0ZV9zZGtfZmlsZXNfYXBwZW5kKCkgeworICAgIG1rZGlyIC1wICR7U0RLX09VVFBVVH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQvCisgICAgc2NyaXB0PSR7U0RLX09VVFBVVH0ke1NES1BBVEhOQVRJVkV9L2Vudmlyb25tZW50LXNldHVwLmQvJHtRVF9ESVJfTkFNRX0uc2gKKworICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DRkxBR1M9IiRDRkxBR1MiJyA+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQ1hYRkxBR1M9IiRDWFhGTEFHUyInID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfTERGTEFHUz0iJExERkxBR1MiJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NDPSRDQycgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DWFg9JENYWCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9MSU5LPSRDWFgnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfQVI9JEFSJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVD0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtsaWJkaXJ9JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX0lOQ0RJUl9RVD0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfScgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9NT0M9JHtRVF9UT09MU19QUkVGSVh9L21vYzQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDPSR7UVRfVE9PTFNfUFJFRklYfS91aWM0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1VJQzM9JHtRVF9UT09MU19QUkVGSVh9L3VpYzM0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1JDQz0ke1FUX1RPT0xTX1BSRUZJWH0vcmNjNCcgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUw9JHtRVF9UT09MU19QUkVGSVh9L3FkYnVzY3BwMnhtbDQnID4+ICRzY3JpcHQKKyAgICBlY2hvICdleHBvcnQgT0VfUU1BS0VfUURCVVNYTUwyQ1BQPSR7UVRfVE9PTFNfUFJFRklYfS9xZGJ1c3htbDJjcHA0JyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IE9FX1FNQUtFX1FUX0NPTkZJRz0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpJyA+PiAkc2NyaXB0CisgICAgZWNobyAnZXhwb3J0IFFNQUtFU1BFQz0kT0VDT1JFX1RBUkdFVF9TWVNST09UJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL2xpbnV4LWcrKycgPj4gJHNjcmlwdAorICAgIGVjaG8gJ2V4cG9ydCBRVF9DT05GX1BBVEg9JE9FQ09SRV9OQVRJVkVfU1lTUk9PVCR7c3lzY29uZmRpcn0vcXQuY29uZicgPj4gJHNjcmlwdAorCisgICAgIyBtYWtlIGEgc3ltYm9saWMgbGluayB0byBta3NwZWNzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUXQgU0RLCisgICAgIyBhbmQgUXQgQ3JlYXRvcgorICAgIChjZCAke1NES19PVVRQVVR9LyR7U0RLUEFUSE5BVElWRX0ke2JpbmRpcl9uYXRpdmVzZGt9Ly4uOyBsbiAtcyAke1NES1RBUkdFVFNZU1JPT1R9L3Vzci9zaGFyZS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzIG1rc3BlY3M7KQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiIGIvbWV0YS9yZWNpcGVzLXF0L21ldGEvbWV0YS10b29sY2hhaW4tcXRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMTNmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvbWV0YS9tZXRhLXRvb2xjaGFpbi1xdGUuYmIKQEAgLTAsMCArMSw2IEBACisjIFF0IEVtYmVkZGVkIHRvb2xjaGFpbgorUFIgPSAicjYiCitRVE5BTUUgPSAicXRlIgorUVRfRElSX05BTUUgPSAicXRvcGlhIgorCityZXF1aXJlIG1ldGEtdG9vbGNoYWluLXF0LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5iYiBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk1Y2M1ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCisKK1NVTU1BUlkgPSAiSG9zdCBwYWNrYWdlcyBmb3IgUXQgU0RLIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi1ob3N0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2MyNzVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4taG9zdC5pbmMKQEAgLTAsMCArMSw2IEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9wYWNrYWdlZ3JvdXBzL25hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtc2RrLWhvc3QuYmIKKworREVTQ1JJUFRJT04gPSAiSG9zdCBwYWNrYWdlcyBmb3IgUXQgRW1iZWRkZWQgU0RLIgorTElDRU5TRSA9ICJNSVQiCisKK1JERVBFTkRTXyR7UE59ICs9ICJuYXRpdmVzZGstcXQ0LXRvb2xzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9uYXRpdmVzZGstcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4taG9zdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTZlNGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvbmF0aXZlc2RrLXBhY2thZ2Vncm91cC1xdGUtdG9vbGNoYWluLWhvc3QuYmIKQEAgLTAsMCArMSwzIEBACityZXF1aXJlIG5hdGl2ZXNkay1wYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLWhvc3QuaW5jCisKK1NVTU1BUlkgPSAiSG9zdCBwYWNrYWdlcyBmb3IgUXQgRW1iZWRkZWQgU0RLIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFmOGEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUtcXQuYmIKQEAgLTAsMCArMSwyMiBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTAgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkCisjCisKK1NVTU1BUlkgPSAiUXQgcGFja2FnZSBncm91cHMiCitMSUNFTlNFID0gIk1JVCIKK1BSID0gInI0IgorCisjIFF0NCBjb3VsZCBOT1QgYmUgYnVpbHQgb24gTUlQUzY0IHdpdGggNjQgYml0cyB1c2Vyc3BhY2UKK0NPTVBBVElCTEVfSE9TVF9taXBzNjQgPSAibnVsbCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHF1aWNreSBhbmQgZm90b3dhbGwgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworUEFDS0FHRVMgPSAiJHtQTn0tZGVtb2FwcHMiCisKK1FUREVNT1MgPz0gInF1aWNreSAke0NPTU1FUkNJQUxfUVR9IGZvdG93YWxsIgorCitTVU1NQVJZXyR7UE59LWRlbW9hcHBzID0gIlF0IGRlbW8gYXBwbGljYXRpb25zIgorUkRFUEVORFNfJHtQTn0tZGVtb2FwcHMgPSAiJHtRVERFTU9TfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXF0NGUuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWZhMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtY29yZS1xdDRlLmJiCkBAIC0wLDAgKzEsNTIgQEAKK1NVTU1BUlkgPSAiUXQgZm9yIEVtYmVkZGVkIExpbnV4IChRdCB3aXRob3V0IFgxMSkiCitQUiA9ICJyMiIKK0xJQ0VOU0UgPSAiTUlUIgorCisjIFF0NCBjb3VsZCBOT1QgYmUgYnVpbHQgb24gTUlQUzY0IHdpdGggNjQgYml0cyB1c2Vyc3BhY2UKK0NPTVBBVElCTEVfSE9TVF9taXBzNjQgPSAibnVsbCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworVE9VQ0ggPSAnICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgInRvdWNoc2NyZWVuIiwgInRzbGliIHRzbGliLWNhbGlicmF0ZSB0c2xpYi10ZXN0cyIsICIiLGQpfScKKworUkRFUEVORFNfJHtQTn0gPSAiIFwKKwlxdDQtZW1iZWRkZWQgXAorCWxpYnF0LWVtYmVkZGVkM3N1cHBvcnQ0IFwKKwlsaWJxdC1lbWJlZGRlZGNsdWNlbmU0IFwKKwlsaWJxdC1lbWJlZGRlZGNvcmU0IFwKKwlsaWJxdC1lbWJlZGRlZGRidXM0IFwKKwlsaWJxdC1lbWJlZGRlZGd1aTQgXAorCWxpYnF0LWVtYmVkZGVkaGVscDQgXAorCWxpYnF0LWVtYmVkZGVkbXVsdGltZWRpYTQgXAorCWxpYnF0LWVtYmVkZGVkbmV0d29yazQgXAorCWxpYnF0LWVtYmVkZGVkc2NyaXB0NCBcCisJbGlicXQtZW1iZWRkZWRzY3JpcHR0b29sczQgXAorCWxpYnF0LWVtYmVkZGVkc3FsNCBcCisJbGlicXQtZW1iZWRkZWRzdmc0IFwKKwlsaWJxdC1lbWJlZGRlZHRlc3Q0IFwKKwlsaWJxdC1lbWJlZGRlZHdlYmtpdDQgXAorCWxpYnF0LWVtYmVkZGVkeG1sNCBcCisJcXQ0LWVtYmVkZGVkLWZvbnRzLXR0Zi1kZWphdnUgXAorCXF0NC1lbWJlZGRlZC1mb250cy10dGYtdmVyYSBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pY29uZW5naW5lLXN2Z2ljb24gXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtZ2lmIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LWljbyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLWltYWdlZm9ybWF0LW1uZyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1pbWFnZWZvcm1hdC1zdmcgXAorCXF0NC1lbWJlZGRlZC1wbHVnaW4taW1hZ2Vmb3JtYXQtdGlmZiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1tb3VzZWRyaXZlci10c2xpYiBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1zY3JpcHQtZGJ1cyBcCisJcXQ0LWVtYmVkZGVkLXBsdWdpbi1zcWxkcml2ZXItc3FsaXRlIFwKKwkke1RPVUNIfSBcCisgICAgICAgIHF0NC1lbWJlZGRlZC1kZW1vcyBcCisgICAgICAgIHF0NC1lbWJlZGRlZC1leGFtcGxlcyBcCisgICAgICAgIHF0LWRlbW8taW5pdCBcCisgICAgICAgIHF0NC1lbWJlZGRlZC1hc3Npc3RhbnQgXAorIgorCitSUkVDT01NRU5EU18ke1BOfSA9ICIgXAorCWxpYnF0LWVtYmVkZGVkeG1scGF0dGVybnM0IFwKKwlxdDQtZW1iZWRkZWQtcGx1Z2luLXBob25vbi1iYWNrZW5kLWdzdHJlYW1lciBcCisiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyYzE1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmJiCkBAIC0wLDAgKzEsMTUgQEAKK1NVTU1BUlkgPSAiVGFyZ2V0IHBhY2thZ2VzIGZvciBRdCBTREsiCisKK1FUTElCUFJFRklYID0gIiIKKworcmVxdWlyZSBwYWNrYWdlZ3JvdXAtcXQtdG9vbGNoYWluLXRhcmdldC5pbmMKKworaW5oZXJpdCBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiBxdDQteDExLWZyZWUKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1JERVBFTkRTXyR7UE59ICs9ICIgXAorICAgICAgICBxdDQteDExLWZyZWUtZGV2IFwKKyAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnbGlicXRvcGVuZ2w0LWRldicsICcnLCBkKX0gXAorICAgICAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW52ZycsICdsaWJxdG9wZW52ZzQtZGV2JywgJycsIGQpfSBcCisgICAgICAgICIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYyBiL21ldGEvcmVjaXBlcy1xdC9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDk3ODJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0LXRvb2xjaGFpbi10YXJnZXQuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK0xJQ0VOU0UgPSAiTUlUIgorCisjIFF0NCBjb3VsZCBOT1QgYmUgYnVpbHQgb24gTUlQUzY0IHdpdGggNjQgYml0cyB1c2Vyc3BhY2UKK0NPTVBBVElCTEVfSE9TVF9taXBzNjQgPSAibnVsbCIKKworaW5oZXJpdCBwYWNrYWdlZ3JvdXAKKworUEFDS0FHRUdST1VQX0RJU0FCTEVfQ09NUExFTUVOVEFSWSA9ICIxIgorCitSREVQRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgcGFja2FnZWdyb3VwLWNvcmUtc3RhbmRhbG9uZS1zZGstdGFyZ2V0IFwKKyAgICAgICAgcXQ0JHtRVExJQlBSRUZJWH0tbWtzcGVjcyBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1tdWx0aW1lZGlhNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9M3N1cHBvcnQ0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1jbHVjZW5lNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9Y29yZTQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWRidXM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZXNpZ25lcmNvbXBvbmVudHM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1kZXNpZ25lcjQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXVpdG9vbHM0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1ndWk0LWRldiBcCisgICAgICAgIGxpYnF0JHtRVExJQlBSRUZJWH1oZWxwNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9bmV0d29yazQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNjcmlwdDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXNjcmlwdHRvb2xzNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9c3FsNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9c3ZnNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9dGVzdDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXdlYmtpdDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXhtbDQtZGV2IFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfWRlY2xhcmF0aXZlNC1kZXYgXAorICAgICAgICBsaWJxdCR7UVRMSUJQUkVGSVh9eG1scGF0dGVybnM0LWRldiBcCisgICAgICAgIGxpYnNxbGl0ZTMtZGV2IFwKKyAgICAgICAgZXhwYXQtZGV2IFwKKyAgICAgICAgIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAiIFwKKyAgICAgICAgbGlicXQke1FUTElCUFJFRklYfXBob25vbjQtZGV2IFwKKyAgICAgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiIGIvbWV0YS9yZWNpcGVzLXF0L3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLXF0ZS10b29sY2hhaW4tdGFyZ2V0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZWQyMzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcGFja2FnZWdyb3Vwcy9wYWNrYWdlZ3JvdXAtcXRlLXRvb2xjaGFpbi10YXJnZXQuYmIKQEAgLTAsMCArMSw3IEBACitTVU1NQVJZID0gIlRhcmdldCBwYWNrYWdlcyBmb3IgUXQgRW1iZWRkZWQgU0RLIgorCitQUiA9ICJyNyIKKworUVRMSUJQUkVGSVggPSAiLWVtYmVkZGVkIgorCityZXF1aXJlIHBhY2thZ2Vncm91cC1xdC10b29sY2hhaW4tdGFyZ2V0LmluYwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvZm90b3dhbGwvRXhwb3J0V2l6YXJkLWRlcGVuZHMtb24tdWlfd2l6YXJkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjJiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbC9FeHBvcnRXaXphcmQtZGVwZW5kcy1vbi11aV93aXphcmQucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorQXBwL0V4cG9ydFdpemFyZC5jcHAgZGVwZW5kcyBvbiB3aXphcmQuaCB3aGljaCBkZXBlbmRzIG9uIHVpX3dpemFyZC4gVGhlIGxhc3Qgb25lCitzaG91bGQgYmUgYWxyZWFkeSBnZW5lcmF0ZWQgYmVmb3JlIGNvbXBpbGluZyBFeHBvcnRXaXphcmQuY3BwLgorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IEZvdG93YWxsLTAuOS9BcHAvRXhwb3J0V2l6YXJkLmNwcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIEZvdG93YWxsLTAuOS5vcmlnL0FwcC9FeHBvcnRXaXphcmQuY3BwCTIwMDktMTEtMzAgMTM6MjE6MzEuMDAwMDAwMDAwICswMjAwCisrKysgRm90b3dhbGwtMC45L0FwcC9FeHBvcnRXaXphcmQuY3BwCTIwMTItMDUtMTAgMTc6MTI6MDYuNzY1MjMwODMwICswMzAwCitAQCAtMjMsNiArMjMsNyBAQAorICNpbmNsdWRlICJpbWFnZWxvYWRlcnF0LmgiCisgI2luY2x1ZGUgInBvc3RlcmF6b3Jjb3JlLmgiCisgI2luY2x1ZGUgIndpemFyZC5oIgorKyNpbmNsdWRlICJ1aV93aXphcmQuaCIKKyAKKyAjaW5jbHVkZSA8UURlc2t0b3BTZXJ2aWNlcz4KKyAjaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9mb3Rvd2FsbF8wLjkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmMDI2NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL2ZvdG93YWxsXzAuOS5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkNyZWF0aXZlIHBob3RvIGRpc3BsYXkgYXBwbGljYXRpb24iCitERVNDUklQVElPTiA9ICJGb3Rvd2FsbCBpcyBhIGNyZWF0aXZlIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGxheW91dCB5b3VyIHBob3RvcyBvciBwaWN0dXJlcyBcCitpbiBhIHBlcnNvbmFsIHdheS4gWW91IGNhbiBhZGQgcGljdHVyZXMsIHRoZW4gcmVzaXplLCBtb3ZlLCBjaGFuZ2UgY29sb3JzLCB0ZXh0LCBzaGFkb3dzLCBldGMuLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5lbnJpY29yb3MuY29tL29wZW5zb3VyY2UvZm90b3dhbGwiCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0dQTF9WMjttZDU9Nzk4MDgzOTdjMzM1NWYxNjNjMDEyNjE2MTI1YzllMjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWFpbi5jcHA7YmVnaW5saW5lPTY7ZW5kbGluZT0xMTttZDU9YjU2OWFjYzJiZjg5NzRhMzA4MmI1OGZjNTNiOWQ4ZGMiCitTRUNUSU9OID0gIngxMS9hcHBzIgorCitQUiA9ICJyNCIKKworU1JDUkVWID0gIjA2ZDVhNDE0MmM1OTk2MDRkOWE5ZmQ2NDcyN2I2OTQ1ZWI4Y2QzZGEiCitTUkNfVVJJID0gImdpdDovL2dpdGh1Yi5jb20vZW5yaWNvcm9zL2ZvdG93YWxsLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9FeHBvcnRXaXphcmQtZGVwZW5kcy1vbi11aV93aXphcmQucGF0Y2ggXAorICAgICAgICAgICAiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgcXQ0eDExCisKK0VYVFJBX1FNQUtFVkFSU19QUkUgPSAiQ09ORklHKz1uby13ZWJjYW0iCisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBJTlNUQUxMX1JPT1Q9JHtEfSBpbnN0YWxsCit9CisKKyMgRW5zdXJlIHdlIGhhdmUgc29tZSBwbHVnaW5zIGZvciBzb21lIHVzZWZ1bCBpbWFnZSBmb3JtYXRzCitSUkVDT01NRU5EU18ke1BOfSArPSAicXQ0LXBsdWdpbi1pbWFnZWZvcm1hdC1naWYgcXQ0LXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIHF0NC1wbHVnaW4taW1hZ2Vmb3JtYXQtdGlmZiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXAvbm8taG9zdC1wYXRocy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmI1YmIxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcW1tcC9uby1ob3N0LXBhdGhzLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0RvIG5vdCBpbmNsdWRlIC91c3IvaW5jbHVkZSBob3N0IHBhdGhzCisKK1RoZXNlIHdlcmUgYWRkZWQgdXBzdHJlYW0gYXBwYXJlbnRseSBmb3IgZnJlZWJzZCBzdXBwb3J0LCBidXQgdHJpZ2dlcgorY29tcGlsZXIgd2FybmluZ3MgZHVyaW5nIHRoZSBidWlsZCBhbmQgY291bGQgYmUgZGFuZ2Vyb3VzLCBzbyByZW1vdmUKK3RoZW0uCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY3Jvc3NdCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorCitVcGRhdGUgcGF0Y2ggZm9yIHZlcnNpb24gMC43LjQuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorCistLS0gcW1tcC0wLjcuNC9DTWFrZUxpc3RzLnR4dAkyMDE0LTAxLTEwIDA5OjU5OjQ0Ljk3MTgzNzc0NiArMDgwMAorKysrIHFtbXAtMC43LjQvQ01ha2VMaXN0cy50eHQubmV3CTIwMTQtMDEtMTAgMTA6MjQ6NTEuODU1ODM3NTY2ICswODAwCitAQCAtMSw5ICsxLDUgQEAKKyBjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMi42LjApCisgCistI2ZyZWVic2Qgc3VwcG9ydAorLWluY2x1ZGVfZGlyZWN0b3JpZXMoU1lTVEVNIC91c3IvbG9jYWwvaW5jbHVkZSkKKy1TRVQoQ01BS0VfUkVRVUlSRURfSU5DTFVERVMgJHtDTUFLRV9SRVFVSVJFRF9JTkNMVURFU30gL3Vzci9sb2NhbC9pbmNsdWRlKQorLQorICNleHRyYWN0IHZlcnNpb24gZnJvbSBxbW1wLmgKKyBGSUxFKFNUUklOR1MgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9zcmMvcW1tcC9xbW1wLmgiCisgICAgICBRTU1QX1ZFUlNJT05fREFUQSBSRUdFWCAiXiNkZWZpbmVbIFx0XStRTU1QX1ZFUlNJT05fW0EtWl0rWyBcdF0rWzAtOV0rLiokIikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3FtbXBfMC44LjYuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OGFkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQtYXBwcy9xbW1wXzAuOC42LmJiCkBAIC0wLDAgKzEsNzYgQEAKK1NVTU1BUlkgPSAiUXQtYmFzZWQgTXVsdGltZWRpYSBQbGF5ZXIiCitERVNDUklQVElPTiA9ICJRbW1wIGlzIGFuIGF1ZGlvIHBsYXllciwgd3JpdHRlbiB3aXRoIHRoZSBoZWxwIG9mIHRoZSBRdCBsaWJyYXJ5LiBUaGUgdXNlciBpbnRlcmZhY2UgaXMgc2ltaWxhciB0byBXaW5hbXAgb3IgWE1NUy4iCitIT01FUEFHRSA9ICJodHRwOi8vcW1tcC55bHNvZnR3YXJlLmNvbSIKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNFTlNFX0ZMQUdTID0gImNvbW1lcmNpYWwiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyIKK1NFQ1RJT04gPSAibXVsdGltZWRpYSIKKworREVQRU5EUyA9ICJ0YWdsaWIgbGlibWFkIGxpYnZvcmJpcyBsaWJvZ2cgYWxzYS1saWIgbGlic25kZmlsZTEgbGlic2FtcGxlcmF0ZTAgY3VybCIKKworU1JDX1VSSSA9ICJodHRwOi8vcW1tcC55bHNvZnR3YXJlLmNvbS9maWxlcy8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL25vLWhvc3QtcGF0aHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjY3ZTk2ZTg5YzYxYjc0MzJlNWExMmY1NTVkYjcwMmIxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBkYWVhM2YwYTBkZjdiMzQwODk1MTNjMmM1NzQxM2M4MjgxNmFiODg5MmJkZGFiZjQ5YzE4YTc5NTYyNTU0NDkiCitpbmhlcml0IGNtYWtlIHF0NHgxMQorCitRTU1QX1BMVUdJTl9PUFRJT05TID8/PSAiXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTU1TOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTVBDOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfTU9EUExVRzpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX1dBVlBBQ0s6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9GRk1QRUc6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9BQUM6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9DREE6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9NSURJOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfR01FOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfT1NTNDpCT09MPUZBTFNFIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EVVNFX0pBQ0s6Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9CUzJCOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgLURVU0VfUFJPSkVDVE06Qk9PTD1GQUxTRSBcCisgICAgICAgICAgICAgICAgICAgICAgICAtRFVTRV9FTkNBOkJPT0w9RkFMU0UgXAorICAgICAgICAgICAgICAgICAgICAgICAgIgorCitleHBvcnQgRVhUUkFfT0VDTUFLRSA9ICItRFFUX1FNQUtFX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9RTUFLRX0gXAorICAgICAgICAgICAgICAgICAgICAgICAgLURRVF9MUkVMRUFTRV9FWEVDVVRBQkxFPSR7T0VfUU1BS0VfTFJFTEVBU0V9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTU9DX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9NT0N9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfVUlDX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9VSUN9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfUkNDX0VYRUNVVEFCTEU9JHtPRV9RTUFLRV9SQ0N9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfTElCUkFSWV9ESVI9JHtPRV9RTUFLRV9MSUJESVJfUVR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfSEVBREVSU19ESVI9JHtPRV9RTUFLRV9JTkNESVJfUVR9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIC1EUVRfUVRDT1JFX0lOQ0xVREVfRElSPSR7T0VfUU1BS0VfSU5DRElSX1FUfS9RdENvcmUgXAorICAgICAgICAgICAgICAgICAgICAgICAgJHtRTU1QX1BMVUdJTl9PUFRJT05TfSBcCisgICAgICAgICAgICAgICAgICAgICAgICAiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIEVuc3VyZSB3ZSBnZXQgdGhlIGNtYWtlIGNvbmZpZ3VyZSBhbmQgbm90IHFtYWtlCisJY21ha2VfZG9fY29uZmlndXJlCit9CisKK1BBQ0tBR0VTX0RZTkFNSUMgKz0gIl5xbW1wLXBsdWdpbi0uKiAiCisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kICgpIHsKKyAgICBxbW1wX2xpYmRpciA9IGQuZXhwYW5kKCcke2xpYmRpcn0vcW1tcCcpCisgICAgZ2QgPSBkLmV4cGFuZCgnJHtEfS8ke2xpYmRpcn0vcW1tcCcpCisgICAgcGx1Z19kaXJzID0gb3MubGlzdGRpcihnZCkKKworICAgIGZvciBwbHVnX2RpciBpbiBwbHVnX2RpcnM6CisgICAgICAgIGdfcGx1Z19kaXIgPSBvcy5wYXRoLmpvaW4ocW1tcF9saWJkaXIscGx1Z19kaXIpCisgICAgICAgIGRvX3NwbGl0X3BhY2thZ2VzKGQsIGdfcGx1Z19kaXIsICdebGliKC4qKVwuc28kJywgJ3FtbXAtcGx1Z2luLScgKyBwbHVnX2Rpci5sb3dlcigpICsgJy0lcycsICdRbW1wICcgKyBwbHVnX2RpciAgKyAnIHBsdWdpbiBmb3IgJXMnKQorfQorCitGSUxFU18ke1BOfSA9ICJcCisgICAgICAgICAgICAgICAgJHtiaW5kaXJ9L3FtbXAgXAorICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIqJHtTT0xJQlN9IFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2ljb25zLyogXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vcW1tcC9pbWFnZXMvKiBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvKiBcCisgICAgICAgICAgICAgICAgIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIlwKKyAgICAgICAgICAgICAgICAke2xpYmRpcn0vcW1tcC8qLy5kZWJ1Zy8qIFwKKyAgICAgICAgICAgICAgICIKKworUkRFUEVORFNfJHtQTn0gKz0gInRhZ2xpYiBhbHNhLWxpYiBsaWJtYWQgY3VybCBsaWJpY3VpMThuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWFwcHMvcXVpY2t5XzAuNC5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhYTU2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1hcHBzL3F1aWNreV8wLjQuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJBIHNpbXBsZSBub3RlLXRha2luZyBhcHBsaWNhdGlvbiB3aXRoIFdpa2ktc3R5bGUgc3ludGF4IGFuZCBiZWhhdmlvdXIiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtYXBwcy5vcmcvY29udGVudC9zaG93LnBocC9RdWlja3k/Y29udGVudD04MDMyNSIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vdmVyc2lvbi5oO2VuZGxpbmU9MTk7bWQ1PTg3OGJkYWZmNDM4ZGFiODYyOTgzMDFmZDFhMjEwZTE0IgorU0VDVElPTiA9ICJ4MTEvYXBwcyIKKworUFIgPSAicjIiCisKK1NSQ19VUkkgPSAiaHR0cDovL3F0LWFwcHMub3JnL0NPTlRFTlQvY29udGVudC1maWxlcy84MDMyNS1xdWlja3ktMC40LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gIjgyNGQ5ZTQ3N2VlOWM0OTk0ZjczYTNjYjIxNTE2MWQ5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjljNjYzNzZlMDAzNWQ0NDU0NzYxMmJmNjI5ODkwNzY5YTYxNzhjM2U3ZWFmYmNmOTVmMWM2MjA3YWMwZjM1MmEiCisKK2luaGVyaXQgcXQ0eDExCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9CisJaW5zdGFsbCAtbSAwNzU1ICR7U30vJHtCUE59ICR7RH0ke2JpbmRpcn0KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdCBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdC9xdGRlbW8taW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWYwMjczCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0L3F0ZGVtby1pbml0CkBAIC0wLDAgKzEsNTUgQEAKKyMhL2Jpbi9zaAorCitzZXQgLWUKKworaWYgWyAteCAvdXNyL2Jpbi9xdGRlbW8gXTsgdGhlbgorCVFUREVNTz0icXRkZW1vIgorZWxzZQorCVFUREVNTz0icXRkZW1vRSAtcXdzIgorZmkKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCWVjaG8gIlN0YXJ0aW5nIHF0ZGVtbyIKKwlpZiBbIC1mIC9ldGMvcHJvZmlsZS5kL3RzbGliLnNoIF07IHRoZW4KKwkJLiAvZXRjL3Byb2ZpbGUuZC90c2xpYi5zaAorCWZpCisJaWYgWyAtZSAiJFRTTElCX1RTREVWSUNFIiBdOyB0aGVuCisJCWlmIFsgISAtZiAvZXRjL3BvaW50ZXJjYWwgXTsgdGhlbgorCQkJL3Vzci9iaW4vdHNfY2FsaWJyYXRlCisJCWZpCisJCWlmIFsgIiRRVERFTU8iID0gInF0ZGVtbyIgXTsgdGhlbgorCQkJWG9yZyAmCisJCQlleHBvcnQgRElTUExBWT06MAorCQkJJFFUREVNTyAmCisJCWVsc2UKKwkJCVFXU19NT1VTRV9QUk9UTz10c2xpYjokVFNMSUJfVFNERVZJQ0UgJFFUREVNTyAmCisJCWZpCisJZWxzZQorCQlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJCVhvcmcgJgorCQkJZXhwb3J0IERJU1BMQVk9OjAKKwkJZmkKKwkJJFFUREVNTyAmCisJZmkKKwk7OworICBzdG9wKQorCWVjaG8gIlN0b3BwaW5nIHF0ZGVtbyIKKwlpZiBbICIkUVRERU1PIiA9ICJxdGRlbW8iIF07IHRoZW4KKwkJa2lsbGFsbCBYb3JnCisJCWtpbGxhbGwgcXRkZW1vCisJZWxzZQorCQlraWxsYWxsIHF0ZGVtb0UKKwlmaQorCTs7CisgIHJlc3RhcnQpCisJJDAgc3RvcAorCSQwIHN0YXJ0CisJOzsKKyAgKikKKwllY2hvICJ1c2FnZTogJDAgeyBzdGFydCB8IHN0b3AgfCByZXN0YXJ0IH0iID4mMgorCWV4aXQgMQorCTs7Citlc2FjCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0LWRlbW8vcXQtZGVtby1pbml0XzAuMS5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExYjBiNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdC1kZW1vL3F0LWRlbW8taW5pdF8wLjEuYmIKQEAgLTAsMCArMSwxOSBAQAorU1VNTUFSWSA9ICJJbml0IHNjcmlwdCBmb3IgcXRkZW1vIgorTElDRU5TRSA9ICJNSVQiCitTUkNfVVJJID0gImZpbGU6Ly9xdGRlbW8taW5pdCIKK1BSID0gInIzIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9MSUNFTlNFO21kNT00ZDkyY2QzNzNhYmRhMzkzN2MyYmM0N2ZiYzQ5ZDY5MCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworUyA9ICIke1dPUktESVJ9IgorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vaW5pdC5kLworCWluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3F0ZGVtby1pbml0ICR7RH0ke3N5c2NvbmZkaXJ9L2luaXQuZC9xdGRlbW8KK30KKworaW5oZXJpdCB1cGRhdGUtcmMuZCBhbGxhcmNoCisKK0lOSVRTQ1JJUFRfTkFNRSA9ICJxdGRlbW8iCitJTklUU0NSSVBUX1BBUkFNUyA9ICJzdGFydCA5OSA1IDIgLiBzdG9wIDE5IDAgMSA2IC4iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdDQtZ3JhcGhpY3Mtc3lzdGVtL3F0NC1ncmFwaGljcy1zeXN0ZW1fMS4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2YzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0LWdyYXBoaWNzLXN5c3RlbS9xdDQtZ3JhcGhpY3Mtc3lzdGVtXzEuMC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlNldHMgZGVmYXVsdCBRdDQgR3JhcGhpY3MgU3lzdGVtIHRvICR7UVRfR1JBUEhJQ1NfU1lTVEVNfSIKK1NFQ1RJT04gPSAieDExL2Jhc2UiCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1BSID0gInIxIgorCitRVF9HUkFQSElDU19TWVNURU0gPz0gInJhc3RlciIKKworZGVmIF9nZXRfZXh0cmFfcmRlcGVuZHMoZCk6CisgICAgZ3MgPSBkLmdldFZhcignUVRfR1JBUEhJQ1NfU1lTVEVNJywgVHJ1ZSkKKyAgICBpZiBncyA9PSAib3BlbmdsIjoKKyAgICAgICAgcmV0dXJuICJxdDQtcGx1Z2luLWdyYXBoaWNzc3lzdGVtcy1nbGdyYXBoaWNzc3lzdGVtIgorCisgICAgcmV0dXJuICIiCisKK2RvX2luc3RhbGwgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L3Byb2ZpbGUuZC8KKwljZmdfZmlsZT0ke0R9LyR7c3lzY29uZmRpcn0vcHJvZmlsZS5kL3F0LWdyYXBoaWNzc3lzdGVtCisJZWNobyAiZXhwb3J0IFFUX0dSQVBISUNTU1lTVEVNPSR7UVRfR1JBUEhJQ1NfU1lTVEVNfSIgPiAkY2ZnX2ZpbGUKK30KKworUkRFUEVORFNfJHtQTn0gPSAiJHtAX2dldF9leHRyYV9yZGVwZW5kcyhkKX0iCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHMuaW5jIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzcwMDhiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9uYXRpdmVzZGstcXQ0LXRvb2xzLmluYwpAQCAtMCwwICsxLDEyNSBAQAorU1VNTUFSWSA9ICJTREsgdG9vbHMgZm9yIFF0IHZlcnNpb24gNC54IgorREVQRU5EUyA9ICJuYXRpdmVzZGstemxpYiBuYXRpdmVzZGstZGJ1cyBxdDQtbmF0aXZlICR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAneDExJywgJ3ZpcnR1YWwvbmF0aXZlc2RrLWxpYngxMScsICcnLCBkKX0iCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9xdDQtJHtQVn06IgorCitpbmhlcml0IG5hdGl2ZXNkayBxbWFrZTIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQucXQtcHJvamVjdC5vcmcvb2ZmaWNpYWxfcmVsZWFzZXMvcXQvNC44LyR7UFZ9L3F0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwNS1jb25maWd1cmUtc2V0LUxGTEFHUy10by1waWNrLXVwLXpsaWItZnJvbS1zdGFnaW5nLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA3LWRidXMtUmVtb3ZlLWNvbnN0LXVzYWdlLXRoYXQtY2F1c2VzLWNvbXBpbGUtZmFpbHVyZS0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2crKy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2xpbnV4LmNvbmYiCisKK1MgPSAiJHtXT1JLRElSfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9IgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFLkxHUEw7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xJQ0VOU0UuR1BMMzttZDU9NmUxNjk0ZWUzMzhkYjQxMDQxNzUxNzg4NDkxOGQ0ZDIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTEdQTF9FWENFUFRJT04udHh0O21kNT0wMTQ1YzRkMWI2Zjk2YTY2MWMyYzEzOWRmYjI2OGZiNiIKKworcmVxdWlyZSBxdDRfYXJjaC5pbmMKKworIyBGSVhNRTogbWFrZSBpdCB3b3JrIHdpdGggIiR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9wa2ctY29uZmlnIC0tY2ZsYWdzIGRidXMtMSIKK0VYVFJBX09FQ09ORiA9ICItcHJlZml4ICR7cHJlZml4fSBcCisgICAgICAgICAgICAgICAgLXF0LWxpYmpwZWcgLXN5c3RlbS16bGliIFwKKyAgICAgICAgICAgICAgICAtbm8tbGlianBlZyAtbm8tbGlicG5nIC1uby1saWJtbmcgLW5vLWxpYnRpZmYgXAorICAgICAgICAgICAgICAgIC1uby1hY2Nlc3NpYmlsaXR5IFwKKyAgICAgICAgICAgICAgICAtbm8tY3VwcyBcCisgICAgICAgICAgICAgICAgLW5vLWV4Y2VwdGlvbnMgIFwKKyAgICAgICAgICAgICAgICAtbm8tbmFzLXNvdW5kIFwKKyAgICAgICAgICAgICAgICAtbm8tbmlzIC1uby1vcGVuc3NsIFwKKyAgICAgICAgICAgICAgICAtdmVyYm9zZSAtcmVsZWFzZSAtZmFzdCAtc3RhdGljIFwKKyAgICAgICAgICAgICAgICAtcGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisgICAgICAgICAgICAgICAgLXhwbGF0Zm9ybSAke1RBUkdFVF9PU30tb2UtZysrIFwKKyAgICAgICAgICAgICAgICAtYXJjaCAke1FUX0FSQ0h9IFwKKyAgICAgICAgICAgICAgICAtZW1iZWRkZWQgLW5vLWZyZWV0eXBlIC1uby1nbGliIC1uby1pY29udiBcCisgICAgICAgICAgICAgICAgLXF0M3N1cHBvcnQgXAorICAgICAgICAgICAgICAgIC1JJHtTVEFHSU5HX0RJUl9IT1NUfSR7U0RLUEFUSE5BVElWRX0vdXNyL2luY2x1ZGUvZGJ1cy0xLjAgXAorICAgICAgICAgICAgICAgIC1JJHtTVEFHSU5HX0RJUl9IT1NUfSR7U0RLUEFUSE5BVElWRX0vdXNyL2xpYi9kYnVzLTEuMC9pbmNsdWRlIgorCisjIHlhbmsgZGVmYXVsdCAtZSwgb3RoZXJ3aXNlIHdlIGdldCB0aGUgZm9sbG93aW5nIGVycm9yOgorIyBtb2NfcWJ1ZmZlci5jcHA6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0VYVFJBX09FTUFLRSA9ICIgIgorCitkb19jb25maWd1cmUoKSB7CisgICAgIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKyAgICB1bnNldCBMRAorCisgICAgaWYgWyAhIC1lIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyBdOyB0aGVuCisgICAgICAgIGxuIC1zZiBsaW51eC1nKysgbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrCisgICAgZmkKKworICAgIGNwIC4uL2crKy5jb25mIG1rc3BlY3MvY29tbW9uCisgICAgY3AgLi4vbGludXguY29uZiBta3NwZWNzL2NvbW1vbgorCisgICAgaWYgWyAtZiBta3NwZWNzL2NvbW1vbi9nKystYmFzZS5jb25mIF0gOyB0aGVuCisgICAgICAgICMgZG9uJ3QgdXNlIGhvc3QgZysrIGV2ZW4gZHVyaW5nIGNvbmZpZ3VyZSAoNC44LjArKQorICAgICAgICBzZWQgLWkgLWUgInMjPSBnKysjPSAke0NYWH0jIiBta3NwZWNzL2NvbW1vbi9nKystYmFzZS5jb25mCisgICAgICAgIHNlZCAtaSAtZSAicyM9IGdjYyM9ICR7Q0N9IyIgbWtzcGVjcy9jb21tb24vZysrLWJhc2UuY29uZgorICAgIGZpCisKKyAgICAjIFVzZSBxbWFrZSBmcm9tIHF0NC1uYXRpdmUgZm9yIGJ1aWxkaW5nCisgICAgaWYgWyAhIC1lIGJpbi9xbWFrZSBdOyB0aGVuCisgICAgICAgIGxuIC1zZiAke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIGJpbi9xbWFrZQorICAgIGZpCisgICAgc2V0X2FyY2gKKyAgICAoZWNobyBvOyBlY2hvIHllcykgfCBDQz0iJHtDQ30iIENYWD0iJHtDWFh9IiAuL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0gfHwgZGllICJDb25maWd1cmluZyBxdCBmYWlsZWQuIEVYVFJBX09FQ09ORiB3YXMgJHtFWFRSQV9PRUNPTkZ9IgorfQorCitUT0JVSUxEID0gIlwKKyAgc3JjL3Rvb2xzL2Jvb3RzdHJhcCBcCisgIHNyYy90b29scy9tb2MgXAorICBzcmMvY29yZWxpYiBcCisgIHNyYy9zcWwgXAorICBzcmMvZGJ1cyBcCisgIHNyYy9xdDNzdXBwb3J0IFwKKyAgc3JjL3htbCBcCisgIHNyYy90b29scy91aWMgXAorICBzcmMvdG9vbHMvcmNjIFwKKyAgc3JjL25ldHdvcmsgXAorICBzcmMvZ3VpIFwKKyAgc3JjL3Rvb2xzL3VpYzMgXAorICB0b29scy9saW5ndWlzdC9scmVsZWFzZSBcCisgIHRvb2xzL2xpbmd1aXN0L2x1cGRhdGUgXAorICB0b29scy9xZGJ1cyBcCisiCisKK2RvX2NvbXBpbGUoKSB7CisgICAgZm9yIGkgaW4gJHtUT0JVSUxEfTsgZG8KKyAgICAgICAgY2QgJHtTfS8kaSAmJiBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgZG9uZQorCisgICAgIyBCdWlsZCBuYXRpdmVzZGsgcW1ha2UKKyAgICBleHBvcnQgUU1BS0VTUEVDPSIke1N9L21rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKyIKKyAgICBjZCAke1N9L3FtYWtlCisgICAgJHtPRV9RTUFLRV9RTUFLRX0KKyAgICBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisgICAgY2QgJHtTfQorfQorCitkb19pbnN0YWxsKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSBiaW4vcW1ha2UyICR7RH0ke2JpbmRpcn0vcW1ha2UyCisgICAgZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHA7IGRvCisgICAgICAgIGluc3RhbGwgLW0gMDc1NSBiaW4vJHtpfSAke0R9JHtiaW5kaXJ9LyR7aX00CisgICAgZG9uZQorCisgICAgKGNkICR7RH0ke2JpbmRpcn07IFwKKyAgICBsbiAtcyBxbWFrZTIgcW1ha2U7IFwKKyAgICBmb3IgaSBpbiBtb2MgdWljIHVpYzMgcmNjIGxyZWxlYXNlIGx1cGRhdGUgcWRidXNjcHAyeG1sIHFkYnVzeG1sMmNwcDsgZG8gXAorICAgICAgICBsbiAtcyAke2l9NCAke2l9OyBcCisgICAgZG9uZSkKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICBjYXQgPiR7RH0ke3N5c2NvbmZkaXJ9L3F0LmNvbmYgPDxFT0YKK1tQYXRoc10KK1ByZWZpeCA9ICR7cHJlZml4fQorRU9GCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L25hdGl2ZXNkay1xdDQtdG9vbHNfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiYTA3YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvbmF0aXZlc2RrLXF0NC10b29sc180LjguNy5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgbmF0aXZlc2RrLXF0NC10b29scy5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovLzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjU3ZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcuaW5jCkBAIC0wLDAgKzEsNjggQEAKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBHUEx2MyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0UuTEdQTDttZDU9ZmJjMDkzOTAxODU3ZmNkMTE4ZjA2NWY5MDA5ODJjMjQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRS5HUEwzO21kNT02ZTE2OTRlZTMzOGRiNDEwNDE3NTE3ODg0OTE4ZDRkMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MR1BMX0VYQ0VQVElPTi50eHQ7bWQ1PTAxNDVjNGQxYjZmOTZhNjYxYzJjMTM5ZGZiMjY4ZmI2IgorCitGSUxFU0VYVFJBUEFUSFMgPS4gIiR7RklMRV9ESVJOQU1FfS9xdDQtJHtQVn06IgorCitTUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5xdC1wcm9qZWN0Lm9yZy9vZmZpY2lhbF9yZWxlYXNlcy9xdC80LjgvJHtQVn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDA4LXFtYWtlLnByby1BbGxvdy1idWlsZGluZy1hLXNlcGFyYXRlLXFtYWtlLWZvci10aGUtdGEucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwOS1xbWFrZS1maXgtc291cmNlLWZpbGUtcmVmZXJlbmNlcy1pbi1xbWFrZS5wcmkucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMC1jb25maWd1cmUtSGFjay10by1ub3QtdXNlLXRoZS1wZ19jb25maWctb2YtdGhlLWhvc3QtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTEtZnJlZXR5cGUtaG9zdC1pbmNsdWRlcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxMy1jb25maWd1cmUtYWRkLWNyb3NzYXJjaC1vcHRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMTktRml4ZXMtZm9yLWdjYy00LjcuMC1wYXJ0aWN1bGFybHktb24tcWVtdXg4Ni5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDI3LXRvb2xzLnByby1kaXNhYmxlLXFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDMyLWFhcmNoNjRfYWRkX2hlYWRlci5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkX2NoZWNrX2Zvcl9hYXJjaDY0XzMyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2crKy5jb25mIFwKKyAgICAgICAgICAgZmlsZTovL2xpbnV4LmNvbmYgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkOTkwZWU2NmJmN2FiMGM3ODU1ODk3NzZmMzViYTZhZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJlMjg4MjI5NTA5N2U0N2ZlMDg5ZjhhYzc0MWE5NWZlZjQ3ZTBhNzNhM2YzY2RmMjFiNTY5OTA2MzhmNjI2ZWEwIgorCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworIyBkaXNhYmxlIHdlYmtpdCBmb3IgbWlwczY0IG4zMiB0ZW1wb3JhcmlseSB0aGF0IGZhaWxzIHRvIGNvbXBpbGUsCisjIHF0IHVwc3RyZWFtIGRlZmVjdDoKKyMgaHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0zOTIyNAorUVRfQ09ORklHX0ZMQUdTX2FwcGVuZF9taXBzNjRuMzIgPSAiIC1uby13ZWJraXQiCisKKyMgZGlzYWJsZSB3ZWJraXQgZm9yIGFhcmNoNjQgdGVtcG9yYXJpbHkgdGhhdCBmYWlscyB0byBjb21waWxlCitRVF9DT05GSUdfRkxBR1NfYXBwZW5kX2FhcmNoNjQgPSAiIC1uby13ZWJraXQiCisKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10b29sc19hcHBlbmQgICAgID0gIiAke2JpbmRpcn0vcW1sICR7YmluZGlyfS9xbWxwbHVnaW5kdW1wIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXRvb2xzLWRiZ19hcHBlbmQgPSAiICR7YmluZGlyfS8uZGVidWcvcW1sICR7YmluZGlyfS8uZGVidWcvcW1scGx1Z2luZHVtcCIKKworUEFDS0FHRVNfYXBwZW5kID0gIiAke1FUX0JBU0VfTkFNRX0tdGVzdHMtZGJnICR7UVRfQkFTRV9OQU1FfS10ZXN0cyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS10ZXN0cy1kYmcgICAgICAgID0gIiR7cHJlZml4fS90ZXN0cy9xdDQvKi8uZGVidWciCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdGVzdHMgICAgICAgICAgICA9ICIke3ByZWZpeH0vdGVzdHMvcXQ0LyoiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAnczpxdFByZXBhcmVUb29sKExSRUxFQVNFLCBscmVsZWFzZSk6TFJFTEVBU0UgPSAke09FX1FNQUtFX0xSRUxFQVNFfTpnJyBcCisgICAgICAgICR7U30vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8KKworICAgIHNlZCAtaSBcCisgICAgLWUgL1FNQUtFX01PQ1wgL2QgXAorICAgIC1lIC9RTUFLRV9VSUNcIC9kIFwKKyAgICAtZSAvUU1BS0VfVUlDM1wgL2QgXAorICAgIC1lIC9RTUFLRV9SQ0NcIC9kIFwKKyAgICAke1N9L2NvbmZpZ3VyZQorCisgICAgIyBBdm9pZCBwcm9ibGVtcyB3aXRoIFF0IDQuOC4wIGNvbmZpZ3VyZSBzZXR0aW5nIFFNQUtFX0xJTksgZnJvbSBMRCAoc2luY2Ugd2Ugd2FudCB0aGUgbGlua2VyIHRvIGJlIGcrKykKKyAgICB1bnNldCBMRAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhiMGEwOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDEtcWxpYnJhcnlpbmZvLWFsbG93LXRvLXNldC1xdC5jb25mLWZyb20tdGhlLW91dHNpZGUtdS5wYXRjaApAQCAtMCwwICsxLDQzIEBACitGcm9tIDU1MDk3ZDI3ZThiNzQ2YjNkNWZmNDM3OTM5Y2FmMWZhNDNjMGQ2MmIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBIb2xnZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAxNzoyMjozMCArMDIwMAorU3ViamVjdDogW1BBVENIIDAxLzIxXSBxbGlicmFyeWluZm86IGFsbG93IHRvIHNldCBxdC5jb25mIGZyb20gdGhlIG91dHNpZGUKKyB1c2luZyB0aGUgZW52aXJvbm1lbnQKKworQWxsb3cgdG8gc2V0IGEgcXQuY29uZiBmcm9tIHRoZSBvdXRzaWRlIHVzaW5nIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBhbGxvd3MKK3RvIGluamVjdCBuZXcgcHJlZml4ZXMgYW5kIG90aGVyIHBhdGhzIGludG8gcW1ha2UuIFRoaXMgaXMgbmVlZGVkIHdoZW4gdXNpbmcKK3RoZSBzYW1lIHFtYWtlIGJpbmFyeSB0byBidWlsZCBxdC94MTEgYW5kIHF0L2VtYmVkZGVkCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcCB8IDUgKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9nbG9iYWwvcWxpYnJhcnlpbmZvLmNwcCBiL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCitpbmRleCAxODBkYzM5Li40YWRhZDM1IDEwMDY0NAorLS0tIGEvc3JjL2NvcmVsaWIvZ2xvYmFsL3FsaWJyYXJ5aW5mby5jcHAKKysrKyBiL3NyYy9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uY3BwCitAQCAtNTQsNiArNTQsNyBAQAorIFFUX0JFR0lOX05BTUVTUEFDRQorIGV4dGVybiBRU3RyaW5nIHFtYWtlX2xpYnJhcnlJbmZvRmlsZSgpOworIFFUX0VORF9OQU1FU1BBQ0UKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2Vsc2UKKyAjIGluY2x1ZGUgInFjb3JlYXBwbGljYXRpb24uaCIKKyAjZW5kaWYKK0BAIC0xMTIsNiArMTEzLDEwIEBAIFFTZXR0aW5ncyAqUUxpYnJhcnlJbmZvUHJpdmF0ZTo6ZmluZENvbmZpZ3VyYXRpb24oKQorICNpZmRlZiBCT09UU1RSQVBQSU5HCisgICAgIGlmKCFRRmlsZTo6ZXhpc3RzKHF0Y29uZmlnKSkKKyAgICAgICAgIHF0Y29uZmlnID0gcW1ha2VfbGlicmFyeUluZm9GaWxlKCk7CisrICAgIGlmICghUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykpIHsKKysgICAgICAgIFFCeXRlQXJyYXkgY29uZmlnID0gZ2V0ZW52KCJRVF9DT05GX1BBVEgiKTsKKysgICAgICAgIHF0Y29uZmlnID0gUUZpbGU6OmRlY29kZU5hbWUoY29uZmlnKTsKKysgICAgfQorICNlbHNlCisgICAgIGlmICghUUZpbGU6OmV4aXN0cyhxdGNvbmZpZykgJiYgUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSkgeworICNpZmRlZiBRX09TX01BQworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDItcWtiZHR0eV9xd3MtZml4LWJ1aWxkLXdpdGgtb2xkLWtlcm5lbC1oZWFkZXJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZmM4ODcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAyLXFrYmR0dHlfcXdzLWZpeC1idWlsZC13aXRoLW9sZC1rZXJuZWwtaGVhZGVycy5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDVlNmIxMDUxYWZhMzA5OWEwMmE3NThiMDU5NjIzNjc1OWQ3MDY3MGUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MTg6MDggKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMi8yMV0gcWtiZHR0eV9xd3M6IGZpeCBidWlsZCB3aXRoIG9sZCBrZXJuZWwgaGVhZGVycworCitUaGlzIGlzc3VlIGlzIHRoYXQgd2l0aCBDKysgY29tcGlsZXIgcHJvY2VzcyBhbiBvbGQgdmVyc2lvbiBvZiBrZXJuZWwKK2hlYWRlciBmaWxlLCBjb2luY2lkZW50bHkgdGhhdCBmaWxlIGhhcyBhIHZhcmlhYmxlIG5hbWVkICduZXcnOgorCisqICdlbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAnIGluY2x1ZGUgJ2xpbnV4L3Z0LmgnOworKiAnL3Vzci9pbmNsdWRlL2xpbnV4L3Z0LmgnIGhhcyBiZWxvdyBjb2RlIG9uIFNMRUQtMTEueDoKKyAgICArIHVuc2lnbmVkIGludCBuZXc7CisKK09uIG1vc3RseSBob3N0cyBpdCBoYXMgYmVlbiBjaGFuZ2VkIHRvOiBuZXcgLT4gbmV3ZXYuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIHNyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwIHwgMTIgKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcWtiZHR0eV9xd3MuY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKK2luZGV4IGE0NjgxMWIuLjc2MjEzOGYgMTAwNjQ0CistLS0gYS9zcmMvZ3VpL2VtYmVkZGVkL3FrYmR0dHlfcXdzLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xa2JkdHR5X3F3cy5jcHAKK0BAIC01NCw4ICs1NCwyMCBAQAorIAorICNpZiBkZWZpbmVkIFFfT1NfTElOVVgKKyAjICBpbmNsdWRlIDxsaW51eC9rZC5oPgorKworKy8qIFdvcmthcm91bmQga2VybmVsIGhlYWRlcnMgdXNpbmcgIm5ldyIgYXMgdmFyaWFibGUgbmFtZS4gVGhlIHByb2JsZW0KKysgaXMgc3BlY2lmaWMgdG8gU0xFRC0xMSwgb3RoZXIgZGlzdHJvcyB1c2UgIm5ld2V2IiByYXRoZXIgdGhhbiAibmV3IiAqLworKyNpZmRlZiBfX2NwbHVzcGx1cworKyN3YXJuaW5nICJ3b3JrYXJvdW5kIGtlcm5lbCBoZWFkZXJzIHVzaW5nIG5ldyBhcyB2YXJpYWJsZSBuYW1lIG9uIFNMRUQgMTEiCisrI2RlZmluZSBuZXcgbmV3ZXYKKysjZW5kaWYKKysKKyAjICBpbmNsdWRlIDxsaW51eC92dC5oPiAvL1RPRE86IG1vdmUgdnQgaGFuZGxpbmcgc29tZXdoZXJlIGVsc2UgKFFMaW51eEZiU2NyZWVuPykKKyAKKysjaWZkZWYgX19jcGx1c3BsdXMKKysjdW5kZWYgbmV3CisrI2VuZGlmCisrCisgIyAgaW5jbHVkZSAicXNjcmVlbl9xd3MuaCIKKyAjICBpbmNsdWRlICJxd2luZG93c3lzdGVtX3F3cy5oIgorICMgIGluY2x1ZGUgInFhcHBsaWNhdGlvbi5oIgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDAzLXdlYmtpdDItc2V0LU9VVFBVVF9ESVItdmFsdWUtaWYtZW1wdHkucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNhZWE1MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDMtd2Via2l0Mi1zZXQtT1VUUFVUX0RJUi12YWx1ZS1pZi1lbXB0eS5wYXRjaApAQCAtMCwwICsxLDM0IEBACitGcm9tIGI2ODA1ZTg4M2MwNzhmNzY0N2Q5MjM0YWNhNGUzNTEzZWJkMWM5YmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CitEYXRlOiBUdWUsIDEgTWF5IDIwMTIgMDc6NDg6MTUgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwMy8yMV0gd2Via2l0Mjogc2V0IE9VVFBVVF9ESVIgdmFsdWUgaWYgZW1wdHkKKworV2l0aG91dCB0aGlzIGRvX2NvbmZpZ3VyZSB3YXMgdHJ5aW5nIHRvIGNyZWF0ZSAvaW5jbHVkZS9XZWJDb3JlL2xpYmR1bW15LnBybCBpbiByb290IG9mIGJ1aWxkIGhvc3QgZmlsZXN5c3RlbQorbm93IGl0J3MgaW4gcHJvcGVyIHBsYWNlICR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguMS9zcmMvM3JkcGFydHkvd2Via2l0L2luY2x1ZGUvV2ViQ29yZS9saWJkdW1teS5wcmwKKworRmlyc3QgcmVwb3J0ZWQgaGVyZToKK2h0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9vcGVuZW1iZWRkZWQtZGV2ZWxAbGlzdHMub3BlbmVtYmVkZGVkLm9yZy9tc2cyNDQzNi5odG1sCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybyB8IDIgKysKKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLnBybyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCitpbmRleCAwMDZhODhjLi41ZTE3MTkzIDEwMDY0NAorLS0tIGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViS2l0Mi9EZXJpdmVkU291cmNlcy5wcm8KKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMucHJvCitAQCAtMyw2ICszLDggQEAgVEFSR0VUID0gZHVtbXkKKyAKKyBDT05GSUcgLT0gZGVidWdfYW5kX3JlbGVhc2UKKyAKKytpc0VtcHR5KE9VVFBVVF9ESVIpOiBPVVRQVVRfRElSID0gLi4vLi4KKysKKyBDT05GSUcoc3RhbmRhbG9uZV9wYWNrYWdlKSB7CisgICAgIGlzRW1wdHkoV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIpOldFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCRQV0QvZ2VuZXJhdGVkCisgICAgIGlzRW1wdHkoV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSKTpXQ19HRU5FUkFURURfU09VUkNFU19ESVIgPSAkJFBXRC8uLi9XZWJDb3JlL2dlbmVyYXRlZAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA0LWNvbmZpZ3VyZS1xbWFrZS1pcy1hbHJlYWR5LWJ1aWx0LWluLXF0NC10b29scy1uYXRpdmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViOGE1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDQtY29uZmlndXJlLXFtYWtlLWlzLWFscmVhZHktYnVpbHQtaW4tcXQ0LXRvb2xzLW5hdGl2ZS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIGFmNjk5YzZlOGNmOWZiMjhkNmY4Yjc4OWJmMzNkNTNiNDdlZGFlYzcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIEtyZWxpbiA8aGFja2VyQGtsZXZlci5uZXQ+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjI0OjIwICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMDQvMjFdIGNvbmZpZ3VyZTogcW1ha2UgaXMgYWxyZWFkeSBidWlsdCBpbiBxdDQtdG9vbHMtbmF0aXZlLAorIHNvIGRpc2FibGUgaXQKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGUzZDQ2NGIuLmNjMDRiMjcgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTQ4OTksNyArNDg5OSw3IEBAIHNldEJvb3RzdHJhcFZhcmlhYmxlKCkKKyB9CisgCisgIyBidWlsZCBxbWFrZQorLWlmIHRydWU7IHRoZW4gIyMjWyAnIScgLWYgIiRvdXRwYXRoL2Jpbi9xbWFrZSIgXTsKKytpZiBmYWxzZTsgdGhlbiAjIyNbICchJyAtZiAiJG91dHBhdGgvYmluL3FtYWtlIiBdOworICAgICBlY2hvICJDcmVhdGluZyBxbWFrZS4gUGxlYXNlIHdhaXQuLi4iCisgCisgICAgIE9MRF9RQ09ORklHX0g9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDUtY29uZmlndXJlLXNldC1MRkxBR1MtdG8tcGljay11cC16bGliLWZyb20tc3RhZ2luZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYThmMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNS1jb25maWd1cmUtc2V0LUxGTEFHUy10by1waWNrLXVwLXpsaWItZnJvbS1zdGFnaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKK0Zyb20gYWM5MzIzN2JjOTBlYTc3NzNjMGVmNTI3NTk2MmJhYmEwMWQ0YTljNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9KZXJlbXk9MjBMYWluPUMzPUE5Pz0gPGplcmVteS5sYWluZUBtNHgub3JnPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyNzo0NCArMDIwMAorU3ViamVjdDogW1BBVENIIDA1LzIxXSBjb25maWd1cmU6IHNldCBMRkxBR1MgdG8gcGljayB1cCB6bGliIGZyb20gc3RhZ2luZworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBjYzA0YjI3Li41YTdjNGVlIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC02OTAsNyArNjkwLDcgQEAgZmkKKyAjIGluaXRhbGl6ZSB2YXJpYWJsZXMKKyAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorLVNZU1RFTV9WQVJJQUJMRVM9IlJBTkxJQiBTVFJJUCBPQkpEVU1QIExEIENDIENYWCBDRkxBR1MgQ1hYRkxBR1MgTERGTEFHUyIKKytTWVNURU1fVkFSSUFCTEVTPSJSQU5MSUIgU1RSSVAgT0JKRFVNUCBMRCBDQyBDWFggQ0ZMQUdTIENYWEZMQUdTIExERkxBR1MgTEZMQUdTIgorIGZvciB2YXJuYW1lIGluICRTWVNURU1fVkFSSUFCTEVTOyBkbworICAgICBxbWFrZXZhcm5hbWU9IiR7dmFybmFtZX0iCisgICAgICMgdXNlIExERkxBR1MgZm9yIGF1dG9jb25mIGNvbXBhdCwgYnV0IHFtYWtlIHVzZXMgUU1BS0VfTEZMQUdTCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDYtY29uZmlndXJlLVVzZS1PRV9RTUFLRV8tdmFsdWVzLXRvLXNwZWNpZnktUXQtdXRpbGl0eS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGViZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNi1jb25maWd1cmUtVXNlLU9FX1FNQUtFXy12YWx1ZXMtdG8tc3BlY2lmeS1RdC11dGlsaXR5LnBhdGNoCkBAIC0wLDAgKzEsMzggQEAKK0Zyb20gMGJjMGRiODM4MTJiNTkwMGRjNGU2ZmZhOTZiZGVhYjQ2YjZhZGNhZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDoyOTowOSArMDIwMAorU3ViamVjdDogW1BBVENIIDA2LzIxXSBjb25maWd1cmU6IFVzZSBPRV9RTUFLRV8qIHZhbHVlcyB0byBzcGVjaWZ5IFF0IHV0aWxpdHkKKyBwYXRocworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgMTAgKysrKystLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDVhN2M0ZWUuLmRiNGQwNDQgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTg2ODMsMTEgKzg2ODMsMTEgQEAgUU1BS0VfQUJTT0xVVEVfU09VUkNFX1JPT1QgPSBcJFwkUVRfU09VUkNFX1RSRUUKKyBRTUFLRV9NT0NfU1JDICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvc3JjL21vYworIAorICNsb2NhbCBwYXRocyB0aGF0IGNhbm5vdCBiZSBxdWVyaWVkIGZyb20gdGhlIFFUX0lOU1RBTExfKiBwcm9wZXJ0aWVzIHdoaWxlIGJ1aWxkaW5nIFFURElSCistUU1BS0VfTU9DICAgICAgICA9IFwkXCRRVF9CVUlMRF9UUkVFL2Jpbi9tb2MKKy1RTUFLRV9VSUMgICAgICAgID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3VpYworLVFNQUtFX1VJQzMgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vdWljMworLVFNQUtFX1JDQyAgICAgICAgPSBcJFwkUVRfQlVJTERfVFJFRS9iaW4vcmNjCistUU1BS0VfUURCVVNYTUwyQ1BQID0gXCRcJFFUX0JVSUxEX1RSRUUvYmluL3FkYnVzeG1sMmNwcAorK1FNQUtFX01PQyAgICAgICAgPSBcJHtPRV9RTUFLRV9NT0N9CisrUU1BS0VfVUlDICAgICAgICA9IFwke09FX1FNQUtFX1VJQ30KKytRTUFLRV9VSUMzICAgICAgID0gXCR7T0VfUU1BS0VfVUlDM30KKytRTUFLRV9SQ0MgICAgICAgID0gXCR7T0VfUU1BS0VfUkNDfQorK1FNQUtFX1FEQlVTWE1MMkNQUCA9IFwke09FX1FNQUtFX1FEQlVTWE1MMkNQUH0KKyBRTUFLRV9JTkNESVJfUVQgID0gXCRcJFFUX0JVSUxEX1RSRUUvaW5jbHVkZQorIFFNQUtFX0xJQkRJUl9RVCAgPSBcJFwkUVRfQlVJTERfVFJFRS9saWIKKyAKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwNy1kYnVzLVJlbW92ZS1jb25zdC11c2FnZS10aGF0LWNhdXNlcy1jb21waWxlLWZhaWx1cmUtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjNjOTIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA3LWRidXMtUmVtb3ZlLWNvbnN0LXVzYWdlLXRoYXQtY2F1c2VzLWNvbXBpbGUtZmFpbHVyZS0ucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorRnJvbSAyMDExYmI4MDI5NDgwYWYxZDEyNjZmMjU4ZTVhNWY1Y2VmNzM5MmQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF2ZWwgSGVpbWxpY2ggPHRyb3Bpa2hham1hQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzE6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwNy8yMV0gZGJ1czogUmVtb3ZlICJjb25zdCIgdXNhZ2UgdGhhdCBjYXVzZXMgY29tcGlsZSBmYWlsdXJlCisgYnVpbGRpbmcgbmF0aXZlc2RrLXF0NC10b29scworCitQYXRjaCBoYXMgYXBwYXJlbnRseSBiZWVuIHJlamVjdGVkIHVwc3RyZWFtLCBub3QgYmVjYXVzZSBpdCBpcyBpbnZhbGlkCitidXQgYmVjYXVzZSB0aGUgc3VibWl0dGVyIGRpZCBub3Qgc3VibWl0IGEgbWVyZ2UgcmVxdWVzdCBmb3IgaXQsIHNvIHRoZQordmFsaWRpdHkgb2YgdGhlIHBhdGNoIHVwc3RyZWFtIGlzIHVuY2VydGFpbi4gRm9yIGZ1cnRoZXIgZGV0YWlscyBzZWU6CitodHRwczovL2J1Z3JlcG9ydHMucXQtcHJvamVjdC5vcmcvYnJvd3NlL1FUQlVHLTE3OTYyCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtwb3NzaWJsZSByZXRyeV0KKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcCB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3NyYy9kYnVzL3FkYnVzaW50ZWdyYXRvci5jcHAgYi9zcmMvZGJ1cy9xZGJ1c2ludGVncmF0b3IuY3BwCitpbmRleCAwZjBiNjQ3Li5hYTRjYmFiIDEwMDY0NAorLS0tIGEvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAorKysrIGIvc3JjL2RidXMvcWRidXNpbnRlZ3JhdG9yLmNwcAorQEAgLTczLDcgKzczLDcgQEAgUVRfQkVHSU5fTkFNRVNQQUNFCisgc3RhdGljIGJvb2wgaXNEZWJ1Z2dpbmc7CisgI2RlZmluZSBxREJ1c0RlYnVnICAgICAgICAgICAgICBpZiAoITo6aXNEZWJ1Z2dpbmcpOyBlbHNlIHFEZWJ1ZworIAorLVFfR0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoY29uc3QgUVN0cmluZywgb3JnRnJlZWRlc2t0b3BEQnVzU3RyaW5nLCAoUUxhdGluMVN0cmluZyhEQlVTX1NFUlZJQ0VfREJVUykpKQorK1FfR0xPQkFMX1NUQVRJQ19XSVRIX0FSR1MoUVN0cmluZywgb3JnRnJlZWRlc2t0b3BEQnVzU3RyaW5nLCAoUUxhdGluMVN0cmluZyhEQlVTX1NFUlZJQ0VfREJVUykpKQorIAorIHN0YXRpYyBpbmxpbmUgUVN0cmluZyBkYnVzU2VydmljZVN0cmluZygpCisgeyByZXR1cm4gKm9yZ0ZyZWVkZXNrdG9wREJ1c1N0cmluZygpOyB9CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDgtcW1ha2UucHJvLUFsbG93LWJ1aWxkaW5nLWEtc2VwYXJhdGUtcW1ha2UtZm9yLXRoZS10YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzA3ZjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAwOC1xbWFrZS5wcm8tQWxsb3ctYnVpbGRpbmctYS1zZXBhcmF0ZS1xbWFrZS1mb3ItdGhlLXRhLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gNjRjZTVkMGU3YzE5NDM2YjkyOGEyYTBkOWQxOTJmNTZiZTNjOWJiMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDozMjo0MSArMDIwMAorU3ViamVjdDogW1BBVENIIDA4LzIxXSBxbWFrZS5wcm86IEFsbG93IGJ1aWxkaW5nIGEgc2VwYXJhdGUgcW1ha2UgZm9yIHRoZQorIHRhcmdldAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ10KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBxbWFrZS9xbWFrZS5wcm8gfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL3FtYWtlL3FtYWtlLnBybyBiL3FtYWtlL3FtYWtlLnBybworaW5kZXggMzhlMGZjZS4uNTNiMWZmYiAxMDA2NDQKKy0tLSBhL3FtYWtlL3FtYWtlLnBybworKysrIGIvcW1ha2UvcW1ha2UucHJvCitAQCAtNyw2ICs3LDcgQEAgQ09ORklHICs9IGNvbnNvbGUgYm9vdHN0cmFwCisgQ09ORklHIC09IHF0IHNoYXJlZCBhcHBfYnVuZGxlIHVpYworIERFRklORVMgKz0gUVRfQlVJTERfUU1BS0UgUVRfQk9PVFNUUkFQUEVECisgREVTVERJUiA9IC4uL2Jpbi8KKytUQVJHRVQgPSBxbWFrZTIKKyAKKyBPQkpFQ1RTX0RJUiA9IC4KKyBNT0NfRElSID0gLgorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMDktcW1ha2UtZml4LXNvdXJjZS1maWxlLXJlZmVyZW5jZXMtaW4tcW1ha2UucHJpLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjhjMTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDA5LXFtYWtlLWZpeC1zb3VyY2UtZmlsZS1yZWZlcmVuY2VzLWluLXFtYWtlLnByaS5wYXRjaApAQCAtMCwwICsxLDUyIEBACitGcm9tIGUxMjlkYzBkNmNkZTY5ZGQxNWQxODM2YzQxMTFlMDUyNmZjMjkxNjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6MzM6NDkgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAwOS8yMV0gcW1ha2U6IGZpeCBzb3VyY2UgZmlsZSByZWZlcmVuY2VzIGluIHFtYWtlLnByaQorCitGaXggZHVwbGljYXRlIGVudHJpZXMgaW4gU09VUkNFUyBhbmQgSEVBREVSUywgYW5kIGZpeCB0aGUgc291cmNlIGZpbGUKK2xpc3QgZm9yIHRoZSBzcGxpdCBvZiBxbG9jYWxlLmNwcC4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgcW1ha2UvcW1ha2UucHJpIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9xbWFrZS9xbWFrZS5wcmkgYi9xbWFrZS9xbWFrZS5wcmkKK2luZGV4IDMxZjY3ZjQuLjkwODE2NjkgMTAwNjQ0CistLS0gYS9xbWFrZS9xbWFrZS5wcmkKKysrKyBiL3FtYWtlL3FtYWtlLnByaQorQEAgLTIyLDggKzIyLDcgQEAgU09VUkNFUyArPSBwcm9qZWN0LmNwcCBwcm9wZXJ0eS5jcHAgbWFpbi5jcHAgZ2VuZXJhdG9ycy9tYWtlZmlsZS5jcHAgXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9zeW1iaWFuL2luaXRwcm9qZWN0ZGVwbG95X3N5bWJpYW4uY3BwIFwKKyAgICAgICAgICAgIGdlbmVyYXRvcnMvaW50ZWdyaXR5L2didWlsZC5jcHAgXAorICAgICAgICAgICAgd2luZG93cy9yZWdpc3RyeS5jcHAgXAorLSAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdC5jcHAgXAorLSAgICAgICAgICAgZ2VuZXJhdG9ycy9pbnRlZ3JpdHkvZ2J1aWxkLmNwcAorKyAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdC5jcHAKKyAKKyBIRUFERVJTICs9IHByb2plY3QuaCBwcm9wZXJ0eS5oIGdlbmVyYXRvcnMvbWFrZWZpbGUuaCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL3VuaXgvdW5peG1ha2UuaCBtZXRhLmggb3B0aW9uLmggY2FjaGVrZXlzLmggXAorQEAgLTQwLDggKzM5LDcgQEAgSEVBREVSUyArPSBwcm9qZWN0LmggcHJvcGVydHkuaCBnZW5lcmF0b3JzL21ha2VmaWxlLmggXAorICAgICAgICAgICAgZ2VuZXJhdG9ycy9zeW1iaWFuL2luaXRwcm9qZWN0ZGVwbG95X3N5bWJpYW4uaCBcCisgICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuaCBcCisgICAgICAgICAgICB3aW5kb3dzL3JlZ2lzdHJ5X3AuaCBcCistICAgICAgICAgICBzeW1iaWFuL2Vwb2Nyb290X3AuaCBcCistICAgICAgICAgICBnZW5lcmF0b3JzL2ludGVncml0eS9nYnVpbGQuaAorKyAgICAgICAgICAgc3ltYmlhbi9lcG9jcm9vdF9wLmgKKyAKKyBjb250YWlucyhRVF9FRElUSU9OLCBPcGVuU291cmNlKSB7CisgICAgREVGSU5FUyArPSBRTUFLRV9PUEVOU09VUkNFX0VESVRJT04KK0BAIC03Miw2ICs3MCw4IEBAIGJvb3RzdHJhcCB7ICNRdCBjb2RlCisgICAgICAgICBxbGlzdC5jcHAgXAorICAgICAgICAgcWxpbmtlZGxpc3QuY3BwIFwKKyAgICAgICAgIHFsb2NhbGUuY3BwIFwKKysgICAgICAgIHFsb2NhbGVfdG9vbHMuY3BwIFwKKysgICAgICAgIHFsb2NhbGVfdW5peC5jcHAgXAorICAgICAgICAgcW1hbGxvYy5jcHAgXAorICAgICAgICAgcW1hcC5jcHAgXAorICAgICAgICAgcW1ldGF0eXBlLmNwcCBcCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTAtY29uZmlndXJlLUhhY2stdG8tbm90LXVzZS10aGUtcGdfY29uZmlnLW9mLXRoZS1ob3N0LS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTZhMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxMC1jb25maWd1cmUtSGFjay10by1ub3QtdXNlLXRoZS1wZ19jb25maWctb2YtdGhlLWhvc3QtLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gNDg4ODc5MWQxODk5Zjc4MWFmNzEwZGQ4ODEzODg3ZGVhNTJmZGE1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEhvbGdlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjM2OjM4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTAvMjFdIGNvbmZpZ3VyZTogSGFjayB0byBub3QgdXNlIHRoZSBwZ19jb25maWcgb2YgdGhlIGhvc3QKKyBzeXN0ZW0gd2hpY2ggd2lsbCBhZGQgL3Vzci9pbmNsdWRlCisKK3BnX2NvbmZpZyBpcyBhIG5hdGl2ZSBiaW5hcnkgc28gdXNpbmcgdGhhdCB3aGVuIGNyb3NzIGNvbXBpbGluZword2lsbCBhbHdheXMgZmFpbC4gIFRoZSBjb21tZW50ZWQgb3V0IGZpeCB3b3VsZCBkbywgYnV0IGZvciBPRQorb3VyIC1wbGF0Zm9ybSBhbmQgLXhwbGF0Zm9ybSBpcyB0aGUgc2FtZSBzbyB3ZSBhcmUgYWN0dWFsbHkgbm90CityZWFsbHkgY3Jvc3MgY29tcGlsaW5nLiBKdXN0IGNvbW1lbnQgb3V0IHRoZSB0ZXN0LCB3ZSBhcmUgcGFzc2luZwordGhlIGxvY2F0aW9uIHRvIHRoZSBwb3N0Z3JlcyBoZWFkZXJzIGFuZCBpZiB0aGV5IGFyZSBva2F5IHdlCit3aWxsIHBhZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1VwZGF0ZSBmb3IgcXQgNC44LjcuCisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgOCArKysrLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGRiNGQwNDQuLjM1YThmZTcgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTU1NzQsMTAgKzU1NzQsMTAgQEAKKyAgICAgICAgICAgICBpZiBbICIkQ0ZHX1NRTF9wc3FsIiAhPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgWyAteiAiJENGR19QU1FMX0NPTkZJRyIgXSAmJiBDRkdfUFNRTF9DT05GSUc9YCIkV0hJQ0giIHBnX2NvbmZpZ2AKKyAgICAgICAgICAgICAgICAgIyBCZSBjYXJlZnVsIG5vdCB0byB1c2UgbmF0aXZlIHBnX2NvbmZpZyB3aGVuIGNyb3NzIGJ1aWxkaW5nLgorLSAgICAgICAgICAgICAgICBpZiBbICIkWFBMQVRGT1JNX01JTkdXIiAhPSAieWVzIiBdICYmIFsgLXggIiRDRkdfUFNRTF9DT05GSUciIF07IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgIFFUX0NGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0taW5jbHVkZWRpciAyPi9kZXYvbnVsbGAKKy0gICAgICAgICAgICAgICAgICAgIFFUX0xGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0tbGliZGlyIDI+L2Rldi9udWxsYAorLSAgICAgICAgICAgICAgICBmaQorKyMgICAgICAgICAgICAgICAgaWYgWyAiJFhQTEFURk9STV9NSU5HVyIgIT0gInllcyIgXSAmJiBbIC14ICIkQ0ZHX1BTUUxfQ09ORklHIiBdOyB0aGVuCisrIyAgICAgICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX1BTUUw9YCRDRkdfUFNRTF9DT05GSUcgLS1pbmNsdWRlZGlyIDI+L2Rldi9udWxsYAorKyMgICAgICAgICAgICAgICAgICAgIFFUX0xGTEFHU19QU1FMPWAkQ0ZHX1BTUUxfQ09ORklHIC0tbGliZGlyIDI+L2Rldi9udWxsYAorKyMgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgWyAteiAiJFFUX0NGTEFHU19QU1FMIiBdIHx8IFFUX0NGTEFHU19QU1FMPSItSSRRVF9DRkxBR1NfUFNRTCIKKyAgICAgICAgICAgICAgICAgWyAteiAiJFFUX0xGTEFHU19QU1FMIiBdIHx8IFFUX0xGTEFHU19QU1FMPSItTCRRVF9MRkxBR1NfUFNRTCIKKyAgICAgICAgICAgICAgICAgIyBCdXQsIHJlc3BlY3QgUFNRTF9MSUJTIGlmIHNldAorLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDExLWZyZWV0eXBlLWhvc3QtaW5jbHVkZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4NzljNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTEtZnJlZXR5cGUtaG9zdC1pbmNsdWRlcy5wYXRjaApAQCAtMCwwICsxLDI5IEBACitGcm9tIDNmY2ZmYTc5ZTZhNWYwNDQ4Y2JmZTJiYjMzZmUxMjE4ZjVkYWU2MWQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIEtyZWxpbiA8aGFja2VyQGtsZXZlci5uZXQ+CitEYXRlOiBNb24sIDQgSnVuIDIwMDcgMTQ6NDg6NTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMS8yMV0gZnJlZXR5cGUgaG9zdCBpbmNsdWRlcworCitIb3N0IGluY2x1ZGUgcGF0aCBzaG91bGQgbm90IGJlIHVzZWQgaW4gY3Jvc3MgY29tcGlsaW5nIGNhc2UuCisKK1BvcnRlZCBmcm9tIE9FIGJ5OiBZdSBLZSA8a2UueXVAaW50ZWwuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKy0tLQorIGNvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaSBiL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQoraW5kZXggN2VmMWNmOS4uYjM2MmZjZCAxMDA2NDQKKy0tLSBhL2NvbmZpZy50ZXN0cy91bml4L2ZyZWV0eXBlL2ZyZWV0eXBlLnByaQorKysrIGIvY29uZmlnLnRlc3RzL3VuaXgvZnJlZXR5cGUvZnJlZXR5cGUucHJpCitAQCAtMSw1ICsxLDUgQEAKKyAhY3Jvc3NfY29tcGlsZSB7CistICAgIFRSWV9JTkNMVURFUEFUSFMgPSAvaW5jbHVkZSAvdXNyL2luY2x1ZGUgJCRRTUFLRV9JTkNESVIgJCRRTUFLRV9JTkNESVJfWDExICQkSU5DTFVERVBBVEgKKysgICAgVFJZX0lOQ0xVREVQQVRIUyA9ICQkUU1BS0VfSU5DRElSICQkUU1BS0VfSU5DRElSX1gxMSAkJElOQ0xVREVQQVRICisgICAgICMgTFNCIGRvZXNuJ3QgYWxsb3cgdXNpbmcgaGVhZGVycyBmcm9tIC9pbmNsdWRlIG9yIC91c3IvaW5jbHVkZQorICAgICBsaW51eC1sc2ItZysrOlRSWV9JTkNMVURFUEFUSFMgPSAkJFFNQUtFX0lOQ0RJUiAkJFFNQUtFX0lOQ0RJUl9YMTEgJCRJTkNMVURFUEFUSAorICAgICBmb3IocCwgVFJZX0lOQ0xVREVQQVRIUykgeworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEyLUFkZC0yYnBwLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MTFmMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTItQWRkLTJicHAtc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDMxOCBAQAorRnJvbSA4NzQ0MjczZmM0NTJlYjU0YmJlZWI3ZDE1ODIzMDA5Y2U5MjZjNmZhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0plcmVteT0yMExhaW49QzM9QTk/PSA8amVyZW15LmxhaW5lQG00eC5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjM5OjIxICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTIvMjFdIEFkZCAyYnBwIHN1cHBvcnQKKworU3VibWl0dGVkIHVwc3RyZWFtIGJ1dCByZWplY3RlZCBhcyBiZWluZyAib3V0IG9mIHNjb3BlIjoKK2h0dHBzOi8vYnVncmVwb3J0cy5xdC1wcm9qZWN0Lm9yZy9icm93c2UvUVRCVUctMzQ2OAorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKy0KKyBzcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcCAgICAgICAgfCAyMTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAgfCAgIDQgKy0KKyAzIGZpbGVzIGNoYW5nZWQsIDIxNiBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCAzNWE4ZmU3Li43OWMxYzdiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03MDYzLDYgKzcwNjMsNyBAQCBpZiBbICIkQ0ZHX1FXU19ERVBUSFMiID0gInByb21wdGVkIiAtYSAiJFBST01QVF9GT1JfREVQVEhTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgZWNobyAiQ2hvb3NlIHBpeGVsLWRlcHRocyB0byBzdXBwb3J0OiIKKyAgICAgZWNobworICAgICBlY2hvICIgICAxLiAxYnBwLCBibGFjay93aGl0ZSIKKysgICAgZWNobyAiICAgMi4gMmJwcCwgZ3JheXNjYWxlIgorICAgICBlY2hvICIgICA0LiA0YnBwLCBncmF5c2NhbGUiCisgICAgIGVjaG8gIiAgIDguIDhicHAsIHBhbGV0dGVkIgorICAgICBlY2hvICIgIDEyLiAxMmJwcCwgcmdiIDQtNC00IgorQEAgLTcwODEsMTEgKzcwODIsMTEgQEAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJwcm9tcHRlZCIgLWEgIiRQUk9NUFRfRk9SX0RFUFRIUyIgPSAieWVzIiBdOyB0aGVuCisgZmkKKyBpZiBbIC1uICIkQ0ZHX1FXU19ERVBUSFMiIC1hICIkUExBVEZPUk1fUVdTIiA9ICJ5ZXMiIF07IHRoZW4KKyAgICAgaWYgWyAiJENGR19RV1NfREVQVEhTIiA9ICJhbGwiIF07IHRoZW4KKy0gICAgICAgIENGR19RV1NfREVQVEhTPSIxIDQgOCAxMiAxNSAxNiAxOCAyNCAzMiBnZW5lcmljIgorKyAgICAgICAgQ0ZHX1FXU19ERVBUSFM9IjEgMiA0IDggMTIgMTUgMTYgMTggMjQgMzIgZ2VuZXJpYyIKKyAgICAgZmkKKyAgICAgZm9yIEQgaW4gYGVjaG8gIiRDRkdfUVdTX0RFUFRIUyIgfCBzZWQgLWUgJ3MvLC8gL2cnYDsgZG8KKyAJY2FzZSAkRCBpbgorLQkgICAgMXw0fDh8MTJ8MTV8MTZ8MTh8MjR8MzIpIFFDT05GSUdfRkxBR1M9IiRRQ09ORklHX0ZMQUdTIFFUX1FXU19ERVBUSF8kRCI7OworKwkgICAgMXwyfDR8OHwxMnwxNXwxNnwxOHwyNHwzMikgUUNPTkZJR19GTEFHUz0iJFFDT05GSUdfRkxBR1MgUVRfUVdTX0RFUFRIXyREIjs7CisgCSAgICBnZW5lcmljKSBRQ09ORklHX0ZMQUdTPSIkUUNPTkZJR19GTEFHUyBRVF9RV1NfREVQVEhfR0VORVJJQyI7OworIAllc2FjCisgICAgIGRvbmUKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5fcXdzLmNwcCBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCitpbmRleCBiMzA3YmYyLi44ODk1MGIzIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVuX3F3cy5jcHAKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXNjcmVlbl9xd3MuY3BwCitAQCAtNDY5LDYgKzQ2OSw1OCBAQCBzdGF0aWMgdm9pZCBzb2xpZEZpbGxfZ3JheTQoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRQ29sb3IgJmNvbG9yLAorIH0KKyAjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzQKKyAKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKytzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGZpbGxfZ3JheTIocXVpbnQ4ICpkZXN0LCBxdWludDggdmFsdWUsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyaWRlKQorK3sKKysgICAgY29uc3QgaW50IHBpeGVsc1BlckJ5dGUgPSA0OworKyAgICBjb25zdCBpbnQgYWxpZ25XaWR0aCA9IHFNaW4od2lkdGgsICg0IC0gKHggJiAzKSkgJiAzKTsKKysgICAgY29uc3QgaW50IGRvQWxpZ24gPSAoYWxpZ25XaWR0aCA+IDAgPyAxIDogMCk7CisrICAgIGNvbnN0IGludCBhbGlnblN0YXJ0ID0gcGl4ZWxzUGVyQnl0ZSAtIDEgLSAoeCAmIDMpOworKyAgICBjb25zdCBpbnQgYWxpZ25TdG9wID0gYWxpZ25TdGFydCAtIChhbGlnbldpZHRoIC0gMSk7CisrICAgIGNvbnN0IHF1aW50OCBhbGlnbk1hc2sgPSAoKDEgPDwgKDIgKiBhbGlnbldpZHRoKSkgLSAxKSA8PCAoMiAqIGFsaWduU3RvcCk7CisrICAgIGNvbnN0IGludCB0YWlsV2lkdGggPSAod2lkdGggLSBhbGlnbldpZHRoKSAmIDM7CisrICAgIGNvbnN0IGludCBkb1RhaWwgPSAodGFpbFdpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgcXVpbnQ4IHRhaWxNYXNrID0gKDEgPDwgKDIgKiAocGl4ZWxzUGVyQnl0ZSAtIHRhaWxXaWR0aCkpKSAtIDE7CisrICAgIGNvbnN0IGludCB3aWR0aDggPSAod2lkdGggLSBhbGlnbldpZHRoKSAvIHBpeGVsc1BlckJ5dGU7CisrCisrICAgIGRlc3QgKz0geSAqIHN0cmlkZSArIHggLyBwaXhlbHNQZXJCeXRlOworKyAgICBzdHJpZGUgLT0gKGRvQWxpZ24gKyB3aWR0aDgpOworKworKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGhlaWdodDsgKytqKSB7CisrICAgICAgICBpZiAoZG9BbGlnbikgeworKyAgICAgICAgICAgICpkZXN0ID0gKCpkZXN0ICYgfmFsaWduTWFzaykgfCAodmFsdWUgJiBhbGlnbk1hc2spOworKyAgICAgICAgICAgICsrZGVzdDsKKysgICAgICAgIH0KKysgICAgICAgIGlmICh3aWR0aDgpIHsKKysgICAgICAgICAgICBxdF9tZW1maWxsPHF1aW50OD4oZGVzdCwgdmFsdWUsIHdpZHRoOCk7CisrICAgICAgICAgICAgZGVzdCArPSB3aWR0aDg7CisrICAgICAgICB9CisrICAgICAgICBpZiAoZG9UYWlsKQorKyAgICAgICAgICAgICpkZXN0ID0gKCpkZXN0ICYgdGFpbE1hc2spIHwgKHZhbHVlICYgfnRhaWxNYXNrKTsKKysgICAgICAgIGRlc3QgKz0gc3RyaWRlOworKyAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIHNvbGlkRmlsbF9ncmF5MihRU2NyZWVuICpzY3JlZW4sIGNvbnN0IFFDb2xvciAmY29sb3IsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFSZWdpb24gJnJlZ2lvbikKKyt7CisrICAgIHF1aW50OCAqZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQ4Kj4oc2NyZWVuLT5iYXNlKCkpOworKyAgICBjb25zdCBxdWludDggYyA9IHFHcmF5KGNvbG9yLnJnYmEoKSkgPj4gNjsKKysgICAgY29uc3QgcXVpbnQ4IGM4ID0gKGMgPDwgNikgfCAoYyA8PCA0KSB8IChjIDw8IDIpIHwgYzsKKysKKysgICAgY29uc3QgaW50IHN0cmlkZSA9IHNjcmVlbi0+bGluZXN0ZXAoKTsKKysgICAgY29uc3QgUVZlY3RvcjxRUmVjdD4gcmVjdHMgPSByZWdpb24ucmVjdHMoKTsKKysKKysgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0cy5zaXplKCk7ICsraSkgeworKyAgICAgICAgY29uc3QgUVJlY3QgciA9IHJlY3RzLmF0KGkpOworKyAgICAgICAgcXRfcmVjdGZpbGxfZ3JheTIoZGVzdCwgYzgsIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlKTsKKysgICAgfQorK30KKysjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzIKKysKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyBzdGF0aWMgaW5saW5lIHZvaWQgcXRfcmVjdGZpbGxfbW9ubyhxdWludDggKmRlc3QsIHF1aW50OCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKK0BAIC01NzYsNiArNjI4LDExIEBAIHZvaWQgcXRfc29saWRGaWxsX3NldHVwKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUNvbG9yICZjb2xvciwKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPnNvbGlkRmlsbCA9IHNvbGlkRmlsbF9ncmF5NDsKKyAgICAgICAgIGJyZWFrOworICNlbmRpZgorKyNpZmRlZiBRVF9RV1NfREVQVEhfMgorKyAgICBjYXNlIDI6CisrICAgICAgICBzY3JlZW4tPmRfcHRyLT5zb2xpZEZpbGwgPSBzb2xpZEZpbGxfZ3JheTI7CisrICAgICAgICBicmVhazsKKysjZW5kaWYKKyAjaWZkZWYgUVRfUVdTX0RFUFRIXzEKKyAgICAgY2FzZSAxOgorICAgICAgICAgc2NyZWVuLT5kX3B0ci0+c29saWRGaWxsID0gc29saWRGaWxsX21vbm87CitAQCAtMTAwNiw2ICsxMDYzLDE0OSBAQCBzdGF0aWMgdm9pZCBibGl0XzQoUVNjcmVlbiAqc2NyZWVuLCBjb25zdCBRSW1hZ2UgJmltYWdlLAorIH0KKyAjZW5kaWYgLy8gUVRfUVdTX0RFUFRIXzQKKyAKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysKKytzdHJ1Y3QgcWdyYXkyIHsgcXVpbnQ4IGR1bW15OyB9IFFfUEFDS0VEOworKworK3RlbXBsYXRlIDx0eXBlbmFtZSBTUkM+Cisrc3RhdGljIGlubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIoU1JDIGNvbG9yKTsKKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocXVpbnQzMiBjb2xvcikKKyt7CisrICAgIHJldHVybiBxR3JheShjb2xvcikgPj4gNjsKKyt9CisrCisrdGVtcGxhdGUgPD4KKytpbmxpbmUgcXVpbnQ4IHF0X2NvbnZlcnRUb0dyYXkyKHF1aW50MTYgY29sb3IpCisreworKyAgICBjb25zdCBpbnQgciA9IChjb2xvciAmIDB4ZjgwMCkgPj4gMTE7CisrICAgIGNvbnN0IGludCBnID0gKGNvbG9yICYgMHgwN2UwKSA+PiA2OyAvLyBvbmx5IGtlZXAgNSBiaXQKKysgICAgY29uc3QgaW50IGIgPSAoY29sb3IgJiAweDAwMWYpOworKyAgICByZXR1cm4gKHIgKiAxMSArIGcgKiAxNiArIGIgKiA1KSA+PiA4OworK30KKysKKyt0ZW1wbGF0ZSA8PgorK2lubGluZSBxdWludDggcXRfY29udmVydFRvR3JheTIocXJnYjQ0NCBjb2xvcikKKyt7CisrICAgIHJldHVybiBxdF9jb252ZXJ0VG9HcmF5MihxdWludDMyKGNvbG9yKSk7CisrfQorKworK3RlbXBsYXRlIDw+CisraW5saW5lIHF1aW50OCBxdF9jb252ZXJ0VG9HcmF5MihxYXJnYjQ0NDQgY29sb3IpCisreworKyAgICByZXR1cm4gcXRfY29udmVydFRvR3JheTIocXVpbnQzMihjb2xvcikpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgU1JDPgorK3N0YXRpYyBpbmxpbmUgdm9pZCBxdF9yZWN0Y29udmVydF9ncmF5MihxZ3JheTIgKmRlc3QyLCBjb25zdCBTUkMgKnNyYywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBjb25zdCBpbnQgcGl4ZWxzUGVyQnl0ZSA9IDQ7CisrICAgIHF1aW50OCAqZGVzdDggPSByZWludGVycHJldF9jYXN0PHF1aW50OCo+KGRlc3QyKQorKyAgICAgICAgICAgICAgICAgICAgKyB5ICogZHN0U3RyaWRlICsgeCAvIHBpeGVsc1BlckJ5dGU7CisrICAgIGNvbnN0IGludCBhbGlnbldpZHRoID0gcU1pbih3aWR0aCwgKDQgLSAoeCAmIDMpKSAmIDMpOworKyAgICBjb25zdCBpbnQgZG9BbGlnbiA9IChhbGlnbldpZHRoID4gMCA/IDEgOiAwKTsKKysgICAgY29uc3QgaW50IGFsaWduU3RhcnQgPSBwaXhlbHNQZXJCeXRlIC0gMSAtICh4ICYgMyk7CisrICAgIGNvbnN0IGludCBhbGlnblN0b3AgPSBhbGlnblN0YXJ0IC0gKGFsaWduV2lkdGggLSAxKTsKKysgICAgY29uc3QgcXVpbnQ4IGFsaWduTWFzayA9ICgoMSA8PCAoMiAqIGFsaWduV2lkdGgpKSAtIDEpIDw8ICgyICogYWxpZ25TdG9wKTsKKysgICAgY29uc3QgaW50IHRhaWxXaWR0aCA9ICh3aWR0aCAtIGFsaWduV2lkdGgpICYgMzsKKysgICAgY29uc3QgaW50IGRvVGFpbCA9ICh0YWlsV2lkdGggPiAwID8gMSA6IDApOworKyAgICBjb25zdCBxdWludDggdGFpbE1hc2sgPSAoMSA8PCAoMiAqIChwaXhlbHNQZXJCeXRlIC0gdGFpbFdpZHRoKSkpIC0gMTsKKysgICAgY29uc3QgaW50IHdpZHRoOCA9ICh3aWR0aCAtIGFsaWduV2lkdGgpIC8gcGl4ZWxzUGVyQnl0ZTsKKysKKysgICAgc3JjU3RyaWRlID0gc3JjU3RyaWRlIC8gc2l6ZW9mKFNSQykgLSAod2lkdGg4ICogcGl4ZWxzUGVyQnl0ZSArIGFsaWduV2lkdGgpOworKyAgICBkc3RTdHJpZGUgLT0gKHdpZHRoOCArIGRvQWxpZ24pOworKworKyAgICBmb3IgKGludCBqID0gMDsgIGogPCBoZWlnaHQ7ICsraikgeworKyAgICAgICAgaWYgKGRvQWxpZ24pIHsKKysgICAgICAgICAgICBxdWludDggZCA9ICpkZXN0OCAmIH5hbGlnbk1hc2s7CisrICAgICAgICAgICAgZm9yIChpbnQgaSA9IGFsaWduU3RhcnQ7IGkgPj0gYWxpZ25TdG9wOyAtLWkpCisrICAgICAgICAgICAgICAgIGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPigqc3JjKyspIDw8ICgyICogaSk7CisrICAgICAgICAgICAgKmRlc3Q4KysgPSBkOworKyAgICAgICAgfQorKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDg7ICsraSkgeworKyAgICAgICAgICAgICpkZXN0OCA9IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1swXSkgPDwgNikKKysgICAgICAgICAgICAgICAgICAgICB8IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1sxXSkgPDwgNCkKKysgICAgICAgICAgICAgICAgICAgICB8IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1syXSkgPDwgMikKKysgICAgICAgICAgICAgICAgICAgICB8IChxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1szXSkpOworKyAgICAgICAgICAgIHNyYyArPSA0OworKyAgICAgICAgICAgICsrZGVzdDg7CisrICAgICAgICB9CisrICAgICAgICBpZiAoZG9UYWlsKSB7CisrICAgICAgICAgICAgcXVpbnQ4IGQgPSAqZGVzdDggJiB0YWlsTWFzazsKKysgICAgICAgICAgICBzd2l0Y2ggKHRhaWxXaWR0aCkgeworKyAgICAgICAgICAgIGNhc2UgMzogZCB8PSBxdF9jb252ZXJ0VG9HcmF5MjxTUkM+KHNyY1syXSkgPDwgMjsKKysgICAgICAgICAgICBjYXNlIDI6IGQgfD0gcXRfY29udmVydFRvR3JheTI8U1JDPihzcmNbMV0pIDw8IDQ7CisrICAgICAgICAgICAgY2FzZSAxOiBkIHw9IHF0X2NvbnZlcnRUb0dyYXkyPFNSQz4oc3JjWzBdKSA8PCA2OworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICAqZGVzdDggPSBkOworKyAgICAgICAgfQorKworKyAgICAgICAgZGVzdDggKz0gZHN0U3RyaWRlOworKyAgICAgICAgc3JjICs9IHNyY1N0cmlkZTsKKysgICAgfQorK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxdWludDMyICpzcmMsCisrICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCisreworKyAgICBxdF9yZWN0Y29udmVydF9ncmF5MjxxdWludDMyPihkZXN0LCBzcmMsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrdGVtcGxhdGUgPD4KKyt2b2lkIHF0X3JlY3Rjb252ZXJ0KHFncmF5MiAqZGVzdCwgY29uc3QgcXVpbnQxNiAqc3JjLAorKyAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisrICAgICAgICAgICAgICAgICAgICBpbnQgZHN0U3RyaWRlLCBpbnQgc3JjU3RyaWRlKQorK3sKKysgICAgcXRfcmVjdGNvbnZlcnRfZ3JheTI8cXVpbnQxNj4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RTdHJpZGUsIHNyY1N0cmlkZSk7CisrfQorKworK3RlbXBsYXRlIDw+Cisrdm9pZCBxdF9yZWN0Y29udmVydChxZ3JheTIgKmRlc3QsIGNvbnN0IHFyZ2I0NDQgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHFyZ2I0NDQ+KGRlc3QsIHNyYywgeCwgeSwgd2lkdGgsIGhlaWdodCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0U3RyaWRlLCBzcmNTdHJpZGUpOworK30KKysKKyt0ZW1wbGF0ZSA8PgorK3ZvaWQgcXRfcmVjdGNvbnZlcnQocWdyYXkyICpkZXN0LCBjb25zdCBxYXJnYjQ0NDQgKnNyYywKKysgICAgICAgICAgICAgICAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgaW50IGRzdFN0cmlkZSwgaW50IHNyY1N0cmlkZSkKKyt7CisrICAgIHF0X3JlY3Rjb252ZXJ0X2dyYXkyPHFhcmdiNDQ0ND4oZGVzdCwgc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFN0cmlkZSwgc3JjU3RyaWRlKTsKKyt9CisrCisrc3RhdGljIHZvaWQgYmxpdF8yKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50ICZ0b3BMZWZ0LCBjb25zdCBRUmVnaW9uICZyZWdpb24pCisreworKyAgICBzd2l0Y2ggKGltYWdlLmZvcm1hdCgpKSB7CisrICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcXVpbnQzMj4oc2NyZWVuLCBpbWFnZSwgdG9wTGVmdCwgcmVnaW9uKTsKKysgICAgICAgIHJldHVybjsKKysgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0IxNjoKKysgICAgICAgIGJsaXRfdGVtcGxhdGU8cWdyYXkyLCBxdWludDE2PihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X1JHQjQ0NDoKKysgICAgICAgIGJsaXRfdGVtcGxhdGU8cWdyYXkyLCBxcmdiNDQ0PihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBjYXNlIFFJbWFnZTo6Rm9ybWF0X0FSR0I0NDQ0X1ByZW11bHRpcGxpZWQ6CisrICAgICAgICBibGl0X3RlbXBsYXRlPHFncmF5MiwgcWFyZ2I0NDQ0PihzY3JlZW4sIGltYWdlLCB0b3BMZWZ0LCByZWdpb24pOworKyAgICAgICAgcmV0dXJuOworKyAgICBkZWZhdWx0OgorKyAgICAgICAgcUNyaXRpY2FsKCJibGl0XzIoKTogSW1hZ2UgZm9ybWF0ICVkIG5vdCBzdXBwb3J0ZWQhIiwgaW1hZ2UuZm9ybWF0KCkpOworKyAgICB9CisrfQorKyNlbmRpZiAvLyBRVF9RV1NfREVQVEhfMgorKworICNpZmRlZiBRVF9RV1NfREVQVEhfMQorIAorIHN0cnVjdCBxbW9ubyB7IHF1aW50OCBkdW1teTsgfSBRX1BBQ0tFRDsKK0BAIC0xMjU5LDYgKzE0NTksMTEgQEAgdm9pZCBxdF9ibGl0X3NldHVwKFFTY3JlZW4gKnNjcmVlbiwgY29uc3QgUUltYWdlICZpbWFnZSwKKyAgICAgICAgIHNjcmVlbi0+ZF9wdHItPmJsaXQgPSBibGl0XzQ7CisgICAgICAgICBicmVhazsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgY2FzZSAyOgorKyAgICAgICAgc2NyZWVuLT5kX3B0ci0+YmxpdCA9IGJsaXRfMjsKKysgICAgICAgIGJyZWFrOworKyNlbmRpZgorICNpZmRlZiBRVF9RV1NfREVQVEhfMQorICAgICBjYXNlIDE6CisgICAgICAgICBzY3JlZW4tPmRfcHRyLT5ibGl0ID0gYmxpdF8xOworQEAgLTIxNDYsNiArMjM1MSw4IEBAIGludCBRU2NyZWVuOjphbGxvYyh1bnNpZ25lZCBpbnQgcix1bnNpZ25lZCBpbnQgZyx1bnNpZ25lZCBpbnQgYikKKyAgICAgICAgIH0KKyAgICAgfSBlbHNlIGlmIChkID09IDQpIHsKKyAgICAgICAgIHJldCA9IHFHcmF5KHIsIGcsIGIpID4+IDQ7CisrICAgIH0gZWxzZSBpZiAoZCA9PSAyKSB7CisrICAgICAgICByZXQgPSBxR3JheShyLCBnLCBiKSA+PiA2OworICAgICB9IGVsc2UgaWYgKGQgPT0gMSkgeworICAgICAgICAgcmV0ID0gcUdyYXkociwgZywgYikgPj0gMTI4OworICAgICB9IGVsc2UgeworQEAgLTIyMTYsNiArMjQyMywxMCBAQCBib29sIFFTY3JlZW46OnN1cHBvcnRzRGVwdGgoaW50IGQpIGNvbnN0CisgICAgIH0gZWxzZSBpZihkPT0xKSB7CisgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAjZW5kaWYKKysjaWZkZWYgUVRfUVdTX0RFUFRIXzIKKysgICAgfSBlbHNlIGlmKGQ9PTIpIHsKKysgICAgICAgIHJldHVybiB0cnVlOworKyNlbmRpZgorICNpZmRlZiBRVF9RV1NfREVQVEhfNAorICAgICB9IGVsc2UgaWYoZD09NCkgeworICAgICAgICAgcmV0dXJuIHRydWU7CitkaWZmIC0tZ2l0IGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwIGIvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCitpbmRleCA2ZjNjYWFkLi4xNDE1OWVlIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xc2NyZWVubGludXhmYl9xd3MuY3BwCisrKysgYi9zcmMvZ3VpL2VtYmVkZGVkL3FzY3JlZW5saW51eGZiX3F3cy5jcHAKK0BAIC00NjYsOCArNDY2LDggQEAgYm9vbCBRTGludXhGYlNjcmVlbjo6Y29ubmVjdChjb25zdCBRU3RyaW5nICZkaXNwbGF5U3BlYykKKyAgICAgICAgIHNldHVwT2ZmU2NyZWVuKCk7CisgCisgICAgIC8vIE5vdyByZWFkIGluIHBhbGV0dGUKKy0gICAgaWYoKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT04KSB8fCAodmluZm8uYml0c19wZXJfcGl4ZWw9PTQpKSB7CistICAgICAgICBzY3JlZW5jb2xzPSAodmluZm8uYml0c19wZXJfcGl4ZWw9PTgpID8gMjU2IDogMTY7CisrICAgIGlmKCh2aW5mby5iaXRzX3Blcl9waXhlbD09OCkgfHwgKHZpbmZvLmJpdHNfcGVyX3BpeGVsPT00KSB8fCAodmluZm8uYml0c19wZXJfcGl4ZWw9PTIpKSB7CisrICAgICAgICBzY3JlZW5jb2xzPSAxIDw8IHZpbmZvLmJpdHNfcGVyX3BpeGVsOworICAgICAgICAgaW50IGxvb3BjOworICAgICAgICAgOjpmYl9jbWFwIHN0YXJ0Y21hcDsKKyAgICAgICAgIHN0YXJ0Y21hcC5zdGFydD0wOworLS0gCisxLjguMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTMtY29uZmlndXJlLWFkZC1jcm9zc2FyY2gtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmNkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDEzLWNvbmZpZ3VyZS1hZGQtY3Jvc3NhcmNoLW9wdGlvbi5wYXRjaApAQCAtMCwwICsxLDUxIEBACitGcm9tIDU0OTM0MmZhMzgwZWQyYTlhZDQxYmUzZDA0ZWUyZjA1ODVmNmE0NjUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBNaWNoYWVsIExhdWVyIDxtaWNrZXlAdmFuaWxsZS1tZWRpYS5kZT4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDE6MzIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxMy8yMV0gY29uZmlndXJlOiBhZGQgIi1jcm9zc2FyY2giIG9wdGlvbgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorCitVcGRhdGUgZm9yIHF0IDQuOC43CisKK1NpZ25lZC1vZmYtYnk6IEthaSBLYW5nIDxrYWkua2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgNyArKysrKystCisgMSBmaWxlIGNoYW5nZWQsIDYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA0ZWI0YTNkLi5hNGRhY2VjIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0xMTYwLDcgKzExNjAsNyBAQCB3aGlsZSBbICIkIyIgLWd0IDAgXTsgZG8KKyAgICAgICAgIHNoaWZ0CisgICAgICAgICBWQUw9JDEKKyAgICAgICAgIDs7CistICAgIC1wcmVmaXh8LWRvY2RpcnwtaGVhZGVyZGlyfC1wbHVnaW5kaXJ8LWltcG9ydGRpcnwtZGF0YWRpcnwtbGliZGlyfC1iaW5kaXJ8LXRyYW5zbGF0aW9uZGlyfC1zeXNjb25mZGlyfC1leGFtcGxlc2RpcnwtZGVtb3NkaXJ8LWRlcHRoc3wtbWFrZXwtbm9tYWtlfC1wbGF0Zm9ybXwteHBsYXRmb3JtfC1kZXZpY2Utb3B0aW9ufC1idWlsZGtleXwtc2RrfC1hcmNofC1ob3N0LWFyY2h8LW15c3FsX2NvbmZpZ3wtcHNxbF9jb25maWd8LXN5c3Jvb3QpCisrICAgIC1wcmVmaXh8LWRvY2RpcnwtaGVhZGVyZGlyfC1wbHVnaW5kaXJ8LWltcG9ydGRpcnwtZGF0YWRpcnwtbGliZGlyfC1iaW5kaXJ8LXRyYW5zbGF0aW9uZGlyfC1zeXNjb25mZGlyfC1leGFtcGxlc2RpcnwtZGVtb3NkaXJ8LWRlcHRoc3wtbWFrZXwtbm9tYWtlfC1wbGF0Zm9ybXwteHBsYXRmb3JtfC1kZXZpY2Utb3B0aW9ufC1idWlsZGtleXwtc2RrfC1hcmNofC1ob3N0LWFyY2h8LW15c3FsX2NvbmZpZ3wtcHNxbF9jb25maWd8LXN5c3Jvb3R8LWNyb3NzYXJjaCkKKyAgICAgICAgIFZBUj1gZWNobyAkMSB8IHNlZCAicyxeLVwoLipcKSxcMSwiYAorICAgICAgICAgc2hpZnQKKyAgICAgICAgIFZBTD0iJDEiCitAQCAtMTcxOSw2ICsxNzE5LDkgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICBERVZfVkFMPWBlY2hvICRWQUwgfCBzZWQgInMsXi4qPVwoLipcKSxcMSwiYAorICAgICAgICAgRGV2aWNlVmFyIHNldCAkREVWX1ZBUiAkREVWX1ZBTAorICAgICAgICAgOzsKKysgICAgY3Jvc3NhcmNoKQorKyAgICAgICAgQ1JPU1NBUkNIPSIkVkFMIgorKyAgICAgICAgOzsKKyAgICAgZGVidWctYW5kLXJlbGVhc2UpCisgICAgICAgICBpZiBbICIkVkFMIiA9ICJ5ZXMiIF0gfHwgWyAiJFZBTCIgPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICBDRkdfREVCVUdfUkVMRUFTRT0iJFZBTCIKK0BAIC0zMzMzLDYgKzMzMzYsOCBAQCBhcm0qKQorICAgICA7OworIGVzYWMKKyAKKytDRkdfQVJDSD0iJENST1NTQVJDSCIKKysKKyBpZiBbIC1kICIkcmVscGF0aC9zcmMvY29yZWxpYi9hcmNoLyRDRkdfQVJDSCIgXTsgdGhlbgorICAgICBpZiBbICIkT1BUX1ZFUkJPU0UiID0gInllcyIgXTsgdGhlbgorICAgICAgICAgZWNobyAiICAgICckQ0ZHX0FSQ0gnIGlzIHN1cHBvcnRlZCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE0LXRyYW5zbGF0aW9ucy1maXgtcGhvbnktdHJhbnNsYXRpb24tbGlua2luZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjcyNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNC10cmFuc2xhdGlvbnMtZml4LXBob255LXRyYW5zbGF0aW9uLWxpbmtpbmctZXJyb3IucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorRnJvbSAyMWFmOGY2ZDIxYjI4YTUzMDQxYWZmYjExYjU4ZDYzMTYwMjNmYTkyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogT3RhdmlvIFNhbHZhZG9yIDxvdGF2aW9Ab3NzeXN0ZW1zLmNvbS5icj4KK0RhdGU6IFdlZCwgMjYgU2VwIDIwMTIgMjA6NDU6MTAgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAxNC8yMV0gdHJhbnNsYXRpb25zOiBmaXggcGhvbnkgdHJhbnNsYXRpb24gbGlua2luZyBlcnJvcgorCisgIHwgLi4uL3Vzci9saWIvY3J0MS5vOiBJbiBmdW5jdGlvbiBgX3N0YXJ0JzoKKyAgfCAuLi4vLi4vc3lzZGVwcy9pMzg2L2VsZi9zdGFydC5TOjExNTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbWFpbicKKyAgfCBjb2xsZWN0MjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8gfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy5wcm8gYi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworaW5kZXggZGM5OWJlYi4uMGQ5ODgyOSAxMDA2NDQKKy0tLSBhL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMucHJvCisrKysgYi90cmFuc2xhdGlvbnMvdHJhbnNsYXRpb25zLnBybworQEAgLTEwMSw3ICsxMDEsNyBAQCB1cGRhdGVxbS5uYW1lID0gTFJFTEVBU0UgJHtRTUFLRV9GSUxFX0lOfQorIHVwZGF0ZXFtLkNPTkZJRyArPSBub19saW5rCisgUU1BS0VfRVhUUkFfQ09NUElMRVJTICs9IHVwZGF0ZXFtCisgCistaXNFbXB0eSh2Y3Byb2opIHsKKyshaXNFbXB0eSh2Y3Byb2opIHsKKyAgICAgUU1BS0VfTElOSyA9IEA6IElHTk9SRSBUSElTIExJTkUKKyAgICAgT0JKRUNUU19ESVIgPQorICAgICB3aW4zMjpDT05GSUcgLT0gZW1iZWRfbWFuaWZlc3RfZXhlCitAQCAtMTExLDcgKzExMSw3IEBAIGlzRW1wdHkodmNwcm9qKSB7CisgICAgIHBob255X3NyYy5pbnB1dCA9IFBIT05ZX0RFUFMKKyAgICAgcGhvbnlfc3JjLm91dHB1dCA9IHBob255LmMKKyAgICAgcGhvbnlfc3JjLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCistICAgIHBob255X3NyYy5jb21tYW5kcyA9IGVjaG8gaW50IG1haW4oKSB7IHJldHVybiAwOyB9ID4gcGhvbnkuYworKyAgICBwaG9ueV9zcmMuY29tbWFuZHMgPSBlY2hvIFwiaW50IG1haW4oKSB7IHJldHVybiAwOyB9XCIgPiBwaG9ueS5jCisgICAgIHBob255X3NyYy5uYW1lID0gQ1JFQVRFIHBob255LmMKKyAgICAgcGhvbnlfc3JjLkNPTkZJRyArPSBjb21iaW5lCisgICAgIFFNQUtFX0VYVFJBX0NPTVBJTEVSUyArPSBwaG9ueV9zcmMKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNS1jb25maWd1cmUtYWRkLW5vc3RyaXAtZm9yLWRlYnVnLXBhY2thZ2VzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZGI0OTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE1LWNvbmZpZ3VyZS1hZGQtbm9zdHJpcC1mb3ItZGVidWctcGFja2FnZXMucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorRnJvbSA5MjUwZmVkMDg2YTRhOGE2NDVhOTcyNzY0YTliZjM0ZTQ1NjZlYzJlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRmF0aGkgQm91ZHJhIDxmYWJvQGRlYmlhbi5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjQ2OjE0ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTUvMjFdIGNvbmZpZ3VyZTogYWRkIG5vc3RyaXAgZm9yIGRlYnVnIHBhY2thZ2VzCisKK1F0IGlzIGJ1aWx0IGluIHJlbGVhc2UgbW9kZSBhbmQgc3RyaXAgZmlsZXMgYnkgZGVmYXVsdC4KK1NldCBDT05GSUcrPW5vc3RyaXAgdG8gYXZvaWQgdGhlIHN0cmlwcGluZyBhbmQKK2xldCBkaF9zdHJpcCBkbyBpdCB0byBnZW5lcmF0ZSBkZWJ1ZyBwYWNrYWdlcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtDb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCA3OTgzYzNkLi5kMDI4MjRiIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC03MTAsNiArNzEwLDggQEAgbWtkaXIgLXAgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cyIKKyBybSAtZiAiJG91dHBhdGgvY29uZmlnLnRlc3RzLy5xbWFrZS5jYWNoZSIKKyBjcCAiJFFNQUtFX1ZBUlNfRklMRSIgIiRvdXRwYXRoL2NvbmZpZy50ZXN0cy8ucW1ha2UuY2FjaGUiCisgCisrUU1ha2VWYXIgYWRkIENPTkZJRyBub3N0cmlwCisrCisgUU1ha2VWYXIgYWRkIHN0eWxlcyAiY2RlIG1hYyBtb3RpZiBwbGFzdGlxdWUgY2xlYW5sb29rcyB3aW5kb3dzIgorIFFNYWtlVmFyIGFkZCBkZWNvcmF0aW9ucyAiZGVmYXVsdCB3aW5kb3dzIHN0eWxlZCIKKyBRTWFrZVZhciBhZGQgbW91c2UtZHJpdmVycyAicGMiCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNi1jb25maWd1cmUtZXZhbC1RTUFLRV9DWFgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWMzZGU0NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTYtY29uZmlndXJlLWV2YWwtUU1BS0VfQ1hYLnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gODQwMzYzNGE3MWYwNjdlZWM1MTRiNmQyMTkzY2Y0MWUyODFkZmY4ZSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0NzowOCArMDIwMAorU3ViamVjdDogW1BBVENIIDE2LzIxXSBjb25maWd1cmU6IGV2YWwgUU1BS0VfQ1hYCisKK0FsbG93IGV4cGFuc2lvbiBvZiAkKC4uLikgcmVmZXJlbmNlcyBpbiBRTUFLRV9DWFggKGN1cnJlbnRseSBpdHMgdmFsdWUKK2lzICQoT0VfUU1BS0VfQ1hYKSkgaW4gb3JkZXIgdG8gYWxsb3cgY29tcGlsZXIgdmVyc2lvbiBjaGVjayB0byBzdWNjZWVkCit3aGljaCBhbGxvd3MgV2ViS2l0IHRvIGJlIGVuYWJsZWQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8TWFydGluLkphbnNhQGdtYWlsLmNvbT4KKworQ29uZmxpY3RzOgorCWNvbmZpZ3VyZQorLS0tCisgY29uZmlndXJlIHwgMyArKy0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IGQwMjgyNGIuLjg5MWQ2ZTcgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTM0MDksNyArMzQwOSw4IEBAIGVsc2UKKyAgICAgQ0ZHX0ZSQU1FV09SSz1ubworIGZpCisgCistUU1BS0VfQ09ORl9DT01QSUxFUj1gZ2V0WFFNYWtlQ29uZiBRTUFLRV9DWFhgCisrUU1BS0VfQ09ORl9DT01QSUxFUj1gZ2V0WFFNYWtlQ29uZiBRTUFLRV9DWFggfCBzZWQgLW4gJ3MvJFsoXVwoWzAtOWEtekEtWl9dKlwpWyldLyRcMS9wZydgCisrUU1BS0VfQ09ORl9DT01QSUxFUj1gZXZhbCAiZWNobyAkUU1BS0VfQ09ORl9DT01QSUxFUiJgCisgVEVTVF9DT01QSUxFUj0iJENYWCIKKyAKKyBbIC16ICIkVEVTVF9DT01QSUxFUiIgXSAmJiBURVNUX0NPTVBJTEVSPSRRTUFLRV9DT05GX0NPTVBJTEVSCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTctY29uZmlndXJlLWVuc3VyZS13ZS1pZGVudGlmeS10aGUtY29tcGlsZXItYXMtZy1pbi1jby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDcxOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxNy1jb25maWd1cmUtZW5zdXJlLXdlLWlkZW50aWZ5LXRoZS1jb21waWxlci1hcy1nLWluLWNvLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gZDJiYjcwMWI1NTE0MDJmMGJlZmRkZDBlOTA2NDIzNTk2YmRjMGRmNyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogV2VkLCAyNiBTZXAgMjAxMiAyMDo0ODozNyArMDIwMAorU3ViamVjdDogW1BBVENIIDE3LzIxXSBjb25maWd1cmU6IGVuc3VyZSB3ZSBpZGVudGlmeSB0aGUgY29tcGlsZXIgYXMgZysrIGluCisgY29uZmlndXJlCisKK091ciBQTEFURk9STSBpbiBPRSBpcyAke1RBUkdFVF9PU30tb2UtZysrLCBhbmQgcHJldmlvdXNseSB0aGUgY29uZmlndXJlCitzY3JpcHQgd2FzIGludGVycHJldGluZyBmcm9tIHRoaXMgdGhhdCB0aGUgY29tcGlsZXIgd2FzICJvZS1nKysiIGFuZAordGh1cworZysrIHNwZWNpZmljIGNoZWNrcyB3ZXJlIG5vdCBiZWluZyBydW4gc2luY2UgdGhpcyBzdHJpbmcgZGlkIG5vdCBtYXRjaDsKK2Ftb25nIG90aGVyIHRoaW5ncyB0aGlzIHJlc3VsdGVkIGluIGEgY29tcGlsZXIgdmVyc2lvbiBjaGVjayBpbiB0aGUKK1F0V2ViS2l0IGJ1aWxkIGNvZGUgbm90IHdvcmtpbmcsIGFuZCBoZW5jZSB0aGUgZm9sbG93aW5nIGVycm9yIGF0IGJ1aWxkCit0aW1lOgorCisuL3d0Zi9OdWxsUHRyLmg6NDg6MTogZXJyb3I6IGlkZW50aWZpZXIgJ251bGxwdHInIHdpbGwgYmVjb21lIGEga2V5d29yZAoraW4gQysrMHggWy1XZXJyb3I9YysrMHgtY29tcGF0XQorCitUaGUgZWFzaWVzdCB0aGluZyBzaW5jZSBvdXIgUExBVEZPUk0gaXMgZW50aXJlbHkgYXJ0aWZpY2lhbCBpcyB0byBqdXN0Citmb3JjZSBDT01QSUxFUiB0byAiZysrIiBpbiB0aGUgY29uZmlndXJlIHNjcmlwdCBpZiBpdCBpcyBkZXRlY3RlZCBhcworIm9lLWcrKyIuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworU2lnbmVkLW9mZi1ieTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCAzICsrKworIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQoraW5kZXggODkxZDZlNy4uNzAzMTg5OCAxMDA3NTUKKy0tLSBhL2NvbmZpZ3VyZQorKysrIGIvY29uZmlndXJlCitAQCAtNzU5Miw2ICs3NTkyLDkgQEAgZWxpZiBbICIkWFBMQVRGT1JNIiAhPSAiJFBMQVRGT1JNIiBdOyB0aGVuCisgZWxzZQorICAgICBDT01QSUxFUj1gZWNobyAkUExBVEZPUk0gfCBjdXQgLWYgMi0gLWQtYAorIGZpCisrY2FzZSAkQ09NUElMRVIgaW4KKysgICAgKm9lLWcrKykgQ09NUElMRVI9ImcrKyIgOzsKKytlc2FjCisgaWYgWyAiJENGR19FWENFUFRJT05TIiA9ICJ1bnNwZWNpZmllZCIgLWEgIiRQTEFURk9STV9RV1MiID0gInllcyIgXTsgdGhlbgorICAgICBDRkdfRVhDRVBUSU9OUz1ubworIGZpCistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMTgtY29uZmlndXJlLW1ha2UtcHVsc2VhdWRpby1hLWNvbmZpZ3VyYWJsZS1vcHRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2RkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE4LWNvbmZpZ3VyZS1tYWtlLXB1bHNlYXVkaW8tYS1jb25maWd1cmFibGUtb3B0aW9uLnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK0Zyb20gZDZkYzFhN2Q2NTk0ZDdlMzk1MzQ3NzMyYTNlNTUzZmM4MmNjYWIzZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAyOCBGZWIgMjAxMiAxNToxMDoyNCArMDAwMAorU3ViamVjdDogW1BBVENIIDE4LzIxXSBjb25maWd1cmU6IG1ha2UgcHVsc2VhdWRpbyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24KKworQWxsb3dzIGRpc2FibGluZyBwdWxzZWF1ZGlvIHN1cHBvcnQgd2l0aGluIHBob25vbiBhdCBjb25maWd1cmUgdGltZS4KKyhUaGlzIGlzIHRoZSBRdCA0LjguMCB2ZXJzaW9uLikKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogTWFydGluIEphbnNhIDxNYXJ0aW4uSmFuc2FAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlIHwgOSArKysrKysrKy0KKyAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDcwMzE4OTguLmE0YTQyZjEgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTExMzksNyArMTEzOSw3IEBAIHdoaWxlIFsgIiQjIiAtZ3QgMCBdOyBkbworICAgICAgICAgVkFMPW5vCisgICAgICAgICA7OworICAgICAjUXQgc3R5bGUgeWVzIG9wdGlvbnMKKy0gICAgLWluY3JlbWVudGFsfC1xdmZifC1wcm9maWxlfC1zaGFyZWR8LXN0YXRpY3wtc218LXhpbmVyYW1hfC14c2hhcGV8LXhzeW5jfC14aW5wdXR8LWVnbHwtcmVkdWNlLWV4cG9ydHN8LXBjaHwtc2VwYXJhdGUtZGVidWctaW5mb3wtc3RsfC1mcmVldHlwZXwteGN1cnNvcnwteGZpeGVzfC14cmFuZHJ8LXhyZW5kZXJ8LW1pdHNobXwtZm9udGNvbmZpZ3wteGtifC1uaXN8LXFkYnVzfC1kYnVzfC1kYnVzLWxpbmtlZHwtZ2xpYnwtZ3N0cmVhbWVyfC1ndGtzdHlsZXwtY3Vwc3wtaWNvbnZ8LWxhcmdlZmlsZXwtaHwtaGVscHwtdnwtdmVyYm9zZXwtZGVidWd8LXJlbGVhc2V8LWZhc3R8LWFjY2Vzc2liaWxpdHl8LWNvbmZpcm0tbGljZW5zZXwtZ251bWFrZXwtZnJhbWV3b3JrfC1xdDNzdXBwb3J0fC1kZWJ1Zy1hbmQtcmVsZWFzZXwtZXhjZXB0aW9uc3wtY29jb2F8LWNhcmJvbnwtdW5pdmVyc2FsfC1oYXJmYnV6enwtcHJlZml4LWluc3RhbGx8LXNpbGVudHwtYXJtZnBhfC1vcHRpbWl6ZWQtcW1ha2V8LWR3YXJmMnwtcmVkdWNlLXJlbG9jYXRpb25zfC1zc2V8LW9wZW5zc2x8LW9wZW5zc2wtbGlua2VkfC1wdG1hbGxvY3wteG1scGF0dGVybnN8LXBob25vbnwtcGhvbm9uLWJhY2tlbmR8LW11bHRpbWVkaWF8LWF1ZGlvLWJhY2tlbmR8LXN2Z3wtZGVjbGFyYXRpdmV8LWRlY2xhcmF0aXZlLWRlYnVnfC1qYXZhc2NyaXB0LWppdHwtc2NyaXB0fC1zY3JpcHR0b29sc3wtcnBhdGh8LWZvcmNlLXBrZy1jb25maWd8LXM2MHwtdXNlZGVmZmlsZXN8LWljdSkKKysgICAgLWluY3JlbWVudGFsfC1xdmZifC1wcm9maWxlfC1zaGFyZWR8LXN0YXRpY3wtc218LXhpbmVyYW1hfC14c2hhcGV8LXhzeW5jfC14aW5wdXR8LWVnbHwtcmVkdWNlLWV4cG9ydHN8LXBjaHwtc2VwYXJhdGUtZGVidWctaW5mb3wtc3RsfC1mcmVldHlwZXwteGN1cnNvcnwteGZpeGVzfC14cmFuZHJ8LXhyZW5kZXJ8LW1pdHNobXwtZm9udGNvbmZpZ3wteGtifC1uaXN8LXFkYnVzfC1kYnVzfC1kYnVzLWxpbmtlZHwtZ2xpYnwtZ3N0cmVhbWVyfC1wdWxzZWF1ZGlvfC1ndGtzdHlsZXwtY3Vwc3wtaWNvbnZ8LWxhcmdlZmlsZXwtaHwtaGVscHwtdnwtdmVyYm9zZXwtZGVidWd8LXJlbGVhc2V8LWZhc3R8LWFjY2Vzc2liaWxpdHl8LWNvbmZpcm0tbGljZW5zZXwtZ251bWFrZXwtZnJhbWV3b3JrfC1xdDNzdXBwb3J0fC1kZWJ1Zy1hbmQtcmVsZWFzZXwtZXhjZXB0aW9uc3wtY29jb2F8LWNhcmJvbnwtdW5pdmVyc2FsfC1oYXJmYnV6enwtcHJlZml4LWluc3RhbGx8LXNpbGVudHwtYXJtZnBhfC1vcHRpbWl6ZWQtcW1ha2V8LWR3YXJmMnwtcmVkdWNlLXJlbG9jYXRpb25zfC1zc2V8LW9wZW5zc2x8LW9wZW5zc2wtbGlua2VkfC1wdG1hbGxvY3wteG1scGF0dGVybnN8LXBob25vbnwtcGhvbm9uLWJhY2tlbmR8LW11bHRpbWVkaWF8LWF1ZGlvLWJhY2tlbmR8LXN2Z3wtZGVjbGFyYXRpdmV8LWRlY2xhcmF0aXZlLWRlYnVnfC1qYXZhc2NyaXB0LWppdHwtc2NyaXB0fC1zY3JpcHR0b29sc3wtcnBhdGh8LWZvcmNlLXBrZy1jb25maWd8LXM2MHwtdXNlZGVmZmlsZXN8LWljdSkKKyAgICAgICAgIFZBUj1gZWNobyAkMSB8IHNlZCAicyxeLVwoLipcKSxcMSwiYAorICAgICAgICAgVkFMPXllcworICAgICAgICAgOzsKK0BAIC0yMTIwLDYgKzIxMjAsMTMgQEAgd2hpbGUgWyAiJCMiIC1ndCAwIF07IGRvCisgICAgICAgICAgICAgVU5LTk9XTl9PUFQ9eWVzCisgICAgICAgICBmaQorICAgICAgICAgOzsKKysgICAgcHVsc2VhdWRpbykKKysgICAgICAgIGlmIFsgIiRWQUwiID0gInllcyIgXSB8fCBbICIkVkFMIiA9ICJubyIgXTsgdGhlbgorKyAgICAgICAgICAgIENGR19QVUxTRUFVRElPPSIkVkFMIgorKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIFVOS05PV05fT1BUPXllcworKyAgICAgICAgZmkKKysgICAgICAgIDs7CisgICAgIGd0a3N0eWxlKQorICAgICAgICAgaWYgWyAiJFZBTCIgPSAieWVzIiBdIHx8IFsgIiRWQUwiID0gIm5vIiBdOyB0aGVuCisgICAgICAgICAgICAgQ0ZHX1FHVEtTVFlMRT0iJFZBTCIKKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAxOS1GaXhlcy1mb3ItZ2NjLTQuNy4wLXBhcnRpY3VsYXJseS1vbi1xZW11eDg2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4M2QyNDcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDE5LUZpeGVzLWZvci1nY2MtNC43LjAtcGFydGljdWxhcmx5LW9uLXFlbXV4ODYucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorRnJvbSAxZjFkYTJmMjRkMzAyOGIyNTBkYmMyZTk4ZTJiN2UzNzg2MmIzNzcxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUmljaGFyZCBQdXJkaWUgPHJpY2hhcmQucHVyZGllQGxpbnV4Zm91bmRhdGlvbi5vcmc+CitEYXRlOiBXZWQsIDI2IFNlcCAyMDEyIDIwOjU0OjM4ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMTkvMjFdIEZpeGVzIGZvciBnY2MgNC43LjAsIHBhcnRpY3VsYXJseSBvbiBxZW11eDg2CisKK09yaWdpbjogdXBzdHJlYW0sIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzkzNjMxCitPcmlnaW46IHVwc3RyZWFtLCBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMTM4NDgKKworQnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNjgKK0J1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgzNTg0CisKK1JQIDIwMTIvMDQvMzAKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBzcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICB8IDIgKy0KKyBzcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgICAgICAgICAgICB8IDIgKy0KKyAuLi4vd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmggICB8IDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjLzNyZHBhcnR5L3dlYmtpdC9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAoraW5kZXggMzJlNDdjYS4uYjhlNzM4OSAxMDA2NDQKKy0tLSBhL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKysgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorQEAgLTEwODAsNyArMTA4MCw3IEBAIHZvaWQgRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQorIHsKKyAgICAgLy8gUmVmIGN1cnJlbnRTdHlsZSBpbiBjYXNlIGl0IHdvdWxkIG90aGVyd2lzZSBiZSBkZWxldGVkIHdoZW4gc2V0UmVuZGVyU3R5bGUoKSBpcyBjYWxsZWQuCisgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VycmVudFN0eWxlKHJlbmRlclN0eWxlKCkpOworLSAgICBib29sIGhhc1BhcmVudFN0eWxlID0gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCkgPyBwYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKS0+cmVuZGVyU3R5bGUoKSA6IGZhbHNlOworKyAgICBib29sIGhhc1BhcmVudFN0eWxlID0gcGFyZW50Tm9kZUZvclJlbmRlcmluZ0FuZFN0eWxlKCkgPyBzdGF0aWNfY2FzdDxib29sPihwYXJlbnROb2RlRm9yUmVuZGVyaW5nQW5kU3R5bGUoKS0+cmVuZGVyU3R5bGUoKSkgOiBmYWxzZTsKKyAgICAgYm9vbCBoYXNEaXJlY3RBZGphY2VudFJ1bGVzID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+Y2hpbGRyZW5BZmZlY3RlZEJ5RGlyZWN0QWRqYWNlbnRSdWxlcygpOworICAgICBib29sIGhhc0luZGlyZWN0QWRqYWNlbnRSdWxlcyA9IGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmNoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAKK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKK2luZGV4IGQ2NjA3NWUuLmFiOGYxMTEgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorQEAgLTc0LDcgKzc0LDcgQEAgUGFzc1JlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50KgorICAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBhZG9wdFJlZihuZXcgSFRNTEltYWdlRWxlbWVudChpbWdUYWcsIGRvY3VtZW50KSk7CisgICAgIGlmIChvcHRpb25hbFdpZHRoKQorICAgICAgICAgaW1hZ2UtPnNldFdpZHRoKCpvcHRpb25hbFdpZHRoKTsKKy0gICAgaWYgKG9wdGlvbmFsSGVpZ2h0ID4gMCkKKysgICAgaWYgKG9wdGlvbmFsSGVpZ2h0KQorICAgICAgICAgaW1hZ2UtPnNldEhlaWdodCgqb3B0aW9uYWxIZWlnaHQpOworICAgICByZXR1cm4gaW1hZ2UucmVsZWFzZSgpOworIH0KK2RpZmYgLS1naXQgYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmggYi9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKK2luZGV4IDYwODdlYzMuLjZkNzQ4ZjYgMTAwNjQ0CistLS0gYS9zcmMvM3JkcGFydHkvd2Via2l0L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgKKysrKyBiL3NyYy8zcmRwYXJ0eS93ZWJraXQvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaAorQEAgLTI1LDYgKzI1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgeworICNpZiBFTkFCTEUoVElMRURfQkFDS0lOR19TVE9SRSkKKyBjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudCB7CisgcHVibGljOgorKyAgICB2aXJ0dWFsIH5UaWxlZEJhY2tpbmdTdG9yZUNsaWVudCgpIHsgfQorICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkgPSAwOworICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRBcmVhKSA9IDA7CistLSAKKzEuOC4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmM5MDIyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyMS1jb25maWd1cmUtbWFrZS1xdDQtbmF0aXZlLXdvcmstd2l0aC1sb25nLWJ1aWxkaW5nLXBhLnBhdGNoCkBAIC0wLDAgKzEsOTUgQEAKK0Zyb20gNjc0MmFjN2VhNmZkMWU5YzgyZWNiNTMwNWY4NGU3MjEyNDJmODU3ZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IFdlZCwgNSBEZWMgMjAxMiAwNzo0ODoxNSArMDIwMAorU3ViamVjdDogW1BBVENIIDIxLzIxXSBjb25maWd1cmU6IG1ha2UgcXQ0LW5hdGl2ZSB3b3JrIHdpdGggbG9uZyBidWlsZGluZworIHBhdGguCisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK1JlZmVyZW5jZTogaHR0cHM6Ly9idWdyZXBvcnRzLnF0LXByb2plY3Qub3JnL2Jyb3dzZS9RVEJVRy0yODI5MgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CistLS0KKyBjb25maWd1cmUgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBhNGE0MmYxLi4yMzU4NTYzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC00Nzc5LDggKzQ3NzksOCBAQCBERU1PU19QQVRIX1NUUj1gIiRyZWxwYXRoL2NvbmZpZy50ZXN0cy91bml4L3BhZHN0cmluZyIgMjY4ICJxdF9kZW1vcGF0aD0kUVRfSU5TVAorIFRPREFZPWBkYXRlICslWS0lbS0lZGAKKyBjYXQgPiAiJG91dHBhdGgvc3JjL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuY3BwLm5ldyIgPDxFT0YKKyAvKiBMaWNlbnNlIEluZm8gKi8KKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGljZW5zZWVfc3RyICAgICAgICAgIFsyNTYgKyAxMl0gPSAiJExJQ0VOU0VfVVNFUl9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZF9wcm9kdWN0c19zdHIgWzI1NiArIDEyXSA9ICIkTElDRU5TRV9QUk9EVUNUU19TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWNlbnNlZV9zdHIgICAgICAgICAgWzUxMiArIDEyXSA9ICIkTElDRU5TRV9VU0VSX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpY2Vuc2VkX3Byb2R1Y3RzX3N0ciBbNTEyICsgMTJdID0gIiRMSUNFTlNFX1BST0RVQ1RTX1NUUiI7CisgCisgLyogSW5zdGFsbGF0aW9uIGRhdGUgKi8KKyBzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW5zdGFsbGF0aW9uICAgICAgICAgIFsxMisxMV0gICAgPSAicXRfaW5zdGRhdGU9JFRPREFZIjsKK0BAIC00ODA1LDM2ICs0ODA1LDM2IEBAIGlmIFsgISAteiAiJFFUX0hPU1RfUFJFRklYIiBdOyB0aGVuCisgCisgI2lmIGRlZmluZWQoUVRfQk9PVFNUUkFQUEVEKSB8fCBkZWZpbmVkKFFUX0JVSUxEX1FNQUtFKQorIC8qIEluc3RhbGxhdGlvbiBJbmZvICovCistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3ByZWZpeF9wYXRoX3N0ciAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUUFJFRklYX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZG9jdW1lbnRhdGlvbl9wYXRoX3N0clsyNTYgKyAxMl0gPSAiJEhPU1RET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RIRUFERVJTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfbGlicmFyaWVzX3BhdGhfc3RyICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RMSUJSQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9iaW5hcmllc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkSE9TVEJJTkFSSUVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RQTFVHSU5TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaW1wb3J0c19wYXRoX3N0ciAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RJTVBPUlRTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGF0YV9wYXRoX3N0ciAgICAgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1REQVRBX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFsyNTYgKyAxMl0gPSAiJEhPU1RUUkFOU0xBVElPTlNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9zZXR0aW5nc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkSE9TVFNFVFRJTkdTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZXhhbXBsZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEhPU1RFWEFNUExFU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbMjU2ICsgMTJdID0gIiRIT1NUREVNT1NfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVFBSRUZJWF9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbNTEyICsgMTJdID0gIiRIT1NURE9DVU1FTlRBVElPTl9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2hlYWRlcnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIT1NUSEVBREVSU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbNTEyICsgMTJdID0gIiRIT1NUTElCUkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RCSU5BUklFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3BsdWdpbnNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIT1NUUExVR0lOU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbNTEyICsgMTJdID0gIiRIT1NUSU1QT1JUU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbNTEyICsgMTJdID0gIiRIT1NUREFUQV9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3RyYW5zbGF0aW9uc19wYXRoX3N0ciBbNTEyICsgMTJdID0gIiRIT1NUVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEhPU1RTRVRUSU5HU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRIT1NURVhBTVBMRVNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9kZW1vc19wYXRoX3N0ciAgICAgICAgWzUxMiArIDEyXSA9ICIkSE9TVERFTU9TX1BBVEhfU1RSIjsKKyAjZWxzZSAvLyBRVF9CT09UU1RSQVBQRUQKKyBFT0YKKyBmaQorIAorIGNhdCA+PiAiJG91dHBhdGgvc3JjL2NvcmVsaWIvZ2xvYmFsL3Fjb25maWcuY3BwLm5ldyIgPDxFT0YKKyAvKiBJbnN0YWxsYXRpb24gSW5mbyAqLworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wcmVmaXhfcGF0aF9zdHIgICAgICAgWzI1NiArIDEyXSA9ICIkUFJFRklYX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZG9jdW1lbnRhdGlvbl9wYXRoX3N0clsyNTYgKyAxMl0gPSAiJERPQ1VNRU5UQVRJT05fUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9oZWFkZXJzX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkSEVBREVSU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2xpYnJhcmllc19wYXRoX3N0ciAgICBbMjU2ICsgMTJdID0gIiRMSUJSQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9iaW5hcmllc19wYXRoX3N0ciAgICAgWzI1NiArIDEyXSA9ICIkQklOQVJJRVNfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9wbHVnaW5zX3BhdGhfc3RyICAgICAgWzI1NiArIDEyXSA9ICIkUExVR0lOU19QQVRIX1NUUiI7Cistc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2ltcG9ydHNfcGF0aF9zdHIgICAgICBbMjU2ICsgMTJdID0gIiRJTVBPUlRTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGF0YV9wYXRoX3N0ciAgICAgICAgIFsyNTYgKyAxMl0gPSAiJERBVEFfUEFUSF9TVFIiOworLXN0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV90cmFuc2xhdGlvbnNfcGF0aF9zdHIgWzI1NiArIDEyXSA9ICIkVFJBTlNMQVRJT05TX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfc2V0dGluZ3NfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJFNFVFRJTkdTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZXhhbXBsZXNfcGF0aF9zdHIgICAgIFsyNTYgKyAxMl0gPSAiJEVYQU1QTEVTX1BBVEhfU1RSIjsKKy1zdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfZGVtb3NfcGF0aF9zdHIgICAgICAgIFsyNTYgKyAxMl0gPSAiJERFTU9TX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcHJlZml4X3BhdGhfc3RyICAgICAgIFs1MTIgKyAxMl0gPSAiJFBSRUZJWF9QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RvY3VtZW50YXRpb25fcGF0aF9zdHJbNTEyICsgMTJdID0gIiRET0NVTUVOVEFUSU9OX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfaGVhZGVyc19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJEhFQURFUlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9saWJyYXJpZXNfcGF0aF9zdHIgICAgWzUxMiArIDEyXSA9ICIkTElCUkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfYmluYXJpZXNfcGF0aF9zdHIgICAgIFs1MTIgKyAxMl0gPSAiJEJJTkFSSUVTX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfcGx1Z2luc19wYXRoX3N0ciAgICAgIFs1MTIgKyAxMl0gPSAiJFBMVUdJTlNfUEFUSF9TVFIiOworK3N0YXRpYyBjb25zdCBjaGFyIHF0X2NvbmZpZ3VyZV9pbXBvcnRzX3BhdGhfc3RyICAgICAgWzUxMiArIDEyXSA9ICIkSU1QT1JUU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RhdGFfcGF0aF9zdHIgICAgICAgICBbNTEyICsgMTJdID0gIiREQVRBX1BBVEhfU1RSIjsKKytzdGF0aWMgY29uc3QgY2hhciBxdF9jb25maWd1cmVfdHJhbnNsYXRpb25zX3BhdGhfc3RyIFs1MTIgKyAxMl0gPSAiJFRSQU5TTEFUSU9OU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX3NldHRpbmdzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRTRVRUSU5HU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2V4YW1wbGVzX3BhdGhfc3RyICAgICBbNTEyICsgMTJdID0gIiRFWEFNUExFU19QQVRIX1NUUiI7Cisrc3RhdGljIGNvbnN0IGNoYXIgcXRfY29uZmlndXJlX2RlbW9zX3BhdGhfc3RyICAgICAgICBbNTEyICsgMTJdID0gIiRERU1PU19QQVRIX1NUUiI7CisgRU9GCisgCisgaWYgWyAhIC16ICIkUVRfSE9TVF9QUkVGSVgiIF07IHRoZW4KKy0tIAorMS44LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyNy10b29scy5wcm8tZGlzYWJsZS1xbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlci5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUzMGFlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjctdG9vbHMucHJvLWRpc2FibGUtcW1lZWdvZ3JhcGhpY3NzeXN0ZW1oZWxwZXIucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRnJvbSAwNDYwZTJhNWYxM2FhZjAwODFjM2M5ZmVjODkyODAwNDY4NDJkZGJiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGF1bCBFZ2dsZXRvbiA8cGF1bC5lZ2dsZXRvbkBsaW51eC5pbnRlbC5jb20+CitEYXRlOiBXZWQsIDMgSnVsIDIwMTMgMTc6NDg6MzAgKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdG9vbHMucHJvOiBkaXNhYmxlIHFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyCisKK1dlIGRvbid0IHdhbnQgdGhpcyBlbmFibGVkIGp1c3QgYmVjYXVzZSB3ZSBoYXZlIEVHTCBhbmQgT3BlbkdMIEVTIDIuMAorZW5hYmxlZC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWddCisKK1NpZ25lZC1vZmYtYnk6IFBhdWwgRWdnbGV0b24gPHBhdWwuZWdnbGV0b25AbGludXguaW50ZWwuY29tPgorLS0tCisgdG9vbHMvdG9vbHMucHJvIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvdG9vbHMucHJvIGIvdG9vbHMvdG9vbHMucHJvCitpbmRleCAwZTI3MDUzLi4yZDNmMzZkIDEwMDY0NAorLS0tIGEvdG9vbHMvdG9vbHMucHJvCisrKysgYi90b29scy90b29scy5wcm8KK0BAIC00OSw0ICs0OSw0IEBAIFFURElSX2J1aWxkOlJFUVVJUkVTID0gImNvbnRhaW5zKFFUX0NPTkZJRywgZnVsbC1jb25maWcpIgorIAorICF3aW4zMjohZW1iZWRkZWQ6IW1hYzohc3ltYmlhbjpDT05GSUcgKz0geDExCisgCisteDExOmNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsZXMyKTpjb250YWlucyhRVF9DT05GSUcsIGVnbCk6U1VCRElSUyArPSBxbWVlZ29ncmFwaGljc3N5c3RlbWhlbHBlcgorKyN4MTE6Y29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2xlczIpOmNvbnRhaW5zKFFUX0NPTkZJRywgZWdsKTpTVUJESVJTICs9IHFtZWVnb2dyYXBoaWNzc3lzdGVtaGVscGVyCistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAyOC1Eb24tdC1jcmFzaC1vbi1icm9rZW4tR0lGLWltYWdlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZTJmZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMjgtRG9uLXQtY3Jhc2gtb24tYnJva2VuLUdJRi1pbWFnZXMucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRnJvbSBmMWI3NmMxMjZjNDc2YzE1NWFmOGM0MDRiOTdjNDJjZDFhNzA5MzMzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGFycyBLbm9sbCA8bGFycy5rbm9sbEBkaWdpYS5jb20+CitEYXRlOiBUaHUsIDI0IEFwciAyMDE0IDE1OjMzOjI3ICswMjAwCitTdWJqZWN0OiBbUEFUQ0hdIERvbid0IGNyYXNoIG9uIGJyb2tlbiBHSUYgaW1hZ2VzCisKK0Jyb2tlbiBHSUYgaW1hZ2VzIGNvdWxkIHNldCBpbnZhbGlkIHdpZHRoIGFuZCBoZWlnaHQKK3ZhbHVlcyBpbnNpZGUgdGhlIGltYWdlLCBsZWFkaW5nIHRvIFF0IGNyZWF0aW5nIGEgbnVsbAorUUltYWdlIGZvciBpdC4gSW4gdGhhdCBjYXNlIHdlIG5lZWQgdG8gYWJvcnQgZGVjb2RpbmcKK3RoZSBpbWFnZSBhbmQgcmV0dXJuIGFuIGVycm9yLgorCitJbml0aWFsIHBhdGNoIGJ5IFJpY2ggTW9vcmUuCisKK0JhY2twb3J0IG9mIElkODJhNDAzNmY0NzhiZDZlNDljNDAyZDY1OThmNTdlN2U1YmI1ZTFlIGZyb20gUXQgNQorCitUYXNrLW51bWJlcjogUVRCVUctMzgzNjcKK0NoYW5nZS1JZDogSTA2ODA3NDAwMThhYWE4MzU2ZDI2N2I3YWYzZjAxZmFjMzY5NzMxMmEKK1NlY3VyaXR5LWFkdmlzb3J5OiBDVkUtMjAxNC0wMTkwCitSZXZpZXdlZC1ieTogUmljaGFyZCBKLiBNb29yZSA8cmljaEBrZGUub3JnPgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworLS0tCisgc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAgfCA3ICsrKysrKysKKyAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2ltYWdlL3FnaWZoYW5kbGVyLmNwcCBiL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCitpbmRleCAzMzI0ZjA0Li41MTk5ZGQzIDEwMDY0NAorLS0tIGEvc3JjL2d1aS9pbWFnZS9xZ2lmaGFuZGxlci5jcHAKKysrKyBiL3NyYy9ndWkvaW1hZ2UvcWdpZmhhbmRsZXIuY3BwCitAQCAtMzU5LDYgKzM1OSwxMyBAQCBpbnQgUUdJRkZvcm1hdDo6ZGVjb2RlKFFJbWFnZSAqaW1hZ2UsIGNvbnN0IHVjaGFyICpidWZmZXIsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICBtZW1zZXQoYml0cywgMCwgaW1hZ2UtPmJ5dGVDb3VudCgpKTsKKyAgICAgICAgICAgICAgICAgfQorIAorKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJldmlvdXMgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGltYWdlIGZhaWxlZC4gSWYgaXQKKysgICAgICAgICAgICAgICAgLy8gZGlkIHRoZW4gdGhlIGltYWdlIGlzIGJyb2tlbiBhbmQgd2Ugc2hvdWxkIGdpdmUgdXAuCisrICAgICAgICAgICAgICAgIGlmIChpbWFnZS0+aXNOdWxsKCkpIHsKKysgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gRXJyb3I7CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICAgICAgICAgIH0KKysKKyAgICAgICAgICAgICAgICAgZGlzcG9zZVByZXZpb3VzKGltYWdlKTsKKyAgICAgICAgICAgICAgICAgZGlzcG9zZWQgPSBmYWxzZTsKKyAKKy0tIAorMS45LjMKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMC1hYXJjaDY0X2FybTY0X3FhdG9taWNfc3VwcG9ydC5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE0YzJhNgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzAtYWFyY2g2NF9hcm02NF9xYXRvbWljX3N1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSw0OTEgQEAKK0Zyb20gMjk0MDEwYjU2MmM5ODQ2YmIyYmM0ZWU5YzYzZmY3OGFkYzdjMWY0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVRGLTg/cT9MaXNhbmRybz0yMERhbWk9QzM9QTFuPTIwTmljYW5vcj0yMFA9QzM9QTlyZXo9MjBNZXllcj89CisgPHBlcmV6bWV5ZXJAZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBNYXIgMjAxNCAxNTo0MDo0OSAtMDMwMAorU3ViamVjdDogW1BBVENIXSBBZGQgcWF0b21pYyBzdXBwb3J0IGZvciBBQXJjaDY0IChha2EgYXJtNjQpLgorCitQYXRjaCBieSBNYXJrIFNhbHRlciA8bXNhbHRlckByZWRoYXQuY29tPgorbGljZW5zZWQgdW5kZXIgQlNEOgorCis8aHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz03MzU0ODgjMTk1PgorCitUaGlzIHBhdGNoIGlzIGtub3duIHRvIG5vdCBiZSB0aGUgbW9zdCBjb3JyZWN0IHdheQordG8gaW1wbGVtZW50IHRoZW0sIGFzIGl0IHNlZW1zIHRvIGJlIHBvc3NpYmxlIHRvIGRvIGl0IGluIGEgZmFzdGVyIHdheSwKK2J1dCBzaG91bGQgd29yayBub24gdGhlIGxlc3MgdW50aWwgd2UgY2FuIHByb3ZpZGUgc29tZXRoaW5nIGJldHRlci4KKworQ2hhbmdlLUlkOiBJYjM5MmIyN2RjNTQ2OTFmZDRjMmVhOTg5NjI0MGFkNzFmYjgxMjhjYworCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpICAgICAgICAgICAgfCAgIDQgKworIHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwIHwgIDcwICsrKysrKworIHNyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCisgc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCAgICAgICAgICAgfCAzMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCAgICAgICAgICAgICAgfCAgIDIgKworIDUgZmlsZXMgY2hhbmdlZCwgNDE0IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L2FyY2gucHJpCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgKKworZGlmZiAtLWdpdCBhL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaSBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjYzNTIzZDkKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9hcmNoLnByaQorQEAgLTAsMCArMSw0IEBACisrIworKyMgQUFyY2g2NCBhcmNoaXRlY3R1cmUKKysjCisrU09VUkNFUyArPSAkJFFUX0FSQ0hfQ1BQL3FhdG9taWNfYWFyY2g2NC5jcHAKK2RpZmYgLS1naXQgYS9zcmMvY29yZWxpYi9hcmNoL2FhcmNoNjQvcWF0b21pY19hYXJjaDY0LmNwcCBiL3NyYy9jb3JlbGliL2FyY2gvYWFyY2g2NC9xYXRvbWljX2FhcmNoNjQuY3BwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZmM4NTFiOQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2NvcmVsaWIvYXJjaC9hYXJjaDY0L3FhdG9taWNfYWFyY2g2NC5jcHAKK0BAIC0wLDAgKzEsNzAgQEAKKysvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKyoqCisrKiogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIERpZ2lhIFBsYyBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisrKiogQ29udGFjdDogaHR0cDovL3d3dy5xdC1wcm9qZWN0Lm9yZy9sZWdhbAorKyoqCisrKiogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFF0Q29yZSBtb2R1bGUgb2YgdGhlIFF0IFRvb2xraXQuCisrKioKKysqKiAkUVRfQkVHSU5fTElDRU5TRTpMR1BMJAorKyoqIENvbW1lcmNpYWwgTGljZW5zZSBVc2FnZQorKyoqIExpY2Vuc2VlcyBob2xkaW5nIHZhbGlkIGNvbW1lcmNpYWwgUXQgbGljZW5zZXMgbWF5IHVzZSB0aGlzIGZpbGUgaW4KKysqKiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbW1lcmNpYWwgbGljZW5zZSBhZ3JlZW1lbnQgcHJvdmlkZWQgd2l0aCB0aGUKKysqKiBTb2Z0d2FyZSBvciwgYWx0ZXJuYXRpdmVseSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBjb250YWluZWQgaW4KKysqKiBhIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBEaWdpYS4gIEZvciBsaWNlbnNpbmcgdGVybXMgYW5kCisrKiogY29uZGl0aW9ucyBzZWUgaHR0cDovL3F0LmRpZ2lhLmNvbS9saWNlbnNpbmcuICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbgorKyoqIHVzZSB0aGUgY29udGFjdCBmb3JtIGF0IGh0dHA6Ly9xdC5kaWdpYS5jb20vY29udGFjdC11cy4KKysqKgorKyoqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkxHUEwgaW5jbHVkZWQgaW4gdGhlCisrKiogcGFja2FnaW5nIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSByZXZpZXcgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB0bworKyoqIGVuc3VyZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xIHJlcXVpcmVtZW50cworKyoqIHdpbGwgYmUgbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvb2xkLWxpY2Vuc2VzL2xncGwtMi4xLmh0bWwuCisrKioKKysqKiBJbiBhZGRpdGlvbiwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgRGlnaWEgZ2l2ZXMgeW91IGNlcnRhaW4gYWRkaXRpb25hbAorKyoqIHJpZ2h0cy4gIFRoZXNlIHJpZ2h0cyBhcmUgZGVzY3JpYmVkIGluIHRoZSBEaWdpYSBRdCBMR1BMIEV4Y2VwdGlvbgorKyoqIHZlcnNpb24gMS4xLCBpbmNsdWRlZCBpbiB0aGUgZmlsZSBMR1BMX0VYQ0VQVElPTi50eHQgaW4gdGhpcyBwYWNrYWdlLgorKyoqCisrKiogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVXNhZ2UKKysqKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKysqKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorKyoqIEZvdW5kYXRpb24gYW5kIGFwcGVhcmluZyBpbiB0aGUgZmlsZSBMSUNFTlNFLkdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMuMCByZXF1aXJlbWVudHMgd2lsbCBiZQorKyoqIG1ldDogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sLgorKyoqCisrKioKKysqKiAkUVRfRU5EX0xJQ0VOU0UkCisrKioKKysqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworKworKyNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgorKworKyNpbmNsdWRlIDx1bmlzdGQuaD4KKysjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKysjIGluY2x1ZGUgPHNjaGVkLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPHRpbWUuaD4KKysKKytRVF9CRUdJTl9OQU1FU1BBQ0UKKysKKytRVF9VU0VfTkFNRVNQQUNFCisrCisrUV9DT1JFX0VYUE9SVCB2b2lkIHF0X2F0b21pY195aWVsZChpbnQgKmNvdW50KQorK3sKKysjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKysgICAgaWYgKCgqY291bnQpKysgPCA1MCkgeworKyAgICAgICAgc2NoZWRfeWllbGQoKTsKKysgICAgfSBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0bTsKKysgICAgICAgIHRtLnR2X3NlYyA9IDA7CisrICAgICAgICB0bS50dl9uc2VjID0gMjAwMDAwMTsKKysgICAgICAgIG5hbm9zbGVlcCgmdG0sIE5VTEwpOworKyAgICAgICAgKmNvdW50ID0gMDsKKysgICAgfQorK30KKysKKytRVF9FTkRfTkFNRVNQQUNFCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9hcmNoLnByaSBiL3NyYy9jb3JlbGliL2FyY2gvYXJjaC5wcmkKK2luZGV4IGNkMjNlNWUuLmY1MGZjYTcgMTAwNjQ0CistLS0gYS9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL2FyY2gucHJpCitAQCAtMzEsNyArMzEsOSBAQCBpbnRlZ3JpdHk6SEVBREVSUyArPSBhcmNoL3FhdG9taWNfaW50ZWdyaXR5LmgKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zMzkwLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX3g4Nl82NC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zaC5oIFwKKy0gICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zaDRhLmgKKysgICAgICAgICAgICAgICAgICAgICAgIGFyY2gvcWF0b21pY19zaDRhLmggXAorKyAgICAgICAgICAgICAgICAgICAgICAgYXJjaC9xYXRvbWljX2FhcmNoNjQuaCBcCisrCisgCisgUVRfQVJDSF9DUFAgPSAkJFFUX1NPVVJDRV9UUkVFL3NyYy9jb3JlbGliL2FyY2gvJCRRVF9BUkNICisgREVQRU5EUEFUSCArPSAkJFFUX0FSQ0hfQ1BQCitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCBiL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kZTYxY2E4CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oCitAQCAtMCwwICsxLDMzNSBAQAorKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKioKKysqKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKysqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisrKioKKysqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUXRDb3JlIG1vZHVsZSBvZiB0aGUgUXQgVG9vbGtpdC4KKysqKgorKyoqICRRVF9CRUdJTl9MSUNFTlNFOkxHUEwkCisrKiogQ29tbWVyY2lhbCBMaWNlbnNlIFVzYWdlCisrKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKyoqIFNvZnR3YXJlIG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbgorKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKysqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vcXQuZGlnaWEuY29tL2xpY2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisrKiogdXNlIHRoZSBjb250YWN0IGZvcm0gYXQgaHR0cDovL3F0LmRpZ2lhLmNvbS9jb250YWN0LXVzLgorKyoqCisrKiogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlcgorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuTEdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgcmVxdWlyZW1lbnRzCisrKiogd2lsbCBiZSBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKysqKgorKyoqIEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBEaWdpYSBnaXZlcyB5b3UgY2VydGFpbiBhZGRpdGlvbmFsCisrKiogcmlnaHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisrKiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBpbiB0aGlzIHBhY2thZ2UuCisrKioKKysqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlCisrKiogbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisrKioKKysqKgorKyoqICRRVF9FTkRfTElDRU5TRSQKKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2lmbmRlZiBRQVRPTUlDX0FBUkNINjRfSAorKyNkZWZpbmUgUUFUT01JQ19BQVJDSDY0X0gKKysKKytRVF9CRUdJTl9IRUFERVIKKysKKytRVF9CRUdJTl9OQU1FU1BBQ0UKKysKKysjZGVmaW5lIFFfQVRPTUlDX0lOVF9SRUZFUkVOQ0VfQ09VTlRJTkdfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNSZWZlcmVuY2VDb3VudGluZ05hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNSZWZlcmVuY2VDb3VudGluZ1dhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX1RFU1RfQU5EX1NFVF9JU19BTFdBWVNfTkFUSVZFCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc1Rlc3RBbmRTZXROYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzVGVzdEFuZFNldFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX0ZFVENIX0FORF9TVE9SRV9JU19BTFdBWVNfTkFUSVZFCisrCisraW5saW5lIGJvb2wgUUJhc2ljQXRvbWljSW50Ojppc0ZldGNoQW5kU3RvcmVOYXRpdmUoKQorK3sgcmV0dXJuIHRydWU7IH0KKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmlzRmV0Y2hBbmRTdG9yZVdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfSU5UX0ZFVENIX0FORF9BRERfSVNfQUxXQVlTX05BVElWRQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZEFkZE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6aXNGZXRjaEFuZEFkZFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNkZWZpbmUgUV9BVE9NSUNfUE9JTlRFUl9URVNUX0FORF9TRVRfSVNfQUxXQVlTX05BVElWRQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNUZXN0QW5kU2V0TmF0aXZlKCkKKyt7IHJldHVybiB0cnVlOyB9CisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojppc1Rlc3RBbmRTZXRXYWl0RnJlZSgpCisreyByZXR1cm4gZmFsc2U7IH0KKysKKysjZGVmaW5lIFFfQVRPTUlDX1BPSU5URVJfRkVUQ0hfQU5EX1NUT1JFX0lTX0FMV0FZU19OQVRJVkUKKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmlzRmV0Y2hBbmRTdG9yZU5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZFN0b3JlV2FpdEZyZWUoKQorK3sgcmV0dXJuIGZhbHNlOyB9CisrCisrI2RlZmluZSBRX0FUT01JQ19QT0lOVEVSX0ZFVENIX0FORF9BRERfSVNfQUxXQVlTX05BVElWRQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZEFkZE5hdGl2ZSgpCisreyByZXR1cm4gdHJ1ZTsgfQorK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIGJvb2wgUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6aXNGZXRjaEFuZEFkZFdhaXRGcmVlKCkKKyt7IHJldHVybiBmYWxzZTsgfQorKworKyNpZm5kZWYgUV9EQVRBX01FTU9SWV9CQVJSSUVSCisrIyBkZWZpbmUgUV9EQVRBX01FTU9SWV9CQVJSSUVSIGFzbSB2b2xhdGlsZSgiZG1iIHN5XG4iOjo6Im1lbW9yeSIpCisrI2VuZGlmCisrI2lmbmRlZiBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSCisrIyBkZWZpbmUgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUiBhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5IikKKysjZW5kaWYKKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnJlZigpCisreworKyAgICBpbnQgbmV3VmFsdWU7CisrCisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIG5ld1ZhbHVlID0gX19hdG9taWNfYWRkX2ZldGNoKCZfcV92YWx1ZSwgMSwgX19BVE9NSUNfQUNRX1JFTCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrCisrICAgIHJldHVybiBuZXdWYWx1ZSAhPSAwOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OmRlcmVmKCkKKyt7CisrICAgIGludCBuZXdWYWx1ZTsKKysKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgbmV3VmFsdWUgPSBfX2F0b21pY19zdWJfZmV0Y2goJl9xX3ZhbHVlLCAxLCBfX0FUT01JQ19BQ1FfUkVMKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysKKysgICAgcmV0dXJuIG5ld1ZhbHVlICE9IDA7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldFJlbGF4ZWQoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgdmFsOworKworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSAgX19hdG9taWNfY29tcGFyZV9leGNoYW5nZV9uICgmX3FfdmFsdWUsICZleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIF9fQVRPTUlDX1JFTEFYRUQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRTdG9yZVJlbGF4ZWQoaW50IG5ld1ZhbHVlKQorK3sKKysgICAgaW50IHZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZXhjaGFuZ2VfbigmX3FfdmFsdWUsIG5ld1ZhbHVlLCBfX0FUT01JQ19SRUxBWEVEKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHZhbDsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kQWRkUmVsYXhlZChpbnQgdmFsdWVUb0FkZCkKKyt7CisrICAgIGludCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9IF9fYXRvbWljX2ZldGNoX2FkZCgmX3FfdmFsdWUsIHZhbHVlVG9BZGQsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRSZWxheGVkKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgYm9vbCB2YWw7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHZhbCA9ICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlX24gKCZfcV92YWx1ZSwgJmV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgX19BVE9NSUNfUkVMQVhFRCwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVSZWxheGVkKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgVCAqdmFsOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICB2YWwgPSBfX2F0b21pY19leGNoYW5nZV9uKCZfcV92YWx1ZSwgbmV3VmFsdWUsIF9fQVRPTUlDX1JFTEFYRUQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdmFsOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZFJlbGF4ZWQocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFQgKnZhbDsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgdmFsID0gX19hdG9taWNfZmV0Y2hfYWRkKCZfcV92YWx1ZSwgdmFsdWVUb0FkZCwgX19BVE9NSUNfUkVMQVhFRCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB2YWw7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldEFjcXVpcmUoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgYm9vbCBRQmFzaWNBdG9taWNJbnQ6OnRlc3RBbmRTZXRSZWxlYXNlKGludCBleHBlY3RlZFZhbHVlLCBpbnQgbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrfQorKworK2lubGluZSBib29sIFFCYXNpY0F0b21pY0ludDo6dGVzdEFuZFNldE9yZGVyZWQoaW50IGV4cGVjdGVkVmFsdWUsIGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgYm9vbCByZXR1cm5WYWx1ZSA9IHRlc3RBbmRTZXRSZWxheGVkKGV4cGVjdGVkVmFsdWUsIG5ld1ZhbHVlKTsKKysgICAgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRTdG9yZUFjcXVpcmUoaW50IG5ld1ZhbHVlKQorK3sKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVSZWxlYXNlKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKyt9CisrCisraW5saW5lIGludCBRQmFzaWNBdG9taWNJbnQ6OmZldGNoQW5kU3RvcmVPcmRlcmVkKGludCBuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgaW50IHJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK2lubGluZSBpbnQgUUJhc2ljQXRvbWljSW50OjpmZXRjaEFuZEFkZEFjcXVpcmUoaW50IHZhbHVlVG9BZGQpCisreworKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRSZWxlYXNlKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworK30KKysKKytpbmxpbmUgaW50IFFCYXNpY0F0b21pY0ludDo6ZmV0Y2hBbmRBZGRPcmRlcmVkKGludCB2YWx1ZVRvQWRkKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBpbnQgcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfQ09NUElMRVJfTUVNT1JZX0JBUlJJRVI7CisrICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgYm9vbCBRQmFzaWNBdG9taWNQb2ludGVyPFQ+Ojp0ZXN0QW5kU2V0QWNxdWlyZShUICpleHBlY3RlZFZhbHVlLCBUICpuZXdWYWx1ZSkKKyt7CisrICAgIGJvb2wgcmV0dXJuVmFsdWUgPSB0ZXN0QW5kU2V0UmVsYXhlZChleHBlY3RlZFZhbHVlLCBuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRSZWxlYXNlKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gdGVzdEFuZFNldFJlbGF4ZWQoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBib29sIFFCYXNpY0F0b21pY1BvaW50ZXI8VD46OnRlc3RBbmRTZXRPcmRlcmVkKFQgKmV4cGVjdGVkVmFsdWUsIFQgKm5ld1ZhbHVlKQorK3sKKysgICAgUV9EQVRBX01FTU9SWV9CQVJSSUVSOworKyAgICBib29sIHJldHVyblZhbHVlID0gdGVzdEFuZFNldEFjcXVpcmUoZXhwZWN0ZWRWYWx1ZSwgbmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kU3RvcmVBY3F1aXJlKFQgKm5ld1ZhbHVlKQorK3sKKysgICAgVCAqcmV0dXJuVmFsdWUgPSBmZXRjaEFuZFN0b3JlUmVsYXhlZChuZXdWYWx1ZSk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZFN0b3JlUmVsZWFzZShUICpuZXdWYWx1ZSkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kU3RvcmVSZWxheGVkKG5ld1ZhbHVlKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRTdG9yZU9yZGVyZWQoVCAqbmV3VmFsdWUpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRTdG9yZVJlbGF4ZWQobmV3VmFsdWUpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorK1FfSU5MSU5FX1RFTVBMQVRFIFQgKlFCYXNpY0F0b21pY1BvaW50ZXI8VD46OmZldGNoQW5kQWRkQWNxdWlyZShxcHRyZGlmZiB2YWx1ZVRvQWRkKQorK3sKKysgICAgVCAqcmV0dXJuVmFsdWUgPSBmZXRjaEFuZEFkZFJlbGF4ZWQodmFsdWVUb0FkZCk7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIHJldHVyblZhbHVlOworK30KKysKKyt0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKytRX0lOTElORV9URU1QTEFURSBUICpRQmFzaWNBdG9taWNQb2ludGVyPFQ+OjpmZXRjaEFuZEFkZFJlbGVhc2UocXB0cmRpZmYgdmFsdWVUb0FkZCkKKyt7CisrICAgIFFfREFUQV9NRU1PUllfQkFSUklFUjsKKysgICAgcmV0dXJuIGZldGNoQW5kQWRkUmVsYXhlZCh2YWx1ZVRvQWRkKTsKKyt9CisrCisrdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisrUV9JTkxJTkVfVEVNUExBVEUgVCAqUUJhc2ljQXRvbWljUG9pbnRlcjxUPjo6ZmV0Y2hBbmRBZGRPcmRlcmVkKHFwdHJkaWZmIHZhbHVlVG9BZGQpCisreworKyAgICBRX0RBVEFfTUVNT1JZX0JBUlJJRVI7CisrICAgIFQgKnJldHVyblZhbHVlID0gZmV0Y2hBbmRBZGRSZWxheGVkKHZhbHVlVG9BZGQpOworKyAgICBRX0NPTVBJTEVSX01FTU9SWV9CQVJSSUVSOworKyAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisrfQorKworKyN1bmRlZiBRX0RBVEFfTUVNT1JZX0JBUlJJRVIKKysjdW5kZWYgUV9DT01QSUxFUl9NRU1PUllfQkFSUklFUgorKworK1FUX0VORF9OQU1FU1BBQ0UKKysKKytRVF9FTkRfSEVBREVSCisrCisrI2VuZGlmIC8vIFFBVE9NSUNfQUFSQ0g2NF9ICitkaWZmIC0tZ2l0IGEvc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCBiL3NyYy9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmgKK2luZGV4IDE0MTcyNmMuLjNlOTY5MjYgMTAwNjQ0CistLS0gYS9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCisrKysgYi9zcmMvY29yZWxpYi9hcmNoL3FhdG9taWNfYXJjaC5oCitAQCAtOTQsNiArOTQsOCBAQCBRVF9CRUdJTl9IRUFERVIKKyAjICBpbmNsdWRlICJRdENvcmUvcWF0b21pY19zaDRhLmgiCisgI2VsaWYgZGVmaW5lZChRVF9BUkNIX05BQ0wpCisgIyAgaW5jbHVkZSAiUXRDb3JlL3FhdG9taWNfZ2VuZXJpYy5oIgorKyNlbGlmIGRlZmluZWQoUVRfQVJDSF9BQVJDSDY0KQorKyMgIGluY2x1ZGUgIlF0Q29yZS9xYXRvbWljX2FhcmNoNjQuaCIKKyAjZWxzZQorICMgIGVycm9yICJRdCBoYXMgbm90IGJlZW4gcG9ydGVkIHRvIHRoaXMgYXJjaGl0ZWN0dXJlIgorICNlbmRpZgorLS0gCisyLjEuMAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzEtYWFyY2g2NF9hcm02NF9ta3NwZWNzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMWU3YWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMxLWFhcmNoNjRfYXJtNjRfbWtzcGVjcy5wYXRjaApAQCAtMCwwICsxLDEyNCBAQAorRnJvbSA3MDkwZmM4MGZmNjMwNzEyYTkwZGU5MjQwMzE5MGY2NDdkZDM4YTM5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0xpc2FuZHJvPTIwRGFtaT1DMz1BMW49MjBOaWNhbm9yPTIwUD1DMz1BOXJlej0yME1leWVyPz0KKyA8cGVyZXptZXllckBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDE1IE1hciAyMDE0IDE1OjM1OjAwIC0wMzAwCitTdWJqZWN0OiBbUEFUQ0hdIG1rc3BlY3MgZm9yIEFBcmNoNjQgKGFrYSBhcm02NCkuCisKK1BhdGNoIGJ5IE1hcmNpbiBKdXN6a2lld2ljeiA8bWFyY2luQGp1c3praWV3aWN6LmNvbS5wbD4KK2xpY2Vuc2VkIHVuZGVyIGVpdGhlciBQdWJsaWMgRG9tYWluIG9yIEJTRDoKKworPGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzM1NDg4IzE3OT4KKworQ2hhbmdlLUlkOiBJMjFmMTc5NTMyMzRjZmIxNzZiYWMwMjNlNTJlY2RjOTI3ZmM1YzFhOQorCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLYWkgS2FuZyA8a2FpLmthbmdAd2luZHJpdmVyLmNvbT4KKworLS0tCisgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMyArKysKKyBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYgICAgICB8IDI3ICsrKysrKysrKysrKysrKysrKysrCisgbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmggfCA0MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG1rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcW1ha2UuY29uZgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaAorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCitpbmRleCBhOWJhN2M4Li5lNTdkMDUzIDEwMDc1NQorLS0tIGEvY29uZmlndXJlCisrKysgYi9jb25maWd1cmUKK0BAIC0yODA4LDYgKzI4MDgsOSBAQCBpZiBbICIkQ0ZHX0VNQkVEREVEIiAhPSAibm8iIF07IHRoZW4KKyAgICAgICAgICAgICAqODZfNjQpCisgICAgICAgICAgICAgICAgIFBMQVRGT1JNPXF3cy9saW51eC14ODZfNjQtZysrCisgICAgICAgICAgICAgICAgIDs7CisrICAgICAgICAgICAgYWFyY2g2NCkKKysgICAgICAgICAgICAgICAgUExBVEZPUk09bGludXgtYWFyY2g2NC1nKysKKysgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICBQTEFURk9STT1xd3MvbGludXgtZ2VuZXJpYy1nKysKKyAgICAgICAgICAgICAgICAgOzsKK2RpZmYgLS1naXQgYS9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYgYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lYmMwYTkyCistLS0gL2Rldi9udWxsCisrKysgYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FtYWtlLmNvbmYKK0BAIC0wLDAgKzEsMjcgQEAKKysjCisrIyBxbWFrZSBjb25maWd1cmF0aW9uIGZvciBsaW51eC1nKysKKysjCisrIyBXcml0dGVuIGZvciBHTlUvTGludXggcGxhdGZvcm1zIHRoYXQgaGF2ZSBib3RoIGxpYiBhbmQgbGliNjQgZGlyZWN0b3JpZXMsCisrIyBsaWtlIHRoZSBBTUQgT3B0ZXJvbi4KKysjCisrCisrTUFLRUZJTEVfR0VORVJBVE9SICAgID0gVU5JWAorK1RBUkdFVF9QTEFURk9STSAgICAgICA9IHVuaXgKKytURU1QTEFURSAgICAgICAgICAgICAgPSBhcHAKKytDT05GSUcgICAgICAgICAgICAgICArPSBxdCB3YXJuX29uIHJlbGVhc2UgaW5jcmVtZW50YWwgbGlua19wcmwgZ2RiX2R3YXJmX2luZGV4CisrUVQgICAgICAgICAgICAgICAgICAgKz0gY29yZSBndWkKKytRTUFLRV9JTkNSRU1FTlRBTF9TVFlMRSA9IHN1YmxpYgorKworK1FNQUtFX0NGTEFHUyAgICAgPQorK1FNQUtFX0xGTEFHUyAgICAgPQorKworK1FNQUtFX0NGTEFHU19SRUxFQVNFICAgKz0gLU8yCisrCisraW5jbHVkZSguLi9jb21tb24vbGludXguY29uZikKKytpbmNsdWRlKC4uL2NvbW1vbi9nY2MtYmFzZS11bml4LmNvbmYpCisraW5jbHVkZSguLi9jb21tb24vZysrLXVuaXguY29uZikKKysKKytRTUFLRV9MSUJESVJfWDExICAgICAgPSAvdXNyL1gxMVI2L2xpYjY0CisrUU1BS0VfTElCRElSX09QRU5HTCAgID0gL3Vzci9YMTFSNi9saWI2NAorKworK2xvYWQocXRfY29uZmlnKQorZGlmZiAtLWdpdCBhL21rc3BlY3MvbGludXgtZysrLWFhcmNoNjQvcXBsYXRmb3JtZGVmcy5oIGIvbWtzcGVjcy9saW51eC1nKystYWFyY2g2NC9xcGxhdGZvcm1kZWZzLmgKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi41NjIxMjhiCistLS0gL2Rldi9udWxsCisrKysgYi9ta3NwZWNzL2xpbnV4LWcrKy1hYXJjaDY0L3FwbGF0Zm9ybWRlZnMuaAorQEAgLTAsMCArMSw0MiBAQAorKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisrKioKKysqKiBDb3B5cmlnaHQgKEMpIDIwMTIgRGlnaWEgUGxjIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKysqKiBDb250YWN0OiBodHRwOi8vd3d3LnF0LXByb2plY3Qub3JnL2xlZ2FsCisrKioKKysqKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcW1ha2Ugc3BlYyBvZiB0aGUgUXQgVG9vbGtpdC4KKysqKgorKyoqICRRVF9CRUdJTl9MSUNFTlNFOkxHUEwkCisrKiogQ29tbWVyY2lhbCBMaWNlbnNlIFVzYWdlCisrKiogTGljZW5zZWVzIGhvbGRpbmcgdmFsaWQgY29tbWVyY2lhbCBRdCBsaWNlbnNlcyBtYXkgdXNlIHRoaXMgZmlsZSBpbgorKyoqIGFjY29yZGFuY2Ugd2l0aCB0aGUgY29tbWVyY2lhbCBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoIHRoZQorKyoqIFNvZnR3YXJlIG9yLCBhbHRlcm5hdGl2ZWx5LCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbgorKyoqIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERpZ2lhLiAgRm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQKKysqKiBjb25kaXRpb25zIHNlZSBodHRwOi8vcXQuZGlnaWEuY29tL2xpY2Vuc2luZy4gIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uCisrKiogdXNlIHRoZSBjb250YWN0IGZvcm0gYXQgaHR0cDovL3F0LmRpZ2lhLmNvbS9jb250YWN0LXVzLgorKyoqCisrKiogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFVzYWdlCisrKiogQWx0ZXJuYXRpdmVseSwgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlcgorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuTEdQTCBpbmNsdWRlZCBpbiB0aGUKKysqKiBwYWNrYWdpbmcgb2YgdGhpcyBmaWxlLiAgUGxlYXNlIHJldmlldyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIHRvCisrKiogZW5zdXJlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEgcmVxdWlyZW1lbnRzCisrKiogd2lsbCBiZSBtZXQ6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9vbGQtbGljZW5zZXMvbGdwbC0yLjEuaHRtbC4KKysqKgorKyoqIEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBEaWdpYSBnaXZlcyB5b3UgY2VydGFpbiBhZGRpdGlvbmFsCisrKiogcmlnaHRzLiAgVGhlc2UgcmlnaHRzIGFyZSBkZXNjcmliZWQgaW4gdGhlIERpZ2lhIFF0IExHUEwgRXhjZXB0aW9uCisrKiogdmVyc2lvbiAxLjEsIGluY2x1ZGVkIGluIHRoZSBmaWxlIExHUExfRVhDRVBUSU9OLnR4dCBpbiB0aGlzIHBhY2thZ2UuCisrKioKKysqKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBVc2FnZQorKyoqIEFsdGVybmF0aXZlbHksIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorKyoqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzLjAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisrKiogRm91bmRhdGlvbiBhbmQgYXBwZWFyaW5nIGluIHRoZSBmaWxlIExJQ0VOU0UuR1BMIGluY2x1ZGVkIGluIHRoZQorKyoqIHBhY2thZ2luZyBvZiB0aGlzIGZpbGUuICBQbGVhc2UgcmV2aWV3IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gdG8KKysqKiBlbnN1cmUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMy4wIHJlcXVpcmVtZW50cyB3aWxsIGJlCisrKiogbWV0OiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwuCisrKioKKysqKgorKyoqICRRVF9FTkRfTElDRU5TRSQKKysqKgorKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisrCisrI2luY2x1ZGUgIi4uL2xpbnV4LWcrKy9xcGxhdGZvcm1kZWZzLmgiCistLSAKKzIuMS4wCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvMDAzMi1hYXJjaDY0X2FkZF9oZWFkZXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc4Zjc4NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzItYWFyY2g2NF9hZGRfaGVhZGVyLnBhdGNoCkBAIC0wLDAgKzEsMTggQEAKK0FkZCBtaXNzaW5nIGhlYWRlciBmb3IgYWFyY2g2NC4gQW5kIGluc3RhbGwgLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWFyY2g2NC5oLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KK2RpZmYgLU5ydSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42Lm9yaWcvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmggcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy00LjguNi9pbmNsdWRlL1F0Q29yZS9xYXRvbWljX2FhcmNoNjQuaAorLS0tIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYub3JpZy9pbmNsdWRlL1F0Q29yZS9xYXRvbWljX2FhcmNoNjQuaAkxOTcwLTAxLTAxIDA4OjMwOjAwLjAwMDAwMDAwMCArMDgzMAorKysrIHF0LWV2ZXJ5d2hlcmUtb3BlbnNvdXJjZS1zcmMtNC44LjYvaW5jbHVkZS9RdENvcmUvcWF0b21pY19hYXJjaDY0LmgJMjAxNC0wOS0wOSAxNzoxODowMy43NjgzNTI1NTEgKzA4MDAKK0BAIC0wLDAgKzEgQEAKKysjaW5jbHVkZSAiLi4vLi4vc3JjL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FhcmNoNjQuaCIKKy0tLSBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL2hlYWRlcnMucHJpLm9yaWcJMjAxNC0wOS0wOSAxODowNTozNy4xMDA0MzAzMTEgKzA4MDAKKysrKyBxdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLTQuOC42L2luY2x1ZGUvUXRDb3JlL2hlYWRlcnMucHJpCTIwMTQtMDktMDkgMTg6MDU6NTkuMTEyNDMwOTExICswODAwCitAQCAtMSwzICsxLDMgQEAKKy1TWU5DUVQuSEVBREVSX0ZJTEVTID0gLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0ZXZlbnRkaXNwYXRjaGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsLmggLi4vY29yZWxpYi9rZXJuZWwvcWJhc2ljdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWFwcGxpY2F0aW9uLmggLi4vY29yZWxpYi9rZXJuZWwvcWNvcmVldmVudC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGxvb3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX25hY2wuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3Z4d29ya3MuaCAuLi9jb3JlbGliL2tlcm5lbC9xZnVuY3Rpb25zX3dpbmNlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1hdGguaCAuLi9jb3JlbGliL2tlcm5lbC9xbWV0YW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhdHlwZS5oIC4uL2NvcmVsaWIva2VybmVsL3FtaW1lZGF0YS5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3QuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0Y2xlYW51cGhhbmRsZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xb2JqZWN0ZGVmcy5oIC4uL2NvcmVsaWIva2VybmVsL3Fwb2ludGVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXNoYXJlZG1lbW9yeS5oIC4uL2NvcmVsaWIva2VybmVsL3FzaWduYWxtYXBwZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc29ja2V0bm90aWZpZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc3lzdGVtc2VtYXBob3JlLmggLi4vY29yZWxpYi9rZXJuZWwvcXRpbWVyLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3IuaCAuLi9jb3JlbGliL2tlcm5lbC9xdmFyaWFudC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhYnN0cmFjdGFuaW1hdGlvbi5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhdXNlYW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXByb3BlcnR5YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXNlcXVlbnRpYWxhbmltYXRpb25ncm91cC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYWxwaGEuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcmNoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjUuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12Ni5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY3LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXZyMzIuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19iZmluLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYm9vdHN0cmFwLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfZ2VuZXJpYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2kzODYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pYTY0LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaW50ZWdyaXR5LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbTY4ay5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21hY29zeC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21pcHMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wYXJpc2MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wb3dlcnBjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfczM5MC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc2g0YS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NwYXJjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc3ltYmlhbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3Z4d29ya3MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY193aW5kb3dzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93c2NlLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfeDg2XzY0LmggLi4vY29yZWxpYi90b29scy9xYWxnb3JpdGhtcy5oIC4uL2NvcmVsaWIvdG9vbHMvcWJpdGFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5bWF0Y2hlci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNhY2hlLmggLi4vY29yZWxpYi90b29scy9xY2hhci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRhaW5lcmZ3ZC5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRpZ3VvdXNjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNyeXB0b2dyYXBoaWNoYXNoLmggLi4vY29yZWxpYi90b29scy9xZGF0ZXRpbWUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlYXNpbmdjdXJ2ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWVsYXBzZWR0aW1lci5oIC4uL2NvcmVsaWIvdG9vbHMvcWhhc2guaCAuLi9jb3JlbGliL3Rvb2xzL3FpdGVyYXRvci5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5rZWRsaXN0LmggLi4vY29yZWxpYi90b29scy9xbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9ibGFja2JlcnJ5LmggLi4vY29yZWxpYi90b29scy9xbWFwLmggLi4vY29yZWxpYi90b29scy9xbWFyZ2lucy5oIC4uL2NvcmVsaWIvdG9vbHMvcXBhaXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2ludC5oIC4uL2NvcmVsaWIvdG9vbHMvcXF1ZXVlLmggLi4vY29yZWxpYi90b29scy9xcmVjdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlZ2V4cC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWR2YWx1ZXJvbGxiYWNrLmggLi4vY29yZWxpYi90b29scy9xc2V0LmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkZGF0YS5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyX2ltcGwuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaXplLmggLi4vY29yZWxpYi90b29scy9xc3RhY2suaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmcuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdidWlsZGVyLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ21hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0ZXh0Ym91bmRhcnlmaW5kZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0aW1lbGluZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZhcmxlbmd0aGFycmF5LmggLi4vY29yZWxpYi90b29scy9xdmVjdG9yLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3RvcnlpbnRlcmZhY2UuaCAuLi9jb3JlbGliL3BsdWdpbi9xbGlicmFyeS5oIC4uL2NvcmVsaWIvcGx1Z2luL3FwbHVnaW4uaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2lubG9hZGVyLmggLi4vY29yZWxpYi9wbHVnaW4vcXV1aWQuaCAuLi9jb3JlbGliL3htbC9xeG1sc3RyZWFtLmggLi4vY29yZWxpYi90aHJlYWQvcWF0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FiYXNpY2F0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrLmggLi4vY29yZWxpYi90aHJlYWQvcXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWQuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkc3RvcmFnZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F3YWl0Y29uZGl0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3R0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FmaW5hbHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWx0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlbWFjaGluZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVpbnRlcmZhY2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXN5bmNocm9uaXplci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJld2F0Y2hlci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xcnVubmFibGUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50Y29tcGlsZXJ0ZXN0LmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGV4Y2VwdGlvbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmaWx0ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVya2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZ1bmN0aW9ud3JhcHBlcnMuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50aXRlcmF0ZWtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtYXAuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwa2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1lZGlhbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRyZWR1Y2VrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVzdWx0c3RvcmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cnVuLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bmJhc2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50c3RvcmVkZnVuY3Rpb25jYWxsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHRocmVhZGVuZ2luZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGhyZWFkcG9vbC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZS5oIC4uL2NvcmVsaWIvaW8vcWJ1ZmZlci5oIC4uL2NvcmVsaWIvaW8vcWRhdGFzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3FkZWJ1Zy5oIC4uL2NvcmVsaWIvaW8vcWRpci5oIC4uL2NvcmVsaWIvaW8vcWRpcml0ZXJhdG9yLmggLi4vY29yZWxpYi9pby9xZmlsZS5oIC4uL2NvcmVsaWIvaW8vcWZpbGVpbmZvLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXIuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3Fpb2RldmljZS5oIC4uL2NvcmVsaWIvaW8vcXByb2Nlc3MuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZS5oIC4uL2NvcmVsaWIvaW8vcXNldHRpbmdzLmggLi4vY29yZWxpYi9pby9xdGVtcG9yYXJ5ZmlsZS5oIC4uL2NvcmVsaWIvaW8vcXRleHRzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3F1cmwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWRpc3QuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWxhcmdlLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1tZWRpdW0uaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW1pbmltYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW5hY2wuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLXNtYWxsLmggLi4vY29yZWxpYi9nbG9iYWwvcWVuZGlhbi5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FmZWF0dXJlcy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FnbG9iYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uaCAuLi9jb3JlbGliL2dsb2JhbC9xbmFtZXNwYWNlLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWMuaCAuLi9jb3JlbGliL2dsb2JhbC9xdF93aW5kb3dzLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWMuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjcGx1Z2luLmggLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb3JlIAorK1NZTkNRVC5IRUFERVJfRklMRVMgPSAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RldmVudGRpc3BhdGNoZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xYWJzdHJhY3RpdGVtbW9kZWwuaCAuLi9jb3JlbGliL2tlcm5lbC9xYmFzaWN0aW1lci5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlYXBwbGljYXRpb24uaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZWV2ZW50LmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50bG9vcC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfbmFjbC5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfdnh3b3Jrcy5oIC4uL2NvcmVsaWIva2VybmVsL3FmdW5jdGlvbnNfd2luY2UuaCAuLi9jb3JlbGliL2tlcm5lbC9xbWF0aC5oIC4uL2NvcmVsaWIva2VybmVsL3FtZXRhb2JqZWN0LmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGF0eXBlLmggLi4vY29yZWxpYi9rZXJuZWwvcW1pbWVkYXRhLmggLi4vY29yZWxpYi9rZXJuZWwvcW9iamVjdC5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RjbGVhbnVwaGFuZGxlci5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RkZWZzLmggLi4vY29yZWxpYi9rZXJuZWwvcXBvaW50ZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xc2hhcmVkbWVtb3J5LmggLi4vY29yZWxpYi9rZXJuZWwvcXNpZ25hbG1hcHBlci5oIC4uL2NvcmVsaWIva2VybmVsL3Fzb2NrZXRub3RpZmllci5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1zZW1hcGhvcmUuaCAuLi9jb3JlbGliL2tlcm5lbC9xdGltZXIuaCAuLi9jb3JlbGliL2tlcm5lbC9xdHJhbnNsYXRvci5oIC4uL2NvcmVsaWIva2VybmVsL3F2YXJpYW50LmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFic3RyYWN0YW5pbWF0aW9uLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXBhcmFsbGVsYW5pbWF0aW9uZ3JvdXAuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcGF1c2VhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcHJvcGVydHlhbmltYXRpb24uaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xc2VxdWVudGlhbGFuaW1hdGlvbmdyb3VwLmggLi4vY29yZWxpYi9hbmltYXRpb24vcXZhcmlhbnRhbmltYXRpb24uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hbHBoYS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FyY2guaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm0uaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hcm12NS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2FybXY2LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXJtdjcuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19hYXJjaDY0LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYXZyMzIuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19iZmluLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfYm9vdHN0cmFwLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfZ2VuZXJpYy5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX2kzODYuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19pYTY0LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfaW50ZWdyaXR5LmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfbTY4ay5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21hY29zeC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX21pcHMuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wYXJpc2MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY19wb3dlcnBjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfczM5MC5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NoLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc2g0YS5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3NwYXJjLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfc3ltYmlhbi5oIC4uL2NvcmVsaWIvYXJjaC9xYXRvbWljX3Z4d29ya3MuaCAuLi9jb3JlbGliL2FyY2gvcWF0b21pY193aW5kb3dzLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfd2luZG93c2NlLmggLi4vY29yZWxpYi9hcmNoL3FhdG9taWNfeDg2XzY0LmggLi4vY29yZWxpYi90b29scy9xYWxnb3JpdGhtcy5oIC4uL2NvcmVsaWIvdG9vbHMvcWJpdGFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5LmggLi4vY29yZWxpYi90b29scy9xYnl0ZWFycmF5bWF0Y2hlci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNhY2hlLmggLi4vY29yZWxpYi90b29scy9xY2hhci5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRhaW5lcmZ3ZC5oIC4uL2NvcmVsaWIvdG9vbHMvcWNvbnRpZ3VvdXNjYWNoZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWNyeXB0b2dyYXBoaWNoYXNoLmggLi4vY29yZWxpYi90b29scy9xZGF0ZXRpbWUuaCAuLi9jb3JlbGliL3Rvb2xzL3FlYXNpbmdjdXJ2ZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWVsYXBzZWR0aW1lci5oIC4uL2NvcmVsaWIvdG9vbHMvcWhhc2guaCAuLi9jb3JlbGliL3Rvb2xzL3FpdGVyYXRvci5oIC4uL2NvcmVsaWIvdG9vbHMvcWxpbmUuaCAuLi9jb3JlbGliL3Rvb2xzL3FsaW5rZWRsaXN0LmggLi4vY29yZWxpYi90b29scy9xbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZS5oIC4uL2NvcmVsaWIvdG9vbHMvcWxvY2FsZV9ibGFja2JlcnJ5LmggLi4vY29yZWxpYi90b29scy9xbWFwLmggLi4vY29yZWxpYi90b29scy9xbWFyZ2lucy5oIC4uL2NvcmVsaWIvdG9vbHMvcXBhaXIuaCAuLi9jb3JlbGliL3Rvb2xzL3Fwb2ludC5oIC4uL2NvcmVsaWIvdG9vbHMvcXF1ZXVlLmggLi4vY29yZWxpYi90b29scy9xcmVjdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXJlZ2V4cC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzY29wZWR2YWx1ZXJvbGxiYWNrLmggLi4vY29yZWxpYi90b29scy9xc2V0LmggLi4vY29yZWxpYi90b29scy9xc2hhcmVkZGF0YS5oIC4uL2NvcmVsaWIvdG9vbHMvcXNoYXJlZHBvaW50ZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaGFyZWRwb2ludGVyX2ltcGwuaCAuLi9jb3JlbGliL3Rvb2xzL3FzaXplLmggLi4vY29yZWxpYi90b29scy9xc3RhY2suaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmcuaCAuLi9jb3JlbGliL3Rvb2xzL3FzdHJpbmdidWlsZGVyLmggLi4vY29yZWxpYi90b29scy9xc3RyaW5nbGlzdC5oIC4uL2NvcmVsaWIvdG9vbHMvcXN0cmluZ21hdGNoZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0ZXh0Ym91bmRhcnlmaW5kZXIuaCAuLi9jb3JlbGliL3Rvb2xzL3F0aW1lbGluZS5oIC4uL2NvcmVsaWIvdG9vbHMvcXZhcmxlbmd0aGFycmF5LmggLi4vY29yZWxpYi90b29scy9xdmVjdG9yLmggLi4vY29yZWxpYi9wbHVnaW4vcWZhY3RvcnlpbnRlcmZhY2UuaCAuLi9jb3JlbGliL3BsdWdpbi9xbGlicmFyeS5oIC4uL2NvcmVsaWIvcGx1Z2luL3FwbHVnaW4uaCAuLi9jb3JlbGliL3BsdWdpbi9xcGx1Z2lubG9hZGVyLmggLi4vY29yZWxpYi9wbHVnaW4vcXV1aWQuaCAuLi9jb3JlbGliL3htbC9xeG1sc3RyZWFtLmggLi4vY29yZWxpYi90aHJlYWQvcWF0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FiYXNpY2F0b21pYy5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FyZWFkd3JpdGVsb2NrLmggLi4vY29yZWxpYi90aHJlYWQvcXNlbWFwaG9yZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWQuaCAuLi9jb3JlbGliL3RocmVhZC9xdGhyZWFkc3RvcmFnZS5oIC4uL2NvcmVsaWIvdGhyZWFkL3F3YWl0Y29uZGl0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWFic3RyYWN0c3RhdGUuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3R0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWV2ZW50dHJhbnNpdGlvbi5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FmaW5hbHN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcWhpc3RvcnlzdGF0ZS5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWx0cmFuc2l0aW9uLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlLmggLi4vY29yZWxpYi9zdGF0ZW1hY2hpbmUvcXN0YXRlbWFjaGluZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3FmdXR1cmVpbnRlcmZhY2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXN5bmNocm9uaXplci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJld2F0Y2hlci5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xcnVubmFibGUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50Y29tcGlsZXJ0ZXN0LmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGV4Y2VwdGlvbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRmaWx0ZXIuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50ZmlsdGVya2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudGZ1bmN0aW9ud3JhcHBlcnMuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50aXRlcmF0ZWtlcm5lbC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRtYXAuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50bWFwa2VybmVsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudG1lZGlhbi5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGNvbmN1cnJlbnRyZWR1Y2VrZXJuZWwuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cmVzdWx0c3RvcmUuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50cnVuLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHJ1bmJhc2UuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcXRjb25jdXJyZW50c3RvcmVkZnVuY3Rpb25jYWxsLmggLi4vY29yZWxpYi9jb25jdXJyZW50L3F0Y29uY3VycmVudHRocmVhZGVuZ2luZS5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGhyZWFkcG9vbC5oIC4uL2NvcmVsaWIvaW8vcWFic3RyYWN0ZmlsZWVuZ2luZS5oIC4uL2NvcmVsaWIvaW8vcWJ1ZmZlci5oIC4uL2NvcmVsaWIvaW8vcWRhdGFzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3FkZWJ1Zy5oIC4uL2NvcmVsaWIvaW8vcWRpci5oIC4uL2NvcmVsaWIvaW8vcWRpcml0ZXJhdG9yLmggLi4vY29yZWxpYi9pby9xZmlsZS5oIC4uL2NvcmVsaWIvaW8vcWZpbGVpbmZvLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXIuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmUuaCAuLi9jb3JlbGliL2lvL3Fpb2RldmljZS5oIC4uL2NvcmVsaWIvaW8vcXByb2Nlc3MuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZS5oIC4uL2NvcmVsaWIvaW8vcXNldHRpbmdzLmggLi4vY29yZWxpYi9pby9xdGVtcG9yYXJ5ZmlsZS5oIC4uL2NvcmVsaWIvaW8vcXRleHRzdHJlYW0uaCAuLi9jb3JlbGliL2lvL3F1cmwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWRpc3QuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLWxhcmdlLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy1tZWRpdW0uaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW1pbmltYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLW5hY2wuaCAuLi9jb3JlbGliL2dsb2JhbC9xY29uZmlnLXNtYWxsLmggLi4vY29yZWxpYi9nbG9iYWwvcWVuZGlhbi5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FmZWF0dXJlcy5oIC4uL2NvcmVsaWIvZ2xvYmFsL3FnbG9iYWwuaCAuLi9jb3JlbGliL2dsb2JhbC9xbGlicmFyeWluZm8uaCAuLi9jb3JlbGliL2dsb2JhbC9xbmFtZXNwYWNlLmggLi4vY29yZWxpYi9nbG9iYWwvcW51bWVyaWMuaCAuLi9jb3JlbGliL2dsb2JhbC9xdF93aW5kb3dzLmggLi4vY29yZWxpYi9nbG9iYWwvcWNvbmZpZy5oIC4uL2NvcmVsaWIvY29kZWNzL3F0ZXh0Y29kZWMuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjcGx1Z2luLmggLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb3JlIAorIFNZTkNRVC5IRUFERVJfQ0xBU1NFUyA9IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEV2ZW50RGlzcGF0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTW9kZWxJbmRleCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUGVyc2lzdGVudE1vZGVsSW5kZXggLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1vZGVsSW5kZXhMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdEl0ZW1Nb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RUYWJsZU1vZGVsIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdExpc3RNb2RlbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQmFzaWNUaW1lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29yZUFwcGxpY2F0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q2xlYW5VcEZ1bmN0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGltZXJFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2hpbGRFdmVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ3VzdG9tRXZlbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUR5bmFtaWNQcm9wZXJ0eUNoYW5nZUV2ZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FFdmVudExvb3AgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFNZXRob2QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFFbnVtIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhUHJvcGVydHkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFDbGFzc0luZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFUeXBlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZUlkIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhVHlwZUlkMiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWltZURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RT2JqZWN0VXNlckRhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU9iamVjdENsZWFudXBIYW5kbGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHZW5lcmljQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUdlbmVyaWNSZXR1cm5Bcmd1bWVudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQXJndW1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJldHVybkFyZ3VtZW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNZXRhT2JqZWN0QWNjZXNzb3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1ldGFPYmplY3RFeHRyYURhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNoYXJlZE1lbW9yeSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2lnbmFsTWFwcGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTb2NrZXROb3RpZmllciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzdGVtU2VtYXBob3JlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVHJhbnNsYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmFyaWFudExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZhcmlhbnRIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50Q29tcGFyaXNvbkhlbHBlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RBbmltYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFuaW1hdGlvbkRyaXZlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQW5pbWF0aW9uR3JvdXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBhcmFsbGVsQW5pbWF0aW9uR3JvdXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBhdXNlQW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9wZXJ0eUFuaW1hdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2VxdWVudGlhbEFuaW1hdGlvbkdyb3VwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJpYW50QW5pbWF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0QWxnb3JpdGhtcyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQml0QXJyYXkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJpdFJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQnl0ZUFycmF5IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCeXRlUmVmIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCeXRlQXJyYXlNYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDYWNoZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGF0aW4xQ2hhciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2hhciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbnRhaW5lckZ3ZCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29udGlndW91c0NhY2hlVHlwZWREYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FDb250aWd1b3VzQ2FjaGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNyeXB0b2dyYXBoaWNIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEYXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaW1lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEYXRlVGltZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRWFzaW5nQ3VydmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUVsYXBzZWRUaW1lciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUhhc2hEdW1teVZhbHVlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoRHVtbXlOb2RlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoTm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGFzaCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXVsdGlIYXNoIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FIYXNoSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGFibGVIYXNoSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmVGIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaW5rZWRMaXN0RGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlua2VkTGlzdE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpbmtlZExpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUxpbmtlZExpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGlzdERhdGEgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3QgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZUxpc3RJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3lzdGVtTG9jYWxlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMb2NhbGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJCU3lzdGVtTG9jYWxlRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwTm9kZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTWFwUGF5bG9hZE5vZGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXVsdGlNYXAgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlTWFwSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU1hcmdpbnMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBhaXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVBvaW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQb2ludEYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVF1ZXVlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWN0RiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUmVnRXhwIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTY29wZWRQb2ludGVyRGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlckFycmF5RGVsZXRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkUG9pbnRlclBvZERlbGV0ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZFBvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVNjb3BlZEFycmF5UG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2NvcGVkVmFsdWVSb2xsYmFjayAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2V0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZXRJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0YWJsZVNldEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWREYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWREYXRhUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRXhwbGljaXRseVNoYXJlZERhdGFQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaGFyZWRQb2ludGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FXZWFrUG9pbnRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2l6ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2l6ZUYgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0YWNrIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGRXU3RyaW5nIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxhdGluMVN0cmluZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ2hhclJlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQ29uc3RTdHJpbmcgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVN0cmluZ1JlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTGF0aW4xTGl0ZXJhbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RDb25jYXRlbmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNvbmNhdGVuYWJsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nQnVpbGRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RyaW5nTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlU3RyaW5nTGlzdEl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdMaXN0IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdHJpbmdNYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0Qm91bmRhcnlGaW5kZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRpbWVMaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWYXJMZW5ndGhBcnJheSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yRGF0YSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVmVjdG9yVHlwZWREYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FWZWN0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVZlY3Rvckl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlVmVjdG9ySXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZhY3RvcnlJbnRlcmZhY2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUxpYnJhcnkgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRQbHVnaW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRQbHVnaW5JbnN0YW5jZUZ1bmN0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQbHVnaW5Mb2FkZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVV1aWQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVN0cmluZ1JlZiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtQXR0cmlidXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1BdHRyaWJ1dGVzIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1OYW1lc3BhY2VEZWNsYXJhdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1Ob3RhdGlvbkRlY2xhcmF0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FYbWxTdHJlYW1Ob3RhdGlvbkRlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtRW50aXR5RGVjbGFyYXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbUVudGl0eURlY2xhcmF0aW9ucyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtRW50aXR5UmVzb2x2ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVhtbFN0cmVhbVJlYWRlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RWG1sU3RyZWFtV3JpdGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBdG9taWNJbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUF0b21pY1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJhc2ljQXRvbWljSW50IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCYXNpY0F0b21pY1BvaW50ZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU11dGV4IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRleExvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTXV0ZXhEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWFkV3JpdGVMb2NrIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FSZWFkTG9ja2VyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FXcml0ZUxvY2tlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU2VtYXBob3JlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRocmVhZFN0b3JhZ2VEYXRhIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUaHJlYWRTdG9yYWdlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FXYWl0Q29uZGl0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdFN0YXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FBYnN0cmFjdFRyYW5zaXRpb24gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUV2ZW50VHJhbnNpdGlvbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmluYWxTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSGlzdG9yeVN0YXRlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTaWduYWxUcmFuc2l0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTdGF0ZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RU3RhdGVNYWNoaW5lIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZUl0ZXJhdG9yIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FNdXRhYmxlRnV0dXJlSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZUludGVyZmFjZUJhc2UgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZ1dHVyZUludGVyZmFjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlU3luY2hyb25pemVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGdXR1cmVXYXRjaGVyQmFzZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRnV0dXJlV2F0Y2hlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RUnVubmFibGUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUXRDb25jdXJyZW50RmlsdGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uY3VycmVudE1hcCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdENvbmN1cnJlbnRSdW4gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRocmVhZFBvb2wgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUFic3RyYWN0RmlsZUVuZ2luZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RGaWxlRW5naW5lSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RQWJzdHJhY3RGaWxlRW5naW5lSXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUJ1ZmZlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGF0YVN0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdERlYnVnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RTm9EZWJ1ZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRGlyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FEaXJJdGVyYXRvciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZUluZm8gLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVJbmZvTGlzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmlsZUluZm9MaXN0SXRlcmF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZpbGVTeXN0ZW1XYXRjaGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FGU0ZpbGVFbmdpbmUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUlPRGV2aWNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfUElEIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FQcm9jZXNzRW52aXJvbm1lbnQgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVByb2Nlc3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVJlc291cmNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTZXR0aW5ncyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGVtcG9yYXJ5RmlsZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dFN0cmVhbUZ1bmN0aW9uIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0U3RyZWFtTWFuaXB1bGF0b3IgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRTIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0SVN0cmVhbSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dE9TdHJlYW0gLi4vLi4vaW5jbHVkZS9RdENvcmUvUVVybCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEVuZGlhbiAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdEdsb2JhbCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSW50ZWdlckZvclNpemUgLi4vLi4vaW5jbHVkZS9RdENvcmUvUU5vSW1wbGljaXRCb29sQ2FzdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDggLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UOCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0lOVDE2IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUlOVDE2IC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfSU5UMzIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9VSU5UMzIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUV9JTlQ2NCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VJTlQ2NCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX0xMT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfVUxMT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FfTE9ORyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RX1VMT05HIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FTeXNJbmZvIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0TXNnSGFuZGxlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RR2xvYmFsU3RhdGljIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FHbG9iYWxTdGF0aWNEZWxldGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FCb29sIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUeXBlSW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmxhZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSW5jb21wYXRpYmxlRmxhZyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RRmxhZ3MgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZvcmVhY2hDb250YWluZXIgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUZvcmVhY2hDb250YWluZXJCYXNlIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FMaWJyYXJ5SW5mbyAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RdCAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RSW50ZXJuYWwgLi4vLi4vaW5jbHVkZS9RdENvcmUvUUNPT1JEIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1F0Q29uZmlnIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0Q29kZWMgLi4vLi4vaW5jbHVkZS9RdENvcmUvUVRleHRFbmNvZGVyIC4uLy4uL2luY2x1ZGUvUXRDb3JlL1FUZXh0RGVjb2RlciAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjRmFjdG9yeUludGVyZmFjZSAuLi8uLi9pbmNsdWRlL1F0Q29yZS9RVGV4dENvZGVjUGx1Z2luIAorIFNZTkNRVC5QUklWQVRFX0hFQURFUl9GSUxFUyA9IC4uL2NvcmVsaWIva2VybmVsL3FhYnN0cmFjdGV2ZW50ZGlzcGF0Y2hlcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWFic3RyYWN0aXRlbW1vZGVsX3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xY29yZV9tYWNfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlX3N5bWJpYW5fcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlX3VuaXhfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlYXBwbGljYXRpb25fcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlY21kbGluZWFyZ3NfcC5oIC4uL2NvcmVsaWIva2VybmVsL3Fjb3JlZ2xvYmFsZGF0YV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWNyYXNoaGFuZGxlcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl9ibGFja2JlcnJ5X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX2dsaWJfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FldmVudGRpc3BhdGNoZXJfc3ltYmlhbl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWV2ZW50ZGlzcGF0Y2hlcl91bml4X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xZXZlbnRkaXNwYXRjaGVyX3dpbl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcWZ1bmN0aW9uc19wLmggLi4vY29yZWxpYi9rZXJuZWwvcW1ldGFvYmplY3RfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FvYmplY3RfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzaGFyZWRtZW1vcnlfcC5oIC4uL2NvcmVsaWIva2VybmVsL3FzeXN0ZW1lcnJvcl9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXN5c3RlbXNlbWFwaG9yZV9wLmggLi4vY29yZWxpYi9rZXJuZWwvcXRyYW5zbGF0b3JfcC5oIC4uL2NvcmVsaWIva2VybmVsL3F2YXJpYW50X3AuaCAuLi9jb3JlbGliL2tlcm5lbC9xd2luZXZlbnRub3RpZmllcl9wLmggLi4vY29yZWxpYi9hbmltYXRpb24vcWFic3RyYWN0YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xYW5pbWF0aW9uZ3JvdXBfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FwYXJhbGxlbGFuaW1hdGlvbmdyb3VwX3AuaCAuLi9jb3JlbGliL2FuaW1hdGlvbi9xcHJvcGVydHlhbmltYXRpb25fcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3FzZXF1ZW50aWFsYW5pbWF0aW9uZ3JvdXBfcC5oIC4uL2NvcmVsaWIvYW5pbWF0aW9uL3F2YXJpYW50YW5pbWF0aW9uX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3FieXRlZGF0YV9wLmggLi4vY29yZWxpYi90b29scy9xZGF0ZXRpbWVfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcWhhcmZidXp6X3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfZGF0YV9wLmggLi4vY29yZWxpYi90b29scy9xbG9jYWxlX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3Fsb2NhbGVfdG9vbHNfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXBvZGxpc3RfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXJpbmdidWZmZXJfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNjb3BlZHBvaW50ZXJfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXNpbWRfcC5oIC4uL2NvcmVsaWIvdG9vbHMvcXRvb2xzX3AuaCAuLi9jb3JlbGliL3Rvb2xzL3F1bmljb2RldGFibGVzX3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xZWxmcGFyc2VyX3AuaCAuLi9jb3JlbGliL3BsdWdpbi9xZmFjdG9yeWxvYWRlcl9wLmggLi4vY29yZWxpYi9wbHVnaW4vcWxpYnJhcnlfcC5oIC4uL2NvcmVsaWIvcGx1Z2luL3FzeXN0ZW1saWJyYXJ5X3AuaCAuLi9jb3JlbGliL3htbC9xeG1sc3RyZWFtX3AuaCAuLi9jb3JlbGliL3htbC9xeG1sdXRpbHNfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3FtdXRleF9wLmggLi4vY29yZWxpYi90aHJlYWQvcW11dGV4cG9vbF9wLmggLi4vY29yZWxpYi90aHJlYWQvcW9yZGVyZWRtdXRleGxvY2tlcl9wLmggLi4vY29yZWxpYi90aHJlYWQvcXJlYWR3cml0ZWxvY2tfcC5oIC4uL2NvcmVsaWIvdGhyZWFkL3F0aHJlYWRfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FhYnN0cmFjdHN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xYWJzdHJhY3R0cmFuc2l0aW9uX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xZXZlbnR0cmFuc2l0aW9uX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xaGlzdG9yeXN0YXRlX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc2lnbmFsZXZlbnRnZW5lcmF0b3JfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzaWduYWx0cmFuc2l0aW9uX3AuaCAuLi9jb3JlbGliL3N0YXRlbWFjaGluZS9xc3RhdGVfcC5oIC4uL2NvcmVsaWIvc3RhdGVtYWNoaW5lL3FzdGF0ZW1hY2hpbmVfcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xZnV0dXJlaW50ZXJmYWNlX3AuaCAuLi9jb3JlbGliL2NvbmN1cnJlbnQvcWZ1dHVyZXdhdGNoZXJfcC5oIC4uL2NvcmVsaWIvY29uY3VycmVudC9xdGhyZWFkcG9vbF9wLmggLi4vY29yZWxpYi9pby9xYWJzdHJhY3RmaWxlZW5naW5lX3AuaCAuLi9jb3JlbGliL2lvL3FkYXRhc3RyZWFtX3AuaCAuLi9jb3JlbGliL2lvL3FkYXRhdXJsX3AuaCAuLi9jb3JlbGliL2lvL3FkaXJfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVpbmZvX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtZW5naW5lX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtZW50cnlfcC5oIC4uL2NvcmVsaWIvaW8vcWZpbGVzeXN0ZW1pdGVyYXRvcl9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbW1ldGFkYXRhX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9kbm90aWZ5X3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9mc2V2ZW50c19wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfaW5vdGlmeV9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfa3F1ZXVlX3AuaCAuLi9jb3JlbGliL2lvL3FmaWxlc3lzdGVtd2F0Y2hlcl9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfc3ltYmlhbl9wLmggLi4vY29yZWxpYi9pby9xZmlsZXN5c3RlbXdhdGNoZXJfd2luX3AuaCAuLi9jb3JlbGliL2lvL3Fmc2ZpbGVlbmdpbmVfaXRlcmF0b3JfcC5oIC4uL2NvcmVsaWIvaW8vcWZzZmlsZWVuZ2luZV9wLmggLi4vY29yZWxpYi9pby9xaW9kZXZpY2VfcC5oIC4uL2NvcmVsaWIvaW8vcW5vbmNvbnRpZ3VvdXNieXRlZGV2aWNlX3AuaCAuLi9jb3JlbGliL2lvL3Fwcm9jZXNzX3AuaCAuLi9jb3JlbGliL2lvL3FyZXNvdXJjZV9pdGVyYXRvcl9wLmggLi4vY29yZWxpYi9pby9xcmVzb3VyY2VfcC5oIC4uL2NvcmVsaWIvaW8vcXNldHRpbmdzX3AuaCAuLi9jb3JlbGliL2lvL3F0bGR1cmxfcC5oIC4uL2NvcmVsaWIvaW8vcXVybHRsZHNfcC5oIC4uL2NvcmVsaWIvaW8vcXdpbmRvd3NwaXBld3JpdGVyX3AuaCAuLi9jb3JlbGliL2dsb2JhbC9xbnVtZXJpY19wLmggLi4vY29yZWxpYi9nbG9iYWwvcXRfcGNoLmggLi4vY29yZWxpYi9jb2RlY3MvcWZvbnRsYW9jb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcWljb252Y29kZWNfcC5oIC4uL2NvcmVsaWIvY29kZWNzL3Fpc2NpaWNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xbGF0aW5jb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXNpbXBsZWNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xdGV4dGNvZGVjX3AuaCAuLi9jb3JlbGliL2NvZGVjcy9xdHNjaWljb2RlY19wLmggLi4vY29yZWxpYi9jb2RlY3MvcXV0ZmNvZGVjX3AuaCAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43LzAwMzMtY29uZmlndXJlLXN1cHBvcnQtYy0weC1zdGFuZGFyZC1mb3ItZGlyZWN0ZmQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZmFjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2NvbmZpZ3VyZTogc3VwcG9ydCBjKysweCBzdGFuZGFyZCBmb3IgZGlyZWN0ZmQKKworV2hpbGUgZGlyZWN0ZmQgdXBncmFkZSB0byAxLjcuNiwgaXQgYWx3YXlzIGluY2x1ZGVzIGRpcmVjdGZiKysgdXRpbHMKK3doZW4gQysrIGlzIHVzZWQgYW5kIHNldCBjKysweCBhcyBjKysgc3RhbmRhcmQuCisoSW4gZ2l0Oi8vZ2l0LmRpcmVjdGZiLm9yZy9naXQvZGlyZWN0ZmIvY29yZS9EaXJlY3RGQi5naXQKK2NvbW1pdCBiNDQ0YmNhZTMxOTdiZTlmYWY4ODM0NjBkY2MyMzllZjc1N2Q1OTIyLCBhbmQgY29tbWl0Cis1MjJiZWViNzZmMmE4ZDJkZWUzMGQ5MjhkMmE1OTU1YmQwNmNmMjVjKQorCitUaGUgZGlyZWN0ZmQgaW4gcXQ0IGlzIGMrKywgYW5kIHRoZXJlIHdhcyBhIGJ1aWxkIGZhaWx1cmU6CisuLi4KK3wgcWRpcmVjdGZid2luZG93c3VyZmFjZS5jcHA6MzM2OjY5OiBlcnJvcjogaW4gQysrOTggJ3JlY3QnIG11c3QgYmUKK2luaXRpYWxpemVkIGJ5IGNvbnN0cnVjdG9yLCBub3QgYnkgJ3suLi59JworfCAgICAgIGNvbnN0IERGQlJlY3RhbmdsZSByZWN0ID0geyByLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSB9OworLi4uCisKK1RoZSBnKysgdXNlZCBjKys5OCBhcyBkZWZhdWx0IGMrKyBzdGFuZGFyZCwgd2Ugc2hvdWxkCitleHBsaWNpdGx5IHNldCBjKysweCBmb3IgZGlyZWN0ZmQgaW4gcXQ0LgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorLS0tCisgY29uZmlndXJlIHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKK2luZGV4IDU3MjRiZDYuLmVjYzJmOGIgMTAwNzU1CistLS0gYS9jb25maWd1cmUKKysrKyBiL2NvbmZpZ3VyZQorQEAgLTY2NTYsNiArNjY1Niw3IEBAIGlmIFsgIiRQTEFURk9STV9RV1MiID0gInllcyIgXTsgdGhlbgorICAgICAgICBpZiBbICIke3NjcmVlbn0iID0gImRpcmVjdGZiIiBdICYmIFsgIiR7Q0ZHX0NPTkZJR1VSRV9FWElUX09OX0VSUk9SfSIgPSAieWVzIiBdOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgIiRQS0dfQ09ORklHIiAtLWV4aXN0cyBkaXJlY3RmYiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj1gJFBLR19DT05GSUcgLS1jZmxhZ3MgZGlyZWN0ZmIgMj4vZGV2L251bGxgCisrICAgICAgICAgICAgICAgUVRfQ0ZMQUdTX0RJUkVDVEZCPSIkUVRfQ0ZMQUdTX0RJUkVDVEZCIC1zdGQ9YysrMHgiCisgICAgICAgICAgICAgICAgUVRfTElCU19ESVJFQ1RGQj1gJFBLR19DT05GSUcgLS1saWJzIGRpcmVjdGZiIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgZWxpZiBkaXJlY3RmYi1jb25maWcgLS12ZXJzaW9uID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgICAgIFFUX0NGTEFHU19ESVJFQ1RGQj1gZGlyZWN0ZmItY29uZmlnIC0tY2ZsYWdzIDI+L2Rldi9udWxsYAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9GaXgtUVdTTG9jay1pbnZhbGlkLWFyZ3VtZW50LWxvZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY1ZjAwZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L0ZpeC1RV1NMb2NrLWludmFsaWQtYXJndW1lbnQtbG9ncy5wYXRjaApAQCAtMCwwICsxLDk4IEBACitGcm9tIDUyYzM0MDAxYmFkODVjMzAzMjYxODA3MGIxZDZiMmEzYzY4ODA3MTUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBOZWlsIEplcnJhbSA8bi4uLkBvc3NhdS5ob21lbGludXgubmV0PgorRGF0ZTogVGh1LCA4IE5vdiAyMDEyIDA4OjE4OjMyICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIEZpeCBRV1NMb2NrICJpbnZhbGlkIGFyZ3VtZW50IiBsb2dzCisKK1RoZXJlIHdhcyBubyBrbm93biBhY3R1YWwgcHJvYmxlbSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgbG9ncywgYnV0IHRoZXkKK3dlcmUgc3BhbW1pbmcgdGhlIGxvZywgc28gSSB0aG91Z2h0IGl0IHdvcnRoIHRyeWluZyB0byB1bmRlcnN0YW5kIGFuZAorZml4IHRoZW0uCisKK1RoZSBjb25mdXNpb24gaXMgdGhhdCB0aGVyZSBhcmUgdHdvIGRpZmZlcmVudCB3YXlzIG9mIGNyZWF0aW5nIFFXU0xvY2sKK29iamVjdHMuICAiUVdTTG9jaygpIiBjcmVhdGVzIGFuIG9iamVjdCB0aGF0IGNyZWF0ZXMgYSBuZXcgc2V0IG9mCitzZW1hcGhvcmVzLCB3aGVyZWFzICJRV1NMb2NrKGlkKSIgY3JlYXRlcyBhbiBvYmplY3QgdGhhdCBhbGlhc2VzIHRoZQorZXhpc3Rpbmcgc2V0IG9mIHNlbWFwaG9yZXMgd2l0aCBJRCBpZC4gIFdoYXQgc2VlbXMgdG8gaGFwcGVuIGlzIHRoYXQKK2VhY2ggYXBwbGljYXRpb24gY3JlYXRlcyBhIHNlbWFwaG9yZSBzZXQgc2NvcGVkIHRvIHRoYXQKK2FwcGxpY2F0aW9uIChRV1NEaXNwbGF5OjpEYXRhOjpjbGllbnRMb2NrIGluIHFhcHBsaWNhdGlvbl9xd3MuY3BwKSwKK3RoZW4gdGhpcyBzZW1hcGhvcmUgc2V0IGlzIHBhc3NlZCBieSBjb21wbGV4IG1lYW5zIHRvCitwbGFjZXMgKFFXU0NsaWVudFByaXZhdGUgYW5kIFFXU01lbW9yeVN1cmZhY2UpIHRoYXQgdXNlIHRoZSBzZW1hcGhvcmVzCitmb3IgYSBzaG9ydCBwZXJpb2QgYW5kIHRoZW4gZGVsZXRlIHRoZWlyIFFXU0xvY2sgb2JqZWN0cy4KKworVGhlIHByb2JsZW0gd2FzIHRoYXQgdGhlIFFXU0xvY2sgZGVzdHJ1Y3RvciBhbHdheXMgZGVzdHJveWVkIHRoZQorc2VtYXBob3JlIHNldCwgZXZlbiB3aGVuIHRoYXQgUVdTTG9jayBoYWRuJ3QgY3JlYXRlIHRoZSBzZW1hcGhvcmVzCitpdHNlbGYsIGhlbmNlIG1ha2luZyB0aGUgc2VtYXBob3JlcyBpbnZhbGlkIGZvciBvdGhlciBRV1NMb2NrIG9iamVjdHMKK3N0aWxsIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHNldC4KKworQ2xlYXJseSBhIFFXU0xvY2sgb2JqZWN0IHNob3VsZG4ndCBkZXN0cm95IHRoZSBzZW1hcGhvcmUgc2V0IGlmIGl0CitkaWRuJ3QgY3JlYXRlIGl0IGl0c2VsZiwgYW5kIHRoYXQgaXMgY29uZmlybWVkIGJ5IHRoZSBmYWN0IHRoYXQgb25lIG9mCit0aGUgaW1wbGVtZW50YXRpb25zIGluc2lkZSBRV1NMb2NrIGFscmVhZHkgaW1wbGVtZW50cyB0aGlzIGxvZ2ljLCB3aXRoCit0aGUgJ293bmVkJyBmbGFnLiAgVGhlIGZpeCBpcyB0byBpbXBsZW1lbnQgdGhpcyBmb3IgdGhlICNpZm5kZWYKK1FUX1BPU0lYX0lQQyBjYXNlIC0gd2hpY2ggaXMgd2hhdCBpcyB1c2VkIGluIFF0TW9rbyAtIGp1c3QgYXMgaXMKK2FscmVhZHkgaW1wbGVtZW50ZWQgZm9yIHRoZSAjaWZkZWYgUVRfUE9TSVhfSVBDIGNhc2UuCisKK09yaWdpbmFsIHBhdGNoIGNhbiBiZSBmb3VuZCBoZXJlOgorIGh0dHA6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9jb21tdW5pdHlAbGlzdHMub3Blbm1va28ub3JnL21zZzY1NTEyLmh0bWwKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworU2lnbmVkLW9mZi1ieTogTWlrZSBMb29pam1hbnMgPG1pa2UubG9vaWptYW5zQHRvcGljLm5sPgorIChSZW1vdmVkIHRoZSBjb21tZW50ZWQtb3V0IGRlYnVnIHN0YXRlbWVudHMgZnJvbSB0aGUgb3JpZ2luYWwgcGF0Y2guKQorCistLS0KKworZGlmZiAtLWdpdCBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9jay5jcHAgYi9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2suY3BwCitpbmRleCA5OTE0YTI0Li4xMDU1Nzg1IDEwMDY0NAorLS0tIGEvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAorKysrIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrLmNwcAorQEAgLTgzLDkgKzgzLDEyIEBAIFFXU0xvY2s6OlFXU0xvY2soaW50IGlkKSA6IHNlbUlkKGlkKQorICAgICBRV1NTaWduYWxIYW5kbGVyOjppbnN0YW5jZSgpLT5hZGRXU0xvY2sodGhpcyk7CisgI2VuZGlmCisgCisrICAgIG93bmVkID0gZmFsc2U7CisrCisgI2lmbmRlZiBRVF9QT1NJWF9JUEMKKyAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICBzZW1JZCA9IHNlbWdldChJUENfUFJJVkFURSwgMywgSVBDX0NSRUFUIHwgMDY2Nik7CisrICAgICAgICBvd25lZCA9IHRydWU7CisgICAgICAgICBpZiAoc2VtSWQgPT0gLTEpIHsKKyAgICAgICAgICAgICBwZXJyb3IoIlFXU0xvY2s6OlFXU0xvY2siKTsKKyAgICAgICAgICAgICBxRmF0YWwoIlVuYWJsZSB0byBjcmVhdGUgc2VtYXBob3JlIik7CitAQCAtMTAwLDcgKzEwNCw2IEBAIFFXU0xvY2s6OlFXU0xvY2soaW50IGlkKSA6IHNlbUlkKGlkKQorICAgICB9CisgI2Vsc2UKKyAgICAgc2Vtc1swXSA9IHNlbXNbMV0gPSBzZW1zWzJdID0gU0VNX0ZBSUxFRDsKKy0gICAgb3duZWQgPSBmYWxzZTsKKyAKKyAgICAgaWYgKHNlbUlkID09IC0xKSB7CisgICAgICAgICAvLyAjIyMgZ2VuZXJhdGUgcmVhbGx5IHVuaXF1ZSBJRHMKK0BAIC0xMzQsOSArMTM3LDExIEBAIFFXU0xvY2s6On5RV1NMb2NrKCkKKyAKKyAgICAgaWYgKHNlbUlkICE9IC0xKSB7CisgI2lmbmRlZiBRVF9QT1NJWF9JUEMKKy0gICAgICAgIHF0X3NlbXVuIHNlbXZhbDsKKy0gICAgICAgIHNlbXZhbC52YWwgPSAwOworLSAgICAgICAgc2VtY3RsKHNlbUlkLCAwLCBJUENfUk1JRCwgc2VtdmFsKTsKKysJaWYgKG93bmVkKSB7CisrCSAgICBxdF9zZW11biBzZW12YWw7CisrCSAgICBzZW12YWwudmFsID0gMDsKKysJICAgIHNlbWN0bChzZW1JZCwgMCwgSVBDX1JNSUQsIHNlbXZhbCk7CisrCX0KKyAgICAgICAgIHNlbUlkID0gLTE7CisgI2Vsc2UKKyAgICAgICAgIC8vIGVtdWxhdGUgdGhlIFNFTV9VTkRPIGJlaGF2aW9yIGZvciB0aGUgQmFja2luZ1N0b3JlIGxvY2sKK2RpZmYgLS1naXQgYS9zcmMvZ3VpL2VtYmVkZGVkL3F3c2xvY2tfcC5oIGIvc3JjL2d1aS9lbWJlZGRlZC9xd3Nsb2NrX3AuaAoraW5kZXggZDMyNGU0Zi4uZDg2N2QyMCAxMDA2NDQKKy0tLSBhL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKKysrKyBiL3NyYy9ndWkvZW1iZWRkZWQvcXdzbG9ja19wLmgKK0BAIC04Niw4ICs4Niw4IEBAIHByaXZhdGU6CisgICAgIGludCBsb2NrQ291bnRbMl07CisgI2lmZGVmIFFUX1BPU0lYX0lQQworICAgICBzZW1fdCAqc2Vtc1szXTsKKy0gICAgYm9vbCBvd25lZDsKKyAjZW5kaWYKKysgICAgYm9vbCBvd25lZDsKKyB9OworIAorIFFUX0VORF9OQU1FU1BBQ0UKKyAKKy0tIAorMS43LjEwLjQKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2FkZF9jaGVja19mb3JfYWFyY2g2NF8zMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDUxMDNkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvYWRkX2NoZWNrX2Zvcl9hYXJjaDY0XzMyLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK0F1dGhvcjogS3Jpc2huYW5qYW5hcHBhLCBKYWdhZGVlc2ggPGphZ2FkZWVzaC5rcmlzaG5hbmphbmFwcGFAY2F2aXVtbmV0d29ya3MuY29tPgorRGF0ZTogICBTdW4gQXByIDEyIDE5OjI3OjEwIDIwMTUgKzA1MzAKKworW1BBVENIXSBhZGQgY2hlY2tpbmcgZm9yIEFBcmNoNjQgaWxwMzIKKworQ3Jvc3MtY29tcGlsaW5nIHF0NC1lbWJlZGRlZCBhbmQgcXQ0LXgxMS1mcmVlIGFwcGxpY2F0aW9ucyBmb3IgQUFyY2g2NCBpbHAzMgorKGJvdGggYmlnIGFuZCBsaXR0bGUgZW5kaWFuKSBmYWlscyB3aXRoIGJlbG93IGVycm9yLAorCisoc25pcCkKK0luIGZpbGUgaW5jbHVkZWQgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbGxlY3Rvci5oOjMxOjAsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaDozMiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaDoyNiwKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oOjI2LAorICAgICAgICAgICAgICAgICBmcm9tIC4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaDoyNywKKyAgICAgICAgICAgICAgICAgZnJvbSAuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja0NvbnN0cnVjdG9yLmg6MzAsCisgICAgICAgICAgICAgICAgIGZyb20gLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHA6Mjc6CisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6IEluIGluc3RhbnRpYXRpb24gb2YgJ1RPIFFUV1RGOjpiaXR3aXNlX2Nhc3QoRlJPTSkgW3cKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNJbW1lZGlhdGUuaDo1Mjo0OTogcmVxdWlyZWQgZnJvbSBoZXJlCisuLi8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0cmFzLmg6NjM6MTogZXJyb3I6IHNpemUgb2YgYXJyYXkgaXMgbmVnYXRpdmUKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnVE8gUVRXVEY6OmJpdHdpc2VfY2FzdChGUk9NKSBbdworLi4vM3JkcGFydHkvamF2YXNjcmlwdGNvcmUvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ltbWVkaWF0ZS5oOjU3OjQ3OiByZXF1aXJlZCBmcm9tIGhlcmUKKy4uLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaDo2MzoxOiBlcnJvcjogc2l6ZSBvZiBhcnJheSBpcyBuZWdhdGl2ZQorbWFrZVsxXTogKioqIFtvYmovcmVsZWFzZS9KU0NhbGxiYWNrQ29uc3RydWN0b3Iub10gRXJyb3IgMQorLS0gQ1VUIC0tCisKK3RoZSBlcnJvciBpcyBiZWNhdXNlIG9mIEpTVkFMVUU2NCBpcyBiZWluZyBkZWZpbmVkIHdoaWxlIGNvbXBpbGluZyBwcm9ncmFtcworZm9yIEFBcmNoNjQgaWxwMzIuIFRoaXMgbWFrZXMgZXF1YWwgY29uZGl0aW9uIGNoZWNraW5nIG9mIGludHB0cl90IGFuZCBkb3VibGUKK2RhdGF0eXBlcyBhcyBmYWxzZSwgYW5kIHJlc3VsdHMgaW4gLTEgKG5lZ2F0aXZlKSBhcyBhcnJheSBzaXplIGluIGJpdHdpc2VfY2FzdAorZnVuY3Rpb24uCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLcmlzaG5hbmphbmFwcGEsIEphZ2FkZWVzaCA8amFnYWRlZXNoLmtyaXNobmFuamFuYXBwYUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKy0tLSBhL3NyYy8zcmRwYXJ0eS9qYXZhc2NyaXB0Y29yZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkyMDE0LTA0LTExIDAwOjA3OjEyLjAwMDAwMDAwMCArMDUzMAorKysrIGIvc3JjLzNyZHBhcnR5L2phdmFzY3JpcHRjb3JlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCTIwMTUtMDQtMTAgMjI6MTk6NTEuMDY2Mjc5NDI2ICswNTMwCitAQCAtMjE0LDYgKzIxNCw5IEBACisgI2RlZmluZSBXVEZfQ1BVX0FBUkNINjQgMQorICNpZiBkZWZpbmVkKF9fQUFSQ0g2NEVCX18pCisgI2RlZmluZSBXVEZfQ1BVX0JJR19FTkRJQU4gMQorKyNpZiAhZGVmaW5lZChfX0xQNjRfXykKKysjZGVmaW5lIFdURl9DUFVfQUFSQ0g2NF8zMiAxCisrI2VuZGlmCisgI2VuZGlmCisgI2VuZGlmCisgCitAQCAtOTAzLDcgKzkwNiw3IEBACisgI2VuZGlmCisgCisgI2lmICFkZWZpbmVkKFdURl9VU0VfSlNWQUxVRTY0KSAmJiAhZGVmaW5lZChXVEZfVVNFX0pTVkFMVUUzMikgJiYgIWRlZmluZWQoV1RGX1VTRV9KU1ZBTFVFMzJfNjQpCistI2lmIChDUFUoWDg2XzY0KSAmJiAoT1MoVU5JWCkgfHwgT1MoV0lORE9XUykgfHwgT1MoU09MQVJJUykgfHwgT1MoSFBVWCkpKSB8fCAoQ1BVKElBNjQpICYmICFDUFUoSUE2NF8zMikpIHx8IENQVShBTFBIQSkgfHwgQ1BVKEFJWDY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKE1JUFM2NCkgfHwgQ1BVKEFBUkNINjQpCisrI2lmIChDUFUoWDg2XzY0KSAmJiAoT1MoVU5JWCkgfHwgT1MoV0lORE9XUykgfHwgT1MoU09MQVJJUykgfHwgT1MoSFBVWCkpKSB8fCAoQ1BVKElBNjQpICYmICFDUFUoSUE2NF8zMikpIHx8IENQVShBTFBIQSkgfHwgQ1BVKEFJWDY0KSB8fCBDUFUoU1BBUkM2NCkgfHwgQ1BVKE1JUFM2NCkgfHwgKENQVShBQVJDSDY0KSAmJiAhQ1BVKEFBUkNINjRfMzIpKQorICNkZWZpbmUgV1RGX1VTRV9KU1ZBTFVFNjQgMQorICNlbGlmIENQVShBUk0pIHx8IENQVShQUEM2NCkKKyAjZGVmaW5lIFdURl9VU0VfSlNWQUxVRTMyIDEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvZysrLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3OGMyNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2crKy5jb25mCkBAIC0wLDAgKzEsNDAgQEAKKyMKKyMgcW1ha2UgY29uZmlndXJhdGlvbiBmb3IgY29tbW9uIGdjYworIworCitRTUFLRV9DT01QSUxFUiA9IGdjYworCitRTUFLRV9DQyAgICAgICA9ICQoT0VfUU1BS0VfQ0MpCitRTUFLRV9DRkxBR1MgICAgICAgKz0gJChPRV9RTUFLRV9DRkxBR1MpCitRTUFLRV9DRkxBR1NfUkVMRUFTRV9XSVRIX0RFQlVHSU5GTyArPSAkKE9FX1FNQUtFX0NGTEFHUykKK1FNQUtFX0NGTEFHU19QUkVDT01QSUxFICs9IC14IGMtaGVhZGVyIC1jICR7UU1BS0VfUENIX0lOUFVUfSAtbyAke1FNQUtFX1BDSF9PVVRQVVR9CitRTUFLRV9DRkxBR1NfVVNFX1BSRUNPTVBJTEUgKz0gLWluY2x1ZGUgJHtRTUFLRV9QQ0hfT1VUUFVUX0JBU0V9CisKK1FNQUtFX0NYWCAgICAgID0gJChPRV9RTUFLRV9DWFgpCitRTUFLRV9DWFhGTEFHUyAgICAgKz0gJChPRV9RTUFLRV9DWFhGTEFHUykKK1FNQUtFX0NYWEZMQUdTX1JFTEVBU0VfV0lUSF9ERUJVR0lORk8gKz0gJCRRTUFLRV9DRkxBR1NfUkVMRUFTRV9XSVRIX0RFQlVHSU5GTworUU1BS0VfQ1hYRkxBR1NfUFJFQ09NUElMRSArPSAteCBjKystaGVhZGVyIC1jICR7UU1BS0VfUENIX0lOUFVUfSAtbyAke1FNQUtFX1BDSF9PVVRQVVR9CitRTUFLRV9DWFhGTEFHU19VU0VfUFJFQ09NUElMRSA9ICQkUU1BS0VfQ0ZMQUdTX1VTRV9QUkVDT01QSUxFCisKK1FNQUtFX0xJTksgICAgID0gJChPRV9RTUFLRV9MSU5LKQorUU1BS0VfTElOS19TSExJQiAgID0gJChPRV9RTUFLRV9MSU5LKQorUU1BS0VfTElOS19DCQk9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xJTktfQ19TSExJQgk9ICQoT0VfUU1BS0VfTElOSykKK1FNQUtFX0xGTEFHUyAgICAgICArPSAkKE9FX1FNQUtFX0xERkxBR1MpCitRTUFLRV9MRkxBR1NfTk9VTkRFRgkrPSAtV2wsLS1uby11bmRlZmluZWQKK1FNQUtFX0xGTEFHU19SUEFUSCAgICAgICAgPSAtV2wsLXJwYXRoLWxpbmssCisKK1FNQUtFX1BDSF9PVVRQVVRfRVhUICAgID0gLmdjaAorCisjIC1Cc3ltYm9saWMtZnVuY3Rpb25zIChsZCkgc3VwcG9ydAorUU1BS0VfTEZMQUdTX0JTWU1CT0xJQ19GVU5DID0gLVdsLC1Cc3ltYm9saWMtZnVuY3Rpb25zCitRTUFLRV9MRkxBR1NfRFlOQU1JQ19MSVNUID0gLVdsLC0tZHluYW1pYy1saXN0LAorCisjIGRvIG5vdCBkZXBlbmQgb24gZ2RiCitDT05GSUcgLT0gZ2RiX2R3YXJmX2luZGV4CisKKyMgc29tZSBsaW5raW5nIGhlbHBlci4uLgorQ09ORklHICs9IHJwYXRoX2xpYmRpcnMKKworIyBmb3IgdGhlIFNESworaXNFbXB0eShRTUFLRV9RVF9DT05GSUcpOlFNQUtFX1FUX0NPTkZJRyA9ICQoT0VfUU1BS0VfUVRfQ09ORklHKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvbGludXguY29uZiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY3MDM4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LTQuOC43L2xpbnV4LmNvbmYKQEAgLTAsMCArMSw2NiBAQAorIworIyBxbWFrZSBjb25maWd1cmF0aW9uIGZvciBjb21tb24gbGludXgKKyMKKworUU1BS0VfQ0ZMQUdTX1RIUkVBRAkrPSAtRF9SRUVOVFJBTlQKK1FNQUtFX0NYWEZMQUdTX1RIUkVBRAkrPSAkJFFNQUtFX0NGTEFHU19USFJFQUQKKworUU1BS0VfSU5DRElSICAgICAgICAgID0KK1FNQUtFX0xJQkRJUiAgICAgICAgICA9CitRTUFLRV9JTkNESVJfWDExICAgICAgPQorUU1BS0VfTElCRElSX1gxMSAgICAgID0KK1FNQUtFX0lOQ0RJUl9RVCAgICAgICA9ICQoT0VfUU1BS0VfSU5DRElSX1FUKQorUU1BS0VfTElCRElSX1FUICAgICAgID0gJChPRV9RTUFLRV9MSUJESVJfUVQpCitRTUFLRV9JTkNESVJfT1BFTkdMICAgPQorUU1BS0VfTElCRElSX09QRU5HTCAgID0KK1FNQUtFX0lOQ0RJUl9PUEVOR0xfRVMxID0gJCRRTUFLRV9JTkNESVJfT1BFTkdMCitRTUFLRV9MSUJESVJfT1BFTkdMX0VTMSA9ICQkUU1BS0VfTElCRElSX09QRU5HTAorUU1BS0VfSU5DRElSX09QRU5HTF9FUzIgPSAkJFFNQUtFX0lOQ0RJUl9PUEVOR0wKK1FNQUtFX0xJQkRJUl9PUEVOR0xfRVMyID0gJCRRTUFLRV9MSUJESVJfT1BFTkdMCitRTUFLRV9JTkNESVJfRUdMICAgICAgPQorUU1BS0VfTElCRElSX0VHTCAgICAgID0KK1FNQUtFX0lOQ0RJUl9PUEVOVkcgICA9CitRTUFLRV9MSUJESVJfT1BFTlZHICAgPQorCisKK1FNQUtFX0xJQlMgICAgICAgICAgICA9CitRTUFLRV9MSUJTX0RZTkxPQUQgICAgPSAtbGRsCitRTUFLRV9MSUJTX1gxMSAgICAgICAgPSAkKE9FX1FNQUtFX0xJQlNfWDExKQorUU1BS0VfTElCU19YMTFTTSAgICAgID0gJChPRV9RTUFLRV9MSUJTX1gxMVNNKQorUU1BS0VfTElCU19OSVMgICAgICAgID0gLWxuc2wKK1FNQUtFX0xJQlNfRUdMICAgICAgICA9IC1sRUdMCitRTUFLRV9MSUJTX09QRU5HTCAgICAgPSAtbEdMCitRTUFLRV9MSUJTX09QRU5HTF9RVCAgPSAtbEdMCitRTUFLRV9MSUJTX09QRU5HTF9FUzEgPSAtbEdMRVNfQ00KK1FNQUtFX0xJQlNfT1BFTkdMX0VTMiA9IC1sR0xFU3YyCitRTUFLRV9MSUJTX09QRU5WRyAgICAgPSAtbE9wZW5WRworUU1BS0VfTElCU19USFJFQUQgICAgID0gLWxwdGhyZWFkCisKK1FNQUtFX01PQyAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfTU9DKQorUU1BS0VfVUlDICAgICAgICAgICAgID0gJChPRV9RTUFLRV9VSUMpCitRTUFLRV9VSUMzICAgICAgICAgICAgPSAkKE9FX1FNQUtFX1VJQzMpCitRTUFLRV9SQ0MgICAgICAgICAgICAgPSAkKE9FX1FNQUtFX1JDQykKK1FNQUtFX1FEQlVTQ1BQMlhNTCAgICA9ICQoT0VfUU1BS0VfUURCVVNDUFAyWE1MKQorUU1BS0VfUURCVVNYTUwyQ1BQICAgID0gJChPRV9RTUFLRV9RREJVU1hNTDJDUFApCisKK1FNQUtFX0FSICAgICAgICAgICAgICA9ICQoT0VfUU1BS0VfQVIpIGNxcworUU1BS0VfT0JKQ09QWSAgICAgICAgID0gb2JqY29weQorUU1BS0VfUkFOTElCICAgICAgICAgID0KKworUU1BS0VfVEFSICAgICAgICAgICAgID0gdGFyIC1jZgorUU1BS0VfR1pJUCAgICAgICAgICAgID0gZ3ppcCAtOWYKKworUU1BS0VfQ09QWSAgICAgICAgICAgID0gY3AgLWYKK1FNQUtFX0NPUFlfRklMRSAgICAgICA9ICQoQ09QWSkKK1FNQUtFX0NPUFlfRElSICAgICAgICA9ICQoQ09QWSkgLXIKK1FNQUtFX01PVkUgICAgICAgICAgICA9IG12IC1mCitRTUFLRV9ERUxfRklMRSAgICAgICAgPSBybSAtZgorUU1BS0VfREVMX0RJUiAgICAgICAgID0gcm1kaXIKK1FNQUtFX1NUUklQICAgICAgICAgICA9ICQoT0VfUU1BS0VfU1RSSVApCitRTUFLRV9TVFJJUEZMQUdTX0xJQiArPSAtLXN0cmlwLXVubmVlZGVkCitRTUFLRV9DSEtfRElSX0VYSVNUUyAgPSB0ZXN0IC1kCitRTUFLRV9NS0RJUiAgICAgICAgICAgPSBta2RpciAtcAorUU1BS0VfSU5TVEFMTF9GSUxFICAgID0gaW5zdGFsbCAtbSA2NDQgLXAKK1FNQUtFX0lOU1RBTExfUFJPR1JBTSA9IGluc3RhbGwgLW0gNzU1IC1wCisKK2luY2x1ZGUodW5peC5jb25mKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtNC44LjcvcXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDZlY2IKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC00LjguNy9xdGUuc2gKQEAgLTAsMCArMSw3IEBACisjIS9iaW4vc2gKKworaWYgWyAtZSAvZGV2L2lucHV0L3RvdWNoc2NyZWVuMCBdCit0aGVuCisgICAgUVdTX01PVVNFX1BST1RPPVRzbGliOi9kZXYvaW5wdXQvdG91Y2hzY3JlZW4wCisgICAgZXhwb3J0IFFXU19NT1VTRV9QUk9UTworZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzY5MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtZW1iZWRkZWQuaW5jCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiQ3Jvc3MtcGxhdGZvcm0gVUkgdG9vbGtpdCBhbmQgYXBwbGljYXRpb24gZnJhbWV3b3JrIChmcmFtZWJ1ZmZlciB2ZXJzaW9uKSIKK0RFU0NSSVBUSU9OID0gIlF0IGlzIGEgdmVyc2F0aWxlIGNyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9uIGZyYW1ld29yayAtLSB0aGlzIGlzIHRoZSBlbWJlZGRlZCAoZnJhbWVidWZmZXIpIHZlcnNpb24uIgorU0VDVElPTiA9ICJsaWJzIgorSE9NRVBBR0UgPSAiaHR0cDovL3F0LXByb2plY3Qub3JnLyIKK0RFUEVORFMgKz0gImRpcmVjdGZiIHRzbGliIgorCitRVDRFREVQRU5EUyA9ICIiCitRVF9CQVNFX0xJQiAgPz0gImxpYnF0LWVtYmVkZGVkIgorCisjIFNldCBuZWNlc3NhcnkgdmFyaWFibGVzIGluIHRoZSBwcm9maWxlCitTUkNfVVJJICs9ICJmaWxlOi8vcXRlLnNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly8wMDMzLWNvbmZpZ3VyZS1zdXBwb3J0LWMtMHgtc3RhbmRhcmQtZm9yLWRpcmVjdGZkLnBhdGNoIFwKKyIKKworUVRfRU1CRURERURfRkxBR1MgPz0gIiBcCisgICAgLWVtYmVkZGVkICRRVF9BUkNIIFwKKyAgICAtcXRsaWJpbmZpeCAke1FUX0xJQklORklYfSBcCisiCitRVF9FTUJFRERFRF9FWFRSQV9GTEFHUyA/PSAiIFwKKyAgICAtcGx1Z2luLWdmeC10cmFuc2Zvcm1lZCAtcGx1Z2luLWdmeC1xdmZiIC1wbHVnaW4tZ2Z4LXZuYyAtcGx1Z2luLWdmeC1kaXJlY3RmYiBcCisgICAgLXBsdWdpbi1tb3VzZS10c2xpYiAtcXQtbW91c2UtcGMgLXF0LW1vdXNlLXF2ZmIgLXF0LW1vdXNlLWxpbnV4aW5wdXQgXAorICAgIC1xdC1rYmQtdHR5IC1xdC1rYmQtbGludXhpbnB1dCBcCisiCitRVF9FTUJFRERFRF9LRVlQQURfRkxBR1MgPz0gIiBcCisgICAgLURRVF9LRVlQQURfTkFWSUdBVElPTiBcCisiCisKK1FUX0NPTkZJR19GTEFHUyArPSAiJHtRVF9FTUJFRERFRF9GTEFHU30gJHtRVF9FTUJFRERFRF9FWFRSQV9GTEFHU30gJHtRVF9FTUJFRERFRF9LRVlQQURfRkxBR1N9IgorCityZXF1aXJlIHF0NC5pbmMKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9mb250cworICAgIHRvdWNoICR7RH0vJHtsaWJkaXJ9L2ZvbnRzL2ZvbnRkaXIKKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0vcHJvZmlsZS5kLworICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3F0ZS5zaCAke0R9JHtzeXNjb25mZGlyfS9wcm9maWxlLmQvCit9CisKKyMgV2UgcHV0IHRoZSBxdGUgcHJvZmlsZSBpbnRvIGl0J3Mgb3duIHBhY2thZ2UgYXMgd2UgZG9uJ3Qgd2FudCB0byBpbnN0YWxsIGFsbCBxdCBzdHVmZgorIyB3aXRoIGRlcGVuZGluZyBvbiB0aGUgZ2xvYmFsIHBhY2thZ2UgcXQ0LWVtYmVkZGVkCitQQUNLQUdFUyArPSAiICR7UE59LWNvbmYiCitGSUxFU18ke1BOfS1jb25mICs9ICIgJHtzeXNjb25mZGlyfS9wcm9maWxlLmQvcXRlLnNoIgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiAke1BOfS1jb25mIgorCitPVEhFUl9QQUNLQUdFUyArPSAiXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXFwZiIKKworUlJFQ09NTUVORFNfJHtRVF9CQVNFX05BTUV9LWZvbnRzID0gIiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXR0Zi12ZXJhIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLWRlamF2dSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYSBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWZvbnRzLXFwZiIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1mb250cyIKKworQUxMT1dfRU1QVFlfJHtRVF9CQVNFX05BTUV9LWZvbnRzID0gIjEiCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtRVF9CQVNFX05BTUV9LWZvbnRzLS4qIgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtdHRmLXZlcmEgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzL1ZlcmEqLnR0ZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy10dGYtZGVqYXZ1ICAgICA9ICIke2xpYmRpcn0vZm9udHMvRGVqYVZ1Ki50dGYiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZm9udHMtcGZhICAgICAgICAgICAgPSAiJHtsaWJkaXJ9L2ZvbnRzLyoucGZhIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzLXBmYiAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy8qLnBmYiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1mb250cy1xcGYgICAgICAgICAgICA9ICIke2xpYmRpcn0vZm9udHMvKi5xcGYqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWZvbnRzICAgICAgICAgICAgICAgID0gIiR7bGliZGlyfS9mb250cy9SRUFETUUgJHtsaWJkaXJ9L2ZvbnRzL2ZvbnRkaXIiCisKK2luaGVyaXQgcXQ0ZQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LWVtYmVkZGVkXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MzVkODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1lbWJlZGRlZF80LjguNy5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcXQ0LSR7UFZ9LmluYworcmVxdWlyZSBxdDQtZW1iZWRkZWQuaW5jCisKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtbm8tbmVvbiIgLGQpfSIKKworUVRfQ09ORklHX0ZMQUdTICs9ICIgXAorIC1leGNlcHRpb25zIFwKKyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQtbmF0aXZlLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE0MWY4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZS5pbmMKQEAgLTAsMCArMSwxMTIgQEAKK1NVTU1BUlkgPSAiUXQgdmVyc2lvbiA0IHRvb2xzIGFuZCBzdXBwb3J0IGZpbGVzIGZvciB0aGUgYnVpbGQgaG9zdCIKK0RFUEVORFMgPSAiemxpYi1uYXRpdmUgZGJ1cy1uYXRpdmUiCitTRUNUSU9OID0gImxpYnMiCitIT01FUEFHRSA9ICJodHRwOi8vcXQtcHJvamVjdC5vcmcvIgorUFJPVklERVMgPSAicXQ0LXRvb2xzLW5hdGl2ZSIKKworTElDRU5TRSA9ICJMR1BMdjIuMSB8IEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRS5MR1BMO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9MSUNFTlNFLkdQTDM7bWQ1PTZlMTY5NGVlMzM4ZGI0MTA0MTc1MTc4ODQ5MThkNGQyIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0xHUExfRVhDRVBUSU9OLnR4dDttZDU9MDE0NWM0ZDFiNmY5NmE2NjFjMmMxMzlkZmIyNjhmYjYiCisKK2luaGVyaXQgbmF0aXZlCisKK1NSQ19VUkkgPSAiaHR0cDovL2Rvd25sb2FkLnF0LXByb2plY3Qub3JnL29mZmljaWFsX3JlbGVhc2VzL3F0LzQuOC8ke1BWfS9xdC1ldmVyeXdoZXJlLW9wZW5zb3VyY2Utc3JjLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXFsaWJyYXJ5aW5mby1hbGxvdy10by1zZXQtcXQuY29uZi1mcm9tLXRoZS1vdXRzaWRlLXUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1xa2JkdHR5X3F3cy1maXgtYnVpbGQtd2l0aC1vbGQta2VybmVsLWhlYWRlcnMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMy13ZWJraXQyLXNldC1PVVRQVVRfRElSLXZhbHVlLWlmLWVtcHR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMjEtY29uZmlndXJlLW1ha2UtcXQ0LW5hdGl2ZS13b3JrLXdpdGgtbG9uZy1idWlsZGluZy1wYS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9nKysuY29uZiBcCisgICAgICAgICAgIGZpbGU6Ly9saW51eC5jb25mIFwKKwkiCitTID0gIiR7V09SS0RJUn0vcXQtZXZlcnl3aGVyZS1vcGVuc291cmNlLXNyYy0ke1BWfSIKKworRVhUUkFfT0VDT05GID0gIi1wcmVmaXggJHtwcmVmaXh9IFwKKyAgICAgICAgICAgICAgICAtYmluZGlyICR7YmluZGlyfSBcCisgICAgICAgICAgICAgICAgLWxpYmRpciAke2xpYmRpcn0gXAorICAgICAgICAgICAgICAgIC1kYXRhZGlyICR7ZGF0YWRpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtc3lzY29uZmRpciAke3N5c2NvbmZkaXJ9L3F0NCBcCisgICAgICAgICAgICAgICAgLWRvY2RpciAke2RvY2Rpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtaGVhZGVyZGlyICR7aW5jbHVkZWRpcn0vcXQ0IFwKKyAgICAgICAgICAgICAgICAtcGx1Z2luZGlyICR7bGliZGlyfS9xdDQvcGx1Z2lucyBcCisgICAgICAgICAgICAgICAgLWltcG9ydGRpciAke2xpYmRpcn0vcXQ0L2ltcG9ydHMgXAorICAgICAgICAgICAgICAgIC10cmFuc2xhdGlvbmRpciAke2RhdGFkaXJ9L3F0NC90cmFuc2xhdGlvbnMgXAorICAgICAgICAgICAgICAgIC1leGFtcGxlc2RpciAke2JpbmRpcn0vcXQ0L2V4YW1wbGVzIFwKKyAgICAgICAgICAgICAgICAtZGVtb3NkaXIgJHtiaW5kaXJ9L3F0NC9kZW1vcyBcCisgICAgICAgICAgICAgICAgLUwgJHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9IFwKKyAgICAgICAgICAgICAgICAtSSAke1NUQUdJTkdfSU5DRElSX05BVElWRX0gXAorICAgICAgICAgICAgICAgIC1xdC1saWJqcGVnIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgLW5vLWxpYmpwZWcgLW5vLWxpYnBuZyAtbm8tbGlibW5nIC1uby1saWJ0aWZmIFwKKyAgICAgICAgICAgICAgICAtbm8tYWNjZXNzaWJpbGl0eSBcCisgICAgICAgICAgICAgICAgLW5vLWN1cHMgXAorICAgICAgICAgICAgICAgIC1uby1uYXMtc291bmQgXAorICAgICAgICAgICAgICAgIC1uby1uaXMgLW5vLW9wZW5zc2wgXAorICAgICAgICAgICAgICAgIC12ZXJib3NlIC1yZWxlYXNlIFwKKyAgICAgICAgICAgICAgICAtZW1iZWRkZWQgLW5vLWZyZWV0eXBlIC1uby1nbGliIC1uby1pY29udiBcCisgICAgICAgICAgICAgICAgLWV4Y2VwdGlvbnMgLXhtbHBhdHRlcm5zIFwKKyAgICAgICAgICAgICAgICAtcXQzc3VwcG9ydCBcCisgICAgICAgICAgICAgICAgLW5vLWZhc3QgLXNpbGVudCAtbm8tcnBhdGgiCisKKyMgeWFuayBkZWZhdWx0IC1lLCBvdGhlcndpc2Ugd2UgZ2V0IHRoZSBmb2xsb3dpbmcgZXJyb3I6CisjIG1vY19xYnVmZmVyLmNwcDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorRVhUUkFfT0VNQUtFID0gIiAiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkjIEF2b2lkIHByb2JsZW1zIHdpdGggUXQgNC44LjAgY29uZmlndXJlIHNldHRpbmcgUU1BS0VfTElOSyBmcm9tIExEIChzaW5jZSB3ZSB3YW50IHRoZSBsaW5rZXIgdG8gYmUgZysrKQorCXVuc2V0IExECisKKwkoZWNobyBvOyBlY2hvIHllcykgfCAuL2NvbmZpZ3VyZSAke0VYVFJBX09FQ09ORn0gfHwgZGllICJDb25maWd1cmluZyBxdCBmYWlsZWQuIEVYVFJBX09FQ09ORiB3YXMgJHtFWFRSQV9PRUNPTkZ9IgorfQorCitUT0JVSUxEID0gIlwKKyAgc3JjL3Rvb2xzL21vYyBcCisgIHNyYy9jb3JlbGliIFwKKyAgc3JjL3NxbCBcCisgIHNyYy94bWwgXAorICBzcmMvbmV0d29yayBcCisgIHNyYy90b29scy91aWMgXAorICBzcmMvdG9vbHMvcmNjIFwKKyAgc3JjL3htbHBhdHRlcm5zIFwKKyAgc3JjL2RidXMgXAorICBzcmMvZ3VpIFwKKyAgc3JjL3Rlc3RsaWIgXAorICBzcmMvcXQzc3VwcG9ydCBcCisgIHNyYy90b29scy91aWMzIFwKKyAgdG9vbHMvbGluZ3Vpc3QvbGNvbnZlcnQgXAorICB0b29scy9saW5ndWlzdC9scmVsZWFzZSBcCisgIHRvb2xzL2xpbmd1aXN0L2x1cGRhdGUgXAorICB0b29scy9xZGJ1cy9xZGJ1c2NwcDJ4bWwgXAorICB0b29scy9xZGJ1cy9xZGJ1c3htbDJjcHAgXAorICB0b29scy94bWxwYXR0ZXJucyBcCisiCisKK2RvX2NvbXBpbGUoKSB7CisJZm9yIGkgaW4gJHtUT0JVSUxEfTsgZG8KKwkJY2QgJHtTfS8kaSAmJiBvZV9ydW5tYWtlIENDPSIke0NDfSIgQ1hYPSIke0NYWH0iCisJZG9uZQorfQorCitkb19pbnN0YWxsKCkgeworCWluc3RhbGwgLWQgJHtEfSR7YmluZGlyfS8KKwlpbnN0YWxsIC1tIDA3NTUgYmluL3FtYWtlICR7RH0ke2JpbmRpcn0vcW1ha2UyCisJZm9yIGkgaW4gbW9jIHVpYyB1aWMzIHJjYyBsY29udmVydCBscmVsZWFzZSBsdXBkYXRlIHFkYnVzY3BwMnhtbCBxZGJ1c3htbDJjcHAgeG1scGF0dGVybnM7IGRvCisJCWluc3RhbGwgLW0gMDc1NSBiaW4vJHtpfSAke0R9JHtiaW5kaXJ9LyR7aX00CisJZG9uZQorICAgIAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCWNwIC1QZlIgbWtzcGVjcyAke0R9JHtkYXRhZGlyfS9xdDQvCisJbG4gLXNmIGxpbnV4LWcrKyAke0R9JHtkYXRhZGlyfS9xdDQvbWtzcGVjcy8ke0JVSUxEX09TfS1vZS1nKysKKwlpZiBbIC1mICR7RH0ke2RhdGFkaXJ9L3F0NC9ta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mIF0gOyB0aGVuCisJCSMgbWtzcGVjcyB3ZXJlIHJlZmFjdG9yZWQgZm9yIDQuOC4wCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uL2crKy11bml4LmNvbmYKKwllbHNlCisJCWNwIC1mICR7V09SS0RJUn0vZysrLmNvbmYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uL2crKy5jb25mCisJZmkKKwljcCAtZiAke1dPUktESVJ9L2xpbnV4LmNvbmYgJHtEfSR7ZGF0YWRpcn0vcXQ0L21rc3BlY3MvY29tbW9uLworCisJaW5zdGFsbCAtbSAwNjQ0IHRvb2xzL3BvcnRpbmcvc3JjL3EzcG9ydGluZy54bWwgJHtEfSR7ZGF0YWRpcn0vcXQ0LworCisJZm9yIGkgaW4gJHtUT0JVSUxEfTsgZG8KKwkJY2QgJHtTfS8kaSAmJiBvZV9ydW5tYWtlIGluc3RhbGwgSU5TVEFMTF9ST09UPSR7RH0KKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC1uYXRpdmVfNC44LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0ZDY2MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LW5hdGl2ZV80LjguNy5iYgpAQCAtMCwwICsxLDYgQEAKK3JlcXVpcmUgcXQ0LW5hdGl2ZS5pbmMKKworVE9CVUlMRCA6PSAic3JjL3Rvb2xzL2Jvb3RzdHJhcCAke1RPQlVJTER9IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZDk5MGVlNjZiZjdhYjBjNzg1NTg5Nzc2ZjM1YmE2YWQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTI4ODIyOTUwOTdlNDdmZTA4OWY4YWM3NDFhOTVmZWY0N2UwYTczYTNmM2NkZjIxYjU2OTkwNjM4ZjYyNmVhMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmExNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQteDExLWZyZWUuaW5jCkBAIC0wLDAgKzEsMzggQEAKK3JlcXVpcmUgcXQ0LmluYworCitTVU1NQVJZID0gIkNyb3NzLXBsYXRmb3JtIFVJIHRvb2xraXQgYW5kIGFwcGxpY2F0aW9uIGZyYW1ld29yayAoWDExIHZlcnNpb24pIgorREVTQ1JJUFRJT04gPSAiUXQgaXMgYSB2ZXJzYXRpbGUgY3Jvc3MtcGxhdGZvcm0gYXBwbGljYXRpb24gZnJhbWV3b3JrIC0tIHRoaXMgaXMgdGhlIFgxMSB2ZXJzaW9uLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9xdC1wcm9qZWN0Lm9yZy8iCitTRUNUSU9OID0gIngxMS9saWJzIgorREVQRU5EUyArPSAidmlydHVhbC9saWJ4MTEgZm9udGNvbmZpZyBsaWJ4ZnQgbGlieGV4dCBsaWJ4cmVuZGVyIGxpYnhyYW5kciBsaWJ4Y3Vyc29yIgorREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAndmlydHVhbC9saWJnbCcsICcnLCBkKX0iCitQUk9WSURFUyArPSAicXQ0LXgxMSIKK1FUNERFUEVORFMgPSAiIgorCitRVF9HTEZMQUdTID89ICIke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ29wZW5nbCcsICctb3BlbmdsJywgJy1uby1vcGVuZ2wnLCBkKX0gIgorUVRfR0xGTEFHU19xZW11eDg2ID0gIi1vcGVuZ2wiCitRVF9HTEZMQUdTX3FlbXVwcGMgPSAiLW9wZW5nbCIKK1FUX1gxMV9GTEFHUyA/PSAiLW5vLXhpbmVyYW1hIC1uby14a2IgLW5vLWd0a3N0eWxlIgorUVRfQ09ORklHX0ZMQUdTICs9ICIke1FUX1gxMV9GTEFHU30iCitRVF9CQVNFX0xJQiAgPz0gImxpYnF0IgorCisjIHJlcXVpcmVkIGJ5IGtkZWxpYnM0CitRVF9LREVfRkxBR1MgPz0gIi1hY2Nlc3NpYmlsaXR5IC1zbSIKK1FUX0RJU1RST19GTEFHUyA/PSAiJHtRVF9LREVfRkxBR1N9IgorCitpbmhlcml0IHF0NHgxMQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKyAgIyBmaXggcGtnY29uZmlnLCBsaWJ0b29sIGFuZCBwcmwgZmlsZXMKKyAgc2VkIC1pIC1lICdzI0kvdXNyL2luY2x1ZGUjSWluY2x1ZGVkaXJ9I2cnIFwgCisgICAgLWUgJ3MjSWluI0kke2luI2cnIFwKKyAgICAke0R9JHtsaWJkaXJ9LyoubGEgJHtEfSR7bGliZGlyfS8qLnBybCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisKKyAgIyBRVCBhYnVzZXMgJGluY2x1ZGVkaXIgdG8gcG9pbnQgdG8gaXRzIGhlYWRlcnMsIHdoaWNoIGJyZWFrcyBwa2djb25maWcgc3lzcm9vdCwgc28KKyAgIyBtYW51YWxseSBmaXggaXQgdXAgaGVyZToKKyAgZm9yIHBjIGluICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMgOyBkbworICAgIHNlZCAtaSAtZSAiczpwcmVmaXh9aW5jbHVkZS8ke1FUX0JBU0VfTkFNRX0vJChiYXNlbmFtZSAkcGMgLnBjKTpwcmVmaXh9L2luY2x1ZGU6IiBcCisgICAgICAtZSAicyxDZmxhZ3M6ICxDZmxhZ3M6IC1JUHtpbmNsdWRlZGlyfS8ke1FUX0JBU0VfTkFNRX0vJChiYXNlbmFtZSAkcGMgLnBjKSAsIiBcCisgICAgICAtZSAnczpJUHs6SSR7OmcnICRwYworICBkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYiBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LXgxMS1mcmVlXzQuOC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYjVlNjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NC14MTEtZnJlZV80LjguNy5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcXQ0LXgxMS1mcmVlLmluYworcmVxdWlyZSBxdDQtJHtQVn0uaW5jCisKK1FUX0NPTkZJR19GTEFHU19hcHBlbmRfYXJtID0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCJUVU5FX0ZFQVRVUkVTIiwgIm5lb24iLCAiIiwgIiAtbm8tbmVvbiIgLGQpfSIKKworUVRfQ09ORklHX0ZMQUdTICs9ICIgXAorIC1uby1lbWJlZGRlZCBcCisgLXhyYW5kciBcCisgLXgxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0LmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDU4ZTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXF0L3F0NC9xdDQuaW5jCkBAIC0wLDAgKzEsMzkxIEBACitpbmhlcml0IHFtYWtlX2Jhc2UKKworREVQRU5EUyArPSAicXQ0LXRvb2xzLW5hdGl2ZSBmcmVldHlwZSBqcGVnIGxpYnBuZyB6bGliIGRidXMgb3BlbnNzbCBnbGliLTIuMCBzcWxpdGUzIHRpZmYgaWN1IgorREVQRU5EUyArPSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJ3B1bHNlYXVkaW8nLCAnJywgZCl9IgorCityZXF1aXJlIHF0NF9hcmNoLmluYworCitRVF9ESVNUUk9fRkxBR1MgPz0gIi1uby1hY2Nlc3NpYmlsaXR5IC1uby1zbSIKK1FUX0RJU1RST19GTEFHU19saW51eHN0ZGJhc2UgPSAiLXNtIgorCitRVF9TUUxfRFJJVkVSX0ZMQUdTID89ICItbm8tc3FsLWliYXNlIC1uby1zcWwtbXlzcWwgLW5vLXNxbC1wc3FsIC1uby1zcWwtb2RiYyAtbm8tc3FsLXNxbGl0ZTIgLXBsdWdpbi1zcWwtc3FsaXRlIC1zeXN0ZW0tc3FsaXRlIgorCitRVF9HTEZMQUdTID89ICIiCisKKyAgCitRVF9RVDNTVVBQT1JUID89ICItcXQzc3VwcG9ydCIKK1FUX1hNTCA/PSAiLXhtbHBhdHRlcm5zIgorUVRfV0VCS0lUID89ICItd2Via2l0IgorUVRfUEhPTk9OID89ICItbm8tcGhvbm9uIgorUVRfREJVUyA/PSAiLXFkYnVzIgorUVRfTVVMVElNRURJQSA/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwdWxzZWF1ZGlvJywgJy1wdWxzZWF1ZGlvJywgJy1uby1wdWxzZWF1ZGlvJywgZCl9IgorIAorUVRfQ09ORklHX0ZMQUdTICs9ICItcmVsZWFzZSAtbm8tY3VwcyAtcmVkdWNlLXJlbG9jYXRpb25zIFwKKyAgICAgICAgICAgICAgICAgICAgLXNoYXJlZCAtbm8tbmFzLXNvdW5kIC1uby1uaXMgXAorICAgICAgICAgICAgICAgICAgICAtc3lzdGVtLWxpYmpwZWcgLXN5c3RlbS1saWJwbmcgLXN5c3RlbS1saWJ0aWZmIC1zeXN0ZW0temxpYiBcCisgICAgICAgICAgICAgICAgICAgIC1uby1wY2ggLXN0bCAtZ2xpYiAtaWN1IFwKKyAgICAgICAgICAgICAgICAgICAgLW5vLXJwYXRoIC1zaWxlbnQgXAorCQkgICAgLUQgVVNFX1FUTVVMVElNRURJQT0xIFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9EQlVTfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfUVQzU1VQUE9SVH0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1dFQktJVH0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1BIT05PTn0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX1hNTH0gXAorICAgICAgICAgICAgICAgICAgICAke1FUX01VTFRJTUVESUF9IFwKKyAgICAgICAgICAgICAgICAgICAgJHtRVF9TUUxfRFJJVkVSX0ZMQUdTfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfRElTVFJPX0ZMQUdTfSBcCisgICAgICAgICAgICAgICAgICAgICR7UVRfR0xGTEFHU30iCisKK0VYVFJBX09FTUFLRSA9ICItZSIKKworRVhUUkFfRU5WID0gJ1FNQUtFPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vcW1ha2UyIC1hZnRlciBcCisgICAgICAgICAgICAgSU5DUEFUSCs9JHtTVEFHSU5HX0lOQ0RJUn0vZnJlZXR5cGUyIExJQlMrPS1MJHtTVEFHSU5HX0xJQkRJUn0iIFwKKyAgICAgICAgICAgICBRTUFLRVNQRUM9IiR7UU1BS0VTUEVDfSIgTElOSz0iJHtDWFh9IC1XbCwtcnBhdGgtbGluaywke1NUQUdJTkdfTElCRElSfSIgXAorICAgICAgICAgICAgIEFSPSIke1RBUkdFVF9QUkVGSVh9YXIgY3FzIiBcCisgICAgICAgICAgICAgTU9DPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vbW9jNCIgVUlDPSIke1NUQUdJTkdfQklORElSX05BVElWRX0vdWljNCIgTUFLRT0ibWFrZSAtZSInCisKK2V4cG9ydCBRVF9DT05GX1BBVEg9IiR7V09SS0RJUn0vcXQuY29uZiIKKworIyBMaWJyYXJ5IHBhY2thZ2VzCitRVF9MSUJfTkFNRVMgPSAiUXQzU3VwcG9ydCBRdEFzc2lzdGFudENsaWVudCBRdENMdWNlbmUgUXRDb3JlIFF0REJ1cyBRdERlc2lnbmVyIFF0RGVzaWduZXJDb21wb25lbnRzIFF0R3VpIFF0SGVscCBRdE5ldHdvcmsgUXRPcGVuR0wgUXRTY3JpcHQgUXRTY3JpcHRUb29scyBRdFNxbCBRdFN2ZyBRdFRlc3QgUXRVaVRvb2xzIFF0V2ViS2l0IFF0WG1sIFF0WG1sUGF0dGVybnMgcGhvbm9uIFF0TXVsdGltZWRpYSBRdE9wZW5WRyBRdE1lZGlhU2VydmljZXMgUXREZWNsYXJhdGl2ZSIKKworUVRfRVhUUkFfTElCUyA9ICJwdnJRV1NXU0VHTCIKKworcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBsaWJfcGFja2FnZXMgPSBbXQorICAgIGRldl9wYWNrYWdlcyA9IFtdCisgICAgZGJnX3BhY2thZ2VzID0gW10KKyAgICBzdGF0aWNkZXZfcGFja2FnZXMgPSBbXQorICAgIGZvciBuYW1lIGluIGQuZ2V0VmFyKCJRVF9MSUJfTkFNRVMiLCBUcnVlKS5zcGxpdCgpOgorICAgICAgICBwa2cgPSBkLmdldFZhcigiUVRfQkFTRV9MSUIiLCBUcnVlKSArIG5hbWUubG93ZXIoKS5yZXBsYWNlKCJxdCIsICIiKS5yZXBsYWNlKCJfIiwgIi0iKSArICI0IgorICAgICAgICAjIE5PVEU6IHRoZSBoZWFkZXJzIGZvciBRdEFzc2lzdGFudENsaWVudCBhcmUgZGlmZmVyZW50CisgICAgICAgIGluY25hbWUgPSBuYW1lLnJlcGxhY2UoIlF0QXNzaXN0YW50Q2xpZW50IiwgIlF0QXNzaXN0YW50IikKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LnNvLioiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1kZXYiICUgcGtnLCAiIiIke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5wcmwKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWIlKG5hbWUpcyR7UVRfTElCSU5GSVh9LmxhCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMke1FUX0xJQklORklYfS5zbworICAgICAgICAgICAgICAgICAgJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfS8lKGluY25hbWUpcworICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L3BrZ2NvbmZpZy8lKG5hbWUpcyR7UVRfTElCSU5GSVh9LnBjIiIiICUgbG9jYWxzKCkpCisgICAgICAgIGQuc2V0VmFyKCJGSUxFU18lcy1zdGF0aWNkZXYiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uYSIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwa2csICIke2xpYmRpcn0vLmRlYnVnL2xpYiUobmFtZSlzJHtRVF9MSUJJTkZJWH0uc28qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiUlJFQ09NTUVORFNfJXMtZGJnIiAlIHBrZywgIiR7UE59LWRiZyIpCisgICAgICAgIGxpYl9wYWNrYWdlcy5hcHBlbmQocGtnKQorICAgICAgICBkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1kZXYiICUgcGtnKQorICAgICAgICBkYmdfcGFja2FnZXMuYXBwZW5kKCIlcy1kYmciICUgcGtnKQorICAgICAgICBzdGF0aWNkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1zdGF0aWNkZXYiICUgcGtnKQorICAgIGZvciBuYW1lIGluIGQuZ2V0VmFyKCJPVEhFUl9QQUNLQUdFUyIsIFRydWUpLnNwbGl0KCk6CisgICAgICAgIGRiZ19wYWNrYWdlcy5hcHBlbmQoIiVzLWRiZyIgJSBuYW1lKQorICAgICAgICBzdGF0aWNkZXZfcGFja2FnZXMuYXBwZW5kKCIlcy1zdGF0aWNkZXYiICUgbmFtZSkKKworICAgIGZvciBuYW1lIGluIGQuZ2V0VmFyKCJRVF9FWFRSQV9MSUJTIiwgVHJ1ZSkuc3BsaXQoKToKKyAgICAgICAgcGtnID0gZC5nZXRWYXIoIlFUX0JBU0VfTElCIiwgVHJ1ZSkgKyBuYW1lLmxvd2VyKCkucmVwbGFjZSgicXQiLCAiIikucmVwbGFjZSgiXyIsICItIikgKyAiNCIKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzIiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcy5zby4qIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtc3RhdGljZGV2IiAlIHBrZywgIiR7bGliZGlyfS9saWIlKG5hbWUpcy5hIiAlIGxvY2FscygpKQorICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGV2IiAlIHBrZywgIiIiJHtsaWJkaXJ9L2xpYiUobmFtZSlzLnBybAorICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYiUobmFtZSlzLmxhCisgICAgICAgICAgICAgICAgICAke2xpYmRpcn0vbGliJShuYW1lKXMuc28KKyAgICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0vJShpbmNuYW1lKXMKKyAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9wa2djb25maWcvJShuYW1lKXMucGMiIiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIkZJTEVTXyVzLWRiZyIgJSBwa2csICIke2xpYmRpcn0vLmRlYnVnL2xpYiUobmFtZSlzLnNvKiIgJSBsb2NhbHMoKSkKKyAgICAgICAgZC5zZXRWYXIoIlJSRUNPTU1FTkRTXyVzLWRiZyIgJSBwa2csICIke1BOfS1kYmciKQorICAgICAgICBsaWJfcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtZGV2IiAlIHBrZykKKyAgICAgICAgZGJnX3BhY2thZ2VzLmFwcGVuZCgiJXMtZGJnIiAlIHBrZykKKyAgICAgICAgc3RhdGljZGV2X3BhY2thZ2VzLmFwcGVuZCgiJXMtc3RhdGljZGV2IiAlIHBrZykKKworICAgIGQuc2V0VmFyKCJMSUJfUEFDS0FHRVMiLCAiICIuam9pbihsaWJfcGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJERVZfUEFDS0FHRVMiLCAiICIuam9pbihkZXZfcGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJEQkdfUEFDS0FHRVMiLCAiICIuam9pbihkYmdfcGFja2FnZXMpKQorICAgIGQuc2V0VmFyKCJTVEFUSUNERVZfUEFDS0FHRVMiLCAiICIuam9pbihzdGF0aWNkZXZfcGFja2FnZXMpKQorfQorCitPVEhFUl9QQUNLQUdFUyA9ICJcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXRvb2xzIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tY29tbW9uIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGJ1cyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlbW9zIFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tZGVzaWduZXIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWxpbmd1aXN0IFwKKyAgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tbWFrZXFwZiBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LW1rc3BlY3MgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1waXhlbHRvb2wgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXIgXAorICAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS14bWxwYXR0ZXJucyBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXF0M3RvNCBcCisgICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXFtbC1wbHVnaW5zIgorCisjV2UgcHJlcGVuZCBzbyAke1FUX0JBU0VfTkFNRX0tZGVtb3MtZG9jIGNvbWVzIGJlZm9yZSAke1BOfS1kb2Msc28gdGhlIHBhY2thZ2luZyBvZiBGSUxFU18gZ2V0IGRvbmUgYmVmb3JlLgorUEFDS0FHRVMgPSsgIiR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCitQQUNLQUdFUyArPSAiIFwKKyAgICAgICAgICAgICAke0xJQl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7REVWX1BBQ0tBR0VTfSBcCisgICAgICAgICAgICAgJHtEQkdfUEFDS0FHRVN9IFwKKyAgICAgICAgICAgICAke1NUQVRJQ0RFVl9QQUNLQUdFU30gXAorICAgICAgICAgICAgICR7T1RIRVJfUEFDS0FHRVN9IgorCitQQUNLQUdFU19EWU5BTUlDICs9ICJeJHtRVF9CQVNFX05BTUV9LXBsdWdpbi0uKiBeJHtRVF9CQVNFX05BTUV9LXRyYW5zbGF0aW9uLS4qIF4ke1FUX0JBU0VfTkFNRX0tcGhyYXNlYm9vay0uKiIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKK0ZJTEVTXyR7UE59ICAgICA9ICIiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfS8ke1FUX0RJUl9OQU1FfS9RdC8qIgorRklMRVNfJHtQTn0tZGJnID0gIi91c3Ivc3JjL2RlYnVnLyIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MgPSAiJHtkb2NkaXJ9LyR7UVRfRElSX05BTUV9L3FjaC9xdC5xY2giCitSUkVDT01NRU5EU18ke1BOfSA9ICIke0xJQl9QQUNLQUdFU30gJHtPVEhFUl9QQUNLQUdFU30iCitSUkVDT01NRU5EU18ke1BOfS1kZXYgPSAiJHtERVZfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn0tZGJnID0gIiR7REJHX1BBQ0tBR0VTfSIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9MSUJ9Y29yZTRfYXBwZW5kX2xpYmMtZ2xpYmMgPSAiIGdsaWJjLWdjb252LXV0Zi0xNiIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcyArPSAiIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50IFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kb2MiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZXhhbXBsZXMgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcGx1Z2luLXNxbGRyaXZlci1zcWxpdGUgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LXBsdWdpbi1pbWFnZWZvcm1hdC1qcGVnIFwKKyAgICAgICAgICAgICR7UVRfQkFTRV9OQU1FfS1xbWwtcGx1Z2lucyIKK1JSRUNPTU1FTkRTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXIgKz0gIiBcCisgICAgICAgICAgICAke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMiCitSUkVDT01NRU5EU18ke1FUX0JBU0VfTkFNRX0tZG9jICs9ICIgXAorICAgICAgICAgICAgJHtRVF9CQVNFX05BTUV9LWRlbW9zLWRvYyIKKworUlBST1ZJREVTXyR7UVRfQkFTRV9OQU1FfS10b29scyArPSAicW1ha2UyIgorUlJFUExBQ0VTXyR7UVRfQkFTRV9OQU1FfS10b29scyArPSAicW1ha2UyIgorCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMgICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0dHJhY2VyZXBsYXkgJHtiaW5kaXJ9L3Fkb2MqICR7YmluZGlyfS9xbWFrZSAke2JpbmRpcn0vbW9jICR7YmluZGlyfS91aWMqICR7YmluZGlyfS9yY2MiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tdG9vbHMtZGJnICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xdHRyYWNlcmVwbGF5ICR7YmluZGlyfS8uZGVidWcvcWRvYyogJHtiaW5kaXJ9Ly5kZWJ1Zy9xbWFrZSAke2JpbmRpcn0vLmRlYnVnL3VpYyogJHtiaW5kaXJ9Ly5kZWJ1Zy9tb2MgJHtiaW5kaXJ9Ly5kZWJ1Zy9yY2MiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tYXNzaXN0YW50ICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Lyphc3Npc3RhbnQqICR7YmluZGlyfS9xY29sbGVjdGlvbmdlbmVyYXRvciAke2JpbmRpcn0vcWhlbHBjb252ZXJ0ZXIgJHtiaW5kaXJ9L3FoZWxwZ2VuZXJhdG9yIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWFzc2lzdGFudC1kYmcgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvKmFzc2lzdGFudCogJHtiaW5kaXJ9Ly5kZWJ1Zy9xY29sbGVjdGlvbmdlbmVyYXRvciAke2JpbmRpcn0vLmRlYnVnL3FoZWxwY29udmVydGVyICR7YmluZGlyfS8uZGVidWcvcWhlbHBnZW5lcmF0b3IiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tY29tbW9uICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3F0Y29uZmlnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWNvbW1vbi1kYmcgICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcXRjb25maWciCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGJ1cyAgICAgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3FkYnVzICR7YmluZGlyfS9xZGJ1c3htbDJjcHAgJHtiaW5kaXJ9L3FkYnVzY3BwMnhtbCAke2JpbmRpcn0vcWRidXN2aWV3ZXIiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tZGJ1cy1kYmcgICAgICAgICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy9xZGJ1cyAke2JpbmRpcn0vLmRlYnVnL3FkYnVzeG1sMmNwcCAke2JpbmRpcn0vLmRlYnVnL3FkYnVzY3BwMnhtbCAke2JpbmRpcn0vLmRlYnVnL3FkYnVzdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlbW9zICAgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9xdGRlbW8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlbW9zLXN0YXRpY2RldiAgICAgID0gIiR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy9zaGFyZWQvbGliZGVtb19zaGFyZWQuYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1kZW1vcy1kYmcgICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0ZGVtbyogJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zLy5kZWJ1Zy8qICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8uZGVidWcgICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9kZW1vcy8qLyovLmRlYnVnICAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MvKi8qLyovLmRlYnVnIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyICAgICAgICAgICAgID0gIiR7YmluZGlyfS8qZGVzaWduZXIqIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWRlc2lnbmVyLWRiZyAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvKmRlc2lnbmVyKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyAgICAgICAgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcy1zdGF0aWNkZXYgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvdG9vbHMvcGx1Z2FuZHBhaW50L3BsdWdpbnMvbGlicG5wX2Jhc2ljdG9vbHMuYSIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcy1kYmcgICAgICAgICA9ICIke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvKi8qLyovLmRlYnVnICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy8qLyovKi8qLy5kZWJ1ZyAke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMvZGVjbGFyYXRpdmUvKi8qLyovKi8qLy5kZWJ1Zy8qICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcy9kZWNsYXJhdGl2ZS8qLyovKi8qLy5kZWJ1Zy8qIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWxpbmd1aXN0ICAgICAgICAgICAgID0gIiR7YmluZGlyfS8qbGluZ3Vpc3QqICR7YmluZGlyfS9scmVsZWFzZSAke2JpbmRpcn0vbHVwZGF0ZSAke2JpbmRpcn0vbGNvbnZlcnQgJHtiaW5kaXJ9L3FtMnRzIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LWxpbmd1aXN0LWRiZyAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvKmxpbmd1aXN0KiAke2JpbmRpcn0vLmRlYnVnL2xyZWxlYXNlICR7YmluZGlyfS8uZGVidWcvbHVwZGF0ZSAke2JpbmRpcn0vLmRlYnVnL2xjb252ZXJ0ICR7YmluZGlyfS8uZGVidWcvcW0ydHMiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcGl4ZWx0b29sICAgICAgICAgICAgPSAiJHtiaW5kaXJ9L3BpeGVsdG9vbCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1waXhlbHRvb2wtZGJnICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3BpeGVsdG9vbCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xdDN0bzQgICAgICAgICAgICAgICA9ICIke2JpbmRpcn0vcXQzdG80ICR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vcTNwb3J0aW5nLnhtbCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xdDN0bzQtZGJnICAgICAgICAgICA9ICIke2JpbmRpcn0vLmRlYnVnL3F0M3RvNCIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1xbWx2aWV3ZXIgICAgICAgICAgICA9ICIke2JpbmRpcn0vcW1sdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXFtbHZpZXdlci1kYmcgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvcW1sdmlld2VyIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYgICAgICAgICAgICAgID0gIiR7YmluZGlyfS9tYWtlcXBmIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LW1ha2VxcGYtZGJnICAgICAgICAgID0gIiR7YmluZGlyfS8uZGVidWcvbWFrZXFwZiIKK0ZJTEVTXyR7UVRfQkFTRV9OQU1FfS1ta3NwZWNzICAgICAgICAgICAgICA9ICIke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvKiAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L2Vudmlyb25tZW50LXNldHVwIgorRklMRVNfJHtRVF9CQVNFX05BTUV9LXhtbHBhdHRlcm5zICAgICAgICAgID0gIiR7YmluZGlyfS94bWxwYXR0ZXJucyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0teG1scGF0dGVybnMtZGJnICAgICAgPSAiJHtiaW5kaXJ9Ly5kZWJ1Zy94bWxwYXR0ZXJucyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMgICAgICAgICAgPSAiJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMvKiAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy9xbWx0b29saW5nLyoiCitGSUxFU18ke1FUX0JBU0VfTkFNRX0tcW1sLXBsdWdpbnMtZGJnICAgICAgPSAiJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMvKi8qLyovLmRlYnVnLyogJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L2ltcG9ydHMvKi8uZGVidWcgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMvcW1sdG9vbGluZy8uZGVidWciCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfSR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcyAgICAgICs9ICJsaWJkaXIiCitJTlNBTkVfU0tJUF8ke01MUFJFRklYfSR7UVRfQkFTRV9OQU1FfS1leGFtcGxlcy1kYmcgICs9ICJsaWJkaXIiCisKKyMgTGljZW5zZSBvcHRpb25zLCB0byBiZSBzZXQgYnkgdGhlIHJlY2lwZSBpZiBkaWZmZXJlbnQgdmFsdWVzIGFyZSBuZWVkZWQKK1FUX0xJQ0VOU0VfRklMRSA/PSAiIgorUVRfTElDRU5TRV9GTEFHUyA/PSAiLW9wZW5zb3VyY2UiCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwl1bnNldCBRTUFLRVNQRUMKKwl1bnNldCBRVERJUgorCisJc2V0X2FyY2gKKwlzZXRfZW5kaWFuCisKKwlpZiBbICEgLWUgYmluL3FtYWtlIF07IHRoZW4KKwkJbG4gLXNmICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9xbWFrZTIgYmluL3FtYWtlCisJZmkKKworCWlmIFsgISAtZSBta3NwZWNzLyR7VEFSR0VUX09TfS1vZS1nKysgXTsgdGhlbgorCQlsbiAtc2YgbGludXgtZysrIG1rc3BlY3MvJHtUQVJHRVRfT1N9LW9lLWcrKworCWZpCisKKwlpZiBbIC1mIG1rc3BlY3MvY29tbW9uL2crKy11bml4LmNvbmYgXSA7IHRoZW4KKwkJIyBta3NwZWNzIHdlcmUgcmVmYWN0b3JlZCBmb3IgNC44LjAKKwkJY3AgLWYgJHtXT1JLRElSfS9nKysuY29uZiBta3NwZWNzL2NvbW1vbi9nKystdW5peC5jb25mCisJZWxzZQorCQljcCAtZiAke1dPUktESVJ9L2crKy5jb25mIG1rc3BlY3MvY29tbW9uL2crKy5jb25mCisJZmkKKwljcCAtZiAke1dPUktESVJ9L2xpbnV4LmNvbmYgbWtzcGVjcy9jb21tb24vCisKKwllY2hvICJbUGF0aHNdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIlByZWZpeD0ke3ByZWZpeH0iICAgICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiRG9jdW1lbnRhdGlvbj0ke2RvY2Rpcn0vJHtRVF9ESVJfTkFNRX0iID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJIZWFkZXJzPSR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0iICAgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkxpYnJhcmllcz0ke2xpYmRpcn0iICAgICAgICAgICAgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiQmluYXJpZXM9JHtiaW5kaXJ9IiAgICAgICAgICAgICAgICAgICAgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJQbHVnaW5zPSR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiSW1wb3J0cz0ke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cyIgPj4gJFFUX0NPTkZfUEFUSAorCWVjaG8gIkRhdGE9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfSIgICAgICAgICA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiVHJhbnNsYXRpb25zPSR7ZGF0YWRpcn0vJHtRVF9ESVJfTkFNRX0vdHJhbnNsYXRpb25zIiA+PiAkUVRfQ09ORl9QQVRICisJZWNobyAiU2V0dGluZ3M9JHtzeXNjb25mZGlyfS8ke1FUX0RJUl9OQU1FfSIgID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJFeGFtcGxlcz0ke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZXhhbXBsZXMiID4+ICRRVF9DT05GX1BBVEgKKwllY2hvICJEZW1vcz0ke2JpbmRpcn0vJHtRVF9ESVJfTkFNRX0vZGVtb3MiICAgPj4gJFFUX0NPTkZfUEFUSAorCisJJHtFWFRSQV9RTUFLRV9NVU5HRX18fCB0cnVlCisKKwllY2hvIHllcyB8IFFUX0xJQ0VOU0VfRklMRT0iJHtRVF9MSUNFTlNFX0ZJTEV9IiAuL2NvbmZpZ3VyZSAtdiBcCisJCQktcHJlZml4ICR7cHJlZml4fSBcCisJCQktYmluZGlyICR7YmluZGlyfSBcCisJCQktbGliZGlyICR7bGliZGlyfSBcCisJCQktZGF0YWRpciAke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1zeXNjb25mZGlyICR7c3lzY29uZmRpcn0vJHtRVF9ESVJfTkFNRX0gXAorCQkJLWRvY2RpciAke2RvY2Rpcn0vJHtRVF9ESVJfTkFNRX0gXAorCQkJLWhlYWRlcmRpciAke2luY2x1ZGVkaXJ9LyR7UVRfRElSX05BTUV9IFwKKwkJCS1wbHVnaW5kaXIgJHtsaWJkaXJ9LyR7UVRfRElSX05BTUV9L3BsdWdpbnMgXAorCQkJLWltcG9ydGRpciAke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vaW1wb3J0cyBcCisJCQktdHJhbnNsYXRpb25kaXIgJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS90cmFuc2xhdGlvbnMgXAorCQkJLWV4YW1wbGVzZGlyICR7YmluZGlyfS8ke1FUX0RJUl9OQU1FfS9leGFtcGxlcyBcCisJCQktZGVtb3NkaXIgJHtiaW5kaXJ9LyR7UVRfRElSX05BTUV9L2RlbW9zIFwKKwkJCS1wbGF0Zm9ybSAke1RBUkdFVF9PU30tb2UtZysrIFwKKwkJCS14cGxhdGZvcm0gJHtUQVJHRVRfT1N9LW9lLWcrKyBcCisJCQkke1FUX0VORElBTn0gXAorCQkJLWNyb3NzYXJjaCAke1FUX0FSQ0h9IFwKKwkJCSR7UVRfTElDRU5TRV9GTEFHU30gXAorCQkJJHtRVF9DT05GSUdfRkxBR1N9IC1uby1mYXN0IFwKKwkJCS1MJHtTVEFHSU5HX0xJQkRJUn0gLUkke1NUQUdJTkdfSU5DRElSfSBcCisJCQktSSR7U1RBR0lOR19JTkNESVJ9L2ZyZWV0eXBlMgorfQorCitkb19jb21waWxlKCkgeworICAgICMgRml4dXAgbWlzc2luZyB3c2VnbCBoZWFkZXIgaW4gc29tZSBTR1ggU0RLcworICAgIGlmICEgWyAtZSAke1NUQUdJTkdfSU5DRElSfS93c2VnbC5oIF0gOyB0aGVuCisgICAgICAgIGNwIHNyYy8zcmRwYXJ0eS9wb3dlcnZyL3dzZWdsLmggc3JjL3BsdWdpbnMvZ2Z4ZHJpdmVycy9wb3dlcnZyL1FXU1dTRUdMLworICAgIGZpCisKKyAgICB1bnNldCBDRkxBR1MgQ1hYRkxBR1MKKworICAgIG9lX3J1bm1ha2UgJHtFWFRSQV9FTlZ9CisKKyAgICAjIEJ1aWxkIHRhcmdldCBxbWFrZQorICAgIGV4cG9ydCBRTUFLRVNQRUM9IiR7U30vbWtzcGVjcy8ke1RBUkdFVF9PU30tb2UtZysrIgorICAgIGNkICR7U30vcW1ha2UKKyAgICAke09FX1FNQUtFX1FNQUtFfQorICAgIG9lX3J1bm1ha2UgQ0M9IiR7Q0N9IiBDWFg9IiR7Q1hYfSIKKyAgICBjZCAke1N9Cit9CisKK3B5dGhvbiBwb3B1bGF0ZV9wYWNrYWdlc19wcmVwZW5kKCkgeworICAgIHRyYW5zbGF0aW9uX2RpciA9IGQuZXhwYW5kKCcke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L3RyYW5zbGF0aW9ucy8nKQorICAgIHRyYW5zbGF0aW9uX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXRyYW5zbGF0aW9uLSVzJykKKyAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCB0cmFuc2xhdGlvbl9kaXIsICdeKGFzc2lzdGFudHxkZXNpZ25lcnxsaW5ndWlzdHxxdHxxdGNvbmZpZ3xxdmZifHF0c2NyaXB0KV8oLiopXC5xbSQnLCB0cmFuc2xhdGlvbl9uYW1lLCAnJHtQTn0gdHJhbnNsYXRpb24gZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJyApCisgCisgICAgcGhyYXNlYm9va19kaXIgPSBkLmV4cGFuZCgnJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9waHJhc2Vib29rcy8nKQorICAgIHBocmFzZWJvb2tfbmFtZSA9IGQuZXhwYW5kKCcke1FUX0JBU0VfTkFNRX0tcGhyYXNlYm9vay0lcycpCisKKyAgICBpZiBvcy5wYXRoLmV4aXN0cygiJXMlcyIgJSAoZC5leHBhbmQoJyR7RH0nKSwgcGhyYXNlYm9va19kaXIpKToKKyAgICAgICAgZG9fc3BsaXRfcGFja2FnZXMoZCwgcGhyYXNlYm9va19kaXIsICdeKC4qKVwucXBoJCcsIHBocmFzZWJvb2tfbmFtZSwgJyR7UE59IHBocmFzZWJvb2sgZm9yICVzJywgZXh0cmFfZGVwZW5kcz0nJyApCisgICAgZWxzZToKKyAgICAgICAgYmIubm90ZSgiVGhlIHBhdGggZG9lcyBub3QgZXhpc3Q6IiwgZC5leHBhbmQoJyR7RH0nKSwgcGhyYXNlYm9va19kaXIpCisgCisgICAgIyBQYWNrYWdlIGFsbCB0aGUgcGx1Z2lucyBhbmQgdGhlaXIgLWRiZyB2ZXJzaW9uIGFuZCBjcmVhdGUgYSBtZXRhIHBhY2thZ2UKKyAgICBkZWYgcXRvcGlhX3NwbGl0KHBhdGgsIG5hbWUsIGdsb2IpOgorICAgICAgICAiIiIKKyAgICAgICAgU3BsaXQgdGhlIHBhY2thZ2UgaW50byBhIG5vcm1hbCBhbmQgLWRiZyBwYWNrYWdlIGFuZCB0aGVuIGFkZCB0aGUKKyAgICAgICAgbmV3IHBhY2thZ2VzIHRvIHRoZSBtZXRhIHBhY2thZ2UuCisgICAgICAgICIiIgorICAgICAgICBwbHVnaW5fZGlyID0gZC5leHBhbmQoJyR7bGliZGlyfS8ke1FUX0RJUl9OQU1FfS9wbHVnaW5zLyVzLycgJSBwYXRoKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoIiVzJXMiICUgKGQuZXhwYW5kKCcke0R9JyksIHBsdWdpbl9kaXIpKToKKyAgICAgICAgICAgIGJiLm5vdGUoIlRoZSBwYXRoIGRvZXMgbm90IGV4aXN0OiIsIGQuZXhwYW5kKCcke0R9JyksIHBsdWdpbl9kaXIpCisgICAgICAgICAgICByZXR1cm4KKyAKKyAgICAgICAgcGx1Z2luX25hbWUgPSBkLmV4cGFuZCgnJHtRVF9CQVNFX05BTUV9LXBsdWdpbi0lcy0lJXMnICUgbmFtZSkKKyAgICAgICAgZGV2X3BhY2thZ2VzID0gW10KKyAgICAgICAgZGV2X2hvb2sgPSBsYW1iZGEgZmlsZSxwa2csYixjLGQ6ZGV2X3BhY2thZ2VzLmFwcGVuZCgoZmlsZSxwa2cpKQorICAgICAgICBkb19zcGxpdF9wYWNrYWdlcyhkLCBwbHVnaW5fZGlyLCBnbG9iLCBwbHVnaW5fbmFtZSwgJyR7UE59ICVzIGZvciAlJXMnICUgbmFtZSwgZXh0cmFfZGVwZW5kcz0nJywgaG9vaz1kZXZfaG9vaykKKyAgICAgICAgIyBDcmVhdGUgYSAtZGJnIHBhY2thZ2UgYXMgd2VsbAorICAgICAgICBwbHVnaW5fZGlyX2RiZyA9IGQuZXhwYW5kKCcke2xpYmRpcn0vJHtRVF9ESVJfTkFNRX0vcGx1Z2lucy8lcy8uZGVidWcnICUgcGF0aCkKKyAgICAgICAgcGFja2FnZXMgPSBkLmdldFZhcignUEFDS0FHRVMnLCBGYWxzZSkKKyAgICAgICAgZm9yIChmaWxlLHBhY2thZ2UpIGluIGRldl9wYWNrYWdlczoKKyAgICAgICAgICAgIHBhY2thZ2VzID0gIiVzICVzLWRiZyIgJSAocGFja2FnZXMsIHBhY2thZ2UpCisgICAgICAgICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4ocGx1Z2luX2Rpcl9kYmcsIG9zLnBhdGguYmFzZW5hbWUoZmlsZSkpCisgICAgICAgICAgICBkLnNldFZhcigiRklMRVNfJXMtZGJnIiAlIHBhY2thZ2UsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgIGQuc2V0VmFyKCJERVNDUklQVElPTl8lcy1kYmciICUgcGFja2FnZSwgIiR7UE59ICVzIGZvciAlcyIgJSAobmFtZSwgcGFja2FnZSkpCisKKyAgICAgICAgZC5zZXRWYXIoJ1BBQ0tBR0VTJywgcGFja2FnZXMpCisKKyAgICBxdG9waWFfc3BsaXQoJ2FjY2Vzc2libGUnLCAgICAnYWNjZXNzaWJsZScsICAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdjb2RlY3MnLCAgICAgICAgJ2NvZGVjJywgICAgICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZGVjb3JhdGlvbnMnLCAgICdkZWNvcmF0aW9uJywgICAgJ15saWJxZGVjb3JhdGlvbiguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdkZXNpZ25lcicsICAgICAgJ2Rlc2lnbmVyJywgICAgICAnXmxpYiguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdnZnhkcml2ZXJzJywgICAgJ2dmeGRyaXZlcicsICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnZ3JhcGhpY3NzeXN0ZW1zJywnZ3JhcGhpY3NzeXN0ZW1zJywgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2tiZGRyaXZlcnMnLCAgICAna2JkZHJpdmVyJywgICAgICdebGlicSguKilrYmRkcml2ZXJcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdtb3VzZWRyaXZlcnMnLCAgJ21vdXNlZHJpdmVyJywgICAnXmxpYnEoLiopbW91c2Vkcml2ZXJcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdpY29uZW5naW5lcycsICAgJ2ljb25lbmdpbmUnLCAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnaW1hZ2Vmb3JtYXRzJywgICdpbWFnZWZvcm1hdCcsICAgJ15saWJxKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2lucHV0bWV0aG9kcycsICAnaW5wdXRtZXRob2QnLCAgICdebGlicSguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdzcWxkcml2ZXJzJywgICAgJ3NxbGRyaXZlcicsICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgnc2NyaXB0JywgICAgICAgICdzY3JpcHQnLCAgICAgICAgJ15saWJxdHNjcmlwdCguKilcLnNvJCcpCisgICAgcXRvcGlhX3NwbGl0KCdzdHlsZXMnLCAgICAgICAgJ3N0eWxlJywgICAgICAgICAnXmxpYnEoLiopXC5zbyQnKQorICAgIHF0b3BpYV9zcGxpdCgncGhvbm9uX2JhY2tlbmQnLCdwaG9ub24tYmFja2VuZCcsJ15saWJwaG9ub25fKC4qKVwuc28kJykKKyAgICBxdG9waWFfc3BsaXQoJ2JlYXJlcicsICAgICAgICAnYmVhcmVyJywgICAgICAgICdebGlicSguKiliZWFyZXJcLnNvJCcpCit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIElOU1RBTExfUk9PVD0ke0R9CisKKwkjIEluc3RhbGwgYSBwcm9wZXIgdGFyZ2V0IHZlcnNpb24gb2YgcW1ha2UKKwlybSAke0R9LyR7YmluZGlyfS9xbWFrZQorCWluc3RhbGwgLW0gMDc1NSBiaW4vcW1ha2UyICR7RH0ke2JpbmRpcn0vcW1ha2UKKworCSMgZml4IHBrZ2NvbmZpZywgbGlidG9vbCBhbmQgcHJsIGZpbGVzCisJc2VkIC1pIC1lICdzIy1MJHtTfS9saWIvXD8jI2cnIFwKKwkJCS1lICdzIy1MJHtTVEFHSU5HX0xJQkRJUn0vXD8jI2cnIFwKKwkJCS1lICdzI1NUQUdJTkdfTElCRElSfSNsaWJkaXJ9JyNnIFwKKwkJCS1lICdzIy1MJHtsaWJkaXJ9L1w/IyNnJyBcCisJCQktZSBzIyckKE9FX1FNQUtFX0xJQlNfWDExKScjIiR7T0VfUU1BS0VfTElCU19YMTF9IiNnIFwKKwkJCS1lICdzIyIgLVdsLC1ycGF0aC1saW5rLCR7U30vbGliL1w/IiMjZycgXAorCQkJLWUgJ3MjIiAtV2wsLXJwYXRoLWxpbmssJHtsaWJkaXJ9L1w/IiMjZycgXAorCQkJLWUgJ3MjSWluI0kke2luI2cnIFwKKwkJCS1lICdzIy1MXC5cLi9cLlwuL1dlYkNvcmUvcmVsZWFzZVxzXCstTFwuXC4vXC5cLi9KYXZhU2NyaXB0Q29yZS9yZWxlYXNlXHNcKy1sd2ViY29yZSMjZycgXAorCQkJLWUgJ3MjLWxqc2NvcmUjI2cnIFwKKwkJCSR7RH0ke2xpYmRpcn0vKi5sYSAke0R9JHtsaWJkaXJ9LyoucHJsICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMKKworCSMgZml4IHBrZ2NvbmZpZyBmaWxlcworCXNlZCAtaSAtZSBzIyJtb2NfbG9jYXRpb249LiokIiMibW9jX2xvY2F0aW9uPSR7YmluZGlyfS9tb2M0IiMgXAorCQkJLWUgcyMidWljX2xvY2F0aW9uPS4qJCIjInVpY19sb2NhdGlvbj0ke2JpbmRpcn0vdWljNCIjIFwKKwkJCSR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMKKwlmb3IgbmFtZSBpbiAke1FUX0xJQl9OQU1FU307IGRvCisJCXNlZCAtaSAtZSAvUmVxdWlyZXMvcyMiJHtuYW1lfSIjIiR7bmFtZX0ke1FUX0xJQklORklYfSIjZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8qLnBjCisJZG9uZQorCisJIyBRVCBhYnVzZXMgJGluY2x1ZGVkaXIgdG8gcG9pbnQgdG8gaXRzIGhlYWRlcnMsIHdoaWNoIGJyZWFrcyBwa2djb25maWcgc3lzcm9vdCwgc28gbWFudWFsbHkgZml4IGl0IHVwIGhlcmU6CisJZm9yIHBjIGluICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnLyoucGMgOyBkbworCQlzZWQgLWkgLWUgInM6cHJlZml4fS9pbmNsdWRlLyR7UVRfRElSX05BTUV9LyQoYmFzZW5hbWUgJHBjIC5wYyk6cHJlZml4fS9pbmNsdWRlOiIgXAorCQkJCS1lICdzOklQezpJJHs6ZycgJHBjCisJZG9uZQorCisJI0FwcGVuZCBhbiBFIHRvIHRoZSBxdGRlbW8gZmlsZQorCWlmIFsgLW4gIiR7UVRfTElCSU5GSVh9IiBdIDsgdGhlbgorCQlbIC1mICR7RH0ke2JpbmRpcn0vcXRkZW1vIF0gJiYgbXYgJHtEfSR7YmluZGlyfS9xdGRlbW8gJHtEfSR7YmluZGlyfS9xdGRlbW8ke1FUX0xJQklORklYfQorCWZpCisKKwlzY3JpcHQ9IiR7RH0vJHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9lbnZpcm9ubWVudC1zZXR1cCIKKwl0b3VjaCAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFFUX0RJUl9OQU1FPSR7UVRfRElSX05BTUV9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFFUX0xJQklORklYPSR7UVRfTElCSU5GSVh9JyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0FSPWFyJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0NDPWdjYycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9DWFg9ZysrJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJTks9ZysrJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IE9FX1FNQUtFX0xJQkRJUl9RVD0ke2xpYmRpcn0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfSU5DRElSX1FUPSR7aW5jbHVkZWRpcn0vJHtRVF9ESVJfTkFNRX0nID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfTU9DPSR7YmluZGlyfS9tb2MnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDPSR7YmluZGlyfS91aWMnID4+ICRzY3JpcHQKKwllY2hvICdleHBvcnQgT0VfUU1BS0VfVUlDMz0ke2JpbmRpcn0vdWljMycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9SQ0M9JHtiaW5kaXJ9L3JjYycgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU0NQUDJYTUw9JHtiaW5kaXJ9L3FkYnVzY3BwMnhtbCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RREJVU1hNTDJDUFA9JHtiaW5kaXJ9L3FkYnVzeG1sMmNwcCcgPj4gJHNjcmlwdAorCWVjaG8gJ2V4cG9ydCBPRV9RTUFLRV9RVF9DT05GSUc9JHtkYXRhZGlyfS8ke1FUX0RJUl9OQU1FfS9ta3NwZWNzL3Fjb25maWcucHJpJyA+PiAkc2NyaXB0CisJZWNobyAnZXhwb3J0IFFNQUtFU1BFQz0ke2RhdGFkaXJ9LyR7UVRfRElSX05BTUV9L21rc3BlY3MvbGludXgtZysrJyA+PiAkc2NyaXB0CisJY2htb2QgMDc1NSAkc2NyaXB0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYyBiL21ldGEvcmVjaXBlcy1xdC9xdDQvcXQ0X2FyY2guaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NGMyODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcXQvcXQ0L3F0NF9hcmNoLmluYwpAQCAtMCwwICsxLDIyIEBACitpbmhlcml0IHNpdGVpbmZvCisKK0FSTV9JTlNUUlVDVElPTl9TRVQgPSAiYXJtIgorCitzZXRfYXJjaCgpIHsKKyAgIGNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKyAgICAgICBhYXJjaDY0KikgUVRfQVJDSD1hYXJjaDY0IDs7CisgICAgICAgYXJtKikgICAgIFFUX0FSQ0g9YXJtIDs7CisgICAgICAgaSo4NiopICAgIFFUX0FSQ0g9aTM4NiA7OworICAgICAgIG1pcHMqKSAgICBRVF9BUkNIPW1pcHMgOzsKKyAgICAgICBwb3dlcnBjKikgUVRfQVJDSD1wb3dlcnBjIDs7CisgICAgICAgeDg2XzY0KikgIFFUX0FSQ0g9eDg2XzY0IDs7CisgICBlc2FjCit9CisKK3NldF9lbmRpYW4oKSB7CisgICAgaWYgWyAke1NJVEVJTkZPX0VORElBTk5FU1N9ID0gImxlIiBdIDsgdGhlbgorICAgICAgICBRVF9FTkRJQU49Ii1saXR0bGUtZW5kaWFuIgorICAgIGVsaWYgWyAke1NJVEVJTkZPX0VORElBTk5FU1N9ID0gImJlIiBdIDsgdGhlbgorICAgICAgICBRVF9FTkRJQU49Ii1iaWctZW5kaWFuIgorICAgIGZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvUkVBRE1FIGIvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDc1NThkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L1JFQURNRQpAQCAtMCwwICsxLDEzIEBACitUaGUgcmVjaXBlcy1ydCByZWNpcGVzIHByb3ZpZGUgcGFja2FnZSBhbmQgaW1hZ2UgcmVjaXBlcyBmb3IgdXNpbmcgYW5kIHRlc3RpbmcKK3RoZSBQUkVFTVBUX1JUIGtlcm5lbC4gVGhlIGNvcmUtaW1hZ2UtcnQqLmJiIGltYWdlcyBhcmUgbWluaW1hbCBpbWFnZXMgd2l0aAorYSBjb3VwbGUgZXh0cmEgcGFja2FnZXMsIGluY2x1ZGluZyBydC10ZXN0cy4gSW4gb3JkZXIgdG8gYnVpbGQgdGhlIGltYWdlIHdpdGgKK3RoZSBsaW51eC15b2N0by1ydCBrZXJuZWwsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGxpbmUgaW4geW91cgorbG9jYWwuY29uZiwgYmJsYXllcnMuY29uZiwgb3IgeW91ciAkTUFDSElORS5jb25mLgorCitQUkVGRVJSRURfUFJPVklERVJfdmlydHVhbC9rZXJuZWwgPSAibGludXgteW9jdG8tcnQiCisKK0lmIHlvdSBhcmUgY3JlYXRpbmcgYSBuZXcgQlNQIHdoaWNoIHNob3VsZCB1c2UgbGludXgteW9jdG8tcnQgYnkgZGVmYXVsdCwKK3VzZSB0aGUgbGluZSBhYm92ZSBpbiB0aGUgJE1BQ0hJTkUuY29uZiBpbiB5b3VyIEJTUCBsYXllciwgYW5kIHNwZWNpZnkgdGhlCitmb2xsb3dpbmcgaW4gYSBsaW51eC15b2N0by1ydCBiYmFwcGVuZCByZWNpcGU6CisKK0NPTVBBVElCTEVfTUFDSElORV8kTUFDSElORSA9ICRNQUNISU5FCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQtc2RrLmJiIGIvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjdkNTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L2ltYWdlcy9jb3JlLWltYWdlLXJ0LXNkay5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIHJlY2lwZXMtY29yZS9pbWFnZXMvY29yZS1pbWFnZS1taW5pbWFsLmJiCisKK0RFU0NSSVBUSU9OID0gIlNtYWxsIGltYWdlIGNhcGFibGUgb2YgYm9vdGluZyBhIGRldmljZSB3aXRoIGEgdGVzdCBzdWl0ZSBhbmQgXAordG9vbHMgZm9yIHJlYWwtdGltZSB1c2UuIEl0IGluY2x1ZGVzIHRoZSBmdWxsIG1ldGEtdG9vbGNoYWluLCBkZXZlbG9wbWVudCBcCitoZWFkZXJzIGFuZCBsaWJyYXJpZXMgdG8gZm9ybSBhIHN0YW5kYWxvbmUgU0RLLiIKK0RFUEVORFMgPSAibGludXgteW9jdG8tcnQiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyB0b29scy1zZGsgdG9vbHMtZGVidWcgZWNsaXBzZS1kZWJ1ZyB0b29scy1wcm9maWxlIHRvb2xzLXRlc3RhcHBzIGRlYnVnLXR3ZWFrcyIKKworSU1BR0VfSU5TVEFMTCArPSAicnQtdGVzdHMgaHdsYXRkZXRlY3Qga2VybmVsLWRldiIKKworTElDRU5TRSA9ICJNSVQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIgYi9tZXRhL3JlY2lwZXMtcnQvaW1hZ2VzL2NvcmUtaW1hZ2UtcnQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiNmY4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9pbWFnZXMvY29yZS1pbWFnZS1ydC5iYgpAQCAtMCwwICsxLDkgQEAKK3JlcXVpcmUgcmVjaXBlcy1jb3JlL2ltYWdlcy9jb3JlLWltYWdlLW1pbmltYWwuYmIKKworREVTQ1JJUFRJT04gPSAiQSBzbWFsbCBpbWFnZSBqdXN0IGNhcGFibGUgb2YgYWxsb3dpbmcgYSBkZXZpY2UgdG8gYm9vdCBwbHVzIGEgXAorcmVhbC10aW1lIHRlc3Qgc3VpdGUgYW5kIHRvb2xzIGFwcHJvcHJpYXRlIGZvciByZWFsLXRpbWUgdXNlLiIKK0RFUEVORFMgPSAibGludXgteW9jdG8tcnQiCisKK0lNQUdFX0lOU1RBTEwgKz0gInJ0LXRlc3RzIGh3bGF0ZGV0ZWN0IgorCitMSUNFTlNFID0gIk1JVCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjQ5M2ViCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDEtcnQtdGVzdHMtQWxsb3ctZm9yLXVzZXItc3BlY2lmaWVkLVBZTElCLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK0Zyb20gNjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK01lc3NhZ2UtSWQ6IDw2Njc2NTUyMmI2MzQ5NTIzNDZmMWEzYWI3ZDAwYzcyMjJhMWY5MzYxLjEzNDc0MTk1OTcuZ2l0LmR2aGFydEBsaW51eC5pbnRlbC5jb20+CitGcm9tOiBEYXJyZW4gSGFydCA8ZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0RhdGU6IFR1ZSwgMTEgU2VwIDIwMTIgMTU6MTk6MzAgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIHJ0LXRlc3RzOiBBbGxvdyBmb3IgdXNlci1zcGVjaWZpZWQgUFlMSUIKKworVXBzdHJlYW0tU3RhdHVzOiBTdWJtaXR0ZWQKKworQWxsb3cgdXNlcnMgKGJ1aWxkIHN5c3RlbXMpIHRvIHNwZWNpZnkgUFlMSUIuIFRoaXMgYWxsb3dzIGZvciBhCitjcm9zcy1idWlsZC1zeXN0ZW0gdG8gc3BlY2lmeSB0aGUgdGFyZ2V0IFBZTElCIHJhdGhlciB0aGFuIHRoZSBob3N0CitQWUxJQi4KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitDQzogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+CitDQzogSm9obiBLYWN1ciA8amthY3VyQHJlZGhhdC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKK2luZGV4IDNhODI0MDcuLjYxZTJmOWYgMTAwNjQ0CistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMyw3ICsyMyw3IEBAIGVuZGlmCisgQ0ZMQUdTID89IC1EX0dOVV9TT1VSQ0UgLVdhbGwgLVduby1ub25udWxsIC1Jc3JjL2luY2x1ZGUKKyBMREZMQUdTID89CisgCistUFlMSUIgIDo9ICQoc2hlbGwgcHl0aG9uIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKScpCisrUFlMSUIgID89ICQoc2hlbGwgcHl0aG9uIC1jICdpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgIHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKScpCisgCisgaWZuZGVmIERFQlVHCisgCUNGTEFHUwkrPSAtTzIKKy0tIAorMS43LjExLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvMDAwMi1ydC10ZXN0cy1CcmVhay1vdXQtaW5zdGFsbF9od2xhdGRldGVjdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzYxMzZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzLzAwMDItcnQtdGVzdHMtQnJlYWstb3V0LWluc3RhbGxfaHdsYXRkZXRlY3QucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorRnJvbSBhZjkzZTU4MGQwMDVhMmJiYTZlZDM2NTI4MDAzYWY0Y2Y2MzFhZGI4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorTWVzc2FnZS1JZDogPGFmOTNlNTgwZDAwNWEyYmJhNmVkMzY1MjgwMDNhZjRjZjYzMWFkYjguMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0luLVJlcGx5LVRvOiA8NjY3NjU1MjJiNjM0OTUyMzQ2ZjFhM2FiN2QwMGM3MjIyYTFmOTM2MS4xMzQ3NDE5NTk3LmdpdC5kdmhhcnRAbGludXguaW50ZWwuY29tPgorUmVmZXJlbmNlczogPDY2NzY1NTIyYjYzNDk1MjM0NmYxYTNhYjdkMDBjNzIyMmExZjkzNjEuMTM0NzQxOTU5Ny5naXQuZHZoYXJ0QGxpbnV4LmludGVsLmNvbT4KK0Zyb206IERhcnJlbiBIYXJ0IDxkdmhhcnRAbGludXguaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxMSBTZXAgMjAxMiAxNDo1MToxMCAtMDcwMAorU3ViamVjdDogW1BBVENIIDIvMl0gcnQtdGVzdHM6IEJyZWFrIG91dCBpbnN0YWxsX2h3bGF0ZGV0ZWN0CisKK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKK0FsbG93IGh3bGF0ZGV0ZWN0IHRvIGJlIGluc3RhbGxlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSByZXN0IG9mIHRoZQordGVzdHMuIFRoaXMgaXMgY29udmVuaWVudCBmb3IgYnVpbGQgc3lzdGVtcyB0aGF0IHBhY2thZ2UgaXQgc2VwYXJhdGVseQorZHVlIHRvIHRoZSBweXRob24gZGVwZW5kZW5jeS4KKworU2lnbmVkLW9mZi1ieTogRGFycmVuIEhhcnQgPGR2aGFydEBsaW51eC5pbnRlbC5jb20+CitDQzogQ2xhcmsgV2lsbGlhbXMgPHdpbGxpYW1zQHJlZGhhdC5jb20+CitDQzogSm9obiBLYWN1ciA8amthY3VyQHJlZGhhdC5jb20+CistLS0KKyBNYWtlZmlsZSB8IDE4ICsrKysrKysrKysrLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNjFlMmY5Zi4uNjM2ZTYzYiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTExOSwyMSArMTE5LDE1IEBAIGNoYW5nZWxvZzoKKyAJZ2l0IGxvZyA+Q2hhbmdlTG9nCisgCisgLlBIT05ZOiBpbnN0YWxsCistaW5zdGFsbDogYWxsCisraW5zdGFsbDogYWxsIGluc3RhbGxfaHdsYXRkZXRlY3QKKyAJbWtkaXIgLXAgIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChtYW5kaXIpL21hbjQiCisgCW1rZGlyIC1wICIkKERFU1RESVIpJChzcmNkaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW44IgorIAljcCAkKFRBUkdFVFMpICIkKERFU1RESVIpJChiaW5kaXIpIgorLQlpZiB0ZXN0IC1uICIkKFBZTElCKSIgOyB0aGVuIFwKKy0JCWluc3RhbGwgLUQgLW0gNzU1IHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC5weSAkKERFU1RESVIpJChQWUxJQikvaHdsYXRkZXRlY3QucHkgOyBcCistCQlybSAtZiAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCistCQlsbiAtcyAkKFBZTElCKS9od2xhdGRldGVjdC5weSAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCistCWZpCisgCWluc3RhbGwgLUQgLW0gNjQ0IHNyYy9iYWNrZmlyZS9iYWNrZmlyZS5jICIkKERFU1RESVIpJChzcmNkaXIpL2JhY2tmaXJlL2JhY2tmaXJlLmMiCisgCWluc3RhbGwgLW0gNjQ0IHNyYy9iYWNrZmlyZS9NYWtlZmlsZSAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9NYWtlZmlsZSIKKyAJZ3ppcCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuNC9iYWNrZmlyZS40Lmd6IgorIAlnemlwIHNyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9jeWNsaWN0ZXN0LjguZ3oiCisgCWd6aXAgc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BpX3N0cmVzcy44Lmd6IgorLQlnemlwIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiCisgCWd6aXAgc3JjL3B0c2VtYXRlc3QvcHRzZW1hdGVzdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3B0c2VtYXRlc3QuOC5neiIKKyAJZ3ppcCBzcmMvc2lnd2FpdHRlc3Qvc2lnd2FpdHRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zaWd3YWl0dGVzdC44Lmd6IgorIAlnemlwIHNyYy9zdnNlbWF0ZXN0L3N2c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zdnNlbWF0ZXN0LjguZ3oiCitAQCAtMTQxLDYgKzEzNSwxNiBAQCBpbnN0YWxsOiBhbGwKKyAJZ3ppcCBzcmMvYmFja2ZpcmUvc2VuZG1lLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2VuZG1lLjguZ3oiCisgCWd6aXAgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9oYWNrYmVuY2guOC5neiIKKyAKKysuUEhPTlk6IGluc3RhbGxfaHdsYXRkZXRlY3QKKytpbnN0YWxsX2h3bGF0ZGV0ZWN0OiBod2xhdGRldGVjdAorKwlpZiB0ZXN0IC1uICIkKFBZTElCKSIgOyB0aGVuIFwKKysJCW1rZGlyIC1wICIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuZGlyKS9tYW44IiA7IFwKKysJCWluc3RhbGwgLUQgLW0gNzU1IHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC5weSAkKERFU1RESVIpJChQWUxJQikvaHdsYXRkZXRlY3QucHkgOyBcCisrCQlybSAtZiAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCisrCQlsbiAtcyAkKFBZTElCKS9od2xhdGRldGVjdC5weSAiJChERVNURElSKSQoYmluZGlyKS9od2xhdGRldGVjdCIgOyBcCisrCQlnemlwIHNyYy9od2xhdGRldGVjdC9od2xhdGRldGVjdC44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2h3bGF0ZGV0ZWN0LjguZ3oiIDsgXAorKwlmaQorKworIC5QSE9OWTogcmVsZWFzZQorIHJlbGVhc2U6IGNsZWFuIGNoYW5nZWxvZworIAlta2RpciAtcCByZWxlYXNlcworLS0gCisxLjcuMTEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9NYWtlZmlsZS1maXgtZ3ppcC1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzVkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIDA3YjVlZDQyZDcwNDFjY2MwODQ4ODllYWE5NjgxN2FhMDk3YmY0NjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IFR1ZSwgMyBGZWIgMjAxNSAwMzoxMDoyNSArMDAwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZTogZml4IGd6aXAgY29tbWFuZAorCitUaGUgIi1jIiBkb2Vzbid0IHdvcmsgaW4gY29tbWFuZCAiZ3ppcCBmaWxlIC1jIiwgbmVlZCB1c2UgImd6aXAgLWMgZmlsZSIKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCAyMTlhNTkxLi5jN2QxNDdhIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMTQ0LDcgKzE0NCw3IEBAIGluc3RhbGxfaHdsYXRkZXRlY3Q6IGh3bGF0ZGV0ZWN0CisgCQlpbnN0YWxsIC1EIC1tIDc1NSBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QucHkgJChERVNURElSKSQoUFlMSUIpL2h3bGF0ZGV0ZWN0LnB5IDsgXAorIAkJcm0gLWYgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorIAkJbG4gLXMgJChQWUxJQikvaHdsYXRkZXRlY3QucHkgIiQoREVTVERJUikkKGJpbmRpcikvaHdsYXRkZXRlY3QiIDsgXAorLQkJZ3ppcCBzcmMvaHdsYXRkZXRlY3QvaHdsYXRkZXRlY3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9od2xhdGRldGVjdC44Lmd6IiA7IFwKKysJCWd6aXAgLWMgc3JjL2h3bGF0ZGV0ZWN0L2h3bGF0ZGV0ZWN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaHdsYXRkZXRlY3QuOC5neiIgOyBcCisgCWZpCisgCisgLlBIT05ZOiByZWxlYXNlCistLSAKKzIuMC4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL2ZpeC1yZS1pbnN0YWxsLWZhaWx1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM4ZWM5MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0N1cnJlbnRseSBnemlwIG9uIGhvc3QgaXMgdXNlZC4gSWYgaG9zdCBnemlwIGlzIHByb3ZpZGVkIGJ5IHBpZ3osIGl0IGZhaWxzIHRvCityZWRvIGluc3RhbGwgdGhhdCBwaWd6IGNhbid0IGhhbmRsZSB0aGUgb3B0aW9uIGFmdGVyIGZpbGUgbmFtZS4gV2hlbiBydW46CisKK2d6aXAgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgLWMgPiBPVVRQVVRfRklMRQorCitGaWxlIHNyYy9iYWNrZmlyZS9iYWNrZmlyZS40IGlzIHppcHBlZCBpbnRvIGJhY2tmaXJlLjQuZ3ogYnV0IHRoZSBPVVRQVVRfRklMRQoraXMgZW1wdHkuIFdoZW4gcmVydW4gZG9faW5zdGFsbCwgaXQgc2hvd3Mgd2FybmluZzoKKworfCBnemlwOiBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCBkb2VzIG5vdCBleGlzdCAtLSBza2lwcGluZworCithbmQgZW1wdHkgbWFudWFsIGd6aXAgZmlsZXMgYXJlIGNyZWF0ZWQ6CisKKyQgZmlsZSBpbWFnZS91c3Ivc2hhcmUvbWFuL21hbjQvYmFja2ZpcmUuNC5negoraW1hZ2UvdXNyL3NoYXJlL21hbi9tYW40L2JhY2tmaXJlLjQuZ3o6IGVtcHR5CisKK0ZpeCBpdCBieSBwdXR0aW5nIG9wdGlvbiAnLWMnIGJlZm9yZSB0aGUgZmlsZSBuYW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLS0KKy0tLSBnaXQvTWFrZWZpbGUub3JpZwkyMDE0LTExLTE0IDE1OjQ3OjI2LjQwNjYzODQxOSArMDgwMAorKysrIGdpdC9NYWtlZmlsZQkyMDE0LTExLTE0IDE1OjQ2OjUzLjg5MDYzNzUzMyArMDgwMAorQEAgLTEyNywxNSArMTI3LDE1IEBACisgCWNwICQoVEFSR0VUUykgIiQoREVTVERJUikkKGJpbmRpcikiCisgCWluc3RhbGwgLUQgLW0gNjQ0IHNyYy9iYWNrZmlyZS9iYWNrZmlyZS5jICIkKERFU1RESVIpJChzcmNkaXIpL2JhY2tmaXJlL2JhY2tmaXJlLmMiCisgCWluc3RhbGwgLW0gNjQ0IHNyYy9iYWNrZmlyZS9NYWtlZmlsZSAiJChERVNURElSKSQoc3JjZGlyKS9iYWNrZmlyZS9NYWtlZmlsZSIKKy0JZ3ppcCBzcmMvYmFja2ZpcmUvYmFja2ZpcmUuNCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuNC9iYWNrZmlyZS40Lmd6IgorLQlnemlwIHNyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9jeWNsaWN0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3BpX3Rlc3RzL3BpX3N0cmVzcy44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3BpX3N0cmVzcy44Lmd6IgorLQlnemlwIHNyYy9wdHNlbWF0ZXN0L3B0c2VtYXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wdHNlbWF0ZXN0LjguZ3oiCistCWd6aXAgc3JjL3NpZ3dhaXR0ZXN0L3NpZ3dhaXR0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc2lnd2FpdHRlc3QuOC5neiIKKy0JZ3ppcCBzcmMvc3ZzZW1hdGVzdC9zdnNlbWF0ZXN0LjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvc3ZzZW1hdGVzdC44Lmd6IgorLQlnemlwIHNyYy9wbXF0ZXN0L3BtcXRlc3QuOCAtYyA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9wbXF0ZXN0LjguZ3oiCistCWd6aXAgc3JjL2JhY2tmaXJlL3NlbmRtZS44IC1jID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NlbmRtZS44Lmd6IgorLQlnemlwIHNyYy9oYWNrYmVuY2gvaGFja2JlbmNoLjggLWMgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvaGFja2JlbmNoLjguZ3oiCisrCWd6aXAgLWMgc3JjL2JhY2tmaXJlL2JhY2tmaXJlLjQgPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjQvYmFja2ZpcmUuNC5neiIKKysJZ3ppcCAtYyBzcmMvY3ljbGljdGVzdC9jeWNsaWN0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvY3ljbGljdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9waV90ZXN0cy9waV9zdHJlc3MuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9waV9zdHJlc3MuOC5neiIKKysJZ3ppcCAtYyBzcmMvcHRzZW1hdGVzdC9wdHNlbWF0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcHRzZW1hdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9zaWd3YWl0dGVzdC9zaWd3YWl0dGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3NpZ3dhaXR0ZXN0LjguZ3oiCisrCWd6aXAgLWMgc3JjL3N2c2VtYXRlc3Qvc3ZzZW1hdGVzdC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L3N2c2VtYXRlc3QuOC5neiIKKysJZ3ppcCAtYyBzcmMvcG1xdGVzdC9wbXF0ZXN0LjggPiIkKERFU1RESVIpJChtYW5kaXIpL21hbjgvcG1xdGVzdC44Lmd6IgorKwlnemlwIC1jIHNyYy9iYWNrZmlyZS9zZW5kbWUuOCA+IiQoREVTVERJUikkKG1hbmRpcikvbWFuOC9zZW5kbWUuOC5neiIKKysJZ3ppcCAtYyBzcmMvaGFja2JlbmNoL2hhY2tiZW5jaC44ID4iJChERVNURElSKSQobWFuZGlyKS9tYW44L2hhY2tiZW5jaC44Lmd6IgorIAorIC5QSE9OWTogaW5zdGFsbF9od2xhdGRldGVjdAorIGluc3RhbGxfaHdsYXRkZXRlY3Q6IGh3bGF0ZGV0ZWN0CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9oYWNrYmVuY2gtZml4LWVycm9yLWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxN2ZkZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvaGFja2JlbmNoLWZpeC1lcnJvci1jaGVjay5wYXRjaApAQCAtMCwwICsxLDQxIEBACitjaGlsZGluZm9fdCBpcyBhIHVuaW9uIHRoYXQgY29udGFpbnMgYm90aCBzaWduZWQgKGVycm9yKSBhbmQgdW5zaWduZWQKKyh0aHJlYWRpZCkgbWVtYmVycy4gVGh1cyBhIGxhcmdlIHRocmVhZGlkIGNvdWxkIGFwcGVhciBhcyBhIG5lZ2F0aXZlIGVycm9yCit2YWx1ZSwgd2hpY2ggd2lsbCBjYXVzZSB1bmV4cGVjdGVkIGZhaWx1cmVzLgorCitjaGlsZGluZm9fdCBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHN0cnVjdCwgYnV0IGl0IGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUKK3BlcmZvcm1hbmNlLiBTbyB3ZSBrZWVwIGl0IGFzIGEgdW5pb24gYnV0IG9ubHkgY2hlY2sgZXJyb3IgYWdhaW5zdCAtMS4gVGhlcmUgaXMKK3N0aWxsIGEgY2hhbmNlIG9mIGZhbHNlIGFsYXJtIGJ1dCBpdCdzIHNtYWxsLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogU29uZy5MaSA8U29uZy5MaUB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogSmVzc2UgWmhhbmcgPHNlbi56aGFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYyB8ICAgIDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9zcmMvaGFja2JlbmNoL2hhY2tiZW5jaC5jIGIvc3JjL2hhY2tiZW5jaC9oYWNrYmVuY2guYworaW5kZXggOGJhZWIyMy4uZGMwZGU4ZiAxMDA2NDQKKy0tLSBhL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKKysrKyBiL3NyYy9oYWNrYmVuY2gvaGFja2JlbmNoLmMKK0BAIC0zMTcsNyArMzE3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBncm91cChjaGlsZGluZm9fdCAqY2hpbGQsCisgCQljdHgtPndha2VmZCA9IHdha2VmZDsKKyAKKyAJCWNoaWxkW3RhYl9vZmZzZXQraV0gPSBjcmVhdGVfd29ya2VyKGN0eCwgKHZvaWQgKikodm9pZCAqKXJlY2VpdmVyKTsKKy0JCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K2ldLmVycm9yIDwgMCApIHsKKysJCWlmKCBjaGlsZFt0YWJfb2Zmc2V0K2ldLmVycm9yID09IC0xICkgeworIAkJCXJldHVybiAoaSA+IDAgPyBpLTEgOiAwKTsKKyAJCX0KKyAJCXNuZF9jdHgtPm91dF9mZHNbaV0gPSBmZHNbMV07CitAQCAtMzMyLDcgKzMzMiw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ3JvdXAoY2hpbGRpbmZvX3QgKmNoaWxkLAorIAkJc25kX2N0eC0+bnVtX2ZkcyA9IG51bV9mZHM7CisgCisgCQljaGlsZFt0YWJfb2Zmc2V0K251bV9mZHMraV0gPSBjcmVhdGVfd29ya2VyKHNuZF9jdHgsICh2b2lkICopKHZvaWQgKilzZW5kZXIpOworLQkJaWYoIGNoaWxkW3RhYl9vZmZzZXQrbnVtX2ZkcytpXS5lcnJvciA8IDAgKSB7CisrCQlpZiggY2hpbGRbdGFiX29mZnNldCtudW1fZmRzK2ldLmVycm9yID09IC0xICkgeworIAkJCXJldHVybiAobnVtX2ZkcytpKS0xOworIAkJfQorIAl9CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5IGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J0X2JtYXJrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyMjgwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvZmlsZXMvcnRfYm1hcmsucHkKQEAgLTAsMCArMSw0MTIgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgICAgQlNELTMtQ2xhdXNlCisjIENvcHlyaWdodCAoQykgMjAxNSBFbmVhIFNvZnR3YXJlIEFCCisjIEF1dGhvcjogVGhvbWFzIEx1bmRzdHLDtm0gPHRob21hcy5sdW5kc3Ryb21AZW5lYS5jb20+CisKKyMgVGhlIHNjcmlwdCBtZWFzdXJlcyBpbnRlcnJ1cHQgbGF0ZW5jeSB0b2dldGhlciB3aXRoIGRpZmZlcmVudCB0eXBlcyBvZgorIyBzeXN0ZW0gbG9hZC4gVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBwcm9ncmFtcyBjeWNsaWN0ZXN0IGFuZCBzdHJlc3MuCisjCisjIFRoZSBtYWluIG91dHB1dCBpczoKKyMKKyMgICBCZXN0IGNhc2UgKG1pbikgbGF0ZW5jeQorIyAgICAgVGhpcyBoYXMgdmVyeSBsaW1pdGVkIHZhbHVlLCBidXQgaXMgcHJlc2VudGVkIHNpbmNlIGl0IGNhbiBiZSBkb25lCisjICAgICBlYXNpbHkKKyMKKyMgICBBdmVyYWdlIGxhdGVuY3kKKyMgICAgIFRoaXMgdmFsdWUgaXMgb2YgaW50ZXJyZXN0IGZvciB0aHJvdWdocHV0IG9yaWVudGVkIHN5c3RlbXMuIExpbWl0ZWQKKyMgICAgIHZhbHVlIGZvciBhIHJlYWwtdGltZSBzeXN0ZW0uIEFsc28gcHJlc2VudGVkIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBkby4KKyMKKyMgICBXb3JzdCBjYXNlIChtYXgpIGxhdGVuY3kKKyMgICAgIFRoaXMgaXMgdGhlIGludGVyZXN0aW5nIG51bWJlciBmb3IgYSByZWFsLXRpbWUgc3lzdGVtLiBUaGUgbnVtYmVyCisjICAgICBwcmVzZW50ZWQgaXMgKG9mIGNvdXJjZSkgdGhlIGxhcmdlc3QgbnVtYmVyIG9ic2VydmVkLiBUaGUgY2hhbGxlbmdlCisjICAgICBpcyB0byBrbm93IGhvdyB0aGUgb2JzZXJ2ZWQgd29yc3QgY2FzZSByZWxhdGVzIHRvIHRoZSBhY3R1YWwgd29yc3QgY2FzZS4KKyMKKyMgICAgIFRvIGdldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBjb25maWRlbmNlLCB0aGUgZm9sbG93aW5nIG1ldGhvZCBpcyB1c2VkOgorIyAgICAgMSkgSW5zdGVhZCBvZiBvbmUgbG9uZyBydW4sIHRoZSBtZWFzdXJlbWVudCBpcyBtYWRlIGFzIGEgc2V0IG9mIHNob3J0ZXIKKyMgICAgICAgIHJ1bnMuIFRoZSBudW1iZXIgb2YgcnVucyBtdXN0IGJlIGEgcG93ZXIgb2YgMiBmb3IgcmVhc29ucyB0aGF0IHdpbGwKKyMgICAgICAgIHNob3JsdHkgYmUgb2J2aW91cworIworIyAgICAgMikgRmlyc3QsIGEgbGlzdCBvZiB0aGUgbWF4IHZhbHVlcyBhcmUgY3JlYXRlZC4KKyMKKyMgICAgIDMpIFRoZSBzbWFsbGVzdCB2YWx1ZSBpbiB0aGF0IGxpc3QgaXMgcmVjb3JkZWQuCisjCisjICAgICA0KSBUaGVuIGEgbmV3IGxpc3QgaXMgY3JlYXRlIGJ5IHRha2luZyB0aGUgbWF4IHZhbHVlIG9mIGVhY2ggcGFpciBvZgorIyAgICAgICAgdmFsdWVzIGluIHRoZSBvcmlnaW5hbCBsaXN0LiBJbiB0aGlzIGxpc3QgdGhlIHNtYWxsZXN0IHZhbHVlIGlzCisjICAgICAgICByZWNvcmRlZC4KKyMKKyMgICAgIDUpIFN0ZXAgMyBpcyByZXBlYXRlZCB1bnRpbCB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBpbiB0aGUgbGlzdC4gU2VlCisjICAgICAgICBleGFtcGxlIGJlbG93OgorIworIyAgICAgICAgU2FtcGxlczoKKyMgICAgICAgICAgfCAgNDQgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA3NyB8ICA3NyB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTE4IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMTkgfCAxMTkgfCAxMTkgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDEzOCB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgIDU3IHwgMTM4IHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxNzUgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDEzMCB8IDE3NSB8IDE3NSB8IDE3NSB8ICAgICB8CisjICAgICAgICAgIHwgIDU0IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxNTAgfCAxNTAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8ICA0NyB8ICAgICB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgIDU5IHwgIDU5IHwgMTUwIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxOTkgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorIyAgICAgICAgICB8IDExNSB8IDE5OSB8ICAgICB8ICAgICB8ICAgICB8CisjICAgICAgICAgIHwgMTc3IHwgICAgIHwgICAgIHwgICAgIHwgICAgIHwKKyMgICAgICAgICAgfCAxMjkgfCAxNzcgfCAxOTkgfCAxOTkgfCAxOTkgfAorIworIyAgICAgICAgU21hbGxlc3QgdmFsdWU6CisjICAgICAgICAgIHwgIDQ0IHwgIDU5IHwgMTE5IHwgMTc1IHwgMTk5IHwKKyMKKyMgICAgIDYpIFRoZSBnZW5lcmF0ZWQgbGlzdCBvZiBzbWFsbGVzdCB2YWx1ZXMgaXMgYW5hbHl6ZWQuIEluIHRoaXMgY2FzZSwgaXQKKyMgICAgICAgIGNhbiBiZSBvYnNlcnZlZCB0aGF0IHRoZSB2YWx1ZXMgYXJlIGluY3JlYXNpbmcgc2lnbmlmaWNhbnRseSB0aHJvdWdoCisjICAgICAgICB0aGUgZW50aXJlIGxpc3QsIHdoaWNoIGxlYWRzIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhlIG51bWJlciBvZgorIyAgICAgICAgc2FtcGxlcyBpcyB0b28gc21hbGwuCisjICAgICAgICBJZiBpbnN0ZWFkIHRoZSBsaXN0IGhhZCBiZWVuICgxNjcsIDE5MSwgMTk2LCAxOTksIDE5OSksIHRoZXJlIGhhZAorIyAgICAgICAgYmVlbiBhIHZlcnkgc21hbGwsIG9yIG5vLCBpbmNyZWFzZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiBXZSBtaWdodAorIyAgICAgICAgdGhlbiBzdXNwZWN0IHRoYXQgdGhlIG51bWJlciBvZiBzYW1wbGVzIGlzIHByb2JhYmx5IGxhcmdlIGVub3VnaC4KKyMgICAgICAgIFRoZXJlIGlzIGhvd2V2ZXIgbm8gZ3VhcmFudGVlIGZvciB0aGF0LgorIworIyAgICAgU3RlcHMgMS0yIGFyZSBkb25lIGluIHJ1bl9jeWNsaWN0ZXN0X3N1aXRlCisjICAgICBTdGVwcyAzLTUgYXJlIGRvbmUgaW4gZ2VuX21pbm1heF9saXN0LgorIyAgICAgU3RlcCA2IG5lZWRzIHRvIGJlIGRvbmUgbWFudWFsbHkgc2luY2UgdGhlcmUgaXMgKHlldCkgbm8gd2VsbCBkZWZpbmVkCisjICAgICBGQUlMIGNyaXRlcmlvbiBhbmQgYSB0aGVvcmV0aWNhbGx5IHNvbGlkIFBBU1MgY3JpdGVyaW9uIG1heSBuZXZlciBiZQorIyAgICAgYXZhaWxhYmxlLgorCitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB0aW1lCitpbXBvcnQgdHJhY2ViYWNrCisKKyMgU2VlIGNvbW1lbnQgb24gdGhlIGZ1bmN0aW9uIHNldF9odW5nX3RtbworaGFzX2h1bmdfdGFza19kZXRlY3Rpb24gPSBUcnVlCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RGYWlsKEV4Y2VwdGlvbik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgorICAgICAgICAgICAgICAgIHNlbGYubXNnID0gbXNnCisKKyAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJUZXN0IGZhaWx1cmU6ICgiICsgc2VsZi5tc2cgKyAiKSIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHRjX25hbWUoc3ViX25hbWUpOgorICAgICAgICByZXR1cm4gInJ0X2JtYXJrLmludGxhdC4iICsgc3ViX25hbWUKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbG9nKCkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgcHJpbnQgZXhjZXB0IHRoYXQgYSAnIycgaXMgYWRkZWQgYXQgdGhlIGJlZ2lubmluZworIyBvZiBlYWNoIGxpbmUuIFRoaXMgY2F1c2VzIFRFRkVMIHRvIGlnbm9yZSBpdAorCitkZWYgbG9nKCptc2cpOgorICAgICAgICB0bXAgPSAiIi5qb2luKG1hcChzdHIsIG1zZykpICMgJ21hcChzdHIsIC4uLicgYWxsb3dzIG51bWJlcnMKKyAgICAgICAgZm9yIGxpbmUgaW4gdG1wLnNwbGl0KCJcbiIpOgorICAgICAgICAgICAgICAgIHByaW50ICIjIiwgbGluZQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWtlIGxvZygpLCBidXQgd2l0aCBhIHRpbWVzdGFtcCBhZGRlZAorCitkZWYgbG9nX3RzKCptc2cpOgorICAgICAgICB0cyA9IHRpbWUubG9jYWx0aW1lKCkKKyAgICAgICAgc3RhbXAgPSAiJTJkOiUwMmQ6JTAyZDogIiAlICh0cy50bV9ob3VyLCB0cy50bV9taW4sIHRzLnRtX3NlYykKKyAgICAgICAgbG9nKHN0YW1wLCAqbXNnKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgbG9nX3Rlc3RfaGVhZGVyKHNlcV9ubywgbnJfb2ZfdGVzdHMsIG5hbWUpOgorICAgICAgICBsb2coIj0iICogNzgpCisgICAgICAgIGxvZygpCisgICAgICAgIGxvZygiICBUZXN0IGNhc2UgKCVkLyVkKTogJXMiICUgKHNlcV9ubywgbnJfb2ZfdGVzdHMsIHRjX25hbWUobmFtZSkpKQorICAgICAgICBsb2coKQorICAgICAgICBsb2coIi4iICogNzgpCisgICAgICAgIGxvZygpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBzdGFydF9zdHJlc3MoKmFyZ3MpOgorICAgICAgICBzdHJlc3NfY21kICAgICAgICAgPSBbICJzdHJlc3MiIF0KKyAgICAgICAgYWRkZWRfc3RyZXNzX3R5cGVzID0gW10KKyAgICAgICAgcmVxX3N0cmVzc190eXBlcyAgID0gc2V0KGFyZ3MpCisgICAgICAgIGNwdV9jbnQgICAgICAgICAgICA9IHN0cihtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkpCisKKyAgICAgICAgIyBUaGUgZnVuY3Rpb24gY29uZF9hZGRfc3RyZXNzIGFwcGVuZHMgdGhlIG9wdGlvbnMgdG8gdGhlIHN0cmVzcworICAgICAgICAjIGNvbW1hbmQgaWYgdGhlIHN0cmVzcyB0eXBlIGlzIGluIHRoZSBzZXQgb2YgcmVxdWVzdGVkIHN0cmVzcyB0eXBlcworCisgICAgICAgIGRlZiBjb25kX2FkZF9zdHJlc3Moc3RyZXNzX3R5cGUsIG9wdGlvbnMpOgorICAgICAgICAgICAgICAgIGlmIHN0cmVzc190eXBlIGluIHJlcV9zdHJlc3NfdHlwZXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXFfc3RyZXNzX3R5cGVzLnJlbW92ZShzdHJlc3NfdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkX3N0cmVzc190eXBlcy5hcHBlbmQoc3RyZXNzX3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlc3NfY21kLmV4dGVuZChvcHRpb25zKQorCisgICAgICAgICMtLS0tLS0tLS0tCisKKyAgICAgICAgY29uZF9hZGRfc3RyZXNzKCJpbyIsICBbIi1pIiwgY3B1X2NudF0pCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygiY3B1IiwgWyItYyIsIGNwdV9jbnRdKQorICAgICAgICBjb25kX2FkZF9zdHJlc3MoImhkZCIsIFsiLWQiLCBjcHVfY250LCAiLS1oZGQtYnl0ZXMiLCAiMjBNIl0pCisgICAgICAgIGNvbmRfYWRkX3N0cmVzcygidm0iLCAgWyItbSIsIGNwdV9jbnQsICItLXZtLWJ5dGVzIiwgIjEwTSJdKQorCisgICAgICAgIHVua25vd24gPSAiLCAiLmpvaW4ocmVxX3N0cmVzc190eXBlcykKKyAgICAgICAgaWYgdW5rbm93biAhPSAiIjoKKyAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsKCJVbmtub3duIHN0cmVzcyB0eXBlKHMpOiAlcyIgJSB1bmtub3duKQorCisgICAgICAgIGlmIG5vdCBhZGRlZF9zdHJlc3NfdHlwZXM6CisgICAgICAgICAgICAgICAgbG9nKCJObyBzdHJlc3MgcmVxdWVzdGVkIikKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGFkZGVkICAgICAgICAgID0gIisiLmpvaW4oYWRkZWRfc3RyZXNzX3R5cGVzKQorICAgICAgICBzdHJlc3NfY21kX3N0ciA9ICIgIi5qb2luKHN0cmVzc19jbWQpCisKKyAgICAgICAgbG9nKCJTdGFydGluZyBzdHJlc3MoIiwgYWRkZWQsICIpIikKKyAgICAgICAgbG9nKCIgIENvbW1hbmQ6ICciLCBzdHJlc3NfY21kX3N0ciwgIiciKQorICAgICAgICBsb2coKQorCisgICAgICAgICMgcHJlZXhlY19mbj1vcy5zZXRzaWQgY2F1c2VzIHN0cmVzcyB0byBiZSBleGVjdXRlZCBpbiBhIHNlcGFyYXRlCisgICAgICAgICMgc2Vzc2lvbiwgPT4gaXQgZ2V0cyBhIG5ldyBwcm9jZXNzIGdyb3VwIChpbmNsLiBjaGlsZHJlbikuIEl0CisgICAgICAgICMgY2FuIHRoZW4gYmUgdGVybWluYXRlZCB1c2luZyBvcy5raWxscGcgaW4gZW5kX3N0cmVzcyB3aXRob3V0CisgICAgICAgICMgdGVybWluYXRpbmcgdGhpcyBzY3JpcHQuCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oc3RyZXNzX2NtZCwgcHJlZXhlY19mbj1vcy5zZXRzaWQpCisKKyAgICAgICAgcmV0dXJuIHAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGVuZF9zdHJlc3MocCk6CisgICAgICAgIGlmIHAgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoZSB2YWx1ZSBOb25lIGluZGljYXRlcyB0aGF0IG5vIHN0cmVzcyBzY2VuYXJpbyB3YXMgc3RhcnRlZAorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHAucG9sbCgpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsKCJzdHJlc3MgcHJlbWF0dXJlbHkgdGVybWluYXRlZC4iKQorCisgICAgICAgIG9zLmtpbGxwZyhvcy5nZXRwZ2lkKHAucGlkKSwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgIGxvZygiVGVybWluYXRlZCBzdHJlc3MiKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdXMyaG1zX3N0cih1cyk6CisgICAgICAgIHMgPSAodXMrNTAwMDAwKSAvLyAxMDAwMDAwICMgUm91bmQgbWljcm9zZWNvbmRzIHRvIHMKKyAgICAgICAgbSA9IHMvLzYwCisgICAgICAgIHMgLT0gNjAqbTsKKyAgICAgICAgaCA9IG0vLzYwCisgICAgICAgIG0gLT0gNjAqaAorCisgICAgICAgIHJldHVybiAiJWQ6JTAyZDolMDJkIiAlIChoLCBtLCBzKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTb21ldGltZSB0aGUgaHVuZyB0YXNrIHN1cGVydmlzaW9uIGlzIHRyaWdnZXJlZCBkdXJpbmcgZXhlY3V0aW9uIG9mCisjIGN5Y2xpY3Rlc3QgKGN5Y2xpY3Rlc3Qgc3RhcnZlcyBzdHJlc3MpLiBUbyBhdm9pZCB0aGF0LCB0aGUgc3VwZXJ2aXNpb24KKyMgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQKKworZGVmIHNldF9odW5nX3RtbyhuZXdfdG1vKToKKyAgICAgICAgZ2xvYmFsIGhhc19odW5nX3Rhc2tfZGV0ZWN0aW9uCisKKyAgICAgICAgdG1vX2ZpbGUgPSAiL3Byb2Mvc3lzL2tlcm5lbC9odW5nX3Rhc2tfdGltZW91dF9zZWNzIgorCisgICAgICAgIGlmIG5vdCBoYXNfaHVuZ190YXNrX2RldGVjdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHRtb19maWxlLCBvcy5XX09LKToKKyAgICAgICAgICAgICAgICBsb2coIkh1bmcgdGFzayBkZXRlY3Rpb24gbm90IHN1cHBvcnRlZCIpCisgICAgICAgICAgICAgICAgbG9nKCIgIChGaWxlICIsIHRtb19maWxlLCAiIG5vdCBmb3VuZCkiKQorICAgICAgICAgICAgICAgIGhhc19odW5nX3Rhc2tfZGV0ZWN0aW9uID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBvcmlnX3RtbyA9IGludChzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImNhdCIsIHRtb19maWxlXSkuc3RyaXAoKSkKKyAgICAgICAgaWYgbmV3X3RtbyAhPSBvcmlnX3RtbzoKKyAgICAgICAgICAgICAgICBjbWQgPSAoICJlY2hvICIgKyBzdHIobmV3X3RtbykgKyAiID4gIiArIHRtb19maWxlICkKKyAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHNoZWxsPVRydWUpCisgICAgICAgICAgICAgICAgbG9nKCJDaGFuZ2VkIHRpbWVvdXQgZm9yIGRldGVjdGlvbiBvZiBodW5nIHRhc2tzOiAiLAorICAgICAgICAgICAgICAgICAgICBvcmlnX3RtbywgIiAtPiAiLCBuZXdfdG1vKQorCisgICAgICAgIHJldHVybiBvcmlnX3RtbworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgZ2VuX21pbm1heF9saXN0KG1heF9saXN0KToKKyAgICAgICAgcmVzID0gW21pbihtYXhfbGlzdCldCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0bXAgPSBtYXhfbGlzdAorICAgICAgICAgICAgICAgIG1heF9saXN0ID0gW10KKyAgICAgICAgICAgICAgICB3aGlsZSB0bXA6CisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGlzdC5hcHBlbmQobWF4KHRtcC5wb3AoMCksIHRtcC5wb3AoMCkpKQorCisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChtaW4obWF4X2xpc3QpKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKG1heF9saXN0KSA8IDI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhcmFtZXRlcnMgZm9yIGN5Y2xpY3Rlc3Q6CisjCisjIE9uIHRoZSAtUyBvcHRpb24gKGZyb20gY3ljbGljdGVzdC5jKToKKyMgIC1TIGltcGxpZXMgb3B0aW9ucyAtYSAtdCAtbiBhbmQgc2FtZSBwcmlvcml0eSBvZiBhbGwgdGhyZWFkcworIyAgICAtYTogT25lIHRocmVhZCBwZXIgY29yZQorIyAgICAtbjogdXNlIGNsb2NrX25hbm9zbGVlcCBpbnN0ZWFkIG9mIHBvc2l4IGludGVydmFsIHRpbWVycworIyAgICAtdDogKHdpdGhvdXQgYXJndW1lbnQpIFNldCBudW1iZXIgb2YgdGhyZWFkcyB0byB0aGUgbnVtYmVyCisjICAgICAgICAgb2YgY3B1cworCitpbnRlcnZhbF9jb3JlXzAgPSAxMDAgICAgICMgVGltZXIgaW50ZXJ2YWwgb24gY29yZSAwIFt1c10KK2ludGVydmFsX2RlbHRhICA9IDIwICAgICAgIyBJbnRlcnZhbCBpbmNyZW1lbnQgZm9yIGVhY2ggY29yZSBbdXNdCitsb29wX2NvdW50ICAgICAgPSAzMDAwMCAgICMgTnVtYmVyIG9mIGxvb3BzIChvbiBjb3JlIDApLgorCitjbWQgPSAoImN5Y2xpY3Rlc3QiLAorICAgICAgICItUyIsICAgICAgICAgICAgICMgU3RhbmRhcmQgU01QIHRlc3RpbmcuIFNlZSBiZWxvdworICAgICAgICItcCIsICI5OSIsICAgICAgICMgUlQgcHJpb3JpdHkgOTkKKyAgICAgICAiLXEiLCAgICAgICAgICAgICAjIFF1aWV0IG1vZGUsIGkuZS4gcHJpbnQgb25seSBhIHN1bW1hcnkKKyAgICAgICAiLWkiLCBzdHIoaW50ZXJ2YWxfY29yZV8wKSwKKyAgICAgICAiLWQiLCBzdHIoaW50ZXJ2YWxfZGVsdGEpLAorICAgICAgICItbCIsIHN0cihsb29wX2NvdW50KQorICAgICAgICkKK3JleCA9IHJlLmNvbXBpbGUoIkM6XHMqKFxkKykuKk1pbjpccyooXGQrKS4qQXZnOlxzKihcZCspLipNYXg6XHMqKFxkKykiKQorCitkZWYgcnVuX2N5Y2xpY3Rlc3Rfb25jZSgpOgorICAgICAgICByZXMgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQpCisKKyAgICAgICAgIyBtaW5saXN0IGFuZCBtYXhsaXN0IGFyZSBsaXN0cyB3aXRoIHRoZSBleHRyZW1lcyBmb3IgZWFjaCBjb3JlCisgICAgICAgICMgYXZnX2NudCBpcyB0aGUgc3VtIG9mIGN5Y2xlcyBmb3IgYWxsIGNvcmVzCisgICAgICAgICMgYXZnX3N1bSBpcyB0aGUgc3VtIG9mIChjeWNsZSBjb3VudCphdmVyYWdlKSBmb3IgZWFjaCBjb3JlCisgICAgICAgICMgICAgIFNpbmNlIGN5Y2xpY3Rlc3QgcnVucyBkaWZmZXJlbnQgbnVtYmVyIG9mIGN5Y2xlcyBvbgorICAgICAgICAjICAgICBkaWZmZXJlbnQgY29yZXMsIGF2Z19zdW0vYXZnX2NudCBnaXZlcyBhIG1vcmUgYWNjdXJhdGUKKyAgICAgICAgIyAgICAgdmFsdWUgb2YgdGhlIG92ZXJhbGwgYXZlcmFnZSB0aGFuIGp1c3QgdGFraW5nIHRoZSBhdmVyYWdlCisgICAgICAgICMgICAgIG9mIGVhY2ggY29yZSdzIGF2ZXJhZ2VzCisKKyAgICAgICAgbWlubGlzdCA9IFtdCisgICAgICAgIG1heGxpc3QgPSBbXQorICAgICAgICBhdmdfc3VtID0gMAorICAgICAgICBhdmdfY250ID0gMAorCisgICAgICAgIGZvciBsaW5lIGluIHJlcy5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgICAgICBtID0gcmV4LnNlYXJjaChsaW5lKQorICAgICAgICAgICAgICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtaW5saXN0LmFwcGVuZChpbnQobS5ncm91cCgyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhsaXN0LmFwcGVuZChpbnQobS5ncm91cCg0KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBuID0gaW50KG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhdmdfc3VtICs9IG4gKiBpbnQobS5ncm91cCgzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2Z19jbnQgKz0gbgorCisgICAgICAgIHJldHVybiBtaW4obWlubGlzdCksIFthdmdfc3VtLCBhdmdfY250XSwgbWF4KG1heGxpc3QpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgcHJlY29uZGl0aW9uIGZvciB0aGUgdHJhY2tpbmcgb2YgbWluLW1heCB2YWx1ZXMgaXMgdGhhdAorIyB0aGUgc3VpdGUgc2l6ZSBvcyBhIHBvd2VyIG9mIDIuCisKK04gICAgICAgICAgPSA1CitzdWl0ZV9zaXplID0gMioqTgorCitlc3RfZXhlY190aW1lX29uY2UgID0gaW50ZXJ2YWxfY29yZV8wICogbG9vcF9jb3VudAorZXN0X2V4ZWNfdGltZV9zdWl0ZSA9IHN1aXRlX3NpemUgKiBlc3RfZXhlY190aW1lX29uY2UKKworZGVmIHJ1bl9jeWNsaWN0ZXN0X3N1aXRlKCk6CisgICAgICAgIGxvZygiU3RhcnRpbmcgY3ljbGljdGVzdCIpCisgICAgICAgIGxvZygiICBDb21tYW5kICAgICAgICAgIDogIiwgIiAiLmpvaW4oY21kKSkKKyAgICAgICAgbG9nKCIgIE51bWJlciBvZiBjeWNsZXMgOiAiLCBsb29wX2NvdW50KnN1aXRlX3NpemUsCisgICAgICAgICAgICAiICgiLCBzdWl0ZV9zaXplLCAiIHNldHMgb2YgIiwgbG9vcF9jb3VudCwgIiBjeWNsZXMpIikKKyAgICAgICAgbG9nKCIgIEV4ZWMuIHRpbWUgKGVzdCkgOiAiLCB1czJobXNfc3RyKGVzdF9leGVjX3RpbWVfc3VpdGUpKQorICAgICAgICBsb2coKQorCisgICAgICAgIG9yaWdfdG1vID0gc2V0X2h1bmdfdG1vKDApICMgMCA9PiBEaXNhYmxlCisKKyAgICAgICAgIyBmbG9hdCgnaW5mJykgZW11bGF0ZXMgaW5maW5pdHkuIEF0IGxlYXN0IGluIHRoZSBzZW5zZSB0aGF0IGl0IGlzCisgICAgICAgICMgZ3VhcmFudGVlZCB0byBiZSBsYXJnZXIgdGhhbiBhbnkgYWN0dWFsIG51bWJlci4KKyAgICAgICAgYWNrX21pbiA9IGZsb2F0KCdpbmYnKQorICAgICAgICBhY2tfYXZnID0gWzAsIDBdCisKKyAgICAgICAgbG9nKCkKKyAgICAgICAgbG9nX3RzKCJTdGFydCBvZiBleGVjdXRpb24iKQorICAgICAgICB0ID0gdGltZS50aW1lKCkKKyAgICAgICAgbWF4X2xpc3QgPSBbXQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgwLCBzdWl0ZV9zaXplKToKKyAgICAgICAgICAgICAgICB0bXBfbWluLCB0bXBfYXZnLCB0bXBfbWF4ID0gcnVuX2N5Y2xpY3Rlc3Rfb25jZSgpCisKKyAgICAgICAgICAgICAgICBtc2cgPSAiJTJkLyUyZDoiICUgKGkrMSwgc3VpdGVfc2l6ZSkKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBtaW46ICU0ZCIgJSB0bXBfbWluCisgICAgICAgICAgICAgICAgbXNnICs9ICIgYXZnOiAlNS4xZiIgJSAoZmxvYXQodG1wX2F2Z1swXSkvdG1wX2F2Z1sxXSkKKyAgICAgICAgICAgICAgICBtc2cgKz0gIiBtYXg6ICU0ZCIgJSB0bXBfbWF4CisgICAgICAgICAgICAgICAgbG9nX3RzKG1zZykKKworICAgICAgICAgICAgICAgICMgVHJhY2sgbWluaW11bSB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIHRtcF9taW4gPCBhY2tfbWluOgorICAgICAgICAgICAgICAgICAgICAgICAgYWNrX21pbiA9IHRtcF9taW4KKworICAgICAgICAgICAgICAgICMgVHJhY2sgc21hbGxlc3QgbWF4IHZhbHVlCisgICAgICAgICAgICAgICAgbWF4X2xpc3QuYXBwZW5kKHRtcF9tYXgpCisKKyAgICAgICAgICAgICAgICBhY2tfYXZnWzBdICs9IHRtcF9hdmdbMF0KKyAgICAgICAgICAgICAgICBhY2tfYXZnWzFdICs9IHRtcF9hdmdbMV0KKworICAgICAgICB0ID0gdGltZS50aW1lKCktdAorICAgICAgICBsb2dfdHMoIkN5Y2xpY3Rlc3QgY29tcGxldGVkLiBBY3R1YWwgZXhlY3V0aW9uIHRpbWU6IiwKKyAgICAgICAgICAgICAgIHVzMmhtc19zdHIodCoxMDAwMDAwKSkKKyAgICAgICAgbG9nKCkKKyAgICAgICAgc2V0X2h1bmdfdG1vKG9yaWdfdG1vKQorCisgICAgICAgIHJldHVybiBhY2tfbWluLCBmbG9hdChhY2tfYXZnWzBdKS9hY2tfYXZnWzFdLCBnZW5fbWlubWF4X2xpc3QobWF4X2xpc3QpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIGN5Y2xpY3Rlc3RfcnVubmVyOgorICAgICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgc2VxX25vLCBucl9vZl90ZXN0cywgbmFtZSwgc3RyZXNzcGFyYW1zKToKKworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ190ZXN0X2hlYWRlcihzZXFfbm8sIG5yX29mX3Rlc3RzLCBuYW1lKQorCisgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RhcnRfc3RyZXNzKCpzdHJlc3NwYXJhbXMpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJtX21pbiwgYm1fYXZnLCBibV9tYXhfbGlzdCA9IHJ1bl9jeWNsaWN0ZXN0X3N1aXRlKCkKKworICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3N0cmVzcyhwKQorCisgICAgICAgICAgICAgICAgICAgICAgICBibV9tYXggPSBibV9tYXhfbGlzdFstMV0KKworICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiTWluOiAlZCB1cyIgJSBibV9taW4pCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkF2ZzogJS4xZiB1cyIgJSBibV9hdmcpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIk1heDogJWQgdXMiICUgYm1fbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiTWF4IGxpc3Q6ICIsIGJtX21heF9saXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiUEFTUyIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCB0Y19uYW1lKG5hbWUpLCAiW01pbi91cyxBdmcvdXMsTWF4L3VzXToiLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVkLCUuMWYsJWQiICUgKGJtX21pbixibV9hdmcsIGJtX21heCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJQQVNTOiIsIHRjX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiRXhjZXB0aW9uISIpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coKQorICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJUcmFjZWJhY2s6IiwgdHJhY2ViYWNrLmZvcm1hdF9leGMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIldEOiAiLCBvcy5nZXRjd2QoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygpCisgICAgICAgICAgICAgICAgICAgICAgICBsb2coIkZBSUwiKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJGQUlMOiIsIHRjX25hbWUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3J1bm5lciA9IGN5Y2xpY3Rlc3RfcnVubmVyKCkKKwordGVzdHMgPSAoKCJub19zdHJlc3MiLCBbXSksCisgICAgICAgICAoImNwdSIsICBbImNwdSJdKSwKKyAgICAgICAgICgiaGRkIiwgIFsiaGRkIl0pLAorICAgICAgICAgKCJpbyIsICAgWyJpbyJdKSwKKyAgICAgICAgICgidm0iLCAgIFsidm0iXSksCisgICAgICAgICAoImZ1bGwiLCBbImlvIiwgImNwdSIsICJoZGQiLCAidm0iXSksCisgICAgICAgICApCisKK25yX29mX3Rlc3RzID0gbGVuKHRlc3RzKQorZm9yIHNlcV9ubywgcGFyYW1zIGluIGVudW1lcmF0ZSh0ZXN0cywgc3RhcnQ9MSk6CisgICAgICAgIHJ1bm5lci5ydW5fdGVzdChzZXFfbm8sIG5yX29mX3Rlc3RzLCAqcGFyYW1zKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2ZDNlMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9maWxlcy9ydW4tcHRlc3QKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKKworcHl0aG9uIC4vcnRfYm1hcmsucHkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL2h3bGF0ZGV0ZWN0XzAuOTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMxOWViOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9od2xhdGRldGVjdF8wLjkyLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiSGFyZHdhcmUgbGF0ZW5jeSBkZXRlY3RvciIKK0RFU0NSSVBUSU9OID0gIlB5dGhvbiB1dGlsaXR5IGZvciBjb250cm9sbGluZyB0aGUga2VybmVsIGhhcmR3YXJlIGxhdGVuY3kgZGV0ZWN0aW9uIG1vZHVsZSAoaHdsYXRfZGV0ZWN0b3Iua28pLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L2Nscmt3bGxtcy9ydC10ZXN0cy5naXQiCitTRUNUSU9OID0gInRlc3RzIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIgorCityZXF1aXJlIHJ0LXRlc3RzLmluYworCitFWFRSQV9PRU1BS0UgKz0gIlBZTElCPSR7bGliZGlyfS9weXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0vZGlzdC1wYWNrYWdlcyIKKworZG9fY29tcGlsZSgpIHsKKwlvZV9ydW5tYWtlIGh3bGF0ZGV0ZWN0Cit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgICAgIG9lX3J1bm1ha2UgaW5zdGFsbF9od2xhdGRldGVjdCBERVNURElSPSR7RH0gU0JJTkRJUj0ke3NiaW5kaXJ9IFwKKwkgICAgICAgICAgIE1BTkRJUj0ke21hbmRpcn0gSU5DTFVERURJUj0ke2luY2x1ZGVkaXJ9Cit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059L2Rpc3QtcGFja2FnZXMvaHdsYXRkZXRlY3QucHkiCitSREVQRU5EU18ke1BOfSA9ICJweXRob24gcHl0aG9uLXN1YnByb2Nlc3MgcHl0aG9uLXRleHR1dGlscyIKK1JSRUNPTU1FTkRTXyR7UE59ID0gImtlcm5lbC1tb2R1bGUtaHdsYXQtZGV0ZWN0b3IiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtcnQvcnQtdGVzdHMvcnQtdGVzdHMuaW5jIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFkYjEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzLmluYwpAQCAtMCwwICsxLDE5IEBACisjIFZlcnNpb24gdjAuOTIKK1BWID0gIjAuOTIiCitTUkNSRVYgPSAiNWY5ZjFlM2ZlMzI3NDQwYTlkNDA1ZjRhZjhmZWIxNmZmN2E5MDllYiIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvY2xya3dsbG1zL3J0LXRlc3RzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXJ0LXRlc3RzLUFsbG93LWZvci11c2VyLXNwZWNpZmllZC1QWUxJQi5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXJ0LXRlc3RzLUJyZWFrLW91dC1pbnN0YWxsX2h3bGF0ZGV0ZWN0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2hhY2tiZW5jaC1maXgtZXJyb3ItY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vTWFrZWZpbGUtZml4LWd6aXAtY29tbWFuZC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcmUtaW5zdGFsbC1mYWlsdXJlLnBhdGNoIFwKKyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworIyBuZWVkIHRvIGFwcGVuZCBydC10ZXN0cycgZGVmYXVsdCBDRkxBR1MgdG8gb3VycworQ0ZMQUdTICs9ICItSSR7U30vc3JjL2luY2x1ZGUgLURfR05VX1NPVVJDRSAtV2FsbCAtV25vLW5vbm51bGwiCisKKyMgY2FsbGluZyAndW5hbWUgLW0nIGlzIGJyb2tlbiBvbiBjcm9zc2J1aWxkcworRVhUUkFfT0VNQUtFID0gIk5VTUE9MCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiIGIvbWV0YS9yZWNpcGVzLXJ0L3J0LXRlc3RzL3J0LXRlc3RzXzAuOTIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJlMmY2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1ydC9ydC10ZXN0cy9ydC10ZXN0c18wLjkyLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiUmVhbC1UaW1lIHByZWVtcHRpb24gdGVzdGNhc2VzIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly9ydC53aWtpLmtlcm5lbC5vcmcvaW5kZXgucGhwL0N5Y2xpY3Rlc3QiCitTRUNUSU9OID0gInRlc3RzIgorREVQRU5EUyA9ICJsaW51eC1saWJjLWhlYWRlcnMgdmlydHVhbC9saWJjIgorTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTc1MTQxOTI2MGFhOTU0NDk5ZjdhYmFhYmFhODgyYmJlIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9jeWNsaWN0ZXN0L2N5Y2xpY3Rlc3QuYztiZWdpbmxpbmU9NztlbmRsaW5lPTk7bWQ1PWU3NjhiOGRhNDQ1NTVmZTYzZjY1ZTVjNDk3ODQ0Y2I1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9waV90ZXN0cy9waV9zdHJlc3MuYztiZWdpbmxpbmU9NjtlbmRsaW5lPTE5O21kNT1iZDQyNmE2MzRhNDNlYzYxMmU5ZmJmMTI1ZGZjYzk0OSIKKworcmVxdWlyZSBydC10ZXN0cy5pbmMKK2luaGVyaXQgcHRlc3QKKworU1JDX1VSSSArPSAiZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICBmaWxlOi8vcnRfYm1hcmsucHkgXAorICAgICAgICAgICAiCisjIERvIG5vdCBpbnN0YWxsIGh3bGF0ZGV0ZWN0CitFWFRSQV9PRU1BS0UgKz0gIlBZTElCPScnIgorCitkb19pbnN0YWxsKCkgeworICAgICAgICBvZV9ydW5tYWtlIGluc3RhbGwgREVTVERJUj0ke0R9IFNCSU5ESVI9JHtzYmluZGlyfSBNQU5ESVI9JHttYW5kaXJ9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgICAgICBjcCAke1dPUktESVJ9L3J0X2JtYXJrLnB5ICR7RH0ke1BURVNUX1BBVEh9Cit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICIgc3RyZXNzIHB5dGhvbiBweXRob24tc3VicHJvY2VzcyBweXRob24tbXVsdGlwcm9jZXNzaW5nIHB5dGhvbi1kYXRldGltZSBweXRob24tcmUgcHl0aG9uLWxhbmciCisKK0ZJTEVTXyR7UE59ICs9ICIke3ByZWZpeH0vc3JjL2JhY2tmaXJlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vZ3RrLWVuZ2luZXMvZ3RrLXNhdG8tZW5naW5lLmluYyBiL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUzN2ZmMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZS5pbmMKQEAgLTAsMCArMSwyMyBAQAorU1VNTUFSWSA9ICJTYXRvIHRoZW1lIGVuZ2luZSBmb3IgR1RLKyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuby1oYW5kLmNvbSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xICYgTEdQTHYyKyIKKworU0VDVElPTiA9ICJ4MTEvYmFzZSIKK0RFUEVORFMgPSAiZ3RrKyIKK1JERVBFTkRTX2d0ay10aGVtZS1zYXRvID0gImd0ay1zYXRvLWVuZ2luZSIKKworUEFDS0FHRVMgKz0gImd0ay10aGVtZS1zYXRvIgorRklMRVNfJHtQTn0gPSAiJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLyouc28gIgorRklMRVNfJHtQTn0tZGV2ID0gIiR7bGliZGlyfS9ndGstMi4wLyovZW5naW5lcy8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIgJHtsaWJkaXJ9L2d0ay0yLjAvKi9lbmdpbmVzLy5kZWJ1ZyIKK0ZJTEVTX2d0ay10aGVtZS1zYXRvID0gIiR7ZGF0YWRpcn0vaWNvbnMgJHtkYXRhZGlyfS90aGVtZXMiCisKK2luaGVyaXQgYXV0b3Rvb2xzLWJyb2tlbnNlcCBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisJZm9yIGkgaW4gYGxzIGd0ay1jb21tb25gOyBkbworCQlsbiAtc2YgLi4vZ3RrLWNvbW1vbi8kaSBndGsyLWVuZ2luZS8kaQorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2d0ay1lbmdpbmVzL2d0ay1zYXRvLWVuZ2luZV9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNGQ5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9ndGstZW5naW5lcy9ndGstc2F0by1lbmdpbmVfZ2l0LmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgZ3RrLXNhdG8tZW5naW5lLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL3NhdG8tdXRpbHMuaDtlbmRsaW5lPTI0O21kNT03MDhmMjhjZmU3ZmUwMjhkNDk3YWFmNDM4OWI4MGI2MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvc2F0by1tYWluLmM7ZW5kbGluZT0yNDttZDU9YjVlNWRkZGViY2E1NzAyNzViZWNiNTFiNTI2ZTRjNWEiCisKK1NSQ1JFViA9ICI0NzQwYWQ4ZDUzYWJhNDM2OGNlM2UwM2IwNmNmZGM2OWViODZkY2RjIgorUFYgPSAiMC4zLjMrZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3F2Z2EnLCAnLS13aXRoLW1vZGU9cXZnYScsICcnLGQpfSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1kZXYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZhNjlkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8tZGV2LmJiCkBAIC0wLDAgKzEsNyBAQAorcmVxdWlyZSBjb3JlLWltYWdlLXNhdG8uYmIKKworREVTQ1JJUFRJT04gPSAiSW1hZ2Ugd2l0aCBTYXRvIGZvciBkZXZlbG9wbWVudCB3b3JrLiBJdCBpbmNsdWRlcyBldmVyeXRoaW5nIFwKK3dpdGhpbiBjb3JlLWltYWdlLXNhdG8gcGx1cyBhIG5hdGl2ZSB0b29sY2hhaW4sIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGFuZCBcCit0ZXN0aW5nIGxpYnJhcmllcywgcHJvZmlsaW5nIGFuZCBkZWJ1ZyBzeW1ib2xzLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gImRldi1wa2dzIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9pbWFnZXMvY29yZS1pbWFnZS1zYXRvLXNkay5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjgzNmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by1zZGsuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBjb3JlLWltYWdlLXNhdG8uYmIKKworREVTQ1JJUFRJT04gPSAiSW1hZ2Ugd2l0aCBTYXRvIHN1cHBvcnQgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIHdpdGhpbiBcCitjb3JlLWltYWdlLXNhdG8gcGx1cyBtZXRhLXRvb2xjaGFpbiwgZGV2ZWxvcG1lbnQgaGVhZGVycyBhbmQgbGlicmFyaWVzIHRvIFwKK2Zvcm0gYSBzdGFuZGFsb25lIFNESy4iCisKK1FUNFBLRyA9ICJxdDQtcGtncyIKK1FUNFBLR19taXBzNjQgPSAiIgorUVQ0UEtHX21pcHM2NG4zMiA9ICIiCisKK0lNQUdFX0ZFQVRVUkVTICs9ICJkZXYtcGtncyB0b29scy1zZGsgJHtRVDRQS0d9IFwKKwl0b29scy1kZWJ1ZyBlY2xpcHNlLWRlYnVnIHRvb2xzLXByb2ZpbGUgdG9vbHMtdGVzdGFwcHMgZGVidWctdHdlYWtzIHNzaC1zZXJ2ZXItb3BlbnNzaCIKKworSU1BR0VfSU5TVEFMTCArPSAia2VybmVsLWRldnNyYyIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vaW1hZ2VzL2NvcmUtaW1hZ2Utc2F0by5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyNDZkMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2ltYWdlcy9jb3JlLWltYWdlLXNhdG8uYmIKQEAgLTAsMCArMSwxMSBAQAorREVTQ1JJUFRJT04gPSAiSW1hZ2Ugd2l0aCBTYXRvLCBhIG1vYmlsZSBlbnZpcm9ubWVudCBhbmQgdmlzdWFsIHN0eWxlIGZvciBcCittb2JpbGUgZGV2aWNlcy4gVGhlIGltYWdlIHN1cHBvcnRzIFgxMSB3aXRoIGEgU2F0byB0aGVtZSwgUGltbGljbyBcCithcHBsaWNhdGlvbnMsIGFuZCBjb250YWlucyB0ZXJtaW5hbCwgZWRpdG9yLCBhbmQgZmlsZSBtYW5hZ2VyLiIKKworSU1BR0VfRkVBVFVSRVMgKz0gInNwbGFzaCBwYWNrYWdlLW1hbmFnZW1lbnQgeDExLWJhc2UgeDExLXNhdG8gc3NoLXNlcnZlci1kcm9wYmVhciBod2NvZGVjcyIKKworTElDRU5TRSA9ICJNSVQiCisKK2luaGVyaXQgY29yZS1pbWFnZQorCitJTUFHRV9JTlNUQUxMICs9ICJwYWNrYWdlZ3JvdXAtY29yZS14MTEtc2F0by1nYW1lcyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9maWxlcy9sZWFmcGFkLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMmQ1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvbGVhZnBhZC5kZXNrdG9wCkBAIC0wLDAgKzEsMTAgQEAKK1tEZXNrdG9wIEVudHJ5XQorTmFtZT1Ob3RlcworRXhlYz0vdXNyL2Jpbi9sZWFmcGFkCitDb21tZW50PVRleHQgRWRpdG9yCitJY29uPWFjY2Vzc29yaWVzLXRleHQtZWRpdG9yCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HVEs7VXRpbGl0eTtUZXh0RWRpdG9yOworWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitTdGFydHVwTm90aWZ5PXRydWUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL2xlYWZwYWQvZmlsZXMvb3dsLW1lbnUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmY3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2ZpbGVzL293bC1tZW51LnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW5hYmxlIGZlYXR1cmVdCisKKy0tLSB0bXAvc3JjL21lbnUuYy5vcmlnCTIwMDctMDQtMjMgMTI6MDg6NDEuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy9tZW51LmMJMjAwNy0wNC0yMyAxMjowODo0MS4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xNTIsNyArMTUyLDcgQEAKKyAJfQorIAkKKyAJYWNjZWxfZ3JvdXAgPSBndGtfYWNjZWxfZ3JvdXBfbmV3KCk7CistCWlmYWN0b3J5ID0gZ3RrX2l0ZW1fZmFjdG9yeV9uZXcoR1RLX1RZUEVfTUVOVV9CQVIsICI8bWFpbj4iLCBhY2NlbF9ncm91cCk7CisrCWlmYWN0b3J5ID0gZ3RrX2l0ZW1fZmFjdG9yeV9uZXcoR1RLX1RZUEVfTUVOVSwgIjxtYWluPiIsIGFjY2VsX2dyb3VwKTsKKyAJZ3RrX2l0ZW1fZmFjdG9yeV9zZXRfdHJhbnNsYXRlX2Z1bmMoaWZhY3RvcnksIG1lbnVfdHJhbnNsYXRlLCBOVUxMLCBOVUxMKTsKKyAJZ3RrX2l0ZW1fZmFjdG9yeV9jcmVhdGVfaXRlbXMoaWZhY3RvcnksIG5tZW51X2l0ZW1zLCBtZW51X2l0ZW1zLCBOVUxMKTsKKyAJZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyh3aW5kb3cpLCBhY2NlbF9ncm91cCk7CisKKy0tLSB0bXAvc3JjL3dpbmRvdy5jLm9yaWcJMjAwNy0wNC0yMyAxMjoxNDowNy4wMDAwMDAwMDAgKzAxMDAKKysrKyB0bXAvc3JjL3dpbmRvdy5jCTIwMDctMDQtMjMgMTI6MTQ6MDcuMDAwMDAwMDAwICswMTAwCitAQCAtMTgsNiArMTgsOCBAQAorICAqLworIAorICNpbmNsdWRlICJsZWFmcGFkLmgiCisrI2luY2x1ZGUgPGxpYm93bC9vd2x3aW5kb3dtZW51Lmg+CisrCisgLyoKKyBzdGF0aWMgdm9pZCBjYl9zY3JvbGxfZXZlbnQoR3RrQWRqdXN0bWVudCAqYWRqLCBHdGtXaWRnZXQgKnZpZXcpCisgeworQEAgLTUyLDcgKzU0LDYgQEAKKyAJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUih3aW5kb3cpLCB2Ym94KTsKKyAJCisgCW1lbnViYXIgPSBjcmVhdGVfbWVudV9iYXIod2luZG93KTsKKy0JZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1godmJveCksIG1lbnViYXIsIEZBTFNFLCBGQUxTRSwgMCk7CisgCQorIAlzdyA9IGd0a19zY3JvbGxlZF93aW5kb3dfbmV3KE5VTEwsIE5VTEwpOworIAlndGtfc2Nyb2xsZWRfd2luZG93X3NldF9wb2xpY3koR1RLX1NDUk9MTEVEX1dJTkRPVyhzdyksCisKKy0tLSB0bXAvc3JjL21haW4uYy5vcmlnCTIwMDctMDQtMjMgMTI6MTU6MDMuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy9tYWluLmMJMjAwNy0wNC0yMyAxMjoxNTowMy4wMDAwMDAwMDAgKzAxMDAKK0BAIC0yNDQsNiArMjQ0LDcgQEAKKyAJQ29uZiAqY29uZjsKKyAJR3RrSXRlbUZhY3RvcnkgKmlmYWN0b3J5OworIAlnY2hhciAqc3RkaW5fZGF0YSA9IE5VTEw7CisrCUd0a1dpZGdldCAqbWVudTsKKyAJCisgCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FMRURJUik7CisgCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KFBBQ0tBR0UsICJVVEYtOCIpOworQEAgLTI5Myw3ICsyOTQsMTAgQEAKKyAJCWNvbmYtPmF1dG9pbmRlbnQpOworIAkKKyAJZ3RrX3dpZGdldF9zaG93X2FsbChwdWItPm13LT53aW5kb3cpOworKwlvd2xfc2V0X3dpbmRvd19tZW51IChHVEtfV0lORE9XKHB1Yi0+bXctPndpbmRvdyksCisrCQkJICAgICBHVEtfTUVOVShwdWItPm13LT5tZW51YmFyKSk7CisrCQorIAlnX2ZyZWUoY29uZi0+Zm9udG5hbWUpOworIAlnX2ZyZWUoY29uZik7CisgCQorCistLS0gdG1wL3NyYy9NYWtlZmlsZS5hbS5vcmlnCTIwMDctMDQtMjMgMTI6MTc6NTQuMDAwMDAwMDAwICswMTAwCisrKysgdG1wL3NyYy9NYWtlZmlsZS5hbQkyMDA3LTA0LTIzIDEyOjE3OjU0LjAwMDAwMDAwMCArMDEwMAorQEAgLTI3LDQgKzI3LDQgQEAKKyAJaTE4bi5oCisgCisgbGVhZnBhZF9DRkxBR1MgID0gJChHVEtfQ0ZMQUdTKSAkKEdOT01FUFJJTlRfQ0ZMQUdTKQorLWxlYWZwYWRfTERBREQgICA9ICQoR1RLX0xJQlMpICQoSU5UTExJQlMpICQoR05PTUVQUklOVF9MSUJTKQorK2xlYWZwYWRfTERBREQgICA9ICQoR1RLX0xJQlMpICQoSU5UTExJQlMpICQoR05PTUVQUklOVF9MSUJTKSAtbG93bApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbGVhZnBhZC9sZWFmcGFkXzAuOC4xOC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MTUxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9sZWFmcGFkL2xlYWZwYWRfMC44LjE4LjEuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJTaW1wbGUgR1RLKyBUZXh0IEVkaXRvciIKK0hPTUVQQUdFID0gImh0dHA6Ly90YXJvdC5mcmVlc2hlbGwub3JnL2xlYWZwYWQvIgorCitMSUNFTlNFID0gIkdQTHYyICYgR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2xlYWZwYWQuaDtlbmRsaW5lPTIwO21kNT1kM2Q2YTg5ZjVlNjFlOGIxM2JkZWE1Mzc1MTFiYTFmYSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdXRpbHMuYztlbmRsaW5lPTIwO21kNT0wZDJjYzY1ODRiYTMyMDI0NDhiYjI3NGY2MjczOTU3MSIKKworREVQRU5EUyA9ICJndGsrIGludGx0b29sLW5hdGl2ZSBsaWJvd2wiCisjIFRoZSBsaWJvd2wgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbGVhZnBhZC5kZXNrdG9wIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjU0YTcyZmM2NzUwNWUzYWE1Mjg4NGM3MjljZDdiOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTU5ZDIyYWUwN2YyMjgwM2JjNjZmZjQwZDM3M2E4NTQ1MzJhNmU0NzMyNjgwYmY4YTk2YTNmYmNiOWY4MGEyYyIKK1BSID0gInIyIgorCitTUkNfVVJJX2FwcGVuZF9wb2t5ID0gIiBmaWxlOi8vb3dsLW1lbnUucGF0Y2g7YXBwbHk9eWVzICIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitFWFRSQV9PRUNPTkYgPSAiIC0tZW5hYmxlLWNob29zZXIgLS1kaXNhYmxlLWVtYWNzIC0tZGlzYWJsZS1wcmludCIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfQorICAgICAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKyAgICAgICAgaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vbGVhZnBhZC5kZXNrdG9wICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL2xlYWZwYWQuZGVza3RvcCIKKworUEFDS0FHRVMgKz0gImxlYWZwYWQtc3RvY2staWNvbnMiCitGSUxFU19sZWFmcGFkLXN0b2NrLWljb25zID0gIiR7ZGF0YWRpcn0vaWNvbnMvaGljb2xvci8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL2xpYm93bC9saWJvd2xfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYzQ3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9saWJvd2wvbGlib3dsX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIk9wZW5lZEhhbmQgV2lkZ2V0IExpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dscGFuZWQuaDtlbmRsaW5lPTIwO21kNT03ZmVmODQ0YzRjYzAxYjEwNTQxYTdhYjZhYjU5NzFhZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dsdHJlZW1vZGVsc2xpY2UuaDtlbmRsaW5lPTIwO21kNT1hNTQyMWYyY2RhZThkZWJlNWU0YzQ4YzA5YTAyYmViOSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJvd2wvb3dsY29sb3Vyc3dhdGNoLmg7ZW5kbGluZT0yNDttZDU9MDYzYzQxNWM1ODcxOWQ1MzY5OTBjYThmNjA2YjU3MzAiCisKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAiZ3RrKyIKK1NSQ1JFViA9ICI2ZWJjOGFjOGY4NTc1Mjc4ZGQ0MGE1MzVjYWRlZmEyNjM3NGU0NGIxIgorUFYgPSAiMC4xK2dpdCR7U1JDUFZ9IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFJlcXVpcmVzIGdkay9nZGt4Lmggd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9maWxlcy9uby1oYW5kZWQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI1Njk0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWNvbmZpZy1ndGsvZmlsZXMvbm8taGFuZGVkLnBhdGNoCkBAIC0wLDAgKzEsMzUgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGFwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMJKHJldmlzaW9uIDE2MTQpCisrKysgYXBwZWFyYW5jZS9tYi1hcHBlYXJhbmNlLmMJKHdvcmtpbmcgY29weSkKK0BAIC0zMDAsMTEgKzMwMCwxMyBAQAorICAgICBndGtfZm9udF9idXR0b25fc2V0X2ZvbnRfbmFtZSAoR1RLX0ZPTlRfQlVUVE9OIChmb250X2J1dHRvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29uZl92YWx1ZV9nZXRfc3RyaW5nICh2YWx1ZSkpOworICAgfSBlbHNlIGlmIChzdHJjbXAgKGtleSwgSEFOREVEX0tFWSkgPT0gMCkgeworKyNpZiAwCisgICAgIEdFbnVtVmFsdWUgKmU7CisgICAgIGUgPSBnX2VudW1fZ2V0X3ZhbHVlX2J5X25hbWUgKGdfdHlwZV9jbGFzc19yZWYgKEdUS19UWVBFX0NPUk5FUl9UWVBFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbmZfdmFsdWVfZ2V0X3N0cmluZyAodmFsdWUpKTsKKyAgICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2ZSAoR1RLX1RPR0dMRV9CVVRUT04gKGhhbmRlZF9jaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPnZhbHVlID09IEdUS19DT1JORVJfVE9QX1JJR0hUKTsKKysjZW5kaWYKKyAgIH0KKyB9CisgCitAQCAtMzk1LDEyICszOTcsMTMgQEAKKyAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChhbGlnbiksIGZvbnRfYnV0dG9uKTsKKyAKKyAgIC8qIExlZnQvUmlnaHQgSGFuZGVkICovCistICAKKysjaWYgMAorICAgZnJhbWUgPSBuZXdfZnJhbWUgKF8oIk9yaWVudGF0aW9uIiksICZhbGlnbik7CisgICBndGtfYm94X3BhY2tfc3RhcnQgKEdUS19CT1ggKGJveCksIGZyYW1lLCBUUlVFLCBUUlVFLCAwKTsKKyAgIGhhbmRlZF9jaGVjayA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMgKF8oIl9MZWZ0LWhhbmRlZCIpKTsKKyAgIGdfc2lnbmFsX2Nvbm5lY3QgKGhhbmRlZF9jaGVjaywgInRvZ2dsZWQiLCBHX0NBTExCQUNLIChvbl9oYW5kZWRfc2V0KSwgTlVMTCk7CisgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoYWxpZ24pLCBoYW5kZWRfY2hlY2spOworKyNlbmRpZgorIAorICAgZ2NvbmZfY2xpZW50X2FkZF9kaXIgKGdjb25mLCBJTlRFUkZBQ0VfRElSLCBHQ09ORl9DTElFTlRfUFJFTE9BRF9PTkVMRVZFTCwgTlVMTCk7CisgICBnX3NpZ25hbF9jb25uZWN0IChnY29uZiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLIChvbl9nY29uZl92YWx1ZV9jaGFuZ2VkKSwgTlVMTCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1jb25maWctZ3RrL21hdGNoYm94LWNvbmZpZy1ndGtfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjczYTRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtY29uZmlnLWd0ay9tYXRjaGJveC1jb25maWctZ3RrX2dpdC5iYgpAQCAtMCwwICsxLDIzIEBACitTVU1NQVJZID0gIk1hdGNoYm94IEdUSysgdGhlbWUgY29uZmlndXJhdGlvbiBhcHBsaWNhdGlvbiIKK0hPTUVQQUdFID0gImh0dHA6Ly9tYXRjaGJveC1wcm9qZWN0Lm9yZyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2FwcGVhcmFuY2UvbWItYXBwZWFyYW5jZS5jO2VuZGxpbmU9MjU7bWQ1PWVhOTIzMzNjZjhhNjgwMjYzOWQ2MmQ4NzRjMTE0YTI4IgorCitERVBFTkRTID0gImdjb25mIGd0aysiCitSREVQRU5EU18ke1BOfSA9ICJzZXR0aW5ncy1kYWVtb24iCisKK1NSQ1JFViA9ICIzZWQ3NGRmYjdjNTdiZTA4OGE1YWIzNmU0NDZjMGNjZGU5ZmExMDI4IgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSBcCisgICAgICAgIGZpbGU6Ly9uby1oYW5kZWQucGF0Y2g7c3RyaXBsZXZlbD0wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIHNldHRpbmdzLWRhZW1vbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1kZXNrdG9wLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc5Y2JiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC1zYXRvL21hdGNoYm94LWRlc2t0b3Atc2F0b19naXQuYmIKQEAgLTAsMCArMSwyMiBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBkZXNrdG9wIGZvbGRlcnMgZm9yIHRoZSBTYXRvIGVudmlyb25tZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiIKKworU0VDVElPTiA9ICJ4MTEiCitERVBFTkRTID0gIiIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtY29tbW9uIgorCitTUkNSRVYgPSAiODEwYjBiMDhlYjc5ZTQ2ODUyMDJkYTJlYzM0N2I5OTBiYjQ2N2UwNyIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKK1BSID0gInIxIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnLyR7QlBOfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtZGVza3RvcC9tYXRjaGJveC1kZXNrdG9wX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4ZDJlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWRlc2t0b3AvbWF0Y2hib3gtZGVza3RvcF9naXQuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCBXaW5kb3cgTWFuYWdlciBEZXNrdG9wIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05NGQ1NWQ1MTJhOWJhMzZjYWE5YjdkZjA3OWJhZTE5ZiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9saWJ0YWt1L2VnZ3NlcXVlbmNlLmg7ZW5kbGluZT0yMDttZDU9YjkxZjY4Zjc2NDJhMTQ1OWZhMWY0YzlkZjk0YThmMTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Rlc2t0b3AuYztlbmRsaW5lPTIwO21kNT0zNmM5YmYyOTVlNjAwN2YzNDIzMDk1ZjQwNWFmNWEyZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MTk7bWQ1PTIwNDQyNDRmOTdhMTk1YzI1YjdkYzYwMmFjN2U5YTAwIgorCitERVBFTkRTID0gImd0aysgc3RhcnR1cC1ub3RpZmljYXRpb24gZGJ1cyIKK1NFQ1RJT04gPSAieDExL3dtIgorU1JDUkVWID0gIjcxZTNlNmUwNDI3MWU5ZDVhMTRmMWMyMzFlZjEwMGM3ZjMyMDEzNGQiCitQViA9ICIyLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59LTIiCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiAtLXdpdGgtZGJ1cyIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvODBtYXRjaGJveGtleWJvYXJkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZjE4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9maWxlcy84MG1hdGNoYm94a2V5Ym9hcmQuc2gKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisKKy4gL2V0Yy9mb3JtZmFjdG9yL2NvbmZpZworCitDTUQ9IiIKKworaWYgWyAiJEhBVkVfS0VZQk9BUkQiID0gIjAiIF07IHRoZW4KKyAgICBDTUQ9Im1hdGNoYm94LWtleWJvYXJkIC1kIgorZWxpZiBbICIkRElTUExBWV9DQU5fUk9UQVRFIiA9ICIxIiBdOyB0aGVuCisgICAgaWYgWyAiJEhBVkVfS0VZQk9BUkRfUE9SVFJBSVQiID0gIjEiIC1hICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiID0gIjAiIF07IHRoZW4KKyAgICAgICAgQ01EPSJtYXRjaGJveC1rZXlib2FyZCAtZCAtbyBsYW5kc2NhcGUiCisgICAgZWxpZiBbICIkSEFWRV9LRVlCT0FSRF9MQU5EU0NBUEUiID0gIjEiIC1hICIkSEFWRV9LRVlCT0FSRF9QT1JUUkFJVCIgPSAiMCIgXTsgdGhlbgorICAgICAgICBDTUQ9Im1hdGNoYm94LWtleWJvYXJkIC1kIC1vIHBvcnRyYWl0IgorICAgIGZpCitmaQorCitpZiBbICIkQ01EIiBdOyB0aGVuCisgICAgIyBEZWxheSB0byBtYWtlIHN1cmUgdGhlIHdpbmRvdyBtYW5hZ2VyIGlzIGFjdGl2ZQorICAgICMgYnkgd2FpdGluZyBmb3IgdGhlIGRlc2t0b3AgdG8gc2F5IGl0cyBmaW5pc2hlZCBsb2FkaW5nCisgICAgZGJ1cy13YWl0IG9yZy5tYXRjaGJveF9wcm9qZWN0LmRlc2t0b3AgTG9hZGVkICYmICRDTUQgJgorZmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LWtleWJvYXJkL2ZpbGVzL3NpbmdsZS1pbnN0YW5jZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGI2YzQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvZmlsZXMvc2luZ2xlLWluc3RhbmNlLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK011bHRpcGxlIG1hdGNoYm94LWtleWJvYXJkIGluc3RhbmNlcyB3b3VsZCBvY2N1cHkgd2hvbGUgc2NyZWVuIGFuZCBjYXVzZSBYCit3aW5kb3cgc2VnZmF1bHQoQnVnIDUwOSkuIE1ha2luZyBtYXRjaGJveC1rZXlib2FyZCBzaW5nbGV0b24gaXMgb25lIHdvcmsKK2Fyb3VuZC4KKworVGhpcyBwYXRjaCBhbGxvdyBvbmx5IG9uZSBpbnN0YW5jZSBvZiBtYXRjaGJveC1rZXlib2FyZCBiYXNlZCBvbiBzb21lIG1lY2hhbmlzbQoraW4gbWF0Y2hib3gtZGVza3RvcC4gSW4gZnV0dXJlLCBhbiBhcHBsZXQgYW5kIEdUSy1JTSBtb2R1bGVzIGluCittYXRjaGJveC1rZXlib2FyZCBjYW4gYmUgdXNlZCB0byBhdXRvbWF0aWNhbGx5IG1hcC91bm1hcCB0aGUgdmlydHVhbCBrZXlib2FyZAorb24gZGVtYW5kLgorCitTaWduZWQtb2ZmLWJ5OiBaaGFpIEVkd2luIDxlZHdpbi56aGFpQGludGVsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmQuZGVza3RvcAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG1hdGNoYm94LWtleWJvYXJkLm9yaWcvbWF0Y2hib3gta2V5Ym9hcmQuZGVza3RvcAkyMDEwLTEyLTIyIDIwOjQxOjQwLjAwMDAwMDAwMCArMDgwMAorKysrIG1hdGNoYm94LWtleWJvYXJkL21hdGNoYm94LWtleWJvYXJkLmRlc2t0b3AJMjAxMC0xMi0yMiAyMDo0MjoxMi4wMDAwMDAwMDAgKzA4MDAKK0BAIC02LDMgKzYsNSBAQAorIEljb249bWF0Y2hib3gta2V5Ym9hcmQucG5nCisgQ2F0ZWdvcmllcz1QYW5lbDtVdGlsaXR5O01CCisgWC1NQi1JTlBVVC1NRUNIQU5TSU09VHJ1ZQorK1gtTUItU2luZ2xlSW5zdGFuY2U9dHJ1ZQorK1N0YXJ0dXBOb3RpZnk9dHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gta2V5Ym9hcmQvbWF0Y2hib3gta2V5Ym9hcmRfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzIxZDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1rZXlib2FyZC9tYXRjaGJveC1rZXlib2FyZF9naXQuYmIKQEAgLTAsMCArMSw1NiBAQAorU1VNTUFSWSA9ICJNYXRjaGJveCB2aXJ0dWFsIGtleWJvYXJkIGZvciBYMTEiCitIT01FUEFHRSA9ICJodHRwOi8vbWF0Y2hib3gtcHJvamVjdC5vcmciCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKK1NFQ1RJT04gPSAieDExIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL21hdGNoYm94LWtleWJvYXJkLmg7ZW5kbGluZT0xNzttZDU9OWQ2NTg2YzY5ZTRhOTI2ZjNjYjBiNDQyNWYyNGJhM2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXBwbGV0L2FwcGxldC5jO2VuZGxpbmU9MTg7bWQ1PTRhMGY3MjE3MjQ3NDZiMTRkOTViNTFkZGQ0MmI5NWU3IgorCitERVBFTkRTID0gImxpYmZha2VrZXkgZXhwYXQgbGlieGZ0IGd0aysgbWF0Y2hib3gtcGFuZWwtMiIKKworU1JDUkVWID0gIjIxN2YxYmZlMTRjNDFjZjdlMjkxZDA0YTYzYWEyZDc5Y2MxM2QwNjMiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCitQUiA9ICJyNCIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy8ke0JQTn07YnJhbmNoPW1hdGNoYm94LWtleWJvYXJkLTAtMSBcCisgICAgICAgICAgIGZpbGU6Ly9zaW5nbGUtaW5zdGFuY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vODBtYXRjaGJveGtleWJvYXJkLnNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dCBndGstaW1tb2R1bGVzLWNhY2hlIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBsaWJ4ZnQsIGxpYmZha2VrZXkgYW5kIG1hdGNoYm94LXBhbmVsLTIgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1jYWlybyAtLWVuYWJsZS1ndGstaW0gLS1lbmFibGUtYXBwbGV0IgorCitQQUNLQUdFUyArPSAiJHtQTn0taW0gJHtQTn0tYXBwbGV0IgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vIFwKKwkgICAgICAgJHtzeXNjb25mZGlyfSBcCisJICAgICAgICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKKwkgICAgICAgJHtkYXRhZGlyfS9waXhtYXBzIFwKKwkgICAgICAgJHtkYXRhZGlyfS9tYXRjaGJveC1rZXlib2FyZCIKKworRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3RrLTIuMC8qL2ltbW9kdWxlcy8uZGVidWciCisKK0ZJTEVTXyR7UE59LWltID0gIiR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyouc28iCisKK0ZJTEVTXyR7UE59LWFwcGxldCA9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvKi5zbyIKKworCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS84MG1hdGNoYm94a2V5Ym9hcmQuc2ggJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kLworCisJcm0gLWYgJHtEfSR7bGliZGlyfS9ndGstMi4wLyovaW1tb2R1bGVzLyoubGEKKwlybSAtZiAke0R9JHtsaWJkaXJ9L21hdGNoYm94LXBhbmVsLyoubGEKK30KKworR1RLSU1NT0RVTEVTX1BBQ0tBR0VTID0gIiR7UE59LWltIgorCitSREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGRidXMtd2FpdCIKK1JSRUNPTU1FTkRTXyR7UE59ID0gIiR7UE59LWFwcGxldCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXBhbmVsLTIvZmlsZXMvc2lsZW5jZS13YXJuaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWJhOWEwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9maWxlcy9zaWxlbmNlLXdhcm5pbmdzLnBhdGNoCkBAIC0wLDAgKzEsNjQgQEAKK0Rvbid0IHdhcm4gaWYgdGhlIG1hY2hpbmUgZG9lc24ndCBhY3R1YWxseSBoYXZlIGEgYmF0dGVyeSwgb3IgaWYgdGhlIGFwcGxldHMKK3N0cmluZyBjb250YWlucyBjb25zZWN1dGl2ZSBzZXBhcmF0b3JzLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCitpbmRleCA2NTE1Y2IwLi5jNDRkZDEyIDEwMDY0NAorLS0tIGEvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYWNwaS5jCisrKysgYi9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hY3BpLmMKK0BAIC0xNCw4ICsxNCw2IEBAIGludCBiYXR0X3N0YXRlLCBhY19zdGF0ZTsKKyBpbnQgcG1fc3VwcG9ydCh2b2lkKQorIHsKKyAJaWYoY2hlY2tfYWNwaV9zdXBwb3J0KCkgPT0gTk9UX1NVUFBPUlRFRCl7CistCQlnX3dhcm5pbmcoIk5vIEFDUEkgc3VwcG9ydFxuIik7CistCisgCQlyZXR1cm4gMDsKKyAJfQorIAorQEAgLTMyLDggKzMwLDkgQEAgY29uc3QgY2hhciogcG1fYmF0dGVyeV9pY29uKHZvaWQpCisgCWNvbnN0IGNoYXIgKmljb247CisgCWJhdHRlcnlfdCAqYmluZm87CisgCisrICAgICAgICAvKiBObyBiYXR0ZXJ5IGF2YWlsYWJsZSAobm90IHByZXNlbnQsIGRpc2FibGVkLCBvciBzb21ldGhpbmcKKysgICAgICAgICAgIGVsc2UuIFNpbGVudGx5IGRvIG5vdGhpbmcuICovCisgCWlmIChiYXR0X3N0YXRlICE9IFNVQ0NFU1MpIHsKKy0JCWdfd2FybmluZygiQ291bGRudCBpbml0aWFsaXplIEFDUEkgYmF0dGVyeVxuIik7CisgCQlyZXR1cm4gTlVMTDsKKyAJfQorIAorZGlmZiAtLWdpdCBhL2FwcGxldHMvYmF0dGVyeS9iYXR0ZXJ5LWFwbS5jIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKK2luZGV4IDU0Njc0MzguLjJmMzljYjYgMTAwNjQ0CistLS0gYS9hcHBsZXRzL2JhdHRlcnkvYmF0dGVyeS1hcG0uYworKysrIGIvYXBwbGV0cy9iYXR0ZXJ5L2JhdHRlcnktYXBtLmMKK0BAIC0xMCw4ICsxMCw2IEBACisgaW50IHBtX3N1cHBvcnQodm9pZCkKKyB7CisgCWlmICgxID09IGFwbV9leGlzdHMgKCkpIHsKKy0gICAgICAgICAgICAgICAgZ193YXJuaW5nICgiTm8gQVBNIHN1cHBvcnQiKTsKKy0KKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CisgCitkaWZmIC0tZ2l0IGEvbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuYyBiL21hdGNoYm94LXBhbmVsL21iLXBhbmVsLmMKK2luZGV4IDJkOGNhZmQuLjgyOGEzNmQgMTAwNjQ0CistLS0gYS9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCisrKysgYi9tYXRjaGJveC1wYW5lbC9tYi1wYW5lbC5jCitAQCAtMTEwLDEwICsxMTAsMTUgQEAgbG9hZF9hcHBsZXRzIChjb25zdCBjaGFyICAgICphcHBsZXRzX2Rlc2MsCisgICAgICAgICBhcHBsZXRzID0gZ19zdHJzcGxpdCAoYXBwbGV0c19kZXNjLCAiLCIsIC0xKTsKKyAKKyAgICAgICAgIGZvciAoaSA9IDA7IGFwcGxldHNbaV07IGkrKykgeworKyAgICAgICAgICAgICAgICBjaGFyICpzOworICAgICAgICAgICAgICAgICBjaGFyICoqYml0czsKKyAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0ICphcHBsZXQ7CisgCistICAgICAgICAgICAgICAgIGJpdHMgPSBnX3N0cnNwbGl0IChhcHBsZXRzW2ldLCAiOiIsIDIpOworKyAgICAgICAgICAgICAgICBzID0gYXBwbGV0c1tpXTsKKysgICAgICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBzWzBdID09ICdcMCcpCisrICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisrCisrICAgICAgICAgICAgICAgIGJpdHMgPSBnX3N0cnNwbGl0IChzLCAiOiIsIDIpOworIAorICAgICAgICAgICAgICAgICBhcHBsZXQgPSBsb2FkX2FwcGxldCAoYml0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNbMV0sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1wYW5lbC0yL21hdGNoYm94LXBhbmVsLTJfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQ3MzY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtcGFuZWwtMi9tYXRjaGJveC1wYW5lbC0yX2dpdC5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIlNpbXBsZSBHVEsrIGJhc2VkIHBhbmVsIGZvciBoYW5kaGVsZCBkZXZpY2VzIgorSE9NRVBBR0UgPSAiaHR0cDovL21hdGNoYm94LXByb2plY3Qub3JnIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbWF0Y2hib3gtcGFuZWwvbWItcGFuZWwuaDtlbmRsaW5lPTEwO21kNT0wYjdkYjI4ZjRiNjg2M2ZiODUzZDA0NjdlNTkwMDE5YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hcHBsZXRzL3N0YXJ0dXAvc3RhcnR1cC5jO2VuZGxpbmU9MjI7bWQ1PWIwYTY0ZmJlZjMwOTdkNzlmODI2NGU2OTA3YTk4ZjAzIgorCitERVBFTkRTID0gImdub21lLWNvbW1vbiBndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGRidXMgZGJ1cy1nbGliIgorREVQRU5EUyArPSAiICR7QGJiLnV0aWxzLmNvbnRhaW5zKCJNQUNISU5FX0ZFQVRVUkVTIiwgImFjcGkiLCAibGliYWNwaSIsICIiLGQpfSIKK0RFUEVORFMgKz0gIiAke0BiYi51dGlscy5jb250YWlucygiTUFDSElORV9GRUFUVVJFUyIsICJhcG0iLCAiYXBtZCIsICIiLGQpfSIKKworIyBUaGUgc3RhcnR1cC1ub3RpZmljYXRpb24gcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gIjI2YTNhNjdiNDFjNTBlMGFlMTYzZDhmZTg2Y2NmN2EwZjBhNjcxYWUiCitQViA9ICIyLjArZ2l0JHtTUkNQVn0iCisKK1JQUk9WSURFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKK1JSRVBMQUNFU18ke1BOfSA9ICJtYXRjaGJveC1wYW5lbCIKK1JDT05GTElDVFNfJHtQTn0gPSAibWF0Y2hib3gtcGFuZWwiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IFwKKyAgICAgICAgICAgZmlsZTovL3NpbGVuY2Utd2FybmluZ3MucGF0Y2giCisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbiAtLWVuYWJsZS1kYnVzIgorRVhUUkFfT0VDT05GICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYWNwaSIsICItLXdpdGgtYmF0dGVyeT1hY3BpIiwgIiIsZCl9IgorRVhUUkFfT0VDT05GICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoIk1BQ0hJTkVfRkVBVFVSRVMiLCAiYXBtIiwgIi0td2l0aC1iYXR0ZXJ5PWFwbSIsICIiLGQpfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L21hdGNoYm94LXBhbmVsL2JyaWdodG5lc3MvKi5wbmcgXAorICAgICAgICAgICAgICAgICR7ZGF0YWRpcn0vbWF0Y2hib3gtcGFuZWwvc3RhcnR1cC8qLnBuZyAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0by9zZXNzaW9uIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmNlNDgzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtc2F0by9tYXRjaGJveC1zZXNzaW9uLXNhdG8vc2Vzc2lvbgpAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworLiAvZXRjL2Zvcm1mYWN0b3IvY29uZmlnCisKK2lmIFsgIiRIQVZFX1RPVUNIU0NSRUVOIiA9ICIxIiBdOyB0aGVuCisgICAgU0hPV0NVUlNPUj0ibm8iCitlbHNlCisgICAgU0hPV0NVUlNPUj0ieWVzIgorZmkKKworaWYgWyAiJEhBVkVfS0VZQk9BUkQiID0gIjEiIF07IHRoZW4KKyAgICBLRVlCT0FSRF9BUFBMRVQ9IiIKK2Vsc2UKKyAgICBLRVlCT0FSRF9BUFBMRVQ9ImtleWJvYXJkIgorZmkKKworIyBUZWxsIEdUSyszIHdlIHJlYWxseSB3YW50IHNlcnZlciBzaWRlIGRlY29yYXRpb25zLCBldmVuIHdpdGgKKyMgR3RrSGVhZGVyQmFyIHVzaW5nIGFwcGxpY2F0aW9uczogV2l0aG91dCB0aGF0IG1iLXBhbmVsIHdpbGwgcmVuZGVyCisjIG9uIHRvcCBvZiB0aGUgY2xpZW50IHNpZGUgZGVjb3JhdGlvbnMuCitleHBvcnQgR1RLX0NTRD0wCisKK21hdGNoYm94LWRlc2t0b3AgJgorCisjIExpbmVzIGNvbnRhaW5pbmcgZmVhdHVyZS1bZm9vXSBhcmUgcmVtb3ZlZCBhdCBidWlsZCB0aW1lIGlmIHRoZSBtYWNoaW5lCisjIGRvZXNuJ3QgaGF2ZSB0aGUgZmVhdHVyZSAiZm9vIi4KKworU1RBUlRfQVBQTEVUUz1zaG93ZGVza3RvcCx3aW5kb3dzZWxlY3RvcgorRU5EX0FQUExFVFM9Y2xvY2ssYmF0dGVyeSwkS0VZQk9BUkRfQVBQTEVULHN5c3RyYXksc3RhcnR1cC1ub3RpZnksbm90aWZ5CitFTkRfQVBQTEVUUz1vcGVubW9rby1wYW5lbC1nc20sJEVORF9BUFBMRVRTICMgZmVhdHVyZS1waG9uZQorCittYXRjaGJveC1wYW5lbCAtLXRpdGxlYmFyIC0tc3RhcnQtYXBwbGV0cyAkU1RBUlRfQVBQTEVUUyAtLWVuZC1hcHBsZXRzICRFTkRfQVBQTEVUUyAmCisKK2V4ZWMgbWF0Y2hib3gtd2luZG93LW1hbmFnZXIgLXRoZW1lIFNhdG8gLXVzZV9kZXNrdG9wX21vZGUgZGVjb3JhdGVkIC11c2VfY3Vyc29yICRTSE9XQ1VSU09SICRACmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC1zYXRvL21hdGNoYm94LXNlc3Npb24tc2F0b18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkZTE4YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXNhdG8vbWF0Y2hib3gtc2Vzc2lvbi1zYXRvXzAuMS5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkN1c3RvbSBNYXRjaGJveCBzZXNzaW9uIGZpbGVzIGZvciB0aGUgU2F0byBlbnZpcm9ubWVudCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubWF0Y2hib3gtcHJvamVjdC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiR1BMdjIuMCsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zZXNzaW9uO2VuZGxpbmU9MzttZDU9ZjhhNWM1YjljMjc5ZTUyZGMwOTRkMTBlMTFjMmJlNjMiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICJnY29uZi1uYXRpdmUiCitSREVQRU5EU18ke1BOfSA9ICJmb3JtZmFjdG9yIGd0ay1zYXRvLWVuZ2luZSBtYXRjaGJveC10aGVtZS1zYXRvIGd0ay10aGVtZS1zYXRvIG1hdGNoYm94LXBhbmVsLTIgbWF0Y2hib3gtZGVza3RvcC1zYXRvIG1hdGNoYm94LXNlc3Npb24gZ2NvbmYiCitQUiA9ICJyMzAiCisKKyMgVGhpcyBwYWNrYWdlIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBiZWNhdXNlIHRoZSBzZXNzaW9uIHNjcmlwdCBpcyBtb2RpZmllZAorIyBiYXNlZCBvbiB0aGUgbWFjaGluZSBhcmNoaXRlY3R1cmUuCitQQUNLQUdFX0FSQ0ggPSAiJHtNQUNISU5FX0FSQ0h9IgorCitpbmhlcml0IGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBtYXRjaGJveC10aGVtZS1zYXRvIHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiZmlsZTovL3Nlc3Npb24iCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJIyBUaGlzIGlzIHRoZSBzZXQgb2YgbWFjaGluZSBmZWF0dXJlcyB0aGF0IHRoZSBzY3JpcHQgaGFzIG1hcmtlcnMgZm9yCisJRkVBVFVSRVM9InBob25lIgorCVNDUklQVD0iJHtTfS9zZWRkZXIiCisJcm0gLWYgJFNDUklQVAorCXRvdWNoICRTQ1JJUFQKKwlmb3IgRkVBVCBpbiAkRkVBVFVSRVM7IGRvCisJCWlmIGVjaG8gJHtNQUNISU5FX0ZFQVRVUkVTfSB8IGF3ayAiLyRGRUFULyB7ZXhpdCAxfSI7IHRoZW4KKwkJCWVjaG8gIi9mZWF0dXJlLSRGRUFUL2QiID4+ICRTQ1JJUFQKKwkJZmkKKwlkb25lCisKKwlpbnN0YWxsIC1kICR7RH0vJHtzeXNjb25mZGlyfS9tYXRjaGJveAorCXNlZCAtZiAiJFNDUklQVCIgJHtTfS9zZXNzaW9uID4gJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94L3Nlc3Npb24KKyAgICAgICAgY2htb2QgK3ggJHtEfS8ke3N5c2NvbmZkaXJ9L21hdGNoYm94L3Nlc3Npb24KK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKwlzZXRfdmFsdWUoKSB7CisJCSN0eXBlLCBuYW1lLCB2YWx1ZQorCQlnY29uZnRvb2wtMiAtLWNvbmZpZy1zb3VyY2U9eG1sOjokRCR7c3lzY29uZmRpcn0vZ2NvbmYvZ2NvbmYueG1sLmRlZmF1bHRzIC0tZGlyZWN0IC0tdHlwZSAkMSAtLXNldCAvZGVza3RvcC9wb2t5L2ludGVyZmFjZS8kMiAiJDMiCisJfQorCXNldF92YWx1ZSBzdHJpbmcgdGhlbWUgU2F0bworCXNldF92YWx1ZSBzdHJpbmcgaWNvbl90aGVtZSBTYXRvCisJc2V0X3ZhbHVlIGJvb2wgdG91Y2hzY3JlZW4gdHJ1ZQorCXNldF92YWx1ZSBzdHJpbmcgZm9udF9uYW1lICJTYW5zIDkiCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10ZXJtaW5hbC9tYXRjaGJveC10ZXJtaW5hbF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFmZDE1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRlcm1pbmFsL21hdGNoYm94LXRlcm1pbmFsX2dpdC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IEdUSysgdGVybWluYWwgYXBwbGljYXRpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTIwO21kNT05NmUzOTE3NmQ5ZTM1NTYzOWEwYjhiMWM3YTg0MDgyMCIKKworREVQRU5EUyA9ICJndGsrIHZ0ZSIKK1NFQ1RJT04gPSAieDExL3V0aWxzIgorU1JDUkVWID0gIjQ1MmJjYTI1MzQ5MmE5N2E1ODdmNDQwMjg5YjlhYjI3ZDIxNzM1M2UiCitQViA9ICIwLjArZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDdlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8uaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiTWF0Y2hib3ggd2luZG93IG1hbmFnZXIgU2F0byB0aGVtZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1hdGNoYm94LXByb2plY3Qub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLnlvY3RvcHJvamVjdC5vcmcvIgorCitMSUNFTlNFID0gIkNDLUJZLVNBLTMuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWFhZTg2YmIzNGIwYTgzNzE2Y2EwOWY0ZTc4M2Q2YmE0IgorCitERVBFTkRTID0gIm1hdGNoYm94LXdtIgorU0VDVElPTiA9ICJ4MTEvd20iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vdGhlbWVzIgorCisjIFRoZSBtYXRjaGJveC13bSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvXzAuMS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY3ODZkZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b18wLjEuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIG1hdGNoYm94LXRoZW1lLXNhdG8uaW5jCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gImh0dHA6Ly9wb2t5bGludXgub3JnL3JlbGVhc2VzL3NhdG8vbWF0Y2hib3gtdGhlbWUtc2F0by0wLjEudGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzJhZTI3MmVmNzgwMzE0MWEzZGNiNjllNjcwY2ZmOTciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWI1OWY5NjQ2ZWRiZmI5MDdhMzA5MzMyZGIzYmQ2ZmE3MDgwZGMxZmUyNGRmNTQ5NDgwY2ZhZTdkOTc0YTNmYiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG8vbWF0Y2hib3gtdGhlbWUtc2F0b19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMzU2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9tYXRjaGJveC10aGVtZS1zYXRvL21hdGNoYm94LXRoZW1lLXNhdG9fZ2l0LmJiCkBAIC0wLDAgKzEsMTIgQEAKK3JlcXVpcmUgbWF0Y2hib3gtdGhlbWUtc2F0by5pbmMKKworU1JDUkVWID0gImY3MmNmNGVkN2Q3MWFkOWU0N2IwZjJkM2RiYzU5M2JjMmYzZTc2ZjgiCitQViA9ICIwLjIrZ2l0JHtTUkNQVn0iCisKK0RFRkFVTFRfUFJFRkVSRU5DRSA9ICItMSIKKworU1JDX1VSSSA9ICJnaXQ6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9tYXRjaGJveC1zYXRvIgorCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdNQUNISU5FX0ZFQVRVUkVTJywgJ3F2Z2EnLCAnLS13aXRoLW1vZGU9cXZnYScsICcnLGQpfSIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3BhY2thZ2Vncm91cHMvcGFja2FnZWdyb3VwLWNvcmUteDExLXNhdG8uYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NzlkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wYWNrYWdlZ3JvdXBzL3BhY2thZ2Vncm91cC1jb3JlLXgxMS1zYXRvLmJiCkBAIC0wLDAgKzEsNjYgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggT3BlbmVkSGFuZCBMdGQuCisjCisKK1NVTU1BUlkgPSAiU2F0byBkZXNrdG9wIgorTElDRU5TRSA9ICJNSVQiCitQUiA9ICJyMzMiCisKK1BBQ0tBR0VfQVJDSCA9ICIke01BQ0hJTkVfQVJDSH0iCisKK2luaGVyaXQgcGFja2FnZWdyb3VwIGRpc3Ryb19mZWF0dXJlc19jaGVjaworIyByZGVwZW5kcyBvbiB4MTF2bmMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1BBQ0tBR0VTID0gIiR7UE59ICR7UE59LWJhc2UgJHtQTn0tYXBwcyAke1BOfS1nYW1lcyIKKworUkRFUEVORFNfJHtQTn0gPSAiXAorICAgICR7UE59LWJhc2UgXAorICAgICR7UE59LWFwcHMgXAorICAgICR7UE59LWdhbWVzIFwKKyAgICAiCisKK05FVFdPUktfTUFOQUdFUiA/PSAiY29ubm1hbi1nbm9tZSIKK05FVFdPUktfTUFOQUdFUl9saWJjLXVjbGliYyA9ICIiCisKK1NVTU1BUllfJHtQTn0tYmFzZSA9ICJTYXRvIGRlc2t0b3AgLSBiYXNlIHBhY2thZ2VzIgorUkRFUEVORFNfJHtQTn0tYmFzZSA9ICJcCisgICAgbWF0Y2hib3gtZGVza3RvcCBcCisgICAgbWF0Y2hib3gtc2Vzc2lvbi1zYXRvIFwKKyAgICBtYXRjaGJveC1rZXlib2FyZCBcCisgICAgbWF0Y2hib3gta2V5Ym9hcmQtYXBwbGV0IFwKKyAgICBtYXRjaGJveC1rZXlib2FyZC1pbSBcCisgICAgbWF0Y2hib3gtY29uZmlnLWd0ayBcCisgICAgeGN1cnNvci10cmFuc3BhcmVudC10aGVtZSBcCisgICAgc2F0by1pY29uLXRoZW1lIFwKKyAgICBzZXR0aW5ncy1kYWVtb24gXAorICAgIGd0ay1zYXRvLWVuZ2luZSBcCisgICAgc2h1dGRvd24tZGVza3RvcCBcCisgICAgbGlic2RsIFwKKyAgICAke05FVFdPUktfTUFOQUdFUn0gXAorICAgIHVkZXYtZXh0cmFjb25mIFwKKyAgICAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3B1bHNlYXVkaW8nLCAncHVsc2VhdWRpby1zZXJ2ZXIgcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvJywgJycsIGQpfSBcCisgICAgIgorCisjIHBjbWFuZm0gZG9lc24ndCB3b3JrIG9uIG1pcHMKK0ZJTEVNQU5BR0VSID89ICJwY21hbmZtIgorRklMRU1BTkFHRVJfbWlwcyA/PSAiIgorCitXRUIgPz0gIiIKKyNXRUIgPSAiZXBpcGhhbnkiCisKK1NVTU1BUllfJHtQTn0tYXBwcyA9ICJTYXRvIGRlc2t0b3AgLSBhcHBsaWNhdGlvbnMiCitSREVQRU5EU18ke1BOfS1hcHBzID0gIlwKKyAgICBsZWFmcGFkIFwKKyAgICBnc3QtcGxheWVyLWJpbiBcCisgICAgeDExdm5jIFwKKyAgICBtYXRjaGJveC10ZXJtaW5hbCBcCisgICAgc2F0by1zY3JlZW5zaG90IFwKKyAgICAke0ZJTEVNQU5BR0VSfSBcCisgICAgJHtXRUJ9IFwKKyAgICAiCisKK1NVTU1BUllfJHtQTn0tZ2FtZXMgPSAiU2F0byBkZXNrdG9wIC0gZ2FtZXMiCitSREVQRU5EU18ke1BOfS1nYW1lcyA9ICJcCisgICAgb2gtcHV6emxlcyBcCisgICAgIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2VtYmxlbS1zeW1ib2xpYy1saW5rLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU1NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1kaXJlY3RvcnkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OTIxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLWZzLWRpcmVjdG9yeS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1mcy1yZWd1bGFyLnBuZyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3N2E4ZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3BjbWFuZm0vZmlsZXMvZ25vbWUtZnMtcmVndWxhci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9nbm9tZS1taW1lLXRleHQtcGxhaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZTRiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL2dub21lLW1pbWUtdGV4dC1wbGFpbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9maWxlcy9uby1kZXNrdG9wLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwM2Q2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL2ZpbGVzL25vLWRlc2t0b3AucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorRGlzYWJsZSB0aGUgZGVza3RvcCBwcmVmZXJlbmNlcyBsYXVuY2hlciBhcyB3ZSBkb24ndCB1c2UgdGhlIHBjbWFuZm0gZGVza3RvcCBpbgorU2F0by4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBSb3NzIEJ1cnRvbiA8cm9zcy5idXJ0b25AaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wIGIvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wCitpbmRleCBjY2Y4YWJiLi4zZjZmYzFjIDEwMDY0NAorLS0tIGEvZGF0YS9wY21hbmZtLWRlc2t0b3AtcHJlZi5kZXNrdG9wLmluCisrKysgYi9kYXRhL3BjbWFuZm0tZGVza3RvcC1wcmVmLmRlc2t0b3AuaW4KK0BAIC03LDMgKzcsNCBAQCBFeGVjPXBjbWFuZm0gLS1kZXNrdG9wLXByZWYKKyBTdGFydHVwTm90aWZ5PXRydWUKKyBUZXJtaW5hbD1mYWxzZQorIE5vdFNob3dJbj1HTk9NRTtYRkNFO0tERTsKKytOb0Rpc3BsYXk9dHJ1ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcGNtYW5mbS9wY21hbmZtXzEuMi4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0NjczMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wY21hbmZtL3BjbWFuZm1fMS4yLjMuYmIKQEAgLTAsMCArMSw0MCBAQAorU1VNTUFSWSA9ICJGYXN0IGxpZ2h0d2VpZ2h0IHRhYmJlZCBmaWxlbWFuYWdlciIKK0hPTUVQQUdFID0gImh0dHA6Ly9wY21hbmZtLnNvdXJjZWZvcmdlLm5ldC8iCisKK0xJQ0VOU0UgPSAiR1BMdjIgJiBHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvcGNtYW5mbS5oO2VuZGxpbmU9MjI7bWQ1PTQxN2IzODU1NzcxYTNhODdmOGFkNzUzZDk5NDQ5MWYwIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9nc2VhbC1ndGstY29tcGF0Lmg7ZW5kbGluZT0yMTttZDU9NDY5MjJjODY5MWY1OGQxMjRmOTQyMGZlMTYxNDljZTIiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICJndGsrIHN0YXJ0dXAtbm90aWZpY2F0aW9uIGxpYmZtIGludGx0b29sLW5hdGl2ZSIKK0RFUEVORFNfYXBwZW5kX3Bva3kgPSAiIGxpYm93bCIKKworCitDT01QQVRJQkxFX0hPU1QgPSAnKHg4Nl82NC4qfGkuODYuKnxhYXJjaDY0Lip8YXJtLip8bWlwcy4qfHBvd2VycGMuKnxzaC4qKS0obGludXh8ZnJlZWJzZC4qKScKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9wY21hbmZtLSR7UFZ9LnRhci54eiBcCisJICAgZmlsZTovL2dub21lLWZzLWRpcmVjdG9yeS5wbmcgXAorCSAgIGZpbGU6Ly9nbm9tZS1mcy1yZWd1bGFyLnBuZyBcCisJICAgZmlsZTovL2dub21lLW1pbWUtdGV4dC1wbGFpbi5wbmcgXAorCSAgIGZpbGU6Ly9lbWJsZW0tc3ltYm9saWMtbGluay5wbmcgXAorCSAgIGZpbGU6Ly9uby1kZXNrdG9wLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYzk5MzQwMmQ0MDdiMGEzZmMwNzZmODQyYWMxYmM1YzkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiY2ZhOGQ4MmZjNjNiZTE0NzA0NTE3NGJlZjA3NDgwN2UxZTMyY2U4YzZiZjRkYmQ4ZmFkNDllMjYwYmNmNjM4MCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzdGFydHVwLW5vdGlmaWNhdGlvbiByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7ZGF0YWRpcn0KKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9waXhtYXBzLworCisJaW5zdGFsbCAtbSAwNjQ0ICR7V09SS0RJUn0vKi5wbmcgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMKK30KKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9wY21hbmZtIgorCitSUkVDT01NRU5EU18ke1BOfSArPSAiYWR3YWl0YS1pY29uLXRoZW1lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYgYi9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvLzUwLXNhdG8uY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ5MmU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0by81MC1zYXRvLmNvbmYKQEAgLTAsMCArMSw3IEBACisjIFdlIHJlbHkgb24gUHVsc2VBdWRpbydzIGF1dG9zcGF3biBmZWF0dXJlIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgdGhlIGRhZW1vbgorIyBpbiBTYXRvLiBUaGUgZ3JhcGhpY2FsIHNlc3Npb24gaW4gU2F0byBydW5zIHVuZGVyIHJvb3QsIGhvd2V2ZXIsIGFuZAorIyBQdWxzZUF1ZGlvIGRpc2FibGVzIGF1dG9zcGF3bmluZyBmb3Igcm9vdCBieSBkZWZhdWx0LiBJbiBhIG5vcm1hbCBzZXR1cCBpdCdzCisjIG5vdCBkZXNpcmFibGUgdG8gYXV0b3NwYXduIGZvciByb290LCBiZWNhdXNlIGl0IGNhbiBlYXNpbHkgaW50ZXJmZXJlIHdpdGgKKyMgb3RoZXIgdXNlcnMnIFB1bHNlQXVkaW8gaW5zdGFuY2VzLCBidXQgaW4gU2F0byB0aGVyZSBhcmUgbm8gb3RoZXIgdXNlcnMsIHNvCisjIGl0J3MgT0sgdG8gZW5hYmxlIHRoaXMgaW4gU2F0by4KK2FsbG93LWF1dG9zcGF3bi1mb3Itcm9vdCA9IHllcwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHVsc2VhdWRpby1zYXRvL3B1bHNlYXVkaW8tY2xpZW50LWNvbmYtc2F0b18xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzMzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdWxzZWF1ZGlvLXNhdG8vcHVsc2VhdWRpby1jbGllbnQtY29uZi1zYXRvXzEuYmIKQEAgLTAsMCArMSwxNyBAQAorU1VNTUFSWSA9ICIvZXRjL3B1bHNlL2NsaWVudC5jb25mIHRhaWxvcmVkIGZvciBTYXRvIgorU0VDVElPTiA9ICJtdWx0aW1lZGlhIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICJmaWxlOi8vNTAtc2F0by5jb25mIgorUyA9ICIke1dPUktESVJ9IgorCitpbmhlcml0IGFsbGFyY2gKKworZG9faW5zdGFsbCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQKKwlpbnN0YWxsIC1tIDA2NDQgJHtTfS81MC1zYXRvLmNvbmYgJHtEfSR7c3lzY29uZmRpcn0vcHVsc2UvY2xpZW50LmNvbmYuZC81MC1zYXRvLmNvbmYKK30KKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfS9wdWxzZS9jbGllbnQuY29uZi5kLzUwLXNhdG8uY29uZiIKK0NPTkZGSUxFU18ke1BOfSA9ICIke3N5c2NvbmZkaXJ9L3B1bHNlL2NsaWVudC5jb25mLmQvNTAtc2F0by5jb25mIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy8wMDAxLVVzZS1sYWJzLWluc3RlYWQtb2YtYWJzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0M2QxZGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzLzAwMDEtVXNlLWxhYnMtaW5zdGVhZC1vZi1hYnMucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorRnJvbSA5ODA4ZGMwOWUwODkzN2M5YmZmZDg1OGQzZGVkNDI4MjI1YTQzMTJhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgNyBTZXAgMjAxNSAwOTowMjozOCArMDAwMAorU3ViamVjdDogW1BBVENIXSBVc2UgbGFicyBpbnN0ZWFkIG9mIGFicworCitjbHVldmFscyBpcyBhcnJheSBvZiBsb25ncyBzbyB3ZSBoYXZlIHRvIHVzZSBsYWJzKCkgaW5zdGVhZCBvZiBhYnMoKQorc2luY2UgYWJzKCkgcmV0dXJucyBpbnQKKworRml4ZXMKKwora2Vlbi5jOjE0NTg6MTc6IGVycm9yOiBhYnNvbHV0ZSB2YWx1ZSBmdW5jdGlvbiAnYWJzJyBnaXZlbiBhbiBhcmd1bWVudAorb2YgdHlwZSAnbG9uZycgYnV0IGhhcyBwYXJhbWV0ZXIgb2YgdHlwZSAnaW50JyB3aGljaCBtYXkgY2F1c2UKK3RydW5jYXRpb24gb2YgdmFsdWUKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKKyBrZWVuLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEva2Vlbi5jIGIva2Vlbi5jCitpbmRleCBhNmE3MjM4Li4xNjMxOTkyIDEwMDY0NAorLS0tIGEva2Vlbi5jCisrKysgYi9rZWVuLmMKK0BAIC0xMDQzLDcgKzEwNDMsNyBAQCBkb25lCisgCQkgICAgY2x1ZXZhbHNbal0gKj0gZ3JpZFtpXTsKKyAJCSAgICBicmVhazsKKyAJCSAgY2FzZSBDX1NVQjoKKy0JCSAgICBjbHVldmFsc1tqXSA9IGFicyhjbHVldmFsc1tqXSAtIGdyaWRbaV0pOworKwkJICAgIGNsdWV2YWxzW2pdID0gbGFicyhjbHVldmFsc1tqXSAtIGdyaWRbaV0pOworIAkJICAgIGJyZWFrOworIAkJICBjYXNlIENfRElWOgorIAkJICAgIHsKK0BAIC0xNDU1LDcgKzE0NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2Vycm9ycyhjb25zdCBnYW1lX3N0YXRlICpzdGF0ZSwgbG9uZyAqZXJyb3JzKQorIAkJY2x1ZXZhbHNbal0gKj0gc3RhdGUtPmdyaWRbaV07CisgCQlicmVhazsKKyAJICAgICAgY2FzZSBDX1NVQjoKKy0JCWNsdWV2YWxzW2pdID0gYWJzKGNsdWV2YWxzW2pdIC0gc3RhdGUtPmdyaWRbaV0pOworKwkJY2x1ZXZhbHNbal0gPSBsYWJzKGNsdWV2YWxzW2pdIC0gc3RhdGUtPmdyaWRbaV0pOworIAkJYnJlYWs7CisgCSAgICAgIGNhc2UgQ19ESVY6CisgCQl7CistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvZml4LWNvbXBpbGluZy1mYWlsdXJlLXdpdGgtb3B0aW9uLWctTy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjQ2ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcHV6emxlcy9maWxlcy9maXgtY29tcGlsaW5nLWZhaWx1cmUtd2l0aC1vcHRpb24tZy1PLnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK2d0ay5jOiBmaXggY29tcGlsaW5nIGZhaWx1cmUgd2l0aCBvcHRpb24gLWcgLU8KKworVGhlcmUgd2VyZSBjb21waWxpbmcgZmFpbHVyZSB3aXRoIG9wdGlvbiAtZyAtTworLi4uCisuLy4vZ3RrLmM6IEluIGZ1bmN0aW9uICdjb25maWd1cmVfYXJlYSc6CisuLy4vZ3RrLmM6Mzk3OjI6IGVycm9yOiAnY3InIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQgaW4gdGhpcyBmdW5jdGlvbiBbLVdlcnJvcj1tYXliZS11bmluaXRpYWxpemVkXQorICBjYWlyb19zZXRfc291cmNlX3JnYihjciwKKyAgXgorLi8uL2d0ay5jOjM4NDoxNDogbm90ZTogJ2NyJyB3YXMgZGVjbGFyZWQgaGVyZQorICAgICBjYWlyb190ICpjcjsKKyAgICAgICAgICAgICAgXgorLi8uL2d0ay5jOiBJbiBmdW5jdGlvbiAnbWFpbic6CisuLy4vZ3RrLmM6MjkxMTo2OiBlcnJvcjogJ2Vycm9yJyBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkIGluIHRoaXMgZnVuY3Rpb24gWy1XZXJyb3I9bWF5YmUtdW5pbml0aWFsaXplZF0KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBwbmFtZSwgZXJyb3IpOworICAgICAgXgorY2MxOiBhbGwgd2FybmluZ3MgYmVpbmcgdHJlYXRlZCBhcyBlcnJvcnMKKy4uLgorCitJbml0aWFsaXplZCBwb2ludGVyICdjcicgYW5kICdlcnJvcicgd2l0aCBOVUxMCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBndGsuYyB8IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ndGsuYyBiL2d0ay5jCitpbmRleCBhMmViYTJjLi5jNTRiZjYzIDEwMDY0NAorLS0tIGEvZ3RrLmMKKysrKyBiL2d0ay5jCitAQCAtMzgxLDcgKzM4MSw3IEBAIHN0YXRpYyB2b2lkIGNsZWFyX2JhY2tpbmdfc3RvcmUoZnJvbnRlbmQgKmZlKQorIAorIHN0YXRpYyB2b2lkIHNldHVwX2JhY2tpbmdfc3RvcmUoZnJvbnRlbmQgKmZlKQorIHsKKy0gICAgY2Fpcm9fdCAqY3I7CisrICAgIGNhaXJvX3QgKmNyID0gTlVMTDsKKyAgICAgaW50IGk7CisgCisgICAgIGZlLT5waXhtYXAgPSBnZGtfcGl4bWFwX25ldyhmZS0+YXJlYS0+d2luZG93LCBmZS0+cHcsIGZlLT5waCwgLTEpOworQEAgLTI0ODEsNyArMjQ4MSw3IEBAIGNoYXIgKmZnZXRsaW5lKEZJTEUgKmZwKQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CisgICAgIGNoYXIgKnBuYW1lID0gYXJndlswXTsKKy0gICAgY2hhciAqZXJyb3I7CisrICAgIGNoYXIgKmVycm9yID0gTlVMTDsKKyAgICAgaW50IG5nZW5lcmF0ZSA9IDAsIHByaW50ID0gRkFMU0UsIHB4ID0gMSwgcHkgPSAxOworICAgICBpbnQgdGltZV9nZW5lcmF0aW9uID0gRkFMU0UsIHRlc3Rfc29sdmUgPSBGQUxTRSwgbGlzdF9wcmVzZXRzID0gRkFMU0U7CisgICAgIGludCBzb2xuID0gRkFMU0UsIGNvbG91ciA9IEZBTFNFOworLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL2ZpbGVzL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UyYzNhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvZmlsZXMvb2gtcHV6emxlcy1vd2wtbWVudS5wYXRjaApAQCAtMCwwICsxLDIwMyBAQAorVGhpcyBwYXRjaCBlbmFibGUgb3dsIG1lbnUsIHdoaWNoIGlzIGhpZGRlbiBpbiB0aGUgdGl0bGUgYmFyIHRvIHNhdmUgc3BhY2Ugb24KK3NtYWxsIHNjcmVlbi4gSXQgaGFzIG5vdCBiZWVuIHVzZWQgZm9yIGEgbG9uZyB0aW1lLCByZWJhc2UgbmVlZGVkLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VuYWJsZSBmZWF0dXJlXQorCitJbmRleDogc3JjL2d0ay5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL2d0ay5jCShyZXZpc2lvbiAyMikKKysrKyBzcmMvZ3RrLmMJKHdvcmtpbmcgY29weSkKK0BAIC0yOCw2ICsyOCw4IEBACisgI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisgI2luY2x1ZGUgPGdkay1waXhidWYvZ2RrLXBpeGJ1Zi5oPgorIAorKyNpbmNsdWRlIDxsaWJvd2wvb3dsd2luZG93bWVudS5oPgorKworICNpbmNsdWRlIDxsaWJyc3ZnL3JzdmcuaD4KKyAKKyAjaW5jbHVkZSA8WDExL1hsaWIuaD4KK0BAIC0xMjM3LDYgKzEyMzksNyBAQAorICAgICB9CisgfQorIAorKyNpZiAwCisgc3RhdGljIHZvaWQKKyBhZGRfd2lkZ2V0IChHdGtVSU1hbmFnZXIgKm1lcmdlLAorIAkgICAgR3RrV2lkZ2V0ICp3aWRnZXQsCitAQCAtMTI0NywxMCArMTI1MCwxMSBAQAorICAgICBndGtfYm94X3BhY2tfc3RhcnQgKGJveCwgd2lkZ2V0LCBGQUxTRSwgRkFMU0UsIDApOworIAorICAgICB0b3BsZXZlbCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsIChHVEtfV0lER0VUIChib3gpKTsKKy0gICAgZ3RrX3dpZGdldF9zaG93X2FsbCAodG9wbGV2ZWwpOworIH0KKysjZW5kaWYKKyAKKyBzdGF0aWMgR3RrQWN0aW9uRW50cnkgdG9wbGV2ZWxfYWN0aW9uc1tdID0geworKyAgICB7ICJUb3AiLCBOVUxMLCAiIiB9LAorICAgICB7ICJHYW1lIiwgTlVMTCwgTl8oIkdhbWUiKSB9LAorICAgICB7ICJTZXR0aW5ncyIsIE5VTEwsIE5fKCJTZXR0aW5ncyIpIH0sCisgICAgIHsgIkhlbHAiLCBOVUxMLCBOXygiSGVscCIpIH0sCitAQCAtMTMwMywxMSArMTMwNywxMyBAQAorIAkJCWZyb250ZW5kICpmZSkKKyB7CisgICAgIEdTdHJpbmcgKnhtbDsKKysgICAgR0Vycm9yICplcnJvciA9IE5VTEw7CisgICAgIGdib29sZWFuIHByZXNldHMgPSBGQUxTRTsKKyAgICAgR1NMaXN0ICpyYWRpb19ncm91cCA9IE5VTEw7CisgICAgIGludCBpOworIAorLSAgICB4bWwgPSBnX3N0cmluZ19uZXcgKCI8dWk+PG1lbnViYXI+PHBsYWNlaG9sZGVyIG5hbWU9XCJUeXBlUGxhY2Vob2xkZXJcIj4iCisrICAgIHhtbCA9IGdfc3RyaW5nX25ldyAoIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiVG9wTWVudVwiIGFjdGlvbj1cIlRvcFwiPiIKKysJCQkiPHBsYWNlaG9sZGVyIG5hbWU9XCJUeXBlUGxhY2Vob2xkZXJcIj4iCisgCQkJIjxtZW51IG5hbWU9XCJTZXR0aW5nc01lbnVcIiBhY3Rpb249XCJTZXR0aW5nc1wiPiIpOworIAorICAgICBmb3IgKGkgPSAwOyBpIDwgbWlkZW5kX251bV9wcmVzZXRzKGZlLT5tZSk7IGkrKykgeworQEAgLTEzNTksOCArMTM2NSwxNCBAQAorIAkJCSAiPG1lbnVpdGVtIG5hbWU9XCJDdXN0b21NZW51XCIgYWN0aW9uPVwiQ3VzdG9tXCIvPiIpOworICAgICB9CisgICAgIAorLSAgICBnX3N0cmluZ19hcHBlbmQgKHhtbCwgIjwvbWVudT48L3BsYWNlaG9sZGVyPjwvbWVudWJhcj48L3VpPiIpOworLSAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCB4bWwtPnN0ciwgLTEsIE5VTEwpOworKyAgICBnX3N0cmluZ19hcHBlbmQgKHhtbCwgIjwvbWVudT48L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnViYXI+PC91aT4iKTsKKysKKysgICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgeG1sLT5zdHIsIC0xLCAmZXJyb3IpOworKyAgICBpZiAoZXJyb3IgIT0gTlVMTCkgeworKwlnX3dhcm5pbmcgKCJFcnJvciBhZGRpbmcgY3VzdG9tOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKysJZ19lcnJvcl9mcmVlIChlcnJvcik7CisrICAgIH0KKysKKyAgICAgZ19zdHJpbmdfZnJlZSAoeG1sLCBUUlVFKTsKKyB9CisgCitAQCAtMTQzNCw2ICsxNDQ2LDcgQEAKKyBuZXdfd2luZG93KGNoYXIgKmFyZywgY2hhciAqKmVycm9yKQorIHsKKyAgICAgZnJvbnRlbmQgKmZlOworKyAgICBHRXJyb3IgKmVyciA9IE5VTEw7CisgICAgIEd0a0JveCAqdmJveDsKKyAgICAgR3RrVUlNYW5hZ2VyICptZXJnZTsKKyAgICAgR3RrQWN0aW9uR3JvdXAgKmFjdGlvbnM7CitAQCAtMTQ5Niw4ICsxNTA5LDYgQEAKKyAgICAgZ3RrX3dpbmRvd19hZGRfYWNjZWxfZ3JvdXAoR1RLX1dJTkRPVyhmZS0+d2luZG93KSwgZmUtPmFjY2VsZ3JvdXApOworIAorICAgICBtZXJnZSA9IGd0a191aV9tYW5hZ2VyX25ldyAoKTsKKy0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKG1lcmdlKSwgImFkZF93aWRnZXQiLAorLQkJICAgICAgR19DQUxMQkFDSyAoYWRkX3dpZGdldCksIHZib3gpOworIAorICAgICBhY3Rpb25zID0gZ3RrX2FjdGlvbl9ncm91cF9uZXcgKCJQdXp6bGVBY3Rpb25zIik7CisgICAgIGd0a19hY3Rpb25fZ3JvdXBfYWRkX2FjdGlvbnMgKGFjdGlvbnMsIHRvcGxldmVsX2FjdGlvbnMsCitAQCAtMTUwOSwyMiArMTUyMCwzOSBAQAorIAorICAgICBndGtfdWlfbWFuYWdlcl9pbnNlcnRfYWN0aW9uX2dyb3VwIChtZXJnZSwgYWN0aW9ucywgMCk7CisgICAgIAorLSAgICBndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9maWxlIChtZXJnZSwgREFUQURJUiAiL29oLXB1enpsZXMvdWkvbWVudS54bWwiLCBOVUxMKTsKKysgICAgZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fZmlsZSAobWVyZ2UsIERBVEFESVIgIi9vaC1wdXp6bGVzL3VpL21lbnUueG1sIiwgCisrCQkJCSAgICAgJmVycik7CisrICAgIGlmIChlcnIgIT0gTlVMTCkgeworKwlnX3dhcm5pbmcgKCJFcnJvciBtYWtpbmcgVUk6ICVzIiwgZXJyLT5tZXNzYWdlKTsKKysJZ19lcnJvcl9mcmVlIChlcnIpOworKwllcnIgPSBOVUxMOworKyAgICB9CisgCisgICAgIGlmICh0aGVnYW1lLmNhbl9zb2x2ZSkgeworLQkgICAgY2hhciAqc3RyID0gIjx1aT48bWVudWJhcj48bWVudSBuYW1lPVwiR2FtZU1lbnVcIiBhY3Rpb249XCJHYW1lXCI+IgorKwljaGFyICpzdHIgPSAiPHVpPjxtZW51YmFyPjxtZW51IG5hbWU9XCJUb3BNZW51XCIgYWN0aW9uPVwiVG9wXCI+IgorKwkgICAgIjxtZW51IG5hbWU9XCJHYW1lTWVudVwiIGFjdGlvbj1cIkdhbWVcIj4iCisgCSAgICAiPHBsYWNlaG9sZGVyIG5hbWU9XCJTb2x2ZVBsYWNlaG9sZGVyXCI+IgorIAkgICAgIjxzZXBhcmF0b3IgbmFtZT1cIlNvbHZlU2VwXCIvPiIKKyAJICAgICI8bWVudWl0ZW0gbmFtZT1cIlNvbHZlTWVudVwiIGFjdGlvbj1cIlNvbHZlXCIvPiIKKy0JICAgICI8L3BsYWNlaG9sZGVyPjwvbWVudT48L21lbnViYXI+PC91aT4iOworKwkgICAgIjwvcGxhY2Vob2xkZXI+PC9tZW51PjwvbWVudT48L21lbnViYXI+PC91aT4iOworIAorLQlndGtfdWlfbWFuYWdlcl9hZGRfdWlfZnJvbV9zdHJpbmcgKG1lcmdlLCBzdHIsIC0xLCBOVUxMKTsKKysJZ3RrX3VpX21hbmFnZXJfYWRkX3VpX2Zyb21fc3RyaW5nIChtZXJnZSwgc3RyLCAtMSwgJmVycik7CisrCWlmIChlcnIgIT0gTlVMTCkgeworKwkgICAgZ193YXJuaW5nICgiRXJyb3IgYWRkaW5nIHNvbHZlLiAlcyIsIGVyci0+bWVzc2FnZSk7CisrCSAgICBnX2Vycm9yX2ZyZWUgKGVycik7CisrCX0KKyAgICAgfQorIAorICAgICBpZiAoKG4gPSBtaWRlbmRfbnVtX3ByZXNldHMoZmUtPm1lKSkgPiAwIHx8IHRoZWdhbWUuY2FuX2NvbmZpZ3VyZSkgeworIAlnZW5lcmF0ZV9zZXR0aW5nc19tZW51IChtZXJnZSwgYWN0aW9ucywgZmUpOworICAgICB9CisgCisrICAgIC8qIERvIHRoaXMgc28gdGhhdCB0aGUgbWVudSBpcyBwYWNrZWQgbm93IGluc3RlYWQgb2YgaW4gdGhlIGlkbGUgbG9vcCAqLworKyAgICBndGtfdWlfbWFuYWdlcl9lbnN1cmVfdXBkYXRlIChtZXJnZSk7CisrCisrICAgIG93bF9zZXRfd2luZG93X21lbnVfaXRlbSAoR1RLX1dJTkRPVyAoZmUtPndpbmRvdyksCisrCQkJICAgICAgR1RLX01FTlVfSVRFTSAoZ3RrX3VpX21hbmFnZXJfZ2V0X3dpZGdldCAobWVyZ2UsICIvbWVudWJhci9Ub3BNZW51IikpKTsKKysgICAgCisgICAgIHNldHVwX2NvbG91cnMgKGZlKTsKKyAgICAgc2V0dXBfcGl4YnVmcyAoZmUpOworIAorQEAgLTE1NzIsNyArMTYwMCw3IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICBHREtfQlVUVE9OX1JFTEVBU0VfTUFTSyB8CisgCQkJICBHREtfQlVUVE9OX01PVElPTl9NQVNLKTsKKyAKKy0gICAgLyogVGhlIHdpbmRvdyBpcyBzaG93biBvbmNlIHRoZSBtZW51YmFyIGhhcyBiZWVuIGFkZGVkICovCisrICAgIGd0a193aWRnZXRfc2hvd19hbGwgKGZlLT53aW5kb3cpOworICAgICByZXR1cm4gZmU7CisgfQorIAorSW5kZXg6IHNyYy9tZW51LnhtbAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNyYy9tZW51LnhtbAkocmV2aXNpb24gMjIpCisrKysgc3JjL21lbnUueG1sCSh3b3JraW5nIGNvcHkpCitAQCAtMSwyNiArMSwyNSBAQAorIDx1aT4KKyA8bWVudWJhcj4KKy08bWVudSBuYW1lPSJHYW1lTWVudSIgYWN0aW9uPSJHYW1lIj4KKy0JPG1lbnVpdGVtIG5hbWU9Ik5ld01lbnUiIGFjdGlvbj0iTmV3Ii8+CistCTxtZW51aXRlbSBuYW1lPSJSZXN0YXJ0TWVudSIgYWN0aW9uPSJSZXN0YXJ0Ii8+CistPCEtLQk8bWVudWl0ZW0gbmFtZT0iU3BlY2lmaWNNZW51IiBhY3Rpb249IlNwZWNpZmljIi8+IC0tPgorLQk8bWVudWl0ZW0gbmFtZT0iUmFuZG9tTWVudSIgYWN0aW9uPSJSYW5kb20iLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMSIvPgorLQk8bWVudWl0ZW0gbmFtZT0iTG9hZE1lbnUiIGFjdGlvbj0iTG9hZCIvPgorLQk8bWVudWl0ZW0gbmFtZT0iU2F2ZU1lbnUiIGFjdGlvbj0iU2F2ZSIvPgorLQk8c2VwYXJhdG9yIG5hbWU9IkdhbWVTZXAyIi8+CistCTxtZW51aXRlbSBuYW1lPSJVbmRvTWVudSIgYWN0aW9uPSJVbmRvIi8+CistCTxtZW51aXRlbSBuYW1lPSJSZWRvTWVudSIgYWN0aW9uPSJSZWRvIi8+CistCTxwbGFjZWhvbGRlciBuYW1lPSJDb3B5UGxhY2Vob2xkZXIiLz4KKy0JPHBsYWNlaG9sZGVyIG5hbWU9IlNvbHZlUGxhY2Vob2xkZXIiLz4KKy0JPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMyIvPgorLQk8bWVudWl0ZW0gbmFtZT0iUXVpdE1lbnUiIGFjdGlvbj0iUXVpdCIvPgorLTwvbWVudT4KKys8bWVudSBuYW1lPSJUb3BNZW51IiBhY3Rpb249IlRvcCI+CisrCTxtZW51IG5hbWU9IkdhbWVNZW51IiBhY3Rpb249IkdhbWUiPgorKwkJPG1lbnVpdGVtIG5hbWU9Ik5ld01lbnUiIGFjdGlvbj0iTmV3Ii8+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmVzdGFydE1lbnUiIGFjdGlvbj0iUmVzdGFydCIvPgorKwk8IS0tCTxtZW51aXRlbSBuYW1lPSJTcGVjaWZpY01lbnUiIGFjdGlvbj0iU3BlY2lmaWMiLz4gLS0+CisrCQk8bWVudWl0ZW0gbmFtZT0iUmFuZG9tTWVudSIgYWN0aW9uPSJSYW5kb20iLz4KKysJCTxzZXBhcmF0b3IgbmFtZT0iR2FtZVNlcDEiLz4KKysJCTxtZW51aXRlbSBuYW1lPSJMb2FkTWVudSIgYWN0aW9uPSJMb2FkIi8+CisrCQk8bWVudWl0ZW0gbmFtZT0iU2F2ZU1lbnUiIGFjdGlvbj0iU2F2ZSIvPgorKwkJPHNlcGFyYXRvciBuYW1lPSJHYW1lU2VwMiIvPgorKwkJPG1lbnVpdGVtIG5hbWU9IlVuZG9NZW51IiBhY3Rpb249IlVuZG8iLz4KKysJCTxtZW51aXRlbSBuYW1lPSJSZWRvTWVudSIgYWN0aW9uPSJSZWRvIi8+CisrCQk8cGxhY2Vob2xkZXIgbmFtZT0iQ29weVBsYWNlaG9sZGVyIi8+CisrCQk8cGxhY2Vob2xkZXIgbmFtZT0iU29sdmVQbGFjZWhvbGRlciIvPgorKwk8L21lbnU+CisgCistPHBsYWNlaG9sZGVyIG5hbWU9IlR5cGVQbGFjZWhvbGRlciIvPgorLQorLTxtZW51IG5hbWU9IkhlbHBNZW51IiBhY3Rpb249IkhlbHAiPgorKwk8cGxhY2Vob2xkZXIgbmFtZT0iVHlwZVBsYWNlaG9sZGVyIi8+CisgCTxtZW51aXRlbSBuYW1lPSJBYm91dE1lbnUiIGFjdGlvbj0iQWJvdXQiLz4KKysJPG1lbnVpdGVtIG5hbWU9IlF1aXRNZW51IiBhY3Rpb249IlF1aXQiLz4KKysKKyA8L21lbnU+CisgPC9tZW51YmFyPgorIDwvdWk+CitJbmRleDogc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gc3JjL01ha2VmaWxlLmFtCShyZXZpc2lvbiAyMikKKysrKyBzcmMvTWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKK0BAIC0xMCw3ICsxMCw3IEBACisgCWxpZ2h0dXAgbG9vcHkgbWFwIG1pbmVzIG5ldCBuZXRzbGlkZSBwYXR0ZXJuIHBlZ3MgcmVjdCBzYW1lZ2FtZSBcCisgCXNpeHRlZW4gc2xhbnQgc29sbyB0ZW50cyB0d2lkZGxlIHVudGFuZ2xlCisgCistbGlicHV6emxlc19sYV9MSUJBREQgPSAkKFBVWlpMRVNfTElCUykKKytsaWJwdXp6bGVzX2xhX0xJQkFERCA9ICQoUFVaWkxFU19MSUJTKSAtbG93bAorIGxpYnB1enpsZXNfbGFfU09VUkNFUyA9IGNvbWJpLmMgXAorIAkJCWNvbmZpZ3VyYXRpb24uYyBcCisgCQkJZHJhd2luZy5jIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvb2gtcHV6emxlc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2Y2QyY2MKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL29oLXB1enpsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNzQgQEAKK1NVTU1BUlkgPSAiUG9ydGFibGUgUHV6emxlIENvbGxlY3Rpb24iCitIT01FUEFHRSA9ICJodHRwOi8vby1oYW5kLmNvbS8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT1mNTZlYzY3NzJkZDFjN2MzNjcwNjdiYmVhOGVhMTY3NSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvdHJlZTIzNC5oO2VuZGxpbmU9Mjg7bWQ1PWExODhlNmQyNTA0MzBjYTA5NGE1NGE4MmY0ODQ3MmE3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy90cmVlMjM0LmM7ZW5kbGluZT0yODttZDU9YjRmZWIxOTc2ZmVlYmY4ZjEzNzkwOTNlZDUyZjI5NDUiCisKK1NFQ1RJT04gPSAieDExIgorREVQRU5EUyA9ICJndGsrIGdjb25mIGludGx0b29sLW5hdGl2ZSBsaWJyc3ZnIgorCisjIGxpYm93bCByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitERVBFTkRTX2FwcGVuZF9wb2t5ID0gIiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3gxMScsICdsaWJvd2wnLCAnJywgZCl9IgorCisjIFJlcXVpcmVzIGdkay9nZGt4Lmggd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworU1JDUkVWID0gIjkyZjFhMjBlNGI3MmVlZDdhMzViMDA5ODRkOTc5M2I1MWRjMmZiM2IiCitQViA9ICIwLjIrZ2l0JHtTUkNQVn0iCitQUiA9ICJyMTAiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvJHtCUE59IgorU1JDX1VSSV9hcHBlbmRfcG9reSA9ICIgZmlsZTovL29oLXB1enpsZXMtb3dsLW1lbnUucGF0Y2g7c3RyaXBsZXZlbD0wICIKKworUyA9ICIke1dPUktESVJ9L2dpdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCitiaW5kaXIgPSAiL3Vzci9nYW1lcyIKKworRVhUUkFfT0VNQUtFICs9ICJHQ09ORl9ESVNBQkxFX01BS0VGSUxFX1NDSEVNQV9JTlNUQUxMPTEiCisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCisKKyAgICBjZCAke0R9LyR7cHJlZml4fS9nYW1lcworICAgIGZvciBwcm9nIGluICo7IGRvCisJaWYgWyAteCAkcHJvZyBdOyB0aGVuCisgICAgICAgICAgICAjIENvbnZlcnQgcHJvZyB0byBUaXRsZSBDYXNlCisgICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKKwkgICAgZWNobyAibWFraW5nICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcCIKKwkgICAgY2F0IDw8U1RPUCA+ICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcAorW0Rlc2t0b3AgRW50cnldCitOYW1lPSR0aXRsZQorRXhlYz0ke3ByZWZpeH0vZ2FtZXMvJHByb2cKK0ljb249YXBwbGljYXRpb25zLWdhbWVzCitUZXJtaW5hbD1mYWxzZQorVHlwZT1BcHBsaWNhdGlvbgorQ2F0ZWdvcmllcz1HYW1lOworU3RhcnR1cE5vdGlmeT10cnVlCitYLU1CLVNpbmdsZUluc3RhbmNlPXRydWUKK0NvbW1lbnQ9UGxheSAkdGl0bGUuCitTVE9QCisgICAgICAgIGZpCisgICAgZG9uZQorfQorCitQQUNLQUdFUyArPSAiJHtQTn0tZXh0cmEiCitSREVQRU5EU18ke1BOfS1leHRyYSArPSAib2gtcHV6emxlcyIKKworRklMRVNfJHtQTn0gPSAiL3Vzci9zaGFyZS9waXhtYXBzIC91c3Ivc2hhcmUvb2gtcHV6emxlcy8iCitGSUxFU18ke1BOfS1kYmcgKz0gIi91c3IvZ2FtZXMvLmRlYnVnLyoiCitGSUxFU18ke1BOfS1leHRyYSA9ICIvdXNyL2dhbWVzLyAvdXNyL3NoYXJlL2FwcGxpY2F0aW9ucyAvZXRjL2djb25mL3NjaGVtYXMiCisKK3B5dGhvbiBfX2Fub255bW91cyAoKSB7CisgICAgdmFyID0gYmIuZGF0YS5leHBhbmQoIkZJTEVTXyR7UE59IiwgZCwgMSkKKyAgICBkYXRhID0gZC5nZXRWYXIodmFyLCBUcnVlKQorICAgIGZvciBuYW1lIGluICgiYnJpZGdlcyIsICJmaWZ0ZWVuIiwgImluZXJ0aWEiLCAibWFwIiwgInNhbWVnYW1lIiwgInNsYW50Iik6CisgICAgICAgIGRhdGEgPSBkYXRhICsgIiAvdXNyL2dhbWVzLyVzIiAlIG5hbWUKKyAgICAgICAgZGF0YSA9IGRhdGEgKyAiIC91c3Ivc2hhcmUvYXBwbGljYXRpb25zLyVzLmRlc2t0b3AiICUgbmFtZQorICAgICAgICBkYXRhID0gZGF0YSArICIgL2V0Yy9nY29uZi9zY2hlbWFzLyVzLnNjaGVtYXMiICUgbmFtZQorICAgIGQuc2V0VmFyKHZhciwgZGF0YSkKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3B1enpsZXMvcHV6emxlc19naXQuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ODI2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9wdXp6bGVzL3B1enpsZXNfZ2l0LmJiCkBAIC0wLDAgKzEsNjEgQEAKK1NVTU1BUlkgPSAiU2ltb24gVGF0aGFtJ3MgUG9ydGFibGUgUHV6emxlIENvbGxlY3Rpb24iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmNoaWFyay5ncmVlbmVuZC5vcmcudWsvfnNndGF0aGFtL3B1enpsZXMvIgorCitERVBFTkRTID0gImd0aysgbGlieHQiCisKKyMgVGhlIGxpYnh0IHJlcXVpcmVzIHgxMSBpbiBESVNUUk9fRkVBVFVSRVMKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5DRTttZDU9MzNiY2Q0YmNlOGYzYzE5N2YyYWVmYmRiZDJkMjk5YmMiCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnRhcnRhcnVzLm9yZy9zaW1vbi9wdXp6bGVzLmdpdCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtY29tcGlsaW5nLWZhaWx1cmUtd2l0aC1vcHRpb24tZy1PLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVXNlLWxhYnMtaW5zdGVhZC1vZi1hYnMucGF0Y2ggXAorIgorU1JDUkVWID0gImMyOTYzMDFhMDZjZTQ5Yjg3Yzk1NGM5ZDE1NDUyNTIxZGZlZGRmMWEiCitQRSA9ICIxIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKyAgICAuL21rZmlsZXMucGwKK30KKworRklMRVNfJHtQTn0gPSAiJHtwcmVmaXh9L2Jpbi8qICR7ZGF0YWRpcn0vYXBwbGljYXRpb25zLyoiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7cHJlZml4fS9iaW4vLmRlYnVnIgorCitkb19pbnN0YWxsICgpIHsKKyAgICBybSAtcmYgJHtEfS8qCisgICAgZXhwb3J0IHByZWZpeD0ke0R9CisgICAgZXhwb3J0IERFU1RESVI9JHtEfQorICAgIGluc3RhbGwgLWQgJHtEfS8ke3ByZWZpeH0vYmluLworICAgIG9lX3J1bm1ha2UgaW5zdGFsbAorCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCisKKyAgICAjIENyZWF0ZSBkZXNrdG9wIHNob3J0Y3V0cworICAgIGNkICR7RH0vJHtwcmVmaXh9L2JpbgorICAgIGZvciBwcm9nIGluICo7IGRvCisJaWYgWyAteCAkcHJvZyBdOyB0aGVuCisgICAgICAgICAgICAjIENvbnZlcnQgcHJvZyB0byBUaXRsZSBDYXNlCisgICAgICAgICAgICB0aXRsZT0kKGVjaG8gJHByb2cgfCBzZWQgJ3MvXCheXHwgXCkuL1xVJi9nJykKKwkgICAgZWNobyAibWFraW5nICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcCIKKwkgICAgY2F0IDw8U1RPUCA+ICR7RH0vJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvJHByb2cuZGVza3RvcAorW0Rlc2t0b3AgRW50cnldCitOYW1lPSR0aXRsZQorRXhlYz0ke3ByZWZpeH0vYmluLyRwcm9nCitJY29uPWFwcGxpY2F0aW9ucy1nYW1lcworVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9R2FtZTsKK1N0YXJ0dXBOb3RpZnk9dHJ1ZQorWC1NQi1TaW5nbGVJbnN0YW5jZT10cnVlCitTVE9QCisgICAgICAgIGZpCisgICAgZG9uZQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE0M2MwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS5pbmMKQEAgLTAsMCArMSw1OCBAQAorU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitTVU1NQVJZID0gInJ4dnQgdGVybWluYWwgY2xvbmUgc3VwcG9ydGluZyB1bmljb2RlIgorREVTQ1JJUFRJT04gPSAicnh2dC11bmljb2RlIGlzIGEgY2xvbmUgb2YgdGhlIHdlbGwga25vd24gXAordGVybWluYWwgZW11bGF0b3Igcnh2dCwgbW9kaWZpZWQgdG8gc3RvcmUgdGV4dCBpbiBVbmljb2RlIFwKKyhlaXRoZXIgVUNTLTIgb3IgVUNTLTQpIGFuZCB0byB1c2UgbG9jYWxlLWNvcnJlY3QgaW5wdXQgYW5kIFwKK291dHB1dC4gSXQgYWxzbyBzdXBwb3J0cyBtaXhpbmcgbXVsdGlwbGUgZm9udHMgYXQgdGhlIFwKK3NhbWUgdGltZSwgaW5jbHVkaW5nIFhmdCBmb250cy4iCitERVBFTkRTID0gInZpcnR1YWwvbGlieDExIGxpYnh0IGxpYnhmdCBnZGstcGl4YnVmIgorCitTUkNfVVJJID0gImh0dHA6Ly9kaXN0LnNjaG1vcnAuZGUvcnh2dC11bmljb2RlL0F0dGljL3J4dnQtdW5pY29kZS0ke1BWfS50YXIuYnoyIFwKKwkgICBmaWxlOi8veHdjLnBhdGNoIFwKKwkgICBmaWxlOi8vcnh2dC5kZXNrdG9wIFwKKwkgICBmaWxlOi8vcnh2dC5wbmciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHVwZGF0ZS1hbHRlcm5hdGl2ZXMKKworUFJPVklERVMgPSAidmlydHVhbC94LXRlcm1pbmFsLWVtdWxhdG9yIgorQUxURVJOQVRJVkVfJHtQTn0gPSAieC10ZXJtaW5hbC1lbXVsYXRvciIKK0FMVEVSTkFUSVZFX1RBUkdFVFt4LXRlcm1pbmFsLWVtdWxhdG9yXSA9ICIke2JpbmRpcn0vcnh2dCIKKworQ0ZMQUdTX2FwcGVuZCA9ICIgLWZwZXJtaXNzaXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUteGltIFwKKwkJLS1lbmFibGUtdXRtcCAtLWVuYWJsZS13dG1wIC0tZW5hYmxlLWxhc3Rsb2cgXAorCQktLXdpdGgtdGVybT1yeHZ0IC0tZW5hYmxlLWtlZXBzY3JvbGxpbmcgXAorCQktLWVuYWJsZS14ZnQgLS13aXRoLW5hbWU9cnh2dCAtLWVuYWJsZS1mcmlsbHMgXAorCQktLWVuYWJsZS1zd2Fwc2NyZWVuIC0tZW5hYmxlLXRyYW5zcGFyZW5jeSBcCisJCS0td2l0aC1jb2Rlc2V0cz1ldSAtLWVuYWJsZS1wb2ludGVyLWJsYW5rIFwKKwkJLS1lbmFibGUtdGV4dC1ibGluayAtLWVuYWJsZS1yeHZ0LXNjcm9sbCBcCisJCS0tZW5hYmxlLWNvbWJpbmluZyAtLWRpc2FibGUtcGVybCBcCisJCS0td2l0aC14PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3N0YXJ0dXBdID0gIi0tZW5hYmxlLXN0YXJ0dXAtbm90aWZpY2F0aW9uLC0tZGlzYWJsZS1zdGFydHVwLW5vdGlmaWNhdGlvbixzdGFydHVwLW5vdGlmaWNhdGlvbiwiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlpZiBbICEgLWUgJHtTfS9hY2luY2x1ZGUubTQgXTsgdGhlbgorCQljcCAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKwlmaQorfQorCitkb19jb21waWxlX3ByZXBlbmQgKCkgeworCWVjaG8gJyNkZWZpbmUgVVRNUF9GSUxFICIke2xvY2Fsc3RhdGVkaXJ9L3J1bi91dG1wIicgPj4gY29uZmlnLmgKKwllY2hvICcjZGVmaW5lIFdUTVBfRklMRSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvd3RtcCInID4+IGNvbmZpZy5oCisJZWNobyAnI2RlZmluZSBMQVNUTE9HX0ZJTEUgIiR7bG9jYWxzdGF0ZWRpcn0vbG9nL2xhc3Rsb2ciJyA+PiBjb25maWcuaAorCWVjaG8gJyNkZWZpbmUgSEFWRV9YTE9DQUxFIDEnID4+IGNvbmZpZy5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKwlpbnN0YWxsIC1kICR7RH0vJHtkYXRhZGlyfQorCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucworCWluc3RhbGwgLWQgJHtEfS8ke2RhdGFkaXJ9L3BpeG1hcHMvCisKKwlpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9yeHZ0LnBuZyAke0R9LyR7ZGF0YWRpcn0vcGl4bWFwcworCWluc3RhbGwgLW0gMDY0NCAke1dPUktESVJ9L3J4dnQuZGVza3RvcCAke0R9LyR7ZGF0YWRpcn0vYXBwbGljYXRpb25zCit9CisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L2FwcGxpY2F0aW9ucy9yeHZ0LmRlc2t0b3AgJHtkYXRhZGlyfS9waXhtYXBzL3J4dnQucG5nIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3J4dnQuZGVza3RvcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODJlYTQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LmRlc2t0b3AKQEAgLTAsMCArMSw5IEBACitbRGVza3RvcCBFbnRyeV0KK1ZlcnNpb249MS4wCitOYW1lPVRlcm1pbmFsCitDb21tZW50PUEgdW5pY29kZSBjYXBhYmxlIHJ4dnQgY2xvbmUKK0V4ZWM9cnh2dAorSWNvbj10ZXJtaW5hbAorVGVybWluYWw9ZmFsc2UKK1R5cGU9QXBwbGljYXRpb24KK0NhdGVnb3JpZXM9VXRpbGl0eTtUZXJtaW5hbEVtdWxhdG9yOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS9yeHZ0LnBuZyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU2ZmEyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGUvcnh2dC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlL3h3Yy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmVmZWVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZS94d2MucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2RpZmYgLXJ1TiByeHZ0LXVuaWNvZGUtOS4xMC1vcmlnLy9zcmMvc2NyZWVuLkMgcnh2dC11bmljb2RlLTkuMTAvc3JjL3NjcmVlbi5DCistLS0gcnh2dC11bmljb2RlLTkuMTAtb3JpZy8vc3JjL3NjcmVlbi5DCTIwMTEtMDQtMTkgMTM6MzQ6MDEuMzI3NjY0OTg0ICswODAwCisrKysgcnh2dC11bmljb2RlLTkuMTAvc3JjL3NjcmVlbi5DCTIwMTEtMDQtMTkgMTM6MzQ6NDcuMDM3NjY1MDAxICswODAwCitAQCAtMzE1Miw3ICszMTUyLDcgQEAKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgIH0KKyAKKy0jaWYgMAorKyNpZiBIQVZFX1hXQworICAgWFRleHRQcm9wZXJ0eSBjdDsKKyAKKyAgIGlmIChYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5IChkcHksICZzZWxlY3Rpb24udGV4dCwgMSwgWFN0cmluZ1N0eWxlLCAmY3QpID49IDApCitAQCAtMzczNCw5ICszNzM0LDExIEBACisgICAgICAgICB9CisgICAgICAgZWxzZQorICNlbmRpZgorKyNpZmRlZiBIQVZFX1hXQworICAgICAgIGlmIChYd2NUZXh0TGlzdFRvVGV4dFByb3BlcnR5IChkcHksICZjbCwgMSwgKFhJQ0NFbmNvZGluZ1N0eWxlKSBzdHlsZSwgJmN0KSA+PSAwKQorICAgICAgICAgZnJlZWN0ID0gMTsKKyAgICAgICBlbHNlCisrI2VuZGlmCisgICAgICAgICB7CisgICAgICAgICAgIC8qIGlmIHdlIGZhaWxlZCB0byBjb252ZXJ0IHRoZW4gc2VuZCBpdCByYXcgKi8KKyAgICAgICAgICAgY3QudmFsdWUgPSAodW5zaWduZWQgY2hhciAqKWNsOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIwLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODBlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9yeHZ0LXVuaWNvZGUvcnh2dC11bmljb2RlXzkuMjAuYmIKQEAgLTAsMCArMSw4IEBACityZXF1aXJlIHJ4dnQtdW5pY29kZS5pbmMKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5DO2JlZ2lubGluZT0xO2VuZGxpbmU9MzE7bWQ1PTc3NTQ4NTM5OGEwOWZhN2FlZTZmOTA0NjRhZjg4NDMyIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGE1YjgyM2YwOGQyMTAzNmY5NGE2YzUxZTk0ZDAyNWIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTczZTEzZmU2NGI1OWZkM2M4ZTZlMjBjMDBmMTQ5ZDM4ODc0MWYxNDFiODE1NWU0NzAwZDNlZDQwYWE5NGI0ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3J4dnQtdW5pY29kZS9yeHZ0LXVuaWNvZGVfOS4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDQ5NDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vcnh2dC11bmljb2RlL3J4dnQtdW5pY29kZV85LjIxLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSByeHZ0LXVuaWNvZGUuaW5jCisKK0xJQ0VOU0UgPSAiR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5DO2JlZ2lubGluZT0xO2VuZGxpbmU9MzE7bWQ1PTdkYWMwMzk1ODA2NTcwODU2ZTAzN2Y5OGFiYTg1MTNiIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTlhMDZjNjA4MjU4YzVmZDI0N2MzNzI1ZDhmNDQ1ODIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzUyNzBlZDcyYmM1ODk1YTY0YTFkNzM5MmJmNDVhNjIyMjA0MTkyMzcxYzM5NjViZDNkZDk3OGRjMDg4OTU2YiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1pY29uLXRoZW1lL3NhdG8taWNvbi10aGVtZS8wMDAxLUluaGVyaXQtdGhlLUdOT01FLWljb24tdGhlbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMxNzZlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWUvMDAwMS1Jbmhlcml0LXRoZS1HTk9NRS1pY29uLXRoZW1lLnBhdGNoCkBAIC0wLDAgKzEsMzEgQEAKK0Zyb20gYjlmMDI5ODkzMTBhM2M5MjA1ODlmMWFhNjQ2YmNiZjE2YjI1NzJhMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvc3MgQnVydG9uIDxyb3NzLmJ1cnRvbkBpbnRlbC5jb20+CitEYXRlOiBXZWQsIDEzIEp1biAyMDEyIDExOjA3OjMzICswMTAwCitTdWJqZWN0OiBbUEFUQ0hdIEluaGVyaXQgdGhlIEdOT01FIGljb24gdGhlbWUKKworSWYgdGhlIEdOT01FIGljb24gdGhlbWUgaXNuJ3QgaW5zdGFsbGVkIHRoaXMgaXMgYSBuby1vcCwgYnV0IGlmIGl0IGlzIHRoZW4KK3lvdSdsbCBnZXQgZmFsbGJhY2sgZnJvbSBTYXRvIHRvIEdOT01FIGZvciBpY29ucyB0aGF0IGFyZSBub3QgaW4gU2F0by4KKworQXMgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSBmdWxsIEdOT01FIGljb24gdGhlbWUgZGVwZW5kIG9uIGdub21lLWljb24tdGhlbWUsCit0aGlzIGp1c3Qgd29ya3MuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKy0tLQorIGluZGV4LnRoZW1lIHwgICAgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisKK2RpZmYgLS1naXQgYS9pbmRleC50aGVtZSBiL2luZGV4LnRoZW1lCitpbmRleCBjNGIwM2E3Li42ODhmYmJmIDEwMDY0NAorLS0tIGEvaW5kZXgudGhlbWUKKysrKyBiL2luZGV4LnRoZW1lCitAQCAtMSw2ICsxLDcgQEAKKyBbSWNvbiBUaGVtZV0KKyBOYW1lPVNhdG8KKyBDb21tZW50PVNhdG8gaWNvbiB0aGVtZQorK0luaGVyaXRzPUFkd2FpdGEKKyAKKyBEaXJlY3Rvcmllcz0xNngxNi9hcHBzLDE2eDE2L3N0YXR1cywxNngxNi9zdG9jaywxNngxNi9wbGFjZXMsMTZ4MTYvbWltZXR5cGVzLDE2eDE2L2RldmljZXMsMTZ4MTYvYWN0aW9ucywyMngyMi9hcHBzLDIyeDIyL3N0YXR1cywyMngyMi9zdG9jaywyMngyMi9wbGFjZXMsMjJ4MjIvbWltZXR5cGVzLDIyeDIyL2RldmljZXMsMjJ4MjIvYWN0aW9ucywzMngzMi9hcHBzLDMyeDMyL3N0YXR1cywzMngzMi9zdG9jaywzMngzMi9wbGFjZXMsMzJ4MzIvbWltZXR5cGVzLDMyeDMyL2RldmljZXMsMzJ4MzIvYWN0aW9ucyw0OHg0OC9hcHBzLDQ4eDQ4L3N0YXR1cyw0OHg0OC9zdG9jayw0OHg0OC9wbGFjZXMsNDh4NDgvbWltZXR5cGVzLDQ4eDQ4L2RldmljZXMsNDh4NDgvYWN0aW9ucyw2NHg2NC9hcHBzLDY0eDY0L3N0YXR1cyw2NHg2NC9zdG9jayw2NHg2NC9wbGFjZXMsNjR4NjQvbWltZXR5cGVzLDY0eDY0L2RldmljZXMsNjR4NjQvYWN0aW9ucywKKyAKKy0tIAorMS43LjEwCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8taWNvbi10aGVtZS9zYXRvLWljb24tdGhlbWVfMC40LjEuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZDczNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zYXRvLWljb24tdGhlbWUvc2F0by1pY29uLXRoZW1lXzAuNC4xLmJiCkBAIC0wLDAgKzEsNDAgQEAKK1NVTU1BUlkgPSAiU2F0byBpY29uIHRoZW1lIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vLWhhbmQuY29tIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vYnVnemlsbGEueW9jdG9wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiQ0MtQlktU0EtMy4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTZhODMwYmJlNmU0Njk3ZmU2Y2JiYWUwMWJiN2MyYjIiCitTRUNUSU9OID0gIngxMSIKKworUFIgPSAicjYiCisKK0RFUEVORFMgPSAiaWNvbi1uYW1pbmctdXRpbHMtbmF0aXZlIGxpYnhtbC1zaW1wbGUtcGVybC1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Bva3lsaW51eC5vcmcvcmVsZWFzZXMvc2F0by8ke0JQTn0tJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtSW5oZXJpdC10aGUtR05PTUUtaWNvbi10aGVtZS5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjg2YTg0N2YzMTI4YTQzYTljZjIzYjcwMjlhNjU2ZjUwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjBiMGEyODA3YTZhOTY5MThhYzc5OWE4NjA5NGVjM2U4ZTJjODkyYmUwZmQ2NzlhNDIzMmMyYTc3ZjJmNjE3MzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBhbGxhcmNoIGd0ay1pY29uLWNhY2hlIHBlcmxuYXRpdmUKKworIyBUaGUgY29uZmlndXJlIHNjcmlwdCB1c2VzIHBrZy1jb25maWcgdG8gZmluZCBuYXRpdmUgYmluYXJpZXMgdG8gZXhlY3V0ZSwgc28KKyMgdGVsbCBpdCB0byB1c2Ugb3VyIHBrZy1jb25maWctbmF0aXZlIHdyYXBwZXIuCitleHBvcnQgUEtHX0NPTkZJRyA9ICJwa2ctY29uZmlnLW5hdGl2ZSIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vaWNvbnMvU2F0byIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJZmluZCAke0R9JHtkYXRhZGlyfS9pY29ucy9TYXRvLyAtbWF4ZGVwdGggMSAtdHlwZSBkIC1leGVjIGxuIC1zIHByZWZlcmVuY2VzLXN5c3RlbS5wbmcge30vYXBwcy9wcmVmZXJlbmNlcy1kZXNrdG9wLnBuZyBcOworCWZpbmQgJHtEfSR7ZGF0YWRpcn0vaWNvbnMvU2F0by8gLW1heGRlcHRoIDEgLXR5cGUgZCAtZXhlYyBsbiAtcyBmaWxlLW1hbmFnZXIucG5nIHt9L2FwcHMvc3lzdGVtLWZpbGUtbWFuYWdlci5wbmcgXDsKKwlmaW5kICR7RH0ke2RhdGFkaXJ9L2ljb25zL1NhdG8vIC1tYXhkZXB0aCAxIC10eXBlIGQgLWV4ZWMgbG4gLXMgLi4vYXBwcy90ZXJtaW5hbC5wbmcge30vcGxhY2VzL2NvbXB1dGVyLnBuZyBcOworfQorCisjIEV4cGxpY3RseSBzZXR0aW5nICJTYXRvIiBhcyB0aGUgZGVmYXVsdCBpY29uIHRoZW1lIHRvIGF2b2lkIGZsaWNrZXJpbmcgZnJvbQorIyB0aGUgZGVza3RvcCBhbmQgc2V0dGluZ3MgZGFlbW9uIHJhY2luZy4gIFRoaXMgc2hvdWxkbid0IGJlIGRvbmUgaGVyZSBidXQgaW4gdGhlIHNhdG8gaW1hZ2UKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgbWtkaXIgLXAgJEQvZXRjL2d0ay0yLjAKKworICAgIGdyZXAgLXMgLXEgLWUgXmd0ay1pY29uLXRoZW1lLW5hbWUuKlwiU2F0b1wiICREL2V0Yy9ndGstMi4wL2d0a3JjIHx8IFwKKyAgICAgICAgZWNobyAnZ3RrLWljb24tdGhlbWUtbmFtZSA9ICJTYXRvIicgPj4gJEQvZXRjL2d0ay0yLjAvZ3RrcmMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2F0by1zY3JlZW5zaG90L3NhdG8tc2NyZWVuc2hvdF9naXQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc5NDAzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NhdG8tc2NyZWVuc2hvdC9zYXRvLXNjcmVlbnNob3RfZ2l0LmJiCkBAIC0wLDAgKzEsMjkgQEAKK1NVTU1BUlkgPSAiVWx0cmEtc2ltcGxlIHNjcmVlbiBjYXB0dXJlIHV0aWxpdHksIGFpbWVkIGF0IGhhbmRoZWxkIGRldmljZXMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm8taGFuZC5jb20iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKKworTElDRU5TRSA9ICJHUEx2MiAmIEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL21haW4uYztlbmRsaW5lPTk7bWQ1PTAyM2UxNGQ2NDA0ZDBhOTYxZWI5N2NiZDAxMWZjMTQxIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NjcmVlbnNob3QtdWkuaDtlbmRsaW5lPTk7bWQ1PTYzOGQ5ZmZhODNlOTMyNWEzNmRmMjI0MTY2ZWQ2YWQwIgorCitERVBFTkRTID0gIm1hdGNoYm94LXBhbmVsLTIiCitTUkNSRVYgPSAiM2E5Njg4ZThhMDFiNjNhNzhmNDAyYjRlN2MwYjhiMDA1ZmNkZmEyOSIKK1BWID0gIjAuMStnaXQke1NSQ1BWfSIKK1BSID0gInIyIgorCitTUkNfVVJJID0gImdpdDovL2dpdC55b2N0b3Byb2plY3Qub3JnL3NjcmVlbnNob3QiCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vbWF0Y2hib3gtcGFuZWwvLmRlYnVnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gJHtEfSR7bGliZGlyfS9tYXRjaGJveC1wYW5lbC8qLmxhCit9CisKKyMgVGhlIG1hdGNoYm94LXBhbmVsLTIgcmVxdWlyZXMgeDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaCBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9maWxlcy83MHNldHRpbmdzLWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTM3NDEzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzLzcwc2V0dGluZ3MtZGFlbW9uLnNoCkBAIC0wLDAgKzEgQEAKKy91c3IvYmluL3NldHRpbmdzLWRhZW1vbiAmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvYWRkc291bmRrZXlzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWYwNmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2FkZHNvdW5ka2V5cy5wYXRjaApAQCAtMCwwICsxLDQ5IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNldHRpbmdzLWRhZW1vbi5vcmlnL3NldHRpbmdzLWRhZW1vbi5jCTIwMDktMDUtMjIgMTQ6NTc6MDUuMDAwMDAwMDAwICswMTAwCisrKysgc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbi5jCTIwMDktMDUtMjIgMTQ6NTg6MjIuMDAwMDAwMDAwICswMTAwCitAQCAtMTg3LDYgKzE4NywxMCBAQAorICAgICBHQ09ORl9WQUxVRV9TVFJJTkcsIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisgICB7ICIvZGVza3RvcC9wb2t5L2ludGVyZmFjZS9ndGtfY29sb3Jfc2NoZW1lIiwgIkd0ay9Db2xvclNjaGVtZSIsCisgICAgIEdDT05GX1ZBTFVFX1NUUklORywgdHJhbnNsYXRlX3N0cmluZ19zdHJpbmcgfSwKKysgIHsgIi9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWUiLCAiTmV0L1NvdW5kVGhlbWVOYW1lIiwKKysgICAgR0NPTkZfVkFMVUVfU1RSSU5HLCAgIHRyYW5zbGF0ZV9zdHJpbmdfc3RyaW5nIH0sCisrICB7ICIvZGVza3RvcC9nbm9tZS9zb3VuZC9ldmVudF9zb3VuZHMiLCAiTmV0L0VuYWJsZUV2ZW50U291bmRzIiAsCisrICAgIEdDT05GX1ZBTFVFX0JPT0wsICAgICB0cmFuc2xhdGVfYm9vbF9pbnQgfSwKKyB9OworIAorIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkVudHJ5KgorSW5kZXg6IHNldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb24uc2NoZW1hcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNldHRpbmdzLWRhZW1vbi5vcmlnL3NldHRpbmdzLWRhZW1vbi5zY2hlbWFzCTIwMDktMDUtMjIgMTU6NDk6MTcuMDAwMDAwMDAwICswMTAwCisrKysgc2V0dGluZ3MtZGFlbW9uL3NldHRpbmdzLWRhZW1vbi5zY2hlbWFzCTIwMDktMDUtMjIgMTU6NTE6MzEuMDAwMDAwMDAwICswMTAwCitAQCAtMTk2LDYgKzE5NiwyNyBAQAorICAgICA8L2xvY2FsZT4KKyAgIDwvc2NoZW1hPgorIAorKyAgPHNjaGVtYT4KKysgICAgPGtleT4vc2NoZW1hcy9kZXNrdG9wL2dub21lL3NvdW5kL3RoZW1lX25hbWU8L2tleT4KKysgICAgPGFwcGx5dG8+L2Rlc2t0b3AvZ25vbWUvc291bmQvdGhlbWVfbmFtZTwvYXBwbHl0bz4KKysgICAgPG93bmVyPmdub21lPC9vd25lcj4KKysgICAgPHR5cGU+c3RyaW5nPC90eXBlPgorKyAgICA8ZGVmYXVsdD5mcmVlZGVza3RvcDwvZGVmYXVsdD4KKysgICAgPGxvY2FsZSBuYW1lPSJDIj4KKysgICAgICA8c2hvcnQ+U291bmQgVGhlbWUgTmFtZTwvc2hvcnQ+CisrICAgIDwvbG9jYWxlPgorKyAgPC9zY2hlbWE+CisrCisrICA8c2NoZW1hPgorKyAgICA8a2V5Pi9zY2hlbWFzL2Rlc2t0b3AvZ25vbWUvc291bmQvZXZlbnRfc291bmRzPC9rZXk+CisrICAgIDxhcHBseXRvPi9kZXNrdG9wL2dub21lL3NvdW5kL2V2ZW50X3NvdW5kczwvYXBwbHl0bz4KKysgICAgPG93bmVyPmdub21lPC9vd25lcj4KKysgICAgPHR5cGU+Ym9vbDwvdHlwZT4KKysgICAgPGRlZmF1bHQ+dHJ1ZTwvZGVmYXVsdD4KKysgICAgPGxvY2FsZSBuYW1lPSJDIj4KKysgICAgICA8c2hvcnQ+RW5hYmxlIFNvdW5kIEV2ZW50czwvc2hvcnQ+CisrICAgIDwvbG9jYWxlPgorKyAgPC9zY2hlbWE+CisgCisgPC9zY2hlbWFsaXN0PgorIDwvZ2NvbmZzY2hlbWFmaWxlPgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vZmlsZXMvZHNvX2xpbmtpbmdfY2hhbmdlX2J1aWxkX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTQzNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2V0dGluZ3MtZGFlbW9uL2ZpbGVzL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCithZnRlciBnY2MgbGlua2luZyBoYXMgY2hhbmdlZCwgYWxsIHRoZSBsaWJyYXJpZXMgbXVzdCBiZSBleHBsaWNpdGVseSBzcGVjaWZpZWQgdG8gZm9yIGxpbmtpbmcuIAorVGhpcyBwYXRjaCBhdm9pZHMgdGhpcyBsaW5raW5nIGVycm9yOgorCit8IG1ha2UgIGFsbC1hbV5NCit8IG1ha2VbMV06IEVudGVyaW5nIGRpcmVjdG9yeSBgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NldHRpbmdzLWRhZW1vbi0wLjArc3ZucjIwNTktcjMvc2V0dGluZ3MtZGFlbW9uJ15NCit8IGNjYWNoZSBpNTg2LXBva3ktbGludXgtZ2NjIC1tYXJjaD1pNTg2IC0tc3lzcm9vdD0vZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4IC1XYWxsIC1mZXhwZW5zaXZlLW9wdGltaXphdGlvbnMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZyZW5hbWUtcmVnaXN0ZXJzIC1PMiAtZ2dkYiAtZmVsaW1pbmF0ZS11bnVzZWQtZGVidWctdHlwZXMgIC1XbCwtTzEgLVdsLC0taGFzaC1zdHlsZT1nbnUgLVdsLC0tYXMtbmVlZGVkIC1vIHNldHRpbmdzLWRhZW1vbiBzZXR0aW5nc19kYWVtb24teHNldHRpbmdzLWNvbW1vbi5vIHNldHRpbmdzX2RhZW1vbi14c2V0dGluZ3MtbWFuYWdlci5vIHNldHRpbmdzX2RhZW1vbi1zZXR0aW5ncy1kYWVtb24ubyAtcHRocmVhZCAtbGdjb25mLTIgLWxkYnVzLWdsaWItMSAtbGRidXMtMSAtbHB0aHJlYWQgLWxnZGsteDExLTIuMCAtbGdka19waXhidWYtMi4wIC1scGFuZ29jYWlyby0xLjAgLWxwYW5nby0xLjAgLWxjYWlybyAtbGdvYmplY3QtMi4wIC1sZ21vZHVsZS0yLjAgLWxndGhyZWFkLTIuMCAtbHJ0IC1sZ2xpYi0yLjBeTQorfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMveDg2XzY0LWxpbnV4L3Vzci9saWJleGVjL2k1ODYtcG9reS1saW51eC9nY2MvaTU4Ni1wb2t5LWxpbnV4LzQuNS4xL2xkOiAqXkE6IGludmFsaWQgRFNPIGZvciBzeW1ib2wgYFhDcmVhdGVTaW1wbGVXaW5kb3cnIGRlZmluaXRpb25eTQorfCAvZGlzazAvcG9reWJ1aWxkL2J1aWxkMS90bXAvc3lzcm9vdHMvaTU4Ni1wb2t5LWxpbnV4L3Vzci9saWIvbGliWDExLnNvLjY6IGNvdWxkIG5vdCByZWFkIHN5bWJvbHM6IEJhZCB2YWx1ZV5NCit8IGNvbGxlY3QyOiBsZCByZXR1cm5lZCAxIGV4aXQgc3RhdHVzXk0KK3wgbWFrZVsxXTogKioqIFtzZXR0aW5ncy1kYWVtb25dIEVycm9yIDFeTQorfCBtYWtlWzFdOiBMZWF2aW5nIGRpcmVjdG9yeSBgL2Rpc2swL3Bva3lidWlsZC9idWlsZDEvdG1wL3dvcmsvaTU4Ni1wb2t5LWxpbnV4L3NldHRpbmdzLWRhZW1vbi0wLjArc3ZucjIwNTktcjMvc2V0dGluZ3MtZGFlbW9uJ15NCit8IG1ha2U6ICoqKiBbYWxsXSBFcnJvciAyXk0KKworTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KK0RhdGU6IDIwMTEvMDEvMTEKKworSW5kZXg6IHNldHRpbmdzLWRhZW1vbi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBzZXR0aW5ncy1kYWVtb24ub3JpZy9jb25maWd1cmUuYWMKKysrKyBzZXR0aW5ncy1kYWVtb24vY29uZmlndXJlLmFjCitAQCAtMTQsNyArMTQsNyBAQCBBQ19QUk9HX0NDCisgCisgCisgZG5sIFRPRE86IG1ha2UgZ2NvbmYgb3B0aW9uYWwKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhBUFAsIFtnY29uZi0yLjAgZ2RrLXgxMS0yLjBdKQorK1BLR19DSEVDS19NT0RVTEVTKEFQUCwgW2djb25mLTIuMCBnZGsteDExLTIuMCB4MTFdKQorIAorIAorIEFDX1NVQlNUKEFQUF9DRkxBR1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3NldHRpbmdzLWRhZW1vbi9zZXR0aW5ncy1kYWVtb25fZ2l0LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjE1NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc2F0by9zZXR0aW5ncy1kYWVtb24vc2V0dGluZ3MtZGFlbW9uX2dpdC5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGEgYnJpZGdlIGJldHdlZW4gZ2NvbmYgYW5kIHhzZXR0aW5ncyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zdm4uby1oYW5kLmNvbS92aWV3L21hdGNoYm94L3RydW5rL3NldHRpbmdzLWRhZW1vbi8iCitCVUdUUkFDS0VSID0gImh0dHA6Ly9idWd6aWxsYS55b2N0b3Byb2plY3Qub3JnLyIKK0xJQ0VOU0UgPSAiTUlULXN0eWxlIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8veHNldHRpbmdzLW1hbmFnZXIuaDtlbmRsaW5lPTIyO21kNT03Y2ZhYzlkMmQ0ZGMzNjk0Y2M3ZWI2MDVjZjMyYTY5YiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly94c2V0dGluZ3MtY29tbW9uLmg7ZW5kbGluZT0yMjttZDU9N2NmYWM5ZDJkNGRjMzY5NGNjN2ViNjA1Y2YzMmE2OWIiCitERVBFTkRTID0gImdjb25mIGdsaWItMi4wIGd0aysiCitTRUNUSU9OID0gIngxMSIKK1NSQ1JFViA9ICI5YTk5NTI4YjAyMjU1NDUwZGI4MTE3NmFiZDliYmNjMWRhYjlhNGMxIgorUFYgPSAiMC4wK2dpdCR7U1JDUFZ9IgorCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcveHNldHRpbmdzLWRhZW1vbiBcCisgICAgICAgICAgIGZpbGU6Ly9hZGRzb3VuZGtleXMucGF0Y2g7YXBwbHk9eWVzIFwKKyAgICAgICAgICAgZmlsZTovLzcwc2V0dGluZ3MtZGFlbW9uLnNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rzb19saW5raW5nX2NoYW5nZV9idWlsZF9maXgucGF0Y2giCisKK1MgPSAiJHtXT1JLRElSfS9naXQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnY29uZiBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKworRklMRVNfJHtQTn0gPSAJIiR7YmluZGlyfS8qICR7c3lzY29uZmRpcn0iCisKKyMgUmVxdWlyZXMgZ2RrLXgxMS0yLjAgd2hpY2ggaXMgcHJvdmlkZWQgYnkgZ3RrIHdoZW4geDExIGluIERJU1RST19GRUFUVVJFUworUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworCWluc3RhbGwgLWQgJHtEfS8ke3N5c2NvbmZkaXJ9L1gxMS9Yc2Vzc2lvbi5kCisJaW5zdGFsbCAtbSA3NTUgJHtXT1JLRElSfS83MHNldHRpbmdzLWRhZW1vbi5zaCAke0R9LyR7c3lzY29uZmRpcn0vWDExL1hzZXNzaW9uLmQvCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIgYi9tZXRhL3JlY2lwZXMtc2F0by9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLWRlc2t0b3AuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkZDZkMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC5iYgpAQCAtMCwwICsxLDI1IEBACitTVU1NQVJZID0gIlByb3ZpZGVzIGFuIGljb24gdG8gc2h1dCBkb3duIHRoZSBzeXN0ZW0gY2xlYW5seSIKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK1NSQ19VUkkgPSAiZmlsZTovL3NodXRkb3duLmRlc2t0b3AiCisKK1BSID0gInIxIgorCitTID0gIiR7V09SS0RJUn0iCisKK2RvX2luc3RhbGwoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMKKwlpbnN0YWxsIC1tIDA2NDQgc2h1dGRvd24uZGVza3RvcCAke0R9JHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvCisKKwlzZWQgLWkgJHtEfSR7ZGF0YWRpcn0vYXBwbGljYXRpb25zL3NodXRkb3duLmRlc2t0b3AgLWUgJ3MjXkV4ZWM9XCguKlwpI0V4ZWM9JHtiYXNlX3NiaW5kaXJ9L1wxIycKK30KKworcGtnX3Bvc3RpbnN0XyR7UE59ICgpIHsKKyAgICBncmVwIC1xIHFlbXVhcm0gJEQke3N5c2NvbmZkaXJ9L2hvc3RuYW1lICYmIFwKKyAgICAgICAgc2VkIC1pICREJHtkYXRhZGlyfS9hcHBsaWNhdGlvbnMvc2h1dGRvd24uZGVza3RvcCAtZSAncyNeRXhlYz1cKC4qXCkvaGFsdCNFeGVjPVwxL3JlYm9vdCMnIFwKKyAgICAgICAgfHwgdHJ1ZQorfQorCitpbmhlcml0IGFsbGFyY2gKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wIGIvbWV0YS9yZWNpcGVzLXNhdG8vc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi1kZXNrdG9wL3NodXRkb3duLmRlc2t0b3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYyNjU5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3NodXRkb3duLWRlc2t0b3Avc2h1dGRvd24tZGVza3RvcC9zaHV0ZG93bi5kZXNrdG9wCkBAIC0wLDAgKzEsMTAgQEAKK1tEZXNrdG9wIEVudHJ5XQorRW5jb2Rpbmc9VVRGLTgKK1R5cGU9QXBwbGljYXRpb24KK05hbWU9U2h1dGRvd24KK0NvbW1lbnQ9Q2xvc2UgZG93biB0aGUgbWFjaGluZSBzYWZlbHkKK0V4ZWM9cG93ZXJvZmYKK0ljb249c3lzdGVtLXNodXRkb3duCitUZXJtaW5hbD1mYWxzZQorQ2F0ZWdvcmllcz1VdGlsaXR5OworU3RhcnR1cE5vdGlmeT10cnVlCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc2F0by93ZWJraXQvZmlsZXMvMDAwMS1UaGlzLXBhdGNoLWZpeGVzLWEtY29tbWFuZC1saW5lLXRoYXQtaXMtdG9vLWxvbmctb3ZlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGIzNDIwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L2ZpbGVzLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaApAQCAtMCwwICsxLDkxIEBACitGcm9tIDIyZDUwNjNjNTUxZDNjMDhjMGE0YWQ4YjgwZTA4Yjc5M2Q1MzA5M2QgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbGV4YW5kZXIgS2FuYXZpbiA8YWxleC5rYW5hdmluQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMTAgU2VwIDIwMTUgMTY6MjM6MjcgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gVGhpcyBwYXRjaCBmaXhlcyBhIGNvbW1hbmQgbGluZSB0aGF0IGlzIHRvbyBsb25nIChvdmVyIDEwMEshKQorIGFuZCBpcyByZWplY3RlZCBieSAvYmluL3NoLgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtzaG91bGQgYXBwZWFyIGluIDIuMTAsIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE4NDg1Nl0KK1NpZ25lZC1vZmYtYnk6IEFsZXhhbmRlciBLYW5hdmluIDxhbGV4LmthbmF2aW5AZ21haWwuY29tPgorCistLS0KKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSAgICAgICAgICAgICAgICAgICB8IDExICsrKysrKy0tLS0tCisgVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkgfCAxNiArKysrKysrKysrKystLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQoraW5kZXggYTEzYWY3Yy4uMDU4YzI0MSAxMDA2NDQKKy0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtlCisrKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorQEAgLTQwOCw3ICs0MDgsNyBAQCBzZXQoV2ViS2l0MldlYkV4dGVuc2lvbl9JTlNUQUxMRURfSEVBREVSUworICAgICAke1dFQktJVDJfRElSfS9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvd2Via2l0LXdlYi1leHRlbnNpb24uaAorICkKKyAKKy1maWxlKEdMT0IgSW5zcGVjdG9yRmlsZXMKKytzZXQoSW5zcGVjdG9yRmlsZXMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS8qLmh0bWwKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlLyouanMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy8qLmNzcworQEAgLTQyMywxMyArNDIzLDE0IEBAIGZpbGUoR0xPQiBJbnNwZWN0b3JGaWxlcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzLyouanMKKyAgICAgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9JbWFnZXMvZ3RrLyoucG5nCisgICAgICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvSW1hZ2VzL2d0ay8qLnN2ZworLSkKKy0KKy1saXN0KEFQUEVORCBJbnNwZWN0b3JGaWxlcworICAgICAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKKyAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcworICkKKyAKKytmaWxlKEdMT0IgSW5zcGVjdG9yRmlsZXNEZXBlbmRlbmNpZXMKKysgICAgJHtJbnNwZWN0b3JGaWxlc30KKyspCisrCisgIyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgR1RLKyBBUEkgV2ViS2l0VmVyc2lvbi5oIGFuZCBvbmUgZ2VuZXJhdGVkIGJ5IFdlYkNvcmUuCisgbGlzdChJTlNFUlQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTIDAKKyAgICAgIiR7Rk9SV0FSRElOR19IRUFERVJTX1dFQktJVDJHVEtfRElSfSIKK0BAIC01NjQsNyArNTY1LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAorIAorIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQktJVDJHVEtfRElSfS9JbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUueG1sCistICAgIERFUEVORFMgJHtJbnNwZWN0b3JGaWxlc30KKysgICAgREVQRU5EUyAke0luc3BlY3RvckZpbGVzRGVwZW5kZW5jaWVzfQorICAgICAgICAgICAgICR7VE9PTFNfRElSfS9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weQorICAgICBDT01NQU5EICR7VE9PTFNfRElSfS9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weSAtLW91dHB1dD0ke0RFUklWRURfU09VUkNFU19XRUJLSVQyR1RLX0RJUn0vSW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbCAke0luc3BlY3RvckZpbGVzfQorICAgICBWRVJCQVRJTQorZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1pbnNwZWN0b3ItZ3Jlc291cmNlLW1hbmlmZXN0LnB5IGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKK2luZGV4IDA2ODdjNGMuLjAzMDYwY2YgMTAwNzU1CistLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtaW5zcGVjdG9yLWdyZXNvdXJjZS1tYW5pZmVzdC5weQorKysrIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWluc3BlY3Rvci1ncmVzb3VyY2UtbWFuaWZlc3QucHkKK0BAIC0xNiw2ICsxNiw3IEBACisgIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAKKyBpbXBvcnQgYXJncGFyc2UKKytpbXBvcnQgZ2xvYgorIGltcG9ydCBvcworIGltcG9ydCBzeXMKKyAKK0BAIC0yNiwxMCArMjcsMTcgQEAgQkFTRV9ESVIgPSAnV2ViSW5zcGVjdG9yVUkvJworIGRlZiBnZXRfZmlsZW5hbWVzKGFyZ3MpOgorICAgICBmaWxlbmFtZXMgPSBbXQorIAorLSAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKKy0gICAgICAgIGJhc2VfZGlyX2luZGV4ID0gZmlsZW5hbWUucmZpbmQoQkFTRV9ESVIpCistICAgICAgICBpZiBiYXNlX2Rpcl9pbmRleCAhPSAtMToKKy0gICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lW2Jhc2VfZGlyX2luZGV4ICsgbGVuKEJBU0VfRElSKTpdKQorKyAgICBmb3IgcGF0dGVybiBpbiBhcmdzOgorKyAgICAgICAgcGF0aHMgPSBnbG9iLmdsb2IocGF0dGVybikKKysgICAgICAgIGZvciBmaWxlbmFtZSBpbiBwYXRoczoKKysgICAgICAgICAgICBiYXNlX2Rpcl9pbmRleCA9IGZpbGVuYW1lLnJmaW5kKEJBU0VfRElSKQorKyAgICAgICAgICAgIGlmIGJhc2VfZGlyX2luZGV4ICE9IC0xOgorKyAgICAgICAgICAgICAgICBuYW1lID0gZmlsZW5hbWVbYmFzZV9kaXJfaW5kZXggKyBsZW4oQkFTRV9ESVIpOl0KKysgICAgICAgICAgICAgICAgIyBUaGUgcmVzdWx0IHNob3VsZCB1c2UgZm9yd2FyZCBzbGFzaGVzLCB0aHVzIG1ha2Ugc3VyZSBhbnkgb3Mtc3BlY2lmaWMKKysgICAgICAgICAgICAgICAgIyBzZXBhcmF0b3IsIGFkZGVkIGJ5IHRoZSBnbG9iLmdsb2IoKSBjYWxsLCBpcyBwcm9wZXJseSByZXBsYWNlZAorKyAgICAgICAgICAgICAgICBpZiBvcy5zZXAgIT0gJy8nOgorKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShvcy5zZXAsICcvJykKKysgICAgICAgICAgICAgICAgZmlsZW5hbWVzLmFwcGVuZChuYW1lKQorICAgICByZXR1cm4gZmlsZW5hbWVzCisgCisgCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGsvZ2NjNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUxYTgxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0ay9nY2M1LnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0pTT2JqZWN0OiBDcmVhdGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBvZiBwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aG91dEF0dHJpYnV0ZXMKKworUmVhc29uIGZvciBjaGFuZ2U6IG5ld2VyIGdjYyBtaWdodCBvcHRpbWl6ZSBhd2F5IHRoZSB0ZW1wbGF0ZXMKK2FuZCB0aGV5IHdvbnQgYmUgYXZhaWxhYmxlIGZvciBvdGhlciAuY3BwIGZpbGVzIHRvIHVzZSBhcyB0aGVzZQorYXJlIHVzZWQgaW4gYSBkaWZmZXJlbnQgLmNwcCB3ZSBuZWVkIHRvIHRlbGwgY29tcGlsZXIgdG8gZXhwbGljaXRseQoraW5zdGFudGlhdGUgdGhlbS4KKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiB3ZWJraXRndGstMi44LjUvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gd2Via2l0Z3RrLTIuOC41Lm9yaWcvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKysgd2Via2l0Z3RrLTIuOC41L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorQEAgLTE5NjUsNiArMTk2NSwxMCBAQCB2b2lkIEpTT2JqZWN0OjpwdXRCeUluZGV4QmV5b25kVmVjdG9yTGVuCisgICAgIH0KKyB9CisgCisrdGVtcGxhdGUgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPEludDMyU2hhcGU+KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSk7CisrdGVtcGxhdGUgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhvdXRBdHRyaWJ1dGVzPERvdWJsZVNoYXBlPihFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGksIEpTVmFsdWUgdmFsdWUpOworK3RlbXBsYXRlIHZvaWQgSlNPYmplY3Q6OnB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRob3V0QXR0cmlidXRlczxDb250aWd1b3VzU2hhcGU+KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaSwgSlNWYWx1ZSB2YWx1ZSk7CisrCisgdm9pZCBKU09iamVjdDo6cHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpLCBKU1ZhbHVlIHZhbHVlLCBib29sIHNob3VsZFRocm93LCBBcnJheVN0b3JhZ2UqIHN0b3JhZ2UpCisgeworICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXNhdG8vd2Via2l0L3dlYmtpdGd0a18yLjguNS5iYiBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkNjcwZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zYXRvL3dlYmtpdC93ZWJraXRndGtfMi44LjUuYmIKQEAgLTAsMCArMSw1OCBAQAorU1VNTUFSWSA9ICJXZWJLaXQgd2ViIHJlbmRlcmluZyBlbmdpbmUgZm9yIHRoZSBHVEsrIHBsYXRmb3JtIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy53ZWJraXRndGsub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiQlNEICYgTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DT1BZSU5HLkxJQjttZDU9ZDBjNmQ2Mzk3YTVkODQyODZkZGE3NThkYTU3YmQ2OTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vU291cmNlL1dlYktpdC9MSUNFTlNFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUFQUExFO21kNT00NjQ2ZjkwMDgyYzQwYmNmMjk4YzI4NWY4YmFiMGIxMiBcCisJCSAgICBmaWxlOi8vU291cmNlL1dlYkNvcmUvTElDRU5TRS1MR1BMLTI7bWQ1PTM2MzU3ZmZkZTJiNjRhZTE3N2IyNDk0NDQ1Yjc5ZDIxIFwKKwkJICAgIGZpbGU6Ly9Tb3VyY2UvV2ViQ29yZS9MSUNFTlNFLUxHUEwtMi4xO21kNT1hNzc4YTMzZWYzMzhhYmJhZjhiOGE3YzM2YjZlZWM4MCBcCisJCSAgICIKKworU1JDX1VSSSA9ICJcCisgIGh0dHA6Ly93d3cud2Via2l0Z3RrLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgZmlsZTovLzAwMDEtVGhpcy1wYXRjaC1maXhlcy1hLWNvbW1hbmQtbGluZS10aGF0LWlzLXRvby1sb25nLW92ZS5wYXRjaCBcCisgIGZpbGU6Ly9nY2M1LnBhdGNoIFwKKyAgIgorU1JDX1VSSVttZDVzdW1dID0gImRmNzk5OTE4NDhhNTA5NmQzYTc1Mjg5ZWJjZTU0N2FlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjNkMWYwYzUzNDkzNWY0M2ZkNzRkZjkwZjI2NDhmY2VlNjcyZDYwZjFmNTdhMzBmYTU1N2E3Nzg5MWFlMDRkMjAiCisKK2luaGVyaXQgY21ha2UgbGliX3BhY2thZ2UgcGtnY29uZmlnIHBlcmxuYXRpdmUgcHl0aG9ubmF0aXZlCisKK0RFUEVORFMgPSAiemxpYiBlbmNoYW50IGxpYnNvdXAtMi40IGN1cmwgbGlieG1sMiBjYWlybyBsaWJ4c2x0IGxpYnh0IGxpYmlkbiBnbnV0bHMgXAorICAgICAgICAgICBndGsrIGd0ayszIGdzdHJlYW1lcjEuMCBnc3RyZWFtZXIxLjAtcGx1Z2lucy1iYXNlIGZsZXgtbmF0aXZlIGdwZXJmLW5hdGl2ZSBzcWxpdGUzIFwKKwkgICBwYW5nbyBpY3UgYmlzb24tbmF0aXZlIGdub21lLWNvbW1vbiBnYXdrIGludGx0b29sLW5hdGl2ZSBsaWJ3ZWJwIFwKKwkgICBhdGsgdWRldiBoYXJmYnV6eiBqcGVnIGxpYnBuZyBwdWxzZWF1ZGlvIGxpYnJzdmcgbGlidGhlb3JhIGxpYnZvcmJpcyBsaWJ4Y29tcG9zaXRlIGxpYnh0c3QgXAorCSAgIHJ1YnktbmF0aXZlIGxpYnNlY3JldCBsaWJub3RpZnkgZ3N0cmVhbWVyMS4wLXBsdWdpbnMtYmFkIFwKKyAgICAgICAgICAiCitERVBFTkRTICs9ICIgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAndmlydHVhbC9saWJnbCcsICcnLCBkKX0iCisKK0VYVFJBX09FQ01BS0UgPSAiIFwKKwkJLURQT1JUPUdUSyBcCisJCS1EQ01BS0VfQlVJTERfVFlQRT1SZWxlYXNlIFwKKwkJLURFTkFCTEVfSU5UUk9TUEVDVElPTj1GYWxzZSBcCisJCS1ERU5BQkxFX01JTklCUk9XU0VSPVRydWUgXAorCSAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdvcGVuZ2wnLCAnLURFTkFCTEVfV0VCR0w9VHJ1ZScsICctREVOQUJMRV9XRUJHTD1GYWxzZScsIGQpfSBcCisJCSIKKworIyBKYXZhc2NyaXB0IEpJVCBpcyBub3Qgc3VwcG9ydGVkIG9uIHBvd2VycGMKK0VYVFJBX09FQ01BS0VfYXBwZW5kX3Bvd2VycGMgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9wb3dlcnBjNjQgPSAiIC1ERU5BQkxFX0pJVD1GYWxzZSAiCisKKyMgQVJNIEpJVCBjb2RlIGRvZXMgbm90IGJ1aWxkIG9uIEFSTXY1LzYgYW55bW9yZSwgYXBwYXJlbnRseSB0aGV5IHRlc3Qgb25seSBvbiB2NyBvbndhcmRzCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9hcm12NSA9ICIgLURFTkFCTEVfSklUPUZhbHNlICIKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FybXY2ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCisjIGJpbnV0aWxzIDIuMjUuMSBoYXMgYSBidWcgb24gYWFyY2g2NDoKKyMgaHR0cHM6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9MTg0MzAKK0VYVFJBX09FQ01BS0VfYXBwZW5kX2FhcmNoNjQgPSAiIC1EVVNFX0xEX0dPTEQ9RmFsc2UgIgorCisjIEpJVCBub3Qgc3VwcG9ydGVkIG9uIE1JUFMgZWl0aGVyCitFWFRSQV9PRUNNQUtFX2FwcGVuZF9taXBzID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorRVhUUkFfT0VDTUFLRV9hcHBlbmRfbWlwczY0ID0gIiAtREVOQUJMRV9KSVQ9RmFsc2UgIgorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L3dlYmtpdDJndGstNC4wL2luamVjdGVkLWJ1bmRsZS9saWJ3ZWJraXQyZ3RraW5qZWN0ZWRidW5kbGUuc28iCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS93ZWJraXQyZ3RrLTQuMC9pbmplY3RlZC1idW5kbGUvLmRlYnVnL2xpYndlYmtpdDJndGtpbmplY3RlZGJ1bmRsZS5zbyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3dlYmtpdGd0ay93ZWJraXQyZ3RrLTQuMC8uZGVidWcvKiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJiMTE0OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9jb25maWdmaXgucGF0Y2gKQEAgLTAsMCArMSw1MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitJbmRleDogYXByLXV0aWwtMS4zLjQvYXB1LWNvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci11dGlsLTEuMy40Lm9yaWcvYXB1LWNvbmZpZy5pbgkyMDA5LTAxLTEyIDE3OjA4OjA2LjAwMDAwMDAwMCArMDAwMAorKysrIGFwci11dGlsLTEuMy40L2FwdS1jb25maWcuaW4JMjAwOS0wMS0xMiAxNzowOTowMC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzQsMTQgKzEzNCw3IEBACisgICAgIGV4aXQgMAorICAgICA7OworICAgICAtLWluY2x1ZGVzKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKyAgICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkaW5jbHVkZWRpciAkSU5DTFVERVMiCistICAgIGVsaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJzb3VyY2UiOyB0aGVuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1JJEFQVV9TT1VSQ0VfRElSL2luY2x1ZGUgJElOQ0xVREVTIgorLSAgICBlbHNlCistICAgICAgICAjIHRoaXMgaXMgZm9yIFZQQVRIIGJ1aWxkcworLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFVfQlVJTERfRElSL2luY2x1ZGUgLUkkQVBVX1NPVVJDRV9ESVIvaW5jbHVkZSAkSU5DTFVERVMiCistICAgIGZpCisgICAgIDs7CisgICAgIC0tbGRmbGFncykKKyAgICAgZmxhZ3M9IiRmbGFncyAkTERGTEFHUyIKK0BAIC0xNTUsMjggKzE0OCwxMCBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1saW5rLWxkKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKyAgICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1sJEFQUlVUSUxfTElCTkFNRSIKKy0gICAgZWxzZQorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRBUFVfQlVJTERfRElSIC1sJEFQUlVUSUxfTElCTkFNRSIKKy0gICAgZmkKKyAgICAgOzsKKyAgICAgLS1saW5rLWxpYnRvb2wpCistICAgICMgSWYgdGhlIExBX0ZJTEUgZXhpc3RzIHdoZXJlIHdlIHRoaW5rIGl0IHNob3VsZCBiZSwgdXNlIGl0LiAgSWYgd2UncmUKKy0gICAgIyBpbnN0YWxsZWQgYW5kIHRoZSBMQV9GSUxFIGRvZXMgbm90IGV4aXN0LCBhc3N1bWUgdG8gdXNlIC1MLy1sCistICAgICMgKHRoZSBMQV9GSUxFIG1heSBub3QgaGF2ZSBiZWVuIGluc3RhbGxlZCkuICBJZiB3ZSdyZSBidWlsZGluZyBvdXJzZWx2ZXMsCistICAgICMgd2UnbGwgYXNzdW1lIHRoYXQgYXQgc29tZSBwb2ludCB0aGUgLmxhIGZpbGUgYmUgY3JlYXRlZC4KKy0gICAgaWYgdGVzdCAtZiAiJExBX0ZJTEUiOyB0aGVuCistICAgICAgICBmbGFncz0iJGZsYWdzICRMQV9GSUxFIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAiaW5zdGFsbGVkIjsgdGhlbgorLSAgICAgICAgIyMjIGF2b2lkIHVzaW5nIC1MIGlmIGxpYmRpciBpcyBhICJzdGFuZGFyZCIgbG9jYXRpb24gbGlrZSAvdXNyL2xpYgorLSAgICAgICAgIyBTaW5jZSB0aGUgdXNlciBpcyBzcGVjaWZ5aW5nIHRoZXkgYXJlIGxpbmtpbmcgd2l0aCBsaWJ0b29sLCB3ZQorLSAgICAgICAgIyAqa25vdyogdGhhdCAtUiB3aWxsIGJlIHJlY29nbml6ZWQgYnkgbGlidG9vbC4KKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1SJGxpYmRpciAtbCRBUFJVVElMX0xJQk5BTUUiCistICAgIGVsc2UKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgJExBX0ZJTEUiCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJEFQUlVUSUxfTElCTkFNRSIKKyAgICAgOzsKKyAgICAgLS1hcHUtbGEtZmlsZSkKKyAgICAgaWYgdGVzdCAtZiAiJExBX0ZJTEUiOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvY29uZmlndXJlX2ZpeGVzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWUyNDRjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItdXRpbC0xLjQuMS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBhcHItdXRpbC0xLjQuMS5vcmlnL2NvbmZpZ3VyZS5pbgkyMDA5LTEyLTE4IDAzOjE1OjE5LjAwMDAwMDAwMCArMDgwMAorKysrIGFwci11dGlsLTEuNC4xL2NvbmZpZ3VyZS5pbgkyMDExLTEyLTMwIDEzOjMyOjA3LjAwMDAwMDAwMCArMDgwMAorQEAgLTgsMTUgKzgsMTUgQEAKKyBBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvcHJpdmF0ZS9hcHVfY29uZmlnLmgpCisgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQpCisgCistc2luY2x1ZGUoYnVpbGQvYXB1LWNvbmYubTQpCistc2luY2x1ZGUoYnVpbGQvYXB1LWljb252Lm00KQorLXNpbmNsdWRlKGJ1aWxkL2FwdS1oaW50cy5tNCkKKy1zaW5jbHVkZShidWlsZC9hcHJfY29tbW9uLm00KQorLXNpbmNsdWRlKGJ1aWxkL2ZpbmRfYXByLm00KQorLXNpbmNsdWRlKGJ1aWxkL2NyeXB0by5tNCkKKy1zaW5jbHVkZShidWlsZC9kYm0ubTQpCistc2luY2x1ZGUoYnVpbGQvZGJkLm00KQorLXNpbmNsdWRlKGJ1aWxkL2Rzby5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXB1LWNvbmYubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2FwdS1pY29udi5tNCkKKysjc2luY2x1ZGUoYnVpbGQvYXB1LWhpbnRzLm00KQorKyNzaW5jbHVkZShidWlsZC9hcHJfY29tbW9uLm00KQorKyNzaW5jbHVkZShidWlsZC9maW5kX2Fwci5tNCkKKysjc2luY2x1ZGUoYnVpbGQvY3J5cHRvLm00KQorKyNzaW5jbHVkZShidWlsZC9kYm0ubTQpCisrI3NpbmNsdWRlKGJ1aWxkL2RiZC5tNCkKKysjc2luY2x1ZGUoYnVpbGQvZHNvLm00KQorIAorIGRubCBHZW5lcmF0ZSAuL2NvbmZpZy5uaWNlIGZvciByZXByb2R1Y2luZyBydW5zIG9mIGNvbmZpZ3VyZQorIGRubCAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByLXV0aWwvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NkIHRlc3QKKy4vdGVzdGFsbCB8c2VkIFwKKyAgLWUgJ3N8XCguKlwpOiAgU1VDQ0VTU3xQQVNTOiBcMXwnIFwKKyAgLWUgJ3N8XCguKlwpOiAgRkFJTEVEfEZBSUw6IFwxfCcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHItdXRpbF8xLjUuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTE0ZDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci11dGlsXzEuNS40LmJiCkBAIC0wLDAgKzEsODEgQEAKK1NVTU1BUlkgPSAiQXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUgKEFQUikgY29tcGFuaW9uIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vYXByLmFwYWNoZS5vcmcvIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJhcHIgZXhwYXQgZ2RibSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitMSUNFTlNFID0gIkFwYWNoZS0yLjAiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT01MTllMGExOGUwM2Y3YzAyMzA3MDU2OGMxNGIwNzdiYiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9pbmNsdWRlL2FwdV92ZXJzaW9uLmg7ZW5kbGluZT0xNzttZDU9ODA2Njg1YTg0ZTcxZjEwYzgwMTQ0YzQ4ZWIzNWRmNDIiCisKK1NSQ19VUkkgPSAiJHtBUEFDSEVfTUlSUk9SfS9hcHIvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWdmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY29uZmlndXJlX2ZpeGVzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NjY4MjVjMDRkYTgyN2M2ZTVmNTNkYWZmNTU2OWY0MiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5NzZhMTJhNTliYzI4NmQ2MzRhMjFkN2JlMDg0MWNjNzQyODllYTkwNzdhYTFhZjQ2YmUxOWQxYTZlODQ0YzE5IgorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLWFwcj0ke1NUQUdJTkdfQklORElSX0NST1NTfS9hcHItMS1jb25maWcgXCAKKwkJLS13aXRob3V0LW9kYmMgXAorCQktLXdpdGhvdXQtcGdzcWwgXAorCQktLXdpdGgtZGJtPWdkYm0gXAorCQktLXdpdGgtZ2RibT0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IFwKKwkJLS13aXRob3V0LXNxbGl0ZTIgXAorCQktLXdpdGhvdXQtc3FsaXRlMyBcCisJCS0td2l0aC1leHBhdD0ke1NUQUdJTkdfRElSX0hPU1R9JHtwcmVmaXh9IgorCisKK2luaGVyaXQgYXV0b3Rvb2xzIGxpYl9wYWNrYWdlIGJpbmNvbmZpZworCitQUiA9ICJyMSIKKworT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSA9ICIgLWUgJ3M6bG9jYXRpb249c291cmNlOmxvY2F0aW9uPWluc3RhbGxlZDonIgorCitkb19jb25maWd1cmVfYXBwZW5kKCkgeworCWlmIFsgIiR7Q0xBU1NPVkVSUklERX0iID0gImNsYXNzLXRhcmdldCIgXTsgdGhlbgorCQljcCAke1NUQUdJTkdfREFUQURJUn0vYXByL2Fwcl9ydWxlcy5tayAke0J9L2J1aWxkL3J1bGVzLm1rCisJZmkKK30KK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZSgpIHsKKwlta2RpciAke0J9L2J1aWxkCisJY3AgJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9hcHIvYXByX3J1bGVzLm1rICR7Qn0vYnVpbGQvcnVsZXMubWsKK30KK2RvX2NvbmZpZ3VyZV9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCXNlZCAtaSAicyNMSUJUT09MPVwkKFNIRUxMKSBcJChhcHJfYnVpbGRkaXIpI0xJQlRPT0w9XCQoU0hFTEwpICR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfSMiICR7Qn0vYnVpbGQvcnVsZXMubWsKKwkjIHNvbWV0aW1lcyB0aGVyZSBpc24ndCBTSEVMTAorCXNlZCAtaSAicyNMSUJUT09MPVwkKGFwcl9idWlsZGRpcikjTElCVE9PTD0ke1NUQUdJTkdfQklORElSX05BVElWRX0jIiAke0J9L2J1aWxkL3J1bGVzLm1rCit9CisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kX2NsYXNzLW5hdGl2ZXNkaygpIHsKKwljcCAke1NUQUdJTkdfREFUQURJUn0vYXByL2Fwcl9ydWxlcy5tayAke1N9L2J1aWxkL3J1bGVzLm1rCit9CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworCXNlZCAtaSAicyNcKGFwcl9idWlsZGRpclwpPS4qI1wxPSR7U1RBR0lOR19EQVRBRElSfS9idWlsZC0xIyIgJHtTfS9idWlsZC9ydWxlcy5taworCXNlZCAtaSAicyNcKGFwcl9idWlsZGVyc1wpPS4qI1wxPSR7U1RBR0lOR19EQVRBRElSfS9idWlsZC0xIyIgJHtTfS9idWlsZC9ydWxlcy5taworCXNlZCAtaSAicyNcKHRvcF9idWlsZGRpclwpPS4qI1wxPSR7U1RBR0lOR19EQVRBRElSfS9idWlsZC0xIyIgJHtTfS9idWlsZC9ydWxlcy5taworCXNlZCAtaSAicyNcKExJQlRPT0w9XCQoYXByX2J1aWxkZGlyKVwpLiojXDEvbGlidG9vbCMiICR7U30vYnVpbGQvcnVsZXMubWsKK30KKworRklMRVNfJHtQTn0gICAgICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS9hcHJfZGJtX2dkYm0tMS5zbyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L2FwcnV0aWwuZXhwICR7bGliZGlyfS9hcHItdXRpbC0xL2Fwcl9kYm1fZ2RibS5zbyogJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vYXByLXV0aWwtMS8uZGVidWcvKiIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiArPSAiJHtsaWJkaXJ9L2Fwci11dGlsLTEvYXByX2RibV9nZGJtLmEiCisKK2luaGVyaXQgcHRlc3QKKworZG9fY29tcGlsZV9wdGVzdCgpIHsKKwljZCAke0J9L3Rlc3QKKwlvZV9ydW5tYWtlCit9CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdD0ke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJbWtkaXIgJHQKKwlmb3IgaSBpbiB0ZXN0YWxsIGRhdGE7IGRvIFwKKwkgIGNwIC1yICR7Qn0vdGVzdC8kaSAkdDsgXAorCWRvbmUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwci9GaXgtcGFja2V0LWRpc2NhcmRzLUhUVFAtcmVkaXJlY3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgwNWI4YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvRml4LXBhY2tldC1kaXNjYXJkcy1IVFRQLXJlZGlyZWN0LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK0ZpeCBwYWNrZXQgZGlzY2FyZHMgSFRUUCByZWRpcmVjdC4KKworRGlzY29ubmVjdCB0aGUgY29ubmVjdGlvbiBieSBwb2xsKCkgdGltZW91dC4KK0lmIHRpbWVvdXQ9MCBhbmQgYXByX3dhaXRfZm9yX2lvX29yX3RpbWVvdXQoKT1BUFJfVElNRVVQIHRoZW4KK2Fwcl9zb2NrZXRfcmVjdigpIHJldHVybnMgRUFHQUlOLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogTm9yaWFraSBZb3NoaXRhbmUgPHlvc2hpdGFuZS5ucnNAY250Lm5jb3MubmVjLmNvLmpwPgorU2lnbmVkLW9mZi1ieTogTGkgV2FuZyA8bGkud2FuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMgfCAgICA0ICsrKysKKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9uZXR3b3JrX2lvL3VuaXgvc2VuZHJlY3YuYyBiL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCitpbmRleCBjMTMzYTI2Li5lOGZhZjE1IDEwMDY0NAorLS0tIGEvbmV0d29ya19pby91bml4L3NlbmRyZWN2LmMKKysrKyBiL25ldHdvcmtfaW8vdW5peC9zZW5kcmVjdi5jCitAQCAtODUsNiArODUsMTAgQEAgYXByX3N0YXR1c190IGFwcl9zb2NrZXRfcmVjdihhcHJfc29ja2V0X3QgKnNvY2ssIGNoYXIgKmJ1ZiwgYXByX3NpemVfdCAqbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAmJiAoc29jay0+dGltZW91dCA+IDApKSB7CisgZG9fc2VsZWN0OgorICAgICAgICAgYXJ2ID0gYXByX3dhaXRfZm9yX2lvX29yX3RpbWVvdXQoTlVMTCwgc29jaywgMSk7CisrICAgICAgICBpZiAoKGFydiA9PSBBUFJfVElNRVVQKSAmJiAoc29jay0+dGltZW91dCA9PSAwKSkgeworKyAgICAgICAgICAgICpsZW4gPSAwOworKyAgICAgICAgICAgIHJldHVybiBFQUdBSU47CisrICAgICAgICB9CisgICAgICAgICBpZiAoYXJ2ICE9IEFQUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgKmxlbiA9IDA7CisgICAgICAgICAgICAgcmV0dXJuIGFydjsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NsZWFudXAucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjY3ODRlMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY2xlYW51cC5wYXRjaApAQCAtMCwwICsxLDQzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItMS40LjIvYnVpbGQvYnVpbGRjaGVjay5zaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjQuMi5vcmlnL2J1aWxkL2J1aWxkY2hlY2suc2gJMjAwOS0xMS0xMyAwODoyNzoxNi4wMDAwMDAwMDAgKzA4MDAKKysrKyBhcHItMS40LjIvYnVpbGQvYnVpbGRjaGVjay5zaAkyMDEwLTExLTI2IDE1OjQ0OjAwLjAwMDAwMDAwMCArMDgwMAorQEAgLTMyLDM1ICszMiw0IEBACisgZWNobyAiYnVpbGRjb25mOiBhdXRvY29uZiB2ZXJzaW9uICRhY192ZXJzaW9uIChvaykiCisgZmkKKyAKKy0jIFNhbXBsZSBsaWJ0b29sIC0tdmVyc2lvbiBvdXRwdXRzOgorLSMgbHRtYWluLnNoIChHTlUgbGlidG9vbCkgMS4zLjMgKDEuMzg1LjIuMTgxIDE5OTkvMDcvMDIgMTU6NDk6MTEpCistIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sIDEuMTM2MSAyMDA0LzAxLzAyIDIzOjEwOjUyKSAxLjVhCistIyBvdXRwdXQgaXMgbXVsdGlsaW5lIGZyb20gMS41IG9ud2FyZHMKKy0KKy0jIFJlcXVpcmUgbGlidG9vbCAxLjQgb3IgbmV3ZXIKKy1saWJ0b29sPWBidWlsZC9QcmludFBhdGggZ2xpYnRvb2wxIGdsaWJ0b29sIGxpYnRvb2wgbGlidG9vbDE1IGxpYnRvb2wxNGAKKy1sdF9wdmVyc2lvbj1gJGxpYnRvb2wgLS12ZXJzaW9uIDI+L2Rldi9udWxsfHNlZCAtZSAncy8oW14pXSopLy9nO3MvXlteMC05XSovLztzL1stIF0uKi8vZztxJ2AKKy1pZiB0ZXN0IC16ICIkbHRfcHZlcnNpb24iOyB0aGVuCistZWNobyAiYnVpbGRjb25mOiBsaWJ0b29sIG5vdCBmb3VuZC4iCistZWNobyAiICAgICAgICAgICBZb3UgbmVlZCBsaWJ0b29sIHZlcnNpb24gMS40IG9yIG5ld2VyIGluc3RhbGxlZCIKKy1lY2hvICIgICAgICAgICAgIHRvIGJ1aWxkIEFQUiBmcm9tIFNWTi4iCistZXhpdCAxCistZmkKKy1sdF92ZXJzaW9uPWBlY2hvICRsdF9wdmVyc2lvbnxzZWQgLWUgJ3MvXChbYS16XSpcKSQvLlwxLydgCistSUZTPS47IHNldCAkbHRfdmVyc2lvbjsgSUZTPScgJworLWx0X3N0YXR1cz0iZ29vZCIKKy1pZiB0ZXN0ICIkMSIgPSAiMSI7IHRoZW4KKy0gICBpZiB0ZXN0ICIkMiIgLWx0ICI0IjsgdGhlbgorLSAgICAgIGx0X3N0YXR1cz0iYmFkIgorLSAgIGZpCistZmkKKy1pZiB0ZXN0ICRsdF9zdGF0dXMgPSAiZ29vZCI7IHRoZW4KKy0gICBlY2hvICJidWlsZGNvbmY6IGxpYnRvb2wgdmVyc2lvbiAkbHRfcHZlcnNpb24gKG9rKSIKKy0gICBleGl0IDAKKy1maQorLQorLWVjaG8gImJ1aWxkY29uZjogbGlidG9vbCB2ZXJzaW9uICRsdF9wdmVyc2lvbiBmb3VuZC4iCistZWNobyAiICAgICAgICAgICBZb3UgbmVlZCBsaWJ0b29sIHZlcnNpb24gMS40IG9yIG5ld2VyIGluc3RhbGxlZCIKKy1lY2hvICIgICAgICAgICAgIHRvIGJ1aWxkIEFQUiBmcm9tIFNWTi4iCistCistZXhpdCAxCisrZXhpdCAwCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlnZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNWM0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ2ZpeC5wYXRjaApAQCAtMCwwICsxLDUzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItMS4zLjMvYXByLWNvbmZpZy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGFwci0xLjMuMy5vcmlnL2Fwci1jb25maWcuaW4JMjAwOS0wMS0xMiAxNToxNjozMS4wMDAwMDAwMDAgKzAwMDAKKysrKyBhcHItMS4zLjMvYXByLWNvbmZpZy5pbgkyMDA5LTAxLTEyIDE1OjE5OjI1LjAwMDAwMDAwMCArMDAwMAorQEAgLTE1MiwxNCArMTUyLDcgQEAKKyAgICAgZmxhZ3M9IiRmbGFncyAkTERGTEFHUyIKKyAgICAgOzsKKyAgICAgLS1pbmNsdWRlcykKKy0gICAgaWYgdGVzdCAiJGxvY2F0aW9uIiA9ICJpbnN0YWxsZWQiOyB0aGVuCisgICAgICAgICBmbGFncz0iJGZsYWdzIC1JJGluY2x1ZGVkaXIgJEVYVFJBX0lOQ0xVREVTIgorLSAgICBlbGlmIHRlc3QgIiRsb2NhdGlvbiIgPSAic291cmNlIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtSSRBUFJfU09VUkNFX0RJUi9pbmNsdWRlICRFWFRSQV9JTkNMVURFUyIKKy0gICAgZWxzZQorLSAgICAgICAgIyB0aGlzIGlzIGZvciBWUEFUSCBidWlsZHMKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUkkQVBSX0JVSUxEX0RJUi9pbmNsdWRlIC1JJEFQUl9TT1VSQ0VfRElSL2luY2x1ZGUgJEVYVFJBX0lOQ0xVREVTIgorLSAgICBmaQorICAgICA7OworICAgICAtLXNyY2RpcikKKyAgICAgZWNobyAkQVBSX1NPVVJDRV9ESVIKK0BAIC0xODEsMjkgKzE2NywxNCBAQAorICAgICBleGl0IDAKKyAgICAgOzsKKyAgICAgLS1saW5rLWxkKQorLSAgICBpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgIGZsYWdzPSIkZmxhZ3MgLUwkbGliZGlyIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGVsc2UKKy0gICAgICAgICMjIyB0aGlzIHN1cmVseSBjYW4ndCB3b3JrIHNpbmNlIHRoZSBsaWJyYXJ5IGlzIGluIC5saWJzPworLSAgICAgICAgZmxhZ3M9IiRmbGFncyAtTCRBUFJfQlVJTERfRElSIC1sJHtBUFJfTElCTkFNRX0iCistICAgIGZpCisrICAgICAgICBmbGFncz0iJGZsYWdzIC1sJHtBUFJfTElCTkFNRX0iCisgICAgIDs7CisgICAgIC0tbGluay1saWJ0b29sKQorICAgICAjIElmIHRoZSBMQV9GSUxFIGV4aXN0cyB3aGVyZSB3ZSB0aGluayBpdCBzaG91bGQgYmUsIHVzZSBpdC4gIElmIHdlJ3JlCisgICAgICMgaW5zdGFsbGVkIGFuZCB0aGUgTEFfRklMRSBkb2VzIG5vdCBleGlzdCwgYXNzdW1lIHRvIHVzZSAtTC8tbAorICAgICAjICh0aGUgTEFfRklMRSBtYXkgbm90IGhhdmUgYmVlbiBpbnN0YWxsZWQpLiAgSWYgd2UncmUgYnVpbGRpbmcgb3Vyc2VsdmVzLAorICAgICAjIHdlJ2xsIGFzc3VtZSB0aGF0IGF0IHNvbWUgcG9pbnQgdGhlIC5sYSBmaWxlIGJlIGNyZWF0ZWQuCistICAgIGlmIHRlc3QgLWYgIiRMQV9GSUxFIjsgdGhlbgorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZWxpZiB0ZXN0ICIkbG9jYXRpb24iID0gImluc3RhbGxlZCI7IHRoZW4KKy0gICAgICAgICMjIyBhdm9pZCB1c2luZyAtTCBpZiBsaWJkaXIgaXMgYSAic3RhbmRhcmQiIGxvY2F0aW9uIGxpa2UgL3Vzci9saWIKKy0gICAgICAgICMgU2luY2UgdGhlIHVzZXIgaXMgc3BlY2lmeWluZyB0aGV5IGFyZSBsaW5raW5nIHdpdGggbGlidG9vbCwgd2UKKy0gICAgICAgICMgKmtub3cqIHRoYXQgLVIgd2lsbCBiZSByZWNvZ25pemVkIGJ5IGxpYnRvb2wuCistICAgICAgICBmbGFncz0iJGZsYWdzIC1MJGxpYmRpciAtUiRsaWJkaXIgLWwke0FQUl9MSUJOQU1FfSIKKy0gICAgZWxzZQorLSAgICAgICAgZmxhZ3M9IiRmbGFncyAkTEFfRklMRSIKKy0gICAgZmkKKysgICAgICAgIGZsYWdzPSIkZmxhZ3MgLWwke0FQUl9MSUJOQU1FfSIKKyAgICAgOzsKKyAgICAgLS1zaGxpYi1wYXRoLXZhcikKKyAgICAgZWNobyAiJFNITElCUEFUSF9WQVIiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvY29uZmlndXJlX2ZpeGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTQwMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL2NvbmZpZ3VyZV9maXhlcy5wYXRjaApAQCAtMCwwICsxLDY4IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0luZGV4OiBhcHItMS4zLjMvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYXByLTEuMy4zLm9yaWcvY29uZmlndXJlLmluCisrKysgYXByLTEuMy4zL2NvbmZpZ3VyZS5pbgorQEAgLTc5NCwzOSArNzk0LDYgQEAgQUNfQ0hFQ0tfRlVOQ1MoW21tYXAgbXVubWFwIHNobV9vcGVuIHNobQorICAgICAgICAgICAgICAgICBjcmVhdGVfYXJlYV0pCisgCisgQVBSX0NIRUNLX0RFRklORShNQVBfQU5PTiwgc3lzL21tYW4uaCkKKy1BQ19DSEVDS19GSUxFKC9kZXYvemVybykKKy0KKy0jIE5vdCBhbGwgc3lzdGVtcyBjYW4gbW1hcCAvZGV2L3plcm8gKHN1Y2ggYXMgSFAtVVgpLiAgQ2hlY2sgZm9yIHRoYXQuCistaWYgdGVzdCAiJGFjX2N2X2Z1bmNfbW1hcCIgPSAieWVzIiAmJgorLSAgIHRlc3QgIiRhY19jdl9maWxlX19kZXZfemVybyIgPSAieWVzIjsgdGhlbgorLSAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIG1tYXAgdGhhdCBjYW4gbWFwIC9kZXYvemVybykKKy0gICAgQUNfVFJZX1JVTihbCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgorLSNpbmNsdWRlIDxmY250bC5oPgorLSNpZmRlZiBIQVZFX1NZU19NTUFOX0gKKy0jaW5jbHVkZSA8c3lzL21tYW4uaD4KKy0jZW5kaWYKKy0gICAgaW50IG1haW4oKQorLSAgICB7CistICAgICAgICBpbnQgZmQ7CistICAgICAgICB2b2lkICptOworLSAgICAgICAgZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworLSAgICAgICAgaWYgKGZkIDwgMCkgeworLSAgICAgICAgICAgIHJldHVybiAxOworLSAgICAgICAgfQorLSAgICAgICAgbSA9IG1tYXAoMCwgc2l6ZW9mKHZvaWQqKSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKy0gICAgICAgIGlmIChtID09ICh2b2lkICopLTEpIHsgIC8qIGFrYSBNQVBfRkFJTEVEICovCistICAgICAgICAgICAgcmV0dXJuIDI7CistICAgICAgICB9CistICAgICAgICBpZiAobXVubWFwKG0sIHNpemVvZih2b2lkKikpIDwgMCkgeworLSAgICAgICAgICAgIHJldHVybiAzOworLSAgICAgICAgfQorLSAgICAgICAgcmV0dXJuIDA7CistICAgIH1dLCBbXSwgW2FjX2N2X2ZpbGVfX2Rldl96ZXJvPW5vXSwgW2FjX2N2X2ZpbGVfX2Rldl96ZXJvPW5vXSkKKy0KKy0gICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZmlsZV9fZGV2X3plcm8pCistZmkKKyAKKyAjIE5vdyB3ZSBkZXRlcm1pbmUgd2hpY2ggb25lIGlzIG91ciBhbm9ueW1vdXMgc2htZW0gcHJlZmVyZW5jZS4KKyBoYXZlc2htZ2V0YW5vbj0iMCIKK0BAIC0xNTE4LDEzICsxNDg1LDE0IEBAIGVsc2UKKyAgICAgYmlnZW5kaWFuPTAKKyBmaQorIAorLUFQUl9DSEVDS19TSVpFT0ZfRVhURU5ERUQoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3Vpby5oPl0sc3RydWN0IGlvdmVjLDApCistaWYgdGVzdCAiJGFjX2N2X3NpemVvZl9zdHJ1Y3RfaW92ZWMiID0gIjAiOyB0aGVuCistICAgIGhhdmVfaW92ZWM9MAorLWVsc2UKKy0gICAgaGF2ZV9pb3ZlYz0xCistZmkKKysjQVBSX0NIRUNLX1NJWkVPRl9FWFRFTkRFRChbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyMjaW5jbHVkZSA8c3lzL3Vpby5oPl0sc3RydWN0IGlvdmVjLDApCisrI2lmIHRlc3QgIiRhY19jdl9zaXplb2Zfc3RydWN0X2lvdmVjIiA9ICIwIjsgdGhlbgorKyMgICAgaGF2ZV9pb3ZlYz0wCisrI2Vsc2UKKysjICAgIGhhdmVfaW92ZWM9MQorKyNmaQorK2hhdmVfaW92ZWM9MQorIAorIEFDX1NVQlNUKHZvaWRwX3NpemUpCisgQUNfU1VCU1Qoc2hvcnRfdmFsdWUpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTlhMWQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3J1bi1wdGVzdApAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0CisuL3Rlc3RhbGwgfHNlZCBcCisgIC1lICdzfFwoLipcKTogIFNVQ0NFU1N8UEFTUzogXDF8JyBcCisgIC1lICdzfFwoLipcKTogIEZBSUxFRHxGQUlMOiBcMXwnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHIvdXBncmFkZS1hbmQtZml4LTEuNS4xLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Njk2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hcHIvYXByL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaApAQCAtMCwwICsxLDQ1IEBACitNYWtlZmlsZS5pbjogZml4IGNyb3NzIGNvbXBpbGluZyBmYWlsZWQKKworVGhlIHRvb2xzL2dlbl90ZXN0X2NoYXIgd2FzIGludm9rZWQgYXQgYnVpbGQgdGltZSwKK2FuZCBpdCBkaWRuJ3Qgd29yayBmb3IgdGhlIGNyb3NzIGNvbXBpbGluZywgc28gd2UKK2NvbXBpbGUgaXQgd2l0aCAkQlVJTERfQ0MuCisKK1JlbW92ZSB0aGUgJ3Rvb2xzJyBkaXIgY3JlYXRpb24sIGl0IGFsd2F5cyBleGlzdGVkLgorQW5kIGl0IGNhdXNlZCBnZW5fdGVzdF9jaGFyIHVuZXhwZWN0ZWQgcmVidWlsdCBhdAorZG9faW5zdGFsbCB0aW1lLgorCitVcHN0cmVhbS1TdGF0dXM6IGluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5pbiB8IDEwICsrLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggYTJhNTE5NC4uNWZlMDI4ZiAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTQ2LDcgKzQ2LDYgQEAgTFRfVkVSU0lPTiA9IEBMVF9WRVJTSU9OQAorIAorIENMRUFOX1RBUkdFVFMgPSBhcHItY29uZmlnLm91dCBhcHIuZXhwIGV4cG9ydHMuYyBleHBvcnRfdmFycy5jIC5tYWtlLmRpcnMgXAorIAlidWlsZC9hcHJfcnVsZXMub3V0IHRvb2xzL2dlbl90ZXN0X2NoYXJARVhFRVhUQCBcCistCXRvb2xzL2dlbl90ZXN0X2NoYXIubyB0b29scy9nZW5fdGVzdF9jaGFyLmxvIFwKKyAJaW5jbHVkZS9wcml2YXRlL2Fwcl9lc2NhcGVfdGVzdF9jaGFyLmgKKyBESVNUQ0xFQU5fVEFSR0VUUyA9IGNvbmZpZy5jYWNoZSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgXAorIAlpbmNsdWRlL2Fwci5oIGluY2x1ZGUvYXJjaC91bml4L2Fwcl9wcml2YXRlLmggXAorQEAgLTEyOSwxMyArMTI4LDggQEAgY2hlY2s6ICQoVEFSR0VUX0xJQikKKyBldGFnczoKKyAJZXRhZ3MgYGZpbmQgLiAtbmFtZSAnKi5bY2hdJ2AKKyAKKy1PQkpFQ1RTX2dlbl90ZXN0X2NoYXIgPSB0b29scy9nZW5fdGVzdF9jaGFyLmxvICQoTE9DQUxfTElCUykKKy10b29scy9nZW5fdGVzdF9jaGFyLmxvOiB0b29scy9nZW5fdGVzdF9jaGFyLmMKKy0JJChBUFJfTUtESVIpIHRvb2xzCistCSQoTFRfQ09NUElMRSkKKy0KKy10b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEA6ICQoT0JKRUNUU19nZW5fdGVzdF9jaGFyKQorLQkkKExJTktfUFJPRykgJChPQkpFQ1RTX2dlbl90ZXN0X2NoYXIpICQoQUxMX0xJQlMpCisrdG9vbHMvZ2VuX3Rlc3RfY2hhckBFWEVFWFRAOiB0b29scy9nZW5fdGVzdF9jaGFyLmMKKysJJChCVUlMRF9DQykgJChDRkxBR1NfRk9SX0JVSUxEKSAkPCAtbyAkQAorIAorIGluY2x1ZGUvcHJpdmF0ZS9hcHJfZXNjYXBlX3Rlc3RfY2hhci5oOiB0b29scy9nZW5fdGVzdF9jaGFyQEVYRUVYVEAKKyAJJChBUFJfTUtESVIpIGluY2x1ZGUvcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXByL2Fwcl8xLjUuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmN2YzOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Fwci9hcHJfMS41LjIuYmIKQEAgLTAsMCArMSw5NiBAQAorU1VNTUFSWSA9ICJBcGFjaGUgUG9ydGFibGUgUnVudGltZSAoQVBSKSBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL2Fwci5hcGFjaGUub3JnLyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAidXRpbC1saW51eCIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9NGRmZDRjZDIxNjgyOGM4Y2FlNWRlNWExMmYzODQ0YzggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9hcHJfbGliLmg7ZW5kbGluZT0xNzttZDU9ZWU0MmZhNzU3NWRjNDA1ODBhOWUwMWMxYjc1ZmFlOTYiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworU1JDX1VSSSA9ICIke0FQQUNIRV9NSVJST1J9L2Fwci8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmVfZml4ZXMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY2xlYW51cC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jb25maWdmaXgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3VwZ3JhZGUtYW5kLWZpeC0xLjUuMS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9GaXgtcGFja2V0LWRpc2NhcmRzLUhUVFAtcmVkaXJlY3QucGF0Y2ggXAorIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNGU5NzY5ZjMzNDlmZTExZmMwYTVlMWIyMjRjMjM2YWEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2QwM2VkMjljMjJhNzE1MmJlNDViOGU1MDQzMTA2MzczNmRmOWUxZGFhMWRkZjkzZjZhNTQ3YmE3YTI4ZjY3YSIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGxpYl9wYWNrYWdlIGJpbmNvbmZpZyBtdWx0aWxpYl9oZWFkZXIgcHRlc3QKKworT0VfQklOQ09ORklHX0VYVFJBX01BTkdMRSA9ICIgLWUgJ3M6bG9jYXRpb249c291cmNlOmxvY2F0aW9uPWluc3RhbGxlZDonIgorCisjIEFkZGVkIHRvIGZpeCBzb21lIGlzc3VlcyB3aXRoIGNtYWtlLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYm13Y2FyaXQvbWV0YS1yb3MvaXNzdWVzLzY4I2lzc3VlY29tbWVudC0xOTg5NjkyOAorQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFwcl9jdl9tdXRleF9yZWN1cnNpdmU9eWVzIgorCisjIEFsc28gc3VwcHJlc3MgdHJ5aW5nIHRvIHVzZSBzY3RwLgorIworQ0FDSEVEX0NPTkZJR1VSRVZBUlMgKz0gImFjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ubyBhY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwkjIEF2b2lkIGFic29sdXRlIHBhdGhzIGZvciBncmVwIHNpbmNlIGl0IGNhdXNlcyBmYWlsdXJlcworCSMgd2hlbiB1c2luZyBzc3RhdGUgYmV0d2VlbiBkaWZmZXJlbnQgaG9zdHMgd2l0aCBkaWZmZXJlbnQKKwkjIGluc3RhbGwgcGF0aHMgZm9yIGdyZXAuCisJZXhwb3J0IEdSRVA9ImdyZXAiCisKKwljZCAke1N9CisJLi9idWlsZGNvbmYKK30KKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vYXByLmV4cCAke2RhdGFkaXJ9L2J1aWxkLTEvKiIKK1JERVBFTkRTXyR7UE59LWRldiArPSAiYmFzaCIKKworI2ZvciBzb21lIHJlYXNvbiwgYnVpbGQvbGlidG9vbC5tNCBoYW5kbGVkIGJ5IGJ1aWxkY29uZiBzdGlsbCBiZSBvdmVyd3JpdHRlbgorI3doZW4gYXV0b2NvbmYsIHNvIGhhbmRsZSBpdCBhZ2Fpbi4KK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pIC1lICdzL0xJQlRPT0w9XCguKlwpdG9wX2J1aWxkL0xJQlRPT0w9XDFhcHJfYnVpbGQvJyAke1N9L2J1aWxkL2xpYnRvb2wubTQKKwlzZWQgLWkgLWUgJ3MvTElCVE9PTD1cKC4qXCl0b3BfYnVpbGQvTElCVE9PTD1cMWFwcl9idWlsZC8nICR7U30vYnVpbGQvYXByX3J1bGVzLm1rCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBhcHIuaAorCWluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vYXByCisJY3AgJHtTfS8ke0hPU1RfU1lTfS1saWJ0b29sICR7RH0ke2RhdGFkaXJ9L2J1aWxkLTEvbGlidG9vbAorfQorCitTU1RBVEVfU0NBTl9GSUxFUyArPSAiYXByX3J1bGVzLm1rIGxpYnRvb2wiCisKK1NZU1JPT1RfUFJFUFJPQ0VTU19GVU5DUyArPSAiYXByX3N5c3Jvb3RfcHJlcHJvY2VzcyIKKworYXByX3N5c3Jvb3RfcHJlcHJvY2VzcyAoKSB7CisJZD0ke1NZU1JPT1RfREVTVERJUn0ke2RhdGFkaXJ9L2FwcgorCWluc3RhbGwgLWQgJGQvCisJY3AgJHtTfS9idWlsZC9hcHJfcnVsZXMubWsgJGQvCisJc2VkIC1pIHMsYXByX2J1aWxkZGlyPS4qLGFwcl9idWlsZGRpcj0sZyAkZC9hcHJfcnVsZXMubWsKKwlzZWQgLWkgcyxhcHJfYnVpbGRlcnM9LiosYXByX2J1aWxkZXJzPSxnICRkL2Fwcl9ydWxlcy5taworCXNlZCAtaSBzLExJQlRPT0w9LiosTElCVE9PTD0ke0hPU1RfU1lTfS1saWJ0b29sLGcgJGQvYXByX3J1bGVzLm1rCisJc2VkIC1pIHMsXCRcKGFwcl9idWlsZGVyc1wpLCR7U1RBR0lOR19EQVRBRElSfS9hcHIvLGcgJGQvYXByX3J1bGVzLm1rCisJY3AgJHtTfS9idWlsZC9ta2Rpci5zaCAkZC8KKwljcCAke1N9L2J1aWxkL21ha2VfZXhwb3J0cy5hd2sgJGQvCisJY3AgJHtTfS9idWlsZC9tYWtlX3Zhcl9leHBvcnQuYXdrICRkLworfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworCWNkICR7U30vdGVzdAorCW9lX3J1bm1ha2UKK30KKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlta2RpciAtcCAkdC8ubGlicworCWNwIC1yICR7U30vdGVzdC9kYXRhICR0LworCWNwIC1yICR7U30vdGVzdC8ubGlicy8qLnNvICR0Ly5saWJzLworCWNwICR7U30vdGVzdC9wcm9jX2NoaWxkICR0LworCWNwICR7U30vdGVzdC9yZWFkY2hpbGQgJHQvCisJY3AgJHtTfS90ZXN0L3NvY2tjaGlsZCAkdC8KKwljcCAke1N9L3Rlc3Qvc29ja3BlcmYgJHQvCisJY3AgJHtTfS90ZXN0L3Rlc3RhbGwgJHQvCisJY3AgJHtTfS90ZXN0L3RyeXJlYWQgJHQvCit9CisKK2V4cG9ydCBDT05GSUdfU0hFTEw9Ii9iaW4vYmFzaCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2FzcGVsbC9hc3BlbGxfMC42MC42LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjE3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hc3BlbGwvYXNwZWxsXzAuNjAuNi4xLmJiCkBAIC0wLDAgKzEsMzAgQEAKK1NVTU1BUlkgPSAiR05VIEFzcGVsbCBzcGVsbC1jaGVja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL3V0aWxzIgorCitMSUNFTlNFID0gIkxHUEx2MiB8IExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9N2ZiYzMzODMwOWFjMzhmZWZjZDY0YjA0YmI5MDNlMzQiCisKK1BSID0gInIxIgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vYXNwZWxsL2FzcGVsbC0ke1BWfS50YXIuZ3oiCitTUkNfVVJJW21kNXN1bV0gPSAiZTY2YTljOWFmNmE2MGRjNDYxMzRmZGFjZjZjZTk3ZDciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZjUyNTgzYTgzYTYzNjMzNzAxYzVmNzFkYjNkYzQwYWFiODdiN2Y3NmIyOTcyM2FlYjI3OTQxZWZmNDJkZjZlMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbY3Vyc2VzXSA9ICItLWVuYWJsZS1jdXJzZXMsLS1kaXNhYmxlLWN1cnNlcyxuY3Vyc2VzIgorCitQQUNLQUdFUyArPSAibGliYXNwZWxsIGxpYnBzcGVsbCBhc3BlbGwtdXRpbHMiCisKK1JERVBFTkRTXyR7UE59LXV0aWxzICs9ICJwZXJsIgorCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9hc3BlbGwtMC42MC8uZGVidSoiCitGSUxFU19saWJhc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYmFzcGVsbC5zby4qICR7bGliZGlyfS9hc3BlbGwqIgorRklMRVNfYXNwZWxsLXV0aWxzID0gIiR7YmluZGlyfS93b3JkLWxpc3QtY29tcHJlc3MgJHtiaW5kaXJ9L2FzcGVsbC1pbXBvcnQgJHtiaW5kaXJ9L3J1bi13aXRoLWFzcGVsbCAke2JpbmRpcn0vcHJlKiIKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS9hc3BlbGwiCitGSUxFU19saWJwc3BlbGwgPSAiJHtsaWJkaXJ9L2xpYnBzcGVsbC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vcHNwZWxsLWNvbmZpZyIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCitpbmhlcml0IGF1dG90b29scy1icm9rZW5zZXAgZ2V0dGV4dCB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZAorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BzcGVsbC1jb25maWciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdGsvYXQtc3BpMi1hdGtfMi4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDk1ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItYXRrXzIuMTYuMC5iYgpAQCAtMCwwICsxLDIyIEBACitTVU1NQVJZID0gIkFULVNQSSAyIFRvb2xraXQgQnJpZGdlIgorTElDRU5TRSA9ICJMR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1lOWYyODhiYTk4MmQ2MDUxOGYzNzViNTg5ODI4Mzg4NiIKKworTUFKX1ZFUiA9ICIke0BvZS51dGlscy50cmltX3ZlcnNpb24oIiR7UFZ9IiwgMil9IgorCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS8ke0JQTn0vJHtNQUpfVkVSfS8ke0JQTn0tJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjg5MzY0ODhjOGNkY2UwZTE1OGY4MGIyZTI0NzUyN2Y5IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjc4ZWZjNDVlYzM2MzgzYmY3ODVmODYzNmU2NGE4ZDg2NmRlZmViMDIwZTAwYTA4ZjkyOTc4ZjFmYzM3NzJmZjkiCisKK0RFUEVORFMgPSAiZGJ1cyBnbGliLTIuMCBhdGsgYXQtc3BpMi1jb3JlIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisKKyMgVGhlIGF0LXNwaTItY29yZSByZXF1aXJlcyB4MTEgaW4gRElTVFJPX0ZFQVRVUkVTCitSRVFVSVJFRF9ESVNUUk9fRkVBVFVSRVMgPSAieDExIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tZ25vbWUgJHtQTn0tZ3RrMiIKKworRklMRVNfJHtQTn0tZ25vbWUgPSAiJHtsaWJkaXJ9L2dub21lLXNldHRpbmdzLWRhZW1vbi0zLjAvZ3RrLW1vZHVsZXMiCitGSUxFU18ke1BOfS1ndGsyID0gIiR7bGliZGlyfS9ndGstMi4wL21vZHVsZXMvbGliYXRrLWJyaWRnZS4qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vZ3RrLTIuMC9tb2R1bGVzLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmUvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE1MWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZS8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK0Zyb20gYzMyMDc5OWM5NDFkNDJhOWI3ZTM1MTgwNTM1OTY5NGVhM2IzNmQyZCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTdW4sIDUgQXByIDIwMTUgMDk6MDg6MzggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gbmxzLm00OiBUYWtlIGl0IGZyb20gZ2V0dGV4dC0wLjE1CisKK0l0IG90aGVyd2lzZSBleHBlY3RzIGdldHRleHQgdG8gcHJvdmlkZSBpdC4gTGV0cyBnbyBpbmRlcGVuZGVudAorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIG00L25scy5tNCB8IDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IG00L25scy5tNAorCitkaWZmIC0tZ2l0IGEvbTQvbmxzLm00IGIvbTQvbmxzLm00CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMmM4ZmU2OQorLS0tIC9kZXYvbnVsbAorKysrIGIvbTQvbmxzLm00CitAQCAtMCwwICsxLDMwIEBACisrZG5sIENvcHlyaWdodCAoQykgMTk5NS0yMDAzLCAyMDA1LTIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisrZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisrZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKytkbmwKKytkbmwgVGhpcyBmaWxlIGNhbiBjYW4gYmUgdXNlZCBpbiBwcm9qZWN0cyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB1bmRlcgorK2RubCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugb3IgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisrZG5sIExpY2Vuc2UgYnV0IHdoaWNoIHN0aWxsIHdhbnQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGUgR05VIGdldHRleHQKKytkbmwgZnVuY3Rpb25hbGl0eS4KKytkbmwgUGxlYXNlIG5vdGUgdGhhdCB0aGUgYWN0dWFsIGNvZGUgb2YgdGhlIEdOVSBnZXR0ZXh0IGxpYnJhcnkgaXMgY292ZXJlZAorK2RubCBieSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYW5kIHRoZSByZXN0IG9mIHRoZSBHTlUKKytkbmwgZ2V0dGV4dCBwYWNrYWdlIHBhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisrZG5sIFRoZXkgYXJlIG5vdCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKysKKytkbmwgQXV0aG9yczoKKytkbmwgVWxyaWNoIERyZXBwZXIgZHJlcHBlckBjeWdudXMuY29tLCAxOTk1LTIwMDAuCisrZG5sIEJydW5vIEhhaWJsZSBoYWlibGVAY2xpc3AuY29ucy5vcmcsIDIwMDAtMjAwMy4KKysKKytBQ19QUkVSRVEoMi41MCkKKysKKytBQ19ERUZVTihbQU1fTkxTXSwKKytbCisrQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIE5MUyBpcyByZXF1ZXN0ZWRdKQorK2RubCBEZWZhdWx0IGlzIGVuYWJsZWQgTkxTCisrQUNfQVJHX0VOQUJMRShubHMsCisrWyAtLWRpc2FibGUtbmxzIGRvIG5vdCB1c2UgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnRdLAorK1VTRV9OTFM9JGVuYWJsZXZhbCwgVVNFX05MUz15ZXMpCisrQUNfTVNHX1JFU1VMVCgkVVNFX05MUykKKytBQ19TVUJTVChVU0VfTkxTKQorK10pCistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0LXNwaTItY29yZV8yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzY2JlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdC1zcGkyLWNvcmVfMi4xNi4wLmJiCkBAIC0wLDAgKzEsMjMgQEAKK1NVTU1BUlkgPSAiQXNzaXN0aXZlIFRlY2hub2xvZ3kgU2VydmljZSBQcm92aWRlciBJbnRlcmZhY2UgKGRidXMgY29yZSkiCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWU5ZjI4OGJhOTgyZDYwNTE4ZjM3NWI1ODk4MjgzODg2IgorCitNQUpfVkVSID0gIiR7QG9lLnV0aWxzLnRyaW1fdmVyc2lvbigiJHtQVn0iLCAyKX0iCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke01BSl9WRVJ9LyR7QlBOfS0ke1BWfS50YXIueHogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYmU2ZWVlYTM3MGY5MTNiNzYzOWI2MDk5MTNiMmNmMDIiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWMwYjc3ZmI4Y2U4MWFiYmYxZDgwYzBhZmVlOTg1OGIzZjkyMjlmNjczYjc4ODE5OTVmZTBmYzE2YjFhNzRkMCIKKworREVQRU5EUyA9ICJkYnVzIGdsaWItMi4wIHZpcnR1YWwvbGlieDExIGxpYnhpIGxpYnh0c3QgaW50bHRvb2wtbmF0aXZlIgorCitpbmhlcml0IGF1dG90b29scyBndGstZG9jIHBrZ2NvbmZpZyBkaXN0cm9fZmVhdHVyZXNfY2hlY2sKKyMgZGVwZW5kcyBvbiB2aXJ0dWFsL2xpYngxMQorUkVRVUlSRURfRElTVFJPX0ZFQVRVUkVTID0gIngxMSIKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1pbnRyb3NwZWN0aW9uIC0tZGlzYWJsZS14ZXZpZSAtLXdpdGgtZGJ1cy1kYWVtb25kaXI9JHtiaW5kaXJ9IgorCitGSUxFU18ke1BOfSArPSAiJHtkYXRhZGlyfS9kYnVzLTEvc2VydmljZXMvKi5zZXJ2aWNlIFwKKyAgICAgICAgICAgICAgICAke2RhdGFkaXJ9L2RidXMtMS9hY2Nlc3NpYmlsaXR5LXNlcnZpY2VzLyouc2VydmljZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXRrL2F0a18yLjE2LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY4ZjliNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0ay9hdGtfMi4xNi4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiQWNjZXNzaWJpbGl0eSB0b29sa2l0IGZvciBHTk9NRSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saXZlLmdub21lLm9yZy9HQVAvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy8iCitTRUNUSU9OID0gIngxMS9saWJzIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9hdGsvYXRrdXRpbC5jO2VuZGxpbmU9MTg7bWQ1PTZmZDMxY2QyZmRjOWIzMGY2MTljYThkODE5YmMxMmQzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2F0ay9hdGsuaDtlbmRsaW5lPTE4O21kNT1mY2Q3NzEwMTg3ZTBlYWU0ODVlMzU2YzMwZDFiMGMzYiIKKworREVQRU5EUyA9ICJnbGliLTIuMCIKKworaW5oZXJpdCBnbm9tZWJhc2UgZ3RrLWRvYworCitTUkNfVVJJW2FyY2hpdmUubWQ1c3VtXSA9ICJjN2M1MDAyYmQ2ZTU4YjQ3MjNhMTY1ZjFiZjMxMjExNiIKK1NSQ19VUklbYXJjaGl2ZS5zaGEyNTZzdW1dID0gIjA5NWY5ODYwNjBhNmEwYjIyZWIxNWVlZjg0YWU5ZjE0YTFjZjgwODI0ODhmYWE2ODg2ZDk0YzM3NDM4YWU1NjIiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWdsaWJ0ZXN0IFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtaW50cm9zcGVjdGlvbiIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmJjOGJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5hZ2luZyBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zYXZhbm5haC5ub25nbnUub3JnL3Byb2plY3RzL2FjbC8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYiR7QlBOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2MvQ09QWUlORzttZDU9Yzc4MWQ3MGVkMmI0ZDQ4OTk1Yjc5MDQwMzIxN2EyNDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0NPUFlJTkcuTEdQTDttZDU9OWU5YTIwNjkxN2Y4YWYxMTJkYTYzNGNlM2FiNDE3NjQiCisKK0RFUEVORFMgPSAiYXR0ciIKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9hY2wvJHtCUH0uc3JjLnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vYWNsLWZpeC10aGUtb3JkZXItb2YtZXhwZWN0ZWQtb3V0cHV0LW9mLWdldGZhY2wucGF0Y2ggXAorIgorCityZXF1aXJlIGVhLWFjbC5pbmMKKworIyBhdm9pZCBSUEFUSCBoYXJkY29kZSB0byBzdGFnaW5nIGRpcgorZG9fY29uZmlndXJlX2FwcGVuZCgpIHsKKwlzZWQgLWkgJHtTfS9jb25maWcuc3RhdHVzIC1lIHMsXlxcXChoYXJkY29kZV9pbnRvX2xpYnM9XFxcKS4qJCxcXDFcJ25vXCcsCisJJHtTfS9jb25maWcuc3RhdHVzCit9CisKKyMgbGliZGlyIHNob3VsZCBwb2ludCB0byAubGEKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAke0R9JHtsaWJkaXJ9L2xpYmFjbC5sYSAtZSBcCisJICAgIHMsXmxpYmRpcj1cJyR7YmFzZV9saWJkaXJ9XCckLGxpYmRpcj1cJyR7bGliZGlyfVwnLAorfQorCitpbmhlcml0IHB0ZXN0CisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJdGFyIC1jZiAtIHRlc3QvIC0tZXhjbHVkZSBuZnMgfCAoIGNkICR7RH0ke1BURVNUX1BBVEh9ICYmIHRhciAteGYgLSApCisJbWtkaXIgJHtEfSR7UFRFU1RfUEFUSH0vaW5jbHVkZQorCWNwICR7U30vaW5jbHVkZS9idWlsZGRlZnMgJHtTfS9pbmNsdWRlL2J1aWxkbWFjcm9zICR7U30vaW5jbHVkZS9idWlsZHJ1bGVzICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUvCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ID0gImFjbCBiYXNoIGNvcmV1dGlscyBwZXJsIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgcGVybC1tb2R1bGUtZ2V0b3B0LXN0ZCBwZXJsLW1vZHVsZS1wb3NpeCBzaGFkb3ciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FjbC1maXgtdGhlLW9yZGVyLW9mLWV4cGVjdGVkLW91dHB1dC1vZi1nZXRmYWNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNzY1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2FjbC9hY2wtZml4LXRoZS1vcmRlci1vZi1leHBlY3RlZC1vdXRwdXQtb2YtZ2V0ZmFjbC5wYXRjaApAQCAtMCwwICsxLDE5OCBAQAorYWNsOiBmaXggdGhlIG9yZGVyIG9mIGV4cGVjdGVkIG91dHB1dCBvZiBnZXRmYWNsCisKK1RoZSByZXN1bHQgb2YgZ2V0ZmFjbCBpcyBzb3J0ZWQgYnkgdXNlciBpZC4KK0luIENlbnRvcyBvciBSSEVMLCBiaW4gdXNlciBpZCBpcyAxIGFuZCBkYWVtb24gdXNlciBpZCBpcyAyLgorQnV0IGluIG91ciBpbWFnZSwgYmluIHVzZXIgaWQgaXMgMiBhbmQgZGFlbW9uIHVzZXIgaWQgaXMgMS4KK1RoZSBwYXRjaCBmaXhlcyB0aGlzIGlzc3VlIHRvIG1ha2UgcHRlc3QgcGFzcy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtlbWJlZGRlZCBzcGVjaWZpY10KKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0L21pc2MudGVzdCB8ICAgMzggKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS90ZXN0L21pc2MudGVzdCBiL3Rlc3QvbWlzYy50ZXN0CitpbmRleCA2ZTk4MDUzLi41M2FlNWIwIDEwMDY0NAorLS0tIGEvdGVzdC9taXNjLnRlc3QKKysrKyBiL3Rlc3QvbWlzYy50ZXN0CitAQCAtNzksOCArNzksOCBAQCBNdWx0aXBsZSB1c2VycworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBmCisgCT4gdXNlcjo6cnctCistCT4gdXNlcjpiaW46cnctCisgCT4gdXNlcjpkYWVtb246ci0tCisrCT4gdXNlcjpiaW46cnctCisgCT4gZ3JvdXA6OnItLQorIAk+IG1hc2s6OnJ3LQorIAk+IG90aGVyOjpyLS0KK0BAIC05NCw4ICs5NCw4IEBAIE11bHRpcGxlIGdyb3VwcworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBmCisgCT4gdXNlcjo6cnctCistCT4gdXNlcjpiaW46cnctCisgCT4gdXNlcjpkYWVtb246ci0tCisrCT4gdXNlcjpiaW46cnctCisgCT4gZ3JvdXA6OnItLQorIAk+IGdyb3VwOmRhZW1vbjpyLS0KKyAJPiBncm91cDp1c2Vyczpydy0KK0BAIC0xMTEsOCArMTExLDggQEAgUmVtb3ZlIG9uZSBncm91cAorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBmCisgCT4gdXNlcjo6cnctCistCT4gdXNlcjpiaW46cnctCisgCT4gdXNlcjpkYWVtb246ci0tCisrCT4gdXNlcjpiaW46cnctCisgCT4gZ3JvdXA6OnItLQorIAk+IGdyb3VwOmRhZW1vbjpyLS0KKyAJPiBtYXNrOjpydy0KK0BAIC0xNDYsOCArMTQ2LDggQEAgRGVmYXVsdCBBQ0wKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnJ3eAorIAk+IHVzZXI6ZGFlbW9uOnJ3LQorKwk+IHVzZXI6YmluOnJ3eAorIAk+IGdyb3VwOjpyLXgKKyAJPiBtYXNrOjpyd3gKKyAJPiBvdGhlcjo6LS0tCitAQCAtMjM2LDE2ICsyMzYsMTYgQEAgQWRkIHNvbWUgdXNlcnMgYW5kIGdyb3VwcworIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkL2QKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyLXgKKysJPiB1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDo6ci14CisgCT4gZ3JvdXA6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGdyb3VwOnVzZXJzOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyLXgKKysJPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnIteAorIAk+IGRlZmF1bHQ6bWFzazo6ci14CisgCT4gZGVmYXVsdDpvdGhlcjo6LS0tCitAQCAtMjYyLDE2ICsyNjIsMTYgQEAgU3ltbGluayBpbiBkaXJlY3Rvcnkgd2l0aCBkZWZhdWx0IEFDTD8KKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9sCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46cnd4CSNlZmZlY3RpdmU6ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTI4NywxNiArMjg3LDE2IEBAIERvZXMgbWFzayBtYW5pcHVsYXRpb24gd29yaz8KKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnIteAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTMwOCwxNiArMzA4LDE2IEBAIERvZXMgbWFzayBtYW5pcHVsYXRpb24gd29yaz8KKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZC9kCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnIteAorIAk+IGdyb3VwOmRhZW1vbjpyLXgKKyAJPiBncm91cDp1c2VyczpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnJ3eAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246ci14CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyd3gKKyAJPiBkZWZhdWx0Omdyb3VwOjpyLXgKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6Oi0tLQorQEAgLTMzMyw4ICszMzMsOCBAQCBSZW1vdmUgdGhlIGRlZmF1bHQgQUNMCisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyd3gKKyAJPiB1c2VyOmRhZW1vbjpydy0KKysJPiB1c2VyOmJpbjpyd3gKKyAJPiBncm91cDo6ci14CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6Oi0tLQorQEAgLTM3MywxNCArMzczLDE0IEBAIE5vdywgY2htb2Qgc2hvdWxkIGNoYW5nZSB0aGUgZ3JvdXBfb2JqIGVudHJ5CisgCisgCSQgZ2V0ZmFjbCAtLW9taXQtaGVhZGVyIGQKKyAJPiB1c2VyOjpyd3gKKy0JPiB1c2VyOmJpbjpyLXgKKyAJPiB1c2VyOmRhZW1vbjpyd3gKKysJPiB1c2VyOmJpbjpyLXgKKyAJPiBncm91cDo6cnd4CisgCT4gbWFzazo6cnd4CisgCT4gb3RoZXI6OnIteAorIAk+IGRlZmF1bHQ6dXNlcjo6cnd4CistCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0OnVzZXI6ZGFlbW9uOnJ3eAorKwk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDpncm91cDo6cnd4CisgCT4gZGVmYXVsdDptYXNrOjpyd3gKKyAJPiBkZWZhdWx0Om90aGVyOjpyLXgKK0BAIC0zOTIsMTQgKzM5MiwxNCBAQCBOb3csIGNobW9kIHNob3VsZCBjaGFuZ2UgdGhlIGdyb3VwX29iaiBlbnRyeQorIAorIAkkIGdldGZhY2wgLS1vbWl0LWhlYWRlciBkCisgCT4gdXNlcjo6cnd4CistCT4gdXNlcjpiaW46ci14CisgCT4gdXNlcjpkYWVtb246cnd4CSNlZmZlY3RpdmU6ci14CisrCT4gdXNlcjpiaW46ci14CisgCT4gZ3JvdXA6OnJ3eAkjZWZmZWN0aXZlOnIteAorIAk+IG1hc2s6OnIteAorIAk+IG90aGVyOjotLS0KKyAJPiBkZWZhdWx0OnVzZXI6OnJ3eAorLQk+IGRlZmF1bHQ6dXNlcjpiaW46ci14CisgCT4gZGVmYXVsdDp1c2VyOmRhZW1vbjpyd3gKKysJPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6Z3JvdXA6OnJ3eAorIAk+IGRlZmF1bHQ6bWFzazo6cnd4CisgCT4gZGVmYXVsdDpvdGhlcjo6ci14CitAQCAtNDExLDE0ICs0MTEsMTQgQEAgTm93LCBjaG1vZCBzaG91bGQgY2hhbmdlIHRoZSBncm91cF9vYmogZW50cnkKKyAKKyAJJCBnZXRmYWNsIC0tb21pdC1oZWFkZXIgZAorIAk+IHVzZXI6OnJ3eAorLQk+IHVzZXI6YmluOnIteAorIAk+IHVzZXI6ZGFlbW9uOnJ3eAkjZWZmZWN0aXZlOnIteAorKwk+IHVzZXI6YmluOnIteAorIAk+IGdyb3VwOjpyd3gJI2VmZmVjdGl2ZTpyLXgKKyAJPiBtYXNrOjpyLXgKKyAJPiBvdGhlcjo6LS0tCisgCT4gZGVmYXVsdDp1c2VyOjpyd3gKKy0JPiBkZWZhdWx0OnVzZXI6YmluOnIteAorIAk+IGRlZmF1bHQ6dXNlcjpkYWVtb246cnd4CisrCT4gZGVmYXVsdDp1c2VyOmJpbjpyLXgKKyAJPiBkZWZhdWx0Omdyb3VwOjpyd3gKKyAJPiBkZWZhdWx0Om1hc2s6OnJ3eAorIAk+IGRlZmF1bHQ6b3RoZXI6OnIteAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL2FkZC1taXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjY5NzlmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvYWRkLW1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCkBAIC0wLDAgKzEsNTkgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQgW2NvbmZpZ3VyZS5hYyBpcyBtaXNzaW5nIGZyb20gdGFyYmFsbF0KKworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCitJbmRleDogYWNsLTIuMi41Mi9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBhY2wtMi4yLjUyL2NvbmZpZ3VyZS5hYworQEAgLTAsMCArMSw1MCBAQAorKworKyMgQ29weXJpZ2h0IChDKSAyMDA5ICBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKysjCisrIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKysjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisrIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrIworKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKysjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorKyMKKytBQ19JTklUKGluY2x1ZGUvYWNsLmgpCisrQUNfQ09ORklHX0FVWF9ESVIoWy5dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKytBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvY29uZmlnLmgpCisrQUNfUFJFRklYX0RFRkFVTFQoL3VzcikKKysKKytBQ19QUk9HX0xJQlRPT0wKKysKKytBQ19BUkdfRU5BQkxFKHNoYXJlZCwKKytbIC0tZW5hYmxlLXNoYXJlZD1beWVzL25vXSBFbmFibGUgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXV0sLAorKwllbmFibGVfc2hhcmVkPXllcykKKytBQ19TVUJTVChlbmFibGVfc2hhcmVkKQorKworK0FDX0FSR19FTkFCTEUoZ2V0dGV4dCwKKytbIC0tZW5hYmxlLWdldHRleHQ9W3llcy9ub10gRW5hYmxlIGFsdGVybmF0ZSBsYW5ndWFnZSBzdXBwb3J0IFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX2dldHRleHQ9eWVzKQorK0FDX1NVQlNUKGVuYWJsZV9nZXR0ZXh0KQorKworK0FDX0FSR19FTkFCTEUobGliNjQsCisrWyAtLWVuYWJsZS1saWI2ND1beWVzL25vXSBFbmFibGUgbGliNjQgc3VwcG9ydCBbZGVmYXVsdD1ub11dLCwKKysJZW5hYmxlX2xpYjY0PW5vKQorK0FDX1NVQlNUKGVuYWJsZV9saWI2NCkKKysKKytBQ19QQUNLQUdFX0dMT0JBTFMoYWNsKQorK0FDX1BBQ0tBR0VfVVRJTElUSUVTKGFjbCkKKytBQ19QQUNLQUdFX05FRURfQVRUUl9YQVRUUl9ICisrQUNfUEFDS0FHRV9ORUVEX0FUVFJfRVJST1JfSAorK0FDX01VTFRJTElCKCRlbmFibGVfbGliNjQpCisrQUNfUEFDS0FHRV9ORUVEX0dFVFhBVFRSX0xJQkFUVFIKKytBQ19NQU5VQUxfRk9STUFUCisrCisrQUNfRlVOQ19HQ0NfVklTSUJJTElUWQorKworK0FDX09VVFBVVChpbmNsdWRlL2J1aWxkZGVmcykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMxY2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2wvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNyBAQAorIyEvYmluL3NoCisKK2dwYXNzd2QgLWEgZGFlbW9uIGJpbgorbWFrZSAtQyB0ZXN0IC1rIHRlc3RzIHJvb3QtdGVzdHMgfHNlZCBcCisgLWUgJ3N8XlxbLipcXSBcKC4qXCkgLS0gb2skfFBBU1M6IFwxfCcgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIGZhaWxlZHxGQUlMOiBcMXwnCitncGFzc3dkIC1kIGRhZW1vbiBiaW4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYWNsXzIuMi41Mi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2RiZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9hY2xfMi4yLjUyLmJiCkBAIC0wLDAgKzEsOSBAQAorcmVxdWlyZSBhY2wuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9hZGQtbWlzc2luZy1jb25maWd1cmUuYWMucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhNjE0MTUzMTI0MjZlOWMyMjEyYmQ3ZGM3OTI5YWJkYSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNzkwNzRiYjA1ODBjMDZjNGI0MTM3YmU0YzVhOTJhNzAxNTgzMjc3OTY3YWNkYjU1NDYwNDNjNzg3NGUwZDIzIgorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0ci5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4Yzc1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHIuaW5jCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiVXRpbGl0aWVzIGZvciBtYW5pcHVsYXRpbmcgZmlsZXN5c3RlbSBleHRlbmRlZCBhdHRyaWJ1dGVzIgorSE9NRVBBR0UgPSAiaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvYXR0ci8iCitTRUNUSU9OID0gImxpYnMiCisKK0RFUEVORFMgPSAibmN1cnNlcyB2aXJ0dWFsL2xpYmludGwiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDRU5TRV8ke1BOfSA9ICJHUEx2MisiCitMSUNFTlNFX2xpYiR7QlBOfSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9kb2MvQ09QWUlORzttZDU9MmQwYWExNGIzZmNlNDY5NGU0ZjYxNWUzMDE4NjMzNWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vYXR0ci9hdHRyLmM7ZW5kbGluZT0xNzttZDU9YmUwNDAzMjYxZjA4NDdlNWY0M2VkNWIwOGQxOTU5M2MgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliYXR0ci9saWJhdHRyLmM7ZW5kbGluZT0xNzttZDU9Nzk3MGY3NzA0OWY4ZmExMTk5ZmZmNjJhN2FiNzI0ZmIiCisKK1NSQ19VUkkgPSAiJHtTQVZBTk5BSF9HTlVfTUlSUk9SfS9hdHRyLyR7QlB9LnNyYy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworcmVxdWlyZSBlYS1hY2wuaW5jCisKKyMgbGliZGlyIHNob3VsZCBwb2ludCB0byAubGEKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCXNlZCAtaSAke0R9JHtsaWJkaXJ9L2xpYmF0dHIubGEgLWUgXAorCSAgICBzLF5saWJkaXI9XCcke2Jhc2VfbGliZGlyfVwnJCxsaWJkaXI9XCcke2xpYmRpcn1cJywKK30KKworaW5oZXJpdCBwdGVzdAorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXRhciAtY2YgLSB0ZXN0LyAtLWV4Y2x1ZGUgZXh0IHwgKCBjZCAke0R9JHtQVEVTVF9QQVRIfSAmJiB0YXIgLXhmIC0gKQorCW1rZGlyICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUKKwlmb3IgaSBpbiBidWlsZGRlZnMgYnVpbGRtYWNyb3MgYnVpbGRydWxlczsgXAorCSAgZG8gY3AgJHtTfS9pbmNsdWRlLyRpICR7RH0ke1BURVNUX1BBVEh9L2luY2x1ZGUvOyBcCisJZG9uZQorCXNlZCAtZSAnc3w7IEBlY2hvfDsgZWNob3wnIC1pICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QvTWFrZWZpbGUKK30KKworUkRFUEVORFNfJHtQTn0tcHRlc3QgPSAiY29yZXV0aWxzIHBlcmwtbW9kdWxlLWZpbGVoYW5kbGUgcGVybC1tb2R1bGUtZ2V0b3B0LXN0ZCBwZXJsLW1vZHVsZS1wb3NpeCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvYXR0cl8yLjQuNDcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNDBjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2F0dHJfMi40LjQ3LmJiCkBAIC0wLDAgKzEsMTAgQEAKK3JlcXVpcmUgYXR0ci5pbmMKKworIyBjb25maWd1cmUuYWMgd2FzIG1pc3NpbmcgZnJvbSB0aGUgcmVsZWFzZSB0YXJiYWxsLiBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbgorIyBmdXR1cmUgcmVsZWFzZXMgb2YgYXR0ciwgcmVtb3ZlIHRoaXMgd2hlbiB1cGRhdGluZyB0aGUgcmVjaXBlLgorU1JDX1VSSV9hcHBlbmQgKz0gImZpbGU6Ly9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiODRmNThkZWMwMGI2MGYyZGM4ZmQxYzk3MDkyOTFjYzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMjU3NzJmNjUzYWM1YjJlM2NlZWI4OWRmNTBlNDY4ODg5MWUyMWY3MjNjNDYwNjM2NTQ4OTcxNjUyYWYwYTg1OSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9lYS1hY2wuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MGUxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2VhLWFjbC5pbmMKQEAgLTAsMCArMSw1MiBAQAorIyB0aGlzIGJ1aWxkIHN5c3RlbSBpcyBtb3N0bHkgc2hhcmVkIGJ5IGF0dHIgYW5kIGFjbAorCitTUkNfVVJJICs9ICJmaWxlOi8vcmVsYXRpdmUtbGliZGlyLnBhdGNoO3N0cmlwbGV2ZWw9MCBcCisgICAgICAgICAgICIKKworaW5oZXJpdCBhdXRvdG9vbHMtYnJva2Vuc2VwIGdldHRleHQKKworIyB0aGUgcGFja2FnZSBjb21lcyB3aXRoIGEgY3VzdG9tIGNvbmZpZy5oLmluLCBpdCBjYW5ub3QgYmUKKyMgb3ZlcndyaXR0ZW4gYnkgYXV0b2hlYWRlcgorRVhUUkFfQVVUT1JFQ09ORiArPSAiLS1leGNsdWRlPWF1dG9oZWFkZXIiCitFWFRSQV9PRUNPTkYgPSAiSU5TVEFMTF9VU0VSPXJvb3QgSU5TVEFMTF9HUk9VUD1yb290IgorRVhUUkFfT0VDT05GX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAiIC0tZW5hYmxlLWdldHRleHQ9bm8iCisKK0VYVFJBX09FTUFLRSA9ICJQS0dfTElCX0RJUj0ke2Jhc2VfbGliZGlyfSBQS0dfREVWTElCX0RJUj0ke2xpYmRpcn0iCisKK2RvX2luc3RhbGwgKCkgeworCW9lX3J1bm1ha2UgaW5zdGFsbCBpbnN0YWxsLWxpYiBpbnN0YWxsLWRldiBESVNUX1JPT1Q9IiR7RH0iCit9CisKK1BBQ0tBR0VTID0rICJsaWIke0JQTn0iCisKK0ZJTEVTX2xpYiR7QlBOfSA9ICIke2Jhc2VfbGliZGlyfS9saWIqJHtTT0xJQlN9IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKyMgT25seSBhcHBlbmQgbGRmbGFncyBmb3IgdGFyZ2V0IHJlY2lwZSBhbmQgaWYgVVNFX05MUyBpcyBlbmFibGVkCitMREZMQUdTX2FwcGVuZF9saWJjLXVjbGliY19jbGFzcy10YXJnZXQgPSAiJHtAWycnLCAnIC1saW50bCAnXVsoZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSA9PSAneWVzJyldfSIKK0VYVFJBX09FQ09ORl9hcHBlbmRfbGliYy11Y2xpYmNfY2xhc3MtdGFyZ2V0ID0gIiR7QFsnJywgJyAtLWRpc2FibGUtZ2V0dGV4dCAnXVsoZC5nZXRWYXIoJ1VTRV9OTFMnLCBUcnVlKSA9PSAnbm8nKV19IgorCitmaXhfc3ltbGluayAoKSB7CisJaWYgWyAiJHtCQl9DVVJSRU5UVEFTS30iICE9ICJwb3B1bGF0ZV9zeXNyb290IiAtYSAiJHtCQl9DVVJSRU5UVEFTS30iICE9ICJwb3B1bGF0ZV9zeXNyb290X3NldHNjZW5lIiBdCisJdGhlbgorCQlyZXR1cm4KKwlmaQorCisJaWYgdGVzdCAiJHtsaWJkaXJ9IiA9ICIke2Jhc2VfbGliZGlyfSIgOyB0aGVuCisJCXJldHVybgorCWZpCisJIyBSZW1vdmUgYmFkIHN5bWxpbmtzICYgY3JlYXRlIHRoZSBjb3JyZWN0IHN5bWxpbmtzCisJaWYgdGVzdCAtTCAke2xpYmRpcn0vbGliJHtCUE59LnNvIDsgdGhlbgorCQlybSAtcmYgJHtsaWJkaXJ9L2xpYiR7QlBOfS5zbworCQlsbiAtc2YgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LnNvICR7bGliZGlyfS9saWIke0JQTn0uc28KKwlmaQorCWlmIHRlc3QgLUwgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmEgOyB0aGVuCisJCXJtIC1yZiAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0uYQorCQlsbiAtc2YgJHtsaWJkaXJ9L2xpYiR7QlBOfS5hICR7YmFzZV9saWJkaXJ9L2xpYiR7QlBOfS5hCisJZmkKKwlpZiB0ZXN0IC1MICAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0ubGEgOyB0aGVuCisJCXJtIC1yZiAke2Jhc2VfbGliZGlyfS9saWIke0JQTn0ubGEKKwkJbG4gLXNmICR7bGliZGlyfS9saWIke0JQTn0ubGEgJHtiYXNlX2xpYmRpcn0vbGliJHtCUE59LmxhCisJZmkKK30KK1NTVEFURVBPU1RJTlNURlVOQ1NfY2xhc3MtbmF0aXZlICs9ICJmaXhfc3ltbGluayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvYXR0ci1NaXNzaW5nLWNvbmZpZ3VyZS5hYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGZjYzNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9hdHRyLU1pc3NpbmctY29uZmlndXJlLmFjLnBhdGNoCkBAIC0wLDAgKzEsNjMgQEAKK1N1YmplY3Q6IFtQQVRDSF0gYXR0cjogTWlzc2luZyBjb25maWd1cmUuYWMKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydCBbVXBzdHJlYW0gcmVsZWFzZWQgdGFyYmFsbCBtaXNzaW5nIHRoaXMgZmlsZV0KK1NpZ25lZC1vZmYtYnk6IE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+CistLS0KKyBjb25maWd1cmUuYWMgfCAgIDQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbmZpZ3VyZS5hYworCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjk2NmQwZQorLS0tIC9kZXYvbnVsbAorKysrIGIvY29uZmlndXJlLmFjCitAQCAtMCwwICsxLDQ4IEBACisrIyBDb3B5cmlnaHQgKEMpIDIwMDkgIEFuZHJlYXMgR3J1ZW5iYWNoZXIgPGFncnVlbkBzdXNlLmRlPgorKyMKKysjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKysjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrIworKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysjCisrIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisrIworK0FDX0lOSVQoaW5jbHVkZS9hdHRyaWJ1dGVzLmgpCisrQUNfQ09ORklHX0FVWF9ESVIoWy5dKQorK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKytBQ19DT05GSUdfSEVBREVSKGluY2x1ZGUvY29uZmlnLmgpCisrQUNfUFJFRklYX0RFRkFVTFQoL3VzcikKKysKKytBQ19QUk9HX0xJQlRPT0wKKysKKytBQ19BUkdfRU5BQkxFKHNoYXJlZCwKKytbIC0tZW5hYmxlLXNoYXJlZD1beWVzL25vXSBFbmFibGUgdXNlIG9mIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXV0sLAorKwllbmFibGVfc2hhcmVkPXllcykKKytBQ19TVUJTVChlbmFibGVfc2hhcmVkKQorKworK0FDX0FSR19FTkFCTEUoZ2V0dGV4dCwKKytbIC0tZW5hYmxlLWdldHRleHQ9W3llcy9ub10gRW5hYmxlIGFsdGVybmF0ZSBsYW5ndWFnZSBzdXBwb3J0IFtkZWZhdWx0PXllc11dLCwKKysJZW5hYmxlX2dldHRleHQ9eWVzKQorK0FDX1NVQlNUKGVuYWJsZV9nZXR0ZXh0KQorKworK0FDX0FSR19FTkFCTEUobGliNjQsCisrWyAtLWVuYWJsZS1saWI2ND1beWVzL25vXSBFbmFibGUgbGliNjQgc3VwcG9ydCBbZGVmYXVsdD1ub11dLCwKKysJZW5hYmxlX2xpYjY0PW5vKQorK0FDX1NVQlNUKGVuYWJsZV9saWI2NCkKKysKKytBQ19QQUNLQUdFX0dMT0JBTFMoYXR0cikKKytBQ19QQUNLQUdFX1VUSUxJVElFUyhhdHRyKQorK0FDX01BTlVBTF9GT1JNQVQKKytBQ19NVUxUSUxJQigkZW5hYmxlX2xpYjY0KQorKworK0FDX0NfQ09OU1QKKytBQ19UWVBFX01PREVfVAorK0FDX0ZVTkNfQUxMT0NBCisrCisrQUNfT1VUUFVUKGluY2x1ZGUvYnVpbGRkZWZzKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9hdHRyL2ZpbGVzL3JlbGF0aXZlLWxpYmRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJiZjE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9yZWxhdGl2ZS1saWJkaXIucGF0Y2gKQEAgLTAsMCArMSwyNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK3VzZSByZWxhdGl2ZSBwYXRoIGluIHN5bWJvbGljIGxpbmtzLCBvciBpdCBmYWlscyBpbiBzdGFnaW5nCitzZWQgZXhwcmVzc2lvbiBmcm9tIHVkZXYKKworNy8yOS8yMDEwIC0gY3JlYXRlZCBieSBRaW5nIEhlIDxxaW5nLmhlQGludGVsLmNvbT4KKworZGlmZiAtdSBpbmNsdWRlLm9yaWcvYnVpbGRtYWNyb3MgaW5jbHVkZS9idWlsZG1hY3JvcworLS0tIGluY2x1ZGUub3JpZy9idWlsZG1hY3JvcwkyMDEwLTA3LTI5IDE3OjM5OjQ4LjAwMDAwMDAwMCArMDgwMAorKysrIGluY2x1ZGUvYnVpbGRtYWNyb3MJMjAxMC0wNy0yOSAxODoyMDozNC4wMDAwMDAwMDAgKzA4MDAKK0BAIC04OCw5ICs4OCwxMSBAQAorIAkuLi8kKElOU1RBTEwpIC1tIDc1NSAtZCAkKFBLR19MSUJfRElSKTsgXAorIAkuLi8kKElOU1RBTEwpIC1UIHNvX2Jhc2UgJChMSUJOQU1FKS5sYWkgJChQS0dfTElCX0RJUik7IFwKKyAJaWYgdGVzdCAieCQoUEtHX0RFVkxJQl9ESVIpIiAhPSAieCQoUEtHX0xJQl9ESVIpIiA7IHRoZW4gXAorLQkuLi8kKElOU1RBTEwpIC1TICQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuYSAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLmE7IFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmxhICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkubGE7IFwKKy0JLi4vJChJTlNUQUxMKSAtUyAkKFBLR19MSUJfRElSKS8kKExJQk5BTUUpLnNvICQoUEtHX0RFVkxJQl9ESVIpLyQoTElCTkFNRSkuc287IFwKKysJcmVsX2xpYl9wcmVmaXg9JCQoZWNobyAkKFBLR19MSUJfRElSKSB8IHNlZCAncyxcKF4vXHxcKVteL11bXi9dKiwuLixnJyk7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9saWJfcHJlZml4JChQS0dfREVWTElCX0RJUikvJChMSUJOQU1FKS5hICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkuYTsgXAorKwkuLi8kKElOU1RBTEwpIC1TICQkcmVsX2xpYl9wcmVmaXgkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLmxhICQoUEtHX0xJQl9ESVIpLyQoTElCTkFNRSkubGE7IFwKKysJcmVsX2RldmxpYl9wcmVmaXg9JCQoZWNobyAkKFBLR19ERVZMSUJfRElSKSB8IHNlZCAncyxcKF4vXHxcKVteL11bXi9dKiwuLixnJyk7IFwKKysJLi4vJChJTlNUQUxMKSAtUyAkJHJlbF9kZXZsaWJfcHJlZml4JChQS0dfTElCX0RJUikvJChMSUJOQU1FKS5zbyAkKFBLR19ERVZMSUJfRElSKS8kKExJQk5BTUUpLnNvOyBcCisgCWZpCisgZWxzZQorIElOU1RBTExfTFRMSUJfREVWID0gJChJTlNUQUxMX0xUTElCX1NUQVRJQykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYXR0ci9maWxlcy9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZjNjg2NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2F0dHIvZmlsZXMvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCisKK21ha2UgLUMgdGVzdCAtayB0ZXN0cyByb290LXRlc3RzIHxzZWQgXAorIC1lICdzfF5cWy4qXF0gXCguKlwpIC0tIG9rJHxQQVNTOiBcMXwnIFwKKyAtZSAnc3xeXFsuKlxdIFwoLipcKSAtLSBmYWlsZWR8RkFJTDogXDF8JwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2MvMDAwMS1maXgtYnVpbGQtd2l0aC1tdXNsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOTA3ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZHdnYy9iZHdnYy8wMDAxLWZpeC1idWlsZC13aXRoLW11c2wucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSA4MjlhODllN2Y1Nzg1MjM5YTkzODRlM2FmZDQ2YzkwMGY5ZDc2YWRhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMzEgQXVnIDIwMTUgMTk6NTU6MzIgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gZml4IGJ1aWxkIHdpdGggbXVzbAorCitzaWduYWwuaCBhbHJlYWR5IGluY2x1ZGVzIGJpdHMvc2lnY29udGV4dC5oCitEb2N1bWVudGF0aW9uIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgaWYgeW91IG5lZWQgdGhlIGRlZmluaXRpb25zIGluCitzaWdjb250ZXh0LmgsIHlvdSBhcmUgc3VwcG9zZWQgdG8gaW5jbHVkZSBzaWduYWwuaCBhbmQgbm90IHNpZ2NvbnRleHQuaC4KKworYSBnb29kIGZpeCBzaG91bGQgYmUgdG8gcmVtb3ZlIGdsaWJjCitzcGVjaWZpYyB1bmRlcnN0YW5kaW5nLCBpbiB0aG9zZSBpZmRlZidzCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgb3NfZGVwLmMgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9vc19kZXAuYyBiL29zX2RlcC5jCitpbmRleCAwOGM1MDFkLi41Y2I3ODczIDEwMDY0NAorLS0tIGEvb3NfZGVwLmMKKysrKyBiL29zX2RlcC5jCitAQCAtNDEsNyArNDEsNyBAQAorICMgICBlbHNlIC8qIF9fR0xJQkNfXyA8IDIgKi8KKyAgICAgICAvKiBsaWJjNSBkb2Vzbid0IGhhdmUgPHNpZ2NvbnRleHQuaD46IGdvIGRpcmVjdGx5IHdpdGggdGhlIGtlcm5lbCAgICovCisgICAgICAgLyogb25lLiAgQ2hlY2sgTElOVVhfVkVSU0lPTl9DT0RFIHRvIHNlZSB3aGljaCB3ZSBzaG91bGQgcmVmZXJlbmNlLiAqLworLSMgICAgIGluY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisrIyAgICAgaW5jbHVkZSA8c2lnbmFsLmg+CisgIyAgIGVuZGlmIC8qIF9fR0xJQkNfXyA8IDIgKi8KKyAjIGVuZGlmCisgI2VuZGlmIC8qIExJTlVYICYmICFQT1dFUlBDICovCistLSAKKzIuNS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmR3Z2MvYmR3Z2NfNy40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlMzU4ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jkd2djL2Jkd2djXzcuNC4yLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQSBnYXJiYWdlIGNvbGxlY3RvciBmb3IgQyBhbmQgQysrIgorCitERVNDUklQVElPTiA9ICJUaGUgQm9laG0tRGVtZXJzLVdlaXNlciBjb25zZXJ2YXRpdmUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIGJlXAorIHVzZWQgYXMgYSBnYXJiYWdlIGNvbGxlY3RpbmcgcmVwbGFjZW1lbnQgZm9yIEMgbWFsbG9jIG9yIEMrKyBuZXcuIEl0IGFsbG93c1wKKyB5b3UgdG8gYWxsb2NhdGUgbWVtb3J5IGJhc2ljYWxseSBhcyB5b3Ugbm9ybWFsbHkgd291bGQsIHdpdGhvdXQgZXhwbGljaXRseVwKKyBkZWFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4gVGhlIGNvbGxlY3RvciBhdXRvbWF0aWNhbGx5XAorIHJlY3ljbGVzIG1lbW9yeSB3aGVuIGl0IGRldGVybWluZXMgdGhhdCBpdCBjYW4gbm8gbG9uZ2VyIGJlIG90aGVyd2lzZVwKKyBhY2Nlc3NlZC5cCisgIFRoZSBjb2xsZWN0b3IgaXMgYWxzbyB1c2VkIGJ5IGEgbnVtYmVyIG9mIHByb2dyYW1taW5nIGxhbmd1YWdlXAorIGltcGxlbWVudGF0aW9ucyB0aGF0IGVpdGhlciB1c2UgQyBhcyBpbnRlcm1lZGlhdGUgY29kZSwgd2FudCB0byBmYWNpbGl0YXRlXAorIGVhc2llciBpbnRlcm9wZXJhdGlvbiB3aXRoIEMgbGlicmFyaWVzLCBvciBqdXN0IHByZWZlciB0aGUgc2ltcGxlIGNvbGxlY3RvclwKKyBpbnRlcmZhY2UuXAorICBBbHRlcm5hdGl2ZWx5LCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgbWF5IGJlIHVzZWQgYXMgYSBsZWFrIGRldGVjdG9yIGZvciBDXAorIG9yIEMrKyBwcm9ncmFtcywgdGhvdWdoIHRoYXQgaXMgbm90IGl0cyBwcmltYXJ5IGdvYWwuXAorICBFbXBpcmljYWxseSwgdGhpcyBjb2xsZWN0b3Igd29ya3Mgd2l0aCBtb3N0IHVubW9kaWZpZWQgQyBwcm9ncmFtcywgc2ltcGx5XAorIGJ5IHJlcGxhY2luZyBtYWxsb2Mgd2l0aCBHQ19tYWxsb2MgY2FsbHMsIHJlcGxhY2luZyByZWFsbG9jIHdpdGggR0NfcmVhbGxvY1wKKyBjYWxscywgYW5kIHJlbW92aW5nIGZyZWUgY2FsbHMuIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lmhib2VobS5pbmZvL2djLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL1JFQURNRS5RVUlDSzttZDU9NTVmNTA4OGY5MGE5ODJmZWQ3YWY5YTQ4OTcwNDdlZjciCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5oYm9laG0uaW5mby9nYy9nY19zb3VyY2UvZ2MtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZml4LWJ1aWxkLXdpdGgtbXVzbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMTJjMDVmZDI4MTFkOTg5MzQxZDhjNmQ4MWY2NmFmODciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjMzMjBhZDdjNDU0NjBlNGE0MGUwM2Y1YWE0YzY4OTM3ODNmMjFhMTY0MTZjMzI4MmI5OTRmOTMzMzEyYWZhMiIKK0ZJTEVTXyR7UE59LWRvYyA9ICIvdXNyL3NoYXJlIgorCitSRUFMX1BWID0gIiR7QFtkLmdldFZhcignUFYnLDEpWzotMV0sIGQuZ2V0VmFyKCdQVicsMSldWyhkLmdldFZhcignUFYnLDEpWy0xXSkuaXNkaWdpdCgpXX0iCitTID0gIiR7V09SS0RJUn0vZ2MtJHtSRUFMX1BWfSIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCisjIGJ5IGRlZmF1bHQgdXNlIGV4dGVybmFsIGxpYmF0b21pYy1vcHMKK1BBQ0tBR0VDT05GSUcgPz89ICJsaWJhdG9taWMtb3BzIgorUEFDS0FHRUNPTkZJR1tsaWJhdG9taWMtb3BzXSA9ICItLXdpdGgtbGliYXRvbWljLW9wcz15ZXMsLS13aXRoLWxpYmF0b21pYy1vcHM9bm8sbGliYXRvbWljLW9wcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9hZGQtb3B0aW9uLWRldi1kc3AucGF0Y2gKQEAgLTAsMCArMSwzNCBAQAorQWRkIGNvbmZpZyBvcHRpb24gLS13aXRoLWRldi1kc3AuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBaaGFuZyBYaWFvIDx4aWFvLnpoYW5nQHdpbmRyaXZlci5jb20+CistLS0KKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTA2LDYgKzEwNiwxNiBAQCBBQ19BUkdfV0lUSChweXRob24sWyAgLS13aXRoLXB5dGhvbltbPUFSCisgICBmaQorICAgXSkKKyAKKytBQ19BUkdfV0lUSChkZXYtZHNwLFsgIC0td2l0aC1kZXYtZHNwICAgICAgICAgIGVuYWJsZXMgZGV2L2RzcCBmb3IgZW50cm9weSBwcm9kdWNpbmcuIGF1dG8gZm9yIGF1dG8tZGV0ZWN0aW5nIGRldi9kZXAgb24gaG9zdC4gW1tkZWZhdWx0PW5vXV1dLFsKKysgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorKyAgICBBQ19ERUZJTkUoW0hBVkVfREVWX0RTUF0sIDEpCisrICBlbHNlCisrICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IGF1dG87ICB0aGVuCisrICAgICAgYWNfZGV0ZWN0X2Rldl9kc3A9eWVzCisrICAgIGZpCisrICBmaQorKyAgXSxbYWNfZGV0ZWN0X2Rldl9kc3A9bm9dKQorKworICMgQ2hlY2sgZm9yIGV4cGVydCBtb2RlCisgaWYgdGVzdCAiJGFjX2VuYWJsZV9leHBlcnRfbW9kZSIgPSB5ZXM7IHRoZW4KKyAgIEJFRV9FWFBFUlRfTU9ERQorQEAgLTQ2NCw3ICs0NzQsNyBAQCBsaW51eCopCisgICAgICAgYWNfY3ZfaGF2ZV9kZXZfZHNwPW5vCisgICAgIGZpCisgICAgIF0pCistICBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZXZfZHNwIiA9IHllczsgdGhlbgorKyAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGV2X2RzcCIgPSB5ZXMgJiYgdGVzdCAiJGFjX2RldGVjdF9kZXZfZHNwIiA9IHllczsgdGhlbgorICAgICBBQ19ERUZJTkUoW0hBVkVfREVWX0RTUF0sIDEpCisgICBmaQorICAgOzsKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvYmVlY3J5cHQtZW5hYmxlLXB0ZXN0LXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U1NTEzZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2JlZWNyeXB0LWVuYWJsZS1wdGVzdC1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMzcgQEAKK2JlZWNyeXB0OiBlbmFibGUgcHRlc3Qgc3VwcG9ydAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2VtYmVkZGVkIHNwZWNpZmljXQorCitBZGQgaW5zdGFsbC1wdGVzdCBydWxlcy4KKworU2lnbmVkLW9mZi1ieTogQ2hvbmcgTHUgPENob25nLkx1QHdpbmRyaXZlci5jb20+CistLS0KKyBNYWtlZmlsZS5hbSAgICAgICB8IDMgKysrCisgdGVzdHMvTWFrZWZpbGUuYW0gfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCitpbmRleCBiN2U3ODY5Li41MDc2ZjU5IDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuYW0KKysrKyBiL01ha2VmaWxlLmFtCitAQCAtNzMsMyArNzMsNiBAQCBESVNUQ0xFQU5GSUxFUyA9IG1wb3B0LnMgYmxvd2Zpc2hvcHQucyBzaGExb3B0LnMKKyAKKyBiZW5jaDoKKyAJKGNkIHRlc3RzICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGJlbmNoKQorKworK2luc3RhbGwtcHRlc3Q6CisrCShjZCB0ZXN0cyAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVja19QUk9HUkFNUykKK2RpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxlLmFtCitpbmRleCAxNjA0ZTVlLi5kOGRiOGQ4IDEwMDY0NAorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0KKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCitAQCAtMTAxLDMgKzEwMSw2IEBAIGJlbmNoOiBiZW5jaG1lIGJlbmNocnNhIGJlbmNoaGYgYmVuY2hiYworIAkuL2JlbmNoYmMgQUVTIDEyOAorIAkuL2JlbmNoYmMgQmxvd2Zpc2ggMTI4CisgCS4vYmVuY2hiYyBCbG93ZmlzaCAxMjgKKysKKytjaGVja19QUk9HUkFNUzoKKysJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChjaGVja19QUk9HUkFNUykKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L2Rpc2FibGUtaWN1LWNoZWNrLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYjFmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9kaXNhYmxlLWljdS1jaGVjay5wYXRjaApAQCAtMCwwICsxLDQzIEBACitXZSBhcmUgdW5hYmxlIHRvIHJ1biBjb2RlIGF0IGNvbmZpZ3VyZSB0aW1lIGluIGEgY3Jvc3MgZW52aXJvbmVtbnQsIGJ1dCBhcyB3ZQorY29udHJvbCB0aGUgYnVpbGQgd2UgY2FuIGJlIGZhaXJseSBjZXJ0YWluIHRoaXMgZGVwZW5kZW5jeSBpcyBtZXQuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0pMIDA1LzA3LzEwCitJbmRleDogYmVlY3J5cHQtNC4yLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAxNzoxMjoyNS4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9jb25maWd1cmUuYWMJMjAxMC0xMS0yNiAxNzoxMjozMC4wMDAwMDAwMDAgKzA4MDAKK0BAIC0yOTIsMzIgKzI5Miw2IEBACisgIyBQcmVkZWZpbmVzIGFuZCBjaGVja3MgZm9yIEMrKyBBUEkgc3VwcG9ydAorIEFIX1RFTVBMQVRFKFtDUFBHTFVFXSxbRGVmaW5lIHRvIDEgaWYgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGUgQysrIGNvZGVdKQorIAorLWlmIHRlc3QgIiRhY193aXRoX2NwbHVzcGx1cyIgPSB5ZXM7IHRoZW4KKy0gIEFDX01TR19DSEVDS0lORyhbZm9yIElCTSdzIElDVSBsaWJyYXJ5IHZlcnNpb24gPj0gMi44XSkKKy0gIEFDX0xBTkdfUFVTSChDKQorLSAgQUNfUlVOX0lGRUxTRShbCistICAgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmljb2RlL3V2ZXJzaW9uLmg+XV0sW1sKKy0gICAgICAjaWYgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCAyCistICAgICAgZXhpdCgxKTsKKy0gICAgICAjZWxpZiBVX0lDVV9WRVJTSU9OX01BSk9SX05VTSA9PSAyCistICAgICAgIyBpZiBVX0lDVV9WRVJTSU9OX01JTk9SX05VTSA8IDgKKy0gICAgICBleGl0KDEpOworLSAgICAgICMgZWxzZQorLSAgICAgIGV4aXQoMCk7CistICAgICAgIyBlbmRpZgorLSAgICAgICNlbHNlCistICAgICAgZXhpdCgwKTsKKy0gICAgICAjZW5kaWYKKy0gICAgXV0pXSxbCistICAgIEFDX01TR19SRVNVTFQoW3llc10pCistICAgIF0sWworLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCistICAgIEFDX01TR19XQVJOKFtkaXNhYmxpbmcgY3BsdXNwbHVzXSkKKy0gICAgYWNfd2l0aF9jcGx1c3BsdXM9bm8KKy0gICAgXSkKKy0gIEFDX0xBTkdfUE9QKEMpCistZmkKKy0KKyBBTV9DT05ESVRJT05BTChbV0lUSF9DUExVU1BMVVNdLFt0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzXSkKKyAKKyBpZiB0ZXN0ICIkYWNfd2l0aF9jcGx1c3BsdXMiID0geWVzIDsgdGhlbgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LWZvci1nY2MtNC43LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDRlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtZm9yLWdjYy00LjcucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorCitnY2MtNC43IHNlZW1zIHRvIGJlIHN0cmljdGVyIGFib3V0IHNvbWUgdGhpbmdzLCBzbyBmb2xsb3cKK3RoZSBzdWdnZXN0aW9uIGZyb20gdGhlIGVycm9yL25vdGUgaW5mb3JtYXRpb24uCisKKyAgICAuLi8uLi94ODZfNjQtbGludXgtbGlidG9vbCAtLXRhZz1DWFggICAtLW1vZGU9Y29tcGlsZSBnKysgLURIQVZFX0NPTkZJR19IIC1JLiAtSS4uLy4uIAorICAgIHg4Nl82NC1saW51eC1saWJ0b29sOiBjb21waWxlOiAgZysrIC1ESEFWRV9DT05GSUdfSCAtSS4gLUkuLi8uLiAtSS4uLy4uL2luY2x1ZGUgLWlzeXN0CisgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvSGFzaHRhYmxlLmg6NDI6MCwKKyAgICAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9Qcm9wZXJ0aWVzLmg6MzYsCisgICAgICAgICAgICAgICAgICAgICBmcm9tIFByb3BlcnRpZXMuY3h4OjI1OgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDogSW4gaW5zdGFudGlhdGlvbiBvZiAnYm9vbCBiZWVjcnlwdDo6dXRpCisgICAgUHJvcGVydGllcy5jeHg6MjI4OjE6ICAgcmVxdWlyZWQgZnJvbSBoZXJlCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBlcnJvcjogJ2NvbnRhaW5zQWxsJyB3YXMgbm90IGRlY2wKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IG5vdGU6IGRlY2xhcmF0aW9ucyBpbiBkZXBlbmRlbnQgYgorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogdXNlICd0aGlzLT5jb250YWluc0FsbCcgaW5zCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOiBJbiBpbnN0YW50aWF0aW9uIG9mICdib29sIGJlZWNyeXB0Ojp1dGkKKyAgICBQcm9wZXJ0aWVzLmN4eDoyMjg6MTogICByZXF1aXJlZCBmcm9tIGhlcmUKKyAgICAuLi8uLi9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0Lmg6NTk6Mjc6IGVycm9yOiAnY29udGFpbnNBbGwnIHdhcyBub3QgZGVjbAorICAgIC4uLy4uL2luY2x1ZGUvYmVlY3J5cHQvYysrL3V0aWwvQWJzdHJhY3RTZXQuaDo1OToyNzogbm90ZTogZGVjbGFyYXRpb25zIGluIGRlcGVuZGVudCBiCisgICAgLi4vLi4vaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oOjU5OjI3OiBub3RlOiB1c2UgJ3RoaXMtPmNvbnRhaW5zQWxsJyBpbnMKKyAgICAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworCitJbmRleDogYmVlY3J5cHQtNC4yLjEvaW5jbHVkZS9iZWVjcnlwdC9jKysvdXRpbC9BYnN0cmFjdFNldC5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYmVlY3J5cHQtNC4yLjEub3JpZy9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0LmgKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy91dGlsL0Fic3RyYWN0U2V0LmgKK0BAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBiZWVjcnlwdCB7CisgCQkJCQlpZiAoYy0+c2l6ZSgpICE9IHNpemUoKSkKKyAJCQkJCQlyZXR1cm4gZmFsc2U7CisgCistCQkJCQlyZXR1cm4gY29udGFpbnNBbGwoKmMpOworKwkJCQkJcmV0dXJuIHRoaXMtPmNvbnRhaW5zQWxsKCpjKTsKKyAJCQkJfQorIAkJCQlyZXR1cm4gZmFsc2U7CisgCQkJfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHQvZml4LXNlY3VyaXR5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjBjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9maXgtc2VjdXJpdHkucGF0Y2gKQEAgLTAsMCArMSw0NyBAQAorRml4IHZpc2liaWxpdHkgb2YgdmFyaW91cyBDKysgZnVuY3Rpb25zLCBpbnNwaXJlZCBieSBhIHNpbWlsYXIgcGF0Y2ggaW4gdGhlIEZpbmsKK3Byb2plY3Q6IAoraHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL2ZpbmstY29tbWl0c0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQvbXNnNzU3NDIuaHRtbAorCitKTCAwNS8wNy8xMCAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9iZWV5b25kL0JlZUNlcnRpZmljYXRlLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiZWVjcnlwdC00LjIuMS5vcmlnL2luY2x1ZGUvYmVlY3J5cHQvYysrL2JlZXlvbmQvQmVlQ2VydGlmaWNhdGUuaAkyMDEwLTExLTI2IDE3OjIyOjU3LjAwMDAwMDAwMCArMDgwMAorKysrIGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL2JlZXlvbmQvQmVlQ2VydGlmaWNhdGUuaAkyMDEwLTExLTI2IDE3OjIzOjAxLjAwMDAwMDAwMCArMDgwMAorQEAgLTE0NywxMyArMTQ3LDEzIEBACisgCQkJbXV0YWJsZSBieXRlYXJyYXkqIGVuYzsKKyAKKyAJCQlCZWVDZXJ0aWZpY2F0ZSgpOworLQkJCUJlZUNlcnRpZmljYXRlKElucHV0U3RyZWFtJiBpbikgdGhyb3cgKElPRXhjZXB0aW9uKTsKKyAKKyAJCQl2b2lkIGVuY29kZVRCUyhEYXRhT3V0cHV0U3RyZWFtJiBvdXQpIGNvbnN0IHRocm93IChJT0V4Y2VwdGlvbik7CisgCisgCQkJYnl0ZWFycmF5KiBlbmNvZGVUQlMoKSBjb25zdCB0aHJvdyAoQ2VydGlmaWNhdGVFbmNvZGluZ0V4Y2VwdGlvbik7CisgCisgCQlwdWJsaWM6CisrCQkJQmVlQ2VydGlmaWNhdGUoSW5wdXRTdHJlYW0mIGluKSB0aHJvdyAoSU9FeGNlcHRpb24pOworIAkJCUJlZUNlcnRpZmljYXRlKGNvbnN0IEJlZUNlcnRpZmljYXRlJikgdGhyb3cgKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uKTsKKyAJCQl2aXJ0dWFsIH5CZWVDZXJ0aWZpY2F0ZSgpOworIAorSW5kZXg6IGJlZWNyeXB0LTQuMi4xL2luY2x1ZGUvYmVlY3J5cHQvYysrL3NlY3VyaXR5L1NlY3VyaXR5LmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBiZWVjcnlwdC00LjIuMS5vcmlnL2luY2x1ZGUvYmVlY3J5cHQvYysrL3NlY3VyaXR5L1NlY3VyaXR5LmgJMjAxMC0xMS0yNiAxNzoyMDo1NS4wMDAwMDAwMDAgKzA4MDAKKysrKyBiZWVjcnlwdC00LjIuMS9pbmNsdWRlL2JlZWNyeXB0L2MrKy9zZWN1cml0eS9TZWN1cml0eS5oCTIwMTAtMTEtMjYgMTc6MjE6MzYuMDAwMDAwMDAwICswODAwCitAQCAtNjEsNyArNjEsNiBAQAorIAkJCWZyaWVuZCBjbGFzcyBTZWN1cmVSYW5kb207CisgCQkJZnJpZW5kIGNsYXNzIFNpZ25hdHVyZTsKKyAKKy0JCXByaXZhdGU6CisgCQkJc3RydWN0IHNwaQorIAkJCXsKKyAJCQkJT2JqZWN0KiBjc3BpOworQEAgLTc2LDYgKzc1LDcgQEAKKyAJCQlzdGF0aWMgc3BpKiBnZXRTcGkoY29uc3QgU3RyaW5nJiBhbGdvLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFByb3ZpZGVyJikgdGhyb3cgKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbik7CisgCQkJc3RhdGljIHNwaSogZ2V0Rmlyc3RTcGkoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAKKysJCXByaXZhdGU6CisgCQkJc3RhdGljIGNvbnN0IFN0cmluZyYgZ2V0S2V5U3RvcmVEZWZhdWx0KCk7CisgCisgCQkJc3RhdGljIGJvb2wgX2luaXQ7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdC9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlMjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2JlZWNyeXB0L2JlZWNyeXB0L3J1bi1wdGVzdApAQCAtMCwwICsxLDUgQEAKKyMhL2Jpbi9zaAorCitjZCB0ZXN0cworZm9yIGkgaW4gYGxzYDsgZG8gLi8kaTsgaWYgWyAkPyAtZXEgMCBdOyB0aGVuIGVjaG8gIlBBU1M6ICRpIjsgXAorICAgIGVsc2UgZWNobyAiRkFJTDogJGkiOyBmaTsgZG9uZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9iZWVjcnlwdC9iZWVjcnlwdF80LjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTYyNmYxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYmVlY3J5cHQvYmVlY3J5cHRfNC4yLjEuYmIKQEAgLTAsMCArMSw0OCBAQAorIyBCZWVjcnlwdCBPRSBidWlsZCBmaWxlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkCisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIHBhY2thZ2VzL0NPUFlJTkcpCisKK1NVTU1BUlkgPSAiQSBnZW5lcmFsLXB1cnBvc2UgY3J5cHRvZ3JhcGh5IGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2JlZWNyeXB0IgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9iZWVjcnlwdC9iZWVjcnlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vZGlzYWJsZS1pY3UtY2hlY2sucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXNlY3VyaXR5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1mb3ItZ2NjLTQuNy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9ydW4tcHRlc3QgXAorICAgICAgICAgICBmaWxlOi8vYmVlY3J5cHQtZW5hYmxlLXB0ZXN0LXN1cHBvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLW9wdGlvbi1kZXYtZHNwLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI4NDQxYzAxNDE3MDgyM2YyZGZmOTdlMzNkZjU1YWYxZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIyODZmMWY1NjA4MGQxYTZiMWQwMjQwMDNhNWZhMjE1OGY0ZmY4MmNhZTBjNjgyOWQzYzQ3NmE0YjU4OThjNTVkIgorCitMSUNFTlNFID0gIkdQTHYyICYgTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT05ODk0MzcwYWZkNWRmZTdkMDJiOGQxNDMxOWU3MjlhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZGNmM2M4MjU2NTllODI1Mzk2NDVkYTQxYTc5MDg1ODkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vaW5jbHVkZS9iZWVjcnlwdC9iZWVjcnlwdC5oO2VuZGxpbmU9MjA7bWQ1PTQ3YTkzZWVmNTM5YWFjMjM3ZWVmODYyOTdhNGQ3MWMxIgorCitQUiA9ICJyMyIKKworaW5oZXJpdCBhdXRvdG9vbHMgbXVsdGlsaWJfaGVhZGVyIHB0ZXN0CithY3BhdGhzPSIiCisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW9lX211bHRpbGliX2hlYWRlciBiZWVjcnlwdC9nbnUuaAorfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXB5dGhvbiAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIC0tZGlzYWJsZS1vcGVubXAgLS13aXRoLWphdmE9bm8iCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2NwbHVzcGx1c10gPSAiLS13aXRoLWNwbHVzcGx1cywtLXdpdGhvdXQtY3BsdXNwbHVzLGljdSIKKworRklMRVNfJHtQTn0gPSAiJHtzeXNjb25mZGlyfSAke2xpYmRpcn0vKi5zby4qICR7bGliZGlyfS8ke0JQTn0vKi5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59Lyouc28gJHtsaWJkaXJ9LyR7QlBOfS8qLmxhIgorRklMRVNfJHtQTn0tc3RhdGljZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59LyouYSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitkb19pbnN0YWxsX3B0ZXN0ICgpIHsKKwlta2RpciAke0R9JHtQVEVTVF9QQVRIfS90ZXN0cworCWNwIC1yICR7Qn0vdGVzdHMvLmxpYnMvdGVzdCogJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHMKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2JqYW0tbmF0aXZlXzEuNTguMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjY0NmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYmphbS1uYXRpdmVfMS41OC4wLmJiCkBAIC0wLDAgKzEsMTggQEAKK2luY2x1ZGUgYm9vc3QtJHtQVn0uaW5jCisKK1NVTU1BUlkgPSAiUG9ydGFibGUgQm9vc3QuSmFtIGJ1aWxkIHRvb2wgZm9yIGJvb3N0IgorU0VDVElPTiA9ICJkZXZlbCIKKworaW5oZXJpdCBuYXRpdmUKKworU1JDX1VSSSArPSAiZmlsZTovL2JqYW0tbmF0aXZlLWJ1aWxkLWJqYW0uZGVidWcucGF0Y2giCisKK2RvX2NvbXBpbGUoKSB7CisgICAgLi9ib290c3RyYXAuc2ggLS13aXRoLXRvb2xzZXQ9Z2NjCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgaW5zdGFsbCAtZCAke0R9JHtiaW5kaXJ9LworICAgICMgaW5zdGFsbCB1bnN0cmlwcGVkIHZlcnNpb24gZm9yIGJqYW0KKyAgICBpbnN0YWxsIC1jIC1tIDc1NSBiamFtLmRlYnVnICR7RH0ke2JpbmRpcn0vYmphbQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QtMS41OC4wLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3ZDA5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0LTEuNTguMC5pbmMKQEAgLTAsMCArMSwyMiBAQAorIyBUaGUgQm9vc3Qgd2ViIHNpdGUgcHJvdmlkZXMgZnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlCisjIEMrKyBzb3VyY2UgbGlicmFyaWVzLiBUaGUgZW1waGFzaXMgaXMgb24gbGlicmFyaWVzIHdoaWNoCisjIHdvcmsgd2VsbCB3aXRoIHRoZSBDKysgU3RhbmRhcmQgTGlicmFyeS4gVGhlIGxpYnJhcmllcyBhcmUKKyMgaW50ZW5kZWQgdG8gYmUgd2lkZWx5IHVzZWZ1bCwgYW5kIGFyZSBpbiByZWd1bGFyIHVzZSBieQorIyB0aG91c2FuZHMgb2YgcHJvZ3JhbW1lcnMgYWNyb3NzIGEgYnJvYWQgc3BlY3RydW0gb2YgYXBwbGljYXRpb25zLgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5ib29zdC5vcmcvIgorTElDRU5TRSA9ICJCU0wtMS4wICYgTUlUICYgUHl0aG9uLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0VfMV8wLnR4dDttZDU9ZTQyMjRjY2FlY2IxNGQ5NDJjNzFkMzFiZWYyMGQ3OGMiCisKK0JPT1NUX1ZFUiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLDEpLnNwbGl0KCIuIikpfSIKK0JPT1NUX01BSiA9ICIke0AiXyIuam9pbihkLmdldFZhcigiUFYiLDEpLnNwbGl0KCIuIilbMDoyXSl9IgorQk9PU1RfUCA9ICJib29zdF8ke0JPT1NUX1ZFUn0iCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2Jvb3N0LyR7Qk9PU1RfUH0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImI4ODM5NjUwZTYxZTljMWMwYTg5ZjM3MWRkNDc1NTQ2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkZmMyMDRmYzMzZWM3OWM5OWI5YTc0OTQ0YzNlNTRiZDc4YmU0ZjdmMTVlMjYwYzBlMjcwMGEzNmRjN2QzZTUiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JPT1NUX1B9IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyODhlODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdC5pbmMKQEAgLTAsMCArMSwxOTIgQEAKK1NVTU1BUlkgPSAiRnJlZSBwZWVyLXJldmlld2VkIHBvcnRhYmxlIEMrKyBzb3VyY2UgbGlicmFyaWVzIgorU0VDVElPTiA9ICJsaWJzIgorREVQRU5EUyA9ICJiamFtLW5hdGl2ZSB6bGliIGJ6aXAyIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQk9PU1RfTElCUyA9ICJcCisJYXRvbWljIFwKKwljaHJvbm8gXAorCWRhdGVfdGltZSBcCisJZmlsZXN5c3RlbSBcCisJZ3JhcGggXAorCWlvc3RyZWFtcyBcCisJbG9nIFwKKwlwcm9ncmFtX29wdGlvbnMgXAorCXJhbmRvbSBcCisJcmVnZXggXAorCXNlcmlhbGl6YXRpb24gXAorCXNpZ25hbHMgXAorCXN5c3RlbSBcCisJdGVzdCBcCisJdGhyZWFkIFwKKwkiCisKKyMgb3B0aW9uYWwgYm9vc3QtcHl0aG9uIGxpYnJhcnkKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW3B5dGhvbl0gPSAiLCxweXRob24gcHl0aG9uMyIKK0JPT1NUX0xJQlMgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdQQUNLQUdFQ09ORklHJywgJ3B5dGhvbicsICdweXRob24gcHl0aG9uMycsICcnLCBkKX0iCitpbmhlcml0IHB5dGhvbi1kaXIKK1BZVEhPTl9ST09UID0gIiR7U1RBR0lOR19ESVJfSE9TVH0vJHtwcmVmaXh9IgorCisjIE1ha2UgYSBwYWNrYWdlIGZvciBlYWNoIGxpYnJhcnksIHBsdXMgLWRldgorUEFDS0FHRVMgPSAiJHtQTn0tZGJnICR7Qk9PU1RfUEFDS0FHRVN9IgorcHl0aG9uIF9fYW5vbnltb3VzICgpIHsKKyAgICBwYWNrYWdlcyA9IFtdCisgICAgZXh0cmFzID0gW10KKyAgICBmb3IgbGliIGluIGQuZ2V0VmFyKCdCT09TVF9MSUJTJywgVHJ1ZSkuc3BsaXQoICk6CisgICAgICAgICMgQkpBTSBkb2VzIG5vdCBrbm93ICctLXdpdGgtcHl0aG9uMycgKG9ubHkgLS13aXRoLXB5dGhvbikKKyAgICAgICAgaWYgbGliICE9ICJweXRob24zIjoKKyAgICAgICAgICAgIGV4dHJhcy5hcHBlbmQoIi0td2l0aC0lcyIgJSBsaWIpCisgICAgICAgIHBrZyA9ICJib29zdC0lcyIgJSBsaWIucmVwbGFjZSgiXyIsICItIikKKyAgICAgICAgcGFja2FnZXMuYXBwZW5kKHBrZykKKyAgICAgICAgaWYgbGliID09ICJweXRob24iOgorICAgICAgICAgICAgIyBzcGVjaWFsOiBweXRob24qLnNvIG1hdGNoZXMgcHl0aG9uMy5zbyAhIQorICAgICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJGSUxFU18lcyIgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYmJvb3N0XyVzLnNvLioiICUgbGliKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGQuZ2V0VmFyKCJGSUxFU18lcyIgJSBwa2csIFRydWUpOgorICAgICAgICAgICAgICAgICAgICBkLnNldFZhcigiRklMRVNfJXMiICUgcGtnLCAiJHtsaWJkaXJ9L2xpYmJvb3N0XyVzKi5zby4qIiAlIGxpYikKKyAgICBkLnNldFZhcigiQk9PU1RfUEFDS0FHRVMiLCAiICIuam9pbihwYWNrYWdlcykpCisgICAgZC5zZXRWYXIoIkJKQU1fRVhUUkEiLCAiICIuam9pbihleHRyYXMpKQorfQorCisjIE92ZXJyaWRlIHRoZSBjb250ZW50cyBvZiBzcGVjaWZpYyBwYWNrYWdlcworRklMRVNfYm9vc3Qtc2VyaWFsaXphdGlvbiA9ICIke2xpYmRpcn0vbGliYm9vc3Rfc2VyaWFsaXphdGlvbiouc28uKiBcCisJJHtsaWJkaXJ9L2xpYmJvb3N0X3dzZXJpYWxpemF0aW9uKi5zby4qIgorRklMRVNfYm9vc3QtdGVzdCA9ICIke2xpYmRpcn0vbGliYm9vc3RfcHJnX2V4ZWNfbW9uaXRvciouc28uKiBcCisJJHtsaWJkaXJ9L2xpYmJvb3N0X3VuaXRfdGVzdF9mcmFtZXdvcmsqLnNvLioiCisKKyMgLWRldiBsYXN0IHRvIHBpY2sgdXAgdGhlIHJlbWFpbmluZyBzdHVmZgorUEFDS0FHRVMgKz0gIiR7UE59LWRldiAke1BOfS1zdGF0aWNkZXYiCitGSUxFU18ke1BOfS1kZXYgPSAiJHtpbmNsdWRlZGlyfSAke2xpYmRpcn0vbGliYm9vc3RfKi5zbyIKK0ZJTEVTXyR7UE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliYm9vc3RfKi5hIgorCisjICJib29zdCIgaXMgYSBtZXRhcGFja2FnZSB3aGljaCBwdWxscyBpbiBhbGwgYm9vc3QgbGlicmFicmllcworUEFDS0FHRVMgKz0gIiR7UE59IgorUlJFQ09NTUVORFNfJHtQTn0gKz0gIiR7Qk9PU1RfUEFDS0FHRVN9IgorUlJFQ09NTUVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCisKKyMgdG8gYXZvaWQgR05VX0hBU0ggUUEgZXJyb3JzIGFkZGVkIExERkxBR1MgdG8gQVJDSDsgYSBsaXR0bGUgYml0IGRpcnR5IGJ1dCBhdCBsZWFzdCBpdCB3b3JrcworVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKKyMgT2ggeWlwcGVlLCBhIG5ldyBidWlsZCBzeXN0ZW0sIGl0J3Mgc29vbyBjb29vb2wgSSBjb3VsZCBlYXQgbXkgb3duCisjIGZvb3QuICBpbmxpbmluZz1vbiBsZXRzIHRoZSBjb21waWxlciBjaG9vc2UsIEkgdGhpbmsuICBBdCBsZWFzdCB0aGlzCisjIHN0dWZmIGlzIGRvY3VtZW50ZWQuLi4KKyMgTk9URTogaWYgeW91IGxlYXZlIDxkZWJ1Zy1zeW1ib2xzPm9uIHRoZW4gaW4gYSBkZWJ1ZyBidWlsZCB0aGUgYnVpbGQgc3lzCisjIG9iamNvcHkgd2lsbCBiZSBpbnZva2VkLCBhbmQgdGhhdCB3b24ndCB3b3JrLiAgQnVpbGRpbmcgZGVidWcgYXBwYXJlbnRseQorIyByZXF1aXJlcyBoYWNraW5nIGdjYy10b29scy5qYW0KKyMKKyMgU29tZXRpbWVzIEkgd2FrZSB1cCBzY3JlYW1pbmcuICBGYW1vdXMgZmlndXJlcyBhcmUgZ2F0aGVyZWQgaW4gdGhlIG5pZ2h0bWFyZSwKKyMgU3RldmUgQm91cm5lLCBMYXJyeSBXYWxsLCB0aGUgd2hvbGUgb2YgdGhlIEFOU0kgQyBjb21taXR0ZWUuICBUaGV5J3JlIGp1c3QKKyMgc3RhbmRpbmcgdGhlcmUsIHdhaXRpbmcsIGJ1dCB0aGUgdHJ1ZWx5IHRlcnJpZnlpbmcgdGhpbmcgaXMgd2hhdCB0aGV5IGNhcnJ5CisjIGluIHRoZWlyIGhhbmRzLiAgQXQgZmlyc3Qgc2lnaHQgZWFjaCBzZWVtcyB0byBiZWFyIHRoZSBzYW1lIHRoaW5nLCBidXQgaXQgaXMKKyMgbm90IHNvIGZvciB0aGUgZm9ybXMgaW4gdGhlaXIgZ3Jhc3AgYXJlIGV2ZXIgc28gc2xpZ2h0bHkgZGlmZmVyZW50IG9uZSBmcm9tCisjIHRoZSBvdGhlci4gIEVhY2ggaXMgdHdpc3RlZCBpbiBzb21lIGdyb3Rlc3F1ZSB3YXkgZnJvbSB0aGUgb3RoZXIgdG8gbWFrZSBlYWNoCisjIGFuIHVuc3BlYWthYmxlIHBlcnZlcnNpb24gaW1wb3NzaWJsZSB0byBwZXJjZWl2ZSB3aXRob3V0IHRoZSBvbnNldCBvZiBtYWRuZXNzLgorIyBUcnVlIGluc2FuaXR5IGF3YWl0cyBhbnlvbmUgd2hvIHBlcmNlaXZlcyBhbGwgb2YgdGhlc2UgaG9ycm9ycyB0b2dldGhlci4KKyMKKyMgUXVvdGF0aW9uIG1hcmtzLCB0aGVyZSBtaWdodCBiZSBhbiBlYXNpZXIgd2F5IHRvIGRvIHRoaXMsIGJ1dCBJIGNhbid0IGZpbmQKKyMgaXQuICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSB1c2VyLmhwcCBjb25maWd1cmF0aW9uIGZpbGUgbXVzdCByZWNlaXZlIGEKKyMgcHJlLXByb2Nlc3NvciBtYWNybyBkZWZpbmVkIGFzIHRoZSBhcHByb3ByaWF0ZSBzdHJpbmcgLSBjb21wbGV0ZSB3aXRoICIncworIyBhcm91bmQgaXQuICAoPD4gaXMgYSBwb3NzaWJpbGl0eSBoZXJlIGJ1dCB0aGUgZGFuZ2VyIHRvIHRoYXQgaXMgdGhhdCB0aGUKKyMgZmFpbHVyZSBjYXNlIGludGVycHJldHMgdGhlIDwgYW5kID4gYXMgc2hlbGwgcmVkaXJlY3Rpb25zLCBjcmVhdGluZworIyByYW5kb20gZmlsZXMgaW4gdGhlIHNvdXJjZSB0cmVlLikKKyMKKyNiamFtOiAnLURCT09TVF9QTEFURk9STV9DT05GSUc9XCJjb25maWdcIicKKyNkb19jb21waWxlOiAnLXNHQ0M9Li4uICciJy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPVwiY29uZmlnXCInIgorU1FEID0gJyInCitFUUQgPSAnXCInCisjYm9vc3QuYmI6ICAgIi4uLiAgJy1zR0NDPS4uLiAnJHtTUUR9Jy1EQk9PU1RfUExBVEZPUk1fQ09ORklHPSR7RVFEfWNvbmZpZyR7RVFEfScke1NRRH0gLi4uIgorQkpBTV9DT05GID0gIiR7U1FEfSctREJPT1NUX1BMQVRGT1JNX0NPTkZJRz0ke0VRRH1ib29zdC9jb25maWcvcGxhdGZvcm0vJHtUQVJHRVRfT1N9LmhwcCR7RVFEfScke1NRRH0iCisKK0JKQU1fVE9PTFMgICA9ICItLWlnbm9yZS1zaXRlLWNvbmZpZyBcCisJCSctc1RPT0xTPWdjYycgXAorCQknLXNHQ0M9JHtDQ30gJyR7QkpBTV9DT05GfSBcCisJCSctc0dYWD0ke0NYWH0gJyR7QkpBTV9DT05GfSBcCisJCSctc0dDQ19JTkNMVURFX0RJUkVDVE9SWT0ke1NUQUdJTkdfSU5DRElSfScgXAorCQknLXNHQ0NfU1RETElCX0RJUkVDVE9SWT0ke1NUQUdJTkdfTElCRElSfScgXAorCQknLXNCVUlMRD1yZWxlYXNlIDxvcHRpbWl6YXRpb24+c3BhY2UgPHRocmVhZGluZz5tdWx0aSA8aW5saW5pbmc+b24gPGRlYnVnLXN5bWJvbHM+b2ZmJyBcCisJCSctc1BZVEhPTl9ST09UPSR7UFlUSE9OX1JPT1R9JyBcCisJCSctLWxheW91dD1zeXN0ZW0nIFwKKwkJIgorCisjIHVzZSBQQVJBTExFTF9NQUtFIHRvIHNwZWVkIHVwIHRoZSBidWlsZCwgYnV0IGxpbWl0IGl0IGJ5IC1qIDY0LCBncmVhdGVyIHBhcmFsZWxpc20gY2F1c2VzIGJqYW0gdG8gc2VnZmF1bHQgb3IgdG8gaWdub3JlIC1qCisjIGh0dHBzOi8vc3ZuLmJvb3N0Lm9yZy90cmFjL2Jvb3N0L3RpY2tldC83NjM0CitkZWYgZ2V0X2Jvb3N0X3BhcmFsbGVsX21ha2UoYmIsIGQpOgorICAgIHBtID0gZC5nZXRWYXIoJ1BBUkFMTEVMX01BS0UnLCBUcnVlKQorICAgIGlmIHBtOgorICAgICAgICAjIGxvb2sgZm9yICctaicgYW5kIHRocm93IG90aGVyIG9wdGlvbnMgKGUuZy4gJy1sJykgYXdheQorICAgICAgICAjIGJlY2F1c2UgdGhleSBtaWdodCBoYXZlIGRpZmZlcmVudCBtZWFuaW5nIGluIGJqYW0KKyAgICAgICAgcG0gPSBwbS5zcGxpdCgpCisgICAgICAgIHdoaWxlIHBtOgorICAgICAgICAgICAgdiA9IE5vbmUKKyAgICAgICAgICAgIG9wdCA9IHBtLnBvcCgwKQorICAgICAgICAgICAgaWYgb3B0ID09ICctaic6CisgICAgICAgICAgICAgICAgdiA9IHBtLnBvcCgwKQorICAgICAgICAgICAgZWxpZiBvcHQuc3RhcnRzd2l0aCgnLWonKToKKyAgICAgICAgICAgICAgICB2ID0gb3B0WzI6XS5zdHJpcCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHYgPSBOb25lCisKKyAgICAgICAgICAgIGlmIHY6CisgICAgICAgICAgICAgICAgdiA9IG1pbig2NCwgaW50KHYpKQorICAgICAgICAgICAgICAgIHJldHVybiAnLWonICsgc3RyKHYpCisKKyAgICByZXR1cm4gIiIKKworQk9PU1RfUEFSQUxMRUxfTUFLRSA9ICIke0BnZXRfYm9vc3RfcGFyYWxsZWxfbWFrZShiYiwgZCl9IgorQkpBTV9PUFRTICAgID0gJyR7Qk9PU1RfUEFSQUxMRUxfTUFLRX0gXAorCQkke0JKQU1fVE9PTFN9IFwKKwkJLXNCT09TVF9CVUlMRF9VU0VSX0NPTkZJRz0ke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtIFwKKwkJLS1idWlsZGRpcj0ke1N9LyR7VEFSR0VUX1NZU30gXAorCQktLWRpc2FibGUtaWN1IFwKKwkJJHtCSkFNX0VYVFJBfScKKworIyBOYXRpdmUgY29tcGlsYXRpb24gb2YgYnppcDIgaXNuJ3Qgd29ya2luZworQkpBTV9PUFRTX2FwcGVuZF9jbGFzcy1uYXRpdmUgPSAnIC1zTk9fQlpJUDI9MScKKworZG9fYm9vc3Rjb25maWcoKSB7CisJY3AgLWYgYm9vc3QvY29uZmlnL3BsYXRmb3JtL2xpbnV4LmhwcCBib29zdC9jb25maWcvcGxhdGZvcm0vbGludXgtZ251ZWFiaS5ocHAKKworCSMgRDIxOTQ6Rml4aW5nIHRoZSBmYWlsdXJlIG9mICJlcnJvcjogZHVwbGljYXRlIGluaXRpYWxpemF0aW9uIG9mIGdjYyB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyIgZHVyaW5nIGNvbXBpbGF0aW9uLgorCXNlZCAtaSAiL151c2luZyBnY2MgOiA0LjMuMS9kIiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJc2VkIC1pICIvXnVzaW5nIHB5dGhvbiA6ICR7UFlUSE9OX0JBU0VWRVJTSU9OfSIvZCAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAndXNpbmcgZ2NjIDogNC4zLjEgOiAke0NYWH0gOiA8Y2ZsYWdzPiIke0NGTEFHU30iIDxjeHhmbGFncz4iJHtDWFhGTEFHU30iIDxsaW5rZmxhZ3M+IiR7TERGTEFHU30iIDsnID4+ICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKwllY2hvICJ1c2luZyBweXRob24gOiAke1BZVEhPTl9CQVNFVkVSU0lPTn0gOiA6ICR7U1RBR0lOR19JTkNESVJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfSA7IiA+PiAke1N9L3Rvb2xzL2J1aWxkL2V4YW1wbGUvdXNlci1jb25maWcuamFtCisJZWNobyAidXNpbmcgcHl0aG9uIDogMy40IDogOiAke1NUQUdJTkdfSU5DRElSfS9weXRob24zLjRtIDsiID4+ICR7U30vdG9vbHMvYnVpbGQvZXhhbXBsZS91c2VyLWNvbmZpZy5qYW0KKworCUNDPSIke0JVSUxEX0NDfSIgQ0ZMQUdTPSIke0JVSUxEX0NGTEFHU30iIC4vYm9vdHN0cmFwLnNoIC0td2l0aC1iamFtPWJqYW0gLS13aXRoLXRvb2xzZXQ9Z2NjIC0td2l0aC1weXRob24tcm9vdD0ke1BZVEhPTl9ST09UfQorCXNlZCAtaSAnL151c2luZyBweXRob24vZCcgcHJvamVjdC1jb25maWcuamFtCit9CisKK2RvX2Jvb3N0Y29uZmlnW2RpcnNdID0gIiR7U30iCithZGR0YXNrIGRvX2Jvb3N0Y29uZmlnIGFmdGVyIGRvX3BhdGNoIGJlZm9yZSBkb19jb25maWd1cmUKKworZG9fY29tcGlsZSgpIHsKKwlzZXQgLWV4CisJYmphbSAke0JKQU1fT1BUU30gLS1wcmVmaXg9JHtwcmVmaXh9IFwKKwkJLS1leGVjLXByZWZpeD0ke2V4ZWNfcHJlZml4fSBcCisJCS0tbGliZGlyPSR7bGliZGlyfSBcCisJCS0taW5jbHVkZWRpcj0ke2luY2x1ZGVkaXJ9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJc2V0IC1leAorCWJqYW0gJHtCSkFNX09QVFN9IFwKKwkJLS1saWJkaXI9JHtEfSR7bGliZGlyfSBcCisJCS0taW5jbHVkZWRpcj0ke0R9JHtpbmNsdWRlZGlyfSBcCisJCWluc3RhbGwKKwlmb3IgbGliIGluICR7Qk9PU1RfTElCU307IGRvCisJCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0uYSBdOyB0aGVuCisJCQlsbiAtcyBsaWJib29zdF8ke2xpYn0uYSAke0R9JHtsaWJkaXJ9L2xpYmJvb3N0XyR7bGlifS1tdC5hCisJCWZpCisJCWlmIFsgLWUgJHtEfSR7bGliZGlyfS9saWJib29zdF8ke2xpYn0uc28gXTsgdGhlbgorCQkJbG4gLXMgbGliYm9vc3RfJHtsaWJ9LnNvICR7RH0ke2xpYmRpcn0vbGliYm9vc3RfJHtsaWJ9LW10LnNvCisJCWZpCisJZG9uZQorCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3QvYXJtLWludHJpbnNpY3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4NWM2OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2Jvb3N0L2FybS1pbnRyaW5zaWNzLnBhdGNoCkBAIC0wLDAgKzEsNTUgQEAKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworOC8xNy8yMDEwIC0gcmViYXNlZCB0byAxLjQ0IGJ5IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorCitkaWZmIC0tZ2l0IGEvYm9vc3Qvc21hcnRfcHRyL2RldGFpbC9hdG9taWNfY291bnRfc3luYy5ocHAgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAoraW5kZXggYjYzNTliNS4uNzhiMWNjMiAxMDA2NDQKKy0tLSBhL2Jvb3N0L3NtYXJ0X3B0ci9kZXRhaWwvYXRvbWljX2NvdW50X3N5bmMuaHBwCisrKysgYi9ib29zdC9zbWFydF9wdHIvZGV0YWlsL2F0b21pY19jb3VudF9zeW5jLmhwcAorQEAgLTMzLDE3ICszMyw0NiBAQCBwdWJsaWM6CisgCisgICAgIGxvbmcgb3BlcmF0b3IrKygpCisgICAgIHsKKysjaWZkZWYgX19BUk1fQVJDSF83QV9fCisrICAgICAgIGludCB2MSwgdG1wOworKyAgICAgICBhc20gdm9sYXRpbGUgKCIxOiAgICAgICAgICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAibGRyZXggICAlMCwgJTEgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImFkZCAgICAgJTAgLCUwLCAjMSBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJzdHJleCAgICUyLCAlMCwgJTEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAiY21wICAgICAlMiwgIzAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImJuZSAgICAgMWIgICAgICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgIDogIj0mciIgKHYxKSwgIitRIih2YWx1ZV8pLCAiPSZyIih0bXApCisrICAgICAgICAgICAgICAgICAgICApOworKyNlbHNlCisgICAgICAgICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2goICZ2YWx1ZV8sIDEgKTsKKysjZW5kaWYKKyAgICAgfQorIAorICAgICBsb25nIG9wZXJhdG9yLS0oKQorICAgICB7CisrI2lmZGVmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICBpbnQgdjEsIHRtcDsKKysgICAgICAgYXNtIHZvbGF0aWxlICgiMTogICAgICAgICAgICAgICAgIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImxkcmV4ICAgJTAsICUxICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJzdWIgICAgICUwICwlMCwgIzEgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICAic3RyZXggICAlMiwgJTAsICUxIFxuXHQiCisrICAgICAgICAgICAgICAgICAgICAgImNtcCAgICAgJTIsICMwICAgICBcblx0IgorKyAgICAgICAgICAgICAgICAgICAgICJibmUgICAgIDFiICAgICAgICAgXG5cdCIKKysgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiICh2MSksICIrUSIodmFsdWVfKSwgIj0mciIodG1wKQorKyAgICAgICAgICAgICAgICAgICAgKTsKKysgICAgICAgcmV0dXJuIHZhbHVlXzsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoKCAmdmFsdWVfLCAtMSApOworKyNlbmRpZgorICAgICB9CisgCisgICAgIG9wZXJhdG9yIGxvbmcoKSBjb25zdAorICAgICB7CisrI2lmIF9fQVJNX0FSQ0hfN0FfXworKyAgICAgICAgcmV0dXJuIHZhbHVlXzsKKysjZWxzZQorICAgICAgICAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYWRkKCAmdmFsdWVfLCAwICk7CisrI2VuZGlmCisgICAgIH0KKyAKKyBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvYm9vc3RfMS41OC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwOWQ1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9ib29zdF8xLjU4LjAuYmIKQEAgLTAsMCArMSw2IEBACitpbmNsdWRlIGJvb3N0LSR7UFZ9LmluYworaW5jbHVkZSBib29zdC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9hcm0taW50cmluc2ljcy5wYXRjaCBcCisiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAxLW1pcHMxLWZpeC1hZGRlZC1nY2MuamFtLXdhcy1wYXNzaW5nLXRoZS1vcHRpb25zLW0zMi0ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YjRjMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2Jvb3N0L2ZpbGVzLzAwMDEtbWlwczEtZml4LWFkZGVkLWdjYy5qYW0td2FzLXBhc3NpbmctdGhlLW9wdGlvbnMtbTMyLS5wYXRjaApAQCAtMCwwICsxLDMzIEBACitGcm9tIDgxN2FlZDBkNzU1YmY4YzBiYTRlZjZhNzdkNDE1MzhlNTBiNTcxZmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBjbGF5bW9yZSA8Y2FybG9zbWYucHRAZ21haWwuY29tPgorRGF0ZTogRnJpLCAyNCBBcHIgMjAxNSAwMjoyODo0NyArMDEwMAorU3ViamVjdDogW1BBVENIIDEvMl0gbWlwczEgZml4IGFkZGVkIGdjYy5qYW0gd2FzIHBhc3NpbmcgdGhlIG9wdGlvbnMgLW0zMiBhbmQKKyAtbTY0IHRvIG1pcHMgY3Jvc3MtY29tcGlsZXJzLCB3aGVuIHRob3NlIGRvIG5vdCB1c2UKKyBzdWNoIG9wdGlvbnMgVGhpcyBtb2RpZmljYXRpb24gc29sdmVzIGl0IGJ5IGFkZGluZyBtaXBzCisgYXMgYW4gZXhjZXB0aW9uCisKK1NpZ25lZC1vZmYtYnk6IENhcmxvcyBNLiBGZXJyZWlyYSBjYXJsb3NtZi5wdEBnbWFpbC5jb20KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CisKKy0tLQorIHRvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0gYi90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQoraW5kZXggZGIwNDUzNC4uZWZmOTVhZSAxMDA2NDQKKy0tLSBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtCisrKysgYi90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorQEAgLTQ1MSw3ICs0NTEsNyBAQCBydWxlIHNldHVwLWFkZHJlc3MtbW9kZWwgKCB0YXJnZXRzICogOiBzb3VyY2VzICogOiBwcm9wZXJ0aWVzICogKQorICAgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICAgIGxvY2FsIGFyY2ggPSBbIGZlYXR1cmUuZ2V0LXZhbHVlcyBhcmNoaXRlY3R1cmUgOiAkKHByb3BlcnRpZXMpIF0gOworLSAgICAgICAgICAgIGlmICQoYXJjaCkgIT0gYXJtCisrICAgICAgICAgICAgaWYgJChhcmNoKSAhPSBhcm0gJiYgJChhcmNoKSAhPSBtaXBzMQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgaWYgJChtb2RlbCkgPSAzMgorICAgICAgICAgICAgICAgICB7CistLSAKKzEuNy45LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvMDAwMi1Eb24tdC1wYXNzLW0zMi1tNjQtd2hlcmUtaXQtcy1ub3Qtc3VwcG9ydGVkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy8wMDAyLURvbi10LXBhc3MtbTMyLW02NC13aGVyZS1pdC1zLW5vdC1zdXBwb3J0ZWQucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSBmODI1NjM0YTU2YjExOWRmYTlkNzEyMTE5YTY2Mjc5Y2M3NjM1OTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0o9QzM9QjZyZz0yMEtyYXVzZT89IDxqb2VyZy5rcmF1c2VAZW1iZWRkZWQucm9ja3M+CitEYXRlOiBTYXQsIDIgTWF5IDIwMTUgMTQ6MjQ6MDIgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIERvbid0IHBhc3MgLW0zMi8tbTY0IHdoZXJlIGl0J3Mgbm90IHN1cHBvcnRlZC4KKworT25seSBQb3dlclBDLCBTUEFSQywgYW5kIHg4NiBkbyBzdXBwb3J0IHRoZSAtbTMyIGFuZCAtbTY0IGNvbXBpbGVyIG9wdGlvbnMgWzFdLgorCitSYXRoZXIgdGhlbiBleGNsdWRpbmcgYWxsIGFyY2hpdGVjdHVyZXMgbm90IHN1cHBvcnRpbmcgdGhlc2Ugb3B0aW9ucyBhcyBpdCBpcworZG9uZSBpbiBjb21taXQgYzA2MzQzNDFkOWVlMmMwMmQzYTU1YzkxZGFmYjk4OGFmYzA2NmM0OSBbMl0sIGluY2x1ZGUgYWxsCithcmNoaXRlY3R1cmVzIHRoYXQgZG8gc3VwcG9ydCB0aGVtLgorCitUaGlzIHdpbGwgZml4IGJ1aWxkaW5nIEJvb3N0IGZvciB0aGUgU3VwZXJIIGFyY2hpdGVjdHVyZSB3aXRoIEJ1aWxkcm9vdCBbM10uCisKK1sxXSBodHRwczovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09wdGlvbi1TdW1tYXJ5Lmh0bWwKK1syXSBodHRwczovL2dpdGh1Yi5jb20vYm9vc3RvcmcvYnVpbGQvY29tbWl0L2MwNjM0MzQxZDllZTJjMDJkM2E1NWM5MWRhZmI5ODhhZmMwNjZjNDkKK1szXSBodHRwOi8vYXV0b2J1aWxkLmJ1aWxkcm9vdC5uZXQvcmVzdWx0cy9jY2QvY2NkNWM4Mzk2MzAzMmJhNDliMTYyN2IxZGZmMzllMzRhOTQ4Njk0My9idWlsZC1lbmQubG9nCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKK1NpZ25lZC1vZmYtYnk6IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorCistLS0KKyB0b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbSB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkL3NyYy90b29scy9nY2MuamFtIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK2luZGV4IGVmZjk1YWUuLjJmNmFmOTMgMTAwNjQ0CistLS0gYS90b29scy9idWlsZC9zcmMvdG9vbHMvZ2NjLmphbQorKysrIGIvdG9vbHMvYnVpbGQvc3JjL3Rvb2xzL2djYy5qYW0KK0BAIC00NTEsNyArNDUxLDcgQEAgcnVsZSBzZXR1cC1hZGRyZXNzLW1vZGVsICggdGFyZ2V0cyAqIDogc291cmNlcyAqIDogcHJvcGVydGllcyAqICkKKyAgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBsb2NhbCBhcmNoID0gWyBmZWF0dXJlLmdldC12YWx1ZXMgYXJjaGl0ZWN0dXJlIDogJChwcm9wZXJ0aWVzKSBdIDsKKy0gICAgICAgICAgICBpZiAkKGFyY2gpICE9IGFybSAmJiAkKGFyY2gpICE9IG1pcHMxCisrICAgICAgICAgICAgaWYgJChhcmNoKSA9IHBvd2VyIHx8ICQoYXJjaCkgPSBzcGFyYyB8fCAkKGFyY2gpID0geDg2CisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBpZiAkKG1vZGVsKSA9IDMyCisgICAgICAgICAgICAgICAgIHsKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ib29zdC9maWxlcy9iamFtLW5hdGl2ZS1idWlsZC1iamFtLmRlYnVnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjhiN2VhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvYm9vc3QvZmlsZXMvYmphbS1uYXRpdmUtYnVpbGQtYmphbS5kZWJ1Zy5wYXRjaApAQCAtMCwwICsxLDUwIEBACitGcm9tIDYxOWFkYTMxNGFiMjZjMGM5Y2JmZTU3MDJjZDljMGNhYThmNjQxNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMyBBdWcgMjAxNSAxNzoxMjozMyArMDgwMAorU3ViamVjdDogW1BBVENIXSBiamFtLW5hdGl2ZTogYnVpbGQgYmphbS5kZWJ1ZworCitiamFtIGlzIHN0cmlwcGVkIGJ5IGRlZmF1bHQsIHRoaXMgY2F1c2VzIFFBIHdhcm5pbmcgd2hpbGUgc3RyaXBwaW5nIGl0Citmcm9tIGRvX3BvcHVsYXRlX3N5c3Jvb3QoKToKKworICBXQVJOSU5HOiBGaWxlICcuLi4vdG1wL3N5c3Jvb3RzL3g4Nl82NC1saW51eC91c3IvYmluL2JqYW0nIFwKKyAgICBmcm9tIGJqYW0tbmF0aXZlIHdhcyBhbHJlYWR5IHN0cmlwcGVkLCBcCisgICAgdGhpcyB3aWxsIHByZXZlbnQgZnV0dXJlIGRlYnVnZ2luZyEKKworVGhlIEpBTSBzY3JpcHRzIGFsbG93IHRvIGJ1aWxkIHVuc3RyaXBwZWQgdmVyc2lvbiB3aXRoICctLWRlYnVnJy4gSnVzdAorYnVpbGQgYW5kIGluc3RhbGwgdGhlIGJqYW0uZGVidWcgdG8gc3RvcCBiamFtIGZyb20gYmVpbmcgc3RyaXBwZWQgaW4KK2NvbXBpbGUgc3RlcC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKy0tLQorIGJvb3RzdHJhcC5zaCAgICAgICAgICAgICAgICAgICAgfCAxICsKKyB0b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoIHwgMiArLQorIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9ib290c3RyYXAuc2ggYi9ib290c3RyYXAuc2gKK2luZGV4IDk4Y2Y4OGIuLjU0NjkwYWEgMTAwNzU1CistLS0gYS9ib290c3RyYXAuc2gKKysrKyBiL2Jvb3RzdHJhcC5zaAorQEAgLTIyOCw2ICsyMjgsNyBAQCBpZiB0ZXN0ICJ4JEJKQU0iID0geDsgdGhlbgorICAgZWNobyAidG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8kYXJjaC9iMiIKKyAgIGNwICIkQkpBTSIgLgorICAgY3AgIiRteV9kaXIvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS8kYXJjaC9iamFtIiAuCisrICBjcCAiJG15X2Rpci90b29scy9idWlsZC9zcmMvZW5naW5lLyR7YXJjaH0uZGVidWcvYmphbSIgYmphbS5kZWJ1ZworIAorIGZpCisgCitkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQvc3JjL2VuZ2luZS9idWlsZC5zaCBiL3Rvb2xzL2J1aWxkL3NyYy9lbmdpbmUvYnVpbGQuc2gKK2luZGV4IDZkYmM3MDYuLmM2OWZkYzcgMTAwNzU1CistLS0gYS90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCisrKysgYi90b29scy9idWlsZC9zcmMvZW5naW5lL2J1aWxkLnNoCitAQCAtMzEyLDUgKzMxMiw1IEBAIGlmIHRlc3QgLXggIi4vYm9vdHN0cmFwL2phbTAiIDsgdGhlbgorICAgICBpZiB0ZXN0ICIke0JKQU1fVVBEQVRFfSIgIT0gInVwZGF0ZSIgOyB0aGVuCisgICAgICAgICBlY2hvX3J1biAuL2Jvb3RzdHJhcC9qYW0wIC1mIGJ1aWxkLmphbSAtLXRvb2xzZXQ9JEJPT1NUX0pBTV9UT09MU0VUICItLXRvb2xzZXQtcm9vdD0kQk9PU1RfSkFNX1RPT0xTRVRfUk9PVCIgIiRAIiBjbGVhbgorICAgICBmaQorLSAgICBlY2hvX3J1biAuL2Jvb3RzdHJhcC9qYW0wIC1mIGJ1aWxkLmphbSAtLXRvb2xzZXQ9JEJPT1NUX0pBTV9UT09MU0VUICItLXRvb2xzZXQtcm9vdD0kQk9PU1RfSkFNX1RPT0xTRVRfUk9PVCIgIiRAIgorKyAgICBlY2hvX3J1biAuL2Jvb3RzdHJhcC9qYW0wIC1mIGJ1aWxkLmphbSAtLXRvb2xzZXQ9JEJPT1NUX0pBTV9UT09MU0VUICItLXRvb2xzZXQtcm9vdD0kQk9PU1RfSkFNX1RPT0xTRVRfUk9PVCIgIiRAIiAtLWRlYnVnCisgZmkKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1kb24tdC11c2UtRGViaWFuaXNtcy1pbi1ydW4tcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjRiMjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtZG9uLXQtdXNlLURlYmlhbmlzbXMtaW4tcnVuLXAucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorY2EtY2VydGlmaWNhdGVzIGlzIGEgcGFja2FnZSBmcm9tIERlYmlhbiwgYnV0IHNvbWUgaG9zdCBkaXN0cm9zIHN1Y2ggYXMgRmVkb3JhCitoYXZlIGEgbGVhbmVyIHJ1bi1wYXJ0cyBwcm92aWRlZCBieSBjcm9uIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCAtLXZlcmJvc2Ugb3IgdGhlCisgLS0gc2VwYXJhdG9yIGJldHdlZW4gYXJndW1lbnRzIGFuZCBwYXRocy4KKworVGhpcyBzb2x2ZXMgZXJyb3JzIHN1Y2ggYXMKKworfCBSdW5uaW5nIGhvb2tzIGluIFsuLi5dL3Jvb3Rmcy9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kLi4uCit8IFsuLi5dL3Vzci9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXM6IGxpbmUgMTk0OiBOb3Q6IGNvbW1hbmQgbm90IGZvdW5kCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorU2lnbmVkLW9mZi1ieTogUm9zcyBCdXJ0b24gPHJvc3MuYnVydG9uQGludGVsLmNvbT4KKy0tLQorIHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyB8IDQgKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtMTkxLDkgKzE5MSw3IEBAIGlmIFsgLWQgIiRIT09LU0RJUiIgXQorIHRoZW4KKyAKKyAgIGVjaG8gIlJ1bm5pbmcgaG9va3MgaW4gJEhPT0tTRElSLi4uIgorLSAgVkVSQk9TRV9BUkc9CistICBbICIkdmVyYm9zZSIgPSAwIF0gfHwgVkVSQk9TRV9BUkc9Ii0tdmVyYm9zZSIKKy0gIGV2YWwgcnVuLXBhcnRzICIkVkVSQk9TRV9BUkciIC0tdGVzdCAtLSAiJEhPT0tTRElSIiB8IHdoaWxlIHJlYWQgaG9vaworKyAgZXZhbCBydW4tcGFydHMgLS10ZXN0IC0tICIkSE9PS1NESVIiIHwgd2hpbGUgcmVhZCBob29rCisgICBkbworICAgICAoIGNhdCAiJEFEREVEIgorICAgICAgIGNhdCAiJFJFTU9WRUQiICkgfCAiJGhvb2siIHx8IGVjaG8gIkU6ICRob29rIGV4aXRlZCB3aXRoIGNvZGUgJD8uIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAxLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtcmVtb3ZlLWMtcmVoYXNoLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMDI3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzLzAwMDEtdXBkYXRlLWNhLWNlcnRpZmljYXRlcy1yZW1vdmUtYy1yZWhhc2gucGF0Y2gKQEAgLTAsMCArMSw0NiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0Zyb20gMTExZTkwNWZlOTMxZGExYTM4MDBhY2NmYzY3NWNjMDFjOGVlMDgwYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFVsZiBTYW11ZWxzc29uIDx1bGZAZW1hZ2lpLmNvbT4KK0RhdGU6IFR1ZSwgMjggRmViIDIwMTIgMDY6NDI6NTggKzAxMDAKK1N1YmplY3Q6IFtQQVRDSF0gdXBkYXRlLWNhLWNlcnRpZmljYXRlczogcmVtb3ZlIGMgcmVoYXNoCisKK1VwZGF0ZWQgZWFybGllciBwYXRjaCB0byBhcHBseSBjbGVhbiBvbiAyMDEyLTAyLTEyCitTaWduZWQtb2ZmLWJ5OiBVbGYgU2FtdWVsc3NvbiA8dWxmQGVtYWdpaS5jb20+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCAgIDIwICsrKysrKysrKystLS0tLS0tLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcyBiL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworaW5kZXggNTM3NTk1MC4uYzU2N2UzZCAxMDA3NTUKKy0tLSBhL3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworKysrIGIvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtMTMyLDE2ICsxMzIsMTYgQEAgcm0gLWYgIiRDRVJUQlVORExFIgorIEFEREVEX0NOVD0kKHdjIC1sIDwgIiRBRERFRCIpCisgUkVNT1ZFRF9DTlQ9JCh3YyAtbCA8ICIkUkVNT1ZFRCIpCisKKy1pZiBbICIkQURERURfQ05UIiAtZ3QgMCBdIHx8IFsgIiRSRU1PVkVEX0NOVCIgLWd0IDAgXQorLXRoZW4KKy0gICMgb25seSBydW4gaWYgc2V0IG9mIGZpbGVzIGhhcyBjaGFuZ2VkCistICBpZiBbICIkdmVyYm9zZSIgPSAwIF0KKy0gIHRoZW4KKy0gICAgY19yZWhhc2ggLiA+IC9kZXYvbnVsbAorLSAgZWxzZQorLSAgICBjX3JlaGFzaCAuCistICBmaQorLWZpCisrI2lmIFsgIiRBRERFRF9DTlQiIC1ndCAwIF0gfHwgWyAiJFJFTU9WRURfQ05UIiAtZ3QgMCBdCisrI3RoZW4KKysjICAjIG9ubHkgcnVuIGlmIHNldCBvZiBmaWxlcyBoYXMgY2hhbmdlZAorKyMgIGlmIFsgIiR2ZXJib3NlIiA9IDAgXQorKyMgIHRoZW4KKysjICAgIGNfcmVoYXNoIC4gPiAvZGV2L251bGwKKysjICBlbHNlCisrIyAgICBjX3JlaGFzaCAuCisrIyAgZmkKKysjZmkKKworIGNobW9kIDA2NDQgIiRURU1QQlVORExFIgorIG12IC1mICIkVEVNUEJVTkRMRSIgIiRDRVJUQlVORExFIgorLS0KKzEuNy40LjEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyYjQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvMDAwMi11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXVzZS1TWVNST09ULnBhdGNoCkBAIC0wLDAgKzEsNDYgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitGcm9tIDcyNGNiMTUzY2EwZjYwN2ZiMzhiM2E4ZGIzZWJiMjc0MjYwMWNkODEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBbmRyZWFzIE9iZXJyaXR0ZXIgPG9iaUBvcGVuZHJlYW1ib3gub3JnPgorRGF0ZTogVHVlLCAxOSBNYXIgMjAxMyAxNzoxNDozMyArMDEwMAorU3ViamVjdDogW1BBVENIIDIvMl0gdXBkYXRlLWNhLWNlcnRpZmljYXRlczogdXNlICRTWVNST09UCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlYXMgT2JlcnJpdHRlciA8b2JpQG9wZW5kcmVhbWJveC5vcmc+CistLS0KKyBzYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgfCAgIDE0ICsrKysrKystLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKworSW5kZXg6IGdpdC9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnaXQub3JpZy9zYmluL3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKKysrKyBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCitAQCAtMjQsMTIgKzI0LDEyIEBACisgdmVyYm9zZT0wCisgZnJlc2g9MAorIGRlZmF1bHQ9MAorLUNFUlRTQ09ORj0vZXRjL2NhLWNlcnRpZmljYXRlcy5jb25mCistQ0VSVFNESVI9L3Vzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKy1MT0NBTENFUlRTRElSPS91c3IvbG9jYWwvc2hhcmUvY2EtY2VydGlmaWNhdGVzCisrQ0VSVFNDT05GPSRTWVNST09UL2V0Yy9jYS1jZXJ0aWZpY2F0ZXMuY29uZgorK0NFUlRTRElSPSRTWVNST09UL3Vzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKytMT0NBTENFUlRTRElSPSRTWVNST09UL3Vzci9sb2NhbC9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMKKyBDRVJUQlVORExFPWNhLWNlcnRpZmljYXRlcy5jcnQKKy1FVENDRVJUU0RJUj0vZXRjL3NzbC9jZXJ0cworLUhPT0tTRElSPS9ldGMvY2EtY2VydGlmaWNhdGVzL3VwZGF0ZS5kCisrRVRDQ0VSVFNESVI9JFNZU1JPT1QvZXRjL3NzbC9jZXJ0cworK0hPT0tTRElSPSRTWVNST09UL2V0Yy9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQKKyAKKyB3aGlsZSBbICQjIC1ndCAwIF07CisgZG8KK0BAIC05Miw5ICs5Miw5IEBAIGFkZCgpIHsKKyAgIFBFTT0iJEVUQ0NFUlRTRElSLyQoYmFzZW5hbWUgIiRDRVJUIiAuY3J0IHwgc2VkIC1lICdzLyAvXy9nJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9bKCldLz0vZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvLC9fL2cnKS5wZW0iCistICBpZiAhIHRlc3QgLWUgIiRQRU0iIHx8IFsgIiQocmVhZGxpbmsgIiRQRU0iKSIgIT0gIiRDRVJUIiBdCisrICBpZiAhIHRlc3QgLWUgIiRQRU0iIHx8IFsgIiQocmVhZGxpbmsgIiRQRU0iKSIgIT0gIiR7Q0VSVCMjJFNZU1JPT1R9IiBdCisgICB0aGVuCistICAgIGxuIC1zZiAiJENFUlQiICIkUEVNIgorKyAgICBsbiAtc2YgIiR7Q0VSVCMjJFNZU1JPT1R9IiAiJFBFTSIKKyAgICAgZWNobyAiKyRQRU0iID4+ICIkQURERUQiCisgICBmaQorICAgIyBBZGQgdHJhaWxpbmcgbmV3bGluZSB0byBjZXJ0aWZpY2F0ZSwgaWYgaXQgaXMgbWlzc2luZyAoIzYzNTU3MCkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlcy9kZWZhdWx0LXN5c3Jvb3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhiMDc5MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvZGVmYXVsdC1zeXNyb290LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCit1cGRhdGUtY2EtY2VydGlmaWNhdGVzOiBmaW5kIFNZU1JPT1QgcmVsYXRpdmUgdG8gaXRzIG93biBsb2NhdGlvbgorCitUaGlzIG1ha2VzIHRoZSBzY3JpcHQgcmVsb2NhdGFibGUuCisKK0luZGV4OiBnaXQvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ2l0Lm9yaWcvc2Jpbi91cGRhdGUtY2EtY2VydGlmaWNhdGVzCisrKysgZ2l0L3NiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcworQEAgLTY2LDYgKzY2LDM5IEBAIGRvCisgICBzaGlmdAorIGRvbmUKKyAKKytpZiBbIC16ICIkU1lTUk9PVCIgXTsgdGhlbgorKyAgbG9jYWxfd2hpY2ggKCkgeworKyAgICBpZiBbICQjIC1sdCAxIF07IHRoZW4KKysgICAgICByZXR1cm4gMQorKyAgICBmaQorKworKyAgICAoCisrICAgICAgSUZTPToKKysgICAgICBmb3IgZW50cnkgaW4gJFBBVEg7IGRvCisrICAgICAgICBpZiBbIC14ICIkZW50cnkvJDEiIF07IHRoZW4KKysgICAgICAgICAgZWNobyAiJGVudHJ5LyQxIgorKyAgICAgICAgICBleGl0IDAKKysgICAgICAgIGZpCisrICAgICAgZG9uZQorKyAgICAgIGV4aXQgMQorKyAgICApCisrICB9CisrCisrICBjYXNlICIkMCIgaW4KKysgICAgKi8qKQorKyAgICAgIHNiaW5kaXI9JChjZCAkezAlLyp9ICYmIHB3ZCkKKysgICAgICA7OworKyAgICAqKQorKyAgICAgIHNiaW5kaXI9JChjZCAkKGRpcm5hbWUgJChsb2NhbF93aGljaCAkMCkpICYmIHB3ZCkKKysgICAgICA7OworKyAgZXNhYworKyAgcHJlZml4PSR7c2JpbmRpciUvKn0KKysgIFNZU1JPT1Q9JHtwcmVmaXglLyp9CisrICBpZiBbICEgLWQgIiRTWVNST09UL3Vzci9zaGFyZS9jYS1jZXJ0aWZpY2F0ZXMiIF07IHRoZW4KKysgICAgU1lTUk9PVD0KKysgIGZpCisrZmkKKysKKyBpZiBbICEgLXMgIiRDRVJUU0NPTkYiIF0KKyB0aGVuCisgICBmcmVzaD0xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzL3NiaW5kaXIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExM2ZhOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NhLWNlcnRpZmljYXRlcy9jYS1jZXJ0aWZpY2F0ZXMvc2JpbmRpci5wYXRjaApAQCAtMCwwICsxLDIwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworTGV0IHVzIGFsdGVyIHRoZSBpbnN0YWxsIGRlc3RpbmF0aW9uIG9mIHRoZSBzY3JpcHQgdmlhIFNCSU5ESVIKKworLS0tIGNhLWNlcnRpZmljYXRlcy0yMDEzMDExOS5vcmlnL3NiaW4vTWFrZWZpbGUKKysrKyBjYS1jZXJ0aWZpY2F0ZXMtMjAxMzAxMTkvc2Jpbi9NYWtlZmlsZQorQEAgLTMsOSArMywxMiBAQAorICMKKyAjCisKKytTQklORElSID0gL3Vzci9zYmluCisrCisgYWxsOgorCisgY2xlYW46CisKKyBpbnN0YWxsOgorLQlpbnN0YWxsIC1tNzU1IHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgJChERVNURElSKS91c3Ivc2Jpbi8KKysJaW5zdGFsbCAtZCAkKERFU1RESVIpJChTQklORElSKQorKwlpbnN0YWxsIC1tNzU1IHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgJChERVNURElSKSQoU0JJTkRJUikvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jYS1jZXJ0aWZpY2F0ZXMvY2EtY2VydGlmaWNhdGVzXzIwMTUwNDI2LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTZlM2RmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY2EtY2VydGlmaWNhdGVzL2NhLWNlcnRpZmljYXRlc18yMDE1MDQyNi5iYgpAQCAtMCwwICsxLDgwIEBACitTVU1NQVJZID0gIkNvbW1vbiBDQSBjZXJ0aWZpY2F0ZXMiCitERVNDUklQVElPTiA9ICJUaGlzIHBhY2thZ2UgaW5jbHVkZXMgUEVNIGZpbGVzIG9mIENBIGNlcnRpZmljYXRlcyB0byBhbGxvdyBcCitTU0wtYmFzZWQgYXBwbGljYXRpb25zIHRvIGNoZWNrIGZvciB0aGUgYXV0aGVudGljaXR5IG9mIFNTTCBjb25uZWN0aW9ucy4gXAorVGhpcyBkZXJpdmVkIGZyb20gRGViaWFuJ3MgQ0EgQ2VydGlmaWNhdGVzLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9wYWNrYWdlcy5kZWJpYW4ub3JnL3NpZC9jYS1jZXJ0aWZpY2F0ZXMiCitTRUNUSU9OID0gIm1pc2MiCitMSUNFTlNFID0gIkdQTC0yLjArICYgTVBMLTIuMCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2RlYmlhbi9jb3B5cmlnaHQ7bWQ1PTQ4ZDJiYWY5Nzk4Njk5OWU3NzZiNDNjOGRkOWUwYzVhIgorCisjIFRoaXMgaXMgbmVlZGVkIHRvIGVuc3VyZSB3ZSBjYW4gcnVuIHRoZSBwb3N0aW5zdCBhdCBpbWFnZSBjcmVhdGlvbiB0aW1lCitERVBFTkRTID0gImNhLWNlcnRpZmljYXRlcy1uYXRpdmUiCitERVBFTkRTX2NsYXNzLW5hdGl2ZSA9ICIiCisKKyMgdGFnOiBkZWJpYW4vMjAxNTA0MjYgKyAyCitTUkNSRVYgPSAiZDQ3OTBkMjgzMmFhYWM5MTUyZjQ1MGUwNjY2MTUxMTA2NzU5MjIyNyIKKworU1JDX1VSSSA9ICJnaXQ6Ly9hbm9uc2NtLmRlYmlhbi5vcmcvY29sbGFiLW1haW50L2NhLWNlcnRpZmljYXRlcy5naXQgXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLXJlbW92ZS1jLXJlaGFzaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAyLXVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMtdXNlLVNZU1JPT1QucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11cGRhdGUtY2EtY2VydGlmaWNhdGVzLWRvbi10LXVzZS1EZWJpYW5pc21zLWluLXJ1bi1wLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2RlZmF1bHQtc3lzcm9vdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9zYmluZGlyLnBhdGNoIgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitpbmhlcml0IGFsbGFyY2gKKworRVhUUkFfT0VNQUtFID0gIlwKKyAgICAnQ0VSVFNESVI9JHtkYXRhZGlyfS9jYS1jZXJ0aWZpY2F0ZXMnIFwKKyAgICAnU0JJTkRJUj0ke3NiaW5kaXJ9JyBcCisiCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKyAgICBvZV9ydW5tYWtlIGNsZWFuCit9CisKK2RvX2luc3RhbGwgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzIFwKKyAgICAgICAgICAgICAgICR7RH0ke3N5c2NvbmZkaXJ9L3NzbC9jZXJ0cyBcCisgICAgICAgICAgICAgICAke0R9JHtzeXNjb25mZGlyfS9jYS1jZXJ0aWZpY2F0ZXMvdXBkYXRlLmQKKyAgICBvZV9ydW5tYWtlICdERVNURElSPSR7RH0nIGluc3RhbGwKKworICAgIGluc3RhbGwgLWQgJHtEfSR7bWFuZGlyfS9tYW44CisgICAgaW5zdGFsbCAtbSAwNjQ0IHNiaW4vdXBkYXRlLWNhLWNlcnRpZmljYXRlcy44ICR7RH0ke21hbmRpcn0vbWFuOC8KKworICAgIGluc3RhbGwgLWQgJHtEfSR7c3lzY29uZmRpcn0KKyAgICB7CisgICAgICAgIGVjaG8gIiMgTGluZXMgc3RhcnRpbmcgd2l0aCAjIHdpbGwgYmUgaWdub3JlZCIKKyAgICAgICAgZWNobyAiIyBMaW5lcyBzdGFydGluZyB3aXRoICEgd2lsbCByZW1vdmUgY2VydGlmaWNhdGUgb24gbmV4dCB1cGRhdGUiCisgICAgICAgIGVjaG8gIiMiCisgICAgICAgIGZpbmQgJHtEfSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzIC10eXBlIGYgLW5hbWUgJyouY3J0JyB8IFwKKyAgICAgICAgICAgIHNlZCAncyxeJHtEfSR7ZGF0YWRpcn0vY2EtY2VydGlmaWNhdGVzLywsJworICAgIH0gPiR7RH0ke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy5jb25mCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCAoKSB7CisgICAgc2VkIC1pIC1lICdzLC9ldGMvLCR7c3lzY29uZmRpcn0vLCcgXAorICAgICAgICAgICAtZSAncywvdXNyL3NoYXJlLywke2RhdGFkaXJ9LywnIFwKKyAgICAgICAgICAgLWUgJ3MsL3Vzci9sb2NhbCwke3ByZWZpeH0vbG9jYWwsJyBcCisgICAgICAgICR7RH0ke3NiaW5kaXJ9L3VwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMgXAorICAgICAgICAke0R9JHttYW5kaXJ9L21hbjgvdXBkYXRlLWNhLWNlcnRpZmljYXRlcy44Cit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgU1lTUk9PVD0iJEQiIHVwZGF0ZS1jYS1jZXJ0aWZpY2F0ZXMKK30KKworQ09ORkZJTEVTXyR7UE59ICs9ICIke3N5c2NvbmZkaXJ9L2NhLWNlcnRpZmljYXRlcy5jb25mIgorCisjIFBvc3RpbnN0cyBkb24ndCBzZWVtIHRvIGJlIHJ1biBmb3IgbmF0aXZlc2RrIHBhY2thZ2VzIHdoZW4gcG9wdWxhdGluZyBTREtzLgorQ09ORkZJTEVTXyR7UE59X2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgPSAiICR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQiCitkb19pbnN0YWxsX2FwcGVuZF9jbGFzcy1uYXRpdmVzZGsgKCkgeworICAgIFNZU1JPT1Q9IiR7RH0ke1NES1BBVEhOQVRJVkV9IiB1cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisgICAgU1lTUk9PVD0iJHtEfSR7YmFzZV9wcmVmaXh9IiAke0R9JHtzYmluZGlyfS91cGRhdGUtY2EtY2VydGlmaWNhdGVzCit9CisKK0JCQ0xBU1NFWFRFTkQgKz0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvYWRkLXBvbGtpdC1jb25maWd1cmUtYXJndW1lbnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NzlkNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdC9hZGQtcG9sa2l0LWNvbmZpZ3VyZS1hcmd1bWVudC5wYXRjaApAQCAtMCwwICsxLDMzIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIENvbnNvbGVLaXQtMC40LjYub3JpZy9jb25maWd1cmUuYWMKKysrKyBDb25zb2xlS2l0LTAuNC42L2NvbmZpZ3VyZS5hYworQEAgLTU2LDEwICs1NiwyNCBAQCBQS0dfQ0hFQ0tfTU9EVUxFUyhDT05TT0xFX0tJVCwKKyAgIGd0aHJlYWQtMi4wID49ICRHTElCX1JFUVVJUkVEX1ZFUlNJT04KKyApCisKKy1QS0dfQ0hFQ0tfTU9EVUxFUyhQT0xLSVQsCistICBwb2xraXQtZ29iamVjdC0xID49ICRQT0xLSVRfUkVRVUlSRURfVkVSU0lPTiwKKy0gIGhhdmVfcG9sa2l0PXllcywKKy0gIGhhdmVfcG9sa2l0PW5vKQorK0FDX0FSR19XSVRIKFtwb2xraXRdLAorKyAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcG9sa2l0XSwKKysgICAgW3N1cHBvcnQgUG9saWN5S2l0IEA8OkBkZWZhdWx0PWNoZWNrQDo+QF0pXSwKKysgIFtdLAorKyAgW3dpdGhfcG9sa2l0PWNoZWNrXSkKKysKKytBU19JRihbdGVzdCAieCR3aXRoX3BvbGtpdCIgIT0geG5vXSwKKysgIFtQS0dfQ0hFQ0tfTU9EVUxFUyhQT0xLSVQsCisrICAgICBwb2xraXQtZ29iamVjdC0xID49ICRQT0xLSVRfUkVRVUlSRURfVkVSU0lPTiwKKysgICAgIGhhdmVfcG9sa2l0PXllcywKKysgICAgIFtpZiB0ZXN0ICJ4JHdpdGhfcG9sa2l0IiAhPSB4Y2hlY2s7IHRoZW4KKysgICAgICAgQUNfTVNHX0ZBSUxVUkUoCisrICAgICAgICAgWy0td2l0aC1wb2xraXQgd2FzIGdpdmVuLCBidXQgdGVzdCBmb3IgcG9sa2l0IGZhaWxlZF0pCisrICAgICAgZWxzZQorKyAgICAgICAgaGF2ZV9wb2xraXQ9bm8KKysgICAgICBmaQorKyAgICAgXSldKQorKworIGlmIHRlc3QgIngkaGF2ZV9wb2xraXQiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoSEFWRV9QT0xLSVQsIFtdLCBbRGVmaW5lIGlmIHdlIGhhdmUgcG9sa2l0XSkKKyBmaQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0L3NlcGJ1aWxkZml4LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZjliOWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jb25zb2xla2l0L2NvbnNvbGVraXQvc2VwYnVpbGRmaXgucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorRml4IGJ1aWxkcyBpbiB0aGUgY2FzZSBvZiBzZXByYXRlIHNvdXJjZSBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JQIDIwMTMvNC8xNworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IHBhbS1jay1jb25uZWN0b3IvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjb25zb2xla2l0L3BhbS1jay1jb25uZWN0b3Iub3JpZy9NYWtlZmlsZS5hbQkyMDEwLTA5LTAzIDEzOjU0OjMxLjAwMDAwMDAwMCArMDAwMAorKysrIGNvbnNvbGVraXQvcGFtLWNrLWNvbm5lY3Rvci9NYWtlZmlsZS5hbQkyMDEzLTA0LTE3IDA5OjA2OjQ5LjA5MzUyNDkxOCArMDAwMAorQEAgLTQsNyArNCw3IEBACisgCisgSU5DTFVERVMgPSAJCQkJCVwKKyAJJChMSUJEQlVTX0NGTEFHUykJCQlcCistCS1JJCh0b3BfYnVpbGRkaXIpL2xpYmNrLWNvbm5lY3RvcglcCisrCS1JJCh0b3Bfc3JjZGlyKS9saWJjay1jb25uZWN0b3IJXAorIAkkKE5VTEwpCisgCisgcGFtbGliZGlyID0gJChQQU1fTU9EVUxFX0RJUikKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NvbnNvbGVraXQvY29uc29sZWtpdF8wLjQuNi5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE4OTJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY29uc29sZWtpdC9jb25zb2xla2l0XzAuNC42LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiRnJhbWV3b3JrIGZvciBkZWZpbmluZyBhbmQgdHJhY2tpbmcgdXNlcnMsIGxvZ2luIHNlc3Npb25zLCBhbmQgc2VhdHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL0NvbnNvbGVLaXQiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvYnVnbGlzdC5jZ2k/cXVlcnlfZm9ybWF0PXNwZWNpZmljJnByb2R1Y3Q9Q29uc29sZUtpdCIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbWFpbi5jO2VuZGxpbmU9MjE7bWQ1PTBhOTk0ZTA5NzY5NzgwMjIwMTYzMjU1ZDhmOTA3MWMzIgorCitERVBFTkRTID0gImdsaWItMi4wIGdsaWItMi4wLW5hdGl2ZSBkYnVzIGRidXMtZ2xpYiB2aXJ0dWFsL2xpYngxMSIKK1JERVBFTkRTXyR7UE59ICs9ICJiYXNlLWZpbGVzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZGlzdHJvX2ZlYXR1cmVzX2NoZWNrCisjIGRlcGVuZHMgb24gdmlydHVhbC9saWJ4MTEKK1JFUVVJUkVEX0RJU1RST19GRUFUVVJFUyA9ICJ4MTEiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvQ29uc29sZUtpdC9kaXN0L0NvbnNvbGVLaXQtJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovL3NlcGJ1aWxkZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FkZC1wb2xraXQtY29uZmlndXJlLWFyZ3VtZW50LnBhdGNoIFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gIjYxMTc5MmI0ZDYxNjI1M2E1YmRlYzkxNzVmOGI3Njc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImI0MWQxN2UwNmY4MDA1OTU4OWZiZWVmZTk2YWQwN2JjYzU2NGM0OWU2NTUxNmRhMWNhZjk3NTE0NjQ3NTU2NWMiCisKK1MgPSAiJHtXT1JLRElSfS9Db25zb2xlS2l0LSR7UFZ9IgorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdzeXN0ZW1kJywgJ3N5c3RlbWQnLCAnJywgZCl9IgorCitQQUNLQUdFQ09ORklHW3BhbV0gPSAiLS1lbmFibGUtcGFtLW1vZHVsZSAtLXdpdGgtcGFtLW1vZHVsZS1kaXI9JHtiYXNlX2xpYmRpcn0vc2VjdXJpdHksLS1kaXNhYmxlLXBhbS1tb2R1bGUsbGlicGFtIgorUEFDS0FHRUNPTkZJR1twb2xpY3lraXRdID0gIi0td2l0aC1wb2xraXQsLS13aXRob3V0LXBvbGtpdCxwb2xraXQiCitQQUNLQUdFQ09ORklHW3N5c3RlbWRdID0gIi0td2l0aC1zeXN0ZW1kc3lzdGVtdW5pdGRpcj0ke3N5c3RlbWRfdW5pdGRpcn0vc3lzdGVtLywtLXdpdGgtc3lzdGVtZHN5c3RlbXVuaXRkaXI9IgorCitGSUxFU18ke1BOfSArPSAiJHtsb2NhbHN0YXRlZGlyfS9sb2cvQ29uc29sZUtpdCAke2V4ZWNfcHJlZml4fS9saWIvQ29uc29sZUtpdCBcCisgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L0NvbnNvbGVLaXQgICR7c3lzdGVtZF91bml0ZGlyfSAke2Jhc2VfbGliZGlyfSBcCisgICAgICAgICAgICAgICAgJHtkYXRhZGlyfS9kYnVzLTEgJHtkYXRhZGlyfS9Qb2xpY3lLaXQgJHtkYXRhZGlyfS9wb2xraXQqIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWciCisKK1BBQ0tBR0VTID0rICJwYW0tcGx1Z2luLWNrLWNvbm5lY3RvciIKK0ZJTEVTX3BhbS1wbHVnaW4tY2stY29ubmVjdG9yICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIgorUkRFUEVORFNfcGFtLXBsdWdpbi1jay1jb25uZWN0b3IgKz0gIiR7UE59IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpZiAke0BiYi51dGlscy5jb250YWlucygnRElTVFJPX0ZFQVRVUkVTJywgJ3N5c3RlbWQnLCAndHJ1ZScsICdmYWxzZScsIGQpfTsgdGhlbgorCQlpbnN0YWxsIC1kICR7RH0ke3N5c2NvbmZkaXJ9L3RtcGZpbGVzLmQKKwkJZWNobyAiZCAke2xvY2Fsc3RhdGVkaXJ9L2xvZy9Db25zb2xlS2l0IC0gLSAtIC0iIFwKKwkJCT4gJHtEfSR7c3lzY29uZmRpcn0vdG1wZmlsZXMuZC9jb25zb2xla2l0LmNvbmYKKwlmaQorCisJIyBSZW1vdmUgL3Zhci9ydW4gZnJvbSBwYWNrYWdlIGFzIGNvbnNvbGUta2l0LWRhZW1vbiB3aWxsIHBvcHVsYXRlIGl0IG9uIHN0YXJ0dXAKKwlybSAtZnIgIiR7RH0ke2xvY2Fsc3RhdGVkaXJ9L3J1biIKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLWRicGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mjc1NTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tZGJwYXRoLnBhdGNoCkBAIC0wLDAgKzEsNjEgQEAKK2NyZWF0ZXJlcG86IEltcGxlbWVudCAtLWRicGF0aCBjb21tYW5kIGxpbmUgb3B0aW9uCisKKy0tZGJwYXRoIG9wdGlvbiBhbGxvd3MgdG8gc3BlY2lmeSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkKK3dpdGggcnBtIGRhdGFiYXNlLiBCeSBkZWZhdWx0IGNyZWF0ZXJlcG8gdXNlcyBvciBjcmVhdGVzCitycG0gZGF0YWJhc2UgaW4gL3Zhci9saWIvcnBtLworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogRWQgQmFydG9zaCA8ZWQuYmFydG9zaEBsaW51eC5pbnRlbC5jb20+CisKKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2dlbnBrZ21ldGFkYXRhLnB5IDIwMTUtMDMtMzAgMjI6MTg6MTkuOTA0MDAwMDAwICswMzAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvZ2VucGtnbWV0YWRhdGEucHkgMjAxNS0wMy0zMCAyMjoyODo0OS4yMDgwMDAwMDAgKzAzMDAKK0BAIC02NSw2ICs2NSw3IEBACisgICAgICAtcCwgLS1wcmV0dHkgPSBvdXRwdXQgeG1sIGZpbGVzIGluIHByZXR0eSBmb3JtYXQuCisgICAgICAtLXVwZGF0ZSA9IHVwZGF0ZSBleGlzdGluZyBtZXRhZGF0YSAoaWYgcHJlc2VudCkKKyAgICAgIC1kLCAtLWRhdGFiYXNlID0gZ2VuZXJhdGUgdGhlIHNxbGl0ZSBkYXRhYmFzZXMuCisrICAgICAtLWRicGF0aCA8ZGlyPiA9IHNwZWNpZnkgcGF0aCB0byBycG0gZGIgZGlyZWN0b3J5LgorICAgICAiIiIpCisgCisgICAgIHN5cy5leGl0KHJldHZhbCkKK0BAIC03MiwxMCArNzMsMTMgQEAKKyBjbGFzcyBNZXRhRGF0YUdlbmVyYXRvcjoKKyAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZHMpOgorICAgICAgICAgc2VsZi5jbWRzID0gY21kcworLSAgICAgICAgc2VsZi50cyA9IHJwbS5UcmFuc2FjdGlvblNldCgpCisgICAgICAgICBzZWxmLnBrZ2NvdW50ID0gMAorICAgICAgICAgc2VsZi5maWxlcyA9IFtdCisgCisrICAgICAgICBpZiBzZWxmLmNtZHNbJ2RicGF0aCddOgorKyAgICAgICAgICAgIHJwbS5hZGRNYWNybygiX2RicGF0aCIsIHNlbGYuY21kc1snZGJwYXRoJ10pCisrICAgICAgICBzZWxmLnRzID0gcnBtLlRyYW5zYWN0aW9uU2V0KCkKKysKKyAgICAgZGVmIF9vc19wYXRoX3dhbGsoc2VsZiwgdG9wLCBmdW5jLCBhcmcpOgorICAgICAgICAgIiIiRGlyZWN0b3J5IHRyZWUgd2FsayB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9uLgorICAgICAgICAgIGNvcHkgb2Ygb3MucGF0aC53YWxrLCBmaXhlcyB0aGUgbGluay9zdGF0aW5nIHByb2JsZW0KK0BAIC00MzUsNiArNDM5LDcgQEAKKyAgICAgY21kc1snZGlyLXBhdHRlcm4tbWF0Y2gnXSA9IFsnLipiaW5cLy4qJywgJ15cL2V0Y1wvLionXQorICAgICBjbWRzWydza2lwLXN5bWxpbmtzJ10gPSBGYWxzZQorICAgICBjbWRzWydwa2dsaXN0J10gPSBbXQorKyAgICBjbWRzWydkYnBhdGgnXSA9IE5vbmUKKyAKKyAgICAgdHJ5OgorICAgICAgICAgZ29wdHMsIGFyZ3NsZWZ0ID0gZ2V0b3B0LmdldG9wdChhcmdzLCAncGhxVnZuZGc6czp4OnU6YzpvOkNTaTonLCBbJ2hlbHAnLCAnZXhjbHVkZT0nLAorQEAgLTQ0Miw3ICs0NDcsNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXNldXJsPScsICdncm91cGZpbGU9JywgJ2NoZWNrc3VtPScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcnNpb24nLCAncHJldHR5JywgJ3NwbGl0JywgJ291dHB1dGRpcj0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Vwb2NoJywgJ2NoZWNrdHMnLCAnZGF0YWJhc2UnLCAndXBkYXRlJywKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tpcC1zeW1saW5rcycsICdwa2dsaXN0PSddKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza2lwLXN5bWxpbmtzJywgJ3BrZ2xpc3Q9JywgJ2RicGF0aD0nXSkKKyAgICAgZXhjZXB0IGdldG9wdC5lcnJvciwgZToKKyAgICAgICAgIGVycm9ycHJpbnQoXygnT3B0aW9ucyBFcnJvcjogJXMuJykgJSBlKQorICAgICAgICAgdXNhZ2UoKQorQEAgLTUxNiw2ICs1MjEsOCBAQAorICAgICAgICAgICAgICAgICBjbWRzWydza2lwLXN5bWxpbmtzJ10gPSBUcnVlCisgICAgICAgICAgICAgZWxpZiBhcmcgaW4gWyctaScsICctLXBrZ2xpc3QnXToKKyAgICAgICAgICAgICAgICAgY21kc1sncGtnbGlzdCddID0gYQorKyAgICAgICAgICAgIGVsaWYgYXJnID09ICctLWRicGF0aCc6CisrICAgICAgICAgICAgICAgIGNtZHNbJ2RicGF0aCddID0gb3MucGF0aC5yZWFscGF0aChhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIGV4Y2VwdCBWYWx1ZUVycm9yLCBlOgorICAgICAgICAgZXJyb3JwcmludChfKCdPcHRpb25zIEVycm9yOiAlcycpICUgZSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9jcmVhdGVyZXBvLXJwbTU0OS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzcyMDBkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8tcnBtNTQ5LnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK2R1bXBNZXRhZGF0YS5weTogRml4IGZvciBSUE01IC0gNS40LjkgaW50ZWdyYXRpb24KKworUlBNNSBubyBsb25nZXIgaGFzIGEgc3dpdGNoIHRvIGRpc2FibGUgc2lnbmF0dXJlIHZhbGlkYXRpb24uICAoRHVlIHRvIHNlY3VyaXR5Cit2YWxpZGF0aW9uIGNvbmNlcm5zLikKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvdGhlcl0KKyAgY3JlYXRlcmVwbyBkb2VzIG5vdCBzdXBwb3J0IFJQTTUgdXBzdHJlYW0KKworU2lnbmVkLW9mZi1ieTogTWFyayBIYXRsZSA8bWFyay5oYXRsZUB3aW5kcml2ZXIuY29tPgorCitkaWZmIC11IGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZHVtcE1ldGFkYXRhLnB5IGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQorLS0tIGNyZWF0ZXJlcG8tMC40LjExLm9yaWcvZHVtcE1ldGFkYXRhLnB5CTIwMTItMDYtMDUgMTA6MTI6NTUuNjg3OTY0MjIyIC0wNTAwCisrKysgY3JlYXRlcmVwby0wLjQuMTEvZHVtcE1ldGFkYXRhLnB5CTIwMTItMDYtMDUgMTA6NDA6MDguMTU0MDYwNjAwIC0wNTAwCitAQCAtOTIsNyArOTIsNyBAQAorICAgICAgICAgICAgIGZkbm8gPSBwYWNrYWdlICMgbGV0J3MgYXNzdW1lIHRoaXMgaXMgYW4gZmRubyBhbmQgZ28gd2l0aCBpdCA6KQorICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIHJhaXNlIE1ERXJyb3IsICJFcnJvciBvcGVuaW5nIGZpbGUiCistICAgIHRzLnNldFZTRmxhZ3MoKHJwbS5fUlBNVlNGX05PU0lHTkFUVVJFU3xycG0uUlBNVlNGX05PTUQ1fHJwbS5SUE1WU0ZfTkVFRFBBWUxPQUQpKQorKyAgICB0cy5zZXRWU0ZsYWdzKChycG0uUlBNVlNGX05PTUQ1fHJwbS5SUE1WU0ZfTkVFRFBBWUxPQUQpKQorICAgICB0cnk6CisgICAgICAgICBoZHIgPSB0cy5oZHJGcm9tRmRubyhmZG5vKQorICAgICBleGNlcHQgcnBtLmVycm9yOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL2R1bXBNZXRhZGF0YS1kaXNhYmxlLXNpZ25hdHVyZS12YWxpZGF0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNTUzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZHVtcE1ldGFkYXRhLWRpc2FibGUtc2lnbmF0dXJlLXZhbGlkYXRpb24ucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorZHVtcE1ldGFkYXRhOiBkaXNhYmxlIHNpZ25hdHVyZSB2YWxpZGF0aW9uCisKK01ha2VzIGl0IHBvc3NpYmxlIHRvIHdvcmsgb24gUlBNIHJlcG9zaXRvcmllcyB0aGF0IGNvbnRhaW4gc2lnbmVkIHBhY2thZ2VzCit3aXRob3V0IHRoZSBuZWVkIG9mIGltcG9ydGluZyB0aGUgcHVibGljIHBhcnQgb2YgdGhlIHNpZ25pbmcga2V5IGludG8gdGhlIFJQTQorZGF0YWJhc2UuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrdXMgTGVodG9uZW4gPG1hcmt1cy5sZWh0b25lbkBsaW51eC5pbnRlbC5jb20+CistLS0KKyBkdW1wTWV0YWRhdGEucHkgfCA0ICsrKy0KKyAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9kdW1wTWV0YWRhdGEucHkgYi9kdW1wTWV0YWRhdGEucHkKK2luZGV4IGU0MGU4YWMuLmNhNmE4MmQgMTAwNjQ0CistLS0gYS9kdW1wTWV0YWRhdGEucHkKKysrKyBiL2R1bXBNZXRhZGF0YS5weQorQEAgLTkyLDcgKzkyLDkgQEAgZGVmIHJldHVybkhkcih0cywgcGFja2FnZSk6CisgICAgICAgICAgICAgZmRubyA9IHBhY2thZ2UgIyBsZXQncyBhc3N1bWUgdGhpcyBpcyBhbiBmZG5vIGFuZCBnbyB3aXRoIGl0IDopCisgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgcmFpc2UgTURFcnJvciwgIkVycm9yIG9wZW5pbmcgZmlsZSIKKy0gICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEKSkKKysgICAgdHMuc2V0VlNGbGFncygocnBtLlJQTVZTRl9OT01ENXxycG0uUlBNVlNGX05FRURQQVlMT0FEfAorKyAgICAgICAgICAgICAgICAgICBycG0uUlBNVlNGX05PRFNBfHJwbS5SUE1WU0ZfTk9SU0F8CisrICAgICAgICAgICAgICAgICAgIHJwbS5SUE1WU0ZfTk9EU0FIRUFERVJ8cnBtLlJQTVZTRl9OT1JTQUhFQURFUikpCisgICAgIHRyeToKKyAgICAgICAgIGhkciA9IHRzLmhkckZyb21GZG5vKGZkbm8pCisgICAgIGV4Y2VwdCBycG0uZXJyb3I6CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9maXgtbmF0aXZlLWluc3RhbGwucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MjAyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vZml4LW5hdGl2ZS1pbnN0YWxsLnBhdGNoCkBAIC0wLDAgKzEsMTYzIEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK0RhdGU6IEphbiAzMSwgMjAxMQorCitUaGVyZSBhcmUgdHdvIGZpeGVzOgorICAxLiAtbmF0aXZlIG5lZWRzIHRvIGN1c3RvbWl6ZSBwcmVmaXgKKyAgMi4gbmVlZHMgdG8gY2hhbmdlIHB5dGhvbiByZWZlcmVuY2UgaW4gYmluYXJpZXMKKworU2lnbmVkLW9mZi1ieTogUWluZyBIZSA8cWluZy5oZUBpbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCitpbmRleCBiMmQxYTMyLi4zYzM2MzlmIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMywyMiArMywyMiBAQCBWRVJTSU9OID0gMC40LjExCisgU0hFTEwgPSAvYmluL3NoCisgdG9wX3NyY2RpciA9IC4KKyBzcmNkaXIgPSAuCistcHJlZml4ID0gL3VzcgorLWV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CistCistYmluZGlyID0gJHtleGVjX3ByZWZpeH0vYmluCistc2JpbmRpciA9ICR7ZXhlY19wcmVmaXh9L3NiaW4KKy1saWJleGVjZGlyID0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworLWRhdGFkaXIgPSAke3ByZWZpeH0vc2hhcmUKKy1zeXNjb25mZGlyID0gJHtwcmVmaXh9L2V0YworLXNoYXJlZHN0YXRlZGlyID0gJHtwcmVmaXh9L2NvbQorLWxvY2Fsc3RhdGVkaXIgPSAke3ByZWZpeH0vdmFyCistbGliZGlyID0gJHtleGVjX3ByZWZpeH0vbGliCistaW5mb2RpciA9ICR7cHJlZml4fS9pbmZvCisrcHJlZml4ID89IC91c3IKKytleGVjX3ByZWZpeCA/PSAke3ByZWZpeH0KKysKKytiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vYmluCisrc2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9zYmluCisrbGliZXhlY2RpciA/PSAke2V4ZWNfcHJlZml4fS9saWJleGVjCisrZGF0YWRpciA/PSAke3ByZWZpeH0vc2hhcmUKKytzeXNjb25mZGlyID89ICR7cHJlZml4fS9ldGMKKytzaGFyZWRzdGF0ZWRpciA/PSAke3ByZWZpeH0vY29tCisrbG9jYWxzdGF0ZWRpciA/PSAke3ByZWZpeH0vdmFyCisrbGliZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYgorK2luZm9kaXIgPz0gJHtwcmVmaXh9L2luZm8KKyBkb2NkaXIgPSAKKy1pbmNsdWRlZGlyID0gJHtwcmVmaXh9L2luY2x1ZGUKKytpbmNsdWRlZGlyID89ICR7cHJlZml4fS9pbmNsdWRlCisgb2xkaW5jbHVkZWRpciA9IC91c3IvaW5jbHVkZQorLW1hbmRpciA9ICR7cHJlZml4fS9zaGFyZS9tYW4KKyttYW5kaXIgPz0gJHtwcmVmaXh9L3NoYXJlL21hbgorIAorIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpLyQoUEFDS0FHRSkKKyBwa2dsaWJkaXIgPSAkKGxpYmRpcikvJChQQUNLQUdFKQorZGlmZiAtLWdpdCBhL2Jpbi9NYWtlZmlsZSBiL2Jpbi9NYWtlZmlsZQoraW5kZXggNTJjMWY1MC4uZTMwNjEwZSAxMDA2NDQKKy0tLSBhL2Jpbi9NYWtlZmlsZQorKysrIGIvYmluL01ha2VmaWxlCitAQCAtMSwyMiArMSwyMiBAQAorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuLgorIHNyY2RpciA9IC4uL2JpbgorLXByZWZpeCA9IC91c3IKKy1leGVjX3ByZWZpeCA9ICR7cHJlZml4fQorLQorLWJpbmRpciA9ICR7ZXhlY19wcmVmaXh9L2JpbgorLXNiaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9zYmluCistbGliZXhlY2RpciA9ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKy1kYXRhZGlyID0gJHtwcmVmaXh9L3NoYXJlCistc3lzY29uZmRpciA9ICR7cHJlZml4fS9ldGMKKy1zaGFyZWRzdGF0ZWRpciA9ICR7cHJlZml4fS9jb20KKy1sb2NhbHN0YXRlZGlyID0gJHtwcmVmaXh9L3ZhcgorLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgorLWluZm9kaXIgPSAke3ByZWZpeH0vaW5mbworK3ByZWZpeCA/PSAvdXNyCisrZXhlY19wcmVmaXggPz0gJHtwcmVmaXh9CisrCisrYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L2JpbgorK3NiaW5kaXIgPz0gJHtleGVjX3ByZWZpeH0vc2JpbgorK2xpYmV4ZWNkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliZXhlYworK2RhdGFkaXIgPz0gJHtwcmVmaXh9L3NoYXJlCisrc3lzY29uZmRpciA/PSAke3ByZWZpeH0vZXRjCisrc2hhcmVkc3RhdGVkaXIgPz0gJHtwcmVmaXh9L2NvbQorK2xvY2Fsc3RhdGVkaXIgPz0gJHtwcmVmaXh9L3ZhcgorK2xpYmRpciA/PSAke2V4ZWNfcHJlZml4fS9saWIKKytpbmZvZGlyID89ICR7cHJlZml4fS9pbmZvCisgZG9jZGlyID0gCistaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCisraW5jbHVkZWRpciA/PSAke3ByZWZpeH0vaW5jbHVkZQorIG9sZGluY2x1ZGVkaXIgPSAvdXNyL2luY2x1ZGUKKy1tYW5kaXIgPSAke3ByZWZpeH0vbWFuCisrbWFuZGlyID89ICR7cHJlZml4fS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKK0BAIC00MCw4ICs0MCwxMSBAQCBhbGw6ICQoc3JjZGlyKS8kKFBBQ0tBR0UpCisgCisgCisgaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzCistCSQoSU5TVEFMTF9CSU4pICQoc3JjZGlyKS8kKFBBQ0tBR0UpICQoREVTVERJUikkKGJpbmRpcikvJChQQUNLQUdFKQorLQkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvbW9kaWZ5cmVwbyAkKERFU1RESVIpJChiaW5kaXIpL21vZGlmeXJlcG8KKysJc2VkIC1lICJzfEBEQVRBRElSQHwkKGRhdGFkaXIpfCIgJChzcmNkaXIpLyQoUEFDS0FHRSkgPiAkKHNyY2RpcikvJChQQUNLQUdFKS50bXAKKysJc2VkIC1lICJzfEBEQVRBRElSQHwkKGRhdGFkaXIpfCIgJChzcmNkaXIpL21vZGlmeXJlcG8gPiAkKHNyY2RpcikvbW9kaWZ5cmVwby50bXAKKysJJChJTlNUQUxMX0JJTikgJChzcmNkaXIpLyQoUEFDS0FHRSkudG1wICQoREVTVERJUikkKGJpbmRpcikvJChQQUNLQUdFKQorKwkkKElOU1RBTExfQklOKSAkKHNyY2RpcikvbW9kaWZ5cmVwby50bXAgJChERVNURElSKSQoYmluZGlyKS9tb2RpZnlyZXBvCisrCXJtIC1mICQoc3JjZGlyKS8kKFBBQ0tBR0UpLnRtcCAkKHNyY2RpcikvbW9kaWZ5cmVwby50bXAKKyAKKyAKKyB1bmluc3RhbGw6CitkaWZmIC0tZ2l0IGEvYmluL2NyZWF0ZXJlcG8gYi9iaW4vY3JlYXRlcmVwbworaW5kZXggYjBkZTUxNS4uZWFhY2IzOSAxMDA3NTUKKy0tLSBhL2Jpbi9jcmVhdGVyZXBvCisrKysgYi9iaW4vY3JlYXRlcmVwbworQEAgLTEsMiArMSwyIEBACisgIyEvYmluL3NoCistZXhlYyAvdXNyL3NoYXJlL2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgIiRAIgorK2V4ZWMgQERBVEFESVJAL2NyZWF0ZXJlcG8vZ2VucGtnbWV0YWRhdGEucHkgIiRAIgorZGlmZiAtLWdpdCBhL2Jpbi9tb2RpZnlyZXBvIGIvYmluL21vZGlmeXJlcG8KK2luZGV4IGM5NzMyZDguLjZmN2MxZDQgMTAwNzU1CistLS0gYS9iaW4vbW9kaWZ5cmVwbworKysrIGIvYmluL21vZGlmeXJlcG8KK0BAIC0xLDIgKzEsMiBAQAorICMhL2Jpbi9zaAorLWV4ZWMgL3Vzci9zaGFyZS9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgIiRAIgorK2V4ZWMgQERBVEFESVJAL2NyZWF0ZXJlcG8vbW9kaWZ5cmVwby5weSAiJEAiCitkaWZmIC0tZ2l0IGEvZG9jcy9NYWtlZmlsZSBiL2RvY3MvTWFrZWZpbGUKK2luZGV4IDBhNDExNzkuLmUxMjhjODUgMTAwNjQ0CistLS0gYS9kb2NzL01ha2VmaWxlCisrKysgYi9kb2NzL01ha2VmaWxlCitAQCAtMSwyMiArMSwyMiBAQAorIFNIRUxMID0gL2Jpbi9zaAorIHRvcF9zcmNkaXIgPSAuLgorIHNyY2RpciA9IC4uL2RvY3MKKy1wcmVmaXggPSAvdXNyCistZXhlY19wcmVmaXggPSAke3ByZWZpeH0KKy0KKy1iaW5kaXIgPSAke2V4ZWNfcHJlZml4fS9iaW4KKy1zYmluZGlyID0gJHtleGVjX3ByZWZpeH0vc2JpbgorLWxpYmV4ZWNkaXIgPSAke2V4ZWNfcHJlZml4fS9saWJleGVjCistZGF0YWRpciA9ICR7cHJlZml4fS9zaGFyZQorLXN5c2NvbmZkaXIgPSAke3ByZWZpeH0vZXRjCistc2hhcmVkc3RhdGVkaXIgPSAke3ByZWZpeH0vY29tCistbG9jYWxzdGF0ZWRpciA9ICR7cHJlZml4fS92YXIKKy1saWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKKy1pbmZvZGlyID0gJHtwcmVmaXh9L2luZm8KKytwcmVmaXggPz0gL3VzcgorK2V4ZWNfcHJlZml4ID89ICR7cHJlZml4fQorKworK2JpbmRpciA/PSAke2V4ZWNfcHJlZml4fS9iaW4KKytzYmluZGlyID89ICR7ZXhlY19wcmVmaXh9L3NiaW4KKytsaWJleGVjZGlyID89ICR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMKKytkYXRhZGlyID89ICR7cHJlZml4fS9zaGFyZQorK3N5c2NvbmZkaXIgPz0gJHtwcmVmaXh9L2V0YworK3NoYXJlZHN0YXRlZGlyID89ICR7cHJlZml4fS9jb20KKytsb2NhbHN0YXRlZGlyID89ICR7cHJlZml4fS92YXIKKytsaWJkaXIgPz0gJHtleGVjX3ByZWZpeH0vbGliCisraW5mb2RpciA/PSAke3ByZWZpeH0vaW5mbworIGRvY2RpciA9IAorLWluY2x1ZGVkaXIgPSAke3ByZWZpeH0vaW5jbHVkZQorK2luY2x1ZGVkaXIgPz0gJHtwcmVmaXh9L2luY2x1ZGUKKyBvbGRpbmNsdWRlZGlyID0gL3Vzci9pbmNsdWRlCistbWFuZGlyID0gJHtkYXRhZGlyfS9tYW4KKyttYW5kaXIgPz0gJHtkYXRhZGlyfS9tYW4KKyAKKyBwa2dkYXRhZGlyID0gJChkYXRhZGlyKS8kKFBBQ0tBR0UpCisgcGtnbGliZGlyID0gJChsaWJkaXIpLyQoUEFDS0FHRSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3B5dGhvbi1zY3JpcHRzLXNob3VsZC11c2UtaW50ZXJwcmV0ZXItZnJvbS1lbnYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAyMDVhMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0F1dGhvcjogQW5kcmVpIEdoZXJ6YW4gPGFuZHJlaUBnaGVyemFuLnJvPgorCitQeXRob24gaW50ZXJwcmV0ZXIgc2hvdWxkIGJlIHVzZSBmcm9tIFBBVEggLSBuYXRpdmUgcHl0aG9uIC0gYW5kIG5vdCB0aGUgb25lIGZyb20KK2hvc3QuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9nZW5wa2dtZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE0OjA1LjI3ODY0OTM4NCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2dlbnBrZ21ldGFkYXRhLnB5CTIwMTItMDQtMTAgMTc6MTQ6MjIuMjkwNjQ4ODg2ICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL3B5dGhvbiAtdAorKyMhIC91c3IvYmluL2VudiBweXRob24KKyAjIHByaW1hcnkgZnVuY3Rpb25zIGFuZCBnbHVlIGZvciBnZW5lcmF0aW5nIHRoZSByZXBvc2l0b3J5IG1ldGFkYXRhCisgIworIAorSW5kZXg6IGNyZWF0ZXJlcG8tMC40LjExL21vZGlmeXJlcG8ucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL21vZGlmeXJlcG8ucHkJMjAxMi0wNC0xMCAxNzoxNDowOS4xMDY2NDkyNzIgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9tb2RpZnlyZXBvLnB5CTIwMTItMDQtMTAgMTc6MTQ6MjcuODE4NjQ4NzI1ICswMzAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvYmluL2VudiBweXRob24KKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyAkSWQkCisgIworICMgVGhpcyB0b29scyBpcyB1c2VkIHRvIGluc2VydCBhcmJpdHJhcnkgbWV0YWRhdGEgaW50byBhbiBSUE0gcmVwb3NpdG9yeS4KK0luZGV4OiBjcmVhdGVyZXBvLTAuNC4xMS9kdW1wTWV0YWRhdGEucHkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBjcmVhdGVyZXBvLTAuNC4xMS5vcmlnL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE5OjIzLjg3NDY0MDA2OCArMDMwMAorKysrIGNyZWF0ZXJlcG8tMC40LjExL2R1bXBNZXRhZGF0YS5weQkyMDEyLTA0LTEwIDE3OjE5OjM0LjUwMjYzOTc1NiArMDMwMAorQEAgLTEsNCArMSw0IEBACistIyEvdXNyL2Jpbi9weXRob24gLXQKKysjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisgIyBiYXNlIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBmb3IgZHVtcGluZyBvdXQgcGFja2FnZSBNZXRhZGF0YQorICMKKyAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitJbmRleDogY3JlYXRlcmVwby0wLjQuMTEvcmVhZE1ldGFkYXRhLnB5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gY3JlYXRlcmVwby0wLjQuMTEub3JpZy9yZWFkTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOToxOS42MjY2NDAxOTMgKzAzMDAKKysrKyBjcmVhdGVyZXBvLTAuNC4xMS9yZWFkTWV0YWRhdGEucHkJMjAxMi0wNC0xMCAxNzoxOTo0MC4xOTg2Mzk1OTAgKzAzMDAKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9iaW4vcHl0aG9uIC10CisrIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIAorICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9yZWNvbW1lbmRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNWRlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG8vcmVjb21tZW5kcy5wYXRjaApAQCAtMCwwICsxLDcxIEBACitjcmVhdGVyZXBvOiBpbXBsZW1lbnQgcmVjb21tZW5kcyBzdXBwb3J0CisKK1JlY29yZCBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIHJlcXVpcmVzIGVudHJ5IGluIHRoZSBvdXRwdXQgbWV0YWRhdGEKK2lmIGEgZGVwZW5kZW5jeSByZWxhdGlvbnNoaXAgaXMgbWFya2VkIHdpdGggdGhlIFJQTVNFTlNFX01JU1NJTkdPSyBmbGFnCisoaW5kaWNhdGluZyBpdCBpcyBhIHJlY29tbWVuZGF0aW9uLCByYXRoZXIgdGhhbiBhIGhhcmQgZGVwZW5kZW5jeSkuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBQYXVsIEVnZ2xldG9uIDxwYXVsLmVnZ2xldG9uQGxpbnV4LmludGVsLmNvbT4KKworZGlmZiAtLWdpdCBhL2R1bXBNZXRhZGF0YS5weSBiL2R1bXBNZXRhZGF0YS5weQoraW5kZXggNzBiYjJkOC4uZTQwZThhYyAxMDA2NDQKKy0tLSBhL2R1bXBNZXRhZGF0YS5weQorKysrIGIvZHVtcE1ldGFkYXRhLnB5CitAQCAtMzE5LDYgKzMxOSwyMyBAQCBjbGFzcyBScG1NZXRhRGF0YToKKyAgICAgICAgICAgICAgICAgICAgIHJlcXMuYXBwZW5kKDApCisgICAgICAgICByZXR1cm4gcmVxcworIAorKyAgICBkZWYgX2NoZWNrTWlzc2luZ09rKHNlbGYsIGZsYWdzKToKKysgICAgICAgIHJlcXM9W10KKysgICAgICAgIGlmIGZsYWdzIGlzIE5vbmU6CisrICAgICAgICAgICAgcmV0dXJuIHJlcXMKKysKKysgICAgICAgIGlmIHR5cGUoZmxhZ3MpIGlzIG5vdCB0eXBlcy5MaXN0VHlwZToKKysgICAgICAgICAgICBmbGFncyA9IFtmbGFnc10KKysgICAgICAgIGZvciBmbGFnIGluIGZsYWdzOgorKyAgICAgICAgICAgIG5ld2ZsYWcgPSBmbGFnCisrICAgICAgICAgICAgaWYgZmxhZyBpcyBub3QgTm9uZToKKysgICAgICAgICAgICAgICAgbmV3ZmxhZyA9IGZsYWcgJiBycG0uUlBNU0VOU0VfTUlTU0lOR09LCisrICAgICAgICAgICAgICAgIGlmIG5ld2ZsYWc6CisrICAgICAgICAgICAgICAgICAgICByZXFzLmFwcGVuZCgxKQorKyAgICAgICAgICAgICAgICBlbHNlOgorKyAgICAgICAgICAgICAgICAgICAgcmVxcy5hcHBlbmQoMCkKKysgICAgICAgIHJldHVybiByZXFzCisrCisgCisgICAgIGRlZiBfY29ycmVjdFZlcnNpb24oc2VsZiwgdmVycyk6CisgICAgICAgICByZXR1cm52ZXJzID0gW10KK0BAIC01MzcsOSArNTU0LDEwIEBAIGNsYXNzIFJwbU1ldGFEYXRhOgorICAgICAgICAgdG1wZmxhZ3MgPSBzZWxmLmhkcltycG0uUlBNVEFHX1JFUVVJUkVGTEFHU10KKyAgICAgICAgIGZsYWdzID0gc2VsZi5fY29ycmVjdEZsYWdzKHRtcGZsYWdzKQorICAgICAgICAgcHJlcmVxID0gc2VsZi5fY2hlY2tQcmVSZXEodG1wZmxhZ3MpCisrICAgICAgICBtaXNzaW5nb2sgPSBzZWxmLl9jaGVja01pc3NpbmdPayh0bXBmbGFncykKKyAgICAgICAgIHZlciA9IHNlbGYuX2NvcnJlY3RWZXJzaW9uKHNlbGYuaGRyW3JwbS5SUE1UQUdfUkVRVUlSRVZFUlNJT05dKQorICAgICAgICAgaWYgbmFtZXMgaXMgbm90IE5vbmU6CistICAgICAgICAgICAgbHN0ID0gemlwKG5hbWVzLCBmbGFncywgdmVyLCBwcmVyZXEpCisrICAgICAgICAgICAgbHN0ID0gemlwKG5hbWVzLCBmbGFncywgdmVyLCBwcmVyZXEsIG1pc3NpbmdvaykKKyAgICAgICAgIHJldHVybiBzZWxmLl91bmlxKGxzdCkKKyAgICAgICAgIAorICAgICBkZWYgb2Jzb2xldGVzTGlzdChzZWxmKToKK0BAIC02OTIsNyArNzEwLDcgQEAgZGVmIGdlbmVyYXRlWE1MKGRvYywgbm9kZSwgZm9ybWF0bnMsIHJwbU9iaiwgc3VtdHlwZSk6CisgICAgIGRlcHNMaXN0ID0gcnBtT2JqLmRlcHNMaXN0KCkKKyAgICAgaWYgbGVuKGRlcHNMaXN0KSA+IDA6CisgICAgICAgICBycGNvbm9kZSA9IGZvcm1hdC5uZXdDaGlsZChmb3JtYXRucywgJ3JlcXVpcmVzJywgTm9uZSkgICAgCistICAgICAgICBmb3IgKG5hbWUsIGZsYWdzLCAoZSx2LHIpLCBwcmVyZXEpIGluIGRlcHNMaXN0OgorKyAgICAgICAgZm9yIChuYW1lLCBmbGFncywgKGUsdixyKSwgcHJlcmVxLCBtaXNzaW5nb2spIGluIGRlcHNMaXN0OgorICAgICAgICAgICAgIGVudHJ5ID0gcnBjb25vZGUubmV3Q2hpbGQoZm9ybWF0bnMsICdlbnRyeScsIE5vbmUpCisgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgnbmFtZScsIG5hbWUpCisgICAgICAgICAgICAgaWYgZmxhZ3MgIT0gMDoKK0BAIC03MTEsNiArNzI5LDggQEAgZGVmIGdlbmVyYXRlWE1MKGRvYywgbm9kZSwgZm9ybWF0bnMsIHJwbU9iaiwgc3VtdHlwZSk6CisgICAgICAgICAgICAgICAgICAgICBlbnRyeS5uZXdQcm9wKCdyZWwnLCBzdHIocikpCisgICAgICAgICAgICAgaWYgcHJlcmVxID09IDE6CisgICAgICAgICAgICAgICAgIGVudHJ5Lm5ld1Byb3AoJ3ByZScsIHN0cihwcmVyZXEpKQorKyAgICAgICAgICAgIGlmIG1pc3NpbmdvazoKKysgICAgICAgICAgICAgICAgZW50cnkubmV3UHJvcCgnbWlzc2luZ29rJywgJzEnKQorICAgICAgICAgCisgICAgIGZvciBmaWxlIGluIHJwbU9iai51c2VmdWxGaWxlcygpOgorICAgICAgICAgZmlsZXMgPSBmb3JtYXQubmV3Q2hpbGQoTm9uZSwgJ2ZpbGUnLCBOb25lKQorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weSBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwby9ycG0tY3JlYXRlc29sdmVkYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWI2MWJhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3JlYXRlcmVwby9jcmVhdGVyZXBvL3JwbS1jcmVhdGVzb2x2ZWRiLnB5CkBAIC0wLDAgKzEsNjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgYSBzb2x1dGlvbiBkYXRhYmFzZSBmb3IgYSBkaXJlY3RvcnkgY29udGFpbmluZyBycG0gcGFja2FnZXMKKyMgYnV0IHRyaWVzIHRvIGJlIGVmZmljaWVudCBhYm91dCB0aGlzLCBvbmx5IGRvaW5nIHNvIHdoZW4gdGhlIHBhY2thZ2VzIGhhdmUgY2hhbmdlZAorIyBpbiBzb21lIHdheS4KKyMKKyMgSXQgaXMgYXNzdW1lZCBzb21ldGhpbmcgYWxyZWFkeSB3ZW50IHRocm91Z2ggYW5kIHJlbW92ZWQgYWxsIHRoZSBzb2x2ZWRiLmRvbmUgc3RhbXAgZmlsZXMKKyMgaW4gYWR2YW5jZS4KKyMKKyMgRmlyc3QgYXJndW1lbnQgLSB0aGUgcnBtIGJpbmFyeSB0byB1c2UKKyMgU3Vic2VxdWVudCBhcmd1bWVudHMgLSBwYXRocyB0byBwcm9jZXNzIHNvbHV0aW9uIGRhdGFiYXNlcyBmb3IKKyMKKworaW1wb3J0IHN5cywgb3MKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgc3RhdAoraW1wb3J0IHN1YnByb2Nlc3MKKworaWYgbGVuKHN5cy5hcmd2KSA8IDE6CisgICAgcHJpbnQoIkVycm9yLCBycG0gY29tbWFuZCBub3Qgc3BlY2lmaWVkIikKKyAgICBzeXMuZXhpdCgxKQorCitpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKKyAgICBwcmludCgiRXJyb3IsIG5vIHBhdGhzIHNwZWNpZmllZCIpCisgICAgc3lzLmV4aXQoMSkKKworcGF0aHMgPSBzeXMuYXJndlsyOl0KKworZm9yIHBhdGggaW4gcGF0aHM6CisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCArICIvc29sdmVkYi5kb25lIik6CisgICAgICAgIGNvbnRpbnVlCisgICAgZGF0YSA9ICIiCisgICAgbWFuaWZlc3QgPSBbXQorICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgpOgorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocm9vdCwgZmlsZSkKKyAgICAgICAgICAgIGlmIGYuc3RhcnRzd2l0aChwYXRoICsgIi8iICsgInNvbHZlZGIiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyBzdHIob3Muc3RhdChmKVtzdGF0LlNUX01USU1FXSkKKyAgICAgICAgICAgIG1hbmlmZXN0LmFwcGVuZChmKQorICAgIGNoZWNrc3VtID0gaGFzaGxpYi5tZDUoZGF0YSkuaGV4ZGlnZXN0KCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL3NvbHZlZGIuY2hlY2tzdW0iKSBhbmQgb3BlbihwYXRoICsgIi9zb2x2ZWRiLmNoZWNrc3VtIiwgInIiKS5yZWFkKCkgPT0gY2hlY2tzdW06CisgICAgICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5kb25lIiwgInciKQorICAgICAgICBjb250aW51ZQorCisgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCArICIvc29sdmVkYiIpOgorICAgICAgICBzdWJwcm9jZXNzLmNhbGwoInJtIC1yZiAlcyIgJSAocGF0aCArICIvc29sdmVkYiIpLCBzaGVsbD1UcnVlKQorICAgIG9zLm1rZGlyKHBhdGggKyAiL3NvbHZlZGIiKQorICAgIG0gPSBvcGVuKHBhdGggKyAiL3NvbHZlZGIvbWFuaWZlc3QiLCAidyIpCisgICAgbS53cml0ZSgiIyBEeW5hbWljYWxseSBnZW5lcmF0ZWQgc29sdmUgbWFuaWZlc3RcbiIpCisgICAgZm9yIGYgaW4gbWFuaWZlc3Q6CisgICAgICAgIG0ud3JpdGUoZiArICJcbiIpCisgICAgbS5jbG9zZSgpCisKKyAgICBjbWQgPSBzeXMuYXJndlsxXSArICcgLWkgLS1yZXBsYWNlcGtncyAtLXJlcGxhY2VmaWxlcyAtLW9sZHBhY2thZ2UgLUQgIl9kYnBhdGggJyArIHBhdGggKyAnL3NvbHZlZGIiIC0tanVzdGRiIFwKKwkJCS0tbm9haWQgLS1ub2RlcHMgLS1ub29yZGVyIC0tbm9zY3JpcHRzIC0tbm90cmlnZ2VycyAtLW5vcGFyZW50ZGlycyAtLW5vbGlua3RvcyAtLXN0YXRzIFwKKwkJCS0taWdub3Jlc2l6ZSAtLW5vc2lnbmF0dXJlIC0tbm9kaWdlc3QgLUQgIl9fZGJpX3R4biBjcmVhdGUgbm9mc3luYyIgXAorCQkJJyArIHBhdGggKyAnL3NvbHZlZGIvbWFuaWZlc3QnCisgICAgc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9VHJ1ZSkKKworICAgIG9wZW4ocGF0aCArICIvc29sdmVkYi5jaGVja3N1bSIsICJ3Iikud3JpdGUoY2hlY2tzdW0pCisgICAgb3BlbihwYXRoICsgIi9zb2x2ZWRiLmRvbmUiLCAidyIpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2NyZWF0ZXJlcG8vY3JlYXRlcmVwb18wLjQuMTEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOWVjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jcmVhdGVyZXBvL2NyZWF0ZXJlcG9fMC40LjExLmJiCkBAIC0wLDAgKzEsNTAgQEAKK1NVTU1BUlkgPSAiQ3JlYXRlcyBtZXRhZGF0YSBpbmRleGVzIGZvciBSUE0gcGFja2FnZSByZXBvc2l0b3JpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vY3JlYXRlcmVwby5iYXNldXJsLm9yZy8iCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlZlcnNpb25zIGFmdGVyIDAuOS4qIHVzZSBZVU0sIHNvIHdlIGhvbGQgYXQgMC40LjExIgorCitMSUNFTlNFID0gIkdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTE4ODEwNjY5ZjEzYjg3MzQ4NDU5ZTYxMWQzMWFiNzYwIgorCitERVBFTkRTX2NsYXNzLW5hdGl2ZSArPSAibGlieG1sMi1uYXRpdmUgcnBtLW5hdGl2ZSIKK1JERVBFTkRTXyR7UE59X2NsYXNzLXRhcmdldCA9ICJsaWJ4bWwyLXB5dGhvbiIKKworUFIgPSAicjkiCisKK1NSQ19VUkkgPSAiaHR0cDovL2NyZWF0ZXJlcG8uYmFzZXVybC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1uYXRpdmUtaW5zdGFsbC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24tc2NyaXB0cy1zaG91bGQtdXNlLWludGVycHJldGVyLWZyb20tZW52LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NyZWF0ZXJlcG8tcnBtNTQ5LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3JlY29tbWVuZHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vY3JlYXRlcmVwby1kYnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZHVtcE1ldGFkYXRhLWRpc2FibGUtc2lnbmF0dXJlLXZhbGlkYXRpb24ucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vcnBtLWNyZWF0ZXNvbHZlZGIucHkgXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZTljY2Y0YWJjZmZlM2Y0OWFmMDc4YzgzNjExZWRhMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNzNhZTExYTBkY2RlOGJkZTM2ZDkwMGJjM2Y3ZjhmMTA4M2JhNzUyYzcwYTVjNjFiNzJkMWUxZTc2MDhmMjFiIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9faW5zdGFsbCAoKSB7CisJb2VfcnVubWFrZSAtZSAnREVTVERJUj0ke0R9JyBpbnN0YWxsCisJaW5zdGFsbCAtbSAwNzU1ICR7V09SS0RJUn0vcnBtLWNyZWF0ZXNvbHZlZGIucHkgJHtEfSR7YmluZGlyfS8KK30KKworIyBXcmFwIHRoZSBweXRob24gc2NyaXB0IHNpbmNlIHRoZSBuYXRpdmUgcHl0aG9uIGlzCisjICR7YmluZGlyfS9weXRob24tbmF0aXZlL3B5dGhvbiwgYW5kIHRoZSAiIyEgL3Vzci9iaW4vZW52IHB5dGhvbiIgY2FuJ3QKKyMgZmluZCBpdCBzaW5jZSBpdCBpcyBub3QgaW4gUEFUSC4KK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLW5hdGl2ZSAoKSB7CisJIyBOb3QgYWxsIHRoZSBweXRob24gc2NyaXB0cyBzaG91bGQgYmUgd3JhcHBlZCBzaW5jZSBzb21lIG9mCisJIyB0aGVtIGFyZSBtb2R1bGVzIChiZSBpbXBvcnRlZCkuCisJZm9yIGkgaW4gJHtEfSR7ZGF0YWRpcn0vY3JlYXRlcmVwby9nZW5wa2dtZXRhZGF0YS5weSBcCisJCSAke0R9JHtkYXRhZGlyfS9jcmVhdGVyZXBvL21vZGlmeXJlcG8ucHkgXAorCQkgJHtEfSR7YmluZGlyfS9ycG0tY3JlYXRlc29sdmVkYi5weSA7IGRvCisJCXNlZCAtaSAtZSAnc3xeIyEuKi91c3IvYmluL2VudiBweXRob258IyEgL3Vzci9iaW4vZW52IG5hdGl2ZXB5dGhvbnwnICRpCisJZG9uZQorCisJY3JlYXRlX3dyYXBwZXIgJHtEfS8ke2JpbmRpcn0vY3JlYXRlcmVwbyBcCisJCQlSUE1fVVNSTElCUlBNPSR7U1RBR0lOR19MSUJESVJfTkFUSVZFfS9ycG0gXAorCQkJUlBNX0VUQ1JQTT0ke1NUQUdJTkdfRVRDRElSX05BVElWRX0vcnBtIFwKKwkJCVJQTV9MT0NBTEVESVJSUE09JHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS9sb2NhbGUKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybC9jb25maWd1cmVfYWMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YmQzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvY29uZmlndXJlX2FjLnBhdGNoCkBAIC0wLDAgKzEsMTMgQEAKK1Vwc3RyZWFtLVN0YXR1czogIFBlbmRpbmcKKworLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yODEsNyArMjgxLDcgQEAgZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIAorIENVUkxfQ0hFQ0tfQ09NUElMRVIKKyBDVVJMX1NFVF9DT01QSUxFUl9CQVNJQ19PUFRTCistQ1VSTF9TRVRfQ09NUElMRVJfREVCVUdfT1BUUworK2RubCBDVVJMX1NFVF9DT01QSUxFUl9ERUJVR19PUFRTCisgQ1VSTF9TRVRfQ09NUElMRVJfT1BUSU1JWkVfT1BUUworIENVUkxfU0VUX0NPTVBJTEVSX1dBUk5JTkdfT1BUUworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmwvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDg3NjlkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvY3VybC9jdXJsL3BrZ2NvbmZpZ19maXgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtwYWNrYWdpbmddCisKK2RpZmYgLU51cmQgY3VybC03LjI5LjAvY29uZmlndXJlLmFjIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYworLS0tIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTA2IDExOjQ3OjE5LjAwMDAwMDAwMCArMDIwMAorKysrIGN1cmwtNy4yOS4wL2NvbmZpZ3VyZS5hYwkyMDEzLTAyLTE2IDEyOjMyOjIyLjEzMjMyNzc2NCArMDIwMAorQEAgLTE4ODMsNiArMTg4Myw3IEBACisgICAgICAgIEFDX1NVQlNUKFVTRV9HTlVUTFMsIFsxXSkKKyAgICAgICAgR05VVExTX0VOQUJMRUQ9MQorICAgICAgICBVU0VfR05VVExTPSJ5ZXMiCisrICAgICAgIEdOVVRMU19SRVFVSVJFRD0iZ251dGxzIgorICAgICAgICBjdXJsX3NzbF9tc2c9ImVuYWJsZWQgKEdudVRMUykiCisgICAgICAgIF0sCisgICAgICAgIFsKK0BAIC0xOTUzLDYgKzE5NTQsOCBAQAorICAgIF0pCisgZmkKKyAKKytBQ19TVUJTVChHTlVUTFNfUkVRVUlSRUQpCisrCisgZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbmwgY2hlY2sgZm9yIFBvbGFyU1NMCisgZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RpZmYgLU51cmQgY3VybC03LjI5LjAvbGliY3VybC5wYy5pbiBjdXJsLTcuMjkuMC9saWJjdXJsLnBjLmluCistLS0gY3VybC03LjI5LjAvbGliY3VybC5wYy5pbgkyMDEyLTEyLTEyIDAwOjMyOjIyLjAwMDAwMDAwMCArMDIwMAorKysrIGN1cmwtNy4yOS4wL2xpYmN1cmwucGMuaW4JMjAxMy0wMi0xNiAxMjozMzoyNy4wNjM4NDQzMzcgKzAyMDAKK0BAIC0zNSw1ICszNSw1IEBACisgRGVzY3JpcHRpb246IExpYnJhcnkgdG8gdHJhbnNmZXIgZmlsZXMgd2l0aCBmdHAsIGh0dHAsIGV0Yy4KKyBWZXJzaW9uOiBAQ1VSTFZFUlNJT05ACisgTGliczogLUwke2xpYmRpcn0gLWxjdXJsCistTGlicy5wcml2YXRlOiBATElCQ1VSTF9MSUJTQAorK0xpYnMucHJpdmF0ZTogLWxkbCAtbHoKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQ1BQRkxBR19DVVJMX1NUQVRJQ0xJQkAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2N1cmwvY3VybF83LjQ0LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTMzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9jdXJsL2N1cmxfNy40NC4wLmJiCkBAIC0wLDAgKzEsNTMgQEAKK1NVTU1BUlkgPSAiQ29tbWFuZCBsaW5lIHRvb2wgYW5kIGxpYnJhcnkgZm9yIGNsaWVudC1zaWRlIFVSTCB0cmFuc2ZlcnMiCitIT01FUEFHRSA9ICJodHRwOi8vY3VybC5oYXh4LnNlLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpc3QuY2dpP2xpc3Q9Y3VybC10cmFja2VyIgorU0VDVElPTiA9ICJjb25zb2xlL25ldHdvcmsiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7YmVnaW5saW5lPTc7bWQ1PTNhMzQ5NDJmNGFlM2ZiZjFhMzAzMTYwNzE0ZTY2NGFjIgorCitTUkNfVVJJID0gImh0dHA6Ly9jdXJsLmhheHguc2UvZG93bmxvYWQvY3VybC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZ19maXgucGF0Y2ggXAorICAgICAgICAgICIKKworIyBjdXJsIGxpa2VzIHRvIHNldCAtZzAgaW4gQ0ZMQUdTLCBzbyB3ZSBzdG9wIGl0CisjIGZyb20gbXVja2luZyBhcm91bmQgd2l0aCBkZWJ1ZyBvcHRpb25zCisjCitTUkNfVVJJICs9ICIgZmlsZTovL2NvbmZpZ3VyZV9hYy5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjZiOTUyY2EwMGU1NDczYjE2YTExZjA1ZjA2YWE4ZGFlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFlMjU0MWJhZTY1ODJiYjY5N2MwZmJhZTQ5ZTFkM2U2ZmFkNWQwNWQ1YWE4MGRiZDZmMDcyZTBhNDQzNDE4MTQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWcgbXVsdGlsaWJfaGVhZGVyCisKK1BBQ0tBR0VDT05GSUcgPz89ICIke0BiYi51dGlscy5jb250YWlucygiRElTVFJPX0ZFQVRVUkVTIiwgImlwdjYiLCAiaXB2NiIsICIiLCBkKX0gZ251dGxzIHpsaWIiCitQQUNLQUdFQ09ORklHX2NsYXNzLW5hdGl2ZSA9ICJpcHY2IHNzbCB6bGliIgorUEFDS0FHRUNPTkZJR19jbGFzcy1uYXRpdmVzZGsgPSAiaXB2NiBzc2wgemxpYiIKKworUEFDS0FHRUNPTkZJR1tpcHY2XSA9ICItLWVuYWJsZS1pcHY2LC0tZGlzYWJsZS1pcHY2LCIKK1BBQ0tBR0VDT05GSUdbc3NsXSA9ICItLXdpdGgtc3NsIC0td2l0aC1yYW5kb209L2Rldi91cmFuZG9tLC0td2l0aG91dC1zc2wsb3BlbnNzbCIKK1BBQ0tBR0VDT05GSUdbZ251dGxzXSA9ICItLXdpdGgtZ251dGxzLC0td2l0aG91dC1nbnV0bHMsZ251dGxzIgorUEFDS0FHRUNPTkZJR1t6bGliXSA9ICItLXdpdGgtemxpYj0ke1NUQUdJTkdfTElCRElSfS8uLi8sLS13aXRob3V0LXpsaWIsemxpYiIKK1BBQ0tBR0VDT05GSUdbcnRtcGR1bXBdID0gIi0td2l0aC1saWJydG1wLC0td2l0aG91dC1saWJydG1wLHJ0bXBkdW1wIgorUEFDS0FHRUNPTkZJR1tsaWJzc2gyXSA9ICItLXdpdGgtbGlic3NoMiwtLXdpdGhvdXQtbGlic3NoMixsaWJzc2gyIgorUEFDS0FHRUNPTkZJR1tzbWJdID0gIi0tZW5hYmxlLXNtYiwtLWRpc2FibGUtc21iLCIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aG91dC1saWJpZG4gXAorICAgICAgICAgICAgICAgIC0tZW5hYmxlLWNyeXB0by1hdXRoIFwKKyAgICAgICAgICAgICAgICAtLWRpc2FibGUtbGRhcCBcCisgICAgICAgICAgICAgICAgLS1kaXNhYmxlLWxkYXBzIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtY2EtYnVuZGxlPSR7c3lzY29uZmRpcn0vc3NsL2NlcnRzL2NhLWNlcnRpZmljYXRlcy5jcnQgXAorIgorIyBzZWUgaHR0cHM6Ly9saXN0cy55b2N0b3Byb2plY3Qub3JnL3BpcGVybWFpbC9wb2t5LzIwMTMtRGVjZW1iZXIvMDA5NDM1Lmh0bWwKKyMgV2Ugc2hvdWxkIGlkZWFsbHkgZHJvcCBhY19jdl9zaXplb2Zfb2ZmX3QgZnJvbSBzaXRlIGZpbGVzIGJ1dCB1bnRpbCB0aGVuCitFWFRSQV9PRUNPTkYgKz0gIiR7QGJiLnV0aWxzLmNvbnRhaW5zKCdESVNUUk9fRkVBVFVSRVMnLCAnbGFyZ2VmaWxlJywgJ2FjX2N2X3NpemVvZl9vZmZfdD04JywgJycsIGQpfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJb2VfbXVsdGlsaWJfaGVhZGVyIGN1cmwvY3VybGJ1aWxkLmgKK30KKworUEFDS0FHRVMgPSsgImxpYiR7QlBOfSIKKworRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS9saWIqLnNvLioiCitSUkVDT01NRU5EU19saWIke0JQTn0gKz0gImNhLWNlcnRpZmljYXRlcyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvTWFrZWZpbGUtbGV0LWxpYnNvX3RhcmdldC1kZXBlbmQtb24tYnRfcmVjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOWJmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSBjNjQwZmY5MzQwZjM1OGEwMDgzNTgxNmQwZmVhMDNkMjdhN2JlOTc4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBUdWUsIDMxIE1hciAyMDE1IDAwOjU2OjQ0IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIE1ha2VmaWxlOiBsZXQgbGlic29fdGFyZ2V0IGRlcGVuZCBvbiBidF9yZWMKKworRml4ZWQgcGFyYWxsZWwgaXNzdWU6CitsaWJ0b29sOiBsaW5rOiBgYnRfcmVjLmxvJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdAorTWFrZWZpbGU6ODY3OiByZWNpcGUgZm9yIHRhcmdldCAnbGliZGItNi4wLmxhJyBmYWlsZWQKK21ha2U6ICoqKiBbbGliZGItNi4wLmxhXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgoraW5kZXggZTQ1MWY3MC4uMGE0MjM3NSAxMDA2NDQKKy0tLSBhL01ha2VmaWxlLmluCisrKysgYi9NYWtlZmlsZS5pbgorQEAgLTg2Myw3ICs4NjMsNyBAQCAkKGxpYmRiX3ZlcnNpb24pOiAkKENfT0JKUykKKyAJJChMTikgLXMgJChsaWJkYl92ZXJzaW9uKSAkKGxpYmRiKQorIAorICMgU2hhcmVkIEMgbGlicmFyeS4KKy0kKGxpYnNvX3RhcmdldCk6ICQoQ19PQkpTKQorKyQobGlic29fdGFyZ2V0KTogJChDX09CSlMpIGJ0X3JlY0BvQAorIAkkKFNPTElOSykgJChTT0ZMQUdTKSAkKExERkxBR1MpIC1vICRAICQoQ19PQkpTKSBcCisgCQkkKExJQkNTT19MSUJTKQorIAkkKFJNKSAkKGxpYmRiKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRlOGRiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiL2FybS10aHVtYi1tdXRleF9kYjUucGF0Y2gKQEAgLTAsMCArMSw0OCBAQAorT3JpZ2luYWwgcGF0Y2ggc3VibWl0dGVkIGJ5IGpib3dsZXJAbnNsdTItbGludXgub3JnIG9uIDIwMDUtMTEtMTc6CisKK2RiOiBmaXggdGh1bWIgdWNsaWJjIG9wZXJhdGlvbiBpbiA0LjMuMjkKKyAgLSB1Y2xpYmMgdGh1bWIgYnVpbGRzIHdlcmUgdXNpbmcgbGlicHRocmVhZCB0byBpbXBsZW1lbnQgbXV0ZXhlcywgdGhlCisgIC0gdWNsaWJjIHZlcnNpb24gc2VlbXMgdG8gYmUgYSBzdHViIChhdCBsZWFzdCBvbiB0aHVtYikuICBUaGlzIGNvbW1pdAorICAtIGZpeGVzIHRoZSBBUk0vZ2NjLWFzc2VtYmx5IG11dGV4IGltcGxlbWVudGF0aW9uIHNvIHRoYXQgaXQgaGFzIHRodW1iCisgIC0gc3VwcG9ydCBhbmQgdGhlIHJlc3VsdGFudCBkYjQgd29ya3MgKHRlc3RlZCBvbiBMRSBUaHVtYiB1Y2xpYmMpCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQgc3BlY2lmaWNdCisKK0F1dGhvcjogamJvd2xlckBuc2x1Mi1saW51eC5vcmcKKworLS0tIGRiLTUuMS4xOS9zcmMvZGJpbmMvbXV0ZXhfaW50Lmgub3JpZwkyMDExLTAxLTA1IDE5OjIxOjQyLjE4MTgwNTM2NiAtMDYwMAorKysrIGRiLTUuMS4xOS9zcmMvZGJpbmMvbXV0ZXhfaW50LmgJMjAxMS0wMS0wNSAxOToyNDo1My4xNDE4NTMxMTcgLTA2MDAKK0BAIC00NzQsNiArNDc0LDI1IEBACisgCisgI2lmZGVmIExPQURfQUNUVUFMX01VVEVYX0NPREUKKyAvKiBnY2MvYXJtOiAwIGlzIGNsZWFyLCAxIGlzIHNldC4gKi8KKysjaWYgZGVmaW5lZCBfX3RodW1iX18KKysjZGVmaW5lCU1VVEVYX1NFVCh0c2wpICh7CQkJCQkJXAorKwlpbnQgX19yLCBfX3A7CQkJCQkJCVwKKysJX19hc21fXyB2b2xhdGlsZSgJCQkJCQlcCisrCQkiLmFsaWduIDJcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJieCAgICAgcGNcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIm5vcFxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkiLmFybVxuXHQiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJzd3BiICAgJTAsICUyLCBbJTNdXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJImVvciAgICAlMCwgJTAsICMxXG5cdCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkib3JyICAgICUxLCBwYywgIzFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSJieCAgICAgJTFcblx0IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJIi5mb3JjZV90aHVtYiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgICA6ICI9JnIiIChfX3IpLCAiPXIiIChfX3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgICA6ICJyIiAoMSksICJyIiAodHNsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgICApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCV9fciAmIDE7CQkJCQkJCVwKKyt9KQorKyNlbHNlCisgI2RlZmluZQlNVVRFWF9TRVQodHNsKSAoewkJCQkJCVwKKyAJaW50IF9fcjsJCQkJCQkJXAorIAlfX2FzbV9fIHZvbGF0aWxlKAkJCQkJCVwKK0BAIC00ODQsNiArNTAzLDcgQEAKKyAJICAgICk7CQkJCQkJCQlcCisgCV9fciAmIDE7CQkJCQkJCVwKKyB9KQorKyNlbmRpZgorIAorICNkZWZpbmUJTVVURVhfVU5TRVQodHNsKQkoKih2b2xhdGlsZSB0c2xfdCAqKSh0c2wpID0gMCkKKyAjZGVmaW5lCU1VVEVYX0lOSVQodHNsKSAgICAgICAgIChNVVRFWF9VTlNFVCh0c2wpLCAwKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGIvZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjN2YxZTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYi9maXgtcGFyYWxsZWwtYnVpbGQucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorV2l0aCBoaWdoZXIgcGFyYWxlbGlzbSBpdCBzb21ldGltZXMgZmFpbHMgd2l0aDoKK2xpYnRvb2w6IGxpbms6IGB1dGlsX2xvZy5sbycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QKK21ha2U6ICoqKiBbZGJfcmVwbGljYXRlXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKKy0tLSBkaXN0Lm9yaWcvTWFrZWZpbGUuaW4JMjAxMi0wNS0xMSAxOTo1Nzo0OC4wMDAwMDAwMDAgKzAyMDAKKysrKyBkaXN0L01ha2VmaWxlLmluCTIwMTMtMTAtMzEgMTg6MTc6MTEuODc1NTMyNTIyICswMTAwCitAQCAtMTAzNCw3ICsxMDM0LDcgQEAKKyAJICAgIGRiX3JlY292ZXJAb0AgdXRpbF9zaWdAb0AgJChERUZfTElCKSAkKExJQlMpCisgCSQoUE9TVExJTkspICRACisgCistZGJfcmVwbGljYXRlOiBkYl9yZXBsaWNhdGVAb0AgdXRpbF9zaWdAb0AgJChERUZfTElCKQorK2RiX3JlcGxpY2F0ZTogZGJfcmVwbGljYXRlQG9AIHV0aWxfbG9nQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikKKyAJJChDQ0xJTkspIC1vICRAICQoTERGTEFHUykgXAorIAkgICAgZGJfcmVwbGljYXRlQG9AIHV0aWxfbG9nQG9AIHV0aWxfc2lnQG9AICQoREVGX0xJQikgJChMSUJTKQorIAkkKFBPU1RMSU5LKSAkQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGIvZGJfNS4zLjI4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjgxNGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl81LjMuMjguYmIKQEAgLTAsMCArMSwxMTYgQEAKKyMgVmVyc2lvbiA1IG9mIHRoZSBCZXJrZWxleSBEQiBmcm9tIFNsZWVweWNhdAorIworIyBBdCBwcmVzZW50IHRoaXMgcGFja2FnZSBvbmx5IGluc3RhbGxzIHRoZSBEQiBjb2RlCisjIGl0c2VsZiAoc2hhcmVkIGxpYnJhcmllcywgLmEgaW4gdGhlIGRldiBwYWNrYWdlKSwKKyMgZG9jdW1lbnRhdGlvbiBhbmQgaGVhZGVycy4KKyMKKyMgVGhlIGhlYWRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aG9zZSBhcyB2MworIyBvZiB0aGUgREIsIG9ubHkgb25lIHZlcnNpb24gY2FuIGJlIHVzZWQgKmZvciBkZXYqCisjIGF0IG9uY2UgLSBEQjMgYW5kIERCNSBjYW4gYm90aCBiZSBpbnN0YWxsZWQgb24gdGhlCisjIHNhbWUgc3lzdGVtIGF0IHRoZSBzYW1lIHRpbWUgaWYgcmVhbGx5IG5lY2Vzc2FyeS4KK1NFQ1RJT04gPSAibGlicyIKK1NVTU1BUlkgPSAiQmVya2VsZXkgRGF0YWJhc2UgdjUiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5vbG9neS9wcm9kdWN0cy9iZXJrZWxleS1kYi9kYi9pbmRleC5odG1sIgorTElDRU5TRSA9ICJTbGVlcHljYXQiCitWSVJUVUFMX05BTUUgPz0gInZpcnR1YWwvZGIiCitSQ09ORkxJQ1RTXyR7UE59ID0gImRiMyIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi0ke1BWfS50YXIuZ3oiCitTUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaDtwYXRjaGRpcj0uLiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjk5NDU0NTY0ZDViNDQ3OTc1MDU2NzAzMWQ2NmZlMjQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTBhOTkyZDc0MDcwOTg5MmU4MWY5ZDkzZjA2ZGFmMzA1Y2Y3M2ZiODFiNTQ1YWZlNzI0NzgwNDMxNzJjMzYyOCIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vLi4vTElDRU5TRTttZDU9ZWQxMTU4ZTMxNDM3ZjRmODdjZGQ0YWIyYjg2MTM5NTUiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgUHV0IHZpcnR1YWwvZGIgaW4gYW55IGFwcHJvcHJpYXRlIHByb3ZpZGVyIG9mIGEKKyMgcmVsYXRpb25hbCBkYXRhYmFzZSwgdXNlIGl0IGFzIGEgZGVwZW5kZW5jeSBpbgorIyBwbGFjZSBvZiBhIHNwZWNpZmljIGRiIGFuZCB1c2U6CisjCisjIFBSRUZFUlJFRF9QUk9WSURFUl92aXJ0dWFsL2RiCisjCisjIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBkYiBpbiB0aGUgYnVpbGQgKGRpc3RybykgLmNvbmYKK1BST1ZJREVTICs9ICIke1ZJUlRVQUxfTkFNRX0iCisKKyMgYml0YmFrZSBpc24ndCBxdWl0ZSBjbGV2ZXIgZW5vdWdoIHRvIGRlYWwgd2l0aCBzbGVlcHljYXQsCisjIHRoZSBkaXN0cmlidXRpb24gc2l0cyBpbiB0aGUgZXhwZWN0ZWQgZGlyZWN0b3J5LCBidXQgYWxsCisjIHRoZSBidWlsZHMgbXVzdCBvY2N1ciBmcm9tIGEgc3ViLWRpcmVjdG9yeS4gIFRoZSBmb2xsb3dpbmcKKyMgcGVyc3VhZGVzIGJpdGJha2UgdG8gZ28gdG8gdGhlIHJpZ2h0IHBsYWNlCitTID0gIiR7V09SS0RJUn0vZGItJHtQVn0vZGlzdCIKK0IgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9idWlsZF91bml4IgorU1BEWF9TID0gIiR7V09SS0RJUn0vZGItJHtQVn0iCisKKyMgVGhlIGV4ZWN1dGFibGVzIGdvIGluIGEgc2VwYXJhdGUgcGFja2FnZSAtIHR5cGljYWxseSB0aGVyZQorIyBpcyBubyBuZWVkIHRvIGluc3RhbGwgdGhlc2UgdW5sZXNzIGRvaW5nIHJlYWwgZGF0YWJhc2UKKyMgbWFuYWdlbWVudCBvbiB0aGUgc3lzdGVtLgoraW5oZXJpdCBsaWJfcGFja2FnZQorCitQQUNLQUdFUyA9KyAiJHtQTn0tY3h4IgorRklMRVNfJHtQTn0tY3h4ID0gIiR7bGliZGlyfS8qY3h4KnNvIgorCisKKyMgVGhlIGRldiBwYWNrYWdlIGhhcyB0aGUgLnNvIGxpbmsgKGFzIGluIGRiMykgYW5kIHRoZSAuYSdzIC0KKyMgaXQgaXMgdGhlcmVmb3JlIGluY29tcGF0aWJsZSAoY2Fubm90IGJlIGluc3RhbGxlZCBhdCB0aGUKKyMgc2FtZSB0aW1lKSBhcyB0aGUgZGIzIHBhY2thZ2UKKyMgc29ydCBvdXQgdGhlIC5zbyBzaW5jZSB0aGV5IGRvIHZlcnNpb24gcHJpb3IgdG8gdGhlIC5zbworU09MSUJTID0gIi01Ki5zbyIKK0ZJTEVTX1NPTElCU0RFViA9ICIke2xpYmRpcn0vbGliZGIuc28gJHtsaWJkaXJ9L2xpYmRiX2N4eC5zbyIKKworI2NvbmZpZ3VyYXRpb24gLSBzZXQgaW4gbG9jYWwuY29uZiB0byBvdmVycmlkZQorIyBBbGwgdGhlIC0tZGlzYWJsZS0qIG9wdGlvbnMgcmVwbGFjZSAtLWVuYWJsZS1zbWFsbGJ1aWxkLCB3aGljaCBicmVha3MgYSBidW5jaCBvZiBzdHVmZiAoZWcuIHBvc3RmaXgpCitEQjVfQ09ORklHID89ICItLWVuYWJsZS1vX2RpcmVjdCAtLWRpc2FibGUtY3J5cHRvZ3JhcGh5IC0tZGlzYWJsZS1xdWV1ZSAtLWRpc2FibGUtcmVwbGljYXRpb24gLS1kaXNhYmxlLXZlcmlmeSAtLWRpc2FibGUtY29tcGF0MTg1IC0tZGlzYWJsZS1zcWwiCisKK0VYVFJBX09FQ09ORiA9ICIke0RCNV9DT05GSUd9IC0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS1jeHggLS13aXRoLXN5c3Jvb3QiCisKKyMgT3ZlcnJpZGUgdGhlIE1VVEVYIHNldHRpbmcgaGVyZSwgdGhlIFBPU0lYIGxpYnJhcnkgaXMKKyMgdGhlIGRlZmF1bHQgLSAiUE9TSVgvcHRocmVhZHMvbGlicmFyeSIuCisjIERvbid0IGlnbm9yZSB0aGUgbmljZSBTV1AgaW5zdHJ1Y3Rpb24gb24gdGhlIEFSTToKKyMgVGhlc2UgZW5hYmxlIHRoZSBBUk0gYXNzZW1ibGVyIG11dGV4IGNvZGUsIHRoaXMgd29uJ3QKKyMgd29yayB3aXRoIHRodW1iIGNvbXBpbGF0aW9uLi4uCitBUk1fTVVURVggPSAiLS13aXRoLW11dGV4PUFSTS9nY2MtYXNzZW1ibHkiCitNVVRFWCA9ICIiCitNVVRFWF9hcm0gPSAiJHtBUk1fTVVURVh9IgorTVVURVhfYXJtZWIgPSAiJHtBUk1fTVVURVh9IgorRVhUUkFfT0VDT05GICs9ICIke01VVEVYfSIKKworIyBDYW5jZWwgdGhlIHNpdGUgc3R1ZmYgLSBpdCdzIHNldCBmb3IgZGIzIGFuZCBkZXN0cm95cyB0aGUKKyMgY29uZmlndXJlLgorQ09ORklHX1NJVEUgPSAiIgorZG9fY29uZmlndXJlKCkgeworCWdudS1jb25maWdpemUgLS1mb3JjZSAke1N9CisJZXhwb3J0IFNUUklQPSJ0cnVlIgorCW9lX3J1bmNvbmYKK30KKworZG9fY29tcGlsZV9wcmVwZW5kKCkgeworCXNlZCAtaSAtZSAnc3xoYXJkY29kZV9pbnRvX2xpYnM9eWVzfGhhcmRjb2RlX2ludG9fbGlicz1ub3wnIFwKKwkJJHtCfS9saWJ0b29sCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCW1rZGlyIC1wICR7RH0vJHtpbmNsdWRlZGlyfS9kYjUxCisJbXYgJHtEfS8ke2luY2x1ZGVkaXJ9L2RiLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNTEvLgorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGI1MS8uCisJbG4gLXMgZGI1MS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oCisJbG4gLXMgZGI1MS9kYl9jeHguaCAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmgKKworCSMgVGhlIGRvY3MgZW5kIHVwIGluIC91c3IvZG9jcyAtIG5vdCByaWdodC4KKwlpZiB0ZXN0IC1kICIke0R9LyR7cHJlZml4fS9kb2NzIgorCXRoZW4KKwkJbWtkaXIgLXAgIiR7RH0vJHtkYXRhZGlyfSIKKwkJdGVzdCAhIC1kICIke0R9LyR7ZG9jZGlyfSIgfHwgcm0gLXJmICIke0R9LyR7ZG9jZGlyfSIKKwkJbXYgIiR7RH0vJHtwcmVmaXh9L2RvY3MiICIke0R9LyR7ZG9jZGlyfSIKKwlmaQorCisJY2hvd24gLVIgcm9vdDpyb290ICR7RH0KK30KKworSU5TQU5FX1NLSVBfJHtQTn0gPSAiZGV2LXNvIgorSU5TQU5FX1NLSVBfJHtQTn0tY3h4ID0gImRldi1zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kYi9kYl82LjAuMzAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ5ZGY2MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2RiL2RiXzYuMC4zMC5iYgpAQCAtMCwwICsxLDExOCBAQAorIyBWZXJzaW9uIDYgb2YgdGhlIEJlcmtlbGV5IERCIGZyb20gT3JhY2xlIChmb3JtZXJseSBTbGVlcHljYXQpCisjCisjIEF0IHByZXNlbnQgdGhpcyBwYWNrYWdlIG9ubHkgaW5zdGFsbHMgdGhlIERCIGNvZGUKKyMgaXRzZWxmIChzaGFyZWQgbGlicmFyaWVzLCAuYSBpbiB0aGUgZGV2IHBhY2thZ2UpLAorIyBkb2N1bWVudGF0aW9uIGFuZCBoZWFkZXJzLgorIworIyBUaGUgaGVhZGVycyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRob3NlIGFzIHYzCisjIG9mIHRoZSBEQiwgb25seSBvbmUgdmVyc2lvbiBjYW4gYmUgdXNlZCAqZm9yIGRldioKKyMgYXQgb25jZSAtIERCMyBhbmQgREI2IGNhbiBib3RoIGJlIGluc3RhbGxlZCBvbiB0aGUKKyMgc2FtZSBzeXN0ZW0gYXQgdGhlIHNhbWUgdGltZSBpZiByZWFsbHkgbmVjZXNzYXJ5LgorU0VDVElPTiA9ICJsaWJzIgorU1VNTUFSWSA9ICJCZXJrZWxleSBEYXRhYmFzZSB2NiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobm9sb2d5L3Byb2R1Y3RzL2JlcmtlbGV5LWRiL2RiL2luZGV4Lmh0bWwiCitMSUNFTlNFID0gIkFHUEwtMy4wIgorVklSVFVBTF9OQU1FID89ICJ2aXJ0dWFsL2RiIgorUkNPTkZMSUNUU18ke1BOfSA9ICJkYjMiCisKK1JFQ0lQRV9OT19VUERBVEVfUkVBU09OID0gIlVwZGF0aW5nIHRvIDYuMS54IHJlcXVpcmVzIGFsc28gdXBkYXRpbmcgcnBtIHRvIDUuNC4xNSIKKworU1JDX1VSSSA9ICJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi0ke1BWfS50YXIuZ3oiCitTUkNfVVJJICs9ICJmaWxlOi8vYXJtLXRodW1iLW11dGV4X2RiNS5wYXRjaDtwYXRjaGRpcj0uLiBcCisgICAgICAgICAgICBmaWxlOi8vZml4LXBhcmFsbGVsLWJ1aWxkLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZS1sZXQtbGlic29fdGFyZ2V0LWRlcGVuZC1vbi1idF9yZWMucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhZDI4ZWI4NmFkMzIwM2I1NDIyODQ0ZGIxNzljNTg1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2MDhlNGIxY2YzOTBlOWJmNTRjMGVmMDBjNWJkOWNhNzZkMzZlMjI2MWI5ZjRkMzNkNTQ1MTZmM2Y2YTIwZmQyIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9MSUNFTlNFO21kNT0xZWM4YjBiMTdjYzMxNTEzZmUzNWFiMTA3MTZmODQ5MCIKKworaW5oZXJpdCBhdXRvdG9vbHMKKworIyBQdXQgdmlydHVhbC9kYiBpbiBhbnkgYXBwcm9wcmlhdGUgcHJvdmlkZXIgb2YgYQorIyByZWxhdGlvbmFsIGRhdGFiYXNlLCB1c2UgaXQgYXMgYSBkZXBlbmRlbmN5IGluCisjIHBsYWNlIG9mIGEgc3BlY2lmaWMgZGIgYW5kIHVzZToKKyMKKyMgUFJFRkVSUkVEX1BST1ZJREVSX3ZpcnR1YWwvZGIKKyMKKyMgdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGRiIGluIHRoZSBidWlsZCAoZGlzdHJvKSAuY29uZgorUFJPVklERVMgKz0gIiR7VklSVFVBTF9OQU1FfSIKKworIyBiaXRiYWtlIGlzbid0IHF1aXRlIGNsZXZlciBlbm91Z2ggdG8gZGVhbCB3aXRoIHNsZWVweWNhdCwKKyMgdGhlIGRpc3RyaWJ1dGlvbiBzaXRzIGluIHRoZSBleHBlY3RlZCBkaXJlY3RvcnksIGJ1dCBhbGwKKyMgdGhlIGJ1aWxkcyBtdXN0IG9jY3VyIGZyb20gYSBzdWItZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZworIyBwZXJzdWFkZXMgYml0YmFrZSB0byBnbyB0byB0aGUgcmlnaHQgcGxhY2UKK1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfS9kaXN0IgorQiA9ICIke1dPUktESVJ9L2RiLSR7UFZ9L2J1aWxkX3VuaXgiCitTUERYX1MgPSAiJHtXT1JLRElSfS9kYi0ke1BWfSIKKworIyBUaGUgZXhlY3V0YWJsZXMgZ28gaW4gYSBzZXBhcmF0ZSBwYWNrYWdlIC0gdHlwaWNhbGx5IHRoZXJlCisjIGlzIG5vIG5lZWQgdG8gaW5zdGFsbCB0aGVzZSB1bmxlc3MgZG9pbmcgcmVhbCBkYXRhYmFzZQorIyBtYW5hZ2VtZW50IG9uIHRoZSBzeXN0ZW0uCitpbmhlcml0IGxpYl9wYWNrYWdlCisKK1BBQ0tBR0VTID0rICIke1BOfS1jeHgiCitGSUxFU18ke1BOfS1jeHggPSAiJHtsaWJkaXJ9LypjeHgqc28iCisKKworIyBUaGUgZGV2IHBhY2thZ2UgaGFzIHRoZSAuc28gbGluayAoYXMgaW4gZGIzKSBhbmQgdGhlIC5hJ3MgLQorIyBpdCBpcyB0aGVyZWZvcmUgaW5jb21wYXRpYmxlIChjYW5ub3QgYmUgaW5zdGFsbGVkIGF0IHRoZQorIyBzYW1lIHRpbWUpIGFzIHRoZSBkYjMgcGFja2FnZQorIyBzb3J0IG91dCB0aGUgLnNvIHNpbmNlIHRoZXkgZG8gdmVyc2lvbiBwcmlvciB0byB0aGUgLnNvCitTT0xJQlMgPSAiLTYqLnNvIgorRklMRVNfU09MSUJTREVWID0gIiR7bGliZGlyfS9saWJkYi5zbyAke2xpYmRpcn0vbGliZGJfY3h4LnNvIgorCisjY29uZmlndXJhdGlvbiAtIHNldCBpbiBsb2NhbC5jb25mIHRvIG92ZXJyaWRlCisjIEFsbCB0aGUgLS1kaXNhYmxlLSogb3B0aW9ucyByZXBsYWNlIC0tZW5hYmxlLXNtYWxsYnVpbGQsIHdoaWNoIGJyZWFrcyBhIGJ1bmNoIG9mIHN0dWZmIChlZy4gcG9zdGZpeCkKK0RCNl9DT05GSUcgPz0gIi0tZW5hYmxlLW9fZGlyZWN0IC0tZGlzYWJsZS1jcnlwdG9ncmFwaHkgLS1kaXNhYmxlLXF1ZXVlIC0tZGlzYWJsZS1yZXBsaWNhdGlvbiAtLWRpc2FibGUtdmVyaWZ5IC0tZGlzYWJsZS1jb21wYXQxODUgLS1kaXNhYmxlLXNxbCIKKworRVhUUkFfT0VDT05GID0gIiR7REI2X0NPTkZJR30gLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLWN4eCAtLXdpdGgtc3lzcm9vdCIKKworIyBPdmVycmlkZSB0aGUgTVVURVggc2V0dGluZyBoZXJlLCB0aGUgUE9TSVggbGlicmFyeSBpcworIyB0aGUgZGVmYXVsdCAtICJQT1NJWC9wdGhyZWFkcy9saWJyYXJ5Ii4KKyMgRG9uJ3QgaWdub3JlIHRoZSBuaWNlIFNXUCBpbnN0cnVjdGlvbiBvbiB0aGUgQVJNOgorIyBUaGVzZSBlbmFibGUgdGhlIEFSTSBhc3NlbWJsZXIgbXV0ZXggY29kZQorQVJNX01VVEVYID0gIi0td2l0aC1tdXRleD1BUk0vZ2NjLWFzc2VtYmx5IgorTVVURVggPSAiIgorTVVURVhfYXJtID0gIiR7QVJNX01VVEVYfSIKK01VVEVYX2FybWViID0gIiR7QVJNX01VVEVYfSIKK0VYVFJBX09FQ09ORiArPSAiJHtNVVRFWH0iCisKKyMgQ2FuY2VsIHRoZSBzaXRlIHN0dWZmIC0gaXQncyBzZXQgZm9yIGRiMyBhbmQgZGVzdHJveXMgdGhlCisjIGNvbmZpZ3VyZS4KK0NPTkZJR19TSVRFID0gIiIKK2RvX2NvbmZpZ3VyZSgpIHsKKwlnbnUtY29uZmlnaXplIC0tZm9yY2UgJHtTfQorCWV4cG9ydCBTVFJJUD0idHJ1ZSIKKwlvZV9ydW5jb25mCit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlzZWQgLWkgLWUgJ3N8aGFyZGNvZGVfaW50b19saWJzPXllc3xoYXJkY29kZV9pbnRvX2xpYnM9bm98JyBcCisJCSR7Qn0vbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlta2RpciAtcCAke0R9LyR7aW5jbHVkZWRpcn0vZGI2MAorCW12ICR7RH0vJHtpbmNsdWRlZGlyfS9kYi5oICR7RH0vJHtpbmNsdWRlZGlyfS9kYjYwLy4KKwltdiAke0R9LyR7aW5jbHVkZWRpcn0vZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiNjAvLgorCWxuIC1zIGRiNjAvZGIuaCAke0R9LyR7aW5jbHVkZWRpcn0vZGIuaAorCWxuIC1zIGRiNjAvZGJfY3h4LmggJHtEfS8ke2luY2x1ZGVkaXJ9L2RiX2N4eC5oCisKKwkjIFRoZSBkb2NzIGVuZCB1cCBpbiAvdXNyL2RvY3MgLSBub3QgcmlnaHQuCisJaWYgdGVzdCAtZCAiJHtEfS8ke3ByZWZpeH0vZG9jcyIKKwl0aGVuCisJCW1rZGlyIC1wICIke0R9LyR7ZGF0YWRpcn0iCisJCXRlc3QgISAtZCAiJHtEfS8ke2RvY2Rpcn0iIHx8IHJtIC1yZiAiJHtEfS8ke2RvY2Rpcn0iCisJCW12ICIke0R9LyR7cHJlZml4fS9kb2NzIiAiJHtEfS8ke2RvY2Rpcn0iCisJZmkKKworCWNob3duIC1SIHJvb3Q6cm9vdCAke0R9Cit9CisKK0lOU0FORV9TS0lQXyR7UE59ID0gImRldi1zbyIKK0lOU0FORV9TS0lQXyR7UE59LWN4eCA9ICJkZXYtc28iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9kZWJpYW51dGlscy9kZWJpYW51dGlsc180LjUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjY2NWZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZGViaWFudXRpbHMvZGViaWFudXRpbHNfNC41LjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJNaXNjZWxsYW5lb3VzIHV0aWxpdGllcyBzcGVjaWZpYyB0byBEZWJpYW4iCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyICYgU01BSUxfR1BMIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vZGViaWFuL2NvcHlyaWdodDttZDU9ZjAxYTUyMDNkNTA1MTJmYzQ4MzBiNDMzMmI2OTZhOWYiCisKK1NSQ19VUkkgPSAiJHtERUJJQU5fTUlSUk9SfS9tYWluL2QvJHtCUE59LyR7QlBOfV8ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0ODc1MjQ1MThjZDU4MzNhNmE0ZjcwMDdiNWQxYmQ1YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJhNTMxYzIzZTAxMDVmZTAxY2ZhOTI4NDU3YTgzNDNhMWU5NDdlMjYyMWIzY2Q0ZDA1ZjRlOTY1NjAyMGM2M2I3IgorCitTID0gIiR7V09SS0RJUn0vJHtCUE59IgorCitpbmhlcml0IGF1dG90b29scyB1cGRhdGUtYWx0ZXJuYXRpdmVzCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworICAgIHNlZCAtaSAtZSAnczp0ZW1wZmlsZS4xIHdoaWNoLjE6d2hpY2guMTpnJyAke1N9L01ha2VmaWxlLmFtCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGlmIFsgIiR7YmFzZV9iaW5kaXJ9IiAhPSAiJHtiaW5kaXJ9IiBdOyB0aGVuCisgICAgICAgICMgRGViaWFuIHBsYWNlcyBzb21lIHV0aWxzIGludG8gJHtiYXNlX2JpbmRpcn0gYXMgZG9lcyBidXN5Ym94CisgICAgICAgIGluc3RhbGwgLWQgJHtEfSR7YmFzZV9iaW5kaXJ9CisgICAgICAgIGZvciBhcHAgaW4gcnVuLXBhcnRzIHRlbXBmaWxlOyBkbworICAgICAgICAgICAgbXYgJHtEfSR7YmluZGlyfS8kYXBwICR7RH0ke2Jhc2VfYmluZGlyfS8kYXBwCisgICAgICAgIGRvbmUKKyAgICBmaQorfQorCisjIE5vdGUgdGhhdCB3ZSBwYWNrYWdlIHRoZSB1cGRhdGUtYWx0ZXJuYXRpdmVzIG5hbWUuCisjCitQQUNLQUdFUyA9KyAiJHtQTn0tcnVuLXBhcnRzIgorRklMRVNfJHtQTn0tcnVuLXBhcnRzID0gIiR7YmFzZV9iaW5kaXJ9L3J1bi1wYXJ0cy5kZWJpYW51dGlscyIKKworUkRFUEVORFNfJHtQTn0gKz0gIiR7UE59LXJ1bi1wYXJ0cyIKKworCitBTFRFUk5BVElWRV9QUklPUklUWT0iMTAwIgorQUxURVJOQVRJVkVfJHtQTn0gPSAiYWRkLXNoZWxsIGluc3RhbGxrZXJuZWwgcmVtb3ZlLXNoZWxsIHNhdmVsb2cgdGVtcGZpbGUgd2hpY2giCitBTFRFUk5BVElWRV8ke1BOfS1ydW4tcGFydHMgPSAicnVuLXBhcnRzIgorCitBTFRFUk5BVElWRV9MSU5LX05BTUVbYWRkLXNoZWxsXT0iJHtzYmluZGlyfS9hZGQtc2hlbGwiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbaW5zdGFsbGtlcm5lbF09IiR7c2JpbmRpcn0vaW5zdGFsbGtlcm5lbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtyZW1vdmUtc2hlbGxdPSIke3NiaW5kaXJ9L3JlbW92ZS1zaGVsbCIKK0FMVEVSTkFUSVZFX0xJTktfTkFNRVtydW4tcGFydHNdPSIke2Jhc2VfYmluZGlyfS9ydW4tcGFydHMiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbc2F2ZWxvZ109IiR7YmluZGlyfS9zYXZlbG9nIgorQUxURVJOQVRJVkVfTElOS19OQU1FW3RlbXBmaWxlXT0iJHtiYXNlX2JpbmRpcn0vdGVtcGZpbGUiCitBTFRFUk5BVElWRV9MSU5LX05BTUVbd2hpY2hdPSIke2JpbmRpcn0vd2hpY2giCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9lbmNoYW50L2VuY2hhbnRfMS42LjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdhNDc2MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2VuY2hhbnQvZW5jaGFudF8xLjYuMC5iYgpAQCAtMCwwICsxLDMyIEBACitTVU1NQVJZID0gIkVuY2hhbnQgU3BlbGwgY2hlY2tlciBBUEkgTGlicmFyeSIKK1NFQ1RJT04gPSAibGlicyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuYWJpc291cmNlLmNvbS9wcm9qZWN0cy9lbmNoYW50LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2J1Z3ppbGxhLmFiaXNvdXJjZS5jb20vZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUVuY2hhbnQiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWRmY2JhYmY5MTMxZGM5YTk1ZmViZWY2NzUzYTI5NThiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9lbmNoYW50Lmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yOTttZDU9OGQ4ODFjYWExZDM3NTIzNTY3ZTFkOGY3MjY2NzVhMTgiCisKK0RFUEVORFMgPSAiYXNwZWxsIGdsaWItMi4wIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworUFIgPSAicjMiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5hYmlzb3VyY2UuY29tL2Rvd25sb2Fkcy9lbmNoYW50LyR7UFZ9L2VuY2hhbnQtJHtQVn0udGFyLmd6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZGUxMTAxMWFmZjgwMWRjNjEwNDI4MjgwNDFmYjU5YzciCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMmZhYzllN2JlN2U5NDI0YjJjNTU3MGQ4YWZmZTU2OGRiMzlmNzU3MmMxMGVkNDhkNGUxM2NkZGYwM2Y3MDk3ZiIKKworRVhUUkFfT0VDT05GID0gIi0td2l0aC1hc3BlbGwtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorCQktLWVuYWJsZS1hc3BlbGwgYnJfY3ZfYmlucmVsb2M9bm8gXAorCQkiCisKK2V4cG9ydCBDWFhGTEFHUyArPSAiIC1MJHtTVEFHSU5HX0xJQkRJUn0gLWxzdGRjKysgIgorCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0gJHtsaWJkaXJ9Lyoke1NPTElCU30gJHtkYXRhZGlyfS8ke0JQTn0gJHtsaWJkaXJ9LyR7QlBOfS8qLnNvIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2xpYmRpcn0vJHtCUE59Lyp7U09MSUJTREVWfSAke2xpYmRpcn0vJHtCUE59LyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vKi5hIgorCitSREVQRU5EU18ke1BOfSArPSAiYXNwZWxsIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3B0ZXN0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTIzNmZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9maWxlcy9wdGVzdC5wYXRjaApAQCAtMCwwICsxLDM2IEBACitBZGQgaW5zdGFsbC1wdGVzdCBydWxlcy4KKworU2lnbmVkLW9mZi1ieTogSm9zZXAgUHVpZ2RlbW9udCA8am9zZXAucHVpZ2RlbW9udEBlbmVhLmNvbT4KK1NpZ25lZC1vZmYtYnk6IE1heGluIEIuIEpvaG4gPG1heGluLmpvaG5AZW5lYS5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworZGlmZiAtdXIgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCistLS0gYS9NYWtlZmlsZS5hbQkyMDExLTA4LTE2IDEwOjEzOjEwLjAwMDAwMDAwMCArMDIwMAorKysrIGIvTWFrZWZpbGUuYW0JMjAxMy0wNC0xMiAxODowMjoxNi40NzM3MTU4NzMgKzAyMDAKK0BAIC0zMSwzICszMSw4IEBACisgCWQ9YGRhdGUgJyslZC8lbS8lWSdgOyBcCisgCXNlZCAnc3wvXCpARElTVF9EQVRFQFwqL3wiJyIkJGQiJyJ8JyAkKHNyY2Rpcikvc3JjL3ZlcnNpb24uYyA+IFwKKyAJCSQoZGlzdGRpcikvc3JjL3ZlcnNpb24uYworKworK2luc3RhbGwtcHRlc3Q6CisrCUBmb3Igc3ViZGlyIGluICQoU1VCRElSUyk7IGRvIFwKKysJCSQoTUFLRSkgLUMgJCRzdWJkaXIgREVTVERJUj0kKERFU1RESVIpLyQkc3ViZGlyICRAOyBcCisrCWRvbmUKK2RpZmYgLXVyIGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQorLS0tIGEvdGVzdHMvTWFrZWZpbGUuYW0JMjAxMS0xMS0xMSAxOTozOTo0Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCTIwMTMtMDQtMTIgMTg6MzA6NTcuMDY2MzAxMDM3ICswMjAwCitAQCAtMTMyLDQgKzEzMiwxNCBAQAorIGR0ZGVsX0xEQUREID0gLi4vc3JjL2xpYmdkYm0ubGEgLi4vY29tcGF0L2xpYmdkYm1fY29tcGF0LmxhCisgZF9jcmVhdF9jZV9MREFERCA9IC4uL3NyYy9saWJnZGJtLmxhIC4uL2NvbXBhdC9saWJnZGJtX2NvbXBhdC5sYQorIAorK2J1aWxkdGVzdHM6ICQoY2hlY2tfUFJPR1JBTVMpICQoVEVTVFNVSVRFKQorIAorK2luc3RhbGwtcHRlc3Q6ICQoY2hlY2tfUFJPR1JBTVMpICQoVEVTVFNVSVRFKQorKwlAJChJTlNUQUxMKSAtZCAkKERFU1RESVIpCisrCUBmb3IgZmlsZSBpbiAkXjsgZG8gXAorKwkJaWYgWyAteCAubGlicy8kJGZpbGUgXTsgdGhlbiBcCisrCQkJJChJTlNUQUxMX1BST0dSQU0pIC5saWJzLyQkZmlsZSAkKERFU1RESVIpLyQkZmlsZTsgXAorKwkJZWxzZSBcCisrCQkJJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZSAkKERFU1RESVIpIDsgXAorKwkJZmkgXAorKwlkb25lCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZmlsZXMvcnVuLXB0ZXN0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxNWRhODQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIHNjcmlwdCBpcyB1c2VkIHRvIHJ1biB0aGUgZ21kYiB0ZXN0IHN1aXRlCisKK2NkIHRlc3RzCisKKy4vdGVzdHN1aXRlIEFVVE9URVNUX1BBVEg9JFBXRCBhYnNfYnVpbGRkaXI9JFBXRCBDT01QQVQ9MSB8IHNlZCAncy9eW14wLTldKlwoWzAtOV1cK1wpOiBcKC4qXClcKG9rXHxwYXNzXHxza2lwcGVkXHxmYWlsXHxGQUlMRURcKVwoLipcKSQvXDM6IFwyIFw0LztzLyBcKy8gL2c7cy9eb2svUEFTUy87cy9ec2tpcHBlZC9TS0lQLztzL15mYWlsL0ZBSUwvO3MvXkZBSUxFRC9GQUlMLycKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xkZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjYjQzYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9sZGZsYWdzLnBhdGNoCkBAIC0wLDAgKzEsMjIgQEAKK09iZXkgTERGTEFHUworCitTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBMYXJzb24gPGNocmlzX2xhcnNvbkBtZW50b3IuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtvbGQgdmVyc2lvbl0KKworLS0tIGdkYm0tMS44LjMub3JpZy9NYWtlZmlsZS5pbgorKysrIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4KK0BAIC0xNTYsMTIgKzE1NiwxMiBAQCBpbnN0YWxsLWNvbXBhdDoKKworIGxpYmdkYm0ubGE6ICQoTE9CSlMpIGdkYm0uaAorCXJtIC1mIGxpYmdkYm0ubGEKKy0JJChMSUJUT09MKSAtLW1vZGU9bGluayAkKENDKSAtbyBsaWJnZGJtLmxhIC1ycGF0aCAkKGxpYmRpcikgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoQ0MpICQoTERGTEFHUykgLW8gbGliZ2RibS5sYSAtcnBhdGggJChsaWJkaXIpIFwKKwkJLXZlcnNpb24taW5mbyAkKFNITElCX1ZFUikgJChMT0JKUykKKworIGxpYmdkYm1fY29tcGF0LmxhOiAkKENfTE9CSlMpIGdkYm0uaAorCXJtIC1mIGxpYmdkYm1fY29tcGF0LmxhCistCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgLW8gbGliZ2RibV9jb21wYXQubGEgLXJwYXRoICQobGliZGlyKSBcCisrCSQoTElCVE9PTCkgLS1tb2RlPWxpbmsgJChDQykgJChMREZMQUdTKSAtbyBsaWJnZGJtX2NvbXBhdC5sYSAtcnBhdGggJChsaWJkaXIpIFwKKwkJLXZlcnNpb24taW5mbyAkKFNITElCX1ZFUikgJChDX0xPQkpTKQorCisgZ2RibS5oOglnZGJtLnByb3RvIGdkYm1lcnJuby5oIGdkYm0ucHJvdG8yCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbGlidG9vbC1tb2RlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjlkMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtLTEuOC4zL2xpYnRvb2wtbW9kZS5wYXRjaApAQCAtMCwwICsxLDIyIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4ub3JpZwkyMDA2LTAyLTE2IDE1OjE3OjI1LjAwMDAwMDAwMCArMDAwMAorKysrIGdkYm0tMS44LjMvTWFrZWZpbGUuaW4JMjAwNi0wMi0xNiAxNToxODowOC4wMDAwMDAwMDAgKzAwMDAKK0BAIC0xMzEsNyArMTMxLDcgQEAKKyAJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKSAkKERFU1RESVIpJChtYW4zZGlyKSBcCisgCQkkKERFU1RESVIpJChpbmZvZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm0ubGEKKysJJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpIC1jIGxpYmdkYm0ubGEgJChERVNURElSKSQobGliZGlyKS9saWJnZGJtLmxhCisgCSQoSU5TVEFMTF9EQVRBKSBnZGJtLmggXAorIAkJJChERVNURElSKSQoaW5jbHVkZWRpcikvZ2RibS5oCisgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS4zIFwKK0BAIC0xNDIsNyArMTQyLDcgQEAKKyBpbnN0YWxsLWNvbXBhdDoKKyAJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisgCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKQorLQkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorKwkkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgLWMgbGliZ2RibV9jb21wYXQubGEgXAorIAkJJChERVNURElSKSQobGliZGlyKS9saWJnZGJtX2NvbXBhdC5sYQorIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RibS5oIFwKKyAJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2RibS5oCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm0tMS44LjMvbWFrZWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5MTQ1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibS0xLjguMy9tYWtlZmlsZS5wYXRjaApAQCAtMCwwICsxLDYwIEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworIworIyBQYXRjaCBtYW5hZ2VkIGJ5IGh0dHA6Ly93d3cubW4tbG9naXN0aWsuZGUvdW5zdXBwb3J0ZWQvcHhhMjUwL3BhdGNoZXIKKyMKKworLS0tIGdkYm0tMS44LjMvTWFrZWZpbGUuaW5+bWFrZWZpbGUKKysrKyBnZGJtLTEuOC4zL01ha2VmaWxlLmluCitAQCAtMjIsNiArMjIsNyBAQAorIFRFWEkyRFZJID0gdGV4aTJkdmkKKyAKKyBERUZTID0KKytERVNURElSID0KKyAKKyAjIFdoZXJlIHRoZSBzeXN0ZW0gW25dZGJtIHJvdXRpbmVzIGFyZS4uLgorIExJQlMgPSBATElCU0AgLWxjCitAQCAtMTI3LDI2ICsxMjgsMjYgQEAKKyBwcm9nczogJChQUk9HUykKKyAKKyBpbnN0YWxsOiBsaWJnZGJtLmxhIGdkYm0uaCBnZGJtLmluZm8KKy0JJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChJTlNUQUxMX1JPT1QpJChsaWJkaXIpIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikgJChJTlNUQUxMX1JPT1QpJChtYW4zZGlyKSBcCistCQkkKElOU1RBTExfUk9PVCkkKGluZm9kaXIpCistCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtLmxhICQoSU5TVEFMTF9ST09UKSQobGliZGlyKS9saWJnZGJtLmxhCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApIGdkYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL2dkYm0uaAorLQkkKElOU1RBTExfREFUQSkgLW8gJChCSU5PV04pIC1nICQoQklOR1JQKSAkKHNyY2RpcikvZ2RibS4zIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQobWFuM2RpcikvZ2RibS4zCistCSQoSU5TVEFMTF9EQVRBKSAtbyAkKEJJTk9XTikgLWcgJChCSU5HUlApICQoc3JjZGlyKS9nZGJtLmluZm8gXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmZvZGlyKS9nZGJtLmluZm8KKysJJChzcmNkaXIpL21raW5zdGFsbGRpcnMgJChERVNURElSKSQobGliZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKSAkKERFU1RESVIpJChtYW4zZGlyKSBcCisrCQkkKERFU1RESVIpJChpbmZvZGlyKQorKwkkKExJQlRPT0wpICQoSU5TVEFMTCkgLWMgbGliZ2RibS5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYmdkYm0ubGEKKysJJChJTlNUQUxMX0RBVEEpIGdkYm0uaCBcCisrCQkkKERFU1RESVIpJChpbmNsdWRlZGlyKS9nZGJtLmgKKysJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9nZGJtLjMgXAorKwkJJChERVNURElSKSQobWFuM2RpcikvZ2RibS4zCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvZ2RibS5pbmZvIFwKKysJCSQoREVTVERJUikkKGluZm9kaXIpL2dkYm0uaW5mbworIAorIGluc3RhbGwtY29tcGF0OgorLQkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUk9PVCkkKGxpYmRpcikgXAorLQkJJChJTlNUQUxMX1JPT1QpJChpbmNsdWRlZGlyKQorKwkkKHNyY2RpcikvbWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChsaWJkaXIpIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpCisgCSQoTElCVE9PTCkgJChJTlNUQUxMKSAtYyBsaWJnZGJtX2NvbXBhdC5sYSBcCistCQkkKElOU1RBTExfUk9PVCkkKGxpYmRpcikvbGliZ2RibV9jb21wYXQubGEKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL2RibS5oIFwKKy0JCSQoSU5TVEFMTF9ST09UKSQoaW5jbHVkZWRpcikvZGJtLmgKKy0JJChJTlNUQUxMX0RBVEEpIC1vICQoQklOT1dOKSAtZyAkKEJJTkdSUCkgJChzcmNkaXIpL25kYm0uaCBcCistCQkkKElOU1RBTExfUk9PVCkkKGluY2x1ZGVkaXIpL25kYm0uaAorKwkJJChERVNURElSKSQobGliZGlyKS9saWJnZGJtX2NvbXBhdC5sYQorKwkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2RibS5oIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL2RibS5oCisrCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbmRibS5oIFwKKysJCSQoREVTVERJUikkKGluY2x1ZGVkaXIpL25kYm0uaAorIAorICNsaWJnZGJtLmE6ICQoT0JKUykgZ2RibS5oCisgIwlybSAtZiBsaWJnZGJtLmEKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ2RibS9nZGJtXzEuMTEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmOGM1YgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjExLmJiCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiS2V5L3ZhbHVlIGRhdGFiYXNlIGxpYnJhcnkgd2l0aCBleHRlbnNpYmxlIGhhc2hpbmciCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZ2RibS8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MjQxZGExYjlmZTQyZTY0MmNiYjJjMjRkNWUwYzRkMjQiCisKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2dkYm0vZ2RibS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyAgICAgICAgICAgZmlsZTovL3B0ZXN0LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3MmM4MzI2ODBjZjA5OTljYWVkYmU1YjI2NWM4YzFiZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4ZDkxMmY0NGYwNWQwYjE1YTRhNWQ5NmE3NmY4NTJlOTA1ZDA1MWJiODgwMjJmY2RmZDk4YjQzYmUwOTNlM2MzIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0IHRleGluZm8gbGliX3BhY2thZ2UgcHRlc3QKKworIyBOZWVkZWQgZm9yIGRibSBweXRob24gbW9kdWxlCitFWFRSQV9PRUNPTkYgPSAiLWVuYWJsZS1saWJnZGJtLWNvbXBhdCIKKworIyBTdG9wIHByZXNlbmNlIG9mIGRibS9uYmRtIG9uIHRoZSBob3N0IGNvbnRhbWluYXRpbmcgYnVpbGRzCitDQUNIRURfQ09ORklHVVJFVkFSUyArPSAiYWNfY3ZfbGliX25kYm1fbWFpbj1ubyBhY19jdl9saWJfZGJtX21haW49bm8iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgICMgQ3JlYXRlIGEgc3ltbGluayB0byBuZGJtLmggYW5kIGdkYm0uaCBpbiBpbmNsdWRlL2dkYm0gdG8gbGV0IG90aGVyIHBhY2thZ2VzIHRvIGZpbmQKKyAgICAjIHRoZXNlIGhlYWRlcnMKKyAgICBpbnN0YWxsIC1kICR7RH0ke2luY2x1ZGVkaXJ9L2dkYm0KKyAgICBsbiAtc2YgLi4vbmRibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL25kYm0uaAorICAgIGxuIC1zZiAuLi9nZGJtLmggJHtEfS8ke2luY2x1ZGVkaXJ9L2dkYm0vZ2RibS5oCit9CisKK1JERVBFTkRTXyR7UE59LXB0ZXN0ICs9ICJkaWZmdXRpbHMiCisKK2RvX2NvbXBpbGVfcHRlc3QoKSB7CisgICAgb2VfcnVubWFrZSAtQyB0ZXN0cyBidWlsZHRlc3RzCit9CisKK1BBQ0tBR0VTID0rICIke1BOfS1jb21wYXQgXAorICAgICAgICAgICAgIgorRklMRVNfJHtQTn0tY29tcGF0ID0gIiR7bGliZGlyfS9saWJnZGJtX2NvbXBhdCR7U09MSUJTfSBcCisgICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nZGJtL2dkYm1fMS44LjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMWI2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dkYm0vZ2RibV8xLjguMy5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIktleS92YWx1ZSBkYXRhYmFzZSBsaWJyYXJ5IHdpdGggZXh0ZW5zaWJsZSBoYXNoaW5nIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dkYm0vIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kOGUyMGVlY2UyMTRkZjhlZjk1M2VkNTg1Nzg2MjE1MCIKKworUFIgPSAicjQiCisKK1NSQ19VUkkgPSAiJHtHTlVfTUlSUk9SfS9nZGJtL2dkYm0tJHtQVn0udGFyLmd6IFwKKwkgICBmaWxlOi8vbWFrZWZpbGUucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlidG9vbC1tb2RlLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xkZmxhZ3MucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDFiMWQ1YzAyNDViMWMwMGFmZjkyZGE3NTFlOWFhMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjYzM0MDMzOGEyZTI4YjQwMDU4YWI5ZWI1MzU0YTIxZDUzZjg4YTE1ODJlYTIxYmEwYmIxODVjMzdhMjgxZGM5IgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9hcHBlbmQgKCkgeworICAgIGluc3RhbGwgLWQgJHtEfSR7aW5jbHVkZWRpcn0vZ2RibQorICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L2RibS5oICR7RH0ke2luY2x1ZGVkaXJ9LworICAgIGluc3RhbGwgLW0gMDY0NCAke1N9L25kYm0uaCAke0R9JHtpbmNsdWRlZGlyfS8KKyAgICAjIENyZWF0ZSBhIHN5bWxpbmsgdG8gbmRibS5oIGFuZCBnZGJtLmggaW4gaW5jbHVkZS9nZGJtIHRvIGxldCBvdGhlciBwYWNrYWdlcyB0byBmaW5kCisgICAgIyB0aGVzZSBoZWFkZXJzCisgICAgbG4gLXNmIC4uL25kYm0uaCAke0R9LyR7aW5jbHVkZWRpcn0vZ2RibS9uZGJtLmgKKyAgICBsbiAtc2YgLi4vZ2RibS5oICR7RH0vJHtpbmNsdWRlZGlyfS9nZGJtL2dkYm0uaAorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTQuMi4xL2Rpc2FibGUtc3RkYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVjYjFjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9kaXNhYmxlLXN0ZGMucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorVGhpcyBwYXRjaCB3YXMgcmVtb3ZlZCBpbiBmMTgxYzZjZThiMyB3aGVuIGdtcCA0LjIuMSB3YXMgbWlzdGFrZW5seQorZHJvcHBlZC4KKworVXBzdHJlYW0gaXMgbm90IGludGVyZXN0ZWQgaW4gcGF0Y2hlcyBmb3IgYW5jaWVudCB2ZXJzaW9ucy4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorCisjICJleHRlcm4gaW5saW5lIiBpbiB0cmFkaXRpb25hbCBnY2MgbWVhbnMgdGhhdCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIAorIyBpbmxpbmVkIHdoZXJldmVyIGl0J3Mgc2Vlbiwgd2hpbGUgaW4gQzk5LCAiZXh0ZXJuIGlubGluZSIgbWVhbnMgdGhhdCBpCisjIHRoZSBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBpbmxpbmVkIHdoZXJlIHRoZSBpbmxpbmUgZGVmaW5pdGlvbiBpcyAKKyMgc2VlbiB3aGlsZSBpbiBvdGhlciBwbGFjZXMgaXQncyBub3QgaW5saW5lZDoKKyMgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy8yMDA2LTExL21zZzAwMDA2Lmh0bWwKKyMKKyMgZ21wIGNoZWNrcyAiLS1zdGQ9Z251OTkiIHRvIHVzZSBDOTkgY29udmVudGlvbiBob3dldmVyIGl0IGludGVybmFsbHkgCisjIGRlZmluZXMgc29tZSAiZXh0ZXJuIGlubGluZSIgZnVuY3Rpb25zIGluIGdtcC5oLCB3aGljaCBpcyBpbmNsdWRlZAorIyBieSBtYWlubHkgLmMgZmlsZXMgYW5kIGZpbmFsbHkgbGVhZCBhIGZsb29kIG9mIHJlZGVmaW5pdGlvbiBmdW5jdGlvbgorIyBlcnJvcnMgd2hlbiBsaW5raW5nIG9iamVjdHMgdG9nZXRoZXIuCisjCisjIFNvIGRpc2FibGUgQzk5L0FOU0kgZGV0ZWN0aW9uIHRvIHN0aWNrIHRvIHRyYW5kaXRpb25hbCBnY2MgYmVoYXZpb3IKKyMKKyMgYnkgS2V2aW4gVGlhbiA8a2V2aW4udGlhbkBpbnRlbC5jb20+LCAyMDEwLTA4LTEzCisjCisjICh0aGlzIHBhdGNoIGlzIGxpY2Vuc2VkIHVuZGVyIEdQTHYyKykKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgoraW5kZXggNDUwY2M5Mi4uYWFiMGI1OSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5pbgorKysrIGIvY29uZmlndXJlLmluCitAQCAtMTg2OSw5ICsxODY5LDcgQEAgQUNfU1VCU1QoREVGTl9MT05HX0xPTkdfTElNQikKKyAKKyAjIFRoZSBDIGNvbXBpbGVyIGFuZCBwcmVwcm9jZXNzb3IsIHB1dCBpbnRvIEFOU0kgbW9kZSBpZiBwb3NzaWJsZS4KKyBBQ19QUk9HX0NDCistQUNfUFJPR19DQ19TVERDCisgQUNfUFJPR19DUFAKKy1HTVBfSF9BTlNJCisgCisgCisgIyBUaGUgQyBjb21waWxlciBvbiB0aGUgYnVpbGQgc3lzdGVtLCBhbmQgYXNzb2NpYXRlZCB0ZXN0cy4KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNC4yLjEvZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2FlZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC00LjIuMS9nbXBfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCkBAIC0wLDAgKzEsNTYgQEAKK2F1dG9tYWtlIDEuMTIgaGFzIGRlcHJpY2F0ZWQgYXV0b21hdGljIGRlLUFOU0ktZmljYXRpb24gc3VwcG9ydAorCit0aGlzIHBhdGNoIGF2b2lkcyB0aGVzZSBraW5kcyBvZiBlcnJvcnM6CisKK3wgY29uZmlndXJlLmluOjIyNDA6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKK3wgTWFrZWZpbGUuYW06Mjg6IGVycm9yOiBhdXRvbWF0aWMgZGUtQU5TSS1maWNhdGlvbiBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQKKworU2lnbmVkLU9mZi1CeTogTml0aW4gQSBLYW1ibGUgPG5pdGluLmEua2FtYmxlQGludGVsLmNvbT4KKzIwMTIvMDUvMDIKKworCitUaGlzIHBhdGNoIHdhcyByZW1vdmVkIGluIGYxODFjNmNlOGIzIHdoZW4gZ21wIDQuMi4xIHdhcyBtaXN0YWtlbmx5Citkcm9wcGVkLgorCitVcHN0cmVhbSBpcyBub3QgaW50ZXJlc3RlZCBpbiBwYXRjaGVzIGZvciBhbmNpZW50IHZlcnNpb25zLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUKK1NpZ25lZC1vZmYtYnk6IEp1c3NpIEt1a2tvbmVuIDxqdXNzaS5rdWtrb25lbkBpbnRlbC5jb20+CisKKworSW5kZXg6IGdtcC00LjIuMS9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbXAtNC4yLjEub3JpZy9jb25maWd1cmUuaW4KKysrKyBnbXAtNC4yLjEvY29uZmlndXJlLmluCitAQCAtNjcsNyArNjcsNyBAQCBkbmwKKyBkbmwgIE5vdGUgdGhhdCB0aGVyZSdzIGEgY29weSBvZiB0aGVzZSBvcHRpb25zIGluIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuYW0sCisgZG5sICBzbyB1cGRhdGUgdGhlcmUgdG9vIGlmIGNoYW5naW5nIGFueXRoaW5nLgorIGRubAorLUFNX0lOSVRfQVVUT01BS0UoWzEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzICQodG9wX2J1aWxkZGlyKS9hbnNpMmtucl0pCisrQU1fSU5JVF9BVVRPTUFLRShbMS44IGdudSBuby1kZXBlbmRlbmNpZXNdKQorIEFNX0NPTkZJR19IRUFERVIoY29uZmlnLmg6Y29uZmlnLmluKQorIEFNX01BSU5UQUlORVJfTU9ERQorIAorQEAgLTIwMjIsOSArMjAyMiw2IEBAIGZpCisgZWNobyAiICAgICAgTVBOX1BBVEg9XCIkcGF0aFwiIgorIAorIAorLSMgQXV0b21ha2UgYW5zaTJrbnIgc3VwcG9ydC4KKy1BTV9DX1BST1RPVFlQRVMKKy0KKyBHTVBfUFJPR19BUgorIEdNUF9QUk9HX05NCisgCitJbmRleDogZ21wLTQuMi4xL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTQuMi4xLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBnbXAtNC4yLjEvTWFrZWZpbGUuYW0KK0BAIC0yNyw3ICsyNyw3IEBACisgIyBNYWtlZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMsIGJ1dCBoZXJlIHdlIG11c3Qgb21pdCBpdCBzbyBhdXRvbWFrZSBnaXZlcworICMgdGhlIGFjdHVhbCBhbnNpMmtuciBidWlsZCBydWxlLCBub3QgImNkICQodG9wX2J1aWxkZGlyKSAmJiBtYWtlIGFuc2kya25yIi4KKyAjCistQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzIGFuc2kya25yCisrQVVUT01BS0VfT1BUSU9OUyA9IDEuOCBnbnUgbm8tZGVwZW5kZW5jaWVzCisgCisgCisgIyBMaWJ0b29sIC12ZXJzaW9uLWluZm8gZm9yIGxpYmdtcC5sYSBhbmQgbGlibXAubGEuICBTZWUgIlZlcnNpb25pbmciIGluIHRoZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hbWQ2NC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY0ZDEyZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYW1kNjQucGF0Y2gKQEAgLTAsMCArMSwxOCBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luZGV4OiBnbXAtNS4wLjMvbG9uZ2xvbmcuaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC01LjAuMy5vcmlnL2xvbmdsb25nLmgKKysrKyBnbXAtNS4wLjMvbG9uZ2xvbmcuaAorQEAgLTk5NCw4ICs5OTQsMTAgQEAgZXh0ZXJuIFVXdHlwZSBfX01QTih1ZGl2X3Fybm5kKSBfUFJPVE8gKAorICAgIGNvdW50IGlzIG9ubHkgYW4gaW50LiAqLworICNkZWZpbmUgY291bnRfdHJhaWxpbmdfemVyb3MoY291bnQsIHgpCQkJCQlcCisgICBkbyB7CQkJCQkJCQkJXAorKyAgICBVREl0eXBlIF9fY2J0bXA7CQkJCQkJCVwKKyAgICAgQVNTRVJUICgoeCkgIT0gMCk7CQkJCQkJCVwKKy0gICAgX19hc21fXyAoImJzZnEgJTEsJXEwIiA6ICI9ciIgKGNvdW50KSA6ICJybSIgKChVREl0eXBlKSh4KSkpOwlcCisrICAgIF9fYXNtX18gKCJic2ZxICUxLCUwIiA6ICI9ciIgKF9fY2J0bXApIDogInJtIiAoKFVESXR5cGUpKHgpKSk7CVwKKysgICAgKGNvdW50KSA9IF9fY2J0bXA7CQkJCQkJCVwKKyAgIH0gd2hpbGUgKDApCisgI2VuZGlmIC8qIHg4Nl82NCAqLworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9hcHBlbmRfdXNlcl9wcm92aWRlZF9mbGFncy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxMzg2YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXAtNi4wLjAvYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2gKQEAgLTAsMCArMSw1MiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK0FwcGVuZCB0aGUgdXNlciBwcm92aWRlZCBmbGFncyB0byB0aGUgYXV0by1kZXRlY3RlZCBvbmVzLgorCitTaWduZWQtb2ZmLWJ5OiBMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+CisKK0luZGV4OiBnbXAtNS4xLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ21wLTUuMS4xLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDItMTEgMTU6MDU6NDQuOTI1MjAyNDAzICswMjAwCisrKysgZ21wLTUuMS4xL2NvbmZpZ3VyZS5hYwkyMDE0LTAyLTExIDE1OjE5OjAzLjkxODUxMTM5OCArMDIwMAorQEAgLTE3NDUsOCArMTc0NSwxMiBAQAorIEVPRgorIAorIAorLXRlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KKy10ZXN0X0NQUEZMQUdTPSR7Q1BQRkxBR1Mrc2V0fQorK3Rlc3RfQ0ZMQUdTPQorK3Rlc3RfQ1BQRkxBR1M9CisrCisrdXNlcl9DRkxBR1M9JENGTEFHUworK3VzZXJfQ1BQRkxBR1M9JENQUEZMQUdTCisrdXNlcl9DWFhGTEFHUz0kQ1hYRkxBR1MKKyAKKyBmb3IgYWJpIGluICRhYmlsaXN0OyBkbworICAgYWJpX2xhc3Q9IiRhYmkiCitAQCAtMjE3NSw3ICsyMTc5LDcgQEAKKyB3YW50X2N4eD1ubworIEFDX1BST0dfQ1hYCisgaWYgdGVzdCAkZW5hYmxlX2N4eCAhPSBubzsgdGhlbgorLSAgdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKysgIHRlc3RfQ1hYRkxBR1M9CisgCisgICBlY2hvICJDWFhGTEFHUyBjaG9zZW4gYnkgYXV0b2NvbmY6ICRDWFhGTEFHUyIgPiZBU19NRVNTQUdFX0xPR19GRCgpCisgICBjeHhmbGFnc19hY19wcm9nX2N4eD0kQ1hYRkxBR1MKK0BAIC0yMjAyLDcgKzIyMDYsNyBAQAorICAgIyBBdXRvbWFrZSBpbmNsdWRlcyAkQ1BQRkxBR1MgaW4gYSBDKysgY29tcGlsZSwgc28gd2UgZG8gdGhlIHNhbWUgaGVyZS4KKyAgICMKKyAgIGZvciBjeHhmbGFnc19jaG9pY2UgaW4gJGN4eGZsYWdzX2xpc3Q7IGRvCistICAgIGV2YWwgQ1hYRkxBR1M9XCJcJGN4eGZsYWdzXyRjeHhmbGFnc19jaG9pY2VcIgorKyAgICBldmFsIENYWEZMQUdTPVwiXCRjeHhmbGFnc18kY3h4ZmxhZ3NfY2hvaWNlICR1c2VyX0NYWEZMQUdTXCIKKyAgICAgR01QX1BST0dfQ1hYX1dPUktTKCRDWFggJENQUEZMQUdTICRDWFhGTEFHUywKKyAgICAgICBbd2FudF9jeHg9eWVzCisgICAgICAgYnJlYWtdKQorQEAgLTIyOTIsNiArMjI5Niw4IEBACisgIyAgZG9uZQorIGZpCisgCisrQ0ZMQUdTPSIkQ0ZMQUdTICR1c2VyX0NGTEFHUyIKKytDUFBGTEFHUz0iJENQUEZMQUdTICR1c2VyX0NQUEZMQUdTIgorIAorIGNhdCA+JkFTX01FU1NBR0VfTE9HX0ZEKCkgPDxFT0YKKyBEZWNpZGVkOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2NvbmZpZ3VyZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDlkYTNjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwyMjIgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitVcGRhdGVkIHRvIGFwcGx5IHRvIGdtcC01LjEuMAorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorCistLS0KKyBhY2luY2x1ZGUubTQgfCAzMiArKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQorIGNvbmZpZ3VyZS5hYyB8IDI2ICsrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCisgMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNAoraW5kZXggMjI3NzEyYS4uMTk5YWE2ZiAxMDA2NDQKKy0tLSBhL2FjaW5jbHVkZS5tNAorKysrIGIvYWNpbmNsdWRlLm00CitAQCAtNDAsMjkgKzQwLDI5IEBAIGRubCAgICBhX291dC5leGUgLSBPcGVuVk1TIERFQyBDIGNhbGxlZCB2aWEgR05WIHdyYXBwZXIgKGdudi5zb3VyY2Vmb3JnZS5uZXQpCisgZG5sICAgIGNvbmZ0ZXN0LmV4ZSAtIHZhcmlvdXMgRE9TIGNvbXBpbGVycworIAorIAorLWRlZmluZShJQTY0X1BBVFRFUk4sCisrZGVmaW5lKFtJQTY0X1BBVFRFUk5dLAorIFtbaWE2NCotKi0qIHwgaXRhbml1bS0qLSogfCBpdGFuaXVtMi0qLSpdXSkKKyAKKyBkbmwgIE5lZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gbWF0Y2ggbTY4MTEsIG02ODEyLCBtNjhoYzExIGFuZCBtNjhoYzEyLCBhbGwKKyBkbmwgIG9mIHdoaWNoIGNvbmZpZy5zdWIgYWNjZXB0cy4gIChUaG91Z2ggbm9uZSBvZiB3aGljaCBhcmUgbGlrZWx5IHRvIHdvcmsKKyBkbmwgIHdpdGggR01QLikKKyBkbmwKKy1kZWZpbmUoTTY4S19QQVRURVJOLAorK2RlZmluZShbTTY4S19QQVRURVJOXSwKKyBbW202OGstKi0qIHwgbTY4WzAtOV1bMC05XVswLTldLSotKl1dKQorIAorLWRlZmluZShQT1dFUlBDNjRfUEFUVEVSTiwKKytkZWZpbmUoW1BPV0VSUEM2NF9QQVRURVJOXSwKKyBbW3Bvd2VycGM2NC0qLSogfCBwb3dlcnBjNjRsZS0qLSogfCBwb3dlcnBjNjIwLSotKiB8IHBvd2VycGM2MzAtKi0qIHwgcG93ZXJwYzk3MC0qLSogfCBwb3dlclszLTldLSotKl1dKQorIAorLWRlZmluZShTMzkwX1BBVFRFUk4sCisrZGVmaW5lKFtTMzkwX1BBVFRFUk5dLAorIFtbczM5MC0qLSogfCB6OTAwZXNhLSotKiB8IHo5OTBlc2EtKi0qIHwgejllc2EtKi0qIHwgejEwZXNhLSotKiB8IHoxOTZlc2EtKi0qXV0pCisgCistZGVmaW5lKFMzOTBYX1BBVFRFUk4sCisrZGVmaW5lKFtTMzkwWF9QQVRURVJOXSwKKyBbW3MzOTB4LSotKiB8IHo5MDAtKi0qIHwgejk5MC0qLSogfCB6OS0qLSogfCB6MTAtKi0qIHwgejE5Ni0qLSpdXSkKKyAKKy1kZWZpbmUoWDg2X1BBVFRFUk4sCisrZGVmaW5lKFtYODZfUEFUVEVSTl0sCisgW1tpPzg2Ki0qLSogfCBrWzUtOF0qLSotKiB8IHBlbnRpdW0qLSotKiB8IGF0aGxvbi0qLSogfCB2aWFjMyotKi0qIHwgZ2VvZGUqLSotKiB8IGF0b20tKi0qXV0pCisgCistZGVmaW5lKFg4Nl82NF9QQVRURVJOLAorK2RlZmluZShbWDg2XzY0X1BBVFRFUk5dLAorIFtbYXRobG9uNjQtKi0qIHwgazgtKi0qIHwgazEwLSotKiB8IGJvYmNhdC0qLSogfCBqYWd1YXItKi0qIHwgYnVsbGRvemVyLSotKiB8IHBpbGVkcml2ZXItKi0qIHwgc3RlYW1yb2xsZXItKi0qIHwgZXhjYXZhdG9yLSotKiB8IHBlbnRpdW00LSotKiB8IGF0b20tKi0qIHwgY29yZTItKi0qIHwgY29yZWkqLSotKiB8IHg4Nl82NC0qLSogfCBuYW5vLSotKl1dKQorIAorIGRubCAgR01QX0ZBVF9TVUZGSVgoRFNUVkFSLCBESVJFQ1RPUlkpCitAQCAtODAsNyArODAsNyBAQCBkbmwgICAgICB4ODYgICAgICAgICAtPiAgeDg2CisgZG5sICAgICAgeDg2L2s2ICAgICAgLT4gIGs2CisgZG5sICAgICAgeDg2L2s2L21teCAgLT4gIGs2X21teAorIAorLWRlZmluZShHTVBfRkFUX1NVRkZJWCwKKytkZWZpbmUoW0dNUF9GQVRfU1VGRklYXSwKKyBbWyQxPWBlY2hvICQyIHwgc2VkIC1lICcvXC8vczpeW14vXSovOjonIC1lICdzOltcXC9dOl86ZydgXV0pCisgCisgCitAQCAtODksNyArODksNyBAQCBkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbmwgIEVtaXQgY29kZSB0byByZW1vdmUgYW55IG9jY3VycmVuY2Ugb2YgSVRFTSBmcm9tICRMSVNUVkFSLiAgSVRFTSBjYW4gYmUgYQorIGRubCAgc2hlbGwgZXhwcmVzc2lvbiBsaWtlICRmb28gaWYgZGVzaXJlZC4KKyAKKy1kZWZpbmUoR01QX1JFTU9WRV9GUk9NX0xJU1QsCisrZGVmaW5lKFtHTVBfUkVNT1ZFX0ZST01fTElTVF0sCisgW3JlbW92ZV9mcm9tX2xpc3RfdG1wPQorIGZvciByZW1vdmVfZnJvbV9saXN0X2kgaW4gJFtdWyQxXTsgZG8KKyAgIGlmIHRlc3QgJHJlbW92ZV9mcm9tX2xpc3RfaSA9IFskMl07IHRoZW4gOjsKK0BAIC0xMDUsMTIgKzEwNSwxMiBAQCBkbmwgIEdNUF9TVFJJUF9QQVRIKHN1YmRpcikKKyBkbmwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBkbmwgIFN0cmlwIGVudHJpZXMgKi9zdWJkaXIgZnJvbSAkcGF0aCBhbmQgJGZhdF9wYXRoLgorIAorLWRlZmluZShHTVBfU1RSSVBfUEFUSCwKKytkZWZpbmUoW0dNUF9TVFJJUF9QQVRIXSwKKyBbR01QX1NUUklQX1BBVEhfVkFSKHBhdGgsIFskMV0pCisgR01QX1NUUklQX1BBVEhfVkFSKGZhdF9wYXRoLCBbJDFdKQorIF0pCisgCistZGVmaW5lKEdNUF9TVFJJUF9QQVRIX1ZBUiwKKytkZWZpbmUoW0dNUF9TVFJJUF9QQVRIX1ZBUl0sCisgW3RtcF9wYXRoPQorIGZvciBpIGluICRbXVskMV07IGRvCisgICBjYXNlICRpIGluCitAQCAtMTMxLDcgKzEzMSw3IEBAIGRubAorIGRubCAgRHVtbXkgdmFsdWUgZm9yIEdNUF9MSU1CX0JJVFMgaXMgZW5vdWdoCisgZG5sICBmb3IgYWxsIGN1cnJlbnQgY29uZmlndXJlLXRpbWUgdXNlcyBvZiBnbXAuaC4KKyAKKy1kZWZpbmUoR01QX0lOQ0xVREVfR01QX0gsCisrZGVmaW5lKFtHTVBfSU5DTFVERV9HTVBfSF0sCisgW1sjZGVmaW5lIF9fR01QX1dJVEhJTl9DT05GSUdVUkUgMSAgIC8qIGlnbm9yZSB0ZW1wbGF0ZSBzdHVmZiAqLworICNkZWZpbmUgR01QX05BSUxfQklUUyAkR01QX05BSUxfQklUUworICNkZWZpbmUgR01QX0xJTUJfQklUUyAxMjMKK0BAIC0xNDYsNyArMTQ2LDcgQEAgZG5sICBFeHBhbmQgYXQgYXV0b2NvbmYgdGltZSB0byB0aGUgdmFsdWUgb2YgYSAiI2RlZmluZSBOQU1FIiBmcm9tIHRoZSBnaXZlbgorIGRubCAgRklMRS4gIFRoZSByZWdleHBzIGhlcmUgYXJlbid0IHZlcnkgcnVnZ2VkLCBidXQgYXJlIGVub3VnaCBmb3IgZ21wLgorIGRubCAgL2Rldi9udWxsIGFzIGEgcGFyYW1ldGVyIHByZXZlbnRzIGEgaGFuZyBpZiAkMiBpcyBhY2NpZGVudGFsbHkgb21pdHRlZC4KKyAKKy1kZWZpbmUoR01QX0hFQURFUl9HRVRWQUwsCisrZGVmaW5lKFtHTVBfSEVBREVSX0dFVFZBTF0sCisgW3BhdHN1YnN0KHBhdHN1YnN0KAorIGVzeXNjbWQoW2dyZXAgIl4jZGVmaW5lICQxICIgJDIgL2Rldi9udWxsIDI+L2Rldi9udWxsXSksCisgW14uKiQxWyAJXStdLFtdKSwKK0BAIC0xNjAsNyArMTYwLDcgQEAgZG5sICBUaGUgZ21wIHZlcnNpb24gbnVtYmVyLCBleHRyYWN0ZWQgZnJvbSB0aGUgI2RlZmluZXMgaW4gZ21wLWguaW4gYXQKKyBkbmwgIGF1dG9jb25mIHRpbWUuICBUd28gZGlnaXRzIGxpa2UgMy4wIGlmIHBhdGNobGV2ZWwgPD0gMCwgb3IgdGhyZWUgZGlnaXRzCisgZG5sICBsaWtlIDMuMC4xIGlmIHBhdGNobGV2ZWwgPiAwLgorIAorLWRlZmluZShHTVBfVkVSU0lPTiwKKytkZWZpbmUoW0dNUF9WRVJTSU9OXSwKKyBbR01QX0hFQURFUl9HRVRWQUwoX19HTlVfTVBfVkVSU0lPTixnbXAtaC5pbilbXWRubAorIC5HTVBfSEVBREVSX0dFVFZBTChfX0dOVV9NUF9WRVJTSU9OX01JTk9SLGdtcC1oLmluKVtdZG5sCisgLkdNUF9IRUFERVJfR0VUVkFMKF9fR05VX01QX1ZFUlNJT05fUEFUQ0hMRVZFTCxnbXAtaC5pbildKQorQEAgLTE1MjQsNyArMTUyNCw5IEBAIGVzYWMKKyBlY2hvIFsiZGVmaW5lKDxDT05GSUdfVE9QX1NSQ0RJUj4sPFxgJHRtcCc+KSJdID4+JGdtcF90bXBjb25maWdtNAorIAorICMgQWxsIENQVXMgdXNlIGFzbS1kZWZzLm00CistZWNobyBbImluY2x1ZGVdWyhDT05GSUdfVE9QX1NSQ0RJUlxgL21wbi9hc20tZGVmcy5tNCcpIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorK2VjaG8gLW4gWyJpbmNsdWRlKCJdID4+JGdtcF90bXBjb25maWdtNGkKKytlY2hvIC1uIFsiQ09ORklHX1RPUF9TUkNESVJcYC9tcG4vYXNtLWRlZnMubTQnIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorK2VjaG8gWyIpIl0gPj4kZ21wX3RtcGNvbmZpZ200aQorIF0pCisgCisgCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA2NGIyYzUwLi5mMDdiODIxIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0zOSwxNCArMzksNiBAQCBBQ19SRVZJU0lPTigkUmV2aXNpb24kKQorIEFDX1BSRVJFUSgyLjU5KQorIEFDX0lOSVQoR05VIE1QLCBHTVBfVkVSU0lPTiwgW2dtcC1idWdzQGdtcGxpYi5vcmcsIHNlZSBodHRwczovL2dtcGxpYi5vcmcvbWFudWFsL1JlcG9ydGluZy1CdWdzLmh0bWxdLCBnbXApCisgQUNfQ09ORklHX1NSQ0RJUihnbXAtaW1wbC5oKQorLW00X3BhdHRlcm5fZm9yYmlkKFteWyBcdF0qR01QX10pCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTERGTEFHUykKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9MSU1CX0JJVFMpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTVBBUkFNX0hfU1VHR0VTVCkKKy1tNF9wYXR0ZXJuX2FsbG93KEdNUF9OQUlMX0JJVFMpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfTlVNQl9CSVRTKQorLW00X3BhdHRlcm5fYWxsb3coR01QX05PTlNURF9BQkkpCistbTRfcGF0dGVybl9hbGxvdyhHTVBfQ1BVX1RZUEUpCisgCisgIyBJZiAtLXRhcmdldCBpcyBub3QgdXNlZCB0aGVuICR0YXJnZXRfYWxpYXMgaXMgZW1wdHksIGJ1dCBpZiBzYXkKKyAjICIuL2NvbmZpZ3VyZSBhdGhsb24tcGMtZnJlZWJzZDMuNSIgaXMgdXNlZCwgdGhlbiBhbGwgdGhyZWUgb2YKK0BAIC0zNDgsNyArMzQwLDcgQEAgQUhfVkVSQkFUSU0oW0hBVkVfSE9TVF9DUFVfMV0sCisgIyBBZnRlciBHTVAgc3BlY2lmaWMgc2VhcmNoZXMgYW5kIHRlc3RzLCB0aGUgc3RhbmRhcmQgYXV0b2NvbmYgQUNfUFJPR19DQyBpcworICMgY2FsbGVkLiAgVXNlciBzZWxlY3Rpb25zIG9mIENDIGV0YyBhcmUgcmVzcGVjdGVkLgorICMKKy0jIENhcmUgaXMgdGFrZW4gbm90IHRvIHVzZSBtYWNyb3MgbGlrZSBBQ19UUllfQ09NUElMRSBkdXJpbmcgdGhlIEdNUAorKyMgQ2FyZSBpcyB0YWtlbiBub3QgdG8gdXNlIG1hY3JvcyBsaWtlIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLFtdLFtdKSBkdXJpbmcgdGhlIEdNUAorICMgcHJlLXRlc3RpbmcsIHNpbmNlIHRoZXkgb2YgY291cnNlIGRlcGVuZCBvbiBBQ19QUk9HX0NDLCBhbmQgYWxzbyBzb21lIG9mCisgIyB0aGVtIGNhY2hlIHRoZWlyIHJlc3VsdHMsIHdoaWNoIGlzIG5vdCB3YW50ZWQuCisgIworQEAgLTQ0MCw3ICs0MzIsNyBAQCBhYmlsaXN0PSJzdGFuZGFyZCIKKyAjIEZJWE1FOiBXZSdkIGxpa2UgdG8gcHJlZmVyIGFuIEFOU0kgY29tcGlsZXIsIHBlcmhhcHMgYnkgcHJlZmVycmluZworICMgYzg5IG92ZXIgY2MgaGVyZS4gIEJ1dCBub3RlIHRoYXQgb24gSFAtVVggYzg5IHByb3ZpZGVzIGEgY2FzdHJhdGVkCisgIyBlbnZpcm9ubWVudCwgYW5kIHdvdWxkIHdhbnQgdG8gYmUgZXhjbHVkZWQgc29tZWhvdy4gIE1heWJlCistIyBBQ19QUk9HX0NDX1NUREMgYWxyZWFkeSBkb2VzIGVub3VnaCB0byBzdGljayBjYyBpbnRvIEFOU0kgbW9kZSBhbmQKKysjICBhbHJlYWR5IGRvZXMgZW5vdWdoIHRvIHN0aWNrIGNjIGludG8gQU5TSSBtb2RlIGFuZAorICMgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeS4KKyAjCisgY2NsaXN0PSJnY2MgY2MiCitAQCAtMTg0Myw3ICsxODM1LDcgQEAgZXNhYworIENGTEFHU19vcl91bnNldD0ke0NGTEFHUy0nKHVuc2V0KSd9CisgQ1BQRkxBR1Nfb3JfdW5zZXQ9JHtDUFBGTEFHUy0nKHVuc2V0KSd9CisgCistY2F0ID4mQUNfRkRfQ0MgPDxFT0YKKytjYXQgPiZBU19NRVNTQUdFX0xPR19GRCgpIDw8RU9GCisgVXNlcjoKKyBBQkk9JEFCSQorIENDPSRDQworQEAgLTIyNjQsNyArMjI1Niw2IEBAIEFDX1NVQlNUKERFRk5fTE9OR19MT05HX0xJTUIpCisgCisgIyBUaGUgQyBjb21waWxlciBhbmQgcHJlcHJvY2Vzc29yLCBwdXQgaW50byBBTlNJIG1vZGUgaWYgcG9zc2libGUuCisgQUNfUFJPR19DQworLUFDX1BST0dfQ0NfU1REQworIEFDX1BST0dfQ1BQCisgCisgCitAQCAtMjI4NiwxMSArMjI3NywxMSBAQCBBQ19TVUJTVChDQ0FTKQorIAorICMgVGhlIEMrKyBjb21waWxlciwgaWYgZGVzaXJlZC4KKyB3YW50X2N4eD1ubworK0FDX1BST0dfQ1hYCisgaWYgdGVzdCAkZW5hYmxlX2N4eCAhPSBubzsgdGhlbgorICAgdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KKy0gIEFDX1BST0dfQ1hYCisgCistICBlY2hvICJDWFhGTEFHUyBjaG9zZW4gYnkgYXV0b2NvbmY6ICRDWFhGTEFHUyIgPiZBQ19GRF9DQworKyAgZWNobyAiQ1hYRkxBR1MgY2hvc2VuIGJ5IGF1dG9jb25mOiAkQ1hYRkxBR1MiID4mQVNfTUVTU0FHRV9MT0dfRkQoKQorICAgY3h4ZmxhZ3NfYWNfcHJvZ19jeHg9JENYWEZMQUdTCisgICBjeHhmbGFnc19saXN0PWFjX3Byb2dfY3h4CisgCitAQCAtMjQxMiw3ICsyNDAzLDcgQEAgaWYgdGVzdCAiJGVuYWJsZV9hc3NlbWJseSIgPSAibm8iOyB0aGVuCisgZmkKKyAKKyAKKy1jYXQgPiZBQ19GRF9DQyA8PEVPRgorK2NhdCA+JkFTX01FU1NBR0VfTE9HX0ZEKCkgPDxFT0YKKyBEZWNpZGVkOgorIEFCST0kQUJJCisgQ0M9JENDCitAQCAtMzc4MSw3ICszNzcyLDcgQEAgR01QX0ZJTklTSAorICMgRklYTUU6IFVwY29taW5nIHZlcnNpb24gb2YgYXV0b2NvbmYvYXV0b21ha2UgbWF5IG5vdCBsaWtlIGJyb2tlbiBsaW5lcy4KKyAjICAgICAgICBSaWdodCBub3cgYXV0b21ha2UgaXNuJ3QgYWNjZXB0aW5nIHRoZSBuZXcgQUNfQ09ORklHX0ZJTEVTIHNjaGVtZS4KKyAKKy1BQ19PVVRQVVQoTWFrZWZpbGUJCQkJCQkJXAorK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUJCQkJCQkJXAorICAgbXBmL01ha2VmaWxlIG1wbi9NYWtlZmlsZSBtcHEvTWFrZWZpbGUJCQkJXAorICAgbXB6L01ha2VmaWxlIHByaW50Zi9NYWtlZmlsZSBzY2FuZi9NYWtlZmlsZSByYW5kL01ha2VmaWxlIGN4eC9NYWtlZmlsZSBcCisgICB0ZXN0cy9NYWtlZmlsZSB0ZXN0cy9kZXZlbC9NYWtlZmlsZQkJCQkJXAorQEAgLTM3OTAsNyArMzc4MSw4IEBAIEFDX09VVFBVVChNYWtlZmlsZQkJCQkJCQlcCisgICB0ZXN0cy9jeHgvTWFrZWZpbGUJCQkJCQkJXAorICAgZG9jL01ha2VmaWxlIHR1bmUvTWFrZWZpbGUJCQkJCQlcCisgICBkZW1vcy9NYWtlZmlsZSBkZW1vcy9jYWxjL01ha2VmaWxlIGRlbW9zL2V4cHIvTWFrZWZpbGUJCVwKKy0gIGdtcC5oOmdtcC1oLmluKQorKyAgZ21wLmg6Z21wLWguaW5dKQorK0FDX09VVFBVVAorIAorIEFDX01TR19OT1RJQ0UoW3N1bW1hcnkgb2YgYnVpbGQgb3B0aW9uczoKKyAKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL2dtcC02LjAuMC1wcGM2NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTEzYjQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC9nbXAtNi4wLjAtcHBjNjQucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorCitTaWduZWQtb2ZmLWJ5OiBBcm1pbiBLdXN0ZXIgPGFrdXN0ZXI4MDhAZ21haWwuY29tPgorCitUaGlzIHBhdGNoIHdpdGggcHVsbGVkIGZyb20gZ21wLgoraHR0cHM6Ly9nbXBsaWIub3JnL3JlcG8vZ21wL3Jldi80YTZkMjU4YjQ2N2YKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgVXNlciBUb3Jiam9ybiBHcmFubHVuZCA8dGVnZUBnbXBsaWIub3JnPgorIyBEYXRlIDEzOTU4MzUwNjggLTM2MDAKKyMgTm9kZSBJRCA0YTZkMjU4YjQ2N2Y2NjFkYTA4OTRjYzYwZWNkMDYwZjJlM2M2N2M3CisjIFBhcmVudCAgMzAxY2UyNzg4ODI2YTJkNGQyNzI1YmQ1Y2YwMWU5OTg2MzhkYjM3YQorUHJvdmlkZSBkZWZhdWx0IGZvciBCTU9EXzFfVE9fTU9EXzFfVEhSRVNIT0xELgorCitkaWZmIC1yIDMwMWNlMjc4ODgyNiAtciA0YTZkMjU4YjQ2N2YgbXBuL3Bvd2VycGM2NC9tb2RlNjQvZ2NkXzEuYXNtCistLS0gYS9tcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMS5hc20gICAgVHVlIE1hciAyNSAxNTozNDo1MiAyMDE0ICswMTAwCisrKysgYi9tcG4vcG93ZXJwYzY0L21vZGU2NC9nY2RfMS5hc20gICAgV2VkIE1hciAyNiAxMjo1Nzo0OCAyMDE0ICswMTAwCitAQCAtNDMsNiArNDMsOSBAQAorIGRlZmluZShgbicsICAgICBgcjQnKQorIGRlZmluZShgdjAnLCAgICBgcjUnKQorCisraWZkZWYoYEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQnLCwKKysgIGBkZWZpbmUoYEJNT0RfMV9UT19NT0RfMV9USFJFU0hPTEQnLDMwKScpCisrCisgRVhURVJOX0ZVTkMobXBuX21vZF8xKQorIEVYVEVSTl9GVU5DKG1wbl9tb2RleGFjdF8xY19vZGQpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLTYuMC4wL3VzZS1pbmNsdWRlZGlyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDkwNGEyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC02LjAuMC91c2UtaW5jbHVkZWRpci5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworSW5kZXg6IGdtcC00LjIuNC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdtcC00LjIuNC5vcmlnL01ha2VmaWxlLmFtCTIwMDgtMDktMTAgMTk6MzE6MjcuMDAwMDAwMDAwICswMDAwCisrKysgZ21wLTQuMi40L01ha2VmaWxlLmFtCTIwMDktMDctMDYgMjA6MTk6MTkuMDAwMDAwMDAwICswMDAwCitAQCAtMTA2LDcgKzEwNiw3IEBACisgIyBidXQgYW55b25lIGtub3dsZWRnYWJsZSBlbm91Z2ggdG8gYmUgcGxheWluZyB3aXRoIGV4ZWNfcHJlZml4IHdpbGwgYmUgYWJsZQorICMgdG8gYWRkcmVzcyB0aGF0LgorICMKKy1pbmNsdWRlZXhlY2RpciA9ICQoZXhlY19wcmVmaXgpL2luY2x1ZGUKKytpbmNsdWRlZXhlY2RpciA9ICQoaW5jbHVkZWRpcikKKyBpbmNsdWRlX0hFQURFUlMgPSAkKEdNUFhYX0hFQURFUlNfT1BUSU9OKQorIG5vZGlzdF9pbmNsdWRlZXhlY19IRUFERVJTID0gZ21wLmggJChNUEJTRF9IRUFERVJTX09QVElPTikKKyBsaWJfTFRMSUJSQVJJRVMgPSBsaWJnbXAubGEgJChHTVBYWF9MVExJQlJBUklFU19PUFRJT04pICQoTVBCU0RfTFRMSUJSQVJJRVNfT1BUSU9OKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbXAvZ21wLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzUyYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcC5pbmMKQEAgLTAsMCArMSwxNiBAQAorU0VDVElPTiA9ICJkZXZlbCIKK1NVTU1BUlkgPSAiR05VIG11bHRpcHJlY2lzaW9uIGFyaXRobWV0aWMgbGlicmFyeSIKK0RFU0NSSVBUSU9OID0gIkdNUCBpcyBhIGZyZWUgbGlicmFyeSBmb3IgYXJiaXRyYXJ5IHByZWNpc2lvbiBhcml0aG1ldGljLCBvcGVyYXRpbmcgb24gc2lnbmVkIGludGVnZXJzLCByYXRpb25hbCBudW1iZXJzLCBhbmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyIKK0hPTUVQQUdFID0gImh0dHA6Ly9nbXBsaWIub3JnLyIKKworUkVWSVNJT04gPz0gIiIKK1NSQ19VUkkgPSAiaHR0cHM6Ly9nbXBsaWIub3JnL2Rvd25sb2FkLyR7QlBOfS8ke0JQfSR7UkVWSVNJT059LnRhci5iejIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbcmVhZGxpbmVdID0gIi0td2l0aC1yZWFkbGluZT15ZXMsLS13aXRoLXJlYWRsaW5lPW5vLHJlYWRsaW5lIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF80LjIuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4YzAxYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNC4yLjEuYmIKQEAgLTAsMCArMSwxNSBAQAorcmVxdWlyZSBnbXAuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjErICYgR1BMdjIrIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTg5MmY1NjlhNTU1YmE5YzA3YTU2OGE3YzBjNGZhNjNhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT1mYmMwOTM5MDE4NTdmY2QxMThmMDY1ZjkwMDk4MmMyNCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9nbXAtaC5pbjtiZWdpbmxpbmU9NjtlbmRsaW5lPTIxO21kNT1lMDU2Zjc0YTEyYzMyNzdkNzMwZGJjZmI4NWQyY2EzNCIKKworU1JDX1VSSSArPSAiZmlsZTovL2Rpc2FibGUtc3RkYy5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vZ21wX2ZpeF9mb3JfYXV0b21ha2UtMS4xMi5wYXRjaCBcCisgICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIwOTFjNTZlMGUxY2NhNmIwOWIxN2I2OWQ0N2VmMThlMyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkMDdmZmNiMzdlZWNlYzM1YzVlYzcyNTE2ZDEwYjM1ZmRmNmU2ZmVmMWZjZjFkY2QzN2UzMGI4Y2JmOGJmOTQxIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ21wL2dtcF82LjAuMC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNjNlNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dtcC9nbXBfNi4wLjAuYmIKQEAgLTAsMCArMSwzMyBAQAorcmVxdWlyZSBnbXAuaW5jCisKK0xJQ0VOU0U9IkdQTHYyKyB8IExHUEx2MysiCisKK1JFVklTSU9OPSJhIgorCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kMzIyMzliY2I2NzM0NjNhYjg3NGU4MGQ0N2ZhZTUwNCBcCisgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSdjM7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IFwKKyAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb25maWd1cmUucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2FtZDY0LnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtaW5jbHVkZWRpci5wYXRjaCBcCisgICAgICAgICAgICBmaWxlOi8vYXBwZW5kX3VzZXJfcHJvdmlkZWRfZmxhZ3MucGF0Y2ggXAorICAgICAgICAgICAgZmlsZTovL2dtcC02LjAuMC1wcGM2NC5wYXRjaCBcCisgICAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiYjdmZjJkODhjYWU3ZjgwODViZDUwMDYwOTZlZWQ0NzAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2Y4ZTlhODA0YjljNmQwNzE2NGNmNzU0MjA3YmU4MzhlY2UxMjE5NDI1ZDY0ZTI4Y2ZhM2U3MGQ1Yzc1OWFhZiIKKworYWNwYXRocyA9ICIiCisKK0VYVFJBX09FQ09ORiArPSAiIC0tZW5hYmxlLWN4eD1kZXRlY3QiCisKK1BBQ0tBR0VTID0rICJsaWJnbXB4eCIKK0ZJTEVTX2xpYmdtcHh4ID0gIiR7bGliZGlyfS9saWJnbXB4eCR7U09MSUJTfSIKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtdGFyZ2V0KCkgeworICAgICAgICBzZWQgLWkgInN8LS1zeXNyb290PSR7U1RBR0lOR19ESVJfSE9TVH18fGciICR7RH0ke2luY2x1ZGVkaXJ9L2dtcC5oCit9CisKK1NTVEFURV9TQ0FOX0ZJTEVTICs9ICJnbXAuaCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nLzAwMDEtZ3N5c3RlbS1zdWJwcm9jZXNzLmMtRW5hYmxlLUdOVS1leHRlbnNpb25zLWluLXN5c3RlbS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDA2NjZmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ25vbWUtZGVza3RvcC10ZXN0aW5nL2dub21lLWRlc2t0b3AtdGVzdGluZy8wMDAxLWdzeXN0ZW0tc3VicHJvY2Vzcy5jLUVuYWJsZS1HTlUtZXh0ZW5zaW9ucy1pbi1zeXN0ZW0ucGF0Y2gKQEAgLTAsMCArMSwzNSBAQAorRnJvbSBiMWRlMmM2MjkwYmMwNjUxZmU4N2E4YzRmYjUyZTdhMGE1ZmU2MzIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgNSBPY3QgMjAxNCAxNjowMTo0OSAtMDcwMAorU3ViamVjdDogW1BBVENIXSBnc3lzdGVtLXN1YnByb2Nlc3MuYzogRW5hYmxlIEdOVSBleHRlbnNpb25zIGluIHN5c3RlbSAgQworIGxpYnJhcnkKKworVGhpcyBzaG91bGQgZXhwb3J0IE9fQ0xPRVhFQyB3aGVyZSBpdCBpcyBvbmx5CithdmFpbGFibGUgd2hlbiBfR05VX1NPVVJDRSBpcyBkZWZpbmVkIC5lLmcuIHVjbGliYyBiYXNlZCBzeXN0ZW1zCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0KKyBzcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL3NyYy9saWJnc3lzdGVtL2dzeXN0ZW0tc3VicHJvY2Vzcy5jIGIvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKK2luZGV4IGE5Njc4OTYuLmE1MmEzNjIgMTAwNjQ0CistLS0gYS9zcmMvbGliZ3N5c3RlbS9nc3lzdGVtLXN1YnByb2Nlc3MuYworKysrIGIvc3JjL2xpYmdzeXN0ZW0vZ3N5c3RlbS1zdWJwcm9jZXNzLmMKK0BAIC0xOCw2ICsxOCwxMCBAQAorIAorICNpbmNsdWRlICJjb25maWcuaCIKKyAKKysjaWZuZGVmIF9HTlVfU09VUkNFCisrI2RlZmluZSBfR05VX1NPVVJDRQorKyNlbmRpZgorKworICNkZWZpbmUgX0dTWVNURU1fTk9fTE9DQUxfQUxMT0MKKyAjaW5jbHVkZSAibGliZ3N5c3RlbS5oIgorIAorLS0gCisyLjEuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dub21lLWRlc2t0b3AtdGVzdGluZy9nbm9tZS1kZXNrdG9wLXRlc3RpbmdfMjAxNC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MmRlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbm9tZS1kZXNrdG9wLXRlc3RpbmcvZ25vbWUtZGVza3RvcC10ZXN0aW5nXzIwMTQuMS5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIlRlc3QgcnVubmVyIGZvciBHTk9NRS1zdHlsZSBpbnN0YWxsZWQgdGVzdHMiCitIT01FUEFHRSA9ICJodHRwczovL3dpa2kuZ25vbWUub3JnL0dub21lR29hbHMvSW5zdGFsbGVkVGVzdHMiCitMSUNFTlNFID0gIkxHUEx2MisiCisKK1NSQ19VUkkgPSAiJHtHTk9NRV9NSVJST1J9LyR7QlBOfS8ke1BWfS8ke0JQTn0tJHtQVn0udGFyLnh6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtZ3N5c3RlbS1zdWJwcm9jZXNzLmMtRW5hYmxlLUdOVS1leHRlbnNpb25zLWluLXN5c3RlbS5wYXRjaCBcCisgICAgICAgICAgIgorU1JDX1VSSVttZDVzdW1dID0gImE2MDhhZDcyYTc3ZTIzYTFhZWNkZmQ4ZDA3YTk0YmFmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhM2VlZDczNjc4ZGQyMmQwOWQ2YTdlYzRmODk5NTU3ZGYzZThiNGE4MDJhZmZhNzZkMGYxNjNiMzEyODY1MzkiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTNiZjUwMDAyYWVmZDAwMmY0OWU3YmI4NTQwNjNmN2U3IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9nbm9tZS1kZXNrdG9wLXRlc3RpbmctcnVubmVyLmM7ZW5kbGluZT0xOTttZDU9NjczMTFhNjAwYjgzZmQwMDY4ZGZjN2U1Yjg0ZmZiM2YiCisKK0RFUEVORFMgPSAiZ2xpYi0yLjAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitQUiA9ICJyMSIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIiIKK1BBQ0tBR0VDT05GSUdbam91cm5hbGRdID0gIi0td2l0aC1zeXN0ZW1kLWpvdXJuYWwsLS13aXRob3V0LXN5c3RlbWQtam91cm5hbCxzeXN0ZW1kLHN5c3RlbWQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00MjQyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWFkZGNhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDI0Mi5wYXRjaApAQCAtMCwwICsxLDYyIEBACitGcm9tIGUyMjAyZmYyYjcwNDYyM2VmYzYyNzdmYjUyNTZlNGUxNWJhYzU2NzYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBXZXJuZXIgS29jaCA8d2tAZ251cGcub3JnPgorRGF0ZTogVGh1LCAyNSBKdWwgMjAxMyAxMToxNzo1MiArMDIwMAorU3ViamVjdDogW1BBVENIXSBNaXRpZ2F0ZSBhIGZsdXNoK3JlbG9hZCBjYWNoZSBhdHRhY2sgb24gUlNBIHNlY3JldAorIGV4cG9uZW50cy4KKworY29tbWl0IGUyMjAyZmYyYjcwNDYyM2VmYzYyNzdmYjUyNTZlNGUxNWJhYzU2NzYgZnJvbQorZ2l0Oi8vZ2l0LmdudXBnLm9yZy9saWJnY3J5cHQuZ2l0CisKKyogbXBpL21waS1wb3cuYyAoZ2NyeV9tcGlfcG93bSk6IEFsd2F5cyBwZXJmcm9tIHRoZSBtcGlfbXVsIGZvcgorZXhwb25lbnRzIGluIHNlY3VyZSBtZW1vcnkuCisKK1Vwc3RyZWFtLVN0YXR1czogQmFja3BvcnQKKworU2lnbmVkLW9mZi1ieTogS2FpIEthbmcgPGthaS5rYW5nQHdpbmRyaXZlci5jb20+CistLQorCitUaGUgYXR0YWNrIGlzIHB1Ymxpc2hlZCBhcyBodHRwOi8vZXByaW50LmlhY3Iub3JnLzIwMTMvNDQ4IDoKKworRmx1c2grUmVsb2FkOiBhIEhpZ2ggUmVzb2x1dGlvbiwgTG93IE5vaXNlLCBMMyBDYWNoZSBTaWRlLUNoYW5uZWwKK0F0dGFjayBieSBZdXZhbCBZYXJvbSBhbmQgS2F0cmluYSBGYWxrbmVyLiAxOCBKdWx5IDIwMTMuCisKKyAgRmx1c2grUmVsb2FkIGlzIGEgY2FjaGUgc2lkZS1jaGFubmVsIGF0dGFjayB0aGF0IG1vbml0b3JzIGFjY2VzcyB0bworICBkYXRhIGluIHNoYXJlZCBwYWdlcy4gSW4gdGhpcyBwYXBlciB3ZSBkZW1vbnN0cmF0ZSBob3cgdG8gdXNlIHRoZQorICBhdHRhY2sgdG8gZXh0cmFjdCBwcml2YXRlIGVuY3J5cHRpb24ga2V5cyBmcm9tIEdudVBHLiAgVGhlIGhpZ2gKKyAgcmVzb2x1dGlvbiBhbmQgbG93IG5vaXNlIG9mIHRoZSBGbHVzaCtSZWxvYWQgYXR0YWNrIGVuYWJsZXMgYSBzcHkKKyAgcHJvZ3JhbSB0byByZWNvdmVyIG92ZXIgOTglIG9mIHRoZSBiaXRzIG9mIHRoZSBwcml2YXRlIGtleSBpbiBhCisgIHNpbmdsZSBkZWNyeXB0aW9uIG9yIHNpZ25pbmcgcm91bmQuIFVubGlrZSBwcmV2aW91cyBhdHRhY2tzLCB0aGUKKyAgYXR0YWNrIHRhcmdldHMgdGhlIGxhc3QgbGV2ZWwgTDMgY2FjaGUuIENvbnNlcXVlbnRseSwgdGhlIHNweQorICBwcm9ncmFtIGFuZCB0aGUgdmljdGltIGRvIG5vdCBuZWVkIHRvIHNoYXJlIHRoZSBleGVjdXRpb24gY29yZSBvZgorICB0aGUgQ1BVLiBUaGUgYXR0YWNrIGlzIG5vdCBsaW1pdGVkIHRvIGEgdHJhZGl0aW9uYWwgT1MgYW5kIGNhbiBiZQorICB1c2VkIGluIGEgdmlydHVhbGlzZWQgZW52aXJvbm1lbnQsIHdoZXJlIGl0IGNhbiBhdHRhY2sgcHJvZ3JhbXMKKyAgZXhlY3V0aW5nIGluIGEgZGlmZmVyZW50IFZNLgorCitJbmRleDogZ251cGctMS40LjcvbXBpL21waS1wb3cuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvbXBpL21waS1wb3cuYworKysrIGdudXBnLTEuNC43L21waS9tcGktcG93LmMKK0BAIC0yMTIsNyArMjEyLDEzIEBAIG1waV9wb3dtKCBNUEkgcmVzLCBNUEkgYmFzZSwgTVBJIGV4cG9uZW4KKyAJCXRwID0gcnA7IHJwID0geHA7IHhwID0gdHA7CisgCQlyc2l6ZSA9IHhzaXplOworIAorLQkJaWYoIChtcGlfbGltYl9zaWduZWRfdCllIDwgMCApIHsKKysgICAgICAgICAgICAvKiBUbyBtaXRpZ2F0ZSB0aGUgWWFyb20vRmFsa25lciBmbHVzaCtyZWxvYWQgY2FjaGUKKysgICAgICAgICAgICAgKiBzaWRlLWNoYW5uZWwgYXR0YWNrIG9uIHRoZSBSU0Egc2VjcmV0IGV4cG9uZW50LCB3ZSBkbworKyAgICAgICAgICAgICAqIHRoZSBtdWx0aXBsaWNhdGlvbiByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiB0aGUKKysgICAgICAgICAgICAgKiBoaWdoLWJpdCBvZiBFLiAgQnV0IHRvIGF2b2lkIHRoaXMgcGVyZm9ybWFuY2UgcGVuYWx0eQorKyAgICAgICAgICAgICAqIHdlIGRvIGl0IG9ubHkgaWYgdGhlIGV4cG9uZW50IGhhcyBiZWVuIHN0b3JlZCBpbiBzZWN1cmUKKysgICAgICAgICAgICAgKiBtZW1vcnkgYW5kIHdlIGNhbiB0aHVzIGFzc3VtZSBpdCBpcyBhIHNlY3JldCBleHBvbmVudC4gICovCisrCQlpZiAoZXNlYyB8fCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDApIHsKKyAJCSAgICAvKm1waWhlbHBfbXVsKCB4cCwgcnAsIHJzaXplLCBicCwgYnNpemUgKTsqLworIAkJICAgIGlmKCBic2l6ZSA8IEtBUkFUU1VCQV9USFJFU0hPTEQgKSB7CisgCQkJbXBpaGVscF9tdWwoIHhwLCBycCwgcnNpemUsIGJwLCBic2l6ZSApOworQEAgLTIyNyw2ICsyMzMsOCBAQCBtcGlfcG93bSggTVBJIHJlcywgTVBJIGJhc2UsIE1QSSBleHBvbmVuCisgCQkJbXBpaGVscF9kaXZyZW0oeHAgKyBtc2l6ZSwgMCwgeHAsIHhzaXplLCBtcCwgbXNpemUpOworIAkJCXhzaXplID0gbXNpemU7CisgCQkgICAgfQorKwkJfQorKwkJaWYgKCAobXBpX2xpbWJfc2lnbmVkX3QpZSA8IDAgKSB7CisgCisgCQkgICAgdHAgPSBycDsgcnAgPSB4cDsgeHAgPSB0cDsKKyAJCSAgICByc2l6ZSA9IHhzaXplOwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDM1MS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5ZWRlNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L0NWRS0yMDEzLTQzNTEucGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZ251cGctMS40LjcvZzEwL2dldGtleS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9nMTAvZ2V0a2V5LmMJMjAwNy0wMy0wNSAxNjo1NDo0MS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAvZ2V0a2V5LmMJMjAxMy0xMS0yOCAxNDo0MTo1OS42NDAyMTIyNDAgKzA4MDAKK0BAIC0xNDU0LDcgKzE0NTQsMTEgQEAKKyAKKyAgICAgICBpZihmbGFncykKKyAJa2V5X3VzYWdlIHw9IFBVQktFWV9VU0FHRV9VTktOT1dOOworKyAgICAgIGlmICgha2V5X3VzYWdlKQorKwlrZXlfdXNhZ2UgfD0gUFVCS0VZX1VTQUdFX05PTkU7CisgICAgIH0KKysgIGVsc2UgaWYgKHApCisrICAgIGtleV91c2FnZSB8PSBQVUJLRVlfVVNBR0VfTk9ORTsKKyAKKyAgIC8qIFdlIHNldCBQVUJLRVlfVVNBR0VfVU5LTk9XTiB0byBpbmRpY2F0ZSB0aGF0IHRoaXMga2V5IGhhcyBhCisgICAgICBjYXBhYmlsaXR5IHRoYXQgd2UgZG8gbm90IGhhbmRsZS4gIFRoaXMgc2VydmVzIHRvIGRpc3Rpbmd1aXNoCitJbmRleDogZ251cGctMS40LjcvZzEwL2tleWdlbi5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9nMTAva2V5Z2VuLmMJMjAwNy0wMi0wNSAwMDoyNzo0MC4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9nMTAva2V5Z2VuLmMJMjAxMy0xMS0yOCAxNDo0MzowNS4wMTY2NzAwOTIgKzA4MDAKK0BAIC0yMDksOSArMjA5LDYgQEAKKyAgICAgaWYgKHVzZSAmIFBVQktFWV9VU0FHRV9BVVRIKQorICAgICAgICAgYnVmWzBdIHw9IDB4MjA7CisgCistICAgIGlmICghYnVmWzBdKSAKKy0gICAgICAgIHJldHVybjsKKy0KKyAgICAgYnVpbGRfc2lnX3N1YnBrdCAoc2lnLCBTSUdTVUJQS1RfS0VZX0ZMQUdTLCBidWYsIDEpOworIH0KKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9pbmNsdWRlL2NpcGhlci5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9pbmNsdWRlL2NpcGhlci5oCTIwMDYtMDQtMjEgMjA6Mzk6NDkuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvaW5jbHVkZS9jaXBoZXIuaAkyMDEzLTExLTI4IDE0OjQ5OjI0LjE1OTMyMjc0NCArMDgwMAorQEAgLTUyLDYgKzUyLDcgQEAKKyAjZGVmaW5lIFBVQktFWV9VU0FHRV9DRVJUICAgIDQgICAgICAvKiBrZXkgaXMgYWxzbyBnb29kIHRvIGNlcnRpZnkgb3RoZXIga2V5cyovCisgI2RlZmluZSBQVUJLRVlfVVNBR0VfQVVUSCAgICA4ICAgICAgLyoga2V5IGlzIGdvb2QgZm9yIGF1dGhlbnRpY2F0aW9uICovCisgI2RlZmluZSBQVUJLRVlfVVNBR0VfVU5LTk9XTiAxMjggICAgLyoga2V5IGhhcyBhbiB1bmtub3duIHVzYWdlIGJpdCAqLworKyNkZWZpbmUgUFVCS0VZX1VTQUdFX05PTkUgICAgMjU2ICAgIC8qIE5vIHVzYWdlIGdpdmVuLiAqLworIAorICNkZWZpbmUgRElHRVNUX0FMR09fTUQ1ICAgICAgIDEKKyAjZGVmaW5lIERJR0VTVF9BTEdPX1NIQTEgICAgICAyCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9DVkUtMjAxMy00NTc2LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWEyMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvQ1ZFLTIwMTMtNDU3Ni5wYXRjaApAQCAtMCwwICsxLDE1MyBAQAorVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitJbmRleDogZ251cGctMS40LjcvY2lwaGVyL2RzYS5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvZHNhLmMJMjAwNi0xMi0xMiAwMjoyNzoyMS4wMDAwMDAwMDAgKzA4MDAKKysrKyBnbnVwZy0xLjQuNy9jaXBoZXIvZHNhLmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0yODcsNiArMjg3LDggQEAKKyAgICAgTVBJIGtpbnY7CisgICAgIE1QSSB0bXA7CisgCisrICAgIG1waV9ub3JtYWxpemUgKGhhc2gpOworKworICAgICAvKiBzZWxlY3QgYSByYW5kb20gayB3aXRoIDAgPCBrIDwgcSAqLworICAgICBrID0gZ2VuX2soIHNrZXktPnEgKTsKKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvZWxnYW1hbC5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMS40Ljcub3JpZy9jaXBoZXIvZWxnYW1hbC5jCTIwMDYtMTItMTIgMDM6MDg6MDUuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL2VsZ2FtYWwuYwkyMDE0LTAxLTIzIDExOjMwOjE3LjMwMDkxNTkxOSArMDgwMAorQEAgLTM3Niw2ICszNzYsOSBAQAorIHsKKyAgICAgTVBJIHQxID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoIHNrZXktPnAgKSApOworIAorKyAgICBtcGlfbm9ybWFsaXplIChhKTsKKysgICAgbXBpX25vcm1hbGl6ZSAoYik7CisrCisgICAgIC8qIG91dHB1dCA9IGIvKGFeeCkgbW9kIHAgKi8KKyAgICAgbXBpX3Bvd20oIHQxLCBhLCBza2V5LT54LCBza2V5LT5wICk7CisgICAgIG1waV9pbnZtKCB0MSwgdDEsIHNrZXktPnAgKTsKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcmFuZG9tLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yYW5kb20uYwkyMDA2LTExLTAzIDE4OjA5OjM5LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uYwkyMDE0LTAxLTIzIDExOjMxOjUzLjk5MzQ5NTQ2MiArMDgwMAorQEAgLTI3Myw2ICsyNzMsMTggQEAKKyB9CisgCisgCisrLyogUmFuZG9taXplIHRoZSBNUEkgKi8gCisrdm9pZAorK3JhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKQorK3sKKysgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKysKKysgIGJ1ZmZlciA9IGdldF9yYW5kb21fYml0cyAobmJpdHMsIGxldmVsLCBtcGlfaXNfc2VjdXJlIChtcGkpKTsKKysgIG1waV9zZXRfYnVmZmVyIChtcGksIGJ1ZmZlciwgKG5iaXRzKzcpLzgsIDApOworKyAgeGZyZWUgKGJ1ZmZlcik7CisrfQorKworKworIGludAorIHJhbmRvbV9pc19mYWtlZCgpCisgeworSW5kZXg6IGdudXBnLTEuNC43L2NpcGhlci9yYW5kb20uaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY2lwaGVyL3JhbmRvbS5oCTIwMDYtMDItMDkgMTk6Mjk6MjkuMDAwMDAwMDAwICswODAwCisrKysgZ251cGctMS40LjcvY2lwaGVyL3JhbmRvbS5oCTIwMTQtMDEtMjMgMTE6MzA6MTcuMzAwOTE1OTE5ICswODAwCitAQCAtMzIsNiArMzIsNyBAQAorIGludCAgcmFuZG9tX2lzX2Zha2VkKHZvaWQpOworIHZvaWQgcmFuZG9tX2Rpc2FibGVfbG9ja2luZyAodm9pZCk7Cisgdm9pZCByYW5kb21pemVfYnVmZmVyKCBieXRlICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIGludCBsZXZlbCApOworK3ZvaWQgcmFuZG9taXplX21waSAoTVBJIG1waSwgc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwpOworIGJ5dGUgKmdldF9yYW5kb21fYml0cyggc2l6ZV90IG5iaXRzLCBpbnQgbGV2ZWwsIGludCBzZWN1cmUgKTsKKyB2b2lkIGZhc3RfcmFuZG9tX3BvbGwoIHZvaWQgKTsKKyAKK0luZGV4OiBnbnVwZy0xLjQuNy9jaXBoZXIvcnNhLmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuNy5vcmlnL2NpcGhlci9yc2EuYwkyMDA2LTEyLTEyIDAzOjA5OjAwLjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2NpcGhlci9yc2EuYwkyMDE0LTAxLTIzIDExOjM1OjA0LjMzMDYzOTEyNSArMDgwMAorQEAgLTMwMSw5ICszMDEsMjYgQEAKKyAjaWYgMAorICAgICBtcGlfcG93bSggb3V0cHV0LCBpbnB1dCwgc2tleS0+ZCwgc2tleS0+biApOworICNlbHNlCistICAgIE1QSSBtMSAgID0gbXBpX2FsbG9jX3NlY3VyZSggbXBpX2dldF9ubGltYnMoc2tleS0+bikrMSApOworLSAgICBNUEkgbTIgICA9IG1waV9hbGxvY19zZWN1cmUoIG1waV9nZXRfbmxpbWJzKHNrZXktPm4pKzEgKTsKKy0gICAgTVBJIGggICAgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyhza2V5LT5uKSsxICk7CisrICAgIGludCBubGltYnMgPSBtcGlfZ2V0X25saW1icyAoc2tleS0+bikrMTsKKysgICAgTVBJIG0xICAgPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgbTIgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrICAgIE1QSSBoICAgID0gbXBpX2FsbG9jX3NlY3VyZSAobmxpbWJzKTsKKysjIGlmIDEKKysgICAgTVBJIGJkYXRhPSBtcGlfYWxsb2Nfc2VjdXJlIChubGltYnMpOworKyAgICBNUEkgciAgICA9IG1waV9hbGxvY19zZWN1cmUgKG5saW1icyk7CisrIyBlbmRpZgorKworKyAgICAvKiBSZW1vdmUgc3VwZXJmbHVvdXMgbGVhZGluZyB6ZXJvZXMgZnJvbSBJTlBVVC4gICovCisrICAgIG1waV9ub3JtYWxpemUgKGlucHV0KTsKKysKKysjIGlmIDEgCisrICAgIC8qIEJsaW5kOiAgYmRhdGEgPSAoZGF0YSAqIHJeZSkgbW9kIG4gICAqLworKyAgICByYW5kb21pemVfbXBpIChyLCBtcGlfZ2V0X25iaXRzIChza2V5LT5uKSwgMCk7CisrICAgIG1waV9mZGl2X3IgKHIsIHIsIHNrZXktPm4pOworKyAgICBtcGlfcG93bSAoYmRhdGEsIHIsIHNrZXktPmUsIHNrZXktPm4pOworKyAgICBtcGlfbXVsbSAoYmRhdGEsIGJkYXRhLCBpbnB1dCwgc2tleS0+bik7CisrICAgIGlucHV0ID0gYmRhdGE7CisrIyBlbmRpZgorIAorICAgICAvKiBtMSA9IGMgXiAoZCBtb2QgKHAtMSkpIG1vZCBwICovCisgICAgIG1waV9zdWJfdWkoIGgsIHNrZXktPnAsIDEgICk7CitAQCAtMzIxLDggKzMzOCwxNSBAQAorICAgICAvKiBtID0gbTIgKyBoICogcCAqLworICAgICBtcGlfbXVsICggaCwgaCwgc2tleS0+cCApOworICAgICBtcGlfYWRkICggb3V0cHV0LCBtMSwgaCApOworLSAgICAvKiByZWFkeSAqLworLSAgICAKKysKKysjIGlmIDEKKysgICAgbXBpX2ZyZWUgKGJkYXRhKTsKKysgICAgLyogVW5ibGluZDogb3V0cHV0ID0gKG91dHB1dCAqIHJeKC0xKSkgbW9kIG4gICovCisrICAgIG1waV9pbnZtIChyLCByLCBza2V5LT5uKTsKKysgICAgbXBpX211bG0gKG91dHB1dCwgb3V0cHV0LCByLCBza2V5LT5uKTsKKysgICAgbXBpX2ZyZWUgKHIpOworKyMgZW5kaWYKKysKKyAgICAgbXBpX2ZyZWUgKCBoICk7CisgICAgIG1waV9mcmVlICggbTEgKTsKKyAgICAgbXBpX2ZyZWUgKCBtMiApOworQEAgLTM5Nyw2ICs0MjEsNyBAQAorIHJzYV9kZWNyeXB0KCBpbnQgYWxnbywgTVBJICpyZXN1bHQsIE1QSSAqZGF0YSwgTVBJICpza2V5ICkKKyB7CisgICAgIFJTQV9zZWNyZXRfa2V5IHNrOworKyAgICBNUEkgaW5wdXQ7CisgCisgICAgIGlmKCBhbGdvICE9IDEgJiYgYWxnbyAhPSAyICkKKyAJcmV0dXJuIEcxMEVSUl9QVUJLRVlfQUxHTzsKK0BAIC00MDcsOCArNDMyLDE0IEBACisgICAgIHNrLnAgPSBza2V5WzNdOworICAgICBzay5xID0gc2tleVs0XTsKKyAgICAgc2sudSA9IHNrZXlbNV07CistICAgICpyZXN1bHQgPSBtcGlfYWxsb2Nfc2VjdXJlKCBtcGlfZ2V0X25saW1icyggc2subiApICk7CistICAgIHNlY3JldCggKnJlc3VsdCwgZGF0YVswXSwgJnNrICk7CisrCisrICAgIC8qIE1pdGlnYXRlcyBzaWRlLWNoYW5uZWwgYXR0YWNrcyAoQ1ZFLTIwMTMtNDU3NikuICAqLworKyAgICBpbnB1dCA9IG1waV9hbGxvYyAoMCk7CisrICAgIG1waV9ub3JtYWxpemUgKGRhdGFbMF0pOworKyAgICBtcGlfZmRpdl9yIChpbnB1dCwgZGF0YVswXSwgc2subik7CisrICAgICpyZXN1bHQgPSBtcGlfYWxsb2Nfc2VjdXJlIChtcGlfZ2V0X25saW1icyAoc2subikpOworKyAgICBzZWNyZXQgKCpyZXN1bHQsIGlucHV0LCAmc2spOworKyAgICBtcGlfZnJlZSAoaW5wdXQpOworICAgICByZXR1cm4gMDsKKyB9CisgCitJbmRleDogZ251cGctMS40LjcvZzEwL2dwZ3YuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvZzEwL2dwZ3YuYwkyMDA2LTEyLTEzIDE5OjI1OjA0LjAwMDAwMDAwMCArMDgwMAorKysrIGdudXBnLTEuNC43L2cxMC9ncGd2LmMJMjAxNC0wMS0yMyAxMTozMDoxNy4zMDA5MTU5MTkgKzA4MDAKK0BAIC0zOTAsNiArMzkwLDcgQEAKKyB2b2lkIHJhbmRvbV9kdW1wX3N0YXRzKHZvaWQpIHt9CisgaW50IHF1aWNrX3JhbmRvbV9nZW4oIGludCBvbm9mZiApIHsgcmV0dXJuIC0xO30KKyB2b2lkIHJhbmRvbWl6ZV9idWZmZXIoIGJ5dGUgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgaW50IGxldmVsICkge30KKyt2b2lkIHJhbmRvbWl6ZV9tcGkgKE1QSSBtcGksIHNpemVfdCBuYml0cywgaW50IGxldmVsKSB7fQorIGludCByYW5kb21faXNfZmFrZWQoKSB7IHJldHVybiAtMTt9CisgYnl0ZSAqZ2V0X3JhbmRvbV9iaXRzKCBzaXplX3QgbmJpdHMsIGludCBsZXZlbCwgaW50IHNlY3VyZSApIHsgcmV0dXJuIE5VTEw7fQorIHZvaWQgc2V0X3JhbmRvbV9zZWVkX2ZpbGUoIGNvbnN0IGNoYXIgKm5hbWUgKSB7fQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9HbnVQRzEtQ1ZFLTIwMTItNjA4NS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjVkOWExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvR251UEcxLUNWRS0yMDEyLTYwODUucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorY29tbWl0IGYwYjMzYjZmYjhlMDU4NmU5NTg0YTdhNDA5ZGNjMzEyNjM3NzZhNjcKK0F1dGhvcjogV2VybmVyIEtvY2ggPHdrQGdudXBnLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAyMCAwOTo0Mzo0MSAyMDEyICswMTAwCisKKyAgICBncGc6IEltcG9ydCBvbmx5IHBhY2tldHMgd2hpY2ggYXJlIGFsbG93ZWQgaW4gYSBrZXlibG9jay4KKyAgICAKKyAgICAqIGcxMC9pbXBvcnQuYyAodmFsaWRfa2V5YmxvY2tfcGFja2V0KTogTmV3LgorICAgIChyZWFkX2Jsb2NrKTogU3RvcmUgb25seSB2YWxpZCBwYWNrZXRzLgorICAgIC0tCisgICAgCisgICAgQSBjb3JydXB0ZWQga2V5LCB3aGljaCBmb3IgZXhhbXBsZSBpbmNsdWRlZCBhIG1hbmdsZWQgcHVibGljIGtleQorICAgIGVuY3J5cHRlZCBwYWNrZXQsIHVzZWQgdG8gY29ycnVwdCB0aGUga2V5cmluZy4gIFRoaXMgY2hhbmdlIHNraXBzIGFsbAorICAgIHBhY2tldHMgd2hpY2ggYXJlIG5vdCBhbGxvd2VkIGluIGEga2V5YmxvY2suCisgICAgCisgICAgR251UEctYnVnLWlkOiAxNDU1CisgICAgCisgICAgKGNoZXJyeS1waWNrZWQgZnJvbSBjb21taXQgZjc5NWEwZDU5ZTE5NzQ1NWY4NzIzYzMwMGVlYmY1OWUwOTg1M2VmYSkKKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK2RpZmYgLS1naXQgYS9nMTAvaW1wb3J0LmMgYi9nMTAvaW1wb3J0LmMKK2luZGV4IGJmZTAyZWIuLmE1N2IzMmUgMTAwNjQ0CistLS0gYS9nMTAvaW1wb3J0LmMKKysrKyBiL2cxMC9pbXBvcnQuYworQEAgLTM4NCw2ICszODQsMjcgQEAgaW1wb3J0X3ByaW50X3N0YXRzICh2b2lkICpoZCkKKyB9CisgCisgCisrLyogUmV0dXJuIHRydWUgaWYgUEtUVFlQRSBpcyB2YWxpZCBpbiBhIGtleWJsb2NrLiAgKi8KKytzdGF0aWMgaW50CisrdmFsaWRfa2V5YmxvY2tfcGFja2V0IChpbnQgcGt0dHlwZSkKKyt7CisrICBzd2l0Y2ggKHBrdHR5cGUpCisrICAgIHsKKysgICAgY2FzZSBQS1RfUFVCTElDX0tFWToKKysgICAgY2FzZSBQS1RfUFVCTElDX1NVQktFWToKKysgICAgY2FzZSBQS1RfU0VDUkVUX0tFWToKKysgICAgY2FzZSBQS1RfU0VDUkVUX1NVQktFWToKKysgICAgY2FzZSBQS1RfU0lHTkFUVVJFOgorKyAgICBjYXNlIFBLVF9VU0VSX0lEOgorKyAgICBjYXNlIFBLVF9BVFRSSUJVVEU6CisrICAgIGNhc2UgUEtUX1JJTkdfVFJVU1Q6CisrICAgICAgcmV0dXJuIDE7CisrICAgIGRlZmF1bHQ6CisrICAgICAgcmV0dXJuIDA7CisrICAgIH0KKyt9CisrCisrCisgLyoqKioqKioqKioqKioqKioKKyAgKiBSZWFkIHRoZSBuZXh0IGtleWJsb2NrIGZyb20gc3RyZWFtIEEuCisgICogUEVORElOR19QS1Qgc2hvdWxkIGJlIGluaXRpYWx6ZWQgdG8gTlVMTAorQEAgLTQ2MSw3ICs0ODIsNyBAQCByZWFkX2Jsb2NrKCBJT0JVRiBhLCBQQUNLRVQgKipwZW5kaW5nX3BrdCwgS0JOT0RFICpyZXRfcm9vdCApCisgCSAgICB9CisgCSAgICBpbl9jZXJ0ID0gMTsKKyAJICBkZWZhdWx0OgorLQkgICAgaWYoIGluX2NlcnQgKSB7CisrCSAgICBpZiAoaW5fY2VydCAmJiB2YWxpZF9rZXlibG9ja19wYWNrZXQgKHBrdC0+cGt0dHlwZSkpIHsKKyAJCWlmKCAhcm9vdCApCisgCQkgICAgcm9vdCA9IG5ld19rYm5vZGUoIHBrdCApOworIAkJZWxzZQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvY29uZmlndXJlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMDVhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jb25maWd1cmUucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdudXBnLTEuNC43L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcvY29uZmlndXJlLmFjCisrKysgZ251cGctMS40LjcvY29uZmlndXJlLmFjCitAQCAtODI3LDcgKzgyNyw2IEBAIGVsc2UKKyAgIEFDX1NVQlNUKFVTRV9OTFMpCisgICBBQ19TVUJTVChVU0VfSU5DTFVERURfTElCSU5UTCkKKyAgIEFDX1NVQlNUKEJVSUxEX0lOQ0xVREVEX0xJQklOVEwpCistICBBTV9QT19TVUJESVJTCisgZmkKKyAKKyBpZiB0ZXN0ICIkdHJ5X2V4dGVuc2lvbnMiID0geWVzIHx8IHRlc3QgeCIkY2FyZF9zdXBwb3J0IiA9IHh5ZXMgOyB0aGVuCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmYjI0YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L2N1cmxfdHlwZW9mX2ZpeF9iYWNrcG9ydC5wYXRjaApAQCAtMCwwICsxLDI3IEBACisKK1RoaXMgaGFzIGJlZW4gZGlzY3Vzc2VkIGluIGEgY291cGxlIG9mIGRpZmZlcmVudCBidWcgcmVwb3J0ZWQKK3Vwc3RyZWFtOgorCitodHRwOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NDg2MjUwCitodHRwOi8vYnVncy5zb3VyY2VtYWdlLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDYKKworRml4OgoraHR0cDovL2xpc3RzLmdudXBnLm9yZy9waXBlcm1haWwvZ251cGctZGV2ZWwvMjAwOC1BcHJpbC8wMjQzNDQuaHRtbAorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0IFtEZWJpYW5dCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGdudXBnLTEuNC43L2tleXNlcnZlci9ncGdrZXlzX2N1cmwuYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGdudXBnLTEuNC43Lm9yaWcva2V5c2VydmVyL2dwZ2tleXNfY3VybC5jCisrKysgZ251cGctMS40Ljcva2V5c2VydmVyL2dwZ2tleXNfY3VybC5jCitAQCAtMjg2LDcgKzI4Niw3IEBAIG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQorICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1ZFUkJPU0UsMSk7CisgICAgIH0KKyAKKy0gIGN1cmxfZWFzeV9zZXRvcHQoY3VybCxDVVJMT1BUX1NTTF9WRVJJRllQRUVSLG9wdC0+ZmxhZ3MuY2hlY2tfY2VydCk7CisrICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwobG9uZylvcHQtPmZsYWdzLmNoZWNrX2NlcnQpOworICAgY3VybF9lYXN5X3NldG9wdChjdXJsLENVUkxPUFRfQ0FJTkZPLG9wdC0+Y2FfY2VydF9maWxlKTsKKyAKKyAgIGlmKHByb3h5KQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbG9uZy1sb25nLXRodW1iLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NTVjYWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy0xLjQuNy9sb25nLWxvbmctdGh1bWIucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorT3JpZ25hbCBQYXRjaCBjYW1lIGZyb20gT3BlbldydCB2aWEgT0UtQ2xhc3NpYworaHR0cHM6Ly9kZXYub3BlbndydC5vcmcvYnJvd3Nlci9wYWNrYWdlcy91dGlscy9nbnVwZy9wYXRjaGVzLzAwMS1taXBzX2djYzQuNAord2hpY2ggaXMgbm8gbG9uZ2VyIGEgdmFsaWQgcmV2aXNpb24hCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworCistLS0gZ251cGcvbXBpL2xvbmdsb25nLmh+ICAgICAgMjAwNi0wMi0xNCAxMDowOTo1NS4wMDAwMDAwMDAgKzAwMDAKKysrKyBnbnVwZy9tcGkvbG9uZ2xvbmcuaCAgICAgICAyMDA4LTEwLTI3IDEzOjExOjA5LjAwMDAwMDAwMCArMDAwMAorQEAgLTE4MSw3ICsxODEsNyBAQAorIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKioqKioqKioqKioqKiogIEFSTSAgKioqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy0jaWYgZGVmaW5lZCAoX19hcm1fXykgJiYgV19UWVBFX1NJWkUgPT0gMzIKKysjaWYgZGVmaW5lZCAoX19hcm1fXykgJiYgV19UWVBFX1NJWkUgPT0gMzIgJiYgIWRlZmluZWQoX190aHVtYl9fKQorICNkZWZpbmUgYWRkX3NzYWFhYShzaCwgc2wsIGFoLCBhbCwgYmgsIGJsKSBcCisgICBfX2FzbV9fICgiYWRkcyAlMSwgJTQsICU1XG4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICJhZGMgICUwLCAlMiwgJTMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGctMS40LjcvbWlwc19nY2M0LjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEwM2IyYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnLTEuNC43L21pcHNfZ2NjNC40LnBhdGNoCkBAIC0wLDAgKzEsNTAgQEAKKworRnJvbSBPcGVuZW1iZWRkZWQtQ2xhc3NpYworCisgICAgZ251cGctMS40LjEwOiBSZWFkZCB0aGUgQVJNIFRodW1iIHBhdGNoIGFzIGRlYmlhbiBoYXMgbm8gdGh1bWIgc3VwcG9ydAorCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZW1iZWRkZWQtc3BlY2lmaWNdCisKK0luZGV4OiBnbnVwZy0xLjQuMTAvbXBpL2xvbmdsb25nLmgKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0xLjQuMTAub3JpZy9tcGkvbG9uZ2xvbmcuaAkyMDA4LTEyLTExIDE3OjM5OjQzLjAwMDAwMDAwMCArMDEwMAorKysrIGdudXBnLTEuNC4xMC9tcGkvbG9uZ2xvbmcuaAkyMDEwLTAzLTI3IDE0OjI3OjUzLjAwMDAwMDAwMCArMDEwMAorQEAgLTcwNiwxOCArNzA2LDM1IEBACisgI2VuZGlmIC8qIF9fbTg4MTEwX18gKi8KKyAjZW5kaWYgLyogX19tODgwMDBfXyAqLworIAorKy8qIFRlc3QgZm9yIGdjYyA+PSBtYWoubWluLCBhcyBwZXIgX19HTlVDX1BSRVJFUSBpbiBnbGliYyAqLworKyNpZiBkZWZpbmVkIChfX0dOVUNfXykgJiYgZGVmaW5lZCAoX19HTlVDX01JTk9SX18pCisrI2RlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSBcCisrCSgoX19HTlVDX18gPDwgMTYpICsgX19HTlVDX01JTk9SX18gPj0gKChtYWopIDw8IDE2KSArIChtaW4pKQorKyNlbHNlCisrI2RlZmluZSBfX0dOVUNfUFJFUkVRKG1haiwgbWluKSAgMAorKyNlbmRpZgorKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKioqKioqKioqKioqKiogIE1JUFMgICoqKioqKioqKioqKioqKioqCisgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAjaWYgZGVmaW5lZCAoX19taXBzX18pICYmIFdfVFlQRV9TSVpFID09IDMyCistI2lmIF9fR05VQ19fID4gMiB8fCBfX0dOVUNfTUlOT1JfXyA+PSA3CisrI2lmIF9fR05VQ19QUkVSRVEgKDQsNCkKKysjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKysgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJVURJdHlwZSBfX2xsID0gKFVESXR5cGUpKHUpICogKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJdzEgPSBfX2xsID4+IDMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJdzAgPSBfX2xsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgIH0gd2hpbGUgKDApCisrI2VuZGlmCisrI2lmICFkZWZpbmVkICh1bXVsX3BwbW0pICYmIF9fR05VQ19QUkVSRVEgKDIsNykKKyAjZGVmaW5lIHVtdWxfcHBtbSh3MSwgdzAsIHUsIHYpIFwKKyAgIF9fYXNtX18gKCJtdWx0dSAlMiwlMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgIDogIj1sIiAoKFVTSXR5cGUpKHcwKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICAgIj1oIiAoKFVTSXR5cGUpKHcxKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgIDogImQiICgoVVNJdHlwZSkodSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICAgImQiICgoVVNJdHlwZSkodikpKQorLSNlbHNlCisrI2VuZGlmCisrI2lmICFkZWZpbmVkICh1bXVsX3BwbW0pCisgI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgICBfX2FzbV9fICgibXVsdHUgJTIsJTMgXG4iIFwKKyAJICAgIm1mbG8gJTAgXG4iICAgICBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9kaXJtbmdyLXVzZXMtbGliZ3BnLWVycm9yLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWYxOTU1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvZGlybW5nci11c2VzLWxpYmdwZy1lcnJvci5wYXRjaApAQCAtMCwwICsxLDE2IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KK0luZGV4OiBnbnVwZy0yLjEuMC9kaXJtbmdyL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gZ251cGctMi4xLjAub3JpZy9kaXJtbmdyL01ha2VmaWxlLmFtCisrKysgZ251cGctMi4xLjAvZGlybW5nci9NYWtlZmlsZS5hbQorQEAgLTc4LDcgKzc4LDggQEAgZW5kaWYKKyBkaXJtbmdyX0xEQUREID0gJChsaWJjb21tb250bHNucHRoKSAkKGxpYmNvbW1vbnB0aCkgXAorICAgICAgICAgJChETlNMSUJTKSAkKExJQkFTU1VBTl9MSUJTKSBcCisgCSQoTElCR0NSWVBUX0xJQlMpICQoS1NCQV9MSUJTKSAkKE5QVEhfTElCUykgXAorLQkkKE5UQlRMU19MSUJTKSAkKExJQkdOVVRMU19MSUJTKSAkKExJQklOVEwpICQoTElCSUNPTlYpCisrCSQoTlRCVExTX0xJQlMpICQoTElCR05VVExTX0xJQlMpICQoTElCSU5UTCkgJChMSUJJQ09OVikgXAorKwkkKEdQR19FUlJPUl9MSUJTKQorIGlmIFVTRV9MREFQCisgZGlybW5ncl9MREFERCArPSAkKGxkYXBsaWJzKQorIGVuZGlmCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZy9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1ODYwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDkwIEBACitVc2UgcGtnLWNvbmZpZyB0byBmaW5kIHB0aCBpbnN0ZWFkIG9mIHB0aC1jb25maWcuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCitbbm90IHN1Ym1pdHRlZCBidXQgdGhleSd2ZSBiZWVuIGNsZWFyIHRoZXkgZG9uJ3Qgd2FudCBhIHBrZy1jb25maWcgZGVwZW5kZW5jeV0KKworUlAgMjAxNC81LzIyCisKK0luZGV4OiBnbnVwZy0yLjEuMC9tNC9nbnVwZy1wdGgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0yLjEuMC5vcmlnL200L2dudXBnLXB0aC5tNAorKysrIGdudXBnLTIuMS4wL200L2dudXBnLXB0aC5tNAorQEAgLTE3LDMzICsxNyw5IEBAIGRubCBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICMgVGFrZW4gYW5kIG1vZGlmaWVkIGZyb20gdGhlIG00IG1hY3JvcyB3aGljaCBjb21lIHdpdGggUHRoLgorIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgICBbCistICAgIF9wdGhfdmVyc2lvbj1gJFBUSF9DT05GSUcgLS12ZXJzaW9uIHwgYXdrICdOUj09MSB7cHJpbnQgWyRdM30nYAorICAgICBfcmVxX3ZlcnNpb249ImlmZWxzZShbJDFdLCwxLjIuMCwkMSkiCisrICAgIFBLR19DSEVDS19NT0RVTEVTKFBUSCwgW3B0aCA+PSAkX3JlcV92ZXJzaW9uXSwgW2hhdmVfcHRoPXllc10sIFtoYXZlX3B0aD1ub10pCisgCistICAgIEFDX01TR19DSEVDS0lORyhmb3IgUFRIIC0gdmVyc2lvbiA+PSAkX3JlcV92ZXJzaW9uKQorLSAgICBmb3IgX3ZhciBpbiBfcHRoX3ZlcnNpb24gX3JlcV92ZXJzaW9uOyBkbworLSAgICAgICAgZXZhbCAiX3ZhbD1cIlwkJHtfdmFyfVwiIgorLSAgICAgICAgX21ham9yPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgICAgIF9taW5vcj1gZWNobyAkX3ZhbCB8IHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwoW1thYi5dXVwpXChbWzAtOV1dKlwpL1wyLydgCistICAgICAgICBfcnR5cGU9YGVjaG8gJF92YWwgfCBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcKFtbYWIuXV1cKVwoW1swLTldXSpcKS9cMy8nYAorLSAgICAgICAgX21pY3JvPWBlY2hvICRfdmFsIHwgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXChbW2FiLl1dXClcKFtbMC05XV0qXCkvXDQvJ2AKKy0gICAgICAgIGNhc2UgJF9ydHlwZSBpbgorLSAgICAgICAgICAgICJhIiApIF9ydHlwZT0wIDs7CistICAgICAgICAgICAgImIiICkgX3J0eXBlPTEgOzsKKy0gICAgICAgICAgICAiLiIgKSBfcnR5cGU9MiA7OworLSAgICAgICAgZXNhYworLSAgICAgICAgX2hleD1gZWNobyBkdW1teSB8IGF3ayAneyBwcmludGYoIiVkJTAyZCUxZCUwMmQiLCBtYWpvciwgbWlub3IsIHJ0eXBlLCBtaWNybyk7IH0nIFwKKy0gICAgICAgICAgICAgICJtYWpvcj0kX21ham9yIiAibWlub3I9JF9taW5vciIgInJ0eXBlPSRfcnR5cGUiICJtaWNybz0kX21pY3JvImAKKy0gICAgICAgIGV2YWwgIiR7X3Zhcn1faGV4PVwiXCRfaGV4XCIiCistICAgIGRvbmUKKy0gICAgaGF2ZV9wdGg9bm8KKy0gICAgaWYgdGVzdCAiLiRfcHRoX3ZlcnNpb25faGV4IiAhPSAuOyB0aGVuCistICAgICAgICBpZiB0ZXN0ICIuJF9yZXFfdmVyc2lvbl9oZXgiICE9IC47IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICRfcHRoX3ZlcnNpb25faGV4IC1nZSAkX3JlcV92ZXJzaW9uX2hleDsgdGhlbgorLSAgICAgICAgICAgICAgICBoYXZlX3B0aD15ZXMKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKyAgICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4KKyAgICAgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBQVEggaW5zdGFsbGF0aW9uIGlzIHNhbmVdKQorQEAgLTUxLDkgKzI3LDkgQEAgQUNfREVGVU4oW0dOVVBHX1BUSF9WRVJTSU9OX0NIRUNLXSwKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfY2ZsYWdzPSRDRkxBR1MKKyAgICAgICAgICBfZ251cGdfcHRoX3NhdmVfbGRmbGFncz0kTERGTEFHUworICAgICAgICAgIF9nbnVwZ19wdGhfc2F2ZV9saWJzPSRMSUJTCistICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIGAkUFRIX0NPTkZJRyAtLWNmbGFnc2AiCistICAgICAgICAgTERGTEFHUz0iJExERkxBR1MgYCRQVEhfQ09ORklHIC0tbGRmbGFnc2AiCistICAgICAgICAgTElCUz0iJExJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCisrICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhfQ0ZMQUdTIgorKyAgICAgICAgIExERkxBR1M9IiRMREZMQUdTICRQVEhfTERGTEFHUyIKKysgICAgICAgICBMSUJTPSIkTElCUyAkUFRIX0xJQlMiCisgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aC5oPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbIHB0aF9pbml0ICgpO11dKV0sCitAQCAtODAsMjYgKzU2LDEzIEBAIEFDX0RFRlVOKFtHTlVQR19QVEhfVkVSU0lPTl9DSEVDS10sCisgIyBQVEhfQ0xGQUdTIGFuZCBQVEhfTElCUyBhcmUgQVNfU1VCU1QuCisgIworIEFDX0RFRlVOKFtHTlVQR19QQVRIX1BUSF0sCistWyBBQ19BUkdfV0lUSChwdGgtcHJlZml4LAorLSAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXB0aC1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEdOVSBQdGggaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIHB0aF9jb25maWdfcHJlZml4PSIkd2l0aHZhbCIsIHB0aF9jb25maWdfcHJlZml4PSIiKQorLSAgaWYgdGVzdCB4JHB0aF9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBQVEhfQ09ORklHPSIkcHRoX2NvbmZpZ19wcmVmaXgvYmluL3B0aC1jb25maWciCistICBmaQorLSAgQUNfUEFUSF9QUk9HKFBUSF9DT05GSUcsIHB0aC1jb25maWcsIG5vKQorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDEuMy43LCQxKQorLSAgaWYgdGVzdCAiJFBUSF9DT05GSUciICE9ICJubyI7IHRoZW4KKy0gICAgR05VUEdfUFRIX1ZFUlNJT05fQ0hFQ0soJHRtcCkKKy0gICAgaWYgdGVzdCAkaGF2ZV9wdGggPSB5ZXM7IHRoZW4gICAgICAKKy0gICAgICAgUFRIX0NGTEFHUz1gJFBUSF9DT05GSUcgLS1jZmxhZ3NgCistICAgICAgIFBUSF9MSUJTPWAkUFRIX0NPTkZJRyAtLWxkZmxhZ3NgCistICAgICAgIFBUSF9MSUJTPSIkUFRIX0xJQlMgYCRQVEhfQ09ORklHIC0tbGlicyAtLWFsbGAiCistICAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKysgIEdOVVBHX1BUSF9WRVJTSU9OX0NIRUNLKCR0bXApCisrICBpZiB0ZXN0ICRoYXZlX3B0aCA9IHllczsgdGhlbgorKyAgICAgIEFDX0RFRklORShIQVZFX1BUSCwgMSwKKyAgICAgICAgICAgICAgICAgW0RlZmluZWQgaWYgdGhlIEdOVSBQdGggaXMgYXZhaWxhYmxlXSkKKy0gICAgZmkKKyAgIGZpCisgICBBQ19TVUJTVChQVEhfQ0ZMQUdTKQorICAgQUNfU1VCU1QoUFRIX0xJQlMpCisgXSkKKy0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnL3VzZS1wa2djb25maWctaW5zdGVhZC1vZi1ucHRoLWNvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRiZjFiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGcvdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbb3BlbmVtYmVkZGVkIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKKworSW5kZXg6IGdudXBnLTIuMS4wL200L25wdGgubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBnbnVwZy0yLjEuMC5vcmlnL200L25wdGgubTQKKysrKyBnbnVwZy0yLjEuMC9tNC9ucHRoLm00CitAQCAtMTcsMTAgKzE3LDEwIEBAIEFDX0RFRlVOKFtfQU1fUEFUSF9OUFRIX0NPTkZJR10sCisgICBpZiB0ZXN0ICJ4JG5wdGhfY29uZmlnX3ByZWZpeCIgIT0geCA7IHRoZW4KKyAgICAgICBOUFRIX0NPTkZJRz0iJG5wdGhfY29uZmlnX3ByZWZpeC9iaW4vbnB0aC1jb25maWciCisgICBmaQorLSAgQUNfUEFUSF9QUk9HKE5QVEhfQ09ORklHLCBucHRoLWNvbmZpZywgbm8pCisrICBBQ19QQVRIX1BST0coUEtHQ09ORklHLCBwa2ctY29uZmlnLCBubykKKyAKKy0gIGlmIHRlc3QgIiROUFRIX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgbnB0aF92ZXJzaW9uPWAkTlBUSF9DT05GSUcgLS12ZXJzaW9uYAorKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKysgICAgbnB0aF92ZXJzaW9uPWAkUEtHQ09ORklHIC0tbW9kdmVyc2lvbiBucHRoYAorICAgZmkKKyAgIG5wdGhfdmVyc2lvbl9tYWpvcj1gZWNobyAkbnB0aF92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCitAQCAtNDUsNyArNDUsNyBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKKyAKKyAgIEFDX01TR19DSEVDS0lORyhmb3IgTlBUSCAtIHZlcnNpb24gPj0gJG1pbl9ucHRoX3ZlcnNpb24pCisgICBvaz1ubworLSAgaWYgdGVzdCAiJE5QVEhfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorKyAgaWYgdGVzdCAiJFBLR0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKyAgICAgcmVxX21ham9yPWBlY2hvICRtaW5fbnB0aF92ZXJzaW9uIHwgXAorICAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorICAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ucHRoX3ZlcnNpb24gfCBcCitAQCAtNjYsMjggKzY2LDkgQEAgQUNfREVGVU4oW0FNX1BBVEhfTlBUSF0sCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbnB0aF92ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBOUFRILCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorLSAgICAgIyBBUEkgaXMgY29tcGF0aWJsZS4KKy0gICAgIGlmIHRlc3QgIiRyZXFfbnB0aF9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkTlBUSF9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCistICAgICAgICBpZiB0ZXN0ICIkdG1wIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbTlBUSCBBUEkgdmVyc2lvbl0pCistICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX25wdGhfYXBpIiAtZXEgIiR0bXAiIDsgdGhlbgorLSAgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtva2F5XSkKKy0gICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgb2s9bm8KKy0gICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbZG9lcyBub3QgbWF0Y2guIHdhbnQ9JHJlcV9ucHRoX2FwaSBnb3Q9JHRtcF0pCistICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTlBUSF9DRkxBR1M9YCROUFRIX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgTlBUSF9MSUJTPWAkTlBUSF9DT05GSUcgLS1saWJzYAorKyAgICBOUFRIX0NGTEFHUz1gJFBLR0NPTkZJRyAtLWNmbGFncyBucHRoYAorKyAgICBOUFRIX0xJQlM9YCRQS0dDT05GSUcgLS1saWJzIG5wdGhgCisrICAgIEFDX01TR19XQVJOKFtbR09UIEhFUkUgLSAkTlBUSF9MSUJTIF1dKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBucHRoX2NvbmZpZ19ob3N0PWAkTlBUSF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKyAgICAgaWYgdGVzdCB4IiRucHRoX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KK0BAIC0xMDMsNiArODQsNyBAQCBBQ19ERUZVTihbQU1fUEFUSF9OUFRIXSwKKyAgICAgICBmaQorICAgICBmaQorICAgZWxzZQorKyAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBOUFRIX0NGTEFHUz0iIgorICAgICBOUFRIX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251cGcvZ251cGdfMS40LjcuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5OWY4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzEuNC43LmJiCkBAIC0wLDAgKzEsMTA1IEBACitTVU1NQVJZID0gIkdOVSBQcml2YWN5IEd1YXJkIC0gZW5jcnlwdGlvbiBhbmQgc2lnbmluZyB0b29scyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnLyIKK0RFUEVORFMgPSAiemxpYiBiemlwMiByZWFkbGluZSIKK1NFQ1RJT04gPSAiY29uc29sZS91dGlscyIKKworTElDRU5TRSA9ICJHUEx2MiIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZWI3MjNiNjE1MzlmZWVmMDEzZGU0NzZlNjhiNWM1MGEiCisKK1BSID0gInI5IgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2dudXBnL2dudXBnLSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vbG9uZy1sb25nLXRodW1iLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2NvbmZpZ3VyZS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9taXBzX2djYzQuNC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9HbnVQRzEtQ1ZFLTIwMTItNjA4NS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9jdXJsX3R5cGVvZl9maXhfYmFja3BvcnQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vQ1ZFLTIwMTMtNDM1MS5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9DVkUtMjAxMy00NTc2LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL0NWRS0yMDEzLTQyNDIucGF0Y2ggXAorCSAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjA2YTE0MWNjYTVjZDFhNTViYmRkMjVhYjgzMzMwM2MiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjlkMThiN2QxOTNmNjJjYTI3ZWQ0ZmViY2I0YzkwNDRhYTBjOTUzMDVkMzI1OGZlOTAyZTJmYWU1ZmM2NDY4ZCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvCisKKyMgICAtLXdpdGgtZWdkLXNvY2tldD1OQU1FICB1c2UgTkFNRSBmb3IgdGhlIEVHRCBzb2NrZXQKKyMgICAtLXdpdGgtcGhvdG8tdmlld2VyPUZJWEVEX1ZJRVdFUiAgc2V0IGEgZml4ZWQgcGhvdG8gSUQgdmlld2VyCisjICAgLS13aXRoLWluY2x1ZGVkLXpsaWIgICAgdXNlIHRoZSB6bGliIGNvZGUgaW5jbHVkZWQgaGVyZQorIyAgIC0td2l0aC1jYXBhYmlsaXRpZXMgICAgIHVzZSBsaW51eCBjYXBhYmlsaXRpZXMgZGVmYXVsdD1ubworIyAgIC0td2l0aC1tYWlscHJvZz1OQU1FICAgIHVzZSAiTkFNRSAtdCIgZm9yIG1haWwgdHJhbnNwb3J0CisjICAgLS13aXRoLWxpYmljb252LXByZWZpeFs9RElSXSAgc2VhcmNoIGZvciBsaWJpY29udiBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorIyAgIC0td2l0aG91dC1saWJpY29udi1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyCisjICAgLS13aXRoLWluY2x1ZGVkLWdldHRleHQgdXNlIHRoZSBHTlUgZ2V0dGV4dCBsaWJyYXJ5IGluY2x1ZGVkIGhlcmUKKyMgICAtLXdpdGgtbGliaW50bC1wcmVmaXhbPURJUl0gIHNlYXJjaCBmb3IgbGliaW50bCBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYgorIyAgIC0td2l0aG91dC1saWJpbnRsLXByZWZpeCAgICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJpbnRsIGluIGluY2x1ZGVkaXIgYW5kIGxpYmRpcgorIyAgIC0td2l0aG91dC1yZWFkbGluZSAgICAgIGRvIG5vdCBzdXBwb3J0IGZhbmN5IGNvbW1hbmQgbGluZSBlZGl0aW5nCisjICAgLS13aXRoLWluY2x1ZGVkLXJlZ2V4ICAgdXNlIHRoZSBpbmNsdWRlZCBHTlUgcmVnZXggbGlicmFyeQorIyAgIC0td2l0aC16bGliPURJUiAgICAgICAgIHVzZSBsaWJ6IGluIERJUgorIyAgIC0td2l0aC1iemlwMj1ESVIgICAgICAgIGxvb2sgZm9yIGJ6aXAyIGluIERJUgorIyAgIC0tZW5hYmxlLXN0YXRpYy1ybmQ9ZWdkfHVuaXh8bGludXh8YXV0bworIyAgIC0tZGlzYWJsZS1kZXYtcmFuZG9tICAgIGRpc2FibGUgdGhlIHVzZSBvZiBkZXYgcmFuZG9tCisjICAgLS1kaXNhYmxlLWFzbSAgICAgICAgICAgZG8gbm90IHVzZSBhc3NlbWJsZXIgbW9kdWxlcworIyAgIC0tZW5hYmxlLW0tZ3VhcmQgICAgICAgIGVuYWJsZSBtZW1vcnkgZ3VhcmQgZmFjaWxpdHkKKyMgICAtLWVuYWJsZS1zZWxpbnV4LXN1cHBvcnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgU0VMaW51eCBzdXBwb3J0CisjICAgLS1kaXNhYmxlLWNhcmQtc3VwcG9ydCAgZGlzYWJsZSBPcGVuUEdQIGNhcmQgc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1nbnVwZy1pY29udiAgIGRpc2FibGUgdGhlIG5ldyBpY29udiBjb2RlCisjICAgLS1lbmFibGUtYmFja3NpZ3MgICAgICAgZW5hYmxlIHRoZSBleHBlcmltZW50YWwgYmFja3NpZ3MgY29kZQorIyAgIC0tZW5hYmxlLW1pbmltYWwgICAgICAgIGJ1aWxkIHRoZSBzbWFsbGVzdCBncGcgYmluYXJ5IHBvc3NpYmxlCisjICAgLS1kaXNhYmxlLXJzYSAgICAgICAgICAgZGlzYWJsZSB0aGUgUlNBIHB1YmxpYyBrZXkgYWxnb3JpdGhtCisjICAgLS1kaXNhYmxlLWlkZWEgICAgICAgICAgZGlzYWJsZSB0aGUgSURFQSBjaXBoZXIKKyMgICAtLWRpc2FibGUtY2FzdDUgICAgICAgICBkaXNhYmxlIHRoZSBDQVNUNSBjaXBoZXIKKyMgICAtLWRpc2FibGUtYmxvd2Zpc2ggICAgICBkaXNhYmxlIHRoZSBCTE9XRklTSCBjaXBoZXIKKyMgICAtLWRpc2FibGUtYWVzICAgICAgICAgICBkaXNhYmxlIHRoZSBBRVMsIEFFUzE5MiwgYW5kIEFFUzI1NiBjaXBoZXJzCisjICAgLS1kaXNhYmxlLXR3b2Zpc2ggICAgICAgZGlzYWJsZSB0aGUgVFdPRklTSCBjaXBoZXIKKyMgICAtLWRpc2FibGUtc2hhMjU2ICAgICAgICBkaXNhYmxlIHRoZSBTSEEtMjU2IGRpZ2VzdAorIyAgIC0tZGlzYWJsZS1zaGE1MTIgICAgICAgIGRpc2FibGUgdGhlIFNIQS0zODQgYW5kIFNIQS01MTIgZGlnZXN0cworIyAgIC0tZGlzYWJsZS1iemlwMiAgICAgICAgIGRpc2FibGUgdGhlIEJaSVAyIGNvbXByZXNzaW9uIGFsZ29yaXRobQorIyAgIC0tZGlzYWJsZS1leGVjICAgICAgICAgIGRpc2FibGUgYWxsIGV4dGVybmFsIHByb2dyYW0gZXhlY3V0aW9uCisjICAgLS1kaXNhYmxlLXBob3RvLXZpZXdlcnMgZGlzYWJsZSBwaG90byBJRCB2aWV3ZXJzCisjICAgLS1kaXNhYmxlLWtleXNlcnZlci1oZWxwZXJzICBkaXNhYmxlIGFsbCBleHRlcm5hbCBrZXlzZXJ2ZXIgc3VwcG9ydAorIyAgIC0tZGlzYWJsZS1sZGFwICAgICAgICAgIGRpc2FibGUgTERBUCBrZXlzZXJ2ZXIgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLWhrcCAgICAgICAgICAgZGlzYWJsZSBIS1Aga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1odHRwICAgICAgICAgIGRpc2FibGUgSFRUUCBrZXkgZmV0Y2hpbmcgaW50ZXJmYWNlCisjICAgLS1kaXNhYmxlLWZpbmdlciAgICAgICAgZGlzYWJsZSBGaW5nZXIga2V5IGZldGNoaW5nIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1tYWlsdG8gICAgICAgIGRpc2FibGUgZW1haWwga2V5c2VydmVyIGludGVyZmFjZQorIyAgIC0tZGlzYWJsZS1rZXlzZXJ2ZXItcGF0aCBkaXNhYmxlIHRoZSBleGVjLXBhdGggb3B0aW9uIGZvciBrZXlzZXJ2ZXIgaGVscGVycworIyAgIC0tZW5hYmxlLWtleS1jYWNoZT1TSVpFIFNldCBrZXkgY2FjaGUgdG8gU0laRSAoZGVmYXVsdCA0MDk2KQorIyAgIC0tZGlzYWJsZS1sYXJnZWZpbGUgICAgIG9taXQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZXMKKyMgICAtLWRpc2FibGUtZG5zLXNydiAgICAgICBkaXNhYmxlIHRoZSB1c2Ugb2YgRE5TIFNSViBpbiBIS1AgYW5kIEhUVFAKKyMgICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3QgdXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjICAgLS1kaXNhYmxlLXJlZ2V4ICAgICAgICAgZG8gbm90IGhhbmRsZSByZWd1bGFyIGV4cHJlc3Npb25zIGluIHRydXN0IHNpZ3MKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1sZGFwIFwKKwkJLS13aXRoLXpsaWI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLXdpdGgtYnppcDI9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorCQktLWRpc2FibGUtc2VsaW51eC1zdXBwb3J0IFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIGFjX2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZT1ubyBcCisJCSIKKworIyBGb3JjZSBnY2MncyB0cmFkaXRpb25hbCBoYW5kbGluZyBvZiBpbmxpbmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggZ2NjIDUKK0NGTEFHUyArPSAiLWZnbnU4OS1pbmxpbmUiCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisJaW5zdGFsbCAtZCAke0R9JHtkb2NkaXJ9LyR7QlBOfQorCW12ICR7RH0ke2RhdGFkaXJ9LyR7QlBOfS8qICR7RH0vJHtkb2NkaXJ9LyR7QlBOfS8gfHwgOgorCW12ICR7RH0ke3ByZWZpeH0vZG9jLyogJHtEfS8ke2RvY2Rpcn0vJHtCUE59LyB8fCA6Cit9CisKKyMgc3BsaXQgb3V0IGdwZ3YgZnJvbSBtYWluIHBhY2thZ2UKK1JERVBFTkRTXyR7UE59ID0gImdwZ3YiCitQQUNLQUdFUyA9KyAiZ3BndiIKK0ZJTEVTX2dwZ3YgPSAiJHtiaW5kaXJ9L2dwZ3YiCisKKyMgRXhjbHVkZSBkZWJ1ZyBmaWxlcyBmcm9tIHRoZSBtYWluIHBhY2thZ2VzCitGSUxFU18ke1BOfSA9ICIke2JpbmRpcn0vKiAke2RhdGFkaXJ9LyR7QlBOfSAke2xpYmV4ZWNkaXJ9LyR7QlBOfS8qIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmV4ZWNkaXJ9LyR7QlBOfS8uZGVidWciCisKK1BBQ0tBR0VDT05GSUcgPz89ICIiCitQQUNLQUdFQ09ORklHW2N1cmxdID0gIi0td2l0aC1saWJjdXJsPSR7U1RBR0lOR19MSUJESVJ9LC0td2l0aG91dC1saWJjdXJsLGN1cmwiCitQQUNLQUdFQ09ORklHW2xpYnVzYl0gPSAiLS13aXRoLWxpYnVzYj0ke1NUQUdJTkdfTElCRElSfSwtLXdpdGhvdXQtbGlidXNiLGxpYnVzYi1jb21wYXQiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXBnL2dudXBnXzIuMS43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YzdjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnVwZy9nbnVwZ18yLjEuNy5iYgpAQCAtMCwwICsxLDQxIEBACitTVU1NQVJZID0gIkdOVSBQcml2YWN5IEd1YXJkIC0gZW5jcnlwdGlvbiBhbmQgc2lnbmluZyB0b29scyAoMi54KSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnLyIKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjMiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYiCisKK0RFUEVORFMgPSAibnB0aCBsaWJhc3N1YW4gbGlia3NiYSB6bGliIGJ6aXAyIHJlYWRsaW5lIGxpYmdjcnlwdCIKKworaW5oZXJpdCBhdXRvdG9vbHMgZ2V0dGV4dCB0ZXhpbmZvIHBrZ2NvbmZpZworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vdXNlLXBrZ2NvbmZpZy1pbnN0ZWFkLW9mLW5wdGgtY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpcm1uZ3ItdXNlcy1saWJncGctZXJyb3IucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImViZGY5MmIxNWI4YmNkODU3OWI2NDNjN2Y0MWEzMjM4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImMxOGEzNzc2ZDQ3ZmVjOTg4OTJkNTFkMjhiNjU3NGVmMTZiZjBhMjVlYWJiMDk1NjIzMTA1OGFhZjJlNzg0NmUiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtbGRhcCBcCisJCS0tZGlzYWJsZS1jY2lkLWRyaXZlciBcCisJCS0td2l0aC16bGliPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKwkJLS13aXRoLWJ6aXAyPSR7U1RBR0lOR19MSUJESVJ9Ly4uIFwKKyAgICAgICAgICAgICAgICAtLXdpdGgtcmVhZGxpbmU9JHtTVEFHSU5HX0xJQkRJUn0vLi4gXAorICAgICAgICAgICAgICAgIgorUlJFQ09NTUVORFNfJHtQTn0gPSAicGluZW50cnkiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwkjIEVsc2UgdGhlc2UgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKKwlybSAtZiAke1N9L200L2xpYmFzc3Vhbi5tNAorCXJtIC1mICR7U30vbTQva3NiYS5tNAorCXJtIC1mICR7U30vbTQvbGliZ2NyeXB0Lm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCWxuIC1zZiBncGcyICR7RH0ke2JpbmRpcn0vZ3BnCisJbG4gLXNmIGdwZ3YyICR7RH0ke2JpbmRpcn0vZ3BndgorfQorCitSREVQRU5EU18ke1BOfSA9ICJnbnV0bHMiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjEzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzLmluYwpAQCAtMCwwICsxLDQ5IEBACitTVU1NQVJZID0gIkdOVSBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgTGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9nbnV0bHMvIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL3NhdmFubmFoLmdudS5vcmcvc3VwcG9ydC8/Z3JvdXA9Z251dGxzIgorREVQRU5EUyA9ICJuZXR0bGUiCisKK0xJQ0VOU0UgPSAiR1BMdjMrICYgTEdQTHYyLjErIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LXh4ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tYmluID0gIkdQTHYzKyIKK0xJQ0VOU0VfJHtQTn0tb3BlbnNzbCA9ICJHUEx2MysiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT1hNmY4OWUyMTAwZDliNmNkZmZjZWE0ZjM5OGUzNzM0MyIKKworCitTSFJUX1ZFUiA9ICIke0BkLmdldFZhcignUFYnLDEpLnNwbGl0KCcuJylbMF19LiR7QGQuZ2V0VmFyKCdQVicsMSkuc3BsaXQoJy4nKVsxXX0iCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXRscy5vcmcvZ2NyeXB0L2dudXRscy92JHtTSFJUX1ZFUn0vZ251dGxzLSR7UFZ9LnRhci54eiIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWcgcGtnY29uZmlnIGdldHRleHQgbGliX3BhY2thZ2UKKworRVhUUkFfT0VDT05GPSItLWRpc2FibGUtcnBhdGggXAorICAgICAgICAgICAgICAtLXdpdGgtaW5jbHVkZWQtbGlidGFzbjEgXAorICAgICAgICAgICAgICAtLWVuYWJsZS1sb2NhbC1saWJvcHRzIFwKKyAgICAgICAgICAgICAgLS13aXRoLWxpYnB0aHJlYWQtcHJlZml4PSR7U1RBR0lOR19ESVJfSE9TVH0ke3ByZWZpeH0gXAorICAgICAgICAgICAgICAtLWRpc2FibGUtZ3VpbGUgXAorICAgICAgICAgICAgICAtLWRpc2FibGUtY3J5d3JhcCBcCisgICAgICAgICAgICAgIC0td2l0aG91dC1wMTEta2l0IFwKKyAgICAgICAgICAgICAgIgorCitkb19jb25maWd1cmVfcHJlcGVuZCgpIHsKKwlmb3IgZGlyIGluIC4gbGliOyBkbworCQlybSAtZiAke2Rpcn0vYWNsb2NhbC5tNCAke2Rpcn0vbTQvbGlidG9vbC5tNCAke2Rpcn0vbTQvbHQqLm00CisJZG9uZQorfQorCitQQUNLQUdFQ09ORklHID8/PSAiemxpYiIKK1BBQ0tBR0VDT05GSUdbdHBtXSA9ICItLXdpdGgtdHBtLCAtLXdpdGhvdXQtdHBtLCB0cm91c2VycyIKK1BBQ0tBR0VDT05GSUdbemxpYl0gPSAiLS13aXRoLXpsaWIsIC0td2l0aG91dC16bGliLCB6bGliIgorCitQQUNLQUdFUyA9KyAiJHtQTn0tb3BlbnNzbCAke1BOfS14eCIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vZ251dGxzLWNsaS1kZWJ1ZyIKK0ZJTEVTXyR7UE59LW9wZW5zc2wgPSAiJHtsaWJkaXJ9L2xpYmdudXRscy1vcGVuc3NsLnNvLioiCitGSUxFU18ke1BOfS14eCA9ICIke2xpYmRpcn0vbGliZ251dGxzeHguc28uKiIKKworTERGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgKz0gIiAtcHRocmVhZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTk5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvbmZpZ3VyZS5hYy1maXgtc2VkLWNvbW1hbmQucGF0Y2gKQEAgLTAsMCArMSwzMSBAQAorRnJvbSBlYjkzYWE3Yjk4NmM4NGRhNjBhM2RiNDBhZmIyOWQxYTcwYzUwMjIzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CitEYXRlOiBTYXQsIDE3IEphbiAyMDE1IDE3OjAyOjE1ICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYzogZml4IHNlZCBjb21tYW5kCisKK1RoZSAic2VkICdzLy5iYWsvL2cnIiBtYXRjaHMgImJpdGJha2UiLCB3aGljaCB3b3VsZCBjYXVzZSBzdHJhbmdlIGVycm9ycword2hlbiB0aGUgUyBjb250YWlucyAiYml0YmFrZSIsIGZpeCB0byAic2VkICdzL1wuYmFrJC8vJ2AiCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIGNvbmZpZ3VyZS5hYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggYzY4MThhMC4uMWM0NTgyZCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNDY2LDcgKzQ2Niw3IEBAIGlmIHRlc3QgIiRORUVEX0xJQk9QVFNfRElSIiA9ICJ0cnVlIjt0aGVuCisgCWRubCByZXBsYWNlIGxpYm9wdHMtZ2VuZXJhdGVkIGZpbGVzIHdpdGggZGlzdHJpYnV0ZWQgYmFja3VwcywgaWYgcHJlc2VudAorIAltaXNzaW5nX2Jha3M9CisgCWZvciBpIGluICR7c3JjZGlyfS9zcmMvKi1hcmdzLmMuYmFrICR7c3JjZGlyfS9zcmMvKi1hcmdzLmguYmFrOyBkbworLQkJbmFtPWBlY2hvICRpfHNlZCAncy8uYmFrLy9nJ2AKKysJCW5hbT1gZWNobyAkaXxzZWQgJ3MvXC5iYWskLy8nYAorIAkJaWYgdGVzdCAtZiAkaTt0aGVuCisgCQkJY3AgLWYgJGkgJG5hbQorIAkJZWxzZQorLS0gCisyLjAuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzL2NvcnJlY3RfcnBsX2dldHRpbWVvZmRheV9zaWduYXR1cmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0NTJjNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvY29ycmVjdF9ycGxfZ2V0dGltZW9mZGF5X3NpZ25hdHVyZS5wYXRjaApAQCAtMCwwICsxLDY3IEBACitGcm9tIGFlMzM3MDc4OGVkMzQ0N2JiYTE2OTY5ZDllYjFiZjFiOTYzMWUxYjcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWYWxlbnRpbiBQb3BhIDx2YWxlbnRpbi5wb3BhQGludGVsLmNvbT4KK0RhdGU6IEZyaSwgMjUgQXByIDIwMTQgMTM6NTg6NTUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSF0gQ29ycmVjdCBycGxfZ2V0dGltZW9mZGF5IHNpZ25hdHVyZQorCitDdXJyZW50bHkgd2UgZmFpbCBvbiB1Y2xpYmMgbGlrZSBiZWxvdworCit8IEluIGZpbGUgaW5jbHVkZWQgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc3lzL3Byb2Nmcy5oOjMyOjAsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0Lmg6MjYsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc2lnbmFsLmg6MzkyLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc2lnbmFsLmg6NTIsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9nbC9zeXMvc2VsZWN0Lmg6NTgsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAvaG9tZS9rcmFqL3dvcmsvYW5nc3Ryb20vc291cmNlcy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtdWNsaWJjL3N5c3Jvb3RzL3FlbXVhcm0vdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmg6MjIwLAorfCAgICAgICAgICAgICAgICAgIGZyb20gLi4vLi4vZ2wvc3lzL3R5cGVzLmg6MjgsCit8ICAgICAgICAgICAgICAgICAgZnJvbSAuLi8uLi9saWIvaW5jbHVkZXMvZ251dGxzL2dudXRscy5oOjQ2LAorfCAgICAgICAgICAgICAgICAgIGZyb20gZXgtY3h4LmNwcDozOgorfCAuLi8uLi9nbC9zeXMvdGltZS5oOjM5Njo2NjogZXJyb3I6IGNvbmZsaWN0aW5nIGRlY2xhcmF0aW9uICd2b2lkKiByZXN0cmljdCcKK3wgLi4vLi4vZ2wvc3lzL3RpbWUuaDozOTY6NTA6IGVycm9yOiAncmVzdHJpY3QnIGhhcyBhIHByZXZpb3VzIGRlY2xhcmF0aW9uIGFzICd0aW1ldmFsKiByZXN0cmljdCcKK3wgbWFrZVs0XTogKioqIFtleC1jeHgub10gRXJyb3IgMQorfCBtYWtlWzRdOiAqKiogV2FpdGluZyBmb3IgdW5maW5pc2hlZCBqb2JzLi4uLgorCitHQ0MgZGV0ZWN0cyB0aGF0IHdlIGNhbGwgJ3Jlc3RyaWN0JyBhcyBwYXJhbSBuYW1lIGluIGZ1bmN0aW9uCitzaWduYXR1cmVzIGFuZCBjb21wbGFpbnMgc2luY2UgYm90aCBwYXJhbXMgYXJlIGNhbGxlZCAncmVzdHJpY3QnCit0aGVyZWZvcmUgd2UgdXNlIF9fcmVzdHJpY3QgdG8gZGVub3RlIHRoZSBDOTkga2V5d29yaworCitUaGlzIG9ubHkgaGFwcGVucyBvZiB1Y2xpYmMgc2luY2UgdGhpcyBjb2RlIGlzIG5vdCBleGNlcmNpc2VkIHdpdGgKK2VnbGliYyBvdGhlcndpc2Ugd2Ugd2lsbCBoYXZlIHNhbWUgaXNzdWUgdGhlcmUgdG9vCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgZ2wvc3lzX3RpbWUuaW4uaCB8IDggKysrKy0tLS0KKyAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZ2wvc3lzX3RpbWUuaW4uaCBiL2dsL3N5c190aW1lLmluLmgKK2luZGV4IDg0YTE3YzkuLjZjZWFkYzMgMTAwNjQ0CistLS0gYS9nbC9zeXNfdGltZS5pbi5oCisrKysgYi9nbC9zeXNfdGltZS5pbi5oCitAQCAtOTMsMjAgKzkzLDIwIEBAIHN0cnVjdCB0aW1ldmFsCisgIyAgIGRlZmluZSBnZXR0aW1lb2ZkYXkgcnBsX2dldHRpbWVvZmRheQorICMgIGVuZGlmCisgX0dMX0ZVTkNERUNMX1JQTCAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpCisrICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0LCB2b2lkICpfX3Jlc3RyaWN0KQorICAgICAgICAgICAgICAgICAgIF9HTF9BUkdfTk9OTlVMTCAoKDEpKSk7CisgX0dMX0NYWEFMSUFTX1JQTCAoZ2V0dGltZW9mZGF5LCBpbnQsCistICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpKTsKKysgICAgICAgICAgICAgICAgICAoc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QsIHZvaWQgKl9fcmVzdHJpY3QpKTsKKyAjIGVsc2UKKyAjICBpZiAhQEhBVkVfR0VUVElNRU9GREFZQAorIF9HTF9GVU5DREVDTF9TWVMgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqcmVzdHJpY3QsIHZvaWQgKnJlc3RyaWN0KQorKyAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkKKyAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworICMgIGVuZGlmCisgLyogTmVlZCB0byBjYXN0LCBiZWNhdXNlIG9uIGdsaWJjIHN5c3RlbXMsIGJ5IGRlZmF1bHQsIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lem9uZSAqLiAgKi8KKyBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QgKGdldHRpbWVvZmRheSwgaW50LAorLSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aW1ldmFsICpyZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpKTsKKysgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCwgdm9pZCAqX19yZXN0cmljdCkpOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNXQVJOIChnZXR0aW1lb2ZkYXkpOworICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0tIAorMS45LjEKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2dudXRscy91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxYjdjOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHMvdXNlLXBrZy1jb25maWctdG8tbG9jYXRlLXpsaWIucGF0Y2gKQEAgLTAsMCArMSw2NyBAQAorRnJvbSBjZWU4MGFmMWZlOTNmNWI3Njc2NWFmZWViZmNjM2I5MDI3NjhmNWQ2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQW5kcmUgTWNDdXJkeSA8YXJtY2N1cmR5QGdtYWlsLmNvbT4KK0RhdGU6IFR1ZSwgMjYgTWF5IDIwMTUgMjE6NDE6MjQgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gdXNlIHBrZy1jb25maWcgdG8gbG9jYXRlIHpsaWIKKworQUNfTElCX0hBVkVfTElOS0ZMQUdTIGNhbiBzb21ldGltZXMgZmluZCBob3N0IGxpYnMgYW5kIGlzIHRoZXJlZm9yZSBub3QKK3JvYnVzdCB3aGVuIGNyb3NzLWNvbXBpbGluZy4gUmVtb3ZlIGl0IGZvciB6bGliIGFuZCB1c2UgUEtHX0NIRUNLX01PRFVMRVMKK2luc3RlYWQuCisKK1JlbW92aW5nIEFDX0xJQl9IQVZFX0xJTktGTEFHUyBmb3IgemxpYiBhbHNvIHJlbW92ZXMgdGhlIC0td2l0aC1saWJ6LXByZWZpeAorY29uZmlndXJlIG9wdGlvbi4gSWYgemxpYiBzdXBwb3J0IGlzIGVuYWJsZWQsIHRoZW4gZmFpbHVyZSB0byBmaW5kIHpsaWIgdmlhCitwa2ctY29uZmlnIGlzIG5vdyB0cmVhdGVkIGFzIGEgZmF0YWwgZXJyb3IuCisKK0NoYW5nZSBiYXNlZCBvbiBDaHJvbWVPUyBnbnV0bHMgMi4xMi4yMyBjcm9zcy1jb21waWxlIGZpeGVzIHBhdGNoOgorCisgIGh0dHBzOi8vY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20vIy9jLzI3MTY2MS8KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBBbmRyZSBNY0N1cmR5IDxhcm1jY3VyZHlAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMjQgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCAxYjU2MWQ1Li4wYzc4N2RjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC01MDgsMjUgKzUwOCwyMSBAQCBBQ19BUkdfV0lUSCh6bGliLCBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LXpsaWJdLAorIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIHpsaWIgY29tcHJlc3Npb24gc3VwcG9ydF0pCisgaWYgdGVzdCB4JGFjX3psaWIgIT0geG5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorLSBBQ19MSUJfSEFWRV9MSU5LRkxBR1MoeiwsIFsjaW5jbHVkZSA8emxpYi5oPl0sIFtjb21wcmVzcyAoMCwgMCwgMCwgMCk7XSkKKy0gaWYgdGVzdCB4JGFjX2N2X2xpYnogIT0geHllczsgdGhlbgorLSAgIEFDX01TR19XQVJOKAorLSoqKiAKKy0qKiogWkxJQiB3YXMgbm90IGZvdW5kLiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byB1c2UgWkxJQiBjb21wcmVzc2lvbi4pCistIGZpCisgZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorIGZpCisgCistUEtHX0NIRUNLX0VYSVNUUyh6bGliLCBaTElCX0hBU19QS0dDT05GSUc9eSwgWkxJQl9IQVNfUEtHQ09ORklHPW4pCistCisgaWYgdGVzdCB4JGFjX3psaWIgIT0geG5vOyB0aGVuCistICBpZiB0ZXN0ICIkWkxJQl9IQVNfUEtHQ09ORklHIiA9ICJ5IiA7IHRoZW4KKy0gICAgaWYgdGVzdCAieCRHTlVUTFNfUkVRVUlSRVNfUFJJVkFURSIgPSB4OyB0aGVuCistICAgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IlJlcXVpcmVzLnByaXZhdGU6IHpsaWIiCistICAgIGVsc2UKKy0gICAgICBHTlVUTFNfUkVRVUlSRVNfUFJJVkFURT0iJEdOVVRMU19SRVFVSVJFU19QUklWQVRFLCB6bGliIgorLSAgICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoWkxJQiwgemxpYikKKysgIEhBVkVfTElCWj15ZXMKKysgIEFDX0RFRklORShbSEFWRV9MSUJaXSwgWzFdLCBbemxpYiBpcyBlbmFibGVkXSkKKysgIEFDX1NVQlNUKEhBVkVfTElCWikKKysgIExUTElCWj0kWkxJQl9MSUJTCisrICBBQ19TVUJTVChMVExJQlopCisrICBpZiB0ZXN0ICJ4JEdOVVRMU19SRVFVSVJFU19QUklWQVRFIiA9IHg7IHRoZW4KKysgICAgR05VVExTX1JFUVVJUkVTX1BSSVZBVEU9IlJlcXVpcmVzLnByaXZhdGU6IHpsaWIiCisrICBlbHNlCisrICAgIEdOVVRMU19SRVFVSVJFU19QUklWQVRFPSIkR05VVExTX1JFUVVJUkVTX1BSSVZBVEUsIHpsaWIiCisgICBmaQorIGZpCisgQUNfU1VCU1QoR05VVExTX1JFUVVJUkVTX1BSSVZBVEUpCistLSAKKzEuOS4xCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dudXRscy9nbnV0bHNfMy4zLjE3LjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODU3OTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvZ251dGxzXzMuMy4xNy4xLmJiCkBAIC0wLDAgKzEsOCBAQAorcmVxdWlyZSBnbnV0bHMuaW5jCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9jb3JyZWN0X3JwbF9nZXR0aW1lb2ZkYXlfc2lnbmF0dXJlLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly9jb25maWd1cmUuYWMtZml4LXNlZC1jb21tYW5kLnBhdGNoIFwKKyAgICAgICAgICAgIGZpbGU6Ly91c2UtcGtnLWNvbmZpZy10by1sb2NhdGUtemxpYi5wYXRjaCBcCisgICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICI4ZDAxYzdlN2YyY2JjNTg3MWZkY2E4MzJkMjI2MGI2YiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNDBmMTU4MDMwYTkyZjQ1MGEwN2IyMDMwMGEzOTk2NzEwY2ExOTgwMDg0OGQ5ZjZmZDYyNDkzMTcwYzViYmI0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xL2RvbnQtZGVwZW5kLW9uLWhlbHAybWFuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzg5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjEvZG9udC1kZXBlbmQtb24taGVscDJtYW4ucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKK1NpZ25lZC1vZmYtYnk6IE1hcmtvIExpbmRxdmlzdCA8Y2F6Zmk3NEBnbWFpbC5jb20+CitkaWZmIC1OdXJkIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtIGxpYnRhc24xLTIuMTQvZG9jL01ha2VmaWxlLmFtCistLS0gbGlidGFzbjEtMi4xNC9kb2MvTWFrZWZpbGUuYW0JMjAxMi0wOS0yNCAxNTowODo0Mi4wMDAwMDAwMDAgKzAzMDAKKysrKyBsaWJ0YXNuMS0yLjE0L2RvYy9NYWtlZmlsZS5hbQkyMDEzLTAxLTAzIDA3OjM1OjI2LjcwMjc2MzQwMyArMDIwMAorQEAgLTMxLDcgKzMxLDcgQEAKKyBBTV9NQUtFSU5GT0hUTUxGTEFHUyA9ICQoQU1fTUFLRUlORk9GTEFHUykgXAorCS0tbm8tc3BsaXQgLS1udW1iZXItc2VjdGlvbnMgLS1jc3MtaW5jbHVkZT10ZXhpbmZvLmNzcworCistZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKSBhc24xUGFyc2VyLjEgYXNuMUNvZGluZy4xIGFzbjFEZWNvZGluZy4xCisrZGlzdF9tYW5fTUFOUyA9ICQoZ2RvY19NQU5TKQorCisgSEVMUDJNQU5fT1BUUyA9IC0taW5mby1wYWdlIGxpYnRhc24xCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9nbnV0bHMvbGlidGFzbjFfNC41LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODc0NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ251dGxzL2xpYnRhc24xXzQuNS5iYgpAQCAtMCwwICsxLDIwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIEFTTi4xIGFuZCBERVIgbWFuaXB1bGF0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRhc24xLyIKKworTElDRU5TRSA9ICJHUEx2MysgJiBMR1BMdjIuMSsiCitMSUNFTlNFXyR7UE59LWJpbiA9ICJHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWQzMjIzOWJjYjY3MzQ2M2FiODc0ZTgwZDQ3ZmFlNTA0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTElCO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9SRUFETUU7ZW5kbGluZT04O21kNT1jMzgwM2EzZThjYTVhYjVlYjFlNTkxMmZhYTQwNTM1MSIKKworU1JDX1VSSSA9ICIke0dOVV9NSVJST1J9L2xpYnRhc24xL2xpYnRhc24xLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9kb250LWRlcGVuZC1vbi1oZWxwMm1hbi5wYXRjaCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjgxZDI3MjY5NzU0NWU4MmQzOWY2YmQxNDg1NGI2OGYwIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg5YjNiNWRjZTExOTI3MzQzMTU0NGVjYjMwNTA4MWYzNTMwOTExMDAxYmIxMmU1ZDc2NTg4OTA3ZWRiNzFiZGEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnIGxpYl9wYWNrYWdlCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9ncGdtZS5wYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGE0ZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvZ3BnbWUucGMKQEAgLTAsMCArMSwxMCBAQAorcHJlZml4PS91c3IKK2xpYmRpcj0ke3ByZWZpeH0vbGliCitpbmNsdWRlZGlyPSR7cHJlZml4fS9pbmNsdWRlCisKK05hbWU6IGdwZ21lCitEZXNjcmlwdGlvbjogR05VIFByaXZhY3kgR3VhcmQgTWFkZSBFYXN5CitWZXJzaW9uOiAxLjQuMworUmVxdWlyZXM6CitMaWJzOiAtTCR7bGliZGlyfSAtbGdwZ21lIC1sYXNzdWFuIC1sZ3BnLWVycm9yCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWUvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZjFmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ncGdtZS9ncGdtZS9wa2djb25maWcucGF0Y2gKQEAgLTAsMCArMSwyNzkgQEAKK1VwZGF0ZSBncGdtZSB0byB1c2UgcGtnY29uZmlnIGluc3RlYWQgb2YgLWNvbmZpZyBmaWxlcyBzaW5jZSBpdHMKK3NpbXBsZXIgYW5kIGxlc3MgZXJyb3IgcHJvbmUgd2hlbiBjcm9zcyBjb21waWxpbmcuCisKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkIFtVcHN0cmVhbSBub3QgaW50ZXJlc3RlZCBpbiBwa2ctY29uZmlnIHN1cHBvcnRdCitSUCAyMDE1LzQvMTcKKworZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMjk4YTIyYi4uYzc3OGI2MSAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNjIyLDYgKzYyMiw3IEBAIEFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZSBzcmMvTWFrZWZpbGUKKyAgICAgICAgICAgICAgICAgc3JjL3ZlcnNpb25pbmZvLnJjCisgICAgICAgICAgICAgICAgIHNyYy9ncGdtZS5oKQorIEFDX0NPTkZJR19GSUxFUyhzcmMvZ3BnbWUtY29uZmlnLCBjaG1vZCAreCBzcmMvZ3BnbWUtY29uZmlnKQorK0FDX0NPTkZJR19GSUxFUyhzcmMvZ3BnbWUucGMgc3JjL2dwZ21lLXB0aHJlYWQucGMpCisgQUNfQ09ORklHX0ZJTEVTKFtsYW5nL01ha2VmaWxlIGxhbmcvY2wvTWFrZWZpbGUgbGFuZy9jbC9ncGdtZS5hc2RdKQorIEFDX09VVFBVVAorIAorZGlmZiAtLWdpdCBhL3NyYy9NYWtlZmlsZS5hbSBiL3NyYy9NYWtlZmlsZS5hbQoraW5kZXggNTg5MjJmOS4uNDBkMGRjYSAxMDA2NDQKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMjAsMTEgKzIwLDEzIEBACisgCisgIyBOb3RlOiBtb2Nfa2RwaXBlaW9kZXZpY2Ugc2hvdWxkIGFjdHVhbGx5IGJlIGEgZGVwZW5kZWN5IGJlbG93LgorIEVYVFJBX0RJU1QgPSBncGdtZS1jb25maWcuaW4gZ3BnbWUubTQgbGliZ3BnbWUudmVycyBDaGFuZ2VMb2ctMjAxMSBcCistCSAgICAgZ3BnbWUuaC5pbiB2ZXJzaW9uaW5mby5yYy5pbiBncGdtZS5kZWYgbW9jX2tkcGlwZWlvZGV2aWNlLmNwcAorKwkgICAgIGdwZ21lLmguaW4gdmVyc2lvbmluZm8ucmMuaW4gZ3BnbWUuZGVmIG1vY19rZHBpcGVpb2RldmljZS5jcHAgZ3BnbWUucGMuaW4gZ3BnbWUtcHRocmVhZC5wYy5pbgorIAorIGJpbl9TQ1JJUFRTID0gZ3BnbWUtY29uZmlnCisgbTRkYXRhZGlyID0gJChkYXRhZGlyKS9hY2xvY2FsCisgbTRkYXRhX0RBVEEgPSBncGdtZS5tNAorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IGdwZ21lLnBjIGdwZ21lLXB0aHJlYWQucGMKKyBub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gZ3BnbWUuaAorIAorIGJpbl9QUk9HUkFNUyA9IGdwZ21lLXRvb2wKK2RpZmYgLS1naXQgYS9zcmMvZ3BnbWUtcHRocmVhZC5wYy5pbiBiL3NyYy9ncGdtZS1wdGhyZWFkLnBjLmluCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTgwYTQ4ZQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2dwZ21lLXB0aHJlYWQucGMuaW4KK0BAIC0wLDAgKzEsMTUgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEdQR01FX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBHUEdNRV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGdtZQorK0Rlc2NyaXB0aW9uOiBHbnVQRyBNYWRlIEVhc3kgKEdQR01FKSBpcyBhIEMgbGFuZ3VhZ2UgbGlicmFyeSB0aGF0IGFsbG93cyB0byBhZGRzdXBwb3J0IGZvciBjcnlwdG9ncmFwaHkgdG8gYSBwcm9ncmFtICh0aHJlYWRlZCB2ZXJzaW9uKQorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnbWUtcHRocmVhZCAtbHB0aHJlYWQKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorK1JlcXVpcmVzOiBsaWJhc3N1YW4gZ3BnLWVycm9yCitkaWZmIC0tZ2l0IGEvc3JjL2dwZ21lLm00IGIvc3JjL2dwZ21lLm00CitpbmRleCA2YzJiZTQ0Li5kOGE3NWNiIDEwMDY0NAorLS0tIGEvc3JjL2dwZ21lLm00CisrKysgYi9zcmMvZ3BnbWUubTQKK0BAIC03OSw3ICs3OSw3IEBAIGRubCBjb25maWcgc2NyaXB0IGRvZXMgbm90IG1hdGNoIHRoZSBob3N0IHNwZWNpZmljYXRpb24gdGhlIHNjcmlwdAorIGRubCBpcyBhZGRlZCB0byB0aGUgZ3BnX2NvbmZpZ19zY3JpcHRfd2FybiB2YXJpYWJsZS4KKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCistWyBBQ19SRVFVSVJFKFtfQU1fUEFUSF9HUEdNRV9DT05GSUddKWRubAorK1sKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MC40LjIsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfZ3BnbWVfYXBpPWBlY2hvICIkdG1wIiAgICAgfCBzZWQgJ3MvXCguKlwpOlwoLipcKS9cMS8nYAorQEAgLTg5LDM2ICs4OSwxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCisgICAgICBtaW5fZ3BnbWVfdmVyc2lvbj0iJHRtcCIKKyAgIGZpCisgCistICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIEdQR01FIC0gdmVyc2lvbiA+PSAkbWluX2dwZ21lX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEdQR01FX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZ3QgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRSwgW2dwZ21lID49ICRtaW5fZ3BnbWVfdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0xMjcsMTkgKzEwMywxMSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV0sCisgICAgICBmaQorICAgZmkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIEdQR01FX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLWNmbGFnc2AKKy0gICAgR1BHTUVfTElCUz1gJEdQR01FX0NPTkZJRyAtLWxpYnNgCistICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICBpZmVsc2UoWyQyXSwgLCA6LCBbJDJdKQorICAgICBfQU1fUEFUSF9HUEdNRV9DT05GSUdfSE9TVF9DSEVDSworICAgZWxzZQorLSAgICBHUEdNRV9DRkxBR1M9IiIKKy0gICAgR1BHTUVfTElCUz0iIgorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKy0gIEFDX1NVQlNUKEdQR01FX0NGTEFHUykKKy0gIEFDX1NVQlNUKEdQR01FX0xJQlMpCisgXSkKKyAKKyBkbmwgQU1fUEFUSF9HUEdNRV9QVEhSRUFEKFtNSU5JTVVNLVZFUlNJT04sCitAQCAtMTQ4LDcgKzExNiw3IEBAIGRubCBUZXN0IGZvciBsaWJncGdtZSBhbmQgZGVmaW5lIEdQR01FX1BUSFJFQURfQ0ZMQUdTCisgZG5sICBhbmQgR1BHTUVfUFRIUkVBRF9MSUJTLgorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX1BUSFJFQURdLAorLVsgQUNfUkVRVUlSRShbX0FNX1BBVEhfR1BHTUVfQ09ORklHXSlkbmwKKytbCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjAuNC4yLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2dwZ21lX2FwaT1gZWNobyAiJHRtcCIgICAgIHwgc2VkICdzL1woLipcKTpcKC4qXCkvXDEvJ2AKK0BAIC0xNTgsMzggKzEyNiwxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgcHRocmVhZCAtIHZlcnNpb24gPj0gJG1pbl9ncGdtZV92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdNRV9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIGlmIGAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgMj4gL2Rldi9udWxsYCA7IHRoZW4KKy0gICAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgICAgcmVxX21pbm9yPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICAgIHJlcV9taWNybz1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDMvJ2AKKy0gICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgZWxzZQorLSAgICAgICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9taWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhHUEdNRV9QVEhSRUFELCBbZ3BnbWUtcHRocmVhZCA+PSAkbWluX2dwZ21lX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgR1BHTUUsIHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9ncGdtZV9hcGkiIC1ndCAwIDsgdGhlbgorLSAgICAgICAgdG1wPWAkR1BHTUVfQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgICAgdG1wPWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWFwaV92ZXJzaW9uIGdwZ21lLXB0aHJlYWQgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0xOTgsMTkgKzE0MCwxMSBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9QVEhSRUFEXSwKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHTUVfUFRIUkVBRF9DRkxBR1M9YCRHUEdNRV9DT05GSUcgLS10aHJlYWQ9cHRocmVhZCAtLWNmbGFnc2AKKy0gICAgR1BHTUVfUFRIUkVBRF9MSUJTPWAkR1BHTUVfQ09ORklHIC0tdGhyZWFkPXB0aHJlYWQgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfUFRIUkVBRF9DRkxBR1M9IiIKKy0gICAgR1BHTUVfUFRIUkVBRF9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfUFRIUkVBRF9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9QVEhSRUFEX0xJQlMpCisgXSkKKyAKKyAKK0BAIC0yMjksMzYgKzE2MywxMiBAQCBBQ19ERUZVTihbQU1fUEFUSF9HUEdNRV9HTElCXSwKKyAgICAgIG1pbl9ncGdtZV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHTUUgLSB2ZXJzaW9uID49ICRtaW5fZ3BnbWVfdmVyc2lvbikKKy0gIG9rPW5vCistICBpZiB0ZXN0ICIkR1BHTUVfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9ncGdtZV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ21lX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDIvJ2AKKy0gICAgcmVxX21pY3JvPWBlY2hvICRtaW5fZ3BnbWVfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBpZiB0ZXN0ICIkZ3BnbWVfdmVyc2lvbl9tYWpvciIgLWd0ICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgb2s9eWVzCistICAgIGVsc2UKKy0gICAgICAgIGlmIHRlc3QgIiRncGdtZV92ZXJzaW9uX21ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGdwZ21lX3ZlcnNpb25fbWljcm8iIC1nZSAiJHJlcV9taWNybyI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgIGZpCistICAgICAgICBmaQorLSAgICBmaQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEdQR01FX0dMSUIsIFtncGdtZSA+PSAkbWluX2dwZ21lX3ZlcnNpb24gZ2xpYi0yLjBdLCBbb2s9eWVzXSwgW29rPW5vXSkgIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgd2UgaGF2ZSBhIHJlY2VudCBHUEdNRSwgd2Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUKKyAgICAgICMgQVBJIGlzIGNvbXBhdGlibGUuCisgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRHUEdNRV9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gZ3BnbWUgMj4vZGV2L251bGwgfHwgZWNobyAwYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2dwZ21lX2FwaSIgLW5lICIkdG1wIiA7IHRoZW4KKyAgICAgICAgICAgICAgb2s9bm8KK0BAIC0yNjcsMTcgKzE3Nyw5IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR01FX0dMSUJdLAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBHUEdNRV9HTElCX0NGTEFHUz1gJEdQR01FX0NPTkZJRyAtLWdsaWIgLS1jZmxhZ3NgCistICAgIEdQR01FX0dMSUJfTElCUz1gJEdQR01FX0NPTkZJRyAtLWdsaWIgLS1saWJzYAorLSAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgICAgX0FNX1BBVEhfR1BHTUVfQ09ORklHX0hPU1RfQ0hFQ0sKKyAgIGVsc2UKKy0gICAgR1BHTUVfR0xJQl9DRkxBR1M9IiIKKy0gICAgR1BHTUVfR0xJQl9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorLSAgQUNfU1VCU1QoR1BHTUVfR0xJQl9DRkxBR1MpCistICBBQ19TVUJTVChHUEdNRV9HTElCX0xJQlMpCisgXSkKK2RpZmYgLS1naXQgYS9zcmMvZ3BnbWUucGMuaW4gYi9zcmMvZ3BnbWUucGMuaW4KK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iNjk1MzlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvZ3BnbWUucGMuaW4KK0BAIC0wLDAgKzEsMTUgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKysjIEFQSSBpbmZvCisrYXBpX3ZlcnNpb249QEdQR01FX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBHUEdNRV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGdtZQorK0Rlc2NyaXB0aW9uOiBHbnVQRyBNYWRlIEVhc3kgKEdQR01FKSBpcyBhIEMgbGFuZ3VhZ2UgbGlicmFyeSB0aGF0IGFsbG93cyB0byBhZGRzdXBwb3J0IGZvciBjcnlwdG9ncmFwaHkgdG8gYSBwcm9ncmFtLgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnbWUKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorK1JlcXVpcmVzOiBsaWJhc3N1YW4gZ3BnLWVycm9yCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvZ3BnbWUvZ3BnbWVfMS41LjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU5ODM3NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2dwZ21lL2dwZ21lXzEuNS40LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiSGlnaC1sZXZlbCBHbnVQRyBlbmNyeXB0aW9uL3NpZ25pbmcgQVBJIgorREVTQ1JJUFRJT04gPSAiR251UEcgTWFkZSBFYXN5IChHUEdNRSkgaXMgYSBsaWJyYXJ5IGRlc2lnbmVkIHRvIG1ha2UgYWNjZXNzIHRvIEdudVBHIGVhc2llciBmb3IgYXBwbGljYXRpb25zLiBJdCBwcm92aWRlcyBhIEhpZ2gtTGV2ZWwgQ3J5cHRvIEFQSSBmb3IgZW5jcnlwdGlvbiwgZGVjcnlwdGlvbiwgc2lnbmluZywgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQga2V5IG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9ncGdtZS5odG1sIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjIrICYgTEdQTHYyLjErIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9ncGdtZS5oLmluO2VuZGxpbmU9MjM7bWQ1PTcxYmEyYWU4ZDZjYTAzNGVkMTBiZDA5OWE4Y2Y0NzNjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9lbmdpbmUuaDtlbmRsaW5lPTIyO21kNT00YjZkOGJhMzEzZDliNTY0Y2M0ZDRjZmIxNjQwYWY5ZCIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9ncGdtZS8ke0JQfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2dwZ21lLnBjIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmVhZmEwM2VhMDY0ZTFkMWRjMTFiYzJiODg0MDQ2MjMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmIzOGMwZWM4ODE1YzllOTRlNjA0N2I0ODQ5ODQ4MDhhOGRhZDlkNmJlYzhkZjMzZGM1MzM5ZmQ1NWZmZWE2YyIKKworREVQRU5EUyA9ICJsaWJncGctZXJyb3IgbGliYXNzdWFuIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2dwZ21lLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK1BBQ0tBR0VTID0rICIke1BOfS1wdGhyZWFkIgorRklMRVNfJHtQTn0tcHRocmVhZCA9ICIke2xpYmRpcn0vbGliZ3BnbWUtcHRocmVhZC5zby4qIgorRklMRVNfJHtQTn0tZGV2ICs9ICIke2RhdGFkaXJ9L2NvbW1vbi1saXNwL3NvdXJjZS9ncGdtZS8qIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoZXNlIGNvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200L2dwZy1lcnJvci5tNAorCXJtIC1mICR7U30vbTQvbGliYXNzdWFuLm00Cit9CisKK2RvX2luc3RhbGxfYXBwZW5kICgpIHsKKyAgICAgICAgaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZworICAgICAgICBpbnN0YWxsIC1tIDA2NDQgJHtXT1JLRElSfS9ncGdtZS5wYyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy8KK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2ZjIyMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3UuaW5jCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiSW50ZXJuYXRpb25hbCBDb21wb25lbnQgZm9yIFVuaWNvZGUgbGlicmFyaWVzIgorREVTQ1JJUFRJT04gPSAiVGhlIEludGVybmF0aW9uYWwgQ29tcG9uZW50IGZvciBVbmljb2RlIChJQ1UpIGlzIGEgbWF0dXJlLCBcCitwb3J0YWJsZSBzZXQgb2YgQy9DKysgYW5kIEphdmEgbGlicmFyaWVzIGZvciBVbmljb2RlIHN1cHBvcnQsIHNvZnR3YXJlIFwKK2ludGVybmF0aW9uYWxpemF0aW9uIChJMThOKSBhbmQgZ2xvYmFsaXphdGlvbiAoRzExTiksIGdpdmluZyBhcHBsaWNhdGlvbnMgdGhlIFwKK3NhbWUgcmVzdWx0cyBvbiBhbGwgcGxhdGZvcm1zLiIKK0hPTUVQQUdFID0gImh0dHA6Ly9zaXRlLmljdS1wcm9qZWN0Lm9yZy8iCisKK0xJQ0VOU0UgPSAiSUNVIgorREVQRU5EUyA9ICJpY3UtbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAiIgorCitTID0gIiR7V09SS0RJUn0vaWN1L3NvdXJjZSIKK1NQRFhfUyA9ICIke1dPUktESVJ9L2ljdSIKK1NUQUdJTkdfSUNVX0RJUl9OQVRJVkUgPSAiJHtTVEFHSU5HX0RBVEFESVJfTkFUSVZFfS8ke0JQTn0vJHtQVn0iCisKK0NQUEZMQUdTX2FwcGVuZF9saWJjLXVjbGliYyA9ICIgLURVX1RJTUVaT05FPTAiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vaWN1LWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGJpbmNvbmZpZworCisjIElDVSBuZWVkcyB0aGUgbmF0aXZlIGJ1aWxkIGRpcmVjdG9yeSBhcyBhbiBhcmd1bWVudCB0byBpdHMgLS13aXRoLWNyb3NzLWJ1aWxkIG9wdGlvbiB3aGVuCisjIGNyb3NzLWNvbXBpbGluZy4gVGFrZW4gdGhlIHNpdHVhdGlvbiB0aGF0IGRpZmZlcmVudCBidWlsZHMgbWF5IHNoYXJlIGEgY29tbW9uIHNzdGF0ZS1jYWNoZQorIyBpbnRvIGNvbnNpZGVyYXRpb24sIHRoZSBuYXRpdmUgYnVpbGQgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIHN0YWdlZC4KK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtY3Jvc3MtYnVpbGQ9JHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfSIKK0VYVFJBX09FQ09ORl9jbGFzcy1uYXRpdmUgPSAiIgorRVhUUkFfT0VDT05GX2NsYXNzLW5hdGl2ZXNkayA9ICItLXdpdGgtY3Jvc3MtYnVpbGQ9JHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfSIKKworUFJFUFJPQ0VTU19SRUxPQ0FURV9ESVJTID0gIiR7ZGF0YWRpcn0vJHtCUE59LyR7UFZ9IgorZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlKCkgeworCW1rZGlyIC1wICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfS9jb25maWcKKwljcCAtciAke0J9L2NvbmZpZy9pY3Vjcm9zcy5tayAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0vY29uZmlnCisJY3AgLXIgJHtCfS9jb25maWcvaWN1Y3Jvc3MuaW5jICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfS9jb25maWcKKwljcCAtciAke0J9L2xpYiAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KKwljcCAtciAke0J9L2JpbiAke0R9LyR7U1RBR0lOR19JQ1VfRElSX05BVElWRX0KKwljcCAtciAke0J9L3Rvb2xzICR7RH0vJHtTVEFHSU5HX0lDVV9ESVJfTkFUSVZFfQorfQorCitQQUNLQUdFUyA9KyAibGliaWN1ZGF0YSBsaWJpY3V1YyBsaWJpY3VpMThuIGxpYmljdWxlIGxpYmljdWx4IGxpYmljdXR1IGxpYmljdWlvIgorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS8ke0JQTn0vIgorCitGSUxFU19saWJpY3VkYXRhID0gIiR7bGliZGlyfS9saWJpY3VkYXRhLnNvLioiCitGSUxFU19saWJpY3V1YyA9ICIke2xpYmRpcn0vbGliaWN1dWMuc28uKiIKK0ZJTEVTX2xpYmljdWkxOG4gPSAiJHtsaWJkaXJ9L2xpYmljdWkxOG4uc28uKiIKK0ZJTEVTX2xpYmljdWxlID0gIiR7bGliZGlyfS9saWJpY3VsZS5zby4qIgorRklMRVNfbGliaWN1bHggPSAiJHtsaWJkaXJ9L2xpYmljdWx4LnNvLioiCitGSUxFU19saWJpY3V0dSA9ICIke2xpYmRpcn0vbGliaWN1dHUuc28uKiIKK0ZJTEVTX2xpYmljdWlvID0gIiR7bGliZGlyfS9saWJpY3Vpby5zby4qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1LzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTY4ZDU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS8wMDAxLURpc2FibGUtTERGTEFHU0lDVURULWZvci1MaW51eC5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDBjODJkNmFhMDJjMDhlNDFiMTNjODNiMTQ3ODJiZDcwMjRlMjVkNTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU2F0LCAxNSBGZWIgMjAxNCAyMTowNjo0MiArMDAwMAorU3ViamVjdDogW1BBVENIXSBEaXNhYmxlIExERkxBR1NJQ1VEVCBmb3IgTGludXgKKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFsgT0UgQ29uZmlndXJhdGlvbiBdCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBzb3VyY2UvY29uZmlnL21oLWxpbnV4IHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlnL21oLWxpbnV4IGIvY29uZmlnL21oLWxpbnV4CitpbmRleCAzNjZmMGNjLi4yNjg5YWFiIDEwMDY0NAorLS0tIGEvY29uZmlnL21oLWxpbnV4CisrKysgYi9jb25maWcvbWgtbGludXgKK0BAIC0yMSw3ICsyMSw3IEBAIExEX1JQQVRIPSAtV2wsLXpvcmlnaW4sLXJwYXRoLCckJCdPUklHSU4KKyBMRF9SUEFUSF9QUkUgPSAtV2wsLXJwYXRoLAorIAorICMjIFRoZXNlIGFyZSB0aGUgbGlicmFyeSBzcGVjaWZpYyBMREZMQUdTCistTERGTEFHU0lDVURUPS1ub2RlZmF1bHRsaWJzIC1ub3N0ZGxpYgorKyMgTERGTEFHU0lDVURUPS1ub2RlZmF1bHRsaWJzIC1ub3N0ZGxpYgorIAorICMjIENvbXBpbGVyIHN3aXRjaCB0byBlbWJlZCBhIGxpYnJhcnkgbmFtZQorICMgVGhlIGluaXRpYWwgdGFiIGluIHRoZSBuZXh0IGxpbmUgaXMgdG8gcHJldmVudCBpY3UtY29uZmlnIGZyb20gcmVhZGluZyBpdC4KKy0tIAorMS43LjEwLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pY3UvaWN1L2ljdS1wa2dkYXRhLWxhcmdlLWNtZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTQwNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdS9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2gKQEAgLTAsMCArMSwyOSBAQAorcGtnZGF0YS5jcHA6IHVzZSBMQVJHRV9CVUZGRVJfTUFYX1NJWkUgZm9yIGNtZAorCitVc2UgTEFSR0VfQlVGRkVSX01BWF9TSVpFIGZvciBjbWQgcmF0aGVyIHRoYW4gU01BTExfQlVGRkVSX01BWF9TSVpFLAorb3RoZXJ3aXNlIHRoZXJlIHdhcyBhIFNlZ21lbnRhdGlvbiBmYXVsdCBlcnJvciB3aGVuIHRoZSBjb21tYW5kIGxpbmUgaXMKK2xvbmcsIHRoaXMgc2hvdWxkIGJlIGEgbWlzcGxheSBzaW5jZSBvdGhlciBjbWQgdXNlcworTEFSR0VfQlVGRkVSX01BWF9TSVpFLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogUm9iZXJ0IFlhbmcgPGxpZXpoaS55YW5nQHdpbmRyaXZlci5jb20+CistLS0KKyB0b29scy9wa2dkYXRhL3BrZ2RhdGEuY3BwIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvdG9vbHMvcGtnZGF0YS9wa2dkYXRhLmNwcCBiL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAKKy0tLSBhL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAKKysrKyBiL3Rvb2xzL3BrZ2RhdGEvcGtnZGF0YS5jcHAKK0BAIC0xMDE5LDcgKzEwMTksNyBAQCBub3JtYWxfc3ltbGlua19tb2RlOgorIAorIHN0YXRpYyBpbnQzMl90IHBrZ19pbnN0YWxsTGlicmFyeShjb25zdCBjaGFyICppbnN0YWxsRGlyLCBjb25zdCBjaGFyICp0YXJnZXREaXIsIFVCb29sIG5vVmVyc2lvbikgeworICAgICBpbnQzMl90IHJlc3VsdCA9IDA7CistICAgIGNoYXIgY21kW1NNQUxMX0JVRkZFUl9NQVhfU0laRV07CisrICAgIGNoYXIgY21kW0xBUkdFX0JVRkZFUl9NQVhfU0laRV07CisgCisgICAgIHNwcmludGYoY21kLCAiY2QgJXMgJiYgJXMgJXMgJXMlcyVzIiwKKyAgICAgICAgICAgICB0YXJnZXREaXIsCistLSAKKzEuNy4xMC40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2ljdS9pY3VfNTUuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjNhOWJkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaWN1L2ljdV81NS4xLmJiCkBAIC0wLDAgKzEsMjEgQEAKK3JlcXVpcmUgaWN1LmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8uLi9saWNlbnNlLmh0bWw7bWQ1PTY0ZWZmNGFhZGZmNGQxMDRkNmQ0MzdjNGZkZTBlNmQ3IgorCitkZWYgaWN1X2Rvd25sb2FkX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICJfIiArIHB2c3BsaXRbMV0KKworSUNVX1BWID0gIiR7QGljdV9kb3dubG9hZF92ZXJzaW9uKGQpfSIKKworQkFTRV9TUkNfVVJJID0gImh0dHA6Ly9kb3dubG9hZC5pY3UtcHJvamVjdC5vcmcvZmlsZXMvaWN1NGMvJHtQVn0vaWN1NGMtJHtJQ1VfUFZ9LXNyYy50Z3oiCitTUkNfVVJJID0gIiR7QkFTRV9TUkNfVVJJfSBcCisgICAgICAgICAgIGZpbGU6Ly9pY3UtcGtnZGF0YS1sYXJnZS1jbWQucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIlwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtRGlzYWJsZS1MREZMQUdTSUNVRFQtZm9yLUxpbnV4LnBhdGNoIFwKKyAgICAgICAgICAiCitTUkNfVVJJW21kNXN1bV0gPSAiZTJkNTIzZGY3OWQ2Y2I3ODU1YzJmYmUyODRmNGRiMjkiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiZTE2YjIyY2JlZmRkMzU0YmVjMTE0NTQxZjc4NDlhMTJmOGZjMjAxNTMyMGNhNTI4MmVlNGZkNzg3NTcxNDU3YiIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvaXNvLWNvZGVzL2lzby1jb2Rlc18zLjU4LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9pc28tY29kZXMvaXNvLWNvZGVzXzMuNTguYmIKQEAgLTAsMCArMSwxNSBAQAorU1VNTUFSWSA9ICJJU08gbGFuZ3VhZ2UsIHRlcnJpdG9yeSwgY3VycmVuY3ksIHNjcmlwdCBjb2RlcyBhbmQgdGhlaXIgdHJhbnNsYXRpb25zIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitTUkNfVVJJID0gImh0dHBzOi8vcGtnLWlzb2NvZGVzLmFsaW90aC5kZWJpYW4ub3JnL2Rvd25sb2Fkcy9pc28tY29kZXMtJHtQVn0udGFyLnh6IgorU1JDX1VSSVttZDVzdW1dID0gIjM0MDk3YTAwODVmMDk3OWUyOGY5ZGI2NmVjMjc0YzVlIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjg2YWY1NzM1ZGNlNmU0ZWZmMmI5ODNlNWQ4YWE5YTNkZWExYjhkYjcwMjMzM2ZmMjBiZTg5ZTQ1ZjdmMzVhNzIiCisKKyMgaW5oZXJpdCBnZXR0ZXh0IGNhbm5vdCBiZSB1c2VkLCBiZWNhdXNlIGl0IGFkZHMgZ2V0dGV4dC1uYXRpdmUgdG8gQkFTRURFUEVORFMgd2hpY2gKKyMgYXJlIGluaGliaXRlZCBieSBhbGxhcmNoCitERVBFTkRTID0gImdldHRleHQtbmF0aXZlIgorCitpbmhlcml0IGFsbGFyY2ggYXV0b3Rvb2xzCisKK0ZJTEVTXyR7UE59ICs9ICIke2RhdGFkaXJ9L3htbC8iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuL2xpYmFzc3Vhbi1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjY2RkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmFzc3Vhbi9saWJhc3N1YW4vbGliYXNzdWFuLWFkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE1OCBAQAorQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IHRvIGxpYmFzc3Vhbi4KK1RoaXMgcGF0Y2ggaXMgcmVqZWN0ZWQgYnkgdXBzdHJlYW0gZm9yIHRoZSByZWFzb24gYmVsb3c6CitUaGV5IHRoaW5rIHBrZ2NvbmZpZyBhZGRzIG5vIHBvcnRhYmlsaXR5IGFuZCBtYWludGFpbmluZyB0aGVtIGlzIG5vdCB3b3J0aHdoaWxlLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZAorU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorU2lnbmVkLW9mZi1ieTogQ29uc3RhbnRpbiBNdXNjYSA8Y29uc3RhbnRpbngubXVzY2FAaW50ZWwuY29tPgorCitJbmRleDogbGliYXNzdWFuLTIuMS4yL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliYXNzdWFuLTIuMS4yLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBsaWJhc3N1YW4tMi4xLjIvTWFrZWZpbGUuYW0KK0BAIC0yNCwxMCArMjQsMTMgQEAgQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIgbm8tZGlzdC1negorICMgKEEgc3VpdGFibGUgZ2l0bG9nLXRvLWNoYW5nZWxvZyBzY3JpcHQgY2FuIGJlIGZvdW5kIGluIEdudVBHIG1hc3Rlci4pCisgR0lUTE9HX1RPX0NIQU5HRUxPRz1naXRsb2ctdG8tY2hhbmdlbG9nCisgCisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gbGliYXNzdWFuLnBjCisrCisgRVhUUkFfRElTVCA9IGF1dG9nZW4uc2ggYXV0b2dlbi5yYyBSRUFETUUuR0lUICAgICAgICAgCSAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIENoYW5nZUxvZy0yMDExIGRvYy9DaGFuZ2VMb2ctMjAxMSBzcmMvQ2hhbmdlTG9nLTIwMTEgCVwKKyAgICAgICAgICAgICAgdGVzdHMvQ2hhbmdlTG9nLTIwMTEgY29udHJpYi9DaGFuZ2VMb2ctMjAxMSAgICAgCQlcCistICAgICAgICAgICAgIGJ1aWxkLWF1eC9naXQtbG9nLWZvb3RlciBidWlsZC1hdXgvZ2l0LWxvZy1maXgKKysgICAgICAgICAgICAgYnVpbGQtYXV4L2dpdC1sb2ctZm9vdGVyIGJ1aWxkLWF1eC9naXQtbG9nLWZpeCBsaWJhc3N1YW4ucGMuaW4KKyAKKyBTVUJESVJTID0gbTQgc3JjIGRvYyB0ZXN0cworIAorSW5kZXg6IGxpYmFzc3Vhbi0yLjEuMi9saWJhc3N1YW4ucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwKKysrKyBsaWJhc3N1YW4tMi4xLjIvbGliYXNzdWFuLnBjLmluCitAQCAtMCwwICsxLDE0IEBACisrcHJlZml4PUBwcmVmaXhACisrZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorK2xpYmRpcj1AbGliZGlyQAorK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisrYXBpX3ZlcnNpb249QExJQkFTU1VBTl9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1ATElCQVNTVUFOX0NPTkZJR19IT1NUQAorKworK05hbWU6IGxpYmFzc3VhbgorK0Rlc2NyaXB0aW9uOiBJUEMgbGlicmFyeSB1c2VkIGJ5IEdudVBHIGFuZCBHUEdNRQorK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sYXNzdWFuCisrTGlicy5wcml2YXRlOiAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitJbmRleDogbGliYXNzdWFuLTIuMS4yL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmFzc3Vhbi0yLjEuMi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIGxpYmFzc3Vhbi0yLjEuMi9jb25maWd1cmUuYWMKK0BAIC00MzksNyArNDM5LDcgQEAgQUNfQ09ORklHX0ZJTEVTKFtkb2MvTWFrZWZpbGVdKQorIEFDX0NPTkZJR19GSUxFUyhbdGVzdHMvTWFrZWZpbGVdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL2xpYmFzc3Vhbi1jb25maWddLCBbY2htb2QgK3ggc3JjL2xpYmFzc3Vhbi1jb25maWddKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL3ZlcnNpb25pbmZvLnJjXSkKKy0KKytBQ19DT05GSUdfRklMRVMoW2xpYmFzc3Vhbi5wY10pCisgQUNfT1VUUFVUCisgCisgZWNobyAiCitJbmRleDogbGliYXNzdWFuLTIuMS4yL3NyYy9saWJhc3N1YW4ubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJhc3N1YW4tMi4xLjIub3JpZy9zcmMvbGliYXNzdWFuLm00CisrKysgbGliYXNzdWFuLTIuMS4yL3NyYy9saWJhc3N1YW4ubTQKK0BAIC0xNSwxOCArMTUsNiBAQCBkbmwgUmV0dXJucyBvayBzZXQgdG8geWVzIG9yIG5vLgorIGRubAorIEFDX0RFRlVOKFtfQU1fUEFUSF9MSUJBU1NVQU5fQ09NTU9OXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIEFDX0FSR19XSVRIKGxpYmFzc3Vhbi1wcmVmaXgsCistICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmFzc3Vhbi1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXggd2hlcmUgTElCQVNTVUFOIGlzIGluc3RhbGxlZCAob3B0aW9uYWwpXSksCistICAgICBsaWJhc3N1YW5fY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBsaWJhc3N1YW5fY29uZmlnX3ByZWZpeD0iIikKKy0gIGlmIHRlc3QgeCRsaWJhc3N1YW5fY29uZmlnX3ByZWZpeCAhPSB4IDsgdGhlbgorLSAgICBsaWJhc3N1YW5fY29uZmlnX2FyZ3M9IiRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1wcmVmaXg9JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4IgorLSAgICBpZiB0ZXN0IHgke0xJQkFTU1VBTl9DT05GSUcrc2V0fSAhPSB4c2V0IDsgdGhlbgorLSAgICAgIExJQkFTU1VBTl9DT05GSUc9JGxpYmFzc3Vhbl9jb25maWdfcHJlZml4L2Jpbi9saWJhc3N1YW4tY29uZmlnCistICAgIGZpCistICBmaQorLQorLSAgQUNfUEFUSF9UT09MKExJQkFTU1VBTl9DT05GSUcsIGxpYmFzc3Vhbi1jb25maWcsIG5vKQorIAorICAgdG1wPWlmZWxzZShbJDFdLCAsMTowLjkuMiwkMSkKKyAgIGlmIGVjaG8gIiR0bXAiIHwgZ3JlcCAnOicgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KK0BAIC0zNyw1MSArMjUsMTIgQEAgQUNfREVGVU4oW19BTV9QQVRIX0xJQkFTU1VBTl9DT01NT05dLAorICAgICBtaW5fbGliYXNzdWFuX3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBMSUJBU1NVQU4gLSB2ZXJzaW9uID49ICRtaW5fbGliYXNzdWFuX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJExJQkFTU1VBTl9DT05GSUciICE9ICJubyIgXAorLSAgICAgJiYgdGVzdCAtZiAiJExJQkFTU1VBTl9DT05GSUciIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMS8nYAorLSAgICByZXFfbWlub3I9YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICByZXFfbWljcm89YGVjaG8gJG1pbl9saWJhc3N1YW5fdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLQorLSAgICBsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb249YCRMSUJBU1NVQU5fQ09ORklHIC0tdmVyc2lvbmAKKy0gICAgbWFqb3I9YGVjaG8gJGxpYmFzc3Vhbl9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorLSAgICBtaWNybz1gZWNobyAkbGliYXNzdWFuX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDMvJ2AKKy0KKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZSAKKy0gICAgICAgIGlmIHRlc3QgIiRtYWpvciIgLWVxICIkcmVxX21ham9yIjsgdGhlbgorLSAgICAgICAgICAgIGlmIHRlc3QgIiRtaW5vciIgLWd0ICIkcmVxX21pbm9yIjsgdGhlbgorLSAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgIGVsc2UKKy0gICAgICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1lcSAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pY3JvIiAtZ2UgIiRyZXFfbWljcm8iOyB0aGVuCistICAgICAgICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgICAgZmkKKy0gICAgICAgICAgICBmaQorLSAgICAgICAgZmkKKy0gICAgZmkKKy0gIGZpCistCistICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRsaWJhc3N1YW5fY29uZmlnX3ZlcnNpb24pXSkKKy0gIGVsc2UKKy0gICAgQUNfTVNHX1JFU1VMVChubykKKy0gIGZpCisrICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJBU1NVQU4sIFtsaWJhc3N1YW4gPj0gJG1pbl9saWJhc3N1YW5fdmVyc2lvbl0sIFtvaz15ZXNdLCBbb2s9bm9dKQorIAorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKyAgICAgaWYgdGVzdCAiJHJlcV9saWJhc3N1YW5fYXBpIiAtZ3QgMCA7IHRoZW4KKyAgICAgICB0bXA9YCRMSUJBU1NVQU5fQ09ORklHIC0tYXBpLXZlcnNpb24gMj4vZGV2L251bGwgfHwgZWNobyAwYAorKyAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBsaWJhc3N1YW5gCisgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0xJQkFTU1VBTiBBUEkgdmVyc2lvbl0pCisgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmFzc3Vhbl9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTYsNyArNDUsNyBAQCBBQ19ERUZVTihbX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTl0sCisgCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICBpZiB0ZXN0IHgiJGhvc3QiICE9IHggOyB0aGVuCistICAgICAgbGliYXNzdWFuX2NvbmZpZ19ob3N0PWAkTElCQVNTVUFOX0NPTkZJRyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICAgIGxpYmFzc3Vhbl9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGxpYmFzc3VhbmAKKyAgICAgICBpZiB0ZXN0IHgiJGxpYmFzc3Vhbl9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgICBpZiB0ZXN0IHgiJGxpYmFzc3Vhbl9jb25maWdfaG9zdCIgIT0geCIkaG9zdCIgOyB0aGVuCisgICBBQ19NU0dfV0FSTihbWworQEAgLTEzNywxMiArODYsOCBAQCBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9MSUJBU1NVQU5dLAorIFsgX0FNX1BBVEhfTElCQVNTVUFOX0NPTU1PTigkMSkKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCistICAgIExJQkFTU1VBTl9DRkxBR1M9YCRMSUJBU1NVQU5fQ09ORklHICRsaWJhc3N1YW5fY29uZmlnX2FyZ3MgLS1jZmxhZ3NgCistICAgIExJQkFTU1VBTl9MSUJTPWAkTElCQVNTVUFOX0NPTkZJRyAkbGliYXNzdWFuX2NvbmZpZ19hcmdzIC0tbGlic2AKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKyAgIGVsc2UKKy0gICAgTElCQVNTVUFOX0NGTEFHUz0iIgorLSAgICBMSUJBU1NVQU5fTElCUz0iIgorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKExJQkFTU1VBTl9DRkxBR1MpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhc3N1YW4vbGliYXNzdWFuXzIuMi4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFlNDNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliYXNzdWFuL2xpYmFzc3Vhbl8yLjIuMS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIklQQyBsaWJyYXJ5IHVzZWQgYnkgR251UEcgYW5kIEdQR01FIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJhc3N1YW4vIgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3MuZzEwY29kZS5jb20vZ251cGcvaW5kZXgiCisKK0xJQ0VOU0UgPSAiR1BMdjMgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1mMjdkZWZlMWU5NmMyZTFlY2Q0ZTBjOWJlODk2Nzk0OSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2Fzc3Vhbi5jO2VuZGxpbmU9MjA7bWQ1PTBmNDY1NTQ0MTgzNDA1MDU1ZWMxNzk4NjlmYzViNWJhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9hc3N1YW4tZGVmcy5oO2VuZGxpbmU9MjA7bWQ1PTIwY2Q1NTUzNTI2MGNhMTc3OWVkYWU1YzdiODBiMjFlIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciIKKworU1JDX1VSSSA9ICJmdHA6Ly9mdHAuZ251cGcub3JnL2djcnlwdC9saWJhc3N1YW4vbGliYXNzdWFuLSR7UFZ9LnRhci5iejIgXAorCSAgIGZpbGU6Ly9saWJhc3N1YW4tYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNjI5MGU3NTBlZTg3YmUzYmZkOTU3OWZjNDRjNmExODYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiOTQ5Mjg1YmI3OTM0NTM2MmNiNzJhNDBjNzk4ZGVmZWZjMDA3MDMxYzYwZjJmMTAyNTE3MjBiZjYwYTlkZTJkZSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJhc3N1YW4tY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvIGJpbmNvbmZpZy1kaXNhYmxlZCBwa2djb25maWcKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcm5jZSB0byB0aG9zZSBpbiBhY2xvY2FsLWNvcHkKKwlybSAtZiAke1N9L200LyoubTQKK30KKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJhdG9taWMtb3BzL2xpYmF0b21pYy1vcHNfNy40LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwZTI5OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmF0b21pYy1vcHMvbGliYXRvbWljLW9wc183LjQuMi5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIkEgbGlicmFyeSBmb3IgYXRvbWljIGludGVnZXIgb3BlcmF0aW9ucyIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9pdm1haS9saWJhdG9taWNfb3BzLyIKK1NFQ1RJT04gPSAib3B0aW9uYWwiCitQUk9WSURFUyArPSAibGliYXRvbWljcy1vcHMiCitMSUNFTlNFID0gIkdQTHYyICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vZG9jL0xJQ0VOU0lORy50eHQ7bWQ1PWUwMGRkNWM4YWMwM2ExNGM1YWU1MjI1YTQ1MjVmYTJkIFwKKwkJICAgIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cuaXZtYWlzb2Z0LmNvbS9fYmluL2F0b21pY19vcHMvbGliYXRvbWljX29wcy0ke1BWfS50YXIuZ3oiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIxZDY1Mzg2MDRiMzE0ZDJmY2NkZjg2OTE1ZTVjMDg1NyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIwNGZhNjE1ZjYyOTkyNTQ3YmNiZGE1NjIyNjBlMjhiNTA0YmM0YzA2ZTJmOTg1ZjI2N2YzYWRlMzAzMDRiNWRkIgorCitTID0gIiR7V09SS0RJUn0vbGliYXRvbWljX29wcy0ke1BWfSIKKworQUxMT1dfRU1QVFlfJHtQTn0gPSAiMSIKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwkjIHRob3NlIGNvbnRhaW4gb25seSBkb2NzLCBub3QgbmVjZXNzYXJ5IGZvciBub3cuCisJaW5zdGFsbCAtbSAwNzU1IC1kICR7RH0ke2RvY2Rpcn0KKwltdiAke0R9JHtkYXRhZGlyfS9saWJhdG9taWNfb3BzICR7RH0ke2RvY2Rpcn0vJHtCUE59Cit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmJzZC9saWJic2RfMC43LjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMjY2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJic2QvbGliYnNkXzAuNy4wLmJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEzIEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisjIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoc2VlIENPUFlJTkcuTUlUIGZvciB0aGUgdGVybXMpCisKK1NVTU1BUlkgPSAiTGlicmFyeSBvZiB1dGlsaXR5IGZ1bmN0aW9ucyBmcm9tIEJTRCBzeXN0ZW1zIgorREVTQ1JJUFRJT04gPSAiVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIHVzZWZ1bCBmdW5jdGlvbnMgY29tbW9ubHkgZm91bmQgb24gQlNEIHN5c3RlbXMsIFwKKyAgICAgICAgICAgICAgIGFuZCBsYWNraW5nIG9uIG90aGVycyBsaWtlIEdOVSBzeXN0ZW1zLCB0aHVzIG1ha2luZyBpdCBlYXNpZXIgdG8gcG9ydCBcCisgICAgICAgICAgICAgICBwcm9qZWN0cyB3aXRoIHN0cm9uZyBCU0Qgb3JpZ2lucywgd2l0aG91dCBuZWVkaW5nIHRvIGVtYmVkIHRoZSBzYW1lIFwKKyAgICAgICAgICAgICAgIGNvZGUgb3ZlciBhbmQgb3ZlciBhZ2FpbiBvbiBlYWNoIHByb2plY3QuIgorCitIT01FUEFHRSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy93aWtpLyIKK0xJQ0VOU0UgPSAiQlNELTQtQ2xhdXNlICYgTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZjE1MzBlYTkyYWVhYTFjNWUyNTQ3Y2ZkNDM5MDVkOGMiCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gIiIKKworU1JDX1VSSSA9ICJodHRwOi8vbGliYnNkLmZyZWVkZXNrdG9wLm9yZy9yZWxlYXNlcy8ke0JQTn0tJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiZmNjZWI0ZTY2ZmQ0NDhjYTRlZDQyYmEyMmE4YmFiYjAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGYzYjBlMTdlNWMzNGMwMzgxMjZlMGEwNDM1MWIxMWUyM2M2MTAxYTdkMGNlM2JlZWFiMjliYjY0MTVjMTBiYiIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmcvcHl0aG9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NTkxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nL3B5dGhvbi5wYXRjaApAQCAtMCwwICsxLDU4IEBACitGcm9tIGIwMWJiMjY5NGY2NmNkOTgxZTZkNjE1MjM0MzNkYzNlYjVlZDMyZjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBMaSB4aW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CitEYXRlOiBTYXQsIDE4IEp1bCAyMDE1IDIzOjAzOjMwICswOTAwCitTdWJqZWN0OiBbUEFUQ0hdIGNvbmZpZ3VyZS5hYyAtIEF2b2lkIGFuIGluY29ycmVjdCBjaGVjayBmb3IgcHl0aG9uLgorIE1ha2VmaWxlLmFtIC0gYXZvaWQgaGFyZCBjb2RlZCBob3N0IGluY2x1ZGUgcGF0aHMuCisKK1Vwc3RyZWFtLVN0YXR1czogcGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBNYXJrIEhhdGxlIDxtYXJrLmhhdGxlQHdpbmRyaXZlci5jb20+CitTaWduZWQtb2ZmLWJ5OiBMaSBYaW4gPGxpeGluLmZuc3RAY24uZnVqaXRzdS5jb20+CistLS0KKyBiaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0gfCAgMyArKy0KKyBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgfCAxNSArKy0tLS0tLS0tLS0tLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0gYi9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KK2luZGV4IDgyYjliYjguLmY5ZmU3YTggMTAwNjQ0CistLS0gYS9iaW5kaW5ncy9weXRob24vTWFrZWZpbGUuYW0KKysrKyBiL2JpbmRpbmdzL3B5dGhvbi9NYWtlZmlsZS5hbQorQEAgLTIzLDcgKzIzLDggQEAgU1VCRElSUyA9IHRlc3QKKyBDT05GSUdfQ0xFQU5fRklMRVMgPSAqLmxvVCAqLnJlaiAqLm9yaWcKKyBBTV9DRkxBR1MgPSAtZlBJQyAtRFBJQworIFBZTElCVkVSID89IHB5dGhvbiQoUFlUSE9OX1ZFUlNJT04pCistQU1fQ1BQRkxBR1MgPSAtSS4gLUkkKHRvcF9idWlsZGRpcikgLUlAUFlJTkNMVURFRElSQAorK1BZSU5DID89IC91c3IvaW5jbHVkZS8kKFBZTElCVkVSKQorK0FNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3BfYnVpbGRkaXIpIC1JJChQWUlOQykKKyBMSUJTID0gJCh0b3BfYnVpbGRkaXIpL3NyYy9saWJjYXAtbmcubGEKKyBTV0lHX0ZMQUdTID0gLXB5dGhvbgorIFNXSUdfSU5DTFVERVMgPSAke0FNX0NQUEZMQUdTfQorZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYworaW5kZXggMWQ3NzdkNS4uOWQ5MGY2NCAxMDA2NDQKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtMTIzLDE5ICsxMjMsOCBAQCBpZiB0ZXN0IHgkdXNlX3B5dGhvbiA9IHhubyA7IHRoZW4KKyBlbHNlCisgQUNfTVNHX1JFU1VMVCh0ZXN0aW5nKQorIEFNX1BBVEhfUFlUSE9OCistUFlJTkNMVURFRElSPWBweXRob24ke2FtX2N2X3B5dGhvbl92ZXJzaW9ufSAtYyAiZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdJTkNMVURFUFknKSkiYAorLWlmIHRlc3QgLWYgJHtQWUlOQ0xVREVESVJ9L1B5dGhvbi5oIDsgdGhlbgorLQlweXRob25fZm91bmQ9InllcyIKKy0JQUNfU1VCU1QoUFlJTkNMVURFRElSKQorLQlBQ19NU0dfTk9USUNFKFB5dGhvbiBiaW5kaW5ncyB3aWxsIGJlIGJ1aWx0KQorLWVsc2UKKy0JcHl0aG9uX2ZvdW5kPSJubyIKKy0JaWYgdGVzdCB4JHVzZV9weXRob24gPSB4eWVzIDsgdGhlbgorLQkJQUNfTVNHX0VSUk9SKFtQeXRob24gZXhwbGljaXRseSByZXF1aXJlZCBhbmQgcHl0aG9uIGhlYWRlcnMgZm91bmRdKQorLQllbHNlCistCQlBQ19NU0dfV0FSTigiUHl0aG9uIGhlYWRlcnMgbm90IGZvdW5kIC0gcHl0aG9uIGJpbmRpbmdzIHdpbGwgbm90IGJlIG1hZGUiKQorLQlmaQorLWZpCisrcHl0aG9uX2ZvdW5kPSJ5ZXMiCisrQUNfTVNHX05PVElDRShQeXRob24gYmluZGluZ3Mgd2lsbCBiZSBidWlsdCkKKyBmaQorIEFNX0NPTkRJVElPTkFMKEhBVkVfUFlUSE9OLCB0ZXN0ICR7cHl0aG9uX2ZvdW5kfSA9ICJ5ZXMiKQorIAorLS0gCisxLjguNC4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC1uZy9saWJjYXAtbmdfMC43LjcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMWQ1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAtbmcvbGliY2FwLW5nXzAuNy43LmJiCkBAIC0wLDAgKzEsMzkgQEAKK1NVTU1BUlkgPSAiQW4gYWx0ZXJuYXRlIHBvc2l4IGNhcGFiaWxpdGllcyBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiVGhlIGxpYmNhcC1uZyBsaWJyYXJ5IGlzIGludGVuZGVkIHRvIG1ha2UgcHJvZ3JhbW1pbmcgXAord2l0aCBQT1NJWCBjYXBhYmlsaXRpZXMgbXVjaCBlYXNpZXIgdGhhbiB0aGUgdHJhZGl0aW9uYWwgbGliY2FwIGxpYnJhcnkuIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVjb2RlLmNvbS9wcm9qZWN0cy9saWJjYXAtbmciCitTRUNUSU9OID0gImJhc2UiCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTk0ZDU1ZDUxMmE5YmEzNmNhYTliN2RmMDc5YmFlMTlmIFwKKwkJICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9ZTNlZGEwMWQ5ODE1ZjhkMjRhYWUyZGJkODliNjhiMDYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL3NncnViYi9saWJjYXAtbmcvbGliY2FwLW5nLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9weXRob24ucGF0Y2giCisKK2luaGVyaXQgbGliX3BhY2thZ2UgYXV0b3Rvb2xzIHB5dGhvbm5hdGl2ZQorCitTUkNfVVJJW21kNXN1bV0gPSAiM2Q3ZDEyNmIyOWUyODY5YTAyNTdjMTdjOGIwZDliMmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjE1NTQ5Y2UzOWIzMzNmNmI3OGJhZWUwYzBiNGVmMThiYzcyNmM2YmYxY2NhMTIzZGZkODlkZDk2M2Y2ZDA2YiIKKworREVQRU5EUyArPSAic3dpZy1uYXRpdmUgcHl0aG9uIgorCitFWFRSQV9PRUNPTkYgKz0gIi0td2l0aG91dC1weXRob24zIgorCitFWFRSQV9PRU1BS0UgKz0gIlBZTElCVkVSPSdweXRob24ke1BZVEhPTl9CQVNFVkVSU0lPTn0nIFBZSU5DPScke1NUQUdJTkdfSU5DRElSfS8ke1BZTElCVkVSfSciCisKK1BBQ0tBR0VTICs9ICIke1BOfS1weXRob24iCisKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L3B5dGhvbiR7UFlUSE9OX0JBU0VWRVJTSU9OfS8qLy5kZWJ1ZyIKK0ZJTEVTXyR7UE59LXB5dGhvbiA9ICIke2xpYmRpcn0vcHl0aG9uJHtQWVRIT05fQkFTRVZFUlNJT059IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZpbmcgbGliY2FwLW5nIHRvIGJhc2VfbGliZGlyCisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW1rZGlyIC1wICR7RH0vJHtiYXNlX2xpYmRpcn0vCisJCW12IC1mICR7RH0ke2xpYmRpcn0vbGliY2FwLW5nLnNvLiogJHtEfSR7YmFzZV9saWJkaXJ9LworCQlyZWxwYXRoPSR7QG9zLnBhdGgucmVscGF0aCgiJHtiYXNlX2xpYmRpcn0iLCAiJHtsaWJkaXJ9Iil9CisJCWxuIC1zZiAke3JlbHBhdGh9L2xpYmNhcC1uZy5zby4wLjAuMCAke0R9JHtsaWJkaXJ9L2xpYmNhcC1uZy5zbworCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjYXAvbGliY2FwXzIuMjQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZiOTRlZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNhcC9saWJjYXBfMi4yNC5iYgpAQCAtMCwwICsxLDc3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIGdldHRpbmcvc2V0dGluZyBQT1NJWC4xZSBjYXBhYmlsaXRpZXMiCitIT01FUEFHRSA9ICJodHRwOi8vc2l0ZXMuZ29vZ2xlLmNvbS9zaXRlL2Z1bGx5Y2FwYWJsZS8iCisKKyMgbm8gc3BlY2lmaWMgR1BMIHZlcnNpb24gcmVxdWlyZWQKK0xJQ0VOU0UgPSAiQlNEIHwgR1BMdjIiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MaWNlbnNlO21kNT0zZjg0ZmQ2ZjI5ZDQ1M2E1NjUxNGNiN2U0ZWFkMjVmMSIKKworREVQRU5EUyA9ICJwZXJsLW5hdGl2ZS1ydW50aW1lIgorCitTUkNfVVJJID0gIiR7S0VSTkVMT1JHX01JUlJPUn0vbGludXgvbGlicy9zZWN1cml0eS9saW51eC1wcml2cy8ke0JQTn0yLyR7QlBOfS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkNDNhYjlmNjgwNDM1YTdmZmYzNWI0YWNlOGQ0NWI4MCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjZWU0NTY4Zjc4ZGM4NTFkNzI2ZmM5M2YyNWY0ZWQ5MWNjMjIzYjFmZTgyNTlkYWE0YTc3MTU4ZDE3NGU2YzY1IgorCitpbmhlcml0IGxpYl9wYWNrYWdlCisKKyMgZG8gTk9UIHBhc3MgdGFyZ2V0IGNmbGFncyB0byBob3N0IGNvbXBpbGF0aW9ucworIworZG9fY29uZmlndXJlKCkgeworCSMgbGliY2FwIHVzZXMgOj0gZm9yIGNvbXBpbGVycywgZm9ydHVuYXRlbHksIGl0IGdpdmVzIHVzIGEgaGludAorCSMgb24gd2hhdCBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCA/PQorCXNlZCAtZSAncyw6PSw/PSxnJyAtaSBNYWtlLlJ1bGVzCisJc2VkIC1lICdzLF5CVUlMRF9DRkxBR1MgPz0gJCguKkNGTEFHUyksQlVJTERfQ0ZMQUdTIDo9ICQoQlVJTERfQ0ZMQUdTKSwnIC1pIE1ha2UuUnVsZXMKKworCSMgZGlzYWJsZSBncGVyZiBkZXRlY3Rpb24KKwlzZWQgLWUgJy9zaGVsbCBncGVyZi9jaWZlcSAoLHllcyknIC1pIGxpYmNhcC9NYWtlZmlsZQorfQorCitQQUNLQUdFQ09ORklHID8/PSAiJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICdwYW0nLCAncGFtJywgJycsIGQpfSBcCisgICAgICAgICAgICAgICAgICAgJHtAYmIudXRpbHMuY29udGFpbnMoJ0RJU1RST19GRUFUVVJFUycsICd4YXR0cicsICdhdHRyJywgJycsIGQpfSIKK1BBQ0tBR0VDT05GSUdfY2xhc3MtbmF0aXZlID8/PSAiIgorCitQQUNLQUdFQ09ORklHW2F0dHJdID0gIkxJQkFUVFI9eWVzLExJQkFUVFI9bm8sYXR0ciIKK1BBQ0tBR0VDT05GSUdbcGFtXSA9ICJQQU1fQ0FQPXllcyxQQU1fQ0FQPW5vLGxpYnBhbSIKKworRVhUUkFfT0VNQUtFID0gIiBcCisgIElOREVOVD0gIFwKKyAgbGliPSR7QG9zLnBhdGguYmFzZW5hbWUoJyR7bGliZGlyfScpfSBcCisgIFJBSVNFX1NFVEZDQVA9bm8gXAorICBEWU5BTUlDPXllcyBcCisiCisKK0VYVFJBX09FTUFLRV9hcHBlbmRfY2xhc3MtdGFyZ2V0ID0gIiBTWVNURU1fSEVBREVSUz0ke1NUQUdJTkdfSU5DRElSfSIKKworIyB0aGVzZSBhcmUgcHJlc2VudCBpbiB0aGUgbGliY2FwIGRlZmF1bHRzLCBzbyBpbmNsdWRlIGluIG91ciBDRkxBR1MgdG9vCitDRkxBR1MgKz0gIi1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgorCitkb19jb21waWxlKCkgeworCW9lX3J1bm1ha2UgJHtFWFRSQV9PRUNPTkZ9Cit9CisKK2RvX2luc3RhbGwoKSB7CisJb2VfcnVubWFrZSBpbnN0YWxsIFwKKwkJJHtFWFRSQV9PRUNPTkZ9IFwKKwkJREVTVERJUj0iJHtEfSIgXAorCQlwcmVmaXg9IiR7cHJlZml4fSIgXAorCQlTQklORElSPSIke0R9JHtzYmluZGlyfSIKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJIyBNb3ZlIHRoZSBsaWJyYXJ5IHRvIGJhc2VfbGliZGlyCisJaW5zdGFsbCAtZCAke0R9JHtiYXNlX2xpYmRpcn0KKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbXYgJHtEfSR7bGliZGlyfS9saWJjYXAqICR7RH0ke2Jhc2VfbGliZGlyfQorICAgICAgICAgICAgICAgIGlmIFsgLWQgJHtEfSR7bGliZGlyfS9zZWN1cml0eSBdOyB0aGVuCisJCQltdiAke0R9JHtsaWJkaXJ9L3NlY3VyaXR5ICR7RH0ke2Jhc2VfbGliZGlyfQorCQlmaQorCWZpCit9CisKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtiYXNlX2xpYmRpcn0vKi5zbyIKKworIyBwYW0gZmlsZXMKK0ZJTEVTXyR7UE59ICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8qLnNvIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2Jhc2VfbGliZGlyfS9zZWN1cml0eS8uZGVidWcvKi5zbyIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliY2hlY2svbGliY2hlY2tfMC4xMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjQ1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjaGVjay9saWJjaGVja18wLjEwLjAuYmIKQEAgLTAsMCArMSwyNCBAQAorU1VNTUFSWSAgPSAiQ2hlY2sgLSB1bml0IHRlc3RpbmcgZnJhbWV3b3JrIGZvciBDIGNvZGUiCitIT01FUEFHRSA9ICJodHRwOi8vY2hlY2suc291cmNlZm9yZ2UubmV0LyIKK1NFQ1RJT04gPSAiZGV2ZWwiCisKK0xJQ0VOU0UgID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vY2hlY2svY2hlY2stJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI1M2M1ZTVjNzdkMDkwZTEwM2ExN2YzZWQ3ZmQ3ZDhiOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJmNWY1MDc2NmFhNmY4ZmU1YTJkZjc1MjY2NmNhMDFhOTUwYWRkNDUwNzlhYTA2NDE2YjgzNzY1YjFjZjcxMDUyIgorCitTID0gIiR7V09SS0RJUn0vY2hlY2stJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyB0ZXhpbmZvCisKK0NBQ0hFRF9DT05GSUdVUkVWQVJTICs9ICJhY19jdl9wYXRoX0FXS19QQVRIPSR7YmluZGlyfS9nYXdrIgorCitSUkVQTEFDRVNfJHtQTn0gPSAiY2hlY2sgKDw9IDAuOS41KSIKK1JERVBFTkRTXyR7UE59ICs9ICJnYXdrIgorUkRFUEVORFNfJHtQTn1fY2xhc3MtbmF0aXZlID0gIiIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmNyb2NvL2xpYmNyb2NvXzAuNi44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMWI5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJjcm9jby9saWJjcm9jb18wLjYuOC5iYgpAQCAtMCwwICsxLDIxIEBACitTVU1NQVJZID0gIkNhc2NhZGluZyBTdHlsZSBTaGVldCAoQ1NTKSBwYXJzaW5nIGFuZCBtYW5pcHVsYXRpb24gdG9vbGtpdCIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiAmIExHUEx2Mi4xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NTVjYTgxN2NjYjdkNWI1YjY2MzU1NjkwZTlhYmM2MDUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2NyLXJnYi5jO2VuZGxpbmU9MjI7bWQ1PTMxZDVmMDk0NGQ1NTZjODU4OWQwNGVhNjA1NWZjYzY2IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzL2NyLXRlc3QtdXRpbHMuYztlbmRsaW5lPTIxO21kNT0yMzgyYzI3OTM0Y2FlMWQzNzkyZmNiMTdhNjE0MmM0ZSIKKworU0VDVElPTiA9ICJ4MTEvdXRpbHMiCitERVBFTkRTID0gImdsaWItMi4wIGxpYnhtbDIgemxpYiIKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgorRVhUUkFfT0VDT05GICs9ICItLWVuYWJsZS1Cc3ltYm9saWM9YXV0byIKK1BSID0gInIyIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L2Nyb2NvLTAuNi1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnbm9tZWJhc2UgZ3RrLWRvYyBiaW5jb25maWctZGlzYWJsZWQKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNzY3ZTczYzQxNzRmNzViOTk2OTVkNDUzMGZkOWJiODAiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICJlYTZlMWI4NThjNTUyMTljZWZkNzEwOTc1NmJmZjViYzFhNzc0YmE3YTU1ZjdkM2NjZDczNGQ2Yjg3MWI4NTcwIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uL2ZpeC1pbmNsdWRlcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDI3YWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZGFlbW9uL2xpYmRhZW1vbi9maXgtaW5jbHVkZXMucGF0Y2gKQEAgLTAsMCArMSwyMCBAQAorbXVzbCBjb21wbGFpbnMKK2ZhdGFsIGVycm9yOiBzeXMvdW5pc3RkLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK2FuZCByaWdodGx5IHNvCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIGxpYmRhZW1vbi0wLjE0Lm9yaWcvZXhhbXBsZXMvdGVzdGQuYworKysrIGxpYmRhZW1vbi0wLjE0L2V4YW1wbGVzL3Rlc3RkLmMKK0BAIC0yMSw5ICsyMSw5IEBACisgI2luY2x1ZGUgPHNpZ25hbC5oPgorICNpbmNsdWRlIDxlcnJuby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICNpbmNsdWRlIDxzeXMvdGltZS5oPgorLSNpbmNsdWRlIDxzeXMvdW5pc3RkLmg+CisgI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyAKKyAjaW5jbHVkZSA8bGliZGFlbW9uL2Rmb3JrLmg+CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJkYWVtb24vbGliZGFlbW9uXzAuMTQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwZWUxOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmRhZW1vbi9saWJkYWVtb25fMC4xNC5iYgpAQCAtMCwwICsxLDE4IEBACitTVU1NQVJZID0gIkxpZ2h0d2VpZ2h0IEMgbGlicmFyeSB3aGljaCBlYXNlcyB0aGUgd3JpdGluZyBvZiBVTklYIGRhZW1vbnMiCitTRUNUSU9OID0gImxpYnMiCitBVVRIT1IgPSAiTGVubmFydCBQb2V0dGVyaW5nIDxsZW5uYXJ0QHBvZXR0ZXJpbmcubmV0PiIKK0hPTUVQQUdFID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL2xpYmRhZW1vbi8iCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmRhZW1vbi9kYWVtb24uaDtiZWdpbmxpbmU9OTtlbmRsaW5lPTIxO21kNT1iZDlmYmU1N2NkOTZkMWE1ODQ4YThiYTEyZDlhNmJmNCIKKworU1JDX1VSSSA9ICJodHRwOi8vMHBvaW50ZXIuZGUvbGVubmFydC9wcm9qZWN0cy9saWJkYWVtb24vbGliZGFlbW9uLSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtaW5jbHVkZXMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjUwOWRjMjcxMDdjMjFiY2Q5ZmJmMmY5NWY1NjY5NTYzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkMjNlYjVmNmY5ODZkY2M3ZTcwODMwNzM1NWJhMzI4OWFiZTAzY2MzODFmYzQ3YTgwYmNhNGE1MGFhNmI4MzQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWx5bngiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZGV2L2xpYmV2ZGV2XzEuNC4yLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NTEzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmRldi9saWJldmRldl8xLjQuMi5iYgpAQCAtMCwwICsxLDE0IEBACitTVU1NQVJZID0gIldyYXBwZXIgbGlicmFyeSBmb3IgZXZkZXYgZGV2aWNlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZnJlZWRlc2t0b3Aub3JnL3dpa2kvU29mdHdhcmUvbGliZXZkZXYvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1JVC1YIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9NzVhYWUwZDM4ZmVlYTZmZGE5N2NhMzgxY2I5MTMyZWIgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGliZXZkZXYvbGliZXZkZXYuaDtlbmRsaW5lPTIxO21kNT03ZmY0ZjBiNTExMzI1MmMyZjFhODI4ZTBiYmFkOThkMSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9saWJldmRldi8ke0JQfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJkZWJmY2Q1MTUzNTU4ZWJhMjVhOGU3MWViMjUzNGFlOCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3Yzc3YjIxM2YwNzU3MDZkNDI4YTJhZjU0YjY2YmY4NmIwM2E2OGU5ZmIzOTBlN2VjNDhjZjU1MDY1OTcwNjQzIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50L3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIxNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXZlbnQvbGliZXZlbnQvcnVuLXB0ZXN0CkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCitmYWlsPTAKK2ZvciB0ZXN0IGluIC4vdGVzdC8qCitkbworCSR0ZXN0CisJaWYgWyAkPyAtZXEgMCBdCisJdGhlbgorCQlmYWlsPTEKKwlmaQorZG9uZQorCitpZiBbICRmYWlsIC1lcSAwIF0KK3RoZW4KKwllY2hvICJQQVNTOiBsaWJldmVudCIKK2Vsc2UKKwllY2hvICJGQUlMOiBsaWJldmVudCIKK2ZpCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJldmVudC9saWJldmVudF8yLjAuMjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjMjYzYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmV2ZW50L2xpYmV2ZW50XzIuMC4yMi5iYgpAQCAtMCwwICsxLDM5IEBACitTVU1NQVJZID0gIkFuIGFzeW5jaHJvbm91cyBldmVudCBub3RpZmljYXRpb24gbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJldmVudC5vcmcvIgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTUwODg0JmF0aWQ9NDYxMzIyIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkJTRCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTQ1YzUzMTZmZjY4NGJjZmUyZjlmODZkOGIxMjc5NTU5IgorCitTUkNfVVJJID0gIiBcCisgICAgJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xldmVudC8ke0JQfS1zdGFibGUudGFyLmd6IFwKKyAgICBmaWxlOi8vcnVuLXB0ZXN0IFwKKyIKKworU1JDX1VSSVttZDVzdW1dID0gImM0YzU2Zjk4NmFhOTg1Njc3Y2ExZGI4OTYzMGEyZTExIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjcxYzJjNDlmMGFkYWRhY2ZkYmU2MzMyYTM3MmMzOGNmOWM4Yjc4OTViYjczZGFiZWFhNTNjZGNjMWQ0ZTFmYTMiCisKK1MgPSAiJHtXT1JLRElSfS8ke0JQTn0tJHtQVn0tc3RhYmxlIgorCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tvcGVuc3NsXSA9ICItLWVuYWJsZS1vcGVuc3NsLC0tZGlzYWJsZS1vcGVuc3NsLG9wZW5zc2wiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKKyMgTmVlZGVkIGZvciBEZWJpYW4gcGFja2FnaW5nCitMRUFEX1NPTkFNRSA9ICJsaWJldmVudC0yLjAuc28iCisKK2luaGVyaXQgcHRlc3QKKworREVQRU5EUyA9ICJ6bGliIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK2RvX2luc3RhbGxfcHRlc3QoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0CisJZm9yIGZpbGUgaW4gJHtCfS90ZXN0Ly5saWJzL3JlZ3Jlc3MgJHtCfS90ZXN0Ly5saWJzL3Rlc3QqCisJZG8KKwkJaW5zdGFsbCAtbSAwNzU1ICRmaWxlICR7RH0ke1BURVNUX1BBVEh9L3Rlc3QKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJleGlmL2xpYmV4aWZfMC42LjIxLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY0Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZXhpZi9saWJleGlmXzAuNi4yMS5iYgpAQCAtMCwwICsxLDE3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlYWRpbmcgZXh0ZW5kZWQgaW1hZ2UgaW5mb3JtYXRpb24gKEVYSUYpIGZyb20gSlBFRyBmaWxlcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliZXhpZiIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0yNDNiNzI1ZDcxYmI1ZGY0YTFlNTkyMGIzNDRiODZhZCIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vbGliZXhpZi9saWJleGlmLSR7UFZ9LnRhci5iejIiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIyNzMzOWI4OTg1MGYyOGM4ZjFjMjM3ZjIzM2UwNWIyNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxNmNkYWViNjJlYjNlNmRmYWIyNDM1ZjdkN2JjY2QyZjM3NDM4ZDIxYzUyMThlYzRlNThlZmE5MTU3ZDRkNDFhIgorCitpbmhlcml0IGF1dG90b29scyBnZXR0ZXh0CisKK2RvX2NvbmZpZ3VyZV9hcHBlbmQoKSB7CisJc2VkIC1pIHM6ZG9jXCBiaW5hcnk6YmluYXJ5OmcgTWFrZWZpbGUKK30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmEvMDAwMS1ubHMubTQtVGFrZS1pdC1mcm9tLWdldHRleHQtMC4xNS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNTFkNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmZtL2xpYmZtLWV4dHJhLzAwMDEtbmxzLm00LVRha2UtaXQtZnJvbS1nZXR0ZXh0LTAuMTUucGF0Y2gKQEAgLTAsMCArMSw1NCBAQAorRnJvbSBjMzIwNzk5Yzk0MWQ0MmE5YjdlMzUxODA1MzU5Njk0ZWEzYjM2ZDJkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFN1biwgNSBBcHIgMjAxNSAwOTowODozOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBubHMubTQ6IFRha2UgaXQgZnJvbSBnZXR0ZXh0LTAuMTUKKworSXQgb3RoZXJ3aXNlIGV4cGVjdHMgZ2V0dGV4dCB0byBwcm92aWRlIGl0LiBMZXRzIGdvIGluZGVwZW5kZW50CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworLS0tCisgbTQvbmxzLm00IHwgMzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgMSBmaWxlIGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgbTQvbmxzLm00CisKK2RpZmYgLS1naXQgYS9tNC9ubHMubTQgYi9tNC9ubHMubTQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4yYzhmZTY5CistLS0gL2Rldi9udWxsCisrKysgYi9tNC9ubHMubTQKK0BAIC0wLDAgKzEsMzAgQEAKKytkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMDUtMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKytkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKytkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKytkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorK2RubAorK2RubCBUaGlzIGZpbGUgY2FuIGNhbiBiZSB1c2VkIGluIHByb2plY3RzIHdoaWNoIGFyZSBub3QgYXZhaWxhYmxlIHVuZGVyCisrZG5sIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKytkbmwgTGljZW5zZSBidXQgd2hpY2ggc3RpbGwgd2FudCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgZ2V0dGV4dAorK2RubCBmdW5jdGlvbmFsaXR5LgorK2RubCBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBhY3R1YWwgY29kZSBvZiB0aGUgR05VIGdldHRleHQgbGlicmFyeSBpcyBjb3ZlcmVkCisrZG5sIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlIHJlc3Qgb2YgdGhlIEdOVQorK2RubCBnZXR0ZXh0IHBhY2thZ2UgcGFja2FnZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKytkbmwgVGhleSBhcmUgbm90IGluIHRoZSBwdWJsaWMgZG9tYWluLgorKworK2RubCBBdXRob3JzOgorK2RubCBVbHJpY2ggRHJlcHBlciBkcmVwcGVyQGN5Z251cy5jb20sIDE5OTUtMjAwMC4KKytkbmwgQnJ1bm8gSGFpYmxlIGhhaWJsZUBjbGlzcC5jb25zLm9yZywgMjAwMC0yMDAzLgorKworK0FDX1BSRVJFUSgyLjUwKQorKworK0FDX0RFRlVOKFtBTV9OTFNdLAorK1sKKytBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgTkxTIGlzIHJlcXVlc3RlZF0pCisrZG5sIERlZmF1bHQgaXMgZW5hYmxlZCBOTFMKKytBQ19BUkdfRU5BQkxFKG5scywKKytbIC0tZGlzYWJsZS1ubHMgZG8gbm90IHVzZSBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydF0sCisrVVNFX05MUz0kZW5hYmxldmFsLCBVU0VfTkxTPXllcykKKytBQ19NU0dfUkVTVUxUKCRVU0VfTkxTKQorK0FDX1NVQlNUKFVTRV9OTFMpCisrXSkKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbS1leHRyYV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQyZDYyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm0tZXh0cmFfMS4yLjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBmaWxlIG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkxHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9zcmMvZm0tZXh0cmEuaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIxO21kNT1lZjFmODRkYTY0YjNjMDFjY2E0NDcyMTJmN2VmNjAwNyIKKworU0VDVElPTiA9ICJ4MTEvbGlicyIKK0RFUEVORFMgPSAiZ2xpYi0yLjAgaW50bHRvb2wtbmF0aXZlIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9wY21hbmZtL2xpYmZtLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLW5scy5tNC1UYWtlLWl0LWZyb20tZ2V0dGV4dC0wLjE1LnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZmYzODIwMDcwMTY1OGY3ZTgwZTI1ZWQzOTVkOTJkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjkyZjE2MjRhNGNiYzhkMWRkNTVmM2IzZjMzNjlmYmY1ZDI2ZjYzYTkxNmUyYzI5NTIzMGIyMzQ0ZTFmYmY5IgorCitTID0gIiR7V09SS0RJUn0vbGliZm0tJHtQVn0iCisKK0VYVFJBX09FQ09ORiA9ICItLXdpdGgtZXh0cmEtb25seSAtLXdpdGgtZ3RrPW5vIgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MKKworZG9fY29uZmlndXJlW2RpcnNdID0rICIke1N9L200IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJmbS9saWJmbV8xLjIuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjk1MDJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZm0vbGliZm1fMS4yLjMuYmIKQEAgLTAsMCArMSwzOCBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IGZvciBmaWxlIG1hbmFnZW1lbnQiCitIT01FUEFHRSA9ICJodHRwOi8vcGNtYW5mbS5zb3VyY2Vmb3JnZS5uZXQvIgorCitMSUNFTlNFID0gIkdQTHYyKyAmIExHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvZm0uaDtiZWdpbmxpbmU9ODtlbmRsaW5lPTIxO21kNT1lZjFmODRkYTY0YjNjMDFjY2E0NDcyMTJmN2VmNjAwNyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvYmFzZS9mbS1jb25maWcuaDtiZWdpbmxpbmU9MTA7ZW5kbGluZT0yMzttZDU9ZWYxZjg0ZGE2NGIzYzAxY2NhNDQ3MjEyZjdlZjYwMDcgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2ZtLWd0ay5oO2JlZ2lubGluZT02O2VuZGxpbmU9MTk7bWQ1PTY0NmJhYTQ5NTVjMDRmZTc2OGYyY2EyN2I5MmFjOGRkIgorCisKK1NFQ1RJT04gPSAieDExL2xpYnMiCitERVBFTkRTID0gImdsaWItMi4wIHBhbmdvIGd0aysgbWVudS1jYWNoZSBpbnRsdG9vbC1uYXRpdmUgbGliZXhpZiBsaWJmbS1leHRyYSIKKworU1JDX1VSSSA9ICIke1NPVVJDRUZPUkdFX01JUlJPUn0vcGNtYW5mbS9saWJmbS0ke1BWfS50YXIueHoiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICIzZmYzODIwMDcwMTY1OGY3ZTgwZTI1ZWQzOTVkOTJkZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjNjkyZjE2MjRhNGNiYzhkMWRkNTVmM2IzZjMzNjlmYmY1ZDI2ZjYzYTkxNmUyYzI5NTIzMGIyMzQ0ZTFmYmY5IgorCitQUiA9ICJyMSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGd0ay1kb2MKKworZG9fY29uZmlndXJlW2RpcnNdID0rICIke1N9L200IgorCitQQUNLQUdFUyArPSAiJHtQTn0tbWltZSIKK0ZJTEVTXyR7UE59LW1pbWUgPSAiJHtkYXRhZGlyfS9taW1lLyIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9L2xpYmZtL21vZHVsZXMvLmRlYnVnIgorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisgICAgIyByZW1vdmUgZmlsZXMgd2hpY2ggYXJlIHBhcnQgb2YgbGliZm0tZXh0cmEKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0teG1sLWZpbGUuaAorICAgIHJtIC1mICR7RH0ke2luY2x1ZGVkaXJ9L2xpYmZtLTEuMC9mbS12ZXJzaW9uLmgKKyAgICBybSAtZiAke0R9JHtpbmNsdWRlZGlyfS9saWJmbS0xLjAvZm0tZXh0cmEuaAorICAgIHJtIC1mICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL2xpYmZtLWV4dHJhLnBjCisgICAgcm0gLWYgJHtEfSR7bGliZGlyfS9saWJmbS1leHRyYS5zbyoKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmZtLWV4dHJhLmEKKyAgICBybSAtZiAke0R9JHtsaWJkaXJ9L2xpYmZtLWV4dHJhLmxhCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2RkZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2FkZC1wa2djb25maWctc3VwcG9ydC5wYXRjaApAQCAtMCwwICsxLDE1MSBAQAorQWRkIGFuZCB1c2UgcGtnLWNvbmZpZyBmb3IgbGliZ2NyeXB0IGluc3RlYWQgb2YgLWNvbmZpZyBzY3JpcHRzLgorCitVcHN0cmVhbS1TdGF0dXM6IERlbmllZCBbdXBzdHJlYW0gaGF2ZSBpbmRpY2F0ZWQgdGhleSBkb24ndCB3YW50IGEgcGtnLWNvbmZpZyBkZXBlbmRlbmN5XQorCitSUCAyMDE0LzUvMjIKKworSW5kZXg6IGxpYmdjcnlwdC0xLjIuNC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJnY3J5cHQtMS4yLjQub3JpZy9jb25maWd1cmUuYWMJMjAwOC0wMy0xOSAyMjoxNDo1MC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS4yLjQvY29uZmlndXJlLmFjCTIwMDgtMDMtMTkgMjI6MTQ6NTguMDAwMDAwMDAwICswMDAwCitAQCAtODA3LDYgKzgwNyw3IEBACisgZG9jL01ha2VmaWxlCisgc3JjL01ha2VmaWxlCisgc3JjL2djcnlwdC5oCisrc3JjL2xpYmdjcnlwdC5wYworIHNyYy9saWJnY3J5cHQtY29uZmlnCisgdGVzdHMvTWFrZWZpbGUKKyB3MzItZGxsL01ha2VmaWxlCitJbmRleDogbGliZ2NyeXB0LTEuMi40L3NyYy9saWJnY3J5cHQucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrKyBsaWJnY3J5cHQtMS4yLjQvc3JjL2xpYmdjcnlwdC5wYy5pbgkyMDA4LTAzLTE5IDIyOjE0OjU4LjAwMDAwMDAwMCArMDAwMAorQEAgLTAsMCArMSwzMyBAQAorKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgcGtnLWNvbmZpZyBtZXRhZGF0YSBmaWxlLgorKyMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorKyMgQXV0aG9yOiBTaW1vbiBKb3NlZnNzb24KKysjCisrIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0aGUgYXV0aG9yIGdpdmVzCisrIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKysjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorKyMKKysjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKysjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQgZXZlbiB0aGUKKysjIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorKworK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1ATElCR0NSWVBUX0NPTkZJR19BUElfVkVSU0lPTkAKKytob3N0PUBMSUJHQ1JZUFRfQ09ORklHX0hPU1RACisrCisrIyBNaXNjIGluZm9ybWF0aW9uLgorK3N5bW1ldHJpY19jaXBoZXJzPUBMSUJHQ1JZUFRfQ0lQSEVSU0AKKythc3ltbWV0cmljX2NpcGhlcnM9QExJQkdDUllQVF9QVUJLRVlfQ0lQSEVSU0AKKytkaWdlc3RzPUBMSUJHQ1JZUFRfRElHRVNUU0AKKysKKytOYW1lOiBsaWJnY3J5cHQKKytEZXNjcmlwdGlvbjogR05VIGNyeXB0byBsaWJyYXJ5CisrVVJMOiBodHRwOi8vd3d3LmdudXBnLm9yZworK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ2NyeXB0CisrTGlicy5wcml2YXRlOiAtTCR7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IAorSW5kZXg6IGxpYmdjcnlwdC0xLjYuMS9zcmMvbGliZ2NyeXB0Lm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ2NyeXB0LTEuNi4xLm9yaWcvc3JjL2xpYmdjcnlwdC5tNAkyMDEzLTEyLTE2IDE3OjQ0OjMyLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmdjcnlwdC0xLjYuMS9zcmMvbGliZ2NyeXB0Lm00CTIwMTQtMDUtMTMgMjE6MjU6MzcuNDc4Mzg5ODMzICswMDAwCitAQCAtMjIsMTcgKzIyLDcgQEAKKyBkbmwKKyBBQ19ERUZVTihbQU1fUEFUSF9MSUJHQ1JZUFRdLAorIFsgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgQUNfQVJHX1dJVEgobGliZ2NyeXB0LXByZWZpeCwKKy0gICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLWxpYmdjcnlwdC1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIExJQkdDUllQVCBpcyBpbnN0YWxsZWQgKG9wdGlvbmFsKV0pLAorLSAgICAgbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIiwgbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgkbGliZ2NyeXB0X2NvbmZpZ19wcmVmaXggIT0geCA7IHRoZW4KKy0gICAgIGlmIHRlc3QgeCR7TElCR0NSWVBUX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgICBMSUJHQ1JZUFRfQ09ORklHPSRsaWJnY3J5cHRfY29uZmlnX3ByZWZpeC9iaW4vbGliZ2NyeXB0LWNvbmZpZworLSAgICAgZmkKKy0gIGZpCisgCistICBBQ19QQVRIX1RPT0woTElCR0NSWVBUX0NPTkZJRywgbGliZ2NyeXB0LWNvbmZpZywgbm8pCisgICB0bXA9aWZlbHNlKFskMV0sICwxOjEuMi4wLCQxKQorICAgaWYgZWNobyAiJHRtcCIgfCBncmVwICc6JyA+L2Rldi9udWxsIDI+L2Rldi9udWxsIDsgdGhlbgorICAgICAgcmVxX2xpYmdjcnlwdF9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtNDIsNDggKzMyLDEzIEBACisgICAgICBtaW5fbGliZ2NyeXB0X3ZlcnNpb249IiR0bXAiCisgICBmaQorIAorLSAgQUNfTVNHX0NIRUNLSU5HKGZvciBMSUJHQ1JZUFQgLSB2ZXJzaW9uID49ICRtaW5fbGliZ2NyeXB0X3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJExJQkdDUllQVF9DT05GSUciICE9ICJubyIgOyB0aGVuCistICAgIHJlcV9tYWpvcj1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2xpYmdjcnlwdF92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wzLydgCistICAgIGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbj1gJExJQkdDUllQVF9DT05GSUcgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDEvJ2AKKy0gICAgbWlub3I9YGVjaG8gJGxpYmdjcnlwdF9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCistICAgIG1pY3JvPWBlY2hvICRsaWJnY3J5cHRfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMy8nYAorLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgkbGliZ2NyeXB0X2NvbmZpZ192ZXJzaW9uKV0pCistICBlbHNlCistICAgIEFDX01TR19SRVNVTFQobm8pCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoTElCR0NSWVBULCBbbGliZ2NyeXB0ID49ICRtaW5fbGliZ2NyeXB0X3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKysKKyAgIGlmIHRlc3QgJG9rID0geWVzOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUgYSByZWNlbnQgbGliZ2NyeXB0LCB3ZSBzaG91bGQgYWxzbyBjaGVjayB0aGF0IHRoZQorICAgICAgIyBBUEkgaXMgY29tcGF0aWJsZQorICAgICAgaWYgdGVzdCAiJHJlcV9saWJnY3J5cHRfYXBpIiAtZ3QgMCA7IHRoZW4KKy0gICAgICAgIHRtcD1gJExJQkdDUllQVF9DT05GSUcgLS1hcGktdmVyc2lvbiAyPi9kZXYvbnVsbCB8fCBlY2hvIDBgCisrICAgICAgICB0bXA9YCRQS0dfQ09ORklHIC0tdmFyaWFibGU9YXBpX3ZlcnNpb24gbGliZ2NyeXB0YAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0xJQkdDUllQVCBBUEkgdmVyc2lvbl0pCisgICAgICAgICAgICBpZiB0ZXN0ICIkcmVxX2xpYmdjcnlwdF9hcGkiIC1lcSAiJHRtcCIgOyB0aGVuCitAQCAtOTYsMTAgKzUxLDggQEAKKyAgICAgIGZpCisgICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgTElCR0NSWVBUX0NGTEFHUz1gJExJQkdDUllQVF9DT05GSUcgLS1jZmxhZ3NgCistICAgIExJQkdDUllQVF9MSUJTPWAkTElCR0NSWVBUX0NPTkZJRyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGxpYmdjcnlwdF9jb25maWdfaG9zdD1gJExJQkdDUllQVF9DT05GSUcgLS1ob3N0IDI+L2Rldi9udWxsIHx8IGVjaG8gbm9uZWAKKysgICAgbGliZ2NyeXB0X2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3QgbGliZ2NyeXB0YAorICAgICBpZiB0ZXN0IHgiJGxpYmdjcnlwdF9jb25maWdfaG9zdCIgIT0geG5vbmUgOyB0aGVuCisgICAgICAgaWYgdGVzdCB4IiRsaWJnY3J5cHRfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMTMsOCArNjYsNiBAQAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgTElCR0NSWVBUX0xJQlM9IiIKKyAgICAgaWZlbHNlKFskM10sICwgOiwgWyQzXSkKKyAgIGZpCisgICBBQ19TVUJTVChMSUJHQ1JZUFRfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODJlNjJmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2ZpeC1JQ0UtZmFpbHVyZS1vbi1taXBzLXdpdGgtb3B0aW9uLU8tYW5kLWcucGF0Y2gKQEAgLTAsMCArMSw3MSBAQAordGVzdHMvYmVuY2gtc2xvcGUuYzogd29ya2Fyb3VuZCBJQ0UgZmFpbHVyZSBvbiBtaXBzIHdpdGggJy1PIC1nJworCitIaXQgYSBJQ0UgYW5kIGNvdWxkIHJlZHVjZSBpdCB0byB0aGUgZm9sbG93aW5nIG1pbmltYWwgZXhhbXBsZToKKworMS4gT25seSB0aGUgc2l6ZSBvZiBhcnJheSBhc3NpZ25lZCB3aXRoIDIgY2F1c2VkIHRoZSBpc3N1ZToKKyQgY2F0ID4gbWlwZ2NjLXRlc3QuYyA8PCBFTkQKKworaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICAgICAgY2hhciAqcFN0ckFycnlbQVJSQVlfU0laRV9NQVhdID0geyJoZWxsbyJ9OworICAgICAgICBpbnQgaSA9IDA7CisKKyAgICAgICAgd2hpbGUocFN0ckFycnlbaV0gJiYgaTxBUlJBWV9TSVpFX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHBTdHJBcnJ5W2ldKTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gMDsKK30KKworRU5ECisKKzIuIE9ubHkgLU8xIGFuZCAtZyBvbiBtaXBzIGNhdXNlZCB0aGUgaXNzdWU6CiskIG1pcHMtcG9reS1saW51eC1nY2MgLU8xIC1nIC1vIG1pcGdjYy10ZXN0IG1pcGdjYy10ZXN0LmMKK21pcGdjYy10ZXN0LmM6IEluIGZ1bmN0aW9uICdtYWluJzoKK21pcGdjYy10ZXN0LmM6MTg6MTogaW50ZXJuYWwgY29tcGlsZXIgZXJyb3I6IGluIGR3YXJmMm91dF92YXJfbG9jYXRpb24sIGF0IGR3YXJmMm91dC5jOjIwODEwCisgfQorIF4KK1BsZWFzZSBzdWJtaXQgYSBmdWxsIGJ1ZyByZXBvcnQsCit3aXRoIHByZXByb2Nlc3NlZCBzb3VyY2UgaWYgYXBwcm9wcmlhdGUuCitTZWUgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+IGZvciBpbnN0cnVjdGlvbnMKKworMy4gVGhlIHF1aWNrIHdvcmtyb3VuZCBpcyB0cnlpbmcgdG8gZW5sYXJnZSB0aGUgc2l6ZSBvZiBhcnJheSB3aXRoIGxhcmdlcgordGhhbiAyLgorCis0LiBGaWxlIGEgYnVnIHRvIEdOVSwgYnV0IGl0IGNvdWxkIG5vdCBiZSByZXByb2R1Y2VkIG9uIHRoZXJlIGVudmlyb25tZW50LgoraHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD02MDY0MworCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW29lIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBIb25neHUgSmlhIDxob25neHUuamlhQHdpbmRyaXZlci5jb20+CistLS0KKyB0ZXN0cy9iZW5jaC1zbG9wZS5jIHwgNCArKy0tCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNoLXNsb3BlLmMgYi90ZXN0cy9iZW5jaC1zbG9wZS5jCitpbmRleCBiZDA1MDY0Li4yOGMyNDM4IDEwMDY0NAorLS0tIGEvdGVzdHMvYmVuY2gtc2xvcGUuYworKysrIGIvdGVzdHMvYmVuY2gtc2xvcGUuYworQEAgLTExOTcsNyArMTE5Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgYmVuY2hfb3BzIGhhc2hfb3BzID0geworIH07CisgCisgCistc3RhdGljIHN0cnVjdCBiZW5jaF9oYXNoX21vZGUgaGFzaF9tb2Rlc1tdID0geworK3N0YXRpYyBzdHJ1Y3QgYmVuY2hfaGFzaF9tb2RlIGhhc2hfbW9kZXNbM10gPSB7CisgICB7IiIsICZoYXNoX29wc30sCisgICB7MH0sCisgfTsKK0BAIC0xMzQ5LDcgKzEzNDksNyBAQCBzdGF0aWMgc3RydWN0IGJlbmNoX29wcyBtYWNfb3BzID0geworIH07CisgCisgCistc3RhdGljIHN0cnVjdCBiZW5jaF9tYWNfbW9kZSBtYWNfbW9kZXNbXSA9IHsKKytzdGF0aWMgc3RydWN0IGJlbmNoX21hY19tb2RlIG1hY19tb2Rlc1szXSA9IHsKKyAgIHsiIiwgJm1hY19vcHN9LAorICAgezB9LAorIH07CistLSAKKzEuOC4xLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvZmlsZXMvbGliZ2NyeXB0LWZpeC1idWlsZGluZy1lcnJvci13aXRoLU8yLWluLXN5c3Jvb3QtcGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1NDAzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2ZpbGVzL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2gKQEAgLTAsMCArMSwzMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK2xpYmdjcnlwdDogZml4IGJ1aWxkaW5nIGVycm9yIHdpdGggJy1PMicgaW4gc3lzcm9vdCBwYXRoCisKK0NoYXJhY3RlcnMgbGlrZSAnLU8yJyBvciAnLU9mYXN0JyB3aWxsIGJlIHJlcGxhY2VkIGJ5ICctTzEnIHdoZW4gY29tcGlsaW5nIGNpcGhlci4KK0lmIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgbGliZ2NyeXB0IGFuZCBzeXNyb290IGNvbnRhaW5zIHN1Y2ggY2hhcmFjdGVycywgd2Ugd291bGQKK2dldCBjb21waWxlIGVycm9ycyBiZWNhdXNlIHRoZSBzeXNyb290IHBhdGggaGFzIGJlZW4gbW9kaWZpZWQuCisKK0ZpeCB0aGlzIGJ5IGFkZGluZyBibGFuayBzcGFjZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgb3JpZ2luYWwgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGUKK3NlZCBjb21tYW5kLgorCitTaWduZWQtb2ZmLWJ5OiBDaGVuIFFpIDxRaS5DaGVuQHdpbmRyaXZlci5jb20+CistLS0KKyBjaXBoZXIvTWFrZWZpbGUuYW0gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK2RpZmYgLS1naXQgYS9jaXBoZXIvTWFrZWZpbGUuYW0gYi9jaXBoZXIvTWFrZWZpbGUuYW0KK2luZGV4IDc2Y2RjOTYuLjlhODk3OTIgMTAwNjQ0CistLS0gYS9jaXBoZXIvTWFrZWZpbGUuYW0KKysrKyBiL2NpcGhlci9NYWtlZmlsZS5hbQorQEAgLTY5LDcgKzY5LDcgQEAgcmZjMjI2OC5jIFwKKyBjYW1lbGxpYS5jIGNhbWVsbGlhLmggY2FtZWxsaWEtZ2x1ZS5jCisgCisgaWYgRU5BQkxFX09fRkxBR19NVU5HSU5HCistb19mbGFnX211bmdpbmcgPSBzZWQgLWUgJ3MvLU9cKFsyLTlzXVsyLTlzXSpcKS8tTzEvJyAtZSAncy8tT2Zhc3QvLU8xL2cnCisrb19mbGFnX211bmdpbmcgPSBzZWQgLWUgJ3MvIC1PXChbMi05c11bMi05c10qXCkgLyAtTzEgLycgLWUgJ3MvIC1PZmFzdCAvIC1PMSAvZycKKyBlbHNlCisgb19mbGFnX211bmdpbmcgPSBjYXQKKyBlbmRpZgorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgzYmU3OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdjcnlwdC9saWJnY3J5cHQuaW5jCkBAIC0wLDAgKzEsNDkgQEAKK1NVTU1BUlkgPSAiR2VuZXJhbCBwdXJwb3NlIGNyeXB0b2dyYXBoaWMgbGlicmFyeSBiYXNlZCBvbiB0aGUgY29kZSBmcm9tIEdudVBHIgorSE9NRVBBR0UgPSAiaHR0cDovL2RpcmVjdG9yeS5mc2Yub3JnL3Byb2plY3QvbGliZ2NyeXB0LyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmcxMGNvZGUuY29tL2dudXBnL2luZGV4IgorU0VDVElPTiA9ICJsaWJzIgorCisjIGhlbHBlciBwcm9ncmFtIGdjcnlwdHJuZCBhbmQgZ2V0cmFuZG9tIGFyZSB1bmRlciBHUEwsIHJlc3QgTEdQTAorTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsgJiBHUEx2MysiCitMSUNFTlNFXyR7UE59ID0gIkxHUEx2Mi4xKyIKK0xJQ0VOU0VfJHtQTn0tZGV2ID0gIkdQTHYyKyAmIExHUEx2Mi4xKyIKK0xJQ0VOU0VfZHVtcHNleHAtZGV2ID0gIkdQTHYzKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9OTRkNTVkNTEyYTliYTM2Y2FhOWI3ZGYwNzliYWUxOWYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PWJiYjQ2MTIxMWEzM2IxMzRkNDJlZDVlZTgwMmIzN2ZmIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciBsaWJjYXAiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvbGliZ2NyeXB0L2xpYmdjcnlwdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2xpYmdjcnlwdC1maXgtYnVpbGRpbmctZXJyb3Itd2l0aC1PMi1pbi1zeXNyb290LXBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LUlDRS1mYWlsdXJlLW9uLW1pcHMtd2l0aC1vcHRpb24tTy1hbmQtZy5wYXRjaCBcCisiCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0vbGliZ2NyeXB0LWNvbmZpZyIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8gYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1kaXNhYmxlLWFzbSAtLXdpdGgtY2FwYWJpbGl0aWVzIgorCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJIyBFbHNlIHRoaXMgY291bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoZSBvbmUgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKK30KKworIyBsaWJnY3J5cHQucGMgaXMgYWRkZWQgbG9jYWxseSBhbmQgdGh1cyBpbnN0YWxsZWQgaGVyZQorZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9LyR7bGliZGlyfS9wa2djb25maWcKKwlpbnN0YWxsIC1tIDA2NDQgJHtCfS9zcmMvbGliZ2NyeXB0LnBjICR7RH0vJHtsaWJkaXJ9L3BrZ2NvbmZpZy8KK30KKworUEFDS0FHRVMgPSsgImR1bXBzZXhwLWRldiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2JpbmRpcn0vaG1hYzI1NiIKK0ZJTEVTX2R1bXBzZXhwLWRldiArPSAiJHtiaW5kaXJ9L2R1bXBzZXhwIgorCitBUk1fSU5TVFJVQ1RJT05fU0VUID0gImFybSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJnY3J5cHQvbGliZ2NyeXB0XzEuNi4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDA2Y2U3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ2NyeXB0L2xpYmdjcnlwdF8xLjYuMy5iYgpAQCAtMCwwICsxLDQgQEAKK3JlcXVpcmUgbGliZ2NyeXB0LmluYworCitTUkNfVVJJW21kNXN1bV0gPSAiZGUwM2I4NjdkMDJmZGYxMTVhMWJhYzhiYjhiNWMzYTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNjllOTRlMWE3MDg0ZDk0ZTFhNmNhMjZkNDM2MDY4Y2I3NDg2MmQxMGE3MzUzY2ZhZTU3OWEyZDg4Njc0ZmYwOSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvci9wa2djb25maWcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmZWVkYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3IvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsMTUwIEBACisKKyMKKyMgUGF0Y2ggbWFuYWdlZCBieSBodHRwOi8vd3d3Lm1uLWxvZ2lzdGlrLmRlL3Vuc3VwcG9ydGVkL3B4YTI1MC9wYXRjaGVyCisjCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ3BnLWVycm9yLTEuMTcub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJncGctZXJyb3ItMS4xNy9jb25maWd1cmUuYWMKK0BAIC01MjksNiArNTI5LDcgQEAgQUNfQ09ORklHX0ZJTEVTKFtzcmMvTWFrZWZpbGUgdGVzdHMvTWFrZQorIEFDX0NPTkZJR19GSUxFUyhbbGFuZy9NYWtlZmlsZSBsYW5nL2NsL01ha2VmaWxlIGxhbmcvY2wvZ3BnLWVycm9yLmFzZF0pCisgQUNfQ09ORklHX0ZJTEVTKFtzcmMvdmVyc2lvbmluZm8ucmMgc3JjL2dwZy1lcnJvci53MzItbWFuaWZlc3RdKQorIEFDX0NPTkZJR19GSUxFUyhbc3JjL2dwZy1lcnJvci1jb25maWddLCBbY2htb2QgK3ggc3JjL2dwZy1lcnJvci1jb25maWddKQorK0FDX0NPTkZJR19GSUxFUyhbc3JjL2dwZy1lcnJvci5wY10pCisgCisgQUNfT1VUUFVUCisgCitJbmRleDogbGliZ3BnLWVycm9yLTEuMTcvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ3BnLWVycm9yLTEuMTcub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBsaWJncGctZXJyb3ItMS4xNy9zcmMvTWFrZWZpbGUuYW0KK0BAIC03NSw2ICs3NSw4IEBAIG5vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBncGctZXJyb3IuaAorIGJpbl9TQ1JJUFRTID0gZ3BnLWVycm9yLWNvbmZpZworIG00ZGF0YWRpciA9ICQoZGF0YWRpcikvYWNsb2NhbAorIG00ZGF0YV9EQVRBID0gZ3BnLWVycm9yLm00CisrcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0gZ3BnLWVycm9yLnBjCisgCisgRVhUUkFfRElTVCA9IG1rc3RydGFibGUuYXdrIGVyci1zb3VyY2VzLmguaW4gZXJyLWNvZGVzLmguaW4gXAorIAlta2Vycm5vcy5hd2sgZXJybm9zLmluIFJFQURNRSBcCitAQCAtODIsNyArODQsNyBAQCBFWFRSQV9ESVNUID0gbWtzdHJ0YWJsZS5hd2sgZXJyLXNvdXJjZXMuCisgCW1raGVhZGVyLmMgZ3BnLWVycm9yLmguaW4gbWt3MzJlcnJtYXAuYyB3MzItYWRkLmggdzMyY2UtYWRkLmggXAorIAllcnItc291cmNlcy5oIGVyci1jb2Rlcy5oIGdwZy1lcnJvci1jb25maWcuaW4gZ3BnLWVycm9yLm00IFwKKyAJZ3BnLWVycm9yLnZlcnMgZ3BnLWVycm9yLmRlZi5pbiBcCistICAgICAgICB2ZXJzaW9uaW5mby5yYy5pbiBncGctZXJyb3IudzMyLW1hbmlmZXN0LmluIFwKKysgICAgICAgIHZlcnNpb25pbmZvLnJjLmluIGdwZy1lcnJvci53MzItbWFuaWZlc3QuaW4gZ3BnLWVycm9yLnBjIFwKKyAJJChsb2NrX29ial9wdWIpCisgCisgQlVJTFRfU09VUkNFUyA9IGVyci1zb3VyY2VzLmggZXJyLWNvZGVzLmggY29kZS10by1lcnJuby5oIGNvZGUtZnJvbS1lcnJuby5oIFwKK0luZGV4OiBsaWJncGctZXJyb3ItMS4xNy9zcmMvZ3BnLWVycm9yLm00Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliZ3BnLWVycm9yLTEuMTcub3JpZy9zcmMvZ3BnLWVycm9yLm00CisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5tNAorQEAgLTI2LDczICsyNiwxMyBAQCBkbmwgaXMgYWRkZWQgdG8gdGhlIGdwZ19jb25maWdfc2NyaXB0X3dhCisgZG5sCisgQUNfREVGVU4oW0FNX1BBVEhfR1BHX0VSUk9SXSwKKyBbIEFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKKy0gIGdwZ19lcnJvcl9jb25maWdfcHJlZml4PSIiCistICBkbmwgLS13aXRoLWxpYmdwZy1lcnJvci1wcmVmaXg9UEZYIGlzIHRoZSBwcmVmZXJyZWQgbmFtZSBmb3IgdGhpcyBvcHRpb24sCistICBkbmwgc2luY2UgdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggaG93IG91ciB0aHJlZSBzaWJsaW5ncyB1c2UgdGhlIGRpcmVjdG9yeS8KKy0gIGRubCBwYWNrYWdlIG5hbWUgaW4gLS13aXRoLSRkaXJfbmFtZS1wcmVmaXg9UEZYLgorLSAgQUNfQVJHX1dJVEgobGliZ3BnLWVycm9yLXByZWZpeCwKKy0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliZ3BnLWVycm9yLXByZWZpeD1QRlhdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeCB3aGVyZSBHUEcgRXJyb3IgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgICAgICAgICAgIFtncGdfZXJyb3JfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiXSkKKy0KKy0gIGRubCBBY2NlcHQgLS13aXRoLWdwZy1lcnJvci1wcmVmaXggYW5kIG1ha2UgaXQgd29yayB0aGUgc2FtZSBhcworLSAgZG5sIC0td2l0aC1saWJncGctZXJyb3ItcHJlZml4IGFib3ZlLCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksCistICBkbmwgYnV0IGRvIG5vdCBkb2N1bWVudCB0aGlzIG9sZCwgaW5jb25zaXN0ZW50bHktbmFtZWQgb3B0aW9uLgorLSAgQUNfQVJHX1dJVEgoZ3BnLWVycm9yLXByZWZpeCwsCistICAgICAgICAgICAgICBbZ3BnX2Vycm9yX2NvbmZpZ19wcmVmaXg9IiR3aXRodmFsIl0pCisrICBtaW5fZ3BnX2Vycm9yX3ZlcnNpb249aWZlbHNlKFskMV0sICwwLjAsJDEpCisgCistICBpZiB0ZXN0IHgiJHtHUEdfRVJST1JfQ09ORklHfSIgPSB4IDsgdGhlbgorLSAgICAgaWYgdGVzdCB4IiR7Z3BnX2Vycm9yX2NvbmZpZ19wcmVmaXh9IiAhPSB4IDsgdGhlbgorLSAgICAgICAgR1BHX0VSUk9SX0NPTkZJRz0iJHtncGdfZXJyb3JfY29uZmlnX3ByZWZpeH0vYmluL2dwZy1lcnJvci1jb25maWciCistICAgICBlbHNlCistICAgICAgIGNhc2UgIiR7U1lTUk9PVH0iIGluCistICAgICAgICAgLyopCistICAgICAgICAgICBpZiB0ZXN0IC14ICIke1NZU1JPT1R9L2Jpbi9ncGctZXJyb3ItY29uZmlnIiA7IHRoZW4KKy0gICAgICAgICAgICAgR1BHX0VSUk9SX0NPTkZJRz0iJHtTWVNST09UfS9iaW4vZ3BnLWVycm9yLWNvbmZpZyIKKy0gICAgICAgICAgIGZpCistICAgICAgICAgICA7OworLSAgICAgICAgICcnKQorLSAgICAgICAgICAgOzsKKy0gICAgICAgICAgKikKKy0gICAgICAgICAgIEFDX01TR19XQVJOKFtJZ25vcmluZyBcJFNZU1JPT1QgYXMgaXQgaXMgbm90IGFuIGFic29sdXRlIHBhdGguXSkKKy0gICAgICAgICAgIDs7CistICAgICAgIGVzYWMKKy0gICAgIGZpCistICBmaQorKyAgUEtHX0NIRUNLX01PRFVMRVMoR1BHX0VSUk9SLCBbZ3BnLWVycm9yID49ICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb25dLCBbb2s9eWVzXSwgW29rPW5vXSkKKyAKKy0gIEFDX1BBVEhfUFJPRyhHUEdfRVJST1JfQ09ORklHLCBncGctZXJyb3ItY29uZmlnLCBubykKKy0gIG1pbl9ncGdfZXJyb3JfdmVyc2lvbj1pZmVsc2UoWyQxXSwgLDAuMCwkMSkKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgR1BHIEVycm9yIC0gdmVyc2lvbiA+PSAkbWluX2dwZ19lcnJvcl92ZXJzaW9uKQorLSAgb2s9bm8KKy0gIGlmIHRlc3QgIiRHUEdfRVJST1JfQ09ORklHIiAhPSAibm8iIFwKKy0gICAgICYmIHRlc3QgLWYgIiRHUEdfRVJST1JfQ09ORklHIiA7IHRoZW4KKy0gICAgcmVxX21ham9yPWBlY2hvICRtaW5fZ3BnX2Vycm9yX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wxLydgCistICAgIHJlcV9taW5vcj1gZWNobyAkbWluX2dwZ19lcnJvcl92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMi8nYAorLSAgICBncGdfZXJyb3JfY29uZmlnX3ZlcnNpb249YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAkZ3BnX2Vycm9yX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgaWYgdGVzdCAiJG1ham9yIiAtZ3QgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICBvaz15ZXMKKy0gICAgZWxzZQorLSAgICAgICAgaWYgdGVzdCAiJG1ham9yIiAtZXEgIiRyZXFfbWFqb3IiOyB0aGVuCistICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZ2UgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgb2s9eWVzCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorICAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgR1BHX0VSUk9SX0NGTEFHUz1gJEdQR19FUlJPUl9DT05GSUcgJGdwZ19lcnJvcl9jb25maWdfYXJncyAtLWNmbGFnc2AKKy0gICAgR1BHX0VSUk9SX0xJQlM9YCRHUEdfRVJST1JfQ09ORklHICRncGdfZXJyb3JfY29uZmlnX2FyZ3MgLS1saWJzYAorLSAgICBHUEdfRVJST1JfTVRfQ0ZMQUdTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbXQgLS1jZmxhZ3MgMj4vZGV2L251bGxgCistICAgIEdQR19FUlJPUl9NVF9MSUJTPWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0tbXQgLS1saWJzIDI+L2Rldi9udWxsYAorLSAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKCRncGdfZXJyb3JfY29uZmlnX3ZlcnNpb24pXSkKKyAgICAgaWZlbHNlKFskMl0sICwgOiwgWyQyXSkKKy0gICAgZ3BnX2Vycm9yX2NvbmZpZ19ob3N0PWAkR1BHX0VSUk9SX0NPTkZJRyAkZ3BnX2Vycm9yX2NvbmZpZ19hcmdzIC0taG9zdCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vbmVgCisrICAgIGdwZ19lcnJvcl9jb25maWdfaG9zdD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1ob3N0IGdwZy1lcnJvcmAKKyAgICAgaWYgdGVzdCB4IiRncGdfZXJyb3JfY29uZmlnX2hvc3QiICE9IHhub25lIDsgdGhlbgorICAgICAgIGlmIHRlc3QgeCIkZ3BnX2Vycm9yX2NvbmZpZ19ob3N0IiAhPSB4IiRob3N0IiA7IHRoZW4KKyAgIEFDX01TR19XQVJOKFtbCitAQCAtMTA3LDExICs0Nyw2IEBAIEFDX0RFRlVOKFtBTV9QQVRIX0dQR19FUlJPUl0sCisgICAgICAgZmkKKyAgICAgZmkKKyAgIGVsc2UKKy0gICAgR1BHX0VSUk9SX0NGTEFHUz0iIgorLSAgICBHUEdfRVJST1JfTElCUz0iIgorLSAgICBHUEdfRVJST1JfTVRfQ0ZMQUdTPSIiCistICAgIEdQR19FUlJPUl9NVF9MSUJTPSIiCistICAgIEFDX01TR19SRVNVTFQobm8pCisgICAgIGlmZWxzZShbJDNdLCAsIDosIFskM10pCisgICBmaQorICAgQUNfU1VCU1QoR1BHX0VSUk9SX0NGTEFHUykKK0luZGV4OiBsaWJncGctZXJyb3ItMS4xNy9zcmMvZ3BnLWVycm9yLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbGliZ3BnLWVycm9yLTEuMTcvc3JjL2dwZy1lcnJvci5wYy5pbgorQEAgLTAsMCArMSwxMSBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorK2hvc3Q9QEdQR19FUlJPUl9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBncGctZXJyb3IKKytEZXNjcmlwdGlvbjogYSBsaWJyYXJ5IHRoYXQgZGVmaW5lcyBjb21tb24gZXJyb3IgdmFsdWVzIGZvciBhbGwgR251UEcgY29tcG9uZW50cworK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZ3BnLWVycm9yCisrQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3JfMS4xOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWRiYmNmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliZ3BnLWVycm9yL2xpYmdwZy1lcnJvcl8xLjE5LmJiCkBAIC0wLDAgKzEsNTEgQEAKK1NVTU1BUlkgPSAiU21hbGwgbGlicmFyeSB0aGF0IGRlZmluZXMgY29tbW9uIGVycm9yIHZhbHVlcyBmb3IgYWxsIEdudVBHIGNvbXBvbmVudHMiCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudXBnLm9yZy9yZWxhdGVkX3NvZnR3YXJlL2xpYmdwZy1lcnJvci8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVncy5nMTBjb2RlLmNvbS9nbnVwZy9pbmRleCIKKworTElDRU5TRSA9ICJHUEx2MisgJiBMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT01OTUzMGJkZjMzNjU5YjI5ZTczZDRhZGI5ZjlmNjU1MiBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9DT1BZSU5HLkxJQjttZDU9MmQ1MDI1ZDRhYTM0OTViZWZlZjhmMTcyMDZhNWIwYTEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2dwZy1lcnJvci5oLmluO2VuZGxpbmU9MjM7bWQ1PThiMjA0OTE4ZjBjYTcwNzEzNjM5NGQ4YmIyMGM3ZWJjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NyYy9pbml0LmM7ZW5kbGluZT0yMDttZDU9OGY1YTliNTk2MzRmNGFlYmNkMGVjOWQzZWJkNTNiZmUiCisKKworU0VDVElPTiA9ICJsaWJzIgorCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L2xpYmdwZy1lcnJvci9saWJncGctZXJyb3ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiYzA0YzE2MjQ1YjkyODI5MjgxZjQzYjViZWY3ZDE2ZGEiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTMxMjBlMTMzM2Q1YzVkMjhkODdmZjI4NTRlOWU5ODcxOWM4ZTIxNDE1MmYxN2FkNTI5MTcwNGQyNWM0OTc4YiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ncGctZXJyb3ItY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnIGdldHRleHQKK0NQUEZMQUdTICs9ICItUCIKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlUQVJHRVRfRklMRT1saW51eC1nbnUKKwlpZiBbICR7VEFSR0VUX09TfSAhPSAibGludXgiIF07IHRoZW4KKwkJVEFSR0VUX0ZJTEU9JHtUQVJHRVRfT1N9CisJZmkKKworCWNhc2UgJHtUQVJHRVRfQVJDSH0gaW4KKwkgIGFhcmNoNjRfYmUpIFRVUExFPWFhcmNoNjQtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgIGFybSkJICAgICAgVFVQTEU9YXJtLXVua25vd24tbGludXgtZ251ZWFiaSA7OworCSAgYXJtZWIpICAgICAgVFVQTEU9YXJtLXVua25vd24tbGludXgtZ251ZWFiaSA7OworCSAgaTU4NnxpNjg2KSAgVFVQTEU9aTY4Ni1wYy1saW51eC1nbnUgOzsKKwkgIG1pcHM2NGVsKSAgIFRVUExFPW1pcHNlbC11bmtub3duLWxpbnV4LWdudSA7OworCSAgbWlwczY0KSAgICAgVFVQTEU9bWlwcy11bmtub3duLWxpbnV4LWdudSA7OworCSAgeDg2XzY0KSAgICAgVFVQTEU9eDg2XzY0LXBjLWxpbnV4LWdudSA7OworCSAgKikgICAgICAgICAgVFVQTEU9JHtUQVJHRVRfQVJDSH0tdW5rbm93bi1saW51eC1nbnUgOzsgCisJZXNhYworCisJY3AgJHtTfS9zcmMvc3lzY2ZnL2xvY2stb2JqLXB1Yi4kVFVQTEUuaCBcCisJICAke1N9L3NyYy9zeXNjZmcvbG9jay1vYmotcHViLiRUQVJHRVRfRklMRS5oCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworCSMgd2UgZG9uJ3QgaGF2ZSBjb21tb24gbGlzcCBpbiBPRQorCXJtIC1yZiAiJHtEfSR7ZGF0YWRpcn0vY29tbW9uLWxpc3AvIgorfQorCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ncGctZXJyb3IiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNhbC9saWJpY2FsXzEuMC4wLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlNmI2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY2FsL2xpYmljYWxfMS4wLjAuYmIKQEAgLTAsMCArMSwxMyBAQAorU1VNTUFSWSA9ICJpQ2FsIGFuZCBzY2hlZHVsaW5nIChSRkMgMjQ0NSwgMjQ0NiwgMjQ0NykgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwiCitCVUdUUkFDS0VSID0gImh0dHBzOi8vZ2l0aHViLmNvbS9saWJpY2FsL2xpYmljYWwvaXNzdWVzIgorTElDRU5TRSA9ICJMR1BMdjIuMSB8IE1QTC0xIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDRmYzU4MzA5ZDhlZDQ2NTg3YWM2M2JiNDQ5ZDgyZjggXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vTElDRU5TRTttZDU9ZDFhMDg5MWNkM2U1ODJiM2UyZWM4ZmU2M2JhZGJiYjYiCitTRUNUSU9OID0gImxpYnMiCisKK1NSQ19VUkkgPSAiaHR0cHM6Ly9naXRodWIuY29tLyR7QlBOfS8ke0JQTn0vYXJjaGl2ZS92JHtQVn0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gImY0YjhlMzNhZTVlZmIyZjAyNWViNDNjZTY5NjgyYTM2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjAwNzJlODM4MzQwOTIzMTU3NzJlNjcxOWI4NWZjOGIxMTUzMGIxZmY1M2Y0ZDEwODMxNWZiMzhjZGRiY2U4YzIiCisKK2luaGVyaXQgYXV0b3Rvb2xzCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udi0xLjExLjEvYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiZjU0OQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9hdXRvY29uZi5wYXRjaApAQCAtMCwwICsxLDUwIEBACitJdCBhZGRzIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgbmVlZGVkCitmb3IgYXV0b2NvbmYgMi42NSB0byByZWNvbmZpZ3VyZSBsaWJpY29udiBhbmQgZGVmaW5lcyB0aGUgbTQgbWFjcm9zIAorZGlyZWN0b3J5LiBJdHMgaW1wb3J0ZWQgZnJvbSBPRS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CisKK0luZGV4OiBsaWJpY29udi0xLjExLjEvY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGliaWNvbnYtMS4xMS4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMS4xL2NvbmZpZ3VyZS5hYworQEAgLTIzLDcgKzIzLDcgQEAgQUNfQ09ORklHX0FVWF9ESVIoYnVpbGQtYXV4KQorIEFNX0lOSVRfQVVUT01BS0UobGliaWNvbnYsIDEuMTEpCisgQUNfQ09ORklHX0hFQURFUlMoY29uZmlnLmggbGliL2NvbmZpZy5oKQorIEFDX1BST0dfTUFLRV9TRVQKKy0KKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisgZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCisgCisgQUNfUFJPR19DQworSW5kZXg6IGxpYmljb252LTEuMTEuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMS4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCitAQCAtMTYsMTcgKzE2LDE3IEBAIGRubCBhbG9uZyB3aXRoIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5OworIGRubCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsCisgZG5sIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAKKy1BQ19QUkVSRVEoMi4xMykKKytBQ19QUkVSRVEoMi42MSkKKytBQ19JTklUKFtsaWJjaGFyc2V0XSxbMS40XSApCisrQUNfQ09ORklHX1NSQ0RJUihbbGliL2xvY2FsY2hhcnNldC5jXSkKKyAKKy1QQUNLQUdFPWxpYmNoYXJzZXQKKy1WRVJTSU9OPTEuNAorLQorLUFDX0lOSVQobGliL2xvY2FsY2hhcnNldC5jKQorIEFDX0NPTkZJR19BVVhfRElSKGJ1aWxkLWF1eCkKKyBBQ19DT05GSUdfSEVBREVSKGNvbmZpZy5oKQorIEFDX1BST0dfTUFLRV9TRVQKKy1BQ19TVUJTVChQQUNLQUdFKQorLUFDX1NVQlNUKFZFUlNJT04pCisrZG5sIEFDX1NVQlNUKFBBQ0tBR0UpCisrZG5sIEFDX1NVQlNUKFZFUlNJT04pCisrCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIAorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xMS4xL3NoYXJlZF9wcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIwN2Y3MwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTEuMS9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorV2l0aCBsaWJ0b29sIGdlbmVyYXRpbmcgc2hhcmVkIGFuZCBzdGF0aWMgdmVyc2lvbiBvZiBsaWJyYXJpZXMgbmVlZHMgLWZQSUMgZmxhZ3MKK3dpdGhvdXQgdGhpcyBpdCB3aWxsIG5vdCBnZW5lcmF0ZSB0aGUgY29tbWFuZHMgdG8gY3JlYXRlIHNoYXJlZCBsaW5rZWQgbGlicmFyeQorSXRzIG1vcmUgZW5mb3JjZWQgYnkgbGlidG9vbCAyLjQuIEkgaGF2ZSBub3QgY2hlY2tlZCBpdCB3aXRoIG9sZGVyIGxpYnRvb2wKK2xpYmljb252IDEuMTEueCBpcyByZWxhdGl2ZWx5IG9sZCByZWxlYXNlIGFuZCBsaWJ0b29sIDIuNCBkaWQgbm90IGV4aXN0IHdoZW4gaXQKK3dhcyByZWxlYXNlZCB0aGVzZSBraW5kIG9mIHByb2JsZW0gYXJlIG1vcmUgbGlrZWx5CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitJbmRleDogbGliaWNvbnYtMS4xMS4xL2xpYi9NYWtlZmlsZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTEuMS5vcmlnL2xpYi9NYWtlZmlsZS5pbgorKysrIGxpYmljb252LTEuMTEuMS9saWIvTWFrZWZpbGUuaW4KK0BAIC03MCw5ICs3MCw5IEBAIHByZWxvYWRhYmxlX2xpYmljb252LnNvIDogcHJlbG9hZGFibGVfbGkKKyAKKyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbyA6ICQoU09VUkNFUykKKyAJaWYgdGVzdCAtbiAiQEdDQ0AiOyB0aGVuIFwKKy0JICAkKExJQlRPT0xfTElOSykgJChDQykgJChMREZMQUdTKSAkKElOQ0xVREVTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChERUZTKSAtZlBJQyAtRFBJQyAtRExJQklDT05WX1BMVUcgJChTT1VSQ0VTKSAtc2hhcmVkIC1vIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisrCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLWZQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXJwYXRoICQobGliZGlyKSAtbyBsaWJwcmVsb2FkX2ljb252LmxhICYmIGNwIC5saWJzL2xpYnByZWxvYWRfaWNvbnYuc28gcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXguc287IFwKKyAJZWxzZSBcCistCSAgJChMSUJUT09MX0xJTkspICQoQ0MpICQoTERGTEFHUykgJChJTkNMVURFUykgJChDRkxBR1MpICQoQ1BQRkxBR1MpICQoREVGUykgLUtQSUMgLURQSUMgLURMSUJJQ09OVl9QTFVHICQoU09VUkNFUykgLXNoYXJlZCAtbyBwcmVsb2FkYWJsZV9saWJpY29udl9saW51eC5zbzsgXAorKwkgICQoTElCVE9PTF9MSU5LKSAkKENDKSAkKExERkxBR1MpICQoSU5DTFVERVMpICQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKERFRlMpIC1LUElDIC1EUElDIC1ETElCSUNPTlZfUExVRyAkKFNPVVJDRVMpIC1ycGF0aCAkKGxpYmRpcikgLW8gbGlicHJlbG9hZF9pY29udi5sYSAmJiBjcCAubGlicy9saWJwcmVsb2FkX2ljb252LnNvIHByZWxvYWRhYmxlX2xpYmljb252X2xpbnV4LnNvOyBcCisgCWZpCisgCisgcHJlbG9hZGFibGVfbGliaWNvbnZfc29sYXJpcy5zbyA6ICQoU09VUkNFUykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWYzNzdiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hZGQtcmVsb2NhdGFibGUtbW9kdWxlLnBhdGNoCkBAIC0wLDAgKzEsNTAwOCBAQAorVGhpcyBwYXRjaCBpcyBuZWVkZWQgdG8gc29sdmUgaXNzdWVzIGxpa2UKK3wgaWNvbnYubzogSW4gZnVuY3Rpb24gYG1haW4nOgorfCAvaG9tZS9qYW1lcy9zdHVmZi9iZWFnbGUvdG1wLWVnbGliYy93b3JrL2FybXY3YS12ZnAtbmVvbi1vZS1saW51eC1nbnVlYWJpL2xpYmljb252LTEuMTQtcjAvbGliaWNvbnYtMS4xNC9zcmMvLi9pY29udi5jOjg2MTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmVsb2NhdGUnCit8IC4uL3NyY2xpYi9saWJpY3J0LmEocHJvZ3JlbG9jLm8pOiBJbiBmdW5jdGlvbiBgcHJlcGFyZV9yZWxvY2F0ZSc6Cit8IC9ob21lL2phbWVzL3N0dWZmL2JlYWdsZS90bXAtZWdsaWJjL3dvcmsvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGliaWNvbnYtMS4xNC1yMC9saWJpY29udi0xLjE0L3NyY2xpYi9wcm9ncmVsb2MuYzoyOTc6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGNvbXB1dGVfY3Vycl9wcmVmaXgnCit8IC9ob21lL2phbWVzL3N0dWZmL2JlYWdsZS90bXAtZWdsaWJjL3dvcmsvYXJtdjdhLXZmcC1uZW9uLW9lLWxpbnV4LWdudWVhYmkvbGliaWNvbnYtMS4xNC1yMC9saWJpY29udi0xLjE0L3NyY2xpYi9wcm9ncmVsb2MuYzozMDI6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHNldF9yZWxvY2F0aW9uX3ByZWZpeCcKK3wgY29sbGVjdDI6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXMKK3wgbWFrZVsxXTogKioqIFtpbnN0YWxsXSBFcnJvciAxCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbT0UgY29uZmlnIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L2FyZy1ub25udWxsLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvYXJnLW5vbm51bGwuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L2FyZy1ub25udWxsLmgJMjAxMi0wMS0wOCAwMjowNzozOS45MzA0ODQ0MzggLTA4MDAKK0BAIC0wLDAgKzEsMjYgQEAKKysvKiBBIEMgbWFjcm8gZm9yIGRlY2xhcmluZyB0aGF0IHNwZWNpZmljIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBOVUxMLgorKyAgIENvcHlyaWdodCAoQykgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysvKiBfR0xfQVJHX05PTk5VTEwoKG4sLi4uLG0pKSB0ZWxscyB0aGUgY29tcGlsZXIgYW5kIHN0YXRpYyBhbmFseXplciB0b29scworKyAgIHRoYXQgdGhlIHZhbHVlcyBwYXNzZWQgYXMgYXJndW1lbnRzIG4sIC4uLiwgbSBtdXN0IGJlIG5vbi1OVUxMIHBvaW50ZXJzLgorKyAgIG4gPSAxIHN0YW5kcyBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LCBuID0gMiBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBldGMuICAqLworKyNpZm5kZWYgX0dMX0FSR19OT05OVUxMCisrIyBpZiAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSAzKSB8fCBfX0dOVUNfXyA+IDMKKysjICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykgX19hdHRyaWJ1dGVfXyAoKF9fbm9ubnVsbF9fIHBhcmFtcykpCisrIyBlbHNlCisrIyAgZGVmaW5lIF9HTF9BUkdfTk9OTlVMTChwYXJhbXMpCisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9jKytkZWZzLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvYysrZGVmcy5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9jKytkZWZzLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9jKytkZWZzLmgJMjAxMi0wMS0wOCAwMjowNzozOS45NDI0ODQ0MzggLTA4MDAKK0BAIC0wLDAgKzEsMjcxIEBACisrLyogQysrIGNvbXBhdGlibGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gbWFjcm9zLgorKyAgIENvcHlyaWdodCAoQykgMjAxMC0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorKworKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisrICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKysgICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorKyAgIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysKKysgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKysKKysjaWZuZGVmIF9HTF9DWFhERUZTX0gKKysjZGVmaW5lIF9HTF9DWFhERUZTX0gKKysKKysvKiBUaGUgdGhyZWUgbW9zdCBmcmVxdWVudCB1c2UgY2FzZXMgb2YgdGhlc2UgbWFjcm9zIGFyZToKKysKKysgICAqIEZvciBwcm92aWRpbmcgYSBzdWJzdGl0dXRlIGZvciBhIGZ1bmN0aW9uIHRoYXQgaXMgbWlzc2luZyBvbiBzb21lCisrICAgICBwbGF0Zm9ybXMsIGJ1dCBpcyBkZWNsYXJlZCBhbmQgd29ya3MgZmluZSBvbiB0aGUgcGxhdGZvcm1zIG9uIHdoaWNoCisrICAgICBpdCBleGlzdHM6CisrCisrICAgICAgICNpZiBAR05VTElCX0ZPT0AKKysgICAgICAgIyBpZiAhQEhBVkVfRk9PQAorKyAgICAgICBfR0xfRlVOQ0RFQ0xfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICBfR0xfQ1hYQUxJQVNXQVJOIChmb28pOworKyAgICAgICAjZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCisrICAgICAgIC4uLgorKyAgICAgICAjZW5kaWYKKysKKysgICAqIEZvciBwcm92aWRpbmcgYSByZXBsYWNlbWVudCBmb3IgYSBmdW5jdGlvbiB0aGF0IGV4aXN0cyBvbiBhbGwgcGxhdGZvcm1zLAorKyAgICAgYnV0IGlzIGJyb2tlbi9pbnN1ZmZpY2llbnQgYW5kIG5lZWRzIHRvIGJlIHJlcGxhY2VkIG9uIHNvbWUgcGxhdGZvcm1zOgorKworKyAgICAgICAjaWYgQEdOVUxJQl9GT09ACisrICAgICAgICMgaWYgQFJFUExBQ0VfRk9PQAorKyAgICAgICAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyAgICAgICAjICAgdW5kZWYgZm9vCisrICAgICAgICMgICBkZWZpbmUgZm9vIHJwbF9mb28KKysgICAgICAgIyAgZW5kaWYKKysgICAgICAgX0dMX0ZVTkNERUNMX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICBfR0xfQ1hYQUxJQVNfUlBMIChmb28sIC4uLik7CisrICAgICAgICMgZWxzZQorKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrCisrICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gc29tZSBwbGF0Zm9ybXMKKysgICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIG9mIHRoZW0gYW5kCisrICAgICBpcyBhZGRpdGlvbmFsbHkgZWl0aGVyIG1pc3Npbmcgb3IgdW5kZWNsYXJlZCBvbiBzb21lIG90aGVyIHBsYXRmb3JtczoKKysKKysgICAgICAgI2lmIEBHTlVMSUJfRk9PQAorKyAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKysgICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKysgICAgICAgIyAgIHVuZGVmIGZvbworKyAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCisrICAgICAgICMgIGVuZGlmCisrICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKysgICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworKyAgICAgICAjIGVsc2UKKysgICAgICAgIyAgaWYgIUBIQVZFX0ZPT0AgICBvciAgIGlmICFASEFWRV9ERUNMX0ZPT0AKKysgICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworKyAgICAgICAjICBlbmRpZgorKyAgICAgICBfR0xfQ1hYQUxJQVNfU1lTIChmb28sIC4uLik7CisrICAgICAgICMgZW5kaWYKKysgICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKysgICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworKyAgICAgICAuLi4KKysgICAgICAgI2VuZGlmCisrKi8KKysKKysvKiBfR0xfRVhURVJOX0MgZGVjbGFyYXRpb247CisrICAgcGVyZm9ybXMgdGhlIGRlY2xhcmF0aW9uIHdpdGggQyBsaW5rYWdlLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworKyMgZGVmaW5lIF9HTF9FWFRFUk5fQyBleHRlcm4gIkMiCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuCisrI2VuZGlmCisrCisrLyogX0dMX0ZVTkNERUNMX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyk7CisrICAgZGVjbGFyZXMgYSByZXBsYWNlbWVudCBmdW5jdGlvbiwgbmFtZWQgcnBsX2Z1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKysgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0ZVTkNERUNMX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworKyAqLworKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTChmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgX0dMX0ZVTkNERUNMX1JQTF8xIChycGxfIyNmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKQorKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1JQTF8xKHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgcnBsX2Z1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworKworKy8qIF9HTF9GVU5DREVDTF9TWVMgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGRlY2xhcmVzIHRoZSBzeXN0ZW0gZnVuY3Rpb24sIG5hbWVkIGZ1bmMsIHdpdGggdGhlIGdpdmVuIHByb3RvdHlwZSwKKysgICBjb25zaXN0aW5nIG9mIHJldHVybiB0eXBlLCBwYXJhbWV0ZXJzLCBhbmQgYXR0cmlidXRlcy4KKysgICBFeGFtcGxlOgorKyAgICAgX0dMX0ZVTkNERUNMX1NZUyAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfR0xfQVJHX05PTk5VTEwgKCgxKSkpOworKyAqLworKyNkZWZpbmUgX0dMX0ZVTkNERUNMX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgX0dMX0VYVEVSTl9DIHJldHR5cGUgZnVuYyBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisrCisrLyogX0dMX0NYWEFMSUFTX1JQTCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKysgICB0aGF0IHJlZGlyZWN0cyB0byBycGxfZnVuYywgaWYgR05VTElCX05BTUVTUEFDRSBpcyBkZWZpbmVkLgorKyAgIEV4YW1wbGU6CisrICAgICBfR0xfQ1hYQUxJQVNfUlBMIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKysgKi8KKysjZGVmaW5lIF9HTF9DWFhBTElBU19SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycykKKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6cnBsX2Z1bmM7ICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKy8qIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1JQTF8xIChmdW5jLCBycGxfZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CisrICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gcnBsX2Z1bmMgbWF5IGhhdmUgYSBzbGlnaHRseSBkaWZmZXJlbnQKKysgICBkZWNsYXJhdGlvbi4gIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yCisrICAgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb2NjdXIuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHJldHR5cGUgKCpjb25zdCBmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPig6OnJwbF9mdW5jKTsgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF9DQVNUXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjZW5kaWYKKysKKysvKiBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBkZWNsYXJlcyBhIEMrKyBhbGlhcyBjYWxsZWQgR05VTElCX05BTUVTUEFDRTo6ZnVuYworKyAgIHRoYXQgcmVkaXJlY3RzIHRvIHRoZSBzeXN0ZW0gcHJvdmlkZWQgZnVuY3Rpb24gZnVuYywgaWYgR05VTElCX05BTUVTUEFDRQorKyAgIGlzIGRlZmluZWQuCisrICAgRXhhbXBsZToKKysgICAgIF9HTF9DWFhBTElBU19TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikpOworKyAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyAgLyogSWYgd2Ugd2VyZSB0byB3cml0ZQorKyAgICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsKKysgICAgIGxpa2UgYWJvdmUgaW4gX0dMX0NYWEFMSUFTX1JQTF8xLCB0aGUgY29tcGlsZXIgY291bGQgb3B0aW1pemUgY2FsbHMKKysgICAgIGJldHRlciAocmVtb3ZlIGFuIGluZGlyZWN0aW9uIHRocm91Z2ggYSAnc3RhdGljJyBwb2ludGVyIHZhcmlhYmxlKSwKKysgICAgIGJ1dCB0aGVuIHRoZSBfR0xfQ1hYQUxJQVNXQVJOIG1hY3JvIGJlbG93IHdvdWxkIGNhdXNlIGEgd2FybmluZyBub3Qgb25seQorKyAgICAgZm9yIHVzZXMgb2YgOjpmdW5jIGJ1dCBhbHNvIGZvciB1c2VzIG9mIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMuICAqLworKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKysgICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICBcCisrICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9IDo6ZnVuYzsgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBmdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGRlY2xhcmF0aW9uLgorKyAgIEEgY2FzdCBpcyB1c2VkIHRvIHNpbGVuY2UgdGhlICJpbnZhbGlkIGNvbnZlcnNpb24iIGVycm9yIHRoYXQgd291bGQKKysgICBvdGhlcndpc2Ugb2NjdXIuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorKyAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgIHN0YXRpYyByZXR0eXBlICgqZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgXAorKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpmdW5jKTsgXAorKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTX1NZU19DQVNUMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycywgcmV0dHlwZTIsIHBhcmFtZXRlcnMyKTsKKysgICBpcyBsaWtlICBfR0xfQ1hYQUxJQVNfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzKTsKKysgICBleGNlcHQgdGhhdCB0aGUgQyBmdW5jdGlvbiBpcyBwaWNrZWQgYW1vbmcgYSBzZXQgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlvbnMsCisrICAgbmFtZWx5IHRoZSBvbmUgd2l0aCByZXR0eXBlMiBhbmQgcGFyYW1ldGVyczIuICBUd28gY29uc2VjdXRpdmUgY2FzdHMKKysgICBhcmUgdXNlZCB0byBzaWxlbmNlIHRoZSAiY2Fubm90IGZpbmQgYSBtYXRjaCIgYW5kICJpbnZhbGlkIGNvbnZlcnNpb24iCisrICAgZXJyb3JzIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysgIC8qIFRoZSBvdXRlciBjYXN0IG11c3QgYmUgYSByZWludGVycHJldF9jYXN0LgorKyAgICAgVGhlIGlubmVyIGNhc3Q6IFdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYSBzZXQgb2Ygb3ZlcmxvYWRlZAorKyAgICAgZnVuY3Rpb25zLCBpdCB3b3JrcyBhcyBhIHN0YXRpY19jYXN0PD4sIGNob29zaW5nIHRoZSBkZXNpZ25hdGVkIHZhcmlhbnQuCisrICAgICBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2luZ2xlIHZhcmlhbnQsIGl0IHdvcmtzIGFzIGEKKysgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Pi4gVGhlIHBhcmVudGhlc2l6ZWQgY2FzdCBzeW50YXggd29ya3MgYm90aCB3YXlzLiAgKi8KKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisrICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICByZWludGVycHJldF9jYXN0PHJldHR5cGUoKilwYXJhbWV0ZXJzPiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAocmV0dHlwZTIoKilwYXJhbWV0ZXJzMikoOjpmdW5jKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QyKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzLHJldHR5cGUyLHBhcmFtZXRlcnMyKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTV0FSTiAoZnVuYyk7CisrICAgY2F1c2VzIGEgd2FybmluZyB0byBiZSBlbWl0dGVkIHdoZW4gOjpmdW5jIGlzIHVzZWQgYnV0IG5vdCB3aGVuCisrICAgR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgZnVuYyBtdXN0IGJlIGRlZmluZWQgd2l0aG91dCBvdmVybG9hZGVkCisrICAgdmFyaWFudHMuICAqLworKyNpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorKyAgIF9HTF9DWFhBTElBU1dBUk5fMSAoZnVuYywgR05VTElCX05BTUVTUEFDRSkKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzEoZnVuYyxuYW1lc3BhY2UpIFwKKysgICBfR0xfQ1hYQUxJQVNXQVJOXzIgKGZ1bmMsIG5hbWVzcGFjZSkKKysvKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKysgICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKysjIGlmICFfX09QVElNSVpFX18KKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgIF9HTF9XQVJOX09OX1VTRSAoZnVuYywgXAorKyAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKysgICAgICAgICAgICAgICAgICAgICAiVXNlICIgI25hbWVzcGFjZSAiOjoiICNmdW5jICIgaW5zdGVhZC4iKQorKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKysjICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCisrICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOXzIoZnVuYyxuYW1lc3BhY2UpIFwKKysgICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrIyBlbmRpZgorKyNlbHNlCisrIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTihmdW5jKSBcCisrICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CisrI2VuZGlmCisrCisrLyogX0dMX0NYWEFMSUFTV0FSTjEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworKyAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIHRoZSBnaXZlbiBvdmVybG9hZGVkIHZhcmlhbnQgb2YgOjpmdW5jCisrICAgaXMgdXNlZCBidXQgbm90IHdoZW4gR05VTElCX05BTUVTUEFDRTo6ZnVuYyBpcyB1c2VkLiAgKi8KKysjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgIF9HTF9DWFhBTElBU1dBUk4xXzEgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIFwKKysgICAgICAgICAgICAgICAgICAgICAgICBHTlVMSUJfTkFNRVNQQUNFKQorKyMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisrICAgX0dMX0NYWEFMSUFTV0FSTjFfMiAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgbmFtZXNwYWNlKQorKy8qIFRvIHdvcmsgYXJvdW5kIEdDQyBidWcgPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NDM4ODE+LAorKyAgIHdlIGVuYWJsZSB0aGUgd2FybmluZyBvbmx5IHdoZW4gbm90IG9wdGltaXppbmcuICAqLworKyMgaWYgIV9fT1BUSU1JWkVfXworKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICBfR0xfV0FSTl9PTl9VU0VfQ1hYIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgc3ltYm9sIDo6IiAjZnVuYyAiIHJlZmVycyB0byB0aGUgc3lzdGVtIGZ1bmN0aW9uLiAiIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4xXzIoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbmFtZXNwYWNlKSBcCisrICAgICBleHRlcm4gX190eXBlb2ZfXyAoZnVuYykgZnVuYworKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorKyAgICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKysjIGVuZGlmCisrI2Vsc2UKKysjIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMShmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykgXAorKyAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBfR0xfQ1hYREVGU19IICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMjYgKzAsMCBAQAorLS8qIEEgQyBtYWNybyBmb3IgZGVjbGFyaW5nIHRoYXQgc3BlY2lmaWMgYXJndW1lbnRzIG11c3Qgbm90IGJlIE5VTEwuCistICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIF9HTF9BUkdfTk9OTlVMTCgobiwuLi4sbSkpIHRlbGxzIHRoZSBjb21waWxlciBhbmQgc3RhdGljIGFuYWx5emVyIHRvb2xzCistICAgdGhhdCB0aGUgdmFsdWVzIHBhc3NlZCBhcyBhcmd1bWVudHMgbiwgLi4uLCBtIG11c3QgYmUgbm9uLU5VTEwgcG9pbnRlcnMuCistICAgbiA9IDEgc3RhbmRzIGZvciB0aGUgZmlyc3QgYXJndW1lbnQsIG4gPSAyIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGV0Yy4gICovCistI2lmbmRlZiBfR0xfQVJHX05PTk5VTEwKKy0jIGlmIChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID49IDMpIHx8IF9fR05VQ19fID4gMworLSMgIGRlZmluZSBfR0xfQVJHX05PTk5VTEwocGFyYW1zKSBfX2F0dHJpYnV0ZV9fICgoX19ub25udWxsX18gcGFyYW1zKSkKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX0FSR19OT05OVUxMKHBhcmFtcykKKy0jIGVuZGlmCistI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L2MrK2RlZnMuaAkyMDExLTA4LTA3IDA2OjIyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwyNzEgKzAsMCBAQAorLS8qIEMrKyBjb21wYXRpYmxlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG1hY3Jvcy4KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorLSAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCistICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKy0gICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistI2lmbmRlZiBfR0xfQ1hYREVGU19ICistI2RlZmluZSBfR0xfQ1hYREVGU19ICistCistLyogVGhlIHRocmVlIG1vc3QgZnJlcXVlbnQgdXNlIGNhc2VzIG9mIHRoZXNlIG1hY3JvcyBhcmU6CistCistICAgKiBGb3IgcHJvdmlkaW5nIGEgc3Vic3RpdHV0ZSBmb3IgYSBmdW5jdGlvbiB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorLSAgICAgcGxhdGZvcm1zLCBidXQgaXMgZGVjbGFyZWQgYW5kIHdvcmtzIGZpbmUgb24gdGhlIHBsYXRmb3JtcyBvbiB3aGljaAorLSAgICAgaXQgZXhpc3RzOgorLQorLSAgICAgICAjaWYgQEdOVUxJQl9GT09ACistICAgICAgICMgaWYgIUBIQVZFX0ZPT0AKKy0gICAgICAgX0dMX0ZVTkNERUNMX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU19TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgX0dMX0NYWEFMSUFTV0FSTiAoZm9vKTsKKy0gICAgICAgI2VsaWYgZGVmaW5lZCBHTlVMSUJfUE9TSVhDSEVDSworLSAgICAgICAuLi4KKy0gICAgICAgI2VuZGlmCistCistICAgKiBGb3IgcHJvdmlkaW5nIGEgcmVwbGFjZW1lbnQgZm9yIGEgZnVuY3Rpb24gdGhhdCBleGlzdHMgb24gYWxsIHBsYXRmb3JtcywKKy0gICAgIGJ1dCBpcyBicm9rZW4vaW5zdWZmaWNpZW50IGFuZCBuZWVkcyB0byBiZSByZXBsYWNlZCBvbiBzb21lIHBsYXRmb3JtczoKKy0KKy0gICAgICAgI2lmIEBHTlVMSUJfRk9PQAorLSAgICAgICAjIGlmIEBSRVBMQUNFX0ZPT0AKKy0gICAgICAgIyAgaWYgIShkZWZpbmVkIF9fY3BsdXNwbHVzICYmIGRlZmluZWQgR05VTElCX05BTUVTUEFDRSkKKy0gICAgICAgIyAgIHVuZGVmIGZvbworLSAgICAgICAjICAgZGVmaW5lIGZvbyBycGxfZm9vCistICAgICAgICMgIGVuZGlmCistICAgICAgIF9HTF9GVU5DREVDTF9SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgX0dMX0NYWEFMSUFTX1JQTCAoZm9vLCAuLi4pOworLSAgICAgICAjIGVsc2UKKy0gICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLQorLSAgICogRm9yIHByb3ZpZGluZyBhIHJlcGxhY2VtZW50IGZvciBhIGZ1bmN0aW9uIHRoYXQgZXhpc3RzIG9uIHNvbWUgcGxhdGZvcm1zCistICAgICBidXQgaXMgYnJva2VuL2luc3VmZmljaWVudCBhbmQgbmVlZHMgdG8gYmUgcmVwbGFjZWQgb24gc29tZSBvZiB0aGVtIGFuZAorLSAgICAgaXMgYWRkaXRpb25hbGx5IGVpdGhlciBtaXNzaW5nIG9yIHVuZGVjbGFyZWQgb24gc29tZSBvdGhlciBwbGF0Zm9ybXM6CistCistICAgICAgICNpZiBAR05VTElCX0ZPT0AKKy0gICAgICAgIyBpZiBAUkVQTEFDRV9GT09ACistICAgICAgICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistICAgICAgICMgICB1bmRlZiBmb28KKy0gICAgICAgIyAgIGRlZmluZSBmb28gcnBsX2ZvbworLSAgICAgICAjICBlbmRpZgorLSAgICAgICBfR0xfRlVOQ0RFQ0xfUlBMIChmb28sIC4uLik7CistICAgICAgIF9HTF9DWFhBTElBU19SUEwgKGZvbywgLi4uKTsKKy0gICAgICAgIyBlbHNlCistICAgICAgICMgIGlmICFASEFWRV9GT09AICAgb3IgICBpZiAhQEhBVkVfREVDTF9GT09ACistICAgICAgIF9HTF9GVU5DREVDTF9TWVMgKGZvbywgLi4uKTsKKy0gICAgICAgIyAgZW5kaWYKKy0gICAgICAgX0dMX0NYWEFMSUFTX1NZUyAoZm9vLCAuLi4pOworLSAgICAgICAjIGVuZGlmCistICAgICAgIF9HTF9DWFhBTElBU1dBUk4gKGZvbyk7CistICAgICAgICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKy0gICAgICAgLi4uCistICAgICAgICNlbmRpZgorLSovCistCistLyogX0dMX0VYVEVSTl9DIGRlY2xhcmF0aW9uOworLSAgIHBlcmZvcm1zIHRoZSBkZWNsYXJhdGlvbiB3aXRoIEMgbGlua2FnZS4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMKKy0jIGRlZmluZSBfR0xfRVhURVJOX0MgZXh0ZXJuICJDIgorLSNlbHNlCistIyBkZWZpbmUgX0dMX0VYVEVSTl9DIGV4dGVybgorLSNlbmRpZgorLQorLS8qIF9HTF9GVU5DREVDTF9SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpOworLSAgIGRlY2xhcmVzIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24sIG5hbWVkIHJwbF9mdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCistICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9GVU5DREVDTF9SUEwgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKy0gKi8KKy0jZGVmaW5lIF9HTF9GVU5DREVDTF9SUEwoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gIF9HTF9GVU5DREVDTF9SUExfMSAocnBsXyMjZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcykKKy0jZGVmaW5lIF9HTF9GVU5DREVDTF9SUExfMShycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gIF9HTF9FWFRFUk5fQyByZXR0eXBlIHJwbF9mdW5jIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMKKy0KKy0vKiBfR0xfRlVOQ0RFQ0xfU1lTIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBkZWNsYXJlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uLCBuYW1lZCBmdW5jLCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsCistICAgY29uc2lzdGluZyBvZiByZXR1cm4gdHlwZSwgcGFyYW1ldGVycywgYW5kIGF0dHJpYnV0ZXMuCistICAgRXhhbXBsZToKKy0gICAgIF9HTF9GVU5DREVDTF9TWVMgKG9wZW4sIGludCwgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0dMX0FSR19OT05OVUxMICgoMSkpKTsKKy0gKi8KKy0jZGVmaW5lIF9HTF9GVU5DREVDTF9TWVMoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gIF9HTF9FWFRFUk5fQyByZXR0eXBlIGZ1bmMgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcworLQorLS8qIF9HTF9DWFhBTElBU19SUEwgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGRlY2xhcmVzIGEgQysrIGFsaWFzIGNhbGxlZCBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jCistICAgdGhhdCByZWRpcmVjdHMgdG8gcnBsX2Z1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UgaXMgZGVmaW5lZC4KKy0gICBFeGFtcGxlOgorLSAgICAgX0dMX0NYWEFMSUFTX1JQTCAob3BlbiwgaW50LCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBmbGFncywgLi4uKSk7CistICovCistI2RlZmluZSBfR0xfQ1hYQUxJQVNfUlBMKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICBfR0xfQ1hYQUxJQVNfUlBMXzEgKGZ1bmMsIHJwbF8jI2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1JQTF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OnJwbF9mdW5jOyAgICAgICAgICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMXzEoZnVuYyxycGxfZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0vKiBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGlzIGxpa2UgIF9HTF9DWFhBTElBU19SUExfMSAoZnVuYywgcnBsX2Z1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMpOworLSAgIGV4Y2VwdCB0aGF0IHRoZSBDIGZ1bmN0aW9uIHJwbF9mdW5jIG1heSBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50CistICAgZGVjbGFyYXRpb24uICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvcgorLSAgIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfUlBMX0NBU1RfMShmdW5jLHJwbF9mdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICByZXR0eXBlICgqY29uc3QgZnVuYykgcGFyYW1ldGVycyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oOjpycGxfZnVuYyk7ICAgICAgICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19SUExfQ0FTVF8xKGZ1bmMscnBsX2Z1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistI2VuZGlmCistCistLyogX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZGVjbGFyZXMgYSBDKysgYWxpYXMgY2FsbGVkIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMKKy0gICB0aGF0IHJlZGlyZWN0cyB0byB0aGUgc3lzdGVtIHByb3ZpZGVkIGZ1bmN0aW9uIGZ1bmMsIGlmIEdOVUxJQl9OQU1FU1BBQ0UKKy0gICBpcyBkZWZpbmVkLgorLSAgIEV4YW1wbGU6CistICAgICBfR0xfQ1hYQUxJQVNfU1lTIChvcGVuLCBpbnQsIChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzLCAuLi4pKTsKKy0gKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0gIC8qIElmIHdlIHdlcmUgdG8gd3JpdGUKKy0gICAgICAgcmV0dHlwZSAoKmNvbnN0IGZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7CistICAgICBsaWtlIGFib3ZlIGluIF9HTF9DWFhBTElBU19SUExfMSwgdGhlIGNvbXBpbGVyIGNvdWxkIG9wdGltaXplIGNhbGxzCistICAgICBiZXR0ZXIgKHJlbW92ZSBhbiBpbmRpcmVjdGlvbiB0aHJvdWdoIGEgJ3N0YXRpYycgcG9pbnRlciB2YXJpYWJsZSksCistICAgICBidXQgdGhlbiB0aGUgX0dMX0NYWEFMSUFTV0FSTiBtYWNybyBiZWxvdyB3b3VsZCBjYXVzZSBhIHdhcm5pbmcgbm90IG9ubHkKKy0gICAgIGZvciB1c2VzIG9mIDo6ZnVuYyBidXQgYWxzbyBmb3IgdXNlcyBvZiBHTlVMSUJfTkFNRVNQQUNFOjpmdW5jLiAgKi8KKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzKSBcCistICAgIG5hbWVzcGFjZSBHTlVMSUJfTkFNRVNQQUNFICAgICAgICAgICAgICAgICAgICAgXAorLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSA6OmZ1bmM7ICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZUyhmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gZnVuYyBtYXkgaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBkZWNsYXJhdGlvbi4KKy0gICBBIGNhc3QgaXMgdXNlZCB0byBzaWxlbmNlIHRoZSAiaW52YWxpZCBjb252ZXJzaW9uIiBlcnJvciB0aGF0IHdvdWxkCistICAgb3RoZXJ3aXNlIG9jY3VyLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNfU1lTX0NBU1QoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnMpIFwKKy0gICAgbmFtZXNwYWNlIEdOVUxJQl9OQU1FU1BBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBzdGF0aWMgcmV0dHlwZSAoKmZ1bmMpIHBhcmFtZXRlcnMgPSAgICAgICAgICAgICAgIFwKKy0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cmV0dHlwZSgqKXBhcmFtZXRlcnM+KDo6ZnVuYyk7IFwKKy0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU19TWVNfQ0FTVChmdW5jLHJldHR5cGUscGFyYW1ldGVycykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU19TWVNfQ0FTVDIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnMsIHJldHR5cGUyLCBwYXJhbWV0ZXJzMik7CistICAgaXMgbGlrZSAgX0dMX0NYWEFMSUFTX1NZUyAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVycyk7CistICAgZXhjZXB0IHRoYXQgdGhlIEMgZnVuY3Rpb24gaXMgcGlja2VkIGFtb25nIGEgc2V0IG9mIG92ZXJsb2FkZWQgZnVuY3Rpb25zLAorLSAgIG5hbWVseSB0aGUgb25lIHdpdGggcmV0dHlwZTIgYW5kIHBhcmFtZXRlcnMyLiAgVHdvIGNvbnNlY3V0aXZlIGNhc3RzCistICAgYXJlIHVzZWQgdG8gc2lsZW5jZSB0aGUgImNhbm5vdCBmaW5kIGEgbWF0Y2giIGFuZCAiaW52YWxpZCBjb252ZXJzaW9uIgorLSAgIGVycm9ycyB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ci4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistICAvKiBUaGUgb3V0ZXIgY2FzdCBtdXN0IGJlIGEgcmVpbnRlcnByZXRfY2FzdC4KKy0gICAgIFRoZSBpbm5lciBjYXN0OiBXaGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIG92ZXJsb2FkZWQKKy0gICAgIGZ1bmN0aW9ucywgaXQgd29ya3MgYXMgYSBzdGF0aWNfY2FzdDw+LCBjaG9vc2luZyB0aGUgZGVzaWduYXRlZCB2YXJpYW50LgorLSAgICAgV2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBhIHNpbmdsZSB2YXJpYW50LCBpdCB3b3JrcyBhcyBhCistICAgICByZWludGVycHJldF9jYXN0PD4uIFRoZSBwYXJlbnRoZXNpemVkIGNhc3Qgc3ludGF4IHdvcmtzIGJvdGggd2F5cy4gICovCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorLSAgICBuYW1lc3BhY2UgR05VTElCX05BTUVTUEFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgc3RhdGljIHJldHR5cGUgKCpmdW5jKSBwYXJhbWV0ZXJzID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxyZXR0eXBlKCopcGFyYW1ldGVycz4oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgKHJldHR5cGUyKCopcGFyYW1ldGVyczIpKDo6ZnVuYykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTX1NZU19DQVNUMihmdW5jLHJldHR5cGUscGFyYW1ldGVycyxyZXR0eXBlMixwYXJhbWV0ZXJzMikgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU1dBUk4gKGZ1bmMpOworLSAgIGNhdXNlcyBhIHdhcm5pbmcgdG8gYmUgZW1pdHRlZCB3aGVuIDo6ZnVuYyBpcyB1c2VkIGJ1dCBub3Qgd2hlbgorLSAgIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gIGZ1bmMgbXVzdCBiZSBkZWZpbmVkIHdpdGhvdXQgb3ZlcmxvYWRlZAorLSAgIHZhcmlhbnRzLiAgKi8KKy0jaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOKGZ1bmMpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOXzEgKGZ1bmMsIEdOVUxJQl9OQU1FU1BBQ0UpCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8xKGZ1bmMsbmFtZXNwYWNlKSBcCistICAgX0dMX0NYWEFMSUFTV0FSTl8yIChmdW5jLCBuYW1lc3BhY2UpCistLyogVG8gd29yayBhcm91bmQgR0NDIGJ1ZyA8aHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD00Mzg4MT4sCistICAgd2UgZW5hYmxlIHRoZSB3YXJuaW5nIG9ubHkgd2hlbiBub3Qgb3B0aW1pemluZy4gICovCistIyBpZiAhX19PUFRJTUlaRV9fCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICBfR0xfV0FSTl9PTl9VU0UgKGZ1bmMsIFwKKy0gICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCistICAgICAgICAgICAgICAgICAgICAgIlVzZSAiICNuYW1lc3BhY2UgIjo6IiAjZnVuYyAiIGluc3RlYWQuIikKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistIyAgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk5fMihmdW5jLG5hbWVzcGFjZSkgXAorLSAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTl8yKGZ1bmMsbmFtZXNwYWNlKSBcCistICAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSMgZW5kaWYKKy0jZWxzZQorLSMgZGVmaW5lIF9HTF9DWFhBTElBU1dBUk4oZnVuYykgXAorLSAgICBfR0xfRVhURVJOX0MgaW50IF9nbF9jeHhhbGlhc19kdW1teQorLSNlbmRpZgorLQorLS8qIF9HTF9DWFhBTElBU1dBUk4xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzKTsKKy0gICBjYXVzZXMgYSB3YXJuaW5nIHRvIGJlIGVtaXR0ZWQgd2hlbiB0aGUgZ2l2ZW4gb3ZlcmxvYWRlZCB2YXJpYW50IG9mIDo6ZnVuYworLSAgIGlzIHVzZWQgYnV0IG5vdCB3aGVuIEdOVUxJQl9OQU1FU1BBQ0U6OmZ1bmMgaXMgdXNlZC4gICovCistI2lmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gICBfR0xfQ1hYQUxJQVNXQVJOMV8xIChmdW5jLCByZXR0eXBlLCBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLCBcCistICAgICAgICAgICAgICAgICAgICAgICAgR05VTElCX05BTUVTUEFDRSkKKy0jIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8xKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorLSAgIF9HTF9DWFhBTElBU1dBUk4xXzIgKGZ1bmMsIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsIG5hbWVzcGFjZSkKKy0vKiBUbyB3b3JrIGFyb3VuZCBHQ0MgYnVnIDxodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQzODgxPiwKKy0gICB3ZSBlbmFibGUgdGhlIHdhcm5pbmcgb25seSB3aGVuIG5vdCBvcHRpbWl6aW5nLiAgKi8KKy0jIGlmICFfX09QVElNSVpFX18KKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuYywgcmV0dHlwZSwgcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcywgXAorLSAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHN5bWJvbCA6OiIgI2Z1bmMgIiByZWZlcnMgdG8gdGhlIHN5c3RlbSBmdW5jdGlvbi4gIiBcCistICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgIiAjbmFtZXNwYWNlICI6OiIgI2Z1bmMgIiBpbnN0ZWFkLiIpCistIyBlbGlmIF9fR05VQ19fID49IDMgJiYgR05VTElCX1NUUklDVF9DSEVDS0lORworLSMgIGRlZmluZSBfR0xfQ1hYQUxJQVNXQVJOMV8yKGZ1bmMscmV0dHlwZSxwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzLG5hbWVzcGFjZSkgXAorLSAgICAgZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmMpIGZ1bmMKKy0jIGVsc2UKKy0jICBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjFfMihmdW5jLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxuYW1lc3BhY2UpIFwKKy0gICAgIF9HTF9FWFRFUk5fQyBpbnQgX2dsX2N4eGFsaWFzX2R1bW15CistIyBlbmRpZgorLSNlbHNlCistIyBkZWZpbmUgX0dMX0NYWEFMSUFTV0FSTjEoZnVuYyxyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMpIFwKKy0gICAgX0dMX0VYVEVSTl9DIGludCBfZ2xfY3h4YWxpYXNfZHVtbXkKKy0jZW5kaWYKKy0KKy0jZW5kaWYgLyogX0dMX0NYWERFRlNfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwxMCArMCwwIEBACistI2lmbmRlZiBfTm9yZXR1cm4KKy0jIGlmICgzIDw9IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18pIFwKKy0gICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKy0jICBkZWZpbmUgX05vcmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorLSMgZWxpZiAxMjAwIDw9IF9NU0NfVkVSCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKy0jIGVsc2UKKy0jICBkZWZpbmUgX05vcmV0dXJuCistIyBlbmRpZgorLSNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvc25pcHBldC93YXJuLW9uLXVzZS5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgJMjAxMS0wOC0wNyAwNjoyMjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDEwOSArMCwwIEBACistLyogQSBDIG1hY3JvIGZvciBlbWl0dGluZyB3YXJuaW5ncyBpZiBhIGZ1bmN0aW9uIGlzIHVzZWQuCistICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistCistICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKy0gICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorLSAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCistICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCistICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLQorLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCistICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworLQorLS8qIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJsaXRlcmFsIHN0cmluZyIpIGlzc3VlcyBhIGRlY2xhcmF0aW9uCistICAgZm9yIEZVTkNUSU9OIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgY29tcGlsZXIgd2FybmluZyBjb250YWluaW5nCistICAgdGhlIHRleHQgb2YgImxpdGVyYWwgc3RyaW5nIiBhbnl3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCwgaWYKKy0gICBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgSWYgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcworLSAgIGZlYXR1cmUsIHRoZSBtYWNybyBleHBhbmRzIHRvIGFuIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCistCistICAgVGhpcyBtYWNybyBpcyB1c2VmdWwgZm9yIG1hcmtpbmcgYSBmdW5jdGlvbiBhcyBhIHBvdGVudGlhbAorLSAgIHBvcnRhYmlsaXR5IHRyYXAsIHdpdGggdGhlIGludGVudCB0aGF0ICJsaXRlcmFsIHN0cmluZyIgaW5jbHVkZQorLSAgIGluc3RydWN0aW9ucyBvbiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNlZAorLSAgIGluc3RlYWQuICBIb3dldmVyLCBvbmUgb2YgdGhlIHJlYXNvbnMgdGhhdCBhIGZ1bmN0aW9uIGlzIGEKKy0gICBwb3J0YWJpbGl0eSB0cmFwIGlzIGlmIGl0IGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlLiAgRGVjbGFyaW5nCistICAgRlVOQ1RJT04gd2l0aCBhIGRpZmZlcmVudCBzaWduYXR1cmUgaW4gQyBpcyBhIGNvbXBpbGF0aW9uIGVycm9yLCBzbworLSAgIHRoaXMgbWFjcm8gbXVzdCB1c2UgdGhlIHNhbWUgdHlwZSBhcyBhbnkgZXhpc3RpbmcgZGVjbGFyYXRpb24gc28KKy0gICB0aGF0IHByb2dyYW1zIHRoYXQgYXZvaWQgdGhlIHByb2JsZW1hdGljIEZVTkNUSU9OIGRvIG5vdCBmYWlsIHRvCistICAgY29tcGlsZSBtZXJlbHkgYmVjYXVzZSB0aGV5IGluY2x1ZGVkIGEgaGVhZGVyIHRoYXQgcG9pc29uZWQgdGhlCistICAgZnVuY3Rpb24uICBCdXQgdGhpcyBpbXBsaWVzIHRoYXQgX0dMX1dBUk5fT05fVVNFIGlzIG9ubHkgc2FmZSB0bworLSAgIHVzZSBpZiBGVU5DVElPTiBpcyBrbm93biB0byBhbHJlYWR5IGhhdmUgYSBkZWNsYXJhdGlvbi4gIFVzZSBvZgorLSAgIHRoaXMgbWFjcm8gaW1wbGllcyB0aGF0IHRoZXJlIG11c3Qgbm90IGJlIGFueSBvdGhlciBtYWNybyBoaWRpbmcKKy0gICB0aGUgZGVjbGFyYXRpb24gb2YgRlVOQ1RJT047IGJ1dCB1bmRlZmluaW5nIEZVTkNUSU9OIGZpcnN0IGlzIHBhcnQKKy0gICBvZiB0aGUgcG9pc29uaW5nIHByb2Nlc3MgYW55d2F5IChhbHRob3VnaCBmb3Igc3ltYm9scyB0aGF0IGFyZQorLSAgIHByb3ZpZGVkIG9ubHkgdmlhIGEgbWFjcm8sIHRoZSByZXN1bHQgaXMgYSBjb21waWxhdGlvbiBlcnJvciByYXRoZXIKKy0gICB0aGFuIGEgd2FybmluZyBjb250YWluaW5nICJsaXRlcmFsIHN0cmluZyIpLiAgQWxzbyBub3RlIHRoYXQgaW4KKy0gICBDKyssIGl0IGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgRlVOQ1RJT04gaGFzIG5vIG92ZXJsb2Fkcy4KKy0KKy0gICBGb3IgYW4gZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gcG9pc29uICdnZXRsaW5lJyBieToKKy0gICAtIGFkZGluZyBhIGNhbGwgdG8gZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLAorLSAgICAgW2dldGxpbmVdKSBpbiBjb25maWd1cmUuYWMsIHdoaWNoIHBvdGVudGlhbGx5IGRlZmluZXMKKy0gICAgIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorLSAgIC0gYWRkaW5nIHRoaXMgY29kZSB0byBhIGhlYWRlciB0aGF0IHdyYXBzIHRoZSBzeXN0ZW0gPHN0ZGlvLmg+OgorLSAgICAgI3VuZGVmIGdldGxpbmUKKy0gICAgICNpZiBIQVZFX1JBV19ERUNMX0dFVExJTkUKKy0gICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0bGluZSwgImdldGxpbmUgaXMgcmVxdWlyZWQgYnkgUE9TSVggMjAwOCwgYnV0IgorLSAgICAgICAibm90IHVuaXZlcnNhbGx5IHByZXNlbnQ7IHVzZSB0aGUgZ251bGliIG1vZHVsZSBnZXRsaW5lIik7CistICAgICAjZW5kaWYKKy0KKy0gICBJdCBpcyBub3QgcG9zc2libGUgdG8gZGlyZWN0bHkgcG9pc29uIGdsb2JhbCB2YXJpYWJsZXMuICBCdXQgaXQgaXMKKy0gICBwb3NzaWJsZSB0byB3cml0ZSBhIHdyYXBwZXIgYWNjZXNzb3IgZnVuY3Rpb24sIGFuZCBwb2lzb24gdGhhdAorLSAgIChsZXNzIGNvbW1vbiB1c2FnZSwgbGlrZSAmZW52aXJvbiwgd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yCistICAgcmF0aGVyIHRoYW4gaXNzdWUgdGhlIG5pY2Ugd2FybmluZywgYnV0IHRoZSBlbmQgcmVzdWx0IG9mIGluZm9ybWluZworLSAgIHRoZSBkZXZlbG9wZXIgYWJvdXQgdGhlaXIgcG9ydGFiaWxpdHkgcHJvYmxlbSBpcyBzdGlsbCBhY2hpZXZlZCk6CistICAgI2lmIEhBVkVfUkFXX0RFQ0xfRU5WSVJPTgorLSAgIHN0YXRpYyBpbmxpbmUgY2hhciAqKipycGxfZW52aXJvbiAodm9pZCkgeyByZXR1cm4gJmVudmlyb247IH0KKy0gICBfR0xfV0FSTl9PTl9VU0UgKHJwbF9lbnZpcm9uLCAiZW52aXJvbiBpcyBub3QgYWx3YXlzIHByb3Blcmx5IGRlY2xhcmVkIik7CistICAgIyB1bmRlZiBlbnZpcm9uCistICAgIyBkZWZpbmUgZW52aXJvbiAoKnJwbF9lbnZpcm9uICgpKQorLSAgICNlbmRpZgorLSAgICovCistI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKy0KKy0jIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorLS8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCistZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKy0jIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCistLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCistZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorLSMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCistIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorLV9HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKy0jIGVuZGlmCistI2VuZGlmCistCistLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorLSAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKy0gICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCistICAgYW5kIGF0dHJpYnV0ZXMuCistICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworLSAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCistI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCistIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCistICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorLSMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKy0vKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworLSMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKy1leHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCistIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKy0jICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCistX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKy0gICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworLSNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKy0jIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKy0jICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorLSMgZWxzZQorLSMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKy0jIGVuZGlmCistI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vYnVpbGQtYXV4L3dhcm4tb24tdXNlLmggbGliaWNvbnYtMS4xNC9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9idWlsZC1hdXgvd2Fybi1vbi11c2UuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGxpYmljb252LTEuMTQvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgJMjAxMi0wMS0wOCAwMjowNzozOS45NTA0ODQ0MzkgLTA4MDAKK0BAIC0wLDAgKzEsMTA5IEBACisrLyogQSBDIG1hY3JvIGZvciBlbWl0dGluZyB3YXJuaW5ncyBpZiBhIGZ1bmN0aW9uIGlzIHVzZWQuCisrICAgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisrCisrICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKysgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorKyAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisrICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKysKKysgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisrICAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKworKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisrICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworKworKy8qIF9HTF9XQVJOX09OX1VTRSAoZnVuY3Rpb24sICJsaXRlcmFsIHN0cmluZyIpIGlzc3VlcyBhIGRlY2xhcmF0aW9uCisrICAgZm9yIEZVTkNUSU9OIHdoaWNoIHdpbGwgdGhlbiB0cmlnZ2VyIGEgY29tcGlsZXIgd2FybmluZyBjb250YWluaW5nCisrICAgdGhlIHRleHQgb2YgImxpdGVyYWwgc3RyaW5nIiBhbnl3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCwgaWYKKysgICBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBpbGVyLiAgSWYgdGhlIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgdGhpcworKyAgIGZlYXR1cmUsIHRoZSBtYWNybyBleHBhbmRzIHRvIGFuIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCisrCisrICAgVGhpcyBtYWNybyBpcyB1c2VmdWwgZm9yIG1hcmtpbmcgYSBmdW5jdGlvbiBhcyBhIHBvdGVudGlhbAorKyAgIHBvcnRhYmlsaXR5IHRyYXAsIHdpdGggdGhlIGludGVudCB0aGF0ICJsaXRlcmFsIHN0cmluZyIgaW5jbHVkZQorKyAgIGluc3RydWN0aW9ucyBvbiB0aGUgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgdXNlZAorKyAgIGluc3RlYWQuICBIb3dldmVyLCBvbmUgb2YgdGhlIHJlYXNvbnMgdGhhdCBhIGZ1bmN0aW9uIGlzIGEKKysgICBwb3J0YWJpbGl0eSB0cmFwIGlzIGlmIGl0IGhhcyB0aGUgd3Jvbmcgc2lnbmF0dXJlLiAgRGVjbGFyaW5nCisrICAgRlVOQ1RJT04gd2l0aCBhIGRpZmZlcmVudCBzaWduYXR1cmUgaW4gQyBpcyBhIGNvbXBpbGF0aW9uIGVycm9yLCBzbworKyAgIHRoaXMgbWFjcm8gbXVzdCB1c2UgdGhlIHNhbWUgdHlwZSBhcyBhbnkgZXhpc3RpbmcgZGVjbGFyYXRpb24gc28KKysgICB0aGF0IHByb2dyYW1zIHRoYXQgYXZvaWQgdGhlIHByb2JsZW1hdGljIEZVTkNUSU9OIGRvIG5vdCBmYWlsIHRvCisrICAgY29tcGlsZSBtZXJlbHkgYmVjYXVzZSB0aGV5IGluY2x1ZGVkIGEgaGVhZGVyIHRoYXQgcG9pc29uZWQgdGhlCisrICAgZnVuY3Rpb24uICBCdXQgdGhpcyBpbXBsaWVzIHRoYXQgX0dMX1dBUk5fT05fVVNFIGlzIG9ubHkgc2FmZSB0bworKyAgIHVzZSBpZiBGVU5DVElPTiBpcyBrbm93biB0byBhbHJlYWR5IGhhdmUgYSBkZWNsYXJhdGlvbi4gIFVzZSBvZgorKyAgIHRoaXMgbWFjcm8gaW1wbGllcyB0aGF0IHRoZXJlIG11c3Qgbm90IGJlIGFueSBvdGhlciBtYWNybyBoaWRpbmcKKysgICB0aGUgZGVjbGFyYXRpb24gb2YgRlVOQ1RJT047IGJ1dCB1bmRlZmluaW5nIEZVTkNUSU9OIGZpcnN0IGlzIHBhcnQKKysgICBvZiB0aGUgcG9pc29uaW5nIHByb2Nlc3MgYW55d2F5IChhbHRob3VnaCBmb3Igc3ltYm9scyB0aGF0IGFyZQorKyAgIHByb3ZpZGVkIG9ubHkgdmlhIGEgbWFjcm8sIHRoZSByZXN1bHQgaXMgYSBjb21waWxhdGlvbiBlcnJvciByYXRoZXIKKysgICB0aGFuIGEgd2FybmluZyBjb250YWluaW5nICJsaXRlcmFsIHN0cmluZyIpLiAgQWxzbyBub3RlIHRoYXQgaW4KKysgICBDKyssIGl0IGlzIG9ubHkgc2FmZSB0byB1c2UgaWYgRlVOQ1RJT04gaGFzIG5vIG92ZXJsb2Fkcy4KKysKKysgICBGb3IgYW4gZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gcG9pc29uICdnZXRsaW5lJyBieToKKysgICAtIGFkZGluZyBhIGNhbGwgdG8gZ2xfV0FSTl9PTl9VU0VfUFJFUEFSRShbWyNpbmNsdWRlIDxzdGRpby5oPl1dLAorKyAgICAgW2dldGxpbmVdKSBpbiBjb25maWd1cmUuYWMsIHdoaWNoIHBvdGVudGlhbGx5IGRlZmluZXMKKysgICAgIEhBVkVfUkFXX0RFQ0xfR0VUTElORQorKyAgIC0gYWRkaW5nIHRoaXMgY29kZSB0byBhIGhlYWRlciB0aGF0IHdyYXBzIHRoZSBzeXN0ZW0gPHN0ZGlvLmg+OgorKyAgICAgI3VuZGVmIGdldGxpbmUKKysgICAgICNpZiBIQVZFX1JBV19ERUNMX0dFVExJTkUKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0bGluZSwgImdldGxpbmUgaXMgcmVxdWlyZWQgYnkgUE9TSVggMjAwOCwgYnV0IgorKyAgICAgICAibm90IHVuaXZlcnNhbGx5IHByZXNlbnQ7IHVzZSB0aGUgZ251bGliIG1vZHVsZSBnZXRsaW5lIik7CisrICAgICAjZW5kaWYKKysKKysgICBJdCBpcyBub3QgcG9zc2libGUgdG8gZGlyZWN0bHkgcG9pc29uIGdsb2JhbCB2YXJpYWJsZXMuICBCdXQgaXQgaXMKKysgICBwb3NzaWJsZSB0byB3cml0ZSBhIHdyYXBwZXIgYWNjZXNzb3IgZnVuY3Rpb24sIGFuZCBwb2lzb24gdGhhdAorKyAgIChsZXNzIGNvbW1vbiB1c2FnZSwgbGlrZSAmZW52aXJvbiwgd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yCisrICAgcmF0aGVyIHRoYW4gaXNzdWUgdGhlIG5pY2Ugd2FybmluZywgYnV0IHRoZSBlbmQgcmVzdWx0IG9mIGluZm9ybWluZworKyAgIHRoZSBkZXZlbG9wZXIgYWJvdXQgdGhlaXIgcG9ydGFiaWxpdHkgcHJvYmxlbSBpcyBzdGlsbCBhY2hpZXZlZCk6CisrICAgI2lmIEhBVkVfUkFXX0RFQ0xfRU5WSVJPTgorKyAgIHN0YXRpYyBpbmxpbmUgY2hhciAqKipycGxfZW52aXJvbiAodm9pZCkgeyByZXR1cm4gJmVudmlyb247IH0KKysgICBfR0xfV0FSTl9PTl9VU0UgKHJwbF9lbnZpcm9uLCAiZW52aXJvbiBpcyBub3QgYWx3YXlzIHByb3Blcmx5IGRlY2xhcmVkIik7CisrICAgIyB1bmRlZiBlbnZpcm9uCisrICAgIyBkZWZpbmUgZW52aXJvbiAoKnJwbF9lbnZpcm9uICgpKQorKyAgICNlbmRpZgorKyAgICovCisrI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0UKKysKKysjIGlmIDQgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gNCAmJiAzIDw9IF9fR05VQ19NSU5PUl9fKQorKy8qIEEgY29tcGlsZXIgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSBpbiBnY2MgdmVyc2lvbnMgNC4zLjAgYW5kIGxhdGVyLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCisrZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1lc3NhZ2UpKSkKKysjIGVsaWYgX19HTlVDX18gPj0gMyAmJiBHTlVMSUJfU1RSSUNUX0NIRUNLSU5HCisrLyogVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIGZ1bmN0aW9uLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFKGZ1bmN0aW9uLCBtZXNzYWdlKSBcCisrZXh0ZXJuIF9fdHlwZW9mX18gKGZ1bmN0aW9uKSBmdW5jdGlvbgorKyMgZWxzZSAvKiBVbnN1cHBvcnRlZC4gICovCisrIyAgZGVmaW5lIF9HTF9XQVJOX09OX1VTRShmdW5jdGlvbiwgbWVzc2FnZSkgXAorK19HTF9XQVJOX0VYVEVSTl9DIGludCBfZ2xfd2Fybl9vbl91c2UKKysjIGVuZGlmCisrI2VuZGlmCisrCisrLyogX0dMX1dBUk5fT05fVVNFX0NYWCAoZnVuY3Rpb24sIHJldHR5cGUsIHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsICJzdHJpbmciKQorKyAgIGlzIGxpa2UgX0dMX1dBUk5fT05fVVNFIChmdW5jdGlvbiwgInN0cmluZyIpLCBleGNlcHQgdGhhdCB0aGUgZnVuY3Rpb24gaXMKKysgICBkZWNsYXJlZCB3aXRoIHRoZSBnaXZlbiBwcm90b3R5cGUsIGNvbnNpc3Rpbmcgb2YgcmV0dXJuIHR5cGUsIHBhcmFtZXRlcnMsCisrICAgYW5kIGF0dHJpYnV0ZXMuCisrICAgVGhpcyB2YXJpYW50IGlzIHVzZWZ1bCBmb3Igb3ZlcmxvYWRlZCBmdW5jdGlvbnMgaW4gQysrLiBfR0xfV0FSTl9PTl9VU0UgZG9lcworKyAgIG5vdCB3b3JrIGluIHRoaXMgY2FzZS4gICovCisrI2lmbmRlZiBfR0xfV0FSTl9PTl9VU0VfQ1hYCisrIyBpZiA0IDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykKKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrZXh0ZXJuIHJldHR5cGUgZnVuY3Rpb24gcGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyBcCisrICAgICBfX2F0dHJpYnV0ZV9fICgoX193YXJuaW5nX18gKG1zZykpKQorKyMgZWxpZiBfX0dOVUNfXyA+PSAzICYmIEdOVUxJQl9TVFJJQ1RfQ0hFQ0tJTkcKKysvKiBWZXJpZnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgZnVuY3Rpb24uICAqLworKyMgIGRlZmluZSBfR0xfV0FSTl9PTl9VU0VfQ1hYKGZ1bmN0aW9uLHJldHR5cGUscGFyYW1ldGVyc19hbmRfYXR0cmlidXRlcyxtc2cpIFwKKytleHRlcm4gcmV0dHlwZSBmdW5jdGlvbiBwYXJhbWV0ZXJzX2FuZF9hdHRyaWJ1dGVzCisrIyBlbHNlIC8qIFVuc3VwcG9ydGVkLiAgKi8KKysjICBkZWZpbmUgX0dMX1dBUk5fT05fVVNFX0NYWChmdW5jdGlvbixyZXR0eXBlLHBhcmFtZXRlcnNfYW5kX2F0dHJpYnV0ZXMsbXNnKSBcCisrX0dMX1dBUk5fRVhURVJOX0MgaW50IF9nbF93YXJuX29uX3VzZQorKyMgZW5kaWYKKysjZW5kaWYKKysKKysvKiBfR0xfV0FSTl9FWFRFUk5fQyBkZWNsYXJhdGlvbjsKKysgICBwZXJmb3JtcyB0aGUgZGVjbGFyYXRpb24gd2l0aCBDIGxpbmthZ2UuICAqLworKyNpZm5kZWYgX0dMX1dBUk5fRVhURVJOX0MKKysjIGlmIGRlZmluZWQgX19jcGx1c3BsdXMKKysjICBkZWZpbmUgX0dMX1dBUk5fRVhURVJOX0MgZXh0ZXJuICJDIgorKyMgZWxzZQorKyMgIGRlZmluZSBfR0xfV0FSTl9FWFRFUk5fQyBleHRlcm4KKysjIGVuZGlmCisrI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2FsbG9jYXRvci5oIGxpYmljb252LTEuMTQvc3JjbGliL2FsbG9jYXRvci5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9hbGxvY2F0b3IuaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2FsbG9jYXRvci5oCTIwMTItMDEtMDggMDI6MDc6NDAuMDUwNDg0NDQ0IC0wODAwCitAQCAtNDUsMTEgKzQ1LDEwIEBAIHN0cnVjdCBhbGxvY2F0b3IKKyAgIC8qIENhbGwgRlJFRSB0byBmcmVlIG1lbW9yeSwgbGlrZSAnZnJlZScuICAqLworICAgdm9pZCAoKmZyZWUpICh2b2lkICopOworIAorLSAgLyogSWYgbm9ubnVsbCwgY2FsbCBESUUgKFNJWkUpIGlmIE1BTExPQyAoU0laRSkgb3IgUkVBTExPQyAoLi4uLAorLSAgICAgU0laRSkgZmFpbHMuICBESUUgc2hvdWxkIG5vdCByZXR1cm4uICBTSVpFIHNob3VsZCBlcXVhbCBTSVpFX01BWAorLSAgICAgaWYgc2l6ZV90IG92ZXJmbG93IHdhcyBkZXRlY3RlZCB3aGlsZSBjYWxjdWxhdGluZyBzaXplcyB0byBiZQorLSAgICAgcGFzc2VkIHRvIE1BTExPQyBvciBSRUFMTE9DLiAgKi8KKy0gIHZvaWQgKCpkaWUpIChzaXplX3QpOworKyAgLyogSWYgbm9ubnVsbCwgY2FsbCBESUUgaWYgTUFMTE9DIG9yIFJFQUxMT0MgZmFpbHMuICBESUUgc2hvdWxkIG5vdAorKyAgICAgcmV0dXJuLiAgRElFIGNhbiBiZSB1c2VkIGJ5IGNvZGUgdGhhdCBkZXRlY3RzIG1lbW9yeSBvdmVyZmxvdworKyAgICAgd2hpbGUgY2FsY3VsYXRpbmcgc2l6ZXMgdG8gYmUgcGFzc2VkIHRvIE1BTExPQyBvciBSRUFMTE9DLiAgKi8KKysgIHZvaWQgKCpkaWUpICh2b2lkKTsKKyB9OworIAorIC8qIEFuIGFsbG9jYXRvciB1c2luZyB0aGUgc3RkbGliIGZ1bmN0aW9ucyBhbmQgYSBudWxsIERJRSBmdW5jdGlvbi4gICovCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYworLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvY2Fub25pY2FsaXplLWxncGwuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2Nhbm9uaWNhbGl6ZS1sZ3BsLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4wOTQ0ODQ0NDYgLTA4MDAKK0BAIC0xMjUsNyArMTI1LDcgQEAgX19yZWFscGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqcmVzbworICNlbHNlCisgICBwYXRoX21heCA9IHBhdGhjb25mIChuYW1lLCBfUENfUEFUSF9NQVgpOworICAgaWYgKHBhdGhfbWF4IDw9IDApCistICAgIHBhdGhfbWF4ID0gODE5MjsKKysgICAgcGF0aF9tYXggPSAxMDI0OworICNlbmRpZgorIAorICAgaWYgKHJlc29sdmVkID09IE5VTEwpCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2NhcmVhZGxpbmthdC5jIGxpYmljb252LTEuMTQvc3JjbGliL2NhcmVhZGxpbmthdC5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9jYXJlYWRsaW5rYXQuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2NhcmVhZGxpbmthdC5jCTIwMTItMDEtMDggMDI6MDc6NDAuMTAyNDg0NDQ1IC0wODAwCitAQCAtMTMzLDcgKzEzMyw2IEBAIGNhcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmEKKyAgICAgICAgICAgaWYgKGJ1ZiA9PSBzdGFja19idWYpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgY2hhciAqYiA9IChjaGFyICopIGFsbG9jLT5hbGxvY2F0ZSAobGlua19zaXplKTsKKy0gICAgICAgICAgICAgIGJ1Zl9zaXplID0gbGlua19zaXplOworICAgICAgICAgICAgICAgaWYgKCEgYikKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICBtZW1jcHkgKGIsIGJ1ZiwgbGlua19zaXplKTsKK0BAIC0xNTcsMTEgKzE1Niw2IEBAIGNhcmVhZGxpbmthdCAoaW50IGZkLCBjaGFyIGNvbnN0ICpmaWxlbmEKKyAgICAgICAgIGJ1Zl9zaXplICo9IDI7CisgICAgICAgZWxzZSBpZiAoYnVmX3NpemUgPCBidWZfc2l6ZV9tYXgpCisgICAgICAgICBidWZfc2l6ZSA9IGJ1Zl9zaXplX21heDsKKy0gICAgICBlbHNlIGlmIChidWZfc2l6ZV9tYXggPCBTSVpFX01BWCkKKy0gICAgICAgIHsKKy0gICAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CistICAgICAgICAgIHJldHVybiBOVUxMOworLSAgICAgICAgfQorICAgICAgIGVsc2UKKyAgICAgICAgIGJyZWFrOworICAgICAgIGJ1ZiA9IChjaGFyICopIGFsbG9jLT5hbGxvY2F0ZSAoYnVmX3NpemUpOworQEAgLTE2OSw3ICsxNjMsNyBAQCBjYXJlYWRsaW5rYXQgKGludCBmZCwgY2hhciBjb25zdCAqZmlsZW5hCisgICB3aGlsZSAoYnVmKTsKKyAKKyAgIGlmIChhbGxvYy0+ZGllKQorLSAgICBhbGxvYy0+ZGllIChidWZfc2l6ZSk7CisrICAgIGFsbG9jLT5kaWUgKCk7CisgICBlcnJubyA9IEVOT01FTTsKKyAgIHJldHVybiBOVUxMOworIH0KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJybm8uaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJuby5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJuby5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJybm8uaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjEyMjQ4NDQ0NiAtMDgwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9FUlJOT19ICisrI2lmbmRlZiBfR0xfRVJSTk9fSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTI2LDggKzI2LDggQEAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI0BJTkNMVURFX05FWFRAIEBORVhUX0VSUk5PX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfRVJSTk9fSAorLSNkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0gKKysjaWZuZGVmIF9HTF9FUlJOT19ICisrI2RlZmluZSBfR0xfRVJSTk9fSAorIAorIAorIC8qIE9uIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcywgbWFueSBtYWNyb3MgYXJlIG5vdCBkZWZpbmVkLiAgKi8KK0BAIC0xNDcsMTYgKzE0Nyw2IEBACisgIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAgMQorICMgZW5kaWYKKyAKKy0jIGlmbmRlZiBFTkVUUkVTRVQKKy0jICBkZWZpbmUgRU5FVFJFU0VUIDIwMTEKKy0jICBkZWZpbmUgR05VTElCX2RlZmluZWRfRU5FVFJFU0VUIDEKKy0jIGVuZGlmCistCistIyBpZm5kZWYgRUNPTk5BQk9SVEVECistIyAgZGVmaW5lIEVDT05OQUJPUlRFRCAyMDEyCistIyAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX0VDT05OQUJPUlRFRCAxCistIyBlbmRpZgorLQorICMgaWZuZGVmIEVTVEFMRQorICMgIGRlZmluZSBFU1RBTEUgICAgMjAwOQorICMgIGRlZmluZSBHTlVMSUJfZGVmaW5lZF9FU1RBTEUgMQorQEAgLTE3Myw1ICsxNjMsNSBAQAorICMgZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0VSUk5PX0ggKi8KKysjZW5kaWYgLyogX0dMX0VSUk5PX0ggKi8KKysjZW5kaWYgLyogX0dMX0VSUk5PX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZXJyb3IuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9lcnJvci5jCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9lcnJvci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvZXJyb3IuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjEzNDQ4NDQ0OCAtMDgwMAorQEAgLTk3LDE1ICs5NywxMSBAQCBleHRlcm4gdm9pZCBfX2Vycm9yX2F0X2xpbmUgKGludCBzdGF0dXMsCisgLyogVGhlIGdudWxpYiBvdmVycmlkZSBvZiBmY250bCBpcyBub3QgbmVlZGVkIGluIHRoaXMgZmlsZS4gICovCisgIyB1bmRlZiBmY250bAorIAorLSMgaWYgIUhBVkVfREVDTF9TVFJFUlJPUl9SCisrIyBpZiAhSEFWRV9ERUNMX1NUUkVSUk9SX1IgJiYgU1RSRVJST1JfUl9DSEFSX1AKKyAjICBpZm5kZWYgSEFWRV9ERUNMX1NUUkVSUk9SX1IKKyAidGhpcyBjb25maWd1cmUtdGltZSBkZWNsYXJhdGlvbiB0ZXN0IHdhcyBub3QgcnVuIgorICMgIGVuZGlmCistIyAgaWYgU1RSRVJST1JfUl9DSEFSX1AKKyBjaGFyICpzdHJlcnJvcl9yICgpOworLSMgIGVsc2UKKy1pbnQgc3RyZXJyb3JfciAoKTsKKy0jICBlbmRpZgorICMgZW5kaWYKKyAKKyAvKiBUaGUgY2FsbGluZyBwcm9ncmFtIHNob3VsZCBkZWZpbmUgcHJvZ3JhbV9uYW1lIGFuZCBzZXQgaXQgdG8gdGhlCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL2ZjbnRsLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvZmNudGwuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvZmNudGwuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL2ZjbnRsLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4xNTQ0ODQ0NDkgLTA4MDAKK0BAIC00MCw3ICs0MCw3IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICisrI2lmbmRlZiBfR0xfRkNOVExfSAorIAorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBPbiBzb21lIHN5c3RlbXMgb3RoZXIgdGhhbiBnbGliYywgPHN5cy9zdGF0Lmg+IGlzIGEgcHJlcmVxdWlzaXRlIG9mCitAQCAtNTUsOCArNTUsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfRkNOVExfSEAKKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9GQ05UTF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfRkNOVExfSAorKyNpZm5kZWYgX0dMX0ZDTlRMX0gKKysjZGVmaW5lIF9HTF9GQ05UTF9ICisgCisgI2lmbmRlZiBfX0dMSUJDX18gLyogQXZvaWQgbmFtZXNwYWNlIHBvbGx1dGlvbiBvbiBnbGliYyBzeXN0ZW1zLiAgKi8KKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorQEAgLTMyMCw2ICszMjAsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKG9wZW5hdCwgIm9wZW5hdCBpcyBub3QKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX0ZDTlRMX0ggKi8KKysjZW5kaWYgLyogX0dMX0ZDTlRMX0ggKi8KKysjZW5kaWYgLyogX0dMX0ZDTlRMX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvaW50cHJvcHMuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9pbnRwcm9wcy5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9pbnRwcm9wcy5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvaW50cHJvcHMuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjE3NDQ4NDQ1MCAtMDgwMAorQEAgLTIyLDEzICsyMiwxNCBAQAorIAorICNpbmNsdWRlIDxsaW1pdHMuaD4KKyAKKy0vKiBSZXR1cm4gYW4gaW50ZWdlciB2YWx1ZSwgY29udmVydGVkIHRvIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGludGVnZXIKKy0gICBleHByZXNzaW9uIEUgYWZ0ZXIgaW50ZWdlciB0eXBlIHByb21vdGlvbi4gIFYgaXMgdGhlIHVuY29udmVydGVkIHZhbHVlLiAgKi8KKy0jZGVmaW5lIF9HTF9JTlRfQ09OVkVSVChlLCB2KSAoMCAqIChlKSArICh2KSkKKysvKiBSZXR1cm4gYSBpbnRlZ2VyIHZhbHVlLCBjb252ZXJ0ZWQgdG8gdGhlIHNhbWUgdHlwZSBhcyB0aGUgaW50ZWdlcgorKyAgIGV4cHJlc3Npb24gRSBhZnRlciBpbnRlZ2VyIHR5cGUgcHJvbW90aW9uLiAgViBpcyB0aGUgdW5jb252ZXJ0ZWQgdmFsdWUuCisrICAgRSBzaG91bGQgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiAgKi8KKysjZGVmaW5lIF9HTF9JTlRfQ09OVkVSVChlLCB2KSAoKGUpIC0gKGUpICsgKHYpKQorIAorIC8qIEFjdCBsaWtlIF9HTF9JTlRfQ09OVkVSVCAoRSwgLVYpIGJ1dCB3b3JrIGFyb3VuZCBhIGJ1ZyBpbiBJUklYIDYuNSBjYzsgc2VlCisgICAgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctZ251bGliLzIwMTEtMDUvbXNnMDA0MDYuaHRtbD4uICAqLworLSNkZWZpbmUgX0dMX0lOVF9ORUdBVEVfQ09OVkVSVChlLCB2KSAoMCAqIChlKSAtICh2KSkKKysjZGVmaW5lIF9HTF9JTlRfTkVHQVRFX0NPTlZFUlQoZSwgdikgKChlKSAtIChlKSAtICh2KSkKKyAKKyAvKiBUaGUgZXh0cmEgY2FzdHMgaW4gdGhlIGZvbGxvd2luZyBtYWNyb3Mgd29yayBhcm91bmQgY29tcGlsZXIgYnVncywKKyAgICBlLmcuLCBpbiBDcmF5IEMgNS4wLjMuMC4gICovCitAQCAtNTIsNyArNTMsNyBAQAorICNkZWZpbmUgVFlQRV9TSUdORUQodCkgKCEgKCh0KSAwIDwgKHQpIC0xKSkKKyAKKyAvKiBSZXR1cm4gMSBpZiB0aGUgaW50ZWdlciBleHByZXNzaW9uIEUsIGFmdGVyIGludGVnZXIgcHJvbW90aW9uLCBoYXMKKy0gICBhIHNpZ25lZCB0eXBlLiAgKi8KKysgICBhIHNpZ25lZCB0eXBlLiAgRSBzaG91bGQgbm90IGhhdmUgc2lkZSBlZmZlY3RzLiAgKi8KKyAjZGVmaW5lIF9HTF9JTlRfU0lHTkVEKGUpIChfR0xfSU5UX05FR0FURV9DT05WRVJUIChlLCAxKSA8IDApCisgCisgCitAQCAtMzEwLDEwICszMTEsMTMgQEAKKyAvKiBSZXR1cm4gMSBpZiB0aGUgZXhwcmVzc2lvbiBBIDxvcD4gQiB3b3VsZCBvdmVyZmxvdywKKyAgICB3aGVyZSBPUF9SRVNVTFRfT1ZFUkZMT1cgKEEsIEIsIE1JTiwgTUFYKSBkb2VzIHRoZSBhY3R1YWwgdGVzdCwKKyAgICBhc3N1bWluZyBNSU4gYW5kIE1BWCBhcmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gZm9yIHRoZSByZXN1bHQgdHlwZS4KKy0gICBBcmd1bWVudHMgc2hvdWxkIGJlIGZyZWUgb2Ygc2lkZSBlZmZlY3RzLiAgKi8KKysKKysgICBUaGlzIG1hY3JvIGFzc3VtZXMgdGhhdCBBIHwgQiBpcyBhIHZhbGlkIGludGVnZXIgaWYgYm90aCBBIGFuZCBCIGFyZSwKKysgICB3aGljaCBpcyB0cnVlIG9mIGFsbCBrbm93biBwcmFjdGljYWwgaG9zdHMuICBJZiB0aGlzIGlzIGEgcHJvYmxlbQorKyAgIGZvciB5b3UsIHBsZWFzZSBsZXQgdXMga25vdyBob3cgdG8gZml4IGl0IGZvciB5b3VyIGhvc3QuICAqLworICNkZWZpbmUgX0dMX0JJTkFSWV9PUF9PVkVSRkxPVyhhLCBiLCBvcF9yZXN1bHRfb3ZlcmZsb3cpICAgICAgICBcCisgICBvcF9yZXN1bHRfb3ZlcmZsb3cgKGEsIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAgICAgX0dMX0lOVF9NSU5JTVVNICgwICogKGIpICsgKGEpKSwgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01BWElNVU0gKDAgKiAoYikgKyAoYSkpKQorKyAgICAgICAgICAgICAgICAgICAgICBfR0xfSU5UX01JTklNVU0gKChhKSB8IChiKSksICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgIF9HTF9JTlRfTUFYSU1VTSAoKGEpIHwgKGIpKSkKKyAKKyAjZW5kaWYgLyogX0dMX0lOVFBST1BTX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvTWFrZWZpbGUuZ251bGliIGxpYmljb252LTEuMTQvc3JjbGliL01ha2VmaWxlLmdudWxpYgorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvTWFrZWZpbGUuZ251bGliCTIwMTItMDEtMDggMDI6MDU6MTguNzU0NDc3NjA2IC0wODAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvTWFrZWZpbGUuZ251bGliCTIwMTItMDEtMDggMDI6MDc6NDMuMTM4NDg0NTkyIC0wODAwCitAQCAtOSw3ICs5LDcgQEAKKyAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyBhcyB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisgIworICMgR2VuZXJhdGVkIGJ5IGdudWxpYi10b29sLgorLSMgUmVwcm9kdWNlIGJ5OiBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tY29uZGl0aW9uYWwtZGVwZW5kZW5jaWVzIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisrIyBSZXByb2R1Y2UgYnk6IGdudWxpYi10b29sIC0taW1wb3J0IC0tZGlyPS4gLS1sb2NhbC1kaXI9Z251bGliLWxvY2FsIC0tbGliPWxpYmljcnQgLS1zb3VyY2UtYmFzZT1zcmNsaWIgLS1tNC1iYXNlPXNyY200IC0tZG9jLWJhc2U9ZG9jIC0tdGVzdHMtYmFzZT10ZXN0cyAtLWF1eC1kaXI9YnVpbGQtYXV4IC0tbWFrZWZpbGUtbmFtZT1NYWtlZmlsZS5nbnVsaWIgLS1uby1saWJ0b29sIC0tbWFjcm8tcHJlZml4PWdsIC0tbm8tdmMtZmlsZXMgYmluYXJ5LWlvIGVycm9yIGdldHRleHQgZ2V0dGV4dC1oIGxpYmljb252LW1pc2MgbWJzdGF0ZSBtZW1tb3ZlIHByb2duYW1lIHJlbG9jYXRhYmxlIHJlbG9jYXRhYmxlLXByb2cgc2FmZS1yZWFkIHNpZ3BpcGUgc3RkaW8gc3RkbGliIHN0cmVycm9yIHVuaXN0ZCB1bml3aWR0aC93aWR0aCB1bmxvY2tlZC1pbyB4YWxsb2MKKyAKKyAKKyBNT1NUTFlDTEVBTkZJTEVTICs9IGNvcmUgKi5zdGFja2R1bXAKK0BAIC02MCwxMiArNjAsNjAgQEAgRVhUUkFfRElTVCArPSBhcmVhZGxpbmsuaAorIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYXJlYWRsaW5rCisgCisrIyMgYmVnaW4gZ251bGliIG1vZHVsZSBhcmctbm9ubnVsbAorKworKyMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorKyMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKysjICdhbGwnIGRlZmluZWQgYWJvdmUuCisrCisrQlVJTFRfU09VUkNFUyArPSBhcmctbm9ubnVsbC5oCisrIyBUaGUgYXJnLW5vbm51bGwuaCB0aGF0IGdldHMgaW5zZXJ0ZWQgaW50byBnZW5lcmF0ZWQgLmggZmlsZXMgaXMgdGhlIHNhbWUgYXMKKysjIGJ1aWxkLWF1eC9hcmctbm9ubnVsbC5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKythcmctbm9ubnVsbC5oOiAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCisrCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisrCXNlZCAtbiAtZSAnL0dMX0FSR19OT05OVUxMLywkJHAnIFwKKysJICA8ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2FyZy1ub25udWxsLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IGFyZy1ub25udWxsLmggYXJnLW5vbm51bGwuaC10CisrCisrQVJHX05PTk5VTExfSD1hcmctbm9ubnVsbC5oCisrCisrRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9hcmctbm9ubnVsbC5oCisrCisrIyMgZW5kICAgZ251bGliIG1vZHVsZSBhcmctbm9ubnVsbAorKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYmluYXJ5LWlvCisgCisgbGliaWNydF9hX1NPVVJDRVMgKz0gYmluYXJ5LWlvLmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIGJpbmFyeS1pbworIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgYysrZGVmcworKworKyMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorKyMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorKyMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKysjICdhbGwnIGRlZmluZWQgYWJvdmUuCisrCisrQlVJTFRfU09VUkNFUyArPSBjKytkZWZzLmgKKysjIFRoZSBjKytkZWZzLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCisrIyBidWlsZC1hdXgvYysrZGVmcy5oLCBleGNlcHQgdGhhdCBpdCBoYXMgdGhlIGNvcHlyaWdodCBoZWFkZXIgY3V0IG9mZi4KKytjKytkZWZzLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2MrK2RlZnMuaAorKwkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorKwlzZWQgLW4gLWUgJy9fR0xfQ1hYREVGUy8sJCRwJyBcCisrCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9jKytkZWZzLmggXAorKwkgID4gJEAtdCAmJiBcCisrCW12ICRALXQgJEAKKytNT1NUTFlDTEVBTkZJTEVTICs9IGMrK2RlZnMuaCBjKytkZWZzLmgtdAorKworK0NYWERFRlNfSD1jKytkZWZzLmgKKysKKytFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2MrK2RlZnMuaAorKworKyMjIGVuZCAgIGdudWxpYiBtb2R1bGUgYysrZGVmcworKworICMjIGJlZ2luIGdudWxpYiBtb2R1bGUgY2Fub25pY2FsaXplLWxncGwKKyAKKyAKK0BAIC0xMDAsOCArMTQ4LDcgQEAgaWYgR0xfR0VORVJBVEVfRVJSTk9fSAorIGVycm5vLmg6IGVycm5vLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX0VSUk5PX0gnJ0B8JChORVhUX0VSUk5PX0gpfGcnIFwKK0BAIC0xNDIsMTUgKzE4OSwxNCBAQCBCVUlMVF9TT1VSQ0VTICs9IGZjbnRsLmgKKyBmY250bC5oOiBmY250bC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9GQ05UTF9IJydAfCQoTkVYVF9GQ05UTF9IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GQ05UTCcnQC8kKEdOVUxJQl9GQ05UTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTk9OQkxPQ0tJTkcnJ0AvJChHTlVMSUJfTk9OQkxPQ0tJTkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09QRU4nJ0AvJChHTlVMSUJfT1BFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfT1BFTkFUJydALyQoR05VTElCX09QRU5BVCkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNOVEwnJ0B8JChHTlVMSUJfRkNOVEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX05PTkJMT0NLSU5HJydAfCQoR05VTElCX05PTkJMT0NLSU5HKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PUEVOJydAfCQoR05VTElCX09QRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX09QRU5BVCcnQHwkKEdOVUxJQl9PUEVOQVQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9GQ05UTCcnQHwkKEhBVkVfRkNOVEwpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9PUEVOQVQnJ0B8JChIQVZFX09QRU5BVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydSRVBMQUNFX0ZDTlRMJydAfCQoUkVQTEFDRV9GQ05UTCl8ZycgXAorQEAgLTI5Nyw3ICszNDMsNyBAQCBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2NvCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSByZWxvY2F0YWJsZS1wcm9nLXdyYXBwZXIKKyAKKyAKKy1FWFRSQV9ESVNUICs9IGFsbG9jYXRvci5jIGFsbG9jYXRvci5oIGFyZWFkbGluay5jIGFyZWFkbGluay5oIGMtY3R5cGUuYyBjLWN0eXBlLmggY2Fub25pY2FsaXplLWxncGwuYyBjYXJlYWRsaW5rYXQuYyBjYXJlYWRsaW5rYXQuaCBtYWxsb2NhLmMgbWFsbG9jYS5oIHByb2duYW1lLmMgcHJvZ25hbWUuaCBwcm9ncmVsb2MuYyByZWFkbGluay5jIHJlbG9jYXRhYmxlLmMgcmVsb2NhdGFibGUuaCByZWxvY3dyYXBwZXIuYyBzZXRlbnYuYworK0VYVFJBX0RJU1QgKz0gYWxsb2NhdG9yLmMgYWxsb2NhdG9yLmggYXJlYWRsaW5rLmMgYXJlYWRsaW5rLmggYy1jdHlwZS5jIGMtY3R5cGUuaCBjYW5vbmljYWxpemUtbGdwbC5jIGNhcmVhZGxpbmthdC5jIGNhcmVhZGxpbmthdC5oIG1hbGxvY2EuYyBtYWxsb2NhLmggcHJvZ25hbWUuYyBwcm9nbmFtZS5oIHByb2dyZWxvYy5jIHJlYWRsaW5rLmMgcmVsb2NhdGFibGUuYyByZWxvY2F0YWJsZS5oIHJlbG9jd3JhcHBlci5jIHNldGVudi5jIHN0cmVycm9yLmMKKyAKKyBFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L2luc3RhbGwtcmVsb2MKKyAKK0BAIC0zMDUsOSArMzUxLDEwIEBAIEVYVFJBX0RJU1QgKz0gJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvaW4KKyAKKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNhZmUtcmVhZAorIAorLWxpYmljcnRfYV9TT1VSQ0VTICs9IHNhZmUtcmVhZC5jCisgCistRVhUUkFfRElTVCArPSBzYWZlLXJlYWQuaAorK0VYVFJBX0RJU1QgKz0gc2FmZS1yZWFkLmMgc2FmZS1yZWFkLmgKKysKKytFWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzYWZlLXJlYWQuYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2FmZS1yZWFkCisgCitAQCAtMzIwLDI0ICszNjcsMjAgQEAgQlVJTFRfU09VUkNFUyArPSBzaWduYWwuaAorIHNpZ25hbC5oOiBzaWduYWwuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TSUdOQUxfSCcnQHwkKE5FWFRfU0lHTkFMX0gpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnR05VTElCX1BUSFJFQURfU0lHTUFTSycnQHwkKEdOVUxJQl9QVEhSRUFEX1NJR01BU0spfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR05BTF9IX1NJR1BJUEUnJ0AvJChHTlVMSUJfU0lHTkFMX0hfU0lHUElQRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU0lHUFJPQ01BU0snJ0AvJChHTlVMSUJfU0lHUFJPQ01BU0spL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NJR0FDVElPTicnQC8kKEdOVUxJQl9TSUdBQ1RJT04pL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR05BTF9IX1NJR1BJUEUnJ0B8JChHTlVMSUJfU0lHTkFMX0hfU0lHUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0lHUFJPQ01BU0snJ0B8JChHTlVMSUJfU0lHUFJPQ01BU0spfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NJR0FDVElPTicnQHwkKEdOVUxJQl9TSUdBQ1RJT04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORycnQHwkKEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcpfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSEFWRV9QVEhSRUFEX1NJR01BU0snJ0B8JChIQVZFX1BUSFJFQURfU0lHTUFTSyl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR1NFVF9UJydAfCQoSEFWRV9TSUdTRVRfVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NJR0lORk9fVCcnQHwkKEhBVkVfU0lHSU5GT19UKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfU0lHQUNUSU9OJydAfCQoSEFWRV9TSUdBQ1RJT04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTicnQHwkKEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9UWVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVCcnQHwkKEhBVkVfVFlQRV9WT0xBVElMRV9TSUdfQVRPTUlDX1QpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9TSUdIQU5ETEVSX1QnJ0B8JChIQVZFX1NJR0hBTkRMRVJfVCl8ZycgXAorLQkgICAgICAtZSAnc3xAJydSRVBMQUNFX1BUSFJFQURfU0lHTUFTSycnQHwkKFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLKXxnJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTC9yICQoQ1hYREVGU19IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX0FSR19OT05OVUxML3IgJChBUkdfTk9OTlVMTF9IKScgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFL3IgJChXQVJOX09OX1VTRV9IKScgXAorQEAgLTM2OCw4NyArNDExLDYgQEAgRVhUUkFfbGliaWNydF9hX1NPVVJDRVMgKz0gc2lncHJvY21hc2suYworIAorICMjIGVuZCAgIGdudWxpYiBtb2R1bGUgc2lncHJvY21hc2sKKyAKKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuCistCistIyBCZWNhdXNlIHRoaXMgTWFrZWZpbGUgc25pcHBldCBkZWZpbmVzIGEgdmFyaWFibGUgdXNlZCBieSBvdGhlcgorLSMgZ251bGliIE1ha2VmaWxlIHNuaXBwZXRzLCBpdCBtdXN0IGJlIHByZXNlbnQgaW4gYWxsIE1ha2VmaWxlLmFtIHRoYXQKKy0jIG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eSAnYWxsJyBkZWZpbmVkIGFib3ZlLgorLQorLV9OT1JFVFVSTl9IPSQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0KKy1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvX05vcmV0dXJuLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuCistCistIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzbmlwcGV0L2FyZy1ub25udWxsCistCistIyBUaGUgQlVJTFRfU09VUkNFUyBjcmVhdGVkIGJ5IHRoaXMgTWFrZWZpbGUgc25pcHBldCBhcmUgbm90IHVzZWQgdmlhICNpbmNsdWRlCistIyBzdGF0ZW1lbnRzIGJ1dCB0aHJvdWdoIGRpcmVjdCBmaWxlIHJlZmVyZW5jZS4gVGhlcmVmb3JlIHRoaXMgc25pcHBldCBtdXN0IGJlCistIyBwcmVzZW50IGluIGFsbCBNYWtlZmlsZS5hbSB0aGF0IG5lZWQgaXQuIFRoaXMgaXMgZW5zdXJlZCBieSB0aGUgYXBwbGljYWJpbGl0eQorLSMgJ2FsbCcgZGVmaW5lZCBhYm92ZS4KKy0KKy1CVUlMVF9TT1VSQ0VTICs9IGFyZy1ub25udWxsLmgKKy0jIFRoZSBhcmctbm9ubnVsbC5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dAorLSMgb2ZmLgorLWFyZy1ub25udWxsLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYXJnLW5vbm51bGwuaAorLQkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorLQlzZWQgLW4gLWUgJy9HTF9BUkdfTk9OTlVMTC8sJCRwJyBcCistCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmggXAorLQkgID4gJEAtdCAmJiBcCistCW12ICRALXQgJEAKKy1NT1NUTFlDTEVBTkZJTEVTICs9IGFyZy1ub25udWxsLmggYXJnLW5vbm51bGwuaC10CistCistQVJHX05PTk5VTExfSD1hcmctbm9ubnVsbC5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L2FyZy1ub25udWxsLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGwKKy0KKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvYysrZGVmcworLQorLSMgVGhlIEJVSUxUX1NPVVJDRVMgY3JlYXRlZCBieSB0aGlzIE1ha2VmaWxlIHNuaXBwZXQgYXJlIG5vdCB1c2VkIHZpYSAjaW5jbHVkZQorLSMgc3RhdGVtZW50cyBidXQgdGhyb3VnaCBkaXJlY3QgZmlsZSByZWZlcmVuY2UuIFRoZXJlZm9yZSB0aGlzIHNuaXBwZXQgbXVzdCBiZQorLSMgcHJlc2VudCBpbiBhbGwgTWFrZWZpbGUuYW0gdGhhdCBuZWVkIGl0LiBUaGlzIGlzIGVuc3VyZWQgYnkgdGhlIGFwcGxpY2FiaWxpdHkKKy0jICdhbGwnIGRlZmluZWQgYWJvdmUuCistCistQlVJTFRfU09VUkNFUyArPSBjKytkZWZzLmgKKy0jIFRoZSBjKytkZWZzLmggdGhhdCBnZXRzIGluc2VydGVkIGludG8gZ2VuZXJhdGVkIC5oIGZpbGVzIGlzIHRoZSBzYW1lIGFzCistIyBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorLWMrK2RlZnMuaDogJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKy0JJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKy0Jc2VkIC1uIC1lICcvX0dMX0NYWERFRlMvLCQkcCcgXAorLQkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmggXAorLQkgID4gJEAtdCAmJiBcCistCW12ICRALXQgJEAKKy1NT1NUTFlDTEVBTkZJTEVTICs9IGMrK2RlZnMuaCBjKytkZWZzLmgtdAorLQorLUNYWERFRlNfSD1jKytkZWZzLmgKKy0KKy1FWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvYysrZGVmcy5oCistCistIyMgZW5kICAgZ251bGliIG1vZHVsZSBzbmlwcGV0L2MrK2RlZnMKKy0KKy0jIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2UKKy0KKy1CVUlMVF9TT1VSQ0VTICs9IHdhcm4tb24tdXNlLmgKKy0jIFRoZSB3YXJuLW9uLXVzZS5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworLSMgYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaCwgZXhjZXB0IHRoYXQgaXQgaGFzIHRoZSBjb3B5cmlnaHQgaGVhZGVyIGN1dAorLSMgb2ZmLgorLXdhcm4tb24tdXNlLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3NuaXBwZXQvd2Fybi1vbi11c2UuaAorLQkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorLQlzZWQgLW4gLWUgJy9eLmlmbmRlZi8sJCRwJyBcCistCSAgPCAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmggXAorLQkgID4gJEAtdCAmJiBcCistCW12ICRALXQgJEAKKy1NT1NUTFlDTEVBTkZJTEVTICs9IHdhcm4tb24tdXNlLmggd2Fybi1vbi11c2UuaC10CistCistV0FSTl9PTl9VU0VfSD13YXJuLW9uLXVzZS5oCistCistRVhUUkFfRElTVCArPSAkKHRvcF9zcmNkaXIpL2J1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2UKKy0KKyAjIyBiZWdpbiBnbnVsaWIgbW9kdWxlIHN0YXQKKyAKKyAKK0BAIC00OTEsOCArNDUzLDcgQEAgaWYgR0xfR0VORVJBVEVfU1REREVGX0gKKyBzdGRkZWYuaDogc3RkZGVmLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJyAmJiBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1NURERFRl9IJydAfCQoTkVYVF9TVERERUZfSCl8ZycgXAorQEAgLTUyMSw4ICs0ODIsNyBAQCBpZiBHTF9HRU5FUkFURV9TVERJTlRfSAorIHN0ZGludC5oOiBzdGRpbnQuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nOyBcCistCSAgc2VkIC1lICdzfEAnJ0dVQVJEX1BSRUZJWCcnQHxHTHxnJyBcCistCSAgICAgIC1lICdzL0AnJ0hBVkVfU1RESU5UX0gnJ0AvJChIQVZFX1NURElOVF9IKS9nJyBcCisrCSAgc2VkIC1lICdzL0AnJ0hBVkVfU1RESU5UX0gnJ0AvJChIQVZFX1NURElOVF9IKS9nJyBcCisgCSAgICAgIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCitAQCAtNTcwLDYzICs1MzAsNjIgQEAgQlVJTFRfU09VUkNFUyArPSBzdGRpby5oCisgc3RkaW8uaDogc3RkaW8uaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERJT19IJydAfCQoTkVYVF9TVERJT19IKXxnJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EUFJJTlRGJydALyQoR05VTElCX0RQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDTE9TRScnQC8kKEdOVUxJQl9GQ0xPU0UpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGTFVTSCcnQC8kKEdOVUxJQl9GRkxVU0gpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZHRVRDJydALyQoR05VTElCX0ZHRVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GR0VUUycnQC8kKEdOVUxJQl9GR0VUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRk9QRU4nJ0AvJChHTlVMSUJfRk9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZQUklOVEYnJ0AvJChHTlVMSUJfRlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9GUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVSR0UnJ0AvJChHTlVMSUJfRlBVUkdFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUFVUQycnQC8kKEdOVUxJQl9GUFVUQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlBVVFMnJ0AvJChHTlVMSUJfRlBVVFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZSRUFEJydALyQoR05VTElCX0ZSRUFEKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GUkVPUEVOJydALyQoR05VTElCX0ZSRU9QRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTQ0FORicnQC8kKEdOVUxJQl9GU0NBTkYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTRUVLJydALyQoR05VTElCX0ZTRUVLKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU0VFS08nJ0AvJChHTlVMSUJfRlNFRUtPKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GVEVMTCcnQC8kKEdOVUxJQl9GVEVMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRFTExPJydALyQoR05VTElCX0ZURUxMTykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRldSSVRFJydALyQoR05VTElCX0ZXUklURSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQycnQC8kKEdOVUxJQl9HRVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRDSEFSJydALyQoR05VTElCX0dFVENIQVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVERFTElNJydALyQoR05VTElCX0dFVERFTElNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMSU5FJydALyQoR05VTElCX0dFVExJTkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFMnJ0AvJChHTlVMSUJfR0VUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfT0JTVEFDS19QUklOVEYnJ0AvJChHTlVMSUJfT0JTVEFDS19QUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYJydALyQoR05VTElCX09CU1RBQ0tfUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QRVJST1InJ0AvJChHTlVMSUJfUEVSUk9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QT1BFTicnQC8kKEdOVUxJQl9QT1BFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFJJTlRGJydALyQoR05VTElCX1BSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFJJTlRGX1BPU0lYJydALyQoR05VTElCX1BSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFVUQycnQC8kKEdOVUxJQl9QVVRDKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRDSEFSJydALyQoR05VTElCX1BVVENIQVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BVVFMnJ0AvJChHTlVMSUJfUFVUUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVNT1ZFJydALyQoR05VTElCX1JFTU9WRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVOQU1FJydALyQoR05VTElCX1JFTkFNRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVOQU1FQVQnJ0AvJChHTlVMSUJfUkVOQU1FQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NDQU5GJydALyQoR05VTElCX1NDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TTlBSSU5URicnQC8kKEdOVUxJQl9TTlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1BSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9TUFJJTlRGX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVERJT19IX05PTkJMT0NLSU5HJydALyQoR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NURElPX0hfU0lHUElQRScnQC8kKEdOVUxJQl9TVERJT19IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RNUEZJTEUnJ0AvJChHTlVMSUJfVE1QRklMRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkFTUFJJTlRGJydALyQoR05VTElCX1ZBU1BSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkRQUklOVEYnJ0AvJChHTlVMSUJfVkRQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZGUFJJTlRGJydALyQoR05VTElCX1ZGUFJJTlRGKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WRlBSSU5URl9QT1NJWCcnQC8kKEdOVUxJQl9WRlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVkZTQ0FORicnQC8kKEdOVUxJQl9WRlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WU0NBTkYnJ0AvJChHTlVMSUJfVlNDQU5GKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9WUFJJTlRGJydALyQoR05VTElCX1ZQUklOVEYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1ZQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVlBSSU5URl9QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNOUFJJTlRGJydALyQoR05VTElCX1ZTTlBSSU5URikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVlNQUklOVEZfUE9TSVgnJ0AvJChHTlVMSUJfVlNQUklOVEZfUE9TSVgpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0RQUklOVEYnJ0B8JChHTlVMSUJfRFBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkNMT1NFJydAfCQoR05VTElCX0ZDTE9TRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkZMVVNIJydAfCQoR05VTElCX0ZGTFVTSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRkdFVEMnJ0B8JChHTlVMSUJfRkdFVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZHRVRTJydAfCQoR05VTElCX0ZHRVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GT1BFTicnQHwkKEdOVUxJQl9GT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlBSSU5URicnQHwkKEdOVUxJQl9GUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX0ZQUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQVVJHRScnQHwkKEdOVUxJQl9GUFVSR0UpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZQVVRDJydAfCQoR05VTElCX0ZQVVRDKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GUFVUUycnQHwkKEdOVUxJQl9GUFVUUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlJFQUQnJ0B8JChHTlVMSUJfRlJFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZSRU9QRU4nJ0B8JChHTlVMSUJfRlJFT1BFTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNDQU5GJydAfCQoR05VTElCX0ZTQ0FORil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlNFRUsnJ0B8JChHTlVMSUJfRlNFRUspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZTRUVLTycnQHwkKEdOVUxJQl9GU0VFS08pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZURUxMJydAfCQoR05VTElCX0ZURUxMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GVEVMTE8nJ0B8JChHTlVMSUJfRlRFTExPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GV1JJVEUnJ0B8JChHTlVMSUJfRldSSVRFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRDJydAfCQoR05VTElCX0dFVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVENIQVInJ0B8JChHTlVMSUJfR0VUQ0hBUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUREVMSU0nJ0B8JChHTlVMSUJfR0VUREVMSU0pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVExJTkUnJ0B8JChHTlVMSUJfR0VUTElORSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUUycnQHwkKEdOVUxJQl9HRVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9PQlNUQUNLX1BSSU5URicnQHwkKEdOVUxJQl9PQlNUQUNLX1BSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfT0JTVEFDS19QUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BFUlJPUicnQHwkKEdOVUxJQl9QRVJST1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BPUEVOJydAfCQoR05VTElCX1BPUEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QUklOVEYnJ0B8JChHTlVMSUJfUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QUklOVEZfUE9TSVgnJ0B8JChHTlVMSUJfUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRDJydAfCQoR05VTElCX1BVVEMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BVVENIQVInJ0B8JChHTlVMSUJfUFVUQ0hBUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFVUUycnQHwkKEdOVUxJQl9QVVRTKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRU1PVkUnJ0B8JChHTlVMSUJfUkVNT1ZFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRU5BTUUnJ0B8JChHTlVMSUJfUkVOQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRU5BTUVBVCcnQHwkKEdOVUxJQl9SRU5BTUVBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU0NBTkYnJ0B8JChHTlVMSUJfU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NOUFJJTlRGJydAfCQoR05VTElCX1NOUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1NQUklOVEZfUE9TSVgpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NURElPX0hfTk9OQkxPQ0tJTkcnJ0B8JChHTlVMSUJfU1RESU9fSF9OT05CTE9DS0lORyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RESU9fSF9TSUdQSVBFJydAfCQoR05VTElCX1NURElPX0hfU0lHUElQRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVE1QRklMRScnQHwkKEdOVUxJQl9UTVBGSUxFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WQVNQUklOVEYnJ0B8JChHTlVMSUJfVkFTUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRFBSSU5URicnQHwkKEdOVUxJQl9WRFBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVkZQUklOVEYnJ0B8JChHTlVMSUJfVkZQUklOVEYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZGUFJJTlRGX1BPU0lYJydAfCQoR05VTElCX1ZGUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WRlNDQU5GJydAfCQoR05VTElCX1ZGU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZTQ0FORicnQHwkKEdOVUxJQl9WU0NBTkYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1ZQUklOVEYnJ0B8JChHTlVMSUJfVlBSSU5URil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVlBSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WUFJJTlRGX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU05QUklOVEYnJ0B8JChHTlVMSUJfVlNOUFJJTlRGKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9WU1BSSU5URl9QT1NJWCcnQHwkKEdOVUxJQl9WU1BSSU5URl9QT1NJWCl8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS9zdGRpby5pbi5oIHwgXAorIAkgIHNlZCAtZSAnc3xAJydIQVZFX0RFQ0xfRlBVUkdFJydAfCQoSEFWRV9ERUNMX0ZQVVJHRSl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfRlNFRUtPJydAfCQoSEFWRV9ERUNMX0ZTRUVLTyl8ZycgXAorQEAgLTY5MSw0MyArNjUwLDQxIEBAIEJVSUxUX1NPVVJDRVMgKz0gc3RkbGliLmgKKyAKKyAjIFdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbiBvcmRlciB0byBjcmVhdGUgPHN0ZGxpYi5oPiB3aGVuIHRoZSBzeXN0ZW0KKyAjIGRvZXNuJ3QgaGF2ZSBvbmUgdGhhdCB3b3JrcyB3aXRoIHRoZSBnaXZlbiBjb21waWxlci4KKy1zdGRsaWIuaDogc3RkbGliLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpIFwKKy0gICQoX05PUkVUVVJOX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorK3N0ZGxpYi5oOiBzdGRsaWIuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVERMSUJfSCcnQHwkKE5FWFRfU1RETElCX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX19FWElUJydALyQoR05VTElCX19FWElUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9BVE9MTCcnQC8kKEdOVUxJQl9BVE9MTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0FMTE9DX1BPU0lYJydALyQoR05VTElCX0NBTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQC8kKEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0FEQVZHJydALyQoR05VTElCX0dFVExPQURBVkcpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVFNVQk9QVCcnQC8kKEdOVUxJQl9HRVRTVUJPUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dSQU5UUFQnJ0AvJChHTlVMSUJfR1JBTlRQVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUFMTE9DX1BPU0lYJydALyQoR05VTElCX01BTExPQ19QT1NJWCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJUT1dDJydALyQoR05VTElCX01CVE9XQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtEVEVNUCcnQC8kKEdOVUxJQl9NS0RURU1QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS09TVEVNUCcnQC8kKEdOVUxJQl9NS09TVEVNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtPU1RFTVBTJydALyQoR05VTElCX01LT1NURU1QUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtTVEVNUCcnQC8kKEdOVUxJQl9NS1NURU1QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS1NURU1QUycnQC8kKEdOVUxJQl9NS1NURU1QUykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFRTTkFNRScnQC8kKEdOVUxJQl9QVFNOQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QVVRFTlYnJ0AvJChHTlVMSUJfUFVURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQU5ET01fUicnQC8kKEdOVUxJQl9SQU5ET01fUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBTExPQ19QT1NJWCcnQC8kKEdOVUxJQl9SRUFMTE9DX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SRUFMUEFUSCcnQC8kKEdOVUxJQl9SRUFMUEFUSCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUlBNQVRDSCcnQC8kKEdOVUxJQl9SUE1BVENIKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TRVRFTlYnJ0AvJChHTlVMSUJfU0VURU5WKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0QnJ0AvJChHTlVMSUJfU1RSVE9EKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0xMJydALyQoR05VTElCX1NUUlRPTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlRPVUxMJydALyQoR05VTElCX1NUUlRPVUxMKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWVNURU1fUE9TSVgnJ0AvJChHTlVMSUJfU1lTVEVNX1BPU0lYKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTkxPQ0tQVCcnQC8kKEdOVUxJQl9VTkxPQ0tQVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfVU5TRVRFTlYnJ0AvJChHTlVMSUJfVU5TRVRFTlYpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1dDVE9NQicnQC8kKEdOVUxJQl9XQ1RPTUIpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX19FWElUJydAfCQoR05VTElCX19FWElUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9BVE9MTCcnQHwkKEdOVUxJQl9BVE9MTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0FMTE9DX1BPU0lYJydAfCQoR05VTElCX0NBTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRScnQHwkKEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMT0FEQVZHJydAfCQoR05VTElCX0dFVExPQURBVkcpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVFNVQk9QVCcnQHwkKEdOVUxJQl9HRVRTVUJPUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dSQU5UUFQnJ0B8JChHTlVMSUJfR1JBTlRQVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUFMTE9DX1BPU0lYJydAfCQoR05VTElCX01BTExPQ19QT1NJWCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJUT1dDJydAfCQoR05VTElCX01CVE9XQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtEVEVNUCcnQHwkKEdOVUxJQl9NS0RURU1QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS09TVEVNUCcnQHwkKEdOVUxJQl9NS09TVEVNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtPU1RFTVBTJydAfCQoR05VTElCX01LT1NURU1QUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtTVEVNUCcnQHwkKEdOVUxJQl9NS1NURU1QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS1NURU1QUycnQHwkKEdOVUxJQl9NS1NURU1QUyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFRTTkFNRScnQHwkKEdOVUxJQl9QVFNOQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QVVRFTlYnJ0B8JChHTlVMSUJfUFVURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SQU5ET01fUicnQHwkKEdOVUxJQl9SQU5ET01fUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBTExPQ19QT1NJWCcnQHwkKEdOVUxJQl9SRUFMTE9DX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9SRUFMUEFUSCcnQHwkKEdOVUxJQl9SRUFMUEFUSCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUlBNQVRDSCcnQHwkKEdOVUxJQl9SUE1BVENIKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TRVRFTlYnJ0B8JChHTlVMSUJfU0VURU5WKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT0QnJ0B8JChHTlVMSUJfU1RSVE9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJUT0xMJydAfCQoR05VTElCX1NUUlRPTEwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlRPVUxMJydAfCQoR05VTElCX1NUUlRPVUxMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWVNURU1fUE9TSVgnJ0B8JChHTlVMSUJfU1lTVEVNX1BPU0lYKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTkxPQ0tQVCcnQHwkKEdOVUxJQl9VTkxPQ0tQVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVU5TRVRFTlYnJ0B8JChHTlVMSUJfVU5TRVRFTlYpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1dDVE9NQicnQHwkKEdOVUxJQl9XQ1RPTUIpfGcnIFwKKyAJICAgICAgPCAkKHNyY2Rpcikvc3RkbGliLmluLmggfCBcCisgCSAgc2VkIC1lICdzfEAnJ0hBVkVfX0VYSVQnJ0B8JChIQVZFX19FWElUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfQVRPTEwnJ0B8JChIQVZFX0FUT0xMKXxnJyBcCitAQCAtNzY2LDcgKzcyMyw2IEBAIHN0ZGxpYi5oOiBzdGRsaWIuaW4uaCAkKHRvcF9idWlsZGRpcikvY28KKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9VTlNFVEVOVicnQHwkKFJFUExBQ0VfVU5TRVRFTlYpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUkVQTEFDRV9XQ1RPTUInJ0B8JChSRVBMQUNFX1dDVE9NQil8ZycgXAorIAkgICAgICAtZSAnL2RlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwvciAkKENYWERFRlNfSCknIFwKKy0JICAgICAgLWUgJy9kZWZpbml0aW9uIG9mIF9Ob3JldHVybi9yICQoX05PUkVUVVJOX0gpJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfQVJHX05PTk5VTEwvciAkKEFSR19OT05OVUxMX0gpJyBcCisgCSAgICAgIC1lICcvZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UvciAkKFdBUk5fT05fVVNFX0gpJzsgXAorIAl9ID4gJEAtdCAmJiBcCitAQCAtNzkzLDE1ICs3NDksNiBAQCBFWFRSQV9saWJpY3J0X2FfU09VUkNFUyArPSBzdHJlcnJvci5jCisgCisgIyMgZW5kICAgZ251bGliIG1vZHVsZSBzdHJlcnJvcgorIAorLSMjIGJlZ2luIGdudWxpYiBtb2R1bGUgc3RyZXJyb3Itb3ZlcnJpZGUKKy0KKy0KKy1FWFRSQV9ESVNUICs9IHN0cmVycm9yLW92ZXJyaWRlLmMgc3RyZXJyb3Itb3ZlcnJpZGUuaAorLQorLUVYVFJBX2xpYmljcnRfYV9TT1VSQ0VTICs9IHN0cmVycm9yLW92ZXJyaWRlLmMKKy0KKy0jIyBlbmQgICBnbnVsaWIgbW9kdWxlIHN0cmVycm9yLW92ZXJyaWRlCistCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSBzdHJpbmcKKyAKKyBCVUlMVF9TT1VSQ0VTICs9IHN0cmluZy5oCitAQCAtODExLDUyICs3NTgsNDcgQEAgQlVJTFRfU09VUkNFUyArPSBzdHJpbmcuaAorIHN0cmluZy5oOiBzdHJpbmcuaW4uaCAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKENYWERFRlNfSCkgJChBUkdfTk9OTlVMTF9IKSAkKFdBUk5fT05fVVNFX0gpCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLycgJiYgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9TWVNURU1fSEVBREVSJydAfEBQUkFHTUFfU1lTVEVNX0hFQURFUkB8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfQ09MVU1OUycnQHxAUFJBR01BX0NPTFVNTlNAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnTkVYVF9TVFJJTkdfSCcnQHwkKE5FWFRfU1RSSU5HX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZGU0wnJ0AvJChHTlVMSUJfRkZTTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkZTTEwnJ0AvJChHTlVMSUJfRkZTTEwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU0xFTicnQC8kKEdOVUxJQl9NQlNMRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU05MRU4nJ0AvJChHTlVMSUJfTUJTTkxFTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0hSJydALyQoR05VTElCX01CU0NIUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTUkNIUicnQC8kKEdOVUxJQl9NQlNSQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNTVFInJ0AvJChHTlVMSUJfTUJTU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDQVNFQ01QJydALyQoR05VTElCX01CU0NBU0VDTVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU05DQVNFQ01QJydALyQoR05VTElCX01CU05DQVNFQ01QKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNQQ0FTRUNNUCcnQC8kKEdOVUxJQl9NQlNQQ0FTRUNNUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTQ0FTRVNUUicnQC8kKEdOVUxJQl9NQlNDQVNFU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NQlNDU1BOJydALyQoR05VTElCX01CU0NTUE4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01CU1BCUksnJ0AvJChHTlVMSUJfTUJTUEJSSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU1BOJydALyQoR05VTElCX01CU1NQTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTU0VQJydALyQoR05VTElCX01CU1NFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUJTVE9LX1InJ0AvJChHTlVMSUJfTUJTVE9LX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTUNIUicnQC8kKEdOVUxJQl9NRU1DSFIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTU1FTScnQC8kKEdOVUxJQl9NRU1NRU0pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01FTVBDUFknJ0AvJChHTlVMSUJfTUVNUENQWSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUVNUkNIUicnQC8kKEdOVUxJQl9NRU1SQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9SQVdNRU1DSFInJ0AvJChHTlVMSUJfUkFXTUVNQ0hSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBDUFknJ0AvJChHTlVMSUJfU1RQQ1BZKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFBOQ1BZJydALyQoR05VTElCX1NUUE5DUFkpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkNIUk5VTCcnQC8kKEdOVUxJQl9TVFJDSFJOVUwpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkRVUCcnQC8kKEdOVUxJQl9TVFJEVVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUk5DQVQnJ0AvJChHTlVMSUJfU1RSTkNBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSTkRVUCcnQC8kKEdOVUxJQl9TVFJORFVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJOTEVOJydALyQoR05VTElCX1NUUk5MRU4pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBCUksnJ0AvJChHTlVMSUJfU1RSUEJSSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU0VQJydALyQoR05VTElCX1NUUlNFUCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU1RSJydALyQoR05VTElCX1NUUlNUUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSQ0FTRVNUUicnQC8kKEdOVUxJQl9TVFJDQVNFU1RSKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVFJUT0tfUicnQC8kKEdOVUxJQl9TVFJUT0tfUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSRVJST1InJ0AvJChHTlVMSUJfU1RSRVJST1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUkVSUk9SX1InJ0AvJChHTlVMSUJfU1RSRVJST1JfUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSU0lHTkFMJydALyQoR05VTElCX1NUUlNJR05BTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfU1RSVkVSU0NNUCcnQC8kKEdOVUxJQl9TVFJWRVJTQ01QKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNMRU4nJ0B8JChHTlVMSUJfTUJTTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNOTEVOJydAfCQoR05VTElCX01CU05MRU4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NIUicnQHwkKEdOVUxJQl9NQlNDSFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1JDSFInJ0B8JChHTlVMSUJfTUJTUkNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTU1RSJydAfCQoR05VTElCX01CU1NUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNDQVNFQ01QKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNOQ0FTRUNNUCcnQHwkKEdOVUxJQl9NQlNOQ0FTRUNNUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTUENBU0VDTVAnJ0B8JChHTlVMSUJfTUJTUENBU0VDTVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU0NBU0VTVFInJ0B8JChHTlVMSUJfTUJTQ0FTRVNUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUJTQ1NQTicnQHwkKEdOVUxJQl9NQlNDU1BOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NQlNQQlJLJydAfCQoR05VTElCX01CU1BCUkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NQTicnQHwkKEdOVUxJQl9NQlNTUE4pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1NFUCcnQHwkKEdOVUxJQl9NQlNTRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01CU1RPS19SJydAfCQoR05VTElCX01CU1RPS19SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1DSFInJ0B8JChHTlVMSUJfTUVNQ0hSKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1NRU0nJ0B8JChHTlVMSUJfTUVNTUVNKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NRU1QQ1BZJydAfCQoR05VTElCX01FTVBDUFkpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01FTVJDSFInJ0B8JChHTlVMSUJfTUVNUkNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkFXTUVNQ0hSJydAfCQoR05VTElCX1JBV01FTUNIUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RQQ1BZJydAfCQoR05VTElCX1NUUENQWSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RQTkNQWScnQHwkKEdOVUxJQl9TVFBOQ1BZKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJDSFJOVUwnJ0B8JChHTlVMSUJfU1RSQ0hSTlVMKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJEVVAnJ0B8JChHTlVMSUJfU1RSRFVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJOQ0FUJydAfCQoR05VTElCX1NUUk5DQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUk5EVVAnJ0B8JChHTlVMSUJfU1RSTkRVUCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSTkxFTicnQHwkKEdOVUxJQl9TVFJOTEVOKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJQQlJLJydAfCQoR05VTElCX1NUUlBCUkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNFUCcnQHwkKEdOVUxJQl9TVFJTRVApfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNUUicnQHwkKEdOVUxJQl9TVFJTVFIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkNBU0VTVFInJ0B8JChHTlVMSUJfU1RSQ0FTRVNUUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RSVE9LX1InJ0B8JChHTlVMSUJfU1RSVE9LX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUkVSUk9SJydAfCQoR05VTElCX1NUUkVSUk9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJFUlJPUl9SJydAfCQoR05VTElCX1NUUkVSUk9SX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlNJR05BTCcnQHwkKEdOVUxJQl9TVFJTSUdOQUwpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NUUlZFUlNDTVAnJ0B8JChHTlVMSUJfU1RSVkVSU0NNUCl8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS9zdHJpbmcuaW4uaCB8IFwKKy0JICBzZWQgLWUgJ3N8QCcnSEFWRV9GRlNMJydAfCQoSEFWRV9GRlNMKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfRkZTTEwnJ0B8JChIQVZFX0ZGU0xMKXxnJyBcCistCSAgICAgIC1lICdzfEAnJ0hBVkVfTUJTTEVOJydAfCQoSEFWRV9NQlNMRU4pfGcnIFwKKysJICBzZWQgLWUgJ3N8QCcnSEFWRV9NQlNMRU4nJ0B8JChIQVZFX01CU0xFTil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX01FTUNIUicnQHwkKEhBVkVfTUVNQ0hSKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfREVDTF9NRU1NRU0nJ0B8JChIQVZFX0RFQ0xfTUVNTUVNKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfTUVNUENQWScnQHwkKEhBVkVfTUVNUENQWSl8ZycgXAorQEAgLTkxMiwyMyArODU0LDIyIEBAIHN5cy9zdGF0Lmg6IHN5c19zdGF0LmluLmggJCh0b3BfYnVpbGRkaXIKKyAJJChBTV9WX2F0KSQoTUtESVJfUCkgc3lzCisgCSQoQU1fVl9HRU4pcm0gLWYgJEAtdCAkQCAmJiBcCisgCXsgZWNobyAnLyogRE8gTk9UIEVESVQhIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZISAqLyc7IFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfU1lTX1NUQVRfSCcnQHwkKE5FWFRfU1lTX1NUQVRfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRkNITU9EQVQnJ0AvJChHTlVMSUJfRkNITU9EQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZTVEFUQVQnJ0AvJChHTlVMSUJfRlNUQVRBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlVUSU1FTlMnJ0AvJChHTlVMSUJfRlVUSU1FTlMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xDSE1PRCcnQC8kKEdOVUxJQl9MQ0hNT0QpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0xTVEFUJydALyQoR05VTElCX0xTVEFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS0RJUkFUJydALyQoR05VTElCX01LRElSQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRklGTycnQC8kKEdOVUxJQl9NS0ZJRk8pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LRklGT0FUJydALyQoR05VTElCX01LRklGT0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9NS05PRCcnQC8kKEdOVUxJQl9NS05PRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTUtOT0RBVCcnQC8kKEdOVUxJQl9NS05PREFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TVEFUJydALyQoR05VTElCX1NUQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VUSU1FTlNBVCcnQC8kKEdOVUxJQl9VVElNRU5TQVQpL2cnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSE1PREFUJydAfCQoR05VTElCX0ZDSE1PREFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU1RBVEFUJydAfCQoR05VTElCX0ZTVEFUQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZVVElNRU5TJydAfCQoR05VTElCX0ZVVElNRU5TKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MQ0hNT0QnJ0B8JChHTlVMSUJfTENITU9EKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MU1RBVCcnQHwkKEdOVUxJQl9MU1RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtESVJBVCcnQHwkKEdOVUxJQl9NS0RJUkFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0ZJRk8nJ0B8JChHTlVMSUJfTUtGSUZPKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS0ZJRk9BVCcnQHwkKEdOVUxJQl9NS0ZJRk9BVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTUtOT0QnJ0B8JChHTlVMSUJfTUtOT0QpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX01LTk9EQVQnJ0B8JChHTlVMSUJfTUtOT0RBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfU1RBVCcnQHwkKEdOVUxJQl9TVEFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VVElNRU5TQVQnJ0B8JChHTlVMSUJfVVRJTUVOU0FUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRkNITU9EQVQnJ0B8JChIQVZFX0ZDSE1PREFUKXxnJyBcCisgCSAgICAgIC1lICdzfEAnJ0hBVkVfRlNUQVRBVCcnQHwkKEhBVkVfRlNUQVRBVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0ZVVElNRU5TJydAfCQoSEFWRV9GVVRJTUVOUyl8ZycgXAorQEAgLTk3MSwxNiArOTEyLDE1IEBAIEJVSUxUX1NPVVJDRVMgKz0gdGltZS5oCisgdGltZS5oOiB0aW1lLmluLmggJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChDWFhERUZTX0gpICQoQVJHX05PTk5VTExfSCkgJChXQVJOX09OX1VTRV9IKQorIAkkKEFNX1ZfR0VOKXJtIC1mICRALXQgJEAgJiYgXAorIAl7IGVjaG8gJy8qIERPIE5PVCBFRElUISBHRU5FUkFURUQgQVVUT01BVElDQUxMWSEgKi8nICYmIFwKKy0JICBzZWQgLWUgJ3N8QCcnR1VBUkRfUFJFRklYJydAfEdMfGcnIFwKKy0JICAgICAgLWUgJ3N8QCcnSU5DTFVERV9ORVhUJydAfCQoSU5DTFVERV9ORVhUKXxnJyBcCisrCSAgc2VkIC1lICdzfEAnJ0lOQ0xVREVfTkVYVCcnQHwkKElOQ0xVREVfTkVYVCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydQUkFHTUFfU1lTVEVNX0hFQURFUicnQHxAUFJBR01BX1NZU1RFTV9IRUFERVJAfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX0NPTFVNTlMnJ0B8QFBSQUdNQV9DT0xVTU5TQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ05FWFRfVElNRV9IJydAfCQoTkVYVF9USU1FX0gpfGcnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX01LVElNRScnQC8kKEdOVUxJQl9NS1RJTUUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX05BTk9TTEVFUCcnQC8kKEdOVUxJQl9OQU5PU0xFRVApL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NUUlBUSU1FJydALyQoR05VTElCX1NUUlBUSU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9USU1FR00nJ0AvJChHTlVMSUJfVElNRUdNKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9USU1FX1InJ0AvJChHTlVMSUJfVElNRV9SKS9nJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9NS1RJTUUnJ0B8JChHTlVMSUJfTUtUSU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9OQU5PU0xFRVAnJ0B8JChHTlVMSUJfTkFOT1NMRUVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TVFJQVElNRScnQHwkKEdOVUxJQl9TVFJQVElNRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVElNRUdNJydAfCQoR05VTElCX1RJTUVHTSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfVElNRV9SJydAfCQoR05VTElCX1RJTUVfUil8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX0RFQ0xfTE9DQUxUSU1FX1InJ0B8JChIQVZFX0RFQ0xfTE9DQUxUSU1FX1IpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9OQU5PU0xFRVAnJ0B8JChIQVZFX05BTk9TTEVFUCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydIQVZFX1NUUlBUSU1FJydAfCQoSEFWRV9TVFJQVElNRSl8ZycgXAorQEAgLTEwMTMsNTYgKzk1Myw1NSBAQCBCVUlMVF9TT1VSQ0VTICs9IHVuaXN0ZC5oCisgdW5pc3RkLmg6IHVuaXN0ZC5pbi5oICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoQ1hYREVGU19IKSAkKEFSR19OT05OVUxMX0gpICQoV0FSTl9PTl9VU0VfSCkKKyAJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKyAJeyBlY2hvICcvKiBETyBOT1QgRURJVCEgR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkhICovJzsgXAorLQkgIHNlZCAtZSAnc3xAJydHVUFSRF9QUkVGSVgnJ0B8R0x8ZycgXAorLQkgICAgICAtZSAnc3xAJydIQVZFX1VOSVNURF9IJydAfCQoSEFWRV9VTklTVERfSCl8ZycgXAorKwkgIHNlZCAtZSAnc3xAJydIQVZFX1VOSVNURF9IJydAfCQoSEFWRV9VTklTVERfSCl8ZycgXAorIAkgICAgICAtZSAnc3xAJydJTkNMVURFX05FWFQnJ0B8JChJTkNMVURFX05FWFQpfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnUFJBR01BX1NZU1RFTV9IRUFERVInJ0B8QFBSQUdNQV9TWVNURU1fSEVBREVSQHxnJyBcCisgCSAgICAgIC1lICdzfEAnJ1BSQUdNQV9DT0xVTU5TJydAfEBQUkFHTUFfQ09MVU1OU0B8ZycgXAorIAkgICAgICAtZSAnc3xAJydORVhUX1VOSVNURF9IJydAfCQoTkVYVF9VTklTVERfSCl8ZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfQ0hPV04nJ0AvJChHTlVMSUJfQ0hPV04pL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0NMT1NFJydALyQoR05VTElCX0NMT1NFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9EVVAyJydALyQoR05VTElCX0RVUDIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0RVUDMnJ0AvJChHTlVMSUJfRFVQMykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRU5WSVJPTicnQC8kKEdOVUxJQl9FTlZJUk9OKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9FVUlEQUNDRVNTJydALyQoR05VTElCX0VVSURBQ0NFU1MpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZBQ0NFU1NBVCcnQC8kKEdOVUxJQl9GQUNDRVNTQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSERJUicnQC8kKEdOVUxJQl9GQ0hESVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0ZDSE9XTkFUJydALyQoR05VTElCX0ZDSE9XTkFUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9GU1lOQycnQC8kKEdOVUxJQl9GU1lOQykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfRlRSVU5DQVRFJydALyQoR05VTElCX0ZUUlVOQ0FURSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUQ1dEJydALyQoR05VTElCX0dFVENXRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VURE9NQUlOTkFNRScnQC8kKEdOVUxJQl9HRVRET01BSU5OQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVREVEFCTEVTSVpFJydALyQoR05VTElCX0dFVERUQUJMRVNJWkUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEdST1VQUycnQC8kKEdOVUxJQl9HRVRHUk9VUFMpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX0dFVEhPU1ROQU1FJydALyQoR05VTElCX0dFVEhPU1ROQU1FKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRMT0dJTicnQC8kKEdOVUxJQl9HRVRMT0dJTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUTE9HSU5fUicnQC8kKEdOVUxJQl9HRVRMT0dJTl9SKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9HRVRQQUdFU0laRScnQC8kKEdOVUxJQl9HRVRQQUdFU0laRSkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR0VUVVNFUlNIRUxMJydALyQoR05VTElCX0dFVFVTRVJTSEVMTCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfR1JPVVBfTUVNQkVSJydALyQoR05VTElCX0dST1VQX01FTUJFUikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTENIT1dOJydALyQoR05VTElCX0xDSE9XTikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfTElOSycnQC8kKEdOVUxJQl9MSU5LKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MSU5LQVQnJ0AvJChHTlVMSUJfTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9MU0VFSycnQC8kKEdOVUxJQl9MU0VFSykvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUElQRScnQC8kKEdOVUxJQl9QSVBFKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9QSVBFMicnQC8kKEdOVUxJQl9QSVBFMikvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUFJFQUQnJ0AvJChHTlVMSUJfUFJFQUQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1BXUklURScnQC8kKEdOVUxJQl9QV1JJVEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQUQnJ0AvJChHTlVMSUJfUkVBRCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUkVBRExJTksnJ0AvJChHTlVMSUJfUkVBRExJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1JFQURMSU5LQVQnJ0AvJChHTlVMSUJfUkVBRExJTktBVCkvZycgXAorLQkgICAgICAtZSAncy9AJydHTlVMSUJfUk1ESVInJ0AvJChHTlVMSUJfUk1ESVIpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NMRUVQJydALyQoR05VTElCX1NMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9TWU1MSU5LJydALyQoR05VTElCX1NZTUxJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1NZTUxJTktBVCcnQC8kKEdOVUxJQl9TWU1MSU5LQVQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1RUWU5BTUVfUicnQC8kKEdOVUxJQl9UVFlOQU1FX1IpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOSVNURF9IX0dFVE9QVCcnQC8kKEdOVUxJQl9VTklTVERfSF9HRVRPUFQpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HJydALyQoR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VTklTVERfSF9TSUdQSVBFJydALyQoR05VTElCX1VOSVNURF9IX1NJR1BJUEUpL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTElOSycnQC8kKEdOVUxJQl9VTkxJTkspL2cnIFwKKy0JICAgICAgLWUgJ3MvQCcnR05VTElCX1VOTElOS0FUJydALyQoR05VTElCX1VOTElOS0FUKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9VU0xFRVAnJ0AvJChHTlVMSUJfVVNMRUVQKS9nJyBcCistCSAgICAgIC1lICdzL0AnJ0dOVUxJQl9XUklURScnQC8kKEdOVUxJQl9XUklURSkvZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfQ0hPV04nJ0B8JChHTlVMSUJfQ0hPV04pfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0NMT1NFJydAfCQoR05VTElCX0NMT1NFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9EVVAyJydAfCQoR05VTElCX0RVUDIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0RVUDMnJ0B8JChHTlVMSUJfRFVQMyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRU5WSVJPTicnQHwkKEdOVUxJQl9FTlZJUk9OKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9FVUlEQUNDRVNTJydAfCQoR05VTElCX0VVSURBQ0NFU1MpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZBQ0NFU1NBVCcnQHwkKEdOVUxJQl9GQUNDRVNTQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSERJUicnQHwkKEdOVUxJQl9GQ0hESVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0ZDSE9XTkFUJydAfCQoR05VTElCX0ZDSE9XTkFUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9GU1lOQycnQHwkKEdOVUxJQl9GU1lOQyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfRlRSVU5DQVRFJydAfCQoR05VTElCX0ZUUlVOQ0FURSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUQ1dEJydAfCQoR05VTElCX0dFVENXRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VURE9NQUlOTkFNRScnQHwkKEdOVUxJQl9HRVRET01BSU5OQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVREVEFCTEVTSVpFJydAfCQoR05VTElCX0dFVERUQUJMRVNJWkUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVEdST1VQUycnQHwkKEdOVUxJQl9HRVRHUk9VUFMpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX0dFVEhPU1ROQU1FJydAfCQoR05VTElCX0dFVEhPU1ROQU1FKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRMT0dJTicnQHwkKEdOVUxJQl9HRVRMT0dJTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUTE9HSU5fUicnQHwkKEdOVUxJQl9HRVRMT0dJTl9SKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9HRVRQQUdFU0laRScnQHwkKEdOVUxJQl9HRVRQQUdFU0laRSl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR0VUVVNFUlNIRUxMJydAfCQoR05VTElCX0dFVFVTRVJTSEVMTCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfR1JPVVBfTUVNQkVSJydAfCQoR05VTElCX0dST1VQX01FTUJFUil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTENIT1dOJydAfCQoR05VTElCX0xDSE9XTil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfTElOSycnQHwkKEdOVUxJQl9MSU5LKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MSU5LQVQnJ0B8JChHTlVMSUJfTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9MU0VFSycnQHwkKEdOVUxJQl9MU0VFSyl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUElQRScnQHwkKEdOVUxJQl9QSVBFKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9QSVBFMicnQHwkKEdOVUxJQl9QSVBFMil8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUFJFQUQnJ0B8JChHTlVMSUJfUFJFQUQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1BXUklURScnQHwkKEdOVUxJQl9QV1JJVEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQUQnJ0B8JChHTlVMSUJfUkVBRCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUkVBRExJTksnJ0B8JChHTlVMSUJfUkVBRExJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1JFQURMSU5LQVQnJ0B8JChHTlVMSUJfUkVBRExJTktBVCl8ZycgXAorKwkgICAgICAtZSAnc3xAJydHTlVMSUJfUk1ESVInJ0B8JChHTlVMSUJfUk1ESVIpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NMRUVQJydAfCQoR05VTElCX1NMRUVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9TWU1MSU5LJydAfCQoR05VTElCX1NZTUxJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1NZTUxJTktBVCcnQHwkKEdOVUxJQl9TWU1MSU5LQVQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1RUWU5BTUVfUicnQHwkKEdOVUxJQl9UVFlOQU1FX1IpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOSVNURF9IX0dFVE9QVCcnQHwkKEdOVUxJQl9VTklTVERfSF9HRVRPUFQpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HJydAfCQoR05VTElCX1VOSVNURF9IX05PTkJMT0NLSU5HKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VTklTVERfSF9TSUdQSVBFJydAfCQoR05VTElCX1VOSVNURF9IX1NJR1BJUEUpfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOTElOSycnQHwkKEdOVUxJQl9VTkxJTkspfGcnIFwKKysJICAgICAgLWUgJ3N8QCcnR05VTElCX1VOTElOS0FUJydAfCQoR05VTElCX1VOTElOS0FUKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9VU0xFRVAnJ0B8JChHTlVMSUJfVVNMRUVQKXxnJyBcCisrCSAgICAgIC1lICdzfEAnJ0dOVUxJQl9XUklURScnQHwkKEdOVUxJQl9XUklURSl8ZycgXAorIAkgICAgICA8ICQoc3JjZGlyKS91bmlzdGQuaW4uaCB8IFwKKyAJICBzZWQgLWUgJ3N8QCcnSEFWRV9DSE9XTicnQHwkKEhBVkVfQ0hPV04pfGcnIFwKKyAJICAgICAgLWUgJ3N8QCcnSEFWRV9EVVAyJydAfCQoSEFWRV9EVVAyKXxnJyBcCitAQCAtMTE5OCw2ICsxMTM3LDI1IEBAIEVYVFJBX0RJU1QgKz0gdmVyaWZ5LmgKKyAKKyAjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHZlcmlmeQorIAorKyMjIGJlZ2luIGdudWxpYiBtb2R1bGUgd2Fybi1vbi11c2UKKysKKytCVUlMVF9TT1VSQ0VTICs9IHdhcm4tb24tdXNlLmgKKysjIFRoZSB3YXJuLW9uLXVzZS5oIHRoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIGdlbmVyYXRlZCAuaCBmaWxlcyBpcyB0aGUgc2FtZSBhcworKyMgYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgsIGV4Y2VwdCB0aGF0IGl0IGhhcyB0aGUgY29weXJpZ2h0IGhlYWRlciBjdXQgb2ZmLgorK3dhcm4tb24tdXNlLmg6ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKysJJChBTV9WX0dFTilybSAtZiAkQC10ICRAICYmIFwKKysJc2VkIC1uIC1lICcvXi5pZm5kZWYvLCQkcCcgXAorKwkgIDwgJCh0b3Bfc3JjZGlyKS9idWlsZC1hdXgvd2Fybi1vbi11c2UuaCBcCisrCSAgPiAkQC10ICYmIFwKKysJbXYgJEAtdCAkQAorK01PU1RMWUNMRUFORklMRVMgKz0gd2Fybi1vbi11c2UuaCB3YXJuLW9uLXVzZS5oLXQKKysKKytXQVJOX09OX1VTRV9IPXdhcm4tb24tdXNlLmgKKysKKytFWFRSQV9ESVNUICs9ICQodG9wX3NyY2RpcikvYnVpbGQtYXV4L3dhcm4tb24tdXNlLmgKKysKKysjIyBlbmQgICBnbnVsaWIgbW9kdWxlIHdhcm4tb24tdXNlCisrCisgIyMgYmVnaW4gZ251bGliIG1vZHVsZSB4YWxsb2MKKyAKKyBsaWJpY3J0X2FfU09VUkNFUyArPSB4YWxsb2MuaCB4bWFsbG9jLmMgeHN0cmR1cC5jCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3BhdGhtYXguaCBsaWJpY29udi0xLjE0L3NyY2xpYi9wYXRobWF4LmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3BhdGhtYXguaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3BhdGhtYXguaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjIxODQ4NDQ1MSAtMDgwMAorQEAgLTE5LDI3ICsxOSw2IEBACisgI2lmbmRlZiBfUEFUSE1BWF9ICisgIyBkZWZpbmUgX1BBVEhNQVhfSAorIAorLS8qIFBPU0lYOjIwMDggZGVmaW5lcyBQQVRIX01BWCB0byBiZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBmaWxlbmFtZSwKKy0gICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTCBieXRlLgorLSAgIDxodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9saW1pdHMuaC5odG1sPgorLSAgIFBBVEhfTUFYIGlzIG5vdCBkZWZpbmVkIG9uIHN5c3RlbXMgd2hpY2ggaGF2ZSBubyBsaW1pdCBvbiBmaWxlbmFtZSBsZW5ndGgsCistICAgc3VjaCBhcyBHTlUvSHVyZC4KKy0KKy0gICBUaGlzIGZpbGUgZG9lcyAqbm90KiBkZWZpbmUgUEFUSF9NQVggYWx3YXlzLiAgUHJvZ3JhbXMgdGhhdCB1c2UgdGhpcyBmaWxlCistICAgY2FuIGhhbmRsZSB0aGUgR05VL0h1cmQgY2FzZSBpbiBzZXZlcmFsIHdheXM6CistICAgICAtIEVpdGhlciB3aXRoIGEgcGFja2FnZS13aWRlIGhhbmRsaW5nLCBvciB3aXRoIGEgcGVyLWZpbGUgaGFuZGxpbmcsCistICAgICAtIEVpdGhlciB0aHJvdWdoIGEKKy0gICAgICAgICAjaWZkZWYgUEFUSF9NQVgKKy0gICAgICAgb3IgdGhyb3VnaCBhIGZhbGxiYWNrIGxpa2UKKy0gICAgICAgICAjaWZuZGVmIFBBVEhfTUFYCistICAgICAgICAgIyBkZWZpbmUgUEFUSF9NQVggODE5MgorLSAgICAgICAgICNlbmRpZgorLSAgICAgICBvciB0aHJvdWdoIGEgZmFsbGJhY2sgbGlrZQorLSAgICAgICAgICNpZm5kZWYgUEFUSF9NQVgKKy0gICAgICAgICAjIGRlZmluZSBQQVRIX01BWCBwYXRoY29uZiAoIi8iLCBfUENfUEFUSF9NQVgpCistICAgICAgICAgI2VuZGlmCistICovCistCisgIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyAKKyAjIGluY2x1ZGUgPGxpbWl0cy5oPgorQEAgLTQ4LDYgKzI3LDExIEBACisgIyAgZGVmaW5lIF9QT1NJWF9QQVRIX01BWCAyNTYKKyAjIGVuZGlmCisgCisrIyBpZiAhZGVmaW5lZCBQQVRIX01BWCAmJiBkZWZpbmVkIF9QQ19QQVRIX01BWCAmJiBkZWZpbmVkIEhBVkVfUEFUSENPTkYKKysjICBkZWZpbmUgUEFUSF9NQVggKHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkgPCAxID8gMTAyNCBcCisrICAgICAgICAgICAgICAgICAgICA6IHBhdGhjb25mICgiLyIsIF9QQ19QQVRIX01BWCkpCisrIyBlbmRpZgorKworIC8qIERvbid0IGluY2x1ZGUgc3lzL3BhcmFtLmggaWYgaXQgYWxyZWFkeSBoYXMgYmVlbi4gICovCisgIyBpZiBkZWZpbmVkIEhBVkVfU1lTX1BBUkFNX0ggJiYgIWRlZmluZWQgUEFUSF9NQVggJiYgIWRlZmluZWQgTUFYUEFUSExFTgorICMgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorQEAgLTU3LDEzICs0MSw4IEBACisgIyAgZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyAjIGVuZGlmCisgCistIyBpZmRlZiBfX2hwdXgKKy0vKiBPbiBIUC1VWCwgUEFUSF9NQVggZGVzaWduYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBmaWxlbmFtZSwKKy0gICAqbm90KiBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTCBieXRlLCBhbmQgaXMgc2V0IHRvIDEwMjMuCistICAgQWRkaXRpb25hbGx5LCB3aGVuIF9YT1BFTl9TT1VSQ0UgaXMgZGVmaW5lZCB0byA1MDAgb3IgbW9yZSwgUEFUSF9NQVggaXMKKy0gICBub3QgZGVmaW5lZCBhdCBhbGwgYW55IG1vcmUuICAqLworLSMgIHVuZGVmIFBBVEhfTUFYCistIyAgZGVmaW5lIFBBVEhfTUFYIDEwMjQKKysjIGlmbmRlZiBQQVRIX01BWAorKyMgIGRlZmluZSBQQVRIX01BWCBfUE9TSVhfUEFUSF9NQVgKKyAjIGVuZGlmCisgCisgI2VuZGlmIC8qIF9QQVRITUFYX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvcmVsb2N3cmFwcGVyLmMgbGliaWNvbnYtMS4xNC9zcmNsaWIvcmVsb2N3cmFwcGVyLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3JlbG9jd3JhcHBlci5jCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvcmVsb2N3cmFwcGVyLmMJMjAxMi0wMS0wOCAwMjowNzo0MC4yODI0ODQ0NTUgLTA4MDAKK0BAIC0yOSw2ICsyOSw3IEBACisgICAgIC0+IHJlbG9jYXRhYmxlCisgICAgIC0+IHNldGVudgorICAgICAgICAtPiBtYWxsb2NhCisrICAgIC0+IHN0cmVycm9yCisgICAgIC0+IGMtY3R5cGUKKyAKKyAgICBNYWNyb3MgdGhhdCBuZWVkIHRvIGJlIHNldCB3aGlsZSBjb21waWxpbmcgdGhpcyBmaWxlOgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zYWZlLXJlYWQuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zYWZlLXJlYWQuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc2FmZS1yZWFkLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zYWZlLXJlYWQuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjI5ODQ4NDQ1NSAtMDgwMAorQEAgLTE0LDE5ICsxNCw2IEBACisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisgCistLyogU29tZSBzeXN0ZW0gY2FsbHMgbWF5IGJlIGludGVycnVwdGVkIGFuZCBmYWlsIHdpdGggZXJybm8gPSBFSU5UUiBpbiB0aGUKKy0gICBmb2xsb3dpbmcgc2l0dWF0aW9uczoKKy0gICAgIC0gVGhlIHByb2Nlc3MgaXMgc3RvcHBlZCBhbmQgcmVzdGFydGVkIChzaWduYWwgU0lHU1RPUCBhbmQgU0lHQ09OVCwgdXNlcgorLSAgICAgICB0eXBlcyBDdHJsLVopIG9uIHNvbWUgcGxhdGZvcm1zOiBNYWNPUyBYLgorLSAgICAgLSBUaGUgcHJvY2VzcyByZWNlaXZlcyBhIHNpZ25hbCBmb3Igd2hpY2ggYSBzaWduYWwgaGFuZGxlciB3YXMgaW5zdGFsbGVkCistICAgICAgIHdpdGggc2lnYWN0aW9uKCkgd2l0aCBhbiBzYV9mbGFncyBmaWVsZCB0aGF0IGRvZXMgbm90IGNvbnRhaW4KKy0gICAgICAgU0FfUkVTVEFSVC4KKy0gICAgIC0gVGhlIHByb2Nlc3MgcmVjZWl2ZXMgYSBzaWduYWwgZm9yIHdoaWNoIGEgc2lnbmFsIGhhbmRsZXIgd2FzIGluc3RhbGxlZAorLSAgICAgICB3aXRoIHNpZ25hbCgpIGFuZCBmb3Igd2hpY2ggbm8gY2FsbCB0byBzaWdpbnRlcnJ1cHQoc2lnLDApIHdhcyBkb25lLAorLSAgICAgICBvbiBzb21lIHBsYXRmb3JtczogQUlYLCBIUC1VWCwgSVJJWCwgT1NGLzEsIFNvbGFyaXMuCistCistICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCByZWFkKCkgdGhhdCBoYW5kbGVzIEVJTlRSLiAgKi8KKy0KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgI2lmZGVmIF9fY3BsdXNwbHVzCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3NpZ25hbC5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3NpZ25hbC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zaWduYWwuaW4uaAkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3NpZ25hbC5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzE0NDg0NDU2IC0wODAwCitAQCAtMjAsNDkgKzIwLDIxIEBACisgI2VuZGlmCisgQFBSQUdNQV9DT0xVTU5TQAorIAorLSNpZiBkZWZpbmVkIF9fbmVlZF9zaWdfYXRvbWljX3QgfHwgZGVmaW5lZCBfX25lZWRfc2lnc2V0X3QgfHwgZGVmaW5lZCBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU0lHTkFMX0ggfHwgKGRlZmluZWQgX1NJR05BTF9IICYmICFkZWZpbmVkIF9fU0laRU9GX1BUSFJFQURfTVVURVhfVCkKKy0vKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbjoKKy0gICAtIEluc2lkZSBnbGliYyBoZWFkZXIgZmlsZXMuCistICAgLSBPbiBnbGliYyBzeXN0ZW1zIHdlIGhhdmUgYSBzZXF1ZW5jZSBvZiBuZXN0ZWQgaW5jbHVkZXMKKy0gICAgIDxzaWduYWwuaD4gLT4gPHVjb250ZXh0Lmg+IC0+IDxzaWduYWwuaD4uCistICAgICBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlIHdlIGNhbm5vdAorLSAgICAgcHJvdmlkZSB0aGUgQysrIGFsaWFzZXMuCistICAgLSBPbiBnbGliYyBzeXN0ZW1zIHdpdGggR0NDIDQuMyB3ZSBoYXZlIGEgc2VxdWVuY2Ugb2YgbmVzdGVkIGluY2x1ZGVzCistICAgICA8Y3NpZ25hbD4gLT4gPC91c3IvaW5jbHVkZS9zaWduYWwuaD4gLT4gPHN5cy91Y29udGV4dC5oPiAtPiA8c2lnbmFsLmg+LgorLSAgICAgSW4gdGhpcyBzaXR1YXRpb24sIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBkZWNsYXJlZCwgdGhlcmVmb3JlCistICAgICB3ZSBjYW5ub3QgcHJvdmlkZSB0aGUgQysrIGFsaWFzZXMuICAqLworKyNpZiBkZWZpbmVkIF9fbmVlZF9zaWdfYXRvbWljX3QgfHwgZGVmaW5lZCBfX25lZWRfc2lnc2V0X3QKKysvKiBTcGVjaWFsIGludm9jYXRpb24gY29udmVudGlvbiBpbnNpZGUgZ2xpYmMgaGVhZGVyIGZpbGVzLiAgKi8KKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1NJR05BTF9IQAorIAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0KKy0jZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TSUdOQUxfSAorLQorLS8qIERlZmluZSBwaWRfdCwgdWlkX3QuCistICAgQWxzbywgbWluZ3cgZGVmaW5lcyBzaWdzZXRfdCBub3QgaW4gPHNpZ25hbC5oPiwgYnV0IGluIDxzeXMvdHlwZXMuaD4uCistICAgT24gU29sYXJpcyAxMCwgPHNpZ25hbC5oPiBpbmNsdWRlcyA8c3lzL3R5cGVzLmg+LCB3aGljaCBldmVudHVhbGx5IGluY2x1ZGVzCistICAgdXM7IHNvIGluY2x1ZGUgPHN5cy90eXBlcy5oPiBub3csIGJlZm9yZSB0aGUgc2Vjb25kIGluY2x1c2lvbiBndWFyZC4gICovCistI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorKyNpZm5kZWYgX0dMX1NJR05BTF9ICisgCisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9TSUdOQUxfSEAKKyAKKy0jdW5kZWYgX0dMX0FMUkVBRFlfSU5DTFVESU5HX1NJR05BTF9ICistCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU0lHTkFMX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSAorLQorLS8qIE1hY09TIFggMTAuMywgRnJlZUJTRCA2LjQsIE9wZW5CU0QgMy44LCBPU0YvMSA0LjAsIFNvbGFyaXMgMi42IGRlY2xhcmUKKy0gICBwdGhyZWFkX3NpZ21hc2sgaW4gPHB0aHJlYWQuaD4sIG5vdCBpbiA8c2lnbmFsLmg+LgorLSAgIEJ1dCBhdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uIG9uIGdsaWJjIHN5c3RlbXMuKi8KKy0jaWYgKEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQCB8fCBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLKSBcCistICAgICYmICgoZGVmaW5lZCBfX0FQUExFX18gJiYgZGVmaW5lZCBfX01BQ0hfXykgfHwgZGVmaW5lZCBfX0ZyZWVCU0RfXyB8fCBkZWZpbmVkIF9fT3BlbkJTRF9fIHx8IGRlZmluZWQgX19vc2ZfXyB8fCBkZWZpbmVkIF9fc3VuKSBcCistICAgICYmICEgZGVmaW5lZCBfX0dMSUJDX18KKy0jIGluY2x1ZGUgPHB0aHJlYWQuaD4KKy0jZW5kaWYKKysjaWZuZGVmIF9HTF9TSUdOQUxfSAorKyNkZWZpbmUgX0dMX1NJR05BTF9ICisgCisgLyogVGhlIGRlZmluaXRpb25zIG9mIF9HTF9GVU5DREVDTF9SUEwgZXRjLiBhcmUgY29waWVkIGhlcmUuICAqLworIAorQEAgLTcwLDYgKzQyLDEwIEBACisgCisgLyogVGhlIGRlZmluaXRpb24gb2YgX0dMX1dBUk5fT05fVVNFIGlzIGNvcGllZCBoZXJlLiAgKi8KKyAKKysvKiBEZWZpbmUgcGlkX3QsIHVpZF90LgorKyAgIEFsc28sIG1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisrCisgLyogT24gQUlYLCBzaWdfYXRvbWljX3QgYWxyZWFkeSBpbmNsdWRlcyB2b2xhdGlsZS4gIEM5OSByZXF1aXJlcyB0aGF0CisgICAgJ3ZvbGF0aWxlIHNpZ19hdG9taWNfdCcgaWdub3JlIHRoZSBleHRyYSBtb2RpZmllciwgYnV0IEM4OSBkaWQgbm90LgorICAgIEhlbmNlLCByZWRlZmluZSB0aGlzIHRvIGEgbm9uLXZvbGF0aWxlIHR5cGUgYXMgbmVlZGVkLiAgKi8KK0BAIC0xMjQsMzQgKzEwMCw2IEBAIHR5cGVkZWYgdm9pZCAoKnNpZ2hhbmRsZXJfdCkgKGludCk7CisgI2VuZGlmCisgCisgCistI2lmIEBHTlVMSUJfUFRIUkVBRF9TSUdNQVNLQAorLSMgaWYgQFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLQAorLSMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHB0aHJlYWRfc2lnbWFzaworLSMgICBkZWZpbmUgcHRocmVhZF9zaWdtYXNrIHJwbF9wdGhyZWFkX3NpZ21hc2sKKy0jICBlbmRpZgorLV9HTF9GVU5DREVDTF9SUEwgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLV9HTF9DWFhBTElBU19SUEwgKHB0aHJlYWRfc2lnbWFzaywgaW50LAorLSAgICAgICAgICAgICAgICAgIChpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqbmV3X21hc2ssIHNpZ3NldF90ICpvbGRfbWFzaykpOworLSMgZWxzZQorLSMgIGlmICFASEFWRV9QVEhSRUFEX1NJR01BU0tACistX0dMX0ZVTkNERUNMX1NZUyAocHRocmVhZF9zaWdtYXNrLCBpbnQsCistICAgICAgICAgICAgICAgICAgKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpuZXdfbWFzaywgc2lnc2V0X3QgKm9sZF9tYXNrKSk7CistIyAgZW5kaWYKKy1fR0xfQ1hYQUxJQVNfU1lTIChwdGhyZWFkX3NpZ21hc2ssIGludCwKKy0gICAgICAgICAgICAgICAgICAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5ld19tYXNrLCBzaWdzZXRfdCAqb2xkX21hc2spKTsKKy0jIGVuZGlmCistX0dMX0NYWEFMSUFTV0FSTiAocHRocmVhZF9zaWdtYXNrKTsKKy0jZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistIyB1bmRlZiBwdGhyZWFkX3NpZ21hc2sKKy0jIGlmIEhBVkVfUkFXX0RFQ0xfUFRIUkVBRF9TSUdNQVNLCistX0dMX1dBUk5fT05fVVNFIChwdGhyZWFkX3NpZ21hc2ssICJwdGhyZWFkX3NpZ21hc2sgaXMgbm90IHBvcnRhYmxlIC0gIgorLSAgICAgICAgICAgICAgICAgInVzZSBnbnVsaWIgbW9kdWxlIHB0aHJlYWRfc2lnbWFzayBmb3IgcG9ydGFiaWxpdHkiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCisgI2lmIEBHTlVMSUJfU0lHUFJPQ01BU0tACisgIyBpZiAhQEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkdACisgCitAQCAtNDIzLDYgKzM3MSw2IEBAIF9HTF9XQVJOX09OX1VTRSAoc2lnYWN0aW9uLCAic2lnYWN0aW9uIGkKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NJR05BTF9IICovCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TSUdOQUxfSCAqLworKyNlbmRpZiAvKiBfR0xfU0lHTkFMX0ggKi8KKysjZW5kaWYgLyogX0dMX1NJR05BTF9IICovCisgI2VuZGlmCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0YXQuYyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGF0LmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0YXQuYwkyMDExLTA4LTA3IDA2OjQyOjA2LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbGliL3N0YXQuYwkyMDEyLTAxLTA4IDAyOjA3OjQwLjMzMDQ4NDQ1NyAtMDgwMAorQEAgLTM4LDcgKzM4LDYgQEAgb3JpZ19zdGF0IChjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0CisgI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgImRvc25hbWUuaCIKKy0jaW5jbHVkZSAidmVyaWZ5LmgiCisgCisgLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgTkFNRSBpbnRvIFNULiAgV29yayBhcm91bmQgYnVncyB3aXRoCisgICAgdHJhaWxpbmcgc2xhc2hlcy4gIE1pbmd3IGhhcyBvdGhlciBidWdzIChzdWNoIGFzIHN0X2lubyBhbHdheXMKK0BAIC02NCwxMiArNjMsNiBAQCBycGxfc3RhdCAoY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQKKyAgICAgfQorICNlbmRpZiAvKiBSRVBMQUNFX0ZVTkNfU1RBVF9GSUxFICovCisgI2lmIFJFUExBQ0VfRlVOQ19TVEFUX0RJUgorLSAgLyogVGhlIG9ubHkga25vd24gc3lzdGVtcyB3aGVyZSBSRVBMQUNFX0ZVTkNfU1RBVF9ESVIgaXMgbmVlZGVkIGFsc28KKy0gICAgIGhhdmUgYSBjb25zdGFudCBQQVRIX01BWC4gICovCistIyBpZm5kZWYgUEFUSF9NQVgKKy0jICBlcnJvciAiUGxlYXNlIHBvcnQgdGhpcyByZXBsYWNlbWVudCB0byB5b3VyIHBsYXRmb3JtIgorLSMgZW5kaWYKKy0KKyAgIGlmIChyZXN1bHQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKQorICAgICB7CisgICAgICAgLyogRHVlIHRvIG1pbmd3J3Mgb2RkaXRpZXMsIHRoZXJlIGFyZSBzb21lIGRpcmVjdG9yaWVzIChsaWtlCitAQCAtODQsNyArNzcsNiBAQCBycGxfc3RhdCAoY2hhciBjb25zdCAqbmFtZSwgc3RydWN0IHN0YXQKKyAgICAgICBjaGFyIGZpeGVkX25hbWVbUEFUSF9NQVggKyAxXSA9IHswfTsKKyAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChuYW1lKTsKKyAgICAgICBib29sIGNoZWNrX2RpciA9IGZhbHNlOworLSAgICAgIHZlcmlmeSAoUEFUSF9NQVggPD0gNDA5Nik7CisgICAgICAgaWYgKFBBVEhfTUFYIDw9IGxlbikKKyAgICAgICAgIGVycm5vID0gRU5BTUVUT09MT05HOworICAgICAgIGVsc2UgaWYgKGxlbikKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkZGVmLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkZGVmLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGRlZi5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RkZGVmLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC4zNDY0ODQ0NTggLTA4MDAKK0BAIC0zOCw5ICszOCw5IEBACisgICAgcmVtZW1iZXIgaWYgc3BlY2lhbCBpbnZvY2F0aW9uIGhhcyBldmVyIGJlZW4gdXNlZCB0byBvYnRhaW4gd2ludF90LAorICAgIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBjbGVhbiB1cCBOVUxMIHlldCBhZ2Fpbi4gICovCisgCistIyBpZiAhKGRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICYmIGRlZmluZWQgX0dMX1NURERFRl9XSU5UX1QpCisrIyBpZiAhKGRlZmluZWQgX0dMX1NURERFRl9IICYmIGRlZmluZWQgX0dMX1NURERFRl9XSU5UX1QpCisgIyAgaWZkZWYgX19uZWVkX3dpbnRfdAorLSMgICB1bmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKysjICAgdW5kZWYgX0dMX1NURERFRl9ICisgIyAgIGRlZmluZSBfR0xfU1REREVGX1dJTlRfVAorICMgIGVuZGlmCisgIyAgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1REREVGX0hACitAQCAtNDksMTQgKzQ5LDE0IEBACisgI2Vsc2UKKyAvKiBOb3JtYWwgaW52b2NhdGlvbiBjb252ZW50aW9uLiAgKi8KKyAKKy0jIGlmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1REREVGX0gKKysjIGlmbmRlZiBfR0xfU1REREVGX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgCisgIyAgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1REREVGX0hACisgCistIyAgaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSAorLSMgICBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1NURERFRl9ICisrIyAgaWZuZGVmIF9HTF9TVERERUZfSAorKyMgICBkZWZpbmUgX0dMX1NURERFRl9ICisgCisgLyogT24gTmV0QlNEIDUuMCwgdGhlIGRlZmluaXRpb24gb2YgTlVMTCBsYWNrcyBwcm9wZXIgcGFyZW50aGVzZXMuICAqLworICNpZiBAUkVQTEFDRV9OVUxMQAorQEAgLTgyLDYgKzgyLDYgQEAKKyAjIGRlZmluZSB3Y2hhcl90IGludAorICNlbmRpZgorIAorLSMgIGVuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERERUZfSCAqLworLSMgZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NURERFRl9IICovCisrIyAgZW5kaWYgLyogX0dMX1NURERFRl9IICovCisrIyBlbmRpZiAvKiBfR0xfU1REREVGX0ggKi8KKyAjZW5kaWYgLyogX19uZWVkX1hYWCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpbnQuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpbnQuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkaW50LmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpbnQuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM1ODQ4NDQ1OCAtMDgwMAorQEAgLTIxLDcgKzIxLDcgQEAKKyAgKiA8aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3N1c3YzeGJkL3N0ZGludC5oLmh0bWw+CisgICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0gKKysjaWZuZGVmIF9HTF9TVERJTlRfSAorIAorICNpZiBfX0dOVUNfXyA+PSAzCisgQFBSQUdNQV9TWVNURU1fSEVBREVSQAorQEAgLTUyLDEzICs1MiwxMyBAQAorICAgLyogT3RoZXIgc3lzdGVtcyBtYXkgaGF2ZSBhbiBpbmNvbXBsZXRlIG9yIGJ1Z2d5IDxzdGRpbnQuaD4uCisgICAgICBJbmNsdWRlIGl0IGJlZm9yZSA8aW50dHlwZXMuaD4sIHNpbmNlIGFueSAiI2luY2x1ZGUgPHN0ZGludC5oPiIKKyAgICAgIGluIDxpbnR0eXBlcy5oPiB3b3VsZCByZWluY2x1ZGUgdXMsIHNraXBwaW5nIG91ciBjb250ZW50cyBiZWNhdXNlCistICAgICBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggaXMgZGVmaW5lZC4KKysgICAgIF9HTF9TVERJTlRfSCBpcyBkZWZpbmVkLgorICAgICAgVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RESU5UX0hACisgI2VuZGlmCisgCistI2lmICEgZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggJiYgISBkZWZpbmVkIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0gKKysjaWYgISBkZWZpbmVkIF9HTF9TVERJTlRfSCAmJiAhIGRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gKKysjZGVmaW5lIF9HTF9TVERJTlRfSAorIAorIC8qIDxzeXMvdHlwZXMuaD4gZGVmaW5lcyBzb21lIG9mIHRoZSBzdGRpbnQuaCB0eXBlcyBhcyB3ZWxsLCBvbiBnbGliYywKKyAgICBJUklYIDYuNSwgYW5kIE9wZW5CU0QgMy44ICh2aWEgPG1hY2hpbmUvdHlwZXMuaD4pLgorQEAgLTI3MCwzNiArMjcwLDI2IEBAIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgZ2xfdWludHB0cl90OworIC8qIE5vdGU6IFRoZXNlIHR5cGVzIGFyZSBjb21waWxlciBkZXBlbmRlbnQuIEl0IG1heSBiZSB1bndpc2UgdG8gdXNlIHRoZW0gaW4KKyAgICBwdWJsaWMgaGVhZGVyIGZpbGVzLiAqLworIAorLS8qIElmIHRoZSBzeXN0ZW0gZGVmaW5lcyBJTlRNQVhfTUFYLCBhc3N1bWUgdGhhdCBpbnRtYXhfdCB3b3JrcywgYW5kCistICAgc2ltaWxhcmx5IGZvciBVSU5UTUFYX01BWCBhbmQgdWludG1heF90LiAgVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2l0aAorLSAgIGFzc3VtaW5nIG9uZSB0eXBlIHdoZXJlIGFub3RoZXIgaXMgdXNlZCBieSB0aGUgc3lzdGVtLiAgKi8KKy0KKy0jaWZuZGVmIElOVE1BWF9NQVgKKy0jIHVuZGVmIElOVE1BWF9DCistIyB1bmRlZiBpbnRtYXhfdAorLSMgaWYgQEhBVkVfTE9OR19MT05HX0lOVEAgJiYgTE9OR19NQVggPj4gMzAgPT0gMQorKyN1bmRlZiBpbnRtYXhfdAorKyNpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCisgdHlwZWRlZiBsb25nIGxvbmcgaW50IGdsX2ludG1heF90OworLSMgIGRlZmluZSBpbnRtYXhfdCBnbF9pbnRtYXhfdAorLSMgZWxpZiBkZWZpbmVkIEdMX0lOVDY0X1QKKy0jICBkZWZpbmUgaW50bWF4X3QgaW50NjRfdAorLSMgZWxzZQorKyMgZGVmaW5lIGludG1heF90IGdsX2ludG1heF90CisrI2VsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCisrIyBkZWZpbmUgaW50bWF4X3QgaW50NjRfdAorKyNlbHNlCisgdHlwZWRlZiBsb25nIGludCBnbF9pbnRtYXhfdDsKKy0jICBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKy0jIGVuZGlmCisrIyBkZWZpbmUgaW50bWF4X3QgZ2xfaW50bWF4X3QKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIFVJTlRNQVhfTUFYCistIyB1bmRlZiBVSU5UTUFYX0MKKy0jIHVuZGVmIHVpbnRtYXhfdAorLSMgaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKysjdW5kZWYgdWludG1heF90CisrI2lmIEBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlRAICYmIFVMT05HX01BWCA+PiAzMSA9PSAxCisgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IGdsX3VpbnRtYXhfdDsKKy0jICBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorLSMgZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCistIyAgZGVmaW5lIHVpbnRtYXhfdCB1aW50NjRfdAorLSMgZWxzZQorKyMgZGVmaW5lIHVpbnRtYXhfdCBnbF91aW50bWF4X3QKKysjZWxpZiBkZWZpbmVkIEdMX1VJTlQ2NF9UCisrIyBkZWZpbmUgdWludG1heF90IHVpbnQ2NF90CisrI2Vsc2UKKyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGdsX3VpbnRtYXhfdDsKKy0jICBkZWZpbmUgdWludG1heF90IGdsX3VpbnRtYXhfdAorLSMgZW5kaWYKKysjIGRlZmluZSB1aW50bWF4X3QgZ2xfdWludG1heF90CisgI2VuZGlmCisgCisgLyogVmVyaWZ5IHRoYXQgaW50bWF4X3QgYW5kIHVpbnRtYXhfdCBoYXZlIHRoZSBzYW1lIHNpemUuICBUb28gbXVjaCBjb2RlCitAQCAtNDQxLDIzICs0MzEsMjEgQEAgdHlwZWRlZiBpbnQgX3ZlcmlmeV9pbnRtYXhfc2l6ZVtzaXplb2YgKAorIAorIC8qIDcuMTguMi41LiBMaW1pdHMgb2YgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciB0eXBlcyAqLworIAorLSNpZm5kZWYgSU5UTUFYX01BWAorLSMgdW5kZWYgSU5UTUFYX01JTgorLSMgaWZkZWYgSU5UNjRfTUFYCistIyAgZGVmaW5lIElOVE1BWF9NSU4gIElOVDY0X01JTgorLSMgIGRlZmluZSBJTlRNQVhfTUFYICBJTlQ2NF9NQVgKKy0jIGVsc2UKKy0jICBkZWZpbmUgSU5UTUFYX01JTiAgSU5UMzJfTUlOCistIyAgZGVmaW5lIElOVE1BWF9NQVggIElOVDMyX01BWAorLSMgZW5kaWYKKysjdW5kZWYgSU5UTUFYX01JTgorKyN1bmRlZiBJTlRNQVhfTUFYCisrI2lmZGVmIElOVDY0X01BWAorKyMgZGVmaW5lIElOVE1BWF9NSU4gIElOVDY0X01JTgorKyMgZGVmaW5lIElOVE1BWF9NQVggIElOVDY0X01BWAorKyNlbHNlCisrIyBkZWZpbmUgSU5UTUFYX01JTiAgSU5UMzJfTUlOCisrIyBkZWZpbmUgSU5UTUFYX01BWCAgSU5UMzJfTUFYCisgI2VuZGlmCisgCistI2lmbmRlZiBVSU5UTUFYX01BWAorLSMgaWZkZWYgVUlOVDY0X01BWAorLSMgIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDY0X01BWAorLSMgZWxzZQorLSMgIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDMyX01BWAorLSMgZW5kaWYKKysjdW5kZWYgVUlOVE1BWF9NQVgKKysjaWZkZWYgVUlOVDY0X01BWAorKyMgZGVmaW5lIFVJTlRNQVhfTUFYICBVSU5UNjRfTUFYCisrI2Vsc2UKKysjIGRlZmluZSBVSU5UTUFYX01BWCAgVUlOVDMyX01BWAorICNlbmRpZgorIAorIC8qIDcuMTguMy4gTGltaXRzIG9mIG90aGVyIGludGVnZXIgdHlwZXMgKi8KK0BAIC01ODAsMjcgKzU2OCwyNSBAQCB0eXBlZGVmIGludCBfdmVyaWZ5X2ludG1heF9zaXplW3NpemVvZiAoCisgCisgLyogNy4xOC40LjIuIE1hY3JvcyBmb3IgZ3JlYXRlc3Qtd2lkdGggaW50ZWdlciBjb25zdGFudHMgKi8KKyAKKy0jaWZuZGVmIElOVE1BWF9DCistIyBpZiBASEFWRV9MT05HX0xPTkdfSU5UQCAmJiBMT05HX01BWCA+PiAzMCA9PSAxCistIyAgZGVmaW5lIElOVE1BWF9DKHgpICAgeCMjTEwKKy0jIGVsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCistIyAgZGVmaW5lIElOVE1BWF9DKHgpICAgSU5UNjRfQyh4KQorLSMgZWxzZQorLSMgIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0wKKy0jIGVuZGlmCisrI3VuZGVmIElOVE1BWF9DCisrI2lmIEBIQVZFX0xPTkdfTE9OR19JTlRAICYmIExPTkdfTUFYID4+IDMwID09IDEKKysjIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0xMCisrI2VsaWYgZGVmaW5lZCBHTF9JTlQ2NF9UCisrIyBkZWZpbmUgSU5UTUFYX0MoeCkgICBJTlQ2NF9DKHgpCisrI2Vsc2UKKysjIGRlZmluZSBJTlRNQVhfQyh4KSAgIHgjI0wKKyAjZW5kaWYKKyAKKy0jaWZuZGVmIFVJTlRNQVhfQworLSMgaWYgQEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVEAgJiYgVUxPTkdfTUFYID4+IDMxID09IDEKKy0jICBkZWZpbmUgVUlOVE1BWF9DKHgpICB4IyNVTEwKKy0jIGVsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorLSMgIGRlZmluZSBVSU5UTUFYX0MoeCkgIFVJTlQ2NF9DKHgpCistIyBlbHNlCistIyAgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUwKKy0jIGVuZGlmCisrI3VuZGVmIFVJTlRNQVhfQworKyNpZiBASEFWRV9VTlNJR05FRF9MT05HX0xPTkdfSU5UQCAmJiBVTE9OR19NQVggPj4gMzEgPT0gMQorKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUxMCisrI2VsaWYgZGVmaW5lZCBHTF9VSU5UNjRfVAorKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgVUlOVDY0X0MoeCkKKysjZWxzZQorKyMgZGVmaW5lIFVJTlRNQVhfQyh4KSAgeCMjVUwKKyAjZW5kaWYKKyAKKyAjZW5kaWYgLyogIWRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfX1NURENfQ09OU1RBTlRfTUFDUk9TICovCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERJTlRfSCAqLworLSNlbmRpZiAvKiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfU1RESU5UX0ggJiYgIWRlZmluZWQgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURElOVF9IICovCisrI2VuZGlmIC8qICFkZWZpbmVkIF9HTF9TVERJTlRfSCAmJiAhZGVmaW5lZCBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRpby5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3N0ZGlvLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0ZGlvLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRpby5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuMzc4NDg0NDU5IC0wODAwCitAQCAtMzUsNyArMzUsNyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSAorKyNpZm5kZWYgX0dMX1NURElPX0gKKyAKKyAjZGVmaW5lIF9HTF9BTFJFQURZX0lOQ0xVRElOR19TVERJT19ICisgCitAQCAtNDQsOCArNDQsOCBAQAorIAorICN1bmRlZiBfR0xfQUxSRUFEWV9JTkNMVURJTkdfU1RESU9fSAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NURElPX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERJT19ICisrI2lmbmRlZiBfR0xfU1RESU9fSAorKyNkZWZpbmUgX0dMX1NURElPX0gKKyAKKyAvKiBHZXQgdmFfbGlzdC4gIE5lZWRlZCBvbiBtYW55IHN5c3RlbXMsIGluY2x1ZGluZyBnbGliYyAyLjguICAqLworICNpbmNsdWRlIDxzdGRhcmcuaD4KK0BAIC00NjEsNiArNDYxLDI1IEBAIF9HTF9GVU5DREVDTF9TWVMgKGZzZWVrbywgaW50LCAoRklMRSAqZnAKKyBfR0xfQ1hYQUxJQVNfU1lTIChmc2Vla28sIGludCwgKEZJTEUgKmZwLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKyAjIGVuZGlmCisgX0dMX0NYWEFMSUFTV0FSTiAoZnNlZWtvKTsKKysjIGlmIChAUkVQTEFDRV9GU0VFS09AIHx8ICFASEFWRV9GU0VFS09AKSAmJiAhQEdOVUxJQl9GU0VFS0AKKysgICAvKiBQcm92aWRlIGFuIGZzZWVrIGZ1bmN0aW9uIHRoYXQgaXMgY29uc2lzdGVudCB3aXRoIGZzZWVrby4gICovCisrICAgLyogSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCBmc2VlayBnZXRzIGRlZmluZWQgYXMgYSBtYWNybyBoZXJlLCB0aGUKKysgICAgICBkZXZlbG9wZXIgY2FuIHJlcXVlc3QgdGhlICdmc2VlaycgbW9kdWxlLiAgKi8KKysjICBpZiAhR05VTElCX2RlZmluZWRfZnNlZWtfZnVuY3Rpb24KKysjICAgdW5kZWYgZnNlZWsKKysjICAgZGVmaW5lIGZzZWVrIHJwbF9mc2VlaworK3N0YXRpYyBpbmxpbmUgaW50IF9HTF9BUkdfTk9OTlVMTCAoKDEpKQorK3JwbF9mc2VlayAoRklMRSAqZnAsIGxvbmcgb2Zmc2V0LCBpbnQgd2hlbmNlKQorK3sKKysjICAgaWYgQFJFUExBQ0VfRlNFRUtPQAorKyAgcmV0dXJuIHJwbF9mc2Vla28gKGZwLCBvZmZzZXQsIHdoZW5jZSk7CisrIyAgIGVsc2UKKysgIHJldHVybiBmc2Vla28gKGZwLCBvZmZzZXQsIHdoZW5jZSk7CisrIyAgIGVuZGlmCisrfQorKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfZnNlZWtfZnVuY3Rpb24gMQorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAjIGRlZmluZSBfR0xfRlNFRUtfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisgIyB1bmRlZiBmc2VlaworQEAgLTUyMCw2ICs1MzksMjUgQEAgX0dMX0ZVTkNERUNMX1NZUyAoZnRlbGxvLCBvZmZfdCwgKEZJTEUgKgorIF9HTF9DWFhBTElBU19TWVMgKGZ0ZWxsbywgb2ZmX3QsIChGSUxFICpmcCkpOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNXQVJOIChmdGVsbG8pOworKyMgaWYgKEBSRVBMQUNFX0ZURUxMT0AgfHwgIUBIQVZFX0ZURUxMT0ApICYmICFAR05VTElCX0ZURUxMQAorKyAgIC8qIFByb3ZpZGUgYW4gZnRlbGwgZnVuY3Rpb24gdGhhdCBpcyBjb25zaXN0ZW50IHdpdGggZnRlbGxvLiAgKi8KKysgICAvKiBJbiBvcmRlciB0byBhdm9pZCB0aGF0IGZ0ZWxsIGdldHMgZGVmaW5lZCBhcyBhIG1hY3JvIGhlcmUsIHRoZQorKyAgICAgIGRldmVsb3BlciBjYW4gcmVxdWVzdCB0aGUgJ2Z0ZWxsJyBtb2R1bGUuICAqLworKyMgIGlmICFHTlVMSUJfZGVmaW5lZF9mdGVsbF9mdW5jdGlvbgorKyMgICB1bmRlZiBmdGVsbAorKyMgICBkZWZpbmUgZnRlbGwgcnBsX2Z0ZWxsCisrc3RhdGljIGlubGluZSBsb25nIF9HTF9BUkdfTk9OTlVMTCAoKDEpKQorK3JwbF9mdGVsbCAoRklMRSAqZikKKyt7CisrIyAgIGlmIEBSRVBMQUNFX0ZURUxMT0AKKysgIHJldHVybiBycGxfZnRlbGxvIChmKTsKKysjICAgZWxzZQorKyAgcmV0dXJuIGZ0ZWxsbyAoZik7CisrIyAgIGVuZGlmCisrfQorKyMgICBkZWZpbmUgR05VTElCX2RlZmluZWRfZnRlbGxfZnVuY3Rpb24gMQorKyMgIGVuZGlmCisrIyBlbmRpZgorICNlbGlmIGRlZmluZWQgR05VTElCX1BPU0lYQ0hFQ0sKKyAjIGRlZmluZSBfR0xfRlRFTExfV0FSTiAvKiBDYXRlZ29yeSAxLCBhYm92ZS4gICovCisgIyB1bmRlZiBmdGVsbAorQEAgLTEzMDcsNiArMTM0NSw2IEBAIF9HTF9XQVJOX09OX1VTRSAodnNwcmludGYsICJ2c3ByaW50ZiBpcworICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RESU9fSCAqLworKyNlbmRpZiAvKiBfR0xfU1RESU9fSCAqLworKyNlbmRpZiAvKiBfR0xfU1RESU9fSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdGRsaWIuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRsaWIuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RkbGliLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdGRsaWIuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjM5MDQ4NDQ1OSAtMDgwMAorQEAgLTI4LDEzICsyOCwxMyBAQAorICNlbHNlCisgLyogTm9ybWFsIGludm9jYXRpb24gY29udmVudGlvbi4gICovCisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKysjaWZuZGVmIF9HTF9TVERMSUJfSAorIAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RETElCX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSAorKyNpZm5kZWYgX0dMX1NURExJQl9ICisrI2RlZmluZSBfR0xfU1RETElCX0gKKyAKKyAvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworICNpbmNsdWRlIDxzdGRkZWYuaD4KK0BAIC04OSw3ICs4OSwxMSBAQCBzdHJ1Y3QgcmFuZG9tX2RhdGEKKyAjIGluY2x1ZGUgPHVuaXN0ZC5oPgorICNlbmRpZgorIAorLS8qIFRoZSBkZWZpbml0aW9uIG9mIF9Ob3JldHVybiBpcyBjb3BpZWQgaGVyZS4gICovCisrI2lmIDMgPD0gX19HTlVDX18gfHwgX19HTlVDX18gPT0gMiAmJiA4IDw9IF9fR05VQ19NSU5PUl9fCisrIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9OT1JFVFVSTiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKysjZWxzZQorKyMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4KKysjZW5kaWYKKyAKKyAvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisgCitAQCAtMTE2LDcgKzEyMCw3IEBAIHN0cnVjdCByYW5kb21fZGF0YQorIC8qIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBwcm9jZXNzIHdpdGggdGhlIGdpdmVuIHJldHVybiBjb2RlLCB3aXRob3V0IHJ1bm5pbmcKKyAgICB0aGUgJ2F0ZXhpdCcgaGFuZGxlcnMuICAqLworICMgaWYgIUBIQVZFX19FWElUQAorLV9HTF9GVU5DREVDTF9TWVMgKF9FeGl0LCBfTm9yZXR1cm4gdm9pZCwgKGludCBzdGF0dXMpKTsKKytfR0xfRlVOQ0RFQ0xfU1lTIChfRXhpdCwgdm9pZCwgKGludCBzdGF0dXMpIF9HTF9BVFRSSUJVVEVfTk9SRVRVUk4pOworICMgZW5kaWYKKyBfR0xfQ1hYQUxJQVNfU1lTIChfRXhpdCwgdm9pZCwgKGludCBzdGF0dXMpKTsKKyBfR0xfQ1hYQUxJQVNXQVJOIChfRXhpdCk7CitAQCAtNzU3LDYgKzc2MSw2IEBAIF9HTF9DWFhBTElBU1dBUk4gKHdjdG9tYik7CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9TVERMSUJfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RETElCX0ggKi8KKysjZW5kaWYgLyogX0dMX1NURExJQl9IICovCisrI2VuZGlmIC8qIF9HTF9TVERMSUJfSCAqLworICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci5jIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci5jCTIwMTItMDEtMDggMDI6MDc6NDAuNDA2NDg0NDYxIC0wODAwCitAQCAtMTcsNTQgKzE3LDM0MCBAQAorIAorICNpbmNsdWRlIDxjb25maWcuaD4KKyAKKy0vKiBTcGVjaWZpY2F0aW9uLiAgKi8KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgCistI2luY2x1ZGUgPGVycm5vLmg+CistI2luY2x1ZGUgPHN0ZGlvLmg+CistI2luY2x1ZGUgPHN0ZGxpYi5oPgorLSNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaWYgUkVQTEFDRV9TVFJFUlJPUgorKworKyMgaW5jbHVkZSA8ZXJybm8uaD4KKysjIGluY2x1ZGUgPHN0ZGlvLmg+CisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKysjICBpZiBIQVZFX1dJTlNPQ0syX0gKKysjICAgaW5jbHVkZSA8d2luc29jazIuaD4KKysjICBlbmRpZgorKyMgZW5kaWYKKyAKKy0jaW5jbHVkZSAiaW50cHJvcHMuaCIKKy0jaW5jbHVkZSAic3RyZXJyb3Itb3ZlcnJpZGUuaCIKKy0jaW5jbHVkZSAidmVyaWZ5LmgiCisrIyBpbmNsdWRlICJpbnRwcm9wcy5oIgorIAorIC8qIFVzZSB0aGUgc3lzdGVtIGZ1bmN0aW9ucywgbm90IHRoZSBnbnVsaWIgb3ZlcnJpZGVzIGluIHRoaXMgZmlsZS4gICovCistI3VuZGVmIHNwcmludGYKKysjIHVuZGVmIHNwcmludGYKKysKKysjIHVuZGVmIHN0cmVycm9yCisrIyBpZiAhIEhBVkVfREVDTF9TVFJFUlJPUgorKyMgIGRlZmluZSBzdHJlcnJvcihuKSBOVUxMCisrIyBlbmRpZgorIAorIGNoYXIgKgorLXN0cmVycm9yIChpbnQgbikKKy0jdW5kZWYgc3RyZXJyb3IKKytycGxfc3RyZXJyb3IgKGludCBuKQorIHsKKy0gIHN0YXRpYyBjaGFyIGJ1ZltTVEFDS0JVRl9MRU5dOworLSAgc2l6ZV90IGxlbjsKKysgIGNoYXIgY29uc3QgKm1zZyA9IE5VTEw7CisrICAvKiBUaGVzZSBlcnJvciBtZXNzYWdlcyBhcmUgdGFrZW4gZnJvbSBnbGliYy9zeXNkZXBzL2dudS9lcnJsaXN0LmMuICAqLworKyAgc3dpdGNoIChuKQorKyAgICB7CisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FVFhUQlNZCisrICAgIGNhc2UgRVRYVEJTWToKKysgICAgICBtc2cgPSAiVGV4dCBmaWxlIGJ1c3kiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VTT0NLIC8qIG5hdGl2ZSBXaW5kb3dzIHBsYXRmb3JtcyAqLworKyAgICAvKiBFV09VTERCTE9DSyBpcyB0aGUgc2FtZSBhcyBFQUdBSU4uICAqLworKyAgICBjYXNlIEVJTlBST0dSRVNTOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUxSRUFEWToKKysgICAgICBtc2cgPSAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1RTT0NLOgorKyAgICAgIG1zZyA9ICJTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVERVNUQUREUlJFUToKKysgICAgICBtc2cgPSAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU1TR1NJWkU6CisrICAgICAgbXNnID0gIk1lc3NhZ2UgdG9vIGxvbmciOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQUk9UT1RZUEU6CisrICAgICAgbXNnID0gIlByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5PUFJPVE9PUFQ6CisrICAgICAgbXNnID0gIlByb3RvY29sIG5vdCBhdmFpbGFibGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQUk9UT05PU1VQUE9SVDoKKysgICAgICBtc2cgPSAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVNPQ0tUTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFT1BOT1RTVVBQOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVBGTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUFGTk9TVVBQT1JUOgorKyAgICAgIG1zZyA9ICJBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUREUklOVVNFOgorKyAgICAgIG1zZyA9ICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFQUREUk5PVEFWQUlMOgorKyAgICAgIG1zZyA9ICJDYW5ub3QgYXNzaWduIHJlcXVlc3RlZCBhZGRyZXNzIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTkVURE9XTjoKKysgICAgICBtc2cgPSAiTmV0d29yayBpcyBkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTkVUVU5SRUFDSDoKKysgICAgICBtc2cgPSAiTmV0d29yayBpcyB1bnJlYWNoYWJsZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRU5FVFJFU0VUOgorKyAgICAgIG1zZyA9ICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBvbiByZXNldCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorKyAgICAgIG1zZyA9ICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUNPTk5SRVNFVDoKKysgICAgICBtc2cgPSAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFTk9CVUZTOgorKyAgICAgIG1zZyA9ICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSVNDT05OOgorKyAgICAgIG1zZyA9ICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVOT1RDT05OOgorKyAgICAgIG1zZyA9ICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgbm90IGNvbm5lY3RlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVNIVVRET1dOOgorKyAgICAgIG1zZyA9ICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVUT09NQU5ZUkVGUzoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVRJTUVET1VUOgorKyAgICAgIG1zZyA9ICJDb25uZWN0aW9uIHRpbWVkIG91dCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRUNPTk5SRUZVU0VEOgorKyAgICAgIG1zZyA9ICJDb25uZWN0aW9uIHJlZnVzZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVMT09QOgorKyAgICAgIG1zZyA9ICJUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3MiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVIT1NURE9XTjoKKysgICAgICBtc2cgPSAiSG9zdCBpcyBkb3duIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBFSE9TVFVOUkVBQ0g6CisrICAgICAgbXNnID0gIk5vIHJvdXRlIHRvIGhvc3QiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVQUk9DTElNOgorKyAgICAgIG1zZyA9ICJUb28gbWFueSBwcm9jZXNzZXMiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVVU0VSUzoKKysgICAgICBtc2cgPSAiVG9vIG1hbnkgdXNlcnMiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVEUVVPVDoKKysgICAgICBtc2cgPSAiRGlzayBxdW90YSBleGNlZWRlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgRVNUQUxFOgorKyAgICAgIG1zZyA9ICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIEVSRU1PVEU6CisrICAgICAgbXNnID0gIk9iamVjdCBpcyByZW1vdGUiOworKyAgICAgIGJyZWFrOworKyMgIGlmIEhBVkVfV0lOU09DSzJfSAorKyAgICAvKiBXU0FfSU5WQUxJRF9IQU5ETEUgbWFwcyB0byBFQkFERiAqLworKyAgICAvKiBXU0FfTk9UX0VOT1VHSF9NRU1PUlkgbWFwcyB0byBFTk9NRU0gKi8KKysgICAgLyogV1NBX0lOVkFMSURfUEFSQU1FVEVSIG1hcHMgdG8gRUlOVkFMICovCisrICAgIGNhc2UgV1NBX09QRVJBVElPTl9BQk9SVEVEOgorKyAgICAgIG1zZyA9ICJPdmVybGFwcGVkIG9wZXJhdGlvbiBhYm9ydGVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FfSU9fSU5DT01QTEVURToKKysgICAgICBtc2cgPSAiT3ZlcmxhcHBlZCBJL08gZXZlbnQgb2JqZWN0IG5vdCBpbiBzaWduYWxlZCBzdGF0ZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBX0lPX1BFTkRJTkc6CisrICAgICAgbXNnID0gIk92ZXJsYXBwZWQgb3BlcmF0aW9ucyB3aWxsIGNvbXBsZXRlIGxhdGVyIjsKKysgICAgICBicmVhazsKKysgICAgLyogV1NBRUlOVFIgbWFwcyB0byBFSU5UUiAqLworKyAgICAvKiBXU0FFQkFERiBtYXBzIHRvIEVCQURGICovCisrICAgIC8qIFdTQUVBQ0NFUyBtYXBzIHRvIEVBQ0NFUyAqLworKyAgICAvKiBXU0FFRkFVTFQgbWFwcyB0byBFRkFVTFQgKi8KKysgICAgLyogV1NBRUlOVkFMIG1hcHMgdG8gRUlOVkFMICovCisrICAgIC8qIFdTQUVNRklMRSBtYXBzIHRvIEVNRklMRSAqLworKyAgICAvKiBXU0FFV09VTERCTE9DSyBtYXBzIHRvIEVXT1VMREJMT0NLICovCisrICAgIC8qIFdTQUVJTlBST0dSRVNTIGlzIEVJTlBST0dSRVNTICovCisrICAgIC8qIFdTQUVBTFJFQURZIGlzIEVBTFJFQURZICovCisrICAgIC8qIFdTQUVOT1RTT0NLIGlzIEVOT1RTT0NLICovCisrICAgIC8qIFdTQUVERVNUQUREUlJFUSBpcyBFREVTVEFERFJSRVEgKi8KKysgICAgLyogV1NBRU1TR1NJWkUgaXMgRU1TR1NJWkUgKi8KKysgICAgLyogV1NBRVBST1RPVFlQRSBpcyBFUFJPVE9UWVBFICovCisrICAgIC8qIFdTQUVOT1BST1RPT1BUIGlzIEVOT1BST1RPT1BUICovCisrICAgIC8qIFdTQUVQUk9UT05PU1VQUE9SVCBpcyBFUFJPVE9OT1NVUFBPUlQgKi8KKysgICAgLyogV1NBRVNPQ0tUTk9TVVBQT1JUIGlzIEVTT0NLVE5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFT1BOT1RTVVBQIGlzIEVPUE5PVFNVUFAgKi8KKysgICAgLyogV1NBRVBGTk9TVVBQT1JUIGlzIEVQRk5PU1VQUE9SVCAqLworKyAgICAvKiBXU0FFQUZOT1NVUFBPUlQgaXMgRUFGTk9TVVBQT1JUICovCisrICAgIC8qIFdTQUVBRERSSU5VU0UgaXMgRUFERFJJTlVTRSAqLworKyAgICAvKiBXU0FFQUREUk5PVEFWQUlMIGlzIEVBRERSTk9UQVZBSUwgKi8KKysgICAgLyogV1NBRU5FVERPV04gaXMgRU5FVERPV04gKi8KKysgICAgLyogV1NBRU5FVFVOUkVBQ0ggaXMgRU5FVFVOUkVBQ0ggKi8KKysgICAgLyogV1NBRU5FVFJFU0VUIGlzIEVORVRSRVNFVCAqLworKyAgICAvKiBXU0FFQ09OTkFCT1JURUQgaXMgRUNPTk5BQk9SVEVEICovCisrICAgIC8qIFdTQUVDT05OUkVTRVQgaXMgRUNPTk5SRVNFVCAqLworKyAgICAvKiBXU0FFTk9CVUZTIGlzIEVOT0JVRlMgKi8KKysgICAgLyogV1NBRUlTQ09OTiBpcyBFSVNDT05OICovCisrICAgIC8qIFdTQUVOT1RDT05OIGlzIEVOT1RDT05OICovCisrICAgIC8qIFdTQUVTSFVURE9XTiBpcyBFU0hVVERPV04gKi8KKysgICAgLyogV1NBRVRPT01BTllSRUZTIGlzIEVUT09NQU5ZUkVGUyAqLworKyAgICAvKiBXU0FFVElNRURPVVQgaXMgRVRJTUVET1VUICovCisrICAgIC8qIFdTQUVDT05OUkVGVVNFRCBpcyBFQ09OTlJFRlVTRUQgKi8KKysgICAgLyogV1NBRUxPT1AgaXMgRUxPT1AgKi8KKysgICAgLyogV1NBRU5BTUVUT09MT05HIG1hcHMgdG8gRU5BTUVUT09MT05HICovCisrICAgIC8qIFdTQUVIT1NURE9XTiBpcyBFSE9TVERPV04gKi8KKysgICAgLyogV1NBRUhPU1RVTlJFQUNIIGlzIEVIT1NUVU5SRUFDSCAqLworKyAgICAvKiBXU0FFTk9URU1QVFkgbWFwcyB0byBFTk9URU1QVFkgKi8KKysgICAgLyogV1NBRVBST0NMSU0gaXMgRVBST0NMSU0gKi8KKysgICAgLyogV1NBRVVTRVJTIGlzIEVVU0VSUyAqLworKyAgICAvKiBXU0FFRFFVT1QgaXMgRURRVU9UICovCisrICAgIC8qIFdTQUVTVEFMRSBpcyBFU1RBTEUgKi8KKysgICAgLyogV1NBRVJFTU9URSBpcyBFUkVNT1RFICovCisrICAgIGNhc2UgV1NBU1lTTk9UUkVBRFk6CisrICAgICAgbXNnID0gIk5ldHdvcmsgc3Vic3lzdGVtIGlzIHVuYXZhaWxhYmxlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FWRVJOT1RTVVBQT1JURUQ6CisrICAgICAgbXNnID0gIldpbnNvY2suZGxsIHZlcnNpb24gb3V0IG9mIHJhbmdlIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT1RJTklUSUFMSVNFRDoKKysgICAgICBtc2cgPSAiU3VjY2Vzc2Z1bCBXU0FTdGFydHVwIG5vdCB5ZXQgcGVyZm9ybWVkIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFRElTQ09OOgorKyAgICAgIG1zZyA9ICJHcmFjZWZ1bCBzaHV0ZG93biBpbiBwcm9ncmVzcyI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRU5PTU9SRTogY2FzZSBXU0FfRV9OT19NT1JFOgorKyAgICAgIG1zZyA9ICJObyBtb3JlIHJlc3VsdHMiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVDQU5DRUxMRUQ6IGNhc2UgV1NBX0VfQ0FOQ0VMTEVEOgorKyAgICAgIG1zZyA9ICJDYWxsIHdhcyBjYW5jZWxlZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRUlOVkFMSURQUk9DVEFCTEU6CisrICAgICAgbXNnID0gIlByb2NlZHVyZSBjYWxsIHRhYmxlIGlzIGludmFsaWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUVJTlZBTElEUFJPVklERVI6CisrICAgICAgbXNnID0gIlNlcnZpY2UgcHJvdmlkZXIgaXMgaW52YWxpZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBRVBST1ZJREVSRkFJTEVESU5JVDoKKysgICAgICBtc2cgPSAiU2VydmljZSBwcm92aWRlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBU1lTQ0FMTEZBSUxVUkU6CisrICAgICAgbXNnID0gIlN5c3RlbSBjYWxsIGZhaWx1cmUiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQVNFUlZJQ0VfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJTZXJ2aWNlIG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVFlQRV9OT1RfRk9VTkQ6CisrICAgICAgbXNnID0gIkNsYXNzIHR5cGUgbm90IGZvdW5kIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FFUkVGVVNFRDoKKysgICAgICBtc2cgPSAiRGF0YWJhc2UgcXVlcnkgd2FzIHJlZnVzZWQiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQUhPU1RfTk9UX0ZPVU5EOgorKyAgICAgIG1zZyA9ICJIb3N0IG5vdCBmb3VuZCI7CisrICAgICAgYnJlYWs7CisrICAgIGNhc2UgV1NBVFJZX0FHQUlOOgorKyAgICAgIG1zZyA9ICJOb25hdXRob3JpdGF0aXZlIGhvc3Qgbm90IGZvdW5kIjsKKysgICAgICBicmVhazsKKysgICAgY2FzZSBXU0FOT19SRUNPVkVSWToKKysgICAgICBtc2cgPSAiTm9ucmVjb3ZlcmFibGUgZXJyb3IiOworKyAgICAgIGJyZWFrOworKyAgICBjYXNlIFdTQU5PX0RBVEE6CisrICAgICAgbXNnID0gIlZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlIjsKKysgICAgICBicmVhazsKKysgICAgLyogV1NBX1FPU18qIG9taXR0ZWQgKi8KKysjICBlbmRpZgorKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VOT01TRworKyAgICBjYXNlIEVOT01TRzoKKysgICAgICBtc2cgPSAiTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VJRFJNCisrICAgIGNhc2UgRUlEUk06CisrICAgICAgbXNnID0gIklkZW50aWZpZXIgcmVtb3ZlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU5PTElOSworKyAgICBjYXNlIEVOT0xJTks6CisrICAgICAgbXNnID0gIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVBST1RPCisrICAgIGNhc2UgRVBST1RPOgorKyAgICAgIG1zZyA9ICJQcm90b2NvbCBlcnJvciI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU1VTFRJSE9QCisrICAgIGNhc2UgRU1VTFRJSE9QOgorKyAgICAgIG1zZyA9ICJNdWx0aWhvcCBhdHRlbXB0ZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VCQURNU0cKKysgICAgY2FzZSBFQkFETVNHOgorKyAgICAgIG1zZyA9ICJCYWQgbWVzc2FnZSI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XCisrICAgIGNhc2UgRU9WRVJGTE9XOgorKyAgICAgIG1zZyA9ICJWYWx1ZSB0b28gbGFyZ2UgZm9yIGRlZmluZWQgZGF0YSB0eXBlIjsKKysgICAgICBicmVhazsKKysjIGVuZGlmCisrCisrIyBpZiBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQCisrICAgIGNhc2UgRU5PVFNVUDoKKysgICAgICBtc2cgPSAiTm90IHN1cHBvcnRlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRVNUQUxFCisrICAgIGNhc2UgRVNUQUxFOgorKyAgICAgIG1zZyA9ICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysKKysjIGlmIEdOVUxJQl9kZWZpbmVkX0VEUVVPVAorKyAgICBjYXNlIEVEUVVPVDoKKysgICAgICBtc2cgPSAiRGlzayBxdW90YSBleGNlZWRlZCI7CisrICAgICAgYnJlYWs7CisrIyBlbmRpZgorKworKyMgaWYgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECisrICAgIGNhc2UgRUNBTkNFTEVEOgorKyAgICAgIG1zZyA9ICJPcGVyYXRpb24gY2FuY2VsZWQiOworKyAgICAgIGJyZWFrOworKyMgZW5kaWYKKysgICAgfQorIAorLSAgLyogQ2FzdCBhd2F5IGNvbnN0LCBkdWUgdG8gdGhlIGhpc3RvcmljYWwgc2lnbmF0dXJlIG9mIHN0cmVycm9yOworLSAgICAgY2FsbGVycyBzaG91bGQgbm90IGJlIG1vZGlmeWluZyB0aGUgc3RyaW5nLiAgKi8KKy0gIGNvbnN0IGNoYXIgKm1zZyA9IHN0cmVycm9yX292ZXJyaWRlIChuKTsKKyAgIGlmIChtc2cpCisgICAgIHJldHVybiAoY2hhciAqKSBtc2c7CisgCistICBtc2cgPSBzdHJlcnJvciAobik7CisrICB7CisrICAgIGNoYXIgKnJlc3VsdCA9IHN0cmVycm9yIChuKTsKKyAKKy0gIC8qIE91ciBzdHJlcnJvcl9yIGltcGxlbWVudGF0aW9uIG1pZ2h0IHVzZSB0aGUgc3lzdGVtJ3Mgc3RyZXJyb3IKKy0gICAgIGJ1ZmZlciwgc28gYWxsIG90aGVyIGNsaWVudHMgb2Ygc3RyZXJyb3IgaGF2ZSB0byBzZWUgdGhlIGVycm9yCistICAgICBjb3BpZWQgaW50byBhIGJ1ZmZlciB0aGF0IHdlIG1hbmFnZS4gIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLAorLSAgICAgZXZlbiBpZiB0aGUgc3lzdGVtIHN0cmVycm9yIGlzLCBidXQgcG9ydGFibGUgcHJvZ3JhbXMgc2hvdWxkbid0CistICAgICBiZSB1c2luZyBzdHJlcnJvciBpZiB0aGV5IGNhcmUgYWJvdXQgdGhyZWFkLXNhZmV0eS4gICovCistICBpZiAoIW1zZyB8fCAhKm1zZykKKy0gICAgeworLSAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZtdFtdID0gIlVua25vd24gZXJyb3IgJWQiOworLSAgICAgIHZlcmlmeSAoc2l6ZW9mIGJ1ZiA+PSBzaXplb2YgKGZtdCkgKyBJTlRfU1RSTEVOX0JPVU5EIChuKSk7CistICAgICAgc3ByaW50ZiAoYnVmLCBmbXQsIG4pOworLSAgICAgIGVycm5vID0gRUlOVkFMOworLSAgICAgIHJldHVybiBidWY7CistICAgIH0KKysgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8IHJlc3VsdFswXSA9PSAnXDAnKQorKyAgICAgIHsKKysgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGZtdFtdID0gIlVua25vd24gZXJyb3IgKCVkKSI7CisrICAgICAgICBzdGF0aWMgY2hhciBtc2dfYnVmW3NpemVvZiBmbXQgKyBJTlRfU1RSTEVOX0JPVU5EIChuKV07CisrICAgICAgICBzcHJpbnRmIChtc2dfYnVmLCBmbXQsIG4pOworKyAgICAgICAgcmV0dXJuIG1zZ19idWY7CisrICAgICAgfQorIAorLSAgLyogRml4IFNUQUNLQlVGX0xFTiBpZiB0aGlzIGV2ZXIgYWJvcnRzLiAgKi8KKy0gIGxlbiA9IHN0cmxlbiAobXNnKTsKKy0gIGlmIChzaXplb2YgYnVmIDw9IGxlbikKKy0gICAgYWJvcnQgKCk7CistCistICByZXR1cm4gbWVtY3B5IChidWYsIG1zZywgbGVuICsgMSk7CisrICAgIHJldHVybiByZXN1bHQ7CisrICB9CisgfQorKworKyNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jIGxpYmljb252LTEuMTQvc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3N0cmVycm9yLW92ZXJyaWRlLmMJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCitAQCAtMSwyNzkgKzAsMCBAQAorLS8qIHN0cmVycm9yLW92ZXJyaWRlLmMgLS0tIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtIGVycm9yIHJvdXRpbmUKKy0KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistLyogV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMTAuICAqLworLQorLSNpbmNsdWRlIDxjb25maWcuaD4KKy0KKy0jaW5jbHVkZSAic3RyZXJyb3Itb3ZlcnJpZGUuaCIKKy0KKy0jaW5jbHVkZSA8ZXJybm8uaD4KKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVNPQ0sgLyogbmF0aXZlIFdpbmRvd3MgcGxhdGZvcm1zICovCistIyBpZiBIQVZFX1dJTlNPQ0syX0gKKy0jICBpbmNsdWRlIDx3aW5zb2NrMi5oPgorLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0vKiBJZiBFUlJOVU0gbWFwcyB0byBhbiBlcnJubyB2YWx1ZSBkZWZpbmVkIGJ5IGdudWxpYiwgcmV0dXJuIGEgc3RyaW5nCistICAgZGVzY3JpYmluZyB0aGUgZXJyb3IuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworLWNvbnN0IGNoYXIgKgorLXN0cmVycm9yX292ZXJyaWRlIChpbnQgZXJybnVtKQorLXsKKy0gIC8qIFRoZXNlIGVycm9yIG1lc3NhZ2VzIGFyZSB0YWtlbiBmcm9tIGdsaWJjL3N5c2RlcHMvZ251L2Vycmxpc3QuYy4gICovCistICBzd2l0Y2ggKGVycm51bSkKKy0gICAgeworLSNpZiBSRVBMQUNFX1NUUkVSUk9SXzAKKy0gICAgY2FzZSAwOgorLSAgICAgIHJldHVybiAiU3VjY2VzcyI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VUWFRCU1kKKy0gICAgY2FzZSBFVFhUQlNZOgorLSAgICAgIHJldHVybiAiVGV4dCBmaWxlIGJ1c3kiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FU09DSyAvKiBuYXRpdmUgV2luZG93cyBwbGF0Zm9ybXMgKi8KKy0gICAgICAvKiBFV09VTERCTE9DSyBpcyB0aGUgc2FtZSBhcyBFQUdBSU4uICAqLworLSAgICBjYXNlIEVJTlBST0dSRVNTOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdyBpbiBwcm9ncmVzcyI7CistICAgIGNhc2UgRUFMUkVBRFk6CistICAgICAgcmV0dXJuICJPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcyI7CistICAgIGNhc2UgRU5PVFNPQ0s6CistICAgICAgcmV0dXJuICJTb2NrZXQgb3BlcmF0aW9uIG9uIG5vbi1zb2NrZXQiOworLSAgICBjYXNlIEVERVNUQUREUlJFUToKKy0gICAgICByZXR1cm4gIkRlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQiOworLSAgICBjYXNlIEVNU0dTSVpFOgorLSAgICAgIHJldHVybiAiTWVzc2FnZSB0b28gbG9uZyI7CistICAgIGNhc2UgRVBST1RPVFlQRToKKy0gICAgICByZXR1cm4gIlByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCI7CistICAgIGNhc2UgRU5PUFJPVE9PUFQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBFUFJPVE9OT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJQcm90b2NvbCBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFU09DS1ROT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFT1BOT1RTVVBQOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiOworLSAgICBjYXNlIEVQRk5PU1VQUE9SVDoKKy0gICAgICByZXR1cm4gIlByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkIjsKKy0gICAgY2FzZSBFQUZOT1NVUFBPUlQ6CistICAgICAgcmV0dXJuICJBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sIjsKKy0gICAgY2FzZSBFQUREUklOVVNFOgorLSAgICAgIHJldHVybiAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSI7CistICAgIGNhc2UgRUFERFJOT1RBVkFJTDoKKy0gICAgICByZXR1cm4gIkNhbm5vdCBhc3NpZ24gcmVxdWVzdGVkIGFkZHJlc3MiOworLSAgICBjYXNlIEVORVRET1dOOgorLSAgICAgIHJldHVybiAiTmV0d29yayBpcyBkb3duIjsKKy0gICAgY2FzZSBFTkVUVU5SRUFDSDoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiOworLSAgICBjYXNlIEVORVRSRVNFVDoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0IjsKKy0gICAgY2FzZSBFQ09OTkFCT1JURUQ6CistICAgICAgcmV0dXJuICJTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCI7CistICAgIGNhc2UgRUNPTk5SRVNFVDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlciI7CistICAgIGNhc2UgRU5PQlVGUzoKKy0gICAgICByZXR1cm4gIk5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUiOworLSAgICBjYXNlIEVJU0NPTk46CistICAgICAgcmV0dXJuICJUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQiOworLSAgICBjYXNlIEVOT1RDT05OOgorLSAgICAgIHJldHVybiAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiOworLSAgICBjYXNlIEVTSFVURE9XTjoKKy0gICAgICByZXR1cm4gIkNhbm5vdCBzZW5kIGFmdGVyIHRyYW5zcG9ydCBlbmRwb2ludCBzaHV0ZG93biI7CistICAgIGNhc2UgRVRPT01BTllSRUZTOgorLSAgICAgIHJldHVybiAiVG9vIG1hbnkgcmVmZXJlbmNlczogY2Fubm90IHNwbGljZSI7CistICAgIGNhc2UgRVRJTUVET1VUOgorLSAgICAgIHJldHVybiAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiOworLSAgICBjYXNlIEVDT05OUkVGVVNFRDoKKy0gICAgICByZXR1cm4gIkNvbm5lY3Rpb24gcmVmdXNlZCI7CistICAgIGNhc2UgRUxPT1A6CistICAgICAgcmV0dXJuICJUb28gbWFueSBsZXZlbHMgb2Ygc3ltYm9saWMgbGlua3MiOworLSAgICBjYXNlIEVIT1NURE9XTjoKKy0gICAgICByZXR1cm4gIkhvc3QgaXMgZG93biI7CistICAgIGNhc2UgRUhPU1RVTlJFQUNIOgorLSAgICAgIHJldHVybiAiTm8gcm91dGUgdG8gaG9zdCI7CistICAgIGNhc2UgRVBST0NMSU06CistICAgICAgcmV0dXJuICJUb28gbWFueSBwcm9jZXNzZXMiOworLSAgICBjYXNlIEVVU0VSUzoKKy0gICAgICByZXR1cm4gIlRvbyBtYW55IHVzZXJzIjsKKy0gICAgY2FzZSBFRFFVT1Q6CistICAgICAgcmV0dXJuICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKKy0gICAgY2FzZSBFU1RBTEU6CistICAgICAgcmV0dXJuICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworLSAgICBjYXNlIEVSRU1PVEU6CistICAgICAgcmV0dXJuICJPYmplY3QgaXMgcmVtb3RlIjsKKy0jIGlmIEhBVkVfV0lOU09DSzJfSAorLSAgICAgIC8qIFdTQV9JTlZBTElEX0hBTkRMRSBtYXBzIHRvIEVCQURGICovCistICAgICAgLyogV1NBX05PVF9FTk9VR0hfTUVNT1JZIG1hcHMgdG8gRU5PTUVNICovCistICAgICAgLyogV1NBX0lOVkFMSURfUEFSQU1FVEVSIG1hcHMgdG8gRUlOVkFMICovCistICAgIGNhc2UgV1NBX09QRVJBVElPTl9BQk9SVEVEOgorLSAgICAgIHJldHVybiAiT3ZlcmxhcHBlZCBvcGVyYXRpb24gYWJvcnRlZCI7CistICAgIGNhc2UgV1NBX0lPX0lOQ09NUExFVEU6CistICAgICAgcmV0dXJuICJPdmVybGFwcGVkIEkvTyBldmVudCBvYmplY3Qgbm90IGluIHNpZ25hbGVkIHN0YXRlIjsKKy0gICAgY2FzZSBXU0FfSU9fUEVORElORzoKKy0gICAgICByZXR1cm4gIk92ZXJsYXBwZWQgb3BlcmF0aW9ucyB3aWxsIGNvbXBsZXRlIGxhdGVyIjsKKy0gICAgICAvKiBXU0FFSU5UUiBtYXBzIHRvIEVJTlRSICovCistICAgICAgLyogV1NBRUJBREYgbWFwcyB0byBFQkFERiAqLworLSAgICAgIC8qIFdTQUVBQ0NFUyBtYXBzIHRvIEVBQ0NFUyAqLworLSAgICAgIC8qIFdTQUVGQVVMVCBtYXBzIHRvIEVGQVVMVCAqLworLSAgICAgIC8qIFdTQUVJTlZBTCBtYXBzIHRvIEVJTlZBTCAqLworLSAgICAgIC8qIFdTQUVNRklMRSBtYXBzIHRvIEVNRklMRSAqLworLSAgICAgIC8qIFdTQUVXT1VMREJMT0NLIG1hcHMgdG8gRVdPVUxEQkxPQ0sgKi8KKy0gICAgICAvKiBXU0FFSU5QUk9HUkVTUyBpcyBFSU5QUk9HUkVTUyAqLworLSAgICAgIC8qIFdTQUVBTFJFQURZIGlzIEVBTFJFQURZICovCistICAgICAgLyogV1NBRU5PVFNPQ0sgaXMgRU5PVFNPQ0sgKi8KKy0gICAgICAvKiBXU0FFREVTVEFERFJSRVEgaXMgRURFU1RBRERSUkVRICovCistICAgICAgLyogV1NBRU1TR1NJWkUgaXMgRU1TR1NJWkUgKi8KKy0gICAgICAvKiBXU0FFUFJPVE9UWVBFIGlzIEVQUk9UT1RZUEUgKi8KKy0gICAgICAvKiBXU0FFTk9QUk9UT09QVCBpcyBFTk9QUk9UT09QVCAqLworLSAgICAgIC8qIFdTQUVQUk9UT05PU1VQUE9SVCBpcyBFUFJPVE9OT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFU09DS1ROT1NVUFBPUlQgaXMgRVNPQ0tUTk9TVVBQT1JUICovCistICAgICAgLyogV1NBRU9QTk9UU1VQUCBpcyBFT1BOT1RTVVBQICovCistICAgICAgLyogV1NBRVBGTk9TVVBQT1JUIGlzIEVQRk5PU1VQUE9SVCAqLworLSAgICAgIC8qIFdTQUVBRk5PU1VQUE9SVCBpcyBFQUZOT1NVUFBPUlQgKi8KKy0gICAgICAvKiBXU0FFQUREUklOVVNFIGlzIEVBRERSSU5VU0UgKi8KKy0gICAgICAvKiBXU0FFQUREUk5PVEFWQUlMIGlzIEVBRERSTk9UQVZBSUwgKi8KKy0gICAgICAvKiBXU0FFTkVURE9XTiBpcyBFTkVURE9XTiAqLworLSAgICAgIC8qIFdTQUVORVRVTlJFQUNIIGlzIEVORVRVTlJFQUNIICovCistICAgICAgLyogV1NBRU5FVFJFU0VUIGlzIEVORVRSRVNFVCAqLworLSAgICAgIC8qIFdTQUVDT05OQUJPUlRFRCBpcyBFQ09OTkFCT1JURUQgKi8KKy0gICAgICAvKiBXU0FFQ09OTlJFU0VUIGlzIEVDT05OUkVTRVQgKi8KKy0gICAgICAvKiBXU0FFTk9CVUZTIGlzIEVOT0JVRlMgKi8KKy0gICAgICAvKiBXU0FFSVNDT05OIGlzIEVJU0NPTk4gKi8KKy0gICAgICAvKiBXU0FFTk9UQ09OTiBpcyBFTk9UQ09OTiAqLworLSAgICAgIC8qIFdTQUVTSFVURE9XTiBpcyBFU0hVVERPV04gKi8KKy0gICAgICAvKiBXU0FFVE9PTUFOWVJFRlMgaXMgRVRPT01BTllSRUZTICovCistICAgICAgLyogV1NBRVRJTUVET1VUIGlzIEVUSU1FRE9VVCAqLworLSAgICAgIC8qIFdTQUVDT05OUkVGVVNFRCBpcyBFQ09OTlJFRlVTRUQgKi8KKy0gICAgICAvKiBXU0FFTE9PUCBpcyBFTE9PUCAqLworLSAgICAgIC8qIFdTQUVOQU1FVE9PTE9ORyBtYXBzIHRvIEVOQU1FVE9PTE9ORyAqLworLSAgICAgIC8qIFdTQUVIT1NURE9XTiBpcyBFSE9TVERPV04gKi8KKy0gICAgICAvKiBXU0FFSE9TVFVOUkVBQ0ggaXMgRUhPU1RVTlJFQUNIICovCistICAgICAgLyogV1NBRU5PVEVNUFRZIG1hcHMgdG8gRU5PVEVNUFRZICovCistICAgICAgLyogV1NBRVBST0NMSU0gaXMgRVBST0NMSU0gKi8KKy0gICAgICAvKiBXU0FFVVNFUlMgaXMgRVVTRVJTICovCistICAgICAgLyogV1NBRURRVU9UIGlzIEVEUVVPVCAqLworLSAgICAgIC8qIFdTQUVTVEFMRSBpcyBFU1RBTEUgKi8KKy0gICAgICAvKiBXU0FFUkVNT1RFIGlzIEVSRU1PVEUgKi8KKy0gICAgY2FzZSBXU0FTWVNOT1RSRUFEWToKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgc3Vic3lzdGVtIGlzIHVuYXZhaWxhYmxlIjsKKy0gICAgY2FzZSBXU0FWRVJOT1RTVVBQT1JURUQ6CistICAgICAgcmV0dXJuICJXaW5zb2NrLmRsbCB2ZXJzaW9uIG91dCBvZiByYW5nZSI7CistICAgIGNhc2UgV1NBTk9USU5JVElBTElTRUQ6CistICAgICAgcmV0dXJuICJTdWNjZXNzZnVsIFdTQVN0YXJ0dXAgbm90IHlldCBwZXJmb3JtZWQiOworLSAgICBjYXNlIFdTQUVESVNDT046CistICAgICAgcmV0dXJuICJHcmFjZWZ1bCBzaHV0ZG93biBpbiBwcm9ncmVzcyI7CistICAgIGNhc2UgV1NBRU5PTU9SRTogY2FzZSBXU0FfRV9OT19NT1JFOgorLSAgICAgIHJldHVybiAiTm8gbW9yZSByZXN1bHRzIjsKKy0gICAgY2FzZSBXU0FFQ0FOQ0VMTEVEOiBjYXNlIFdTQV9FX0NBTkNFTExFRDoKKy0gICAgICByZXR1cm4gIkNhbGwgd2FzIGNhbmNlbGVkIjsKKy0gICAgY2FzZSBXU0FFSU5WQUxJRFBST0NUQUJMRToKKy0gICAgICByZXR1cm4gIlByb2NlZHVyZSBjYWxsIHRhYmxlIGlzIGludmFsaWQiOworLSAgICBjYXNlIFdTQUVJTlZBTElEUFJPVklERVI6CistICAgICAgcmV0dXJuICJTZXJ2aWNlIHByb3ZpZGVyIGlzIGludmFsaWQiOworLSAgICBjYXNlIFdTQUVQUk9WSURFUkZBSUxFRElOSVQ6CistICAgICAgcmV0dXJuICJTZXJ2aWNlIHByb3ZpZGVyIGZhaWxlZCB0byBpbml0aWFsaXplIjsKKy0gICAgY2FzZSBXU0FTWVNDQUxMRkFJTFVSRToKKy0gICAgICByZXR1cm4gIlN5c3RlbSBjYWxsIGZhaWx1cmUiOworLSAgICBjYXNlIFdTQVNFUlZJQ0VfTk9UX0ZPVU5EOgorLSAgICAgIHJldHVybiAiU2VydmljZSBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQVRZUEVfTk9UX0ZPVU5EOgorLSAgICAgIHJldHVybiAiQ2xhc3MgdHlwZSBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQUVSRUZVU0VEOgorLSAgICAgIHJldHVybiAiRGF0YWJhc2UgcXVlcnkgd2FzIHJlZnVzZWQiOworLSAgICBjYXNlIFdTQUhPU1RfTk9UX0ZPVU5EOgorLSAgICAgIHJldHVybiAiSG9zdCBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQVRSWV9BR0FJTjoKKy0gICAgICByZXR1cm4gIk5vbmF1dGhvcml0YXRpdmUgaG9zdCBub3QgZm91bmQiOworLSAgICBjYXNlIFdTQU5PX1JFQ09WRVJZOgorLSAgICAgIHJldHVybiAiTm9ucmVjb3ZlcmFibGUgZXJyb3IiOworLSAgICBjYXNlIFdTQU5PX0RBVEE6CistICAgICAgcmV0dXJuICJWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSI7CistICAgICAgLyogV1NBX1FPU18qIG9taXR0ZWQgKi8KKy0jIGVuZGlmCistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VOT01TRworLSAgICBjYXNlIEVOT01TRzoKKy0gICAgICByZXR1cm4gIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUlEUk0KKy0gICAgY2FzZSBFSURSTToKKy0gICAgICByZXR1cm4gIklkZW50aWZpZXIgcmVtb3ZlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VOT0xJTksKKy0gICAgY2FzZSBFTk9MSU5LOgorLSAgICAgIHJldHVybiAiTGluayBoYXMgYmVlbiBzZXZlcmVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRVBST1RPCistICAgIGNhc2UgRVBST1RPOgorLSAgICAgIHJldHVybiAiUHJvdG9jb2wgZXJyb3IiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FTVVMVElIT1AKKy0gICAgY2FzZSBFTVVMVElIT1A6CistICAgICAgcmV0dXJuICJNdWx0aWhvcCBhdHRlbXB0ZWQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FQkFETVNHCistICAgIGNhc2UgRUJBRE1TRzoKKy0gICAgICByZXR1cm4gIkJhZCBtZXNzYWdlIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRU9WRVJGTE9XCistICAgIGNhc2UgRU9WRVJGTE9XOgorLSAgICAgIHJldHVybiAiVmFsdWUgdG9vIGxhcmdlIGZvciBkZWZpbmVkIGRhdGEgdHlwZSI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VOT1RTVVAKKy0gICAgY2FzZSBFTk9UU1VQOgorLSAgICAgIHJldHVybiAiTm90IHN1cHBvcnRlZCI7CistI2VuZGlmCistCistI2lmIEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVAorLSAgICBjYXNlIEVORVRSRVNFVDoKKy0gICAgICByZXR1cm4gIk5ldHdvcmsgZHJvcHBlZCBjb25uZWN0aW9uIG9uIHJlc2V0IjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUNPTk5BQk9SVEVECistICAgIGNhc2UgRUNPTk5BQk9SVEVEOgorLSAgICAgIHJldHVybiAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FU1RBTEUKKy0gICAgY2FzZSBFU1RBTEU6CistICAgICAgcmV0dXJuICJTdGFsZSBORlMgZmlsZSBoYW5kbGUiOworLSNlbmRpZgorLQorLSNpZiBHTlVMSUJfZGVmaW5lZF9FRFFVT1QKKy0gICAgY2FzZSBFRFFVT1Q6CistICAgICAgcmV0dXJuICJEaXNrIHF1b3RhIGV4Y2VlZGVkIjsKKy0jZW5kaWYKKy0KKy0jaWYgR05VTElCX2RlZmluZWRfRUNBTkNFTEVECistICAgIGNhc2UgRUNBTkNFTEVEOgorLSAgICAgIHJldHVybiAiT3BlcmF0aW9uIGNhbmNlbGVkIjsKKy0jZW5kaWYKKy0KKy0gICAgZGVmYXVsdDoKKy0gICAgICByZXR1cm4gTlVMTDsKKy0gICAgfQorLX0KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJlcnJvci1vdmVycmlkZS5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuaAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsNTIgKzAsMCBAQAorLS8qIHN0cmVycm9yLW92ZXJyaWRlLmggLS0tIFBPU0lYIGNvbXBhdGlibGUgc3lzdGVtIGVycm9yIHJvdXRpbmUKKy0KKy0gICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0KKy0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CistICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy0gICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLQorLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCistICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCistCistICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCistCistI2lmbmRlZiBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSAorLSMgZGVmaW5lIF9HTF9TVFJFUlJPUl9PVkVSUklERV9ICistCistIyBpbmNsdWRlIDxlcnJuby5oPgorLSMgaW5jbHVkZSA8c3RkZGVmLmg+CistCistLyogUmVhc29uYWJsZSBidWZmZXIgc2l6ZSB0aGF0IHNob3VsZCBuZXZlciB0cmlnZ2VyIEVSQU5HRTsgaWYgdGhpcworLSAgIHByb3ZlcyB0b28gc21hbGwsIHdlIGludGVudGlvbmFsbHkgYWJvcnQoKSwgdG8gcmVtaW5kIHVzIHRvIGZpeAorLSAgIHRoaXMgdmFsdWUuICAqLworLSMgZGVmaW5lIFNUQUNLQlVGX0xFTiAyNTYKKy0KKy0vKiBJZiBFUlJOVU0gbWFwcyB0byBhbiBlcnJubyB2YWx1ZSBkZWZpbmVkIGJ5IGdudWxpYiwgcmV0dXJuIGEgc3RyaW5nCistICAgZGVzY3JpYmluZyB0aGUgZXJyb3IuICBPdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworLSMgaWYgUkVQTEFDRV9TVFJFUlJPUl8wIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VUWFRCU1kgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVNPQ0sgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRU5PTVNHIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VJRFJNIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VOT0xJTksgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVBST1RPIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VNVUxUSUhPUCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQkFETVNHIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VPVkVSRkxPVyBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FTk9UU1VQIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VORVRSRVNFVCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQ09OTkFCT1JURUQgXAorLSAgICAgfHwgR05VTElCX2RlZmluZWRfRVNUQUxFIFwKKy0gICAgIHx8IEdOVUxJQl9kZWZpbmVkX0VEUVVPVCBcCistICAgICB8fCBHTlVMSUJfZGVmaW5lZF9FQ0FOQ0VMRUQKKy1leHRlcm4gY29uc3QgY2hhciAqc3RyZXJyb3Jfb3ZlcnJpZGUgKGludCBlcnJudW0pOworLSMgZWxzZQorLSMgIGRlZmluZSBzdHJlcnJvcl9vdmVycmlkZShpZ25vcmVkKSBOVUxMCistIyBlbmRpZgorLQorLSNlbmRpZiAvKiBfR0xfU1RSRVJST1JfT1ZFUlJJREVfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zdHJpbmcuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJpbmcuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3RyaW5nLmluLmgJMjAxMS0wOC0wNyAwNjo0MjowNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi9zdHJpbmcuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQxODQ4NDQ2MSAtMDgwMAorQEAgLTE2LDcgKzE2LDcgQEAKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKyAKKy0jaWZuZGVmIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorKyNpZm5kZWYgX0dMX1NUUklOR19ICisgCisgI2lmIF9fR05VQ19fID49IDMKKyBAUFJBR01BX1NZU1RFTV9IRUFERVJACitAQCAtMjYsOCArMjYsOCBAQAorIC8qIFRoZSBpbmNsdWRlX25leHQgcmVxdWlyZXMgYSBzcGxpdCBkb3VibGUtaW5jbHVzaW9uIGd1YXJkLiAgKi8KKyAjQElOQ0xVREVfTkVYVEAgQE5FWFRfU1RSSU5HX0hACisgCistI2lmbmRlZiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TVFJJTkdfSAorKyNpZm5kZWYgX0dMX1NUUklOR19ICisrI2RlZmluZSBfR0xfU1RSSU5HX0gKKyAKKyAvKiBOZXRCU0QgNS4wIG1pcy1kZWZpbmVzIE5VTEwuICAqLworICNpbmNsdWRlIDxzdGRkZWYuaD4KK0BAIC01OSwzNiArNTksNiBAQAorIC8qIFRoZSBkZWZpbml0aW9uIG9mIF9HTF9XQVJOX09OX1VTRSBpcyBjb3BpZWQgaGVyZS4gICovCisgCisgCistLyogRmluZCB0aGUgaW5kZXggb2YgdGhlIGxlYXN0LXNpZ25pZmljYW50IHNldCBiaXQuICAqLworLSNpZiBAR05VTElCX0ZGU0xACistIyBpZiAhQEhBVkVfRkZTTEAKKy1fR0xfRlVOQ0RFQ0xfU1lTIChmZnNsLCBpbnQsIChsb25nIGludCBpKSk7CistIyBlbmRpZgorLV9HTF9DWFhBTElBU19TWVMgKGZmc2wsIGludCwgKGxvbmcgaW50IGkpKTsKKy1fR0xfQ1hYQUxJQVNXQVJOIChmZnNsKTsKKy0jZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistIyB1bmRlZiBmZnNsCistIyBpZiBIQVZFX1JBV19ERUNMX0ZGU0wKKy1fR0xfV0FSTl9PTl9VU0UgKGZmc2wsICJmZnNsIGlzIG5vdCBwb3J0YWJsZSAtIHVzZSB0aGUgZmZzbCBtb2R1bGUiKTsKKy0jIGVuZGlmCistI2VuZGlmCistCistCistLyogRmluZCB0aGUgaW5kZXggb2YgdGhlIGxlYXN0LXNpZ25pZmljYW50IHNldCBiaXQuICAqLworLSNpZiBAR05VTElCX0ZGU0xMQAorLSMgaWYgIUBIQVZFX0ZGU0xMQAorLV9HTF9GVU5DREVDTF9TWVMgKGZmc2xsLCBpbnQsIChsb25nIGxvbmcgaW50IGkpKTsKKy0jIGVuZGlmCistX0dMX0NYWEFMSUFTX1NZUyAoZmZzbGwsIGludCwgKGxvbmcgbG9uZyBpbnQgaSkpOworLV9HTF9DWFhBTElBU1dBUk4gKGZmc2xsKTsKKy0jZWxpZiBkZWZpbmVkIEdOVUxJQl9QT1NJWENIRUNLCistIyB1bmRlZiBmZnNsbAorLSMgaWYgSEFWRV9SQVdfREVDTF9GRlNMTAorLV9HTF9XQVJOX09OX1VTRSAoZmZzbGwsICJmZnNsbCBpcyBub3QgcG9ydGFibGUgLSB1c2UgdGhlIGZmc2xsIG1vZHVsZSIpOworLSMgZW5kaWYKKy0jZW5kaWYKKy0KKy0KKyAvKiBSZXR1cm4gdGhlIGZpcnN0IGluc3RhbmNlIG9mIEMgd2l0aGluIE4gYnl0ZXMgb2YgUywgb3IgTlVMTC4gICovCisgI2lmIEBHTlVMSUJfTUVNQ0hSQAorICMgaWYgQFJFUExBQ0VfTUVNQ0hSQAorQEAgLTEwMDcsNSArOTc3LDUgQEAgX0dMX1dBUk5fT05fVVNFIChzdHJ2ZXJzY21wLCAic3RydmVyc2NtcAorICNlbmRpZgorIAorIAorLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfU1RSSU5HX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NUUklOR19IICovCisrI2VuZGlmIC8qIF9HTF9TVFJJTkdfSCAqLworKyNlbmRpZiAvKiBfR0xfU1RSSU5HX0ggKi8KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvc3lzX3N0YXQuaW4uaCBsaWJpY29udi0xLjE0L3NyY2xpYi9zeXNfc3RhdC5pbi5oCistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi9zeXNfc3RhdC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvc3lzX3N0YXQuaW4uaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQzMDQ4NDQ2MSAtMDgwMAorQEAgLTM0LDcgKzM0LDcgQEAKKyAjZWxzZQorIC8qIE5vcm1hbCBpbnZvY2F0aW9uIGNvbnZlbnRpb24uICAqLworIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0gKKysjaWZuZGVmIF9HTF9TWVNfU1RBVF9ICisgCisgLyogR2V0IG5saW5rX3QuICAqLworICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK0BAIC00NSw4ICs0NSw4IEBACisgLyogVGhlIGluY2x1ZGVfbmV4dCByZXF1aXJlcyBhIHNwbGl0IGRvdWJsZS1pbmNsdXNpb24gZ3VhcmQuICAqLworICNASU5DTFVERV9ORVhUQCBATkVYVF9TWVNfU1RBVF9IQAorIAorLSNpZm5kZWYgX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0gKKy0jZGVmaW5lIF9AR1VBUkRfUFJFRklYQF9TWVNfU1RBVF9ICisrI2lmbmRlZiBfR0xfU1lTX1NUQVRfSAorKyNkZWZpbmUgX0dMX1NZU19TVEFUX0gKKyAKKyAvKiBUaGUgZGVmaW5pdGlvbnMgb2YgX0dMX0ZVTkNERUNMX1JQTCBldGMuIGFyZSBjb3BpZWQgaGVyZS4gICovCisgCitAQCAtNjUzLDYgKzY1Myw2IEBAIF9HTF9XQVJOX09OX1VTRSAodXRpbWVuc2F0LCAidXRpbWVuc2F0IGkKKyAjZW5kaWYKKyAKKyAKKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0ggKi8KKy0jZW5kaWYgLyogX0BHVUFSRF9QUkVGSVhAX1NZU19TVEFUX0ggKi8KKysjZW5kaWYgLyogX0dMX1NZU19TVEFUX0ggKi8KKysjZW5kaWYgLyogX0dMX1NZU19TVEFUX0ggKi8KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdGltZS5pbi5oIGxpYmljb252LTEuMTQvc3JjbGliL3RpbWUuaW4uaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdGltZS5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdGltZS5pbi5oCTIwMTItMDEtMDggMDI6MDc6NDAuNDM4NDg0NDYyIC0wODAwCitAQCAtMjgsMTMgKzI4LDEzIEBACisgICAgd2l0aG91dCBhZGRpbmcgb3VyIG93biBkZWNsYXJhdGlvbnMuICAqLworICNpZiAoZGVmaW5lZCBfX25lZWRfdGltZV90IHx8IGRlZmluZWQgX19uZWVkX2Nsb2NrX3QgXAorICAgICAgfHwgZGVmaW5lZCBfX25lZWRfdGltZXNwZWMgXAorLSAgICAgfHwgZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVElNRV9IKQorKyAgICAgfHwgZGVmaW5lZCBfR0xfVElNRV9IKQorIAorICMgQElOQ0xVREVfTkVYVEAgQE5FWFRfVElNRV9IQAorIAorICNlbHNlCisgCistIyBkZWZpbmUgX0BHVUFSRF9QUkVGSVhAX1RJTUVfSAorKyMgZGVmaW5lIF9HTF9USU1FX0gKKyAKKyAjIEBJTkNMVURFX05FWFRAIEBORVhUX1RJTUVfSEAKKyAKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdW5pc3RkLmluLmggbGliaWNvbnYtMS4xNC9zcmNsaWIvdW5pc3RkLmluLmgKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbGliL3VuaXN0ZC5pbi5oCTIwMTEtMDgtMDcgMDY6NDI6MDYuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNsaWIvdW5pc3RkLmluLmgJMjAxMi0wMS0wOCAwMjowNzo0MC40NTA0ODQ0NjIgLTA4MDAKK0BAIC0zNiw3ICszNiw3IEBACisgIyBkZWZpbmUgX0dMX1dJTlNPQ0syX0hfV0lUTkVTUworIAorIC8qIE5vcm1hbCBpbnZvY2F0aW9uLiAgKi8KKy0jZWxpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0gKKysjZWxpZiAhZGVmaW5lZCBfR0xfVU5JU1REX0gKKyAKKyAvKiBUaGUgaW5jbHVkZV9uZXh0IHJlcXVpcmVzIGEgc3BsaXQgZG91YmxlLWluY2x1c2lvbiBndWFyZC4gICovCisgI2lmIEBIQVZFX1VOSVNURF9IQAorQEAgLTUxLDggKzUxLDggQEAKKyAjIHVuZGVmIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorICNlbmRpZgorIAorLSNpZiAhZGVmaW5lZCBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggJiYgIWRlZmluZWQgX0dMX0lOQ0xVRElOR19XSU5TT0NLMl9ICistI2RlZmluZSBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0gKKysjaWYgIWRlZmluZWQgX0dMX1VOSVNURF9IICYmICFkZWZpbmVkIF9HTF9JTkNMVURJTkdfV0lOU09DSzJfSAorKyNkZWZpbmUgX0dMX1VOSVNURF9ICisgCisgLyogTmV0QlNEIDUuMCBtaXMtZGVmaW5lcyBOVUxMLiAgQWxzbyBnZXQgc2l6ZV90LiAgKi8KKyAjaW5jbHVkZSA8c3RkZGVmLmg+CitAQCAtMTE3LDc3ICsxMTcsNzggQEAKKyAvKiBUaGUgZGVmaW5pdGlvbiBvZiBfR0xfV0FSTl9PTl9VU0UgaXMgY29waWVkIGhlcmUuICAqLworIAorIAorLS8qIEhpZGUgc29tZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZnJvbSA8d2luc29jazIuaD4uICAqLworLQorLSNpZiBAR05VTElCX0dFVEhPU1ROQU1FQCAmJiBAVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IQAorLSMgaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NZU19TT0NLRVRfSAorLSMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHNvY2tldAorLSMgICBkZWZpbmUgc29ja2V0ICAgICAgICAgICAgICBzb2NrZXRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgY29ubmVjdAorLSMgICBkZWZpbmUgY29ubmVjdCAgICAgICAgICAgICBjb25uZWN0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGFjY2VwdAorLSMgICBkZWZpbmUgYWNjZXB0ICAgICAgICAgICAgICBhY2NlcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgYmluZAorLSMgICBkZWZpbmUgYmluZCAgICAgICAgICAgICAgICBiaW5kX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGdldHBlZXJuYW1lCistIyAgIGRlZmluZSBnZXRwZWVybmFtZSAgICAgICAgIGdldHBlZXJuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGdldHNvY2tuYW1lCistIyAgIGRlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgIGdldHNvY2tuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIGdldHNvY2tvcHQKKy0jICAgZGVmaW5lIGdldHNvY2tvcHQgICAgICAgICAgZ2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBsaXN0ZW4KKy0jICAgZGVmaW5lIGxpc3RlbiAgICAgICAgICAgICAgbGlzdGVuX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCistIyAgIHVuZGVmIHJlY3YKKy0jICAgZGVmaW5lIHJlY3YgICAgICAgICAgICAgICAgcmVjdl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBzZW5kCistIyAgIGRlZmluZSBzZW5kICAgICAgICAgICAgICAgIHNlbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgcmVjdmZyb20KKy0jICAgZGVmaW5lIHJlY3Zmcm9tICAgICAgICAgICAgcmVjdmZyb21fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2VuZHRvCistIyAgIGRlZmluZSBzZW5kdG8gICAgICAgICAgICAgIHNlbmR0b191c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorLSMgICB1bmRlZiBzZXRzb2Nrb3B0CistIyAgIGRlZmluZSBzZXRzb2Nrb3B0ICAgICAgICAgIHNldHNvY2tvcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICAgdW5kZWYgc2h1dGRvd24KKy0jICAgZGVmaW5lIHNodXRkb3duICAgICAgICAgICAgc2h1dGRvd25fdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKy0jICBlbHNlCistICAgIF9HTF9XQVJOX09OX1VTRSAoc29ja2V0LAorLSAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoY29ubmVjdCwKKy0gICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChhY2NlcHQsCistICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChiaW5kLAorLSAgICAgICAgICAgICAgICAgICAgICJiaW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKGdldHBlZXJuYW1lLAorLSAgICAgICAgICAgICAgICAgICAgICJnZXRwZWVybmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChnZXRzb2NrbmFtZSwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja25hbWUoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja29wdCwKKy0gICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChsaXN0ZW4sCistICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKy0gICAgX0dMX1dBUk5fT05fVVNFIChyZWN2LAorLSAgICAgICAgICAgICAgICAgICAgICJyZWN2KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmQsCistICAgICAgICAgICAgICAgICAgICAgInNlbmQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdmZyb20sCistICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmR0bywKKy0gICAgICAgICAgICAgICAgICAgICAic2VuZHRvKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworLSAgICBfR0xfV0FSTl9PTl9VU0UgKHNldHNvY2tvcHQsCistICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CistICAgIF9HTF9XQVJOX09OX1VTRSAoc2h1dGRvd24sCistICAgICAgICAgICAgICAgICAgICAgInNodXRkb3duKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyNpZiBAR05VTElCX0dFVEhPU1ROQU1FQAorKy8qIEdldCBhbGwgcG9zc2libGUgZGVjbGFyYXRpb25zIG9mIGdldGhvc3RuYW1lKCkuICAqLworKyMgaWYgQFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSEAKKysjICBpZiAhZGVmaW5lZCBfR0xfU1lTX1NPQ0tFVF9ICisrIyAgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCisrIyAgICB1bmRlZiBzb2NrZXQKKysjICAgIGRlZmluZSBzb2NrZXQgICAgICAgICAgICAgIHNvY2tldF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgY29ubmVjdAorKyMgICAgZGVmaW5lIGNvbm5lY3QgICAgICAgICAgICAgY29ubmVjdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgYWNjZXB0CisrIyAgICBkZWZpbmUgYWNjZXB0ICAgICAgICAgICAgICBhY2NlcHRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGJpbmQKKysjICAgIGRlZmluZSBiaW5kICAgICAgICAgICAgICAgIGJpbmRfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc29ja2V0X2gKKysjICAgIHVuZGVmIGdldHBlZXJuYW1lCisrIyAgICBkZWZpbmUgZ2V0cGVlcm5hbWUgICAgICAgICBnZXRwZWVybmFtZV91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgZ2V0c29ja25hbWUKKysjICAgIGRlZmluZSBnZXRzb2NrbmFtZSAgICAgICAgIGdldHNvY2tuYW1lX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBnZXRzb2Nrb3B0CisrIyAgICBkZWZpbmUgZ2V0c29ja29wdCAgICAgICAgICBnZXRzb2Nrb3B0X3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBsaXN0ZW4KKysjICAgIGRlZmluZSBsaXN0ZW4gICAgICAgICAgICAgIGxpc3Rlbl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgcmVjdgorKyMgICAgZGVmaW5lIHJlY3YgICAgICAgICAgICAgICAgcmVjdl91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2VuZAorKyMgICAgZGVmaW5lIHNlbmQgICAgICAgICAgICAgICAgc2VuZF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgcmVjdmZyb20KKysjICAgIGRlZmluZSByZWN2ZnJvbSAgICAgICAgICAgIHJlY3Zmcm9tX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgICB1bmRlZiBzZW5kdG8KKysjICAgIGRlZmluZSBzZW5kdG8gICAgICAgICAgICAgIHNlbmR0b191c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2V0c29ja29wdAorKyMgICAgZGVmaW5lIHNldHNvY2tvcHQgICAgICAgICAgc2V0c29ja29wdF91c2VkX3dpdGhvdXRfaW5jbHVkaW5nX3N5c19zb2NrZXRfaAorKyMgICAgdW5kZWYgc2h1dGRvd24KKysjICAgIGRlZmluZSBzaHV0ZG93biAgICAgICAgICAgIHNodXRkb3duX3VzZWRfd2l0aG91dF9pbmNsdWRpbmdfc3lzX3NvY2tldF9oCisrIyAgIGVsc2UKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoc29ja2V0LAorKyAgICAgICAgICAgICAgICAgICAgICAic29ja2V0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChjb25uZWN0LAorKyAgICAgICAgICAgICAgICAgICAgICAiY29ubmVjdCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoYWNjZXB0LAorKyAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChiaW5kLAorKyAgICAgICAgICAgICAgICAgICAgICAiYmluZCgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0cGVlcm5hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRwZWVybmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja25hbWUsCisrICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2NrbmFtZSgpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAoZ2V0c29ja29wdCwKKysgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKGxpc3RlbiwKKysgICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHVzZWQgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9zb2NrZXQuaD4iKTsKKysgICAgIF9HTF9XQVJOX09OX1VTRSAocmVjdiwKKysgICAgICAgICAgICAgICAgICAgICAgInJlY3YoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNlbmQsCisrICAgICAgICAgICAgICAgICAgICAgICJzZW5kKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChyZWN2ZnJvbSwKKysgICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZW5kdG8sCisrICAgICAgICAgICAgICAgICAgICAgICJzZW5kdG8oKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc29ja2V0Lmg+Iik7CisrICAgICBfR0xfV0FSTl9PTl9VU0UgKHNldHNvY2tvcHQsCisrICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyAgICAgX0dMX1dBUk5fT05fVVNFIChzaHV0ZG93biwKKysgICAgICAgICAgICAgICAgICAgICAgInNodXRkb3duKCkgdXNlZCB3aXRob3V0IGluY2x1ZGluZyA8c3lzL3NvY2tldC5oPiIpOworKyMgICBlbmRpZgorICMgIGVuZGlmCistIyBlbmRpZgorLSMgaWYgIWRlZmluZWQgX0BHVUFSRF9QUkVGSVhAX1NZU19TRUxFQ1RfSAorLSMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHNlbGVjdAorLSMgICBkZWZpbmUgc2VsZWN0ICAgICAgICAgICAgICBzZWxlY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc2VsZWN0X2gKKy0jICBlbHNlCistICAgIF9HTF9XQVJOX09OX1VTRSAoc2VsZWN0LAorLSAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc2VsZWN0Lmg+Iik7CisrIyAgaWYgIWRlZmluZWQgX0dMX1NZU19TRUxFQ1RfSAorKyMgICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorKyMgICAgdW5kZWYgc2VsZWN0CisrIyAgICBkZWZpbmUgc2VsZWN0ICAgICAgICAgICAgICBzZWxlY3RfdXNlZF93aXRob3V0X2luY2x1ZGluZ19zeXNfc2VsZWN0X2gKKysjICAgZWxzZQorKyAgICAgX0dMX1dBUk5fT05fVVNFIChzZWxlY3QsCisrICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSB1c2VkIHdpdGhvdXQgaW5jbHVkaW5nIDxzeXMvc2VsZWN0Lmg+Iik7CisrIyAgIGVuZGlmCisgIyAgZW5kaWYKKyAjIGVuZGlmCisgI2VuZGlmCitAQCAtMTA2MSw3ICsxMDYyLDYgQEAgX0dMX1dBUk5fT05fVVNFIChwaXBlMiwgInBpcGUyIGlzIHVucG9ydAorICAgIHNwZWNpZmljYXRpb24gPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9wcmVhZC5odG1sPi4gICovCisgIyBpZiBAUkVQTEFDRV9QUkVBREAKKyAjICBpZiAhKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgZGVmaW5lZCBHTlVMSUJfTkFNRVNQQUNFKQorLSMgICB1bmRlZiBwcmVhZAorICMgICBkZWZpbmUgcHJlYWQgcnBsX3ByZWFkCisgIyAgZW5kaWYKKyBfR0xfRlVOQ0RFQ0xfUlBMIChwcmVhZCwgc3NpemVfdCwKK0BAIC0xMDk2LDcgKzEwOTYsNiBAQCBfR0xfV0FSTl9PTl9VU0UgKHByZWFkLCAicHJlYWQgaXMgdW5wb3J0CisgICAgPGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9zdXN2M3hzaC9wd3JpdGUuaHRtbD4uICAqLworICMgaWYgQFJFUExBQ0VfUFdSSVRFQAorICMgIGlmICEoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiBkZWZpbmVkIEdOVUxJQl9OQU1FU1BBQ0UpCistIyAgIHVuZGVmIHB3cml0ZQorICMgICBkZWZpbmUgcHdyaXRlIHJwbF9wd3JpdGUKKyAjICBlbmRpZgorIF9HTF9GVU5DREVDTF9SUEwgKHB3cml0ZSwgc3NpemVfdCwKK0BAIC0xNDE3LDUgKzE0MTYsNSBAQCBfR0xfQ1hYQUxJQVNXQVJOICh3cml0ZSk7CisgI2VuZGlmCisgCisgCistI2VuZGlmIC8qIF9AR1VBUkRfUFJFRklYQF9VTklTVERfSCAqLworLSNlbmRpZiAvKiBfQEdVQVJEX1BSRUZJWEBfVU5JU1REX0ggKi8KKysjZW5kaWYgLyogX0dMX1VOSVNURF9IICovCisrI2VuZGlmIC8qIF9HTF9VTklTVERfSCAqLworZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY2xpYi92ZXJpZnkuaCBsaWJpY29udi0xLjE0L3NyY2xpYi92ZXJpZnkuaAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNsaWIvdmVyaWZ5LmgJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY2xpYi92ZXJpZnkuaAkyMDEyLTAxLTA4IDAyOjA3OjQwLjQ5NDQ4NDQ2NCAtMDgwMAorQEAgLTE2NCwxMyArMTY0LDEwIEBACisgICAgICghIXNpemVvZiAoX0dMX1ZFUklGWV9UWVBFIChSLCBESUFHTk9TVElDKSkpCisgCisgIyBpZmRlZiBfX2NwbHVzcGx1cworLSMgIGlmICFHTlVMSUJfZGVmaW5lZF9zdHJ1Y3RfX2dsX3ZlcmlmeV90eXBlCisgdGVtcGxhdGUgPGludCB3PgorICAgc3RydWN0IF9nbF92ZXJpZnlfdHlwZSB7CisgICAgIHVuc2lnbmVkIGludCBfZ2xfdmVyaWZ5X2Vycm9yX2lmX25lZ2F0aXZlOiB3OworICAgfTsKKy0jICAgZGVmaW5lIEdOVUxJQl9kZWZpbmVkX3N0cnVjdF9fZ2xfdmVyaWZ5X3R5cGUgMQorLSMgIGVuZGlmCisgIyAgZGVmaW5lIF9HTF9WRVJJRllfVFlQRShSLCBESUFHTk9TVElDKSBcCisgICAgIF9nbF92ZXJpZnlfdHlwZTwoUikgPyAxIDogLTE+CisgIyBlbGlmIGRlZmluZWQgX0dMX0hBVkVfX1NUQVRJQ19BU1NFUlQKK0BAIC0yMDksNyArMjA2LDcgQEAgdGVtcGxhdGUgPGludCB3PgorICMgIGVuZGlmCisgIyBlbmRpZgorIAorLS8qIEBhc3NlcnQuaCBvbWl0IHN0YXJ0QCAgKi8KKysjIGlmZGVmIF9HTF9WRVJJRllfSAorIAorIC8qIEVhY2ggb2YgdGhlc2UgbWFjcm9zIHZlcmlmaWVzIHRoYXQgaXRzIGFyZ3VtZW50IFIgaXMgbm9uemVyby4gIFRvCisgICAgYmUgcG9ydGFibGUsIFIgc2hvdWxkIGJlIGFuIGludGVnZXIgY29uc3RhbnQgZXhwcmVzc2lvbi4gIFVubGlrZQorQEAgLTIyMSwyMyArMjE4LDE1IEBAIHRlbXBsYXRlIDxpbnQgdz4KKyAgICBjb250ZXh0cywgZS5nLiwgdGhlIHRvcCBsZXZlbC4gICovCisgCisgLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLCBhcyBhbiBpbnRlZ2VyIGNvbnN0YW50IGV4cHJlc3Npb24uCistICAgUmV0dXJuIDEuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdmVyaWZ5X2V4cHIgKFIsIDEpLgorLQorLSAgIHZlcmlmeV90cnVlIGlzIG9ic29sZXNjZW50OyBwbGVhc2UgdXNlIHZlcmlmeV9leHByIGluc3RlYWQuICAqLworLQorLSMgZGVmaW5lIHZlcmlmeV90cnVlKFIpIF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV90cnVlICgiICNSICIpIikKKysgICBSZXR1cm4gMS4gICovCisgCistLyogVmVyaWZ5IHJlcXVpcmVtZW50IFIgYXQgY29tcGlsZS10aW1lLiAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUKKy0gICBleHByZXNzaW9uIEUuICAqLworLQorLSMgZGVmaW5lIHZlcmlmeV9leHByKFIsIEUpIFwKKy0gICAgKF9HTF9WRVJJRllfVFJVRSAoUiwgInZlcmlmeV9leHByICgiICNSICIsICIgI0UgIikiKSA/IChFKSA6IChFKSkKKysjICBkZWZpbmUgdmVyaWZ5X3RydWUoUikgX0dMX1ZFUklGWV9UUlVFIChSLCAidmVyaWZ5X3RydWUgKCIgI1IgIikiKQorIAorIC8qIFZlcmlmeSByZXF1aXJlbWVudCBSIGF0IGNvbXBpbGUtdGltZSwgYXMgYSBkZWNsYXJhdGlvbiB3aXRob3V0IGEKKyAgICB0cmFpbGluZyAnOycuICAqLworIAorLSMgZGVmaW5lIHZlcmlmeShSKSBfR0xfVkVSSUZZIChSLCAidmVyaWZ5ICgiICNSICIpIikKKysjICBkZWZpbmUgdmVyaWZ5KFIpIF9HTF9WRVJJRlkgKFIsICJ2ZXJpZnkgKCIgI1IgIikiKQorIAorLS8qIEBhc3NlcnQuaCBvbWl0IGVuZEAgICovCisrIyBlbmRpZgorIAorICNlbmRpZgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Nhbm9uaWNhbGl6ZS5tNCBsaWJpY29udi0xLjE0L3NyY200L2Nhbm9uaWNhbGl6ZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9jYW5vbmljYWxpemUubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2Nhbm9uaWNhbGl6ZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjU2NjQ4NDQ2OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBjYW5vbmljYWxpemUubTQgc2VyaWFsIDIzCisrIyBjYW5vbmljYWxpemUubTQgc2VyaWFsIDIxCisgCisgZG5sIENvcHlyaWdodCAoQykgMjAwMy0yMDA3LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgCitAQCAtMTAsNiArMTAsOCBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgIyBub3QgcHJvdmlkZSBvciBmaXggcmVhbHBhdGguCisgQUNfREVGVU4oW2dsX0ZVTkNfQ0FOT05JQ0FMSVpFX0ZJTEVOQU1FX01PREVdLAorIFsKKysgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplXSkKKysKKyAgIEFDX1JFUVVJUkUoW2dsX1VTRV9TWVNURU1fRVhURU5TSU9OU10pCisgICBBQ19DSEVDS19GVU5DU19PTkNFKFtjYW5vbmljYWxpemVfZmlsZV9uYW1lXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0RPVUJMRV9TTEFTSF9ST09UXSkKK0BAIC0yOCwxNCArMzAsMTYgQEAgQUNfREVGVU4oW2dsX0NBTk9OSUNBTElaRV9MR1BMXSwKKyAgIEFDX1JFUVVJUkUoW2dsX0NBTk9OSUNBTElaRV9MR1BMX1NFUEFSQVRFXSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfY2Fub25pY2FsaXplX2ZpbGVfbmFtZSA9IG5vOyB0aGVuCisgICAgIEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0wCisrICAgIEFDX0xJQk9CSihbY2Fub25pY2FsaXplLWxncGxdKQorICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3JlYWxwYXRoID0gbm87IHRoZW4KKyAgICAgICBIQVZFX1JFQUxQQVRIPTAKKyAgICAgZWxpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19yZWFscGF0aF93b3JrcyIgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFMUEFUSD0xCisgICAgIGZpCisgICBlbGlmIHRlc3QgIiRnbF9jdl9mdW5jX3JlYWxwYXRoX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKy0gICAgUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTEKKysgICAgQUNfTElCT0JKKFtjYW5vbmljYWxpemUtbGdwbF0pCisgICAgIFJFUExBQ0VfUkVBTFBBVEg9MQorKyAgICBSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MQorICAgZmkKKyBdKQorIAorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm5vX2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJub19oLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm5vX2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2Vycm5vX2gubTQJMjAxMi0wMS0wOCAwMjowNzo0MC41OTA0ODQ0NjkgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgZXJybm9faC5tNCBzZXJpYWwgMTAKKysjIGVycm5vX2gubTQgc2VyaWFsIDkKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMzQsMTIgKzM0LDYgQEAgYm9vYm9vCisgI2lmICFkZWZpbmVkIEVOT1RTVVAKKyBib29ib28KKyAjZW5kaWYKKy0jaWYgIWRlZmluZWQgRU5FVFJFU0VUCistYm9vYm9vCistI2VuZGlmCistI2lmICFkZWZpbmVkIEVDT05OQUJPUlRFRAorLWJvb2JvbworLSNlbmRpZgorICNpZiAhZGVmaW5lZCBFU1RBTEUKKyBib29ib28KKyAjZW5kaWYKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9lcnJvci5tNCBsaWJpY29udi0xLjE0L3NyY200L2Vycm9yLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2Vycm9yLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9lcnJvci5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjU5ODQ4NDQ3MCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistI3NlcmlhbCAxNAorKyNzZXJpYWwgMTMKKyAKKyAjIENvcHlyaWdodCAoQykgMTk5Ni0xOTk4LCAyMDAxLTIwMDQsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtOCw4ICs4LDE2IEBACisgCisgQUNfREVGVU4oW2dsX0VSUk9SXSwKKyBbCistICBkbmwgV2UgZG9uJ3QgdXNlIEFDX0ZVTkNfRVJST1JfQVRfTElORSBhbnkgbW9yZSwgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIKKy0gIGRubCBtYWludGFpbmVkIGluIEF1dG9jb25mIGFuZCBiZWNhdXNlIGl0IGludm9rZXMgQUNfTElCT0JKLgorKyAgQUNfRlVOQ19FUlJPUl9BVF9MSU5FCisrICBkbmwgTm90ZTogQUNfRlVOQ19FUlJPUl9BVF9MSU5FIGRvZXMgQUNfTElCU09VUkNFUyhbZXJyb3IuaCwgZXJyb3IuY10pLgorKyAgZ2xfUFJFUkVRX0VSUk9SCisrXSkKKysKKysjIFJlZGVmaW5lIEFDX0ZVTkNfRVJST1JfQVRfTElORSwgYmVjYXVzZSBpdCBpcyBubyBsb25nZXIgbWFpbnRhaW5lZCBpbgorKyMgQXV0b2NvbmYuCisrQUNfREVGVU4oW0FDX0ZVTkNfRVJST1JfQVRfTElORV0sCisrWworKyAgQUNfTElCU09VUkNFUyhbZXJyb3IuaCwgZXJyb3IuY10pZG5sCisgICBBQ19DQUNIRV9DSEVDSyhbZm9yIGVycm9yX2F0X2xpbmVdLCBbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmVdLAorICAgICBbQUNfTElOS19JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCitAQCAtMTcsNiArMjUsOSBAQCBBQ19ERUZVTihbZ2xfRVJST1JdLAorICAgICAgICAgICBbW2Vycm9yX2F0X2xpbmUgKDAsIDAsICIiLCAwLCAiYW4gZXJyb3Igb2NjdXJyZWQiKTtdXSldLAorICAgICAgICBbYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9eWVzXSwKKyAgICAgICAgW2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lPW5vXSldKQorKyAgaWYgdGVzdCAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUgPSBubzsgdGhlbgorKyAgICBBQ19MSUJPQkooW2Vycm9yXSkKKysgIGZpCisgXSkKKyAKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL2Vycm9yLmMuCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXh0ZW5zaW9ucy5tNCBsaWJpY29udi0xLjE0L3NyY200L2V4dGVuc2lvbnMubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvZXh0ZW5zaW9ucy5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvZXh0ZW5zaW9ucy5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjYwNjQ4NDQ3MSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBzZXJpYWwgMTAgIC0qLSBBdXRvY29uZiAtKi0KKysjIHNlcmlhbCA5ICAtKi0gQXV0b2NvbmYgLSotCisgIyBFbmFibGUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgbm9ybWFsbHkgZGlzYWJsZSB0aGVtLgorIAorICMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitAQCAtNjcsMTAgKzY3LDYgQEAgQUNfQkVGT1JFKFskMF0sIFtBQ19SVU5fSUZFTFNFXSlkbmwKKyAjaWZuZGVmIF9BTExfU09VUkNFCisgIyB1bmRlZiBfQUxMX1NPVVJDRQorICNlbmRpZgorLS8qIEVuYWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gTWFjT1MgWC4gICovCistI2lmbmRlZiBfREFSV0lOX0NfU09VUkNFCistIyB1bmRlZiBfREFSV0lOX0NfU09VUkNFCistI2VuZGlmCisgLyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLworICNpZm5kZWYgX0dOVV9TT1VSQ0UKKyAjIHVuZGVmIF9HTlVfU09VUkNFCitAQCAtOTksNyArOTUsNiBAQCBBQ19CRUZPUkUoWyQwXSwgW0FDX1JVTl9JRkVMU0VdKWRubAorICAgdGVzdCAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18gPSB5ZXMgJiYKKyAgICAgQUNfREVGSU5FKFtfX0VYVEVOU0lPTlNfX10pCisgICBBQ19ERUZJTkUoW19BTExfU09VUkNFXSkKKy0gIEFDX0RFRklORShbX0RBUldJTl9DX1NPVVJDRV0pCisgICBBQ19ERUZJTkUoW19HTlVfU09VUkNFXSkKKyAgIEFDX0RFRklORShbX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTXSkKKyAgIEFDX0RFRklORShbX1RBTkRFTV9TT1VSQ0VdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jYWNoZS5tNCBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jYWNoZS5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY2FjaGUubTQJMjAxMS0wOC0wNyAwNjo0MjoxMS4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jYWNoZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQzLjE1NDQ4NDU5MyAtMDgwMAorQEAgLTE1LDcgKzE1LDcgQEAKKyAKKyAKKyAjIFNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm0gb2YgYSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbjoKKy0jICAgZ251bGliLXRvb2wgLS1pbXBvcnQgLS1kaXI9LiAtLWxvY2FsLWRpcj1nbnVsaWItbG9jYWwgLS1saWI9bGliaWNydCAtLXNvdXJjZS1iYXNlPXNyY2xpYiAtLW00LWJhc2U9c3JjbTQgLS1kb2MtYmFzZT1kb2MgLS10ZXN0cy1iYXNlPXRlc3RzIC0tYXV4LWRpcj1idWlsZC1hdXggLS1tYWtlZmlsZS1uYW1lPU1ha2VmaWxlLmdudWxpYiAtLW5vLWNvbmRpdGlvbmFsLWRlcGVuZGVuY2llcyAtLW5vLWxpYnRvb2wgLS1tYWNyby1wcmVmaXg9Z2wgLS1uby12Yy1maWxlcyBiaW5hcnktaW8gZXJyb3IgZ2V0dGV4dCBnZXR0ZXh0LWggbGliaWNvbnYtbWlzYyBtYnN0YXRlIG1lbW1vdmUgcHJvZ25hbWUgcmVsb2NhdGFibGUtcHJvZyBzYWZlLXJlYWQgc2lncGlwZSBzdGRpbyBzdGRsaWIgc3RyZXJyb3IgdW5pc3RkIHVuaXdpZHRoL3dpZHRoIHVubG9ja2VkLWlvIHhhbGxvYworKyMgICBnbnVsaWItdG9vbCAtLWltcG9ydCAtLWRpcj0uIC0tbG9jYWwtZGlyPWdudWxpYi1sb2NhbCAtLWxpYj1saWJpY3J0IC0tc291cmNlLWJhc2U9c3JjbGliIC0tbTQtYmFzZT1zcmNtNCAtLWRvYy1iYXNlPWRvYyAtLXRlc3RzLWJhc2U9dGVzdHMgLS1hdXgtZGlyPWJ1aWxkLWF1eCAtLW1ha2VmaWxlLW5hbWU9TWFrZWZpbGUuZ251bGliIC0tbm8tbGlidG9vbCAtLW1hY3JvLXByZWZpeD1nbCAtLW5vLXZjLWZpbGVzIGJpbmFyeS1pbyBlcnJvciBnZXR0ZXh0IGdldHRleHQtaCBsaWJpY29udi1taXNjIG1ic3RhdGUgbWVtbW92ZSBwcm9nbmFtZSByZWxvY2F0YWJsZSByZWxvY2F0YWJsZS1wcm9nIHNhZmUtcmVhZCBzaWdwaXBlIHN0ZGlvIHN0ZGxpYiBzdHJlcnJvciB1bmlzdGQgdW5pd2lkdGgvd2lkdGggdW5sb2NrZWQtaW8geGFsbG9jCisgCisgIyBTcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtIG9mIGEgZmV3IGdudWxpYi10b29sLm00IG1hY3JvIGludm9jYXRpb25zOgorIGdsX0xPQ0FMX0RJUihbZ251bGliLWxvY2FsXSkKK0BAIC0yOCw2ICsyOCw3IEBAIGdsX01PRFVMRVMoWworICAgbWJzdGF0ZQorICAgbWVtbW92ZQorICAgcHJvZ25hbWUKKysgIHJlbG9jYXRhYmxlCisgICByZWxvY2F0YWJsZS1wcm9nCisgICBzYWZlLXJlYWQKKyAgIHNpZ3BpcGUKK0BAIC00OSw1ICs1MCw0IEBAIGdsX0xJQihbbGliaWNydF0pCisgZ2xfTUFLRUZJTEVfTkFNRShbTWFrZWZpbGUuZ251bGliXSkKKyBnbF9NQUNST19QUkVGSVgoW2dsXSkKKyBnbF9QT19ET01BSU4oW10pCistZ2xfV0lUTkVTU19DX0RPTUFJTihbXSkKKyBnbF9WQ19GSUxFUyhbZmFsc2VdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21tb24ubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tbW9uLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21tb24ubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21tb24ubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42MzQ0ODQ0NzEgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgZ251bGliLWNvbW1vbi5tNCBzZXJpYWwgMjkKKysjIGdudWxpYi1jb21tb24ubTQgc2VyaWFsIDI0CisgZG5sIENvcHlyaWdodCAoQykgMjAwNy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEyLDE5ICsxMiw2IEBAIEFDX0RFRlVOKFtnbF9DT01NT05dLCBbCisgICBBQ19SRVFVSVJFKFtnbF9DT01NT05fQk9EWV0pCisgXSkKKyBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCistICBBSF9WRVJCQVRJTShbX05vcmV0dXJuXSwKKy1bLyogVGhlIF9Ob3JldHVybiBrZXl3b3JkIG9mIGRyYWZ0IEMxWC4gICovCistI2lmbmRlZiBfTm9yZXR1cm4KKy0jIGlmICgzIDw9IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDggPD0gX19HTlVDX01JTk9SX18pIFwKKy0gICAgICB8fCAweDUxMTAgPD0gX19TVU5QUk9fQykKKy0jICBkZWZpbmUgX05vcmV0dXJuIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKQorLSMgZWxpZiAxMjAwIDw9IF9NU0NfVkVSCistIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVybikKKy0jIGVsc2UKKy0jICBkZWZpbmUgX05vcmV0dXJuCistIyBlbmRpZgorLSNlbmRpZgorLV0pCisgICBBSF9WRVJCQVRJTShbaXNvYzk5X2lubGluZV0sCisgWy8qIFdvcmsgYXJvdW5kIGEgYnVnIGluIEFwcGxlIEdDQyA0LjAuMSBidWlsZCA1NDY1OiBJbiBDOTkgbW9kZSwgaXQgc3VwcG9ydHMKKyAgICB0aGUgSVNPIEMgOTkgc2VtYW50aWNzIG9mICdleHRlcm4gaW5saW5lJyAodW5saWtlIHRoZSBHTlUgQyBzZW1hbnRpY3Mgb2YKK0BAIC00NywyMCArMzQsNiBAQCBBQ19ERUZVTihbZ2xfQ09NTU9OX0JPRFldLCBbCisgLyogVGhlIG5hbWUgX1VOVVNFRF9QQVJBTUVURVJfIGlzIGFuIGVhcmxpZXIgc3BlbGxpbmcsIGFsdGhvdWdoIHRoZSBuYW1lCisgICAgaXMgYSBtaXNub21lciBvdXRzaWRlIG9mIHBhcmFtZXRlciBsaXN0cy4gICovCisgI2RlZmluZSBfVU5VU0VEX1BBUkFNRVRFUl8gX0dMX1VOVVNFRAorLQorLS8qIFRoZSBfX3B1cmVfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk2LiAgKi8KKy0jaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk2KQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfUFVSRSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKQorLSNlbHNlCistIyBkZWZpbmUgX0dMX0FUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCistI2VuZGlmCistCistLyogVGhlIF9fY29uc3RfXyBhdHRyaWJ1dGUgd2FzIGFkZGVkIGluIGdjYyAyLjk1LiAgKi8KKy0jaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk1KQorLSMgZGVmaW5lIF9HTF9BVFRSSUJVVEVfQ09OU1QgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpCistI2Vsc2UKKy0jIGRlZmluZSBfR0xfQVRUUklCVVRFX0NPTlNUIC8qIGVtcHR5ICovCistI2VuZGlmCisgXSkKKyAgIGRubCBQcmVwYXJhdGlvbiBmb3IgcnVubmluZyB0ZXN0IHByb2dyYW1zOgorICAgZG5sIFRlbGwgZ2xpYmMgdG8gd3JpdGUgZGlhZ25vc3RpY3MgZnJvbSAtRF9GT1JUSUZZX1NPVVJDRT0yIHRvIHN0ZGVyciwgbm90CitAQCAtNzQsNDkgKzQ3LDE2IEBAIEFDX0RFRlVOKFtnbF9DT01NT05fQk9EWV0sIFsKKyAjIGV4cGFuZHMgdG8gYSBDIHByZXByb2Nlc3NvciBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIDEgb3IgMCwgZGVwZW5kaW5nCisgIyB3aGV0aGVyIGEgZ251bGliIG1vZHVsZSB0aGF0IGhhcyBiZWVuIHJlcXVlc3RlZCBzaGFsbCBiZSBjb25zaWRlcmVkIHByZXNlbnQKKyAjIG9yIG5vdC4KKy1tNF9kZWZpbmUoW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSwgWzFdKQorK0FDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0sIFsxXSkKKyAKKyAjIGdsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFKFttb2R1bGVuYW1lXSkKKyAjIHNldHMgdGhlIHNoZWxsIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgZ2l2ZW4gbW9kdWxlIHRvCisgIyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCB3aWxsIGV2YWx1YXRlIHRvIDEuCisgQUNfREVGVU4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFXSwKKyBbCistICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVgoCistICAgIFtHTlVMSUJfW11tNF90cmFuc2xpdChbWyQxXV0sCistICAgICAgICAgICAgICAgICAgICAgICAgICBbYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy1dLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgW0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fXSldLAorLSAgICBbZ2xfTU9EVUxFX0lORElDQVRPUl9DT05ESVRJT05dKQorLV0pCistCistIyBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVgoW3ZhcmlhYmxlXSkKKy0jIG1vZGlmaWVzIHRoZSBzaGVsbCB2YXJpYWJsZSB0byBpbmNsdWRlIHRoZSBnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTi4KKy0jIFRoZSBzaGVsbCB2YXJpYWJsZSdzIHZhbHVlIGlzIGEgQyBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcworLSMgdG8gMCBvciAxLgorLUFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhdLAorLVsKKy0gIG00X2lmKG00X2RlZm4oW2dsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OXSksIFsxXSwKKy0gICAgWworLSAgICAgZG5sIFNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIFZBTFVFIHx8IDEgdG8gMS4KKy0gICAgICQxPTEKKy0gICAgXSwKKy0gICAgW2dsX01PRFVMRV9JTkRJQ0FUT1JfU0VUX1ZBUklBQkxFX0FVWF9PUihbJDFdLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnbF9NT0RVTEVfSU5ESUNBVE9SX0NPTkRJVElPTl0pXSkKKy1dKQorLQorLSMgZ2xfTU9EVUxFX0lORElDQVRPUl9TRVRfVkFSSUFCTEVfQVVYX09SKFt2YXJpYWJsZV0sIFtjb25kaXRpb25dKQorLSMgbW9kaWZpZXMgdGhlIHNoZWxsIHZhcmlhYmxlIHRvIGluY2x1ZGUgdGhlIGdpdmVuIGNvbmRpdGlvbi4gIFRoZSBzaGVsbAorLSMgdmFyaWFibGUncyB2YWx1ZSBpcyBhIEMgcHJlcHJvY2Vzc29yIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gMCBvciAxLgorLUFDX0RFRlVOKFtnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRV9BVVhfT1JdLAorLVsKKy0gIGRubCBTaW1wbGlmeSB0aGUgZXhwcmVzc2lvbiAxIHx8IENPTkRJVElPTiB0byAxLgorLSAgaWYgdGVzdCAiJFtdJDEiICE9IDE7IHRoZW4KKy0gICAgZG5sIFNpbXBsaWZ5IHRoZSBleHByZXNzaW9uIDAgfHwgQ09ORElUSU9OIHRvIENPTkRJVElPTi4KKy0gICAgaWYgdGVzdCAiJFtdJDEiID0gMDsgdGhlbgorLSAgICAgICQxPSQyCistICAgIGVsc2UKKy0gICAgICAkMT0iKCRbXSQxIHx8ICQyKSIKKy0gICAgZmkKKy0gIGZpCisrICBHTlVMSUJfW11tNF90cmFuc2xpdChbWyQxXV0sCisrICAgIFthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLV0sCisrICAgIFtBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fX10pPWdsX01PRFVMRV9JTkRJQ0FUT1JfQ09ORElUSU9OCisgXSkKKyAKKyAjIGdsX01PRFVMRV9JTkRJQ0FUT1IoW21vZHVsZW5hbWVdKQorQEAgLTIxMSwzNSArMTUxLDYgQEAgbTRfaWZuZGVmKFtBU19WQVJfSUZdLAorIFttNF9kZWZpbmUoW0FTX1ZBUl9JRl0sCisgW0FTX0lGKFt0ZXN0IHgiQVNfVkFSX0dFVChbJDFdKSIgPSB4IiIkMl0sIFskM10sIFskNF0pXSldKQorIAorLSMgZ2xfUFJPR19BUl9SQU5MSUIKKy0jIERldGVybWluZXMgdGhlIHZhbHVlcyBmb3IgQVIsIEFSRkxBR1MsIFJBTkxJQiB0aGF0IGZpdCB3aXRoIHRoZSBjb21waWxlci4KKy1BQ19ERUZVTihbZ2xfUFJPR19BUl9SQU5MSUJdLAorLVsKKy0gIGRubCBNaW5peCAzIGNvbWVzIHdpdGggdHdvIHRvb2xjaGFpbnM6IFRoZSBBbXN0ZXJkYW0gQ29tcGlsZXIgS2l0IGNvbXBpbGVyCistICBkbmwgYXMgImNjIiwgYW5kIEdDQyBhcyAiZ2NjIi4gVGhleSBoYXZlIGRpZmZlcmVudCBvYmplY3QgZmlsZSBmb3JtYXRzIGFuZAorLSAgZG5sIGxpYnJhcnkgZm9ybWF0cy4gSW4gcGFydGljdWxhciwgdGhlIEdOVSBiaW51dGlscyBwcm9ncmFtcyBhciwgcmFubGliCistICBkbmwgcHJvZHVjZSBsaWJyYXJpZXMgdGhhdCB3b3JrIG9ubHkgd2l0aCBnY2MsIG5vdCB3aXRoIGNjLgorLSAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCistICBBQ19FR1JFUF9DUFAoW0Ftc3RlcmRhbV0sCistICAgIFsKKy0jaWZkZWYgX19BQ0tfXworLUFtc3RlcmRhbQorLSNlbmRpZgorLSAgICBdLAorLSAgICBbQVI9J2NjIC1jLmEnCistICAgICBBUkZMQUdTPSctbycKKy0gICAgIFJBTkxJQj0nOicKKy0gICAgXSwKKy0gICAgW2RubCBVc2UgdGhlIEF1dG9tYWtlLWRvY3VtZW50ZWQgZGVmYXVsdCB2YWx1ZXMgZm9yIEFSIGFuZCBBUkZMQUdTLgorLSAgICAgQVI9J2FyJworLSAgICAgQVJGTEFHUz0nY3J1JworLSAgICAgZG5sIFVzZSB0aGUgcmFubGliIHByb2dyYW0gaWYgaXQgaXMgYXZhaWxhYmxlLgorLSAgICAgQUNfUFJPR19SQU5MSUIKKy0gICAgXSkKKy0gIEFDX1NVQlNUKFtBUl0pCistICBBQ19TVUJTVChbQVJGTEFHU10pCistXSkKKy0KKyAjIEFDX1BST0dfTUtESVJfUAorICMgaXMgYSBiYWNrcG9ydCBvZiBhdXRvY29uZi0yLjYwJ3MgQUNfUFJPR19NS0RJUl9QLCB3aXRoIGEgZml4CisgIyBmb3IgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIGF1dG9tYWtlLTEuOS42IGZyb20gYXV0b2NvbmYtMi42Mi4KK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9nbnVsaWItY29tcC5tNCBsaWJpY29udi0xLjE0L3NyY200L2dudWxpYi1jb21wLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2dudWxpYi1jb21wLm00CTIwMTEtMDgtMDcgMDY6NDI6MTIuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9nbnVsaWItY29tcC5tNAkyMDEyLTAxLTA4IDAyOjA3OjQzLjkyMjQ4NDYzMCAtMDgwMAorQEAgLTI1LDEyICsyNSwxNCBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgbTRfcGF0dGVybl9hbGxvdyhbXmdsX0VTJF0pZG5sIGEgdmFsaWQgbG9jYWxlIG5hbWUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MSUJPQkpTJF0pZG5sIGEgdmFyaWFibGUKKyAgIG00X3BhdHRlcm5fYWxsb3coW15nbF9MVExJQk9CSlMkXSlkbmwgYSB2YXJpYWJsZQorLSAgQUNfUkVRVUlSRShbZ2xfUFJPR19BUl9SQU5MSUJdKQorKyAgQUNfUkVRVUlSRShbQUNfUFJPR19SQU5MSUJdKQorICAgQUNfUkVRVUlSRShbQU1fUFJPR19DQ19DX09dKQorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYS1vcHQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhdG9yOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGFyZWFkbGluazoKKysgICMgQ29kZSBmcm9tIG1vZHVsZSBhcmctbm9ubnVsbDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBiaW5hcnktaW86CisrICAjIENvZGUgZnJvbSBtb2R1bGUgYysrZGVmczoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBjYW5vbmljYWxpemUtbGdwbDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBjYXJlYWRsaW5rYXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgZG9zbmFtZToKK0BAIC00Niw3ICs0OCw2IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICAjIENvZGUgZnJvbSBtb2R1bGUgaGF2ZWxpYjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBpbmNsdWRlX25leHQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgaW50cHJvcHM6CistICAjIENvZGUgZnJvbSBtb2R1bGUgbGFyZ2VmaWxlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIGxpYmljb252LW1pc2M6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgbHN0YXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgbWFsbG9jYToKK0BAIC02NCwxMCArNjUsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25hbDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwaXBlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ3Byb2NtYXNrOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvX05vcmV0dXJuOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvYXJnLW5vbm51bGw6CistICAjIENvZGUgZnJvbSBtb2R1bGUgc25pcHBldC9jKytkZWZzOgorLSAgIyBDb2RlIGZyb20gbW9kdWxlIHNuaXBwZXQvd2Fybi1vbi11c2U6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3NpemVfdDoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdGF0OgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGJvb2w6CitAQCAtNzcsNyArNzQsNiBAQCBBQ19ERUZVTihbZ2xfRUFSTFldLAorICAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGxpYjoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvcjoKKy0gICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvci1vdmVycmlkZToKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJpbmc6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3N0YXQ6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgdGltZToKK0BAIC04Nyw2ICs4Myw3IEBAIEFDX0RFRlVOKFtnbF9FQVJMWV0sCisgICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pd2lkdGgvd2lkdGg6CisgICAjIENvZGUgZnJvbSBtb2R1bGUgdW5sb2NrZWQtaW86CisgICAjIENvZGUgZnJvbSBtb2R1bGUgdmVyaWZ5OgorKyAgIyBDb2RlIGZyb20gbW9kdWxlIHdhcm4tb24tdXNlOgorICAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYzoKKyAgICMgQ29kZSBmcm9tIG1vZHVsZSB4cmVhZGxpbms6CisgXSkKK0BAIC0xMDksOSArMTA2LDYgQEAgQUNfREVGVU4oW2dsX0lOSVRdLAorICAgZ2xfc291cmNlX2Jhc2U9J3NyY2xpYicKKyBnbF9GVU5DX0FMTE9DQQorIGdsX0NBTk9OSUNBTElaRV9MR1BMCistaWYgdGVzdCAkSEFWRV9DQU5PTklDQUxJWkVfRklMRV9OQU1FID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKy1maQorIGdsX01PRFVMRV9JTkRJQ0FUT1IoW2Nhbm9uaWNhbGl6ZS1sZ3BsXSkKKyBnbF9TVERMSUJfTU9EVUxFX0lORElDQVRPUihbY2Fub25pY2FsaXplX2ZpbGVfbmFtZV0pCisgZ2xfU1RETElCX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWxwYXRoXSkKK0BAIC0xMjEsMTAgKzExNSw2IEBAIGdsX0VOVklST04KKyBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbZW52aXJvbl0pCisgZ2xfSEVBREVSX0VSUk5PX0gKKyBnbF9FUlJPUgorLWlmIHRlc3QgJGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4KKy0gIEFDX0xJQk9CSihbZXJyb3JdKQorLSAgZ2xfUFJFUkVRX0VSUk9SCistZmkKKyBtNF9pZmRlZihbQU1fWEdFVFRFWFRfT1BUSU9OXSwKKyAgIFtBTV9dW1hHRVRURVhUX09QVElPTihbLS1mbGFnPWVycm9yOjM6Yy1mb3JtYXRdKQorICAgIEFNX11bWEdFVFRFWFRfT1BUSU9OKFstLWZsYWc9ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0XSldKQorQEAgLTEzNCw0MyArMTI0LDI2IEBAIEFNX0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTguMV0pCisgQUNfU1VCU1QoW0xJQklOVExdKQorIEFDX1NVQlNUKFtMVExJQklOVExdKQorIGdsX0ZVTkNfTFNUQVQKKy1pZiB0ZXN0ICRSRVBMQUNFX0xTVEFUID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtsc3RhdF0pCistICBnbF9QUkVSRVFfTFNUQVQKKy1maQorIGdsX1NZU19TVEFUX01PRFVMRV9JTkRJQ0FUT1IoW2xzdGF0XSkKKyBnbF9NQUxMT0NBCisgQUNfVFlQRV9NQlNUQVRFX1QKKyBnbF9GVU5DX01FTU1PVkUKKy1pZiB0ZXN0ICRhY19jdl9mdW5jX21lbW1vdmUgPSBubzsgdGhlbgorLSAgQUNfTElCT0JKKFttZW1tb3ZlXSkKKy0gIGdsX1BSRVJFUV9NRU1NT1ZFCistZmkKKyBnbF9NVUxUSUFSQ0gKKyBnbF9QQVRITUFYCisgQUNfQ0hFQ0tfREVDTFMoW3Byb2dyYW1faW52b2NhdGlvbl9uYW1lXSwgW10sIFtdLCBbI2luY2x1ZGUgPGVycm5vLmg+XSkKKyBBQ19DSEVDS19ERUNMUyhbcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWVdLCBbXSwgW10sIFsjaW5jbHVkZSA8ZXJybm8uaD5dKQorIGdsX0ZVTkNfUkVBRAorLWlmIHRlc3QgJFJFUExBQ0VfUkVBRCA9IDE7IHRoZW4KKy0gIEFDX0xJQk9CSihbcmVhZF0pCistZmkKKyBnbF9VTklTVERfTU9EVUxFX0lORElDQVRPUihbcmVhZF0pCisgZ2xfRlVOQ19SRUFETElOSworLWlmIHRlc3QgJEhBVkVfUkVBRExJTksgPSAwIHx8IHRlc3QgJFJFUExBQ0VfUkVBRExJTksgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKy0gIGdsX1BSRVJFUV9SRUFETElOSworLWZpCisgZ2xfVU5JU1REX01PRFVMRV9JTkRJQ0FUT1IoW3JlYWRsaW5rXSkKKyBnbF9SRUxPQ0FUQUJMRShbJGdsX3NvdXJjZV9iYXNlXSkKKy1pZiB0ZXN0ICRSRUxPQ0FUQUJMRSA9IHllczsgdGhlbgorLSAgQUNfTElCT0JKKFtwcm9ncmVsb2NdKQorLWZpCisgZ2xfRlVOQ19SRUFETElOS19TRVBBUkFURQorIGdsX0NBTk9OSUNBTElaRV9MR1BMX1NFUEFSQVRFCisgZ2xfTUFMTE9DQQorLWdsX1JFTE9DQVRBQkxFX0xJQlJBUlkKKytnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX1NFUEFSQVRFCisgZ2xfRlVOQ19TRVRFTlZfU0VQQVJBVEUKKy1nbF9QUkVSRVFfU0FGRV9SRUFECisrZ2xfRlVOQ19TVFJFUlJPUl9TRVBBUkFURQorK2dsX1NBRkVfUkVBRAorIGdsX1NJR05BTF9ICisgZ2xfU0lHTkFMX1NJR1BJUEUKKyBkbmwgRGVmaW5lIHRoZSBDIG1hY3JvIEdOVUxJQl9TSUdQSVBFIHRvIDEuCitAQCAtMTg2LDE3ICsxNTksOSBAQCBkbmwgRGVmaW5lIHRoZSBzdWJzdGl0dXRlZCB2YXJpYWJsZSBHTlVMCisgQUNfUkVRVUlSRShbZ2xfVU5JU1REX0hfREVGQVVMVFNdKQorIEdOVUxJQl9VTklTVERfSF9TSUdQSVBFPTEKKyBnbF9TSUdOQUxCTE9DS0lORworLWlmIHRlc3QgJEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkcgPSAwOyB0aGVuCistICBBQ19MSUJPQkooW3NpZ3Byb2NtYXNrXSkKKy0gIGdsX1BSRVJFUV9TSUdQUk9DTUFTSworLWZpCisgZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1IoW3NpZ3Byb2NtYXNrXSkKKyBndF9UWVBFX1NTSVpFX1QKKyBnbF9GVU5DX1NUQVQKKy1pZiB0ZXN0ICRSRVBMQUNFX1NUQVQgPSAxOyB0aGVuCistICBBQ19MSUJPQkooW3N0YXRdKQorLSAgZ2xfUFJFUkVRX1NUQVQKKy1maQorIGdsX1NZU19TVEFUX01PRFVMRV9JTkRJQ0FUT1IoW3N0YXRdKQorIEFNX1NUREJPT0xfSAorIGdsX1NURERFRl9ICitAQCAtMjA0LDE3ICsxNjksNyBAQCBnbF9TVERJTlRfSAorIGdsX1NURElPX0gKKyBnbF9TVERMSUJfSAorIGdsX0ZVTkNfU1RSRVJST1IKKy1pZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdHJlcnJvcl0pCistZmkKKy1nbF9NT0RVTEVfSU5ESUNBVE9SKFtzdHJlcnJvcl0pCisgZ2xfU1RSSU5HX01PRFVMRV9JTkRJQ0FUT1IoW3N0cmVycm9yXSkKKy1BQ19SRVFVSVJFKFtnbF9IRUFERVJfRVJSTk9fSF0pCistQUNfUkVRVUlSRShbZ2xfRlVOQ19TVFJFUlJPUl8wXSkKKy1pZiB0ZXN0IC1uICIkRVJSTk9fSCIgfHwgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUl8wID0gMTsgdGhlbgorLSAgQUNfTElCT0JKKFtzdHJlcnJvci1vdmVycmlkZV0pCistICBnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzIKKy1maQorIGdsX0hFQURFUl9TVFJJTkdfSAorIGdsX0hFQURFUl9TWVNfU1RBVF9ICisgQUNfUFJPR19NS0RJUl9QCitAQCAtMzY0LDE0ICszMTksMTMgQEAgQUNfREVGVU4oW2dsdGVzdHNfTElCU09VUkNFU10sIFsKKyAjIFRoaXMgbWFjcm8gcmVjb3JkcyB0aGUgbGlzdCBvZiBmaWxlcyB3aGljaCBoYXZlIGJlZW4gaW5zdGFsbGVkIGJ5CisgIyBnbnVsaWItdG9vbCBhbmQgbWF5IGJlIHJlbW92ZWQgYnkgZnV0dXJlIGdudWxpYi10b29sIGludm9jYXRpb25zLgorIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisrICBidWlsZC1hdXgvYXJnLW5vbm51bGwuaAorKyAgYnVpbGQtYXV4L2MrK2RlZnMuaAorICAgYnVpbGQtYXV4L2NvbmZpZy5saWJwYXRoCisgICBidWlsZC1hdXgvY29uZmlnLnJwYXRoCisgICBidWlsZC1hdXgvaW5zdGFsbC1yZWxvYworICAgYnVpbGQtYXV4L3JlbG9jLWxkZmxhZ3MKKy0gIGJ1aWxkLWF1eC9zbmlwcGV0L19Ob3JldHVybi5oCistICBidWlsZC1hdXgvc25pcHBldC9hcmctbm9ubnVsbC5oCistICBidWlsZC1hdXgvc25pcHBldC9jKytkZWZzLmgKKy0gIGJ1aWxkLWF1eC9zbmlwcGV0L3dhcm4tb24tdXNlLmgKKysgIGJ1aWxkLWF1eC93YXJuLW9uLXVzZS5oCisgICBkb2MvcmVsb2NhdGFibGUudGV4aQorICAgbGliL2FsbG9jYS5pbi5oCisgICBsaWIvYWxsb2NhdG9yLmMKK0BAIC00MTksOCArMzczLDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKKyAgIGxpYi9zdGRpby5pbi5oCisgICBsaWIvc3RkbGliLmluLmgKKyAgIGxpYi9zdHJlcS5oCistICBsaWIvc3RyZXJyb3Itb3ZlcnJpZGUuYworLSAgbGliL3N0cmVycm9yLW92ZXJyaWRlLmgKKyAgIGxpYi9zdHJlcnJvci5jCisgICBsaWIvc3RyaW5nLmluLmgKKyAgIGxpYi9zeXNfc3RhdC5pbi5oCitAQCAtNDYzLDcgKzQxNSw2IEBAIEFDX0RFRlVOKFtnbF9GSUxFX0xJU1RdLCBbCisgICBtNC9pbnRtYXgubTQKKyAgIG00L2ludHR5cGVzLXByaS5tNAorICAgbTQvaW50dHlwZXNfaC5tNAorLSAgbTQvbGFyZ2VmaWxlLm00CisgICBtNC9sY21lc3NhZ2UubTQKKyAgIG00L2xpYi1sZC5tNAorICAgbTQvbGliLWxpbmsubTQKK0BAIC01MDIsNyArNDUzLDYgQEAgQUNfREVGVU4oW2dsX0ZJTEVfTElTVF0sIFsKKyAgIG00L3N0ZGxpYl9oLm00CisgICBtNC9zdHJlcnJvci5tNAorICAgbTQvc3RyaW5nX2gubTQKKy0gIG00L3N5c19zb2NrZXRfaC5tNAorICAgbTQvc3lzX3N0YXRfaC5tNAorICAgbTQvdGhyZWFkbGliLm00CisgICBtNC90aW1lX2gubTQKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9pbmNsdWRlX25leHQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9pbmNsdWRlX25leHQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvaW5jbHVkZV9uZXh0Lm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9pbmNsdWRlX25leHQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC42NTA0ODQ0NzIgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgaW5jbHVkZV9uZXh0Lm00IHNlcmlhbCAyMAorKyMgaW5jbHVkZV9uZXh0Lm00IHNlcmlhbCAxOAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xNzUsMTMgKzE3NSwxMSBAQCBBQ19ERUZVTihbZ2xfTkVYVF9IRUFERVJTX0lOVEVSTkFMXSwKKyAgICAgW0FDX0NIRUNLX0hFQURFUlNfT05DRShbJDFdKQorICAgICBdKQorIAorLWRubCBGSVhNRTogZ2xfbmV4dF9oZWFkZXIgYW5kIGdsX2hlYWRlcl9leGlzdHMgbXVzdCBiZSB1c2VkIHVucXVvdGVkCistZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyAgIG00X2ZvcmVhY2hfdyhbZ2xfSEVBREVSX05BTUVdLCBbJDFdLAorICAgICBbQVNfVkFSX1BVU0hERUYoW2dsX25leHRfaGVhZGVyXSwKKyAgICAgICAgICAgICAgICAgICAgIFtnbF9jdl9uZXh0X11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKQorICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4KKy0gICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKysgICAgICAgQVNfVkFSX1NFVChbZ2xfbmV4dF9oZWFkZXJdLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQorICAgICAgZWxzZQorICAgICAgICBBQ19DQUNIRV9DSEVDSygKKyAgICAgICAgICBbYWJzb2x1dGUgbmFtZSBvZiA8XW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbPl0sCitAQCAtMjEwLDcgKzIwOCw3IEBAIGRubCB1bnRpbCB3ZSBjYW4gYXNzdW1lIGF1dG9jb25mIDIuNjQgb3IKKyAgICAgICAgICAgICAgICBkbmwgZXZhbCBpcyBuZWNlc3NhcnkgdG8gZXhwYW5kIGdsX2Fic25hbWVfY3BwLgorICAgICAgICAgICAgICAgIGRubCBVbHRyaXggYW5kIFB5cmFtaWQgc2ggcmVmdXNlIHRvIHJlZGlyZWN0IG91dHB1dCBvZiBldmFsLAorICAgICAgICAgICAgICAgIGRubCBzbyB1c2Ugc3Vic2hlbGwuCistICAgICAgICAgICAgICAgQVNfVkFSX1NFVChnbF9uZXh0X2hlYWRlciwKKysgICAgICAgICAgICAgICBBU19WQVJfU0VUKFtnbF9uZXh0X2hlYWRlcl0sCisgICAgICAgICAgICAgICAgICBbJyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JkFTX01FU1NBR0VfTE9HX0ZEIHwKKyAgICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pWyN7CisgICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovXW00X2RlZm4oW2dsX0hFQURFUl9OQU1FXSlbXCkiLiojXDEjCitAQCAtMjIwLDIwICsyMTgsMjAgQEAgZG5sIHVudGlsIHdlIGNhbiBhc3N1bWUgYXV0b2NvbmYgMi42NCBvcgorICAgICAgICAgICAgICAgICAgIH0nYCciJ10pCisgICAgICAgICAgIG00X2lmKFskMl0sIFtjaGVja10sCisgICAgICAgICAgICAgW2Vsc2UKKy0gICAgICAgICAgICAgICBBU19WQVJfU0VUKGdsX25leHRfaGVhZGVyLCBbJzwnZ2xfSEVBREVSX05BTUUnPiddKQorKyAgICAgICAgICAgICAgIEFTX1ZBUl9TRVQoW2dsX25leHRfaGVhZGVyXSwgWyc8J2dsX0hFQURFUl9OQU1FJz4nXSkKKyAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICBdKQorICAgICAgICAgIF0pCisgICAgICBmaQorICAgICAgQUNfU1VCU1QoCisgICAgICAgIEFTX1RSX0NQUChbTkVYVF9dbTRfZGVmbihbZ2xfSEVBREVSX05BTUVdKSksCistICAgICAgIFtBU19WQVJfR0VUKGdsX25leHRfaGVhZGVyKV0pCisrICAgICAgIFtBU19WQVJfR0VUKFtnbF9uZXh0X2hlYWRlcl0pXSkKKyAgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4KKyAgICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnCisgICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2dsX0hFQURFUl9OQU1FJz4nCisgICAgICBlbHNlCisgICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScKKy0gICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9QVNfVkFSX0dFVChnbF9uZXh0X2hlYWRlcikKKysgICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9QVNfVkFSX0dFVChbZ2xfbmV4dF9oZWFkZXJdKQorICAgICAgZmkKKyAgICAgIEFDX1NVQlNUKAorICAgICAgICBBU19UUl9DUFAoW05FWFRfQVNfRklSU1RfRElSRUNUSVZFX11tNF9kZWZuKFtnbF9IRUFERVJfTkFNRV0pKSwKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9sYXJnZWZpbGUubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9sYXJnZWZpbGUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbGFyZ2VmaWxlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9sYXJnZWZpbGUubTQJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKK0BAIC0xLDEwNCArMCwwIEBACistIyBFbmFibGUgbGFyZ2UgZmlsZXMgb24gc3lzdGVtcyB3aGVyZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdC4KKy0KKy0jIENvcHlyaWdodCAxOTkyLTE5OTYsIDE5OTgtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCistIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorLQorLSMgVGhlIGZvbGxvd2luZyBpbXBsZW1lbnRhdGlvbiB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIGF1dG9jb25mIDw9IDIuNjg7CistIyBBQ19TWVNfTEFSR0VGSUxFIGRvZXMgbm90IGNvbmZpZ3VyZSBmb3IgbGFyZ2UgaW5vZGVzIG9uIE1hYyBPUyBYIDEwLjUuCistbTRfdmVyc2lvbl9wcmVyZXEoWzIuNjldLCBbXSAsWworLQorLSMgX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFUworLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLW00X2RlZmluZShbX0FDX1NZU19MQVJHRUZJTEVfVEVTVF9JTkNMVURFU10sCistW0AlOkBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0gLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCistICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKy0gICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworLSAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCistQCU6QGRlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCistICBpbnQgb2ZmX3RfaXNfbGFyZ2VbWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCistCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCistCQkgICAgICA/IDEgOiAtMV1dO1tdZG5sCistXSkKKy0KKy0KKy0jIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKEMtTUFDUk8sIFZBTFVFLAorLSMJCQkJQ0FDSEUtVkFSLAorLSMJCQkJREVTQ1JJUFRJT04sCistIwkJCQlQUk9MT0dVRSwgW0ZVTkNUSU9OLUJPRFldKQorLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1tNF9kZWZpbmUoW19BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFXSwKKy1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkMSB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzXSwgWyQzXSwKKy1bd2hpbGUgOjsgZG8KKy0gIG00X2lmdmFsKFskNl0sIFtBQ19MSU5LX0lGRUxTRV0sIFtBQ19DT01QSUxFX0lGRUxTRV0pKAorLSAgICBbQUNfTEFOR19QUk9HUkFNKFskNV0sIFskNl0pXSwKKy0gICAgWyQzPW5vOyBicmVha10pCistICBtNF9pZnZhbChbJDZdLCBbQUNfTElOS19JRkVMU0VdLCBbQUNfQ09NUElMRV9JRkVMU0VdKSgKKy0gICAgW0FDX0xBTkdfUFJPR1JBTShbQCU6QGRlZmluZSAkMSAkMgorLSQ1XSwgWyQ2XSldLAorLSAgICBbJDM9JDI7IGJyZWFrXSkKKy0gICQzPXVua25vd24KKy0gIGJyZWFrCistZG9uZV0pCistY2FzZSAkJDMgaW4gIygKKy0gIG5vIHwgdW5rbm93bikgOzsKKy0gICopIEFDX0RFRklORV9VTlFVT1RFRChbJDFdLCBbJCQzXSwgWyQ0XSk7OworLWVzYWMKKy1ybSAtcmYgY29uZnRlc3QqW11kbmwKKy1dKSMgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUKKy0KKy0KKy0jIEFDX1NZU19MQVJHRUZJTEUKKy0jIC0tLS0tLS0tLS0tLS0tLS0KKy0jIEJ5IGRlZmF1bHQsIG1hbnkgaG9zdHMgd29uJ3QgbGV0IHByb2dyYW1zIGFjY2VzcyBsYXJnZSBmaWxlczsKKy0jIG9uZSBtdXN0IHVzZSBzcGVjaWFsIGNvbXBpbGVyIG9wdGlvbnMgdG8gZ2V0IGxhcmdlLWZpbGUgYWNjZXNzIHRvIHdvcmsuCistIyBGb3IgbW9yZSBkZXRhaWxzIGFib3V0IHRoaXMgYnJhaW4gZGFtYWdlIHBsZWFzZSBzZWU6CistIyBodHRwOi8vd3d3LnVuaXgtc3lzdGVtcy5vcmcvdmVyc2lvbjIvd2hhdHNuZXcvbGZzMjBtYXIuaHRtbAorLUFDX0RFRlVOKFtBQ19TWVNfTEFSR0VGSUxFXSwKKy1bQUNfQVJHX0VOQUJMRShsYXJnZWZpbGUsCistCSAgICAgICBbICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzXSkKKy1pZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87IHRoZW4KKy0KKy0gIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlc10sCistICAgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MsCistICAgIFthY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vCistICAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKy0gICAgICAgYWNfc2F2ZV9DQz0kQ0MKKy0gICAgICAgd2hpbGUgOjsgZG8KKy0JICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCistCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCistCSBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1BST0dSQU0oW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKV0pCistCSBBQ19DT01QSUxFX0lGRUxTRShbXSwgW2JyZWFrXSkKKy0JIENDPSIkQ0MgLW4zMiIKKy0JIEFDX0NPTVBJTEVfSUZFTFNFKFtdLCBbYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz0nIC1uMzInOyBicmVha10pCistCSBicmVhaworLSAgICAgICBkb25lCistICAgICAgIENDPSRhY19zYXZlX0NDCistICAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKKy0gICAgZmldKQorLSAgaWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiICE9IG5vOyB0aGVuCistICAgIENDPSRDQyRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDCistICBmaQorLQorLSAgX0FDX1NZU19MQVJHRUZJTEVfTUFDUk9fVkFMVUUoX0ZJTEVfT0ZGU0VUX0JJVFMsIDY0LAorLSAgICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cywKKy0gICAgW051bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuXSwKKy0gICAgW19BQ19TWVNfTEFSR0VGSUxFX1RFU1RfSU5DTFVERVNdKQorLSAgaWYgdGVzdCAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMgPSB1bmtub3duOyB0aGVuCistICAgIF9BQ19TWVNfTEFSR0VGSUxFX01BQ1JPX1ZBTFVFKF9MQVJHRV9GSUxFUywgMSwKKy0gICAgICBhY19jdl9zeXNfbGFyZ2VfZmlsZXMsCistICAgICAgW0RlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy5dLAorLSAgICAgIFtfQUNfU1lTX0xBUkdFRklMRV9URVNUX0lOQ0xVREVTXSkKKy0gIGZpCistCistICBBSF9WRVJCQVRJTShbX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFXSwKKy1bLyogRW5hYmxlIGxhcmdlIGlub2RlIG51bWJlcnMgb24gTWFjIE9TIFguICAqLworLSNpZm5kZWYgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFCistIyBkZWZpbmUgX0RBUldJTl9VU0VfNjRfQklUX0lOT0RFIDEKKy0jZW5kaWZdKQorLWZpCistXSkjIEFDX1NZU19MQVJHRUZJTEUKKy0KKy1dKSMgbTRfdmVyc2lvbl9wcmVyZXEgMi42OQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L2xzdGF0Lm00IGxpYmljb252LTEuMTQvc3JjbTQvbHN0YXQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbHN0YXQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L2xzdGF0Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzIyNDg0NDc2IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNlcmlhbCAyMworKyMgc2VyaWFsIDIxCisgCisgIyBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSwgMjAwMy0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICMKK0BAIC0xNSwyOCArMTUsMjQgQEAgQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRdLAorICAgZG5sICIjZGVmaW5lIGxzdGF0IHN0YXQiLCBhbmQgbHN0YXQuYyBpcyBhIG5vLW9wLgorICAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbbHN0YXRdKQorICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdCA9IHllczsgdGhlbgorLSAgICBBQ19SRVFVSVJFKFtnbF9GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LXSkKKy0gICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0gbm87IHRoZW4KKysgICAgQUNfUkVRVUlSRShbQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10pCisrICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IG5vOyB0aGVuCisrICAgICAgZG5sIE5vdGU6IEFDX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTksgZG9lcyBBQ19MSUJPQkooW2xzdGF0XSkuCisgICAgICAgUkVQTEFDRV9MU1RBVD0xCisgICAgIGZpCisrICAgICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbHN0YXQuYy4KKysgICAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorICAgZWxzZQorICAgICBIQVZFX0xTVEFUPTAKKyAgIGZpCisgXSkKKyAKKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL2xzdGF0LmMuCistQUNfREVGVU4oW2dsX1BSRVJFUV9MU1RBVF0sCisrIyBSZWRlZmluZSBBQ19GVU5DX0xTVEFUX0ZPTExPV1NfU0xBU0hFRF9TWU1MSU5LLCBiZWNhdXNlIGl0IGlzIG5vIGxvbmdlcgorKyMgbWFpbnRhaW5lZCBpbiBBdXRvY29uZi4KKytBQ19ERUZVTihbQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOS10sCisgWworLSAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorLSAgOgorLV0pCistCistQUNfREVGVU4oW2dsX0ZVTkNfTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLAorLVsKKy0gIGRubCBXZSBkb24ndCB1c2UgQUNfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfU1lNTElOSyBhbnkgbW9yZSwgYmVjYXVzZSBpdAorLSAgZG5sIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGluIEF1dG9jb25mIGFuZCBiZWNhdXNlIGl0IGludm9rZXMgQUNfTElCT0JKLgorICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2hdLAorLSAgICBbZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rXSwKKysgICAgW2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGlua10sCisgICAgIFtybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQorICAgICAgZWNobyA+Y29uZnRlc3QuZmlsZQorICAgICAgaWYgdGVzdCAiJGFzX2xuX3MiID0gImxuIC1zIiAmJiBsbiAtcyBjb25mdGVzdC5maWxlIGNvbmZ0ZXN0LnN5bTsgdGhlbgorQEAgLTQ5LDIyICs0NSwyNSBAQCBBQ19ERUZVTihbZ2xfRlVOQ19MU1RBVF9GT0xMT1dTX1NMQVNIRURfCisgICAgICAgICAgICAgICAgICBoYXZlIHRvIGNvbXBpbGUgYW5kIHVzZSB0aGUgbHN0YXQgd3JhcHBlci4gICovCisgICAgICAgICAgICAgICByZXR1cm4gbHN0YXQgKCJjb25mdGVzdC5zeW0vIiwgJnNidWYpID09IDA7CisgICAgICAgICAgICAgXV0pXSwKKy0gICAgICAgICBbZ2xfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc10sCistICAgICAgICAgW2dsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ub10sCisrICAgICAgICAgW2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXNdLAorKyAgICAgICAgIFthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm9dLAorICAgICAgICAgIFsjIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCBiZSBwZXNzaW1pc3RpYyBzbyB3ZSB3aWxsIGVuZCB1cCB1c2luZyB0aGUKKyAgICAgICAgICAgIyByZXBsYWNlbWVudCB2ZXJzaW9uIG9mIGxzdGF0IHRoYXQgY2hlY2tzIGZvciB0cmFpbGluZyBzbGFzaGVzIGFuZAorICAgICAgICAgICAjIGNhbGxzIGxzdGF0IGEgc2Vjb25kIHRpbWUgd2hlbiBuZWNlc3NhcnkuCistICAgICAgICAgIGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz1ubworKyAgICAgICAgICBhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKyAgICAgICAgICBdKQorICAgICAgZWxzZQorICAgICAgICAjIElmIHRoZSAnbG4gLXMnIGNvbW1hbmQgZmFpbGVkLCB0aGVuIHdlIHByb2JhYmx5IGRvbid0IGV2ZW4KKyAgICAgICAgIyBoYXZlIGFuIGxzdGF0IGZ1bmN0aW9uLgorLSAgICAgICBnbF9jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8KKysgICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3Quc3ltIGNvbmZ0ZXN0LmZpbGUKKyAgICAgXSkKKy0gIHRlc3QgJGdsX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJgorKyAgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0geWVzICYmCisgICAgIEFDX0RFRklORV9VTlFVT1RFRChbTFNUQVRfRk9MTE9XU19TTEFTSEVEX1NZTUxJTktdLCBbMV0sCisgICAgICAgW0RlZmluZSB0byAxIGlmIGBsc3RhdCcgZGVyZWZlcmVuY2VzIGEgc3ltbGluayBzcGVjaWZpZWQKKyAgICAgICAgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLl0pCisrICBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPSB4bm87IHRoZW4KKysgICAgQUNfTElCT0JKKFtsc3RhdF0pCisrICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbWVtbW92ZS5tNCBsaWJpY29udi0xLjE0L3NyY200L21lbW1vdmUubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvbWVtbW92ZS5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvbWVtbW92ZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjczODQ4NDQ3NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBtZW1tb3ZlLm00IHNlcmlhbCA0CisrIyBtZW1tb3ZlLm00IHNlcmlhbCAzCisgZG5sIENvcHlyaWdodCAoQykgMjAwMiwgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTYsNyArNiwxMCBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgCisgQUNfREVGVU4oW2dsX0ZVTkNfTUVNTU9WRV0sCisgWworLSAgQUNfQ0hFQ0tfRlVOQ1MoW21lbW1vdmVdKQorKyAgQUNfUkVQTEFDRV9GVU5DUyhbbWVtbW92ZV0pCisrICBpZiB0ZXN0ICRhY19jdl9mdW5jX21lbW1vdmUgPSBubzsgdGhlbgorKyAgICBnbF9QUkVSRVFfTUVNTU9WRQorKyAgZmkKKyBdKQorIAorICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvbWVtbW92ZS5jLgorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BhdGhtYXgubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9wYXRobWF4Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BhdGhtYXgubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3BhdGhtYXgubTQJMjAxMi0wMS0wOCAwMjowNzo0MC43NTg0ODQ0NzggLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgcGF0aG1heC5tNCBzZXJpYWwgOQorKyMgcGF0aG1heC5tNCBzZXJpYWwgOAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIGRubCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitAQCAtOCw1ICs4LDYgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIEFDX0RFRlVOKFtnbF9QQVRITUFYXSwKKyBbCisgICBkbmwgUHJlcmVxdWlzaXRlcyBvZiBsaWIvcGF0aG1heC5oLgorKyAgQUNfQ0hFQ0tfRlVOQ1NfT05DRShbcGF0aGNvbmZdKQorICAgQUNfQ0hFQ0tfSEVBREVSU19PTkNFKFtzeXMvcGFyYW0uaF0pCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9wby5tNCBsaWJpY29udi0xLjE0L3NyY200L3BvLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3BvLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9wby5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc2NjQ4NDQ3NyAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyBwby5tNCBzZXJpYWwgMTdhCisrIyBwby5tNCBzZXJpYWwgMTcgKGdldHRleHQtMC4xOCkKKyBkbmwgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTE4LDggKzExOCw3IEBAIGNoYW5nZXF1b3RlKFssXSlkbmwKKyAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiI7IHRoZW4KKyAgICAgICAgICAgcm0gLWYgIiRhY19kaXIvUE9URklMRVMiCisgICAgICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIgorLSAgICAgICAgICBndF90YWI9YHByaW50ZiAnXHQnYAorLSAgICAgICAgICBjYXQgIiRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9QT1RGSUxFUy5pbiIgfCBzZWQgLWUgIi9eIy9kIiAtZSAiL15bICR7Z3RfdGFifV0qXCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1woLipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyIKKysgICAgICAgICAgY2F0ICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIvUE9URklMRVMuaW4iIHwgc2VkIC1lICIvXiMvZCIgLWUgIi9eWyAJXSpcJC9kIiAtZSAicywuKiwgICAgICR0b3Bfc3JjZGlyLyYgXFxcXCwiIHwgc2VkIC1lICJcJHMvXCguKlwpIFxcXFwvXDEvIiA+ICIkYWNfZGlyL1BPVEZJTEVTIgorICAgICAgICAgICBQT01BS0VGSUxFREVQUz0iUE9URklMRVMuaW4iCisgICAgICAgICAgICMgQUxMX0xJTkdVQVMsIFBPRklMRVMsIFVQREFURVBPRklMRVMsIERVTU1ZUE9GSUxFUywgR01PRklMRVMgZGVwZW5kCisgICAgICAgICAgICMgb24gJGFjX2RpciBidXQgZG9uJ3QgZGVwZW5kIG9uIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24KK0BAIC0yNTUsNyArMjU0LDYgQEAgRU9UCisgICBmaQorIAorICAgIyBBIHNlZCBzY3JpcHQgdGhhdCBleHRyYWN0cyB0aGUgdmFsdWUgb2YgVkFSSUFCTEUgZnJvbSBhIE1ha2VmaWxlLgorLSAgdGFiPWBwcmludGYgJ1x0J2AKKyAgIHNlZF94X3ZhcmlhYmxlPScKKyAjIFRlc3QgaWYgdGhlIGhvbGQgc3BhY2UgaXMgZW1wdHkuCisgeAorQEAgLTI2Myw5ICsyNjEsOSBAQCBzL1AvUC8KKyB4CisgdGEKKyAjIFllcyBpdCB3YXMgZW1wdHkuIExvb2sgaWYgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKy0vXlsnIiR7dGFifSInIF0qVkFSSUFCTEVbJyIke3RhYn0iJyBdKj0veworKy9eWwkgXSpWQVJJQUJMRVsJIF0qPS97CisgICAjIFNlZW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHZhcmlhYmxlIGRlZmluaXRpb24uCistICBzL15bJyIke3RhYn0iJyBdKlZBUklBQkxFWyciJHt0YWJ9IicgXSo9Ly8KKysgIHMvXlsJIF0qVkFSSUFCTEVbCSBdKj0vLworICAgYmEKKyB9CisgYmQKK0BAIC00MDcsMTUgKzQwNSwxNCBAQCBjaGFuZ2VxdW90ZShbLF0pZG5sCisgICBmaQorIAorICAgc2VkIC1lICJzfEBQT1RGSUxFU19ERVBTQHwkUE9URklMRVNfREVQU3xnIiAtZSAic3xAUE9GSUxFU0B8JFBPRklMRVN8ZyIgLWUgInN8QFVQREFURVBPRklMRVNAfCRVUERBVEVQT0ZJTEVTfGciIC1lICJzfEBEVU1NWVBPRklMRVNAfCREVU1NWVBPRklMRVN8ZyIgLWUgInN8QEdNT0ZJTEVTQHwkR01PRklMRVN8ZyIgLWUgInN8QFBST1BFUlRJRVNGSUxFU0B8JFBST1BFUlRJRVNGSUxFU3xnIiAtZSAic3xAQ0xBU1NGSUxFU0B8JENMQVNTRklMRVN8ZyIgLWUgInN8QFFNRklMRVNAfCRRTUZJTEVTfGciIC1lICJzfEBNU0dGSUxFU0B8JE1TR0ZJTEVTfGciIC1lICJzfEBSRVNPVVJDRVNETExGSUxFU0B8JFJFU09VUkNFU0RMTEZJTEVTfGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBKQVZBQ0FUQUxPR1NAfCRKQVZBQ0FUQUxPR1N8ZyIgLWUgInN8QFFUQ0FUQUxPR1NAfCRRVENBVEFMT0dTfGciIC1lICJzfEBUQ0xDQVRBTE9HU0B8JFRDTENBVEFMT0dTfGciIC1lICJzfEBDU0hBUlBDQVRBTE9HU0B8JENTSEFSUENBVEFMT0dTfGciIC1lICdzLF4jZGlzdGRpcjosZGlzdGRpcjosJyA8ICIkYWNfZmlsZSIgPiAiJGFjX2ZpbGUudG1wIgorLSAgdGFiPWBwcmludGYgJ1x0J2AKKyAgIGlmIGdyZXAgLWwgJ0BUQ0xDQVRBTE9HU0AnICIkYWNfZmlsZSIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIyBBZGQgZGVwZW5kZW5jaWVzIHRoYXQgY2Fubm90IGJlIGZvcm11bGF0ZWQgYXMgYSBzaW1wbGUgc3VmZml4IHJ1bGUuCisgICAgIGZvciBsYW5nIGluICRBTExfTElOR1VBUzsgZG8KKyAgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9cLi4qJC8vJyAtZSAneS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAorICAgICAgIGNhdCA+PiAiJGFjX2ZpbGUudG1wIiA8PEVPRgorICRmcm9iYmVkbGFuZy5tc2c6ICRsYW5nLnBvCistJHt0YWJ9QGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS10Y2wgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8iOyBcCistJHt0YWJ9XCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorKwlAZWNobyAiXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCBcJChzcmNkaXIpIC1sICRsYW5nICRzcmNkaXJwcmUkbGFuZy5wbyI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLXRjbCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIHx8IHsgcm0gLWYgIlwkKHNyY2RpcikvJGZyb2JiZWRsYW5nLm1zZyI7IGV4aXQgMTsgfQorIEVPRgorICAgICBkb25lCisgICBmaQorQEAgLTQyNSw4ICs0MjIsOCBAQCBFT0YKKyAgICAgICBmcm9iYmVkbGFuZz1gZWNobyAkbGFuZyB8IHNlZCAtZSAncy9fLy0vZycgLWUgJ3MvXnNyLUNTL3NyLVNQLycgLWUgJ3MvQGxhdGluJC8tTGF0bi8nIC1lICdzL0BjeXJpbGxpYyQvLUN5cmwvJyAtZSAncy9ec3ItU1AkL3NyLVNQLUxhdG4vJyAtZSAncy9edXotVVokL3V6LVVaLUxhdG4vJ2AKKyAgICAgICBjYXQgPj4gIiRhY19maWxlLnRtcCIgPDxFT0YKKyAkZnJvYmJlZGxhbmcvXCQoRE9NQUlOKS5yZXNvdXJjZXMuZGxsOiAkbGFuZy5wbworLSR7dGFifUBlY2hvICJcJChNU0dGTVQpIC1jIC0tY3NoYXJwIC1kIFwkKHNyY2RpcikgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yIFwkKERPTUFJTikiOyBcCistJHt0YWJ9XCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKysJQGVjaG8gIlwkKE1TR0ZNVCkgLWMgLS1jc2hhcnAgLWQgXCQoc3JjZGlyKSAtbCAkbGFuZyAkc3JjZGlycHJlJGxhbmcucG8gLXIgXCQoRE9NQUlOKSI7IFwKKysJXCQoTVNHRk1UKSAtYyAtLWNzaGFycCAtZCAiXCQoc3JjZGlyKSIgLWwgJGxhbmcgJHNyY2RpcnByZSRsYW5nLnBvIC1yICJcJChET01BSU4pIiB8fCB7IHJtIC1mICJcJChzcmNkaXIpLyRmcm9iYmVkbGFuZy5tc2ciOyBleGl0IDE7IH0KKyBFT0YKKyAgICAgZG9uZQorICAgZmkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkbGluay5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlYWRsaW5rLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlYWRsaW5rLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkbGluay5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc5MDQ4NDQ3OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWFkbGluay5tNCBzZXJpYWwgMTEKKysjIHJlYWRsaW5rLm00IHNlcmlhbCAxMAorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0xMCw2ICsxMCw4IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURMSU5LXSwKKyAgIEFDX0NIRUNLX0ZVTkNTX09OQ0UoW3JlYWRsaW5rXSkKKyAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhZGxpbmsgPSBubzsgdGhlbgorICAgICBIQVZFX1JFQURMSU5LPTAKKysgICAgQUNfTElCT0JKKFtyZWFkbGlua10pCisrICAgIGdsX1BSRVJFUV9SRUFETElOSworICAgZWxzZQorICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciByZWFkbGluayBzaWduYXR1cmUgaXMgY29ycmVjdF0sCisgICAgICAgW2dsX2N2X2RlY2xfcmVhZGxpbmtfd29ya3NdLAorQEAgLTM4LDggKzQwLDEwIEBAIEFDX0RFRlVOKFtnbF9GVU5DX1JFQURMSU5LXSwKKyAgICAgICBBQ19ERUZJTkUoW1JFQURMSU5LX1RSQUlMSU5HX1NMQVNIX0JVR10sIFsxXSwgW0RlZmluZSB0byAxIGlmIHJlYWRsaW5rCisgICAgICAgICBmYWlscyB0byByZWNvZ25pemUgYSB0cmFpbGluZyBzbGFzaC5dKQorICAgICAgIFJFUExBQ0VfUkVBRExJTks9MQorKyAgICAgIEFDX0xJQk9CSihbcmVhZGxpbmtdKQorICAgICBlbGlmIHRlc3QgIiRnbF9jdl9kZWNsX3JlYWRsaW5rX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBSRVBMQUNFX1JFQURMSU5LPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRsaW5rXSkKKyAgICAgZmkKKyAgIGZpCisgXSkKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkLm00IGxpYmljb252LTEuMTQvc3JjbTQvcmVhZC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWFkLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWFkLm00CTIwMTItMDEtMDggMDI6MDc6NDAuNzgyNDg0NDc4IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHJlYWQubTQgc2VyaWFsIDIKKysjIHJlYWQubTQgc2VyaWFsIDEKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTE0LDYgKzE0LDcgQEAgQUNfREVGVU4oW2dsX0ZVTkNfUkVBRF0sCisgICAgIGdsX05PTkJMT0NLSU5HX0lPCisgICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfbm9uYmxvY2tpbmcgIT0geWVzOyB0aGVuCisgICAgICAgUkVQTEFDRV9SRUFEPTEKKysgICAgICBBQ19MSUJPQkooW3JlYWRdKQorICAgICBmaQorICAgXSkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS1saWIubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLWxpYi5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjc5ODQ4NDQ4MCAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWxvY2F0YWJsZS1saWIubTQgc2VyaWFsIDYKKysjIHJlbG9jYXRhYmxlLWxpYi5tNCBzZXJpYWwgNQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTEwLDYgKzEwLDkgQEAgZG5sIFN1cHBvcnQgZm9yIHJlbG9jYXRhYmxlIGxpYnJhcmllcy4KKyBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSkKKysgIGlmIHRlc3QgJFJFTE9DQVRBQkxFID0geWVzOyB0aGVuCisrICAgIEFDX0xJQk9CSihbcmVsb2NhdGFibGVdKQorKyAgZmkKKyBdKQorIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZX0JPRFldLAorIFsKK0BAIC0yOSw2ICszMiwxMyBAQCBBQ19ERUZVTihbZ2xfUkVMT0NBVEFCTEVfTElCUkFSWV9CT0RZXSwKKyAgIGZpCisgXSkKKyAKKytkbmwgTGlrZSBnbF9SRUxPQ0FUQUJMRV9MSUJSQVJZLCBleGNlcHQgcHJlcGFyZSBmb3Igc2VwYXJhdGUgY29tcGlsYXRpb24KKytkbmwgKG5vIEFDX0xJQk9CSikuCisrQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfU0VQQVJBVEVdLAorK1sKKysgIEFDX1JFUVVJUkUoW2dsX1JFTE9DQVRBQkxFX0xJQlJBUllfQk9EWV0pCisrXSkKKysKKyBkbmwgU3VwcG9ydCBmb3IgcmVsb2NhdGFibGUgcGFja2FnZXMgZm9yIHdoaWNoIGl0IGlzIGEgbm9wLgorIEFDX0RFRlVOKFtnbF9SRUxPQ0FUQUJMRV9OT1BdLAorIFsKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9yZWxvY2F0YWJsZS5tNCBsaWJpY29udi0xLjE0L3NyY200L3JlbG9jYXRhYmxlLm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3JlbG9jYXRhYmxlLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9yZWxvY2F0YWJsZS5tNAkyMDEyLTAxLTA4IDAyOjA3OjQwLjgwMjQ4NDQ3OSAtMDgwMAorQEAgLTEsNCArMSw0IEBACistIyByZWxvY2F0YWJsZS5tNCBzZXJpYWwgMTcKKysjIHJlbG9jYXRhYmxlLm00IHNlcmlhbCAxNgorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUtMjAwNywgMjAwOS0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIGRubCBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIGRubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorQEAgLTE0LDYgKzE0LDkgQEAgQUNfREVGVU4oW2dsX1JFTE9DQVRBQkxFXSwKKyBbCisgICBBQ19SRVFVSVJFKFtnbF9SRUxPQ0FUQUJMRV9CT0RZXSkKKyAgIGdsX1JFTE9DQVRBQkxFX0xJQlJBUlkKKysgIGlmIHRlc3QgJFJFTE9DQVRBQkxFID0geWVzOyB0aGVuCisrICAgIEFDX0xJQk9CSihbcHJvZ3JlbG9jXSkKKysgIGZpCisgICA6ICR7UkVMT0NBVEFCTEVfQ09ORklHX0hfRElSPSckKHRvcF9idWlsZGRpciknfQorICAgUkVMT0NBVEFCTEVfU1JDX0RJUj0iXCQodG9wX3NyY2RpcikvJGdsX3NvdXJjZV9iYXNlIgorICAgUkVMT0NBVEFCTEVfQlVJTERfRElSPSJcJCh0b3BfYnVpbGRkaXIpLyRnbF9zb3VyY2VfYmFzZSIKK2RpZmYgLU5hdXJwIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zYWZlLXJlYWQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zYWZlLXJlYWQubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2FmZS1yZWFkLm00CTIwMTEtMDgtMDcgMDY6NDI6MDcuMDAwMDAwMDAwIC0wNzAwCisrKysgbGliaWNvbnYtMS4xNC9zcmNtNC9zYWZlLXJlYWQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MTA0ODQ0ODAgLTA4MDAKK0BAIC0xLDEwICsxLDE3IEBACistIyBzYWZlLXJlYWQubTQgc2VyaWFsIDYKKysjIHNhZmUtcmVhZC5tNCBzZXJpYWwgNQorIGRubCBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMywgMjAwNS0yMDA2LCAyMDA5LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIGRubCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKytBQ19ERUZVTihbZ2xfU0FGRV9SRUFEXSwKKytbCisrICBBQ19MSUJPQkooW3NhZmUtcmVhZF0pCisrCisrICBnbF9QUkVSRVFfU0FGRV9SRUFECisrXSkKKysKKyAjIFByZXJlcXVpc2l0ZXMgb2YgbGliL3NhZmUtcmVhZC5jLgorIEFDX0RFRlVOKFtnbF9QUkVSRVFfU0FGRV9SRUFEXSwKKyBbCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2V0ZW52Lm00IGxpYmljb252LTEuMTQvc3JjbTQvc2V0ZW52Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NldGVudi5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2V0ZW52Lm00CTIwMTItMDEtMDggMDI6MDc6NDAuODE4NDg0NDgxIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNldGVudi5tNCBzZXJpYWwgMjQKKysjIHNldGVudi5tNCBzZXJpYWwgMjIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQsIDIwMDYtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0zOCw2ICszOCw5IEBAIEFDX0RFRlVOKFtnbF9GVU5DX1NFVEVOVl0sCisgICAgICAgUkVQTEFDRV9TRVRFTlY9MQorICAgICBmaQorICAgZmkKKysgIGlmIHRlc3QgJEhBVkVfU0VURU5WJFJFUExBQ0VfU0VURU5WICE9IDEwOyB0aGVuCisrICAgIEFDX0xJQk9CSihbc2V0ZW52XSkKKysgIGZpCisgXSkKKyAKKyAjIExpa2UgZ2xfRlVOQ19TRVRFTlYsIGV4Y2VwdCBwcmVwYXJlIGZvciBzZXBhcmF0ZSBjb21waWxhdGlvbgorQEAgLTYyLDkgKzY1LDkgQEAgQUNfREVGVU4oW2dsX0ZVTkNfVU5TRVRFTlZdLAorICAgZmkKKyAgIEFDX0NIRUNLX0ZVTkNTKFt1bnNldGVudl0pCisgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Vuc2V0ZW52ID0gbm87IHRoZW4KKy0gICAgSEFWRV9VTlNFVEVOVj0wCisrICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorKyAgICBnbF9QUkVSRVFfVU5TRVRFTlYKKyAgIGVsc2UKKy0gICAgSEFWRV9VTlNFVEVOVj0xCisgICAgIGRubCBTb21lIEJTRHMgcmV0dXJuIHZvaWQsIGZhaWxpbmcgdG8gZG8gZXJyb3IgY2hlY2tpbmcuCisgICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgdW5zZXRlbnYoKSByZXR1cm4gdHlwZV0sIFtndF9jdl9mdW5jX3Vuc2V0ZW52X3JldF0sCisgICAgICAgW0FDX0NPTVBJTEVfSUZFTFNFKAorQEAgLTkwLDYgKzkzLDcgQEAgaW50IHVuc2V0ZW52KCk7CisgICAgICAgQUNfREVGSU5FKFtWT0lEX1VOU0VURU5WXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgdW5zZXRlbnYgcmV0dXJucyB2b2lkCisgICAgICAgIGluc3RlYWQgb2YgaW50Ll0pCisgICAgICAgUkVQTEFDRV9VTlNFVEVOVj0xCisrICAgICAgQUNfTElCT0JKKFt1bnNldGVudl0pCisgICAgIGZpCisgCisgICAgIGRubCBTb2xhcmlzIDEwIHVuc2V0ZW52IGRvZXMgbm90IHJlbW92ZSBhbGwgY29waWVzIG9mIGEgbmFtZS4KK0BAIC0xMjIsNiArMTI2LDcgQEAgaW50IHVuc2V0ZW52KCk7CisgICAgICAgW2dsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9Imd1ZXNzaW5nIG5vIl0pXSkKKyAgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3MiICE9IHllczsgdGhlbgorICAgICAgIFJFUExBQ0VfVU5TRVRFTlY9MQorKyAgICAgIEFDX0xJQk9CSihbdW5zZXRlbnZdKQorICAgICBmaQorICAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3NpZ25hbGJsb2NraW5nLm00IGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsYmxvY2tpbmcubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3NpZ25hbGJsb2NraW5nLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODM0NDg0NDgyIC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHNpZ25hbGJsb2NraW5nLm00IHNlcmlhbCAxMgorKyMgc2lnbmFsYmxvY2tpbmcubTQgc2VyaWFsIDEwCisgZG5sIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA2LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtMTIsMTQgKzEyLDMxIEBAIGRubCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG8KKyBBQ19ERUZVTihbZ2xfU0lHTkFMQkxPQ0tJTkddLAorIFsKKyAgIEFDX1JFUVVJUkUoW2dsX1NJR05BTF9IX0RFRkFVTFRTXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0NIRUNLX1RZUEVfU0lHU0VUX1RdKQorLSAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCA9IHllczsgdGhlbgorKyAgc2lnbmFsc19ub3RfcG9zaXg9CisrICBBQ19FR1JFUF9IRUFERVIoW3NpZ3NldF90XSwgW3NpZ25hbC5oXSwgLCBbc2lnbmFsc19ub3RfcG9zaXg9MV0pCisrICBpZiB0ZXN0IC16ICIkc2lnbmFsc19ub3RfcG9zaXgiOyB0aGVuCisgICAgIEFDX0NIRUNLX0ZVTkMoW3NpZ3Byb2NtYXNrXSwgW2dsX2N2X2Z1bmNfc2lncHJvY21hc2s9MV0pCisgICBmaQorICAgaWYgdGVzdCAteiAiJGdsX2N2X2Z1bmNfc2lncHJvY21hc2siOyB0aGVuCisgICAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MAorKyAgICBBQ19MSUJPQkooW3NpZ3Byb2NtYXNrXSkKKysgICAgZ2xfUFJFUkVRX1NJR1BST0NNQVNLCisgICBmaQorIF0pCisgCistIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9zaWdwcm9jbWFzay5jLgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU0lHUFJPQ01BU0tdLCBbOl0pCisrIyBQcmVyZXF1aXNpdGVzIG9mIHRoZSBwYXJ0IG9mIGxpYi9zaWduYWwuaW4uaCBhbmQgb2YgbGliL3NpZ3Byb2NtYXNrLmMuCisrQUNfREVGVU4oW2dsX1BSRVJFUV9TSUdQUk9DTUFTS10sCisrWworKyAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorKyAgQUNfQ0hFQ0tfVFlQRVMoW3NpZ3NldF90XSwKKysgICAgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9eWVzXSwgW2dsX2N2X3R5cGVfc2lnc2V0X3Q9bm9dLAorKyAgICBbI2luY2x1ZGUgPHNpZ25hbC5oPgorKy8qIE1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKysjaW5jbHVkZSA8c3lzL3R5cGVzLmg+XSkKKysgIGlmIHRlc3QgJGdsX2N2X3R5cGVfc2lnc2V0X3QgIT0geWVzOyB0aGVuCisrICAgIEhBVkVfU0lHU0VUX1Q9MAorKyAgZmkKKysgIGRubCBIQVZFX1NJR1NFVF9UIGlzIDEgaWYgdGhlIHN5c3RlbSBsYWNrcyB0aGUgc2lncHJvY21hc2sgZnVuY3Rpb24gYnV0IGhhcworKyAgZG5sIHRoZSBzaWdzZXRfdCB0eXBlLgorKyAgQUNfU1VCU1QoW0hBVkVfU0lHU0VUX1RdKQorK10pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc2lnbmFsX2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zaWduYWxfaC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zaWduYWxfaC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc2lnbmFsX2gubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44MjY0ODQ0ODAgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2lnbmFsX2gubTQgc2VyaWFsIDE2CisrIyBzaWduYWxfaC5tNCBzZXJpYWwgMTIKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtNyw3ICs3LDYgQEAgZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsbworIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF0sCisgWworICAgQUNfUkVRVUlSRShbZ2xfU0lHTkFMX0hfREVGQVVMVFNdKQorLSAgQUNfUkVRVUlSRShbZ2xfQ0hFQ0tfVFlQRV9TSUdTRVRfVF0pCisgICBnbF9ORVhUX0hFQURFUlMoW3NpZ25hbC5oXSkKKyAKKyAjIEFJWCBkZWNsYXJlcyBzaWdfYXRvbWljX3QgdG8gYWxyZWFkeSBpbmNsdWRlIHZvbGF0aWxlLCBhbmQgQzg5IGNvbXBpbGVycworQEAgLTI4LDI1ICsyNywxMCBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX0hdLAorICAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCisgICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCisgICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbI2luY2x1ZGUgPHNpZ25hbC5oPgorLSAgICBdXSwgW3B0aHJlYWRfc2lnbWFzayBzaWdhY3Rpb24KKy0gICAgc2lnYWRkc2V0IHNpZ2RlbHNldCBzaWdlbXB0eXNldCBzaWdmaWxsc2V0IHNpZ2lzbWVtYmVyCisrICAgIF1dLCBbc2lnYWN0aW9uIHNpZ2FkZHNldCBzaWdkZWxzZXQgc2lnZW1wdHlzZXQgc2lnZmlsbHNldCBzaWdpc21lbWJlcgorICAgICBzaWdwZW5kaW5nIHNpZ3Byb2NtYXNrXSkKKyBdKQorIAorLUFDX0RFRlVOKFtnbF9DSEVDS19UWVBFX1NJR1NFVF9UXSwKKy1bCistICBBQ19DSEVDS19UWVBFUyhbc2lnc2V0X3RdLAorLSAgICBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD15ZXNdLCBbZ2xfY3ZfdHlwZV9zaWdzZXRfdD1ub10sCistICAgIFtbCistICAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPgorLSAgICAgIC8qIE1pbmd3IGRlZmluZXMgc2lnc2V0X3Qgbm90IGluIDxzaWduYWwuaD4sIGJ1dCBpbiA8c3lzL3R5cGVzLmg+LiAgKi8KKy0gICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistICAgIF1dKQorLSAgaWYgdGVzdCAkZ2xfY3ZfdHlwZV9zaWdzZXRfdCAhPSB5ZXM7IHRoZW4KKy0gICAgSEFWRV9TSUdTRVRfVD0wCistICBmaQorLV0pCistCisgQUNfREVGVU4oW2dsX1NJR05BTF9NT0RVTEVfSU5ESUNBVE9SXSwKKyBbCisgICBkbmwgVXNlIEFDX1JFUVVJUkUgaGVyZSwgc28gdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgZXhwYW5kZWQgb25jZSBvbmx5LgorQEAgLTU4LDEzICs0MiwxMSBAQCBBQ19ERUZVTihbZ2xfU0lHTkFMX01PRFVMRV9JTkRJQ0FUT1JdLAorIAorIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10sCisgWworLSAgR05VTElCX1BUSFJFQURfU0lHTUFTSz0wOyAgICBBQ19TVUJTVChbR05VTElCX1BUSFJFQURfU0lHTUFTS10pCisgICBHTlVMSUJfU0lHTkFMX0hfU0lHUElQRT0wOyAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHTkFMX0hfU0lHUElQRV0pCisgICBHTlVMSUJfU0lHUFJPQ01BU0s9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0lHUFJPQ01BU0tdKQorICAgR05VTElCX1NJR0FDVElPTj0wOyAgICAgICAgICBBQ19TVUJTVChbR05VTElCX1NJR0FDVElPTl0pCisgICBkbmwgQXNzdW1lIHByb3BlciBHTlUgYmVoYXZpb3IgdW5sZXNzIGFub3RoZXIgbW9kdWxlIHNheXMgb3RoZXJ3aXNlLgorICAgSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lORz0xOyBBQ19TVUJTVChbSEFWRV9QT1NJWF9TSUdOQUxCTE9DS0lOR10pCistICBIQVZFX1BUSFJFQURfU0lHTUFTSz0xOyAgICAgIEFDX1NVQlNUKFtIQVZFX1BUSFJFQURfU0lHTUFTS10pCisgICBIQVZFX1NJR1NFVF9UPTE7ICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1NJR1NFVF9UXSkKKyAgIEhBVkVfU0lHSU5GT19UPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHSU5GT19UXSkKKyAgIEhBVkVfU0lHQUNUSU9OPTE7ICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHQUNUSU9OXSkKK0BAIC03Myw1ICs1NSw0IEBAIEFDX0RFRlVOKFtnbF9TSUdOQUxfSF9ERUZBVUxUU10sCisgICBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UPTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01JQ19UXSkKKyAgIEhBVkVfU0lHSEFORExFUl9UPTE7ICAgICAgICAgQUNfU1VCU1QoW0hBVkVfU0lHSEFORExFUl9UXSkKKy0gIFJFUExBQ0VfUFRIUkVBRF9TSUdNQVNLPTA7ICAgQUNfU1VCU1QoW1JFUExBQ0VfUFRIUkVBRF9TSUdNQVNLXSkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0YXQubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zdGF0Lm00CistLS0gbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0YXQubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0YXQubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44NTQ0ODQ0ODMgLTA4MDAKK0BAIC0xLDQgKzEsNCBAQAorLSMgc2VyaWFsIDgKKysjIHNlcmlhbCA3CisgCisgIyBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAjCitAQCAtNTgsMTEgKzU4LDkgQEAgQUNfREVGVU4oW2dsX0ZVTkNfU1RBVF0sCisgICAgICAgQUNfREVGSU5FKFtSRVBMQUNFX0ZVTkNfU1RBVF9GSUxFXSwgWzFdLCBbRGVmaW5lIHRvIDEgaWYgc3RhdCBuZWVkcworICAgICAgICAgaGVscCB3aGVuIHBhc3NlZCBhIGZpbGUgbmFtZSB3aXRoIGEgdHJhaWxpbmcgc2xhc2hdKTs7CisgICBlc2FjCistXSkKKy0KKy0jIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0YXQuYy4KKy1BQ19ERUZVTihbZ2xfUFJFUkVRX1NUQVRdLAorLVsKKy0gIEFDX1JFUVVJUkUoW0FDX0NfSU5MSU5FXSkKKy0gIDoKKysgIGlmIHRlc3QgJFJFUExBQ0VfU1RBVCA9IDE7IHRoZW4KKysgICAgQUNfTElCT0JKKFtzdGF0XSkKKysgICAgZG5sIFByZXJlcXVpc2l0ZXMgb2YgbGliL3N0YXQuYy4KKysgICAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorKyAgZmkKKyBdKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N0cmVycm9yLm00IGxpYmljb252LTEuMTQvc3JjbTQvc3RyZXJyb3IubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyZXJyb3IubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N0cmVycm9yLm00CTIwMTItMDEtMDggMDI6MDc6NDAuODkwNDg0NDg0IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHN0cmVycm9yLm00IHNlcmlhbCAxNgorKyMgc3RyZXJyb3IubTQgc2VyaWFsIDkKKyBkbmwgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA3LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCitAQCAtNiw3MyArNiw2MyBAQCBkbmwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvCisgCisgQUNfREVGVU4oW2dsX0ZVTkNfU1RSRVJST1JdLAorIFsKKysgIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfU0VQQVJBVEVdKQorKyAgaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKysgICAgQUNfTElCT0JKKFtzdHJlcnJvcl0pCisrICAgIEFDX0RFRklORV9VTlFVT1RFRChbUkVQTEFDRV9TVFJFUlJPUl0sIFskUkVQTEFDRV9TVFJFUlJPUl0sCisrICAgICAgW0RlZmluZSB0aGlzIHRvIDEgaWYgc3RyZXJyb3IgaXMgYnJva2VuLl0pCisrICBmaQorK10pCisrCisrIyBMaWtlIGdsX0ZVTkNfU1RSRVJST1IsIGV4Y2VwdCBwcmVwYXJlIGZvciBzZXBhcmF0ZSBjb21waWxhdGlvbiAobm8gQUNfTElCT0JKKS4KKytBQ19ERUZVTihbZ2xfRlVOQ19TVFJFUlJPUl9TRVBBUkFURV0sCisrWworICAgQUNfUkVRVUlSRShbZ2xfSEVBREVSX1NUUklOR19IX0RFRkFVTFRTXSkKKyAgIEFDX1JFUVVJUkUoW2dsX0hFQURFUl9FUlJOT19IXSkKKy0gIEFDX1JFUVVJUkUoW2dsX0ZVTkNfU1RSRVJST1JfMF0pCistICBtNF9pZmRlZihbZ2xfRlVOQ19TVFJFUlJPUl9SX1dPUktTXSwgWworLSAgICBBQ19SRVFVSVJFKFtnbF9GVU5DX1NUUkVSUk9SX1JfV09SS1NdKQorLSAgXSkKKy0gIGlmIHRlc3QgIiRFUlJOT19IOiRSRVBMQUNFX1NUUkVSUk9SXzAiID0gOjA7IHRoZW4KKysgIGlmIHRlc3QgLXogIiRFUlJOT19IIjsgdGhlbgorICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIHdvcmtpbmcgc3RyZXJyb3IgZnVuY3Rpb25dLAorICAgICAgW2dsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcl0sCisgICAgICBbQUNfUlVOX0lGRUxTRSgKKyAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oCisgICAgICAgICAgICBbWyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgIF1dLAorLSAgICAgICAgICAgW1tpZiAoISpzdHJlcnJvciAoLTIpKSByZXR1cm4gMTtdXSldLAorKyAgICAgICAgICAgW1tyZXR1cm4gISpzdHJlcnJvciAoLTIpO11dKV0sCisgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPXllc10sCisgICAgICAgICBbZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPW5vXSwKKy0gICAgICAgIFtkbmwgQmUgcGVzc2ltaXN0aWMgb24gY3Jvc3MtY29tcGlsZXMgZm9yIG5vdy4KKy0gICAgICAgICBnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9Imd1ZXNzaW5nIG5vIl0pCisrICAgICAgICBbZG5sIEFzc3VtZSBjcm9zc2J1aWxkIHdvcmtzIGlmIGl0IGNvbXBpbGVzLgorKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorKyAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKysgICAgICAgICAgICAgIFtbI2luY2x1ZGUgPHN0cmluZy5oPgorKyAgICAgICAgICAgICAgXV0sCisrICAgICAgICAgICAgICBbW3JldHVybiAhKnN0cmVycm9yICgtMik7XV0pXSwKKysgICAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9eWVzXSwKKysgICAgICAgICAgIFtnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9bm9dKQorKyAgICAgIF0pCisgICAgIF0pCistICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IiICE9IHllczsgdGhlbgorKyAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3IgPSBubzsgdGhlbgorICAgICAgIGRubCBUaGUgc3lzdGVtJ3Mgc3RyZXJyb3IoKSBmYWlscyB0byByZXR1cm4gYSBzdHJpbmcgZm9yIG91dC1vZi1yYW5nZQorICAgICAgIGRubCBpbnRlZ2Vycy4gUmVwbGFjZSBpdC4KKyAgICAgICBSRVBMQUNFX1NUUkVSUk9SPTEKKyAgICAgZmkKKy0gICAgbTRfaWZkZWYoW2dsX0ZVTkNfU1RSRVJST1JfUl9XT1JLU10sIFsKKy0gICAgICBkbmwgSWYgdGhlIHN5c3RlbSdzIHN0cmVycm9yX3Igb3IgX194cGdfc3RyZXJyb3JfciBjbG9iYmVycyBzdHJlcnJvcidzCistICAgICAgZG5sIGJ1ZmZlciwgd2UgbXVzdCByZXBsYWNlIHN0cmVycm9yLgorLSAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3N0cmVycm9yX3Jfd29ya3MiIGluCistICAgICAgICAqbm8pIFJFUExBQ0VfU1RSRVJST1I9MSA7OworLSAgICAgIGVzYWMKKy0gICAgXSkKKyAgIGVsc2UKKyAgICAgZG5sIFRoZSBzeXN0ZW0ncyBzdHJlcnJvcigpIGNhbm5vdCBrbm93IGFib3V0IHRoZSBuZXcgZXJybm8gdmFsdWVzIHdlIGFkZAorLSAgICBkbmwgdG8gPGVycm5vLmg+LCBvciBhbnkgZml4IGZvciBzdHJlcnJvcigwKS4gUmVwbGFjZSBpdC4KKysgICAgZG5sIHRvIDxlcnJuby5oPi4gUmVwbGFjZSBpdC4KKyAgICAgUkVQTEFDRV9TVFJFUlJPUj0xCisgICBmaQorKyAgaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9IDE7IHRoZW4KKysgICAgZ2xfUFJFUkVRX1NUUkVSUk9SCisrICBmaQorIF0pCisgCistZG5sIERldGVjdCBpZiBzdHJlcnJvcigwKSBwYXNzZXMgKHRoYXQgaXMsIGRvZXMgbm90IHNldCBlcnJubywgYW5kIGRvZXMgbm90CistZG5sIHJldHVybiBhIHN0cmluZyB0aGF0IG1hdGNoZXMgc3RyZXJyb3IoLTEpKS4KKy1BQ19ERUZVTihbZ2xfRlVOQ19TVFJFUlJPUl8wXSwKKy1bCistICBSRVBMQUNFX1NUUkVSUk9SXzA9MAorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc3RyZXJyb3IoMCkgc3VjY2VlZHNdLAorLSAgIFtnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3NdLAorLSAgIFtBQ19SVU5fSUZFTFNFKAorLSAgICAgIFtBQ19MQU5HX1BST0dSQU0oCistICAgICAgICAgW1sjaW5jbHVkZSA8c3RyaW5nLmg+CistICAgICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4KKy0gICAgICAgICBdXSwKKy0gICAgICAgICBbW2ludCByZXN1bHQgPSAwOworLSAgICAgICAgICAgY2hhciAqc3RyOworLSAgICAgICAgICAgZXJybm8gPSAwOworLSAgICAgICAgICAgc3RyID0gc3RyZXJyb3IgKDApOworLSAgICAgICAgICAgaWYgKCEqc3RyKSByZXN1bHQgfD0gMTsKKy0gICAgICAgICAgIGlmIChlcnJubykgcmVzdWx0IHw9IDI7CistICAgICAgICAgICBpZiAoc3Ryc3RyIChzdHIsICJua25vd24iKSB8fCBzdHJzdHIgKHN0ciwgIm5kZWZpbmVkIikpCistICAgICAgICAgICAgIHJlc3VsdCB8PSA0OworLSAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtdXSldLAorLSAgICAgIFtnbF9jdl9mdW5jX3N0cmVycm9yXzBfd29ya3M9eWVzXSwKKy0gICAgICBbZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzPW5vXSwKKy0gICAgICBbZG5sIEJlIHBlc3NpbWlzdGljIG9uIGNyb3NzLWNvbXBpbGVzIGZvciBub3cuCistICAgICAgIGdsX2N2X2Z1bmNfc3RyZXJyb3JfMF93b3Jrcz0iZ3Vlc3Npbmcgbm8iXSkKKy0gIF0pCistICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19zdHJlcnJvcl8wX3dvcmtzIiAhPSB5ZXM7IHRoZW4KKy0gICAgUkVQTEFDRV9TVFJFUlJPUl8wPTEKKy0gICAgQUNfREVGSU5FKFtSRVBMQUNFX1NUUkVSUk9SXzBdLCBbMV0sIFtEZWZpbmUgdG8gMSBpZiBzdHJlcnJvcigwKQorLSAgICAgIGRvZXMgbm90IHJldHVybiBhIG1lc3NhZ2UgaW1wbHlpbmcgc3VjY2Vzcy5dKQorKyMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvc3RyZXJyb3IuYy4KKytBQ19ERUZVTihbZ2xfUFJFUkVRX1NUUkVSUk9SXSwgWworKyAgQUNfQ0hFQ0tfREVDTFMoW3N0cmVycm9yXSkKKysgIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3NvY2tldC5oXSkKKysgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggIT0geWVzOyB0aGVuCisrICAgIGRubCBXZSBjYW5ub3QgdXNlIEFDX0NIRUNLX0hFQURFUlNfT05DRSBoZXJlLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZQorKyAgICBkbmwgdGhlIGNoZWNrIGZvciB0aG9zZSBoZWFkZXJzIHVuY29uZGl0aW9uYWw7IHlldCBjeWd3aW4gcmVwb3J0cworKyAgICBkbmwgdGhhdCB0aGUgaGVhZGVycyBhcmUgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIChzaW5jZSBvbgorKyAgICBkbmwgY3lnd2luLCBhbGwgc29ja2V0IGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gc3lzL3NvY2tldC5oKS4KKysgICAgQUNfQ0hFQ0tfSEVBREVSUyhbd2luc29jazIuaF0pCisgICBmaQorIF0pCitkaWZmIC1OYXVycCBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvc3RyaW5nX2gubTQgbGliaWNvbnYtMS4xNC9zcmNtNC9zdHJpbmdfaC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zdHJpbmdfaC5tNAkyMDExLTA4LTA3IDA2OjQyOjA3LjAwMDAwMDAwMCAtMDcwMAorKysrIGxpYmljb252LTEuMTQvc3JjbTQvc3RyaW5nX2gubTQJMjAxMi0wMS0wOCAwMjowNzo0MC44OTQ0ODQ0ODUgLTA4MDAKK0BAIC01LDcgKzUsNyBAQAorICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKyAKKy0jIHNlcmlhbCAyMQorKyMgc2VyaWFsIDIwCisgCisgIyBXcml0dGVuIGJ5IFBhdWwgRWdnZXJ0LgorIAorQEAgLTI3LDkgKzI3LDkgQEAgQUNfREVGVU4oW2dsX0hFQURFUl9TVFJJTkdfSF9CT0RZXSwKKyAgIGRubCBndWFyYW50ZWVkIGJ5IEM4OS4KKyAgIGdsX1dBUk5fT05fVVNFX1BSRVBBUkUoW1sjaW5jbHVkZSA8c3RyaW5nLmg+CisgICAgIF1dLAorLSAgICBbZmZzbCBmZnNsbCBtZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBzdHBjcHkgc3RwbmNweSBzdHJjaHJudWwKKy0gICAgIHN0cmR1cCBzdHJuY2F0IHN0cm5kdXAgc3RybmxlbiBzdHJwYnJrIHN0cnNlcCBzdHJjYXNlc3RyIHN0cnRva19yCistICAgICBzdHJlcnJvcl9yIHN0cnNpZ25hbCBzdHJ2ZXJzY21wXSkKKysgICAgW21lbW1lbSBtZW1wY3B5IG1lbXJjaHIgcmF3bWVtY2hyIHN0cGNweSBzdHBuY3B5IHN0cmNocm51bCBzdHJkdXAKKysgICAgIHN0cm5jYXQgc3RybmR1cCBzdHJubGVuIHN0cnBicmsgc3Ryc2VwIHN0cmNhc2VzdHIgc3RydG9rX3Igc3RyZXJyb3JfcgorKyAgICAgc3Ryc2lnbmFsIHN0cnZlcnNjbXBdKQorIF0pCisgCisgQUNfREVGVU4oW2dsX1NUUklOR19NT0RVTEVfSU5ESUNBVE9SXSwKK0BAIC00Myw4ICs0Myw2IEBAIEFDX0RFRlVOKFtnbF9TVFJJTkdfTU9EVUxFX0lORElDQVRPUl0sCisgCisgQUNfREVGVU4oW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10sCisgWworLSAgR05VTElCX0ZGU0w9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfRkZTTF0pCistICBHTlVMSUJfRkZTTEw9MDsgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9GRlNMTF0pCisgICBHTlVMSUJfTUVNQ0hSPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9NRU1DSFJdKQorICAgR05VTElCX01FTU1FTT0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTUVNTUVNXSkKKyAgIEdOVUxJQl9NRU1QQ1BZPTA7ICAgICBBQ19TVUJTVChbR05VTElCX01FTVBDUFldKQorQEAgLTgyLDggKzgwLDYgQEAgQUNfREVGVU4oW2dsX0hFQURFUl9TVFJJTkdfSF9ERUZBVUxUU10sCisgICBHTlVMSUJfU1RSVkVSU0NNUD0wOyAgQUNfU1VCU1QoW0dOVUxJQl9TVFJWRVJTQ01QXSkKKyAgIEhBVkVfTUJTTEVOPTA7ICAgICAgICBBQ19TVUJTVChbSEFWRV9NQlNMRU5dKQorICAgZG5sIEFzc3VtZSBwcm9wZXIgR05VIGJlaGF2aW9yIHVubGVzcyBhbm90aGVyIG1vZHVsZSBzYXlzIG90aGVyd2lzZS4KKy0gIEhBVkVfRkZTTD0xOyAgICAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0ZGU0xdKQorLSAgSEFWRV9GRlNMTD0xOyAgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfRkZTTExdKQorICAgSEFWRV9NRU1DSFI9MTsgICAgICAgICAgICAgICAgQUNfU1VCU1QoW0hBVkVfTUVNQ0hSXSkKKyAgIEhBVkVfREVDTF9NRU1NRU09MTsgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX0RFQ0xfTUVNTUVNXSkKKyAgIEhBVkVfTUVNUENQWT0xOyAgICAgICAgICAgICAgIEFDX1NVQlNUKFtIQVZFX01FTVBDUFldKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3N5c19zb2NrZXRfaC5tNCBsaWJpY29udi0xLjE0L3NyY200L3N5c19zb2NrZXRfaC5tNAorLS0tIGxpYmljb252LTEuMTQub3JnLy9zcmNtNC9zeXNfc29ja2V0X2gubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3N5c19zb2NrZXRfaC5tNAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorQEAgLTEsMTc3ICswLDAgQEAKKy0jIHN5c19zb2NrZXRfaC5tNCBzZXJpYWwgMjIKKy1kbmwgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCistZG5sIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCistZG5sIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCistZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKy0KKy1kbmwgRnJvbSBTaW1vbiBKb3NlZnNzb24uCistCistQUNfREVGVU4oW2dsX0hFQURFUl9TWVNfU09DS0VUXSwKKy1bCistICBBQ19SRVFVSVJFKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdKQorLSAgQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorLSAgQUNfUkVRVUlSRShbQUNfQ19JTkxJTkVdKQorLQorLSAgZG5sIE9uIE9TRi8xLCB0aGUgZnVuY3Rpb25zIHJlY3YoKSwgc2VuZCgpLCByZWN2ZnJvbSgpLCBzZW5kdG8oKSBoYXZlCistICBkbmwgb2xkLXN0eWxlIGRlY2xhcmF0aW9ucyAod2l0aCByZXR1cm4gdHlwZSAnaW50JyBpbnN0ZWFkIG9mICdzc2l6ZV90JykKKy0gIGRubCB1bmxlc3MgX1BPU0lYX1BJSV9TT0NLRVQgaXMgZGVmaW5lZC4KKy0gIGNhc2UgIiRob3N0X29zIiBpbgorLSAgICBvc2YqKQorLSAgICAgIEFDX0RFRklORShbX1BPU0lYX1BJSV9TT0NLRVRdLCBbMV0sCistICAgICAgICBbRGVmaW5lIHRvIDEgaW4gb3JkZXIgdG8gZ2V0IHRoZSBQT1NJWCBjb21wYXRpYmxlIGRlY2xhcmF0aW9ucworLSAgICAgICAgIG9mIHNvY2tldCBmdW5jdGlvbnMuXSkKKy0gICAgICA7OworLSAgZXNhYworLQorLSAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgPHN5cy9zb2NrZXQuaD4gaXMgc2VsZi1jb250YWluZWRdLAorLSAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkXSwKKy0gICAgWworLSAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl1dLCBbW11dKV0sCistICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkPXllc10sCistICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkPW5vXSkKKy0gICAgXSkKKy0gIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2VsZmNvbnRhaW5lZCA9IHllczsgdGhlbgorLSAgICBkbmwgSWYgdGhlIHNodXRkb3duIGZ1bmN0aW9uIGV4aXN0cywgPHN5cy9zb2NrZXQuaD4gc2hvdWxkIGRlZmluZQorLSAgICBkbmwgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9SRFdSLgorLSAgICBBQ19DSEVDS19GVU5DUyhbc2h1dGRvd25dKQorLSAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NodXRkb3duID0geWVzOyB0aGVuCistICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgPHN5cy9zb2NrZXQuaD4gZGVmaW5lcyB0aGUgU0hVVF8qIG1hY3Jvc10sCistICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0XSwKKy0gICAgICAgIFsKKy0gICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCistICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XV0sCistICAgICAgICAgICAgICAgW1tpbnQgYVtdID0geyBTSFVUX1JELCBTSFVUX1dSLCBTSFVUX1JEV1IgfTtdXSldLAorLSAgICAgICAgICAgIFtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQ9eWVzXSwKKy0gICAgICAgICAgICBbZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PW5vXSkKKy0gICAgICAgIF0pCistICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0ID0gbm87IHRoZW4KKy0gICAgICAgIFNZU19TT0NLRVRfSD0nc3lzL3NvY2tldC5oJworLSAgICAgIGZpCistICAgIGZpCistICBmaQorLSAgIyBXZSBuZWVkIHRvIGNoZWNrIGZvciB3czJ0Y3BpcC5oIG5vdy4KKy0gIGdsX1BSRVJFUV9TWVNfSF9TT0NLRVQKKy0gIEFDX0NIRUNLX1RZUEVTKFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwgc2FfZmFtaWx5X3RdLCwsWworLSAgLyogc3lzL3R5cGVzLmggaXMgbm90IG5lZWRlZCBhY2NvcmRpbmcgdG8gUE9TSVgsIGJ1dCB0aGUKKy0gICAgIHN5cy9zb2NrZXQuaCBpbiBpMzg2LXVua25vd24tZnJlZWJzZDQuMTAgYW5kCistICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUuNSByZXF1aXJlZCBpdC4gKi8KKy0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CistI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jZW5kaWYKKy0jaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICistI2luY2x1ZGUgPHdzMnRjcGlwLmg+CistI2VuZGlmCistXSkKKy0gIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgPSBubzsgdGhlbgorLSAgICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTAKKy0gIGZpCistICBpZiB0ZXN0ICRhY19jdl90eXBlX3NhX2ZhbWlseV90ID0gbm87IHRoZW4KKy0gICAgSEFWRV9TQV9GQU1JTFlfVD0wCistICBmaQorLSAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSAhPSBubzsgdGhlbgorLSAgICBBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHldLAorLSAgICAgIFtdLAorLSAgICAgIFtIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWT0wXSwKKy0gICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLSAgICAgICAjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKy0gICAgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0gICAgICAgI2VuZGlmCistICAgICAgICNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKy0gICAgICAgI2luY2x1ZGUgPHdzMnRjcGlwLmg+CistICAgICAgICNlbmRpZgorLSAgICAgIF0pCistICBmaQorLSAgaWYgdGVzdCAkSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSA9IDAgfHwgdGVzdCAkSEFWRV9TQV9GQU1JTFlfVCA9IDAgXAorLSAgICAgfHwgdGVzdCAkSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkgPSAwOyB0aGVuCistICAgIFNZU19TT0NLRVRfSD0nc3lzL3NvY2tldC5oJworLSAgZmkKKy0gIGdsX1BSRVJFUV9TWVNfSF9XSU5TT0NLMgorLQorLSAgZG5sIENoZWNrIGZvciBkZWNsYXJhdGlvbnMgb2YgYW55dGhpbmcgd2Ugd2FudCB0byBwb2lzb24gaWYgdGhlCistICBkbmwgY29ycmVzcG9uZGluZyBnbnVsaWIgbW9kdWxlIGlzIG5vdCBpbiB1c2UuCistICBnbF9XQVJOX09OX1VTRV9QUkVQQVJFKFtbCistLyogU29tZSBzeXN0ZW1zIHJlcXVpcmUgcHJlcmVxdWlzaXRlIGhlYWRlcnMuICAqLworLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKy0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorLSAgICBdXSwgW3NvY2tldCBjb25uZWN0IGFjY2VwdCBiaW5kIGdldHBlZXJuYW1lIGdldHNvY2tuYW1lIGdldHNvY2tvcHQKKy0gICAgbGlzdGVuIHJlY3Ygc2VuZCByZWN2ZnJvbSBzZW5kdG8gc2V0c29ja29wdCBzaHV0ZG93biBhY2NlcHQ0XSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1lTX0hfU09DS0VUXSwKKy1bCistICBkbmwgQ2hlY2sgcHJlcmVxdWlzaXRlcyBvZiB0aGUgPHN5cy9zb2NrZXQuaD4gcmVwbGFjZW1lbnQuCistICBBQ19SRVFVSVJFKFtnbF9DSEVDS19TT0NLRVRfSEVBREVSU10pCistICBnbF9DSEVDS19ORVhUX0hFQURFUlMoW3N5cy9zb2NrZXQuaF0pCistICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oID0geWVzOyB0aGVuCistICAgIEhBVkVfU1lTX1NPQ0tFVF9IPTEKKy0gICAgSEFWRV9XUzJUQ1BJUF9IPTAKKy0gIGVsc2UKKy0gICAgSEFWRV9TWVNfU09DS0VUX0g9MAorLSAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCA9IHllczsgdGhlbgorLSAgICAgIEhBVkVfV1MyVENQSVBfSD0xCistICAgIGVsc2UKKy0gICAgICBIQVZFX1dTMlRDUElQX0g9MAorLSAgICBmaQorLSAgZmkKKy0gIEFDX1NVQlNUKFtIQVZFX1NZU19TT0NLRVRfSF0pCistICBBQ19TVUJTVChbSEFWRV9XUzJUQ1BJUF9IXSkKKy1dKQorLQorLSMgQ29tbW9uIHByZXJlcXVpc2l0ZXMgb2YgdGhlIDxzeXMvc29ja2V0Lmg+IHJlcGxhY2VtZW50IGFuZCBvZiB0aGUKKy0jIDxzeXMvc2VsZWN0Lmg+IHJlcGxhY2VtZW50LgorLSMgU2V0cyBhbmQgc3Vic3RpdHV0ZXMgSEFWRV9XSU5TT0NLMl9ILgorLUFDX0RFRlVOKFtnbF9QUkVSRVFfU1lTX0hfV0lOU09DSzJdLAorLVsKKy0gIG00X2lmZGVmKFtnbF9VTklTVERfSF9ERUZBVUxUU10sIFtBQ19SRVFVSVJFKFtnbF9VTklTVERfSF9ERUZBVUxUU10pXSkKKy0gIG00X2lmZGVmKFtnbF9TWVNfSU9DVExfSF9ERUZBVUxUU10sIFtBQ19SRVFVSVJFKFtnbF9TWVNfSU9DVExfSF9ERUZBVUxUU10pXSkKKy0gIEFDX0NIRUNLX0hFQURFUlNfT05DRShbc3lzL3NvY2tldC5oXSkKKy0gIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggIT0geWVzOyB0aGVuCistICAgIGRubCBXZSBjYW5ub3QgdXNlIEFDX0NIRUNLX0hFQURFUlNfT05DRSBoZXJlLCBiZWNhdXNlIHRoYXQgd291bGQgbWFrZQorLSAgICBkbmwgdGhlIGNoZWNrIGZvciB0aG9zZSBoZWFkZXJzIHVuY29uZGl0aW9uYWw7IHlldCBjeWd3aW4gcmVwb3J0cworLSAgICBkbmwgdGhhdCB0aGUgaGVhZGVycyBhcmUgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIChzaW5jZSBvbgorLSAgICBkbmwgY3lnd2luLCBhbGwgc29ja2V0IGluZm9ybWF0aW9uIHNob3VsZCBjb21lIGZyb20gc3lzL3NvY2tldC5oKS4KKy0gICAgQUNfQ0hFQ0tfSEVBREVSUyhbd2luc29jazIuaF0pCistICBmaQorLSAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbgorLSAgICBIQVZFX1dJTlNPQ0syX0g9MQorLSAgICBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0g9MQorLSAgICBTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0g9MQorLSAgZWxzZQorLSAgICBIQVZFX1dJTlNPQ0syX0g9MAorLSAgZmkKKy0gIEFDX1NVQlNUKFtIQVZFX1dJTlNPQ0syX0hdKQorLV0pCistCistQUNfREVGVU4oW2dsX1NZU19TT0NLRVRfTU9EVUxFX0lORElDQVRPUl0sCistWworLSAgZG5sIFVzZSBBQ19SRVFVSVJFIGhlcmUsIHNvIHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGV4cGFuZGVkIG9uY2Ugb25seS4KKy0gIEFDX1JFUVVJUkUoW2dsX1NZU19TT0NLRVRfSF9ERUZBVUxUU10pCistICBnbF9NT0RVTEVfSU5ESUNBVE9SX1NFVF9WQVJJQUJMRShbJDFdKQorLSAgZG5sIERlZmluZSBpdCBhbHNvIGFzIGEgQyBtYWNybywgZm9yIHRoZSBiZW5lZml0IG9mIHRoZSB1bml0IHRlc3RzLgorLSAgZ2xfTU9EVUxFX0lORElDQVRPUl9GT1JfVEVTVFMoWyQxXSkKKy1dKQorLQorLUFDX0RFRlVOKFtnbF9TWVNfU09DS0VUX0hfREVGQVVMVFNdLAorLVsKKy0gIEdOVUxJQl9TT0NLRVQ9MDsgICAgICBBQ19TVUJTVChbR05VTElCX1NPQ0tFVF0pCistICBHTlVMSUJfQ09OTkVDVD0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9DT05ORUNUXSkKKy0gIEdOVUxJQl9BQ0NFUFQ9MDsgICAgICBBQ19TVUJTVChbR05VTElCX0FDQ0VQVF0pCistICBHTlVMSUJfQklORD0wOyAgICAgICAgQUNfU1VCU1QoW0dOVUxJQl9CSU5EXSkKKy0gIEdOVUxJQl9HRVRQRUVSTkFNRT0wOyBBQ19TVUJTVChbR05VTElCX0dFVFBFRVJOQU1FXSkKKy0gIEdOVUxJQl9HRVRTT0NLTkFNRT0wOyBBQ19TVUJTVChbR05VTElCX0dFVFNPQ0tOQU1FXSkKKy0gIEdOVUxJQl9HRVRTT0NLT1BUPTA7ICBBQ19TVUJTVChbR05VTElCX0dFVFNPQ0tPUFRdKQorLSAgR05VTElCX0xJU1RFTj0wOyAgICAgIEFDX1NVQlNUKFtHTlVMSUJfTElTVEVOXSkKKy0gIEdOVUxJQl9SRUNWPTA7ICAgICAgICBBQ19TVUJTVChbR05VTElCX1JFQ1ZdKQorLSAgR05VTElCX1NFTkQ9MDsgICAgICAgIEFDX1NVQlNUKFtHTlVMSUJfU0VORF0pCistICBHTlVMSUJfUkVDVkZST009MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9SRUNWRlJPTV0pCistICBHTlVMSUJfU0VORFRPPTA7ICAgICAgQUNfU1VCU1QoW0dOVUxJQl9TRU5EVE9dKQorLSAgR05VTElCX1NFVFNPQ0tPUFQ9MDsgIEFDX1NVQlNUKFtHTlVMSUJfU0VUU09DS09QVF0pCistICBHTlVMSUJfU0hVVERPV049MDsgICAgQUNfU1VCU1QoW0dOVUxJQl9TSFVURE9XTl0pCistICBHTlVMSUJfQUNDRVBUND0wOyAgICAgQUNfU1VCU1QoW0dOVUxJQl9BQ0NFUFQ0XSkKKy0gIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0U9MTsgQUNfU1VCU1QoW0hBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VdKQorLSAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9MTsKKy0gICAgICAgICAgICAgICAgICAgICAgICBBQ19TVUJTVChbSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFldKQorLSAgSEFWRV9TQV9GQU1JTFlfVD0xOyAgIEFDX1NVQlNUKFtIQVZFX1NBX0ZBTUlMWV9UXSkKKy0gIEhBVkVfQUNDRVBUND0xOyAgICAgICBBQ19TVUJTVChbSEFWRV9BQ0NFUFQ0XSkKKy1dKQorZGlmZiAtTmF1cnAgbGliaWNvbnYtMS4xNC5vcmcvL3NyY200L3dhcm4tb24tdXNlLm00IGxpYmljb252LTEuMTQvc3JjbTQvd2Fybi1vbi11c2UubTQKKy0tLSBsaWJpY29udi0xLjE0Lm9yZy8vc3JjbTQvd2Fybi1vbi11c2UubTQJMjAxMS0wOC0wNyAwNjo0MjowNy4wMDAwMDAwMDAgLTA3MDAKKysrKyBsaWJpY29udi0xLjE0L3NyY200L3dhcm4tb24tdXNlLm00CTIwMTItMDEtMDggMDI6MDc6NDAuOTM0NDg0NDg3IC0wODAwCitAQCAtMSw0ICsxLDQgQEAKKy0jIHdhcm4tb24tdXNlLm00IHNlcmlhbCA0CisrIyB3YXJuLW9uLXVzZS5tNCBzZXJpYWwgMgorIGRubCBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyBkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyBkbmwgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKK0BAIC0yNyw4ICsyNyw2IEBAIEFDX0RFRlVOKFtnbF9XQVJOX09OX1VTRV9QUkVQQVJFXSwKKyAgICAgW0FIX1RFTVBMQVRFKFtIQVZFX1JBV19ERUNMX11BU19UUl9DUFAobTRfZGVmbihbZ2xfZGVjbF0pKSwKKyAgICAgICBbRGVmaW5lIHRvIDEgaWYgXW00X2RlZm4oW2dsX2RlY2xdKVsgaXMgZGVjbGFyZWQgZXZlbiBhZnRlcgorICAgICAgICB1bmRlZmluaW5nIG1hY3Jvcy5dKV0pZG5sCistZG5sIEZJWE1FOiBnbF9TeW1ib2wgbXVzdCBiZSB1c2VkIHVucXVvdGVkIHVudGlsIHdlIGNhbiBhc3N1bWUKKy1kbmwgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyAgIGZvciBnbF9mdW5jIGluIG00X2ZsYXR0ZW4oWyQyXSk7IGRvCisgICAgIEFTX1ZBUl9QVVNIREVGKFtnbF9TeW1ib2xdLCBbZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuY10pZG5sCisgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyb10sCitAQCAtMzcsOCArMzUsOCBAQCBkbmwgYXV0b2NvbmYgMi42NCBvciBuZXdlci4KKyBbQCU6QHVuZGVmICRnbF9mdW5jCisgICAodm9pZCkgJGdsX2Z1bmM7XSldLAorICAgICAgICAgW0FTX1ZBUl9TRVQoZ2xfU3ltYm9sLCBbeWVzXSldLCBbQVNfVkFSX1NFVChnbF9TeW1ib2wsIFtub10pXSldKQorLSAgICBBU19WQVJfSUYoZ2xfU3ltYm9sLCBbeWVzXSwKKy0gICAgICBbQUNfREVGSU5FX1VOUVVPVEVEKEFTX1RSX0NQUChbSEFWRV9SQVdfREVDTF8kZ2xfZnVuY10pLCBbMV0pCisrICAgICBBU19WQVJfSUYoZ2xfU3ltYm9sLCBbeWVzXSwKKysgICAgICAgW0FDX0RFRklORV9VTlFVT1RFRChBU19UUl9DUFAoW0hBVkVfUkFXX0RFQ0xfJGdsX2Z1bmNdKSwgWzFdKQorICAgICAgICBkbmwgc2hvcnRjdXQgLSBpZiB0aGUgcmF3IGRlY2xhcmF0aW9uIGV4aXN0cywgdGhlbiBzZXQgYSBjYWNoZQorICAgICAgICBkbmwgdmFyaWFibGUgdG8gYWxsb3cgc2tpcHBpbmcgYW55IGxhdGVyIEFDX0NIRUNLX0RFQ0wgZWZmb3J0cworICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXNdKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnYtMS4xNC9hdXRvY29uZi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzNGNlNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYmljb252L2xpYmljb252LTEuMTQvYXV0b2NvbmYucGF0Y2gKQEAgLTAsMCArMSw1MCBAQAorSXQgYWRkcyB0aGUgdmFyaWFibGVzIHRoYXQgYXJlIG5lZWRlZAorZm9yIGF1dG9jb25mIDIuNjUgdG8gcmVjb25maWd1cmUgbGliaWNvbnYgYW5kIGRlbGV0ZSB0aGUgbTQgbWFjcm9zCitkaXJlY3RvcnkuIEl0cyBpbXBvcnRlZCBmcm9tIE9FLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYmljb252LTEuMTMuMS9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJpY29udi0xLjEzLjEub3JpZy9jb25maWd1cmUuYWMKKysrKyBsaWJpY29udi0xLjEzLjEvY29uZmlndXJlLmFjCitAQCAtMjMsNyArMjMsNyBAQCBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKyBBTV9JTklUX0FVVE9NQUtFKFtsaWJpY29udl0sIFsxLjEzLjFdKQorIEFDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaCBsaWIvY29uZmlnLmhdKQorIEFDX1BST0dfTUFLRV9TRVQKKy0KKytBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisgZG5sICAgICAgICAgICBjaGVja3MgZm9yIGJhc2ljIHByb2dyYW1zCisgCisgQUNfUFJPR19DQworSW5kZXg6IGxpYmljb252LTEuMTMuMS9saWJjaGFyc2V0L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmljb252LTEuMTMuMS5vcmlnL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCisrKysgbGliaWNvbnYtMS4xMy4xL2xpYmNoYXJzZXQvY29uZmlndXJlLmFjCitAQCAtMTYsMTcgKzE2LDE3IEBAIGRubCBhbG9uZyB3aXRoIHRoZSBHTlUgQ0hBUlNFVCBMaWJyYXJ5OworIGRubCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsCisgZG5sIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAKKy1BQ19QUkVSRVEoWzIuMTNdKQorK0FDX1BSRVJFUSgyLjYxKQorK0FDX0lOSVQoW2xpYmNoYXJzZXRdLFsxLjRdICkKKytBQ19DT05GSUdfU1JDRElSKFtsaWIvbG9jYWxjaGFyc2V0LmNdKQorIAorLVBBQ0tBR0U9bGliY2hhcnNldAorLVZFUlNJT049MS40CistCistQUNfSU5JVChbbGliL2xvY2FsY2hhcnNldC5jXSkKKyBBQ19DT05GSUdfQVVYX0RJUihbYnVpbGQtYXV4XSkKKyBBQ19DT05GSUdfSEVBREVSKFtjb25maWcuaF0pCisgQUNfUFJPR19NQUtFX1NFVAorLUFDX1NVQlNUKFtQQUNLQUdFXSkKKy1BQ19TVUJTVChbVkVSU0lPTl0pCisrZG5sIEFDX1NVQlNUKFBBQ0tBR0UpCisrZG5sIEFDX1NVQlNUKFZFUlNJT04pCisrCisrQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorIAorIGRubCAgICAgICAgICAgY2hlY2tzIGZvciBiYXNpYyBwcm9ncmFtcworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTRiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjExLjEuYmIKQEAgLTAsMCArMSw0NyBAQAorU1VNTUFSWSA9ICJDaGFyYWN0ZXIgZW5jb2Rpbmcgc3VwcG9ydCBsaWJyYXJ5IgorREVTQ1JJUFRJT04gPSAiR05VIGxpYmljb252IC0gbGliaWNvbnYgaXMgZm9yIHlvdSBpZiB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHN1cHBvcnQgXAorbXVsdGlwbGUgY2hhcmFjdGVyIGVuY29kaW5ncywgYnV0IHRoYXQgc3VwcG9ydCBsYWNrcyBmcm9tIHlvdXIgc3lzdGVtLiIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpY29udiIKK1NFQ1RJT04gPSAibGlicyIKK05PVEVTID0gIk5lZWRzIHRvIGJlIHN0cmlwcGVkIGRvd24gdG86IGFzY2lpIGlzbzg4NTktMSBldWNqcCBpc28tMjAyMmpwIGdiIHV0ZjgiCitQUk9WSURFUyA9ICJ2aXJ0dWFsL2xpYmljb252IgorCitMSUNFTlNFID0gIkxHUEx2Mi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmNoYXJzZXQvQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b2NvbmYucGF0Y2ggXAorCSAgIGZpbGU6Ly9zaGFyZWRfcHJlbG9hZGFibGVfbGliaWNvbnZfbGludXgucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0MmI5N2Y2ZWY1ZGQwYmE0NDY5ZDUyMGVkNzMyZmVkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3OGMzNDdhMWEwY2IxNWYyNjQ4NTE5ZTk3OTkxNTFmNGI0YTkzNGI2MWFkOWVlNzQyNDQ3OGVmZTJiODI1N2YiCisKK1MgPSAiJHtXT1JLRElSfS9saWJpY29udi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnIGdldHRleHQKKworcHl0aG9uIF9fYW5vbnltb3VzKCkgeworICAgIGlmIGQuZ2V0VmFyKCJUQ0xJQkMiLCBUcnVlKSA9PSAiZ2xpYmMiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgibGliaWNvbnYgaXMgcHJvdmlkZWQgZm9yIHVzZSB3aXRoIHVDbGliYyBvbmx5IC0gZ2xpYmMgYWxyZWFkeSBwcm92aWRlcyBpY29udiIpCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxvY2F0YWJsZSIKKworTEVBRF9TT05BTUUgPSAibGliaWNvbnYuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2xpYnRvb2wubTQgJHtTfS9tNC9sdG9wdGlvbnMubTQgJHtTfS9tNC9sdHN1Z2FyLm00ICR7U30vbTQvbHR2ZXJzaW9uLm00ICR7U30vbTQvbHR+b2Jzb2xldGUubTQgJHtTfS9saWJjaGFyc2V0L200L2xpYnRvb2wubTQgJHtTfS9saWJjaGFyc2V0L200L2x0b3B0aW9ucy5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRzdWdhci5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR2ZXJzaW9uLm00ICR7U30vbGliY2hhcnNldC9tNC9sdH5vYnNvbGV0ZS5tNAorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKyAgICAgICAgIyBmb3JjaWJseSByZW1vdmUgUlBBVEggZnJvbSBsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xeaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0uKnxoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIifGcnICpsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xecnVucGF0aF92YXI9TERfUlVOX1BBVEh8cnVucGF0aF92YXI9X05PX1JQQVRIX3xnJyAqbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaWNvbnYuc28KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJpY29udi9saWJpY29udl8xLjE0LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjZmZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGliaWNvbnYvbGliaWNvbnZfMS4xNC5iYgpAQCAtMCwwICsxLDUxIEBACitTVU1NQVJZID0gIkNoYXJhY3RlciBlbmNvZGluZyBzdXBwb3J0IGxpYnJhcnkiCitERVNDUklQVElPTiA9ICJHTlUgbGliaWNvbnYgLSBsaWJpY29udiBpcyBmb3IgeW91IGlmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgdG8gc3VwcG9ydCBcCittdWx0aXBsZSBjaGFyYWN0ZXIgZW5jb2RpbmdzLCBidXQgdGhhdCBzdXBwb3J0IGxhY2tzIGZyb20geW91ciBzeXN0ZW0uIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmljb252IgorU0VDVElPTiA9ICJsaWJzIgorTk9URVMgPSAiTmVlZHMgdG8gYmUgc3RyaXBwZWQgZG93biB0bzogYXNjaWkgaXNvODg1OS0xIGV1Y2pwIGlzby0yMDIyanAgZ2IgdXRmOCIKK1BST1ZJREVTID0gInZpcnR1YWwvbGliaWNvbnYiCitQUiA9ICJyMSIKK0xJQ0VOU0UgPSAiTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYmNoYXJzZXQvQ09QWUlORy5MSUI7bWQ1PTlmNjA0ZDhhNGY4ZTc0ZjRmNTE0MDg0NWEyMWI2Njc0IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vYXV0b2NvbmYucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWRkLXJlbG9jYXRhYmxlLW1vZHVsZS5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZTM0NTA5YjE2MjNjZWM0NDlkZmViNzNkN2NlOWM2YzYiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzJiMjRkZWQxN2Q2ODcxOTNjMzM2NmQwZWJlN2NkZTFlNmIxOGYwZGY4YzU1NDM4YWM5NWJlMzllOGEzMDYxMyIKKworUyA9ICIke1dPUktESVJ9L2xpYmljb252LSR7UFZ9IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgZ2V0dGV4dAorCitweXRob24gX19hbm9ueW1vdXMoKSB7CisgICAgaWYgZC5nZXRWYXIoIlRBUkdFVF9PUyIsIFRydWUpICE9ICJsaW51eCI6CisgICAgICAgIHJldHVybgorICAgIGlmIGQuZ2V0VmFyKCJUQ0xJQkMiLCBUcnVlKSA9PSAiZ2xpYmMiOgorICAgICAgICByYWlzZSBiYi5wYXJzZS5Ta2lwUGFja2FnZSgibGliaWNvbnYgaXMgcHJvdmlkZWQgZm9yIHVzZSB3aXRoIHVDbGliYyBvbmx5IC0gZ2xpYmMgYWxyZWFkeSBwcm92aWRlcyBpY29udiIpCit9CisKK0VYVFJBX09FQ09ORiArPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXN0YXRpYyAtLWVuYWJsZS1yZWxvY2F0YWJsZSIKKworTEVBRF9TT05BTUUgPSAibGliaWNvbnYuc28iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwlybSAtZiAke1N9L200L2xpYnRvb2wubTQgJHtTfS9tNC9sdG9wdGlvbnMubTQgJHtTfS9tNC9sdHN1Z2FyLm00ICR7U30vbTQvbHR2ZXJzaW9uLm00ICR7U30vbTQvbHR+b2Jzb2xldGUubTQgJHtTfS9saWJjaGFyc2V0L200L2xpYnRvb2wubTQgJHtTfS9saWJjaGFyc2V0L200L2x0b3B0aW9ucy5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHRzdWdhci5tNCAke1N9L2xpYmNoYXJzZXQvbTQvbHR2ZXJzaW9uLm00ICR7U30vbGliY2hhcnNldC9tNC9sdH5vYnNvbGV0ZS5tNAorfQorCitkb19jb25maWd1cmVfYXBwZW5kICgpIHsKKyAgICAgICAgIyBmb3JjaWJseSByZW1vdmUgUlBBVEggZnJvbSBsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xeaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0uKnxoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIifGcnICpsaWJ0b29sCisgICAgICAgIHNlZCAtaSAnc3xecnVucGF0aF92YXI9TERfUlVOX1BBVEh8cnVucGF0aF92YXI9X05PX1JQQVRIX3xnJyAqbGlidG9vbAorfQorCitkb19pbnN0YWxsX2FwcGVuZCAoKSB7CisJcm0gLXJmICR7RH0ke2xpYmRpcn0vcHJlbG9hZGFibGVfbGliaWNvbnYuc28KKwlybSAtcmYgJHtEfSR7bGliZGlyfS9jaGFyc2V0LmFsaWFzCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODg2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmEva3NiYS1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKQEAgLTAsMCArMSwxNTIgQEAKK1Vwc3RyZWFtLVN0YXR1czogRGVuaWVkCisKK0FkZCBwa2djb25maWcgc3VwcG9ydCB0byBsaWJrc2JhLgorVGhpcyBwYXRjaCBpcyByZWplY3RlZCBieSB1cHN0cmVhbSBmb3IgdGhlIHJlYXNvbiBiZWxvdzoKK1RoZXkgdGhpbmsgcGtnY29uZmlnIGFkZHMgbm8gcG9ydGFiaWxpdHkgYW5kIG1haW50YWluaW5nIHRoZW0gaXMgbm90IHdvcnRod2hpbGUuCisKK1NpZ25lZC1vZmYtYnk6IENoZW4gUWkgPFFpLkNoZW5Ad2luZHJpdmVyLmNvbT4KKworSW5kZXg6IGxpYmtzYmEtMS4zLjAvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvTWFrZWZpbGUuYW0JMjAxNC0wNS0xMyAyMTozOToyMi4zOTAzODU2NDYgKzAwMDAKKysrKyBsaWJrc2JhLTEuMy4wL01ha2VmaWxlLmFtCTIwMTQtMDUtMTMgMjE6Mzk6MjIuNDYyMzg1NjQ2ICswMDAwCitAQCAtMjEsNiArMjEsOSBAQAorIEFDTE9DQUxfQU1GTEFHUyA9IC1JIG00IC1JIGdsL200CisgQVVUT01BS0VfT1BUSU9OUyA9IGRpc3QtYnppcDIgbm8tZGlzdC1nemlwCisgCisrcGtnY29uZmlnZGlyID0gJHtsaWJkaXJ9L3BrZ2NvbmZpZworK3BrZ2NvbmZpZ19EQVRBID0ga3NiYS5wYworKworICMgKEEgc3VpdGFibGUgZ2l0bG9nLXRvLWNoYW5nZWxvZyBzY3JpcHQgY2FuIGJlIGZvdW5kIGluIEdudVBHIG1hc3Rlci4pCisgR0lUTE9HX1RPX0NIQU5HRUxPRz1naXRsb2ctdG8tY2hhbmdlbG9nCisgCitJbmRleDogbGlia3NiYS0xLjMuMC9jb25maWd1cmUuYWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJrc2JhLTEuMy4wLm9yaWcvY29uZmlndXJlLmFjCTIwMTQtMDUtMTMgMjE6Mzk6MjIuMzkwMzg1NjQ2ICswMDAwCisrKysgbGlia3NiYS0xLjMuMC9jb25maWd1cmUuYWMJMjAxNC0wNS0xMyAyMTozOToyMi40NjIzODU2NDYgKzAwMDAKK0BAIC00MDAsNiArNDAwLDcgQEAKKyBzcmMvTWFrZWZpbGUKKyBzcmMva3NiYS1jb25maWcKKyBzcmMvdmVyc2lvbmluZm8ucmMKKytrc2JhLnBjCisgdGVzdHMvTWFrZWZpbGUKKyBkb2MvTWFrZWZpbGUKKyBdKQorSW5kZXg6IGxpYmtzYmEtMS4zLjAva3NiYS5wYy5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAva3NiYS5wYy5pbgkyMDE0LTA1LTEzIDIxOjM5OjIyLjQ2MjM4NTY0NiArMDAwMAorQEAgLTAsMCArMSwxNyBAQAorK3ByZWZpeD1AcHJlZml4QAorK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKKytsaWJkaXI9QGxpYmRpckAKKytpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorKworKyMgQVBJIGluZm8KKythcGlfdmVyc2lvbj1AS1NCQV9DT05GSUdfQVBJX1ZFUlNJT05ACisraG9zdD1AS1NCQV9DT05GSUdfSE9TVEAKKysKKytOYW1lOiBrc2JhCisrRGVzY3JpcHRpb246IExpYmtzYmEgcHJvdmlkZXMgYW4gZWFzeSBBUEkgdG8gY3JlYXRlIGFuZCBwYXJzZSBYLjUwOSBhbmQgQ01TIHJlbGF0ZWQgb2JqZWN0cworK1JlcXVpcmVzOgorK1ZlcnNpb246IEBWRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1sa3NiYQorK0xpYnMucHJpdmF0ZTogLUx7bGliZGlyfSAtbGdwZy1lcnJvcgorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CisrCitJbmRleDogbGlia3NiYS0xLjMuMC9zcmMva3NiYS5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYmtzYmEtMS4zLjAub3JpZy9zcmMva3NiYS5tNAkyMDE0LTA1LTEzIDIxOjM5OjIyLjM5MDM4NTY0NiArMDAwMAorKysrIGxpYmtzYmEtMS4zLjAvc3JjL2tzYmEubTQJMjAxNC0wNS0xMyAyMTo0OTowMy42NTAzODI2OTYgKzAwMDAKK0BAIC0yMiwxOCArMjIsNyBAQAorIGRubAorIEFDX0RFRlVOKFtBTV9QQVRIX0tTQkFdLAorIFtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pCistIEFDX0FSR19XSVRIKGtzYmEtcHJlZml4LAorLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgta3NiYS1wcmVmaXg9UEZYXSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4IHdoZXJlIEtTQkEgaXMgaW5zdGFsbGVkIChvcHRpb25hbCldKSwKKy0gICAgIGtzYmFfY29uZmlnX3ByZWZpeD0iJHdpdGh2YWwiLCBrc2JhX2NvbmZpZ19wcmVmaXg9IiIpCistICBpZiB0ZXN0IHgka3NiYV9jb25maWdfcHJlZml4ICE9IHggOyB0aGVuCistICAgICBrc2JhX2NvbmZpZ19hcmdzPSIka3NiYV9jb25maWdfYXJncyAtLXByZWZpeD0ka3NiYV9jb25maWdfcHJlZml4IgorLSAgICAgaWYgdGVzdCB4JHtLU0JBX0NPTkZJRytzZXR9ICE9IHhzZXQgOyB0aGVuCistICAgICAgICBLU0JBX0NPTkZJRz0ka3NiYV9jb25maWdfcHJlZml4L2Jpbi9rc2JhLWNvbmZpZworLSAgICAgZmkKKy0gIGZpCisgCistICBBQ19QQVRIX1BST0coS1NCQV9DT05GSUcsIGtzYmEtY29uZmlnLCBubykKKyAgIHRtcD1pZmVsc2UoWyQxXSwgLDE6MS4wLjAsJDEpCisgICBpZiBlY2hvICIkdG1wIiB8IGdyZXAgJzonID4vZGV2L251bGwgMj4vZGV2L251bGwgOyB0aGVuCisgICAgICByZXFfa3NiYV9hcGk9YGVjaG8gIiR0bXAiICAgICB8IHNlZCAncy9cKC4qXCk6XCguKlwpL1wxLydgCitAQCAtNDMsNDggKzMyLDEzIEBACisgICAgICBtaW5fa3NiYV92ZXJzaW9uPSIkdG1wIgorICAgZmkKKyAKKy0gIEFDX01TR19DSEVDS0lORyhmb3IgS1NCQSAtIHZlcnNpb24gPj0gJG1pbl9rc2JhX3ZlcnNpb24pCistICBvaz1ubworLSAgaWYgdGVzdCAiJEtTQkFfQ09ORklHIiAhPSAibm8iIDsgdGhlbgorLSAgICByZXFfbWFqb3I9YGVjaG8gJG1pbl9rc2JhX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkvXDEvJ2AKKy0gICAgcmVxX21pbm9yPWBlY2hvICRtaW5fa3NiYV92ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpL1wyLydgCistICAgIHJlcV9taWNybz1gZWNobyAkbWluX2tzYmFfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS9cMy8nYAorLSAgICBrc2JhX2NvbmZpZ192ZXJzaW9uPWAkS1NCQV9DT05GSUcgJGtzYmFfY29uZmlnX2FyZ3MgLS12ZXJzaW9uYAorLSAgICBtYWpvcj1gZWNobyAka3NiYV9jb25maWdfdmVyc2lvbiB8IFwKKy0gICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCistICAgIG1pbm9yPWBlY2hvICRrc2JhX2NvbmZpZ192ZXJzaW9uIHwgXAorLSAgICAgICAgICAgICAgIHNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKVwuXChbWzAtOV1dKlwpLiovXDIvJ2AKKy0gICAgbWljcm89YGVjaG8gJGtzYmFfY29uZmlnX3ZlcnNpb24gfCBcCistICAgICAgICAgICAgICAgc2VkICdzL1woW1swLTldXSpcKVwuXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMy8nYAorLSAgICBpZiB0ZXN0ICIkbWFqb3IiIC1ndCAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgIG9rPXllcworLSAgICBlbHNlCistICAgICAgICBpZiB0ZXN0ICIkbWFqb3IiIC1lcSAiJHJlcV9tYWpvciI7IHRoZW4KKy0gICAgICAgICAgICBpZiB0ZXN0ICIkbWlub3IiIC1ndCAiJHJlcV9taW5vciI7IHRoZW4KKy0gICAgICAgICAgICAgICBvaz15ZXMKKy0gICAgICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgaWYgdGVzdCAiJG1pbm9yIiAtZXEgIiRyZXFfbWlub3IiOyB0aGVuCistICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRtaWNybyIgLWdlICIkcmVxX21pY3JvIjsgdGhlbgorLSAgICAgICAgICAgICAgICAgICAgIG9rPXllcworLSAgICAgICAgICAgICAgICAgICBmaQorLSAgICAgICAgICAgICAgIGZpCistICAgICAgICAgICAgZmkKKy0gICAgICAgIGZpCistICAgIGZpCistICBmaQorLSAgaWYgdGVzdCAkb2sgPSB5ZXM7IHRoZW4KKy0gICAgQUNfTVNHX1JFU1VMVChbeWVzICgka3NiYV9jb25maWdfdmVyc2lvbildKQorLSAgZWxzZQorLSAgICBBQ19NU0dfUkVTVUxUKG5vKQorLSAgZmkKKysgIFBLR19DSEVDS19NT0RVTEVTKEtTQkEsIFtrc2JhID49ICRtaW5fa3NiYV92ZXJzaW9uXSwgW29rPXllc10sIFtvaz1ub10pCisrCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorICAgICAgIyBFdmVuIGlmIHdlIGhhdmUgYSByZWNlbnQgbGlia3NiYSwgd2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlCisgICAgICAjIEFQSSBpcyBjb21wYXRpYmxlLgorICAgICAgaWYgdGVzdCAiJHJlcV9rc2JhX2FwaSIgLWd0IDAgOyB0aGVuCistICAgICAgICB0bXA9YCRLU0JBX0NPTkZJRyAtLWFwaS12ZXJzaW9uIDI+L2Rldi9udWxsIHx8IGVjaG8gMGAKKysgICAgICAgIHRtcD1gJFBLR19DT05GSUcgLS12YXJpYWJsZT1hcGlfdmVyc2lvbiBrc2JhYAorICAgICAgICAgaWYgdGVzdCAiJHRtcCIgLWd0IDAgOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW0tTQkEgQVBJIHZlcnNpb25dKQorICAgICAgICAgICAgaWYgdGVzdCAiJHJlcV9rc2JhX2FwaSIgLWVxICIkdG1wIiA7IHRoZW4KK0BAIC05NywxMCArNTEsOCBAQAorICAgICAgZmkKKyAgIGZpCisgICBpZiB0ZXN0ICRvayA9IHllczsgdGhlbgorLSAgICBLU0JBX0NGTEFHUz1gJEtTQkFfQ09ORklHICRrc2JhX2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICBLU0JBX0xJQlM9YCRLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWxpYnNgCisgICAgIGlmZWxzZShbJDJdLCAsIDosIFskMl0pCistICAgIGxpYmtzYmFfY29uZmlnX2hvc3Q9YCRMSUJLU0JBX0NPTkZJRyAka3NiYV9jb25maWdfYXJncyAtLWhvc3QgMj4vZGV2L251bGwgfHwgZWNobyBub25lYAorKyAgICBsaWJrc2JhX2NvbmZpZ19ob3N0PWAkUEtHX0NPTkZJRyAtLXZhcmlhYmxlPWhvc3Qga3NiYWAKKyAgICAgaWYgdGVzdCB4IiRsaWJrc2JhX2NvbmZpZ19ob3N0IiAhPSB4bm9uZSA7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgiJGxpYmtzYmFfY29uZmlnX2hvc3QiICE9IHgiJGhvc3QiIDsgdGhlbgorICAgQUNfTVNHX1dBUk4oW1sKK0BAIC0xMTQsOCArNjYsNiBAQAorICAgICAgIGZpCisgICAgIGZpCisgICBlbHNlCistICAgIEtTQkFfQ0ZMQUdTPSIiCistICAgIEtTQkFfTElCUz0iIgorICAgICBpZmVsc2UoWyQzXSwgLCA6LCBbJDNdKQorICAgZmkKKyAgIEFDX1NVQlNUKEtTQkFfQ0ZMQUdTKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlia3NiYS9saWJrc2JhXzEuMy4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjExNjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJrc2JhL2xpYmtzYmFfMS4zLjMuYmIKQEAgLTAsMCArMSwyNSBAQAorU1VNTUFSWSA9ICJFYXN5IEFQSSB0byBjcmVhdGUgYW5kIHBhcnNlIFguNTA5IGFuZCBDTVMgcmVsYXRlZCBvYmplY3RzIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9saWJrc2JhLyIKK0xJQ0VOU0UgPSAiR1BMdjIrIHwgTEdQTHYzKyB8IEdQTHYzKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZkNTQxZDgzZjc1ZDAzOGM0ZTA2MTdiNjcyZWQ4YmRhIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjI7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuR1BMdjM7bWQ1PTJmMzFiMjY2ZDM0NDBkZDdlZTUwZjkyY2Y2N2Q4ZTZjIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL0NPUFlJTkcuTEdQTHYzO21kNT1lNmE2MDBmZDVlMWQ5Y2JkZTJkOTgzNjgwMjMzYWQwMiBcCisgICAgICAgICAgICAgICAgICAgIgorCitERVBFTkRTID0gImxpYmdwZy1lcnJvciIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9rc2JhLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIHBrZ2NvbmZpZyB0ZXhpbmZvCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLmdudXBnLm9yZy9nY3J5cHQvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL2tzYmEtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYTVkZDNjNTdmY2EyNTQ5MzVmNWNmOGRiMjZlMzkwNjUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMGM3ZjVmZmUzNGQwNDE0ZjY5NTFkOTg4MGE0NmZjYzI5ODVjNDg3ZjdjMzYzNjliOWYxMWFkNDExMzFjNzc4NiIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCSMgRWxzZSB0aGVzZSBjb3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UgdG8gdGhvc2UgaW4gYWNsb2NhbC1jb3B5CisJcm0gLWYgJHtTfS9tNC9ncGctZXJyb3IubTQKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wYy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3NDI1NAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm1wYy9saWJtcGMuaW5jCkBAIC0wLDAgKzEsNyBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIGNvbXBsZXggbnVtYmVyIGFyaXRobWV0aWMgd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uIGFuZCBjb3JyZWN0IHJvdW5kaW5nIgorREVTQ1JJUFRJT04gPSAiTXBjIGlzIGEgQyBsaWJyYXJ5IGZvciB0aGUgYXJpdGhtZXRpYyBvZiBjb21wbGV4IG51bWJlcnMgd2l0aCBhcmJpdHJhcmlseSBoaWdoIHByZWNpc2lvbiBhbmQgY29ycmVjdCByb3VuZGluZyBvZiB0aGUgcmVzdWx0LiBJdCBpcyBidWlsdCB1cG9uIGFuZCBmb2xsb3dzIHRoZSBzYW1lIHByaW5jaXBsZXMgYXMgTXBmciIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubXVsdGlwcmVjaXNpb24ub3JnLyIKK0xJQ0VOU0UgPSAiTEdQTHYzIgorU0VDVElPTiA9ICJsaWJzIgorCitpbmhlcml0IGF1dG90b29scyB0ZXhpbmZvCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJtcGMvbGlibXBjXzEuMC4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2U1YTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibXBjL2xpYm1wY18xLjAuMy5iYgpAQCAtMCwwICsxLDEzIEBACityZXF1aXJlIGxpYm1wYy5pbmMKKworREVQRU5EUyA9ICJnbXAgbXBmciIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MRVNTRVI7bWQ1PWU2YTYwMGZkNWUxZDljYmRlMmQ5ODM2ODAyMzNhZDAyIgorU1JDX1VSSSA9ICJodHRwOi8vd3d3Lm11bHRpcHJlY2lzaW9uLm9yZy9tcGMvZG93bmxvYWQvbXBjLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ2YTFkNWY4ZGRlYTNhYmQyY2MzZTk4ZjU4MzUyZDI2IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjYxN2RlY2M2ZWEwOTg4OWZiMDhlZGUzMzA5MTdhMDBiMTY4MDliOGRiODhjMjljMzFiZmJiNDljYmY4OGVjYzMiCisKK1MgPSAiJHtXT1JLRElSfS9tcGMtJHtQVn0iCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBjLWZpbGUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4YjgzMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sL2ZpeC1wYy1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMTcgQEAKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTb21lIHBhY2thZ2VzIGFyZSBhc2tpbmcgb25seSBmb3IgbGlibmwtMi4wLCBidXQgZXhwZWN0cyB0byBnZXQgYWxzbworbGlibmwtZ2VubCwgbGlibmwtbmYgbGlibmwtcm91dGUsIGVhc2llc3Qgd2F5IHRvIGZpeCB0aGVtIGlzIGhlcmUuCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KK0luZGV4OiBsaWJubC0zLjIuMTQvbGlibmwtMy4wLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlibmwtMy4yLjE0Lm9yaWcvbGlibmwtMy4wLnBjLmluCisrKysgbGlibmwtMy4yLjE0L2xpYm5sLTMuMC5wYy5pbgorQEAgLTYsNSArNiw1IEBAIGluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisgTmFtZTogbGlibmwKKyBEZXNjcmlwdGlvbjogQ29udmVuaWVuY2UgbGlicmFyeSBmb3IgbmV0bGluayBzb2NrZXRzCisgVmVyc2lvbjogQFBBQ0tBR0VfVkVSU0lPTkAKKy1MaWJzOiAtTCR7bGliZGlyfSAtbG5sLUBNQUpfVkVSU0lPTkAKKytMaWJzOiAtTCR7bGliZGlyfSAtbG5sLUBNQUpfVkVSU0lPTkAgLWxubC1nZW5sLUBNQUpfVkVSU0lPTkAgLWxubC1uZi1ATUFKX1ZFUlNJT05AIC1sbmwtcm91dGUtQE1BSl9WRVJTSU9OQAorIENmbGFnczogLUkke2luY2x1ZGVkaXJ9L2xpYm5sQE1BSl9WRVJTSU9OQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmwvZml4LXBrdGxvY19zeW50YXhfaC1yYWNlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YWEwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJubC9saWJubC9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2gKQEAgLTAsMCArMSwzNiBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCitsaWJubCBoYXMgcHJvZ3Jlc3NlZCB0byAwLjMuMiBhbmQgdGhlcmUgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGFueQorIm1ha2UgLWoiIGlzc3VlcyB3aXRoIHRoaXMgYnVpbGQgYWZ0ZXIgbXkgbGltaXRlZCB0ZXN0aW5nIG9uIHRoYXQKK25ld2VyIHZlcnNpb24gc28gd2UgY2FuIGFzc3VtZSB0aGlzIGlzc3VlIGlzIGZpeGVkIHVwc3RyZWFtCisKK1NpZ25lZC1vZmYtYnk6IE1hcnRpbiBKYW5zYSA8bWFydGluLmphbnNhQGdtYWlsLmNvbT4KKworSW5kZXg6IGxpYm5sLTMuMi4yNS9saWIvTWFrZWZpbGUuYW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJubC0zLjIuMjUub3JpZy9saWIvTWFrZWZpbGUuYW0KKysrKyBsaWJubC0zLjIuMjUvbGliL01ha2VmaWxlLmFtCitAQCAtNDYsOSArNDYsMTIgQEAgQ0xFQU5GSUxFUyA9IFwKKyAKKyAjIEhhY2sgdG8gYXZvaWQgdXNpbmcgeWx3cmFwLiBJdCBkb2VzIG5vdCBmdW5jdGlvbiBjb3JyZWN0bHkgaW4gY29tYmluYXRpb24KKyAjIHdpdGggLS1oZWFkZXItZmlsZT0KKytyb3V0ZS9wa3Rsb2MubG86IHJvdXRlL3BrdGxvY19zeW50YXguaCByb3V0ZS9wa3Rsb2NfZ3JhbW1hci5oCisrcm91dGUvcGt0bG9jX2dyYW1tYXIuaDogcm91dGUvcGt0bG9jX2dyYW1tYXIuYworIHJvdXRlL3BrdGxvY19ncmFtbWFyLmM6IHJvdXRlL3BrdGxvY19ncmFtbWFyLmwKKyAJJChBTV9WX0dFTikgJChNS0RJUl9QKSByb3V0ZTsgJChGTEVYKSAtLWhlYWRlci1maWxlPXJvdXRlL3BrdGxvY19ncmFtbWFyLmggJChMRkxBR1MpIC1vICRAICReCisgCisrcm91dGUvcGt0bG9jX3N5bnRheC5oOiByb3V0ZS9wa3Rsb2Nfc3ludGF4LmMKKyByb3V0ZS9wa3Rsb2Nfc3ludGF4LmM6IHJvdXRlL3BrdGxvY19zeW50YXgueQorIAkkKEFNX1ZfR0VOKSAkKE1LRElSX1ApIHJvdXRlOyAkKFlBQ0MpIC1kICQoWUZMQUdTKSAtbyAkQCAkXgorIAorQEAgLTEwMiw3ICsxMDUsOSBAQCBCVUlMVF9TT1VSQ0VTID0gXAorIAlyb3V0ZS9jbHMvZW1hdGNoX2dyYW1tYXIuYyBcCisgCXJvdXRlL2Nscy9lbWF0Y2hfc3ludGF4LmMgXAorIAlyb3V0ZS9wa3Rsb2NfZ3JhbW1hci5jIFwKKy0Jcm91dGUvcGt0bG9jX3N5bnRheC5jCisrICAgcm91dGUvcGt0bG9jX3N5bnRheC5jIFwKKysgICByb3V0ZS9wa3Rsb2Nfc3ludGF4LmggXAorKyAgIHJvdXRlL3BrdGxvY19ncmFtbWFyLmgKKyAKKyBFWFRSQV9ESVNUID0gXAorIAlyb3V0ZS9wa3Rsb2NfZ3JhbW1hci5sIFwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm5sL2xpYm5sXzMuMi4yNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzgxNGZiCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlibmwvbGlibmxfMy4yLjI1LmJiCkBAIC0wLDAgKzEsNDQgQEAKK1NVTU1BUlkgPSAiQSBsaWJyYXJ5IGZvciBhcHBsaWNhdGlvbnMgZGVhbGluZyB3aXRoIG5ldGxpbmsgc29ja2V0cyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuaW5mcmFkZWFkLm9yZy9+dGdyL2xpYm5sLyIKK1NFQ1RJT04gPSAibGlicy9uZXR3b3JrIgorCitQRSA9ICIxIgorUFIgPSAicjEiCisKK0xJQ0VOU0UgPSAiTEdQTHYyLjEiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyIKKworREVQRU5EUyA9ICJmbGV4LW5hdGl2ZSBiaXNvbi1uYXRpdmUiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5pbmZyYWRlYWQub3JnL350Z3IvJHtCUE59L2ZpbGVzLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtcGt0bG9jX3N5bnRheF9oLXJhY2UucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LXBjLWZpbGUucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAzZjc0ZDBjZDUwMzdjYWRjOGNkZmEzMTNiYmQxOTVjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjhiZWI3NTkwNjc0OTU3YjkzMWRlNmI3ZjgxYzUzMGI4NWRjN2MxYWQ4ZmJkYTAxNTM5OGJjMWU4ZDFjZThlYzUiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGlibmwtMy5zby4qIFwKKyAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC5zby4qIFwKKyAgICAgICAgICAgICAgICR7c3lzY29uZmRpcn0iCitSUkVQTEFDRVNfJHtQTn0gPSAibGlibmwyIgorUkNPTkZMSUNUU18ke1BOfSA9ICJsaWJubDIiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8uZGVidWciCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLnNvIFwKKyAgICAgICAgICAgICAgICAgICAgJHtsaWJkaXJ9L2xpYm5sL2NsaS8qLyoubGEiCitGSUxFU18ke1BOfS1zdGF0aWNkZXYgKz0gIiR7bGliZGlyfS9saWJubC9jbGkvKi8qLmEiCisKK1BBQ0tBR0VTICs9ICIke1BOfS1jbGkgJHtQTn0tcm91dGUgJHtQTn0tbmYgJHtQTn0tZ2VubCAke1BOfS1pZGlhZyIKK0ZJTEVTXyR7UE59LWNsaSAgID0gIiR7bGliZGlyfS9saWJubC1jbGktMy5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC9jbGkvKi8qLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtzYmluZGlyfS9ubC0qIgorRklMRVNfJHtQTn0tcm91dGUgPSAiJHtsaWJkaXJ9L2xpYm5sLXJvdXRlLTMuc28uKiIKK0ZJTEVTXyR7UE59LWlkaWFnID0gIiR7bGliZGlyfS9saWJubC1pZGlhZy0zLnNvLioiCitGSUxFU18ke1BOfS1uZiAgICA9ICIke2xpYmRpcn0vbGlibmwtbmYtMy5zby4qIgorRklMRVNfJHtQTn0tZ2VubCAgPSAiJHtsaWJkaXJ9L2xpYm5sLWdlbmwtMy5zby4qIFwKKyAgICAgICAgICAgICAgICAgICAgICR7bGliZGlyfS9saWJubC1nZW5sLnNvLiogXAorICAgICAgICAgICAgICAgICAgICAgJHtzYmluZGlyfS9nZW5sLWN0cmwtbGlzdCIKK1JSRVBMQUNFU18ke1BOfS1nZW5sID0gImxpYm5sLWdlbmwyIGxpYm5sLWdlbmwtMy0yMDAiCitSQ09ORkxJQ1RTXyR7UE59LWdlbmwgPSAibGlibmwtZ2VubDIgbGlibmwtZ2VubC0zLTIwMCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3LzAwMDEtRml4LWVuYWJsZS12ZnAtZmxhZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmYxY2IxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvMDAwMS1GaXgtZW5hYmxlLXZmcC1mbGFnLnBhdGNoCkBAIC0wLDAgKzEsNDEgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworRnJvbSAxOTIxNDk4YmNjMDY0MDhlOGIwNTFhM2E5ZTljZTQxODI5OThmNzQ4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogRGF2aWQgU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CitEYXRlOiBGcmksIDggQXByIDIwMTEgMTA6MDU6NDkgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSCAxMC8xMF0gRml4IC0tZW5hYmxlLXZmcCBmbGFnCisKK1BhdGNoIGZyb20gQ2hyaXN0b3BoZSBMeW9uLCBmaXhlcyAjMzYwODQuCistLS0KKyBjb25maWd1cmUuYWMgICAgICAgICAgIHwgICAgNCArKy0tCisgbGlib2lsL2FybS9NYWtlZmlsZS5hbSB8ICAgIDEgKworIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCA5OGM4MWZiLi40MDdkODhjIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0xODgsOCArMTg4LDggQEAgZmkKKyBBQ19BUkdfRU5BQkxFKHZmcCwKKyAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS12ZnBdLFtjb21waWxlIHdpdGggVmVjdG9yIEZsb2F0aW5nLXBvaW50IHVuaXQgc3VwcG9ydF0pLAorICAgZW5hYmxlX3ZmcD0kZW5hYmxldmFsLGVuYWJsZV92ZnA9eWVzKQorLWlmIHRlc3QgIngkZW5hYmxlLXZmcCIgPSB4eWVzIC1hIHgkSEFWRV9HQ0NfQVNNID0geHllcyAtYSB4JEhBVkVfQVJNID0geHllczsgdGhlbgorLSAgQVNfQ09NUElMRVJfRkxBRyhbIi1XYSwtbWZwdT12ZnAiXSwKKytpZiB0ZXN0ICJ4JGVuYWJsZV92ZnAiID0geHllcyAtYSB4JEhBVkVfR0NDX0FTTSA9IHh5ZXMgLWEgeCRIQVZFX0FSTSA9IHh5ZXM7IHRoZW4KKysgIEFTX0NPTVBJTEVSX0ZMQUcoWyItbWZwdT12ZnAiXSwKKyAgICAgW1ZGUF9DRkxBR1M9IiRWRlBfQ0ZMQUdTIC1tZnB1PXZmcCJdLAorICAgICB0cnVlKQorICAgI0FTX0NPTVBJTEVSX0ZMQUcoWyItV2EsLW1mbG9hdC1hYmk9c29mdGZwIl0sCitkaWZmIC0tZ2l0IGEvbGlib2lsL2FybS9NYWtlZmlsZS5hbSBiL2xpYm9pbC9hcm0vTWFrZWZpbGUuYW0KK2luZGV4IGVhZDA4ZWQuLmNkOGQ5ZmEgMTAwNjQ0CistLS0gYS9saWJvaWwvYXJtL01ha2VmaWxlLmFtCisrKysgYi9saWJvaWwvYXJtL01ha2VmaWxlLmFtCitAQCAtNiw0ICs2LDUgQEAgbGliYXJtX2xhX1NPVVJDRVMgPSBcCisgCW1hdGhfdmZwX2FzbS5TCisgCisgbGliYXJtX2xhX0NGTEFHUyA9ICQoTElCT0lMX0NGTEFHUykgJChWRlBfQ0ZMQUdTKQorK2xpYmFybV9sYV9DQ0FTRkxBR1MgPSAkKExJQk9JTF9DRkxBR1MpICQoVkZQX0NGTEFHUykKKyAKKy0tIAorMS43LjYKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9maXgtdW5hbGlnbmVkLXdoaXRlbGlzdC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGUzYzFmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvZml4LXVuYWxpZ25lZC13aGl0ZWxpc3QucGF0Y2gKQEAgLTAsMCArMSwxOSBAQAorVXBzdHJlYW06IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTMxMzU4CisKK2NvbmZpZ3VyZTogZml4IHdoaXRlbGlzdGluZyBvZiB4ODZfNjQgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MKKworRml4IHR5cG8gaW4gd2hpdGVsaXN0IHNvIGNyb3NzLWNvbXBpbGUgd29ya3MgZm9yIHg4Nl82NC4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorCistLS0gbGlib2lsLTAuMy4xNy9tNC9hcy11bmFsaWduZWQtYWNjZXNzLm00Lm9yaWcJMjAwOS0wMi0yNiAxNDo0MDowOC4wMDAwMDAwMDAgLTA1MDAKKysrKyBsaWJvaWwtMC4zLjE3L200L2FzLXVuYWxpZ25lZC1hY2Nlc3MubTQJMjAxMC0xMS0wMyAxMjoxOTo1NS4wMDAwMDAwMDAgLTA0MDAKK0BAIC05LDcgKzksNyBAQAorICAgICAgICAgX0FTX0VDSE9fTihbKGJsYWNrbGlzdGVkKSBdKQorICAgICAgICAgYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz1ubworIAk7OworLSAgICAgIGk/ODYqfHg4Nl82NHxhbWQ2NHxwb3dlcnBjKnxtNjhrKnxjcmlzKikKKysgICAgICBpPzg2Knx4ODZfNjQqfGFtZDY0Knxwb3dlcnBjKnxtNjhrKnxjcmlzKikKKyAgICAgICAgIF9BU19FQ0hPX04oWyh3aGl0ZWxpc3RlZCkgXSkKKyAgICAgICAgIGFzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9eWVzCisgCTs7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9saWJvaWxfZml4X2Zvcl94MzIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczMzgwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWwtMC4zLjE3L2xpYm9pbF9maXhfZm9yX3gzMi5wYXRjaApAQCAtMCwwICsxLDIyMiBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK01ha2UgdGhlIGFzc2VtYmx5IHN5bnRheCBjb21wYXRpYmxlIHdpdGggeDMyIGdjYy4gT3RoZXdpc2UgeDMyIGdjYyB0aHJvd3MgZXJyb3JzLgorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMS8xMi8wMQorCisKK0luZGV4OiBsaWJvaWwtMC4zLjE3L2xpYm9pbC9hbWQ2NC93YXZlbGV0LmMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJvaWwtMC4zLjE3Lm9yaWcvbGlib2lsL2FtZDY0L3dhdmVsZXQuYworKysrIGxpYm9pbC0wLjMuMTcvbGlib2lsL2FtZDY0L3dhdmVsZXQuYworQEAgLTIxLDE0ICsyMSwxNCBAQCBkZWludGVybGVhdmUyX2FzbSAoaW50MTZfdCAqZDEsIGludDE2X3QgCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICBzdWIgJDIsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92dyAoJTEsJSVyY3gsNCksICUlYXhcbiIKKy0gICAgICAiICBtb3Z3ICUlYXgsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIG1vdncgMiglMSwlJXJjeCw0KSwgJSVheFxuIgorLSAgICAgICIgIG1vdncgJSVheCwgKCUyLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92dyA0KCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAyKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92dyA2KCUxLCUlcmN4LDQpLCAlJWF4XG4iCistICAgICAgIiAgbW92dyAlJWF4LCAyKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyAoJXExLCUlcmN4LDQpLCAlJWF4XG4iCisrICAgICAgIiAgbW92dyAlJWF4LCAoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyAyKCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgKCVxMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdncgNCglcTEsJSVyY3gsNCksICUlYXhcbiIKKysgICAgICAiICBtb3Z3ICUlYXgsIDIoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92dyA2KCVxMSwlJXJjeCw0KSwgJSVheFxuIgorKyAgICAgICIgIG1vdncgJSVheCwgMiglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBzdWIgJDIsICUlcmN4XG4iCisgICAgICAgIiAgamdlIDFiXG4iCisgICAgICAgOiAiK3IiIChkMSksICIrciIgKHNfMnhuKSwgIityIiAoZDIpLCAiK2MiIChuKQorQEAgLTUzLDIwICs1MywyMCBAQCBkZWludGVybGVhdmUyX21teCAoaW50MTZfdCAqZDEsIGludDE2X3QgCisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsNCksICUlbW0wXG4iCistICAgICAgIiAgbW92cSA4KCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorICAgICAgICIgIHBzbGxkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc2xsZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYWQgJDE2LCAlJW1tMFxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTFcbiIKKyAgICAgICAiICBwYWNrc3NkdyAlJW1tMSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxIDgoJTEsJSVyY3gsNCksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMVxuIgorICAgICAgICIgIHBzcmFkICQxNiwgJSVtbTBcbiIKKyAgICAgICAiICBwc3JhZCAkMTYsICUlbW0xXG4iCisgICAgICAgIiAgcGFja3NzZHcgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMiwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTMsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC05MywxMCArOTMsMTAgQEAgZGVpbnRlcmxlYXZlMl9tbXhfMiAoaW50MTZfdCAqZDEsIGludDE2XworICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIHBzaHVmdyAkMHhkOCwgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdmQgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorLSAgICAgICIgIHBzaHVmdyAkMHg4ZCwgKCUxLCUlcmN4LDQpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdmQgJSVtbTAsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBzaHVmdyAkMHhkOCwgKCVxMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZkICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgcHNodWZ3ICQweDhkLCAoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgIG1vdmQgJSVtbTAsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDIsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMTIzLDE2ICsxMjMsMTYgQEAgZGVpbnRlcmxlYXZlMl9tbXhfMyAoaW50MTZfdCAqZDEsIGludDE2XworICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsNCksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXExLCUlcmN4LDQpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgOCglcTEsJSVyY3gsNCksICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0wLCAlJW1tMVxuIgorICAgICAgICIgIHB1bnBja2h3ZCAlJW1tMCwgJSVtbTJcbiIKKyAgICAgICAiICBtb3ZxICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgIHB1bnBja2x3ZCAlJW1tMiwgJSVtbTBcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTIsICUlbW0xXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgbW92cSAlJW1tMSwgKCUyLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMTU5LDI2ICsxNTksMjYgQEAgZGVpbnRlcmxlYXZlMl9tbXhfNCAoaW50MTZfdCAqZDEsIGludDE2XworICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDQpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCw0KSwgJSVtbTFcbiIKKyAgICAgICAiICBtb3ZxICUlbW0xLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgOCglMSwlJXJjeCw0KSwgJSVtbTBcbiIKKy0gICAgICAiICAgbW92cSAxNiglMSwlJXJjeCw0KSwgJSVtbTVcbiIKKysgICAgICAiICBtb3ZxIDgoJXExLCUlcmN4LDQpLCAlJW1tMFxuIgorKyAgICAgICIgICBtb3ZxIDE2KCVxMSwlJXJjeCw0KSwgJSVtbTVcbiIKKyAgICAgICAiICBwdW5wY2tsd2QgJSVtbTAsICUlbW0xXG4iCisgICAgICAgIiAgIG1vdnEgJSVtbTUsICUlbW02XG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0wLCAlJW1tMlxuIgorLSAgICAgICIgICBtb3ZxIDI0KCUxLCUlcmN4LDQpLCAlJW1tNFxuIgorKyAgICAgICIgICBtb3ZxIDI0KCVxMSwlJXJjeCw0KSwgJSVtbTRcbiIKKyAgICAgICAiICBtb3ZxICUlbW0xLCAlJW1tMFxuIgorICAgICAgICIgICBwdW5wY2tsd2QgJSVtbTQsICUlbW01XG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0yLCAlJW1tMFxuIgorICAgICAgICIgICBwdW5wY2tod2QgJSVtbTQsICUlbW02XG4iCisgICAgICAgIiAgcHVucGNraHdkICUlbW0yLCAlJW1tMVxuIgorICAgICAgICIgICBtb3ZxICUlbW01LCAlJW1tNFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTAsICglcTAsJSVyY3gsMilcbiIKKyAgICAgICAiICAgcHVucGNrbHdkICUlbW02LCAlJW1tNFxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMiwlJXJjeCwyKVxuIgorKyAgICAgICIgIG1vdnEgJSVtbTEsICglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICAgcHVucGNraHdkICUlbW02LCAlJW1tNVxuIgorLSAgICAgICIgICBtb3ZxICUlbW00LCA4KCUwLCUlcmN4LDIpXG4iCistICAgICAgIiAgIG1vdnEgJSVtbTUsIDgoJTIsJSVyY3gsMilcbiIKKysgICAgICAiICAgbW92cSAlJW1tNCwgOCglcTAsJSVyY3gsMilcbiIKKysgICAgICAiICAgbW92cSAlJW1tNSwgOCglcTIsJSVyY3gsMilcbiIKKyAgICAgICAiICBhZGQgJDgsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMjUyLDEzICsyNTIsMTMgQEAgaW50ZXJsZWF2ZTJfbW14IChpbnQxNl90ICpkXzJ4biwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUxLCUlcmN4LDIpLCAlJW1tMFxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCwyKSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisgICAgICAgIiAgbW92cSAlJW1tMCwgJSVtbTJcbiIKKyAgICAgICAiICBwdW5wY2tod2QgJSVtbTEsICUlbW0wXG4iCisgICAgICAgIiAgcHVucGNrbHdkICUlbW0xLCAlJW1tMlxuIgorLSAgICAgICIgIG1vdnEgJSVtbTIsICglMCwlJXJjeCw0KVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTAsIDgoJTAsJSVyY3gsNClcbiIKKysgICAgICAiICBtb3ZxICUlbW0yLCAoJXEwLCUlcmN4LDQpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgOCglcTAsJSVyY3gsNClcbiIKKyAgICAgICAiICBhZGQgJDQsICUlcmN4XG4iCisgICAgICAgIiAgY21wICUzLCAlJWVjeFxuIgorICAgICAgICIgIGpsIDFiXG4iCitAQCAtMjg1LDEyICsyODUsMTIgQEAgbGlmdF9hZGRfc2hpZnQxX21teCAoaW50MTZfdCAqZCwgaW50MTZfdAorICAgYXNtIHZvbGF0aWxlICgiXG4iCisgICAgICAgIiAgeG9yICUlcmN4LCAlJXJjeFxuIgorICAgICAgICIxOlxuIgorLSAgICAgICIgIG1vdnEgKCUyLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgKCUzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMiwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICglcTMsJSVyY3gsMiksICUlbW0yXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDEsICUlbW0xXG4iCistICAgICAgIiAgcGFkZHcgKCUxLCUlcmN4LDIpLCAlJW1tMVxuIgorLSAgICAgICIgIG1vdnEgJSVtbTEsICglMCwlJXJjeCwyKVxuIgorKyAgICAgICIgIHBhZGR3ICglcTEsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAlJW1tMSwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zMTcsMTMgKzMxNywxMyBAQCBsaWZ0X3N1Yl9zaGlmdDFfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCistICAgICAgIiAgbW92cSAoJTEsJSVyY3gsMiksICUlbW0wXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKysgICAgICAiICBtb3ZxICglcTEsJSVyY3gsMiksICUlbW0wXG4iCisgICAgICAgIiAgcGFkZHcgJSVtbTIsICUlbW0xXG4iCisgICAgICAgIiAgcHNyYXcgJDEsICUlbW0xXG4iCisgICAgICAgIiAgcHN1YncgJSVtbTEsICUlbW0wXG4iCistICAgICAgIiAgbW92cSAlJW1tMCwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgbW92cSAlJW1tMCwgKCVxMCwlJXJjeCwyKVxuIgorICAgICAgICIgIGFkZCAkNCwgJSVyY3hcbiIKKyAgICAgICAiICBjbXAgJTQsICUlZWN4XG4iCisgICAgICAgIiAgamwgMWJcbiIKK0BAIC0zNTAsMTIgKzM1MCwxMiBAQCBsaWZ0X2FkZF9zaGlmdDJfbW14IChpbnQxNl90ICpkLCBpbnQxNl90CisgICBhc20gdm9sYXRpbGUgKCJcbiIKKyAgICAgICAiICB4b3IgJSVyY3gsICUlcmN4XG4iCisgICAgICAgIjE6XG4iCistICAgICAgIiAgbW92cSAoJTIsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAoJTMsJSVyY3gsMiksICUlbW0yXG4iCisrICAgICAgIiAgbW92cSAoJXEyLCUlcmN4LDIpLCAlJW1tMVxuIgorKyAgICAgICIgIG1vdnEgKCVxMywlJXJjeCwyKSwgJSVtbTJcbiIKKyAgICAgICAiICBwYWRkdyAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhdyAkMiwgJSVtbTFcbiIKKy0gICAgICAiICBwYWRkdyAoJTEsJSVyY3gsMiksICUlbW0xXG4iCistICAgICAgIiAgbW92cSAlJW1tMSwgKCUwLCUlcmN4LDIpXG4iCisrICAgICAgIiAgcGFkZHcgKCVxMSwlJXJjeCwyKSwgJSVtbTFcbiIKKysgICAgICAiICBtb3ZxICUlbW0xLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlNCwgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgorQEAgLTM4MiwxMyArMzgyLDEzIEBAIGxpZnRfc3ViX3NoaWZ0Ml9tbXggKGludDE2X3QgKmQsIGludDE2X3QKKyAgIGFzbSB2b2xhdGlsZSAoIlxuIgorICAgICAgICIgIHhvciAlJXJjeCwgJSVyY3hcbiIKKyAgICAgICAiMTpcbiIKKy0gICAgICAiICBtb3ZxICglMiwlJXJjeCwyKSwgJSVtbTFcbiIKKy0gICAgICAiICBtb3ZxICglMywlJXJjeCwyKSwgJSVtbTJcbiIKKy0gICAgICAiICBtb3ZxICglMSwlJXJjeCwyKSwgJSVtbTBcbiIKKysgICAgICAiICBtb3ZxICglcTIsJSVyY3gsMiksICUlbW0xXG4iCisrICAgICAgIiAgbW92cSAoJXEzLCUlcmN4LDIpLCAlJW1tMlxuIgorKyAgICAgICIgIG1vdnEgKCVxMSwlJXJjeCwyKSwgJSVtbTBcbiIKKyAgICAgICAiICBwYWRkdyAlJW1tMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3JhdyAkMiwgJSVtbTFcbiIKKyAgICAgICAiICBwc3VidyAlJW1tMSwgJSVtbTBcbiIKKy0gICAgICAiICBtb3ZxICUlbW0wLCAoJTAsJSVyY3gsMilcbiIKKysgICAgICAiICBtb3ZxICUlbW0wLCAoJXEwLCUlcmN4LDIpXG4iCisgICAgICAgIiAgYWRkICQ0LCAlJXJjeFxuIgorICAgICAgICIgIGNtcCAlNCwgJSVlY3hcbiIKKyAgICAgICAiICBqbCAxYlxuIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsLTAuMy4xNy9uby10ZXN0cy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTJkNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlib2lsL2xpYm9pbC0wLjMuMTcvbm8tdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkaXNhYmxlIGZlYXR1cmVdCisKKy0tLSBsaWJvaWwtMC4zLjkvbGlib2lsL2xpYm9pbGZ1bmN0aW9uLmMub2xkCTIwMDYtMDktMTggMTM6MDM6MjAuMDAwMDAwMDAwICswMTAwCisrKysgbGlib2lsLTAuMy45L2xpYm9pbC9saWJvaWxmdW5jdGlvbi5jCTIwMDYtMDktMTggMTM6MDQ6MTAuMDAwMDAwMDAwICswMTAwCitAQCAtMzQ1LDcgKzM0NSw5IEBACisgICAgIHJldHVybjsKKyAgIH0KKyAKKy0gIHRlc3QgPSBvaWxfdGVzdF9uZXcgKGtsYXNzKTsKKysgIGtsYXNzLT5jaG9zZW5faW1wbCA9IGtsYXNzLT5yZWZlcmVuY2VfaW1wbDsKKysgIGtsYXNzLT5mdW5jID0ga2xhc3MtPnJlZmVyZW5jZV9pbXBsLT5mdW5jOworKy8qICB0ZXN0ID0gb2lsX3Rlc3RfbmV3IChrbGFzcyk7CisgICBpZiAodGVzdCA9PSBOVUxMKSB7CisgICAgIE9JTF9FUlJPUiAoImZhaWxlZCB0byB0ZXN0IGZ1bmN0aW9uIGNsYXNzICVzIiwga2xhc3MtPm5hbWUpOworICAgICByZXR1cm47CitAQCAtMzg1LDcgKzM4Nyw3IEBACisgICBrbGFzcy0+Y2hvc2VuX2ltcGwgPSBtaW5faW1wbDsKKyAgIGtsYXNzLT5mdW5jID0gbWluX2ltcGwtPmZ1bmM7CisgCistICBvaWxfdGVzdF9mcmVlICh0ZXN0KTsKKysgIG9pbF90ZXN0X2ZyZWUgKHRlc3QpOyovCisgfQorIAorIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYm9pbC9saWJvaWxfMC4zLjE3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjc3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJvaWwvbGlib2lsXzAuMy4xNy5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkxpYnJhcnkgb2Ygc2ltcGxlIGZ1bmN0aW9ucyBvcHRpbWl6ZWQgZm9yIHZhcmlvdXMgQ1BVcyIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJvaWwuZnJlZWRlc2t0b3Aub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy8iCisKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YWQ4MDc4MGQ5YzUyMDVkNjM0ODFhMDE4NGUxOTlhMTUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbGlib2lsL2xpYm9pbC5oO2VuZGxpbmU9Mjg7bWQ1PTk1Yzc5NGE2NmI4ODgwMGQ5NDlmZWQxN2U0MzdkOWZiIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL2xpYm9pbC9saWJvaWxjcHUuYztlbmRsaW5lPTI4O21kNT04OWRhNjlhNjFkODhlZWRjYmEwNjZmNDIzNTNmYjc1YSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9leGFtcGxlcy9leGFtcGxlMS5jO2VuZGxpbmU9Mjk7bWQ1PTlkNGRhZDlmY2JiZGYwNDQxZWUwNjNmOGFmNTE3MGM5IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3Rlc3RzdWl0ZS90cmFucy5jO2VuZGxpbmU9Mjk7bWQ1PTM4MGVjZDQzMTIxZmUzZGNjMGQ4ZDdlNTk4NGYyODNkIgorCitERVBFTkRTID0gImdsaWItMi4wIgorUFIgPSAicjUiCisKK1NSQ19VUkkgPSAiaHR0cDovL2xpYm9pbC5mcmVlZGVza3RvcC5vcmcvZG93bmxvYWQvJHtCUE59LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9uby10ZXN0cy5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9maXgtdW5hbGlnbmVkLXdoaXRlbGlzdC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLUZpeC1lbmFibGUtdmZwLWZsYWcucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vbGlib2lsX2ZpeF9mb3JfeDMyLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI0N2RjNzM0ZjgyZmFlYjI5NjRkOTc3NzFjZmQyZTcwMSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMDVmMDIwNzliMGI1MDAzNGM3NTlkYjM0YjQ3M2VjYjU3MDRmZmEyMGE1NDg2YjYwYThiNzY5ODEyOGJmYzY5IgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcKKworQVJNX0lOU1RSVUNUSU9OX1NFVCA9ICJhcm0iCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA4ZDgwNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9NYWtlZmlsZQpAQCAtMCwwICsxLDE4MyBAQAorVEVTVFMgPSBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0IFJ1blRlc3QgUnVuR3JlcFRlc3QKK3N1YmRpciA9IC4KK2FtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOworYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKKyAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorICAgICopIGY9JCRwOzsgXAorICBlc2FjOworYW1fX3R0eV9jb2xvcnNfZHVtbXkgPSBcCisgIG1nbj0gcmVkPSBncm49IGxnbj0gYmx1PSBicmc9IHN0ZD07IFwKKyAgYW1fX2NvbG9yX3Rlc3RzPW5vCithbV9fdHR5X2NvbG9ycyA9IHsgXAorICAkKGFtX190dHlfY29sb3JzX2R1bW15KTsgXAorICBpZiB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWG5vOyB0aGVuIFwKKyAgICBhbV9fY29sb3JfdGVzdHM9bm87IFwKKyAgZWxpZiB0ZXN0ICJYJChBTV9DT0xPUl9URVNUUykiID0gWGFsd2F5czsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICBlbGlmIHRlc3QgIlgkJFRFUk0iICE9IFhkdW1iICYmIHsgdGVzdCAtdCAxOyB9IDI+L2Rldi9udWxsOyB0aGVuIFwKKyAgICBhbV9fY29sb3JfdGVzdHM9eWVzOyBcCisgIGZpOyBcCisgIGlmIHRlc3QgJCRhbV9fY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4gXAorICAgIHJlZD0nG1swOzMxbSc7IFwKKyAgICBncm49JxtbMDszMm0nOyBcCisgICAgbGduPScbWzE7MzJtJzsgXAorICAgIGJsdT0nG1sxOzM0bSc7IFwKKyAgICBtZ249JxtbMDszNW0nOyBcCisgICAgYnJnPScbWzFtJzsgXAorICAgIHN0ZD0nG1ttJzsgXAorICBmaTsgXAorfQorYW1fX3JzdF90aXRsZSA9IHsgc2VkICdzLy4qLyAgICYgICAvO2g7cy8uLz0vZztwO3g7cy8gKiQkLy87cDtnJyAmJiBlY2hvOyB9CithbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYworYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MgPSBcCisgIC0tY29sb3ItdGVzdHMgIiQkYW1fX2NvbG9yX3Rlc3RzIiBcCisgIC0tZW5hYmxlLWhhcmQtZXJyb3JzICIkJGFtX19lbmFibGVfaGFyZF9lcnJvcnMiIFwKKyAgLS1leHBlY3QtZmFpbHVyZSAiJCRhbV9fZXhwZWN0X2ZhaWx1cmUiCithbV9fY2hlY2tfcHJlID0gXAorJChhbV9fc2hfZV9zZXR1cCk7IFwKKyQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKSBcCiskKGFtX190dHlfY29sb3JzKTsgXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsgXAorY2FzZSAiJEAiIGluIFwKKyAgKi8qKSBhbV9fb2Rpcj1gZWNobyAiLi8kQCIgfCBzZWQgJ3N8L1teL10qJCR8fCdgOzsgXAorICAgICopIGFtX19vZGlyPS47OyBcCitlc2FjOyBcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4Ii4iIHx8IHRlc3QgLWQgIiQkYW1fX29kaXIiIFwKKyAgfHwgJChNS0RJUl9QKSAiJCRhbV9fb2RpciIgfHwgZXhpdCAkJD87IFwKK2lmIHRlc3QgLWYgIi4vJCRmIjsgdGhlbiBkaXI9Li87IFwKK2VsaWYgdGVzdCAtZiAiJCRmIjsgdGhlbiBkaXI9OyBcCitlbHNlIGRpcj0iJChzcmNkaXIpLyI7IGZpOyBcCit0c3Q9JCRkaXIkJGY7IGxvZz0nJEAnOyBcCitpZiB0ZXN0IC1uICckKERJU0FCTEVfSEFSRF9FUlJPUlMpJzsgdGhlbiBcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IFwKK2Vsc2UgXAorICBhbV9fZW5hYmxlX2hhcmRfZXJyb3JzPXllczsgXAorZmk7CithbV9fc2V0X1RFU1RTX2Jhc2VzID0gXAorICBiYXNlcz0nJChURVNUX0xPR1MpJzsgXAorICBiYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgfCBzZWQgJ3MvXC5sb2ckJC8vJ2A7IFwKKyAgYmFzZXM9YGVjaG8gJCRiYXNlc2AKK1JFQ0hFQ0tfTE9HUyA9ICQoVEVTVF9MT0dTKQorVEVTVF9TVUlURV9MT0cgPSB0ZXN0LXN1aXRlLmxvZworVEVTVF9FWFRFTlNJT05TID0gIC50ZXN0CitMT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgorYW1fX3Rlc3RfbG9nczEgPSAkKFRFU1RTOj0ubG9nKQorYW1fX3Rlc3RfbG9nczIgPSAkKGFtX190ZXN0X2xvZ3MxOi5sb2c9LmxvZykKK1RFU1RfTE9HUyA9ICQoYW1fX3Rlc3RfbG9nczI6LnRlc3QubG9nPS5sb2cpCitNS0RJUl9QID0gL2Jpbi9ta2RpciAtcAorUEFDS0FHRV9TVFJJTkcgPSBQQ1JFIDguMzYKK1NIRUxMID0gL2Jpbi9zaAorc3JjZGlyID0gLgordG9wX3NyY2RpciA9IC4KKyQoVEVTVF9TVUlURV9MT0cpOiAkKFRFU1RfTE9HUykKKwlAJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWFtX19mX29rICgpIHsgdGVzdCAtZiAiJCQxIiAmJiB0ZXN0IC1yICIkJDEiOyB9OyBcCisJcmVkb19iYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gXAorCSAgICAgICAgICAgICAgYW1fX2Zfb2sgJCRpLnRycyAmJiBhbV9fZl9vayAkJGkubG9nIHx8IGVjaG8gJCRpOyBcCisJICAgICAgICAgICAgZG9uZWA7IFwKKwlzdD0wOyAgXAorCWVycm1zZz0iZmF0YWw6IG1ha2luZyAkKFRFU1RfU1VJVEVfTE9HKTogZmFpbGVkIHRvIGNyZWF0ZSI7IFwKKwlmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIFwKKwkgIHRlc3QgLWYgJCRpLnRycyAmJiB0ZXN0IC1yICQkaS50cnMgXAorCSAgICB8fCB7IGVjaG8gIiQkZXJybXNnICQkaS50cnMiID4mMjsgc3Q9MTsgfTsgXAorCSAgdGVzdCAtZiAkJGkubG9nICYmIHRlc3QgLXIgJCRpLmxvZyBcCisJICAgIHx8IHsgZWNobyAiJCRlcnJtc2cgJCRpLmxvZyIgPiYyOyBzdD0xOyB9OyBcCisJZG9uZTsgXAorCXRlc3QgJCRzdCAtZXEgMCB8fCBleGl0IDE7CisJQCQoYW1fX3NoX2Vfc2V0dXApOyAkKGFtX190dHlfY29sb3JzKTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCXdzPSdbIAldJzsgXAorCXJlc3VsdHM9YGZvciBiIGluICQkYmFzZXM7IGRvIGVjaG8gJCRiLnRyczsgZG9uZWA7IFwKKwl0ZXN0IC1uICIkJHJlc3VsdHMiIHx8IHJlc3VsdHM9L2Rldi9udWxsOyBcCisJYWxsPWAgIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDoiICAgICAgICAgICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlwYXNzPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqUEFTUyIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWZhaWw9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypGQUlMIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJc2tpcD1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlNLSVAiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4ZmFpbD1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWEZBSUwiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXhwYXNzPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypYUEFTUyIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJZXJyb3I9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKkVSUk9SIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlpZiB0ZXN0IGBleHByICQkZmFpbCArICQkeHBhc3MgKyAkJGVycm9yYCAtZXEgMDsgdGhlbiBcCisJICBzdWNjZXNzPXRydWU7IFwKKwllbHNlIFwKKwkgIHN1Y2Nlc3M9ZmFsc2U7IFwKKwlmaTsgXAorCWJyPSc9PT09PT09PT09PT09PT09PT09JzsgYnI9JCRiciQkYnIkJGJyJCRicjsgXAorCXJlc3VsdF9jb3VudCAoKSBcCisJeyBcCisJICAgIGlmIHRlc3QgeCIkJDEiID0geCItLW1heWJlLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9eWVzOyBcCisJICAgIGVsaWYgdGVzdCB4IiQkMSIgPSB4Ii0tbm8tY29sb3IiOyB0aGVuIFwKKwkgICAgICBtYXliZV9jb2xvcml6ZT1ubzsgXAorCSAgICBlbHNlIFwKKwkgICAgICBlY2hvICIkQDogaW52YWxpZCAncmVzdWx0X2NvdW50JyB1c2FnZSIgPiYyOyBleGl0IDQ7IFwKKwkgICAgZmk7IFwKKwkgICAgc2hpZnQ7IFwKKwkgICAgZGVzYz0kJDEgY291bnQ9JCQyOyBcCisJICAgIGlmIHRlc3QgJCRtYXliZV9jb2xvcml6ZSA9IHllcyAmJiB0ZXN0ICQkY291bnQgLWd0IDA7IHRoZW4gXAorCSAgICAgIGNvbG9yX3N0YXJ0PSQkMyBjb2xvcl9lbmQ9JCRzdGQ7IFwKKwkgICAgZWxzZSBcCisJICAgICAgY29sb3Jfc3RhcnQ9IGNvbG9yX2VuZD07IFwKKwkgICAgZmk7IFwKKwkgICAgZWNobyAiJCR7Y29sb3Jfc3RhcnR9IyAkJGRlc2MgJCRjb3VudCQke2NvbG9yX2VuZH0iOyBcCisJfTsgXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0ICgpIFwKKwl7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlRPVEFMOiIgJCRhbGwgICAiJCRicmciOyBcCisJICByZXN1bHRfY291bnQgJCQxICJQQVNTOiAiICQkcGFzcyAgIiQkZ3JuIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiU0tJUDogIiAkJHNraXAgICIkJGJsdSI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhGQUlMOiIgJCR4ZmFpbCAiJCRsZ24iOyBcCisJICByZXN1bHRfY291bnQgJCQxICJGQUlMOiAiICQkZmFpbCAgIiQkcmVkIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiWFBBU1M6IiAkJHhwYXNzICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIkVSUk9SOiIgJCRlcnJvciAiJCRtZ24iOyBcCisJfTsgXAorCXsJCQkJCQkJCVwKKwkgIGVjaG8gIiQoUEFDS0FHRV9TVFJJTkcpOiAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykiIHwJXAorCSAgICAkKGFtX19yc3RfdGl0bGUpOwkJCQkJCVwKKwkgIGNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbm8tY29sb3I7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBlY2hvICIuLiBjb250ZW50czo6IDpkZXB0aDogMiI7CQkJCVwKKwkgIGVjaG87CQkJCQkJCQlcCisJICBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYjsgZG9uZTsJCQkJXAorCX0gPiQoVEVTVF9TVUlURV9MT0cpLnRtcCB8fCBleGl0IDE7CQkJCVwKKwltdiAkKFRFU1RfU1VJVEVfTE9HKS50bXAgJChURVNUX1NVSVRFX0xPRyk7CQkJXAorCWlmICQkc3VjY2VzczsgdGhlbgkJCQkJCVwKKwkgIGNvbD0iJCRncm4iOwkJCQkJCQlcCisJIGVsc2UJCQkJCQkJCVwKKwkgIGNvbD0iJCRyZWQiOwkJCQkJCQlcCisJICB0ZXN0IHgiJCRWRVJCT1NFIiA9IHggfHwgY2F0ICQoVEVTVF9TVUlURV9MT0cpOwkJXAorCWZpOwkJCQkJCQkJXAorCWVjaG8gIiQke2NvbH0kJGJyJCR7c3RkfSI7IAkJCQkJXAorCWVjaG8gIiQke2NvbH1UZXN0c3VpdGUgc3VtbWFyeSBmb3IgJChQQUNLQUdFX1NUUklORykkJHtzdGR9IjsJXAorCWVjaG8gIiQke2NvbH0kJGJyJCR7c3RkfSI7IAkJCQkJXAorCWNyZWF0ZV90ZXN0c3VpdGVfcmVwb3J0IC0tbWF5YmUtY29sb3I7CQkJCVwKKwllY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQkJXAorCWlmICQkc3VjY2VzczsgdGhlbiA6OyBlbHNlCQkJCQlcCisJICBlY2hvICIkJHtjb2x9U2VlICQoc3ViZGlyKS8kKFRFU1RfU1VJVEVfTE9HKSQke3N0ZH0iOwkJXAorCSAgZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJXAorCWZpOwkJCQkJCQkJXAorCSQkc3VjY2VzcyB8fCBleGl0IDEKK2NoZWNrLVRFU1RTOgorCUBsaXN0PSckKFJFQ0hFQ0tfTE9HUyknOyAgICAgICAgICAgdGVzdCAteiAiJCRsaXN0IiB8fCBybSAtZiAkJGxpc3QKKwlAdGVzdCAteiAiJChURVNUX1NVSVRFX0xPRykiIHx8IHJtIC1mICQoVEVTVF9TVUlURV9MT0cpCisJQHNldCArZTsgJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWxvZ19saXN0PWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCisJbG9nX2xpc3Q9YGVjaG8gJCRsb2dfbGlzdGA7IFwKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkKFRFU1RfU1VJVEVfTE9HKSBURVNUX0xPR1M9IiQkbG9nX2xpc3QiOyBcCisJZXhpdCAkJD87CitwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0LmxvZzogcGNyZV9zdHJpbmdwaWVjZV91bml0dGVzdCQoRVhFRVhUKQorCUBwPSdwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0JChFWEVFWFQpJzsgXAorCWI9J3BjcmVfc3RyaW5ncGllY2VfdW5pdHRlc3QnOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAiJCR0c3QiCitSdW5UZXN0LmxvZzogUnVuVGVzdAorCUBwPSdSdW5UZXN0JzsgXAorCWI9J1J1blRlc3QnOyBcCisJJChhbV9fY2hlY2tfcHJlKSAkKExPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAtLSAiJCR0c3QiCitSdW5HcmVwVGVzdC5sb2c6IFJ1bkdyZXBUZXN0CisJQHA9J1J1bkdyZXBUZXN0JzsgXAorCWI9J1J1bkdyZXBUZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgLS0gIiQkdHN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YjQ0ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvZml4LXBjcmUtbmFtZS1jb2xsaXNpb24ucGF0Y2gKQEAgLTAsMCArMSw0MSBAQAorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtkZWJpYW4gcGF0Y2hdCisKK1RoaXMgcGF0Y2ggYWRkcmVzcyBhIG5hbWVzcGFjZSBjb2xsaXNpb24gd2l0aCBsaWJjLgorCitBbHRob3VnaCB0aGVyZSBpcyBubyAiI2luY2x1ZGUgPHJlZ2V4Lmg+IiBpbiB0aGUgc291cmNlIGZpbGUsIGF0CitydW50aW1lLCBpdCdzIHVuaW50ZW50aW9uYWxseSBsaW5rZWQgdG8gdGhlIGxpYmMgdmVyc2lvbiwgdGhlIHJlZ2NvbXAgb2YKK2xpYmMgaXMgY2FsbGVkIGluc3RlYWQgdGhlIHBjcmUgb25lIHVzaW5nIHBjcmUncyBkYXRhIHN0cnVjdHVyZS4uLgordGhhdCBsb29rcyBsaWtlIGEgZGlzYXN0ZXIuCisKK0NhbiBwYXRjaCBpcyBmcm9tIERlYmlhbiAoYW5kIFVidW50dSAxMS4wNGFscGhhIGhhcyBpdCBhbHNvKS4KKworW3NndzogYWRkZWQgcGF0Y2ggY29tbWVudF0KK1NpZ25lZC1vZmYtYnk6IFFpbmcgSGUgPHFpbmcuaGVAaW50ZWwuY29tPgorU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorCistLS0gYS9wY3JlcG9zaXguaAkyMDEwLTA1LTE3IDAwOjE3OjIzLjAwMDAwMDAwMCArMDgwMAorKysrIGIvcGNyZXBvc2l4LmgJMjAwOS0wMS0xNSAwNDozMjoxNy4wMDAwMDAwMDAgKzA4MDAKK0BAIC0xMzMsMTQgKzEzMCwxOSBAQAorIAorIC8qIFRoZSBmdW5jdGlvbnMgKi8KKyAKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgaW50IHJlZ2NvbXAocmVnZXhfdCAqLCBjb25zdCBjaGFyICosIGludCk7CistUENSRVBPU0lYX0VYUF9ERUNMIGludCByZWdleGVjKGNvbnN0IHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisrUENSRVBPU0lYX0VYUF9ERUNMIGludCBwY3JlcG9zaXhfcmVnY29tcChyZWdleF90ICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKytQQ1JFUE9TSVhfRVhQX0RFQ0wgaW50IHBjcmVwb3NpeF9yZWdleGVjKGNvbnN0IHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgcmVnbWF0Y2hfdCAqLCBpbnQpOworLVBDUkVQT1NJWF9FWFBfREVDTCBzaXplX3QgcmVnZXJyb3IoaW50LCBjb25zdCByZWdleF90ICosIGNoYXIgKiwgc2l6ZV90KTsKKy1QQ1JFUE9TSVhfRVhQX0RFQ0wgdm9pZCByZWdmcmVlKHJlZ2V4X3QgKik7CisrUENSRVBPU0lYX0VYUF9ERUNMIHNpemVfdCBwY3JlcG9zaXhfcmVnZXJyb3IoaW50LCBjb25zdCByZWdleF90ICosIGNoYXIgKiwgc2l6ZV90KTsKKytQQ1JFUE9TSVhfRVhQX0RFQ0wgdm9pZCBwY3JlcG9zaXhfcmVnZnJlZShyZWdleF90ICopOworIAorICNpZmRlZiBfX2NwbHVzcGx1cworIH0gICAvKiBleHRlcm4gIkMiICovCisgI2VuZGlmCisgCisrI2RlZmluZSByZWdjb21wIHBjcmVwb3NpeF9yZWdjb21wCisrI2RlZmluZSByZWdleGVjIHBjcmVwb3NpeF9yZWdleGVjCisrI2RlZmluZSByZWdlcnJvciBwY3JlcG9zaXhfcmVnZXJyb3IKKysjZGVmaW5lIHJlZ2ZyZWUgcGNyZXBvc2l4X3JlZ2ZyZWUKKysKKyAjZW5kaWYgLyogRW5kIG9mIHBjcmVwb3NpeC5oICovCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZS9wY3JlLWNyb3NzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzODgwZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcGNyZS1jcm9zcy5wYXRjaApAQCAtMCwwICsxLDQ4IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworLS0tIHBjcmUtOC4zMi5vcmlnL01ha2VmaWxlLmFtCisrKysgcGNyZS04LjMyL01ha2VmaWxlLmFtCitAQCAtMTk3LDggKzE5NywxOCBAQCBiaW5fU0NSSVBUUyA9IHBjcmUtY29uZmlnCisgCisrQ0NfRk9SX0JVSUxEID0gQENDX0ZPUl9CVUlMREAKKytDRkxBR1NfRk9SX0JVSUxEID0gQENGTEFHU19GT1JfQlVJTERACisrQ0NMRF9GT1JfQlVJTEQgPSBAQ0NMRF9GT1JfQlVJTERACisrTERGTEFHU19GT1JfQlVJTEQgPSBATERGTEFHU19GT1JfQlVJTERACisrCisgaWYgV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVMKKyAKKyBub2luc3RfUFJPR1JBTVMgKz0gZGZ0YWJsZXMKKyBkZnRhYmxlc19TT1VSQ0VTID0gZGZ0YWJsZXMuYworK2RmdGFibGVzX0xJTksgPSAkKENDTERfRk9SX0JVSUxEKSAtbyAkQAorK2RmdGFibGVzX0xERkxBR1MgPSAkKExERkxBR1NfRk9SX0JVSUxEKQorKworK2RmdGFibGVzLm86ICQoc3JjZGlyKS9kZnRhYmxlcy5jCisrCSQoQ0NfRk9SX0JVSUxEKSAtYyAkKENGTEFHU19GT1JfQlVJTEQpIC1vICRAICQoc3JjZGlyKS9kZnRhYmxlcy5jCisgCisgcGNyZV9jaGFydGFibGVzLmM6IGRmdGFibGVzJChFWEVFWFQpCisgCS4vZGZ0YWJsZXMkKEVYRUVYVCkgJEAKKy0tLSBwY3JlLTguMzIub3JpZy9jb25maWd1cmUuYWMKKysrKyBwY3JlLTguMzIvY29uZmlndXJlLmFjCitAQCAtNzIsNiArNzIsMjIgQEAgdGhlbgorICAgZmkKKyBmaQorIAorK2lmIHRlc3QgeCIkY3Jvc3NfY29tcGlsaW5nIiA9IHh5ZXM7IHRoZW4KKysgICAgQ0NfRk9SX0JVSUxEPSIke0NDX0ZPUl9CVUlMRC1nY2N9IgorKyAgICBDQ0xEX0ZPUl9CVUlMRD0iJHtDQ0xEX0ZPUl9CVUlMRC1nY2N9IgorKyAgICBDRkxBR1NfRk9SX0JVSUxEPSIke0NGTEFHU19GT1JfQlVJTER9IgorKyAgICBMREZMQUdTX0ZPUl9CVUlMRD0iJHtMREZMQUdTX0ZPUl9CVUlMRH0iCisrZWxzZQorKyAgICBDQ19GT1JfQlVJTEQ9IiR7Q0NfRk9SX0JVSUxELVwkKENDKX0iCisrICAgIENDTERfRk9SX0JVSUxEPSIke0NDTERfRk9SX0JVSUxELVwkKENDTEQpfSIKKysgICAgQ0ZMQUdTX0ZPUl9CVUlMRD0iJHtDRkxBR1NfRk9SX0JVSUxELVwkKENGTEFHUyl9IgorKyAgICBMREZMQUdTX0ZPUl9CVUlMRD0iJHtMREZMQUdTX0ZPUl9CVUlMRC1cJChMREZMQUdTKX0iCisrZmkKKytBQ19BUkdfVkFSKENDX0ZPUl9CVUlMRCwgW2J1aWxkIHN5c3RlbSBDIGNvbXBpbGVyXSkKKytBQ19BUkdfVkFSKENDTERfRk9SX0JVSUxELCBbYnVpbGQgc3lzdGVtIEMgbGlua2VyIGZyb250ZW5kXSkKKytBQ19BUkdfVkFSKENGTEFHU19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBjb21waWxlciBhcmd1bWVudHNdKQorK0FDX0FSR19WQVIoTERGTEFHU19GT1JfQlVJTEQsIFtidWlsZCBzeXN0ZW0gQyBsaW5rZXIgZnJvbnRlbmQgYXJndW1lbnRzXSkKKysKKyAjIEFDX1BST0dfQ1hYIHdpbGwgcmV0dXJuICJnKysiIGV2ZW4gaWYgbm8gYysrIGNvbXBpbGVyIGlzIGluc3RhbGxlZC4KKyAjIENoZWNrIGZvciB0aGF0IGNhc2UsIGFuZCBqdXN0IGRpc2FibGUgYysrIGNvZGUgaWYgZysrIGRvZXNuJ3QgcnVuLgorIEFDX0xBTkdfUFVTSChDKyspCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmUvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTBkNGExCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicGNyZS9saWJwY3JlL3J1bi1wdGVzdApAQCAtMCwwICsxLDMgQEAKKyMhL2Jpbi9zaAorCittYWtlIGNoZWNrLVRFU1RTCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnBjcmUvbGlicGNyZV84LjM3LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZmM5ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwY3JlL2xpYnBjcmVfOC4zNy5iYgpAQCAtMCwwICsxLDczIEBACitERVNDUklQVElPTiA9ICJUaGUgUENSRSBsaWJyYXJ5IGlzIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGltcGxlbWVudCByZWd1bGFyIFwKK2V4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZyB1c2luZyB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBQZXJsIDUuIFBDUkUgXAoraGFzIGl0cyBvd24gbmF0aXZlIEFQSSwgYXMgd2VsbCBhcyBhIHNldCBvZiB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgXAordG8gdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBBUEkuIgorU1VNTUFSWSA9ICJQZXJsIENvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cucGNyZS5vcmciCitTRUNUSU9OID0gImRldmVsIgorTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTkNFO21kNT03ZTQ5Mzc4MTRhZWUxNDc1OGMxYzk1YjU5YzgwYzQ0ZCIKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L3Byb2plY3QvcGNyZS9wY3JlLyR7UFZ9L3BjcmUtJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIGZpbGU6Ly9wY3JlLWNyb3NzLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2ZpeC1wY3JlLW5hbWUtY29sbGlzaW9uLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgIGZpbGU6Ly9NYWtlZmlsZSBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJlZDkxYmUyOTJjYjAxZDIxYmM3ZTUyNjgxNmMyNjk4MSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1MTY3OWVhODAwNmNlMzEzNzlmYjA4NjBlNDZkZDg2NjY1ZDg2NGI1MDIwZmM5Y2QxOWU3MTI2MGVlZjQ3ODlkIgorCitTID0gIiR7V09SS0RJUn0vcGNyZS0ke1BWfSIKKworUFJPVklERVMgKz0gInBjcmUiCitERVBFTkRTICs9ICJiemlwMiB6bGliIgorCitQQUNLQUdFQ09ORklHW3BjcmV0ZXN0LXJlYWRsaW5lXSA9ICItLWVuYWJsZS1wY3JldGVzdC1saWJyZWFkbGluZSwtLWRpc2FibGUtcGNyZXRlc3QtbGlicmVhZGxpbmUscmVhZGxpbmUsIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3BjcmUtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcHRlc3QKKworRVhUUkFfT0VDT05GID0gIlwKKyAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmIFwKKyAgICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgXAorICAgIC0tZW5hYmxlLXV0ZjggXAorICAgIC0td2l0aC1saW5rLXNpemU9MiBcCisgICAgLS13aXRoLW1hdGNoLWxpbWl0PTEwMDAwMDAwIFwKKyIKKworIyBTZXQgTElOS19TSVpFIGluIEJVSUxEX0NGTEFHUyBnaXZlbiB0aGF0IHRoZSBhdXRvdG9vbHMgYmJjbGFzcyB1c2UgaXQgdG8KKyMgc2V0IENGTEFHU19GT1JfQlVJTEQsIHJlcXVpcmVkIGZvciB0aGUgbGlicGNyZSBidWlsZC4KK0JVSUxEX0NGTEFHUyA9KyAiLURMSU5LX1NJWkU9MiAtSSR7Qn0iCitDRkxBR1MgKz0gIi1EX1JFRU5UUkFOVCIKK0NYWEZMQUdTX2FwcGVuZF9wb3dlcnBjID0gIiAtbHN0ZGMrKyIKKworUEFDS0FHRVMgPSsgImxpYnBjcmVjcHAgbGlicGNyZXBvc2l4IHBjcmVncmVwIHBjcmVncmVwLWRvYyBwY3JldGVzdCBwY3JldGVzdC1kb2MiCisKK1NVTU1BUllfbGlicGNyZWNwcCA9ICIke1NVTU1BUll9IC0gQysrIHdyYXBwZXIgZnVuY3Rpb25zIgorU1VNTUFSWV9saWJwY3JlcG9zaXggPSAiJHtTVU1NQVJZfSAtIEMgd3JhcHBlciBmdW5jdGlvbnMgYmFzZWQgb24gdGhlIFBPU0lYIHJlZ2V4IEFQSSIKK1NVTU1BUllfcGNyZWdyZXAgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIgorU1VNTUFSWV9wY3JlZ3JlcC1kb2MgPSAiZ3JlcCB1dGlsaXR5IHRoYXQgdXNlcyBwZXJsIDUgY29tcGF0aWJsZSByZWdleGVzIC0gZG9jcyIKK1NVTU1BUllfcGNyZXRlc3QgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorU1VNTUFSWV9wY3JldGVzdC1kb2MgPSAicHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbWF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIC0gZG9jcyIKKworRklMRVNfbGlicGNyZWNwcCA9ICIke2xpYmRpcn0vbGlicGNyZWNwcC5zby4qIgorRklMRVNfbGlicGNyZXBvc2l4ID0gIiR7bGliZGlyfS9saWJwY3JlcG9zaXguc28uKiIKK0ZJTEVTX3BjcmVncmVwID0gIiR7YmluZGlyfS9wY3JlZ3JlcCIKK0ZJTEVTX3BjcmVncmVwLWRvYyA9ICIke21hbmRpcn0vbWFuMS9wY3JlZ3JlcC4xIgorRklMRVNfcGNyZXRlc3QgPSAiJHtiaW5kaXJ9L3BjcmV0ZXN0IgorRklMRVNfcGNyZXRlc3QtZG9jID0gIiR7bWFuZGlyfS9tYW4xL3BjcmV0ZXN0LjEiCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKKworZG9faW5zdGFsbF9wdGVzdCgpIHsKKwl0PSR7RH0ke1BURVNUX1BBVEh9CisJY3AgJHtXT1JLRElSfS9NYWtlZmlsZSAkdAorCWNwIC1yICR7U30vdGVzdGRhdGEgJHQKKwlmb3IgaSBpbiBwY3JlX3N0cmluZ3BpZWNlX3VuaXR0ZXN0IHBjcmVncmVwIHBjcmV0ZXN0OyBcCisJICBkbyBjcCAke0J9Ly5saWJzLyRpICR0OyBcCisJZG9uZQorCWZvciBpIGluIFJ1blRlc3QgUnVuR3JlcFRlc3QgdGVzdC1kcml2ZXI7IFwKKwkgIGRvIGNwICR7U30vJGkgJHQ7IFwKKwlkb25lCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnByb3h5L2xpYnByb3h5LzAwMDEtdGVzdC1JbmNsdWRlLXN5cy1zZWxlY3QuaC1mb3Itc2VsZWN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZTUyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eS8wMDAxLXRlc3QtSW5jbHVkZS1zeXMtc2VsZWN0LmgtZm9yLXNlbGVjdC5wYXRjaApAQCAtMCwwICsxLDM3IEBACitGcm9tIGY1ZjJjMjI4OWViMzVlYjgwNGMxYzM1ZTQ2Y2E0MWI1OGU0Y2FlMDEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCA2IEFwciAyMDE1IDE0OjEzOjQ5IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHRlc3Q6IEluY2x1ZGUgPHN5cy9zZWxlY3QuaD4gZm9yIHNlbGVjdCgpCisKK0FzIHBlciBwb3NpeCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlIG90aGVyd2lzZSB3ZSBlbmQgdXAgd2l0aCBlcnJvcnMgbGlrZQorCisvaG9tZS9rcmFqL3dvcmsvYmxlZWRpbmcvb3BlbmVtYmVkZGVkLWNvcmUvYnVpbGQvdG1wLW11c2wvd29yay9taXBzMzJyMi1vZS1saW51eC1tdXNsL2xpYnByb3h5LzAuNC4xMS1yMC9saWJwcm94eS0wLjQuMTEvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwOiBJbiBtZW1iZXIgZnVuY3Rpb24gJ2Jvb2wgVGVzdFNlcnZlcjo6bG9vcCgpJzoKKy9ob21lL2tyYWovd29yay9ibGVlZGluZy9vcGVuZW1iZWRkZWQtY29yZS9idWlsZC90bXAtbXVzbC93b3JrL21pcHMzMnIyLW9lLWxpbnV4LW11c2wvbGlicHJveHkvMC40LjExLXIwL2xpYnByb3h5LTAuNC4xMS9saWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHA6ODA6NDogZXJyb3I6ICdmZF9zZXQnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgIGZkX3NldCBmZHM7CisgICAgXgorL2hvbWUva3Jhai93b3JrL2JsZWVkaW5nL29wZW5lbWJlZGRlZC1jb3JlL2J1aWxkL3RtcC1tdXNsL3dvcmsvbWlwczMycjItb2UtbGludXgtbXVzbC9saWJwcm94eS8wLjQuMTEtcjAvbGlicHJveHktMC40LjExL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcDo4OToxNDogZXJyb3I6ICdmZHMnIHdhcyBub3QgZGVjbGFyZWQgaW4gdGhpcyBzY29wZQorICAgIEZEX1pFUk8gKCZmZHMpOworPEpJUkEgVElDS0VUICMxPiwgPEpJUkEgVElDS0VUICMyPiwgPEpJUkEgVElDS0VUICNuPiA6IDxvbmUgbGluZSBzdW1tYXJ5IG9mIGNoYW5nZT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJwcm94eS90ZXN0L2dldC1wYWMtdGVzdC5jcHAgfCAxICsKKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworZGlmZiAtLWdpdCBhL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcCBiL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAoraW5kZXggYTYxZmM0Yi4uYmRhNDY0NiAxMDA2NDQKKy0tLSBhL2xpYnByb3h5L3Rlc3QvZ2V0LXBhYy10ZXN0LmNwcAorKysrIGIvbGlicHJveHkvdGVzdC9nZXQtcGFjLXRlc3QuY3BwCitAQCAtMyw2ICszLDcgQEAKKyAjaW5jbHVkZSA8c3N0cmVhbT4KKyAjaW5jbHVkZSA8c3RyaW5nPgorIAorKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlicHJveHkvbGlicHJveHlfMC40LjExLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDBiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJwcm94eS9saWJwcm94eV8wLjQuMTEuYmIKQEAgLTAsMCArMSwzNSBAQAorU1VNTUFSWSA9ICJMaWJyYXJ5IHByb3ZpZGluZyBhdXRvbWF0aWMgcHJveHkgY29uZmlndXJhdGlvbiBtYW5hZ2VtZW50IgorSE9NRVBBR0UgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xpYnByb3h5LyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2xpYnByb3h5L2lzc3Vlcy9saXN0IgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT00ZmJkNjUzODBjZGQyNTU5NTEwNzkwMDhiMzY0NTE2YyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91dGlscy9wcm94eS5jO2JlZ2lubGluZT0xO2VuZGxpbmU9MTg7bWQ1PTU1MTUyYTEwMDZkN2RhZmJlZjMyYmFmOWMzMGE5OWMwIgorCitERVBFTkRTID0gImdjb25mIGdsaWItMi4wIgorCitTUkNfVVJJID0gIiR7REVCSUFOX01JUlJPUn0vbWFpbi9saWJwLyR7QlBOfS8ke0JQTn1fJHtQVn0ub3JpZy50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS10ZXN0LUluY2x1ZGUtc3lzLXNlbGVjdC5oLWZvci1zZWxlY3QucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIzY2QxYWUyYTRhYmVjZjQ0YjNmMjRkNjYzOWQyY2Q4NCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJkYzNmMzNkZTU0MTYzNzE4ZjgyYjNlN2M0OTZhN2RlOTdmODg2MjU3ODQxNGI4ZWNhYWQzY2JmZTQ4MjE4NjRiIgorCitpbmhlcml0IGNtYWtlIHBrZ2NvbmZpZworCitFWFRSQV9PRUNNQUtFID0gIi1EV0lUSF9XRUJLSVQ9bm8gLURXSVRIX0dOT01FPXllcyAtRFdJVEhfS0RFND1ubyBcCisJICAgICAgLURXSVRIX1BZVEhPTj1ubyAtRFdJVEhfUEVSTD1ubyAtRFdJVEhfTU9aSlM9bm8gLURXSVRIX05NPW5vIC1ETElCX0lOU1RBTExfRElSPSR7bGliZGlyfSAtRExJQkVYRUNfSU5TVEFMTF9ESVI9JHtsaWJleGVjZGlyfSIKKworRklMRVNfJHtQTn0gKz0gIiR7bGliZGlyfS8ke0JQTn0vJHtQVn0vbW9kdWxlcyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9jbWFrZSIKK0ZJTEVTXyR7UE59LWRiZyArPSAiJHtsaWJkaXJ9LyR7QlBOfS8ke1BWfS9wbHVnaW5zLy5kZWJ1Zy8gJHtsaWJkaXJ9LyR7QlBOfS8ke1BWfS9tb2R1bGVzLy5kZWJ1Zy8iCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kKCkgeworCWV4cG9ydCBIT1NUX1NZUz0ke0hPU1RfU1lTfQorCWV4cG9ydCBCVUlMRF9TWVM9JHtCVUlMRF9TWVN9Cit9CisKK3B5dGhvbigpIHsKKyAgICBpZiBpbmNvbXBhdGlibGVfbGljZW5zZV9jb250YWlucygiR1BMdjMiLCAieCIsICIiLCBkKSA9PSAieCIgb3IgYmIudXRpbHMuY29udGFpbnMoIkRJU1RST19GRUFUVVJFUyIsICJ4MTEiLCAieCIsICIiLCBkKSA9PSAiIjoKKyAgICAgICAgZC5zZXRWYXIoIkVYVFJBX09FQ01BS0UiLCBkLmdldFZhcigiRVhUUkFfT0VDTUFLRSIsIEZhbHNlKS5yZXBsYWNlKCItRFdJVEhfR05PTUU9eWVzIiwgIi1EV0lUSF9HTk9NRT1ubyIpKQorICAgICAgICBkLnNldFZhcigiREVQRU5EUyIsICIgIi5qb2luKGkgZm9yIGkgaW4gZC5nZXRWYXIoIkRFUEVORFMiLCBGYWxzZSkuc3BsaXQoKSBpZiBpICE9ICJnY29uZiIpKQorfQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJzb3VwL2xpYnNvdXAtMi40XzIuNTAuMC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDRkYjMxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlic291cC9saWJzb3VwLTIuNF8yLjUwLjAuYmIKQEAgLTAsMCArMSwyOCBAQAorU1VNTUFSWSA9ICJBbiBIVFRQIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gaW4gQyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ25vbWUub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvIgorCitMSUNFTlNFID0gIkxHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PTVmMzBmMDcxNmRmZGQwZDkxZWI0MzllYmVjNTIyZWMyIgorCitTRUNUSU9OID0gIngxMS9nbm9tZS9saWJzIgorCitERVBFTkRTID0gImdsaWItMi4wIGdudXRscyBsaWJ4bWwyIHNxbGl0ZTMgaW50bHRvb2wtbmF0aXZlIgorCisjIGxpYnNvdXAtZ25vbWUgaXMgZW50aXJlbHkgZGVwcmVjYXRlZCBhbmQganVzdCBzdHVicyBpbiAyLjQyIG9ud2FyZHMuICBFbmFibGUKKyMgYnkgZGVmYXVsdCBidXQgbGV0IGl0IGJlIGVhc2lseSBkaXNhYmxlZC4KK1BBQ0tBR0VDT05GSUcgPz89ICJnbm9tZSIKK1BBQ0tBR0VDT05GSUdbZ25vbWVdID0gIi0td2l0aC1nbm9tZSwtLXdpdGhvdXQtZ25vbWUiCisKK1NIUlRfVkVSID0gIiR7QGJiLmRhdGEuZ2V0VmFyKCdQVicsZCwxKS5zcGxpdCgnLicpWzBdfS4ke0BiYi5kYXRhLmdldFZhcignUFYnLGQsMSkuc3BsaXQoJy4nKVsxXX0iCitTUkNfVVJJID0gIiR7R05PTUVfTUlSUk9SfS9saWJzb3VwLyR7U0hSVF9WRVJ9L2xpYnNvdXAtJHtQVn0udGFyLnh6IgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWE4NGQ2NmUxYjdjY2QzYmQzNDA1NzRiMTFlY2NjMTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMWUwMTM2NWFjNGFmMzgxNzE4N2VhODQ3ZjlkMzU4OGMyN2VlZTAxZmM1MTlhNWE3Y2IyMTJiYjc4YjBmNjY3YiIKKworUyA9ICIke1dPUktESVJ9L2xpYnNvdXAtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKKyMgZ2xpYi1uZXR3b3JraW5nIGlzIG5lZWRlZCBmb3IgU1NMLCBwcm94aWVzLCBldGMuCitSUkVDT01NRU5EU18ke1BOfSA9ICJnbGliLW5ldHdvcmtpbmciCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlYWNiOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVuaXN0cmluZy9saWJ1bmlzdHJpbmcvMDAwMS1VbnNldC1uZWVkX2NoYXJzZXRfYWxpYXMtd2hlbi1idWlsZGluZy1mb3ItbXVzbC5wYXRjaApAQCAtMCwwICsxLDMwIEBACitGcm9tIGI5NTY1ZGMyZmUwYzRmN2RhYWVjOTFiN2U4M2JjNzMxM2RlZTJmNGEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogTW9uLCAxMyBBcHIgMjAxNSAxNzowMjoxMyAtMDcwMAorU3ViamVjdDogW1BBVENIXSBVbnNldCBuZWVkX2NoYXJzZXRfYWxpYXMgd2hlbiBidWlsZGluZyBmb3IgbXVzbAorCitsb2NhbGNoYXJzZXQgdXNlcyBhY19jdl9nbnVfbGlicmFyeV8yXzEgZnJvbSBnbGliYzIxLm00Cit3aGljaCBhY3R1YWxseSBzaG91ZGwgYmUgZml4ZWQgaW4gZ251bGliIGFuZCB0aGVuIGFsbCBkb3duc3RyZWFtCitwcm9qZWN0cyB3aWxsIGdldCBpdCBldmVudHVhbGx5LiBGb3Igbm93IHdlIGFwcGx5IHRoZSBmaXggdG8KK2NvcmV1dGlscworCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworU2lnbmVkLW9mZi1ieTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KKy0tLQorIGxpYi9nbnVsaWIubWsgfCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKK0luZGV4OiBsaWJ1bmlzdHJpbmctMC45LjQvbGliL01ha2VmaWxlLmdudWxpYgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGxpYnVuaXN0cmluZy0wLjkuNC5vcmlnL2xpYi9NYWtlZmlsZS5nbnVsaWIKKysrKyBsaWJ1bmlzdHJpbmctMC45LjQvbGliL01ha2VmaWxlLmdudWxpYgorQEAgLTM4MCw3ICszODAsNyBAQCBpbnN0YWxsLWV4ZWMtbG9jYWxjaGFyc2V0OiBhbGwtbG9jYWwKKyAJICBjYXNlICckKGhvc3Rfb3MpJyBpbiBcCisgCSAgICBkYXJ3aW5bNTZdKikgXAorIAkgICAgICBuZWVkX2NoYXJzZXRfYWxpYXM9dHJ1ZSA7OyBcCistCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKSBcCisrCSAgICBkYXJ3aW4qIHwgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqIHwgbGludXgtbXVzbCopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPWZhbHNlIDs7IFwKKyAJICAgICopIFwKKyAJICAgICAgbmVlZF9jaGFyc2V0X2FsaWFzPXRydWUgOzsgXApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nL2ljb252LW00LXJlbW92ZS10aGUtdGVzdC10by1jb252ZXJ0LWV1Yy1qcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4OTE2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy9pY29udi1tNC1yZW1vdmUtdGhlLXRlc3QtdG8tY29udmVydC1ldWMtanAucGF0Y2gKQEAgLTAsMCArMSw0MCBAQAorRnJvbSA4ZDk5YTM2ODYxNTY1NmE4MzVmNTUwMjMyNmFmZDMxY2VjMmNlYmZlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSmFja2llIEh1YW5nIDxqYWNraWUuaHVhbmdAd2luZHJpdmVyLmNvbT4KK0RhdGU6IE1vbiwgMTYgU2VwIDIwMTMgMTg6MTY6MTIgKzA4MDAKK1N1YmplY3Q6IFtQQVRDSF0gcmVtb3ZlIHRoZSB0ZXN0IHRvIGNvbnZlcnQgZXVjLWpwCisKK1JlbW92ZSB0aGUgdGVzdCAiVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzoKK05vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcyBwcm92aWRlZCIKK3NpbmNlIHdlIGRvbid0IHN1cHBvcnQgSFAtVVggYW5kIGlmIHRoZSBldWMtanAgaXMgbm90CitpbnN0YWxsZWQgb24gdGhlIGhvc3QsIGxpYnVuaXN0cmluZyB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQKK2ljb252IHN1cHBvcnQgYW5kIHdpbGwgY2F1c2UgZ3VpbGQtbmF0aXZlIGNvbmZpZ3VyZSBmYWlsLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKYWNraWUgSHVhbmcgPGphY2tpZS5odWFuZ0B3aW5kcml2ZXIuY29tPgorLS0tCisgZ251bGliLW00L2ljb252Lm00IHwgICAxMSAtLS0tLS0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKKworSW5kZXg6IGxpYnVuaXN0cmluZy0wLjkuNC9nbnVsaWItbTQvaWNvbnYubTQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBsaWJ1bmlzdHJpbmctMC45LjQub3JpZy9nbnVsaWItbTQvaWNvbnYubTQJMjAxNC0xMS0wMyAxNzo0MToyOS43NTUwMTE5MTcgKzAwMDAKKysrKyBsaWJ1bmlzdHJpbmctMC45LjQvZ251bGliLW00L2ljb252Lm00CTIwMTQtMTEtMDMgMTc6NDM6MDMuNzk1MDE0NDgwICswMDAwCitAQCAtMTU5LDE3ICsxNTksNiBAQAorICAgICAgIH0KKyAgIH0KKyAjZW5kaWYKKy0gIC8qIFRlc3QgYWdhaW5zdCBIUC1VWCAxMS4xMSBidWc6IE5vIGNvbnZlcnRlciBmcm9tIEVVQy1KUCB0byBVVEYtOCBpcworLSAgICAgcHJvdmlkZWQuICAqLworLSAgaWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLworLSAgICAgIGljb252X29wZW4gKCJVVEYtOCIsICJFVUMtSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8KKy0gICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpCistICAgICAgLyogVHJ5IEFJWCBuYW1lcy4gICovCistICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09IChpY29udl90KSgtMSkKKy0gICAgICAvKiBUcnkgSFAtVVggbmFtZXMuICAqLworLSAgICAgICYmIGljb252X29wZW4gKCJ1dGY4IiwgImV1Y0pQIikgPT0gKGljb252X3QpKC0xKSkKKy0gICAgcmVzdWx0IHw9IDE2OworICAgcmV0dXJuIHJlc3VsdDsKKyB9XV0pXSwKKyAgICAgICAgIFthbV9jdl9mdW5jX2ljb252X3dvcmtzPXllc10sCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bmlzdHJpbmcvbGlidW5pc3RyaW5nXzAuOS41LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWNmNjMzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZ18wLjkuNS5iYgpAQCAtMCwwICsxLDI4IEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIG1hbmlwdWxhdGluZyBDIGFuZCBVbmljb2RlIHN0cmluZ3MiCisKK0RFU0NSSVBUSU9OID0gIlRleHQgZmlsZXMgYXJlIG5vd2FkYXlzIHVzdWFsbHkgZW5jb2RlZCBpbiBVbmljb2RlLCBhbmQgbWF5XAorIGNvbnNpc3Qgb2YgdmVyeSBkaWZmZXJlbnQgc2NyaXB0cyBmcm9tIExhdGluIGxldHRlcnMgdG8gQ2hpbmVzZSBIYW56aVwKKyB3aXRoIG1hbnkga2luZHMgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIGFjY2VudHMsIHJpZ2h0LXRvLWxlZnQgd3JpdGluZ1wKKyBtYXJrcywgaHlwaGVucywgUm9tYW4gbnVtYmVycywgYW5kIG11Y2ggbW9yZS4gQnV0IHRoZSBQT1NJWCBwbGF0Zm9ybVwKKyBBUElzIGZvciB0ZXh0IGRvIG5vdCBjb250YWluIGFkZXF1YXRlIGZ1bmN0aW9ucyBmb3IgZGVhbGluZyB3aXRoXAorIHBhcnRpY3VsYXIgcHJvcGVydGllcyBvZiBtYW55IFVuaWNvZGUgY2hhcmFjdGVycy4gSW4gZmFjdCwgdGhlIFBPU0lYXAorIEFQSXMgZm9yIHRleHQgaGF2ZSBzZXZlcmFsIGFzc3VtcHRpb25zIGF0IHRoZWlyIGJhc2Ugd2hpY2ggZG9uJ3QgaG9sZFwKKyBmb3IgVW5pY29kZSB0ZXh0LiAgVGhpcyBsaWJyYXJ5IHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nXAorIFVuaWNvZGUgc3RyaW5ncyBhbmQgZm9yIG1hbmlwdWxhdGluZyBDIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBVbmljb2RlXAorIHN0YW5kYXJkLiAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIGRvY3VtZW50YXRpb24uIgorCitIT01FUEFHRSA9ICJodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvbGlidW5pc3RyaW5nLyIKK1NFQ1RJT04gPSAiZGV2ZWwiCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTZhNmE4ZTAyMDgzOGIyMzQwNmM4MWIxOWMxZDQ2ZGY2IgorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vbGlidW5pc3RyaW5nL2xpYnVuaXN0cmluZy0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vaWNvbnYtbTQtcmVtb3ZlLXRoZS10ZXN0LXRvLWNvbnZlcnQtZXVjLWpwLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtVW5zZXQtbmVlZF9jaGFyc2V0X2FsaWFzLXdoZW4tYnVpbGRpbmctZm9yLW11c2wucGF0Y2ggXAorIgorU1JDX1VSSVttZDVzdW1dID0gIjFhNzA1YmNkY2I4Mzc5OWQ1NDQxMzc2MTdiMzc3Y2ZkIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjFhOGMwNzcyNDY3ODUwYmVmNzE5NzMxOGE5NWY0NGFiYmI2NzhlYTgzY2JmMTE5YTM1MDBjYzc4NDgyNzZhMTciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHRleGluZm8KK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk3MmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvMDAwMS1JbnZhbGlkLWR3YXJmLW9wY29kZXMtY2FuLWNhdXNlLXJlZmVyZW5jZXMtYmV5b25kLXRoLnBhdGNoCkBAIC0wLDAgKzEsMjkgQEAKK0Zyb20gMzk2YjZjN2FiNzM3ZTJiZmYyNDRkNjQwNjAxYzQzNmEyNjI2MGNhMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEFydW4gU2hhcm1hIDxhcnVuQHNoYXJtYS1ob21lLm5ldD4KK0RhdGU6IEZyaSwgMTkgSnVuIDIwMTUgMTk6NDc6MjIgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gSW52YWxpZCBkd2FyZiBvcGNvZGVzIGNhbiBjYXVzZSByZWZlcmVuY2VzIGJleW9uZCB0aGUgZW5kIG9mCisgdGhlIGFycmF5LgorCitVcHN0cmVhbS1TdGF0dXM6IGJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IExpIFpob3UgPGxpLnpob3VAd2luZHJpdmVyLmNvbT4KKy0tLQorIGluY2x1ZGUvZHdhcmZfaS5oIHwgICAgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kd2FyZl9pLmggYi9pbmNsdWRlL2R3YXJmX2kuaAoraW5kZXggMWU2MjMxZS4uNGEwMmE3ZCAxMDA2NDQKKy0tLSBhL2luY2x1ZGUvZHdhcmZfaS5oCisrKysgYi9pbmNsdWRlL2R3YXJmX2kuaAorQEAgLTIwLDcgKzIwLDcgQEAKKyBleHRlcm4gY29uc3QgdWludDhfdCBkd2FyZl90b191bndfcmVnbnVtX21hcFtEV0FSRl9SRUdOVU1fTUFQX0xFTkdUSF07CisgLyogUkVHIGlzIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lczsgaXQgYmV0dGVyIGJlIHNpZGUtZWZmZWN0cyBmcmVlISAgKi8KKyAjIGRlZmluZSBkd2FyZl90b191bndfcmVnbnVtKHJlZykJCQkJCSAgXAorLSAgKCgocmVnKSA8PSBEV0FSRl9SRUdOVU1fTUFQX0xFTkdUSCkgPyBkd2FyZl90b191bndfcmVnbnVtX21hcFtyZWddIDogMCkKKysgICgoKHJlZykgPCBEV0FSRl9SRUdOVU1fTUFQX0xFTkdUSCkgPyBkd2FyZl90b191bndfcmVnbnVtX21hcFtyZWddIDogMCkKKyAjZW5kaWYKKyAKKyAjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKy0tIAorMS43LjkuNQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9BQXJjaDY0LXBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI4ZWMzMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0FBcmNoNjQtcG9ydC5wYXRjaApAQCAtMCwwICsxLDI1MjkgQEAKK0Zyb20gYWM2YzBhNjUzNTk3NWYxZGMyZGE2ZTRlMjc2NjYxNGJhYWMyYTE0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFl2YW4gUm91eCA8eXZhbi5yb3V4QGxpbmFyby5vcmc+CitEYXRlOiBTYXQsIDExIE1heSAyMDEzIDA5OjE4OjIzIC0wNjAwCitTdWJqZWN0OiBbUEFUQ0hdIEFBcmNoNjQgcG9ydC4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCistLS0KKyBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2IAorIFJFQURNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgCisgY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAKKyBpbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmggICAgICAgICAgfCAgMTg3ICsrKysrKysrKysrKysrKysrKysrKysKKyBpbmNsdWRlL2xpYnVud2luZC5oLmluICAgICAgICAgICAgICAgfCAgICA0IAorIGluY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oICB8ICAgNTIgKysrKysrCisgaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmggICAgICAgIHwgICAzMyArKysKKyBpbmNsdWRlL3RkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oICAgfCAgMjk0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCisgaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oICAgICAgICAgIHwgICAgNCAKKyBpbmNsdWRlL3RkZXAvam1wYnVmLmggICAgICAgICAgICAgICAgfCAgICAyIAorIGluY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oLmluICAgICAgICB8ICAgIDQgCisgc3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArKysrCisgc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMgICAgIHwgICA2MCArKysrKysrCisgc3JjL2FhcmNoNjQvR2dldF9wcm9jX2luZm8uYyAgICAgICAgIHwgICAzOSArKysrCisgc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jICAgICAgICAgIHwgIDEwMCArKysrKysrKysrKworIHNyYy9hYXJjaDY0L0dnbG9iYWwuYyAgICAgICAgICAgICAgICB8ICAgNTcgKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXQuYyAgICAgICAgICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYyAgICAgICAgICAgIHwgICA1NSArKysrKysKKyBzcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYyAgICAgICAgICAgfCAgIDQ1ICsrKysrCisgc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jICAgICAgIHwgICA2NCArKysrKysrCisgc3JjL2FhcmNoNjQvR3JlZ3MuYyAgICAgICAgICAgICAgICAgIHwgIDExMyArKysrKysrKysrKysrCisgc3JjL2FhcmNoNjQvR3Jlc3VtZS5jICAgICAgICAgICAgICAgIHwgIDE3NyArKysrKysrKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9Hc3RlcC5jICAgICAgICAgICAgICAgICAgfCAgMTI5ICsrKysrKysrKysrKysrKworIHNyYy9hYXJjaDY0L0xjcmVhdGVfYWRkcl9zcGFjZS5jICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGdldF9wcm9jX2luZm8uYyAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MZ2V0X3NhdmVfbG9jLmMgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xnbG9iYWwuYyAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGluaXQuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9MaW5pdF9sb2NhbC5jICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTGlzX3NpZ25hbF9mcmFtZS5jICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9McmVncy5jICAgICAgICAgICAgICAgICAgfCAgICA1IAorIHNyYy9hYXJjaDY0L0xyZXN1bWUuYyAgICAgICAgICAgICAgICB8ICAgIDUgCisgc3JjL2FhcmNoNjQvTHN0ZXAuYyAgICAgICAgICAgICAgICAgIHwgICAgNSAKKyBzcmMvYWFyY2g2NC9nZW4tb2Zmc2V0cy5jICAgICAgICAgICAgfCAgIDY4ICsrKysrKysrCisgc3JjL2FhcmNoNjQvaW5pdC5oICAgICAgICAgICAgICAgICAgIHwgIDEyNyArKysrKysrKysrKysrKysKKyBzcmMvYWFyY2g2NC9pc19mcHJlZy5jICAgICAgICAgICAgICAgfCAgIDMyICsrKworIHNyYy9hYXJjaDY0L29mZnNldHMuaCAgICAgICAgICAgICAgICB8ICAgNDkgKysrKysKKyBzcmMvYWFyY2g2NC9yZWduYW1lLmMgICAgICAgICAgICAgICAgfCAgMTA2ICsrKysrKysrKysrKworIHNyYy9hYXJjaDY0L3NpZ2xvbmdqbXAuUyAgICAgICAgICAgICB8ICAgMTIgKworIHNyYy9hYXJjaDY0L3Vud2luZF9pLmggICAgICAgICAgICAgICB8ICAgNDMgKysrKysKKyBzcmMvY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2xpbnV4LmMgfCAgICA1IAorIHNyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMgICAgICAgICB8ICAgMzYgKysrKworIDQzIGZpbGVzIGNoYW5nZWQsIDIxODQgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saWJ1bndpbmQtYWFyY2g2NC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdGRlcC1hYXJjaDY0L2ptcGJ1Zi5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdGRlcC1hYXJjaDY0L2xpYnVud2luZF9pLmgKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2NyZWF0ZV9hZGRyX3NwYWNlLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dldF9wcm9jX2luZm8uYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HZ2V0X3NhdmVfbG9jLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2dsb2JhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0dpbml0LmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR2luaXRfbG9jYWwuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaW5pdF9yZW1vdGUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3JlZ3MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9HcmVzdW1lLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvR3N0ZXAuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2V0X3Byb2NfaW5mby5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MZ2xvYmFsLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvTGluaXQuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9MaW5pdF9sb2NhbC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpbml0X3JlbW90ZS5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xpc19zaWduYWxfZnJhbWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9McmVncy5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L0xyZXN1bWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9Mc3RlcC5jCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2dlbi1vZmZzZXRzLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvaW5pdC5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L2lzX2ZwcmVnLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvb2Zmc2V0cy5oCisgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hYXJjaDY0L3JlZ25hbWUuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYWFyY2g2NC9zaWdsb25nam1wLlMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FhcmNoNjQvdW53aW5kX2kuaAorCistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC0yLDYgKzIsOSBAQCBpbmNsdWRlX0hFQURFUlMgPSBpbmNsdWRlL2xpYnVud2luZC1keW5hCisgICAgIGluY2x1ZGUvbGlidW53aW5kLXB0cmFjZS5oIFwKKyAgICAgaW5jbHVkZS9saWJ1bndpbmQtY29yZWR1bXAuaAorIAorK2lmIEFSQ0hfQUFSQ0g2NAorK2luY2x1ZGVfSEVBREVSUyArPSBpbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmgKKytlbmRpZgorIGlmIEFSQ0hfQVJNCisgaW5jbHVkZV9IRUFERVJTICs9IGluY2x1ZGUvbGlidW53aW5kLWFybS5oCisgZW5kaWYKK0BAIC00MSw2ICs0NCw5IEBAIFNVQkRJUlMgPSBzcmMgdGVzdHMgZG9jCisgbm9pbnN0X0hFQURFUlMgPSBpbmNsdWRlL2R3YXJmLmggaW5jbHVkZS9kd2FyZl9pLmggaW5jbHVkZS9kd2FyZi1laC5oCVwKKyAJaW5jbHVkZS9jb21waWxlci5oIGluY2x1ZGUvbGlidW53aW5kX2kuaCBpbmNsdWRlL21lbXBvb2wuaAlcCisgCWluY2x1ZGUvcmVtb3RlLmgJCQkJCQlcCisrCWluY2x1ZGUvdGRlcC1hYXJjaDY0L2R3YXJmLWNvbmZpZy5oCQkJCVwKKysJaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmgJCQkJCVwKKysJaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaAkJCQlcCisgCWluY2x1ZGUvdGRlcC1hcm0vZHdhcmYtY29uZmlnLmgJaW5jbHVkZS90ZGVwLWFybS9leF90YWJsZXMuaAlcCisgCWluY2x1ZGUvdGRlcC1hcm0vam1wYnVmLmggaW5jbHVkZS90ZGVwLWFybS9saWJ1bndpbmRfaS5oCVwKKyAJaW5jbHVkZS90ZGVwLWlhNjQvam1wYnVmLmggaW5jbHVkZS90ZGVwLWlhNjQvcnNlLmggCQlcCistLS0gYS9SRUFETUUKKysrKyBiL1JFQURNRQorQEAgLTksNiArOSw3IEBAIHNldmVyYWwgYXJjaGl0ZWN0dXJlL29wZXJhdGluZy1zeXN0ZW0gY28KKyAgTGludXgvSUEtNjQ6CUZ1bGx5IHRlc3RlZCBhbmQgc3VwcG9ydGVkLgorICBMaW51eC9QQVJJU0M6CVdvcmtzIHdlbGwsIGJ1dCBDIGxpYnJhcnkgbWlzc2luZyB1bndpbmQtaW5mby4KKyAgSFAtVVgvSUEtNjQ6CU1vc3RseSB3b3JrcyBidXQga25vd24gdG8gaGF2ZSBzb21lIHNlcmlvdXMgbGltaXRhdGlvbnMuCisrIExpbnV4L0FBcmNoNjQ6CU5ld2x5IGFkZGVkLgorICBMaW51eC9QUEM2NDoJTmV3bHkgYWRkZWQuCisgIExpbnV4L1N1cGVySDoJTmV3bHkgYWRkZWQuCisgIEZyZWVCU0QvaTM4NjoJTmV3bHkgYWRkZWQuCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTEwNCw3ICsxMDQsNyBAQCBTRVRfQVJDSChbJHRhcmdldF9jcHVdLFt0YXJnZXRfYXJjaF0pCisgCisgQUNfQVJHX0VOQUJMRShjb3JlZHVtcCwKKyAJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWNvcmVkdW1wXSxbYnVpbGRpbmcgbGlidW53aW5kLWNvcmVkdW1wIGxpYnJhcnldKSwsCistICAgICAgICBbQVNfQ0FTRShbJGhvc3RfYXJjaF0sIFthcm0qfG1pcHMqfHNoKnx4ODYqXSwgW2VuYWJsZV9jb3JlZHVtcD15ZXNdLCBbZW5hYmxlX2NvcmVkdW1wPW5vXSldCisrICAgICAgICBbQVNfQ0FTRShbJGhvc3RfYXJjaF0sIFthYXJjaDY0Knxhcm0qfG1pcHMqfHNoKnx4ODYqXSwgW2VuYWJsZV9jb3JlZHVtcD15ZXNdLCBbZW5hYmxlX2NvcmVkdW1wPW5vXSldCisgKQorIAorIEFDX01TR19DSEVDS0lORyhbaWYgd2Ugc2hvdWxkIGJ1aWxkIGxpYnVud2luZC1jb3JlZHVtcF0pCitAQCAtMTIxLDYgKzEyMSw3IEBAIEFDX01TR19SRVNVTFQoWyR0YXJnZXRfb3NdKQorIAorIEFNX0NPTkRJVElPTkFMKEJVSUxEX0NPUkVEVU1QLCB0ZXN0IHgkZW5hYmxlX2NvcmVkdW1wID0geHllcykKKyBBTV9DT05ESVRJT05BTChSRU1PVEVfT05MWSwgdGVzdCB4JHRhcmdldF9hcmNoICE9IHgkaG9zdF9hcmNoKQorK0FNX0NPTkRJVElPTkFMKEFSQ0hfQUFSQ0g2NCwgdGVzdCB4JHRhcmdldF9hcmNoID0geGFhcmNoNjQpCisgQU1fQ09ORElUSU9OQUwoQVJDSF9BUk0sIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhhcm0pCisgQU1fQ09ORElUSU9OQUwoQVJDSF9JQTY0LCB0ZXN0IHgkdGFyZ2V0X2FyY2ggPSB4aWE2NCkKKyBBTV9DT05ESVRJT05BTChBUkNIX0hQUEEsIHRlc3QgeCR0YXJnZXRfYXJjaCA9IHhocHBhKQorQEAgLTEzNyw3ICsxMzgsNyBAQCBBTV9DT05ESVRJT05BTChPU19GUkVFQlNELCBleHByIHgkdGFyZ2V0CisgQUNfTVNHX0NIRUNLSU5HKFtmb3IgRUxGIGhlbHBlciB3aWR0aF0pCisgY2FzZSAiJHt0YXJnZXRfYXJjaH0iIGluCisgKGFybXxocHBhfHBwYzMyfHg4NnxzaCkgdXNlX2VsZjMyPXllczsgQUNfTVNHX1JFU1VMVChbMzJdKTs7CistKGlhNjR8cHBjNjR8eDg2XzY0KSAgICB1c2VfZWxmNjQ9eWVzOyBBQ19NU0dfUkVTVUxUKFs2NF0pOzsKKysoYWFyY2g2NHxpYTY0fHBwYzY0fHg4Nl82NCkgICAgdXNlX2VsZjY0PXllczsgQUNfTVNHX1JFU1VMVChbNjRdKTs7CisgKG1pcHMpICAgICAgICAgICAgICAgICB1c2VfZWxmeHg9eWVzOyBBQ19NU0dfUkVTVUxUKFt4eF0pOzsKKyAqKSAgICAgICAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbVW5rbm93biBFTEYgdGFyZ2V0OiAke3RhcmdldF9hcmNofV0pCisgZXNhYworQEAgLTE4Niw2ICsxODcsNyBAQCBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY3h4LWV4Y2VwdGlvbnNdCisgIyBDKysgZXhjZXB0aW9uIGhhbmRsaW5nIGRvZXNuJ3Qgd29yayB0b28gd2VsbCBvbiB4ODYKKyBjYXNlICR0YXJnZXRfYXJjaCBpbgorICAgeDg2KikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKysgIGFhcmNoNjQqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OworICAgYXJtKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPW5vOzsKKyAgIG1pcHMqKSBlbmFibGVfY3h4X2V4Y2VwdGlvbnM9bm87OworICAgKikgZW5hYmxlX2N4eF9leGNlcHRpb25zPXllczs7CistLS0gL2Rldi9udWxsCisrKysgYi9pbmNsdWRlL2xpYnVud2luZC1hYXJjaDY0LmgKK0BAIC0wLDAgKzEsMTg3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IEhld2xldHQtUGFja2FyZCBDbworKwlDb250cmlidXRlZCBieSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaWZuZGVmIExJQlVOV0lORF9ICisrI2RlZmluZSBMSUJVTldJTkRfSAorKworKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKGNfcGx1c3BsdXMpCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrI2luY2x1ZGUgPGludHR5cGVzLmg+CisrI2luY2x1ZGUgPHN0ZGRlZi5oPgorKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorKworKyNkZWZpbmUgVU5XX1RBUkdFVAlhYXJjaDY0CisrI2RlZmluZSBVTldfVEFSR0VUX0FBUkNINjQJMQorKworKyNkZWZpbmUgX1VfVERFUF9RUF9UUlVFCTAJLyogc2VlIGxpYnVud2luZC1keW5hbWljLmggICovCisrCisrLyogVGhpcyBuZWVkcyB0byBiZSBiaWcgZW5vdWdoIHRvIGFjY29tbW9kYXRlICJzdHJ1Y3QgY3Vyc29yIiwgd2hpbGUKKysgICBsZWF2aW5nIHNvbWUgc2xhY2sgZm9yIGZ1dHVyZSBleHBhbnNpb24uICBDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwKKysgICByZXF1aXJlIHJlY29tcGlsaW5nIGFsbCB1c2VycyBvZiB0aGlzIGxpYnJhcnkuICBTdGFjayBhbGxvY2F0aW9uIGlzCisrICAgcmVsYXRpdmVseSBjaGVhcCBhbmQgdW53aW5kLXN0YXRlIGNvcHlpbmcgaXMgcmVsYXRpdmVseSByYXJlLCBzbyB3ZQorKyAgIHdhbnQgdG8gZXJyIG9uIG1ha2luZyBpdCByYXRoZXIgdG9vIGJpZyB0aGFuIHRvbyBzbWFsbC4gICovCisrCisrI2RlZmluZSBVTldfVERFUF9DVVJTT1JfTEVOCTQwOTYKKysKKyt0eXBlZGVmIHVpbnQ2NF90IHVud193b3JkX3Q7CisrdHlwZWRlZiBpbnQ2NF90IHVud19zd29yZF90OworKworK3R5cGVkZWYgbG9uZyBkb3VibGUgdW53X3RkZXBfZnByZWdfdDsKKysKKyt0eXBlZGVmIHN0cnVjdAorKyAgeworKyAgICAvKiBubyBhYXJjaDY0LXNwZWNpZmljIGF1eGlsaWFyeSBwcm9jLWluZm8gKi8KKysgIH0KKyt1bndfdGRlcF9wcm9jX2luZm9fdDsKKysKKyt0eXBlZGVmIGVudW0KKysgIHsKKysgICAgLyogNjQtYml0IGdlbmVyYWwgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDAsCisrICAgIFVOV19BQVJDSDY0X1gxLAorKyAgICBVTldfQUFSQ0g2NF9YMiwKKysgICAgVU5XX0FBUkNINjRfWDMsCisrICAgIFVOV19BQVJDSDY0X1g0LAorKyAgICBVTldfQUFSQ0g2NF9YNSwKKysgICAgVU5XX0FBUkNINjRfWDYsCisrICAgIFVOV19BQVJDSDY0X1g3LAorKyAgICBVTldfQUFSQ0g2NF9YOCwKKysKKysgICAgLyogVGVtcG9yYXJ5IHJlZ2lzdGVycy4gICovCisrICAgIFVOV19BQVJDSDY0X1g5LAorKyAgICBVTldfQUFSQ0g2NF9YMTAsCisrICAgIFVOV19BQVJDSDY0X1gxMSwKKysgICAgVU5XX0FBUkNINjRfWDEyLAorKyAgICBVTldfQUFSQ0g2NF9YMTMsCisrICAgIFVOV19BQVJDSDY0X1gxNCwKKysgICAgVU5XX0FBUkNINjRfWDE1LAorKworKyAgICAvKiBJbnRyYS1wcm9jZWR1cmUtY2FsbCB0ZW1wb3JhcnkgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDE2LAorKyAgICBVTldfQUFSQ0g2NF9YMTcsCisrCisrICAgIC8qIENhbGxlZS1zYXZlZCByZWdpc3RlcnMuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMTgsCisrICAgIFVOV19BQVJDSDY0X1gxOSwKKysgICAgVU5XX0FBUkNINjRfWDIwLAorKyAgICBVTldfQUFSQ0g2NF9YMjEsCisrICAgIFVOV19BQVJDSDY0X1gyMiwKKysgICAgVU5XX0FBUkNINjRfWDIzLAorKyAgICBVTldfQUFSQ0g2NF9YMjQsCisrICAgIFVOV19BQVJDSDY0X1gyNSwKKysgICAgVU5XX0FBUkNINjRfWDI2LAorKyAgICBVTldfQUFSQ0g2NF9YMjcsCisrICAgIFVOV19BQVJDSDY0X1gyOCwKKysKKysgICAgLyogNjQtYml0IGZyYW1lIHBvaW50ZXIuICAqLworKyAgICBVTldfQUFSQ0g2NF9YMjksCisrCisrICAgIC8qIDY0LWJpdCBsaW5rIHJlZ2lzdGVyLiAgKi8KKysgICAgVU5XX0FBUkNINjRfWDMwLAorKworKyAgICAvKiA2NC1iaXQgc3RhY2sgcG9pbnRlci4gICovCisrICAgIFVOV19BQVJDSDY0X1NQID0gIDMxLAorKyAgICBVTldfQUFSQ0g2NF9QQywKKysgICAgVU5XX0FBUkNINjRfUFNUQVRFLAorKworKyAgICAvKiAxMjgtYml0IEZQL0FkdmFuY2VkIFNJTUQgcmVnaXN0ZXJzLiAgKi8KKysgICAgVU5XX0FBUkNINjRfVjAgPSA2NCwKKysgICAgVU5XX0FBUkNINjRfVjEsCisrICAgIFVOV19BQVJDSDY0X1YyLAorKyAgICBVTldfQUFSQ0g2NF9WMywKKysgICAgVU5XX0FBUkNINjRfVjQsCisrICAgIFVOV19BQVJDSDY0X1Y1LAorKyAgICBVTldfQUFSQ0g2NF9WNiwKKysgICAgVU5XX0FBUkNINjRfVjcsCisrICAgIFVOV19BQVJDSDY0X1Y4LAorKyAgICBVTldfQUFSQ0g2NF9WOSwKKysgICAgVU5XX0FBUkNINjRfVjEwLAorKyAgICBVTldfQUFSQ0g2NF9WMTEsCisrICAgIFVOV19BQVJDSDY0X1YxMiwKKysgICAgVU5XX0FBUkNINjRfVjEzLAorKyAgICBVTldfQUFSQ0g2NF9WMTQsCisrICAgIFVOV19BQVJDSDY0X1YxNSwKKysgICAgVU5XX0FBUkNINjRfVjE2LAorKyAgICBVTldfQUFSQ0g2NF9WMTcsCisrICAgIFVOV19BQVJDSDY0X1YxOCwKKysgICAgVU5XX0FBUkNINjRfVjE5LAorKyAgICBVTldfQUFSQ0g2NF9WMjAsCisrICAgIFVOV19BQVJDSDY0X1YyMSwKKysgICAgVU5XX0FBUkNINjRfVjIyLAorKyAgICBVTldfQUFSQ0g2NF9WMjMsCisrICAgIFVOV19BQVJDSDY0X1YyNCwKKysgICAgVU5XX0FBUkNINjRfVjI1LAorKyAgICBVTldfQUFSQ0g2NF9WMjYsCisrICAgIFVOV19BQVJDSDY0X1YyNywKKysgICAgVU5XX0FBUkNINjRfVjI4LAorKyAgICBVTldfQUFSQ0g2NF9WMjksCisrICAgIFVOV19BQVJDSDY0X1YzMCwKKysgICAgVU5XX0FBUkNINjRfVjMxLAorKworKyAgICBVTldfQUFSQ0g2NF9GUFNSLAorKyAgICBVTldfQUFSQ0g2NF9GUENSLAorKworKyAgICAvKiBGb3IgQUFyY2g2NCwgdGhlIENGQSBpcyB0aGUgdmFsdWUgb2YgU1AgKHgzMSkgYXQgdGhlIGNhbGwgc2l0ZSBvZiB0aGUKKysgICAgICAgcHJldmlvdXMgZnJhbWUuICAqLworKyAgICBVTldfQUFSQ0g2NF9DRkEgPSBVTldfQUFSQ0g2NF9TUCwKKysKKysgICAgVU5XX1RERVBfTEFTVF9SRUcgPSBVTldfQUFSQ0g2NF9GUENSLAorKworKyAgICBVTldfVERFUF9JUCA9IFVOV19BQVJDSDY0X1gzMCwKKysgICAgVU5XX1RERVBfU1AgPSBVTldfQUFSQ0g2NF9TUCwKKysgICAgVU5XX1RERVBfRUggPSBVTldfQUFSQ0g2NF9YMCwKKysKKysgIH0KKythYXJjaDY0X3JlZ251bV90OworKworKy8qIFVzZSBSMCB0aHJvdWdoIFIzIHRvIHBhc3MgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uLiAgKi8KKysjZGVmaW5lIFVOV19UREVQX05VTV9FSF9SRUdTCTQKKysKKyt0eXBlZGVmIHN0cnVjdCB1bndfdGRlcF9zYXZlX2xvYworKyAgeworKyAgICAvKiBBZGRpdGlvbmFsIHRhcmdldC1kZXBlbmRlbnQgaW5mbyBvbiBhIHNhdmUgbG9jYXRpb24uICAqLworKyAgfQorK3Vud190ZGVwX3NhdmVfbG9jX3Q7CisrCisrCisrLyogT24gQUFyY2g2NCwgd2UgY2FuIGRpcmVjdGx5IHVzZSB1Y29udGV4dF90IGFzIHRoZSB1bndpbmQgY29udGV4dC4gICovCisrdHlwZWRlZiB1Y29udGV4dF90IHVud190ZGVwX2NvbnRleHRfdDsKKysKKysjaW5jbHVkZSAibGlidW53aW5kLWNvbW1vbi5oIgorKyNpbmNsdWRlICJsaWJ1bndpbmQtZHluYW1pYy5oIgorKworKyNkZWZpbmUgdW53X3RkZXBfZ2V0Y29udGV4dCh1YykgICAgICAgICAoZ2V0Y29udGV4dCAodWMpLCAwKQorKyNkZWZpbmUgdW53X3RkZXBfaXNfZnByZWcJCVVOV19BUkNIX09CSihpc19mcHJlZykKKysKKytleHRlcm4gaW50IHVud190ZGVwX2lzX2ZwcmVnIChpbnQpOworKworKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSB8fCBkZWZpbmVkKGNfcGx1c3BsdXMpCisrfQorKyNlbmRpZgorKworKyNlbmRpZiAvKiBMSUJVTldJTkRfSCAqLworLS0tIGEvaW5jbHVkZS9saWJ1bndpbmQuaC5pbgorKysrIGIvaW5jbHVkZS9saWJ1bndpbmQuaC5pbgorQEAgLTMsNyArMyw5IEBACisgCisgI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKyAKKy0jaWYgZGVmaW5lZCBfX2FybV9fCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjaW5jbHVkZSAibGlidW53aW5kLWFhcmNoNjQuaCIKKysjZWxpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgImxpYnVud2luZC1hcm0uaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCisgIyBpbmNsdWRlICJsaWJ1bndpbmQtaHBwYS5oIgorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS90ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgKK0BAIC0wLDAgKzEsNTIgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgZHdhcmZfY29uZmlnX2gKKysjZGVmaW5lIGR3YXJmX2NvbmZpZ19oCisrCisrLyogVGhpcyBtYXRjaGVzIHRoZSB2YWx1ZSB1ZGVzIGJ5IEdDQyAoc2VlCisrICAgZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuaDpEV0FSRl9GUkFNRV9SRUdJU1RFUlMuICAqLworKyNkZWZpbmUgRFdBUkZfTlVNX1BSRVNFUlZFRF9SRUdTCTk3CisrCisrLyogUmV0dXJuIFRSVUUgaWYgdGhlIEFERFJfU1BBQ0UgdXNlcyBiaWctZW5kaWFuIGJ5dGUtb3JkZXIuICAqLworKyNkZWZpbmUgZHdhcmZfaXNfYmlnX2VuZGlhbihhZGRyX3NwYWNlKQkwCisrCisrI2RlZmluZSBkd2FyZl90b191bndfcmVnbnVtKHJlZykgKCgocmVnKSA8PSBVTldfQUFSQ0g2NF9WMzEpID8gKHJlZykgOiAwKQorKworKy8qIENvbnZlcnQgYSBwb2ludGVyIHRvIGEgZHdhcmZfY3Vyc29yIHN0cnVjdHVyZSB0byBhIHBvaW50ZXIgdG8KKysgICB1bndfY3Vyc29yX3QuICAqLworKyNkZWZpbmUgZHdhcmZfdG9fY3Vyc29yKGMpCSgodW53X2N1cnNvcl90ICopIChjKSkKKysKKyt0eXBlZGVmIHN0cnVjdCBkd2FyZl9sb2MKKysgIHsKKysgICAgdW53X3dvcmRfdCB2YWw7CisrI2lmbmRlZiBVTldfTE9DQUxfT05MWQorKyAgICB1bndfd29yZF90IHR5cGU7CQkvKiBzZWUgRFdBUkZfTE9DX1RZUEVfKiBtYWNyb3MuICAqLworKyNlbmRpZgorKyAgfQorK2R3YXJmX2xvY190OworKworKyNlbmRpZiAvKiBkd2FyZl9jb25maWdfaCAqLworLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS90ZGVwLWFhcmNoNjQvam1wYnVmLmgKK0BAIC0wLDAgKzEsMzMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrLyogVXNlIGdsaWJjJ3MganVtcC1idWZmZXIgaW5kaWNlczsgTlBUTCBwZWVrcyBhdCBTUDogKi8KKysKKysvKiBGSVhNRSBmb3IgQUFyY2g2NCAgKi8KKysKKysjZGVmaW5lIEpCX1NQCQkxMworKyNkZWZpbmUgSkJfUlAJCTE0CisrI2RlZmluZSBKQl9NQVNLX1NBVkVECTE1CisrI2RlZmluZSBKQl9NQVNLCQkxNgorLS0tIC9kZXYvbnVsbAorKysrIGIvaW5jbHVkZS90ZGVwLWFhcmNoNjQvbGlidW53aW5kX2kuaAorQEAgLTAsMCArMSwyOTQgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDUgSGV3bGV0dC1QYWNrYXJkIENvCisrCUNvbnRyaWJ1dGVkIGJ5IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpZm5kZWYgQUFSQ0g2NF9MSUJVTldJTkRfSV9ICisrI2RlZmluZSBBQVJDSDY0X0xJQlVOV0lORF9JX0gKKysKKysvKiBUYXJnZXQtZGVwZW5kZW50IGRlZmluaXRpb25zIHRoYXQgYXJlIGludGVybmFsIHRvIGxpYnVud2luZCBidXQgbmVlZAorKyAgIHRvIGJlIHNoYXJlZCB3aXRoIHRhcmdldC1pbmRlcGVuZGVudCBjb2RlLiAgKi8KKysKKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKworKyNpbmNsdWRlICJlbGY2NC5oIgorKyNpbmNsdWRlICJtZW1wb29sLmgiCisrI2luY2x1ZGUgImR3YXJmLmgiCisrCisrdHlwZWRlZiBzdHJ1Y3QKKysgIHsKKysgICAgLyogbm8gYWFyY2g2NC1zcGVjaWZpYyBmYXN0IHRyYWNlICovCisrICB9CisrdW53X3RkZXBfZnJhbWVfdDsKKysKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysKKyt0eXBlZGVmIHVud193b3JkX3QgYWFyY2g2NF9sb2NfdDsKKysKKysjZWxzZSAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysKKyt0eXBlZGVmIHN0cnVjdCBhYXJjaDY0X2xvYworKyAgeworKyAgICB1bndfd29yZF90IHcwLCB3MTsKKysgIH0KKythYXJjaDY0X2xvY190OworKworKyNlbmRpZiAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysKKytzdHJ1Y3QgdW53X2FkZHJfc3BhY2UKKysgIHsKKysgICAgc3RydWN0IHVud19hY2Nlc3NvcnMgYWNjOworKyAgICBpbnQgYmlnX2VuZGlhbjsKKysgICAgdW53X2NhY2hpbmdfcG9saWN5X3QgY2FjaGluZ19wb2xpY3k7CisrI2lmZGVmIEhBVkVfQVRPTUlDX09QU19ICisrICAgIEFPX3QgY2FjaGVfZ2VuZXJhdGlvbjsKKysjZWxzZQorKyAgICB1aW50MzJfdCBjYWNoZV9nZW5lcmF0aW9uOworKyNlbmRpZgorKyAgICB1bndfd29yZF90IGR5bl9nZW5lcmF0aW9uOyAgICAgICAgICAvKiBzZWUgZHluLWNvbW1vbi5oICovCisrICAgIHVud193b3JkX3QgZHluX2luZm9fbGlzdF9hZGRyOwkvKiAoY2FjaGVkKSBkeW5faW5mb19saXN0X2FkZHIgKi8KKysgICAgc3RydWN0IGR3YXJmX3JzX2NhY2hlIGdsb2JhbF9jYWNoZTsKKysgICAgc3RydWN0IHVud19kZWJ1Z19mcmFtZV9saXN0ICpkZWJ1Z19mcmFtZXM7CisrICAgfTsKKysKKytzdHJ1Y3QgY3Vyc29yCisrICB7CisrICAgIHN0cnVjdCBkd2FyZl9jdXJzb3IgZHdhcmY7ICAgICAgICAgIC8qIG11c3QgYmUgZmlyc3QgKi8KKysgICAgZW51bQorKyAgICAgIHsKKysgICAgICAgIEFBUkNINjRfU0NGX05PTkUsCisrICAgICAgICBBQVJDSDY0X1NDRl9MSU5VWF9SVF9TSUdGUkFNRSwKKysgICAgICB9CisrICAgIHNpZ2NvbnRleHRfZm9ybWF0OworKyAgICB1bndfd29yZF90IHNpZ2NvbnRleHRfYWRkcjsKKysgICAgdW53X3dvcmRfdCBzaWdjb250ZXh0X3NwOworKyAgICB1bndfd29yZF90IHNpZ2NvbnRleHRfcGM7CisrICB9OworKworKyNkZWZpbmUgRFdBUkZfR0VUX0xPQyhsKSAgICAgICAgKChsKS52YWwpCisrCisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrIyBkZWZpbmUgRFdBUkZfTlVMTF9MT0MgICAgICAgICBEV0FSRl9MT0MgKDAsIDApCisrIyBkZWZpbmUgRFdBUkZfSVNfTlVMTF9MT0MobCkgICAoRFdBUkZfR0VUX0xPQyAobCkgPT0gMCkKKysjIGRlZmluZSBEV0FSRl9MT0MociwgdCkgICAgICAgICgoZHdhcmZfbG9jX3QpIHsgLnZhbCA9IChyKSB9KQorKyMgZGVmaW5lIERXQVJGX0lTX1JFR19MT0MobCkgICAgMAorKyMgZGVmaW5lIERXQVJGX1JFR19MT0MoYyxyKSAgICAgKERXQVJGX0xPQygodW53X3dvcmRfdCkgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkZXBfdWNfYWRkcigoYyktPmFzX2FyZywgKHIpKSwgMCkpCisrIyBkZWZpbmUgRFdBUkZfTUVNX0xPQyhjLG0pICAgICBEV0FSRl9MT0MgKChtKSwgMCkKKysjIGRlZmluZSBEV0FSRl9GUFJFR19MT0MoYyxyKSAgIChEV0FSRl9MT0MoKHVud193b3JkX3QpICAgICAgICAgICAgICAgICAgICAgIFwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZGVwX3VjX2FkZHIoKGMpLT5hc19hcmcsIChyKSksIDApKQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgKnZhbCkKKyt7CisrICBpZiAoIURXQVJGX0dFVF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtMTsKKysgICp2YWwgPSAqKHVud19mcHJlZ190ICopIERXQVJGX0dFVF9MT0MgKGxvYyk7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9wdXRmcCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfZnByZWdfdCB2YWwpCisreworKyAgaWYgKCFEV0FSRl9HRVRfTE9DIChsb2MpKQorKyAgICByZXR1cm4gLTE7CisrICAqKHVud19mcHJlZ190ICopIERXQVJGX0dFVF9MT0MgKGxvYykgPSB2YWw7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGlubGluZSBpbnQKKytkd2FyZl9nZXQgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X3dvcmRfdCAqdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKnZhbCA9ICoodW53X3dvcmRfdCAqKSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgcmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgdmFsKQorK3sKKysgIGlmICghRFdBUkZfR0VUX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC0xOworKyAgKih1bndfd29yZF90ICopIERXQVJGX0dFVF9MT0MgKGxvYykgPSB2YWw7CisrICByZXR1cm4gMDsKKyt9CisrCisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrIyBkZWZpbmUgRFdBUkZfTE9DX1RZUEVfRlAgICAgICAoMSA8PCAwKQorKyMgZGVmaW5lIERXQVJGX0xPQ19UWVBFX1JFRyAgICAgKDEgPDwgMSkKKysjIGRlZmluZSBEV0FSRl9OVUxMX0xPQyAgICAgICAgIERXQVJGX0xPQyAoMCwgMCkKKysjIGRlZmluZSBEV0FSRl9JU19OVUxMX0xPQyhsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAgICAgICAgICh7IGR3YXJmX2xvY190IF9sID0gKGwpOyBfbC52YWwgPT0gMCAmJiBfbC50eXBlID09IDA7IH0pCisrIyBkZWZpbmUgRFdBUkZfTE9DKHIsIHQpICAgICAgICAoKGR3YXJmX2xvY190KSB7IC52YWwgPSAociksIC50eXBlID0gKHQpIH0pCisrIyBkZWZpbmUgRFdBUkZfSVNfUkVHX0xPQyhsKSAgICAoKChsKS50eXBlICYgRFdBUkZfTE9DX1RZUEVfUkVHKSAhPSAwKQorKyMgZGVmaW5lIERXQVJGX0lTX0ZQX0xPQyhsKSAgICAgKCgobCkudHlwZSAmIERXQVJGX0xPQ19UWVBFX0ZQKSAhPSAwKQorKyMgZGVmaW5lIERXQVJGX1JFR19MT0MoYyxyKSAgICAgRFdBUkZfTE9DKChyKSwgRFdBUkZfTE9DX1RZUEVfUkVHKQorKyMgZGVmaW5lIERXQVJGX01FTV9MT0MoYyxtKSAgICAgRFdBUkZfTE9DICgobSksIDApCisrIyBkZWZpbmUgRFdBUkZfRlBSRUdfTE9DKGMscikgICBEV0FSRl9MT0MoKHIpLCAoRFdBUkZfTE9DX1RZUEVfUkVHICAgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRFdBUkZfTE9DX1RZUEVfRlApKQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgKnZhbCkKKyt7CisrICBjaGFyICp2YWxwID0gKGNoYXIgKikgJnZhbDsKKysgIHVud193b3JkX3QgYWRkcjsKKysgIGludCByZXQ7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICBpZiAoRFdBUkZfSVNfUkVHX0xPQyAobG9jKSkKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfZnByZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsIDAsIGMtPmFzX2FyZyk7CisrCisrICBhZGRyID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIGlmICgocmV0ID0gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDAsICh1bndfd29yZF90ICopIHZhbHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgYy0+YXNfYXJnKSkgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyA0LCAodW53X3dvcmRfdCAqKSB2YWxwICsgMSwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmFzX2FyZyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfcHV0ZnAgKHN0cnVjdCBkd2FyZl9jdXJzb3IgKmMsIGR3YXJmX2xvY190IGxvYywgdW53X2ZwcmVnX3QgdmFsKQorK3sKKysgIGNoYXIgKnZhbHAgPSAoY2hhciAqKSAmdmFsOworKyAgdW53X3dvcmRfdCBhZGRyOworKyAgaW50IHJldDsKKysKKysgIGlmIChEV0FSRl9JU19OVUxMX0xPQyAobG9jKSkKKysgICAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19mcHJlZykgKGMtPmFzLCBEV0FSRl9HRVRfTE9DIChsb2MpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWwsIDEsIGMtPmFzX2FyZyk7CisrCisrICBhZGRyID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgIGlmICgocmV0ID0gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgYWRkciArIDAsICh1bndfd29yZF90ICopIHZhbHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKSkgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIGFkZHIgKyA0LCAodW53X3dvcmRfdCAqKSB2YWxwICsgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrfQorKworK3N0YXRpYyBpbmxpbmUgaW50CisrZHdhcmZfZ2V0IChzdHJ1Y3QgZHdhcmZfY3Vyc29yICpjLCBkd2FyZl9sb2NfdCBsb2MsIHVud193b3JkX3QgKnZhbCkKKyt7CisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICAvKiBJZiBhIGNvZGUtZ2VuZXJhdG9yIHdlcmUgdG8gc2F2ZSBhIHZhbHVlIG9mIHR5cGUgdW53X3dvcmRfdCBpbiBhCisrICAgICBmbG9hdGluZy1wb2ludCByZWdpc3Rlciwgd2Ugd291bGQgaGF2ZSB0byBzdXBwb3J0IHRoaXMgY2FzZS4gIEkKKysgICAgIHN1cHBvc2UgaXQgY291bGQgaGFwcGVuIHdpdGggTU1YIHJlZ2lzdGVycywgYnV0IGRvZXMgaXQgcmVhbGx5CisrICAgICBoYXBwZW4/ICAqLworKyAgYXNzZXJ0ICghRFdBUkZfSVNfRlBfTE9DIChsb2MpKTsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19yZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjLT5hc19hcmcpOworKyAgZWxzZQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19tZW0pIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgdmFsLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjLT5hc19hcmcpOworK30KKysKKytzdGF0aWMgaW5saW5lIGludAorK2R3YXJmX3B1dCAoc3RydWN0IGR3YXJmX2N1cnNvciAqYywgZHdhcmZfbG9jX3QgbG9jLCB1bndfd29yZF90IHZhbCkKKyt7CisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrCisrICAvKiBJZiBhIGNvZGUtZ2VuZXJhdG9yIHdlcmUgdG8gc2F2ZSBhIHZhbHVlIG9mIHR5cGUgdW53X3dvcmRfdCBpbiBhCisrICAgICBmbG9hdGluZy1wb2ludCByZWdpc3Rlciwgd2Ugd291bGQgaGF2ZSB0byBzdXBwb3J0IHRoaXMgY2FzZS4gIEkKKysgICAgIHN1cHBvc2UgaXQgY291bGQgaGFwcGVuIHdpdGggTU1YIHJlZ2lzdGVycywgYnV0IGRvZXMgaXQgcmVhbGx5CisrICAgICBoYXBwZW4/ICAqLworKyAgYXNzZXJ0ICghRFdBUkZfSVNfRlBfTE9DIChsb2MpKTsKKysKKysgIGlmIChEV0FSRl9JU19SRUdfTE9DIChsb2MpKQorKyAgICByZXR1cm4gKCpjLT5hcy0+YWNjLmFjY2Vzc19yZWcpIChjLT5hcywgRFdBUkZfR0VUX0xPQyAobG9jKSwgJnZhbCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYy0+YXNfYXJnKTsKKysgIGVsc2UKKysgICAgcmV0dXJuICgqYy0+YXMtPmFjYy5hY2Nlc3NfbWVtKSAoYy0+YXMsIERXQVJGX0dFVF9MT0MgKGxvYyksICZ2YWwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGMtPmFzX2FyZyk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX0xPQ0FMX09OTFkgKi8KKysKKysKKysKKysjZGVmaW5lIHRkZXBfZ2V0Y29udGV4dF90cmFjZSAgICAgICAgICAgdW53X2dldGNvbnRleHQKKysjZGVmaW5lIHRkZXBfaW5pdF9kb25lCQkJVU5XX09CSihpbml0X2RvbmUpCisrI2RlZmluZSB0ZGVwX2luaXQJCQlVTldfT0JKKGluaXQpCisrLyogUGxhdGZvcm1zIHRoYXQgc3VwcG9ydCBVTldfSU5GT19GT1JNQVRfVEFCTEUgbmVlZCB0byBkZWZpbmUKKysgICB0ZGVwX3NlYXJjaF91bndpbmRfdGFibGUuICAqLworKyNkZWZpbmUgdGRlcF9zZWFyY2hfdW53aW5kX3RhYmxlCWR3YXJmX3NlYXJjaF91bndpbmRfdGFibGUKKysjZGVmaW5lIHRkZXBfZmluZF91bndpbmRfdGFibGUJICAgICAgICBkd2FyZl9maW5kX3Vud2luZF90YWJsZQorKyNkZWZpbmUgdGRlcF91Y19hZGRyCQkJVU5XX09CSih1Y19hZGRyKQorKyNkZWZpbmUgdGRlcF9nZXRfZWxmX2ltYWdlCQlVTldfQVJDSF9PQkooZ2V0X2VsZl9pbWFnZSkKKysjZGVmaW5lIHRkZXBfYWNjZXNzX3JlZwkJCVVOV19PQkooYWNjZXNzX3JlZykKKysjZGVmaW5lIHRkZXBfYWNjZXNzX2ZwcmVnCQlVTldfT0JKKGFjY2Vzc19mcHJlZykKKysjZGVmaW5lIHRkZXBfZmV0Y2hfZnJhbWUoYyxpcCxuKQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF9jYWNoZV9mcmFtZShjLHJzKQkJZG8ge30gd2hpbGUoMCkKKysjZGVmaW5lIHRkZXBfcmV1c2VfZnJhbWUoYyxycykJCWRvIHt9IHdoaWxlKDApCisrI2RlZmluZSB0ZGVwX3N0YXNoX2ZyYW1lKGMscnMpCQlkbyB7fSB3aGlsZSgwKQorKyNkZWZpbmUgdGRlcF90cmFjZShjdXIsYWRkcixuKQkJKC1VTldfRU5PSU5GTykKKysKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysjIGRlZmluZSB0ZGVwX2ZpbmRfcHJvY19pbmZvKGMsaXAsbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKyAgICAgICAgZHdhcmZfZmluZF9wcm9jX2luZm8oKGMpLT5hcywgKGlwKSwgJihjKS0+cGksIChuKSwgICAgICBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGMpLT5hc19hcmcpCisrIyBkZWZpbmUgdGRlcF9wdXRfdW53aW5kX2luZm8oYXMscGksYXJnKSAgICAgICAgICAgICAgICBcCisrICAgICAgICBkd2FyZl9wdXRfdW53aW5kX2luZm8oKGFzKSwgKHBpKSwgKGFyZykpCisrI2Vsc2UKKysjIGRlZmluZSB0ZGVwX2ZpbmRfcHJvY19pbmZvKGMsaXAsbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrICAgICAgICAoKihjKS0+YXMtPmFjYy5maW5kX3Byb2NfaW5mbykoKGMpLT5hcywgKGlwKSwgJihjKS0+cGksIChuKSwgICAgXAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjKS0+YXNfYXJnKQorKyMgZGVmaW5lIHRkZXBfcHV0X3Vud2luZF9pbmZvKGFzLHBpLGFyZykgICAgICAgICAgICAgICAgXAorKyAgICAgICAgKCooYXMpLT5hY2MucHV0X3Vud2luZF9pbmZvKSgoYXMpLCAocGkpLCAoYXJnKSkKKysjZW5kaWYKKysKKysjZGVmaW5lIHRkZXBfZ2V0X2FzKGMpICAgICAgICAgICAgICAgICAgKChjKS0+ZHdhcmYuYXMpCisrI2RlZmluZSB0ZGVwX2dldF9hc19hcmcoYykgICAgICAgICAgICAgICgoYyktPmR3YXJmLmFzX2FyZykKKysjZGVmaW5lIHRkZXBfZ2V0X2lwKGMpICAgICAgICAgICAgICAgICAgKChjKS0+ZHdhcmYuaXApCisrI2RlZmluZSB0ZGVwX2JpZ19lbmRpYW4oYXMpICAgICAgICAgICAgICgoYXMpLT5iaWdfZW5kaWFuKQorKworK2V4dGVybiBpbnQgdGRlcF9pbml0X2RvbmU7CisrCisrZXh0ZXJuIHZvaWQgdGRlcF9pbml0ICh2b2lkKTsKKytleHRlcm4gaW50IHRkZXBfc2VhcmNoX3Vud2luZF90YWJsZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X3dvcmRfdCBpcCwKKysJCQkJICAgICB1bndfZHluX2luZm9fdCAqZGksIHVud19wcm9jX2luZm9fdCAqcGksCisrCQkJCSAgICAgaW50IG5lZWRfdW53aW5kX2luZm8sIHZvaWQgKmFyZyk7CisrZXh0ZXJuIHZvaWQgKnRkZXBfdWNfYWRkciAodW53X3RkZXBfY29udGV4dF90ICp1YywgaW50IHJlZyk7CisrZXh0ZXJuIGludCB0ZGVwX2dldF9lbGZfaW1hZ2UgKHN0cnVjdCBlbGZfaW1hZ2UgKmVpLCBwaWRfdCBwaWQsIHVud193b3JkX3QgaXAsCisrCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKnNlZ2Jhc2UsIHVuc2lnbmVkIGxvbmcgKm1hcG9mZiwKKysJCQkgICAgICAgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4pOworK2V4dGVybiBpbnQgdGRlcF9hY2Nlc3NfcmVnIChzdHJ1Y3QgY3Vyc29yICpjLCB1bndfcmVnbnVtX3QgcmVnLAorKwkJCSAgICB1bndfd29yZF90ICp2YWxwLCBpbnQgd3JpdGUpOworK2V4dGVybiBpbnQgdGRlcF9hY2Nlc3NfZnByZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsCisrCQkJICAgICAgdW53X2ZwcmVnX3QgKnZhbHAsIGludCB3cml0ZSk7CisrCisrI2VuZGlmIC8qIEFBUkNINjRfTElCVU5XSU5EX0lfSCAqLworLS0tIGEvaW5jbHVkZS90ZGVwL2R3YXJmLWNvbmZpZy5oCisrKysgYi9pbmNsdWRlL3RkZXAvZHdhcmYtY29uZmlnLmgKK0BAIC0xLDcgKzEsOSBAQAorIC8qIFByb3ZpZGUgYSByZWFsIGZpbGUgLSBub3QgYSBzeW1saW5rIC0gYXMgaXQgd291bGQgY2F1c2UgbXVsdGlhcmNoIGNvbmZsaWN0cworICAgIHdoZW4gbXVsdGlwbGUgZGlmZmVyZW50IGFyY2ggcmVsZWFzZXMgYXJlIGluc3RhbGxlZCBzaW11bHRhbmVvdXNseS4gICovCisgCistI2lmIGRlZmluZWQgX19hcm1fXworKyNpZiBkZWZpbmVkIF9fYWFyY2g2NF9fCisrIyBpbmNsdWRlICJ0ZGVwLWFhcmNoNjQvZHdhcmYtY29uZmlnLmgiCisrI2VsaWYgZGVmaW5lZCBfX2FybV9fCisgIyBpbmNsdWRlICJ0ZGVwLWFybS9kd2FyZi1jb25maWcuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCisgIyBpbmNsdWRlICJ0ZGVwLWhwcGEvZHdhcmYtY29uZmlnLmgiCistLS0gYS9pbmNsdWRlL3RkZXAvam1wYnVmLmgKKysrKyBiL2luY2x1ZGUvdGRlcC9qbXBidWYuaAorQEAgLTMsNiArMyw4IEBACisgCisgI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKyAKKysjaWYgZGVmaW5lZCBfX2FhcmNoNjRfXworKyMgaW5jbHVkZSAidGRlcC1hYXJjaDY0L2ptcGJ1Zi5oIgorICNpZiBkZWZpbmVkIF9fYXJtX18KKyAjIGluY2x1ZGUgInRkZXAtYXJtL2ptcGJ1Zi5oIgorICNlbGlmIGRlZmluZWQgX19ocHBhX18KKy0tLSBhL2luY2x1ZGUvdGRlcC9saWJ1bndpbmRfaS5oLmluCisrKysgYi9pbmNsdWRlL3RkZXAvbGlidW53aW5kX2kuaC5pbgorQEAgLTMsNyArMyw5IEBACisgCisgI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKyAKKy0jaWYgZGVmaW5lZCBfX2FybV9fCisrI2lmIGRlZmluZWQgX19hYXJjaDY0X18KKysjIGluY2x1ZGUgInRkZXAtYWFyY2g2NC9saWJ1bndpbmRfaS5oIgorKyNlbGlmIGRlZmluZWQgX19hcm1fXworICMgaW5jbHVkZSAidGRlcC1hcm0vbGlidW53aW5kX2kuaCIKKyAjZWxpZiBkZWZpbmVkIF9faHBwYV9fCisgIyBpbmNsdWRlICJ0ZGVwLWhwcGEvbGlidW53aW5kX2kuaCIKKy0tLSBhL3NyYy9NYWtlZmlsZS5hbQorKysrIGIvc3JjL01ha2VmaWxlLmFtCitAQCAtMTcwLDYgKzE3MCwyOCBAQCBsaWJ1bndpbmRfZWxmeHhfbGFfU09VUkNFUyA9IGVsZnh4LmMKKyBub2luc3RfTFRMSUJSQVJJRVMgKz0gJChMSUJVTldJTkRfRUxGKQorIGxpYnVud2luZF9sYV9MSUJBREQgKz0gJChMSUJVTldJTkRfRUxGKQorIAorKyMgVGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBnbyBpbnRvIGxpYnVud2luZCBhbmQgbGlidW53aW5kLWFhcmNoNjQ6Cisrbm9pbnN0X0hFQURFUlMgKz0gYWFyY2g2NC9pbml0LmggYWFyY2g2NC9vZmZzZXRzLmggYWFyY2g2NC91bndpbmRfaS5oCisrbGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NF9jb21tb24gPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJICAgIFwKKysJYWFyY2g2NC9pc19mcHJlZy5jIGFhcmNoNjQvcmVnbmFtZS5jCisrCisrIyBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGdvIGludG8gbGlidW53aW5kOgorK2xpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjQgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uKQkgICAgXAorKwkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2xvY2FsKQkJCQkJICAgIFwKKysJYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYyBhYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMgCQkgICAgXAorKwlhYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYyBhYXJjaDY0L0xnbG9iYWwuYyBhYXJjaDY0L0xpbml0LmMJICAgIFwKKysJYWFyY2g2NC9MaW5pdF9sb2NhbC5jIGFhcmNoNjQvTGluaXRfcmVtb3RlLmMgCQkJICAgIFwKKysJYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMgYWFyY2g2NC9McmVncy5jIGFhcmNoNjQvTHJlc3VtZS5jIAkgICAgXAorKwlhYXJjaDY0L0xzdGVwLmMKKysKKytsaWJ1bndpbmRfYWFyY2g2NF9sYV9TT1VSQ0VTX2FhcmNoNjQgPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FhcmNoNjRfY29tbW9uKSBcCisrCSQobGlidW53aW5kX2xhX1NPVVJDRVNfZ2VuZXJpYykJCQkJCSAgICAgIFwKKysJYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYyBhYXJjaDY0L0dnZXRfcHJvY19pbmZvLmMgCQkgICAgICBcCisrCWFhcmNoNjQvR2dldF9zYXZlX2xvYy5jIGFhcmNoNjQvR2dsb2JhbC5jIGFhcmNoNjQvR2luaXQuYyAJICAgICAgXAorKwlhYXJjaDY0L0dpbml0X2xvY2FsLmMgYWFyY2g2NC9HaW5pdF9yZW1vdGUuYwkJCSAgICAgIFwKKysJYWFyY2g2NC9HaXNfc2lnbmFsX2ZyYW1lLmMgYWFyY2g2NC9HcmVncy5jIGFhcmNoNjQvR3Jlc3VtZS5jCSAgICAgIFwKKysJYWFyY2g2NC9Hc3RlcC5jCisrCisgIyBUaGUgbGlzdCBvZiBmaWxlcyB0aGF0IGdvIGludG8gbGlidW53aW5kIGFuZCBsaWJ1bndpbmQtYXJtOgorIG5vaW5zdF9IRUFERVJTICs9IGFybS9pbml0LmggYXJtL29mZnNldHMuaCBhcm0vdW53aW5kX2kuaAorIGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybV9jb21tb24gPSAkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2NvbW1vbikJICAgIFwKK0BAIC00MTgsNiArNDQwLDE4IEBAIGlmIE9TX0ZSRUVCU0QKKyAgbGlidW53aW5kX2NvcmVkdW1wX2xhX1NPVVJDRVMgKz0gY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2ZyZWVic2QuYworIGVuZGlmCisgCisraWYgQVJDSF9BQVJDSDY0CisrIGxpYl9MVExJQlJBUklFUyArPSBsaWJ1bndpbmQtYWFyY2g2NC5sYQorKyBsaWJ1bndpbmRfbGFfU09VUkNFUyA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NCkKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFUyA9ICQobGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0KQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MREZMQUdTID0gJChDT01NT05fU09fTERGTEFHUykgLXZlcnNpb24taW5mbyAkKFNPVkVSU0lPTikKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREID0gbGlidW53aW5kLWR3YXJmLWdlbmVyaWMubGEKKysgbGlidW53aW5kX2FhcmNoNjRfbGFfTElCQUREICs9IGxpYnVud2luZC1lbGY2NC5sYQorK2lmICFSRU1PVEVfT05MWQorKyBsaWJ1bndpbmRfYWFyY2g2NF9sYV9MSUJBREQgKz0gbGlidW53aW5kLmxhIC1sYworK2VuZGlmCisrIGxpYnVud2luZF9zZXRqbXBfbGFfU09VUkNFUyArPSBhYXJjaDY0L3NpZ2xvbmdqbXAuUworK2Vsc2UKKyBpZiBBUkNIX0FSTQorICBsaWJfTFRMSUJSQVJJRVMgKz0gbGlidW53aW5kLWFybS5sYQorICBsaWJ1bndpbmRfbGFfU09VUkNFUyA9ICQobGlidW53aW5kX2xhX1NPVVJDRVNfYXJtKQorQEAgLTU0NSw2ICs1NzksNyBAQCBlbmRpZiAjIEFSQ0hfTUlQUworIGVuZGlmICMgQVJDSF9IUFBBCisgZW5kaWYgIyBBUkNIX0lBNjQKKyBlbmRpZiAjIEFSQ0hfQVJNCisrZW5kaWYgIyBBUkNIX0FBUkNINjQKKyAKKyAjIGxpYnVud2luZC1zZXRqbXAgZGVwZW5kcyBvbiBsaWJ1bndpbmQtJChhcmNoKS4gVGhlcmVmb3JlIG11c3QgYmUgYWRkZWQKKyAjIGF0IHRoZSBlbmQuCitAQCAtNTY3LDcgKzYwMiw4IEBAIEFNX0NQUEZMQUdTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkKKyBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQorIG5vaW5zdF9IRUFERVJTICs9IHVud2luZC91bndpbmQtaW50ZXJuYWwuaAorIAorLUVYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkJCQlcCisrRVhUUkFfRElTVCA9CSQobGlidW53aW5kX2xhX1NPVVJDRVNfYWFyY2g2NCkJCQlcCisrCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkJCQlcCisgCQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2hwcGEpCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19pYTY0KQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfbWlwcykJCQlcCitAQCAtNTc5LDYgKzYxNSw3IEBAIEVYVFJBX0RJU1QgPQkkKGxpYnVud2luZF9sYV9TT1VSQ0VTX2FybSkKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfY29tbW9uKQkJCVwKKyAJCSQobGlidW53aW5kX2xhX1NPVVJDRVNfbG9jYWwpCQkJXAorIAkJJChsaWJ1bndpbmRfbGFfU09VUkNFU19nZW5lcmljKQkJCVwKKysJCSQobGlidW53aW5kX2FhcmNoNjRfbGFfU09VUkNFU19hYXJjaDY0KQkJXAorIAkJJChsaWJ1bndpbmRfYXJtX2xhX1NPVVJDRVNfYXJtKQkJCVwKKyAJCSQobGlidW53aW5kX2hwcGFfbGFfU09VUkNFU19ocHBhKQkJXAorIAkJJChsaWJ1bndpbmRfaWE2NF9sYV9TT1VSQ0VTX2lhNjQpCQlcCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HY3JlYXRlX2FkZHJfc3BhY2UuYworQEAgLTAsMCArMSw2MCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCB1bndfYWRkcl9zcGFjZV90CisrdW53X2NyZWF0ZV9hZGRyX3NwYWNlICh1bndfYWNjZXNzb3JzX3QgKmEsIGludCBieXRlX29yZGVyKQorK3sKKysjaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysgIHJldHVybiBOVUxMOworKyNlbHNlCisrICB1bndfYWRkcl9zcGFjZV90IGFzOworKworKyAgLyogQUFyY2g2NCBzdXBwb3J0cyBsaXR0bGUtZW5kaWFuIGFuZCBiaWctZW5kaWFuLiAqLworKyAgaWYgKGJ5dGVfb3JkZXIgIT0gMCAmJiBieXRlX29yZGVyICE9IF9fTElUVExFX0VORElBTgorKyAgICAgICYmIGJ5dGVfb3JkZXIgIT0gX19CSUdfRU5ESUFOKQorKyAgICByZXR1cm4gTlVMTDsKKysKKysgIGFzID0gbWFsbG9jIChzaXplb2YgKCphcykpOworKyAgaWYgKCFhcykKKysgICAgcmV0dXJuIE5VTEw7CisrCisrICBtZW1zZXQgKGFzLCAwLCBzaXplb2YgKCphcykpOworKworKyAgYXMtPmFjYyA9ICphOworKworKyAgLyogRGVmYXVsdCB0byBsaXR0bGUtZW5kaWFuIGZvciBBQXJjaDY0LiAqLworKyAgaWYgKGJ5dGVfb3JkZXIgPT0gMCB8fCBieXRlX29yZGVyID09IF9fTElUVExFX0VORElBTikKKysgICAgYXMtPmJpZ19lbmRpYW4gPSAwOworKyAgZWxzZQorKyAgICBhcy0+YmlnX2VuZGlhbiA9IDE7CisrCisrICByZXR1cm4gYXM7CisrI2VuZGlmCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2dldF9wcm9jX2luZm8uYworQEAgLTAsMCArMSwzOSBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytQUk9URUNURUQgaW50CisrdW53X2dldF9wcm9jX2luZm8gKHVud19jdXJzb3JfdCAqY3Vyc29yLCB1bndfcHJvY19pbmZvX3QgKnBpKQorK3sKKysgIHN0cnVjdCBjdXJzb3IgKmMgPSAoc3RydWN0IGN1cnNvciAqKSBjdXJzb3I7CisrICBpbnQgcmV0OworKworKyAgcmV0ID0gZHdhcmZfbWFrZV9wcm9jX2luZm8gKCZjLT5kd2FyZik7CisrICBpZiAocmV0IDwgMCkKKysgICAgcmV0dXJuIHJldDsKKysKKysgICpwaSA9IGMtPmR3YXJmLnBpOworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2dldF9zYXZlX2xvYy5jCitAQCAtMCwwICsxLDEwMCBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19nZXRfc2F2ZV9sb2MgKHVud19jdXJzb3JfdCAqY3Vyc29yLCBpbnQgcmVnLCB1bndfc2F2ZV9sb2NfdCAqc2xvYykKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgZHdhcmZfbG9jX3QgbG9jOworKworKyAgc3dpdGNoIChyZWcpCisrICAgIHsKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDExOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjI6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIzOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjU6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjg6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9TUDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QQzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9QU1RBVEU6CisrICAgICAgbG9jID0gYy0+ZHdhcmYubG9jW3JlZ107CisrICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgbG9jID0gRFdBUkZfTlVMTF9MT0M7CS8qIGRlZmF1bHQgdG8gIm5vdCBzYXZlZCIgKi8KKysgICAgICBicmVhazsKKysgICAgfQorKworKyAgbWVtc2V0IChzbG9jLCAwLCBzaXplb2YgKCpzbG9jKSk7CisrCisrICBpZiAoRFdBUkZfSVNfTlVMTF9MT0MgKGxvYykpCisrICAgIHsKKysgICAgICBzbG9jLT50eXBlID0gVU5XX1NMVF9OT05FOworKyAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrI2lmICFkZWZpbmVkKFVOV19MT0NBTF9PTkxZKQorKyAgaWYgKERXQVJGX0lTX1JFR19MT0MgKGxvYykpCisrICAgIHsKKysgICAgICBzbG9jLT50eXBlID0gVU5XX1NMVF9SRUc7CisrICAgICAgc2xvYy0+dS5yZWdudW0gPSBEV0FSRl9HRVRfTE9DIChsb2MpOworKyAgICB9CisrICBlbHNlCisrI2VuZGlmCisrICAgIHsKKysgICAgICBzbG9jLT50eXBlID0gVU5XX1NMVF9NRU1PUlk7CisrICAgICAgc2xvYy0+dS5hZGRyID0gRFdBUkZfR0VUX0xPQyAobG9jKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2dsb2JhbC5jCitAQCAtMCwwICsxLDU3IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAiZHdhcmZfaS5oIgorKworK0hJRERFTiBkZWZpbmVfbG9jayAoYWFyY2g2NF9sb2NrKTsKKytISURERU4gaW50IHRkZXBfaW5pdF9kb25lOworKworK0hJRERFTiB2b2lkCisrdGRlcF9pbml0ICh2b2lkKQorK3sKKysgIGludHJtYXNrX3Qgc2F2ZWRfbWFzazsKKysKKysgIHNpZ2ZpbGxzZXQgKCZ1bndpX2Z1bGxfbWFzayk7CisrCisrICBsb2NrX2FjcXVpcmUgKCZhYXJjaDY0X2xvY2ssIHNhdmVkX21hc2spOworKyAgeworKyAgICBpZiAodGRlcF9pbml0X2RvbmUpCisrICAgICAgLyogYW5vdGhlciB0aHJlYWQgZWxzZSBiZWF0IHVzIHRvIGl0Li4uICovCisrICAgICAgZ290byBvdXQ7CisrCisrICAgIG1pX2luaXQgKCk7CisrCisrICAgIGR3YXJmX2luaXQgKCk7CisrCisrI2lmbmRlZiBVTldfUkVNT1RFX09OTFkKKysgICAgYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKCk7CisrI2VuZGlmCisrICAgIHRkZXBfaW5pdF9kb25lID0gMTsJLyogc2lnbmFsIHRoYXQgd2UncmUgaW5pdGlhbGl6ZWQuLi4gKi8KKysgIH0KKysgb3V0OgorKyAgbG9ja19yZWxlYXNlICgmYWFyY2g2NF9sb2NrLCBzYXZlZF9tYXNrKTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdC5jCitAQCAtMCwwICsxLDE4NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDEyIFRvbW1pIFJhbnRhbGEgPHR0LnJhbnRhbGFAZ21haWwuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKysjaWZkZWYgVU5XX1JFTU9URV9PTkxZCisrCisrLyogdW53X2xvY2FsX2FkZHJfc3BhY2UgaXMgYSBOVUxMIHBvaW50ZXIgaW4gdGhpcyBjYXNlLiAgKi8KKytQUk9URUNURUQgdW53X2FkZHJfc3BhY2VfdCB1bndfbG9jYWxfYWRkcl9zcGFjZTsKKysKKysjZWxzZSAvKiAhVU5XX1JFTU9URV9PTkxZICovCisrCisrc3RhdGljIHN0cnVjdCB1bndfYWRkcl9zcGFjZSBsb2NhbF9hZGRyX3NwYWNlOworKworK1BST1RFQ1RFRCB1bndfYWRkcl9zcGFjZV90IHVud19sb2NhbF9hZGRyX3NwYWNlID0gJmxvY2FsX2FkZHJfc3BhY2U7CisrCisrc3RhdGljIGlubGluZSB2b2lkICoKKyt1Y19hZGRyICh1Y29udGV4dF90ICp1YywgaW50IHJlZykKKyt7CisrICBpZiAocmVnID49IFVOV19BQVJDSDY0X1gwICYmIHJlZyA8PSBVTldfQUFSQ0g2NF9WMzEpCisrICAgIHJldHVybiAmdWMtPnVjX21jb250ZXh0LnJlZ3NbcmVnXTsKKysgIGVsc2UKKysgICAgcmV0dXJuIE5VTEw7CisrfQorKworKyMgaWZkZWYgVU5XX0xPQ0FMX09OTFkKKysKKytISURERU4gdm9pZCAqCisrdGRlcF91Y19hZGRyICh1Y29udGV4dF90ICp1YywgaW50IHJlZykKKyt7CisrICByZXR1cm4gdWNfYWRkciAodWMsIHJlZyk7CisrfQorKworKyMgZW5kaWYgLyogVU5XX0xPQ0FMX09OTFkgKi8KKysKKytISURERU4gdW53X2R5bl9pbmZvX2xpc3RfdCBfVV9keW5faW5mb19saXN0OworKworKy8qIFhYWCBmaXggbWU6IHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gbG9jYXRlIHRoZSBkeW4taW5mbyBsaXN0CisrICAgICAgIGJ5IGEgcmVtb3RlIHVud2luZGVyLiAgT24gaWE2NCwgdGhpcyBpcyBkb25lIHZpYSBhIHNwZWNpYWwKKysgICAgICAgdW53aW5kLXRhYmxlIGVudHJ5LiAgUGVyaGFwcyBzb21ldGhpbmcgc2ltaWxhciBjYW4gYmUgZG9uZSB3aXRoCisrICAgICAgIERXQVJGMiB1bndpbmQgaW5mby4gICovCisrCisrc3RhdGljIHZvaWQKKytwdXRfdW53aW5kX2luZm8gKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19wcm9jX2luZm9fdCAqcHJvY19pbmZvLCB2b2lkICphcmcpCisreworKyAgLyogaXQncyBhIG5vLW9wICovCisrfQorKworK3N0YXRpYyBpbnQKKytnZXRfZHluX2luZm9fbGlzdF9hZGRyICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90ICpkeW5faW5mb19saXN0X2FkZHIsCisrCQkJdm9pZCAqYXJnKQorK3sKKysgICpkeW5faW5mb19saXN0X2FkZHIgPSAodW53X3dvcmRfdCkgJl9VX2R5bl9pbmZvX2xpc3Q7CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK2FjY2Vzc19tZW0gKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud193b3JkX3QgYWRkciwgdW53X3dvcmRfdCAqdmFsLCBpbnQgd3JpdGUsCisrCSAgICB2b2lkICphcmcpCisreworKyAgaWYgKHdyaXRlKQorKyAgICB7CisrICAgICAgRGVidWcgKDE2LCAibWVtWyVseF0gPC0gJWx4XG4iLCBhZGRyLCAqdmFsKTsKKysgICAgICAqKHVud193b3JkX3QgKikgYWRkciA9ICp2YWw7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp2YWwgPSAqKHVud193b3JkX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTYsICJtZW1bJWx4XSAtPiAlbHhcbiIsIGFkZHIsICp2YWwpOworKyAgICB9CisrICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludAorK2FjY2Vzc19yZWcgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19yZWdudW1fdCByZWcsIHVud193b3JkX3QgKnZhbCwgaW50IHdyaXRlLAorKwkgICAgdm9pZCAqYXJnKQorK3sKKysgIHVud193b3JkX3QgKmFkZHI7CisrICB1Y29udGV4dF90ICp1YyA9IGFyZzsKKysKKysgIGlmICh1bndfaXNfZnByZWcgKHJlZykpCisrICAgIGdvdG8gYmFkcmVnOworKworKyAgaWYgKCEoYWRkciA9IHVjX2FkZHIgKHVjLCByZWcpKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAod3JpdGUpCisrICAgIHsKKysgICAgICAqKHVud193b3JkX3QgKikgYWRkciA9ICp2YWw7CisrICAgICAgRGVidWcgKDEyLCAiJXMgPC0gJWx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwgKnZhbCk7CisrICAgIH0KKysgIGVsc2UKKysgICAgeworKyAgICAgICp2YWwgPSAqKHVud193b3JkX3QgKikgYWRkcjsKKysgICAgICBEZWJ1ZyAoMTIsICIlcyAtPiAlbHhcbiIsIHVud19yZWduYW1lIChyZWcpLCAqdmFsKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrCisrIGJhZHJlZzoKKysgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorKworK3N0YXRpYyBpbnQKKythY2Nlc3NfZnByZWcgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19yZWdudW1fdCByZWcsIHVud19mcHJlZ190ICp2YWwsCisrCSAgICAgIGludCB3cml0ZSwgdm9pZCAqYXJnKQorK3sKKysgIHVjb250ZXh0X3QgKnVjID0gYXJnOworKyAgdW53X2ZwcmVnX3QgKmFkZHI7CisrCisrICBpZiAoIXVud19pc19mcHJlZyAocmVnKSkKKysgICAgZ290byBiYWRyZWc7CisrCisrICBpZiAoIShhZGRyID0gdWNfYWRkciAodWMsIHJlZykpKQorKyAgICBnb3RvIGJhZHJlZzsKKysKKysgIGlmICh3cml0ZSkKKysgICAgeworKyAgICAgIERlYnVnICgxMiwgIiVzIDwtICUwOGx4LiUwOGx4LiUwOGx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwKKysJICAgICAoKGxvbmcgKil2YWwpWzBdLCAoKGxvbmcgKil2YWwpWzFdLCAoKGxvbmcgKil2YWwpWzJdKTsKKysgICAgICAqKHVud19mcHJlZ190ICopIGFkZHIgPSAqdmFsOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICAqdmFsID0gKih1bndfZnByZWdfdCAqKSBhZGRyOworKyAgICAgIERlYnVnICgxMiwgIiVzIC0+ICUwOGx4LiUwOGx4LiUwOGx4XG4iLCB1bndfcmVnbmFtZSAocmVnKSwKKysJICAgICAoKGxvbmcgKil2YWwpWzBdLCAoKGxvbmcgKil2YWwpWzFdLCAoKGxvbmcgKil2YWwpWzJdKTsKKysgICAgfQorKyAgcmV0dXJuIDA7CisrCisrIGJhZHJlZzoKKysgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgIC8qIGF0dGVtcHQgdG8gYWNjZXNzIGEgbm9uLXByZXNlcnZlZCByZWdpc3RlciAqLworKyAgcmV0dXJuIC1VTldfRUJBRFJFRzsKKyt9CisrCisrc3RhdGljIGludAorK2dldF9zdGF0aWNfcHJvY19uYW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bndfd29yZF90IGlwLAorKwkJICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgdW53X3dvcmRfdCAqb2ZmcCwKKysJCSAgICAgIHZvaWQgKmFyZykKKyt7CisrICByZXR1cm4gX1VlbGY2NF9nZXRfcHJvY19uYW1lIChhcywgZ2V0cGlkICgpLCBpcCwgYnVmLCBidWZfbGVuLCBvZmZwKTsKKyt9CisrCisrSElEREVOIHZvaWQKKythYXJjaDY0X2xvY2FsX2FkZHJfc3BhY2VfaW5pdCAodm9pZCkKKyt7CisrICBtZW1zZXQgKCZsb2NhbF9hZGRyX3NwYWNlLCAwLCBzaXplb2YgKGxvY2FsX2FkZHJfc3BhY2UpKTsKKysgIGxvY2FsX2FkZHJfc3BhY2UuY2FjaGluZ19wb2xpY3kgPSBVTldfQ0FDSEVfR0xPQkFMOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuZmluZF9wcm9jX2luZm8gPSBkd2FyZl9maW5kX3Byb2NfaW5mbzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLnB1dF91bndpbmRfaW5mbyA9IHB1dF91bndpbmRfaW5mbzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmdldF9keW5faW5mb19saXN0X2FkZHIgPSBnZXRfZHluX2luZm9fbGlzdF9hZGRyOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuYWNjZXNzX21lbSA9IGFjY2Vzc19tZW07CisrICBsb2NhbF9hZGRyX3NwYWNlLmFjYy5hY2Nlc3NfcmVnID0gYWNjZXNzX3JlZzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLmFjY2Vzc19mcHJlZyA9IGFjY2Vzc19mcHJlZzsKKysgIGxvY2FsX2FkZHJfc3BhY2UuYWNjLnJlc3VtZSA9IGFhcmNoNjRfbG9jYWxfcmVzdW1lOworKyAgbG9jYWxfYWRkcl9zcGFjZS5hY2MuZ2V0X3Byb2NfbmFtZSA9IGdldF9zdGF0aWNfcHJvY19uYW1lOworKyAgdW53X2ZsdXNoX2NhY2hlICgmbG9jYWxfYWRkcl9zcGFjZSwgMCwgMCk7CisrfQorKworKyNlbmRpZiAvKiAhVU5XX1JFTU9URV9PTkxZICovCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9HaW5pdF9sb2NhbC5jCitAQCAtMCwwICsxLDU1IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrI2luY2x1ZGUgImluaXQuaCIKKysKKysjaWZkZWYgVU5XX1JFTU9URV9PTkxZCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pbml0X2xvY2FsICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X2NvbnRleHRfdCAqdWMpCisreworKyAgcmV0dXJuIC1VTldfRUlOVkFMOworK30KKysKKysjZWxzZSAvKiAhVU5XX1JFTU9URV9PTkxZICovCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pbml0X2xvY2FsICh1bndfY3Vyc29yX3QgKmN1cnNvciwgdW53X2NvbnRleHRfdCAqdWMpCisreworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysKKysgIGlmICghdGRlcF9pbml0X2RvbmUpCisrICAgIHRkZXBfaW5pdCAoKTsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcClcbiIsIGMpOworKworKyAgYy0+ZHdhcmYuYXMgPSB1bndfbG9jYWxfYWRkcl9zcGFjZTsKKysgIGMtPmR3YXJmLmFzX2FyZyA9IHVjOworKworKyAgcmV0dXJuIGNvbW1vbl9pbml0IChjLCAxKTsKKyt9CisrCisrI2VuZGlmIC8qICFVTldfUkVNT1RFX09OTFkgKi8KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dpbml0X3JlbW90ZS5jCitAQCAtMCwwICsxLDQ1IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJpbml0LmgiCisrI2luY2x1ZGUgInVud2luZF9pLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pbml0X3JlbW90ZSAodW53X2N1cnNvcl90ICpjdXJzb3IsIHVud19hZGRyX3NwYWNlX3QgYXMsIHZvaWQgKmFzX2FyZykKKyt7CisrI2lmZGVmIFVOV19MT0NBTF9PTkxZCisrICByZXR1cm4gLVVOV19FSU5WQUw7CisrI2Vsc2UgLyogIVVOV19MT0NBTF9PTkxZICovCisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKworKyAgaWYgKCF0ZGVwX2luaXRfZG9uZSkKKysgICAgdGRlcF9pbml0ICgpOworKworKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwKVxuIiwgYyk7CisrCisrICBjLT5kd2FyZi5hcyA9IGFzOworKyAgYy0+ZHdhcmYuYXNfYXJnID0gYXNfYXJnOworKyAgcmV0dXJuIGNvbW1vbl9pbml0IChjLCAwKTsKKysjZW5kaWYgLyogIVVOV19MT0NBTF9PTkxZICovCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR2lzX3NpZ25hbF9mcmFtZS5jCitAQCAtMCwwICsxLDY0IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworKy8qIFRoZSByZXN0b3JlciBzdHViIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGZvcm06CisrCisrICAgZDI4MDExNjggICAgICAgIG1vdnogICAgeDgsICMweDhiCisrICAgZDQwMDAwMDEgICAgICAgIHN2YyAgICAgIzB4MAorKyovCisrCisrUFJPVEVDVEVEIGludAorK3Vud19pc19zaWduYWxfZnJhbWUgKHVud19jdXJzb3JfdCAqY3Vyc29yKQorK3sKKysjaWZkZWYgX19saW51eF9fCisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgdW53X3dvcmRfdCB3MCwgaXA7CisrICB1bndfYWRkcl9zcGFjZV90IGFzOworKyAgdW53X2FjY2Vzc29yc190ICphOworKyAgdm9pZCAqYXJnOworKyAgaW50IHJldDsKKysKKysgIGFzID0gYy0+ZHdhcmYuYXM7CisrICBhID0gdW53X2dldF9hY2Nlc3NvcnMgKGFzKTsKKysgIGFyZyA9IGMtPmR3YXJmLmFzX2FyZzsKKysKKysgIGlwID0gYy0+ZHdhcmYuaXA7CisrCisrICByZXQgPSAoKmEtPmFjY2Vzc19tZW0pIChhcywgaXAsICZ3MCwgMCwgYXJnKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgLyogRklYTUU6IGRpc3Rpbmd1aXNoIDMyYml0IGluc24gdnMgNjRiaXQgcmVnaXN0ZXJzLiAgKi8KKysgIGlmICh3MCAhPSAweGQ0MDAwMDAxZDI4MDExNjgpCisrICAgIHJldHVybiAwOworKworKyAgcmV0dXJuIDE7CisrCisrI2Vsc2UKKysgIHJldHVybiAtVU5XX0VOT0lORk87CisrI2VuZGlmCisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR3JlZ3MuYworQEAgLTAsMCArMSwxMTMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKworK0hJRERFTiBpbnQKKyt0ZGVwX2FjY2Vzc19yZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsIHVud193b3JkX3QgKnZhbHAsCisrCQkgaW50IHdyaXRlKQorK3sKKysgIGR3YXJmX2xvY190IGxvYyA9IERXQVJGX05VTExfTE9DOworKyAgdW5zaWduZWQgaW50IG1hc2s7CisrCisrICBzd2l0Y2ggKHJlZykKKysgICAgeworKyAgICBjYXNlIFVOV19BQVJDSDY0X1gwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gzOgorKyAgICAgIG1hc2sgPSAxIDw8IHJlZzsKKysgICAgICBpZiAod3JpdGUpCisrICAgICAgICB7CisrICAgICAgICAgIGMtPmR3YXJmLmVoX2FyZ3NbcmVnXSA9ICp2YWxwOworKyAgICAgICAgICBjLT5kd2FyZi5laF92YWxpZF9tYXNrIHw9IG1hc2s7CisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgIGVsc2UgaWYgKChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgbWFzaykgIT0gMCkKKysgICAgICAgIHsKKysgICAgICAgICAgKnZhbHAgPSBjLT5kd2FyZi5laF9hcmdzW3JlZ107CisrICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICAgIGVsc2UKKysgICAgICAgIGxvYyA9IGMtPmR3YXJmLmxvY1tyZWddOworKyAgICAgIGJyZWFrOworKworKyAgICBjYXNlIFVOV19BQVJDSDY0X1g0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g2OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1g5OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMDoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTE6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDEyOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxMzoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTQ6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE1OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxNjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMTc6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDE4OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gxOToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjA6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDIxOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyMjoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjM6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI0OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyNToKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjY6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDI3OgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1gyODoKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9YMjk6CisrICAgIGNhc2UgVU5XX0FBUkNINjRfWDMwOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1BDOgorKyAgICBjYXNlIFVOV19BQVJDSDY0X1BTVEFURToKKysgICAgICBsb2MgPSBjLT5kd2FyZi5sb2NbcmVnXTsKKysgICAgICBicmVhazsKKysKKysgICAgY2FzZSBVTldfQUFSQ0g2NF9TUDoKKysgICAgICBpZiAod3JpdGUpCisrICAgICAgICByZXR1cm4gLVVOV19FUkVBRE9OTFlSRUc7CisrICAgICAgKnZhbHAgPSBjLT5kd2FyZi5jZmE7CisrICAgICAgcmV0dXJuIDA7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgRGVidWcgKDEsICJiYWQgcmVnaXN0ZXIgbnVtYmVyICV1XG4iLCByZWcpOworKyAgICAgIHJldHVybiAtVU5XX0VCQURSRUc7CisrICAgIH0KKysKKysgIGlmICh3cml0ZSkKKysgICAgcmV0dXJuIGR3YXJmX3B1dCAoJmMtPmR3YXJmLCBsb2MsICp2YWxwKTsKKysgIGVsc2UKKysgICAgcmV0dXJuIGR3YXJmX2dldCAoJmMtPmR3YXJmLCBsb2MsIHZhbHApOworK30KKysKKytISURERU4gaW50CisrdGRlcF9hY2Nlc3NfZnByZWcgKHN0cnVjdCBjdXJzb3IgKmMsIHVud19yZWdudW1fdCByZWcsIHVud19mcHJlZ190ICp2YWxwLAorKwkJICAgaW50IHdyaXRlKQorK3sKKysgIERlYnVnICgxLCAiYmFkIHJlZ2lzdGVyIG51bWJlciAldVxuIiwgcmVnKTsKKysgIHJldHVybiAtVU5XX0VCQURSRUc7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvR3Jlc3VtZS5jCitAQCAtMCwwICsxLDE3NyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMDggQ29kZVNvdXJjZXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTGluYXJvIExpbWl0ZWQKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysjaW5jbHVkZSAib2Zmc2V0cy5oIgorKworKyNpZm5kZWYgVU5XX1JFTU9URV9PTkxZCisrCisrSElEREVOIGlubGluZSBpbnQKKythYXJjaDY0X2xvY2FsX3Jlc3VtZSAodW53X2FkZHJfc3BhY2VfdCBhcywgdW53X2N1cnNvcl90ICpjdXJzb3IsIHZvaWQgKmFyZykKKyt7CisrI2lmZGVmIF9fbGludXhfXworKyAgc3RydWN0IGN1cnNvciAqYyA9IChzdHJ1Y3QgY3Vyc29yICopIGN1cnNvcjsKKysgIHVud190ZGVwX2NvbnRleHRfdCAqdWMgPSBjLT5kd2FyZi5hc19hcmc7CisrCisrICBpZiAoYy0+c2lnY29udGV4dF9mb3JtYXQgPT0gQUFSQ0g2NF9TQ0ZfTk9ORSkKKysgICAgeworKyAgICAgIC8qIFNpbmNlIHRoZXJlIGFyZSBubyBzaWduYWxzIGludm9sdmVkIGhlcmUgd2UgcmVzdG9yZSB0aGUgbm9uIHNjcmF0Y2gKKysJIHJlZ2lzdGVycyBvbmx5LiAgKi8KKysgICAgICB1bnNpZ25lZCBsb25nIHJlZ3NbMTFdOworKyAgICAgIHJlZ3NbMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxOV07CisrICAgICAgcmVnc1sxXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIwXTsKKysgICAgICByZWdzWzJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjFdOworKyAgICAgIHJlZ3NbM10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMl07CisrICAgICAgcmVnc1s0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIzXTsKKysgICAgICByZWdzWzVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjRdOworKyAgICAgIHJlZ3NbNl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNV07CisrICAgICAgcmVnc1s3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI2XTsKKysgICAgICByZWdzWzhdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjddOworKyAgICAgIHJlZ3NbOV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syOF07CisrICAgICAgcmVnc1sxMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1szMF07IC8qIExSICovCisrICAgICAgdW5zaWduZWQgbG9uZyBzcCA9IHVjLT51Y19tY29udGV4dC5zcDsKKysKKysgICAgICBzdHJ1Y3QgcmVnc19vdmVybGF5IHsKKysgICAgICAgIGNoYXIgeFtzaXplb2YocmVncyldOworKyAgICAgIH07CisrCisrICAgICAgYXNtIHZvbGF0aWxlICgKKysgICAgICAgICJsZHAgeDE5LCB4MjAsIFslMF1cbiIKKysgICAgICAgICJsZHAgeDIxLCB4MjIsIFslMCwxNl1cbiIKKysgICAgICAgICJsZHAgeDIzLCB4MjQsIFslMCwzMl1cbiIKKysgICAgICAgICJsZHAgeDI1LCB4MjYsIFslMCw0OF1cbiIKKysgICAgICAgICJsZHAgeDI3LCB4MjgsIFslMCw2NF1cbiIKKysgICAgICAgICJsZHIgeDMwLCBbJTAsODBdXG4iCisrICAgICAgICAibW92IHNwLCAlMVxuIgorKyAgICAgICAgInJldCBcbiIKKysgICAgICAgIDoKKysgICAgICAgIDogInIiIChyZWdzKSwKKysgICAgICAgICAgInIiIChzcCksCisrICAgICAgICAgICJtIiAoKihzdHJ1Y3QgcmVnc19vdmVybGF5ICopcmVncykKKysgICAgICApOworKyAgICB9CisrICBlbHNlCisrICAgIHsKKysgICAgICBzdHJ1Y3Qgc2lnY29udGV4dCAqc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgKikgYy0+c2lnY29udGV4dF9hZGRyOworKworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHgxKSBzYy0+cmVnc1swXSA9IGMtPmR3YXJmLmVoX2FyZ3NbMF07CisrICAgICAgaWYgKGMtPmR3YXJmLmVoX3ZhbGlkX21hc2sgJiAweDIpIHNjLT5yZWdzWzFdID0gYy0+ZHdhcmYuZWhfYXJnc1sxXTsKKysgICAgICBpZiAoYy0+ZHdhcmYuZWhfdmFsaWRfbWFzayAmIDB4NCkgc2MtPnJlZ3NbMl0gPSBjLT5kd2FyZi5laF9hcmdzWzJdOworKyAgICAgIGlmIChjLT5kd2FyZi5laF92YWxpZF9tYXNrICYgMHg4KSBzYy0+cmVnc1szXSA9IGMtPmR3YXJmLmVoX2FyZ3NbM107CisrCisrICAgICAgc2MtPnJlZ3NbNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s0XTsKKysgICAgICBzYy0+cmVnc1s1XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzVdOworKyAgICAgIHNjLT5yZWdzWzZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbNl07CisrICAgICAgc2MtPnJlZ3NbN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1s3XTsKKysgICAgICBzYy0+cmVnc1s4XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzhdOworKyAgICAgIHNjLT5yZWdzWzldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbOV07CisrICAgICAgc2MtPnJlZ3NbMTBdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTBdOworKyAgICAgIHNjLT5yZWdzWzExXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzExXTsKKysgICAgICBzYy0+cmVnc1sxMl0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxMl07CisrICAgICAgc2MtPnJlZ3NbMTNdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTNdOworKyAgICAgIHNjLT5yZWdzWzE0XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE0XTsKKysgICAgICBzYy0+cmVnc1sxNV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxNV07CisrICAgICAgc2MtPnJlZ3NbMTZdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTZdOworKyAgICAgIHNjLT5yZWdzWzE3XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzE3XTsKKysgICAgICBzYy0+cmVnc1sxOF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1sxOF07CisrICAgICAgc2MtPnJlZ3NbMTldID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMTldOworKyAgICAgIHNjLT5yZWdzWzIwXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIwXTsKKysgICAgICBzYy0+cmVnc1syMV0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syMV07CisrICAgICAgc2MtPnJlZ3NbMjJdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjJdOworKyAgICAgIHNjLT5yZWdzWzIzXSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzIzXTsKKysgICAgICBzYy0+cmVnc1syNF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syNF07CisrICAgICAgc2MtPnJlZ3NbMjVdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjVdOworKyAgICAgIHNjLT5yZWdzWzI2XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI2XTsKKysgICAgICBzYy0+cmVnc1syN10gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1syN107CisrICAgICAgc2MtPnJlZ3NbMjhdID0gdWMtPnVjX21jb250ZXh0LnJlZ3NbMjhdOworKyAgICAgIHNjLT5yZWdzWzI5XSA9IHVjLT51Y19tY29udGV4dC5yZWdzWzI5XTsKKysgICAgICBzYy0+cmVnc1szMF0gPSB1Yy0+dWNfbWNvbnRleHQucmVnc1szMF07CisrICAgICAgc2MtPnNwID0gdWMtPnVjX21jb250ZXh0LnNwOworKyAgICAgIHNjLT5wYyA9IHVjLT51Y19tY29udGV4dC5wYzsKKysgICAgICBzYy0+cHN0YXRlID0gdWMtPnVjX21jb250ZXh0LnBzdGF0ZTsKKysKKysgICAgICBhc20gdm9sYXRpbGUgKAorKyAgICAgICAgIm1vdiBzcCwgJTBcbiIKKysgICAgICAgICJyZXQgJTFcbiIKKysgICAgICAgIDogOiAiciIgKGMtPnNpZ2NvbnRleHRfc3ApLCAiciIgKGMtPnNpZ2NvbnRleHRfcGMpCisrICAgICAgKTsKKysgICB9CisrICB1bnJlYWNoYWJsZSgpOworKyNlbHNlCisrICBwcmludGYgKCIlczogaW1wbGVtZW50IG1lXG4iLCBfX0ZVTkNUSU9OX18pOworKyNlbmRpZgorKyAgcmV0dXJuIC1VTldfRUlOVkFMOworK30KKysKKysjZW5kaWYgLyogIVVOV19SRU1PVEVfT05MWSAqLworKworK3N0YXRpYyBpbmxpbmUgdm9pZAorK2VzdGFibGlzaF9tYWNoaW5lX3N0YXRlIChzdHJ1Y3QgY3Vyc29yICpjKQorK3sKKysgIHVud19hZGRyX3NwYWNlX3QgYXMgPSBjLT5kd2FyZi5hczsKKysgIHZvaWQgKmFyZyA9IGMtPmR3YXJmLmFzX2FyZzsKKysgIHVud19mcHJlZ190IGZwdmFsOworKyAgdW53X3dvcmRfdCB2YWw7CisrICBpbnQgcmVnOworKworKyAgRGVidWcgKDgsICJjb3B5aW5nIG91dCBjdXJzb3Igc3RhdGVcbiIpOworKworKyAgZm9yIChyZWcgPSAwOyByZWcgPD0gVU5XX0FBUkNINjRfUFNUQVRFOyArK3JlZykKKysgICAgeworKyAgICAgIERlYnVnICgxNiwgImNvcHlpbmcgJXMgJWRcbiIsIHVud19yZWduYW1lIChyZWcpLCByZWcpOworKyAgICAgIGlmICh1bndfaXNfZnByZWcgKHJlZykpCisrCXsKKysJICBpZiAodGRlcF9hY2Nlc3NfZnByZWcgKGMsIHJlZywgJmZwdmFsLCAwKSA+PSAwKQorKwkgICAgYXMtPmFjYy5hY2Nlc3NfZnByZWcgKGFzLCByZWcsICZmcHZhbCwgMSwgYXJnKTsKKysJfQorKyAgICAgIGVsc2UKKysJeworKwkgIGlmICh0ZGVwX2FjY2Vzc19yZWcgKGMsIHJlZywgJnZhbCwgMCkgPj0gMCkKKysJICAgIGFzLT5hY2MuYWNjZXNzX3JlZyAoYXMsIHJlZywgJnZhbCwgMSwgYXJnKTsKKysJfQorKyAgICB9CisrfQorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfcmVzdW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKworKyAgRGVidWcgKDEsICIoY3Vyc29yPSVwKVxuIiwgYyk7CisrCisrICBpZiAoIWMtPmR3YXJmLmlwKQorKyAgICB7CisrICAgICAgLyogVGhpcyBjYW4gaGFwcGVuIGVhc2lseSB3aGVuIHRoZSBmcmFtZS1jaGFpbiBnZXRzIHRydW5jYXRlZAorKwkgZHVlIHRvIGJhZCBvciBtaXNzaW5nIHVud2luZC1pbmZvLiAgKi8KKysgICAgICBEZWJ1ZyAoMSwgInJlZnVzaW5nIHRvIHJlc3VtZSBleGVjdXRpb24gYXQgYWRkcmVzcyAwXG4iKTsKKysgICAgICByZXR1cm4gLVVOV19FSU5WQUw7CisrICAgIH0KKysKKysgIGVzdGFibGlzaF9tYWNoaW5lX3N0YXRlIChjKTsKKysKKysgIHJldHVybiAoKmMtPmR3YXJmLmFzLT5hY2MucmVzdW1lKSAoYy0+ZHdhcmYuYXMsICh1bndfY3Vyc29yX3QgKikgYywKKysJCQkJICAgICBjLT5kd2FyZi5hc19hcmcpOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0dzdGVwLmMKK0BAIC0wLDAgKzEsMTI5IEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBMaW5hcm8gTGltaXRlZAorKyAgIENvcHlyaWdodCAoQykgMjAxMiBUb21taSBSYW50YWxhIDx0dC5yYW50YWxhQGdtYWlsLmNvbT4KKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJ1bndpbmRfaS5oIgorKyNpbmNsdWRlICJvZmZzZXRzLmgiCisrCisrUFJPVEVDVEVEIGludAorK3Vud19oYW5kbGVfc2lnbmFsX2ZyYW1lICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysgIHVud193b3JkX3Qgc2NfYWRkciwgc3AsIHNwX2FkZHIgPSBjLT5kd2FyZi5jZmE7CisrICBzdHJ1Y3QgZHdhcmZfbG9jIHNwX2xvYyA9IERXQVJGX0xPQyAoc3BfYWRkciwgMCk7CisrCisrICBpZiAoKHJldCA9IGR3YXJmX2dldCAoJmMtPmR3YXJmLCBzcF9sb2MsICZzcCkpIDwgMCkKKysgICAgcmV0dXJuIC1VTldfRVVOU1BFQzsKKysKKysgIHJldCA9IHVud19pc19zaWduYWxfZnJhbWUgKGN1cnNvcik7CisrICBEZWJ1ZygxLCAidW53X2lzX3NpZ25hbF9mcmFtZSgpPSVkXG4iLCByZXQpOworKworKyAgLyogU2F2ZSB0aGUgU1AgYW5kIFBDIHRvIGJlIGFibGUgdG8gcmV0dXJuIGV4ZWN1dGlvbiBhdCB0aGlzIHBvaW50CisrICAgICBsYXRlciBpbiB0aW1lICh1bndfcmVzdW1lKS4gICovCisrICBjLT5zaWdjb250ZXh0X3NwID0gYy0+ZHdhcmYuY2ZhOworKyAgYy0+c2lnY29udGV4dF9wYyA9IGMtPmR3YXJmLmlwOworKworKyAgaWYgKHJldCkKKysgICAgeworKyAgICAgIGMtPnNpZ2NvbnRleHRfZm9ybWF0ID0gQUFSQ0g2NF9TQ0ZfTElOVVhfUlRfU0lHRlJBTUU7CisrICAgICAgc2NfYWRkciA9IHNwX2FkZHIgKyBzaXplb2YgKHNpZ2luZm9fdCkgKyBMSU5VWF9VQ19NQ09OVEVYVF9PRkY7CisrICAgIH0KKysgIGVsc2UKKysgICAgcmV0dXJuIC1VTldfRVVOU1BFQzsKKysKKysgIGMtPnNpZ2NvbnRleHRfYWRkciA9IHNjX2FkZHI7CisrCisrICAvKiBVcGRhdGUgdGhlIGR3YXJmIGN1cnNvci4KKysgICAgIFNldCB0aGUgbG9jYXRpb24gb2YgdGhlIHJlZ2lzdGVycyB0byB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzZXMgb2YgdGhlCisrICAgICB1Y19tY29udGV4dCAvIHNpZ2NvbnRleHQgc3RydWN0dXJlIGNvbnRlbnRzLiAgKi8KKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMl0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDJfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YM10gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDNfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDVfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNl0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDZfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YN10gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDhfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YOV0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDlfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTBdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEwX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDExXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxMV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMl0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTJfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTNdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDEzX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE0XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxNF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMTVfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTZdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE2X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE3XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gxN19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxOF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMThfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTldID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDE5X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIwXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyMF9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMV0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjFfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjJdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDIyX09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIzXSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyM19PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjRfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjVdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI1X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI2XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyNl9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyN10gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMjdfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjhdID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfWDI4X09GRiwgMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI5XSA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1gyOV9PRkYsIDApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzMF0gPSBEV0FSRl9MT0MgKHNjX2FkZHIgKyBMSU5VWF9TQ19YMzBfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfU1BfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10gID0gRFdBUkZfTE9DIChzY19hZGRyICsgTElOVVhfU0NfUENfT0ZGLCAwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QU1RBVEVdICA9IERXQVJGX0xPQyAoc2NfYWRkciArIExJTlVYX1NDX1BTVEFURV9PRkYsIDApOworKworKyAgLyogU2V0IFNQL0NGQSBhbmQgUEMvSVAuICAqLworKyAgZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0sICZjLT5kd2FyZi5jZmEpOworKyAgZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9QQ10sICZjLT5kd2FyZi5pcCk7CisrCisrICBjLT5kd2FyZi5waV92YWxpZCA9IDA7CisrCisrICByZXR1cm4gMTsKKyt9CisrCisrUFJPVEVDVEVEIGludAorK3Vud19zdGVwICh1bndfY3Vyc29yX3QgKmN1cnNvcikKKyt7CisrICBzdHJ1Y3QgY3Vyc29yICpjID0gKHN0cnVjdCBjdXJzb3IgKikgY3Vyc29yOworKyAgaW50IHJldDsKKysKKysgIERlYnVnICgxLCAiKGN1cnNvcj0lcCwgaXA9MHglMDE2bHgsIGNmYT0weCUwMTZseCkpXG4iLAorKwkgYywgYy0+ZHdhcmYuaXAsIGMtPmR3YXJmLmNmYSk7CisrCisrICAvKiBDaGVjayBpZiB0aGlzIGlzIGEgc2lnbmFsIGZyYW1lLiAqLworKyAgaWYgKHVud19pc19zaWduYWxfZnJhbWUgKGN1cnNvcikpCisrICAgIHJldHVybiB1bndfaGFuZGxlX3NpZ25hbF9mcmFtZSAoY3Vyc29yKTsKKysKKysgIHJldCA9IGR3YXJmX3N0ZXAgKCZjLT5kd2FyZik7CisrICBEZWJ1ZygxLCAiZHdhcmZfc3RlcCgpPSVkXG4iLCByZXQpOworKworKyAgaWYgKHVubGlrZWx5IChyZXQgPT0gLVVOV19FU1RPUFVOV0lORCkpCisrICAgIHJldHVybiByZXQ7CisrCisrICBpZiAodW5saWtlbHkgKHJldCA8IDApKQorKyAgICByZXR1cm4gMDsKKysKKysgIHJldHVybiAoYy0+ZHdhcmYuaXAgPT0gMCkgPyAwIDogMTsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MY3JlYXRlX2FkZHJfc3BhY2UuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHY3JlYXRlX2FkZHJfc3BhY2UuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xnZXRfcHJvY19pbmZvLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dldF9wcm9jX2luZm8uYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xnZXRfc2F2ZV9sb2MuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHZ2V0X3NhdmVfbG9jLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MZ2xvYmFsLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2dsb2JhbC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGluaXQuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHaW5pdC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGluaXRfbG9jYWwuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHaW5pdF9sb2NhbC5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTGluaXRfcmVtb3RlLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2luaXRfcmVtb3RlLmMiCisrI2VuZGlmCistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9MaXNfc2lnbmFsX2ZyYW1lLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR2lzX3NpZ25hbF9mcmFtZS5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTHJlZ3MuYworQEAgLTAsMCArMSw1IEBACisrI2RlZmluZSBVTldfTE9DQUxfT05MWQorKyNpbmNsdWRlIDxsaWJ1bndpbmQuaD4KKysjaWYgZGVmaW5lZChVTldfTE9DQUxfT05MWSkgJiYgIWRlZmluZWQoVU5XX1JFTU9URV9PTkxZKQorKyNpbmNsdWRlICJHcmVncy5jIgorKyNlbmRpZgorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvTHJlc3VtZS5jCitAQCAtMCwwICsxLDUgQEAKKysjZGVmaW5lIFVOV19MT0NBTF9PTkxZCisrI2luY2x1ZGUgPGxpYnVud2luZC5oPgorKyNpZiBkZWZpbmVkKFVOV19MT0NBTF9PTkxZKSAmJiAhZGVmaW5lZChVTldfUkVNT1RFX09OTFkpCisrI2luY2x1ZGUgIkdyZXN1bWUuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L0xzdGVwLmMKK0BAIC0wLDAgKzEsNSBAQAorKyNkZWZpbmUgVU5XX0xPQ0FMX09OTFkKKysjaW5jbHVkZSA8bGlidW53aW5kLmg+CisrI2lmIGRlZmluZWQoVU5XX0xPQ0FMX09OTFkpICYmICFkZWZpbmVkKFVOV19SRU1PVEVfT05MWSkKKysjaW5jbHVkZSAiR3N0ZXAuYyIKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L2dlbi1vZmZzZXRzLmMKK0BAIC0wLDAgKzEsNjggQEAKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkZGVmLmg+CisrI2luY2x1ZGUgPHVjb250ZXh0Lmg+CisrI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CisrCisrI2RlZmluZSBVQyhOLFgpIFwKKysgIHByaW50ZiAoIiNkZWZpbmUgTElOVVhfVUNfIiBOICJfT0ZGXHQweCVYXG4iLCBvZmZzZXRvZiAodWNvbnRleHRfdCwgWCkpCisrCisrI2RlZmluZSBTQyhOLFgpIFwKKysgIHByaW50ZiAoIiNkZWZpbmUgTElOVVhfU0NfIiBOICJfT0ZGXHQweCVYXG4iLCBvZmZzZXRvZiAoc3RydWN0IHNpZ2NvbnRleHQsIFgpKQorKworK2ludAorK21haW4gKHZvaWQpCisreworKyAgcHJpbnRmICgKKysiLyogTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnM6ICovXG5cbiIKKysKKysiLyogRGVmaW5lIHZhcmlvdXMgc3RydWN0dXJlIG9mZnNldHMgdG8gc2ltcGxpZnkgY3Jvc3MtY29tcGlsYXRpb24uICAqL1xuXG4iCisrCisrIi8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggXCJ1Y29udGV4dF90XCI6ICAqL1xuXG4iKTsKKysKKysgIFVDICgiRkxBR1MiLCB1Y19mbGFncyk7CisrICBVQyAoIkxJTksiLCB1Y19saW5rKTsKKysgIFVDICgiU1RBQ0siLCB1Y19zdGFjayk7CisrICBVQyAoIk1DT05URVhUIiwgdWNfbWNvbnRleHQpOworKyAgVUMgKCJTSUdNQVNLIiwgdWNfc2lnbWFzayk7CisrCisrICBwcmludGYgKCJcbi8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggXCJzdHJ1Y3Qgc2lnY29udGV4dFwiOiAgKi9cblxuIik7CisrCisrICBTQyAoIlIwIiwgIHJlZ3NbMF0pOworKyAgU0MgKCJSMSIsICByZWdzWzFdKTsKKysgIFNDICgiUjIiLCAgcmVnc1syXSk7CisrICBTQyAoIlIzIiwgIHJlZ3NbM10pOworKyAgU0MgKCJSNCIsICByZWdzWzRdKTsKKysgIFNDICgiUjUiLCAgcmVnc1s1XSk7CisrICBTQyAoIlI2IiwgIHJlZ3NbNl0pOworKyAgU0MgKCJSNyIsICByZWdzWzddKTsKKysgIFNDICgiUjgiLCAgcmVnc1s4XSk7CisrICBTQyAoIlI5IiwgIHJlZ3NbOV0pOworKyAgU0MgKCJSMTAiLCByZWdzWzEwXSk7CisrICBTQyAoIlIxMSIsIHJlZ3NbMTFdKTsKKysgIFNDICgiUjEyIiwgcmVnc1sxMl0pOworKyAgU0MgKCJSMTMiLCByZWdzWzEzXSk7CisrICBTQyAoIlIxNCIsIHJlZ3NbMTRdKTsKKysgIFNDICgiUjE1IiwgcmVnc1sxNV0pOworKyAgU0MgKCJSMTYiLCByZWdzWzE2XSk7CisrICBTQyAoIlIxNyIsIHJlZ3NbMTddKTsKKysgIFNDICgiUjE4IiwgcmVnc1sxOF0pOworKyAgU0MgKCJSMTkiLCByZWdzWzE5XSk7CisrICBTQyAoIlIyMCIsIHJlZ3NbMjBdKTsKKysgIFNDICgiUjIxIiwgcmVnc1syMV0pOworKyAgU0MgKCJSMjIiLCByZWdzWzIyXSk7CisrICBTQyAoIlIyMyIsIHJlZ3NbMjNdKTsKKysgIFNDICgiUjI0IiwgcmVnc1syNF0pOworKyAgU0MgKCJSMjUiLCByZWdzWzI1XSk7CisrICBTQyAoIlIyNiIsIHJlZ3NbMjZdKTsKKysgIFNDICgiUjI3IiwgcmVnc1syN10pOworKyAgU0MgKCJSMjgiLCByZWdzWzI4XSk7CisrICBTQyAoIlIyOSIsIHJlZ3NbMjldKTsKKysgIFNDICgiUjMwIiwgcmVnc1szMF0pOworKyAgU0MgKCJSMzEiLCByZWdzWzMxXSk7CisrCisrICBTQyAoIlBDIiwgcGMpOworKyAgU0MgKCJTUCIsIHNwKTsKKysgIFNDICgiRmF1bHQiLCBmYXVsdF9hZGRyZXNzKTsKKysgIFNDICgic3RhdGUiLCBwc3RhdGUpOworKyAgcmV0dXJuIDA7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvaW5pdC5oCitAQCAtMCwwICsxLDEyNyBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytzdGF0aWMgaW5saW5lIGludAorK2NvbW1vbl9pbml0IChzdHJ1Y3QgY3Vyc29yICpjLCB1bnNpZ25lZCB1c2VfcHJldl9pbnN0cikKKyt7CisrICBpbnQgcmV0LCBpOworKworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gwXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDJdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gzXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YNF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDVdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g2XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YN10gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDhdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1g5XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1g5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxMSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDEyXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDEyKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTNdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxNF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE1XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE1KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTZdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gxN10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gxNyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDE4XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDE4KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMTldID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMTkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDIxXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDIxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDI3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDI3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9YMjhdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9YMjgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1gyOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1gyOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfWDMwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfWDMwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9TUCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfUENdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfUEMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BTVEFURV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOV19BQVJDSDY0X1BTVEFURSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjBdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxXSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMl0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjNdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjMpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y0XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WNV0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjZdICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjYpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1Y3XSAgPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1Y3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WOF0gID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjldICA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjkpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxMF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjExXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjExKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTJdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTIpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxM10gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxMyk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE0XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE0KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMTVdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTUpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxNl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxNik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjE3XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjE3KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMThdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMTgpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YxOV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YxOSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIwXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIwKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjFdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjEpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyMl0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyMik7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjIzXSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjIzKTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjRdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjQpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyNV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyNSk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI2XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI2KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMjddID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMjcpOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YyOF0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YyOCk7CisrICBjLT5kd2FyZi5sb2NbVU5XX0FBUkNINjRfVjI5XSA9IERXQVJGX1JFR19MT0MgKCZjLT5kd2FyZiwgVU5XX0FBUkNINjRfVjI5KTsKKysgIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9WMzBdID0gRFdBUkZfUkVHX0xPQyAoJmMtPmR3YXJmLCBVTldfQUFSQ0g2NF9WMzApOworKyAgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1YzMV0gPSBEV0FSRl9SRUdfTE9DICgmYy0+ZHdhcmYsIFVOV19BQVJDSDY0X1YzMSk7CisrCisrICBmb3IgKGkgPSBVTldfQUFSQ0g2NF9QU1RBVEUgKyAxOyBpIDwgVU5XX0FBUkNINjRfVjA7ICsraSkKKysgICAgYy0+ZHdhcmYubG9jW2ldID0gRFdBUkZfTlVMTF9MT0M7CisrCisrICByZXQgPSBkd2FyZl9nZXQgKCZjLT5kd2FyZiwgYy0+ZHdhcmYubG9jW1VOV19BQVJDSDY0X1BDXSwgJmMtPmR3YXJmLmlwKTsKKysgIGlmIChyZXQgPCAwKQorKyAgICByZXR1cm4gcmV0OworKworKyAgcmV0ID0gZHdhcmZfZ2V0ICgmYy0+ZHdhcmYsIGMtPmR3YXJmLmxvY1tVTldfQUFSQ0g2NF9TUF0sICZjLT5kd2FyZi5jZmEpOworKyAgaWYgKHJldCA8IDApCisrICAgIHJldHVybiByZXQ7CisrCisrICBjLT5zaWdjb250ZXh0X2Zvcm1hdCA9IEFBUkNINjRfU0NGX05PTkU7CisrICBjLT5zaWdjb250ZXh0X2FkZHIgPSAwOworKyAgYy0+c2lnY29udGV4dF9zcCA9IDA7CisrICBjLT5zaWdjb250ZXh0X3BjID0gMDsKKysKKysgIGMtPmR3YXJmLmFyZ3Nfc2l6ZSA9IDA7CisrICBjLT5kd2FyZi5yZXRfYWRkcl9jb2x1bW4gPSAwOworKyAgYy0+ZHdhcmYuc3Rhc2hfZnJhbWVzID0gMDsKKysgIGMtPmR3YXJmLnVzZV9wcmV2X2luc3RyID0gdXNlX3ByZXZfaW5zdHI7CisrICBjLT5kd2FyZi5waV92YWxpZCA9IDA7CisrICBjLT5kd2FyZi5waV9pc19keW5hbWljID0gMDsKKysgIGMtPmR3YXJmLmhpbnQgPSAwOworKyAgYy0+ZHdhcmYucHJldl9ycyA9IDA7CisrCisrICByZXR1cm4gMDsKKyt9CistLS0gL2Rldi9udWxsCisrKysgYi9zcmMvYWFyY2g2NC9pc19mcHJlZy5jCitAQCAtMCwwICsxLDMyIEBACisrLyogbGlidW53aW5kIC0gYSBwbGF0Zm9ybS1pbmRlcGVuZGVudCB1bndpbmQgbGlicmFyeQorKyAgIENvcHlyaWdodCAoQykgMjAwOCBDb2RlU291cmNlcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTMgTGluYXJvIExpbWl0ZWQKKysKKytUaGlzIGZpbGUgaXMgcGFydCBvZiBsaWJ1bndpbmQuCisrCisrUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisrYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisrIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKytkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKytwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyt0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisrCisrVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKytpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKysKKytUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKytFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKytNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorK05PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUKKytMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisrT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCisrV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworKworKyNpbmNsdWRlICJsaWJ1bndpbmRfaS5oIgorKworK1BST1RFQ1RFRCBpbnQKKyt1bndfaXNfZnByZWcgKGludCByZWdudW0pCisreworKyAgcmV0dXJuIChyZWdudW0gPj0gVU5XX0FBUkNINjRfVjAgJiYgcmVnbnVtIDw9IFVOV19BQVJDSDY0X1YzMSk7CisrfQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvb2Zmc2V0cy5oCitAQCAtMCwwICsxLDQ5IEBACisrLyogTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnM6ICovCisrCisrLyogRGVmaW5lIHZhcmlvdXMgc3RydWN0dXJlIG9mZnNldHMgdG8gc2ltcGxpZnkgY3Jvc3MtY29tcGlsYXRpb24uICAqLworKworKy8qIE9mZnNldHMgZm9yIEFBcmNoNjQgTGludXggInVjb250ZXh0X3QiOiAgKi8KKysKKysjZGVmaW5lIExJTlVYX1VDX0ZMQUdTX09GRgkweDAKKysjZGVmaW5lIExJTlVYX1VDX0xJTktfT0ZGCTB4OAorKyNkZWZpbmUgTElOVVhfVUNfU1RBQ0tfT0ZGCTB4MTAKKysjZGVmaW5lIExJTlVYX1VDX1NJR01BU0tfT0ZGCTB4MjgKKysjZGVmaW5lIExJTlVYX1VDX01DT05URVhUX09GRgkweGIwCisrCisrLyogT2Zmc2V0cyBmb3IgQUFyY2g2NCBMaW51eCAic3RydWN0IHNpZ2NvbnRleHQiOiAgKi8KKysKKysjZGVmaW5lIExJTlVYX1NDX0ZBVUxUQUREUkVTU19PRkYJMHgwMAorKyNkZWZpbmUgTElOVVhfU0NfWDBfT0ZGCQkweDAwOAorKyNkZWZpbmUgTElOVVhfU0NfWDFfT0ZGCQkweDAxMAorKyNkZWZpbmUgTElOVVhfU0NfWDJfT0ZGCQkweDAxOAorKyNkZWZpbmUgTElOVVhfU0NfWDNfT0ZGCQkweDAyMAorKyNkZWZpbmUgTElOVVhfU0NfWDRfT0ZGCQkweDAyOAorKyNkZWZpbmUgTElOVVhfU0NfWDVfT0ZGCQkweDAzMAorKyNkZWZpbmUgTElOVVhfU0NfWDZfT0ZGCQkweDAzOAorKyNkZWZpbmUgTElOVVhfU0NfWDdfT0ZGCQkweDA0MAorKyNkZWZpbmUgTElOVVhfU0NfWDhfT0ZGCQkweDA0OAorKyNkZWZpbmUgTElOVVhfU0NfWDlfT0ZGCQkweDA1MAorKyNkZWZpbmUgTElOVVhfU0NfWDEwX09GRgkweDA1OAorKyNkZWZpbmUgTElOVVhfU0NfWDExX09GRgkweDA2MAorKyNkZWZpbmUgTElOVVhfU0NfWDEyX09GRgkweDA2OAorKyNkZWZpbmUgTElOVVhfU0NfWDEzX09GRgkweDA3MAorKyNkZWZpbmUgTElOVVhfU0NfWDE0X09GRgkweDA3OAorKyNkZWZpbmUgTElOVVhfU0NfWDE1X09GRgkweDA4MAorKyNkZWZpbmUgTElOVVhfU0NfWDE2X09GRgkweDA4OAorKyNkZWZpbmUgTElOVVhfU0NfWDE3X09GRgkweDA5MAorKyNkZWZpbmUgTElOVVhfU0NfWDE4X09GRgkweDA5OAorKyNkZWZpbmUgTElOVVhfU0NfWDE5X09GRgkweDBhMAorKyNkZWZpbmUgTElOVVhfU0NfWDIwX09GRgkweDBhOAorKyNkZWZpbmUgTElOVVhfU0NfWDIxX09GRgkweDBiMAorKyNkZWZpbmUgTElOVVhfU0NfWDIyX09GRgkweDBiOAorKyNkZWZpbmUgTElOVVhfU0NfWDIzX09GRgkweDBjMAorKyNkZWZpbmUgTElOVVhfU0NfWDI0X09GRgkweDBjOAorKyNkZWZpbmUgTElOVVhfU0NfWDI1X09GRgkweDBkMAorKyNkZWZpbmUgTElOVVhfU0NfWDI2X09GRgkweDBkOAorKyNkZWZpbmUgTElOVVhfU0NfWDI3X09GRgkweDBlMAorKyNkZWZpbmUgTElOVVhfU0NfWDI4X09GRgkweDBlOAorKyNkZWZpbmUgTElOVVhfU0NfWDI5X09GRgkweDBmMAorKyNkZWZpbmUgTElOVVhfU0NfWDMwX09GRgkweDBmOAorKyNkZWZpbmUgTElOVVhfU0NfU1BfT0ZGCQkweDEwMAorKyNkZWZpbmUgTElOVVhfU0NfUENfT0ZGCQkweDEwOAorKyNkZWZpbmUgTElOVVhfU0NfUFNUQVRFX09GRgkweDExMAorLS0tIC9kZXYvbnVsbAorKysrIGIvc3JjL2FhcmNoNjQvcmVnbmFtZS5jCitAQCAtMCwwICsxLDEwNiBAQAorKy8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKysgICBDb3B5cmlnaHQgKEMpIDIwMTIgVG9tbWkgUmFudGFsYSA8dHQucmFudGFsYUBnbWFpbC5jb20+CisrICAgQ29weXJpZ2h0IChDKSAyMDEzIExpbmFybyBMaW1pdGVkCisrCisrVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGlidW53aW5kLgorKworK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyt3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisrZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisrcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisrdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKworK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisrCisrVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisrRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisrTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKytOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisrTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTgorK09GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorK1dJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKysKKysjaW5jbHVkZSAidW53aW5kX2kuaCIKKysKKytzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcmVnbmFtZVtdID0KKysgIHsKKysgICAgW1VOV19BQVJDSDY0X1gwXSA9ICJ4MCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMV0gPSAieDEiLAorKyAgICBbVU5XX0FBUkNINjRfWDJdID0gIngyIiwKKysgICAgW1VOV19BQVJDSDY0X1gzXSA9ICJ4MyIsCisrICAgIFtVTldfQUFSQ0g2NF9YNF0gPSAieDQiLAorKyAgICBbVU5XX0FBUkNINjRfWDVdID0gIng1IiwKKysgICAgW1VOV19BQVJDSDY0X1g2XSA9ICJ4NiIsCisrICAgIFtVTldfQUFSQ0g2NF9YN10gPSAieDciLAorKyAgICBbVU5XX0FBUkNINjRfWDhdID0gIng4IiwKKysgICAgW1VOV19BQVJDSDY0X1g5XSA9ICJ4OSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTBdID0gIngxMCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTFdID0gIngxMSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTJdID0gIngxMiIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTNdID0gIngxMyIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTRdID0gIngxNCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTVdID0gIngxNSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTZdID0gImlwMCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTddID0gImlwMSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMThdID0gIngxOCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMTldID0gIngxOSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjBdID0gIngyMCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjFdID0gIngyMSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjJdID0gIngyMiIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjNdID0gIngyMyIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjRdID0gIngyNCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjVdID0gIngyNSIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjZdID0gIngyNiIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjddID0gIngyNyIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjhdID0gIngyOCIsCisrICAgIFtVTldfQUFSQ0g2NF9YMjldID0gImZwIiwKKysgICAgW1VOV19BQVJDSDY0X1gzMF0gPSAibHIiLAorKyAgICBbVU5XX0FBUkNINjRfU1BdID0gInNwIiwKKysgICAgW1VOV19BQVJDSDY0X1BDXSA9ICJwYyIsCisrICAgIFtVTldfQUFSQ0g2NF9WMF0gPSAidjAiLAorKyAgICBbVU5XX0FBUkNINjRfVjFdID0gInYxIiwKKysgICAgW1VOV19BQVJDSDY0X1YyXSA9ICJ2MiIsCisrICAgIFtVTldfQUFSQ0g2NF9WM10gPSAidjMiLAorKyAgICBbVU5XX0FBUkNINjRfVjRdID0gInY0IiwKKysgICAgW1VOV19BQVJDSDY0X1Y1XSA9ICJ2NSIsCisrICAgIFtVTldfQUFSQ0g2NF9WNl0gPSAidjYiLAorKyAgICBbVU5XX0FBUkNINjRfVjddID0gInY3IiwKKysgICAgW1VOV19BQVJDSDY0X1Y4XSA9ICJ2OCIsCisrICAgIFtVTldfQUFSQ0g2NF9WOV0gPSAidjkiLAorKyAgICBbVU5XX0FBUkNINjRfVjEwXSA9ICJ2MTAiLAorKyAgICBbVU5XX0FBUkNINjRfVjExXSA9ICJ2MTEiLAorKyAgICBbVU5XX0FBUkNINjRfVjEyXSA9ICJ2MTIiLAorKyAgICBbVU5XX0FBUkNINjRfVjEzXSA9ICJ2MTMiLAorKyAgICBbVU5XX0FBUkNINjRfVjE0XSA9ICJ2MTQiLAorKyAgICBbVU5XX0FBUkNINjRfVjE1XSA9ICJ2MTUiLAorKyAgICBbVU5XX0FBUkNINjRfVjE2XSA9ICJ2MTYiLAorKyAgICBbVU5XX0FBUkNINjRfVjE3XSA9ICJ2MTciLAorKyAgICBbVU5XX0FBUkNINjRfVjE4XSA9ICJ2MTgiLAorKyAgICBbVU5XX0FBUkNINjRfVjE5XSA9ICJ2MTkiLAorKyAgICBbVU5XX0FBUkNINjRfVjIwXSA9ICJ2MjAiLAorKyAgICBbVU5XX0FBUkNINjRfVjIxXSA9ICJ2MjEiLAorKyAgICBbVU5XX0FBUkNINjRfVjIyXSA9ICJ2MjIiLAorKyAgICBbVU5XX0FBUkNINjRfVjIzXSA9ICJ2MjMiLAorKyAgICBbVU5XX0FBUkNINjRfVjI0XSA9ICJ2MjQiLAorKyAgICBbVU5XX0FBUkNINjRfVjI1XSA9ICJ2MjUiLAorKyAgICBbVU5XX0FBUkNINjRfVjI2XSA9ICJ2MjYiLAorKyAgICBbVU5XX0FBUkNINjRfVjI3XSA9ICJ2MjciLAorKyAgICBbVU5XX0FBUkNINjRfVjI4XSA9ICJ2MjgiLAorKyAgICBbVU5XX0FBUkNINjRfVjI5XSA9ICJ2MjkiLAorKyAgICBbVU5XX0FBUkNINjRfVjMwXSA9ICJ2MzAiLAorKyAgICBbVU5XX0FBUkNINjRfVjMxXSA9ICJ2MzEiLAorKyAgICBbVU5XX0FBUkNINjRfRlBTUl0gPSAiZnBzciIsCisrICAgIFtVTldfQUFSQ0g2NF9GUENSXSA9ICJmcGNyIiwKKysgIH07CisrCisrUFJPVEVDVEVEIGNvbnN0IGNoYXIgKgorK3Vud19yZWduYW1lICh1bndfcmVnbnVtX3QgcmVnKQorK3sKKysgIGlmIChyZWcgPCAodW53X3JlZ251bV90KSBBUlJBWV9TSVpFIChyZWduYW1lKSAmJiByZWduYW1lW3JlZ10gIT0gTlVMTCkKKysgICAgcmV0dXJuIHJlZ25hbWVbcmVnXTsKKysgIGVsc2UKKysgICAgcmV0dXJuICI/Pz8iOworK30KKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3NpZ2xvbmdqbXAuUworQEAgLTAsMCArMSwxMiBAQAorKwkvKiBEdW1teSBpbXBsZW1lbnRhdGlvbiBmb3Igbm93LiAgKi8KKysKKysJLmdsb2JhbCBfVUlfc2lnbG9uZ2ptcF9jb250CisrCS5nbG9iYWwgX1VJX2xvbmdqbXBfY29udAorKworK19VSV9zaWdsb25nam1wX2NvbnQ6CisrX1VJX2xvbmdqbXBfY29udDoKKysJcmV0CisrI2lmZGVmIF9fbGludXhfXworKyAvKiBXZSBkbyBub3QgbmVlZCBleGVjdXRhYmxlIHN0YWNrLiAgKi8KKysgLnNlY3Rpb24gIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKysjZW5kaWYKKy0tLSAvZGV2L251bGwKKysrKyBiL3NyYy9hYXJjaDY0L3Vud2luZF9pLmgKK0BAIC0wLDAgKzEsNDMgQEAKKysvKiBsaWJ1bndpbmQgLSBhIHBsYXRmb3JtLWluZGVwZW5kZW50IHVud2luZCBsaWJyYXJ5CisrICAgQ29weXJpZ2h0IChDKSAyMDA4IENvZGVTb3VyY2VyeQorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorKworK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKysKKytQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKythIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKysiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisrd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorK2Rpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKysKKytUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorKworK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisrTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRQorK0xJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKytPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKytXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4gICovCisrCisrI2lmbmRlZiB1bndpbmRfaV9oCisrI2RlZmluZSB1bndpbmRfaV9oCisrCisrI2luY2x1ZGUgPHN0ZGludC5oPgorKworKyNpbmNsdWRlIDxsaWJ1bndpbmQtYWFyY2g2NC5oPgorKworKyNpbmNsdWRlICJsaWJ1bndpbmRfaS5oIgorKworKyNkZWZpbmUgYWFyY2g2NF9sb2NrCQkJVU5XX09CSihsb2NrKQorKyNkZWZpbmUgYWFyY2g2NF9sb2NhbF9yZXN1bWUJCVVOV19PQkoobG9jYWxfcmVzdW1lKQorKyNkZWZpbmUgYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQJVU5XX09CSihsb2NhbF9hZGRyX3NwYWNlX2luaXQpCisrCisrZXh0ZXJuIHZvaWQgYWFyY2g2NF9sb2NhbF9hZGRyX3NwYWNlX2luaXQgKHZvaWQpOworK2V4dGVybiBpbnQgYWFyY2g2NF9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHVud19jdXJzb3JfdCAqY3Vyc29yLAorKwkJCSAgICAgdm9pZCAqYXJnKTsKKysKKysjZW5kaWYgLyogdW53aW5kX2lfaCAqLworLS0tIGEvc3JjL2NvcmVkdW1wL19VQ0RfYWNjZXNzX3JlZ19saW51eC5jCisrKysgYi9zcmMvY29yZWR1bXAvX1VDRF9hY2Nlc3NfcmVnX2xpbnV4LmMKK0BAIC0zOSw3ICszOSwxMCBAQCBfVUNEX2FjY2Vzc19yZWcgKHVud19hZGRyX3NwYWNlX3QgYXMsCisgICAgICAgcmV0dXJuIC1VTldfRUlOVkFMOworICAgICB9CisgCistI2lmIGRlZmluZWQoVU5XX1RBUkdFVF9BUk0pCisrI2lmIGRlZmluZWQoVU5XX1RBUkdFVF9BQVJDSDY0KQorKyAgaWYgKHJlZ251bSA8IDAgfHwgcmVnbnVtID49IFVOV19BQVJDSDY0X0ZQQ1IpCisrICAgIGdvdG8gYmFkcmVnOworKyNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9BUk0pCisgICBpZiAocmVnbnVtIDwgMCB8fCByZWdudW0gPj0gMTYpCisgICAgIGdvdG8gYmFkcmVnOworICNlbGlmIGRlZmluZWQoVU5XX1RBUkdFVF9TSCkKKy0tLSBhL3NyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMKKysrKyBiL3NyYy9wdHJhY2UvX1VQVF9yZWdfb2Zmc2V0LmMKK0BAIC0xLDYgKzEsNyBAQAorIC8qIGxpYnVud2luZCAtIGEgcGxhdGZvcm0taW5kZXBlbmRlbnQgdW53aW5kIGxpYnJhcnkKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBIZXdsZXR0LVBhY2thcmQgQ28KKyAJQ29udHJpYnV0ZWQgYnkgRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgorKyAgIENvcHlyaWdodCAoQykgMjAxMyBMaW5hcm8gTGltaXRlZAorIAorIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpYnVud2luZC4KKyAKK0BAIC01MDEsNiArNTAyLDQxIEBAIGNvbnN0IGludCBfVVBUX3JlZ19vZmZzZXRbVU5XX1JFR19MQVNUICsKKyAgICAgW1VOV19BUk1fUjE1XSAgICAgID0gMHgzYywKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfTUlQUykKKyAjZWxpZiBkZWZpbmVkKFVOV19UQVJHRVRfU0gpCisrI2VsaWYgZGVmaW5lZChVTldfVEFSR0VUX0FBUkNINjQpCisrICAgIFtVTldfQUFSQ0g2NF9YMF0gICAgICAgPSAweDAwLAorKyAgICBbVU5XX0FBUkNINjRfWDFdICAgICAgID0gMHgwOCwKKysgICAgW1VOV19BQVJDSDY0X1gyXSAgICAgICA9IDB4MTAsCisrICAgIFtVTldfQUFSQ0g2NF9YM10gICAgICAgPSAweDE4LAorKyAgICBbVU5XX0FBUkNINjRfWDRdICAgICAgID0gMHgyMCwKKysgICAgW1VOV19BQVJDSDY0X1g1XSAgICAgICA9IDB4MjgsCisrICAgIFtVTldfQUFSQ0g2NF9YNl0gICAgICAgPSAweDMwLAorKyAgICBbVU5XX0FBUkNINjRfWDddICAgICAgID0gMHgzOCwKKysgICAgW1VOV19BQVJDSDY0X1g4XSAgICAgICA9IDB4NDAsCisrICAgIFtVTldfQUFSQ0g2NF9YOV0gICAgICAgPSAweDQ4LAorKyAgICBbVU5XX0FBUkNINjRfWDEwXSAgICAgID0gMHg1MCwKKysgICAgW1VOV19BQVJDSDY0X1gxMV0gICAgICA9IDB4NTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMTJdICAgICAgPSAweDYwLAorKyAgICBbVU5XX0FBUkNINjRfWDEzXSAgICAgID0gMHg2OCwKKysgICAgW1VOV19BQVJDSDY0X1gxNF0gICAgICA9IDB4NzAsCisrICAgIFtVTldfQUFSQ0g2NF9YMTVdICAgICAgPSAweDc4LAorKyAgICBbVU5XX0FBUkNINjRfWDE2XSAgICAgID0gMHg4MCwKKysgICAgW1VOV19BQVJDSDY0X1gxN10gICAgICA9IDB4ODgsCisrICAgIFtVTldfQUFSQ0g2NF9YMThdICAgICAgPSAweDkwLAorKyAgICBbVU5XX0FBUkNINjRfWDE5XSAgICAgID0gMHg5OCwKKysgICAgW1VOV19BQVJDSDY0X1gyMF0gICAgICA9IDB4YTAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjFdICAgICAgPSAweGE4LAorKyAgICBbVU5XX0FBUkNINjRfWDIyXSAgICAgID0gMHhiMCwKKysgICAgW1VOV19BQVJDSDY0X1gyM10gICAgICA9IDB4YjgsCisrICAgIFtVTldfQUFSQ0g2NF9YMjRdICAgICAgPSAweGMwLAorKyAgICBbVU5XX0FBUkNINjRfWDI1XSAgICAgID0gMHhjOCwKKysgICAgW1VOV19BQVJDSDY0X1gyNl0gICAgICA9IDB4ZDAsCisrICAgIFtVTldfQUFSQ0g2NF9YMjddICAgICAgPSAweGQ4LAorKyAgICBbVU5XX0FBUkNINjRfWDI4XSAgICAgID0gMHhlMCwKKysgICAgW1VOV19BQVJDSDY0X1gyOV0gICAgICA9IDB4ZTgsCisrICAgIFtVTldfQUFSQ0g2NF9YMzBdICAgICAgPSAweGYwLAorKyAgICBbVU5XX0FBUkNINjRfU1BdICAgICAgID0gMHhmOCwKKysgICAgW1VOV19BQVJDSDY0X1BDXSAgICAgICA9IDB4MTAwLAorKyAgICBbVU5XX0FBUkNINjRfUFNUQVRFXSAgID0gMHgxMDgKKyAjZWxzZQorICMgZXJyb3IgRml4IG1lLgorICNlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwZjVjMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL0ZpeC10ZXN0LWNhc2UtbGluay1mYWlsdXJlLW9uLVBvd2VyUEMtc3lzdGVtcy13aXRoLUFsdGl2ZWMucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorRml4IHRlc3QgY2FzZSBsaW5rIGZhaWx1cmUgb24gUG93ZXJQQyBzeXN0ZW1zIHdpdGggQWx0aXZlYworCitVcHN0cmVhbS1TdGF0dXM6YmFja3BvcnQKKworT24gc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGNvbXBpbGVyIHN1cHBvcnRzIEFsdGl2ZWMgYnkgZGVmYXVsdCwKK3RoZSBsaWJ1bndpbmQgTWFrZWZpbGUgd2lsbCBhdHRlbXB0IHRvIGJ1aWxkIGFuIGV4dHJhIHRlc3QgY2FzZQorcHBjNjQtdGVzdC1hbHRpdmVjLiAgVW5mb3J0dW5hdGVseSwgdGhlIGxpbmsgc3RlcCB3aWxsIGZhaWwgc2luY2UKK3RoZSBNYWtlZmlsZSBkb2VzIG5vdCBhY3R1YWxseSBsaW5rIGFnYWluc3QgdGhlIGxpYnVud2luZCBsaWJyYXJ5LgorCitGaXhlZCBieSBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIExEQUREIG1hY3JvLgorCitTaWduZWQtb2ZmLWJ5OiBVbHJpY2ggV2VpZ2FuZCA8YWRkcmVzc0BoaWRkZW4+CistLS0KKyB0ZXN0cy9NYWtlZmlsZS5hbSB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCitkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuYW0gYi90ZXN0cy9NYWtlZmlsZS5hbQoraW5kZXggMGUzMDUzNi4uOWM3NjYyOCAxMDA2NDQKKy0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKysgYi90ZXN0cy9NYWtlZmlsZS5hbQorQEAgLTIwMSwzICsyMDEsNCBAQCBMaWE2NF90ZXN0X3Jic19MREFERCA9ICQoTElCVU5XSU5EX2xvY2FsKQorIExpYTY0X3Rlc3RfcmVhZG9ubHlfTERBREQgPSAkKExJQlVOV0lORF9sb2NhbCkKKyBpYTY0X3Rlc3RfZHluMV9MREFERCA9ICQoTElCVU5XSU5EKQorIGlhNjRfdGVzdF9zaWdfTERBREQgPSAkKExJQlVOV0lORCkKKytwcGM2NF90ZXN0X2FsdGl2ZWNfTERBREQgPSAkKExJQlVOV0lORCkKKy0tIAorMS44LjUKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvTGluay1saWJ1bndpbmQtdG8tbGliZ2NjX3MtcmF0aGVyLXRoYW4tbGliZ2NjLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTVjOTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLTEuMS9MaW5rLWxpYnVud2luZC10by1saWJnY2Nfcy1yYXRoZXItdGhhbi1saWJnY2MucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorRnJvbSA1MDhjYTE3YTdiZTAxZDFjYzk2MGQ5YTA3ZDBhZjQ1MTM5NDhmYjhkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KK0RhdGU6IEZyaSwgMjcgSnVuIDIwMTQgMDg6NDA6MzMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gTGluayBsaWJ1bndpbmQgdG8gbGliZ2NjX3MgcmF0aGVyIHRoYW4gbGliZ2NjCisKK0ZvciBzb21lIGFyY2hpdGVjdHVyZXMsIC1sZ2NjIGFuZCAtbGdjY19zIGFyZSBub3QgZXF1aXZhbGVudC4gT24gQVJNIGZvcgorZXhhbXBsZSwgbGliZ2NjX3Muc28uMSBjb250YWlucyBzb21lIHN5bWJvbHMgbmVlZGVkIGJ5IGxpYnVud2luZCB3aGljaAorYXJlIG5vdCBwcmVzZW50IGluIGxpYmdjYy4KKworVGhpcyBjYXVzZXMgdGhlIGZvbGxvd2luZyBsaW5rIGVycm9yIHdoZW4gYnVpbGRpbmcgdGhlIFguT3JnIFggc2VydmVyCit3aXRoIGxpYnVud2luZCBzdXBwb3J0OgorCisJICBDQ0xEICAgICBYb3JnCisJL3Vzci9saWIvbGlidW53aW5kLnNvOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBfX2FlYWJpX3Vud2luZF9jcHBfcHIwJworCS91c3IvbGliL2xpYnVud2luZC5zbzogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgX19hZWFiaV91bndpbmRfY3BwX3ByMScKKworTGlua2luZyBhZ2FpbnN0IGxpYmdjY19zIGV4cGxpY2l0bHkgc29sdmVzIHRoaXMgcHJvYmxlbS4KKworVXBzdHJlYW0tU3RhdHVzOiBCYWNrcG9ydAorCitTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgorU2lnbmVkLW9mZi1ieTogSm9uYXRoYW4gTGl1IDxuZXQxNDdAZ21haWwuY29tPgorLS0tCisgY29uZmlndXJlLmFjIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorCitkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCitpbmRleCBjZmZlMTliLi4zYmViNWYyIDEwMDY0NAorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC0yNTgsNyArMjU4LDcgQEAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbWyNpZm5kZWYgX19JTlRFTF9DT01QSUxFUgorIAorIGlmIHRlc3QgeCRHQ0MgPSB4eWVzIC1hIHgkaW50ZWxfY29tcGlsZXIgIT0geHllczsgdGhlbgorICAgQ0ZMQUdTPSIke0NGTEFHU30gLWZleGNlcHRpb25zIC1XYWxsIC1Xc2lnbi1jb21wYXJlIgorLSAgTElCQ1JUUz0iLWxnY2MiCisrICBMSUJDUlRTPSItbGdjY19zIgorIGZpCisgQUNfTVNHX1JFU1VMVChbJGludGVsX2NvbXBpbGVyXSkKKyAKKy0tIAorMi4zLjIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidW53aW5kL2xpYnVud2luZC0xLjEvU3VwcG9ydC1idWlsZGluZy13aXRoLW9sZGVyLWNvbXBpbGVycy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4YjcwMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQtMS4xL1N1cHBvcnQtYnVpbGRpbmctd2l0aC1vbGRlci1jb21waWxlcnMucGF0Y2gKQEAgLTAsMCArMSw3MiBAQAorRnJvbSAxMGIwNjRmZmU5MDJkNWFmMzFiYjQ5YmQ4ZTRmMDNjNTQ1ZjhkNDYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgorRGF0ZTogVHVlLCAxMyBOb3YgMjAxMiAxMToxOTo0NyArMDEwMAorU3ViamVjdDogW1BBVENIXSBTdXBwb3J0IGJ1aWxkaW5nIHdpdGggb2xkZXIgY29tcGlsZXJzLgorCitBZGQgYSBjaGVjayBmb3IgX19idWlsdGluX3VucmVhY2hhYmxlLgorCitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKy0tLQorIGNvbmZpZ3VyZS5hYyAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKKyBpbmNsdWRlL2xpYnVud2luZF9pLmggfCAgICA2ICsrKysrKworIHNyYy9hcm0vR3Jlc3VtZS5jICAgICB8ICAgIDIgKy0KKyBzcmMvc2gvR3Jlc3VtZS5jICAgICAgfCAgICAyICstCisgNCBmaWxlcyBjaGFuZ2VkLCAxOSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCistLS0gYS9jb25maWd1cmUuYWMKKysrKyBiL2NvbmZpZ3VyZS5hYworQEAgLTI4NSw2ICsyODUsMTcgQEAgaWYgdGVzdCB4JGhhdmVfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSA9CisgZmkKKyBBQ19NU0dfUkVTVUxUKFskaGF2ZV9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlXSkKKyAKKytBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBfX2J1aWx0aW5fdW5yZWFjaGFibGVdKQorK0FDX0xJTktfSUZFTFNFKAorKyAgW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW19fYnVpbHRpbl91bnJlYWNoYWJsZSgpXV0pXSwKKysgIFtoYXZlX19idWlsdGluX3VucmVhY2hhYmxlPXllc10sCisrICBbaGF2ZV9fYnVpbHRpbl91bnJlYWNoYWJsZT1ub10pCisraWYgdGVzdCB4JGhhdmVfX2J1aWx0aW5fdW5yZWFjaGFibGUgPSB4eWVzOyB0aGVuCisrICBBQ19ERUZJTkUoW0hBVkVfX0JVSUxUSU5fVU5SRUFDSEFCTEVdLCBbMV0sCisrICAgICAgICAgICAgW0RlZmluZWQgaWYgX19idWlsdGluX3VucmVhY2hhYmxlKCkgaXMgYXZhaWxhYmxlXSkKKytmaQorK0FDX01TR19SRVNVTFQoWyRoYXZlX19idWlsdGluX3VucmVhY2hhYmxlXSkKKysKKyBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBfX3N5bmMgYXRvbWljc10pCisgQUNfTElOS19JRkVMU0UoCisgICBbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbCistLS0gYS9pbmNsdWRlL2xpYnVud2luZF9pLmgKKysrKyBiL2luY2x1ZGUvbGlidW53aW5kX2kuaAorQEAgLTcyLDYgKzcyLDEyIEBAIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREUKKyAjIGVuZGlmCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoSEFWRV9fQlVJTFRJTl9VTlJFQUNIQUJMRSkKKysjIGRlZmluZSB1bnJlYWNoYWJsZSgpIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpCisrI2Vsc2UKKysjIGRlZmluZSB1bnJlYWNoYWJsZSgpIGRvIHsgfSB3aGlsZSAoMSkKKysjZW5kaWYKKysKKyAjaWZkZWYgREVCVUcKKyAjIGRlZmluZSBVTldfREVCVUcJMQorICNlbHNlCistLS0gYS9zcmMvYXJtL0dyZXN1bWUuYworKysrIGIvc3JjL2FybS9HcmVzdW1lLmMKK0BAIC05Niw3ICs5Niw3IEBAIGFybV9sb2NhbF9yZXN1bWUgKHVud19hZGRyX3NwYWNlX3QgYXMsIHUKKyAJOiA6ICJyIiAoYy0+c2lnY29udGV4dF9zcCksICJyIiAoYy0+c2lnY29udGV4dF9wYykKKyAgICAgICApOworICAgIH0KKy0gIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOworKyAgdW5yZWFjaGFibGUoKTsKKyAjZWxzZQorICAgcHJpbnRmICgiJXM6IGltcGxlbWVudCBtZVxuIiwgX19GVU5DVElPTl9fKTsKKyAjZW5kaWYKKy0tLSBhL3NyYy9zaC9HcmVzdW1lLmMKKysrKyBiL3NyYy9zaC9HcmVzdW1lLmMKK0BAIC0xMDksNyArMTA5LDcgQEAgc2hfbG9jYWxfcmVzdW1lICh1bndfYWRkcl9zcGFjZV90IGFzLCB1bgorIAkgICJyIiAoYy0+c2lnY29udGV4dF9wYykKKyAgICAgICApOworICAgIH0KKy0gIF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpOworKyAgdW5yZWFjaGFibGUoKTsKKyAjZW5kaWYKKyAgIHJldHVybiAtVU5XX0VJTlZBTDsKKyB9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmQuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2NjBhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kLmluYwpAQCAtMCwwICsxLDMxIEBACitERVNDUklQVElPTiA9ICJhIHBvcnRhYmxlIGFuZCBlZmZpY2llbnQgQyBwcm9ncmFtbWluZyBpbnRlcmZhY2UgKEFQSSkgdG8gZGV0ZXJtaW5lIHRoZSBjYWxsLWNoYWluIG9mIGEgcHJvZ3JhbSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubm9uZ251Lm9yZy9saWJ1bndpbmQiCitMSUNFTlNFID0gIk1JVCIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTNmY2VkMTFkNmRmNzE5YjQ3NTA1ODM3YTUxYzE2YWU1IgorREVQRU5EUyArPSAibGliYXRvbWljLW9wcyIKKworU1JDX1VSSSA9ICIke1NBVkFOTkFIX05PTkdOVV9NSVJST1J9LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmd6IgorCitpbmhlcml0IGF1dG90b29scworCitQQUNLQUdFQ09ORklHID8/PSAiIgorUEFDS0FHRUNPTkZJR1tsem1hXSA9ICItLWVuYWJsZS1taW5pZGVidWdpbmZvLC0tZGlzYWJsZS1taW5pZGVidWdpbmZvLHh6IgorCitFWFRSQV9PRUNPTkZfYXJtID0gIi0tZW5hYmxlLWRlYnVnLWZyYW1lIgorRVhUUkFfT0VDT05GX2FhcmNoNjQgPSAiLS1lbmFibGUtZGVidWctZnJhbWUiCisKK0NGTEFHUyArPSAiJHtBVE9NSUNPUFN9IgorQVRPTUlDT1BTX2FybXY1ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgorQVRPTUlDT1BTX2FybXY0ID0gIi1EQU9fVVNFX1BUSFJFQURfREVGUz0xIgorQVRPTUlDT1BTID89ICIiCisKK0xERkxBR1NfYXBwZW5kX3g4NiA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX3g4Ni02NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKKworTERGTEFHU19hcHBlbmRfYXJtID0gIiAtZnVzZS1sZD1nb2xkIgorTERGTEFHU19hcHBlbmRfYWFyY2g2NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKKworTERGTEFHU19hcHBlbmRfcG93ZXJwYyA9ICIgLWZ1c2UtbGQ9Z29sZCIKK0xERkxBR1NfYXBwZW5kX3Bvd2VycGM2NCA9ICIgLWZ1c2UtbGQ9Z29sZCIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVud2luZC9saWJ1bndpbmRfMS4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODJjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1bndpbmQvbGlidW53aW5kXzEuMS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIGxpYnVud2luZC5pbmMKKworU1JDX1VSSSArPSAiXAorICAgIGZpbGU6Ly9TdXBwb3J0LWJ1aWxkaW5nLXdpdGgtb2xkZXItY29tcGlsZXJzLnBhdGNoIFwKKyAgICBmaWxlOi8vQUFyY2g2NC1wb3J0LnBhdGNoIFwKKyAgICBmaWxlOi8vRml4LXRlc3QtY2FzZS1saW5rLWZhaWx1cmUtb24tUG93ZXJQQy1zeXN0ZW1zLXdpdGgtQWx0aXZlYy5wYXRjaCBcCisgICAgZmlsZTovL0xpbmstbGlidW53aW5kLXRvLWxpYmdjY19zLXJhdGhlci10aGFuLWxpYmdjYy5wYXRjaCBcCisgICAgZmlsZTovLzAwMDEtSW52YWxpZC1kd2FyZi1vcGNvZGVzLWNhbi1jYXVzZS1yZWZlcmVuY2VzLWJleW9uZC10aC5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJmYjRlYTJmNmZiYmU0NWJmMDMyY2QzNmU1ODY4ODNjZSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI5ZGZlMGZjYWUyYTg2NmRlOWQzOTQyYzY2OTk1ZTRiNDYwMjMwNDQ2ODg3ZGJkYWIzMDJkNDFhOGFlZThkMDlhIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1LzAwMDEtdWF0b21pYy1TcGVjaWZ5LWNvbXBsZXRlLXR5cGVzLWZvci1hdG9taWMtZnVuY3Rpb24tYy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkMGJiZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS8wMDAxLXVhdG9taWMtU3BlY2lmeS1jb21wbGV0ZS10eXBlcy1mb3ItYXRvbWljLWZ1bmN0aW9uLWMucGF0Y2gKQEAgLTAsMCArMSwxNTggQEAKK0Zyb20gNmFmNzkwODE4ZDA3NGMxMDNjNDc5N2YxY2U3NjQ4OTZmMTgzZTAyOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CitEYXRlOiBTYXQsIDIyIEF1ZyAyMDE1IDIxOjM1OjAzIC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIHVhdG9taWM6IFNwZWNpZnkgY29tcGxldGUgdHlwZXMgZm9yIGF0b21pYyBmdW5jdGlvbiBjYWxscworCitUaGlzIHdhcyB1bmVhcnRoZWQgYnkgY2xhbmcgY29tcGlsZXIgd2hlcmUgaXQgY29tcGxhaW5lZCBhYm91dCBwYXJhbWV0ZXIKK21pc21hdGNoLCBnY2MgZG9lc250IG5vdGljZSB0aGlzCisKK3VyY3UvdWF0b21pYy9nZW5lcmljLmg6MTkwOjEwOiBlcnJvcjogYWRkcmVzcyBhcmd1bWVudCB0byBhdG9taWMgYnVpbHRpbgorbXVzdCBiZSBhIHBvaW50ZXIgdG8gaW50ZWdlciBvciBwb2ludGVyICgndm9pZCAqJyBpbnZhbGlkKQorICAgICAgICAgICAgICAgIHJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisKK0ZpeGVkIGFsbCBpbnN0YW5jZXMgdGh1c2x5CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogU3VibWl0dGVkCisKKyB1cmN1L3VhdG9taWMvZ2VuZXJpYy5oIHwgNDAgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCAyMCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL3VyY3UvdWF0b21pYy9nZW5lcmljLmggYi91cmN1L3VhdG9taWMvZ2VuZXJpYy5oCitpbmRleCAzN2Y1OWNjLi4wMDQ2ZmZkIDEwMDY0NAorLS0tIGEvdXJjdS91YXRvbWljL2dlbmVyaWMuaAorKysrIGIvdXJjdS91YXRvbWljL2dlbmVyaWMuaAorQEAgLTY1LDE3ICs2NSwxNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2NtcHhjaGcodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBvbGQsCisgCXN3aXRjaCAobGVuKSB7CisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19CWVRFCisgCWNhc2UgMToKKy0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMShhZGRyLCBvbGQsIF9uZXcpOworKwkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgb2xkLCBfbmV3KTsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMihhZGRyLCBvbGQsIF9uZXcpOworKwkJcmV0dXJuIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCBvbGQsIF9uZXcpOworICNlbmRpZgorIAljYXNlIDQ6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzQoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfNCgodW5zaWduZWQgaW50ICopYWRkciwgb2xkLCBfbmV3KTsKKyAjaWYgKENBQV9CSVRTX1BFUl9MT05HID09IDY0KQorIAljYXNlIDg6CistCQlyZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzgoYWRkciwgb2xkLCBfbmV3KTsKKysJCXJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXBfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIG9sZCwgX25ldyk7CisgI2VuZGlmCisgCX0KKyAJX3VhdG9taWNfbGlua19lcnJvcigpOworQEAgLTEwMCwyMCArMTAwLDIwIEBAIHZvaWQgX3VhdG9taWNfYW5kKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8xKGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfYW5kX2FuZF9mZXRjaF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAjaWZkZWYgVUFUT01JQ19IQVNfQVRPTUlDX1NIT1JUCisgCWNhc2UgMjoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzIoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzIoKHVuc2lnbmVkIHNob3J0IGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCWNhc2UgNDoKKy0JCV9fc3luY19hbmRfYW5kX2ZldGNoXzQoYWRkciwgdmFsKTsKKysJCV9fc3luY19hbmRfYW5kX2ZldGNoXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfOChhZGRyLCB2YWwpOworKwkJX19zeW5jX2FuZF9hbmRfZmV0Y2hfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgCX0KK0BAIC0xMzksMjAgKzEzOSwyMCBAQCB2b2lkIF91YXRvbWljX29yKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzEoYWRkciwgdmFsKTsKKysJCV9fc3luY19vcl9hbmRfZmV0Y2hfMSgodW5zaWduZWQgY2hhciAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2VuZGlmCisgI2lmZGVmIFVBVE9NSUNfSEFTX0FUT01JQ19TSE9SVAorIAljYXNlIDI6CistCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzIoYWRkciwgdmFsKTsKKysJCV9fc3luY19vcl9hbmRfZmV0Y2hfMigodW5zaWduZWQgc2hvcnQgaW50ICopYWRkciwgdmFsKTsKKyAJCXJldHVybjsKKyAjZW5kaWYKKyAJY2FzZSA0OgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF80KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIHZhbCk7CisgCQlyZXR1cm47CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJX19zeW5jX29yX2FuZF9mZXRjaF84KGFkZHIsIHZhbCk7CisrCQlfX3N5bmNfb3JfYW5kX2ZldGNoXzgoKHVuc2lnbmVkIGxvbmcgKilhZGRyLCB2YWwpOworIAkJcmV0dXJuOworICNlbmRpZgorIAl9CitAQCAtMTgwLDE3ICsxODAsMTcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19hZGRfcmV0dXJuKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLAorIAlzd2l0Y2ggKGxlbikgeworICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfQllURQorIAljYXNlIDE6CistCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfMShhZGRyLCB2YWwpOworKwkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzEoKHVuc2lnbmVkIGNoYXIgKilhZGRyLCB2YWwpOworICNlbmRpZgorICNpZmRlZiBVQVRPTUlDX0hBU19BVE9NSUNfU0hPUlQKKyAJY2FzZSAyOgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzIoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCB2YWwpOworICNlbmRpZgorIAljYXNlIDQ6CistCQlyZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2hfNChhZGRyLCB2YWwpOworKwkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzQoKHVuc2lnbmVkIGludCAqKWFkZHIsIHZhbCk7CisgI2lmIChDQUFfQklUU19QRVJfTE9ORyA9PSA2NCkKKyAJY2FzZSA4OgorLQkJcmV0dXJuIF9fc3luY19hZGRfYW5kX2ZldGNoXzgoYWRkciwgdmFsKTsKKysJCXJldHVybiBfX3N5bmNfYWRkX2FuZF9mZXRjaF84KCh1bnNpZ25lZCBsb25nICopYWRkciwgdmFsKTsKKyAjZW5kaWYKKyAJfQorIAlfdWF0b21pY19saW5rX2Vycm9yKCk7CitAQCAtMjE4LDcgKzIxOCw3IEBAIHVuc2lnbmVkIGxvbmcgX3VhdG9taWNfZXhjaGFuZ2Uodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwsIGludCBsZW4pCisgCisgCQlkbyB7CisgCQkJb2xkID0gdWF0b21pY19yZWFkKCh1bnNpZ25lZCBjaGFyICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8xKGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8xKCh1bnNpZ25lZCBjaGFyICopYWRkciwgb2xkLCB2YWwpKTsKKyAKKyAJCXJldHVybiBvbGQ7CisgCX0KK0BAIC0yMzAsNyArMjMwLDcgQEAgdW5zaWduZWQgbG9uZyBfdWF0b21pY19leGNoYW5nZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCwgaW50IGxlbikKKyAKKyAJCWRvIHsKKyAJCQlvbGQgPSB1YXRvbWljX3JlYWQoKHVuc2lnbmVkIHNob3J0ICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yKGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yKCh1bnNpZ25lZCBzaG9ydCBpbnQgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorQEAgLTI0MSw3ICsyNDEsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgaW50ICopYWRkcik7CistCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF80KGFkZHIsIG9sZCwgdmFsKSk7CisrCQl9IHdoaWxlICghX19zeW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF80KCh1bnNpZ25lZCBpbnQgKilhZGRyLCBvbGQsIHZhbCkpOworIAorIAkJcmV0dXJuIG9sZDsKKyAJfQorQEAgLTI1Miw3ICsyNTIsNyBAQCB1bnNpZ25lZCBsb25nIF91YXRvbWljX2V4Y2hhbmdlKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsLCBpbnQgbGVuKQorIAorIAkJZG8geworIAkJCW9sZCA9IHVhdG9taWNfcmVhZCgodW5zaWduZWQgbG9uZyAqKWFkZHIpOworLQkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfOChhZGRyLCBvbGQsIHZhbCkpOworKwkJfSB3aGlsZSAoIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfOCgodW5zaWduZWQgbG9uZyAqKWFkZHIsIG9sZCwgdmFsKSk7CisgCisgCQlyZXR1cm4gb2xkOworIAl9CistLSAKKzIuMS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9SZXZlcnQtQmxhY2tsaXN0LUFSTS1nY2MtNC44LjAtNC44LjEtNC44LjIucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWE3MzgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1cmN1L2xpYnVyY3UvUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoCkBAIC0wLDAgKzEsNDcgQEAKK0Zyb20gN2IzZGYxMDAzNDYxMjhkNzgwZjIxOGI4ODFkNTYzZDFmZDEyZTMxMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEpvbmF0aGFuIExpdSA8bmV0MTQ3QGdtYWlsLmNvbT4KK0RhdGU6IE1vbiwgMjAgT2N0IDIwMTQgMTM6NDY6MTAgKzExMDAKK1N1YmplY3Q6IFtQQVRDSF0gUmV2ZXJ0ICJCbGFja2xpc3QgQVJNIGdjYyA0LjguMCwgNC44LjEsIDQuOC4yIgorCitUaGlzIHJldmVydHMgY29tbWl0IDRiNzkzMTBhYTNkNDA4YmEzMGZlZTAyY2M0OTdhNjgwNzJkMzhhOTkuCitPRS1Db3JlIGlzIHVzaW5nIGEgcGF0Y2hlZCBHQ0MgNC44LjIgd2hpY2ggaXMgYWJsZSB0byBjb21waWxlIGxpYnVyY3UKK3Byb3Blcmx5LgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW09FIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBMaXUgPG5ldDE0N0BnbWFpbC5jb20+CistLS0KKyB1cmN1L2NvbXBpbGVyLmggfCAxOSAtLS0tLS0tLS0tLS0tLS0tLS0tCisgMSBmaWxlIGNoYW5nZWQsIDE5IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvdXJjdS9jb21waWxlci5oIGIvdXJjdS9jb21waWxlci5oCitpbmRleCAxZTMwOTAzLi4xOTUzNGYwIDEwMDY0NAorLS0tIGEvdXJjdS9jb21waWxlci5oCisrKysgYi91cmN1L2NvbXBpbGVyLmgKK0BAIC0xMDgsMjMgKzEwOCw0IEBACisgCisgI2RlZmluZSBDQUFfQVJSQVlfU0laRSh4KQkoc2l6ZW9mKHgpIC8gc2l6ZW9mKCh4KVswXSkpCisgCistLyoKKy0gKiBEb24ndCBhbGxvdyBjb21waWxpbmcgd2l0aCBidWdneSBjb21waWxlci4KKy0gKi8KKy0KKy0jaWZkZWYgX19HTlVDX18KKy0jIGRlZmluZSBVUkNVX0dDQ19WRVJTSU9OCShfX0dOVUNfXyAqIDEwMDAwIFwKKy0JCQkJKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCBcCistCQkJCSsgX19HTlVDX1BBVENITEVWRUxfXykKKy0KKy0vKgorLSAqIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9NTg4NTQKKy0gKi8KKy0jIGlmZGVmIF9fQVJNRUxfXworLSMgIGlmIFVSQ1VfR0NDX1ZFUlNJT04gPj0gNDA4MDAgJiYgVVJDVV9HQ0NfVkVSU0lPTiA8PSA0MDgwMgorLSMgICBlcnJvciBZb3VyIGdjYyB2ZXJzaW9uIHByb2R1Y2VzIGNsb2JiZXJlZCBmcmFtZSBhY2Nlc3NlcworLSMgIGVuZGlmCistIyBlbmRpZgorLSNlbmRpZgorLQorICNlbmRpZiAvKiBfVVJDVV9DT01QSUxFUl9IICovCistLSAKKzIuMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1L2FhcmNoNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjYzhjMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdS9hYXJjaDY0LnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK2xpYnVjcnU6IHJlY29nbml6ZSBhYXJjaDY0CisKK01ha2UgdGhlIHNhbWUgYXMgImFybSIgaW50ZXJuYWxseS4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IGpvZS5zbGF0ZXJAd2luZHJpdmVyLmNvbQorCisKKy0tLSBhL2NvbmZpZ3VyZS5hYworKysrIGIvY29uZmlndXJlLmFjCitAQCAtNzcsNiArNzcsNyBAQCBBU19DQVNFKFskaG9zdF9jcHVdLAorIAlbYWxwaGEqXSwgW0FSQ0hUWVBFPSJhbHBoYSJdLAorIAlbaWE2NF0sIFtBUkNIVFlQRT0iZ2NjIl0sCisgCVthcm0qXSwgW0FSQ0hUWVBFPSJhcm0iXSwKKysJW2FhcmNoNjRdLCBbQVJDSFRZUEU9ImFybSJdLAorIAlbbWlwcypdLCBbQVJDSFRZUEU9Im1pcHMiXSwKKyAJW3RpbGUqXSwgW0FSQ0hUWVBFPSJnY2MiXSwKKyAJW0FSQ0hUWVBFPSJ1bmtub3duIl0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVyY3UvbGlidXJjdV8wLjguNy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2Y0ZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXJjdS9saWJ1cmN1XzAuOC43LmJiCkBAIC0wLDAgKzEsMjEgQEAKK1NVTU1BUlkgPSAiVXNlcnNwYWNlIFJDVSAocmVhZC1jb3B5LXVwZGF0ZSkgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly9sdHRuZy5vcmcvdXJjdSIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL2x0dG5nLm9yZy9wcm9qZWN0L2lzc3VlcyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsgJiBNSVQtc3R5bGUiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT0wZjA2MGMzMGEyNzkyMmNlOWMwZDU1N2E2MzliNGZhMyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly91cmN1Lmg7YmVnaW5saW5lPTQ7ZW5kbGluZT0zMjttZDU9NGRlMGQ2OGQzYTk5NzY0MzcxNTAzNmQyMjA5YWUxZDkgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vdXJjdS91YXRvbWljL3g4Ni5oO2JlZ2lubGluZT00O2VuZGxpbmU9MjE7bWQ1PTIyMDU1MmY3MmM1NWIxMDJmMmVlMzU5Mjk3MzRlZjQyIgorCitTUkNfVVJJID0gImh0dHA6Ly9sdHRuZy5vcmcvZmlsZXMvdXJjdS91c2Vyc3BhY2UtcmN1LSR7UFZ9LnRhci5iejIgXAorICAgICAgICAgICBmaWxlOi8vUmV2ZXJ0LUJsYWNrbGlzdC1BUk0tZ2NjLTQuOC4wLTQuOC4xLTQuOC4yLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2FhcmNoNjQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vMDAwMS11YXRvbWljLVNwZWNpZnktY29tcGxldGUtdHlwZXMtZm9yLWF0b21pYy1mdW5jdGlvbi1jLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI3YTZlZTE3ODcxZDMxMjI2ZGIzZjYxOGUyODM1MWQyMiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJiNTIzZjIyYzQ3MjZjYTZiYjc3YTc3ZDI1OGU3NmQ4YzMzYzg5NzI0NDMzYmQ2NTMxMzAyNGI5OGU1NWM0Mjk1IgorCitTID0gIiR7V09SS0RJUn0vdXNlcnNwYWNlLXJjdS0ke1BWfSIKK0NGTEFHU19hcHBlbmRfbGliYy11Y2xpYmMgPSAiIC1EX0dOVV9TT1VSQ0UiCitpbmhlcml0IGF1dG90b29scwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXQvMDAwMS11c2IuaC1JbmNsdWRlLXN5cy10eXBlcy5oLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ODQ0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdC8wMDAxLXVzYi5oLUluY2x1ZGUtc3lzLXR5cGVzLmgucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorRnJvbSAzNDBmOTExZjllM2Y0ZmY2YjAxNjgyYzUzNDFjOTU5MDYwNzgyYWYyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogS2hlbSBSYWogPHJhai5raGVtQGdtYWlsLmNvbT4KK0RhdGU6IFRodSwgMiBBcHIgMjAxNSAxOToxODo0NSAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2IuaDogSW5jbHVkZSBzeXMvdHlwZXMuaAorCitXZSBuZWVkIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpbmdzIGxpa2UgdV9pbnRYX3QKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KKyBsaWJ1c2IvdXNiLmggfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvbGlidXNiL3VzYi5oIGIvbGlidXNiL3VzYi5oCitpbmRleCA4NGU3MzBmLi5jYWZmYWUyIDEwMDY0NAorLS0tIGEvbGlidXNiL3VzYi5oCisrKysgYi9saWJ1c2IvdXNiLmgKK0BAIC0zMSw2ICszMSw4IEBACisgCisgI2luY2x1ZGUgPGRpcmVudC5oPgorIAorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKysKKyAvKgorICAqIFVTQiBzcGVjIGluZm9ybWF0aW9uCisgICoKKy0tIAorMi4xLjQKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiLWNvbXBhdF8wLjEuNS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY4NzJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlidXNiL2xpYnVzYi1jb21wYXRfMC4xLjUuYmIKQEAgLTAsMCArMSwzOSBAQAorU1VNTUFSWSA9ICJsaWJ1c2ItMC4xIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIGxpYnVzYjEiCitERVNDUklQVElPTiA9ICJsaWJ1c2ItMC4xIGNvbXBhdGlibGUgbGF5ZXIgZm9yIGxpYnVzYjEsIGEgZHJvcC1pbiByZXBsYWNlbWVudCBcCit0aGF0IGFpbXMgdG8gbG9vaywgZmVlbCBhbmQgYmVoYXZlIGV4YWN0bHkgbGlrZSBsaWJ1c2ItMC4xIgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnLyIKK0JVR1RSQUNLRVIgPSAiaHR0cDovL3d3dy5saWJ1c2Iub3JnL3JlcG9ydCIKK1NFQ1RJT04gPSAibGlicyIKKworTElDRU5TRSA9ICJMR1BMdjIuMSsiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT1mMmFjNWYzYWM0ODM1ZThmOTEzMjRhMjZhNTkwYTQyMyIKK0RFUEVORFMgPSAibGlidXNiMSIKKworIyBGZXcgcGFja2FnZXMgYXJlIGtub3duIG5vdCB0byB3b3JrIHdpdGggbGlidXNiLWNvbXBhdCAoZS5nLiBsaWJtdHAtMS4wLjApLAorIyBzbyBoZXJlIGxpYnVzYi0wLjEgaXMgcmVtb3ZlZCBjb21wbGV0ZWx5IGluc3RlYWQgb2YgYWRkaW5nIHZpcnR1YWwvbGlidXNiMC4KKyMgQmVzaWRlcywgbGlidXNiLTAuMSB1c2VzIGEgcGVyIDFtcyBwb2xsaW5nIHRoYXQgaHVydHMgYSBsb3QgdG8gcG93ZXIKKyMgY29uc3VtcHRpb24uCitQUk9WSURFUyA9ICJsaWJ1c2IgdmlydHVhbC9saWJ1c2IwIgorQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgorCitQRSA9ICIxIgorCitTUkNfVVJJID0gIiR7U09VUkNFRk9SR0VfTUlSUk9SfS9saWJ1c2IvbGlidXNiLWNvbXBhdC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXNiLmgtSW5jbHVkZS1zeXMtdHlwZXMuaC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjc4MGI2YTc1OGExZTJjMjk0M2JkYmY3ZmFmNzQwZTQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNDA0ZWY0YjZiMzI0YmU3OWFjMWJmYjNkODM5ZWFjODYwZmJjOTI5ZTZhY2IxZWY4ODc5M2E2ZWEzMjhiYzU1YSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9saWJ1c2ItY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBwa2djb25maWcgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlCisKK0VYVFJBX09FQ09ORiA9ICItLWxpYmRpcj0ke2Jhc2VfbGliZGlyfSIKKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisJaW5zdGFsbCAtZCAke0R9JHtsaWJkaXJ9CisJaWYgWyAhICR7RH0ke2xpYmRpcn0gLWVmICR7RH0ke2Jhc2VfbGliZGlyfSBdOyB0aGVuCisJCW12ICR7RH0ke2Jhc2VfbGliZGlyfS9wa2djb25maWcgJHtEfSR7bGliZGlyfQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ1c2IvbGlidXNiMV8xLjAuMTkuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIwZTFmYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnVzYi9saWJ1c2IxXzEuMC4xOS5iYgpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIlVzZXJzcGFjZSBsaWJyYXJ5IHRvIGFjY2VzcyBVU0IgKHZlcnNpb24gMS4wKSIKK0hPTUVQQUdFID0gImh0dHA6Ly9saWJ1c2Iuc2YubmV0IgorQlVHVFJBQ0tFUiA9ICJodHRwOi8vd3d3LmxpYnVzYi5vcmcvcmVwb3J0IgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIkxHUEx2Mi4xKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWZiYzA5MzkwMTg1N2ZjZDExOGYwNjVmOTAwOTgyYzI0IgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKK1NSQ19VUkkgPSAiJHtTT1VSQ0VGT1JHRV9NSVJST1J9L2xpYnVzYi9saWJ1c2ItJHtQVn0udGFyLmJ6MiBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiZjllMmJiNTg3OTk2ODQ2N2U1Y2E3NTZjYjRlMWZhN2UiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmM1MDJjODE2MDAyZjkwZDRmNzYwNTBhNjQyOWMzYTdlMGQ4NDIwNDIyMmNiZmYyZGNlOTVkZDc3M2JhNjg0MCIKKworUyA9ICIke1dPUktESVJ9L2xpYnVzYi0ke1BWfSIKKworaW5oZXJpdCBhdXRvdG9vbHMgcGtnY29uZmlnCisKKyMgRG9uJ3QgY29uZmlndXJlIHVkZXYgYnkgZGVmYXVsdCBzaW5jZSBpdCB3aWxsIGNhdXNlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZWN5IHdpdGggdWRldiBwYWNrYWdlLCB3aGljaCBkZXBlbmRzIG9uIGxpYnVzYgorRVhUUkFfT0VDT05GID0gIi0tbGliZGlyPSR7YmFzZV9saWJkaXJ9IC0tZGlzYWJsZS11ZGV2IgorCitkb19pbnN0YWxsX2FwcGVuZCgpIHsKKwlpbnN0YWxsIC1kICR7RH0ke2xpYmRpcn0KKwlpZiBbICEgJHtEfSR7bGliZGlyfSAtZWYgJHtEfSR7YmFzZV9saWJkaXJ9IF07IHRoZW4KKwkJbXYgJHtEfSR7YmFzZV9saWJkaXJ9L3BrZ2NvbmZpZyAke0R9JHtsaWJkaXJ9CisJZmkKK30KKworRklMRVNfJHtQTn0gKz0gIiR7YmFzZV9saWJkaXJ9Lyouc28uKiIKKworRklMRVNfJHtQTn0tZGV2ICs9ICIke2Jhc2VfbGliZGlyfS8qLnNvICR7YmFzZV9saWJkaXJ9LyoubGEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ4c2x0L2xpYnhzbHQvcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWQxNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDExOCBAQAorVXNlIHBrZy1jb25maWcgdG8gZmluZCBnY3J5cHQgYW5kIGxpYnhtbDIuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZyBbbGlieG1sMiBpcyB1cHN0cmVhbWFibGVdCisKK1JQIDIwMTQvNS8yMgorCitJbmRleDogbGlieHNsdC0xLjEuMjgvY29uZmlndXJlLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieHNsdC0xLjEuMjgub3JpZy9jb25maWd1cmUuaW4JMjAxNC0wNS0xMyAxNjo0NjowMi4yNzg0NzQ5NjcgKzAwMDAKKysrKyBsaWJ4c2x0LTEuMS4yOC9jb25maWd1cmUuaW4JMjAxNC0wNS0xMyAxNjo1Mzo1Ni41MTA0NzI1NjEgKzAwMDAKK0BAIC0zNzYsNiArMzc2LDggQEAKKyBBQ19TVUJTVChQWVRIT05fU1VCRElSKQorIEFDX1NVQlNUKFBZVEhPTl9MSUJTKQorIAorK1BLR19QUk9HX1BLR19DT05GSUcKKysKKyBBQ19BUkdfV0lUSChjcnlwdG8sIFsgIC0td2l0aC1jcnlwdG8gICAgICAgICAgIEFkZCBjcnlwdG8gc3VwcG9ydCB0byBleHNsdCAob24pXSkKKyBXSVRIX0NSWVBUTz0wCisgaWYgdGVzdCAiJHdpdGhfY3J5cHRvIiA9ICJubyIgOyB0aGVuCitAQCAtMzkxLDI2ICszOTMsMTMgQEAKKyAgICAgV0lUSF9DUllQVE89MQorICAgICA7OworICAgKikKKy0gICAgQUNfUEFUSF9QUk9HKExJQkdDUllQVF9DT05GSUcsIGxpYmdjcnlwdC1jb25maWcsIG5vKQorLSAgICBpZiB0ZXN0ICIkTElCR0NSWVBUX0NPTkZJRyIgIT0gIm5vIiA7IHRoZW4KKy0gICAgICBMSUJHQ1JZUFRfVkVSU0lPTj1gJExJQkdDUllQVF9DT05GSUcgLS12ZXJzaW9uYAorLSAgICAgIGlmIHRlc3QgVkVSU0lPTl9UT19OVU1CRVIoZWNobyAkTElCR0NSWVBUX1ZFUlNJT04pIC1sdCBWRVJTSU9OX1RPX05VTUJFUihlY2hvICIxLjEuNDIiKQorLSAgICAgIHRoZW4KKy0gICAgICAgIExJQkdDUllQVF9DRkxBR1M9IiIKKy0gICAgICAgIExJQkdDUllQVF9MSUJTPSIiCistICAgICAgICBlY2hvICdnY3J5cHQgbGlicmFyeSB2ZXJzaW9uIDwgMS4xLjQyIC0gQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLicKKy0gICAgICBlbHNlCistICAgICAgICBMSUJHQ1JZUFRfQ0ZMQUdTPWAkTElCR0NSWVBUX0NPTkZJRyAkbGliZ2NyeXB0X2NvbmZpZ19hcmdzIC0tY2ZsYWdzYAorLSAgICAgICAgTElCR0NSWVBUX0xJQlM9YCRMSUJHQ1JZUFRfQ09ORklHICRsaWJnY3J5cHRfY29uZmlnX2FyZ3MgLS1saWJzYAorLSAgICAgICAgQUNfREVGSU5FKEhBVkVfR0NSWVBULCAxLCBbRGVmaW5lIGlmIGdjcnlwdCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS5dKQorLSAgICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBiZSBhdmFpbGFibGUuJworKyAgICBQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJHQ1JZUFQsIFtsaWJnY3J5cHQgPj0gMS4xLjQyXSwgWworKyAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9HQ1JZUFQsIDEsIFtEZWZpbmUgaWYgZ2NyeXB0IGxpYnJhcnkgaXMgYXZhaWxhYmxlLl0pCisrICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgYmUgYXZhaWxhYmxlLicKKyAJCVdJVEhfQ1JZUFRPPTEKKy0gICAgICBmaQorLSAgICBlbHNlCistICAgICAgTElCR0NSWVBUX0NGTEFHUz0iIgorLSAgICAgIExJQkdDUllQVF9MSUJTPSIiCistICAgICAgZWNobyAnQ3J5cHRvIGV4dGVuc2lvbnMgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiBJbnN0YWxsIGxpYmdjcnlwdCBhbmQgcmVjb25maWd1cmUgdG8gbWFrZSBhdmFpbGFibGUuJworLSAgICBmaQorKwldLCBbCisrICAgICAgICAgIGVjaG8gJ0NyeXB0byBleHRlbnNpb25zIHdpbGwgbm90IGJlIGF2YWlsYWJsZS4gSW5zdGFsbCBsaWJnY3J5cHQgPj0gMS4xLjQyIGFuZCByZWNvbmZpZ3VyZSB0byBtYWtlIGF2YWlsYWJsZS4nCisrICAgICAgICBdKQorIGVzYWMKKyBmaQorIEFDX1NVQlNUKFdJVEhfQ1JZUFRPKQorQEAgLTQ3MSwyNCArNDYwLDggQEAKKyBkbmwgc29tZSB0d2Vha2luZyAtIERhdmlkIEjDpHJkZW1hbiAzMC8xMC8yMDAxCisgZG5sCisgCistTElCWE1MX0NPTkZJR19QUkVGSVg9IiIKKyBMSUJYTUxfU1JDPSIiCisgCistQUNfQVJHX1dJVEgobGlieG1sLXByZWZpeCwKKy0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtcHJlZml4PVtQRlhdCQlTcGVjaWZ5IGxvY2F0aW9uIG9mIGxpYnhtbCBjb25maWddLAorLQlMSUJYTUxfQ09ORklHX1BSRUZJWD0kd2l0aHZhbAorLSkKKy0gICAgICAgIAorLUFDX0FSR19XSVRIKGxpYnhtbC1pbmNsdWRlLXByZWZpeCwKKy0gICAgICAgIFsgIC0td2l0aC1saWJ4bWwtaW5jbHVkZS1wcmVmaXg9W1BGWF0JU3BlY2lmeSBsb2NhdGlvbiBvZiBsaWJ4bWwgaGVhZGVyc10sCistICAgICAgICBMSUJYTUxfQ0ZMQUdTPSItSSR3aXRodmFsIgorLSkKKy0KKy1BQ19BUkdfV0lUSChsaWJ4bWwtbGlicy1wcmVmaXgsCistICAgICAgICBbICAtLXdpdGgtbGlieG1sLWxpYnMtcHJlZml4PVtQRlhdCVNwZWNpZnkgbG9jYXRpb24gb2YgbGlieG1sIGxpYnNdLAorLSAgICAgICAgTElCWE1MX0xJQlM9Ii1MJHdpdGh2YWwiCistKQorLQorIEFDX0FSR19XSVRIKGxpYnhtbC1zcmMsCisgCVsgIC0td2l0aC1saWJ4bWwtc3JjPVtESVJdICAgICAgICAgICAgICBGb3IgbGlieG1sIHRoYXRzIG5vdCBpbnN0YWxsZWQgeWV0IChzZXRzIGFsbCB0aHJlZSBhYm92ZSldLAorIAlMSUJYTUxfU1JDPSIkd2l0aHZhbCIKK0BAIC01NTEsMjggKzUyNCw5IEBACisgCWZpCisgZmkKKyAKKy1kbmwKKy1kbmwgbWFrZSBzdXJlIHhtbDItY29uZmlnIGlzIGV4ZWN1dGFibGUsCistZG5sIHRlc3QgdmVyc2lvbiBhbmQgaW5pdCBvdXIgdmFyaWFibGVzCistZG5sCistCistaWYgJHtYTUxfQ09ORklHfSAtLWxpYnMgcHJpbnQgPiAvZGV2L251bGwgMj4mMQorLXRoZW4KKy0JWE1MVkVSUz1gJFhNTF9DT05GSUcgLS12ZXJzaW9uYAorLQlpZiB0ZXN0IFZFUlNJT05fVE9fTlVNQkVSKGVjaG8gJFhNTFZFUlMpIC1nZSBWRVJTSU9OX1RPX05VTUJFUihlY2hvICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTikKKy0JdGhlbgorLQkJQUNfTVNHX1JFU1VMVCgkWE1MVkVSUyBmb3VuZCkKKy0JZWxzZQorLQkJQUNfTVNHX0VSUk9SKFZlcnNpb24gJFhNTFZFUlMgZm91bmQuIFlvdSBuZWVkIGF0IGxlYXN0IGxpYnhtbDIgJExJQlhNTF9SRVFVSVJFRF9WRVJTSU9OIGZvciB0aGlzIHZlcnNpb24gb2YgbGlieHNsdCkKKy0JZmkKKy0JTElCWE1MX0xJQlM9IiRMSUJYTUxfTElCUyBgJFhNTF9DT05GSUcgLS1saWJzYCIKKy0JaWYgdGVzdCAieCRMSUJYTUxfU1JDIiA9ICJ4IjsgdGhlbgorLQkJTElCWE1MX0NGTEFHUz0iJExJQlhNTF9DRkxBR1MgYCRYTUxfQ09ORklHIC0tY2ZsYWdzYCIKKy0JZmkKKy1lbHNlCistCUFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgbGlieG1sMiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pCistZmkKKy0KKytQS0dfQ0hFQ0tfTU9EVUxFUyhMSUJYTUwsIFtsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTl0sLAorKyAgICBbQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBsaWJ4bWwtMi4wID49ICRMSUJYTUxfUkVRVUlSRURfVkVSU0lPTiBhbnl3aGVyZSwgY2hlY2sgZnRwOi8veG1sc29mdC5vcmcvLl0pXQorKykKKyAKKyBBQ19TVUJTVChDRkxBR1MpCisgQUNfU1VCU1QoQ1BQRkxBR1MpCitAQCAtNTk3LDcgKzU1MSw3IEBACisgCisgaWYgdGVzdCAiJHdpdGhfcGx1Z2lucyIgPSAieWVzIiA7IHRoZW4KKyAgIEFDX01TR19DSEVDS0lORyhbbGlieG1sMiBtb2R1bGUgc3VwcG9ydF0pCistICBXSVRIX01PRFVMRVM9ImAkWE1MX0NPTkZJRyAtLW1vZHVsZXNgIgorKyAgV0lUSF9NT0RVTEVTPSJgJFBLR19DT05GSUcgLS12YXJpYWJsZT1tb2R1bGVzIGxpYnhtbC0yLjBgIgorICAgaWYgdGVzdCAiJHtXSVRIX01PRFVMRVN9IiA9ICIxIjsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0L3BrZ2NvbmZpZ19maXgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhODAxMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdC9wa2djb25maWdfZml4LnBhdGNoCkBAIC0wLDAgKzEsMjQgQEAKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworSW5kZXg6IGxpYnhzbHQtMS4xLjI3L2xpYmV4c2x0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieHNsdC0xLjEuMjcub3JpZy9saWJleHNsdC5wYy5pbgorKysrIGxpYnhzbHQtMS4xLjI3L2xpYmV4c2x0LnBjLmluCitAQCAtOCw1ICs4LDUgQEAgTmFtZTogbGliZXhzbHQKKyBWZXJzaW9uOiBATElCRVhTTFRfVkVSU0lPTkAKKyBEZXNjcmlwdGlvbjogRVhTTFQgRXh0ZW5zaW9uIGxpYnJhcnkKKyBSZXF1aXJlczogbGlieG1sLTIuMAorLUxpYnM6IEBFWFNMVF9MSUJESVJAIEBFWFNMVF9MSUJTQAorK0xpYnM6IC1sZXhzbHQgQEVYU0xUX0xJQkRJUkAgQEVYU0xUX0xJQlNACisgQ2ZsYWdzOiBARVhTTFRfSU5DTFVERURJUkAKK0luZGV4OiBsaWJ4c2x0LTEuMS4yNy9saWJ4c2x0LnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbGlieHNsdC0xLjEuMjcub3JpZy9saWJ4c2x0LnBjLmluCisrKysgbGlieHNsdC0xLjEuMjcvbGlieHNsdC5wYy5pbgorQEAgLTgsNSArOCw1IEBAIE5hbWU6IGxpYnhzbHQKKyBWZXJzaW9uOiBAVkVSU0lPTkAKKyBEZXNjcmlwdGlvbjogWFNMVCBsaWJyYXJ5IHZlcnNpb24gMi4KKyBSZXF1aXJlczogbGlieG1sLTIuMAorLUxpYnM6IEBYU0xUX0xJQkRJUkAgQFhTTFRfTElCU0AgQEVYVFJBX0xJQlNACisrTGliczogLWx4c2x0IEBYU0xUX0xJQkRJUkAgQFhTTFRfTElCU0AgQEVYVFJBX0xJQlNACisgQ2ZsYWdzOiBAWFNMVF9JTkNMVURFRElSQApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieHNsdC9saWJ4c2x0XzEuMS4yOC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2YmNkOAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnhzbHQvbGlieHNsdF8xLjEuMjguYmIKQEAgLTAsMCArMSw0NiBAQAorU1VNTUFSWSA9ICJHTk9NRSBYU0xUIGxpYnJhcnkiCitIT01FUEFHRSA9ICJodHRwOi8veG1sc29mdC5vcmcvWFNMVC8iCitCVUdUUkFDS0VSID0gImh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnLyIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9Db3B5cmlnaHQ7bWQ1PTBjZDlhMDdhZmJlYjI0MDI2YzliMDNhZWNmZWJhNDU4IgorCitTRUNUSU9OID0gImxpYnMiCitERVBFTkRTID0gImxpYnhtbDIiCisKK1NSQ19VUkkgPSAiZnRwOi8veG1sc29mdC5vcmcvbGlieHNsdC8vbGlieHNsdC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnX2ZpeC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWcucGF0Y2giCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI5NjY3YmY2ZjkzMTBiOTU3MjU0ZmRjZjY1OTY2MDBiNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI1ZmM3MTUxYTU3Yjg5YzAzZDdiODI1ZGY1YTBmYWUwYThkNWYwNTY3NGMwZTdjZjI5MzdlY2VjNGQ1NGEwMjhjIgorUyA9ICIke1dPUktESVJ9L2xpYnhzbHQtJHtQVn0iCisKK0JJTkNPTkZJRyA9ICIke2JpbmRpcn0veHNsdC1jb25maWciCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBiaW5jb25maWctZGlzYWJsZWQgbGliX3BhY2thZ2UKKworIyBXZSBkb24ndCBERVBFTkQgb24gYmludXRpbHMgZm9yIGFuc2lkZWNsLmggc28gZW5zdXJlIHdlIGRvbid0IHVzZSB0aGUgaGVhZGVyCitkb19jb25maWd1cmVfcHJlcGVuZCAoKSB7CisJc2VkIC1pIC1lICdzL2Fuc2lkZWNsLmgvLycgJHtTfS9jb25maWd1cmUuaW4KKworCSMgVGhlIHRpbWVzdGFtcHMgaW4gdGhlIDEuMS4yOCB0YXJiYWxsIGFyZSBtZXNzZWQgdXAgY2F1c2luZyB0aGlzIGZpbGUgdG8KKwkjIGFwcGVhciBvdXQgb2YgZGF0ZS4gIFRvdWNoIGl0IHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIHJlZ2VuZXJhdGUgaXQuCisJdG91Y2ggJHtTfS9kb2MveHNsdHByb2MuMQorfQorCitFWFRSQV9PRUNPTkYgPSAiLS13aXRob3V0LXB5dGhvbiAtLXdpdGhvdXQtZGVidWcgLS13aXRob3V0LW1lbS1kZWJ1ZyAtLXdpdGhvdXQtY3J5cHRvIgorIyBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIHJlY2lwZSBoYWQgJHtQTn0tdXRpbHMKK1JQUk9WSURFU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorUkNPTkZMSUNUU18ke1BOfS1iaW4gKz0gIiR7UE59LXV0aWxzIgorUlJFUExBQ0VTXyR7UE59LWJpbiArPSAiJHtQTn0tdXRpbHMiCisKKworZG9faW5zdGFsbF9hcHBlbmRfY2xhc3MtbmF0aXZlICgpIHsKKyAgICBjcmVhdGVfd3JhcHBlciAke0R9LyR7YmluZGlyfS94c2x0cHJvYyBYTUxfQ0FUQUxPR19GSUxFUz0ke3N5c2NvbmZkaXJ9L3htbC9jYXRhbG9nLnhtbAorfQorCitGSUxFU18ke1BOfSArPSAiJHtsaWJkaXJ9L2xpYnhzbHQtcGx1Z2lucyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3hzbHRDb25mLnNoIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2xpYnlhbWwvZmlsZXMvbGlieWFtbC1DVkUtMjAxNC05MTMwLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGEwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2ZpbGVzL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaApAQCAtMCwwICsxLDMyIEBACisjIEhHIGNoYW5nZXNldCBwYXRjaAorIyBVc2VyIEtpcmlsbCBTaW1vbm92IDx4aUByZXNvbHZlbnQubmV0PgorIyBEYXRlIDE0MTcxOTczMTIgMjE2MDAKKyMgTm9kZSBJRCAyYjkxNTY3NTY0MjNlOTY3Y2ZkMDlhNjFkMTI1ZDg4M2ZjYTZmNGYyCisjIFBhcmVudCAgMDUzZjUzYTM4MWZmNmFkYmJjOTNhMzFhYjdmZGVlMDZhMTZjOGEzMworUmVtb3ZlZCBpbnZhbGlkIHNpbXBsZSBrZXkgYXNzZXJ0aW9uICh0aGFuayB0byBKb25hdGhhbiBHcmF5KS4KKworVGhlIHBhdGNoIGNvbWVzIGZyb20gCisKK2h0dHBzOi8vYml0YnVja2V0Lm9yZy94aS9saWJ5YW1sL2NvbW1pdHMvMmI5MTU2NzU2NDIzZTk2N2NmZDA5YTYxZDEyNWQ4ODNmY2E2ZjRmMgorCitVcHN0cmVhbS1TdGF0dXM6IEJhY2twb3J0CisKK1NpZ25lZC1vZmYtYnk6IFl1ZSBUYW8gPHl1ZS50YW9Ad2luZHJpdmVyLmNvbT4KKworZGlmZiAtciAwNTNmNTNhMzgxZmYgLXIgMmI5MTU2NzU2NDIzIHNyYy9zY2FubmVyLmMKKy0tLSBhL3NyYy9zY2FubmVyLmMJV2VkIE1hciAyNiAxMzo1NTo1NCAyMDE0IC0wNTAwCisrKysgYi9zcmMvc2Nhbm5lci5jCUZyaSBOb3YgMjggMTE6NTU6MTIgMjAxNCAtMDYwMAorQEAgLTExMDYsMTMgKzExMDYsNiBAQAorICAgICAgICAgICAgICYmIHBhcnNlci0+aW5kZW50ID09IChwdHJkaWZmX3QpcGFyc2VyLT5tYXJrLmNvbHVtbik7CisgCisgICAgIC8qCistICAgICAqIEEgc2ltcGxlIGtleSBpcyByZXF1aXJlZCBvbmx5IHdoZW4gaXQgaXMgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBjdXJyZW50CistICAgICAqIGxpbmUuICBUaGVyZWZvcmUgaXQgaXMgYWx3YXlzIGFsbG93ZWQuICBCdXQgd2UgYWRkIGEgY2hlY2sgYW55d2F5LgorLSAgICAgKi8KKy0KKy0gICAgYXNzZXJ0KHBhcnNlci0+c2ltcGxlX2tleV9hbGxvd2VkIHx8ICFyZXF1aXJlZCk7ICAgIC8qIEltcG9zc2libGUuICovCistCistICAgIC8qCisgICAgICAqIElmIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1heSBzdGFydCBhIHNpbXBsZSBrZXksIHNhdmUgaXQuCisgICAgICAqLworIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbGlieWFtbC9saWJ5YW1sXzAuMS42LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMTU1NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9saWJ5YW1sL2xpYnlhbWxfMC4xLjYuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJMaWJZQU1MIGlzIGEgWUFNTCAxLjEgcGFyc2VyIGFuZCBlbWl0dGVyIHdyaXR0ZW4gaW4gQy4iCitERVNDUklQVElPTiA9ICJMaWJZQU1MIGlzIGEgQyBsaWJyYXJ5IGZvciBwYXJzaW5nIGFuZCBlbWl0dGluZyBkYXRhIGluIFlBTUwgMS4xLCBcCithIGh1bWFuLXJlYWRhYmxlIGRhdGEgc2VyaWFsaXphdGlvbiBmb3JtYXQuICIKK0hPTUVQQUdFID0gImh0dHA6Ly9weXlhbWwub3JnL3dpa2kvTGliWUFNTCIKK1NFQ1RJT04gPSAibGlicy9kZXZlbCIKKworTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9MSUNFTlNFO21kNT02MDE1ZjA4ODc1OWIxMGUwYmMyYmY2NDg5OGQ0YWUxNyIKKworU1JDX1VSSSA9ICJodHRwOi8vcHl5YW1sLm9yZy9kb3dubG9hZC9saWJ5YW1sL3lhbWwtJHtQVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2xpYnlhbWwtQ1ZFLTIwMTQtOTEzMC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNWZlMDBjZGExOGNhNWRhZWI0Mzc2MmI4MGMzOGUwNmUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiN2RhNjk3MWI0YmQwOGE5ODZkZDJhNjEzNTNiYzQyMjM2MmJkMGVkY2M2N2Q3ZWJhYWM2OGM5NWY3NDE4Mjc0OSIKKworUyA9ICIke1dPUktESVJ9L3lhbWwtJHtQVn0iCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHo0L2x6NC5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlNTZkMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6NC9sejQuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJFeHRyZW1lbHkgRmFzdCBDb21wcmVzc2lvbiBhbGdvcml0aG0iCitERVNDUklQVElPTiA9ICJMWjQgaXMgYSB2ZXJ5IGZhc3QgbG9zc2xlc3MgY29tcHJlc3Npb24gYWxnb3JpdGhtLCBwcm92aWRpbmcgY29tcHJlc3Npb24gc3BlZWQgYXQgNDAwIE1CL3MgcGVyIGNvcmUsIHNjYWxhYmxlIHdpdGggbXVsdGktY29yZXMgQ1BVLiBJdCBhbHNvIGZlYXR1cmVzIGFuIGV4dHJlbWVseSBmYXN0IGRlY29kZXIsIHdpdGggc3BlZWQgaW4gbXVsdGlwbGUgR0IvcyBwZXIgY29yZSwgdHlwaWNhbGx5IHJlYWNoaW5nIFJBTSBzcGVlZCBsaW1pdHMgb24gbXVsdGktY29yZSBzeXN0ZW1zLiIKKworTElDRU5TRSA9ICJCU0QiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9saWIvTElDRU5TRTttZDU9MGIwZDA2M2YzN2E0NDc3YjU0YWYyNDU5NDc3ZGNhZmQiCisKK1NSQ1JFViA9ICJkODZkYzkxNjc3MWMxMjZhZmI3OTc2MzdkZGE5ZjY0MjFjMGNiOTk4IgorCitQViA9ICIxMzErZ2l0JHtTUkNQVn0iCisKK1NSQ19VUkkgPSAiZ2l0Oi8vZ2l0aHViLmNvbS9DeWFuNDk3My9sejQuZ2l0IgorCitTID0gIiR7V09SS0RJUn0vZ2l0IgorCitFWFRSQV9PRU1BS0UgPSAiUFJFRklYPSR7cHJlZml4fSBDQz0nJHtDQ30nIERFU1RESVI9JHtEfSBMSUJESVI9JHtsaWJkaXJ9IElOQ0xVREVESVI9JHtpbmNsdWRlZGlyfSIKKworZG9faW5zdGFsbCgpIHsKKwlvZV9ydW5tYWtlIGluc3RhbGwKK30KKworQkJDTEFTU0VYVEVORCArPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiM2E3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvLzAwMDEtVXNlLW1lbWNweS1pbnN0ZWFkLW9mLXJlaW52ZW50aW5nLWl0LnBhdGNoCkBAIC0wLDAgKzEsNzAgQEAKK0Zyb206IFNpbW9uIE1jVml0dGllIDxzbWN2QGRlYmlhbi5vcmc+CitEYXRlOiBTdW4sIDIzIE5vdiAyMDE0IDIyOjUwOjMzICswMDAwCitTdWJqZWN0OiBVc2UgbWVtY3B5KCkgaW5zdGVhZCBvZiByZWludmVudGluZyBpdAorCitnY2MgaW5saW5lcyBtZW1jcHkoKSB3aXRoIHJlc3VsdHMgYXMgZmFzdCBhcyBoYW5kd3JpdHRlbiBjb2RlIChhdAorbGVhc3QgaW4gbXkgYnJpZWYgdGVzdGluZyB3aXRoIGx6b3ApLCBhbmQga25vd3MgdGhlIGFsaWdubWVudAorY29uc3RyYWludHMgZm9yIG91ciBhcmNoaXRlY3R1cmVzLgorCitDaGFuZ2Ugc3VnZ2VzdGVkIGJ5IEp1bGlhbiBUYXlsb3IuCisKK0J1Zy1EZWJpYW46IGh0dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9NzU3MDM3CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworU2lnbmVkLW9mZi1ieTogU2F1bCBXb2xkIDxzZ3dAbGludXguaW50ZWwuY29tPgorLS0tCisgbWluaWx6by9taW5pbHpvLmMgfCAxNCArKysrKysrKysrKysrKworIHNyYy9sem9fZnVuYy5oICAgIHwgMTQgKysrKysrKysrKysrKysKKyAyIGZpbGVzIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKykKKworCitkaWZmIC0tZ2l0IGEvbWluaWx6by9taW5pbHpvLmMgYi9taW5pbHpvL21pbmlsem8uYworaW5kZXggYWIyYmU1Zi4uNjkxM2MyZiAxMDA2NDQKKy0tLSBhL21pbmlsem8vbWluaWx6by5jCisrKysgYi9taW5pbHpvL21pbmlsem8uYworQEAgLTM1MjMsNiArMzUyMywyMCBAQCBMWk9fQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoc2l6ZW9mKCoobHpvX21lbW9wc19UVThwKTApPT04KQorICAgICBpZiAoKHZvaWQpMCwgbl9fbiA+IDApIGRvIHsgKmRfX24rKyA9ICpzX19uKys7IH0gd2hpbGUgKC0tbl9fbiA+IDApOyBcCisgICAgIExaT19CTE9DS19FTkQKKyAKKysvKiBEZWJpYW4tc3BlY2lmaWMgY2hhbmdlOiB3ZSBrbm93IHRoYXQgb3VyIGNvbXBpbGVyIGlubGluZXMgbWVtY3B5KCkgd2l0aAorKyAqIGNvbnN0YW50IG4gdG8gYmUgYXMgZmFzdCBhcyBoYW5kd3JpdHRlbiBjb2RlLCBhbmQga25vd3Mgd2hpY2ggYXJjaGl0ZWN0dXJlcworKyAqIG5lZWQgdGhpbmdzIGNvcnJlY3RseSBhbGlnbmVkLiAqLworKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkxCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTIKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZNAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFk4CisrI3VuZGVmIExaT19NRU1PUFNfQ09QWU4KKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTEoZGQsc3MpIG1lbWNweShkZCwgc3MsIDEpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkyKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAyKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZNChkZCxzcykgbWVtY3B5KGRkLCBzcywgNCkKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTgoZGQsc3MpIG1lbWNweShkZCwgc3MsIDgpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFlOKGRkLHNzLG5uKSBtZW1jcHkoZGQsIHNzLCBubikKKysKKyBfX2x6b19zdGF0aWNfZm9yY2VpbmxpbmUgbHpvX3VpbnQxNl90IGx6b19tZW1vcHNfZ2V0X2xlMTYoY29uc3QgbHpvX3ZvaWRwIHNzKQorIHsKKyAgICAgbHpvX3VpbnQxNl90IHY7CitkaWZmIC0tZ2l0IGEvc3JjL2x6b19mdW5jLmggYi9zcmMvbHpvX2Z1bmMuaAoraW5kZXggZGZhYTY3Ni4uMWNjMWI1MyAxMDA2NDQKKy0tLSBhL3NyYy9sem9fZnVuYy5oCisrKysgYi9zcmMvbHpvX2Z1bmMuaAorQEAgLTMzMyw2ICszMzMsMjAgQEAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZigqKGx6b19tZW1vcHNfVFU4cCkwKT09OCkKKyAgICAgaWYgKCh2b2lkKTAsIG5fX24gPiAwKSBkbyB7ICpkX19uKysgPSAqc19fbisrOyB9IHdoaWxlICgtLW5fX24gPiAwKTsgXAorICAgICBMWk9fQkxPQ0tfRU5ECisgCisrLyogRGViaWFuLXNwZWNpZmljIGNoYW5nZTogd2Uga25vdyB0aGF0IG91ciBjb21waWxlciBpbmxpbmVzIG1lbWNweSgpIHdpdGgKKysgKiBjb25zdGFudCBuIHRvIGJlIGFzIGZhc3QgYXMgaGFuZHdyaXR0ZW4gY29kZSwgYW5kIGtub3dzIHdoaWNoIGFyY2hpdGVjdHVyZXMKKysgKiBuZWVkIHRoaW5ncyBjb3JyZWN0bHkgYWxpZ25lZC4gKi8KKysjdW5kZWYgTFpPX01FTU9QU19DT1BZMQorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFkyCisrI3VuZGVmIExaT19NRU1PUFNfQ09QWTQKKysjdW5kZWYgTFpPX01FTU9QU19DT1BZOAorKyN1bmRlZiBMWk9fTUVNT1BTX0NPUFlOCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFkxKGRkLHNzKSBtZW1jcHkoZGQsIHNzLCAxKQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZMihkZCxzcykgbWVtY3B5KGRkLCBzcywgMikKKysjZGVmaW5lIExaT19NRU1PUFNfQ09QWTQoZGQsc3MpIG1lbWNweShkZCwgc3MsIDQpCisrI2RlZmluZSBMWk9fTUVNT1BTX0NPUFk4KGRkLHNzKSBtZW1jcHkoZGQsIHNzLCA4KQorKyNkZWZpbmUgTFpPX01FTU9QU19DT1BZTihkZCxzcyxubikgbWVtY3B5KGRkLCBzcywgbm4pCisrCisgX19sem9fc3RhdGljX2ZvcmNlaW5saW5lIGx6b191aW50MTZfdCBsem9fbWVtb3BzX2dldF9sZTE2KGNvbnN0IGx6b192b2lkcCBzcykKKyB7CisgICAgIGx6b191aW50MTZfdCB2OwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem8vbHpvL2FjaW5jbHVkZS5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQyY2NkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwzNTggQEAKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShBQ0NfQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoQUNDX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19IRUFERVJTXSwgWworQUNfSEVBREVSX1RJTUUKK0FDX0NIRUNLX0hFQURFUlMoW2Fzc2VydC5oIGN0eXBlLmggZGlyZW50LmggZXJybm8uaCBmY250bC5oIGZsb2F0LmggbGltaXRzLmggbWFsbG9jLmggbWVtb3J5Lmggc2V0am1wLmggc2lnbmFsLmggc3RkYXJnLmggc3RkZGVmLmggc3RkaW50Lmggc3RkaW8uaCBzdGRsaWIuaCBzdHJpbmcuaCBzdHJpbmdzLmggdGltZS5oIHVuaXN0ZC5oIHV0aW1lLmggc3lzL3N0YXQuaCBzeXMvdGltZS5oIHN5cy90eXBlcy5oIHN5cy93YWl0LmhdKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0ZVTkNTXSwgWworQUNfQ0hFQ0tfRlVOQ1MoYWNjZXNzIGFsbG9jYSBhdGV4aXQgYXRvaSBhdG9sIGNobW9kIGNob3duIGN0aW1lIGRpZmZ0aW1lIGZzdGF0IGdldHRpbWVvZmRheSBnbXRpbWUgbG9jYWx0aW1lIGxvbmdqbXAgbHN0YXQgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXNldCBta3RpbWUgcXNvcnQgcmFpc2Ugc2V0am1wIHNpZ25hbCBzbnByaW50ZiBzdHJjYXNlY21wIHN0cmNociBzdHJkdXAgc3RyZXJyb3Igc3RyZnRpbWUgc3RyaWNtcCBzdHJuY2FzZWNtcCBzdHJuaWNtcCBzdHJyY2hyIHN0cnN0ciB0aW1lIHVtYXNrIHV0aW1lIHZzbnByaW50ZikKK10pIworCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKKworQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihfX2ludDE2KQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoX19pbnQ2NCkKKworQUNfQ0hFQ0tfU0laRU9GKHZvaWQgKikKK0FDX0NIRUNLX1NJWkVPRihzaXplX3QpCitBQ19DSEVDS19TSVpFT0YocHRyZGlmZl90KQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjaW5jbHVkZSAiYWNjL2FjYy5oIgorI2luY2x1ZGUgImFjYy9hY2NfaW5jZC5oIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorfQorI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgYXNzZXJ0KGV4cHIpOworI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X0FDQ19BQ0NDSEsKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9NSU5JQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNEX0ggMQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNpbmNsdWRlICQyCit9CisKKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBhc3NlcnQoZXhwcik7CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2luY2x1ZGUgJDIKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X01JTklBQ0NfQUNDQ0hLCisKKworCisjIHNlcmlhbCAxCisKK0FDX0RFRlVOKFttZnhfUFJPR19DUFBGTEFHU10sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgQyBwcmVwcm9jZXNzb3IgbmVlZHMgc3BlY2lhbCBmbGFnc10pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMSIKKyNlbGlmICgweGZmZmZ1ID09IDB4ZmZmZmZmZmZ1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDIiCisjZWxpZiAoMzI3NjcgPj0gVUxPTkdfTUFYKSB8fCAoNjU1MzV1ID49IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKK11dLCBbWyBdXQorKV0pCisKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworbWZ4X3RtcD1FUlJPUgorZm9yIG1meF9hcmcgaW4gIiIgLW5vLWNwcC1wcmVjb21wCitkbworICBDUFBGTEFHUz0iJG1meF9hcmcgJG1meF9zYXZlX0NQUEZMQUdTIgorICBfQUNfQ09NUElMRV9JRkVMU0UoW10sCitbbWZ4X3RtcD0kbWZ4X2FyZworYnJlYWtdKQorZG9uZQorQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHgpCisgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBuZWVkZWRdKSA7OworICB4RVJST1IpCisgICAgQUNfTVNHX1JFU1VMVChbRVJST1JdKQorICAgIEFDX01TR19FUlJPUihbeW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZ10pCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCisgICAgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKyAgICA7OworZXNhYworXSkjIG1meF9QUk9HX0NQUEZMQUdTCisKKworCisjIHNlcmlhbCAzCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfSEVBREVSX1NBTkVfTElNSVRTX0hdLCBbCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lXSwKK21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19HTlVDX18pCisjICAgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSB1c2UgY29tcGlsZXIgb3B0aW9uIC1uby1jcHAtcHJlY29tcCIKKyMgIGVsc2UKKyMgICAgaW5jbHVkZSAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIgorIyAgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBNRlhfMHhmZmZmICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNRlhfMHhmZmZmZmZmZkwgICAgIDQyOTQ5NjcyOTV1bAorI2lmICFkZWZpbmVkKENIQVJfQklUKSB8fCAoQ0hBUl9CSVQgIT0gOCkKKyMgIGluY2x1ZGUgImVycm9yIENIQVJfQklUIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUNIQVJfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIElOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKExPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgTE9OR19NQVggMSIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDIiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAyIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAyIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDB4ZmYpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMyIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCBNRlhfMHhmZmZmZmZmZkwpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPiBVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCB2cyBVSU5UX01BWCIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA+IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIHZzIFVMT05HX01BWCIKKyNlbmRpZgorXV0sIFtbCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDIpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDIpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSAyKV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJiWzEgLSAyICogIShzaXplb2YobG9uZykgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDQpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSA0KV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDQpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gNCldOyB9CisjZW5kaWYKK11dKV0sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPXllc10sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPW5vXSldKQorXSkKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gc3RhbmRhcmQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0xaT19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKExaT19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShMWk9fQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkbmwgbW9yZSB0eXBlcyB3aGljaCBhcmUgbm90IHlldCBjb3ZlcmVkIGJ5IEFDQworCitBQ19ERUZVTihbbWZ4X0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRihpbnRwdHJfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50cHRyX3QpCisKK0FDX0NIRUNLX1NJWkVPRihmbG9hdCkKK0FDX0NIRUNLX1NJWkVPRihkb3VibGUpCitBQ19DSEVDS19TSVpFT0YobG9uZyBkb3VibGUpCisKK0FDX0NIRUNLX1NJWkVPRihkZXZfdCkKK0FDX0NIRUNLX1NJWkVPRihmcG9zX3QpCitBQ19DSEVDS19TSVpFT0YobW9kZV90KQorQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorQUNfQ0hFQ0tfU0laRU9GKHNzaXplX3QpCitBQ19DSEVDS19TSVpFT0YodGltZV90KQorXSkjCisKKworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0xJQl9XSU5NTV0sIFsKK2lmIHRlc3QgIlgkR0NDIiA9IFh5ZXM7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgdGVzdCAiWCRMSUJTIiAhPSAiWCIgJiYgTElCUz0iJExJQlMgIgorICAgICBMSUJTPSIke0xJQlN9LWx3aW5tbSIgOzsKKyopCisgICAgIDs7Citlc2FjCitmaQorXSkjCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6by9ydW4tcHRlc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVhNzc0NQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem8vcnVuLXB0ZXN0CkBAIC0wLDAgKzEsOCBAQAorIyEvYmluL3NoCisKKy4vbHpvdGVzdCAtbWF2YWlsIC1uMTAgLXEgL2V0Yy9zZXJ2aWNlcworTFpPVEVTVD0uL2x6b3Rlc3QgL2Jpbi9zaCAtZSAiLi9jaGVjay5zaCIgIi9ldGMiCisuL2FsaWduCisuL2Noa3N1bQorLi9zaW1wbGUKKy4vdGVzdG1pbmkKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6by9sem9fMi4wOS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc4NjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvL2x6b18yLjA5LmJiCkBAIC0wLDAgKzEsMzUgQEAKK1NVTU1BUlkgPSAiTG9zc2xlc3MgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiR1BMdjIrIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9YjIzNGVlNGQ2OWY1ZmNlNDQ4NmE4MGZkYWY0YTQyNjMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL2x6b19pbml0LmM7YmVnaW5saW5lPTU7ZW5kbGluZT0yNTttZDU9MzU1MDIzODM1YTliOWVlYjcwYWI4OTUzOTVlOTUxZmYiCisKK1NSQ19VUkkgPSAiaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvL2Rvd25sb2FkL2x6by0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vMDAwMS1Vc2UtbWVtY3B5LWluc3RlYWQtb2YtcmVpbnZlbnRpbmctaXQucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vYWNpbmNsdWRlLm00IFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gImM3ZmZjOWExMDNhZmUyZDFiYmEwYjAxNWU3YWE4ODdmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImYyOTRhN2NlZDMxMzA2M2MwNTdjNTA0MjU3ZjQzN2M4MzM1YzQxYmZlZWQyMzUzMWVlNGU2YTJiODdiY2IzNGMiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHB0ZXN0CisKK0VYVFJBX09FQ09ORiA9ICItLWVuYWJsZS1zaGFyZWQiCisKK2RvX2NvbmZpZ3VyZV9wcmVwZW5kICgpIHsKKwljcCAke1dPUktESVJ9L2FjaW5jbHVkZS5tNCAke1N9LworfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworCXQ9JHtEfSR7UFRFU1RfUEFUSH0KKwljcCAke1N9L3V0aWwvY2hlY2suc2ggJHQKKwljcCAke0J9L21pbmlsem8vdGVzdG1pbmkgJHQKKwlmb3IgaSBpbiB0ZXN0cy9hbGlnbiB0ZXN0cy9jaGtzdW0gbHpvdGVzdC9sem90ZXN0IGV4YW1wbGVzL3NpbXBsZQorCQlkbyBjcCAke0J9L2BkaXJuYW1lICRpYC8ubGlicy9gYmFzZW5hbWUgJGlgICR0OyBcCisJZG9uZQorfQorCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2N2I4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3AvMDAwMS11c2Utc3RhdGljLWlubGluZXMtYXMtdGhlLWV4dGVybmFsLWlubGluZS1kZWZpbml0aW9uLnBhdGNoCkBAIC0wLDAgKzEsMTAwIEBACitGcm9tIGVjY2NiY2Y2NmRhNTM3NzlkODhlMzhlMmFmN2Y4MmVmZjhkZGU3ZjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBLaGVtIFJhaiA8cmFqLmtoZW1AZ21haWwuY29tPgorRGF0ZTogU3VuLCAxNiBBdWcgMjAxNSAxMDozNTo0NyAtMDcwMAorU3ViamVjdDogW1BBVENIXSB1c2Ugc3RhdGljIGlubGluZXMgYXMgdGhlIGV4dGVybmFsIGlubGluZSBkZWZpbml0aW9uIGhhcworIGNoYW5nZWQgd2l0aCBnY2M1CisKK1NpZ25lZC1vZmYtYnk6IEtoZW0gUmFqIDxyYWoua2hlbUBnbWFpbC5jb20+CistLS0KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCisgc3JjL21pbmlhY2MuaCB8IDI0ICsrKysrKysrLS0tLS0tLS0tLS0tLS0tLQorIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvc3JjL21pbmlhY2MuaCBiL3NyYy9taW5pYWNjLmgKK2luZGV4IDA5ZTZmMGMuLmNhZTk4ZDEgMTAwNjQ0CistLS0gYS9zcmMvbWluaWFjYy5oCisrKysgYi9zcmMvbWluaWFjYy5oCitAQCAtMjg4MCw4ICsyODgwLDcgQEAgdHlwZWRlZiB2b2lkIChfX2FjY19jZGVjbF9zaWdoYW5kbGVyICphY2Nfc2lnaGFuZGxlcl90KShhY2Nfc2lnbm9fdCk7CisgI2lmICEoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiAoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyAjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisgI2lmICFkZWZpbmVkKEFDQ19VQV9HRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgdW5zaWduZWQgbG9uZyB2OworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibGhicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKK0BAIC0yODkwLDggKzI4ODksNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSBjb25zdAorICNkZWZpbmUgQUNDX1VBX0dFVF9MRTE2KHApICAgICAgX19BQ0NfVUFfR0VUX0xFMTYocCkKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoQUNDX1VBX1NFVF9MRTE2KQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCopIHBwOworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7CisgfQorQEAgLTI5MTYsOCArMjkxNCw3IEBAIGV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpCisgI2lmICEoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiAoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyAjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisgI2lmICFkZWZpbmVkKEFDQ19VQV9HRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgdW5zaWduZWQgbG9uZyB2OworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKK0BAIC0yOTI2LDggKzI5MjMsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdAorICNkZWZpbmUgQUNDX1VBX0dFVF9MRTMyKHApICAgICAgX19BQ0NfVUFfR0VUX0xFMzIocCkKKyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoQUNDX1VBX1NFVF9MRTMyKQorLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKytzdGF0aWMgX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7CisgICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCopIHBwOworICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7CisgfQorQEAgLTMzMDcsOCArMzMwMyw3IEBAIHR5cGVkZWYgdm9pZCAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMTYpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMzMxNyw4ICszMzEyLDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUxNikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aGJyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KK0BAIC0zMzQzLDggKzMzMzcsNyBAQCBleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaQorICNpZiAhKEFDQ19DRkdfTk9fSU5MSU5FX0FTTSkgJiYgKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisgI2lmIChBQ0NfQVJDSF9QT1dFUlBDICYmIEFDQ19BQklfQklHX0VORElBTikgJiYgKEFDQ19DQ19HTlVDKQorICNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCistZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworLWV4dGVybiBfX2FjY19mb3JjZWlubGluZSB1bnNpZ25lZCBsb25nIF9fQUNDX1VBX0dFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqIHBwKSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICAgX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCogcCA9IChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgcHA7CisgICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CitAQCAtMzM1Myw4ICszMzQ2LDcgQEAgZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QKKyAjZGVmaW5lIEFDQ19VQV9HRVRfTEUzMihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTMyKHApCisgI2VuZGlmCisgI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKKy1leHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KSB7Cisrc3RhdGljIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqKSBwcDsKKyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0d2JyeCAlMiwwLCUxIiA6ICI9bSIgKCpwKSA6ICJyIiAocCksICJyIiAodikpOworIH0KKy0tIAorMi41LjAKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL2FjaW5jbHVkZS5tNCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyOWMxOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwzOTAgQEAKKworQUNfREVGVU4oW21meF9BQ0NfQ0hFQ0tfRU5ESUFOXSwgWworQUNfQ19CSUdFTkRJQU4oW0FDX0RFRklORShBQ0NfQUJJX0JJR19FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGJpZyBlbmRpYW4uXSldLFtBQ19ERUZJTkUoQUNDX0FCSV9MSVRUTEVfRU5ESUFOLDEsW0RlZmluZSB0byAxIGlmIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLl0pXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19IRUFERVJTXSwgWworQUNfSEVBREVSX1RJTUUKK0FDX0NIRUNLX0hFQURFUlMoW2Fzc2VydC5oIGN0eXBlLmggZGlyZW50LmggZXJybm8uaCBmY250bC5oIGZsb2F0LmggbGltaXRzLmggbWFsbG9jLmggbWVtb3J5Lmggc2V0am1wLmggc2lnbmFsLmggc3RkYXJnLmggc3RkZGVmLmggc3RkaW50Lmggc3RkaW8uaCBzdGRsaWIuaCBzdHJpbmcuaCBzdHJpbmdzLmggdGltZS5oIHVuaXN0ZC5oIHV0aW1lLmggc3lzL3N0YXQuaCBzeXMvdGltZS5oIHN5cy90eXBlcy5oIHN5cy93YWl0LmhdKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0ZVTkNTXSwgWworQUNfQ0hFQ0tfRlVOQ1MoYWNjZXNzIGFsbG9jYSBhdGV4aXQgYXRvaSBhdG9sIGNobW9kIGNob3duIGN0aW1lIGRpZmZ0aW1lIGZzdGF0IGdldHRpbWVvZmRheSBnbXRpbWUgbG9jYWx0aW1lIGxvbmdqbXAgbHN0YXQgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXNldCBta3RpbWUgcXNvcnQgcmFpc2Ugc2V0am1wIHNpZ25hbCBzbnByaW50ZiBzdHJjYXNlY21wIHN0cmNociBzdHJkdXAgc3RyZXJyb3Igc3RyZnRpbWUgc3RyaWNtcCBzdHJuY2FzZWNtcCBzdHJuaWNtcCBzdHJyY2hyIHN0cnN0ciB0aW1lIHVtYXNrIHV0aW1lIHZzbnByaW50ZikKK10pIworCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKKworQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihfX2ludDE2KQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoX19pbnQ2NCkKKworQUNfQ0hFQ0tfU0laRU9GKHZvaWQgKikKK0FDX0NIRUNLX1NJWkVPRihzaXplX3QpCitBQ19DSEVDS19TSVpFT0YocHRyZGlmZl90KQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjaW5jbHVkZSAiYWNjL2FjYy5oIgorI2luY2x1ZGUgImFjYy9hY2NfaW5jZC5oIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorfQorI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgYXNzZXJ0KGV4cHIpOworI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X0FDQ19BQ0NDSEsKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9NSU5JQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNEX0ggMQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNpbmNsdWRlICQyCit9CisKKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBhc3NlcnQoZXhwcik7CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2luY2x1ZGUgJDIKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X01JTklBQ0NfQUNDQ0hLCisKKworCisjIHNlcmlhbCAxCisKK0FDX0RFRlVOKFttZnhfUFJPR19DUFBGTEFHU10sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgQyBwcmVwcm9jZXNzb3IgbmVlZHMgc3BlY2lhbCBmbGFnc10pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMSIKKyNlbGlmICgweGZmZmZ1ID09IDB4ZmZmZmZmZmZ1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDIiCisjZWxpZiAoMzI3NjcgPj0gVUxPTkdfTUFYKSB8fCAoNjU1MzV1ID49IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKK11dLCBbWyBdXQorKV0pCisKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworbWZ4X3RtcD1FUlJPUgorZm9yIG1meF9hcmcgaW4gIiIgLW5vLWNwcC1wcmVjb21wCitkbworICBDUFBGTEFHUz0iJG1meF9hcmcgJG1meF9zYXZlX0NQUEZMQUdTIgorICBfQUNfQ09NUElMRV9JRkVMU0UoW10sCitbbWZ4X3RtcD0kbWZ4X2FyZworYnJlYWtdKQorZG9uZQorQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHgpCisgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBuZWVkZWRdKSA7OworICB4RVJST1IpCisgICAgQUNfTVNHX1JFU1VMVChbRVJST1JdKQorICAgIEFDX01TR19FUlJPUihbeW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZ10pCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCisgICAgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKyAgICA7OworZXNhYworXSkjIG1meF9QUk9HX0NQUEZMQUdTCisKKworCisjIHNlcmlhbCAzCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfSEVBREVSX1NBTkVfTElNSVRTX0hdLCBbCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lXSwKK21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19HTlVDX18pCisjICAgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSB1c2UgY29tcGlsZXIgb3B0aW9uIC1uby1jcHAtcHJlY29tcCIKKyMgIGVsc2UKKyMgICAgaW5jbHVkZSAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIgorIyAgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBNRlhfMHhmZmZmICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNRlhfMHhmZmZmZmZmZkwgICAgIDQyOTQ5NjcyOTV1bAorI2lmICFkZWZpbmVkKENIQVJfQklUKSB8fCAoQ0hBUl9CSVQgIT0gOCkKKyMgIGluY2x1ZGUgImVycm9yIENIQVJfQklUIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUNIQVJfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIElOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKExPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgTE9OR19NQVggMSIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDIiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAyIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAyIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDB4ZmYpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMyIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCBNRlhfMHhmZmZmZmZmZkwpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPiBVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCB2cyBVSU5UX01BWCIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA+IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIHZzIFVMT05HX01BWCIKKyNlbmRpZgorXV0sIFtbCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDIpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDIpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSAyKV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJiWzEgLSAyICogIShzaXplb2YobG9uZykgPiAyKV07IH0KKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDQpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiA0KV07IH0KKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSA0KV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDQpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gNCldOyB9CisjZW5kaWYKK11dKV0sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPXllc10sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPW5vXSldKQorXSkKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gc3RhbmRhcmQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0xaT19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKExaT19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShMWk9fQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkbmwgbW9yZSB0eXBlcyB3aGljaCBhcmUgbm90IHlldCBjb3ZlcmVkIGJ5IEFDQworCitBQ19ERUZVTihbbWZ4X0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRihpbnRwdHJfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50cHRyX3QpCisKK0FDX0NIRUNLX1NJWkVPRihmbG9hdCkKK0FDX0NIRUNLX1NJWkVPRihkb3VibGUpCitBQ19DSEVDS19TSVpFT0YobG9uZyBkb3VibGUpCisKK0FDX0NIRUNLX1NJWkVPRihkZXZfdCkKK0FDX0NIRUNLX1NJWkVPRihmcG9zX3QpCitBQ19DSEVDS19TSVpFT0YobW9kZV90KQorQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorQUNfQ0hFQ0tfU0laRU9GKHNzaXplX3QpCitBQ19DSEVDS19TSVpFT0YodGltZV90KQorXSkjCisKKworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0xJQl9XSU5NTV0sIFsKK2lmIHRlc3QgIlgkR0NDIiA9IFh5ZXM7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgdGVzdCAiWCRMSUJTIiAhPSAiWCIgJiYgTElCUz0iJExJQlMgIgorICAgICBMSUJTPSIke0xJQlN9LWx3aW5tbSIgOzsKKyopCisgICAgIDs7Citlc2FjCitmaQorXSkjCisKKyNzZXJpYWwgNgorCitkbmwgRnJvbSBQYXVsIEVnZ2VydC4KKworIyBEZWZpbmUgU1RfTVRJTV9OU0VDIHRvIGJlIHRoZSBuYW5vc2Vjb25kcyBtZW1iZXIgb2Ygc3RydWN0IHN0YXQncyBzdF9tdGltLAorIyBpZiBpdCBleGlzdHMuCisKK0FDX0RFRlVOKFtBQ19TVFJVQ1RfU1RfTVRJTV9OU0VDXSwKKyBbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBuYW5vc2Vjb25kcyBtZW1iZXIgb2Ygc3RydWN0IHN0YXQuc3RfbXRpbV0sCisgICBhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjLAorICAgW2FjX3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICBhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjPW5vCisgICAgIyB0dl9uc2VjIC0tIHRoZSB1c3VhbCBjYXNlCisgICAgIyBfdHZfbnNlYyAtLSBTb2xhcmlzIDIuNiwgaWYKKyAgICAjCShkZWZpbmVkIF9YT1BFTl9TT1VSQ0UgJiYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCA9PSAxCisgICAgIwkgJiYgIWRlZmluZWQgX19FWFRFTlNJT05TX18pCisgICAgIyBzdF9fdGltLnR2X25zZWMgLS0gVW5peFdhcmUgMi4xLjIKKyAgICBmb3IgYWNfdmFsIGluIHR2X25zZWMgX3R2X25zZWMgc3RfX3RpbS50dl9uc2VjOyBkbworICAgICAgQ1BQRkxBR1M9IiRhY19zYXZlX0NQUEZMQUdTIC1EU1RfTVRJTV9OU0VDPSRhY192YWwiCisgICAgICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSwgW3N0cnVjdCBzdGF0IHM7IHMuc3RfbXRpbS5TVF9NVElNX05TRUM7XSwKKyAgICAgICAgW2FjX2N2X3N0cnVjdF9zdF9tdGltX25zZWM9JGFjX3ZhbDsgYnJlYWtdKQorICAgIGRvbmUKKyAgICBDUFBGTEFHUz0iJGFjX3NhdmVfQ1BQRkxBR1MiXSkKKworICBpZiB0ZXN0ICRhY19jdl9zdHJ1Y3Rfc3RfbXRpbV9uc2VjICE9IG5vOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKFNUX01USU1fTlNFQywgJGFjX2N2X3N0cnVjdF9zdF9tdGltX25zZWMsCisgICAgICBbRGVmaW5lIHRvIGJlIHRoZSBuYW5vc2Vjb25kcyBtZW1iZXIgb2Ygc3RydWN0IHN0YXQncyBzdF9tdGltLAorICAgICAgIGlmIGl0IGV4aXN0cy5dKQorICBmaQorIF0KKykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L2x6b3AvbHpvcC94MzJfYWJpX21pbmlhY2NfaC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzliZTgyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wL3gzMl9hYmlfbWluaWFjY19oLnBhdGNoCkBAIC0wLDAgKzEsMzYgQEAKK0ZpeCBnZXQgb2YgRkxBR1MgcmVnaXN0ZXIgaW4geDMyIEFCSSwKKworeDMyIEFCSSByZXF1aXJlcyB0byBoYXZlIDY0LWJpdCB2YXJpYWJsZSB0byBzdG9yZSBGTEFHUyByZWdpc3RlcgoraW5zdGVhZCBvZiBzaXplX3QgdGhhdCBpcyAzMi1iaXQgdmFyaWFibGUsIHRoaXMgZml4IG9wZXJhbmQKK3R5cGUgbWlzbWF0Y2ggd2hlbiB0cnkgdG8gcG9wIHByZXZpb3VzIHB1c2hmIHZhbHVlLgorCitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZAorCitTaWduZWQtb2ZmLWJ5OiBBbsOtYmFsIExpbcOzbiA8YW5pYmFsLmxpbW9uQGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IGx6b3AtMS4wMy9zcmMvbWluaWFjYy5oCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbHpvcC0xLjAzLm9yaWcvc3JjL21pbmlhY2MuaAorKysrIGx6b3AtMS4wMy9zcmMvbWluaWFjYy5oCitAQCAtNzU0LDYgKzc1NCw5IEBACisgI2VsaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQU1ENjQgICAgICAgICAgICAxCisgIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImFtZDY0IgorKyMgIGlmIGRlZmluZWQoX19JTFAzMl9fKQorKyMgICAgZGVmaW5lIEFDQ19BUkNIX0FNRDY0X1gzMiAgICAgIDEKKysjICBlbmRpZgorICNlbGlmIGRlZmluZWQoX190aHVtYl9fKSB8fCAoZGVmaW5lZChfTV9BUk0pICYmIGRlZmluZWQoX01fVEhVTUIpKQorICMgIGRlZmluZSBBQ0NfQVJDSF9BUk0gICAgICAgICAgICAgIDEKKyAjICBkZWZpbmUgQUNDX0FSQ0hfQVJNX1RIVU1CICAgICAgICAxCitAQCAtNjc4Nyw3ICs2NzkwLDExIEBAIEFDQ0xJQl9QVUJMSUNfTk9JTkxJTkUodm9pZCwgYWNjX2RlYnVnX24KKyBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKGludCwgYWNjX2RlYnVnX2FsaWduX2NoZWNrX3F1ZXJ5KSAodm9pZCkKKyB7CisgI2lmIChBQ0NfQVJDSF9BTUQ2NCB8fCBBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfR05VQykKKysjICBpZiBkZWZpbmVkKEFDQ19BUkNIX0FNRDY0X1gzMikKKysgICAgdW5zaWduZWQgbG9uZyBsb25nIHI7CisrIyAgZWxzZQorICAgICBzaXplX3QgcjsKKysjICBlbmRpZgorICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZcbiBwb3AgJTBcbiIgOiAiPWEiIChyKSA6IDogX19BQ0NfQVNNX0NMT0JCRVIpOworICAgICByZXR1cm4gKGludCkociA+PiAxOCkgJiAxOworICNlbGlmIChBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfTVNDKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9sem9wL2x6b3BfMS4wMy5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Q2Mjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbHpvcC9sem9wXzEuMDMuYmIKQEAgLTAsMCArMSwyOSBAQAorU1VNTUFSWSA9ICJSZWFsLXRpbWUgZmlsZSBjb21wcmVzc29yIgorREVTQ1JJUFRJT04gPSAibHpvcCBpcyBhIGNvbXByZXNzaW9uIHV0aWxpdHkgd2hpY2ggaXMgZGVzaWduZWQgdG8gYmUgYSBjb21wYW5pb24gdG8gZ3ppcC4gXG5cCitJdCBpcyBiYXNlZCBvbiB0aGUgTFpPIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgaXRzIG1haW4gYWR2YW50YWdlcyBvdmVyIFxuXAorZ3ppcCBhcmUgbXVjaCBoaWdoZXIgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3BlZWQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBcblwKK2NvbXByZXNzaW9uIHJhdGlvLiBUaGUgbHpvcCBjb21wcmVzc2lvbiB1dGlsaXR5IHdhcyBkZXNpZ25lZCB3aXRoIHRoZSBnb2FscyBcblwKK29mIHJlbGlhYmlsaXR5LCBzcGVlZCwgcG9ydGFiaWxpdHkgYW5kIHdpdGggcmVhc29uYWJsZSBkcm9wLWluIGNvbXBhdGliaWxpdHkgXG5cCit0byBnemlwLiIKK0RFUEVORFMgKz0gImx6byIKKworTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT1kZmVhZjNkYzRiZWVmNGY1YTdiZGJjMzViMTk3ZjM5ZSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zcmMvbHpvcC5jO2JlZ2lubGluZT01O2VuZGxpbmU9MjE7bWQ1PTY3OTdiZDNlZDBhMWE0OTMyN2I3ZWJmOTM2NmViZDg2IgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubHpvcC5vcmcvZG93bmxvYWQvJHtCUH0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL2FjaW5jbHVkZS5tNCBcCisgICAgICAgICAgIGZpbGU6Ly94MzJfYWJpX21pbmlhY2NfaC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly8wMDAxLXVzZS1zdGF0aWMtaW5saW5lcy1hcy10aGUtZXh0ZXJuYWwtaW5saW5lLWRlZmluaXRpb24ucGF0Y2ggXAorICAgICAgICAgICIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwMDZjNWUyN2ZiNzhjZGQxNGE2MjhmZGZhNWFhMTkwNSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICJjMTQyNWI4Yzc3ZDQ5ZjVhNjc5ZDVhMTI2YzkwZWE2YWQ5OTU4NWE1NWUzMzVhNjEzY2FlNTllOTA5ZGJiMmM5IgorCitpbmhlcml0IGF1dG90b29scworCitkb19jb25maWd1cmUgKCkgeworICAgIGxuIC1zZiAgLi4vYWNpbmNsdWRlLm00ICR7U30vYWNpbmNsdWRlLm00CisgICAgYXV0b3Rvb2xzX2RvX2NvbmZpZ3VyZQorfQorCitCQkNMQVNTRVhURU5EICs9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyLTMuMS4zL2xvbmctbG9uZy10aHVtYi5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E3MTAwZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci0zLjEuMy9sb25nLWxvbmctdGh1bWIucGF0Y2gKQEAgLTAsMCArMSwzOSBAQAorRnJvbSA4NDAyMWIxZTIzNjUwODE2OWJlNjVlODAyYTljMGEyNWZjOWE4ODI3IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogUGhpbCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KK0RhdGU6IE1vbiwgMjcgT2N0IDIwMDggMjI6MjY6MzUgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gbXBmcjogY3J1c2FkZSBhZ2FpbnN0IGlubGluZSBhc3NlbWJsZXIKKworV2l0aG91dCB0aGlzLCBidWlsZCBmYWlscyBmb3IgdGh1bWI6Cit8IHtzdGFuZGFyZCBpbnB1dH06IEFzc2VtYmxlciBtZXNzYWdlczoKK3wge3N0YW5kYXJkIGlucHV0fToxOTk6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCBzbCxyMCxyMixyMScKK3wge3N0YW5kYXJkIGlucHV0fToyMTQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCBzbCxyMixyMSxmcCcKK3wge3N0YW5kYXJkIGlucHV0fToyMTk6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyBmcCxyMCxzbCcKK3wge3N0YW5kYXJkIGlucHV0fToyMjA6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyByMixyMiwjMCcKK3wge3N0YW5kYXJkIGlucHV0fToyMzU6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxzbCxyMSxyMycKK3wge3N0YW5kYXJkIGlucHV0fToyNDQ6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCBmcCxpcCxyMSxyMycKK3wge3N0YW5kYXJkIGlucHV0fToyNTM6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyByMyxzbCxmcCcKK3wge3N0YW5kYXJkIGlucHV0fToyNTQ6IEVycm9yOiB1bnNoaWZ0ZWQgcmVnaXN0ZXIgcmVxdWlyZWQgLS0gYGFkYyBpcCxpcCwjMCcKK3wge3N0YW5kYXJkIGlucHV0fToyNTk6IEVycm9yOiBpbnN0cnVjdGlvbiBub3Qgc3VwcG9ydGVkIGluIFRodW1iMTYgbW9kZSAtLSBgYWRkcyBzbCxyMSxyMCcKK3wge3N0YW5kYXJkIGlucHV0fTo2NDI6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMCxyMixyMyxyMScKK3wgLi4vYXJtLW9lLWxpbnV4LWdudWVhYmktbGlidG9vbCAtLXRhZz1DQyAgIC0tbW9kZT1jb21waWxlIGFybS1vZS1saW51eC1nbnVlYWJpLWdjYyAgLW1hcmNoPWFybXY1dGUgIC1tdGh1bWIgLW10aHVtYi1pbnRlcndvcmsgIC1tdHVuZT14c2NhbGUgLS1zeXNyb290PS9PRS9zaHItY29yZS90bXAtZWdsaWJjL3N5c3Jvb3RzL3NwaXR6IC1ESEFWRV9JTlRUWVBFU19IPTEgLURIQVZFX1NURElOVF9IPTEgLURUSU1FX1dJVEhfU1lTX1RJTUU9MSAtREhBVkVfTE9DQUxFX0g9MSAtREhBVkVfV0NIQVJfSD0xIC1ESEFWRV9TVERBUkc9MSAtREhBVkVfU1lTX1RJTUVfSD0xIC1ESEFWRV9BTExPQ0FfSD0xIC1ESEFWRV9TVERJTlRfSD0xIC1ESEFWRV9WQV9DT1BZPTEgLURIQVZFX1NFVExPQ0FMRT0xIC1ESEFWRV9HRVRUSU1FT0ZEQVk9MSAtREhBVkVfTE9OR19MT05HPTEgLURIQVZFX0lOVE1BWF9UPTEgLURNUEZSX0hBVkVfSU5UTUFYX01BWD0xIC1ETVBGUl9IQVZFX0ZFU0VUUk9VTkQ9MSAtREhBVkVfUk9VTkQ9MSAtREhBVkVfVFJVTkM9MSAtREhBVkVfRkxPT1I9MSAtREhBVkVfQ0VJTD0xIC1ESEFWRV9ORUFSQllJTlQ9MSAtRExUX09CSkRJUj1cIi5saWJzL1wiIC1ESEFWRV9BVFRSSUJVVEVfTU9ERT0xIC1ESEFWRV9fX0dNUE5fUk9PVFJFTT0xIC1ESEFWRV9fX0dNUE5fU0JQSTFfRElWQVBQUl9RPTEgLUkuICAgICAtTzIgLXBpcGUgLWcgLWZlbGltaW5hdGUtdW51c2VkLWRlYnVnLXR5cGVzIC1mZmxvYXQtc3RvcmUgLWMgLW8gcG93LmxvIHBvdy5jCit8IHtzdGFuZGFyZCBpbnB1dH06MTE1NDogRXJyb3I6IHNlbGVjdGVkIHByb2Nlc3NvciBkb2VzIG5vdCBzdXBwb3J0IFRodW1iIG1vZGUgYHVtdWxsIHIwLHIxLHNsLGlwJworfCB7c3RhbmRhcmQgaW5wdXR9OjExNjY6IEVycm9yOiBzZWxlY3RlZCBwcm9jZXNzb3IgZG9lcyBub3Qgc3VwcG9ydCBUaHVtYiBtb2RlIGB1bXVsbCByMyxyMixpcCxyMCcKK3wge3N0YW5kYXJkIGlucHV0fToxMTcxOiBFcnJvcjogaW5zdHJ1Y3Rpb24gbm90IHN1cHBvcnRlZCBpbiBUaHVtYjE2IG1vZGUgLS0gYGFkZHMgcjAscjEscjMnCit8IHtzdGFuZGFyZCBpbnB1dH06MTE3MjogRXJyb3I6IHVuc2hpZnRlZCByZWdpc3RlciByZXF1aXJlZCAtLSBgYWRjIHIyLHIyLCMwJworfCBtYWtlWzJdOiAqKiogW211bC5sb10gRXJyb3IgMQorCitTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gSmFuc2EgPE1hcnRpbi5KYW5zYUBnbWFpbC5jb20+CisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCistLS0gbXBmci5vbGQvc3JjL21wZnItbG9uZ2xvbmcuaAkyMDA4LTAxLTAxIDAzOjI5OjA5LjAwMDAwMDAwMCArMDAwMAorKysrIG1wZnIvc3JjL21wZnItbG9uZ2xvbmcuaAkyMDA4LTEwLTI3IDIxOjQ2OjQ0LjAwMDAwMDAwMCArMDAwMAorQEAgLTQwNiw3ICs0MDYsNyBAQAorIAkgICAgICJySUoiICgoVVNJdHlwZSkgKGJsKSkpCisgI2VuZGlmCisgCistI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyCisrI2lmIGRlZmluZWQgKF9fYXJtX18pICYmIFdfVFlQRV9TSVpFID09IDMyICYmICFkZWZpbmVkKF9fdGh1bWJfXykKKyAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgXAorICAgX19hc21fXyAoImFkZHNcdCUxLCAlNCwgJTVcblx0YWRjXHQlMCwgJTIsICUzIgkJCVwKKyAJICAgOiAiPXIiIChzaCksICI9JnIiIChzbCkJCQkJCVwKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L21wZnIvbXBmci5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmM2Y5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnIuaW5jCkBAIC0wLDAgKzEsNiBAQAorU1VNTUFSWSA9ICJDIGxpYnJhcnkgZm9yIG11bHRpcGxlLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbnMgd2l0aCBleGFjdCByb3VuZGluZyIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cubXBmci5vcmcvIgorTElDRU5TRSA9ICJMR1BMdjMrIgorU0VDVElPTiA9ICJkZXZlbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgdGV4aW5mbwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbXBmci9tcGZyXzMuMS4zLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTliNTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9tcGZyL21wZnJfMy4xLjMuYmIKQEAgLTAsMCArMSwxNyBAQAorcmVxdWlyZSBtcGZyLmluYworCitMSUNFTlNFID0gIkdQTHYzICYgTEdQTHYzIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9ZDMyMjM5YmNiNjczNDYzYWI4NzRlODBkNDdmYWU1MDQgXAorCQkgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNiIKK0RFUEVORFMgPSAiZ21wIgorCitTUkNfVVJJID0gImh0dHA6Ly93d3cubXBmci5vcmcvbXBmci0ke1BWfS9tcGZyLSR7UFZ9LnRhci54eiBcCisgICAgICAgICAgIGZpbGU6Ly9sb25nLWxvbmctdGh1bWIucGF0Y2ggXAorICAgICAgICAgICAiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICI2OTY5Mzk4Y2QyZmJjNTZhNmFmNTcwYjUyNzNjNTZhOSIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI2ODM1YTA4YmQ5OTJjODI1NzY0MTc5MWU5YTZhMmIzNWIwMjMzNmM4ZGUyNmQwYTg1Nzc5NTM3NDdlNTE0YTE2IgorCitTID0gIiR7V09SS0RJUn0vbXBmci0ke1BWfSIKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vZ251dGxzXzQuM19maXh1cC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTlmNWUzCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL2dudXRsc180LjNfZml4dXAucGF0Y2gKQEAgLTAsMCArMSw2OCBAQAorcmVwbGFjZSBkZXByZWNhdGVkIEdudVRMUyBmdW5jdGlvbnMgd2l0aCBuZXdlciBvbmVzIGlmIGF2YWlsYWJsZSAKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IEFybWluIEt1c3RlciA8YWt1c3RlcjgwOEBnbWFpbC5jb20+CisKK0luZGV4OiBuZW9uLTAuMzAuMS9tYWNyb3MvbmVvbi5tNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5lb24tMC4zMC4xLm9yaWcvbWFjcm9zL25lb24ubTQKKysrKyBuZW9uLTAuMzAuMS9tYWNyb3MvbmVvbi5tNAorQEAgLTk4Nyw2ICs5ODcsMTAgQEAgZ251dGxzKQorICAgICAgICAgICAgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9nZXRfeDUwOV9jYXMgXAorICAgICAgICAgICAgICAgICAgIGdudXRsc194NTA5X2NydF9zaWduMl0pCisgCisrICAgIyBnbnV0bHMgNC4zIGNoZWNrCisrICAgQUNfQ0hFQ0tfTElCKGdudXRscywgZ251dGxzX2dsb2JhbF9pbml0KQorKyAgIEFDX0NIRUNLX0ZVTkNTKGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfcmV0cmlldmVfZnVuY3Rpb24sLCkKKysKKyAgICAjIGZhaWwgaWYgZ251dGxzX3g1MDlfY3J0X3NpZ24yIGlzIG5vdCBmb3VuZCAoaXQgd2FzIGludHJvZHVjZWQgaW4gMS4yLjAsIHdoaWNoIGlzIHJlcXVpcmVkKQorICAgIGlmIHRlc3QgeCR7YWNfY3ZfZnVuY19nbnV0bHNfeDUwOV9jcnRfc2lnbjJ9ICE9IHh5ZXM7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKFtHbnVUTFMgdmVyc2lvbiBwcmVkYXRlcyBnbnV0bHNfeDUwOV9jcnRfc2lnbjIsIG5ld2VyIHZlcnNpb24gcmVxdWlyZWQgKGF0IGxlYXN0IDEuMi4wKV0pCitJbmRleDogbmVvbi0wLjMwLjEvc3JjL25lX2dudXRscy5jCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbmVvbi0wLjMwLjEub3JpZy9zcmMvbmVfZ251dGxzLmMKKysrKyBuZW9uLTAuMzAuMS9zcmMvbmVfZ251dGxzLmMKK0BAIC01NTMsNyArNTUzLDEzIEBAIGR1cF9lcnJvcjoKKyBzdGF0aWMgaW50IHByb3ZpZGVfY2xpZW50X2NlcnQoZ251dGxzX3Nlc3Npb25fdCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbnV0bHNfZGF0dW1fdCAqcmVxX2NhX3JkbiwgaW50IG5yZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbnV0bHNfcGtfYWxnb3JpdGhtX3QgKnNpZ25fYWxnb3MsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWduX2FsZ29zX2xlbmd0aCwgZ251dGxzX3JldHJfc3QgKnN0KQorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2lnbl9hbGdvc19sZW5ndGgsCisrI2lmIEhBVkVfR05VVExTX0NFUlRJRklDQVRFX1NFVF9SRVRSSUVWRV9GVU5DVElPTgorKyAgICBnbnV0bHNfcmV0cjJfc3QqIHN0CisrI2Vsc2UKKysgICAgZ251dGxzX3JldHJfc3QgKnN0CisrI2VuZGlmCisrICAgICkKKyB7CisgICAgIG5lX3Nlc3Npb24gKnNlc3MgPSBnbnV0bHNfc2Vzc2lvbl9nZXRfcHRyKHNlc3Npb24pOworICAgICAKK0BAIC02MTcsOCArNjIzLDExIEBAIHN0YXRpYyBpbnQgcHJvdmlkZV9jbGllbnRfY2VydChnbnV0bHNfc2UKKyAjZW5kaWYKKyAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICBORV9ERUJVRyhORV9EQkdfU1NMLCAiU3VwcGx5aW5nIGNsaWVudCBjZXJ0aWZpY2F0ZS5cbiIpOworLQorKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgICAgICAgICBzdC0+Y2VydF90eXBlID0gdHlwZTsKKysjZWxzZQorICAgICAgICAgICAgIHN0LT50eXBlID0gdHlwZTsKKysjZW5kaWYKKyAgICAgICAgICAgICBzdC0+bmNlcnRzID0gMTsKKyAgICAgICAgICAgICBzdC0+Y2VydC54NTA5ID0gJnNlc3MtPmNsaWVudF9jZXJ0LT5jZXJ0LnN1YmplY3Q7CisgICAgICAgICAgICAgc3QtPmtleS54NTA5ID0gc2Vzcy0+Y2xpZW50X2NlcnQtPnBrZXk7CitAQCAtNjQ5LDggKzY1OCwxNCBAQCBuZV9zc2xfY29udGV4dCAqbmVfc3NsX2NvbnRleHRfY3JlYXRlKGluCisgICAgIG5lX3NzbF9jb250ZXh0ICpjdHggPSBuZV9jYWxsb2Moc2l6ZW9mICpjdHgpOworICAgICBnbnV0bHNfY2VydGlmaWNhdGVfYWxsb2NhdGVfY3JlZGVudGlhbHMoJmN0eC0+Y3JlZCk7CisgICAgIGlmIChmbGFncyA9PSBORV9TU0xfQ1RYX0NMSUVOVCkgeworKworKyNpZiBIQVZFX0dOVVRMU19DRVJUSUZJQ0FURV9TRVRfUkVUUklFVkVfRlVOQ1RJT04KKysgICAgICAgIGdudXRsc19jZXJ0aWZpY2F0ZV9zZXRfcmV0cmlldmVfZnVuY3Rpb24oY3R4LT5jcmVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlX2NsaWVudF9jZXJ0KTsKKysjZWxzZQorICAgICAgICAgZ251dGxzX2NlcnRpZmljYXRlX2NsaWVudF9zZXRfcmV0cmlldmVfZnVuY3Rpb24oY3R4LT5jcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZV9jbGllbnRfY2VydCk7CisrI2VuZGlmCisgICAgIH0KKyAgICAgZ251dGxzX2NlcnRpZmljYXRlX3NldF92ZXJpZnlfZmxhZ3MoY3R4LT5jcmVkLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VVExTX1ZFUklGWV9BTExPV19YNTA5X1YxX0NBX0NSVCk7CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb24vcGtnY29uZmlnLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzlkYmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmVvbi9uZW9uL3BrZ2NvbmZpZy5wYXRjaApAQCAtMCwwICsxLDE1IEBACitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW2NvbmZpZ3VyYXRpb25dCisKKy0tLQorIG5lb24ucGMuaW4gfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKy0tLSBuZW9uLTAuMzAuMS5vcmlnL25lb24ucGMuaW4KKysrKyBuZW9uLTAuMzAuMS9uZW9uLnBjLmluCitAQCAtNyw1ICs3LDUgQEAgTmFtZTogbmVvbgorIERlc2NyaXB0aW9uOiBIVFRQL1dlYkRBViBjbGllbnQgbGlicmFyeQorIFZlcnNpb246IEBORU9OX1ZFUlNJT05ACisgTGliczogLUwke2xpYmRpcn0gLWxuZW9uIEBORU9OX1BDX0xJQlNACistTGlicy5wcml2YXRlOiBATkVPTl9MSUJTQAorK0xpYnMucHJpdmF0ZTogLUwke2xpYmRpcn0gLWx6IC1sZ2NyeXB0IC1sZ3BnLWVycm9yIC1sZXhwYXQgLWxnbnV0bHMKKyBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9uZW9uIEBORU9OX0NGTEFHU0AKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25lb24vbmVvbl8wLjMwLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNDQzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZW9uL25lb25fMC4zMC4xLmJiCkBAIC0wLDAgKzEsMjcgQEAKK1NVTU1BUlkgPSAiQW4gSFRUUCBhbmQgV2ViREFWIGNsaWVudCBsaWJyYXJ5IHdpdGggYSBDIGludGVyZmFjZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cud2ViZGF2Lm9yZy9uZW9uLyIKK1NFQ1RJT04gPSAibGlicyIKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL3NyYy9DT1BZSU5HLkxJQjttZDU9ZjMwYTk3MTZlZjM3NjJlMzQ2N2EyZjYyYmY3OTBmMGEgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc3JjL25lX3V0aWxzLmg7YmVnaW5saW5lPTE7ZW5kbGluZT0yMDttZDU9MmNhY2E2MDk1MzhlZGRhYTZmNmFkZjEyMGEyMTgwMzciCitERVBFTkRTID0gInpsaWIgbGlieG1sMiBleHBhdCB0aW1lIGdudXRscyBsaWJwcm94eSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInpsaWItbmF0aXZlIGxpYnhtbDItbmF0aXZlIGV4cGF0LW5hdGl2ZSBnbnV0bHMtbmF0aXZlIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3LndlYmRhdi5vcmcvJHtCUE59LyR7QlBOfS0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcGtnY29uZmlnLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2dudXRsc180LjNfZml4dXAucGF0Y2giCitTUkNfVVJJW21kNXN1bV0gPSAiMjMxYWRlYmU1YzJmNzhmZGVkM2UzZGY2ZTk1ODg3OGUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiMDBjNjI2YzBkYzE4ZDA5NGFiMzc0ZGJkOWEzNTQ5MTViZmU0Nzc2NDMzMjg5Mzg2ZWQ0ODljMmVjMDg0NWNkZCIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9uZW9uLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkIGxpYl9wYWNrYWdlIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS13aXRoLXNzbD1nbnV0bHMgLS13aXRoLWxpYnhtbDIgLS13aXRoLWV4cGF0IC0tZW5hYmxlLXNoYXJlZCIKK0VYVFJBX09FQ09ORiArPSAiLS13aXRob3V0LWdzc2FwaSIKKworZG9fY29tcGlsZV9hcHBlbmQoKSB7CisJb2VfcnVubWFrZSAtQyB0ZXN0Cit9CmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9maWxlcy9BZGQtdGFyZ2V0LXRvLW9ubHktYnVpbGQtdGVzdHMtbm90LXJ1bi10aGVtLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZGE3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvQWRkLXRhcmdldC10by1vbmx5LWJ1aWxkLXRlc3RzLW5vdC1ydW4tdGhlbS5wYXRjaApAQCAtMCwwICsxLDQ2IEBACitGcm9tIDQ2ZWRmMDFjYzk4ZGI5ZjlmZWVjOTg0ODk3ODM2ZGZkZDI2YmRjOGQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorRGF0ZTogV2VkLCAxMiBBdWcgMjAxNSAyMzoyNzoyNyArMDMwMAorU3ViamVjdDogW1BBVENIXSBBZGQgdGFyZ2V0IHRvIG9ubHkgYnVpbGQgdGVzdHMgKG5vdCBydW4gdGhlbSkKKworTm90IHNlbmRpbmcgdXBzdHJlYW0gYXMgdGhpcyBpcyBvbmx5IGEgc3RhcnQgb2YgYSBzb2x1dGlvbiB0bworaW5zdGFsbGFibGUgdGVzdHM6IEl0J3MgdXNlZnVsIGZvciB1cyBhbHJlYWR5IGFzIGlzLgorCitVcHN0cmVhbS1TdGF0dXM6IEluYXBwcm9wcmlhdGUgW25vdCBhIGNvbXBsZXRlIHNvbHV0aW9uXQorCitTaWduZWQtb2ZmLWJ5OiBKdXNzaSBLdWtrb25lbiA8anVzc2kua3Vra29uZW5AaW50ZWwuY29tPgorLS0tCisgTWFrZWZpbGUuaW4gICAgICAgICAgIHwgMyArKysKKyB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4gfCAyICsrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmluIGIvTWFrZWZpbGUuaW4KK2luZGV4IDA4ZWZiN2QuLjc5MDkzNDIgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC01NSw2ICs1NSw5IEBAIGNsZWFuIGRpc3RjbGVhbiBtb3N0bHljbGVhbiBtYWludGFpbmVyLWNsZWFuIHRhZ3M6CisgCSAgZWNobyAiTWFraW5nICRAIGluICQkZCIgOyAoY2QgJCRkICYmICQoTUFLRSkgJEApOyBkb25lCisgCSQoTUFLRSkgJEAtaGVyZQorIAorK2J1aWxkdGVzdDoKKysJZWNobyAiTWFraW5nICRAIGluIHRlc3RzdWl0ZSIgOyAoY2QgdGVzdHN1aXRlICYmICQoTUFLRSkgJEApCisrCisgY2hlY2staGVyZToKKyAJdHJ1ZQorIAorZGlmZiAtLWdpdCBhL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgoraW5kZXggNmJjMTkwNy4uYmI2NWJmMCAxMDA2NDQKKy0tLSBhL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgorKysrIGIvdGVzdHN1aXRlL01ha2VmaWxlLmluCitAQCAtMTE2LDYgKzExNiw4IEBAICQoVEFSR0VUUykgJChFWFRSQV9UQVJHRVRTKTogdGVzdHV0aWxzLiQoT0JKRVhUKSAuLi9uZXR0bGUtaW50ZXJuYWwuJChPQkpFWFQpIFwKKyAjIGRhdGEuCisgVkFMR1JJTkQgPSB2YWxncmluZCAtLWVycm9yLWV4aXRjb2RlPTEgLS1sZWFrLWNoZWNrPWZ1bGwgLS1zaG93LXJlYWNoYWJsZT15ZXMgQElGX0FTTUAgLS1wYXJ0aWFsLWxvYWRzLW9rPXllcworIAorK2J1aWxkdGVzdDogJChUU19BTEwpCisrCisgIyBUaGUgUEFUSCB1cGRhdGUgaXMgZm9yIGxvY2F0aW5nIGRsbHMgb24gdypuZG93cy4KKyBjaGVjazogJChUU19BTEwpCisgCUxEX0xJQlJBUllfUEFUSD0uLi8ubGliIFBBVEg9Ii4uLy5saWI6JCRQQVRIIiBzcmNkaXI9IiQoc3JjZGlyKSIgXAorLS0gCisyLjEuNAorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvZmlsZXMvcnVuLXB0ZXN0IGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTBiZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL2ZpbGVzL3J1bi1wdGVzdApAQCAtMCwwICsxLDM2IEBACisjISAvYmluL3NoCisKK2NkIHRlc3RzdWl0ZQorCitmYWlsZWQ9MAorYWxsPTAKKworZm9yIGYgaW4gKi10ZXN0OyBkbworICAgIGlmIFsgIiRmIiA9ICJzaGExLWh1Z2UtdGVzdCIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiU0tJUDogJGYgKHNraXBwZWQgZm9yIGx1ZGljcm91cyBydW4gdGltZSkiCisgICAgICAgIGNvbnRpbnVlCisgICAgZmkKKworICAgICIuLyRmIgorICAgIGNhc2UgIiQ/IiBpbgorICAgICAgICAwKQorICAgICAgICAgICAgZWNobyAiUEFTUzogJGYiCisgICAgICAgICAgICBhbGw9JCgoYWxsICsgMSkpCisgICAgICAgICAgICA7OworICAgICAgICA3NykKKyAgICAgICAgICAgIGVjaG8gIlNLSVA6ICRmIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICAgIGVjaG8gIkZBSUw6ICRmIgorICAgICAgICAgICAgZmFpbGVkPSQoKGZhaWxlZCArIDEpKQorICAgICAgICAgICAgYWxsPSQoKGFsbCArIDEpKQorICAgICAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2lmIFsgIiRmYWlsZWQiIC1lcSAwIF0gOyB0aGVuCisgIGVjaG8gIkFsbCAkYWxsIHRlc3RzIHBhc3NlZCIKK2Vsc2UKKyAgZWNobyAiJGZhaWxlZCBvZiAkYWxsIHRlc3RzIGZhaWxlZCIKK2ZpCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmZmY2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGUuaW5jCkBAIC0wLDAgKzEsNDMgQEAKK1NVTU1BUlkgPSAiQSBsb3cgbGV2ZWwgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IgorSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9+bmlzc2UvbmV0dGxlLyIKK1NFQ1RJT04gPSAibGlicyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MSUI7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3NlcnBlbnQtZGVjcnlwdC5jO2JlZ2lubGluZT01MztlbmRsaW5lPTY3O21kNT1iY2ZkNDc0NWQ1M2NhNTdmODI5MDcwODk4OThlMzkwZCBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LXNldC1rZXkuYztiZWdpbmxpbmU9NTY7ZW5kbGluZT03MDttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQiCisKK0RFUEVORFMgKz0gImdtcCIKKworU1JDX1VSSSA9ICJodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL35uaXNzZS9hcmNoaXZlLyR7QlB9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9BZGQtdGFyZ2V0LXRvLW9ubHktYnVpbGQtdGVzdHMtbm90LXJ1bi10aGVtLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3J1bi1wdGVzdCBcCisgICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjAwM2Q1MTQ3OTExMzE3OTMxZGQ0NTM1MjBlYjIzNGE1IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJjNzFlYmQ0MzQzNTUzN2Q3Njc3OTllNDE0ZmNlODhlNTIxYjcyNzhkNDhjODYwNjUxMjE2ZTFmYzY1NTViNDAiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtb3BlbnNzbCIKKworaW5oZXJpdCBhdXRvdG9vbHMgcHRlc3QKKworZG9fY29uZmlndXJlX3ByZXBlbmQoKSB7CisgICAgICAgaWYgWyAhIC1lICR7U30vYWNpbmNsdWRlLm00IC1hIC1lICR7U30vYWNsb2NhbC5tNCBdOyB0aGVuCisgICAgICAgICAgICAgICBjcCAke1N9L2FjbG9jYWwubTQgJHtTfS9hY2luY2x1ZGUubTQKKyAgICAgICBmaQorfQorCitkb19jb21waWxlX3B0ZXN0KCkgeworICAgICAgICBvZV9ydW5tYWtlIGJ1aWxkdGVzdAorfQorCitkb19pbnN0YWxsX3B0ZXN0KCkgeworICAgICAgICBpbnN0YWxsIC1kICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KKyAgICAgICAgaW5zdGFsbCAke1N9L3Rlc3RzdWl0ZS9nb2xkLWJ1Zy50eHQgJHtEfSR7UFRFU1RfUEFUSH0vdGVzdHN1aXRlLworICAgICAgICBpbnN0YWxsICR7U30vdGVzdHN1aXRlLyotdGVzdCAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvCisgICAgICAgICMgdG9vbHMgY2FuIGJlIGZvdW5kIGluIFBBVEgsIG5vdCBpbiAuLi90b29scy8KKyAgICAgICAgc2VkIC1pIC1lICdzfC4uL3Rvb2xzL3x8JyAke0R9JHtQVEVTVF9QQVRIfS90ZXN0c3VpdGUvKi10ZXN0CisgICAgICAgIGluc3RhbGwgJHtCfS90ZXN0c3VpdGUvKi10ZXN0ICR7RH0ke1BURVNUX1BBVEh9L3Rlc3RzdWl0ZS8KK30KKworCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uZXR0bGUvbmV0dGxlXzIuNy4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTI1NzRhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8yLjcuMS5iYgpAQCAtMCwwICsxLDEyIEBACityZXF1aXJlIG5ldHRsZS5pbmMKKworTElDRU5TRSA9ICJMR1BMdjIuMSAmIEdQTHYyIgorTElDRU5TRV8ke1BOfSA9ICJMR1BMdjIuMSsiCisKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTElCO21kNT0yZDUwMjVkNGFhMzQ5NWJlZmVmOGYxNzIwNmE1YjBhMSBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9NTM7ZW5kbGluZT02NzttZDU9YmNmZDQ3NDVkNTNjYTU3ZjgyOTA3MDg5ODk4ZTM5MGQgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTU2O2VuZGxpbmU9NzA7bWQ1PWJjZmQ0NzQ1ZDUzY2E1N2Y4MjkwNzA4OTg5OGUzOTBkIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMDAzZDUxNDc5MTEzMTc5MzFkZDQ1MzUyMGViMjM0YTUiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiYmM3MWViZDQzNDM1NTM3ZDc2Nzc5OWU0MTRmY2U4OGU1MjFiNzI3OGQ0OGM4NjA2NTEyMTZlMWZjNjU1NWI0MCIKKwpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbmV0dGxlL25ldHRsZV8zLjEuMS5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3MTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25ldHRsZS9uZXR0bGVfMy4xLjEuYmIKQEAgLTAsMCArMSwxMSBAQAorcmVxdWlyZSBuZXR0bGUuaW5jCisKK0xJQ0VOU0UgPSAiTEdQTHYzKyB8IEdQTHYyKyIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORy5MRVNTRVJ2MzttZDU9NmE2YThlMDIwODM4YjIzNDA2YzgxYjE5YzFkNDZkZjYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlOR3YyO21kNT1iMjM0ZWU0ZDY5ZjVmY2U0NDg2YTgwZmRhZjRhNDI2MyBcCisgICAgICAgICAgICAgICAgICAgIGZpbGU6Ly9zZXJwZW50LWRlY3J5cHQuYztiZWdpbmxpbmU9MTQ7ZW5kbGluZT0zNjttZDU9Y2EwZDIyMGJjNDEzZTE4NDJlY2M1MDc2OTBjZTQxNmUgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vc2VycGVudC1zZXQta2V5LmM7YmVnaW5saW5lPTE0O2VuZGxpbmU9MzY7bWQ1PWNhMGQyMjBiYzQxM2UxODQyZWNjNTA3NjkwY2U0MTZlIgorCitTUkNfVVJJW21kNXN1bV0gPSAiYjQwZmE4OGRjMzJmMzdhMTgyYjZiNDIwOTJlYmIxNDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNWZkNGQyNWQ2NGQ4ZGRjYjg1ZDBkODk3NTcyYWY3M2IwNWI0ZDE2M2M2Y2M0OTQzOGE1YmZiYjhmZjI5M2Q0YyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aC9wa2djb25maWcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTEyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9ucHRoL25wdGgvcGtnY29uZmlnLnBhdGNoCkBAIC0wLDAgKzEsNDkgQEAKK0FkZGVkIG5wdGggcGtnY29uZmlnIGZpbGUKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK1NpZ25lZC1vZmYtYnk6IFNhdWwgV29sZCA8c2d3QGxpbnV4LmludGVsLmNvbT4KKworSW5kZXg6IG5wdGgtMS4xL3NyYy9ucHRoLnBjLmluCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgbnB0aC0xLjEvc3JjL25wdGgucGMuaW4KK0BAIC0wLDAgKzEsMTAgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKysKKytOYW1lOiBucHRoCisrRGVzY3JpcHRpb246IGEgbmV3IHBvcnRhYmxlIHBvc2l4IHRocmVhZGluZyBsaWJyYXJ5CisrVmVyc2lvbjogQFZFUlNJT05ACisrTGliczogLUwke2xpYmRpcn0gLWxucHRoIC1scHRocmVhZAorK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CitJbmRleDogbnB0aC0xLjEvc3JjL01ha2VmaWxlLmFtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gbnB0aC0xLjEub3JpZy9zcmMvTWFrZWZpbGUuYW0KKysrKyBucHRoLTEuMS9zcmMvTWFrZWZpbGUuYW0KK0BAIC0yNyw4ICsyNywxMCBAQAorICMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIAorICMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgorK3BrZ2NvbmZpZ2RpciA9ICQobGliZGlyKS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IG5wdGgucGMKKyAKKy1FWFRSQV9ESVNUID0gbGlibnB0aC52ZXJzCisrRVhUUkFfRElTVCA9IGxpYm5wdGgudmVycyBucHRoLnBjCisgIwkgICAgIHZlcnNpb25pbmZvLnJjLmluCisgbm9kaXN0X2luY2x1ZGVfSEVBREVSUyA9IG5wdGguaAorIAorSW5kZXg6IG5wdGgtMS4xL2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5wdGgtMS4xLm9yaWcvY29uZmlndXJlLmFjCisrKysgbnB0aC0xLjEvY29uZmlndXJlLmFjCitAQCAtMzM3LDYgKzMzNyw3IEBAIHNyYy9NYWtlZmlsZQorIHczMi9NYWtlZmlsZQorIHRlc3RzL01ha2VmaWxlXSkKKyBBQ19DT05GSUdfRklMRVMobnB0aC1jb25maWcsIGNobW9kICt4IG5wdGgtY29uZmlnKQorK0FDX0NPTkZJR19GSUxFUyhbc3JjL25wdGgucGNdKQorIEFDX09VVFBVVAorIAorIGVjaG8gIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnB0aC9ucHRoXzEuMi5iYiBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOTYyZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25wdGgvbnB0aF8xLjIuYmIKQEAgLTAsMCArMSwyMSBAQAorU1VNTUFSWSA9ICJOZXcgR05VIFBvcnRhYmxlIFRocmVhZHMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251cGcub3JnL3NvZnR3YXJlL3B0aC8iCitTRUNUSU9OID0gImxpYnMiCitMSUNFTlNFID0gIkxHUEx2MysgJiBHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gIlwKKyAgICBmaWxlOi8vQ09QWUlORzttZDU9NzUxNDE5MjYwYWE5NTQ0OTlmN2FiYWFiYWE4ODJiYmVcCisgICAgZmlsZTovL0NPUFlJTkcuTEVTU0VSO21kNT02YTZhOGUwMjA4MzhiMjM0MDZjODFiMTljMWQ0NmRmNlwKKyAgICAiCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0L25wdGgvbnB0aC0ke1BWfS50YXIuYnoyIFwKKyAgICAgICAgICAgZmlsZTovL3BrZ2NvbmZpZy5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiMjI2YmFjNzM3NGI5NDY2YzZlYzI2YjFjMzRkYWI4NDQiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNmRkYmRkZGIyY2Y0OWE0NzIzZjlkMWFkNjU2M2M0ODBkNjc2MGRjYjYzY2I3NzI2YjhmYzNiYzJlMWI2YzA4YSIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKKworaW5oZXJpdCBhdXRvdG9vbHMgYmluY29uZmlnLWRpc2FibGVkCisKK0ZJTEVTXyR7UE59ID0gIiR7bGliZGlyfS9saWJucHRoLnNvLioiCitGSUxFU18ke1BOfS1kZXYgKz0gIiR7YmluZGlyfS9ucHRoLWNvbmZpZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL2ZpeC1idWlsZC1vbi14ODZfNjQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJiNzI1OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9maXgtYnVpbGQtb24teDg2XzY0LnBhdGNoCkBAIC0wLDAgKzEsNTIgQEAKK0ZpeCBidWlsZCBmYWlsdXJlIG9uIHg4Nl82NAorCitXaGVuIHRoZSB0YXJnZXRfY3B1IGlzIHg4Nl82NCwgd2Ugc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBwa2cgdXNlcyA2NGJpdCwKK29ubHkgaWYgVVNFX04zMiBpcyBzZXQsIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgcGtnIHVzZXMgMzJiaXQuIEl0IHVzZWQgYQorb3Bwb3NpdGUgbG9naWMgYmVmb3JlLgorCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBjb25maWd1cmUuaW4gfCAgIDEyICsrKysrKy0tLS0tLQorIDEgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQorCitJbmRleDogbnNwci9jb25maWd1cmUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3ByLm9yaWcvY29uZmlndXJlLmluCisrKysgbnNwci9jb25maWd1cmUuaW4KK0BAIC0xODc1LDI4ICsxODc1LDI0IEBAIHRvb2xzIGFyZSBzZWxlY3RlZCBkdXJpbmcgdGhlIFhjb2RlL0RldmUKKyAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfaWE2NC5zCisgICAgICAgICA7OworICAgICB4ODZfNjQpCistICAgICAgICBpZiB0ZXN0IC1uICIkVVNFXzY0IjsgdGhlbgorLSAgICAgICAgICAgIFBSX01EX0FTRklMRVM9b3NfTGludXhfeDg2XzY0LnMKKy0gICAgICAgIGVsaWYgdGVzdCAtbiAiJFVTRV9YMzIiOyB0aGVuCisrICAgICAgICBpZiB0ZXN0IC1uICIkVVNFX1gzMiI7IHRoZW4KKysgICAgICAgICAgICBBQ19ERUZJTkUoaTM4NikKKyAgICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCisgICAgICAgICAgICAgQ0M9IiRDQyAtbXgzMiIKKyAgICAgICAgICAgICBDWFg9IiRDWFggLW14MzIiCisgICAgICAgICBlbHNlCistICAgICAgICAgICAgQUNfREVGSU5FKGkzODYpCistICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF94ODYucworLSAgICAgICAgICAgIENDPSIkQ0MgLW0zMiIKKy0gICAgICAgICAgICBDWFg9IiRDWFggLW0zMiIKKysgICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3g4Nl82NC5zCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgcHBjfHBvd2VycGMpCisgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3BwYy5zCisgICAgICAgICA7OworICAgICBwb3dlcnBjNjQpCistICAgICAgICBpZiB0ZXN0IC1uICIkVVNFXzY0IjsgdGhlbgorKyAgICAgICAgaWYgdGVzdCAtbiAiJFVTRV9OMzIiOyB0aGVuCisrICAgICAgICAgICAgUFJfTURfQVNGSUxFUz1vc19MaW51eF9wcGMucworKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIENDPSIkQ0MgLW02NCIKKyAgICAgICAgICAgICBDWFg9IiRDWFggLW02NCIKKy0gICAgICAgIGVsc2UKKy0gICAgICAgICAgICBQUl9NRF9BU0ZJTEVTPW9zX0xpbnV4X3BwYy5zCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgbTY4aykKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL25zcHIucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM3ZDBiYwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9uc3ByLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK29zX2xpYnM9LWxwdGhyZWFkIC1sZGwKK3ByZWZpeD1PRVBSRUZJWAorZXhlY19wcmVmaXg9T0VFWEVDUFJFRklYCitsaWJkaXI9T0VMSUJESVIKK2luY2x1ZGVkaXI9T0VJTkNESVIKKworTmFtZTogTlNQUgorRGVzY3JpcHRpb246IFRoZSBOZXRzY2FwZSBQb3J0YWJsZSBSdW50aW1lCitWZXJzaW9uOiA0LjkuNQorTGliczogLUwke2xpYmRpcn0gLWxwbGRzNCAtbHBsYzQgLWxuc3ByNCAtbHB0aHJlYWQgLWxkbAorQ2ZsYWdzOgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1ycGF0aC1mcm9tLXRlc3RzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZTc4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHIvcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorQXV0aG9yOiBBbmRyZWkgR2hlcnphbiA8YW5kcmVpQGdoZXJ6YW4ucm8+CitEYXRlOiAgIFRodSBGZWIgOSAwMDowMzozOCAyMDEyICswMjAwCisKK0F2b2lkIFFBIHdhcm5pbmdzIGJ5IHJlbW92aW5nIGhhcmRjb2RlZCBycGF0aCBmcm9tIGJpbmFyaWVzLgorCitbLi4uXQorV0FSTklORzogUUEgSXNzdWU6IHBhY2thZ2UgbnNwciBjb250YWlucyBiYWQgUlBBVEgge2J1aWxkZGlyfS90bXAvd29yay9hcm12NXRlLXBva3ktbGludXgtZ251ZWFiaS9uc3ByLTQuOC45LXIxL25zcHItNC44LjkvbW96aWxsYS9uc3BycHViL3ByL3Rlc3RzLy4uLy4uL2Rpc3QvbGliCitpbiBmaWxlIHtidWlsZGRpcn0vdG1wL3dvcmsvYXJtdjV0ZS1wb2t5LWxpbnV4LWdudWVhYmkvbnNwci00LjguOS1yMS9wYWNrYWdlcy1zcGxpdC9uc3ByL3Vzci9saWIvbnNwci90ZXN0cy9tdWx0aXdhaXQKK1suLi5dCisKK1NpZ25lZC1vZmYtYnk6IEFuZHJlaSBHaGVyemFuIDxhbmRyZWlAZ2hlcnphbi5ybz4KK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitJbmRleDogbnNwci00LjguOS9tb3ppbGxhL25zcHJwdWIvcHIvdGVzdHMvTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tLSBuc3BycHViLm9yaWcvcHIvdGVzdHMvTWFrZWZpbGUuaW4JMjAxMi0wMi0xMSAwMDowMToxMC40NzYyMjA1MDUgKzAyMDAKKysrKyBuc3BycHViL3ByL3Rlc3RzL01ha2VmaWxlLmluCTIwMTItMDItMTAgMjM6NTc6NDAuMDAwMDAwMDAwICswMjAwCitAQCAtMzc5LDcgKzM3OSw3IEBACisgZW5kaWYKKyAKKyBpZmVxICgsJChmaWx0ZXItb3V0IExpbnV4IEdOVSBHTlVfJSwkKE9TX0FSQ0gpKSkKKy0gICAgTERPUFRTICs9IC1YbGlua2VyIC1ycGF0aCAkKEFCU09MVVRFX0xJQl9ESVIpCisrICAgIExET1BUUyArPSAtWGxpbmtlcgorICAgICBpZmVxICgkKFVTRV9QVEhSRUFEUyksMSkKKyAgICAgICAgIEVYVFJBX0xJQlMgPSAtbHB0aHJlYWQKKyAgICAgZW5kaWYKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByL3JlbW92ZS1zcmNkaXItZnJvbS1jb25maWd1cmUtaW4ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNzE1YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwci9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoCkBAIC0wLDAgKzEsMTkgQEAKK3RoZSAkc3JjZGlyIGlzIG5vdCBkZWZpbmVkIGF0IHRoZSB0aW1lIG9mIGdudS1jb25maWd1cml6ZS4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtPRS1Db3JlIHNwZWNpZmljXQorCitTaWduZWQtb2ZmLWJ5OiBTYXVsIFdvbGQgPHNnd0BsaW51eC5pbnRlbC5jb20+CisKK0luZGV4OiBuc3ByL2NvbmZpZ3VyZS5pbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIG5zcHIub3JpZy9jb25maWd1cmUuaW4KKysrKyBuc3ByL2NvbmZpZ3VyZS5pbgorQEAgLTgsNyArOCw3IEBAIEFDX1BSRVJFUSgyLjYxKQorIEFDX0lOSVQKKyBBQ19DT05GSUdfU1JDRElSKFtwci9pbmNsdWRlL25zcHIuaF0pCisgCistQUNfQ09ORklHX0FVWF9ESVIoJHtzcmNkaXJ9L2J1aWxkL2F1dG9jb25mKQorK0FDX0NPTkZJR19BVVhfRElSKGJ1aWxkL2F1dG9jb25mKQorIEFDX0NBTk9OSUNBTF9UQVJHRVQKKyAKKyBkbmwgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcHIvbnNwcl80LjEwLjguYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3ByL25zcHJfNC4xMC44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDk5NGUxCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNwci9uc3ByXzQuMTAuOC5iYgpAQCAtMCwwICsxLDE3NiBAQAorU1VNTUFSWSA9ICJOZXRzY2FwZSBQb3J0YWJsZSBSdW50aW1lIExpYnJhcnkiCitIT01FUEFHRSA9ICAiaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9wcm9qZWN0cy9uc3ByLyIKK0xJQ0VOU0UgPSAiR1BMLTIuMCB8IE1QTC0yLjAgfCBMR1BMLTIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL2NvbmZpZ3VyZS5pbjtiZWdpbmxpbmU9MztlbmRsaW5lPTY7bWQ1PTkwYzJmZGVlMzhlNDVkNjMwMmFiY2ZlNDc1YzhiNWM1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL01ha2VmaWxlLmluO2JlZ2lubGluZT00O2VuZGxpbmU9Mzg7bWQ1PWJlZGExZGJiOThhNTE1ZjU1N2QzZTU4ZWYwNmJjYTk5IgorU0VDVElPTiA9ICJsaWJzL25ldHdvcmsiCisKK1NSQ19VUkkgPSAiZnRwOi8vZnRwLm1vemlsbGEub3JnL3B1Yi9tb3ppbGxhLm9yZy9uc3ByL3JlbGVhc2VzL3Yke1BWfS9zcmMvbnNwci0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgICBmaWxlOi8vcmVtb3ZlLXJwYXRoLWZyb20tdGVzdHMucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZml4LWJ1aWxkLW9uLXg4Nl82NC5wYXRjaCBcCisgICAgICAgICAgIGZpbGU6Ly9yZW1vdmUtc3JjZGlyLWZyb20tY29uZmlndXJlLWluLnBhdGNoIFwKKyAgICAgICAgICAiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9uc3ByLnBjLmluIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOGQ3YzViZDBhNWIwYTdkMGU3MDViZTY2NDc5MDMwYTAiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNTA3ZWE1N2M1MjVjMGM1MjRkYWU0ODU3YTY0MmI0ZWY1YzlkNzk1NTE4NzU0YzdmODM0MjJkMjJmZTU0NGExNSIKKworUyA9ICIke1dPUktESVJ9L25zcHItJHtQVn0vbnNwciIKKworUkRFUEVORFNfJHtQTn0tZGV2ICs9ICJwZXJsIgorVEFSR0VUX0NDX0FSQ0ggKz0gIiR7TERGTEFHU30iCisKK1RFU1RTID0gIiBcCisgICAgYWNjZXB0IFwKKyAgICBhY2NlcHRyZWFkIFwKKyAgICBhY2NlcHRyZWFkZW11IFwKKyAgICBhZmZpbml0eSBcCisgICAgYWxhcm0gXAorICAgIGFub25mbSBcCisgICAgYXRvbWljIFwKKyAgICBhdHRhY2ggXAorICAgIGJpZ2ZpbGUgXAorICAgIGNsZWFudXAgXAorICAgIGNsdHNydiAgXAorICAgIGNvbmN1ciBcCisgICAgY3ZhciBcCisgICAgY3ZhcjIgXAorICAgIGRsbHRlc3QgXAorICAgIGR0b2EgXAorICAgIGVycmNvZGVzIFwKKyAgICBleGl0IFwKKyAgICBmZGNhY2ggXAorICAgIGZpbGVpbyBcCisgICAgZm9yZWlnbiBcCisgICAgZm9ybWF0dG0gXAorICAgIGZzeW5jIFwKKyAgICBnZXRob3N0IFwKKyAgICBnZXRwcm90byBcCisgICAgaTJsIFwKKyAgICBpbml0Y2xrIFwKKyAgICBpbnJ2YWwgXAorICAgIGluc3RydW10IFwKKyAgICBpbnRyaW8gXAorICAgIGludHJ1cHQgXAorICAgIGlvX3RpbWVvdXQgXAorICAgIGlvY29udGhyIFwKKyAgICBqb2luIFwKKyAgICBqb2lua2sgXAorICAgIGpvaW5rdSBcCisgICAgam9pbnVrIFwKKyAgICBqb2ludXUgXAorICAgIGxheWVyIFwKKyAgICBsYXp5aW5pdCBcCisgICAgbGliZmlsZW5hbWUgXAorICAgIGxsdGVzdCBcCisgICAgbG9jayBcCisgICAgbG9ja2ZpbGUgXAorICAgIGxvZ2ZpbGUgXAorICAgIGxvZ2dlciBcCisgICAgbWFueV9jdiBcCisgICAgbXVsdGl3YWl0IFwKKyAgICBuYW1lc2htMSBcCisgICAgbmJsYXllciBcCisgICAgbm9uYmxvY2sgXAorICAgIG50aW90byBcCisgICAgbnRvaCBcCisgICAgb3BfMmxvbmcgXAorICAgIG9wX2V4Y2wgXAorICAgIG9wX2ZpbG5mIFwKKyAgICBvcF9maWxvayBcCisgICAgb3Bfbm9maWwgXAorICAgIHBhcmVudCBcCisgICAgcGFyc2V0bSBcCisgICAgcGVlayBcCisgICAgcGVyZiBcCisgICAgcGlwZXBpbmcgXAorICAgIHBpcGVwaW5nMiBcCisgICAgcGlwZXNlbGYgXAorICAgIHBvbGxfbm0gXAorICAgIHBvbGxfdG8gXAorICAgIHBvbGxhYmxlIFwKKyAgICBwcmZ0ZXN0IFwKKyAgICBwcmltYmxvayBcCisgICAgcHJvdmlkZXIgXAorICAgIHBycG9sbG1sIFwKKyAgICByYW5maWxlIFwKKyAgICByYW5kc2VlZCBcCisgICAgcmVpbml0IFwKKyAgICByd2xvY2t0ZXN0IFwKKyAgICBzZWxfc3BkIFwKKyAgICBzZWxjdF9lciBcCisgICAgc2VsY3Rfbm0gXAorICAgIHNlbGN0X3RvIFwKKyAgICBzZWxpbnRyIFwKKyAgICBzZW1hIFwKKyAgICBzZW1hZXJyIFwKKyAgICBzZW1hcGluZyBcCisgICAgc2VuZHpsZiBcCisgICAgc2VydmVyX3Rlc3QgXAorICAgIHNlcnZyX2trIFwKKyAgICBzZXJ2cl91ayBcCisgICAgc2VydnJfa3UgXAorICAgIHNlcnZyX3V1IFwKKyAgICBzaG9ydF90aHJlYWQgXAorICAgIHNpZ3BpcGUgXAorICAgIHNvY2tldCBcCisgICAgc29ja29wdCBcCisgICAgc29ja3BpbmcgXAorICAgIHNwcmludGYgXAorICAgIHN0YWNrIFwKKyAgICBzdGRpbyBcCisgICAgc3RyMmFkZHIgXAorICAgIHN0cm9kIFwKKyAgICBzd2l0Y2ggXAorICAgIHN5c3RlbSBcCisgICAgdGVzdGJpdCBcCisgICAgdGVzdGZpbGUgXAorICAgIHRocmVhZHMgXAorICAgIHRpbWVtYWMgXAorICAgIHRpbWV0ZXN0IFwKKyAgICB0cGQgXAorICAgIHVkcHNydiBcCisgICAgdmVyY2hlY2sgXAorICAgIHZlcnNpb24gXAorICAgIHdyaXRldiBcCisgICAgeG5vdGlmeSBcCisgICAgemVyb2xlbiIKKworUFIgPSAicjEiCisKK2luaGVyaXQgYXV0b3Rvb2xzCisKK2RvX2NvbXBpbGVfcHJlcGVuZCgpIHsKKwlvZV9ydW5tYWtlIENST1NTX0NPTVBJTEU9MSBDRkxBR1M9Ii1EWFBfVU5JWCIgTERGTEFHUz0iIiBDQz1nY2MgLUMgY29uZmlnIGV4cG9ydAorfQorCitkb19jb21waWxlX2FwcGVuZCgpIHsKKwlvZV9ydW5tYWtlIC1DIHByL3Rlc3RzCit9CisKK2RvX2luc3RhbGxfYXBwZW5kKCkgeworICAgIGluc3RhbGwgLUQgJHtXT1JLRElSfS9uc3ByLnBjLmluICR7RH0ke2xpYmRpcn0vcGtnY29uZmlnL25zcHIucGMKKyAgICBzZWQgLWkgczpPRVBSRUZJWDoke3ByZWZpeH06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VMSUJESVI6JHtsaWJkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworICAgIHNlZCAtaSBzOk9FSU5DRElSOiR7aW5jbHVkZWRpcn06ZyAke0R9JHtsaWJkaXJ9L3BrZ2NvbmZpZy9uc3ByLnBjCisgICAgc2VkIC1pIHM6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNwci5wYworCisgICAgbWtkaXIgLXAgJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vcHIvdGVzdHMvcnVudGVzdHMucGwgJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisgICAgaW5zdGFsbCAtbSAwNzU1ICR7U30vcHIvdGVzdHMvcnVudGVzdHMuc2ggJHtEfSR7bGliZGlyfS9uc3ByL3Rlc3RzCisgICAgY2QgJHtCfS9wci90ZXN0cworICAgIGluc3RhbGwgLW0gMDc1NSAke1RFU1RTfSAke0R9JHtsaWJkaXJ9L25zcHIvdGVzdHMKKworICAgICMgZGVsZXRlIGNvbXBpbGUtZXQucGwgYW5kIHBlcnIucHJvcGVydGllcyBmcm9tICR7YmluZGlyfSBiZWNhdXNlIHRoZXNlIGFyZQorICAgICMgb25seSB1c2VkIHRvIGdlbmVyYXRlIHByZXJyLmMgYW5kIHByZXJyLmggZmlsZXMgZnJvbSBwcmVyci5ldCBhdCBjb21waWxlCisgICAgIyB0aW1lCisgICAgcm0gJHtEfSR7YmluZGlyfS9jb21waWxlLWV0LnBsICR7RH0ke2JpbmRpcn0vcHJlcnIucHJvcGVydGllcworfQorCitGSUxFU18ke1BOfSA9ICIke2xpYmRpcn0vbGliKi5zbyIKK0ZJTEVTXyR7UE59LWRldiA9ICIke2JpbmRpcn0vKiAke2xpYmRpcn0vbnNwci90ZXN0cy8qICR7bGliZGlyfS9wa2djb25maWcgXAorICAgICAgICAgICAgICAgICR7aW5jbHVkZWRpcn0vKiAke2RhdGFkaXJ9L2FjbG9jYWwvKiAiCitGSUxFU18ke1BOfS1kYmcgKz0gIiR7bGliZGlyfS9uc3ByL3Rlc3RzLy5kZWJ1Zy8qIgorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MtbXlob3N0bmFtZS9uc3MtbXlob3N0bmFtZV8wLjMuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJjZTllOQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lXzAuMy5iYgpAQCAtMCwwICsxLDI5IEBACitTVU1NQVJZID0gIk5hbWUgU2VydmljZSBTd2l0Y2ggbW9kdWxlIGZvciByZXNvbHZpbmcgdGhlIGxvY2FsIGhvc3RuYW1lIgorREVTQ1JJUFRJT04gPSAicGx1Z2luIGZvciB0aGUgR05VIE5hbWUgU2VydmljZSBTd2l0Y2ggKE5TUykgZnVuY3Rpb25hbGl0eSBvZiBcCit0aGUgR05VIEMgTGlicmFyeSAoZ2xpYmMpIHByb3ZpZGluZyBob3N0IG5hbWUgcmVzb2x1dGlvbiBmb3IgdGhlIGxvY2FsbHkgXAorY29uZmlndXJlZCBzeXN0ZW0gaG9zdG5hbWUgYXMgcmV0dXJuZWQgYnkgZ2V0aG9zdG5hbWUoMikuIgorSE9NRVBBR0UgPSAiaHR0cDovLzBwb2ludGVyLmRlL2xlbm5hcnQvcHJvamVjdHMvbnNzLW15aG9zdG5hbWUvIgorTElDRU5TRSA9ICJMR1BMdjIuMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PTJkNTAyNWQ0YWEzNDk1YmVmZWY4ZjE3MjA2YTViMGExIgorCitTUkNfVVJJID0gImh0dHA6Ly8wcG9pbnRlci5kZS9sZW5uYXJ0L3Byb2plY3RzL25zcy1teWhvc3RuYW1lL25zcy1teWhvc3RuYW1lLSR7UFZ9LnRhci5neiIKKworU1JDX1VSSVttZDVzdW1dID0gImQ0YWI5YWMzNmMwNTNhYjhmYjgzNmRiMWNiZDRhNDhmIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gIjJiYTc0NGVhOGQ1NzhkMWM1N2M4NTg4NGU5NGEzMDQyZWUxNzg0M2E1Mjk0NDM0ZDNhN2Y2YzRkNjdlN2NhZjIiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGRpc3Ryb19mZWF0dXJlc19jaGVjaworCisjIFRoZSBzeXN0ZW1kIGhhcyBpdHMgb3duIGNvcHkgb2YgbnNzLW15aG9zdG5hbWUKK0NPTkZMSUNUX0RJU1RST19GRUFUVVJFUyA9ICJzeXN0ZW1kIgorCitwa2dfcG9zdGluc3RfJHtQTn0gKCkgeworCXNlZCAtZSAnL15ob3N0czovcy9ccypcPG15aG9zdG5hbWVcPi8vJyBcCisJCS1lICdzL1woXmhvc3RzOi4qXClcKFw8ZmlsZXNcPlwpXCguKlwpXChcPGRuc1w+XClcKC4qXCkvXDFcMiBteWhvc3RuYW1lIFwzXDRcNS8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KKworcGtnX3ByZXJtXyR7UE59ICgpIHsKKwlzZWQgLWUgJy9eaG9zdHM6L3MvXHMqXDxteWhvc3RuYW1lXD4vLycgXAorCQktZSAnL15ob3N0czovcy9ccypteWhvc3RuYW1lLy8nIFwKKwkJLWkgJEQke3N5c2NvbmZkaXJ9L25zc3dpdGNoLmNvbmYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LWluY29ycmVjdC1zaGViYW5nLW9mLXBlcmwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3NTk0ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoCkBAIC0wLDAgKzEsMTEwIEBACituc3M6IGZpeCBpbmNvcnJlY3Qgc2hlYmFuZyBvZiBwZXJsCisKK1JlcGxhY2UgaW5jb3JyZWN0IHNoZWJhbmcgb2YgcGVybCB3aXRoIGAjIS91c3IvYmluL2VudiBwZXJsJy4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCistLS0KKyBuc3MvY21kL3NtaW1ldG9vbHMvc21pbWUgIHwgMiArLQorIG5zcy9jb3JlY29uZi9jcGRpc3QucGwgICAgfCAyICstCisgbnNzL2NvcmVjb25mL2ltcG9ydC5wbCAgICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvam5pcmVnZW4ucGwgIHwgMiArLQorIG5zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwgfCAyICstCisgbnNzL2NvcmVjb25mL3JlbGVhc2UucGwgICB8IDIgKy0KKyBuc3MvY29yZWNvbmYvdmVyc2lvbi5wbCAgIHwgMiArLQorIG5zcy90ZXN0cy9jbGVhbl90YnggICAgICAgfCAyICstCisgbnNzL3Rlc3RzL3BhdGhfdW5pcSAgICAgICB8IDIgKy0KKyA5IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL25zcy9jbWQvc21pbWV0b29scy9zbWltZSBiL25zcy9jbWQvc21pbWV0b29scy9zbWltZQorLS0tIGEvbnNzL2NtZC9zbWltZXRvb2xzL3NtaW1lCisrKysgYi9uc3MvY21kL3NtaW1ldG9vbHMvc21pbWUKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAKKyAjIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMKKyAjIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvY3BkaXN0LnBsIGIvbnNzL2NvcmVjb25mL2NwZGlzdC5wbAoraW5kZXggODAwZWRmYi4uNjUyMTg3ZiAxMDA3NTUKKy0tLSBhL25zcy9jb3JlY29uZi9jcGRpc3QucGwKKysrKyBiL25zcy9jb3JlY29uZi9jcGRpc3QucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9pbXBvcnQucGwgYi9uc3MvY29yZWNvbmYvaW1wb3J0LnBsCitpbmRleCBkZDJkMTc3Li40MjhlYWE1IDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAorKysrIGIvbnNzL2NvcmVjb25mL2ltcG9ydC5wbAorQEAgLTEsNCArMSw0IEBACistIyEgL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsIGIvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCitpbmRleCAyMDM5MTgwLi41ZjRmNjljIDEwMDc1NQorLS0tIGEvbnNzL2NvcmVjb25mL2puaXJlZ2VuLnBsCisrKysgYi9uc3MvY29yZWNvbmYvam5pcmVnZW4ucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9sb2NhbC9iaW4vcGVybAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKyAjCisgIyBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIyBMaWNlbnNlLCB2LiAyLjAuIElmIGEgY29weSBvZiB0aGUgTVBMIHdhcyBub3QgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzCitkaWZmIC0tZ2l0IGEvbnNzL2NvcmVjb25mL291dG9mZGF0ZS5wbCBiL25zcy9jb3JlY29uZi9vdXRvZmRhdGUucGwKK2luZGV4IDMzZDgwYmIuLjAxZmMwOTcgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCisrKysgYi9uc3MvY29yZWNvbmYvb3V0b2ZkYXRlLnBsCitAQCAtMSw0ICsxLDQgQEAKKy0jIS91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9yZWxlYXNlLnBsIGIvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKK2luZGV4IDdjZGUxOWQuLmI1ZGYyZjYgMTAwNzU1CistLS0gYS9uc3MvY29yZWNvbmYvcmVsZWFzZS5wbAorKysrIGIvbnNzL2NvcmVjb25mL3JlbGVhc2UucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhIC91c3IvbG9jYWwvYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi92ZXJzaW9uLnBsIGIvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKK2luZGV4IGQyYTQ5NDIuLjc5MzU5ZmUgMTAwNjQ0CistLS0gYS9uc3MvY29yZWNvbmYvdmVyc2lvbi5wbAorKysrIGIvbnNzL2NvcmVjb25mL3ZlcnNpb24ucGwKK0BAIC0xLDQgKzEsNCBAQAorLSMhL3Vzci9zYmluL3BlcmwKKysjIS91c3IvYmluL2VudiBwZXJsCisgIworICMgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworICMgTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcworZGlmZiAtLWdpdCBhL25zcy90ZXN0cy9jbGVhbl90YnggYi9uc3MvdGVzdHMvY2xlYW5fdGJ4CitpbmRleCA0ZGU5NTU1Li5hN2RlZjlmIDEwMDc1NQorLS0tIGEvbnNzL3Rlc3RzL2NsZWFuX3RieAorKysrIGIvbnNzL3Rlc3RzL2NsZWFuX3RieAorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIworZGlmZiAtLWdpdCBhL25zcy90ZXN0cy9wYXRoX3VuaXEgYi9uc3MvdGVzdHMvcGF0aF91bmlxCitpbmRleCBmMjlmNjBhLi4wOGZiZmZhIDEwMDc1NQorLS0tIGEvbnNzL3Rlc3RzL3BhdGhfdW5pcQorKysrIGIvbnNzL3Rlc3RzL3BhdGhfdW5pcQorQEAgLTEsNCArMSw0IEBACistIyEgL2Jpbi9wZXJsCisrIyEvdXNyL2Jpbi9lbnYgcGVybAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICMKKy0tIAorMS44LjEuMgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1maXgtbnNpbnN0YWxsLWJ1aWxkLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjZkZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LW5zaW5zdGFsbC1idWlsZC5wYXRjaApAQCAtMCwwICsxLDM1IEBACitGaXggbnNzIG11bHRpbGliIGJ1aWxkIG9uIG9wZW5TVVNFIDExLnggMzJiaXQKKworV2hpbGUgYnVpbGRpbmcgbGliNjQtbnNzIG9uIG9wZW5TVVNFIDExLnggMzJiaXQsIHRoZSBuc2luc3RhbGwgd2lsbAorZmFpbCB3aXRoIGVycm9yOgorCisqIG5zaW5zdGFsbC5jOjE6MDogc29ycnksIHVuaW1wbGVtZW50ZWQ6IDY0LWJpdCBtb2RlIG5vdCBjb21waWxlZAorCitJdCBjYXVzZWQgYnkgdGhlICctbTY0JyBvcHRpb24gd2hpY2ggcGFzc2VkIHRvIGhvc3QgZ2NjLgorCitUaGUgbnNpbnN0YWxsIHdhcyBidWlsdCBmaXJzdCB3aGlsZSBuc3Mgc3RhcnRpbmcgdG8gYnVpbGQsIGl0IG9ubHkgcnVucworb24gaG9zdCB0byBpbnN0YWxsIGJ1aWx0IGZpbGVzLCBpdCBkb2Vzbid0IG5lZWQgYW55IGNyb3NzLWNvbXBsaW5nIG9yCittdWx0aWxpYiBidWlsZCBvcHRpb25zLiBKdXN0IGNsZWFuIHRoZSBBUkNIRkxBRyBhbmQgTERGTEFHUyB0byBmaXggdGhpcworZXJyb3IuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBXZW56b25nIEZhbiA8d2Vuem9uZy5mYW5Ad2luZHJpdmVyLmNvbT4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9uc2luc3RhbGwvTWFrZWZpbGUgYi9uc3MvY29yZWNvbmYvbnNpbnN0YWxsL01ha2VmaWxlCitpbmRleCAxODUwYmNiLi41YWVlODRmIDEwMDY0NAorLS0tIGEvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQorKysrIGIvbnNzL2NvcmVjb25mL25zaW5zdGFsbC9NYWtlZmlsZQorQEAgLTE4LDYgKzE4LDEyIEBAIElOVEVSTkFMX1RPT0xTICA9IDEKKyAKKyBpbmNsdWRlICQoREVQVEgpL2NvcmVjb25mL2NvbmZpZy5taworIAorKyMgbnNpbnN0YWxsIGlzIHVuZml0IGZvciBjcm9zcy1jb21waWxpbmcvbXVsdGlsaWItYnVpbGQgc2luY2UgaXQgd2FzCisrIyBhbHdheXMgcnVuIG9uIGxvY2FsIGhvc3QgdG8gaW5zdGFsbCBidWlsdCBmaWxlcy4gVGhpcyBjaGFuZ2UgaW50ZW5kcworKyMgdG8gY2xlYW4gdGhlICctbTY0JyBmcm9tIEFSQ0hGTEFHIGFuZCBMREZMQUdTLgorK0FSQ0hGTEFHID0KKytMREZMQUdTID0KKysKKyBpZmVxICgsJChmaWx0ZXItb3V0IE9TMiBXSU4lLCQoT1NfVEFSR0VUKSkpCisgUFJPR1JBTQkJPQorIGVsc2UKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIzNTUwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MtZml4LXN1cHBvcnQtY3Jvc3MtY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsNzEgQEAKK25zczogZml4IHN1cHBvcnQgY3Jvc3MgY29tcGlsaW5nCisKK0xldCBzb21lIG1ha2UgdmFyaWFibGVzIGJlIGFzc2lnbmVkIGZyb20gb3V0c2lkZSBtYWtlZmlsZS4KKworU2lnbmVkLW9mZi1ieTogSG9uZ3h1IEppYSA8aG9uZ3h1LmppYUB3aW5kcml2ZXIuY29tPgorVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlIFtjb25maWd1cmF0aW9uXQorLS0tCisgbnNzL2NvcmVjb25mL0xpbnV4Lm1rICAgfCAxMiArKysrKysrKysrKy0KKyBuc3MvY29yZWNvbmYvYXJjaC5tayAgICB8ICAyICstCisgbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUgfCAgNiArKysrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDE4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9uc3MvY29yZWNvbmYvTGludXgubWsgYi9uc3MvY29yZWNvbmYvTGludXgubWsKKy0tLSBhL25zcy9jb3JlY29uZi9MaW51eC5taworKysrIGIvbnNzL2NvcmVjb25mL0xpbnV4Lm1rCitAQCAtMTYsMTEgKzE2LDIxIEBAIGlmZXEgKCQoVVNFX1BUSFJFQURTKSwxKQorIAlJTVBMX1NUUkFURUdZID0gX1BUSAorIGVuZGlmCisgCisraWZuZGVmIENDCisgQ0MJCQk9IGdjYworK2VuZGlmCisrCisraWZkZWYgQ1hYCisrQ0NDCQkJPSAkKENYWCkKKytlbHNlCisgQ0NDCQkJPSBnKysKKytlbmRpZgorKworK2lmbmRlZiBSQU5MSUIKKyBSQU5MSUIJCQk9IHJhbmxpYgorK2VuZGlmCisgCistREVGQVVMVF9DT01QSUxFUiA9IGdjYworK0RFRkFVTFRfQ09NUElMRVIgPSAkKENDKQorIAorIGlmZXEgKCQoT1NfVEFSR0VUKSxBbmRyb2lkKQorIGlmbmRlZiBBTkRST0lEX05ESworZGlmZiAtLWdpdCBhL25zcy9jb3JlY29uZi9hcmNoLm1rIGIvbnNzL2NvcmVjb25mL2FyY2gubWsKK2luZGV4IDY1NTczNDguLmI3MjI0MTIgMTAwNjQ0CistLS0gYS9uc3MvY29yZWNvbmYvYXJjaC5taworKysrIGIvbnNzL2NvcmVjb25mL2FyY2gubWsKK0BAIC0zNyw3ICszNyw3IEBAIE9TX1RFU1QgOj0gJChzaGVsbCB1bmFtZSAtbSkKKyBpZmVxICgkKE9TX1RFU1QpLGk4NnBjKQorICAgICBPU19SRUxFQVNFIDo9ICQoc2hlbGwgdW5hbWUgLXIpXyQoT1NfVEVTVCkKKyBlbHNlCistICAgIE9TX1JFTEVBU0UgOj0gJChzaGVsbCB1bmFtZSAtcikKKysgICAgT1NfUkVMRUFTRSA/PSAkKHNoZWxsIHVuYW1lIC1yKQorIGVuZGlmCisgCisgIworZGlmZiAtLWdpdCBhL25zcy9saWIvZnJlZWJsL01ha2VmaWxlIGIvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKK2luZGV4IDBkMjkzZjEuLjY3OGY1MDYgMTAwNjQ0CistLS0gYS9uc3MvbGliL2ZyZWVibC9NYWtlZmlsZQorKysrIGIvbnNzL2xpYi9mcmVlYmwvTWFrZWZpbGUKK0BAIC0zNiw2ICszNiwxMiBAQCBpZmRlZiBVU0VfNjQKKyAJREVGSU5FUyArPSAtRE5TU19VU0VfNjQKKyBlbmRpZgorIAorK2lmZXEgKCQoT1NfVEVTVCksbWlwcykKKytpZm5kZWYgVVNFXzY0CisrCURFRklORVMgKz0gLUROU19QVFJfTEVfMzIKKytlbmRpZgorK2VuZGlmCisrCisgaWZkZWYgVVNFX0FCSTMyX0ZQVQorIAlERUZJTkVTICs9IC1ETlNTX1VTRV9BQkkzMl9GUFUKKyBlbmRpZgorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLW5vLXJwYXRoLWZvci1jcm9zcy1jb21waWxpbmcucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjFkYzkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK25zczpubyBycGF0aCBmb3IgY3Jvc3MgY29tcGlsaW5nCisKK1NpZ25lZC1vZmYtYnk6IEhvbmd4dSBKaWEgPGhvbmd4dS5qaWFAd2luZHJpdmVyLmNvbT4KK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKy0tLQorIG5zcy9jbWQvcGxhdGxpYnMubWsgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbnNzL2NtZC9wbGF0bGlicy5tayBiL25zcy9jbWQvcGxhdGxpYnMubWsKKy0tLSBhL25zcy9jbWQvcGxhdGxpYnMubWsKKysrKyBiL25zcy9jbWQvcGxhdGxpYnMubWsKK0BAIC0xOCw5ICsxOCw5IEBAIGVuZGlmCisgCisgaWZlcSAoJChPU19BUkNIKSwgTGludXgpCisgaWZlcSAoJChVU0VfNjQpLCAxKQorLUVYVFJBX1NIQVJFRF9MSUJTICs9IC1XbCwtcnBhdGgsJyQkT1JJR0lOLy4uL2xpYjY0Oi9vcHQvc3VuL3ByaXZhdGUvbGliNjQ6JCRPUklHSU4vLi4vbGliJworKyNFWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI2NDovb3B0L3N1bi9wcml2YXRlL2xpYjY0OiQkT1JJR0lOLy4uL2xpYicKKyBlbHNlCistRVhUUkFfU0hBUkVEX0xJQlMgKz0gLVdsLC1ycGF0aCwnJCRPUklHSU4vLi4vbGliOi9vcHQvc3VuL3ByaXZhdGUvbGliJworKyNFWFRSQV9TSEFSRURfTElCUyArPSAtV2wsLXJwYXRoLCckJE9SSUdJTi8uLi9saWI6L29wdC9zdW4vcHJpdmF0ZS9saWInCisgZW5kaWYKKyBlbmRpZgorIAorLS0gCisxLjguMS4yCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zcy9uc3MucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwZjYzNQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3MvbnNzLnBjLmluCkBAIC0wLDAgKzEsMTEgQEAKK3ByZWZpeD1PRVBSRUZJWAorZXhlY19wcmVmaXg9T0VFWEVDUFJFRklYCitsaWJkaXI9T0VMSUJESVIKK2luY2x1ZGVkaXI9T0VJTkNESVIKKworTmFtZTogTlNTCitEZXNjcmlwdGlvbjogTmV0d29yayBTZWN1cml0eSBTZXJ2aWNlcworVmVyc2lvbjogJU5TU19WRVJTSU9OJQorUmVxdWlyZXM6IG5zcHIgPj0gJU5TUFJfVkVSU0lPTiUKK0xpYnM6IC1sc3NsMyAtbHNtaW1lMyAtbG5zczMgLWxzb2Z0b2tuMyAtbG5zc3V0aWwzCitDZmxhZ3M6IC1JT0VJTkNESVIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3Mvc2lnbmxpYnMuc2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3NpZ25saWJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NGU0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9uc3MvbnNzL3NpZ25saWJzLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCisjIHNpZ25saWJzLnNoCisjCisjIChjKTIwMTAgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjCisjIHJlZ2VuZXJhdGVzIHRoZSAuY2hrIGZpbGVzIGZvciB0aGUgTlNTIGxpYnJhcmllcyB0aGF0IHJlcXVpcmUgaXQKKyMgc2luY2UgdGhlIG9uZXMgdGhhdCBhcmUgYnVpbHQgaGF2ZSBpbmNvcnJlY3QgY2hlY2tzdW1zIHRoYXQgd2VyZQorIyBjYWxjdWxhdGVkIG9uIHRoZSBob3N0IHdoZXJlIHRoZXkgcmVhbGx5IG5lZWQgdG8gYmUgZG9uZSBvbiB0aGUKKyMgdGFyZ2V0CisKK0NIS19GSUxFUz1gbHMgL2xpYiovKi5jaGsgL3Vzci9saWIqLyouY2hrIDI+L2Rldi9udWxsYAorU0lHTl9CSU5BUlk9YHdoaWNoIHNobGlic2lnbmAKK2ZvciBJIGluICRDSEtfRklMRVMKK2RvCisgICAgICAgRE49YGRpcm5hbWUgJElgCisgICAgICAgQk49YGJhc2VuYW1lICRJIC5jaGtgCisgICAgICAgRk49JEROLyRCTi5zbworICAgICAgICRTSUdOX0JJTkFSWSAtaSAkRk4KK2RvbmUKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvbnNzL25zc18zLjE5LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhNGExZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L25zcy9uc3NfMy4xOS4yLmJiCkBAIC0wLDAgKzEsMjIzIEBACitTVU1NQVJZID0gIk1vemlsbGEncyBTU0wgYW5kIFRMUyBpbXBsZW1lbnRhdGlvbiIKK0RFU0NSSVBUSU9OID0gIk5ldHdvcmsgU2VjdXJpdHkgU2VydmljZXMgKE5TUykgaXMgYSBzZXQgb2YgbGlicmFyaWVzIFwKK2Rlc2lnbmVkIHRvIHN1cHBvcnQgY3Jvc3MtcGxhdGZvcm0gZGV2ZWxvcG1lbnQgb2YgXAorc2VjdXJpdHktZW5hYmxlZCBjbGllbnQgYW5kIHNlcnZlciBhcHBsaWNhdGlvbnMuIFwKK0FwcGxpY2F0aW9ucyBidWlsdCB3aXRoIE5TUyBjYW4gc3VwcG9ydCBTU0wgdjIgYW5kIHYzLCBcCitUTFMsIFBLQ1MgNSwgUEtDUyA3LCBQS0NTIDExLCBQS0NTIDEyLCBTL01JTUUsIFguNTA5IFwKK3YzIGNlcnRpZmljYXRlcywgYW5kIG90aGVyIHNlY3VyaXR5IHN0YW5kYXJkcy4iCitIT01FUEFHRSA9ICJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvIgorU0VDVElPTiA9ICJsaWJzIgorCitMSUNFTlNFID0gIk1QTC0yLjAgfCAoTVBMLTIuMCAmIEdQTC0yLjArKSB8IChNUEwtMi4wICYgTEdQTC0yLjErKSIKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vbnNzL0NPUFlJTkc7bWQ1PTNiMWU4OGUxYjljMGI1YTRiMjg4MWQ0NmNjZTA2YTE4IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL25zcy9saWIvZnJlZWJsL21waS9kb2MvTElDRU5TRTttZDU9NDkxZjE1OGQwOWQ5NDg0NjZhZmNlODVkNmYxZmUxOGYgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vbnNzL2xpYi9mcmVlYmwvbXBpL2RvYy9MSUNFTlNFLU1QTDttZDU9NWQ0MjVjOGYzMTU3ZGJmMjEyZGIyZWM1M2Q5ZTUxMzIiCisKK1NSQ19VUkkgPSAiXAorICAgIGh0dHA6Ly9mdHAubW96aWxsYS5vcmcvcHViL21vemlsbGEub3JnL3NlY3VyaXR5L25zcy9yZWxlYXNlcy9OU1NfM18xOV8yX1JUTS9zcmMvJHtCUH0udGFyLmd6IFwKKyAgICBmaWxlOi8vbnNzLWZpeC1zdXBwb3J0LWNyb3NzLWNvbXBpbGluZy5wYXRjaCBcCisgICAgZmlsZTovL25zcy1uby1ycGF0aC1mb3ItY3Jvc3MtY29tcGlsaW5nLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLWZpeC1pbmNvcnJlY3Qtc2hlYmFuZy1vZi1wZXJsLnBhdGNoIFwKKyAgICBmaWxlOi8vbnNzLWZpeC1uc2luc3RhbGwtYnVpbGQucGF0Y2ggXAorICAgIGZpbGU6Ly9uc3MucGMuaW4gXAorICAgIGZpbGU6Ly9zaWdubGlicy5zaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJiMDJmZmQxZThlOGVmNWY4NTEyZmEwMmQ4Y2E5ZGIzZCIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICIxMzA2NjYzZThmNjFkODQ0OWFkOGNiY2ZmYWI3NDNhNjA0ZGNkOWY2ZjM0MjMyYzIxMDg0N2M1MWRjZTJjOWFlIgorCitpbmhlcml0IHNpdGVpbmZvCisKK0RFUEVORFMgPSAic3FsaXRlMyBuc3ByIHpsaWIgbnNzLW5hdGl2ZSIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gInNxbGl0ZTMtbmF0aXZlIG5zcHItbmF0aXZlIHpsaWItbmF0aXZlIgorUkRFUEVORFNfJHtQTn0tc21pbWUgPSAicGVybCIKKworVEQgPSAiJHtTfS90ZW50YXRpdmUtZGlzdCIKK1REUyA9ICIke1N9L3RlbnRhdGl2ZS1kaXN0LXN0YWdpbmciCisKK1RBUkdFVF9DQ19BUkNIICs9ICIke0xERkxBR1N9IgorCitkb19jb21waWxlX3ByZXBlbmRfY2xhc3MtbmF0aXZlKCkgeworICAgIGV4cG9ydCBOU1BSX0lOQ0xVREVfRElSPSR7U1RBR0lOR19JTkNESVJfTkFUSVZFfQorICAgIGV4cG9ydCBOU1BSX0xJQl9ESVI9JHtTVEFHSU5HX0xJQkRJUl9OQVRJVkV9Cit9CisKK2RvX2NvbXBpbGVfcHJlcGVuZF9jbGFzcy1uYXRpdmVzZGsoKSB7CisgICAgZXhwb3J0IExERkxBR1M9IiIKK30KKworZG9fY29tcGlsZSgpIHsKKyAgICBleHBvcnQgQ1JPU1NfQ09NUElMRT0xCisgICAgZXhwb3J0IE5BVElWRV9DQz0iZ2NjIgorICAgIGV4cG9ydCBCVUlMRF9PUFQ9MQorCisgICAgZXhwb3J0IEZSRUVCTF9OT19ERVBFTkQ9MQorICAgIGV4cG9ydCBGUkVFQkxfTE9XSEFTSD0xCisKKyAgICBleHBvcnQgTElCRElSPSR7bGliZGlyfQorICAgIGV4cG9ydCBNT1pJTExBX0NMSUVOVD0xCisgICAgZXhwb3J0IE5TX1VTRV9HQ0M9MQorICAgIGV4cG9ydCBOU1NfVVNFX1NZU1RFTV9TUUxJVEU9MQorICAgIGV4cG9ydCBOU1NfRU5BQkxFX0VDQz0xCisKKyAgICBleHBvcnQgT1NfUkVMRUFTRT0zLjQKKyAgICBleHBvcnQgT1NfVEFSR0VUPUxpbnV4CisgICAgZXhwb3J0IE9TX0FSQ0g9TGludXgKKworICAgIGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjIiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAicG93ZXJwYzY0IiBdOyB0aGVuCisgICAgICAgIE9TX1RFU1Q9cHBjNjQKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHNlbCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjQiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwczY0ZWwiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1taXBzCisgICAgZWxzZQorICAgICAgICBPU19URVNUPSIke1RBUkdFVF9BUkNIfSIKKyAgICBmaQorCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICAjIFdlIGNhbiBtb2RpZnkgQ0MgaW4gdGhlIGVudmlyb25tZW50LCBidXQgaWYgd2Ugc2V0IGl0IHZpYSBhbgorICAgICMgYXJndW1lbnQgdG8gbWFrZSwgbnNpbnN0YWxsLCBhIGhvc3QgcHJvZ3JhbSwgd2lsbCBhbHNvIGJ1aWxkIHdpdGggaXQhCisgICAgIworICAgIGV4cG9ydCBDQz0iJHtDQ30gLWciCisgICAgbWFrZSAtQyAuL25zcyBDQ0M9IiR7Q1hYfSAtZyIgXAorICAgICAgICBPU19URVNUPSR7T1NfVEVTVH0KK30KKworCitkb19pbnN0YWxsX3ByZXBlbmRfY2xhc3MtbmF0aXZlc2RrKCkgeworICAgIGV4cG9ydCBMREZMQUdTPSIiCit9CisKK2RvX2luc3RhbGwoKSB7CisgICAgZXhwb3J0IENST1NTX0NPTVBJTEU9MQorICAgIGV4cG9ydCBOQVRJVkVfQ0M9ImdjYyIKKyAgICBleHBvcnQgQlVJTERfT1BUPTEKKworICAgIGV4cG9ydCBGUkVFQkxfTk9fREVQRU5EPTEKKworICAgIGV4cG9ydCBMSUJESVI9JHtsaWJkaXJ9CisgICAgZXhwb3J0IE1PWklMTEFfQ0xJRU5UPTEKKyAgICBleHBvcnQgTlNfVVNFX0dDQz0xCisgICAgZXhwb3J0IE5TU19VU0VfU1lTVEVNX1NRTElURT0xCisgICAgZXhwb3J0IE5TU19FTkFCTEVfRUNDPTEKKworICAgIGV4cG9ydCBPU19SRUxFQVNFPTMuNAorICAgIGV4cG9ydCBPU19UQVJHRVQ9TGludXgKKyAgICBleHBvcnQgT1NfQVJDSD1MaW51eAorCisgICAgaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gInBvd2VycGMiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGMKKyAgICBlbGlmIFsgIiR7VEFSR0VUX0FSQ0h9IiA9ICJwb3dlcnBjNjQiIF07IHRoZW4KKyAgICAgICAgT1NfVEVTVD1wcGM2NAorICAgIGVsaWYgWyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHMiIC1vICIke1RBUkdFVF9BUkNIfSIgPSAibWlwc2VsIiAtbyAiJHtUQVJHRVRfQVJDSH0iID0gIm1pcHM2NCIgLW8gIiR7VEFSR0VUX0FSQ0h9IiA9ICJtaXBzNjRlbCIgXTsgdGhlbgorICAgICAgICBPU19URVNUPW1pcHMKKyAgICBlbHNlCisgICAgICAgIE9TX1RFU1Q9IiR7VEFSR0VUX0FSQ0h9IgorICAgIGZpCisgICAgaWYgWyAiJHtTSVRFSU5GT19CSVRTfSIgPSAiNjQiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV82ND0xCisgICAgZWxpZiBbICIke1RBUkdFVF9BUkNIfSIgPSAieDg2XzY0IiAtYSAiJHtTSVRFSU5GT19CSVRTfSIgPSAiMzIiIF07IHRoZW4KKyAgICAgICAgZXhwb3J0IFVTRV9YMzI9MQorICAgIGZpCisKKyAgICBtYWtlIC1DIC4vbnNzIFwKKyAgICAgICAgQ0NDPSIke0NYWH0iIFwKKyAgICAgICAgT1NfVEVTVD0ke09TX1RFU1R9IFwKKyAgICAgICAgU09VUkNFX0xJQl9ESVI9IiR7VER9LyR7bGliZGlyfSIgXAorICAgICAgICBTT1VSQ0VfQklOX0RJUj0iJHtURH0vJHtiaW5kaXJ9IiBcCisgICAgICAgIGluc3RhbGwKKworICAgIGluc3RhbGwgLWQgJHtEfS8ke2xpYmRpcn0vCisgICAgZm9yIGZpbGUgaW4gJHtTfS9kaXN0LyouT0JKL2xpYi8qLnNvOyBkbworICAgICAgICBlY2hvICJJbnN0YWxsaW5nIGBiYXNlbmFtZSAkZmlsZWAuLi4iCisgICAgICAgIGNwICRmaWxlICAke0R9LyR7bGliZGlyfS8KKyAgICBkb25lCisKKyAgICBmb3Igc2hhcmVkX2xpYiBpbiAke1REfS8ke2xpYmRpcn0vKi5zby4qOyBkbworICAgICAgICBpZiBbIC1mICRzaGFyZWRfbGliIF07IHRoZW4KKyAgICAgICAgICAgIGNwICRzaGFyZWRfbGliICR7RH0vJHtsaWJkaXJ9CisgICAgICAgICAgICBsbiAtc2YgJChiYXNlbmFtZSAkc2hhcmVkX2xpYikgJHtEfS8ke2xpYmRpcn0vJChiYXNlbmFtZSAkc2hhcmVkX2xpYiAuMW9lKQorICAgICAgICBmaQorICAgIGRvbmUKKyAgICBmb3Igc2hhcmVkX2xpYiBpbiAke1REfS8ke2xpYmRpcn0vKi5zbzsgZG8KKyAgICAgICAgaWYgWyAtZiAkc2hhcmVkX2xpYiAtYSAhIC1lICR7RH0vJHtsaWJkaXJ9LyRzaGFyZWRfbGliIF07IHRoZW4KKyAgICAgICAgICAgIGNwICRzaGFyZWRfbGliICR7RH0vJHtsaWJkaXJ9CisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgaW5zdGFsbCAtZCAke0R9LyR7aW5jbHVkZWRpcn0vbnNzMworICAgIGluc3RhbGwgLW0gNjQ0IC10ICR7RH0vJHtpbmNsdWRlZGlyfS9uc3MzIGRpc3QvcHVibGljL25zcy8qCisKKyAgICBpbnN0YWxsIC1kICR7RH0vJHtiaW5kaXJ9CisgICAgZm9yIGJpbmFyeSBpbiAke1REfS8ke2JpbmRpcn0vKjsgZG8KKyAgICAgICAgaW5zdGFsbCAtbSA3NTUgLXQgJHtEfS8ke2JpbmRpcn0gJGJpbmFyeQorICAgIGRvbmUKK30KKworZG9faW5zdGFsbF9hcHBlbmQoKSB7CisgICAgIyBDcmVhdGUgZW1wdHkgLmNoayBmaWxlcyBmb3IgdGhlIE5TUyBsaWJyYXJpZXMgYXQgYnVpbGQgdGltZS4gVGhleSBjb3VsZAorICAgICMgYmUgcmVnZW5lcmF0ZWQgYXQgdGFyZ2V0J3MgYm9vdCB0aW1lLgorICAgIGZvciBmaWxlIGluIGxpYnNvZnRva24zLmNoayBsaWJmcmVlYmwzLmNoayBsaWJuc3NkYm0zLmNoazsgZG8KKyAgICAgICAgdG91Y2ggJHtEfS8ke2xpYmRpcn0vJGZpbGUKKyAgICAgICAgY2htb2QgNzU1ICR7RH0vJHtsaWJkaXJ9LyRmaWxlCisgICAgZG9uZQorICAgIGluc3RhbGwgLUQgLW0gNzU1ICR7V09SS0RJUn0vc2lnbmxpYnMuc2ggJHtEfS8ke2JpbmRpcn0vc2lnbmxpYnMuc2gKKworICAgIGluc3RhbGwgLWQgJHtEfSR7bGliZGlyfS9wa2djb25maWcvCisgICAgc2VkICdzLyVOU1NfVkVSU0lPTiUvJHtQVn0vJyAke1dPUktESVJ9L25zcy5wYy5pbiB8IHNlZCAncy8lTlNQUl9WRVJTSU9OJS80LjkuMi8nID4gJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VQUkVGSVg6JHtwcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VFWEVDUFJFRklYOiR7ZXhlY19wcmVmaXh9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VMSUJESVI6JHtsaWJkaXJ9OmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCisgICAgc2VkIC1pIHM6T0VJTkNESVI6JHtpbmNsdWRlZGlyfS9uc3MzOmcgJHtEfSR7bGliZGlyfS9wa2djb25maWcvbnNzLnBjCit9CisKK2RvX2luc3RhbGxfYXBwZW5kX2NsYXNzLXRhcmdldCgpIHsKKyAgICAjIENyZWF0ZSBhIGJsYW5rIGNlcnRpZmljYXRlCisgICAgbWtkaXIgLXAgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLworICAgIHRvdWNoIC4vZW1wdHlfcGFzc3dvcmQKKyAgICBjZXJ0dXRpbCAtTiAtZCAke0R9JHtzeXNjb25mZGlyfS9wa2kvbnNzZGIvIC1mIC4vZW1wdHlfcGFzc3dvcmQKKyAgICBjaG1vZCA2NDQgJHtEfSR7c3lzY29uZmRpcn0vcGtpL25zc2RiLyouZGIKKyAgICBybSAuL2VtcHR5X3Bhc3N3b3JkCit9CisKK3BrZ19wb3N0aW5zdF8ke1BOfSAoKSB7CisgICAgaWYgWyAtbiAiJEQiIF07IHRoZW4KKyAgICAgICAgZm9yIEkgaW4gJEQvJHtsaWJkaXJ9L2xpYiouY2hrOyBkbworICAgICAgICAgICAgRE49YGRpcm5hbWUgJElgCisgICAgICAgICAgICBCTj1gYmFzZW5hbWUgJEkgLmNoa2AKKyAgICAgICAgICAgIEZOPSRETi8kQk4uc28KKyAgICAgICAgICAgIHNobGlic2lnbiAtaSAkRk4KKwkgICAgaWYgWyAkPyAtbmUgMCBdOyB0aGVuCisJICAgICAgIGV4aXQgMQorCSAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGV4aXQgMAorICAgIGZpCisgICAgc2lnbmxpYnMuc2gKK30KKworUEFDS0FHRVMgPSsgIiR7UE59LXNtaW1lIgorRklMRVNfJHtQTn0tc21pbWUgPSAiXAorICAgICR7YmluZGlyfS9zbWltZSBcCisiCitGSUxFU18ke1BOfSA9ICJcCisgICAgJHtzeXNjb25mZGlyfSBcCisgICAgJHtiaW5kaXJ9IFwKKyAgICAke2xpYmRpcn0vbGliKi5jaGsgXAorICAgICR7bGliZGlyfS9saWIqLnNvIFwKKyAgICAiCitGSUxFU18ke1BOfS1kZXYgPSAiXAorICAgICR7bGliZGlyfS9uc3MgXAorICAgICR7bGliZGlyfS9wa2djb25maWcvKiBcCisgICAgJHtpbmNsdWRlZGlyfS8qIFwKKyAgICAiCisjIEZJTEVTXyR7UE59LWRiZyBpcyBwb3B1bGF0ZWQgYXV0b21hdGljYWxseQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSBuYXRpdmVzZGsiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3AxMS1raXQvcDExLWtpdF8wLjIyLjEuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZDk2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wMTEta2l0L3AxMS1raXRfMC4yMi4xLmJiCkBAIC0wLDAgKzEsMTggQEAKK1NVTU1BUlkgPSAiUHJvdmlkZXMgYSB3YXkgdG8gbG9hZCBhbmQgZW51bWVyYXRlIFBLQ1MjMTEgbW9kdWxlcyIKK0xJQ0VOU0UgPSAiQlNEIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9MDI5MzM4ODdmNjA5ODA3ZmJiNTdhYTQyMzdkMTRhNTAiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQgcGtnY29uZmlnCisKK0RFUEVORFMgPSAibGlidGFzbjEgbGliZmZpIgorCitTUkNfVVJJID0gImh0dHA6Ly9wMTEtZ2x1ZS5mcmVlZGVza3RvcC5vcmcvcmVsZWFzZXMvJHtCUH0udGFyLmd6IgorU1JDX1VSSVttZDVzdW1dID0gIjRlOWJlYTExMDY2MjhmZmI4MjBiZGFkMjRhODE5ZmFjIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImVmM2EzMzlmY2Y2YWEwZTMyYzhjMjNmNzliYTcxOTFlNTczMTJiZTJiZGE4YjI0ZTZkMTIxYzI2NzA1MzlhNWMiCisKK0ZJTEVTXyR7UE59LWRldiArPSAiIFwKKyAgICAke2xpYmRpcn0vcDExLWtpdC1wcm94eS5zbyBcCisgICAgJHtsaWJkaXJ9L3BrY3MxMS9wMTEta2l0LXRydXN0LnNvIFwKKyIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtsaWJkaXJ9L3BrY3MxMS8qLmxhIgorRklMRVNfJHtQTn0tZGJnICs9ICIke2xpYmRpcn0vcGtjczExLy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcGluZW50cnkvcGluZW50cnlfMC45LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzNmNhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BpbmVudHJ5L3BpbmVudHJ5XzAuOS4yLmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiQ29sbGVjdGlvbiBvZiBzaW1wbGUgUElOIG9yIHBhc3NwaHJhc2UgZW50cnkgZGlhbG9ncyIKK0RFU0NSSVBUSU9OID0gIlwKKwlQaW5lbnRyeSBpcyBhIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIFBJTiBvciBwYXNzcGhyYXNlIGVudHJ5IGRpYWxvZ3Mgd2hpY2ggXAorCXV0aWxpemUgdGhlIEFzc3VhbiBwcm90b2NvbCBhcyBkZXNjcmliZWQgYnkgdGhlIGFlZ3lwdGVuIHByb2plY3Q7IHNlZSBcCisJaHR0cDovL3d3dy5nbnVwZy5vcmcvYWVneXB0ZW4vIGZvciBkZXRhaWxzLiIKKworSE9NRVBBR0UgPSAiaHR0cDovL3d3dy5nbnVwZy5vcmcvcmVsYXRlZF9zb2Z0d2FyZS9waW5lbnRyeS9pbmRleC5lbi5odG1sIgorTElDRU5TRSA9ICJHUEx2MiIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWNiYmQ3OTRlMmEwYTI4OWI5ZGZjYzlmNTEzZDE5OTZlIgorCitpbmhlcml0IGF1dG90b29scworCitTUkNfVVJJID0gImZ0cDovL2Z0cC5nbnVwZy5vcmcvZ2NyeXB0LyR7QlBOfS8ke0JQTn0tJHtQVn0udGFyLmJ6MiIKKworU1JDX1VSSVttZDVzdW1dID0gImY1MWQ0NTRmOTIxMTExYjUxNTZhMjI5MWNiZjcwMjc4IgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImZkOGJjMTU5MmNlYjIyYmI0OTJiMDdjYjI5YjFiMTQwYmI4ODJjODU5ZTY1MDNiOTc0MjU0YzBhNGI0MTM0ZDEiCisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtcnBhdGggXAorCQkgICAgICAgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nIFwKKyAgICAgICAgICAgICAgICIKKworUEFDS0FHRUNPTkZJRyA/Pz0gIm5jdXJzZXMgbGliY2FwIgorCitQQUNLQUdFQ09ORklHW25jdXJzZXNdID0gIi0tZW5hYmxlLW5jdXJzZXMgIC0td2l0aC1uY3Vyc2VzLWluY2x1ZGUtZGlyPSR7U1RBR0lOR19JTkNESVJ9LCAtLWRpc2FibGUtbmN1cnNlcywgbmN1cnNlcyIKK1BBQ0tBR0VDT05GSUdbbGliY2FwXSA9ICItLXdpdGgtbGliY2FwLCAtLXdpdGhvdXQtbGliY2FwLCBsaWJjYXAiCitQQUNLQUdFQ09ORklHW3F0NF0gPSAiLS1lbmFibGUtcGluZW50cnktcXQ0LCAtLWRpc2FibGUtcGluZW50cnktcXQ0LCBxdDQteDExIgorUEFDS0FHRUNPTkZJR1txdDRfY2xpcGJvYXJkXSA9ICItLWVuYWJsZS1waW5lbnRyeS1xdDQtY2xpcGJvYXJkIC0tZW5hYmxlLXBpbmVudHJ5LXF0NCwgLS1kaXNhYmxlLXBpbmVudHJ5LXF0NC1jbGlwYm9hcmQsIHF0NC14MTEiCitQQUNLQUdFQ09ORklHW2d0azJdID0gIi0tZW5hYmxlLXBpbmVudHJ5LWd0azIsIC0tZGlzYWJsZS1waW5lbnRyeS1ndGsyLCBndGsrIGdsaWItMi4wIgorCisjVG8gdXNlIGxpYnNlY3JldCwgYWRkIG1ldGEtZ25vbWUKK1BBQ0tBR0VDT05GSUdbc2VjcmV0XSA9ICItLWVuYWJsZS1saWJzZWNyZXQsIC0tZGlzYWJsZS1saWJzZWNyZXQsIGxpYnNlY3JldCIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L2Rpc2FibGVfdGVzdHMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2Y2Y2NgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdC9kaXNhYmxlX3Rlc3RzLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK1VzZSBvZiAkKHRvcF9zcmNkaXIpIGluIFRFU1RTIGlzIGFuIGVycm9yIHdoaWNoIGNhdXNlcworYXV0b21ha2UtMS4xMyB0byBhYm9ydC4gSnVzdCByZW1vdmUgdGVzdHMuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZSBbZGlzYWJsZSBmZWF0dXJlXQorCitTaWduZWQtb2ZmLWJ5OiBNYXJrbyBMaW5kcXZpc3QgPGNhemZpNzRAZ21haWwuY29tPgorZGlmZiAtTnVyZCBwb3B0LTEuMTYvTWFrZWZpbGUuYW0gcG9wdC0xLjE2L01ha2VmaWxlLmFtCistLS0gcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTAtMDUtMDQgMjM6NTU6NTQuMDAwMDAwMDAwICswMzAwCisrKysgcG9wdC0xLjE2L01ha2VmaWxlLmFtCTIwMTMtMDEtMDIgMTM6MzQ6MjkuNTQwMzYxMzkxICswMjAwCitAQCAtMzQsMTEgKzM0LDYgQEAKKworIG5vaW5zdF9TQ1JJUFRTID0gdGVzdGl0LnNoCisKKy1URVNUU19FTlZJUk9OTUVOVCA9IFwKKy10ZXN0MT0iJCh0b3BfYnVpbGRkaXIpL3Rlc3QxIgorLQorLVRFU1RTID0gJCh0b3Bfc3JjZGlyKS90ZXN0aXQuc2gKKy0KKyBpbmNsdWRlX0hFQURFUlMgPSBwb3B0LmgKKworIHVzcmxpYmRpciA9ICQobGliZGlyKQpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcGtnY29uZmlnX2ZpeC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmRkYmY4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BrZ2NvbmZpZ19maXgucGF0Y2gKQEAgLTAsMCArMSwxNSBAQAorVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCisKK0luc3RhbGwgdGhlIHBrZ2NvbmZpZyBmaWxlIGludG8gbGliZGlyLgorCistLS0gcG9wdC0xLjE2Lm9yaWcvTWFrZWZpbGUuYW0JMjAxMi0wNC0yNiAxMzo0Mjo1NC4wMjExMzk4MTMgKzA4MDAKKysrKyBwb3B0LTEuMTYvTWFrZWZpbGUuYW0JMjAxMi0wNC0yNiAxMzozNjowMy41NTIwOTY5MTIgKzA4MDAKK0BAIC00Nyw3ICs0Nyw3IEBACisgbGlicG9wdF9sYV9TT1VSQ0VTID0gcG9wdC5jIHBvcHRwYXJzZS5jIHBvcHRjb25maWcuYyBwb3B0aGVscC5jIHBvcHRpbnQuYworIGxpYnBvcHRfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgQExUTElCSU5UTEAgQExUTElCSUNPTlZACisgCistcGtnY29uZmlnZGlyID0gJChwcmVmaXgpL2xpYi9wa2djb25maWcKKytwa2djb25maWdkaXIgPSAkKGxpYmRpcikvcGtnY29uZmlnCisgcGtnY29uZmlnX0RBVEEgPSBwb3B0LnBjCisgCisgaWYgSEFWRV9MRF9WRVJTSU9OX1NDUklQVApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0L3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYmNhOTYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wb3B0L3BvcHQvcG9wdF9maXhfZm9yX2F1dG9tYWtlLTEuMTIucGF0Y2gKQEAgLTAsMCArMSwyMSBAQAorVXBzdHJlYW0tU3RhdHVzOiBwZW5kaW5nCisKK1RoaXMgcGF0Y2ggYXZvaWRzIHRoaXMgZXJyb3Igd2l0aCBhdXRvbWFrZSAxLjEyOgorCit8IGNvbmZpZ3VyZS5hYzo0OTogZXJyb3I6IGF1dG9tYXRpYyBkZS1BTlNJLWZpY2F0aW9uIHN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZAorCitTaWduZWQtT2ZmLUJ5OiBOaXRpbiBBIEthbWJsZSA8bml0aW4uYS5rYW1ibGVAaW50ZWwuY29tPgorMjAxMi8wNS8wMgorCitJbmRleDogcG9wdC0xLjE2L2NvbmZpZ3VyZS5hYworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHBvcHQtMS4xNi5vcmlnL2NvbmZpZ3VyZS5hYworKysrIHBvcHQtMS4xNi9jb25maWd1cmUuYWMKK0BAIC00Niw3ICs0Niw2IEBAIEFDX0dDQ19UUkFESVRJT05BTAorIEFDX1NZU19MQVJHRUZJTEUKKyAKKyBBQ19JU0NfUE9TSVgKKy1BTV9DX1BST1RPVFlQRVMKKyAKKyBBQ19DSEVDS19IRUFERVJTKGZsb2F0LmggZm5tYXRjaC5oIGdsb2IuaCBsYW5naW5mby5oIGxpYmludGwuaCBtY2hlY2suaCB1bmlzdGQuaCkKKyAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcG9wdC9wb3B0XzEuMTYuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxM2E4MQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3BvcHQvcG9wdF8xLjE2LmJiCkBAIC0wLDAgKzEsMjAgQEAKK1NVTU1BUlkgPSAiTGlicmFyeSBmb3IgcGFyc2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucyIKK0hPTUVQQUdFID0gImh0dHA6Ly9ycG01Lm9yZy8iCitTRUNUSU9OID0gImxpYnMiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vQ09QWUlORzttZDU9Y2IwNjEzYzMwYWYyYTgyNDliOGRjYzY3ZDNlZGIwNmQiCitQUiA9ICJyMyIKKworU1JDX1VSSSA9ICJodHRwOi8vcnBtNS5vcmcvZmlsZXMvcG9wdC9wb3B0LSR7UFZ9LnRhci5neiBcCisgICAgICAgICAgIGZpbGU6Ly9wa2djb25maWdfZml4LnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL3BvcHRfZml4X2Zvcl9hdXRvbWFrZS0xLjEyLnBhdGNoIFwKKyAgICAgICAgICAgZmlsZTovL2Rpc2FibGVfdGVzdHMucGF0Y2ggXAorICAgICAgICAgICIKKworU1JDX1VSSVttZDVzdW1dID0gIjM3NDNiZWVmYTNkZDYyNDdhNzNmOGY3YTMyYzE0YzMzIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImU3MjhlZDI5NmZlOWYwNjlhMGUwMDUwMDNjM2Q2YjJkZGUzZDljYWQ0NTM0MjJhMTBkNjU1ODYxNmQzMDRjYzgiCisKK2luaGVyaXQgYXV0b3Rvb2xzIGdldHRleHQKKworQkJDTEFTU0VYVEVORCA9ICJuYXRpdmUgbmF0aXZlc2RrIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL2ZpbGVzL3B0ZXN0LXJ1bm5lciBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9maWxlcy9wdGVzdC1ydW5uZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxOGYxMQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9maWxlcy9wdGVzdC1ydW5uZXIKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCitBTllGQUlMRUQ9bm8KK2VjaG8gIlNUQVJUOiAkMCIKKworZm9yIGxpYmRpciBpbiAvdXNyL2xpYioKK2RvCisKKyAgICBbICEgLWQgIiRsaWJkaXIiIF0gJiYgY29udGludWUKKworICAgIGZvciB4IGluIGBscyAtZCAkbGliZGlyLyovcHRlc3QgMj4vZGV2L251bGxgCisgICAgZG8KKyAgICAgICAgWyAhIC1mICR4L3J1bi1wdGVzdCBdICYmIGNvbnRpbnVlCisgICAgICAgIFsgLWggYGRpcm5hbWUgJHhgIF0gJiYgY29udGludWUKKworICAgICAgICBkYXRlICIrJVktJW0tJWRUJUg6JU0iCisgICAgICAgIGVjaG8gIkJFR0lOOiAkeCIKKyAgICAgICAgY2QgIiR4IgorICAgICAgICAuL3J1bi1wdGVzdCB8fCBBTllGQUlMRUQ9eWVzCisgICAgICAgIGVjaG8gIkVORDogJHgiCisgICAgICAgIGRhdGUgIislWS0lbS0lZFQlSDolTSIKKyAgICBkb25lCitkb25lCitlY2hvICJTVE9QOiAkMCIKK2lmIFsgIiRBTllGQUlMRUQiID0gInllcyIgIF07IHRoZW4KKyAgICBleGl0IDEKK2ZpCitleGl0IDAKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRlc3QtcnVubmVyL3B0ZXN0LXJ1bm5lcl8xLjAuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMxYjBhNAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0ZXN0LXJ1bm5lci9wdGVzdC1ydW5uZXJfMS4wLmJiCkBAIC0wLDAgKzEsMjQgQEAKK1NVTU1BUlkgPSAiQSBzaW1wbGUgc2hlbGwgc2NyaXB0IHRvIHJ1biBhbGwgaW5zdGFsbGVkIHB0ZXN0cyIKK0RFU0NSSVBUSU9OID0gIlRoZSBwdGVzdC1ydW5uZXIgcGFja2FnZSBpbnN0YWxscyBhIHB0ZXN0LXJ1bm5lciBcCitzaGVsbCBzY3JpcHQgd2hpY2ggbG9vcHMgdGhyb3VnaCBhbGwgaW5zdGFsbGVkIHB0ZXN0IHRlc3Qgc3VpdGVzIGFuZCBcCitydW5zIHRoZW0gaW4gc2VxdWVuY2UuIgorSE9NRVBBR0UgPSAiaHR0cHM6Ly93aWtpLnlvY3RvcHJvamVjdC5vcmcvd2lraS9QdGVzdCIKK1NSQ19VUkkgKz0gImZpbGU6Ly9wdGVzdC1ydW5uZXIiCisKK0xJQ0VOU0UgPSAiTUlUIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vJHtDT1JFQkFTRX0vTElDRU5TRTttZDU9NGQ5MmNkMzczYWJkYTM5MzdjMmJjNDdmYmM0OWQ2OTAgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vJHtDT1JFQkFTRX0vbWV0YS9DT1BZSU5HLk1JVDttZDU9M2RhOWNmYmNiNzg4YzgwYTAzODQzNjFiNGRlMjA0MjAiCisKK0lOSElCSVRfREVGQVVMVF9ERVBTID0gIjEiCisKK1MgPSAiJHtXT1JLRElSfSIKKworZG9faW5zdGFsbCAoKSB7CisgICAgbWtkaXIgLXAgJHtEfSR7YmluZGlyfQorICAgIGluc3RhbGwgLW0gMDc1NSAke1dPUktESVJ9L3B0ZXN0LXJ1bm5lciAke0R9JHtiaW5kaXJ9Cit9CisKK2RvX3BhdGNoW25vZXhlY10gPSAiMSIKK2RvX2NvbmZpZ3VyZVtub2V4ZWNdID0gIjEiCitkb19jb21waWxlW25vZXhlY10gPSAiMSIKK2RvX2J1aWxkW25vZXhlY10gPSAiMSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1hZGQtcGtnY29uZmlnLXN1cHBvcnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhMjhhYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoCkBAIC0wLDAgKzEsMTA1IEBACitVcHN0cmVhbS1TdGF0dXM6IFBlbmRpbmcKKworQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IHRvIHB0aC4KKworU2lnbmVkLW9mZi1ieTogQ2hlbiBRaSA8UWkuQ2hlbkB3aW5kcml2ZXIuY29tPgorCitJbmRleDogTWFrZWZpbGUuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gYS9NYWtlZmlsZS5pbgorKysrIGIvTWFrZWZpbGUuaW4KK0BAIC00Nyw2ICs0Nyw5IEBAIGRhdGFkaXIgICAgID0gQGRhdGFkaXJACisgCisgREVTVERJUiAgICAgPQorIAorK3BrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKKytwa2djb25maWdfREFUQSA9IHB0aC5wYworKworICMjCisgIyMgIF9fX18gVE9PTCBERUZJTklUSU9OUyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgIyMKK0BAIC0yMTYsNyArMjE5LDcgQEAgdGVzdF9wdGhyZWFkOiB0ZXN0X3B0aHJlYWQubyB0ZXN0X2NvbW1vbi5vIGxpYnB0aHJlYWQubGEKKyAKKyAjICAgaW5zdGFsbCB0aGUgcGFja2FnZQorIGluc3RhbGw6IGFsbC1mb3ItaW5zdGFsbAorLQlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycyBpbnN0YWxsLXB0aCBASU5TVEFMTF9QVEhSRUFEQAorKwlAJChNQUtFKSAkKE1LRkxBR1MpIGluc3RhbGwtZGlycyBpbnN0YWxsLXB0aCBASU5TVEFMTF9QVEhSRUFEQCBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKyAJQHRvdWNoIC5kb25lLWluc3RhbGwgPi9kZXYvbnVsbCAyPiYxIHx8ICQoVFJVRSkKKyAJQCQoTUFLRSkgJChNS0ZMQUdTKSB3aGF0LW5leHQKKyBpbnN0YWxsLWRpcnM6CitAQCAtMjI3LDYgKzIzMCw3IEBAIGluc3RhbGwtZGlyczoKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjEKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChtYW5kaXIpL21hbjMKKyAJJChTSFRPT0wpIG1rZGlyIC1mIC1wIC1tIDc1NSAkKERFU1RESVIpJChkYXRhZGlyKS9hY2xvY2FsCisrCSQoU0hUT09MKSBta2RpciAtZiAtcCAtbSA3NTUgJChERVNURElSKSQocGtnY29uZmlnZGlyKQorIGluc3RhbGwtcHRoOgorIAkkKFNIVE9PTCkgaW5zdGFsbCAtYyAtbSA3NTUgcHRoLWNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpL3B0aC1jb25maWcKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUylwdGgtY29uZmlnLjEgJChERVNURElSKSQobWFuZGlyKS9tYW4xL3B0aC1jb25maWcuMQorQEAgLTI0MiwxMiArMjQ2LDE2IEBAIGluc3RhbGwtcHRocmVhZDoKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgLW0gNjQ0ICQoUylwdGhyZWFkLjMgJChERVNURElSKSQobWFuZGlyKS9tYW4zL3B0aHJlYWQuMworIAlAdW1hc2sgMDIyOyAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIFwKKyAJJChTSFRPT0wpIGluc3RhbGwgLWMgbGlicHRocmVhZC5sYSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnB0aHJlYWQubGEKKytpbnN0YWxsLXBrZ2NvbmZpZ0RBVEE6ICQocGtnY29uZmlnX0RBVEEpCisrCSQoU0hUT09MKSBpbnN0YWxsIC1jIC1tIDY0NCAkKHBrZ2NvbmZpZ19EQVRBKSAkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQocGtnY29uZmlnX0RBVEEpCisgCisgIyAgIHVuaW5zdGFsbCB0aGUgcGFja2FnZQorIHVuaW5zdGFsbDoKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBAVU5JTlNUQUxMX1BUSFJFQURAIHVuaW5zdGFsbC1wdGggdW5pbnN0YWxsLWRpcnMKKysJQCQoTUFLRSkgJChNS0ZMQUdTKSB1bmluc3RhbGwtcGtnY29uZmlnREFUQSBAVU5JTlNUQUxMX1BUSFJFQURAIHVuaW5zdGFsbC1wdGggdW5pbnN0YWxsLWRpcnMKKyAJQHRvdWNoIC5kb25lLXVuaW5zdGFsbCA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAlAJChNQUtFKSAkKE1LRkxBR1MpIHdoYXQtbmV4dAorK3VuaW5zdGFsbC1wa2djb25maWdEQVRBOgorKwkkKFJNKSAkKERFU1RESVIpJChwa2djb25maWdkaXIpLyQocGtnY29uZmlnX0RBVEEpCisgdW5pbnN0YWxsLXB0aHJlYWQ6CisgCSQoUk0pICQoREVTVERJUikkKGJpbmRpcikvcHRocmVhZC1jb25maWcKKyAJJChSTSkgJChERVNURElSKSQobWFuZGlyKS9tYW4xL3B0aHJlYWQtY29uZmlnLjEKK0BAIC0yNzEsNiArMjc5LDcgQEAgdW5pbnN0YWxsLWRpcnM6CisgCS0kKFJNRElSKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKSA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAktJChSTURJUikgJChERVNURElSKSQoYmluZGlyKSA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorIAktJChSTURJUikgJChERVNURElSKSQocHJlZml4KSA+L2Rldi9udWxsIDI+JjEgfHwgJChUUlVFKQorKwktJChSTURJUikgJChERVNURElSKSQocGtnY29uZmlnZGlyKSA+IC9kZXYvbnVsbCAyPiYxIHx8JChUUlVFKQorIAorICMgICBzdHJpcCBkb3duIHRoZSBzb3VyY2UgdHJlZSB0byBpdHMgbWluaW11bQorIHN0cmlwdGVhc2U6CitJbmRleDogY29uZmlndXJlLmFjCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIGEvY29uZmlndXJlLmFjCisrKysgYi9jb25maWd1cmUuYWMKK0BAIC02NTYsNiArNjU2LDEzIEBAIHB0aF9hY21hYy5oIGRubAorIGNobW9kICtyeCBwdGhyZWFkLWNvbmZpZworIGNobW9kICtyeCBwdGgtY29uZmlnCisgKWRubAorKworK1BUSF9WRVJTSU9OPWBlY2hvICRQVEhfVkVSU0lPTl9TVFIgfCBjdXQgLWQnICcgLWYxYAorK0FDX1NVQlNUKFBUSF9WRVJTSU9OKQorKworK0FDX0NPTkZJR19GSUxFUyhbcHRoLnBjXSkKKytBQ19PVVRQVVQKKysKKyBpZiB0ZXN0ICIuJGVuYWJsZV9wdGhyZWFkIiA9IC5ubzsgdGhlbgorICAgICBybSAtZiBwdGhyZWFkLWNvbmZpZworICAgICBybSAtZiBwdGhyZWFkLmgKK0luZGV4OiBwdGgucGMuaW4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistLS0gL2Rldi9udWxsCisrKysgYi9wdGgucGMuaW4KK0BAIC0wLDAgKzEsMTYgQEAKKytwcmVmaXg9QHByZWZpeEAKKytleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACisrbGliZGlyPUBsaWJkaXJACisraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKytiaW5kaXI9QGJpbmRpckAKKyttYW5kaXI9QG1hbmRpckAKKytkYXRhZGlyPUBkYXRhZGlyQAorK2FjZGlyPUBkYXRhZGlyQC9hY2xvY2FsCisrCisrTmFtZTogcHRoCisrRGVzY3JpcHRpb246IEdOVSBQb3J0YWJsZSBUaHJlYWRzCisrUmVxdWlyZXM6CisrVmVyc2lvbjogQFBUSF9WRVJTSU9OQAorK0xpYnM6IC1MJHtsaWJkaXJ9IC1scHRoCisrTGlicy5wcml2YXRlOiAKKytDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQorLS0gCisxLjcuNS40CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvcHRoL2ZpbGVzL3B0aC1maXgtcGFyYWxsZWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhlZGFmZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9maWxlcy9wdGgtZml4LXBhcmFsbGVsLnBhdGNoCkBAIC0wLDAgKzEsNDggQEAKK0Zyb20gZGYwNmI4MTcwNzQ1ZWFjMzQ3YWNiOTVmOWYzNzRmMjU3NjIxMjU0ZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFJvYmVydCBZYW5nIDxsaWV6aGkueWFuZ0B3aW5kcml2ZXIuY29tPgorRGF0ZTogVGh1LCAyOSBKYW4gMjAxNSAxODoxMTowMCAtMDgwMAorU3ViamVjdDogW1BBVENIXSBNYWtlZmlsZS5pbjogZml4IGZvciBwYXJhbGxlbCBidWlsZAorCitGaXhlZDoKKyogZG9fY29tcGlsZQorIHB0aF91Y3R4LmM6MzE6MTk6IGZhdGFsIGVycm9yOiBwdGhfcC5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5CisgI2luY2x1ZGUgInB0aF9wLmgiCisgICAgICAgICAgICAgICAgICAgXgorY29tcGlsYXRpb24gdGVybWluYXRlZC4KK21ha2U6ICoqKiBbcHRoX3VjdHgubG9dIEVycm9yIDEKKworKiBkb19pbnN0YWxsOgorICBjcDogY2Fubm90IGNyZWF0ZSByZWd1bGFyIGZpbGUgYGltYWdlL3Vzci9saWIvcGtnY29uZmlnLyNJTlNUQDE1NTA3Iyc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBSb2JlcnQgWWFuZyA8bGllemhpLnlhbmdAd2luZHJpdmVyLmNvbT4KKy0tLQorIE1ha2VmaWxlLmluIHwgICAgNSArKystLQorIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCitpbmRleCBkZTAzOTBkLi4zODFhMGVlIDEwMDY0NAorLS0tIGEvTWFrZWZpbGUuaW4KKysrKyBiL01ha2VmaWxlLmluCitAQCAtMjE5LDcgKzIxOSw4IEBAIHRlc3RfcHRocmVhZDogdGVzdF9wdGhyZWFkLm8gdGVzdF9jb21tb24ubyBsaWJwdGhyZWFkLmxhCisgCisgIyAgIGluc3RhbGwgdGhlIHBhY2thZ2UKKyBpbnN0YWxsOiBhbGwtZm9yLWluc3RhbGwKKy0JQCQoTUFLRSkgJChNS0ZMQUdTKSBpbnN0YWxsLWRpcnMgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisrCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1kaXJzCisrCUAkKE1BS0UpICQoTUtGTEFHUykgaW5zdGFsbC1wdGggQElOU1RBTExfUFRIUkVBREAgaW5zdGFsbC1wa2djb25maWdEQVRBCisgCUB0b3VjaCAuZG9uZS1pbnN0YWxsID4vZGV2L251bGwgMj4mMSB8fCAkKFRSVUUpCisgCUAkKE1BS0UpICQoTUtGTEFHUykgd2hhdC1uZXh0CisgaW5zdGFsbC1kaXJzOgorQEAgLTQzMiw3ICs0MzMsNyBAQCBUQUdTOgorICMjICAoQVVUT01BVElDQUxMWSBVUERBVEVEIC0gRE8gTk9UIEVESVQpCisgIyMKKyAKKy0kKExPQkpTKTogTWFrZWZpbGUKKyskKExPQkpTKTogTWFrZWZpbGUgcHRoX3AuaAorIAorICMgRE8gTk9UIFJFTU9WRQorIHB0aF9hdHRyLmxvOiBwdGhfYXR0ci5jIHB0aF9wLmggcHRoX3ZlcnMuYyBwdGguaCBwdGhfYWNkZWYuaCBwdGhfYWNtYWMuaAorLS0gCisxLjcuOS41CisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3B0aC9wdGhfMi4wLjcuYmIgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvcHRoXzIuMC43LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzc3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9wdGgvcHRoXzIuMC43LmJiCkBAIC0wLDAgKzEsMzEgQEAKK1NVTU1BUlkgPSAiR05VIFBvcnRhYmxlIFRocmVhZHMgbGlicmFyeSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wdGgvIgorU0VDVElPTiA9ICJsaWJzIgorTElDRU5TRSA9ICJHUEx2MisiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO2JlZ2lubGluZT0xMjtlbmRsaW5lPTE1O21kNT1hNDhhZjExNGE4MGMyMjJjYWZkMzdmMjQzNzBhNzdiMSIKK1BSID0gInIzIgorCitweXRob24gX19hbm9ueW1vdXMgKCkgeworICAgIGltcG9ydCByZQorICAgIHVjX29zID0gKHJlLm1hdGNoKCcuKnVjbGliYyonLCBkLmdldFZhcignVEFSR0VUX09TJywgVHJ1ZSkpICE9IE5vbmUpCisgICAgaWYgdWNfb3M6CisgICAgICAgIHJhaXNlIGJiLnBhcnNlLlNraXBQYWNrYWdlKCJpbmNvbXBhdGlibGUgd2l0aCB1Q2xpYmMiKQorfQorCitTUkNfVVJJID0gIiR7R05VX01JUlJPUn0vcHRoL3B0aC0ke1BWfS50YXIuZ3ogXAorICAgICAgICAgIGZpbGU6Ly9wdGgtYWRkLXBrZ2NvbmZpZy1zdXBwb3J0LnBhdGNoIFwKKyAgICAgICAgICBmaWxlOi8vcHRoLWZpeC1wYXJhbGxlbC5wYXRjaCBcCisgICAgICAgICAgIgorCitTUkNfVVJJW21kNXN1bV0gPSAiOWNiNGEyNTMzMWE0YzRkYjg2NmEzMWNiZTUwN2M3OTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzIzNTM2NjBjNWEyY2FhZmQ2MDFiMjBlMTJlNzVkODY1ZmQ4OGY2Y2YxYTA4OGIzMDZhMzk2M2YwYmM3NzIzMiIKKworQklOQ09ORklHID0gIiR7YmluZGlyfS9wdGgtY29uZmlnIgorCitpbmhlcml0IGF1dG90b29scyBiaW5jb25maWctZGlzYWJsZWQgcGtnY29uZmlnCisKK2RvX2NvbmZpZ3VyZSgpIHsKKwkoIGNkICR7U307IGdudS1jb25maWdpemUgKQorCSggY2QgJHtTfTsgYXV0b2NvbmYgKQorCW9lX3J1bmNvbmYKK30KZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NlcmYvc2VyZi9lbnYucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvZW52LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMDczZTkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvZW52LnBhdGNoCkBAIC0wLDAgKzEsMjggQEAKKydzY29ucycgY2xlYW5zIHRoZSBlbnZpcm9ubWVudCB3aGljaCBicmVha3MgY2NhY2hlIGJ1aWxkcyBiZWNhdXNlCitDQ0FDSEVESVIgY2FuIHBvaW50IHRvIGFuIHVuZXhwZWN0ZWQgbG9jYXRpb246CisKK3wgY2NhY2hlIGFybS1saW51eC1nbnVlYWJpLWdjYyAuLi4gY29udGV4dC5jCit8IGNjYWNoZTogZmFpbGVkIHRvIGNyZWF0ZSAuLi4vc2VyZi8xLjMuNi1yMC8uaG9tZS8uY2NhY2hlIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQorCitJc3N1ZSBpcyBkZXNjcmliZWQgaW4KKworICBodHRwOi8vd3d3LnNjb25zLm9yZy93aWtpL0ltcG9ydGluZ0Vudmlyb25tZW50U2V0dGluZ3MKKworYW5kIGJlY2F1c2UgJ2JpdGJha2UnIGNsZWFucyBlbnZpcm9ubWVudCB3ZSBjYW4gcGFzcyBpdCBjb21wbGV0ZWx5CitpbnN0ZWFkIG9mIHRyeWluZyB0byBlbnVtZXJhdGUgbmVlZGVkIGVudi4KKworVXBzdHJlYW0tU3RhdHVzOiBJbmFwcHJvcHJpYXRlCisKKworSW5kZXg6IHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlcmYtMS4zLjYub3JpZy9TQ29uc3RydWN0CisrKysgc2VyZi0xLjMuNi9TQ29uc3RydWN0CitAQCAtMTQ5LDYgKzE0OSw3IEBAIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorIGVudiA9IEVudmlyb25tZW50KHZhcmlhYmxlcz1vcHRzLAorICAgICAgICAgICAgICAgICAgIHRvb2xzPSgnZGVmYXVsdCcsICd0ZXh0ZmlsZScsKSwKKyAgICAgICAgICAgICAgICAgICBDUFBQQVRIPVsnLicsIF0sCisrICAgICAgICAgICAgICAgICAgRU5WID0gb3MuZW52aXJvbiwKKyAgICAgICAgICAgICAgICAgICApCisKKyBlbnYuQXBwZW5kKEJVSUxERVJTID0gewpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmYvbm9ycGF0aC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODBmNWQwCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmL25vcnBhdGgucGF0Y2gKQEAgLTAsMCArMSw0MiBAQAorVGhlIFJQQVRIIGhhbmRsaW5nIGluIHNlcmYgaXMgYWxsIHdyb25nIGZvciB1cyBhbmQgd2UgZG9uJ3QgbmVlZCBpdCAKK2FueXdheSBzbyBoYWNrIGFyb3VuZCBpdCBieSByZW1vdmluZyB0aGlzIGZvciBub3cuCisKK1Vwc3RyZWFtLVN0YXR1czogSW5hcHByb3ByaWF0ZQorCitSUCAyMDE0LzcvMTcKKworSW5kZXg6IHNlcmYtMS4zLjYvU0NvbnN0cnVjdAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNlcmYtMS4zLjYub3JpZy9TQ29uc3RydWN0CTIwMTQtMDctMTcgMTk6NTc6NTcuNzI0Mzg5MTUwICswMDAwCisrKysgc2VyZi0xLjMuNi9TQ29uc3RydWN0CTIwMTQtMDctMTcgMjA6MDQ6MjEuNzg0Mzk5NjE2ICswMDAwCitAQCAtMjE4LDggKzIxOCw3IEBACisgZWxzZToKKyAgIExJQk5BTUVTVEFUSUMgPSAnc2VyZi0ke01BSk9SfScKKyAKKy1lbnYuQXBwZW5kKFJQQVRIPWxpYmRpciwKKy0gICAgICAgICAgIFBEQj0nJHtUQVJHRVQuZmlsZWJhc2V9LnBkYicpCisrZW52LkFwcGVuZChQREI9JyR7VEFSR0VULmZpbGViYXNlfS5wZGInKQorIAorICNmb3IgaSBpbiBlbnY6CisgIyAgICBwcmludChzdHIoZW52W2ldKSkKK0BAIC0zNzEsMTIgKzM3MCw2IEBACisgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICBlbnYuQXBwZW5kKENQUERFRklORVM9WydTRVJGX0hBVkVfU1NQSSddKQorIAorLSMgT24gc29tZSBzeXN0ZW1zLCB0aGUgLVIgdmFsdWVzIHRoYXQgQVBSIGRlc2NyaWJlcyBuZXZlciBtYWtlIGl0IGludG8gYWN0dWFsCistIyBSUEFUSCBmbGFncy4gV2UnbGwgbWFudWFsbHkgbWFwIGFsbCBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGludG8gbmV3CistIyBmbGFncyB0byBzZXQgUlBBVEggdmFsdWVzLgorLWZvciBkIGluIGVudlsnTElCUEFUSCddOgorLSAgZW52LkFwcGVuZChSUEFUSD0nOicrZCkKKy0KKyAjIFNldCB1cCB0aGUgY29uc3RydWN0aW9uIG9mIHNlcmYtKi5wYworIHBrZ2NvbmZpZyA9IGVudi5UZXh0ZmlsZSgnc2VyZi0lZC5wYycgJSAoTUFKT1IsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LkZpbGUoJ2J1aWxkL3NlcmYucGMuaW4nKSwKK0BAIC00NDYsNyArNDM5LDYgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEVOVj17J1BBVEgnIDogb3MuZW52aXJvblsnUEFUSCddfSkpCisgCisgIyBGaW5kIHRoZSAoZHluYW1pYykgbGlicmFyeSBpbiB0aGlzIGRpcmVjdG9yeQorLXRlbnYuUmVwbGFjZShSUEFUSD10aGlzZGlyKQorIHRlbnYuUHJlcGVuZChMSUJTPVtMSUJOQU1FU1RBVElDLCBdLAorICAgICAgICAgICAgICBMSUJQQVRIPVt0aGlzZGlyLCBdKQorIApkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2VyZi9zZXJmXzEuMy44LmJiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1MDU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zZXJmL3NlcmZfMS4zLjguYmIKQEAgLTAsMCArMSwyNiBAQAorU1VNTUFSWSA9ICJIaWdoLVBlcmZvcm1hbmNlIEFzeW5jaHJvbm91cyBIVFRQIENsaWVudCBMaWJyYXJ5IgorU1JDX1VSSSA9ICIke0RFQklBTl9NSVJST1J9L21haW4vcy8ke0JQTn0vJHtCUE59XyR7UFZ9Lm9yaWcudGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovL25vcnBhdGgucGF0Y2ggXAorICAgICAgICAgICBmaWxlOi8vZW52LnBhdGNoIgorCitTUkNfVVJJW21kNXN1bV0gPSAiNzEzYmVhZjA1ZDdmMzMyOWRlMTIxZTIxOGUyZmNiOTMiCitTUkNfVVJJW3NoYTI1NnN1bV0gPSAiNzcxMzRjZDUwMTA2NjRjYTAyMzU4NWJjZTUwOTc4YmQ0MDA1OTA2ZWQyODBmZjg4OWY1OTFmODZkZjdjNTllNCIKKworTElDRU5TRSA9ICJBcGFjaGUtMi4wIgorTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vTElDRU5TRTttZDU9ODZkM2YzYTk1YzMyNGM5NDc5YmQ4OTg2OTY4ZjQzMjciCisKK0RFUEVORFMgPSAicHl0aG9uLXNjb25zLW5hdGl2ZSBvcGVuc3NsIGFwciBhcHItdXRpbCB1dGlsLWxpbnV4IGV4cGF0IgorCitkb19jb21waWxlKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyAke1BBUkFMTEVMX01BS0V9IFBSRUZJWD0ke3ByZWZpeH0gXAorCQlDQz0iJHtDQ30iIFwKKwkJQVBSPWB3aGljaCBhcHItMS1jb25maWdgIEFQVT1gd2hpY2ggYXB1LTEtY29uZmlnYCBcCisJCUNGTEFHUz0iJHtDRkxBR1N9IiBMSU5LRkxBR1M9IiR7TERGTEFHU30iIFwKKwkJT1BFTlNTTD0iJHtTVEFHSU5HX0VYRUNQUkVGSVhESVJ9IgorfQorCitkb19pbnN0YWxsKCkgeworCSR7U1RBR0lOR19CSU5ESVJfTkFUSVZFfS9zY29ucyBQUkVGSVg9JHtEfSR7cHJlZml4fSBMSUJESVI9JHtEfSR7bGliZGlyfSBpbnN0YWxsCit9CisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvLmluYyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZGI2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby5pbmMKQEAgLTAsMCArMSwzNiBAQAorU1VNTUFSWSA9ICJTaGFyZWQgTUlNRSB0eXBlIGRhdGFiYXNlIGFuZCBzcGVjaWZpY2F0aW9uIgorSE9NRVBBR0UgPSAiaHR0cDovL2ZyZWVkZXNrdG9wLm9yZy93aWtpL1NvZnR3YXJlL3NoYXJlZC1taW1lLWluZm8iCitTRUNUSU9OID0gImJhc2UiCisKK0xJQ0VOU0UgPSAiTEdQTHYyKyIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkc7bWQ1PWIyMzRlZTRkNjlmNWZjZTQ0ODZhODBmZGFmNGE0MjYzIgorCitERVBFTkRTID0gImxpYnhtbDIgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wIHNoYXJlZC1taW1lLWluZm8tbmF0aXZlIgorREVQRU5EU19jbGFzcy1uYXRpdmUgPSAibGlieG1sMi1uYXRpdmUgaW50bHRvb2wtbmF0aXZlIGdsaWItMi4wLW5hdGl2ZSIKKworU1JDX1VSSSA9ICJodHRwOi8vZnJlZWRlc2t0b3Aub3JnL35oYWRlc3Mvc2hhcmVkLW1pbWUtaW5mby0ke1BWfS50YXIueHoiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZyBnZXR0ZXh0CisKK0VYVFJBX09FQ09ORiA9ICItLWRpc2FibGUtdXBkYXRlLW1pbWVkYiIKKworRklMRVNfJHtQTn0gKz0gIiR7ZGF0YWRpcn0vbWltZSIKK0ZJTEVTXyR7UE59LWRldiArPSAiJHtkYXRhZGlyfS9wa2djb25maWcvc2hhcmVkLW1pbWUtaW5mby5wYyIKKworIyBmcmVlZGVza3RvcC5vcmcueG1sIGlzIG9ubHkgcmVxdWlyZWQgd2hlbiB1cGRhdGluZyB0aGUgbWltZSBkYXRhYmFzZSwKKyMgcGFja2FnZSBpdCBzZXBhcmF0ZWx5CitQQUNLQUdFUyA9KyAic2hhcmVkLW1pbWUtaW5mby1kYXRhIgorRklMRVNfc2hhcmVkLW1pbWUtaW5mby1kYXRhID0gIiR7ZGF0YWRpcn0vbWltZS9wYWNrYWdlcy9mcmVlZGVza3RvcC5vcmcueG1sIgorUkRFUEVORFNfc2hhcmVkLW1pbWUtaW5mby1kYXRhID0gInNoYXJlZC1taW1lLWluZm8iCisKK2RvX2luc3RhbGwgKCkgeworCWF1dG90b29sc19kb19pbnN0YWxsCisKKwl1cGRhdGUtbWltZS1kYXRhYmFzZSAke0R9JHtkYXRhZGlyfS9taW1lCit9CisKK2RvX2luc3RhbGxfY2xhc3MtbmF0aXZlICgpIHsKKwlhdXRvdG9vbHNfZG9faW5zdGFsbAorfQorCitCQkNMQVNTRVhURU5EID0gIm5hdGl2ZSIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzlmMWVhCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL2luc3RhbGwtZGF0YS1ob29rLnBhdGNoCkBAIC0wLDAgKzEsMjMgQEAKK2ZpeCBzaGFyZWQtbWltZS1pbmZvIGJ1aWxkIHJhY2UgY29uZGl0aW9uCisKK1RoZSBkZWZpbml0aW9uIG9mIGluc3RhbGwtZGF0YS1ob29rIGluIE1ha2VmaWxlLmFtIGxlYWRzCit0byBtdWx0aXBsZSwgb3ZlcmxhcHBpbmcsIGV4ZWN1dGlvbnMgb2YgaW5zdGFsbC1iaW5QUk9HUkFNUwordGFyZ2V0LiAgV2UgbW9kaWZ5IHRoZSBkZWZpbml0aW9uIHRvIGF2b2lkIHRoYXQuCisKK1Vwc3RyZWFtLVN0YXR1czogUGVuZGluZworCitTaWduZWQtb2ZmLWJ5OiBKb2UgU2xhdGVyIDxqc2xhdGVyQHdpbmRyaXZlci5jb20+CisKKy0tLSBhL01ha2VmaWxlLmFtCisrKysgYi9NYWtlZmlsZS5hbQorQEAgLTQ0LDcgKzQ0LDkgQEAgJChwa2djb25maWdfREFUQSk6IGNvbmZpZy5zdGF0dXMKKyBASU5UTFRPT0xfWE1MX1JVTEVACisgQElOVExUT09MX0RFU0tUT1BfUlVMRUAKKyAKKy1pbnN0YWxsLWRhdGEtaG9vazogaW5zdGFsbC1iaW5QUk9HUkFNUworKyMgZG8gTk9UIG1ha2UgdGhpcyBkZXBlbmRlbnQgb24gYW55dGhpbmchCisrIworK2luc3RhbGwtZGF0YS1ob29rOgorIGlmIEVOQUJMRV9VUERBVEVfTUlNRURCCisgCSQoREVTVERJUikiJChiaW5kaXIpL3VwZGF0ZS1taW1lLWRhdGFiYXNlIiAtViAiJChERVNURElSKSQoZGF0YWRpcikvbWltZSIKKyBlbmRpZgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvL3BhcmFsbGVsbWFrZS5wYXRjaCBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9wYXJhbGxlbG1ha2UucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjNGQwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NoYXJlZC1taW1lLWluZm8vc2hhcmVkLW1pbWUtaW5mby9wYXJhbGxlbG1ha2UucGF0Y2gKQEAgLTAsMCArMSwzMyBAQAorVGhlIE1ha2VmaWxlIHVzZWQgYnkgc2hhcmVkLW1pbWUtaW5mbyBpcyBvbmUgYmlnIHJhY2Ugd2l0aCB0aGUgU1VCRElSUyAKK29wdGlvbiBhbmQgdGhlIGRlcGVuZGVuY3kgc3BlY2lmaWNhbGx5IGNhbGxpbmcgbWFrZSBhbGwgY29tYmluaW5nIHRvCitjcmVhdGUgbXVsdGlwbGUgbWFrZSBpbnN0YW5jZXMgYWxsIG9mIHdoaWNoIG1heSB0cnkgYW5kIGJ1aWxkIHRhcmdldHMKK2xpa2UgdXBkYXRlLW1pbWUtZGF0YWJhc2UuCisKK1RoaXMgcGF0Y2ggcmVtb3ZlcyB0aG9zZSBvcHRpb25zIG1lYW5pbmcgbWFrZSBjYW4gY29ycmVjdGx5IGlkZW50aWZ5CitkZXBlbmRlbmNpZXMgYW5kIHN0b3AgaXRzZWxmIHJhY2luZyBpdHNlbGYuCisKK1JQIDEwLzEwLzIwMTEKKworVXBzdHJlYW0tU3RhdHVzOiBQZW5kaW5nCitTaWduZWQtb2ZmLWJ5OiBDb25zdGFudGluIE11c2NhIDxjb25zdGFudGlueC5tdXNjYUBpbnRlbC5jb20+CisKK0luZGV4OiBzaGFyZWQtbWltZS1pbmZvLTEuMC9NYWtlZmlsZS5hbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0tIHNoYXJlZC1taW1lLWluZm8tMS4wLm9yaWcvTWFrZWZpbGUuYW0KKysrKyBzaGFyZWQtbWltZS1pbmZvLTEuMC9NYWtlZmlsZS5hbQorQEAgLTEsNSArMSwzIEBACistU1VCRElSUz0uIHBvCistCisgQU1fQ1BQRkxBR1MgPSAkKEFMTF9DRkxBR1MpCisgCisgcGFja2FnZXNkaXIgPSAkKGRhdGFkaXIpL21pbWUvcGFja2FnZXMKK0BAIC03Miw4ICs3MCw3IEBAIHVuaW5zdGFsbC1ob29rOgorIAorIGFsbDogJChkZWZhdWx0bWFrZWRlcHMpCisgCistY3JlYXRlLXBvdDoKKy0JJChBTV9WX0dFTikgJChNQUtFKSAtQyBwbyBzaGFyZWQtbWltZS1pbmZvLnBvdAorK2NyZWF0ZS1wb3Q6IHBvCisgCisgY2hlY2s6IGNyZWF0ZS1wb3QgZnJlZWRlc2t0b3Aub3JnLnhtbCB1cGRhdGUtbWltZS1kYXRhYmFzZSBjaGVjay10cmFuc2xhdGlvbnMKKyAJaWYgdGVzdCAtZSAkKHRvcF9idWlsZGRpcikvZnJlZWRlc2t0b3Aub3JnLnhtbDsgdGhlbiBcCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zaGFyZWQtbWltZS1pbmZvL3NoYXJlZC1taW1lLWluZm9fMS40LmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvXzEuNC5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRmZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc2hhcmVkLW1pbWUtaW5mby9zaGFyZWQtbWltZS1pbmZvXzEuNC5iYgpAQCAtMCwwICsxLDcgQEAKK3JlcXVpcmUgc2hhcmVkLW1pbWUtaW5mby5pbmMKKworU1JDX1VSSSArPSAiZmlsZTovL3BhcmFsbGVsbWFrZS5wYXRjaCBcCisJICAgIGZpbGU6Ly9pbnN0YWxsLWRhdGEtaG9vay5wYXRjaCIKKworU1JDX1VSSVttZDVzdW1dID0gIjE2YzAyZjdiNjU4ZmZmMmE5YzIwNzQwNmQzODhlYTMxIgorU1JDX1VSSVtzaGEyNTZzdW1dID0gImJiYzBiZDAyM2Y0OTdkZmQ3NWUxY2E3MzQ0MWNiYmI1YTYzNjE3ZDllMTRmMjc5MGI4NjgzNjFjYzA1NWI1YjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvZmlsZXMvMDAwMS11c2luZy10aGUtZHluYW1pYy1saWJyYXJ5LnBhdGNoIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzLzAwMDEtdXNpbmctdGhlLWR5bmFtaWMtbGlicmFyeS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2JmZDVmCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL2ZpbGVzLzAwMDEtdXNpbmctdGhlLWR5bmFtaWMtbGlicmFyeS5wYXRjaApAQCAtMCwwICsxLDMwIEBACitbUEFUQ0hdIHVzaW5nIHRoZSBkeW5hbWljIGxpYnJhcnkKKworVXBzdHJlYW0tU3RhdHVzOiAgSW5hcHByb3ByaWF0ZSBbY29uZmlndXJhdGlvbl0KKworYnVpbGRpbmcgc3RhdGljYWxseS1saW5rZWQgc3FsaXRlMyBmYWlsZWQgc2luY2Ugc3FsaXRlMy5vIGlzIGdlbmVyYXRlZCBpbiAKK2RpZmZlcmVudCBkaXIsIGV2ZW4gaWYgbGluayBzdWNjZXNzZXMsIHRoZSBzaXplIG9mIHNxbGl0ZTMgaXMgYmVjb21lIGxhcmdlciwKK3NvIHVzZSB0aGUgZHluYW1pYyBsaW5rLCByZWY6IGh0dHA6Ly9wYXRjaHdvcmsub3BlbmVtYmVkZGVkLm9yZy9wYXRjaC85MzI5My8KKworU2lnbmVkLW9mZi1ieTogUm95IExpIDxyb25ncWluZy5saUB3aW5kcml2ZXIuY29tPgorLS0tCisgTWFrZWZpbGUuYW0gfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KK2luZGV4IDg4YmMyM2QuLmZlNTBmMjAgMTAwNjQ0CistLS0gYS9NYWtlZmlsZS5hbQorKysrIGIvTWFrZWZpbGUuYW0KK0BAIC03LDcgKzcsOCBAQCBsaWJzcWxpdGUzX2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIC12ZXJzaW9uLWluZm8gODo2OjgKKyAKKyBiaW5fUFJPR1JBTVMgPSBzcWxpdGUzCisgc3FsaXRlM19TT1VSQ0VTID0gc2hlbGwuYyBzcWxpdGUzLmgKKy1zcWxpdGUzX0xEQUREID0gc3FsaXRlMy4kKE9CSkVYVCkgQFJFQURMSU5FX0xJQlNACisrc3FsaXRlM19MREFERCA9IEBSRUFETElORV9MSUJTQCBsaWJzcWxpdGUzLmxhCisrCisgCisgaW5jbHVkZV9IRUFERVJTID0gc3FsaXRlMy5oIHNxbGl0ZTNleHQuaAorIAorLS0gCisxLjkuMQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMgYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC9zcWxpdGUvc3FsaXRlMy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUzNzkxYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzLmluYwpAQCAtMCwwICsxLDM0IEBACitTVU1NQVJZID0gIkVtYmVkZGFibGUgU1FMIGRhdGFiYXNlIGVuZ2luZSIKK0hPTUVQQUdFID0gImh0dHA6Ly93d3cuc3FsaXRlLm9yZyIKK1NFQ1RJT04gPSAibGlicyIKK0RFUEVORFMgPSAicmVhZGxpbmUgbmN1cnNlcyIKK0RFUEVORFNfY2xhc3MtbmF0aXZlID0gIiIKK0xJQ0VOU0UgPSAiUEQiCisKK2luaGVyaXQgYXV0b3Rvb2xzIHBrZ2NvbmZpZworCitFWFRSQV9PRUNPTkYgPSAiLS1lbmFibGUtc2hhcmVkIC0tZW5hYmxlLXRocmVhZHNhZmUiCitFWFRSQV9PRUNPTkZfY2xhc3MtbmF0aXZlID0gIi0tZW5hYmxlLXNoYXJlZCAtLWVuYWJsZS10aHJlYWRzYWZlIC0tZGlzYWJsZS1yZWFkbGluZSIKK2V4cG9ydCBjb25maWdfQlVJTERfQ0MgPSAiJHtCVUlMRF9DQ30iCitleHBvcnQgY29uZmlnX0JVSUxEX0NGTEFHUyA9ICIke0JVSUxEX0NGTEFHU30iCitleHBvcnQgY29uZmlnX0JVSUxEX0xJQlMgPSAiJHtCVUlMRF9MREZMQUdTfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0NDID0gIiR7Q0N9IgorZXhwb3J0IGNvbmZpZ19UQVJHRVRfTElOSyA9ICIke0NDTER9IgorZXhwb3J0IGNvbmZpZ19UQVJHRVRfQ0ZMQUdTID0gIiR7Q0ZMQUdTfSIKK2V4cG9ydCBjb25maWdfVEFSR0VUX0xGTEFHUyA9ICIke0xERkxBR1N9IgorCisjIHByZWFkKCkgaXMgaW4gUE9TSVguMS0yMDAxIHNvIGFueSByZWFzb25hYmxlIHN5c3RlbSBtdXN0IHN1cmVseSBzdXBwb3J0IGl0CitCVUlMRF9DRkxBR1MgKz0gIi1EVVNFX1BSRUFEIgorVEFSR0VUX0NGTEFHUyArPSAiLURVU0VfUFJFQUQiCisKK1BBQ0tBR0VTID0gImxpYiR7QlBOfSBsaWIke0JQTn0tZGV2IGxpYiR7QlBOfS1kb2MgJHtQTn0tZGJnIGxpYiR7QlBOfS1zdGF0aWNkZXYgJHtQTn0iCisKK0ZJTEVTXyR7UE59ID0gIiR7YmluZGlyfS8qIgorRklMRVNfbGliJHtCUE59ID0gIiR7bGliZGlyfS8qLnNvLioiCitGSUxFU19saWIke0JQTn0tZGV2ID0gIiR7bGliZGlyfS8qLmxhICR7bGliZGlyfS8qLnNvIFwKKwkgICAgICAgICAgICAgICAgCSAgICR7bGliZGlyfS9wa2djb25maWcgJHtpbmNsdWRlZGlyfSIKK0ZJTEVTX2xpYiR7QlBOfS1kb2MgPSAiJHtkb2NkaXJ9ICR7bWFuZGlyfSAke2luZm9kaXJ9IgorRklMRVNfbGliJHtCUE59LXN0YXRpY2RldiA9ICIke2xpYmRpcn0vbGliKi5hIgorQVVUT19MSUJOQU1FX1BLR1MgPSAiJHtNTFBSRUZJWH1saWIke0JQTn0iCisKK0JCQ0xBU1NFWFRFTkQgPSAibmF0aXZlIG5hdGl2ZXNkayIKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvc3FsaXRlL3NxbGl0ZTNfMy44LjEwLjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyYWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3NxbGl0ZS9zcWxpdGUzXzMuOC4xMC4yLmJiCkBAIC0wLDAgKzEsMjMgQEAKK3JlcXVpcmUgc3FsaXRlMy5pbmMKKworTElDX0ZJTEVTX0NIS1NVTSA9ICJmaWxlOi8vc3FsaXRlMy5oO2VuZGxpbmU9MTE7bWQ1PTY1ZjBhNTdjYTY5Mjg3MTBiNDE4YzA5NGIzNTcwYmIwIgorCitkZWYgc3FsaXRlX2Rvd25sb2FkX3ZlcnNpb24oZCk6CisgICAgcHZzcGxpdCA9IGQuZ2V0VmFyKCdQVicsIFRydWUpLnNwbGl0KCcuJykKKyAgICByZXR1cm4gcHZzcGxpdFswXSArICcnLmpvaW4oW3BhcnQucmp1c3QoMiwnMCcpIGZvciBwYXJ0IGluIHB2c3BsaXRbMTpdXSkKKworUEUgPSAiMyIKK1NRTElURV9QViA9ICIke0BzcWxpdGVfZG93bmxvYWRfdmVyc2lvbihkKX0iCitTUkNfVVJJID0gImh0dHA6Ly93d3cuc3FsaXRlLm9yZy8yMDE1L3NxbGl0ZS1hdXRvY29uZi0ke1NRTElURV9QVn0udGFyLmd6IFwKKyAgICAgICAgICAgZmlsZTovLzAwMDEtdXNpbmctdGhlLWR5bmFtaWMtbGlicmFyeS5wYXRjaCBcCisiCisKK1NSQ19VUklbbWQ1c3VtXSA9ICJhMThiZmMwMTVjZDQ5YTFlN2E5NjFiN2I3N2JjM2IzNyIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI4MzgyZTU1YTRlN2Q4NTNjOTMwMzg1NjJjYTNkZDAwMzA3OTM3ZmNjZjFjNmI2NWRkZDgxM2U1MDNhNTZkNjI2IgorCitTID0gIiR7V09SS0RJUn0vc3FsaXRlLWF1dG9jb25mLSR7U1FMSVRFX1BWfSIKKworIyBQcm92aWRlIGNvbHVtbiBtZXRhLWRhdGEgQVBJCitCVUlMRF9DRkxBR1MgKz0gIi1EU1FMSVRFX0VOQUJMRV9DT0xVTU5fTUVUQURBVEEiCitUQVJHRVRfQ0ZMQUdTICs9ICItRFNRTElURV9FTkFCTEVfQ09MVU1OX01FVEFEQVRBIgorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC90YWdsaWIvdGFnbGliXzEuOS4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdGFnbGliL3RhZ2xpYl8xLjkuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI3ODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdGFnbGliL3RhZ2xpYl8xLjkuMS5iYgpAQCAtMCwwICsxLDMwIEBACitTVU1NQVJZID0gIkxpYnJhcnkgZm9yIHJlYWRpbmcgYW5kIGVkaXRpbmcgdGhlIG1ldGEtZGF0YSBvZiBwb3B1bGFyIGF1ZGlvIGZvcm1hdHMiCitTRUNUSU9OID0gImxpYnMvbXVsdGltZWRpYSIKK0hPTUVQQUdFID0gImh0dHA6Ly90YWdsaWIuZ2l0aHViLmlvLyIKK0xJQ0VOU0UgPSAiTEdQTHYyLjEgfCBNUEwtMSIKK0xJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0NPUFlJTkcuTEdQTDttZDU9NGZiZDY1MzgwY2RkMjU1OTUxMDc5MDA4YjM2NDUxNmMgXAorICAgICAgICAgICAgICAgICAgICBmaWxlOi8vQ09QWUlORy5NUEw7bWQ1PWJmZTFmNzVkNjA2OTEyYTQxMTFjOTA3NDNkNmM3MzI1IFwKKyAgICAgICAgICAgICAgICAgICAgZmlsZTovL3RhZ2xpYi9hdWRpb3Byb3BlcnRpZXMuaDtiZWdpbmxpbmU9MTtlbmRsaW5lPTI0O21kNT05ZGYyYzczOTk1MTliNzMxMDU2OGE3YzU1MDQyZWNlZSIKKworREVQRU5EUyA9ICJ6bGliIgorCitTUkNfVVJJID0gImh0dHA6Ly90YWdsaWIuZ2l0aHViLmlvL3JlbGVhc2VzLyR7QlB9LnRhci5neiIKK1NSQ19VUklbbWQ1c3VtXSA9ICIwZDM1ZGY5NjgyMmJiZDU2NGM1NTA0Y2IzYzJlNGQ4NiIKK1NSQ19VUklbc2hhMjU2c3VtXSA9ICI3MmQzNzFjZDE0MTlhODdhZTIwMDQ0N2E1M2JmZjJiZTIxOTI4MzA3MWU4MGZkMTIzMzc5MjhjYzk2N2RjNzFhIgorCitCSU5DT05GSUcgPSAiJHtiaW5kaXJ9L3RhZ2xpYi1jb25maWciCisKK2luaGVyaXQgY21ha2UgcGtnY29uZmlnIGJpbmNvbmZpZy1kaXNhYmxlZAorCitQQUNLQUdFUyA9KyAiJHtQTn0tYyIKK0ZJTEVTXyR7UE59LWMgPSAiJHtsaWJkaXJ9L2xpYnRhZ19jLnNvLioiCisKK0VYVFJBX09FQ01BS0UgPSAiLURMSUJfU1VGRklYPSR7QGQuZ2V0VmFyKCdiYXNlbGliJywgVHJ1ZSkucmVwbGFjZSgnbGliJywgJycpfSIKKworZG9fY29uZmlndXJlX3ByZXBlbmQgKCkgeworCXJtIC1mICR7U30vYWRtaW4vbHRtYWluLnNoCisJcm0gLWYgJHtTfS9hZG1pbi9saWJ0b29sLm00LmluCisJIyBEb24ndCBoYXZlIGEgZmxvYXRpbmcgZGVwZW5kZW55IG9uIGJvb3N0CisJc2VkIC1pIC1lICJzL2F0b21pYy5ocHAvYXRvbWljLW5vdC1leGlzdC5ocHAvIiAke1N9L0NvbmZpZ3VyZUNoZWNrcy5jbWFrZSAke1N9L3RhZ2xpYi90b29sa2l0L3RyZWZjb3VudGVyLmNwcAorfQorCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC91c2VyLWNyZWF0aW9uL3h1c2VyLWFjY291bnRfMC4xLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2JhOTdkCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdXNlci1jcmVhdGlvbi94dXNlci1hY2NvdW50XzAuMS5iYgpAQCAtMCwwICsxLDI3IEBACitTVU1NQVJZID0gIkNyZWF0ZXMgYW4gJ3h1c2VyJyBhY2NvdW50IHVzZWQgZm9yIHJ1bm5pbmcgWDExIgorTElDRU5TRSA9ICJNSVQiCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly8ke0NPUkVCQVNFfS9tZXRhL0NPUFlJTkcuTUlUO21kNT0zZGE5Y2ZiY2I3ODhjODBhMDM4NDM2MWI0ZGUyMDQyMCIKKworU1JDX1VSSSA9ICIiCisKK2luaGVyaXQgYWxsYXJjaCB1c2VyYWRkCisKK2RvX2NvbmZpZ3VyZSgpIHsKKyAgICA6Cit9CisKK2RvX2NvbXBpbGUoKSB7CisgICAgOgorfQorCitkb19pbnN0YWxsKCkgeworICAgIDoKK30KKworVVNFUkFERF9QQUNLQUdFUyA9ICIke1BOfSIKK0dST1VQQUREX1BBUkFNXyR7UE59ID0gIi0tc3lzdGVtIHNodXRkb3duIgorVVNFUkFERF9QQVJBTV8ke1BOfSA9ICItLWNyZWF0ZS1ob21lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLS1ncm91cHMgdmlkZW8sdHR5LGF1ZGlvLGlucHV0LHNodXRkb3duLGRpc2sgXAorICAgICAgICAgICAgICAgICAgICAgICAtLXVzZXItZ3JvdXAgeHVzZXIiCisKK0FMTE9XX0VNUFRZXyR7UE59ID0gIjEiCmRpZmYgLS1naXQgYS9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2ggYi9tZXRhL3JlY2lwZXMtc3VwcG9ydC92dGUvdnRlLTAuMjguMi9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2M2QzNwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUtMC4yOC4yL29ic29sZXRlX2F1dG9tYWtlX21hY3Jvcy5wYXRjaApAQCAtMCwwICsxLDE0IEBACitVcHN0cmVhbS1TdGF0dXM6IFN1Ym1pdHRlZCBbaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTY5MTU0NV0KKworU2lnbmVkLW9mZi1ieTogTWFya28gTGluZHF2aXN0IDxjYXpmaTc0QGdtYWlsLmNvbT4KK2RpZmYgLU51cmQgdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbiB2dGUtMC4yOC4yL2dub21lLXB0eS1oZWxwZXIvY29uZmlndXJlLmluCistLS0gdnRlLTAuMjguMi9nbm9tZS1wdHktaGVscGVyL2NvbmZpZ3VyZS5pbgkyMDEwLTA3LTE1IDIwOjA4OjQ0LjAwMDAwMDAwMCArMDMwMAorKysrIHZ0ZS0wLjI4LjIvZ25vbWUtcHR5LWhlbHBlci9jb25maWd1cmUuaW4JMjAxMy0wMS0xMSAxNDo1MDozNC45NzEwMjc0NDAgKzAyMDAKK0BAIC04LDcgKzgsNiBAQAorIEFDX0lTQ19QT1NJWAorIEFDX1BST0dfQ0MKKyBBQ19TVERDX0hFQURFUlMKKy1BTV9QUk9HX0NDX1NUREMKKworIGlmIHRlc3QgLXogIiRlbmFibGVfbWFpbnRhaW5lcl9tb2RlIjsgdGhlbgorICAgZW5hYmxlX21haW50YWluZXJfbW9kZT15ZXMKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZS5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0MDYyYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGUuaW5jCkBAIC0wLDAgKzEsMTYgQEAKK1NVTU1BUlkgPSAiVmlydHVhbCB0ZXJtaW5hbCBlbXVsYXRvciBHVEsrIHdpZGdldCBsaWJyYXJ5IgorQlVHVFJBQ0tFUiA9ICJodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9idWdsaXN0LmNnaT9wcm9kdWN0PXZ0ZSIKK0xJQ0VOU0UgPSAiTEdQTHYyLjAiCitERVBFTkRTID0gIiBnbGliLTIuMCBndGsrIGludGx0b29sLW5hdGl2ZSBuY3Vyc2VzIGdvYmplY3QtaW50cm9zcGVjdGlvbi1zdHViIgorUkRFUEVORFNfbGlidnRlID0gInZ0ZS10ZXJtY2FwIgorCitpbmhlcml0IGdub21lIGd0ay1kb2MKKworRVhUUkFfT0VDT05GID0gIi0tZGlzYWJsZS1weXRob24gLS1kaXNhYmxlLWludHJvc3BlY3Rpb24iCisKK1BBQ0tBR0VTID0rICJsaWJ2dGUgdnRlLXRlcm1jYXAiCitGSUxFU19saWJ2dGUgPSAiJHtsaWJkaXJ9Lyouc28uKiAke2xpYmV4ZWNkaXJ9L2dub21lLXB0eS1oZWxwZXIiCitGSUxFU18ke1BOfS1kYmcgPSsgIiR7bGliZXhlY2Rpcn0vLmRlYnVnICR7cHJlZml4fS9zcmMgJHtiaW5kaXJ9Ly5kZWJ1ZyBcCisgICAgICAgICAgICAgICAke2xpYmRpcn0vLmRlYnVnIgorRklMRVNfdnRlLXRlcm1jYXAgPSAiJHtkYXRhZGlyfS92dGUvdGVybWNhcC0wLjAiCisKZGlmZiAtLWdpdCBhL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiIGIvbWV0YS9yZWNpcGVzLXN1cHBvcnQvdnRlL3Z0ZV8wLjI4LjIuYmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwMjVjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy1zdXBwb3J0L3Z0ZS92dGVfMC4yOC4yLmJiCkBAIC0wLDAgKzEsMTQgQEAKK3JlcXVpcmUgdnRlLmluYworCitMSUNfRklMRVNfQ0hLU1VNID0gImZpbGU6Ly9DT1BZSU5HO21kNT0zYmY1MDAwMmFlZmQwMDJmNDllN2JiODU0MDYzZjdlNyIKKworUFIgPSAicjYiCisKK1NSQ19VUkkgKz0gImZpbGU6Ly9vYnNvbGV0ZV9hdXRvbWFrZV9tYWNyb3MucGF0Y2giCisKK0NGTEFHUyArPSAiLURfR05VX1NPVVJDRSIKKworU1JDX1VSSVthcmNoaXZlLm1kNXN1bV0gPSAiNDk3ZjI2ZTQ1NzMwODY0OWU2ZWNlMzJiM2JiMTQyZmYiCitTUkNfVVJJW2FyY2hpdmUuc2hhMjU2c3VtXSA9ICI4NmNmMGI4MWFhMDIzZmE5M2VkNDE1NjUzZDUxYzk2NzY3ZjIwYjJkNzMzNGM4OTNjYWJhNzFlNDI2NTRiMGFlIgorCitSRUNJUEVfTk9fVVBEQVRFX1JFQVNPTiA9ICJtYXRjaGJveC10ZXJtaW5hbCBuZWVkcyB0byBiZSBwb3J0ZWQgb3ZlciB0byBuZXcgdnRlIGZpcnN0IgpkaWZmIC0tZ2l0IGEvbWV0YS9yZWNpcGVzLnR4dCBiL21ldGEvcmVjaXBlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1Mzg2ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvcmVjaXBlcy50eHQKQEAgLTAsMCArMSwxNSBAQAorcmVjaXBlcy1ic3AgICAgICAgICAgLSBBbnl0aGluZyB3aXRoIGxpbmtzIHRvIHNwZWNpZmljIGhhcmR3YXJlIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KK3JlY2lwZXMtY29ubmVjdGl2aXR5IC0gTGlicmFyaWVzIGFuZCBhcHBsaWNhdGlvbnMgcmVsYXRlZCB0byBjb21tdW5pY2F0aW9uIHdpdGggb3RoZXIgZGV2aWNlcyAKK3JlY2lwZXMtY29yZSAgICAgICAgIC0gV2hhdCdzIG5lZWRlZCB0byBidWlsZCBhIGJhc2ljIHdvcmtpbmcgTGludXggaW1hZ2UgaW5jbHVkaW5nIGNvbW1vbmx5IHVzZWQgZGVwZW5kZW5jaWVzCityZWNpcGVzLWRldnRvb2xzICAgICAtIFRvb2xzIHByaW1hcmlseSB1c2VkIGJ5IHRoZSBidWlsZCBzeXN0ZW0gKGJ1dCBjYW4gYWxzbyBiZSB1c2VkIG9uIHRhcmdldHMpCityZWNpcGVzLWV4dGVuZGVkICAgICAtIEFwcGxpY2F0aW9ucyB3aGljaCB3aGlsc3Qgbm90IGVzc2VudGlhbCBhZGQgZmVhdHVyZXMgY29tcGFyZWQgdG8gdGhlIGFsdGVybmF0aXZlcyBpbgorICAgICAgICAgICAgICAgICAgICAgICBjb3JlLiBNYXkgYmUgbmVlZGVkIGZvciBmdWxsIHRvb2wgZnVuY3Rpb25hbGl0eSBvciBMU0IgY29tcGxpYW5jZS4KK3JlY2lwZXMtZ25vbWUgICAgICAgIC0gQWxsIHRoaW5ncyByZWxhdGVkIHRvIHRoZSBHVEsrIGFwcGxpY2F0aW9uIGZyYW1ld29yaworcmVjaXBlcy1ncmFwaGljcyAgICAgLSBYIGFuZCBvdGhlciBncmFwaGljYWxseSByZWxhdGVkIHN5c3RlbSBsaWJyYXJpZXMgIAorcmVjaXBlcy1rZXJuZWwgICAgICAgLSBUaGUga2VybmVsIGFuZCBnZW5lcmljIGFwcGxpY2F0aW9ucy9saWJyYXJpZXMgd2l0aCBzdHJvbmcga2VybmVsIGRlcGVuZGVuY2llcworcmVjaXBlcy1sc2I0ICAgICAgICAgLSBSZWNpcGVzIGFkZGVkIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHN1cHBvcnRpbmcgdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UgKExTQikgNC54CityZWNpcGVzLW11bHRpbWVkaWEgICAtIENvZGVjcyBhbmQgc3VwcG9ydCB1dGlsdGllcyBmb3IgYXVkaW8sIGltYWdlcyBhbmQgdmlkZW8KK3JlY2lwZXMtcnQgICAgICAgICAgIC0gUHJvdmlkZXMgcGFja2FnZSBhbmQgaW1hZ2UgcmVjaXBlcyBmb3IgdXNpbmcgYW5kIHRlc3RpbmcgdGhlIFBSRUVNUFRfUlQga2VybmVsCityZWNpcGVzLXF0ICAgICAgICAgICAtIEFsbCB0aGluZ3MgcmVsYXRlZCB0byB0aGUgUXQgYXBwbGljYXRpb24gZnJhbWV3b3JrCityZWNpcGVzLXNhdG8gICAgICAgICAtIFRoZSBTYXRvIGRlbW8vcmVmZXJlbmNlIFVJL1VYLCBpdHMgYXNzb2NpYXRlZCBhcHBzIGFuZCBjb25maWd1cmF0aW9uIAorcmVjaXBlcy1zdXBwb3J0ICAgICAgLSBSZWNpcGVzIHVzZWQgYnkgb3RoZXIgcmVjaXBlcyBidXQgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGluY2x1ZGVkIGluIGltYWdlcwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS0zMiBiL21ldGEvc2l0ZS9hcm0tMzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmZDhkMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tMzIKQEAgLTAsMCArMSw0NyBAQAorIyBkZWZpbml0aW9ucyBhc3N1bWluZyAzMi1iaXQgYXJtIGFyY2hpdGVjdHVyZQorCisjIGFwYWNoZQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl9zc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Q9NH0KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorCisjIGdsaWItMi4wCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD00fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBqaWtlcworYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NAorCisjIE9SQml0MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfY2hhcj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2RvdWJsZT04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfb2N0ZXQ9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCisKKyMgYXQtc3BpMi1jb3JlCithY19jdl9hbGlnbm9mX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9kYmluZF9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfZGJpbmRfc3RydWN0PTEKK2FjX2N2X2FsaWdub2ZfZGJ1c19ib29sX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDE2X3Q9MgorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDMyX3Q9NAorYWNfY3ZfYWxpZ25vZl9kYnVzX2ludDY0X3Q9OAorYWNfY3ZfYWxpZ25vZl9kb3VibGU9OApkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS02NCBiL21ldGEvc2l0ZS9hcm0tNjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjMDliMgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tNjQKQEAgLTAsMCArMSw0NiBAQAorIyBkZWZpbml0aW9ucyBhc3N1bWluZyA2NC1iaXQgYXJtIGFyY2hpdGVjdHVyZQorCisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKK2FjX2N2X3NpemVvZl9zaXplX3Q9OAorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9OAorYWNfY3ZfYWxpZ25vZl9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKKworIyBnbGliCisjZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorI2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CisjZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorCisjIGdsaWItMi4wCisjZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorI2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PSR7Z2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9OH0KKyNnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKyNnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KKyNnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIE9SQml0MiAoc2hvdWxkIGJlIGluIG1ldGEtZ25vbWUvc2l0ZS9hcm0tNjQpCisjYWNfY3ZfYWxpZ25vZl9DT1JCQV9ib29sZWFuPTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorI2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKKyNhY19jdl9hbGlnbm9mX0NPUkJBX2xvbmc9NAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19sb25nPTgKKyNhY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorI2FjX2N2X2FsaWdub2ZfQ09SQkFfc2hvcnQ9MgorI2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKKyNhY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfZGJpbmRfcG9pbnRlcj04CithY19jdl9hbGlnbm9mX2RiaW5kX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX2RidXNfYm9vbF90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQxNl90PTIKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQzMl90PTQKK2FjX2N2X2FsaWdub2ZfZGJ1c19pbnQ2NF90PTgKKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1jb21tb24gYi9tZXRhL3NpdGUvYXJtLWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmU1ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1jb21tb24KQEAgLTAsMCArMSwxNTkgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX2g9bm99CithY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPSR7YWNfY3ZfaGVhZGVyX25ldGluZXRfc2N0cF91aW9faD1ub30KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9eWVzfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9bWlzc2luZ30KKworIyBjb3JldXRpbHMKK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE5fQorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGRiIChzbGVlcHljYXQpCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkYgorZGJfY3Zfc3BpbmxvY2tzPSR7ZGJfY3Zfc3BpbmxvY2tzPW5vfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBmbm1hdGNoCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9JHtnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT15ZXN9CisKKyNnc3RyZWFtZXIKK2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9JHthc19jdl91bmFsaWduZWRfYWNjZXNzPW5vfQorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbGlibmV0IAorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgbGlieGZjZTR1dGlsCit3aXRoX2Jyb2tlbl9wdXRlbnY9JHt3aXRoX2Jyb2tlbl9wdXRlbnY9bm99CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgbXlzcWwKK215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj0ke215c3FsX2N2X2Z1bmNfYXRvbWljX3N1Yj1ub30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD1ub30KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgcnN5bmMKK3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX0xBUkdFRklMRT1ub30KK3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj0ke3JzeW5jX2N2X0hBVkVfU09DS0VUUEFJUj15ZXN9Cityc3luY19jdl9IQVZFX0xPTkdMT05HPSR7cnN5bmNfY3ZfSEFWRV9MT05HTE9ORz15ZXN9Cityc3luY19jdl9IQVZFX09GRjY0X1Q9JHtyc3luY19jdl9IQVZFX09GRjY0X1Q9bm99Cityc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPSR7cnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD1ub30KK3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3JzeW5jX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtyc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorcnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtyc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9Cityc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtyc3luY19jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorcnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9JHtyc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT1ub30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049bm99CisKKyMgc2NyZWVuCitzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX2Jjb3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fYnJva2VuX2ltcGw9eWVzfQorc2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD0ke3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT0ke3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9eWVzfQorc2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPSR7c2NyZWVuX2N2X3N5c190ZXJtaW5mb191c2VkPXllc30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9eWVzCisKKyMgeGZmbQoram1fY3ZfZnVuY193b3JraW5nX3JlYWRkaXI9eWVzCisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9hcm0tZGFyd2luIGIvbWV0YS9zaXRlL2FybS1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlmZjA5NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm0tZGFyd2luCkBAIC0wLDAgKzEsMTEgQEAKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj1ub30KK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj1ub30KK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9hcm0tZGFyd2luOCBiL21ldGEvc2l0ZS9hcm0tZGFyd2luOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWZmMDk3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1kYXJ3aW44CkBAIC0wLDAgKzEsMTEgQEAKK2FjX2N2X2xpYl9tX3Npbj0ke2FjX2N2X2xpYl9tX3Npbj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj1ub30KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj1ub30KK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz1ub30KK2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9JHtiYXNoX2N2X2hhdmVfbWJzdGF0ZV90PXllc30KK2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj0ke2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcj1ub30KK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9hcm0tbGludXggYi9tZXRhL3NpdGUvYXJtLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjE4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtLWxpbnV4CkBAIC0wLDAgKzEsMTYwIEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl93Y2hhcl90PSR7YWNfY3Zfc2l6ZW9mX3djaGFyX3Q9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9ib29sPSR7YWNfY3Zfc2l6ZW9mX2Jvb2w9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfaW50X3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD00fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19wPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfcD00fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2ZfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2Zfc2lnbmVkX2NoYXI9MX0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9JHtzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPXllc30KK3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz0ke3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fR0VUR1JPVVBTPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9MSU5VWF9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9JHtzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPW5vfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQU1fSD0ke3NhbWJhX2N2X0hBVkVfRkFNX0g9bm99CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfRlVOQ1RJT05fTUFDUk89JHtzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQxNl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0lOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj0ke3NhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD15ZXN9CitzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPSR7c2FtYmFfY3ZfSEFWRV9SUENfQVVUSF9FUlJPUl9DT05GTElDVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj0ke3NhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVI2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUjY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDE2X0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VJTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfVVRJTUJVRj0ke3NhbWJhX2N2X0hBVkVfVVRJTUJVRj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0FERFI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9FWElUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfSE9TVD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9JRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX05BTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9QSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RJTUU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVFY9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UWVBFPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVVNFUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VYX1VUX1NZU0xFTj0ke3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD15ZXN9CitzYW1iYV9jdl9IQVZFX1dlcnJvcj0ke3NhbWJhX2N2X0hBVkVfV2Vycm9yPXllc30KK3NhbWJhX2N2X1BVVFVUTElORV9SRVRVUk5TX1VUTVA9JHtzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPXllc30KK3NhbWJhX2N2X1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9eWVzfQorc2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPSR7c2FtYmFfY3ZfUkVQTEFDRV9HRVRQQVNTPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9JHtzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9bm99CitzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9JHtzYW1iYV9jdl9SVU5fUVVPVEFfVEVTVFM9eWVzfQorc2FtYmFfY3ZfU0VFS0RJUl9SRVRVUk5TX1ZPSUQ9JHtzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DRVNTT1JTX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DRVNTT1JTX09OTE49eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OUFJPQ19PTkxOPW5vfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19QQUdFU0laRT0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfUEFHRVNJWkU9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTX1hGUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTX1hGUz15ZXN9CitzYW1iYV9jdl9UUllfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1FVT1RBUz1ub30KK3NhbWJhX2N2X1RSWV9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfV0VfVVNFX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9XRV9VU0VfU1lTX1FVT1RBUz15ZXN9CitzYW1iYV9jdl9XSVRIX0FGUz0ke3NhbWJhX2N2X1dJVEhfQUZTPW5vfQorc2FtYmFfY3ZfV0lUSF9GQUtFX0tBU0VSVkVSPSR7c2FtYmFfY3ZfV0lUSF9GQUtFX0tBU0VSVkVSPW5vfQorc2FtYmFfY3ZfV0lUSF9RVU9UQVM9JHtzYW1iYV9jdl9XSVRIX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9TWVNfUVVPVEFTPWF1dG99CitzYW1iYV9jdl9XSVRIX1ZGU19BRlNBQ0w9JHtzYW1iYV9jdl9XSVRIX1ZGU19BRlNBQ0w9bm99CitzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD0ke3NhbWJhX2N2X2NvbXBpbGVyX3N1cHBvcnRzX2xsPXllc30KK3NhbWJhX2N2X2ZvdW5kX3hmc19oZWFkZXI9JHtzYW1iYV9jdl9mb3VuZF94ZnNfaGVhZGVyPXllc30KK3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9JHtzYW1iYV9jdl9oYXZlX2xvbmdsb25nPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz0ke3NhbWJhX2N2X2ltbWVkaWF0ZV9zdHJ1Y3R1cmVzPXllc30KK3NhbWJhX2N2X29wdGltaXplX291dF9mdW5jYXRpb25fY2FsbHM9JHtzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPXllc30KK3NhbWJhX2N2X3NpZ19hdG9taWNfdD0ke3NhbWJhX2N2X3NpZ19hdG9taWNfdD15ZXN9CitzYW1iYV9jdl9zb2NrbGVuX3Q9JHtzYW1iYV9jdl9zb2NrbGVuX3Q9eWVzfQorc2FtYmFfY3Zfc3RydWN0X3RpbWVzcGVjPSR7c2FtYmFfY3Zfc3RydWN0X3RpbWVzcGVjPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc19saW51eC5jfQorc2FtYmFfY3ZfdW5peHNvY2tldD0ke3NhbWJhX2N2X3VuaXhzb2NrZXQ9eWVzfQorc2FtYmFfY3Zfdm9sYXRpbGU9JHtzYW1iYV9jdl92b2xhdGlsZT15ZXN9CisKKyNvbGRlciBzYW1iZSBkZWZpbmVzCitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjZGJ1cworYWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPSR7YWNfY3ZfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPXllc30KKworIyBsZnRwCithY19jdl9maWxlX19fZGV2X3B0Y189eWVzCisKKyMgZ3VpbGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9hdHRyX2dldHN0YWNrPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9eWVzfQorCisjIGduZXQKK2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuPSR7YWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV9sZW49bm99CithY19jdl9nbmV0X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2duZXRfaGF2ZV9hYnN0cmFjdF9zb2NrZXRzPW5vfQorZ25ldF9zb2NrYWRkcl9mYW1pbHlfZmllbGRfbmFtZT0ke2duZXRfc29ja2FkZHJfZmFtaWx5X2ZpZWxkX25hbWU9c3NfZmFtaWx5fQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMgYi9tZXRhL3NpdGUvYXJtLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWU3YzZlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2FybS1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwxMDUgQEAKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CisKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKK2FjX2N2X3RpbWVfcl90eXBlPSR7YWNfY3ZfdGltZV9yX3R5cGU9UE9TSVh9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0JST0tFTl9OSVNQTFVTX0lOQ0xVREVfRklMRVM9JHtzYW1iYV9jdl9CUk9LRU5fTklTUExVU19JTkNMVURFX0ZJTEVTPXllc30KK3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz0ke3NhbWJhX2N2X0JST0tFTl9SRURIQVRfN19TWVNURU1fSEVBREVSUz1ub30KK3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0xJTlVYX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fTElOVVhfU0VOREZJTEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRFFCX0ZTT0ZUTElNSVQ9JHtzYW1iYV9jdl9IQVZFX0RRQl9GU09GVExJTUlUPW5vfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZVTkNUSU9OX01BQ1JPPSR7c2FtYmFfY3ZfSEFWRV9GVU5DVElPTl9NQUNSTz15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX0lOVDE2X0ZST01fUlBDX1JQQ19IPW5vfQorc2FtYmFfY3ZfSEFWRV9JTlQzMl9GUk9NX1JQQ19SUENfSD0ke3NhbWJhX2N2X0hBVkVfSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX05BVElWRV9JQ09OVj0ke3NhbWJhX2N2X0hBVkVfTkFUSVZFX0lDT05WPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfUlBDX0FVVEhfRVJST1JfQ09ORkxJQ1Q9JHtzYW1iYV9jdl9IQVZFX1JQQ19BVVRIX0VSUk9SX0NPTkZMSUNUPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRT0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9bm99CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9bm99CitzYW1iYV9jdl9IQVZFX1NPQ0tfU0lOX0xFTj0ke3NhbWJhX2N2X0hBVkVfU09DS19TSU5fTEVOPW5vfQorc2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMS1NJWkU9JHtzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxLU0laRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NUQVRfU1RfQkxPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9TVEFUX1NUX0JMT0NLUz15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PW5vfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfSUZfRFFCTEs9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9JRl9EUUJMSz1ub30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX01FTV9EUUJMSz0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX01FTV9EUUJMSz1ub30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VSU5UMTZfRlJPTV9SUENfUlBDX0g9JHtzYW1iYV9jdl9IQVZFX1VJTlQxNl9GUk9NX1JQQ19SUENfSD1ub30KK3NhbWJhX2N2X0hBVkVfVUlOVDMyX0ZST01fUlBDX1JQQ19IPSR7c2FtYmFfY3ZfSEFWRV9VSU5UMzJfRlJPTV9SUENfUlBDX0g9bm99CitzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtzYW1iYV9jdl9IQVZFX1VOU0lHTkVEX0NIQVI9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVElNQlVGPSR7c2FtYmFfY3ZfSEFWRV9VVElNQlVGPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfQUREUj0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfQUREUj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX0VYSVQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0VYSVQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9IT1NUPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9IT1NUPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfSUQ9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX0lEPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfTkFNRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfTkFNRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1BJRD0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfUElEPXllc30KK3NhbWJhX2N2X0hBVkVfVVRfVVRfVElNRT0ke3NhbWJhX2N2X0hBVkVfVVRfVVRfVElNRT15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RWPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9UVj15ZXN9CitzYW1iYV9jdl9IQVZFX1VUX1VUX1RZUEU9JHtzYW1iYV9jdl9IQVZFX1VUX1VUX1RZUEU9eWVzfQorc2FtYmFfY3ZfSEFWRV9VVF9VVF9VU0VSPSR7c2FtYmFfY3ZfSEFWRV9VVF9VVF9VU0VSPXllc30KK3NhbWJhX2N2X0hBVkVfVVhfVVRfU1lTTEVOPSR7c2FtYmFfY3ZfSEFWRV9VWF9VVF9TWVNMRU49bm99CitzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9JHtzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9eWVzfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9QVVRVVExJTkVfUkVUVVJOU19VVE1QPSR7c2FtYmFfY3ZfUFVUVVRMSU5FX1JFVFVSTlNfVVRNUD15ZXN9CitzYW1iYV9jdl9RVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz0ke3NhbWJhX2N2X1JFUExBQ0VfR0VUUEFTUz15ZXN9CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPSR7c2FtYmFfY3ZfUlVOX1FVT1RBX1RFU1RTPWF1dG99CitzYW1iYV9jdl9TRUVLRElSX1JFVFVSTlNfVk9JRD0ke3NhbWJhX2N2X1NFRUtESVJfUkVUVVJOU19WT0lEPXllc30KK3NhbWJhX2N2X1NJWkVPRl9JTk9fVD0ke3NhbWJhX2N2X1NJWkVPRl9JTk9fVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfT0ZGX1Q9eWVzfQorc2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9JHtzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD15ZXN9CitzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz0ke3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPXllc30KK3NhbWJhX2N2X1RSWV9RVU9UQVM9JHtzYW1iYV9jdl9UUllfUVVPVEFTPW5vfQorc2FtYmFfY3ZfVFJZX1NZU19RVU9UQVM9JHtzYW1iYV9jdl9UUllfU1lTX1FVT1RBUz1ub30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1dJVEhfUVVPVEFTPSR7c2FtYmFfY3ZfV0lUSF9RVU9UQVM9YXV0b30KK3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz0ke3NhbWJhX2N2X1dJVEhfU1lTX1FVT1RBUz1hdXRvfQorc2FtYmFfY3ZfY29tcGlsZXJfc3VwcG9ydHNfbGw9JHtzYW1iYV9jdl9jb21waWxlcl9zdXBwb3J0c19sbD15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3ZfaW1tZWRpYXRlX3N0cnVjdHVyZXM9JHtzYW1iYV9jdl9pbW1lZGlhdGVfc3RydWN0dXJlcz15ZXN9CitzYW1iYV9jdl9vcHRpbWl6ZV9vdXRfZnVuY2F0aW9uX2NhbGxzPSR7c2FtYmFfY3Zfb3B0aW1pemVfb3V0X2Z1bmNhdGlvbl9jYWxscz15ZXN9CitzYW1iYV9jdl9zaWdfYXRvbWljX3Q9JHtzYW1iYV9jdl9zaWdfYXRvbWljX3Q9eWVzfQorc2FtYmFfY3Zfc29ja2xlbl90PSR7c2FtYmFfY3Zfc29ja2xlbl90PXllc30KK3NhbWJhX2N2X3VuaXhzb2NrZXQ9JHtzYW1iYV9jdl91bml4c29ja2V0PXllc30KK3NhbWJhX2N2X3ZvbGF0aWxlPSR7c2FtYmFfY3Zfdm9sYXRpbGU9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybWViLWxpbnV4IGIvbWV0YS9zaXRlL2FybWViLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjFmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvYXJtZWItbGludXgKQEAgLTAsMCArMSw0MyBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND0ke3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2FybWViLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9hcm1lYi1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMxZTg1NwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9hcm1lYi1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwzOCBAQAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vCithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpemVfdD0ke2FjX2N2X3NpemVvZl9zaXplX3Q9NH0KK2FjX2N2X3NpemVvZl92b2lkX3A9JHthY19jdl9zaXplb2Zfdm9pZF9wPTR9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWQ9NH0KK2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbiBiL21ldGEvc2l0ZS9jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNjYzE0ZgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24KQEAgLTAsMCArMSwyMSBAQAorIyBsaWJlbGYKK21yX2N2X3RhcmdldF9lbGY9JHttcl9jdl90YXJnZXRfZWxmPXllc30KKworIyBOb3JtYWxseSBrZXJuZWxzIGhhdmUgL2Rldi9yYW5kb20gZW5hYmxlZAorYWNfY3ZfZmlsZV9fZGV2X3JhbmRvbT0ke2FjX2N2X2ZpbGVfX2Rldl9yYW5kb209eWVzfQorCisjIEF2b2lkIHN1ZG8gdG8gYXNzdW1lIHZvaWQgZm9yIHVuc2V0ZW52IGluIGNyb3NzIGVudmlyb25tZW50LCBvciBlbHNlIGl0IGNvbmZsaWN0cyB3aXRoCisjIHRhcmdldCBzdGRsaWIuaCBwcm90b3R5cGUgd2hpY2ggZm9sbG93cyBQT1NJWCBjb21waWxpYW5jZS4gTWFyayBmb3IgdXBzdHJlYW0uCitzdWRvX2N2X2Z1bmNfdW5zZXRlbnZfdm9pZD1ubworCisjIHNoYWRvdyBkaXIgaW5mbywgdG8gYXZvaWQgc2VhcmNoaW5nIGJ1aWxkIHN5c3RlbQorc2hhZG93X2N2X21haWxkaXI9JHtsb2NhbHN0YXRlZGlyfS9zcG9vbC9tYWlsCitzaGFkb3dfY3ZfbWFpbGZpbGU9TWFpbGJveAorc2hhZG93X2N2X3V0bXBkaXI9JHtsb2NhbHN0YXRlZGlyfS9ydW4KK3NoYWRvd19jdl9sb2dkaXI9JHtsb2NhbHN0YXRlZGlyfS9sb2cKK3NoYWRvd19jdl9wYXNzd2RfZGlyPSR7YmluZGlyfQorCisjIHB5dGhvbjogZGVhY3RpdmF0ZSBhIHJ1bnRpbWUgY2hlY2sgZm9yIGlwdjYtc3VwcG9ydCBpbiBweXRob24gPj0yLjcuMSB0aGF0IGZhaWxzIHdoZW4gY3Jvc3MtY29tcGlsaW5nCithY19jdl9idWdneV9nZXRhZGRyaW5mbz1ubworCithY19jdl9wYXRoX1NFRD1zZWQKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tZGFyd2luIGIvbWV0YS9zaXRlL2NvbW1vbi1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyZDg5OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tZGFyd2luCkBAIC0wLDAgKzEsMiBAQAorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvY29tbW9uLWdsaWJjIGIvbWV0YS9zaXRlL2NvbW1vbi1nbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDQzZjhlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2NvbW1vbi1nbGliYwpAQCAtMCwwICsxLDg2IEBACisjIGdlbmVyYWwKK2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD0ke2FjX2N2X2hhdmVfZGVjbF9zeXNfc2lnbGlzdD15ZXN9CithY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX21hbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfZnVuY19nZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0Z3JlbnRfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldHB3dWlkX3I9JHthY19jdl9mdW5jX2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl90eXBlX3VpZF90PXthY19jdl90eXBlX3VpZF90PXllc30KK2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89JHthY19jdl9mdW5jX2dldGFkZHJpbmZvPXllc30KKworIyBiYXNoCitiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PSR7YmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD15ZXN9CitiYXNoX2N2X3N5c19zaWdsaXN0PSR7YmFzaF9jdl9zeXNfc2lnbGlzdD15ZXN9CitiYXNoX2N2X2dldGN3ZF9tYWxsb2M9JHtiYXNoX2N2X2dldGN3ZF9tYWxsb2M9eWVzfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjIGNvcmV1dGlscworZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT0ke2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisjIGdsaWItMS54IHJlcXVpcmVzIHRoaXMgYW5kIHBrZ2NvbmZpZy1uYXRpdmUgLyBwa2djb25maWctbmF0aXZlc2RrIHVzZQorIyB0aGF0IHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBsb29wLgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X3ZhX2NvcHk9JHtnbGliX2N2X3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXZlX3Fzb3J0X3I9JHtnbGliX2N2X2hhdmVfcXNvcnRfcj15ZXN9CisKKyNkYnVzLWdsaWIKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgZ251Y2FzaAorYW1fY3Zfc2NhbmZfbGxkPSR7YW1fY3Zfc2NhbmZfbGxkPXllc30KKworIyBndWlsZQorYWNfY3ZfZnVuY19wdGhyZWFkX2F0dHJfZ2V0c3RhY2s9JHthY19jdl9mdW5jX3B0aHJlYWRfYXR0cl9nZXRzdGFjaz15ZXN9CisKKyNnY2MtemxpYgorYWNfY3ZfZnVuY19nZXRwYWdlc2l6ZT0ke2FjX2N2X2Z1bmNfZ2V0cGFnZXNpemU9eWVzfQorYWNfY3ZfZnVuY19tZW1jcHk9JHthY19jdl9mdW5jX21lbWNweT15ZXN9CithY19jdl9mdW5jX3N0cmVycm9yPSR7YWNfY3ZfZnVuY19zdHJlcnJvcj15ZXN9CisKKyMgc3F1aWQKK2FjX2N2X2FmX3VuaXhfbGFyZ2VfZGdyYW09JHthY19jdl9hZl91bml4X2xhcmdlX2RncmFtPXllc30KK2FjX2N2X2Z1bmNfc2V0cmVzdWlkPSR7YWNfY3ZfZnVuY19zZXRyZXN1aWQ9eWVzfQorYWNfY3ZfZnVuY192YV9jb3B5PSR7YWNfY3ZfZnVuY192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfX192YV9jb3B5PSR7YWNfY3ZfZnVuY19fX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZXBvbGxfd29ya3M9JHthY19jdl9lcG9sbF93b3Jrcz15ZXN9CisKK2FjX2N2X2NoZWNrX3NqbGo9c3NqbGoKKworIyBtNAorZ3RfY3ZfbG9jYWxlX2ZyPSR7Z3RfY3ZfbG9jYWxlX2ZyPWZyX0ZSfQorZ2xfY3ZfZnVuY19idG93Y19lb2Y9JHtnbF9jdl9mdW5jX2J0b3djX2VvZj15ZXN9CitnbF9jdl9mdW5jX3djcnRvbWJfcmV0dmFsPSR7Z2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD15ZXN9CitnbF9jdl9mdW5jX3djdG9iX3dvcmtzPSR7Z2xfY3ZfZnVuY193Y3RvYl93b3Jrcz15ZXN9CitnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT0ke2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPXllc30KK2dsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz0ke2dsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz15ZXN9CitnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmc9JHtnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmc9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbD0ke2dsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWw9eWVzfQorZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9JHtnbF9jdl9mdW5jX21icnRvd2NfbnVsX3JldHZhbD15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgWG9yZworeG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD0ke3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi1saW51eCBiL21ldGEvc2l0ZS9jb21tb24tbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1YmU2OAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tbGludXgKQEAgLTAsMCArMSw1MiBAQAorIyBhcHIKK2FjX2N2X2ZpbGVfX2Rldl96ZXJvPSR7YWNfY3ZfZmlsZV9fZGV2X3plcm89eWVzfQorYWNfY3Zfc2l6ZW9mX3BpZF90PSR7YWNfY3Zfc2l6ZW9mX3BpZF90PTR9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfSUZBQ0VfQUlYPSR7c2FtYmFfY3ZfSEFWRV9JRkFDRV9BSVg9bm99CitzYW1iYV9jdl9IQVZFX0lGQUNFX0lGQ09ORj0ke3NhbWJhX2N2X0hBVkVfSUZBQ0VfSUZDT05GPXllc30KK3NhbWJhX2N2X0hBVkVfSUZBQ0VfSUZSRVE9JHtzYW1iYV9jdl9IQVZFX0lGQUNFX0lGUkVRPXllc30KK3NhbWJhX2N2X0hBVkVfSVJJWF9TUEVDSUZJQ19DQVBBQklMSVRJRVM9JHtzYW1iYV9jdl9IQVZFX0lSSVhfU1BFQ0lGSUNfQ0FQQUJJTElUSUVTPW5vfQorCisjIGRiCitkYl9jdl9wYXRoX2FyPSR7ZGJfY3ZfcGF0aF9hcj0vdXNyL2Jpbi9hcn0KK2RiX2N2X3BhdGhfY2htb2Q9JHtkYl9jdl9wYXRoX2NobW9kPS9iaW4vY2htb2R9CitkYl9jdl9wYXRoX2NwPSR7ZGJfY3ZfcGF0aF9jcD0vYmluL2NwfQorZGJfY3ZfcGF0aF9sbj0ke2RiX2N2X3BhdGhfbG49L2Jpbi9sbn0KK2RiX2N2X3BhdGhfbWtkaXI9JHtkYl9jdl9wYXRoX21rZGlyPS9iaW4vbWtkaXJ9CitkYl9jdl9wYXRoX3JhbmxpYj0ke2RiX2N2X3BhdGhfcmFubGliPS91c3IvYmluL3JhbmxpYn0KK2RiX2N2X3BhdGhfcm09JHtkYl9jdl9wYXRoX3JtPS9iaW4vcm19CitkYl9jdl9wYXRoX3NoPSR7ZGJfY3ZfcGF0aF9zaD0vYmluL3NofQorZGJfY3ZfcGF0aF9zdHJpcD0ke2RiX2N2X3BhdGhfc3RyaXA9L3Vzci9iaW4vc3RyaXB9CisKKyMgYmFzaAorYmFzaF9jdl9oYXZlX21ic3RhdGVfdD0ke2Jhc2hfY3ZfaGF2ZV9tYnN0YXRlX3Q9eWVzfQorYmFzaF9jdl9tdXN0X3JlaW5zdGFsbF9zaWdoYW5kbGVycz0ke2Jhc2hfY3ZfbXVzdF9yZWluc3RhbGxfc2lnaGFuZGxlcnM9bm99CitiYXNoX2N2X2Z1bmNfc3RyY29sbF9icm9rZW49JHtiYXNoX2N2X2Z1bmNfc3RyY29sbF9icm9rZW49bm99CitiYXNoX2N2X2R1cDJfYnJva2VuPSR7YmFzaF9jdl9kdXAyX2Jyb2tlbj1ub30KK2Jhc2hfY3Zfb3BlbmRpcl9ub3Rfcm9idXN0PSR7YmFzaF9jdl9vcGVuZGlyX25vdF9yb2J1c3Q9bm99CitiYXNoX2N2X3R5cGVfcmxpbWl0PSR7YmFzaF9jdl90eXBlX3JsaW1pdD1ybGltX3R9CitiYXNoX2N2X2dldGVudl9yZWRlZj0ke2Jhc2hfY3ZfZ2V0ZW52X3JlZGVmPXllc30KK2Jhc2hfY3ZfdWxpbWl0X21heGZkcz0ke2Jhc2hfY3ZfdWxpbWl0X21heGZkcz15ZXN9CitiYXNoX2N2X2dldGN3ZF9jYWxsc19wb3Blbj0ke2Jhc2hfY3ZfZ2V0Y3dkX2NhbGxzX3BvcGVuPW5vfQorYmFzaF9jdl9wcmludGZfYV9mb3JtYXQ9JHtiYXNoX2N2X3ByaW50Zl9hX2Zvcm1hdD15ZXN9CitiYXNoX2N2X3BncnBfcGlwZT0ke2Jhc2hfY3ZfcGdycF9waXBlPW5vfQorYmFzaF9jdl9qb2JfY29udHJvbF9taXNzaW5nPSR7YmFzaF9jdl9qb2JfY29udHJvbF9taXNzaW5nPXByZXNlbnR9CitiYXNoX2N2X3N5c19uYW1lZF9waXBlcz0ke2Jhc2hfY3Zfc3lzX25hbWVkX3BpcGVzPXByZXNlbnR9CitiYXNoX2N2X3VudXNhYmxlX3J0c2lncz0ke2Jhc2hfY3ZfdW51c2FibGVfcnRzaWdzPW5vfQorCisjIGNvcmV1dGlscworZ2xfY3ZfZnVuY19mc3RhdGF0X3plcm9fZmxhZz0ke2dsX2N2X2Z1bmNfZnN0YXRhdF96ZXJvX2ZsYWc9eWVzfQorCisjIG15c3FsCithY19jdl9zeXNfcmVzdGFydGFibGVfc3lzY2FsbHM9JHthY19jdl9zeXNfcmVzdGFydGFibGVfc3lzY2FsbHM9eWVzfQorYWNfY3ZfY29udl9sb25nbG9uZ190b19mbG9hdD0ke2FjX2N2X2NvbnZfbG9uZ2xvbmdfdG9fZmxvYXQ9eWVzfQorCisjIFRDTAordGNsX2N2X2FwaV9zZXJpYWw9JHt0Y2xfY3ZfYXBpX3NlcmlhbD10ZXJtaW9zfQorCisjIHB5dGhvbgorYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcworCisjIGFwYWNoZQorYWNfY3Zfb19ub25ibG9ja19pbmhlcml0ZWQ9JHthY19jdl9vX25vbmJsb2NrX2luaGVyaXRlZD1ub30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tbWluZ3cgYi9tZXRhL3NpdGUvY29tbW9uLW1pbmd3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMzdjMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvY29tbW9uLW1pbmd3CkBAIC0wLDAgKzEsMiBAQAorIyBleHBhdAorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD1ubwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2NvbW1vbi1tdXNsIGIvbWV0YS9zaXRlL2NvbW1vbi1tdXNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZmMxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvY29tbW9uLW11c2wKQEAgLTAsMCArMSw1MiBAQAorIyBnZW5lcmFsCithY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9JHthY19jdl9oYXZlX2RlY2xfc3lzX3NpZ2xpc3Q9bm99CithY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX3JlYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbD0ke2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9JHthY19jdl9mdW5jX21hbGxvY193b3Jrcz15ZXN9CithY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9eWVzfQorYWNfY3ZfZnVuY19nZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldHBncnBfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfc2V0Z3JlbnRfdm9pZD15ZXMKK2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldHB3dWlkX3I9JHthY19jdl9mdW5jX2dldHB3dWlkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX2dldGFkZHJpbmZvPSR7YWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorYWNfY3ZfZnVuY19wcmludGZfdW5peDk4PSR7YWNfY3ZfZnVuY19wcmludGZfdW5peDk4PXllc30KK2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY19zbnByaW50Zl9jOTk9eWVzfQorYWNfY3ZfZnVuY192c25wcmludGZfYzk5PSR7YWNfY3ZfZnVuY192c25wcmludGZfYzk5PXllc30KK2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPSR7Z2xpYl9jdl9jb21wbGlhbnRfcG9zaXhfbWVtYWxpZ249MX0KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfaGF2ZV9xc29ydF9yPSR7Z2xpYl9jdl9oYXZlX3Fzb3J0X3I9bm99CisKKyNkYnVzLWdsaWIKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyMgYmFzaAorYmFzaF9jdl91bmRlcl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9bm99CitiYXNoX2N2X3N5c19zaWdsaXN0PSR7YmFzaF9jdl9zeXNfc2lnbGlzdD1ub30KKworIyBjb3JldXRpbHMKK2Z1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9JHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPXllc30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9JHtnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPW5vfQorZ2xfY3ZfZnVuY190enNldF9jbG9iYmVyPSR7Z2xfY3ZfZnVuY190enNldF9jbG9iYmVyPW5vfQorZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd249JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfc3Bhd25fd29ya3M9JHthY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPXllc30KKworIyB2YV9jb3B5IGFuZCBfdmFfY29weQorYWNfY3ZfdmFfY29weT0ke2FjX2N2X3ZhX2NvcHk9eWVzfQorYWNfY3ZfX192YV9jb3B5PSR7YWNfY3ZfX192YV9jb3B5PXllc30KK2FjX2N2X2Z1bmNfdmFfY29weT0ke2FjX2N2X2Z1bmNfdmFfY29weT15ZXN9CithY19jdl9mdW5jX19fdmFfY29weT0ke2FjX2N2X2Z1bmNfX192YV9jb3B5PXllc30KKworIyBwb3NpeF9nZXRwd3VpZF9yIHBvc2l4X2dldGdyZ2lkX3IgcG9zaXhfZ2V0cHduYW1fcgorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0Z3JnaWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIFhvcmcKK3hvcmdfY3ZfbWFsbG9jMF9yZXR1cm5zX251bGw9JHt4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9jb21tb24tdWNsaWJjIGIvbWV0YS9zaXRlL2NvbW1vbi11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmYzEwMwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9jb21tb24tdWNsaWJjCkBAIC0wLDAgKzEsNTIgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PSR7YWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0PW5vfQorYWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19yZWFsbG9jX3dvcmtzPXllc30KK2FjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9JHthY19jdl9mdW5jX3JlYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfbWFsbG9jX3dvcmtzPSR7YWNfY3ZfZnVuY19tYWxsb2Nfd29ya3M9eWVzfQorYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPSR7YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllc30KK2FjX2N2X2Z1bmNfZ2V0cGdycF92b2lkPXllcworYWNfY3ZfZnVuY19zZXRwZ3JwX3ZvaWQ9eWVzCithY19jdl9mdW5jX3NldGdyZW50X3ZvaWQ9eWVzCithY19jdl9mdW5jX2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRwd3VpZF9yPSR7YWNfY3ZfZnVuY19nZXRwd3VpZF9yPXllc30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz0ke2FjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzfQorCisjIGdsaWIKK2dsaWJfY3Zfc3RybGNweT0ke2dsaWJfY3Zfc3RybGNweT1ub30KK2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD0ke2FjX2N2X2Z1bmNfcHJpbnRmX3VuaXg5OD15ZXN9CithY19jdl9mdW5jX3NucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfc25wcmludGZfYzk5PXllc30KK2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT0ke2FjX2N2X2Z1bmNfdnNucHJpbnRmX2M5OT15ZXN9CitnbGliX2N2X2NvbXBsaWFudF9wb3NpeF9tZW1hbGlnbj0ke2dsaWJfY3ZfY29tcGxpYW50X3Bvc2l4X21lbWFsaWduPTF9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X2hhdmVfcXNvcnRfcj0ke2dsaWJfY3ZfaGF2ZV9xc29ydF9yPW5vfQorCisjZGJ1cy1nbGliCithY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9JHthY19jdl9oYXZlX2Fic3RyYWN0X3NvY2tldHM9eWVzfQorCisjIGJhc2gKK2Jhc2hfY3ZfdW5kZXJfc3lzX3NpZ2xpc3Q9JHtiYXNoX2N2X3VuZGVyX3N5c19zaWdsaXN0PW5vfQorYmFzaF9jdl9zeXNfc2lnbGlzdD0ke2Jhc2hfY3Zfc3lzX3NpZ2xpc3Q9bm99CisKKyMgY29yZXV0aWxzCitmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2JzaXplPSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZT15ZXN9CitnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9iYmVyPSR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj0ke2dsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ub30KK2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT0ke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVyZT15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X3NwYXduX3dvcmtzPSR7YWNfY3ZfZnVuY19wb3NpeF9zcGF3bl93b3Jrcz15ZXN9CisKKyMgdmFfY29weSBhbmQgX3ZhX2NvcHkKK2FjX2N2X3ZhX2NvcHk9JHthY19jdl92YV9jb3B5PXllc30KK2FjX2N2X19fdmFfY29weT0ke2FjX2N2X19fdmFfY29weT15ZXN9CithY19jdl9mdW5jX3ZhX2NvcHk9JHthY19jdl9mdW5jX3ZhX2NvcHk9eWVzfQorYWNfY3ZfZnVuY19fX3ZhX2NvcHk9JHthY19jdl9mdW5jX19fdmFfY29weT15ZXN9CisKKyMgcG9zaXhfZ2V0cHd1aWRfciBwb3NpeF9nZXRncmdpZF9yIHBvc2l4X2dldHB3bmFtX3IKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHd1aWRfcj15ZXN9CithY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldGdyZ2lkX3I9eWVzfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBYb3JnCit4b3JnX2N2X21hbGxvYzBfcmV0dXJuc19udWxsPSR7eG9yZ19jdl9tYWxsb2MwX3JldHVybnNfbnVsbD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvZW5kaWFuLWJpZyBiL21ldGEvc2l0ZS9lbmRpYW4tYmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OWU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvZW5kaWFuLWJpZwpAQCAtMCwwICsxLDggQEAKK2FjX2N2X2NfbGl0dGxlZW5kaWFuPSR7YWNfY3ZfY19saXR0bGVlbmRpYW49bm99CithY19jdl9jX2JpZ2VuZGlhbj0ke2FjX2N2X2NfYmlnZW5kaWFuPXllc30KKworIyBsaWJuZXQKK2FjX2N2X2xpYm5ldF9lbmRpYW5lc3M9JHthY19jdl9saWJuZXRfZW5kaWFuZXNzPWJpZ30KKworIyBsaWJtZW1jYWNoZWQKK2FjX2N2X2NfZW5kaWFuPWJpZwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUgYi9tZXRhL3NpdGUvZW5kaWFuLWxpdHRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NThkYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2VuZGlhbi1saXR0bGUKQEAgLTAsMCArMSw4IEBACithY19jdl9jX2xpdHRsZWVuZGlhbj0ke2FjX2N2X2NfbGl0dGxlZW5kaWFuPXllc30KK2FjX2N2X2NfYmlnZW5kaWFuPSR7YWNfY3ZfY19iaWdlbmRpYW49bm99CisKKyMgbGlibmV0CithY19jdl9saWJuZXRfZW5kaWFuZXNzPSR7YWNfY3ZfbGlibmV0X2VuZGlhbmVzcz1saWx9CisKKyMgbGlibWVtY2FjaGVkCithY19jdl9jX2VuZGlhbj1saXR0bGUKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9peDg2LWNvbW1vbiBiL21ldGEvc2l0ZS9peDg2LWNvbW1vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2QyY2UyCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL2l4ODYtY29tbW9uCkBAIC0wLDAgKzEsMjMyIEBACisjIGdlbmVyYWwKK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXJfcD00fQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfaW50X3A9JHthY19jdl9zaXplb2ZfaW50X3A9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfcD0ke2FjX2N2X3NpemVvZl9sb25nX3A9NH0KK2FjX2N2X3NpemVvZl9mbG9hdD0ke2FjX2N2X3NpemVvZl9mbG9hdD00fQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTR9CithY19jdl9zaXplb2ZfdWlkX3Q9JHthY19jdl9zaXplb2ZfdWlkX3Q9NH0KK2FjX2N2X3NpemVvZl9naWRfdD0ke2FjX2N2X3NpemVvZl9naWRfdD00fQorYWNfY3Zfc2l6ZW9mX2lub190PSR7YWNfY3Zfc2l6ZW9mX2lub190PTR9CithY19jdl9zaXplb2ZfZGV2X3Q9JHthY19jdl9zaXplb2ZfZGV2X3Q9OH0KK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT0ke2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CisKK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KK2FjX2N2X3NjdHA9JHthY19jdl9zY3RwPW5vfQorCithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKK2FjX2N2X3BhdGhfRVNEX0NPTkZJRz1ubworbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworam1fY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xvYmJlcj1ubworc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzCitiZl9sc2JmPTEKK2FjX2N2X3VjaGFyPSR7YWNfY3ZfdWNoYXI9bm99CithY19jdl91aW50PSR7YWNfY3ZfdWludD15ZXN9CithY19jdl91bG9uZz0ke2FjX2N2X3Vsb25nPXllc30KK2FjX2N2X3VzaG9ydD0ke2FjX2N2X3VzaG9ydD15ZXN9CisKKyMgYXVkYWNpdHkKK2FjX2N2X2ZpbGVfbGliX3NyY19saWJtYWRfZnJhbWVfaD0ke2FjX2N2X2ZpbGVfbGliX3NyY19saWJtYWRfZnJhbWVfaD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIGNsYW1hdgorY2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPSR7Y2xhbWF2X2F2X2Z1bmNfd29ya2luZ19zbnByaW50Zl9sb25nPXllc30KK2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD0ke2NsYW1hdl9hdl9oYXZlX2luX3BvcnRfdD15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9hZGRyX3Q9eWVzfQorYWNfY3ZfZnVuY19tbWFwX2ZpeGVkX21hcHBlZD0ke2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9eWVzfQorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIGRiCitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGV0dGVyY2FwCitldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD0ke2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX211dGV4X3RyeWxvY2tfcG9zaXg9eWVzfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPXllc30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9NAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBndWlsZQorYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBqaWtlcy1uYXRpdmUKK2FjX2N2X3NpemVvZl93Y2hhcl90PTQKKworIyBsZnRwCithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIGxpYm5ldCAKK2FjX2N2X2xibF91bmFsaWduZWRfZmFpbD0ke2FjX2N2X2xibF91bmFsaWduZWRfZmFpbD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBsaWJ4ZmNlNHV0aWwKK3dpdGhfYnJva2VuX3B1dGVudj0ke3dpdGhfYnJva2VuX3B1dGVudj1ub30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPXllc30KK215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD0ke215c3FsX2N2X2Z1bmNfYXRvbWljX2FkZD15ZXN9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD00CithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBwaHAKK2FjX2N2X3ByZWFkPSR7YWNfY3ZfcHJlYWQ9bm99CithY19jdl9wd3JpdGU9JHthY19jdl9wd3JpdGU9bm99CitwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtwaHBfY3ZfbGliX2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9eWVzfQorCisjIHJzeW5jCityc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9JHtyc3luY19jdl9IQVZFX0JST0tFTl9MQVJHRUZJTEU9bm99Cityc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9JHtyc3luY19jdl9IQVZFX1NPQ0tFVFBBSVI9eWVzfQorcnN5bmNfY3ZfSEFWRV9MT05HTE9ORz0ke3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9eWVzfQorcnN5bmNfY3ZfSEFWRV9PRkY2NF9UPSR7cnN5bmNfY3ZfSEFWRV9PRkY2NF9UPW5vfQorcnN5bmNfY3ZfSEFWRV9TSE9SVF9JTk9fVD0ke3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9bm99Cityc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9JHtyc3luY19jdl9IQVZFX1VOU0lHTkVEX0NIQVI9bm99Cityc3luY19jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7cnN5bmNfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorcnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7cnN5bmNfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3JzeW5jX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtyc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7cnN5bmNfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99Cityc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9BVE9OPW5vfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBzc2gKK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9kaXJlbnRfaGF2ZV9zcGFjZV9kX25hbWU9eWVzfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPSR7YWNfY3ZfdHlwZV9zdHJ1Y3RfdGltZXNwZWM9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPXllc30KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworCisjIHhmZm0KK2ptX2N2X2Z1bmNfd29ya2luZ19yZWFkZGlyPXllcworCisjIHhvcmcgWDExUjcKK2FjX2N2X3N5c19saW5rZXJfaD0ke2FjX2N2X3N5c19saW5rZXJfaD1ub30KK2FjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9YMTFfc2dtbF9kZWZzX2VudD0ke2FjX2N2X2ZpbGVfX3Vzcl9zaGFyZV9YMTFfc2dtbF9kZWZzX2VudD1ub30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKworI2RidXMKK2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz0ke2FjX2N2X2hhdmVfYWJzdHJhY3Rfc29ja2V0cz15ZXN9CisKKyNsaWJwY2lhY2Nlc3MKK2hhdmVfbXRycl9oPXllcworCisjbW96aWxsYQorbW96X2N2X3NpemVfb2ZfSlNfQllURVNfUEVSX1dPUkQ9NAorbW96X2N2X2FsaWduX29mX0pTX0FMSUdOX09GX1BPSU5URVI9NAorbW96X2N2X3NpemVfb2ZfSlNfQllURVNfUEVSX0RPVUJMRT04CisKKyNvZm9ubworYWNfY3ZfbGliX2Nfc2lnbmFsZmQ9JHthY19jdl9saWJfY19zaWduYWxmZD15ZXN9CisKKyN1bmZzMworbmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9JHtuZnNkX2N2X2Jyb2tlbl9zZXRmc3VpZD0wfQorbmZzZF9jdl9mdW5jX3N0YXRmcz0ke25mc2RfY3ZfZnVuY19zdGF0ZnM9c3RhdGZzMl9ic2l6ZX0KK25mc2RfY3ZfYnNkX3NpZ25hbHM9JHtuZnNkX2N2X2JzZF9zaWduYWxzPXllc30KKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD00CithY19jdl9hbGlnbm9mX2RvdWJsZT00CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwcy1jb21tb24gYi9tZXRhL3NpdGUvbWlwcy1jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlkNzJjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzLWNvbW1vbgpAQCAtMCwwICsxLDU2IEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGN2cworY3ZzX2N2X2Z1bmNfcHJpbnRmX3B0cj0ke2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9eWVzfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX29jdGV0PTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfYm9vbGVhbj0xCithY19jdl9hbGlnbm9mX0NPUkJBX2NoYXI9MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV93Y2hhcj0yCithY19jdl9hbGlnbm9mX0NPUkJBX3Nob3J0PTIKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZz00CithY19jdl9hbGlnbm9mX0NPUkJBX2xvbmdfbG9uZz04CithY19jdl9hbGlnbm9mX0NPUkJBX2Zsb2F0PTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9wb2ludGVyPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfc3RydWN0PTEKKworIyBhcGFjaGUKK2FjX2N2X2Z1bmNfcHRocmVhZF9rZXlfZGVsZXRlPSR7YWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9eWVzfQorYXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPSR7YXByX2N2X3Byb2Nlc3Nfc2hhcmVkX3dvcmtzPW5vfQorYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9JHthY19jdl9zaXplb2Zfc3NpemVfdD00fQorYXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz0ke2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwcy1saW51eCBiL21ldGEvc2l0ZS9taXBzLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYTU0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvbWlwcy1saW51eApAQCAtMCwwICsxLDc5IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyBsbWJlbmNoCithY19jdl91aW50PSR7YWNfY3ZfdW5pdD15ZXN9CisKKyMgRC1CVVMKK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CisKKyMgZXZvbHV0aW9uLWRhdGEtc2VydmVyCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9taXBzLWxpbnV4LXVjbGliYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjMzNjNlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHMtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsODAgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHM2NC1saW51eCBiL21ldGEvc2l0ZS9taXBzNjQtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwZmJiZQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjQtbGludXgKQEAgLTAsMCArMSw4MyBAQAorIyBnZW5lcmFsCithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CisKKyMgYmFzaAorYWNfY3ZfY19sb25nX2RvdWJsZT0ke2FjX2N2X2NfbG9uZ19kb3VibGU9bm99CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1wcmVzZW50fQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj1ub30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9bm99CithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD15ZXN9CisKKyMgZmdldAorY29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9fX3ZhX2NvcHk9JHtnbGliX2N2X19fdmFfY29weT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KKworIyBnbGliLTIuMAorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKK2FjX2N2X3NpemVvZl9zc2l6ZV90PTgKKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIHN0YXJ0dXAtbm90aWZpY2F0aW9uCitsZl9jdl9zYW5lX3JlYWxsb2M9JHtsZl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorCisjIGxpYmlkbAorbGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KKworIyBuY2Z0cAord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfc2VjPWxvbmd9Cit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPSR7d2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz1sb25nfQorCisjIGRiCitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorCisjIHJyZHRvb2wKK3JkX2N2X2llZWVfd29ya3M9JHtyZF9jdl9pZWVlX3dvcmtzPXllc30KKyMgYWNfY3ZfcGF0aF9QRVJMPSR7YWNfY3ZfcGF0aF9QRVJMPW5vfQorCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjIHNhbWJhCitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KKworIyB2aW0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CisKKyMgaW50ZXJjb20KK2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz0ke2FjX2N2X2Z1bmNfZm5tYXRjaF93b3Jrcz15ZXN9CisKKyMgbG1iZW5jaAorYWNfY3ZfdWludD0ke2FjX2N2X3VuaXQ9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGVkcy1kYnVzCithY19jdl9saWJpY29udl91dGY4PSR7YWNfY3ZfbGliaWNvbnZfdXRmOD15ZXN9CisKZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL21pcHM2NC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiYTU1MgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjQtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsODMgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBkYgorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nJ30KK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KKworIyBycmR0b29sCityZF9jdl9pZWVlX3dvcmtzPSR7cmRfY3ZfaWVlZV93b3Jrcz15ZXN9CisjIGFjX2N2X3BhdGhfUEVSTD0ke2FjX2N2X3BhdGhfUEVSTD1ub30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorCisjIGludGVyY29tCithY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9JHthY19jdl9mdW5jX2ZubWF0Y2hfd29ya3M9eWVzfQorCisjIGxtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQorCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXggYi9tZXRhL3NpdGUvbWlwczY0ZWwtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2MWViMAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eApAQCAtMCwwICsxLDgyIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorYWNfY3ZfYWxpZ25vZl9ndWludDMyPTQKK2FjX2N2X2FsaWdub2ZfZ3VpbnQ2ND04CithY19jdl9hbGlnbm9mX3Vuc2lnbmVkX2xvbmc9OAorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworI2xtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBlZHMtZGJ1cworYWNfY3ZfbGliaWNvbnZfdXRmOD0ke2FjX2N2X2xpYmljb252X3V0Zjg9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL21pcHM2NGVsLWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwNDk5ZAotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzNjRlbC1saW51eC11Y2xpYmMKQEAgLTAsMCArMSwxMDggQEAKKyMgZ2VuZXJhbAorYWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPSR7YWNfY3ZfZnVuY19zZXR2YnVmX3JldmVyc2VkPW5vfQorCisjIGJhc2gKK2FjX2N2X2NfbG9uZ19kb3VibGU9JHthY19jdl9jX2xvbmdfZG91YmxlPW5vfQorYmFzaF9jdl9mdW5jX3NpZ3NldGptcD0ke2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9cHJlc2VudH0KKworIyBvcGVuc3NoCithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj0ke2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPW5vfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9eWVzfQorYWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPSR7YWNfY3ZfaGF2ZV9vcGVucHR5X2N0dHlfYnVnPW5vfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9eWVzfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorCisjIGdsaWIKK2dsaWJfY3ZfX192YV9jb3B5PSR7Z2xpYl9jdl9fX3ZhX2NvcHk9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49bm99CitnbGliX2N2X3NhbmVfcmVhbGxvYz0ke2dsaWJfY3Zfc2FuZV9yZWFsbG9jPXllc30KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CitnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPSR7Z2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz04CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgbmNmdHAKK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3NlYz1sb25nfQord2lfY3Zfc3RydWN0X3RpbWV2YWxfdHZfdXNlYz0ke3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9bG9uZ30KK3dpX2N2X3VuaXhfZG9tYWluX3NvY2tldHM9JHt3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBzYW1iYQorIyBmcm9tIHNhbWJhIDMuMC4xNGEgb24gNS8yOS8yMDA1CithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9CithY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX2FzcHJpbnRmX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV9zZXRyZXNnaWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV9zZXRyZXN1aWRfZGVjbD0ke2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9eWVzfQorYWNfY3ZfaGF2ZV92YXNwcmludGZfZGVjbD0ke2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9eWVzfQorZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PSR7ZnVfY3Zfc3lzX3N0YXRfc3RhdHZmczY0PXllc30KK3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPSR7c2FtYmFfY3ZfRlRSVU5DQVRFX05FRURTX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9GQ05UTDY0X0xPQ0tTPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0dFVEdST1VQUz1ub30KK3NhbWJhX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPW5vfQorc2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPSR7c2FtYmFfY3ZfSEFWRV9DOTlfVlNOUFJJTlRGPXllc30KK3NhbWJhX2N2X0hBVkVfREVWNjRfVD0ke3NhbWJhX2N2X0hBVkVfREVWNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0VYUExJQ0lUX0xBUkdFRklMRV9TVVBQT1JUPSR7c2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9JHtzYW1iYV9jdl9IQVZFX0ZDTlRMX0xPQ0s9eWVzfQorc2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPSR7c2FtYmFfY3ZfSEFWRV9GVFJVTkNBVEVfRVhURU5EPXllc30KK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorc2FtYmFfY3ZfSEFWRV9JTk82NF9UPSR7c2FtYmFfY3ZfSEFWRV9JTk82NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9eWVzfQorc2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz15ZXN9CitzYW1iYV9jdl9IQVZFX01BS0VERVY9JHtzYW1iYV9jdl9IQVZFX01BS0VERVY9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD0ke3NhbWJhX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfUVVPVEFDVExfNEE9JHtzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPXllc30KK3NhbWJhX2N2X0hBVkVfUk9PVD0ke3NhbWJhX2N2X0hBVkVfUk9PVD1ub30KK3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9JHtzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND0ke3NhbWJhX2N2X0hBVkVfU0VOREZJTEU2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0RJUkVOVDY0PXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorc2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPSR7c2FtYmFfY3ZfSEFWRV9XT1JLSU5HX0FGX0xPQ0FMPW5vfQorc2FtYmFfY3ZfSEFWRV9XZXJyb3I9JHtzYW1iYV9jdl9IQVZFX1dlcnJvcj15ZXN9CitzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPSR7c2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD1ub30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX09GRl9UPSR7c2FtYmFfY3ZfU0laRU9GX09GRl9UPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTkdST1VQU19NQVg9JHtzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPXllc30KK3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj0ke3NhbWJhX2N2X1NZU0NPTkZfU0NfTlBST0NfT05MTj1ub30KK3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPSR7c2FtYmFfY3ZfU1lTUVVPVEFfRk9VTkQ9eWVzfQorc2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9JHtzYW1iYV9jdl9TWVNRVU9UQV9XT1JLUz15ZXN9CitzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD15ZXN9CitzYW1iYV9jdl9oYXZlX2xvbmdsb25nPSR7c2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9eWVzfQorc2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9JHtzYW1iYV9jdl9zeXNxdW90YXNfZmlsZT1saWIvc3lzcXVvdGFzXzRBLmN9CisjIFRoaXMgY2FjaGVkIHZhbHVlIG5lZWRzIGEgbG9jYWwgcGF0Y2ggdG8gcGljayBpdCB1cCwgdXBzdHJlYW0gMy4wLjE0YQorIyBkb2Vzbid0IGNhY2hlIGl0Lgorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvbWlwc2VsLWxpbnV4IGIvbWV0YS9zaXRlL21pcHNlbC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTZiMWJlCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL21pcHNlbC1saW51eApAQCAtMCwwICsxLDc5IEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGdsaWItMi4wCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK3V0aWxzX2N2X3N5c19vcGVuX21heD0ke3V0aWxzX2N2X3N5c19vcGVuX21heD0xMDE1fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZGIKK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgcnJkdG9vbAorcmRfY3ZfaWVlZV93b3Jrcz0ke3JkX2N2X2llZWVfd29ya3M9eWVzfQorIyBhY19jdl9wYXRoX1BFUkw9JHthY19jdl9wYXRoX1BFUkw9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKK3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPSR7c2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9eWVzfQorCisjIHZpbQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KKworIyBpbnRlcmNvbQorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworI2xtYmVuY2gKK2FjX2N2X3VpbnQ9JHthY19jdl91bml0PXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBldm9sdXRpb24tZGF0YS1zZXJ2ZXIKK2FjX2N2X2xpYmljb252X3V0Zjg9JHthY19jdl9saWJpY29udl91dGY4PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjIGIvbWV0YS9zaXRlL21pcHNlbC1saW51eC11Y2xpYmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkyMWNkYQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9taXBzZWwtbGludXgtdWNsaWJjCkBAIC0wLDAgKzEsMTAwIEBACisjIGdlbmVyYWwKK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT1ub30KK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgb3BlbnNzaAorYWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9hY2NyaWdodHNfaW5fbXNnaGRyPW5vfQorYWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9JHthY19jdl9oYXZlX2Jyb2tlbl9zbnByaW50Zj1ub30KK2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9JHthY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz1ub30KK2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9JHthY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PXllc30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KKworIyBnbGliCitnbGliX2N2X19fdmFfY29weT0ke2dsaWJfY3ZfX192YV9jb3B5PXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2dsaWJfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbH0KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorCisjIGxpYnBjYXAKK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz0ke2xmX2N2X3NhbmVfcmVhbGxvYz15ZXN9CisKKyMgbGliaWRsCitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD0ke2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorCisjIG5jZnRwCit3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl9zZWM9bG9uZ30KK3dpX2N2X3N0cnVjdF90aW1ldmFsX3R2X3VzZWM9JHt3aV9jdl9zdHJ1Y3RfdGltZXZhbF90dl91c2VjPWxvbmd9Cit3aV9jdl91bml4X2RvbWFpbl9zb2NrZXRzPSR7d2lfY3ZfdW5peF9kb21haW5fc29ja2V0cz15ZXN9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgc2FtYmEKKyMgZnJvbSBzYW1iYSAzLjAuMTRhIG9uIDUvMjkvMjAwNQorYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz0ke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9eWVzfQorYWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPSR7YWNfY3ZfaGF2ZV9hc3ByaW50Zl9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzZ2lkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc2dpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfc2V0cmVzdWlkX2RlY2w9JHthY19jdl9oYXZlX3NldHJlc3VpZF9kZWNsPXllc30KK2FjX2N2X2hhdmVfdmFzcHJpbnRmX2RlY2w9JHthY19jdl9oYXZlX3Zhc3ByaW50Zl9kZWNsPXllc30KK2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND0ke2Z1X2N2X3N5c19zdGF0X3N0YXR2ZnM2ND15ZXN9CitzYW1iYV9jdl9GVFJVTkNBVEVfTkVFRFNfUk9PVD0ke3NhbWJhX2N2X0ZUUlVOQ0FURV9ORUVEU19ST09UPW5vfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj1ub30KK3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3NhbWJhX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9JHtzYW1iYV9jdl9IQVZFX0RFVjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01BSk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPSR7c2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUlOT1JfRk49eWVzfQorc2FtYmFfY3ZfSEFWRV9FWFBMSUNJVF9MQVJHRUZJTEVfU1VQUE9SVD0ke3NhbWJhX2N2X0hBVkVfRVhQTElDSVRfTEFSR0VGSUxFX1NVUFBPUlQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPSR7c2FtYmFfY3ZfSEFWRV9GQ05UTF9MT0NLPXllc30KK3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD0ke3NhbWJhX2N2X0hBVkVfRlRSVU5DQVRFX0VYVEVORD15ZXN9CitzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3NhbWJhX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3NhbWJhX2N2X0hBVkVfSU5PNjRfVD0ke3NhbWJhX2N2X0hBVkVfSU5PNjRfVD1ub30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfSEFWRV9NQUtFREVWPSR7c2FtYmFfY3ZfSEFWRV9NQUtFREVWPXllc30KK3NhbWJhX2N2X0hBVkVfTU1BUD0ke3NhbWJhX2N2X0hBVkVfTU1BUD15ZXN9CitzYW1iYV9jdl9IQVZFX09GRjY0X1Q9JHtzYW1iYV9jdl9IQVZFX09GRjY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX1FVT1RBQ1RMXzRBPSR7c2FtYmFfY3ZfSEFWRV9RVU9UQUNUTF80QT15ZXN9CitzYW1iYV9jdl9IQVZFX1JPT1Q9JHtzYW1iYV9jdl9IQVZFX1JPT1Q9bm99CitzYW1iYV9jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7c2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRElSRU5UNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9ESVJFTlQ2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PSR7c2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND15ZXN9CitzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPSR7c2FtYmFfY3ZfSEFWRV9UUlVOQ0FURURfU0FMVD1ub30KK3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj0ke3NhbWJhX2N2X0hBVkVfVU5TSUdORURfQ0hBUj1ub30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD1ub30KK3NhbWJhX2N2X0hBVkVfV2Vycm9yPSR7c2FtYmFfY3ZfSEFWRV9XZXJyb3I9eWVzfQorc2FtYmFfY3ZfUkVBTFBBVEhfVEFLRVNfTlVMTD0ke3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9bm99CitzYW1iYV9jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05HUk9VUFNfTUFYPSR7c2FtYmFfY3ZfU1lTQ09ORl9TQ19OR1JPVVBTX01BWD15ZXN9CitzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49JHtzYW1iYV9jdl9TWVNDT05GX1NDX05QUk9DX09OTE49bm99CitzYW1iYV9jdl9TWVNRVU9UQV9GT1VORD0ke3NhbWJhX2N2X1NZU1FVT1RBX0ZPVU5EPXllc30KK3NhbWJhX2N2X1NZU1FVT1RBX1dPUktTPSR7c2FtYmFfY3ZfU1lTUVVPVEFfV09SS1M9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KK3NhbWJhX2N2X3N5c3F1b3Rhc19maWxlPSR7c2FtYmFfY3Zfc3lzcXVvdGFzX2ZpbGU9bGliL3N5c3F1b3Rhc180QS5jfQorIyBUaGlzIGNhY2hlZCB2YWx1ZSBuZWVkcyBhIGxvY2FsIHBhdGNoIHRvIHBpY2sgaXQgdXAsIHVwc3RyZWFtIDMuMC4xNGEKKyMgZG9lc24ndCBjYWNoZSBpdC4KK3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPSR7c2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9eWVzfQpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL25hdGl2ZSBiL21ldGEvc2l0ZS9uYXRpdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RmYjFjYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9uYXRpdmUKQEAgLTAsMCArMSBAQAorYWNfY3ZfcGF0aF9TRUQ9c2VkCmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24gYi9tZXRhL3NpdGUvcG93ZXJwYy1jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjk5YwotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjLWNvbW1vbgpAQCAtMCwwICsxLDE0IEBACisjIGdsaWIKK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTQKKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4gYi9tZXRhL3NpdGUvcG93ZXJwYy1kYXJ3aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1ZjUwYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjLWRhcndpbgpAQCAtMCwwICsxLDcgQEAKKyMgcGtnY29uZmlnLW5hdGl2ZSBmb3IgT1MgWCBidWlkCithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4IGIvbWV0YS9zaXRlL3Bvd2VycGMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmODljYgotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9wb3dlcnBjLWxpbnV4CkBAIC0wLDAgKzEsMTYgQEAKKyMgZ2VuZXJhbAorYWNfY3ZfdmFfdmFsX2NvcHk9JHthY19jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyBnbGliCitnbGliX2N2X3N0YWNrX2dyb3dzPSR7Z2xpYl9jdl9zdGFja19ncm93cz1ub30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgbGZ0cAorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjMzItbGludXggYi9tZXRhL3NpdGUvcG93ZXJwYzMyLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOTI5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvcG93ZXJwYzMyLWxpbnV4CkBAIC0wLDAgKzEsMjc1IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9ib29sPSR7YWNfY3Zfc2l6ZW9mX2Jvb2w9MX0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTR9CithY19jdl9zaXplb2ZfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2ludF9wPSR7YWNfY3Zfc2l6ZW9mX2ludF9wPTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19wPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2NoYXI9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9NH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl93Y2hhcl90PSR7YWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NH0KK2FjX2N2X3R5cGVfX19pbnQ2ND0ke2FjX2N2X3R5cGVfX19pbnQ2ND1ub30KK2FjX2N2X3R5cGVfc2l6ZV90PSR7YWNfY3ZfdHlwZV9zaXplX3Q9eWVzfQorYWNfY3ZfdHlwZV92b2lkX3A9JHthY19jdl90eXBlX3ZvaWRfcD15ZXN9CithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KK2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3Zfc2N0cD0ke2FjX2N2X3NjdHA9bm99CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl90eXBlX3N0cnVjdF90aW1lc3BlYz0ke2FjX2N2X3R5cGVfc3RydWN0X3RpbWVzcGVjPXllc30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz15ZXN9CisKKyMgY29yZXV0aWxzCit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxOX0KKworIyBsaWJwY2FwCithY19jdl9saW51eF92ZXJzPSR7YWNfY3ZfbGludXhfdmVycz0yfQorCisjIG5hbm8KK2FjX2N2X3JlZ2V4ZWNfc2VnZmF1bHRfZW1wdHlzdHI9JHthY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPW5vfQorbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CisKKworIyBsaWJuZXQKK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KKworIyBzY3JlZW4KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQorCithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPSR7YWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9bm99CisKKyMgc29jYXQKK2FjX2N2X2lzcGVlZF9vZmZzZXQ9JHthY19jdl9pc3BlZWRfb2Zmc2V0PTEzfQorc2NfY3ZfdGVybWlvc19pc3BlZWQ9JHtzY19jdl90ZXJtaW9zX2lzcGVlZD15ZXN9CisKKyMgbGlua3MKK2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD0ke2FjX2N2X2xpYl9wbmdfcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdD15ZXN9CisKKyMgZGIKK2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9JHtkYl9jdl9mY250bF9mX3NldGZkPXllc30KK2RiX2N2X3NwcmludGZfY291bnQ9JHtkYl9jdl9zcHJpbnRmX2NvdW50PXllc30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyd9CisKKyMgcGhwCithY19jdl9wcmVhZD0ke2FjX2N2X3ByZWFkPW5vfQorYWNfY3ZfcHdyaXRlPSR7YWNfY3ZfcHdyaXRlPW5vfQorcGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PSR7cGhwX2N2X2xpYl9jb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPSR7Z2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD00fQorZ2xpYl9jdl91c2VfcGlkX3N1cnJvZ2F0ZT0ke2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZT0ke2dsaWJfY3ZfaGFzX19pbmxpbmU9eWVzfQorZ2xpYl9jdl9oYXNfX2lubGluZV9fPSR7Z2xpYl9jdl9oYXNfX2lubGluZV9fPXllc30KK2dsaWJfY3ZfaGFzaW5saW5lPSR7Z2xpYl9jdl9oYXNpbmxpbmU9eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CitnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPSR7Z2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj1ub30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfbXV0ZXhfdHJ5bG9ja19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD15ZXN9CitnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD15ZXN9CisKKyMgZXR0ZXJjYXAKK2V0dGVyY2FwX2N2X3R5cGVfc29ja2xlbl90PSR7ZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9eWVzfQorCisjIGxpYmVzbXRwCithY3hfd29ya2luZ19zbnByaW50Zj0ke2FjeF93b3JraW5nX3NucHJpbnRmPXllc30KKworIyBELUJVUworYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KKworIyBnbGliIDIuMAorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2ZfaW50bWF4X3Q9JHtnbGliX2N2X3NpemVvZl9pbnRtYXhfdD04fQorZ2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PSR7Z2xpYl9jdl9zaXplb2ZfcHRyZGlmZl90PTR9CitnbGliX2N2X3NpemVvZl9zaXplX3Q9JHtnbGliX2N2X3NpemVvZl9zaXplX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9JHtnbGliX2N2X3NpemVvZl9zeXN0ZW1fdGhyZWFkPTR9CitnbGliX2N2X3N5c191c2VfcGlkX25pY2VuZXNzX3N1cnJvZ2F0ZT0ke2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPXllc30KKworZ2xpYl9jdl9zdHJsY3B5PSR7Z2xpYl9jdl9zdHJsY3B5PW5vfQorCisjIGh0dHBwYworYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CisKKyMgbGZ0cAorYWNfY3ZfbmVlZF90cmlvPSR7YWNfY3ZfbmVlZF90cmlvPW5vfQorbGZ0cF9jdl92YV92YWxfY29weT0ke2xmdHBfY3ZfdmFfdmFsX2NvcHk9eWVzfQorCisjIGVkYgorZGJfY3Zfc3BpbmxvY2tzPSR7ZGJfY3Zfc3BpbmxvY2tzPW5vfQorCisjIGZnZXQKK2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfc25wcmludGZfd29ya3M9eWVzfQorY29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19iYXNlbmFtZV93b3Jrcz1ub30KK2NvbXBhdF9jdl9mdW5jX2Rpcm5hbWVfd29ya3M9JHtjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPW5vfQorCisjIHNscm4KK3Nscm5fY3ZfdmFfdmFsX2NvcHk9JHtzbHJuX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD00CithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIG9wZW5zc2gKK2FjX2N2X2hhdmVfYnJva2VuX2Rpcm5hbWU9JHthY19jdl9oYXZlX2Jyb2tlbl9kaXJuYW1lPSd5ZXMnfQorYWNfY3ZfaGF2ZV9zcGFjZV9kX25hbWVfaW5fc3RydWN0X2RpcmVudD0ke2FjX2N2X2hhdmVfc3BhY2VfZF9uYW1lX2luX3N0cnVjdF9kaXJlbnQ9J25vJ30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9J25vJ30KK2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0ke2FjX2N2X2hhdmVfb3BlbnB0eV9jdHR5X2J1Zz0neWVzJ30KK2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfYWNjcmlnaHRzX2luX21zZ2hkcj0nbm8nfQorYWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj0ke2FjX2N2X2hhdmVfY29udHJvbF9pbl9tc2doZHI9J3llcyd9CisKKyMgdmltCithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD0nNCd9CisKKyNtb2RwaHAgCithY19jdl9jX2JpZ2VuZGlhbl9waHA9JHthY19jdl9jX2JpZ2VuZGlhbl9waHA9eWVzfQorYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0ke2FjX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KKworIyBhcGFjaGUyIChub3RlIG90aGVyIGFwYWNoZSBzdGFuemEgaW4gdGhpcyBmaWxlKQorYXBfdm9pZF9wdHJfbHRfbG9uZz0ke2FwX3ZvaWRfcHRyX2x0X2xvbmc9bm99CithcHJfY3ZfdXNlX2xmczY0PSR7YXByX2N2X3VzZV9sZnM2ND15ZXN9CithcHJfY3ZfZXBvbGw9JHthcHJfY3ZfZXBvbGw9eWVzfQorYXByX2N2X3B0aHJlYWRzX2NmbGFncz0ke2Fwcl9jdl9wdGhyZWFkc19jZmxhZ3M9LXB0aHJlYWR9CithcHJfY3ZfcHRocmVhZHNfbGliPSR7YXByX2N2X3B0aHJlYWRzX2xpYj0tbHB0aHJlYWR9CithY19jdl9mdW5jX21tYXA9JHthY19jdl9mdW5jX21tYXA9eWVzfQorYWNfY3ZfZmlsZV9fZGV2X3plcm89JHthY19jdl9maWxlX19kZXZfemVybz15ZXN9CithY19jdl9zaXplb2Zfb2ZmX3Q9JHthY19jdl9zaXplb2Zfb2ZmX3Q9NH0KK2FjX2N2X3NpemVvZl9waWRfdD0ke2FjX2N2X3NpemVvZl9waWRfdD00fQorYWNfY3Zfc29ja2xlbl90PSR7YWNfY3Zfc29ja2xlbl90PXllc30KK2FjX2N2X3N0cnVjdF9ybGltaXQ9JHthY19jdl9zdHJ1Y3RfcmxpbWl0PXllc30KK2FjX2N2X25lZ2F0aXZlX2VhaT0ke2FjX2N2X25lZ2F0aXZlX2VhaT15ZXN9CithcHJfY3ZfZ2FpX2FkZHJjb25maWc9JHthcHJfY3ZfZ2FpX2FkZHJjb25maWc9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CisKKyMgYmludXRpbHMgKGxpYmliZXJ0eSkKK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl90eXBlX2ludD0ke2FjX2N2X3R5cGVfaW50PXllc30KK2FjX2N2X3R5cGVfdWludHB0cl90PSR7YWNfY3ZfdHlwZV91aW50cHRyX3Q9eWVzfQorbGliZXJ0eV9jdl91aW50NjQ9JHtsaWJlcnR5X2N2X3VpbnQ2ND11aW50NjRfdH0KKworI3NhbWJhCithY19jdl9mdW5jX21lbWNtcF93b3JraW5nPSR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXN9CitmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9JHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9CUk9LRU5fRkNOVEw2NF9MT0NLUz0ke3NhbWJhX2N2X0hBVkVfQlJPS0VOX0ZDTlRMNjRfTE9DS1M9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9HRVRHUk9VUFM9bm99CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSPSR7c2FtYmFfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj15ZXN9CitzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9JHtzYW1iYV9jdl9IQVZFX0JST0tFTl9SRUFERElSX05BTUU9bm99CitzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9JHtzYW1iYV9jdl9IQVZFX0M5OV9WU05QUklOVEY9eWVzfQorc2FtYmFfY3ZfSEFWRV9ERVY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9ERVY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9ERVZJQ0VfTUFKT1JfRk49JHtzYW1iYV9jdl9IQVZFX0RFVklDRV9NQUpPUl9GTj15ZXN9CitzYW1iYV9jdl9IQVZFX0RFVklDRV9NSU5PUl9GTj0ke3NhbWJhX2N2X0hBVkVfREVWSUNFX01JTk9SX0ZOPXllc30KK3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz0ke3NhbWJhX2N2X0hBVkVfRkNOVExfTE9DSz15ZXN9CitzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9JHtzYW1iYV9jdl9IQVZFX0ZUUlVOQ0FURV9FWFRFTkQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9JHtzYW1iYV9jdl9IQVZFX0lOTzY0X1Q9bm99CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfQ0hBTkdFX05PVElGWT15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfT1BMT0NLU19MSU5VWD15ZXN9CitzYW1iYV9jdl9IQVZFX0tFUk5FTF9TSEFSRV9NT0RFUz0ke3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPXllc30KK3NhbWJhX2N2X0hBVkVfTUFLRURFVj0ke3NhbWJhX2N2X0hBVkVfTUFLRURFVj15ZXN9CitzYW1iYV9jdl9IQVZFX01NQVA9JHtzYW1iYV9jdl9IQVZFX01NQVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9PRkY2NF9UPSR7c2FtYmFfY3ZfSEFWRV9PRkY2NF9UPW5vfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRTY0PXllc30KK3NhbWJhX2N2X0hBVkVfU0VOREZJTEU9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPXllc30KK3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9JHtzYW1iYV9jdl9IQVZFX1NUUlVDVF9GTE9DSzY0PXllc30KK3NhbWJhX2N2X0hBVkVfVFJVTkNBVEVEX1NBTFQ9JHtzYW1iYV9jdl9IQVZFX1RSVU5DQVRFRF9TQUxUPW5vfQorc2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7c2FtYmFfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPXllc30KK3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD0ke3NhbWJhX2N2X0hBVkVfV09SS0lOR19BRl9MT0NBTD15ZXN9CitzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD0ke3NhbWJhX2N2X0xJTlVYX0xGU19TVVBQT1JUPXllc30KK3NhbWJhX2N2X1JFQUxQQVRIX1RBS0VTX05VTEw9JHtzYW1iYV9jdl9SRUFMUEFUSF9UQUtFU19OVUxMPXllc30KK3NhbWJhX2N2X1JFUExBQ0VfSU5FVF9OVE9BPSR7c2FtYmFfY3ZfUkVQTEFDRV9JTkVUX05UT0E9bm99CitzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9JHtzYW1iYV9jdl9SRVBMQUNFX1JFQURESVI9bm99CitzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfREVWX1Q9eWVzfQorc2FtYmFfY3ZfU0laRU9GX0lOT19UPSR7c2FtYmFfY3ZfU0laRU9GX0lOT19UPXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND0ke3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PXllc30KK3NhbWJhX2N2X1VTRV9TRVRFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVEVVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFU1VJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9eWVzfQorc2FtYmFfY3ZfVVNFX1NFVFJFVUlEPSR7c2FtYmFfY3ZfVVNFX1NFVFJFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRVSURYPSR7c2FtYmFfY3ZfVVNFX1NFVFVJRFg9eWVzfQorc2FtYmFfY3ZfaGF2ZV9sb25nbG9uZz0ke3NhbWJhX2N2X2hhdmVfbG9uZ2xvbmc9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc2dpZD15ZXN9CitzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD0ke3NhbWJhX2N2X2hhdmVfc2V0cmVzdWlkPXllc30KKworIyBteXNxbAorbXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfc3ViPW5vfQorbXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPSR7bXlzcWxfY3ZfZnVuY19hdG9taWNfYWRkPW5vfQorCisKKyMgbGliYworbGliY19jdl9wcGNfbWFjaGluZT0ke2xpYmNfY3ZfcHBjX21hY2hpbmU9eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4aWJtPSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4aWJtPXllc30KK2xpYmNfY3ZfbWFiaV9pYm1sb25nZG91YmxlPSR7bGliY19jdl9tYWJpX2libWxvbmdkb3VibGU9eWVzfQorbGliY19jdl9tbG9uZ19kb3VibGVfMTI4PSR7bGliY19jdl9tbG9uZ19kb3VibGVfMTI4PXllc30KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS9wb3dlcnBjNjQtbGludXggYi9tZXRhL3NpdGUvcG93ZXJwYzY0LWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NGUyMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUvcG93ZXJwYzY0LWxpbnV4CkBAIC0wLDAgKzEsMzkgQEAKK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9jaGFyX3A9JHthY19jdl9zaXplb2ZfY2hhcl9wPTh9CithY19jdl9zaXplb2ZfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX2Zsb2F0PSR7YWNfY3Zfc2l6ZW9mX2Zsb2F0PTR9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2Zfc2hvcnRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0yfQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9jaGFyPTF9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmdfaW50PTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD04fQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBhcHIKK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKwpkaWZmIC0tZ2l0IGEvbWV0YS9zaXRlL3NoLWNvbW1vbiBiL21ldGEvc2l0ZS9zaC1jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRlNDE2YTJjCi0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3NoLWNvbW1vbgpAQCAtMCwwICsxLDIzOCBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ubworYWNfY3Zfc2l6ZW9mX19faW50NjQ9JHthY19jdl9zaXplb2ZfX19pbnQ2ND0wfQorYWNfY3Zfc2l6ZW9mX2NoYXI9JHthY19jdl9zaXplb2ZfY2hhcj0xfQorYWNfY3Zfc2l6ZW9mX2ludD0ke2FjX2N2X3NpemVvZl9pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9NH0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaG9ydD0ke2FjX2N2X3NpemVvZl9zaG9ydD0yfQorYWNfY3Zfc2l6ZW9mX3Nob3J0X2ludD0ke2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9Mn0KK2FjX2N2X3NpemVvZl9zaXplX3Q9JHthY19jdl9zaXplb2Zfc2l6ZV90PTR9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD00fQorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTh9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPTR9CithY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZ19sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz04fQorYWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPSR7YWNfY3Zfc2l6ZW9mX3NpZ25lZF9jaGFyPTF9CisKKyMgbHpvCithY19jdl9zaXplb2ZfY2hhcl9wPSR7YWNfY3Zfc2l6ZW9mX2NoYXJfcD00fQorCithY19jdl91Y2hhcj0ke2FjX2N2X3VjaGFyPW5vfQorYWNfY3ZfdWludD0ke2FjX2N2X3VpbnQ9eWVzfQorYWNfY3ZfdWxvbmc9JHthY19jdl91bG9uZz15ZXN9CithY19jdl91c2hvcnQ9JHthY19jdl91c2hvcnQ9eWVzfQorCithY19jdl90aW1lX3JfdHlwZT0ke2FjX2N2X3RpbWVfcl90eXBlPVBPU0lYfQorCisjIGFwYWNoZQorYWNfY3ZfZnVuY19wdGhyZWFkX2tleV9kZWxldGU9JHthY19jdl9mdW5jX3B0aHJlYWRfa2V5X2RlbGV0ZT15ZXN9CithcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9JHthcHJfY3ZfcHJvY2Vzc19zaGFyZWRfd29ya3M9bm99CithcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPSR7YXByX2N2X3RjcF9ub2RlbGF5X3dpdGhfY29yaz15ZXN9CithY19jdl9zaXplb2Zfc3NpemVfdD0ke2FjX2N2X3NpemVvZl9zc2l6ZV90PTR9CisKK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD0ke2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfaD1ub30KK2FjX2N2X2hlYWRlcl9uZXRpbmV0X3NjdHBfdWlvX2g9JHthY19jdl9oZWFkZXJfbmV0aW5ldF9zY3RwX3Vpb19oPW5vfQorYWNfY3Zfc2N0cD0ke2FjX2N2X3NjdHA9bm99CisKKyMgc3NoCithY19jdl9oYXZlX3NwYWNlX2RfbmFtZV9pbl9zdHJ1Y3RfZGlyZW50PSR7YWNfY3ZfZGlyZW50X2hhdmVfc3BhY2VfZF9uYW1lPXllc30KK2FjX2N2X2hhdmVfYnJva2VuX3NucHJpbnRmPSR7YWNfY3ZfaGF2ZV9icm9rZW5fc25wcmludGY9bm99CithY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9JHthY19jdl9oYXZlX2FjY3JpZ2h0c19pbl9tc2doZHI9bm99CithY19jdl9oYXZlX2NvbnRyb2xfaW5fbXNnaGRyPSR7YWNfY3ZfaGF2ZV9jb250cm9sX2luX21zZ2hkcj15ZXN9CithY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9JHthY19jdl9oYXZlX29wZW5wdHlfY3R0eV9idWc9eWVzfQorCisjIGNvcmV1dGlscwordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTl9CisKKyMgbGlicGNhcAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KKworIyBuYW5vCithY19jdl9yZWdleGVjX3NlZ2ZhdWx0X2VtcHR5c3RyPSR7YWNfY3ZfcmVnZXhlY19zZWdmYXVsdF9lbXB0eXN0cj1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorCisjIHNjcmVlbgorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9CisKK2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz0ke2FjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluaz15ZXN9CithY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9JHthY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KKworIyBzb2NhdAorYWNfY3ZfaXNwZWVkX29mZnNldD0ke2FjX2N2X2lzcGVlZF9vZmZzZXQ9MTN9CitzY19jdl90ZXJtaW9zX2lzcGVlZD0ke3NjX2N2X3Rlcm1pb3NfaXNwZWVkPXllc30KKworIyBsaW5rcworYWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PSR7YWNfY3ZfbGliX3BuZ19wbmdfY3JlYXRlX2luZm9fc3RydWN0PXllc30KKworIyBzYW1iYQorc2FtYmFfY3ZfSEFWRV9HRVRUSU1FT0ZEQVlfVFo9JHtzYW1iYV9jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj15ZXN9CitzYW1iYV9jdl9VU0VfU0VURVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRFVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVNVSUQ9JHtzYW1iYV9jdl9VU0VfU0VUUkVTVUlEPXllc30KK3NhbWJhX2N2X1VTRV9TRVRSRVVJRD0ke3NhbWJhX2N2X1VTRV9TRVRSRVVJRD15ZXN9CitzYW1iYV9jdl9VU0VfU0VUVUlEWD0ke3NhbWJhX2N2X1VTRV9TRVRVSURYPXllc30KK3NhbWJhX2N2X2hhdmVfc2V0cmVzZ2lkPSR7c2FtYmFfY3ZfaGF2ZV9zZXRyZXNnaWQ9eWVzfQorc2FtYmFfY3ZfaGF2ZV9zZXRyZXN1aWQ9JHtzYW1iYV9jdl9oYXZlX3NldHJlc3VpZD15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFPSR7c2FtYmFfY3ZfSEFWRV9TRU5ERklMRT15ZXN9CitzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9JHtzYW1iYV9jdl9IQVZFX1NFTkRGSUxFNjQ9eWVzfQorc2FtYmFfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD0ke3NhbWJhX2N2X0hBVkVfU0VDVVJFX01LU1RFTVA9eWVzfQorc2FtYmFfY3ZfSEFWRV9NTUFQPSR7c2FtYmFfY3ZfSEFWRV9NTUFQPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX09QTE9DS1NfTElOVVg9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9PUExPQ0tTX0xJTlVYPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX0NIQU5HRV9OT1RJRlk9JHtzYW1iYV9jdl9IQVZFX0tFUk5FTF9DSEFOR0VfTk9USUZZPXllc30KK3NhbWJhX2N2X0hBVkVfS0VSTkVMX1NIQVJFX01PREVTPSR7c2FtYmFfY3ZfSEFWRV9LRVJORUxfU0hBUkVfTU9ERVM9eWVzfQorc2FtYmFfY3ZfTElOVVhfTEZTX1NVUFBPUlQ9JHtzYW1iYV9jdl9MSU5VWF9MRlNfU1VQUE9SVD15ZXN9CitzYW1iYV9jdl9TVEFUX1NUQVRWRlM2ND0ke3NhbWJhX2N2X1NUQVRfU1RBVFZGUzY0PXllc30KK3NhbWJhX2N2X1NJWkVPRl9PRkZfVD0ke3NhbWJhX2N2X1NJWkVPRl9PRkZfVD15ZXN9CitzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9JHtzYW1iYV9jdl9TSVpFT0ZfSU5PX1Q9eWVzfQorc2FtYmFfY3ZfSEFWRV9TVFJVQ1RfRkxPQ0s2ND0ke3NhbWJhX2N2X0hBVkVfU1RSVUNUX0ZMT0NLNjQ9eWVzfQorCisjIGRiCitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CitkYl9jdl9hbGlnbl90PSR7ZGJfY3ZfYWxpZ25fdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWducF90PSR7ZGJfY3ZfYWxpZ25wX3Q9J3Vuc2lnbmVkIGxvbmcnfQorCisjIHBocAorYWNfY3ZfcHJlYWQ9JHthY19jdl9wcmVhZD1ub30KK2FjX2N2X3B3cml0ZT0ke2FjX2N2X3B3cml0ZT1ub30KK3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD0ke3BocF9jdl9saWJfY29va2llX2lvX2Z1bmN0aW9uc191c2Vfb2ZmNjRfdD15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmU9JHtnbGliX2N2X2hhc19faW5saW5lPXllc30KK2dsaWJfY3ZfaGFzX19pbmxpbmVfXz0ke2dsaWJfY3ZfaGFzX19pbmxpbmVfXz15ZXN9CitnbGliX2N2X2hhc2lubGluZT0ke2dsaWJfY3ZfaGFzaW5saW5lPXllc30KK2dsaWJfY3Zfc2FuZV9yZWFsbG9jPSR7Z2xpYl9jdl9zYW5lX3JlYWxsb2M9eWVzfQorZ2xpYl9jdl9zaXplb2ZfZ211dGV4PSR7Z2xpYl9jdl9zaXplb2ZfZ211dGV4PTI0fQorZ2xpYl9jdl91c2NvcmU9JHtnbGliX2N2X3VzY29yZT1ub30KK2dsaWJfY3ZfdmFfdmFsX2NvcHk9JHtnbGliX2N2X3ZhX3ZhbF9jb3B5PXllc30KK2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49JHtnbGliX2N2X3J0bGRnbG9iYWxfYnJva2VuPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2dldHNwZWNpZmljX3Bvc2l4PXllc30KK2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9JHtnbGliX2N2X3N5c19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3Bvc2l4PXllc30KKworIyBldHRlcmNhcAorZXR0ZXJjYXBfY3ZfdHlwZV9zb2NrbGVuX3Q9JHtldHRlcmNhcF9jdl90eXBlX3NvY2tsZW5fdD15ZXN9CisKKyMgbGliZXNtdHAKK2FjeF93b3JraW5nX3NucHJpbnRmPSR7YWN4X3dvcmtpbmdfc25wcmludGY9eWVzfQorCisjIEQtQlVTCithY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9JHthY19jdl9mdW5jX3Bvc2l4X2dldHB3bmFtX3I9eWVzfQorCisjIGdsaWIgMi4wCitnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9JHtnbGliX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MjR9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9NH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD00fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc3lzX3VzZV9waWRfbmljZW5lc3Nfc3Vycm9nYXRlPSR7Z2xpYl9jdl9zeXNfdXNlX3BpZF9uaWNlbmVzc19zdXJyb2dhdGU9eWVzfQorCitnbGliX2N2X3N0cmxjcHk9JHtnbGliX2N2X3N0cmxjcHk9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT15ZXN9CithY19jdl9hbGlnbm9mX2d1aW50MzI9NAorYWNfY3ZfYWxpZ25vZl9ndWludDY0PTgKK2FjX2N2X2FsaWdub2ZfdW5zaWduZWRfbG9uZz00CisKKyMgaHR0cHBjCithY19jdl9zdHJlcnJvcl9yX1NVU3YzPSR7YWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz1ub30KKworIyBqaWtlcworYWNfY3Zfc2l6ZW9mX3djaGFyX3Q9NAorCisjIGxmdHAKK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2xmdHBfY3ZfdmFfdmFsX2NvcHk9JHtsZnRwX2N2X3ZhX3ZhbF9jb3B5PXllc30KKworIyBlZGIKK2RiX2N2X3NwaW5sb2Nrcz0ke2RiX2N2X3NwaW5sb2Nrcz1ub30KKworIyBmZ2V0Citjb21wYXRfY3ZfZnVuY19zbnByaW50Zl93b3Jrcz0ke2NvbXBhdF9jdl9mdW5jX3NucHJpbnRmX3dvcmtzPXllc30KK2NvbXBhdF9jdl9mdW5jX2Jhc2VuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfYmFzZW5hbWVfd29ya3M9bm99Citjb21wYXRfY3ZfZnVuY19kaXJuYW1lX3dvcmtzPSR7Y29tcGF0X2N2X2Z1bmNfZGlybmFtZV93b3Jrcz1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT15ZXN9CisKKyMgc3RhcnR1cC1ub3RpZmljYXRpb24KK2xmX2N2X3NhbmVfcmVhbGxvYz15ZXMKKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD00CithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBiYXNoCithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CitiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPSR7YmFzaF9jdl9mdW5jX3NpZ3NldGptcD1taXNzaW5nfQorCisjIG15c3FsCitteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9JHtteXNxbF9jdl9mdW5jX2F0b21pY19zdWI9bm99CitteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9JHtteXNxbF9jdl9mdW5jX2F0b21pY19hZGQ9bm99CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZm5tYXRjaAorYWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPSR7YWNfY3ZfZnVuY19mbm1hdGNoX3dvcmtzPXllc30KKworIyByc3luYworcnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPSR7cnN5bmNfY3ZfSEFWRV9CUk9LRU5fTEFSR0VGSUxFPW5vfQorcnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPSR7cnN5bmNfY3ZfSEFWRV9TT0NLRVRQQUlSPXllc30KK3JzeW5jX2N2X0hBVkVfTE9OR0xPTkc9JHtyc3luY19jdl9IQVZFX0xPTkdMT05HPXllc30KK3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD0ke3JzeW5jX2N2X0hBVkVfT0ZGNjRfVD1ub30KK3JzeW5jX2N2X0hBVkVfU0hPUlRfSU5PX1Q9JHtyc3luY19jdl9IQVZFX1NIT1JUX0lOT19UPW5vfQorcnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPSR7cnN5bmNfY3ZfSEFWRV9VTlNJR05FRF9DSEFSPW5vfQorcnN5bmNfY3ZfSEFWRV9CUk9LRU5fUkVBRERJUj0ke3JzeW5jX2N2X0hBVkVfQlJPS0VOX1JFQURESVI9bm99Cityc3luY19jdl9IQVZFX0dFVFRJTUVPRkRBWV9UWj0ke3JzeW5jX2N2X0hBVkVfR0VUVElNRU9GREFZX1RaPXllc30KK3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj0ke3JzeW5jX2N2X0hBVkVfQzk5X1ZTTlBSSU5URj15ZXN9Cityc3luY19jdl9IQVZFX1NFQ1VSRV9NS1NURU1QPSR7cnN5bmNfY3ZfSEFWRV9TRUNVUkVfTUtTVEVNUD15ZXN9Cityc3luY19jdl9SRVBMQUNFX0lORVRfTlRPQT0ke3JzeW5jX2N2X1JFUExBQ0VfSU5FVF9OVE9BPW5vfQorcnN5bmNfY3ZfUkVQTEFDRV9JTkVUX0FUT049JHtyc3luY19jdl9SRVBMQUNFX0lORVRfQVRPTj1ub30KKworIyBsaWJ4ZmNlNHV0aWwKK3dpdGhfYnJva2VuX3B1dGVudj0ke3dpdGhfYnJva2VuX3B1dGVudj1ub30KKworIyBjbGFtYXYKK2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz0ke2NsYW1hdl9hdl9mdW5jX3dvcmtpbmdfc25wcmludGZfbG9uZz15ZXN9CitjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9JHtjbGFtYXZfYXZfaGF2ZV9pbl9wb3J0X3Q9eWVzfQorY2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PSR7Y2xhbWF2X2F2X2hhdmVfaW5fYWRkcl90PXllc30KK2FjX2N2X2Z1bmNfbW1hcF9maXhlZF9tYXBwZWQ9JHthY19jdl9mdW5jX21tYXBfZml4ZWRfbWFwcGVkPXllc30KKworIyBsaWJuZXQgCithY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9JHthY19jdl9sYmxfdW5hbGlnbmVkX2ZhaWw9bm99CithY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PSR7YWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD15ZXN9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUvc3BhcmMtbGludXggYi9tZXRhL3NpdGUvc3BhcmMtbGludXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkMGQ5YQotLS0gL2Rldi9udWxsCisrKyBiL21ldGEvc2l0ZS9zcGFyYy1saW51eApAQCAtMCwwICsxLDQ4IEBACithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm8KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTR9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9NH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD00fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9NH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT04fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfaW50PSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfbG9uZz00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0ke2FjX2N2X3NpemVvZl9zaWduZWRfY2hhcj0xfQorCithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9OH0KK2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT0ke2xpYmNfY3ZfbWxvbmdfZG91YmxlXzEyOGlibT15ZXN9CitsaWJjX2N2X21sb25nX2RvdWJsZV8xMjg9JHtsaWJjX2N2X21sb25nX2RvdWJsZV8xMjg9eWVzfQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2RvdWJsZT00CithY19jdl9jX2xvbmdfZG91YmxlPSR7YWNfY3ZfY19sb25nX2RvdWJsZT15ZXN9CisKKworYWNfY3ZfdWNoYXI9JHthY19jdl91Y2hhcj1ub30KK2FjX2N2X3VpbnQ9JHthY19jdl91aW50PXllc30KK2FjX2N2X3Vsb25nPSR7YWNfY3ZfdWxvbmc9eWVzfQorYWNfY3ZfdXNob3J0PSR7YWNfY3ZfdXNob3J0PXllc30KKworYWNfY3ZfdGltZV9yX3R5cGU9JHthY19jdl90aW1lX3JfdHlwZT1QT1NJWH0KK2Nvb2tpZV9pb19mdW5jdGlvbnNfdXNlX29mZjY0X3Q9JHtjb29raWVfaW9fZnVuY3Rpb25zX3VzZV9vZmY2NF90PXllc30KKworIyBtaW5pY29tCithbV9jdl9zeXNfcG9zaXhfdGVybWlvcz0ke2FtX2N2X3N5c19wb3NpeF90ZXJtaW9zPXllc30KKworCisjIGdldHRleHQKK2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPSR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzfQorCisjZ2xpYgorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9NH0KK2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0ke2dsaWJfY3Zfc2l6ZW9mX2dtdXRleD0yNH0gCitnbGliX2N2X3VzY29yZT0ke2dsaWJfY3ZfdXNjb3JlPW5vfQorZ2xpYl9jdl9zdGFja19ncm93cz0ke2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9bm99CisKKyNsaW51eAorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KZGlmZiAtLWdpdCBhL21ldGEvc2l0ZS94MzItbGludXggYi9tZXRhL3NpdGUveDMyLWxpbnV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZWU2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUveDMyLWxpbnV4CkBAIC0wLDAgKzEsMTAgQEAKKyMgZ2VuZXJhbAorYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPSR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTE2fQorYWNfY3Zfc2l6ZW9mX29mZl90PSR7YWNfY3Zfc2l6ZW9mX29mZl90PTh9CithY19jdl9zaXplb2ZfaW5vX3Q9JHthY19jdl9zaXplb2ZfaW5vX3Q9OH0KK2FjX2N2X3NpemVvZl9kZXZfdD0ke2FjX2N2X3NpemVvZl9kZXZfdD04fQorYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9JHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NH0KK2FjX2N2X2FsaWdub2ZfZG91YmxlPTgKKworIyBnbGliCitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9MzJ9CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4IGIvbWV0YS9zaXRlL3g4Nl82NC1saW51eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzNhOTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbWV0YS9zaXRlL3g4Nl82NC1saW51eApAQCAtMCwwICsxLDEzNiBAQAorIyBnZW5lcmFsCithY19jdl92YV92YWxfY29weT0ke2FjX2N2X3ZhX3ZhbF9jb3B5PW5vfQorYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPSR7YWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllc30KK2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz1ub30KK2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj0ke2FjX2N2X2Z1bmNfcG9zaXhfZ2V0cHduYW1fcj15ZXN9CithY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9JHthY19jdl9mdW5jX3NldHZidWZfcmV2ZXJzZWQ9bm99CithY19jdl9mdW5jX3N0YXRfZW1wdHlfc3RyaW5nX2J1Zz0ke2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19zdGF0X2lnbm9yZXNfdHJhaWxpbmdfc2xhc2g9JHthY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD1ub30KK2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9JHthY19saWJuZXRfaGF2ZV9wYWNrZXRfc29ja2V0PXllc30KK2FjX2N2X2xpbnV4X3ZlcnM9JHthY19jdl9saW51eF92ZXJzPTJ9CithY19jdl9uZWVkX3RyaW89JHthY19jdl9uZWVkX3RyaW89bm99CithY19jdl9zaXplb2ZfY2hhcj0ke2FjX2N2X3NpemVvZl9jaGFyPTF9CithY19jdl9zaXplb2ZfaW50PSR7YWNfY3Zfc2l6ZW9mX2ludD00fQorYWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2ludD0ke2FjX2N2X3NpemVvZl91bnNpZ25lZF9pbnQ9NH0KK2FjX2N2X3NpemVvZl9fX2ludDY0PSR7YWNfY3Zfc2l6ZW9mX19faW50NjQ9MH0KK2FjX2N2X3NpemVvZl9sb25nPSR7YWNfY3Zfc2l6ZW9mX2xvbmc9OH0KK2FjX2N2X3NpemVvZl91bnNpZ25lZF9sb25nPSR7YWNfY3Zfc2l6ZW9mX3Vuc2lnbmVkX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0ke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0xNn0KK2FjX2N2X3NpemVvZl9sb25nX2ludD0ke2FjX2N2X3NpemVvZl9sb25nX2ludD04fQorYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nX2xvbmc9OH0KK2FjX2N2X3NpemVvZl9vZmZfdD0ke2FjX2N2X3NpemVvZl9vZmZfdD04fQorYWNfY3Zfc2l6ZW9mX3Nob3J0PSR7YWNfY3Zfc2l6ZW9mX3Nob3J0PTJ9CithY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9JHthY19jdl9zaXplb2ZfdW5zaWduZWRfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD04fQorYWNfY3Zfc2l6ZW9mX3VpZF90PSR7YWNfY3Zfc2l6ZW9mX3VpZF90PTR9CithY19jdl9zaXplb2ZfZ2lkX3Q9JHthY19jdl9zaXplb2ZfZ2lkX3Q9NH0KK2FjX2N2X3NpemVvZl9pbm9fdD0ke2FjX2N2X3NpemVvZl9pbm9fdD04fQorYWNfY3Zfc2l6ZW9mX2Rldl90PSR7YWNfY3Zfc2l6ZW9mX2Rldl90PTh9CithY19jdl9zaXplb2Zfdm9pZF9wPSR7YWNfY3Zfc2l6ZW9mX3ZvaWRfcD04fQorYWNfY3Zfc3RyZXJyb3Jfcl9TVVN2Mz0ke2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9bm99CitkYl9jdl9hbGlnbnBfdD0ke2RiX2N2X2FsaWducF90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfYWxpZ25fdD0ke2RiX2N2X2FsaWduX3Q9J3Vuc2lnbmVkIGxvbmcgbG9uZyd9CitkYl9jdl9mY250bF9mX3NldGZkPSR7ZGJfY3ZfZmNudGxfZl9zZXRmZD15ZXN9CitkYl9jdl9zcHJpbnRmX2NvdW50PSR7ZGJfY3Zfc3ByaW50Zl9jb3VudD15ZXN9CisKKyMgZ2xpYgorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9NDB9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD04fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9OH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT1ub30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworbmFub19jdl9mdW5jX3JlZ2V4ZWNfc2Vndl9lbXB0eXN0cj0ke25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9bm99CitzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9JHtzYW1iYV9jdl9IQVZFX1ZBX0NPUFk9eWVzfQorc2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19iY29weV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPSR7c2NyZWVuX2N2X3N5c19maWZvX2Jyb2tlbl9pbXBsPXllc30KK3NjcmVlbl9jdl9zeXNfZmlmb191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfbWVtY3B5X292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPW5vfQorc2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9JHtzY3JlZW5fY3Zfc3lzX21lbW1vdmVfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfc2VsZWN0X2Jyb2tlbl9yZXR2YWw9JHtzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPW5vfQorc2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfbm9mcz1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c191c2FibGU9JHtzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPXllc30KK3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD0ke3NjcmVlbl9jdl9zeXNfdGVybWluZm9fdXNlZD15ZXN9Cit1dGlsc19jdl9zeXNfb3Blbl9tYXg9JHt1dGlsc19jdl9zeXNfb3Blbl9tYXg9MTAxNX0KKworIyBnZXR0ZXh0CithbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT0ke2FtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllc30KKworI2djYworYWNfY3ZfbGliX21fc2luPSR7YWNfY3ZfbGliX21fc2luPXllc30KKworI29yYml0CitsaWJJRExfY3ZfbG9uZ19sb25nX2Zvcm1hdD1sbAorCisjIGJhc2gKK2Jhc2hfY3ZfZnVuY19zaWdzZXRqbXA9JHtiYXNoX2N2X2Z1bmNfc2lnc2V0am1wPXByZXNlbnR9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTgKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworbGZfY3Zfc2FuZV9yZWFsbG9jPXllcworYXNfY3ZfdW5hbGlnbmVkX2FjY2Vzcz0ke2FzX2N2X3VuYWxpZ25lZF9hY2Nlc3M9eWVzfQorCisjdW5mczMKK25mc2RfY3ZfYnJva2VuX3NldGZzdWlkPSR7bmZzZF9jdl9icm9rZW5fc2V0ZnN1aWQ9MH0KK25mc2RfY3ZfZnVuY19zdGF0ZnM9JHtuZnNkX2N2X2Z1bmNfc3RhdGZzPXN0YXRmczJfYnNpemV9CituZnNkX2N2X2JzZF9zaWduYWxzPSR7bmZzZF9jdl9ic2Rfc2lnbmFscz15ZXN9CisKKyNhcHIKK2Fwcl9jdl90Y3Bfbm9kZWxheV93aXRoX2Nvcms9JHthcHJfY3ZfdGNwX25vZGVsYXlfd2l0aF9jb3JrPXllc30KKworIyBsZnRwCitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT1ub30KKworIyBncnViCithY19jdl9mdW5jX19fYXNobGRpMz1ubworYWNfY3ZfZnVuY19fX2FzaHJkaTM9bm8KK2FjX2N2X2Z1bmNfX19ic3dhcGRpMj1ubworYWNfY3ZfZnVuY19fX2Jzd2Fwc2kyPW5vCithY19jdl9mdW5jX19fbHNocmRpMz1ubworYWNfY3ZfZnVuY19fX3RyYW1wb2xpbmVfc2V0dXA9bm8KK2FjX2N2X2Z1bmNfX191Y21wZGkyPW5vCithY19jdl9mdW5jX19yZXN0Z3ByXzE0X3g9bm8KKworIyBjdnMKK2N2c19jdl9mdW5jX3ByaW50Zl9wdHI9JHtjdnNfY3ZfZnVuY19wcmludGZfcHRyPXllc30KKworIyBhdC1zcGkyLWNvcmUKK2FjX2N2X2FsaWdub2ZfY2hhcj0xCithY19jdl9hbGlnbm9mX2RiaW5kX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9kYmluZF9zdHJ1Y3Q9MQorYWNfY3ZfYWxpZ25vZl9kYnVzX2Jvb2xfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50MTZfdD0yCithY19jdl9hbGlnbm9mX2RidXNfaW50MzJfdD00CithY19jdl9hbGlnbm9mX2RidXNfaW50NjRfdD04CithY19jdl9hbGlnbm9mX2RvdWJsZT04CmRpZmYgLS1naXQgYS9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYyBiL21ldGEvc2l0ZS94ODZfNjQtbGludXgtdWNsaWJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9tZXRhL3NpdGUveDg2XzY0LWxpbnV4LXVjbGliYwpAQCAtMCwwICsxLDkxIEBACisjIGdlbmVyYWwKK2FjX2N2X3ZhX3ZhbF9jb3B5PSR7YWNfY3ZfdmFfdmFsX2NvcHk9bm99CithY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9JHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9eWVzfQorYWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPW5vfQorYWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPSR7YWNfY3ZfZnVuY19wb3NpeF9nZXRwd25hbV9yPXllc30KK2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD0ke2FjX2N2X2Z1bmNfc2V0dmJ1Zl9yZXZlcnNlZD1ub30KK2FjX2N2X2Z1bmNfc3RhdF9lbXB0eV9zdHJpbmdfYnVnPSR7YWNfY3ZfZnVuY19zdGF0X2VtcHR5X3N0cmluZ19idWc9bm99CithY19jdl9mdW5jX3N0YXRfaWdub3Jlc190cmFpbGluZ19zbGFzaD0ke2FjX2N2X2Z1bmNfc3RhdF9pZ25vcmVzX3RyYWlsaW5nX3NsYXNoPW5vfQorYWNfbGlibmV0X2hhdmVfcGFja2V0X3NvY2tldD0ke2FjX2xpYm5ldF9oYXZlX3BhY2tldF9zb2NrZXQ9eWVzfQorYWNfY3ZfbGludXhfdmVycz0ke2FjX2N2X2xpbnV4X3ZlcnM9Mn0KK2FjX2N2X25lZWRfdHJpbz0ke2FjX2N2X25lZWRfdHJpbz1ub30KK2FjX2N2X3NpemVvZl9jaGFyPSR7YWNfY3Zfc2l6ZW9mX2NoYXI9MX0KK2FjX2N2X3NpemVvZl9pbnQ9JHthY19jdl9zaXplb2ZfaW50PTR9CithY19jdl9zaXplb2ZfX19pbnQ2ND0ke2FjX2N2X3NpemVvZl9fX2ludDY0PTB9CithY19jdl9zaXplb2ZfbG9uZz0ke2FjX2N2X3NpemVvZl9sb25nPTh9CithY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9MTZ9CithY19jdl9zaXplb2ZfbG9uZ19pbnQ9JHthY19jdl9zaXplb2ZfbG9uZ19pbnQ9OH0KK2FjX2N2X3NpemVvZl9sb25nX2xvbmc9JHthY19jdl9zaXplb2ZfbG9uZ19sb25nPTh9CithY19jdl9zaXplb2Zfc2hvcnQ9JHthY19jdl9zaXplb2Zfc2hvcnQ9Mn0KK2FjX2N2X3NpemVvZl9zaG9ydF9pbnQ9JHthY19jdl9zaXplb2Zfc2hvcnRfaW50PTJ9CithY19jdl9zaXplb2Zfc2l6ZV90PSR7YWNfY3Zfc2l6ZW9mX3NpemVfdD04fQorYWNfY3Zfc2l6ZW9mX3ZvaWRfcD0ke2FjX2N2X3NpemVvZl92b2lkX3A9OH0KK2FjX2N2X3N0cmVycm9yX3JfU1VTdjM9JHthY19jdl9zdHJlcnJvcl9yX1NVU3YzPW5vfQorZGJfY3ZfYWxpZ25wX3Q9JHtkYl9jdl9hbGlnbnBfdD0ndW5zaWduZWQgbG9uZyBsb25nJ30KK2RiX2N2X2FsaWduX3Q9JHtkYl9jdl9hbGlnbl90PSd1bnNpZ25lZCBsb25nIGxvbmcnfQorZGJfY3ZfZmNudGxfZl9zZXRmZD0ke2RiX2N2X2ZjbnRsX2Zfc2V0ZmQ9eWVzfQorZGJfY3Zfc3ByaW50Zl9jb3VudD0ke2RiX2N2X3NwcmludGZfY291bnQ9eWVzfQorZ2xpYl9jdl9oYXNpbmxpbmU9JHtnbGliX2N2X2hhc2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lPSR7Z2xpYl9jdl9oYXNfX2lubGluZT15ZXN9CitnbGliX2N2X2hhc19faW5saW5lX189JHtnbGliX2N2X2hhc19faW5saW5lX189eWVzfQorZ2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PSR7Z2xpYl9jdl9sb25nX2xvbmdfZm9ybWF0PWxsfQorZ2xpYl9jdl9ydGxkZ2xvYmFsX2Jyb2tlbj0ke2dsaWJfY3ZfcnRsZGdsb2JhbF9icm9rZW49eWVzfQorZ2xpYl9jdl9zYW5lX3JlYWxsb2M9JHtnbGliX2N2X3NhbmVfcmVhbGxvYz15ZXN9CitnbGliX2N2X3NpemVvZl9nbXV0ZXg9JHtnbGliX2N2X3NpemVvZl9nbXV0ZXg9NDB9CitnbGliX2N2X3NpemVvZl9pbnRtYXhfdD0ke2dsaWJfY3Zfc2l6ZW9mX2ludG1heF90PTh9CitnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9JHtnbGliX2N2X3NpemVvZl9wdHJkaWZmX3Q9OH0KK2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD0ke2dsaWJfY3Zfc2l6ZW9mX3NpemVfdD04fQorZ2xpYl9jdl9zaXplb2Zfc3lzdGVtX3RocmVhZD0ke2dsaWJfY3Zfc2l6ZW9mX3N5c3RlbV90aHJlYWQ9OH0KK2dsaWJfY3Zfc3RhY2tfZ3Jvd3M9JHtnbGliX2N2X3N0YWNrX2dyb3dzPW5vfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9jb25kX3RpbWVkd2FpdF9wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9nZXRzcGVjaWZpY19wb3NpeD0ke2dsaWJfY3Zfc3lzX3B0aHJlYWRfZ2V0c3BlY2lmaWNfcG9zaXg9eWVzfQorZ2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PSR7Z2xpYl9jdl9zeXNfcHRocmVhZF9tdXRleF90cnlsb2NrX3Bvc2l4PXllc30KK2dsaWJfY3ZfdXNjb3JlPSR7Z2xpYl9jdl91c2NvcmU9bm99CitnbGliX2N2X3ZhX3ZhbF9jb3B5PSR7Z2xpYl9jdl92YV92YWxfY29weT1ub30KK25hbm9fY3ZfZnVuY19yZWdleGVjX3NlZ3ZfZW1wdHlzdHI9JHtuYW5vX2N2X2Z1bmNfcmVnZXhlY19zZWd2X2VtcHR5c3RyPW5vfQorc2FtYmFfY3ZfSEFWRV9WQV9DT1BZPSR7c2FtYmFfY3ZfSEFWRV9WQV9DT1BZPXllc30KK3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD0ke3NjcmVlbl9jdl9zeXNfYmNvcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD0ke3NjcmVlbl9jdl9zeXNfZmlmb19icm9rZW5faW1wbD15ZXN9CitzY3JlZW5fY3Zfc3lzX2ZpZm9fdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19maWZvX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX21lbWNweV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1jcHlfb3ZlcmxhcD1ub30KK3NjcmVlbl9jdl9zeXNfbWVtbW92ZV9vdmVybGFwPSR7c2NyZWVuX2N2X3N5c19tZW1tb3ZlX292ZXJsYXA9bm99CitzY3JlZW5fY3Zfc3lzX3NlbGVjdF9icm9rZW5fcmV0dmFsPSR7c2NyZWVuX2N2X3N5c19zZWxlY3RfYnJva2VuX3JldHZhbD1ub30KK3NjcmVlbl9jdl9zeXNfc29ja2V0c19ub2ZzPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX25vZnM9bm99CitzY3JlZW5fY3Zfc3lzX3NvY2tldHNfdXNhYmxlPSR7c2NyZWVuX2N2X3N5c19zb2NrZXRzX3VzYWJsZT15ZXN9CitzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9JHtzY3JlZW5fY3Zfc3lzX3Rlcm1pbmZvX3VzZWQ9eWVzfQordXRpbHNfY3Zfc3lzX29wZW5fbWF4PSR7dXRpbHNfY3Zfc3lzX29wZW5fbWF4PTEwMTV9CisKKyMgZ2V0dGV4dAorYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9JHthbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT15ZXN9CisKKyMgZ2xpYi0yLjAKK2dsaWJfY3ZfdXNlX3BpZF9zdXJyb2dhdGU9JHtnbGliX2N2X3VzZV9waWRfc3Vycm9nYXRlPXllc30KK2FjX2N2X2FsaWdub2ZfZ3VpbnQzMj00CithY19jdl9hbGlnbm9mX2d1aW50NjQ9OAorYWNfY3ZfYWxpZ25vZl91bnNpZ25lZF9sb25nPTgKKworIyBsaWJpZGwKK2xpYklETF9jdl9sb25nX2xvbmdfZm9ybWF0PSR7bGliSURMX2N2X2xvbmdfbG9uZ19mb3JtYXQ9bGx9CisKKyMgT1JCaXQyCithY19jdl9hbGlnbm9mX0NPUkJBX2Jvb2xlYW49MQorYWNfY3ZfYWxpZ25vZl9DT1JCQV9jaGFyPTEKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZG91YmxlPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfZmxvYXQ9NAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nPTQKK2FjX2N2X2FsaWdub2ZfQ09SQkFfbG9uZ19kb3VibGU9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9sb25nX2xvbmc9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9vY3RldD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3BvaW50ZXI9OAorYWNfY3ZfYWxpZ25vZl9DT1JCQV9zaG9ydD0yCithY19jdl9hbGlnbm9mX0NPUkJBX3N0cnVjdD0xCithY19jdl9hbGlnbm9mX0NPUkJBX3djaGFyPTIKKworIyBzdGFydHVwLW5vdGlmaWNhdGlvbgorbGZfY3Zfc2FuZV9yZWFsbG9jPSR7bGZfY3Zfc2FuZV9yZWFsbG9jPXllc30KKworIyBsZnRwCitsZnRwX2N2X3ZhX3ZhbF9jb3B5PSR7bGZ0cF9jdl92YV92YWxfY29weT1ub30KKworIyBzbHJuCitzbHJuX2N2X3ZhX3ZhbF9jb3B5PSR7c2xybl9jdl92YV92YWxfY29weT1ub30K